<?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>201611</bug_id>
          
          <creation_ts>2019-09-09 12:25:21 -0700</creation_ts>
          <short_desc>Add Babylon demos</short_desc>
          <delta_ts>2019-09-09 14:16:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Lee">jonlee</reporter>
          <assigned_to name="Jon Lee">jonlee</assigned_to>
          <cc>dino</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1569240</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2019-09-09 12:25:21 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569251</commentid>
    <comment_count>1</comment_count>
      <attachid>378396</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2019-09-09 12:38:54 -0700</bug_when>
    <thetext>Created attachment 378396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569256</commentid>
    <comment_count>2</comment_count>
      <attachid>378398</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2019-09-09 12:50:40 -0700</bug_when>
    <thetext>Created attachment 378398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569295</commentid>
    <comment_count>3</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2019-09-09 14:15:29 -0700</bug_when>
    <thetext>Committed r249666: &lt;https://trac.webkit.org/changeset/249666&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569296</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-09 14:16:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/55197502&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569297</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-09 14:16:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/55197505&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378396</attachid>
            <date>2019-09-09 12:38:54 -0700</date>
            <delta_ts>2019-09-09 12:50:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201611-20190909123852.patch</filename>
            <type>text/plain</type>
            <size>9378734</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NjU2CmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQu
b3JnL0NoYW5nZUxvZyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCmluZGV4IGQyNDg5
NjZhYmU0OGQ4YmQyNjY0ZWRiYmVmN2U4ZDc5ZGMxYjJjMjcuLmFlMTg0NGM4NzdhZDY1ODM5MDY2
M2M0MWU5NTBkNDIwMTY3NGQ0NDIgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hh
bmdlTG9nCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTktMDktMDkgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBCYWJ5bG9uIGRlbW9zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDE2MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGRlbW9zL3dlYmdwdS9iYWJ5bG9uL0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAq
IGRlbW9zL3dlYmdwdS9iYWJ5bG9uL2JhYnlsb25XZWJHcHUubWF4LmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBkZW1vcy93ZWJncHUvYmFieWxvbi9sb2dvLnN2ZzogQWRkZWQuCisgICAgICAgICogZGVt
b3Mvd2ViZ3B1L2JhYnlsb24vb25lSGVsbWV0V2ViR1BVLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGRlbW9zL3dlYmdwdS9iYWJ5bG9uL29uZUhlbG1ldFdlYkdQVUdMU0xTaGFkZXJzLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBkZW1vcy93ZWJncHUvYmFieWxvbi9vbmVIZWxtZXRXZWJHUFVXU0xTaGFk
ZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkZW1vcy93ZWJncHUvYmFieWxvbi9vbmVTcGhlcmVX
ZWJHUFUuaHRtbDogQWRkZWQuCisgICAgICAgICogZGVtb3Mvd2ViZ3B1L2JhYnlsb24vb25lU3Bo
ZXJlV2ViR1BVR0xTTFNoYWRlcnMuanM6IEFkZGVkLgorICAgICAgICAqIGRlbW9zL3dlYmdwdS9i
YWJ5bG9uL29uZVNwaGVyZVdlYkdQVVdTTFNoYWRlcnMuanM6IEFkZGVkLgorICAgICAgICAqIGRl
bW9zL3dlYmdwdS9iYWJ5bG9uL3ZlcnRleFNoYWRlckdMU0wxLmdsc2w6IEFkZGVkLgorCiAyMDE5
LTA5LTA5ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYm9pZHMg
dGltZSB0ZXN0CmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9i
YWJ5bG9uL0xJQ0VOU0UgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9u
L0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzM0MWVkOGI1OTcxZjhjN2ZlYjQ4NDRmZjA4MTBkZmU1Zjhk
OTk2MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1
L2JhYnlsb24vTElDRU5TRQpAQCAtMCwwICsxLDkxIEBACitCYWJ5bG9uLmpzIFdlYnNpdGUKKz09
PT09PT09PT09PT09PT09PQorCit3d3cuYmFieWxvbmpzLmNvbSBzaXRlLgorCitGb3IgcXVlc3Rp
b25zLCBwbGVhc2UgdXNlIG91ciBbZm9ydW1dKGh0dHBzOi8vZm9ydW0uYmFieWxvbmpzLmNvbSkK
K1NvdXJjZXMgZm9yIEJhYnlsb24uanMgYXJlIGluIGEgc2VwYXJhdGUgW3JlcG9zaXRvcnldKGh0
dHBzOi8vZ2l0aHViLmNvbS9CYWJ5bG9uSlMvQmFieWxvbi5qcykKKworRG9jdW1lbnRhdGlvbiBj
YW4gYmUgZm91bmQgW2hlcmVdKGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20pCisKKworIyMgQXBh
Y2hlIExpY2Vuc2UgMi4wIChBcGFjaGUpCisKK0FwYWNoZSBMaWNlbnNlCitWZXJzaW9uIDIuMCwg
SmFudWFyeSAyMDA0CitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKK1RFUk1TIEFO
RCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisj
IyMgRGVmaW5pdGlvbnMuCisKKyJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29u
ZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5l
ZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisiTGljZW5zb3Ii
IHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieSB0
aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyJMZWdh
bCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBh
bGwgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJl
IHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMg
b2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0
IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3Vj
aCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVy
c2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNo
YXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyJZ
b3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkg
ZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworIlNvdXJj
ZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNh
dGlvbnMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUs
IGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworIk9iamVj
dCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwgdHJh
bnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1
dCBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50
YXRpb24sIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworIldvcmsiIHNo
YWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2Jq
ZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQg
YnkgYSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8g
dGhlIHdvcmsgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4K
KworIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291
cmNlIG9yIE9iamVjdCBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRo
ZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25z
LCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMgcmVwcmVzZW50LCBhcyBhIHdo
b2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMgb2Yg
dGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRo
YXQgcmVtYWluIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1l
KSB0byB0aGUgaW50ZXJmYWNlcyBvZiwgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhl
cmVvZi4KKworIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlw
LCBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2Rp
ZmljYXRpb25zIG9yIGFkZGl0aW9ucyB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0
aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBp
bmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lciBvciBieSBhbiBpbmRp
dmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2Yg
dGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24s
ICJzdWJtaXR0ZWQiIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3Jp
dHRlbiBjb21tdW5pY2F0aW9uIHNlbnQgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRh
dGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tbXVuaWNhdGlvbiBvbiBlbGVj
dHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywgYW5kIGlz
c3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9m
LCB0aGUgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmlu
ZyB0aGUgV29yaywgYnV0IGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3Vv
dXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29w
eXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisiQ29udHJpYnV0b3IiIHNo
YWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBvbiBi
ZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNv
ciBhbmQgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyMjIyBH
cmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4KKworU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNv
bmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMg
dG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwg
cm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2Us
IHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkg
cGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFdvcmsgYW5kIHN1Y2ggRGVy
aXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyMjIyBHcmFudCBvZiBQ
YXRlbnQgTGljZW5zZS4KKworU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg
dGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVy
cGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVl
LCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBs
aWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBv
cnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBh
cHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggQ29u
dHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyIENvbnRyaWJ1
dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykg
d2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVk
LiBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAo
aW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxs
ZWdpbmcgdGhhdCB0aGUgV29yayBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGlu
IHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJp
bmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRo
aXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBz
dWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyMjIyBSZWRpc3RyaWJ1dGlvbi4KKworWW91IG1h
eSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRp
dmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0
aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UgbWVl
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKzEuIFlvdSBtdXN0IGdpdmUgYW55IG90aGVy
IHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhp
cyBMaWNlbnNlOyBhbmQKKworMi4gWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRv
IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmls
ZXM7IGFuZAorCiszLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkg
RGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRl
bnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZv
cm0gb2YgdGhlIFdvcmssIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRh
aW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCis0LiBJZiB0aGUg
V29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cyBkaXN0cmli
dXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0
IGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRh
aW5lZCB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhh
dCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4g
YXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4
dCBmaWxlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhp
biB0aGUgU291cmNlIGZvcm0gb3IgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0
aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5
IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBu
b3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzIG9mIHRoZSBOT1RJQ0UgZmlsZSBh
cmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQgZG8gbm90IG1vZGlmeSB0aGUg
TGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24gbm90aWNlcyB3aXRoaW4g
RGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUgb3IgYXMgYW4g
YWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkIHRoYXQg
c3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZCBh
cyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKK1lvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdo
dCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZCBtYXkgcHJvdmlkZSBhZGRpdGlv
bmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJl
cHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IgZm9y
IGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2Us
IHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29t
cGxpZXMgd2l0aCB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisjIyMg
U3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLgorCitVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3Rh
dGUgb3RoZXJ3aXNlLCBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZv
ciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1
bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFu
eSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJv
dmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkgdGhlIHRlcm1zIG9m
IGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQgd2l0
aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisjIyMgVHJhZGVtYXJr
cy4KKworVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0
cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBv
ZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3Vz
dG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJv
ZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworIyMjIERpc2NsYWltZXIg
b2YgV2FycmFudHkuCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoIENv
bnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lT
LCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJy
YW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5U
QUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29s
ZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVz
aW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55IHJpc2tzIGFzc29j
aWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5z
ZS4KKworIyMjIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCitJbiBubyBldmVudCBhbmQgdW5k
ZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNl
KSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkgbmVnbGlnZW50IGFjdHMpIG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUgbGlhYmxlIHRvIFlv
dSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBp
bmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlz
aW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFi
aWxpdHkgdG8gdXNlIHRoZSBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFn
ZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUg
b3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBv
ciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IgaGFzIGJlZW4gYWR2aXNlZCBvZiB0
aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisjIyMgQWNjZXB0aW5nIFdhcnJhbnR5
IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LgorCitXaGlsZSByZWRpc3RyaWJ1dGluZyB0aGUgV29y
ayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBh
bmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5k
ZW1uaXR5LCBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25z
aXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxp
Z2F0aW9ucywgWW91IG1heSBhY3Qgb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIg
c29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiBhbnkgb3RoZXIgQ29udHJpYnV0
b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQg
ZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSwg
b3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9m
IHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5
LgorCisjIyBFeHRlcm5hbCBkZXBlbmRlbmNpZXMKKy0gaGFuZC5qczogaHR0cDovL2hhbmRqcy5j
b2RlcGxleC5jb20KKworCisKKworCisKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5vcmcv
ZGVtb3Mvd2ViZ3B1L2JhYnlsb24vYmFieWxvbldlYkdwdS5tYXguanMgYi9XZWJzaXRlcy93ZWJr
aXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9uL2JhYnlsb25XZWJHcHUubWF4LmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmIwNDY5NTcyMWE5YWRlODMwYzMyMGVkNTMxMjVlMjk2NDI0NzZlMDYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9uL2JhYnlsb25X
ZWJHcHUubWF4LmpzCkBAIC0wLDAgKzEsMTY5MjYxIEBACisoZnVuY3Rpb24gd2VicGFja1VuaXZl
cnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkgeworCWlmKHR5cGVvZiBleHBvcnRz
ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JykKKwkJbW9kdWxlLmV4
cG9ydHMgPSBmYWN0b3J5KCk7CisJZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24n
ICYmIGRlZmluZS5hbWQpCisJCWRlZmluZSgiYmFieWxvbmpzIiwgW10sIGZhY3RvcnkpOworCWVs
c2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKQorCQlleHBvcnRzWyJiYWJ5bG9uanMi
XSA9IGZhY3RvcnkoKTsKKwllbHNlCisJCXJvb3RbIkJBQllMT04iXSA9IGZhY3RvcnkoKTsKK30p
KCh0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIGdsb2JhbCAhPT0g
InVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0aGlzKSwgZnVuY3Rpb24oKSB7CityZXR1cm4gLyoqKioq
Ki8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAorLyoqKioqKi8gCS8v
IFRoZSBtb2R1bGUgY2FjaGUKKy8qKioqKiovIAl2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9Owor
LyoqKioqKi8KKy8qKioqKiovIAkvLyBUaGUgcmVxdWlyZSBmdW5jdGlvbgorLyoqKioqKi8gCWZ1
bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHsKKy8qKioqKiovCisvKioqKioq
LyAJCS8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZQorLyoqKioqKi8gCQlpZihpbnN0YWxs
ZWRNb2R1bGVzW21vZHVsZUlkXSkgeworLyoqKioqKi8gCQkJcmV0dXJuIGluc3RhbGxlZE1vZHVs
ZXNbbW9kdWxlSWRdLmV4cG9ydHM7CisvKioqKioqLyAJCX0KKy8qKioqKiovIAkJLy8gQ3JlYXRl
IGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSkKKy8qKioqKiovIAkJdmFy
IG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0geworLyoqKioqKi8gCQkJaTog
bW9kdWxlSWQsCisvKioqKioqLyAJCQlsOiBmYWxzZSwKKy8qKioqKiovIAkJCWV4cG9ydHM6IHt9
CisvKioqKioqLyAJCX07CisvKioqKioqLworLyoqKioqKi8gCQkvLyBFeGVjdXRlIHRoZSBtb2R1
bGUgZnVuY3Rpb24KKy8qKioqKiovIAkJbW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhw
b3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7CisvKioq
KioqLworLyoqKioqKi8gCQkvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkCisvKioqKioqLyAJ
CW1vZHVsZS5sID0gdHJ1ZTsKKy8qKioqKiovCisvKioqKioqLyAJCS8vIFJldHVybiB0aGUgZXhw
b3J0cyBvZiB0aGUgbW9kdWxlCisvKioqKioqLyAJCXJldHVybiBtb2R1bGUuZXhwb3J0czsKKy8q
KioqKiovIAl9CisvKioqKioqLworLyoqKioqKi8KKy8qKioqKiovIAkvLyBleHBvc2UgdGhlIG1v
ZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKQorLyoqKioqKi8gCV9fd2VicGFja19y
ZXF1aXJlX18ubSA9IG1vZHVsZXM7CisvKioqKioqLworLyoqKioqKi8gCS8vIGV4cG9zZSB0aGUg
bW9kdWxlIGNhY2hlCisvKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVk
TW9kdWxlczsKKy8qKioqKiovCisvKioqKioqLyAJLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBm
b3IgaGFybW9ueSBleHBvcnRzCisvKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVu
Y3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7CisvKioqKioqLyAJCWlmKCFfX3dlYnBhY2tf
cmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHsKKy8qKioqKiovIAkJCU9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0p
OworLyoqKioqKi8gCQl9CisvKioqKioqLyAJfTsKKy8qKioqKiovCisvKioqKioqLyAJLy8gZGVm
aW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0cworLyoqKioqKi8gCV9fd2VicGFja19yZXF1aXJlX18u
ciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHsKKy8qKioqKiovIAkJaWYodHlwZW9mIFN5bWJvbCAhPT0g
J3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7CisvKioqKioqLyAJCQlPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9k
dWxlJyB9KTsKKy8qKioqKiovIAkJfQorLyoqKioqKi8gCQlPYmplY3QuZGVmaW5lUHJvcGVydHko
ZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pOworLyoqKioqKi8gCX07Cisv
KioqKioqLworLyoqKioqKi8gCS8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdAorLyoq
KioqKi8gCS8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdAorLyoq
KioqKi8gCS8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRo
ZSBucworLyoqKioqKi8gCS8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5z
IG9iamVjdAorLyoqKioqKi8gCS8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmUKKy8q
KioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkgewor
LyoqKioqKi8gCQlpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVl
KTsKKy8qKioqKiovIAkJaWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTsKKy8qKioqKiovIAkJaWYo
KG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVl
Ll9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTsKKy8qKioqKiovIAkJdmFyIG5zID0gT2JqZWN0LmNy
ZWF0ZShudWxsKTsKKy8qKioqKiovIAkJX193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTsKKy8qKioq
KiovIAkJT2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTog
dHJ1ZSwgdmFsdWU6IHZhbHVlIH0pOworLyoqKioqKi8gCQlpZihtb2RlICYgMiAmJiB0eXBlb2Yg
dmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQo
bnVsbCwga2V5KSk7CisvKioqKioqLyAJCXJldHVybiBuczsKKy8qKioqKiovIAl9OworLyoqKioq
Ki8KKy8qKioqKiovIAkvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmls
aXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlcworLyoqKioqKi8gCV9fd2VicGFja19yZXF1aXJl
X18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkgeworLyoqKioqKi8gCQl2YXIgZ2V0dGVyID0gbW9kdWxl
ICYmIG1vZHVsZS5fX2VzTW9kdWxlID8KKy8qKioqKiovIAkJCWZ1bmN0aW9uIGdldERlZmF1bHQo
KSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6CisvKioqKioqLyAJCQlmdW5jdGlvbiBn
ZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9OworLyoqKioqKi8gCQlfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7CisvKioqKioqLyAJCXJldHVybiBn
ZXR0ZXI7CisvKioqKioqLyAJfTsKKy8qKioqKiovCisvKioqKioqLyAJLy8gT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsCisvKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5v
ID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9OworLyoqKioqKi8KKy8qKioq
KiovIAkvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfXworLyoqKioqKi8gCV9fd2VicGFja19yZXF1
aXJlX18ucCA9ICIiOworLyoqKioqKi8KKy8qKioqKiovCisvKioqKioqLyAJLy8gTG9hZCBlbnRy
eSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzCisvKioqKioqLyAJcmV0dXJuIF9fd2VicGFja19y
ZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gIi4vTGVnYWN5L2xlZ2FjeS50cyIpOwor
LyoqKioqKi8gfSkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqLyAoeworCisvKioqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuLi9ub2RlX21vZHVsZXMvdHNsaWIv
dHNsaWIuZXM2LmpzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBfX2V4dGVuZHMsIF9fYXNzaWduLCBfX3Jl
c3QsIF9fZGVjb3JhdGUsIF9fcGFyYW0sIF9fbWV0YWRhdGEsIF9fYXdhaXRlciwgX19nZW5lcmF0
b3IsIF9fZXhwb3J0U3RhciwgX192YWx1ZXMsIF9fcmVhZCwgX19zcHJlYWQsIF9fYXdhaXQsIF9f
YXN5bmNHZW5lcmF0b3IsIF9fYXN5bmNEZWxlZ2F0b3IsIF9fYXN5bmNWYWx1ZXMsIF9fbWFrZVRl
bXBsYXRlT2JqZWN0LCBfX2ltcG9ydFN0YXIsIF9faW1wb3J0RGVmYXVsdCAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJfX2V4dGVuZHMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9fZXh0ZW5kczsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfX2Fzc2lnbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX19hc3NpZ247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX19yZXN0IiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfX3Jlc3Q7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX19kZWNvcmF0ZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX19kZWNvcmF0ZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJf
X3BhcmFtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX3BhcmFtOyB9KTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIl9fbWV0YWRhdGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fbWV0YWRhdGE7IH0pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiX19hd2FpdGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX2F3YWl0ZXI7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX19nZW5lcmF0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9fZ2VuZXJhdG9yOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9fZXhwb3J0U3RhciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX19leHBvcnRTdGFyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9fdmFs
dWVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX3ZhbHVlczsgfSk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJfX3JlYWQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fcmVhZDsgfSk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJfX3NwcmVhZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19zcHJlYWQ7IH0pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiX19hd2FpdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19hd2FpdDsgfSk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJfX2FzeW5jR2VuZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
X2FzeW5jR2VuZXJhdG9yOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9fYXN5bmNEZWxlZ2F0b3Ii
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fYXN5bmNEZWxlZ2F0b3I7IH0pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiX19hc3luY1ZhbHVlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19hc3luY1ZhbHVlczsg
fSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJfX21ha2VUZW1wbGF0ZU9iamVjdCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX19tYWtlVGVtcGxhdGVPYmplY3Q7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX19p
bXBvcnRTdGFyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX2ltcG9ydFN0YXI7IH0pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiX19pbXBvcnREZWZhdWx0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX2ltcG9y
dERlZmF1bHQ7IH0pOworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitDb3B5cmlnaHQgKGMpIE1p
Y3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0xpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5
IG5vdCB1c2UKK3RoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCitMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitUSElTIENPREUgSVMgUFJPVklERUQgT04g
QU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
CitLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1J
VEFUSU9OIEFOWSBJTVBMSUVECitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLAorTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlO
RlJJTkdFTUVOVC4KKworU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zCithbmQgbGltaXRhdGlvbnMgdW5k
ZXIgdGhlIExpY2Vuc2UuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogZ2xvYmFsIFJlZmxl
Y3QsIFByb21pc2UgKi8KKwordmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7Cisg
ICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fAorICAgICAgICAoeyBf
X3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9f
cHJvdG9fXyA9IGI7IH0pIHx8CisgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAg
aW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9OworICAgIHJldHVy
biBleHRlbmRTdGF0aWNzKGQsIGIpOworfTsKKworZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHsK
KyAgICBleHRlbmRTdGF0aWNzKGQsIGIpOworICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0
cnVjdG9yID0gZDsgfQorICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVh
dGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTsKK30KKwordmFy
IF9fYXNzaWduID0gZnVuY3Rpb24oKSB7CisgICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8
IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHsKKyAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBh
cmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICBzID0gYXJndW1lbnRz
W2ldOworICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdDsKKyAgICB9CisgICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7Cit9CisKK2Z1bmN0aW9uIF9fcmVzdChzLCBlKSB7CisgICAgdmFyIHQgPSB7fTsKKyAg
ICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh
bGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMCkKKyAgICAgICAgdFtwXSA9IHNbcF07CisgICAg
aWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0g
ImZ1bmN0aW9uIikKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJv
cGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykgaWYgKGUuaW5kZXhPZihwW2ldKSA8
IDApCisgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTsKKyAgICByZXR1cm4gdDsKK30KKwor
ZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgeworICAg
IHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0g
bnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5
KSA6IGRlc2MsIGQ7CisgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBl
b2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUo
ZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOworICAgIGVsc2UgZm9yICh2YXIgaSA9IGRl
Y29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkg
ciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQs
IGtleSkpIHx8IHI7CisgICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KHRhcmdldCwga2V5LCByKSwgcjsKK30KKworZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4
LCBkZWNvcmF0b3IpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29y
YXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH0KK30KKworZnVuY3Rpb24gX19tZXRhZGF0
YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkgeworICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9
PT0gIm9iamVjdCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09ICJmdW5jdGlvbiIpIHJl
dHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTsKK30KKwor
ZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgewor
ICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJl
amVjdCkgeworICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChn
ZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9CisgICAg
ICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yWyJ0aHJv
dyJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH0KKyAgICAgICAgZnVuY3Rp
b24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBu
ZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4o
ZnVsZmlsbGVkLCByZWplY3RlZCk7IH0KKyAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJh
dG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOworICAgIH0pOwor
fQorCitmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7CisgICAgdmFyIF8gPSB7
IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyBy
ZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZzsKKyAgICByZXR1
cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgInRocm93IjogdmVyYigxKSwgInJldHVybiI6IHZlcmIo
MikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3Jd
ID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZzsKKyAgICBmdW5jdGlvbiB2ZXJiKG4p
IHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH0KKyAgICBm
dW5jdGlvbiBzdGVwKG9wKSB7CisgICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJH
ZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7CisgICAgICAgIHdoaWxlIChfKSB0cnkg
eworICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVsicmV0dXJu
Il0gOiBvcFswXSA/IHlbInRocm93Il0gfHwgKCh0ID0geVsicmV0dXJuIl0pICYmIHQuY2FsbCh5
KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0
OworICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdOwor
ICAgICAgICAgICAgc3dpdGNoIChvcFswXSkgeworICAgICAgICAgICAgICAgIGNhc2UgMDogY2Fz
ZSAxOiB0ID0gb3A7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyBy
ZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07CisgICAgICAgICAgICAgICAgY2Fz
ZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0g
Xy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09
PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwg
dFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0g
b3A7IGJyZWFrOyB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJd
KSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpOworICAgICAgICAgICAgICAgICAgICBfLnRy
eXMucG9wKCk7IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3AgPSBib2R5
LmNhbGwodGhpc0FyZywgXyk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkg
PSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH0KKyAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhy
b3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0
cnVlIH07CisgICAgfQorfQorCitmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgZXhwb3J0cykgewor
ICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBv
cnRzW3BdID0gbVtwXTsKK30KKworZnVuY3Rpb24gX192YWx1ZXMobykgeworICAgIHZhciBtID0g
dHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAw
OworICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pOworICAgIHJldHVybiB7CisgICAgICAgIG5l
eHQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8g
PSB2b2lkIDA7CisgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6
ICFvIH07CisgICAgICAgIH0KKyAgICB9OworfQorCitmdW5jdGlvbiBfX3JlYWQobywgbikgewor
ICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBvW1N5bWJvbC5pdGVy
YXRvcl07CisgICAgaWYgKCFtKSByZXR1cm4gbzsKKyAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwg
YXIgPSBbXSwgZTsKKyAgICB0cnkgeworICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBu
LS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTsKKyAgICB9
CisgICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9CisgICAgZmluYWxs
eSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0g
aVsicmV0dXJuIl0pKSBtLmNhbGwoaSk7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseSB7IGlm
IChlKSB0aHJvdyBlLmVycm9yOyB9CisgICAgfQorICAgIHJldHVybiBhcjsKK30KKworZnVuY3Rp
b24gX19zcHJlYWQoKSB7CisgICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVu
dHMubGVuZ3RoOyBpKyspCisgICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNb
aV0pKTsKKyAgICByZXR1cm4gYXI7Cit9CisKK2Z1bmN0aW9uIF9fYXdhaXQodikgeworICAgIHJl
dHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBf
X2F3YWl0KHYpOworfQorCitmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1
bWVudHMsIGdlbmVyYXRvcikgeworICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93
IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpOwor
ICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBp
LCBxID0gW107CisgICAgcmV0dXJuIGkgPSB7fSwgdmVyYigibmV4dCIpLCB2ZXJiKCJ0aHJvdyIp
LCB2ZXJiKCJyZXR1cm4iKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7
IHJldHVybiB0aGlzOyB9LCBpOworICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtu
XSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBx
LnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfQorICAgIGZ1
bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsg
c2V0dGxlKHFbMF1bM10sIGUpOyB9IH0KKyAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBp
bnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZp
bGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH0KKyAgICBmdW5jdGlvbiBmdWxmaWxs
KHZhbHVlKSB7IHJlc3VtZSgibmV4dCIsIHZhbHVlKTsgfQorICAgIGZ1bmN0aW9uIHJlamVjdCh2
YWx1ZSkgeyByZXN1bWUoInRocm93IiwgdmFsdWUpOyB9CisgICAgZnVuY3Rpb24gc2V0dGxlKGYs
IHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBd
WzFdKTsgfQorfQorCitmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHsKKyAgICB2YXIgaSwg
cDsKKyAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKCJuZXh0IiksIHZlcmIoInRocm93IiwgZnVuY3Rp
b24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoInJldHVybiIpLCBpW1N5bWJvbC5pdGVyYXRvcl0g
PSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpOworICAgIGZ1bmN0aW9uIHZlcmIobiwg
ZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFs
dWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09ICJyZXR1cm4iIH0gOiBmID8gZih2KSA6
IHY7IH0gOiBmOyB9Cit9CisKK2Z1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykgeworICAgIGlmICgh
U3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0
ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpOworICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVy
YXRvcl0sIGk7CisgICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVl
cyA9PT0gImZ1bmN0aW9uIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkg
PSB7fSwgdmVyYigibmV4dCIpLCB2ZXJiKCJ0aHJvdyIpLCB2ZXJiKCJyZXR1cm4iKSwgaVtTeW1i
b2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTsKKyAg
ICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJu
IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNl
dHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9CisgICAgZnVu
Y3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodiku
dGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVq
ZWN0KTsgfQorfQorCitmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykg
eworICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5
KGNvb2tlZCwgInJhdyIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJh
dzsgfQorICAgIHJldHVybiBjb29rZWQ7Cit9OworCitmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9k
KSB7CisgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDsKKyAgICB2YXIg
cmVzdWx0ID0ge307CisgICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYg
KE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTsK
KyAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmdW5j
dGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7CisgICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNN
b2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTsKK30KKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4uL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
Li9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIG5vIHN0YXRp
YyBleHBvcnRzIGZvdW5kICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisK
K3ZhciBnOworCisvLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZQorZyA9IChmdW5jdGlv
bigpIHsKKwlyZXR1cm4gdGhpczsKK30pKCk7CisKK3RyeSB7CisJLy8gVGhpcyB3b3JrcyBpZiBl
dmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApCisJZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKCJyZXR1cm4g
dGhpcyIpKCk7Cit9IGNhdGNoIChlKSB7CisJLy8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJl
ZmVyZW5jZSBpcyBhdmFpbGFibGUKKwlpZiAodHlwZW9mIHdpbmRvdyA9PT0gIm9iamVjdCIpIGcg
PSB3aW5kb3c7Cit9CisKKy8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcg
dG8gZG8gYWJvdXQgaXQuLi4KKy8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90
aGluZyBoZXJlLCBzbyBpdCdzCisvLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWds
b2JhbCkgeyAuLi59CisKK21vZHVsZS5leHBvcnRzID0gZzsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vQWN0aW9ucy9hYnN0cmFjdEFjdGlvbk1hbmFnZXIudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9BY3Rpb25zL2Fic3Ry
YWN0QWN0aW9uTWFuYWdlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQWJzdHJhY3RBY3Rpb25NYW5h
Z2VyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFic3RyYWN0QWN0aW9u
TWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQWJzdHJhY3RBY3Rpb25NYW5hZ2VyOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29u
c3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisKKy8qKgorICogQWJzdHJhY3Qg
Y2xhc3MgdXNlZCB0byBkZWNvdXBsZSBhY3Rpb24gTWFuYWdlciBmcm9tIHNjZW5lIGFuZCBtZXNo
ZXMuCisgKiBEbyBub3QgaW5zdGFudGlhdGUuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zCisgKi8KK3ZhciBBYnN0cmFjdEFjdGlvbk1h
bmFnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gQWJzdHJh
Y3RBY3Rpb25NYW5hZ2VyKCkgeworICAgICAgICAvKiogR2V0cyB0aGUgY3Vyc29yIHRvIHVzZSB3
aGVuIGhvdmVyaW5nIGl0ZW1zICovCisgICAgICAgIHRoaXMuaG92ZXJDdXJzb3IgPSAnJzsKKyAg
ICAgICAgLyoqIEdldHMgdGhlIGxpc3Qgb2YgYWN0aW9ucyAqLworICAgICAgICB0aGlzLmFjdGlv
bnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBh
IGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBtYW5hZ2VyIGlzIHJlY3Vyc2l2ZSBtZWFuaW5n
IHRoYXQgaXQgY2FuIHRyaWdnZXIgYWN0aW9uIGZyb20gY2hpbGRyZW4KKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuaXNSZWN1cnNpdmUgPSBmYWxzZTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEFic3RyYWN0QWN0aW9uTWFuYWdlciwgIkhhc1RyaWdnZXJzIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogRG9lcyBleGlzdCBvbmUgYWN0aW9uIG1hbmFnZXIgd2l0aCBhdCBs
ZWFzdCBvbmUgdHJpZ2dlcgorICAgICAgICAgKiovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgZm9yICh2YXIgdCBpbiBBYnN0cmFjdEFjdGlvbk1hbmFnZXIuVHJpZ2dl
cnMpIHsKKyAgICAgICAgICAgICAgICBpZiAoQWJzdHJhY3RBY3Rpb25NYW5hZ2VyLlRyaWdnZXJz
Lmhhc093blByb3BlcnR5KHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFic3RyYWN0
QWN0aW9uTWFuYWdlciwgIkhhc1BpY2tUcmlnZ2VycyIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERvZXMgZXhpc3Qgb25lIGFjdGlvbiBtYW5hZ2VyIHdpdGggYXQgbGVhc3Qgb25lIHBpY2sg
dHJpZ2dlcgorICAgICAgICAgKiovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgZm9yICh2YXIgdCBpbiBBYnN0cmFjdEFjdGlvbk1hbmFnZXIuVHJpZ2dlcnMpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoQWJzdHJhY3RBY3Rpb25NYW5hZ2VyLlRyaWdnZXJzLmhhc093blBy
b3BlcnR5KHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB0X2ludCA9IHBhcnNlSW50KHQp
OworICAgICAgICAgICAgICAgICAgICBpZiAodF9pbnQgPj0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBpY2tUcmln
Z2VyICYmIHRfaW50IDw9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25QaWNrVXBUcmlnZ2VyKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRG9lcyBleGlzdCBvbmUgYWN0aW9uIG1h
bmFnZXIgdGhhdCBoYW5kbGVzIGFjdGlvbnMgb2YgYSBnaXZlbiB0cmlnZ2VyCisgICAgICogQHBh
cmFtIHRyaWdnZXIgZGVmaW5lcyB0aGUgdHJpZ2dlciB0byBiZSB0ZXN0ZWQKKyAgICAgKiBAcmV0
dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHRyaWdnZXIgaXMgaGFuZGVsZWQg
YnkgYXQgbGVhc3Qgb25lIGFjdGlvbiBtYW5hZ2VyCisgICAgKiovCisgICAgQWJzdHJhY3RBY3Rp
b25NYW5hZ2VyLkhhc1NwZWNpZmljVHJpZ2dlciA9IGZ1bmN0aW9uICh0cmlnZ2VyKSB7CisgICAg
ICAgIGZvciAodmFyIHQgaW4gQWJzdHJhY3RBY3Rpb25NYW5hZ2VyLlRyaWdnZXJzKSB7CisgICAg
ICAgICAgICBpZiAoQWJzdHJhY3RBY3Rpb25NYW5hZ2VyLlRyaWdnZXJzLmhhc093blByb3BlcnR5
KHQpKSB7CisgICAgICAgICAgICAgICAgdmFyIHRfaW50ID0gcGFyc2VJbnQodCk7CisgICAgICAg
ICAgICAgICAgaWYgKHRfaW50ID09PSB0cmlnZ2VyKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvKiogR2V0cyB0aGUgbGlzdCBvZiBh
Y3RpdmUgdHJpZ2dlcnMgKi8KKyAgICBBYnN0cmFjdEFjdGlvbk1hbmFnZXIuVHJpZ2dlcnMgPSB7
fTsKKyAgICByZXR1cm4gQWJzdHJhY3RBY3Rpb25NYW5hZ2VyOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9BY3Rpb25zL2FjdGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL0FjdGlvbnMvYWN0aW9uLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBY3Rpb24gKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWN0aW9uIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBBY3Rpb247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2Vy
dmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xv
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90
eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworLyoqCisgKiBUaGUg
YWN0aW9uIHRvIGJlIGNhcnJpZWQgb3V0IGZvbGxvd2luZyBhIHRyaWdnZXIKKyAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMjYXZhaWxhYmxl
LWFjdGlvbnMKKyAqLwordmFyIEFjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEFjdGlvbgorICAgICAqIEBwYXJhbSB0cmln
Z2VyT3B0aW9ucyB0aGUgdHJpZ2dlciwgd2l0aCBvciB3aXRob3V0IHBhcmFtZXRlcnMsIGZvciB0
aGUgYWN0aW9uCisgICAgICogQHBhcmFtIGNvbmRpdGlvbiBhbiBvcHRpb25hbCBkZXRlcm1pbmFu
dCBvZiBhY3Rpb24KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBBY3Rpb24oCisgICAgLyoqIHRoZSB0
cmlnZ2VyLCB3aXRoIG9yIHdpdGhvdXQgcGFyYW1ldGVycywgZm9yIHRoZSBhY3Rpb24gKi8KKyAg
ICB0cmlnZ2VyT3B0aW9ucywgY29uZGl0aW9uKSB7CisgICAgICAgIHRoaXMudHJpZ2dlck9wdGlv
bnMgPSB0cmlnZ2VyT3B0aW9uczsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJp
Z2dlcmVkIHByaW9yIHRvIGFjdGlvbiBiZWluZyBleGVjdXRlZC4KKyAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5vbkJlZm9yZUV4ZWN1dGVPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIGlm
ICh0cmlnZ2VyT3B0aW9ucy5wYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlciA9
IHRyaWdnZXJPcHRpb25zLnRyaWdnZXI7CisgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUGFyYW1l
dGVyID0gdHJpZ2dlck9wdGlvbnMucGFyYW1ldGVyOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKHRyaWdnZXJPcHRpb25zLnRyaWdnZXIpIHsKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlciA9
IHRyaWdnZXJPcHRpb25zLnRyaWdnZXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICB0aGlzLnRyaWdnZXIgPSB0cmlnZ2VyT3B0aW9uczsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9uZXh0QWN0aXZlQWN0aW9uID0gdGhpczsKKyAgICAgICAgdGhpcy5fY29uZGl0aW9u
ID0gY29uZGl0aW9uOworICAgIH0KKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBvbmx5CisgICAg
ICogQGhpZGRlbgorICAgICAqLworICAgIEFjdGlvbi5wcm90b3R5cGUuX3ByZXBhcmUgPSBmdW5j
dGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0cmlnZ2VyIHBhcmFt
ZXRlcnMKKyAgICAgKiBAcmV0dXJucyB0aGUgdHJpZ2dlciBwYXJhbWV0ZXJzCisgICAgICovCisg
ICAgQWN0aW9uLnByb3RvdHlwZS5nZXRUcmlnZ2VyUGFyYW1ldGVyID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fdHJpZ2dlclBhcmFtZXRlcjsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEludGVybmFsIG9ubHkgLSBleGVjdXRlcyBjdXJyZW50IGFjdGlvbiBldmVudAorICAg
ICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlQ3VycmVu
dCA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgaWYgKHRoaXMuX25leHRBY3RpdmVBY3Rpb24u
X2NvbmRpdGlvbikgeworICAgICAgICAgICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuX25leHRBY3Rp
dmVBY3Rpb24uX2NvbmRpdGlvbjsKKyAgICAgICAgICAgIHZhciBjdXJyZW50UmVuZGVySWQgPSB0
aGlzLl9hY3Rpb25NYW5hZ2VyLmdldFNjZW5lKCkuZ2V0UmVuZGVySWQoKTsKKyAgICAgICAgICAg
IC8vIFdlIGNhY2hlIHRoZSBjdXJyZW50IGV2YWx1YXRpb24gZm9yIHRoZSBjdXJyZW50IGZyYW1l
CisgICAgICAgICAgICBpZiAoY29uZGl0aW9uLl9ldmFsdWF0aW9uSWQgPT09IGN1cnJlbnRSZW5k
ZXJJZCkgeworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uLl9jdXJyZW50UmVzdWx0KSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25kaXRpb24uX2V2
YWx1YXRpb25JZCA9IGN1cnJlbnRSZW5kZXJJZDsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRp
dGlvbi5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uLl9jdXJyZW50
UmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgY29uZGl0aW9uLl9jdXJyZW50UmVzdWx0ID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uQmVmb3JlRXhlY3V0ZU9i
c2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB0aGlzLl9uZXh0QWN0aXZl
QWN0aW9uLmV4ZWN1dGUoZXZ0KTsKKyAgICAgICAgdGhpcy5za2lwVG9OZXh0QWN0aXZlQWN0aW9u
KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHBsYWNlaG9sZGVyIGZvciBjaGls
ZCBjbGFzc2VzCisgICAgICogQHBhcmFtIGV2dCBvcHRpb25hbCBhY3Rpb24gZXZlbnQKKyAgICAg
Ki8KKyAgICBBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTa2lwcyB0byBuZXh0IGFjdGl2ZSBhY3Rpb24KKyAgICAgKi8K
KyAgICBBY3Rpb24ucHJvdG90eXBlLnNraXBUb05leHRBY3RpdmVBY3Rpb24gPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICh0aGlzLl9uZXh0QWN0aXZlQWN0aW9uLl9jaGlsZCkgeworICAgICAg
ICAgICAgaWYgKCF0aGlzLl9uZXh0QWN0aXZlQWN0aW9uLl9jaGlsZC5fYWN0aW9uTWFuYWdlcikg
eworICAgICAgICAgICAgICAgIHRoaXMuX25leHRBY3RpdmVBY3Rpb24uX2NoaWxkLl9hY3Rpb25N
YW5hZ2VyID0gdGhpcy5fYWN0aW9uTWFuYWdlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX25leHRBY3RpdmVBY3Rpb24gPSB0aGlzLl9uZXh0QWN0aXZlQWN0aW9uLl9jaGlsZDsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX25leHRBY3RpdmVB
Y3Rpb24gPSB0aGlzOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGFj
dGlvbiB0byBjaGFpbiBvZiBhY3Rpb25zLCBtYXkgYmUgYSBEb05vdGhpbmdBY3Rpb24KKyAgICAg
KiBAcGFyYW0gYWN0aW9uIGRlZmluZXMgdGhlIG5leHQgYWN0aW9uIHRvIGV4ZWN1dGUKKyAgICAg
KiBAcmV0dXJucyBUaGUgYWN0aW9uIHBhc3NlZCBpbgorICAgICAqIEBzZWUgaHR0cHM6Ly93d3cu
YmFieWxvbmpzLXBsYXlncm91bmQuY29tLyMxVDMwSFIjMAorICAgICAqLworICAgIEFjdGlvbi5w
cm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChhY3Rpb24pIHsKKyAgICAgICAgdGhpcy5fY2hpbGQg
PSBhY3Rpb247CisgICAgICAgIGFjdGlvbi5fYWN0aW9uTWFuYWdlciA9IHRoaXMuX2FjdGlvbk1h
bmFnZXI7CisgICAgICAgIGFjdGlvbi5fcHJlcGFyZSgpOworICAgICAgICByZXR1cm4gYWN0aW9u
OworICAgIH07CisgICAgLyoqCisgICAgICogSW50ZXJuYWwgb25seQorICAgICAqIEBoaWRkZW4K
KyAgICAgKi8KKyAgICBBY3Rpb24ucHJvdG90eXBlLl9nZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChw
cm9wZXJ0eVBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGlvbk1hbmFnZXIuX2dldFBy
b3BlcnR5KHByb3BlcnR5UGF0aCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBv
bmx5CisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIEFjdGlvbi5wcm90b3R5cGUuX2dldEVm
ZmVjdGl2ZVRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5UGF0aCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5fYWN0aW9uTWFuYWdlci5fZ2V0RWZmZWN0aXZlVGFyZ2V0KHRhcmdldCwg
cHJvcGVydHlQYXRoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSBwbGFjZWhv
bGRlciBmb3IgY2hpbGQgY2xhc3NlcworICAgICAqIEBwYXJhbSBwYXJlbnQgb2YgY2hpbGQKKyAg
ICAgKiBAcmV0dXJucyB0aGUgc2VyaWFsaXplZCBvYmplY3QKKyAgICAgKi8KKyAgICBBY3Rpb24u
cHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEludGVybmFsIG9ubHkgY2FsbGVkIGJ5IHNlcmlhbGl6ZQorICAgICAqIEBoaWRk
ZW4KKyAgICAgKi8KKyAgICBBY3Rpb24ucHJvdG90eXBlLl9zZXJpYWxpemUgPSBmdW5jdGlvbiAo
c2VyaWFsaXplZEFjdGlvbiwgcGFyZW50KSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2Jq
ZWN0ID0geworICAgICAgICAgICAgdHlwZTogMSwKKyAgICAgICAgICAgIGNoaWxkcmVuOiBbXSwK
KyAgICAgICAgICAgIG5hbWU6IHNlcmlhbGl6ZWRBY3Rpb24ubmFtZSwKKyAgICAgICAgICAgIHBy
b3BlcnRpZXM6IHNlcmlhbGl6ZWRBY3Rpb24ucHJvcGVydGllcyB8fCBbXQorICAgICAgICB9Owor
ICAgICAgICAvLyBTZXJpYWxpemUgY2hpbGQKKyAgICAgICAgaWYgKHRoaXMuX2NoaWxkKSB7Cisg
ICAgICAgICAgICB0aGlzLl9jaGlsZC5zZXJpYWxpemUoc2VyaWFsaXphdGlvbk9iamVjdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgaWYgInRoaXMiIGhhcyBhIGNvbmRpdGlvbgorICAg
ICAgICBpZiAodGhpcy5fY29uZGl0aW9uKSB7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplZENv
bmRpdGlvbiA9IHRoaXMuX2NvbmRpdGlvbi5zZXJpYWxpemUoKTsKKyAgICAgICAgICAgIHNlcmlh
bGl6ZWRDb25kaXRpb24uY2hpbGRyZW4ucHVzaChzZXJpYWxpemF0aW9uT2JqZWN0KTsKKyAgICAg
ICAgICAgIGlmIChwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVz
aChzZXJpYWxpemVkQ29uZGl0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBzZXJpYWxpemVkQ29uZGl0aW9uOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJlbnQpIHsK
KyAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKHNlcmlhbGl6YXRpb25PYmplY3QpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07Cisg
ICAgLyoqCisgICAgICogSW50ZXJuYWwgb25seQorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAg
ICBBY3Rpb24uX1NlcmlhbGl6ZVZhbHVlQXNTdHJpbmcgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZS50b1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2YgdmFsdWUg
PT09ICJib29sZWFuIikgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlID8gInRydWUiIDogImZh
bHNlIjsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKSB7CisgICAg
ICAgICAgICByZXR1cm4gdmFsdWUueCArICIsICIgKyB2YWx1ZS55OworICAgICAgICB9CisgICAg
ICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0pIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS54
ICsgIiwgIiArIHZhbHVlLnkgKyAiLCAiICsgdmFsdWUuejsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodmFsdWUgaW5zdGFuY2VvZiBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJDb2xvcjMiXSkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnIgKyAiLCAi
ICsgdmFsdWUuZyArICIsICIgKyB2YWx1ZS5iOworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1
ZSBpbnN0YW5jZW9mIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkNvbG9yNCJdKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUuciArICIsICIgKyB2YWx1
ZS5nICsgIiwgIiArIHZhbHVlLmIgKyAiLCAiICsgdmFsdWUuYTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdmFsdWU7IC8vIHN0cmluZworICAgIH07CisgICAgLyoqCisgICAgICogSW50ZXJu
YWwgb25seQorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBBY3Rpb24uX0dldFRhcmdldFBy
b3BlcnR5ID0gZnVuY3Rpb24gKHRhcmdldCkgeworICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgbmFtZTogInRhcmdldCIsCisgICAgICAgICAgICB0YXJnZXRUeXBlOiB0YXJnZXQuX2lzTWVz
aCA/ICJNZXNoUHJvcGVydGllcyIKKyAgICAgICAgICAgICAgICA6IHRhcmdldC5faXNMaWdodCA/
ICJMaWdodFByb3BlcnRpZXMiCisgICAgICAgICAgICAgICAgICAgIDogdGFyZ2V0Ll9pc0NhbWVy
YSA/ICJDYW1lcmFQcm9wZXJ0aWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgOiAiU2NlbmVQ
cm9wZXJ0aWVzIiwKKyAgICAgICAgICAgIHZhbHVlOiB0YXJnZXQuX2lzU2NlbmUgPyAiU2NlbmUi
IDogdGFyZ2V0Lm5hbWUKKyAgICAgICAgfTsKKyAgICB9OworICAgIHJldHVybiBBY3Rpb247Cit9
KCkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siX1R5
cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5BY3Rpb24iXSA9IEFjdGlvbjsKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vQWN0aW9ucy9hY3Rpb25FdmVudC50cyI6CisvKiEqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQWN0aW9ucy9hY3Rpb25F
dmVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBBY3Rpb25FdmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJBY3Rpb25FdmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQWN0aW9uRXZlbnQ7
IH0pOworLyoqCisgKiBBY3Rpb25FdmVudCBpcyB0aGUgZXZlbnQgYmVpbmcgc2VudCB3aGVuIGFu
IGFjdGlvbiBpcyB0cmlnZ2VyZWQuCisgKi8KK3ZhciBBY3Rpb25FdmVudCA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEFjdGlvbkV2
ZW50CisgICAgICogQHBhcmFtIHNvdXJjZSBUaGUgbWVzaCBvciBzcHJpdGUgdGhhdCB0cmlnZ2Vy
ZWQgdGhlIGFjdGlvbgorICAgICAqIEBwYXJhbSBwb2ludGVyWCBUaGUgWCBtb3VzZSBjdXJzb3Ig
cG9zaXRpb24gYXQgdGhlIHRpbWUgb2YgdGhlIGV2ZW50CisgICAgICogQHBhcmFtIHBvaW50ZXJZ
IFRoZSBZIG1vdXNlIGN1cnNvciBwb3NpdGlvbiBhdCB0aGUgdGltZSBvZiB0aGUgZXZlbnQKKyAg
ICAgKiBAcGFyYW0gbWVzaFVuZGVyUG9pbnRlciBUaGUgbWVzaCB0aGF0IGlzIGN1cnJlbnRseSBw
b2ludGVkIGF0IChjYW4gYmUgbnVsbCkKKyAgICAgKiBAcGFyYW0gc291cmNlRXZlbnQgdGhlIG9y
aWdpbmFsIChicm93c2VyKSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgQWN0aW9uRXZlbnQKKyAg
ICAgKiBAcGFyYW0gYWRkaXRpb25hbERhdGEgYWRkaXRpb25hbCBkYXRhIGZvciB0aGUgZXZlbnQK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBBY3Rpb25FdmVudCgKKyAgICAvKiogVGhlIG1lc2ggb3Ig
c3ByaXRlIHRoYXQgdHJpZ2dlcmVkIHRoZSBhY3Rpb24gKi8KKyAgICBzb3VyY2UsIAorICAgIC8q
KiBUaGUgWCBtb3VzZSBjdXJzb3IgcG9zaXRpb24gYXQgdGhlIHRpbWUgb2YgdGhlIGV2ZW50ICov
CisgICAgcG9pbnRlclgsIAorICAgIC8qKiBUaGUgWSBtb3VzZSBjdXJzb3IgcG9zaXRpb24gYXQg
dGhlIHRpbWUgb2YgdGhlIGV2ZW50ICovCisgICAgcG9pbnRlclksIAorICAgIC8qKiBUaGUgbWVz
aCB0aGF0IGlzIGN1cnJlbnRseSBwb2ludGVkIGF0IChjYW4gYmUgbnVsbCkgKi8KKyAgICBtZXNo
VW5kZXJQb2ludGVyLCAKKyAgICAvKiogdGhlIG9yaWdpbmFsIChicm93c2VyKSBldmVudCB0aGF0
IHRyaWdnZXJlZCB0aGUgQWN0aW9uRXZlbnQgKi8KKyAgICBzb3VyY2VFdmVudCwgCisgICAgLyoq
IGFkZGl0aW9uYWwgZGF0YSBmb3IgdGhlIGV2ZW50ICovCisgICAgYWRkaXRpb25hbERhdGEpIHsK
KyAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgIHRoaXMucG9pbnRlclggPSBw
b2ludGVyWDsKKyAgICAgICAgdGhpcy5wb2ludGVyWSA9IHBvaW50ZXJZOworICAgICAgICB0aGlz
Lm1lc2hVbmRlclBvaW50ZXIgPSBtZXNoVW5kZXJQb2ludGVyOworICAgICAgICB0aGlzLnNvdXJj
ZUV2ZW50ID0gc291cmNlRXZlbnQ7CisgICAgICAgIHRoaXMuYWRkaXRpb25hbERhdGEgPSBhZGRp
dGlvbmFsRGF0YTsKKyAgICB9CisgICAgLyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGF1
dG8tY3JlYXRlIGFuIEFjdGlvbkV2ZW50IGZyb20gYSBzb3VyY2UgbWVzaC4KKyAgICAgKiBAcGFy
YW0gc291cmNlIFRoZSBzb3VyY2UgbWVzaCB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQKKyAgICAg
KiBAcGFyYW0gZXZ0IFRoZSBvcmlnaW5hbCAoYnJvd3NlcikgZXZlbnQKKyAgICAgKiBAcGFyYW0g
YWRkaXRpb25hbERhdGEgYWRkaXRpb25hbCBkYXRhIGZvciB0aGUgZXZlbnQKKyAgICAgKiBAcmV0
dXJucyB0aGUgbmV3IEFjdGlvbkV2ZW50CisgICAgICovCisgICAgQWN0aW9uRXZlbnQuQ3JlYXRl
TmV3ID0gZnVuY3Rpb24gKHNvdXJjZSwgZXZ0LCBhZGRpdGlvbmFsRGF0YSkgeworICAgICAgICB2
YXIgc2NlbmUgPSBzb3VyY2UuZ2V0U2NlbmUoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25F
dmVudChzb3VyY2UsIHNjZW5lLnBvaW50ZXJYLCBzY2VuZS5wb2ludGVyWSwgc2NlbmUubWVzaFVu
ZGVyUG9pbnRlciB8fCBzb3VyY2UsIGV2dCwgYWRkaXRpb25hbERhdGEpOworICAgIH07CisgICAg
LyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGF1dG8tY3JlYXRlIGFuIEFjdGlvbkV2ZW50
IGZyb20gYSBzb3VyY2Ugc3ByaXRlCisgICAgICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIHNw
cml0ZSB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQKKyAgICAgKiBAcGFyYW0gc2NlbmUgU2NlbmUg
YXNzb2NpYXRlZCB3aXRoIHRoZSBzcHJpdGUKKyAgICAgKiBAcGFyYW0gZXZ0IFRoZSBvcmlnaW5h
bCAoYnJvd3NlcikgZXZlbnQKKyAgICAgKiBAcGFyYW0gYWRkaXRpb25hbERhdGEgYWRkaXRpb25h
bCBkYXRhIGZvciB0aGUgZXZlbnQKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IEFjdGlvbkV2ZW50
CisgICAgICovCisgICAgQWN0aW9uRXZlbnQuQ3JlYXRlTmV3RnJvbVNwcml0ZSA9IGZ1bmN0aW9u
IChzb3VyY2UsIHNjZW5lLCBldnQsIGFkZGl0aW9uYWxEYXRhKSB7CisgICAgICAgIHJldHVybiBu
ZXcgQWN0aW9uRXZlbnQoc291cmNlLCBzY2VuZS5wb2ludGVyWCwgc2NlbmUucG9pbnRlclksIHNj
ZW5lLm1lc2hVbmRlclBvaW50ZXIsIGV2dCwgYWRkaXRpb25hbERhdGEpOworICAgIH07CisgICAg
LyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGF1dG8tY3JlYXRlIGFuIEFjdGlvbkV2ZW50
IGZyb20gYSBzY2VuZS4gSWYgdHJpZ2dlcmVkIGJ5IGEgbWVzaCB1c2UgQWN0aW9uRXZlbnQuQ3Jl
YXRlTmV3CisgICAgICogQHBhcmFtIHNjZW5lIHRoZSBzY2VuZSB3aGVyZSB0aGUgZXZlbnQgb2Nj
dXJyZWQKKyAgICAgKiBAcGFyYW0gZXZ0IFRoZSBvcmlnaW5hbCAoYnJvd3NlcikgZXZlbnQKKyAg
ICAgKiBAcmV0dXJucyB0aGUgbmV3IEFjdGlvbkV2ZW50CisgICAgICovCisgICAgQWN0aW9uRXZl
bnQuQ3JlYXRlTmV3RnJvbVNjZW5lID0gZnVuY3Rpb24gKHNjZW5lLCBldnQpIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBBY3Rpb25FdmVudChudWxsLCBzY2VuZS5wb2ludGVyWCwgc2NlbmUucG9pbnRl
clksIHNjZW5lLm1lc2hVbmRlclBvaW50ZXIsIGV2dCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBIZWxwZXIgZnVuY3Rpb24gdG8gYXV0by1jcmVhdGUgYW4gQWN0aW9uRXZlbnQgZnJvbSBhIHBy
aW1pdGl2ZQorICAgICAqIEBwYXJhbSBwcmltIGRlZmluZXMgdGhlIHRhcmdldCBwcmltaXRpdmUK
KyAgICAgKiBAcGFyYW0gcG9pbnRlclBvcyBkZWZpbmVzIHRoZSBwb2ludGVyIHBvc2l0aW9uCisg
ICAgICogQHBhcmFtIGV2dCBUaGUgb3JpZ2luYWwgKGJyb3dzZXIpIGV2ZW50CisgICAgICogQHBh
cmFtIGFkZGl0aW9uYWxEYXRhIGFkZGl0aW9uYWwgZGF0YSBmb3IgdGhlIGV2ZW50CisgICAgICog
QHJldHVybnMgdGhlIG5ldyBBY3Rpb25FdmVudAorICAgICAqLworICAgIEFjdGlvbkV2ZW50LkNy
ZWF0ZU5ld0Zyb21QcmltaXRpdmUgPSBmdW5jdGlvbiAocHJpbSwgcG9pbnRlclBvcywgZXZ0LCBh
ZGRpdGlvbmFsRGF0YSkgeworICAgICAgICByZXR1cm4gbmV3IEFjdGlvbkV2ZW50KHByaW0sIHBv
aW50ZXJQb3MueCwgcG9pbnRlclBvcy55LCBudWxsLCBldnQsIGFkZGl0aW9uYWxEYXRhKTsKKyAg
ICB9OworICAgIHJldHVybiBBY3Rpb25FdmVudDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vQWN0aW9ucy9hY3Rpb25NYW5hZ2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0FjdGlvbnMvYWN0aW9uTWFuYWdlci50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IEFjdGlvbk1hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiQWN0aW9uTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQWN0aW9uTWFuYWdlcjsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVs
ZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9t
YXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfY29uZGl0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2NvbmRpdGlvbiAqLyAiLi9BY3Rpb25zL2NvbmRpdGlvbi50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9uICovICIuL0FjdGlvbnMv
YWN0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RpcmVjdEFjdGlvbnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGly
ZWN0QWN0aW9ucyAqLyAiLi9BY3Rpb25zL2RpcmVjdEFjdGlvbnMudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAq
LyAiLi9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGVlcENvcGllciAqLyAi
Li9NaXNjL2RlZXBDb3BpZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190
eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2Fic3RyYWN0QWN0aW9uTWFuYWdlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWJzdHJhY3RBY3Rp
b25NYW5hZ2VyICovICIuL0FjdGlvbnMvYWJzdHJhY3RBY3Rpb25NYW5hZ2VyLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFu
dHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKworCisKKworCisKKworCisKKworCisK
Ky8qKgorICogQWN0aW9uIE1hbmFnZXIgbWFuYWdlcyBhbGwgZXZlbnRzIHRvIGJlIHRyaWdnZXJl
ZCBvbiBhIGdpdmVuIG1lc2ggb3IgdGhlIGdsb2JhbCBzY2VuZS4KKyAqIEEgc2luZ2xlIHNjZW5l
IGNhbiBoYXZlIG1hbnkgQWN0aW9uIE1hbmFnZXJzIHRvIGhhbmRsZSBwcmVkZWZpbmVkIGFjdGlv
bnMgb24gc3BlY2lmaWMgbWVzaGVzLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL2hvd190b191c2VfYWN0aW9ucworICovCit2YXIgQWN0aW9uTWFuYWdlciA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShBY3Rpb25NYW5hZ2VyLCBfc3VwZXIpOworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYSBuZXcgYWN0aW9uIG1hbmFnZXIKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIEFjdGlv
bk1hbmFnZXIoc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykg
fHwgdGhpczsKKyAgICAgICAgX3RoaXMuX3NjZW5lID0gc2NlbmUgfHwgX0VuZ2luZXNfZW5naW5l
U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3Jl
YXRlZFNjZW5lOworICAgICAgICBzY2VuZS5hY3Rpb25NYW5hZ2Vycy5wdXNoKF90aGlzKTsKKyAg
ICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvLyBNZXRob2RzCisgICAgLyoqCisgICAg
ICogUmVsZWFzZXMgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgICAgICovCisgICAgQWN0aW9u
TWFuYWdlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGlu
ZGV4ID0gdGhpcy5fc2NlbmUuYWN0aW9uTWFuYWdlcnMuaW5kZXhPZih0aGlzKTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFjdGlvbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIHZhciBhY3Rpb24gPSB0aGlzLmFjdGlvbnNbaV07CisgICAgICAgICAgICBBY3Rpb25NYW5h
Z2VyLlRyaWdnZXJzW2FjdGlvbi50cmlnZ2VyXS0tOworICAgICAgICAgICAgaWYgKEFjdGlvbk1h
bmFnZXIuVHJpZ2dlcnNbYWN0aW9uLnRyaWdnZXJdID09PSAwKSB7CisgICAgICAgICAgICAgICAg
ZGVsZXRlIEFjdGlvbk1hbmFnZXIuVHJpZ2dlcnNbYWN0aW9uLnRyaWdnZXJdOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgICAgICB0
aGlzLl9zY2VuZS5hY3Rpb25NYW5hZ2Vycy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJu
cyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqLworICAgIEFjdGlvbk1hbmFnZXIucHJvdG90eXBl
LmdldFNjZW5lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fc2NlbmU7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBEb2VzIHRoaXMgYWN0aW9uIG1hbmFnZXIgaGFuZGxlcyBh
Y3Rpb25zIG9mIGFueSBvZiB0aGUgZ2l2ZW4gdHJpZ2dlcnMKKyAgICAgKiBAcGFyYW0gdHJpZ2dl
cnMgZGVmaW5lcyB0aGUgdHJpZ2dlcnMgdG8gYmUgdGVzdGVkCisgICAgICogQHJldHVybiBhIGJv
b2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9uZSAob3IgbW9yZSkgb2YgdGhlIHRyaWdnZXJzIGlz
IGhhbmRsZWQKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5oYXNTcGVjaWZp
Y1RyaWdnZXJzID0gZnVuY3Rpb24gKHRyaWdnZXJzKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4
ID0gMDsgaW5kZXggPCB0aGlzLmFjdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAg
ICB2YXIgYWN0aW9uID0gdGhpcy5hY3Rpb25zW2luZGV4XTsKKyAgICAgICAgICAgIGlmICh0cmln
Z2Vycy5pbmRleE9mKGFjdGlvbi50cmlnZ2VyKSA+IC0xKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH07CisgICAgLyoqCisgICAgICogRG9lcyB0aGlzIGFjdGlvbiBtYW5hZ2VyIGhhbmRs
ZXMgYWN0aW9ucyBvZiBhbnkgb2YgdGhlIGdpdmVuIHRyaWdnZXJzLiBUaGlzIGZ1bmN0aW9uIHRh
a2VzIHR3byBhcmd1bWVudHMgZm9yCisgICAgICogc3BlZWQuCisgICAgICogQHBhcmFtIHRyaWdn
ZXJBIGRlZmluZXMgdGhlIHRyaWdnZXIgdG8gYmUgdGVzdGVkCisgICAgICogQHBhcmFtIHRyaWdn
ZXJCIGRlZmluZXMgdGhlIHRyaWdnZXIgdG8gYmUgdGVzdGVkCisgICAgICogQHJldHVybiBhIGJv
b2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9uZSAob3IgbW9yZSkgb2YgdGhlIHRyaWdnZXJzIGlz
IGhhbmRsZWQKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5oYXNTcGVjaWZp
Y1RyaWdnZXJzMiA9IGZ1bmN0aW9uICh0cmlnZ2VyQSwgdHJpZ2dlckIpIHsKKyAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYWN0aW9ucy5sZW5ndGg7IGluZGV4KyspIHsK
KyAgICAgICAgICAgIHZhciBhY3Rpb24gPSB0aGlzLmFjdGlvbnNbaW5kZXhdOworICAgICAgICAg
ICAgaWYgKHRyaWdnZXJBID09IGFjdGlvbi50cmlnZ2VyIHx8IHRyaWdnZXJCID09IGFjdGlvbi50
cmlnZ2VyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICog
RG9lcyB0aGlzIGFjdGlvbiBtYW5hZ2VyIGhhbmRsZXMgYWN0aW9ucyBvZiBhIGdpdmVuIHRyaWdn
ZXIKKyAgICAgKiBAcGFyYW0gdHJpZ2dlciBkZWZpbmVzIHRoZSB0cmlnZ2VyIHRvIGJlIHRlc3Rl
ZAorICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJQcmVkaWNhdGUgZGVmaW5lcyBhbiBvcHRpb25hbCBw
cmVkaWNhdGUgdG8gZmlsdGVyIHRyaWdnZXJzIGJ5IHBhcmFtZXRlcgorICAgICAqIEByZXR1cm4g
d2hldGhlciB0aGUgdHJpZ2dlciBpcyBoYW5kbGVkCisgICAgICovCisgICAgQWN0aW9uTWFuYWdl
ci5wcm90b3R5cGUuaGFzU3BlY2lmaWNUcmlnZ2VyID0gZnVuY3Rpb24gKHRyaWdnZXIsIHBhcmFt
ZXRlclByZWRpY2F0ZSkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhp
cy5hY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGFjdGlvbiA9IHRo
aXMuYWN0aW9uc1tpbmRleF07CisgICAgICAgICAgICBpZiAoYWN0aW9uLnRyaWdnZXIgPT09IHRy
aWdnZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyUHJlZGljYXRlKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJQcmVkaWNhdGUoYWN0aW9uLmdldFRyaWdnZXJQ
YXJhbWV0ZXIoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFjdGlvbk1hbmFnZXIucHJvdG90eXBlLCAiaGFz
UG9pbnRlclRyaWdnZXJzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRG9lcyB0aGlzIGFj
dGlvbiBtYW5hZ2VyIGhhcyBwb2ludGVyIHRyaWdnZXJzCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLmFjdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGFj
dGlvbiA9IHRoaXMuYWN0aW9uc1tpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi50
cmlnZ2VyID49IEFjdGlvbk1hbmFnZXIuT25QaWNrVHJpZ2dlciAmJiBhY3Rpb24udHJpZ2dlciA8
PSBBY3Rpb25NYW5hZ2VyLk9uUG9pbnRlck91dFRyaWdnZXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoQWN0aW9uTWFuYWdlci5wcm90b3R5cGUsICJoYXNQaWNrVHJpZ2dlcnMiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBEb2VzIHRoaXMgYWN0aW9uIG1hbmFnZXIgaGFzIHBpY2sg
dHJpZ2dlcnMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYWN0aW9ucy5sZW5ndGg7IGlu
ZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gdGhpcy5hY3Rpb25zW2luZGV4
XTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnRyaWdnZXIgPj0gQWN0aW9uTWFuYWdlci5P
blBpY2tUcmlnZ2VyICYmIGFjdGlvbi50cmlnZ2VyIDw9IEFjdGlvbk1hbmFnZXIuT25QaWNrVXBU
cmlnZ2VyKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIGFuIGFjdGlvbiB0byB0aGlzIGFj
dGlvbiBtYW5hZ2VyCisgICAgICogQHBhcmFtIGFjdGlvbiBkZWZpbmVzIHRoZSBhY3Rpb24gdG8g
YmUgcmVnaXN0ZXJlZAorICAgICAqIEByZXR1cm4gdGhlIGFjdGlvbiBhbWVuZGVkIChwcmVwYXJl
ZCkgYWZ0ZXIgcmVnaXN0cmF0aW9uCisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5wcm90b3R5
cGUucmVnaXN0ZXJBY3Rpb24gPSBmdW5jdGlvbiAoYWN0aW9uKSB7CisgICAgICAgIGlmIChhY3Rp
b24udHJpZ2dlciA9PT0gQWN0aW9uTWFuYWdlci5PbkV2ZXJ5RnJhbWVUcmlnZ2VyKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5nZXRTY2VuZSgpLmFjdGlvbk1hbmFnZXIgIT09IHRoaXMpIHsKKyAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
TG9nZ2VyIl0uV2FybigiT25FdmVyeUZyYW1lVHJpZ2dlciBjYW4gb25seSBiZSB1c2VkIHdpdGgg
c2NlbmUuYWN0aW9uTWFuYWdlciIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKGFjdGlvbik7
CisgICAgICAgIGlmIChBY3Rpb25NYW5hZ2VyLlRyaWdnZXJzW2FjdGlvbi50cmlnZ2VyXSkgewor
ICAgICAgICAgICAgQWN0aW9uTWFuYWdlci5UcmlnZ2Vyc1thY3Rpb24udHJpZ2dlcl0rKzsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFjdGlvbk1hbmFnZXIuVHJpZ2dl
cnNbYWN0aW9uLnRyaWdnZXJdID0gMTsKKyAgICAgICAgfQorICAgICAgICBhY3Rpb24uX2FjdGlv
bk1hbmFnZXIgPSB0aGlzOworICAgICAgICBhY3Rpb24uX3ByZXBhcmUoKTsKKyAgICAgICAgcmV0
dXJuIGFjdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVucmVnaXN0ZXJzIGFuIGFjdGlv
biB0byB0aGlzIGFjdGlvbiBtYW5hZ2VyCisgICAgICogQHBhcmFtIGFjdGlvbiBkZWZpbmVzIHRo
ZSBhY3Rpb24gdG8gYmUgdW5yZWdpc3RlcmVkCisgICAgICogQHJldHVybiBhIGJvb2xlYW4gaW5k
aWNhdGluZyB3aGV0aGVyIHRoZSBhY3Rpb24gaGFzIGJlZW4gdW5yZWdpc3RlcmVkCisgICAgICov
CisgICAgQWN0aW9uTWFuYWdlci5wcm90b3R5cGUudW5yZWdpc3RlckFjdGlvbiA9IGZ1bmN0aW9u
IChhY3Rpb24pIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5hY3Rpb25zLmluZGV4T2YoYWN0
aW9uKTsKKyAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgdGhpcy5hY3Rp
b25zLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgICAgICBBY3Rpb25NYW5hZ2VyLlRyaWdnZXJz
W2FjdGlvbi50cmlnZ2VyXSAtPSAxOworICAgICAgICAgICAgaWYgKEFjdGlvbk1hbmFnZXIuVHJp
Z2dlcnNbYWN0aW9uLnRyaWdnZXJdID09PSAwKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIEFj
dGlvbk1hbmFnZXIuVHJpZ2dlcnNbYWN0aW9uLnRyaWdnZXJdOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZGVsZXRlIGFjdGlvbi5fYWN0aW9uTWFuYWdlcjsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFByb2Nlc3MgYSBzcGVjaWZpYyB0cmlnZ2VyCisgICAgICogQHBhcmFtIHRyaWdn
ZXIgZGVmaW5lcyB0aGUgdHJpZ2dlciB0byBwcm9jZXNzCisgICAgICogQHBhcmFtIGV2dCBkZWZp
bmVzIHRoZSBldmVudCBkZXRhaWxzIHRvIGJlIHByb2Nlc3NlZAorICAgICAqLworICAgIEFjdGlv
bk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUcmlnZ2VyID0gZnVuY3Rpb24gKHRyaWdnZXIsIGV2
dCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5hY3Rpb25zLmxl
bmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGFjdGlvbiA9IHRoaXMuYWN0aW9uc1tp
bmRleF07CisgICAgICAgICAgICBpZiAoYWN0aW9uLnRyaWdnZXIgPT09IHRyaWdnZXIpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZXZ0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmlnZ2Vy
ID09PSBBY3Rpb25NYW5hZ2VyLk9uS2V5VXBUcmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAg
ICB8fCB0cmlnZ2VyID09PSBBY3Rpb25NYW5hZ2VyLk9uS2V5RG93blRyaWdnZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXIgPSBhY3Rpb24uZ2V0VHJpZ2dlclBhcmFt
ZXRlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlciAmJiBwYXJhbWV0
ZXIgIT09IGV2dC5zb3VyY2VFdmVudC5rZXlDb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwYXJhbWV0ZXIudG9Mb3dlckNhc2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb3dlckNhc2UgPSBwYXJhbWV0ZXIudG9Mb3dl
ckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG93ZXJDYXNlICE9PSBl
dnQuc291cmNlRXZlbnQua2V5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB1bmljb2RlID0gZXZ0LnNvdXJjZUV2ZW50LmNoYXJDb2RlID8gZXZ0LnNvdXJjZUV2ZW50LmNo
YXJDb2RlIDogZXZ0LnNvdXJjZUV2ZW50LmtleUNvZGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBhY3R1YWxrZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVuaWNvZGUpLnRv
TG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3R1YWxr
ZXkgIT09IGxvd2VyQ2FzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWN0aW9uLl9l
eGVjdXRlQ3VycmVudChldnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAg
ICAvKiogQGhpZGRlbiAqLworICAgIEFjdGlvbk1hbmFnZXIucHJvdG90eXBlLl9nZXRFZmZlY3Rp
dmVUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0LCBwcm9wZXJ0eVBhdGgpIHsKKyAgICAgICAgdmFy
IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoIi4iKTsKKyAgICAgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IHByb3BlcnRpZXMubGVuZ3RoIC0gMTsgaW5kZXgrKykgeworICAg
ICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3Byb3BlcnRpZXNbaW5kZXhdXTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBB
Y3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5fZ2V0UHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHlQ
YXRoKSB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gcHJvcGVydHlQYXRoLnNwbGl0KCIuIik7
CisgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzW3Byb3BlcnRpZXMubGVuZ3RoIC0gMV07CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgdGhpcyBtYW5hZ2VyIHRvIGEgSlNPTiBvYmpl
Y3QKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBwcm9wZXJ0eSBuYW1lIHRvIHN0b3Jl
IHRoaXMgbWFuYWdlcgorICAgICAqIEByZXR1cm5zIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0
aGlzIG1hbmFnZXIKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXJpYWxp
emUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICB2YXIgcm9vdCA9IHsKKyAgICAgICAgICAg
IGNoaWxkcmVuOiBuZXcgQXJyYXkoKSwKKyAgICAgICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAg
ICAgICB0eXBlOiAzLAorICAgICAgICAgICAgcHJvcGVydGllczogbmV3IEFycmF5KCkgLy8gRW1w
dHkgZm9yIHJvb3QgYnV0IHJlcXVpcmVkCisgICAgICAgIH07CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5hY3Rpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdHJp
Z2dlck9iamVjdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiAwLAorICAgICAgICAgICAgICAg
IGNoaWxkcmVuOiBuZXcgQXJyYXkoKSwKKyAgICAgICAgICAgICAgICBuYW1lOiBBY3Rpb25NYW5h
Z2VyLkdldFRyaWdnZXJOYW1lKHRoaXMuYWN0aW9uc1tpXS50cmlnZ2VyKSwKKyAgICAgICAgICAg
ICAgICBwcm9wZXJ0aWVzOiBuZXcgQXJyYXkoKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IHZhciB0cmlnZ2VyT3B0aW9ucyA9IHRoaXMuYWN0aW9uc1tpXS50cmlnZ2VyT3B0aW9uczsKKyAg
ICAgICAgICAgIGlmICh0cmlnZ2VyT3B0aW9ucyAmJiB0eXBlb2YgdHJpZ2dlck9wdGlvbnMgIT09
ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgaWYgKHRyaWdnZXJPcHRpb25zLnBhcmFtZXRl
ciBpbnN0YW5jZW9mIE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck9iamVjdC5w
cm9wZXJ0aWVzLnB1c2goX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBY3Rp
b24iXS5fR2V0VGFyZ2V0UHJvcGVydHkodHJpZ2dlck9wdGlvbnMucGFyYW1ldGVyKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgcGFyYW1ldGVyID0ge307CisgICAgICAgICAgICAgICAgICAgIF9NaXNjX2RlZXBDb3Bp
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHRy
aWdnZXJPcHRpb25zLnBhcmFtZXRlciwgcGFyYW1ldGVyLCBbIm1lc2giXSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh0cmlnZ2VyT3B0aW9ucy5wYXJhbWV0ZXIgJiYgdHJpZ2dlck9wdGlvbnMu
cGFyYW1ldGVyLm1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci5fbWVz
aElkID0gdHJpZ2dlck9wdGlvbnMucGFyYW1ldGVyLm1lc2guaWQ7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck9iamVjdC5wcm9wZXJ0aWVzLnB1c2go
eyBuYW1lOiAicGFyYW1ldGVyIiwgdGFyZ2V0VHlwZTogbnVsbCwgdmFsdWU6IHBhcmFtZXRlciB9
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBTZXJp
YWxpemUgY2hpbGQgYWN0aW9uLCByZWN1cnNpdmVseQorICAgICAgICAgICAgdGhpcy5hY3Rpb25z
W2ldLnNlcmlhbGl6ZSh0cmlnZ2VyT2JqZWN0KTsKKyAgICAgICAgICAgIC8vIEFkZCBzZXJpYWxp
emVkIHRyaWdnZXIKKyAgICAgICAgICAgIHJvb3QuY2hpbGRyZW4ucHVzaCh0cmlnZ2VyT2JqZWN0
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcm9vdDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBuZXcgQWN0aW9uTWFuYWdlciBmcm9tIGEgSlNPTiBkYXRhCisgICAgICog
QHBhcmFtIHBhcnNlZEFjdGlvbnMgZGVmaW5lcyB0aGUgSlNPTiBkYXRhIHRvIHJlYWQgZnJvbQor
ICAgICAqIEBwYXJhbSBvYmplY3QgZGVmaW5lcyB0aGUgaG9zdGluZyBtZXNoCisgICAgICogQHBh
cmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKi8KKyAgICBBY3Rpb25N
YW5hZ2VyLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZEFjdGlvbnMsIG9iamVjdCwgc2NlbmUpIHsK
KyAgICAgICAgdmFyIGFjdGlvbk1hbmFnZXIgPSBuZXcgQWN0aW9uTWFuYWdlcihzY2VuZSk7Cisg
ICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHsKKyAgICAgICAgICAgIHNjZW5lLmFjdGlvbk1h
bmFnZXIgPSBhY3Rpb25NYW5hZ2VyOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgb2JqZWN0LmFjdGlvbk1hbmFnZXIgPSBhY3Rpb25NYW5hZ2VyOworICAgICAgICB9Cisg
ICAgICAgIC8vIGluc3RhbmNpYXRlIGEgbmV3IG9iamVjdAorICAgICAgICB2YXIgaW5zdGFuY2lh
dGUgPSBmdW5jdGlvbiAobmFtZSwgcGFyYW1zKSB7CisgICAgICAgICAgICB2YXIgaW50ZXJuYWxD
bGFzc1R5cGUgPSBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
X1R5cGVTdG9yZSJdLkdldENsYXNzKCJCQUJZTE9OLiIgKyBuYW1lKTsKKyAgICAgICAgICAgIGlm
IChpbnRlcm5hbENsYXNzVHlwZSkgeworICAgICAgICAgICAgICAgIHZhciBuZXdJbnN0YW5jZSA9
IE9iamVjdC5jcmVhdGUoaW50ZXJuYWxDbGFzc1R5cGUucHJvdG90eXBlKTsKKyAgICAgICAgICAg
ICAgICBuZXdJbnN0YW5jZS5jb25zdHJ1Y3Rvci5hcHBseShuZXdJbnN0YW5jZSwgcGFyYW1zKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbmV3SW5zdGFuY2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisgICAgICAgIHZhciBwYXJzZVBhcmFtZXRlciA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1
ZSwgdGFyZ2V0LCBwcm9wZXJ0eVBhdGgpIHsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eVBhdGgg
PT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBTdHJpbmcsIGJvb2xlYW4gb3IgZmxvYXQK
KyAgICAgICAgICAgICAgICB2YXIgZmxvYXRWYWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpOworICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gInRydWUiIHx8IHZhbHVlID09PSAiZmFsc2UiKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gInRydWUiOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGlzTmFOKGZsb2F0VmFsdWUpID8gdmFsdWUgOiBmbG9hdFZhbHVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBlZmZlY3RpdmVUYXJnZXQgPSBw
cm9wZXJ0eVBhdGguc3BsaXQoIi4iKTsKKyAgICAgICAgICAgIHZhciB2YWx1ZXMgPSB2YWx1ZS5z
cGxpdCgiLCIpOworICAgICAgICAgICAgLy8gR2V0IGVmZmVjdGl2ZSBUYXJnZXQKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWZmZWN0aXZlVGFyZ2V0Lmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2VmZmVjdGl2ZVRhcmdldFtpXV07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBSZXR1cm4gYXBwcm9wcmlhdGUgdmFsdWUgd2l0aCBp
dHMgdHlwZQorICAgICAgICAgICAgaWYgKHR5cGVvZiAodGFyZ2V0KSA9PT0gImJvb2xlYW4iKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1swXSA9PT0gInRydWUiOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHR5cGVvZiAodGFyZ2V0KSA9PT0gInN0cmluZyIpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzWzBdOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gUGFyYW1ldGVycyB3aXRoIG11bHRpcGxlIHZhbHVlcyBzdWNoIGFzIFZlY3RvcjMgZXRj
LgorICAgICAgICAgICAgdmFyIHNwbGl0ID0gbmV3IEFycmF5KCk7CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHNw
bGl0LnB1c2gocGFyc2VGbG9hdCh2YWx1ZXNbaV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0u
RnJvbUFycmF5KHNwbGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0YXJnZXQg
aW5zdGFuY2VvZiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siVmVjdG9yNCJdKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3I0Il0uRnJvbUFycmF5KHNwbGl0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBfTWF0
aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb2xvcjMiXSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJDb2xvcjMiXS5Gcm9tQXJyYXkoc3BsaXQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9yNCJdKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9y
NCJdLkZyb21BcnJheShzcGxpdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
cGFyc2VGbG9hdCh2YWx1ZXNbMF0pOworICAgICAgICB9OworICAgICAgICAvLyB0cmF2ZXJzZSBn
cmFwaCBwZXIgdHJpZ2dlcgorICAgICAgICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiAocGFyc2Vk
QWN0aW9uLCB0cmlnZ2VyLCBjb25kaXRpb24sIGFjdGlvbiwgY29tYmluZUFycmF5KSB7CisgICAg
ICAgICAgICBpZiAoY29tYmluZUFycmF5ID09PSB2b2lkIDApIHsgY29tYmluZUFycmF5ID0gbnVs
bDsgfQorICAgICAgICAgICAgaWYgKHBhcnNlZEFjdGlvbi5kZXRhY2hlZCkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJz
ID0gbmV3IEFycmF5KCk7CisgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gbnVsbDsKKyAgICAgICAg
ICAgIHZhciBwcm9wZXJ0eVBhdGggPSBudWxsOworICAgICAgICAgICAgdmFyIGNvbWJpbmUgPSBw
YXJzZWRBY3Rpb24uY29tYmluZSAmJiBwYXJzZWRBY3Rpb24uY29tYmluZS5sZW5ndGggPiAwOwor
ICAgICAgICAgICAgLy8gUGFyYW1ldGVycworICAgICAgICAgICAgaWYgKHBhcnNlZEFjdGlvbi50
eXBlID09PSAyKSB7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXNoKGFjdGlvbk1hbmFn
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
cGFyYW1ldGVycy5wdXNoKHRyaWdnZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGNvbWJpbmUpIHsKKyAgICAgICAgICAgICAgICB2YXIgYWN0aW9ucyA9IG5ldyBBcnJheSgpOwor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyc2VkQWN0aW9uLmNvbWJpbmUu
bGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2UocGFyc2VkQWN0aW9u
LmNvbWJpbmVbal0sIEFjdGlvbk1hbmFnZXIuTm90aGluZ1RyaWdnZXIsIGNvbmRpdGlvbiwgYWN0
aW9uLCBhY3Rpb25zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGFyYW1l
dGVycy5wdXNoKGFjdGlvbnMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJzZWRBY3Rpb24ucHJvcGVydGll
cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwYXJzZWRB
Y3Rpb24ucHJvcGVydGllc1tpXS52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUg
PSBwYXJzZWRBY3Rpb24ucHJvcGVydGllc1tpXS5uYW1lOworICAgICAgICAgICAgICAgICAgICB2
YXIgdGFyZ2V0VHlwZSA9IHBhcnNlZEFjdGlvbi5wcm9wZXJ0aWVzW2ldLnRhcmdldFR5cGU7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAidGFyZ2V0IikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRhcmdldFR5cGUgIT09IG51bGwgJiYgdGFyZ2V0VHlwZSA9PT0gIlNj
ZW5lUHJvcGVydGllcyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRh
cmdldCA9IHNjZW5lOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0YXJn
ZXQgPSBzY2VuZS5nZXROb2RlQnlOYW1lKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChu
YW1lID09PSAicGFyZW50IikgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY2Vu
ZS5nZXROb2RlQnlOYW1lKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAic291bmQiKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBDYW4gbm90IGV4dGVybmFsaXplIHRvIGNvbXBvbmVudCwgc28gb25seSBjaGVj
a3MgZm9yIHRoZSBwcmVzZW5jZSBvZmYgdGhlIEFQSS4KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzY2VuZS5nZXRTb3VuZEJ5TmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gc2NlbmUuZ2V0U291bmRCeU5hbWUodmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKG5hbWUgIT09ICJwcm9wZXJ0eVBhdGgiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyc2VkQWN0aW9uLnR5cGUgPT09IDIgJiYgbmFtZSA9PT0gIm9wZXJhdG9yIikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gX2NvbmRpdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWYWx1ZUNvbmRpdGlvbiJdW3ZhbHVlXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQYXJhbWV0ZXIobmFtZSwgdmFsdWUsIHRhcmdl
dCwgbmFtZSA9PT0gInZhbHVlIiA/IHByb3BlcnR5UGF0aCA6IG51bGwpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlQYXRoID0gdmFsdWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXNo
KHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoY29tYmluZUFycmF5ID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5w
dXNoKGNvbmRpdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLnB1c2gobnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAvLyBJZiBpbnRlcnBvbGF0ZSB2YWx1ZSBhY3Rpb24KKyAgICAgICAgICAgIGlmIChwYXJz
ZWRBY3Rpb24ubmFtZSA9PT0gIkludGVycG9sYXRlVmFsdWVBY3Rpb24iKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHBhcmFtID0gcGFyYW1ldGVyc1twYXJhbWV0ZXJzLmxlbmd0aCAtIDJdOworICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcnNbcGFyYW1ldGVycy5sZW5ndGggLSAxXSA9IHBhcmFtOwor
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNbcGFyYW1ldGVycy5sZW5ndGggLSAyXSA9IGNvbmRp
dGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEFjdGlvbiBvciBjb25kaXRpb24o
cykgYW5kIG5vdCBDb21iaW5lQWN0aW9uCisgICAgICAgICAgICB2YXIgbmV3QWN0aW9uID0gaW5z
dGFuY2lhdGUocGFyc2VkQWN0aW9uLm5hbWUsIHBhcmFtZXRlcnMpOworICAgICAgICAgICAgaWYg
KG5ld0FjdGlvbiBpbnN0YW5jZW9mIF9jb25kaXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siQ29uZGl0aW9uIl0gJiYgY29uZGl0aW9uICE9PSBudWxsKSB7CisgICAgICAgICAgICAg
ICAgdmFyIG5vdGhpbmcgPSBuZXcgX2RpcmVjdEFjdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siRG9Ob3RoaW5nQWN0aW9uIl0odHJpZ2dlciwgY29uZGl0aW9uKTsKKyAgICAgICAg
ICAgICAgICBpZiAoYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdGlvbi50aGVuKG5v
dGhpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgYWN0aW9uTWFuYWdlci5yZWdpc3RlckFjdGlvbihub3RoaW5nKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWN0aW9uID0gbm90aGluZzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb21iaW5lQXJyYXkgPT09IG51bGwpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobmV3QWN0aW9uIGluc3RhbmNlb2YgX2NvbmRpdGlvbl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJDb25kaXRpb24iXSkgeworICAgICAgICAgICAgICAgICAgICBj
b25kaXRpb24gPSBuZXdBY3Rpb247CisgICAgICAgICAgICAgICAgICAgIG5ld0FjdGlvbiA9IGFj
dGlvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbmRpdGlvbiA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIGlmIChh
Y3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi50aGVuKG5ld0FjdGlvbik7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhY3Rpb25NYW5hZ2VyLnJlZ2lzdGVyQWN0aW9uKG5ld0FjdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21iaW5lQXJyYXkucHVz
aChuZXdBY3Rpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBwYXJzZWRBY3Rpb24uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICB0cmF2ZXJzZShwYXJzZWRBY3Rpb24uY2hpbGRyZW5baV0sIHRyaWdnZXIsIGNvbmRpdGlvbiwg
bmV3QWN0aW9uLCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgLy8g
dHJpZ2dlcnMKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJzZWRBY3Rpb25zLmNoaWxk
cmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdHJpZ2dlclBhcmFtczsKKyAgICAg
ICAgICAgIHZhciB0cmlnZ2VyID0gcGFyc2VkQWN0aW9ucy5jaGlsZHJlbltpXTsKKyAgICAgICAg
ICAgIGlmICh0cmlnZ2VyLnByb3BlcnRpZXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAg
IHZhciBwYXJhbSA9IHRyaWdnZXIucHJvcGVydGllc1swXS52YWx1ZTsKKyAgICAgICAgICAgICAg
ICB2YXIgdmFsdWUgPSB0cmlnZ2VyLnByb3BlcnRpZXNbMF0udGFyZ2V0VHlwZSA9PT0gbnVsbCA/
IHBhcmFtIDogc2NlbmUuZ2V0TWVzaEJ5TmFtZShwYXJhbSk7CisgICAgICAgICAgICAgICAgaWYg
KHZhbHVlLl9tZXNoSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUubWVzaCA9IHNjZW5l
LmdldE1lc2hCeUlEKHZhbHVlLl9tZXNoSWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB0cmlnZ2VyUGFyYW1zID0geyB0cmlnZ2VyOiBBY3Rpb25NYW5hZ2VyW3RyaWdnZXIu
bmFtZV0sIHBhcmFtZXRlcjogdmFsdWUgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHRyaWdnZXJQYXJhbXMgPSBBY3Rpb25NYW5hZ2VyW3RyaWdn
ZXIubmFtZV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8
IHRyaWdnZXIuY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRy
aWdnZXIuZGV0YWNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2UodHJpZ2dlci5j
aGlsZHJlbltqXSwgdHJpZ2dlclBhcmFtcywgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQg
YSB0cmlnZ2VyIG5hbWUgYnkgaW5kZXgKKyAgICAgKiBAcGFyYW0gdHJpZ2dlciBkZWZpbmVzIHRo
ZSB0cmlnZ2VyIGluZGV4CisgICAgICogQHJldHVybnMgYSB0cmlnZ2VyIG5hbWUKKyAgICAgKi8K
KyAgICBBY3Rpb25NYW5hZ2VyLkdldFRyaWdnZXJOYW1lID0gZnVuY3Rpb24gKHRyaWdnZXIpIHsK
KyAgICAgICAgc3dpdGNoICh0cmlnZ2VyKSB7CisgICAgICAgICAgICBjYXNlIDA6IHJldHVybiAi
Tm90aGluZ1RyaWdnZXIiOworICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gIk9uUGlja1RyaWdn
ZXIiOworICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gIk9uTGVmdFBpY2tUcmlnZ2VyIjsKKyAg
ICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJPblJpZ2h0UGlja1RyaWdnZXIiOworICAgICAgICAg
ICAgY2FzZSA0OiByZXR1cm4gIk9uQ2VudGVyUGlja1RyaWdnZXIiOworICAgICAgICAgICAgY2Fz
ZSA1OiByZXR1cm4gIk9uUGlja0Rvd25UcmlnZ2VyIjsKKyAgICAgICAgICAgIGNhc2UgNjogcmV0
dXJuICJPblBpY2tVcFRyaWdnZXIiOworICAgICAgICAgICAgY2FzZSA3OiByZXR1cm4gIk9uTG9u
Z1ByZXNzVHJpZ2dlciI7CisgICAgICAgICAgICBjYXNlIDg6IHJldHVybiAiT25Qb2ludGVyT3Zl
clRyaWdnZXIiOworICAgICAgICAgICAgY2FzZSA5OiByZXR1cm4gIk9uUG9pbnRlck91dFRyaWdn
ZXIiOworICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuICJPbkV2ZXJ5RnJhbWVUcmlnZ2VyIjsK
KyAgICAgICAgICAgIGNhc2UgMTE6IHJldHVybiAiT25JbnRlcnNlY3Rpb25FbnRlclRyaWdnZXIi
OworICAgICAgICAgICAgY2FzZSAxMjogcmV0dXJuICJPbkludGVyc2VjdGlvbkV4aXRUcmlnZ2Vy
IjsKKyAgICAgICAgICAgIGNhc2UgMTM6IHJldHVybiAiT25LZXlEb3duVHJpZ2dlciI7CisgICAg
ICAgICAgICBjYXNlIDE0OiByZXR1cm4gIk9uS2V5VXBUcmlnZ2VyIjsKKyAgICAgICAgICAgIGNh
c2UgMTU6IHJldHVybiAiT25QaWNrT3V0VHJpZ2dlciI7CisgICAgICAgICAgICBkZWZhdWx0OiBy
ZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIE5vdGhpbmcKKyAg
ICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rp
b25zI3RyaWdnZXJzCisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5Ob3RoaW5nVHJpZ2dlciA9
IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQ29uc3Rh
bnRzIl0uQUNUSU9OX05vdGhpbmdUcmlnZ2VyOworICAgIC8qKgorICAgICAqIE9uIHBpY2sKKyAg
ICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rp
b25zI3RyaWdnZXJzCisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5PblBpY2tUcmlnZ2VyID0g
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFu
dHMiXS5BQ1RJT05fT25QaWNrVHJpZ2dlcjsKKyAgICAvKioKKyAgICAgKiBPbiBsZWZ0IHBpY2sK
KyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9h
Y3Rpb25zI3RyaWdnZXJzCisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5PbkxlZnRQaWNrVHJp
Z2dlciA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1si
Q29uc3RhbnRzIl0uQUNUSU9OX09uTGVmdFBpY2tUcmlnZ2VyOworICAgIC8qKgorICAgICAqIE9u
IHJpZ2h0IHBpY2sKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
aG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJzCisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5P
blJpZ2h0UGlja1RyaWdnZXIgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzExX19bIkNvbnN0YW50cyJdLkFDVElPTl9PblJpZ2h0UGlja1RyaWdnZXI7CisgICAg
LyoqCisgICAgICogT24gY2VudGVyIHBpY2sKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxv
bmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJzCisgICAgICovCisgICAg
QWN0aW9uTWFuYWdlci5PbkNlbnRlclBpY2tUcmlnZ2VyID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25DZW50ZXJQ
aWNrVHJpZ2dlcjsKKyAgICAvKioKKyAgICAgKiBPbiBwaWNrIGRvd24KKyAgICAgKiBAc2VlIGh0
dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJz
CisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5PblBpY2tEb3duVHJpZ2dlciA9IF9FbmdpbmVz
X2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uQUNU
SU9OX09uUGlja0Rvd25UcmlnZ2VyOworICAgIC8qKgorICAgICAqIE9uIGRvdWJsZSBwaWNrCisg
ICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0
aW9ucyN0cmlnZ2VycworICAgICAqLworICAgIEFjdGlvbk1hbmFnZXIuT25Eb3VibGVQaWNrVHJp
Z2dlciA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1si
Q29uc3RhbnRzIl0uQUNUSU9OX09uRG91YmxlUGlja1RyaWdnZXI7CisgICAgLyoqCisgICAgICog
T24gcGljayB1cAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9o
b3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLk9u
UGlja1VwVHJpZ2dlciA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uUGlja1VwVHJpZ2dlcjsKKyAgICAvKioKKyAg
ICAgKiBPbiBwaWNrIG91dC4KKyAgICAgKiBUaGlzIHRyaWdnZXIgd2lsbCBvbmx5IGJlIHJhaXNl
ZCBpZiB5b3UgYWxzbyBkZWNsYXJlZCBhIE9uUGlja0Rvd24KKyAgICAgKiBAc2VlIGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJzCisgICAg
ICovCisgICAgQWN0aW9uTWFuYWdlci5PblBpY2tPdXRUcmlnZ2VyID0gX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25Q
aWNrT3V0VHJpZ2dlcjsKKyAgICAvKioKKyAgICAgKiBPbiBsb25nIHByZXNzCisgICAgICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucyN0cmln
Z2VycworICAgICAqLworICAgIEFjdGlvbk1hbmFnZXIuT25Mb25nUHJlc3NUcmlnZ2VyID0gX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMi
XS5BQ1RJT05fT25Mb25nUHJlc3NUcmlnZ2VyOworICAgIC8qKgorICAgICAqIE9uIHBvaW50ZXIg
b3ZlcgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9f
dXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLk9uUG9pbnRl
ck92ZXJUcmlnZ2VyID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMV9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25Qb2ludGVyT3ZlclRyaWdnZXI7CisgICAgLyoq
CisgICAgICogT24gcG9pbnRlciBvdXQKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJzCisgICAgICovCisgICAgQWN0
aW9uTWFuYWdlci5PblBvaW50ZXJPdXRUcmlnZ2VyID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25Qb2ludGVyT3V0
VHJpZ2dlcjsKKyAgICAvKioKKyAgICAgKiBPbiBldmVyeSBmcmFtZQorICAgICAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMK
KyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLk9uRXZlcnlGcmFtZVRyaWdnZXIgPSBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkNvbnN0YW50cyJdLkFD
VElPTl9PbkV2ZXJ5RnJhbWVUcmlnZ2VyOworICAgIC8qKgorICAgICAqIE9uIGludGVyc2VjdGlv
biBlbnRlcgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3df
dG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLk9uSW50
ZXJzZWN0aW9uRW50ZXJUcmlnZ2VyID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25JbnRlcnNlY3Rpb25FbnRlclRy
aWdnZXI7CisgICAgLyoqCisgICAgICogT24gaW50ZXJzZWN0aW9uIGV4aXQKKyAgICAgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdn
ZXJzCisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5PbkludGVyc2VjdGlvbkV4aXRUcmlnZ2Vy
ID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25z
dGFudHMiXS5BQ1RJT05fT25JbnRlcnNlY3Rpb25FeGl0VHJpZ2dlcjsKKyAgICAvKioKKyAgICAg
KiBPbiBrZXkgZG93bgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2Vy
Lk9uS2V5RG93blRyaWdnZXIgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzExX19bIkNvbnN0YW50cyJdLkFDVElPTl9PbktleURvd25UcmlnZ2VyOworICAgIC8q
KgorICAgICAqIE9uIGtleSB1cAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBBY3Rpb25N
YW5hZ2VyLk9uS2V5VXBUcmlnZ2VyID0gMTU7CisgICAgcmV0dXJuIEFjdGlvbk1hbmFnZXI7Cit9
KF9hYnN0cmFjdEFjdGlvbk1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkFi
c3RyYWN0QWN0aW9uTWFuYWdlciJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQWN0
aW9ucy9jb25kaXRpb24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9BY3Rpb25zL2NvbmRpdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQ29uZGl0aW9uLCBWYWx1ZUNv
bmRpdGlvbiwgUHJlZGljYXRlQ29uZGl0aW9uLCBTdGF0ZUNvbmRpdGlvbiAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb25kaXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IENvbmRpdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWYWx1ZUNvbmRpdGlvbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gVmFsdWVDb25kaXRpb247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUHJl
ZGljYXRlQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQcmVkaWNhdGVDb25kaXRpb247
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RhdGVDb25kaXRpb24iLCBmdW5jdGlvbigpIHsgcmV0
dXJuIFN0YXRlQ29uZGl0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNs
aWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbiAqLyAiLi9BY3Rpb25zL2FjdGlvbi50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90eXBlU3RvcmUg
Ki8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKy8qKgorICogQSBDb25kaXRpb24gYXBw
bGllZCB0byBhbiBBY3Rpb24KKyAqLwordmFyIENvbmRpdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IENvbmRpdGlvbgorICAg
ICAqIEBwYXJhbSBhY3Rpb25NYW5hZ2VyIHRoZSBtYW5hZ2VyIG9mIHRoZSBhY3Rpb24gdGhlIGNv
bmRpdGlvbiBpcyBhcHBsaWVkIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gQ29uZGl0aW9uKGFj
dGlvbk1hbmFnZXIpIHsKKyAgICAgICAgdGhpcy5fYWN0aW9uTWFuYWdlciA9IGFjdGlvbk1hbmFn
ZXI7CisgICAgfQorICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IGNvbmRpdGlv
biBpcyB2YWxpZAorICAgICAqIEByZXR1cm5zIGEgYm9vbGVhbgorICAgICAqLworICAgIENvbmRp
dGlvbi5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBvbmx5CisgICAgICogQGhpZGRl
bgorICAgICAqLworICAgIENvbmRpdGlvbi5wcm90b3R5cGUuX2dldFByb3BlcnR5ID0gZnVuY3Rp
b24gKHByb3BlcnR5UGF0aCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9uTWFuYWdlci5f
Z2V0UHJvcGVydHkocHJvcGVydHlQYXRoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEludGVy
bmFsIG9ubHkKKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgQ29uZGl0aW9uLnByb3RvdHlw
ZS5fZ2V0RWZmZWN0aXZlVGFyZ2V0ID0gZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHlQYXRoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25NYW5hZ2VyLl9nZXRFZmZlY3RpdmVUYXJnZXQo
dGFyZ2V0LCBwcm9wZXJ0eVBhdGgpOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXpl
IHBsYWNlaG9sZGVyIGZvciBjaGlsZCBjbGFzc2VzCisgICAgICogQHJldHVybnMgdGhlIHNlcmlh
bGl6ZWQgb2JqZWN0CisgICAgICovCisgICAgQ29uZGl0aW9uLnByb3RvdHlwZS5zZXJpYWxpemUg
PSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBvbmx5Cisg
ICAgICogQGhpZGRlbgorICAgICAqLworICAgIENvbmRpdGlvbi5wcm90b3R5cGUuX3NlcmlhbGl6
ZSA9IGZ1bmN0aW9uIChzZXJpYWxpemVkQ29uZGl0aW9uKSB7CisgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICB0eXBlOiAyLAorICAgICAgICAgICAgY2hpbGRyZW46IFtdLAorICAgICAgICAg
ICAgbmFtZTogc2VyaWFsaXplZENvbmRpdGlvbi5uYW1lLAorICAgICAgICAgICAgcHJvcGVydGll
czogc2VyaWFsaXplZENvbmRpdGlvbi5wcm9wZXJ0aWVzCisgICAgICAgIH07CisgICAgfTsKKyAg
ICByZXR1cm4gQ29uZGl0aW9uOworfSgpKTsKKworLyoqCisgKiBEZWZpbmVzIHNwZWNpZmljIGNv
bmRpdGlvbmFsIG9wZXJhdG9ycyBhcyBleHRlbnNpb25zIG9mIENvbmRpdGlvbgorICovCit2YXIg
VmFsdWVDb25kaXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVmFsdWVDb25k
aXRpb24sIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBWYWx1ZUNvbmRp
dGlvbgorICAgICAqIEBwYXJhbSBhY3Rpb25NYW5hZ2VyIG1hbmFnZXIgZm9yIHRoZSBhY3Rpb24g
dGhlIGNvbmRpdGlvbiBhcHBsaWVzIHRvCisgICAgICogQHBhcmFtIHRhcmdldCBmb3IgdGhlIGFj
dGlvbgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggcGF0aCB0byBzcGVjaWZ5IHRoZSBwcm9w
ZXJ0eSBvZiB0aGUgdGFyZ2V0IHRoZSBjb25kaXRpb25hbCBvcGVyYXRvciB1c2VzCisgICAgICog
QHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBjb21wYXJlZCBieSB0aGUgY29uZGl0aW9uYWwgb3BlcmF0
b3IgYWdhaW5zdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkKKyAgICAgKiBAcGFy
YW0gb3BlcmF0b3IgdGhlIGNvbmRpdGlvbmFsIG9wZXJhdG9yLCBkZWZhdWx0IFZhbHVlQ29uZGl0
aW9uLklzRXF1YWwKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBWYWx1ZUNvbmRpdGlvbihhY3Rpb25N
YW5hZ2VyLCB0YXJnZXQsIAorICAgIC8qKiBwYXRoIHRvIHNwZWNpZnkgdGhlIHByb3BlcnR5IG9m
IHRoZSB0YXJnZXQgdGhlIGNvbmRpdGlvbmFsIG9wZXJhdG9yIHVzZXMgICovCisgICAgcHJvcGVy
dHlQYXRoLCAKKyAgICAvKiogdGhlIHZhbHVlIGNvbXBhcmVkIGJ5IHRoZSBjb25kaXRpb25hbCBv
cGVyYXRvciBhZ2FpbnN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSAqLworICAg
IHZhbHVlLCAKKyAgICAvKiogdGhlIGNvbmRpdGlvbmFsIG9wZXJhdG9yLCBkZWZhdWx0IFZhbHVl
Q29uZGl0aW9uLklzRXF1YWwgKi8KKyAgICBvcGVyYXRvcikgeworICAgICAgICBpZiAob3BlcmF0
b3IgPT09IHZvaWQgMCkgeyBvcGVyYXRvciA9IFZhbHVlQ29uZGl0aW9uLklzRXF1YWw7IH0KKyAg
ICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgYWN0aW9uTWFuYWdlcikgfHwgdGhp
czsKKyAgICAgICAgX3RoaXMucHJvcGVydHlQYXRoID0gcHJvcGVydHlQYXRoOworICAgICAgICBf
dGhpcy52YWx1ZSA9IHZhbHVlOworICAgICAgICBfdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yOwor
ICAgICAgICBfdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICBfdGhpcy5fZWZmZWN0aXZl
VGFyZ2V0ID0gX3RoaXMuX2dldEVmZmVjdGl2ZVRhcmdldCh0YXJnZXQsIF90aGlzLnByb3BlcnR5
UGF0aCk7CisgICAgICAgIF90aGlzLl9wcm9wZXJ0eSA9IF90aGlzLl9nZXRQcm9wZXJ0eShfdGhp
cy5wcm9wZXJ0eVBhdGgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShWYWx1ZUNvbmRpdGlvbiwgIklzRXF1YWwiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiByZXR1cm5zIHRoZSBudW1iZXIgZm9yIElzRXF1YWwKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFZhbHVlQ29u
ZGl0aW9uLl9Jc0VxdWFsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoVmFsdWVDb25kaXRpb24sICJJc0RpZmZlcmVudCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFJldHVybnMgdGhlIG51bWJlciBmb3IgSXNEaWZmZXJlbnQKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFZhbHVlQ29uZGl0
aW9uLl9Jc0RpZmZlcmVudDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFZhbHVlQ29uZGl0aW9uLCAiSXNHcmVhdGVyIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogUmV0dXJucyB0aGUgbnVtYmVyIGZvciBJc0dyZWF0ZXIKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFZhbHVlQ29uZGl0aW9u
Ll9Jc0dyZWF0ZXI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShWYWx1ZUNvbmRpdGlvbiwgIklzTGVzc2VyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
UmV0dXJucyB0aGUgbnVtYmVyIGZvciBJc0xlc3NlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gVmFsdWVDb25kaXRpb24uX0lzTGVz
c2VyOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBDb21wYXJlcyB0aGUgZ2l2
ZW4gdmFsdWUgd2l0aCB0aGUgcHJvcGVydHkgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgY29uZGl0
aW9uYWwgb3BlcmF0b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJp
c29uCisgICAgICovCisgICAgVmFsdWVDb25kaXRpb24ucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHN3aXRjaCAodGhpcy5vcGVyYXRvcikgeworICAgICAgICAgICAg
Y2FzZSBWYWx1ZUNvbmRpdGlvbi5Jc0dyZWF0ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2VmZmVjdGl2ZVRhcmdldFt0aGlzLl9wcm9wZXJ0eV0gPiB0aGlzLnZhbHVlOworICAgICAg
ICAgICAgY2FzZSBWYWx1ZUNvbmRpdGlvbi5Jc0xlc3NlcjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fZWZmZWN0aXZlVGFyZ2V0W3RoaXMuX3Byb3BlcnR5XSA8IHRoaXMudmFsdWU7Cisg
ICAgICAgICAgICBjYXNlIFZhbHVlQ29uZGl0aW9uLklzRXF1YWw6CisgICAgICAgICAgICBjYXNl
IFZhbHVlQ29uZGl0aW9uLklzRGlmZmVyZW50OgorICAgICAgICAgICAgICAgIHZhciBjaGVjazsK
KyAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZS5lcXVhbHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2hlY2sgPSB0aGlzLnZhbHVlLmVxdWFscyh0aGlzLl9lZmZlY3RpdmVUYXJnZXRbdGhp
cy5fcHJvcGVydHldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGNoZWNrID0gdGhpcy52YWx1ZSA9PT0gdGhpcy5fZWZmZWN0
aXZlVGFyZ2V0W3RoaXMuX3Byb3BlcnR5XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMub3BlcmF0b3IgPT09IFZhbHVlQ29uZGl0aW9uLklzRXF1YWwgPyBj
aGVjayA6ICFjaGVjazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgdGhlIFZhbHVlQ29uZGl0aW9uIGludG8gYSBKU09O
IGNvbXBhdGlibGUgb2JqZWN0CisgICAgICogQHJldHVybnMgc2VyaWFsaXphdGlvbiBvYmplY3QK
KyAgICAgKi8KKyAgICBWYWx1ZUNvbmRpdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplKHsKKyAgICAgICAgICAgIG5h
bWU6ICJWYWx1ZUNvbmRpdGlvbiIsCisgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbCisgICAgICAg
ICAgICAgICAgX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBY3Rpb24iXS5f
R2V0VGFyZ2V0UHJvcGVydHkodGhpcy5fdGFyZ2V0KSwKKyAgICAgICAgICAgICAgICB7IG5hbWU6
ICJwcm9wZXJ0eVBhdGgiLCB2YWx1ZTogdGhpcy5wcm9wZXJ0eVBhdGggfSwKKyAgICAgICAgICAg
ICAgICB7IG5hbWU6ICJ2YWx1ZSIsIHZhbHVlOiBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIkFjdGlvbiJdLl9TZXJpYWxpemVWYWx1ZUFzU3RyaW5nKHRoaXMudmFsdWUpIH0s
CisgICAgICAgICAgICAgICAgeyBuYW1lOiAib3BlcmF0b3IiLCB2YWx1ZTogVmFsdWVDb25kaXRp
b24uR2V0T3BlcmF0b3JOYW1lKHRoaXMub3BlcmF0b3IpIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBjb25k
aXRpb25hbCBvcGVyYXRvciBmb3IgdGhlIFZhbHVlQ29uZGl0aW9uCisgICAgICogQHBhcmFtIG9w
ZXJhdG9yIHRoZSBjb25kaXRpb25hbCBvcGVyYXRvcgorICAgICAqIEByZXR1cm5zIHRoZSBuYW1l
CisgICAgICovCisgICAgVmFsdWVDb25kaXRpb24uR2V0T3BlcmF0b3JOYW1lID0gZnVuY3Rpb24g
KG9wZXJhdG9yKSB7CisgICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHsKKyAgICAgICAgICAgIGNh
c2UgVmFsdWVDb25kaXRpb24uX0lzRXF1YWw6IHJldHVybiAiSXNFcXVhbCI7CisgICAgICAgICAg
ICBjYXNlIFZhbHVlQ29uZGl0aW9uLl9Jc0RpZmZlcmVudDogcmV0dXJuICJJc0RpZmZlcmVudCI7
CisgICAgICAgICAgICBjYXNlIFZhbHVlQ29uZGl0aW9uLl9Jc0dyZWF0ZXI6IHJldHVybiAiSXNH
cmVhdGVyIjsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVDb25kaXRpb24uX0lzTGVzc2VyOiByZXR1
cm4gIklzTGVzc2VyIjsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAiIjsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogSW50ZXJuYWwgb25seQorICAgICAqIEBoaWRkZW4K
KyAgICAgKi8KKyAgICBWYWx1ZUNvbmRpdGlvbi5fSXNFcXVhbCA9IDA7CisgICAgLyoqCisgICAg
ICogSW50ZXJuYWwgb25seQorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBWYWx1ZUNvbmRp
dGlvbi5fSXNEaWZmZXJlbnQgPSAxOworICAgIC8qKgorICAgICAqIEludGVybmFsIG9ubHkKKyAg
ICAgKiBAaGlkZGVuCisgICAgICovCisgICAgVmFsdWVDb25kaXRpb24uX0lzR3JlYXRlciA9IDI7
CisgICAgLyoqCisgICAgICogSW50ZXJuYWwgb25seQorICAgICAqIEBoaWRkZW4KKyAgICAgKi8K
KyAgICBWYWx1ZUNvbmRpdGlvbi5fSXNMZXNzZXIgPSAzOworICAgIHJldHVybiBWYWx1ZUNvbmRp
dGlvbjsKK30oQ29uZGl0aW9uKSk7CisKKy8qKgorICogRGVmaW5lcyBhIHByZWRpY2F0ZSBjb25k
aXRpb24gYXMgYW4gZXh0ZW5zaW9uIG9mIENvbmRpdGlvbgorICovCit2YXIgUHJlZGljYXRlQ29u
ZGl0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFByZWRpY2F0ZUNvbmRpdGlv
biwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFByZWRpY2F0ZUNvbmRp
dGlvbgorICAgICAqIEBwYXJhbSBhY3Rpb25NYW5hZ2VyIG1hbmFnZXIgZm9yIHRoZSBhY3Rpb24g
dGhlIGNvbmRpdGlvbiBhcHBsaWVzIHRvCisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBkZWZpbmVz
IHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCB0byB2YWxpZGF0ZSB0aGUgY29uZGl0aW9uCisg
ICAgICovCisgICAgZnVuY3Rpb24gUHJlZGljYXRlQ29uZGl0aW9uKGFjdGlvbk1hbmFnZXIsIAor
ICAgIC8qKiBkZWZpbmVzIHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCB0byB2YWxpZGF0ZSB0
aGUgY29uZGl0aW9uICovCisgICAgcHJlZGljYXRlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9z
dXBlci5jYWxsKHRoaXMsIGFjdGlvbk1hbmFnZXIpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnBy
ZWRpY2F0ZSA9IHByZWRpY2F0ZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAv
KioKKyAgICAgKiBAcmV0dXJucyB0aGUgdmFsaWRpdHkgb2YgdGhlIHByZWRpY2F0ZSBjb25kaXRp
b24KKyAgICAgKi8KKyAgICBQcmVkaWNhdGVDb25kaXRpb24ucHJvdG90eXBlLmlzVmFsaWQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnByZWRpY2F0ZSgpOworICAgIH07Cisg
ICAgcmV0dXJuIFByZWRpY2F0ZUNvbmRpdGlvbjsKK30oQ29uZGl0aW9uKSk7CisKKy8qKgorICog
RGVmaW5lcyBhIHN0YXRlIGNvbmRpdGlvbiBhcyBhbiBleHRlbnNpb24gb2YgQ29uZGl0aW9uCisg
Ki8KK3ZhciBTdGF0ZUNvbmRpdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIp
IHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShT
dGF0ZUNvbmRpdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFN0
YXRlQ29uZGl0aW9uCisgICAgICogQHBhcmFtIGFjdGlvbk1hbmFnZXIgbWFuYWdlciBmb3IgdGhl
IGFjdGlvbiB0aGUgY29uZGl0aW9uIGFwcGxpZXMgdG8KKyAgICAgKiBAcGFyYW0gdGFyZ2V0IG9m
IHRoZSBjb25kaXRpb24KKyAgICAgKiBAcGFyYW0gdmFsdWUgdG8gY29tcGFyZSB3aXRoIHRhcmdl
dCBzdGF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIFN0YXRlQ29uZGl0aW9uKGFjdGlvbk1hbmFn
ZXIsIHRhcmdldCwgCisgICAgLyoqIFZhbHVlIHRvIGNvbXBhcmUgd2l0aCB0YXJnZXQgc3RhdGUg
ICovCisgICAgdmFsdWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywg
YWN0aW9uTWFuYWdlcikgfHwgdGhpczsKKyAgICAgICAgX3RoaXMudmFsdWUgPSB2YWx1ZTsKKyAg
ICAgICAgX3RoaXMuX3RhcmdldCA9IHRhcmdldDsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAg
IH0KKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBjdXJy
ZW50IGNvbmRpdGlvbiBpcyBtZXQKKyAgICAgKiBAcmV0dXJucyB0aGUgdmFsaWRpdHkgb2YgdGhl
IHN0YXRlCisgICAgICovCisgICAgU3RhdGVDb25kaXRpb24ucHJvdG90eXBlLmlzVmFsaWQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl90YXJnZXQuc3RhdGUgPT09IHRoaXMu
dmFsdWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgdGhlIFN0YXRlQ29uZGl0
aW9uIGludG8gYSBKU09OIGNvbXBhdGlibGUgb2JqZWN0CisgICAgICogQHJldHVybnMgc2VyaWFs
aXphdGlvbiBvYmplY3QKKyAgICAgKi8KKyAgICBTdGF0ZUNvbmRpdGlvbi5wcm90b3R5cGUuc2Vy
aWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplKHsK
KyAgICAgICAgICAgIG5hbWU6ICJTdGF0ZUNvbmRpdGlvbiIsCisgICAgICAgICAgICBwcm9wZXJ0
aWVzOiBbCisgICAgICAgICAgICAgICAgX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJBY3Rpb24iXS5fR2V0VGFyZ2V0UHJvcGVydHkodGhpcy5fdGFyZ2V0KSwKKyAgICAgICAg
ICAgICAgICB7IG5hbWU6ICJ2YWx1ZSIsIHZhbHVlOiB0aGlzLnZhbHVlIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICByZXR1cm4gU3RhdGVDb25kaXRpb247Cit9KENv
bmRpdGlvbikpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5WYWx1ZUNvbmRpdGlvbiJd
ID0gVmFsdWVDb25kaXRpb247CitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5QcmVkaWNhdGVD
b25kaXRpb24iXSA9IFByZWRpY2F0ZUNvbmRpdGlvbjsKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZ
TE9OLlN0YXRlQ29uZGl0aW9uIl0gPSBTdGF0ZUNvbmRpdGlvbjsKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vQWN0aW9ucy9kaXJlY3RBY3Rpb25zLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0FjdGlvbnMvZGlyZWN0QWN0aW9ucy50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IFN3aXRjaEJvb2xlYW5BY3Rpb24sIFNldFN0YXRlQWN0aW9uLCBTZXRWYWx1ZUFj
dGlvbiwgSW5jcmVtZW50VmFsdWVBY3Rpb24sIFBsYXlBbmltYXRpb25BY3Rpb24sIFN0b3BBbmlt
YXRpb25BY3Rpb24sIERvTm90aGluZ0FjdGlvbiwgQ29tYmluZUFjdGlvbiwgRXhlY3V0ZUNvZGVB
Y3Rpb24sIFNldFBhcmVudEFjdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTd2l0Y2hCb29sZWFuQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTd2l0Y2hCb29s
ZWFuQWN0aW9uOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNldFN0YXRlQWN0aW9uIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBTZXRTdGF0ZUFjdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTZXRW
YWx1ZUFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2V0VmFsdWVBY3Rpb247IH0pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiSW5jcmVtZW50VmFsdWVBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEluY3JlbWVudFZhbHVlQWN0aW9uOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBsYXlBbmltYXRp
b25BY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBsYXlBbmltYXRpb25BY3Rpb247IH0pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiU3RvcEFuaW1hdGlvbkFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gU3RvcEFuaW1hdGlvbkFjdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEb05vdGhpbmdB
Y3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIERvTm90aGluZ0FjdGlvbjsgfSk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJDb21iaW5lQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb21iaW5lQWN0
aW9uOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkV4ZWN1dGVDb2RlQWN0aW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBFeGVjdXRlQ29kZUFjdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTZXRQ
YXJlbnRBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNldFBhcmVudEFjdGlvbjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMv
bWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlv
biAqLyAiLi9BY3Rpb25zL2FjdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFu
dHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mv
dHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKworCisvKioKKyAq
IFRoaXMgZGVmaW5lcyBhbiBhY3Rpb24gcmVzcG9uc2libGUgdG8gdG9nZ2xlIGEgYm9vbGVhbiBv
bmNlIHRyaWdnZXJlZC4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9o
b3dfdG9fdXNlX2FjdGlvbnMKKyAqLwordmFyIFN3aXRjaEJvb2xlYW5BY3Rpb24gPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19leHRlbmRzIl0oU3dpdGNoQm9vbGVhbkFjdGlvbiwgX3N1cGVyKTsKKyAg
ICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZSB0aGUgYWN0aW9uCisgICAgICogQHBhcmFtIHRyaWdn
ZXJPcHRpb25zIGRlZmluZXMgdGhlIHRyaWdnZXIgb3B0aW9ucworICAgICAqIEBwYXJhbSB0YXJn
ZXQgZGVmaW5lcyB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGJvb2xlYW4KKyAgICAgKiBAcGFy
YW0gcHJvcGVydHlQYXRoIGRlZmluZXMgdGhlIHBhdGggdG8gdGhlIGJvb2xlYW4gcHJvcGVydHkg
aW4gdGhlIHRhcmdldCBvYmplY3QKKyAgICAgKiBAcGFyYW0gY29uZGl0aW9uIGRlZmluZXMgdGhl
IHRyaWdnZXIgcmVsYXRlZCBjb25kaXRpb25zCisgICAgICovCisgICAgZnVuY3Rpb24gU3dpdGNo
Qm9vbGVhbkFjdGlvbih0cmlnZ2VyT3B0aW9ucywgdGFyZ2V0LCBwcm9wZXJ0eVBhdGgsIGNvbmRp
dGlvbikgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0cmlnZ2VyT3B0
aW9ucywgY29uZGl0aW9uKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5wcm9wZXJ0eVBhdGggPSBw
cm9wZXJ0eVBhdGg7CisgICAgICAgIF90aGlzLl90YXJnZXQgPSBfdGhpcy5fZWZmZWN0aXZlVGFy
Z2V0ID0gdGFyZ2V0OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKiBAaGlk
ZGVuICovCisgICAgU3dpdGNoQm9vbGVhbkFjdGlvbi5wcm90b3R5cGUuX3ByZXBhcmUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2VmZmVjdGl2ZVRhcmdldCA9IHRoaXMuX2dldEVmZmVj
dGl2ZVRhcmdldCh0aGlzLl9lZmZlY3RpdmVUYXJnZXQsIHRoaXMucHJvcGVydHlQYXRoKTsKKyAg
ICAgICAgdGhpcy5fcHJvcGVydHkgPSB0aGlzLl9nZXRQcm9wZXJ0eSh0aGlzLnByb3BlcnR5UGF0
aCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBhY3Rpb24gdG9nZ2xlIHRo
ZSBib29sZWFuIHZhbHVlLgorICAgICAqLworICAgIFN3aXRjaEJvb2xlYW5BY3Rpb24ucHJvdG90
eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2VmZmVjdGl2ZVRhcmdl
dFt0aGlzLl9wcm9wZXJ0eV0gPSAhdGhpcy5fZWZmZWN0aXZlVGFyZ2V0W3RoaXMuX3Byb3BlcnR5
XTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGFjdGlvbnMgYW5kIGl0
cyByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbSBwYXJlbnQgZGVmaW5lcyB0aGUg
b2JqZWN0IHRvIHNlcmlhbGl6ZSBpbgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxpemVkIG9i
amVjdAorICAgICAqLworICAgIFN3aXRjaEJvb2xlYW5BY3Rpb24ucHJvdG90eXBlLnNlcmlhbGl6
ZSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUu
X3NlcmlhbGl6ZS5jYWxsKHRoaXMsIHsKKyAgICAgICAgICAgIG5hbWU6ICJTd2l0Y2hCb29sZWFu
QWN0aW9uIiwKKyAgICAgICAgICAgIHByb3BlcnRpZXM6IFsKKyAgICAgICAgICAgICAgICBfYWN0
aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFjdGlvbiJdLl9HZXRUYXJnZXRQcm9w
ZXJ0eSh0aGlzLl90YXJnZXQpLAorICAgICAgICAgICAgICAgIHsgbmFtZTogInByb3BlcnR5UGF0
aCIsIHZhbHVlOiB0aGlzLnByb3BlcnR5UGF0aCB9CisgICAgICAgICAgICBdCisgICAgICAgIH0s
IHBhcmVudCk7CisgICAgfTsKKyAgICByZXR1cm4gU3dpdGNoQm9vbGVhbkFjdGlvbjsKK30oX2Fj
dGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJBY3Rpb24iXSkpOworCisvKioKKyAq
IFRoaXMgZGVmaW5lcyBhbiBhY3Rpb24gcmVzcG9uc2libGUgdG8gc2V0IGEgdGhlIHN0YXRlIGZp
ZWxkIG9mIHRoZSB0YXJnZXQKKyAqICB0byBhIGRlc2lyZWQgdmFsdWUgb25jZSB0cmlnZ2VyZWQu
CisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rp
b25zCisgKi8KK3ZhciBTZXRTdGF0ZUFjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChf
c3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVu
ZHMiXShTZXRTdGF0ZUFjdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0
ZSB0aGUgYWN0aW9uCisgICAgICogQHBhcmFtIHRyaWdnZXJPcHRpb25zIGRlZmluZXMgdGhlIHRy
aWdnZXIgb3B0aW9ucworICAgICAqIEBwYXJhbSB0YXJnZXQgZGVmaW5lcyB0aGUgb2JqZWN0IGNv
bnRhaW5pbmcgdGhlIHN0YXRlIHByb3BlcnR5CisgICAgICogQHBhcmFtIHZhbHVlIGRlZmluZXMg
dGhlIHZhbHVlIHRvIHN0b3JlIGluIHRoZSBzdGF0ZSBmaWVsZAorICAgICAqIEBwYXJhbSBjb25k
aXRpb24gZGVmaW5lcyB0aGUgdHJpZ2dlciByZWxhdGVkIGNvbmRpdGlvbnMKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBTZXRTdGF0ZUFjdGlvbih0cmlnZ2VyT3B0aW9ucywgdGFyZ2V0LCB2YWx1ZSwg
Y29uZGl0aW9uKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHRyaWdn
ZXJPcHRpb25zLCBjb25kaXRpb24pIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnZhbHVlID0gdmFs
dWU7CisgICAgICAgIF90aGlzLl90YXJnZXQgPSB0YXJnZXQ7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgLyoqCisgICAgICogRXhlY3V0ZSB0aGUgYWN0aW9uIGFuZCBzdG9yZSB0
aGUgdmFsdWUgb24gdGhlIHRhcmdldCBzdGF0ZSBwcm9wZXJ0eS4KKyAgICAgKi8KKyAgICBTZXRT
dGF0ZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy5fdGFyZ2V0LnN0YXRlID0gdGhpcy52YWx1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
cmlhbGl6ZXMgdGhlIGFjdGlvbnMgYW5kIGl0cyByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgICAq
IEBwYXJhbSBwYXJlbnQgZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSBpbgorICAgICAq
IEByZXR1cm5zIHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIFNldFN0YXRlQWN0
aW9uLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAocGFyZW50KSB7CisgICAgICAgIHJl
dHVybiBfc3VwZXIucHJvdG90eXBlLl9zZXJpYWxpemUuY2FsbCh0aGlzLCB7CisgICAgICAgICAg
ICBuYW1lOiAiU2V0U3RhdGVBY3Rpb24iLAorICAgICAgICAgICAgcHJvcGVydGllczogWworICAg
ICAgICAgICAgICAgIF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0aW9u
Il0uX0dldFRhcmdldFByb3BlcnR5KHRoaXMuX3RhcmdldCksCisgICAgICAgICAgICAgICAgeyBu
YW1lOiAidmFsdWUiLCB2YWx1ZTogdGhpcy52YWx1ZSB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0sIHBhcmVudCk7CisgICAgfTsKKyAgICByZXR1cm4gU2V0U3RhdGVBY3Rpb247Cit9KF9hY3Rp
b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0aW9uIl0pKTsKKworLyoqCisgKiBU
aGlzIGRlZmluZXMgYW4gYWN0aW9uIHJlc3BvbnNpYmxlIHRvIHNldCBhIHByb3BlcnR5IG9mIHRo
ZSB0YXJnZXQKKyAqICB0byBhIGRlc2lyZWQgdmFsdWUgb25jZSB0cmlnZ2VyZWQuCisgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zCisgKi8K
K3ZhciBTZXRWYWx1ZUFjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShTZXRW
YWx1ZUFjdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZSB0aGUgYWN0
aW9uCisgICAgICogQHBhcmFtIHRyaWdnZXJPcHRpb25zIGRlZmluZXMgdGhlIHRyaWdnZXIgb3B0
aW9ucworICAgICAqIEBwYXJhbSB0YXJnZXQgZGVmaW5lcyB0aGUgb2JqZWN0IGNvbnRhaW5pbmcg
dGhlIHByb3BlcnR5CisgICAgICogQHBhcmFtIHByb3BlcnR5UGF0aCBkZWZpbmVzIHRoZSBwYXRo
IG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQgaW4gdGhlIHRhcmdldAorICAgICAqIEBwYXJhbSB2YWx1
ZSBkZWZpbmVzIHRoZSB2YWx1ZSB0byBzZXQgaW4gdGhlIHByb3BlcnR5CisgICAgICogQHBhcmFt
IGNvbmRpdGlvbiBkZWZpbmVzIHRoZSB0cmlnZ2VyIHJlbGF0ZWQgY29uZGl0aW9ucworICAgICAq
LworICAgIGZ1bmN0aW9uIFNldFZhbHVlQWN0aW9uKHRyaWdnZXJPcHRpb25zLCB0YXJnZXQsIHBy
b3BlcnR5UGF0aCwgdmFsdWUsIGNvbmRpdGlvbikgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3Vw
ZXIuY2FsbCh0aGlzLCB0cmlnZ2VyT3B0aW9ucywgY29uZGl0aW9uKSB8fCB0aGlzOworICAgICAg
ICBfdGhpcy5wcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGg7CisgICAgICAgIF90aGlzLnZhbHVl
ID0gdmFsdWU7CisgICAgICAgIF90aGlzLl90YXJnZXQgPSBfdGhpcy5fZWZmZWN0aXZlVGFyZ2V0
ID0gdGFyZ2V0OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVu
ICovCisgICAgU2V0VmFsdWVBY3Rpb24ucHJvdG90eXBlLl9wcmVwYXJlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB0aGlzLl9lZmZlY3RpdmVUYXJnZXQgPSB0aGlzLl9nZXRFZmZlY3RpdmVUYXJn
ZXQodGhpcy5fZWZmZWN0aXZlVGFyZ2V0LCB0aGlzLnByb3BlcnR5UGF0aCk7CisgICAgICAgIHRo
aXMuX3Byb3BlcnR5ID0gdGhpcy5fZ2V0UHJvcGVydHkodGhpcy5wcm9wZXJ0eVBhdGgpOworICAg
IH07CisgICAgLyoqCisgICAgICogRXhlY3V0ZSB0aGUgYWN0aW9uIGFuZCBzZXQgdGhlIHRhcmdl
dHRlZCBwcm9wZXJ0eSB0byB0aGUgZGVzaXJlZCB2YWx1ZS4KKyAgICAgKi8KKyAgICBTZXRWYWx1
ZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5f
ZWZmZWN0aXZlVGFyZ2V0W3RoaXMuX3Byb3BlcnR5XSA9IHRoaXMudmFsdWU7CisgICAgICAgIGlm
ICh0aGlzLl90YXJnZXQubWFya0FzRGlydHkpIHsKKyAgICAgICAgICAgIHRoaXMuX3RhcmdldC5t
YXJrQXNEaXJ0eSh0aGlzLl9wcm9wZXJ0eSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNlcmlhbGl6ZXMgdGhlIGFjdGlvbnMgYW5kIGl0cyByZWxhdGVkIGluZm9ybWF0aW9u
LgorICAgICAqIEBwYXJhbSBwYXJlbnQgZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSBp
bgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIFNl
dFZhbHVlQWN0aW9uLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAocGFyZW50KSB7Cisg
ICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl9zZXJpYWxpemUuY2FsbCh0aGlzLCB7Cisg
ICAgICAgICAgICBuYW1lOiAiU2V0VmFsdWVBY3Rpb24iLAorICAgICAgICAgICAgcHJvcGVydGll
czogWworICAgICAgICAgICAgICAgIF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siQWN0aW9uIl0uX0dldFRhcmdldFByb3BlcnR5KHRoaXMuX3RhcmdldCksCisgICAgICAgICAg
ICAgICAgeyBuYW1lOiAicHJvcGVydHlQYXRoIiwgdmFsdWU6IHRoaXMucHJvcGVydHlQYXRoIH0s
CisgICAgICAgICAgICAgICAgeyBuYW1lOiAidmFsdWUiLCB2YWx1ZTogX2FjdGlvbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJBY3Rpb24iXS5fU2VyaWFsaXplVmFsdWVBc1N0cmluZyh0
aGlzLnZhbHVlKSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sIHBhcmVudCk7CisgICAgfTsK
KyAgICByZXR1cm4gU2V0VmFsdWVBY3Rpb247Cit9KF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siQWN0aW9uIl0pKTsKKworLyoqCisgKiBUaGlzIGRlZmluZXMgYW4gYWN0aW9u
IHJlc3BvbnNpYmxlIHRvIGluY3JlbWVudCB0aGUgdGFyZ2V0IHZhbHVlCisgKiAgdG8gYSBkZXNp
cmVkIHZhbHVlIG9uY2UgdHJpZ2dlcmVkLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucworICovCit2YXIgSW5jcmVtZW50VmFsdWVBY3Rp
b24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oSW5jcmVtZW50VmFsdWVBY3Rpb24s
IF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGUgdGhlIGFjdGlvbgorICAgICAq
IEBwYXJhbSB0cmlnZ2VyT3B0aW9ucyBkZWZpbmVzIHRoZSB0cmlnZ2VyIG9wdGlvbnMKKyAgICAg
KiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgdGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBwcm9wZXJ0
eQorICAgICAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggZGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgcHJv
cGVydHkgdG8gaW5jcmVtZW50IGluIHRoZSB0YXJnZXQKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVm
aW5lcyB0aGUgdmFsdWUgdmFsdWUgd2Ugc2hvdWxkIGluY3JlbWVudCB0aGUgcHJvcGVydHkgYnkK
KyAgICAgKiBAcGFyYW0gY29uZGl0aW9uIGRlZmluZXMgdGhlIHRyaWdnZXIgcmVsYXRlZCBjb25k
aXRpb25zCisgICAgICovCisgICAgZnVuY3Rpb24gSW5jcmVtZW50VmFsdWVBY3Rpb24odHJpZ2dl
ck9wdGlvbnMsIHRhcmdldCwgcHJvcGVydHlQYXRoLCB2YWx1ZSwgY29uZGl0aW9uKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHRyaWdnZXJPcHRpb25zLCBjb25kaXRp
b24pIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnByb3BlcnR5UGF0aCA9IHByb3BlcnR5UGF0aDsK
KyAgICAgICAgX3RoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgX3RoaXMuX3RhcmdldCA9IF90
aGlzLl9lZmZlY3RpdmVUYXJnZXQgPSB0YXJnZXQ7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAg
ICB9CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBJbmNyZW1lbnRWYWx1ZUFjdGlvbi5wcm90b3R5
cGUuX3ByZXBhcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2VmZmVjdGl2ZVRhcmdl
dCA9IHRoaXMuX2dldEVmZmVjdGl2ZVRhcmdldCh0aGlzLl9lZmZlY3RpdmVUYXJnZXQsIHRoaXMu
cHJvcGVydHlQYXRoKTsKKyAgICAgICAgdGhpcy5fcHJvcGVydHkgPSB0aGlzLl9nZXRQcm9wZXJ0
eSh0aGlzLnByb3BlcnR5UGF0aCk7CisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fZWZmZWN0aXZl
VGFyZ2V0W3RoaXMuX3Byb3BlcnR5XSAhPT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgIF9NaXNj
X2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCJXYXJu
aW5nOiBJbmNyZW1lbnRWYWx1ZUFjdGlvbiBjYW4gb25seSBiZSB1c2VkIHdpdGggbnVtYmVyIHZh
bHVlcyIpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBh
Y3Rpb24gYW5kIGluY3JlbWVudCB0aGUgdGFyZ2V0IG9mIHRoZSB2YWx1ZSBhbW91bnQuCisgICAg
ICovCisgICAgSW5jcmVtZW50VmFsdWVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRoaXMuX2VmZmVjdGl2ZVRhcmdldFt0aGlzLl9wcm9wZXJ0eV0gKz0g
dGhpcy52YWx1ZTsKKyAgICAgICAgaWYgKHRoaXMuX3RhcmdldC5tYXJrQXNEaXJ0eSkgeworICAg
ICAgICAgICAgdGhpcy5fdGFyZ2V0Lm1hcmtBc0RpcnR5KHRoaXMuX3Byb3BlcnR5KTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgYWN0aW9ucyBhbmQg
aXRzIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtIHBhcmVudCBkZWZpbmVzIHRo
ZSBvYmplY3QgdG8gc2VyaWFsaXplIGluCisgICAgICogQHJldHVybnMgdGhlIHNlcmlhbGl6ZWQg
b2JqZWN0CisgICAgICovCisgICAgSW5jcmVtZW50VmFsdWVBY3Rpb24ucHJvdG90eXBlLnNlcmlh
bGl6ZSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5
cGUuX3NlcmlhbGl6ZS5jYWxsKHRoaXMsIHsKKyAgICAgICAgICAgIG5hbWU6ICJJbmNyZW1lbnRW
YWx1ZUFjdGlvbiIsCisgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbCisgICAgICAgICAgICAgICAg
X2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJBY3Rpb24iXS5fR2V0VGFyZ2V0
UHJvcGVydHkodGhpcy5fdGFyZ2V0KSwKKyAgICAgICAgICAgICAgICB7IG5hbWU6ICJwcm9wZXJ0
eVBhdGgiLCB2YWx1ZTogdGhpcy5wcm9wZXJ0eVBhdGggfSwKKyAgICAgICAgICAgICAgICB7IG5h
bWU6ICJ2YWx1ZSIsIHZhbHVlOiBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkFjdGlvbiJdLl9TZXJpYWxpemVWYWx1ZUFzU3RyaW5nKHRoaXMudmFsdWUpIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfSwgcGFyZW50KTsKKyAgICB9OworICAgIHJldHVybiBJbmNyZW1lbnRW
YWx1ZUFjdGlvbjsKK30oX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJBY3Rp
b24iXSkpOworCisvKioKKyAqIFRoaXMgZGVmaW5lcyBhbiBhY3Rpb24gcmVzcG9uc2libGUgdG8g
c3RhcnQgYW4gYW5pbWF0aW9uIG9uY2UgdHJpZ2dlcmVkLgorICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucworICovCit2YXIgUGxheUFuaW1h
dGlvbkFjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShQbGF5QW5pbWF0aW9u
QWN0aW9uLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIHRoZSBhY3Rpb24K
KyAgICAgKiBAcGFyYW0gdHJpZ2dlck9wdGlvbnMgZGVmaW5lcyB0aGUgdHJpZ2dlciBvcHRpb25z
CisgICAgICogQHBhcmFtIHRhcmdldCBkZWZpbmVzIHRoZSB0YXJnZXQgYW5pbWF0aW9uIG9yIGFu
aW1hdGlvbiBuYW1lCisgICAgICogQHBhcmFtIGZyb20gZGVmaW5lcyBmcm9tIHdoZXJlIHRoZSBh
bmltYXRpb24gc2hvdWxkIHN0YXJ0IChhbmltYXRpb24gZnJhbWUpCisgICAgICogQHBhcmFtIGVu
ZCBkZWZpbmVzIHdoZXJlIHRoZSBhbmltYXRpb24gc2hvdWxkIHN0b3AgKGFuaW1hdGlvbiBmcmFt
ZSkKKyAgICAgKiBAcGFyYW0gbG9vcCBkZWZpbmVzIGlmIHRoZSBhbmltYXRpb24gc2hvdWxkIGxv
b3Agb3Igc3RvcCBhZnRlciB0aGUgZmlyc3QgcGxheQorICAgICAqIEBwYXJhbSBjb25kaXRpb24g
ZGVmaW5lcyB0aGUgdHJpZ2dlciByZWxhdGVkIGNvbmRpdGlvbnMKKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBQbGF5QW5pbWF0aW9uQWN0aW9uKHRyaWdnZXJPcHRpb25zLCB0YXJnZXQsIGZyb20sIHRv
LCBsb29wLCBjb25kaXRpb24pIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgdHJpZ2dlck9wdGlvbnMsIGNvbmRpdGlvbikgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuZnJv
bSA9IGZyb207CisgICAgICAgIF90aGlzLnRvID0gdG87CisgICAgICAgIF90aGlzLmxvb3AgPSBs
b29wOworICAgICAgICBfdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICByZXR1cm4gX3Ro
aXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgUGxheUFuaW1hdGlvbkFjdGlvbi5w
cm90b3R5cGUuX3ByZXBhcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBFeGVjdXRlIHRoZSBhY3Rpb24gYW5kIHBsYXkgdGhlIGFuaW1hdGlvbi4KKyAgICAgKi8KKyAg
ICBQbGF5QW5pbWF0aW9uQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9hY3Rpb25NYW5hZ2VyLmdldFNjZW5lKCk7CisgICAg
ICAgIHNjZW5lLmJlZ2luQW5pbWF0aW9uKHRoaXMuX3RhcmdldCwgdGhpcy5mcm9tLCB0aGlzLnRv
LCB0aGlzLmxvb3ApOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgYWN0
aW9ucyBhbmQgaXRzIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtIHBhcmVudCBk
ZWZpbmVzIHRoZSBvYmplY3QgdG8gc2VyaWFsaXplIGluCisgICAgICogQHJldHVybnMgdGhlIHNl
cmlhbGl6ZWQgb2JqZWN0CisgICAgICovCisgICAgUGxheUFuaW1hdGlvbkFjdGlvbi5wcm90b3R5
cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKHBhcmVudCkgeworICAgICAgICByZXR1cm4gX3N1cGVy
LnByb3RvdHlwZS5fc2VyaWFsaXplLmNhbGwodGhpcywgeworICAgICAgICAgICAgbmFtZTogIlBs
YXlBbmltYXRpb25BY3Rpb24iLAorICAgICAgICAgICAgcHJvcGVydGllczogWworICAgICAgICAg
ICAgICAgIF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0aW9uIl0uX0dl
dFRhcmdldFByb3BlcnR5KHRoaXMuX3RhcmdldCksCisgICAgICAgICAgICAgICAgeyBuYW1lOiAi
ZnJvbSIsIHZhbHVlOiBTdHJpbmcodGhpcy5mcm9tKSB9LAorICAgICAgICAgICAgICAgIHsgbmFt
ZTogInRvIiwgdmFsdWU6IFN0cmluZyh0aGlzLnRvKSB9LAorICAgICAgICAgICAgICAgIHsgbmFt
ZTogImxvb3AiLCB2YWx1ZTogX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJB
Y3Rpb24iXS5fU2VyaWFsaXplVmFsdWVBc1N0cmluZyh0aGlzLmxvb3ApIHx8IGZhbHNlIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwgcGFyZW50KTsKKyAgICB9OworICAgIHJldHVybiBQbGF5
QW5pbWF0aW9uQWN0aW9uOworfShfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkFjdGlvbiJdKSk7CisKKy8qKgorICogVGhpcyBkZWZpbmVzIGFuIGFjdGlvbiByZXNwb25zaWJs
ZSB0byBzdG9wIGFuIGFuaW1hdGlvbiBvbmNlIHRyaWdnZXJlZC4KKyAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMKKyAqLwordmFyIFN0b3BB
bmltYXRpb25BY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU3RvcEFuaW1h
dGlvbkFjdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZSB0aGUgYWN0
aW9uCisgICAgICogQHBhcmFtIHRyaWdnZXJPcHRpb25zIGRlZmluZXMgdGhlIHRyaWdnZXIgb3B0
aW9ucworICAgICAqIEBwYXJhbSB0YXJnZXQgZGVmaW5lcyB0aGUgdGFyZ2V0IGFuaW1hdGlvbiBv
ciBhbmltYXRpb24gbmFtZQorICAgICAqIEBwYXJhbSBjb25kaXRpb24gZGVmaW5lcyB0aGUgdHJp
Z2dlciByZWxhdGVkIGNvbmRpdGlvbnMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdG9wQW5pbWF0
aW9uQWN0aW9uKHRyaWdnZXJPcHRpb25zLCB0YXJnZXQsIGNvbmRpdGlvbikgeworICAgICAgICB2
YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0cmlnZ2VyT3B0aW9ucywgY29uZGl0aW9uKSB8
fCB0aGlzOworICAgICAgICBfdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICByZXR1cm4g
X3RoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgU3RvcEFuaW1hdGlvbkFjdGlv
bi5wcm90b3R5cGUuX3ByZXBhcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBFeGVjdXRlIHRoZSBhY3Rpb24gYW5kIHN0b3AgdGhlIGFuaW1hdGlvbi4KKyAgICAgKi8K
KyAgICBTdG9wQW5pbWF0aW9uQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9hY3Rpb25NYW5hZ2VyLmdldFNjZW5lKCk7Cisg
ICAgICAgIHNjZW5lLnN0b3BBbmltYXRpb24odGhpcy5fdGFyZ2V0KTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGFjdGlvbnMgYW5kIGl0cyByZWxhdGVkIGluZm9ybWF0
aW9uLgorICAgICAqIEBwYXJhbSBwYXJlbnQgZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHNlcmlhbGl6
ZSBpbgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAg
IFN0b3BBbmltYXRpb25BY3Rpb24ucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChwYXJl
bnQpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3NlcmlhbGl6ZS5jYWxsKHRo
aXMsIHsKKyAgICAgICAgICAgIG5hbWU6ICJTdG9wQW5pbWF0aW9uQWN0aW9uIiwKKyAgICAgICAg
ICAgIHByb3BlcnRpZXM6IFtfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFj
dGlvbiJdLl9HZXRUYXJnZXRQcm9wZXJ0eSh0aGlzLl90YXJnZXQpXQorICAgICAgICB9LCBwYXJl
bnQpOworICAgIH07CisgICAgcmV0dXJuIFN0b3BBbmltYXRpb25BY3Rpb247Cit9KF9hY3Rpb25f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0aW9uIl0pKTsKKworLyoqCisgKiBUaGlz
IGRlZmluZXMgYW4gYWN0aW9uIHJlc3BvbnNpYmxlIHRoYXQgZG9lcyBub3RoaW5nIG9uY2UgdHJp
Z2dlcmVkLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191
c2VfYWN0aW9ucworICovCit2YXIgRG9Ob3RoaW5nQWN0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKERvTm90aGluZ0FjdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJ
bnN0YW50aWF0ZSB0aGUgYWN0aW9uCisgICAgICogQHBhcmFtIHRyaWdnZXJPcHRpb25zIGRlZmlu
ZXMgdGhlIHRyaWdnZXIgb3B0aW9ucworICAgICAqIEBwYXJhbSBjb25kaXRpb24gZGVmaW5lcyB0
aGUgdHJpZ2dlciByZWxhdGVkIGNvbmRpdGlvbnMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBEb05v
dGhpbmdBY3Rpb24odHJpZ2dlck9wdGlvbnMsIGNvbmRpdGlvbikgeworICAgICAgICBpZiAodHJp
Z2dlck9wdGlvbnMgPT09IHZvaWQgMCkgeyB0cmlnZ2VyT3B0aW9ucyA9IF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb25zdGFudHMiXS5BQ1RJT05fTm90
aGluZ1RyaWdnZXI7IH0KKyAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIHRyaWdnZXJP
cHRpb25zLCBjb25kaXRpb24pIHx8IHRoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEV4ZWN1
dGUgdGhlIGFjdGlvbiBhbmQgZG8gbm90aGluZy4KKyAgICAgKi8KKyAgICBEb05vdGhpbmdBY3Rp
b24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXJpYWxpemVzIHRoZSBhY3Rpb25zIGFuZCBpdHMgcmVsYXRlZCBpbmZvcm1hdGlvbi4K
KyAgICAgKiBAcGFyYW0gcGFyZW50IGRlZmluZXMgdGhlIG9iamVjdCB0byBzZXJpYWxpemUgaW4K
KyAgICAgKiBAcmV0dXJucyB0aGUgc2VyaWFsaXplZCBvYmplY3QKKyAgICAgKi8KKyAgICBEb05v
dGhpbmdBY3Rpb24ucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAg
ICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3NlcmlhbGl6ZS5jYWxsKHRoaXMsIHsKKyAg
ICAgICAgICAgIG5hbWU6ICJEb05vdGhpbmdBY3Rpb24iLAorICAgICAgICAgICAgcHJvcGVydGll
czogW10KKyAgICAgICAgfSwgcGFyZW50KTsKKyAgICB9OworICAgIHJldHVybiBEb05vdGhpbmdB
Y3Rpb247Cit9KF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0aW9uIl0p
KTsKKworLyoqCisgKiBUaGlzIGRlZmluZXMgYW4gYWN0aW9uIHJlc3BvbnNpYmxlIHRvIHRyaWdn
ZXIgc2V2ZXJhbCBhY3Rpb25zIG9uY2UgdHJpZ2dlcmVkLgorICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucworICovCit2YXIgQ29tYmluZUFj
dGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShDb21iaW5lQWN0aW9uLCBfc3Vw
ZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIHRoZSBhY3Rpb24KKyAgICAgKiBAcGFy
YW0gdHJpZ2dlck9wdGlvbnMgZGVmaW5lcyB0aGUgdHJpZ2dlciBvcHRpb25zCisgICAgICogQHBh
cmFtIGNoaWxkcmVuIGRlZmluZXMgdGhlIGxpc3Qgb2YgYWdncmVnYXRlZCBhbmltYXRpb25zIHRv
IHJ1bgorICAgICAqIEBwYXJhbSBjb25kaXRpb24gZGVmaW5lcyB0aGUgdHJpZ2dlciByZWxhdGVk
IGNvbmRpdGlvbnMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDb21iaW5lQWN0aW9uKHRyaWdnZXJP
cHRpb25zLCBjaGlsZHJlbiwgY29uZGl0aW9uKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIHRyaWdnZXJPcHRpb25zLCBjb25kaXRpb24pIHx8IHRoaXM7CisgICAgICAg
IF90aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9
CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBDb21iaW5lQWN0aW9uLnByb3RvdHlwZS5fcHJlcGFy
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRo
aXMuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB0aGlzLmNoaWxkcmVu
W2luZGV4XS5fYWN0aW9uTWFuYWdlciA9IHRoaXMuX2FjdGlvbk1hbmFnZXI7CisgICAgICAgICAg
ICB0aGlzLmNoaWxkcmVuW2luZGV4XS5fcHJlcGFyZSgpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBhY3Rpb24gYW5kIGV4ZWN1dGVzIGFsbCB0aGUgYWdn
cmVnYXRlZCBhY3Rpb25zLgorICAgICAqLworICAgIENvbWJpbmVBY3Rpb24ucHJvdG90eXBlLmV4
ZWN1dGUgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdGhpcy5j
aGlsZHJlbltpbmRleF0uZXhlY3V0ZShldnQpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTZXJpYWxpemVzIHRoZSBhY3Rpb25zIGFuZCBpdHMgcmVsYXRlZCBpbmZvcm1hdGlv
bi4KKyAgICAgKiBAcGFyYW0gcGFyZW50IGRlZmluZXMgdGhlIG9iamVjdCB0byBzZXJpYWxpemUg
aW4KKyAgICAgKiBAcmV0dXJucyB0aGUgc2VyaWFsaXplZCBvYmplY3QKKyAgICAgKi8KKyAgICBD
b21iaW5lQWN0aW9uLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAocGFyZW50KSB7Cisg
ICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX3N1cGVyLnByb3RvdHlwZS5fc2VyaWFs
aXplLmNhbGwodGhpcywgeworICAgICAgICAgICAgbmFtZTogIkNvbWJpbmVBY3Rpb24iLAorICAg
ICAgICAgICAgcHJvcGVydGllczogW10sCisgICAgICAgICAgICBjb21iaW5lOiBbXQorICAgICAg
ICB9LCBwYXJlbnQpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4u
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29tYmluZS5w
dXNoKHRoaXMuY2hpbGRyZW5baV0uc2VyaWFsaXplKG51bGwpKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIHJldHVybiBDb21iaW5l
QWN0aW9uOworfShfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFjdGlvbiJd
KSk7CisKKy8qKgorICogVGhpcyBkZWZpbmVzIGFuIGFjdGlvbiByZXNwb25zaWJsZSB0byBydW4g
Y29kZSAoZXh0ZXJuYWwgZXZlbnQpIG9uY2UgdHJpZ2dlcmVkLgorICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucworICovCit2YXIgRXhlY3V0
ZUNvZGVBY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oRXhlY3V0ZUNvZGVB
Y3Rpb24sIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGUgdGhlIGFjdGlvbgor
ICAgICAqIEBwYXJhbSB0cmlnZ2VyT3B0aW9ucyBkZWZpbmVzIHRoZSB0cmlnZ2VyIG9wdGlvbnMK
KyAgICAgKiBAcGFyYW0gZnVuYyBkZWZpbmVzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBydW4K
KyAgICAgKiBAcGFyYW0gY29uZGl0aW9uIGRlZmluZXMgdGhlIHRyaWdnZXIgcmVsYXRlZCBjb25k
aXRpb25zCisgICAgICovCisgICAgZnVuY3Rpb24gRXhlY3V0ZUNvZGVBY3Rpb24odHJpZ2dlck9w
dGlvbnMsIGZ1bmMsIGNvbmRpdGlvbikgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2Fs
bCh0aGlzLCB0cmlnZ2VyT3B0aW9ucywgY29uZGl0aW9uKSB8fCB0aGlzOworICAgICAgICBfdGhp
cy5mdW5jID0gZnVuYzsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBFeGVjdXRlIHRoZSBhY3Rpb24gYW5kIHJ1biB0aGUgYXR0YWNoZWQgY29kZS4KKyAgICAg
Ki8KKyAgICBFeGVjdXRlQ29kZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChl
dnQpIHsKKyAgICAgICAgdGhpcy5mdW5jKGV2dCk7CisgICAgfTsKKyAgICByZXR1cm4gRXhlY3V0
ZUNvZGVBY3Rpb247Cit9KF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0
aW9uIl0pKTsKKworLyoqCisgKiBUaGlzIGRlZmluZXMgYW4gYWN0aW9uIHJlc3BvbnNpYmxlIHRv
IHNldCB0aGUgcGFyZW50IHByb3BlcnR5IG9mIHRoZSB0YXJnZXQgb25jZSB0cmlnZ2VyZWQuCisg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25z
CisgKi8KK3ZhciBTZXRQYXJlbnRBY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1
cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRz
Il0oU2V0UGFyZW50QWN0aW9uLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRl
IHRoZSBhY3Rpb24KKyAgICAgKiBAcGFyYW0gdHJpZ2dlck9wdGlvbnMgZGVmaW5lcyB0aGUgdHJp
Z2dlciBvcHRpb25zCisgICAgICogQHBhcmFtIHRhcmdldCBkZWZpbmVzIHRoZSB0YXJnZXQgY29u
dGFpbmluZyB0aGUgcGFyZW50IHByb3BlcnR5CisgICAgICogQHBhcmFtIHBhcmVudCBkZWZpbmVz
IGZyb20gd2hlcmUgdGhlIGFuaW1hdGlvbiBzaG91bGQgc3RhcnQgKGFuaW1hdGlvbiBmcmFtZSkK
KyAgICAgKiBAcGFyYW0gY29uZGl0aW9uIGRlZmluZXMgdGhlIHRyaWdnZXIgcmVsYXRlZCBjb25k
aXRpb25zCisgICAgICovCisgICAgZnVuY3Rpb24gU2V0UGFyZW50QWN0aW9uKHRyaWdnZXJPcHRp
b25zLCB0YXJnZXQsIHBhcmVudCwgY29uZGl0aW9uKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9z
dXBlci5jYWxsKHRoaXMsIHRyaWdnZXJPcHRpb25zLCBjb25kaXRpb24pIHx8IHRoaXM7CisgICAg
ICAgIF90aGlzLl90YXJnZXQgPSB0YXJnZXQ7CisgICAgICAgIF90aGlzLl9wYXJlbnQgPSBwYXJl
bnQ7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBTZXRQYXJlbnRBY3Rpb24ucHJvdG90eXBlLl9wcmVwYXJlID0gZnVuY3Rpb24gKCkgeworICAg
IH07CisgICAgLyoqCisgICAgICogRXhlY3V0ZSB0aGUgYWN0aW9uIGFuZCBzZXQgdGhlIHBhcmVu
dCBwcm9wZXJ0eS4KKyAgICAgKi8KKyAgICBTZXRQYXJlbnRBY3Rpb24ucHJvdG90eXBlLmV4ZWN1
dGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl90YXJnZXQucGFyZW50ID09PSB0
aGlzLl9wYXJlbnQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2
YXIgaW52ZXJ0UGFyZW50V29ybGRNYXRyaXggPSB0aGlzLl9wYXJlbnQuZ2V0V29ybGRNYXRyaXgo
KS5jbG9uZSgpOworICAgICAgICBpbnZlcnRQYXJlbnRXb3JsZE1hdHJpeC5pbnZlcnQoKTsKKyAg
ICAgICAgdGhpcy5fdGFyZ2V0LnBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlcyh0aGlz
Ll90YXJnZXQucG9zaXRpb24sIGludmVydFBhcmVudFdvcmxkTWF0cml4KTsKKyAgICAgICAgdGhp
cy5fdGFyZ2V0LnBhcmVudCA9IHRoaXMuX3BhcmVudDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFNlcmlhbGl6ZXMgdGhlIGFjdGlvbnMgYW5kIGl0cyByZWxhdGVkIGluZm9ybWF0aW9uLgorICAg
ICAqIEBwYXJhbSBwYXJlbnQgZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSBpbgorICAg
ICAqIEByZXR1cm5zIHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIFNldFBhcmVu
dEFjdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKHBhcmVudCkgeworICAgICAg
ICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fc2VyaWFsaXplLmNhbGwodGhpcywgeworICAgICAg
ICAgICAgbmFtZTogIlNldFBhcmVudEFjdGlvbiIsCisgICAgICAgICAgICBwcm9wZXJ0aWVzOiBb
CisgICAgICAgICAgICAgICAgX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJB
Y3Rpb24iXS5fR2V0VGFyZ2V0UHJvcGVydHkodGhpcy5fdGFyZ2V0KSwKKyAgICAgICAgICAgICAg
ICBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFjdGlvbiJdLl9HZXRUYXJn
ZXRQcm9wZXJ0eSh0aGlzLl9wYXJlbnQpLAorICAgICAgICAgICAgXQorICAgICAgICB9LCBwYXJl
bnQpOworICAgIH07CisgICAgcmV0dXJuIFNldFBhcmVudEFjdGlvbjsKK30oX2FjdGlvbl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJBY3Rpb24iXSkpOworCitfTWlzY190eXBlU3RvcmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBl
c1siQkFCWUxPTi5TZXRQYXJlbnRBY3Rpb24iXSA9IFNldFBhcmVudEFjdGlvbjsKK19NaXNjX3R5
cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0
ZXJlZFR5cGVzWyJCQUJZTE9OLkV4ZWN1dGVDb2RlQWN0aW9uIl0gPSBFeGVjdXRlQ29kZUFjdGlv
bjsKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJfVHlwZVN0
b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLkRvTm90aGluZ0FjdGlvbiJdID0gRG9Ob3Ro
aW5nQWN0aW9uOworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19b
Il9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uU3RvcEFuaW1hdGlvbkFjdGlv
biJdID0gU3RvcEFuaW1hdGlvbkFjdGlvbjsKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLlBs
YXlBbmltYXRpb25BY3Rpb24iXSA9IFBsYXlBbmltYXRpb25BY3Rpb247CitfTWlzY190eXBlU3Rv
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRU
eXBlc1siQkFCWUxPTi5JbmNyZW1lbnRWYWx1ZUFjdGlvbiJdID0gSW5jcmVtZW50VmFsdWVBY3Rp
b247CitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siX1R5cGVT
dG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5TZXRWYWx1ZUFjdGlvbiJdID0gU2V0VmFs
dWVBY3Rpb247CitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
X1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5TZXRTdGF0ZUFjdGlvbiJdID0g
U2V0U3RhdGVBY3Rpb247CitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5TZXRQYXJlbnRBY3Rp
b24iXSA9IFNldFBhcmVudEFjdGlvbjsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQWN0aW9u
cy9kaXJlY3RBdWRpb0FjdGlvbnMudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9BY3Rpb25zL2RpcmVjdEF1ZGlvQWN0aW9ucy50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogUGxheVNvdW5kQWN0aW9uLCBTdG9wU291bmRBY3Rpb24gKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxheVNvdW5kQWN0aW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBQbGF5U291bmRBY3Rpb247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RvcFNv
dW5kQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdG9wU291bmRBY3Rpb247IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGli
L3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9u
ICovICIuL0FjdGlvbnMvYWN0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOwor
CisKKworLyoqCisgKiBUaGlzIGRlZmluZXMgYW4gYWN0aW9uIGhlbHBmdWwgdG8gcGxheSBhIGRl
ZmluZWQgc291bmQgb24gYSB0cmlnZ2VyZWQgYWN0aW9uLgorICovCit2YXIgUGxheVNvdW5kQWN0
aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFBsYXlTb3VuZEFjdGlvbiwgX3N1
cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZSB0aGUgYWN0aW9uCisgICAgICogQHBh
cmFtIHRyaWdnZXJPcHRpb25zIGRlZmluZXMgdGhlIHRyaWdnZXIgb3B0aW9ucworICAgICAqIEBw
YXJhbSBzb3VuZCBkZWZpbmVzIHRoZSBzb3VuZCB0byBwbGF5CisgICAgICogQHBhcmFtIGNvbmRp
dGlvbiBkZWZpbmVzIHRoZSB0cmlnZ2VyIHJlbGF0ZWQgY29uZGl0aW9ucworICAgICAqLworICAg
IGZ1bmN0aW9uIFBsYXlTb3VuZEFjdGlvbih0cmlnZ2VyT3B0aW9ucywgc291bmQsIGNvbmRpdGlv
bikgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0cmlnZ2VyT3B0aW9u
cywgY29uZGl0aW9uKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fc291bmQgPSBzb3VuZDsKKyAg
ICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBsYXlT
b3VuZEFjdGlvbi5wcm90b3R5cGUuX3ByZXBhcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBhY3Rpb24gYW5kIHBsYXkgdGhlIHNvdW5kLgorICAg
ICAqLworICAgIFBsYXlTb3VuZEFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKHRoaXMuX3NvdW5kICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
IHRoaXMuX3NvdW5kLnBsYXkoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
U2VyaWFsaXplcyB0aGUgYWN0aW9ucyBhbmQgaXRzIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgICAg
ICogQHBhcmFtIHBhcmVudCBkZWZpbmVzIHRoZSBvYmplY3QgdG8gc2VyaWFsaXplIGluCisgICAg
ICogQHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgb2JqZWN0CisgICAgICovCisgICAgUGxheVNvdW5k
QWN0aW9uLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAocGFyZW50KSB7CisgICAgICAg
IHJldHVybiBfc3VwZXIucHJvdG90eXBlLl9zZXJpYWxpemUuY2FsbCh0aGlzLCB7CisgICAgICAg
ICAgICBuYW1lOiAiUGxheVNvdW5kQWN0aW9uIiwKKyAgICAgICAgICAgIHByb3BlcnRpZXM6IFt7
IG5hbWU6ICJzb3VuZCIsIHZhbHVlOiB0aGlzLl9zb3VuZC5uYW1lIH1dCisgICAgICAgIH0sIHBh
cmVudCk7CisgICAgfTsKKyAgICByZXR1cm4gUGxheVNvdW5kQWN0aW9uOworfShfYWN0aW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFjdGlvbiJdKSk7CisKKy8qKgorICogVGhpcyBk
ZWZpbmVzIGFuIGFjdGlvbiBoZWxwZnVsIHRvIHN0b3AgYSBkZWZpbmVkIHNvdW5kIG9uIGEgdHJp
Z2dlcmVkIGFjdGlvbi4KKyAqLwordmFyIFN0b3BTb3VuZEFjdGlvbiA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShTdG9wU291bmRBY3Rpb24sIF9zdXBlcik7CisgICAgLyoqCisgICAg
ICogSW5zdGFudGlhdGUgdGhlIGFjdGlvbgorICAgICAqIEBwYXJhbSB0cmlnZ2VyT3B0aW9ucyBk
ZWZpbmVzIHRoZSB0cmlnZ2VyIG9wdGlvbnMKKyAgICAgKiBAcGFyYW0gc291bmQgZGVmaW5lcyB0
aGUgc291bmQgdG8gc3RvcAorICAgICAqIEBwYXJhbSBjb25kaXRpb24gZGVmaW5lcyB0aGUgdHJp
Z2dlciByZWxhdGVkIGNvbmRpdGlvbnMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdG9wU291bmRB
Y3Rpb24odHJpZ2dlck9wdGlvbnMsIHNvdW5kLCBjb25kaXRpb24pIHsKKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHJpZ2dlck9wdGlvbnMsIGNvbmRpdGlvbikgfHwgdGhp
czsKKyAgICAgICAgX3RoaXMuX3NvdW5kID0gc291bmQ7CisgICAgICAgIHJldHVybiBfdGhpczsK
KyAgICB9CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTdG9wU291bmRBY3Rpb24ucHJvdG90eXBl
Ll9wcmVwYXJlID0gZnVuY3Rpb24gKCkgeworICAgIH07CisgICAgLyoqCisgICAgICogRXhlY3V0
ZSB0aGUgYWN0aW9uIGFuZCBzdG9wIHRoZSBzb3VuZC4KKyAgICAgKi8KKyAgICBTdG9wU291bmRB
Y3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
Ll9zb3VuZCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICB0aGlzLl9zb3VuZC5zdG9wKCk7
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGFjdGlv
bnMgYW5kIGl0cyByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbSBwYXJlbnQgZGVm
aW5lcyB0aGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSBpbgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJp
YWxpemVkIG9iamVjdAorICAgICAqLworICAgIFN0b3BTb3VuZEFjdGlvbi5wcm90b3R5cGUuc2Vy
aWFsaXplID0gZnVuY3Rpb24gKHBhcmVudCkgeworICAgICAgICByZXR1cm4gX3N1cGVyLnByb3Rv
dHlwZS5fc2VyaWFsaXplLmNhbGwodGhpcywgeworICAgICAgICAgICAgbmFtZTogIlN0b3BTb3Vu
ZEFjdGlvbiIsCisgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbeyBuYW1lOiAic291bmQiLCB2YWx1
ZTogdGhpcy5fc291bmQubmFtZSB9XQorICAgICAgICB9LCBwYXJlbnQpOworICAgIH07CisgICAg
cmV0dXJuIFN0b3BTb3VuZEFjdGlvbjsKK30oX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJBY3Rpb24iXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5QbGF5U291
bmRBY3Rpb24iXSA9IFN0b3BTb3VuZEFjdGlvbjsKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9O
LlN0b3BTb3VuZEFjdGlvbiJdID0gU3RvcFNvdW5kQWN0aW9uOworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9BY3Rpb25zL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9BY3Rpb25zL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFic3RyYWN0QWN0aW9uTWFuYWdlciwg
QWN0aW9uLCBBY3Rpb25FdmVudCwgQWN0aW9uTWFuYWdlciwgQ29uZGl0aW9uLCBWYWx1ZUNvbmRp
dGlvbiwgUHJlZGljYXRlQ29uZGl0aW9uLCBTdGF0ZUNvbmRpdGlvbiwgU3dpdGNoQm9vbGVhbkFj
dGlvbiwgU2V0U3RhdGVBY3Rpb24sIFNldFZhbHVlQWN0aW9uLCBJbmNyZW1lbnRWYWx1ZUFjdGlv
biwgUGxheUFuaW1hdGlvbkFjdGlvbiwgU3RvcEFuaW1hdGlvbkFjdGlvbiwgRG9Ob3RoaW5nQWN0
aW9uLCBDb21iaW5lQWN0aW9uLCBFeGVjdXRlQ29kZUFjdGlvbiwgU2V0UGFyZW50QWN0aW9uLCBQ
bGF5U291bmRBY3Rpb24sIFN0b3BTb3VuZEFjdGlvbiwgSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Fic3RyYWN0QWN0
aW9uTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9hYnN0cmFjdEFjdGlvbk1hbmFnZXIgKi8gIi4vQWN0aW9ucy9hYnN0cmFjdEFj
dGlvbk1hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWJzdHJhY3RBY3Rpb25NYW5hZ2Vy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWJzdHJhY3RBY3Rpb25NYW5hZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkFic3RyYWN0QWN0aW9uTWFuYWdlciJdOyB9KTsKKworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9uICovICIuL0FjdGlvbnMvYWN0aW9uLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FjdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfYWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9uRXZlbnQgKi8gIi4vQWN0aW9ucy9h
Y3Rpb25FdmVudC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBY3Rpb25FdmVudCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2FjdGlvbkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFj
dGlvbkV2ZW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbk1hbmFn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vYWN0aW9uTWFuYWdlciAqLyAiLi9BY3Rpb25zL2FjdGlvbk1hbmFnZXIudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQWN0aW9uTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FjdGlvbk1h
bmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0aW9uTWFuYWdlciJdOyB9KTsK
KworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25kaXRpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29uZGl0aW9uICovICIuL0Fj
dGlvbnMvY29uZGl0aW9uLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbmRpdGlvbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2NvbmRpdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJD
b25kaXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmFsdWVDb25kaXRpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9jb25kaXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
VmFsdWVDb25kaXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUHJlZGljYXRlQ29uZGl0
aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29uZGl0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlByZWRpY2F0ZUNvbmRpdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJT
dGF0ZUNvbmRpdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbmRpdGlvbl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJTdGF0ZUNvbmRpdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9kaXJlY3RBY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RpcmVjdEFjdGlvbnMgKi8gIi4vQWN0aW9ucy9k
aXJlY3RBY3Rpb25zLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN3aXRjaEJvb2xlYW5BY3Rpb24i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kaXJlY3RBY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlN3aXRjaEJvb2xlYW5BY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U2V0U3RhdGVBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kaXJlY3RBY3Rpb25zX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNldFN0YXRlQWN0aW9uIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlNldFZhbHVlQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGlyZWN0QWN0
aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTZXRWYWx1ZUFjdGlvbiJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJJbmNyZW1lbnRWYWx1ZUFjdGlvbiIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2RpcmVjdEFjdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW5jcmVt
ZW50VmFsdWVBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxheUFuaW1hdGlvbkFj
dGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RpcmVjdEFjdGlvbnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siUGxheUFuaW1hdGlvbkFjdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTdG9wQW5pbWF0aW9uQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGlyZWN0QWN0
aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTdG9wQW5pbWF0aW9uQWN0aW9uIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRvTm90aGluZ0FjdGlvbiIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2RpcmVjdEFjdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRG9Ob3Ro
aW5nQWN0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbWJpbmVBY3Rpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9kaXJlY3RBY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIkNvbWJpbmVBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRXhlY3V0ZUNvZGVB
Y3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kaXJlY3RBY3Rpb25zX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIkV4ZWN1dGVDb2RlQWN0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlNldFBhcmVudEFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RpcmVjdEFjdGlvbnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2V0UGFyZW50QWN0aW9uIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RpcmVjdEF1ZGlvQWN0aW9uc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kaXJlY3RBdWRpb0Fj
dGlvbnMgKi8gIi4vQWN0aW9ucy9kaXJlY3RBdWRpb0FjdGlvbnMudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiUGxheVNvdW5kQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGlyZWN0QXVkaW9B
Y3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBsYXlTb3VuZEFjdGlvbiJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTdG9wU291bmRBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9kaXJlY3RBdWRpb0FjdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siU3Rv
cFNvdW5kQWN0aW9uIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ludGVycG9s
YXRlVmFsdWVBY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vaW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiAqLyAiLi9BY3Rpb25zL2ludGVy
cG9sYXRlVmFsdWVBY3Rpb24udHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW50ZXJwb2xhdGVWYWx1
ZUFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ludGVycG9sYXRlVmFsdWVBY3Rpb25fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiJdOyB9KTsK
KworCisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQWN0aW9ucy9pbnRl
cnBvbGF0ZVZhbHVlQWN0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0FjdGlvbnMvaW50ZXJwb2xhdGVWYWx1ZUFjdGlv
bi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEludGVycG9sYXRlVmFsdWVBY3Rpb24gKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbjsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIu
ZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hY3Rpb24gKi8gIi4v
QWN0aW9ucy9hY3Rpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2Jz
ZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICov
ICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0Fu
aW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9BbmltYXRpb25zL2FuaW1hdGlvbiAqLyAiLi9BbmltYXRpb25z
L2FuaW1hdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9y
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisK
KworCisvKioKKyAqIFRoaXMgZGVmaW5lcyBhbiBhY3Rpb24gcmVzcG9uc2libGUgdG8gY2hhbmdl
IHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5CisgKiBieSBpbnRlcnBvbGF0aW5nIGJldHdlZW4gaXRz
IGN1cnJlbnQgdmFsdWUgYW5kIHRoZSBuZXdseSBzZXQgb25lIG9uY2UgdHJpZ2dlcmVkLgorICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucwor
ICovCit2YXIgSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShJbnRlcnBvbGF0ZVZhbHVlQWN0aW9uLCBfc3VwZXIpOworICAgIC8qKgorICAgICAq
IEluc3RhbnRpYXRlIHRoZSBhY3Rpb24KKyAgICAgKiBAcGFyYW0gdHJpZ2dlck9wdGlvbnMgZGVm
aW5lcyB0aGUgdHJpZ2dlciBvcHRpb25zCisgICAgICogQHBhcmFtIHRhcmdldCBkZWZpbmVzIHRo
ZSBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsdWUgdG8gaW50ZXJwb2xhdGUKKyAgICAgKiBAcGFy
YW0gcHJvcGVydHlQYXRoIGRlZmluZXMgdGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGluIHRoZSB0
YXJnZXQgb2JqZWN0CisgICAgICogQHBhcmFtIHZhbHVlIGRlZmluZXMgdGhlIHRhcmdldCB2YWx1
ZSBhdCB0aGUgZW5kIG9mIHRoZSBpbnRlcnBvbGF0aW9uCisgICAgICogQHBhcmFtIGR1cmF0aW9u
IGRlaW5lcyB0aGUgdGltZSBpdCB3aWxsIHRha2UgZm9yIHRoZSBwcm9wZXJ0eSB0byBpbnRlcnBv
bGF0ZSB0byB0aGUgdmFsdWUuCisgICAgICogQHBhcmFtIGNvbmRpdGlvbiBkZWZpbmVzIHRoZSB0
cmlnZ2VyIHJlbGF0ZWQgY29uZGl0aW9ucworICAgICAqIEBwYXJhbSBzdG9wT3RoZXJBbmltYXRp
b25zIGRlZmluZXMgaWYgdGhlIG90aGVyIHNjZW5lIGFuaW1hdGlvbnMgc2hvdWxkIGJlIHN0b3Bw
ZWQgd2hlbiB0aGUgYWN0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZAorICAgICAqIEBwYXJhbSBvbklu
dGVycG9sYXRpb25Eb25lIGRlZmluZXMgYSBjYWxsYmFjayByYWlzZWQgb25jZSB0aGUgaW50ZXJw
b2xhdGlvbiBhbmltYXRpb24gaGFzIGJlZW4gZG9uZQorICAgICAqLworICAgIGZ1bmN0aW9uIElu
dGVycG9sYXRlVmFsdWVBY3Rpb24odHJpZ2dlck9wdGlvbnMsIHRhcmdldCwgcHJvcGVydHlQYXRo
LCB2YWx1ZSwgZHVyYXRpb24sIGNvbmRpdGlvbiwgc3RvcE90aGVyQW5pbWF0aW9ucywgb25JbnRl
cnBvbGF0aW9uRG9uZSkgeworICAgICAgICBpZiAoZHVyYXRpb24gPT09IHZvaWQgMCkgeyBkdXJh
dGlvbiA9IDEwMDA7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHJp
Z2dlck9wdGlvbnMsIGNvbmRpdGlvbikgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZXMgdGhlIHRpbWUgaXQgd2lsbCB0YWtlIGZvciB0aGUgcHJvcGVydHkgdG8gaW50ZXJw
b2xhdGUgdG8gdGhlIHZhbHVlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZHVyYXRpb24g
PSAxMDAwOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSB0cmlnZ2VyZWQgb25j
ZSB0aGUgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gaGFzIGJlZW4gZG9uZS4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLm9uSW50ZXJwb2xhdGlvbkRvbmVPYnNlcnZhYmxlID0gbmV3IF9NaXNj
X29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7
CisgICAgICAgIF90aGlzLnByb3BlcnR5UGF0aCA9IHByb3BlcnR5UGF0aDsKKyAgICAgICAgX3Ro
aXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgX3RoaXMuZHVyYXRpb24gPSBkdXJhdGlvbjsKKyAg
ICAgICAgX3RoaXMuc3RvcE90aGVyQW5pbWF0aW9ucyA9IHN0b3BPdGhlckFuaW1hdGlvbnM7Cisg
ICAgICAgIF90aGlzLm9uSW50ZXJwb2xhdGlvbkRvbmUgPSBvbkludGVycG9sYXRpb25Eb25lOwor
ICAgICAgICBfdGhpcy5fdGFyZ2V0ID0gX3RoaXMuX2VmZmVjdGl2ZVRhcmdldCA9IHRhcmdldDsK
KyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIElu
dGVycG9sYXRlVmFsdWVBY3Rpb24ucHJvdG90eXBlLl9wcmVwYXJlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB0aGlzLl9lZmZlY3RpdmVUYXJnZXQgPSB0aGlzLl9nZXRFZmZlY3RpdmVUYXJnZXQo
dGhpcy5fZWZmZWN0aXZlVGFyZ2V0LCB0aGlzLnByb3BlcnR5UGF0aCk7CisgICAgICAgIHRoaXMu
X3Byb3BlcnR5ID0gdGhpcy5fZ2V0UHJvcGVydHkodGhpcy5wcm9wZXJ0eVBhdGgpOworICAgIH07
CisgICAgLyoqCisgICAgICogRXhlY3V0ZSB0aGUgYWN0aW9uIHN0YXJ0cyB0aGUgdmFsdWUgaW50
ZXJwb2xhdGlvbi4KKyAgICAgKi8KKyAgICBJbnRlcnBvbGF0ZVZhbHVlQWN0aW9uLnByb3RvdHlw
ZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICB2YXIgc2NlbmUgPSB0aGlzLl9hY3Rpb25NYW5hZ2VyLmdldFNjZW5lKCk7CisgICAgICAg
IHZhciBrZXlzID0gWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyYW1lOiAwLAor
ICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9lZmZlY3RpdmVUYXJnZXRbdGhpcy5fcHJvcGVy
dHldCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZnJhbWU6IDEwMCwKKyAgICAg
ICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZQorICAgICAgICAgICAgfQorICAgICAgICBdOwor
ICAgICAgICB2YXIgZGF0YVR5cGU7CisgICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0g
Im51bWJlciIpIHsKKyAgICAgICAgICAgIGRhdGFUeXBlID0gX0FuaW1hdGlvbnNfYW5pbWF0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVf
RkxPQVQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9m
IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yMyJd
KSB7CisgICAgICAgICAgICBkYXRhVHlwZSA9IF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05UWVBFX0NPTE9SMzsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXSkgewor
ICAgICAgICAgICAgZGF0YVR5cGUgPSBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9WRUNUT1IzOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0cml4Il0pIHsKKyAgICAg
ICAgICAgIGRhdGFUeXBlID0gX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVfTUFUUklYOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUXVhdGVybmlvbiJdKSB7CisgICAgICAg
ICAgICBkYXRhVHlwZSA9IF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05UWVBFX1FVQVRFUk5JT047CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTG9nZ2VyIl0uV2FybigiSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbjog
VW5zdXBwb3J0ZWQgdHlwZSAoIiArIHR5cGVvZiB0aGlzLnZhbHVlICsgIikiKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgYW5pbWF0aW9uID0gbmV3IF9Bbmlt
YXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJBbmltYXRpb24i
XSgiSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiIsIHRoaXMuX3Byb3BlcnR5LCAxMDAgKiAoMTAwMC4w
IC8gdGhpcy5kdXJhdGlvbiksIGRhdGFUeXBlLCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OTE9PUE1PREVfQ09O
U1RBTlQpOworICAgICAgICBhbmltYXRpb24uc2V0S2V5cyhrZXlzKTsKKyAgICAgICAgaWYgKHRo
aXMuc3RvcE90aGVyQW5pbWF0aW9ucykgeworICAgICAgICAgICAgc2NlbmUuc3RvcEFuaW1hdGlv
bih0aGlzLl9lZmZlY3RpdmVUYXJnZXQpOworICAgICAgICB9CisgICAgICAgIHZhciB3cmFwcGVy
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMub25JbnRlcnBvbGF0aW9uRG9uZU9i
c2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKF90aGlzKTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5v
bkludGVycG9sYXRpb25Eb25lKSB7CisgICAgICAgICAgICAgICAgX3RoaXMub25JbnRlcnBvbGF0
aW9uRG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBzY2VuZS5iZWdp
bkRpcmVjdEFuaW1hdGlvbih0aGlzLl9lZmZlY3RpdmVUYXJnZXQsIFthbmltYXRpb25dLCAwLCAx
MDAsIGZhbHNlLCAxLCB3cmFwcGVyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6
ZXMgdGhlIGFjdGlvbnMgYW5kIGl0cyByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJh
bSBwYXJlbnQgZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSBpbgorICAgICAqIEByZXR1
cm5zIHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIEludGVycG9sYXRlVmFsdWVB
Y3Rpb24ucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAgICAgICAg
cmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3NlcmlhbGl6ZS5jYWxsKHRoaXMsIHsKKyAgICAgICAg
ICAgIG5hbWU6ICJJbnRlcnBvbGF0ZVZhbHVlQWN0aW9uIiwKKyAgICAgICAgICAgIHByb3BlcnRp
ZXM6IFsKKyAgICAgICAgICAgICAgICBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkFjdGlvbiJdLl9HZXRUYXJnZXRQcm9wZXJ0eSh0aGlzLl90YXJnZXQpLAorICAgICAgICAg
ICAgICAgIHsgbmFtZTogInByb3BlcnR5UGF0aCIsIHZhbHVlOiB0aGlzLnByb3BlcnR5UGF0aCB9
LAorICAgICAgICAgICAgICAgIHsgbmFtZTogInZhbHVlIiwgdmFsdWU6IF9hY3Rpb25fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWN0aW9uIl0uX1NlcmlhbGl6ZVZhbHVlQXNTdHJpbmco
dGhpcy52YWx1ZSkgfSwKKyAgICAgICAgICAgICAgICB7IG5hbWU6ICJkdXJhdGlvbiIsIHZhbHVl
OiBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFjdGlvbiJdLl9TZXJpYWxp
emVWYWx1ZUFzU3RyaW5nKHRoaXMuZHVyYXRpb24pIH0sCisgICAgICAgICAgICAgICAgeyBuYW1l
OiAic3RvcE90aGVyQW5pbWF0aW9ucyIsIHZhbHVlOiBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkFjdGlvbiJdLl9TZXJpYWxpemVWYWx1ZUFzU3RyaW5nKHRoaXMuc3RvcE90
aGVyQW5pbWF0aW9ucykgfHwgZmFsc2UgfQorICAgICAgICAgICAgXQorICAgICAgICB9LCBwYXJl
bnQpOworICAgIH07CisgICAgcmV0dXJuIEludGVycG9sYXRlVmFsdWVBY3Rpb247Cit9KF9hY3Rp
b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWN0aW9uIl0pKTsKKworX01pc2NfdHlw
ZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIl9UeXBlU3RvcmUiXS5SZWdpc3Rl
cmVkVHlwZXNbIkJBQllMT04uSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiJdID0gSW50ZXJwb2xhdGVW
YWx1ZUFjdGlvbjsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRh
YmxlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL0FuaW1hdGlvbnMvYW5pbWF0YWJsZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuaW1hdGFibGUgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5pbWF0YWJsZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gQW5pbWF0YWJsZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FuaW1h
dGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9hbmltYXRpb24gKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb24udHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfcnVudGltZUFuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ydW50aW1lQW5pbWF0aW9uICovICIu
L0FuaW1hdGlvbnMvcnVudGltZUFuaW1hdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFi
bGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lICovICIuL3Nj
ZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX3ByZWNpc2lvbkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvcHJlY2lzaW9uRGF0ZSAq
LyAiLi9NaXNjL3ByZWNpc2lvbkRhdGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
Qm9uZXNfYm9uZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vQm9uZXMvYm9uZSAqLyAiLi9Cb25lcy9ib25lLnRzIik7CisKKworCisKKwor
CisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBzdG9yZSBhbiBhY3R1YWwgcnVubmluZyBhbmltYXRp
b24KKyAqLwordmFyIEFuaW1hdGFibGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBBbmltYXRhYmxlCisgICAgICogQHBhcmFtIHNj
ZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmlu
ZXMgdGhlIHRhcmdldCBvYmplY3QKKyAgICAgKiBAcGFyYW0gZnJvbUZyYW1lIGRlZmluZXMgdGhl
IHN0YXJ0aW5nIGZyYW1lIG51bWJlciAoZGVmYXVsdCBpcyAwKQorICAgICAqIEBwYXJhbSB0b0Zy
YW1lIGRlZmluZXMgdGhlIGVuZGluZyBmcmFtZSBudW1iZXIgKGRlZmF1bHQgaXMgMTAwKQorICAg
ICAqIEBwYXJhbSBsb29wQW5pbWF0aW9uIGRlZmluZXMgaWYgdGhlIGFuaW1hdGlvbiBtdXN0IGxv
b3AgKGRlZmF1bHQgaXMgZmFsc2UpCisgICAgICogQHBhcmFtIHNwZWVkUmF0aW8gZGVmaW5lcyB0
aGUgZmFjdG9yIHRvIGFwcGx5IHRvIGFuaW1hdGlvbiBzcGVlZCAoZGVmYXVsdCBpcyAxKQorICAg
ICAqIEBwYXJhbSBvbkFuaW1hdGlvbkVuZCBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVu
IGFuaW1hdGlvbiBlbmRzIGlmIGl0IGlzIG5vdCBsb29waW5nCisgICAgICogQHBhcmFtIGFuaW1h
dGlvbnMgZGVmaW5lcyBhIGdyb3VwIG9mIGFuaW1hdGlvbiB0byBhZGQgdG8gdGhlIG5ldyBBbmlt
YXRhYmxlCisgICAgICogQHBhcmFtIG9uQW5pbWF0aW9uTG9vcCBkZWZpbmVzIGEgY2FsbGJhY2sg
dG8gY2FsbCB3aGVuIGFuaW1hdGlvbiBsb29wcworICAgICAqLworICAgIGZ1bmN0aW9uIEFuaW1h
dGFibGUoc2NlbmUsIAorICAgIC8qKiBkZWZpbmVzIHRoZSB0YXJnZXQgb2JqZWN0ICovCisgICAg
dGFyZ2V0LCAKKyAgICAvKiogZGVmaW5lcyB0aGUgc3RhcnRpbmcgZnJhbWUgbnVtYmVyIChkZWZh
dWx0IGlzIDApICovCisgICAgZnJvbUZyYW1lLCAKKyAgICAvKiogZGVmaW5lcyB0aGUgZW5kaW5n
IGZyYW1lIG51bWJlciAoZGVmYXVsdCBpcyAxMDApICovCisgICAgdG9GcmFtZSwgCisgICAgLyoq
IGRlZmluZXMgaWYgdGhlIGFuaW1hdGlvbiBtdXN0IGxvb3AgKGRlZmF1bHQgaXMgZmFsc2UpICAq
LworICAgIGxvb3BBbmltYXRpb24sIHNwZWVkUmF0aW8sIAorICAgIC8qKiBkZWZpbmVzIGEgY2Fs
bGJhY2sgdG8gY2FsbCB3aGVuIGFuaW1hdGlvbiBlbmRzIGlmIGl0IGlzIG5vdCBsb29waW5nICov
CisgICAgb25BbmltYXRpb25FbmQsIGFuaW1hdGlvbnMsIAorICAgIC8qKiBkZWZpbmVzIGEgY2Fs
bGJhY2sgdG8gY2FsbCB3aGVuIGFuaW1hdGlvbiBsb29wcyAqLworICAgIG9uQW5pbWF0aW9uTG9v
cCkgeworICAgICAgICBpZiAoZnJvbUZyYW1lID09PSB2b2lkIDApIHsgZnJvbUZyYW1lID0gMDsg
fQorICAgICAgICBpZiAodG9GcmFtZSA9PT0gdm9pZCAwKSB7IHRvRnJhbWUgPSAxMDA7IH0KKyAg
ICAgICAgaWYgKGxvb3BBbmltYXRpb24gPT09IHZvaWQgMCkgeyBsb29wQW5pbWF0aW9uID0gZmFs
c2U7IH0KKyAgICAgICAgaWYgKHNwZWVkUmF0aW8gPT09IHZvaWQgMCkgeyBzcGVlZFJhdGlvID0g
MS4wOyB9CisgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICB0aGlzLmZyb21G
cmFtZSA9IGZyb21GcmFtZTsKKyAgICAgICAgdGhpcy50b0ZyYW1lID0gdG9GcmFtZTsKKyAgICAg
ICAgdGhpcy5sb29wQW5pbWF0aW9uID0gbG9vcEFuaW1hdGlvbjsKKyAgICAgICAgdGhpcy5vbkFu
aW1hdGlvbkVuZCA9IG9uQW5pbWF0aW9uRW5kOworICAgICAgICB0aGlzLm9uQW5pbWF0aW9uTG9v
cCA9IG9uQW5pbWF0aW9uTG9vcDsKKyAgICAgICAgdGhpcy5fbG9jYWxEZWxheU9mZnNldCA9IG51
bGw7CisgICAgICAgIHRoaXMuX3BhdXNlZERlbGF5ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcnVu
dGltZUFuaW1hdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFs
c2U7CisgICAgICAgIHRoaXMuX3NwZWVkUmF0aW8gPSAxOworICAgICAgICB0aGlzLl93ZWlnaHQg
PSAtMS4wOworICAgICAgICB0aGlzLl9zeW5jUm9vdCA9IG51bGw7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGFuaW1hdGFi
bGUgbXVzdCBiZSBkaXNwb3NlZCBhbmQgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoZSBhbmltYXRp
b24uCisgICAgICAgICAqIFRoaXMgd2lsbCBvbmx5IGFwcGx5IGZvciBub24gbG9vcGluZyBhbmlt
YXRpb24gKGRlZmF1bHQgaXMgdHJ1ZSkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGlzcG9z
ZU9uRW5kID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFuIGlu
ZGljYXRpbmcgaWYgdGhlIGFuaW1hdGlvbiBoYXMgc3RhcnRlZAorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5hbmltYXRpb25TdGFydGVkID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBPYnNlcnZlciByYWlzZWQgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMKKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMub25BbmltYXRpb25FbmRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFi
bGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBPYnNlcnZlciByYWlzZWQgd2hlbiB0aGUgYW5pbWF0aW9uIGxvb3Bz
CisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uQW5pbWF0aW9uTG9vcE9ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgaWYgKGFuaW1h
dGlvbnMpIHsKKyAgICAgICAgICAgIHRoaXMuYXBwZW5kQW5pbWF0aW9ucyh0YXJnZXQsIGFuaW1h
dGlvbnMpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NwZWVkUmF0aW8gPSBzcGVlZFJhdGlv
OworICAgICAgICBzY2VuZS5fYWN0aXZlQW5pbWF0YWJsZXMucHVzaCh0aGlzKTsKKyAgICB9Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGFibGUucHJvdG90eXBlLCAic3luY1Jvb3Qi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByb290IEFuaW1hdGFibGUgdXNl
ZCB0byBzeW5jaHJvbml6ZSBhbmQgbm9ybWFsaXplIGFuaW1hdGlvbnMKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N5bmNS
b290OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQW5pbWF0
YWJsZS5wcm90b3R5cGUsICJtYXN0ZXJGcmFtZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIGN1cnJlbnQgZnJhbWUgb2YgdGhlIGZpcnN0IFJ1bnRpbWVBbmltYXRpb24KKyAg
ICAgICAgICogVXNlZCB0byBzeW5jaHJvbml6ZSBBbmltYXRhYmxlcworICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fcnVudGltZUFu
aW1hdGlvbnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcnVudGltZUFuaW1hdGlvbnNbMF0u
Y3VycmVudEZyYW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQW5pbWF0YWJsZS5wcm90b3R5cGUsICJ3ZWlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIG9yIHNldHMgdGhlIGFuaW1hdGFibGUgd2VpZ2h0ICgtMS4wIGJ5IGRlZmF1bHQg
bWVhbmluZyBub3Qgd2VpZ2h0ZWQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWlnaHQ7CisgICAgICAgIH0sCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUgPT09IC0x
KSB7IC8vIC0xIGlzIG9rIGFuZCBtZWFucyBubyB3ZWlnaHQKKyAgICAgICAgICAgICAgICB0aGlz
Ll93ZWlnaHQgPSAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBFbHNlIHdlaWdodCBtdXN0IGJlIGluIFswLCAxXSByYW5nZQorICAgICAg
ICAgICAgdGhpcy5fd2VpZ2h0ID0gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIDApLCAxLjApOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQW5pbWF0YWJsZS5w
cm90b3R5cGUsICJzcGVlZFJhdGlvIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBv
ciBzZXRzIHRoZSBzcGVlZCByYXRpbyB0byBhcHBseSB0byB0aGUgYW5pbWF0YWJsZSAoMS4wIGJ5
IGRlZmF1bHQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zcGVlZFJhdGlvOworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IHRoaXMuX3J1bnRpbWVBbmltYXRpb25zLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgICAgIHZhciBhbmltYXRpb24gPSB0aGlzLl9ydW50aW1lQW5pbWF0aW9uc1tpbmRleF07Cisg
ICAgICAgICAgICAgICAgYW5pbWF0aW9uLl9wcmVwYXJlRm9yU3BlZWRSYXRpb0NoYW5nZSh2YWx1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zcGVlZFJhdGlvID0gdmFsdWU7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8vIE1ldGhvZHMKKyAgICAvKioKKyAgICAgKiBTeW5j
aHJvbml6ZSBhbmQgbm9ybWFsaXplIGN1cnJlbnQgQW5pbWF0YWJsZSB3aXRoIGEgc291cmNlIEFu
aW1hdGFibGUKKyAgICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIGFuaW1hdGlvbiB3ZWln
aHRzIGFuZCB3aGVuIGFuaW1hdGlvbnMgYXJlIG5vdCBvZiB0aGUgc2FtZSBsZW5ndGgKKyAgICAg
KiBAcGFyYW0gcm9vdCBkZWZpbmVzIHRoZSByb290IEFuaW1hdGFibGUgdG8gc3luY2hyb25pemUg
d2l0aAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IEFuaW1hdGFibGUKKyAgICAgKi8KKyAg
ICBBbmltYXRhYmxlLnByb3RvdHlwZS5zeW5jV2l0aCA9IGZ1bmN0aW9uIChyb290KSB7CisgICAg
ICAgIHRoaXMuX3N5bmNSb290ID0gcm9vdDsKKyAgICAgICAgaWYgKHJvb3QpIHsKKyAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGlzIGFuaW1hdGFibGUgd2lsbCBhbmltYXRlIGFmdGVyIHRoZSBy
b290CisgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zY2VuZS5fYWN0aXZlQW5pbWF0YWJs
ZXMuaW5kZXhPZih0aGlzKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5fc2NlbmUuX2FjdGl2ZUFuaW1hdGFibGVzLnNwbGljZShpbmRleCwgMSk7
CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuX2FjdGl2ZUFuaW1hdGFibGVzLnB1c2godGhp
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIHJ1bnRpbWUgYW5pbWF0aW9ucwor
ICAgICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIFJ1bnRpbWVBbmltYXRpb24KKyAgICAgKi8KKyAg
ICBBbmltYXRhYmxlLnByb3RvdHlwZS5nZXRBbmltYXRpb25zID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5fcnVudGltZUFuaW1hdGlvbnM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGRzIG1vcmUgYW5pbWF0aW9ucyB0byB0aGUgY3VycmVudCBhbmltYXRhYmxlCisgICAg
ICogQHBhcmFtIHRhcmdldCBkZWZpbmVzIHRoZSB0YXJnZXQgb2YgdGhlIGFuaW1hdGlvbnMKKyAg
ICAgKiBAcGFyYW0gYW5pbWF0aW9ucyBkZWZpbmVzIHRoZSBuZXcgYW5pbWF0aW9ucyB0byBhZGQK
KyAgICAgKi8KKyAgICBBbmltYXRhYmxlLnByb3RvdHlwZS5hcHBlbmRBbmltYXRpb25zID0gZnVu
Y3Rpb24gKHRhcmdldCwgYW5pbWF0aW9ucykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgYW5pbWF0aW9ucy5sZW5ndGg7IGlu
ZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSBhbmltYXRpb25zW2luZGV4XTsK
KyAgICAgICAgICAgIHZhciBuZXdSdW50aW1lQW5pbWF0aW9uID0gbmV3IF9ydW50aW1lQW5pbWF0
aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlJ1bnRpbWVBbmltYXRpb24iXSh0YXJn
ZXQsIGFuaW1hdGlvbiwgdGhpcy5fc2NlbmUsIHRoaXMpOworICAgICAgICAgICAgbmV3UnVudGlt
ZUFuaW1hdGlvbi5fb25Mb29wID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlz
Lm9uQW5pbWF0aW9uTG9vcE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKF90aGlzKTsKKyAgICAg
ICAgICAgICAgICBpZiAoX3RoaXMub25BbmltYXRpb25Mb29wKSB7CisgICAgICAgICAgICAgICAg
ICAgIF90aGlzLm9uQW5pbWF0aW9uTG9vcCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICB0aGlzLl9ydW50aW1lQW5pbWF0aW9ucy5wdXNoKG5ld1J1bnRp
bWVBbmltYXRpb24pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRo
ZSBzb3VyY2UgYW5pbWF0aW9uIGZvciBhIHNwZWNpZmljIHByb3BlcnR5CisgICAgICogQHBhcmFt
IHByb3BlcnR5IGRlZmluZXMgdGhlIHByb3BlcnR5dSB0byBsb29rIGZvcgorICAgICAqIEByZXR1
cm5zIG51bGwgb3IgdGhlIHNvdXJjZSBhbmltYXRpb24gZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eQor
ICAgICAqLworICAgIEFuaW1hdGFibGUucHJvdG90eXBlLmdldEFuaW1hdGlvbkJ5VGFyZ2V0UHJv
cGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHsKKyAgICAgICAgdmFyIHJ1bnRpbWVBbmltYXRp
b25zID0gdGhpcy5fcnVudGltZUFuaW1hdGlvbnM7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0g
MDsgaW5kZXggPCBydW50aW1lQW5pbWF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgIGlmIChydW50aW1lQW5pbWF0aW9uc1tpbmRleF0uYW5pbWF0aW9uLnRhcmdldFByb3BlcnR5
ID09PSBwcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIHJldHVybiBydW50aW1lQW5pbWF0aW9u
c1tpbmRleF0uYW5pbWF0aW9uOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgcnVudGltZSBhbmlt
YXRpb24gZm9yIGEgc3BlY2lmaWMgcHJvcGVydHkKKyAgICAgKiBAcGFyYW0gcHJvcGVydHkgZGVm
aW5lcyB0aGUgcHJvcGVydHl1IHRvIGxvb2sgZm9yCisgICAgICogQHJldHVybnMgbnVsbCBvciB0
aGUgcnVudGltZSBhbmltYXRpb24gZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eQorICAgICAqLworICAg
IEFuaW1hdGFibGUucHJvdG90eXBlLmdldFJ1bnRpbWVBbmltYXRpb25CeVRhcmdldFByb3BlcnR5
ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7CisgICAgICAgIHZhciBydW50aW1lQW5pbWF0aW9ucyA9
IHRoaXMuX3J1bnRpbWVBbmltYXRpb25zOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgcnVudGltZUFuaW1hdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBp
ZiAocnVudGltZUFuaW1hdGlvbnNbaW5kZXhdLmFuaW1hdGlvbi50YXJnZXRQcm9wZXJ0eSA9PT0g
cHJvcGVydHkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcnVudGltZUFuaW1hdGlvbnNbaW5k
ZXhdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAg
IH07CisgICAgLyoqCisgICAgICogUmVzZXRzIHRoZSBhbmltYXRhYmxlIHRvIGl0cyBvcmlnaW5h
bCBzdGF0ZQorICAgICAqLworICAgIEFuaW1hdGFibGUucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB2YXIgcnVudGltZUFuaW1hdGlvbnMgPSB0aGlzLl9ydW50aW1lQW5p
bWF0aW9uczsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHJ1bnRpbWVBbmlt
YXRpb25zLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgcnVudGltZUFuaW1hdGlvbnNb
aW5kZXhdLnJlc2V0KHRydWUpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2xvY2FsRGVsYXlP
ZmZzZXQgPSBudWxsOworICAgICAgICB0aGlzLl9wYXVzZWREZWxheSA9IG51bGw7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBbGxvd3MgdGhlIGFuaW1hdGFibGUgdG8gYmxlbmQgd2l0aCBjdXJy
ZW50IHJ1bm5pbmcgYW5pbWF0aW9ucworICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNhbmltYXRpb24tYmxlbmRpbmcKKyAgICAgKiBAcGFy
YW0gYmxlbmRpbmdTcGVlZCBkZWZpbmVzIHRoZSBibGVuZGluZyBzcGVlZCB0byB1c2UKKyAgICAg
Ki8KKyAgICBBbmltYXRhYmxlLnByb3RvdHlwZS5lbmFibGVCbGVuZGluZyA9IGZ1bmN0aW9uIChi
bGVuZGluZ1NwZWVkKSB7CisgICAgICAgIHZhciBydW50aW1lQW5pbWF0aW9ucyA9IHRoaXMuX3J1
bnRpbWVBbmltYXRpb25zOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcnVu
dGltZUFuaW1hdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBydW50aW1lQW5p
bWF0aW9uc1tpbmRleF0uYW5pbWF0aW9uLmVuYWJsZUJsZW5kaW5nID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJ1bnRpbWVBbmltYXRpb25zW2luZGV4XS5hbmltYXRpb24uYmxlbmRpbmdTcGVlZCA9IGJs
ZW5kaW5nU3BlZWQ7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc2FibGUg
YW5pbWF0aW9uIGJsZW5kaW5nCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
YmFieWxvbjEwMS9hbmltYXRpb25zI2FuaW1hdGlvbi1ibGVuZGluZworICAgICAqLworICAgIEFu
aW1hdGFibGUucHJvdG90eXBlLmRpc2FibGVCbGVuZGluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIHJ1bnRpbWVBbmltYXRpb25zID0gdGhpcy5fcnVudGltZUFuaW1hdGlvbnM7CisgICAg
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBydW50aW1lQW5pbWF0aW9ucy5sZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgIHJ1bnRpbWVBbmltYXRpb25zW2luZGV4XS5hbmltYXRp
b24uZW5hYmxlQmxlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogSnVtcCBkaXJlY3RseSB0byBhIGdpdmVuIGZyYW1lCisgICAgICogQHBhcmFtIGZyYW1l
IGRlZmluZXMgdGhlIGZyYW1lIHRvIGp1bXAgdG8KKyAgICAgKi8KKyAgICBBbmltYXRhYmxlLnBy
b3RvdHlwZS5nb1RvRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWUpIHsKKyAgICAgICAgdmFyIHJ1bnRp
bWVBbmltYXRpb25zID0gdGhpcy5fcnVudGltZUFuaW1hdGlvbnM7CisgICAgICAgIGlmIChydW50
aW1lQW5pbWF0aW9uc1swXSkgeworICAgICAgICAgICAgdmFyIGZwcyA9IHJ1bnRpbWVBbmltYXRp
b25zWzBdLmFuaW1hdGlvbi5mcmFtZVBlclNlY29uZDsKKyAgICAgICAgICAgIHZhciBjdXJyZW50
RnJhbWUgPSBydW50aW1lQW5pbWF0aW9uc1swXS5jdXJyZW50RnJhbWU7CisgICAgICAgICAgICB2
YXIgYWRqdXN0VGltZSA9IGZyYW1lIC0gY3VycmVudEZyYW1lOworICAgICAgICAgICAgdmFyIGRl
bGF5ID0gdGhpcy5zcGVlZFJhdGlvICE9PSAwID8gYWRqdXN0VGltZSAqIDEwMDAgLyAoZnBzICog
dGhpcy5zcGVlZFJhdGlvKSA6IDA7CisgICAgICAgICAgICBpZiAodGhpcy5fbG9jYWxEZWxheU9m
ZnNldCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsRGVsYXlPZmZzZXQg
PSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fbG9jYWxEZWxheU9mZnNldCAt
PSBkZWxheTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwg
cnVudGltZUFuaW1hdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBydW50aW1l
QW5pbWF0aW9uc1tpbmRleF0uZ29Ub0ZyYW1lKGZyYW1lKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogUGF1c2UgdGhlIGFuaW1hdGlvbgorICAgICAqLworICAgIEFuaW1hdGFi
bGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fcGF1
c2VkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcGF1
c2VkID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlc3RhcnQgdGhlIGFuaW1hdGlv
bgorICAgICAqLworICAgIEFuaW1hdGFibGUucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlOworICAgIH07CisgICAgQW5pbWF0YWJs
ZS5wcm90b3R5cGUuX3JhaXNlT25BbmltYXRpb25FbmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICh0aGlzLm9uQW5pbWF0aW9uRW5kKSB7CisgICAgICAgICAgICB0aGlzLm9uQW5pbWF0aW9u
RW5kKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vbkFuaW1hdGlvbkVuZE9ic2VydmFibGUu
bm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcCBhbmQg
ZGVsZXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSBhbmltYXRpb25OYW1l
IGRlZmluZXMgYSBzdHJpbmcgdXNlZCB0byBvbmx5IHN0b3Agc29tZSBvZiB0aGUgcnVudGltZSBh
bmltYXRpb25zIGluc3RlYWQgb2YgYWxsCisgICAgICogQHBhcmFtIHRhcmdldE1hc2sgLSBhIGZ1
bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBpZiB0aGUgYW5pbWF0aW9uIHNob3VsZCBiZSBzdG9wcGVk
IGJhc2VkIG9uIGl0cyB0YXJnZXQgKGFsbCBhbmltYXRpb25zIHdpbGwgYmUgc3RvcHBlZCBpZiBi
b3RoIHRoaXMgYW5kIGFuaW1hdGlvbk5hbWUgYXJlIGVtcHR5KQorICAgICAqLworICAgIEFuaW1h
dGFibGUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoYW5pbWF0aW9uTmFtZSwgdGFyZ2V0TWFz
aykgeworICAgICAgICBpZiAoYW5pbWF0aW9uTmFtZSB8fCB0YXJnZXRNYXNrKSB7CisgICAgICAg
ICAgICB2YXIgaWR4ID0gdGhpcy5fc2NlbmUuX2FjdGl2ZUFuaW1hdGFibGVzLmluZGV4T2YodGhp
cyk7CisgICAgICAgICAgICBpZiAoaWR4ID4gLTEpIHsKKyAgICAgICAgICAgICAgICB2YXIgcnVu
dGltZUFuaW1hdGlvbnMgPSB0aGlzLl9ydW50aW1lQW5pbWF0aW9uczsKKyAgICAgICAgICAgICAg
ICBmb3IgKHZhciBpbmRleCA9IHJ1bnRpbWVBbmltYXRpb25zLmxlbmd0aCAtIDE7IGluZGV4ID49
IDA7IGluZGV4LS0pIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bnRpbWVBbmltYXRpb24g
PSBydW50aW1lQW5pbWF0aW9uc1tpbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmIChhbmlt
YXRpb25OYW1lICYmIHJ1bnRpbWVBbmltYXRpb24uYW5pbWF0aW9uLm5hbWUgIT0gYW5pbWF0aW9u
TmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldE1hc2sgJiYgIXRhcmdldE1h
c2socnVudGltZUFuaW1hdGlvbi50YXJnZXQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBydW50
aW1lQW5pbWF0aW9uLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcnVudGltZUFuaW1h
dGlvbnMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHJ1bnRpbWVBbmltYXRpb25zLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3NjZW5lLl9hY3RpdmVBbmltYXRhYmxlcy5zcGxpY2UoaWR4LCAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fcmFpc2VPbkFuaW1hdGlvbkVuZCgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHZhciBpbmRleCA9IHRoaXMuX3NjZW5lLl9hY3RpdmVBbmltYXRhYmxlcy5pbmRleE9mKHRo
aXMpOworICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9zY2VuZS5fYWN0aXZlQW5pbWF0YWJsZXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAg
ICAgICB2YXIgcnVudGltZUFuaW1hdGlvbnMgPSB0aGlzLl9ydW50aW1lQW5pbWF0aW9uczsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcnVudGltZUFuaW1hdGlv
bnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVBbmltYXRp
b25zW2luZGV4XS5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHRoaXMuX3JhaXNlT25BbmltYXRpb25FbmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqCisgICAgICogV2FpdCBhc3luY2hyb25vdXNseSBmb3IgdGhlIGFuaW1h
dGlvbiB0byBlbmQKKyAgICAgKiBAcmV0dXJucyBhIHByb21pc2Ugd2hpY2ggd2lsbCBiZSBmdWxs
ZmlsbGVkIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzCisgICAgICovCisgICAgQW5pbWF0YWJsZS5w
cm90b3R5cGUud2FpdEFzeW5jID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0
aGlzOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVj
dCkgeworICAgICAgICAgICAgX3RoaXMub25BbmltYXRpb25FbmRPYnNlcnZhYmxlLmFkZChmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcmVzb2x2ZShfdGhpcyk7CisgICAgICAgICAgICB9
LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgX3RoaXMsIHRydWUpOworICAgICAgICB9KTsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQW5pbWF0YWJsZS5wcm90b3R5cGUuX2FuaW1hdGUg
PSBmdW5jdGlvbiAoZGVsYXkpIHsKKyAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkgeworICAgICAg
ICAgICAgdGhpcy5hbmltYXRpb25TdGFydGVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodGhp
cy5fcGF1c2VkRGVsYXkgPT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZWRE
ZWxheSA9IGRlbGF5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xvY2FsRGVsYXlPZmZzZXQgPT09IG51bGwpIHsK
KyAgICAgICAgICAgIHRoaXMuX2xvY2FsRGVsYXlPZmZzZXQgPSBkZWxheTsKKyAgICAgICAgICAg
IHRoaXMuX3BhdXNlZERlbGF5ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0
aGlzLl9wYXVzZWREZWxheSAhPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5fbG9jYWxEZWxh
eU9mZnNldCArPSBkZWxheSAtIHRoaXMuX3BhdXNlZERlbGF5OworICAgICAgICAgICAgdGhpcy5f
cGF1c2VkRGVsYXkgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl93ZWlnaHQg
PT09IDApIHsgLy8gV2UgY29uc2lkZXIgdGhhdCBhbiBhbmltYXRpb24gd2l0aCBhIHdlaWdodCA9
PT0gMCBpcyAiYWN0aXZlbHkiIHBhdXNlZAorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gQW5pbWF0aW5nCisgICAgICAgIHZhciBydW5uaW5nID0gZmFsc2U7
CisgICAgICAgIHZhciBydW50aW1lQW5pbWF0aW9ucyA9IHRoaXMuX3J1bnRpbWVBbmltYXRpb25z
OworICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHJ1
bnRpbWVBbmltYXRpb25zLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGFuaW1h
dGlvbiA9IHJ1bnRpbWVBbmltYXRpb25zW2luZGV4XTsKKyAgICAgICAgICAgIHZhciBpc1J1bm5p
bmcgPSBhbmltYXRpb24uYW5pbWF0ZShkZWxheSAtIHRoaXMuX2xvY2FsRGVsYXlPZmZzZXQsIHRo
aXMuZnJvbUZyYW1lLCB0aGlzLnRvRnJhbWUsIHRoaXMubG9vcEFuaW1hdGlvbiwgdGhpcy5fc3Bl
ZWRSYXRpbywgdGhpcy5fd2VpZ2h0KTsKKyAgICAgICAgICAgIHJ1bm5pbmcgPSBydW5uaW5nIHx8
IGlzUnVubmluZzsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXJ0ZWQgPSBy
dW5uaW5nOworICAgICAgICBpZiAoIXJ1bm5pbmcpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmRp
c3Bvc2VPbkVuZCkgeworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGFjdGl2ZSBhbmlt
YXRhYmxlcworICAgICAgICAgICAgICAgIGluZGV4ID0gdGhpcy5fc2NlbmUuX2FjdGl2ZUFuaW1h
dGFibGVzLmluZGV4T2YodGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuX2FjdGl2
ZUFuaW1hdGFibGVzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgICAgICAgICAgLy8gRGlzcG9z
ZSBhbGwgcnVudGltZSBhbmltYXRpb25zCisgICAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7
IGluZGV4IDwgcnVudGltZUFuaW1hdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJ1bnRpbWVBbmltYXRpb25zW2luZGV4XS5kaXNwb3NlKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fcmFpc2VPbkFuaW1hdGlv
bkVuZCgpOworICAgICAgICAgICAgaWYgKHRoaXMuZGlzcG9zZU9uRW5kKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5vbkFuaW1hdGlvbkVuZCA9IG51bGw7CisgICAgICAgICAgICAgICAgdGhpcy5v
bkFuaW1hdGlvbkxvb3AgPSBudWxsOworICAgICAgICAgICAgICAgIHRoaXMub25BbmltYXRpb25M
b29wT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICAgICAgICAgIHRoaXMub25BbmltYXRpb25F
bmRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJ1bm5pbmc7CisgICAgfTsKKyAgICByZXR1cm4gQW5pbWF0YWJsZTsKK30oKSk7CisK
K19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZSJdLnByb3RvdHlwZS5f
YW5pbWF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoIXRoaXMuYW5pbWF0aW9uc0VuYWJsZWQp
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgYW5pbWF0YWJsZXMgPSB0aGlzLl9h
Y3RpdmVBbmltYXRhYmxlczsKKyAgICBpZiAoYW5pbWF0YWJsZXMubGVuZ3RoID09PSAwKSB7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gR2V0dGluZyB0aW1lCisgICAgdmFyIG5vdyA9
IF9NaXNjX3ByZWNpc2lvbkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUHJlY2lz
aW9uRGF0ZSJdLk5vdzsKKyAgICBpZiAoIXRoaXMuX2FuaW1hdGlvblRpbWVMYXN0KSB7CisgICAg
ICAgIGlmICh0aGlzLl9wZW5kaW5nRGF0YS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYW5pbWF0aW9uVGltZUxhc3QgPSBub3c7Cisg
ICAgfQorICAgIHZhciBkZWx0YVRpbWUgPSB0aGlzLnVzZUNvbnN0YW50QW5pbWF0aW9uRGVsdGFU
aW1lID8gMTYuMCA6IChub3cgLSB0aGlzLl9hbmltYXRpb25UaW1lTGFzdCkgKiB0aGlzLmFuaW1h
dGlvblRpbWVTY2FsZTsKKyAgICB0aGlzLl9hbmltYXRpb25UaW1lICs9IGRlbHRhVGltZTsKKyAg
ICB2YXIgYW5pbWF0aW9uVGltZSA9IHRoaXMuX2FuaW1hdGlvblRpbWU7CisgICAgdGhpcy5fYW5p
bWF0aW9uVGltZUxhc3QgPSBub3c7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGFu
aW1hdGFibGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICB2YXIgYW5pbWF0YWJsZSA9IGFu
aW1hdGFibGVzW2luZGV4XTsKKyAgICAgICAgaWYgKCFhbmltYXRhYmxlLl9hbmltYXRlKGFuaW1h
dGlvblRpbWUpICYmIGFuaW1hdGFibGUuZGlzcG9zZU9uRW5kKSB7CisgICAgICAgICAgICBpbmRl
eC0tOyAvLyBBcnJheSB3YXMgdXBkYXRlZAorICAgICAgICB9CisgICAgfQorICAgIC8vIExhdGUg
YW5pbWF0aW9uIGJpbmRpbmdzCisgICAgdGhpcy5fcHJvY2Vzc0xhdGVBbmltYXRpb25CaW5kaW5n
cygpOworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZSJdLnBy
b3RvdHlwZS5iZWdpbldlaWdodGVkQW5pbWF0aW9uID0gZnVuY3Rpb24gKHRhcmdldCwgZnJvbSwg
dG8sIHdlaWdodCwgbG9vcCwgc3BlZWRSYXRpbywgb25BbmltYXRpb25FbmQsIGFuaW1hdGFibGUs
IHRhcmdldE1hc2ssIG9uQW5pbWF0aW9uTG9vcCkgeworICAgIGlmICh3ZWlnaHQgPT09IHZvaWQg
MCkgeyB3ZWlnaHQgPSAxLjA7IH0KKyAgICBpZiAoc3BlZWRSYXRpbyA9PT0gdm9pZCAwKSB7IHNw
ZWVkUmF0aW8gPSAxLjA7IH0KKyAgICB2YXIgcmV0dXJuZWRBbmltYXRhYmxlID0gdGhpcy5iZWdp
bkFuaW1hdGlvbih0YXJnZXQsIGZyb20sIHRvLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFuaW1hdGlv
bkVuZCwgYW5pbWF0YWJsZSwgZmFsc2UsIHRhcmdldE1hc2ssIG9uQW5pbWF0aW9uTG9vcCk7Cisg
ICAgcmV0dXJuZWRBbmltYXRhYmxlLndlaWdodCA9IHdlaWdodDsKKyAgICByZXR1cm4gcmV0dXJu
ZWRBbmltYXRhYmxlOworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJT
Y2VuZSJdLnByb3RvdHlwZS5iZWdpbkFuaW1hdGlvbiA9IGZ1bmN0aW9uICh0YXJnZXQsIGZyb20s
IHRvLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFuaW1hdGlvbkVuZCwgYW5pbWF0YWJsZSwgc3RvcEN1
cnJlbnQsIHRhcmdldE1hc2ssIG9uQW5pbWF0aW9uTG9vcCkgeworICAgIGlmIChzcGVlZFJhdGlv
ID09PSB2b2lkIDApIHsgc3BlZWRSYXRpbyA9IDEuMDsgfQorICAgIGlmIChzdG9wQ3VycmVudCA9
PT0gdm9pZCAwKSB7IHN0b3BDdXJyZW50ID0gdHJ1ZTsgfQorICAgIGlmIChmcm9tID4gdG8gJiYg
c3BlZWRSYXRpbyA+IDApIHsKKyAgICAgICAgc3BlZWRSYXRpbyAqPSAtMTsKKyAgICB9CisgICAg
aWYgKHN0b3BDdXJyZW50KSB7CisgICAgICAgIHRoaXMuc3RvcEFuaW1hdGlvbih0YXJnZXQsIHVu
ZGVmaW5lZCwgdGFyZ2V0TWFzayk7CisgICAgfQorICAgIGlmICghYW5pbWF0YWJsZSkgeworICAg
ICAgICBhbmltYXRhYmxlID0gbmV3IEFuaW1hdGFibGUodGhpcywgdGFyZ2V0LCBmcm9tLCB0bywg
bG9vcCwgc3BlZWRSYXRpbywgb25BbmltYXRpb25FbmQsIHVuZGVmaW5lZCwgb25BbmltYXRpb25M
b29wKTsKKyAgICB9CisgICAgdmFyIHNob3VsZFJ1blRhcmdldEFuaW1hdGlvbnMgPSB0YXJnZXRN
YXNrID8gdGFyZ2V0TWFzayh0YXJnZXQpIDogdHJ1ZTsKKyAgICAvLyBMb2NhbCBhbmltYXRpb25z
CisgICAgaWYgKHRhcmdldC5hbmltYXRpb25zICYmIHNob3VsZFJ1blRhcmdldEFuaW1hdGlvbnMp
IHsKKyAgICAgICAgYW5pbWF0YWJsZS5hcHBlbmRBbmltYXRpb25zKHRhcmdldCwgdGFyZ2V0LmFu
aW1hdGlvbnMpOworICAgIH0KKyAgICAvLyBDaGlsZHJlbiBhbmltYXRpb25zCisgICAgaWYgKHRh
cmdldC5nZXRBbmltYXRhYmxlcykgeworICAgICAgICB2YXIgYW5pbWF0YWJsZXMgPSB0YXJnZXQu
Z2V0QW5pbWF0YWJsZXMoKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGFu
aW1hdGFibGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdGhpcy5iZWdpbkFuaW1h
dGlvbihhbmltYXRhYmxlc1tpbmRleF0sIGZyb20sIHRvLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFu
aW1hdGlvbkVuZCwgYW5pbWF0YWJsZSwgc3RvcEN1cnJlbnQsIHRhcmdldE1hc2ssIG9uQW5pbWF0
aW9uTG9vcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgYW5pbWF0YWJsZS5yZXNldCgpOworICAg
IHJldHVybiBhbmltYXRhYmxlOworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJTY2VuZSJdLnByb3RvdHlwZS5iZWdpbkhpZXJhcmNoeUFuaW1hdGlvbiA9IGZ1bmN0aW9u
ICh0YXJnZXQsIGRpcmVjdERlc2NlbmRhbnRzT25seSwgZnJvbSwgdG8sIGxvb3AsIHNwZWVkUmF0
aW8sIG9uQW5pbWF0aW9uRW5kLCBhbmltYXRhYmxlLCBzdG9wQ3VycmVudCwgdGFyZ2V0TWFzaywg
b25BbmltYXRpb25Mb29wKSB7CisgICAgaWYgKHNwZWVkUmF0aW8gPT09IHZvaWQgMCkgeyBzcGVl
ZFJhdGlvID0gMS4wOyB9CisgICAgaWYgKHN0b3BDdXJyZW50ID09PSB2b2lkIDApIHsgc3RvcEN1
cnJlbnQgPSB0cnVlOyB9CisgICAgdmFyIGNoaWxkcmVuID0gdGFyZ2V0LmdldERlc2NlbmRhbnRz
KGRpcmVjdERlc2NlbmRhbnRzT25seSk7CisgICAgdmFyIHJlc3VsdCA9IFtdOworICAgIHJlc3Vs
dC5wdXNoKHRoaXMuYmVnaW5BbmltYXRpb24odGFyZ2V0LCBmcm9tLCB0bywgbG9vcCwgc3BlZWRS
YXRpbywgb25BbmltYXRpb25FbmQsIGFuaW1hdGFibGUsIHN0b3BDdXJyZW50LCB0YXJnZXRNYXNr
KSk7CisgICAgZm9yICh2YXIgX2kgPSAwLCBjaGlsZHJlbl8xID0gY2hpbGRyZW47IF9pIDwgY2hp
bGRyZW5fMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5fMVtf
aV07CisgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuYmVnaW5BbmltYXRpb24oY2hpbGQsIGZyb20s
IHRvLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFuaW1hdGlvbkVuZCwgYW5pbWF0YWJsZSwgc3RvcEN1
cnJlbnQsIHRhcmdldE1hc2spKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK307Citfc2Nl
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmUiXS5wcm90b3R5cGUuYmVnaW5E
aXJlY3RBbmltYXRpb24gPSBmdW5jdGlvbiAodGFyZ2V0LCBhbmltYXRpb25zLCBmcm9tLCB0bywg
bG9vcCwgc3BlZWRSYXRpbywgb25BbmltYXRpb25FbmQsIG9uQW5pbWF0aW9uTG9vcCkgeworICAg
IGlmIChzcGVlZFJhdGlvID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgc3BlZWRSYXRpbyA9IDEu
MDsKKyAgICB9CisgICAgdmFyIGFuaW1hdGFibGUgPSBuZXcgQW5pbWF0YWJsZSh0aGlzLCB0YXJn
ZXQsIGZyb20sIHRvLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFuaW1hdGlvbkVuZCwgYW5pbWF0aW9u
cywgb25BbmltYXRpb25Mb29wKTsKKyAgICByZXR1cm4gYW5pbWF0YWJsZTsKK307Citfc2NlbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmUiXS5wcm90b3R5cGUuYmVnaW5EaXJl
Y3RIaWVyYXJjaHlBbmltYXRpb24gPSBmdW5jdGlvbiAodGFyZ2V0LCBkaXJlY3REZXNjZW5kYW50
c09ubHksIGFuaW1hdGlvbnMsIGZyb20sIHRvLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFuaW1hdGlv
bkVuZCwgb25BbmltYXRpb25Mb29wKSB7CisgICAgdmFyIGNoaWxkcmVuID0gdGFyZ2V0LmdldERl
c2NlbmRhbnRzKGRpcmVjdERlc2NlbmRhbnRzT25seSk7CisgICAgdmFyIHJlc3VsdCA9IFtdOwor
ICAgIHJlc3VsdC5wdXNoKHRoaXMuYmVnaW5EaXJlY3RBbmltYXRpb24odGFyZ2V0LCBhbmltYXRp
b25zLCBmcm9tLCB0bywgbG9vcCwgc3BlZWRSYXRpbywgb25BbmltYXRpb25FbmQsIG9uQW5pbWF0
aW9uTG9vcCkpOworICAgIGZvciAodmFyIF9pID0gMCwgY2hpbGRyZW5fMiA9IGNoaWxkcmVuOyBf
aSA8IGNoaWxkcmVuXzIubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgIHZhciBjaGlsZCA9IGNoaWxk
cmVuXzJbX2ldOworICAgICAgICByZXN1bHQucHVzaCh0aGlzLmJlZ2luRGlyZWN0QW5pbWF0aW9u
KGNoaWxkLCBhbmltYXRpb25zLCBmcm9tLCB0bywgbG9vcCwgc3BlZWRSYXRpbywgb25BbmltYXRp
b25FbmQsIG9uQW5pbWF0aW9uTG9vcCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfTsK
K19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZSJdLnByb3RvdHlwZS5n
ZXRBbmltYXRhYmxlQnlUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7CisgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2FjdGl2ZUFuaW1hdGFibGVzLmxlbmd0aDsgaW5kZXgr
KykgeworICAgICAgICBpZiAodGhpcy5fYWN0aXZlQW5pbWF0YWJsZXNbaW5kZXhdLnRhcmdldCA9
PT0gdGFyZ2V0KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlQW5pbWF0YWJsZXNb
aW5kZXhdOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxsOworfTsKK19zY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZSJdLnByb3RvdHlwZS5nZXRBbGxBbmlt
YXRhYmxlc0J5VGFyZ2V0ID0gZnVuY3Rpb24gKHRhcmdldCkgeworICAgIHZhciByZXN1bHQgPSBb
XTsKKyAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fYWN0aXZlQW5pbWF0YWJs
ZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgIGlmICh0aGlzLl9hY3RpdmVBbmltYXRhYmxl
c1tpbmRleF0udGFyZ2V0ID09PSB0YXJnZXQpIHsKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRo
aXMuX2FjdGl2ZUFuaW1hdGFibGVzW2luZGV4XSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK307CisvKioKKyAqIFdpbGwgc3RvcCB0aGUgYW5pbWF0aW9uIG9mIHRoZSBn
aXZlbiB0YXJnZXQKKyAqIEBwYXJhbSB0YXJnZXQgLSB0aGUgdGFyZ2V0CisgKiBAcGFyYW0gYW5p
bWF0aW9uTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gc3RvcCAoYWxsIGFuaW1h
dGlvbnMgd2lsbCBiZSBzdG9wcGVkIGlmIGJvdGggdGhpcyBhbmQgdGFyZ2V0TWFzayBhcmUgZW1w
dHkpCisgKiBAcGFyYW0gdGFyZ2V0TWFzayAtIGEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGlm
IHRoZSBhbmltYXRpb24gc2hvdWxkIGJlIHN0b3BwZWQgYmFzZWQgb24gaXRzIHRhcmdldCAoYWxs
IGFuaW1hdGlvbnMgd2lsbCBiZSBzdG9wcGVkIGlmIGJvdGggdGhpcyBhbmQgYW5pbWF0aW9uTmFt
ZSBhcmUgZW1wdHkpCisgKi8KK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJT
Y2VuZSJdLnByb3RvdHlwZS5zdG9wQW5pbWF0aW9uID0gZnVuY3Rpb24gKHRhcmdldCwgYW5pbWF0
aW9uTmFtZSwgdGFyZ2V0TWFzaykgeworICAgIHZhciBhbmltYXRhYmxlcyA9IHRoaXMuZ2V0QWxs
QW5pbWF0YWJsZXNCeVRhcmdldCh0YXJnZXQpOworICAgIGZvciAodmFyIF9pID0gMCwgYW5pbWF0
YWJsZXNfMSA9IGFuaW1hdGFibGVzOyBfaSA8IGFuaW1hdGFibGVzXzEubGVuZ3RoOyBfaSsrKSB7
CisgICAgICAgIHZhciBhbmltYXRhYmxlID0gYW5pbWF0YWJsZXNfMVtfaV07CisgICAgICAgIGFu
aW1hdGFibGUuc3RvcChhbmltYXRpb25OYW1lLCB0YXJnZXRNYXNrKTsKKyAgICB9Cit9OworLyoq
CisgKiBTdG9wcyBhbmQgcmVtb3ZlcyBhbGwgYW5pbWF0aW9ucyB0aGF0IGhhdmUgYmVlbiBhcHBs
aWVkIHRvIHRoZSBzY2VuZQorICovCitfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siU2NlbmUiXS5wcm90b3R5cGUuc3RvcEFsbEFuaW1hdGlvbnMgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgaWYgKHRoaXMuX2FjdGl2ZUFuaW1hdGFibGVzKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5fYWN0aXZlQW5pbWF0YWJsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IHRoaXMuX2FjdGl2ZUFuaW1hdGFibGVzW2ldLnN0b3AoKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9hY3RpdmVBbmltYXRhYmxlcyA9IFtdOworICAgIH0KKyAgICBmb3IgKHZhciBfaSA9IDAs
IF9hID0gdGhpcy5hbmltYXRpb25Hcm91cHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAg
ICAgIHZhciBncm91cCA9IF9hW19pXTsKKyAgICAgICAgZ3JvdXAuc3RvcCgpOworICAgIH0KK307
Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmUiXS5wcm90b3R5cGUu
X3JlZ2lzdGVyVGFyZ2V0Rm9yTGF0ZUFuaW1hdGlvbkJpbmRpbmcgPSBmdW5jdGlvbiAocnVudGlt
ZUFuaW1hdGlvbiwgb3JpZ2luYWxWYWx1ZSkgeworICAgIHZhciB0YXJnZXQgPSBydW50aW1lQW5p
bWF0aW9uLnRhcmdldDsKKyAgICB0aGlzLl9yZWdpc3RlcmVkRm9yTGF0ZUFuaW1hdGlvbkJpbmRp
bmdzLnB1c2hOb0R1cGxpY2F0ZSh0YXJnZXQpOworICAgIGlmICghdGFyZ2V0Ll9sYXRlQW5pbWF0
aW9uSG9sZGVycykgeworICAgICAgICB0YXJnZXQuX2xhdGVBbmltYXRpb25Ib2xkZXJzID0ge307
CisgICAgfQorICAgIGlmICghdGFyZ2V0Ll9sYXRlQW5pbWF0aW9uSG9sZGVyc1tydW50aW1lQW5p
bWF0aW9uLnRhcmdldFBhdGhdKSB7CisgICAgICAgIHRhcmdldC5fbGF0ZUFuaW1hdGlvbkhvbGRl
cnNbcnVudGltZUFuaW1hdGlvbi50YXJnZXRQYXRoXSA9IHsKKyAgICAgICAgICAgIHRvdGFsV2Vp
Z2h0OiAwLAorICAgICAgICAgICAgYW5pbWF0aW9uczogW10sCisgICAgICAgICAgICBvcmlnaW5h
bFZhbHVlOiBvcmlnaW5hbFZhbHVlCisgICAgICAgIH07CisgICAgfQorICAgIHRhcmdldC5fbGF0
ZUFuaW1hdGlvbkhvbGRlcnNbcnVudGltZUFuaW1hdGlvbi50YXJnZXRQYXRoXS5hbmltYXRpb25z
LnB1c2gocnVudGltZUFuaW1hdGlvbik7CisgICAgdGFyZ2V0Ll9sYXRlQW5pbWF0aW9uSG9sZGVy
c1tydW50aW1lQW5pbWF0aW9uLnRhcmdldFBhdGhdLnRvdGFsV2VpZ2h0ICs9IHJ1bnRpbWVBbmlt
YXRpb24ud2VpZ2h0OworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJT
Y2VuZSJdLnByb3RvdHlwZS5fcHJvY2Vzc0xhdGVBbmltYXRpb25CaW5kaW5nc0Zvck1hdHJpY2Vz
ID0gZnVuY3Rpb24gKGhvbGRlcikgeworICAgIHZhciBub3JtYWxpemVyID0gMS4wOworICAgIHZh
ciBmaW5hbFBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdOworICAgIHZhciBmaW5hbFNjYWxpbmcg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVG1wVmVj
dG9ycyJdLlZlY3RvcjNbMV07CisgICAgdmFyIGZpbmFsUXVhdGVybmlvbiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUbXBWZWN0b3JzIl0uUXVhdGVy
bmlvblswXTsKKyAgICB2YXIgc3RhcnRJbmRleCA9IDA7CisgICAgdmFyIG9yaWdpbmFsQW5pbWF0
aW9uID0gaG9sZGVyLmFuaW1hdGlvbnNbMF07CisgICAgdmFyIG9yaWdpbmFsVmFsdWUgPSBob2xk
ZXIub3JpZ2luYWxWYWx1ZTsKKyAgICB2YXIgc2NhbGUgPSAxOworICAgIGlmIChob2xkZXIudG90
YWxXZWlnaHQgPCAxLjApIHsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBtaXggdGhlIG9yaWdpbmFs
IHZhbHVlIGluCisgICAgICAgIG9yaWdpbmFsVmFsdWUuZGVjb21wb3NlKGZpbmFsU2NhbGluZywg
ZmluYWxRdWF0ZXJuaW9uLCBmaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgc2NhbGUgPSAxLjAgLSBo
b2xkZXIudG90YWxXZWlnaHQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdGFydEluZGV4
ID0gMTsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBub3JtYWxpemUgdGhlIHdlaWdodHMKKyAgICAg
ICAgbm9ybWFsaXplciA9IGhvbGRlci50b3RhbFdlaWdodDsKKyAgICAgICAgb3JpZ2luYWxBbmlt
YXRpb24uY3VycmVudFZhbHVlLmRlY29tcG9zZShmaW5hbFNjYWxpbmcsIGZpbmFsUXVhdGVybmlv
biwgZmluYWxQb3NpdGlvbik7CisgICAgICAgIHNjYWxlID0gb3JpZ2luYWxBbmltYXRpb24ud2Vp
Z2h0IC8gbm9ybWFsaXplcjsKKyAgICAgICAgaWYgKHNjYWxlID09IDEpIHsKKyAgICAgICAgICAg
IHJldHVybiBvcmlnaW5hbEFuaW1hdGlvbi5jdXJyZW50VmFsdWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgZmluYWxTY2FsaW5nLnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgZmluYWxQb3NpdGlv
bi5zY2FsZUluUGxhY2Uoc2NhbGUpOworICAgIGZpbmFsUXVhdGVybmlvbi5zY2FsZUluUGxhY2Uo
c2NhbGUpOworICAgIGZvciAodmFyIGFuaW1JbmRleCA9IHN0YXJ0SW5kZXg7IGFuaW1JbmRleCA8
IGhvbGRlci5hbmltYXRpb25zLmxlbmd0aDsgYW5pbUluZGV4KyspIHsKKyAgICAgICAgdmFyIHJ1
bnRpbWVBbmltYXRpb24gPSBob2xkZXIuYW5pbWF0aW9uc1thbmltSW5kZXhdOworICAgICAgICB2
YXIgc2NhbGUgPSBydW50aW1lQW5pbWF0aW9uLndlaWdodCAvIG5vcm1hbGl6ZXI7CisgICAgICAg
IHZhciBjdXJyZW50UG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMl07CisgICAgICAgIHZhciBjdXJy
ZW50U2NhbGluZyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1szXTsKKyAgICAgICAgdmFyIGN1cnJlbnRRdWF0ZXJu
aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRt
cFZlY3RvcnMiXS5RdWF0ZXJuaW9uWzFdOworICAgICAgICBydW50aW1lQW5pbWF0aW9uLmN1cnJl
bnRWYWx1ZS5kZWNvbXBvc2UoY3VycmVudFNjYWxpbmcsIGN1cnJlbnRRdWF0ZXJuaW9uLCBjdXJy
ZW50UG9zaXRpb24pOworICAgICAgICBjdXJyZW50U2NhbGluZy5zY2FsZUFuZEFkZFRvUmVmKHNj
YWxlLCBmaW5hbFNjYWxpbmcpOworICAgICAgICBjdXJyZW50UXVhdGVybmlvbi5zY2FsZUFuZEFk
ZFRvUmVmKHNjYWxlLCBmaW5hbFF1YXRlcm5pb24pOworICAgICAgICBjdXJyZW50UG9zaXRpb24u
c2NhbGVBbmRBZGRUb1JlZihzY2FsZSwgZmluYWxQb3NpdGlvbik7CisgICAgfQorICAgIHZhciB3
b3JrVmFsdWUgPSBvcmlnaW5hbEFuaW1hdGlvbi5fYW5pbWF0aW9uU3RhdGUud29ya1ZhbHVlOwor
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRy
aXgiXS5Db21wb3NlVG9SZWYoZmluYWxTY2FsaW5nLCBmaW5hbFF1YXRlcm5pb24sIGZpbmFsUG9z
aXRpb24sIHdvcmtWYWx1ZSk7CisgICAgcmV0dXJuIHdvcmtWYWx1ZTsKK307Citfc2NlbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmUiXS5wcm90b3R5cGUuX3Byb2Nlc3NMYXRl
QW5pbWF0aW9uQmluZGluZ3NGb3JRdWF0ZXJuaW9ucyA9IGZ1bmN0aW9uIChob2xkZXIsIHJlZlF1
YXRlcm5pb24pIHsKKyAgICB2YXIgb3JpZ2luYWxBbmltYXRpb24gPSBob2xkZXIuYW5pbWF0aW9u
c1swXTsKKyAgICB2YXIgb3JpZ2luYWxWYWx1ZSA9IGhvbGRlci5vcmlnaW5hbFZhbHVlOworICAg
IGlmIChob2xkZXIuYW5pbWF0aW9ucy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlF1YXRlcm5pb24iXS5TbGVy
cFRvUmVmKG9yaWdpbmFsVmFsdWUsIG9yaWdpbmFsQW5pbWF0aW9uLmN1cnJlbnRWYWx1ZSwgTWF0
aC5taW4oMS4wLCBob2xkZXIudG90YWxXZWlnaHQpLCByZWZRdWF0ZXJuaW9uKTsKKyAgICAgICAg
cmV0dXJuIHJlZlF1YXRlcm5pb247CisgICAgfQorICAgIHZhciBub3JtYWxpemVyID0gMS4wOwor
ICAgIHZhciBxdWF0ZXJuaW9uczsKKyAgICB2YXIgd2VpZ2h0czsKKyAgICBpZiAoaG9sZGVyLnRv
dGFsV2VpZ2h0IDwgMS4wKSB7CisgICAgICAgIHZhciBzY2FsZSA9IDEuMCAtIGhvbGRlci50b3Rh
bFdlaWdodDsKKyAgICAgICAgcXVhdGVybmlvbnMgPSBbXTsKKyAgICAgICAgd2VpZ2h0cyA9IFtd
OworICAgICAgICBxdWF0ZXJuaW9ucy5wdXNoKG9yaWdpbmFsVmFsdWUpOworICAgICAgICB3ZWln
aHRzLnB1c2goc2NhbGUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGhvbGRlci5h
bmltYXRpb25zLmxlbmd0aCA9PT0gMikgeyAvLyBTbGVycCBhcyBzb29uIGFzIHdlIGNhbgorICAg
ICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlF1YXRlcm5pb24iXS5TbGVycFRvUmVmKGhvbGRlci5hbmltYXRpb25zWzBdLmN1cnJlbnRWYWx1
ZSwgaG9sZGVyLmFuaW1hdGlvbnNbMV0uY3VycmVudFZhbHVlLCBob2xkZXIuYW5pbWF0aW9uc1sx
XS53ZWlnaHQgLyBob2xkZXIudG90YWxXZWlnaHQsIHJlZlF1YXRlcm5pb24pOworICAgICAgICAg
ICAgcmV0dXJuIHJlZlF1YXRlcm5pb247CisgICAgICAgIH0KKyAgICAgICAgcXVhdGVybmlvbnMg
PSBbXTsKKyAgICAgICAgd2VpZ2h0cyA9IFtdOworICAgICAgICBub3JtYWxpemVyID0gaG9sZGVy
LnRvdGFsV2VpZ2h0OworICAgIH0KKyAgICBmb3IgKHZhciBhbmltSW5kZXggPSAwOyBhbmltSW5k
ZXggPCBob2xkZXIuYW5pbWF0aW9ucy5sZW5ndGg7IGFuaW1JbmRleCsrKSB7CisgICAgICAgIHZh
ciBydW50aW1lQW5pbWF0aW9uID0gaG9sZGVyLmFuaW1hdGlvbnNbYW5pbUluZGV4XTsKKyAgICAg
ICAgcXVhdGVybmlvbnMucHVzaChydW50aW1lQW5pbWF0aW9uLmN1cnJlbnRWYWx1ZSk7CisgICAg
ICAgIHdlaWdodHMucHVzaChydW50aW1lQW5pbWF0aW9uLndlaWdodCAvIG5vcm1hbGl6ZXIpOwor
ICAgIH0KKyAgICAvLyBodHRwczovL2dhbWVkZXYuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25z
LzYyMzU0L21ldGhvZC1mb3ItaW50ZXJwb2xhdGlvbi1iZXR3ZWVuLTMtcXVhdGVybmlvbnMKKyAg
ICB2YXIgY3VtdWxhdGl2ZUFtb3VudCA9IDA7CisgICAgdmFyIGN1bXVsYXRpdmVRdWF0ZXJuaW9u
ID0gbnVsbDsKKyAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcXVhdGVybmlvbnMubGVu
Z3RoOykgeworICAgICAgICBpZiAoIWN1bXVsYXRpdmVRdWF0ZXJuaW9uKSB7CisgICAgICAgICAg
ICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUXVhdGVy
bmlvbiJdLlNsZXJwVG9SZWYocXVhdGVybmlvbnNbaW5kZXhdLCBxdWF0ZXJuaW9uc1tpbmRleCAr
IDFdLCB3ZWlnaHRzW2luZGV4ICsgMV0gLyAod2VpZ2h0c1tpbmRleF0gKyB3ZWlnaHRzW2luZGV4
ICsgMV0pLCByZWZRdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgIGN1bXVsYXRpdmVRdWF0ZXJuaW9u
ID0gcmVmUXVhdGVybmlvbjsKKyAgICAgICAgICAgIGN1bXVsYXRpdmVBbW91bnQgPSB3ZWlnaHRz
W2luZGV4XSArIHdlaWdodHNbaW5kZXggKyAxXTsKKyAgICAgICAgICAgIGluZGV4ICs9IDI7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBjdW11bGF0aXZlQW1vdW50
ICs9IHdlaWdodHNbaW5kZXhdOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siUXVhdGVybmlvbiJdLlNsZXJwVG9SZWYoY3VtdWxhdGl2ZVF1
YXRlcm5pb24sIHF1YXRlcm5pb25zW2luZGV4XSwgd2VpZ2h0c1tpbmRleF0gLyBjdW11bGF0aXZl
QW1vdW50LCBjdW11bGF0aXZlUXVhdGVybmlvbik7CisgICAgICAgIGluZGV4Kys7CisgICAgfQor
ICAgIHJldHVybiBjdW11bGF0aXZlUXVhdGVybmlvbjsKK307Citfc2NlbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siU2NlbmUiXS5wcm90b3R5cGUuX3Byb2Nlc3NMYXRlQW5pbWF0aW9u
QmluZGluZ3MgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCF0aGlzLl9yZWdpc3RlcmVkRm9yTGF0
ZUFuaW1hdGlvbkJpbmRpbmdzLmxlbmd0aCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9yZWdpc3RlcmVkRm9yTGF0ZUFuaW1h
dGlvbkJpbmRpbmdzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICB2YXIgdGFyZ2V0ID0gdGhp
cy5fcmVnaXN0ZXJlZEZvckxhdGVBbmltYXRpb25CaW5kaW5ncy5kYXRhW2luZGV4XTsKKyAgICAg
ICAgZm9yICh2YXIgcGF0aCBpbiB0YXJnZXQuX2xhdGVBbmltYXRpb25Ib2xkZXJzKSB7CisgICAg
ICAgICAgICB2YXIgaG9sZGVyID0gdGFyZ2V0Ll9sYXRlQW5pbWF0aW9uSG9sZGVyc1twYXRoXTsK
KyAgICAgICAgICAgIHZhciBvcmlnaW5hbEFuaW1hdGlvbiA9IGhvbGRlci5hbmltYXRpb25zWzBd
OworICAgICAgICAgICAgdmFyIG9yaWdpbmFsVmFsdWUgPSBob2xkZXIub3JpZ2luYWxWYWx1ZTsK
KyAgICAgICAgICAgIHZhciBtYXRyaXhEZWNvbXBvc2VNb2RlID0gX2FuaW1hdGlvbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBbmltYXRpb24iXS5BbGxvd01hdHJpeERlY29tcG9zZUZv
ckludGVycG9sYXRpb24gJiYgb3JpZ2luYWxWYWx1ZS5tOyAvLyBpZS4gZGF0YSBpcyBtYXRyaXgK
KyAgICAgICAgICAgIHZhciBmaW5hbFZhbHVlID0gdGFyZ2V0W3BhdGhdOworICAgICAgICAgICAg
aWYgKG1hdHJpeERlY29tcG9zZU1vZGUpIHsKKyAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0g
dGhpcy5fcHJvY2Vzc0xhdGVBbmltYXRpb25CaW5kaW5nc0Zvck1hdHJpY2VzKGhvbGRlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgcXVh
dGVybmlvbk1vZGUgPSBvcmlnaW5hbFZhbHVlLncgIT09IHVuZGVmaW5lZDsKKyAgICAgICAgICAg
ICAgICBpZiAocXVhdGVybmlvbk1vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1
ZSA9IHRoaXMuX3Byb2Nlc3NMYXRlQW5pbWF0aW9uQmluZGluZ3NGb3JRdWF0ZXJuaW9ucyhob2xk
ZXIsIGZpbmFsVmFsdWUgfHwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlF1YXRlcm5pb24iXS5JZGVudGl0eSgpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZXIgPSAxLjA7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChob2xkZXIudG90YWxXZWlnaHQgPCAxLjApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWl4IHRoZSBvcmlnaW5hbCB2YWx1ZSBpbgorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUuc2NhbGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gb3JpZ2luYWxWYWx1ZS5zY2FsZSgxLjAg
LSBob2xkZXIudG90YWxXZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlu
YWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWUgKiAoMS4wIC0gaG9sZGVyLnRvdGFsV2VpZ2h0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g
bm9ybWFsaXplIHRoZSB3ZWlnaHRzCisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVy
ID0gaG9sZGVyLnRvdGFsV2VpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxl
XzEgPSBvcmlnaW5hbEFuaW1hdGlvbi53ZWlnaHQgLyBub3JtYWxpemVyOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNjYWxlXzEgIT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAob3JpZ2luYWxBbmltYXRpb24uY3VycmVudFZhbHVlLnNjYWxlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsdWUgPSBvcmlnaW5hbEFuaW1hdGlvbi5j
dXJyZW50VmFsdWUuc2NhbGUoc2NhbGVfMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gb3JpZ2luYWxBbmltYXRpb24uY3VycmVudFZhbHVl
ICogc2NhbGVfMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gb3JpZ2luYWxBbmltYXRpb24uY3VycmVudFZh
bHVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
c3RhcnRJbmRleCA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgYW5pbUluZGV4ID0gc3RhcnRJbmRleDsgYW5pbUluZGV4IDwgaG9sZGVyLmFu
aW1hdGlvbnMubGVuZ3RoOyBhbmltSW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHJ1bnRpbWVBbmltYXRpb24gPSBob2xkZXIuYW5pbWF0aW9uc1thbmltSW5kZXhdOworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gcnVudGltZUFuaW1hdGlvbi53ZWlnaHQg
LyBub3JtYWxpemVyOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bnRpbWVBbmltYXRp
b24uY3VycmVudFZhbHVlLnNjYWxlQW5kQWRkVG9SZWYpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBydW50aW1lQW5pbWF0aW9uLmN1cnJlbnRWYWx1ZS5zY2FsZUFuZEFkZFRvUmVmKHNj
YWxlLCBmaW5hbFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsVmFs
dWUgKz0gcnVudGltZUFuaW1hdGlvbi5jdXJyZW50VmFsdWUgKiBzY2FsZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhcmdldFtwYXRoXSA9IGZpbmFsVmFsdWU7Cisg
ICAgICAgIH0KKyAgICAgICAgdGFyZ2V0Ll9sYXRlQW5pbWF0aW9uSG9sZGVycyA9IHt9OworICAg
IH0KKyAgICB0aGlzLl9yZWdpc3RlcmVkRm9yTGF0ZUFuaW1hdGlvbkJpbmRpbmdzLnJlc2V0KCk7
Cit9OworX0JvbmVzX2JvbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQm9uZSJdLnBy
b3RvdHlwZS5jb3B5QW5pbWF0aW9uUmFuZ2UgPSBmdW5jdGlvbiAoc291cmNlLCByYW5nZU5hbWUs
IGZyYW1lT2Zmc2V0LCByZXNjYWxlQXNSZXF1aXJlZCwgc2tlbERpbWVuc2lvbnNSYXRpbykgewor
ICAgIGlmIChyZXNjYWxlQXNSZXF1aXJlZCA9PT0gdm9pZCAwKSB7IHJlc2NhbGVBc1JlcXVpcmVk
ID0gZmFsc2U7IH0KKyAgICBpZiAoc2tlbERpbWVuc2lvbnNSYXRpbyA9PT0gdm9pZCAwKSB7IHNr
ZWxEaW1lbnNpb25zUmF0aW8gPSBudWxsOyB9CisgICAgLy8gYWxsIGFuaW1hdGlvbiBtYXkgYmUg
Y29taW5nIGZyb20gYSBsaWJyYXJ5IHNrZWxldG9uLCBzbyBtYXkgbmVlZCB0byBjcmVhdGUgYW5p
bWF0aW9uCisgICAgaWYgKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGggPT09IDApIHsKKyAgICAgICAg
dGhpcy5hbmltYXRpb25zLnB1c2gobmV3IF9hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQW5pbWF0aW9uIl0odGhpcy5uYW1lLCAiX21hdHJpeCIsIHNvdXJjZS5hbmltYXRp
b25zWzBdLmZyYW1lUGVyU2Vjb25kLCBfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVfTUFUUklYLCAwKSk7CisgICAgICAgIHRo
aXMuYW5pbWF0aW9uc1swXS5zZXRLZXlzKFtdKTsKKyAgICB9CisgICAgLy8gZ2V0IGFuaW1hdGlv
biBpbmZvIC8gdmVyaWZ5IHRoZXJlIGlzIHN1Y2ggYSByYW5nZSBmcm9tIHRoZSBzb3VyY2UgYm9u
ZQorICAgIHZhciBzb3VyY2VSYW5nZSA9IHNvdXJjZS5hbmltYXRpb25zWzBdLmdldFJhbmdlKHJh
bmdlTmFtZSk7CisgICAgaWYgKCFzb3VyY2VSYW5nZSkgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHZhciBmcm9tID0gc291cmNlUmFuZ2UuZnJvbTsKKyAgICB2YXIgdG8gPSBz
b3VyY2VSYW5nZS50bzsKKyAgICB2YXIgc291cmNlS2V5cyA9IHNvdXJjZS5hbmltYXRpb25zWzBd
LmdldEtleXMoKTsKKyAgICAvLyByZXNjYWxpbmcgcHJlcAorICAgIHZhciBzb3VyY2VCb25lTGVu
Z3RoID0gc291cmNlLmxlbmd0aDsKKyAgICB2YXIgc291cmNlUGFyZW50ID0gc291cmNlLmdldFBh
cmVudCgpOworICAgIHZhciBwYXJlbnQgPSB0aGlzLmdldFBhcmVudCgpOworICAgIHZhciBwYXJl
bnRTY2FsaW5nUmVxZCA9IHJlc2NhbGVBc1JlcXVpcmVkICYmIHNvdXJjZVBhcmVudCAmJiBzb3Vy
Y2VCb25lTGVuZ3RoICYmIHRoaXMubGVuZ3RoICYmIHNvdXJjZUJvbmVMZW5ndGggIT09IHRoaXMu
bGVuZ3RoOworICAgIHZhciBwYXJlbnRSYXRpbyA9IHBhcmVudFNjYWxpbmdSZXFkICYmIHBhcmVu
dCAmJiBzb3VyY2VQYXJlbnQgPyBwYXJlbnQubGVuZ3RoIC8gc291cmNlUGFyZW50Lmxlbmd0aCA6
IDE7CisgICAgdmFyIGRpbWVuc2lvbnNTY2FsaW5nUmVxZCA9IHJlc2NhbGVBc1JlcXVpcmVkICYm
ICFwYXJlbnQgJiYgc2tlbERpbWVuc2lvbnNSYXRpbyAmJiAoc2tlbERpbWVuc2lvbnNSYXRpby54
ICE9PSAxIHx8IHNrZWxEaW1lbnNpb25zUmF0aW8ueSAhPT0gMSB8fCBza2VsRGltZW5zaW9uc1Jh
dGlvLnogIT09IDEpOworICAgIHZhciBkZXN0S2V5cyA9IHRoaXMuYW5pbWF0aW9uc1swXS5nZXRL
ZXlzKCk7CisgICAgLy8gbG9vcCB2YXJzIGRlY2xhcmF0aW9uCisgICAgdmFyIG9yaWc7CisgICAg
dmFyIG9yaWdUcmFuc2xhdGlvbjsKKyAgICB2YXIgbWF0OworICAgIGZvciAodmFyIGtleSA9IDAs
IG5LZXlzID0gc291cmNlS2V5cy5sZW5ndGg7IGtleSA8IG5LZXlzOyBrZXkrKykgeworICAgICAg
ICBvcmlnID0gc291cmNlS2V5c1trZXldOworICAgICAgICBpZiAob3JpZy5mcmFtZSA+PSBmcm9t
ICYmIG9yaWcuZnJhbWUgPD0gdG8pIHsKKyAgICAgICAgICAgIGlmIChyZXNjYWxlQXNSZXF1aXJl
ZCkgeworICAgICAgICAgICAgICAgIG1hdCA9IG9yaWcudmFsdWUuY2xvbmUoKTsKKyAgICAgICAg
ICAgICAgICAvLyBzY2FsZSBiYXNlZCBvbiBwYXJlbnQgcmF0aW8sIHdoZW4gYm9uZSBoYXMgcGFy
ZW50CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudFNjYWxpbmdSZXFkKSB7CisgICAgICAgICAg
ICAgICAgICAgIG9yaWdUcmFuc2xhdGlvbiA9IG1hdC5nZXRUcmFuc2xhdGlvbigpOworICAgICAg
ICAgICAgICAgICAgICBtYXQuc2V0VHJhbnNsYXRpb24ob3JpZ1RyYW5zbGF0aW9uLnNjYWxlSW5Q
bGFjZShwYXJlbnRSYXRpbykpOworICAgICAgICAgICAgICAgICAgICAvLyBzY2FsZSBiYXNlZCBv
biBza2VsZXRvbiBkaW1lbnNpb24gcmF0aW8gd2hlbiByb290IGJvbmUsIGFuZCB2YWx1ZSBpcyBw
YXNzZWQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGltZW5z
aW9uc1NjYWxpbmdSZXFkICYmIHNrZWxEaW1lbnNpb25zUmF0aW8pIHsKKyAgICAgICAgICAgICAg
ICAgICAgb3JpZ1RyYW5zbGF0aW9uID0gbWF0LmdldFRyYW5zbGF0aW9uKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1hdC5zZXRUcmFuc2xhdGlvbihvcmlnVHJhbnNsYXRpb24ubXVsdGlwbHlJblBs
YWNlKHNrZWxEaW1lbnNpb25zUmF0aW8pKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gdXNlIG9y
aWdpbmFsIHdoZW4gcm9vdCBib25lLCBhbmQgbm8gZGF0YSBmb3Igc2tlbERpbWVuc2lvbnNSYXRp
bworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgbWF0ID0gb3JpZy52YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXQgPSBvcmlnLnZhbHVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdEtleXMucHVzaCh7IGZyYW1lOiBvcmln
LmZyYW1lICsgZnJhbWVPZmZzZXQsIHZhbHVlOiBtYXQgfSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgdGhpcy5hbmltYXRpb25zWzBdLmNyZWF0ZVJhbmdlKHJhbmdlTmFtZSwgZnJvbSArIGZyYW1l
T2Zmc2V0LCB0byArIGZyYW1lT2Zmc2V0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK307CisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL0FuaW1hdGlvbnMvYW5pbWF0aW9uLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQW5pbWF0aW9ucy9hbmltYXRp
b24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IF9JQW5pbWF0aW9uU3RhdGUsIEFuaW1hdGlvbiAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJfSUFuaW1hdGlvblN0YXRlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfSUFuaW1hdGlvblN0YXRlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGlv
biIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQW5pbWF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhz
L21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhf
Y29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5zY2Fs
YXIgKi8gIi4vTWF0aHMvbWF0aC5zY2FsYXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0b3Jz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3R5
cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9hbmltYXRpb25LZXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vYW5pbWF0aW9uS2V5ICovICIuL0FuaW1hdGlvbnMvYW5pbWF0aW9u
S2V5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FuaW1hdGlvblJhbmdlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FuaW1h
dGlvblJhbmdlICovICIuL0FuaW1hdGlvbnMvYW5pbWF0aW9uUmFuZ2UudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2l6ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5zaXplICovICIuL01h
dGhzL21hdGguc2l6ZS50cyIpOworCisKKworCisKKworCisKKworLyoqCisgKiBAaGlkZGVuCisg
Ki8KK3ZhciBfSUFuaW1hdGlvblN0YXRlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
ICAgIGZ1bmN0aW9uIF9JQW5pbWF0aW9uU3RhdGUoKSB7CisgICAgfQorICAgIHJldHVybiBfSUFu
aW1hdGlvblN0YXRlOworfSgpKTsKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHN0b3JlIGFueSBr
aW5kIG9mIGFuaW1hdGlvbgorICovCit2YXIgQW5pbWF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBhbmltYXRpb24KKyAg
ICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gdGFy
Z2V0UHJvcGVydHkgUHJvcGVydHkgdG8gYW5pbWF0ZQorICAgICAqIEBwYXJhbSBmcmFtZVBlclNl
Y29uZCBUaGUgZnJhbWVzIHBlciBzZWNvbmQgb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEBwYXJh
bSBkYXRhVHlwZSBUaGUgZGF0YSB0eXBlIG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0g
bG9vcE1vZGUgVGhlIGxvb3AgbW9kZSBvZiB0aGUgYW5pbWF0aW9uCisgICAgICogQHBhcmFtIGVu
YWJsZUJsZW5kaW5nIFNwZWNpZmllcyBpZiBibGVuZGluZyBzaG91bGQgYmUgZW5hYmxlZAorICAg
ICAqLworICAgIGZ1bmN0aW9uIEFuaW1hdGlvbigKKyAgICAvKipOYW1lIG9mIHRoZSBhbmltYXRp
b24gKi8KKyAgICBuYW1lLCAKKyAgICAvKipQcm9wZXJ0eSB0byBhbmltYXRlICovCisgICAgdGFy
Z2V0UHJvcGVydHksIAorICAgIC8qKlRoZSBmcmFtZXMgcGVyIHNlY29uZCBvZiB0aGUgYW5pbWF0
aW9uICovCisgICAgZnJhbWVQZXJTZWNvbmQsIAorICAgIC8qKlRoZSBkYXRhIHR5cGUgb2YgdGhl
IGFuaW1hdGlvbiAqLworICAgIGRhdGFUeXBlLCAKKyAgICAvKipUaGUgbG9vcCBtb2RlIG9mIHRo
ZSBhbmltYXRpb24gKi8KKyAgICBsb29wTW9kZSwgCisgICAgLyoqU3BlY2lmaWVzIGlmIGJsZW5k
aW5nIHNob3VsZCBiZSBlbmFibGVkICovCisgICAgZW5hYmxlQmxlbmRpbmcpIHsKKyAgICAgICAg
dGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy50YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFBy
b3BlcnR5OworICAgICAgICB0aGlzLmZyYW1lUGVyU2Vjb25kID0gZnJhbWVQZXJTZWNvbmQ7Cisg
ICAgICAgIHRoaXMuZGF0YVR5cGUgPSBkYXRhVHlwZTsKKyAgICAgICAgdGhpcy5sb29wTW9kZSA9
IGxvb3BNb2RlOworICAgICAgICB0aGlzLmVuYWJsZUJsZW5kaW5nID0gZW5hYmxlQmxlbmRpbmc7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuIEludGVybmFsIHVzZSBvbmx5CisgICAg
ICAgICAqLworICAgICAgICB0aGlzLl9ydW50aW1lQW5pbWF0aW9ucyA9IG5ldyBBcnJheSgpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHNldCBvZiBldmVudCB0aGF0IHdpbGwgYmUgbGlu
a2VkIHRvIHRoaXMgYW5pbWF0aW9uCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9ldmVudHMg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgYmxlbmRp
bmcgc3BlZWQgb2YgdGhlIGFuaW1hdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5ibGVu
ZGluZ1NwZWVkID0gMC4wMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgYW5p
bWF0aW9uIHJhbmdlcyBmb3IgdGhlIGFuaW1hdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5fcmFuZ2VzID0ge307CisgICAgICAgIHRoaXMudGFyZ2V0UHJvcGVydHlQYXRoID0gdGFyZ2V0
UHJvcGVydHkuc3BsaXQoIi4iKTsKKyAgICAgICAgdGhpcy5kYXRhVHlwZSA9IGRhdGFUeXBlOwor
ICAgICAgICB0aGlzLmxvb3BNb2RlID0gbG9vcE1vZGUgPT09IHVuZGVmaW5lZCA/IEFuaW1hdGlv
bi5BTklNQVRJT05MT09QTU9ERV9DWUNMRSA6IGxvb3BNb2RlOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBAaGlkZGVuIEludGVybmFsIHVzZQorICAgICAqLworICAgIEFuaW1hdGlvbi5fUHJlcGFy
ZUFuaW1hdGlvbiA9IGZ1bmN0aW9uIChuYW1lLCB0YXJnZXRQcm9wZXJ0eSwgZnJhbWVQZXJTZWNv
bmQsIHRvdGFsRnJhbWUsIGZyb20sIHRvLCBsb29wTW9kZSwgZWFzaW5nRnVuY3Rpb24pIHsKKyAg
ICAgICAgdmFyIGRhdGFUeXBlID0gdW5kZWZpbmVkOworICAgICAgICBpZiAoIWlzTmFOKHBhcnNl
RmxvYXQoZnJvbSkpICYmIGlzRmluaXRlKGZyb20pKSB7CisgICAgICAgICAgICBkYXRhVHlwZSA9
IEFuaW1hdGlvbi5BTklNQVRJT05UWVBFX0ZMT0FUOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGZyb20gaW5zdGFuY2VvZiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siUXVhdGVybmlvbiJdKSB7CisgICAgICAgICAgICBkYXRhVHlwZSA9IEFuaW1h
dGlvbi5BTklNQVRJT05UWVBFX1FVQVRFUk5JT047CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoZnJvbSBpbnN0YW5jZW9mIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJWZWN0b3IzIl0pIHsKKyAgICAgICAgICAgIGRhdGFUeXBlID0gQW5pbWF0aW9u
LkFOSU1BVElPTlRZUEVfVkVDVE9SMzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmcm9t
IGluc3RhbmNlb2YgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlZlY3RvcjIiXSkgeworICAgICAgICAgICAgZGF0YVR5cGUgPSBBbmltYXRpb24uQU5JTUFU
SU9OVFlQRV9WRUNUT1IyOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZyb20gaW5zdGFu
Y2VvZiBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xv
cjMiXSkgeworICAgICAgICAgICAgZGF0YVR5cGUgPSBBbmltYXRpb24uQU5JTUFUSU9OVFlQRV9D
T0xPUjM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZnJvbSBpbnN0YW5jZW9mIF9NYXRo
c19tYXRoX3NpemVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2l6ZSJdKSB7CisgICAg
ICAgICAgICBkYXRhVHlwZSA9IEFuaW1hdGlvbi5BTklNQVRJT05UWVBFX1NJWkU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGRhdGFUeXBlID09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGFuaW1hdGlvbiA9IG5ldyBBbmltYXRp
b24obmFtZSwgdGFyZ2V0UHJvcGVydHksIGZyYW1lUGVyU2Vjb25kLCBkYXRhVHlwZSwgbG9vcE1v
ZGUpOworICAgICAgICB2YXIga2V5cyA9IFt7IGZyYW1lOiAwLCB2YWx1ZTogZnJvbSB9LCB7IGZy
YW1lOiB0b3RhbEZyYW1lLCB2YWx1ZTogdG8gfV07CisgICAgICAgIGFuaW1hdGlvbi5zZXRLZXlz
KGtleXMpOworICAgICAgICBpZiAoZWFzaW5nRnVuY3Rpb24gIT09IHVuZGVmaW5lZCkgeworICAg
ICAgICAgICAgYW5pbWF0aW9uLnNldEVhc2luZ0Z1bmN0aW9uKGVhc2luZ0Z1bmN0aW9uKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gYW5pbWF0aW9uOworICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0cyB1cCBhbiBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3Bl
cnR5IHRvIGFuaW1hdGUKKyAgICAgKiBAcGFyYW0gYW5pbWF0aW9uVHlwZSBUaGUgYW5pbWF0aW9u
IHR5cGUgdG8gYXBwbHkKKyAgICAgKiBAcGFyYW0gZnJhbWVQZXJTZWNvbmQgVGhlIGZyYW1lcyBw
ZXIgc2Vjb25kIG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gZWFzaW5nRnVuY3Rpb24g
VGhlIGVhc2luZyBmdW5jdGlvbiB1c2VkIGluIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcmV0dXJu
cyBUaGUgY3JlYXRlZCBhbmltYXRpb24KKyAgICAgKi8KKyAgICBBbmltYXRpb24uQ3JlYXRlQW5p
bWF0aW9uID0gZnVuY3Rpb24gKHByb3BlcnR5LCBhbmltYXRpb25UeXBlLCBmcmFtZVBlclNlY29u
ZCwgZWFzaW5nRnVuY3Rpb24pIHsKKyAgICAgICAgdmFyIGFuaW1hdGlvbiA9IG5ldyBBbmltYXRp
b24ocHJvcGVydHkgKyAiQW5pbWF0aW9uIiwgcHJvcGVydHksIGZyYW1lUGVyU2Vjb25kLCBhbmlt
YXRpb25UeXBlLCBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQpOworICAgICAg
ICBhbmltYXRpb24uc2V0RWFzaW5nRnVuY3Rpb24oZWFzaW5nRnVuY3Rpb24pOworICAgICAgICBy
ZXR1cm4gYW5pbWF0aW9uOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuZCBzdGFy
dCBhbiBhbmltYXRpb24gb24gYSBub2RlCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
bmFtZSBvZiB0aGUgZ2xvYmFsIGFuaW1hdGlvbiB0aGF0IHdpbGwgYmUgcnVuIG9uIGFsbCBub2Rl
cworICAgICAqIEBwYXJhbSBub2RlIGRlZmluZXMgdGhlIHJvb3Qgbm9kZSB3aGVyZSB0aGUgYW5p
bWF0aW9uIHdpbGwgdGFrZSBwbGFjZQorICAgICAqIEBwYXJhbSB0YXJnZXRQcm9wZXJ0eSBkZWZp
bmVzIHByb3BlcnR5IHRvIGFuaW1hdGUKKyAgICAgKiBAcGFyYW0gZnJhbWVQZXJTZWNvbmQgZGVm
aW5lcyB0aGUgbnVtYmVyIG9mIGZyYW1lIHBlciBzZWNvbmQgeW8gdXNlCisgICAgICogQHBhcmFt
IHRvdGFsRnJhbWUgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGZyYW1lcyBpbiB0b3RhbAorICAgICAq
IEBwYXJhbSBmcm9tIGRlZmluZXMgdGhlIGluaXRpYWwgdmFsdWUKKyAgICAgKiBAcGFyYW0gdG8g
ZGVmaW5lcyB0aGUgZmluYWwgdmFsdWUKKyAgICAgKiBAcGFyYW0gbG9vcE1vZGUgZGVmaW5lcyB3
aGljaCBsb29wIG1vZGUgeW91IHdhbnQgdG8gdXNlIChvZmYgYnkgZGVmYXVsdCkKKyAgICAgKiBA
cGFyYW0gZWFzaW5nRnVuY3Rpb24gZGVmaW5lcyB0aGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSAo
bGluZWFyIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIG9uQW5pbWF0aW9uRW5kIGRlZmluZXMg
dGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiBhbmltYXRpb24gZW5kCisgICAgICogQHJldHVybnMg
dGhlIGFuaW1hdGFibGUgY3JlYXRlZCBmb3IgdGhpcyBhbmltYXRpb24KKyAgICAgKi8KKyAgICBB
bmltYXRpb24uQ3JlYXRlQW5kU3RhcnRBbmltYXRpb24gPSBmdW5jdGlvbiAobmFtZSwgbm9kZSwg
dGFyZ2V0UHJvcGVydHksIGZyYW1lUGVyU2Vjb25kLCB0b3RhbEZyYW1lLCBmcm9tLCB0bywgbG9v
cE1vZGUsIGVhc2luZ0Z1bmN0aW9uLCBvbkFuaW1hdGlvbkVuZCkgeworICAgICAgICB2YXIgYW5p
bWF0aW9uID0gQW5pbWF0aW9uLl9QcmVwYXJlQW5pbWF0aW9uKG5hbWUsIHRhcmdldFByb3BlcnR5
LCBmcmFtZVBlclNlY29uZCwgdG90YWxGcmFtZSwgZnJvbSwgdG8sIGxvb3BNb2RlLCBlYXNpbmdG
dW5jdGlvbik7CisgICAgICAgIGlmICghYW5pbWF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZS5nZXRTY2VuZSgpLmJlZ2luRGly
ZWN0QW5pbWF0aW9uKG5vZGUsIFthbmltYXRpb25dLCAwLCB0b3RhbEZyYW1lLCAoYW5pbWF0aW9u
Lmxvb3BNb2RlID09PSAxKSwgMS4wLCBvbkFuaW1hdGlvbkVuZCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGUgYW5kIHN0YXJ0IGFuIGFuaW1hdGlvbiBvbiBhIG5vZGUgYW5kIGl0cyBk
ZXNjZW5kYW50cworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGds
b2JhbCBhbmltYXRpb24gdGhhdCB3aWxsIGJlIHJ1biBvbiBhbGwgbm9kZXMKKyAgICAgKiBAcGFy
YW0gbm9kZSBkZWZpbmVzIHRoZSByb290IG5vZGUgd2hlcmUgdGhlIGFuaW1hdGlvbiB3aWxsIHRh
a2UgcGxhY2UKKyAgICAgKiBAcGFyYW0gZGlyZWN0RGVzY2VuZGFudHNPbmx5IGlmIHRydWUgb25s
eSBkaXJlY3QgZGVzY2VuZGFudHMgd2lsbCBiZSB1c2VkLCBpZiBmYWxzZSBkaXJlY3QgYW5kIGFs
c28gaW5kaXJlY3QgKGNoaWxkcmVuIG9mIGNoaWxkcmVuLCBhbiBzbyBvbiBpbiBhIHJlY3Vyc2l2
ZSBtYW5uZXIpIGRlc2NlbmRhbnRzIHdpbGwgYmUgdXNlZAorICAgICAqIEBwYXJhbSB0YXJnZXRQ
cm9wZXJ0eSBkZWZpbmVzIHByb3BlcnR5IHRvIGFuaW1hdGUKKyAgICAgKiBAcGFyYW0gZnJhbWVQ
ZXJTZWNvbmQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGZyYW1lIHBlciBzZWNvbmQgdG8gdXNlCisg
ICAgICogQHBhcmFtIHRvdGFsRnJhbWUgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGZyYW1lcyBpbiB0
b3RhbAorICAgICAqIEBwYXJhbSBmcm9tIGRlZmluZXMgdGhlIGluaXRpYWwgdmFsdWUKKyAgICAg
KiBAcGFyYW0gdG8gZGVmaW5lcyB0aGUgZmluYWwgdmFsdWUKKyAgICAgKiBAcGFyYW0gbG9vcE1v
ZGUgZGVmaW5lcyB3aGljaCBsb29wIG1vZGUgeW91IHdhbnQgdG8gdXNlIChvZmYgYnkgZGVmYXVs
dCkKKyAgICAgKiBAcGFyYW0gZWFzaW5nRnVuY3Rpb24gZGVmaW5lcyB0aGUgZWFzaW5nIGZ1bmN0
aW9uIHRvIHVzZSAobGluZWFyIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIG9uQW5pbWF0aW9u
RW5kIGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiBhbiBhbmltYXRpb24gZW5kcyAo
d2lsbCBiZSBjYWxsZWQgb25jZSBwZXIgbm9kZSkKKyAgICAgKiBAcmV0dXJucyB0aGUgbGlzdCBv
ZiBhbmltYXRhYmxlcyBjcmVhdGVkIGZvciBhbGwgbm9kZXMKKyAgICAgKiBAZXhhbXBsZSBodHRw
czovL3d3dy5iYWJ5bG9uanMtcGxheWdyb3VuZC5jb20vI01IMFZMSQorICAgICAqLworICAgIEFu
aW1hdGlvbi5DcmVhdGVBbmRTdGFydEhpZXJhcmNoeUFuaW1hdGlvbiA9IGZ1bmN0aW9uIChuYW1l
LCBub2RlLCBkaXJlY3REZXNjZW5kYW50c09ubHksIHRhcmdldFByb3BlcnR5LCBmcmFtZVBlclNl
Y29uZCwgdG90YWxGcmFtZSwgZnJvbSwgdG8sIGxvb3BNb2RlLCBlYXNpbmdGdW5jdGlvbiwgb25B
bmltYXRpb25FbmQpIHsKKyAgICAgICAgdmFyIGFuaW1hdGlvbiA9IEFuaW1hdGlvbi5fUHJlcGFy
ZUFuaW1hdGlvbihuYW1lLCB0YXJnZXRQcm9wZXJ0eSwgZnJhbWVQZXJTZWNvbmQsIHRvdGFsRnJh
bWUsIGZyb20sIHRvLCBsb29wTW9kZSwgZWFzaW5nRnVuY3Rpb24pOworICAgICAgICBpZiAoIWFu
aW1hdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIHNjZW5lID0gbm9kZS5nZXRTY2VuZSgpOworICAgICAgICByZXR1cm4gc2NlbmUuYmVnaW5E
aXJlY3RIaWVyYXJjaHlBbmltYXRpb24obm9kZSwgZGlyZWN0RGVzY2VuZGFudHNPbmx5LCBbYW5p
bWF0aW9uXSwgMCwgdG90YWxGcmFtZSwgKGFuaW1hdGlvbi5sb29wTW9kZSA9PT0gMSksIDEuMCwg
b25BbmltYXRpb25FbmQpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBh
bmltYXRpb24sIG1lcmdlcyBpdCB3aXRoIHRoZSBleGlzdGluZyBhbmltYXRpb25zIGFuZCBzdGFy
dHMgaXQKKyAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBA
cGFyYW0gbm9kZSBOb2RlIHdoaWNoIGNvbnRhaW5zIHRoZSBzY2VuZSB0aGF0IGJlZ2lucyB0aGUg
YW5pbWF0aW9ucworICAgICAqIEBwYXJhbSB0YXJnZXRQcm9wZXJ0eSBTcGVjaWZpZXMgd2hpY2gg
cHJvcGVydHkgdG8gYW5pbWF0ZQorICAgICAqIEBwYXJhbSBmcmFtZVBlclNlY29uZCBUaGUgZnJh
bWVzIHBlciBzZWNvbmQgb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSB0b3RhbEZyYW1l
IFRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzCisgICAgICogQHBhcmFtIGZyb20gVGhlIGZyYW1l
IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSB0byBUaGUg
ZnJhbWUgYXQgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uCisgICAgICogQHBhcmFtIGxvb3BNb2Rl
IFNwZWNpZmllcyB0aGUgbG9vcCBtb2RlIG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0g
ZWFzaW5nRnVuY3Rpb24gKE9wdGlvbmFsKSBUaGUgZWFzaW5nIGZ1bmN0aW9uIG9mIHRoZSBhbmlt
YXRpb24sIHdoaWNoIGFsbG93IGN1c3RvbSBtYXRoZW1hdGljYWwgZm9ybXVsYXMgZm9yIGFuaW1h
dGlvbnMKKyAgICAgKiBAcGFyYW0gb25BbmltYXRpb25FbmQgQ2FsbGJhY2sgdG8gcnVuIG9uY2Ug
dGhlIGFuaW1hdGlvbiBpcyBjb21wbGV0ZQorICAgICAqIEByZXR1cm5zIE51bGxhYmxlIGFuaW1h
dGlvbgorICAgICAqLworICAgIEFuaW1hdGlvbi5DcmVhdGVNZXJnZUFuZFN0YXJ0QW5pbWF0aW9u
ID0gZnVuY3Rpb24gKG5hbWUsIG5vZGUsIHRhcmdldFByb3BlcnR5LCBmcmFtZVBlclNlY29uZCwg
dG90YWxGcmFtZSwgZnJvbSwgdG8sIGxvb3BNb2RlLCBlYXNpbmdGdW5jdGlvbiwgb25BbmltYXRp
b25FbmQpIHsKKyAgICAgICAgdmFyIGFuaW1hdGlvbiA9IEFuaW1hdGlvbi5fUHJlcGFyZUFuaW1h
dGlvbihuYW1lLCB0YXJnZXRQcm9wZXJ0eSwgZnJhbWVQZXJTZWNvbmQsIHRvdGFsRnJhbWUsIGZy
b20sIHRvLCBsb29wTW9kZSwgZWFzaW5nRnVuY3Rpb24pOworICAgICAgICBpZiAoIWFuaW1hdGlv
bikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgbm9kZS5h
bmltYXRpb25zLnB1c2goYW5pbWF0aW9uKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZ2V0U2NlbmUo
KS5iZWdpbkFuaW1hdGlvbihub2RlLCAwLCB0b3RhbEZyYW1lLCAoYW5pbWF0aW9uLmxvb3BNb2Rl
ID09PSAxKSwgMS4wLCBvbkFuaW1hdGlvbkVuZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBU
cmFuc2l0aW9uIHByb3BlcnR5IG9mIGFuIGhvc3QgdG8gdGhlIHRhcmdldCBWYWx1ZQorICAgICAq
IEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gdHJhbnNpdGlvbgorICAgICAqIEBwYXJh
bSB0YXJnZXRWYWx1ZSBUaGUgdGFyZ2V0IFZhbHVlIG9mIHRoZSBwcm9wZXJ0eQorICAgICAqIEBw
YXJhbSBob3N0IFRoZSBvYmplY3Qgd2hlcmUgdGhlIHByb3BlcnR5IHRvIGFuaW1hdGUgYmVsb25n
cworICAgICAqIEBwYXJhbSBzY2VuZSBTY2VuZSB1c2VkIHRvIHJ1biB0aGUgYW5pbWF0aW9uCisg
ICAgICogQHBhcmFtIGZyYW1lUmF0ZSBGcmFtZXJhdGUgKGluIGZyYW1lL3MpIHRvIHVzZQorICAg
ICAqIEBwYXJhbSB0cmFuc2l0aW9uIFRoZSB0cmFuc2l0aW9uIHR5cGUgd2Ugd2FudCB0byB1c2UK
KyAgICAgKiBAcGFyYW0gZHVyYXRpb24gVGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24sIGlu
IG1pbGxpc2Vjb25kcworICAgICAqIEBwYXJhbSBvbkFuaW1hdGlvbkVuZCBDYWxsYmFjayB0cmln
Z2VyIGF0IHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEByZXR1cm5zIE51bGxhYmxl
IGFuaW1hdGlvbgorICAgICAqLworICAgIEFuaW1hdGlvbi5UcmFuc2l0aW9uVG8gPSBmdW5jdGlv
biAocHJvcGVydHksIHRhcmdldFZhbHVlLCBob3N0LCBzY2VuZSwgZnJhbWVSYXRlLCB0cmFuc2l0
aW9uLCBkdXJhdGlvbiwgb25BbmltYXRpb25FbmQpIHsKKyAgICAgICAgaWYgKG9uQW5pbWF0aW9u
RW5kID09PSB2b2lkIDApIHsgb25BbmltYXRpb25FbmQgPSBudWxsOyB9CisgICAgICAgIGlmIChk
dXJhdGlvbiA8PSAwKSB7CisgICAgICAgICAgICBob3N0W3Byb3BlcnR5XSA9IHRhcmdldFZhbHVl
OworICAgICAgICAgICAgaWYgKG9uQW5pbWF0aW9uRW5kKSB7CisgICAgICAgICAgICAgICAgb25B
bmltYXRpb25FbmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIHZhciBlbmRGcmFtZSA9IGZyYW1lUmF0ZSAqIChkdXJhdGlvbiAv
IDEwMDApOworICAgICAgICB0cmFuc2l0aW9uLnNldEtleXMoW3sKKyAgICAgICAgICAgICAgICBm
cmFtZTogMCwKKyAgICAgICAgICAgICAgICB2YWx1ZTogaG9zdFtwcm9wZXJ0eV0uY2xvbmUgPyBo
b3N0W3Byb3BlcnR5XS5jbG9uZSgpIDogaG9zdFtwcm9wZXJ0eV0KKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWU6IGVuZEZyYW1lLAorICAgICAgICAg
ICAgICAgIHZhbHVlOiB0YXJnZXRWYWx1ZQorICAgICAgICAgICAgfV0pOworICAgICAgICBpZiAo
IWhvc3QuYW5pbWF0aW9ucykgeworICAgICAgICAgICAgaG9zdC5hbmltYXRpb25zID0gW107Cisg
ICAgICAgIH0KKyAgICAgICAgaG9zdC5hbmltYXRpb25zLnB1c2godHJhbnNpdGlvbik7CisgICAg
ICAgIHZhciBhbmltYXRpb24gPSBzY2VuZS5iZWdpbkFuaW1hdGlvbihob3N0LCAwLCBlbmRGcmFt
ZSwgZmFsc2UpOworICAgICAgICBhbmltYXRpb24ub25BbmltYXRpb25FbmQgPSBvbkFuaW1hdGlv
bkVuZDsKKyAgICAgICAgcmV0dXJuIGFuaW1hdGlvbjsKKyAgICB9OworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShBbmltYXRpb24ucHJvdG90eXBlLCAicnVudGltZUFuaW1hdGlvbnMiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gdGhlIGFycmF5IG9mIHJ1bnRpbWUgYW5pbWF0
aW9ucyBjdXJyZW50bHkgdXNpbmcgdGhpcyBhbmltYXRpb24KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3J1bnRpbWVBbmlt
YXRpb25zOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQW5p
bWF0aW9uLnByb3RvdHlwZSwgImhhc1J1bm5pbmdSdW50aW1lQW5pbWF0aW9ucyIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiBhbnkgb2YgdGhlIHJ1bnRpbWUgYW5pbWF0
aW9ucyBhcmUgY3VycmVudGx5IHJ1bm5pbmcKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3J1bnRp
bWVBbmltYXRpb25zOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZh
ciBydW50aW1lQW5pbWF0aW9uID0gX2FbX2ldOworICAgICAgICAgICAgICAgIGlmICghcnVudGlt
ZUFuaW1hdGlvbi5pc1N0b3BwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvLyBNZXRob2RzCisgICAgLyoqCisgICAgICog
Q29udmVydHMgdGhlIGFuaW1hdGlvbiB0byBhIHN0cmluZworICAgICAqIEBwYXJhbSBmdWxsRGV0
YWlscyBzdXBwb3J0IGZvciBtdWx0aXBsZSBsZXZlbHMgb2YgbG9nZ2luZyB3aXRoaW4gc2NlbmUg
bG9hZGluZworICAgICAqIEByZXR1cm5zIFN0cmluZyBmb3JtIG9mIHRoZSBhbmltYXRpb24KKyAg
ICAgKi8KKyAgICBBbmltYXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGZ1bGxE
ZXRhaWxzKSB7CisgICAgICAgIHZhciByZXQgPSAiTmFtZTogIiArIHRoaXMubmFtZSArICIsIHBy
b3BlcnR5OiAiICsgdGhpcy50YXJnZXRQcm9wZXJ0eTsKKyAgICAgICAgcmV0ICs9ICIsIGRhdGF0
eXBlOiAiICsgKFsiRmxvYXQiLCAiVmVjdG9yMyIsICJRdWF0ZXJuaW9uIiwgIk1hdHJpeCIsICJD
b2xvcjMiLCAiVmVjdG9yMiJdKVt0aGlzLmRhdGFUeXBlXTsKKyAgICAgICAgcmV0ICs9ICIsIG5L
ZXlzOiAiICsgKHRoaXMuX2tleXMgPyB0aGlzLl9rZXlzLmxlbmd0aCA6ICJub25lIik7CisgICAg
ICAgIHJldCArPSAiLCBuUmFuZ2VzOiAiICsgKHRoaXMuX3JhbmdlcyA/IE9iamVjdC5rZXlzKHRo
aXMuX3JhbmdlcykubGVuZ3RoIDogIm5vbmUiKTsKKyAgICAgICAgaWYgKGZ1bGxEZXRhaWxzKSB7
CisgICAgICAgICAgICByZXQgKz0gIiwgUmFuZ2VzOiB7IjsKKyAgICAgICAgICAgIHZhciBmaXJz
dCA9IHRydWU7CisgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX3Jhbmdlcykgewor
ICAgICAgICAgICAgICAgIGlmIChmaXJzdCkgeworICAgICAgICAgICAgICAgICAgICByZXQgKz0g
IiwgIjsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0ICs9IG5hbWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXQgKz0gIn0iOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBZGQgYW4gZXZlbnQgdG8gdGhpcyBhbmltYXRpb24KKyAgICAgKiBA
cGFyYW0gZXZlbnQgRXZlbnQgdG8gYWRkCisgICAgICovCisgICAgQW5pbWF0aW9uLnByb3RvdHlw
ZS5hZGRFdmVudCA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICB0aGlzLl9ldmVudHMucHVz
aChldmVudCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIGV2ZW50cyBmb3Vu
ZCBhdCB0aGUgZ2l2ZW4gZnJhbWUKKyAgICAgKiBAcGFyYW0gZnJhbWUgVGhlIGZyYW1lIHRvIHJl
bW92ZSBldmVudHMgZnJvbQorICAgICAqLworICAgIEFuaW1hdGlvbi5wcm90b3R5cGUucmVtb3Zl
RXZlbnRzID0gZnVuY3Rpb24gKGZyYW1lKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsg
aW5kZXggPCB0aGlzLl9ldmVudHMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fZXZlbnRzW2luZGV4XS5mcmFtZSA9PT0gZnJhbWUpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9ldmVudHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICBpbmRleC0tOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2
ZXMgYWxsIHRoZSBldmVudHMgZnJvbSB0aGUgYW5pbWF0aW9uCisgICAgICogQHJldHVybnMgRXZl
bnRzIGZyb20gdGhlIGFuaW1hdGlvbgorICAgICAqLworICAgIEFuaW1hdGlvbi5wcm90b3R5cGUu
Z2V0RXZlbnRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBhbmltYXRpb24gcmFuZ2UKKyAgICAg
KiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBhbmltYXRpb24gcmFuZ2UKKyAgICAgKiBAcGFyYW0g
ZnJvbSBTdGFydGluZyBmcmFtZSBvZiB0aGUgYW5pbWF0aW9uIHJhbmdlCisgICAgICogQHBhcmFt
IHRvIEVuZGluZyBmcmFtZSBvZiB0aGUgYW5pbWF0aW9uCisgICAgICovCisgICAgQW5pbWF0aW9u
LnByb3RvdHlwZS5jcmVhdGVSYW5nZSA9IGZ1bmN0aW9uIChuYW1lLCBmcm9tLCB0bykgeworICAg
ICAgICAvLyBjaGVjayBuYW1lIG5vdCBhbHJlYWR5IGluIHVzZTsgY291bGQgaGFwcGVuIGZvciBi
b25lcyBhZnRlciBzZXJpYWxpemVkCisgICAgICAgIGlmICghdGhpcy5fcmFuZ2VzW25hbWVdKSB7
CisgICAgICAgICAgICB0aGlzLl9yYW5nZXNbbmFtZV0gPSBuZXcgX2FuaW1hdGlvblJhbmdlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFuaW1hdGlvblJhbmdlIl0obmFtZSwgZnJvbSwg
dG8pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWxldGVzIGFuIGFuaW1h
dGlvbiByYW5nZSBieSBuYW1lCisgICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgYW5pbWF0
aW9uIHJhbmdlIHRvIGRlbGV0ZQorICAgICAqIEBwYXJhbSBkZWxldGVGcmFtZXMgU3BlY2lmaWVz
IGlmIHRoZSBrZXkgZnJhbWVzIGZvciB0aGUgcmFuZ2Ugc2hvdWxkIGFsc28gYmUgZGVsZXRlZCAo
dHJ1ZSkgb3Igbm90IChmYWxzZSkKKyAgICAgKi8KKyAgICBBbmltYXRpb24ucHJvdG90eXBlLmRl
bGV0ZVJhbmdlID0gZnVuY3Rpb24gKG5hbWUsIGRlbGV0ZUZyYW1lcykgeworICAgICAgICBpZiAo
ZGVsZXRlRnJhbWVzID09PSB2b2lkIDApIHsgZGVsZXRlRnJhbWVzID0gdHJ1ZTsgfQorICAgICAg
ICB2YXIgcmFuZ2UgPSB0aGlzLl9yYW5nZXNbbmFtZV07CisgICAgICAgIGlmICghcmFuZ2UpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVsZXRlRnJhbWVz
KSB7CisgICAgICAgICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb207CisgICAgICAgICAgICB2YXIg
dG8gPSByYW5nZS50bzsKKyAgICAgICAgICAgIC8vIHRoaXMgbG9vcCBNVVNUIGdvIGhpZ2ggdG8g
bG93IGZvciBtdWx0aXBsZSBzcGxpY2VzIHRvIHdvcmsKKyAgICAgICAgICAgIGZvciAodmFyIGtl
eSA9IHRoaXMuX2tleXMubGVuZ3RoIC0gMTsga2V5ID49IDA7IGtleS0tKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX2tleXNba2V5XS5mcmFtZSA+PSBmcm9tICYmIHRoaXMuX2tleXNba2V5
XS5mcmFtZSA8PSB0bykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzLnNwbGljZShr
ZXksIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9yYW5nZXNbbmFtZV0gPSBudWxsOyAvLyBzYWlkIG11Y2ggZmFzdGVyIHRoYW4g
J2RlbGV0ZSB0aGlzLl9yYW5nZVtuYW1lXScKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMg
dGhlIGFuaW1hdGlvbiByYW5nZSBieSBuYW1lLCBvciBudWxsIGlmIG5vdCBkZWZpbmVkCisgICAg
ICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHJhbmdlCisgICAgICogQHJldHVy
bnMgTnVsbGFibGUgYW5pbWF0aW9uIHJhbmdlCisgICAgICovCisgICAgQW5pbWF0aW9uLnByb3Rv
dHlwZS5nZXRSYW5nZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9y
YW5nZXNbbmFtZV07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBrZXkgZnJhbWVz
IGZyb20gdGhlIGFuaW1hdGlvbgorICAgICAqIEByZXR1cm5zIFRoZSBrZXkgZnJhbWVzIG9mIHRo
ZSBhbmltYXRpb24KKyAgICAgKi8KKyAgICBBbmltYXRpb24ucHJvdG90eXBlLmdldEtleXMgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9rZXlzOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgaGlnaGVzdCBmcmFtZSByYXRlIG9mIHRoZSBhbmltYXRpb24KKyAg
ICAgKiBAcmV0dXJucyBIaWdoZXN0IGZyYW1lIHJhdGUgb2YgdGhlIGFuaW1hdGlvbgorICAgICAq
LworICAgIEFuaW1hdGlvbi5wcm90b3R5cGUuZ2V0SGlnaGVzdEZyYW1lID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgcmV0ID0gMDsKKyAgICAgICAgZm9yICh2YXIga2V5ID0gMCwgbktleXMg
PSB0aGlzLl9rZXlzLmxlbmd0aDsga2V5IDwgbktleXM7IGtleSsrKSB7CisgICAgICAgICAgICBp
ZiAocmV0IDwgdGhpcy5fa2V5c1trZXldLmZyYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0ID0g
dGhpcy5fa2V5c1trZXldLmZyYW1lOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBlYXNpbmcgZnVu
Y3Rpb24gb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEByZXR1cm5zIEVhc2luZyBmdW5jdGlvbiBv
ZiB0aGUgYW5pbWF0aW9uCisgICAgICovCisgICAgQW5pbWF0aW9uLnByb3RvdHlwZS5nZXRFYXNp
bmdGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Vhc2luZ0Z1
bmN0aW9uOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZWFzaW5nIGZ1bmN0aW9u
IG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gZWFzaW5nRnVuY3Rpb24gQSBjdXN0b20g
bWF0aGVtYXRpY2FsIGZvcm11bGEgZm9yIGFuaW1hdGlvbgorICAgICAqLworICAgIEFuaW1hdGlv
bi5wcm90b3R5cGUuc2V0RWFzaW5nRnVuY3Rpb24gPSBmdW5jdGlvbiAoZWFzaW5nRnVuY3Rpb24p
IHsKKyAgICAgICAgdGhpcy5fZWFzaW5nRnVuY3Rpb24gPSBlYXNpbmdGdW5jdGlvbjsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEludGVycG9sYXRlcyBhIHNjYWxhciBsaW5lYXJseQorICAgICAq
IEBwYXJhbSBzdGFydFZhbHVlIFN0YXJ0IHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUKKyAg
ICAgKiBAcGFyYW0gZW5kVmFsdWUgRW5kIHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUKKyAg
ICAgKiBAcGFyYW0gZ3JhZGllbnQgU2NhbGFyIGFtb3VudCB0byBpbnRlcnBvbGF0ZQorICAgICAq
IEByZXR1cm5zIEludGVycG9sYXRlZCBzY2FsYXIgdmFsdWUKKyAgICAgKi8KKyAgICBBbmltYXRp
b24ucHJvdG90eXBlLmZsb2F0SW50ZXJwb2xhdGVGdW5jdGlvbiA9IGZ1bmN0aW9uIChzdGFydFZh
bHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQpIHsKKyAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3Nj
YWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5MZXJwKHN0YXJ0VmFs
dWUsIGVuZFZhbHVlLCBncmFkaWVudCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcnBv
bGF0ZXMgYSBzY2FsYXIgY3ViaWNhbGx5CisgICAgICogQHBhcmFtIHN0YXJ0VmFsdWUgU3RhcnQg
dmFsdWUgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJhbSBvdXRUYW5nZW50IEVu
ZCB0YW5nZW50IG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gZW5kVmFsdWUgRW5kIHZh
bHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUKKyAgICAgKiBAcGFyYW0gaW5UYW5nZW50IFN0YXJ0
IHRhbmdlbnQgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJhbSBncmFkaWVudCBT
Y2FsYXIgYW1vdW50IHRvIGludGVycG9sYXRlCisgICAgICogQHJldHVybnMgSW50ZXJwb2xhdGVk
IHNjYWxhciB2YWx1ZQorICAgICAqLworICAgIEFuaW1hdGlvbi5wcm90b3R5cGUuZmxvYXRJbnRl
cnBvbGF0ZUZ1bmN0aW9uV2l0aFRhbmdlbnRzID0gZnVuY3Rpb24gKHN0YXJ0VmFsdWUsIG91dFRh
bmdlbnQsIGVuZFZhbHVlLCBpblRhbmdlbnQsIGdyYWRpZW50KSB7CisgICAgICAgIHJldHVybiBf
TWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0u
SGVybWl0ZShzdGFydFZhbHVlLCBvdXRUYW5nZW50LCBlbmRWYWx1ZSwgaW5UYW5nZW50LCBncmFk
aWVudCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcnBvbGF0ZXMgYSBxdWF0ZXJuaW9u
IHVzaW5nIGEgc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uCisgICAgICogQHBhcmFtIHN0
YXJ0VmFsdWUgU3RhcnQgdmFsdWUgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJh
bSBlbmRWYWx1ZSBFbmQgdmFsdWUgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJh
bSBncmFkaWVudCBTY2FsYXIgYW1vdW50IHRvIGludGVycG9sYXRlCisgICAgICogQHJldHVybnMg
SW50ZXJwb2xhdGVkIHF1YXRlcm5pb24gdmFsdWUKKyAgICAgKi8KKyAgICBBbmltYXRpb24ucHJv
dG90eXBlLnF1YXRlcm5pb25JbnRlcnBvbGF0ZUZ1bmN0aW9uID0gZnVuY3Rpb24gKHN0YXJ0VmFs
dWUsIGVuZFZhbHVlLCBncmFkaWVudCkgeworICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlF1YXRlcm5pb24iXS5TbGVycChzdGFy
dFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQpOworICAgIH07CisgICAgLyoqCisgICAgICogSW50
ZXJwb2xhdGVzIGEgcXVhdGVybmlvbiBjdWJpY2FsbHkKKyAgICAgKiBAcGFyYW0gc3RhcnRWYWx1
ZSBTdGFydCB2YWx1ZSBvZiB0aGUgYW5pbWF0aW9uIGN1cnZlCisgICAgICogQHBhcmFtIG91dFRh
bmdlbnQgRW5kIHRhbmdlbnQgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJhbSBl
bmRWYWx1ZSBFbmQgdmFsdWUgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJhbSBp
blRhbmdlbnQgU3RhcnQgdGFuZ2VudCBvZiB0aGUgYW5pbWF0aW9uIGN1cnZlCisgICAgICogQHBh
cmFtIGdyYWRpZW50IFNjYWxhciBhbW91bnQgdG8gaW50ZXJwb2xhdGUKKyAgICAgKiBAcmV0dXJu
cyBJbnRlcnBvbGF0ZWQgcXVhdGVybmlvbiB2YWx1ZQorICAgICAqLworICAgIEFuaW1hdGlvbi5w
cm90b3R5cGUucXVhdGVybmlvbkludGVycG9sYXRlRnVuY3Rpb25XaXRoVGFuZ2VudHMgPSBmdW5j
dGlvbiAoc3RhcnRWYWx1ZSwgb3V0VGFuZ2VudCwgZW5kVmFsdWUsIGluVGFuZ2VudCwgZ3JhZGll
bnQpIHsKKyAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJRdWF0ZXJuaW9uIl0uSGVybWl0ZShzdGFydFZhbHVlLCBvdXRUYW5nZW50
LCBlbmRWYWx1ZSwgaW5UYW5nZW50LCBncmFkaWVudCkubm9ybWFsaXplKCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBJbnRlcnBvbGF0ZXMgYSBWZWN0b3IzIGxpbmVhcmwKKyAgICAgKiBAcGFy
YW0gc3RhcnRWYWx1ZSBTdGFydCB2YWx1ZSBvZiB0aGUgYW5pbWF0aW9uIGN1cnZlCisgICAgICog
QHBhcmFtIGVuZFZhbHVlIEVuZCB2YWx1ZSBvZiB0aGUgYW5pbWF0aW9uIGN1cnZlCisgICAgICog
QHBhcmFtIGdyYWRpZW50IFNjYWxhciBhbW91bnQgdG8gaW50ZXJwb2xhdGUKKyAgICAgKiBAcmV0
dXJucyBJbnRlcnBvbGF0ZWQgc2NhbGFyIHZhbHVlCisgICAgICovCisgICAgQW5pbWF0aW9uLnBy
b3RvdHlwZS52ZWN0b3IzSW50ZXJwb2xhdGVGdW5jdGlvbiA9IGZ1bmN0aW9uIChzdGFydFZhbHVl
LCBlbmRWYWx1ZSwgZ3JhZGllbnQpIHsKKyAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uTGVycChzdGFydFZhbHVl
LCBlbmRWYWx1ZSwgZ3JhZGllbnQpOworICAgIH07CisgICAgLyoqCisgICAgICogSW50ZXJwb2xh
dGVzIGEgVmVjdG9yMyBjdWJpY2FsbHkKKyAgICAgKiBAcGFyYW0gc3RhcnRWYWx1ZSBTdGFydCB2
YWx1ZSBvZiB0aGUgYW5pbWF0aW9uIGN1cnZlCisgICAgICogQHBhcmFtIG91dFRhbmdlbnQgRW5k
IHRhbmdlbnQgb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSBlbmRWYWx1ZSBFbmQgdmFs
dWUgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJhbSBpblRhbmdlbnQgU3RhcnQg
dGFuZ2VudCBvZiB0aGUgYW5pbWF0aW9uIGN1cnZlCisgICAgICogQHBhcmFtIGdyYWRpZW50IFNj
YWxhciBhbW91bnQgdG8gaW50ZXJwb2xhdGUKKyAgICAgKiBAcmV0dXJucyBJbnRlcnBvbGF0ZWRW
ZWN0b3IzIHZhbHVlCisgICAgICovCisgICAgQW5pbWF0aW9uLnByb3RvdHlwZS52ZWN0b3IzSW50
ZXJwb2xhdGVGdW5jdGlvbldpdGhUYW5nZW50cyA9IGZ1bmN0aW9uIChzdGFydFZhbHVlLCBvdXRU
YW5nZW50LCBlbmRWYWx1ZSwgaW5UYW5nZW50LCBncmFkaWVudCkgeworICAgICAgICByZXR1cm4g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMi
XS5IZXJtaXRlKHN0YXJ0VmFsdWUsIG91dFRhbmdlbnQsIGVuZFZhbHVlLCBpblRhbmdlbnQsIGdy
YWRpZW50KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEludGVycG9sYXRlcyBhIFZlY3RvcjIg
bGluZWFybHkKKyAgICAgKiBAcGFyYW0gc3RhcnRWYWx1ZSBTdGFydCB2YWx1ZSBvZiB0aGUgYW5p
bWF0aW9uIGN1cnZlCisgICAgICogQHBhcmFtIGVuZFZhbHVlIEVuZCB2YWx1ZSBvZiB0aGUgYW5p
bWF0aW9uIGN1cnZlCisgICAgICogQHBhcmFtIGdyYWRpZW50IFNjYWxhciBhbW91bnQgdG8gaW50
ZXJwb2xhdGUKKyAgICAgKiBAcmV0dXJucyBJbnRlcnBvbGF0ZWQgVmVjdG9yMiB2YWx1ZQorICAg
ICAqLworICAgIEFuaW1hdGlvbi5wcm90b3R5cGUudmVjdG9yMkludGVycG9sYXRlRnVuY3Rpb24g
PSBmdW5jdGlvbiAoc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KSB7CisgICAgICAgIHJl
dHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVj
dG9yMiJdLkxlcnAoc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEludGVycG9sYXRlcyBhIFZlY3RvcjIgY3ViaWNhbGx5CisgICAgICogQHBh
cmFtIHN0YXJ0VmFsdWUgU3RhcnQgdmFsdWUgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAq
IEBwYXJhbSBvdXRUYW5nZW50IEVuZCB0YW5nZW50IG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBA
cGFyYW0gZW5kVmFsdWUgRW5kIHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUKKyAgICAgKiBA
cGFyYW0gaW5UYW5nZW50IFN0YXJ0IHRhbmdlbnQgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAg
ICAqIEBwYXJhbSBncmFkaWVudCBTY2FsYXIgYW1vdW50IHRvIGludGVycG9sYXRlCisgICAgICog
QHJldHVybnMgSW50ZXJwb2xhdGVkIFZlY3RvcjIgdmFsdWUKKyAgICAgKi8KKyAgICBBbmltYXRp
b24ucHJvdG90eXBlLnZlY3RvcjJJbnRlcnBvbGF0ZUZ1bmN0aW9uV2l0aFRhbmdlbnRzID0gZnVu
Y3Rpb24gKHN0YXJ0VmFsdWUsIG91dFRhbmdlbnQsIGVuZFZhbHVlLCBpblRhbmdlbnQsIGdyYWRp
ZW50KSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVmVjdG9yMiJdLkhlcm1pdGUoc3RhcnRWYWx1ZSwgb3V0VGFuZ2VudCwg
ZW5kVmFsdWUsIGluVGFuZ2VudCwgZ3JhZGllbnQpOworICAgIH07CisgICAgLyoqCisgICAgICog
SW50ZXJwb2xhdGVzIGEgc2l6ZSBsaW5lYXJseQorICAgICAqIEBwYXJhbSBzdGFydFZhbHVlIFN0
YXJ0IHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUKKyAgICAgKiBAcGFyYW0gZW5kVmFsdWUg
RW5kIHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUKKyAgICAgKiBAcGFyYW0gZ3JhZGllbnQg
U2NhbGFyIGFtb3VudCB0byBpbnRlcnBvbGF0ZQorICAgICAqIEByZXR1cm5zIEludGVycG9sYXRl
ZCBTaXplIHZhbHVlCisgICAgICovCisgICAgQW5pbWF0aW9uLnByb3RvdHlwZS5zaXplSW50ZXJw
b2xhdGVGdW5jdGlvbiA9IGZ1bmN0aW9uIChzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQp
IHsKKyAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3NpemVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siU2l6ZSJdLkxlcnAoc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEludGVycG9sYXRlcyBhIENvbG9yMyBsaW5lYXJseQorICAg
ICAqIEBwYXJhbSBzdGFydFZhbHVlIFN0YXJ0IHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUK
KyAgICAgKiBAcGFyYW0gZW5kVmFsdWUgRW5kIHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUK
KyAgICAgKiBAcGFyYW0gZ3JhZGllbnQgU2NhbGFyIGFtb3VudCB0byBpbnRlcnBvbGF0ZQorICAg
ICAqIEByZXR1cm5zIEludGVycG9sYXRlZCBDb2xvcjMgdmFsdWUKKyAgICAgKi8KKyAgICBBbmlt
YXRpb24ucHJvdG90eXBlLmNvbG9yM0ludGVycG9sYXRlRnVuY3Rpb24gPSBmdW5jdGlvbiAoc3Rh
cnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjMiXS5MZXJwKHN0YXJ0
VmFsdWUsIGVuZFZhbHVlLCBncmFkaWVudCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlk
ZGVuIEludGVybmFsIHVzZSBvbmx5CisgICAgICovCisgICAgQW5pbWF0aW9uLnByb3RvdHlwZS5f
Z2V0S2V5VmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgaWYgKHR5cGVvZiB2YWx1
ZSA9PT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRl
biBJbnRlcm5hbCB1c2Ugb25seQorICAgICAqLworICAgIEFuaW1hdGlvbi5wcm90b3R5cGUuX2lu
dGVycG9sYXRlID0gZnVuY3Rpb24gKGN1cnJlbnRGcmFtZSwgc3RhdGUpIHsKKyAgICAgICAgaWYg
KHN0YXRlLmxvb3BNb2RlID09PSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQg
JiYgc3RhdGUucmVwZWF0Q291bnQgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGUuaGln
aExpbWl0VmFsdWUuY2xvbmUgPyBzdGF0ZS5oaWdoTGltaXRWYWx1ZS5jbG9uZSgpIDogc3RhdGUu
aGlnaExpbWl0VmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGtleXMgPSB0aGlzLl9rZXlz
OworICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9nZXRLZXlWYWx1ZShrZXlzWzBdLnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICB2YXIg
c3RhcnRLZXlJbmRleCA9IHN0YXRlLmtleTsKKyAgICAgICAgaWYgKGtleXNbc3RhcnRLZXlJbmRl
eF0uZnJhbWUgPj0gY3VycmVudEZyYW1lKSB7CisgICAgICAgICAgICB3aGlsZSAoc3RhcnRLZXlJ
bmRleCAtIDEgPj0gMCAmJiBrZXlzW3N0YXJ0S2V5SW5kZXhdLmZyYW1lID49IGN1cnJlbnRGcmFt
ZSkgeworICAgICAgICAgICAgICAgIHN0YXJ0S2V5SW5kZXgtLTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBmb3IgKHZhciBrZXkgPSBzdGFydEtleUluZGV4OyBrZXkgPCBrZXlz
Lmxlbmd0aDsga2V5KyspIHsKKyAgICAgICAgICAgIHZhciBlbmRLZXkgPSBrZXlzW2tleSArIDFd
OworICAgICAgICAgICAgaWYgKGVuZEtleS5mcmFtZSA+PSBjdXJyZW50RnJhbWUpIHsKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5rZXkgPSBrZXk7CisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0S2V5
ID0ga2V5c1trZXldOworICAgICAgICAgICAgICAgIHZhciBzdGFydFZhbHVlID0gdGhpcy5fZ2V0
S2V5VmFsdWUoc3RhcnRLZXkudmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChzdGFydEtleS5p
bnRlcnBvbGF0aW9uID09PSBfYW5pbWF0aW9uS2V5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIkFuaW1hdGlvbktleUludGVycG9sYXRpb24iXS5TVEVQKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGFydFZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB2YXIgZW5kVmFsdWUgPSB0aGlzLl9nZXRLZXlWYWx1ZShlbmRLZXkudmFsdWUpOworICAgICAg
ICAgICAgICAgIHZhciB1c2VUYW5nZW50ID0gc3RhcnRLZXkub3V0VGFuZ2VudCAhPT0gdW5kZWZp
bmVkICYmIGVuZEtleS5pblRhbmdlbnQgIT09IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICB2
YXIgZnJhbWVEZWx0YSA9IGVuZEtleS5mcmFtZSAtIHN0YXJ0S2V5LmZyYW1lOworICAgICAgICAg
ICAgICAgIC8vIGdyYWRpZW50IDogcGVyY2VudCBvZiBjdXJyZW50RnJhbWUgYmV0d2VlbiB0aGUg
ZnJhbWUgaW5mIGFuZCB0aGUgZnJhbWUgc3VwCisgICAgICAgICAgICAgICAgdmFyIGdyYWRpZW50
ID0gKGN1cnJlbnRGcmFtZSAtIHN0YXJ0S2V5LmZyYW1lKSAvIGZyYW1lRGVsdGE7CisgICAgICAg
ICAgICAgICAgLy8gY2hlY2sgZm9yIGVhc2luZ0Z1bmN0aW9uIGFuZCBjb3JyZWN0aW9uIG9mIGdy
YWRpZW50CisgICAgICAgICAgICAgICAgdmFyIGVhc2luZ0Z1bmN0aW9uID0gdGhpcy5nZXRFYXNp
bmdGdW5jdGlvbigpOworICAgICAgICAgICAgICAgIGlmIChlYXNpbmdGdW5jdGlvbiAhPSBudWxs
KSB7CisgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50ID0gZWFzaW5nRnVuY3Rpb24uZWFzZShn
cmFkaWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN3aXRjaCAodGhp
cy5kYXRhVHlwZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGbG9hdAorICAgICAgICAgICAg
ICAgICAgICBjYXNlIEFuaW1hdGlvbi5BTklNQVRJT05UWVBFX0ZMT0FUOgorICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGZsb2F0VmFsdWUgPSB1c2VUYW5nZW50ID8gdGhpcy5mbG9hdEludGVy
cG9sYXRlRnVuY3Rpb25XaXRoVGFuZ2VudHMoc3RhcnRWYWx1ZSwgc3RhcnRLZXkub3V0VGFuZ2Vu
dCAqIGZyYW1lRGVsdGEsIGVuZFZhbHVlLCBlbmRLZXkuaW5UYW5nZW50ICogZnJhbWVEZWx0YSwg
Z3JhZGllbnQpIDogdGhpcy5mbG9hdEludGVycG9sYXRlRnVuY3Rpb24oc3RhcnRWYWx1ZSwgZW5k
VmFsdWUsIGdyYWRpZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUu
bG9vcE1vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbi5B
TklNQVRJT05MT09QTU9ERV9DWUNMRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEFuaW1hdGlvbi5BTklNQVRJT05MT09QTU9ERV9DT05TVEFOVDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0VmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfUkVMQVRJVkU6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5vZmZzZXRWYWx1ZSAqIHN0YXRl
LnJlcGVhdENvdW50ICsgZmxvYXRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAvLyBRdWF0
ZXJuaW9uCisgICAgICAgICAgICAgICAgICAgIGNhc2UgQW5pbWF0aW9uLkFOSU1BVElPTlRZUEVf
UVVBVEVSTklPTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWF0VmFsdWUgPSB1c2VU
YW5nZW50ID8gdGhpcy5xdWF0ZXJuaW9uSW50ZXJwb2xhdGVGdW5jdGlvbldpdGhUYW5nZW50cyhz
dGFydFZhbHVlLCBzdGFydEtleS5vdXRUYW5nZW50LnNjYWxlKGZyYW1lRGVsdGEpLCBlbmRWYWx1
ZSwgZW5kS2V5LmluVGFuZ2VudC5zY2FsZShmcmFtZURlbHRhKSwgZ3JhZGllbnQpIDogdGhpcy5x
dWF0ZXJuaW9uSW50ZXJwb2xhdGVGdW5jdGlvbihzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGll
bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5sb29wTW9kZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQW5pbWF0aW9uLkFOSU1BVElPTkxPT1BN
T0RFX0NZQ0xFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQW5pbWF0aW9uLkFO
SU1BVElPTkxPT1BNT0RFX0NPTlNUQU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcXVhdFZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQW5p
bWF0aW9uLkFOSU1BVElPTkxPT1BNT0RFX1JFTEFUSVZFOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcXVhdFZhbHVlLmFkZEluUGxhY2Uoc3RhdGUub2Zmc2V0VmFsdWUu
c2NhbGUoc3RhdGUucmVwZWF0Q291bnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWF0VmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFZlY3RvcjMKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFU
SU9OVFlQRV9WRUNUT1IzOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlYzNWYWx1ZSA9
IHVzZVRhbmdlbnQgPyB0aGlzLnZlY3RvcjNJbnRlcnBvbGF0ZUZ1bmN0aW9uV2l0aFRhbmdlbnRz
KHN0YXJ0VmFsdWUsIHN0YXJ0S2V5Lm91dFRhbmdlbnQuc2NhbGUoZnJhbWVEZWx0YSksIGVuZFZh
bHVlLCBlbmRLZXkuaW5UYW5nZW50LnNjYWxlKGZyYW1lRGVsdGEpLCBncmFkaWVudCkgOiB0aGlz
LnZlY3RvcjNJbnRlcnBvbGF0ZUZ1bmN0aW9uKHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBncmFkaWVu
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlLmxvb3BNb2RlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1P
REVfQ1lDTEU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5J
TUFUSU9OTE9PUE1PREVfQ09OU1RBTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB2ZWMzVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmlt
YXRpb24uQU5JTUFUSU9OTE9PUE1PREVfUkVMQVRJVkU6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWMzVmFsdWUuYWRkKHN0YXRlLm9mZnNldFZhbHVlLnNjYWxlKHN0
YXRlLnJlcGVhdENvdW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIC8vIFZlY3RvcjIKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24u
QU5JTUFUSU9OVFlQRV9WRUNUT1IyOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlYzJW
YWx1ZSA9IHVzZVRhbmdlbnQgPyB0aGlzLnZlY3RvcjJJbnRlcnBvbGF0ZUZ1bmN0aW9uV2l0aFRh
bmdlbnRzKHN0YXJ0VmFsdWUsIHN0YXJ0S2V5Lm91dFRhbmdlbnQuc2NhbGUoZnJhbWVEZWx0YSks
IGVuZFZhbHVlLCBlbmRLZXkuaW5UYW5nZW50LnNjYWxlKGZyYW1lRGVsdGEpLCBncmFkaWVudCkg
OiB0aGlzLnZlY3RvcjJJbnRlcnBvbGF0ZUZ1bmN0aW9uKHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBn
cmFkaWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlLmxvb3BNb2Rl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9O
TE9PUE1PREVfQ1lDTEU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRp
b24uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB2ZWMyVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfUkVMQVRJVkU6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB2ZWMyVmFsdWUuYWRkKHN0YXRlLm9mZnNldFZhbHVlLnNj
YWxlKHN0YXRlLnJlcGVhdENvdW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIC8vIFNpemUKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRp
b24uQU5JTUFUSU9OVFlQRV9TSVpFOgorICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChz
dGF0ZS5sb29wTW9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQW5pbWF0
aW9uLkFOSU1BVElPTkxPT1BNT0RFX0NZQ0xFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQW5pbWF0aW9uLkFOSU1BVElPTkxPT1BNT0RFX0NPTlNUQU5UOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaXplSW50ZXJwb2xhdGVGdW5jdGlvbihz
dGFydFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQW5pbWF0aW9uLkFOSU1BVElPTkxPT1BNT0RFX1JFTEFUSVZFOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaXplSW50ZXJwb2xhdGVGdW5jdGlv
bihzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQpLmFkZChzdGF0ZS5vZmZzZXRWYWx1ZS5z
Y2FsZShzdGF0ZS5yZXBlYXRDb3VudCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAvLyBDb2xvcjMKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmlt
YXRpb24uQU5JTUFUSU9OVFlQRV9DT0xPUjM6CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHN0YXRlLmxvb3BNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBB
bmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ1lDTEU6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbG9yM0ludGVycG9sYXRlRnVu
Y3Rpb24oc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFuaW1hdGlvbi5BTklNQVRJT05MT09QTU9ERV9SRUxBVElWRToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sb3IzSW50ZXJwb2xh
dGVGdW5jdGlvbihzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQpLmFkZChzdGF0ZS5vZmZz
ZXRWYWx1ZS5zY2FsZShzdGF0ZS5yZXBlYXRDb3VudCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBNYXRyaXgKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBbmltYXRpb24uQU5JTUFUSU9OVFlQRV9NQVRSSVg6CisgICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHN0YXRlLmxvb3BNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ1lDTEU6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQ6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBbmltYXRpb24uQWxsb3dNYXRy
aWNlc0ludGVycG9sYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLm1hdHJpeEludGVycG9sYXRlRnVuY3Rpb24oc3RhcnRWYWx1ZSwgZW5kVmFs
dWUsIGdyYWRpZW50LCBzdGF0ZS53b3JrVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5J
TUFUSU9OTE9PUE1PREVfUkVMQVRJVkU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGFydFZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nZXRLZXlWYWx1ZShrZXlzW2tleXMubGVuZ3Ro
IC0gMV0udmFsdWUpOworICAgIH07CisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgZnVuY3Rp
b24gdG8gdXNlIHRvIGludGVycG9sYXRlIG1hdHJpY2VzCisgICAgICogQHBhcmFtIHN0YXJ0VmFs
dWUgZGVmaW5lcyB0aGUgc3RhcnQgbWF0cml4CisgICAgICogQHBhcmFtIGVuZFZhbHVlIGRlZmlu
ZXMgdGhlIGVuZCBtYXRyaXgKKyAgICAgKiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3Jh
ZGllbnQgYmV0d2VlbiBib3RoIG1hdHJpY2VzCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVz
IGFuIG9wdGlvbmFsIHRhcmdldCBtYXRyaXggd2hlcmUgdG8gc3RvcmUgdGhlIGludGVycG9sYXRp
b24KKyAgICAgKiBAcmV0dXJucyB0aGUgaW50ZXJwb2xhdGVkIG1hdHJpeAorICAgICAqLworICAg
IEFuaW1hdGlvbi5wcm90b3R5cGUubWF0cml4SW50ZXJwb2xhdGVGdW5jdGlvbiA9IGZ1bmN0aW9u
IChzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQsIHJlc3VsdCkgeworICAgICAgICBpZiAo
QW5pbWF0aW9uLkFsbG93TWF0cml4RGVjb21wb3NlRm9ySW50ZXJwb2xhdGlvbikgeworICAgICAg
ICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5EZWNvbXBvc2VMZXJwVG9SZWYo
c3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50LCByZXN1bHQpOworICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLkRlY29t
cG9zZUxlcnAoc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWF0cml4Il0uTGVycFRvUmVmKHN0YXJ0VmFsdWUsIGVu
ZFZhbHVlLCBncmFkaWVudCwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5MZXJwKHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBncmFk
aWVudCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNYWtlcyBhIGNvcHkgb2YgdGhlIGFuaW1h
dGlvbgorICAgICAqIEByZXR1cm5zIENsb25lZCBhbmltYXRpb24KKyAgICAgKi8KKyAgICBBbmlt
YXRpb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgY2xvbmUg
PSBuZXcgQW5pbWF0aW9uKHRoaXMubmFtZSwgdGhpcy50YXJnZXRQcm9wZXJ0eVBhdGguam9pbigi
LiIpLCB0aGlzLmZyYW1lUGVyU2Vjb25kLCB0aGlzLmRhdGFUeXBlLCB0aGlzLmxvb3BNb2RlKTsK
KyAgICAgICAgY2xvbmUuZW5hYmxlQmxlbmRpbmcgPSB0aGlzLmVuYWJsZUJsZW5kaW5nOworICAg
ICAgICBjbG9uZS5ibGVuZGluZ1NwZWVkID0gdGhpcy5ibGVuZGluZ1NwZWVkOworICAgICAgICBp
ZiAodGhpcy5fa2V5cykgeworICAgICAgICAgICAgY2xvbmUuc2V0S2V5cyh0aGlzLl9rZXlzKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmFuZ2VzKSB7CisgICAgICAgICAgICBjbG9u
ZS5fcmFuZ2VzID0ge307CisgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX3Jhbmdl
cykgeworICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuX3Jhbmdlc1tuYW1lXTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXJhbmdlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjbG9uZS5fcmFuZ2VzW25hbWVd
ID0gcmFuZ2UuY2xvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gY2xvbmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBrZXkgZnJhbWVzIG9m
IHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gdmFsdWVzIFRoZSBhbmltYXRpb24ga2V5IGZy
YW1lcyB0byBzZXQKKyAgICAgKi8KKyAgICBBbmltYXRpb24ucHJvdG90eXBlLnNldEtleXMgPSBm
dW5jdGlvbiAodmFsdWVzKSB7CisgICAgICAgIHRoaXMuX2tleXMgPSB2YWx1ZXMuc2xpY2UoMCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBhbmltYXRpb24gdG8gYW4g
b2JqZWN0CisgICAgICogQHJldHVybnMgU2VyaWFsaXplZCBvYmplY3QKKyAgICAgKi8KKyAgICBB
bmltYXRpb24ucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5u
YW1lID0gdGhpcy5uYW1lOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnByb3BlcnR5ID0g
dGhpcy50YXJnZXRQcm9wZXJ0eTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5mcmFtZVBl
clNlY29uZCA9IHRoaXMuZnJhbWVQZXJTZWNvbmQ7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QuZGF0YVR5cGUgPSB0aGlzLmRhdGFUeXBlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
Lmxvb3BCZWhhdmlvciA9IHRoaXMubG9vcE1vZGU7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QuZW5hYmxlQmxlbmRpbmcgPSB0aGlzLmVuYWJsZUJsZW5kaW5nOworICAgICAgICBzZXJpYWxp
emF0aW9uT2JqZWN0LmJsZW5kaW5nU3BlZWQgPSB0aGlzLmJsZW5kaW5nU3BlZWQ7CisgICAgICAg
IHZhciBkYXRhVHlwZSA9IHRoaXMuZGF0YVR5cGU7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3Qua2V5cyA9IFtdOworICAgICAgICB2YXIga2V5cyA9IHRoaXMuZ2V0S2V5cygpOworICAgICAg
ICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwga2V5cy5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgIHZhciBhbmltYXRpb25LZXkgPSBrZXlzW2luZGV4XTsKKyAgICAgICAgICAgIHZh
ciBrZXkgPSB7fTsKKyAgICAgICAgICAgIGtleS5mcmFtZSA9IGFuaW1hdGlvbktleS5mcmFtZTsK
KyAgICAgICAgICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFu
aW1hdGlvbi5BTklNQVRJT05UWVBFX0ZMT0FUOgorICAgICAgICAgICAgICAgICAgICBrZXkudmFs
dWVzID0gW2FuaW1hdGlvbktleS52YWx1ZV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgQW5pbWF0aW9uLkFOSU1BVElPTlRZUEVfUVVBVEVSTklPTjoK
KyAgICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbi5BTklNQVRJT05UWVBFX01BVFJJWDoKKyAg
ICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbi5BTklNQVRJT05UWVBFX1ZFQ1RPUjM6CisgICAg
ICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OVFlQRV9DT0xPUjM6CisgICAgICAg
ICAgICAgICAgICAgIGtleS52YWx1ZXMgPSBhbmltYXRpb25LZXkudmFsdWUuYXNBcnJheSgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3Qua2V5cy5wdXNoKGtleSk7CisgICAgICAgIH0KKyAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5yYW5nZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0
aGlzLl9yYW5nZXMpIHsKKyAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9yYW5nZXNbbmFt
ZV07CisgICAgICAgICAgICBpZiAoIXNvdXJjZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJhbmdlID0ge307CisgICAgICAgICAg
ICByYW5nZS5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHJhbmdlLmZyb20gPSBzb3VyY2UuZnJv
bTsKKyAgICAgICAgICAgIHJhbmdlLnRvID0gc291cmNlLnRvOworICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5yYW5nZXMucHVzaChyYW5nZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQW5pbWF0aW9uLCAiQU5JTUFUSU9OVFlQRV9GTE9BVCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldCB0aGUgZmxvYXQgYW5pbWF0aW9uIHR5cGUKKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGlvbi5fQU5JTUFU
SU9OVFlQRV9GTE9BVDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KEFuaW1hdGlvbiwgIkFOSU1BVElPTlRZUEVfVkVDVE9SMyIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldCB0aGUgVmVjdG9yMyBhbmltYXRpb24gdHlwZQorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0aW9uLl9B
TklNQVRJT05UWVBFX1ZFQ1RPUjM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShBbmltYXRpb24sICJBTklNQVRJT05UWVBFX1ZFQ1RPUjIiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXQgdGhlIFZlY3RvcjIgYW5pbWF0aW9uIHR5cGUKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1h
dGlvbi5fQU5JTUFUSU9OVFlQRV9WRUNUT1IyOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQW5pbWF0aW9uLCAiQU5JTUFUSU9OVFlQRV9TSVpFIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSBTaXplIGFuaW1hdGlvbiB0eXBlCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBBbmlt
YXRpb24uX0FOSU1BVElPTlRZUEVfU0laRTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbiwgIkFOSU1BVElPTlRZUEVfUVVBVEVSTklPTiIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCB0aGUgUXVhdGVybmlvbiBhbmltYXRpb24gdHlw
ZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gQW5pbWF0aW9uLl9BTklNQVRJT05UWVBFX1FVQVRFUk5JT047CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBbmltYXRpb24sICJBTklNQVRJT05UWVBF
X01BVFJJWCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCB0aGUgTWF0cml4IGFuaW1h
dGlvbiB0eXBlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiBBbmltYXRpb24uX0FOSU1BVElPTlRZUEVfTUFUUklYOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQW5pbWF0aW9uLCAiQU5JTUFUSU9O
VFlQRV9DT0xPUjMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgdGhlIENvbG9yMyBh
bmltYXRpb24gdHlwZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gQW5pbWF0aW9uLl9BTklNQVRJT05UWVBFX0NPTE9SMzsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbiwgIkFOSU1B
VElPTkxPT1BNT0RFX1JFTEFUSVZFIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRo
ZSBSZWxhdGl2ZSBMb29wIE1vZGUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGlvbi5fQU5JTUFUSU9OTE9PUE1PREVfUkVM
QVRJVkU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBbmlt
YXRpb24sICJBTklNQVRJT05MT09QTU9ERV9DWUNMRSIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldCB0aGUgQ3ljbGUgTG9vcCBNb2RlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRpb24uX0FOSU1BVElPTkxPT1BN
T0RFX0NZQ0xFOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
QW5pbWF0aW9uLCAiQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXQgdGhlIENvbnN0YW50IExvb3AgTW9kZQorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0aW9uLl9BTklN
QVRJT05MT09QTU9ERV9DT05TVEFOVDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBBbmltYXRpb24uX1VuaXZlcnNhbExlcnAgPSBmdW5jdGlvbiAobGVmdCwgcmln
aHQsIGFtb3VudCkgeworICAgICAgICB2YXIgY29uc3RydWN0b3IgPSBsZWZ0LmNvbnN0cnVjdG9y
OworICAgICAgICBpZiAoY29uc3RydWN0b3IuTGVycCkgeyAvLyBMZXJwIHN1cHBvcnRlZAorICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLkxlcnAobGVmdCwgcmlnaHQsIGFtb3VudCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3RydWN0b3IuU2xlcnApIHsgLy8gU2xlcnAg
c3VwcG9ydGVkCisgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3IuU2xlcnAobGVmdCwgcmln
aHQsIGFtb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobGVmdC50b0ZpeGVkKSB7
IC8vIE51bWJlcgorICAgICAgICAgICAgcmV0dXJuIGxlZnQgKiAoMS4wIC0gYW1vdW50KSArIGFt
b3VudCAqIHJpZ2h0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAvLyBCbGVuZGluZyBub3Qg
c3VwcG9ydGVkCisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFBhcnNlcyBhbiBhbmltYXRpb24gb2JqZWN0IGFuZCBjcmVhdGVzIGFu
IGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSBwYXJzZWRBbmltYXRpb24gUGFyc2VkIGFuaW1hdGlv
biBvYmplY3QKKyAgICAgKiBAcmV0dXJucyBBbmltYXRpb24gb2JqZWN0CisgICAgICovCisgICAg
QW5pbWF0aW9uLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZEFuaW1hdGlvbikgeworICAgICAgICB2
YXIgYW5pbWF0aW9uID0gbmV3IEFuaW1hdGlvbihwYXJzZWRBbmltYXRpb24ubmFtZSwgcGFyc2Vk
QW5pbWF0aW9uLnByb3BlcnR5LCBwYXJzZWRBbmltYXRpb24uZnJhbWVQZXJTZWNvbmQsIHBhcnNl
ZEFuaW1hdGlvbi5kYXRhVHlwZSwgcGFyc2VkQW5pbWF0aW9uLmxvb3BCZWhhdmlvcik7CisgICAg
ICAgIHZhciBkYXRhVHlwZSA9IHBhcnNlZEFuaW1hdGlvbi5kYXRhVHlwZTsKKyAgICAgICAgdmFy
IGtleXMgPSBbXTsKKyAgICAgICAgdmFyIGRhdGE7CisgICAgICAgIHZhciBpbmRleDsKKyAgICAg
ICAgaWYgKHBhcnNlZEFuaW1hdGlvbi5lbmFibGVCbGVuZGluZykgeworICAgICAgICAgICAgYW5p
bWF0aW9uLmVuYWJsZUJsZW5kaW5nID0gcGFyc2VkQW5pbWF0aW9uLmVuYWJsZUJsZW5kaW5nOwor
ICAgICAgICB9CisgICAgICAgIGlmIChwYXJzZWRBbmltYXRpb24uYmxlbmRpbmdTcGVlZCkgewor
ICAgICAgICAgICAgYW5pbWF0aW9uLmJsZW5kaW5nU3BlZWQgPSBwYXJzZWRBbmltYXRpb24uYmxl
bmRpbmdTcGVlZDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBw
YXJzZWRBbmltYXRpb24ua2V5cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBr
ZXkgPSBwYXJzZWRBbmltYXRpb24ua2V5c1tpbmRleF07CisgICAgICAgICAgICB2YXIgaW5UYW5n
ZW50OworICAgICAgICAgICAgdmFyIG91dFRhbmdlbnQ7CisgICAgICAgICAgICBzd2l0Y2ggKGRh
dGFUeXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OVFlQRV9G
TE9BVDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGtleS52YWx1ZXNbMF07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChrZXkudmFsdWVzLmxlbmd0aCA+PSAxKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpblRhbmdlbnQgPSBrZXkudmFsdWVzWzFdOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChrZXkudmFsdWVzLmxlbmd0aCA+PSAyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRUYW5nZW50ID0ga2V5LnZhbHVlc1syXTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIEFuaW1hdGlvbi5BTklNQVRJT05UWVBFX1FVQVRFUk5JT046CisgICAgICAgICAg
ICAgICAgICAgIGRhdGEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siUXVhdGVybmlvbiJdLkZyb21BcnJheShrZXkudmFsdWVzKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGtleS52YWx1ZXMubGVuZ3RoID49IDgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBfaW5UYW5nZW50ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlF1YXRlcm5pb24iXS5Gcm9tQXJyYXkoa2V5LnZhbHVlcy5zbGljZSg0
LCA4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9pblRhbmdlbnQuZXF1YWxzKF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJRdWF0ZXJuaW9u
Il0uWmVybygpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluVGFuZ2VudCA9IF9p
blRhbmdlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGtleS52YWx1ZXMubGVuZ3RoID49IDEyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgX291dFRhbmdlbnQgPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLkZyb21BcnJheShr
ZXkudmFsdWVzLnNsaWNlKDgsIDEyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9v
dXRUYW5nZW50LmVxdWFscyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siUXVhdGVybmlvbiJdLlplcm8oKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRUYW5nZW50ID0gX291dFRhbmdlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OVFlQRV9NQVRSSVg6CisgICAgICAg
ICAgICAgICAgICAgIGRhdGEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siTWF0cml4Il0uRnJvbUFycmF5KGtleS52YWx1ZXMpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbi5BTklNQVRJT05U
WVBFX0NPTE9SMzoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9NYXRoc19tYXRoX2NvbG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9yMyJdLkZyb21BcnJheShrZXkudmFs
dWVzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBB
bmltYXRpb24uQU5JTUFUSU9OVFlQRV9WRUNUT1IzOgorICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkZyb21BcnJheShrZXkudmFsdWVzKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIg
a2V5RGF0YSA9IHt9OworICAgICAgICAgICAga2V5RGF0YS5mcmFtZSA9IGtleS5mcmFtZTsKKyAg
ICAgICAgICAgIGtleURhdGEudmFsdWUgPSBkYXRhOworICAgICAgICAgICAgaWYgKGluVGFuZ2Vu
dCAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICBrZXlEYXRhLmluVGFuZ2VudCA9IGlu
VGFuZ2VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvdXRUYW5nZW50ICE9IHVu
ZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIGtleURhdGEub3V0VGFuZ2VudCA9IG91dFRhbmdl
bnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrZXlzLnB1c2goa2V5RGF0YSk7CisgICAg
ICAgIH0KKyAgICAgICAgYW5pbWF0aW9uLnNldEtleXMoa2V5cyk7CisgICAgICAgIGlmIChwYXJz
ZWRBbmltYXRpb24ucmFuZ2VzKSB7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXgg
PCBwYXJzZWRBbmltYXRpb24ucmFuZ2VzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAg
ICAgIGRhdGEgPSBwYXJzZWRBbmltYXRpb24ucmFuZ2VzW2luZGV4XTsKKyAgICAgICAgICAgICAg
ICBhbmltYXRpb24uY3JlYXRlUmFuZ2UoZGF0YS5uYW1lLCBkYXRhLmZyb20sIGRhdGEudG8pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBhbmltYXRpb247CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBcHBlbmRzIHRoZSBzZXJpYWxpemVkIGFuaW1hdGlvbnMgZnJv
bSB0aGUgc291cmNlIGFuaW1hdGlvbnMKKyAgICAgKiBAcGFyYW0gc291cmNlIFNvdXJjZSBjb250
YWluaW5nIHRoZSBhbmltYXRpb25zCisgICAgICogQHBhcmFtIGRlc3RpbmF0aW9uIFRhcmdldCB0
byBzdG9yZSB0aGUgYW5pbWF0aW9ucworICAgICAqLworICAgIEFuaW1hdGlvbi5BcHBlbmRTZXJp
YWxpemVkQW5pbWF0aW9ucyA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3RpbmF0aW9uKSB7CisgICAg
ICAgIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2VyaWFs
aXphdGlvbkhlbHBlciJdLkFwcGVuZFNlcmlhbGl6ZWRBbmltYXRpb25zKHNvdXJjZSwgZGVzdGlu
YXRpb24pOworICAgIH07CisgICAgLyoqCisgICAgICogVXNlIG1hdHJpeCBpbnRlcnBvbGF0aW9u
IGluc3RlYWQgb2YgdXNpbmcgZGlyZWN0IGtleSB2YWx1ZSB3aGVuIGFuaW1hdGluZyBtYXRyaWNl
cworICAgICAqLworICAgIEFuaW1hdGlvbi5BbGxvd01hdHJpY2VzSW50ZXJwb2xhdGlvbiA9IGZh
bHNlOworICAgIC8qKgorICAgICAqIFdoZW4gbWF0cml4IGludGVycG9sYXRpb24gaXMgZW5hYmxl
ZCwgdGhpcyBib29sZWFuIGZvcmNlcyB0aGUgc3lzdGVtIHRvIHVzZSBNYXRyaXguRGVjb21wb3Nl
TGVycCBpbnN0ZWFkIG9mIE1hdHJpeC5MZXJwLiBJbnRlcnBvbGF0aW9uIGlzIG1vcmUgcHJlY2lz
ZSBidXQgc2xvd2VyCisgICAgICovCisgICAgQW5pbWF0aW9uLkFsbG93TWF0cml4RGVjb21wb3Nl
Rm9ySW50ZXJwb2xhdGlvbiA9IHRydWU7CisgICAgLy8gU3RhdGljcworICAgIC8qKgorICAgICAq
IEZsb2F0IGFuaW1hdGlvbiB0eXBlCisgICAgICovCisgICAgQW5pbWF0aW9uLl9BTklNQVRJT05U
WVBFX0ZMT0FUID0gMDsKKyAgICAvKioKKyAgICAgKiBWZWN0b3IzIGFuaW1hdGlvbiB0eXBlCisg
ICAgICovCisgICAgQW5pbWF0aW9uLl9BTklNQVRJT05UWVBFX1ZFQ1RPUjMgPSAxOworICAgIC8q
KgorICAgICAqIFF1YXRlcm5pb24gYW5pbWF0aW9uIHR5cGUKKyAgICAgKi8KKyAgICBBbmltYXRp
b24uX0FOSU1BVElPTlRZUEVfUVVBVEVSTklPTiA9IDI7CisgICAgLyoqCisgICAgICogTWF0cml4
IGFuaW1hdGlvbiB0eXBlCisgICAgICovCisgICAgQW5pbWF0aW9uLl9BTklNQVRJT05UWVBFX01B
VFJJWCA9IDM7CisgICAgLyoqCisgICAgICogQ29sb3IzIGFuaW1hdGlvbiB0eXBlCisgICAgICov
CisgICAgQW5pbWF0aW9uLl9BTklNQVRJT05UWVBFX0NPTE9SMyA9IDQ7CisgICAgLyoqCisgICAg
ICogVmVjdG9yMiBhbmltYXRpb24gdHlwZQorICAgICAqLworICAgIEFuaW1hdGlvbi5fQU5JTUFU
SU9OVFlQRV9WRUNUT1IyID0gNTsKKyAgICAvKioKKyAgICAgKiBTaXplIGFuaW1hdGlvbiB0eXBl
CisgICAgICovCisgICAgQW5pbWF0aW9uLl9BTklNQVRJT05UWVBFX1NJWkUgPSA2OworICAgIC8q
KgorICAgICAqIFJlbGF0aXZlIExvb3AgTW9kZQorICAgICAqLworICAgIEFuaW1hdGlvbi5fQU5J
TUFUSU9OTE9PUE1PREVfUkVMQVRJVkUgPSAwOworICAgIC8qKgorICAgICAqIEN5Y2xlIExvb3Ag
TW9kZQorICAgICAqLworICAgIEFuaW1hdGlvbi5fQU5JTUFUSU9OTE9PUE1PREVfQ1lDTEUgPSAx
OworICAgIC8qKgorICAgICAqIENvbnN0YW50IExvb3AgTW9kZQorICAgICAqLworICAgIEFuaW1h
dGlvbi5fQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQgPSAyOworICAgIHJldHVybiBBbmltYXRp
b247Cit9KCkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5BbmltYXRpb24iXSA9IEFu
aW1hdGlvbjsKK19ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk5vZGUiXS5fQW5p
bWF0aW9uUmFuZ2VGYWN0b3J5ID0gZnVuY3Rpb24gKG5hbWUsIGZyb20sIHRvKSB7IHJldHVybiBu
ZXcgX2FuaW1hdGlvblJhbmdlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFuaW1hdGlv
blJhbmdlIl0obmFtZSwgZnJvbSwgdG8pOyB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9B
bmltYXRpb25zL2FuaW1hdGlvbkV2ZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9BbmltYXRpb25zL2FuaW1hdGlvbkV2ZW50LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IEFuaW1hdGlvbkV2ZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkFuaW1hdGlvbkV2ZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBBbmltYXRp
b25FdmVudDsgfSk7CisvKioKKyAqIENvbXBvc2VkIG9mIGEgZnJhbWUsIGFuZCBhbiBhY3Rpb24g
ZnVuY3Rpb24KKyAqLwordmFyIEFuaW1hdGlvbkV2ZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgeworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBhbmltYXRpb24gZXZlbnQK
KyAgICAgKiBAcGFyYW0gZnJhbWUgVGhlIGZyYW1lIGZvciB3aGljaCB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkCisgICAgICogQHBhcmFtIGFjdGlvbiBUaGUgZXZlbnQgdG8gcGVyZm9ybSB3aGVuIHRy
aWdnZXJlZAorICAgICAqIEBwYXJhbSBvbmx5T25jZSBTcGVjaWZpZXMgaWYgdGhlIGV2ZW50IHNo
b3VsZCBiZSB0cmlnZ2VyZWQgb25seSBvbmNlCisgICAgICovCisgICAgZnVuY3Rpb24gQW5pbWF0
aW9uRXZlbnQoCisgICAgLyoqIFRoZSBmcmFtZSBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZCAqKi8KKyAgICBmcmFtZSwgCisgICAgLyoqIFRoZSBldmVudCB0byBwZXJmb3JtIHdoZW4g
dHJpZ2dlcmVkICoqLworICAgIGFjdGlvbiwgCisgICAgLyoqIFNwZWNpZmllcyBpZiB0aGUgZXZl
bnQgc2hvdWxkIGJlIHRyaWdnZXJlZCBvbmx5IG9uY2UqKi8KKyAgICBvbmx5T25jZSkgeworICAg
ICAgICB0aGlzLmZyYW1lID0gZnJhbWU7CisgICAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uOwor
ICAgICAgICB0aGlzLm9ubHlPbmNlID0gb25seU9uY2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBTcGVjaWZpZXMgaWYgdGhlIGFuaW1hdGlvbiBldmVudCBpcyBkb25lCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLmlzRG9uZSA9IGZhbHNlOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIEFuaW1hdGlvbkV2ZW50LnByb3RvdHlwZS5fY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiBuZXcgQW5pbWF0aW9uRXZlbnQodGhpcy5mcmFtZSwgdGhpcy5hY3Rpb24sIHRo
aXMub25seU9uY2UpOworICAgIH07CisgICAgcmV0dXJuIEFuaW1hdGlvbkV2ZW50OworfSgpKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9BbmltYXRpb25zL2FuaW1hdGlvbkdyb3VwLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9BbmltYXRpb25zL2FuaW1hdGlvbkdyb3VwLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFRhcmdldGVkQW5p
bWF0aW9uLCBBbmltYXRpb25Hcm91cCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJUYXJnZXRlZEFuaW1hdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVGFyZ2V0ZWRBbmlt
YXRpb247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5pbWF0aW9uR3JvdXAiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIEFuaW1hdGlvbkdyb3VwOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
YW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2FuaW1hdGlvbiAqLyAiLi9BbmltYXRpb25zL2FuaW1hdGlvbi50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAq
LyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5n
aW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2lu
ZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FuaW1hdGFibGVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYW5pbWF0
YWJsZSAqLyAiLi9BbmltYXRpb25zL2FuaW1hdGFibGUudHMiKTsKKworCisKKworLyoqCisgKiBU
aGlzIGNsYXNzIGRlZmluZXMgdGhlIGRpcmVjdCBhc3NvY2lhdGlvbiBiZXR3ZWVuIGFuIGFuaW1h
dGlvbiBhbmQgYSB0YXJnZXQKKyAqLwordmFyIFRhcmdldGVkQW5pbWF0aW9uID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFRhcmdldGVkQW5pbWF0aW9uKCkgewor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgdGhlIG9iamVjdAorICAgICAqIEByZXR1
cm5zIHRoZSBKU09OIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgZW50aXR5CisgICAg
ICovCisgICAgVGFyZ2V0ZWRBbmltYXRpb24ucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5hbmltYXRpb24gPSB0aGlzLmFuaW1hdGlvbi5zZXJpYWxpemUoKTsK
KyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50YXJnZXRJZCA9IHRoaXMudGFyZ2V0LmlkOwor
ICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIHJldHVybiBU
YXJnZXRlZEFuaW1hdGlvbjsKK30oKSk7CisKKy8qKgorICogVXNlIHRoaXMgY2xhc3MgdG8gY3Jl
YXRlIGNvb3JkaW5hdGVkIGFuaW1hdGlvbnMgb24gbXVsdGlwbGUgdGFyZ2V0cworICovCit2YXIg
QW5pbWF0aW9uR3JvdXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisg
ICAgICogSW5zdGFudGlhdGVzIGEgbmV3IEFuaW1hdGlvbiBHcm91cC4KKyAgICAgKiBUaGlzIGhl
bHBzIG1hbmFnaW5nIHNldmVyYWwgYW5pbWF0aW9ucyBhdCBvbmNlLgorICAgICAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ncm91cAorICAgICAqIEBwYXJhbSBuYW1lIERl
ZmluZXMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMg
dGhlIHNjZW5lIHRoZSBncm91cCBiZWxvbmdzIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gQW5p
bWF0aW9uR3JvdXAoCisgICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gZ3JvdXAgKi8K
KyAgICBuYW1lLCBzY2VuZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2Vu
ZSA9IG51bGw7IH0KKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5fdGFy
Z2V0ZWRBbmltYXRpb25zID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX2FuaW1hdGFibGVz
ID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX2Zyb20gPSBOdW1iZXIuTUFYX1ZBTFVFOwor
ICAgICAgICB0aGlzLl90byA9IC1OdW1iZXIuTUFYX1ZBTFVFOworICAgICAgICB0aGlzLl9zcGVl
ZFJhdGlvID0gMTsKKyAgICAgICAgdGhpcy5fbG9vcEFuaW1hdGlvbiA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogVGhpcyBvYnNlcnZhYmxlIHdpbGwgbm90aWZ5IHdoZW4gb25lIGFu
aW1hdGlvbiBoYXZlIGVuZGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uQW5pbWF0aW9u
RW5kT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2
ZXIgcmFpc2VkIHdoZW4gb25lIGFuaW1hdGlvbiBsb29wcworICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5vbkFuaW1hdGlvbkxvb3BPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaGlzIG9ic2VydmFibGUgd2lsbCBub3RpZnkgd2hlbiBhbGwgYW5pbWF0aW9u
cyBoYXZlIGVuZGVkLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkFuaW1hdGlvbkdyb3Vw
RW5kT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBv
YnNlcnZhYmxlIHdpbGwgbm90aWZ5IHdoZW4gYWxsIGFuaW1hdGlvbnMgaGF2ZSBwYXVzZWQuCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLm9uQW5pbWF0aW9uR3JvdXBQYXVzZU9ic2VydmFibGUg
PSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNl
cnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgb2JzZXJ2YWJsZSB3aWxs
IG5vdGlmeSB3aGVuIGFsbCBhbmltYXRpb25zIGFyZSBwbGF5aW5nLgorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5vbkFuaW1hdGlvbkdyb3VwUGxheU9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAg
ICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8fCBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7Cisg
ICAgICAgIHRoaXMudW5pcXVlSWQgPSB0aGlzLl9zY2VuZS5nZXRVbmlxdWVJZCgpOworICAgICAg
ICB0aGlzLl9zY2VuZS5hbmltYXRpb25Hcm91cHMucHVzaCh0aGlzKTsKKyAgICB9CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZSwgImZyb20iLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBmaXJzdCBmcmFtZQorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJv
bTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlv
bkdyb3VwLnByb3RvdHlwZSwgInRvIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgbGFzdCBmcmFtZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fdG87CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShBbmltYXRpb25Hcm91cC5wcm90b3R5cGUsICJpc1N0YXJ0ZWQiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgaWYgdGhlIGFuaW1hdGlvbnMgYXJlIHN0
YXJ0ZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2lzU3RhcnRlZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZSwgImlzUGxheWluZyIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgdGhl
IGN1cnJlbnQgZ3JvdXAgaXMgcGxheWluZworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTdGFydGVkICYmICF0aGlzLl9p
c1BhdXNlZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFu
aW1hdGlvbkdyb3VwLnByb3RvdHlwZSwgInNwZWVkUmF0aW8iLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHNwZWVkIHJhdGlvIHRvIHVzZSBmb3IgYWxsIGFuaW1h
dGlvbnMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3NwZWVkUmF0aW87CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHNwZWVkIHJhdGlvIHRvIHVzZSBmb3IgYWxsIGFuaW1h
dGlvbnMKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5fc3BlZWRSYXRpbyA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zcGVlZFJhdGlvID0g
dmFsdWU7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fYW5p
bWF0YWJsZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGFuaW1hdGFi
bGUgPSB0aGlzLl9hbmltYXRhYmxlc1tpbmRleF07CisgICAgICAgICAgICAgICAgYW5pbWF0YWJs
ZS5zcGVlZFJhdGlvID0gdGhpcy5fc3BlZWRSYXRpbzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbkdyb3VwLnByb3Rv
dHlwZSwgImxvb3BBbmltYXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9y
IHNldHMgaWYgYWxsIGFuaW1hdGlvbnMgc2hvdWxkIGxvb3Agb3Igbm90CisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29w
QW5pbWF0aW9uOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3BBbmltYXRpb24gPT09IHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fbG9vcEFu
aW1hdGlvbiA9IHZhbHVlOworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IHRoaXMuX2FuaW1hdGFibGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZh
ciBhbmltYXRhYmxlID0gdGhpcy5fYW5pbWF0YWJsZXNbaW5kZXhdOworICAgICAgICAgICAgICAg
IGFuaW1hdGFibGUubG9vcEFuaW1hdGlvbiA9IHRoaXMuX2xvb3BBbmltYXRpb247CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBbmlt
YXRpb25Hcm91cC5wcm90b3R5cGUsICJ0YXJnZXRlZEFuaW1hdGlvbnMiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIHRoZSB0YXJnZXRlZCBhbmltYXRpb25zIGZvciB0aGlzIGFuaW1h
dGlvbiBncm91cAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0ZWRBbmltYXRpb25zOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQW5pbWF0aW9uR3JvdXAucHJvdG90eXBlLCAi
YW5pbWF0YWJsZXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiByZXR1cm5pbmcgdGhlIGxp
c3Qgb2YgYW5pbWF0YWJsZXMgY29udHJvbGxlZCBieSB0aGlzIGFuaW1hdGlvbiBncm91cC4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2FuaW1hdGFibGVzOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBB
ZGQgYW4gYW5pbWF0aW9uICh3aXRoIGl0cyB0YXJnZXQpIGluIHRoZSBncm91cAorICAgICAqIEBw
YXJhbSBhbmltYXRpb24gZGVmaW5lcyB0aGUgYW5pbWF0aW9uIHdlIHdhbnQgdG8gYWRkCisgICAg
ICogQHBhcmFtIHRhcmdldCBkZWZpbmVzIHRoZSB0YXJnZXQgb2YgdGhlIGFuaW1hdGlvbgorICAg
ICAqIEByZXR1cm5zIHRoZSBUYXJnZXRlZEFuaW1hdGlvbiBvYmplY3QKKyAgICAgKi8KKyAgICBB
bmltYXRpb25Hcm91cC5wcm90b3R5cGUuYWRkVGFyZ2V0ZWRBbmltYXRpb24gPSBmdW5jdGlvbiAo
YW5pbWF0aW9uLCB0YXJnZXQpIHsKKyAgICAgICAgdmFyIHRhcmdldGVkQW5pbWF0aW9uID0gbmV3
IFRhcmdldGVkQW5pbWF0aW9uKCk7CisgICAgICAgIHRhcmdldGVkQW5pbWF0aW9uLmFuaW1hdGlv
biA9IGFuaW1hdGlvbjsKKyAgICAgICAgdGFyZ2V0ZWRBbmltYXRpb24udGFyZ2V0ID0gdGFyZ2V0
OworICAgICAgICB2YXIga2V5cyA9IGFuaW1hdGlvbi5nZXRLZXlzKCk7CisgICAgICAgIGlmICh0
aGlzLl9mcm9tID4ga2V5c1swXS5mcmFtZSkgeworICAgICAgICAgICAgdGhpcy5fZnJvbSA9IGtl
eXNbMF0uZnJhbWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3RvIDwga2V5c1trZXlz
Lmxlbmd0aCAtIDFdLmZyYW1lKSB7CisgICAgICAgICAgICB0aGlzLl90byA9IGtleXNba2V5cy5s
ZW5ndGggLSAxXS5mcmFtZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl90YXJnZXRlZEFuaW1h
dGlvbnMucHVzaCh0YXJnZXRlZEFuaW1hdGlvbik7CisgICAgICAgIHJldHVybiB0YXJnZXRlZEFu
aW1hdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3Jt
YWxpemUgZXZlcnkgYW5pbWF0aW9uIGluIHRoZSBncm91cCB0byBtYWtlIHN1cmUgdGhleSBhbGwg
Z28gZnJvbSBiZWdpbkZyYW1lIHRvIGVuZEZyYW1lCisgICAgICogSXQgY2FuIGFkZCBjb25zdGFu
dCBrZXlzIGF0IGJlZ2luIG9yIGVuZAorICAgICAqIEBwYXJhbSBiZWdpbkZyYW1lIGRlZmluZXMg
dGhlIG5ldyBiZWdpbiBmcmFtZSBmb3IgYWxsIGFuaW1hdGlvbnMgb3IgdGhlIHNtYWxsZXN0IGJl
Z2luIGZyYW1lIG9mIGFsbCBhbmltYXRpb25zIGlmIG51bGwgKGRlZmF1bHRzIHRvIG51bGwpCisg
ICAgICogQHBhcmFtIGVuZEZyYW1lIGRlZmluZXMgdGhlIG5ldyBlbmQgZnJhbWUgZm9yIGFsbCBh
bmltYXRpb25zIG9yIHRoZSBsYXJnZXN0IGVuZCBmcmFtZSBvZiBhbGwgYW5pbWF0aW9ucyBpZiBu
dWxsIChkZWZhdWx0cyB0byBudWxsKQorICAgICAqIEByZXR1cm5zIHRoZSBhbmltYXRpb24gZ3Jv
dXAKKyAgICAgKi8KKyAgICBBbmltYXRpb25Hcm91cC5wcm90b3R5cGUubm9ybWFsaXplID0gZnVu
Y3Rpb24gKGJlZ2luRnJhbWUsIGVuZEZyYW1lKSB7CisgICAgICAgIGlmIChiZWdpbkZyYW1lID09
PSB2b2lkIDApIHsgYmVnaW5GcmFtZSA9IG51bGw7IH0KKyAgICAgICAgaWYgKGVuZEZyYW1lID09
PSB2b2lkIDApIHsgZW5kRnJhbWUgPSBudWxsOyB9CisgICAgICAgIGlmIChiZWdpbkZyYW1lID09
IG51bGwpIHsKKyAgICAgICAgICAgIGJlZ2luRnJhbWUgPSB0aGlzLl9mcm9tOworICAgICAgICB9
CisgICAgICAgIGlmIChlbmRGcmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICBlbmRGcmFtZSA9
IHRoaXMuX3RvOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLl90YXJnZXRlZEFuaW1hdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAg
ICB2YXIgdGFyZ2V0ZWRBbmltYXRpb24gPSB0aGlzLl90YXJnZXRlZEFuaW1hdGlvbnNbaW5kZXhd
OworICAgICAgICAgICAgdmFyIGtleXMgPSB0YXJnZXRlZEFuaW1hdGlvbi5hbmltYXRpb24uZ2V0
S2V5cygpOworICAgICAgICAgICAgdmFyIHN0YXJ0S2V5ID0ga2V5c1swXTsKKyAgICAgICAgICAg
IHZhciBlbmRLZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICBpZiAoc3Rh
cnRLZXkuZnJhbWUgPiBiZWdpbkZyYW1lKSB7CisgICAgICAgICAgICAgICAgdmFyIG5ld0tleSA9
IHsKKyAgICAgICAgICAgICAgICAgICAgZnJhbWU6IGJlZ2luRnJhbWUsCisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlOiBzdGFydEtleS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgaW5UYW5n
ZW50OiBzdGFydEtleS5pblRhbmdlbnQsCisgICAgICAgICAgICAgICAgICAgIG91dFRhbmdlbnQ6
IHN0YXJ0S2V5Lm91dFRhbmdlbnQsCisgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb246
IHN0YXJ0S2V5LmludGVycG9sYXRpb24KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIGtleXMuc3BsaWNlKDAsIDAsIG5ld0tleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZW5kS2V5LmZyYW1lIDwgZW5kRnJhbWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgbmV3
S2V5ID0geworICAgICAgICAgICAgICAgICAgICBmcmFtZTogZW5kRnJhbWUsCisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlOiBlbmRLZXkudmFsdWUsCisgICAgICAgICAgICAgICAgICAgIGluVGFu
Z2VudDogZW5kS2V5Lm91dFRhbmdlbnQsCisgICAgICAgICAgICAgICAgICAgIG91dFRhbmdlbnQ6
IGVuZEtleS5vdXRUYW5nZW50LAorICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uOiBl
bmRLZXkuaW50ZXJwb2xhdGlvbgorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
a2V5cy5wdXNoKG5ld0tleSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZnJvbSA9IGJlZ2luRnJhbWU7CisgICAgICAgIHRoaXMuX3RvID0gZW5kRnJhbWU7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU3RhcnQgYWxsIGFuaW1h
dGlvbnMgb24gZ2l2ZW4gdGFyZ2V0cworICAgICAqIEBwYXJhbSBsb29wIGRlZmluZXMgaWYgYW5p
bWF0aW9ucyBtdXN0IGxvb3AKKyAgICAgKiBAcGFyYW0gc3BlZWRSYXRpbyBkZWZpbmVzIHRoZSBy
YXRpbyB0byBhcHBseSB0byBhbmltYXRpb24gc3BlZWQgKDEgYnkgZGVmYXVsdCkKKyAgICAgKiBA
cGFyYW0gZnJvbSBkZWZpbmVzIHRoZSBmcm9tIGtleSAob3B0aW9uYWwpCisgICAgICogQHBhcmFt
IHRvIGRlZmluZXMgdGhlIHRvIGtleSAob3B0aW9uYWwpCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgYW5pbWF0aW9uIGdyb3VwCisgICAgICovCisgICAgQW5pbWF0aW9uR3JvdXAucHJvdG90
eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKGxvb3AsIHNwZWVkUmF0aW8sIGZyb20sIHRvKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChsb29wID09PSB2b2lkIDApIHsgbG9v
cCA9IGZhbHNlOyB9CisgICAgICAgIGlmIChzcGVlZFJhdGlvID09PSB2b2lkIDApIHsgc3BlZWRS
YXRpbyA9IDE7IH0KKyAgICAgICAgaWYgKHRoaXMuX2lzU3RhcnRlZCB8fCB0aGlzLl90YXJnZXRl
ZEFuaW1hdGlvbnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9sb29wQW5pbWF0aW9uID0gbG9vcDsKKyAgICAgICAgdmFy
IF9sb29wXzEgPSBmdW5jdGlvbiAodGFyZ2V0ZWRBbmltYXRpb24pIHsKKyAgICAgICAgICAgIHZh
ciBhbmltYXRhYmxlID0gdGhpc18xLl9zY2VuZS5iZWdpbkRpcmVjdEFuaW1hdGlvbih0YXJnZXRl
ZEFuaW1hdGlvbi50YXJnZXQsIFt0YXJnZXRlZEFuaW1hdGlvbi5hbmltYXRpb25dLCBmcm9tICE9
PSB1bmRlZmluZWQgPyBmcm9tIDogdGhpc18xLl9mcm9tLCB0byAhPT0gdW5kZWZpbmVkID8gdG8g
OiB0aGlzXzEuX3RvLCBsb29wLCBzcGVlZFJhdGlvKTsKKyAgICAgICAgICAgIGFuaW1hdGFibGUu
b25BbmltYXRpb25FbmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMub25B
bmltYXRpb25FbmRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0YXJnZXRlZEFuaW1hdGlvbik7
CisgICAgICAgICAgICAgICAgX3RoaXMuX2NoZWNrQW5pbWF0aW9uR3JvdXBFbmRlZChhbmltYXRh
YmxlKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBhbmltYXRhYmxlLm9uQW5pbWF0aW9u
TG9vcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5vbkFuaW1hdGlvbkxv
b3BPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0YXJnZXRlZEFuaW1hdGlvbik7CisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgdGhpc18xLl9hbmltYXRhYmxlcy5wdXNoKGFuaW1hdGFibGUp
OworICAgICAgICB9OworICAgICAgICB2YXIgdGhpc18xID0gdGhpczsKKyAgICAgICAgZm9yICh2
YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3RhcmdldGVkQW5pbWF0aW9uczsgX2kgPCBfYS5sZW5ndGg7
IF9pKyspIHsKKyAgICAgICAgICAgIHZhciB0YXJnZXRlZEFuaW1hdGlvbiA9IF9hW19pXTsKKyAg
ICAgICAgICAgIF9sb29wXzEodGFyZ2V0ZWRBbmltYXRpb24pOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX3NwZWVkUmF0aW8gPSBzcGVlZFJhdGlvOworICAgICAgICBpZiAoZnJvbSAhPT0gdW5k
ZWZpbmVkICYmIHRvICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGlmIChmcm9tIDwgdG8g
JiYgdGhpcy5fc3BlZWRSYXRpbyA8IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHRv
OworICAgICAgICAgICAgICAgIHRvID0gZnJvbTsKKyAgICAgICAgICAgICAgICBmcm9tID0gdGVt
cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGZyb20gPiB0byAmJiB0aGlz
Ll9zcGVlZFJhdGlvID4gMCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3NwZWVkUmF0aW8gPSAt
c3BlZWRSYXRpbzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pc1N0
YXJ0ZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9pc1BhdXNlZCA9IGZhbHNlOworICAgICAgICB0
aGlzLm9uQW5pbWF0aW9uR3JvdXBQbGF5T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUGF1c2UgYWxs
IGFuaW1hdGlvbnMKKyAgICAgKiBAcmV0dXJucyB0aGUgYW5pbWF0aW9uIGdyb3VwCisgICAgICov
CisgICAgQW5pbWF0aW9uR3JvdXAucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAoIXRoaXMuX2lzU3RhcnRlZCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5faXNQYXVzZWQgPSB0cnVlOworICAgICAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fYW5pbWF0YWJsZXMubGVuZ3RoOyBpbmRleCsrKSB7
CisgICAgICAgICAgICB2YXIgYW5pbWF0YWJsZSA9IHRoaXMuX2FuaW1hdGFibGVzW2luZGV4XTsK
KyAgICAgICAgICAgIGFuaW1hdGFibGUucGF1c2UoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Lm9uQW5pbWF0aW9uR3JvdXBQYXVzZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBsYXkgYWxsIGFu
aW1hdGlvbnMgdG8gaW5pdGlhbCBzdGF0ZQorICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzdGFy
dCgpIHRoZSBhbmltYXRpb25zIGlmIHRoZXkgd2VyZSBub3Qgc3RhcnRlZCBvciB3aWxsIHJlc3Rh
cnQoKSB0aGVtIGlmIHRoZXkgd2VyZSBwYXVzZWQKKyAgICAgKiBAcGFyYW0gbG9vcCBkZWZpbmVz
IGlmIGFuaW1hdGlvbnMgbXVzdCBsb29wCisgICAgICogQHJldHVybnMgdGhlIGFuaW1hdGlvbiBn
cm91cAorICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rp
b24gKGxvb3ApIHsKKyAgICAgICAgLy8gb25seSBpZiBhbGwgYW5pbWF0YWJsZXMgYXJlIHJlYWR5
IGFuZCBleGlzdAorICAgICAgICBpZiAodGhpcy5pc1N0YXJ0ZWQgJiYgdGhpcy5fYW5pbWF0YWJs
ZXMubGVuZ3RoID09PSB0aGlzLl90YXJnZXRlZEFuaW1hdGlvbnMubGVuZ3RoKSB7CisgICAgICAg
ICAgICBpZiAobG9vcCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5sb29w
QW5pbWF0aW9uID0gbG9vcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMucmVzdGFy
dCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5zdG9wKCk7
CisgICAgICAgICAgICB0aGlzLnN0YXJ0KGxvb3AsIHRoaXMuX3NwZWVkUmF0aW8pOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogUmVzZXQgYWxsIGFuaW1hdGlvbnMgdG8gaW5pdGlh
bCBzdGF0ZQorICAgICAqIEByZXR1cm5zIHRoZSBhbmltYXRpb24gZ3JvdXAKKyAgICAgKi8KKyAg
ICBBbmltYXRpb25Hcm91cC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICghdGhpcy5faXNTdGFydGVkKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fYW5pbWF0YWJs
ZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgYW5pbWF0YWJsZSA9IHRoaXMu
X2FuaW1hdGFibGVzW2luZGV4XTsKKyAgICAgICAgICAgIGFuaW1hdGFibGUucmVzZXQoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
c3RhcnQgYW5pbWF0aW9ucyBmcm9tIGtleSAwCisgICAgICogQHJldHVybnMgdGhlIGFuaW1hdGlv
biBncm91cAorICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZS5yZXN0YXJ0ID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX2lzU3RhcnRlZCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBp
bmRleCA8IHRoaXMuX2FuaW1hdGFibGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAg
dmFyIGFuaW1hdGFibGUgPSB0aGlzLl9hbmltYXRhYmxlc1tpbmRleF07CisgICAgICAgICAgICBh
bmltYXRhYmxlLnJlc3RhcnQoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uQW5pbWF0aW9u
R3JvdXBQbGF5T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcCBhbGwgYW5pbWF0aW9ucworICAg
ICAqIEByZXR1cm5zIHRoZSBhbmltYXRpb24gZ3JvdXAKKyAgICAgKi8KKyAgICBBbmltYXRpb25H
cm91cC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9p
c1N0YXJ0ZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAg
IHZhciBsaXN0ID0gdGhpcy5fYW5pbWF0YWJsZXMuc2xpY2UoKTsKKyAgICAgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBs
aXN0W2luZGV4XS5zdG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5faXNTdGFydGVkID0g
ZmFsc2U7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
IGFuaW1hdGlvbiB3ZWlnaHQgZm9yIGFsbCBhbmltYXRhYmxlcworICAgICAqIEBwYXJhbSB3ZWln
aHQgZGVmaW5lcyB0aGUgd2VpZ2h0IHRvIHVzZQorICAgICAqIEByZXR1cm4gdGhlIGFuaW1hdGlv
bkdyb3VwCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9h
bmltYXRpb25zI2FuaW1hdGlvbi13ZWlnaHRzCisgICAgICovCisgICAgQW5pbWF0aW9uR3JvdXAu
cHJvdG90eXBlLnNldFdlaWdodEZvckFsbEFuaW1hdGFibGVzID0gZnVuY3Rpb24gKHdlaWdodCkg
eworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fYW5pbWF0YWJsZXMu
bGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgYW5pbWF0YWJsZSA9IHRoaXMuX2Fu
aW1hdGFibGVzW2luZGV4XTsKKyAgICAgICAgICAgIGFuaW1hdGFibGUud2VpZ2h0ID0gd2VpZ2h0
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAg
ICogU3luY2hyb25pemUgYW5kIG5vcm1hbGl6ZSBhbGwgYW5pbWF0YWJsZXMgd2l0aCBhIHNvdXJj
ZSBhbmltYXRhYmxlCisgICAgICogQHBhcmFtIHJvb3QgZGVmaW5lcyB0aGUgcm9vdCBhbmltYXRh
YmxlIHRvIHN5bmNocm9uaXplIHdpdGgKKyAgICAgKiBAcmV0dXJuIHRoZSBhbmltYXRpb25Hcm91
cAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0
aW9ucyNhbmltYXRpb24td2VpZ2h0cworICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLnByb3Rv
dHlwZS5zeW5jQWxsQW5pbWF0aW9uc1dpdGggPSBmdW5jdGlvbiAocm9vdCkgeworICAgICAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fYW5pbWF0YWJsZXMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICB2YXIgYW5pbWF0YWJsZSA9IHRoaXMuX2FuaW1hdGFibGVzW2lu
ZGV4XTsKKyAgICAgICAgICAgIGFuaW1hdGFibGUuc3luY1dpdGgocm9vdCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHb2VzIHRvIGEg
c3BlY2lmaWMgZnJhbWUgaW4gdGhpcyBhbmltYXRpb24gZ3JvdXAKKyAgICAgKiBAcGFyYW0gZnJh
bWUgdGhlIGZyYW1lIG51bWJlciB0byBnbyB0bworICAgICAqIEByZXR1cm4gdGhlIGFuaW1hdGlv
bkdyb3VwCisgICAgICovCisgICAgQW5pbWF0aW9uR3JvdXAucHJvdG90eXBlLmdvVG9GcmFtZSA9
IGZ1bmN0aW9uIChmcmFtZSkgeworICAgICAgICBpZiAoIXRoaXMuX2lzU3RhcnRlZCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IHRoaXMuX2FuaW1hdGFibGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgdmFyIGFuaW1hdGFibGUgPSB0aGlzLl9hbmltYXRhYmxlc1tpbmRleF07CisgICAgICAg
ICAgICBhbmltYXRhYmxlLmdvVG9GcmFtZShmcmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlIGFsbCBhc3NvY2lhdGVk
IHJlc291cmNlcworICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZS5kaXNwb3Nl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl90YXJnZXRlZEFuaW1hdGlvbnMgPSBbXTsK
KyAgICAgICAgdGhpcy5fYW5pbWF0YWJsZXMgPSBbXTsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhp
cy5fc2NlbmUuYW5pbWF0aW9uR3JvdXBzLmluZGV4T2YodGhpcyk7CisgICAgICAgIGlmIChpbmRl
eCA+IC0xKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5hbmltYXRpb25Hcm91cHMuc3BsaWNl
KGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uQW5pbWF0aW9uRW5kT2JzZXJ2
YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQW5pbWF0aW9uR3JvdXBFbmRPYnNlcnZhYmxl
LmNsZWFyKCk7CisgICAgICAgIHRoaXMub25BbmltYXRpb25Hcm91cFBhdXNlT2JzZXJ2YWJsZS5j
bGVhcigpOworICAgICAgICB0aGlzLm9uQW5pbWF0aW9uR3JvdXBQbGF5T2JzZXJ2YWJsZS5jbGVh
cigpOworICAgICAgICB0aGlzLm9uQW5pbWF0aW9uTG9vcE9ic2VydmFibGUuY2xlYXIoKTsKKyAg
ICB9OworICAgIEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZS5fY2hlY2tBbmltYXRpb25Hcm91cEVu
ZGVkID0gZnVuY3Rpb24gKGFuaW1hdGFibGUpIHsKKyAgICAgICAgLy8gYW5pbWF0YWJsZSBzaG91
bGQgYmUgdGFrZW4gb3V0IG9mIHRoZSBhcnJheQorICAgICAgICB2YXIgaWR4ID0gdGhpcy5fYW5p
bWF0YWJsZXMuaW5kZXhPZihhbmltYXRhYmxlKTsKKyAgICAgICAgaWYgKGlkeCA+IC0xKSB7Cisg
ICAgICAgICAgICB0aGlzLl9hbmltYXRhYmxlcy5zcGxpY2UoaWR4LCAxKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBhbGwgYW5pbWF0YWJsZXMgd2VyZSByZW1vdmVkPyBhbmltYXRpb24gZ3JvdXAg
ZW5kZWQhCisgICAgICAgIGlmICh0aGlzLl9hbmltYXRhYmxlcy5sZW5ndGggPT09IDApIHsKKyAg
ICAgICAgICAgIHRoaXMuX2lzU3RhcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5vbkFu
aW1hdGlvbkdyb3VwRW5kT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBn
cm91cCBhbmQgcmV0dXJucyBhIGNvcHkKKyAgICAgKiBAcGFyYW0gbmV3TmFtZSBkZWZpbmVzIHRo
ZSBuYW1lIG9mIHRoZSBuZXcgZ3JvdXAKKyAgICAgKiBAcGFyYW0gdGFyZ2V0Q29udmVydGVyIGRl
ZmluZXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdXNlZCB0byBjb252ZXJ0IGN1cnJlbnQgYW5pbWF0
aW9uIHRhcmdldHMgdG8gbmV3IG9uZXMKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGFuaWFtdGlv
biBncm91cAorICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZS5jbG9uZSA9IGZ1
bmN0aW9uIChuZXdOYW1lLCB0YXJnZXRDb252ZXJ0ZXIpIHsKKyAgICAgICAgdmFyIG5ld0dyb3Vw
ID0gbmV3IEFuaW1hdGlvbkdyb3VwKG5ld05hbWUgfHwgdGhpcy5uYW1lLCB0aGlzLl9zY2VuZSk7
CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl90YXJnZXRlZEFuaW1hdGlvbnM7
IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgdGFyZ2V0QW5pbWF0aW9u
ID0gX2FbX2ldOworICAgICAgICAgICAgbmV3R3JvdXAuYWRkVGFyZ2V0ZWRBbmltYXRpb24odGFy
Z2V0QW5pbWF0aW9uLmFuaW1hdGlvbi5jbG9uZSgpLCB0YXJnZXRDb252ZXJ0ZXIgPyB0YXJnZXRD
b252ZXJ0ZXIodGFyZ2V0QW5pbWF0aW9uLnRhcmdldCkgOiB0YXJnZXRBbmltYXRpb24udGFyZ2V0
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3R3JvdXA7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTZXJpYWxpemVzIHRoZSBhbmltYXRpb25Hcm91cCB0byBhbiBvYmplY3QKKyAgICAg
KiBAcmV0dXJucyBTZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIEFuaW1hdGlvbkdyb3Vw
LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxp
emF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubmFtZSA9IHRo
aXMubmFtZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5mcm9tID0gdGhpcy5mcm9tOwor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRvID0gdGhpcy50bzsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC50YXJnZXRlZEFuaW1hdGlvbnMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIg
dGFyZ2V0ZWRBbmltYXRpb25JbmRleCA9IDA7IHRhcmdldGVkQW5pbWF0aW9uSW5kZXggPCB0aGlz
LnRhcmdldGVkQW5pbWF0aW9ucy5sZW5ndGg7IHRhcmdldGVkQW5pbWF0aW9uSW5kZXgrKykgewor
ICAgICAgICAgICAgdmFyIHRhcmdldGVkQW5pbWF0aW9uID0gdGhpcy50YXJnZXRlZEFuaW1hdGlv
bnNbdGFyZ2V0ZWRBbmltYXRpb25JbmRleF07CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LnRhcmdldGVkQW5pbWF0aW9uc1t0YXJnZXRlZEFuaW1hdGlvbkluZGV4XSA9IHRhcmdldGVk
QW5pbWF0aW9uLnNlcmlhbGl6ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXJpYWxp
emF0aW9uT2JqZWN0OworICAgIH07CisgICAgLy8gU3RhdGljcworICAgIC8qKgorICAgICAqIFJl
dHVybnMgYSBuZXcgQW5pbWF0aW9uR3JvdXAgb2JqZWN0IHBhcnNlZCBmcm9tIHRoZSBzb3VyY2Ug
cHJvdmlkZWQuCisgICAgICogQHBhcmFtIHBhcnNlZEFuaW1hdGlvbkdyb3VwIGRlZmluZXMgdGhl
IHNvdXJjZQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGF0IHdpbGwg
cmVjZWl2ZSB0aGUgYW5pbWF0aW9uR3JvdXAKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBBbmltYXRp
b25Hcm91cAorICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLlBhcnNlID0gZnVuY3Rpb24gKHBh
cnNlZEFuaW1hdGlvbkdyb3VwLCBzY2VuZSkgeworICAgICAgICB2YXIgYW5pbWF0aW9uR3JvdXAg
PSBuZXcgQW5pbWF0aW9uR3JvdXAocGFyc2VkQW5pbWF0aW9uR3JvdXAubmFtZSwgc2NlbmUpOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnNlZEFuaW1hdGlvbkdyb3VwLnRhcmdldGVk
QW5pbWF0aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIHRhcmdldGVkQW5pbWF0
aW9uID0gcGFyc2VkQW5pbWF0aW9uR3JvdXAudGFyZ2V0ZWRBbmltYXRpb25zW2ldOworICAgICAg
ICAgICAgdmFyIGFuaW1hdGlvbiA9IF9hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siQW5pbWF0aW9uIl0uUGFyc2UodGFyZ2V0ZWRBbmltYXRpb24uYW5pbWF0aW9uKTsKKyAg
ICAgICAgICAgIHZhciBpZCA9IHRhcmdldGVkQW5pbWF0aW9uLnRhcmdldElkOworICAgICAgICAg
ICAgaWYgKHRhcmdldGVkQW5pbWF0aW9uLmFuaW1hdGlvbi5wcm9wZXJ0eSA9PT0gImluZmx1ZW5j
ZSIpIHsgLy8gbW9ycGggdGFyZ2V0IGFuaW1hdGlvbgorICAgICAgICAgICAgICAgIHZhciBtb3Jw
aFRhcmdldCA9IHNjZW5lLmdldE1vcnBoVGFyZ2V0QnlJZChpZCk7CisgICAgICAgICAgICAgICAg
aWYgKG1vcnBoVGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkdyb3VwLmFk
ZFRhcmdldGVkQW5pbWF0aW9uKGFuaW1hdGlvbiwgbW9ycGhUYXJnZXQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHZhciB0YXJnZXROb2RlID0gc2NlbmUuZ2V0Tm9kZUJ5SUQoaWQpOworICAgICAgICAgICAgICAg
IGlmICh0YXJnZXROb2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9u
R3JvdXAuYWRkVGFyZ2V0ZWRBbmltYXRpb24oYW5pbWF0aW9uLCB0YXJnZXROb2RlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNl
ZEFuaW1hdGlvbkdyb3VwLmZyb20gIT09IG51bGwgJiYgcGFyc2VkQW5pbWF0aW9uR3JvdXAuZnJv
bSAhPT0gbnVsbCkgeworICAgICAgICAgICAgYW5pbWF0aW9uR3JvdXAubm9ybWFsaXplKHBhcnNl
ZEFuaW1hdGlvbkdyb3VwLmZyb20sIHBhcnNlZEFuaW1hdGlvbkdyb3VwLnRvKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gYW5pbWF0aW9uR3JvdXA7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIHRoZSBzdHJpbmcgIkFuaW1hdGlvbkdyb3VwIgorICAgICAqIEByZXR1cm5zICJB
bmltYXRpb25Hcm91cCIKKyAgICAgKi8KKyAgICBBbmltYXRpb25Hcm91cC5wcm90b3R5cGUuZ2V0
Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkFuaW1hdGlvbkdyb3Vw
IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBkZXRhaWxsZWQgc3RyaW5nIGFi
b3V0IHRoZSBvYmplY3QKKyAgICAgKiBAcGFyYW0gZnVsbERldGFpbHMgZGVmaW5lcyBpZiB0aGUg
b3V0cHV0IHN0cmluZyB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgbGV2ZWxzIG9mIGxvZ2dpbmcgd2l0
aGluIHNjZW5lIGxvYWRpbmcKKyAgICAgKiBAcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcg
dGhlIG9iamVjdAorICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZS50b1N0cmlu
ZyA9IGZ1bmN0aW9uIChmdWxsRGV0YWlscykgeworICAgICAgICB2YXIgcmV0ID0gIk5hbWU6ICIg
KyB0aGlzLm5hbWU7CisgICAgICAgIHJldCArPSAiLCB0eXBlOiAiICsgdGhpcy5nZXRDbGFzc05h
bWUoKTsKKyAgICAgICAgaWYgKGZ1bGxEZXRhaWxzKSB7CisgICAgICAgICAgICByZXQgKz0gIiwg
ZnJvbTogIiArIHRoaXMuX2Zyb207CisgICAgICAgICAgICByZXQgKz0gIiwgdG86ICIgKyB0aGlz
Ll90bzsKKyAgICAgICAgICAgIHJldCArPSAiLCBpc1N0YXJ0ZWQ6ICIgKyB0aGlzLl9pc1N0YXJ0
ZWQ7CisgICAgICAgICAgICByZXQgKz0gIiwgc3BlZWRSYXRpbzogIiArIHRoaXMuX3NwZWVkUmF0
aW87CisgICAgICAgICAgICByZXQgKz0gIiwgdGFyZ2V0ZWRBbmltYXRpb25zIGxlbmd0aDogIiAr
IHRoaXMuX3RhcmdldGVkQW5pbWF0aW9ucy5sZW5ndGg7CisgICAgICAgICAgICByZXQgKz0gIiwg
YW5pbWF0YWJsZXMgbGVuZ3RoOiAiICsgdGhpcy5fYW5pbWF0YWJsZXM7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJldDsKKyAgICB9OworICAgIHJldHVybiBBbmltYXRpb25Hcm91cDsKK30o
KSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb25LZXku
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9BbmltYXRpb25zL2FuaW1hdGlvbktleS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQW5pbWF0aW9uS2V5SW50
ZXJwb2xhdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmltYXRp
b25LZXlJbnRlcnBvbGF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBbmltYXRpb25LZXlJbnRl
cnBvbGF0aW9uOyB9KTsKKy8qKgorICogRW51bSBmb3IgdGhlIGFuaW1hdGlvbiBrZXkgZnJhbWUg
aW50ZXJwb2xhdGlvbiB0eXBlCisgKi8KK3ZhciBBbmltYXRpb25LZXlJbnRlcnBvbGF0aW9uOwor
KGZ1bmN0aW9uIChBbmltYXRpb25LZXlJbnRlcnBvbGF0aW9uKSB7CisgICAgLyoqCisgICAgICog
RG8gbm90IGludGVycG9sYXRlIGJldHdlZW4ga2V5cyBhbmQgdXNlIHRoZSBzdGFydCBrZXkgdmFs
dWUgb25seS4gVGFuZ2VudHMgYXJlIGlnbm9yZWQKKyAgICAgKi8KKyAgICBBbmltYXRpb25LZXlJ
bnRlcnBvbGF0aW9uW0FuaW1hdGlvbktleUludGVycG9sYXRpb25bIlNURVAiXSA9IDFdID0gIlNU
RVAiOworfSkoQW5pbWF0aW9uS2V5SW50ZXJwb2xhdGlvbiB8fCAoQW5pbWF0aW9uS2V5SW50ZXJw
b2xhdGlvbiA9IHt9KSk7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0FuaW1hdGlvbnMvYW5p
bWF0aW9uUHJvcGVydGllc092ZXJyaWRlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQW5pbWF0aW9ucy9hbmlt
YXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFu
aW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJBbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEFuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9BbmltYXRpb25zL2FuaW1hdGlvbiAqLyAiLi9Bbmlt
YXRpb25zL2FuaW1hdGlvbi50cyIpOworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gb3ZlcnJpZGUg
YWxsIGNoaWxkIGFuaW1hdGlvbnMgb2YgYSBnaXZlbiB0YXJnZXQKKyAqLwordmFyIEFuaW1hdGlv
blByb3BlcnRpZXNPdmVycmlkZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBm
dW5jdGlvbiBBbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUoKSB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIGlmIGFuaW1hdGlvbiBibGVu
ZGluZyBtdXN0IGJlIHVzZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZW5hYmxlQmxlbmRp
bmcgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgYmxl
bmRpbmcgc3BlZWQgdG8gdXNlIHdoZW4gZW5hYmxlQmxlbmRpbmcgaXMgdHJ1ZQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5ibGVuZGluZ1NwZWVkID0gMC4wMTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgb3Igc2V0cyB0aGUgZGVmYXVsdCBsb29wIG1vZGUgdG8gdXNlCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmxvb3BNb2RlID0gX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTkxPT1BNT0RFX0NZ
Q0xFOworICAgIH0KKyAgICByZXR1cm4gQW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlOworfSgp
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9BbmltYXRpb25zL2FuaW1hdGlvblJhbmdl
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9BbmltYXRpb25zL2FuaW1hdGlvblJhbmdlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuaW1hdGlv
blJhbmdlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGlvblJh
bmdlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBbmltYXRpb25SYW5nZTsgfSk7CisvKioKKyAqIFJl
cHJlc2VudHMgdGhlIHJhbmdlIG9mIGFuIGFuaW1hdGlvbgorICovCit2YXIgQW5pbWF0aW9uUmFu
Z2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5pdGlh
bGl6ZXMgdGhlIHJhbmdlIG9mIGFuIGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBu
YW1lIG9mIHRoZSBhbmltYXRpb24gcmFuZ2UKKyAgICAgKiBAcGFyYW0gZnJvbSBUaGUgc3RhcnRp
bmcgZnJhbWUgb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSB0byBUaGUgZW5kaW5nIGZy
YW1lIG9mIHRoZSBhbmltYXRpb24KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBBbmltYXRpb25SYW5n
ZSgKKyAgICAvKipUaGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHJhbmdlKiovCisgICAgbmFtZSwg
CisgICAgLyoqVGhlIHN0YXJ0aW5nIGZyYW1lIG9mIHRoZSBhbmltYXRpb24gKi8KKyAgICBmcm9t
LCAKKyAgICAvKipUaGUgZW5kaW5nIGZyYW1lIG9mIHRoZSBhbmltYXRpb24qLworICAgIHRvKSB7
CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMuZnJvbSA9IGZyb207Cisg
ICAgICAgIHRoaXMudG8gPSB0bzsKKyAgICB9CisgICAgLyoqCisgICAgICogTWFrZXMgYSBjb3B5
IG9mIHRoZSBhbmltYXRpb24gcmFuZ2UKKyAgICAgKiBAcmV0dXJucyBBIGNvcHkgb2YgdGhlIGFu
aW1hdGlvbiByYW5nZQorICAgICAqLworICAgIEFuaW1hdGlvblJhbmdlLnByb3RvdHlwZS5jbG9u
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBBbmltYXRpb25SYW5nZSh0aGlz
Lm5hbWUsIHRoaXMuZnJvbSwgdGhpcy50byk7CisgICAgfTsKKyAgICByZXR1cm4gQW5pbWF0aW9u
UmFuZ2U7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0FuaW1hdGlvbnMvZWFz
aW5nLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
QW5pbWF0aW9ucy9lYXNpbmcudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEVhc2luZ0Z1bmN0aW9uLCBDaXJjbGVFYXNlLCBC
YWNrRWFzZSwgQm91bmNlRWFzZSwgQ3ViaWNFYXNlLCBFbGFzdGljRWFzZSwgRXhwb25lbnRpYWxF
YXNlLCBQb3dlckVhc2UsIFF1YWRyYXRpY0Vhc2UsIFF1YXJ0aWNFYXNlLCBRdWludGljRWFzZSwg
U2luZUVhc2UsIEJlemllckN1cnZlRWFzZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJFYXNpbmdGdW5jdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRWFzaW5nRnVuY3Rp
b247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2lyY2xlRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gQ2lyY2xlRWFzZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCYWNrRWFzZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gQmFja0Vhc2U7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmNlRWFzZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gQm91bmNlRWFzZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJD
dWJpY0Vhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEN1YmljRWFzZTsgfSk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJFbGFzdGljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRWxhc3RpY0Vhc2U7IH0p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRXhwb25lbnRpYWxFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBFeHBvbmVudGlhbEVhc2U7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG93ZXJFYXNlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBQb3dlckVhc2U7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVhZHJh
dGljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVhZHJhdGljRWFzZTsgfSk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJRdWFydGljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVhcnRpY0Vhc2U7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVpbnRpY0Vhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFF1aW50aWNFYXNlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbmVFYXNlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBTaW5lRWFzZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCZXppZXJDdXJ2ZUVh
c2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJlemllckN1cnZlRWFzZTsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIu
ZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfcGF0aF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
aHMvbWF0aC5wYXRoICovICIuL01hdGhzL21hdGgucGF0aC50cyIpOworCisKKy8qKgorICogQmFz
ZSBjbGFzcyB1c2VkIGZvciBldmVyeSBkZWZhdWx0IGVhc2luZyBmdW5jdGlvbi4KKyAqIEBzZWUg
aHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNlYXNpbmctZnVu
Y3Rpb25zCisgKi8KK3ZhciBFYXNpbmdGdW5jdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICBmdW5jdGlvbiBFYXNpbmdGdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5fZWFz
aW5nTW9kZSA9IEVhc2luZ0Z1bmN0aW9uLkVBU0lOR01PREVfRUFTRUlOOworICAgIH0KKyAgICAv
KioKKyAgICAgKiBTZXRzIHRoZSBlYXNpbmcgbW9kZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4K
KyAgICAgKiBAcGFyYW0gZWFzaW5nTW9kZSBEZWZpbmVzIHRoZSB3aWxsaW5nIG1vZGUgKEVBU0lO
R01PREVfRUFTRUlOLCBFQVNJTkdNT0RFX0VBU0VPVVQgb3IgRUFTSU5HTU9ERV9FQVNFSU5PVVQp
CisgICAgICovCisgICAgRWFzaW5nRnVuY3Rpb24ucHJvdG90eXBlLnNldEVhc2luZ01vZGUgPSBm
dW5jdGlvbiAoZWFzaW5nTW9kZSkgeworICAgICAgICB2YXIgbiA9IE1hdGgubWluKE1hdGgubWF4
KGVhc2luZ01vZGUsIDApLCAyKTsKKyAgICAgICAgdGhpcy5fZWFzaW5nTW9kZSA9IG47CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGVhc2luZyBtb2RlLgorICAgICAq
IEByZXR1cm5zIHRoZSBlYXNpbmcgbW9kZQorICAgICAqLworICAgIEVhc2luZ0Z1bmN0aW9uLnBy
b3RvdHlwZS5nZXRFYXNpbmdNb2RlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5fZWFzaW5nTW9kZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAgKi8K
KyAgICBFYXNpbmdGdW5jdGlvbi5wcm90b3R5cGUuZWFzZUluQ29yZSA9IGZ1bmN0aW9uIChncmFk
aWVudCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGltcGxlbWVudCB0aGlz
IG1ldGhvZCcpOworICAgIH07CisgICAgLyoqCisgICAgICogR2l2ZW4gYW4gaW5wdXQgZ3JhZGll
bnQgYmV0d2VlbiAwIGFuZCAxLCB0aGlzIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUK
KyAgICAgKiBvZiB0aGUgZWFzaW5nIGZ1bmN0aW9uLgorICAgICAqIEBwYXJhbSBncmFkaWVudCBE
ZWZpbmVzIHRoZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgd2Ugd2FudCB0aGUgZWFzaW5nIHZhbHVl
IGZvcgorICAgICAqIEByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9uIHRoZSBjdXJ2
ZSBkZWZpbmVkIGJ5IHRoZSBlYXNpbmcgZnVuY3Rpb24KKyAgICAgKi8KKyAgICBFYXNpbmdGdW5j
dGlvbi5wcm90b3R5cGUuZWFzZSA9IGZ1bmN0aW9uIChncmFkaWVudCkgeworICAgICAgICBzd2l0
Y2ggKHRoaXMuX2Vhc2luZ01vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRWFzaW5nRnVuY3Rpb24u
RUFTSU5HTU9ERV9FQVNFSU46CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFzZUluQ29y
ZShncmFkaWVudCk7CisgICAgICAgICAgICBjYXNlIEVhc2luZ0Z1bmN0aW9uLkVBU0lOR01PREVf
RUFTRU9VVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gKDEgLSB0aGlzLmVhc2VJbkNvcmUoMSAt
IGdyYWRpZW50KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGdyYWRpZW50ID49IDAuNSkgewor
ICAgICAgICAgICAgcmV0dXJuICgoKDEgLSB0aGlzLmVhc2VJbkNvcmUoKDEgLSBncmFkaWVudCkg
KiAyKSkgKiAwLjUpICsgMC41KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKHRoaXMuZWFz
ZUluQ29yZShncmFkaWVudCAqIDIpICogMC41KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIElu
dGVycG9sYXRpb24gZm9sbG93cyB0aGUgbWF0aGVtYXRpY2FsIGZvcm11bGEgYXNzb2NpYXRlZCB3
aXRoIHRoZSBlYXNpbmcgZnVuY3Rpb24uCisgICAgICovCisgICAgRWFzaW5nRnVuY3Rpb24uRUFT
SU5HTU9ERV9FQVNFSU4gPSAwOworICAgIC8qKgorICAgICAqIEludGVycG9sYXRpb24gZm9sbG93
cyAxMDAlIGludGVycG9sYXRpb24gbWludXMgdGhlIG91dHB1dCBvZiB0aGUgZm9ybXVsYSBhc3Nv
Y2lhdGVkIHdpdGggdGhlIGVhc2luZyBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICBFYXNpbmdGdW5j
dGlvbi5FQVNJTkdNT0RFX0VBU0VPVVQgPSAxOworICAgIC8qKgorICAgICAqIEludGVycG9sYXRp
b24gdXNlcyBFYXNlSW4gZm9yIHRoZSBmaXJzdCBoYWxmIG9mIHRoZSBhbmltYXRpb24gYW5kIEVh
c2VPdXQgZm9yIHRoZSBzZWNvbmQgaGFsZi4KKyAgICAgKi8KKyAgICBFYXNpbmdGdW5jdGlvbi5F
QVNJTkdNT0RFX0VBU0VJTk9VVCA9IDI7CisgICAgcmV0dXJuIEVhc2luZ0Z1bmN0aW9uOworfSgp
KTsKKworLyoqCisgKiBFYXNpbmcgZnVuY3Rpb24gd2l0aCBhIGNpcmNsZSBzaGFwZSAoc2VlIGxp
bmsgYmVsb3cpLgorICogQHNlZSBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5DaXJjCisgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2FuaW1hdGlvbnMjZWFzaW5n
LWZ1bmN0aW9ucworICovCit2YXIgQ2lyY2xlRWFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShDaXJjbGVFYXNlLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIENpcmNsZUVhc2UoKSB7
CisgICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cykgfHwgdGhpczsKKyAgICB9CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBDaXJjbGVF
YXNlLnByb3RvdHlwZS5lYXNlSW5Db3JlID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAg
IGdyYWRpZW50ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgZ3JhZGllbnQpKTsKKyAgICAgICAg
cmV0dXJuICgxLjAgLSBNYXRoLnNxcnQoMS4wIC0gKGdyYWRpZW50ICogZ3JhZGllbnQpKSk7Cisg
ICAgfTsKKyAgICByZXR1cm4gQ2lyY2xlRWFzZTsKK30oRWFzaW5nRnVuY3Rpb24pKTsKKworLyoq
CisgKiBFYXNpbmcgZnVuY3Rpb24gd2l0aCBhIGVhc2UgYmFjayBzaGFwZSAoc2VlIGxpbmsgYmVs
b3cpLgorICogQHNlZSBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5CYWNrCisgKiBAc2VlIGh0
dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2FuaW1hdGlvbnMjZWFzaW5nLWZ1bmN0
aW9ucworICovCit2YXIgQmFja0Vhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVy
KSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0o
QmFja0Vhc2UsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgYmFjayBl
YXNlIGVhc2luZworICAgICAqIEBzZWUgaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluQmFjawor
ICAgICAqIEBwYXJhbSBhbXBsaXR1ZGUgRGVmaW5lcyB0aGUgYW1wbGl0dWRlIG9mIHRoZSBmdW5j
dGlvbgorICAgICAqLworICAgIGZ1bmN0aW9uIEJhY2tFYXNlKAorICAgIC8qKiBEZWZpbmVzIHRo
ZSBhbXBsaXR1ZGUgb2YgdGhlIGZ1bmN0aW9uICovCisgICAgYW1wbGl0dWRlKSB7CisgICAgICAg
IGlmIChhbXBsaXR1ZGUgPT09IHZvaWQgMCkgeyBhbXBsaXR1ZGUgPSAxOyB9CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmFtcGxp
dHVkZSA9IGFtcGxpdHVkZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKiog
QGhpZGRlbiAqLworICAgIEJhY2tFYXNlLnByb3RvdHlwZS5lYXNlSW5Db3JlID0gZnVuY3Rpb24g
KGdyYWRpZW50KSB7CisgICAgICAgIHZhciBudW0gPSBNYXRoLm1heCgwLCB0aGlzLmFtcGxpdHVk
ZSk7CisgICAgICAgIHJldHVybiAoTWF0aC5wb3coZ3JhZGllbnQsIDMuMCkgLSAoKGdyYWRpZW50
ICogbnVtKSAqIE1hdGguc2luKDMuMTQxNTkyNjUzNTg5NzkzMSAqIGdyYWRpZW50KSkpOworICAg
IH07CisgICAgcmV0dXJuIEJhY2tFYXNlOworfShFYXNpbmdGdW5jdGlvbikpOworCisvKioKKyAq
IEVhc2luZyBmdW5jdGlvbiB3aXRoIGEgYm91bmNpbmcgc2hhcGUgKHNlZSBsaW5rIGJlbG93KS4K
KyAqIEBzZWUgaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluQm91bmNlCisgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2FuaW1hdGlvbnMjZWFzaW5nLWZ1bmN0aW9u
cworICovCit2YXIgQm91bmNlRWFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIp
IHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShC
b3VuY2VFYXNlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIGJvdW5j
ZSBlYXNpbmcKKyAgICAgKiBAc2VlIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbkJvdW5jZQor
ICAgICAqIEBwYXJhbSBib3VuY2VzIERlZmluZXMgdGhlIG51bWJlciBvZiBib3VuY2VzCisgICAg
ICogQHBhcmFtIGJvdW5jaW5lc3MgRGVmaW5lcyB0aGUgYW1wbGl0dWRlIG9mIHRoZSBib3VuY2UK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBCb3VuY2VFYXNlKAorICAgIC8qKiBEZWZpbmVzIHRoZSBu
dW1iZXIgb2YgYm91bmNlcyAqLworICAgIGJvdW5jZXMsIAorICAgIC8qKiBEZWZpbmVzIHRoZSBh
bXBsaXR1ZGUgb2YgdGhlIGJvdW5jZSAqLworICAgIGJvdW5jaW5lc3MpIHsKKyAgICAgICAgaWYg
KGJvdW5jZXMgPT09IHZvaWQgMCkgeyBib3VuY2VzID0gMzsgfQorICAgICAgICBpZiAoYm91bmNp
bmVzcyA9PT0gdm9pZCAwKSB7IGJvdW5jaW5lc3MgPSAyOyB9CisgICAgICAgIHZhciBfdGhpcyA9
IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmJvdW5jZXMgPSBib3Vu
Y2VzOworICAgICAgICBfdGhpcy5ib3VuY2luZXNzID0gYm91bmNpbmVzczsKKyAgICAgICAgcmV0
dXJuIF90aGlzOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIEJvdW5jZUVhc2UucHJv
dG90eXBlLmVhc2VJbkNvcmUgPSBmdW5jdGlvbiAoZ3JhZGllbnQpIHsKKyAgICAgICAgdmFyIHkg
PSBNYXRoLm1heCgwLjAsIHRoaXMuYm91bmNlcyk7CisgICAgICAgIHZhciBib3VuY2luZXNzID0g
dGhpcy5ib3VuY2luZXNzOworICAgICAgICBpZiAoYm91bmNpbmVzcyA8PSAxLjApIHsKKyAgICAg
ICAgICAgIGJvdW5jaW5lc3MgPSAxLjAwMTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbnVtOSA9
IE1hdGgucG93KGJvdW5jaW5lc3MsIHkpOworICAgICAgICB2YXIgbnVtNSA9IDEuMCAtIGJvdW5j
aW5lc3M7CisgICAgICAgIHZhciBudW00ID0gKCgxLjAgLSBudW05KSAvIG51bTUpICsgKG51bTkg
KiAwLjUpOworICAgICAgICB2YXIgbnVtMTUgPSBncmFkaWVudCAqIG51bTQ7CisgICAgICAgIHZh
ciBudW02NSA9IE1hdGgubG9nKCgtbnVtMTUgKiAoMS4wIC0gYm91bmNpbmVzcykpICsgMS4wKSAv
IE1hdGgubG9nKGJvdW5jaW5lc3MpOworICAgICAgICB2YXIgbnVtMyA9IE1hdGguZmxvb3IobnVt
NjUpOworICAgICAgICB2YXIgbnVtMTMgPSBudW0zICsgMS4wOworICAgICAgICB2YXIgbnVtOCA9
ICgxLjAgLSBNYXRoLnBvdyhib3VuY2luZXNzLCBudW0zKSkgLyAobnVtNSAqIG51bTQpOworICAg
ICAgICB2YXIgbnVtMTIgPSAoMS4wIC0gTWF0aC5wb3coYm91bmNpbmVzcywgbnVtMTMpKSAvIChu
dW01ICogbnVtNCk7CisgICAgICAgIHZhciBudW03ID0gKG51bTggKyBudW0xMikgKiAwLjU7Cisg
ICAgICAgIHZhciBudW02ID0gZ3JhZGllbnQgLSBudW03OworICAgICAgICB2YXIgbnVtMiA9IG51
bTcgLSBudW04OworICAgICAgICByZXR1cm4gKCgoLU1hdGgucG93KDEuMCAvIGJvdW5jaW5lc3Ms
IHkgLSBudW0zKSAvIChudW0yICogbnVtMikpICogKG51bTYgLSBudW0yKSkgKiAobnVtNiArIG51
bTIpKTsKKyAgICB9OworICAgIHJldHVybiBCb3VuY2VFYXNlOworfShFYXNpbmdGdW5jdGlvbikp
OworCisvKioKKyAqIEVhc2luZyBmdW5jdGlvbiB3aXRoIGEgcG93ZXIgb2YgMyBzaGFwZSAoc2Vl
IGxpbmsgYmVsb3cpLgorICogQHNlZSBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5DdWJpYwor
ICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9hbmltYXRpb25zI2Vh
c2luZy1mdW5jdGlvbnMKKyAqLwordmFyIEN1YmljRWFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShDdWJpY0Vhc2UsIF9zdXBlcik7CisgICAgZnVuY3Rpb24gQ3ViaWNFYXNlKCkg
eworICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBh
cmd1bWVudHMpIHx8IHRoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgQ3ViaWNF
YXNlLnByb3RvdHlwZS5lYXNlSW5Db3JlID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAg
IHJldHVybiAoZ3JhZGllbnQgKiBncmFkaWVudCAqIGdyYWRpZW50KTsKKyAgICB9OworICAgIHJl
dHVybiBDdWJpY0Vhc2U7Cit9KEVhc2luZ0Z1bmN0aW9uKSk7CisKKy8qKgorICogRWFzaW5nIGZ1
bmN0aW9uIHdpdGggYW4gZWxhc3RpYyBzaGFwZSAoc2VlIGxpbmsgYmVsb3cpLgorICogQHNlZSBo
dHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5FbGFzdGljCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2FuaW1hdGlvbnMjZWFzaW5nLWZ1bmN0aW9ucworICovCit2
YXIgRWxhc3RpY0Vhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oRWxhc3RpY0Vh
c2UsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGFuIGVsYXN0aWMgZWFz
aW5nIGZ1bmN0aW9uCisgICAgICogQHNlZSBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5FbGFz
dGljCisgICAgICogQHBhcmFtIG9zY2lsbGF0aW9ucyBEZWZpbmVzIHRoZSBudW1iZXIgb2Ygb3Nj
aWxsYXRpb25zCisgICAgICogQHBhcmFtIHNwcmluZ2luZXNzIERlZmluZXMgdGhlIGFtcGxpdHVk
ZSBvZiB0aGUgb3NjaWxsYXRpb25zCisgICAgICovCisgICAgZnVuY3Rpb24gRWxhc3RpY0Vhc2Uo
CisgICAgLyoqIERlZmluZXMgdGhlIG51bWJlciBvZiBvc2NpbGxhdGlvbnMqLworICAgIG9zY2ls
bGF0aW9ucywgCisgICAgLyoqIERlZmluZXMgdGhlIGFtcGxpdHVkZSBvZiB0aGUgb3NjaWxsYXRp
b25zKi8KKyAgICBzcHJpbmdpbmVzcykgeworICAgICAgICBpZiAob3NjaWxsYXRpb25zID09PSB2
b2lkIDApIHsgb3NjaWxsYXRpb25zID0gMzsgfQorICAgICAgICBpZiAoc3ByaW5naW5lc3MgPT09
IHZvaWQgMCkgeyBzcHJpbmdpbmVzcyA9IDM7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcykgfHwgdGhpczsKKyAgICAgICAgX3RoaXMub3NjaWxsYXRpb25zID0gb3NjaWxs
YXRpb25zOworICAgICAgICBfdGhpcy5zcHJpbmdpbmVzcyA9IHNwcmluZ2luZXNzOworICAgICAg
ICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgRWxhc3RpY0Vh
c2UucHJvdG90eXBlLmVhc2VJbkNvcmUgPSBmdW5jdGlvbiAoZ3JhZGllbnQpIHsKKyAgICAgICAg
dmFyIG51bTI7CisgICAgICAgIHZhciBudW0zID0gTWF0aC5tYXgoMC4wLCB0aGlzLm9zY2lsbGF0
aW9ucyk7CisgICAgICAgIHZhciBudW0gPSBNYXRoLm1heCgwLjAsIHRoaXMuc3ByaW5naW5lc3Mp
OworICAgICAgICBpZiAobnVtID09IDApIHsKKyAgICAgICAgICAgIG51bTIgPSBncmFkaWVudDsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG51bTIgPSAoTWF0aC5leHAo
bnVtICogZ3JhZGllbnQpIC0gMS4wKSAvIChNYXRoLmV4cChudW0pIC0gMS4wKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gKG51bTIgKiBNYXRoLnNpbigoKDYuMjgzMTg1MzA3MTc5NTg2MiAq
IG51bTMpICsgMS41NzA3OTYzMjY3OTQ4OTY2KSAqIGdyYWRpZW50KSk7CisgICAgfTsKKyAgICBy
ZXR1cm4gRWxhc3RpY0Vhc2U7Cit9KEVhc2luZ0Z1bmN0aW9uKSk7CisKKy8qKgorICogRWFzaW5n
IGZ1bmN0aW9uIHdpdGggYW4gZXhwb25lbnRpYWwgc2hhcGUgKHNlZSBsaW5rIGJlbG93KS4KKyAq
IEBzZWUgaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluRXhwbworICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9hbmltYXRpb25zI2Vhc2luZy1mdW5jdGlvbnMKKyAq
LwordmFyIEV4cG9uZW50aWFsRWFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIp
IHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShF
eHBvbmVudGlhbEVhc2UsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGFu
IGV4cG9uZW50aWFsIGVhc2luZyBmdW5jdGlvbgorICAgICAqIEBzZWUgaHR0cHM6Ly9lYXNpbmdz
Lm5ldC8jZWFzZUluRXhwbworICAgICAqIEBwYXJhbSBleHBvbmVudCBEZWZpbmVzIHRoZSBleHBv
bmVudCBvZiB0aGUgZnVuY3Rpb24KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBFeHBvbmVudGlhbEVh
c2UoCisgICAgLyoqIERlZmluZXMgdGhlIGV4cG9uZW50IG9mIHRoZSBmdW5jdGlvbiAqLworICAg
IGV4cG9uZW50KSB7CisgICAgICAgIGlmIChleHBvbmVudCA9PT0gdm9pZCAwKSB7IGV4cG9uZW50
ID0gMjsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwor
ICAgICAgICBfdGhpcy5leHBvbmVudCA9IGV4cG9uZW50OworICAgICAgICByZXR1cm4gX3RoaXM7
CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgRXhwb25lbnRpYWxFYXNlLnByb3RvdHlw
ZS5lYXNlSW5Db3JlID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIGlmICh0aGlzLmV4
cG9uZW50IDw9IDApIHsKKyAgICAgICAgICAgIHJldHVybiBncmFkaWVudDsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gKChNYXRoLmV4cCh0aGlzLmV4cG9uZW50ICogZ3JhZGllbnQpIC0gMS4w
KSAvIChNYXRoLmV4cCh0aGlzLmV4cG9uZW50KSAtIDEuMCkpOworICAgIH07CisgICAgcmV0dXJu
IEV4cG9uZW50aWFsRWFzZTsKK30oRWFzaW5nRnVuY3Rpb24pKTsKKworLyoqCisgKiBFYXNpbmcg
ZnVuY3Rpb24gd2l0aCBhIHBvd2VyIHNoYXBlIChzZWUgbGluayBiZWxvdykuCisgKiBAc2VlIGh0
dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblF1YWQKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9u
anMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNlYXNpbmctZnVuY3Rpb25zCisgKi8KK3ZhciBQ
b3dlckVhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUG93ZXJFYXNlLCBfc3Vw
ZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhbiBwb3dlciBiYXNlIGVhc2luZyBm
dW5jdGlvbgorICAgICAqIEBzZWUgaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluUXVhZAorICAg
ICAqIEBwYXJhbSBwb3dlciBEZWZpbmVzIHRoZSBwb3dlciBvZiB0aGUgZnVuY3Rpb24KKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBQb3dlckVhc2UoCisgICAgLyoqIERlZmluZXMgdGhlIHBvd2VyIG9m
IHRoZSBmdW5jdGlvbiAqLworICAgIHBvd2VyKSB7CisgICAgICAgIGlmIChwb3dlciA9PT0gdm9p
ZCAwKSB7IHBvd2VyID0gMjsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlz
KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5wb3dlciA9IHBvd2VyOworICAgICAgICByZXR1cm4g
X3RoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgUG93ZXJFYXNlLnByb3RvdHlw
ZS5lYXNlSW5Db3JlID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIHZhciB5ID0gTWF0
aC5tYXgoMC4wLCB0aGlzLnBvd2VyKTsKKyAgICAgICAgcmV0dXJuIE1hdGgucG93KGdyYWRpZW50
LCB5KTsKKyAgICB9OworICAgIHJldHVybiBQb3dlckVhc2U7Cit9KEVhc2luZ0Z1bmN0aW9uKSk7
CisKKy8qKgorICogRWFzaW5nIGZ1bmN0aW9uIHdpdGggYSBwb3dlciBvZiAyIHNoYXBlIChzZWUg
bGluayBiZWxvdykuCisgKiBAc2VlIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblF1YWQKKyAq
IEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNlYXNp
bmctZnVuY3Rpb25zCisgKi8KK3ZhciBRdWFkcmF0aWNFYXNlID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKFF1YWRyYXRpY0Vhc2UsIF9zdXBlcik7CisgICAgZnVuY3Rpb24gUXVhZHJh
dGljRWFzZSgpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBw
bHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIFF1YWRyYXRpY0Vhc2UucHJvdG90eXBlLmVhc2VJbkNvcmUgPSBmdW5jdGlvbiAoZ3JhZGll
bnQpIHsKKyAgICAgICAgcmV0dXJuIChncmFkaWVudCAqIGdyYWRpZW50KTsKKyAgICB9OworICAg
IHJldHVybiBRdWFkcmF0aWNFYXNlOworfShFYXNpbmdGdW5jdGlvbikpOworCisvKioKKyAqIEVh
c2luZyBmdW5jdGlvbiB3aXRoIGEgcG93ZXIgb2YgNCBzaGFwZSAoc2VlIGxpbmsgYmVsb3cpLgor
ICogQHNlZSBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5RdWFydAorICogQHNlZSBodHRwOi8v
ZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9hbmltYXRpb25zI2Vhc2luZy1mdW5jdGlvbnMK
KyAqLwordmFyIFF1YXJ0aWNFYXNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikg
eworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFF1
YXJ0aWNFYXNlLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIFF1YXJ0aWNFYXNlKCkgeworICAgICAg
ICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMp
IHx8IHRoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgUXVhcnRpY0Vhc2UucHJv
dG90eXBlLmVhc2VJbkNvcmUgPSBmdW5jdGlvbiAoZ3JhZGllbnQpIHsKKyAgICAgICAgcmV0dXJu
IChncmFkaWVudCAqIGdyYWRpZW50ICogZ3JhZGllbnQgKiBncmFkaWVudCk7CisgICAgfTsKKyAg
ICByZXR1cm4gUXVhcnRpY0Vhc2U7Cit9KEVhc2luZ0Z1bmN0aW9uKSk7CisKKy8qKgorICogRWFz
aW5nIGZ1bmN0aW9uIHdpdGggYSBwb3dlciBvZiA1IHNoYXBlIChzZWUgbGluayBiZWxvdykuCisg
KiBAc2VlIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblF1aW50CisgKiBAc2VlIGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2FuaW1hdGlvbnMjZWFzaW5nLWZ1bmN0aW9ucwor
ICovCit2YXIgUXVpbnRpY0Vhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUXVp
bnRpY0Vhc2UsIF9zdXBlcik7CisgICAgZnVuY3Rpb24gUXVpbnRpY0Vhc2UoKSB7CisgICAgICAg
IHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykg
fHwgdGhpczsKKyAgICB9CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBRdWludGljRWFzZS5wcm90
b3R5cGUuZWFzZUluQ29yZSA9IGZ1bmN0aW9uIChncmFkaWVudCkgeworICAgICAgICByZXR1cm4g
KGdyYWRpZW50ICogZ3JhZGllbnQgKiBncmFkaWVudCAqIGdyYWRpZW50ICogZ3JhZGllbnQpOwor
ICAgIH07CisgICAgcmV0dXJuIFF1aW50aWNFYXNlOworfShFYXNpbmdGdW5jdGlvbikpOworCisv
KioKKyAqIEVhc2luZyBmdW5jdGlvbiB3aXRoIGEgc2luIHNoYXBlIChzZWUgbGluayBiZWxvdyku
CisgKiBAc2VlIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblNpbmUKKyAqIEBzZWUgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNlYXNpbmctZnVuY3Rpb25z
CisgKi8KK3ZhciBTaW5lRWFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShTaW5l
RWFzZSwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBTaW5lRWFzZSgpIHsKKyAgICAgICAgcmV0dXJu
IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlz
OworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIFNpbmVFYXNlLnByb3RvdHlwZS5lYXNl
SW5Db3JlID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIHJldHVybiAoMS4wIC0gTWF0
aC5zaW4oMS41NzA3OTYzMjY3OTQ4OTY2ICogKDEuMCAtIGdyYWRpZW50KSkpOworICAgIH07Cisg
ICAgcmV0dXJuIFNpbmVFYXNlOworfShFYXNpbmdGdW5jdGlvbikpOworCisvKioKKyAqIEVhc2lu
ZyBmdW5jdGlvbiB3aXRoIGEgYmV6aWVyIHNoYXBlIChzZWUgbGluayBiZWxvdykuCisgKiBAc2Vl
IGh0dHA6Ly9jdWJpYy1iZXppZXIuY29tLyMuMTcsLjY3LC44MywuNjcKKyAqIEBzZWUgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNlYXNpbmctZnVuY3Rpb25z
CisgKi8KK3ZhciBCZXppZXJDdXJ2ZUVhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1
cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRz
Il0oQmV6aWVyQ3VydmVFYXNlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRl
cyBhIGJlemllciBmdW5jdGlvbgorICAgICAqIEBzZWUgaHR0cDovL2N1YmljLWJlemllci5jb20v
Iy4xNywuNjcsLjgzLC42NworICAgICAqIEBwYXJhbSB4MSBEZWZpbmVzIHRoZSB4IGNvbXBvbmVu
dCBvZiB0aGUgc3RhcnQgdGFuZ2VudCBpbiB0aGUgYmV6aWVyIGN1cnZlCisgICAgICogQHBhcmFt
IHkxIERlZmluZXMgdGhlIHkgY29tcG9uZW50IG9mIHRoZSBzdGFydCB0YW5nZW50IGluIHRoZSBi
ZXppZXIgY3VydmUKKyAgICAgKiBAcGFyYW0geDIgRGVmaW5lcyB0aGUgeCBjb21wb25lbnQgb2Yg
dGhlIGVuZCB0YW5nZW50IGluIHRoZSBiZXppZXIgY3VydmUKKyAgICAgKiBAcGFyYW0geTIgRGVm
aW5lcyB0aGUgeSBjb21wb25lbnQgb2YgdGhlIGVuZCB0YW5nZW50IGluIHRoZSBiZXppZXIgY3Vy
dmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBCZXppZXJDdXJ2ZUVhc2UoCisgICAgLyoqIERlZmlu
ZXMgdGhlIHggY29tcG9uZW50IG9mIHRoZSBzdGFydCB0YW5nZW50IGluIHRoZSBiZXppZXIgY3Vy
dmUgKi8KKyAgICB4MSwgCisgICAgLyoqIERlZmluZXMgdGhlIHkgY29tcG9uZW50IG9mIHRoZSBz
dGFydCB0YW5nZW50IGluIHRoZSBiZXppZXIgY3VydmUgKi8KKyAgICB5MSwgCisgICAgLyoqIERl
ZmluZXMgdGhlIHggY29tcG9uZW50IG9mIHRoZSBlbmQgdGFuZ2VudCBpbiB0aGUgYmV6aWVyIGN1
cnZlICovCisgICAgeDIsIAorICAgIC8qKiBEZWZpbmVzIHRoZSB5IGNvbXBvbmVudCBvZiB0aGUg
ZW5kIHRhbmdlbnQgaW4gdGhlIGJlemllciBjdXJ2ZSAqLworICAgIHkyKSB7CisgICAgICAgIGlm
ICh4MSA9PT0gdm9pZCAwKSB7IHgxID0gMDsgfQorICAgICAgICBpZiAoeTEgPT09IHZvaWQgMCkg
eyB5MSA9IDA7IH0KKyAgICAgICAgaWYgKHgyID09PSB2b2lkIDApIHsgeDIgPSAxOyB9CisgICAg
ICAgIGlmICh5MiA9PT0gdm9pZCAwKSB7IHkyID0gMTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBf
c3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOworICAgICAgICBfdGhpcy54MSA9IHgxOworICAgICAg
ICBfdGhpcy55MSA9IHkxOworICAgICAgICBfdGhpcy54MiA9IHgyOworICAgICAgICBfdGhpcy55
MiA9IHkyOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICov
CisgICAgQmV6aWVyQ3VydmVFYXNlLnByb3RvdHlwZS5lYXNlSW5Db3JlID0gZnVuY3Rpb24gKGdy
YWRpZW50KSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF9wYXRoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIkJlemllckN1cnZlIl0uSW50ZXJwb2xhdGUoZ3JhZGllbnQsIHRoaXMu
eDEsIHRoaXMueTEsIHRoaXMueDIsIHRoaXMueTIpOworICAgIH07CisgICAgcmV0dXJuIEJlemll
ckN1cnZlRWFzZTsKK30oRWFzaW5nRnVuY3Rpb24pKTsKKworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9BbmltYXRpb25zL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9BbmltYXRpb25zL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuaW1hdGFibGUsIF9J
QW5pbWF0aW9uU3RhdGUsIEFuaW1hdGlvbiwgVGFyZ2V0ZWRBbmltYXRpb24sIEFuaW1hdGlvbkdy
b3VwLCBBbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUsIEVhc2luZ0Z1bmN0aW9uLCBDaXJjbGVF
YXNlLCBCYWNrRWFzZSwgQm91bmNlRWFzZSwgQ3ViaWNFYXNlLCBFbGFzdGljRWFzZSwgRXhwb25l
bnRpYWxFYXNlLCBQb3dlckVhc2UsIFF1YWRyYXRpY0Vhc2UsIFF1YXJ0aWNFYXNlLCBRdWludGlj
RWFzZSwgU2luZUVhc2UsIEJlemllckN1cnZlRWFzZSwgUnVudGltZUFuaW1hdGlvbiwgQW5pbWF0
aW9uRXZlbnQsIEFuaW1hdGlvbktleUludGVycG9sYXRpb24sIEFuaW1hdGlvblJhbmdlICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5pbWF0YWJsZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hbmlt
YXRhYmxlICovICIuL0FuaW1hdGlvbnMvYW5pbWF0YWJsZS50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJBbmltYXRhYmxlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYW5pbWF0YWJsZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJBbmltYXRhYmxlIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9hbmltYXRpb24gKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb24u
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0lBbmltYXRpb25TdGF0ZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJfSUFuaW1hdGlv
blN0YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGlvbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBbmltYXRp
b24iXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5pbWF0aW9uR3JvdXBfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYW5p
bWF0aW9uR3JvdXAgKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb25Hcm91cC50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJUYXJnZXRlZEFuaW1hdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FuaW1h
dGlvbkdyb3VwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRhcmdldGVkQW5pbWF0aW9u
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGlvbkdyb3VwIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfYW5pbWF0aW9uR3JvdXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQW5p
bWF0aW9uR3JvdXAiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5pbWF0aW9u
UHJvcGVydGllc092ZXJyaWRlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2FuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSAqLyAiLi9Bbmlt
YXRpb25zL2FuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZS50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJBbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hbmlt
YXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQW5p
bWF0aW9uUHJvcGVydGllc092ZXJyaWRlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2Vhc2luZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9lYXNpbmcgKi8gIi4vQW5pbWF0aW9ucy9lYXNpbmcudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiRWFzaW5nRnVuY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lYXNpbmdfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRWFzaW5nRnVuY3Rpb24iXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQ2lyY2xlRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Vhc2luZ19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDaXJjbGVFYXNlIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkJhY2tFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZWFzaW5nX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIkJhY2tFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJv
dW5jZUVhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lYXNpbmdfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siQm91bmNlRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDdWJpY0Vh
c2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lYXNpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siQ3ViaWNFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVsYXN0aWNFYXNlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfZWFzaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkVsYXN0aWNFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkV4cG9uZW50aWFsRWFzZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Vhc2luZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJFeHBvbmVudGlhbEVhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG93ZXJFYXNlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfZWFzaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlBvd2VyRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJRdWFkcmF0aWNFYXNlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfZWFzaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlF1
YWRyYXRpY0Vhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVhcnRpY0Vhc2UiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9lYXNpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUXVh
cnRpY0Vhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVpbnRpY0Vhc2UiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9lYXNpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUXVpbnRp
Y0Vhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2luZUVhc2UiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9lYXNpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2luZUVhc2UiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmV6aWVyQ3VydmVFYXNlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfZWFzaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkJlemllckN1cnZlRWFz
ZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ydW50aW1lQW5pbWF0aW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3J1
bnRpbWVBbmltYXRpb24gKi8gIi4vQW5pbWF0aW9ucy9ydW50aW1lQW5pbWF0aW9uLnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlJ1bnRpbWVBbmltYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9y
dW50aW1lQW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlJ1bnRpbWVBbmlt
YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5pbWF0aW9uRXZlbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
YW5pbWF0aW9uRXZlbnQgKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb25FdmVudC50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJBbmltYXRpb25FdmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FuaW1h
dGlvbkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFuaW1hdGlvbkV2ZW50Il07
IH0pOworCisvKiBlbXB0eS91bnVzZWQgaGFybW9ueSBzdGFyIHJlZXhwb3J0ICovLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9hbmltYXRpb25LZXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYW5pbWF0aW9uS2V5ICovICIuL0FuaW1hdGlv
bnMvYW5pbWF0aW9uS2V5LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGlvbktleUludGVy
cG9sYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hbmltYXRpb25LZXlfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siQW5pbWF0aW9uS2V5SW50ZXJwb2xhdGlvbiJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hbmltYXRpb25SYW5nZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hbmltYXRpb25SYW5nZSAqLyAi
Li9BbmltYXRpb25zL2FuaW1hdGlvblJhbmdlLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1h
dGlvblJhbmdlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYW5pbWF0aW9uUmFuZ2VfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfX1siQW5pbWF0aW9uUmFuZ2UiXTsgfSk7CisKKworCisKKworCisK
KworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9BbmltYXRpb25zL3J1bnRpbWVBbmlt
YXRpb24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vQW5pbWF0aW9ucy9ydW50aW1lQW5pbWF0aW9uLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogUnVudGltZUFuaW1hdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJSdW50aW1lQW5pbWF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSdW50aW1lQW5pbWF0aW9u
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhz
L21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0
aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hbmltYXRpb25f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
YW5pbWF0aW9uICovICIuL0FuaW1hdGlvbnMvYW5pbWF0aW9uLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2l6ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5zaXplICovICIuL01hdGhz
L21hdGguc2l6ZS50cyIpOworCisKKworCisvLyBTdGF0aWMgdmFsdWVzIHRvIGhlbHAgdGhlIGdh
cmJhZ2UgY29sbGVjdG9yCisvLyBRdWF0ZXJuaW9uCit2YXIgX3N0YXRpY09mZnNldFZhbHVlUXVh
dGVybmlvbiA9IE9iamVjdC5mcmVlemUobmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJRdWF0ZXJuaW9uIl0oMCwgMCwgMCwgMCkpOworLy8gVmVjdG9y
MwordmFyIF9zdGF0aWNPZmZzZXRWYWx1ZVZlY3RvcjMgPSBPYmplY3QuZnJlZXplKF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygp
KTsKKy8vIFZlY3RvcjIKK3ZhciBfc3RhdGljT2Zmc2V0VmFsdWVWZWN0b3IyID0gT2JqZWN0LmZy
ZWV6ZShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVj
dG9yMiJdLlplcm8oKSk7CisvLyBTaXplCit2YXIgX3N0YXRpY09mZnNldFZhbHVlU2l6ZSA9IE9i
amVjdC5mcmVlemUoX01hdGhzX21hdGhfc2l6ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJTaXplIl0uWmVybygpKTsKKy8vIENvbG9yMwordmFyIF9zdGF0aWNPZmZzZXRWYWx1ZUNvbG9y
MyA9IE9iamVjdC5mcmVlemUoX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siQ29sb3IzIl0uQmxhY2soKSk7CisvKioKKyAqIERlZmluZXMgYSBydW50aW1lIGFu
aW1hdGlvbgorICovCit2YXIgUnVudGltZUFuaW1hdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgUnVudGltZUFuaW1hdGlvbiBv
YmplY3QKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgdGhlIHRhcmdldCBvZiB0aGUgYW5p
bWF0aW9uCisgICAgICogQHBhcmFtIGFuaW1hdGlvbiBkZWZpbmVzIHRoZSBzb3VyY2UgYW5pbWF0
aW9uIG9iamVjdAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5l
CisgICAgICogQHBhcmFtIGhvc3QgZGVmaW5lcyB0aGUgaW5pdGlhdGluZyBBbmltYXRhYmxlCisg
ICAgICovCisgICAgZnVuY3Rpb24gUnVudGltZUFuaW1hdGlvbih0YXJnZXQsIGFuaW1hdGlvbiwg
c2NlbmUsIGhvc3QpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5f
ZXZlbnRzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY3VycmVu
dCBmcmFtZSBvZiB0aGUgcnVudGltZSBhbmltYXRpb24KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuX2N1cnJlbnRGcmFtZSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgb3JpZ2lu
YWwgdmFsdWUgb2YgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uCisgICAgICAgICAqLworICAgICAgICB0
aGlzLl9vcmlnaW5hbFZhbHVlID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBUaGUgb3JpZ2luYWwgYmxlbmQgdmFsdWUgb2YgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLl9vcmlnaW5hbEJsZW5kVmFsdWUgPSBudWxsOworICAgICAg
ICAvKioKKyAgICAgICAgICogVGhlIG9mZnNldHMgY2FjaGUgb2YgdGhlIHJ1bnRpbWUgYW5pbWF0
aW9uCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9vZmZzZXRzQ2FjaGUgPSB7fTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFRoZSBoaWdoIGxpbWl0cyBjYWNoZSBvZiB0aGUgcnVudGltZSBh
bmltYXRpb24KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX2hpZ2hMaW1pdHNDYWNoZSA9IHt9
OworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBydW50aW1lIGFuaW1h
dGlvbiBoYXMgYmVlbiBzdG9wcGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9zdG9wcGVk
ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgYmxlbmRpbmcgZmFjdG9yIG9m
IHRoZSBydW50aW1lIGFuaW1hdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fYmxlbmRp
bmdGYWN0b3IgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGN1cnJlbnQgdmFsdWUg
b2YgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9jdXJy
ZW50VmFsdWUgPSBudWxsOworICAgICAgICB0aGlzLl9jdXJyZW50QWN0aXZlVGFyZ2V0ID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fZGlyZWN0VGFyZ2V0ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFRoZSB0YXJnZXQgcGF0aCBvZiB0aGUgcnVudGltZSBhbmltYXRpb24KKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuX3RhcmdldFBhdGggPSAiIjsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFRoZSB3ZWlnaHQgb2YgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLl93ZWlnaHQgPSAxLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgcmF0
aW8gb2Zmc2V0IG9mIHRoZSBydW50aW1lIGFuaW1hdGlvbgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5fcmF0aW9PZmZzZXQgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHByZXZp
b3VzIGRlbGF5IG9mIHRoZSBydW50aW1lIGFuaW1hdGlvbgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5fcHJldmlvdXNEZWxheSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgcHJl
dmlvdXMgcmF0aW8gb2YgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLl9wcmV2aW91c1JhdGlvID0gMDsKKyAgICAgICAgdGhpcy5fdGFyZ2V0SXNBcnJheSA9
IGZhbHNlOworICAgICAgICB0aGlzLl9hbmltYXRpb24gPSBhbmltYXRpb247CisgICAgICAgIHRo
aXMuX3RhcmdldCA9IHRhcmdldDsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZTsKKyAgICAg
ICAgdGhpcy5faG9zdCA9IGhvc3Q7CisgICAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldHMgPSBbXTsK
KyAgICAgICAgYW5pbWF0aW9uLl9ydW50aW1lQW5pbWF0aW9ucy5wdXNoKHRoaXMpOworICAgICAg
ICAvLyBTdGF0ZQorICAgICAgICB0aGlzLl9hbmltYXRpb25TdGF0ZSA9IHsKKyAgICAgICAgICAg
IGtleTogMCwKKyAgICAgICAgICAgIHJlcGVhdENvdW50OiAwLAorICAgICAgICAgICAgbG9vcE1v
ZGU6IHRoaXMuX2dldENvcnJlY3RMb29wTW9kZSgpCisgICAgICAgIH07CisgICAgICAgIGlmICh0
aGlzLl9hbmltYXRpb24uZGF0YVR5cGUgPT09IF9hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9NQVRSSVgpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2FuaW1hdGlvblN0YXRlLndvcmtWYWx1ZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgIH0K
KyAgICAgICAgLy8gTGltaXRzCisgICAgICAgIHRoaXMuX2tleXMgPSB0aGlzLl9hbmltYXRpb24u
Z2V0S2V5cygpOworICAgICAgICB0aGlzLl9taW5GcmFtZSA9IHRoaXMuX2tleXNbMF0uZnJhbWU7
CisgICAgICAgIHRoaXMuX21heEZyYW1lID0gdGhpcy5fa2V5c1t0aGlzLl9rZXlzLmxlbmd0aCAt
IDFdLmZyYW1lOworICAgICAgICB0aGlzLl9taW5WYWx1ZSA9IHRoaXMuX2tleXNbMF0udmFsdWU7
CisgICAgICAgIHRoaXMuX21heFZhbHVlID0gdGhpcy5fa2V5c1t0aGlzLl9rZXlzLmxlbmd0aCAt
IDFdLnZhbHVlOworICAgICAgICAvLyBBZGQgYSBzdGFydCBrZXkgYXQgZnJhbWUgMCBpZiBtaXNz
aW5nCisgICAgICAgIGlmICh0aGlzLl9taW5GcmFtZSAhPT0gMCkgeworICAgICAgICAgICAgdmFy
IG5ld0tleSA9IHsgZnJhbWU6IDAsIHZhbHVlOiB0aGlzLl9taW5WYWx1ZSB9OworICAgICAgICAg
ICAgdGhpcy5fa2V5cy5zcGxpY2UoMCwgMCwgbmV3S2V5KTsKKyAgICAgICAgfQorICAgICAgICAv
LyBDaGVjayBkYXRhCisgICAgICAgIGlmICh0aGlzLl90YXJnZXQgaW5zdGFuY2VvZiBBcnJheSkg
eworICAgICAgICAgICAgdmFyIGluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0g
MCwgX2EgPSB0aGlzLl90YXJnZXQ7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHRhcmdldF8xID0gX2FbX2ldOworICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBh
cmVQYXRoKHRhcmdldF8xLCBpbmRleCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZ2V0T3JpZ2lu
YWxWYWx1ZXMoaW5kZXgpOworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aGlzLl90YXJnZXRJc0FycmF5ID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVQYXRoKHRoaXMuX3RhcmdldCk7
CisgICAgICAgICAgICB0aGlzLl9nZXRPcmlnaW5hbFZhbHVlcygpOworICAgICAgICAgICAgdGhp
cy5fdGFyZ2V0SXNBcnJheSA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fZGlyZWN0VGFyZ2V0
ID0gdGhpcy5fYWN0aXZlVGFyZ2V0c1swXTsKKyAgICAgICAgfQorICAgICAgICAvLyBDbG9uaW5n
IGV2ZW50cyBsb2NhbGx5CisgICAgICAgIHZhciBldmVudHMgPSBhbmltYXRpb24uZ2V0RXZlbnRz
KCk7CisgICAgICAgIGlmIChldmVudHMgJiYgZXZlbnRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAg
ICAgIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgX3RoaXMu
X2V2ZW50cy5wdXNoKGUuX2Nsb25lKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fZW5hYmxlQmxlbmRpbmcgPSB0YXJnZXQgJiYgdGFyZ2V0LmFuaW1hdGlvblBy
b3BlcnRpZXNPdmVycmlkZSA/IHRhcmdldC5hbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUuZW5h
YmxlQmxlbmRpbmcgOiB0aGlzLl9hbmltYXRpb24uZW5hYmxlQmxlbmRpbmc7CisgICAgfQorICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW50aW1lQW5pbWF0aW9uLnByb3RvdHlwZSwgImN1cnJl
bnRGcmFtZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGN1cnJlbnQgZnJh
bWUgb2YgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50RnJhbWU7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW50aW1lQW5pbWF0aW9u
LnByb3RvdHlwZSwgIndlaWdodCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhl
IHdlaWdodCBvZiB0aGUgcnVudGltZSBhbmltYXRpb24KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlaWdodDsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bnRpbWVBbmltYXRpb24u
cHJvdG90eXBlLCAiY3VycmVudFZhbHVlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcnVudGltZSBhbmltYXRpb24KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1
cnJlbnRWYWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFJ1bnRpbWVBbmltYXRpb24ucHJvdG90eXBlLCAidGFyZ2V0UGF0aCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIHRhcmdldCBwYXRoIG9mIHRoZSBydW50aW1lIGFuaW1hdGlv
bgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fdGFyZ2V0UGF0aDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFJ1bnRpbWVBbmltYXRpb24ucHJvdG90eXBlLCAidGFyZ2V0IiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgYWN0dWFsIHRhcmdldCBvZiB0aGUgcnVudGlt
ZSBhbmltYXRpb24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRBY3RpdmVUYXJnZXQ7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIFJ1bnRpbWVBbmltYXRpb24ucHJvdG90eXBlLl9wcmVwYXJlUGF0aCA9IGZ1bmN0
aW9uICh0YXJnZXQsIHRhcmdldEluZGV4KSB7CisgICAgICAgIGlmICh0YXJnZXRJbmRleCA9PT0g
dm9pZCAwKSB7IHRhcmdldEluZGV4ID0gMDsgfQorICAgICAgICB2YXIgdGFyZ2V0UHJvcGVydHlQ
YXRoID0gdGhpcy5fYW5pbWF0aW9uLnRhcmdldFByb3BlcnR5UGF0aDsKKyAgICAgICAgaWYgKHRh
cmdldFByb3BlcnR5UGF0aC5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICB2YXIgcHJvcGVydHkg
PSB0YXJnZXRbdGFyZ2V0UHJvcGVydHlQYXRoWzBdXTsKKyAgICAgICAgICAgIGZvciAodmFyIGlu
ZGV4ID0gMTsgaW5kZXggPCB0YXJnZXRQcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMTsgaW5kZXgrKykg
eworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlbdGFyZ2V0UHJvcGVydHlQYXRo
W2luZGV4XV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl90YXJnZXRQYXRoID0g
dGFyZ2V0UHJvcGVydHlQYXRoW3RhcmdldFByb3BlcnR5UGF0aC5sZW5ndGggLSAxXTsKKyAgICAg
ICAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldHNbdGFyZ2V0SW5kZXhdID0gcHJvcGVydHk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl90YXJnZXRQYXRoID0gdGFy
Z2V0UHJvcGVydHlQYXRoWzBdOworICAgICAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0c1t0YXJn
ZXRJbmRleF0gPSB0YXJnZXQ7CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShSdW50aW1lQW5pbWF0aW9uLnByb3RvdHlwZSwgImFuaW1hdGlvbiIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGFuaW1hdGlvbiBmcm9tIHRoZSBydW50aW1lIGFu
aW1hdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fYW5pbWF0aW9uOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioK
KyAgICAgKiBSZXNldHMgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uIHRvIHRoZSBiZWdpbm5pbmcKKyAg
ICAgKiBAcGFyYW0gcmVzdG9yZU9yaWdpbmFsIGRlZmluZXMgd2hldGhlciB0byByZXN0b3JlIHRo
ZSB0YXJnZXQgcHJvcGVydHkgdG8gdGhlIG9yaWdpbmFsIHZhbHVlCisgICAgICovCisgICAgUnVu
dGltZUFuaW1hdGlvbi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAocmVzdG9yZU9yaWdpbmFs
KSB7CisgICAgICAgIGlmIChyZXN0b3JlT3JpZ2luYWwgPT09IHZvaWQgMCkgeyByZXN0b3JlT3Jp
Z2luYWwgPSBmYWxzZTsgfQorICAgICAgICBpZiAocmVzdG9yZU9yaWdpbmFsKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fdGFyZ2V0IGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgaW5kZXggPSAwOworICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0
aGlzLl90YXJnZXQ7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciB0YXJnZXQgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vcmln
aW5hbFZhbHVlW2luZGV4XSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9zZXRWYWx1ZSh0YXJnZXQsIHRoaXMuX2FjdGl2ZVRhcmdldHNbaW5kZXhdLCB0aGlz
Ll9vcmlnaW5hbFZhbHVlW2luZGV4XSwgLTEsIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9v
cmlnaW5hbFZhbHVlWzBdICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5fc2V0VmFsdWUodGhpcy5fdGFyZ2V0LCB0aGlzLl9kaXJlY3RUYXJnZXQsIHRoaXMuX29yaWdp
bmFsVmFsdWVbMF0sIC0xLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fb2Zmc2V0c0NhY2hlID0ge307CisgICAgICAgIHRoaXMu
X2hpZ2hMaW1pdHNDYWNoZSA9IHt9OworICAgICAgICB0aGlzLl9jdXJyZW50RnJhbWUgPSAwOwor
ICAgICAgICB0aGlzLl9ibGVuZGluZ0ZhY3RvciA9IDA7CisgICAgICAgIC8vIEV2ZW50cworICAg
ICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZXZlbnRzLmxlbmd0aDsgaW5k
ZXgrKykgeworICAgICAgICAgICAgdGhpcy5fZXZlbnRzW2luZGV4XS5pc0RvbmUgPSBmYWxzZTsK
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIGlmIHRoZSBydW50
aW1lIGFuaW1hdGlvbiBpcyBzdG9wcGVkCisgICAgICogQHJldHVybnMgQm9vbGVhbiBzcGVjaWZ5
aW5nIGlmIHRoZSBydW50aW1lIGFuaW1hdGlvbiBpcyBzdG9wcGVkCisgICAgICovCisgICAgUnVu
dGltZUFuaW1hdGlvbi5wcm90b3R5cGUuaXNTdG9wcGVkID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5fc3RvcHBlZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2Vz
IG9mIHRoZSBydW50aW1lIGFuaW1hdGlvbgorICAgICAqLworICAgIFJ1bnRpbWVBbmltYXRpb24u
cHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpbmRleCA9IHRo
aXMuX2FuaW1hdGlvbi5ydW50aW1lQW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpOworICAgICAgICBp
ZiAoaW5kZXggPiAtMSkgeworICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uLnJ1bnRpbWVBbmlt
YXRpb25zLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIEFwcGx5IHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWUgdG8gdGhlIHRhcmdldAorICAgICAqIEBw
YXJhbSBjdXJyZW50VmFsdWUgZGVmaW5lcyB0aGUgdmFsdWUgY29tcHV0ZWQgYnkgdGhlIGFuaW1h
dGlvbgorICAgICAqIEBwYXJhbSB3ZWlnaHQgZGVmaW5lcyB0aGUgd2VpZ2h0IHRvIGFwcGx5IHRv
IHRoaXMgdmFsdWUgKERlZmF1bHRzIHRvIDEuMCkKKyAgICAgKi8KKyAgICBSdW50aW1lQW5pbWF0
aW9uLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHdlaWdodCkg
eworICAgICAgICBpZiAodGhpcy5fdGFyZ2V0SXNBcnJheSkgeworICAgICAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX3RhcmdldC5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0W2luZGV4XTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0YXJnZXQsIHRoaXMuX2FjdGl2ZVRhcmdldHNbaW5kZXhd
LCBjdXJyZW50VmFsdWUsIHdlaWdodCwgaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX3Rhcmdl
dCwgdGhpcy5fZGlyZWN0VGFyZ2V0LCBjdXJyZW50VmFsdWUsIHdlaWdodCwgMCk7CisgICAgfTsK
KyAgICBSdW50aW1lQW5pbWF0aW9uLnByb3RvdHlwZS5fZ2V0T3JpZ2luYWxWYWx1ZXMgPSBmdW5j
dGlvbiAodGFyZ2V0SW5kZXgpIHsKKyAgICAgICAgaWYgKHRhcmdldEluZGV4ID09PSB2b2lkIDAp
IHsgdGFyZ2V0SW5kZXggPSAwOyB9CisgICAgICAgIHZhciBvcmlnaW5hbFZhbHVlOworICAgICAg
ICB2YXIgdGFyZ2V0ID0gdGhpcy5fYWN0aXZlVGFyZ2V0c1t0YXJnZXRJbmRleF07CisgICAgICAg
IGlmICh0YXJnZXQuZ2V0UmVzdFBvc2UgJiYgdGhpcy5fdGFyZ2V0UGF0aCA9PT0gIl9tYXRyaXgi
KSB7IC8vIEZvciBib25lcworICAgICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRhcmdldC5nZXRS
ZXN0UG9zZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb3JpZ2lu
YWxWYWx1ZSA9IHRhcmdldFt0aGlzLl90YXJnZXRQYXRoXTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAob3JpZ2luYWxWYWx1ZSAmJiBvcmlnaW5hbFZhbHVlLmNsb25lKSB7CisgICAgICAgICAgICB0
aGlzLl9vcmlnaW5hbFZhbHVlW3RhcmdldEluZGV4XSA9IG9yaWdpbmFsVmFsdWUuY2xvbmUoKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVmFs
dWVbdGFyZ2V0SW5kZXhdID0gb3JpZ2luYWxWYWx1ZTsKKyAgICAgICAgfQorICAgIH07CisgICAg
UnVudGltZUFuaW1hdGlvbi5wcm90b3R5cGUuX3NldFZhbHVlID0gZnVuY3Rpb24gKHRhcmdldCwg
ZGVzdGluYXRpb24sIGN1cnJlbnRWYWx1ZSwgd2VpZ2h0LCB0YXJnZXRJbmRleCkgeworICAgICAg
ICAvLyBTZXQgdmFsdWUKKyAgICAgICAgdGhpcy5fY3VycmVudEFjdGl2ZVRhcmdldCA9IGRlc3Rp
bmF0aW9uOworICAgICAgICB0aGlzLl93ZWlnaHQgPSB3ZWlnaHQ7CisgICAgICAgIGlmICh0aGlz
Ll9lbmFibGVCbGVuZGluZyAmJiB0aGlzLl9ibGVuZGluZ0ZhY3RvciA8PSAxLjApIHsKKyAgICAg
ICAgICAgIGlmICghdGhpcy5fb3JpZ2luYWxCbGVuZFZhbHVlKSB7CisgICAgICAgICAgICAgICAg
dmFyIG9yaWdpbmFsVmFsdWUgPSBkZXN0aW5hdGlvblt0aGlzLl90YXJnZXRQYXRoXTsKKyAgICAg
ICAgICAgICAgICBpZiAob3JpZ2luYWxWYWx1ZS5jbG9uZSkgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9vcmlnaW5hbEJsZW5kVmFsdWUgPSBvcmlnaW5hbFZhbHVlLmNsb25lKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9vcmlnaW5hbEJsZW5kVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9vcmlnaW5hbEJsZW5k
VmFsdWUubSkgeyAvLyBNYXRyaXgKKyAgICAgICAgICAgICAgICBpZiAoX2FuaW1hdGlvbl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBbmltYXRpb24iXS5BbGxvd01hdHJpeERlY29tcG9z
ZUZvckludGVycG9sYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJl
bnRWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLkRlY29tcG9zZUxlcnBUb1JlZih0
aGlzLl9vcmlnaW5hbEJsZW5kVmFsdWUsIGN1cnJlbnRWYWx1ZSwgdGhpcy5fYmxlbmRpbmdGYWN0
b3IsIHRoaXMuX2N1cnJlbnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
VmFsdWUgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
TWF0cml4Il0uRGVjb21wb3NlTGVycCh0aGlzLl9vcmlnaW5hbEJsZW5kVmFsdWUsIGN1cnJlbnRW
YWx1ZSwgdGhpcy5fYmxlbmRpbmdGYWN0b3IpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fY3VycmVudFZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWF0cml4Il0uTGVy
cFRvUmVmKHRoaXMuX29yaWdpbmFsQmxlbmRWYWx1ZSwgY3VycmVudFZhbHVlLCB0aGlzLl9ibGVu
ZGluZ0ZhY3RvciwgdGhpcy5fY3VycmVudFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
X2N1cnJlbnRWYWx1ZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJNYXRyaXgiXS5MZXJwKHRoaXMuX29yaWdpbmFsQmxlbmRWYWx1ZSwgY3VycmVudFZh
bHVlLCB0aGlzLl9ibGVuZGluZ0ZhY3Rvcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSBfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkFuaW1hdGlvbiJdLl9Vbml2ZXJzYWxMZXJwKHRoaXMuX29yaWdpbmFsQmxl
bmRWYWx1ZSwgY3VycmVudFZhbHVlLCB0aGlzLl9ibGVuZGluZ0ZhY3Rvcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YXIgYmxlbmRpbmdTcGVlZCA9IHRhcmdldCAmJiB0YXJnZXQuYW5p
bWF0aW9uUHJvcGVydGllc092ZXJyaWRlID8gdGFyZ2V0LmFuaW1hdGlvblByb3BlcnRpZXNPdmVy
cmlkZS5ibGVuZGluZ1NwZWVkIDogdGhpcy5fYW5pbWF0aW9uLmJsZW5kaW5nU3BlZWQ7CisgICAg
ICAgICAgICB0aGlzLl9ibGVuZGluZ0ZhY3RvciArPSBibGVuZGluZ1NwZWVkOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gY3VycmVu
dFZhbHVlOworICAgICAgICB9CisgICAgICAgIGlmICh3ZWlnaHQgIT09IC0xLjApIHsKKyAgICAg
ICAgICAgIHRoaXMuX3NjZW5lLl9yZWdpc3RlclRhcmdldEZvckxhdGVBbmltYXRpb25CaW5kaW5n
KHRoaXMsIHRoaXMuX29yaWdpbmFsVmFsdWVbdGFyZ2V0SW5kZXhdKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uW3RoaXMuX3RhcmdldFBhdGhdID0g
dGhpcy5fY3VycmVudFZhbHVlOworICAgICAgICB9CisgICAgICAgIGlmICh0YXJnZXQubWFya0Fz
RGlydHkpIHsKKyAgICAgICAgICAgIHRhcmdldC5tYXJrQXNEaXJ0eSh0aGlzLl9hbmltYXRpb24u
dGFyZ2V0UHJvcGVydHkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRz
IHRoZSBsb29wIHBtb2RlIG9mIHRoZSBydW50aW1lIGFuaW1hdGlvbgorICAgICAqIEByZXR1cm5z
IExvb3AgTW9kZQorICAgICAqLworICAgIFJ1bnRpbWVBbmltYXRpb24ucHJvdG90eXBlLl9nZXRD
b3JyZWN0TG9vcE1vZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl90YXJnZXQg
JiYgdGhpcy5fdGFyZ2V0LmFuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3RhcmdldC5hbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUubG9vcE1v
ZGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2FuaW1hdGlvbi5sb29wTW9kZTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIE1vdmUgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHRvIGEg
Z2l2ZW4gZnJhbWUKKyAgICAgKiBAcGFyYW0gZnJhbWUgZGVmaW5lcyB0aGUgZnJhbWUgdG8gbW92
ZSB0bworICAgICAqLworICAgIFJ1bnRpbWVBbmltYXRpb24ucHJvdG90eXBlLmdvVG9GcmFtZSA9
IGZ1bmN0aW9uIChmcmFtZSkgeworICAgICAgICB2YXIga2V5cyA9IHRoaXMuX2FuaW1hdGlvbi5n
ZXRLZXlzKCk7CisgICAgICAgIGlmIChmcmFtZSA8IGtleXNbMF0uZnJhbWUpIHsKKyAgICAgICAg
ICAgIGZyYW1lID0ga2V5c1swXS5mcmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChm
cmFtZSA+IGtleXNba2V5cy5sZW5ndGggLSAxXS5mcmFtZSkgeworICAgICAgICAgICAgZnJhbWUg
PSBrZXlzW2tleXMubGVuZ3RoIC0gMV0uZnJhbWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gTmVl
ZCB0byByZXNldCBhbmltYXRpb24gZXZlbnRzCisgICAgICAgIHZhciBldmVudHMgPSB0aGlzLl9l
dmVudHM7CisgICAgICAgIGlmIChldmVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgZXZlbnRzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgICAgIGlmICghZXZlbnRzW2luZGV4XS5vbmx5T25jZSkgeworICAgICAgICAgICAgICAgICAg
ICAvLyByZXNldCBldmVudHMgaW4gdGhlIGZ1dHVyZQorICAgICAgICAgICAgICAgICAgICBldmVu
dHNbaW5kZXhdLmlzRG9uZSA9IGV2ZW50c1tpbmRleF0uZnJhbWUgPCBmcmFtZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY3VycmVu
dEZyYW1lID0gZnJhbWU7CisgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLl9hbmltYXRp
b24uX2ludGVycG9sYXRlKGZyYW1lLCB0aGlzLl9hbmltYXRpb25TdGF0ZSk7CisgICAgICAgIHRo
aXMuc2V0VmFsdWUoY3VycmVudFZhbHVlLCAtMSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBA
aGlkZGVuIEludGVybmFsIHVzZSBvbmx5CisgICAgICovCisgICAgUnVudGltZUFuaW1hdGlvbi5w
cm90b3R5cGUuX3ByZXBhcmVGb3JTcGVlZFJhdGlvQ2hhbmdlID0gZnVuY3Rpb24gKG5ld1NwZWVk
UmF0aW8pIHsKKyAgICAgICAgdmFyIG5ld1JhdGlvID0gdGhpcy5fcHJldmlvdXNEZWxheSAqICh0
aGlzLl9hbmltYXRpb24uZnJhbWVQZXJTZWNvbmQgKiBuZXdTcGVlZFJhdGlvKSAvIDEwMDAuMDsK
KyAgICAgICAgdGhpcy5fcmF0aW9PZmZzZXQgPSB0aGlzLl9wcmV2aW91c1JhdGlvIC0gbmV3UmF0
aW87CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IGFuaW1hdGlv
bgorICAgICAqIEBwYXJhbSBkZWxheSBkZWZpbmVzIHRoZSBkZWxheSB0byBhZGQgdG8gdGhlIGN1
cnJlbnQgZnJhbWUKKyAgICAgKiBAcGFyYW0gZnJvbSBkZWZpbmVzIHRoZSBsb3dlciBib3VuZCBv
ZiB0aGUgYW5pbWF0aW9uIHJhbmdlCisgICAgICogQHBhcmFtIHRvIGRlZmluZXMgdGhlIHVwcGVy
IGJvdW5kIG9mIHRoZSBhbmltYXRpb24gcmFuZ2UKKyAgICAgKiBAcGFyYW0gbG9vcCBkZWZpbmVz
IGlmIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBtdXN0IGxvb3AKKyAgICAgKiBAcGFyYW0gc3BlZWRS
YXRpbyBkZWZpbmVzIHRoZSBjdXJyZW50IHNwZWVkIHJhdGlvCisgICAgICogQHBhcmFtIHdlaWdo
dCBkZWZpbmVzIHRoZSB3ZWlnaHQgb2YgdGhlIGFuaW1hdGlvbiAoZGVmYXVsdCBpcyAtMSBzbyBu
byB3ZWlnaHQpCisgICAgICogQHBhcmFtIG9uTG9vcCBvcHRpb25hbCBjYWxsYmFjayBjYWxsZWQg
d2hlbiBhbmltYXRpb24gbG9vcHMKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGlu
ZyBpZiB0aGUgYW5pbWF0aW9uIGlzIHJ1bm5pbmcKKyAgICAgKi8KKyAgICBSdW50aW1lQW5pbWF0
aW9uLnByb3RvdHlwZS5hbmltYXRlID0gZnVuY3Rpb24gKGRlbGF5LCBmcm9tLCB0bywgbG9vcCwg
c3BlZWRSYXRpbywgd2VpZ2h0KSB7CisgICAgICAgIGlmICh3ZWlnaHQgPT09IHZvaWQgMCkgeyB3
ZWlnaHQgPSAtMS4wOyB9CisgICAgICAgIHZhciBhbmltYXRpb24gPSB0aGlzLl9hbmltYXRpb247
CisgICAgICAgIHZhciB0YXJnZXRQcm9wZXJ0eVBhdGggPSBhbmltYXRpb24udGFyZ2V0UHJvcGVy
dHlQYXRoOworICAgICAgICBpZiAoIXRhcmdldFByb3BlcnR5UGF0aCB8fCB0YXJnZXRQcm9wZXJ0
eVBhdGgubGVuZ3RoIDwgMSkgeworICAgICAgICAgICAgdGhpcy5fc3RvcHBlZCA9IHRydWU7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJldHVyblZh
bHVlID0gdHJ1ZTsKKyAgICAgICAgLy8gQ2hlY2sgbGltaXRzCisgICAgICAgIGlmIChmcm9tIDwg
dGhpcy5fbWluRnJhbWUgfHwgZnJvbSA+IHRoaXMuX21heEZyYW1lKSB7CisgICAgICAgICAgICBm
cm9tID0gdGhpcy5fbWluRnJhbWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRvIDwgdGhpcy5f
bWluRnJhbWUgfHwgdG8gPiB0aGlzLl9tYXhGcmFtZSkgeworICAgICAgICAgICAgdG8gPSB0aGlz
Ll9tYXhGcmFtZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcmFuZ2UgPSB0byAtIGZyb207Cisg
ICAgICAgIHZhciBvZmZzZXRWYWx1ZTsKKyAgICAgICAgLy8gQ29tcHV0ZSByYXRpbyB3aGljaCBy
ZXByZXNlbnRzIHRoZSBmcmFtZSBkZWx0YSBiZXR3ZWVuIGZyb20gYW5kIHRvCisgICAgICAgIHZh
ciByYXRpbyA9IChkZWxheSAqIChhbmltYXRpb24uZnJhbWVQZXJTZWNvbmQgKiBzcGVlZFJhdGlv
KSAvIDEwMDAuMCkgKyB0aGlzLl9yYXRpb09mZnNldDsKKyAgICAgICAgdmFyIGhpZ2hMaW1pdFZh
bHVlID0gMDsKKyAgICAgICAgdGhpcy5fcHJldmlvdXNEZWxheSA9IGRlbGF5OworICAgICAgICB0
aGlzLl9wcmV2aW91c1JhdGlvID0gcmF0aW87CisgICAgICAgIGlmICghbG9vcCAmJiAodG8gPj0g
ZnJvbSAmJiByYXRpbyA+PSByYW5nZSkpIHsgLy8gSWYgd2UgYXJlIG91dCBvZiByYW5nZSBhbmQg
bm90IGxvb3BpbmcgZ2V0IGJhY2sgdG8gY2FsbGVyCisgICAgICAgICAgICByZXR1cm5WYWx1ZSA9
IGZhbHNlOworICAgICAgICAgICAgaGlnaExpbWl0VmFsdWUgPSBhbmltYXRpb24uX2dldEtleVZh
bHVlKHRoaXMuX21heFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghbG9vcCAm
JiAoZnJvbSA+PSB0byAmJiByYXRpbyA8PSByYW5nZSkpIHsKKyAgICAgICAgICAgIHJldHVyblZh
bHVlID0gZmFsc2U7CisgICAgICAgICAgICBoaWdoTGltaXRWYWx1ZSA9IGFuaW1hdGlvbi5fZ2V0
S2V5VmFsdWUodGhpcy5fbWluVmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRo
aXMuX2FuaW1hdGlvblN0YXRlLmxvb3BNb2RlICE9PSBfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTkxPT1BNT0RFX0NZQ0xFKSB7Cisg
ICAgICAgICAgICB2YXIga2V5T2Zmc2V0ID0gdG8udG9TdHJpbmcoKSArIGZyb20udG9TdHJpbmco
KTsKKyAgICAgICAgICAgIGlmICghdGhpcy5fb2Zmc2V0c0NhY2hlW2tleU9mZnNldF0pIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9hbmltYXRpb25TdGF0ZS5yZXBlYXRDb3VudCA9IDA7CisgICAg
ICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uU3RhdGUubG9vcE1vZGUgPSBfYW5pbWF0aW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTkxPT1BNT0RF
X0NZQ0xFOworICAgICAgICAgICAgICAgIHZhciBmcm9tVmFsdWUgPSBhbmltYXRpb24uX2ludGVy
cG9sYXRlKGZyb20sIHRoaXMuX2FuaW1hdGlvblN0YXRlKTsKKyAgICAgICAgICAgICAgICB2YXIg
dG9WYWx1ZSA9IGFuaW1hdGlvbi5faW50ZXJwb2xhdGUodG8sIHRoaXMuX2FuaW1hdGlvblN0YXRl
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbmltYXRpb25TdGF0ZS5sb29wTW9kZSA9IHRoaXMu
X2dldENvcnJlY3RMb29wTW9kZSgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYW5pbWF0aW9u
LmRhdGFUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZsb2F0CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBbmlt
YXRpb24iXS5BTklNQVRJT05UWVBFX0ZMT0FUOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5fb2Zmc2V0c0NhY2hlW2tleU9mZnNldF0gPSB0b1ZhbHVlIC0gZnJvbVZhbHVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIC8vIFF1YXRlcm5p
b24KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVfUVVBVEVSTklPTjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldHNDYWNoZVtrZXlPZmZzZXRdID0gdG9WYWx1
ZS5zdWJ0cmFjdChmcm9tVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFZlY3RvcjMKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBf
YW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFuaW1hdGlvbiJdLkFOSU1B
VElPTlRZUEVfVkVDVE9SMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldHND
YWNoZVtrZXlPZmZzZXRdID0gdG9WYWx1ZS5zdWJ0cmFjdChmcm9tVmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAvLyBWZWN0b3IyCisgICAgICAgICAgICAgICAgICAgIGNhc2UgX2FuaW1hdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05UWVBF
X1ZFQ1RPUjI6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vZmZzZXRzQ2FjaGVba2V5
T2Zmc2V0XSA9IHRvVmFsdWUuc3VidHJhY3QoZnJvbVZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gU2l6ZQorICAgICAgICAgICAgICAgICAgICBjYXNlIF9hbmltYXRpb25fX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9TSVpFOgorICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0c0NhY2hlW2tleU9mZnNldF0gPSB0b1Zh
bHVlLnN1YnRyYWN0KGZyb21WYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbG9yMwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIF9hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9DT0xPUjM6CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9vZmZzZXRzQ2FjaGVba2V5T2Zmc2V0XSA9IHRvVmFsdWUuc3VidHJh
Y3QoZnJvbVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0
aGlzLl9oaWdoTGltaXRzQ2FjaGVba2V5T2Zmc2V0XSA9IHRvVmFsdWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBoaWdoTGltaXRWYWx1ZSA9IHRoaXMuX2hpZ2hMaW1pdHNDYWNoZVtrZXlP
ZmZzZXRdOworICAgICAgICAgICAgb2Zmc2V0VmFsdWUgPSB0aGlzLl9vZmZzZXRzQ2FjaGVba2V5
T2Zmc2V0XTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2Zmc2V0VmFsdWUgPT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgc3dpdGNoIChhbmltYXRpb24uZGF0YVR5cGUpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGbG9hdAorICAgICAgICAgICAgICAgIGNhc2UgX2FuaW1hdGlvbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05UWVBFX0ZMT0FUOgor
ICAgICAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIC8vIFF1YXRlcm5pb24KKyAgICAgICAgICAgICAgICBj
YXNlIF9hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQW5pbWF0aW9uIl0u
QU5JTUFUSU9OVFlQRV9RVUFURVJOSU9OOgorICAgICAgICAgICAgICAgICAgICBvZmZzZXRWYWx1
ZSA9IF9zdGF0aWNPZmZzZXRWYWx1ZVF1YXRlcm5pb247CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIC8vIFZlY3RvcjMKKyAgICAgICAgICAgICAgICBjYXNlIF9h
bmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQW5pbWF0aW9uIl0uQU5JTUFU
SU9OVFlQRV9WRUNUT1IzOgorICAgICAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZSA9IF9zdGF0
aWNPZmZzZXRWYWx1ZVZlY3RvcjM7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIC8vIFZlY3RvcjIKKyAgICAgICAgICAgICAgICBjYXNlIF9hbmltYXRpb25fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9WRUNU
T1IyOgorICAgICAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZSA9IF9zdGF0aWNPZmZzZXRWYWx1
ZVZlY3RvcjI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8v
IFNpemUKKyAgICAgICAgICAgICAgICBjYXNlIF9hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9TSVpFOgorICAgICAgICAgICAg
ICAgICAgICBvZmZzZXRWYWx1ZSA9IF9zdGF0aWNPZmZzZXRWYWx1ZVNpemU7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8vIENvbG9yMworICAgICAgICAgICAg
ICAgIGNhc2UgX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBbmltYXRp
b24iXS5BTklNQVRJT05UWVBFX0NPTE9SMzoKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VmFs
dWUgPSBfc3RhdGljT2Zmc2V0VmFsdWVDb2xvcjM7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgLy8gQ29tcHV0ZSB2YWx1ZQorICAgICAgICB2YXIgY3VycmVudEZyYW1lOworICAg
ICAgICBpZiAodGhpcy5faG9zdCAmJiB0aGlzLl9ob3N0LnN5bmNSb290KSB7CisgICAgICAgICAg
ICB2YXIgc3luY1Jvb3QgPSB0aGlzLl9ob3N0LnN5bmNSb290OworICAgICAgICAgICAgdmFyIGhv
c3ROb3JtYWxpemVkRnJhbWUgPSAoc3luY1Jvb3QubWFzdGVyRnJhbWUgLSBzeW5jUm9vdC5mcm9t
RnJhbWUpIC8gKHN5bmNSb290LnRvRnJhbWUgLSBzeW5jUm9vdC5mcm9tRnJhbWUpOworICAgICAg
ICAgICAgY3VycmVudEZyYW1lID0gZnJvbSArICh0byAtIGZyb20pICogaG9zdE5vcm1hbGl6ZWRG
cmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFt
ZSA9IChyZXR1cm5WYWx1ZSAmJiByYW5nZSAhPT0gMCkgPyBmcm9tICsgcmF0aW8gJSByYW5nZSA6
IHRvOworICAgICAgICB9CisgICAgICAgIC8vIFJlc2V0IGV2ZW50cyBpZiBsb29waW5nCisgICAg
ICAgIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7CisgICAgICAgIGlmIChyYW5nZSA+IDAgJiYg
dGhpcy5jdXJyZW50RnJhbWUgPiBjdXJyZW50RnJhbWUgfHwKKyAgICAgICAgICAgIHJhbmdlIDwg
MCAmJiB0aGlzLmN1cnJlbnRGcmFtZSA8IGN1cnJlbnRGcmFtZSkgeworICAgICAgICAgICAgdGhp
cy5fb25Mb29wKCk7CisgICAgICAgICAgICAvLyBOZWVkIHRvIHJlc2V0IGFuaW1hdGlvbiBldmVu
dHMKKyAgICAgICAgICAgIGlmIChldmVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGV2ZW50cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFldmVudHNbaW5kZXhdLm9ubHlPbmNlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyByZXNldCBldmVudCwgdGhlIGFuaW1hdGlvbiBpcyBsb29waW5nCisg
ICAgICAgICAgICAgICAgICAgICAgICBldmVudHNbaW5kZXhdLmlzRG9uZSA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2N1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZTsKKyAgICAg
ICAgdGhpcy5fYW5pbWF0aW9uU3RhdGUucmVwZWF0Q291bnQgPSByYW5nZSA9PT0gMCA/IDAgOiAo
cmF0aW8gLyByYW5nZSkgPj4gMDsKKyAgICAgICAgdGhpcy5fYW5pbWF0aW9uU3RhdGUuaGlnaExp
bWl0VmFsdWUgPSBoaWdoTGltaXRWYWx1ZTsKKyAgICAgICAgdGhpcy5fYW5pbWF0aW9uU3RhdGUu
b2Zmc2V0VmFsdWUgPSBvZmZzZXRWYWx1ZTsKKyAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGFu
aW1hdGlvbi5faW50ZXJwb2xhdGUoY3VycmVudEZyYW1lLCB0aGlzLl9hbmltYXRpb25TdGF0ZSk7
CisgICAgICAgIC8vIFNldCB2YWx1ZQorICAgICAgICB0aGlzLnNldFZhbHVlKGN1cnJlbnRWYWx1
ZSwgd2VpZ2h0KTsKKyAgICAgICAgLy8gQ2hlY2sgZXZlbnRzCisgICAgICAgIGlmIChldmVudHMu
bGVuZ3RoKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZXZlbnRz
Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBjdXJyZW50
IGZyYW1lIGhhcyBwYXNzZWQgZXZlbnQgZnJhbWUgYW5kIHRoYXQgZXZlbnQgZnJhbWUgaXMgd2l0
aGluIHRoZSBjdXJyZW50IHJhbmdlCisgICAgICAgICAgICAgICAgLy8gQWxzbywgaGFuZGxlIGJv
dGggZm9yd2FyZCBhbmQgcmV2ZXJzZSBhbmltYXRpb25zCisgICAgICAgICAgICAgICAgaWYgKChy
YW5nZSA+IDAgJiYgY3VycmVudEZyYW1lID49IGV2ZW50c1tpbmRleF0uZnJhbWUgJiYgZXZlbnRz
W2luZGV4XS5mcmFtZSA+PSBmcm9tKSB8fAorICAgICAgICAgICAgICAgICAgICAocmFuZ2UgPCAw
ICYmIGN1cnJlbnRGcmFtZSA8PSBldmVudHNbaW5kZXhdLmZyYW1lICYmIGV2ZW50c1tpbmRleF0u
ZnJhbWUgPD0gZnJvbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gZXZlbnRz
W2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFldmVudC5pc0RvbmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIGV2ZW50IHNob3VsZCBiZSBkb25lIG9ubHkgb25jZSwg
cmVtb3ZlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50Lm9ubHlPbmNlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLnNwbGljZShpbmRleCwgMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgtLTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmlzRG9uZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC5hY3Rpb24oY3VycmVudEZyYW1lKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgZXZlbnQgaGFzIGFscmVh
ZHkgYmUgZG9uZS4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFyZXR1cm5WYWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fc3RvcHBlZCA9
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH07Cisg
ICAgcmV0dXJuIFJ1bnRpbWVBbmltYXRpb247Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL0F1ZGlvL2FuYWx5c2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vQXVkaW8vYW5hbHlzZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuYWx5c2VyICovCisvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuYWx5c2VyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBBbmFseXNlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworCisvKioKKyAqIENs
YXNzIHVzZWQgdG8gd29yayB3aXRoIHNvdW5kIGFuYWx5emVyIHVzaW5nIGZhc3QgZm91cmllciB0
cmFuc2Zvcm0gKEZGVCkKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9w
bGF5aW5nX3NvdW5kc19hbmRfbXVzaWMKKyAqLwordmFyIEFuYWx5c2VyID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgYW5hbHlzZXIK
KyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyBob3N0aW5nIHNjZW5lCisgICAgICovCisgICAg
ZnVuY3Rpb24gQW5hbHlzZXIoc2NlbmUpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
b3Igc2V0cyB0aGUgc21vb3RoaW5nCisgICAgICAgICAqIEBpZ25vcmVuYW1pbmcKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuU01PT1RISU5HID0gMC43NTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3Igc2V0cyB0aGUgRkZUIHRhYmxlIHNpemUKKyAgICAgICAgICogQGlnbm9yZW5h
bWluZworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5GRlRfU0laRSA9IDUxMjsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgYmFyIGdyYXBoIGFtcGxpdHVkZQorICAg
ICAgICAgKiBAaWdub3JlbmFtaW5nCisgICAgICAgICAqLworICAgICAgICB0aGlzLkJBUkdSQVBI
QU1QTElUVURFID0gMjU2OworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgZGVidWcgY2FudmFzCisgICAgICAgICAqIEBpZ25vcmVuYW1pbmcK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuREVCVUdDQU5WQVNQT1MgPSB7IHg6IDIwLCB5OiAy
MCB9OworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBkZWJ1ZyBjYW52
YXMgc2l6ZQorICAgICAgICAgKiBAaWdub3JlbmFtaW5nCisgICAgICAgICAqLworICAgICAgICB0
aGlzLkRFQlVHQ0FOVkFTU0laRSA9IHsgd2lkdGg6IDMyMCwgaGVpZ2h0OiAyMDAgfTsKKyAgICAg
ICAgdGhpcy5fc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgdGhpcy5fYXVkaW9FbmdpbmUgPSBfRW5n
aW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uYXVkaW9F
bmdpbmU7CisgICAgICAgIGlmICh0aGlzLl9hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiB0
aGlzLl9hdWRpb0VuZ2luZS5hdWRpb0NvbnRleHQpIHsKKyAgICAgICAgICAgIHRoaXMuX3dlYkF1
ZGlvQW5hbHlzZXIgPSB0aGlzLl9hdWRpb0VuZ2luZS5hdWRpb0NvbnRleHQuY3JlYXRlQW5hbHlz
ZXIoKTsKKyAgICAgICAgICAgIHRoaXMuX3dlYkF1ZGlvQW5hbHlzZXIubWluRGVjaWJlbHMgPSAt
MTQwOworICAgICAgICAgICAgdGhpcy5fd2ViQXVkaW9BbmFseXNlci5tYXhEZWNpYmVscyA9IDA7
CisgICAgICAgICAgICB0aGlzLl9ieXRlRnJlcXMgPSBuZXcgVWludDhBcnJheSh0aGlzLl93ZWJB
dWRpb0FuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KTsKKyAgICAgICAgICAgIHRoaXMuX2J5dGVU
aW1lID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5fd2ViQXVkaW9BbmFseXNlci5mcmVxdWVuY3lCaW5D
b3VudCk7CisgICAgICAgICAgICB0aGlzLl9mbG9hdEZyZXFzID0gbmV3IEZsb2F0MzJBcnJheSh0
aGlzLl93ZWJBdWRpb0FuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIG51bWJlciBvZiBkYXRhIHZhbHVlcyB5b3Ugd2ls
bCBoYXZlIHRvIHBsYXkgd2l0aCBmb3IgdGhlIHZpc3VhbGl6YXRpb24KKyAgICAgKiBAc2VlIGh0
dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BbmFseXNlck5v
ZGUvZnJlcXVlbmN5QmluQ291bnQKKyAgICAgKiBAcmV0dXJucyBhIG51bWJlcgorICAgICAqLwor
ICAgIEFuYWx5c2VyLnByb3RvdHlwZS5nZXRGcmVxdWVuY3lCaW5Db3VudCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKHRoaXMuX2F1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fd2ViQXVkaW9BbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudDsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGZyZXF1ZW5jeSBk
YXRhIGFzIGEgYnl0ZSBhcnJheQorICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxs
YS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0FuYWx5c2VyTm9kZS9nZXRCeXRlRnJlcXVlbmN5RGF0
YQorICAgICAqIEByZXR1cm5zIGEgVWludDhBcnJheQorICAgICAqLworICAgIEFuYWx5c2VyLnBy
b3RvdHlwZS5nZXRCeXRlRnJlcXVlbmN5RGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMuX2F1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvKSB7CisgICAgICAgICAgICB0aGlzLl93
ZWJBdWRpb0FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCA9IHRoaXMuU01PT1RISU5HOwor
ICAgICAgICAgICAgdGhpcy5fd2ViQXVkaW9BbmFseXNlci5mZnRTaXplID0gdGhpcy5GRlRfU0la
RTsKKyAgICAgICAgICAgIHRoaXMuX3dlYkF1ZGlvQW5hbHlzZXIuZ2V0Qnl0ZUZyZXF1ZW5jeURh
dGEodGhpcy5fYnl0ZUZyZXFzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fYnl0
ZUZyZXFzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCB3YXZlZm9y
bSBhcyBhIGJ5dGUgYXJyYXkKKyAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEu
b3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BbmFseXNlck5vZGUvZ2V0Qnl0ZVRpbWVEb21haW5EYXRh
CisgICAgICogQHJldHVybnMgYSBVaW50OEFycmF5CisgICAgICovCisgICAgQW5hbHlzZXIucHJv
dG90eXBlLmdldEJ5dGVUaW1lRG9tYWluRGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMuX2F1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvKSB7CisgICAgICAgICAgICB0aGlzLl93
ZWJBdWRpb0FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCA9IHRoaXMuU01PT1RISU5HOwor
ICAgICAgICAgICAgdGhpcy5fd2ViQXVkaW9BbmFseXNlci5mZnRTaXplID0gdGhpcy5GRlRfU0la
RTsKKyAgICAgICAgICAgIHRoaXMuX3dlYkF1ZGlvQW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5E
YXRhKHRoaXMuX2J5dGVUaW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fYnl0
ZVRpbWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGZyZXF1ZW5j
eSBkYXRhIGFzIGEgZmxvYXQgYXJyYXkKKyAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BbmFseXNlck5vZGUvZ2V0Qnl0ZUZyZXF1ZW5j
eURhdGEKKyAgICAgKiBAcmV0dXJucyBhIEZsb2F0MzJBcnJheQorICAgICAqLworICAgIEFuYWx5
c2VyLnByb3RvdHlwZS5nZXRGbG9hdEZyZXF1ZW5jeURhdGEgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICh0aGlzLl9hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbykgeworICAgICAgICAgICAg
dGhpcy5fd2ViQXVkaW9BbmFseXNlci5zbW9vdGhpbmdUaW1lQ29uc3RhbnQgPSB0aGlzLlNNT09U
SElORzsKKyAgICAgICAgICAgIHRoaXMuX3dlYkF1ZGlvQW5hbHlzZXIuZmZ0U2l6ZSA9IHRoaXMu
RkZUX1NJWkU7CisgICAgICAgICAgICB0aGlzLl93ZWJBdWRpb0FuYWx5c2VyLmdldEZsb2F0RnJl
cXVlbmN5RGF0YSh0aGlzLl9mbG9hdEZyZXFzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dGhpcy5fZmxvYXRGcmVxczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbmRlcnMgdGhlIGRl
YnVnIGNhbnZhcworICAgICAqLworICAgIEFuYWx5c2VyLnByb3RvdHlwZS5kcmF3RGVidWdDYW52
YXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlm
ICh0aGlzLl9hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbykgeworICAgICAgICAgICAgaWYgKCF0
aGlzLl9kZWJ1Z0NhbnZhcykgeworICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnQ2FudmFzID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgICAgICAgICAgICAgdGhpcy5f
ZGVidWdDYW52YXMud2lkdGggPSB0aGlzLkRFQlVHQ0FOVkFTU0laRS53aWR0aDsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9kZWJ1Z0NhbnZhcy5oZWlnaHQgPSB0aGlzLkRFQlVHQ0FOVkFTU0laRS5o
ZWlnaHQ7CisgICAgICAgICAgICAgICAgdGhpcy5fZGVidWdDYW52YXMuc3R5bGUucG9zaXRpb24g
PSAiYWJzb2x1dGUiOworICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnQ2FudmFzLnN0eWxlLnRv
cCA9IHRoaXMuREVCVUdDQU5WQVNQT1MueSArICJweCI7CisgICAgICAgICAgICAgICAgdGhpcy5f
ZGVidWdDYW52YXMuc3R5bGUubGVmdCA9IHRoaXMuREVCVUdDQU5WQVNQT1MueCArICJweCI7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fZGVidWdDYW52YXNDb250ZXh0ID0gdGhpcy5fZGVidWdDYW52
YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKHRoaXMuX2RlYnVnQ2FudmFzKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3Rl
ckZ1bmMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmRyYXdEZWJ1
Z0NhbnZhcygpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdGhpcy5fc2Nl
bmUucmVnaXN0ZXJCZWZvcmVSZW5kZXIodGhpcy5fcmVnaXN0ZXJGdW5jKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9yZWdpc3RlckZ1bmMgJiYgdGhpcy5fZGVidWdDYW52
YXNDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgdmFyIHdvcmtpbmdBcnJheSA9IHRoaXMuZ2V0
Qnl0ZUZyZXF1ZW5jeURhdGEoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1Z0NhbnZhc0Nv
bnRleHQuZmlsbFN0eWxlID0gJ3JnYigwLCAwLCAwKSc7CisgICAgICAgICAgICAgICAgdGhpcy5f
ZGVidWdDYW52YXNDb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuREVCVUdDQU5WQVNTSVpFLndp
ZHRoLCB0aGlzLkRFQlVHQ0FOVkFTU0laRS5oZWlnaHQpOworICAgICAgICAgICAgICAgIC8vIERy
YXcgdGhlIGZyZXF1ZW5jeSBkb21haW4gY2hhcnQuCisgICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLmdldEZyZXF1ZW5jeUJpbkNvdW50KCk7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgdmFsdWUgPSB3b3JraW5nQXJyYXlbaV07CisgICAgICAgICAgICAgICAg
ICAgIHZhciBwZXJjZW50ID0gdmFsdWUgLyB0aGlzLkJBUkdSQVBIQU1QTElUVURFOworICAgICAg
ICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5ERUJVR0NBTlZBU1NJWkUuaGVpZ2h0ICog
cGVyY2VudDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuREVCVUdDQU5W
QVNTSVpFLmhlaWdodCAtIGhlaWdodCAtIDE7CisgICAgICAgICAgICAgICAgICAgIHZhciBiYXJX
aWR0aCA9IHRoaXMuREVCVUdDQU5WQVNTSVpFLndpZHRoIC8gdGhpcy5nZXRGcmVxdWVuY3lCaW5D
b3VudCgpOworICAgICAgICAgICAgICAgICAgICB2YXIgaHVlID0gaSAvIHRoaXMuZ2V0RnJlcXVl
bmN5QmluQ291bnQoKSAqIDM2MDsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWdDYW52
YXNDb250ZXh0LmZpbGxTdHlsZSA9ICdoc2woJyArIGh1ZSArICcsIDEwMCUsIDUwJSknOworICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1Z0NhbnZhc0NvbnRleHQuZmlsbFJlY3QoaSAqIGJh
cldpZHRoLCBvZmZzZXQsIGJhcldpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU3RvcHMgcmVu
ZGVyaW5nIHRoZSBkZWJ1ZyBjYW52YXMgYW5kIHJlbW92ZXMgaXQKKyAgICAgKi8KKyAgICBBbmFs
eXNlci5wcm90b3R5cGUuc3RvcERlYnVnQ2FudmFzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAodGhpcy5fZGVidWdDYW52YXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZWdpc3RlckZ1
bmMpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS51bnJlZ2lzdGVyQmVmb3JlUmVuZGVy
KHRoaXMuX3JlZ2lzdGVyRnVuYyk7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJGdW5j
ID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3Zl
Q2hpbGQodGhpcy5fZGVidWdDYW52YXMpOworICAgICAgICAgICAgdGhpcy5fZGVidWdDYW52YXMg
PSBudWxsOworICAgICAgICAgICAgdGhpcy5fZGVidWdDYW52YXNDb250ZXh0ID0gbnVsbDsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ29ubmVjdHMgdHdvIGF1ZGlvIG5vZGVz
CisgICAgICogQHBhcmFtIGlucHV0QXVkaW9Ob2RlIGRlZmluZXMgZmlyc3Qgbm9kZSB0byBjb25u
ZWN0CisgICAgICogQHBhcmFtIG91dHB1dEF1ZGlvTm9kZSBkZWZpbmVzIHNlY29uZCBub2RlIHRv
IGNvbm5lY3QKKyAgICAgKi8KKyAgICBBbmFseXNlci5wcm90b3R5cGUuY29ubmVjdEF1ZGlvTm9k
ZXMgPSBmdW5jdGlvbiAoaW5wdXRBdWRpb05vZGUsIG91dHB1dEF1ZGlvTm9kZSkgeworICAgICAg
ICBpZiAodGhpcy5fYXVkaW9FbmdpbmUuY2FuVXNlV2ViQXVkaW8pIHsKKyAgICAgICAgICAgIGlu
cHV0QXVkaW9Ob2RlLmNvbm5lY3QodGhpcy5fd2ViQXVkaW9BbmFseXNlcik7CisgICAgICAgICAg
ICB0aGlzLl93ZWJBdWRpb0FuYWx5c2VyLmNvbm5lY3Qob3V0cHV0QXVkaW9Ob2RlKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZXMgYWxsIGFzc29jaWF0ZWQgcmVz
b3VyY2VzCisgICAgICovCisgICAgQW5hbHlzZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGlmICh0aGlzLl9hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbykgewor
ICAgICAgICAgICAgdGhpcy5fd2ViQXVkaW9BbmFseXNlci5kaXNjb25uZWN0KCk7CisgICAgICAg
IH0KKyAgICB9OworICAgIHJldHVybiBBbmFseXNlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vQXVkaW8vYXVkaW9FbmdpbmUudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9BdWRpby9hdWRpb0VuZ2luZS50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQXVk
aW9FbmdpbmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXVkaW9Fbmdp
bmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEF1ZGlvRW5naW5lOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9v
YnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
aXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUu
dHMiKTsKKworCisKKy8vIFNldHMgdGhlIGRlZmF1bHQgYXVkaW8gZW5naW5lIHRvIEJhYnlsb24u
anMKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmUi
XS5BdWRpb0VuZ2luZUZhY3RvcnkgPSBmdW5jdGlvbiAoaG9zdEVsZW1lbnQpIHsgcmV0dXJuIG5l
dyBBdWRpb0VuZ2luZShob3N0RWxlbWVudCk7IH07CisvKioKKyAqIFRoaXMgcmVwcmVzZW50cyB0
aGUgZGVmYXVsdCBhdWRpbyBlbmdpbmUgdXNlZCBpbiBiYWJ5bG9uLgorICogSXQgaXMgcmVzcG9u
c2libGUgdG8gcGxheSwgc3luY2hyb25pemUgYW5kIGFuYWx5c2Ugc291bmRzIHRocm91Z2hvdXQg
dGhlICBhcHBsaWNhdGlvbi4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9wbGF5aW5nX3NvdW5kc19hbmRfbXVzaWMKKyAqLwordmFyIEF1ZGlvRW5naW5lID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5l
dyBhdWRpbyBlbmdpbmUuCisgICAgICoKKyAgICAgKiBUaGVyZSBzaG91bGQgYmUgb25seSBvbmUg
cGVyIHBhZ2UgYXMgc29tZSBicm93c2VycyByZXN0cmljdCB0aGUgbnVtYmVyCisgICAgICogb2Yg
YXVkaW8gY29udGV4dHMgeW91IGNhbiBjcmVhdGUuCisgICAgICogQHBhcmFtIGhvc3RFbGVtZW50
IGRlZmluZXMgdGhlIGhvc3QgZWxlbWVudCB3aGVyZSB0byBkaXNwbGF5IHRoZSBtdXRlIGljb24g
aWYgbmVjZXNzYXJ5CisgICAgICovCisgICAgZnVuY3Rpb24gQXVkaW9FbmdpbmUoaG9zdEVsZW1l
bnQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKGhvc3RFbGVtZW50
ID09PSB2b2lkIDApIHsgaG9zdEVsZW1lbnQgPSBudWxsOyB9CisgICAgICAgIHRoaXMuX2F1ZGlv
Q29udGV4dCA9IG51bGw7CisgICAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dEluaXRpYWxpemVkID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX211dGVCdXR0b24gPSBudWxsOworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB3aGV0aGVyIHRoZSBjdXJyZW50IGhvc3Qgc3VwcG9ydHMgV2ViIEF1ZGlv
IGFuZCB0aHVzIGNvdWxkIGNyZWF0ZSBBdWRpb0NvbnRleHRzLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5jYW5Vc2VXZWJBdWRpbyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICog
RGVmaW5lcyBpZiBCYWJ5bG9uIHNob3VsZCBlbWl0IGEgd2FybmluZyBpZiBXZWJBdWRpbyBpcyBu
b3Qgc3VwcG9ydGVkLgorICAgICAgICAgKiBAaWdub3JlTmFtaW5nCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLldhcm5lZFdlYkF1ZGlvVW5zdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgd2hldGhlciBvciBub3QgbXAzIGFyZSBzdXBwb3J0ZWQgYnkgeW91
ciBicm93c2VyLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pc01QM3N1cHBvcnRlZCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCBvZ2cgYXJl
IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmlz
T0dHc3VwcG9ydGVkID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdoZXRo
ZXIgYXVkaW8gaGFzIGJlZW4gdW5sb2NrZWQgb24gdGhlIGRldmljZS4KKyAgICAgICAgICogU29t
ZSBCcm93c2VycyBoYXZlIHN0cm9uZyByZXN0cmljdGlvbnMgYWJvdXQgQXVkaW8gYW5kIHdvbiB0
IGF1dG9wbGF5IHVubGVzcworICAgICAgICAgKiBhIHVzZXIgaW50ZXJhY3Rpb24gaGFzIGhhcHBl
bmVkLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy51bmxvY2tlZCA9IHRydWU7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBEZWZpbmVzIGlmIHRoZSBhdWRpbyBlbmdpbmUgcmVsaWVzIG9uIGEg
Y3VzdG9tIHVubG9ja2VkIGJ1dHRvbi4KKyAgICAgICAgICogSW4gdGhpcyBjYXNlLCB0aGUgZW1i
ZWRkZWQgYnV0dG9uIHdpbGwgbm90IGJlIGRpc3BsYXllZC4KKyAgICAgICAgICovCisgICAgICAg
IHRoaXMudXNlQ3VzdG9tVW5sb2NrZWRCdXR0b24gPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEV2ZW50IHJhaXNlZCB3aGVuIGF1ZGlvIGhhcyBiZWVuIHVubG9ja2VkIG9uIHRoZSBi
cm93c2VyLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkF1ZGlvVW5sb2NrZWRPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFdmVudCByYWlzZWQgd2hl
biBhdWRpbyBoYXMgYmVlbiBsb2NrZWQgb24gdGhlIGJyb3dzZXIuCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLm9uQXVkaW9Mb2NrZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIHRo
aXMuX3RyeVRvUnVuID0gZmFsc2U7CisgICAgICAgIHRoaXMuX29uUmVzaXplID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgX3RoaXMuX21vdmVCdXR0b25Ub1RvcExlZnQoKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuQXVkaW9Db250ZXh0ICE9PSAndW5kZWZpbmVk
JyB8fCB0eXBlb2Ygd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgICAgIHdpbmRvdy5BdWRpb0NvbnRleHQgPSB3aW5kb3cuQXVkaW9Db250ZXh0IHx8
IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQ7CisgICAgICAgICAgICB0aGlzLmNhblVzZVdlYkF1
ZGlvID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYXVkaW9FbGVtID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnYXVkaW8nKTsKKyAgICAgICAgdGhpcy5faG9zdEVsZW1lbnQgPSBob3N0
RWxlbWVudDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChhdWRpb0VsZW0gJiYgISFh
dWRpb0VsZW0uY2FuUGxheVR5cGUgJiYgYXVkaW9FbGVtLmNhblBsYXlUeXBlKCdhdWRpby9tcGVn
OyBjb2RlY3M9Im1wMyInKS5yZXBsYWNlKC9ebm8kLywgJycpKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5pc01QM3N1cHBvcnRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIC8vIHByb3RlY3QgZXJyb3IgZHVyaW5nIGNh
cGFiaWxpdHkgY2hlY2suCisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlm
IChhdWRpb0VsZW0gJiYgISFhdWRpb0VsZW0uY2FuUGxheVR5cGUgJiYgYXVkaW9FbGVtLmNhblBs
YXlUeXBlKCdhdWRpby9vZ2c7IGNvZGVjcz0idm9yYmlzIicpLnJlcGxhY2UoL15ubyQvLCAnJykp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmlzT0dHc3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgLy8gcHJv
dGVjdCBlcnJvciBkdXJpbmcgY2FwYWJpbGl0eSBjaGVjay4KKyAgICAgICAgfQorICAgIH0KKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXVkaW9FbmdpbmUucHJvdG90eXBlLCAiYXVkaW9Db250
ZXh0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgY3VycmVudCBBdWRpb0Nv
bnRleHQgaWYgYXZhaWxhYmxlLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2F1ZGlvQ29udGV4dEluaXRpYWxpemVkKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUF1ZGlvQ29udGV4dCgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVubG9j
a2VkICYmICF0aGlzLl9tdXRlQnV0dG9uKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rp
c3BsYXlNdXRlQnV0dG9uKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29udGV4dDsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgLyoqCisgICAgICogRmxhZ3MgdGhlIGF1ZGlvIGVuZ2luZSBpbiBMb2NrZWQgc3RhdGUuCisg
ICAgICogVGhpcyBoYXBwZW5zIGR1ZSB0byBuZXcgYnJvd3NlciBwb2xpY2llcyBwcmV2ZW50aW5n
IGF1ZGlvIHRvIGF1dG9wbGF5LgorICAgICAqLworICAgIEF1ZGlvRW5naW5lLnByb3RvdHlwZS5s
b2NrID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl90cmlnZ2VyU3VzcGVuZGVkU3RhdGUo
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVubG9ja3MgdGhlIGF1ZGlvIGVuZ2luZSBvbmNl
IGEgdXNlciBhY3Rpb24gaGFzIGJlZW4gZG9uZSBvbiB0aGUgZG9tLgorICAgICAqIFRoaXMgaXMg
aGVscGZ1bCB0byByZXN1bWUgcGxheSBvbmNlIGJyb3dzZXIgcG9saWNpZXMgaGF2ZSBiZWVuIHNh
dGlzZmllZC4KKyAgICAgKi8KKyAgICBBdWRpb0VuZ2luZS5wcm90b3R5cGUudW5sb2NrID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB0aGlzLl90cmlnZ2VyUnVubmluZ1N0YXRlKCk7CisgICAgfTsK
KyAgICBBdWRpb0VuZ2luZS5wcm90b3R5cGUuX3Jlc3VtZUF1ZGlvQ29udGV4dCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIHJlc3VsdDsKKyAgICAgICAgaWYgKHRoaXMuX2F1ZGlvQ29udGV4
dC5yZXN1bWUpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuX2F1ZGlvQ29udGV4dC5yZXN1
bWUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0IHx8IFByb21pc2UucmVzb2x2
ZSgpOworICAgIH07CisgICAgQXVkaW9FbmdpbmUucHJvdG90eXBlLl9pbml0aWFsaXplQXVkaW9D
b250ZXh0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHRo
aXMuY2FuVXNlV2ViQXVkaW8pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9hdWRpb0NvbnRleHQg
PSBuZXcgQXVkaW9Db250ZXh0KCk7CisgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgZ2xvYmFs
IHZvbHVtZSBnYWluIG5vZGUKKyAgICAgICAgICAgICAgICB0aGlzLm1hc3RlckdhaW4gPSB0aGlz
Ll9hdWRpb0NvbnRleHQuY3JlYXRlR2FpbigpOworICAgICAgICAgICAgICAgIHRoaXMubWFzdGVy
R2Fpbi5nYWluLnZhbHVlID0gMTsKKyAgICAgICAgICAgICAgICB0aGlzLm1hc3RlckdhaW4uY29u
bmVjdCh0aGlzLl9hdWRpb0NvbnRleHQuZGVzdGluYXRpb24pOworICAgICAgICAgICAgICAgIHRo
aXMuX2F1ZGlvQ29udGV4dEluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fYXVkaW9Db250ZXh0LnN0YXRlID09PSAicnVubmluZyIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRG8gbm90IHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHVubG9jay4KKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclJ1bm5pbmdTdGF0ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoZSkgeworICAgICAg
ICAgICAgdGhpcy5jYW5Vc2VXZWJBdWRpbyA9IGZhbHNlOworICAgICAgICAgICAgX01pc2NfbG9n
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVycm9yKCJXZWIgQXVk
aW86ICIgKyBlLm1lc3NhZ2UpOworICAgICAgICB9CisgICAgfTsKKyAgICBBdWRpb0VuZ2luZS5w
cm90b3R5cGUuX3RyaWdnZXJSdW5uaW5nU3RhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmICh0aGlzLl90cnlUb1J1bikgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3RyeVRvUnVuID0gdHJ1ZTsKKyAg
ICAgICAgdGhpcy5fcmVzdW1lQXVkaW9Db250ZXh0KCkKKyAgICAgICAgICAgIC50aGVuKGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl90cnlUb1J1biA9IGZhbHNlOworICAgICAgICAg
ICAgaWYgKF90aGlzLl9tdXRlQnV0dG9uKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2hpZGVN
dXRlQnV0dG9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIF90aGlzLl90cnlUb1J1biA9IGZhbHNlOworICAgICAgICAgICAgX3Ro
aXMudW5sb2NrZWQgPSBmYWxzZTsKKyAgICAgICAgfSk7CisgICAgICAgIC8vIE5vdGlmeSB1c2Vy
cyB0aGF0IHRoZSBhdWRpbyBzdGFjayBpcyB1bmxvY2tlZC91bm11dGVkCisgICAgICAgIHRoaXMu
dW5sb2NrZWQgPSB0cnVlOworICAgICAgICB0aGlzLm9uQXVkaW9VbmxvY2tlZE9ic2VydmFibGUu
bm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgIH07CisgICAgQXVkaW9FbmdpbmUucHJvdG90eXBl
Ll90cmlnZ2VyU3VzcGVuZGVkU3RhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMudW5s
b2NrZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5vbkF1ZGlvTG9ja2VkT2JzZXJ2YWJsZS5ub3Rp
ZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIHRoaXMuX2Rpc3BsYXlNdXRlQnV0dG9uKCk7Cisg
ICAgfTsKKyAgICBBdWRpb0VuZ2luZS5wcm90b3R5cGUuX2Rpc3BsYXlNdXRlQnV0dG9uID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy51
c2VDdXN0b21VbmxvY2tlZEJ1dHRvbiB8fCB0aGlzLl9tdXRlQnV0dG9uKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbXV0ZUJ1dHRvbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoIkJVVFRPTiIpOworICAgICAgICB0aGlzLl9tdXRlQnV0dG9uLmNsYXNz
TmFtZSA9ICJiYWJ5bG9uVW5tdXRlSWNvbiI7CisgICAgICAgIHRoaXMuX211dGVCdXR0b24uaWQg
PSAiYmFieWxvblVubXV0ZUljb25CdG4iOworICAgICAgICB0aGlzLl9tdXRlQnV0dG9uLnRpdGxl
ID0gIlVubXV0ZSI7CisgICAgICAgIHZhciBjc3MgPSAiLmJhYnlsb25Vbm11dGVJY29uIHsgcG9z
aXRpb246IGFic29sdXRlOyBsZWZ0OiAyMHB4OyB0b3A6IDIwcHg7IGhlaWdodDogNDBweDsgd2lk
dGg6IDYwcHg7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoNTEsNTEsNTEsMC43KTsgYmFja2dyb3Vu
ZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHZl
cnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJG
MjAwMCUyRnN2ZyUyMiUyMHdpZHRoJTNEJTIyMzklMjIlMjBoZWlnaHQlM0QlMjIzMiUyMiUyMHZp
ZXdCb3glM0QlMjIwJTIwMCUyMDM5JTIwMzIlMjIlM0UlM0NwYXRoJTIwZmlsbCUzRCUyMndoaXRl
JTIyJTIwZCUzRCUyMk05LjYyNSUyMDE4LjkzOGwtMC4wMzElMjAwLjAxNmgtNC45NTNxLTAuMDE2
JTIwMC0wLjAzMS0wLjAxNnYtMTIuNDUzcTAtMC4wMTYlMjAwLjAzMS0wLjAxNmg0Ljk1M3EwLjAz
MSUyMDAlMjAwLjAzMSUyMDAuMDE2djEyLjQ1M3pNMTIuMTI1JTIwNy42ODhsOC43MTktOC43MDN2
MjcuNDUzbC04LjcxOS04LjcxOS0wLjAxNi0wLjA0N3YtOS45Mzh6TTIzLjM1OSUyMDcuODc1bDEu
NDA2LTEuNDA2JTIwNC4yMTklMjA0LjIwMyUyMDQuMjAzLTQuMjAzJTIwMS40MjIlMjAxLjQwNi00
LjIxOSUyMDQuMjE5JTIwNC4yMTklMjA0LjIwMy0xLjQ4NCUyMDEuMzU5LTQuMTQxLTQuMTU2LTQu
MjE5JTIwNC4yMTktMS40MDYtMS40MjIlMjA0LjIxOS00LjIwM3olMjIlM0UlM0MlMkZwYXRoJTNF
JTNDJTJGc3ZnJTNFKTsgIGJhY2tncm91bmQtc2l6ZTogODAlOyBiYWNrZ3JvdW5kLXJlcGVhdDpu
by1yZXBlYXQ7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgYmFja2dyb3VuZC1wb3NpdGlv
bi15OiA0cHg7IGJvcmRlcjogbm9uZTsgb3V0bGluZTogbm9uZTsgdHJhbnNpdGlvbjogdHJhbnNm
b3JtIDAuMTI1cyBlYXNlLW91dDsgY3Vyc29yOiBwb2ludGVyOyB6LWluZGV4OiA5OTk5OyB9IC5i
YWJ5bG9uVW5tdXRlSWNvbjpob3ZlciB7IHRyYW5zZm9ybTogc2NhbGUoMS4wNSkgfSAuYmFieWxv
blVubXV0ZUljb246YWN0aXZlIHsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg1MSw1MSw1MSwxKSB9
IjsKKyAgICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsK
KyAgICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7
CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5k
Q2hpbGQoc3R5bGUpOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX211
dGVCdXR0b24pOworICAgICAgICB0aGlzLl9tb3ZlQnV0dG9uVG9Ub3BMZWZ0KCk7CisgICAgICAg
IHRoaXMuX211dGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBfdGhpcy5fdHJpZ2dlclJ1bm5pbmdTdGF0ZSgpOworICAgICAgICB9
LCB0cnVlKTsKKyAgICAgICAgdGhpcy5fbXV0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGlj
aycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl90cmlnZ2VyUnVubmluZ1N0YXRl
KCk7CisgICAgICAgIH0sIHRydWUpOworICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigi
cmVzaXplIiwgdGhpcy5fb25SZXNpemUpOworICAgIH07CisgICAgQXVkaW9FbmdpbmUucHJvdG90
eXBlLl9tb3ZlQnV0dG9uVG9Ub3BMZWZ0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhp
cy5faG9zdEVsZW1lbnQgJiYgdGhpcy5fbXV0ZUJ1dHRvbikgeworICAgICAgICAgICAgdGhpcy5f
bXV0ZUJ1dHRvbi5zdHlsZS50b3AgPSB0aGlzLl9ob3N0RWxlbWVudC5vZmZzZXRUb3AgKyAyMCAr
ICJweCI7CisgICAgICAgICAgICB0aGlzLl9tdXRlQnV0dG9uLnN0eWxlLmxlZnQgPSB0aGlzLl9o
b3N0RWxlbWVudC5vZmZzZXRMZWZ0ICsgMjAgKyAicHgiOworICAgICAgICB9CisgICAgfTsKKyAg
ICBBdWRpb0VuZ2luZS5wcm90b3R5cGUuX2hpZGVNdXRlQnV0dG9uID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICBpZiAodGhpcy5fbXV0ZUJ1dHRvbikgeworICAgICAgICAgICAgZG9jdW1lbnQuYm9k
eS5yZW1vdmVDaGlsZCh0aGlzLl9tdXRlQnV0dG9uKTsKKyAgICAgICAgICAgIHRoaXMuX211dGVC
dXR0b24gPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXN0cm95
IGFuZCByZWxlYXNlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdWRpbyBjY29u
dGV4dC4KKyAgICAgKi8KKyAgICBBdWRpb0VuZ2luZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuY2FuVXNlV2ViQXVkaW8gJiYgdGhpcy5fYXVkaW9D
b250ZXh0SW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9jb25uZWN0ZWRBbmFs
eXNlciAmJiB0aGlzLl9hdWRpb0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jb25u
ZWN0ZWRBbmFseXNlci5zdG9wRGVidWdDYW52YXMoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9j
b25uZWN0ZWRBbmFseXNlci5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJH
YWluLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICB0aGlzLm1hc3RlckdhaW4uY29ubmVj
dCh0aGlzLl9hdWRpb0NvbnRleHQuZGVzdGluYXRpb24pOworICAgICAgICAgICAgICAgIHRoaXMu
X2Nvbm5lY3RlZEFuYWx5c2VyID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMubWFzdGVyR2Fpbi5nYWluLnZhbHVlID0gMTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLldh
cm5lZFdlYkF1ZGlvVW5zdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faGlkZU11dGVC
dXR0b24oKTsKKyAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRo
aXMuX29uUmVzaXplKTsKKyAgICAgICAgdGhpcy5vbkF1ZGlvVW5sb2NrZWRPYnNlcnZhYmxlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMub25BdWRpb0xvY2tlZE9ic2VydmFibGUuY2xlYXIoKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGdsb2JhbCB2b2x1bWUgc2V0cyBvbiB0aGUg
bWFzdGVyIGdhaW4uCisgICAgICogQHJldHVybnMgdGhlIGdsb2JhbCB2b2x1bWUgaWYgc2V0IG9y
IC0xIG90aGVyd2lzZQorICAgICAqLworICAgIEF1ZGlvRW5naW5lLnByb3RvdHlwZS5nZXRHbG9i
YWxWb2x1bWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLmNhblVzZVdlYkF1ZGlv
ICYmIHRoaXMuX2F1ZGlvQ29udGV4dEluaXRpYWxpemVkKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5tYXN0ZXJHYWluLmdhaW4udmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAq
IFNldHMgdGhlIGdsb2JhbCB2b2x1bWUgb2YgeW91ciBleHBlcmllbmNlIChzZXRzIG9uIHRoZSBt
YXN0ZXIgZ2FpbikuCisgICAgICogQHBhcmFtIG5ld1ZvbHVtZSBEZWZpbmVzIHRoZSBuZXcgZ2xv
YmFsIHZvbHVtZSBvZiB0aGUgYXBwbGljYXRpb24KKyAgICAgKi8KKyAgICBBdWRpb0VuZ2luZS5w
cm90b3R5cGUuc2V0R2xvYmFsVm9sdW1lID0gZnVuY3Rpb24gKG5ld1ZvbHVtZSkgeworICAgICAg
ICBpZiAodGhpcy5jYW5Vc2VXZWJBdWRpbyAmJiB0aGlzLl9hdWRpb0NvbnRleHRJbml0aWFsaXpl
ZCkgeworICAgICAgICAgICAgdGhpcy5tYXN0ZXJHYWluLmdhaW4udmFsdWUgPSBuZXdWb2x1bWU7
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENvbm5lY3QgdGhlIGF1ZGlvIGVu
Z2luZSB0byBhbiBhdWRpbyBhbmFseXNlciBhbGxvd2luZyBzb21lIGFtYXppbmcKKyAgICAgKiBz
eW5jaG9ybml6YXRpb24gYmV0d2VlbiB0aGUgc291bmRzL211c2ljIGFuZCB5b3VyIHZpc3VhbGl6
YXRpb24gKFZ1TWV0ZXIgZm9yIGluc3RhbmNlKS4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3VuZHNfYW5kX211c2ljI3VzaW5nLXRoZS1hbmFs
eXNlcgorICAgICAqIEBwYXJhbSBhbmFseXNlciBUaGUgYW5hbHlzZXIgdG8gY29ubmVjdCB0byB0
aGUgZW5naW5lCisgICAgICovCisgICAgQXVkaW9FbmdpbmUucHJvdG90eXBlLmNvbm5lY3RUb0Fu
YWx5c2VyID0gZnVuY3Rpb24gKGFuYWx5c2VyKSB7CisgICAgICAgIGlmICh0aGlzLl9jb25uZWN0
ZWRBbmFseXNlcikgeworICAgICAgICAgICAgdGhpcy5fY29ubmVjdGVkQW5hbHlzZXIuc3RvcERl
YnVnQ2FudmFzKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuY2FuVXNlV2ViQXVkaW8g
JiYgdGhpcy5fYXVkaW9Db250ZXh0SW5pdGlhbGl6ZWQgJiYgdGhpcy5fYXVkaW9Db250ZXh0KSB7
CisgICAgICAgICAgICB0aGlzLl9jb25uZWN0ZWRBbmFseXNlciA9IGFuYWx5c2VyOworICAgICAg
ICAgICAgdGhpcy5tYXN0ZXJHYWluLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgIHRoaXMuX2Nv
bm5lY3RlZEFuYWx5c2VyLmNvbm5lY3RBdWRpb05vZGVzKHRoaXMubWFzdGVyR2FpbiwgdGhpcy5f
YXVkaW9Db250ZXh0LmRlc3RpbmF0aW9uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJu
IEF1ZGlvRW5naW5lOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9BdWRpby9h
dWRpb1NjZW5lQ29tcG9uZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9BdWRpby9hdWRpb1NjZW5lQ29tcG9uZW50LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IEF1ZGlvU2NlbmVDb21wb25lbnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQXVkaW9TY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXVk
aW9TY2VuZUNvbXBvbmVudDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NvdW5kX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Nv
dW5kICovICIuL0F1ZGlvL3NvdW5kLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Nv
dW5kVHJhY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vc291bmRUcmFjayAqLyAiLi9BdWRpby9zb3VuZFRyYWNrLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9F
bmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lQ29tcG9uZW50
ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Nj
ZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9h
YnN0cmFjdFNjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9hYnN0cmFjdFNjZW5lICovICIuL2Fic3RyYWN0U2NlbmUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXVkaW9FbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXVkaW9FbmdpbmUgKi8gIi4vQXVk
aW8vYXVkaW9FbmdpbmUudHMiKTsKKworCisKKworCisKKworCisvLyBBZGRzIHRoZSBwYXJzZXIg
dG8gdGhlIHNjZW5lIHBhcnNlcnMuCitfYWJzdHJhY3RTY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJBYnN0cmFjdFNjZW5lIl0uQWRkUGFyc2VyKF9zY2VuZUNvbXBvbmVudF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVf
QVVESU8sIGZ1bmN0aW9uIChwYXJzZWREYXRhLCBzY2VuZSwgY29udGFpbmVyLCByb290VXJsKSB7
CisgICAgLy8gVE9ETzogYWRkIHNvdW5kCisgICAgdmFyIGxvYWRlZFNvdW5kcyA9IFtdOworICAg
IHZhciBsb2FkZWRTb3VuZDsKKyAgICBjb250YWluZXIuc291bmRzID0gY29udGFpbmVyLnNvdW5k
cyB8fCBbXTsKKyAgICBpZiAocGFyc2VkRGF0YS5zb3VuZHMgIT09IHVuZGVmaW5lZCAmJiBwYXJz
ZWREYXRhLnNvdW5kcyAhPT0gbnVsbCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGNh
Y2hlID0gcGFyc2VkRGF0YS5zb3VuZHMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7
CisgICAgICAgICAgICB2YXIgcGFyc2VkU291bmQgPSBwYXJzZWREYXRhLnNvdW5kc1tpbmRleF07
CisgICAgICAgICAgICBpZiAoX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFwYXJzZWRTb3VuZC51cmwpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2Vk
U291bmQudXJsID0gcGFyc2VkU291bmQubmFtZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKCFsb2FkZWRTb3VuZHNbcGFyc2VkU291bmQudXJsXSkgeworICAgICAgICAg
ICAgICAgICAgICBsb2FkZWRTb3VuZCA9IF9zb3VuZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJTb3VuZCJdLlBhcnNlKHBhcnNlZFNvdW5kLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAg
ICAgICAgICAgICAgIGxvYWRlZFNvdW5kc1twYXJzZWRTb3VuZC51cmxdID0gbG9hZGVkU291bmQ7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zb3VuZHMucHVzaChsb2FkZWRTb3VuZCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBjb250YWluZXIuc291bmRzLnB1c2goX3NvdW5kX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlNvdW5kIl0uUGFyc2UocGFyc2VkU291bmQsIHNjZW5lLCByb290VXJsLCBsb2Fk
ZWRTb3VuZHNbcGFyc2VkU291bmQudXJsXSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zb3Vu
ZHMucHVzaChuZXcgX3NvdW5kX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNvdW5kIl0o
cGFyc2VkU291bmQubmFtZSwgbnVsbCwgc2NlbmUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBsb2FkZWRTb3VuZHMgPSBbXTsKK30pOworT2JqZWN0LmRlZmluZVByb3Bl
cnR5KF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTY2VuZSJdLnByb3RvdHlw
ZSwgIm1haW5Tb3VuZFRyYWNrIiwgeworICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICB2
YXIgY29tcG8gPSB0aGlzLl9nZXRDb21wb25lbnQoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uTkFNRV9BVURJTyk7
CisgICAgICAgIGlmICghY29tcG8pIHsKKyAgICAgICAgICAgIGNvbXBvID0gbmV3IEF1ZGlvU2Nl
bmVDb21wb25lbnQodGhpcyk7CisgICAgICAgICAgICB0aGlzLl9hZGRDb21wb25lbnQoY29tcG8p
OworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fbWFpblNvdW5kVHJhY2spIHsKKyAgICAg
ICAgICAgIHRoaXMuX21haW5Tb3VuZFRyYWNrID0gbmV3IF9zb3VuZFRyYWNrX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlNvdW5kVHJhY2siXSh0aGlzLCB7IG1haW5UcmFjazogdHJ1ZSB9
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fbWFpblNvdW5kVHJhY2s7CisgICAg
fSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorfSk7Citf
c2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2NlbmUiXS5wcm90b3R5cGUuZ2V0
U291bmRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgIHZhciBpbmRleDsKKyAgICBmb3Ig
KGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm1haW5Tb3VuZFRyYWNrLnNvdW5kQ29sbGVjdGlvbi5s
ZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgaWYgKHRoaXMubWFpblNvdW5kVHJhY2suc291bmRD
b2xsZWN0aW9uW2luZGV4XS5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5tYWluU291bmRUcmFjay5zb3VuZENvbGxlY3Rpb25baW5kZXhdOworICAgICAgICB9CisgICAg
fQorICAgIGlmICh0aGlzLnNvdW5kVHJhY2tzKSB7CisgICAgICAgIGZvciAodmFyIHNkSW5kZXgg
PSAwOyBzZEluZGV4IDwgdGhpcy5zb3VuZFRyYWNrcy5sZW5ndGg7IHNkSW5kZXgrKykgeworICAg
ICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5zb3VuZFRyYWNrc1tzZEluZGV4
XS5zb3VuZENvbGxlY3Rpb24ubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRoaXMuc291bmRUcmFja3Nbc2RJbmRleF0uc291bmRDb2xsZWN0aW9uW2luZGV4XS5uYW1lID09
PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNvdW5kVHJhY2tzW3Nk
SW5kZXhdLnNvdW5kQ29sbGVjdGlvbltpbmRleF07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxsOworfTsKK09iamVjdC5k
ZWZpbmVQcm9wZXJ0eShfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2NlbmUi
XS5wcm90b3R5cGUsICJhdWRpb0VuYWJsZWQiLCB7CisgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHZhciBjb21wbyA9IHRoaXMuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1F
X0FVRElPKTsKKyAgICAgICAgaWYgKCFjb21wbykgeworICAgICAgICAgICAgY29tcG8gPSBuZXcg
QXVkaW9TY2VuZUNvbXBvbmVudCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX2FkZENvbXBvbmVu
dChjb21wbyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbXBvLmF1ZGlvRW5hYmxlZDsK
KyAgICB9LAorICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHZhciBjb21wbyA9
IHRoaXMuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX0FVRElPKTsKKyAgICAgICAg
aWYgKCFjb21wbykgeworICAgICAgICAgICAgY29tcG8gPSBuZXcgQXVkaW9TY2VuZUNvbXBvbmVu
dCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX2FkZENvbXBvbmVudChjb21wbyk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBjb21wby5lbmFibGVBdWRpbygp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29tcG8uZGlzYWJsZUF1
ZGlvKCk7CisgICAgICAgIH0KKyAgICB9LAorICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgY29u
ZmlndXJhYmxlOiB0cnVlCit9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShfc2NlbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2NlbmUiXS5wcm90b3R5cGUsICJoZWFkcGhvbmUiLCB7
CisgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBjb21wbyA9IHRoaXMuX2dldENv
bXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2Nl
bmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX0FVRElPKTsKKyAgICAgICAgaWYgKCFjb21wbykg
eworICAgICAgICAgICAgY29tcG8gPSBuZXcgQXVkaW9TY2VuZUNvbXBvbmVudCh0aGlzKTsKKyAg
ICAgICAgICAgIHRoaXMuX2FkZENvbXBvbmVudChjb21wbyk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGNvbXBvLmhlYWRwaG9uZTsKKyAgICB9LAorICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgIHZhciBjb21wbyA9IHRoaXMuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25l
bnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMi
XS5OQU1FX0FVRElPKTsKKyAgICAgICAgaWYgKCFjb21wbykgeworICAgICAgICAgICAgY29tcG8g
PSBuZXcgQXVkaW9TY2VuZUNvbXBvbmVudCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX2FkZENv
bXBvbmVudChjb21wbyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAg
ICAgICBjb21wby5zd2l0Y2hBdWRpb01vZGVGb3JIZWFkcGhvbmVzKCk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb21wby5zd2l0Y2hBdWRpb01vZGVGb3JOb3JtYWxT
cGVha2VycygpOworICAgICAgICB9CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoX3NjZW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNjZW5lIl0ucHJvdG90eXBlLCAiYXVkaW9MaXN0
ZW5lclBvc2l0aW9uUHJvdmlkZXIiLCB7CisgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciBjb21wbyA9IHRoaXMuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX0FVRElP
KTsKKyAgICAgICAgaWYgKCFjb21wbykgeworICAgICAgICAgICAgY29tcG8gPSBuZXcgQXVkaW9T
Y2VuZUNvbXBvbmVudCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX2FkZENvbXBvbmVudChjb21w
byk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbXBvLmF1ZGlvTGlzdGVuZXJQb3NpdGlv
blByb3ZpZGVyOworICAgIH0sCisgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
dmFyIGNvbXBvID0gdGhpcy5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfQVVESU8p
OworICAgICAgICBpZiAoIWNvbXBvKSB7CisgICAgICAgICAgICBjb21wbyA9IG5ldyBBdWRpb1Nj
ZW5lQ29tcG9uZW50KHRoaXMpOworICAgICAgICAgICAgdGhpcy5fYWRkQ29tcG9uZW50KGNvbXBv
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB2YWx1ZSBwYXNzZWQgdG8gW1NjZW5l
LmF1ZGlvTGlzdGVuZXJQb3NpdGlvblByb3ZpZGVyXSBtdXN0IGJlIGEgZnVuY3Rpb24gdGhhdCBy
ZXR1cm5zIGEgVmVjdG9yMycpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgY29tcG8uYXVkaW9MaXN0ZW5lclBvc2l0aW9uUHJvdmlkZXIgPSB2YWx1ZTsKKyAgICAgICAg
fQorICAgIH0sCisgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRydWUK
K30pOworLyoqCisgKiBEZWZpbmVzIHRoZSBzb3VuZCBzY2VuZSBjb21wb25lbnQgcmVzcG9uc2li
bGUgdG8gbWFuYWdlIGFueSBzb3VuZHMKKyAqIGluIGEgZ2l2ZW4gc2NlbmUuCisgKi8KK3ZhciBB
dWRpb1NjZW5lQ29tcG9uZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBmb3IgdGhl
IGdpdmVuIHNjZW5lCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRvIHJl
Z2lzdGVyIHRoZSBjb21wb25lbnQgaW4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBBdWRpb1NjZW5l
Q29tcG9uZW50KHNjZW5lKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY29tcG9uZW50
IG5hbWUgaGVscGZ1bGwgdG8gaWRlbnRpZnkgdGhlIGNvbXBvbmVudCBpbiB0aGUgbGlzdCBvZiBz
Y2VuZSBjb21wb25lbnRzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5uYW1lID0gX3NjZW5l
Q29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjZW5lQ29tcG9uZW50Q29u
c3RhbnRzIl0uTkFNRV9BVURJTzsKKyAgICAgICAgdGhpcy5fYXVkaW9FbmFibGVkID0gdHJ1ZTsK
KyAgICAgICAgdGhpcy5faGVhZHBob25lID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2F1ZGlvTGlz
dGVuZXJQb3NpdGlvblByb3ZpZGVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5l
OworICAgICAgICBzY2VuZS5zb3VuZFRyYWNrcyA9IG5ldyBBcnJheSgpOworICAgICAgICBzY2Vu
ZS5zb3VuZHMgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEF1ZGlvU2NlbmVDb21wb25lbnQucHJvdG90eXBlLCAiYXVkaW9FbmFibGVkIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB3aGV0aGVyIGF1ZGlvIGlzIGVuYWJsZWQgb3Igbm90Lgor
ICAgICAgICAgKiBQbGVhc2UgdXNlIHJlbGF0ZWQgZW5hYmxlL2Rpc2FibGUgbWV0aG9kIHRvIHN3
aXRjaCBzdGF0ZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEF1ZGlvU2NlbmVDb21wb25lbnQucHJvdG90eXBlLCAi
aGVhZHBob25lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB3aGV0aGVyIGF1ZGlv
IGlzIG91dHB1dGluZyB0byBoZWFkcGhvbmUgb3Igbm90LgorICAgICAgICAgKiBQbGVhc2UgdXNl
IHRoZSBhY2NvcmRpbmcgU3dpdGNoIG1ldGhvZHMgdG8gY2hhbmdlIG91dHB1dC4KKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2hlYWRwaG9uZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEF1ZGlvU2NlbmVDb21wb25lbnQucHJvdG90eXBlLCAiYXVkaW9MaXN0ZW5lclBvc2l0aW9uUHJv
dmlkZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGF1ZGlv
IGxpc3RlbmVyIHBvc2l0aW9uIHByb3ZpZGVyCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdWRpb0xpc3RlbmVyUG9zaXRp
b25Qcm92aWRlcjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgYSBj
dXN0b20gbGlzdGVuZXIgcG9zaXRpb24gZm9yIGFsbCBzb3VuZHMgaW4gdGhlIHNjZW5lCisgICAg
ICAgICAqIEJ5IGRlZmF1bHQsIHRoaXMgaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBhY3Rp
dmUgY2FtZXJhCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgdGhpcy5fYXVkaW9MaXN0ZW5lclBvc2l0aW9uUHJvdmlkZXIgPSB2YWx1ZTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25l
bnQgaW4gYSBnaXZlbiBzY2VuZQorICAgICAqLworICAgIEF1ZGlvU2NlbmVDb21wb25lbnQucHJv
dG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLnNjZW5lLl9hZnRl
clJlbmRlclN0YWdlLnJlZ2lzdGVyU3RlcChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5TVEVQX0FGVEVSUkVOREVS
X0FVRElPLCB0aGlzLCB0aGlzLl9hZnRlclJlbmRlcik7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZWJ1aWxkcyB0aGUgZWxlbWVudHMgcmVsYXRlZCB0byB0aGlzIGNvbXBvbmVudCBpbiBjYXNl
IG9mCisgICAgICogY29udGV4dCBsb3N0IGZvciBpbnN0YW5jZS4KKyAgICAgKi8KKyAgICBBdWRp
b1NjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIChOb3QgcmVuZGVyaW5nIHJlbGF0ZWQpCisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBjb21wb25lbnQgZGF0YSB0byB0aGUgc3Bl
Y2lmaWVkIGpzb24gb2JqZWN0CisgICAgICogQHBhcmFtIHNlcmlhbGl6YXRpb25PYmplY3QgVGhl
IG9iamVjdCB0byBzZXJpYWxpemUgdG8KKyAgICAgKi8KKyAgICBBdWRpb1NjZW5lQ29tcG9uZW50
LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlvbk9iamVjdCkgewor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNvdW5kcyA9IFtdOworICAgICAgICBpZiAodGhp
cy5zY2VuZS5zb3VuZFRyYWNrcykgeworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBp
bmRleCA8IHRoaXMuc2NlbmUuc291bmRUcmFja3MubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHNvdW5kdHJhY2sgPSB0aGlzLnNjZW5lLnNvdW5kVHJhY2tzW2luZGV4XTsK
KyAgICAgICAgICAgICAgICBmb3IgKHZhciBzb3VuZElkID0gMDsgc291bmRJZCA8IHNvdW5kdHJh
Y2suc291bmRDb2xsZWN0aW9uLmxlbmd0aDsgc291bmRJZCsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc291bmRzLnB1c2goc291bmR0cmFjay5zb3VuZENvbGxl
Y3Rpb25bc291bmRJZF0uc2VyaWFsaXplKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhbGwgdGhlIGVs
ZW1lbnRzIGZyb20gdGhlIGNvbnRhaW5lciB0byB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gY29u
dGFpbmVyIHRoZSBjb250YWluZXIgaG9sZGluZyB0aGUgZWxlbWVudHMKKyAgICAgKi8KKyAgICBB
dWRpb1NjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5hZGRGcm9tQ29udGFpbmVyID0gZnVuY3Rpb24g
KGNvbnRhaW5lcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoIWNv
bnRhaW5lci5zb3VuZHMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBjb250YWluZXIuc291bmRzLmZvckVhY2goZnVuY3Rpb24gKHNvdW5kKSB7CisgICAgICAgICAg
ICBzb3VuZC5wbGF5KCk7CisgICAgICAgICAgICBzb3VuZC5hdXRvcGxheSA9IHRydWU7CisgICAg
ICAgICAgICBfdGhpcy5zY2VuZS5tYWluU291bmRUcmFjay5BZGRTb3VuZChzb3VuZCk7CisgICAg
ICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhbGwgdGhlIGVsZW1lbnRz
IGluIHRoZSBjb250YWluZXIgZnJvbSB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gY29udGFpbmVy
IGNvbnRhaW5zIHRoZSBlbGVtZW50cyB0byByZW1vdmUKKyAgICAgKiBAcGFyYW0gZGlzcG9zZSBp
ZiB0aGUgcmVtb3ZlZCBlbGVtZW50IHNob3VsZCBiZSBkaXNwb3NlZCAoZGVmYXVsdDogZmFsc2Up
CisgICAgICovCisgICAgQXVkaW9TY2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVtb3ZlRnJvbUNv
bnRhaW5lciA9IGZ1bmN0aW9uIChjb250YWluZXIsIGRpc3Bvc2UpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gdGhpczsKKyAgICAgICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkgeyBkaXNwb3NlID0g
ZmFsc2U7IH0KKyAgICAgICAgaWYgKCFjb250YWluZXIuc291bmRzKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY29udGFpbmVyLnNvdW5kcy5mb3JFYWNoKGZ1bmN0
aW9uIChzb3VuZCkgeworICAgICAgICAgICAgc291bmQuc3RvcCgpOworICAgICAgICAgICAgc291
bmQuYXV0b3BsYXkgPSBmYWxzZTsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLm1haW5Tb3VuZFRy
YWNrLlJlbW92ZVNvdW5kKHNvdW5kKTsKKyAgICAgICAgICAgIGlmIChkaXNwb3NlKSB7CisgICAg
ICAgICAgICAgICAgc291bmQuZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBjb21wb25lbnQgYW5kIHRoZSBh
c3NvY2lhdGVkIHJlc3NvdXJjZXMuCisgICAgICovCisgICAgQXVkaW9TY2VuZUNvbXBvbmVudC5w
cm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhp
cy5zY2VuZTsKKyAgICAgICAgaWYgKHNjZW5lLl9tYWluU291bmRUcmFjaykgeworICAgICAgICAg
ICAgc2NlbmUubWFpblNvdW5kVHJhY2suZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlm
IChzY2VuZS5zb3VuZFRyYWNrcykgeworICAgICAgICAgICAgZm9yICh2YXIgc2NJbmRleCA9IDA7
IHNjSW5kZXggPCBzY2VuZS5zb3VuZFRyYWNrcy5sZW5ndGg7IHNjSW5kZXgrKykgeworICAgICAg
ICAgICAgICAgIHNjZW5lLnNvdW5kVHJhY2tzW3NjSW5kZXhdLmRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGlzYWJsZXMgYXVkaW8g
aW4gdGhlIGFzc29jaWF0ZWQgc2NlbmUuCisgICAgICovCisgICAgQXVkaW9TY2VuZUNvbXBvbmVu
dC5wcm90b3R5cGUuZGlzYWJsZUF1ZGlvID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2Nl
bmUgPSB0aGlzLnNjZW5lOworICAgICAgICB0aGlzLl9hdWRpb0VuYWJsZWQgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJF
bmdpbmUiXS5hdWRpb0VuZ2luZSAmJiBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0KSB7CisgICAgICAg
ICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5l
Il0uYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0LnN1c3BlbmQoKTsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNjZW5lLm1haW5Tb3VuZFRyYWNrLnNv
dW5kQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgc2NlbmUubWFpblNvdW5k
VHJhY2suc291bmRDb2xsZWN0aW9uW2ldLnBhdXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHNjZW5lLnNvdW5kVHJhY2tzKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2NlbmUu
c291bmRUcmFja3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IHNjZW5lLnNvdW5kVHJhY2tzW2ldLnNvdW5kQ29sbGVjdGlvbi5sZW5ndGg7IGorKykg
eworICAgICAgICAgICAgICAgICAgICBzY2VuZS5zb3VuZFRyYWNrc1tpXS5zb3VuZENvbGxlY3Rp
b25bal0ucGF1c2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEVuYWJsZXMgYXVkaW8gaW4gdGhlIGFzc29jaWF0
ZWQgc2NlbmUuCisgICAgICovCisgICAgQXVkaW9TY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuZW5h
YmxlQXVkaW8gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7
CisgICAgICAgIHRoaXMuX2F1ZGlvRW5hYmxlZCA9IHRydWU7CisgICAgICAgIGlmIChfRW5naW5l
c19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lIl0uYXVkaW9Fbmdp
bmUgJiYgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkVuZ2lu
ZSJdLmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dCkgeworICAgICAgICAgICAgX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmF1
ZGlvQ29udGV4dC5yZXN1bWUoKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaTsKKyAgICAgICAg
Zm9yIChpID0gMDsgaSA8IHNjZW5lLm1haW5Tb3VuZFRyYWNrLnNvdW5kQ29sbGVjdGlvbi5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHNjZW5lLm1haW5Tb3VuZFRyYWNrLnNvdW5kQ29s
bGVjdGlvbltpXS5pc1BhdXNlZCkgeworICAgICAgICAgICAgICAgIHNjZW5lLm1haW5Tb3VuZFRy
YWNrLnNvdW5kQ29sbGVjdGlvbltpXS5wbGF5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHNjZW5lLnNvdW5kVHJhY2tzKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgc2NlbmUuc291bmRUcmFja3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBqID0gMDsgaiA8IHNjZW5lLnNvdW5kVHJhY2tzW2ldLnNvdW5kQ29sbGVjdGlvbi5s
ZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2NlbmUuc291bmRUcmFja3Nb
aV0uc291bmRDb2xsZWN0aW9uW2pdLmlzUGF1c2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzY2VuZS5zb3VuZFRyYWNrc1tpXS5zb3VuZENvbGxlY3Rpb25bal0ucGxheSgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTd2l0Y2ggYXVkaW8gdG8gaGVhZHBob25lIG91
dHB1dC4KKyAgICAgKi8KKyAgICBBdWRpb1NjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5zd2l0Y2hB
dWRpb01vZGVGb3JIZWFkcGhvbmVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2NlbmUg
PSB0aGlzLnNjZW5lOworICAgICAgICB0aGlzLl9oZWFkcGhvbmUgPSB0cnVlOworICAgICAgICBz
Y2VuZS5tYWluU291bmRUcmFjay5zd2l0Y2hQYW5uaW5nTW9kZWxUb0hSVEYoKTsKKyAgICAgICAg
aWYgKHNjZW5lLnNvdW5kVHJhY2tzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHNjZW5lLnNvdW5kVHJhY2tzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgc2NlbmUu
c291bmRUcmFja3NbaV0uc3dpdGNoUGFubmluZ01vZGVsVG9IUlRGKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFN3aXRjaCBhdWRpbyB0byBub3Jt
YWwgc3BlYWtlcnMuCisgICAgICovCisgICAgQXVkaW9TY2VuZUNvbXBvbmVudC5wcm90b3R5cGUu
c3dpdGNoQXVkaW9Nb2RlRm9yTm9ybWFsU3BlYWtlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7CisgICAgICAgIHRoaXMuX2hlYWRwaG9uZSA9IGZhbHNl
OworICAgICAgICBzY2VuZS5tYWluU291bmRUcmFjay5zd2l0Y2hQYW5uaW5nTW9kZWxUb0VxdWFs
UG93ZXIoKTsKKyAgICAgICAgaWYgKHNjZW5lLnNvdW5kVHJhY2tzKSB7CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLnNvdW5kVHJhY2tzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgc2NlbmUuc291bmRUcmFja3NbaV0uc3dpdGNoUGFubmluZ01vZGVsVG9FcXVh
bFBvd2VyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIEF1ZGlvU2Nl
bmVDb21wb25lbnQucHJvdG90eXBlLl9hZnRlclJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTsKKyAgICAgICAgaWYgKCF0aGlzLl9hdWRpb0VuYWJs
ZWQgfHwgIXNjZW5lLl9tYWluU291bmRUcmFjayB8fCAhc2NlbmUuc291bmRUcmFja3MgfHwgKHNj
ZW5lLl9tYWluU291bmRUcmFjay5zb3VuZENvbGxlY3Rpb24ubGVuZ3RoID09PSAwICYmIHNjZW5l
LnNvdW5kVHJhY2tzLmxlbmd0aCA9PT0gMSkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgYXVkaW9FbmdpbmUgPSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lIl0uYXVkaW9FbmdpbmU7CisgICAgICAgIGlmIChh
dWRpb0VuZ2luZS5hdWRpb0NvbnRleHQpIHsKKyAgICAgICAgICAgIC8vIEEgY3VzdG9tIGxpc3Rl
bmVyIHBvc2l0aW9uIHByb3ZpZGVyIHdhcyBzZXQKKyAgICAgICAgICAgIC8vIFVzZSB0aGUgdXNl
cnMgcHJvdmlkZWQgcG9zaXRpb24gaW5zdGVhZCBvZiBjYW1lcmEncworICAgICAgICAgICAgaWYg
KHRoaXMuX2F1ZGlvTGlzdGVuZXJQb3NpdGlvblByb3ZpZGVyKSB7CisgICAgICAgICAgICAgICAg
dmFyIHBvc2l0aW9uID0gdGhpcy5fYXVkaW9MaXN0ZW5lclBvc2l0aW9uUHJvdmlkZXIoKTsKKyAg
ICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgYWxsIGNvb3JkaW5hdGVzIHdlcmUgcHJvdmlkZWQK
KyAgICAgICAgICAgICAgICBwb3NpdGlvbi54ID0gcG9zaXRpb24ueCB8fCAwOworICAgICAgICAg
ICAgICAgIHBvc2l0aW9uLnkgPSBwb3NpdGlvbi55IHx8IDA7CisgICAgICAgICAgICAgICAgcG9z
aXRpb24ueiA9IHBvc2l0aW9uLnogfHwgMDsKKyAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGxp
c3RlbmVyIHBvc2l0aW9uCisgICAgICAgICAgICAgICAgYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0
Lmxpc3RlbmVyLnNldFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnop
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFy
IGxpc3RlbmluZ0NhbWVyYTsKKyAgICAgICAgICAgICAgICBpZiAoc2NlbmUuYWN0aXZlQ2FtZXJh
cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3RlbmluZ0NhbWVyYSA9IHNj
ZW5lLmFjdGl2ZUNhbWVyYXNbMF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsaXN0ZW5pbmdDYW1lcmEgPSBzY2VuZS5hY3Rp
dmVDYW1lcmE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIENoZWNrIGlm
IHRoZXJlIGlzIGEgbGlzdGVuaW5nIGNhbWVyYQorICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5p
bmdDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBsaXN0ZW5lciBwb3Np
dGlvbiB0byB0aGUgbGlzdGVuaW5nIGNhbWVyYSBnbG9iYWwgcG9zaXRpb24KKyAgICAgICAgICAg
ICAgICAgICAgYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0Lmxpc3RlbmVyLnNldFBvc2l0aW9uKGxp
c3RlbmluZ0NhbWVyYS5nbG9iYWxQb3NpdGlvbi54LCBsaXN0ZW5pbmdDYW1lcmEuZ2xvYmFsUG9z
aXRpb24ueSwgbGlzdGVuaW5nQ2FtZXJhLmdsb2JhbFBvc2l0aW9uLnopOworICAgICAgICAgICAg
ICAgICAgICAvLyBmb3IgVlIgY2FtZXJhcworICAgICAgICAgICAgICAgICAgICBpZiAobGlzdGVu
aW5nQ2FtZXJhLnJpZ0NhbWVyYXMgJiYgbGlzdGVuaW5nQ2FtZXJhLnJpZ0NhbWVyYXMubGVuZ3Ro
ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuaW5nQ2FtZXJhID0gbGlzdGVu
aW5nQ2FtZXJhLnJpZ0NhbWVyYXNbMF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgdmFyIG1hdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJNYXRyaXgiXS5JbnZlcnQobGlzdGVuaW5nQ2FtZXJhLmdldFZpZXdNYXRy
aXgoKSk7CisgICAgICAgICAgICAgICAgICAgIHZhciBjYW1lcmFEaXJlY3Rpb24gPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlRyYW5z
Zm9ybU5vcm1hbChuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlY3RvcjMiXSgwLCAwLCAtMSksIG1hdCk7CisgICAgICAgICAgICAgICAgICAgIGNh
bWVyYURpcmVjdGlvbi5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVG8gYXZv
aWQgc29tZSBlcnJvcnMgb24gR2VhclZSCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4o
Y2FtZXJhRGlyZWN0aW9uLngpICYmICFpc05hTihjYW1lcmFEaXJlY3Rpb24ueSkgJiYgIWlzTmFO
KGNhbWVyYURpcmVjdGlvbi56KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9Fbmdp
bmUuYXVkaW9Db250ZXh0Lmxpc3RlbmVyLnNldE9yaWVudGF0aW9uKGNhbWVyYURpcmVjdGlvbi54
LCBjYW1lcmFEaXJlY3Rpb24ueSwgY2FtZXJhRGlyZWN0aW9uLnosIDAsIDEsIDApOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE90
aGVyd2lzZSBzZXQgdGhlIGxpc3RlbmVyIHBvc2l0aW9uIHRvIDAsIDAgLDAKKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBsaXN0ZW5lciBwb3Np
dGlvbgorICAgICAgICAgICAgICAgICAgICBhdWRpb0VuZ2luZS5hdWRpb0NvbnRleHQubGlzdGVu
ZXIuc2V0UG9zaXRpb24oMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFyIGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2NlbmUu
bWFpblNvdW5kVHJhY2suc291bmRDb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHNvdW5kID0gc2NlbmUubWFpblNvdW5kVHJhY2suc291bmRDb2xsZWN0aW9uW2ld
OworICAgICAgICAgICAgICAgIGlmIChzb3VuZC51c2VDdXN0b21BdHRlbnVhdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICBzb3VuZC51cGRhdGVEaXN0YW5jZUZyb21MaXN0ZW5lcigpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzY2VuZS5zb3Vu
ZFRyYWNrcykgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzY2VuZS5zb3VuZFRy
YWNrcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsg
aiA8IHNjZW5lLnNvdW5kVHJhY2tzW2ldLnNvdW5kQ29sbGVjdGlvbi5sZW5ndGg7IGorKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc291bmQgPSBzY2VuZS5zb3VuZFRyYWNrc1tpXS5zb3Vu
ZENvbGxlY3Rpb25bal07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291bmQudXNlQ3Vz
dG9tQXR0ZW51YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VuZC51cGRh
dGVEaXN0YW5jZUZyb21MaXN0ZW5lcigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gQXVkaW9TY2VuZUNvbXBvbmVudDsKK30oKSk7CisK
K19zb3VuZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTb3VuZCJdLl9TY2VuZUNvbXBv
bmVudEluaXRpYWxpemF0aW9uID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAgdmFyIGNvbXBvID0g
c2NlbmUuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX0FVRElPKTsKKyAgICBpZiAo
IWNvbXBvKSB7CisgICAgICAgIGNvbXBvID0gbmV3IEF1ZGlvU2NlbmVDb21wb25lbnQoc2NlbmUp
OworICAgICAgICBzY2VuZS5fYWRkQ29tcG9uZW50KGNvbXBvKTsKKyAgICB9Cit9OworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9BdWRpby9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL0F1ZGlvL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBbmFseXNlciwgQXVkaW9Fbmdp
bmUsIEF1ZGlvU2NlbmVDb21wb25lbnQsIFNvdW5kLCBTb3VuZFRyYWNrLCBXZWlnaHRlZFNvdW5k
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5hbHlzZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
YW5hbHlzZXIgKi8gIi4vQXVkaW8vYW5hbHlzZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5h
bHlzZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hbmFseXNlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJBbmFseXNlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9h
dWRpb0VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9hdWRpb0VuZ2luZSAqLyAiLi9BdWRpby9hdWRpb0VuZ2luZS50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJBdWRpb0VuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2F1ZGlvRW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkF1ZGlvRW5naW5lIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2F1ZGlvU2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXVkaW9TY2VuZUNv
bXBvbmVudCAqLyAiLi9BdWRpby9hdWRpb1NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkF1ZGlvU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hdWRpb1Nj
ZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkF1ZGlvU2NlbmVDb21w
b25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc291bmRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc291bmQgKi8g
Ii4vQXVkaW8vc291bmQudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU291bmQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9zb3VuZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTb3VuZCJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zb3VuZFRyYWNrX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NvdW5kVHJhY2sgKi8g
Ii4vQXVkaW8vc291bmRUcmFjay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTb3VuZFRyYWNrIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfc291bmRUcmFja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJTb3VuZFRyYWNrIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlaWdo
dGVkc291bmRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vd2VpZ2h0ZWRzb3VuZCAqLyAiLi9BdWRpby93ZWlnaHRlZHNvdW5kLnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIldlaWdodGVkU291bmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF93ZWln
aHRlZHNvdW5kX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIldlaWdodGVkU291bmQiXTsg
fSk7CisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQXVkaW8vc291bmQu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9BdWRpby9zb3Vu
ZC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogU291bmQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU291bmQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFNvdW5kOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIu
L01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvZW5n
aW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2RldlRvb2xzICovICIuL01p
c2MvZGV2VG9vbHMudHMiKTsKKworCisKKworCisKKy8qKgorICogRGVmaW5lcyBhIHNvdW5kIHRo
YXQgY2FuIGJlIHBsYXllZCBpbiB0aGUgYXBwbGljYXRpb24uCisgKiBUaGUgc291bmQgY2FuIGVp
dGhlciBiZSBhbiBhbWJpZW50IHRyYWNrIG9yIGEgc2ltcGxlIHNvdW5kIHBsYXllZCBpbiByZWFj
dGlvbiB0byBhIHVzZXIgYWN0aW9uLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL3BsYXlpbmdfc291bmRzX2FuZF9tdXNpYworICovCit2YXIgU291bmQgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgKiBDcmVhdGUgYSBzb3VuZCBhbmQg
YXR0YWNoIGl0IHRvIGEgc2NlbmUKKyAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgeW91ciBzb3Vu
ZAorICAgICogQHBhcmFtIHVybE9yQXJyYXlCdWZmZXIgVXJsIHRvIHRoZSBzb3VuZCB0byBsb2Fk
IGFzeW5jIG9yIEFycmF5QnVmZmVyLCBpdCBhbHNvIHdvcmtzIHdpdGggTWVkaWFTdHJlYW1zCisg
ICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgdGhlIHNvdW5kIGJlbG9uZ3MgdG8K
KyAgICAqIEBwYXJhbSByZWFkeVRvUGxheUNhbGxiYWNrIFByb3ZpZGUgYSBjYWxsYmFjayBmdW5j
dGlvbiBpZiB5b3UnZCBsaWtlIHRvIGxvYWQgeW91ciBjb2RlIG9uY2UgdGhlIHNvdW5kIGlzIHJl
YWR5IHRvIGJlIHBsYXllZAorICAgICogQHBhcmFtIG9wdGlvbnMgT2JqZWN0cyB0byBwcm92aWRl
IHdpdGggdGhlIGN1cnJlbnQgYXZhaWxhYmxlIG9wdGlvbnM6IGF1dG9wbGF5LCBsb29wLCB2b2x1
bWUsIHNwYXRpYWxTb3VuZCwgbWF4RGlzdGFuY2UsIHJvbGxvZmZGYWN0b3IsIHJlZkRpc3RhbmNl
LCBkaXN0YW5jZU1vZGVsLCBwYW5uaW5nTW9kZWwsIHN0cmVhbWluZworICAgICovCisgICAgZnVu
Y3Rpb24gU291bmQobmFtZSwgdXJsT3JBcnJheUJ1ZmZlciwgc2NlbmUsIHJlYWR5VG9QbGF5Q2Fs
bGJhY2ssIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYg
KHJlYWR5VG9QbGF5Q2FsbGJhY2sgPT09IHZvaWQgMCkgeyByZWFkeVRvUGxheUNhbGxiYWNrID0g
bnVsbDsgfQorICAgICAgICAvKioKKyAgICAgICAgICogRG9lcyB0aGUgc291bmQgYXV0b3BsYXkg
b25jZSBsb2FkZWQuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmF1dG9wbGF5ID0gZmFsc2U7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEb2VzIHRoZSBzb3VuZCBsb29wIGFmdGVyIGl0IGZp
bmlzaGVzIHBsYXlpbmcgb25jZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubG9vcCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRG9lcyB0aGUgc291bmQgdXNlIGEgY3VzdG9t
IGF0dGVudWF0aW9uIGN1cnZlIHRvIHNpbXVsYXRlIHRoZSBmYWxsb2ZmCisgICAgICAgICAqIGhh
cHBlbmluZyB3aGVuIHRoZSBzb3VyY2UgZ2V0cyBmdXJ0aGVyIGF3YXkgZnJvbSB0aGUgY2FtZXJh
LgorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWlu
Z19zb3VuZHNfYW5kX211c2ljI2NyZWF0aW5nLXlvdXItb3duLWN1c3RvbS1hdHRlbnVhdGlvbi1m
dW5jdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy51c2VDdXN0b21BdHRlbnVhdGlvbiA9
IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogSXMgdGhpcyBzb3VuZCBjdXJyZW50bHkg
cGxheWVkLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIElzIHRoaXMgc291bmQgY3VycmVudGx5IHBhdXNlZC4KKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIERvZXMgdGhpcyBzb3VuZCBlbmFibGVzIHNwYXRpYWwgc291bmQuCisgICAgICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9wbGF5aW5nX3NvdW5kc19h
bmRfbXVzaWMjY3JlYXRpbmctYS1zcGF0aWFsLTNkLXNvdW5kCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLnNwYXRpYWxTb3VuZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVm
aW5lIHRoZSByZWZlcmVuY2UgZGlzdGFuY2UgdGhlIHNvdW5kIHNob3VsZCBiZSBoZWFyZCBwZXJm
ZWN0bHkuCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9w
bGF5aW5nX3NvdW5kc19hbmRfbXVzaWMjY3JlYXRpbmctYS1zcGF0aWFsLTNkLXNvdW5kCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnJlZkRpc3RhbmNlID0gMTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIERlZmluZSB0aGUgcm9sbCBvZmYgZmFjdG9yIG9mIHNwYXRpYWwgc291bmRzLgorICAg
ICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3Vu
ZHNfYW5kX211c2ljI2NyZWF0aW5nLWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5yb2xsb2ZmRmFjdG9yID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZSB0aGUgbWF4IGRpc3RhbmNlIHRoZSBzb3VuZCBzaG91bGQgYmUgaGVhcmQgKGludGVuc2l0
eSBqdXN0IGJlY2FtZSAwIGF0IHRoaXMgcG9pbnQpLgorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3VuZHNfYW5kX211c2ljI2NyZWF0aW5n
LWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tYXhEaXN0YW5j
ZSA9IDEwMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0aGUgZGlzdGFuY2UgYXR0
ZW51YXRpb24gbW9kZWwgdGhlIHNvdW5kIHdpbGwgZm9sbG93LgorICAgICAgICAgKiBAc2VlIGh0
dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3VuZHNfYW5kX211c2ljI2Ny
ZWF0aW5nLWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaXN0
YW5jZU1vZGVsID0gImxpbmVhciI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxl
IGV2ZW50IHdoZW4gdGhlIGN1cnJlbnQgcGxheWluZyBzb3VuZCBmaW5pc2hlcy4KKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMub25FbmRlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJs
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAg
dGhpcy5fcGFubmluZ01vZGVsID0gImVxdWFscG93ZXIiOworICAgICAgICB0aGlzLl9wbGF5YmFj
a1JhdGUgPSAxOworICAgICAgICB0aGlzLl9zdHJlYW1pbmcgPSBmYWxzZTsKKyAgICAgICAgdGhp
cy5fc3RhcnRUaW1lID0gMDsKKyAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSAwOworICAgICAg
ICB0aGlzLl9wb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAg
ICAgICB0aGlzLl9wb3NpdGlvbkluRW1pdHRlclNwYWNlID0gZmFsc2U7CisgICAgICAgIHRoaXMu
X2xvY2FsRGlyZWN0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0oMSwgMCwgMCk7CisgICAgICAgIHRoaXMuX3ZvbHVtZSA9
IDE7CisgICAgICAgIHRoaXMuX2lzUmVhZHlUb1BsYXkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5f
aXNEaXJlY3Rpb25hbCA9IGZhbHNlOworICAgICAgICAvLyBVc2VkIGlmIHlvdSdkIGxpa2UgdG8g
Y3JlYXRlIGEgZGlyZWN0aW9uYWwgc291bmQuCisgICAgICAgIC8vIElmIG5vdCBzZXQsIHRoZSBz
b3VuZCB3aWxsIGJlIG9tbmlkaXJlY3Rpb25hbAorICAgICAgICB0aGlzLl9jb25lSW5uZXJBbmds
ZSA9IDM2MDsKKyAgICAgICAgdGhpcy5fY29uZU91dGVyQW5nbGUgPSAzNjA7CisgICAgICAgIHRo
aXMuX2NvbmVPdXRlckdhaW4gPSAwOworICAgICAgICB0aGlzLl9pc091dHB1dENvbm5lY3RlZCA9
IGZhbHNlOworICAgICAgICB0aGlzLl91cmxUeXBlID0gIlVua25vd24iOworICAgICAgICB0aGlz
Lm5hbWUgPSBuYW1lOworICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5lOworICAgICAgICBTb3Vu
ZC5fU2NlbmVDb21wb25lbnRJbml0aWFsaXphdGlvbihzY2VuZSk7CisgICAgICAgIHRoaXMuX3Jl
YWR5VG9QbGF5Q2FsbGJhY2sgPSByZWFkeVRvUGxheUNhbGxiYWNrOworICAgICAgICAvLyBEZWZh
dWx0IGN1c3RvbSBhdHRlbnVhdGlvbiBmdW5jdGlvbiBpcyBhIGxpbmVhciBhdHRlbnVhdGlvbgor
ICAgICAgICB0aGlzLl9jdXN0b21BdHRlbnVhdGlvbkZ1bmN0aW9uID0gZnVuY3Rpb24gKGN1cnJl
bnRWb2x1bWUsIGN1cnJlbnREaXN0YW5jZSwgbWF4RGlzdGFuY2UsIHJlZkRpc3RhbmNlLCByb2xs
b2ZmRmFjdG9yKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudERpc3RhbmNlIDwgbWF4RGlzdGFu
Y2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFZvbHVtZSAqICgxIC0gY3VycmVu
dERpc3RhbmNlIC8gbWF4RGlzdGFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisgICAgICAgIGlmIChvcHRpb25zKSB7CisgICAgICAgICAgICB0aGlzLmF1dG9wbGF5ID0gb3B0
aW9ucy5hdXRvcGxheSB8fCBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMubG9vcCA9IG9wdGlvbnMu
bG9vcCB8fCBmYWxzZTsKKyAgICAgICAgICAgIC8vIGlmIHZvbHVtZSA9PT0gMCwgd2UgbmVlZCBh
bm90aGVyIHdheSB0byBjaGVjayB0aGlzIG9wdGlvbgorICAgICAgICAgICAgaWYgKG9wdGlvbnMu
dm9sdW1lICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl92b2x1bWUgPSBv
cHRpb25zLnZvbHVtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc3BhdGlhbFNv
dW5kID0gb3B0aW9ucy5zcGF0aWFsU291bmQgfHwgZmFsc2U7CisgICAgICAgICAgICB0aGlzLm1h
eERpc3RhbmNlID0gb3B0aW9ucy5tYXhEaXN0YW5jZSB8fCAxMDA7CisgICAgICAgICAgICB0aGlz
LnVzZUN1c3RvbUF0dGVudWF0aW9uID0gb3B0aW9ucy51c2VDdXN0b21BdHRlbnVhdGlvbiB8fCBm
YWxzZTsKKyAgICAgICAgICAgIHRoaXMucm9sbG9mZkZhY3RvciA9IG9wdGlvbnMucm9sbG9mZkZh
Y3RvciB8fCAxOworICAgICAgICAgICAgdGhpcy5yZWZEaXN0YW5jZSA9IG9wdGlvbnMucmVmRGlz
dGFuY2UgfHwgMTsKKyAgICAgICAgICAgIHRoaXMuZGlzdGFuY2VNb2RlbCA9IG9wdGlvbnMuZGlz
dGFuY2VNb2RlbCB8fCAibGluZWFyIjsKKyAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9
IG9wdGlvbnMucGxheWJhY2tSYXRlIHx8IDE7CisgICAgICAgICAgICB0aGlzLl9zdHJlYW1pbmcg
PSBvcHRpb25zLnN0cmVhbWluZyB8fCBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2xlbmd0aCA9
IG9wdGlvbnMubGVuZ3RoOworICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gb3B0aW9ucy5vZmZz
ZXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVk
aW9FbmdpbmUuYXVkaW9Db250ZXh0KSB7CisgICAgICAgICAgICB0aGlzLl9zb3VuZEdhaW4gPSBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVk
aW9FbmdpbmUuYXVkaW9Db250ZXh0LmNyZWF0ZUdhaW4oKTsKKyAgICAgICAgICAgIHRoaXMuX3Nv
dW5kR2Fpbi5nYWluLnZhbHVlID0gdGhpcy5fdm9sdW1lOworICAgICAgICAgICAgdGhpcy5faW5w
dXRBdWRpb05vZGUgPSB0aGlzLl9zb3VuZEdhaW47CisgICAgICAgICAgICB0aGlzLl9vdXRwdXRB
dWRpb05vZGUgPSB0aGlzLl9zb3VuZEdhaW47CisgICAgICAgICAgICBpZiAodGhpcy5zcGF0aWFs
U291bmQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVTcGF0aWFsUGFyYW1ldGVycygp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2NlbmUubWFpblNvdW5kVHJhY2su
QWRkU291bmQodGhpcyk7CisgICAgICAgICAgICB2YXIgdmFsaWRQYXJhbWV0ZXIgPSB0cnVlOwor
ICAgICAgICAgICAgLy8gaWYgbm8gcGFyYW1ldGVyIGlzIHBhc3NlZCwgeW91IG5lZWQgdG8gY2Fs
bCBzZXRBdWRpb0J1ZmZlciB5b3Vyc2VsZiB0byBwcmVwYXJlIHRoZSBzb3VuZAorICAgICAgICAg
ICAgaWYgKHVybE9yQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAodHlwZW9mICh1cmxPckFycmF5QnVmZmVyKSA9PT0gInN0cmluZyIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VybFR5cGUgPSAiU3RyaW5nIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh1cmxPckFy
cmF5QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3VybFR5cGUgPSAiQXJyYXlCdWZmZXIiOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVybE9yQXJyYXlCdWZmZXIgaW5zdGFuY2Vv
ZiBNZWRpYVN0cmVhbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXJsVHlwZSA9
ICJNZWRpYVN0cmVhbSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh1cmxPckFycmF5QnVmZmVyKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fdXJsVHlwZSA9ICJBcnJheSI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHVybHMgPSBbXTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGNvZGVjU3VwcG9ydGVkRm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoICh0aGlzLl91cmxUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICJNZWRpYVN0cmVhbSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyZWFt
aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JlYWR5VG9Q
bGF5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW1pbmdT
b3VyY2UgPSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5n
aW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHVy
bE9yQXJyYXlCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1
dG9wbGF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxheSgwLCB0
aGlzLl9vZmZzZXQsIHRoaXMuX2xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkeVRvUGxheUNhbGxi
YWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5VG9QbGF5
Q2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJBcnJh
eUJ1ZmZlciI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybE9yQXJyYXlCdWZm
ZXIuYnl0ZUxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29k
ZWNTdXBwb3J0ZWRGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuX3NvdW5kTG9hZGVkKHVybE9yQXJyYXlCdWZmZXIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgIlN0cmluZyI6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJscy5wdXNoKHVybE9yQXJyYXlCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAiQXJyYXkiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmxzLmxlbmd0
aCA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzID0gdXJsT3JB
cnJheUJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgYSBzdXBwb3J0ZWQgZm9ybWF0LCB3ZSBsb2Fk
IGl0IGltbWVkaWF0ZWx5IGFuZCBzdG9wIHRoZSBsb29wCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cmxzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSB1cmxzW2ldOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlY1N1cHBvcnRlZEZvdW5kID0gKG9wdGlvbnMgJiYgb3B0aW9u
cy5za2lwQ29kZWNDaGVjaykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh1cmwuaW5kZXhPZigiLm1wMyIsIHVybC5sZW5ndGggLSA0KSAhPT0gLTEgJiYgX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5l
LmlzTVAzc3VwcG9ydGVkKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHVybC5pbmRleE9mKCIub2dnIiwgdXJsLmxlbmd0aCAtIDQpICE9PSAtMSAmJiBfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUu
aXNPR0dzdXBwb3J0ZWQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dXJsLmluZGV4T2YoIi53YXYiLCB1cmwubGVuZ3RoIC0gNCkgIT09IC0xKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVybC5pbmRleE9mKCJibG9iOiIpICE9PSAtMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlY1N1cHBvcnRlZEZvdW5k
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkaW5nIHNvdW5k
IHVzaW5nIFhIUjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhp
cy5fc3RyZWFtaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fc2NlbmUuX2xvYWRGaWxlKHVybCwgZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NvdW5kTG9hZGVkKGRhdGEp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwg
dHJ1ZSwgdHJ1ZSwgZnVuY3Rpb24gKGV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siTG9nZ2VyIl0uRXJyb3IoIlhIUiAiICsgZXhjZXB0aW9uLnN0YXR1
cyArICIgZXJyb3Igb246ICIgKyB1cmwgKyAiLiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJMb2dn
ZXIiXS5FcnJvcigiU291bmQgY3JlYXRpb24gYWJvcnRlZC4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NjZW5lLm1haW5Tb3VuZFRyYWNrLlJl
bW92ZVNvdW5kKF90aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmVhbWluZyBzb3VuZCB1c2luZyBIVE1MNSBB
dWRpbyB0YWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2h0bWxBdWRpb0VsZW1l
bnQgPSBuZXcgQXVkaW8odXJsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9odG1sQXVkaW9FbGVtZW50LmNvbnRyb2xzID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faHRtbEF1ZGlvRWxlbWVudC5sb29w
ID0gdGhpcy5sb29wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N
aXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRvb2xzIl0uU2V0Q29yc0Jl
aGF2aW9yKHVybCwgdGhpcy5faHRtbEF1ZGlvRWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5faHRtbEF1ZGlvRWxlbWVudC5wcmVsb2FkID0gImF1
dG8iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2h0bWxB
dWRpb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2FucGxheXRocm91Z2giLCBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9p
c1JlYWR5VG9QbGF5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKF90aGlzLmF1dG9wbGF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wbGF5KDAsIF90aGlzLl9vZmZzZXQsIF90aGlz
Ll9sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5f
cmVhZHlUb1BsYXlDYWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX3RoaXMuX3JlYWR5VG9QbGF5Q2FsbGJhY2soKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5faHRtbEF1ZGlvRWxlbWVudCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faHRtbEF1ZGlv
RWxlbWVudC5sb2FkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRQYXJhbWV0ZXIgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkUGFyYW1ldGVyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siTG9nZ2VyIl0uRXJyb3IoIlBhcmFtZXRlciBtdXN0IGJlIGEgVVJMIHRvIHRoZSBzb3VuZCwg
YW4gQXJyYXkgb2YgVVJMcyAoLm1wMyAmIC5vZ2cpIG9yIGFuIEFycmF5QnVmZmVyIG9mIHRoZSBz
b3VuZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29kZWNTdXBwb3J0ZWRGb3VuZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzUmVhZHlUb1BsYXkgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRpbmcgYSByZWFkeSB0byBwbGF5
IGV2ZW50IHRvIGF2b2lkIGJyZWFraW5nIGNvZGUgcGF0aAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0aGlzLl9yZWFkeVRvUGxheUNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fcmVhZHlUb1BsYXlDYWxsYmFj
aykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yZWFk
eVRvUGxheUNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMDApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoZXgp
IHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIkxvZ2dlciJdLkVycm9yKCJVbmV4cGVjdGVkIGVycm9yLiBTb3VuZCBjcmVhdGlv
biBhYm9ydGVkLiIpOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5tYWluU291bmRU
cmFjay5SZW1vdmVTb3VuZCh0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBBZGRpbmcgYW4gZW1w
dHkgc291bmQgdG8gYXZvaWQgYnJlYWtpbmcgYXVkaW8gY2FsbHMgZm9yIG5vbiBXZWIgQXVkaW8g
YnJvd3NlcnMKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLm1haW5Tb3VuZFRyYWNrLkFkZFNvdW5k
KHRoaXMpOworICAgICAgICAgICAgaWYgKCFfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuV2FybmVkV2ViQXVkaW9VbnN1cHBv
cnRlZCkgeworICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJMb2dnZXIiXS5FcnJvcigiV2ViIEF1ZGlvIGlzIG5vdCBzdXBwb3J0ZWQgYnkg
eW91ciBicm93c2VyLiIpOworICAgICAgICAgICAgICAgIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5XYXJuZWRXZWJBdWRp
b1Vuc3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFNpbXVs
YXRpbmcgYSByZWFkeSB0byBwbGF5IGV2ZW50IHRvIGF2b2lkIGJyZWFraW5nIGNvZGUgZm9yIG5v
biB3ZWIgYXVkaW8gYnJvd3NlcnMKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkeVRvUGxheUNh
bGxiYWNrKSB7CisgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX3JlYWR5VG9QbGF5Q2FsbGJhY2spIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yZWFkeVRvUGxheUNhbGxiYWNrKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LCAxMDAwKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIHRoZSBzb3Vu
ZCBhbmQgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgICAgICovCisgICAgU291bmQucHJvdG90
eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmIChfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuY2FuVXNl
V2ViQXVkaW8pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykgeworICAgICAgICAg
ICAgICAgIHRoaXMuc3RvcCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5faXNS
ZWFkeVRvUGxheSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKHRoaXMuc291bmRUcmFja0lkID09
PSAtMSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3NjZW5lLm1haW5Tb3VuZFRyYWNrLlJlbW92
ZVNvdW5kKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5f
c2NlbmUuc291bmRUcmFja3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5zb3VuZFRy
YWNrc1t0aGlzLnNvdW5kVHJhY2tJZF0uUmVtb3ZlU291bmQodGhpcyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodGhpcy5fc291bmRHYWluKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fc291bmRHYWluLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zb3VuZEdh
aW4gPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX3NvdW5kUGFu
bmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc291bmRQYW5uZXIuZGlzY29ubmVjdCgpOwor
ICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kUGFubmVyID0gbnVsbDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0aGlzLl9zb3VuZFNvdXJjZSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX3NvdW5kU291cmNlLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zb3Vu
ZFNvdXJjZSA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9hdWRpb0J1
ZmZlciA9IG51bGw7CisgICAgICAgICAgICBpZiAodGhpcy5faHRtbEF1ZGlvRWxlbWVudCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX2h0bWxBdWRpb0VsZW1lbnQucGF1c2UoKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9odG1sQXVkaW9FbGVtZW50LnNyYyA9ICIiOworICAgICAgICAgICAgICAg
IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5faHRtbEF1ZGlvRWxlbWVudCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtaW5nU291cmNlKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fc3RyZWFtaW5nU291cmNlLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9jb25uZWN0ZWRUcmFuc2Zvcm1Ob2RlICYmIHRo
aXMuX3JlZ2lzdGVyRnVuYykgeworICAgICAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RlZFRyYW5z
Zm9ybU5vZGUudW5yZWdpc3RlckFmdGVyV29ybGRNYXRyaXhVcGRhdGUodGhpcy5fcmVnaXN0ZXJG
dW5jKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0ZWRUcmFuc2Zvcm1Ob2RlID0gbnVs
bDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0
cyBpZiB0aGUgc291bmRzIGlzIHJlYWR5IHRvIGJlIHBsYXllZCBvciBub3QuCisgICAgICogQHJl
dHVybnMgdHJ1ZSBpZiByZWFkeSwgb3RoZXJ3aXNlIGZhbHNlCisgICAgICovCisgICAgU291bmQu
cHJvdG90eXBlLmlzUmVhZHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9p
c1JlYWR5VG9QbGF5OworICAgIH07CisgICAgU291bmQucHJvdG90eXBlLl9zb3VuZExvYWRlZCA9
IGZ1bmN0aW9uIChhdWRpb0RhdGEpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgaWYgKCFfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5n
aW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0KSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5kZWNvZGVBdWRpb0RhdGEo
YXVkaW9EYXRhLCBmdW5jdGlvbiAoYnVmZmVyKSB7CisgICAgICAgICAgICBfdGhpcy5fYXVkaW9C
dWZmZXIgPSBidWZmZXI7CisgICAgICAgICAgICBfdGhpcy5faXNSZWFkeVRvUGxheSA9IHRydWU7
CisgICAgICAgICAgICBpZiAoX3RoaXMuYXV0b3BsYXkpIHsKKyAgICAgICAgICAgICAgICBfdGhp
cy5wbGF5KDAsIF90aGlzLl9vZmZzZXQsIF90aGlzLl9sZW5ndGgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKF90aGlzLl9yZWFkeVRvUGxheUNhbGxiYWNrKSB7CisgICAgICAgICAg
ICAgICAgX3RoaXMuX3JlYWR5VG9QbGF5Q2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwgZnVuY3Rpb24gKGVycikgeyBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siTG9nZ2VyIl0uRXJyb3IoIkVycm9yIHdoaWxlIGRlY29kaW5nIGF1ZGlvIGRhdGEg
Zm9yOiAiICsgX3RoaXMubmFtZSArICIgLyBFcnJvcjogIiArIGVycik7IH0pOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU2V0cyB0aGUgZGF0YSBvZiB0aGUgc291bmQgZnJvbSBhbiBhdWRpb2J1
ZmZlcgorICAgICAqIEBwYXJhbSBhdWRpb0J1ZmZlciBUaGUgYXVkaW9CdWZmZXIgY29udGFpbmlu
ZyB0aGUgZGF0YQorICAgICAqLworICAgIFNvdW5kLnByb3RvdHlwZS5zZXRBdWRpb0J1ZmZlciA9
IGZ1bmN0aW9uIChhdWRpb0J1ZmZlcikgeworICAgICAgICBpZiAoX0VuZ2luZXNfZW5naW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmNhblVzZVdl
YkF1ZGlvKSB7CisgICAgICAgICAgICB0aGlzLl9hdWRpb0J1ZmZlciA9IGF1ZGlvQnVmZmVyOwor
ICAgICAgICAgICAgdGhpcy5faXNSZWFkeVRvUGxheSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgc291bmRzIG9wdGlvbnMgc3Vj
aCBhcyBtYXhkaXN0YW5jZSwgbG9vcC4uLgorICAgICAqIEBwYXJhbSBvcHRpb25zIEEgSlNPTiBv
YmplY3QgY29udGFpbmluZyB2YWx1ZXMgbmFtZWQgYXMgdGhlIG9iamVjdCBwcm9wZXJ0aWVzCisg
ICAgICovCisgICAgU291bmQucHJvdG90eXBlLnVwZGF0ZU9wdGlvbnMgPSBmdW5jdGlvbiAob3B0
aW9ucykgeworICAgICAgICBpZiAob3B0aW9ucykgeworICAgICAgICAgICAgdGhpcy5sb29wID0g
b3B0aW9ucy5sb29wIHx8IHRoaXMubG9vcDsKKyAgICAgICAgICAgIHRoaXMubWF4RGlzdGFuY2Ug
PSBvcHRpb25zLm1heERpc3RhbmNlIHx8IHRoaXMubWF4RGlzdGFuY2U7CisgICAgICAgICAgICB0
aGlzLnVzZUN1c3RvbUF0dGVudWF0aW9uID0gb3B0aW9ucy51c2VDdXN0b21BdHRlbnVhdGlvbiB8
fCB0aGlzLnVzZUN1c3RvbUF0dGVudWF0aW9uOworICAgICAgICAgICAgdGhpcy5yb2xsb2ZmRmFj
dG9yID0gb3B0aW9ucy5yb2xsb2ZmRmFjdG9yIHx8IHRoaXMucm9sbG9mZkZhY3RvcjsKKyAgICAg
ICAgICAgIHRoaXMucmVmRGlzdGFuY2UgPSBvcHRpb25zLnJlZkRpc3RhbmNlIHx8IHRoaXMucmVm
RGlzdGFuY2U7CisgICAgICAgICAgICB0aGlzLmRpc3RhbmNlTW9kZWwgPSBvcHRpb25zLmRpc3Rh
bmNlTW9kZWwgfHwgdGhpcy5kaXN0YW5jZU1vZGVsOworICAgICAgICAgICAgdGhpcy5fcGxheWJh
Y2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGUgfHwgdGhpcy5fcGxheWJhY2tSYXRlOworICAg
ICAgICAgICAgdGhpcy5fbGVuZ3RoID0gb3B0aW9ucy5sZW5ndGggPyBvcHRpb25zLmxlbmd0aCAv
IDEwMDAgOiB1bmRlZmluZWQ7CisgICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBvcHRpb25zLm9m
ZnNldCA/IG9wdGlvbnMub2Zmc2V0IC8gMTAwMCA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIHRo
aXMuX3VwZGF0ZVNwYXRpYWxQYXJhbWV0ZXJzKCk7CisgICAgICAgICAgICBpZiAodGhpcy5pc1Bs
YXlpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtaW5nICYmIHRoaXMuX2h0
bWxBdWRpb0VsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5faHRtbEF1ZGlvRWxl
bWVudC5wbGF5YmFja1JhdGUgPSB0aGlzLl9wbGF5YmFja1JhdGU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5f
c291bmRTb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kU291cmNl
LnBsYXliYWNrUmF0ZS52YWx1ZSA9IHRoaXMuX3BsYXliYWNrUmF0ZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisgICAgU291bmQucHJvdG90eXBlLl9jcmVhdGVTcGF0aWFsUGFyYW1ldGVycyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiBfRW5naW5l
c19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9Fbmdp
bmUuYXVkaW9Db250ZXh0KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUuaGVhZHBob25l
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcGFubmluZ01vZGVsID0gIkhSVEYiOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc291bmRQYW5uZXIgPSBfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9D
b250ZXh0LmNyZWF0ZVBhbm5lcigpOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlU3BhdGlhbFBh
cmFtZXRlcnMoKTsKKyAgICAgICAgICAgIHRoaXMuX3NvdW5kUGFubmVyLmNvbm5lY3QodGhpcy5f
b3V0cHV0QXVkaW9Ob2RlKTsKKyAgICAgICAgICAgIHRoaXMuX2lucHV0QXVkaW9Ob2RlID0gdGhp
cy5fc291bmRQYW5uZXI7CisgICAgICAgIH0KKyAgICB9OworICAgIFNvdW5kLnByb3RvdHlwZS5f
dXBkYXRlU3BhdGlhbFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
LnNwYXRpYWxTb3VuZCAmJiB0aGlzLl9zb3VuZFBhbm5lcikgeworICAgICAgICAgICAgaWYgKHRo
aXMudXNlQ3VzdG9tQXR0ZW51YXRpb24pIHsKKyAgICAgICAgICAgICAgICAvLyBUcmlja3MgdG8g
ZGlzYWJsZSBpbiBhIHdheSBlbWJlZGRlZCBXZWIgQXVkaW8gYXR0ZW51YXRpb24KKyAgICAgICAg
ICAgICAgICB0aGlzLl9zb3VuZFBhbm5lci5kaXN0YW5jZU1vZGVsID0gImxpbmVhciI7CisgICAg
ICAgICAgICAgICAgdGhpcy5fc291bmRQYW5uZXIubWF4RGlzdGFuY2UgPSBOdW1iZXIuTUFYX1ZB
TFVFOworICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kUGFubmVyLnJlZkRpc3RhbmNlID0gMTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9zb3VuZFBhbm5lci5yb2xsb2ZmRmFjdG9yID0gMTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9zb3VuZFBhbm5lci5wYW5uaW5nTW9kZWwgPSB0aGlzLl9wYW5u
aW5nTW9kZWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9zb3VuZFBhbm5lci5kaXN0YW5jZU1vZGVsID0gdGhpcy5kaXN0YW5jZU1vZGVs
OworICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kUGFubmVyLm1heERpc3RhbmNlID0gdGhpcy5t
YXhEaXN0YW5jZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zb3VuZFBhbm5lci5yZWZEaXN0YW5j
ZSA9IHRoaXMucmVmRGlzdGFuY2U7CisgICAgICAgICAgICAgICAgdGhpcy5fc291bmRQYW5uZXIu
cm9sbG9mZkZhY3RvciA9IHRoaXMucm9sbG9mZkZhY3RvcjsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9zb3VuZFBhbm5lci5wYW5uaW5nTW9kZWwgPSB0aGlzLl9wYW5uaW5nTW9kZWw7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFN3aXRjaCB0aGUgcGFu
bmluZyBtb2RlbCB0byBIUlRGOgorICAgICAqIFJlbmRlcnMgYSBzdGVyZW8gb3V0cHV0IG9mIGhp
Z2hlciBxdWFsaXR5IHRoYW4gZXF1YWxwb3dlciDigJQgaXQgdXNlcyBhIGNvbnZvbHV0aW9uIHdp
dGggbWVhc3VyZWQgaW1wdWxzZSByZXNwb25zZXMgZnJvbSBodW1hbiBzdWJqZWN0cy4KKyAgICAg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3VuZHNfYW5k
X211c2ljI2NyZWF0aW5nLWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAqLworICAgIFNvdW5kLnBy
b3RvdHlwZS5zd2l0Y2hQYW5uaW5nTW9kZWxUb0hSVEYgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX3Bhbm5pbmdNb2RlbCA9ICJIUlRGIjsKKyAgICAgICAgdGhpcy5fc3dpdGNoUGFubmlu
Z01vZGVsKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTd2l0Y2ggdGhlIHBhbm5pbmcgbW9k
ZWwgdG8gRXF1YWwgUG93ZXI6CisgICAgICogUmVwcmVzZW50cyB0aGUgZXF1YWwtcG93ZXIgcGFu
bmluZyBhbGdvcml0aG0sIGdlbmVyYWxseSByZWdhcmRlZCBhcyBzaW1wbGUgYW5kIGVmZmljaWVu
dC4gZXF1YWxwb3dlciBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAgICAgKiBAc2VlIGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3VuZHNfYW5kX211c2ljI2NyZWF0aW5n
LWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAqLworICAgIFNvdW5kLnByb3RvdHlwZS5zd2l0Y2hQ
YW5uaW5nTW9kZWxUb0VxdWFsUG93ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3Bh
bm5pbmdNb2RlbCA9ICJlcXVhbHBvd2VyIjsKKyAgICAgICAgdGhpcy5fc3dpdGNoUGFubmluZ01v
ZGVsKCk7CisgICAgfTsKKyAgICBTb3VuZC5wcm90b3R5cGUuX3N3aXRjaFBhbm5pbmdNb2RlbCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiB0
aGlzLnNwYXRpYWxTb3VuZCAmJiB0aGlzLl9zb3VuZFBhbm5lcikgeworICAgICAgICAgICAgdGhp
cy5fc291bmRQYW5uZXIucGFubmluZ01vZGVsID0gdGhpcy5fcGFubmluZ01vZGVsOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb25uZWN0IHRoaXMgc291bmQgdG8gYSBzb3Vu
ZCB0cmFjayBhdWRpbyBub2RlIGxpa2UgZ2Fpbi4uLgorICAgICAqIEBwYXJhbSBzb3VuZFRyYWNr
QXVkaW9Ob2RlIHRoZSBzb3VuZCB0cmFjayBhdWRpbyBub2RlIHRvIGNvbm5lY3QgdG8KKyAgICAg
Ki8KKyAgICBTb3VuZC5wcm90b3R5cGUuY29ubmVjdFRvU291bmRUcmFja0F1ZGlvTm9kZSA9IGZ1
bmN0aW9uIChzb3VuZFRyYWNrQXVkaW9Ob2RlKSB7CisgICAgICAgIGlmIChfRW5naW5lc19lbmdp
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuY2Fu
VXNlV2ViQXVkaW8pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc091dHB1dENvbm5lY3RlZCkg
eworICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dEF1ZGlvTm9kZS5kaXNjb25uZWN0KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vdXRwdXRBdWRpb05vZGUuY29ubmVjdChz
b3VuZFRyYWNrQXVkaW9Ob2RlKTsKKyAgICAgICAgICAgIHRoaXMuX2lzT3V0cHV0Q29ubmVjdGVk
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgKiBUcmFuc2Zvcm0gdGhp
cyBzb3VuZCBpbnRvIGEgZGlyZWN0aW9uYWwgc291cmNlCisgICAgKiBAcGFyYW0gY29uZUlubmVy
QW5nbGUgU2l6ZSBvZiB0aGUgaW5uZXIgY29uZSBpbiBkZWdyZWUKKyAgICAqIEBwYXJhbSBjb25l
T3V0ZXJBbmdsZSBTaXplIG9mIHRoZSBvdXRlciBjb25lIGluIGRlZ3JlZQorICAgICogQHBhcmFt
IGNvbmVPdXRlckdhaW4gVm9sdW1lIG9mIHRoZSBzb3VuZCBvdXRzaWRlIHRoZSBvdXRlciBjb25l
IChiZXR3ZWVuIDAuMCBhbmQgMS4wKQorICAgICovCisgICAgU291bmQucHJvdG90eXBlLnNldERp
cmVjdGlvbmFsQ29uZSA9IGZ1bmN0aW9uIChjb25lSW5uZXJBbmdsZSwgY29uZU91dGVyQW5nbGUs
IGNvbmVPdXRlckdhaW4pIHsKKyAgICAgICAgaWYgKGNvbmVPdXRlckFuZ2xlIDwgY29uZUlubmVy
QW5nbGUpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJMb2dnZXIiXS5FcnJvcigic2V0RGlyZWN0aW9uYWxDb25lKCk6IG91dGVyIGFuZ2xl
IG9mIHRoZSBjb25lIG11c3QgYmUgc3VwZXJpb3Igb3IgZXF1YWwgdG8gdGhlIGlubmVyIGFuZ2xl
LiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NvbmVJ
bm5lckFuZ2xlID0gY29uZUlubmVyQW5nbGU7CisgICAgICAgIHRoaXMuX2NvbmVPdXRlckFuZ2xl
ID0gY29uZU91dGVyQW5nbGU7CisgICAgICAgIHRoaXMuX2NvbmVPdXRlckdhaW4gPSBjb25lT3V0
ZXJHYWluOworICAgICAgICB0aGlzLl9pc0RpcmVjdGlvbmFsID0gdHJ1ZTsKKyAgICAgICAgaWYg
KHRoaXMuaXNQbGF5aW5nICYmIHRoaXMubG9vcCkgeworICAgICAgICAgICAgdGhpcy5zdG9wKCk7
CisgICAgICAgICAgICB0aGlzLnBsYXkoMCwgdGhpcy5fb2Zmc2V0LCB0aGlzLl9sZW5ndGgpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU291bmQucHJvdG90
eXBlLCAiZGlyZWN0aW9uYWxDb25lSW5uZXJBbmdsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3Igc2V0cyB0aGUgaW5uZXIgYW5nbGUgZm9yIHRoZSBkaXJlY3Rpb25hbCBjb25l
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fY29uZUlubmVyQW5nbGU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGlubmVyIGFuZ2xlIGZvciB0aGUgZGlyZWN0aW9uYWwg
Y29uZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAodmFsdWUgIT0gdGhpcy5fY29uZUlubmVyQW5nbGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodGhpcy5fY29uZU91dGVyQW5nbGUgPCB2YWx1ZSkgeworICAgICAgICAgICAgICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTG9nZ2VyIl0u
RXJyb3IoImRpcmVjdGlvbmFsQ29uZUlubmVyQW5nbGU6IG91dGVyIGFuZ2xlIG9mIHRoZSBjb25l
IG11c3QgYmUgc3VwZXJpb3Igb3IgZXF1YWwgdG8gdGhlIGlubmVyIGFuZ2xlLiIpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHRoaXMuX2NvbmVJbm5lckFuZ2xlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0Vu
Z2luZS5jYW5Vc2VXZWJBdWRpbyAmJiB0aGlzLnNwYXRpYWxTb3VuZCAmJiB0aGlzLl9zb3VuZFBh
bm5lcikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3VuZFBhbm5lci5jb25lSW5uZXJB
bmdsZSA9IHRoaXMuX2NvbmVJbm5lckFuZ2xlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdW5k
LnByb3RvdHlwZSwgImRpcmVjdGlvbmFsQ29uZU91dGVyQW5nbGUiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIG91dGVyIGFuZ2xlIGZvciB0aGUgZGlyZWN0aW9u
YWwgY29uZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2NvbmVPdXRlckFuZ2xlOworICAgICAgICB9LAorICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBvdXRlciBhbmdsZSBmb3IgdGhlIGRpcmVj
dGlvbmFsIGNvbmUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgaWYgKHZhbHVlICE9IHRoaXMuX2NvbmVPdXRlckFuZ2xlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlIDwgdGhpcy5fY29uZUlubmVyQW5nbGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkxv
Z2dlciJdLkVycm9yKCJkaXJlY3Rpb25hbENvbmVPdXRlckFuZ2xlOiBvdXRlciBhbmdsZSBvZiB0
aGUgY29uZSBtdXN0IGJlIHN1cGVyaW9yIG9yIGVxdWFsIHRvIHRoZSBpbm5lciBhbmdsZS4iKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB0aGlzLl9jb25lT3V0ZXJBbmdsZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIGlm
IChfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0u
YXVkaW9FbmdpbmUuY2FuVXNlV2ViQXVkaW8gJiYgdGhpcy5zcGF0aWFsU291bmQgJiYgdGhpcy5f
c291bmRQYW5uZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fc291bmRQYW5uZXIuY29u
ZU91dGVyQW5nbGUgPSB0aGlzLl9jb25lT3V0ZXJBbmdsZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IHBvc2l0aW9uIG9mIHRoZSBlbWl0dGVyIGlmIHNwYXRpYWwgc291bmQgaXMgZW5hYmxlZAorICAg
ICAqIEBwYXJhbSBuZXdQb3NpdGlvbiBEZWZpbmVzIHRoZSBuZXcgcG9zaXNpdG9uCisgICAgICov
CisgICAgU291bmQucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKG5ld1Bvc2l0aW9u
KSB7CisgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3UG9zaXRpb247CisgICAgICAgIGlmIChf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVk
aW9FbmdpbmUuY2FuVXNlV2ViQXVkaW8gJiYgdGhpcy5zcGF0aWFsU291bmQgJiYgdGhpcy5fc291
bmRQYW5uZXIgJiYgIWlzTmFOKHRoaXMuX3Bvc2l0aW9uLngpICYmICFpc05hTih0aGlzLl9wb3Np
dGlvbi55KSAmJiAhaXNOYU4odGhpcy5fcG9zaXRpb24ueikpIHsKKyAgICAgICAgICAgIHRoaXMu
X3NvdW5kUGFubmVyLnNldFBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uLngsIHRoaXMuX3Bvc2l0aW9u
LnksIHRoaXMuX3Bvc2l0aW9uLnopOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSBsb2NhbCBkaXJlY3Rpb24gb2YgdGhlIGVtaXR0ZXIgaWYgc3BhdGlhbCBzb3Vu
ZCBpcyBlbmFibGVkCisgICAgICogQHBhcmFtIG5ld0xvY2FsRGlyZWN0aW9uIERlZmluZXMgdGhl
IG5ldyBsb2NhbCBkaXJlY3Rpb24KKyAgICAgKi8KKyAgICBTb3VuZC5wcm90b3R5cGUuc2V0TG9j
YWxEaXJlY3Rpb25Ub01lc2ggPSBmdW5jdGlvbiAobmV3TG9jYWxEaXJlY3Rpb24pIHsKKyAgICAg
ICAgdGhpcy5fbG9jYWxEaXJlY3Rpb24gPSBuZXdMb2NhbERpcmVjdGlvbjsKKyAgICAgICAgaWYg
KF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5h
dWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiB0aGlzLl9jb25uZWN0ZWRUcmFuc2Zvcm1Ob2Rl
ICYmIHRoaXMuaXNQbGF5aW5nKSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVEaXJlY3Rpb24o
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgU291bmQucHJvdG90eXBlLl91cGRhdGVEaXJlY3Rp
b24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fY29ubmVjdGVkVHJhbnNmb3Jt
Tm9kZSB8fCAhdGhpcy5fc291bmRQYW5uZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgbWF0ID0gdGhpcy5fY29ubmVjdGVkVHJhbnNmb3JtTm9kZS5nZXRX
b3JsZE1hdHJpeCgpOworICAgICAgICB2YXIgZGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwo
dGhpcy5fbG9jYWxEaXJlY3Rpb24sIG1hdCk7CisgICAgICAgIGRpcmVjdGlvbi5ub3JtYWxpemUo
KTsKKyAgICAgICAgdGhpcy5fc291bmRQYW5uZXIuc2V0T3JpZW50YXRpb24oZGlyZWN0aW9uLngs
IGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueik7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIFNvdW5kLnByb3RvdHlwZS51cGRhdGVEaXN0YW5jZUZyb21MaXN0ZW5lciA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiB0aGlzLl9jb25u
ZWN0ZWRUcmFuc2Zvcm1Ob2RlICYmIHRoaXMudXNlQ3VzdG9tQXR0ZW51YXRpb24gJiYgdGhpcy5f
c291bmRHYWluICYmIHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgdmFy
IGRpc3RhbmNlID0gdGhpcy5fY29ubmVjdGVkVHJhbnNmb3JtTm9kZS5nZXREaXN0YW5jZVRvQ2Ft
ZXJhKHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSk7CisgICAgICAgICAgICB0aGlzLl9zb3VuZEdh
aW4uZ2Fpbi52YWx1ZSA9IHRoaXMuX2N1c3RvbUF0dGVudWF0aW9uRnVuY3Rpb24odGhpcy5fdm9s
dW1lLCBkaXN0YW5jZSwgdGhpcy5tYXhEaXN0YW5jZSwgdGhpcy5yZWZEaXN0YW5jZSwgdGhpcy5y
b2xsb2ZmRmFjdG9yKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBh
IG5ldyBjdXN0b20gYXR0ZW51YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBzb3VuZC4KKyAgICAgKiBA
cGFyYW0gY2FsbGJhY2sgRGVmaW5lcyB0aGUgZnVuY3Rpb24gdXNlZCBmb3IgdGhlIGF0dGVudWF0
aW9uCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BsYXlpbmdf
c291bmRzX2FuZF9tdXNpYyNjcmVhdGluZy15b3VyLW93bi1jdXN0b20tYXR0ZW51YXRpb24tZnVu
Y3Rpb24KKyAgICAgKi8KKyAgICBTb3VuZC5wcm90b3R5cGUuc2V0QXR0ZW51YXRpb25GdW5jdGlv
biA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9jdXN0b21BdHRlbnVhdGlv
bkZ1bmN0aW9uID0gY2FsbGJhY2s7CisgICAgfTsKKyAgICAvKioKKyAgICAqIFBsYXkgdGhlIHNv
dW5kCisgICAgKiBAcGFyYW0gdGltZSAob3B0aW9uYWwpIFN0YXJ0IHRoZSBzb3VuZCBhZnRlciBY
IHNlY29uZHMuIFN0YXJ0IGltbWVkaWF0ZWx5ICgwKSBieSBkZWZhdWx0LgorICAgICogQHBhcmFt
IG9mZnNldCAob3B0aW9uYWwpIFN0YXJ0IHRoZSBzb3VuZCBhdCBhIHNwZWNpZmljIHRpbWUgaW4g
c2Vjb25kcworICAgICogQHBhcmFtIGxlbmd0aCAob3B0aW9uYWwpIFNvdW5kIGR1cmF0aW9uIChp
biBzZWNvbmRzKQorICAgICovCisgICAgU291bmQucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAo
dGltZSwgb2Zmc2V0LCBsZW5ndGgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgaWYgKHRoaXMuX2lzUmVhZHlUb1BsYXkgJiYgdGhpcy5fc2NlbmUuYXVkaW9FbmFibGVkICYm
IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5h
dWRpb0VuZ2luZS5hdWRpb0NvbnRleHQpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX3N0YXJ0T2Zmc2V0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICB0
aW1lID0gLXRoaXMuX3N0YXJ0T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFy
dE9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBzdGFy
dFRpbWUgPSB0aW1lID8gX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZSArIHRpbWUg
OiBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0u
YXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0LmN1cnJlbnRUaW1lOworICAgICAgICAgICAgICAgIGlm
ICghdGhpcy5fc291bmRTb3VyY2UgfHwgIXRoaXMuX3N0cmVhbWluZ1NvdXJjZSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpcy5zcGF0aWFsU291bmQgJiYgdGhpcy5fc291bmRQYW5uZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4odGhpcy5fcG9zaXRpb24ueCkg
JiYgIWlzTmFOKHRoaXMuX3Bvc2l0aW9uLnkpICYmICFpc05hTih0aGlzLl9wb3NpdGlvbi56KSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kUGFubmVyLnNldFBvc2l0
aW9uKHRoaXMuX3Bvc2l0aW9uLngsIHRoaXMuX3Bvc2l0aW9uLnksIHRoaXMuX3Bvc2l0aW9uLnop
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMuX2lzRGlyZWN0aW9uYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9zb3VuZFBhbm5lci5jb25lSW5uZXJBbmdsZSA9IHRoaXMuX2NvbmVJbm5lckFuZ2xlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kUGFubmVyLmNvbmVPdXRlckFuZ2xl
ID0gdGhpcy5fY29uZU91dGVyQW5nbGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5fc291bmRQYW5uZXIuY29uZU91dGVyR2FpbiA9IHRoaXMuX2NvbmVPdXRlckdhaW47CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Nvbm5lY3RlZFRyYW5zZm9ybU5vZGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRGlyZWN0aW9u
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3Vu
ZFBhbm5lci5zZXRPcmllbnRhdGlvbih0aGlzLl9sb2NhbERpcmVjdGlvbi54LCB0aGlzLl9sb2Nh
bERpcmVjdGlvbi55LCB0aGlzLl9sb2NhbERpcmVjdGlvbi56KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0cmVh
bWluZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3N0cmVhbWluZ1NvdXJjZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyZWFtaW5nU291cmNlID0gX0VuZ2lu
ZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1ZGlvRW5n
aW5lLmF1ZGlvQ29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodGhpcy5faHRtbEF1ZGlv
RWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9odG1sQXVkaW9FbGVtZW50
Lm9uZW5kZWQgPSBmdW5jdGlvbiAoKSB7IF90aGlzLl9vbmVuZGVkKCk7IH07CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9odG1sQXVkaW9FbGVtZW50LnBsYXliYWNrUmF0ZSA9IHRoaXMu
X3BsYXliYWNrUmF0ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9zdHJlYW1pbmdTb3VyY2UuZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9zdHJlYW1pbmdTb3VyY2UuY29ubmVjdCh0aGlzLl9pbnB1dEF1ZGlvTm9kZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9odG1sQXVkaW9FbGVtZW50KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyByZXF1aXJlZCB0byBtYW5hZ2UgcHJvcGVybHkgdGhlIG5ldyBz
dXNwZW5kZWQgZGVmYXVsdCBzdGF0ZSBvZiBDaHJvbWUKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdoZW4gdGhlIG9wdGlvbiAnc3RyZWFtaW5nOiB0cnVlJyBpcyB1c2VkLCB3ZSBuZWVkIGZp
cnN0IHRvIHdhaXQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYXVkaW8gZW5n
aW5lIHRvIGJlIHVubG9ja2VkIGJ5IGEgdXNlciBnZXN0dXJlIGJlZm9yZSB0cnlpbmcgdG8gcGxh
eQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW4gSFRNTCBBdWRpbyBlbGVtZW10CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgdHJ5VG9QbGF5ID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUudW5sb2NrZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXlQcm9taXNlID0gX3RoaXMuX2h0bWxBdWRp
b0VsZW1lbnQucGxheSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBi
cm93c2VycyB0aGF0IGRvbuKAmXQgeWV0IHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwbGF5UHJvbWlzZSB3b27igJl0IGJlIGRl
ZmluZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGF5UHJvbWlzZSAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5
UHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBdXRvbWF0aWMgcGxheWJhY2sgZmFpbGVkLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhaXRpbmcgZm9yIHRoZSBhdWRpbyBl
bmdpbmUgdG8gYmUgdW5sb2NrZWQgYnkgdXNlciBjbGljayBvbiB1bm11dGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUubG9jaygpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5sb29wIHx8IF90aGlzLmF1
dG9wbGF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRp
b0VuZ2luZS5vbkF1ZGlvVW5sb2NrZWRPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkgeyB0
cnlUb1BsYXkoKTsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChfdGhpcy5sb29wIHx8IF90aGlzLmF1dG9wbGF5KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUub25BdWRpb1VubG9ja2VkT2JzZXJ2YWJs
ZS5hZGRPbmNlKGZ1bmN0aW9uICgpIHsgdHJ5VG9QbGF5KCk7IH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVRvUGxheSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgdHJ5VG9QbGF5ID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5hdWRpb0NvbnRleHQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW5ndGggfHwgX3RoaXMu
X2xlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwg
X3RoaXMuX29mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc291bmRT
b3VyY2UgPSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5n
aW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zb3VuZFNvdXJjZS5idWZmZXIgPSBfdGhp
cy5fYXVkaW9CdWZmZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NvdW5k
U291cmNlLmNvbm5lY3QoX3RoaXMuX2lucHV0QXVkaW9Ob2RlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5fc291bmRTb3VyY2UubG9vcCA9IF90aGlzLmxvb3A7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zb3VuZFNvdXJjZS5sb29wU3RhcnQgPSBv
ZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChsZW5ndGggIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5fc291bmRTb3VyY2UubG9vcEVuZCA9IChvZmZzZXQgfCAwKSAr
IGxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX3RoaXMuX3NvdW5kU291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IF90aGlz
Ll9wbGF5YmFja1JhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NvdW5k
U291cmNlLm9uZW5kZWQgPSBmdW5jdGlvbiAoKSB7IF90aGlzLl9vbmVuZGVkKCk7IH07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lID0gdGltZSA/IF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5hdWRp
b0NvbnRleHQuY3VycmVudFRpbWUgKyB0aW1lIDogX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5jdXJy
ZW50VGltZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0dWFsT2Zmc2V0ID0g
X3RoaXMuaXNQYXVzZWQgPyBfdGhpcy5fc3RhcnRPZmZzZXQgJSBfdGhpcy5fc291bmRTb3VyY2Uu
YnVmZmVyLmR1cmF0aW9uIDogb2Zmc2V0ID8gb2Zmc2V0IDogMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5fc291bmRTb3VyY2Uuc3RhcnQoc3RhcnRUaW1lLCBhY3R1YWxPZmZz
ZXQsIF90aGlzLmxvb3AgPyB1bmRlZmluZWQgOiBsZW5ndGgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBpZiAo
X0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1
ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5zdGF0ZSA9PT0gInN1c3BlbmRlZCIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdhaXQgYSBiaXQgZm9yIEZGIGFzIGNvbnRleHQgc2VlbXMgbGF0
ZSB0byBiZSByZWFkeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9D
b250ZXh0LnN0YXRlID09PSAic3VzcGVuZGVkIikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBdXRvbWF0aWMgcGxheWJhY2sgZmFpbGVkLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBXYWl0aW5nIGZvciB0aGUgYXVkaW8gZW5naW5lIHRvIGJlIHVubG9j
a2VkIGJ5IHVzZXIgY2xpY2sgb24gdW5tdXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUi
XS5hdWRpb0VuZ2luZS5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChfdGhpcy5sb29wIHx8IF90aGlzLmF1dG9wbGF5KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siRW5naW5lIl0uYXVkaW9FbmdpbmUub25BdWRpb1VubG9ja2VkT2JzZXJ2YWJsZS5hZGRPbmNl
KGZ1bmN0aW9uICgpIHsgdHJ5VG9QbGF5KCk7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlU
b1BsYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9LCA1MDApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5VG9QbGF5KCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5f
c3RhcnRUaW1lID0gc3RhcnRUaW1lOworICAgICAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTG9nZ2VyIl0uRXJyb3IoIkVycm9yIHdo
aWxlIHRyeWluZyB0byBwbGF5IGF1ZGlvOiAiICsgdGhpcy5uYW1lICsgIiwgIiArIGV4Lm1lc3Nh
Z2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBTb3VuZC5wcm90b3R5
cGUuX29uZW5kZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFs
c2U7CisgICAgICAgIGlmICh0aGlzLm9uZW5kZWQpIHsKKyAgICAgICAgICAgIHRoaXMub25lbmRl
ZCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMub25FbmRlZE9ic2VydmFibGUubm90aWZ5T2Jz
ZXJ2ZXJzKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgKiBTdG9wIHRoZSBzb3VuZAorICAg
ICogQHBhcmFtIHRpbWUgKG9wdGlvbmFsKSBTdG9wIHRoZSBzb3VuZCBhZnRlciBYIHNlY29uZHMu
IFN0b3AgaW1tZWRpYXRlbHkgKDApIGJ5IGRlZmF1bHQuCisgICAgKi8KKyAgICBTb3VuZC5wcm90
b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3N0
cmVhbWluZykgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9odG1sQXVkaW9FbGVtZW50KSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2h0bWxBdWRpb0VsZW1lbnQucGF1c2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGVzdCBuZWVkZWQgZm9yIEZpcmVmb3ggb3IgaXQgd2lsbCBn
ZW5lcmF0ZSBhbiBJbnZhbGlkIFN0YXRlIEVycm9yCisgICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9odG1sQXVkaW9FbGVtZW50LmN1cnJlbnRUaW1lID4gMCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5faHRtbEF1ZGlvRWxlbWVudC5jdXJyZW50VGltZSA9IDA7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmVhbWluZ1NvdXJjZS5kaXNjb25uZWN0KCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9D
b250ZXh0ICYmIHRoaXMuX3NvdW5kU291cmNlKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0b3BU
aW1lID0gdGltZSA/IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5hdWRpb0NvbnRleHQuY3VycmVudFRpbWUgKyB0aW1lIDog
X0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1
ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9zb3VuZFNvdXJjZS5zdG9wKHN0b3BUaW1lKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zb3Vu
ZFNvdXJjZS5vbmVuZGVkID0gZnVuY3Rpb24gKCkgeyBfdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTsg
fTsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNQYXVzZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUHV0IHRoZSBzb3VuZCBp
biBwYXVzZQorICAgICAqLworICAgIFNvdW5kLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKSB7CisgICAgICAgICAgICB0aGlzLmlzUGF1
c2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zdHJlYW1pbmcpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodGhpcy5faHRtbEF1ZGlvRWxlbWVudCkgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9odG1sQXVkaW9FbGVtZW50LnBhdXNlKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW1pbmdT
b3VyY2UuZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5hdWRpb0NvbnRleHQpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLnN0b3AoMCk7CisgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgKz0g
X0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1
ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZSAtIHRoaXMuX3N0YXJ0VGltZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIGRl
ZGljYXRlZCB2b2x1bWUgZm9yIHRoaXMgc291bmRzCisgICAgICogQHBhcmFtIG5ld1ZvbHVtZSBE
ZWZpbmUgdGhlIG5ldyB2b2x1bWUgb2YgdGhlIHNvdW5kCisgICAgICogQHBhcmFtIHRpbWUgRGVm
aW5lIHRpbWUgZm9yIGdyYWR1YWwgY2hhbmdlIHRvIG5ldyB2b2x1bWUKKyAgICAgKi8KKyAgICBT
b3VuZC5wcm90b3R5cGUuc2V0Vm9sdW1lID0gZnVuY3Rpb24gKG5ld1ZvbHVtZSwgdGltZSkgewor
ICAgICAgICBpZiAoX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkVuZ2luZSJdLmF1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvICYmIHRoaXMuX3NvdW5kR2Fpbikg
eworICAgICAgICAgICAgaWYgKHRpbWUgJiYgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dCkgeworICAg
ICAgICAgICAgICAgIHRoaXMuX3NvdW5kR2Fpbi5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVk
aW9FbmdpbmUuYXVkaW9Db250ZXh0LmN1cnJlbnRUaW1lKTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9zb3VuZEdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSh0aGlzLl9zb3VuZEdhaW4uZ2Fpbi52YWx1
ZSwgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJd
LmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZSk7CisgICAgICAgICAgICAgICAg
dGhpcy5fc291bmRHYWluLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobmV3Vm9sdW1lLCBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVk
aW9FbmdpbmUuYXVkaW9Db250ZXh0LmN1cnJlbnRUaW1lICsgdGltZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zb3VuZEdhaW4uZ2Fp
bi52YWx1ZSA9IG5ld1ZvbHVtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0
aGlzLl92b2x1bWUgPSBuZXdWb2x1bWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhl
IHNvdW5kIHBsYXkgYmFjayByYXRlCisgICAgICogQHBhcmFtIG5ld1BsYXliYWNrUmF0ZSBEZWZp
bmUgdGhlIHBsYXliYWNrIHJhdGUgdGhlIHNvdW5kIHNob3VsZCBiZSBwbGF5ZWQgYXQKKyAgICAg
Ki8KKyAgICBTb3VuZC5wcm90b3R5cGUuc2V0UGxheWJhY2tSYXRlID0gZnVuY3Rpb24gKG5ld1Bs
YXliYWNrUmF0ZSkgeworICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBuZXdQbGF5YmFja1Jh
dGU7CisgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykgeworICAgICAgICAgICAgaWYgKHRoaXMu
X3N0cmVhbWluZyAmJiB0aGlzLl9odG1sQXVkaW9FbGVtZW50KSB7CisgICAgICAgICAgICAgICAg
dGhpcy5faHRtbEF1ZGlvRWxlbWVudC5wbGF5YmFja1JhdGUgPSB0aGlzLl9wbGF5YmFja1JhdGU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9zb3VuZFNvdXJjZSkg
eworICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kU291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9
IHRoaXMuX3BsYXliYWNrUmF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgdm9sdW1lIG9mIHRoZSBzb3VuZC4KKyAgICAgKiBAcmV0
dXJucyB0aGUgdm9sdW1lIG9mIHRoZSBzb3VuZAorICAgICAqLworICAgIFNvdW5kLnByb3RvdHlw
ZS5nZXRWb2x1bWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWU7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIHNvdW5kIHRvIGEgZGVkaWNhdGVk
IG1lc2gKKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtTm9kZSBUaGUgdHJhbnNmb3JtIG5vZGUgdG8g
Y29ubmVjdCB0aGUgc291bmQgd2l0aAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9wbGF5aW5nX3NvdW5kc19hbmRfbXVzaWMjYXR0YWNoaW5nLWEtc291bmQtdG8t
YS1tZXNoCisgICAgICovCisgICAgU291bmQucHJvdG90eXBlLmF0dGFjaFRvTWVzaCA9IGZ1bmN0
aW9uICh0cmFuc2Zvcm1Ob2RlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAg
IGlmICh0aGlzLl9jb25uZWN0ZWRUcmFuc2Zvcm1Ob2RlICYmIHRoaXMuX3JlZ2lzdGVyRnVuYykg
eworICAgICAgICAgICAgdGhpcy5fY29ubmVjdGVkVHJhbnNmb3JtTm9kZS51bnJlZ2lzdGVyQWZ0
ZXJXb3JsZE1hdHJpeFVwZGF0ZSh0aGlzLl9yZWdpc3RlckZ1bmMpOworICAgICAgICAgICAgdGhp
cy5fcmVnaXN0ZXJGdW5jID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb25uZWN0
ZWRUcmFuc2Zvcm1Ob2RlID0gdHJhbnNmb3JtTm9kZTsKKyAgICAgICAgaWYgKCF0aGlzLnNwYXRp
YWxTb3VuZCkgeworICAgICAgICAgICAgdGhpcy5zcGF0aWFsU291bmQgPSB0cnVlOworICAgICAg
ICAgICAgdGhpcy5fY3JlYXRlU3BhdGlhbFBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIGlmICh0
aGlzLmlzUGxheWluZyAmJiB0aGlzLmxvb3ApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnN0b3Ao
KTsKKyAgICAgICAgICAgICAgICB0aGlzLnBsYXkoMCwgdGhpcy5fb2Zmc2V0LCB0aGlzLl9sZW5n
dGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX29uUmVnaXN0ZXJB
ZnRlcldvcmxkTWF0cml4VXBkYXRlKHRoaXMuX2Nvbm5lY3RlZFRyYW5zZm9ybU5vZGUpOworICAg
ICAgICB0aGlzLl9yZWdpc3RlckZ1bmMgPSBmdW5jdGlvbiAodHJhbnNmb3JtTm9kZSkgeyByZXR1
cm4gX3RoaXMuX29uUmVnaXN0ZXJBZnRlcldvcmxkTWF0cml4VXBkYXRlKHRyYW5zZm9ybU5vZGUp
OyB9OworICAgICAgICB0aGlzLl9jb25uZWN0ZWRUcmFuc2Zvcm1Ob2RlLnJlZ2lzdGVyQWZ0ZXJX
b3JsZE1hdHJpeFVwZGF0ZSh0aGlzLl9yZWdpc3RlckZ1bmMpOworICAgIH07CisgICAgLyoqCisg
ICAgICogRGV0YWNoIHRoZSBzb3VuZCBmcm9tIHRoZSBwcmV2aW91c2x5IGF0dGFjaGVkIG1lc2gK
KyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3Vu
ZHNfYW5kX211c2ljI2F0dGFjaGluZy1hLXNvdW5kLXRvLWEtbWVzaAorICAgICAqLworICAgIFNv
dW5kLnByb3RvdHlwZS5kZXRhY2hGcm9tTWVzaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMuX2Nvbm5lY3RlZFRyYW5zZm9ybU5vZGUgJiYgdGhpcy5fcmVnaXN0ZXJGdW5jKSB7Cisg
ICAgICAgICAgICB0aGlzLl9jb25uZWN0ZWRUcmFuc2Zvcm1Ob2RlLnVucmVnaXN0ZXJBZnRlcldv
cmxkTWF0cml4VXBkYXRlKHRoaXMuX3JlZ2lzdGVyRnVuYyk7CisgICAgICAgICAgICB0aGlzLl9y
ZWdpc3RlckZ1bmMgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fY29ubmVjdGVkVHJhbnNmb3Jt
Tm9kZSA9IG51bGw7CisgICAgICAgIH0KKyAgICB9OworICAgIFNvdW5kLnByb3RvdHlwZS5fb25S
ZWdpc3RlckFmdGVyV29ybGRNYXRyaXhVcGRhdGUgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAg
ICBpZiAoIW5vZGUuZ2V0Qm91bmRpbmdJbmZvKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIG1lc2ggPSBub2RlOworICAgICAgICBpZiAodGhpcy5fcG9zaXRp
b25JbkVtaXR0ZXJTcGFjZSkgeworICAgICAgICAgICAgbWVzaC53b3JsZE1hdHJpeEZyb21DYWNo
ZS5pbnZlcnRUb1JlZihfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXSk7CisgICAgICAgICAgICB0aGlzLnNldFBvc2l0
aW9uKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUbXBW
ZWN0b3JzIl0uTWF0cml4WzBdLmdldFRyYW5zbGF0aW9uKCkpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9IG1lc2guZ2V0Qm91bmRpbmdJ
bmZvKCk7CisgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uKGJvdW5kaW5nSW5mby5ib3VuZGlu
Z1NwaGVyZS5jZW50ZXJXb3JsZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9FbmdpbmVzX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5j
YW5Vc2VXZWJBdWRpbyAmJiB0aGlzLl9pc0RpcmVjdGlvbmFsICYmIHRoaXMuaXNQbGF5aW5nKSB7
CisgICAgICAgICAgICB0aGlzLl91cGRhdGVEaXJlY3Rpb24oKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogQ2xvbmUgdGhlIGN1cnJlbnQgc291bmQgaW4gdGhlIHNjZW5lLgor
ICAgICAqIEByZXR1cm5zIHRoZSBuZXcgc291bmQgY2xvbmUKKyAgICAgKi8KKyAgICBTb3VuZC5w
cm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGlmICghdGhpcy5fc3RyZWFtaW5nKSB7CisgICAgICAgICAgICB2YXIgc2V0QnVm
ZmVyQW5kUnVuID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5faXNS
ZWFkeVRvUGxheSkgeworICAgICAgICAgICAgICAgICAgICBjbG9uZWRTb3VuZC5fYXVkaW9CdWZm
ZXIgPSBfdGhpcy5nZXRBdWRpb0J1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBjbG9uZWRT
b3VuZC5faXNSZWFkeVRvUGxheSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChjbG9u
ZWRTb3VuZC5hdXRvcGxheSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVkU291bmQu
cGxheSgwLCBfdGhpcy5fb2Zmc2V0LCBfdGhpcy5fbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoc2V0QnVmZmVyQW5kUnVuLCAzMDApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB2YXIgY3VycmVudE9w
dGlvbnMgPSB7CisgICAgICAgICAgICAgICAgYXV0b3BsYXk6IHRoaXMuYXV0b3BsYXksIGxvb3A6
IHRoaXMubG9vcCwKKyAgICAgICAgICAgICAgICB2b2x1bWU6IHRoaXMuX3ZvbHVtZSwgc3BhdGlh
bFNvdW5kOiB0aGlzLnNwYXRpYWxTb3VuZCwgbWF4RGlzdGFuY2U6IHRoaXMubWF4RGlzdGFuY2Us
CisgICAgICAgICAgICAgICAgdXNlQ3VzdG9tQXR0ZW51YXRpb246IHRoaXMudXNlQ3VzdG9tQXR0
ZW51YXRpb24sIHJvbGxvZmZGYWN0b3I6IHRoaXMucm9sbG9mZkZhY3RvciwKKyAgICAgICAgICAg
ICAgICByZWZEaXN0YW5jZTogdGhpcy5yZWZEaXN0YW5jZSwgZGlzdGFuY2VNb2RlbDogdGhpcy5k
aXN0YW5jZU1vZGVsCisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIGNsb25lZFNvdW5k
ID0gbmV3IFNvdW5kKHRoaXMubmFtZSArICJfY2xvbmVkIiwgbmV3IEFycmF5QnVmZmVyKDApLCB0
aGlzLl9zY2VuZSwgbnVsbCwgY3VycmVudE9wdGlvbnMpOworICAgICAgICAgICAgaWYgKHRoaXMu
dXNlQ3VzdG9tQXR0ZW51YXRpb24pIHsKKyAgICAgICAgICAgICAgICBjbG9uZWRTb3VuZC5zZXRB
dHRlbnVhdGlvbkZ1bmN0aW9uKHRoaXMuX2N1c3RvbUF0dGVudWF0aW9uRnVuY3Rpb24pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2xvbmVkU291bmQuc2V0UG9zaXRpb24odGhpcy5fcG9z
aXRpb24pOworICAgICAgICAgICAgY2xvbmVkU291bmQuc2V0UGxheWJhY2tSYXRlKHRoaXMuX3Bs
YXliYWNrUmF0ZSk7CisgICAgICAgICAgICBzZXRCdWZmZXJBbmRSdW4oKTsKKyAgICAgICAgICAg
IHJldHVybiBjbG9uZWRTb3VuZDsKKyAgICAgICAgfQorICAgICAgICAvLyBDYW4ndCBjbG9uZSBh
IHN0cmVhbWluZyBzb3VuZAorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHVu
ZGVybHlpbmcgYXVkaW8gYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEKKyAgICAgKiBAcmV0dXJu
cyB0aGUgYXVkaW8gYnVmZmVyCisgICAgICovCisgICAgU291bmQucHJvdG90eXBlLmdldEF1ZGlv
QnVmZmVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXI7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBTb3VuZCBpbiBhIEpTT04g
cmVwcmVzZW50YXRpb24KKyAgICAgKiBAcmV0dXJucyB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBv
ZiB0aGUgc291bmQKKyAgICAgKi8KKyAgICBTb3VuZC5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IHsKKyAgICAgICAg
ICAgIG5hbWU6IHRoaXMubmFtZSwKKyAgICAgICAgICAgIHVybDogdGhpcy5uYW1lLAorICAgICAg
ICAgICAgYXV0b3BsYXk6IHRoaXMuYXV0b3BsYXksCisgICAgICAgICAgICBsb29wOiB0aGlzLmxv
b3AsCisgICAgICAgICAgICB2b2x1bWU6IHRoaXMuX3ZvbHVtZSwKKyAgICAgICAgICAgIHNwYXRp
YWxTb3VuZDogdGhpcy5zcGF0aWFsU291bmQsCisgICAgICAgICAgICBtYXhEaXN0YW5jZTogdGhp
cy5tYXhEaXN0YW5jZSwKKyAgICAgICAgICAgIHJvbGxvZmZGYWN0b3I6IHRoaXMucm9sbG9mZkZh
Y3RvciwKKyAgICAgICAgICAgIHJlZkRpc3RhbmNlOiB0aGlzLnJlZkRpc3RhbmNlLAorICAgICAg
ICAgICAgZGlzdGFuY2VNb2RlbDogdGhpcy5kaXN0YW5jZU1vZGVsLAorICAgICAgICAgICAgcGxh
eWJhY2tSYXRlOiB0aGlzLl9wbGF5YmFja1JhdGUsCisgICAgICAgICAgICBwYW5uaW5nTW9kZWw6
IHRoaXMuX3Bhbm5pbmdNb2RlbCwKKyAgICAgICAgICAgIHNvdW5kVHJhY2tJZDogdGhpcy5zb3Vu
ZFRyYWNrSWQKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKHRoaXMuc3BhdGlhbFNvdW5kKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fY29ubmVjdGVkVHJhbnNmb3JtTm9kZSkgeworICAgICAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29ubmVjdGVkTWVzaElkID0gdGhpcy5fY29ubmVj
dGVkVHJhbnNmb3JtTm9kZS5pZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QucG9zaXRpb24gPSB0aGlzLl9wb3NpdGlvbi5hc0FycmF5KCk7CisgICAgICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJlZkRpc3RhbmNlID0gdGhpcy5yZWZEaXN0YW5jZTsK
KyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZGlzdGFuY2VNb2RlbCA9IHRoaXMuZGlz
dGFuY2VNb2RlbDsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaXNEaXJlY3Rpb25h
bCA9IHRoaXMuX2lzRGlyZWN0aW9uYWw7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
LmxvY2FsRGlyZWN0aW9uVG9NZXNoID0gdGhpcy5fbG9jYWxEaXJlY3Rpb24uYXNBcnJheSgpOwor
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jb25lSW5uZXJBbmdsZSA9IHRoaXMuX2Nv
bmVJbm5lckFuZ2xlOworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jb25lT3V0ZXJB
bmdsZSA9IHRoaXMuX2NvbmVPdXRlckFuZ2xlOworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5jb25lT3V0ZXJHYWluID0gdGhpcy5fY29uZU91dGVyR2FpbjsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFBhcnNlIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIHNvdW5kIHRvIGlubnN0YW50aWF0ZSBp
biBhIGdpdmVuIHNjZW5lCisgICAgICogQHBhcmFtIHBhcnNlZFNvdW5kIERlZmluZSB0aGUgSlNP
TiByZXByZXNlbnRhdGlvbiBvZiB0aGUgc291bmQgKHVzdWFsbHkgY29taW5nIGZyb20gdGhlIHNl
cmlhbGl6ZSBtZXRob2QpCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhl
IG5ldyBwYXJzZWQgc291bmQgc2hvdWxkIGJlIGNyZWF0ZWQgaW4KKyAgICAgKiBAcGFyYW0gcm9v
dFVybCBEZWZpbmUgdGhlIHJvb3R1cmwgb2YgdGhlIGxvYWQgaW4gY2FzZSB3ZSBuZWVkIHRvIGZl
dGNoIHJlbGF0aXZlIGRlcGVuZGVuY2llcworICAgICAqIEBwYXJhbSBzb3VyY2VTb3VuZCBEZWZp
bmUgYSBjb3VuZCBwbGFjZSBob2xkZXIgaWYgZG8gbm90IG5lZWQgdG8gaW5zdGFudGlhdGUgYSBu
ZXcgb25lCisgICAgICogQHJldHVybnMgdGhlIG5ld2x5IHBhcnNlZCBzb3VuZAorICAgICAqLwor
ICAgIFNvdW5kLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZFNvdW5kLCBzY2VuZSwgcm9vdFVybCwg
c291cmNlU291bmQpIHsKKyAgICAgICAgdmFyIHNvdW5kTmFtZSA9IHBhcnNlZFNvdW5kLm5hbWU7
CisgICAgICAgIHZhciBzb3VuZFVybDsKKyAgICAgICAgaWYgKHBhcnNlZFNvdW5kLnVybCkgewor
ICAgICAgICAgICAgc291bmRVcmwgPSByb290VXJsICsgcGFyc2VkU291bmQudXJsOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc291bmRVcmwgPSByb290VXJsICsgc291
bmROYW1lOworICAgICAgICB9CisgICAgICAgIHZhciBvcHRpb25zID0geworICAgICAgICAgICAg
YXV0b3BsYXk6IHBhcnNlZFNvdW5kLmF1dG9wbGF5LCBsb29wOiBwYXJzZWRTb3VuZC5sb29wLCB2
b2x1bWU6IHBhcnNlZFNvdW5kLnZvbHVtZSwKKyAgICAgICAgICAgIHNwYXRpYWxTb3VuZDogcGFy
c2VkU291bmQuc3BhdGlhbFNvdW5kLCBtYXhEaXN0YW5jZTogcGFyc2VkU291bmQubWF4RGlzdGFu
Y2UsCisgICAgICAgICAgICByb2xsb2ZmRmFjdG9yOiBwYXJzZWRTb3VuZC5yb2xsb2ZmRmFjdG9y
LAorICAgICAgICAgICAgcmVmRGlzdGFuY2U6IHBhcnNlZFNvdW5kLnJlZkRpc3RhbmNlLAorICAg
ICAgICAgICAgZGlzdGFuY2VNb2RlbDogcGFyc2VkU291bmQuZGlzdGFuY2VNb2RlbCwKKyAgICAg
ICAgICAgIHBsYXliYWNrUmF0ZTogcGFyc2VkU291bmQucGxheWJhY2tSYXRlCisgICAgICAgIH07
CisgICAgICAgIHZhciBuZXdTb3VuZDsKKyAgICAgICAgaWYgKCFzb3VyY2VTb3VuZCkgeworICAg
ICAgICAgICAgbmV3U291bmQgPSBuZXcgU291bmQoc291bmROYW1lLCBzb3VuZFVybCwgc2NlbmUs
IGZ1bmN0aW9uICgpIHsgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKG5ld1NvdW5kKTsgfSwgb3B0
aW9ucyk7CisgICAgICAgICAgICBzY2VuZS5fYWRkUGVuZGluZ0RhdGEobmV3U291bmQpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIHNldEJ1ZmZlckFuZFJ1biA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlU291bmQuX2lzUmVhZHlU
b1BsYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3U291bmQuX2F1ZGlvQnVmZmVyID0gc291
cmNlU291bmQuZ2V0QXVkaW9CdWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3U291bmQu
X2lzUmVhZHlUb1BsYXkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAobmV3U291bmQu
YXV0b3BsYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NvdW5kLnBsYXkoMCwgbmV3
U291bmQuX29mZnNldCwgbmV3U291bmQuX2xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHNldEJ1ZmZlckFuZFJ1biwgMzAwKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgbmV3U291bmQgPSBuZXcgU291
bmQoc291bmROYW1lLCBuZXcgQXJyYXlCdWZmZXIoMCksIHNjZW5lLCBudWxsLCBvcHRpb25zKTsK
KyAgICAgICAgICAgIHNldEJ1ZmZlckFuZFJ1bigpOworICAgICAgICB9CisgICAgICAgIGlmIChw
YXJzZWRTb3VuZC5wb3NpdGlvbikgeworICAgICAgICAgICAgdmFyIHNvdW5kUG9zaXRpb24gPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJd
LkZyb21BcnJheShwYXJzZWRTb3VuZC5wb3NpdGlvbik7CisgICAgICAgICAgICBuZXdTb3VuZC5z
ZXRQb3NpdGlvbihzb3VuZFBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2Vk
U291bmQuaXNEaXJlY3Rpb25hbCkgeworICAgICAgICAgICAgbmV3U291bmQuc2V0RGlyZWN0aW9u
YWxDb25lKHBhcnNlZFNvdW5kLmNvbmVJbm5lckFuZ2xlIHx8IDM2MCwgcGFyc2VkU291bmQuY29u
ZU91dGVyQW5nbGUgfHwgMzYwLCBwYXJzZWRTb3VuZC5jb25lT3V0ZXJHYWluIHx8IDApOworICAg
ICAgICAgICAgaWYgKHBhcnNlZFNvdW5kLmxvY2FsRGlyZWN0aW9uVG9NZXNoKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGxvY2FsRGlyZWN0aW9uVG9NZXNoID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocGFyc2VkU291
bmQubG9jYWxEaXJlY3Rpb25Ub01lc2gpOworICAgICAgICAgICAgICAgIG5ld1NvdW5kLnNldExv
Y2FsRGlyZWN0aW9uVG9NZXNoKGxvY2FsRGlyZWN0aW9uVG9NZXNoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkU291bmQuY29ubmVjdGVkTWVzaElkKSB7Cisg
ICAgICAgICAgICB2YXIgY29ubmVjdGVkTWVzaCA9IHNjZW5lLmdldE1lc2hCeUlEKHBhcnNlZFNv
dW5kLmNvbm5lY3RlZE1lc2hJZCk7CisgICAgICAgICAgICBpZiAoY29ubmVjdGVkTWVzaCkgewor
ICAgICAgICAgICAgICAgIG5ld1NvdW5kLmF0dGFjaFRvTWVzaChjb25uZWN0ZWRNZXNoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3U291bmQ7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIFNvdW5kLl9TY2VuZUNvbXBvbmVudEluaXRpYWxpemF0
aW9uID0gZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiQXVkaW9TY2Vu
ZUNvbXBvbmVudCIpOworICAgIH07CisgICAgcmV0dXJuIFNvdW5kOworfSgpKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9BdWRpby9zb3VuZFRyYWNrLnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9BdWRpby9zb3VuZFRyYWNrLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IFNvdW5kVHJhY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU291bmRU
cmFjayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU291bmRUcmFjazsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVz
L2VuZ2luZS50cyIpOworCisvKioKKyAqIEl0IGNvdWxkIGJlIHVzZWZ1bCB0byBpc29sYXRlIHlv
dXIgbXVzaWMgJiBzb3VuZHMgb24gc2V2ZXJhbCB0cmFja3MgdG8gYmV0dGVyIG1hbmFnZSB2b2x1
bWUgb24gYSBncm91cGVkIGluc3RhbmNlIG9mIHNvdW5kcy4KKyAqIEl0IHdpbGwgYmUgYWxzbyB1
c2VkIGluIGEgZnV0dXJlIHJlbGVhc2UgdG8gYXBwbHkgZWZmZWN0cyBvbiBhIHNwZWNpZmljIHRy
YWNrLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BsYXlpbmdfc291
bmRzX2FuZF9tdXNpYyN1c2luZy1zb3VuZC10cmFja3MKKyAqLwordmFyIFNvdW5kVHJhY2sgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5l
dyBzb3VuZCB0cmFjay4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3df
dG8vcGxheWluZ19zb3VuZHNfYW5kX211c2ljI3VzaW5nLXNvdW5kLXRyYWNrcworICAgICAqIEBw
YXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSBzb3VuZCB0cmFjayBiZWxvbmdzIHRvCisg
ICAgICogQHBhcmFtIG9wdGlvbnMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTb3VuZFRyYWNrKHNj
ZW5lLCBvcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9u
cyA9IHt9OyB9CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIg
b2YgdGhlIHNvdW5kIHRyYWNrIGluIHRoZSBzY2VuZS4KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuaWQgPSAtMTsKKyAgICAgICAgdGhpcy5faXNNYWluVHJhY2sgPSBmYWxzZTsKKyAgICAgICAg
dGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5l
OworICAgICAgICB0aGlzLnNvdW5kQ29sbGVjdGlvbiA9IG5ldyBBcnJheSgpOworICAgICAgICB0
aGlzLl9vcHRpb25zID0gb3B0aW9uczsKKyAgICAgICAgaWYgKCF0aGlzLl9pc01haW5UcmFjayAm
JiB0aGlzLl9zY2VuZS5zb3VuZFRyYWNrcykgeworICAgICAgICAgICAgdGhpcy5fc2NlbmUuc291
bmRUcmFja3MucHVzaCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLl9zY2VuZS5z
b3VuZFRyYWNrcy5sZW5ndGggLSAxOworICAgICAgICB9CisgICAgfQorICAgIFNvdW5kVHJhY2su
cHJvdG90eXBlLl9pbml0aWFsaXplU291bmRUcmFja0F1ZGlvR3JhcGggPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmIChfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRW5naW5lIl0uYXVkaW9FbmdpbmUuY2FuVXNlV2ViQXVkaW8gJiYgX0VuZ2luZXNfZW5naW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmF1ZGlv
Q29udGV4dCkgeworICAgICAgICAgICAgdGhpcy5fb3V0cHV0QXVkaW9Ob2RlID0gX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5l
LmF1ZGlvQ29udGV4dC5jcmVhdGVHYWluKCk7CisgICAgICAgICAgICB0aGlzLl9vdXRwdXRBdWRp
b05vZGUuY29ubmVjdChfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRW5naW5lIl0uYXVkaW9FbmdpbmUubWFzdGVyR2Fpbik7CisgICAgICAgICAgICBpZiAodGhp
cy5fb3B0aW9ucykgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnZvbHVtZSkg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRBdWRpb05vZGUuZ2Fpbi52YWx1ZSA9
IHRoaXMuX29wdGlvbnMudm9sdW1lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fb3B0aW9ucy5tYWluVHJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5faXNNYWluVHJhY2sgPSB0aGlzLl9vcHRpb25zLm1haW5UcmFjazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZSB0aGUgc291bmQg
dHJhY2sgYW5kIGl0cyBhc3NvY2lhdGVkIHJlc291cmNlcworICAgICAqLworICAgIFNvdW5kVHJh
Y2sucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmIChfRW5naW5l
c19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uYXVkaW9Fbmdp
bmUgJiYgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2lu
ZSJdLmF1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvKSB7CisgICAgICAgICAgICBpZiAodGhpcy5f
Y29ubmVjdGVkQW5hbHlzZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0ZWRBbmFs
eXNlci5zdG9wRGVidWdDYW52YXMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxl
ICh0aGlzLnNvdW5kQ29sbGVjdGlvbi5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNv
dW5kQ29sbGVjdGlvblswXS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodGhpcy5fb3V0cHV0QXVkaW9Ob2RlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0
QXVkaW9Ob2RlLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X291dHB1dEF1ZGlvTm9kZSA9IG51bGw7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIEFkZHMgYSBzb3VuZCB0byB0aGlzIHNvdW5kIHRyYWNrCisgICAgICogQHBhcmFtIHNvdW5k
IGRlZmluZSB0aGUgY291bmQgdG8gYWRkCisgICAgICogQGlnbm9yZU5hbWluZworICAgICAqLwor
ICAgIFNvdW5kVHJhY2sucHJvdG90eXBlLkFkZFNvdW5kID0gZnVuY3Rpb24gKHNvdW5kKSB7Cisg
ICAgICAgIGlmICghdGhpcy5faXNJbml0aWFsaXplZCkgeworICAgICAgICAgICAgdGhpcy5faW5p
dGlhbGl6ZVNvdW5kVHJhY2tBdWRpb0dyYXBoKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5hdWRp
b0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiB0aGlzLl9vdXRwdXRBdWRpb05vZGUpIHsKKyAgICAg
ICAgICAgIHNvdW5kLmNvbm5lY3RUb1NvdW5kVHJhY2tBdWRpb05vZGUodGhpcy5fb3V0cHV0QXVk
aW9Ob2RlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc291bmQuc291bmRUcmFja0lkKSB7Cisg
ICAgICAgICAgICBpZiAoc291bmQuc291bmRUcmFja0lkID09PSAtMSkgeworICAgICAgICAgICAg
ICAgIHRoaXMuX3NjZW5lLm1haW5Tb3VuZFRyYWNrLlJlbW92ZVNvdW5kKHNvdW5kKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NjZW5lLnNvdW5kVHJhY2tzKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuc291bmRUcmFja3Nbc291bmQuc291bmRUcmFj
a0lkXS5SZW1vdmVTb3VuZChzb3VuZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5zb3VuZENvbGxlY3Rpb24ucHVzaChzb3VuZCk7CisgICAgICAgIHNvdW5kLnNvdW5k
VHJhY2tJZCA9IHRoaXMuaWQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGEgc291
bmQgdG8gdGhpcyBzb3VuZCB0cmFjaworICAgICAqIEBwYXJhbSBzb3VuZCBkZWZpbmUgdGhlIGNv
dW5kIHRvIHJlbW92ZQorICAgICAqIEBpZ25vcmVOYW1pbmcKKyAgICAgKi8KKyAgICBTb3VuZFRy
YWNrLnByb3RvdHlwZS5SZW1vdmVTb3VuZCA9IGZ1bmN0aW9uIChzb3VuZCkgeworICAgICAgICB2
YXIgaW5kZXggPSB0aGlzLnNvdW5kQ29sbGVjdGlvbi5pbmRleE9mKHNvdW5kKTsKKyAgICAgICAg
aWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgdGhpcy5zb3VuZENvbGxlY3Rpb24uc3Bs
aWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0IGEg
Z2xvYmFsIHZvbHVtZSBmb3IgdGhlIGZ1bGwgc291bmQgdHJhY2suCisgICAgICogQHBhcmFtIG5l
d1ZvbHVtZSBEZWZpbmUgdGhlIG5ldyB2b2x1bWUgb2YgdGhlIHNvdW5kIHRyYWNrCisgICAgICov
CisgICAgU291bmRUcmFjay5wcm90b3R5cGUuc2V0Vm9sdW1lID0gZnVuY3Rpb24gKG5ld1ZvbHVt
ZSkgeworICAgICAgICBpZiAoX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvICYmIHRoaXMuX291dHB1
dEF1ZGlvTm9kZSkgeworICAgICAgICAgICAgdGhpcy5fb3V0cHV0QXVkaW9Ob2RlLmdhaW4udmFs
dWUgPSBuZXdWb2x1bWU7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFN3aXRj
aCB0aGUgcGFubmluZyBtb2RlbCB0byBIUlRGOgorICAgICAqIFJlbmRlcnMgYSBzdGVyZW8gb3V0
cHV0IG9mIGhpZ2hlciBxdWFsaXR5IHRoYW4gZXF1YWxwb3dlciDigJQgaXQgdXNlcyBhIGNvbnZv
bHV0aW9uIHdpdGggbWVhc3VyZWQgaW1wdWxzZSByZXNwb25zZXMgZnJvbSBodW1hbiBzdWJqZWN0
cy4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19z
b3VuZHNfYW5kX211c2ljI2NyZWF0aW5nLWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAqLworICAg
IFNvdW5kVHJhY2sucHJvdG90eXBlLnN3aXRjaFBhbm5pbmdNb2RlbFRvSFJURiA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbykgeworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNvdW5kQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgICAgIHRoaXMuc291bmRDb2xsZWN0aW9uW2ldLnN3aXRjaFBhbm5pbmdN
b2RlbFRvSFJURigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTd2l0Y2ggdGhlIHBhbm5pbmcgbW9kZWwgdG8gRXF1YWwgUG93ZXI6CisgICAgICog
UmVwcmVzZW50cyB0aGUgZXF1YWwtcG93ZXIgcGFubmluZyBhbGdvcml0aG0sIGdlbmVyYWxseSBy
ZWdhcmRlZCBhcyBzaW1wbGUgYW5kIGVmZmljaWVudC4gZXF1YWxwb3dlciBpcyB0aGUgZGVmYXVs
dCB2YWx1ZS4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxh
eWluZ19zb3VuZHNfYW5kX211c2ljI2NyZWF0aW5nLWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAq
LworICAgIFNvdW5kVHJhY2sucHJvdG90eXBlLnN3aXRjaFBhbm5pbmdNb2RlbFRvRXF1YWxQb3dl
ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbykg
eworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNvdW5kQ29sbGVjdGlvbi5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHRoaXMuc291bmRDb2xsZWN0aW9uW2ldLnN3
aXRjaFBhbm5pbmdNb2RlbFRvRXF1YWxQb3dlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb25uZWN0IHRoZSBzb3VuZCB0cmFjayB0byBhbiBh
dWRpbyBhbmFseXNlciBhbGxvd2luZyBzb21lIGFtYXppbmcKKyAgICAgKiBzeW5jaG9ybml6YXRp
b24gYmV0d2VlbiB0aGUgc291bmRzL211c2ljIGFuZCB5b3VyIHZpc3VhbGl6YXRpb24gKFZ1TWV0
ZXIgZm9yIGluc3RhbmNlKS4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9o
b3dfdG8vcGxheWluZ19zb3VuZHNfYW5kX211c2ljI3VzaW5nLXRoZS1hbmFseXNlcgorICAgICAq
IEBwYXJhbSBhbmFseXNlciBUaGUgYW5hbHlzZXIgdG8gY29ubmVjdCB0byB0aGUgZW5naW5lCisg
ICAgICovCisgICAgU291bmRUcmFjay5wcm90b3R5cGUuY29ubmVjdFRvQW5hbHlzZXIgPSBmdW5j
dGlvbiAoYW5hbHlzZXIpIHsKKyAgICAgICAgaWYgKHRoaXMuX2Nvbm5lY3RlZEFuYWx5c2VyKSB7
CisgICAgICAgICAgICB0aGlzLl9jb25uZWN0ZWRBbmFseXNlci5zdG9wRGVidWdDYW52YXMoKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb25uZWN0ZWRBbmFseXNlciA9IGFuYWx5c2VyOwor
ICAgICAgICBpZiAoX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkVuZ2luZSJdLmF1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvICYmIHRoaXMuX291dHB1dEF1ZGlv
Tm9kZSkgeworICAgICAgICAgICAgdGhpcy5fb3V0cHV0QXVkaW9Ob2RlLmRpc2Nvbm5lY3QoKTsK
KyAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RlZEFuYWx5c2VyLmNvbm5lY3RBdWRpb05vZGVzKHRo
aXMuX291dHB1dEF1ZGlvTm9kZSwgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLm1hc3RlckdhaW4pOworICAgICAgICB9Cisg
ICAgfTsKKyAgICByZXR1cm4gU291bmRUcmFjazsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vQXVkaW8vd2VpZ2h0ZWRzb3VuZC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vQXVkaW8vd2VpZ2h0ZWRzb3VuZC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBXZWlnaHRlZFNvdW5kICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldl
aWdodGVkU291bmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlaWdodGVkU291bmQ7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlz
Yy9sb2dnZXIudHMiKTsKKworLyoqCisgKiBXcmFwcyBvbmUgb3IgbW9yZSBTb3VuZCBvYmplY3Rz
IGFuZCBzZWxlY3RzIG9uZSB3aXRoIHJhbmRvbSB3ZWlnaHQgZm9yIHBsYXliYWNrLgorICovCit2
YXIgV2VpZ2h0ZWRTb3VuZCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgbmV3IFdlaWdodGVkU291bmQgZnJvbSB0aGUgbGlzdCBvZiBzb3Vu
ZHMgZ2l2ZW4uCisgICAgICogQHBhcmFtIGxvb3AgV2hlbiB0cnVlIGEgU291bmQgd2lsbCBiZSBz
ZWxlY3RlZCBhbmQgcGxheWVkIHdoZW4gdGhlIGN1cnJlbnQgcGxheWluZyBTb3VuZCBjb21wbGV0
ZXMuCisgICAgICogQHBhcmFtIHNvdW5kcyBBcnJheSBvZiBTb3VuZHMgdGhhdCB3aWxsIGJlIHNl
bGVjdGVkIGZyb20uCisgICAgICogQHBhcmFtIHdlaWdodHMgQXJyYXkgb2YgbnVtYmVyIHZhbHVl
cyBmb3Igc2VsZWN0aW9uIHdlaWdodHM7IGxlbmd0aCBtdXN0IGVxdWFsIHNvdW5kcywgdmFsdWVz
IHdpbGwgYmUgbm9ybWFsaXplZCB0byAxCisgICAgICovCisgICAgZnVuY3Rpb24gV2VpZ2h0ZWRT
b3VuZChsb29wLCBzb3VuZHMsIHdlaWdodHMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgLyoqIFdoZW4gdHJ1ZSBhIFNvdW5kIHdpbGwgYmUgc2VsZWN0ZWQgYW5kIHBsYXll
ZCB3aGVuIHRoZSBjdXJyZW50IHBsYXlpbmcgU291bmQgY29tcGxldGVzLiAqLworICAgICAgICB0
aGlzLmxvb3AgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY29uZUlubmVyQW5nbGUgPSAzNjA7Cisg
ICAgICAgIHRoaXMuX2NvbmVPdXRlckFuZ2xlID0gMzYwOworICAgICAgICB0aGlzLl92b2x1bWUg
PSAxOworICAgICAgICAvKiogQSBTb3VuZCBpcyBjdXJyZW50bHkgcGxheWluZy4gKi8KKyAgICAg
ICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTsKKyAgICAgICAgLyoqIEEgU291bmQgaXMgY3VycmVu
dGx5IHBhdXNlZC4gKi8KKyAgICAgICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlOworICAgICAgICB0
aGlzLl9zb3VuZHMgPSBbXTsKKyAgICAgICAgdGhpcy5fd2VpZ2h0cyA9IFtdOworICAgICAgICBp
ZiAoc291bmRzLmxlbmd0aCAhPT0gd2VpZ2h0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcignU291bmRzIGxlbmd0aCBkb2VzIG5vdCBlcXVhbCB3ZWlnaHRzIGxlbmd0aCcp
OworICAgICAgICB9CisgICAgICAgIHRoaXMubG9vcCA9IGxvb3A7CisgICAgICAgIHRoaXMuX3dl
aWdodHMgPSB3ZWlnaHRzOworICAgICAgICAvLyBOb3JtYWxpemUgdGhlIHdlaWdodHMKKyAgICAg
ICAgdmFyIHdlaWdodFN1bSA9IDA7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgd2VpZ2h0c18x
ID0gd2VpZ2h0czsgX2kgPCB3ZWlnaHRzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2
YXIgd2VpZ2h0ID0gd2VpZ2h0c18xW19pXTsKKyAgICAgICAgICAgIHdlaWdodFN1bSArPSB3ZWln
aHQ7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGludldlaWdodFN1bSA9IHdlaWdodFN1bSA+IDAg
PyAxIC8gd2VpZ2h0U3VtIDogMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl93
ZWlnaHRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLl93ZWlnaHRzW2ldICo9IGlu
dldlaWdodFN1bTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zb3VuZHMgPSBzb3VuZHM7Cisg
ICAgICAgIGZvciAodmFyIF9hID0gMCwgX2IgPSB0aGlzLl9zb3VuZHM7IF9hIDwgX2IubGVuZ3Ro
OyBfYSsrKSB7CisgICAgICAgICAgICB2YXIgc291bmQgPSBfYltfYV07CisgICAgICAgICAgICBz
b3VuZC5vbkVuZGVkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeyBfdGhpcy5fb25lbmRlZCgp
OyB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2VpZ2h0
ZWRTb3VuZC5wcm90b3R5cGUsICJkaXJlY3Rpb25hbENvbmVJbm5lckFuZ2xlIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogVGhlIHNpemUgb2YgY29uZSBpbiBkZWdyZWVzIGZvciBhIGRpcmVj
dGlvbmFsIHNvdW5kIGluIHdoaWNoIHRoZXJlIHdpbGwgYmUgbm8gYXR0ZW51YXRpb24uCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9jb25lSW5uZXJBbmdsZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFRoZSBzaXplIG9mIGNvbmUgaW4gZGVncmVzcyBmb3IgYSBkaXJlY3Rpb25hbCBzb3VuZCBpbiB3
aGljaCB0aGVyZSB3aWxsIGJlIG5vIGF0dGVudWF0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5f
Y29uZUlubmVyQW5nbGUpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29uZU91dGVyQW5n
bGUgPCB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTG9nZ2VyIl0uRXJyb3IoImRpcmVjdGlvbmFsQ29uZUlubmVy
QW5nbGU6IG91dGVyIGFuZ2xlIG9mIHRoZSBjb25lIG11c3QgYmUgc3VwZXJpb3Igb3IgZXF1YWwg
dG8gdGhlIGlubmVyIGFuZ2xlLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX2NvbmVJbm5lckFuZ2xlID0gdmFs
dWU7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3NvdW5kczsg
X2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNvdW5kID0g
X2FbX2ldOworICAgICAgICAgICAgICAgICAgICBzb3VuZC5kaXJlY3Rpb25hbENvbmVJbm5lckFu
Z2xlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2VpZ2h0ZWRTb3VuZC5wcm90b3R5
cGUsICJkaXJlY3Rpb25hbENvbmVPdXRlckFuZ2xlIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogU2l6ZSBvZiBjb25lIGluIGRlZ3JlZXMgZm9yIGEgZGlyZWN0aW9uYWwgc291bmQgb3V0c2lk
ZSBvZiB3aGljaCB0aGVyZSB3aWxsIGJlIG5vIHNvdW5kLgorICAgICAgICAgKiBMaXN0ZW5lciBh
bmdsZXMgYmV0d2VlbiBpbm5lckFuZ2xlIGFuZCBvdXRlckFuZ2xlIHdpbGwgZmFsbG9mZiBsaW5l
YXJseS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2NvbmVPdXRlckFuZ2xlOworICAgICAgICB9LAorICAgICAgICAvKioK
KyAgICAgICAgICogU2l6ZSBvZiBjb25lIGluIGRlZ3JlZXMgZm9yIGEgZGlyZWN0aW9uYWwgc291
bmQgb3V0c2lkZSBvZiB3aGljaCB0aGVyZSB3aWxsIGJlIG5vIHNvdW5kLgorICAgICAgICAgKiBM
aXN0ZW5lciBhbmdsZXMgYmV0d2VlbiBpbm5lckFuZ2xlIGFuZCBvdXRlckFuZ2xlIHdpbGwgZmFs
bG9mZiBsaW5lYXJseS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMuX2NvbmVPdXRlckFuZ2xlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgdGhpcy5fY29uZUlubmVyQW5nbGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkxvZ2dlciJdLkVycm9yKCJkaXJlY3Rpb25hbENvbmVPdXRlckFuZ2xlOiBvdXRlciBhbmdsZSBv
ZiB0aGUgY29uZSBtdXN0IGJlIHN1cGVyaW9yIG9yIGVxdWFsIHRvIHRoZSBpbm5lciBhbmdsZS4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB0aGlzLl9jb25lT3V0ZXJBbmdsZSA9IHZhbHVlOworICAgICAgICAgICAgICAg
IGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9zb3VuZHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzb3VuZCA9IF9hW19pXTsKKyAgICAgICAgICAg
ICAgICAgICAgc291bmQuZGlyZWN0aW9uYWxDb25lT3V0ZXJBbmdsZSA9IHZhbHVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFdlaWdodGVkU291bmQucHJvdG90eXBlLCAidm9sdW1lIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogUGxheWJhY2sgdm9sdW1lLgorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lOwor
ICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogUGxheWJhY2sgdm9sdW1lLgorICAg
ICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZSAhPT0gdGhpcy5fdm9sdW1lKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kg
PSAwLCBfYSA9IHRoaXMuX3NvdW5kczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHNvdW5kID0gX2FbX2ldOworICAgICAgICAgICAgICAgICAgICBzb3Vu
ZC5zZXRWb2x1bWUodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgV2VpZ2h0ZWRTb3VuZC5wcm90b3R5cGUuX29uZW5kZWQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50SW5kZXggIT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgdGhpcy5fc291bmRzW3RoaXMuX2N1cnJlbnRJbmRleF0uYXV0b3Bs
YXkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5sb29wICYmIHRoaXMuaXNQ
bGF5aW5nKSB7CisgICAgICAgICAgICB0aGlzLnBsYXkoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9OworICAgIC8qKgorICAgICAqIFN1c3BlbmQgcGxheWJhY2sKKyAgICAgKi8KKyAgICBXZWln
aHRlZFNvdW5kLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5p
c1BhdXNlZCA9IHRydWU7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50SW5kZXggIT09IHVuZGVm
aW5lZCkgeworICAgICAgICAgICAgdGhpcy5fc291bmRzW3RoaXMuX2N1cnJlbnRJbmRleF0ucGF1
c2UoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU3RvcCBwbGF5YmFjawor
ICAgICAqLworICAgIFdlaWdodGVkU291bmQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlzLl9jdXJy
ZW50SW5kZXggIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdGhpcy5fc291bmRzW3RoaXMu
X2N1cnJlbnRJbmRleF0uc3RvcCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTdGFydCBwbGF5YmFjay4KKyAgICAgKiBAcGFyYW0gc3RhcnRPZmZzZXQgUG9zaXRpb24gdGhl
IGNsaXAgaGVhZCBhdCBhIHNwZWNpZmljIHRpbWUgaW4gc2Vjb25kcy4KKyAgICAgKi8KKyAgICBX
ZWlnaHRlZFNvdW5kLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKHN0YXJ0T2Zmc2V0KSB7Cisg
ICAgICAgIGlmICghdGhpcy5pc1BhdXNlZCkgeworICAgICAgICAgICAgdGhpcy5zdG9wKCk7Cisg
ICAgICAgICAgICB2YXIgcmFuZG9tVmFsdWUgPSBNYXRoLnJhbmRvbSgpOworICAgICAgICAgICAg
dmFyIHRvdGFsID0gMDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fd2Vp
Z2h0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMuX3dlaWdo
dHNbaV07CisgICAgICAgICAgICAgICAgaWYgKHJhbmRvbVZhbHVlIDw9IHRvdGFsKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IGk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICB2YXIgc291bmQgPSB0aGlzLl9zb3VuZHNbdGhpcy5fY3VycmVudEluZGV4XTsKKyAg
ICAgICAgaWYgKHNvdW5kLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgc291bmQucGxheSgwLCB0
aGlzLmlzUGF1c2VkID8gdW5kZWZpbmVkIDogc3RhcnRPZmZzZXQpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgc291bmQuYXV0b3BsYXkgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5pc1BhdXNlZCA9
IGZhbHNlOworICAgIH07CisgICAgcmV0dXJuIFdlaWdodGVkU291bmQ7Cit9KCkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0JlaGF2aW9ycy9DYW1lcmFzL2F1dG9Sb3RhdGlvbkJlaGF2
aW9yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vQmVoYXZpb3JzL0NhbWVyYXMvYXV0b1JvdGF0aW9uQmVoYXZp
b3IudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEF1dG9Sb3RhdGlvbkJlaGF2aW9yICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkF1dG9Sb3RhdGlvbkJlaGF2aW9y
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBBdXRvUm90YXRpb25CZWhhdmlvcjsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FdmVudHMvcG9pbnRl
ckV2ZW50cyAqLyAiLi9FdmVudHMvcG9pbnRlckV2ZW50cy50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX3ByZWNpc2lvbkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvcHJlY2lzaW9uRGF0ZSAqLyAi
Li9NaXNjL3ByZWNpc2lvbkRhdGUudHMiKTsKKworCisvKioKKyAqIFRoZSBhdXRvUm90YXRpb24g
YmVoYXZpb3IgKEF1dG9Sb3RhdGlvbkJlaGF2aW9yKSBpcyBkZXNpZ25lZCB0byBjcmVhdGUgYSBz
bW9vdGggcm90YXRpb24gb2YgYW4gQXJjUm90YXRlQ2FtZXJhIHdoZW4gdGhlcmUgaXMgbm8gdXNl
ciBpbnRlcmFjdGlvbi4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9j
YW1lcmFfYmVoYXZpb3JzI2F1dG9yb3RhdGlvbi1iZWhhdmlvcgorICovCit2YXIgQXV0b1JvdGF0
aW9uQmVoYXZpb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24g
QXV0b1JvdGF0aW9uQmVoYXZpb3IoKSB7CisgICAgICAgIHRoaXMuX3pvb21TdG9wc0FuaW1hdGlv
biA9IGZhbHNlOworICAgICAgICB0aGlzLl9pZGxlUm90YXRpb25TcGVlZCA9IDAuMDU7CisgICAg
ICAgIHRoaXMuX2lkbGVSb3RhdGlvbldhaXRUaW1lID0gMjAwMDsKKyAgICAgICAgdGhpcy5faWRs
ZVJvdGF0aW9uU3BpbnVwVGltZSA9IDIwMDA7CisgICAgICAgIHRoaXMuX2lzUG9pbnRlckRvd24g
PSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbGFzdEZyYW1lVGltZSA9IG51bGw7CisgICAgICAgIHRo
aXMuX2xhc3RJbnRlcmFjdGlvblRpbWUgPSAtSW5maW5pdHk7CisgICAgICAgIHRoaXMuX2NhbWVy
YVJvdGF0aW9uU3BlZWQgPSAwOworICAgICAgICB0aGlzLl9sYXN0RnJhbWVSYWRpdXMgPSAwOwor
ICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXV0b1JvdGF0aW9uQmVoYXZpb3IucHJv
dG90eXBlLCAibmFtZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG5hbWUg
b2YgdGhlIGJlaGF2aW9yLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gIkF1dG9Sb3RhdGlvbiI7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdXRvUm90YXRpb25CZWhhdmlvci5wcm90b3R5cGUs
ICJ6b29tU3RvcHNBbmltYXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgdGhl
IGZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgdXNlciB6b29taW5nIHNob3VsZCBzdG9wIGFuaW1hdGlv
bi4KKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fem9vbVN0b3BzQW5pbWF0aW9uOworICAgICAgICB9LAorICAgICAgICAvKioK
KyAgICAgICAgKiBTZXRzIHRoZSBmbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHVzZXIgem9vbWluZyBz
aG91bGQgc3RvcCBhbmltYXRpb24uCisgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KGZsYWcpIHsKKyAgICAgICAgICAgIHRoaXMuX3pvb21TdG9wc0FuaW1hdGlvbiA9IGZsYWc7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdXRvUm90YXRpb25C
ZWhhdmlvci5wcm90b3R5cGUsICJpZGxlUm90YXRpb25TcGVlZCIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCBzcGVlZCBhdCB3aGljaCB0aGUgY2FtZXJhIHJvdGF0
ZXMgYXJvdW5kIHRoZSBtb2RlbC4KKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faWRsZVJvdGF0aW9uU3BlZWQ7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAqIFNldHMgdGhlIGRlZmF1bHQgc3BlZWQgYXQgd2hp
Y2ggdGhlIGNhbWVyYSByb3RhdGVzIGFyb3VuZCB0aGUgbW9kZWwuCisgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHNwZWVkKSB7CisgICAgICAgICAgICB0aGlzLl9pZGxlUm90YXRp
b25TcGVlZCA9IHNwZWVkOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoQXV0b1JvdGF0aW9uQmVoYXZpb3IucHJvdG90eXBlLCAiaWRsZVJvdGF0aW9uV2FpdFRp
bWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgdGhlIHRpbWUgKG1pbGxpc2Vjb25k
cykgdG8gd2FpdCBhZnRlciB1c2VyIGludGVyYWN0aW9uIGJlZm9yZSB0aGUgY2FtZXJhIHN0YXJ0
cyByb3RhdGluZy4KKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5faWRsZVJvdGF0aW9uV2FpdFRpbWU7CisgICAgICAgIH0sCisg
ICAgICAgIC8qKgorICAgICAgICAqIFNldHMgdGhlIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdG8g
d2FpdCBhZnRlciB1c2VyIGludGVyYWN0aW9uIGJlZm9yZSB0aGUgY2FtZXJhIHN0YXJ0cyByb3Rh
dGluZy4KKyAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkgeworICAgICAg
ICAgICAgdGhpcy5faWRsZVJvdGF0aW9uV2FpdFRpbWUgPSB0aW1lOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXV0b1JvdGF0aW9uQmVoYXZpb3IucHJvdG90
eXBlLCAiaWRsZVJvdGF0aW9uU3BpbnVwVGltZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICog
R2V0cyB0aGUgdGltZSAobWlsbGlzZWNvbmRzKSB0byB0YWtlIHRvIHNwaW4gdXAgdG8gdGhlIGZ1
bGwgaWRsZSByb3RhdGlvbiBzcGVlZC4KKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faWRsZVJvdGF0aW9uU3BpbnVwVGltZTsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICogU2V0cyB0aGUgdGltZSAobWlsbGlz
ZWNvbmRzKSB0byB0YWtlIHRvIHNwaW4gdXAgdG8gdGhlIGZ1bGwgaWRsZSByb3RhdGlvbiBzcGVl
ZC4KKyAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkgeworICAgICAgICAg
ICAgdGhpcy5faWRsZVJvdGF0aW9uU3BpbnVwVGltZSA9IHRpbWU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdXRvUm90YXRpb25CZWhhdmlvci5wcm90b3R5
cGUsICJyb3RhdGlvbkluUHJvZ3Jlc3MiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IGEgdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgY2FtZXJhIGlzIGN1cnJlbnRseSByb3RhdGluZyBi
ZWNhdXNlIG9mIHRoaXMgYmVoYXZpb3IKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuX2NhbWVyYVJvdGF0aW9u
U3BlZWQpID4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6
ZXMgdGhlIGJlaGF2aW9yLgorICAgICAqLworICAgIEF1dG9Sb3RhdGlvbkJlaGF2aW9yLnByb3Rv
dHlwZS5pbml0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBEbyBub3RpaG5nCisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyB0aGUgYmVoYXZpb3IgdG8gaXRzIGFyYyByb3RhdGUg
Y2FtZXJhLgorICAgICAqIEBwYXJhbSBjYW1lcmEgRGVmaW5lcyB0aGUgY2FtZXJhIHRvIGF0dGFj
aCB0aGUgYmVoYXZpb3IgdG8KKyAgICAgKi8KKyAgICBBdXRvUm90YXRpb25CZWhhdmlvci5wcm90
b3R5cGUuYXR0YWNoID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0
aGlzOworICAgICAgICB0aGlzLl9hdHRhY2hlZENhbWVyYSA9IGNhbWVyYTsKKyAgICAgICAgdmFy
IHNjZW5lID0gdGhpcy5fYXR0YWNoZWRDYW1lcmEuZ2V0U2NlbmUoKTsKKyAgICAgICAgdGhpcy5f
b25QcmVQb2ludGVyT2JzZXJ2YWJsZU9ic2VydmVyID0gc2NlbmUub25QcmVQb2ludGVyT2JzZXJ2
YWJsZS5hZGQoZnVuY3Rpb24gKHBvaW50ZXJJbmZvUHJlKSB7CisgICAgICAgICAgICBpZiAocG9p
bnRlckluZm9QcmUudHlwZSA9PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04pIHsKKyAgICAg
ICAgICAgICAgICBfdGhpcy5faXNQb2ludGVyRG93biA9IHRydWU7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvaW50ZXJJbmZvUHJlLnR5
cGUgPT09IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJVUCkgeworICAgICAgICAgICAgICAgIF90aGlz
Ll9pc1BvaW50ZXJEb3duID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
ICAgICB0aGlzLl9vbkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZlciA9IGNhbWVyYS5vbkFmdGVyQ2hl
Y2tJbnB1dHNPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm93
ID0gX01pc2NfcHJlY2lzaW9uRGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQcmVj
aXNpb25EYXRlIl0uTm93OworICAgICAgICAgICAgdmFyIGR0ID0gMDsKKyAgICAgICAgICAgIGlm
IChfdGhpcy5fbGFzdEZyYW1lVGltZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZHQgPSBu
b3cgLSBfdGhpcy5fbGFzdEZyYW1lVGltZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90
aGlzLl9sYXN0RnJhbWVUaW1lID0gbm93OworICAgICAgICAgICAgLy8gU3RvcCB0aGUgYW5pbWF0
aW9uIGlmIHRoZXJlIGlzIHVzZXIgaW50ZXJhY3Rpb24gYW5kIHRoZSBhbmltYXRpb24gc2hvdWxk
IHN0b3AgZm9yIHRoaXMgaW50ZXJhY3Rpb24KKyAgICAgICAgICAgIF90aGlzLl9hcHBseVVzZXJJ
bnRlcmFjdGlvbigpOworICAgICAgICAgICAgdmFyIHRpbWVUb1JvdGF0aW9uID0gbm93IC0gX3Ro
aXMuX2xhc3RJbnRlcmFjdGlvblRpbWUgLSBfdGhpcy5faWRsZVJvdGF0aW9uV2FpdFRpbWU7Cisg
ICAgICAgICAgICB2YXIgc2NhbGUgPSBNYXRoLm1heChNYXRoLm1pbih0aW1lVG9Sb3RhdGlvbiAv
IChfdGhpcy5faWRsZVJvdGF0aW9uU3BpbnVwVGltZSksIDEpLCAwKTsKKyAgICAgICAgICAgIF90
aGlzLl9jYW1lcmFSb3RhdGlvblNwZWVkID0gX3RoaXMuX2lkbGVSb3RhdGlvblNwZWVkICogc2Nh
bGU7CisgICAgICAgICAgICAvLyBTdGVwIGNhbWVyYSByb3RhdGlvbiBieSByb3RhdGlvbiBzcGVl
ZAorICAgICAgICAgICAgaWYgKF90aGlzLl9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAg
ICAgIF90aGlzLl9hdHRhY2hlZENhbWVyYS5hbHBoYSAtPSBfdGhpcy5fY2FtZXJhUm90YXRpb25T
cGVlZCAqIChkdCAvIDEwMDApOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIERldGFjaGVzIHRoZSBiZWhhdmlvciBmcm9tIGl0cyBjdXJyZW50IGFy
YyByb3RhdGUgY2FtZXJhLgorICAgICAqLworICAgIEF1dG9Sb3RhdGlvbkJlaGF2aW9yLnByb3Rv
dHlwZS5kZXRhY2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fYXR0YWNoZWRD
YW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2Nl
bmUgPSB0aGlzLl9hdHRhY2hlZENhbWVyYS5nZXRTY2VuZSgpOworICAgICAgICBpZiAodGhpcy5f
b25QcmVQb2ludGVyT2JzZXJ2YWJsZU9ic2VydmVyKSB7CisgICAgICAgICAgICBzY2VuZS5vblBy
ZVBvaW50ZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vblByZVBvaW50ZXJPYnNlcnZhYmxlT2Jz
ZXJ2ZXIpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2F0dGFjaGVkQ2FtZXJhLm9uQWZ0ZXJD
aGVja0lucHV0c09ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJDaGVja0lucHV0c09ic2Vy
dmVyKTsKKyAgICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEgPSBudWxsOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHVzZXIgaXMgc2Nyb2xsaW5nLgorICAgICAqIEBy
ZXR1cm4gdHJ1ZSBpZiB1c2VyIGlzIHNjcm9sbGluZy4KKyAgICAgKi8KKyAgICBBdXRvUm90YXRp
b25CZWhhdmlvci5wcm90b3R5cGUuX3VzZXJJc1pvb21pbmcgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICghdGhpcy5fYXR0YWNoZWRDYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoZWRDYW1lcmEuaW5lcnRp
YWxSYWRpdXNPZmZzZXQgIT09IDA7CisgICAgfTsKKyAgICBBdXRvUm90YXRpb25CZWhhdmlvci5w
cm90b3R5cGUuX3Nob3VsZEFuaW1hdGlvblN0b3BGb3JJbnRlcmFjdGlvbiA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKCF0aGlzLl9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHZhciB6b29tSGFzSGl0TGltaXQgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKHRoaXMuX2xhc3RGcmFtZVJhZGl1cyA9PT0gdGhpcy5fYXR0YWNoZWRD
YW1lcmEucmFkaXVzICYmIHRoaXMuX2F0dGFjaGVkQ2FtZXJhLmluZXJ0aWFsUmFkaXVzT2Zmc2V0
ICE9PSAwKSB7CisgICAgICAgICAgICB6b29tSGFzSGl0TGltaXQgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVjb3JkIG9mIHByZXZpb3VzIHJhZGl1cyAtIHdvcmtz
IGFzIGFuIGFwcHJveC4gaW5kaWNhdG9yIG9mIGhpdHRpbmcgcmFkaXVzIGxpbWl0cworICAgICAg
ICB0aGlzLl9sYXN0RnJhbWVSYWRpdXMgPSB0aGlzLl9hdHRhY2hlZENhbWVyYS5yYWRpdXM7Cisg
ICAgICAgIHJldHVybiB0aGlzLl96b29tU3RvcHNBbmltYXRpb24gPyB6b29tSGFzSGl0TGltaXQg
OiB0aGlzLl91c2VySXNab29taW5nKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiAgQXBwbGll
cyBhbnkgY3VycmVudCB1c2VyIGludGVyYWN0aW9uIHRvIHRoZSBjYW1lcmEuIFRha2VzIGludG8g
YWNjb3VudCBtYXhpbXVtIGFscGhhIHJvdGF0aW9uLgorICAgICAqLworICAgIEF1dG9Sb3RhdGlv
bkJlaGF2aW9yLnByb3RvdHlwZS5fYXBwbHlVc2VySW50ZXJhY3Rpb24gPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICh0aGlzLl91c2VySXNNb3ZpbmcoKSAmJiAhdGhpcy5fc2hvdWxkQW5pbWF0
aW9uU3RvcEZvckludGVyYWN0aW9uKCkpIHsKKyAgICAgICAgICAgIHRoaXMuX2xhc3RJbnRlcmFj
dGlvblRpbWUgPSBfTWlzY19wcmVjaXNpb25EYXRlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlByZWNpc2lvbkRhdGUiXS5Ob3c7CisgICAgICAgIH0KKyAgICB9OworICAgIC8vIFRvb2xz
CisgICAgQXV0b1JvdGF0aW9uQmVoYXZpb3IucHJvdG90eXBlLl91c2VySXNNb3ZpbmcgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fYXR0YWNoZWRDYW1lcmEpIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNo
ZWRDYW1lcmEuaW5lcnRpYWxBbHBoYU9mZnNldCAhPT0gMCB8fAorICAgICAgICAgICAgdGhpcy5f
YXR0YWNoZWRDYW1lcmEuaW5lcnRpYWxCZXRhT2Zmc2V0ICE9PSAwIHx8CisgICAgICAgICAgICB0
aGlzLl9hdHRhY2hlZENhbWVyYS5pbmVydGlhbFJhZGl1c09mZnNldCAhPT0gMCB8fAorICAgICAg
ICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEuaW5lcnRpYWxQYW5uaW5nWCAhPT0gMCB8fAorICAg
ICAgICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEuaW5lcnRpYWxQYW5uaW5nWSAhPT0gMCB8fAor
ICAgICAgICAgICAgdGhpcy5faXNQb2ludGVyRG93bjsKKyAgICB9OworICAgIHJldHVybiBBdXRv
Um90YXRpb25CZWhhdmlvcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQmVo
YXZpb3JzL0NhbWVyYXMvYm91bmNpbmdCZWhhdmlvci50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQmVoYXZpb3JzL0Nh
bWVyYXMvYm91bmNpbmdCZWhhdmlvci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBCb3VuY2lu
Z0JlaGF2aW9yICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvdW5jaW5n
QmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJvdW5jaW5nQmVoYXZpb3I7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9BbmltYXRpb25zX2Vhc2luZ19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQW5pbWF0aW9ucy9l
YXNpbmcgKi8gIi4vQW5pbWF0aW9ucy9lYXNpbmcudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0FuaW1hdGlvbnMvYW5pbWF0aW9uICovICIu
L0FuaW1hdGlvbnMvYW5pbWF0aW9uLnRzIik7CisKKworLyoqCisgKiBBZGQgYSBib3VuY2luZyBl
ZmZlY3QgdG8gYW4gQXJjUm90YXRlQ2FtZXJhIHdoZW4gcmVhY2hpbmcgYSBzcGVjaWZpZWQgbWlu
aW11bSBhbmQgbWF4aW11bSByYWRpdXMKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9jYW1lcmFfYmVoYXZpb3JzI2JvdW5jaW5nLWJlaGF2aW9yCisgKi8KK3ZhciBCb3Vu
Y2luZ0JlaGF2aW9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9u
IEJvdW5jaW5nQmVoYXZpb3IoKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZHVyYXRp
b24gb2YgdGhlIGFuaW1hdGlvbiwgaW4gbWlsbGlzZWNvbmRzCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLnRyYW5zaXRpb25EdXJhdGlvbiA9IDQ1MDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IExlbmd0aCBvZiB0aGUgZGlzdGFuY2UgYW5pbWF0ZWQgYnkgdGhlIHRyYW5zaXRpb24gd2hlbiBs
b3dlciByYWRpdXMgaXMgcmVhY2hlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5sb3dlclJh
ZGl1c1RyYW5zaXRpb25SYW5nZSA9IDI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBMZW5ndGgg
b2YgdGhlIGRpc3RhbmNlIGFuaW1hdGVkIGJ5IHRoZSB0cmFuc2l0aW9uIHdoZW4gdXBwZXIgcmFk
aXVzIGlzIHJlYWNoZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudXBwZXJSYWRpdXNUcmFu
c2l0aW9uUmFuZ2UgPSAtMjsKKyAgICAgICAgdGhpcy5fYXV0b1RyYW5zaXRpb25SYW5nZSA9IGZh
bHNlOworICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIHRoaXMuX3JhZGl1c0lzQW5pbWF0
aW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3JhZGl1c0JvdW5jZVRyYW5zaXRpb24gPSBudWxs
OworICAgICAgICB0aGlzLl9hbmltYXRhYmxlcyA9IG5ldyBBcnJheSgpOworICAgIH0KKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQm91bmNpbmdCZWhhdmlvci5wcm90b3R5cGUsICJuYW1lIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgYmVoYXZpb3Iu
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiAiQm91bmNpbmciOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoQm91bmNpbmdCZWhhdmlvci5wcm90b3R5cGUsICJhdXRvVHJhbnNpdGlvblJhbmdlIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgaWYgdGhl
IGxvd2VyUmFkaXVzVHJhbnNpdGlvblJhbmdlIGFuZCB1cHBlclJhZGl1c1RyYW5zaXRpb25SYW5n
ZSBhcmUgZGVmaW5lZCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdXRvVHJhbnNpdGlvblJhbmdl
OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyBhIHZhbHVlIGluZGlj
YXRpbmcgaWYgdGhlIGxvd2VyUmFkaXVzVHJhbnNpdGlvblJhbmdlIGFuZCB1cHBlclJhZGl1c1Ry
YW5zaXRpb25SYW5nZSBhcmUgZGVmaW5lZCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAqIFRyYW5z
aXRpb24gcmFuZ2VzIHdpbGwgYmUgc2V0IHRvIDUlIG9mIHRoZSBib3VuZGluZyBib3ggZGlhZ29u
YWwgaW4gd29ybGQgc3BhY2UKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICAgICAgaWYgKHRo
aXMuX2F1dG9UcmFuc2l0aW9uUmFuZ2UgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYXV0b1RyYW5zaXRpb25SYW5n
ZSA9IHZhbHVlOworICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2F0dGFjaGVkQ2FtZXJh
OworICAgICAgICAgICAgaWYgKCFjYW1lcmEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9vbk1lc2hUYXJnZXRDaGFuZ2VkT2JzZXJ2ZXIgPSBjYW1lcmEub25NZXNoVGFyZ2V0Q2hh
bmdlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghbWVzaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1lc2guY29tcHV0ZVdvcmxkTWF0cml4
KHRydWUpOworICAgICAgICAgICAgICAgICAgICB2YXIgZGlhZ29uYWwgPSBtZXNoLmdldEJvdW5k
aW5nSW5mbygpLmRpYWdvbmFsTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5sb3dl
clJhZGl1c1RyYW5zaXRpb25SYW5nZSA9IGRpYWdvbmFsICogMC4wNTsKKyAgICAgICAgICAgICAg
ICAgICAgX3RoaXMudXBwZXJSYWRpdXNUcmFuc2l0aW9uUmFuZ2UgPSBkaWFnb25hbCAqIDAuMDU7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
ICh0aGlzLl9vbk1lc2hUYXJnZXRDaGFuZ2VkT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICBj
YW1lcmEub25NZXNoVGFyZ2V0Q2hhbmdlZE9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uTWVzaFRh
cmdldENoYW5nZWRPYnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBiZWhhdmlvci4KKyAgICAgKi8KKyAgICBC
b3VuY2luZ0JlaGF2aW9yLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAv
LyBEbyBub3RpaG5nCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyB0aGUgYmVoYXZp
b3IgdG8gaXRzIGFyYyByb3RhdGUgY2FtZXJhLgorICAgICAqIEBwYXJhbSBjYW1lcmEgRGVmaW5l
cyB0aGUgY2FtZXJhIHRvIGF0dGFjaCB0aGUgYmVoYXZpb3IgdG8KKyAgICAgKi8KKyAgICBCb3Vu
Y2luZ0JlaGF2aW9yLnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMuX2F0dGFjaGVkQ2FtZXJhID0gY2Ft
ZXJhOworICAgICAgICB0aGlzLl9vbkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZlciA9IGNhbWVyYS5v
bkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICBpZiAoIV90aGlzLl9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEFkZCB0aGUgYm91bmNlIGFuaW1hdGlvbiB0
byB0aGUgbG93ZXIgcmFkaXVzIGxpbWl0CisgICAgICAgICAgICBpZiAoX3RoaXMuX2lzUmFkaXVz
QXRMaW1pdChfdGhpcy5fYXR0YWNoZWRDYW1lcmEubG93ZXJSYWRpdXNMaW1pdCkpIHsKKyAgICAg
ICAgICAgICAgICBfdGhpcy5fYXBwbHlCb3VuZFJhZGl1c0FuaW1hdGlvbihfdGhpcy5sb3dlclJh
ZGl1c1RyYW5zaXRpb25SYW5nZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBBZGQg
dGhlIGJvdW5jZSBhbmltYXRpb24gdG8gdGhlIHVwcGVyIHJhZGl1cyBsaW1pdAorICAgICAgICAg
ICAgaWYgKF90aGlzLl9pc1JhZGl1c0F0TGltaXQoX3RoaXMuX2F0dGFjaGVkQ2FtZXJhLnVwcGVy
UmFkaXVzTGltaXQpKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2FwcGx5Qm91bmRSYWRpdXNB
bmltYXRpb24oX3RoaXMudXBwZXJSYWRpdXNUcmFuc2l0aW9uUmFuZ2UpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGFjaGVzIHRoZSBiZWhh
dmlvciBmcm9tIGl0cyBjdXJyZW50IGFyYyByb3RhdGUgY2FtZXJhLgorICAgICAqLworICAgIEJv
dW5jaW5nQmVoYXZpb3IucHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl9vbkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZlcikgeworICAg
ICAgICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEub25BZnRlckNoZWNrSW5wdXRzT2JzZXJ2YWJs
ZS5yZW1vdmUodGhpcy5fb25BZnRlckNoZWNrSW5wdXRzT2JzZXJ2ZXIpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9vbk1lc2hUYXJnZXRDaGFuZ2VkT2JzZXJ2ZXIpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2F0dGFjaGVkQ2FtZXJhLm9uTWVzaFRhcmdldENoYW5nZWRPYnNlcnZhYmxlLnJl
bW92ZSh0aGlzLl9vbk1lc2hUYXJnZXRDaGFuZ2VkT2JzZXJ2ZXIpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2F0dGFjaGVkQ2FtZXJhID0gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENoZWNrcyBpZiB0aGUgY2FtZXJhIHJhZGl1cyBpcyBhdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBU
YWtlcyBpbnRvIGFjY291bnQgYW5pbWF0aW9uIGxvY2tzLgorICAgICAqIEBwYXJhbSByYWRpdXNM
aW1pdCBUaGUgbGltaXQgdG8gY2hlY2sgYWdhaW5zdC4KKyAgICAgKiBAcmV0dXJuIEJvb2wgdG8g
aW5kaWNhdGUgaWYgYXQgbGltaXQuCisgICAgICovCisgICAgQm91bmNpbmdCZWhhdmlvci5wcm90
b3R5cGUuX2lzUmFkaXVzQXRMaW1pdCA9IGZ1bmN0aW9uIChyYWRpdXNMaW1pdCkgeworICAgICAg
ICBpZiAoIXRoaXMuX2F0dGFjaGVkQ2FtZXJhKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkQ2FtZXJhLnJhZGl1cyA9PT0g
cmFkaXVzTGltaXQgJiYgIXRoaXMuX3JhZGl1c0lzQW5pbWF0aW5nKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBBcHBsaWVzIGFuIGFuaW1hdGlvbiB0byB0aGUgcmFkaXVzIG9mIHRoZSBj
YW1lcmEsIGV4dGVuZGluZyBieSB0aGUgcmFkaXVzRGVsdGEuCisgICAgICogQHBhcmFtIHJhZGl1
c0RlbHRhIFRoZSBkZWx0YSBieSB3aGljaCB0byBhbmltYXRlIHRvLiBDYW4gYmUgbmVnYXRpdmUu
CisgICAgICovCisgICAgQm91bmNpbmdCZWhhdmlvci5wcm90b3R5cGUuX2FwcGx5Qm91bmRSYWRp
dXNBbmltYXRpb24gPSBmdW5jdGlvbiAocmFkaXVzRGVsdGEpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgaWYgKCF0aGlzLl9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fcmFkaXVzQm91bmNlVHJh
bnNpdGlvbikgeworICAgICAgICAgICAgQm91bmNpbmdCZWhhdmlvci5FYXNpbmdGdW5jdGlvbi5z
ZXRFYXNpbmdNb2RlKEJvdW5jaW5nQmVoYXZpb3IuRWFzaW5nTW9kZSk7CisgICAgICAgICAgICB0
aGlzLl9yYWRpdXNCb3VuY2VUcmFuc2l0aW9uID0gX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFuaW1hdGlvbiJdLkNyZWF0ZUFuaW1hdGlvbigicmFk
aXVzIiwgX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVfRkxPQVQsIDYwLCBCb3VuY2luZ0JlaGF2aW9yLkVh
c2luZ0Z1bmN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAvLyBQcmV2ZW50IHpvb20gdW50aWwg
Ym91bmNlIGhhcyBjb21wbGV0ZWQKKyAgICAgICAgdGhpcy5fY2FjaGVkV2hlZWxQcmVjaXNpb24g
PSB0aGlzLl9hdHRhY2hlZENhbWVyYS53aGVlbFByZWNpc2lvbjsKKyAgICAgICAgdGhpcy5fYXR0
YWNoZWRDYW1lcmEud2hlZWxQcmVjaXNpb24gPSBJbmZpbml0eTsKKyAgICAgICAgdGhpcy5fYXR0
YWNoZWRDYW1lcmEuaW5lcnRpYWxSYWRpdXNPZmZzZXQgPSAwOworICAgICAgICAvLyBBbmltYXRl
IHRvIHRoZSByYWRpdXMgbGltaXQKKyAgICAgICAgdGhpcy5zdG9wQWxsQW5pbWF0aW9ucygpOwor
ICAgICAgICB0aGlzLl9yYWRpdXNJc0FuaW1hdGluZyA9IHRydWU7CisgICAgICAgIHZhciBhbmlt
YXRhYmxlID0gX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkFuaW1hdGlvbiJdLlRyYW5zaXRpb25UbygicmFkaXVzIiwgdGhpcy5fYXR0YWNoZWRDYW1l
cmEucmFkaXVzICsgcmFkaXVzRGVsdGEsIHRoaXMuX2F0dGFjaGVkQ2FtZXJhLCB0aGlzLl9hdHRh
Y2hlZENhbWVyYS5nZXRTY2VuZSgpLCA2MCwgdGhpcy5fcmFkaXVzQm91bmNlVHJhbnNpdGlvbiwg
dGhpcy50cmFuc2l0aW9uRHVyYXRpb24sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9jbGVh
ckFuaW1hdGlvbkxvY2tzKCk7IH0pOworICAgICAgICBpZiAoYW5pbWF0YWJsZSkgeworICAgICAg
ICAgICAgdGhpcy5fYW5pbWF0YWJsZXMucHVzaChhbmltYXRhYmxlKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhbGwgYW5pbWF0aW9uIGxvY2tzLiBBbGxvd3Mg
bmV3IGFuaW1hdGlvbnMgdG8gYmUgYWRkZWQgdG8gYW55IG9mIHRoZSBjYW1lcmEgcHJvcGVydGll
cy4KKyAgICAgKi8KKyAgICBCb3VuY2luZ0JlaGF2aW9yLnByb3RvdHlwZS5fY2xlYXJBbmltYXRp
b25Mb2NrcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fcmFkaXVzSXNBbmltYXRpbmcg
PSBmYWxzZTsKKyAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkQ2FtZXJhKSB7CisgICAgICAgICAg
ICB0aGlzLl9hdHRhY2hlZENhbWVyYS53aGVlbFByZWNpc2lvbiA9IHRoaXMuX2NhY2hlZFdoZWVs
UHJlY2lzaW9uOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTdG9wcyBhbmQg
cmVtb3ZlcyBhbGwgYW5pbWF0aW9ucyB0aGF0IGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoZSBjYW1l
cmEKKyAgICAgKi8KKyAgICBCb3VuY2luZ0JlaGF2aW9yLnByb3RvdHlwZS5zdG9wQWxsQW5pbWF0
aW9ucyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkQ2FtZXJhKSB7
CisgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZENhbWVyYS5hbmltYXRpb25zID0gW107CisgICAg
ICAgIH0KKyAgICAgICAgd2hpbGUgKHRoaXMuX2FuaW1hdGFibGVzLmxlbmd0aCkgeworICAgICAg
ICAgICAgdGhpcy5fYW5pbWF0YWJsZXNbMF0ub25BbmltYXRpb25FbmQgPSBudWxsOworICAgICAg
ICAgICAgdGhpcy5fYW5pbWF0YWJsZXNbMF0uc3RvcCgpOworICAgICAgICAgICAgdGhpcy5fYW5p
bWF0YWJsZXMuc2hpZnQoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogVGhl
IGVhc2luZyBmdW5jdGlvbiB1c2VkIGJ5IGFuaW1hdGlvbnMKKyAgICAgKi8KKyAgICBCb3VuY2lu
Z0JlaGF2aW9yLkVhc2luZ0Z1bmN0aW9uID0gbmV3IF9BbmltYXRpb25zX2Vhc2luZ19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYWNrRWFzZSJdKDAuMyk7CisgICAgLyoqCisgICAgICog
VGhlIGVhc2luZyBtb2RlIHVzZWQgYnkgYW5pbWF0aW9ucworICAgICAqLworICAgIEJvdW5jaW5n
QmVoYXZpb3IuRWFzaW5nTW9kZSA9IF9BbmltYXRpb25zX2Vhc2luZ19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJFYXNpbmdGdW5jdGlvbiJdLkVBU0lOR01PREVfRUFTRU9VVDsKKyAgICBy
ZXR1cm4gQm91bmNpbmdCZWhhdmlvcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vQmVoYXZpb3JzL0NhbWVyYXMvZnJhbWluZ0JlaGF2aW9yLnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0JlaGF2aW9y
cy9DYW1lcmFzL2ZyYW1pbmdCZWhhdmlvci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZyYW1p
bmdCZWhhdmlvciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmFtaW5n
QmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZyYW1pbmdCZWhhdmlvcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX0FuaW1hdGlvbnNfZWFzaW5nX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9BbmltYXRpb25zL2Vh
c2luZyAqLyAiLi9BbmltYXRpb25zL2Vhc2luZy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRXZlbnRzL3BvaW50ZXJFdmVudHMgKi8gIi4v
RXZlbnRzL3BvaW50ZXJFdmVudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlz
Y19wcmVjaXNpb25EYXRlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3ByZWNpc2lvbkRhdGUgKi8gIi4vTWlzYy9wcmVjaXNp
b25EYXRlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQW5pbWF0aW9u
cy9hbmltYXRpb24gKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb24udHMiKTsKKworCisKKworCisv
KioKKyAqIFRoZSBmcmFtaW5nIGJlaGF2aW9yIChGcmFtaW5nQmVoYXZpb3IpIGlzIGRlc2lnbmVk
IHRvIGF1dG9tYXRpY2FsbHkgcG9zaXRpb24gYW4gQXJjUm90YXRlQ2FtZXJhIHdoZW4gaXRzIHRh
cmdldCBpcyBzZXQgdG8gYSBtZXNoLiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBw
cmV2ZW50IHRoZSBjYW1lcmEgdG8gZ28gdW5kZXIgYSB2aXJ0dWFsIGhvcml6b250YWwgcGxhbmUu
CisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY2FtZXJhX2JlaGF2aW9y
cyNmcmFtaW5nLWJlaGF2aW9yCisgKi8KK3ZhciBGcmFtaW5nQmVoYXZpb3IgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRnJhbWluZ0JlaGF2aW9yKCkgeworICAg
ICAgICB0aGlzLl9tb2RlID0gRnJhbWluZ0JlaGF2aW9yLkZpdEZydXN0dW1TaWRlc01vZGU7Cisg
ICAgICAgIHRoaXMuX3JhZGl1c1NjYWxlID0gMS4wOworICAgICAgICB0aGlzLl9wb3NpdGlvblNj
YWxlID0gMC41OworICAgICAgICB0aGlzLl9kZWZhdWx0RWxldmF0aW9uID0gMC4zOworICAgICAg
ICB0aGlzLl9lbGV2YXRpb25SZXR1cm5UaW1lID0gMTUwMDsKKyAgICAgICAgdGhpcy5fZWxldmF0
aW9uUmV0dXJuV2FpdFRpbWUgPSAxMDAwOworICAgICAgICB0aGlzLl96b29tU3RvcHNBbmltYXRp
b24gPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZnJhbWluZ1RpbWUgPSAxNTAwOworICAgICAgICAv
KioKKyAgICAgICAgICogRGVmaW5lIGlmIHRoZSBiZWhhdmlvciBzaG91bGQgYXV0b21hdGljYWxs
eSBjaGFuZ2UgdGhlIGNvbmZpZ3VyZWQKKyAgICAgICAgICogY2FtZXJhIGxpbWl0cyBhbmQgc2Vu
c2liaWxpdGllcy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYXV0b0NvcnJlY3RDYW1lcmFM
aW1pdHNBbmRTZW5zaWJpbGl0eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2lzUG9pbnRlckRvd24g
PSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbGFzdEludGVyYWN0aW9uVGltZSA9IC1JbmZpbml0eTsK
KyAgICAgICAgLy8gRnJhbWluZyBjb250cm9sCisgICAgICAgIHRoaXMuX2FuaW1hdGFibGVzID0g
bmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX2JldGFJc0FuaW1hdGluZyA9IGZhbHNlOworICAg
IH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnJhbWluZ0JlaGF2aW9yLnByb3RvdHlwZSwg
Im5hbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBi
ZWhhdmlvci4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuICJGcmFtaW5nIjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUsICJtb2RlIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyBjdXJyZW50IG1vZGUgdXNlZCBieSB0aGUgYmVoYXZpb3Iu
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9tb2RlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0
cyB0aGUgY3VycmVudCBtb2RlIHVzZWQgYnkgdGhlIGJlaGF2aW9yCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uIChtb2RlKSB7CisgICAgICAgICAgICB0aGlzLl9tb2RlID0gbW9k
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZyYW1pbmdC
ZWhhdmlvci5wcm90b3R5cGUsICJyYWRpdXNTY2FsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgdGhlIHNjYWxlIGFwcGxpZWQgdG8gdGhlIHJhZGl1cworICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmFkaXVz
U2NhbGU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBzY2Fs
ZSBhcHBsaWVkIHRvIHRoZSByYWRpdXMgKDEgYnkgZGVmYXVsdCkKKyAgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHJhZGl1cykgeworICAgICAgICAgICAgdGhpcy5fcmFkaXVzU2Nh
bGUgPSByYWRpdXM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLCAicG9zaXRpb25TY2FsZSIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIHNjYWxlIHRvIGFwcGx5IG9uIFkgYXhpcyB0byBwb3Np
dGlvbiBjYW1lcmEgZm9jdXMuIDAuNSBieSBkZWZhdWx0IHdoaWNoIG1lYW5zIHRoZSBjZW50ZXIg
b2YgdGhlIGJvdW5kaW5nIGJveC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uU2NhbGU7CisgICAgICAgIH0s
CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBzY2FsZSB0byBhcHBseSBvbiBZIGF4
aXMgdG8gcG9zaXRpb24gY2FtZXJhIGZvY3VzLiAwLjUgYnkgZGVmYXVsdCB3aGljaCBtZWFucyB0
aGUgY2VudGVyIG9mIHRoZSBib3VuZGluZyBib3guCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uIChzY2FsZSkgeworICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25TY2FsZSA9IHNj
YWxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnJhbWlu
Z0JlaGF2aW9yLnByb3RvdHlwZSwgImRlZmF1bHRFbGV2YXRpb24iLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAqIEdldHMgdGhlIGFuZ2xlIGFib3ZlL2JlbG93IHRoZSBob3Jpem9udGFsIHBsYW5l
IHRvIHJldHVybiB0byB3aGVuIHRoZSByZXR1cm4gdG8gZGVmYXVsdCBlbGV2YXRpb24gaWRsZQor
ICAgICAgICAqIGJlaGF2aW91ciBpcyB0cmlnZ2VyZWQsIGluIHJhZGlhbnMuCisgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rl
ZmF1bHRFbGV2YXRpb247CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAqIFNldHMg
dGhlIGFuZ2xlIGFib3ZlL2JlbG93IHRoZSBob3Jpem9udGFsIHBsYW5lIHRvIHJldHVybiB0byB3
aGVuIHRoZSByZXR1cm4gdG8gZGVmYXVsdCBlbGV2YXRpb24gaWRsZQorICAgICAgICAqIGJlaGF2
aW91ciBpcyB0cmlnZ2VyZWQsIGluIHJhZGlhbnMuCisgICAgICAgICovCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKGVsZXZhdGlvbikgeworICAgICAgICAgICAgdGhpcy5fZGVmYXVsdEVsZXZhdGlv
biA9IGVsZXZhdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUsICJlbGV2YXRpb25SZXR1cm5UaW1lIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSB0
YWtlbiB0byByZXR1cm4gdG8gdGhlIGRlZmF1bHQgYmV0YSBwb3NpdGlvbi4KKyAgICAgICAgICog
TmVnYXRpdmUgdmFsdWUgaW5kaWNhdGVzIGNhbWVyYSBzaG91bGQgbm90IHJldHVybiB0byBkZWZh
dWx0LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZWxldmF0aW9uUmV0dXJuVGltZTsKKyAgICAgICAgfSwKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFNldHMgdGhlIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGFrZW4gdG8g
cmV0dXJuIHRvIHRoZSBkZWZhdWx0IGJldGEgcG9zaXRpb24uCisgICAgICAgICAqIE5lZ2F0aXZl
IHZhbHVlIGluZGljYXRlcyBjYW1lcmEgc2hvdWxkIG5vdCByZXR1cm4gdG8gZGVmYXVsdC4KKyAg
ICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHNwZWVkKSB7CisgICAgICAgICAgICB0
aGlzLl9lbGV2YXRpb25SZXR1cm5UaW1lID0gc3BlZWQ7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLCAiZWxldmF0
aW9uUmV0dXJuV2FpdFRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBk
ZWxheSAoaW4gbWlsbGlzZWNvbmRzKSB0YWtlbiBiZWZvcmUgdGhlIGNhbWVyYSByZXR1cm5zIHRv
IHRoZSBkZWZhdWx0IGJldGEgcG9zaXRpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbGV2YXRpb25SZXR1cm5XYWl0
VGltZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGRlbGF5
IChpbiBtaWxsaXNlY29uZHMpIHRha2VuIGJlZm9yZSB0aGUgY2FtZXJhIHJldHVybnMgdG8gdGhl
IGRlZmF1bHQgYmV0YSBwb3NpdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHRpbWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2VsZXZhdGlvblJldHVybldhaXRUaW1lID0g
dGltZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZyYW1p
bmdCZWhhdmlvci5wcm90b3R5cGUsICJ6b29tU3RvcHNBbmltYXRpb24iLCB7CisgICAgICAgIC8q
KgorICAgICAgICAqIEdldHMgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgdXNlciB6b29taW5n
IHNob3VsZCBzdG9wIGFuaW1hdGlvbi4KKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fem9vbVN0b3BzQW5pbWF0aW9uOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgKiBTZXRzIHRoZSBmbGFnIHRoYXQgaW5kaWNh
dGVzIGlmIHVzZXIgem9vbWluZyBzaG91bGQgc3RvcCBhbmltYXRpb24uCisgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKGZsYWcpIHsKKyAgICAgICAgICAgIHRoaXMuX3pvb21TdG9w
c0FuaW1hdGlvbiA9IGZsYWc7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLCAiZnJhbWluZ1RpbWUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB0cmFuc2l0aW9uIHRpbWUgd2hlbiBmcmFtaW5n
IHRoZSBtZXNoLCBpbiBtaWxsaXNlY29uZHMKKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWluZ1RpbWU7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB0cmFuc2l0aW9uIHRpbWUgd2hl
biBmcmFtaW5nIHRoZSBtZXNoLCBpbiBtaWxsaXNlY29uZHMKKyAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodGltZSkgeworICAgICAgICAgICAgdGhpcy5fZnJhbWluZ1RpbWUgPSB0
aW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUg
YmVoYXZpb3IuCisgICAgICovCisgICAgRnJhbWluZ0JlaGF2aW9yLnByb3RvdHlwZS5pbml0ID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBEbyBub3RpaG5nCisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBdHRhY2hlcyB0aGUgYmVoYXZpb3IgdG8gaXRzIGFyYyByb3RhdGUgY2FtZXJhLgorICAg
ICAqIEBwYXJhbSBjYW1lcmEgRGVmaW5lcyB0aGUgY2FtZXJhIHRvIGF0dGFjaCB0aGUgYmVoYXZp
b3IgdG8KKyAgICAgKi8KKyAgICBGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLmF0dGFjaCA9IGZ1
bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhp
cy5fYXR0YWNoZWRDYW1lcmEgPSBjYW1lcmE7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX2F0
dGFjaGVkQ2FtZXJhLmdldFNjZW5lKCk7CisgICAgICAgIEZyYW1pbmdCZWhhdmlvci5FYXNpbmdG
dW5jdGlvbi5zZXRFYXNpbmdNb2RlKEZyYW1pbmdCZWhhdmlvci5FYXNpbmdNb2RlKTsKKyAgICAg
ICAgdGhpcy5fb25QcmVQb2ludGVyT2JzZXJ2YWJsZU9ic2VydmVyID0gc2NlbmUub25QcmVQb2lu
dGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHBvaW50ZXJJbmZvUHJlKSB7CisgICAgICAgICAg
ICBpZiAocG9pbnRlckluZm9QcmUudHlwZSA9PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04p
IHsKKyAgICAgICAgICAgICAgICBfdGhpcy5faXNQb2ludGVyRG93biA9IHRydWU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvaW50ZXJJ
bmZvUHJlLnR5cGUgPT09IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJVUCkgeworICAgICAgICAgICAg
ICAgIF90aGlzLl9pc1BvaW50ZXJEb3duID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0pOworICAgICAgICB0aGlzLl9vbk1lc2hUYXJnZXRDaGFuZ2VkT2JzZXJ2ZXIgPSBjYW1lcmEu
b25NZXNoVGFyZ2V0Q2hhbmdlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChtZXNoKSB7CisgICAg
ICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgICAgIF90aGlzLnpvb21Pbk1lc2gobWVz
aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9vbkFmdGVyQ2hl
Y2tJbnB1dHNPYnNlcnZlciA9IGNhbWVyYS5vbkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZhYmxlLmFk
ZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyBTdG9wIHRoZSBhbmltYXRpb24gaWYgdGhl
cmUgaXMgdXNlciBpbnRlcmFjdGlvbiBhbmQgdGhlIGFuaW1hdGlvbiBzaG91bGQgc3RvcCBmb3Ig
dGhpcyBpbnRlcmFjdGlvbgorICAgICAgICAgICAgX3RoaXMuX2FwcGx5VXNlckludGVyYWN0aW9u
KCk7CisgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgY2FtZXJhIGFib3ZlIHRoZSBncm91bmQu
IElmIHRoZSB1c2VyIHB1bGxzIHRoZSBjYW1lcmEgYmVuZWF0aCB0aGUgZ3JvdW5kIHBsYW5lLCBs
aWZ0IGl0CisgICAgICAgICAgICAvLyBiYWNrIHRvIHRoZSBkZWZhdWx0IHBvc2l0aW9uIGFmdGVy
IGEgZ2l2ZW4gdGltZW91dAorICAgICAgICAgICAgX3RoaXMuX21haW50YWluQ2FtZXJhQWJvdmVH
cm91bmQoKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRhY2hlcyB0
aGUgYmVoYXZpb3IgZnJvbSBpdHMgY3VycmVudCBhcmMgcm90YXRlIGNhbWVyYS4KKyAgICAgKi8K
KyAgICBGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX2F0dGFjaGVkQ2FtZXJhLmdldFNj
ZW5lKCk7CisgICAgICAgIGlmICh0aGlzLl9vblByZVBvaW50ZXJPYnNlcnZhYmxlT2JzZXJ2ZXIp
IHsKKyAgICAgICAgICAgIHNjZW5lLm9uUHJlUG9pbnRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMu
X29uUHJlUG9pbnRlck9ic2VydmFibGVPYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX29uQWZ0ZXJDaGVja0lucHV0c09ic2VydmVyKSB7CisgICAgICAgICAgICB0aGlzLl9h
dHRhY2hlZENhbWVyYS5vbkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9v
bkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X29uTWVzaFRhcmdldENoYW5nZWRPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5fYXR0YWNo
ZWRDYW1lcmEub25NZXNoVGFyZ2V0Q2hhbmdlZE9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uTWVz
aFRhcmdldENoYW5nZWRPYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYXR0YWNo
ZWRDYW1lcmEgPSBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogVGFyZ2V0cyB0aGUgZ2l2
ZW4gbWVzaCBhbmQgdXBkYXRlcyB6b29tIGxldmVsIGFjY29yZGluZ2x5LgorICAgICAqIEBwYXJh
bSBtZXNoICBUaGUgbWVzaCB0byB0YXJnZXQuCisgICAgICogQHBhcmFtIHJhZGl1cyBPcHRpb25h
bC4gSWYgYSBjYWNoZWQgcmFkaXVzIHBvc2l0aW9uIGFscmVhZHkgZXhpc3RzLCBvdmVycmlkZXMg
ZGVmYXVsdC4KKyAgICAgKiBAcGFyYW0gZnJhbWluZ1Bvc2l0aW9uWSBQb3NpdGlvbiBvbiBtZXNo
IHRvIGNlbnRlciBjYW1lcmEgZm9jdXMgd2hlcmUgMCBjb3JyZXNwb25kcyBib3R0b20gb2YgaXRz
IGJvdW5kaW5nIGJveCBhbmQgMSwgdGhlIHRvcAorICAgICAqIEBwYXJhbSBmb2N1c09uT3JpZ2lu
WFogRGV0ZXJtaW5lcyBpZiB0aGUgY2FtZXJhIHNob3VsZCBmb2N1cyBvbiAwIGluIHRoZSBYIGFu
ZCBaIGF4aXMgaW5zdGVhZCBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvbkFuaW1hdGlvbkVu
ZCBDYWxsYmFjayB0cmlnZ2VyZWQgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWluZyBhbmltYXRpb24K
KyAgICAgKi8KKyAgICBGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLnpvb21Pbk1lc2ggPSBmdW5j
dGlvbiAobWVzaCwgZm9jdXNPbk9yaWdpblhaLCBvbkFuaW1hdGlvbkVuZCkgeworICAgICAgICBp
ZiAoZm9jdXNPbk9yaWdpblhaID09PSB2b2lkIDApIHsgZm9jdXNPbk9yaWdpblhaID0gZmFsc2U7
IH0KKyAgICAgICAgaWYgKG9uQW5pbWF0aW9uRW5kID09PSB2b2lkIDApIHsgb25BbmltYXRpb25F
bmQgPSBudWxsOyB9CisgICAgICAgIG1lc2guY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAg
ICAgICB2YXIgYm91bmRpbmdCb3ggPSBtZXNoLmdldEJvdW5kaW5nSW5mbygpLmJvdW5kaW5nQm94
OworICAgICAgICB0aGlzLnpvb21PbkJvdW5kaW5nSW5mbyhib3VuZGluZ0JveC5taW5pbXVtV29y
bGQsIGJvdW5kaW5nQm94Lm1heGltdW1Xb3JsZCwgZm9jdXNPbk9yaWdpblhaLCBvbkFuaW1hdGlv
bkVuZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUYXJnZXRzIHRoZSBnaXZlbiBtZXNoIHdp
dGggaXRzIGNoaWxkcmVuIGFuZCB1cGRhdGVzIHpvb20gbGV2ZWwgYWNjb3JkaW5nbHkuCisgICAg
ICogQHBhcmFtIG1lc2ggIFRoZSBtZXNoIHRvIHRhcmdldC4KKyAgICAgKiBAcGFyYW0gcmFkaXVz
IE9wdGlvbmFsLiBJZiBhIGNhY2hlZCByYWRpdXMgcG9zaXRpb24gYWxyZWFkeSBleGlzdHMsIG92
ZXJyaWRlcyBkZWZhdWx0LgorICAgICAqIEBwYXJhbSBmcmFtaW5nUG9zaXRpb25ZIFBvc2l0aW9u
IG9uIG1lc2ggdG8gY2VudGVyIGNhbWVyYSBmb2N1cyB3aGVyZSAwIGNvcnJlc3BvbmRzIGJvdHRv
bSBvZiBpdHMgYm91bmRpbmcgYm94IGFuZCAxLCB0aGUgdG9wCisgICAgICogQHBhcmFtIGZvY3Vz
T25PcmlnaW5YWiBEZXRlcm1pbmVzIGlmIHRoZSBjYW1lcmEgc2hvdWxkIGZvY3VzIG9uIDAgaW4g
dGhlIFggYW5kIFogYXhpcyBpbnN0ZWFkIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9uQW5p
bWF0aW9uRW5kIENhbGxiYWNrIHRyaWdnZXJlZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtaW5nIGFu
aW1hdGlvbgorICAgICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUuem9vbU9uTWVz
aEhpZXJhcmNoeSA9IGZ1bmN0aW9uIChtZXNoLCBmb2N1c09uT3JpZ2luWFosIG9uQW5pbWF0aW9u
RW5kKSB7CisgICAgICAgIGlmIChmb2N1c09uT3JpZ2luWFogPT09IHZvaWQgMCkgeyBmb2N1c09u
T3JpZ2luWFogPSBmYWxzZTsgfQorICAgICAgICBpZiAob25BbmltYXRpb25FbmQgPT09IHZvaWQg
MCkgeyBvbkFuaW1hdGlvbkVuZCA9IG51bGw7IH0KKyAgICAgICAgbWVzaC5jb21wdXRlV29ybGRN
YXRyaXgodHJ1ZSk7CisgICAgICAgIHZhciBib3VuZGluZ0JveCA9IG1lc2guZ2V0SGllcmFyY2h5
Qm91bmRpbmdWZWN0b3JzKHRydWUpOworICAgICAgICB0aGlzLnpvb21PbkJvdW5kaW5nSW5mbyhi
b3VuZGluZ0JveC5taW4sIGJvdW5kaW5nQm94Lm1heCwgZm9jdXNPbk9yaWdpblhaLCBvbkFuaW1h
dGlvbkVuZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUYXJnZXRzIHRoZSBnaXZlbiBtZXNo
ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBhbmQgdXBkYXRlcyB6b29tIGxldmVsIGFjY29yZGluZ2x5
LgorICAgICAqIEBwYXJhbSBtZXNoZXMgIFRoZSBtZXNoIHRvIHRhcmdldC4KKyAgICAgKiBAcGFy
YW0gcmFkaXVzIE9wdGlvbmFsLiBJZiBhIGNhY2hlZCByYWRpdXMgcG9zaXRpb24gYWxyZWFkeSBl
eGlzdHMsIG92ZXJyaWRlcyBkZWZhdWx0LgorICAgICAqIEBwYXJhbSBmcmFtaW5nUG9zaXRpb25Z
IFBvc2l0aW9uIG9uIG1lc2ggdG8gY2VudGVyIGNhbWVyYSBmb2N1cyB3aGVyZSAwIGNvcnJlc3Bv
bmRzIGJvdHRvbSBvZiBpdHMgYm91bmRpbmcgYm94IGFuZCAxLCB0aGUgdG9wCisgICAgICogQHBh
cmFtIGZvY3VzT25PcmlnaW5YWiBEZXRlcm1pbmVzIGlmIHRoZSBjYW1lcmEgc2hvdWxkIGZvY3Vz
IG9uIDAgaW4gdGhlIFggYW5kIFogYXhpcyBpbnN0ZWFkIG9mIHRoZSBtZXNoCisgICAgICogQHBh
cmFtIG9uQW5pbWF0aW9uRW5kIENhbGxiYWNrIHRyaWdnZXJlZCBhdCB0aGUgZW5kIG9mIHRoZSBm
cmFtaW5nIGFuaW1hdGlvbgorICAgICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUu
em9vbU9uTWVzaGVzSGllcmFyY2h5ID0gZnVuY3Rpb24gKG1lc2hlcywgZm9jdXNPbk9yaWdpblha
LCBvbkFuaW1hdGlvbkVuZCkgeworICAgICAgICBpZiAoZm9jdXNPbk9yaWdpblhaID09PSB2b2lk
IDApIHsgZm9jdXNPbk9yaWdpblhaID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKG9uQW5pbWF0aW9u
RW5kID09PSB2b2lkIDApIHsgb25BbmltYXRpb25FbmQgPSBudWxsOyB9CisgICAgICAgIHZhciBt
aW4gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXShOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFY
X1ZBTFVFKTsKKyAgICAgICAgdmFyIG1heCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKC1OdW1iZXIuTUFYX1ZBTFVFLCAtTnVt
YmVyLk1BWF9WQUxVRSwgLU51bWJlci5NQVhfVkFMVUUpOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG1lc2hlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5m
byA9IG1lc2hlc1tpXS5nZXRIaWVyYXJjaHlCb3VuZGluZ1ZlY3RvcnModHJ1ZSk7CisgICAgICAg
ICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMyJdLkNoZWNrRXh0ZW5kcyhib3VuZGluZ0luZm8ubWluLCBtaW4sIG1heCk7CisgICAgICAg
ICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMyJdLkNoZWNrRXh0ZW5kcyhib3VuZGluZ0luZm8ubWF4LCBtaW4sIG1heCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy56b29tT25Cb3VuZGluZ0luZm8obWluLCBtYXgsIGZvY3VzT25Pcmln
aW5YWiwgb25BbmltYXRpb25FbmQpOworICAgIH07CisgICAgLyoqCisgICAgICogVGFyZ2V0cyB0
aGUgYm91bmRpbmcgYm94IGluZm8gZGVmaW5lZCBieSBpdHMgZXh0ZW5kcyBhbmQgdXBkYXRlcyB6
b29tIGxldmVsIGFjY29yZGluZ2x5LgorICAgICAqIEBwYXJhbSBtaW5pbXVtV29ybGQgRGV0ZXJt
aW5lcyB0aGUgc21hbGxlciBwb3NpdGlvbiBvZiB0aGUgYm91bmRpbmcgYm94IGV4dGVuZAorICAg
ICAqIEBwYXJhbSBtYXhpbXVtV29ybGQgRGV0ZXJtaW5lcyB0aGUgYmlnZ2VyIHBvc2l0aW9uIG9m
IHRoZSBib3VuZGluZyBib3ggZXh0ZW5kCisgICAgICogQHBhcmFtIGZvY3VzT25PcmlnaW5YWiBE
ZXRlcm1pbmVzIGlmIHRoZSBjYW1lcmEgc2hvdWxkIGZvY3VzIG9uIDAgaW4gdGhlIFggYW5kIFog
YXhpcyBpbnN0ZWFkIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9uQW5pbWF0aW9uRW5kIENh
bGxiYWNrIHRyaWdnZXJlZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtaW5nIGFuaW1hdGlvbgorICAg
ICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUuem9vbU9uQm91bmRpbmdJbmZvID0g
ZnVuY3Rpb24gKG1pbmltdW1Xb3JsZCwgbWF4aW11bVdvcmxkLCBmb2N1c09uT3JpZ2luWFosIG9u
QW5pbWF0aW9uRW5kKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChm
b2N1c09uT3JpZ2luWFogPT09IHZvaWQgMCkgeyBmb2N1c09uT3JpZ2luWFogPSBmYWxzZTsgfQor
ICAgICAgICBpZiAob25BbmltYXRpb25FbmQgPT09IHZvaWQgMCkgeyBvbkFuaW1hdGlvbkVuZCA9
IG51bGw7IH0KKyAgICAgICAgdmFyIHpvb21UYXJnZXQ7CisgICAgICAgIGlmICghdGhpcy5fYXR0
YWNoZWRDYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAv
LyBGaW5kIHRhcmdldCBieSBpbnRlcnBvbGF0aW5nIGZyb20gYm90dG9tIG9mIGJvdW5kaW5nIGJv
eCBpbiB3b3JsZC1zcGFjZSB0byB0b3AgdmlhIGZyYW1pbmdQb3NpdGlvblkKKyAgICAgICAgdmFy
IGJvdHRvbSA9IG1pbmltdW1Xb3JsZC55OworICAgICAgICB2YXIgdG9wID0gbWF4aW11bVdvcmxk
Lnk7CisgICAgICAgIHZhciB6b29tVGFyZ2V0WSA9IGJvdHRvbSArICh0b3AgLSBib3R0b20pICog
dGhpcy5fcG9zaXRpb25TY2FsZTsKKyAgICAgICAgdmFyIHJhZGl1c1dvcmxkID0gbWF4aW11bVdv
cmxkLnN1YnRyYWN0KG1pbmltdW1Xb3JsZCkuc2NhbGUoMC41KTsKKyAgICAgICAgaWYgKGZvY3Vz
T25PcmlnaW5YWikgeworICAgICAgICAgICAgem9vbVRhcmdldCA9IG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIHpvb21UYXJn
ZXRZLCAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBjZW50
ZXJXb3JsZCA9IG1pbmltdW1Xb3JsZC5hZGQocmFkaXVzV29ybGQpOworICAgICAgICAgICAgem9v
bVRhcmdldCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVjdG9yMyJdKGNlbnRlcldvcmxkLngsIHpvb21UYXJnZXRZLCBjZW50ZXJXb3JsZC56
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX3ZlY3RvclRyYW5zaXRpb24pIHsKKyAg
ICAgICAgICAgIHRoaXMuX3ZlY3RvclRyYW5zaXRpb24gPSBfQW5pbWF0aW9uc19hbmltYXRpb25f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQW5pbWF0aW9uIl0uQ3JlYXRlQW5pbWF0aW9u
KCJ0YXJnZXQiLCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9WRUNUT1IzLCA2MCwgRnJhbWluZ0JlaGF2
aW9yLkVhc2luZ0Z1bmN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9iZXRhSXNBbmlt
YXRpbmcgPSB0cnVlOworICAgICAgICB2YXIgYW5pbWF0YWJsZSA9IF9BbmltYXRpb25zX2FuaW1h
dGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBbmltYXRpb24iXS5UcmFuc2l0aW9u
VG8oInRhcmdldCIsIHpvb21UYXJnZXQsIHRoaXMuX2F0dGFjaGVkQ2FtZXJhLCB0aGlzLl9hdHRh
Y2hlZENhbWVyYS5nZXRTY2VuZSgpLCA2MCwgdGhpcy5fdmVjdG9yVHJhbnNpdGlvbiwgdGhpcy5f
ZnJhbWluZ1RpbWUpOworICAgICAgICBpZiAoYW5pbWF0YWJsZSkgeworICAgICAgICAgICAgdGhp
cy5fYW5pbWF0YWJsZXMucHVzaChhbmltYXRhYmxlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBz
ZXRzIHRoZSByYWRpdXMgYW5kIGxvd2VyIHJhZGl1cyBib3VuZHMKKyAgICAgICAgLy8gU21hbGwg
ZGVsdGEgZW5zdXJlcyBjYW1lcmEgaXMgbm90IGFsd2F5cyBhdCBsb3dlciB6b29tIGxpbWl0Lgor
ICAgICAgICB2YXIgcmFkaXVzID0gMDsKKyAgICAgICAgaWYgKHRoaXMuX21vZGUgPT09IEZyYW1p
bmdCZWhhdmlvci5GaXRGcnVzdHVtU2lkZXNNb2RlKSB7CisgICAgICAgICAgICB2YXIgcG9zaXRp
b24gPSB0aGlzLl9jYWxjdWxhdGVMb3dlclJhZGl1c0Zyb21Nb2RlbEJvdW5kaW5nU3BoZXJlKG1p
bmltdW1Xb3JsZCwgbWF4aW11bVdvcmxkKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmF1dG9Db3Jy
ZWN0Q2FtZXJhTGltaXRzQW5kU2Vuc2liaWxpdHkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9h
dHRhY2hlZENhbWVyYS5sb3dlclJhZGl1c0xpbWl0ID0gcmFkaXVzV29ybGQubGVuZ3RoKCkgKyB0
aGlzLl9hdHRhY2hlZENhbWVyYS5taW5aOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmFk
aXVzID0gcG9zaXRpb247CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5fbW9kZSA9
PT0gRnJhbWluZ0JlaGF2aW9yLklnbm9yZUJvdW5kc1NpemVNb2RlKSB7CisgICAgICAgICAgICBy
YWRpdXMgPSB0aGlzLl9jYWxjdWxhdGVMb3dlclJhZGl1c0Zyb21Nb2RlbEJvdW5kaW5nU3BoZXJl
KG1pbmltdW1Xb3JsZCwgbWF4aW11bVdvcmxkKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmF1dG9D
b3JyZWN0Q2FtZXJhTGltaXRzQW5kU2Vuc2liaWxpdHkgJiYgdGhpcy5fYXR0YWNoZWRDYW1lcmEu
bG93ZXJSYWRpdXNMaW1pdCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFj
aGVkQ2FtZXJhLmxvd2VyUmFkaXVzTGltaXQgPSB0aGlzLl9hdHRhY2hlZENhbWVyYS5taW5aOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFNldCBzZW5zaWJpbGl0aWVzCisg
ICAgICAgIGlmICh0aGlzLmF1dG9Db3JyZWN0Q2FtZXJhTGltaXRzQW5kU2Vuc2liaWxpdHkpIHsK
KyAgICAgICAgICAgIHZhciBleHRlbmQgPSBtYXhpbXVtV29ybGQuc3VidHJhY3QobWluaW11bVdv
cmxkKS5sZW5ndGgoKTsKKyAgICAgICAgICAgIHRoaXMuX2F0dGFjaGVkQ2FtZXJhLnBhbm5pbmdT
ZW5zaWJpbGl0eSA9IDUwMDAgLyBleHRlbmQ7CisgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZENh
bWVyYS53aGVlbFByZWNpc2lvbiA9IDEwMCAvIHJhZGl1czsKKyAgICAgICAgfQorICAgICAgICAv
LyB0cmFuc2l0aW9uIHRvIG5ldyByYWRpdXMKKyAgICAgICAgaWYgKCF0aGlzLl9yYWRpdXNUcmFu
c2l0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl9yYWRpdXNUcmFuc2l0aW9uID0gX0FuaW1hdGlv
bnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFuaW1hdGlvbiJdLkNy
ZWF0ZUFuaW1hdGlvbigicmFkaXVzIiwgX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVfRkxPQVQsIDYwLCBG
cmFtaW5nQmVoYXZpb3IuRWFzaW5nRnVuY3Rpb24pOworICAgICAgICB9CisgICAgICAgIGFuaW1h
dGFibGUgPSBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siQW5pbWF0aW9uIl0uVHJhbnNpdGlvblRvKCJyYWRpdXMiLCByYWRpdXMsIHRoaXMuX2F0dGFj
aGVkQ2FtZXJhLCB0aGlzLl9hdHRhY2hlZENhbWVyYS5nZXRTY2VuZSgpLCA2MCwgdGhpcy5fcmFk
aXVzVHJhbnNpdGlvbiwgdGhpcy5fZnJhbWluZ1RpbWUsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIF90aGlzLnN0b3BBbGxBbmltYXRpb25zKCk7CisgICAgICAgICAgICBpZiAob25BbmltYXRp
b25FbmQpIHsKKyAgICAgICAgICAgICAgICBvbkFuaW1hdGlvbkVuZCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKF90aGlzLl9hdHRhY2hlZENhbWVyYSAmJiBfdGhpcy5fYXR0YWNo
ZWRDYW1lcmEudXNlSW5wdXRUb1Jlc3RvcmVTdGF0ZSkgeworICAgICAgICAgICAgICAgIF90aGlz
Ll9hdHRhY2hlZENhbWVyYS5zdG9yZVN0YXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgICAgICBpZiAoYW5pbWF0YWJsZSkgeworICAgICAgICAgICAgdGhpcy5fYW5pbWF0YWJs
ZXMucHVzaChhbmltYXRhYmxlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
Q2FsY3VsYXRlcyB0aGUgbG93ZXN0IHJhZGl1cyBmb3IgdGhlIGNhbWVyYSBiYXNlZCBvbiB0aGUg
Ym91bmRpbmcgYm94IG9mIHRoZSBtZXNoLgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIG9u
IHdoaWNoIHRvIGJhc2UgdGhlIGNhbGN1bGF0aW9uLiBtZXNoIGJvdW5kaW5nSW5mbyB1c2VkIHRv
IGVzdGltYXRlIG5lY2Vzc2FyeQorICAgICAqCQkJICBmcnVzdHVtIHdpZHRoLgorICAgICAqIEBy
ZXR1cm4gVGhlIG1pbmltdW0gZGlzdGFuY2UgZnJvbSB0aGUgcHJpbWFyeSBtZXNoJ3MgY2VudGVy
IHBvaW50IGF0IHdoaWNoIHRoZSBjYW1lcmEgbXVzdCBiZSBrZXB0IGluIG9yZGVyCisgICAgICoJ
CSB0byBmdWxseSBlbmNsb3NlIHRoZSBtZXNoIGluIHRoZSB2aWV3aW5nIGZydXN0dW0uCisgICAg
ICovCisgICAgRnJhbWluZ0JlaGF2aW9yLnByb3RvdHlwZS5fY2FsY3VsYXRlTG93ZXJSYWRpdXNG
cm9tTW9kZWxCb3VuZGluZ1NwaGVyZSA9IGZ1bmN0aW9uIChtaW5pbXVtV29ybGQsIG1heGltdW1X
b3JsZCkgeworICAgICAgICB2YXIgc2l6ZSA9IG1heGltdW1Xb3JsZC5zdWJ0cmFjdChtaW5pbXVt
V29ybGQpOworICAgICAgICB2YXIgYm94VmVjdG9yR2xvYmFsRGlhZ29uYWwgPSBzaXplLmxlbmd0
aCgpOworICAgICAgICB2YXIgZnJ1c3R1bVNsb3BlID0gdGhpcy5fZ2V0RnJ1c3R1bVNsb3BlKCk7
CisgICAgICAgIC8vIEZvcm11bGEgZm9yIHNldHRpbmcgZGlzdGFuY2UKKyAgICAgICAgLy8gKEdv
b2QgZXhwbGFuYXRpb246IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjg2NjM1
MC9tb3ZlLWNhbWVyYS10by1maXQtM2Qtc2NlbmUpCisgICAgICAgIHZhciByYWRpdXNXaXRob3V0
RnJhbWluZyA9IGJveFZlY3Rvckdsb2JhbERpYWdvbmFsICogMC41OworICAgICAgICAvLyBIb3Jp
em9uIGRpc3RhbmNlCisgICAgICAgIHZhciByYWRpdXMgPSByYWRpdXNXaXRob3V0RnJhbWluZyAq
IHRoaXMuX3JhZGl1c1NjYWxlOworICAgICAgICB2YXIgZGlzdGFuY2VGb3JIb3Jpem9udGFsRnJ1
c3R1bSA9IHJhZGl1cyAqIE1hdGguc3FydCgxLjAgKyAxLjAgLyAoZnJ1c3R1bVNsb3BlLnggKiBm
cnVzdHVtU2xvcGUueCkpOworICAgICAgICB2YXIgZGlzdGFuY2VGb3JWZXJ0aWNhbEZydXN0dW0g
PSByYWRpdXMgKiBNYXRoLnNxcnQoMS4wICsgMS4wIC8gKGZydXN0dW1TbG9wZS55ICogZnJ1c3R1
bVNsb3BlLnkpKTsKKyAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5tYXgoZGlzdGFuY2VGb3JI
b3Jpem9udGFsRnJ1c3R1bSwgZGlzdGFuY2VGb3JWZXJ0aWNhbEZydXN0dW0pOworICAgICAgICB2
YXIgY2FtZXJhID0gdGhpcy5fYXR0YWNoZWRDYW1lcmE7CisgICAgICAgIGlmICghY2FtZXJhKSB7
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FtZXJhLmxv
d2VyUmFkaXVzTGltaXQgJiYgdGhpcy5fbW9kZSA9PT0gRnJhbWluZ0JlaGF2aW9yLklnbm9yZUJv
dW5kc1NpemVNb2RlKSB7CisgICAgICAgICAgICAvLyBEb24ndCBleGNlZWQgdGhlIHJlcXVlc3Rl
ZCBsaW1pdAorICAgICAgICAgICAgZGlzdGFuY2UgPSBkaXN0YW5jZSA8IGNhbWVyYS5sb3dlclJh
ZGl1c0xpbWl0ID8gY2FtZXJhLmxvd2VyUmFkaXVzTGltaXQgOiBkaXN0YW5jZTsKKyAgICAgICAg
fQorICAgICAgICAvLyBEb24ndCBleGNlZWQgdGhlIHVwcGVyIHJhZGl1cyBsaW1pdAorICAgICAg
ICBpZiAoY2FtZXJhLnVwcGVyUmFkaXVzTGltaXQpIHsKKyAgICAgICAgICAgIGRpc3RhbmNlID0g
ZGlzdGFuY2UgPiBjYW1lcmEudXBwZXJSYWRpdXNMaW1pdCA/IGNhbWVyYS51cHBlclJhZGl1c0xp
bWl0IDogZGlzdGFuY2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRpc3RhbmNlOworICAg
IH07CisgICAgLyoqCisgICAgICogS2VlcHMgdGhlIGNhbWVyYSBhYm92ZSB0aGUgZ3JvdW5kIHBs
YW5lLiBJZiB0aGUgdXNlciBwdWxscyB0aGUgY2FtZXJhIGJlbG93IHRoZSBncm91bmQgcGxhbmUs
IHRoZSBjYW1lcmEKKyAgICAgKiBpcyBhdXRvbWF0aWNhbGx5IHJldHVybmVkIHRvIGl0cyBkZWZh
dWx0IHBvc2l0aW9uIChleHBlY3RlZCB0byBiZSBhYm92ZSBncm91bmQgcGxhbmUpLgorICAgICAq
LworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUuX21haW50YWluQ2FtZXJhQWJvdmVHcm91
bmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlm
ICh0aGlzLl9lbGV2YXRpb25SZXR1cm5UaW1lIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHZhciB0aW1lU2luY2VJbnRlcmFjdGlvbiA9IF9NaXNjX3ByZWNp
c2lvbkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUHJlY2lzaW9uRGF0ZSJdLk5v
dyAtIHRoaXMuX2xhc3RJbnRlcmFjdGlvblRpbWU7CisgICAgICAgIHZhciBkZWZhdWx0QmV0YSA9
IE1hdGguUEkgKiAwLjUgLSB0aGlzLl9kZWZhdWx0RWxldmF0aW9uOworICAgICAgICB2YXIgbGlt
aXRCZXRhID0gTWF0aC5QSSAqIDAuNTsKKyAgICAgICAgLy8gQnJpbmcgdGhlIGNhbWVyYSBiYWNr
IHVwIGlmIGJlbG93IHRoZSBncm91bmQgcGxhbmUKKyAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVk
Q2FtZXJhICYmICF0aGlzLl9iZXRhSXNBbmltYXRpbmcgJiYgdGhpcy5fYXR0YWNoZWRDYW1lcmEu
YmV0YSA+IGxpbWl0QmV0YSAmJiB0aW1lU2luY2VJbnRlcmFjdGlvbiA+PSB0aGlzLl9lbGV2YXRp
b25SZXR1cm5XYWl0VGltZSkgeworICAgICAgICAgICAgdGhpcy5fYmV0YUlzQW5pbWF0aW5nID0g
dHJ1ZTsKKyAgICAgICAgICAgIC8vVHJhbnNpdGlvbiB0byBuZXcgcG9zaXRpb24KKyAgICAgICAg
ICAgIHRoaXMuc3RvcEFsbEFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5fYmV0
YVRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9iZXRhVHJhbnNpdGlvbiA9IF9B
bmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBbmltYXRp
b24iXS5DcmVhdGVBbmltYXRpb24oImJldGEiLCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9GTE9BVCwg
NjAsIEZyYW1pbmdCZWhhdmlvci5FYXNpbmdGdW5jdGlvbik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB2YXIgYW5pbWF0YWJlID0gX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIkFuaW1hdGlvbiJdLlRyYW5zaXRpb25UbygiYmV0YSIsIGRlZmF1
bHRCZXRhLCB0aGlzLl9hdHRhY2hlZENhbWVyYSwgdGhpcy5fYXR0YWNoZWRDYW1lcmEuZ2V0U2Nl
bmUoKSwgNjAsIHRoaXMuX2JldGFUcmFuc2l0aW9uLCB0aGlzLl9lbGV2YXRpb25SZXR1cm5UaW1l
LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2NsZWFyQW5pbWF0aW9uTG9j
a3MoKTsKKyAgICAgICAgICAgICAgICBfdGhpcy5zdG9wQWxsQW5pbWF0aW9ucygpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBpZiAoYW5pbWF0YWJlKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fYW5pbWF0YWJsZXMucHVzaChhbmltYXRhYmUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBmcnVzdHVtIHNsb3BlIGJh
c2VkIG9uIHRoZSBjYW52YXMgcmF0aW8gYW5kIGNhbWVyYSBGT1YKKyAgICAgKiBAcmV0dXJucyBU
aGUgZnJ1c3R1bSBzbG9wZSByZXByZXNlbnRlZCBhcyBhIFZlY3RvcjIgd2l0aCBYIGFuZCBZIHNs
b3BlcworICAgICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUuX2dldEZydXN0dW1T
bG9wZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB2aWV3cG9ydCBy
YXRpbworICAgICAgICAvLyBBc3BlY3QgUmF0aW8gaXMgSGVpZ2h0L1dpZHRoLgorICAgICAgICB2
YXIgY2FtZXJhID0gdGhpcy5fYXR0YWNoZWRDYW1lcmE7CisgICAgICAgIGlmICghY2FtZXJhKSB7
CisgICAgICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlY3RvcjIiXS5aZXJvKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVu
Z2luZSA9IGNhbWVyYS5nZXRTY2VuZSgpLmdldEVuZ2luZSgpOworICAgICAgICB2YXIgYXNwZWN0
UmF0aW8gPSBlbmdpbmUuZ2V0QXNwZWN0UmF0aW8oY2FtZXJhKTsKKyAgICAgICAgLy8gQ2FtZXJh
IEZPViBpcyB0aGUgdmVydGljYWwgZmllbGQgb2YgdmlldyAodG9wLWJvdHRvbSkgaW4gcmFkaWFu
cy4KKyAgICAgICAgLy8gU2xvcGUgb2YgdGhlIGZydXN0dW0gdG9wL2JvdHRvbSBwbGFuZXMgaW4g
dmlldyBzcGFjZSwgcmVsYXRpdmUgdG8gdGhlIGZvcndhcmQgdmVjdG9yLgorICAgICAgICB2YXIg
ZnJ1c3R1bVNsb3BlWSA9IE1hdGgudGFuKGNhbWVyYS5mb3YgLyAyKTsKKyAgICAgICAgLy8gU2xv
cGUgb2YgdGhlIGZydXN0dW0gbGVmdC9yaWdodCBwbGFuZXMgaW4gdmlldyBzcGFjZSwgcmVsYXRp
dmUgdG8gdGhlIGZvcndhcmQgdmVjdG9yLgorICAgICAgICAvLyBQcm92aWRlcyB0aGUgYW1vdW50
IHRoYXQgb25lIHNpZGUgKGUuZy4gbGVmdCkgb2YgdGhlIGZydXN0dW0gZ2V0cyB3aWRlciBmb3Ig
ZXZlcnkgdW5pdAorICAgICAgICAvLyBhbG9uZyB0aGUgZm9yd2FyZCB2ZWN0b3IuCisgICAgICAg
IHZhciBmcnVzdHVtU2xvcGVYID0gZnJ1c3R1bVNsb3BlWSAqIGFzcGVjdFJhdGlvOworICAgICAg
ICByZXR1cm4gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJWZWN0b3IyIl0oZnJ1c3R1bVNsb3BlWCwgZnJ1c3R1bVNsb3BlWSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZW1vdmVzIGFsbCBhbmltYXRpb24gbG9ja3MuIEFsbG93cyBuZXcgYW5p
bWF0aW9ucyB0byBiZSBhZGRlZCB0byBhbnkgb2YgdGhlIGFyY0NhbWVyYSBwcm9wZXJ0aWVzLgor
ICAgICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUuX2NsZWFyQW5pbWF0aW9uTG9j
a3MgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2JldGFJc0FuaW1hdGluZyA9IGZhbHNl
OworICAgIH07CisgICAgLyoqCisgICAgICogIEFwcGxpZXMgYW55IGN1cnJlbnQgdXNlciBpbnRl
cmFjdGlvbiB0byB0aGUgY2FtZXJhLiBUYWtlcyBpbnRvIGFjY291bnQgbWF4aW11bSBhbHBoYSBy
b3RhdGlvbi4KKyAgICAgKi8KKyAgICBGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLl9hcHBseVVz
ZXJJbnRlcmFjdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuaXNVc2VySXNN
b3ZpbmcpIHsKKyAgICAgICAgICAgIHRoaXMuX2xhc3RJbnRlcmFjdGlvblRpbWUgPSBfTWlzY19w
cmVjaXNpb25EYXRlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlByZWNpc2lvbkRhdGUi
XS5Ob3c7CisgICAgICAgICAgICB0aGlzLnN0b3BBbGxBbmltYXRpb25zKCk7CisgICAgICAgICAg
ICB0aGlzLl9jbGVhckFuaW1hdGlvbkxvY2tzKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIFN0b3BzIGFuZCByZW1vdmVzIGFsbCBhbmltYXRpb25zIHRoYXQgaGF2ZSBiZWVu
IGFwcGxpZWQgdG8gdGhlIGNhbWVyYQorICAgICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90
b3R5cGUuc3RvcEFsbEFuaW1hdGlvbnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
Ll9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEuYW5p
bWF0aW9ucyA9IFtdOworICAgICAgICB9CisgICAgICAgIHdoaWxlICh0aGlzLl9hbmltYXRhYmxl
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9hbmltYXRhYmxlc1swXSkgeworICAg
ICAgICAgICAgICAgIHRoaXMuX2FuaW1hdGFibGVzWzBdLm9uQW5pbWF0aW9uRW5kID0gbnVsbDsK
KyAgICAgICAgICAgICAgICB0aGlzLl9hbmltYXRhYmxlc1swXS5zdG9wKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9hbmltYXRhYmxlcy5zaGlmdCgpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnJhbWluZ0JlaGF2aW9yLnByb3RvdHlw
ZSwgImlzVXNlcklzTW92aW5nIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIHZh
bHVlIGluZGljYXRpbmcgaWYgdGhlIHVzZXIgaXMgbW92aW5nIHRoZSBjYW1lcmEKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9h
dHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hlZENhbWVyYS5pbmVydGlhbEFs
cGhhT2Zmc2V0ICE9PSAwIHx8CisgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEu
aW5lcnRpYWxCZXRhT2Zmc2V0ICE9PSAwIHx8CisgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNo
ZWRDYW1lcmEuaW5lcnRpYWxSYWRpdXNPZmZzZXQgIT09IDAgfHwKKyAgICAgICAgICAgICAgICB0
aGlzLl9hdHRhY2hlZENhbWVyYS5pbmVydGlhbFBhbm5pbmdYICE9PSAwIHx8CisgICAgICAgICAg
ICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEuaW5lcnRpYWxQYW5uaW5nWSAhPT0gMCB8fAorICAg
ICAgICAgICAgICAgIHRoaXMuX2lzUG9pbnRlckRvd247CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IC8qKgorICAgICAqIFRoZSBlYXNpbmcgZnVuY3Rpb24gdXNlZCBieSBhbmltYXRpb25zCisgICAg
ICovCisgICAgRnJhbWluZ0JlaGF2aW9yLkVhc2luZ0Z1bmN0aW9uID0gbmV3IF9BbmltYXRpb25z
X2Vhc2luZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFeHBvbmVudGlhbEVhc2UiXSgp
OworICAgIC8qKgorICAgICAqIFRoZSBlYXNpbmcgbW9kZSB1c2VkIGJ5IGFuaW1hdGlvbnMKKyAg
ICAgKi8KKyAgICBGcmFtaW5nQmVoYXZpb3IuRWFzaW5nTW9kZSA9IF9BbmltYXRpb25zX2Vhc2lu
Z19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFYXNpbmdGdW5jdGlvbiJdLkVBU0lOR01P
REVfRUFTRUlOT1VUOworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAgICAgKiBUaGUgY2FtZXJh
IGNhbiBtb3ZlIGFsbCB0aGUgd2F5IHRvd2FyZHMgdGhlIG1lc2guCisgICAgICovCisgICAgRnJh
bWluZ0JlaGF2aW9yLklnbm9yZUJvdW5kc1NpemVNb2RlID0gMDsKKyAgICAvKioKKyAgICAgKiBU
aGUgY2FtZXJhIGlzIG5vdCBhbGxvd2VkIHRvIHpvb20gY2xvc2VyIHRvIHRoZSBtZXNoIHRoYW4g
dGhlIHBvaW50IGF0IHdoaWNoIHRoZSBhZGp1c3RlZCBib3VuZGluZyBzcGhlcmUgdG91Y2hlcyB0
aGUgZnJ1c3R1bSBzaWRlcworICAgICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5GaXRGcnVzdHVt
U2lkZXNNb2RlID0gMTsKKyAgICByZXR1cm4gRnJhbWluZ0JlaGF2aW9yOworfSgpKTsKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9CZWhhdmlvcnMvQ2FtZXJhcy9pbmRleC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0JlaGF2aW9y
cy9DYW1lcmFzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBdXRvUm90YXRpb25CZWhhdmlvciwgQm91
bmNpbmdCZWhhdmlvciwgRnJhbWluZ0JlaGF2aW9yICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfYXV0b1JvdGF0aW9uQmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXV0b1JvdGF0aW9uQmVo
YXZpb3IgKi8gIi4vQmVoYXZpb3JzL0NhbWVyYXMvYXV0b1JvdGF0aW9uQmVoYXZpb3IudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQXV0b1JvdGF0aW9uQmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9hdXRvUm90YXRpb25CZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJB
dXRvUm90YXRpb25CZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9i
b3VuY2luZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL2JvdW5jaW5nQmVoYXZpb3IgKi8gIi4vQmVoYXZpb3JzL0NhbWVyYXMv
Ym91bmNpbmdCZWhhdmlvci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb3VuY2luZ0JlaGF2aW9y
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYm91bmNpbmdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJCb3VuY2luZ0JlaGF2aW9yIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2ZyYW1pbmdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mcmFtaW5nQmVoYXZpb3IgKi8gIi4vQmVoYXZpb3Jz
L0NhbWVyYXMvZnJhbWluZ0JlaGF2aW9yLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyYW1pbmdC
ZWhhdmlvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZyYW1pbmdCZWhhdmlvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJGcmFtaW5nQmVoYXZpb3IiXTsgfSk7CisKKworCisKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vQmVoYXZpb3JzL01lc2hlcy9hdHRhY2hUb0JveEJlaGF2aW9y
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL0JlaGF2aW9ycy9NZXNoZXMvYXR0YWNoVG9Cb3hCZWhhdmlvci50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEF0dGFjaFRvQm94QmVoYXZpb3IgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXR0YWNoVG9Cb3hCZWhhdmlvciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gQXR0YWNoVG9Cb3hCZWhhdmlvcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworCisvKioKKyAqIEBoaWRkZW4KKyAqLwordmFyIEZhY2VEaXJl
Y3Rpb25JbmZvID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEZh
Y2VEaXJlY3Rpb25JbmZvKGRpcmVjdGlvbiwgcm90YXRlZERpcmVjdGlvbiwgZGlmZiwgaWdub3Jl
KSB7CisgICAgICAgIGlmIChyb3RhdGVkRGlyZWN0aW9uID09PSB2b2lkIDApIHsgcm90YXRlZERp
cmVjdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMyJdKCk7IH0KKyAgICAgICAgaWYgKGRpZmYgPT09IHZvaWQgMCkgeyBkaWZm
ID0gMDsgfQorICAgICAgICBpZiAoaWdub3JlID09PSB2b2lkIDApIHsgaWdub3JlID0gZmFsc2U7
IH0KKyAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisgICAgICAgIHRoaXMucm90
YXRlZERpcmVjdGlvbiA9IHJvdGF0ZWREaXJlY3Rpb247CisgICAgICAgIHRoaXMuZGlmZiA9IGRp
ZmY7CisgICAgICAgIHRoaXMuaWdub3JlID0gaWdub3JlOworICAgIH0KKyAgICByZXR1cm4gRmFj
ZURpcmVjdGlvbkluZm87Cit9KCkpOworLyoqCisgKiBBIGJlaGF2aW9yIHRoYXQgd2hlbiBhdHRh
Y2hlZCB0byBhIG1lc2ggd2lsbCB3aWxsIHBsYWNlIGEgc3BlY2lmaWVkIG5vZGUgb24gdGhlIG1l
c2hlcyBmYWNlIHBvaW50aW5nIHRvd2FyZHMgdGhlIGNhbWVyYQorICovCit2YXIgQXR0YWNoVG9C
b3hCZWhhdmlvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIHRoZSBBdHRhY2hUb0JveEJlaGF2aW9yLCB1c2VkIHRvIGF0dGFjaCBVSSB0byB0
aGUgY2xvc2VzdCBmYWNlIG9mIHRoZSBib3ggdG8gYSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gdWkg
VGhlIHRyYW5zZm9ybSBub2RlIHRoYXQgc2hvdWxkIGJlIGF0dGNoZWQgdG8gdGhlIG1lc2gKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBBdHRhY2hUb0JveEJlaGF2aW9yKHVpKSB7CisgICAgICAgIHRo
aXMudWkgPSB1aTsKKyAgICAgICAgLyoqCisgICAgICAgICAqICBUaGUgbmFtZSBvZiB0aGUgYmVo
YXZpb3IKKyAgICAgICAgICovCisgICAgICAgIHRoaXMubmFtZSA9ICJBdHRhY2hUb0JveEJlaGF2
aW9yIjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBkaXN0YW5jZSBhd2F5IGZyb20gdGhl
IGZhY2Ugb2YgdGhlIG1lc2ggdGhhdCB0aGUgVUkgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIChkZWZh
dWx0OiAwLjE1KQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaXN0YW5jZUF3YXlGcm9tRmFj
ZSA9IDAuMTU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZGlzdGFuY2UgZnJvbSB0aGUg
Ym90dG9tIG9mIHRoZSBmYWNlIHRoYXQgdGhlIFVJIHNob3VsZCBiZSBhdHRhY2hlZCB0byAoZGVm
YXVsdDogMC4xNSkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGlzdGFuY2VBd2F5RnJvbUJv
dHRvbU9mRmFjZSA9IDAuMTU7CisgICAgICAgIHRoaXMuX2ZhY2VWZWN0b3JzID0gW25ldyBGYWNl
RGlyZWN0aW9uSW5mbyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMyJdLlVwKCkpLCBuZXcgRmFjZURpcmVjdGlvbkluZm8oX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Eb3duKCkpLCBu
ZXcgRmFjZURpcmVjdGlvbkluZm8oX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5MZWZ0KCkpLCBuZXcgRmFjZURpcmVjdGlvbkluZm8oX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5S
aWdodCgpKSwgbmV3IEZhY2VEaXJlY3Rpb25JbmZvKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRm9yd2FyZCgpKSwgbmV3IEZhY2VEaXJl
Y3Rpb25JbmZvKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0uRm9yd2FyZCgpLnNjYWxlSW5QbGFjZSgtMSkpXTsKKyAgICAgICAgdGhpcy5f
dG1wTWF0cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJNYXRyaXgiXSgpOworICAgICAgICB0aGlzLl90bXBWZWN0b3IgPSBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgpOwor
ICAgICAgICB0aGlzLl96ZXJvVmVjdG9yID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2xvb2tB
dFRtcE1hdHJpeCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTWF0cml4Il0oKTsKKyAgICAgICAgLyogRG9lcyBub3RoaW5nICovCisgICAgfQor
ICAgIC8qKgorICAgICAqICBJbml0aWFsaXplcyB0aGUgYmVoYXZpb3IKKyAgICAgKi8KKyAgICBB
dHRhY2hUb0JveEJlaGF2aW9yLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAvKiBEb2VzIG5vdGhpbmcgKi8KKyAgICB9OworICAgIEF0dGFjaFRvQm94QmVoYXZpb3IucHJv
dG90eXBlLl9jbG9zZXN0RmFjZSA9IGZ1bmN0aW9uICh0YXJnZXREaXJlY3Rpb24pIHsKKyAgICAg
ICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgLy8gR28gb3ZlciBlYWNoIGZhY2UgYW5kIGNh
bGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiB0aGUgZmFjZSdzIG5vcm1hbCBhbmQgdGFyZ2V0RGly
ZWN0aW9uCisgICAgICAgIHRoaXMuX2ZhY2VWZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsK
KyAgICAgICAgICAgIGlmICghX3RoaXMuX3RhcmdldC5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAg
ICAgICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnJvdGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJRdWF0ZXJuaW9uIl0uUm90
YXRpb25ZYXdQaXRjaFJvbGwoX3RoaXMuX3RhcmdldC5yb3RhdGlvbi55LCBfdGhpcy5fdGFyZ2V0
LnJvdGF0aW9uLngsIF90aGlzLl90YXJnZXQucm90YXRpb24ueik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnJvdGF0aW9uUXVhdGVybmlvbi50b1JvdGF0aW9uTWF0
cml4KF90aGlzLl90bXBNYXRyaXgpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRl
c1RvUmVmKHYuZGlyZWN0aW9uLCBfdGhpcy5fdG1wTWF0cml4LCB2LnJvdGF0ZWREaXJlY3Rpb24p
OworICAgICAgICAgICAgdi5kaWZmID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5HZXRBbmdsZUJldHdlZW5WZWN0b3JzKHYucm90YXRl
ZERpcmVjdGlvbiwgdGFyZ2V0RGlyZWN0aW9uLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkNyb3NzKHYucm90YXRlZERpcmVjdGlvbiwg
dGFyZ2V0RGlyZWN0aW9uKSk7CisgICAgICAgIH0pOworICAgICAgICAvLyBSZXR1cm4gdGhlIGZh
Y2UgaW5mb3JtYXRpb24gb2YgdGhlIG9uZSB3aXRoIHRoZSBub3JtYWwgY2xvc2VzZXQgdG8gdGFy
Z2V0IGRpcmVjdGlvbgorICAgICAgICByZXR1cm4gdGhpcy5fZmFjZVZlY3RvcnMucmVkdWNlKGZ1
bmN0aW9uIChtaW4sIHApIHsKKyAgICAgICAgICAgIGlmIChtaW4uaWdub3JlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChw
Lmlnbm9yZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBtaW47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWluLmRpZmYgPCBwLmRp
ZmYgPyBtaW4gOiBwOworICAgICAgICAgICAgfQorICAgICAgICB9LCB0aGlzLl9mYWNlVmVjdG9y
c1swXSk7CisgICAgfTsKKyAgICBBdHRhY2hUb0JveEJlaGF2aW9yLnByb3RvdHlwZS5fbG9va0F0
VG9SZWYgPSBmdW5jdGlvbiAocG9zLCB1cCwgcmVmKSB7CisgICAgICAgIGlmICh1cCA9PT0gdm9p
ZCAwKSB7IHVwID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0oMCwgMSwgMCk7IH0KKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLkxvb2tBdExIVG9SZWYodGhp
cy5femVyb1ZlY3RvciwgcG9zLCB1cCwgdGhpcy5fbG9va0F0VG1wTWF0cml4KTsKKyAgICAgICAg
dGhpcy5fbG9va0F0VG1wTWF0cml4LmludmVydCgpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLkZyb21Sb3RhdGlv
bk1hdHJpeFRvUmVmKHRoaXMuX2xvb2tBdFRtcE1hdHJpeCwgcmVmKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEF0dGFjaGVzIHRoZSBBdHRhY2hUb0JveEJlaGF2aW9yIHRvIHRoZSBwYXNzZWQg
aW4gbWVzaAorICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG1lc2ggdGhhdCB0aGUgc3BlY2lmaWVk
IG5vZGUgd2lsbCBiZSBhdHRhY2hlZCB0bworICAgICAqLworICAgIEF0dGFjaFRvQm94QmVoYXZp
b3IucHJvdG90eXBlLmF0dGFjaCA9IGZ1bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICB0aGlz
Ll9zY2VuZSA9IHRoaXMuX3RhcmdldC5nZXRTY2VuZSgpOworICAgICAgICAvLyBFdmVyeSBmcmFt
ZSwgdXBkYXRlIHRoZSBhcHAgYmFycyBwb3NpdGlvbgorICAgICAgICB0aGlzLl9vblJlbmRlck9i
c2VydmVyID0gdGhpcy5fc2NlbmUub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGaW5k
IHRoZSBmYWNlIGNsb3Nlc3QgdG8gdGhlIGNhbWVyYXMgcG9zaXRpb24KKyAgICAgICAgICAgIHZh
ciBjYW1lcmFQb3MgPSBfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLnBvc2l0aW9uOworICAgICAg
ICAgICAgaWYgKF90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEuZGV2aWNlUG9zaXRpb24pIHsKKyAg
ICAgICAgICAgICAgICBjYW1lcmFQb3MgPSBfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLmRldmlj
ZVBvc2l0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGZhY2luZyA9IF90aGlz
Ll9jbG9zZXN0RmFjZShjYW1lcmFQb3Muc3VidHJhY3QodGFyZ2V0LnBvc2l0aW9uKSk7CisgICAg
ICAgICAgICBpZiAoX3RoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5sZWZ0Q2FtZXJhKSB7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5sZWZ0Q2FtZXJhLmNvbXB1dGVX
b3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4VG9SZWYoX3RoaXMuX3RtcE1hdHJpeCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5f
c2NlbmUuYWN0aXZlQ2FtZXJhLmNvbXB1dGVXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4
VG9SZWYoX3RoaXMuX3RtcE1hdHJpeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBH
ZXQgY2FtZXJhIHVwIGRpcmVjdGlvbgorICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRl
c1RvUmVmKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0uVXAoKSwgX3RoaXMuX3RtcE1hdHJpeCwgX3RoaXMuX3RtcFZlY3Rvcik7CisgICAg
ICAgICAgICAvLyBJZ25vcmUgZmFjZXMgdG8gbm90IHNlbGVjdCBhIHBhcnJlbGVsIGZhY2UgZm9y
IHRoZSB1cCB2ZWN0b3Igb2YgdGhlIFVJCisgICAgICAgICAgICBfdGhpcy5fZmFjZVZlY3RvcnMu
Zm9yRWFjaChmdW5jdGlvbiAodikgeworICAgICAgICAgICAgICAgIGlmIChmYWNpbmcuZGlyZWN0
aW9uLnggJiYgdi5kaXJlY3Rpb24ueCkgeworICAgICAgICAgICAgICAgICAgICB2Lmlnbm9yZSA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmYWNpbmcuZGly
ZWN0aW9uLnkgJiYgdi5kaXJlY3Rpb24ueSkgeworICAgICAgICAgICAgICAgICAgICB2Lmlnbm9y
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmYWNpbmcu
ZGlyZWN0aW9uLnogJiYgdi5kaXJlY3Rpb24ueikgeworICAgICAgICAgICAgICAgICAgICB2Lmln
bm9yZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB2YXIgZmFjaW5nVXAgPSBfdGhpcy5fY2xvc2VzdEZhY2UoX3RoaXMuX3RtcFZlY3Rvcik7
CisgICAgICAgICAgICAvLyBVbmlnbm9yZSBmYWNlcworICAgICAgICAgICAgX3RoaXMuX2ZhY2VW
ZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICB2Lmlnbm9yZSA9
IGZhbHNlOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyBQb3NpdGlvbiB0aGUgYXBw
IGJhciBvbiB0aGF0IGZhY2UKKyAgICAgICAgICAgIF90aGlzLnVpLnBvc2l0aW9uLmNvcHlGcm9t
KHRhcmdldC5wb3NpdGlvbik7CisgICAgICAgICAgICBpZiAoZmFjaW5nLmRpcmVjdGlvbi54KSB7
CisgICAgICAgICAgICAgICAgZmFjaW5nLnJvdGF0ZWREaXJlY3Rpb24uc2NhbGVUb1JlZigodGFy
Z2V0LnNjYWxpbmcueCAvIDIpICsgX3RoaXMuZGlzdGFuY2VBd2F5RnJvbUZhY2UsIF90aGlzLl90
bXBWZWN0b3IpOworICAgICAgICAgICAgICAgIF90aGlzLnVpLnBvc2l0aW9uLmFkZEluUGxhY2Uo
X3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmFjaW5n
LmRpcmVjdGlvbi55KSB7CisgICAgICAgICAgICAgICAgZmFjaW5nLnJvdGF0ZWREaXJlY3Rpb24u
c2NhbGVUb1JlZigodGFyZ2V0LnNjYWxpbmcueSAvIDIpICsgX3RoaXMuZGlzdGFuY2VBd2F5RnJv
bUZhY2UsIF90aGlzLl90bXBWZWN0b3IpOworICAgICAgICAgICAgICAgIF90aGlzLnVpLnBvc2l0
aW9uLmFkZEluUGxhY2UoX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoZmFjaW5nLmRpcmVjdGlvbi56KSB7CisgICAgICAgICAgICAgICAgZmFjaW5nLnJv
dGF0ZWREaXJlY3Rpb24uc2NhbGVUb1JlZigodGFyZ2V0LnNjYWxpbmcueiAvIDIpICsgX3RoaXMu
ZGlzdGFuY2VBd2F5RnJvbUZhY2UsIF90aGlzLl90bXBWZWN0b3IpOworICAgICAgICAgICAgICAg
IF90aGlzLnVpLnBvc2l0aW9uLmFkZEluUGxhY2UoX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBSb3RhdGUgdG8gYmUgb3JpZW50ZWQgcHJvcGVybHkgdG8g
dGhlIGNhbWVyYQorICAgICAgICAgICAgaWYgKCFfdGhpcy51aS5yb3RhdGlvblF1YXRlcm5pb24p
IHsKKyAgICAgICAgICAgICAgICBfdGhpcy51aS5yb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLlJv
dGF0aW9uWWF3UGl0Y2hSb2xsKF90aGlzLnVpLnJvdGF0aW9uLnksIF90aGlzLnVpLnJvdGF0aW9u
LngsIF90aGlzLnVpLnJvdGF0aW9uLnopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFj
aW5nLnJvdGF0ZWREaXJlY3Rpb24uc2NhbGVUb1JlZigtMSwgX3RoaXMuX3RtcFZlY3Rvcik7Cisg
ICAgICAgICAgICBfdGhpcy5fbG9va0F0VG9SZWYoX3RoaXMuX3RtcFZlY3RvciwgZmFjaW5nVXAu
cm90YXRlZERpcmVjdGlvbiwgX3RoaXMudWkucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAg
ICAgIC8vIFBsYWNlIHVpIHRoZSBjb3JyZWN0IGRpc3RhbmNlIGZyb20gdGhlIGJvdHRvbSBvZiB0
aGUgbWVzaAorICAgICAgICAgICAgaWYgKGZhY2luZ1VwLmRpcmVjdGlvbi54KSB7CisgICAgICAg
ICAgICAgICAgX3RoaXMudWkudXAuc2NhbGVUb1JlZihfdGhpcy5kaXN0YW5jZUF3YXlGcm9tQm90
dG9tT2ZGYWNlIC0gdGFyZ2V0LnNjYWxpbmcueCAvIDIsIF90aGlzLl90bXBWZWN0b3IpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZhY2luZ1VwLmRpcmVjdGlvbi55KSB7CisgICAg
ICAgICAgICAgICAgX3RoaXMudWkudXAuc2NhbGVUb1JlZihfdGhpcy5kaXN0YW5jZUF3YXlGcm9t
Qm90dG9tT2ZGYWNlIC0gdGFyZ2V0LnNjYWxpbmcueSAvIDIsIF90aGlzLl90bXBWZWN0b3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZhY2luZ1VwLmRpcmVjdGlvbi56KSB7Cisg
ICAgICAgICAgICAgICAgX3RoaXMudWkudXAuc2NhbGVUb1JlZihfdGhpcy5kaXN0YW5jZUF3YXlG
cm9tQm90dG9tT2ZGYWNlIC0gdGFyZ2V0LnNjYWxpbmcueiAvIDIsIF90aGlzLl90bXBWZWN0b3Ip
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgX3RoaXMudWkucG9zaXRpb24uYWRkSW5QbGFj
ZShfdGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiAgRGV0YWNoZXMgdGhlIGJlaGF2aW9yIGZyb20gdGhlIG1lc2gKKyAgICAgKi8KKyAgICBBdHRh
Y2hUb0JveEJlaGF2aW9yLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX3NjZW5lLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25SZW5k
ZXJPYnNlcnZlcik7CisgICAgfTsKKyAgICByZXR1cm4gQXR0YWNoVG9Cb3hCZWhhdmlvcjsKK30o
KSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQmVoYXZpb3JzL01lc2hlcy9mYWRlSW5P
dXRCZWhhdmlvci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vQmVoYXZpb3JzL01lc2hlcy9mYWRlSW5PdXRCZWhhdmlv
ci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBGYWRlSW5PdXRCZWhhdmlvciAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGYWRlSW5PdXRCZWhhdmlvciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gRmFkZUluT3V0QmVoYXZpb3I7IH0pOworLyoqCisgKiBBIGJlaGF2aW9yIHRo
YXQgd2hlbiBhdHRhY2hlZCB0byBhIG1lc2ggd2lsbCBhbGxvdyB0aGUgbWVzaCB0byBmYWRlIGlu
IGFuZCBvdXQKKyAqLwordmFyIEZhZGVJbk91dEJlaGF2aW9yID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhdGlhdGVzIHRoZSBGYWRlSW5PdXRCZWhh
dmlvcgorICAgICAqLworICAgIGZ1bmN0aW9uIEZhZGVJbk91dEJlaGF2aW9yKCkgeworICAgICAg
ICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICAvKioKKyAgICAgICAgICogVGltZSBpbiBtaWxs
aXNlY29uZHMgdG8gZGVsYXkgYmVmb3JlIGZhZGluZyBpbiAoRGVmYXVsdDogMCkKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuZGVsYXkgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogVGlt
ZSBpbiBtaWxsaXNlY29uZHMgZm9yIHRoZSBtZXNoIHRvIGZhZGUgaW4gKERlZmF1bHQ6IDMwMCkK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuZmFkZUluVGltZSA9IDMwMDsKKyAgICAgICAgdGhp
cy5fbWlsbGlzZWNvbmRzUGVyRnJhbWUgPSAxMDAwIC8gNjA7CisgICAgICAgIHRoaXMuX2hvdmVy
ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faG92ZXJWYWx1ZSA9IDA7CisgICAgICAgIHRoaXMu
X293bmVyTm9kZSA9IG51bGw7CisgICAgICAgIHRoaXMuX3VwZGF0ZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGlmIChfdGhpcy5fb3duZXJOb2RlKSB7CisgICAgICAgICAgICAgICAgX3Ro
aXMuX2hvdmVyVmFsdWUgKz0gX3RoaXMuX2hvdmVyZWQgPyBfdGhpcy5fbWlsbGlzZWNvbmRzUGVy
RnJhbWUgOiAtX3RoaXMuX21pbGxpc2Vjb25kc1BlckZyYW1lOworICAgICAgICAgICAgICAgIF90
aGlzLl9zZXRBbGxWaXNpYmlsaXR5KF90aGlzLl9vd25lck5vZGUsIChfdGhpcy5faG92ZXJWYWx1
ZSAtIF90aGlzLmRlbGF5KSAvIF90aGlzLmZhZGVJblRpbWUpOworICAgICAgICAgICAgICAgIGlm
IChfdGhpcy5fb3duZXJOb2RlLnZpc2liaWxpdHkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLl9zZXRBbGxWaXNpYmlsaXR5KF90aGlzLl9vd25lck5vZGUsIDEpOworICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5faG92ZXJWYWx1ZSA9IF90aGlzLmZhZGVJblRpbWUgKyBfdGhpcy5k
ZWxheTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5fb3duZXJOb2RlLnZpc2liaWxpdHkgPCAwKSB7
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zZXRBbGxWaXNpYmlsaXR5KF90aGlzLl9vd25l
ck5vZGUsIDApOworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2hvdmVyVmFsdWUgPCAw
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5faG92ZXJWYWx1ZSA9IDA7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChfdGhpcy5fdXBkYXRlLCBf
dGhpcy5fbWlsbGlzZWNvbmRzUGVyRnJhbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
ICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFkZUluT3V0QmVoYXZpb3IucHJvdG90
eXBlLCAibmFtZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqICBUaGUgbmFtZSBvZiB0aGUg
YmVoYXZpb3IKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuICJGYWRlSW5PdXQiOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAg
ICAgKiAgSW5pdGlhbGl6ZXMgdGhlIGJlaGF2aW9yCisgICAgICovCisgICAgRmFkZUluT3V0QmVo
YXZpb3IucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBdHRhY2hlcyB0aGUgZmFkZSBiZWhhdmlvciBvbiB0aGUgcGFzc2VkIGluIG1lc2gKKyAg
ICAgKiBAcGFyYW0gb3duZXJOb2RlIFRoZSBtZXNoIHRoYXQgd2lsbCBiZSBmYWRlZCBpbi9vdXQg
b25jZSBhdHRhY2hlZAorICAgICAqLworICAgIEZhZGVJbk91dEJlaGF2aW9yLnByb3RvdHlwZS5h
dHRhY2ggPSBmdW5jdGlvbiAob3duZXJOb2RlKSB7CisgICAgICAgIHRoaXMuX293bmVyTm9kZSA9
IG93bmVyTm9kZTsKKyAgICAgICAgdGhpcy5fc2V0QWxsVmlzaWJpbGl0eSh0aGlzLl9vd25lck5v
ZGUsIDApOworICAgIH07CisgICAgLyoqCisgICAgICogIERldGFjaGVzIHRoZSBiZWhhdmlvciBm
cm9tIHRoZSBtZXNoCisgICAgICovCisgICAgRmFkZUluT3V0QmVoYXZpb3IucHJvdG90eXBlLmRl
dGFjaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fb3duZXJOb2RlID0gbnVsbDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFRyaWdnZXJzIHRoZSBtZXNoIHRvIGJlZ2luIGZhZGluZyBp
biBvciBvdXQKKyAgICAgKiBAcGFyYW0gdmFsdWUgaWYgdGhlIG9iamVjdCBzaG91bGQgZmFkZSBp
biBvciBvdXQgKHRydWUgdG8gZmFkZSBpbikKKyAgICAgKi8KKyAgICBGYWRlSW5PdXRCZWhhdmlv
ci5wcm90b3R5cGUuZmFkZUluID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2hv
dmVyZWQgPSB2YWx1ZTsKKyAgICAgICAgdGhpcy5fdXBkYXRlKCk7CisgICAgfTsKKyAgICBGYWRl
SW5PdXRCZWhhdmlvci5wcm90b3R5cGUuX3NldEFsbFZpc2liaWxpdHkgPSBmdW5jdGlvbiAobWVz
aCwgdmFsdWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgbWVzaC52aXNp
YmlsaXR5ID0gdmFsdWU7CisgICAgICAgIG1lc2guZ2V0Q2hpbGRNZXNoZXMoKS5mb3JFYWNoKGZ1
bmN0aW9uIChjKSB7CisgICAgICAgICAgICBfdGhpcy5fc2V0QWxsVmlzaWJpbGl0eShjLCB2YWx1
ZSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgcmV0dXJuIEZhZGVJbk91dEJlaGF2aW9yOwor
fSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9CZWhhdmlvcnMvTWVzaGVzL2luZGV4
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9CZWhhdmlvcnMvTWVzaGVzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEF0dGFjaFRvQm94QmVoYXZp
b3IsIEZhZGVJbk91dEJlaGF2aW9yLCBNdWx0aVBvaW50ZXJTY2FsZUJlaGF2aW9yLCBQb2ludGVy
RHJhZ0JlaGF2aW9yLCBTaXhEb2ZEcmFnQmVoYXZpb3IgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hdHRhY2hUb0JveEJlaGF2aW9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2F0dGFjaFRvQm94QmVo
YXZpb3IgKi8gIi4vQmVoYXZpb3JzL01lc2hlcy9hdHRhY2hUb0JveEJlaGF2aW9yLnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkF0dGFjaFRvQm94QmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9hdHRhY2hUb0JveEJlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkF0dGFj
aFRvQm94QmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmFkZUlu
T3V0QmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vZmFkZUluT3V0QmVoYXZpb3IgKi8gIi4vQmVoYXZpb3JzL01lc2hlcy9mYWRl
SW5PdXRCZWhhdmlvci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGYWRlSW5PdXRCZWhhdmlvciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZhZGVJbk91dEJlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkZhZGVJbk91dEJlaGF2aW9yIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX211bHRpUG9pbnRlclNjYWxlQmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbXVsdGlQb2ludGVyU2NhbGVCZWhh
dmlvciAqLyAiLi9CZWhhdmlvcnMvTWVzaGVzL211bHRpUG9pbnRlclNjYWxlQmVoYXZpb3IudHMi
KTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX211bHRpUG9pbnRlclNjYWxlQmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9wb2ludGVyRHJhZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvaW50ZXJEcmFnQmVoYXZpb3Ig
Ki8gIi4vQmVoYXZpb3JzL01lc2hlcy9wb2ludGVyRHJhZ0JlaGF2aW9yLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlBvaW50ZXJEcmFnQmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wb2lu
dGVyRHJhZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBvaW50ZXJEcmFn
QmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2l4RG9mRHJhZ0Jl
aGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL3NpeERvZkRyYWdCZWhhdmlvciAqLyAiLi9CZWhhdmlvcnMvTWVzaGVzL3NpeERvZkRy
YWdCZWhhdmlvci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaXhEb2ZEcmFnQmVoYXZpb3IiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9zaXhEb2ZEcmFnQmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siU2l4RG9mRHJhZ0JlaGF2aW9yIl07IH0pOworCisKKworCisKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9CZWhhdmlvcnMvTWVzaGVzL211bHRpUG9pbnRlclNjYWxlQmVo
YXZpb3IudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vQmVoYXZpb3JzL01lc2hlcy9tdWx0aVBvaW50ZXJT
Y2FsZUJlaGF2aW9yLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTXVsdGlQb2lu
dGVyU2NhbGVCZWhhdmlvciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJN
dWx0aVBvaW50ZXJTY2FsZUJlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNdWx0aVBvaW50
ZXJTY2FsZUJlaGF2aW9yOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9pbnRlckRy
YWdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9wb2ludGVyRHJhZ0JlaGF2aW9yICovICIuL0JlaGF2aW9ycy9NZXNoZXMvcG9p
bnRlckRyYWdCZWhhdmlvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3Iu
dHMiKTsKKworCisvKioKKyAqIEEgYmVoYXZpb3IgdGhhdCB3aGVuIGF0dGFjaGVkIHRvIGEgbWVz
aCB3aWxsIGFsbG93IHRoZSBtZXNoIHRvIGJlIHNjYWxlZAorICovCit2YXIgTXVsdGlQb2ludGVy
U2NhbGVCZWhhdmlvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAg
ICAgKiBJbnN0YW50aWF0ZSBhIG5ldyBiZWhhdmlvciB0aGF0IHdoZW4gYXR0YWNoZWQgdG8gYSBt
ZXNoIHdpbGwgYWxsb3cgdGhlIG1lc2ggdG8gYmUgc2NhbGVkCisgICAgICovCisgICAgZnVuY3Rp
b24gTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvcigpIHsKKyAgICAgICAgdGhpcy5fc3RhcnREaXN0
YW5jZSA9IDA7CisgICAgICAgIHRoaXMuX2luaXRpYWxTY2FsZSA9IG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAsIDAsIDApOwor
ICAgICAgICB0aGlzLl90YXJnZXRTY2FsZSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAgICAgICB0aGlz
Ll9zY2VuZVJlbmRlck9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZHJhZ0JlaGF2aW9y
QSA9IG5ldyBfcG9pbnRlckRyYWdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQb2ludGVyRHJhZ0JlaGF2aW9yIl0oe30pOworICAgICAgICB0aGlzLl9kcmFnQmVoYXZpb3JB
Lm1vdmVBdHRhY2hlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9kcmFnQmVoYXZpb3JCID0gbmV3
IF9wb2ludGVyRHJhZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50
ZXJEcmFnQmVoYXZpb3IiXSh7fSk7CisgICAgICAgIHRoaXMuX2RyYWdCZWhhdmlvckIubW92ZUF0
dGFjaGVkID0gZmFsc2U7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdWx0aVBv
aW50ZXJTY2FsZUJlaGF2aW9yLnByb3RvdHlwZSwgIm5hbWUiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiAgVGhlIG5hbWUgb2YgdGhlIGJlaGF2aW9yCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAiTXVsdGlQb2ludGVyU2NhbGUi
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiAgSW5pdGlhbGl6ZXMgdGhlIGJl
aGF2aW9yCisgICAgICovCisgICAgTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvci5wcm90b3R5cGUu
aW5pdCA9IGZ1bmN0aW9uICgpIHsgfTsKKyAgICBNdWx0aVBvaW50ZXJTY2FsZUJlaGF2aW9yLnBy
b3RvdHlwZS5fZ2V0Q3VycmVudERpc3RhbmNlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fZHJhZ0JlaGF2aW9yQS5sYXN0RHJhZ1Bvc2l0aW9uLnN1YnRyYWN0KHRoaXMuX2Ry
YWdCZWhhdmlvckIubGFzdERyYWdQb3NpdGlvbikubGVuZ3RoKCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBBdHRhY2hlcyB0aGUgc2NhbGUgYmVoYXZpb3IgdGhlIHBhc3NlZCBpbiBtZXNoCisg
ICAgICogQHBhcmFtIG93bmVyTm9kZSBUaGUgbWVzaCB0aGF0IHdpbGwgYmUgc2NhbGVkIGFyb3Vu
ZCBvbmNlIGF0dGFjaGVkCisgICAgICovCisgICAgTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvci5w
cm90b3R5cGUuYXR0YWNoID0gZnVuY3Rpb24gKG93bmVyTm9kZSkgeworICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICB0aGlzLl9vd25lck5vZGUgPSBvd25lck5vZGU7CisgICAgICAg
IC8vIENyZWF0ZSAyIGRyYWcgYmVoYXZpb3JzIHN1Y2ggdGhhdCBlYWNoIHdpbGwgb25seSBiZSB0
cmlnZ2VyZWQgYnkgYSBzZXBhcmF0ZSBwb2ludGVyCisgICAgICAgIHRoaXMuX2RyYWdCZWhhdmlv
ckEub25EcmFnU3RhcnRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAg
aWYgKF90aGlzLl9kcmFnQmVoYXZpb3JBLmRyYWdnaW5nICYmIF90aGlzLl9kcmFnQmVoYXZpb3JC
LmRyYWdnaW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9kcmFnQmVoYXZpb3JBLmN1
cnJlbnREcmFnZ2luZ1BvaW50ZXJJRCA9PSBfdGhpcy5fZHJhZ0JlaGF2aW9yQi5jdXJyZW50RHJh
Z2dpbmdQb2ludGVySUQpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2RyYWdCZWhhdmlv
ckEucmVsZWFzZURyYWcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9pbml0aWFsU2NhbGUuY29weUZyb20ob3du
ZXJOb2RlLnNjYWxpbmcpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3RhcnREaXN0YW5j
ZSA9IF90aGlzLl9nZXRDdXJyZW50RGlzdGFuY2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9kcmFnQmVoYXZpb3JCLm9uRHJh
Z1N0YXJ0T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGlmIChfdGhp
cy5fZHJhZ0JlaGF2aW9yQS5kcmFnZ2luZyAmJiBfdGhpcy5fZHJhZ0JlaGF2aW9yQi5kcmFnZ2lu
ZykgeworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fZHJhZ0JlaGF2aW9yQS5jdXJyZW50RHJh
Z2dpbmdQb2ludGVySUQgPT0gX3RoaXMuX2RyYWdCZWhhdmlvckIuY3VycmVudERyYWdnaW5nUG9p
bnRlcklEKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9kcmFnQmVoYXZpb3JCLnJlbGVh
c2VEcmFnKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5faW5pdGlhbFNjYWxlLmNvcHlGcm9tKG93bmVyTm9kZS5z
Y2FsaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N0YXJ0RGlzdGFuY2UgPSBfdGhp
cy5fZ2V0Q3VycmVudERpc3RhbmNlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICAgICAgLy8gT25jZSBib3RoIGRyYWcgYmVoYXZpb3JzIGFyZSBh
Y3RpdmUgc2NhbGUgYmFzZWQgb24gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBwb2ludGVy
cworICAgICAgICBbdGhpcy5fZHJhZ0JlaGF2aW9yQSwgdGhpcy5fZHJhZ0JlaGF2aW9yQl0uZm9y
RWFjaChmdW5jdGlvbiAoYmVoYXZpb3IpIHsKKyAgICAgICAgICAgIGJlaGF2aW9yLm9uRHJhZ09i
c2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2Ry
YWdCZWhhdmlvckEuZHJhZ2dpbmcgJiYgX3RoaXMuX2RyYWdCZWhhdmlvckIuZHJhZ2dpbmcpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHJhdGlvID0gX3RoaXMuX2dldEN1cnJlbnREaXN0YW5j
ZSgpIC8gX3RoaXMuX3N0YXJ0RGlzdGFuY2U7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9p
bml0aWFsU2NhbGUuc2NhbGVUb1JlZihyYXRpbywgX3RoaXMuX3RhcmdldFNjYWxlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIG93bmVy
Tm9kZS5hZGRCZWhhdmlvcih0aGlzLl9kcmFnQmVoYXZpb3JBKTsKKyAgICAgICAgb3duZXJOb2Rl
LmFkZEJlaGF2aW9yKHRoaXMuX2RyYWdCZWhhdmlvckIpOworICAgICAgICAvLyBPbiBldmVyeSBm
cmFtZSBtb3ZlIHRvd2FyZHMgdGFyZ2V0IHNjYWxpbmcgdG8gYXZvaWQgaml0dGVyIGNhdXNlZCBi
eSB2ciBjb250cm9sbGVycworICAgICAgICB0aGlzLl9zY2VuZVJlbmRlck9ic2VydmVyID0gb3du
ZXJOb2RlLmdldFNjZW5lKCkub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuX2RyYWdCZWhhdmlvckEuZHJhZ2dpbmcgJiYgX3Ro
aXMuX2RyYWdCZWhhdmlvckIuZHJhZ2dpbmcpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hhbmdl
ID0gX3RoaXMuX3RhcmdldFNjYWxlLnN1YnRyYWN0KG93bmVyTm9kZS5zY2FsaW5nKS5zY2FsZUlu
UGxhY2UoMC4xKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hhbmdlLmxlbmd0aCgpID4gMC4wMSkg
eworICAgICAgICAgICAgICAgICAgICBvd25lck5vZGUuc2NhbGluZy5hZGRJblBsYWNlKGNoYW5n
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqICBEZXRhY2hlcyB0aGUgYmVoYXZpb3IgZnJvbSB0aGUgbWVzaAor
ICAgICAqLworICAgIE11bHRpUG9pbnRlclNjYWxlQmVoYXZpb3IucHJvdG90eXBlLmRldGFjaCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5f
b3duZXJOb2RlLmdldFNjZW5lKCkub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlz
Ll9zY2VuZVJlbmRlck9ic2VydmVyKTsKKyAgICAgICAgW3RoaXMuX2RyYWdCZWhhdmlvckEsIHRo
aXMuX2RyYWdCZWhhdmlvckJdLmZvckVhY2goZnVuY3Rpb24gKGJlaGF2aW9yKSB7CisgICAgICAg
ICAgICBiZWhhdmlvci5vbkRyYWdTdGFydE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgICAg
IGJlaGF2aW9yLm9uRHJhZ09ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgICAgIF90aGlzLl9v
d25lck5vZGUucmVtb3ZlQmVoYXZpb3IoYmVoYXZpb3IpOworICAgICAgICB9KTsKKyAgICB9Owor
ICAgIHJldHVybiBNdWx0aVBvaW50ZXJTY2FsZUJlaGF2aW9yOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9CZWhhdmlvcnMvTWVzaGVzL3BvaW50ZXJEcmFnQmVoYXZpb3IudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vQmVoYXZpb3JzL01lc2hlcy9wb2ludGVyRHJhZ0JlaGF2aW9yLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogUG9pbnRlckRyYWdCZWhhdmlvciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJQb2ludGVyRHJhZ0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBQb2ludGVyRHJhZ0JlaGF2aW9yOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2Jz
ZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhz
L21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0V2ZW50c19wb2lu
dGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9FdmVudHMvcG9pbnRlckV2ZW50cyAqLyAiLi9FdmVudHMvcG9pbnRlckV2
ZW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DdWxsaW5nX3JheV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ3Vs
bGluZy9yYXkgKi8gIi4vQ3VsbGluZy9yYXkudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19waXZvdFRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3Bpdm90VG9vbHMgKi8gIi4vTWlzYy9waXZvdFRv
b2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWlsZGVyc19wbGFu
ZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uLy4uL01lc2hlcy9CdWlsZGVycy9wbGFuZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1
aWxkZXJzL3BsYW5lQnVpbGRlci50cyIpOworCisKKworCisKKworCisKKy8qKgorICogQSBiZWhh
dmlvciB0aGF0IHdoZW4gYXR0YWNoZWQgdG8gYSBtZXNoIHdpbGwgYWxsb3cgdGhlIG1lc2ggdG8g
YmUgZHJhZ2dlZCBhcm91bmQgdGhlIHNjcmVlbiBiYXNlZCBvbiBwb2ludGVyIGV2ZW50cworICov
Cit2YXIgUG9pbnRlckRyYWdCZWhhdmlvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcG9pbnRlciBkcmFnIGJlaGF2aW9yIHRoYXQgY2Fu
IGJlIGF0dGFjaGVkIHRvIGEgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBkcmFnIGF4
aXMgb3Igbm9ybWFsIG9mIHRoZSBwbGFuZSB0aGF0IHdpbGwgYmUgZHJhZ2dlZCBhY3Jvc3MuIElm
IG5vIG9wdGlvbnMgYXJlIHNwZWNpZmllZCB0aGUgZHJhZyBwbGFuZSB3aWxsIGFsd2F5cyBmYWNl
IHRoZSByYXkncyBvcmlnaW4gKGVnLiBjYW1lcmEpCisgICAgICovCisgICAgZnVuY3Rpb24gUG9p
bnRlckRyYWdCZWhhdmlvcihvcHRpb25zKSB7CisgICAgICAgIHRoaXMuX3VzZUFsdGVybmF0ZVBp
Y2tlZFBvaW50QWJvdmVNYXhEcmFnQW5nbGVEcmFnU3BlZWQgPSAtMS4xOworICAgICAgICAvKioK
KyAgICAgICAgICogVGhlIG1heGltdW0gdG9sZXJhdGVkIGFuZ2xlIGJldHdlZW4gdGhlIGRyYWcg
cGxhbmUgYW5kIGRyYWdnaW5nIHBvaW50ZXIgcmF5cyB0byB0cmlnZ2VyIHBvaW50ZXIgZXZlbnRz
LiBTZXQgdG8gMCB0byBhbGxvdyBhbnkgYW5nbGUgKGRlZmF1bHQ6IDApCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLm1heERyYWdBbmdsZSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBA
aGlkZGVuCisgICAgICAgICAqLworICAgICAgICB0aGlzLl91c2VBbHRlcm5hdGVQaWNrZWRQb2lu
dEFib3ZlTWF4RHJhZ0FuZ2xlID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
aWQgb2YgdGhlIHBvaW50ZXIgdGhhdCBpcyBjdXJyZW50bHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUg
YmVoYXZpb3IgKC0xIHdoZW4gbm8gcG9pbnRlciBpcyBhY3RpdmUpCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ1BvaW50ZXJJRCA9IC0xOworICAgICAgICAvKioKKyAg
ICAgICAgICogSWYgdGhlIGJlaGF2aW9yIGlzIGN1cnJlbnRseSBpbiBhIGRyYWdnaW5nIHN0YXRl
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBUaGUgZGlzdGFuY2UgdG93YXJkcyB0aGUgdGFyZ2V0IGRyYWcgcG9zaXRp
b24gdG8gbW92ZSBlYWNoIGZyYW1lLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gYXZvaWQgaml0dGVy
LiBTZXQgdGhpcyB0byAxIGZvciBubyBkZWxheS4gKERlZmF1bHQ6IDAuMikKKyAgICAgICAgICov
CisgICAgICAgIHRoaXMuZHJhZ0RlbHRhUmF0aW8gPSAwLjI7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBJZiB0aGUgZHJhZyBwbGFuZSBvcmllbnRhdGlvbiBzaG91bGQgYmUgdXBkYXRlZCBkdXJp
bmcgdGhlIGRyYWdnaW5nIChEZWZhdWx0OiB0cnVlKQorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy51cGRhdGVEcmFnUGxhbmUgPSB0cnVlOworICAgICAgICAvLyBEZWJ1ZyBtb2RlIHdpbGwgZGlz
cGxheSBkcmFnIHBsYW5lcyB0byBoZWxwIHZpc3VhbGl6ZSBiZWhhdmlvcgorICAgICAgICB0aGlz
Ll9kZWJ1Z01vZGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbW92aW5nID0gZmFsc2U7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiAgRmlyZXMgZWFjaCB0aW1lIHRoZSBhdHRhY2hlZCBtZXNoIGlz
IGRyYWdnZWQgd2l0aCB0aGUgcG9pbnRlcgorICAgICAgICAgKiAgKiBkZWx0YSBiZXR3ZWVuIGxh
c3QgZHJhZyBwb3NpdGlvbiBhbmQgY3VycmVudCBkcmFnIHBvc2l0aW9uIGluIHdvcmxkIHNwYWNl
CisgICAgICAgICAqICAqIGRyYWdEaXN0YW5jZSBhbG9uZyB0aGUgZHJhZyBheGlzCisgICAgICAg
ICAqICAqIGRyYWdQbGFuZU5vcm1hbCBub3JtYWwgb2YgdGhlIGN1cnJlbnQgZHJhZyBwbGFuZSB1
c2VkIGR1cmluZyB0aGUgZHJhZworICAgICAgICAgKiAgKiBkcmFnUGxhbmVQb2ludCBpbiB3b3Js
ZCBzcGFjZSB3aGVyZSB0aGUgZHJhZyBpbnRlcnNlY3RzIHRoZSBkcmFnIHBsYW5lCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLm9uRHJhZ09ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJs
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqICBGaXJlcyBlYWNoIHRpbWUgYSBkcmFnIGJlZ2lucyAoZWcuIG1vdXNl
IGRvd24gb24gbWVzaCkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25EcmFnU3RhcnRPYnNl
cnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiAgRmlyZXMgZWFjaCB0
aW1lIGEgZHJhZyBlbmRzIChlZy4gbW91c2UgcmVsZWFzZSBhZnRlciBkcmFnKQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5vbkRyYWdFbmRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFi
bGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiAgSWYgdGhlIGF0dGFjaGVkIG1lc2ggc2hvdWxkIGJlIG1vdmVkIHdo
ZW4gZHJhZ2dlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tb3ZlQXR0YWNoZWQgPSB0cnVl
OworICAgICAgICAvKioKKyAgICAgICAgICogIElmIHRoZSBkcmFnIGJlaGF2aW9yIHdpbGwgcmVh
Y3QgdG8gZHJhZyBldmVudHMgKERlZmF1bHQ6IHRydWUpCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmVuYWJsZWQgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgcG9pbnRlciBl
dmVudHMgc2hvdWxkIHN0YXJ0IGFuZCByZWxlYXNlIHRoZSBkcmFnIChEZWZhdWx0OiB0cnVlKQor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zdGFydEFuZFJlbGVhc2VEcmFnT25Qb2ludGVyRXZl
bnRzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIGNhbWVyYSBjb250cm9scyBz
aG91bGQgYmUgZGV0YWNoZWQgZHVyaW5nIHRoZSBkcmFnCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmRldGFjaENhbWVyYUNvbnRyb2xzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IElmIHNldCwgdGhlIGRyYWcgcGxhbmUvYXhpcyB3aWxsIGJlIHJvdGF0ZWQgYmFzZWQgb24gdGhl
IGF0dGFjaGVkIG1lc2gncyB3b3JsZCByb3RhdGlvbiAoRGVmYXVsdDogdHJ1ZSkKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMudXNlT2JqZWN0T3JpZW5hdGlvbkZvckRyYWdnaW5nID0gdHJ1ZTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFByZWRpY2F0ZSB0byBkZXRlcm1pbmUgaWYgaXQgaXMg
dmFsaWQgdG8gbW92ZSB0aGUgb2JqZWN0IHRvIGEgbmV3IHBvc2l0aW9uIHdoZW4gaXQgaXMgbW92
ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudmFsaWRhdGVEcmFnID0gZnVuY3Rpb24gKHRh
cmdldFBvc2l0aW9uKSB7IHJldHVybiB0cnVlOyB9OworICAgICAgICB0aGlzLl90bXBWZWN0b3Ig
PSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
Y3RvcjMiXSgwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fYWx0ZXJuYXRlUGlja2VkUG9pbnQgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXSgwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fd29ybGREcmFnQXhpcyA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAs
IDApOworICAgICAgICB0aGlzLl90YXJnZXRQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAg
ICAgICB0aGlzLl9hdHRhY2hlZEVsZW1lbnQgPSBudWxsOworICAgICAgICB0aGlzLl9zdGFydERy
YWdSYXkgPSBuZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlJh
eSJdKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdKCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdKCkpOworICAgICAgICB0aGlzLl9sYXN0UG9pbnRlclJheSA9IHt9
OworICAgICAgICB0aGlzLl9kcmFnRGVsdGEgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgpOworICAgICAgICAvLyBWYXJpYWJs
ZXMgdG8gYXZvaWQgaW5zdGFudGlhdGlvbiBpbiB0aGUgYmVsb3cgbWV0aG9kCisgICAgICAgIHRo
aXMuX3BvaW50QSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAgICAgICB0aGlzLl9wb2ludEIgPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMi
XSgwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fcG9pbnRDID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMCwgMCk7CisgICAg
ICAgIHRoaXMuX2xpbmVBID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMCwgMCk7CisgICAgICAgIHRoaXMuX2xpbmVCID0g
bmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0
b3IzIl0oMCwgMCwgMCk7CisgICAgICAgIHRoaXMuX2xvY2FsQXhpcyA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDAp
OworICAgICAgICB0aGlzLl9sb29rQXQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5f
b3B0aW9ucyA9IG9wdGlvbnMgPyBvcHRpb25zIDoge307CisgICAgICAgIHZhciBvcHRpb25Db3Vu
dCA9IDA7CisgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmRyYWdBeGlzKSB7CisgICAgICAgICAg
ICBvcHRpb25Db3VudCsrOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmRy
YWdQbGFuZU5vcm1hbCkgeworICAgICAgICAgICAgb3B0aW9uQ291bnQrKzsKKyAgICAgICAgfQor
ICAgICAgICBpZiAob3B0aW9uQ291bnQgPiAxKSB7CisgICAgICAgICAgICB0aHJvdyAiTXVsdGlw
bGUgZHJhZyBtb2RlcyBzcGVjaWZpZWQgaW4gZHJhZ0JlaGF2aW9yIG9wdGlvbnMuIE9ubHkgb25l
IGV4cGVjdGVkIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
UG9pbnRlckRyYWdCZWhhdmlvci5wcm90b3R5cGUsICJuYW1lIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogIFRoZSBuYW1lIG9mIHRoZSBiZWhhdmlvcgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gIlBvaW50ZXJEcmFnIjsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogIEluaXRpYWxpemVzIHRoZSBiZWhhdmlv
cgorICAgICAqLworICAgIFBvaW50ZXJEcmFnQmVoYXZpb3IucHJvdG90eXBlLmluaXQgPSBmdW5j
dGlvbiAoKSB7IH07CisgICAgLyoqCisgICAgICogQXR0YWNoZXMgdGhlIGRyYWcgYmVoYXZpb3Ig
dGhlIHBhc3NlZCBpbiBtZXNoCisgICAgICogQHBhcmFtIG93bmVyTm9kZSBUaGUgbWVzaCB0aGF0
IHdpbGwgYmUgZHJhZ2dlZCBhcm91bmQgb25jZSBhdHRhY2hlZAorICAgICAqIEBwYXJhbSBwcmVk
aWNhdGUgUHJlZGljYXRlIHRvIHVzZSBmb3IgcGljayBmaWx0ZXJpbmcKKyAgICAgKi8KKyAgICBQ
b2ludGVyRHJhZ0JlaGF2aW9yLnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiAob3duZXJOb2Rl
LCBwcmVkaWNhdGUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5f
c2NlbmUgPSBvd25lck5vZGUuZ2V0U2NlbmUoKTsKKyAgICAgICAgdGhpcy5hdHRhY2hlZE5vZGUg
PSBvd25lck5vZGU7CisgICAgICAgIC8vIEluaXRpYWxpemUgZHJhZyBwbGFuZSB0byBub3QgaW50
ZXJmZXJlIHdpdGggZXhpc3Rpbmcgc2NlbmUKKyAgICAgICAgaWYgKCFQb2ludGVyRHJhZ0JlaGF2
aW9yLl9wbGFuZVNjZW5lKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fZGVidWdNb2RlKSB7Cisg
ICAgICAgICAgICAgICAgUG9pbnRlckRyYWdCZWhhdmlvci5fcGxhbmVTY2VuZSA9IHRoaXMuX3Nj
ZW5lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
UG9pbnRlckRyYWdCZWhhdmlvci5fcGxhbmVTY2VuZSA9IG5ldyBfc2NlbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siU2NlbmUiXSh0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwgeyB2aXJ0
dWFsOiB0cnVlIH0pOworICAgICAgICAgICAgICAgIFBvaW50ZXJEcmFnQmVoYXZpb3IuX3BsYW5l
U2NlbmUuZGV0YWNoQ29udHJvbCgpOworICAgICAgICAgICAgICAgIHRoaXMuX3NjZW5lLm9uRGlz
cG9zZU9ic2VydmFibGUuYWRkT25jZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAg
IFBvaW50ZXJEcmFnQmVoYXZpb3IuX3BsYW5lU2NlbmUuZGlzcG9zZSgpOworICAgICAgICAgICAg
ICAgICAgICBQb2ludGVyRHJhZ0JlaGF2aW9yLl9wbGFuZVNjZW5lID0gbnVsbDsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9kcmFn
UGxhbmUgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJd
LkNyZWF0ZVBsYW5lKCJwb2ludGVyRHJhZ1BsYW5lIiwgdGhpcy5fZGVidWdNb2RlID8gMSA6IDEw
MDAwLCBQb2ludGVyRHJhZ0JlaGF2aW9yLl9wbGFuZVNjZW5lLCBmYWxzZSwgX01lc2hlc19tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5ET1VCTEVTSURFKTsKKyAgICAg
ICAgLy8gU3RhdGUgb2YgdGhlIGRyYWcKKyAgICAgICAgdGhpcy5sYXN0RHJhZ1Bvc2l0aW9uID0g
bmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0
b3IzIl0oMCwgMCwgMCk7CisgICAgICAgIHZhciBwaWNrUHJlZGljYXRlID0gISFwcmVkaWNhdGUg
PyBwcmVkaWNhdGUgOiBmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgcmV0dXJuIF90aGlzLmF0
dGFjaGVkTm9kZSA9PSBtIHx8IG0uaXNEZXNjZW5kYW50T2YoX3RoaXMuYXR0YWNoZWROb2RlKTsK
KyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fcG9pbnRlck9ic2VydmVyID0gdGhpcy5fc2NlbmUu
b25Qb2ludGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHBvaW50ZXJJbmZvLCBldmVudFN0YXRl
KSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLmVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9pbnRlckluZm8udHlwZSA9
PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUG9p
bnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9XTikgeworICAgICAgICAgICAgICAgIGlmIChfdGhp
cy5zdGFydEFuZFJlbGVhc2VEcmFnT25Qb2ludGVyRXZlbnRzICYmICFfdGhpcy5kcmFnZ2luZyAm
JiBwb2ludGVySW5mby5waWNrSW5mbyAmJiBwb2ludGVySW5mby5waWNrSW5mby5oaXQgJiYgcG9p
bnRlckluZm8ucGlja0luZm8ucGlja2VkTWVzaCAmJiBwb2ludGVySW5mby5waWNrSW5mby5waWNr
ZWRQb2ludCAmJiBwb2ludGVySW5mby5waWNrSW5mby5yYXkgJiYgcGlja1ByZWRpY2F0ZShwb2lu
dGVySW5mby5waWNrSW5mby5waWNrZWRNZXNoKSkgeworICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fc3RhcnREcmFnKHBvaW50ZXJJbmZvLmV2ZW50LnBvaW50ZXJJZCwgcG9pbnRlckluZm8ucGlj
a0luZm8ucmF5LCBwb2ludGVySW5mby5waWNrSW5mby5waWNrZWRQb2ludCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocG9pbnRlckluZm8u
dHlwZSA9PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSVVApIHsKKyAgICAgICAgICAgICAgICBpZiAo
X3RoaXMuc3RhcnRBbmRSZWxlYXNlRHJhZ09uUG9pbnRlckV2ZW50cyAmJiBfdGhpcy5jdXJyZW50
RHJhZ2dpbmdQb2ludGVySUQgPT0gcG9pbnRlckluZm8uZXZlbnQucG9pbnRlcklkKSB7CisgICAg
ICAgICAgICAgICAgICAgIF90aGlzLnJlbGVhc2VEcmFnKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocG9pbnRlckluZm8udHlwZSA9PSBf
RXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUG9pbnRl
ckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRSkgeworICAgICAgICAgICAgICAgIHZhciBwb2ludGVy
SWQgPSBwb2ludGVySW5mby5ldmVudC5wb2ludGVySWQ7CisgICAgICAgICAgICAgICAgLy8gSWYg
ZHJhZyB3YXMgc3RhcnRlZCB3aXRoIGFueU1vdXNlSUQgc3BlY2lmaWVkLCBzZXQgcG9pbnRlcklE
IHRvIHRoZSBuZXh0IG1vdXNlIHRoYXQgbW92ZWQKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMu
Y3VycmVudERyYWdnaW5nUG9pbnRlcklEID09PSBQb2ludGVyRHJhZ0JlaGF2aW9yLl9BbnlNb3Vz
ZUlEICYmIHBvaW50ZXJJZCAhPT0gUG9pbnRlckRyYWdCZWhhdmlvci5fQW55TW91c2VJRCAmJiBw
b2ludGVySW5mby5ldmVudC5wb2ludGVyVHlwZSA9PSAibW91c2UiKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChfdGhpcy5fbGFzdFBvaW50ZXJSYXlbX3RoaXMuY3VycmVudERyYWdnaW5nUG9p
bnRlcklEXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2xhc3RQb2ludGVyUmF5
W3BvaW50ZXJJZF0gPSBfdGhpcy5fbGFzdFBvaW50ZXJSYXlbX3RoaXMuY3VycmVudERyYWdnaW5n
UG9pbnRlcklEXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBfdGhpcy5fbGFzdFBv
aW50ZXJSYXlbX3RoaXMuY3VycmVudERyYWdnaW5nUG9pbnRlcklEXTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50RHJhZ2dpbmdQb2ludGVy
SUQgPSBwb2ludGVySWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEtl
ZXAgdHJhY2sgb2YgbGFzdCBwb2ludGVyIHJheSwgdGhpcyBpcyB1c2VkIHNpbXVsYXRpbmcgdGhl
IHN0YXJ0IG9mIGEgZHJhZyBpbiBzdGFydERyYWcoKQorICAgICAgICAgICAgICAgIGlmICghX3Ro
aXMuX2xhc3RQb2ludGVyUmF5W3BvaW50ZXJJZF0pIHsKKyAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuX2xhc3RQb2ludGVyUmF5W3BvaW50ZXJJZF0gPSBuZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlJheSJdKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocG9pbnRlckluZm8ucGlja0luZm8gJiYgcG9p
bnRlckluZm8ucGlja0luZm8ucmF5KSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9sYXN0
UG9pbnRlclJheVtwb2ludGVySWRdLm9yaWdpbi5jb3B5RnJvbShwb2ludGVySW5mby5waWNrSW5m
by5yYXkub3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2xhc3RQb2ludGVyUmF5
W3BvaW50ZXJJZF0uZGlyZWN0aW9uLmNvcHlGcm9tKHBvaW50ZXJJbmZvLnBpY2tJbmZvLnJheS5k
aXJlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY3VycmVudERyYWdnaW5n
UG9pbnRlcklEID09IHBvaW50ZXJJZCAmJiBfdGhpcy5kcmFnZ2luZykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgX3RoaXMuX21vdmVEcmFnKHBvaW50ZXJJbmZvLnBpY2tJbmZvLnJheSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0pOworICAgICAgICB0aGlzLl9iZWZvcmVSZW5kZXJPYnNlcnZlciA9IHRoaXMuX3Nj
ZW5lLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgaWYgKF90aGlzLl9tb3ZpbmcgJiYgX3RoaXMubW92ZUF0dGFjaGVkKSB7CisgICAgICAgICAg
ICAgICAgX01pc2NfcGl2b3RUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQaXZv
dFRvb2xzIl0uX1JlbW92ZUFuZFN0b3JlUGl2b3RQb2ludChfdGhpcy5hdHRhY2hlZE5vZGUpOwor
ICAgICAgICAgICAgICAgIC8vIFNsb3dseSBtb3ZlIG1lc2ggdG8gYXZvaWQgaml0dGVyCisgICAg
ICAgICAgICAgICAgX3RoaXMuX3RhcmdldFBvc2l0aW9uLnN1YnRyYWN0VG9SZWYoKF90aGlzLmF0
dGFjaGVkTm9kZSkuYWJzb2x1dGVQb3NpdGlvbiwgX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAg
ICAgICAgICAgX3RoaXMuX3RtcFZlY3Rvci5zY2FsZUluUGxhY2UoX3RoaXMuZHJhZ0RlbHRhUmF0
aW8pOworICAgICAgICAgICAgICAgIChfdGhpcy5hdHRhY2hlZE5vZGUpLmdldEFic29sdXRlUG9z
aXRpb24oKS5hZGRUb1JlZihfdGhpcy5fdG1wVmVjdG9yLCBfdGhpcy5fdG1wVmVjdG9yKTsKKyAg
ICAgICAgICAgICAgICBpZiAoX3RoaXMudmFsaWRhdGVEcmFnKF90aGlzLl90bXBWZWN0b3IpKSB7
CisgICAgICAgICAgICAgICAgICAgIChfdGhpcy5hdHRhY2hlZE5vZGUpLnNldEFic29sdXRlUG9z
aXRpb24oX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIF9NaXNjX3Bpdm90VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUGl2b3RU
b29scyJdLl9SZXN0b3JlUGl2b3RQb2ludChfdGhpcy5hdHRhY2hlZE5vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEZvcmNlIHJlbGFzZSB0
aGUgZHJhZyBhY3Rpb24gYnkgY29kZS4KKyAgICAgKi8KKyAgICBQb2ludGVyRHJhZ0JlaGF2aW9y
LnByb3RvdHlwZS5yZWxlYXNlRHJhZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5kcmFn
Z2luZyA9IGZhbHNlOworICAgICAgICB0aGlzLm9uRHJhZ0VuZE9ic2VydmFibGUubm90aWZ5T2Jz
ZXJ2ZXJzKHsgZHJhZ1BsYW5lUG9pbnQ6IHRoaXMubGFzdERyYWdQb3NpdGlvbiwgcG9pbnRlcklk
OiB0aGlzLmN1cnJlbnREcmFnZ2luZ1BvaW50ZXJJRCB9KTsKKyAgICAgICAgdGhpcy5jdXJyZW50
RHJhZ2dpbmdQb2ludGVySUQgPSAtMTsKKyAgICAgICAgdGhpcy5fbW92aW5nID0gZmFsc2U7Cisg
ICAgICAgIC8vIFJlYXR0YWNoIGNhbWVyYSBjb250cm9scworICAgICAgICBpZiAodGhpcy5kZXRh
Y2hDYW1lcmFDb250cm9scyAmJiB0aGlzLl9hdHRhY2hlZEVsZW1lbnQgJiYgdGhpcy5fc2NlbmUu
YWN0aXZlQ2FtZXJhICYmICF0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEubGVmdENhbWVyYSkgewor
ICAgICAgICAgICAgdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLmF0dGFjaENvbnRyb2wodGhpcy5f
YXR0YWNoZWRFbGVtZW50LCB0cnVlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogU2ltdWxhdGVzIHRoZSBzdGFydCBvZiBhIHBvaW50ZXIgZHJhZyBldmVudCBvbiB0aGUgYmVo
YXZpb3IKKyAgICAgKiBAcGFyYW0gcG9pbnRlcklkIHBvaW50ZXJJRCBvZiB0aGUgcG9pbnRlciB0
aGF0IHNob3VsZCBiZSBzaW11bGF0ZWQgKERlZmF1bHQ6IEFueSBtb3VzZSBwb2ludGVyIElEKQor
ICAgICAqIEBwYXJhbSBmcm9tUmF5IGluaXRpYWwgcmF5IG9mIHRoZSBwb2ludGVyIHRvIGJlIHNp
bXVsYXRlZCAoRGVmYXVsdDogUmF5IGZyb20gY2FtZXJhIHRvIGF0dGFjaGVkIG1lc2gpCisgICAg
ICogQHBhcmFtIHN0YXJ0UGlja2VkUG9pbnQgcGlja2VkIHBvaW50IG9mIHRoZSBwb2ludGVyIHRv
IGJlIHNpbXVsYXRlZCAoRGVmYXVsdDogYXR0YWNoZWQgbWVzaCBwb3NpdGlvbikKKyAgICAgKi8K
KyAgICBQb2ludGVyRHJhZ0JlaGF2aW9yLnByb3RvdHlwZS5zdGFydERyYWcgPSBmdW5jdGlvbiAo
cG9pbnRlcklkLCBmcm9tUmF5LCBzdGFydFBpY2tlZFBvaW50KSB7CisgICAgICAgIGlmIChwb2lu
dGVySWQgPT09IHZvaWQgMCkgeyBwb2ludGVySWQgPSBQb2ludGVyRHJhZ0JlaGF2aW9yLl9BbnlN
b3VzZUlEOyB9CisgICAgICAgIHRoaXMuX3N0YXJ0RHJhZyhwb2ludGVySWQsIGZyb21SYXksIHN0
YXJ0UGlja2VkUG9pbnQpOworICAgICAgICB2YXIgbGFzdFJheSA9IHRoaXMuX2xhc3RQb2ludGVy
UmF5W3BvaW50ZXJJZF07CisgICAgICAgIGlmIChwb2ludGVySWQgPT09IFBvaW50ZXJEcmFnQmVo
YXZpb3IuX0FueU1vdXNlSUQpIHsKKyAgICAgICAgICAgIGxhc3RSYXkgPSB0aGlzLl9sYXN0UG9p
bnRlclJheVtPYmplY3Qua2V5cyh0aGlzLl9sYXN0UG9pbnRlclJheSlbMF1dOworICAgICAgICB9
CisgICAgICAgIGlmIChsYXN0UmF5KSB7CisgICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgYSBs
YXN0IHBvaW50ZXIgcmF5IGRyYWcgdGhlIG9iamVjdCB0aGVyZQorICAgICAgICAgICAgdGhpcy5f
bW92ZURyYWcobGFzdFJheSk7CisgICAgICAgIH0KKyAgICB9OworICAgIFBvaW50ZXJEcmFnQmVo
YXZpb3IucHJvdG90eXBlLl9zdGFydERyYWcgPSBmdW5jdGlvbiAocG9pbnRlcklkLCBmcm9tUmF5
LCBzdGFydFBpY2tlZFBvaW50KSB7CisgICAgICAgIGlmICghdGhpcy5fc2NlbmUuYWN0aXZlQ2Ft
ZXJhIHx8IHRoaXMuZHJhZ2dpbmcgfHwgIXRoaXMuYXR0YWNoZWROb2RlKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgX01pc2NfcGl2b3RUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fWyJQaXZvdFRvb2xzIl0uX1JlbW92ZUFuZFN0b3JlUGl2b3RQb2lu
dCh0aGlzLmF0dGFjaGVkTm9kZSk7CisgICAgICAgIC8vIENyZWF0ZSBzdGFydCByYXkgZnJvbSB0
aGUgY2FtZXJhIHRvIHRoZSBvYmplY3QKKyAgICAgICAgaWYgKGZyb21SYXkpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3N0YXJ0RHJhZ1JheS5kaXJlY3Rpb24uY29weUZyb20oZnJvbVJheS5kaXJlY3Rp
b24pOworICAgICAgICAgICAgdGhpcy5fc3RhcnREcmFnUmF5Lm9yaWdpbi5jb3B5RnJvbShmcm9t
UmF5Lm9yaWdpbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlz
Ll9zdGFydERyYWdSYXkub3JpZ2luLmNvcHlGcm9tKHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5w
b3NpdGlvbik7CisgICAgICAgICAgICB0aGlzLmF0dGFjaGVkTm9kZS5nZXRXb3JsZE1hdHJpeCgp
LmdldFRyYW5zbGF0aW9uVG9SZWYodGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAgICAgIHRoaXMu
X3RtcFZlY3Rvci5zdWJ0cmFjdFRvUmVmKHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5wb3NpdGlv
biwgdGhpcy5fc3RhcnREcmFnUmF5LmRpcmVjdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fdXBkYXRlRHJhZ1BsYW5lUG9zaXRpb24odGhpcy5fc3RhcnREcmFnUmF5LCBzdGFydFBpY2tl
ZFBvaW50ID8gc3RhcnRQaWNrZWRQb2ludCA6IHRoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgIHZh
ciBwaWNrZWRQb2ludCA9IHRoaXMuX3BpY2tXaXRoUmF5T25EcmFnUGxhbmUodGhpcy5fc3RhcnRE
cmFnUmF5KTsKKyAgICAgICAgaWYgKHBpY2tlZFBvaW50KSB7CisgICAgICAgICAgICB0aGlzLmRy
YWdnaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuY3VycmVudERyYWdnaW5nUG9pbnRlcklE
ID0gcG9pbnRlcklkOworICAgICAgICAgICAgdGhpcy5sYXN0RHJhZ1Bvc2l0aW9uLmNvcHlGcm9t
KHBpY2tlZFBvaW50KTsKKyAgICAgICAgICAgIHRoaXMub25EcmFnU3RhcnRPYnNlcnZhYmxlLm5v
dGlmeU9ic2VydmVycyh7IGRyYWdQbGFuZVBvaW50OiBwaWNrZWRQb2ludCwgcG9pbnRlcklkOiB0
aGlzLmN1cnJlbnREcmFnZ2luZ1BvaW50ZXJJRCB9KTsKKyAgICAgICAgICAgIHRoaXMuX3Rhcmdl
dFBvc2l0aW9uLmNvcHlGcm9tKCh0aGlzLmF0dGFjaGVkTm9kZSkuYWJzb2x1dGVQb3NpdGlvbik7
CisgICAgICAgICAgICAvLyBEZXRhdGNoIGNhbWVyYSBjb250cm9scworICAgICAgICAgICAgaWYg
KHRoaXMuZGV0YWNoQ2FtZXJhQ29udHJvbHMgJiYgdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhICYm
IHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5pbnB1dHMgJiYgIXRoaXMuX3NjZW5lLmFjdGl2ZUNh
bWVyYS5sZWZ0Q2FtZXJhKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NjZW5lLmFjdGl2
ZUNhbWVyYS5pbnB1dHMuYXR0YWNoZWRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuX2F0dGFjaGVkRWxlbWVudCA9IHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5pbnB1dHMuYXR0
YWNoZWRFbGVtZW50OworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5hY3RpdmVDYW1l
cmEuZGV0YWNoQ29udHJvbCh0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEuaW5wdXRzLmF0dGFjaGVk
RWxlbWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZEVsZW1lbnQgPSBudWxsOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBfTWlzY19waXZvdFRv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBpdm90VG9vbHMiXS5fUmVzdG9yZVBp
dm90UG9pbnQodGhpcy5hdHRhY2hlZE5vZGUpOworICAgIH07CisgICAgUG9pbnRlckRyYWdCZWhh
dmlvci5wcm90b3R5cGUuX21vdmVEcmFnID0gZnVuY3Rpb24gKHJheSkgeworICAgICAgICB0aGlz
Ll9tb3ZpbmcgPSB0cnVlOworICAgICAgICB2YXIgcGlja2VkUG9pbnQgPSB0aGlzLl9waWNrV2l0
aFJheU9uRHJhZ1BsYW5lKHJheSk7CisgICAgICAgIGlmIChwaWNrZWRQb2ludCkgeworICAgICAg
ICAgICAgaWYgKHRoaXMudXBkYXRlRHJhZ1BsYW5lKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
dXBkYXRlRHJhZ1BsYW5lUG9zaXRpb24ocmF5LCBwaWNrZWRQb2ludCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXIgZHJhZ0xlbmd0aCA9IDA7CisgICAgICAgICAgICAvLyBkZXBlbmRp
bmcgb24gdGhlIGRyYWcgbW9kZSBvcHRpb24gZHJhZyBhY2NvcmRpbmdseQorICAgICAgICAgICAg
aWYgKHRoaXMuX29wdGlvbnMuZHJhZ0F4aXMpIHsKKyAgICAgICAgICAgICAgICAvLyBDb252ZXJ0
IGxvY2FsIGRyYWcgYXhpcyB0byB3b3JsZCBpZiB1c2VPYmplY3RPcmllbmF0aW9uRm9yRHJhZ2dp
bmcKKyAgICAgICAgICAgICAgICB0aGlzLnVzZU9iamVjdE9yaWVuYXRpb25Gb3JEcmFnZ2luZyA/
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3Iz
Il0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0aGlzLl9vcHRpb25zLmRyYWdBeGlzLCB0aGlz
LmF0dGFjaGVkTm9kZS5nZXRXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4KCksIHRoaXMu
X3dvcmxkRHJhZ0F4aXMpIDogdGhpcy5fd29ybGREcmFnQXhpcy5jb3B5RnJvbSh0aGlzLl9vcHRp
b25zLmRyYWdBeGlzKTsKKyAgICAgICAgICAgICAgICAvLyBQcm9qZWN0IGRlbHRhIGRyYWcgZnJv
bSB0aGUgZHJhZyBwbGFuZSBvbnRvIHRoZSBkcmFnIGF4aXMKKyAgICAgICAgICAgICAgICBwaWNr
ZWRQb2ludC5zdWJ0cmFjdFRvUmVmKHRoaXMubGFzdERyYWdQb3NpdGlvbiwgdGhpcy5fdG1wVmVj
dG9yKTsKKyAgICAgICAgICAgICAgICBkcmFnTGVuZ3RoID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5Eb3QodGhpcy5fdG1wVmVjdG9y
LCB0aGlzLl93b3JsZERyYWdBeGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLl93b3JsZERyYWdB
eGlzLnNjYWxlVG9SZWYoZHJhZ0xlbmd0aCwgdGhpcy5fZHJhZ0RlbHRhKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRyYWdMZW5ndGggPSB0aGlz
Ll9kcmFnRGVsdGEubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcGlja2VkUG9pbnQuc3VidHJh
Y3RUb1JlZih0aGlzLmxhc3REcmFnUG9zaXRpb24sIHRoaXMuX2RyYWdEZWx0YSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl90YXJnZXRQb3NpdGlvbi5hZGRJblBsYWNlKHRoaXMu
X2RyYWdEZWx0YSk7CisgICAgICAgICAgICB0aGlzLm9uRHJhZ09ic2VydmFibGUubm90aWZ5T2Jz
ZXJ2ZXJzKHsgZHJhZ0Rpc3RhbmNlOiBkcmFnTGVuZ3RoLCBkZWx0YTogdGhpcy5fZHJhZ0RlbHRh
LCBkcmFnUGxhbmVQb2ludDogcGlja2VkUG9pbnQsIGRyYWdQbGFuZU5vcm1hbDogdGhpcy5fZHJh
Z1BsYW5lLmZvcndhcmQsIHBvaW50ZXJJZDogdGhpcy5jdXJyZW50RHJhZ2dpbmdQb2ludGVySUQg
fSk7CisgICAgICAgICAgICB0aGlzLmxhc3REcmFnUG9zaXRpb24uY29weUZyb20ocGlja2VkUG9p
bnQpOworICAgICAgICB9CisgICAgfTsKKyAgICBQb2ludGVyRHJhZ0JlaGF2aW9yLnByb3RvdHlw
ZS5fcGlja1dpdGhSYXlPbkRyYWdQbGFuZSA9IGZ1bmN0aW9uIChyYXkpIHsKKyAgICAgICAgdmFy
IF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKCFyYXkpIHsKKyAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICB9CisgICAgICAgIC8vIENhbGN1bGF0ZSBhbmdsZSBiZXR3ZWVuIHBsYW5l
IG5vcm1hbCBhbmQgcmF5CisgICAgICAgIHZhciBhbmdsZSA9IE1hdGguYWNvcyhfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkRvdCh0aGlz
Ll9kcmFnUGxhbmUuZm9yd2FyZCwgcmF5LmRpcmVjdGlvbikpOworICAgICAgICAvLyBDb3JyZWN0
IGlmIHJheSBpcyBjYXN0ZWQgZnJvbSBvcG9zaXRlIHNpZGUKKyAgICAgICAgaWYgKGFuZ2xlID4g
TWF0aC5QSSAvIDIpIHsKKyAgICAgICAgICAgIGFuZ2xlID0gTWF0aC5QSSAtIGFuZ2xlOworICAg
ICAgICB9CisgICAgICAgIC8vIElmIHRoZSBhbmdsZSBpcyB0b28gcGVycGVuZGljdWxhciB0byB0
aGUgcGxhbmUgcGljayBhbm90aGVyIHBvaW50IG9uIHRoZSBwbGFuZSB3aGVyZSBpdCBpcyBsb29r
aW5nCisgICAgICAgIGlmICh0aGlzLm1heERyYWdBbmdsZSA+IDAgJiYgYW5nbGUgPiB0aGlzLm1h
eERyYWdBbmdsZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3VzZUFsdGVybmF0ZVBpY2tlZFBv
aW50QWJvdmVNYXhEcmFnQW5nbGUpIHsKKyAgICAgICAgICAgICAgICAvLyBJbnZlcnQgcmF5IGRp
cmVjdGlvbiBhbG9uZyB0aGUgdG93YXJkcyBvYmplY3QgYXhpcworICAgICAgICAgICAgICAgIHRo
aXMuX3RtcFZlY3Rvci5jb3B5RnJvbShyYXkuZGlyZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAo
dGhpcy5hdHRhY2hlZE5vZGUpLmFic29sdXRlUG9zaXRpb24uc3VidHJhY3RUb1JlZihyYXkub3Jp
Z2luLCB0aGlzLl9hbHRlcm5hdGVQaWNrZWRQb2ludCk7CisgICAgICAgICAgICAgICAgdGhpcy5f
YWx0ZXJuYXRlUGlja2VkUG9pbnQubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgdGhpcy5f
YWx0ZXJuYXRlUGlja2VkUG9pbnQuc2NhbGVJblBsYWNlKHRoaXMuX3VzZUFsdGVybmF0ZVBpY2tl
ZFBvaW50QWJvdmVNYXhEcmFnQW5nbGVEcmFnU3BlZWQgKiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkRvdCh0aGlzLl9hbHRlcm5hdGVQ
aWNrZWRQb2ludCwgdGhpcy5fdG1wVmVjdG9yKSk7CisgICAgICAgICAgICAgICAgdGhpcy5fdG1w
VmVjdG9yLmFkZEluUGxhY2UodGhpcy5fYWx0ZXJuYXRlUGlja2VkUG9pbnQpOworICAgICAgICAg
ICAgICAgIC8vIFByb2plY3QgcmVzdWx0aW5nIHZlY3RvciBvbnRvIHRoZSBkcmFnIHBsYW5lIGFu
ZCBhZGQgaXQgdG8gdGhlIGF0dGFjaGVkIG5vZGVzIGFic29sdXRlIHBvc2l0aW9uIHRvIGdldCBh
IHBpY2tlZCBwb2ludAorICAgICAgICAgICAgICAgIHZhciBkb3QgPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkRvdCh0aGlzLl9kcmFn
UGxhbmUuZm9yd2FyZCwgdGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9k
cmFnUGxhbmUuZm9yd2FyZC5zY2FsZVRvUmVmKC1kb3QsIHRoaXMuX2FsdGVybmF0ZVBpY2tlZFBv
aW50KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHRlcm5hdGVQaWNrZWRQb2ludC5hZGRJblBs
YWNlKHRoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgdGhpcy5fYWx0ZXJuYXRlUGlj
a2VkUG9pbnQuYWRkSW5QbGFjZSgodGhpcy5hdHRhY2hlZE5vZGUpLmFic29sdXRlUG9zaXRpb24p
OworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbHRlcm5hdGVQaWNrZWRQb2ludDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBwaWNrUmVzdWx0ID0g
UG9pbnRlckRyYWdCZWhhdmlvci5fcGxhbmVTY2VuZS5waWNrV2l0aFJheShyYXksIGZ1bmN0aW9u
IChtKSB7IHJldHVybiBtID09IF90aGlzLl9kcmFnUGxhbmU7IH0pOworICAgICAgICBpZiAocGlj
a1Jlc3VsdCAmJiBwaWNrUmVzdWx0LmhpdCAmJiBwaWNrUmVzdWx0LnBpY2tlZE1lc2ggJiYgcGlj
a1Jlc3VsdC5waWNrZWRQb2ludCkgeworICAgICAgICAgICAgcmV0dXJuIHBpY2tSZXN1bHQucGlj
a2VkUG9pbnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorICAgIH07CisgICAgLy8gUG9zaXRpb24gdGhlIGRyYWcgcGxhbmUg
YmFzZWQgb24gdGhlIGF0dGFjaGVkIG1lc2ggcG9zaXRpb24sIGZvciBzaW5nbGUgYXhpcyByb3Rh
dGUgdGhlIHBsYW5lIGFsb25nIHRoZSBheGlzIHRvIGZhY2UgdGhlIGNhbWVyYQorICAgIFBvaW50
ZXJEcmFnQmVoYXZpb3IucHJvdG90eXBlLl91cGRhdGVEcmFnUGxhbmVQb3NpdGlvbiA9IGZ1bmN0
aW9uIChyYXksIGRyYWdQbGFuZVBvc2l0aW9uKSB7CisgICAgICAgIHRoaXMuX3BvaW50QS5jb3B5
RnJvbShkcmFnUGxhbmVQb3NpdGlvbik7CisgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmRyYWdB
eGlzKSB7CisgICAgICAgICAgICB0aGlzLnVzZU9iamVjdE9yaWVuYXRpb25Gb3JEcmFnZ2luZyA/
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3Iz
Il0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0aGlzLl9vcHRpb25zLmRyYWdBeGlzLCB0aGlz
LmF0dGFjaGVkTm9kZS5nZXRXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4KCksIHRoaXMu
X2xvY2FsQXhpcykgOiB0aGlzLl9sb2NhbEF4aXMuY29weUZyb20odGhpcy5fb3B0aW9ucy5kcmFn
QXhpcyk7CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGxhbmUgbm9ybWFsIGluIGRpcmVjdGlv
biBvZiBjYW1lcmEgYnV0IHBlcnBlbmRpY3VsYXIgdG8gZHJhZyBheGlzCisgICAgICAgICAgICB0
aGlzLl9wb2ludEEuYWRkVG9SZWYodGhpcy5fbG9jYWxBeGlzLCB0aGlzLl9wb2ludEIpOyAvLyB0
b3dhcmRzIGRyYWcgYXhpcworICAgICAgICAgICAgcmF5Lm9yaWdpbi5zdWJ0cmFjdFRvUmVmKHRo
aXMuX3BvaW50QSwgdGhpcy5fcG9pbnRDKTsKKyAgICAgICAgICAgIHRoaXMuX3BvaW50QS5hZGRU
b1JlZih0aGlzLl9wb2ludEMubm9ybWFsaXplKCksIHRoaXMuX3BvaW50Qyk7IC8vIHRvd2FyZHMg
Y2FtZXJhCisgICAgICAgICAgICAvLyBHZXQgcGVycGVuZGljdWxhciBsaW5lIGZyb20gZGlyZWN0
aW9uIHRvIGNhbWVyYSBhbmQgZHJhZyBheGlzCisgICAgICAgICAgICB0aGlzLl9wb2ludEIuc3Vi
dHJhY3RUb1JlZih0aGlzLl9wb2ludEEsIHRoaXMuX2xpbmVBKTsKKyAgICAgICAgICAgIHRoaXMu
X3BvaW50Qy5zdWJ0cmFjdFRvUmVmKHRoaXMuX3BvaW50QSwgdGhpcy5fbGluZUIpOworICAgICAg
ICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
Y3RvcjMiXS5Dcm9zc1RvUmVmKHRoaXMuX2xpbmVBLCB0aGlzLl9saW5lQiwgdGhpcy5fbG9va0F0
KTsKKyAgICAgICAgICAgIC8vIEdldCBwZXJwZW5kaWN1bGFyIGxpbmUgZnJvbSBwcmV2aW91cyBy
ZXN1bHQgYW5kIGRyYWcgYXhpcyB0byBhZGp1c3QgbGluZUIgdG8gYmUgcGVycGVuZGljdWxhdCB0
byBjYW1lcmEKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZih0aGlzLl9saW5lQSwgdGhpcy5fbG9v
a0F0LCB0aGlzLl9sb29rQXQpOworICAgICAgICAgICAgdGhpcy5fbG9va0F0Lm5vcm1hbGl6ZSgp
OworICAgICAgICAgICAgdGhpcy5fZHJhZ1BsYW5lLnBvc2l0aW9uLmNvcHlGcm9tKHRoaXMuX3Bv
aW50QSk7CisgICAgICAgICAgICB0aGlzLl9wb2ludEEuYWRkVG9SZWYodGhpcy5fbG9va0F0LCB0
aGlzLl9sb29rQXQpOworICAgICAgICAgICAgdGhpcy5fZHJhZ1BsYW5lLmxvb2tBdCh0aGlzLl9s
b29rQXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX29wdGlvbnMuZHJhZ1Bs
YW5lTm9ybWFsKSB7CisgICAgICAgICAgICB0aGlzLnVzZU9iamVjdE9yaWVuYXRpb25Gb3JEcmFn
Z2luZyA/IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0aGlzLl9vcHRpb25zLmRyYWdQbGFu
ZU5vcm1hbCwgdGhpcy5hdHRhY2hlZE5vZGUuZ2V0V29ybGRNYXRyaXgoKS5nZXRSb3RhdGlvbk1h
dHJpeCgpLCB0aGlzLl9sb2NhbEF4aXMpIDogdGhpcy5fbG9jYWxBeGlzLmNvcHlGcm9tKHRoaXMu
X29wdGlvbnMuZHJhZ1BsYW5lTm9ybWFsKTsKKyAgICAgICAgICAgIHRoaXMuX2RyYWdQbGFuZS5w
b3NpdGlvbi5jb3B5RnJvbSh0aGlzLl9wb2ludEEpOworICAgICAgICAgICAgdGhpcy5fcG9pbnRB
LmFkZFRvUmVmKHRoaXMuX2xvY2FsQXhpcywgdGhpcy5fbG9va0F0KTsKKyAgICAgICAgICAgIHRo
aXMuX2RyYWdQbGFuZS5sb29rQXQodGhpcy5fbG9va0F0KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2RyYWdQbGFuZS5wb3NpdGlvbi5jb3B5RnJvbSh0aGlz
Ll9wb2ludEEpOworICAgICAgICAgICAgdGhpcy5fZHJhZ1BsYW5lLmxvb2tBdChyYXkub3JpZ2lu
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkcmFn
IHBsYW5lIHNvIGl0IGRvZXNuJ3QgZ2V0IG91dCBvZiBzeW5jIHdpdGggdGhlIG5vZGUgKGVnLiB3
aGVuIG1vdmluZyBiYWNrIGFuZCBmb3J0aCBxdWlja2x5KQorICAgICAgICB0aGlzLl9kcmFnUGxh
bmUucG9zaXRpb24uY29weUZyb20odGhpcy5hdHRhY2hlZE5vZGUuYWJzb2x1dGVQb3NpdGlvbik7
CisgICAgICAgIHRoaXMuX2RyYWdQbGFuZS5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiAgRGV0YWNoZXMgdGhlIGJlaGF2aW9yIGZyb20gdGhlIG1lc2gK
KyAgICAgKi8KKyAgICBQb2ludGVyRHJhZ0JlaGF2aW9yLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9wb2ludGVyT2JzZXJ2ZXIpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3NjZW5lLm9uUG9pbnRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX3BvaW50ZXJP
YnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2JlZm9yZVJlbmRlck9ic2Vy
dmVyKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUu
cmVtb3ZlKHRoaXMuX2JlZm9yZVJlbmRlck9ic2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLnJlbGVhc2VEcmFnKCk7CisgICAgfTsKKyAgICBQb2ludGVyRHJhZ0JlaGF2aW9yLl9BbnlN
b3VzZUlEID0gLTI7CisgICAgcmV0dXJuIFBvaW50ZXJEcmFnQmVoYXZpb3I7Cit9KCkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL0JlaGF2aW9ycy9NZXNoZXMvc2l4RG9mRHJhZ0JlaGF2
aW9yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vQmVoYXZpb3JzL01lc2hlcy9zaXhEb2ZEcmFnQmVoYXZpb3IudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNpeERvZkRyYWdCZWhhdmlvciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaXhEb2ZEcmFnQmVoYXZpb3IiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFNpeERvZkRyYWdCZWhhdmlvcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9hYnN0cmFjdE1lc2ggKi8gIi4vTWVz
aGVzL2Fic3RyYWN0TWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vc2NlbmUgKi8gIi4vc2NlbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXZl
bnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL0V2ZW50cy9wb2ludGVyRXZlbnRzICovICIuL0V2ZW50cy9w
b2ludGVyRXZlbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2Jz
ZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhICovICIuL0NhbWVyYXMvY2Ft
ZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfcGl2b3RUb29sc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWlzYy9waXZvdFRvb2xzICovICIuL01pc2MvcGl2b3RUb29scy50cyIpOworCisKKworCisKKwor
CisvKioKKyAqIEEgYmVoYXZpb3IgdGhhdCB3aGVuIGF0dGFjaGVkIHRvIGEgbWVzaCB3aWxsIGFs
bG93IHRoZSBtZXNoIHRvIGJlIGRyYWdnZWQgYXJvdW5kIGJhc2VkIG9uIGRpcmVjdGlvbnMgYW5k
IG9yaWdpbiBvZiB0aGUgcG9pbnRlcidzIHJheQorICovCit2YXIgU2l4RG9mRHJhZ0JlaGF2aW9y
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRp
YXRlcyBhIGJlaGF2aW9yIHRoYXQgd2hlbiBhdHRhY2hlZCB0byBhIG1lc2ggd2lsbCBhbGxvdyB0
aGUgbWVzaCB0byBiZSBkcmFnZ2VkIGFyb3VuZCBiYXNlZCBvbiBkaXJlY3Rpb25zIGFuZCBvcmln
aW4gb2YgdGhlIHBvaW50ZXIncyByYXkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTaXhEb2ZEcmFn
QmVoYXZpb3IoKSB7CisgICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyT2JzZXJ2ZXIgPSBudWxsOwor
ICAgICAgICB0aGlzLl90YXJnZXRQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAgICAgICB0
aGlzLl9tb3ZpbmcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc3RhcnRpbmdPcmllbnRhdGlvbiA9
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVh
dGVybmlvbiJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBIb3cgbXVjaCBmYXN0ZXIgdGhl
IG9iamVjdCBzaG91bGQgbW92ZSB3aGVuIHRoZSBjb250cm9sbGVyIGlzIG1vdmluZyB0b3dhcmRz
IGl0LiBUaGlzIGlzIHVzZWZ1bCB0byBicmluZyBvYmplY3RzIHRoYXQgYXJlIGZhciBhd2F5IGZy
b20gdGhlIHVzZXIgdG8gdGhlbSBmYXN0ZXIuIFNldCB0aGlzIHRvIDAgdG8gYXZvaWQgYW55IHNw
ZWVkIGluY3JlYXNlLiAoRGVmYXVsdDogMykKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuekRy
YWdGYWN0b3IgPSAzOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgdGhlIG9iamVjdCBzaG91
bGQgcm90YXRlIHRvIGZhY2UgdGhlIGRyYWcgb3JpZ2luCisgICAgICAgICAqLworICAgICAgICB0
aGlzLnJvdGF0ZURyYWdnZWRPYmplY3QgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICog
SWYgdGhlIGJlaGF2aW9yIGlzIGN1cnJlbnRseSBpbiBhIGRyYWdnaW5nIHN0YXRlCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaGUgZGlzdGFuY2UgdG93YXJkcyB0aGUgdGFyZ2V0IGRyYWcgcG9zaXRpb24gdG8gbW92
ZSBlYWNoIGZyYW1lLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gYXZvaWQgaml0dGVyLiBTZXQgdGhp
cyB0byAxIGZvciBubyBkZWxheS4gKERlZmF1bHQ6IDAuMikKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuZHJhZ0RlbHRhUmF0aW8gPSAwLjI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
aWQgb2YgdGhlIHBvaW50ZXIgdGhhdCBpcyBjdXJyZW50bHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUg
YmVoYXZpb3IgKC0xIHdoZW4gbm8gcG9pbnRlciBpcyBhY3RpdmUpCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ1BvaW50ZXJJRCA9IC0xOworICAgICAgICAvKioKKyAg
ICAgICAgICogSWYgY2FtZXJhIGNvbnRyb2xzIHNob3VsZCBiZSBkZXRhY2hlZCBkdXJpbmcgdGhl
IGRyYWcKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGV0YWNoQ2FtZXJhQ29udHJvbHMgPSB0
cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIGEgZHJhZyBzdGFy
dHMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25EcmFnU3RhcnRPYnNlcnZhYmxlID0gbmV3
IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siT2JzZXJ2YWJs
ZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiAgRmlyZXMgZWFjaCB0aW1lIGEgZHJhZyBl
bmRzIChlZy4gbW91c2UgcmVsZWFzZSBhZnRlciBkcmFnKQorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5vbkRyYWdFbmRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgfQorICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShTaXhEb2ZEcmFnQmVoYXZpb3IucHJvdG90eXBlLCAibmFtZSIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqICBUaGUgbmFtZSBvZiB0aGUgYmVoYXZpb3IKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuICJTaXhE
b2ZEcmFnIjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogIEluaXRpYWxpemVz
IHRoZSBiZWhhdmlvcgorICAgICAqLworICAgIFNpeERvZkRyYWdCZWhhdmlvci5wcm90b3R5cGUu
aW5pdCA9IGZ1bmN0aW9uICgpIHsgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2l4RG9m
RHJhZ0JlaGF2aW9yLnByb3RvdHlwZSwgIl9wb2ludGVyQ2FtZXJhIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogSW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGVhIGFjdGl2ZSBjYW1lcmFzLCB0aGUg
Y2FtZXJhVG9Vc2VGb3JQb2ludGVycyBzaG91bGQgYmUgdXNlZCBpZiBzZXQgaW5zdGVhZCBvZiBh
Y3RpdmUgY2FtZXJhCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9zY2VuZS5jYW1lcmFUb1VzZUZvclBvaW50ZXJzKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lLmNhbWVyYVRvVXNlRm9yUG9pbnRlcnM7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyB0aGUgc2NhbGUgYmVoYXZpb3IgdGhlIHBhc3Nl
ZCBpbiBtZXNoCisgICAgICogQHBhcmFtIG93bmVyTm9kZSBUaGUgbWVzaCB0aGF0IHdpbGwgYmUg
c2NhbGVkIGFyb3VuZCBvbmNlIGF0dGFjaGVkCisgICAgICovCisgICAgU2l4RG9mRHJhZ0JlaGF2
aW9yLnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiAob3duZXJOb2RlKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMuX293bmVyTm9kZSA9IG93bmVyTm9kZTsKKyAg
ICAgICAgdGhpcy5fc2NlbmUgPSB0aGlzLl9vd25lck5vZGUuZ2V0U2NlbmUoKTsKKyAgICAgICAg
aWYgKCFTaXhEb2ZEcmFnQmVoYXZpb3IuX3ZpcnR1YWxTY2VuZSkgeworICAgICAgICAgICAgU2l4
RG9mRHJhZ0JlaGF2aW9yLl92aXJ0dWFsU2NlbmUgPSBuZXcgX3NjZW5lX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlNjZW5lIl0odGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkpOworICAgICAg
ICAgICAgU2l4RG9mRHJhZ0JlaGF2aW9yLl92aXJ0dWFsU2NlbmUuZGV0YWNoQ29udHJvbCgpOwor
ICAgICAgICAgICAgdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuc2NlbmVzLnBvcCgpOworICAgICAg
ICB9CisgICAgICAgIHZhciBwaWNrZWRNZXNoID0gbnVsbDsKKyAgICAgICAgdmFyIGxhc3RTaXhE
b2ZPcmlnaW5Qb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAgICAgICAvLyBTZXR1cCB2aXJ0
dWFsIG1lc2hlcyB0byBiZSB1c2VkIGZvciBkcmFnZ2luZyB3aXRob3V0IGRpcnR5aW5nIHRoZSBl
eGlzdGluZyBzY2VuZQorICAgICAgICB0aGlzLl92aXJ0dWFsT3JpZ2luTWVzaCA9IG5ldyBfTWVz
aGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBYnN0cmFjdE1l
c2giXSgiIiwgU2l4RG9mRHJhZ0JlaGF2aW9yLl92aXJ0dWFsU2NlbmUpOworICAgICAgICB0aGlz
Ll92aXJ0dWFsT3JpZ2luTWVzaC5yb3RhdGlvblF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXSgpOworICAg
ICAgICB0aGlzLl92aXJ0dWFsRHJhZ01lc2ggPSBuZXcgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQWJzdHJhY3RNZXNoIl0oIiIsIFNpeERvZkRyYWdC
ZWhhdmlvci5fdmlydHVhbFNjZW5lKTsKKyAgICAgICAgdGhpcy5fdmlydHVhbERyYWdNZXNoLnJv
dGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIHZhciBwaWNrUHJlZGljYXRl
ID0gZnVuY3Rpb24gKG0pIHsKKyAgICAgICAgICAgIHJldHVybiBfdGhpcy5fb3duZXJOb2RlID09
IG0gfHwgbS5pc0Rlc2NlbmRhbnRPZihfdGhpcy5fb3duZXJOb2RlKTsKKyAgICAgICAgfTsKKyAg
ICAgICAgdmFyIGF0dGFjaGVkRWxlbWVudCA9IG51bGw7CisgICAgICAgIHRoaXMuX3BvaW50ZXJP
YnNlcnZlciA9IHRoaXMuX3NjZW5lLm9uUG9pbnRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChw
b2ludGVySW5mbywgZXZlbnRTdGF0ZSkgeworICAgICAgICAgICAgaWYgKHBvaW50ZXJJbmZvLnR5
cGUgPT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04pIHsKKyAgICAgICAgICAgICAgICBpZiAo
IV90aGlzLmRyYWdnaW5nICYmIHBvaW50ZXJJbmZvLnBpY2tJbmZvICYmIHBvaW50ZXJJbmZvLnBp
Y2tJbmZvLmhpdCAmJiBwb2ludGVySW5mby5waWNrSW5mby5waWNrZWRNZXNoICYmIHBvaW50ZXJJ
bmZvLnBpY2tJbmZvLnJheSAmJiBwaWNrUHJlZGljYXRlKHBvaW50ZXJJbmZvLnBpY2tJbmZvLnBp
Y2tlZE1lc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fcG9pbnRlckNhbWVy
YSAmJiBfdGhpcy5fcG9pbnRlckNhbWVyYS5jYW1lcmFSaWdNb2RlID09IF9DYW1lcmFzX2NhbWVy
YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDYW1lcmEiXS5SSUdfTU9ERV9OT05FKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVySW5mby5waWNrSW5mby5yYXkub3JpZ2lu
LmNvcHlGcm9tKF90aGlzLl9wb2ludGVyQ2FtZXJhLmdsb2JhbFBvc2l0aW9uKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwaWNrZWRNZXNoID0gX3RoaXMuX293
bmVyTm9kZTsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfcGl2b3RUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fWyJQaXZvdFRvb2xzIl0uX1JlbW92ZUFuZFN0b3JlUGl2b3RQb2lu
dChwaWNrZWRNZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgbGFzdFNpeERvZk9yaWdpblBvc2l0
aW9uLmNvcHlGcm9tKHBvaW50ZXJJbmZvLnBpY2tJbmZvLnJheS5vcmlnaW4pOworICAgICAgICAg
ICAgICAgICAgICAvLyBTZXQgcG9zaXRpb24gYW5kIG9yaWVudGF0aW9uIG9mIHRoZSBjb250cm9s
bGVyCisgICAgICAgICAgICAgICAgICAgIF90aGlzLl92aXJ0dWFsT3JpZ2luTWVzaC5wb3NpdGlv
bi5jb3B5RnJvbShwb2ludGVySW5mby5waWNrSW5mby5yYXkub3JpZ2luKTsKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX3ZpcnR1YWxPcmlnaW5NZXNoLmxvb2tBdChwb2ludGVySW5mby5waWNr
SW5mby5yYXkub3JpZ2luLmFkZChwb2ludGVySW5mby5waWNrSW5mby5yYXkuZGlyZWN0aW9uKSk7
CisgICAgICAgICAgICAgICAgICAgIC8vIEF0dGFjaCB0aGUgdmlydHVhbCBkcmFnIG1lc2ggdG8g
dGhlIHZpcnR1YWwgb3JpZ2luIG1lc2ggc28gaXQgY2FuIGJlIGRyYWdnZWQKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX3ZpcnR1YWxPcmlnaW5NZXNoLnJlbW92ZUNoaWxkKF90aGlzLl92aXJ0
dWFsRHJhZ01lc2gpOworICAgICAgICAgICAgICAgICAgICBwaWNrZWRNZXNoLmNvbXB1dGVXb3Js
ZE1hdHJpeCgpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdmlydHVhbERyYWdNZXNoLnBv
c2l0aW9uLmNvcHlGcm9tKHBpY2tlZE1lc2guYWJzb2x1dGVQb3NpdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghcGlja2VkTWVzaC5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBpY2tlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXS5Sb3Rh
dGlvbllhd1BpdGNoUm9sbChwaWNrZWRNZXNoLnJvdGF0aW9uLnksIHBpY2tlZE1lc2gucm90YXRp
b24ueCwgcGlja2VkTWVzaC5yb3RhdGlvbi56KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB2YXIgb2xkUGFyZW50ID0gcGlja2VkTWVzaC5wYXJlbnQ7CisgICAg
ICAgICAgICAgICAgICAgIHBpY2tlZE1lc2guc2V0UGFyZW50KG51bGwpOworICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5fdmlydHVhbERyYWdNZXNoLnJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJv
bShwaWNrZWRNZXNoLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICAgICAgICAgIHBp
Y2tlZE1lc2guc2V0UGFyZW50KG9sZFBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgIF90aGlz
Ll92aXJ0dWFsT3JpZ2luTWVzaC5hZGRDaGlsZChfdGhpcy5fdmlydHVhbERyYWdNZXNoKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHN0YXRlCisgICAgICAgICAgICAgICAgICAgIF90
aGlzLl90YXJnZXRQb3NpdGlvbi5jb3B5RnJvbShfdGhpcy5fdmlydHVhbERyYWdNZXNoLmFic29s
dXRlUG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5kcmFnZ2luZyA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnREcmFnZ2luZ1BvaW50ZXJJRCA9IHBv
aW50ZXJJbmZvLmV2ZW50LnBvaW50ZXJJZDsKKyAgICAgICAgICAgICAgICAgICAgLy8gRGV0YXRj
aCBjYW1lcmEgY29udHJvbHMKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmRldGFjaENh
bWVyYUNvbnRyb2xzICYmIF90aGlzLl9wb2ludGVyQ2FtZXJhICYmICFfdGhpcy5fcG9pbnRlckNh
bWVyYS5sZWZ0Q2FtZXJhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX3Bv
aW50ZXJDYW1lcmEuaW5wdXRzLmF0dGFjaGVkRWxlbWVudCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF0dGFjaGVkRWxlbWVudCA9IF90aGlzLl9wb2ludGVyQ2FtZXJhLmlucHV0cy5h
dHRhY2hlZEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3BvaW50
ZXJDYW1lcmEuZGV0YWNoQ29udHJvbChfdGhpcy5fcG9pbnRlckNhbWVyYS5pbnB1dHMuYXR0YWNo
ZWRFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaGVkRWxlbWVu
dCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgX01pc2NfcGl2b3RUb29sc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fWyJQaXZvdFRvb2xzIl0uX1Jlc3RvcmVQaXZvdFBvaW50KHBpY2tlZE1lc2gp
OworICAgICAgICAgICAgICAgICAgICBfdGhpcy5vbkRyYWdTdGFydE9ic2VydmFibGUubm90aWZ5
T2JzZXJ2ZXJzKHt9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChwb2ludGVySW5mby50eXBlID09IF9FdmVudHNfcG9pbnRlckV2ZW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJV
UCkgeworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5jdXJyZW50RHJhZ2dpbmdQb2ludGVySUQg
PT0gcG9pbnRlckluZm8uZXZlbnQucG9pbnRlcklkKSB7CisgICAgICAgICAgICAgICAgICAgIF90
aGlzLmRyYWdnaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9tb3Zpbmcg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudERyYWdnaW5nUG9pbnRl
cklEID0gLTE7CisgICAgICAgICAgICAgICAgICAgIHBpY2tlZE1lc2ggPSBudWxsOworICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5fdmlydHVhbE9yaWdpbk1lc2gucmVtb3ZlQ2hpbGQoX3RoaXMu
X3ZpcnR1YWxEcmFnTWVzaCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlYXR0YWNoIGNhbWVy
YSBjb250cm9scworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuZGV0YWNoQ2FtZXJhQ29u
dHJvbHMgJiYgYXR0YWNoZWRFbGVtZW50ICYmIF90aGlzLl9wb2ludGVyQ2FtZXJhICYmICFfdGhp
cy5fcG9pbnRlckNhbWVyYS5sZWZ0Q2FtZXJhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBf
dGhpcy5fcG9pbnRlckNhbWVyYS5hdHRhY2hDb250cm9sKGF0dGFjaGVkRWxlbWVudCwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25EcmFn
RW5kT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBvaW50ZXJJbmZvLnR5cGUgPT0gX0V2
ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBvaW50ZXJF
dmVudFR5cGVzIl0uUE9JTlRFUk1PVkUpIHsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY3Vy
cmVudERyYWdnaW5nUG9pbnRlcklEID09IHBvaW50ZXJJbmZvLmV2ZW50LnBvaW50ZXJJZCAmJiBf
dGhpcy5kcmFnZ2luZyAmJiBwb2ludGVySW5mby5waWNrSW5mbyAmJiBwb2ludGVySW5mby5waWNr
SW5mby5yYXkgJiYgcGlja2VkTWVzaCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgekRyYWdG
YWN0b3IgPSBfdGhpcy56RHJhZ0ZhY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlz
Ll9wb2ludGVyQ2FtZXJhICYmIF90aGlzLl9wb2ludGVyQ2FtZXJhLmNhbWVyYVJpZ01vZGUgPT0g
X0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNhbWVyYSJdLlJJ
R19NT0RFX05PTkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJJbmZvLnBpY2tJ
bmZvLnJheS5vcmlnaW4uY29weUZyb20oX3RoaXMuX3BvaW50ZXJDYW1lcmEuZ2xvYmFsUG9zaXRp
b24pOworICAgICAgICAgICAgICAgICAgICAgICAgekRyYWdGYWN0b3IgPSAwOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBjb250cm9sbGVy
IGRyYWcgZGlzdGFuY2UgaW4gY29udHJvbGxlciBzcGFjZQorICAgICAgICAgICAgICAgICAgICB2
YXIgb3JpZ2luRHJhZ0RpZmZlcmVuY2UgPSBwb2ludGVySW5mby5waWNrSW5mby5yYXkub3JpZ2lu
LnN1YnRyYWN0KGxhc3RTaXhEb2ZPcmlnaW5Qb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAg
IGxhc3RTaXhEb2ZPcmlnaW5Qb3NpdGlvbi5jb3B5RnJvbShwb2ludGVySW5mby5waWNrSW5mby5y
YXkub3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2FsT3JpZ2luRHJhZ0RpZmZl
cmVuY2UgPSAtX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXS5Eb3Qob3JpZ2luRHJhZ0RpZmZlcmVuY2UsIHBvaW50ZXJJbmZvLnBpY2tJbmZv
LnJheS5kaXJlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdmlydHVhbE9yaWdp
bk1lc2guYWRkQ2hpbGQoX3RoaXMuX3ZpcnR1YWxEcmFnTWVzaCk7CisgICAgICAgICAgICAgICAg
ICAgIC8vIERldGVybWluZSBob3cgbXVjaCB0aGUgY29udHJvbGxlciBtb3ZlZCB0by9hd2F5IHRv
d2FyZHMgdGhlIGRyYWdnZWQgb2JqZWN0IGFuZCB1c2UgdGhpcyB0byBtb3ZlIHRoZSBvYmplY3Qg
ZnVydGhlciB3aGVuIGl0cyBmdXJ0aGVyIGF3YXkKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMu
X3ZpcnR1YWxEcmFnTWVzaC5wb3NpdGlvbi56IC09IF90aGlzLl92aXJ0dWFsRHJhZ01lc2gucG9z
aXRpb24ueiA8IDEgPyBsb2NhbE9yaWdpbkRyYWdEaWZmZXJlbmNlICogX3RoaXMuekRyYWdGYWN0
b3IgOiBsb2NhbE9yaWdpbkRyYWdEaWZmZXJlbmNlICogekRyYWdGYWN0b3IgKiBfdGhpcy5fdmly
dHVhbERyYWdNZXNoLnBvc2l0aW9uLno7CisgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5f
dmlydHVhbERyYWdNZXNoLnBvc2l0aW9uLnogPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5fdmlydHVhbERyYWdNZXNoLnBvc2l0aW9uLnogPSAwOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29udHJvbGxlciBwb3Np
dGlvbgorICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdmlydHVhbE9yaWdpbk1lc2gucG9zaXRp
b24uY29weUZyb20ocG9pbnRlckluZm8ucGlja0luZm8ucmF5Lm9yaWdpbik7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl92aXJ0dWFsT3JpZ2luTWVzaC5sb29rQXQocG9pbnRlckluZm8ucGlj
a0luZm8ucmF5Lm9yaWdpbi5hZGQocG9pbnRlckluZm8ucGlja0luZm8ucmF5LmRpcmVjdGlvbikp
OworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdmlydHVhbE9yaWdpbk1lc2gucmVtb3ZlQ2hp
bGQoX3RoaXMuX3ZpcnR1YWxEcmFnTWVzaCk7CisgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUg
dGhlIHZpcnR1YWxPYmplY3RzUG9zaXRpb24gaW50byB0aGUgcGlja2VkIG1lc2gncyBzcGFjZSBp
ZiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RhcmdldFBvc2l0aW9uLmNvcHlG
cm9tKF90aGlzLl92aXJ0dWFsRHJhZ01lc2guYWJzb2x1dGVQb3NpdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChwaWNrZWRNZXNoLnBhcmVudCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKF90aGlzLl90YXJnZXRQb3NpdGlvbiwgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLklu
dmVydChwaWNrZWRNZXNoLnBhcmVudC5nZXRXb3JsZE1hdHJpeCgpKSwgX3RoaXMuX3RhcmdldFBv
c2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
IV90aGlzLl9tb3ZpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdGFydGlu
Z09yaWVudGF0aW9uLmNvcHlGcm9tKF90aGlzLl92aXJ0dWFsRHJhZ01lc2gucm90YXRpb25RdWF0
ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fbW92aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgICAgICB2YXIgdG1wUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAg
IC8vIE9uIGV2ZXJ5IGZyYW1lIG1vdmUgdG93YXJkcyB0YXJnZXQgc2NhbGluZyB0byBhdm9pZCBq
aXR0ZXIgY2F1c2VkIGJ5IHZyIGNvbnRyb2xsZXJzCisgICAgICAgIHRoaXMuX3NjZW5lUmVuZGVy
T2JzZXJ2ZXIgPSBvd25lck5vZGUuZ2V0U2NlbmUoKS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUu
YWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5kcmFnZ2luZyAmJiBfdGhp
cy5fbW92aW5nICYmIHBpY2tlZE1lc2gpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19waXZvdFRv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBpdm90VG9vbHMiXS5fUmVtb3ZlQW5k
U3RvcmVQaXZvdFBvaW50KHBpY2tlZE1lc2gpOworICAgICAgICAgICAgICAgIC8vIFNsb3dseSBt
b3ZlIG1lc2ggdG8gYXZvaWQgaml0dGVyCisgICAgICAgICAgICAgICAgcGlja2VkTWVzaC5wb3Np
dGlvbi5hZGRJblBsYWNlKF90aGlzLl90YXJnZXRQb3NpdGlvbi5zdWJ0cmFjdChwaWNrZWRNZXNo
LnBvc2l0aW9uKS5zY2FsZShfdGhpcy5kcmFnRGVsdGFSYXRpbykpOworICAgICAgICAgICAgICAg
IGlmIChfdGhpcy5yb3RhdGVEcmFnZ2VkT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEdldCBjaGFuZ2UgaW4gcm90YXRpb24KKyAgICAgICAgICAgICAgICAgICAgdG1wUXVhdGVybmlv
bi5jb3B5RnJvbShfdGhpcy5fc3RhcnRpbmdPcmllbnRhdGlvbik7CisgICAgICAgICAgICAgICAg
ICAgIHRtcFF1YXRlcm5pb24ueCA9IC10bXBRdWF0ZXJuaW9uLng7CisgICAgICAgICAgICAgICAg
ICAgIHRtcFF1YXRlcm5pb24ueSA9IC10bXBRdWF0ZXJuaW9uLnk7CisgICAgICAgICAgICAgICAg
ICAgIHRtcFF1YXRlcm5pb24ueiA9IC10bXBRdWF0ZXJuaW9uLno7CisgICAgICAgICAgICAgICAg
ICAgIF90aGlzLl92aXJ0dWFsRHJhZ01lc2gucm90YXRpb25RdWF0ZXJuaW9uLm11bHRpcGx5VG9S
ZWYodG1wUXVhdGVybmlvbiwgdG1wUXVhdGVybmlvbik7CisgICAgICAgICAgICAgICAgICAgIC8v
IENvbnZlcnQgY2hhbmdlIGluIHJvdGF0aW9uIHRvIG9ubHkgeSBheGlzIHJvdGF0aW9uCisgICAg
ICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih0bXBRdWF0ZXJu
aW9uLnRvRXVsZXJBbmdsZXMoInh5eiIpLnksIDAsIDAsIHRtcFF1YXRlcm5pb24pOworICAgICAg
ICAgICAgICAgICAgICB0bXBRdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYoX3RoaXMuX3N0YXJ0aW5n
T3JpZW50YXRpb24sIHRtcFF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgICAgICAvLyBTbG93
bHkgbW92ZSBtZXNoIHRvIGF2b2lkIGppdHRlcgorICAgICAgICAgICAgICAgICAgICB2YXIgb2xk
UGFyZW50ID0gcGlja2VkTWVzaC5wYXJlbnQ7CisgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkg
cm90YXRlIHRoZSBtZXNoIGlmIGl0J3MgcGFyZW50IGhhcyB1bmlmb3JtIHNjYWxpbmcKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFvbGRQYXJlbnQgfHwgKG9sZFBhcmVudC5zY2FsaW5nICYmICFv
bGRQYXJlbnQuc2NhbGluZy5pc05vblVuaWZvcm1XaXRoaW5FcHNpbG9uKDAuMDAxKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBpY2tlZE1lc2guc2V0UGFyZW50KG51bGwpOworICAgICAg
ICAgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlF1YXRlcm5pb24iXS5TbGVycFRvUmVmKHBpY2tlZE1lc2gucm90YXRpb25RdWF0
ZXJuaW9uLCB0bXBRdWF0ZXJuaW9uLCBfdGhpcy5kcmFnRGVsdGFSYXRpbywgcGlja2VkTWVzaC5y
b3RhdGlvblF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgICAgICAgICAgcGlja2VkTWVzaC5z
ZXRQYXJlbnQob2xkUGFyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBfTWlzY19waXZvdFRvb2xzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X19bIlBpdm90VG9vbHMiXS5fUmVzdG9yZVBpdm90UG9pbnQocGlja2VkTWVzaCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogIERl
dGFjaGVzIHRoZSBiZWhhdmlvciBmcm9tIHRoZSBtZXNoCisgICAgICovCisgICAgU2l4RG9mRHJh
Z0JlaGF2aW9yLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLl9zY2VuZSkgeworICAgICAgICAgICAgdGhpcy5fc2NlbmUub25Qb2ludGVyT2JzZXJ2YWJs
ZS5yZW1vdmUodGhpcy5fcG9pbnRlck9ic2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fb3duZXJOb2RlKSB7CisgICAgICAgICAgICB0aGlzLl9vd25lck5vZGUuZ2V0U2NlbmUo
KS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX3NjZW5lUmVuZGVyT2JzZXJ2
ZXIpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl92aXJ0dWFsT3JpZ2luTWVzaCkgewor
ICAgICAgICAgICAgdGhpcy5fdmlydHVhbE9yaWdpbk1lc2guZGlzcG9zZSgpOworICAgICAgICB9
CisgICAgICAgIGlmICh0aGlzLl92aXJ0dWFsRHJhZ01lc2gpIHsKKyAgICAgICAgICAgIHRoaXMu
X3ZpcnR1YWxEcmFnTWVzaC5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vbkRy
YWdFbmRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25EcmFnU3RhcnRPYnNlcnZh
YmxlLmNsZWFyKCk7CisgICAgfTsKKyAgICByZXR1cm4gU2l4RG9mRHJhZ0JlaGF2aW9yOworfSgp
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9CZWhhdmlvcnMvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQmVoYXZpb3JzL2luZGV4
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogQXV0b1JvdGF0aW9uQmVoYXZpb3IsIEJvdW5jaW5nQmVoYXZpb3IsIEZyYW1pbmdC
ZWhhdmlvciwgQXR0YWNoVG9Cb3hCZWhhdmlvciwgRmFkZUluT3V0QmVoYXZpb3IsIE11bHRpUG9p
bnRlclNjYWxlQmVoYXZpb3IsIFBvaW50ZXJEcmFnQmVoYXZpb3IsIFNpeERvZkRyYWdCZWhhdmlv
ciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vQ2FtZXJhcy9pbmRleCAqLyAiLi9CZWhhdmlvcnMvQ2FtZXJhcy9pbmRleC50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJBdXRvUm90YXRpb25CZWhhdmlvciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXV0b1JvdGF0
aW9uQmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmNpbmdCZWhhdmlvciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQm91bmNpbmdCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmFt
aW5nQmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkZyYW1pbmdCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vTWVzaGVzL2luZGV4ICovICIuL0JlaGF2aW9y
cy9NZXNoZXMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXR0YWNoVG9Cb3hCZWhhdmlv
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJBdHRhY2hUb0JveEJlaGF2aW9yIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkZhZGVJbk91dEJlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkZhZGVJbk91dEJlaGF2aW9yIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIk11bHRpUG9pbnRlclNjYWxlQmVoYXZpb3IiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTXVsdGlQ
b2ludGVyU2NhbGVCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2ludGVyRHJh
Z0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlBvaW50ZXJEcmFnQmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU2l4RG9mRHJhZ0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNpeERvZkRyYWdCZWhhdmlvciJd
OyB9KTsKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQm9uZXMvYm9uZS50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQm9uZXMvYm9uZS50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBCb25l
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvbmUiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIEJvbmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0
aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19hcnJh
eVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NaXNjL2FycmF5VG9vbHMgKi8gIi4vTWlzYy9hcnJheVRvb2xzLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguYXhpcyAqLyAi
Li9NYXRocy9tYXRoLmF4aXMudHMiKTsKKworCisKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8g
c3RvcmUgYm9uZSBpbmZvcm1hdGlvbgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL2hvd190b191c2VfYm9uZXNfYW5kX3NrZWxldG9ucworICovCit2YXIgQm9uZSA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShCb25lLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIENyZWF0ZSBhIG5ldyBib25lCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgYm9u
ZSBuYW1lCisgICAgICogQHBhcmFtIHNrZWxldG9uIGRlZmluZXMgdGhlIHBhcmVudCBza2VsZXRv
bgorICAgICAqIEBwYXJhbSBwYXJlbnRCb25lIGRlZmluZXMgdGhlIHBhcmVudCAoY2FuIGJlIG51
bGwgaWYgdGhlIGJvbmUgaXMgdGhlIHJvb3QpCisgICAgICogQHBhcmFtIGxvY2FsTWF0cml4IGRl
ZmluZXMgdGhlIGxvY2FsIG1hdHJpeAorICAgICAqIEBwYXJhbSByZXN0UG9zZSBkZWZpbmVzIHRo
ZSByZXN0IHBvc2UgbWF0cml4CisgICAgICogQHBhcmFtIGJhc2VNYXRyaXggZGVmaW5lcyB0aGUg
YmFzZSBtYXRyaXgKKyAgICAgKiBAcGFyYW0gaW5kZXggZGVmaW5lcyBpbmRleCBvZiB0aGUgYm9u
ZSBpbiB0aGUgaGllYXJjaHkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBCb25lKAorICAgIC8qKgor
ICAgICAqIGRlZmluZXMgdGhlIGJvbmUgbmFtZQorICAgICAqLworICAgIG5hbWUsIHNrZWxldG9u
LCBwYXJlbnRCb25lLCBsb2NhbE1hdHJpeCwgcmVzdFBvc2UsIGJhc2VNYXRyaXgsIGluZGV4KSB7
CisgICAgICAgIGlmIChwYXJlbnRCb25lID09PSB2b2lkIDApIHsgcGFyZW50Qm9uZSA9IG51bGw7
IH0KKyAgICAgICAgaWYgKGxvY2FsTWF0cml4ID09PSB2b2lkIDApIHsgbG9jYWxNYXRyaXggPSBu
dWxsOyB9CisgICAgICAgIGlmIChyZXN0UG9zZSA9PT0gdm9pZCAwKSB7IHJlc3RQb3NlID0gbnVs
bDsgfQorICAgICAgICBpZiAoYmFzZU1hdHJpeCA9PT0gdm9pZCAwKSB7IGJhc2VNYXRyaXggPSBu
dWxsOyB9CisgICAgICAgIGlmIChpbmRleCA9PT0gdm9pZCAwKSB7IGluZGV4ID0gbnVsbDsgfQor
ICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBza2VsZXRvbi5nZXRT
Y2VuZSgpLCBmYWxzZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMubmFtZSA9IG5hbWU7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGNoaWxkIGJvbmVzCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5jaGlsZHJlbiA9IG5ldyBBcnJheSgpOworICAgICAgICAvKiog
R2V0cyB0aGUgYW5pbWF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBib25lICovCisgICAgICAg
IF90aGlzLmFuaW1hdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEBoaWRkZW4gSW50ZXJuYWwgb25seQorICAgICAgICAgKiBTZXQgdGhpcyB2YWx1ZSB0byBtYXAg
dGhpcyBib25lIHRvIGEgZGlmZmVyZW50IGluZGV4IGluIHRoZSB0cmFuc2Zvcm0gbWF0cmljZXMK
KyAgICAgICAgICogU2V0IHRoaXMgdmFsdWUgdG8gLTEgdG8gZXhjbHVkZSB0aGUgYm9uZSBmcm9t
IHRoZSB0cmFuc2Zvcm0gbWF0cmljZXMKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9pbmRl
eCA9IG51bGw7CisgICAgICAgIF90aGlzLl9hYnNvbHV0ZVRyYW5zZm9ybSA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0oKTsKKyAg
ICAgICAgX3RoaXMuX2ludmVydGVkQWJzb2x1dGVUcmFuc2Zvcm0gPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdKCk7CisgICAgICAg
IF90aGlzLl9zY2FsaW5nRGV0ZXJtaW5hbnQgPSAxOworICAgICAgICBfdGhpcy5fd29ybGRUcmFu
c2Zvcm0gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIk1hdHJpeCJdKCk7CisgICAgICAgIF90aGlzLl9uZWVkVG9EZWNvbXBvc2UgPSB0cnVlOwor
ICAgICAgICBfdGhpcy5fbmVlZFRvQ29tcG9zZSA9IGZhbHNlOworICAgICAgICAvKiogQGhpZGRl
biAqLworICAgICAgICBfdGhpcy5fbGlua2VkVHJhbnNmb3JtTm9kZSA9IG51bGw7CisgICAgICAg
IC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl93YWl0aW5nVHJhbnNmb3JtTm9kZUlkID0g
bnVsbDsKKyAgICAgICAgX3RoaXMuX3NrZWxldG9uID0gc2tlbGV0b247CisgICAgICAgIF90aGlz
Ll9sb2NhbE1hdHJpeCA9IGxvY2FsTWF0cml4ID8gbG9jYWxNYXRyaXguY2xvbmUoKSA6IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5JZGVu
dGl0eSgpOworICAgICAgICBfdGhpcy5fcmVzdFBvc2UgPSByZXN0UG9zZSA/IHJlc3RQb3NlIDog
X3RoaXMuX2xvY2FsTWF0cml4LmNsb25lKCk7CisgICAgICAgIF90aGlzLl9iYXNlTWF0cml4ID0g
YmFzZU1hdHJpeCA/IGJhc2VNYXRyaXggOiBfdGhpcy5fbG9jYWxNYXRyaXguY2xvbmUoKTsKKyAg
ICAgICAgX3RoaXMuX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHNrZWxldG9uLmJvbmVzLnB1c2go
X3RoaXMpOworICAgICAgICBfdGhpcy5zZXRQYXJlbnQocGFyZW50Qm9uZSwgZmFsc2UpOworICAg
ICAgICBpZiAoYmFzZU1hdHJpeCB8fCBsb2NhbE1hdHJpeCkgeworICAgICAgICAgICAgX3RoaXMu
X3VwZGF0ZURpZmZlcmVuY2VNYXRyaXgoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3Ro
aXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCb25lLnByb3RvdHlwZSwgIl9t
YXRyaXgiLCB7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdGhpcy5fY29tcG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2xvY2FsTWF0cml4OworICAgICAgICB9LAorICAgICAgICAvKiogQGhpZGRlbiAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbG9jYWxNYXRy
aXguY29weUZyb20odmFsdWUpOworICAgICAgICAgICAgdGhpcy5fbmVlZFRvRGVjb21wb3NlID0g
dHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVu
dCBvYmplY3QgY2xhc3MgbmFtZS4KKyAgICAgKiBAcmV0dXJuIHRoZSBjbGFzcyBuYW1lCisgICAg
ICovCisgICAgQm9uZS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIkJvbmUiOworICAgIH07CisgICAgLy8gTWVtYmVycworICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIHBhcmVudCBza2VsZXRvbgorICAgICAqIEByZXR1cm5zIGEgc2tlbGV0b24K
KyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5nZXRTa2VsZXRvbiA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3NrZWxldG9uOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0cyBwYXJlbnQgYm9uZQorICAgICAqIEByZXR1cm5zIGEgYm9uZSBvciBudWxsIGlmIHRoZSBi
b25lIGlzIHRoZSByb290IG9mIHRoZSBib25lIGhpZXJhcmNoeQorICAgICAqLworICAgIEJvbmUu
cHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3BhcmVudDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFp
bmluZyB0aGUgcm9vdCBib25lcworICAgICAqIEByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcg
dGhlIHJvb3QgYm9uZXMKKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5nZXRDaGlsZHJlbiA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTZXRzIHRoZSBwYXJlbnQgYm9uZQorICAgICAqIEBwYXJhbSBwYXJlbnQg
ZGVmaW5lcyB0aGUgcGFyZW50IChjYW4gYmUgbnVsbCBpZiB0aGUgYm9uZSBpcyB0aGUgcm9vdCkK
KyAgICAgKiBAcGFyYW0gdXBkYXRlRGlmZmVyZW5jZU1hdHJpeCBkZWZpbmVzIGlmIHRoZSBkaWZm
ZXJlbmNlIG1hdHJpeCBtdXN0IGJlIHVwZGF0ZWQKKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlw
ZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50LCB1cGRhdGVEaWZmZXJlbmNlTWF0cml4KSB7
CisgICAgICAgIGlmICh1cGRhdGVEaWZmZXJlbmNlTWF0cml4ID09PSB2b2lkIDApIHsgdXBkYXRl
RGlmZmVyZW5jZU1hdHJpeCA9IHRydWU7IH0KKyAgICAgICAgaWYgKHRoaXMuX3BhcmVudCA9PT0g
cGFyZW50KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX3BhcmVudCkgeworICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fcGFyZW50LmNoaWxk
cmVuLmluZGV4T2YodGhpcyk7CisgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50OworICAg
ICAgICBpZiAodGhpcy5fcGFyZW50KSB7CisgICAgICAgICAgICB0aGlzLl9wYXJlbnQuY2hpbGRy
ZW4ucHVzaCh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXBkYXRlRGlmZmVyZW5jZU1h
dHJpeCkgeworICAgICAgICAgICAgdGhpcy5fdXBkYXRlRGlmZmVyZW5jZU1hdHJpeCgpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMubWFya0FzRGlydHkoKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIGxvY2FsIG1hdHJpeAorICAgICAqIEByZXR1cm5zIGEgbWF0cml4CisgICAg
ICovCisgICAgQm9uZS5wcm90b3R5cGUuZ2V0TG9jYWxNYXRyaXggPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuX2NvbXBvc2UoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsTWF0cml4
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgYmFzZSBtYXRyaXggKGluaXRpYWwg
bWF0cml4IHdoaWNoIHJlbWFpbnMgdW5jaGFuZ2VkKQorICAgICAqIEByZXR1cm5zIGEgbWF0cml4
CisgICAgICovCisgICAgQm9uZS5wcm90b3R5cGUuZ2V0QmFzZU1hdHJpeCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VNYXRyaXg7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXRzIHRoZSByZXN0IHBvc2UgbWF0cml4CisgICAgICogQHJldHVybnMgYSBtYXRyaXgK
KyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5nZXRSZXN0UG9zZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3RQb3NlOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0cyBhIG1hdHJpeCB1c2VkIHRvIHN0b3JlIHdvcmxkIG1hdHJpeCAoaWUuIHRoZSBtYXRyaXgg
c2VudCB0byBzaGFkZXJzKQorICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLmdldFdvcmxkTWF0
cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRUcmFuc2Zvcm07
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBsb2NhbCBtYXRyaXggdG8gcmVzdCBw
b3NlIG1hdHJpeAorICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLnJldHVyblRvUmVzdCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy51cGRhdGVNYXRyaXgodGhpcy5fcmVzdFBvc2UuY2xv
bmUoKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBpbnZlcnNlIG9mIHRoZSBh
YnNvbHV0ZSB0cmFuc2Zvcm0gbWF0cml4LgorICAgICAqIFRoaXMgbWF0cml4IHdpbGwgYmUgbXVs
dGlwbGllZCBieSBsb2NhbCBtYXRyaXggdG8gZ2V0IHRoZSBkaWZmZXJlbmNlIG1hdHJpeCAoaWUu
IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb3JpZ2luYWwgc3RhdGUgYW5kIGN1cnJlbnQgc3RhdGUp
CisgICAgICogQHJldHVybnMgYSBtYXRyaXgKKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5n
ZXRJbnZlcnRlZEFic29sdXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5faW52ZXJ0ZWRBYnNvbHV0ZVRyYW5zZm9ybTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIGFic29sdXRlIHRyYW5zZm9ybSBtYXRyaXggKGllIGJhc2UgbWF0cml4ICog
cGFyZW50IHdvcmxkIG1hdHJpeCkKKyAgICAgKiBAcmV0dXJucyBhIG1hdHJpeAorICAgICAqLwor
ICAgIEJvbmUucHJvdG90eXBlLmdldEFic29sdXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fYWJzb2x1dGVUcmFuc2Zvcm07CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBMaW5rcyB3aXRoIHRoZSBnaXZlbiB0cmFuc2Zvcm0gbm9kZS4KKyAgICAgKiBUaGUg
bG9jYWwgbWF0cml4IG9mIHRoaXMgYm9uZSBpcyBjb3BpZWQgZnJvbSB0aGUgdHJhbnNmb3JtIG5v
ZGUgZXZlcnkgZnJhbWUuCisgICAgICogQHBhcmFtIHRyYW5zZm9ybU5vZGUgZGVmaW5lcyB0aGUg
dHJhbnNmb3JtIG5vZGUgdG8gbGluayB0bworICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLmxp
bmtUcmFuc2Zvcm1Ob2RlID0gZnVuY3Rpb24gKHRyYW5zZm9ybU5vZGUpIHsKKyAgICAgICAgaWYg
KHRoaXMuX2xpbmtlZFRyYW5zZm9ybU5vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX3NrZWxldG9u
Ll9udW1Cb25lc1dpdGhMaW5rZWRUcmFuc2Zvcm1Ob2RlLS07CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fbGlua2VkVHJhbnNmb3JtTm9kZSA9IHRyYW5zZm9ybU5vZGU7CisgICAgICAgIGlmICh0
aGlzLl9saW5rZWRUcmFuc2Zvcm1Ob2RlKSB7CisgICAgICAgICAgICB0aGlzLl9za2VsZXRvbi5f
bnVtQm9uZXNXaXRoTGlua2VkVHJhbnNmb3JtTm9kZSsrOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvLyBQcm9wZXJ0aWVzIChtYXRjaGVzIEFic3RyYWN0TWVzaCBwcm9wZXJ0aWVzKQorICAgIC8q
KgorICAgICAqIEdldHMgdGhlIG5vZGUgdXNlZCB0byBkcml2ZSB0aGUgYm9uZSdzIHRyYW5zZm9y
bWF0aW9uCisgICAgICogQHJldHVybnMgYSB0cmFuc2Zvcm0gbm9kZSBvciBudWxsCisgICAgICov
CisgICAgQm9uZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtTm9kZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2xpbmtlZFRyYW5zZm9ybU5vZGU7CisgICAgfTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQm9uZS5wcm90b3R5cGUsICJwb3NpdGlvbiIsIHsKKyAgICAgICAg
LyoqIEdldHMgb3Igc2V0cyBjdXJyZW50IHBvc2l0aW9uIChpbiBsb2NhbCBzcGFjZSkgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLl9kZWNvbXBvc2UoKTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbFBvc2l0aW9uOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQb3NpdGlvbikgeworICAgICAgICAgICAgdGhpcy5fZGVj
b21wb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9sb2NhbFBvc2l0aW9uLmNvcHlGcm9tKG5ld1Bv
c2l0aW9uKTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtBc0RpcnR5QW5kQ29tcG9zZSgpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm9uZS5wcm90b3R5cGUs
ICJyb3RhdGlvbiIsIHsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyBjdXJyZW50IHJvdGF0aW9u
IChpbiBsb2NhbCBzcGFjZSkgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5nZXRSb3RhdGlvbigpOworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uIChuZXdSb3RhdGlvbikgeworICAgICAgICAgICAgdGhpcy5zZXRSb3RhdGlvbihu
ZXdSb3RhdGlvbik7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShCb25lLnByb3RvdHlwZSwgInJvdGF0aW9uUXVhdGVybmlvbiIsIHsKKyAgICAgICAgLyoqIEdl
dHMgb3Igc2V0cyBjdXJyZW50IHJvdGF0aW9uIHF1YXRlcm5pb24gKGluIGxvY2FsIHNwYWNlKSAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuX2RlY29tcG9z
ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsUm90YXRpb247CisgICAgICAgIH0s
CisgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1JvdGF0aW9uKSB7CisgICAgICAgICAgICB0aGlz
LnNldFJvdGF0aW9uUXVhdGVybmlvbihuZXdSb3RhdGlvbik7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCb25lLnByb3RvdHlwZSwgInNjYWxpbmciLCB7Cisg
ICAgICAgIC8qKiBHZXRzIG9yIHNldHMgY3VycmVudCBzY2FsaW5nIChpbiBsb2NhbCBzcGFjZSkg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5n
ZXRTY2FsZSgpOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdTY2FsaW5n
KSB7CisgICAgICAgICAgICB0aGlzLnNldFNjYWxlKG5ld1NjYWxpbmcpOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm9uZS5wcm90b3R5cGUsICJhbmltYXRp
b25Qcm9wZXJ0aWVzT3ZlcnJpZGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBhbmltYXRpb24gcHJvcGVydGllcyBvdmVycmlkZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2tlbGV0b24uYW5pbWF0
aW9uUHJvcGVydGllc092ZXJyaWRlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvLyBNZXRob2Rz
CisgICAgQm9uZS5wcm90b3R5cGUuX2RlY29tcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9uZWVkVG9EZWNvbXBvc2UpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9uZWVkVG9EZWNvbXBvc2UgPSBmYWxzZTsKKyAgICAgICAgaWYg
KCF0aGlzLl9sb2NhbFNjYWxpbmcpIHsKKyAgICAgICAgICAgIHRoaXMuX2xvY2FsU2NhbGluZyA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3Iz
Il0uWmVybygpOworICAgICAgICAgICAgdGhpcy5fbG9jYWxSb3RhdGlvbiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl0uWmVybygp
OworICAgICAgICAgICAgdGhpcy5fbG9jYWxQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX2xvY2FsTWF0cml4LmRlY29tcG9zZSh0aGlzLl9sb2NhbFNjYWxpbmcs
IHRoaXMuX2xvY2FsUm90YXRpb24sIHRoaXMuX2xvY2FsUG9zaXRpb24pOworICAgIH07CisgICAg
Qm9uZS5wcm90b3R5cGUuX2NvbXBvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhp
cy5fbmVlZFRvQ29tcG9zZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGlmICghdGhpcy5fbG9jYWxTY2FsaW5nKSB7CisgICAgICAgICAgICB0aGlzLl9uZWVkVG9D
b21wb3NlID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fbmVlZFRvQ29tcG9zZSA9IGZhbHNlOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uQ29tcG9zZVRvUmVmKHRoaXMu
X2xvY2FsU2NhbGluZywgdGhpcy5fbG9jYWxSb3RhdGlvbiwgdGhpcy5fbG9jYWxQb3NpdGlvbiwg
dGhpcy5fbG9jYWxNYXRyaXgpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBi
YXNlIGFuZCBsb2NhbCBtYXRyaWNlcworICAgICAqIEBwYXJhbSBtYXRyaXggZGVmaW5lcyB0aGUg
bmV3IGJhc2Ugb3IgbG9jYWwgbWF0cml4CisgICAgICogQHBhcmFtIHVwZGF0ZURpZmZlcmVuY2VN
YXRyaXggZGVmaW5lcyBpZiB0aGUgZGlmZmVyZW5jZSBtYXRyaXggbXVzdCBiZSB1cGRhdGVkCisg
ICAgICogQHBhcmFtIHVwZGF0ZUxvY2FsTWF0cml4IGRlZmluZXMgaWYgdGhlIGxvY2FsIG1hdHJp
eCBzaG91bGQgYmUgdXBkYXRlZAorICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLnVwZGF0ZU1h
dHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIHVwZGF0ZURpZmZlcmVuY2VNYXRyaXgsIHVwZGF0ZUxv
Y2FsTWF0cml4KSB7CisgICAgICAgIGlmICh1cGRhdGVEaWZmZXJlbmNlTWF0cml4ID09PSB2b2lk
IDApIHsgdXBkYXRlRGlmZmVyZW5jZU1hdHJpeCA9IHRydWU7IH0KKyAgICAgICAgaWYgKHVwZGF0
ZUxvY2FsTWF0cml4ID09PSB2b2lkIDApIHsgdXBkYXRlTG9jYWxNYXRyaXggPSB0cnVlOyB9Cisg
ICAgICAgIHRoaXMuX2Jhc2VNYXRyaXguY29weUZyb20obWF0cml4KTsKKyAgICAgICAgaWYgKHVw
ZGF0ZURpZmZlcmVuY2VNYXRyaXgpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURpZmZlcmVu
Y2VNYXRyaXgoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXBkYXRlTG9jYWxNYXRyaXgpIHsK
KyAgICAgICAgICAgIHRoaXMuX2xvY2FsTWF0cml4LmNvcHlGcm9tKG1hdHJpeCk7CisgICAgICAg
ICAgICB0aGlzLl9tYXJrQXNEaXJ0eUFuZERlY29tcG9zZSgpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEJvbmUucHJvdG90eXBlLl91cGRhdGVEaWZmZXJl
bmNlTWF0cml4ID0gZnVuY3Rpb24gKHJvb3RNYXRyaXgsIHVwZGF0ZUNoaWxkcmVuKSB7CisgICAg
ICAgIGlmICh1cGRhdGVDaGlsZHJlbiA9PT0gdm9pZCAwKSB7IHVwZGF0ZUNoaWxkcmVuID0gdHJ1
ZTsgfQorICAgICAgICBpZiAoIXJvb3RNYXRyaXgpIHsKKyAgICAgICAgICAgIHJvb3RNYXRyaXgg
PSB0aGlzLl9iYXNlTWF0cml4OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9wYXJlbnQp
IHsKKyAgICAgICAgICAgIHJvb3RNYXRyaXgubXVsdGlwbHlUb1JlZih0aGlzLl9wYXJlbnQuX2Fi
c29sdXRlVHJhbnNmb3JtLCB0aGlzLl9hYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9hYnNvbHV0ZVRyYW5zZm9ybS5jb3B5RnJv
bShyb290TWF0cml4KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hYnNvbHV0ZVRyYW5zZm9y
bS5pbnZlcnRUb1JlZih0aGlzLl9pbnZlcnRlZEFic29sdXRlVHJhbnNmb3JtKTsKKyAgICAgICAg
aWYgKHVwZGF0ZUNoaWxkcmVuKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB0
aGlzLmNoaWxkcmVuW2luZGV4XS5fdXBkYXRlRGlmZmVyZW5jZU1hdHJpeCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjYWxpbmdEZXRlcm1pbmFudCA9ICh0aGlz
Ll9hYnNvbHV0ZVRyYW5zZm9ybS5kZXRlcm1pbmFudCgpIDwgMCA/IC0xIDogMSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBGbGFnIHRoZSBib25lIGFzIGRpcnR5IChGb3JjaW5nIGl0IHRvIHVw
ZGF0ZSBldmVyeXRoaW5nKQorICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLm1hcmtBc0RpcnR5
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jdXJyZW50UmVuZGVySWQrKzsKKyAgICAg
ICAgdGhpcy5fY2hpbGRVcGRhdGVJZCsrOworICAgICAgICB0aGlzLl9za2VsZXRvbi5fbWFya0Fz
RGlydHkoKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQm9uZS5wcm90b3R5cGUu
X21hcmtBc0RpcnR5QW5kQ29tcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5tYXJr
QXNEaXJ0eSgpOworICAgICAgICB0aGlzLl9uZWVkVG9Db21wb3NlID0gdHJ1ZTsKKyAgICB9Owor
ICAgIEJvbmUucHJvdG90eXBlLl9tYXJrQXNEaXJ0eUFuZERlY29tcG9zZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpOworICAgICAgICB0aGlzLl9uZWVkVG9EZWNv
bXBvc2UgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogVHJhbnNsYXRlIHRoZSBib25l
IGluIGxvY2FsIG9yIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIHZlYyBUaGUgYW1vdW50IHRv
IHRyYW5zbGF0ZSB0aGUgYm9uZQorICAgICAqIEBwYXJhbSBzcGFjZSBUaGUgc3BhY2UgdGhhdCB0
aGUgdHJhbnNsYXRpb24gaXMgaW4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRo
aXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gVGhpcyBpcyBvbmx5IHVzZWQgaW4gd29ybGQgc3BhY2UK
KyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAodmVjLCBz
cGFjZSwgbWVzaCkgeworICAgICAgICBpZiAoc3BhY2UgPT09IHZvaWQgMCkgeyBzcGFjZSA9IF9N
YXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2UiXS5MT0NB
TDsgfQorICAgICAgICB2YXIgbG0gPSB0aGlzLmdldExvY2FsTWF0cml4KCk7CisgICAgICAgIGlm
IChzcGFjZSA9PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlNwYWNlIl0uTE9DQUwpIHsKKyAgICAgICAgICAgIGxtLmFkZEF0SW5kZXgoMTIsIHZlYy54KTsK
KyAgICAgICAgICAgIGxtLmFkZEF0SW5kZXgoMTMsIHZlYy55KTsKKyAgICAgICAgICAgIGxtLmFk
ZEF0SW5kZXgoMTQsIHZlYy56KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHZhciB3bSA9IG51bGw7CisgICAgICAgICAgICAvL21lc2guZ2V0V29ybGRNYXRyaXgoKSBu
ZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHNrZWxldG9uLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9y
bXMoKQorICAgICAgICAgICAgaWYgKG1lc2gpIHsKKyAgICAgICAgICAgICAgICB3bSA9IG1lc2gu
Z2V0V29ybGRNYXRyaXgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3NrZWxl
dG9uLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9ybXMoKTsKKyAgICAgICAgICAgIHZhciB0bWF0ID0g
Qm9uZS5fdG1wTWF0c1swXTsKKyAgICAgICAgICAgIHZhciB0dmVjID0gQm9uZS5fdG1wVmVjc1sw
XTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bWVzaCAmJiB3bSkgeworICAgICAgICAgICAgICAgICAgICB0bWF0LmNvcHlGcm9tKHRoaXMuX3Bh
cmVudC5nZXRBYnNvbHV0ZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgICAgICAgICAgdG1hdC5t
dWx0aXBseVRvUmVmKHdtLCB0bWF0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRtYXQuY29weUZyb20odGhpcy5fcGFyZW50
LmdldEFic29sdXRlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRtYXQuc2V0VHJhbnNsYXRpb25Gcm9tRmxvYXRzKDAsIDAsIDApOwor
ICAgICAgICAgICAgdG1hdC5pbnZlcnQoKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRp
bmF0ZXNUb1JlZih2ZWMsIHRtYXQsIHR2ZWMpOworICAgICAgICAgICAgbG0uYWRkQXRJbmRleCgx
MiwgdHZlYy54KTsKKyAgICAgICAgICAgIGxtLmFkZEF0SW5kZXgoMTMsIHR2ZWMueSk7CisgICAg
ICAgICAgICBsbS5hZGRBdEluZGV4KDE0LCB0dmVjLnopOworICAgICAgICB9CisgICAgICAgIHRo
aXMuX21hcmtBc0RpcnR5QW5kRGVjb21wb3NlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXQgdGhlIHBvc3Rpb24gb2YgdGhlIGJvbmUgaW4gbG9jYWwgb3Igd29ybGQgc3BhY2UKKyAgICAg
KiBAcGFyYW0gcG9zaXRpb24gVGhlIHBvc2l0aW9uIHRvIHNldCB0aGUgYm9uZQorICAgICAqIEBw
YXJhbSBzcGFjZSBUaGUgc3BhY2UgdGhhdCB0aGUgcG9zaXRpb24gaXMgaW4KKyAgICAgKiBAcGFy
YW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gIFRoaXMgaXMg
b25seSB1c2VkIGluIHdvcmxkIHNwYWNlCisgICAgICovCisgICAgQm9uZS5wcm90b3R5cGUuc2V0
UG9zaXRpb24gPSBmdW5jdGlvbiAocG9zaXRpb24sIHNwYWNlLCBtZXNoKSB7CisgICAgICAgIGlm
IChzcGFjZSA9PT0gdm9pZCAwKSB7IHNwYWNlID0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJTcGFjZSJdLkxPQ0FMOyB9CisgICAgICAgIHZhciBsbSA9IHRo
aXMuZ2V0TG9jYWxNYXRyaXgoKTsKKyAgICAgICAgaWYgKHNwYWNlID09IF9NYXRoc19tYXRoX2F4
aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2UiXS5MT0NBTCkgeworICAgICAg
ICAgICAgbG0uc2V0VHJhbnNsYXRpb25Gcm9tRmxvYXRzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnks
IHBvc2l0aW9uLnopOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFy
IHdtID0gbnVsbDsKKyAgICAgICAgICAgIC8vbWVzaC5nZXRXb3JsZE1hdHJpeCgpIG5lZWRzIHRv
IGJlIGNhbGxlZCBiZWZvcmUgc2tlbGV0b24uY29tcHV0ZUFic29sdXRlVHJhbnNmb3JtcygpCisg
ICAgICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgICAgIHdtID0gbWVzaC5nZXRXb3Js
ZE1hdHJpeCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2tlbGV0b24uY29t
cHV0ZUFic29sdXRlVHJhbnNmb3JtcygpOworICAgICAgICAgICAgdmFyIHRtYXQgPSBCb25lLl90
bXBNYXRzWzBdOworICAgICAgICAgICAgdmFyIHZlYyA9IEJvbmUuX3RtcFZlY3NbMF07CisgICAg
ICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKG1lc2ggJiYg
d20pIHsKKyAgICAgICAgICAgICAgICAgICAgdG1hdC5jb3B5RnJvbSh0aGlzLl9wYXJlbnQuZ2V0
QWJzb2x1dGVUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICAgICAgICAgIHRtYXQubXVsdGlwbHlU
b1JlZih3bSwgdG1hdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICB0bWF0LmNvcHlGcm9tKHRoaXMuX3BhcmVudC5nZXRBYnNv
bHV0ZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0bWF0LmludmVydCgpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRl
c1RvUmVmKHBvc2l0aW9uLCB0bWF0LCB2ZWMpOworICAgICAgICAgICAgbG0uc2V0VHJhbnNsYXRp
b25Gcm9tRmxvYXRzKHZlYy54LCB2ZWMueSwgdmVjLnopOworICAgICAgICB9CisgICAgICAgIHRo
aXMuX21hcmtBc0RpcnR5QW5kRGVjb21wb3NlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXQgdGhlIGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSBib25lICh3b3JsZCBzcGFjZSkKKyAgICAg
KiBAcGFyYW0gcG9zaXRpb24gVGhlIHBvc2l0aW9uIHRvIHNldCB0aGUgYm9uZQorICAgICAqIEBw
YXJhbSBtZXNoIFRoZSBtZXNoIHRoYXQgdGhpcyBib25lIGlzIGF0dGFjaGVkIHRvCisgICAgICov
CisgICAgQm9uZS5wcm90b3R5cGUuc2V0QWJzb2x1dGVQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb3Np
dGlvbiwgbWVzaCkgeworICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvc2l0aW9uLCBfTWF0aHNf
bWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uV09STEQsIG1l
c2gpOworICAgIH07CisgICAgLyoqCisgICAgICogU2NhbGUgdGhlIGJvbmUgb24gdGhlIHgsIHkg
YW5kIHogYXhlcyAoaW4gbG9jYWwgc3BhY2UpCisgICAgICogQHBhcmFtIHggVGhlIGFtb3VudCB0
byBzY2FsZSB0aGUgYm9uZSBvbiB0aGUgeCBheGlzCisgICAgICogQHBhcmFtIHkgVGhlIGFtb3Vu
dCB0byBzY2FsZSB0aGUgYm9uZSBvbiB0aGUgeSBheGlzCisgICAgICogQHBhcmFtIHogVGhlIGFt
b3VudCB0byBzY2FsZSB0aGUgYm9uZSBvbiB0aGUgeiBheGlzCisgICAgICogQHBhcmFtIHNjYWxl
Q2hpbGRyZW4gc2V0cyB0aGlzIHRvIHRydWUgaWYgY2hpbGRyZW4gb2YgdGhlIGJvbmUgc2hvdWxk
IGJlIHNjYWxlZCBhcyB3ZWxsIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqLworICAgIEJvbmUu
cHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHksIHosIHNjYWxlQ2hpbGRyZW4pIHsKKyAg
ICAgICAgaWYgKHNjYWxlQ2hpbGRyZW4gPT09IHZvaWQgMCkgeyBzY2FsZUNoaWxkcmVuID0gZmFs
c2U7IH0KKyAgICAgICAgdmFyIGxvY01hdCA9IHRoaXMuZ2V0TG9jYWxNYXRyaXgoKTsKKyAgICAg
ICAgLy8gQXBwbHkgbmV3IHNjYWxpbmcgb24gdG9wIG9mIGN1cnJlbnQgbG9jYWwgbWF0cml4Cisg
ICAgICAgIHZhciBzY2FsZU1hdCA9IEJvbmUuX3RtcE1hdHNbMF07CisgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5TY2FsaW5n
VG9SZWYoeCwgeSwgeiwgc2NhbGVNYXQpOworICAgICAgICBzY2FsZU1hdC5tdWx0aXBseVRvUmVm
KGxvY01hdCwgbG9jTWF0KTsKKyAgICAgICAgLy8gSW52ZXJ0IHNjYWxpbmcgbWF0cml4IGFuZCBh
cHBseSB0aGUgaW52ZXJzZSB0byBhbGwgY2hpbGRyZW4KKyAgICAgICAgc2NhbGVNYXQuaW52ZXJ0
KCk7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLmNoaWxkcmVuOyBfaSA8IF9h
Lmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGNoaWxkID0gX2FbX2ldOworICAgICAg
ICAgICAgdmFyIGNtID0gY2hpbGQuZ2V0TG9jYWxNYXRyaXgoKTsKKyAgICAgICAgICAgIGNtLm11
bHRpcGx5VG9SZWYoc2NhbGVNYXQsIGNtKTsKKyAgICAgICAgICAgIGNtLm11bHRpcGx5QXRJbmRl
eCgxMiwgeCk7CisgICAgICAgICAgICBjbS5tdWx0aXBseUF0SW5kZXgoMTMsIHkpOworICAgICAg
ICAgICAgY20ubXVsdGlwbHlBdEluZGV4KDE0LCB6KTsKKyAgICAgICAgICAgIGNoaWxkLl9tYXJr
QXNEaXJ0eUFuZERlY29tcG9zZSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX21hcmtBc0Rp
cnR5QW5kRGVjb21wb3NlKCk7CisgICAgICAgIGlmIChzY2FsZUNoaWxkcmVuKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gdGhpcy5jaGlsZHJlbjsgX2IgPCBfYy5sZW5ndGg7
IF9iKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBfY1tfYl07CisgICAgICAgICAg
ICAgICAgY2hpbGQuc2NhbGUoeCwgeSwgeiwgc2NhbGVDaGlsZHJlbik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgYm9uZSBzY2FsaW5n
IGluIGxvY2FsIHNwYWNlCisgICAgICogQHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxpbmcg
dmVjdG9yCisgICAgICovCisgICAgQm9uZS5wcm90b3R5cGUuc2V0U2NhbGUgPSBmdW5jdGlvbiAo
c2NhbGUpIHsKKyAgICAgICAgdGhpcy5fZGVjb21wb3NlKCk7CisgICAgICAgIHRoaXMuX2xvY2Fs
U2NhbGluZy5jb3B5RnJvbShzY2FsZSk7CisgICAgICAgIHRoaXMuX21hcmtBc0RpcnR5QW5kQ29t
cG9zZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBzY2FsaW5n
IGluIGxvY2FsIHNwYWNlCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgc2NhbGluZyB2ZWN0
b3IKKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5nZXRTY2FsZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGhpcy5fZGVjb21wb3NlKCk7CisgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbFNj
YWxpbmc7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHNjYWxpbmcg
aW4gbG9jYWwgc3BhY2UgYW5kIHN0b3JlcyBpdCBpbiBhIHRhcmdldCB2ZWN0b3IKKyAgICAgKiBA
cGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCB2ZWN0b3IKKyAgICAgKi8KKyAgICBCb25l
LnByb3RvdHlwZS5nZXRTY2FsZVRvUmVmID0gZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICB0
aGlzLl9kZWNvbXBvc2UoKTsKKyAgICAgICAgcmVzdWx0LmNvcHlGcm9tKHRoaXMuX2xvY2FsU2Nh
bGluZyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHlhdywgcGl0Y2gsIGFuZCBy
b2xsIG9mIHRoZSBib25lIGluIGxvY2FsIG9yIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIHlh
dyBUaGUgcm90YXRpb24gb2YgdGhlIGJvbmUgb24gdGhlIHkgYXhpcworICAgICAqIEBwYXJhbSBw
aXRjaCBUaGUgcm90YXRpb24gb2YgdGhlIGJvbmUgb24gdGhlIHggYXhpcworICAgICAqIEBwYXJh
bSByb2xsIFRoZSByb3RhdGlvbiBvZiB0aGUgYm9uZSBvbiB0aGUgeiBheGlzCisgICAgICogQHBh
cmFtIHNwYWNlIFRoZSBzcGFjZSB0aGF0IHRoZSBheGVzIG9mIHJvdGF0aW9uIGFyZSBpbgorICAg
ICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRoYXQgdGhpcyBib25lIGlzIGF0dGFjaGVkIHRvLiAg
VGhpcyBpcyBvbmx5IHVzZWQgaW4gd29ybGQgc3BhY2UKKyAgICAgKi8KKyAgICBCb25lLnByb3Rv
dHlwZS5zZXRZYXdQaXRjaFJvbGwgPSBmdW5jdGlvbiAoeWF3LCBwaXRjaCwgcm9sbCwgc3BhY2Us
IG1lc2gpIHsKKyAgICAgICAgaWYgKHNwYWNlID09PSB2b2lkIDApIHsgc3BhY2UgPSBfTWF0aHNf
bWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUw7IH0K
KyAgICAgICAgaWYgKHNwYWNlID09PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUwpIHsKKyAgICAgICAgICAgIHZhciBxdWF0ID0gQm9u
ZS5fdG1wUXVhdDsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih5
YXcsIHBpdGNoLCByb2xsLCBxdWF0KTsKKyAgICAgICAgICAgIHRoaXMuc2V0Um90YXRpb25RdWF0
ZXJuaW9uKHF1YXQsIHNwYWNlLCBtZXNoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB2YXIgcm90TWF0SW52ID0gQm9uZS5fdG1wTWF0c1swXTsKKyAgICAgICAgaWYg
KCF0aGlzLl9nZXROZWdhdGl2ZVJvdGF0aW9uVG9SZWYocm90TWF0SW52LCBtZXNoKSkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciByb3RNYXQgPSBCb25lLl90
bXBNYXRzWzFdOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTWF0cml4Il0uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih5YXcsIHBpdGNo
LCByb2xsLCByb3RNYXQpOworICAgICAgICByb3RNYXRJbnYubXVsdGlwbHlUb1JlZihyb3RNYXQs
IHJvdE1hdCk7CisgICAgICAgIHRoaXMuX3JvdGF0ZVdpdGhNYXRyaXgocm90TWF0LCBzcGFjZSwg
bWVzaCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgYSByb3RhdGlvbiB0byB0aGUgYm9u
ZSBvbiBhbiBheGlzIGluIGxvY2FsIG9yIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIGF4aXMg
VGhlIGF4aXMgdG8gcm90YXRlIHRoZSBib25lIG9uCisgICAgICogQHBhcmFtIGFtb3VudCBUaGUg
YW1vdW50IHRvIHJvdGF0ZSB0aGUgYm9uZQorICAgICAqIEBwYXJhbSBzcGFjZSBUaGUgc3BhY2Ug
dGhhdCB0aGUgYXhpcyBpcyBpbgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRoYXQgdGhp
cyBib25lIGlzIGF0dGFjaGVkIHRvLiBUaGlzIGlzIG9ubHkgdXNlZCBpbiB3b3JsZCBzcGFjZQor
ICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChheGlzLCBhbW91
bnQsIHNwYWNlLCBtZXNoKSB7CisgICAgICAgIGlmIChzcGFjZSA9PT0gdm9pZCAwKSB7IHNwYWNl
ID0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTcGFjZSJd
LkxPQ0FMOyB9CisgICAgICAgIHZhciBybWF0ID0gQm9uZS5fdG1wTWF0c1swXTsKKyAgICAgICAg
cm1hdC5zZXRUcmFuc2xhdGlvbkZyb21GbG9hdHMoMCwgMCwgMCk7CisgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5Sb3RhdGlv
bkF4aXNUb1JlZihheGlzLCBhbW91bnQsIHJtYXQpOworICAgICAgICB0aGlzLl9yb3RhdGVXaXRo
TWF0cml4KHJtYXQsIHNwYWNlLCBtZXNoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0
aGUgcm90YXRpb24gb2YgdGhlIGJvbmUgdG8gYSBwYXJ0aWN1bGFyIGF4aXMgYW5nbGUgaW4gbG9j
YWwgb3Igd29ybGQgc3BhY2UKKyAgICAgKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyB0byByb3RhdGUg
dGhlIGJvbmUgb24KKyAgICAgKiBAcGFyYW0gYW5nbGUgVGhlIGFuZ2xlIHRoYXQgdGhlIGJvbmUg
c2hvdWxkIGJlIHJvdGF0ZWQgdG8KKyAgICAgKiBAcGFyYW0gc3BhY2UgVGhlIHNwYWNlIHRoYXQg
dGhlIGF4aXMgaXMgaW4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9u
ZSBpcyBhdHRhY2hlZCB0by4gIFRoaXMgaXMgb25seSB1c2VkIGluIHdvcmxkIHNwYWNlCisgICAg
ICovCisgICAgQm9uZS5wcm90b3R5cGUuc2V0QXhpc0FuZ2xlID0gZnVuY3Rpb24gKGF4aXMsIGFu
Z2xlLCBzcGFjZSwgbWVzaCkgeworICAgICAgICBpZiAoc3BhY2UgPT09IHZvaWQgMCkgeyBzcGFj
ZSA9IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2Ui
XS5MT0NBTDsgfQorICAgICAgICBpZiAoc3BhY2UgPT09IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2UiXS5MT0NBTCkgeworICAgICAgICAgICAgdmFy
IHF1YXQgPSBCb25lLl90bXBRdWF0OworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbkF4aXNUb1Jl
ZihheGlzLCBhbmdsZSwgcXVhdCk7CisgICAgICAgICAgICB0aGlzLnNldFJvdGF0aW9uUXVhdGVy
bmlvbihxdWF0LCBzcGFjZSwgbWVzaCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdmFyIHJvdE1hdEludiA9IEJvbmUuX3RtcE1hdHNbMF07CisgICAgICAgIGlmICgh
dGhpcy5fZ2V0TmVnYXRpdmVSb3RhdGlvblRvUmVmKHJvdE1hdEludiwgbWVzaCkpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgcm90TWF0ID0gQm9uZS5fdG1w
TWF0c1sxXTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk1hdHJpeCJdLlJvdGF0aW9uQXhpc1RvUmVmKGF4aXMsIGFuZ2xlLCByb3RNYXQp
OworICAgICAgICByb3RNYXRJbnYubXVsdGlwbHlUb1JlZihyb3RNYXQsIHJvdE1hdCk7CisgICAg
ICAgIHRoaXMuX3JvdGF0ZVdpdGhNYXRyaXgocm90TWF0LCBzcGFjZSwgbWVzaCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGV1bGVyIHJvdGF0aW9uIG9mIHRoZSBib25lIGluIGxv
Y2FsIG9mIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIHJvdGF0aW9uIFRoZSBldWxlciByb3Rh
dGlvbiB0aGF0IHRoZSBib25lIHNob3VsZCBiZSBzZXQgdG8KKyAgICAgKiBAcGFyYW0gc3BhY2Ug
VGhlIHNwYWNlIHRoYXQgdGhlIHJvdGF0aW9uIGlzIGluCisgICAgICogQHBhcmFtIG1lc2ggVGhl
IG1lc2ggdGhhdCB0aGlzIGJvbmUgaXMgYXR0YWNoZWQgdG8uIFRoaXMgaXMgb25seSB1c2VkIGlu
IHdvcmxkIHNwYWNlCisgICAgICovCisgICAgQm9uZS5wcm90b3R5cGUuc2V0Um90YXRpb24gPSBm
dW5jdGlvbiAocm90YXRpb24sIHNwYWNlLCBtZXNoKSB7CisgICAgICAgIGlmIChzcGFjZSA9PT0g
dm9pZCAwKSB7IHNwYWNlID0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJTcGFjZSJdLkxPQ0FMOyB9CisgICAgICAgIHRoaXMuc2V0WWF3UGl0Y2hSb2xsKHJv
dGF0aW9uLnksIHJvdGF0aW9uLngsIHJvdGF0aW9uLnosIHNwYWNlLCBtZXNoKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNldCB0aGUgcXVhdGVybmlvbiByb3RhdGlvbiBvZiB0aGUgYm9uZSBp
biBsb2NhbCBvZiB3b3JsZCBzcGFjZQorICAgICAqIEBwYXJhbSBxdWF0IFRoZSBxdWF0ZXJuaW9u
IHJvdGF0aW9uIHRoYXQgdGhlIGJvbmUgc2hvdWxkIGJlIHNldCB0bworICAgICAqIEBwYXJhbSBz
cGFjZSBUaGUgc3BhY2UgdGhhdCB0aGUgcm90YXRpb24gaXMgaW4KKyAgICAgKiBAcGFyYW0gbWVz
aCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gVGhpcyBpcyBvbmx5IHVz
ZWQgaW4gd29ybGQgc3BhY2UKKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5zZXRSb3RhdGlv
blF1YXRlcm5pb24gPSBmdW5jdGlvbiAocXVhdCwgc3BhY2UsIG1lc2gpIHsKKyAgICAgICAgaWYg
KHNwYWNlID09PSB2b2lkIDApIHsgc3BhY2UgPSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUw7IH0KKyAgICAgICAgaWYgKHNwYWNlID09
PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0u
TE9DQUwpIHsKKyAgICAgICAgICAgIHRoaXMuX2RlY29tcG9zZSgpOworICAgICAgICAgICAgdGhp
cy5fbG9jYWxSb3RhdGlvbi5jb3B5RnJvbShxdWF0KTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtB
c0RpcnR5QW5kQ29tcG9zZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHZhciByb3RNYXRJbnYgPSBCb25lLl90bXBNYXRzWzBdOworICAgICAgICBpZiAoIXRoaXMu
X2dldE5lZ2F0aXZlUm90YXRpb25Ub1JlZihyb3RNYXRJbnYsIG1lc2gpKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJvdE1hdCA9IEJvbmUuX3RtcE1hdHNb
MV07CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJNYXRyaXgiXS5Gcm9tUXVhdGVybmlvblRvUmVmKHF1YXQsIHJvdE1hdCk7CisgICAgICAg
IHJvdE1hdEludi5tdWx0aXBseVRvUmVmKHJvdE1hdCwgcm90TWF0KTsKKyAgICAgICAgdGhpcy5f
cm90YXRlV2l0aE1hdHJpeChyb3RNYXQsIHNwYWNlLCBtZXNoKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldCB0aGUgcm90YXRpb24gbWF0cml4IG9mIHRoZSBib25lIGluIGxvY2FsIG9mIHdv
cmxkIHNwYWNlCisgICAgICogQHBhcmFtIHJvdE1hdCBUaGUgcm90YXRpb24gbWF0cml4IHRoYXQg
dGhlIGJvbmUgc2hvdWxkIGJlIHNldCB0bworICAgICAqIEBwYXJhbSBzcGFjZSBUaGUgc3BhY2Ug
dGhhdCB0aGUgcm90YXRpb24gaXMgaW4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0
IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gVGhpcyBpcyBvbmx5IHVzZWQgaW4gd29ybGQgc3Bh
Y2UKKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5zZXRSb3RhdGlvbk1hdHJpeCA9IGZ1bmN0
aW9uIChyb3RNYXQsIHNwYWNlLCBtZXNoKSB7CisgICAgICAgIGlmIChzcGFjZSA9PT0gdm9pZCAw
KSB7IHNwYWNlID0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJTcGFjZSJdLkxPQ0FMOyB9CisgICAgICAgIGlmIChzcGFjZSA9PT0gX01hdGhzX21hdGhfYXhp
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTcGFjZSJdLkxPQ0FMKSB7CisgICAgICAg
ICAgICB2YXIgcXVhdCA9IEJvbmUuX3RtcFF1YXQ7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdLkZyb21Sb3Rh
dGlvbk1hdHJpeFRvUmVmKHJvdE1hdCwgcXVhdCk7CisgICAgICAgICAgICB0aGlzLnNldFJvdGF0
aW9uUXVhdGVybmlvbihxdWF0LCBzcGFjZSwgbWVzaCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHJvdE1hdEludiA9IEJvbmUuX3RtcE1hdHNbMF07CisgICAg
ICAgIGlmICghdGhpcy5fZ2V0TmVnYXRpdmVSb3RhdGlvblRvUmVmKHJvdE1hdEludiwgbWVzaCkp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgcm90TWF0MiA9
IEJvbmUuX3RtcE1hdHNbMV07CisgICAgICAgIHJvdE1hdDIuY29weUZyb20ocm90TWF0KTsKKyAg
ICAgICAgcm90TWF0SW52Lm11bHRpcGx5VG9SZWYocm90TWF0LCByb3RNYXQyKTsKKyAgICAgICAg
dGhpcy5fcm90YXRlV2l0aE1hdHJpeChyb3RNYXQyLCBzcGFjZSwgbWVzaCk7CisgICAgfTsKKyAg
ICBCb25lLnByb3RvdHlwZS5fcm90YXRlV2l0aE1hdHJpeCA9IGZ1bmN0aW9uIChybWF0LCBzcGFj
ZSwgbWVzaCkgeworICAgICAgICBpZiAoc3BhY2UgPT09IHZvaWQgMCkgeyBzcGFjZSA9IF9NYXRo
c19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2UiXS5MT0NBTDsg
fQorICAgICAgICB2YXIgbG1hdCA9IHRoaXMuZ2V0TG9jYWxNYXRyaXgoKTsKKyAgICAgICAgdmFy
IGx4ID0gbG1hdC5tWzEyXTsKKyAgICAgICAgdmFyIGx5ID0gbG1hdC5tWzEzXTsKKyAgICAgICAg
dmFyIGx6ID0gbG1hdC5tWzE0XTsKKyAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50
KCk7CisgICAgICAgIHZhciBwYXJlbnRTY2FsZSA9IEJvbmUuX3RtcE1hdHNbM107CisgICAgICAg
IHZhciBwYXJlbnRTY2FsZUludiA9IEJvbmUuX3RtcE1hdHNbNF07CisgICAgICAgIGlmIChwYXJl
bnQgJiYgc3BhY2UgPT0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJTcGFjZSJdLldPUkxEKSB7CisgICAgICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAg
ICAgICAgIHBhcmVudFNjYWxlLmNvcHlGcm9tKG1lc2guZ2V0V29ybGRNYXRyaXgoKSk7CisgICAg
ICAgICAgICAgICAgcGFyZW50LmdldEFic29sdXRlVHJhbnNmb3JtKCkubXVsdGlwbHlUb1JlZihw
YXJlbnRTY2FsZSwgcGFyZW50U2NhbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgcGFyZW50U2NhbGUuY29weUZyb20ocGFyZW50LmdldEFic29s
dXRlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50U2NhbGVJ
bnYuY29weUZyb20ocGFyZW50U2NhbGUpOworICAgICAgICAgICAgcGFyZW50U2NhbGVJbnYuaW52
ZXJ0KCk7CisgICAgICAgICAgICBsbWF0Lm11bHRpcGx5VG9SZWYocGFyZW50U2NhbGUsIGxtYXQp
OworICAgICAgICAgICAgbG1hdC5tdWx0aXBseVRvUmVmKHJtYXQsIGxtYXQpOworICAgICAgICAg
ICAgbG1hdC5tdWx0aXBseVRvUmVmKHBhcmVudFNjYWxlSW52LCBsbWF0KTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzcGFjZSA9PSBfTWF0aHNfbWF0aF9heGlz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uV09STEQgJiYgbWVzaCkgewor
ICAgICAgICAgICAgICAgIHBhcmVudFNjYWxlLmNvcHlGcm9tKG1lc2guZ2V0V29ybGRNYXRyaXgo
KSk7CisgICAgICAgICAgICAgICAgcGFyZW50U2NhbGVJbnYuY29weUZyb20ocGFyZW50U2NhbGUp
OworICAgICAgICAgICAgICAgIHBhcmVudFNjYWxlSW52LmludmVydCgpOworICAgICAgICAgICAg
ICAgIGxtYXQubXVsdGlwbHlUb1JlZihwYXJlbnRTY2FsZSwgbG1hdCk7CisgICAgICAgICAgICAg
ICAgbG1hdC5tdWx0aXBseVRvUmVmKHJtYXQsIGxtYXQpOworICAgICAgICAgICAgICAgIGxtYXQu
bXVsdGlwbHlUb1JlZihwYXJlbnRTY2FsZUludiwgbG1hdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBsbWF0Lm11bHRpcGx5VG9SZWYocm1hdCwg
bG1hdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbG1hdC5zZXRUcmFuc2xh
dGlvbkZyb21GbG9hdHMobHgsIGx5LCBseik7CisgICAgICAgIHRoaXMuY29tcHV0ZUFic29sdXRl
VHJhbnNmb3JtcygpOworICAgICAgICB0aGlzLl9tYXJrQXNEaXJ0eUFuZERlY29tcG9zZSgpOwor
ICAgIH07CisgICAgQm9uZS5wcm90b3R5cGUuX2dldE5lZ2F0aXZlUm90YXRpb25Ub1JlZiA9IGZ1
bmN0aW9uIChyb3RNYXRJbnYsIG1lc2gpIHsKKyAgICAgICAgdmFyIHNjYWxlTWF0cml4ID0gQm9u
ZS5fdG1wTWF0c1syXTsKKyAgICAgICAgcm90TWF0SW52LmNvcHlGcm9tKHRoaXMuZ2V0QWJzb2x1
dGVUcmFuc2Zvcm0oKSk7CisgICAgICAgIGlmIChtZXNoKSB7CisgICAgICAgICAgICByb3RNYXRJ
bnYubXVsdGlwbHlUb1JlZihtZXNoLmdldFdvcmxkTWF0cml4KCksIHJvdE1hdEludik7CisgICAg
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TWF0cml4Il0uU2NhbGluZ1RvUmVmKG1lc2guc2NhbGluZy54LCBtZXNoLnNjYWxpbmcueSwgbWVz
aC5zY2FsaW5nLnosIHNjYWxlTWF0cml4KTsKKyAgICAgICAgfQorICAgICAgICByb3RNYXRJbnYu
aW52ZXJ0KCk7CisgICAgICAgIGlmIChpc05hTihyb3RNYXRJbnYubVswXSkpIHsKKyAgICAgICAg
ICAgIC8vIE1hdHJpeCBmYWlsZWQgdG8gaW52ZXJ0LgorICAgICAgICAgICAgLy8gVGhpcyBjYW4g
aGFwcGVuIGlmIHNjYWxlIGlzIHplcm8gZm9yIGV4YW1wbGUuCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgc2NhbGVNYXRyaXgubXVsdGlwbHlBdEluZGV4KDAs
IHRoaXMuX3NjYWxpbmdEZXRlcm1pbmFudCk7CisgICAgICAgIHJvdE1hdEludi5tdWx0aXBseVRv
UmVmKHNjYWxlTWF0cml4LCByb3RNYXRJbnYpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGJvbmUgaW4gbG9jYWwg
b3Igd29ybGQgc3BhY2UKKyAgICAgKiBAcGFyYW0gc3BhY2UgVGhlIHNwYWNlIHRoYXQgdGhlIHJl
dHVybmVkIHBvc2l0aW9uIGlzIGluCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdGhhdCB0
aGlzIGJvbmUgaXMgYXR0YWNoZWQgdG8uIFRoaXMgaXMgb25seSB1c2VkIGluIHdvcmxkIHNwYWNl
CisgICAgICogQHJldHVybnMgVGhlIHBvc2l0aW9uIG9mIHRoZSBib25lCisgICAgICovCisgICAg
Qm9uZS5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoc3BhY2UsIG1lc2gpIHsKKyAg
ICAgICAgaWYgKHNwYWNlID09PSB2b2lkIDApIHsgc3BhY2UgPSBfTWF0aHNfbWF0aF9heGlzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUw7IH0KKyAgICAgICAgaWYg
KG1lc2ggPT09IHZvaWQgMCkgeyBtZXNoID0gbnVsbDsgfQorICAgICAgICB2YXIgcG9zID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIHRoaXMuZ2V0UG9zaXRpb25Ub1JlZihzcGFjZSwgbWVzaCwgcG9zKTsK
KyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvcHkgdGhlIHBv
c2l0aW9uIG9mIHRoZSBib25lIHRvIGEgdmVjdG9yMyBpbiBsb2NhbCBvciB3b3JsZCBzcGFjZQor
ICAgICAqIEBwYXJhbSBzcGFjZSBUaGUgc3BhY2UgdGhhdCB0aGUgcmV0dXJuZWQgcG9zaXRpb24g
aXMgaW4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRh
Y2hlZCB0by4gVGhpcyBpcyBvbmx5IHVzZWQgaW4gd29ybGQgc3BhY2UKKyAgICAgKiBAcGFyYW0g
cmVzdWx0IFRoZSB2ZWN0b3IzIHRvIGNvcHkgdGhlIHBvc2l0aW9uIHRvCisgICAgICovCisgICAg
Qm9uZS5wcm90b3R5cGUuZ2V0UG9zaXRpb25Ub1JlZiA9IGZ1bmN0aW9uIChzcGFjZSwgbWVzaCwg
cmVzdWx0KSB7CisgICAgICAgIGlmIChzcGFjZSA9PT0gdm9pZCAwKSB7IHNwYWNlID0gX01hdGhz
X21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTcGFjZSJdLkxPQ0FMOyB9
CisgICAgICAgIGlmIChzcGFjZSA9PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUwpIHsKKyAgICAgICAgICAgIHZhciBsbSA9IHRoaXMu
Z2V0TG9jYWxNYXRyaXgoKTsKKyAgICAgICAgICAgIHJlc3VsdC54ID0gbG0ubVsxMl07CisgICAg
ICAgICAgICByZXN1bHQueSA9IGxtLm1bMTNdOworICAgICAgICAgICAgcmVzdWx0LnogPSBsbS5t
WzE0XTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciB3bSA9IG51
bGw7CisgICAgICAgICAgICAvL21lc2guZ2V0V29ybGRNYXRyaXgoKSBuZWVkcyB0byBiZSBjYWxs
ZWQgYmVmb3JlIHNrZWxldG9uLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9ybXMoKQorICAgICAgICAg
ICAgaWYgKG1lc2gpIHsKKyAgICAgICAgICAgICAgICB3bSA9IG1lc2guZ2V0V29ybGRNYXRyaXgo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3NrZWxldG9uLmNvbXB1dGVBYnNv
bHV0ZVRyYW5zZm9ybXMoKTsKKyAgICAgICAgICAgIHZhciB0bWF0ID0gQm9uZS5fdG1wTWF0c1sw
XTsKKyAgICAgICAgICAgIGlmIChtZXNoICYmIHdtKSB7CisgICAgICAgICAgICAgICAgdG1hdC5j
b3B5RnJvbSh0aGlzLmdldEFic29sdXRlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgICAgIHRt
YXQubXVsdGlwbHlUb1JlZih3bSwgdG1hdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICB0bWF0ID0gdGhpcy5nZXRBYnNvbHV0ZVRyYW5zZm9ybSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0LnggPSB0bWF0Lm1bMTJdOworICAg
ICAgICAgICAgcmVzdWx0LnkgPSB0bWF0Lm1bMTNdOworICAgICAgICAgICAgcmVzdWx0LnogPSB0
bWF0Lm1bMTRdOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGFi
c29sdXRlIHBvc2l0aW9uIG9mIHRoZSBib25lICh3b3JsZCBzcGFjZSkKKyAgICAgKiBAcGFyYW0g
bWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0bworICAgICAqIEByZXR1
cm5zIFRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgYm9uZQorICAgICAqLworICAgIEJvbmUu
cHJvdG90eXBlLmdldEFic29sdXRlUG9zaXRpb24gPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAg
ICBpZiAobWVzaCA9PT0gdm9pZCAwKSB7IG1lc2ggPSBudWxsOyB9CisgICAgICAgIHZhciBwb3Mg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9y
MyJdLlplcm8oKTsKKyAgICAgICAgdGhpcy5nZXRQb3NpdGlvblRvUmVmKF9NYXRoc19tYXRoX2F4
aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2UiXS5XT1JMRCwgbWVzaCwgcG9z
KTsKKyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvcHkgdGhl
IGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSBib25lICh3b3JsZCBzcGFjZSkgdG8gdGhlIHJlc3Vs
dCBwYXJhbQorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRoYXQgdGhpcyBib25lIGlzIGF0
dGFjaGVkIHRvCisgICAgICogQHBhcmFtIHJlc3VsdCBUaGUgdmVjdG9yMyB0byBjb3B5IHRoZSBh
YnNvbHV0ZSBwb3NpdGlvbiB0bworICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLmdldEFic29s
dXRlUG9zaXRpb25Ub1JlZiA9IGZ1bmN0aW9uIChtZXNoLCByZXN1bHQpIHsKKyAgICAgICAgdGhp
cy5nZXRQb3NpdGlvblRvUmVmKF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siU3BhY2UiXS5XT1JMRCwgbWVzaCwgcmVzdWx0KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIENvbXB1dGUgdGhlIGFic29sdXRlIHRyYW5zZm9ybXMgb2YgdGhpcyBib25lIGFuZCBp
dHMgY2hpbGRyZW4KKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5jb21wdXRlQWJzb2x1dGVU
cmFuc2Zvcm1zID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jb21wb3NlKCk7CisgICAg
ICAgIGlmICh0aGlzLl9wYXJlbnQpIHsKKyAgICAgICAgICAgIHRoaXMuX2xvY2FsTWF0cml4Lm11
bHRpcGx5VG9SZWYodGhpcy5fcGFyZW50Ll9hYnNvbHV0ZVRyYW5zZm9ybSwgdGhpcy5fYWJzb2x1
dGVUcmFuc2Zvcm0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhp
cy5fYWJzb2x1dGVUcmFuc2Zvcm0uY29weUZyb20odGhpcy5fbG9jYWxNYXRyaXgpOworICAgICAg
ICAgICAgdmFyIHBvc2VNYXRyaXggPSB0aGlzLl9za2VsZXRvbi5nZXRQb3NlTWF0cml4KCk7Cisg
ICAgICAgICAgICBpZiAocG9zZU1hdHJpeCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2Fic29s
dXRlVHJhbnNmb3JtLm11bHRpcGx5VG9SZWYocG9zZU1hdHJpeCwgdGhpcy5fYWJzb2x1dGVUcmFu
c2Zvcm0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBjaGlsZHJlbiA9
IHRoaXMuY2hpbGRyZW47CisgICAgICAgIHZhciBsZW4gPSBjaGlsZHJlbi5sZW5ndGg7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgIGNoaWxkcmVu
W2ldLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9ybXMoKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqCisgICAgICogR2V0IHRoZSB3b3JsZCBkaXJlY3Rpb24gZnJvbSBhbiBheGlzIHRoYXQgaXMg
aW4gdGhlIGxvY2FsIHNwYWNlIG9mIHRoZSBib25lCisgICAgICogQHBhcmFtIGxvY2FsQXhpcyBU
aGUgbG9jYWwgZGlyZWN0aW9uIHRoYXQgaXMgdXNlZCB0byBjb21wdXRlIHRoZSB3b3JsZCBkaXJl
Y3Rpb24KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRh
Y2hlZCB0bworICAgICAqIEByZXR1cm5zIFRoZSB3b3JsZCBkaXJlY3Rpb24KKyAgICAgKi8KKyAg
ICBCb25lLnByb3RvdHlwZS5nZXREaXJlY3Rpb24gPSBmdW5jdGlvbiAobG9jYWxBeGlzLCBtZXNo
KSB7CisgICAgICAgIGlmIChtZXNoID09PSB2b2lkIDApIHsgbWVzaCA9IG51bGw7IH0KKyAgICAg
ICAgdmFyIHJlc3VsdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlzLmdldERpcmVjdGlvblRvUmVm
KGxvY2FsQXhpcywgbWVzaCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENvcHkgdGhlIHdvcmxkIGRpcmVjdGlvbiB0byBhIHZlY3RvcjMg
ZnJvbSBhbiBheGlzIHRoYXQgaXMgaW4gdGhlIGxvY2FsIHNwYWNlIG9mIHRoZSBib25lCisgICAg
ICogQHBhcmFtIGxvY2FsQXhpcyBUaGUgbG9jYWwgZGlyZWN0aW9uIHRoYXQgaXMgdXNlZCB0byBj
b21wdXRlIHRoZSB3b3JsZCBkaXJlY3Rpb24KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0
aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0bworICAgICAqIEBwYXJhbSByZXN1bHQgVGhlIHZl
Y3RvcjMgdGhhdCB0aGUgd29ybGQgZGlyZWN0aW9uIHdpbGwgYmUgY29waWVkIHRvCisgICAgICov
CisgICAgQm9uZS5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uVG9SZWYgPSBmdW5jdGlvbiAobG9jYWxB
eGlzLCBtZXNoLCByZXN1bHQpIHsKKyAgICAgICAgaWYgKG1lc2ggPT09IHZvaWQgMCkgeyBtZXNo
ID0gbnVsbDsgfQorICAgICAgICB2YXIgd20gPSBudWxsOworICAgICAgICAvL21lc2guZ2V0V29y
bGRNYXRyaXgoKSBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHNrZWxldG9uLmNvbXB1dGVBYnNv
bHV0ZVRyYW5zZm9ybXMoKQorICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgd20gPSBt
ZXNoLmdldFdvcmxkTWF0cml4KCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc2tlbGV0b24u
Y29tcHV0ZUFic29sdXRlVHJhbnNmb3JtcygpOworICAgICAgICB2YXIgbWF0ID0gQm9uZS5fdG1w
TWF0c1swXTsKKyAgICAgICAgbWF0LmNvcHlGcm9tKHRoaXMuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0o
KSk7CisgICAgICAgIGlmIChtZXNoICYmIHdtKSB7CisgICAgICAgICAgICBtYXQubXVsdGlwbHlU
b1JlZih3bSwgbWF0KTsKKyAgICAgICAgfQorICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVm
KGxvY2FsQXhpcywgbWF0LCByZXN1bHQpOworICAgICAgICByZXN1bHQubm9ybWFsaXplKCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGV1bGVyIHJvdGF0aW9uIG9mIHRoZSBib25l
IGluIGxvY2FsIG9yIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIHNwYWNlIFRoZSBzcGFjZSB0
aGF0IHRoZSByb3RhdGlvbiBzaG91bGQgYmUgaW4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVz
aCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gIFRoaXMgaXMgb25seSB1c2VkIGluIHdv
cmxkIHNwYWNlCisgICAgICogQHJldHVybnMgVGhlIGV1bGVyIHJvdGF0aW9uCisgICAgICovCisg
ICAgQm9uZS5wcm90b3R5cGUuZ2V0Um90YXRpb24gPSBmdW5jdGlvbiAoc3BhY2UsIG1lc2gpIHsK
KyAgICAgICAgaWYgKHNwYWNlID09PSB2b2lkIDApIHsgc3BhY2UgPSBfTWF0aHNfbWF0aF9heGlz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUw7IH0KKyAgICAgICAg
aWYgKG1lc2ggPT09IHZvaWQgMCkgeyBtZXNoID0gbnVsbDsgfQorICAgICAgICB2YXIgcmVzdWx0
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3Rv
cjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuZ2V0Um90YXRpb25Ub1JlZihzcGFjZSwgbWVzaCwg
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENvcHkgdGhlIGV1bGVyIHJvdGF0aW9uIG9mIHRoZSBib25lIHRvIGEgdmVjdG9yMy4gIFRoZSBy
b3RhdGlvbiBjYW4gYmUgaW4gZWl0aGVyIGxvY2FsIG9yIHdvcmxkIHNwYWNlCisgICAgICogQHBh
cmFtIHNwYWNlIFRoZSBzcGFjZSB0aGF0IHRoZSByb3RhdGlvbiBzaG91bGQgYmUgaW4KKyAgICAg
KiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gIFRo
aXMgaXMgb25seSB1c2VkIGluIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIHJlc3VsdCBUaGUg
dmVjdG9yMyB0aGF0IHRoZSByb3RhdGlvbiBzaG91bGQgYmUgY29waWVkIHRvCisgICAgICovCisg
ICAgQm9uZS5wcm90b3R5cGUuZ2V0Um90YXRpb25Ub1JlZiA9IGZ1bmN0aW9uIChzcGFjZSwgbWVz
aCwgcmVzdWx0KSB7CisgICAgICAgIGlmIChzcGFjZSA9PT0gdm9pZCAwKSB7IHNwYWNlID0gX01h
dGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTcGFjZSJdLkxPQ0FM
OyB9CisgICAgICAgIGlmIChtZXNoID09PSB2b2lkIDApIHsgbWVzaCA9IG51bGw7IH0KKyAgICAg
ICAgdmFyIHF1YXQgPSBCb25lLl90bXBRdWF0OworICAgICAgICB0aGlzLmdldFJvdGF0aW9uUXVh
dGVybmlvblRvUmVmKHNwYWNlLCBtZXNoLCBxdWF0KTsKKyAgICAgICAgcXVhdC50b0V1bGVyQW5n
bGVzVG9SZWYocmVzdWx0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCB0aGUgcXVhdGVy
bmlvbiByb3RhdGlvbiBvZiB0aGUgYm9uZSBpbiBlaXRoZXIgbG9jYWwgb3Igd29ybGQgc3BhY2UK
KyAgICAgKiBAcGFyYW0gc3BhY2UgVGhlIHNwYWNlIHRoYXQgdGhlIHJvdGF0aW9uIHNob3VsZCBi
ZSBpbgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRoYXQgdGhpcyBib25lIGlzIGF0dGFj
aGVkIHRvLiAgVGhpcyBpcyBvbmx5IHVzZWQgaW4gd29ybGQgc3BhY2UKKyAgICAgKiBAcmV0dXJu
cyBUaGUgcXVhdGVybmlvbiByb3RhdGlvbgorICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLmdl
dFJvdGF0aW9uUXVhdGVybmlvbiA9IGZ1bmN0aW9uIChzcGFjZSwgbWVzaCkgeworICAgICAgICBp
ZiAoc3BhY2UgPT09IHZvaWQgMCkgeyBzcGFjZSA9IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2UiXS5MT0NBTDsgfQorICAgICAgICBpZiAobWVzaCA9
PT0gdm9pZCAwKSB7IG1lc2ggPSBudWxsOyB9CisgICAgICAgIHZhciByZXN1bHQgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdLklk
ZW50aXR5KCk7CisgICAgICAgIHRoaXMuZ2V0Um90YXRpb25RdWF0ZXJuaW9uVG9SZWYoc3BhY2Us
IG1lc2gsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBDb3B5IHRoZSBxdWF0ZXJuaW9uIHJvdGF0aW9uIG9mIHRoZSBib25lIHRvIGEgcXVh
dGVybmlvbi4gIFRoZSByb3RhdGlvbiBjYW4gYmUgaW4gZWl0aGVyIGxvY2FsIG9yIHdvcmxkIHNw
YWNlCisgICAgICogQHBhcmFtIHNwYWNlIFRoZSBzcGFjZSB0aGF0IHRoZSByb3RhdGlvbiBzaG91
bGQgYmUgaW4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBh
dHRhY2hlZCB0by4gIFRoaXMgaXMgb25seSB1c2VkIGluIHdvcmxkIHNwYWNlCisgICAgICogQHBh
cmFtIHJlc3VsdCBUaGUgcXVhdGVybmlvbiB0aGF0IHRoZSByb3RhdGlvbiBzaG91bGQgYmUgY29w
aWVkIHRvCisgICAgICovCisgICAgQm9uZS5wcm90b3R5cGUuZ2V0Um90YXRpb25RdWF0ZXJuaW9u
VG9SZWYgPSBmdW5jdGlvbiAoc3BhY2UsIG1lc2gsIHJlc3VsdCkgeworICAgICAgICBpZiAoc3Bh
Y2UgPT09IHZvaWQgMCkgeyBzcGFjZSA9IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siU3BhY2UiXS5MT0NBTDsgfQorICAgICAgICBpZiAobWVzaCA9PT0gdm9p
ZCAwKSB7IG1lc2ggPSBudWxsOyB9CisgICAgICAgIGlmIChzcGFjZSA9PSBfTWF0aHNfbWF0aF9h
eGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUwpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2RlY29tcG9zZSgpOworICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKHRo
aXMuX2xvY2FsUm90YXRpb24pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdmFyIG1hdCA9IEJvbmUuX3RtcE1hdHNbMF07CisgICAgICAgICAgICB2YXIgYW1hdCA9IHRo
aXMuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGlmIChtZXNoKSB7CisgICAg
ICAgICAgICAgICAgYW1hdC5tdWx0aXBseVRvUmVmKG1lc2guZ2V0V29ybGRNYXRyaXgoKSwgbWF0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1h
dC5jb3B5RnJvbShhbWF0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hdC5tdWx0aXBs
eUF0SW5kZXgoMCwgdGhpcy5fc2NhbGluZ0RldGVybWluYW50KTsKKyAgICAgICAgICAgIG1hdC5t
dWx0aXBseUF0SW5kZXgoMSwgdGhpcy5fc2NhbGluZ0RldGVybWluYW50KTsKKyAgICAgICAgICAg
IG1hdC5tdWx0aXBseUF0SW5kZXgoMiwgdGhpcy5fc2NhbGluZ0RldGVybWluYW50KTsKKyAgICAg
ICAgICAgIG1hdC5kZWNvbXBvc2UodW5kZWZpbmVkLCByZXN1bHQsIHVuZGVmaW5lZCk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCB0aGUgcm90YXRpb24gbWF0cml4IG9m
IHRoZSBib25lIGluIGxvY2FsIG9yIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIHNwYWNlIFRo
ZSBzcGFjZSB0aGF0IHRoZSByb3RhdGlvbiBzaG91bGQgYmUgaW4KKyAgICAgKiBAcGFyYW0gbWVz
aCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gIFRoaXMgaXMgb25seSB1
c2VkIGluIHdvcmxkIHNwYWNlCisgICAgICogQHJldHVybnMgVGhlIHJvdGF0aW9uIG1hdHJpeAor
ICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLmdldFJvdGF0aW9uTWF0cml4ID0gZnVuY3Rpb24g
KHNwYWNlLCBtZXNoKSB7CisgICAgICAgIGlmIChzcGFjZSA9PT0gdm9pZCAwKSB7IHNwYWNlID0g
X01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTcGFjZSJdLkxP
Q0FMOyB9CisgICAgICAgIHZhciByZXN1bHQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgdGhpcy5n
ZXRSb3RhdGlvbk1hdHJpeFRvUmVmKHNwYWNlLCBtZXNoLCByZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ29weSB0aGUgcm90YXRpb24gbWF0
cml4IG9mIHRoZSBib25lIHRvIGEgbWF0cml4LiAgVGhlIHJvdGF0aW9uIGNhbiBiZSBpbiBlaXRo
ZXIgbG9jYWwgb3Igd29ybGQgc3BhY2UKKyAgICAgKiBAcGFyYW0gc3BhY2UgVGhlIHNwYWNlIHRo
YXQgdGhlIHJvdGF0aW9uIHNob3VsZCBiZSBpbgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNo
IHRoYXQgdGhpcyBib25lIGlzIGF0dGFjaGVkIHRvLiAgVGhpcyBpcyBvbmx5IHVzZWQgaW4gd29y
bGQgc3BhY2UKKyAgICAgKiBAcGFyYW0gcmVzdWx0IFRoZSBxdWF0ZXJuaW9uIHRoYXQgdGhlIHJv
dGF0aW9uIHNob3VsZCBiZSBjb3BpZWQgdG8KKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5n
ZXRSb3RhdGlvbk1hdHJpeFRvUmVmID0gZnVuY3Rpb24gKHNwYWNlLCBtZXNoLCByZXN1bHQpIHsK
KyAgICAgICAgaWYgKHNwYWNlID09PSB2b2lkIDApIHsgc3BhY2UgPSBfTWF0aHNfbWF0aF9heGlz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUw7IH0KKyAgICAgICAg
aWYgKHNwYWNlID09IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siU3BhY2UiXS5MT0NBTCkgeworICAgICAgICAgICAgdGhpcy5nZXRMb2NhbE1hdHJpeCgpLmdl
dFJvdGF0aW9uTWF0cml4VG9SZWYocmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHZhciBtYXQgPSBCb25lLl90bXBNYXRzWzBdOworICAgICAgICAgICAgdmFy
IGFtYXQgPSB0aGlzLmdldEFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgICAgICAgICBpZiAobWVz
aCkgeworICAgICAgICAgICAgICAgIGFtYXQubXVsdGlwbHlUb1JlZihtZXNoLmdldFdvcmxkTWF0
cml4KCksIG1hdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBtYXQuY29weUZyb20oYW1hdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
YXQubXVsdGlwbHlBdEluZGV4KDAsIHRoaXMuX3NjYWxpbmdEZXRlcm1pbmFudCk7CisgICAgICAg
ICAgICBtYXQubXVsdGlwbHlBdEluZGV4KDEsIHRoaXMuX3NjYWxpbmdEZXRlcm1pbmFudCk7Cisg
ICAgICAgICAgICBtYXQubXVsdGlwbHlBdEluZGV4KDIsIHRoaXMuX3NjYWxpbmdEZXRlcm1pbmFu
dCk7CisgICAgICAgICAgICBtYXQuZ2V0Um90YXRpb25NYXRyaXhUb1JlZihyZXN1bHQpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHdvcmxkIHBvc2l0aW9uIG9m
IGEgcG9pbnQgdGhhdCBpcyBpbiB0aGUgbG9jYWwgc3BhY2Ugb2YgdGhlIGJvbmUKKyAgICAgKiBA
cGFyYW0gcG9zaXRpb24gVGhlIGxvY2FsIHBvc2l0aW9uCisgICAgICogQHBhcmFtIG1lc2ggVGhl
IG1lc2ggdGhhdCB0aGlzIGJvbmUgaXMgYXR0YWNoZWQgdG8KKyAgICAgKiBAcmV0dXJucyBUaGUg
d29ybGQgcG9zaXRpb24KKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5nZXRBYnNvbHV0ZVBv
c2l0aW9uRnJvbUxvY2FsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBtZXNoKSB7CisgICAgICAgIGlm
IChtZXNoID09PSB2b2lkIDApIHsgbWVzaCA9IG51bGw7IH0KKyAgICAgICAgdmFyIHJlc3VsdCA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3Iz
Il0uWmVybygpOworICAgICAgICB0aGlzLmdldEFic29sdXRlUG9zaXRpb25Gcm9tTG9jYWxUb1Jl
Zihwb3NpdGlvbiwgbWVzaCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldCB0aGUgd29ybGQgcG9zaXRpb24gb2YgYSBwb2ludCB0aGF0
IGlzIGluIHRoZSBsb2NhbCBzcGFjZSBvZiB0aGUgYm9uZSBhbmQgY29weSBpdCB0byB0aGUgcmVz
dWx0IHBhcmFtCisgICAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSBsb2NhbCBwb3NpdGlvbgorICAg
ICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRoYXQgdGhpcyBib25lIGlzIGF0dGFjaGVkIHRvCisg
ICAgICogQHBhcmFtIHJlc3VsdCBUaGUgdmVjdG9yMyB0aGF0IHRoZSB3b3JsZCBwb3NpdGlvbiBz
aG91bGQgYmUgY29waWVkIHRvCisgICAgICovCisgICAgQm9uZS5wcm90b3R5cGUuZ2V0QWJzb2x1
dGVQb3NpdGlvbkZyb21Mb2NhbFRvUmVmID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBtZXNoLCByZXN1
bHQpIHsKKyAgICAgICAgaWYgKG1lc2ggPT09IHZvaWQgMCkgeyBtZXNoID0gbnVsbDsgfQorICAg
ICAgICB2YXIgd20gPSBudWxsOworICAgICAgICAvL21lc2guZ2V0V29ybGRNYXRyaXgoKSBuZWVk
cyB0byBiZSBjYWxsZWQgYmVmb3JlIHNrZWxldG9uLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9ybXMo
KQorICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgd20gPSBtZXNoLmdldFdvcmxkTWF0
cml4KCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc2tlbGV0b24uY29tcHV0ZUFic29sdXRl
VHJhbnNmb3JtcygpOworICAgICAgICB2YXIgdG1hdCA9IEJvbmUuX3RtcE1hdHNbMF07CisgICAg
ICAgIGlmIChtZXNoICYmIHdtKSB7CisgICAgICAgICAgICB0bWF0LmNvcHlGcm9tKHRoaXMuZ2V0
QWJzb2x1dGVUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICB0bWF0Lm11bHRpcGx5VG9SZWYod20s
IHRtYXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdG1hdCA9IHRo
aXMuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICAgICAgfQorICAgICAgICBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9y
bUNvb3JkaW5hdGVzVG9SZWYocG9zaXRpb24sIHRtYXQsIHJlc3VsdCk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXQgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIGEgcG9pbnQgdGhhdCBpcyBpbiB3
b3JsZCBzcGFjZQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgd29ybGQgcG9zaXRpb24KKyAg
ICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0bwor
ICAgICAqIEByZXR1cm5zIFRoZSBsb2NhbCBwb3NpdGlvbgorICAgICAqLworICAgIEJvbmUucHJv
dG90eXBlLmdldExvY2FsUG9zaXRpb25Gcm9tQWJzb2x1dGUgPSBmdW5jdGlvbiAocG9zaXRpb24s
IG1lc2gpIHsKKyAgICAgICAgaWYgKG1lc2ggPT09IHZvaWQgMCkgeyBtZXNoID0gbnVsbDsgfQor
ICAgICAgICB2YXIgcmVzdWx0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuZ2V0TG9jYWxQb3Np
dGlvbkZyb21BYnNvbHV0ZVRvUmVmKHBvc2l0aW9uLCBtZXNoLCByZXN1bHQpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBsb2NhbCBwb3Np
dGlvbiBvZiBhIHBvaW50IHRoYXQgaXMgaW4gd29ybGQgc3BhY2UgYW5kIGNvcHkgaXQgdG8gdGhl
IHJlc3VsdCBwYXJhbQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgd29ybGQgcG9zaXRpb24K
KyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0
bworICAgICAqIEBwYXJhbSByZXN1bHQgVGhlIHZlY3RvcjMgdGhhdCB0aGUgbG9jYWwgcG9zaXRp
b24gc2hvdWxkIGJlIGNvcGllZCB0bworICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLmdldExv
Y2FsUG9zaXRpb25Gcm9tQWJzb2x1dGVUb1JlZiA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgbWVzaCwg
cmVzdWx0KSB7CisgICAgICAgIGlmIChtZXNoID09PSB2b2lkIDApIHsgbWVzaCA9IG51bGw7IH0K
KyAgICAgICAgdmFyIHdtID0gbnVsbDsKKyAgICAgICAgLy9tZXNoLmdldFdvcmxkTWF0cml4KCkg
bmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBza2VsZXRvbi5jb21wdXRlQWJzb2x1dGVUcmFuc2Zv
cm1zKCkKKyAgICAgICAgaWYgKG1lc2gpIHsKKyAgICAgICAgICAgIHdtID0gbWVzaC5nZXRXb3Js
ZE1hdHJpeCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NrZWxldG9uLmNvbXB1dGVBYnNv
bHV0ZVRyYW5zZm9ybXMoKTsKKyAgICAgICAgdmFyIHRtYXQgPSBCb25lLl90bXBNYXRzWzBdOwor
ICAgICAgICB0bWF0LmNvcHlGcm9tKHRoaXMuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0oKSk7CisgICAg
ICAgIGlmIChtZXNoICYmIHdtKSB7CisgICAgICAgICAgICB0bWF0Lm11bHRpcGx5VG9SZWYod20s
IHRtYXQpOworICAgICAgICB9CisgICAgICAgIHRtYXQuaW52ZXJ0KCk7CisgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJh
bnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihwb3NpdGlvbiwgdG1hdCwgcmVzdWx0KTsKKyAgICB9Owor
ICAgIEJvbmUuX3RtcFZlY3MgPSBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIkFycmF5VG9vbHMiXS5CdWlsZEFycmF5KDIsIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybyk7CisgICAgQm9uZS5f
dG1wUXVhdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJRdWF0ZXJuaW9uIl0uSWRlbnRpdHkoKTsKKyAgICBCb25lLl90bXBNYXRzID0gX01pc2NfYXJy
YXlUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBcnJheVRvb2xzIl0uQnVpbGRB
cnJheSg1LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TWF0cml4Il0uSWRlbnRpdHkpOworICAgIHJldHVybiBCb25lOworfShfbm9kZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9Cb25lcy9ib25lSUtDb250cm9sbGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9Cb25lcy9ib25lSUtDb250cm9sbGVyLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IEJvbmVJS0NvbnRyb2xsZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiQm9uZUlLQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQm9uZUlLQ29udHJv
bGxlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguYXhpcyAqLyAiLi9N
YXRocy9tYXRoLmF4aXMudHMiKTsKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gYXBwbHkgaW52
ZXJzZSBraW5lbWF0aWNzIHRvIGJvbmVzCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNv
bS9ob3dfdG8vaG93X3RvX3VzZV9ib25lc19hbmRfc2tlbGV0b25zI2JvbmVpa2NvbnRyb2xsZXIK
KyAqLwordmFyIEJvbmVJS0NvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBCb25lSUtDb250cm9sbGVyCisgICAgICog
QHBhcmFtIG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0byBjb250cm9sCisgICAgICogQHBhcmFtIGJv
bmUgZGVmaW5lcyB0aGUgYm9uZSB0byBjb250cm9sCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVm
aW5lcyBvcHRpb25zIHRvIHNldCB1cCB0aGUgY29udHJvbGxlcgorICAgICAqLworICAgIGZ1bmN0
aW9uIEJvbmVJS0NvbnRyb2xsZXIobWVzaCwgYm9uZSwgb3B0aW9ucykgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSB0YXJnZXQgcG9zaXRpb24KKyAgICAgICAgICov
CisgICAgICAgIHRoaXMudGFyZ2V0UG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcG9sZSB0YXJnZXQgcG9zaXRpb24KKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMucG9sZVRhcmdldFBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHBvbGUgdGFyZ2V0IGxvY2FsIG9mZnNl
dAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5wb2xlVGFyZ2V0TG9jYWxPZmZzZXQgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlpl
cm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcG9sZSBhbmds
ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5wb2xlQW5nbGUgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogVGhlIGFtb3VudCB0byBzbGVycCAoc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBv
bGF0aW9uKSB0byB0aGUgdGFyZ2V0LiAgU2V0IHRoaXMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5k
IDEgKGEgdmFsdWUgb2YgMSBkaXNhYmxlcyBzbGVycCkKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuc2xlcnBBbW91bnQgPSAxOworICAgICAgICB0aGlzLl9ib25lMVF1YXQgPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLklkZW50
aXR5KCk7CisgICAgICAgIHRoaXMuX2JvbmUxTWF0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgICAgIHRo
aXMuX2JvbmUyQW5nID0gTWF0aC5QSTsKKyAgICAgICAgdGhpcy5fbWF4QW5nbGUgPSBNYXRoLlBJ
OworICAgICAgICB0aGlzLl9yaWdodEhhbmRlZFN5c3RlbSA9IGZhbHNlOworICAgICAgICB0aGlz
Ll9iZW5kQXhpcyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJWZWN0b3IzIl0uUmlnaHQoKTsKKyAgICAgICAgdGhpcy5fc2xlcnBpbmcgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fYWRqdXN0Um9sbCA9IDA7CisgICAgICAgIHRoaXMuX2JvbmUyID0gYm9u
ZTsKKyAgICAgICAgdGhpcy5fYm9uZTEgPSBib25lLmdldFBhcmVudCgpOworICAgICAgICBpZiAo
IXRoaXMuX2JvbmUxKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5tZXNoID0gbWVzaDsKKyAgICAgICAgdmFyIGJvbmVQb3MgPSBib25lLmdldFBvc2l0aW9u
KCk7CisgICAgICAgIGlmIChib25lLmdldEFic29sdXRlVHJhbnNmb3JtKCkuZGV0ZXJtaW5hbnQo
KSA+IDApIHsKKyAgICAgICAgICAgIHRoaXMuX3JpZ2h0SGFuZGVkU3lzdGVtID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHRoaXMuX2JlbmRBeGlzLnggPSAwOworICAgICAgICAgICAgdGhpcy5fYmVuZEF4
aXMueSA9IDA7CisgICAgICAgICAgICB0aGlzLl9iZW5kQXhpcy56ID0gLTE7CisgICAgICAgICAg
ICBpZiAoYm9uZVBvcy54ID4gYm9uZVBvcy55ICYmIGJvbmVQb3MueCA+IGJvbmVQb3Mueikgewor
ICAgICAgICAgICAgICAgIHRoaXMuX2FkanVzdFJvbGwgPSBNYXRoLlBJICogLjU7CisgICAgICAg
ICAgICAgICAgdGhpcy5fYmVuZEF4aXMueiA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuX2JvbmUxLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIGJvbmVT
Y2FsZTEgPSB0aGlzLl9ib25lMS5nZXRTY2FsZSgpOworICAgICAgICAgICAgdmFyIGJvbmVTY2Fs
ZTIgPSB0aGlzLl9ib25lMi5nZXRTY2FsZSgpOworICAgICAgICAgICAgdGhpcy5fYm9uZTFMZW5n
dGggPSB0aGlzLl9ib25lMS5sZW5ndGggKiBib25lU2NhbGUxLnkgKiB0aGlzLm1lc2guc2NhbGlu
Zy55OworICAgICAgICAgICAgdGhpcy5fYm9uZTJMZW5ndGggPSB0aGlzLl9ib25lMi5sZW5ndGgg
KiBib25lU2NhbGUyLnkgKiB0aGlzLm1lc2guc2NhbGluZy55OworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHRoaXMuX2JvbmUxLmNoaWxkcmVuWzBdKSB7CisgICAgICAgICAgICBtZXNoLmNv
bXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAgICAgICAgICAgIHZhciBwb3MxID0gdGhpcy5fYm9u
ZTIuY2hpbGRyZW5bMF0uZ2V0QWJzb2x1dGVQb3NpdGlvbihtZXNoKTsKKyAgICAgICAgICAgIHZh
ciBwb3MyID0gdGhpcy5fYm9uZTIuZ2V0QWJzb2x1dGVQb3NpdGlvbihtZXNoKTsKKyAgICAgICAg
ICAgIHZhciBwb3MzID0gdGhpcy5fYm9uZTEuZ2V0QWJzb2x1dGVQb3NpdGlvbihtZXNoKTsKKyAg
ICAgICAgICAgIHRoaXMuX2JvbmUxTGVuZ3RoID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5EaXN0YW5jZShwb3MxLCBwb3MyKTsKKyAg
ICAgICAgICAgIHRoaXMuX2JvbmUyTGVuZ3RoID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5EaXN0YW5jZShwb3MyLCBwb3MzKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9ib25lMS5nZXRSb3RhdGlvbk1hdHJpeFRvUmVmKF9NYXRo
c19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU3BhY2UiXS5XT1JMRCwg
bWVzaCwgdGhpcy5fYm9uZTFNYXQpOworICAgICAgICB0aGlzLm1heEFuZ2xlID0gTWF0aC5QSTsK
KyAgICAgICAgaWYgKG9wdGlvbnMpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLnRhcmdldE1l
c2gpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE1lc2ggPSBvcHRpb25zLnRhcmdldE1l
c2g7CisgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRNZXNoLmNvbXB1dGVXb3JsZE1hdHJpeCh0
cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnBvbGVUYXJnZXRN
ZXNoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5wb2xlVGFyZ2V0TWVzaCA9IG9wdGlvbnMucG9s
ZVRhcmdldE1lc2g7CisgICAgICAgICAgICAgICAgdGhpcy5wb2xlVGFyZ2V0TWVzaC5jb21wdXRl
V29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChv
cHRpb25zLnBvbGVUYXJnZXRCb25lKSB7CisgICAgICAgICAgICAgICAgdGhpcy5wb2xlVGFyZ2V0
Qm9uZSA9IG9wdGlvbnMucG9sZVRhcmdldEJvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmICh0aGlzLl9ib25lMS5nZXRQYXJlbnQoKSkgeworICAgICAgICAgICAgICAgIHRo
aXMucG9sZVRhcmdldEJvbmUgPSB0aGlzLl9ib25lMS5nZXRQYXJlbnQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnBvbGVUYXJnZXRMb2NhbE9mZnNldCkgeworICAg
ICAgICAgICAgICAgIHRoaXMucG9sZVRhcmdldExvY2FsT2Zmc2V0LmNvcHlGcm9tKG9wdGlvbnMu
cG9sZVRhcmdldExvY2FsT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChv
cHRpb25zLnBvbGVBbmdsZSkgeworICAgICAgICAgICAgICAgIHRoaXMucG9sZUFuZ2xlID0gb3B0
aW9ucy5wb2xlQW5nbGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3B0aW9ucy5i
ZW5kQXhpcykgeworICAgICAgICAgICAgICAgIHRoaXMuX2JlbmRBeGlzLmNvcHlGcm9tKG9wdGlv
bnMuYmVuZEF4aXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9wdGlvbnMubWF4
QW5nbGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm1heEFuZ2xlID0gb3B0aW9ucy5tYXhBbmds
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnNsZXJwQW1vdW50KSB7
CisgICAgICAgICAgICAgICAgdGhpcy5zbGVycEFtb3VudCA9IG9wdGlvbnMuc2xlcnBBbW91bnQ7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KEJvbmVJS0NvbnRyb2xsZXIucHJvdG90eXBlLCAibWF4QW5nbGUiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgbWF4aW11bSBhbGxvd2VkIGFuZ2xlCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9tYXhBbmdsZTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHRoaXMuX3NldE1heEFuZ2xlKHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgQm9uZUlLQ29udHJvbGxlci5wcm90b3R5cGUuX3NldE1heEFuZ2xlID0gZnVuY3Rpb24g
KGFuZykgeworICAgICAgICBpZiAoYW5nIDwgMCkgeworICAgICAgICAgICAgYW5nID0gMDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoYW5nID4gTWF0aC5QSSB8fCBhbmcgPT0gdW5kZWZpbmVkKSB7
CisgICAgICAgICAgICBhbmcgPSBNYXRoLlBJOworICAgICAgICB9CisgICAgICAgIHRoaXMuX21h
eEFuZ2xlID0gYW5nOworICAgICAgICB2YXIgYSA9IHRoaXMuX2JvbmUxTGVuZ3RoOworICAgICAg
ICB2YXIgYiA9IHRoaXMuX2JvbmUyTGVuZ3RoOworICAgICAgICB0aGlzLl9tYXhSZWFjaCA9IE1h
dGguc3FydChhICogYSArIGIgKiBiIC0gMiAqIGEgKiBiICogTWF0aC5jb3MoYW5nKSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSB0aGUgY29udHJvbGxlciB0byB1cGRhdGUgdGhlIGJv
bmVzCisgICAgICovCisgICAgQm9uZUlLQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgYm9uZTEgPSB0aGlzLl9ib25lMTsKKyAgICAgICAgaWYg
KCFib25lMSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciB0
YXJnZXQgPSB0aGlzLnRhcmdldFBvc2l0aW9uOworICAgICAgICB2YXIgcG9sZVRhcmdldCA9IHRo
aXMucG9sZVRhcmdldFBvc2l0aW9uOworICAgICAgICB2YXIgbWF0MSA9IEJvbmVJS0NvbnRyb2xs
ZXIuX3RtcE1hdHNbMF07CisgICAgICAgIHZhciBtYXQyID0gQm9uZUlLQ29udHJvbGxlci5fdG1w
TWF0c1sxXTsKKyAgICAgICAgaWYgKHRoaXMudGFyZ2V0TWVzaCkgeworICAgICAgICAgICAgdGFy
Z2V0LmNvcHlGcm9tKHRoaXMudGFyZ2V0TWVzaC5nZXRBYnNvbHV0ZVBvc2l0aW9uKCkpOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLnBvbGVUYXJnZXRCb25lKSB7CisgICAgICAgICAgICB0
aGlzLnBvbGVUYXJnZXRCb25lLmdldEFic29sdXRlUG9zaXRpb25Gcm9tTG9jYWxUb1JlZih0aGlz
LnBvbGVUYXJnZXRMb2NhbE9mZnNldCwgdGhpcy5tZXNoLCBwb2xlVGFyZ2V0KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmICh0aGlzLnBvbGVUYXJnZXRNZXNoKSB7CisgICAgICAgICAgICBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJd
LlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYodGhpcy5wb2xlVGFyZ2V0TG9jYWxPZmZzZXQsIHRo
aXMucG9sZVRhcmdldE1lc2guZ2V0V29ybGRNYXRyaXgoKSwgcG9sZVRhcmdldCk7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGJvbmVQb3MgPSBCb25lSUtDb250cm9sbGVyLl90bXBWZWNzWzBdOwor
ICAgICAgICB2YXIgemF4aXMgPSBCb25lSUtDb250cm9sbGVyLl90bXBWZWNzWzFdOworICAgICAg
ICB2YXIgeGF4aXMgPSBCb25lSUtDb250cm9sbGVyLl90bXBWZWNzWzJdOworICAgICAgICB2YXIg
eWF4aXMgPSBCb25lSUtDb250cm9sbGVyLl90bXBWZWNzWzNdOworICAgICAgICB2YXIgdXBBeGlz
ID0gQm9uZUlLQ29udHJvbGxlci5fdG1wVmVjc1s0XTsKKyAgICAgICAgdmFyIF90bXBRdWF0ID0g
Qm9uZUlLQ29udHJvbGxlci5fdG1wUXVhdDsKKyAgICAgICAgYm9uZTEuZ2V0QWJzb2x1dGVQb3Np
dGlvblRvUmVmKHRoaXMubWVzaCwgYm9uZVBvcyk7CisgICAgICAgIHBvbGVUYXJnZXQuc3VidHJh
Y3RUb1JlZihib25lUG9zLCB1cEF4aXMpOworICAgICAgICBpZiAodXBBeGlzLnggPT0gMCAmJiB1
cEF4aXMueSA9PSAwICYmIHVwQXhpcy56ID09IDApIHsKKyAgICAgICAgICAgIHVwQXhpcy55ID0g
MTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVwQXhpcy5ub3JtYWxp
emUoKTsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQuc3VidHJhY3RUb1JlZihib25lUG9zLCB5
YXhpcyk7CisgICAgICAgIHlheGlzLm5vcm1hbGl6ZSgpOworICAgICAgICBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkNyb3NzVG9SZWYo
eWF4aXMsIHVwQXhpcywgemF4aXMpOworICAgICAgICB6YXhpcy5ub3JtYWxpemUoKTsKKyAgICAg
ICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3Rv
cjMiXS5Dcm9zc1RvUmVmKHlheGlzLCB6YXhpcywgeGF4aXMpOworICAgICAgICB4YXhpcy5ub3Jt
YWxpemUoKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIk1hdHJpeCJdLkZyb21YWVpBeGVzVG9SZWYoeGF4aXMsIHlheGlzLCB6YXhpcywg
bWF0MSk7CisgICAgICAgIHZhciBhID0gdGhpcy5fYm9uZTFMZW5ndGg7CisgICAgICAgIHZhciBi
ID0gdGhpcy5fYm9uZTJMZW5ndGg7CisgICAgICAgIHZhciBjID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5EaXN0YW5jZShib25lUG9z
LCB0YXJnZXQpOworICAgICAgICBpZiAodGhpcy5fbWF4UmVhY2ggPiAwKSB7CisgICAgICAgICAg
ICBjID0gTWF0aC5taW4odGhpcy5fbWF4UmVhY2gsIGMpOworICAgICAgICB9CisgICAgICAgIHZh
ciBhY29zYSA9IChiICogYiArIGMgKiBjIC0gYSAqIGEpIC8gKDIgKiBiICogYyk7CisgICAgICAg
IHZhciBhY29zYiA9IChjICogYyArIGEgKiBhIC0gYiAqIGIpIC8gKDIgKiBjICogYSk7CisgICAg
ICAgIGlmIChhY29zYSA+IDEpIHsKKyAgICAgICAgICAgIGFjb3NhID0gMTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoYWNvc2IgPiAxKSB7CisgICAgICAgICAgICBhY29zYiA9IDE7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGFjb3NhIDwgLTEpIHsKKyAgICAgICAgICAgIGFjb3NhID0gLTE7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGFjb3NiIDwgLTEpIHsKKyAgICAgICAgICAgIGFjb3NiID0g
LTE7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGFuZ0EgPSBNYXRoLmFjb3MoYWNvc2EpOworICAg
ICAgICB2YXIgYW5nQiA9IE1hdGguYWNvcyhhY29zYik7CisgICAgICAgIHZhciBhbmdDID0gLWFu
Z0EgLSBhbmdCOworICAgICAgICBpZiAodGhpcy5fcmlnaHRIYW5kZWRTeXN0ZW0pIHsKKyAgICAg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJN
YXRyaXgiXS5Sb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKDAsIDAsIHRoaXMuX2FkanVzdFJvbGws
IG1hdDIpOworICAgICAgICAgICAgbWF0Mi5tdWx0aXBseVRvUmVmKG1hdDEsIG1hdDEpOworICAg
ICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Ik1hdHJpeCJdLlJvdGF0aW9uQXhpc1RvUmVmKHRoaXMuX2JlbmRBeGlzLCBhbmdCLCBtYXQyKTsK
KyAgICAgICAgICAgIG1hdDIubXVsdGlwbHlUb1JlZihtYXQxLCBtYXQxKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBfdG1wVmVjID0gQm9uZUlLQ29udHJvbGxl
ci5fdG1wVmVjc1s1XTsKKyAgICAgICAgICAgIF90bXBWZWMuY29weUZyb20odGhpcy5fYmVuZEF4
aXMpOworICAgICAgICAgICAgX3RtcFZlYy54ICo9IC0xOworICAgICAgICAgICAgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlJvdGF0aW9u
QXhpc1RvUmVmKF90bXBWZWMsIC1hbmdCLCBtYXQyKTsKKyAgICAgICAgICAgIG1hdDIubXVsdGlw
bHlUb1JlZihtYXQxLCBtYXQxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5wb2xlQW5n
bGUpIHsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJNYXRyaXgiXS5Sb3RhdGlvbkF4aXNUb1JlZih5YXhpcywgdGhpcy5wb2xlQW5n
bGUsIG1hdDIpOworICAgICAgICAgICAgbWF0MS5tdWx0aXBseVRvUmVmKG1hdDIsIG1hdDEpOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9ib25lMSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuc2xlcnBBbW91bnQgPCAxKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zbGVycGlu
ZykgeworICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLkZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKHRo
aXMuX2JvbmUxTWF0LCB0aGlzLl9ib25lMVF1YXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUXVhdGVybmlvbiJdLkZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKG1hdDEsIF90bXBRdWF0KTsK
KyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siUXVhdGVybmlvbiJdLlNsZXJwVG9SZWYodGhpcy5fYm9uZTFRdWF0LCBfdG1wUXVh
dCwgdGhpcy5zbGVycEFtb3VudCwgdGhpcy5fYm9uZTFRdWF0KTsKKyAgICAgICAgICAgICAgICBh
bmdDID0gdGhpcy5fYm9uZTJBbmcgKiAoMS4wIC0gdGhpcy5zbGVycEFtb3VudCkgKyBhbmdDICog
dGhpcy5zbGVycEFtb3VudDsKKyAgICAgICAgICAgICAgICB0aGlzLl9ib25lMS5zZXRSb3RhdGlv
blF1YXRlcm5pb24odGhpcy5fYm9uZTFRdWF0LCBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlNwYWNlIl0uV09STEQsIHRoaXMubWVzaCk7CisgICAgICAgICAg
ICAgICAgdGhpcy5fc2xlcnBpbmcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYm9uZTEuc2V0Um90YXRpb25NYXRyaXgobWF0
MSwgX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTcGFjZSJd
LldPUkxELCB0aGlzLm1lc2gpOworICAgICAgICAgICAgICAgIHRoaXMuX2JvbmUxTWF0LmNvcHlG
cm9tKG1hdDEpOworICAgICAgICAgICAgICAgIHRoaXMuX3NsZXJwaW5nID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYm9uZTIuc2V0QXhpc0FuZ2xlKHRo
aXMuX2JlbmRBeGlzLCBhbmdDLCBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlNwYWNlIl0uTE9DQUwpOworICAgICAgICB0aGlzLl9ib25lMkFuZyA9IGFuZ0M7
CisgICAgfTsKKyAgICBCb25lSUtDb250cm9sbGVyLl90bXBWZWNzID0gW19NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpLCBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlpl
cm8oKSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXS5aZXJvKCksIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0uWmVybygpLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKSwgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCldOworICAgIEJvbmVJ
S0NvbnRyb2xsZXIuX3RtcFF1YXQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLklkZW50aXR5KCk7CisgICAgQm9uZUlLQ29udHJv
bGxlci5fdG1wTWF0cyA9IFtfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTWF0cml4Il0uSWRlbnRpdHkoKSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLklkZW50aXR5KCldOworICAgIHJldHVybiBC
b25lSUtDb250cm9sbGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Cb25l
cy9ib25lTG9va0NvbnRyb2xsZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vQm9uZXMvYm9uZUxvb2tDb250cm9sbGVyLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogQm9uZUxvb2tDb250cm9sbGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkJvbmVMb29rQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQm9uZUxv
b2tDb250cm9sbGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19hcnJheVRv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NaXNjL2FycmF5VG9vbHMgKi8gIi4vTWlzYy9hcnJheVRvb2xzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAq
LyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguYXhpcyAqLyAiLi9NYXRocy9tYXRoLmF4aXMudHMi
KTsKKworCisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBtYWtlIGEgYm9uZSBsb29rIHRvd2FyZCBh
IHBvaW50IGluIHNwYWNlCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
aG93X3RvX3VzZV9ib25lc19hbmRfc2tlbGV0b25zI2JvbmVsb29rY29udHJvbGxlcgorICovCit2
YXIgQm9uZUxvb2tDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAg
IC8qKgorICAgICAqIENyZWF0ZSBhIEJvbmVMb29rQ29udHJvbGxlcgorICAgICAqIEBwYXJhbSBt
ZXNoIHRoZSBtZXNoIHRoYXQgdGhlIGJvbmUgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBib25l
IHRoZSBib25lIHRoYXQgd2lsbCBiZSBsb29raW5nIHRvIHRoZSB0YXJnZXQKKyAgICAgKiBAcGFy
YW0gdGFyZ2V0IHRoZSB0YXJnZXQgVmVjdG9yMyB0byBsb29rIGF0CisgICAgICogQHBhcmFtIG9w
dGlvbnMgb3B0aW9uYWwgc2V0dGluZ3M6CisgICAgICogKiBtYXhZYXc6IHRoZSBtYXhpbXVtIGFu
Z2xlIHRoZSBib25lIHdpbGwgeWF3IHRvCisgICAgICogKiBtaW5ZYXc6IHRoZSBtaW5pbXVtIGFu
Z2xlIHRoZSBib25lIHdpbGwgeWF3IHRvCisgICAgICogKiBtYXhQaXRjaDogdGhlIG1heGltdW0g
YW5nbGUgdGhlIGJvbmUgd2lsbCBwaXRjaCB0bworICAgICAqICogbWluUGl0Y2g6IHRoZSBtaW5p
bXVtIGFuZ2xlIHRoZSBib25lIHdpbGwgeWF3IHRvCisgICAgICogKiBzbGVycEFtb3VudDogc2V0
IHRoZSBiZXR3ZWVuIDAgYW5kIDEgdG8gbWFrZSB0aGUgYm9uZSBzbGVycCB0byB0aGUgdGFyZ2V0
LgorICAgICAqICogdXBBeGlzOiB0aGUgdXAgYXhpcyBvZiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0K
KyAgICAgKiAqIHVwQXhpc1NwYWNlOiB0aGUgc3BhY2UgdGhhdCB0aGUgdXAgYXhpcyBpcyBpbiAt
IFNwYWNlLkJPTkUsIFNwYWNlLkxPQ0FMIChkZWZhdWx0KSwgb3IgU3BhY2UuV09STEQuCisgICAg
ICogKiB5YXdBeGlzOiBzZXQgeWF3QXhpcyBpZiB0aGUgYm9uZSBkb2VzIG5vdCB5YXcgb24gdGhl
IHkgYXhpcworICAgICAqICogcGl0Y2hBeGlzOiBzZXQgcGl0Y2hBeGlzIGlmIHRoZSBib25lIGRv
ZXMgbm90IHBpdGNoIG9uIHRoZSB4IGF4aXMKKyAgICAgKiAqIGFkanVzdFlhdzogdXNlZCB0byBt
YWtlIGFuIGFkanVzdG1lbnQgdG8gdGhlIHlhdyBvZiB0aGUgYm9uZQorICAgICAqICogYWRqdXN0
UGl0Y2g6IHVzZWQgdG8gbWFrZSBhbiBhZGp1c3RtZW50IHRvIHRoZSBwaXRjaCBvZiB0aGUgYm9u
ZQorICAgICAqICogYWRqdXN0Um9sbDogdXNlZCB0byBtYWtlIGFuIGFkanVzdG1lbnQgdG8gdGhl
IHJvbGwgb2YgdGhlIGJvbmUKKyAgICAgKiovCisgICAgZnVuY3Rpb24gQm9uZUxvb2tDb250cm9s
bGVyKG1lc2gsIGJvbmUsIHRhcmdldCwgb3B0aW9ucykgeworICAgICAgICAvKioKKyAgICAgICAg
ICogVGhlIHVwIGF4aXMgb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIHRoYXQgaXMgdXNlZCB3aGVu
IHRoZSBib25lIGlzIHJvdGF0ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudXBBeGlzID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMi
XS5VcCgpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHNwYWNlIHRoYXQgdGhlIHVwIGF4
aXMgaXMgaW4gLSBTcGFjZS5CT05FLCBTcGFjZS5MT0NBTCAoZGVmYXVsdCksIG9yIFNwYWNlLldP
UkxECisgICAgICAgICAqLworICAgICAgICB0aGlzLnVwQXhpc1NwYWNlID0gX01hdGhzX21hdGhf
YXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTcGFjZSJdLkxPQ0FMOworICAgICAg
ICAvKioKKyAgICAgICAgICogVXNlZCB0byBtYWtlIGFuIGFkanVzdG1lbnQgdG8gdGhlIHlhdyBv
ZiB0aGUgYm9uZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5hZGp1c3RZYXcgPSAwOworICAg
ICAgICAvKioKKyAgICAgICAgICogVXNlZCB0byBtYWtlIGFuIGFkanVzdG1lbnQgdG8gdGhlIHBp
dGNoIG9mIHRoZSBib25lCisgICAgICAgICAqLworICAgICAgICB0aGlzLmFkanVzdFBpdGNoID0g
MDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzZWQgdG8gbWFrZSBhbiBhZGp1c3RtZW50IHRv
IHRoZSByb2xsIG9mIHRoZSBib25lCisgICAgICAgICAqLworICAgICAgICB0aGlzLmFkanVzdFJv
bGwgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGFtb3VudCB0byBzbGVycCAoc3Bo
ZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uKSB0byB0aGUgdGFyZ2V0LiAgU2V0IHRoaXMgdG8g
YSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgKGEgdmFsdWUgb2YgMSBkaXNhYmxlcyBzbGVycCkKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuc2xlcnBBbW91bnQgPSAxOworICAgICAgICB0aGlzLl9i
b25lUXVhdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJRdWF0ZXJuaW9uIl0uSWRlbnRpdHkoKTsKKyAgICAgICAgdGhpcy5fc2xlcnBpbmcgPSBmYWxz
ZTsKKyAgICAgICAgdGhpcy5fZmlyc3RGcmFtZVNraXBwZWQgPSBmYWxzZTsKKyAgICAgICAgdGhp
cy5fZm93YXJkQXhpcyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZWN0b3IzIl0uRm9yd2FyZCgpOworICAgICAgICB0aGlzLm1lc2ggPSBtZXNoOwor
ICAgICAgICB0aGlzLmJvbmUgPSBib25lOworICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDsK
KyAgICAgICAgaWYgKG9wdGlvbnMpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLmFkanVzdFlh
dykgeworICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0WWF3ID0gb3B0aW9ucy5hZGp1c3RZYXc7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3B0aW9ucy5hZGp1c3RQaXRjaCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0UGl0Y2ggPSBvcHRpb25zLmFkanVzdFBpdGNoOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWRqdXN0Um9sbCkgeworICAg
ICAgICAgICAgICAgIHRoaXMuYWRqdXN0Um9sbCA9IG9wdGlvbnMuYWRqdXN0Um9sbDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLm1heFlhdyAhPSBudWxsKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5tYXhZYXcgPSBvcHRpb25zLm1heFlhdzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMubWF4WWF3ID0gTWF0aC5Q
STsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLm1pbllhdyAhPSBudWxs
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5taW5ZYXcgPSBvcHRpb25zLm1pbllhdzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMubWluWWF3
ID0gLU1hdGguUEk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3B0aW9ucy5tYXhQ
aXRjaCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhpcy5tYXhQaXRjaCA9IG9wdGlvbnMu
bWF4UGl0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLm1heFBpdGNoID0gTWF0aC5QSTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChvcHRpb25zLm1pblBpdGNoICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm1p
blBpdGNoID0gb3B0aW9ucy5taW5QaXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHRoaXMubWluUGl0Y2ggPSAtTWF0aC5QSTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnNsZXJwQW1vdW50ICE9IG51bGwpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLnNsZXJwQW1vdW50ID0gb3B0aW9ucy5zbGVycEFtb3VudDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnVwQXhpcyAhPSBudWxsKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy51cEF4aXMgPSBvcHRpb25zLnVwQXhpczsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnVwQXhpc1NwYWNlICE9IG51bGwpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLnVwQXhpc1NwYWNlID0gb3B0aW9ucy51cEF4aXNTcGFjZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnlhd0F4aXMgIT0gbnVsbCB8fCBvcHRp
b25zLnBpdGNoQXhpcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdmFyIG5ld1lhd0F4aXMg
PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkF4aXMiXS5Z
OworICAgICAgICAgICAgICAgIHZhciBuZXdQaXRjaEF4aXMgPSBfTWF0aHNfbWF0aF9heGlzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkF4aXMiXS5YOworICAgICAgICAgICAgICAgIGlm
IChvcHRpb25zLnlhd0F4aXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBuZXdZYXdB
eGlzID0gb3B0aW9ucy55YXdBeGlzLmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgIG5ld1lh
d0F4aXMubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChvcHRpb25zLnBpdGNoQXhpcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld1Bp
dGNoQXhpcyA9IG9wdGlvbnMucGl0Y2hBeGlzLmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAg
IG5ld1BpdGNoQXhpcy5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgdmFyIG5ld1JvbGxBeGlzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Dcm9zcyhuZXdQaXRjaEF4aXMsIG5ld1lhd0F4aXMp
OworICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybVlhd1BpdGNoID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLklkZW50aXR5KCk7
CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk1hdHJpeCJdLkZyb21YWVpBeGVzVG9SZWYobmV3UGl0Y2hBeGlzLCBuZXdZYXdB
eGlzLCBuZXdSb2xsQXhpcywgdGhpcy5fdHJhbnNmb3JtWWF3UGl0Y2gpOworICAgICAgICAgICAg
ICAgIHRoaXMuX3RyYW5zZm9ybVlhd1BpdGNoSW52ID0gdGhpcy5fdHJhbnNmb3JtWWF3UGl0Y2gu
Y2xvbmUoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1ZYXdQaXRjaC5pbnZlcnQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWJvbmUuZ2V0UGFyZW50
KCkgJiYgdGhpcy51cEF4aXNTcGFjZSA9PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlNwYWNlIl0uQk9ORSkgeworICAgICAgICAgICAgdGhpcy51cEF4aXNT
cGFjZSA9IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU3Bh
Y2UiXS5MT0NBTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
Qm9uZUxvb2tDb250cm9sbGVyLnByb3RvdHlwZSwgIm1pbllhdyIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgbWluaW11bSB5YXcgYW5nbGUgdGhhdCB0aGUgYm9u
ZSBjYW4gbG9vayB0bworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fbWluWWF3OworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbWluWWF3ID0gdmFsdWU7Cisg
ICAgICAgICAgICB0aGlzLl9taW5ZYXdTaW4gPSBNYXRoLnNpbih2YWx1ZSk7CisgICAgICAgICAg
ICB0aGlzLl9taW5ZYXdDb3MgPSBNYXRoLmNvcyh2YWx1ZSk7CisgICAgICAgICAgICBpZiAodGhp
cy5fbWF4WWF3ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9taWRZYXdDb25zdHJh
aW50ID0gdGhpcy5fZ2V0QW5nbGVEaWZmKHRoaXMuX21pbllhdywgdGhpcy5fbWF4WWF3KSAqIC41
ICsgdGhpcy5fbWluWWF3OworICAgICAgICAgICAgICAgIHRoaXMuX3lhd1JhbmdlID0gdGhpcy5f
bWF4WWF3IC0gdGhpcy5fbWluWWF3OworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm9uZUxvb2tDb250cm9sbGVyLnByb3RvdHlwZSwg
Im1heFlhdyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgbWF4
aW11bSB5YXcgYW5nbGUgdGhhdCB0aGUgYm9uZSBjYW4gbG9vayB0bworICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4WWF3
OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAg
ICAgdGhpcy5fbWF4WWF3ID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9tYXhZYXdTaW4gPSBN
YXRoLnNpbih2YWx1ZSk7CisgICAgICAgICAgICB0aGlzLl9tYXhZYXdDb3MgPSBNYXRoLmNvcyh2
YWx1ZSk7CisgICAgICAgICAgICBpZiAodGhpcy5fbWluWWF3ICE9IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9taWRZYXdDb25zdHJhaW50ID0gdGhpcy5fZ2V0QW5nbGVEaWZmKHRoaXMu
X21pbllhdywgdGhpcy5fbWF4WWF3KSAqIC41ICsgdGhpcy5fbWluWWF3OworICAgICAgICAgICAg
ICAgIHRoaXMuX3lhd1JhbmdlID0gdGhpcy5fbWF4WWF3IC0gdGhpcy5fbWluWWF3OworICAgICAg
ICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm9u
ZUxvb2tDb250cm9sbGVyLnByb3RvdHlwZSwgIm1pblBpdGNoIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBtaW5pbXVtIHBpdGNoIGFuZ2xlIHRoYXQgdGhlIGJv
bmUgY2FuIGxvb2sgdG8KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21pblBpdGNoOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbWluUGl0Y2ggPSB2YWx1
ZTsKKyAgICAgICAgICAgIHRoaXMuX21pblBpdGNoVGFuID0gTWF0aC50YW4odmFsdWUpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm9uZUxvb2tDb250cm9s
bGVyLnByb3RvdHlwZSwgIm1heFBpdGNoIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBvciBzZXRzIHRoZSBtYXhpbXVtIHBpdGNoIGFuZ2xlIHRoYXQgdGhlIGJvbmUgY2FuIGxvb2sg
dG8KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX21heFBpdGNoOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbWF4UGl0Y2ggPSB2YWx1ZTsKKyAgICAgICAg
ICAgIHRoaXMuX21heFBpdGNoVGFuID0gTWF0aC50YW4odmFsdWUpOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGJvbmUgdG8gbG9vayBhdCB0aGUgdGFyZ2V0
LiAgVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGUgc2NlbmUgaXMgcmVuZGVyZWQgKHVz
ZSBzY2VuZS5yZWdpc3RlckJlZm9yZVJlbmRlcigpKQorICAgICAqLworICAgIEJvbmVMb29rQ29u
dHJvbGxlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvL3NraXAg
dGhlIGZpcnN0IGZyYW1lIHdoZW4gc2xlcnBpbmcgc28gdGhhdCB0aGUgbWVzaCByb3RhdGlvbiBp
cyBjb3JyZWN0CisgICAgICAgIGlmICh0aGlzLnNsZXJwQW1vdW50IDwgMSAmJiAhdGhpcy5fZmly
c3RGcmFtZVNraXBwZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2ZpcnN0RnJhbWVTa2lwcGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgYm9uZSA9
IHRoaXMuYm9uZTsKKyAgICAgICAgdmFyIGJvbmVQb3MgPSBCb25lTG9va0NvbnRyb2xsZXIuX3Rt
cFZlY3NbMF07CisgICAgICAgIGJvbmUuZ2V0QWJzb2x1dGVQb3NpdGlvblRvUmVmKHRoaXMubWVz
aCwgYm9uZVBvcyk7CisgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDsKKyAgICAgICAg
dmFyIF90bXBNYXQxID0gQm9uZUxvb2tDb250cm9sbGVyLl90bXBNYXRzWzBdOworICAgICAgICB2
YXIgX3RtcE1hdDIgPSBCb25lTG9va0NvbnRyb2xsZXIuX3RtcE1hdHNbMV07CisgICAgICAgIHZh
ciBtZXNoID0gdGhpcy5tZXNoOworICAgICAgICB2YXIgcGFyZW50Qm9uZSA9IGJvbmUuZ2V0UGFy
ZW50KCk7CisgICAgICAgIHZhciB1cEF4aXMgPSBCb25lTG9va0NvbnRyb2xsZXIuX3RtcFZlY3Nb
MV07CisgICAgICAgIHVwQXhpcy5jb3B5RnJvbSh0aGlzLnVwQXhpcyk7CisgICAgICAgIGlmICh0
aGlzLnVwQXhpc1NwYWNlID09IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siU3BhY2UiXS5CT05FICYmIHBhcmVudEJvbmUpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl90cmFuc2Zvcm1ZYXdQaXRjaCkgeworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29v
cmRpbmF0ZXNUb1JlZih1cEF4aXMsIHRoaXMuX3RyYW5zZm9ybVlhd1BpdGNoSW52LCB1cEF4aXMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50Qm9uZS5nZXREaXJlY3Rpb25Ub1Jl
Zih1cEF4aXMsIHRoaXMubWVzaCwgdXBBeGlzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
ICh0aGlzLnVwQXhpc1NwYWNlID09IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siU3BhY2UiXS5MT0NBTCkgeworICAgICAgICAgICAgbWVzaC5nZXREaXJlY3Rp
b25Ub1JlZih1cEF4aXMsIHVwQXhpcyk7CisgICAgICAgICAgICBpZiAobWVzaC5zY2FsaW5nLngg
IT0gMSB8fCBtZXNoLnNjYWxpbmcueSAhPSAxIHx8IG1lc2guc2NhbGluZy56ICE9IDEpIHsKKyAg
ICAgICAgICAgICAgICB1cEF4aXMubm9ybWFsaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGNoZWNrWWF3ID0gZmFsc2U7CisgICAgICAgIHZhciBjaGVja1BpdGNo
ID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlzLl9tYXhZYXcgIT0gTWF0aC5QSSB8fCB0aGlzLl9t
aW5ZYXcgIT0gLU1hdGguUEkpIHsKKyAgICAgICAgICAgIGNoZWNrWWF3ID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5fbWF4UGl0Y2ggIT0gTWF0aC5QSSB8fCB0aGlzLl9taW5Q
aXRjaCAhPSAtTWF0aC5QSSkgeworICAgICAgICAgICAgY2hlY2tQaXRjaCA9IHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNoZWNrWWF3IHx8IGNoZWNrUGl0Y2gpIHsKKyAgICAgICAgICAg
IHZhciBzcGFjZU1hdCA9IEJvbmVMb29rQ29udHJvbGxlci5fdG1wTWF0c1syXTsKKyAgICAgICAg
ICAgIHZhciBzcGFjZU1hdEludiA9IEJvbmVMb29rQ29udHJvbGxlci5fdG1wTWF0c1szXTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLnVwQXhpc1NwYWNlID09IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siU3BhY2UiXS5CT05FICYmIHVwQXhpcy55ID09IDEgJiYg
cGFyZW50Qm9uZSkgeworICAgICAgICAgICAgICAgIHBhcmVudEJvbmUuZ2V0Um90YXRpb25NYXRy
aXhUb1JlZihfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNw
YWNlIl0uV09STEQsIHRoaXMubWVzaCwgc3BhY2VNYXQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAodGhpcy51cEF4aXNTcGFjZSA9PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNwYWNlIl0uTE9DQUwgJiYgdXBBeGlzLnkgPT0gMSAm
JiAhcGFyZW50Qm9uZSkgeworICAgICAgICAgICAgICAgIHNwYWNlTWF0LmNvcHlGcm9tKG1lc2gu
Z2V0V29ybGRNYXRyaXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB2YXIgZm9yd2FyZEF4aXMgPSBCb25lTG9va0NvbnRyb2xsZXIuX3RtcFZl
Y3NbMl07CisgICAgICAgICAgICAgICAgZm9yd2FyZEF4aXMuY29weUZyb20odGhpcy5fZm93YXJk
QXhpcyk7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RyYW5zZm9ybVlhd1BpdGNoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihmb3J3YXJkQXhp
cywgdGhpcy5fdHJhbnNmb3JtWWF3UGl0Y2hJbnYsIGZvcndhcmRBeGlzKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudEJvbmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyZW50Qm9uZS5nZXREaXJlY3Rpb25Ub1JlZihmb3J3YXJkQXhpcywgdGhpcy5tZXNo
LCBmb3J3YXJkQXhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBtZXNoLmdldERpcmVjdGlvblRvUmVmKGZvcndhcmRBeGlz
LCBmb3J3YXJkQXhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBy
aWdodEF4aXMgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siVmVjdG9yMyJdLkNyb3NzKHVwQXhpcywgZm9yd2FyZEF4aXMpOworICAgICAgICAgICAgICAg
IHJpZ2h0QXhpcy5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICB2YXIgZm9yd2FyZEF4aXMg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9y
MyJdLkNyb3NzKHJpZ2h0QXhpcywgdXBBeGlzKTsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uRnJvbVhZWkF4
ZXNUb1JlZihyaWdodEF4aXMsIHVwQXhpcywgZm9yd2FyZEF4aXMsIHNwYWNlTWF0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHNwYWNlTWF0LmludmVydFRvUmVmKHNwYWNlTWF0SW52KTsK
KyAgICAgICAgICAgIHZhciB4emxlbiA9IG51bGw7CisgICAgICAgICAgICBpZiAoY2hlY2tQaXRj
aCkgeworICAgICAgICAgICAgICAgIHZhciBsb2NhbFRhcmdldCA9IEJvbmVMb29rQ29udHJvbGxl
ci5fdG1wVmVjc1szXTsKKyAgICAgICAgICAgICAgICB0YXJnZXQuc3VidHJhY3RUb1JlZihib25l
UG9zLCBsb2NhbFRhcmdldCk7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRl
c1RvUmVmKGxvY2FsVGFyZ2V0LCBzcGFjZU1hdEludiwgbG9jYWxUYXJnZXQpOworICAgICAgICAg
ICAgICAgIHh6bGVuID0gTWF0aC5zcXJ0KGxvY2FsVGFyZ2V0LnggKiBsb2NhbFRhcmdldC54ICsg
bG9jYWxUYXJnZXQueiAqIGxvY2FsVGFyZ2V0LnopOworICAgICAgICAgICAgICAgIHZhciBwaXRj
aCA9IE1hdGguYXRhbjIobG9jYWxUYXJnZXQueSwgeHpsZW4pOworICAgICAgICAgICAgICAgIHZh
ciBuZXdQaXRjaCA9IHBpdGNoOworICAgICAgICAgICAgICAgIGlmIChwaXRjaCA+IHRoaXMuX21h
eFBpdGNoKSB7CisgICAgICAgICAgICAgICAgICAgIGxvY2FsVGFyZ2V0LnkgPSB0aGlzLl9tYXhQ
aXRjaFRhbiAqIHh6bGVuOworICAgICAgICAgICAgICAgICAgICBuZXdQaXRjaCA9IHRoaXMuX21h
eFBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwaXRj
aCA8IHRoaXMuX21pblBpdGNoKSB7CisgICAgICAgICAgICAgICAgICAgIGxvY2FsVGFyZ2V0Lnkg
PSB0aGlzLl9taW5QaXRjaFRhbiAqIHh6bGVuOworICAgICAgICAgICAgICAgICAgICBuZXdQaXRj
aCA9IHRoaXMuX21pblBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAocGl0Y2ggIT0gbmV3UGl0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1D
b29yZGluYXRlc1RvUmVmKGxvY2FsVGFyZ2V0LCBzcGFjZU1hdCwgbG9jYWxUYXJnZXQpOworICAg
ICAgICAgICAgICAgICAgICBsb2NhbFRhcmdldC5hZGRJblBsYWNlKGJvbmVQb3MpOworICAgICAg
ICAgICAgICAgICAgICB0YXJnZXQgPSBsb2NhbFRhcmdldDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hlY2tZYXcpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgbG9jYWxUYXJnZXQgPSBCb25lTG9va0NvbnRyb2xsZXIuX3RtcFZlY3NbNF07CisgICAg
ICAgICAgICAgICAgdGFyZ2V0LnN1YnRyYWN0VG9SZWYoYm9uZVBvcywgbG9jYWxUYXJnZXQpOwor
ICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihsb2NhbFRhcmdldCwg
c3BhY2VNYXRJbnYsIGxvY2FsVGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB2YXIgeWF3ID0gTWF0
aC5hdGFuMihsb2NhbFRhcmdldC54LCBsb2NhbFRhcmdldC56KTsKKyAgICAgICAgICAgICAgICB2
YXIgbmV3WWF3ID0geWF3OworICAgICAgICAgICAgICAgIGlmICh5YXcgPiB0aGlzLl9tYXhZYXcg
fHwgeWF3IDwgdGhpcy5fbWluWWF3KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4emxlbiA9
PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4emxlbiA9IE1hdGguc3FydChsb2Nh
bFRhcmdldC54ICogbG9jYWxUYXJnZXQueCArIGxvY2FsVGFyZ2V0LnogKiBsb2NhbFRhcmdldC56
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5f
eWF3UmFuZ2UgPiBNYXRoLlBJKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5f
aXNBbmdsZUJldHdlZW4oeWF3LCB0aGlzLl9tYXhZYXcsIHRoaXMuX21pZFlhd0NvbnN0cmFpbnQp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxUYXJnZXQueiA9IHRoaXMuX21h
eFlhd0NvcyAqIHh6bGVuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsVGFyZ2V0
LnggPSB0aGlzLl9tYXhZYXdTaW4gKiB4emxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdZYXcgPSB0aGlzLl9tYXhZYXc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9pc0FuZ2xlQmV0d2Vlbih5YXcsIHRo
aXMuX21pZFlhd0NvbnN0cmFpbnQsIHRoaXMuX21pbllhdykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhbFRhcmdldC56ID0gdGhpcy5fbWluWWF3Q29zICogeHpsZW47CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxUYXJnZXQueCA9IHRoaXMuX21pbllhd1NpbiAq
IHh6bGVuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1lhdyA9IHRoaXMuX21pbllh
dzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5YXcg
PiB0aGlzLl9tYXhZYXcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFRhcmdl
dC56ID0gdGhpcy5fbWF4WWF3Q29zICogeHpsZW47CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9jYWxUYXJnZXQueCA9IHRoaXMuX21heFlhd1NpbiAqIHh6bGVuOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld1lhdyA9IHRoaXMuX21heFlhdzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHlhdyA8IHRoaXMuX21p
bllhdykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsVGFyZ2V0LnogPSB0aGlz
Ll9taW5ZYXdDb3MgKiB4emxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFRh
cmdldC54ID0gdGhpcy5fbWluWWF3U2luICogeHpsZW47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3WWF3ID0gdGhpcy5fbWluWWF3OworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9zbGVycGluZyAmJiB0aGlzLl95YXdSYW5nZSA+IE1hdGguUEkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy9hcmUgd2UgZ29pbmcgdG8gYmUgY3Jvc3NpbmcgaW50byB0aGUgbWlu
L21heCByZWdpb24/CisgICAgICAgICAgICAgICAgICAgIHZhciBib25lRndkID0gQm9uZUxvb2tD
b250cm9sbGVyLl90bXBWZWNzWzhdOworICAgICAgICAgICAgICAgICAgICBib25lRndkLmNvcHlG
cm9tKF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQXhpcyJd
LlopOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhbnNmb3JtWWF3UGl0Y2gpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihib25l
RndkLCB0aGlzLl90cmFuc2Zvcm1ZYXdQaXRjaEludiwgYm9uZUZ3ZCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGJvbmVSb3RNYXQgPSBCb25lTG9va0Nv
bnRyb2xsZXIuX3RtcE1hdHNbNF07CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JvbmVRdWF0
LnRvUm90YXRpb25NYXRyaXgoYm9uZVJvdE1hdCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
bWVzaC5nZXRXb3JsZE1hdHJpeCgpLm11bHRpcGx5VG9SZWYoYm9uZVJvdE1hdCwgYm9uZVJvdE1h
dCk7CisgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihib25l
RndkLCBib25lUm90TWF0LCBib25lRndkKTsKKyAgICAgICAgICAgICAgICAgICAgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zv
cm1Db29yZGluYXRlc1RvUmVmKGJvbmVGd2QsIHNwYWNlTWF0SW52LCBib25lRndkKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGJvbmVZYXcgPSBNYXRoLmF0YW4yKGJvbmVGd2QueCwgYm9uZUZ3
ZC56KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFuZ0J0d1RhciA9IHRoaXMuX2dldEFuZ2xl
QmV0d2Vlbihib25lWWF3LCB5YXcpOworICAgICAgICAgICAgICAgICAgICB2YXIgYW5nQnR3TWlk
WWF3ID0gdGhpcy5fZ2V0QW5nbGVCZXR3ZWVuKGJvbmVZYXcsIHRoaXMuX21pZFlhd0NvbnN0cmFp
bnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoYW5nQnR3VGFyID4gYW5nQnR3TWlkWWF3KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHpsZW4gPT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHh6bGVuID0gTWF0aC5zcXJ0KGxvY2FsVGFyZ2V0LnggKiBsb2Nh
bFRhcmdldC54ICsgbG9jYWxUYXJnZXQueiAqIGxvY2FsVGFyZ2V0LnopOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFuZ0J0d01heCA9IHRo
aXMuX2dldEFuZ2xlQmV0d2Vlbihib25lWWF3LCB0aGlzLl9tYXhZYXcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGFuZ0J0d01pbiA9IHRoaXMuX2dldEFuZ2xlQmV0d2Vlbihib25lWWF3
LCB0aGlzLl9taW5ZYXcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuZ0J0d01pbiA8
IGFuZ0J0d01heCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1lhdyA9IGJvbmVZ
YXcgKyBNYXRoLlBJICogLjc1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsVGFy
Z2V0LnogPSBNYXRoLmNvcyhuZXdZYXcpICogeHpsZW47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYWxUYXJnZXQueCA9IE1hdGguc2luKG5ld1lhdykgKiB4emxlbjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld1lhdyA9IGJvbmVZYXcgLSBNYXRoLlBJICogLjc1Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsVGFyZ2V0LnogPSBNYXRoLmNvcyhuZXdZ
YXcpICogeHpsZW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxUYXJnZXQueCA9
IE1hdGguc2luKG5ld1lhdykgKiB4emxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoeWF3ICE9IG5ld1lhdykgeworICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3Jk
aW5hdGVzVG9SZWYobG9jYWxUYXJnZXQsIHNwYWNlTWF0LCBsb2NhbFRhcmdldCk7CisgICAgICAg
ICAgICAgICAgICAgIGxvY2FsVGFyZ2V0LmFkZEluUGxhY2UoYm9uZVBvcyk7CisgICAgICAgICAg
ICAgICAgICAgIHRhcmdldCA9IGxvY2FsVGFyZ2V0OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgemF4aXMgPSBCb25lTG9va0NvbnRyb2xs
ZXIuX3RtcFZlY3NbNV07CisgICAgICAgIHZhciB4YXhpcyA9IEJvbmVMb29rQ29udHJvbGxlci5f
dG1wVmVjc1s2XTsKKyAgICAgICAgdmFyIHlheGlzID0gQm9uZUxvb2tDb250cm9sbGVyLl90bXBW
ZWNzWzddOworICAgICAgICB2YXIgX3RtcFF1YXQgPSBCb25lTG9va0NvbnRyb2xsZXIuX3RtcFF1
YXQ7CisgICAgICAgIHRhcmdldC5zdWJ0cmFjdFRvUmVmKGJvbmVQb3MsIHpheGlzKTsKKyAgICAg
ICAgemF4aXMubm9ybWFsaXplKCk7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZih1cEF4aXMsIHpheGlz
LCB4YXhpcyk7CisgICAgICAgIHhheGlzLm5vcm1hbGl6ZSgpOworICAgICAgICBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzVG9S
ZWYoemF4aXMsIHhheGlzLCB5YXhpcyk7CisgICAgICAgIHlheGlzLm5vcm1hbGl6ZSgpOworICAg
ICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0
cml4Il0uRnJvbVhZWkF4ZXNUb1JlZih4YXhpcywgeWF4aXMsIHpheGlzLCBfdG1wTWF0MSk7Cisg
ICAgICAgIGlmICh4YXhpcy54ID09PSAwICYmIHhheGlzLnkgPT09IDAgJiYgeGF4aXMueiA9PT0g
MCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh5YXhpcy54
ID09PSAwICYmIHlheGlzLnkgPT09IDAgJiYgeWF4aXMueiA9PT0gMCkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh6YXhpcy54ID09PSAwICYmIHpheGlzLnkg
PT09IDAgJiYgemF4aXMueiA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGlmICh0aGlzLmFkanVzdFlhdyB8fCB0aGlzLmFkanVzdFBpdGNoIHx8IHRoaXMu
YWRqdXN0Um9sbCkgeworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYodGhp
cy5hZGp1c3RZYXcsIHRoaXMuYWRqdXN0UGl0Y2gsIHRoaXMuYWRqdXN0Um9sbCwgX3RtcE1hdDIp
OworICAgICAgICAgICAgX3RtcE1hdDIubXVsdGlwbHlUb1JlZihfdG1wTWF0MSwgX3RtcE1hdDEp
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnNsZXJwQW1vdW50IDwgMSkgeworICAgICAg
ICAgICAgaWYgKCF0aGlzLl9zbGVycGluZykgeworICAgICAgICAgICAgICAgIHRoaXMuYm9uZS5n
ZXRSb3RhdGlvblF1YXRlcm5pb25Ub1JlZihfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlNwYWNlIl0uV09STEQsIHRoaXMubWVzaCwgdGhpcy5fYm9uZVF1YXQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX3RyYW5zZm9ybVlhd1BpdGNo
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtWWF3UGl0Y2gubXVsdGlwbHlUb1Jl
ZihfdG1wTWF0MSwgX3RtcE1hdDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlF1YXRlcm5pb24iXS5G
cm9tUm90YXRpb25NYXRyaXhUb1JlZihfdG1wTWF0MSwgX3RtcFF1YXQpOworICAgICAgICAgICAg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlF1YXRlcm5p
b24iXS5TbGVycFRvUmVmKHRoaXMuX2JvbmVRdWF0LCBfdG1wUXVhdCwgdGhpcy5zbGVycEFtb3Vu
dCwgdGhpcy5fYm9uZVF1YXQpOworICAgICAgICAgICAgdGhpcy5ib25lLnNldFJvdGF0aW9uUXVh
dGVybmlvbih0aGlzLl9ib25lUXVhdCwgX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJTcGFjZSJdLldPUkxELCB0aGlzLm1lc2gpOworICAgICAgICAgICAgdGhp
cy5fc2xlcnBpbmcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX3RyYW5zZm9ybVlhd1BpdGNoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
dHJhbnNmb3JtWWF3UGl0Y2gubXVsdGlwbHlUb1JlZihfdG1wTWF0MSwgX3RtcE1hdDEpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5ib25lLnNldFJvdGF0aW9uTWF0cml4KF90bXBN
YXQxLCBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNwYWNl
Il0uV09STEQsIHRoaXMubWVzaCk7CisgICAgICAgICAgICB0aGlzLl9zbGVycGluZyA9IGZhbHNl
OworICAgICAgICB9CisgICAgfTsKKyAgICBCb25lTG9va0NvbnRyb2xsZXIucHJvdG90eXBlLl9n
ZXRBbmdsZURpZmYgPSBmdW5jdGlvbiAoYW5nMSwgYW5nMikgeworICAgICAgICB2YXIgYW5nRGlm
ZiA9IGFuZzIgLSBhbmcxOworICAgICAgICBhbmdEaWZmICU9IE1hdGguUEkgKiAyOworICAgICAg
ICBpZiAoYW5nRGlmZiA+IE1hdGguUEkpIHsKKyAgICAgICAgICAgIGFuZ0RpZmYgLT0gTWF0aC5Q
SSAqIDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYW5nRGlmZiA8IC1NYXRoLlBJKSB7
CisgICAgICAgICAgICBhbmdEaWZmICs9IE1hdGguUEkgKiAyOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBhbmdEaWZmOworICAgIH07CisgICAgQm9uZUxvb2tDb250cm9sbGVyLnByb3RvdHlw
ZS5fZ2V0QW5nbGVCZXR3ZWVuID0gZnVuY3Rpb24gKGFuZzEsIGFuZzIpIHsKKyAgICAgICAgYW5n
MSAlPSAoMiAqIE1hdGguUEkpOworICAgICAgICBhbmcxID0gKGFuZzEgPCAwKSA/IGFuZzEgKyAo
MiAqIE1hdGguUEkpIDogYW5nMTsKKyAgICAgICAgYW5nMiAlPSAoMiAqIE1hdGguUEkpOworICAg
ICAgICBhbmcyID0gKGFuZzIgPCAwKSA/IGFuZzIgKyAoMiAqIE1hdGguUEkpIDogYW5nMjsKKyAg
ICAgICAgdmFyIGFiID0gMDsKKyAgICAgICAgaWYgKGFuZzEgPCBhbmcyKSB7CisgICAgICAgICAg
ICBhYiA9IGFuZzIgLSBhbmcxOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgYWIgPSBhbmcxIC0gYW5nMjsKKyAgICAgICAgfQorICAgICAgICBpZiAoYWIgPiBNYXRoLlBJ
KSB7CisgICAgICAgICAgICBhYiA9IE1hdGguUEkgKiAyIC0gYWI7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGFiOworICAgIH07CisgICAgQm9uZUxvb2tDb250cm9sbGVyLnByb3RvdHlwZS5f
aXNBbmdsZUJldHdlZW4gPSBmdW5jdGlvbiAoYW5nLCBhbmcxLCBhbmcyKSB7CisgICAgICAgIGFu
ZyAlPSAoMiAqIE1hdGguUEkpOworICAgICAgICBhbmcgPSAoYW5nIDwgMCkgPyBhbmcgKyAoMiAq
IE1hdGguUEkpIDogYW5nOworICAgICAgICBhbmcxICU9ICgyICogTWF0aC5QSSk7CisgICAgICAg
IGFuZzEgPSAoYW5nMSA8IDApID8gYW5nMSArICgyICogTWF0aC5QSSkgOiBhbmcxOworICAgICAg
ICBhbmcyICU9ICgyICogTWF0aC5QSSk7CisgICAgICAgIGFuZzIgPSAoYW5nMiA8IDApID8gYW5n
MiArICgyICogTWF0aC5QSSkgOiBhbmcyOworICAgICAgICBpZiAoYW5nMSA8IGFuZzIpIHsKKyAg
ICAgICAgICAgIGlmIChhbmcgPiBhbmcxICYmIGFuZyA8IGFuZzIpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChhbmcgPiBhbmcyICYmIGFuZyA8IGFuZzEpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfTsKKyAgICBCb25lTG9va0NvbnRyb2xsZXIuX3RtcFZlY3MgPSBfTWlz
Y19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFycmF5VG9vbHMiXS5C
dWlsZEFycmF5KDEwLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVjdG9yMyJdLlplcm8pOworICAgIEJvbmVMb29rQ29udHJvbGxlci5fdG1wUXVhdCA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJu
aW9uIl0uSWRlbnRpdHkoKTsKKyAgICBCb25lTG9va0NvbnRyb2xsZXIuX3RtcE1hdHMgPSBfTWlz
Y19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFycmF5VG9vbHMiXS5C
dWlsZEFycmF5KDUsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJNYXRyaXgiXS5JZGVudGl0eSk7CisgICAgcmV0dXJuIEJvbmVMb29rQ29udHJvbGxlcjsK
K30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQm9uZXMvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Cb25lcy9pbmRleC50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQm9u
ZSwgQm9uZUlLQ29udHJvbGxlciwgQm9uZUxvb2tDb250cm9sbGVyLCBTa2VsZXRvbiAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JvbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYm9uZSAqLyAiLi9C
b25lcy9ib25lLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvbmUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9ib25lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJvbmUiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm9uZUlLQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ib25lSUtDb250cm9sbGVy
ICovICIuL0JvbmVzL2JvbmVJS0NvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm9u
ZUlLQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2JvbmVJS0NvbnRyb2xsZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQm9uZUlLQ29udHJvbGxlciJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ib25lTG9va0NvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYm9uZUxvb2tDb250cm9s
bGVyICovICIuL0JvbmVzL2JvbmVMb29rQ29udHJvbGxlci50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJCb25lTG9va0NvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ib25lTG9va0NvbnRy
b2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQm9uZUxvb2tDb250cm9sbGVyIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NrZWxldG9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NrZWxldG9uICovICIu
L0JvbmVzL3NrZWxldG9uLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNrZWxldG9uIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfc2tlbGV0b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2tl
bGV0b24iXTsgfSk7CisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Cb25lcy9z
a2VsZXRvbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L0JvbmVzL3NrZWxldG9uLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBTa2VsZXRvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTa2VsZXRvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2tlbGV0b247IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ib25lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2JvbmUgKi8gIi4vQm9uZXMvYm9uZS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2Jz
ZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21h
dGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0
dXJlc19yYXdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmF3VGV4dHVyZSAqLyAiLi9NYXRl
cmlhbHMvVGV4dHVyZXMvcmF3VGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQW5pbWF0aW9ucy9hbmltYXRpb24gKi8gIi4vQW5pbWF0
aW9ucy9hbmltYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQW5pbWF0aW9u
c19hbmltYXRpb25SYW5nZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vQW5pbWF0aW9ucy9hbmltYXRpb25SYW5nZSAqLyAiLi9BbmltYXRp
b25zL2FuaW1hdGlvblJhbmdlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2lu
ZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvZW5naW5lU3RvcmUgKi8gIi4vRW5naW5lcy9lbmdpbmVT
dG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
RW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9n
Z2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVlcENvcGllcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlz
Yy9kZWVwQ29waWVyICovICIuL01pc2MvZGVlcENvcGllci50cyIpOworCisKKworCisKKworCisK
KworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gaGFuZGxlIHNraW5uaW5nIGFuaW1hdGlvbnMKKyAq
IEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2JvbmVzX2Fu
ZF9za2VsZXRvbnMKKyAqLwordmFyIFNrZWxldG9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgc2tlbGV0b24KKyAgICAgKiBAcGFy
YW0gbmFtZSBkZWZpbmVzIHRoZSBza2VsZXRvbiBuYW1lCisgICAgICogQHBhcmFtIGlkIGRlZmlu
ZXMgdGhlIHNrZWxldG9uIElkCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rp
bmcgc2NlbmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTa2VsZXRvbigKKyAgICAvKiogZGVmaW5l
cyB0aGUgc2tlbGV0b24gbmFtZSAqLworICAgIG5hbWUsIAorICAgIC8qKiBkZWZpbmVzIHRoZSBz
a2VsZXRvbiBJZCAqLworICAgIGlkLCBzY2VuZSkgeworICAgICAgICB0aGlzLm5hbWUgPSBuYW1l
OworICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVz
IHRoZSBsaXN0IG9mIGNoaWxkIGJvbmVzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmJvbmVz
ID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIGEgYm9vbGVh
biBpbmRpY2F0aW5nIGlmIHRoZSByb290IG1hdHJpeCBpcyBwcm92aWRlZCBieSBtZXNoZXMgb3Ig
YnkgdGhlIGN1cnJlbnQgc2tlbGV0b24gKHRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUpCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLm5lZWRJbml0aWFsU2tpbk1hdHJpeCA9IGZhbHNlOworICAg
ICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBhIG1lc2ggdGhhdCBvdmVycmlkZSB0aGUgbWF0
cml4IHVzZWQgdG8gZ2V0IHRoZSB3b3JsZCBtYXRyaXggKG51bGwgYnkgZGVmYXVsdCkuCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLm92ZXJyaWRlTWVzaCA9IG51bGw7CisgICAgICAgIHRoaXMu
X2lzRGlydHkgPSB0cnVlOworICAgICAgICB0aGlzLl9tZXNoZXNXaXRoUG9zZU1hdHJpeCA9IG5l
dyBBcnJheSgpOworICAgICAgICB0aGlzLl9pZGVudGl0eSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNYXRyaXgiXS5JZGVudGl0eSgpOworICAgICAg
ICB0aGlzLl9yYW5nZXMgPSB7fTsKKyAgICAgICAgdGhpcy5fbGFzdEFic29sdXRlVHJhbnNmb3Jt
c1VwZGF0ZUlkID0gLTE7CisgICAgICAgIHRoaXMuX2NhblVzZVRleHR1cmVGb3JCb25lcyA9IGZh
bHNlOworICAgICAgICB0aGlzLl91bmlxdWVJZCA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIHRoaXMuX251bUJvbmVzV2l0aExpbmtlZFRyYW5zZm9ybU5vZGUgPSAwOworICAg
ICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9oYXNXYWl0aW5nRGF0YSA9IG51bGw7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIHNrZWxldG9uIHNob3Vs
ZCBiZSBzZXJpYWxpemVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLmRvTm90U2VyaWFsaXpl
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3VzZVRleHR1cmVUb1N0b3JlQm9uZU1hdHJpY2VzID0g
dHJ1ZTsKKyAgICAgICAgdGhpcy5fYW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlID0gbnVsbDsK
KyAgICAgICAgLy8gRXZlbnRzCisgICAgICAgIC8qKgorICAgICAgICAgKiBBbiBvYnNlcnZhYmxl
IHRyaWdnZXJlZCBiZWZvcmUgY29tcHV0aW5nIHRoZSBza2VsZXRvbidzIG1hdHJpY2VzCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLm9uQmVmb3JlQ29tcHV0ZU9ic2VydmFibGUgPSBuZXcgX01p
c2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0o
KTsKKyAgICAgICAgdGhpcy5ib25lcyA9IFtdOworICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5l
IHx8IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkVu
Z2luZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZTsKKyAgICAgICAgdGhpcy5fdW5pcXVlSWQgPSB0
aGlzLl9zY2VuZS5nZXRVbmlxdWVJZCgpOworICAgICAgICB0aGlzLl9zY2VuZS5hZGRTa2VsZXRv
bih0aGlzKTsKKyAgICAgICAgLy9tYWtlIHN1cmUgaXQgd2lsbCByZWNhbGN1bGF0ZSB0aGUgbWF0
cml4IG5leHQgdGltZSBwcmVwYXJlIGlzIGNhbGxlZC4KKyAgICAgICAgdGhpcy5faXNEaXJ0eSA9
IHRydWU7CisgICAgICAgIHZhciBlbmdpbmVDYXBzID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCku
Z2V0Q2FwcygpOworICAgICAgICB0aGlzLl9jYW5Vc2VUZXh0dXJlRm9yQm9uZXMgPSBlbmdpbmVD
YXBzLnRleHR1cmVGbG9hdCAmJiBlbmdpbmVDYXBzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRz
ID4gMDsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNrZWxldG9uLnByb3RvdHlw
ZSwgInVzZVRleHR1cmVUb1N0b3JlQm9uZU1hdHJpY2VzIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgYm9uZSBtYXRyaWNl
cyBzaG91bGQgYmUgc3RvcmVkIGFzIGEgdGV4dHVyZSBpbnN0ZWFkIG9mIHVzaW5nIHNoYWRlciB1
bmlmb3JtcyAoZGVmYXVsdCBpcyB0cnVlKS4KKyAgICAgICAgICogUGxlYXNlIG5vdGUgdGhhdCB0
aGlzIG9wdGlvbiBpcyBub3QgYXZhaWxhYmxlIGlmIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzdXBw
b3J0IGl0CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl91c2VUZXh0dXJlVG9TdG9yZUJvbmVNYXRyaWNlczsKKyAgICAgICAg
fSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3Vz
ZVRleHR1cmVUb1N0b3JlQm9uZU1hdHJpY2VzID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9t
YXJrQXNEaXJ0eSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoU2tlbGV0b24ucHJvdG90eXBlLCAiYW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBhbmltYXRpb24gcHJvcGVy
dGllcyBvdmVycmlkZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBpZiAoIXRoaXMuX2FuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZS5hbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJp
ZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5pbWF0aW9uUHJv
cGVydGllc092ZXJyaWRlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlID0gdmFs
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTa2VsZXRv
bi5wcm90b3R5cGUsICJpc1VzaW5nVGV4dHVyZUZvck1hdHJpY2VzIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBza2VsZXRvbiBl
ZmZlY3RpdmVseSBzdG9yZXMgbWF0cmljZXMgaW50byBhIHRleHR1cmUKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlVGV4
dHVyZVRvU3RvcmVCb25lTWF0cmljZXMgJiYgdGhpcy5fY2FuVXNlVGV4dHVyZUZvckJvbmVzOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2tlbGV0b24ucHJv
dG90eXBlLCAidW5pcXVlSWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB1
bmlxdWUgSUQgb2YgdGhpcyBza2VsZXRvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdW5pcXVlSWQ7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgb2JqZWN0IGNsYXNzIG5h
bWUuCisgICAgICogQHJldHVybiB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFNrZWxldG9u
LnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAi
U2tlbGV0b24iOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBhcnJheSBjb250
YWluaW5nIHRoZSByb290IGJvbmVzCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgY29udGFpbmlu
ZyB0aGUgcm9vdCBib25lcworICAgICAqLworICAgIFNrZWxldG9uLnByb3RvdHlwZS5nZXRDaGls
ZHJlbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYm9uZXMuZmlsdGVyKGZ1
bmN0aW9uIChiKSB7IHJldHVybiAhYi5nZXRQYXJlbnQoKTsgfSk7CisgICAgfTsKKyAgICAvLyBN
ZW1iZXJzCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGlzdCBvZiB0cmFuc2Zvcm0gbWF0cmlj
ZXMgdG8gc2VuZCB0byBzaGFkZXJzIChvbmUgbWF0cml4IHBlciBib25lKQorICAgICAqIEBwYXJh
bSBtZXNoIGRlZmluZXMgdGhlIG1lc2ggdG8gdXNlIHRvIGdldCB0aGUgcm9vdCBtYXRyaXggKGlm
IG5lZWRJbml0aWFsU2tpbk1hdHJpeCA9PT0gdHJ1ZSkKKyAgICAgKiBAcmV0dXJucyBhIEZsb2F0
MzJBcnJheSBjb250YWluaW5nIG1hdHJpY2VzIGRhdGEKKyAgICAgKi8KKyAgICBTa2VsZXRvbi5w
cm90b3R5cGUuZ2V0VHJhbnNmb3JtTWF0cmljZXMgPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAg
ICBpZiAodGhpcy5uZWVkSW5pdGlhbFNraW5NYXRyaXggJiYgbWVzaC5fYm9uZXNUcmFuc2Zvcm1N
YXRyaWNlcykgeworICAgICAgICAgICAgcmV0dXJuIG1lc2guX2JvbmVzVHJhbnNmb3JtTWF0cmlj
ZXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl90cmFuc2Zvcm1NYXRyaWNlcykgewor
ICAgICAgICAgICAgdGhpcy5wcmVwYXJlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXMuX3RyYW5zZm9ybU1hdHJpY2VzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
bGlzdCBvZiB0cmFuc2Zvcm0gbWF0cmljZXMgdG8gc2VuZCB0byBzaGFkZXJzIGluc2lkZSBhIHRl
eHR1cmUgKG9uZSBtYXRyaXggcGVyIGJvbmUpCisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5lcyB0
aGUgbWVzaCB0byB1c2UgdG8gZ2V0IHRoZSByb290IG1hdHJpeCAoaWYgbmVlZEluaXRpYWxTa2lu
TWF0cml4ID09PSB0cnVlKQorICAgICAqIEByZXR1cm5zIGEgcmF3IHRleHR1cmUgY29udGFpbmlu
ZyB0aGUgZGF0YQorICAgICAqLworICAgIFNrZWxldG9uLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1N
YXRyaXhUZXh0dXJlID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKHRoaXMubmVlZElu
aXRpYWxTa2luTWF0cml4ICYmIG1lc2guX3RyYW5zZm9ybU1hdHJpeFRleHR1cmUpIHsKKyAgICAg
ICAgICAgIHJldHVybiBtZXNoLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlOworICAgIH07CisgICAg
LyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVy
bnMgYSBzY2VuZSBvYmplY3QKKyAgICAgKi8KKyAgICBTa2VsZXRvbi5wcm90b3R5cGUuZ2V0U2Nl
bmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZTsKKyAgICB9Owor
ICAgIC8vIE1ldGhvZHMKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc3RyaW5nIHJlcHJlc2VudGlu
ZyB0aGUgY3VycmVudCBza2VsZXRvbiBkYXRhCisgICAgICogQHBhcmFtIGZ1bGxEZXRhaWxzIGRl
ZmluZXMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgd2Ugd2FudCBhIHZlcmJvc2UgdmVyc2lvbgor
ICAgICAqIEByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBza2VsZXRv
biBkYXRhCisgICAgICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rp
b24gKGZ1bGxEZXRhaWxzKSB7CisgICAgICAgIHZhciByZXQgPSAiTmFtZTogIiArIHRoaXMubmFt
ZSArICIsIG5Cb25lczogIiArIHRoaXMuYm9uZXMubGVuZ3RoOworICAgICAgICByZXQgKz0gIiwg
bkFuaW1hdGlvblJhbmdlczogIiArICh0aGlzLl9yYW5nZXMgPyBPYmplY3Qua2V5cyh0aGlzLl9y
YW5nZXMpLmxlbmd0aCA6ICJub25lIik7CisgICAgICAgIGlmIChmdWxsRGV0YWlscykgeworICAg
ICAgICAgICAgcmV0ICs9ICIsIFJhbmdlczogeyI7CisgICAgICAgICAgICB2YXIgZmlyc3QgPSB0
cnVlOworICAgICAgICAgICAgZm9yICh2YXIgbmFtZV8xIGluIHRoaXMuX3JhbmdlcykgeworICAg
ICAgICAgICAgICAgIGlmIChmaXJzdCkgeworICAgICAgICAgICAgICAgICAgICByZXQgKz0gIiwg
IjsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0ICs9IG5hbWVfMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldCArPSAifSI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9Owor
ICAgIC8qKgorICAgICogR2V0IGJvbmUncyBpbmRleCBzZWFyY2hpbmcgYnkgbmFtZQorICAgICog
QHBhcmFtIG5hbWUgZGVmaW5lcyBib25lJ3MgbmFtZSB0byBzZWFyY2ggZm9yCisgICAgKiBAcmV0
dXJuIHRoZSBpbmRpY2Ugb2YgdGhlIGJvbmUuIFJldHVybnMgLTEgaWYgbm90IGZvdW5kCisgICAg
Ki8KKyAgICBTa2VsZXRvbi5wcm90b3R5cGUuZ2V0Qm9uZUluZGV4QnlOYW1lID0gZnVuY3Rpb24g
KG5hbWUpIHsKKyAgICAgICAgZm9yICh2YXIgYm9uZUluZGV4ID0gMCwgY2FjaGUgPSB0aGlzLmJv
bmVzLmxlbmd0aDsgYm9uZUluZGV4IDwgY2FjaGU7IGJvbmVJbmRleCsrKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5ib25lc1tib25lSW5kZXhdLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYm9uZUluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiAtMTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXIgYSBuZXcgYW5pbWF0
aW9uIHJhbmdlCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgcmFu
Z2UKKyAgICAgKiBAcGFyYW0gZnJvbSBkZWZpbmVzIHRoZSBzdGFydCBrZXkKKyAgICAgKiBAcGFy
YW0gdG8gZGVmaW5lcyB0aGUgZW5kIGtleQorICAgICAqLworICAgIFNrZWxldG9uLnByb3RvdHlw
ZS5jcmVhdGVBbmltYXRpb25SYW5nZSA9IGZ1bmN0aW9uIChuYW1lLCBmcm9tLCB0bykgeworICAg
ICAgICAvLyBjaGVjayBuYW1lIG5vdCBhbHJlYWR5IGluIHVzZQorICAgICAgICBpZiAoIXRoaXMu
X3Jhbmdlc1tuYW1lXSkgeworICAgICAgICAgICAgdGhpcy5fcmFuZ2VzW25hbWVdID0gbmV3IF9B
bmltYXRpb25zX2FuaW1hdGlvblJhbmdlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkFu
aW1hdGlvblJhbmdlIl0obmFtZSwgZnJvbSwgdG8pOworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDAsIG5Cb25lcyA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgbkJvbmVzOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy5ib25lc1tpXS5hbmltYXRpb25zWzBdKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuYm9uZXNbaV0uYW5pbWF0aW9uc1swXS5jcmVhdGVSYW5nZShuYW1lLCBm
cm9tLCB0byk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWxldGUgYSBzcGVjaWZpYyBhbmltYXRpb24gcmFuZ2UK
KyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSByYW5nZQorICAgICAq
IEBwYXJhbSBkZWxldGVGcmFtZXMgZGVmaW5lcyBpZiBmcmFtZXMgbXVzdCBiZSByZW1vdmVkIGFz
IHdlbGwKKyAgICAgKi8KKyAgICBTa2VsZXRvbi5wcm90b3R5cGUuZGVsZXRlQW5pbWF0aW9uUmFu
Z2UgPSBmdW5jdGlvbiAobmFtZSwgZGVsZXRlRnJhbWVzKSB7CisgICAgICAgIGlmIChkZWxldGVG
cmFtZXMgPT09IHZvaWQgMCkgeyBkZWxldGVGcmFtZXMgPSB0cnVlOyB9CisgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBuQm9uZXMgPSB0aGlzLmJvbmVzLmxlbmd0aDsgaSA8IG5Cb25lczsgaSsrKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5ib25lc1tpXS5hbmltYXRpb25zWzBdKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5ib25lc1tpXS5hbmltYXRpb25zWzBdLmRlbGV0ZVJhbmdlKG5hbWUsIGRl
bGV0ZUZyYW1lcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmFu
Z2VzW25hbWVdID0gbnVsbDsgLy8gc2FpZCBtdWNoIGZhc3RlciB0aGFuICdkZWxldGUgdGhpcy5f
cmFuZ2VbbmFtZV0nCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc3BlY2lmaWMgYW5p
bWF0aW9uIHJhbmdlCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUg
cmFuZ2UgdG8gbG9vayBmb3IKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVxdWVzdGVkIGFuaW1hdGlv
biByYW5nZSBvciBudWxsIGlmIG5vdCBmb3VuZAorICAgICAqLworICAgIFNrZWxldG9uLnByb3Rv
dHlwZS5nZXRBbmltYXRpb25SYW5nZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHJldHVy
biB0aGlzLl9yYW5nZXNbbmFtZV07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBs
aXN0IG9mIGFsbCBhbmltYXRpb24gcmFuZ2VzIGRlZmluZWQgb24gdGhpcyBza2VsZXRvbgorICAg
ICAqIEByZXR1cm5zIGFuIGFycmF5CisgICAgICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLmdl
dEFuaW1hdGlvblJhbmdlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGFuaW1hdGlvblJh
bmdlcyA9IFtdOworICAgICAgICB2YXIgbmFtZTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMu
X3JhbmdlcykgeworICAgICAgICAgICAgYW5pbWF0aW9uUmFuZ2VzLnB1c2godGhpcy5fcmFuZ2Vz
W25hbWVdKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYW5pbWF0aW9uUmFuZ2VzOworICAg
IH07CisgICAgLyoqCisgICAgICogQ29weSBhbmltYXRpb24gcmFuZ2UgZnJvbSBhIHNvdXJjZSBz
a2VsZXRvbi4KKyAgICAgKiBUaGlzIGlzIG5vdCBmb3IgYSBjb21wbGV0ZSByZXRhcmdldGluZywg
b25seSBiZXR3ZWVuIHZlcnkgc2ltaWxhciBza2VsZXRvbidzIHdpdGggb25seSBwb3NzaWJsZSBi
b25lIGxlbmd0aCBkaWZmZXJlbmNlcworICAgICAqIEBwYXJhbSBzb3VyY2UgZGVmaW5lcyB0aGUg
c291cmNlIHNrZWxldG9uCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0
aGUgcmFuZ2UgdG8gY29weQorICAgICAqIEBwYXJhbSByZXNjYWxlQXNSZXF1aXJlZCBkZWZpbmVz
IGlmIHJlc2NhbGluZyBtdXN0IGJlIGFwcGxpZWQgaWYgcmVxdWlyZWQKKyAgICAgKiBAcmV0dXJu
cyB0cnVlIGlmIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bAorICAgICAqLworICAgIFNrZWxldG9u
LnByb3RvdHlwZS5jb3B5QW5pbWF0aW9uUmFuZ2UgPSBmdW5jdGlvbiAoc291cmNlLCBuYW1lLCBy
ZXNjYWxlQXNSZXF1aXJlZCkgeworICAgICAgICBpZiAocmVzY2FsZUFzUmVxdWlyZWQgPT09IHZv
aWQgMCkgeyByZXNjYWxlQXNSZXF1aXJlZCA9IGZhbHNlOyB9CisgICAgICAgIGlmICh0aGlzLl9y
YW5nZXNbbmFtZV0gfHwgIXNvdXJjZS5nZXRBbmltYXRpb25SYW5nZShuYW1lKSkgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHZhciByZXQgPSB0cnVlOwor
ICAgICAgICB2YXIgZnJhbWVPZmZzZXQgPSB0aGlzLl9nZXRIaWdoZXN0QW5pbWF0aW9uRnJhbWUo
KSArIDE7CisgICAgICAgIC8vIG1ha2UgYSBkaWN0aW9uYXJ5IG9mIHNvdXJjZSBza2VsZXRvbidz
IGJvbmVzLCBzbyBleGFjdCBzYW1lIG9yZGVyIG9yIGRvdWJsZWx5IG5lc3RlZCBsb29wIGlzIG5v
dCByZXF1aXJlZAorICAgICAgICB2YXIgYm9uZURpY3QgPSB7fTsKKyAgICAgICAgdmFyIHNvdXJj
ZUJvbmVzID0gc291cmNlLmJvbmVzOworICAgICAgICB2YXIgbkJvbmVzOworICAgICAgICB2YXIg
aTsKKyAgICAgICAgZm9yIChpID0gMCwgbkJvbmVzID0gc291cmNlQm9uZXMubGVuZ3RoOyBpIDwg
bkJvbmVzOyBpKyspIHsKKyAgICAgICAgICAgIGJvbmVEaWN0W3NvdXJjZUJvbmVzW2ldLm5hbWVd
ID0gc291cmNlQm9uZXNbaV07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuYm9uZXMubGVu
Z3RoICE9PSBzb3VyY2VCb25lcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJMb2dnZXIiXS5XYXJuKCJjb3B5QW5pbWF0aW9u
UmFuZ2U6IHRoaXMgcmlnIGhhcyAiICsgdGhpcy5ib25lcy5sZW5ndGggKyAiIGJvbmVzLCB3aGls
ZSBzb3VyY2UgYXMgIiArIHNvdXJjZUJvbmVzLmxlbmd0aCk7CisgICAgICAgICAgICByZXQgPSBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2tlbERpbWVuc2lvbnNSYXRpbyA9IChyZXNj
YWxlQXNSZXF1aXJlZCAmJiB0aGlzLmRpbWVuc2lvbnNBdFJlc3QgJiYgc291cmNlLmRpbWVuc2lv
bnNBdFJlc3QpID8gdGhpcy5kaW1lbnNpb25zQXRSZXN0LmRpdmlkZShzb3VyY2UuZGltZW5zaW9u
c0F0UmVzdCkgOiBudWxsOworICAgICAgICBmb3IgKGkgPSAwLCBuQm9uZXMgPSB0aGlzLmJvbmVz
Lmxlbmd0aDsgaSA8IG5Cb25lczsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYm9uZU5hbWUgPSB0
aGlzLmJvbmVzW2ldLm5hbWU7CisgICAgICAgICAgICB2YXIgc291cmNlQm9uZSA9IGJvbmVEaWN0
W2JvbmVOYW1lXTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VCb25lKSB7CisgICAgICAgICAgICAg
ICAgcmV0ID0gcmV0ICYmIHRoaXMuYm9uZXNbaV0uY29weUFuaW1hdGlvblJhbmdlKHNvdXJjZUJv
bmUsIG5hbWUsIGZyYW1lT2Zmc2V0LCByZXNjYWxlQXNSZXF1aXJlZCwgc2tlbERpbWVuc2lvbnNS
YXRpbyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTG9nZ2VyIl0uV2Fy
bigiY29weUFuaW1hdGlvblJhbmdlOiBub3Qgc2FtZSByaWcsIG1pc3Npbmcgc291cmNlIGJvbmUg
IiArIGJvbmVOYW1lKTsKKyAgICAgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAvLyBkbyBub3QgY2FsbCBjcmVhdGVBbmltYXRpb25SYW5n
ZSgpLCBzaW5jZSBpdCBhbHNvIGlzIGRvbmUgdG8gYm9uZXMsIHdoaWNoIHdhcyBhbHJlYWR5IGRv
bmUKKyAgICAgICAgdmFyIHJhbmdlID0gc291cmNlLmdldEFuaW1hdGlvblJhbmdlKG5hbWUpOwor
ICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgIHRoaXMuX3Jhbmdlc1tuYW1lXSA9IG5l
dyBfQW5pbWF0aW9uc19hbmltYXRpb25SYW5nZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJBbmltYXRpb25SYW5nZSJdKG5hbWUsIHJhbmdlLmZyb20gKyBmcmFtZU9mZnNldCwgcmFuZ2Uu
dG8gKyBmcmFtZU9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEZvcmNlcyB0aGUgc2tlbGV0b24gdG8gZ28gdG8gcmVzdCBwb3Nl
CisgICAgICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLnJldHVyblRvUmVzdCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYm9uZXMubGVu
Z3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB0aGlzLmJvbmVzW2luZGV4XS5yZXR1cm5Ub1Jl
c3QoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgU2tlbGV0b24ucHJvdG90eXBlLl9nZXRIaWdo
ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciByZXQgPSAwOwor
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbkJvbmVzID0gdGhpcy5ib25lcy5sZW5ndGg7IGkgPCBu
Qm9uZXM7IGkrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuYm9uZXNbaV0uYW5pbWF0aW9uc1sw
XSkgeworICAgICAgICAgICAgICAgIHZhciBoaWdoZXN0ID0gdGhpcy5ib25lc1tpXS5hbmltYXRp
b25zWzBdLmdldEhpZ2hlc3RGcmFtZSgpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPCBoaWdo
ZXN0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IGhpZ2hlc3Q7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBCZWdpbiBhIHNwZWNpZmljIGFuaW1hdGlvbiByYW5nZQorICAg
ICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHJhbmdlIHRvIHN0YXJ0Cisg
ICAgICogQHBhcmFtIGxvb3AgZGVmaW5lcyBpZiBsb29waW5nIG11c3QgYmUgdHVybmVkIG9uIChm
YWxzZSBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBzcGVlZFJhdGlvIGRlZmluZXMgdGhlIHNw
ZWVkIHJhdGlvIHRvIGFwcGx5ICgxIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIG9uQW5pbWF0
aW9uRW5kIGRlZmluZXMgYSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIGFuaW1h
dGlvbiB3aWxsIGVuZAorICAgICAqIEByZXR1cm5zIGEgbmV3IGFuaW1hdGFibGUKKyAgICAgKi8K
KyAgICBTa2VsZXRvbi5wcm90b3R5cGUuYmVnaW5BbmltYXRpb24gPSBmdW5jdGlvbiAobmFtZSwg
bG9vcCwgc3BlZWRSYXRpbywgb25BbmltYXRpb25FbmQpIHsKKyAgICAgICAgdmFyIHJhbmdlID0g
dGhpcy5nZXRBbmltYXRpb25SYW5nZShuYW1lKTsKKyAgICAgICAgaWYgKCFyYW5nZSkgeworICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3Nj
ZW5lLmJlZ2luQW5pbWF0aW9uKHRoaXMsIHJhbmdlLmZyb20sIHJhbmdlLnRvLCBsb29wLCBzcGVl
ZFJhdGlvLCBvbkFuaW1hdGlvbkVuZCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAg
IFNrZWxldG9uLnByb3RvdHlwZS5fbWFya0FzRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX2lzRGlydHkgPSB0cnVlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBT
a2VsZXRvbi5wcm90b3R5cGUuX3JlZ2lzdGVyTWVzaFdpdGhQb3NlTWF0cml4ID0gZnVuY3Rpb24g
KG1lc2gpIHsKKyAgICAgICAgdGhpcy5fbWVzaGVzV2l0aFBvc2VNYXRyaXgucHVzaChtZXNoKTsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLl91bnJl
Z2lzdGVyTWVzaFdpdGhQb3NlTWF0cml4ID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgdmFy
IGluZGV4ID0gdGhpcy5fbWVzaGVzV2l0aFBvc2VNYXRyaXguaW5kZXhPZihtZXNoKTsKKyAgICAg
ICAgaWYgKGluZGV4ID4gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuX21lc2hlc1dpdGhQb3NlTWF0
cml4LnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICB9OworICAgIFNrZWxldG9uLnBy
b3RvdHlwZS5fY29tcHV0ZVRyYW5zZm9ybU1hdHJpY2VzID0gZnVuY3Rpb24gKHRhcmdldE1hdHJp
eCwgaW5pdGlhbFNraW5NYXRyaXgpIHsKKyAgICAgICAgdGhpcy5vbkJlZm9yZUNvbXB1dGVPYnNl
cnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAw
OyBpbmRleCA8IHRoaXMuYm9uZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIg
Ym9uZSA9IHRoaXMuYm9uZXNbaW5kZXhdOworICAgICAgICAgICAgYm9uZS5fY2hpbGRVcGRhdGVJ
ZCsrOworICAgICAgICAgICAgdmFyIHBhcmVudEJvbmUgPSBib25lLmdldFBhcmVudCgpOworICAg
ICAgICAgICAgaWYgKHBhcmVudEJvbmUpIHsKKyAgICAgICAgICAgICAgICBib25lLmdldExvY2Fs
TWF0cml4KCkubXVsdGlwbHlUb1JlZihwYXJlbnRCb25lLmdldFdvcmxkTWF0cml4KCksIGJvbmUu
Z2V0V29ybGRNYXRyaXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaW5pdGlhbFNraW5NYXRyaXgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYm9uZS5nZXRMb2NhbE1hdHJpeCgpLm11bHRpcGx5VG9SZWYoaW5pdGlhbFNraW5NYXRyaXgs
IGJvbmUuZ2V0V29ybGRNYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBib25lLmdldFdvcmxkTWF0cml4KCkuY29w
eUZyb20oYm9uZS5nZXRMb2NhbE1hdHJpeCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoYm9uZS5faW5kZXggIT09IC0xKSB7CisgICAgICAgICAg
ICAgICAgdmFyIG1hcHBlZEluZGV4ID0gYm9uZS5faW5kZXggPT09IG51bGwgPyBpbmRleCA6IGJv
bmUuX2luZGV4OworICAgICAgICAgICAgICAgIGJvbmUuZ2V0SW52ZXJ0ZWRBYnNvbHV0ZVRyYW5z
Zm9ybSgpLm11bHRpcGx5VG9BcnJheShib25lLmdldFdvcmxkTWF0cml4KCksIHRhcmdldE1hdHJp
eCwgbWFwcGVkSW5kZXggKiAxNik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5faWRlbnRpdHkuY29weVRvQXJyYXkodGFyZ2V0TWF0cml4LCB0aGlzLmJvbmVzLmxlbmd0
aCAqIDE2KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJ1aWxkIGFsbCByZXNvdXJjZXMgcmVx
dWlyZWQgdG8gcmVuZGVyIGEgc2tlbGV0b24KKyAgICAgKi8KKyAgICBTa2VsZXRvbi5wcm90b3R5
cGUucHJlcGFyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBsb2NhbCBt
YXRyaXggb2YgYm9uZXMgd2l0aCBsaW5rZWQgdHJhbnNmb3JtIG5vZGVzLgorICAgICAgICBpZiAo
dGhpcy5fbnVtQm9uZXNXaXRoTGlua2VkVHJhbnNmb3JtTm9kZSA+IDApIHsKKyAgICAgICAgICAg
IGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLmJvbmVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykg
eworICAgICAgICAgICAgICAgIHZhciBib25lXzEgPSBfYVtfaV07CisgICAgICAgICAgICAgICAg
aWYgKGJvbmVfMS5fbGlua2VkVHJhbnNmb3JtTm9kZSkgeworICAgICAgICAgICAgICAgICAgICAv
LyBDb21wdXRpbmcgdGhlIHdvcmxkIG1hdHJpeCBhbHNvIGNvbXB1dGVzIHRoZSBsb2NhbCBtYXRy
aXguCisgICAgICAgICAgICAgICAgICAgIGJvbmVfMS5fbGlua2VkVHJhbnNmb3JtTm9kZS5jb21w
dXRlV29ybGRNYXRyaXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYm9uZV8xLl9tYXRyaXggPSBi
b25lXzEuX2xpbmtlZFRyYW5zZm9ybU5vZGUuX2xvY2FsTWF0cml4OworICAgICAgICAgICAgICAg
ICAgICBib25lXzEubWFya0FzRGlydHkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9pc0RpcnR5KSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubmVlZEluaXRpYWxTa2luTWF0
cml4KSB7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fbWVz
aGVzV2l0aFBvc2VNYXRyaXgubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFy
IG1lc2ggPSB0aGlzLl9tZXNoZXNXaXRoUG9zZU1hdHJpeFtpbmRleF07CisgICAgICAgICAgICAg
ICAgdmFyIHBvc2VNYXRyaXggPSBtZXNoLmdldFBvc2VNYXRyaXgoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1lc2guX2JvbmVzVHJhbnNmb3JtTWF0cmljZXMgfHwgbWVzaC5fYm9uZXNUcmFuc2Zv
cm1NYXRyaWNlcy5sZW5ndGggIT09IDE2ICogKHRoaXMuYm9uZXMubGVuZ3RoICsgMSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWVzaC5fYm9uZXNUcmFuc2Zvcm1NYXRyaWNlcyA9IG5ldyBGbG9h
dDMyQXJyYXkoMTYgKiAodGhpcy5ib25lcy5sZW5ndGggKyAxKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jaHJvbml6ZWRXaXRoTWVzaCAhPT0gbWVz
aCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jaHJvbml6ZWRXaXRoTWVzaCA9IG1l
c2g7CisgICAgICAgICAgICAgICAgICAgIC8vIFByZXBhcmUgYm9uZXMKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgYm9uZUluZGV4ID0gMDsgYm9uZUluZGV4IDwgdGhpcy5ib25lcy5sZW5n
dGg7IGJvbmVJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm9uZSA9IHRo
aXMuYm9uZXNbYm9uZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYm9uZS5n
ZXRQYXJlbnQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBi
b25lLmdldEJhc2VNYXRyaXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgu
bXVsdGlwbHlUb1JlZihwb3NlTWF0cml4LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsxXSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9uZS5fdXBkYXRlRGlmZmVyZW5jZU1hdHJpeChfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsx
XSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNVc2luZ1RleHR1cmVGb3JNYXRyaWNlcykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmVXaWR0aCA9ICh0aGlzLmJvbmVzLmxl
bmd0aCArIDEpICogNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWVzaC5fdHJhbnNm
b3JtTWF0cml4VGV4dHVyZSB8fCBtZXNoLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlLmdldFNpemUo
KS53aWR0aCAhPT0gdGV4dHVyZVdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG1lc2guX3RyYW5zZm9ybU1hdHJpeFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWVzaC5fdHJhbnNmb3JtTWF0cml4VGV4dHVyZS5kaXNwb3NlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l
c2guX3RyYW5zZm9ybU1hdHJpeFRleHR1cmUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3Jhd1RleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUmF3VGV4dHVyZSJdLkNyZWF0ZVJHQkFU
ZXh0dXJlKG1lc2guX2JvbmVzVHJhbnNmb3JtTWF0cmljZXMsICh0aGlzLmJvbmVzLmxlbmd0aCAr
IDEpICogNCwgMSwgdGhpcy5fc2NlbmUsIGZhbHNlLCBmYWxzZSwgX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfTkVBUkVT
VF9TQU1QTElOR01PREUsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9BVCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgdGhpcy5fY29tcHV0ZVRyYW5zZm9ybU1hdHJpY2VzKG1lc2guX2JvbmVzVHJh
bnNmb3JtTWF0cmljZXMsIHBvc2VNYXRyaXgpOworICAgICAgICAgICAgICAgIGlmICh0aGlzLmlz
VXNpbmdUZXh0dXJlRm9yTWF0cmljZXMgJiYgbWVzaC5fdHJhbnNmb3JtTWF0cml4VGV4dHVyZSkg
eworICAgICAgICAgICAgICAgICAgICBtZXNoLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlLnVwZGF0
ZShtZXNoLl9ib25lc1RyYW5zZm9ybU1hdHJpY2VzKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIXRo
aXMuX3RyYW5zZm9ybU1hdHJpY2VzIHx8IHRoaXMuX3RyYW5zZm9ybU1hdHJpY2VzLmxlbmd0aCAh
PT0gMTYgKiAodGhpcy5ib25lcy5sZW5ndGggKyAxKSkgeworICAgICAgICAgICAgICAgIHRoaXMu
X3RyYW5zZm9ybU1hdHJpY2VzID0gbmV3IEZsb2F0MzJBcnJheSgxNiAqICh0aGlzLmJvbmVzLmxl
bmd0aCArIDEpKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1VzaW5nVGV4dHVyZUZvck1h
dHJpY2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmFuc2Zvcm1NYXRyaXhU
ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1NYXRyaXhU
ZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB0aGlzLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlID0gX01hdGVyaWFsc19UZXh0dXJlc19y
YXdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlJhd1RleHR1cmUiXS5DcmVh
dGVSR0JBVGV4dHVyZSh0aGlzLl90cmFuc2Zvcm1NYXRyaWNlcywgKHRoaXMuYm9uZXMubGVuZ3Ro
ICsgMSkgKiA0LCAxLCB0aGlzLl9zY2VuZSwgZmFsc2UsIGZhbHNlLCBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9ORUFS
RVNUX1NBTVBMSU5HTU9ERSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9jb21wdXRlVHJhbnNmb3JtTWF0
cmljZXModGhpcy5fdHJhbnNmb3JtTWF0cmljZXMsIG51bGwpOworICAgICAgICAgICAgaWYgKHRo
aXMuaXNVc2luZ1RleHR1cmVGb3JNYXRyaWNlcyAmJiB0aGlzLl90cmFuc2Zvcm1NYXRyaXhUZXh0
dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4VGV4dHVyZS51cGRh
dGUodGhpcy5fdHJhbnNmb3JtTWF0cmljZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2lzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc2NlbmUuX2FjdGl2
ZUJvbmVzLmFkZENvdW50KHRoaXMuYm9uZXMubGVuZ3RoLCBmYWxzZSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGFuaW1hdGFibGVzIGN1cnJlbnRseSBydW5uaW5n
IGZvciB0aGlzIHNrZWxldG9uCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgYW5pbWF0YWJs
ZXMKKyAgICAgKi8KKyAgICBTa2VsZXRvbi5wcm90b3R5cGUuZ2V0QW5pbWF0YWJsZXMgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fYW5pbWF0YWJsZXMgfHwgdGhpcy5fYW5pbWF0
YWJsZXMubGVuZ3RoICE9PSB0aGlzLmJvbmVzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5f
YW5pbWF0YWJsZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLmJvbmVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHRoaXMuX2Fu
aW1hdGFibGVzLnB1c2godGhpcy5ib25lc1tpbmRleF0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzLl9hbmltYXRhYmxlczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIENsb25lIHRoZSBjdXJyZW50IHNrZWxldG9uCisgICAgICogQHBhcmFtIG5hbWUgZGVm
aW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3IHNrZWxldG9uCisgICAgICogQHBhcmFtIGlkIGRlZmlu
ZXMgdGhlIGlkIG9mIHRoZSBuZXcgc2tlbGV0b24KKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IHNr
ZWxldG9uCisgICAgICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24g
KG5hbWUsIGlkKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgU2tlbGV0b24obmFtZSwgaWQg
fHwgbmFtZSwgdGhpcy5fc2NlbmUpOworICAgICAgICByZXN1bHQubmVlZEluaXRpYWxTa2luTWF0
cml4ID0gdGhpcy5uZWVkSW5pdGlhbFNraW5NYXRyaXg7CisgICAgICAgIGZvciAodmFyIGluZGV4
ID0gMDsgaW5kZXggPCB0aGlzLmJvbmVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAg
dmFyIHNvdXJjZSA9IHRoaXMuYm9uZXNbaW5kZXhdOworICAgICAgICAgICAgdmFyIHBhcmVudEJv
bmUgPSBudWxsOworICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gc291cmNlLmdldFBhcmVudCgp
OworICAgICAgICAgICAgaWYgKHBhcmVudF8xKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmVu
dEluZGV4ID0gdGhpcy5ib25lcy5pbmRleE9mKHBhcmVudF8xKTsKKyAgICAgICAgICAgICAgICBw
YXJlbnRCb25lID0gcmVzdWx0LmJvbmVzW3BhcmVudEluZGV4XTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBib25lID0gbmV3IF9ib25lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkJvbmUiXShzb3VyY2UubmFtZSwgcmVzdWx0LCBwYXJlbnRCb25lLCBzb3VyY2UuZ2V0QmFz
ZU1hdHJpeCgpLmNsb25lKCksIHNvdXJjZS5nZXRSZXN0UG9zZSgpLmNsb25lKCkpOworICAgICAg
ICAgICAgX01pc2NfZGVlcENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJEZWVw
Q29waWVyIl0uRGVlcENvcHkoc291cmNlLmFuaW1hdGlvbnMsIGJvbmUuYW5pbWF0aW9ucyk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3JhbmdlcykgeworICAgICAgICAgICAgcmVzdWx0
Ll9yYW5nZXMgPSB7fTsKKyAgICAgICAgICAgIGZvciAodmFyIHJhbmdlTmFtZSBpbiB0aGlzLl9y
YW5nZXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9yYW5nZXNbcmFuZ2VO
YW1lXTsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Ll9yYW5nZXNbcmFuZ2VOYW1lXSA9IHJhbmdlLmNsb25lKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2lzRGlydHkgPSB0
cnVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogRW5h
YmxlIGFuaW1hdGlvbiBibGVuZGluZyBmb3IgdGhpcyBza2VsZXRvbgorICAgICAqIEBwYXJhbSBi
bGVuZGluZ1NwZWVkIGRlZmluZXMgdGhlIGJsZW5kaW5nIHNwZWVkIHRvIGFwcGx5CisgICAgICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9hbmltYXRpb25zI2FuaW1h
dGlvbi1ibGVuZGluZworICAgICAqLworICAgIFNrZWxldG9uLnByb3RvdHlwZS5lbmFibGVCbGVu
ZGluZyA9IGZ1bmN0aW9uIChibGVuZGluZ1NwZWVkKSB7CisgICAgICAgIGlmIChibGVuZGluZ1Nw
ZWVkID09PSB2b2lkIDApIHsgYmxlbmRpbmdTcGVlZCA9IDAuMDE7IH0KKyAgICAgICAgdGhpcy5i
b25lcy5mb3JFYWNoKGZ1bmN0aW9uIChib25lKSB7CisgICAgICAgICAgICBib25lLmFuaW1hdGlv
bnMuZm9yRWFjaChmdW5jdGlvbiAoYW5pbWF0aW9uKSB7CisgICAgICAgICAgICAgICAgYW5pbWF0
aW9uLmVuYWJsZUJsZW5kaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhbmltYXRpb24uYmxl
bmRpbmdTcGVlZCA9IGJsZW5kaW5nU3BlZWQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlcyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0
ZWQgd2l0aCB0aGUgY3VycmVudCBza2VsZXRvbgorICAgICAqLworICAgIFNrZWxldG9uLnByb3Rv
dHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9tZXNoZXNXaXRoUG9z
ZU1hdHJpeCA9IFtdOworICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIHRoaXMuZ2V0U2Nl
bmUoKS5zdG9wQW5pbWF0aW9uKHRoaXMpOworICAgICAgICAvLyBSZW1vdmUgZnJvbSBzY2VuZQor
ICAgICAgICB0aGlzLmdldFNjZW5lKCkucmVtb3ZlU2tlbGV0b24odGhpcyk7CisgICAgICAgIGlm
ICh0aGlzLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl90cmFu
c2Zvcm1NYXRyaXhUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9y
bU1hdHJpeFRleHR1cmUgPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXJpYWxpemUgdGhlIHNrZWxldG9uIGluIGEgSlNPTiBvYmplY3QKKyAgICAgKiBAcmV0dXJu
cyBhIEpTT04gb2JqZWN0CisgICAgICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLnNlcmlhbGl6
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsK
KyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5uYW1lID0gdGhpcy5uYW1lOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LmlkID0gdGhpcy5pZDsKKyAgICAgICAgaWYgKHRoaXMuZGltZW5z
aW9uc0F0UmVzdCkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5kaW1lbnNpb25z
QXRSZXN0ID0gdGhpcy5kaW1lbnNpb25zQXRSZXN0LmFzQXJyYXkoKTsKKyAgICAgICAgfQorICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmJvbmVzID0gW107CisgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QubmVlZEluaXRpYWxTa2luTWF0cml4ID0gdGhpcy5uZWVkSW5pdGlhbFNraW5NYXRy
aXg7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJvbmVzLmxlbmd0
aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGJvbmUgPSB0aGlzLmJvbmVzW2luZGV4XTsK
KyAgICAgICAgICAgIHZhciBwYXJlbnRfMiA9IGJvbmUuZ2V0UGFyZW50KCk7CisgICAgICAgICAg
ICB2YXIgc2VyaWFsaXplZEJvbmUgPSB7CisgICAgICAgICAgICAgICAgcGFyZW50Qm9uZUluZGV4
OiBwYXJlbnRfMiA/IHRoaXMuYm9uZXMuaW5kZXhPZihwYXJlbnRfMikgOiAtMSwKKyAgICAgICAg
ICAgICAgICBuYW1lOiBib25lLm5hbWUsCisgICAgICAgICAgICAgICAgbWF0cml4OiBib25lLmdl
dEJhc2VNYXRyaXgoKS50b0FycmF5KCksCisgICAgICAgICAgICAgICAgcmVzdDogYm9uZS5nZXRS
ZXN0UG9zZSgpLnRvQXJyYXkoKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QuYm9uZXMucHVzaChzZXJpYWxpemVkQm9uZSk7CisgICAgICAgICAgICBpZiAo
Ym9uZS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemVkQm9uZS5sZW5ndGggPSBi
b25lLmxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChib25lLm1ldGFkYXRh
KSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplZEJvbmUubWV0YWRhdGEgPSBib25lLm1ldGFk
YXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJvbmUuYW5pbWF0aW9ucyAmJiBi
b25lLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRC
b25lLmFuaW1hdGlvbiA9IGJvbmUuYW5pbWF0aW9uc1swXS5zZXJpYWxpemUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmFuZ2VzID0gW107CisgICAg
ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX3JhbmdlcykgeworICAgICAgICAgICAgICAg
IHZhciBzb3VyY2UgPSB0aGlzLl9yYW5nZXNbbmFtZV07CisgICAgICAgICAgICAgICAgaWYgKCFz
b3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHt9OworICAgICAgICAgICAgICAgIHJhbmdl
Lm5hbWUgPSBuYW1lOworICAgICAgICAgICAgICAgIHJhbmdlLmZyb20gPSBzb3VyY2UuZnJvbTsK
KyAgICAgICAgICAgICAgICByYW5nZS50byA9IHNvdXJjZS50bzsKKyAgICAgICAgICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LnJhbmdlcy5wdXNoKHJhbmdlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAg
IC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgc2tlbGV0b24gZnJvbSBzZXJpYWxpemVkIGRhdGEK
KyAgICAgKiBAcGFyYW0gcGFyc2VkU2tlbGV0b24gZGVmaW5lcyB0aGUgc2VyaWFsaXplZCBkYXRh
CisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBA
cmV0dXJucyBhIG5ldyBza2VsZXRvbgorICAgICAqLworICAgIFNrZWxldG9uLlBhcnNlID0gZnVu
Y3Rpb24gKHBhcnNlZFNrZWxldG9uLCBzY2VuZSkgeworICAgICAgICB2YXIgc2tlbGV0b24gPSBu
ZXcgU2tlbGV0b24ocGFyc2VkU2tlbGV0b24ubmFtZSwgcGFyc2VkU2tlbGV0b24uaWQsIHNjZW5l
KTsKKyAgICAgICAgaWYgKHBhcnNlZFNrZWxldG9uLmRpbWVuc2lvbnNBdFJlc3QpIHsKKyAgICAg
ICAgICAgIHNrZWxldG9uLmRpbWVuc2lvbnNBdFJlc3QgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLkZyb21BcnJheShwYXJzZWRTa2Vs
ZXRvbi5kaW1lbnNpb25zQXRSZXN0KTsKKyAgICAgICAgfQorICAgICAgICBza2VsZXRvbi5uZWVk
SW5pdGlhbFNraW5NYXRyaXggPSBwYXJzZWRTa2VsZXRvbi5uZWVkSW5pdGlhbFNraW5NYXRyaXg7
CisgICAgICAgIHZhciBpbmRleDsKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGFy
c2VkU2tlbGV0b24uYm9uZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgcGFy
c2VkQm9uZSA9IHBhcnNlZFNrZWxldG9uLmJvbmVzW2luZGV4XTsKKyAgICAgICAgICAgIHZhciBw
YXJlbnRCb25lID0gbnVsbDsKKyAgICAgICAgICAgIGlmIChwYXJzZWRCb25lLnBhcmVudEJvbmVJ
bmRleCA+IC0xKSB7CisgICAgICAgICAgICAgICAgcGFyZW50Qm9uZSA9IHNrZWxldG9uLmJvbmVz
W3BhcnNlZEJvbmUucGFyZW50Qm9uZUluZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciByZXN0ID0gcGFyc2VkQm9uZS5yZXN0ID8gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLkZyb21BcnJheShwYXJzZWRCb25lLnJlc3Qp
IDogbnVsbDsKKyAgICAgICAgICAgIHZhciBib25lID0gbmV3IF9ib25lX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkJvbmUiXShwYXJzZWRCb25lLm5hbWUsIHNrZWxldG9uLCBwYXJlbnRC
b25lLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWF0
cml4Il0uRnJvbUFycmF5KHBhcnNlZEJvbmUubWF0cml4KSwgcmVzdCk7CisgICAgICAgICAgICBp
ZiAocGFyc2VkQm9uZS5pZCAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZEJvbmUuaWQgIT09IG51bGwp
IHsKKyAgICAgICAgICAgICAgICBib25lLmlkID0gcGFyc2VkQm9uZS5pZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRCb25lLmxlbmd0aCkgeworICAgICAgICAgICAgICAg
IGJvbmUubGVuZ3RoID0gcGFyc2VkQm9uZS5sZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAocGFyc2VkQm9uZS5tZXRhZGF0YSkgeworICAgICAgICAgICAgICAgIGJvbmUubWV0
YWRhdGEgPSBwYXJzZWRCb25lLm1ldGFkYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHBhcnNlZEJvbmUuYW5pbWF0aW9uKSB7CisgICAgICAgICAgICAgICAgYm9uZS5hbmltYXRp
b25zLnB1c2goX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIkFuaW1hdGlvbiJdLlBhcnNlKHBhcnNlZEJvbmUuYW5pbWF0aW9uKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAocGFyc2VkQm9uZS5saW5rZWRUcmFuc2Zvcm1Ob2RlSWQgIT09
IHVuZGVmaW5lZCAmJiBwYXJzZWRCb25lLmxpbmtlZFRyYW5zZm9ybU5vZGVJZCAhPT0gbnVsbCkg
eworICAgICAgICAgICAgICAgIHNrZWxldG9uLl9oYXNXYWl0aW5nRGF0YSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYm9uZS5fd2FpdGluZ1RyYW5zZm9ybU5vZGVJZCA9IHBhcnNlZEJvbmUubGlu
a2VkVHJhbnNmb3JtTm9kZUlkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IHBsYWNlZCBhZnRlciBib25lcywgc28gY3JlYXRlQW5pbWF0aW9uUmFuZ2UgY2FuIGNhc2NhZGUg
ZG93bgorICAgICAgICBpZiAocGFyc2VkU2tlbGV0b24ucmFuZ2VzKSB7CisgICAgICAgICAgICBm
b3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJzZWRTa2VsZXRvbi5yYW5nZXMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBwYXJzZWRTa2VsZXRvbi5yYW5nZXNb
aW5kZXhdOworICAgICAgICAgICAgICAgIHNrZWxldG9uLmNyZWF0ZUFuaW1hdGlvblJhbmdlKGRh
dGEubmFtZSwgZGF0YS5mcm9tLCBkYXRhLnRvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gc2tlbGV0b247CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb21wdXRl
IGFsbCBub2RlIGFic29sdXRlIHRyYW5zZm9ybXMKKyAgICAgKiBAcGFyYW0gZm9yY2VVcGRhdGUg
ZGVmaW5lcyBpZiBjb21wdXRhdGlvbiBtdXN0IGJlIGRvbmUgZXZlbiBpZiBjYWNoZSBpcyB1cCB0
byBkYXRlCisgICAgICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLmNvbXB1dGVBYnNvbHV0ZVRy
YW5zZm9ybXMgPSBmdW5jdGlvbiAoZm9yY2VVcGRhdGUpIHsKKyAgICAgICAgaWYgKGZvcmNlVXBk
YXRlID09PSB2b2lkIDApIHsgZm9yY2VVcGRhdGUgPSBmYWxzZTsgfQorICAgICAgICB2YXIgcmVu
ZGVySWQgPSB0aGlzLl9zY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICBpZiAodGhpcy5fbGFz
dEFic29sdXRlVHJhbnNmb3Jtc1VwZGF0ZUlkICE9IHJlbmRlcklkIHx8IGZvcmNlVXBkYXRlKSB7
CisgICAgICAgICAgICB0aGlzLmJvbmVzWzBdLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9ybXMoKTsK
KyAgICAgICAgICAgIHRoaXMuX2xhc3RBYnNvbHV0ZVRyYW5zZm9ybXNVcGRhdGVJZCA9IHJlbmRl
cklkOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByb290IHBv
c2UgbWF0cml4CisgICAgICogQHJldHVybnMgYSBtYXRyaXgKKyAgICAgKi8KKyAgICBTa2VsZXRv
bi5wcm90b3R5cGUuZ2V0UG9zZU1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHBv
c2VNYXRyaXggPSBudWxsOworICAgICAgICBpZiAodGhpcy5fbWVzaGVzV2l0aFBvc2VNYXRyaXgu
bGVuZ3RoID4gMCkgeworICAgICAgICAgICAgcG9zZU1hdHJpeCA9IHRoaXMuX21lc2hlc1dpdGhQ
b3NlTWF0cml4WzBdLmdldFBvc2VNYXRyaXgoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cG9zZU1hdHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNvcnRzIGJvbmVzIHBlciBpbnRl
cm5hbCBpbmRleAorICAgICAqLworICAgIFNrZWxldG9uLnByb3RvdHlwZS5zb3J0Qm9uZXMgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBib25lcyA9IG5ldyBBcnJheSgpOworICAgICAgICB2
YXIgdmlzaXRlZCA9IG5ldyBBcnJheSh0aGlzLmJvbmVzLmxlbmd0aCk7CisgICAgICAgIGZvciAo
dmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJvbmVzLmxlbmd0aDsgaW5kZXgrKykgeworICAg
ICAgICAgICAgdGhpcy5fc29ydEJvbmVzKGluZGV4LCBib25lcywgdmlzaXRlZCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5ib25lcyA9IGJvbmVzOworICAgIH07CisgICAgU2tlbGV0b24ucHJv
dG90eXBlLl9zb3J0Qm9uZXMgPSBmdW5jdGlvbiAoaW5kZXgsIGJvbmVzLCB2aXNpdGVkKSB7Cisg
ICAgICAgIGlmICh2aXNpdGVkW2luZGV4XSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHZpc2l0ZWRbaW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgdmFyIGJvbmUgPSB0
aGlzLmJvbmVzW2luZGV4XTsKKyAgICAgICAgaWYgKGJvbmUuX2luZGV4ID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgIGJvbmUuX2luZGV4ID0gaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIHBhcmVudEJvbmUgPSBib25lLmdldFBhcmVudCgpOworICAgICAgICBpZiAocGFyZW50Qm9u
ZSkgeworICAgICAgICAgICAgdGhpcy5fc29ydEJvbmVzKHRoaXMuYm9uZXMuaW5kZXhPZihwYXJl
bnRCb25lKSwgYm9uZXMsIHZpc2l0ZWQpOworICAgICAgICB9CisgICAgICAgIGJvbmVzLnB1c2go
Ym9uZSk7CisgICAgfTsKKyAgICByZXR1cm4gU2tlbGV0b247Cit9KCkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL0NhbWVyYXMvSW5wdXRzL0Jhc2VDYW1lcmFQb2ludGVyc0lucHV0LnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vQ2FtZXJhcy9JbnB1dHMvQmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJhc2VDYW1lcmFQb2ludGVyc0lucHV0ICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VDYW1lcmFQb2ludGVyc0lucHV0
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dDsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIv
dHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3Rvb2xzICovICIuL01pc2Mv
dG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXZlbnRzX3BvaW50ZXJFdmVu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL0V2ZW50cy9wb2ludGVyRXZlbnRzICovICIuL0V2ZW50cy9wb2ludGVyRXZlbnRzLnRz
Iik7CisKKworCisKKy8qKgorICogQmFzZSBjbGFzcyBmb3IgQ2FtZXJhIFBvaW50ZXIgSW5wdXRz
LgorICogU2VlIEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQgaW4gc3JjL0NhbWVyYXMvSW5wdXRz
L2ZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQudHMKKyAqIGZvciBleGFtcGxlIHVzYWdlLgorICov
Cit2YXIgQmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisgICAgZnVuY3Rpb24gQmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQoKSB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBidXR0b25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5w
dXQgdG8gaGFuZGxlIGNhbWVyYSBtb3ZlLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5idXR0
b25zID0gWzAsIDEsIDJdOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIGlucHV0
IGNvbnRyb2xzIHRvIGEgc3BlY2lmaWMgZG9tIGVsZW1lbnQgdG8gZ2V0IHRoZSBpbnB1dCBmcm9t
LgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdGhlIGNvbnRyb2xz
IHNob3VsZCBiZSBsaXN0ZW5lZCBmcm9tCisgICAgICogQHBhcmFtIG5vUHJldmVudERlZmF1bHQg
RGVmaW5lcyB3aGV0aGVyIGV2ZW50IGNhdWdodCBieSB0aGUgY29udHJvbHMgc2hvdWxkIGNhbGwg
cHJldmVudGRlZmF1bHQoKSAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9j
cy9XZWIvQVBJL0V2ZW50L3ByZXZlbnREZWZhdWx0KQorICAgICAqLworICAgIEJhc2VDYW1lcmFQ
b2ludGVyc0lucHV0LnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQs
IG5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
dmFyIGVuZ2luZSA9IHRoaXMuY2FtZXJhLmdldEVuZ2luZSgpOworICAgICAgICB2YXIgcHJldmlv
dXNQaW5jaFNxdWFyZWREaXN0YW5jZSA9IDA7CisgICAgICAgIHZhciBwcmV2aW91c011bHRpVG91
Y2hQYW5Qb3NpdGlvbiA9IG51bGw7CisgICAgICAgIHRoaXMucG9pbnRBID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5wb2ludEIgPSBudWxsOworICAgICAgICB0aGlzLl9hbHRLZXkgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5fY3RybEtleSA9IGZhbHNlOworICAgICAgICB0aGlzLl9tZXRhS2V5ID0gZmFs
c2U7CisgICAgICAgIHRoaXMuX3NoaWZ0S2V5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2J1dHRv
bnNQcmVzc2VkID0gMDsKKyAgICAgICAgdGhpcy5fcG9pbnRlcklucHV0ID0gZnVuY3Rpb24gKHAs
IHMpIHsKKyAgICAgICAgICAgIHZhciBldnQgPSBwLmV2ZW50OworICAgICAgICAgICAgdmFyIGlz
VG91Y2ggPSBldnQucG9pbnRlclR5cGUgPT09ICJ0b3VjaCI7CisgICAgICAgICAgICBpZiAoZW5n
aW5lLmlzSW5WUkV4Y2x1c2l2ZVBvaW50ZXJNb2RlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHAudHlwZSAhPT0gX0V2ZW50c19wb2lu
dGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBvaW50ZXJFdmVudFR5cGVz
Il0uUE9JTlRFUk1PVkUgJiYKKyAgICAgICAgICAgICAgICBfdGhpcy5idXR0b25zLmluZGV4T2Yo
ZXZ0LmJ1dHRvbikgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIHNyY0VsZW1lbnQgPSAoZXZ0LnNyY0VsZW1lbnQgfHwgZXZ0
LnRhcmdldCk7CisgICAgICAgICAgICBfdGhpcy5fYWx0S2V5ID0gZXZ0LmFsdEtleTsKKyAgICAg
ICAgICAgIF90aGlzLl9jdHJsS2V5ID0gZXZ0LmN0cmxLZXk7CisgICAgICAgICAgICBfdGhpcy5f
bWV0YUtleSA9IGV2dC5tZXRhS2V5OworICAgICAgICAgICAgX3RoaXMuX3NoaWZ0S2V5ID0gZXZ0
LnNoaWZ0S2V5OworICAgICAgICAgICAgX3RoaXMuX2J1dHRvbnNQcmVzc2VkID0gZXZ0LmJ1dHRv
bnM7CisgICAgICAgICAgICBpZiAoZW5naW5lLmlzUG9pbnRlckxvY2spIHsKKyAgICAgICAgICAg
ICAgICB2YXIgb2Zmc2V0WCA9IGV2dC5tb3ZlbWVudFggfHwKKyAgICAgICAgICAgICAgICAgICAg
ZXZ0Lm1vek1vdmVtZW50WCB8fAorICAgICAgICAgICAgICAgICAgICBldnQud2Via2l0TW92ZW1l
bnRYIHx8CisgICAgICAgICAgICAgICAgICAgIGV2dC5tc01vdmVtZW50WCB8fAorICAgICAgICAg
ICAgICAgICAgICAwOworICAgICAgICAgICAgICAgIHZhciBvZmZzZXRZID0gZXZ0Lm1vdmVtZW50
WSB8fAorICAgICAgICAgICAgICAgICAgICBldnQubW96TW92ZW1lbnRZIHx8CisgICAgICAgICAg
ICAgICAgICAgIGV2dC53ZWJraXRNb3ZlbWVudFkgfHwKKyAgICAgICAgICAgICAgICAgICAgZXZ0
Lm1zTW92ZW1lbnRZIHx8CisgICAgICAgICAgICAgICAgICAgIDA7CisgICAgICAgICAgICAgICAg
X3RoaXMub25Ub3VjaChudWxsLCBvZmZzZXRYLCBvZmZzZXRZKTsKKyAgICAgICAgICAgICAgICBf
dGhpcy5wb2ludEEgPSBudWxsOworICAgICAgICAgICAgICAgIF90aGlzLnBvaW50QiA9IG51bGw7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwLnR5cGUgPT09IF9FdmVudHNf
cG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVyRXZlbnRU
eXBlcyJdLlBPSU5URVJET1dOICYmIHNyY0VsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgICAgICBzcmNFbGVtZW50LnNldFBvaW50ZXJDYXB0dXJlKGV2dC5w
b2ludGVySWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoZSkg
eworICAgICAgICAgICAgICAgICAgICAvL05vdGhpbmcgdG8gZG8gd2l0aCB0aGUgZXJyb3IuIEV4
ZWN1dGlvbiB3aWxsIGNvbnRpbnVlLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoX3RoaXMucG9pbnRBID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlz
LnBvaW50QSA9IHsgeDogZXZ0LmNsaWVudFgsCisgICAgICAgICAgICAgICAgICAgICAgICB5OiBl
dnQuY2xpZW50WSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJJZDogZXZ0LnBvaW50
ZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGV2dC5wb2ludGVyVHlwZSB9Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5wb2ludEIg
PT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMucG9pbnRCID0geyB4OiBldnQu
Y2xpZW50WCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHk6IGV2dC5jbGllbnRZLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcG9pbnRlcklkOiBldnQucG9pbnRlcklkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZTogZXZ0LnBvaW50ZXJUeXBlIH07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIF90aGlzLm9uQnV0dG9uRG93bihldnQpOworICAgICAgICAgICAgICAg
IGlmICghbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICBldnQucHJldmVu
dERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHAudHlwZSA9
PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBv
aW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPVUJMRVRBUCkgeworICAgICAgICAgICAgICAgIF90
aGlzLm9uRG91YmxlVGFwKGV2dC5wb2ludGVyVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChwLnR5cGUgPT09IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJVUCAmJiBzcmNF
bGVtZW50KSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgc3Jj
RWxlbWVudC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZXZ0LnBvaW50ZXJJZCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vTm90aGluZyB0byBkbyB3aXRoIHRoZSBlcnJvci4KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKCFpc1RvdWNoKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLnBv
aW50QiA9IG51bGw7IC8vIE1vdXNlIGFuZCBwZW4gYXJlIG1vbm8gcG9pbnRlcgorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvL3dvdWxkIGJlIGJldHRlciB0byB1c2UgcG9pbnRl
cnMucmVtb3ZlKGV2dC5wb2ludGVySWQpIGZvciBtdWx0aXRvdWNoIGdlc3R1cmVzLAorICAgICAg
ICAgICAgICAgIC8vYnV0IGVtcHR5aW5nIGNvbXBsZXRlbHkgcG9pbnRlcnMgY29sbGVjdGlvbiBp
cyByZXF1aXJlZCB0byBmaXggYSBidWcgb24gaVBob25lIDoKKyAgICAgICAgICAgICAgICAvL3do
ZW4gY2hhbmdpbmcgb3JpZW50YXRpb24gd2hpbGUgcGluY2hpbmcgY2FtZXJhLAorICAgICAgICAg
ICAgICAgIC8vb25lIHBvaW50ZXIgc3RheSBwcmVzc2VkIGZvcmV2ZXIgaWYgd2UgZG9uJ3QgcmVs
ZWFzZSBhbGwgcG9pbnRlcnMKKyAgICAgICAgICAgICAgICAvL3dpbGwgYmUgb2sgdG8gcHV0IGJh
Y2sgcG9pbnRlcnMucmVtb3ZlKGV2dC5wb2ludGVySWQpOyB3aGVuIGlQaG9uZSBidWcgY29ycmVj
dGVkCisgICAgICAgICAgICAgICAgaWYgKGVuZ2luZS5fYmFkT1MpIHsKKyAgICAgICAgICAgICAg
ICAgICAgX3RoaXMucG9pbnRBID0gX3RoaXMucG9pbnRCID0gbnVsbDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vb25seSBy
ZW1vdmUgdGhlIGltcGFjdGVkIHBvaW50ZXIgaW4gY2FzZSBvZiBtdWx0aXRvdWNoIGFsbG93aW5n
IG9uIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgLy9wbGF0Zm9ybXMgc3dpdGNoaW5nIGZyb20g
cm90YXRlIHRvIHpvb20gYW5kIHBhbiBzZWFtbGVzc2x5LgorICAgICAgICAgICAgICAgICAgICBp
ZiAoX3RoaXMucG9pbnRCICYmIF90aGlzLnBvaW50QSAmJiBfdGhpcy5wb2ludEEucG9pbnRlcklk
ID09IGV2dC5wb2ludGVySWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnBvaW50
QSA9IF90aGlzLnBvaW50QjsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnBvaW50QiA9
IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoX3RoaXMucG9pbnRBICYmIF90aGlzLnBvaW50QiAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgX3RoaXMucG9pbnRCLnBvaW50ZXJJZCA9PSBldnQucG9pbnRlcklkKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5wb2ludEIgPSBudWxsOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgX3Ro
aXMucG9pbnRBID0gX3RoaXMucG9pbnRCID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNQaW5jaFNxdWFy
ZWREaXN0YW5jZSAhPT0gMCB8fCBwcmV2aW91c011bHRpVG91Y2hQYW5Qb3NpdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICAvLyBQcmV2aW91cyBwaW5jaCBkYXRhIGlzIHBvcHVsYXRlZCBidXQg
YSBidXR0b24gaGFzIGJlZW4gbGlmdGVkCisgICAgICAgICAgICAgICAgICAgIC8vIHNvIHBpbmNo
IGhhcyBlbmRlZC4KKyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25NdWx0aVRvdWNoKF90aGlz
LnBvaW50QSwgX3RoaXMucG9pbnRCLCBwcmV2aW91c1BpbmNoU3F1YXJlZERpc3RhbmNlLCAwLCAv
LyBwaW5jaFNxdWFyZWREaXN0YW5jZQorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c011bHRp
VG91Y2hQYW5Qb3NpdGlvbiwgbnVsbCAvLyBtdWx0aVRvdWNoUGFuUG9zaXRpb24KKyAgICAgICAg
ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNQaW5jaFNxdWFyZWRE
aXN0YW5jZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTXVsdGlUb3VjaFBhblBv
c2l0aW9uID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgX3RoaXMu
b25CdXR0b25VcChldnQpOworICAgICAgICAgICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkg
eworICAgICAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwLnR5cGUgPT09IF9F
dmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVy
RXZlbnRUeXBlcyJdLlBPSU5URVJNT1ZFKSB7CisgICAgICAgICAgICAgICAgaWYgKCFub1ByZXZl
bnREZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBPbmUgYnV0dG9uIGRvd24KKyAg
ICAgICAgICAgICAgICBpZiAoX3RoaXMucG9pbnRBICYmIF90aGlzLnBvaW50QiA9PT0gbnVsbCkg
eworICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0WCA9IGV2dC5jbGllbnRYIC0gX3RoaXMu
cG9pbnRBLng7CisgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXRZID0gZXZ0LmNsaWVudFkg
LSBfdGhpcy5wb2ludEEueTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25Ub3VjaChfdGhp
cy5wb2ludEEsIG9mZnNldFgsIG9mZnNldFkpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5w
b2ludEEueCA9IGV2dC5jbGllbnRYOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5wb2ludEEu
eSA9IGV2dC5jbGllbnRZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBU
d28gYnV0dG9ucyBkb3duOiBwaW5jaAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLnBv
aW50QSAmJiBfdGhpcy5wb2ludEIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGVkID0gKF90
aGlzLnBvaW50QS5wb2ludGVySWQgPT09IGV2dC5wb2ludGVySWQpID8KKyAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLnBvaW50QSA6IF90aGlzLnBvaW50QjsKKyAgICAgICAgICAgICAgICAg
ICAgZWQueCA9IGV2dC5jbGllbnRYOworICAgICAgICAgICAgICAgICAgICBlZC55ID0gZXZ0LmNs
aWVudFk7CisgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0WCA9IF90aGlzLnBvaW50QS54IC0g
X3RoaXMucG9pbnRCLng7CisgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0WSA9IF90aGlzLnBv
aW50QS55IC0gX3RoaXMucG9pbnRCLnk7CisgICAgICAgICAgICAgICAgICAgIHZhciBwaW5jaFNx
dWFyZWREaXN0YW5jZSA9IChkaXN0WCAqIGRpc3RYKSArIChkaXN0WSAqIGRpc3RZKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG11bHRpVG91Y2hQYW5Qb3NpdGlvbiA9IHsgeDogKF90aGlzLnBv
aW50QS54ICsgX3RoaXMucG9pbnRCLngpIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHk6
IChfdGhpcy5wb2ludEEueSArIF90aGlzLnBvaW50Qi55KSAvIDIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBwb2ludGVySWQ6IGV2dC5wb2ludGVySWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlOiBwLnR5cGUgfTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25NdWx0aVRvdWNo
KF90aGlzLnBvaW50QSwgX3RoaXMucG9pbnRCLCBwcmV2aW91c1BpbmNoU3F1YXJlZERpc3RhbmNl
LCBwaW5jaFNxdWFyZWREaXN0YW5jZSwgcHJldmlvdXNNdWx0aVRvdWNoUGFuUG9zaXRpb24sIG11
bHRpVG91Y2hQYW5Qb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTXVsdGlU
b3VjaFBhblBvc2l0aW9uID0gbXVsdGlUb3VjaFBhblBvc2l0aW9uOworICAgICAgICAgICAgICAg
ICAgICBwcmV2aW91c1BpbmNoU3F1YXJlZERpc3RhbmNlID0gcGluY2hTcXVhcmVkRGlzdGFuY2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB0
aGlzLl9vYnNlcnZlciA9IHRoaXMuY2FtZXJhLmdldFNjZW5lKCkub25Qb2ludGVyT2JzZXJ2YWJs
ZS5hZGQodGhpcy5fcG9pbnRlcklucHV0LCBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9XTiB8IF9F
dmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVy
RXZlbnRUeXBlcyJdLlBPSU5URVJVUCB8CisgICAgICAgICAgICBfRXZlbnRzX3BvaW50ZXJFdmVu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lO
VEVSTU9WRSk7CisgICAgICAgIHRoaXMuX29uTG9zdEZvY3VzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgX3RoaXMucG9pbnRBID0gX3RoaXMucG9pbnRCID0gbnVsbDsKKyAgICAgICAgICAg
IHByZXZpb3VzUGluY2hTcXVhcmVkRGlzdGFuY2UgPSAwOworICAgICAgICAgICAgcHJldmlvdXNN
dWx0aVRvdWNoUGFuUG9zaXRpb24gPSBudWxsOworICAgICAgICAgICAgX3RoaXMub25Mb3N0Rm9j
dXMoKTsKKyAgICAgICAgfTsKKyAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250
ZXh0bWVudSIsIHRoaXMub25Db250ZXh0TWVudS5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgICAg
IF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRvb2xzIl0uUmVnaXN0
ZXJUb3BSb290RXZlbnRzKHRoaXMuY2FtZXJhLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuZ2V0SG9z
dFdpbmRvdygpLCBbCisgICAgICAgICAgICB7IG5hbWU6ICJibHVyIiwgaGFuZGxlcjogdGhpcy5f
b25Mb3N0Rm9jdXMgfQorICAgICAgICBdKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGFj
aCB0aGUgY3VycmVudCBjb250cm9scyBmcm9tIHRoZSBzcGVjaWZpZWQgZG9tIGVsZW1lbnQuCisg
ICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0byBzdG9wIGxpc3Rlbmlu
ZyB0aGUgaW5wdXRzIGZyb20KKyAgICAgKi8KKyAgICBCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dC5w
cm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgICAgIGlm
ICh0aGlzLl9vbkxvc3RGb2N1cykgeworICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5VbnJlZ2lzdGVyVG9wUm9vdEV2ZW50cyh0aGlz
LmNhbWVyYS5nZXRTY2VuZSgpLmdldEVuZ2luZSgpLmdldEhvc3RXaW5kb3coKSwgWworICAgICAg
ICAgICAgICAgIHsgbmFtZTogImJsdXIiLCBoYW5kbGVyOiB0aGlzLl9vbkxvc3RGb2N1cyB9Cisg
ICAgICAgICAgICBdKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZWxlbWVudCAmJiB0aGlzLl9v
YnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5jYW1lcmEuZ2V0U2NlbmUoKS5vblBvaW50ZXJP
YnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vYnNlcnZlcik7CisgICAgICAgICAgICB0aGlzLl9vYnNl
cnZlciA9IG51bGw7CisgICAgICAgICAgICBpZiAodGhpcy5vbkNvbnRleHRNZW51KSB7CisgICAg
ICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRo
aXMub25Db250ZXh0TWVudSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vbkxv
c3RGb2N1cyA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWx0S2V5ID0gZmFsc2U7
CisgICAgICAgIHRoaXMuX2N0cmxLZXkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbWV0YUtleSA9
IGZhbHNlOworICAgICAgICB0aGlzLl9zaGlmdEtleSA9IGZhbHNlOworICAgICAgICB0aGlzLl9i
dXR0b25zUHJlc3NlZCA9IDA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFz
cyBuYW1lIG9mIHRoZSBjdXJyZW50IGlucHV0LgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBu
YW1lCisgICAgICovCisgICAgQmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLmdldENs
YXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJCYXNlQ2FtZXJhUG9pbnRl
cnNJbnB1dCI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUg
YXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBjbGFzcy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5w
dXQgZnJpZW5kbHkgbmFtZQorICAgICAqLworICAgIEJhc2VDYW1lcmFQb2ludGVyc0lucHV0LnBy
b3RvdHlwZS5nZXRTaW1wbGVOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gInBv
aW50ZXJzIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxlZCBvbiBwb2ludGVyIFBPSU5U
RVJET1VCTEVUQVAgZXZlbnQuCisgICAgICogT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcHJvdmlk
ZSBmdW5jdGlvbmFsaXR5IG9uIFBPSU5URVJET1VCTEVUQVAgZXZlbnQuCisgICAgICovCisgICAg
QmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLm9uRG91YmxlVGFwID0gZnVuY3Rpb24g
KHR5cGUpIHsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxlZCBvbiBwb2ludGVyIFBPSU5U
RVJNT1ZFIGV2ZW50IGlmIG9ubHkgYSBzaW5nbGUgdG91Y2ggaXMgYWN0aXZlLgorICAgICAqIE92
ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eS4KKyAgICAgKi8KKyAg
ICBCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUub25Ub3VjaCA9IGZ1bmN0aW9uIChw
b2ludCwgb2Zmc2V0WCwgb2Zmc2V0WSkgeworICAgIH07CisgICAgLyoqCisgICAgICogQ2FsbGVk
IG9uIHBvaW50ZXIgUE9JTlRFUk1PVkUgZXZlbnQgaWYgbXVsdGlwbGUgdG91Y2hlcyBhcmUgYWN0
aXZlLgorICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0
eS4KKyAgICAgKi8KKyAgICBCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUub25NdWx0
aVRvdWNoID0gZnVuY3Rpb24gKHBvaW50QSwgcG9pbnRCLCBwcmV2aW91c1BpbmNoU3F1YXJlZERp
c3RhbmNlLCBwaW5jaFNxdWFyZWREaXN0YW5jZSwgcHJldmlvdXNNdWx0aVRvdWNoUGFuUG9zaXRp
b24sIG11bHRpVG91Y2hQYW5Qb3NpdGlvbikgeworICAgIH07CisgICAgLyoqCisgICAgICogQ2Fs
bGVkIG9uIEpTIGNvbnRleHRtZW51IGV2ZW50LgorICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9k
IHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eS4KKyAgICAgKi8KKyAgICBCYXNlQ2FtZXJhUG9pbnRl
cnNJbnB1dC5wcm90b3R5cGUub25Db250ZXh0TWVudSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAg
ICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQg
ZWFjaCB0aW1lIGEgbmV3IFBPSU5URVJET1dOIGV2ZW50IG9jY3Vycy4gSWUsIGZvciBlYWNoIGJ1
dHRvbgorICAgICAqIHByZXNzLgorICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHByb3Zp
ZGUgZnVuY3Rpb25hbGl0eS4KKyAgICAgKi8KKyAgICBCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dC5w
cm90b3R5cGUub25CdXR0b25Eb3duID0gZnVuY3Rpb24gKGV2dCkgeworICAgIH07CisgICAgLyoq
CisgICAgICogQ2FsbGVkIGVhY2ggdGltZSBhIG5ldyBQT0lOVEVSVVAgZXZlbnQgb2NjdXJzLiBJ
ZSwgZm9yIGVhY2ggYnV0dG9uCisgICAgICogcmVsZWFzZS4KKyAgICAgKiBPdmVycmlkZSB0aGlz
IG1ldGhvZCB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHkuCisgICAgICovCisgICAgQmFzZUNhbWVy
YVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLm9uQnV0dG9uVXAgPSBmdW5jdGlvbiAoZXZ0KSB7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgd2hlbiB3aW5kb3cgYmVjb21lcyBpbmFjdGl2
ZS4KKyAgICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHku
CisgICAgICovCisgICAgQmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLm9uTG9zdEZv
Y3VzID0gZnVuY3Rpb24gKCkgeworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBC
YXNlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUsICJidXR0b25zIiwgdm9pZCAwKTsKKyAg
ICByZXR1cm4gQmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQ7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dC50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL0lucHV0cy9hcmNSb3RhdGVDYW1lcmFHYW1lcGFk
SW5wdXQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBcmNSb3RhdGVDYW1lcmFH
YW1lcGFkSW5wdXQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90
YXRlQ2FtZXJhR2FtZXBhZElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBBcmNSb3RhdGVDYW1l
cmFHYW1lcGFkSW5wdXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNj
L2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1l
cmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2Ft
ZXJhcy9jYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0dhbWVwYWRzX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL0dhbWVwYWRzL2dhbWVwYWQgKi8gIi4vR2FtZXBhZHMvZ2Ft
ZXBhZC50cyIpOworCisKKworCisvKioKKyAqIE1hbmFnZSB0aGUgZ2FtZXBhZCBpbnB1dHMgdG8g
Y29udHJvbCBhbiBhcmMgcm90YXRlIGNhbWVyYS4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRzCisgKi8KK3ZhciBBcmNSb3Rh
dGVDYW1lcmFHYW1lcGFkSW5wdXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
ZnVuY3Rpb24gQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0KCkgeworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lcyB0aGUgZ2FtZXBhZCByb3RhdGlvbiBzZW5zaWJsaXR5LgorICAgICAg
ICAgKiBUaGlzIGlzIHRoZSB0aHJlc2hvbGQgZnJvbSB3aGVuIHJvdGF0aW9uIHN0YXJ0cyB0byBi
ZSBhY2NvdW50ZWQgZm9yIHRvIHByZXZlbnQgaml0dGVyaW5nLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5nYW1lcGFkUm90YXRpb25TZW5zaWJpbGl0eSA9IDgwOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lcyB0aGUgZ2FtZXBhZCBtb3ZlIHNlbnNpYmxpdHkuCisgICAgICAgICAq
IFRoaXMgaXMgdGhlIHRocmVzaG9sZCBmcm9tIHdoZW4gbW92aW5nIHN0YXJ0cyB0byBiZSBhY2Nv
dW50ZWQgZm9yIGZvciB0byBwcmV2ZW50IGppdHRlcmluZy4KKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuZ2FtZXBhZE1vdmVTZW5zaWJpbGl0eSA9IDQwOworICAgIH0KKyAgICAvKioKKyAgICAg
KiBBdHRhY2ggdGhlIGlucHV0IGNvbnRyb2xzIHRvIGEgc3BlY2lmaWMgZG9tIGVsZW1lbnQgdG8g
Z2V0IHRoZSBpbnB1dCBmcm9tLgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVs
ZW1lbnQgdGhlIGNvbnRyb2xzIHNob3VsZCBiZSBsaXN0ZW5lZCBmcm9tCisgICAgICogQHBhcmFt
IG5vUHJldmVudERlZmF1bHQgRGVmaW5lcyB3aGV0aGVyIGV2ZW50IGNhdWdodCBieSB0aGUgY29u
dHJvbHMgc2hvdWxkIGNhbGwgcHJldmVudGRlZmF1bHQoKSAoaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L3ByZXZlbnREZWZhdWx0KQorICAgICAq
LworICAgIEFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dC5wcm90b3R5cGUuYXR0YWNoQ29udHJv
bCA9IGZ1bmN0aW9uIChlbGVtZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHZhciBf
dGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBtYW5hZ2VyID0gdGhpcy5jYW1lcmEuZ2V0U2NlbmUo
KS5nYW1lcGFkTWFuYWdlcjsKKyAgICAgICAgdGhpcy5fb25HYW1lcGFkQ29ubmVjdGVkT2JzZXJ2
ZXIgPSBtYW5hZ2VyLm9uR2FtZXBhZENvbm5lY3RlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChn
YW1lcGFkKSB7CisgICAgICAgICAgICBpZiAoZ2FtZXBhZC50eXBlICE9PSBfR2FtZXBhZHNfZ2Ft
ZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJHYW1lcGFkIl0uUE9TRV9FTkFCTEVE
KSB7CisgICAgICAgICAgICAgICAgLy8gcHJpb3JpdGl6ZSBYQk9YIGdhbWVwYWRzLgorICAgICAg
ICAgICAgICAgIGlmICghX3RoaXMuZ2FtZXBhZCB8fCBnYW1lcGFkLnR5cGUgPT09IF9HYW1lcGFk
c19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkdhbWVwYWQiXS5YQk9YKSB7
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmdhbWVwYWQgPSBnYW1lcGFkOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX29uR2Ft
ZXBhZERpc2Nvbm5lY3RlZE9ic2VydmVyID0gbWFuYWdlci5vbkdhbWVwYWREaXNjb25uZWN0ZWRP
YnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZ2FtZXBhZCkgeworICAgICAgICAgICAgaWYgKF90aGlz
LmdhbWVwYWQgPT09IGdhbWVwYWQpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5nYW1lcGFkID0g
bnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuZ2FtZXBhZCA9
IG1hbmFnZXIuZ2V0R2FtZXBhZEJ5VHlwZShfR2FtZXBhZHNfZ2FtZXBhZF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJHYW1lcGFkIl0uWEJPWCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBEZXRhY2ggdGhlIGN1cnJlbnQgY29udHJvbHMgZnJvbSB0aGUgc3BlY2lmaWVkIGRvbSBlbGVt
ZW50LgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdG8gc3RvcCBs
aXN0ZW5pbmcgdGhlIGlucHV0cyBmcm9tCisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhR2Ft
ZXBhZElucHV0LnByb3RvdHlwZS5kZXRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsK
KyAgICAgICAgdGhpcy5jYW1lcmEuZ2V0U2NlbmUoKS5nYW1lcGFkTWFuYWdlci5vbkdhbWVwYWRD
b25uZWN0ZWRPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZl
cik7CisgICAgICAgIHRoaXMuY2FtZXJhLmdldFNjZW5lKCkuZ2FtZXBhZE1hbmFnZXIub25HYW1l
cGFkRGlzY29ubmVjdGVkT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25HYW1lcGFkRGlzY29ubmVj
dGVkT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLmdhbWVwYWQgPSBudWxsOworICAgIH07CisgICAg
LyoqCisgICAgICogVXBkYXRlIHRoZSBjdXJyZW50IGNhbWVyYSBzdGF0ZSBkZXBlbmRpbmcgb24g
dGhlIGlucHV0cyB0aGF0IGhhdmUgYmVlbiB1c2VkIHRoaXMgZnJhbWUuCisgICAgICogVGhpcyBp
cyBhIGR5bmFtaWNhbGx5IGNyZWF0ZWQgbGFtYmRhIHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBw
ZW5hbHR5IG9mIGxvb3BpbmcgZm9yIGlucHV0cyBpbiB0aGUgcmVuZGVyIGxvb3AuCisgICAgICov
CisgICAgQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0LnByb3RvdHlwZS5jaGVja0lucHV0cyA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuZ2FtZXBhZCkgeworICAgICAgICAgICAg
dmFyIGNhbWVyYSA9IHRoaXMuY2FtZXJhOworICAgICAgICAgICAgdmFyIFJTVmFsdWVzID0gdGhp
cy5nYW1lcGFkLnJpZ2h0U3RpY2s7CisgICAgICAgICAgICBpZiAoUlNWYWx1ZXMpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoUlNWYWx1ZXMueCAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBub3JtYWxpemVkUlggPSBSU1ZhbHVlcy54IC8gdGhpcy5nYW1lcGFkUm90YXRpb25TZW5zaWJp
bGl0eTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSWCAhPSAwICYmIE1hdGgu
YWJzKG5vcm1hbGl6ZWRSWCkgPiAwLjAwNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2Ft
ZXJhLmluZXJ0aWFsQWxwaGFPZmZzZXQgKz0gbm9ybWFsaXplZFJYOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChSU1ZhbHVlcy55
ICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWRSWSA9IFJTVmFsdWVz
LnkgLyB0aGlzLmdhbWVwYWRSb3RhdGlvblNlbnNpYmlsaXR5OworICAgICAgICAgICAgICAgICAg
ICBpZiAobm9ybWFsaXplZFJZICE9IDAgJiYgTWF0aC5hYnMobm9ybWFsaXplZFJZKSA+IDAuMDA1
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEuaW5lcnRpYWxCZXRhT2Zmc2V0ICs9
IG5vcm1hbGl6ZWRSWTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBMU1ZhbHVlcyA9IHRoaXMuZ2FtZXBhZC5s
ZWZ0U3RpY2s7CisgICAgICAgICAgICBpZiAoTFNWYWx1ZXMgJiYgTFNWYWx1ZXMueSAhPSAwKSB7
CisgICAgICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWRMWSA9IExTVmFsdWVzLnkgLyB0aGlzLmdh
bWVwYWRNb3ZlU2Vuc2liaWxpdHk7CisgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRMWSAh
PSAwICYmIE1hdGguYWJzKG5vcm1hbGl6ZWRMWSkgPiAwLjAwNSkgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLmNhbWVyYS5pbmVydGlhbFJhZGl1c09mZnNldCAtPSBub3JtYWxpemVkTFk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjdXJyZW50IGludHB1dC4KKyAg
ICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVy
YUdhbWVwYWRJbnB1dC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIkFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dCI7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1
dCBjbGFzcy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQorICAgICAq
LworICAgIEFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dC5wcm90b3R5cGUuZ2V0U2ltcGxlTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJnYW1lcGFkIjsKKyAgICB9OworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0LnByb3Rv
dHlwZSwgImdhbWVwYWRSb3RhdGlvblNlbnNpYmlsaXR5Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dC5wcm90b3R5cGUsICJn
YW1lcGFkTW92ZVNlbnNpYmlsaXR5Iiwgdm9pZCAwKTsKKyAgICByZXR1cm4gQXJjUm90YXRlQ2Ft
ZXJhR2FtZXBhZElucHV0OworfSgpKTsKKworX0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmFJbnB1dFR5cGVzIl1bIkFyY1JvdGF0
ZUNhbWVyYUdhbWVwYWRJbnB1dCJdID0gQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0OworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL0lucHV0cy9hcmNSb3RhdGVDYW1lcmFLZXli
b2FyZE1vdmVJbnB1dC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvSW5wdXRzL2Fy
Y1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXJjUm90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5w
dXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFJbnB1dHNNYW5h
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9jYW1lcmFJ
bnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0V2ZW50c19rZXli
b2FyZEV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vRXZlbnRzL2tleWJvYXJkRXZlbnRzICovICIuL0V2ZW50cy9rZXlib2Fy
ZEV2ZW50cy50cyIpOworCisKKworCisvKioKKyAqIE1hbmFnZSB0aGUga2V5Ym9hcmQgaW5wdXRz
IHRvIGNvbnRyb2wgdGhlIG1vdmVtZW50IG9mIGFuIGFyYyByb3RhdGUgY2FtZXJhLgorICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2N1c3RvbWl6aW5nX2NhbWVyYV9pbnB1
dHMKKyAqLwordmFyIEFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0ID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEFyY1JvdGF0ZUNhbWVyYUtleWJvYXJk
TW92ZUlucHV0KCkgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgbGlzdCBv
ZiBrZXkgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB1cCBhY3Rpb24gKGluY3JlYXNlIGFscGhh
KQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzVXAgPSBbMzhdOworICAgICAgICAvKioK
KyAgICAgICAgICogRGVmaW5lcyB0aGUgbGlzdCBvZiBrZXkgY29kZXMgYXNzb2NpYXRlZCB3aXRo
IHRoZSBkb3duIGFjdGlvbiAoZGVjcmVhc2UgYWxwaGEpCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmtleXNEb3duID0gWzQwXTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhl
IGxpc3Qgb2Yga2V5IGNvZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGVmdCBhY3Rpb24gKGluY3Jl
YXNlIGJldGEpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmtleXNMZWZ0ID0gWzM3XTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhlIGxpc3Qgb2Yga2V5IGNvZGVzIGFzc29j
aWF0ZWQgd2l0aCB0aGUgcmlnaHQgYWN0aW9uIChkZWNyZWFzZSBiZXRhKQorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5rZXlzUmlnaHQgPSBbMzldOworICAgICAgICAvKioKKyAgICAgICAgICog
RGVmaW5lcyB0aGUgbGlzdCBvZiBrZXkgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNldCBh
Y3Rpb24uCisgICAgICAgICAqIFRob3NlIGtleXMgcmVzZXQgdGhlIGNhbWVyYSB0byBpdHMgbGFz
dCBzdG9yZWQgc3RhdGUgKHdpdGggdGhlIG1ldGhvZCBjYW1lcmEuc3RvcmVTdGF0ZSgpKQorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzUmVzZXQgPSBbMjIwXTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIERlZmluZXMgdGhlIHBhbm5pbmcgc2Vuc2liaWxpdHkgb2YgdGhlIGlucHV0cy4K
KyAgICAgICAgICogKEhvdyBmYXN0IGlzIHRoZSBjYW1lcmEgcGFuaW5nKQorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5wYW5uaW5nU2Vuc2liaWxpdHkgPSA1MC4wOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lcyB0aGUgem9vbWluZyBzZW5zaWJpbGl0eSBvZiB0aGUgaW5wdXRzLgor
ICAgICAgICAgKiAoSG93IGZhc3QgaXMgdGhlIGNhbWVyYSB6b29taW5nKQorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy56b29taW5nU2Vuc2liaWxpdHkgPSAyNS4wOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lcyB3ZXRoZXIgbWFpbnRhaW5pbmcgdGhlIGFsdCBrZXkgZG93biBzd2l0
Y2ggdGhlIG1vdmVtZW50IG1vZGUgZnJvbQorICAgICAgICAgKiBvcmllbnRhdGlvbiB0byB6b29t
LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy51c2VBbHRUb1pvb20gPSB0cnVlOworICAgICAg
ICAvKioKKyAgICAgICAgICogUm90YXRpb24gc3BlZWQgb2YgdGhlIGNhbWVyYQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5hbmd1bGFyU3BlZWQgPSAwLjAxOworICAgICAgICB0aGlzLl9rZXlz
ID0gbmV3IEFycmF5KCk7CisgICAgfQorICAgIC8qKgorICAgICAqIEF0dGFjaCB0aGUgaW5wdXQg
Y29udHJvbHMgdG8gYSBzcGVjaWZpYyBkb20gZWxlbWVudCB0byBnZXQgdGhlIGlucHV0IGZyb20u
CisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0aGUgY29udHJvbHMg
c2hvdWxkIGJlIGxpc3RlbmVkIGZyb20KKyAgICAgKiBAcGFyYW0gbm9QcmV2ZW50RGVmYXVsdCBE
ZWZpbmVzIHdoZXRoZXIgZXZlbnQgY2F1Z2h0IGJ5IHRoZSBjb250cm9scyBzaG91bGQgY2FsbCBw
cmV2ZW50ZGVmYXVsdCgpIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2Nz
L1dlYi9BUEkvRXZlbnQvcHJldmVudERlZmF1bHQpCisgICAgICovCisgICAgQXJjUm90YXRlQ2Ft
ZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLmF0dGFjaENvbnRyb2wgPSBmdW5jdGlvbiAo
ZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICBpZiAodGhpcy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zY2VuZSA9IHRoaXMuY2FtZXJhLmdldFNj
ZW5lKCk7CisgICAgICAgIHRoaXMuX2VuZ2luZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOwor
ICAgICAgICB0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZlciA9IHRoaXMuX2VuZ2luZS5vbkNhbnZh
c0JsdXJPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5fa2V5
cyA9IFtdOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fb25LZXlib2FyZE9ic2VydmVyID0g
dGhpcy5fc2NlbmUub25LZXlib2FyZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChpbmZvKSB7Cisg
ICAgICAgICAgICB2YXIgZXZ0ID0gaW5mby5ldmVudDsKKyAgICAgICAgICAgIGlmICghZXZ0Lm1l
dGFLZXkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50eXBlID09PSBfRXZlbnRzX2tleWJv
YXJkRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIktleWJvYXJkRXZlbnRUeXBl
cyJdLktFWURPV04pIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2N0cmxQcmVzc2VkID0g
ZXZ0LmN0cmxLZXk7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9hbHRQcmVzc2VkID0gZXZ0
LmFsdEtleTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmtleXNVcC5pbmRleE9mKGV2
dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNE
b3duLmluZGV4T2YoZXZ0LmtleUNvZGUpICE9PSAtMSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICAgX3RoaXMua2V5c0xlZnQuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5rZXlzUmlnaHQuaW5kZXhPZihldnQua2V5Q29kZSkgIT09
IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5rZXlzUmVzZXQuaW5kZXhPZihl
dnQua2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXgg
PSBfdGhpcy5fa2V5cy5pbmRleE9mKGV2dC5rZXlDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fa2V5cy5wdXNoKGV2dC5rZXlDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChldnQucHJldmVudERlZmF1bHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoX3RoaXMua2V5c1VwLmluZGV4T2YoZXZ0LmtleUNvZGUpICE9
PSAtMSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMua2V5c0Rvd24uaW5kZXhPZihl
dnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5rZXlz
TGVmdC5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF90aGlzLmtleXNSaWdodC5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNSZXNldC5pbmRleE9mKGV2dC5rZXlDb2RlKSAh
PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IF90aGlzLl9rZXlz
LmluZGV4T2YoZXZ0LmtleUNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4
ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fa2V5cy5zcGxpY2Uo
aW5kZXgsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGV2dC5wcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBldnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoq
CisgICAgICogRGV0YWNoIHRoZSBjdXJyZW50IGNvbnRyb2xzIGZyb20gdGhlIHNwZWNpZmllZCBk
b20gZWxlbWVudC4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVtZW50IHRv
IHN0b3AgbGlzdGVuaW5nIHRoZSBpbnB1dHMgZnJvbQorICAgICAqLworICAgIEFyY1JvdGF0ZUNh
bWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZS5kZXRhY2hDb250cm9sID0gZnVuY3Rpb24g
KGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKHRoaXMuX3NjZW5lKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fb25LZXlib2FyZE9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUu
b25LZXlib2FyZE9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uS2V5Ym9hcmRPYnNlcnZlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUub25DYW52YXNCbHVyT2JzZXJ2YWJsZS5y
ZW1vdmUodGhpcy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGhpcy5fb25LZXlib2FyZE9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMu
X29uQ2FudmFzQmx1ck9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9r
ZXlzID0gW107CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgY2Ft
ZXJhIHN0YXRlIGRlcGVuZGluZyBvbiB0aGUgaW5wdXRzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgdGhp
cyBmcmFtZS4KKyAgICAgKiBUaGlzIGlzIGEgZHluYW1pY2FsbHkgY3JlYXRlZCBsYW1iZGEgdG8g
YXZvaWQgdGhlIHBlcmZvcm1hbmNlIHBlbmFsdHkgb2YgbG9vcGluZyBmb3IgaW5wdXRzIGluIHRo
ZSByZW5kZXIgbG9vcC4KKyAgICAgKi8KKyAgICBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dC5wcm90b3R5cGUuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLl9vbktleWJvYXJkT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlz
LmNhbWVyYTsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9r
ZXlzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBrZXlDb2RlID0gdGhp
cy5fa2V5c1tpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKHRoaXMua2V5c0xlZnQuaW5kZXhP
ZihrZXlDb2RlKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N0cmxQ
cmVzc2VkICYmIHRoaXMuY2FtZXJhLl91c2VDdHJsRm9yUGFubmluZykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FtZXJhLmluZXJ0aWFsUGFubmluZ1ggLT0gMSAvIHRoaXMucGFubmluZ1Nl
bnNpYmlsaXR5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLmluZXJ0aWFsQWxwaGFPZmZzZXQg
LT0gdGhpcy5hbmd1bGFyU3BlZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5rZXlzVXAuaW5kZXhPZihrZXlD
b2RlKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N0cmxQcmVzc2Vk
ICYmIHRoaXMuY2FtZXJhLl91c2VDdHJsRm9yUGFubmluZykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FtZXJhLmluZXJ0aWFsUGFubmluZ1kgKz0gMSAvIHRoaXMucGFubmluZ1NlbnNpYmls
aXR5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHRoaXMuX2FsdFByZXNzZWQgJiYgdGhpcy51c2VBbHRUb1pvb20pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbWVyYS5pbmVydGlhbFJhZGl1c09mZnNldCArPSAxIC8gdGhpcy56b29taW5n
U2Vuc2liaWxpdHk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEuaW5lcnRpYWxCZXRhT2Zmc2V0
IC09IHRoaXMuYW5ndWxhclNwZWVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMua2V5c1JpZ2h0LmluZGV4T2Yo
a2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdHJsUHJl
c3NlZCAmJiB0aGlzLmNhbWVyYS5fdXNlQ3RybEZvclBhbm5pbmcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbWVyYS5pbmVydGlhbFBhbm5pbmdYICs9IDEgLyB0aGlzLnBhbm5pbmdTZW5z
aWJpbGl0eTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYS5pbmVydGlhbEFscGhhT2Zmc2V0ICs9
IHRoaXMuYW5ndWxhclNwZWVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMua2V5c0Rvd24uaW5kZXhPZihrZXlD
b2RlKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N0cmxQcmVzc2Vk
ICYmIHRoaXMuY2FtZXJhLl91c2VDdHJsRm9yUGFubmluZykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FtZXJhLmluZXJ0aWFsUGFubmluZ1kgLT0gMSAvIHRoaXMucGFubmluZ1NlbnNpYmls
aXR5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHRoaXMuX2FsdFByZXNzZWQgJiYgdGhpcy51c2VBbHRUb1pvb20pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbWVyYS5pbmVydGlhbFJhZGl1c09mZnNldCAtPSAxIC8gdGhpcy56b29taW5n
U2Vuc2liaWxpdHk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEuaW5lcnRpYWxCZXRhT2Zmc2V0
ICs9IHRoaXMuYW5ndWxhclNwZWVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMua2V5c1Jlc2V0LmluZGV4T2Yo
a2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW1lcmEudXNlSW5w
dXRUb1Jlc3RvcmVTdGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLnJlc3Rv
cmVTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBj
bGFzcyBuYW1lIG9mIHRoZSBjdXJyZW50IGludHB1dC4KKyAgICAgKiBAcmV0dXJucyB0aGUgY2xh
c3MgbmFtZQorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0LnBy
b3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQXJj
Um90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0IHRoZSBmcmllbmRseSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQgY2xhc3MuCisg
ICAgICogQHJldHVybnMgdGhlIGlucHV0IGZyaWVuZGx5IG5hbWUKKyAgICAgKi8KKyAgICBBcmNS
b3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUuZ2V0U2ltcGxlTmFtZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJrZXlib2FyZCI7CisgICAgfTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3Rv
dHlwZSwgImtleXNVcCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNS
b3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJrZXlzRG93biIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1v
dmVJbnB1dC5wcm90b3R5cGUsICJrZXlzTGVmdCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJr
ZXlzUmlnaHQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRl
Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLCAia2V5c1Jlc2V0Iiwgdm9pZCAwKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlu
cHV0LnByb3RvdHlwZSwgInBhbm5pbmdTZW5zaWJpbGl0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5
cGUsICJ6b29taW5nU2Vuc2liaWxpdHkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisg
ICAgXSwgQXJjUm90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLCAidXNlQWx0
VG9ab29tIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNh
bWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZSwgImFuZ3VsYXJTcGVlZCIsIHZvaWQgMCk7
CisgICAgcmV0dXJuIEFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0OworfSgpKTsKKwor
X0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJDYW1lcmFJbnB1dFR5cGVzIl1bIkFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0Il0g
PSBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dDsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYU1vdXNlV2hl
ZWxJbnB1dC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFyY1JvdGF0ZUNh
bWVyYU1vdXNlV2hlZWxJbnB1dCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJBcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFy
Y1JvdGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0
b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFu
YWdlciAqLyAiLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0V2ZW50cy9wb2ludGVyRXZl
bnRzICovICIuL0V2ZW50cy9wb2ludGVyRXZlbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnNjYWxhciAqLyAiLi9NYXRo
cy9tYXRoLnNjYWxhci50cyIpOworCisKKworCisKKy8qKgorICogTWFuYWdlIHRoZSBtb3VzZSB3
aGVlbCBpbnB1dHMgdG8gY29udHJvbCBhbiBhcmMgcm90YXRlIGNhbWVyYS4KKyAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRzCisg
Ki8KK3ZhciBBcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0
KCkgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBTZXQgdGhlIG1vdXNlIHdoZWVs
IHByZWNpc2lvbiBvciBob3cgZmFzdCBpcyB0aGUgY2FtZXJhIHpvb21pbmcuCisgICAgICAgICAq
LworICAgICAgICB0aGlzLndoZWVsUHJlY2lzaW9uID0gMy4wOworICAgICAgICAvKioKKyAgICAg
ICAgICogd2hlZWxEZWx0YVBlcmNlbnRhZ2Ugd2lsbCBiZSB1c2VkIGluc3RlYWQgb2Ygd2hlZWxQ
cmVjaXNpb24gaWYgZGlmZmVyZW50IGZyb20gMC4KKyAgICAgICAgICogSXQgZGVmaW5lcyB0aGUg
cGVyY2VudGFnZSBvZiBjdXJyZW50IGNhbWVyYS5yYWRpdXMgdG8gdXNlIGFzIGRlbHRhIHdoZW4g
d2hlZWwgaXMgdXNlZC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMud2hlZWxEZWx0YVBlcmNl
bnRhZ2UgPSAwOworICAgIH0KKyAgICBBcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQucHJv
dG90eXBlLmNvbXB1dGVEZWx0YUZyb21Nb3VzZVdoZWVsTGVnYWN5RXZlbnQgPSBmdW5jdGlvbiAo
bW91c2VXaGVlbExlZ2FjeUV2ZW50LCByYWRpdXMpIHsKKyAgICAgICAgdmFyIGRlbHRhID0gMDsK
KyAgICAgICAgdmFyIHdoZWVsRGVsdGEgPSAobW91c2VXaGVlbExlZ2FjeUV2ZW50LndoZWVsRGVs
dGEgKiAwLjAxICogdGhpcy53aGVlbERlbHRhUGVyY2VudGFnZSkgKiByYWRpdXM7CisgICAgICAg
IGlmIChtb3VzZVdoZWVsTGVnYWN5RXZlbnQud2hlZWxEZWx0YSA+IDApIHsKKyAgICAgICAgICAg
IGRlbHRhID0gd2hlZWxEZWx0YSAvICgxLjAgKyB0aGlzLndoZWVsRGVsdGFQZXJjZW50YWdlKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlbHRhID0gd2hlZWxEZWx0
YSAqICgxLjAgKyB0aGlzLndoZWVsRGVsdGFQZXJjZW50YWdlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZGVsdGE7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIGlucHV0
IGNvbnRyb2xzIHRvIGEgc3BlY2lmaWMgZG9tIGVsZW1lbnQgdG8gZ2V0IHRoZSBpbnB1dCBmcm9t
LgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdGhlIGNvbnRyb2xz
IHNob3VsZCBiZSBsaXN0ZW5lZCBmcm9tCisgICAgICogQHBhcmFtIG5vUHJldmVudERlZmF1bHQg
RGVmaW5lcyB3aGV0aGVyIGV2ZW50IGNhdWdodCBieSB0aGUgY29udHJvbHMgc2hvdWxkIGNhbGwg
cHJldmVudGRlZmF1bHQoKSAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9j
cy9XZWIvQVBJL0V2ZW50L3ByZXZlbnREZWZhdWx0KQorICAgICAqLworICAgIEFyY1JvdGF0ZUNh
bWVyYU1vdXNlV2hlZWxJbnB1dC5wcm90b3R5cGUuYXR0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChl
bGVtZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIHRoaXMuX3doZWVsID0gZnVuY3Rpb24gKHAsIHMpIHsKKyAgICAgICAgICAgIC8vc2Fu
aXR5IGNoZWNrIC0gdGhpcyBzaG91bGQgYmUgYSBQb2ludGVyV2hlZWwgZXZlbnQuCisgICAgICAg
ICAgICBpZiAocC50eXBlICE9PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSV0hFRUwpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgZXZlbnQg
PSBwLmV2ZW50OworICAgICAgICAgICAgdmFyIGRlbHRhID0gMDsKKyAgICAgICAgICAgIHZhciBt
b3VzZVdoZWVsTGVnYWN5RXZlbnQgPSBldmVudDsKKyAgICAgICAgICAgIGlmIChtb3VzZVdoZWVs
TGVnYWN5RXZlbnQud2hlZWxEZWx0YSkgeworICAgICAgICAgICAgICAgIGlmIChfdGhpcy53aGVl
bERlbHRhUGVyY2VudGFnZSkgeworICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IF90aGlzLmNv
bXB1dGVEZWx0YUZyb21Nb3VzZVdoZWVsTGVnYWN5RXZlbnQobW91c2VXaGVlbExlZ2FjeUV2ZW50
LCBfdGhpcy5jYW1lcmEucmFkaXVzKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgem9vbWlu
ZyBpbiwgZXN0aW1hdGUgdGhlIHRhcmdldCByYWRpdXMgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUg
dGhlIGRlbHRhIGZvciBpbmVydGlhCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBz
dG9wIG11bHRpcGxlIHNjcm9sbCBldmVudHMgem9vbWluZyBpbiBmcm9tIGFkZGluZyB0b28gbXVj
aCBpbmVydGlhCisgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSA+IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBlc3RpbWF0ZWRUYXJnZXRSYWRpdXMgPSBfdGhpcy5jYW1lcmEu
cmFkaXVzOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldEluZXJ0aWEgPSBfdGhp
cy5jYW1lcmEuaW5lcnRpYWxSYWRpdXNPZmZzZXQgKyBkZWx0YTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjAgJiYgTWF0aC5hYnModGFyZ2V0SW5lcnRpYSkg
PiAwLjAwMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGVkVGFy
Z2V0UmFkaXVzIC09IHRhcmdldEluZXJ0aWE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGFyZ2V0SW5lcnRpYSAqPSBfdGhpcy5jYW1lcmEuaW5lcnRpYTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZFRhcmdldFJhZGl1cyA9
IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIi
XS5DbGFtcChlc3RpbWF0ZWRUYXJnZXRSYWRpdXMsIDAsIE51bWJlci5NQVhfVkFMVUUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBfdGhpcy5jb21wdXRlRGVsdGFGcm9tTW91c2VX
aGVlbExlZ2FjeUV2ZW50KG1vdXNlV2hlZWxMZWdhY3lFdmVudCwgZXN0aW1hdGVkVGFyZ2V0UmFk
aXVzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBtb3VzZVdoZWVsTGVn
YWN5RXZlbnQud2hlZWxEZWx0YSAvIChfdGhpcy53aGVlbFByZWNpc2lvbiAqIDQwKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2YXIgZGVsdGFWYWx1ZSA9IGV2ZW50LmRlbHRhWSB8fCBldmVudC5kZXRhaWw7Cisg
ICAgICAgICAgICAgICAgZGVsdGEgPSAtZGVsdGFWYWx1ZSAvIF90aGlzLndoZWVsUHJlY2lzaW9u
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlbHRhKSB7CisgICAgICAgICAgICAg
ICAgX3RoaXMuY2FtZXJhLmluZXJ0aWFsUmFkaXVzT2Zmc2V0ICs9IGRlbHRhOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9OworICAgICAgICB0aGlzLl9vYnNlcnZlciA9IHRoaXMuY2FtZXJhLmdldFNjZW5lKCku
b25Qb2ludGVyT2JzZXJ2YWJsZS5hZGQodGhpcy5fd2hlZWwsIF9FdmVudHNfcG9pbnRlckV2ZW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5U
RVJXSEVFTCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRhY2ggdGhlIGN1cnJlbnQgY29u
dHJvbHMgZnJvbSB0aGUgc3BlY2lmaWVkIGRvbSBlbGVtZW50LgorICAgICAqIEBwYXJhbSBlbGVt
ZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdGhlIGlucHV0cyBmcm9t
CisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LnByb3RvdHlwZS5k
ZXRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKHRoaXMuX29i
c2VydmVyICYmIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMuY2FtZXJhLmdldFNjZW5lKCku
b25Qb2ludGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb2JzZXJ2ZXIpOworICAgICAgICAgICAg
dGhpcy5fb2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fd2hlZWwgPSBudWxsOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9m
IHRoZSBjdXJyZW50IGludHB1dC4KKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAg
ICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dC5wcm90b3R5cGUuZ2V0Q2xh
c3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkFyY1JvdGF0ZUNhbWVyYU1v
dXNlV2hlZWxJbnB1dCI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5
IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBjbGFzcy4KKyAgICAgKiBAcmV0dXJucyB0
aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYU1vdXNl
V2hlZWxJbnB1dC5wcm90b3R5cGUuZ2V0U2ltcGxlTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICJtb3VzZXdoZWVsIjsKKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LnByb3RvdHlwZSwgIndoZWVsUHJlY2lz
aW9uIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVy
YU1vdXNlV2hlZWxJbnB1dC5wcm90b3R5cGUsICJ3aGVlbERlbHRhUGVyY2VudGFnZSIsIHZvaWQg
MCk7CisgICAgcmV0dXJuIEFyY1JvdGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dDsKK30oKSk7CisK
K19DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQ2FtZXJhSW5wdXRUeXBlcyJdWyJBcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQiXSA9
IEFyY1JvdGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dDsKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dC50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBcmNSb3RhdGVDYW1lcmFQb2ludGVy
c0lucHV0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1JvdGF0ZUNh
bWVyYVBvaW50ZXJzSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFyY1JvdGF0ZUNhbWVyYVBv
aW50ZXJzSW5wdXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAi
Li4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2Rl
Y29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFJ
bnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJh
cy9jYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0Nh
bWVyYXNfSW5wdXRzX0Jhc2VDYW1lcmFQb2ludGVyc0lucHV0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL0lucHV0cy9C
YXNlQ2FtZXJhUG9pbnRlcnNJbnB1dCAqLyAiLi9DYW1lcmFzL0lucHV0cy9CYXNlQ2FtZXJhUG9p
bnRlcnNJbnB1dC50cyIpOworCisKKworCisvKioKKyAqIE1hbmFnZSB0aGUgcG9pbnRlcnMgaW5w
dXRzIHRvIGNvbnRyb2wgYW4gYXJjIHJvdGF0ZSBjYW1lcmEuCisgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXppbmdfY2FtZXJhX2lucHV0cworICovCit2YXIg
QXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChf
c3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVu
ZHMiXShBcmNSb3RhdGVDYW1lcmFQb2ludGVyc0lucHV0LCBfc3VwZXIpOworICAgIGZ1bmN0aW9u
IEFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9z
dXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwor
ICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgYnV0dG9ucyBhc3NvY2lhdGVkIHdp
dGggdGhlIGlucHV0IHRvIGhhbmRsZSBjYW1lcmEgbW92ZS4KKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLmJ1dHRvbnMgPSBbMCwgMSwgMl07CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZp
bmVzIHRoZSBwb2ludGVyIGFuZ3VsYXIgc2Vuc2liaWxpdHkgIGFsb25nIHRoZSBYIGF4aXMgb3Ig
aG93IGZhc3QgaXMKKyAgICAgICAgICogdGhlIGNhbWVyYSByb3RhdGluZy4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLmFuZ3VsYXJTZW5zaWJpbGl0eVggPSAxMDAwLjA7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBwb2ludGVyIGFuZ3VsYXIgc2Vuc2liaWxpdHkgYWxv
bmcgdGhlIFkgYXhpcyBvciBob3cgZmFzdCBpcworICAgICAgICAgKiB0aGUgY2FtZXJhIHJvdGF0
aW5nLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYW5ndWxhclNlbnNpYmlsaXR5WSA9IDEw
MDAuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhlIHBvaW50ZXIgcGluY2gg
cHJlY2lzaW9uIG9yIGhvdyBmYXN0IGlzIHRoZSBjYW1lcmEgem9vbWluZy4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLnBpbmNoUHJlY2lzaW9uID0gMTIuMDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIHBpbmNoRGVsdGFQZXJjZW50YWdlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHBpbmNo
UHJlY2lzaW9uIGlmIGRpZmZlcmVudAorICAgICAgICAgKiBmcm9tIDAuCisgICAgICAgICAqIEl0
IGRlZmluZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgY3VycmVudCBjYW1lcmEucmFkaXVzIHRvIHVzZSBh
cyBkZWx0YSB3aGVuCisgICAgICAgICAqIHBpbmNoIHpvb20gaXMgdXNlZC4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLnBpbmNoRGVsdGFQZXJjZW50YWdlID0gMDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIERlZmluZXMgdGhlIHBvaW50ZXIgcGFubmluZyBzZW5zaWJpbGl0eSBvciBob3cg
ZmFzdCBpcyB0aGUgY2FtZXJhIG1vdmluZy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnBh
bm5pbmdTZW5zaWJpbGl0eSA9IDEwMDAuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZXMgd2hldGhlciBwYW5uaW5nICgyIGZpbmdlcnMgc3dpcGUpIGlzIGVuYWJsZWQgdGhyb3VnaCBt
dWx0aXRvdWNoLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubXVsdGlUb3VjaFBhbm5pbmcg
PSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB3aGV0aGVyIHBhbm5pbmcg
aXMgZW5hYmxlZCBmb3IgYm90aCBwYW4gKDIgZmluZ2VycyBzd2lwZSkgYW5kCisgICAgICAgICAq
IHpvb20gKHBpbmNoKSB0aHJvdWdoIG11bHRpdG91Y2guCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5tdWx0aVRvdWNoUGFuQW5kWm9vbSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBSZXZlcnMgcGluY2ggYWN0aW9uIGRpcmVjdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLnBpbmNoSW53YXJkcyA9IHRydWU7CisgICAgICAgIF90aGlzLl9pc1BhbkNsaWNrID0gZmFs
c2U7CisgICAgICAgIF90aGlzLl90d29GaW5nZXJBY3Rpdml0eUNvdW50ID0gMDsKKyAgICAgICAg
X3RoaXMuX2lzUGluY2hpbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0K
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjdXJyZW50IGlucHV0
LgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgQXJjUm90YXRl
Q2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gIkFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQiOworICAgIH07
CisgICAgLyoqCisgICAgICogQ2FsbGVkIG9uIHBvaW50ZXIgUE9JTlRFUk1PVkUgZXZlbnQgaWYg
b25seSBhIHNpbmdsZSB0b3VjaCBpcyBhY3RpdmUuCisgICAgICovCisgICAgQXJjUm90YXRlQ2Ft
ZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUub25Ub3VjaCA9IGZ1bmN0aW9uIChwb2ludCwgb2Zm
c2V0WCwgb2Zmc2V0WSkgeworICAgICAgICBpZiAodGhpcy5wYW5uaW5nU2Vuc2liaWxpdHkgIT09
IDAgJiYKKyAgICAgICAgICAgICgodGhpcy5fY3RybEtleSAmJiB0aGlzLmNhbWVyYS5fdXNlQ3Ry
bEZvclBhbm5pbmcpIHx8IHRoaXMuX2lzUGFuQ2xpY2spKSB7CisgICAgICAgICAgICB0aGlzLmNh
bWVyYS5pbmVydGlhbFBhbm5pbmdYICs9IC1vZmZzZXRYIC8gdGhpcy5wYW5uaW5nU2Vuc2liaWxp
dHk7CisgICAgICAgICAgICB0aGlzLmNhbWVyYS5pbmVydGlhbFBhbm5pbmdZICs9IG9mZnNldFkg
LyB0aGlzLnBhbm5pbmdTZW5zaWJpbGl0eTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHRoaXMuY2FtZXJhLmluZXJ0aWFsQWxwaGFPZmZzZXQgLT0gb2Zmc2V0WCAvIHRo
aXMuYW5ndWxhclNlbnNpYmlsaXR5WDsKKyAgICAgICAgICAgIHRoaXMuY2FtZXJhLmluZXJ0aWFs
QmV0YU9mZnNldCAtPSBvZmZzZXRZIC8gdGhpcy5hbmd1bGFyU2Vuc2liaWxpdHlZOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgb24gcG9pbnRlciBQT0lOVEVSRE9V
QkxFVEFQIGV2ZW50LgorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQu
cHJvdG90eXBlLm9uRG91YmxlVGFwID0gZnVuY3Rpb24gKHR5cGUpIHsKKyAgICAgICAgaWYgKHRo
aXMuY2FtZXJhLnVzZUlucHV0VG9SZXN0b3JlU3RhdGUpIHsKKyAgICAgICAgICAgIHRoaXMuY2Ft
ZXJhLnJlc3RvcmVTdGF0ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
YWxsZWQgb24gcG9pbnRlciBQT0lOVEVSTU9WRSBldmVudCBpZiBtdWx0aXBsZSB0b3VjaGVzIGFy
ZSBhY3RpdmUuCisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90
b3R5cGUub25NdWx0aVRvdWNoID0gZnVuY3Rpb24gKHBvaW50QSwgcG9pbnRCLCBwcmV2aW91c1Bp
bmNoU3F1YXJlZERpc3RhbmNlLCBwaW5jaFNxdWFyZWREaXN0YW5jZSwgcHJldmlvdXNNdWx0aVRv
dWNoUGFuUG9zaXRpb24sIG11bHRpVG91Y2hQYW5Qb3NpdGlvbikgeworICAgICAgICBpZiAocHJl
dmlvdXNQaW5jaFNxdWFyZWREaXN0YW5jZSA9PT0gMCAmJiBwcmV2aW91c011bHRpVG91Y2hQYW5Q
b3NpdGlvbiA9PT0gbnVsbCkgeworICAgICAgICAgICAgLy8gRmlyc3QgdGltZSB0aGlzIG1ldGhv
ZCBpcyBjYWxsZWQgZm9yIG5ldyBwaW5jaC4KKyAgICAgICAgICAgIC8vIE5leHQgdGltZSB0aGlz
IGlzIGNhbGxlZCB0aGVyZSB3aWxsIGJlIGEKKyAgICAgICAgICAgIC8vIHByZXZpb3VzUGluY2hT
cXVhcmVkRGlzdGFuY2UgYW5kIHBpbmNoU3F1YXJlZERpc3RhbmNlIHRvIGNvbXBhcmUuCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBpbmNoU3F1YXJlZERpc3Rh
bmNlID09PSAwICYmIG11bHRpVG91Y2hQYW5Qb3NpdGlvbiA9PT0gbnVsbCkgeworICAgICAgICAg
ICAgLy8gTGFzdCB0aW1lIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgcGlu
Y2guCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRpcmVjdGlv
biA9IHRoaXMucGluY2hJbndhcmRzID8gMSA6IC0xOworICAgICAgICBpZiAodGhpcy5tdWx0aVRv
dWNoUGFuQW5kWm9vbSkgeworICAgICAgICAgICAgaWYgKHRoaXMucGluY2hEZWx0YVBlcmNlbnRh
Z2UpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYS5pbmVydGlhbFJhZGl1c09mZnNldCAr
PQorICAgICAgICAgICAgICAgICAgICAocGluY2hTcXVhcmVkRGlzdGFuY2UgLSBwcmV2aW91c1Bp
bmNoU3F1YXJlZERpc3RhbmNlKSAqIDAuMDAxICoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuY2FtZXJhLnJhZGl1cyAqIHRoaXMucGluY2hEZWx0YVBlcmNlbnRhZ2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYS5pbmVy
dGlhbFJhZGl1c09mZnNldCArPQorICAgICAgICAgICAgICAgICAgICAocGluY2hTcXVhcmVkRGlz
dGFuY2UgLSBwcmV2aW91c1BpbmNoU3F1YXJlZERpc3RhbmNlKSAvCisgICAgICAgICAgICAgICAg
ICAgICAgICAodGhpcy5waW5jaFByZWNpc2lvbiAqIGRpcmVjdGlvbiAqCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHRoaXMuYW5ndWxhclNlbnNpYmlsaXR5WCArIHRoaXMuYW5ndWxhclNl
bnNpYmlsaXR5WSkgLyAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLnBh
bm5pbmdTZW5zaWJpbGl0eSAhPT0gMCAmJgorICAgICAgICAgICAgICAgIHByZXZpb3VzTXVsdGlU
b3VjaFBhblBvc2l0aW9uICYmIG11bHRpVG91Y2hQYW5Qb3NpdGlvbikgeworICAgICAgICAgICAg
ICAgIHZhciBtb3ZlRGVsdGFYID0gbXVsdGlUb3VjaFBhblBvc2l0aW9uLnggLSBwcmV2aW91c011
bHRpVG91Y2hQYW5Qb3NpdGlvbi54OworICAgICAgICAgICAgICAgIHZhciBtb3ZlRGVsdGFZID0g
bXVsdGlUb3VjaFBhblBvc2l0aW9uLnkgLSBwcmV2aW91c011bHRpVG91Y2hQYW5Qb3NpdGlvbi55
OworICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLmluZXJ0aWFsUGFubmluZ1ggKz0gLW1vdmVE
ZWx0YVggLyB0aGlzLnBhbm5pbmdTZW5zaWJpbGl0eTsKKyAgICAgICAgICAgICAgICB0aGlzLmNh
bWVyYS5pbmVydGlhbFBhbm5pbmdZICs9IG1vdmVEZWx0YVkgLyB0aGlzLnBhbm5pbmdTZW5zaWJp
bGl0eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHRoaXMuX3R3b0ZpbmdlckFjdGl2aXR5Q291bnQrKzsKKyAgICAgICAgICAgIHZhciBwcmV2
aW91c1BpbmNoRGlzdGFuY2UgPSBNYXRoLnNxcnQocHJldmlvdXNQaW5jaFNxdWFyZWREaXN0YW5j
ZSk7CisgICAgICAgICAgICB2YXIgcGluY2hEaXN0YW5jZSA9IE1hdGguc3FydChwaW5jaFNxdWFy
ZWREaXN0YW5jZSk7CisgICAgICAgICAgICBpZiAodGhpcy5faXNQaW5jaGluZyB8fAorICAgICAg
ICAgICAgICAgICh0aGlzLl90d29GaW5nZXJBY3Rpdml0eUNvdW50IDwgMjAgJiYKKyAgICAgICAg
ICAgICAgICAgICAgTWF0aC5hYnMocGluY2hEaXN0YW5jZSAtIHByZXZpb3VzUGluY2hEaXN0YW5j
ZSkgPgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEucGluY2hUb1Bhbk1heERp
c3RhbmNlKSkgeworICAgICAgICAgICAgICAgIC8vIFNpbmNlIHBpbmNoIGhhcyBub3QgYmVlbiBh
Y3RpdmUgbG9uZywgYXNzdW1lIHdlIGludGVuZCB0byB6b29tLgorICAgICAgICAgICAgICAgIGlm
ICh0aGlzLnBpbmNoRGVsdGFQZXJjZW50YWdlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
Y2FtZXJhLmluZXJ0aWFsUmFkaXVzT2Zmc2V0ICs9CisgICAgICAgICAgICAgICAgICAgICAgICAo
cGluY2hTcXVhcmVkRGlzdGFuY2UgLSBwcmV2aW91c1BpbmNoU3F1YXJlZERpc3RhbmNlKSAqIDAu
MDAxICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYS5yYWRpdXMgKiB0
aGlzLnBpbmNoRGVsdGFQZXJjZW50YWdlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEuaW5lcnRpYWxSYWRp
dXNPZmZzZXQgKz0KKyAgICAgICAgICAgICAgICAgICAgICAgIChwaW5jaFNxdWFyZWREaXN0YW5j
ZSAtIHByZXZpb3VzUGluY2hTcXVhcmVkRGlzdGFuY2UpIC8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodGhpcy5waW5jaFByZWNpc2lvbiAqIGRpcmVjdGlvbiAqCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh0aGlzLmFuZ3VsYXJTZW5zaWJpbGl0eVggKyB0aGlzLmFuZ3Vs
YXJTZW5zaWJpbGl0eVkpIC8gMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vIFNpbmNlIHdlIGFyZSBwaW5jaGluZywgcmVtYWluIHBpbmNoaW5nIG9uIG5leHQgaXRlcmF0
aW9uLgorICAgICAgICAgICAgICAgIHRoaXMuX2lzUGluY2hpbmcgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gUGF1c2UgYmV0d2Vl
biBwaW5jaCBzdGFydGluZyBhbmQgbW92aW5nIGltcGxpZXMgbm90IGEgem9vbSBldmVudC4KKyAg
ICAgICAgICAgICAgICAvLyBQYW4gaW5zdGVhZC4KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5w
YW5uaW5nU2Vuc2liaWxpdHkgIT09IDAgJiYgdGhpcy5tdWx0aVRvdWNoUGFubmluZyAmJgorICAg
ICAgICAgICAgICAgICAgICBtdWx0aVRvdWNoUGFuUG9zaXRpb24gJiYgcHJldmlvdXNNdWx0aVRv
dWNoUGFuUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1vdmVEZWx0YVggPSBt
dWx0aVRvdWNoUGFuUG9zaXRpb24ueCAtIHByZXZpb3VzTXVsdGlUb3VjaFBhblBvc2l0aW9uLng7
CisgICAgICAgICAgICAgICAgICAgIHZhciBtb3ZlRGVsdGFZID0gbXVsdGlUb3VjaFBhblBvc2l0
aW9uLnkgLSBwcmV2aW91c011bHRpVG91Y2hQYW5Qb3NpdGlvbi55OworICAgICAgICAgICAgICAg
ICAgICB0aGlzLmNhbWVyYS5pbmVydGlhbFBhbm5pbmdYICs9IC1tb3ZlRGVsdGFYIC8gdGhpcy5w
YW5uaW5nU2Vuc2liaWxpdHk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLmluZXJ0
aWFsUGFubmluZ1kgKz0gbW92ZURlbHRhWSAvIHRoaXMucGFubmluZ1NlbnNpYmlsaXR5OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogQ2FsbGVkIGVhY2ggdGltZSBhIG5ldyBQT0lOVEVSRE9XTiBldmVudCBvY2N1cnMu
IEllLCBmb3IgZWFjaCBidXR0b24KKyAgICAgKiBwcmVzcy4KKyAgICAgKi8KKyAgICBBcmNSb3Rh
dGVDYW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZS5vbkJ1dHRvbkRvd24gPSBmdW5jdGlvbiAo
ZXZ0KSB7CisgICAgICAgIHRoaXMuX2lzUGFuQ2xpY2sgPSBldnQuYnV0dG9uID09PSB0aGlzLmNh
bWVyYS5fcGFubmluZ01vdXNlQnV0dG9uOworICAgIH07CisgICAgLyoqCisgICAgICogQ2FsbGVk
IGVhY2ggdGltZSBhIG5ldyBQT0lOVEVSVVAgZXZlbnQgb2NjdXJzLiBJZSwgZm9yIGVhY2ggYnV0
dG9uCisgICAgICogcmVsZWFzZS4KKyAgICAgKi8KKyAgICBBcmNSb3RhdGVDYW1lcmFQb2ludGVy
c0lucHV0LnByb3RvdHlwZS5vbkJ1dHRvblVwID0gZnVuY3Rpb24gKGV2dCkgeworICAgICAgICB0
aGlzLl90d29GaW5nZXJBY3Rpdml0eUNvdW50ID0gMDsKKyAgICAgICAgdGhpcy5faXNQaW5jaGlu
ZyA9IGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogQ2FsbGVkIHdoZW4gd2luZG93IGJl
Y29tZXMgaW5hY3RpdmUuCisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1
dC5wcm90b3R5cGUub25Mb3N0Rm9jdXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2lz
UGFuQ2xpY2sgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdHdvRmluZ2VyQWN0aXZpdHlDb3VudCA9
IDA7CisgICAgICAgIHRoaXMuX2lzUGluY2hpbmcgPSBmYWxzZTsKKyAgICB9OworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUs
ICJidXR0b25zIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0
ZUNhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLCAiYW5ndWxhclNlbnNpYmlsaXR5WCIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmFQb2ludGVy
c0lucHV0LnByb3RvdHlwZSwgImFuZ3VsYXJTZW5zaWJpbGl0eVkiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5
cGUsICJwaW5jaFByZWNpc2lvbiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBd
LCBBcmNSb3RhdGVDYW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZSwgInBpbmNoRGVsdGFQZXJj
ZW50YWdlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNh
bWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLCAicGFubmluZ1NlbnNpYmlsaXR5Iiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5w
dXQucHJvdG90eXBlLCAibXVsdGlUb3VjaFBhbm5pbmciLCB2b2lkIDApOworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6
ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUsICJt
dWx0aVRvdWNoUGFuQW5kWm9vbSIsIHZvaWQgMCk7CisgICAgcmV0dXJuIEFyY1JvdGF0ZUNhbWVy
YVBvaW50ZXJzSW5wdXQ7Cit9KF9DYW1lcmFzX0lucHV0c19CYXNlQ2FtZXJhUG9pbnRlcnNJbnB1
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dCJd
KSk7CisKK19DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siQ2FtZXJhSW5wdXRUeXBlcyJdWyJBcmNSb3RhdGVDYW1lcmFQb2ludGVyc0lucHV0
Il0gPQorICAgIEFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQ7CisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3JpZW50YXRp
b25JbnB1dC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL0lucHV0cy9h
cmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5wdXQudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVu
dGF0aW9uSW5wdXQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90
YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBB
cmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5wdXQ7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2Ft
ZXJhSW5wdXRzTWFuYWdlciAqLyAiLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19hcmNSb3RhdGVDYW1lcmFJbnB1dHNN
YW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9DYW1lcmFzL2FyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2Ft
ZXJhcy9hcmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisKKworLyoqCisgKiBBZGQg
b3JpZW50YXRpb24gaW5wdXQgc3VwcG9ydCB0byB0aGUgaW5wdXQgbWFuYWdlci4KKyAqIEByZXR1
cm5zIHRoZSBjdXJyZW50IGlucHV0IG1hbmFnZXIKKyAqLworX0NhbWVyYXNfYXJjUm90YXRlQ2Ft
ZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBcmNSb3RhdGVD
YW1lcmFJbnB1dHNNYW5hZ2VyIl0ucHJvdG90eXBlLmFkZFZSRGV2aWNlT3JpZW50YXRpb24gPSBm
dW5jdGlvbiAoKSB7CisgICAgdGhpcy5hZGQobmV3IEFyY1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3Jp
ZW50YXRpb25JbnB1dCgpKTsKKyAgICByZXR1cm4gdGhpczsKK307CisvKioKKyAqIE1hbmFnZSB0
aGUgZGV2aWNlIG9yaWVudGF0aW9uIGlucHV0cyAoZ3lyb3Njb3BlKSB0byBjb250cm9sIGFuIGFy
YyByb3RhdGUgY2FtZXJhLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3Rv
L2N1c3RvbWl6aW5nX2NhbWVyYV9pbnB1dHMKKyAqLwordmFyIEFyY1JvdGF0ZUNhbWVyYVZSRGV2
aWNlT3JpZW50YXRpb25JbnB1dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAv
KioKKyAgICAgKiBJbnN0YW50aWF0ZSBhIG5ldyBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVu
dGF0aW9uSW5wdXQuCisgICAgICovCisgICAgZnVuY3Rpb24gQXJjUm90YXRlQ2FtZXJhVlJEZXZp
Y2VPcmllbnRhdGlvbklucHV0KCkgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBh
IGNvcnJlY3Rpb24gZmFjdG9yIGFwcGxpZWQgb24gdGhlIGFscGhhIHZhbHVlIHJldHJpZXZlZCBm
cm9tIHRoZSBvcmllbnRhdGlvbiBldmVudHMuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmFs
cGhhQ29ycmVjdGlvbiA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIGEgY29y
cmVjdGlvbiBmYWN0b3IgYXBwbGllZCBvbiB0aGUgZ2FtbWEgdmFsdWUgcmV0cmlldmVkIGZyb20g
dGhlIG9yaWVudGF0aW9uIGV2ZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZ2FtbWFD
b3JyZWN0aW9uID0gMTsKKyAgICAgICAgdGhpcy5fYWxwaGEgPSAwOworICAgICAgICB0aGlzLl9n
YW1tYSA9IDA7CisgICAgICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2Rl
dmljZU9yaWVudGF0aW9uSGFuZGxlciA9IHRoaXMuX29uT3JpZW50YXRpb25FdmVudC5iaW5kKHRo
aXMpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIGlucHV0IGNvbnRyb2xzIHRv
IGEgc3BlY2lmaWMgZG9tIGVsZW1lbnQgdG8gZ2V0IHRoZSBpbnB1dCBmcm9tLgorICAgICAqIEBw
YXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdGhlIGNvbnRyb2xzIHNob3VsZCBiZSBs
aXN0ZW5lZCBmcm9tCisgICAgICogQHBhcmFtIG5vUHJldmVudERlZmF1bHQgRGVmaW5lcyB3aGV0
aGVyIGV2ZW50IGNhdWdodCBieSB0aGUgY29udHJvbHMgc2hvdWxkIGNhbGwgcHJldmVudGRlZmF1
bHQoKSAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2
ZW50L3ByZXZlbnREZWZhdWx0KQorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYVZSRGV2aWNl
T3JpZW50YXRpb25JbnB1dC5wcm90b3R5cGUuYXR0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVt
ZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHRoaXMuY2FtZXJhLmF0dGFjaENvbnRy
b2woZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCk7CisgICAgICAgIHZhciBob3N0V2luZG93ID0g
dGhpcy5jYW1lcmEuZ2V0U2NlbmUoKS5nZXRFbmdpbmUoKS5nZXRIb3N0V2luZG93KCk7CisgICAg
ICAgIGhvc3RXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZGV2aWNlb3JpZW50YXRpb24iLCB0aGlz
Ll9kZXZpY2VPcmllbnRhdGlvbkhhbmRsZXIpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5wdXQucHJvdG90eXBlLl9v
bk9yaWVudGF0aW9uRXZlbnQgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgIGlmIChldnQuYWxw
aGEgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuX2FscGhhID0gKCtldnQuYWxwaGEgfCAw
KSAqIHRoaXMuYWxwaGFDb3JyZWN0aW9uOworICAgICAgICB9CisgICAgICAgIGlmIChldnQuZ2Ft
bWEgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuX2dhbW1hID0gKCtldnQuZ2FtbWEgfCAw
KSAqIHRoaXMuZ2FtbWFDb3JyZWN0aW9uOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2RpcnR5
ID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgY3VycmVudCBjYW1l
cmEgc3RhdGUgZGVwZW5kaW5nIG9uIHRoZSBpbnB1dHMgdGhhdCBoYXZlIGJlZW4gdXNlZCB0aGlz
IGZyYW1lLgorICAgICAqIFRoaXMgaXMgYSBkeW5hbWljYWxseSBjcmVhdGVkIGxhbWJkYSB0byBh
dm9pZCB0aGUgcGVyZm9ybWFuY2UgcGVuYWx0eSBvZiBsb29waW5nIGZvciBpbnB1dHMgaW4gdGhl
IHJlbmRlciBsb29wLgorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3JpZW50
YXRpb25JbnB1dC5wcm90b3R5cGUuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICh0aGlzLl9kaXJ0eSkgeworICAgICAgICAgICAgdGhpcy5fZGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9nYW1tYSA8IDApIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9n
YW1tYSA9IDE4MCArIHRoaXMuX2dhbW1hOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5jYW1lcmEuYWxwaGEgPSAoLXRoaXMuX2FscGhhIC8gMTgwLjAgKiBNYXRoLlBJKSAlIE1hdGgu
UEkgKiAyOworICAgICAgICAgICAgdGhpcy5jYW1lcmEuYmV0YSA9ICh0aGlzLl9nYW1tYSAvIDE4
MC4wICogTWF0aC5QSSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERldGFj
aCB0aGUgY3VycmVudCBjb250cm9scyBmcm9tIHRoZSBzcGVjaWZpZWQgZG9tIGVsZW1lbnQuCisg
ICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0byBzdG9wIGxpc3Rlbmlu
ZyB0aGUgaW5wdXRzIGZyb20KKyAgICAgKi8KKyAgICBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9y
aWVudGF0aW9uSW5wdXQucHJvdG90eXBlLmRldGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVu
dCkgeworICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGV2aWNlb3JpZW50YXRp
b24iLCB0aGlzLl9kZXZpY2VPcmllbnRhdGlvbkhhbmRsZXIpOworICAgIH07CisgICAgLyoqCisg
ICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY3VycmVudCBpbnRwdXQuCisgICAgICog
QHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBBcmNSb3RhdGVDYW1lcmFWUkRl
dmljZU9yaWVudGF0aW9uSW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICJBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5w
dXQiOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBmcmllbmRseSBuYW1lIGFzc29j
aWF0ZWQgd2l0aCB0aGUgaW5wdXQgY2xhc3MuCisgICAgICogQHJldHVybnMgdGhlIGlucHV0IGZy
aWVuZGx5IG5hbWUKKyAgICAgKi8KKyAgICBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0
aW9uSW5wdXQucHJvdG90eXBlLmdldFNpbXBsZU5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiAiVlJEZXZpY2VPcmllbnRhdGlvbiI7CisgICAgfTsKKyAgICByZXR1cm4gQXJjUm90
YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0OworfSgpKTsKKworX0NhbWVyYXNfY2Ft
ZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDYW1lcmFJbnB1
dFR5cGVzIl1bIkFyY1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3JpZW50YXRpb25JbnB1dCJdID0gQXJj
Um90YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9DYW1lcmFzL0lucHV0cy9mbHlDYW1lcmFLZXlib2FyZElucHV0LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9DYW1lcmFzL0lucHV0cy9mbHlDYW1lcmFLZXlib2FyZElucHV0LnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IEZseUNhbWVyYUtleWJvYXJkSW5wdXQgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNv
cmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhSW5wdXRz
TWFuYWdlciAqLyAiLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfRXZlbnRzX2tleWJvYXJkRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FdmVudHMva2V5Ym9h
cmRFdmVudHMgKi8gIi4vRXZlbnRzL2tleWJvYXJkRXZlbnRzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAi
Li9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworCisKKworCisKKy8qKgorICogTGlzdGVuIHRvIGtl
eWJvYXJkIGV2ZW50cyB0byBjb250cm9sIHRoZSBjYW1lcmEuCisgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXppbmdfY2FtZXJhX2lucHV0cworICovCit2YXIg
Rmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICBmdW5jdGlvbiBGbHlDYW1lcmFLZXlib2FyZElucHV0KCkgeworICAgICAgICAvKioKKyAgICAg
ICAgICogVGhlIGxpc3Qgb2Yga2V5Ym9hcmQga2V5cyB1c2VkIHRvIGNvbnRyb2wgdGhlIGZvcndh
cmQgbW92ZSBvZiB0aGUgY2FtZXJhLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzRm9y
d2FyZCA9IFs4N107CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbGlzdCBvZiBrZXlib2Fy
ZCBrZXlzIHVzZWQgdG8gY29udHJvbCB0aGUgYmFja3dhcmQgbW92ZSBvZiB0aGUgY2FtZXJhLgor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzQmFja3dhcmQgPSBbODNdOworICAgICAgICAv
KioKKyAgICAgICAgICogVGhlIGxpc3Qgb2Yga2V5Ym9hcmQga2V5cyB1c2VkIHRvIGNvbnRyb2wg
dGhlIGZvcndhcmQgbW92ZSBvZiB0aGUgY2FtZXJhLgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5rZXlzVXAgPSBbNjldOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGxpc3Qgb2Yga2V5
Ym9hcmQga2V5cyB1c2VkIHRvIGNvbnRyb2wgdGhlIGJhY2t3YXJkIG1vdmUgb2YgdGhlIGNhbWVy
YS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5c0Rvd24gPSBbODFdOworICAgICAgICAv
KioKKyAgICAgICAgICogVGhlIGxpc3Qgb2Yga2V5Ym9hcmQga2V5cyB1c2VkIHRvIGNvbnRyb2wg
dGhlIHJpZ2h0IHN0cmFmZSBtb3ZlIG9mIHRoZSBjYW1lcmEuCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmtleXNSaWdodCA9IFs2OF07CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbGlz
dCBvZiBrZXlib2FyZCBrZXlzIHVzZWQgdG8gY29udHJvbCB0aGUgbGVmdCBzdHJhZmUgbW92ZSBv
ZiB0aGUgY2FtZXJhLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzTGVmdCA9IFs2NV07
CisgICAgICAgIHRoaXMuX2tleXMgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisgICAgLyoqCisgICAg
ICogQXR0YWNoIHRoZSBpbnB1dCBjb250cm9scyB0byBhIHNwZWNpZmljIGRvbSBlbGVtZW50IHRv
IGdldCB0aGUgaW5wdXQgZnJvbS4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBl
bGVtZW50IHRoZSBjb250cm9scyBzaG91bGQgYmUgbGlzdGVuZWQgZnJvbQorICAgICAqIEBwYXJh
bSBub1ByZXZlbnREZWZhdWx0IERlZmluZXMgd2hldGhlciBldmVudCBjYXVnaHQgYnkgdGhlIGNv
bnRyb2xzIHNob3VsZCBjYWxsIHByZXZlbnRkZWZhdWx0KCkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudC9wcmV2ZW50RGVmYXVsdCkKKyAgICAg
Ki8KKyAgICBGbHlDYW1lcmFLZXlib2FyZElucHV0LnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0g
ZnVuY3Rpb24gKGVsZW1lbnQsIG5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMuX29uQ2FudmFzQmx1ck9ic2VydmVyKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc2NlbmUgPSB0aGlzLmNh
bWVyYS5nZXRTY2VuZSgpOworICAgICAgICB0aGlzLl9lbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRF
bmdpbmUoKTsKKyAgICAgICAgdGhpcy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIgPSB0aGlzLl9lbmdp
bmUub25DYW52YXNCbHVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
X3RoaXMuX2tleXMgPSBbXTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX29uS2V5Ym9hcmRP
YnNlcnZlciA9IHRoaXMuX3NjZW5lLm9uS2V5Ym9hcmRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAo
aW5mbykgeworICAgICAgICAgICAgdmFyIGV2dCA9IGluZm8uZXZlbnQ7CisgICAgICAgICAgICBp
ZiAoaW5mby50eXBlID09PSBfRXZlbnRzX2tleWJvYXJkRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIktleWJvYXJkRXZlbnRUeXBlcyJdLktFWURPV04pIHsKKyAgICAgICAgICAg
ICAgICBpZiAoX3RoaXMua2V5c0ZvcndhcmQuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xIHx8
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNCYWNrd2FyZC5pbmRleE9mKGV2dC5rZXlD
b2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMua2V5c1VwLmluZGV4T2Yo
ZXZ0LmtleUNvZGUpICE9PSAtMSB8fAorICAgICAgICAgICAgICAgICAgICBfdGhpcy5rZXlzRG93
bi5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgX3Ro
aXMua2V5c0xlZnQuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLmtleXNSaWdodC5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gX3RoaXMuX2tleXMuaW5kZXhPZihldnQua2V5
Q29kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF90aGlzLl9rZXlzLnB1c2goZXZ0LmtleUNvZGUpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMua2V5c0ZvcndhcmQuaW5kZXhP
ZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNC
YWNrd2FyZC5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAg
ICAgX3RoaXMua2V5c1VwLmluZGV4T2YoZXZ0LmtleUNvZGUpICE9PSAtMSB8fAorICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5rZXlzRG93bi5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwK
KyAgICAgICAgICAgICAgICAgICAgX3RoaXMua2V5c0xlZnQuaW5kZXhPZihldnQua2V5Q29kZSkg
IT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNSaWdodC5pbmRleE9mKGV2
dC5rZXlDb2RlKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gX3Ro
aXMuX2tleXMuaW5kZXhPZihldnQua2V5Q29kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
bmRleCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fa2V5cy5zcGxpY2Uo
aW5kZXgsIDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
ICghbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnByZXZl
bnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0YWNo
IHRoZSBjdXJyZW50IGNvbnRyb2xzIGZyb20gdGhlIHNwZWNpZmllZCBkb20gZWxlbWVudC4KKyAg
ICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVtZW50IHRvIHN0b3AgbGlzdGVuaW5n
IHRoZSBpbnB1dHMgZnJvbQorICAgICAqLworICAgIEZseUNhbWVyYUtleWJvYXJkSW5wdXQucHJv
dG90eXBlLmRldGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVudCkgeworICAgICAgICBpZiAo
dGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbktleWJvYXJkT2JzZXJ2ZXIp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5vbktleWJvYXJkT2JzZXJ2YWJsZS5yZW1v
dmUodGhpcy5fb25LZXlib2FyZE9ic2VydmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMu
X2VuZ2luZS5vbkNhbnZhc0JsdXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkNhbnZhc0JsdXJP
YnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vbktleWJvYXJkT2Jz
ZXJ2ZXIgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIgPSBu
dWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2tleXMgPSBbXTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGN1cnJlbnQgaW50cHV0LgorICAg
ICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgRmx5Q2FtZXJhS2V5Ym9h
cmRJbnB1dC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gIkZseUNhbWVyYUtleWJvYXJkSW5wdXQiOworICAgIH07CisgICAgLyoqIEBoaWRkZW4g
Ki8KKyAgICBGbHlDYW1lcmFLZXlib2FyZElucHV0LnByb3RvdHlwZS5fb25Mb3N0Rm9jdXMgPSBm
dW5jdGlvbiAoZSkgeworICAgICAgICB0aGlzLl9rZXlzID0gW107CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBj
bGFzcy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQorICAgICAqLwor
ICAgIEZseUNhbWVyYUtleWJvYXJkSW5wdXQucHJvdG90eXBlLmdldFNpbXBsZU5hbWUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiAia2V5Ym9hcmQiOworICAgIH07CisgICAgLyoqCisg
ICAgICogVXBkYXRlIHRoZSBjdXJyZW50IGNhbWVyYSBzdGF0ZSBkZXBlbmRpbmcgb24gdGhlIGlu
cHV0cyB0aGF0IGhhdmUgYmVlbiB1c2VkIHRoaXMgZnJhbWUuCisgICAgICogVGhpcyBpcyBhIGR5
bmFtaWNhbGx5IGNyZWF0ZWQgbGFtYmRhIHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBwZW5hbHR5
IG9mIGxvb3BpbmcgZm9yIGlucHV0cyBpbiB0aGUgcmVuZGVyIGxvb3AuCisgICAgICovCisgICAg
Rmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dC5wcm90b3R5cGUuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICh0aGlzLl9vbktleWJvYXJkT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAg
IHZhciBjYW1lcmEgPSB0aGlzLmNhbWVyYTsKKyAgICAgICAgICAgIC8vIEtleWJvYXJkCisgICAg
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fa2V5cy5sZW5ndGg7IGlu
ZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIga2V5Q29kZSA9IHRoaXMuX2tleXNbaW5kZXhd
OworICAgICAgICAgICAgICAgIHZhciBzcGVlZCA9IGNhbWVyYS5fY29tcHV0ZUxvY2FsQ2FtZXJh
U3BlZWQoKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5rZXlzRm9yd2FyZC5pbmRleE9mKGtl
eUNvZGUpICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBjYW1lcmEuX2xvY2FsRGlyZWN0
aW9uLmNvcHlGcm9tRmxvYXRzKDAsIDAsIHNwZWVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5rZXlzQmFja3dhcmQuaW5kZXhPZihrZXlDb2RlKSAh
PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FtZXJhLl9sb2NhbERpcmVjdGlvbi5jb3B5
RnJvbUZsb2F0cygwLCAwLCAtc3BlZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICh0aGlzLmtleXNVcC5pbmRleE9mKGtleUNvZGUpICE9PSAtMSkgeworICAg
ICAgICAgICAgICAgICAgICBjYW1lcmEuX2xvY2FsRGlyZWN0aW9uLmNvcHlGcm9tRmxvYXRzKDAs
IHNwZWVkLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
dGhpcy5rZXlzRG93bi5pbmRleE9mKGtleUNvZGUpICE9PSAtMSkgeworICAgICAgICAgICAgICAg
ICAgICBjYW1lcmEuX2xvY2FsRGlyZWN0aW9uLmNvcHlGcm9tRmxvYXRzKDAsIC1zcGVlZCwgMCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMua2V5c1Jp
Z2h0LmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbWVy
YS5fbG9jYWxEaXJlY3Rpb24uY29weUZyb21GbG9hdHMoc3BlZWQsIDAsIDApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmtleXNMZWZ0LmluZGV4T2Yo
a2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbWVyYS5fbG9jYWxEaXJl
Y3Rpb24uY29weUZyb21GbG9hdHMoLXNwZWVkLCAwLCAwKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGNhbWVyYS5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVt
KSB7CisgICAgICAgICAgICAgICAgICAgIGNhbWVyYS5fbG9jYWxEaXJlY3Rpb24ueiAqPSAtMTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FtZXJhLmdldFZpZXdNYXRyaXgo
KS5pbnZlcnRUb1JlZihjYW1lcmEuX2NhbWVyYVRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgICAg
ICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZl
Y3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWxUb1JlZihjYW1lcmEuX2xvY2FsRGlyZWN0aW9uLCBjYW1l
cmEuX2NhbWVyYVRyYW5zZm9ybU1hdHJpeCwgY2FtZXJhLl90cmFuc2Zvcm1lZERpcmVjdGlvbik7
CisgICAgICAgICAgICAgICAgY2FtZXJhLmNhbWVyYURpcmVjdGlvbi5hZGRJblBsYWNlKGNhbWVy
YS5fdHJhbnNmb3JtZWREaXJlY3Rpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZseUNhbWVyYUtleWJvYXJkSW5wdXQucHJv
dG90eXBlLCAia2V5c0ZvcndhcmQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dC5wcm90b3R5cGUsICJrZXlzQmFja3dhcmQiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dC5w
cm90b3R5cGUsICJrZXlzVXAiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
Rmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dC5wcm90b3R5cGUsICJrZXlzRG93biIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGbHlDYW1lcmFLZXlib2FyZElucHV0LnByb3RvdHlw
ZSwgImtleXNSaWdodCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGbHlD
YW1lcmFLZXlib2FyZElucHV0LnByb3RvdHlwZSwgImtleXNMZWZ0Iiwgdm9pZCAwKTsKKyAgICBy
ZXR1cm4gRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dDsKK30oKSk7CisKK19DYW1lcmFzX2NhbWVyYUlu
cHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ2FtZXJhSW5wdXRUeXBl
cyJdWyJGbHlDYW1lcmFLZXlib2FyZElucHV0Il0gPSBGbHlDYW1lcmFLZXlib2FyZElucHV0Owor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL0lucHV0cy9mbHlDYW1lcmFNb3VzZUlu
cHV0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9DYW1lcmFzL0lucHV0cy9mbHlDYW1lcmFNb3VzZUlucHV0LnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZseUNhbWVyYU1vdXNlSW5wdXQgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmx5Q2FtZXJhTW91c2VJbnB1dCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gRmx5Q2FtZXJhTW91c2VJbnB1dDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0
b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFu
YWdlciAqLyAiLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0V2ZW50cy9wb2ludGVyRXZl
bnRzICovICIuL0V2ZW50cy9wb2ludGVyRXZlbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGhzL21hdGguYXhpcyAqLyAiLi9NYXRocy9tYXRoLmF4aXMudHMiKTsKKwor
CisKKworCisKKy8qKgorICogTGlzdGVuIHRvIG1vdXNlIGV2ZW50cyB0byBjb250cm9sIHRoZSBj
YW1lcmEuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXpp
bmdfY2FtZXJhX2lucHV0cworICovCit2YXIgRmx5Q2FtZXJhTW91c2VJbnB1dCA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBMaXN0ZW4gdG8gbW91c2UgZXZl
bnRzIHRvIGNvbnRyb2wgdGhlIGNhbWVyYS4KKyAgICAgKiBAcGFyYW0gdG91Y2hFbmFibGVkIERl
ZmluZSBpZiB0b3VjaCBpcyBlbmFibGVkLiAoRGVmYXVsdCBpcyB0cnVlLikKKyAgICAgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXppbmdfY2FtZXJhX2lucHV0
cworICAgICAqLworICAgIGZ1bmN0aW9uIEZseUNhbWVyYU1vdXNlSW5wdXQodG91Y2hFbmFibGVk
KSB7CisgICAgICAgIGlmICh0b3VjaEVuYWJsZWQgPT09IHZvaWQgMCkgeyB0b3VjaEVuYWJsZWQg
PSB0cnVlOyB9CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBidXR0b25zIGFz
c29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQgdG8gaGFuZGxlIGNhbWVyYSByb3RhdGlvbi4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuYnV0dG9ucyA9IFswLCAxLCAyXTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEFzc2lnbiBidXR0b25zIGZvciBZYXcgY29udHJvbC4KKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuYnV0dG9uc1lhdyA9IFstMSwgMCwgMV07CisgICAgICAgIC8qKgorICAgICAg
ICAqIEFzc2lnbiBidXR0b25zIGZvciBQaXRjaCBjb250cm9sLgorICAgICAgICAqLworICAgICAg
ICB0aGlzLmJ1dHRvbnNQaXRjaCA9IFstMSwgMCwgMV07CisgICAgICAgIC8qKgorICAgICAgICAq
IEFzc2lnbiBidXR0b25zIGZvciBSb2xsIGNvbnRyb2wuCisgICAgICAgICovCisgICAgICAgIHRo
aXMuYnV0dG9uc1JvbGwgPSBbMl07CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZXRlY3QgaWYg
YW55IGJ1dHRvbiBpcyBiZWluZyBwcmVzc2VkIHdoaWxlIG1vdXNlIGlzIG1vdmVkLgorICAgICAg
ICAgKiAtMSA9IE1vdXNlIGxvY2tlZC4KKyAgICAgICAgICogMCA9IExlZnQgYnV0dG9uLgorICAg
ICAgICAgKiAxID0gTWlkZGxlIEJ1dHRvbi4KKyAgICAgICAgICogMiA9IFJpZ2h0IEJ1dHRvbi4K
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuYWN0aXZlQnV0dG9uID0gLTE7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBwb2ludGVyJ3MgYW5ndWxhciBzZW5zaWJpbGl0eSwg
dG8gY29udHJvbCB0aGUgY2FtZXJhIHJvdGF0aW9uIHNwZWVkLgorICAgICAgICAgKiBIaWdoZXIg
dmFsdWVzIHJlZHVjZSBpdHMgc2Vuc2l0aXZpdHkuCisgICAgICAgICAqLworICAgICAgICB0aGlz
LmFuZ3VsYXJTZW5zaWJpbGl0eSA9IDEwMDAuMDsKKyAgICAgICAgdGhpcy5wcmV2aW91c1Bvc2l0
aW9uID0gbnVsbDsKKyAgICB9CisgICAgLyoqCisgICAgICogQXR0YWNoIHRoZSBtb3VzZSBjb250
cm9sIHRvIHRoZSBIVE1MIERPTSBlbGVtZW50LgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmlu
ZXMgdGhlIGVsZW1lbnQgdGhhdCBsaXN0ZW5zIHRvIHRoZSBpbnB1dCBldmVudHMuCisgICAgICog
QHBhcmFtIG5vUHJldmVudERlZmF1bHQgRGVmaW5lcyB3aGV0aGVyIGV2ZW50cyBjYXVnaHQgYnkg
dGhlIGNvbnRyb2xzIHNob3VsZCBjYWxsIHByZXZlbnRkZWZhdWx0KCkuCisgICAgICovCisgICAg
Rmx5Q2FtZXJhTW91c2VJbnB1dC5wcm90b3R5cGUuYXR0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChl
bGVtZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAgIHRoaXMubm9QcmV2ZW50RGVm
YXVsdCA9IG5vUHJldmVudERlZmF1bHQ7CisgICAgICAgIHRoaXMuX29ic2VydmVyID0gdGhpcy5j
YW1lcmEuZ2V0U2NlbmUoKS5vblBvaW50ZXJPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAocCwgcykg
eworICAgICAgICAgICAgX3RoaXMuX3BvaW50ZXJJbnB1dChwLCBzKTsKKyAgICAgICAgfSwgX0V2
ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBvaW50ZXJF
dmVudFR5cGVzIl0uUE9JTlRFUkRPV04gfCBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSVVAgfCBfRXZl
bnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2
ZW50VHlwZXMiXS5QT0lOVEVSTU9WRSk7CisgICAgICAgIC8vIENvcnJlY3QgUm9sbCBieSByYXRl
LCBpZiBlbmFibGVkLgorICAgICAgICB0aGlzLl9yb2xsT2JzZXJ2ZXIgPSB0aGlzLmNhbWVyYS5n
ZXRTY2VuZSgpLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgaWYgKF90aGlzLmNhbWVyYS5yb2xsQ29ycmVjdCkgeworICAgICAgICAgICAgICAg
IF90aGlzLmNhbWVyYS5yZXN0b3JlUm9sbChfdGhpcy5jYW1lcmEucm9sbENvcnJlY3QpOworICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGtl
ZXAgJ3RoaXMnLgorICAgICAgICB0aGlzLl9tb3VzZW1vdmVDYWxsYmFjayA9IGZ1bmN0aW9uIChl
KSB7CisgICAgICAgICAgICBfdGhpcy5fb25Nb3VzZU1vdmUoZSk7CisgICAgICAgIH07CisgICAg
ICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5fbW91c2Vtb3Zl
Q2FsbGJhY2ssIGZhbHNlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGFjaCB0aGUgY3Vy
cmVudCBjb250cm9scyBmcm9tIHRoZSBzcGVjaWZpZWQgZG9tIGVsZW1lbnQuCisgICAgICogQHBh
cmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0byBzdG9wIGxpc3RlbmluZyB0aGUgaW5w
dXRzIGZyb20KKyAgICAgKi8KKyAgICBGbHlDYW1lcmFNb3VzZUlucHV0LnByb3RvdHlwZS5kZXRh
Y2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKHRoaXMuX29ic2Vy
dmVyICYmIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMuY2FtZXJhLmdldFNjZW5lKCkub25Q
b2ludGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb2JzZXJ2ZXIpOworICAgICAgICAgICAgdGhp
cy5jYW1lcmEuZ2V0U2NlbmUoKS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMu
X3JvbGxPYnNlcnZlcik7CisgICAgICAgICAgICBpZiAodGhpcy5fbW91c2Vtb3ZlQ2FsbGJhY2sp
IHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92
ZSIsIHRoaXMuX21vdXNlbW92ZUNhbGxiYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX29ic2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3JvbGxPYnNlcnZlciA9
IG51bGw7CisgICAgICAgICAgICB0aGlzLnByZXZpb3VzUG9zaXRpb24gPSBudWxsOworICAgICAg
ICAgICAgdGhpcy5ub1ByZXZlbnREZWZhdWx0ID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjdXJyZW50IGlu
cHV0LgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lLgorICAgICAqLworICAgIEZseUNh
bWVyYU1vdXNlSW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuICJGbHlDYW1lcmFNb3VzZUlucHV0IjsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEdldCB0aGUgZnJpZW5kbHkgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGlucHV0IGNsYXNz
LgorICAgICAqIEByZXR1cm5zIHRoZSBpbnB1dCdzIGZyaWVuZGx5IG5hbWUuCisgICAgICovCisg
ICAgRmx5Q2FtZXJhTW91c2VJbnB1dC5wcm90b3R5cGUuZ2V0U2ltcGxlTmFtZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuICJtb3VzZSI7CisgICAgfTsKKyAgICAvLyBUcmFjayBtb3Vz
ZSBtb3ZlbWVudCwgd2hlbiB0aGUgcG9pbnRlciBpcyBub3QgbG9ja2VkLgorICAgIEZseUNhbWVy
YU1vdXNlSW5wdXQucHJvdG90eXBlLl9wb2ludGVySW5wdXQgPSBmdW5jdGlvbiAocCwgcykgewor
ICAgICAgICB2YXIgZSA9IHAuZXZlbnQ7CisgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNhbWVy
YTsKKyAgICAgICAgdmFyIGVuZ2luZSA9IGNhbWVyYS5nZXRFbmdpbmUoKTsKKyAgICAgICAgaWYg
KGVuZ2luZS5pc0luVlJFeGNsdXNpdmVQb2ludGVyTW9kZSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy50b3VjaEVuYWJsZWQgJiYgZS5wb2ludGVy
VHlwZSA9PT0gInRvdWNoIikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIC8vIE1vdXNlIGlzIG1vdmVkIGJ1dCBhbiB1bmtub3duIG1vdXNlIGJ1dHRvbiBpcyBwcmVz
c2VkLgorICAgICAgICBpZiAocC50eXBlICE9PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRSAm
JiB0aGlzLmJ1dHRvbnMuaW5kZXhPZihlLmJ1dHRvbikgPT09IC0xKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNyY0VsZW1lbnQgPSAoZS5zcmNFbGVtZW50
IHx8IGUudGFyZ2V0KTsKKyAgICAgICAgLy8gTW91c2UgZG93bi4KKyAgICAgICAgaWYgKHAudHlw
ZSA9PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04gJiYgc3JjRWxlbWVudCkgeworICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzcmNFbGVtZW50LnNldFBvaW50ZXJDYXB0dXJl
KGUucG9pbnRlcklkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChlKSB7Cisg
ICAgICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbyB3aXRoIHRoZSBlcnJvci4gRXhlY3V0aW9u
IGNvbnRpbnVlcy4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMucHJldmlvdXNQb3Np
dGlvbiA9IHsKKyAgICAgICAgICAgICAgICB4OiBlLmNsaWVudFgsCisgICAgICAgICAgICAgICAg
eTogZS5jbGllbnRZCisgICAgICAgICAgICB9OworICAgICAgICAgICAgdGhpcy5hY3RpdmVCdXR0
b24gPSBlLmJ1dHRvbjsKKyAgICAgICAgICAgIGlmICghdGhpcy5ub1ByZXZlbnREZWZhdWx0KSB7
CisgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5mb2N1cygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgCisgICAgICAgIC8vIE1vdXNlIHVwLgorICAgICAgICBpZiAocC50eXBlID09PSBfRXZlbnRz
X3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50
VHlwZXMiXS5QT0lOVEVSVVAgJiYgc3JjRWxlbWVudCkgeworICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICBzcmNFbGVtZW50LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJ
ZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAg
ICAgIC8vIE5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgZXJyb3IuIEV4ZWN1dGlvbiBjb250aW51ZXMu
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmFjdGl2ZUJ1dHRvbiA9IC0xOworICAg
ICAgICAgICAgdGhpcy5wcmV2aW91c1Bvc2l0aW9uID0gbnVsbDsKKyAgICAgICAgICAgIGlmICgh
dGhpcy5ub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVs
dCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgCisgICAgICAgIC8v
IE1vdXNlIG1vdmUuCisgICAgICAgIGlmIChwLnR5cGUgPT09IF9FdmVudHNfcG9pbnRlckV2ZW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5U
RVJNT1ZFKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMucHJldmlvdXNQb3NpdGlvbiB8fCBlbmdp
bmUuaXNQb2ludGVyTG9jaykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBvZmZzZXRYID0gZS5jbGllbnRYIC0gdGhpcy5wcmV2aW91c1Bv
c2l0aW9uLng7CisgICAgICAgICAgICB2YXIgb2Zmc2V0WSA9IGUuY2xpZW50WSAtIHRoaXMucHJl
dmlvdXNQb3NpdGlvbi55OworICAgICAgICAgICAgdGhpcy5yb3RhdGVDYW1lcmEob2Zmc2V0WCwg
b2Zmc2V0WSk7CisgICAgICAgICAgICB0aGlzLnByZXZpb3VzUG9zaXRpb24gPSB7CisgICAgICAg
ICAgICAgICAgeDogZS5jbGllbnRYLAorICAgICAgICAgICAgICAgIHk6IGUuY2xpZW50WQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICghdGhpcy5ub1ByZXZlbnREZWZhdWx0KSB7Cisg
ICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKyAgICAvLyBUcmFjayBtb3VzZSBtb3ZlbWVudCwgd2hlbiBwb2ludGVyIGlz
IGxvY2tlZC4KKyAgICBGbHlDYW1lcmFNb3VzZUlucHV0LnByb3RvdHlwZS5fb25Nb3VzZU1vdmUg
PSBmdW5jdGlvbiAoZSkgeworICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5jYW1lcmE7CisgICAg
ICAgIHZhciBlbmdpbmUgPSBjYW1lcmEuZ2V0RW5naW5lKCk7CisgICAgICAgIGlmICghZW5naW5l
LmlzUG9pbnRlckxvY2sgfHwgZW5naW5lLmlzSW5WUkV4Y2x1c2l2ZVBvaW50ZXJNb2RlKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9mZnNldFggPSBlLm1v
dmVtZW50WCB8fCBlLm1vek1vdmVtZW50WCB8fCBlLndlYmtpdE1vdmVtZW50WCB8fCBlLm1zTW92
ZW1lbnRYIHx8IDA7CisgICAgICAgIHZhciBvZmZzZXRZID0gZS5tb3ZlbWVudFkgfHwgZS5tb3pN
b3ZlbWVudFkgfHwgZS53ZWJraXRNb3ZlbWVudFkgfHwgZS5tc01vdmVtZW50WSB8fCAwOworICAg
ICAgICB0aGlzLnJvdGF0ZUNhbWVyYShvZmZzZXRYLCBvZmZzZXRZKTsKKyAgICAgICAgdGhpcy5w
cmV2aW91c1Bvc2l0aW9uID0gbnVsbDsKKyAgICAgICAgaWYgKCF0aGlzLm5vUHJldmVudERlZmF1
bHQpIHsKKyAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogUm90YXRlIGNhbWVyYSBieSBtb3VzZSBvZmZzZXQuCisgICAgICov
CisgICAgRmx5Q2FtZXJhTW91c2VJbnB1dC5wcm90b3R5cGUucm90YXRlQ2FtZXJhID0gZnVuY3Rp
b24gKG9mZnNldFgsIG9mZnNldFkpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgdmFyIGNhbWVyYSA9IHRoaXMuY2FtZXJhOworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmNh
bWVyYS5nZXRTY2VuZSgpOworICAgICAgICBpZiAoc2NlbmUudXNlUmlnaHRIYW5kZWRTeXN0ZW0p
IHsKKyAgICAgICAgICAgIG9mZnNldFggKj0gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNh
bWVyYS5wYXJlbnQgJiYgY2FtZXJhLnBhcmVudC5fZ2V0V29ybGRNYXRyaXhEZXRlcm1pbmFudCgp
IDwgMCkgeworICAgICAgICAgICAgb2Zmc2V0WCAqPSAtMTsKKyAgICAgICAgfQorICAgICAgICB2
YXIgeCA9IG9mZnNldFggLyB0aGlzLmFuZ3VsYXJTZW5zaWJpbGl0eTsKKyAgICAgICAgdmFyIHkg
PSBvZmZzZXRZIC8gdGhpcy5hbmd1bGFyU2Vuc2liaWxpdHk7CisgICAgICAgIC8vIEluaXRpYWxp
emUgdG8gY3VycmVudCByb3RhdGlvbi4KKyAgICAgICAgdmFyIGN1cnJlbnRSb3RhdGlvbiA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJRdWF0ZXJuaW9u
Il0uUm90YXRpb25ZYXdQaXRjaFJvbGwoY2FtZXJhLnJvdGF0aW9uLnksIGNhbWVyYS5yb3RhdGlv
bi54LCBjYW1lcmEucm90YXRpb24ueik7CisgICAgICAgIHZhciByb3RhdGlvbkNoYW5nZTsKKyAg
ICAgICAgLy8gUGl0Y2guCisgICAgICAgIGlmICh0aGlzLmJ1dHRvbnNQaXRjaC5zb21lKGZ1bmN0
aW9uICh2KSB7IHJldHVybiB2ID09PSBfdGhpcy5hY3RpdmVCdXR0b247IH0pKSB7CisgICAgICAg
ICAgICAvLyBBcHBseSBjaGFuZ2UgaW4gUmFkaWFucyB0byB2ZWN0b3IgQW5nbGUuCisgICAgICAg
ICAgICByb3RhdGlvbkNoYW5nZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25BeGlzKF9NYXRoc19tYXRoX2F4aXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQXhpcyJdLlgsIHkpOworICAgICAgICAgICAg
Ly8gQXBwbHkgUGl0Y2ggdG8gcXVhdGVybmlvbi4KKyAgICAgICAgICAgIGN1cnJlbnRSb3RhdGlv
bi5tdWx0aXBseUluUGxhY2Uocm90YXRpb25DaGFuZ2UpOworICAgICAgICB9CisgICAgICAgIC8v
IFlhdy4KKyAgICAgICAgaWYgKHRoaXMuYnV0dG9uc1lhdy5zb21lKGZ1bmN0aW9uICh2KSB7IHJl
dHVybiB2ID09PSBfdGhpcy5hY3RpdmVCdXR0b247IH0pKSB7CisgICAgICAgICAgICAvLyBBcHBs
eSBjaGFuZ2UgaW4gUmFkaWFucyB0byB2ZWN0b3IgQW5nbGUuCisgICAgICAgICAgICByb3RhdGlv
bkNoYW5nZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJRdWF0ZXJuaW9uIl0uUm90YXRpb25BeGlzKF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siQXhpcyJdLlksIHgpOworICAgICAgICAgICAgLy8gQXBwbHkgWWF3
IHRvIHF1YXRlcm5pb24uCisgICAgICAgICAgICBjdXJyZW50Um90YXRpb24ubXVsdGlwbHlJblBs
YWNlKHJvdGF0aW9uQ2hhbmdlKTsKKyAgICAgICAgICAgIC8vIEFkZCBSb2xsLCBpZiBiYW5rZWQg
dHVybmluZyBpcyBlbmFibGVkLCB3aXRoaW4gUm9sbCBsaW1pdC4KKyAgICAgICAgICAgIHZhciBs
aW1pdCA9IChjYW1lcmEuYmFua2VkVHVybkxpbWl0KSArIGNhbWVyYS5fdHJhY2tSb2xsOyAvLyBE
ZWZhdWx0cyB0byA5MMKwIHBsdXMgbWFudWFsIHJvbGwuCisgICAgICAgICAgICBpZiAoY2FtZXJh
LmJhbmtlZFR1cm4gJiYgLWxpbWl0IDwgY2FtZXJhLnJvdGF0aW9uLnogJiYgY2FtZXJhLnJvdGF0
aW9uLnogPCBsaW1pdCkgeworICAgICAgICAgICAgICAgIHZhciBiYW5raW5nRGVsdGEgPSBjYW1l
cmEuYmFua2VkVHVybk11bHRpcGxpZXIgKiAteDsKKyAgICAgICAgICAgICAgICAvLyBBcHBseSBj
aGFuZ2UgaW4gUmFkaWFucyB0byB2ZWN0b3IgQW5nbGUuCisgICAgICAgICAgICAgICAgcm90YXRp
b25DaGFuZ2UgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siUXVhdGVybmlvbiJdLlJvdGF0aW9uQXhpcyhfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bIkF4aXMiXS5aLCBiYW5raW5nRGVsdGEpOworICAgICAgICAgICAg
ICAgIC8vIEFwcGx5IFlhdyB0byBxdWF0ZXJuaW9uLgorICAgICAgICAgICAgICAgIGN1cnJlbnRS
b3RhdGlvbi5tdWx0aXBseUluUGxhY2Uocm90YXRpb25DaGFuZ2UpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIC8vIFJvbGwuCisgICAgICAgIGlmICh0aGlzLmJ1dHRvbnNSb2xs
LnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgPT09IF90aGlzLmFjdGl2ZUJ1dHRvbjsgfSkp
IHsKKyAgICAgICAgICAgIC8vIEFwcGx5IGNoYW5nZSBpbiBSYWRpYW5zIHRvIHZlY3RvciBBbmds
ZS4KKyAgICAgICAgICAgIHJvdGF0aW9uQ2hhbmdlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbkF4aXMoX01hdGhz
X21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJBeGlzIl0uWiwgLXgpOwor
ICAgICAgICAgICAgLy8gVHJhY2sgUm9sbGluZy4KKyAgICAgICAgICAgIGNhbWVyYS5fdHJhY2tS
b2xsIC09IHg7CisgICAgICAgICAgICAvLyBBcHBseSBQaXRjaCB0byBxdWF0ZXJuaW9uLgorICAg
ICAgICAgICAgY3VycmVudFJvdGF0aW9uLm11bHRpcGx5SW5QbGFjZShyb3RhdGlvbkNoYW5nZSk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gQXBwbHkgcm90YXRpb25RdWF0ZXJuaW9uIHRvIEV1bGVy
IGNhbWVyYS5yb3RhdGlvbi4KKyAgICAgICAgY3VycmVudFJvdGF0aW9uLnRvRXVsZXJBbmdsZXNU
b1JlZihjYW1lcmEucm90YXRpb24pOworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBd
LCBGbHlDYW1lcmFNb3VzZUlucHV0LnByb3RvdHlwZSwgImJ1dHRvbnMiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRmx5Q2FtZXJhTW91c2VJbnB1dC5wcm90b3R5cGUsICJh
bmd1bGFyU2Vuc2liaWxpdHkiLCB2b2lkIDApOworICAgIHJldHVybiBGbHlDYW1lcmFNb3VzZUlu
cHV0OworfSgpKTsKKworX0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJDYW1lcmFJbnB1dFR5cGVzIl1bIkZseUNhbWVyYU1vdXNlSW5wdXQi
XSA9IEZseUNhbWVyYU1vdXNlSW5wdXQ7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVy
YXMvSW5wdXRzL2ZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vQ2FtZXJhcy9JbnB1dHMvZm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlu
cHV0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZvbGxvd0NhbWVyYUtl
eWJvYXJkTW92ZUlucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBGb2xsb3dDYW1lcmFLZXlib2Fy
ZE1vdmVJbnB1dDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIu
Li9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1lcmFJbnB1
dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAq
LyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXZl
bnRzX2tleWJvYXJkRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FdmVudHMva2V5Ym9hcmRFdmVudHMgKi8gIi4vRXZlbnRz
L2tleWJvYXJkRXZlbnRzLnRzIik7CisKKworCisKKy8qKgorICogTWFuYWdlIHRoZSBrZXlib2Fy
ZCBpbnB1dHMgdG8gY29udHJvbCB0aGUgbW92ZW1lbnQgb2YgYSBmb2xsb3cgY2FtZXJhLgorICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2N1c3RvbWl6aW5nX2NhbWVyYV9p
bnB1dHMKKyAqLwordmFyIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0ID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92
ZUlucHV0KCkgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgbGlzdCBvZiBr
ZXkgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB1cCBhY3Rpb24gKGluY3JlYXNlIGhlaWdodE9m
ZnNldCkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5c0hlaWdodE9mZnNldEluY3IgPSBb
MzhdOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgbGlzdCBvZiBrZXkgY29k
ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb3duIGFjdGlvbiAoZGVjcmVhc2UgaGVpZ2h0T2Zmc2V0
KQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzSGVpZ2h0T2Zmc2V0RGVjciA9IFs0MF07
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIEFsdCBtb2RpZmll
ciBrZXkgaXMgcmVxdWlyZWQgdG8gbW92ZSB1cC9kb3duIChhbHRlciBoZWlnaHRPZmZzZXQpCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmtleXNIZWlnaHRPZmZzZXRNb2RpZmllckFsdCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB3aGV0aGVyIHRoZSBDdHJsIG1v
ZGlmaWVyIGtleSBpcyByZXF1aXJlZCB0byBtb3ZlIHVwL2Rvd24gKGFsdGVyIGhlaWdodE9mZnNl
dCkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5c0hlaWdodE9mZnNldE1vZGlmaWVyQ3Ry
bCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB3aGV0aGVyIHRoZSBT
aGlmdCBtb2RpZmllciBrZXkgaXMgcmVxdWlyZWQgdG8gbW92ZSB1cC9kb3duIChhbHRlciBoZWln
aHRPZmZzZXQpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmtleXNIZWlnaHRPZmZzZXRNb2Rp
ZmllclNoaWZ0ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBs
aXN0IG9mIGtleSBjb2RlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxlZnQgYWN0aW9uIChpbmNyZWFz
ZSByb3RhdGlvbk9mZnNldCkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5c1JvdGF0aW9u
T2Zmc2V0SW5jciA9IFszN107CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBs
aXN0IG9mIGtleSBjb2RlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IGFjdGlvbiAoZGVjcmVh
c2Ugcm90YXRpb25PZmZzZXQpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmtleXNSb3RhdGlv
bk9mZnNldERlY3IgPSBbMzldOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB3aGV0
aGVyIHRoZSBBbHQgbW9kaWZpZXIga2V5IGlzIHJlcXVpcmVkIHRvIG1vdmUgbGVmdC9yaWdodCAo
YWx0ZXIgcm90YXRpb25PZmZzZXQpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmtleXNSb3Rh
dGlvbk9mZnNldE1vZGlmaWVyQWx0ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
ZWZpbmVzIHdoZXRoZXIgdGhlIEN0cmwgbW9kaWZpZXIga2V5IGlzIHJlcXVpcmVkIHRvIG1vdmUg
bGVmdC9yaWdodCAoYWx0ZXIgcm90YXRpb25PZmZzZXQpCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmtleXNSb3RhdGlvbk9mZnNldE1vZGlmaWVyQ3RybCA9IGZhbHNlOworICAgICAgICAvKioK
KyAgICAgICAgICogRGVmaW5lcyB3aGV0aGVyIHRoZSBTaGlmdCBtb2RpZmllciBrZXkgaXMgcmVx
dWlyZWQgdG8gbW92ZSBsZWZ0L3JpZ2h0IChhbHRlciByb3RhdGlvbk9mZnNldCkKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMua2V5c1JvdGF0aW9uT2Zmc2V0TW9kaWZpZXJTaGlmdCA9IGZhbHNl
OworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgbGlzdCBvZiBrZXkgY29kZXMg
YXNzb2NpYXRlZCB3aXRoIHRoZSB6b29tLWluIGFjdGlvbiAoZGVjcmVhc2UgcmFkaXVzKQorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzUmFkaXVzSW5jciA9IFs0MF07CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBsaXN0IG9mIGtleSBjb2RlcyBhc3NvY2lhdGVkIHdp
dGggdGhlIHpvb20tb3V0IGFjdGlvbiAoaW5jcmVhc2UgcmFkaXVzKQorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5rZXlzUmFkaXVzRGVjciA9IFszOF07CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIHdoZXRoZXIgdGhlIEFsdCBtb2RpZmllciBrZXkgaXMgcmVxdWlyZWQgdG8gem9v
bSBpbi9vdXQgKGFsdGVyIHJhZGl1cyB2YWx1ZSkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
a2V5c1JhZGl1c01vZGlmaWVyQWx0ID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZXMgd2hldGhlciB0aGUgQ3RybCBtb2RpZmllciBrZXkgaXMgcmVxdWlyZWQgdG8gem9vbSBp
bi9vdXQgKGFsdGVyIHJhZGl1cyB2YWx1ZSkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5
c1JhZGl1c01vZGlmaWVyQ3RybCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVm
aW5lcyB3aGV0aGVyIHRoZSBTaGlmdCBtb2RpZmllciBrZXkgaXMgcmVxdWlyZWQgdG8gem9vbSBp
bi9vdXQgKGFsdGVyIHJhZGl1cyB2YWx1ZSkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5
c1JhZGl1c01vZGlmaWVyU2hpZnQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZXMgdGhlIHJhdGUgb2YgY2hhbmdlIG9mIGhlaWdodE9mZnNldC4KKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuaGVpZ2h0U2Vuc2liaWxpdHkgPSAxOworICAgICAgICAvKioKKyAgICAgICAg
ICogRGVmaW5lcyB0aGUgcmF0ZSBvZiBjaGFuZ2Ugb2Ygcm90YXRpb25PZmZzZXQuCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLnJvdGF0aW9uU2Vuc2liaWxpdHkgPSAxOworICAgICAgICAvKioK
KyAgICAgICAgICogRGVmaW5lcyB0aGUgcmF0ZSBvZiBjaGFuZ2Ugb2YgcmFkaXVzLgorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5yYWRpdXNTZW5zaWJpbGl0eSA9IDE7CisgICAgICAgIHRoaXMu
X2tleXMgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQXR0YWNoIHRoZSBp
bnB1dCBjb250cm9scyB0byBhIHNwZWNpZmljIGRvbSBlbGVtZW50IHRvIGdldCB0aGUgaW5wdXQg
ZnJvbS4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVtZW50IHRoZSBjb250
cm9scyBzaG91bGQgYmUgbGlzdGVuZWQgZnJvbQorICAgICAqIEBwYXJhbSBub1ByZXZlbnREZWZh
dWx0IERlZmluZXMgd2hldGhlciBldmVudCBjYXVnaHQgYnkgdGhlIGNvbnRyb2xzIHNob3VsZCBj
YWxsIHByZXZlbnRkZWZhdWx0KCkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVT
L2RvY3MvV2ViL0FQSS9FdmVudC9wcmV2ZW50RGVmYXVsdCkKKyAgICAgKi8KKyAgICBGb2xsb3dD
YW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUuYXR0YWNoQ29udHJvbCA9IGZ1bmN0aW9u
IChlbGVtZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGlmICh0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZlcikgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5lID0gdGhpcy5jYW1lcmEuZ2V0
U2NlbmUoKTsKKyAgICAgICAgdGhpcy5fZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7
CisgICAgICAgIHRoaXMuX29uQ2FudmFzQmx1ck9ic2VydmVyID0gdGhpcy5fZW5naW5lLm9uQ2Fu
dmFzQmx1ck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl9r
ZXlzID0gW107CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9vbktleWJvYXJkT2JzZXJ2ZXIg
PSB0aGlzLl9zY2VuZS5vbktleWJvYXJkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGluZm8pIHsK
KyAgICAgICAgICAgIHZhciBldnQgPSBpbmZvLmV2ZW50OworICAgICAgICAgICAgaWYgKCFldnQu
bWV0YUtleSkgeworICAgICAgICAgICAgICAgIGlmIChpbmZvLnR5cGUgPT09IF9FdmVudHNfa2V5
Ym9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siS2V5Ym9hcmRFdmVudFR5
cGVzIl0uS0VZRE9XTikgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY3RybFByZXNzZWQg
PSBldnQuY3RybEtleTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FsdFByZXNzZWQgPSBl
dnQuYWx0S2V5OworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc2hpZnRQcmVzc2VkID0gZXZ0
LnNoaWZ0S2V5OworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMua2V5c0hlaWdodE9mZnNl
dEluY3IuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICBfdGhpcy5rZXlzSGVpZ2h0T2Zmc2V0RGVjci5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0g
LTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNSb3RhdGlvbk9mZnNldElu
Y3IuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5rZXlzUm90YXRpb25PZmZzZXREZWNyLmluZGV4T2YoZXZ0LmtleUNvZGUpICE9PSAt
MSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMua2V5c1JhZGl1c0luY3IuaW5kZXhP
ZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5r
ZXlzUmFkaXVzRGVjci5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBpbmRleCA9IF90aGlzLl9rZXlzLmluZGV4T2YoZXZ0LmtleUNvZGUp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl9rZXlzLnB1c2goZXZ0LmtleUNvZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2dC5wcmV2
ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9QcmV2ZW50
RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnQucHJldmVudERl
ZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5rZXlzSGVp
Z2h0T2Zmc2V0SW5jci5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF90aGlzLmtleXNIZWlnaHRPZmZzZXREZWNyLmluZGV4T2YoZXZ0LmtleUNv
ZGUpICE9PSAtMSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMua2V5c1JvdGF0aW9u
T2Zmc2V0SW5jci5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLmtleXNSb3RhdGlvbk9mZnNldERlY3IuaW5kZXhPZihldnQua2V5Q29k
ZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5rZXlzUmFkaXVzSW5j
ci5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
IF90aGlzLmtleXNSYWRpdXNEZWNyLmluZGV4T2YoZXZ0LmtleUNvZGUpICE9PSAtMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gX3RoaXMuX2tleXMuaW5kZXhPZihldnQu
a2V5Q29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9rZXlzLnNwbGljZShpbmRleCwgMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZ0
LnByZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub1By
ZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5wcmV2
ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRh
Y2ggdGhlIGN1cnJlbnQgY29udHJvbHMgZnJvbSB0aGUgc3BlY2lmaWVkIGRvbSBlbGVtZW50Lgor
ICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdG8gc3RvcCBsaXN0ZW5p
bmcgdGhlIGlucHV0cyBmcm9tCisgICAgICovCisgICAgRm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3Zl
SW5wdXQucHJvdG90eXBlLmRldGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVudCkgeworICAg
ICAgICBpZiAodGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbktleWJvYXJk
T2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5vbktleWJvYXJkT2JzZXJ2
YWJsZS5yZW1vdmUodGhpcy5fb25LZXlib2FyZE9ic2VydmVyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZlcikgeworICAgICAgICAgICAg
ICAgIHRoaXMuX2VuZ2luZS5vbkNhbnZhc0JsdXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkNh
bnZhc0JsdXJPYnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vbktl
eWJvYXJkT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fb25DYW52YXNCbHVyT2Jz
ZXJ2ZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2tleXMgPSBbXTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgY3VycmVudCBjYW1lcmEgc3RhdGUgZGVwZW5k
aW5nIG9uIHRoZSBpbnB1dHMgdGhhdCBoYXZlIGJlZW4gdXNlZCB0aGlzIGZyYW1lLgorICAgICAq
IFRoaXMgaXMgYSBkeW5hbWljYWxseSBjcmVhdGVkIGxhbWJkYSB0byBhdm9pZCB0aGUgcGVyZm9y
bWFuY2UgcGVuYWx0eSBvZiBsb29waW5nIGZvciBpbnB1dHMgaW4gdGhlIHJlbmRlciBsb29wLgor
ICAgICAqLworICAgIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZS5jaGVj
a0lucHV0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgaWYgKHRoaXMuX29uS2V5Ym9hcmRPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5fa2V5
cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXlDb2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKF90aGlz
LmtleXNIZWlnaHRPZmZzZXRJbmNyLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xICYmCisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl9tb2RpZmllckhlaWdodE9mZnNldCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLmNhbWVyYS5oZWlnaHRPZmZzZXQgKz0gX3RoaXMuaGVpZ2h0U2Vuc2li
aWxpdHk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlz
LmtleXNIZWlnaHRPZmZzZXREZWNyLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xICYmCisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl9tb2RpZmllckhlaWdodE9mZnNldCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLmNhbWVyYS5oZWlnaHRPZmZzZXQgLT0gX3RoaXMuaGVpZ2h0U2Vuc2li
aWxpdHk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlz
LmtleXNSb3RhdGlvbk9mZnNldEluY3IuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTEgJiYKKyAgICAg
ICAgICAgICAgICAgICAgX3RoaXMuX21vZGlmaWVyUm90YXRpb25PZmZzZXQoKSkgeworICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5jYW1lcmEucm90YXRpb25PZmZzZXQgKz0gX3RoaXMucm90YXRp
b25TZW5zaWJpbGl0eTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuY2FtZXJhLnJvdGF0aW9u
T2Zmc2V0ICU9IDM2MDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoX3RoaXMua2V5c1JvdGF0aW9uT2Zmc2V0RGVjci5pbmRleE9mKGtleUNvZGUpICE9PSAtMSAm
JgorICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbW9kaWZpZXJSb3RhdGlvbk9mZnNldCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmNhbWVyYS5yb3RhdGlvbk9mZnNldCAtPSBfdGhp
cy5yb3RhdGlvblNlbnNpYmlsaXR5OworICAgICAgICAgICAgICAgICAgICBfdGhpcy5jYW1lcmEu
cm90YXRpb25PZmZzZXQgJT0gMzYwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChfdGhpcy5rZXlzUmFkaXVzSW5jci5pbmRleE9mKGtleUNvZGUpICE9PSAtMSAm
JgorICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbW9kaWZpZXJSYWRpdXMoKSkgeworICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5jYW1lcmEucmFkaXVzICs9IF90aGlzLnJhZGl1c1NlbnNpYmls
aXR5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5r
ZXlzUmFkaXVzRGVjci5pbmRleE9mKGtleUNvZGUpICE9PSAtMSAmJgorICAgICAgICAgICAgICAg
ICAgICBfdGhpcy5fbW9kaWZpZXJSYWRpdXMoKSkgeworICAgICAgICAgICAgICAgICAgICBfdGhp
cy5jYW1lcmEucmFkaXVzIC09IF90aGlzLnJhZGl1c1NlbnNpYmlsaXR5OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjdXJyZW50IGlucHV0LgorICAgICAqIEByZXR1
cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgRm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3Zl
SW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuICJGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCI7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBjbGFz
cy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQorICAgICAqLworICAg
IEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZS5nZXRTaW1wbGVOYW1lID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gImtleWJvYXJkIjsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENoZWNrIGlmIHRoZSBwcmVzc2VkIG1vZGlmaWVyIGtleXMgKEFsdC9DdHJsL1No
aWZ0KSBtYXRjaCB0aG9zZSBjb25maWd1cmVkIHRvCisgICAgICogYWxsb3cgbW9kaWZpY2F0aW9u
IG9mIHRoZSBoZWlnaHRPZmZzZXQgdmFsdWUuCisgICAgICovCisgICAgRm9sbG93Q2FtZXJhS2V5
Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLl9tb2RpZmllckhlaWdodE9mZnNldCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuICh0aGlzLmtleXNIZWlnaHRPZmZzZXRNb2RpZmllckFsdCA9
PT0gdGhpcy5fYWx0UHJlc3NlZCAmJgorICAgICAgICAgICAgdGhpcy5rZXlzSGVpZ2h0T2Zmc2V0
TW9kaWZpZXJDdHJsID09PSB0aGlzLl9jdHJsUHJlc3NlZCAmJgorICAgICAgICAgICAgdGhpcy5r
ZXlzSGVpZ2h0T2Zmc2V0TW9kaWZpZXJTaGlmdCA9PT0gdGhpcy5fc2hpZnRQcmVzc2VkKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBwcmVzc2VkIG1vZGlmaWVyIGtleXMg
KEFsdC9DdHJsL1NoaWZ0KSBtYXRjaCB0aG9zZSBjb25maWd1cmVkIHRvCisgICAgICogYWxsb3cg
bW9kaWZpY2F0aW9uIG9mIHRoZSByb3RhdGlvbk9mZnNldCB2YWx1ZS4KKyAgICAgKi8KKyAgICBG
b2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUuX21vZGlmaWVyUm90YXRpb25P
ZmZzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAodGhpcy5rZXlzUm90YXRpb25P
ZmZzZXRNb2RpZmllckFsdCA9PT0gdGhpcy5fYWx0UHJlc3NlZCAmJgorICAgICAgICAgICAgdGhp
cy5rZXlzUm90YXRpb25PZmZzZXRNb2RpZmllckN0cmwgPT09IHRoaXMuX2N0cmxQcmVzc2VkICYm
CisgICAgICAgICAgICB0aGlzLmtleXNSb3RhdGlvbk9mZnNldE1vZGlmaWVyU2hpZnQgPT09IHRo
aXMuX3NoaWZ0UHJlc3NlZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUg
cHJlc3NlZCBtb2RpZmllciBrZXlzIChBbHQvQ3RybC9TaGlmdCkgbWF0Y2ggdGhvc2UgY29uZmln
dXJlZCB0bworICAgICAqIGFsbG93IG1vZGlmaWNhdGlvbiBvZiB0aGUgcmFkaXVzIHZhbHVlLgor
ICAgICAqLworICAgIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZS5fbW9k
aWZpZXJSYWRpdXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAodGhpcy5rZXlzUmFk
aXVzTW9kaWZpZXJBbHQgPT09IHRoaXMuX2FsdFByZXNzZWQgJiYKKyAgICAgICAgICAgIHRoaXMu
a2V5c1JhZGl1c01vZGlmaWVyQ3RybCA9PT0gdGhpcy5fY3RybFByZXNzZWQgJiYKKyAgICAgICAg
ICAgIHRoaXMua2V5c1JhZGl1c01vZGlmaWVyU2hpZnQgPT09IHRoaXMuX3NoaWZ0UHJlc3NlZCk7
CisgICAgfTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29y
YXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYUtleWJvYXJk
TW92ZUlucHV0LnByb3RvdHlwZSwgImtleXNIZWlnaHRPZmZzZXRJbmNyIiwgdm9pZCAwKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnBy
b3RvdHlwZSwgImtleXNIZWlnaHRPZmZzZXREZWNyIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZSwgImtl
eXNIZWlnaHRPZmZzZXRNb2RpZmllckFsdCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkK
KyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJrZXlzSGVp
Z2h0T2Zmc2V0TW9kaWZpZXJDdHJsIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZSwgImtleXNIZWlnaHRP
ZmZzZXRNb2RpZmllclNoaWZ0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZSwgImtleXNSb3RhdGlvbk9m
ZnNldEluY3IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2Ft
ZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLCAia2V5c1JvdGF0aW9uT2Zmc2V0RGVjciIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2Fy
ZE1vdmVJbnB1dC5wcm90b3R5cGUsICJrZXlzUm90YXRpb25PZmZzZXRNb2RpZmllckFsdCIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1v
dmVJbnB1dC5wcm90b3R5cGUsICJrZXlzUm90YXRpb25PZmZzZXRNb2RpZmllckN0cmwiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3Zl
SW5wdXQucHJvdG90eXBlLCAia2V5c1JvdGF0aW9uT2Zmc2V0TW9kaWZpZXJTaGlmdCIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dC5wcm90b3R5cGUsICJrZXlzUmFkaXVzSW5jciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJr
ZXlzUmFkaXVzRGVjciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xs
b3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJrZXlzUmFkaXVzTW9kaWZpZXJB
bHQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJhS2V5
Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLCAia2V5c1JhZGl1c01vZGlmaWVyQ3RybCIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dC5wcm90b3R5cGUsICJrZXlzUmFkaXVzTW9kaWZpZXJTaGlmdCIsIHZvaWQgMCk7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAg
ICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
c2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90
b3R5cGUsICJoZWlnaHRTZW5zaWJpbGl0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkK
KyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJyb3RhdGlv
blNlbnNpYmlsaXR5Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxv
d0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZSwgInJhZGl1c1NlbnNpYmlsaXR5Iiwg
dm9pZCAwKTsKKyAgICByZXR1cm4gRm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQ7Cit9KCkp
OworCitfQ2FtZXJhc19jYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkNhbWVyYUlucHV0VHlwZXMiXVsiRm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQi
XSA9IEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0OworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9DYW1lcmFzL0lucHV0cy9mb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vQ2FtZXJhcy9JbnB1dHMvZm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRm9sbG93Q2FtZXJhTW91c2VXaGVlbElu
cHV0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZvbGxvd0NhbWVyYU1v
dXNlV2hlZWxJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9sbG93Q2FtZXJhTW91c2VXaGVl
bElucHV0OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25v
ZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0
b3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfY2FtZXJhSW5wdXRz
TWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvY2Ft
ZXJhSW5wdXRzTWFuYWdlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FdmVudHNf
cG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vRXZlbnRzL3BvaW50ZXJFdmVudHMgKi8gIi4vRXZlbnRzL3BvaW50
ZXJFdmVudHMudHMiKTsKKworCisKKworLyoqCisgKiBNYW5hZ2UgdGhlIG1vdXNlIHdoZWVsIGlu
cHV0cyB0byBjb250cm9sIGEgZm9sbG93IGNhbWVyYS4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRzCisgKi8KK3ZhciBGb2xs
b3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgZnVuY3Rpb24gRm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0KCkgeworICAgICAgICAvKioK
KyAgICAgICAgICogTW91ZSB3aGVlbCBjb250cm9scyB6b29tLiAoTW91c2Ugd2hlZWwgbW9kaWZp
ZXMgY2FtZXJhLnJhZGl1cyB2YWx1ZS4pCisgICAgICAgICAqLworICAgICAgICB0aGlzLmF4aXND
b250cm9sUmFkaXVzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1vdWUgd2hlZWwg
Y29udHJvbHMgaGVpZ2h0LiAoTW91c2Ugd2hlZWwgbW9kaWZpZXMgY2FtZXJhLmhlaWdodE9mZnNl
dCB2YWx1ZS4pCisgICAgICAgICAqLworICAgICAgICB0aGlzLmF4aXNDb250cm9sSGVpZ2h0ID0g
ZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNb3VlIHdoZWVsIGNvbnRyb2xzIGFuZ2xl
LiAoTW91c2Ugd2hlZWwgbW9kaWZpZXMgY2FtZXJhLnJvdGF0aW9uT2Zmc2V0IHZhbHVlLikKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuYXhpc0NvbnRyb2xSb3RhdGlvbiA9IGZhbHNlOworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBTZXQgdGhlIG1vdXNlIHdoZWVsIHByZWNpc2lv
biBvciBob3cgZmFzdCBpcyB0aGUgY2FtZXJhIG1vdmVzIGluCisgICAgICAgICAqIHJlbGF0aW9u
IHRvIG1vdXNlV2hlZWwgZXZlbnRzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy53aGVlbFBy
ZWNpc2lvbiA9IDMuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIHdoZWVsRGVsdGFQZXJjZW50
YWdlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHdoZWVsUHJlY2lzaW9uIGlmIGRpZmZlcmVudCBm
cm9tIDAuCisgICAgICAgICAqIEl0IGRlZmluZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgY3VycmVudCBj
YW1lcmEucmFkaXVzIHRvIHVzZSBhcyBkZWx0YSB3aGVuIHdoZWVsIGlzIHVzZWQuCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLndoZWVsRGVsdGFQZXJjZW50YWdlID0gMDsKKyAgICB9CisgICAg
LyoqCisgICAgICogQXR0YWNoIHRoZSBpbnB1dCBjb250cm9scyB0byBhIHNwZWNpZmljIGRvbSBl
bGVtZW50IHRvIGdldCB0aGUgaW5wdXQgZnJvbS4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZp
bmVzIHRoZSBlbGVtZW50IHRoZSBjb250cm9scyBzaG91bGQgYmUgbGlzdGVuZWQgZnJvbQorICAg
ICAqIEBwYXJhbSBub1ByZXZlbnREZWZhdWx0IERlZmluZXMgd2hldGhlciBldmVudCBjYXVnaHQg
YnkgdGhlIGNvbnRyb2xzIHNob3VsZCBjYWxsIHByZXZlbnRkZWZhdWx0KCkgKGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudC9wcmV2ZW50RGVmYXVs
dCkKKyAgICAgKi8KKyAgICBGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQucHJvdG90eXBlLmF0
dGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCkgeworICAg
ICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl93aGVlbCA9IGZ1bmN0aW9uIChw
LCBzKSB7CisgICAgICAgICAgICAvLyBzYW5pdHkgY2hlY2sgLSB0aGlzIHNob3VsZCBiZSBhIFBv
aW50ZXJXaGVlbCBldmVudC4KKyAgICAgICAgICAgIGlmIChwLnR5cGUgIT09IF9FdmVudHNfcG9p
bnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVyRXZlbnRUeXBl
cyJdLlBPSU5URVJXSEVFTCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBldmVudCA9IHAuZXZlbnQ7CisgICAgICAgICAgICB2YXIgZGVs
dGEgPSAwOworICAgICAgICAgICAgLy8gQ2hyb21lLCBTYWZhcmk6IGV2ZW50LmRlbHRhWQorICAg
ICAgICAgICAgLy8gSUU6IGV2ZW50LndoZWVsRGVsdGEKKyAgICAgICAgICAgIC8vIEZpcmVmb3g6
IGV2ZW50LmRldGFpbCAoaW52ZXJ0ZWQpCisgICAgICAgICAgICB2YXIgd2hlZWxEZWx0YSA9IE1h
dGgubWF4KC0xLCBNYXRoLm1pbigxLCAoZXZlbnQuZGVsdGFZIHx8IGV2ZW50LndoZWVsRGVsdGEg
fHwgLWV2ZW50LmRldGFpbCkpKTsKKyAgICAgICAgICAgIGlmIChfdGhpcy53aGVlbERlbHRhUGVy
Y2VudGFnZSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KChfdGhpcy5heGlzQ29u
dHJvbFJhZGl1cyArCisgICAgICAgICAgICAgICAgICAgIF90aGlzLmF4aXNDb250cm9sSGVpZ2h0
ICsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXhpc0NvbnRyb2xSb3RhdGlvbikgPD0gMSwg
IndoZWVsRGVsdGFQZXJjZW50YWdlIG9ubHkgdXNhYmxlIHdoZW4gbW91c2Ugd2hlZWwgIiArCisg
ICAgICAgICAgICAgICAgICAgICJjb250cm9sbHMgT05FIGF4aXMuICIgKworICAgICAgICAgICAg
ICAgICAgICAiQ3VycmVudGx5IGVuYWJsZWQ6ICIgKworICAgICAgICAgICAgICAgICAgICAiYXhp
c0NvbnRyb2xSYWRpdXM6ICIgKyBfdGhpcy5heGlzQ29udHJvbFJhZGl1cyArCisgICAgICAgICAg
ICAgICAgICAgICIsIGF4aXNDb250cm9sSGVpZ2h0T2Zmc2V0OiAiICsgX3RoaXMuYXhpc0NvbnRy
b2xIZWlnaHQgKworICAgICAgICAgICAgICAgICAgICAiLCBheGlzQ29udHJvbFJvdGF0aW9uT2Zm
c2V0OiAiICsgX3RoaXMuYXhpc0NvbnRyb2xSb3RhdGlvbik7CisgICAgICAgICAgICAgICAgaWYg
KF90aGlzLmF4aXNDb250cm9sUmFkaXVzKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhID0K
KyAgICAgICAgICAgICAgICAgICAgICAgIHdoZWVsRGVsdGEgKiAwLjAxICogX3RoaXMud2hlZWxE
ZWx0YVBlcmNlbnRhZ2UgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNhbWVy
YS5yYWRpdXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90
aGlzLmF4aXNDb250cm9sSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhID0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHdoZWVsRGVsdGEgKiAwLjAxICogX3RoaXMud2hlZWxEZWx0
YVBlcmNlbnRhZ2UgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNhbWVyYS5o
ZWlnaHRPZmZzZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KF90aGlzLmF4aXNDb250cm9sUm90YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGEg
PQorICAgICAgICAgICAgICAgICAgICAgICAgd2hlZWxEZWx0YSAqIDAuMDEgKiBfdGhpcy53aGVl
bERlbHRhUGVyY2VudGFnZSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuY2Ft
ZXJhLnJvdGF0aW9uT2Zmc2V0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRlbHRhID0gd2hlZWxEZWx0YSAqIF90
aGlzLndoZWVsUHJlY2lzaW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlbHRh
KSB7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLmF4aXNDb250cm9sUmFkaXVzKSB7CisgICAg
ICAgICAgICAgICAgICAgIF90aGlzLmNhbWVyYS5yYWRpdXMgKz0gZGVsdGE7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLmF4aXNDb250cm9sSGVpZ2h0
KSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmNhbWVyYS5oZWlnaHRPZmZzZXQgLT0gZGVs
dGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLmF4
aXNDb250cm9sUm90YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuY2FtZXJhLnJv
dGF0aW9uT2Zmc2V0IC09IGRlbHRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAg
IGlmICghbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKyAgICAgICAgdGhpcy5fb2JzZXJ2ZXIgPSB0aGlzLmNhbWVyYS5nZXRTY2VuZSgpLm9uUG9p
bnRlck9ic2VydmFibGUuYWRkKHRoaXMuX3doZWVsLCBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSV0hF
RUwpOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0YWNoIHRoZSBjdXJyZW50IGNvbnRyb2xz
IGZyb20gdGhlIHNwZWNpZmllZCBkb20gZWxlbWVudC4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBE
ZWZpbmVzIHRoZSBlbGVtZW50IHRvIHN0b3AgbGlzdGVuaW5nIHRoZSBpbnB1dHMgZnJvbQorICAg
ICAqLworICAgIEZvbGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dC5wcm90b3R5cGUuZGV0YWNoQ29u
dHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgICAgIGlmICh0aGlzLl9vYnNlcnZlciAm
JiBlbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLmNhbWVyYS5nZXRTY2VuZSgpLm9uUG9pbnRl
ck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29ic2VydmVyKTsKKyAgICAgICAgICAgIHRoaXMuX29i
c2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3doZWVsID0gbnVsbDsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY3Vy
cmVudCBpbnRwdXQuCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAg
ICBGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJBcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5w
dXQiOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBmcmllbmRseSBuYW1lIGFzc29j
aWF0ZWQgd2l0aCB0aGUgaW5wdXQgY2xhc3MuCisgICAgICogQHJldHVybnMgdGhlIGlucHV0IGZy
aWVuZGx5IG5hbWUKKyAgICAgKi8KKyAgICBGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQucHJv
dG90eXBlLmdldFNpbXBsZU5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAibW91
c2V3aGVlbCI7CisgICAgfTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVy
YU1vdXNlV2hlZWxJbnB1dC5wcm90b3R5cGUsICJheGlzQ29udHJvbFJhZGl1cyIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQu
cHJvdG90eXBlLCAiYXhpc0NvbnRyb2xIZWlnaHQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJd
KSgpCisgICAgXSwgRm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0LnByb3RvdHlwZSwgImF4aXND
b250cm9sUm90YXRpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9s
bG93Q2FtZXJhTW91c2VXaGVlbElucHV0LnByb3RvdHlwZSwgIndoZWVsUHJlY2lzaW9uIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYU1vdXNlV2hlZWxJ
bnB1dC5wcm90b3R5cGUsICJ3aGVlbERlbHRhUGVyY2VudGFnZSIsIHZvaWQgMCk7CisgICAgcmV0
dXJuIEZvbGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dDsKK30oKSk7CisKK19DYW1lcmFzX2NhbWVy
YUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ2FtZXJhSW5wdXRU
eXBlcyJdWyJGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQiXSA9IEZvbGxvd0NhbWVyYU1vdXNl
V2hlZWxJbnB1dDsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9JbnB1dHMvZm9s
bG93Q2FtZXJhUG9pbnRlcnNJbnB1dC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9JbnB1dHMv
Zm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9y
cyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
Q2FtZXJhc19jYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFn
ZXIgKi8gIi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0NhbWVyYXNfSW5wdXRzX0Jhc2VDYW1lcmFQb2ludGVyc0lucHV0X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9D
YW1lcmFzL0lucHV0cy9CYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dCAqLyAiLi9DYW1lcmFzL0lucHV0
cy9CYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dC50cyIpOworCisKKworCisvKioKKyAqIE1hbmFnZSB0
aGUgcG9pbnRlcnMgaW5wdXRzIHRvIGNvbnRyb2wgYW4gZm9sbG93IGNhbWVyYS4KKyAqIEBzZWUg
aHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRz
CisgKi8KK3ZhciBGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0ID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQsIF9zdXBlcik7CisgICAgZnVu
Y3Rpb24gRm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dCgpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
X3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBwb2ludGVyIGFuZ3VsYXIgc2Vu
c2liaWxpdHkgYWxvbmcgdGhlIFggYXhpcyBvciBob3cgZmFzdCBpcworICAgICAgICAgKiB0aGUg
Y2FtZXJhIHJvdGF0aW5nLgorICAgICAgICAgKiBBIG5lZ2F0aXZlIG51bWJlciB3aWxsIHJldmVy
c2UgdGhlIGF4aXMgZGlyZWN0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYW5ndWxh
clNlbnNpYmlsaXR5WCA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBw
b2ludGVyIGFuZ3VsYXIgc2Vuc2liaWxpdHkgYWxvbmcgdGhlIFkgYXhpcyBvciBob3cgZmFzdCBp
cworICAgICAgICAgKiB0aGUgY2FtZXJhIHJvdGF0aW5nLgorICAgICAgICAgKiBBIG5lZ2F0aXZl
IG51bWJlciB3aWxsIHJldmVyc2UgdGhlIGF4aXMgZGlyZWN0aW9uLgorICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMuYW5ndWxhclNlbnNpYmlsaXR5WSA9IDE7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBEZWZpbmVzIHRoZSBwb2ludGVyIHBpbmNoIHByZWNpc2lvbiBvciBob3cgZmFzdCBpcyB0
aGUgY2FtZXJhIHpvb21pbmcuCisgICAgICAgICAqIEEgbmVnYXRpdmUgbnVtYmVyIHdpbGwgcmV2
ZXJzZSB0aGUgYXhpcyBkaXJlY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5waW5j
aFByZWNpc2lvbiA9IDEwMDAwLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBwaW5jaERlbHRh
UGVyY2VudGFnZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiBwaW5jaFByZWNpc2lvbiBpZiBkaWZm
ZXJlbnQKKyAgICAgICAgICogZnJvbSAwLgorICAgICAgICAgKiBJdCBkZWZpbmVzIHRoZSBwZXJj
ZW50YWdlIG9mIGN1cnJlbnQgY2FtZXJhLnJhZGl1cyB0byB1c2UgYXMgZGVsdGEgd2hlbgorICAg
ICAgICAgKiBwaW5jaCB6b29tIGlzIHVzZWQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5w
aW5jaERlbHRhUGVyY2VudGFnZSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb2ludGVy
IFggYXhpcyBjb250cm9scyB6b29tLiAoWCBheGlzIG1vZGlmaWVzIGNhbWVyYS5yYWRpdXMgdmFs
dWUuKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXhpc1hDb250cm9sUmFkaXVzID0gZmFs
c2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb2ludGVyIFggYXhpcyBjb250cm9scyBoZWln
aHQuIChYIGF4aXMgbW9kaWZpZXMgY2FtZXJhLmhlaWdodE9mZnNldCB2YWx1ZS4pCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5heGlzWENvbnRyb2xIZWlnaHQgPSBmYWxzZTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFBvaW50ZXIgWCBheGlzIGNvbnRyb2xzIGFuZ2xlLiAoWCBheGlzIG1v
ZGlmaWVzIGNhbWVyYS5yb3RhdGlvbk9mZnNldCB2YWx1ZS4pCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5heGlzWENvbnRyb2xSb3RhdGlvbiA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBQb2ludGVyIFkgYXhpcyBjb250cm9scyB6b29tLiAoWSBheGlzIG1vZGlmaWVzIGNhbWVy
YS5yYWRpdXMgdmFsdWUuKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXhpc1lDb250cm9s
UmFkaXVzID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb2ludGVyIFkgYXhpcyBj
b250cm9scyBoZWlnaHQuIChZIGF4aXMgbW9kaWZpZXMgY2FtZXJhLmhlaWdodE9mZnNldCB2YWx1
ZS4pCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5heGlzWUNvbnRyb2xIZWlnaHQgPSB0cnVl
OworICAgICAgICAvKioKKyAgICAgICAgICogUG9pbnRlciBZIGF4aXMgY29udHJvbHMgYW5nbGUu
IChZIGF4aXMgbW9kaWZpZXMgY2FtZXJhLnJvdGF0aW9uT2Zmc2V0IHZhbHVlLikKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLmF4aXNZQ29udHJvbFJvdGF0aW9uID0gZmFsc2U7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBQaW5jaCBjb250cm9scyB6b29tLiAoUGluY2ggbW9kaWZpZXMgY2Ft
ZXJhLnJhZGl1cyB2YWx1ZS4pCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5heGlzUGluY2hD
b250cm9sUmFkaXVzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBpbmNoIGNvbnRy
b2xzIGhlaWdodC4gKFBpbmNoIG1vZGlmaWVzIGNhbWVyYS5oZWlnaHRPZmZzZXQgdmFsdWUuKQor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXhpc1BpbmNoQ29udHJvbEhlaWdodCA9IGZhbHNl
OworICAgICAgICAvKioKKyAgICAgICAgICogUGluY2ggY29udHJvbHMgYW5nbGUuIChQaW5jaCBt
b2RpZmllcyBjYW1lcmEucm90YXRpb25PZmZzZXQgdmFsdWUuKQorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuYXhpc1BpbmNoQ29udHJvbFJvdGF0aW9uID0gZmFsc2U7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBMb2cgZXJyb3IgbWVzc2FnZXMgaWYgYmFzaWMgbWlzY29uZmlndXJhdGlvbiBo
YXMgb2NjdXJyZWQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy53YXJuaW5nRW5hYmxlID0g
dHJ1ZTsKKyAgICAgICAgLyogQ2hlY2sgZm9yIG9idmlvdXMgbWlzY29uZmlndXJhdGlvbi4gKi8K
KyAgICAgICAgX3RoaXMuX3dhcm5pbmdDb3VudGVyID0gMDsKKyAgICAgICAgcmV0dXJuIF90aGlz
OworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjdXJy
ZW50IGlucHV0LgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAg
Rm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gIkZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQiOworICAg
IH07CisgICAgRm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUub25Ub3VjaCA9IGZ1
bmN0aW9uIChwb2ludEEsIG9mZnNldFgsIG9mZnNldFkpIHsKKyAgICAgICAgdGhpcy5fd2Fybmlu
ZygpOworICAgICAgICBpZiAodGhpcy5heGlzWENvbnRyb2xSb3RhdGlvbikgeworICAgICAgICAg
ICAgdGhpcy5jYW1lcmEucm90YXRpb25PZmZzZXQgKz0gb2Zmc2V0WCAvIHRoaXMuYW5ndWxhclNl
bnNpYmlsaXR5WDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLmF4aXNZQ29udHJv
bFJvdGF0aW9uKSB7CisgICAgICAgICAgICB0aGlzLmNhbWVyYS5yb3RhdGlvbk9mZnNldCArPSBv
ZmZzZXRZIC8gdGhpcy5hbmd1bGFyU2Vuc2liaWxpdHlYOworICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLmF4aXNYQ29udHJvbEhlaWdodCkgeworICAgICAgICAgICAgdGhpcy5jYW1lcmEuaGVp
Z2h0T2Zmc2V0ICs9IG9mZnNldFggLyB0aGlzLmFuZ3VsYXJTZW5zaWJpbGl0eVk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5heGlzWUNvbnRyb2xIZWlnaHQpIHsKKyAgICAgICAg
ICAgIHRoaXMuY2FtZXJhLmhlaWdodE9mZnNldCArPSBvZmZzZXRZIC8gdGhpcy5hbmd1bGFyU2Vu
c2liaWxpdHlZOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmF4aXNYQ29udHJvbFJhZGl1
cykgeworICAgICAgICAgICAgdGhpcy5jYW1lcmEucmFkaXVzIC09IG9mZnNldFggLyB0aGlzLmFu
Z3VsYXJTZW5zaWJpbGl0eVk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5heGlz
WUNvbnRyb2xSYWRpdXMpIHsKKyAgICAgICAgICAgIHRoaXMuY2FtZXJhLnJhZGl1cyAtPSBvZmZz
ZXRZIC8gdGhpcy5hbmd1bGFyU2Vuc2liaWxpdHlZOworICAgICAgICB9CisgICAgfTsKKyAgICBG
b2xsb3dDYW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZS5vbk11bHRpVG91Y2ggPSBmdW5jdGlv
biAocG9pbnRBLCBwb2ludEIsIHByZXZpb3VzUGluY2hTcXVhcmVkRGlzdGFuY2UsIHBpbmNoU3F1
YXJlZERpc3RhbmNlLCBwcmV2aW91c011bHRpVG91Y2hQYW5Qb3NpdGlvbiwgbXVsdGlUb3VjaFBh
blBvc2l0aW9uKSB7CisgICAgICAgIGlmIChwcmV2aW91c1BpbmNoU3F1YXJlZERpc3RhbmNlID09
PSAwICYmIHByZXZpb3VzTXVsdGlUb3VjaFBhblBvc2l0aW9uID09PSBudWxsKSB7CisgICAgICAg
ICAgICAvLyBGaXJzdCB0aW1lIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3IgbmV3IHBpbmNoLgor
ICAgICAgICAgICAgLy8gTmV4dCB0aW1lIHRoaXMgaXMgY2FsbGVkIHRoZXJlIHdpbGwgYmUgYQor
ICAgICAgICAgICAgLy8gcHJldmlvdXNQaW5jaFNxdWFyZWREaXN0YW5jZSBhbmQgcGluY2hTcXVh
cmVkRGlzdGFuY2UgdG8gY29tcGFyZS4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocGluY2hTcXVhcmVkRGlzdGFuY2UgPT09IDAgJiYgbXVsdGlUb3VjaFBhblBv
c2l0aW9uID09PSBudWxsKSB7CisgICAgICAgICAgICAvLyBMYXN0IHRpbWUgdGhpcyBtZXRob2Qg
aXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYSBwaW5jaC4KKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgcGluY2hEZWx0YSA9IChwaW5jaFNxdWFyZWREaXN0YW5jZSAt
IHByZXZpb3VzUGluY2hTcXVhcmVkRGlzdGFuY2UpIC8KKyAgICAgICAgICAgICh0aGlzLnBpbmNo
UHJlY2lzaW9uICogKHRoaXMuYW5ndWxhclNlbnNpYmlsaXR5WCArIHRoaXMuYW5ndWxhclNlbnNp
YmlsaXR5WSkgLyAyKTsKKyAgICAgICAgaWYgKHRoaXMucGluY2hEZWx0YVBlcmNlbnRhZ2UpIHsK
KyAgICAgICAgICAgIHBpbmNoRGVsdGEgKj0gMC4wMSAqIHRoaXMucGluY2hEZWx0YVBlcmNlbnRh
Z2U7CisgICAgICAgICAgICBpZiAodGhpcy5heGlzUGluY2hDb250cm9sUm90YXRpb24pIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLmNhbWVyYS5yb3RhdGlvbk9mZnNldCArPSBwaW5jaERlbHRhICog
dGhpcy5jYW1lcmEucm90YXRpb25PZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodGhpcy5heGlzUGluY2hDb250cm9sSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgdGhpcy5j
YW1lcmEuaGVpZ2h0T2Zmc2V0ICs9IHBpbmNoRGVsdGEgKiB0aGlzLmNhbWVyYS5oZWlnaHRPZmZz
ZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5heGlzUGluY2hDb250cm9s
UmFkaXVzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEucmFkaXVzIC09IHBpbmNoRGVs
dGEgKiB0aGlzLmNhbWVyYS5yYWRpdXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAodGhpcy5heGlzUGluY2hDb250cm9sUm90YXRpb24p
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYS5yb3RhdGlvbk9mZnNldCArPSBwaW5jaERl
bHRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuYXhpc1BpbmNoQ29udHJv
bEhlaWdodCkgeworICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLmhlaWdodE9mZnNldCArPSBw
aW5jaERlbHRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuYXhpc1BpbmNo
Q29udHJvbFJhZGl1cykgeworICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLnJhZGl1cyAtPSBw
aW5jaERlbHRhOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBGb2xsb3dD
YW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZS5fd2FybmluZyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLndhcm5pbmdFbmFibGUgfHwgdGhpcy5fd2FybmluZ0NvdW50ZXIrKyAl
IDEwMCAhPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZh
ciB3YXJuID0gIkl0IHByb2JhYmx5IG9ubHkgbWFrZXMgc2Vuc2UgdG8gY29udHJvbCBPTkUgY2Ft
ZXJhICIgKworICAgICAgICAgICAgInByb3BlcnR5IHdpdGggZWFjaCBwb2ludGVyIGF4aXMuIFNl
dCAnd2FybmluZ0VuYWJsZSA9IGZhbHNlJyAiICsKKyAgICAgICAgICAgICJpZiB5b3UgYXJlIHN1
cmUuIEN1cnJlbnRseSBlbmFibGVkOiAiOworICAgICAgICBjb25zb2xlLmFzc2VydCgodGhpcy5h
eGlzWENvbnRyb2xSb3RhdGlvbiArCisgICAgICAgICAgICB0aGlzLmF4aXNYQ29udHJvbEhlaWdo
dCArCisgICAgICAgICAgICB0aGlzLmF4aXNYQ29udHJvbFJhZGl1cykgPD0gMSwgd2FybiArCisg
ICAgICAgICAgICAiYXhpc1hDb250cm9sUm90YXRpb246ICIgKyB0aGlzLmF4aXNYQ29udHJvbFJv
dGF0aW9uICsKKyAgICAgICAgICAgICIsIGF4aXNYQ29udHJvbEhlaWdodDogIiArIHRoaXMuYXhp
c1hDb250cm9sSGVpZ2h0ICsKKyAgICAgICAgICAgICIsIGF4aXNYQ29udHJvbFJhZGl1czogIiAr
IHRoaXMuYXhpc1hDb250cm9sUmFkaXVzKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoKHRoaXMu
YXhpc1lDb250cm9sUm90YXRpb24gKworICAgICAgICAgICAgdGhpcy5heGlzWUNvbnRyb2xIZWln
aHQgKworICAgICAgICAgICAgdGhpcy5heGlzWUNvbnRyb2xSYWRpdXMpIDw9IDEsIHdhcm4gKwor
ICAgICAgICAgICAgImF4aXNZQ29udHJvbFJvdGF0aW9uOiAiICsgdGhpcy5heGlzWUNvbnRyb2xS
b3RhdGlvbiArCisgICAgICAgICAgICAiLCBheGlzWUNvbnRyb2xIZWlnaHQ6ICIgKyB0aGlzLmF4
aXNZQ29udHJvbEhlaWdodCArCisgICAgICAgICAgICAiLCBheGlzWUNvbnRyb2xSYWRpdXM6ICIg
KyB0aGlzLmF4aXNZQ29udHJvbFJhZGl1cyk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCh0aGlz
LmF4aXNQaW5jaENvbnRyb2xSb3RhdGlvbiArCisgICAgICAgICAgICB0aGlzLmF4aXNQaW5jaENv
bnRyb2xIZWlnaHQgKworICAgICAgICAgICAgdGhpcy5heGlzUGluY2hDb250cm9sUmFkaXVzKSA8
PSAxLCB3YXJuICsKKyAgICAgICAgICAgICJheGlzUGluY2hDb250cm9sUm90YXRpb246ICIgKyB0
aGlzLmF4aXNQaW5jaENvbnRyb2xSb3RhdGlvbiArCisgICAgICAgICAgICAiLCBheGlzUGluY2hD
b250cm9sSGVpZ2h0OiAiICsgdGhpcy5heGlzUGluY2hDb250cm9sSGVpZ2h0ICsKKyAgICAgICAg
ICAgICIsIGF4aXNQaW5jaENvbnRyb2xSYWRpdXM6ICIgKyB0aGlzLmF4aXNQaW5jaENvbnRyb2xS
YWRpdXMpOworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFQ
b2ludGVyc0lucHV0LnByb3RvdHlwZSwgImFuZ3VsYXJTZW5zaWJpbGl0eVgiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90
b3R5cGUsICJhbmd1bGFyU2Vuc2liaWxpdHlZIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLCAicGluY2hQcmVj
aXNpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJh
UG9pbnRlcnNJbnB1dC5wcm90b3R5cGUsICJwaW5jaERlbHRhUGVyY2VudGFnZSIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0LnBy
b3RvdHlwZSwgImF4aXNYQ29udHJvbFJhZGl1cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZSwgImF4aXNYQ29u
dHJvbEhlaWdodCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dD
YW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZSwgImF4aXNYQ29udHJvbFJvdGF0aW9uIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5w
dXQucHJvdG90eXBlLCAiYXhpc1lDb250cm9sUmFkaXVzIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLCAiYXhp
c1lDb250cm9sSGVpZ2h0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZv
bGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLCAiYXhpc1lDb250cm9sUm90YXRpb24i
LCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVj
b3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJhUG9pbnRl
cnNJbnB1dC5wcm90b3R5cGUsICJheGlzUGluY2hDb250cm9sUmFkaXVzIiwgdm9pZCAwKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90
eXBlLCAiYXhpc1BpbmNoQ29udHJvbEhlaWdodCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZSwgImF4aXNQaW5j
aENvbnRyb2xSb3RhdGlvbiIsIHZvaWQgMCk7CisgICAgcmV0dXJuIEZvbGxvd0NhbWVyYVBvaW50
ZXJzSW5wdXQ7Cit9KF9DYW1lcmFzX0lucHV0c19CYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dCJdKSk7CisK
K19DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQ2FtZXJhSW5wdXRUeXBlcyJdWyJGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0Il0gPSBGb2xs
b3dDYW1lcmFQb2ludGVyc0lucHV0OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFz
L0lucHV0cy9mcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBGcmVlQ2FtZXJhRGV2aWNl
T3JpZW50YXRpb25JbnB1dCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJG
cmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRnJl
ZUNhbWVyYURldmljZU9yaWVudGF0aW9uSW5wdXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhSW5wdXRz
TWFuYWdlciAqLyAiLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2ZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9D
YW1lcmFzL2ZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvZnJlZUNhbWVyYUlu
cHV0c01hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZh
YmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisKKwor
CisKKworLyoqCisgKiBBZGQgb3JpZW50YXRpb24gaW5wdXQgc3VwcG9ydCB0byB0aGUgaW5wdXQg
bWFuYWdlci4KKyAqIEByZXR1cm5zIHRoZSBjdXJyZW50IGlucHV0IG1hbmFnZXIKKyAqLworX0Nh
bWVyYXNfZnJlZUNhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siRnJlZUNhbWVyYUlucHV0c01hbmFnZXIiXS5wcm90b3R5cGUuYWRkRGV2aWNlT3JpZW50YXRp
b24gPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCF0aGlzLl9kZXZpY2VPcmllbnRhdGlvbklucHV0
KSB7CisgICAgICAgIHRoaXMuX2RldmljZU9yaWVudGF0aW9uSW5wdXQgPSBuZXcgRnJlZUNhbWVy
YURldmljZU9yaWVudGF0aW9uSW5wdXQoKTsKKyAgICAgICAgdGhpcy5hZGQodGhpcy5fZGV2aWNl
T3JpZW50YXRpb25JbnB1dCk7CisgICAgfQorICAgIHJldHVybiB0aGlzOworfTsKKy8qKgorICog
VGFrZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBkZXZpY2UgYXMg
cmVwb3J0ZWQgYnkgdGhlIGRldmljZW9yaWVudGF0aW9uIGV2ZW50IHRvIG9yaWVudCB0aGUgY2Ft
ZXJhLgorICogU2NyZWVuIHJvdGF0aW9uIGlzIHRha2VuIGludG8gYWNjb3VudC4KKyAqIEBzZWUg
aHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRz
CisgKi8KK3ZhciBGcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dCA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgaW5w
dXQKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXpp
bmdfY2FtZXJhX2lucHV0cworICAgICAqLworICAgIGZ1bmN0aW9uIEZyZWVDYW1lcmFEZXZpY2VP
cmllbnRhdGlvbklucHV0KCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0
aGlzLl9zY3JlZW5PcmllbnRhdGlvbkFuZ2xlID0gMDsKKyAgICAgICAgdGhpcy5fc2NyZWVuUXVh
dGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIHRoaXMuX2FscGhhID0gMDsKKyAgICAgICAg
dGhpcy5fYmV0YSA9IDA7CisgICAgICAgIHRoaXMuX2dhbW1hID0gMDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX29uRGV2aWNlT3Jp
ZW50YXRpb25DaGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0aGlzLl9vcmll
bnRhdGlvbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5fc2NyZWVu
T3JpZW50YXRpb25BbmdsZSA9ICh3aW5kb3cub3JpZW50YXRpb24gIT09IHVuZGVmaW5lZCA/ICt3
aW5kb3cub3JpZW50YXRpb24gOiAod2luZG93LnNjcmVlbi5vcmllbnRhdGlvbiAmJiAod2luZG93
LnNjcmVlbi5vcmllbnRhdGlvbilbJ2FuZ2xlJ10gPyAod2luZG93LnNjcmVlbi5vcmllbnRhdGlv
bikuYW5nbGUgOiAwKSk7CisgICAgICAgICAgICBfdGhpcy5fc2NyZWVuT3JpZW50YXRpb25Bbmds
ZSA9IC1fTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUb29scyJdLlRv
UmFkaWFucyhfdGhpcy5fc2NyZWVuT3JpZW50YXRpb25BbmdsZSAvIDIpOworICAgICAgICAgICAg
X3RoaXMuX3NjcmVlblF1YXRlcm5pb24uY29weUZyb21GbG9hdHMoMCwgTWF0aC5zaW4oX3RoaXMu
X3NjcmVlbk9yaWVudGF0aW9uQW5nbGUpLCAwLCBNYXRoLmNvcyhfdGhpcy5fc2NyZWVuT3JpZW50
YXRpb25BbmdsZSkpOworICAgICAgICB9OworICAgICAgICB0aGlzLl9kZXZpY2VPcmllbnRhdGlv
biA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgIF90aGlzLl9hbHBoYSA9IGV2dC5hbHBo
YSAhPT0gbnVsbCA/IGV2dC5hbHBoYSA6IDA7CisgICAgICAgICAgICBfdGhpcy5fYmV0YSA9IGV2
dC5iZXRhICE9PSBudWxsID8gZXZ0LmJldGEgOiAwOworICAgICAgICAgICAgX3RoaXMuX2dhbW1h
ID0gZXZ0LmdhbW1hICE9PSBudWxsID8gZXZ0LmdhbW1hIDogMDsKKyAgICAgICAgICAgIGlmIChl
dnQuYWxwaGEgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fb25EZXZpY2VPcmll
bnRhdGlvbkNoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycygpOworICAgICAgICAgICAg
fQorICAgICAgICB9OworICAgICAgICB0aGlzLl9jb25zdGFudFRyYW5mb3JtID0gbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl0o
LU1hdGguc3FydCgwLjUpLCAwLCAwLCBNYXRoLnNxcnQoMC41KSk7CisgICAgICAgIHRoaXMuX29y
aWVudGF0aW9uQ2hhbmdlZCgpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBDYW4gYmUgdXNlZCB0
byBkZXRlY3QgaWYgYSBkZXZpY2Ugb3JpZW50YXRpb24gc2Vuc29yIGlzIGF2YWlsaWJsZSBvbiBh
IGRldmljZQorICAgICAqIEBwYXJhbSB0aW1lb3V0IGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vj
b25kcyB0byB3YWl0IGZvciBhIHJlc3BvbnNlIGZyb20gdGhlIHNlbnNvciAoZGVmYXVsdDogaW5m
aW5pdGUpCisgICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uIG9y
aWVudGF0aW9uIGNoYW5nZQorICAgICAqLworICAgIEZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlv
bklucHV0LldhaXRGb3JPcmllbnRhdGlvbkNoYW5nZUFzeW5jID0gZnVuY3Rpb24gKHRpbWVvdXQp
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeworICAg
ICAgICAgICAgdmFyIGdvdFZhbHVlID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgZXZlbnRIYW5k
bGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExp
c3RlbmVyKCJkZXZpY2VvcmllbnRhdGlvbiIsIGV2ZW50SGFuZGxlcik7CisgICAgICAgICAgICAg
ICAgZ290VmFsdWUgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlcygpOworICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIC8vIElmIHRpbWVvdXQgaXMgcHVwdWxhdGVkIHJlamVjdCB0aGUgcHJv
bWlzZQorICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHsKKyAgICAgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFnb3RWYWx1ZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRldmlj
ZW9yaWVudGF0aW9uIiwgZXZlbnRIYW5kbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
aigiV2FpdEZvck9yaWVudGF0aW9uQ2hhbmdlQXN5bmMgdGltZWQgb3V0Iik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LCB0aW1lb3V0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJkZXZpY2VvcmllbnRhdGlvbiIs
IGV2ZW50SGFuZGxlcik7CisgICAgICAgIH0pOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0LnByb3RvdHlwZSwgImNhbWVy
YSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0aGUgY2FtZXJhIGNvbnRyb2xs
ZWQgYnkgdGhlIGlucHV0LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgICAgICB0aGlzLl9jYW1lcmEgPSBjYW1lcmE7CisgICAgICAgICAgICBpZiAodGhpcy5f
Y2FtZXJhICE9IG51bGwgJiYgIXRoaXMuX2NhbWVyYS5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9jYW1lcmEucm90YXRpb25RdWF0ZXJuaW9uID0gbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl0o
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9jYW1lcmEpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9jYW1lcmEub25EaXNwb3NlT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fb25EZXZpY2VPcmllbnRhdGlvbkNoYW5n
ZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEF0dGFjaCB0aGUgaW5wdXQgY29u
dHJvbHMgdG8gYSBzcGVjaWZpYyBkb20gZWxlbWVudCB0byBnZXQgdGhlIGlucHV0IGZyb20uCisg
ICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0aGUgY29udHJvbHMgc2hv
dWxkIGJlIGxpc3RlbmVkIGZyb20KKyAgICAgKiBAcGFyYW0gbm9QcmV2ZW50RGVmYXVsdCBEZWZp
bmVzIHdoZXRoZXIgZXZlbnQgY2F1Z2h0IGJ5IHRoZSBjb250cm9scyBzaG91bGQgY2FsbCBwcmV2
ZW50ZGVmYXVsdCgpIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dl
Yi9BUEkvRXZlbnQvcHJldmVudERlZmF1bHQpCisgICAgICovCisgICAgRnJlZUNhbWVyYURldmlj
ZU9yaWVudGF0aW9uSW5wdXQucHJvdG90eXBlLmF0dGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxl
bWVudCwgbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICB2YXIgaG9zdFdpbmRvdyA9IHRoaXMu
Y2FtZXJhLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuZ2V0SG9zdFdpbmRvdygpOworICAgICAgICBo
b3N0V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIiwgdGhpcy5fb3Jp
ZW50YXRpb25DaGFuZ2VkKTsKKyAgICAgICAgaG9zdFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJk
ZXZpY2VvcmllbnRhdGlvbiIsIHRoaXMuX2RldmljZU9yaWVudGF0aW9uKTsKKyAgICAgICAgLy9J
biBjZXJ0YWluIGNhc2VzLCB0aGUgYXR0YWNoIGNvbnRyb2wgaXMgY2FsbGVkIEFGVEVSIG9yaWVu
dGF0aW9uIHdhcyBjaGFuZ2VkLAorICAgICAgICAvL1NvIHRoaXMgaXMgbmVlZGVkLgorICAgICAg
ICB0aGlzLl9vcmllbnRhdGlvbkNoYW5nZWQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERl
dGFjaCB0aGUgY3VycmVudCBjb250cm9scyBmcm9tIHRoZSBzcGVjaWZpZWQgZG9tIGVsZW1lbnQu
CisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0byBzdG9wIGxpc3Rl
bmluZyB0aGUgaW5wdXRzIGZyb20KKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhRGV2aWNlT3JpZW50
YXRpb25JbnB1dC5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7
CisgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIs
IHRoaXMuX29yaWVudGF0aW9uQ2hhbmdlZCk7CisgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExp
c3RlbmVyKCJkZXZpY2VvcmllbnRhdGlvbiIsIHRoaXMuX2RldmljZU9yaWVudGF0aW9uKTsKKyAg
ICAgICAgdGhpcy5fYWxwaGEgPSAwOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIHRo
ZSBjdXJyZW50IGNhbWVyYSBzdGF0ZSBkZXBlbmRpbmcgb24gdGhlIGlucHV0cyB0aGF0IGhhdmUg
YmVlbiB1c2VkIHRoaXMgZnJhbWUuCisgICAgICogVGhpcyBpcyBhIGR5bmFtaWNhbGx5IGNyZWF0
ZWQgbGFtYmRhIHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9mIGxvb3BpbmcgZm9y
IGlucHV0cyBpbiB0aGUgcmVuZGVyIGxvb3AuCisgICAgICovCisgICAgRnJlZUNhbWVyYURldmlj
ZU9yaWVudGF0aW9uSW5wdXQucHJvdG90eXBlLmNoZWNrSW5wdXRzID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAvL2lmIG5vIGRldmljZSBvcmllbnRhdGlvbiBwcm92aWRlZCwgZG9uJ3QgdXBkYXRl
IHRoZSByb3RhdGlvbi4KKyAgICAgICAgLy9Pbmx5IHRlc3RpbmcgYWdhaW5zdCBhbHBoYSB1bmRl
ciB0aGUgYXNzdW1wdGlvbiB0aGF0bm9yaWVudGF0aW9uIHdpbGwgbmV2ZXIgYmUgc28gZXhhY3Qg
d2hlbiBzZXQuCisgICAgICAgIGlmICghdGhpcy5fYWxwaGEpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYoX01p
c2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5Ub1JhZGlhbnMo
dGhpcy5fYWxwaGEpLCBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJU
b29scyJdLlRvUmFkaWFucyh0aGlzLl9iZXRhKSwgLV9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlRvb2xzIl0uVG9SYWRpYW5zKHRoaXMuX2dhbW1hKSwgdGhpcy5jYW1l
cmEucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgdGhpcy5fY2FtZXJhLnJvdGF0aW9uUXVh
dGVybmlvbi5tdWx0aXBseUluUGxhY2UodGhpcy5fc2NyZWVuUXVhdGVybmlvbik7CisgICAgICAg
IHRoaXMuX2NhbWVyYS5yb3RhdGlvblF1YXRlcm5pb24ubXVsdGlwbHlJblBsYWNlKHRoaXMuX2Nv
bnN0YW50VHJhbmZvcm0pOworICAgICAgICAvL01pcnJvciBvbiBYWSBQbGFuZQorICAgICAgICB0
aGlzLl9jYW1lcmEucm90YXRpb25RdWF0ZXJuaW9uLnogKj0gLTE7CisgICAgICAgIHRoaXMuX2Nh
bWVyYS5yb3RhdGlvblF1YXRlcm5pb24udyAqPSAtMTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGN1cnJlbnQgaW50cHV0LgorICAgICAqIEByZXR1
cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgRnJlZUNhbWVyYURldmljZU9yaWVudGF0
aW9uSW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuICJGcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dCI7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1
dCBjbGFzcy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQorICAgICAq
LworICAgIEZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0LnByb3RvdHlwZS5nZXRTaW1w
bGVOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gImRldmljZU9yaWVudGF0aW9u
IjsKKyAgICB9OworICAgIHJldHVybiBGcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dDsK
K30oKSk7CisKK19DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siQ2FtZXJhSW5wdXRUeXBlcyJdWyJGcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRp
b25JbnB1dCJdID0gRnJlZUNhbWVyYURldmljZU9yaWVudGF0aW9uSW5wdXQ7CisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFHYW1lcGFkSW5wdXQudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFHYW1lcGFkSW5wdXQudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogRnJlZUNhbWVyYUdhbWVwYWRJbnB1dCAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVlQ2FtZXJhR2FtZXBhZElucHV0IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBGcmVlQ2FtZXJhR2FtZXBhZElucHV0OyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5l
czYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9N
aXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1l
cmFJbnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0
aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfR2FtZXBhZHNfZ2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vR2FtZXBhZHMvZ2FtZXBhZCAqLyAiLi9HYW1l
cGFkcy9nYW1lcGFkLnRzIik7CisKKworCisKKworLyoqCisgKiBNYW5hZ2UgdGhlIGdhbWVwYWQg
aW5wdXRzIHRvIGNvbnRyb2wgYSBmcmVlIGNhbWVyYS4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRzCisgKi8KK3ZhciBGcmVl
Q2FtZXJhR2FtZXBhZElucHV0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1
bmN0aW9uIEZyZWVDYW1lcmFHYW1lcGFkSW5wdXQoKSB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIHRoZSBnYW1lcGFkIHJvdGF0aW9uIHNlbnNpYmxpdHkuCisgICAgICAgICAqIFRo
aXMgaXMgdGhlIHRocmVzaG9sZCBmcm9tIHdoZW4gcm90YXRpb24gc3RhcnRzIHRvIGJlIGFjY291
bnRlZCBmb3IgdG8gcHJldmVudCBqaXR0ZXJpbmcuCisgICAgICAgICAqLworICAgICAgICB0aGlz
LmdhbWVwYWRBbmd1bGFyU2Vuc2liaWxpdHkgPSAyMDA7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIHRoZSBnYW1lcGFkIG1vdmUgc2Vuc2libGl0eS4KKyAgICAgICAgICogVGhpcyBp
cyB0aGUgdGhyZXNob2xkIGZyb20gd2hlbiBtb3Zpbmcgc3RhcnRzIHRvIGJlIGFjY291bnRlZCBm
b3IgZm9yIHRvIHByZXZlbnQgaml0dGVyaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5n
YW1lcGFkTW92ZVNlbnNpYmlsaXR5ID0gNDA7CisgICAgICAgIHRoaXMuX2NhbWVyYVRyYW5zZm9y
bSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRy
aXgiXS5JZGVudGl0eSgpOworICAgICAgICB0aGlzLl9kZWx0YVRyYW5zZm9ybSA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygp
OworICAgICAgICB0aGlzLl92ZWN0b3IzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX3ZlY3Rv
cjIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMiJdLlplcm8oKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQXR0YWNoIHRoZSBpbnB1dCBj
b250cm9scyB0byBhIHNwZWNpZmljIGRvbSBlbGVtZW50IHRvIGdldCB0aGUgaW5wdXQgZnJvbS4K
KyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVtZW50IHRoZSBjb250cm9scyBz
aG91bGQgYmUgbGlzdGVuZWQgZnJvbQorICAgICAqIEBwYXJhbSBub1ByZXZlbnREZWZhdWx0IERl
ZmluZXMgd2hldGhlciBldmVudCBjYXVnaHQgYnkgdGhlIGNvbnRyb2xzIHNob3VsZCBjYWxsIHBy
ZXZlbnRkZWZhdWx0KCkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3Mv
V2ViL0FQSS9FdmVudC9wcmV2ZW50RGVmYXVsdCkKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhR2Ft
ZXBhZElucHV0LnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5v
UHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFy
IG1hbmFnZXIgPSB0aGlzLmNhbWVyYS5nZXRTY2VuZSgpLmdhbWVwYWRNYW5hZ2VyOworICAgICAg
ICB0aGlzLl9vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZlciA9IG1hbmFnZXIub25HYW1lcGFkQ29u
bmVjdGVkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGdhbWVwYWQpIHsKKyAgICAgICAgICAgIGlm
IChnYW1lcGFkLnR5cGUgIT09IF9HYW1lcGFkc19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIkdhbWVwYWQiXS5QT1NFX0VOQUJMRUQpIHsKKyAgICAgICAgICAgICAgICAvLyBw
cmlvcml0aXplIFhCT1ggZ2FtZXBhZHMuCisgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5nYW1l
cGFkIHx8IGdhbWVwYWQudHlwZSA9PT0gX0dhbWVwYWRzX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siR2FtZXBhZCJdLlhCT1gpIHsKKyAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuZ2FtZXBhZCA9IGdhbWVwYWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fb25HYW1lcGFkRGlzY29ubmVjdGVkT2JzZXJ2ZXIg
PSBtYW5hZ2VyLm9uR2FtZXBhZERpc2Nvbm5lY3RlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChn
YW1lcGFkKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuZ2FtZXBhZCA9PT0gZ2FtZXBhZCkgewor
ICAgICAgICAgICAgICAgIF90aGlzLmdhbWVwYWQgPSBudWxsOworICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKyAgICAgICAgdGhpcy5nYW1lcGFkID0gbWFuYWdlci5nZXRHYW1lcGFkQnlUeXBl
KF9HYW1lcGFkc19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkdhbWVwYWQi
XS5YQk9YKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGFjaCB0aGUgY3VycmVudCBjb250
cm9scyBmcm9tIHRoZSBzcGVjaWZpZWQgZG9tIGVsZW1lbnQuCisgICAgICogQHBhcmFtIGVsZW1l
bnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0byBzdG9wIGxpc3RlbmluZyB0aGUgaW5wdXRzIGZyb20K
KyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhR2FtZXBhZElucHV0LnByb3RvdHlwZS5kZXRhY2hDb250
cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgdGhpcy5jYW1lcmEuZ2V0U2NlbmUo
KS5nYW1lcGFkTWFuYWdlci5vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZhYmxlLnJlbW92ZSh0aGlz
Ll9vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZlcik7CisgICAgICAgIHRoaXMuY2FtZXJhLmdldFNj
ZW5lKCkuZ2FtZXBhZE1hbmFnZXIub25HYW1lcGFkRGlzY29ubmVjdGVkT2JzZXJ2YWJsZS5yZW1v
dmUodGhpcy5fb25HYW1lcGFkRGlzY29ubmVjdGVkT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLmdh
bWVwYWQgPSBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBjdXJyZW50
IGNhbWVyYSBzdGF0ZSBkZXBlbmRpbmcgb24gdGhlIGlucHV0cyB0aGF0IGhhdmUgYmVlbiB1c2Vk
IHRoaXMgZnJhbWUuCisgICAgICogVGhpcyBpcyBhIGR5bmFtaWNhbGx5IGNyZWF0ZWQgbGFtYmRh
IHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9mIGxvb3BpbmcgZm9yIGlucHV0cyBp
biB0aGUgcmVuZGVyIGxvb3AuCisgICAgICovCisgICAgRnJlZUNhbWVyYUdhbWVwYWRJbnB1dC5w
cm90b3R5cGUuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLmdh
bWVwYWQgJiYgdGhpcy5nYW1lcGFkLmxlZnRTdGljaykgeworICAgICAgICAgICAgdmFyIGNhbWVy
YSA9IHRoaXMuY2FtZXJhOworICAgICAgICAgICAgdmFyIExTVmFsdWVzID0gdGhpcy5nYW1lcGFk
LmxlZnRTdGljazsKKyAgICAgICAgICAgIHZhciBub3JtYWxpemVkTFggPSBMU1ZhbHVlcy54IC8g
dGhpcy5nYW1lcGFkTW92ZVNlbnNpYmlsaXR5OworICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWRM
WSA9IExTVmFsdWVzLnkgLyB0aGlzLmdhbWVwYWRNb3ZlU2Vuc2liaWxpdHk7CisgICAgICAgICAg
ICBMU1ZhbHVlcy54ID0gTWF0aC5hYnMobm9ybWFsaXplZExYKSA+IDAuMDA1ID8gMCArIG5vcm1h
bGl6ZWRMWCA6IDA7CisgICAgICAgICAgICBMU1ZhbHVlcy55ID0gTWF0aC5hYnMobm9ybWFsaXpl
ZExZKSA+IDAuMDA1ID8gMCArIG5vcm1hbGl6ZWRMWSA6IDA7CisgICAgICAgICAgICB2YXIgUlNW
YWx1ZXMgPSB0aGlzLmdhbWVwYWQucmlnaHRTdGljazsKKyAgICAgICAgICAgIGlmIChSU1ZhbHVl
cykgeworICAgICAgICAgICAgICAgIHZhciBub3JtYWxpemVkUlggPSBSU1ZhbHVlcy54IC8gdGhp
cy5nYW1lcGFkQW5ndWxhclNlbnNpYmlsaXR5OworICAgICAgICAgICAgICAgIHZhciBub3JtYWxp
emVkUlkgPSBSU1ZhbHVlcy55IC8gdGhpcy5nYW1lcGFkQW5ndWxhclNlbnNpYmlsaXR5OworICAg
ICAgICAgICAgICAgIFJTVmFsdWVzLnggPSBNYXRoLmFicyhub3JtYWxpemVkUlgpID4gMC4wMDEg
PyAwICsgbm9ybWFsaXplZFJYIDogMDsKKyAgICAgICAgICAgICAgICBSU1ZhbHVlcy55ID0gTWF0
aC5hYnMobm9ybWFsaXplZFJZKSA+IDAuMDAxID8gMCArIG5vcm1hbGl6ZWRSWSA6IDA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBSU1ZhbHVlcyA9
IHsgeDogMCwgeTogMCB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjYW1lcmEu
cm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLlJvdGF0aW9uWWF3UGl0Y2hS
b2xsVG9SZWYoY2FtZXJhLnJvdGF0aW9uLnksIGNhbWVyYS5yb3RhdGlvbi54LCAwLCB0aGlzLl9j
YW1lcmFUcmFuc2Zvcm0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgY2FtZXJhLnJvdGF0aW9uUXVhdGVybmlvbi50b1JvdGF0aW9uTWF0cml4KHRo
aXMuX2NhbWVyYVRyYW5zZm9ybSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc3Bl
ZWQgPSBjYW1lcmEuX2NvbXB1dGVMb2NhbENhbWVyYVNwZWVkKCkgKiA1MC4wOworICAgICAgICAg
ICAgdGhpcy5fdmVjdG9yMy5jb3B5RnJvbUZsb2F0cyhMU1ZhbHVlcy54ICogc3BlZWQsIDAsIC1M
U1ZhbHVlcy55ICogc3BlZWQpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1Rv
UmVmKHRoaXMuX3ZlY3RvcjMsIHRoaXMuX2NhbWVyYVRyYW5zZm9ybSwgdGhpcy5fZGVsdGFUcmFu
c2Zvcm0pOworICAgICAgICAgICAgY2FtZXJhLmNhbWVyYURpcmVjdGlvbi5hZGRJblBsYWNlKHRo
aXMuX2RlbHRhVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIHRoaXMuX3ZlY3RvcjIuY29weUZyb21G
bG9hdHMoUlNWYWx1ZXMueSwgUlNWYWx1ZXMueCk7CisgICAgICAgICAgICBjYW1lcmEuY2FtZXJh
Um90YXRpb24uYWRkSW5QbGFjZSh0aGlzLl92ZWN0b3IyKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY3VycmVudCBpbnRwdXQu
CisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJh
R2FtZXBhZElucHV0LnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiAiRnJlZUNhbWVyYUdhbWVwYWRJbnB1dCI7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBjbGFz
cy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQorICAgICAqLworICAg
IEZyZWVDYW1lcmFHYW1lcGFkSW5wdXQucHJvdG90eXBlLmdldFNpbXBsZU5hbWUgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiAiZ2FtZXBhZCI7CisgICAgfTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIEZyZWVDYW1lcmFHYW1lcGFkSW5wdXQucHJvdG90eXBlLCAiZ2FtZXBhZEFu
Z3VsYXJTZW5zaWJpbGl0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBG
cmVlQ2FtZXJhR2FtZXBhZElucHV0LnByb3RvdHlwZSwgImdhbWVwYWRNb3ZlU2Vuc2liaWxpdHki
LCB2b2lkIDApOworICAgIHJldHVybiBGcmVlQ2FtZXJhR2FtZXBhZElucHV0OworfSgpKTsKKwor
X0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJDYW1lcmFJbnB1dFR5cGVzIl1bIkZyZWVDYW1lcmFHYW1lcGFkSW5wdXQiXSA9IEZyZWVDYW1l
cmFHYW1lcGFkSW5wdXQ7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvSW5wdXRz
L2ZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFz
L0lucHV0cy9mcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQ7IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3Rz
bGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFz
L2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNNYW5hZ2VyLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0V2ZW50c19rZXlib2FyZEV2ZW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
RXZlbnRzL2tleWJvYXJkRXZlbnRzICovICIuL0V2ZW50cy9rZXlib2FyZEV2ZW50cy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0
aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKworCisKKworCisvKioKKyAq
IE1hbmFnZSB0aGUga2V5Ym9hcmQgaW5wdXRzIHRvIGNvbnRyb2wgdGhlIG1vdmVtZW50IG9mIGEg
ZnJlZSBjYW1lcmEuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3Vz
dG9taXppbmdfY2FtZXJhX2lucHV0cworICovCit2YXIgRnJlZUNhbWVyYUtleWJvYXJkTW92ZUlu
cHV0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEZyZWVDYW1l
cmFLZXlib2FyZE1vdmVJbnB1dCgpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Ig
U2V0IHRoZSBsaXN0IG9mIGtleWJvYXJkIGtleXMgdXNlZCB0byBjb250cm9sIHRoZSBmb3J3YXJk
IG1vdmUgb2YgdGhlIGNhbWVyYS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5c1VwID0g
WzM4XTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3IgU2V0IHRoZSBsaXN0IG9mIGtl
eWJvYXJkIGtleXMgdXNlZCB0byBjb250cm9sIHRoZSBiYWNrd2FyZCBtb3ZlIG9mIHRoZSBjYW1l
cmEuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmtleXNEb3duID0gWzQwXTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgb3IgU2V0IHRoZSBsaXN0IG9mIGtleWJvYXJkIGtleXMgdXNl
ZCB0byBjb250cm9sIHRoZSBsZWZ0IHN0cmFmZSBtb3ZlIG9mIHRoZSBjYW1lcmEuCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmtleXNMZWZ0ID0gWzM3XTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3IgU2V0IHRoZSBsaXN0IG9mIGtleWJvYXJkIGtleXMgdXNlZCB0byBjb250cm9s
IHRoZSByaWdodCBzdHJhZmUgbW92ZSBvZiB0aGUgY2FtZXJhLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5rZXlzUmlnaHQgPSBbMzldOworICAgICAgICB0aGlzLl9rZXlzID0gbmV3IEFycmF5
KCk7CisgICAgfQorICAgIC8qKgorICAgICAqIEF0dGFjaCB0aGUgaW5wdXQgY29udHJvbHMgdG8g
YSBzcGVjaWZpYyBkb20gZWxlbWVudCB0byBnZXQgdGhlIGlucHV0IGZyb20uCisgICAgICogQHBh
cmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0aGUgY29udHJvbHMgc2hvdWxkIGJlIGxp
c3RlbmVkIGZyb20KKyAgICAgKiBAcGFyYW0gbm9QcmV2ZW50RGVmYXVsdCBEZWZpbmVzIHdoZXRo
ZXIgZXZlbnQgY2F1Z2h0IGJ5IHRoZSBjb250cm9scyBzaG91bGQgY2FsbCBwcmV2ZW50ZGVmYXVs
dCgpIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZl
bnQvcHJldmVudERlZmF1bHQpCisgICAgICovCisgICAgRnJlZUNhbWVyYUtleWJvYXJkTW92ZUlu
cHV0LnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5vUHJldmVu
dERlZmF1bHQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMu
X29uQ2FudmFzQmx1ck9ic2VydmVyKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fc2NlbmUgPSB0aGlzLmNhbWVyYS5nZXRTY2VuZSgpOworICAgICAgICB0
aGlzLl9lbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgdGhpcy5fb25D
YW52YXNCbHVyT2JzZXJ2ZXIgPSB0aGlzLl9lbmdpbmUub25DYW52YXNCbHVyT2JzZXJ2YWJsZS5h
ZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMuX2tleXMgPSBbXTsKKyAgICAgICAg
fSk7CisgICAgICAgIHRoaXMuX29uS2V5Ym9hcmRPYnNlcnZlciA9IHRoaXMuX3NjZW5lLm9uS2V5
Ym9hcmRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoaW5mbykgeworICAgICAgICAgICAgdmFyIGV2
dCA9IGluZm8uZXZlbnQ7CisgICAgICAgICAgICBpZiAoIWV2dC5tZXRhS2V5KSB7CisgICAgICAg
ICAgICAgICAgaWYgKGluZm8udHlwZSA9PT0gX0V2ZW50c19rZXlib2FyZEV2ZW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJLZXlib2FyZEV2ZW50VHlwZXMiXS5LRVlET1dOKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5rZXlzVXAuaW5kZXhPZihldnQua2V5Q29kZSkg
IT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5rZXlzRG93bi5pbmRleE9m
KGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmtl
eXNMZWZ0LmluZGV4T2YoZXZ0LmtleUNvZGUpICE9PSAtMSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMua2V5c1JpZ2h0LmluZGV4T2YoZXZ0LmtleUNvZGUpICE9PSAtMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gX3RoaXMuX2tleXMuaW5kZXhPZihldnQu
a2V5Q29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2tleXMucHVzaChldnQua2V5Q29kZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnQucHJl
dmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKF90aGlzLmtleXNVcC5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0g
LTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNEb3duLmluZGV4T2YoZXZ0
LmtleUNvZGUpICE9PSAtMSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMua2V5c0xl
ZnQuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5rZXlzUmlnaHQuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBfdGhpcy5fa2V5cy5pbmRleE9mKGV2dC5rZXlD
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2tleXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9QcmV2
ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVm
YXVsdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIERldGFjaCB0aGUgY3VycmVudCBjb250cm9scyBmcm9tIHRoZSBzcGVj
aWZpZWQgZG9tIGVsZW1lbnQuCisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxl
bWVudCB0byBzdG9wIGxpc3RlbmluZyB0aGUgaW5wdXRzIGZyb20KKyAgICAgKi8KKyAgICBGcmVl
Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLmRldGFjaENvbnRyb2wgPSBmdW5jdGlv
biAoZWxlbWVudCkgeworICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9vbktleWJvYXJkT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zY2Vu
ZS5vbktleWJvYXJkT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25LZXlib2FyZE9ic2VydmVyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZl
cikgeworICAgICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5vbkNhbnZhc0JsdXJPYnNlcnZhYmxl
LnJlbW92ZSh0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9vbktleWJvYXJkT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAgICAgdGhp
cy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMu
X2tleXMgPSBbXTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgY3VycmVudCBj
YW1lcmEgc3RhdGUgZGVwZW5kaW5nIG9uIHRoZSBpbnB1dHMgdGhhdCBoYXZlIGJlZW4gdXNlZCB0
aGlzIGZyYW1lLgorICAgICAqIFRoaXMgaXMgYSBkeW5hbWljYWxseSBjcmVhdGVkIGxhbWJkYSB0
byBhdm9pZCB0aGUgcGVyZm9ybWFuY2UgcGVuYWx0eSBvZiBsb29waW5nIGZvciBpbnB1dHMgaW4g
dGhlIHJlbmRlciBsb29wLgorICAgICAqLworICAgIEZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1
dC5wcm90b3R5cGUuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
Ll9vbktleWJvYXJkT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNh
bWVyYTsKKyAgICAgICAgICAgIC8vIEtleWJvYXJkCisgICAgICAgICAgICBmb3IgKHZhciBpbmRl
eCA9IDA7IGluZGV4IDwgdGhpcy5fa2V5cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAg
ICAgICB2YXIga2V5Q29kZSA9IHRoaXMuX2tleXNbaW5kZXhdOworICAgICAgICAgICAgICAgIHZh
ciBzcGVlZCA9IGNhbWVyYS5fY29tcHV0ZUxvY2FsQ2FtZXJhU3BlZWQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAodGhpcy5rZXlzTGVmdC5pbmRleE9mKGtleUNvZGUpICE9PSAtMSkgeworICAgICAg
ICAgICAgICAgICAgICBjYW1lcmEuX2xvY2FsRGlyZWN0aW9uLmNvcHlGcm9tRmxvYXRzKC1zcGVl
ZCwgMCwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRo
aXMua2V5c1VwLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAg
IGNhbWVyYS5fbG9jYWxEaXJlY3Rpb24uY29weUZyb21GbG9hdHMoMCwgMCwgc3BlZWQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmtleXNSaWdodC5p
bmRleE9mKGtleUNvZGUpICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBjYW1lcmEuX2xv
Y2FsRGlyZWN0aW9uLmNvcHlGcm9tRmxvYXRzKHNwZWVkLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5rZXlzRG93bi5pbmRleE9mKGtleUNv
ZGUpICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBjYW1lcmEuX2xvY2FsRGlyZWN0aW9u
LmNvcHlGcm9tRmxvYXRzKDAsIDAsIC1zcGVlZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChjYW1lcmEuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgewor
ICAgICAgICAgICAgICAgICAgICBjYW1lcmEuX2xvY2FsRGlyZWN0aW9uLnogKj0gLTE7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhbWVyYS5nZXRWaWV3TWF0cml4KCkuaW52
ZXJ0VG9SZWYoY2FtZXJhLl9jYW1lcmFUcmFuc2Zvcm1NYXRyaXgpOworICAgICAgICAgICAgICAg
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZWN0b3Iz
Il0uVHJhbnNmb3JtTm9ybWFsVG9SZWYoY2FtZXJhLl9sb2NhbERpcmVjdGlvbiwgY2FtZXJhLl9j
YW1lcmFUcmFuc2Zvcm1NYXRyaXgsIGNhbWVyYS5fdHJhbnNmb3JtZWREaXJlY3Rpb24pOworICAg
ICAgICAgICAgICAgIGNhbWVyYS5jYW1lcmFEaXJlY3Rpb24uYWRkSW5QbGFjZShjYW1lcmEuX3Ry
YW5zZm9ybWVkRGlyZWN0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY3VycmVudCBpbnRwdXQu
CisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJh
S2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuICJGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiOworICAgIH07Cisg
ICAgLyoqIEBoaWRkZW4gKi8KKyAgICBGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90
eXBlLl9vbkxvc3RGb2N1cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fa2V5cyA9IFtd
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBmcmllbmRseSBuYW1lIGFzc29jaWF0
ZWQgd2l0aCB0aGUgaW5wdXQgY2xhc3MuCisgICAgICogQHJldHVybnMgdGhlIGlucHV0IGZyaWVu
ZGx5IG5hbWUKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90
eXBlLmdldFNpbXBsZU5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAia2V5Ym9h
cmQiOworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGcmVlQ2FtZXJhS2V5Ym9h
cmRNb3ZlSW5wdXQucHJvdG90eXBlLCAia2V5c1VwIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIEZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJrZXlz
RG93biIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGcmVlQ2FtZXJhS2V5
Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLCAia2V5c0xlZnQiLCB2b2lkIDApOworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZSJdKSgpCisgICAgXSwgRnJlZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZSwg
ImtleXNSaWdodCIsIHZvaWQgMCk7CisgICAgcmV0dXJuIEZyZWVDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dDsKK30oKSk7CisKK19DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siQ2FtZXJhSW5wdXRUeXBlcyJdWyJGcmVlQ2FtZXJhS2V5Ym9hcmRN
b3ZlSW5wdXQiXSA9IEZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dDsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vQ2FtZXJhcy9JbnB1dHMvZnJlZUNhbWVyYU1vdXNlSW5wdXQudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9DYW1lcmFzL0lucHV0cy9mcmVlQ2FtZXJhTW91c2VJbnB1dC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogRnJlZUNhbWVyYU1vdXNlSW5wdXQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYU1vdXNlSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEZyZWVDYW1lcmFNb3VzZUlucHV0OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
dHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8g
Ii4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFuYWdlciAqLyAiLi9DYW1lcmFzL2NhbWVyYUlucHV0
c01hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXZlbnRzX3BvaW50ZXJF
dmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL0V2ZW50cy9wb2ludGVyRXZlbnRzICovICIuL0V2ZW50cy9wb2ludGVyRXZlbnRz
LnRzIik7CisKKworCisKKworLyoqCisgKiBNYW5hZ2UgdGhlIG1vdXNlIGlucHV0cyB0byBjb250
cm9sIHRoZSBtb3ZlbWVudCBvZiBhIGZyZWUgY2FtZXJhLgorICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2N1c3RvbWl6aW5nX2NhbWVyYV9pbnB1dHMKKyAqLwordmFyIEZy
ZWVDYW1lcmFNb3VzZUlucHV0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8q
KgorICAgICAqIE1hbmFnZSB0aGUgbW91c2UgaW5wdXRzIHRvIGNvbnRyb2wgdGhlIG1vdmVtZW50
IG9mIGEgZnJlZSBjYW1lcmEuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL2N1c3RvbWl6aW5nX2NhbWVyYV9pbnB1dHMKKyAgICAgKiBAcGFyYW0gdG91Y2hFbmFi
bGVkIERlZmluZXMgaWYgdG91Y2ggaXMgZW5hYmxlZCBvciBub3QKKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBGcmVlQ2FtZXJhTW91c2VJbnB1dCgKKyAgICAvKioKKyAgICAgKiBEZWZpbmUgaWYgdG91
Y2ggaXMgZW5hYmxlZCBpbiB0aGUgbW91c2UgaW5wdXQKKyAgICAgKi8KKyAgICB0b3VjaEVuYWJs
ZWQpIHsKKyAgICAgICAgaWYgKHRvdWNoRW5hYmxlZCA9PT0gdm9pZCAwKSB7IHRvdWNoRW5hYmxl
ZCA9IHRydWU7IH0KKyAgICAgICAgdGhpcy50b3VjaEVuYWJsZWQgPSB0b3VjaEVuYWJsZWQ7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBidXR0b25zIGFzc29jaWF0ZWQgd2l0
aCB0aGUgaW5wdXQgdG8gaGFuZGxlIGNhbWVyYSBtb3ZlLgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5idXR0b25zID0gWzAsIDEsIDJdOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5l
cyB0aGUgcG9pbnRlciBhbmd1bGFyIHNlbnNpYmlsaXR5ICBhbG9uZyB0aGUgWCBhbmQgWSBheGlz
IG9yIGhvdyBmYXN0IGlzIHRoZSBjYW1lcmEgcm90YXRpbmcuCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmFuZ3VsYXJTZW5zaWJpbGl0eSA9IDIwMDAuMDsKKyAgICAgICAgdGhpcy5wcmV2aW91
c1Bvc2l0aW9uID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgZm9y
IHdoZW4gYSBwb2ludGVyIG1vdmUgZXZlbnQgb2NjdXJzIGNvbnRhaW5pbmcgdGhlIG1vdmUgb2Zm
c2V0CisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVkT2JzZXJ2YWJsZSA9
IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2Vy
dmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKiBJ
ZiB0aGUgY2FtZXJhIHNob3VsZCBiZSByb3RhdGVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gcG9p
bnRlciBtb3ZlbWVudAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fYWxsb3dDYW1lcmFSb3Rh
dGlvbiA9IHRydWU7CisgICAgfQorICAgIC8qKgorICAgICAqIEF0dGFjaCB0aGUgaW5wdXQgY29u
dHJvbHMgdG8gYSBzcGVjaWZpYyBkb20gZWxlbWVudCB0byBnZXQgdGhlIGlucHV0IGZyb20uCisg
ICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0aGUgY29udHJvbHMgc2hv
dWxkIGJlIGxpc3RlbmVkIGZyb20KKyAgICAgKiBAcGFyYW0gbm9QcmV2ZW50RGVmYXVsdCBEZWZp
bmVzIHdoZXRoZXIgZXZlbnQgY2F1Z2h0IGJ5IHRoZSBjb250cm9scyBzaG91bGQgY2FsbCBwcmV2
ZW50ZGVmYXVsdCgpIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dl
Yi9BUEkvRXZlbnQvcHJldmVudERlZmF1bHQpCisgICAgICovCisgICAgRnJlZUNhbWVyYU1vdXNl
SW5wdXQucHJvdG90eXBlLmF0dGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVudCwgbm9QcmV2
ZW50RGVmYXVsdCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgZW5n
aW5lID0gdGhpcy5jYW1lcmEuZ2V0RW5naW5lKCk7CisgICAgICAgIGlmICghdGhpcy5fcG9pbnRl
cklucHV0KSB7CisgICAgICAgICAgICB0aGlzLl9wb2ludGVySW5wdXQgPSBmdW5jdGlvbiAocCkg
eworICAgICAgICAgICAgICAgIHZhciBldnQgPSBwLmV2ZW50OworICAgICAgICAgICAgICAgIGlm
IChlbmdpbmUuaXNJblZSRXhjbHVzaXZlUG9pbnRlck1vZGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIV90aGlz
LnRvdWNoRW5hYmxlZCAmJiBldnQucG9pbnRlclR5cGUgPT09ICJ0b3VjaCIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAocC50eXBlICE9PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRSAmJiBfdGhpcy5idXR0b25z
LmluZGV4T2YoZXZ0LmJ1dHRvbikgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHNyY0VsZW1lbnQgPSAo
ZXZ0LnNyY0VsZW1lbnQgfHwgZXZ0LnRhcmdldCk7CisgICAgICAgICAgICAgICAgaWYgKHAudHlw
ZSA9PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04gJiYgc3JjRWxlbWVudCkgeworICAgICAg
ICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3JjRWxlbWVudC5z
ZXRQb2ludGVyQ2FwdHVyZShldnQucG9pbnRlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly9Ob3RoaW5nIHRvIGRvIHdpdGggdGhlIGVycm9yLiBFeGVjdXRpb24gd2lsbCBjb250aW51ZS4K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcmV2aW91
c1Bvc2l0aW9uID0geworICAgICAgICAgICAgICAgICAgICAgICAgeDogZXZ0LmNsaWVudFgsCisg
ICAgICAgICAgICAgICAgICAgICAgICB5OiBldnQuY2xpZW50WQorICAgICAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudC5mb2N1cygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHAudHlwZSA9PT0gX0V2ZW50c19w
b2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvaW50ZXJFdmVudFR5
cGVzIl0uUE9JTlRFUlVQICYmIHNyY0VsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY0VsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0
dXJlKGV2dC5wb2ludGVySWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL05vdGhpbmcgdG8g
ZG8gd2l0aCB0aGUgZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgX3RoaXMucHJldmlvdXNQb3NpdGlvbiA9IG51bGw7CisgICAgICAgICAgICAgICAgICAg
IGlmICghbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnBy
ZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocC50eXBlID09PSBfRXZlbnRzX3BvaW50ZXJFdmVu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lO
VEVSTU9WRSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLnByZXZpb3VzUG9zaXRp
b24gfHwgZW5naW5lLmlzUG9pbnRlckxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YXIgb2Zm
c2V0WCA9IGV2dC5jbGllbnRYIC0gX3RoaXMucHJldmlvdXNQb3NpdGlvbi54OworICAgICAgICAg
ICAgICAgICAgICB2YXIgb2Zmc2V0WSA9IGV2dC5jbGllbnRZIC0gX3RoaXMucHJldmlvdXNQb3Np
dGlvbi55OworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY2FtZXJhLmdldFNjZW5lKCku
dXNlUmlnaHRIYW5kZWRTeXN0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFgg
Kj0gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKF90
aGlzLmNhbWVyYS5wYXJlbnQgJiYgX3RoaXMuY2FtZXJhLnBhcmVudC5fZ2V0V29ybGRNYXRyaXhE
ZXRlcm1pbmFudCgpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WCAqPSAt
MTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMu
X2FsbG93Q2FtZXJhUm90YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNh
bWVyYS5jYW1lcmFSb3RhdGlvbi55ICs9IG9mZnNldFggLyBfdGhpcy5hbmd1bGFyU2Vuc2liaWxp
dHk7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5jYW1lcmEuY2FtZXJhUm90YXRpb24u
eCArPSBvZmZzZXRZIC8gX3RoaXMuYW5ndWxhclNlbnNpYmlsaXR5OworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIF90aGlzLm9uUG9pbnRlck1vdmVkT2JzZXJ2YWJs
ZS5ub3RpZnlPYnNlcnZlcnMoeyBvZmZzZXRYOiBvZmZzZXRYLCBvZmZzZXRZOiBvZmZzZXRZIH0p
OworICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcmV2aW91c1Bvc2l0aW9uID0geworICAgICAg
ICAgICAgICAgICAgICAgICAgeDogZXZ0LmNsaWVudFgsCisgICAgICAgICAgICAgICAgICAgICAg
ICB5OiBldnQuY2xpZW50WQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2
dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9vbk1vdXNlTW92
ZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgIGlmICghZW5naW5lLmlzUG9pbnRlckxv
Y2spIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZW5naW5lLmlzSW5WUkV4Y2x1c2l2ZVBvaW50ZXJNb2RlKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG9mZnNldFggPSBldnQu
bW92ZW1lbnRYIHx8IGV2dC5tb3pNb3ZlbWVudFggfHwgZXZ0LndlYmtpdE1vdmVtZW50WCB8fCBl
dnQubXNNb3ZlbWVudFggfHwgMDsKKyAgICAgICAgICAgIGlmIChfdGhpcy5jYW1lcmEuZ2V0U2Nl
bmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgeworICAgICAgICAgICAgICAgIG9mZnNldFggKj0g
LTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX3RoaXMuY2FtZXJhLnBhcmVudCAm
JiBfdGhpcy5jYW1lcmEucGFyZW50Ll9nZXRXb3JsZE1hdHJpeERldGVybWluYW50KCkgPCAwKSB7
CisgICAgICAgICAgICAgICAgb2Zmc2V0WCAqPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIF90aGlzLmNhbWVyYS5jYW1lcmFSb3RhdGlvbi55ICs9IG9mZnNldFggLyBfdGhpcy5hbmd1
bGFyU2Vuc2liaWxpdHk7CisgICAgICAgICAgICB2YXIgb2Zmc2V0WSA9IGV2dC5tb3ZlbWVudFkg
fHwgZXZ0Lm1vek1vdmVtZW50WSB8fCBldnQud2Via2l0TW92ZW1lbnRZIHx8IGV2dC5tc01vdmVt
ZW50WSB8fCAwOworICAgICAgICAgICAgX3RoaXMuY2FtZXJhLmNhbWVyYVJvdGF0aW9uLnggKz0g
b2Zmc2V0WSAvIF90aGlzLmFuZ3VsYXJTZW5zaWJpbGl0eTsKKyAgICAgICAgICAgIF90aGlzLnBy
ZXZpb3VzUG9zaXRpb24gPSBudWxsOworICAgICAgICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0
KSB7CisgICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgICAgIHRoaXMuX29ic2VydmVyID0gdGhpcy5jYW1lcmEuZ2V0U2Nl
bmUoKS5vblBvaW50ZXJPYnNlcnZhYmxlLmFkZCh0aGlzLl9wb2ludGVySW5wdXQsIF9FdmVudHNf
cG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQb2ludGVyRXZlbnRU
eXBlcyJdLlBPSU5URVJET1dOIHwgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUlVQIHwgX0V2ZW50c19w
b2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvaW50ZXJFdmVudFR5
cGVzIl0uUE9JTlRFUk1PVkUpOworICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1v
dXNlbW92ZSIsIHRoaXMuX29uTW91c2VNb3ZlLCBmYWxzZSk7CisgICAgICAgIGVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLm9uQ29udGV4dE1lbnUuYmluZCh0aGlz
KSwgZmFsc2UpOworICAgIH07CisgICAgLyoqCisgICAgICogQ2FsbGVkIG9uIEpTIGNvbnRleHRt
ZW51IGV2ZW50LgorICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHByb3ZpZGUgZnVuY3Rp
b25hbGl0eS4KKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhTW91c2VJbnB1dC5wcm90b3R5cGUub25D
b250ZXh0TWVudSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0
KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRhY2ggdGhlIGN1cnJlbnQgY29udHJvbHMg
ZnJvbSB0aGUgc3BlY2lmaWVkIGRvbSBlbGVtZW50LgorICAgICAqIEBwYXJhbSBlbGVtZW50IERl
ZmluZXMgdGhlIGVsZW1lbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdGhlIGlucHV0cyBmcm9tCisgICAg
ICovCisgICAgRnJlZUNhbWVyYU1vdXNlSW5wdXQucHJvdG90eXBlLmRldGFjaENvbnRyb2wgPSBm
dW5jdGlvbiAoZWxlbWVudCkgeworICAgICAgICBpZiAodGhpcy5fb2JzZXJ2ZXIgJiYgZWxlbWVu
dCkgeworICAgICAgICAgICAgdGhpcy5jYW1lcmEuZ2V0U2NlbmUoKS5vblBvaW50ZXJPYnNlcnZh
YmxlLnJlbW92ZSh0aGlzLl9vYnNlcnZlcik7CisgICAgICAgICAgICBpZiAodGhpcy5fb25Nb3Vz
ZU1vdmUpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1v
dXNlbW92ZSIsIHRoaXMuX29uTW91c2VNb3ZlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0aGlzLm9uQ29udGV4dE1lbnUpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92
ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5vbkNvbnRleHRNZW51KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLm9uUG9pbnRlck1vdmVkT2JzZXJ2YWJsZSkg
eworICAgICAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZWRPYnNlcnZhYmxlLmNsZWFyKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vYnNlcnZlciA9IG51bGw7CisgICAg
ICAgICAgICB0aGlzLl9vbk1vdXNlTW92ZSA9IG51bGw7CisgICAgICAgICAgICB0aGlzLnByZXZp
b3VzUG9zaXRpb24gPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjdXJyZW50IGludHB1dC4KKyAgICAgKiBAcmV0dXJu
cyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIEZyZWVDYW1lcmFNb3VzZUlucHV0LnByb3Rv
dHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiRnJlZUNh
bWVyYU1vdXNlSW5wdXQiOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBmcmllbmRs
eSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQgY2xhc3MuCisgICAgICogQHJldHVybnMg
dGhlIGlucHV0IGZyaWVuZGx5IG5hbWUKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhTW91c2VJbnB1
dC5wcm90b3R5cGUuZ2V0U2ltcGxlTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
ICJtb3VzZSI7CisgICAgfTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZyZWVDYW1lcmFN
b3VzZUlucHV0LnByb3RvdHlwZSwgImJ1dHRvbnMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInNlcmlhbGl6ZSJd
KSgpCisgICAgXSwgRnJlZUNhbWVyYU1vdXNlSW5wdXQucHJvdG90eXBlLCAiYW5ndWxhclNlbnNp
YmlsaXR5Iiwgdm9pZCAwKTsKKyAgICByZXR1cm4gRnJlZUNhbWVyYU1vdXNlSW5wdXQ7Cit9KCkp
OworCitfQ2FtZXJhc19jYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIkNhbWVyYUlucHV0VHlwZXMiXVsiRnJlZUNhbWVyYU1vdXNlSW5wdXQiXSA9IEZyZWVD
YW1lcmFNb3VzZUlucHV0OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL0lucHV0
cy9mcmVlQ2FtZXJhVG91Y2hJbnB1dC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvSW5wdXRzL2ZyZWVD
YW1lcmFUb3VjaElucHV0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBGcmVlQ2FtZXJhVG91
Y2hJbnB1dCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVlQ2FtZXJh
VG91Y2hJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRnJlZUNhbWVyYVRvdWNoSW5wdXQ7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVz
L3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFJbnB1dHNNYW5hZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNN
YW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0V2ZW50c19wb2ludGVyRXZl
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9FdmVudHMvcG9pbnRlckV2ZW50cyAqLyAiLi9FdmVudHMvcG9pbnRlckV2ZW50cy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0
aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKworCisKKworCisv
KioKKyAqIE1hbmFnZSB0aGUgdG91Y2ggaW5wdXRzIHRvIGNvbnRyb2wgdGhlIG1vdmVtZW50IG9m
IGEgZnJlZSBjYW1lcmEuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
Y3VzdG9taXppbmdfY2FtZXJhX2lucHV0cworICovCit2YXIgRnJlZUNhbWVyYVRvdWNoSW5wdXQg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRnJlZUNhbWVyYVRv
dWNoSW5wdXQoKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSB0b3VjaCBz
ZW5zaWJpbGl0eSBmb3Igcm90YXRpb24uCisgICAgICAgICAqIFRoZSBoaWdoZXIgdGhlIGZhc3Rl
ci4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMudG91Y2hBbmd1bGFyU2Vuc2liaWxpdHkgPSAy
MDAwMDAuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhlIHRvdWNoIHNlbnNp
YmlsaXR5IGZvciBtb3ZlLgorICAgICAgICAgKiBUaGUgaGlnaGVyIHRoZSBmYXN0ZXIuCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnRvdWNoTW92ZVNlbnNpYmlsaXR5ID0gMjUwLjA7CisgICAg
ICAgIHRoaXMuX29mZnNldFggPSBudWxsOworICAgICAgICB0aGlzLl9vZmZzZXRZID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fcG9pbnRlclByZXNzZWQgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisgICAg
LyoqCisgICAgICogQXR0YWNoIHRoZSBpbnB1dCBjb250cm9scyB0byBhIHNwZWNpZmljIGRvbSBl
bGVtZW50IHRvIGdldCB0aGUgaW5wdXQgZnJvbS4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZp
bmVzIHRoZSBlbGVtZW50IHRoZSBjb250cm9scyBzaG91bGQgYmUgbGlzdGVuZWQgZnJvbQorICAg
ICAqIEBwYXJhbSBub1ByZXZlbnREZWZhdWx0IERlZmluZXMgd2hldGhlciBldmVudCBjYXVnaHQg
YnkgdGhlIGNvbnRyb2xzIHNob3VsZCBjYWxsIHByZXZlbnRkZWZhdWx0KCkgKGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudC9wcmV2ZW50RGVmYXVs
dCkKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhVG91Y2hJbnB1dC5wcm90b3R5cGUuYXR0YWNoQ29u
dHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBwcmV2aW91c1Bvc2l0aW9uID0gbnVsbDsKKyAg
ICAgICAgaWYgKHRoaXMuX3BvaW50ZXJJbnB1dCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICB0aGlzLl9vbkxvc3RGb2N1cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBfdGhp
cy5fb2Zmc2V0WCA9IG51bGw7CisgICAgICAgICAgICAgICAgX3RoaXMuX29mZnNldFkgPSBudWxs
OworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRoaXMuX3BvaW50ZXJJbnB1dCA9IGZ1bmN0
aW9uIChwKSB7CisgICAgICAgICAgICAgICAgdmFyIGV2dCA9IHAuZXZlbnQ7CisgICAgICAgICAg
ICAgICAgaWYgKGV2dC5wb2ludGVyVHlwZSA9PT0gIm1vdXNlIikgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwLnR5
cGUgPT09IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJET1dOKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnBy
ZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgX3RoaXMuX3BvaW50ZXJQcmVzc2VkLnB1c2goZXZ0LnBvaW50ZXJJZCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChfdGhpcy5fcG9pbnRlclByZXNzZWQubGVuZ3RoICE9PSAxKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcHJldmlvdXNQb3NpdGlvbiA9IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHg6IGV2dC5jbGllbnRYLAorICAgICAgICAgICAgICAgICAgICAgICAgeTogZXZ0LmNsaWVu
dFkKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAocC50eXBlID09PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSVVApIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBfdGhpcy5fcG9pbnRlclByZXNzZWQuaW5k
ZXhPZihldnQucG9pbnRlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAt
MSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wb2ludGVyUHJlc3NlZC5zcGxpY2UoaW5k
ZXgsIDEpOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHByZXZpb3VzUG9zaXRpb24gPSBudWxsOworICAgICAgICAgICAgICAgICAgICBf
dGhpcy5fb2Zmc2V0WCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9vZmZzZXRZ
ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocC50
eXBlID09PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5w
cmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmICghcHJldmlvdXNQb3NpdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhciBpbmRl
eCA9IF90aGlzLl9wb2ludGVyUHJlc3NlZC5pbmRleE9mKGV2dC5wb2ludGVySWQpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF90aGlz
Ll9vZmZzZXRYID0gZXZ0LmNsaWVudFggLSBwcmV2aW91c1Bvc2l0aW9uLng7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl9vZmZzZXRZID0gLShldnQuY2xpZW50WSAtIHByZXZpb3VzUG9zaXRp
b24ueSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9vYnNlcnZlciA9IHRoaXMuY2FtZXJhLmdldFNjZW5lKCkub25Qb2ludGVyT2Jz
ZXJ2YWJsZS5hZGQodGhpcy5fcG9pbnRlcklucHV0LCBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9X
TiB8IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQ
b2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJVUCB8IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJNT1ZF
KTsKKyAgICAgICAgaWYgKHRoaXMuX29uTG9zdEZvY3VzKSB7CisgICAgICAgICAgICBlbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlzLl9vbkxvc3RGb2N1cyk7CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKgorICAgICAqIERldGFjaCB0aGUgY3VycmVudCBjb250cm9scyBmcm9t
IHRoZSBzcGVjaWZpZWQgZG9tIGVsZW1lbnQuCisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5l
cyB0aGUgZWxlbWVudCB0byBzdG9wIGxpc3RlbmluZyB0aGUgaW5wdXRzIGZyb20KKyAgICAgKi8K
KyAgICBGcmVlQ2FtZXJhVG91Y2hJbnB1dC5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0
aW9uIChlbGVtZW50KSB7CisgICAgICAgIGlmICh0aGlzLl9wb2ludGVySW5wdXQgJiYgZWxlbWVu
dCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX29ic2VydmVyKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5jYW1lcmEuZ2V0U2NlbmUoKS5vblBvaW50ZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9v
YnNlcnZlcik7CisgICAgICAgICAgICAgICAgdGhpcy5fb2JzZXJ2ZXIgPSBudWxsOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX29uTG9zdEZvY3VzKSB7CisgICAgICAgICAg
ICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIiwgdGhpcy5fb25Mb3N0Rm9j
dXMpOworICAgICAgICAgICAgICAgIHRoaXMuX29uTG9zdEZvY3VzID0gbnVsbDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3BvaW50ZXJQcmVzc2VkID0gW107CisgICAgICAgICAg
ICB0aGlzLl9vZmZzZXRYID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX29mZnNldFkgPSBudWxs
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQg
Y2FtZXJhIHN0YXRlIGRlcGVuZGluZyBvbiB0aGUgaW5wdXRzIHRoYXQgaGF2ZSBiZWVuIHVzZWQg
dGhpcyBmcmFtZS4KKyAgICAgKiBUaGlzIGlzIGEgZHluYW1pY2FsbHkgY3JlYXRlZCBsYW1iZGEg
dG8gYXZvaWQgdGhlIHBlcmZvcm1hbmNlIHBlbmFsdHkgb2YgbG9vcGluZyBmb3IgaW5wdXRzIGlu
IHRoZSByZW5kZXIgbG9vcC4KKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhVG91Y2hJbnB1dC5wcm90
b3R5cGUuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9vZmZz
ZXRYICYmIHRoaXMuX29mZnNldFkpIHsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNh
bWVyYTsKKyAgICAgICAgICAgIGNhbWVyYS5jYW1lcmFSb3RhdGlvbi55ICs9IHRoaXMuX29mZnNl
dFggLyB0aGlzLnRvdWNoQW5ndWxhclNlbnNpYmlsaXR5OworICAgICAgICAgICAgaWYgKHRoaXMu
X3BvaW50ZXJQcmVzc2VkLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICBjYW1lcmEuY2Ft
ZXJhUm90YXRpb24ueCArPSAtdGhpcy5fb2Zmc2V0WSAvIHRoaXMudG91Y2hBbmd1bGFyU2Vuc2li
aWxpdHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB2YXIgc3BlZWQgPSBjYW1lcmEuX2NvbXB1dGVMb2NhbENhbWVyYVNwZWVkKCk7CisgICAgICAg
ICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdKDAsIDAsIHNwZWVkICogdGhpcy5fb2Zmc2V0
WSAvIHRoaXMudG91Y2hNb3ZlU2Vuc2liaWxpdHkpOworICAgICAgICAgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRyaXgiXS5Sb3RhdGlv
bllhd1BpdGNoUm9sbFRvUmVmKGNhbWVyYS5yb3RhdGlvbi55LCBjYW1lcmEucm90YXRpb24ueCwg
MCwgY2FtZXJhLl9jYW1lcmFSb3RhdGlvbk1hdHJpeCk7CisgICAgICAgICAgICAgICAgY2FtZXJh
LmNhbWVyYURpcmVjdGlvbi5hZGRJblBsYWNlKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXMoZGlyZWN0
aW9uLCBjYW1lcmEuX2NhbWVyYVJvdGF0aW9uTWF0cml4KSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhl
IGN1cnJlbnQgaW50cHV0LgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICov
CisgICAgRnJlZUNhbWVyYVRvdWNoSW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJGcmVlQ2FtZXJhVG91Y2hJbnB1dCI7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBpbnB1dCBjbGFzcy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQor
ICAgICAqLworICAgIEZyZWVDYW1lcmFUb3VjaElucHV0LnByb3RvdHlwZS5nZXRTaW1wbGVOYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gInRvdWNoIjsKKyAgICB9OworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgRnJlZUNhbWVyYVRvdWNoSW5wdXQucHJvdG90eXBlLCAidG91
Y2hBbmd1bGFyU2Vuc2liaWxpdHkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgRnJlZUNhbWVyYVRvdWNoSW5wdXQucHJvdG90eXBlLCAidG91Y2hNb3ZlU2Vuc2liaWxpdHki
LCB2b2lkIDApOworICAgIHJldHVybiBGcmVlQ2FtZXJhVG91Y2hJbnB1dDsKK30oKSk7CisKK19D
YW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Q2FtZXJhSW5wdXRUeXBlcyJdWyJGcmVlQ2FtZXJhVG91Y2hJbnB1dCJdID0gRnJlZUNhbWVyYVRv
dWNoSW5wdXQ7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVD
YW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFz
L0lucHV0cy9mcmVlQ2FtZXJhVmlydHVhbEpveXN0aWNrSW5wdXQudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBGcmVlQ2FtZXJhVmlydHVhbEpveXN0aWNrSW5wdXQgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlj
a0lucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBGcmVlQ2FtZXJhVmlydHVhbEpveXN0aWNrSW5w
dXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3ZpcnR1YWxKb3lzdGlja19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWlzYy92aXJ0dWFsSm95c3RpY2sgKi8gIi4vTWlzYy92aXJ0dWFsSm95c3RpY2sudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFJbnB1dHNNYW5hZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNN
YW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2ZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9DYW1lcmFzL2ZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvZnJlZUNhbWVy
YUlucHV0c01hbmFnZXIudHMiKTsKKworCisKKworLyoqCisqIEFkZCB2aXJ0dWFsIGpveXN0aWNr
IGlucHV0IHN1cHBvcnQgdG8gdGhlIGlucHV0IG1hbmFnZXIuCisqIEByZXR1cm5zIHRoZSBjdXJy
ZW50IGlucHV0IG1hbmFnZXIKKyovCitfQ2FtZXJhc19mcmVlQ2FtZXJhSW5wdXRzTWFuYWdlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJGcmVlQ2FtZXJhSW5wdXRzTWFuYWdlciJdLnBy
b3RvdHlwZS5hZGRWaXJ0dWFsSm95c3RpY2sgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5hZGQo
bmV3IEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dCgpKTsKKyAgICByZXR1cm4gdGhpczsK
K307CisvKioKKyAqIE1hbmFnZSB0aGUgVmlydHVhbCBKb3lzdGljayBpbnB1dHMgdG8gY29udHJv
bCB0aGUgbW92ZW1lbnQgb2YgYSBmcmVlIGNhbWVyYS4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRzCisgKi8KK3ZhciBGcmVl
Q2FtZXJhVmlydHVhbEpveXN0aWNrSW5wdXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgZnVuY3Rpb24gRnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0KCkgeworICAgIH0K
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBsZWZ0IHN0aWNrIG9mIHRoZSB2aXJ0dWFsIGpveXN0
aWNrLgorICAgICAqIEByZXR1cm5zIFRoZSB2aXJ0dWFsIEpveXN0aWNrCisgICAgICovCisgICAg
RnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0LnByb3RvdHlwZS5nZXRMZWZ0Sm95c3RpY2sg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9sZWZ0am95c3RpY2s7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByaWdodCBzdGljayBvZiB0aGUgdmlydHVhbCBq
b3lzdGljay4KKyAgICAgKiBAcmV0dXJucyBUaGUgdmlydHVhbCBKb3lzdGljaworICAgICAqLwor
ICAgIEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dC5wcm90b3R5cGUuZ2V0UmlnaHRKb3lz
dGljayA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ2h0am95c3RpY2s7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgY2FtZXJhIHN0YXRl
IGRlcGVuZGluZyBvbiB0aGUgaW5wdXRzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgdGhpcyBmcmFtZS4K
KyAgICAgKiBUaGlzIGlzIGEgZHluYW1pY2FsbHkgY3JlYXRlZCBsYW1iZGEgdG8gYXZvaWQgdGhl
IHBlcmZvcm1hbmNlIHBlbmFsdHkgb2YgbG9vcGluZyBmb3IgaW5wdXRzIGluIHRoZSByZW5kZXIg
bG9vcC4KKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhVmlydHVhbEpveXN0aWNrSW5wdXQucHJvdG90
eXBlLmNoZWNrSW5wdXRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fbGVmdGpv
eXN0aWNrKSB7CisgICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5jYW1lcmE7CisgICAgICAg
ICAgICB2YXIgc3BlZWQgPSBjYW1lcmEuX2NvbXB1dGVMb2NhbENhbWVyYVNwZWVkKCkgKiA1MDsK
KyAgICAgICAgICAgIHZhciBjYW1lcmFUcmFuc2Zvcm0gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWF0cml4Il0uUm90YXRpb25ZYXdQaXRjaFJvbGwo
Y2FtZXJhLnJvdGF0aW9uLnksIGNhbWVyYS5yb3RhdGlvbi54LCAwKTsKKyAgICAgICAgICAgIHZh
ciBkZWx0YVRyYW5zZm9ybSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXMobmV3IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0odGhpcy5fbGVm
dGpveXN0aWNrLmRlbHRhUG9zaXRpb24ueCAqIHNwZWVkLCB0aGlzLl9sZWZ0am95c3RpY2suZGVs
dGFQb3NpdGlvbi55ICogc3BlZWQsIHRoaXMuX2xlZnRqb3lzdGljay5kZWx0YVBvc2l0aW9uLnog
KiBzcGVlZCksIGNhbWVyYVRyYW5zZm9ybSk7CisgICAgICAgICAgICBjYW1lcmEuY2FtZXJhRGly
ZWN0aW9uID0gY2FtZXJhLmNhbWVyYURpcmVjdGlvbi5hZGQoZGVsdGFUcmFuc2Zvcm0pOworICAg
ICAgICAgICAgY2FtZXJhLmNhbWVyYVJvdGF0aW9uID0gY2FtZXJhLmNhbWVyYVJvdGF0aW9uLmFk
ZFZlY3RvcjModGhpcy5fcmlnaHRqb3lzdGljay5kZWx0YVBvc2l0aW9uKTsKKyAgICAgICAgICAg
IGlmICghdGhpcy5fbGVmdGpveXN0aWNrLnByZXNzZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9sZWZ0am95c3RpY2suZGVsdGFQb3NpdGlvbiA9IHRoaXMuX2xlZnRqb3lzdGljay5kZWx0YVBv
c2l0aW9uLnNjYWxlKDAuOSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXRoaXMu
X3JpZ2h0am95c3RpY2sucHJlc3NlZCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3JpZ2h0am95
c3RpY2suZGVsdGFQb3NpdGlvbiA9IHRoaXMuX3JpZ2h0am95c3RpY2suZGVsdGFQb3NpdGlvbi5z
Y2FsZSgwLjkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBdHRhY2ggdGhlIGlucHV0IGNvbnRyb2xzIHRvIGEgc3BlY2lmaWMgZG9tIGVsZW1lbnQg
dG8gZ2V0IHRoZSBpbnB1dCBmcm9tLgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMgdGhl
IGVsZW1lbnQgdGhlIGNvbnRyb2xzIHNob3VsZCBiZSBsaXN0ZW5lZCBmcm9tCisgICAgICogQHBh
cmFtIG5vUHJldmVudERlZmF1bHQgRGVmaW5lcyB3aGV0aGVyIGV2ZW50IGNhdWdodCBieSB0aGUg
Y29udHJvbHMgc2hvdWxkIGNhbGwgcHJldmVudGRlZmF1bHQoKSAoaHR0cHM6Ly9kZXZlbG9wZXIu
bW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L3ByZXZlbnREZWZhdWx0KQorICAg
ICAqLworICAgIEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dC5wcm90b3R5cGUuYXR0YWNo
Q29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAg
IHRoaXMuX2xlZnRqb3lzdGljayA9IG5ldyBfTWlzY192aXJ0dWFsSm95c3RpY2tfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmlydHVhbEpveXN0aWNrIl0odHJ1ZSk7CisgICAgICAgIHRo
aXMuX2xlZnRqb3lzdGljay5zZXRBeGlzRm9yVXBEb3duKF9NaXNjX3ZpcnR1YWxKb3lzdGlja19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJKb3lzdGlja0F4aXMiXS5aKTsKKyAgICAgICAg
dGhpcy5fbGVmdGpveXN0aWNrLnNldEF4aXNGb3JMZWZ0UmlnaHQoX01pc2NfdmlydHVhbEpveXN0
aWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkpveXN0aWNrQXhpcyJdLlgpOworICAg
ICAgICB0aGlzLl9sZWZ0am95c3RpY2suc2V0Sm95c3RpY2tTZW5zaWJpbGl0eSgwLjE1KTsKKyAg
ICAgICAgdGhpcy5fcmlnaHRqb3lzdGljayA9IG5ldyBfTWlzY192aXJ0dWFsSm95c3RpY2tfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmlydHVhbEpveXN0aWNrIl0oZmFsc2UpOworICAg
ICAgICB0aGlzLl9yaWdodGpveXN0aWNrLnNldEF4aXNGb3JVcERvd24oX01pc2NfdmlydHVhbEpv
eXN0aWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkpveXN0aWNrQXhpcyJdLlgpOwor
ICAgICAgICB0aGlzLl9yaWdodGpveXN0aWNrLnNldEF4aXNGb3JMZWZ0UmlnaHQoX01pc2Nfdmly
dHVhbEpveXN0aWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkpveXN0aWNrQXhpcyJd
LlkpOworICAgICAgICB0aGlzLl9yaWdodGpveXN0aWNrLnJldmVyc2VVcERvd24gPSB0cnVlOwor
ICAgICAgICB0aGlzLl9yaWdodGpveXN0aWNrLnNldEpveXN0aWNrU2Vuc2liaWxpdHkoMC4wNSk7
CisgICAgICAgIHRoaXMuX3JpZ2h0am95c3RpY2suc2V0Sm95c3RpY2tDb2xvcigieWVsbG93Iik7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRhY2ggdGhlIGN1cnJlbnQgY29udHJvbHMgZnJv
bSB0aGUgc3BlY2lmaWVkIGRvbSBlbGVtZW50LgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmlu
ZXMgdGhlIGVsZW1lbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdGhlIGlucHV0cyBmcm9tCisgICAgICov
CisgICAgRnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0LnByb3RvdHlwZS5kZXRhY2hDb250
cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgdGhpcy5fbGVmdGpveXN0aWNrLnJl
bGVhc2VDYW52YXMoKTsKKyAgICAgICAgdGhpcy5fcmlnaHRqb3lzdGljay5yZWxlYXNlQ2FudmFz
KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBj
dXJyZW50IGludHB1dC4KKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLwor
ICAgIEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkZyZWVDYW1lcmFWaXJ0dWFsSm95c3Rp
Y2tJbnB1dCI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUg
YXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBjbGFzcy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5w
dXQgZnJpZW5kbHkgbmFtZQorICAgICAqLworICAgIEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJ
bnB1dC5wcm90b3R5cGUuZ2V0U2ltcGxlTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuICJ2aXJ0dWFsSm95c3RpY2siOworICAgIH07CisgICAgcmV0dXJuIEZyZWVDYW1lcmFWaXJ0
dWFsSm95c3RpY2tJbnB1dDsKK30oKSk7CisKK19DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ2FtZXJhSW5wdXRUeXBlcyJdWyJGcmVlQ2Ft
ZXJhVmlydHVhbEpveXN0aWNrSW5wdXQiXSA9IEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1
dDsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9JbnB1dHMvaW5kZXgudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFz
L0lucHV0cy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0LCBB
cmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCwgQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVl
bElucHV0LCBBcmNSb3RhdGVDYW1lcmFQb2ludGVyc0lucHV0LCBBcmNSb3RhdGVDYW1lcmFWUkRl
dmljZU9yaWVudGF0aW9uSW5wdXQsIEZseUNhbWVyYUtleWJvYXJkSW5wdXQsIEZseUNhbWVyYU1v
dXNlSW5wdXQsIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LCBGb2xsb3dDYW1lcmFNb3Vz
ZVdoZWVsSW5wdXQsIEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQsIEZyZWVDYW1lcmFEZXZpY2VP
cmllbnRhdGlvbklucHV0LCBGcmVlQ2FtZXJhR2FtZXBhZElucHV0LCBGcmVlQ2FtZXJhS2V5Ym9h
cmRNb3ZlSW5wdXQsIEZyZWVDYW1lcmFNb3VzZUlucHV0LCBGcmVlQ2FtZXJhVG91Y2hJbnB1dCwg
RnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfYXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FyY1JvdGF0
ZUNhbWVyYUdhbWVwYWRJbnB1dCAqLyAiLi9DYW1lcmFzL0lucHV0cy9hcmNSb3RhdGVDYW1lcmFH
YW1lcGFkSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhR2FtZXBh
ZElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1
dCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcmNSb3RhdGVDYW1lcmFLZXli
b2FyZE1vdmVJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9hcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCAqLyAiLi9DYW1l
cmFzL0lucHV0cy9hcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2FyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIkFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0Il07IH0pOwor
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FyY1JvdGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9hcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQgKi8gIi4vQ2FtZXJhcy9JbnB1dHMvYXJj
Um90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1Jv
dGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FyY1JvdGF0
ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBcmNS
b3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfYXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hcmNSb3RhdGVDYW1lcmFQb2ludGVy
c0lucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2FyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dCJdOyB9KTsK
KworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVu
dGF0aW9uSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vYXJjUm90YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0ICovICIu
L0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3JpZW50YXRpb25JbnB1dC50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9u
SW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVu
dGF0aW9uSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQXJjUm90YXRlQ2FtZXJh
VlJEZXZpY2VPcmllbnRhdGlvbklucHV0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2ZseUNhbWVyYUtleWJvYXJkSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCAqLyAiLi9D
YW1lcmFzL0lucHV0cy9mbHlDYW1lcmFLZXlib2FyZElucHV0LnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkZseUNhbWVyYUtleWJvYXJkSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mbHlDYW1l
cmFLZXlib2FyZElucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkZseUNhbWVyYUtl
eWJvYXJkSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmx5Q2FtZXJh
TW91c2VJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9mbHlDYW1lcmFNb3VzZUlucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZseUNh
bWVyYU1vdXNlSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmx5Q2FtZXJhTW91c2VJbnB1
dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZseUNhbWVyYU1vdXNlSW5wdXRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfX1siRmx5Q2FtZXJhTW91c2VJbnB1dCJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9mb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mb2xsb3dDYW1l
cmFLZXlib2FyZE1vdmVJbnB1dCAqLyAiLi9DYW1lcmFzL0lucHV0cy9mb2xsb3dDYW1lcmFLZXli
b2FyZE1vdmVJbnB1dC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGb2xsb3dDYW1lcmFLZXlib2Fy
ZE1vdmVJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZvbGxvd0NhbWVyYUtleWJvYXJkTW92
ZUlucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkZvbGxvd0NhbWVyYUtleWJvYXJk
TW92ZUlucHV0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZvbGxvd0NhbWVy
YU1vdXNlV2hlZWxJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9mb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQgKi8gIi4vQ2FtZXJh
cy9JbnB1dHMvZm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0LnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkZvbGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Zv
bGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJG
b2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfZm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0
ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2ZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfX1siRm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9mcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYURl
dmljZU9yaWVudGF0aW9uSW5wdXQgKi8gIi4vQ2FtZXJhcy9JbnB1dHMvZnJlZUNhbWVyYURldmlj
ZU9yaWVudGF0aW9uSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYURldmlj
ZU9yaWVudGF0aW9uSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mcmVlQ2FtZXJhRGV2aWNl
T3JpZW50YXRpb25JbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siRnJlZUNhbWVy
YURldmljZU9yaWVudGF0aW9uSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfZnJlZUNhbWVyYUdhbWVwYWRJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYUdhbWVwYWRJbnB1dCAqLyAiLi9D
YW1lcmFzL0lucHV0cy9mcmVlQ2FtZXJhR2FtZXBhZElucHV0LnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkZyZWVDYW1lcmFHYW1lcGFkSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mcmVlQ2Ft
ZXJhR2FtZXBhZElucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJGcmVlQ2FtZXJh
R2FtZXBhZElucHV0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZyZWVDYW1l
cmFLZXlib2FyZE1vdmVJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0ICovICIuL0Nh
bWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9mcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEy
X19bIkZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9mcmVlQ2FtZXJhTW91c2VJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYU1vdXNlSW5wdXQgKi8g
Ii4vQ2FtZXJhcy9JbnB1dHMvZnJlZUNhbWVyYU1vdXNlSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRnJlZUNhbWVyYU1vdXNlSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mcmVlQ2Ft
ZXJhTW91c2VJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siRnJlZUNhbWVyYU1v
dXNlSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZnJlZUNhbWVyYVRv
dWNoSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2ZyZWVDYW1lcmFUb3VjaElucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVD
YW1lcmFUb3VjaElucHV0LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmFUb3VjaElu
cHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZnJlZUNhbWVyYVRvdWNoSW5wdXRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE0X19bIkZyZWVDYW1lcmFUb3VjaElucHV0Il07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2ZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnJl
ZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1l
cmFWaXJ0dWFsSm95c3RpY2tJbnB1dC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVlQ2FtZXJh
VmlydHVhbEpveXN0aWNrSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mcmVlQ2FtZXJhVmly
dHVhbEpveXN0aWNrSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIkZyZWVDYW1l
cmFWaXJ0dWFsSm95c3RpY2tJbnB1dCJdOyB9KTsKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvUmlnTW9kZXMvc3RlcmVv
c2NvcGljQW5hZ2x5cGhSaWdNb2RlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9SaWdN
b2Rlcy9zdGVyZW9zY29waWNBbmFnbHlwaFJpZ01vZGUudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIG5vIGV4
cG9ydHMgcHJvdmlkZWQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL2NhbWVyYSAqLyAiLi9DYW1lcmFzL2NhbWVyYS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX3Bhc3NQb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vUG9zdFBy
b2Nlc3Nlcy9wYXNzUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wYXNzUG9zdFByb2Nl
c3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19hbmFnbHlw
aFBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9Qb3N0UHJvY2Vzc2VzL2FuYWdseXBoUG9zdFByb2Nlc3MgKi8gIi4v
UG9zdFByb2Nlc3Nlcy9hbmFnbHlwaFBvc3RQcm9jZXNzLnRzIik7CisKKworCitfY2FtZXJhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNhbWVyYSJdLl9zZXRTdGVyZW9zY29waWNBbmFn
bHlwaFJpZ01vZGUgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAgY2FtZXJhLl9yaWdDYW1lcmFz
WzBdLl9yaWdQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wYXNzUG9zdFByb2Nlc3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUGFzc1Bvc3RQcm9jZXNzIl0oY2FtZXJhLm5h
bWUgKyAiX3Bhc3N0aHJ1IiwgMS4wLCBjYW1lcmEuX3JpZ0NhbWVyYXNbMF0pOworICAgIGNhbWVy
YS5fcmlnQ2FtZXJhc1sxXS5fcmlnUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfYW5h
Z2x5cGhQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBbmFnbHlwaFBv
c3RQcm9jZXNzIl0oY2FtZXJhLm5hbWUgKyAiX2FuYWdseXBoIiwgMS4wLCBjYW1lcmEuX3JpZ0Nh
bWVyYXMpOworfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9SaWdNb2Rlcy9z
dGVyZW9zY29waWNSaWdNb2RlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvUmlnTW9kZXMvc3RlcmVv
c2NvcGljUmlnTW9kZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIG5vIGV4cG9ydHMgcHJvdmlkZWQgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2NhbWVyYSAqLyAiLi9D
YW1lcmFzL2NhbWVyYS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vz
c2VzX3Bhc3NQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vUG9zdFByb2Nlc3Nlcy9wYXNzUG9zdFByb2Nlc3MgKi8g
Ii4vUG9zdFByb2Nlc3Nlcy9wYXNzUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfUG9zdFByb2Nlc3Nlc19zdGVyZW9zY29waWNJbnRlcmxhY2VQb3N0UHJvY2Vzc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vUG9zdFByb2Nlc3Nlcy9zdGVyZW9zY29waWNJbnRlcmxhY2VQb3N0UHJvY2VzcyAqLyAiLi9Q
b3N0UHJvY2Vzc2VzL3N0ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNzLnRzIik7CisKKwor
CitfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNhbWVyYSJdLl9zZXRTdGVy
ZW9zY29waWNSaWdNb2RlID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgIHZhciBpc1N0ZXJlb3Nj
b3BpY0hvcml6ID0gY2FtZXJhLmNhbWVyYVJpZ01vZGUgPT09IF9jYW1lcmFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siQ2FtZXJhIl0uUklHX01PREVfU1RFUkVPU0NPUElDX1NJREVCWVNJ
REVfUEFSQUxMRUwgfHwgY2FtZXJhLmNhbWVyYVJpZ01vZGUgPT09IF9jYW1lcmFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siQ2FtZXJhIl0uUklHX01PREVfU1RFUkVPU0NPUElDX1NJREVC
WVNJREVfQ1JPU1NFWUVEOworICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1swXS5fcmlnUG9zdFByb2Nl
c3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcGFzc1Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlBhc3NQb3N0UHJvY2VzcyJdKGNhbWVyYS5uYW1lICsgIl9wYXNzdGhydSIs
IDEuMCwgY2FtZXJhLl9yaWdDYW1lcmFzWzBdKTsKKyAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0u
X3JpZ1Bvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3N0ZXJlb3Njb3BpY0ludGVybGFj
ZVBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlN0ZXJlb3Njb3BpY0lu
dGVybGFjZVBvc3RQcm9jZXNzIl0oY2FtZXJhLm5hbWUgKyAiX3N0ZXJlb0ludGVybGFjZSIsIGNh
bWVyYS5fcmlnQ2FtZXJhcywgaXNTdGVyZW9zY29waWNIb3Jpeik7Cit9OworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9DYW1lcmFzL1JpZ01vZGVzL3ZyUmlnTW9kZS50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvUmln
TW9kZXMvdnJSaWdNb2RlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBubyBleHBvcnRzIHByb3ZpZGVkICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9jYW1lcmEgKi8gIi4vQ2FtZXJhcy9j
YW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfdnJEaXN0b3J0aW9uQ29ycmVjdGlv
blBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9Qb3N0UHJvY2Vzc2VzL3ZyRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0
UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3ZyRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0UHJv
Y2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX3ZyTXVs
dGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL1Bvc3RQcm9jZXNzZXMvdnJNdWx0aXZp
ZXdUb1NpbmdsZXZpZXdQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3ZyTXVsdGl2aWV3
VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
VlJfdnJDYW1lcmFNZXRyaWNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9WUi92ckNhbWVyYU1ldHJpY3MgKi8gIi4vQ2FtZXJhcy9WUi92
ckNhbWVyYU1ldHJpY3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmlld3BvcnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmlld3BvcnQg
Ki8gIi4vTWF0aHMvbWF0aC52aWV3cG9ydC50cyIpOworCisKKworCisKKworCitfY2FtZXJhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNhbWVyYSJdLl9zZXRWUlJpZ01vZGUgPSBmdW5j
dGlvbiAoY2FtZXJhLCByaWdQYXJhbXMpIHsKKyAgICB2YXIgbWV0cmljcyA9IHJpZ1BhcmFtcy52
ckNhbWVyYU1ldHJpY3MgfHwgX1ZSX3ZyQ2FtZXJhTWV0cmljc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJWUkNhbWVyYU1ldHJpY3MiXS5HZXREZWZhdWx0KCk7CisgICAgY2FtZXJhLl9y
aWdDYW1lcmFzWzBdLl9jYW1lcmFSaWdQYXJhbXMudnJNZXRyaWNzID0gbWV0cmljczsKKyAgICBj
YW1lcmEuX3JpZ0NhbWVyYXNbMF0udmlld3BvcnQgPSBuZXcgX01hdGhzX21hdGhfdmlld3BvcnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVmlld3BvcnQiXSgwLCAwLCAwLjUsIDEuMCk7
CisgICAgY2FtZXJhLl9yaWdDYW1lcmFzWzBdLl9jYW1lcmFSaWdQYXJhbXMudnJXb3JrTWF0cml4
ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJN
YXRyaXgiXSgpOworICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1swXS5fY2FtZXJhUmlnUGFyYW1zLnZy
SE1hdHJpeCA9IG1ldHJpY3MubGVmdEhNYXRyaXg7CisgICAgY2FtZXJhLl9yaWdDYW1lcmFzWzBd
Ll9jYW1lcmFSaWdQYXJhbXMudnJQcmVWaWV3TWF0cml4ID0gbWV0cmljcy5sZWZ0UHJlVmlld01h
dHJpeDsKKyAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMF0uZ2V0UHJvamVjdGlvbk1hdHJpeCA9IGNh
bWVyYS5fcmlnQ2FtZXJhc1swXS5fZ2V0VlJQcm9qZWN0aW9uTWF0cml4OworICAgIGNhbWVyYS5f
cmlnQ2FtZXJhc1sxXS5fY2FtZXJhUmlnUGFyYW1zLnZyTWV0cmljcyA9IG1ldHJpY3M7CisgICAg
Y2FtZXJhLl9yaWdDYW1lcmFzWzFdLnZpZXdwb3J0ID0gbmV3IF9NYXRoc19tYXRoX3ZpZXdwb3J0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlZpZXdwb3J0Il0oMC41LCAwLCAwLjUsIDEu
MCk7CisgICAgY2FtZXJhLl9yaWdDYW1lcmFzWzFdLl9jYW1lcmFSaWdQYXJhbXMudnJXb3JrTWF0
cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJNYXRyaXgiXSgpOworICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1sxXS5fY2FtZXJhUmlnUGFyYW1z
LnZySE1hdHJpeCA9IG1ldHJpY3MucmlnaHRITWF0cml4OworICAgIGNhbWVyYS5fcmlnQ2FtZXJh
c1sxXS5fY2FtZXJhUmlnUGFyYW1zLnZyUHJlVmlld01hdHJpeCA9IG1ldHJpY3MucmlnaHRQcmVW
aWV3TWF0cml4OworICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1sxXS5nZXRQcm9qZWN0aW9uTWF0cml4
ID0gY2FtZXJhLl9yaWdDYW1lcmFzWzFdLl9nZXRWUlByb2plY3Rpb25NYXRyaXg7CisgICAgLy8g
Rm9yIG11bHRpdmlldyBvbiBhIHdlYlZSIGNhbWVyYQorICAgIC8vIEZpcnN0IG11bHRpdmlldyB3
aWxsIGJlIHJlbmRlcmVkIHRvIGNhbWVyYS5fbXVsdGl2aWV3VGV4dHVyZQorICAgIC8vIFRoZW4g
dGhpcyBwb3N0cHJvY2VzcyB3aWxsIHJ1biBvbiBlYWNoIGV5ZSB0byBjb3B5IHRoZSByaWdodCB0
ZXh0dXJlIHRvIGVhY2ggZXllCisgICAgaWYgKG1ldHJpY3MubXVsdGl2aWV3RW5hYmxlZCkgewor
ICAgICAgICBpZiAoIWNhbWVyYS5nZXRTY2VuZSgpLmdldEVuZ2luZSgpLmdldENhcHMoKS5tdWx0
aXZpZXcpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJMb2dnZXIiXS5XYXJuKCJNdWx0aXZpZXcgaXMgbm90IHN1cHBvcnRlZCwgZmFsbGlu
ZyBiYWNrIHRvIHN0YW5kYXJkIHJlbmRlcmluZyIpOworICAgICAgICAgICAgbWV0cmljcy5tdWx0
aXZpZXdFbmFibGVkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBjYW1lcmEuX3VzZU11bHRpdmlld1RvU2luZ2xlVmlldyA9IHRydWU7CisgICAgICAgICAg
ICBjYW1lcmEuX3JpZ1Bvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3ZyTXVsdGl2aWV3
VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVlJN
dWx0aXZpZXdUb1NpbmdsZXZpZXdQb3N0UHJvY2VzcyJdKCJWUk11bHRpdmlld1RvU2luZ2xldmll
dyIsIGNhbWVyYSwgbWV0cmljcy5wb3N0UHJvY2Vzc1NjYWxlRmFjdG9yKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAobWV0cmljcy5jb21wZW5zYXRlRGlzdG9ydGlvbikgeworICAgICAgICBj
YW1lcmEuX3JpZ0NhbWVyYXNbMF0uX3JpZ1Bvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2Vz
X3ZyRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJWUkRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFByb2Nlc3MiXSgiVlJfRGlzdG9ydF9D
b21wZW5zYXRpb25fTGVmdCIsIGNhbWVyYS5fcmlnQ2FtZXJhc1swXSwgZmFsc2UsIG1ldHJpY3Mp
OworICAgICAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0uX3JpZ1Bvc3RQcm9jZXNzID0gbmV3IF9Q
b3N0UHJvY2Vzc2VzX3ZyRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJWUkRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFByb2Nlc3MiXSgi
VlJfRGlzdG9ydF9Db21wZW5zYXRpb25fUmlnaHQiLCBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0sIHRy
dWUsIG1ldHJpY3MpOworICAgIH0KK307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVy
YXMvUmlnTW9kZXMvd2ViVlJSaWdNb2RlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9SaWdNb2Rlcy93ZWJWUlJp
Z01vZGUudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIG5vIGV4cG9ydHMgcHJvdmlkZWQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2NhbWVyYSAqLyAiLi9DYW1lcmFzL2NhbWVyYS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0
aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92aWV3cG9ydF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52aWV3cG9y
dCAqLyAiLi9NYXRocy9tYXRoLnZpZXdwb3J0LnRzIik7CisKKworCitfY2FtZXJhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkNhbWVyYSJdLl9zZXRXZWJWUlJpZ01vZGUgPSBmdW5jdGlv
biAoY2FtZXJhLCByaWdQYXJhbXMpIHsKKyAgICBpZiAocmlnUGFyYW1zLnZyRGlzcGxheSkgewor
ICAgICAgICB2YXIgbGVmdEV5ZSA9IHJpZ1BhcmFtcy52ckRpc3BsYXkuZ2V0RXllUGFyYW1ldGVy
cygnbGVmdCcpOworICAgICAgICB2YXIgcmlnaHRFeWUgPSByaWdQYXJhbXMudnJEaXNwbGF5Lmdl
dEV5ZVBhcmFtZXRlcnMoJ3JpZ2h0Jyk7CisgICAgICAgIC8vTGVmdCBleWUKKyAgICAgICAgY2Ft
ZXJhLl9yaWdDYW1lcmFzWzBdLnZpZXdwb3J0ID0gbmV3IF9NYXRoc19tYXRoX3ZpZXdwb3J0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZpZXdwb3J0Il0oMCwgMCwgMC41LCAxLjApOwor
ICAgICAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMF0uc2V0Q2FtZXJhUmlnUGFyYW1ldGVyKCJsZWZ0
IiwgdHJ1ZSk7CisgICAgICAgIC8vbGVhdmluZyB0aGlzIGZvciBmdXR1cmUgcmVmZXJlbmNlCisg
ICAgICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1swXS5zZXRDYW1lcmFSaWdQYXJhbWV0ZXIoInNwZWNz
IiwgcmlnUGFyYW1zLnNwZWNzKTsKKyAgICAgICAgY2FtZXJhLl9yaWdDYW1lcmFzWzBdLnNldENh
bWVyYVJpZ1BhcmFtZXRlcigiZXllUGFyYW1ldGVycyIsIGxlZnRFeWUpOworICAgICAgICBjYW1l
cmEuX3JpZ0NhbWVyYXNbMF0uc2V0Q2FtZXJhUmlnUGFyYW1ldGVyKCJmcmFtZURhdGEiLCByaWdQ
YXJhbXMuZnJhbWVEYXRhKTsKKyAgICAgICAgY2FtZXJhLl9yaWdDYW1lcmFzWzBdLnNldENhbWVy
YVJpZ1BhcmFtZXRlcigicGFyZW50Q2FtZXJhIiwgcmlnUGFyYW1zLnBhcmVudENhbWVyYSk7Cisg
ICAgICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1swXS5fY2FtZXJhUmlnUGFyYW1zLnZyV29ya01hdHJp
eCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TWF0cml4Il0oKTsKKyAgICAgICAgY2FtZXJhLl9yaWdDYW1lcmFzWzBdLmdldFByb2plY3Rpb25N
YXRyaXggPSBjYW1lcmEuX2dldFdlYlZSUHJvamVjdGlvbk1hdHJpeDsKKyAgICAgICAgY2FtZXJh
Ll9yaWdDYW1lcmFzWzBdLnBhcmVudCA9IGNhbWVyYTsKKyAgICAgICAgY2FtZXJhLl9yaWdDYW1l
cmFzWzBdLl9nZXRWaWV3TWF0cml4ID0gY2FtZXJhLl9nZXRXZWJWUlZpZXdNYXRyaXg7CisgICAg
ICAgIC8vUmlnaHQgZXllCisgICAgICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1sxXS52aWV3cG9ydCA9
IG5ldyBfTWF0aHNfbWF0aF92aWV3cG9ydF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJW
aWV3cG9ydCJdKDAuNSwgMCwgMC41LCAxLjApOworICAgICAgICBjYW1lcmEuX3JpZ0NhbWVyYXNb
MV0uc2V0Q2FtZXJhUmlnUGFyYW1ldGVyKCdleWVQYXJhbWV0ZXJzJywgcmlnaHRFeWUpOworICAg
ICAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0uc2V0Q2FtZXJhUmlnUGFyYW1ldGVyKCJzcGVjcyIs
IHJpZ1BhcmFtcy5zcGVjcyk7CisgICAgICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1sxXS5zZXRDYW1l
cmFSaWdQYXJhbWV0ZXIoImZyYW1lRGF0YSIsIHJpZ1BhcmFtcy5mcmFtZURhdGEpOworICAgICAg
ICBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0uc2V0Q2FtZXJhUmlnUGFyYW1ldGVyKCJwYXJlbnRDYW1l
cmEiLCByaWdQYXJhbXMucGFyZW50Q2FtZXJhKTsKKyAgICAgICAgY2FtZXJhLl9yaWdDYW1lcmFz
WzFdLl9jYW1lcmFSaWdQYXJhbXMudnJXb3JrTWF0cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXSgpOworICAgICAgICBjYW1l
cmEuX3JpZ0NhbWVyYXNbMV0uZ2V0UHJvamVjdGlvbk1hdHJpeCA9IGNhbWVyYS5fZ2V0V2ViVlJQ
cm9qZWN0aW9uTWF0cml4OworICAgICAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0ucGFyZW50ID0g
Y2FtZXJhOworICAgICAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0uX2dldFZpZXdNYXRyaXggPSBj
YW1lcmEuX2dldFdlYlZSVmlld01hdHJpeDsKKyAgICB9Cit9OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9DYW1lcmFzL1N0ZXJlb3Njb3BpYy9hbmFnbHlwaEFyY1JvdGF0ZUNhbWVyYS50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvU3RlcmVvc2NvcGljL2FuYWdseXBoQXJjUm90YXRl
Q2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBbmFnbHlwaEFyY1Jv
dGF0ZUNhbWVyYSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmFnbHlw
aEFyY1JvdGF0ZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQW5hZ2x5cGhBcmNSb3RhdGVD
YW1lcmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9k
ZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1lcmEgKi8gIi4vQ2FtZXJhcy9jYW1lcmEu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19hcmNSb3RhdGVDYW1lcmFf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL0NhbWVyYXMvYXJjUm90YXRlQ2FtZXJhICovICIuL0NhbWVyYXMvYXJjUm90YXRlQ2FtZXJh
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9N
YXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlICovICIuL25vZGUudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfUmlnTW9kZXNfc3RlcmVvc2NvcGljQW5hZ2x5cGhSaWdNb2RlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9S
aWdNb2Rlcy9zdGVyZW9zY29waWNBbmFnbHlwaFJpZ01vZGUgKi8gIi4vQ2FtZXJhcy9SaWdNb2Rl
cy9zdGVyZW9zY29waWNBbmFnbHlwaFJpZ01vZGUudHMiKTsKKworCisKKworCisvLyBTaWRlIGVm
ZmVjdCBpbXBvcnQgdG8gZGVmaW5lIHRoZSBzdGVyZW9zY29waWMgbW9kZS4KKworX25vZGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiQW5h
Z2x5cGhBcmNSb3RhdGVDYW1lcmEiLCBmdW5jdGlvbiAobmFtZSwgc2NlbmUsIG9wdGlvbnMpIHsK
KyAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEFuYWdseXBoQXJjUm90YXRlQ2Ft
ZXJhKG5hbWUsIDAsIDAsIDEuMCwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCksIG9wdGlvbnMuaW50ZXJheGlhbF9kaXN0YW5j
ZSwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIENhbWVyYSB1c2VkIHRvIHNpbXVsYXRlIGFuYWds
eXBoaWMgcmVuZGVyaW5nIChiYXNlZCBvbiBBcmNSb3RhdGVDYW1lcmEpCisgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI2FuYWdseXBoLWNhbWVyYXMKKyAq
LwordmFyIEFuYWdseXBoQXJjUm90YXRlQ2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0
ZW5kcyJdKEFuYWdseXBoQXJjUm90YXRlQ2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgQW5hZ2x5cGhBcmNSb3RhdGVDYW1lcmEKKyAgICAgKiBAcGFyYW0gbmFt
ZSBkZWZpbmVzIGNhbWVyYSBuYW1lCisgICAgICogQHBhcmFtIGFscGhhIGRlZmluZXMgYWxwaGEg
YW5nbGUgKGluIHJhZGlhbnMpCisgICAgICogQHBhcmFtIGJldGEgZGVmaW5lcyBiZXRhIGFuZ2xl
IChpbiByYWRpYW5zKQorICAgICAqIEBwYXJhbSByYWRpdXMgZGVmaW5lcyByYWRpdXMKKyAgICAg
KiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgY2FtZXJhIHRhcmdldAorICAgICAqIEBwYXJhbSBpbnRl
cmF4aWFsRGlzdGFuY2UgZGVmaW5lcyBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggY29sb3IgYXhpcwor
ICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICovCisg
ICAgZnVuY3Rpb24gQW5hZ2x5cGhBcmNSb3RhdGVDYW1lcmEobmFtZSwgYWxwaGEsIGJldGEsIHJh
ZGl1cywgdGFyZ2V0LCBpbnRlcmF4aWFsRGlzdGFuY2UsIHNjZW5lKSB7CisgICAgICAgIHZhciBf
dGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIGFscGhhLCBiZXRhLCByYWRpdXMsIHRhcmdl
dCwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmludGVyYXhpYWxEaXN0YW5jZSA9IGlu
dGVyYXhpYWxEaXN0YW5jZTsKKyAgICAgICAgX3RoaXMuc2V0Q2FtZXJhUmlnTW9kZShfQ2FtZXJh
c19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ2FtZXJhIl0uUklHX01PREVf
U1RFUkVPU0NPUElDX0FOQUdMWVBILCB7IGludGVyYXhpYWxEaXN0YW5jZTogaW50ZXJheGlhbERp
c3RhbmNlIH0pOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAq
IEdldHMgY2FtZXJhIGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyBBbmFnbHlwaEFyY1JvdGF0
ZUNhbWVyYQorICAgICAqLworICAgIEFuYWdseXBoQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZS5n
ZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQW5hZ2x5cGhBcmNS
b3RhdGVDYW1lcmEiOworICAgIH07CisgICAgcmV0dXJuIEFuYWdseXBoQXJjUm90YXRlQ2FtZXJh
OworfShfQ2FtZXJhc19hcmNSb3RhdGVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQXJjUm90YXRlQ2FtZXJhIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1l
cmFzL1N0ZXJlb3Njb3BpYy9hbmFnbHlwaEZyZWVDYW1lcmEudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2Ft
ZXJhcy9TdGVyZW9zY29waWMvYW5hZ2x5cGhGcmVlQ2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogQW5hZ2x5cGhGcmVlQ2FtZXJhICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkFuYWdseXBoRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQW5h
Z2x5cGhGcmVlQ2FtZXJhOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIg
Ki8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhICovICIuL0NhbWVy
YXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfZnJlZUNh
bWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vQ2FtZXJhcy9mcmVlQ2FtZXJhICovICIuL0NhbWVyYXMvZnJlZUNhbWVyYS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMv
bWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1JpZ01vZGVzX3N0ZXJlb3Njb3BpY0FuYWdseXBoUmlnTW9kZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmlnTW9k
ZXMvc3RlcmVvc2NvcGljQW5hZ2x5cGhSaWdNb2RlICovICIuL0NhbWVyYXMvUmlnTW9kZXMvc3Rl
cmVvc2NvcGljQW5hZ2x5cGhSaWdNb2RlLnRzIik7CisKKworCisKKworLy8gU2lkZSBlZmZlY3Qg
aW1wb3J0IHRvIGRlZmluZSB0aGUgc3RlcmVvc2NvcGljIG1vZGUuCisKK19ub2RlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGUiXS5BZGROb2RlQ29uc3RydWN0b3IoIkFuYWdseXBo
RnJlZUNhbWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSwgb3B0aW9ucykgeworICAgIHJldHVy
biBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQW5hZ2x5cGhGcmVlQ2FtZXJhKG5hbWUsIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVy
bygpLCBvcHRpb25zLmludGVyYXhpYWxfZGlzdGFuY2UsIHNjZW5lKTsgfTsKK30pOworLyoqCisg
KiBDYW1lcmEgdXNlZCB0byBzaW11bGF0ZSBhbmFnbHlwaGljIHJlbmRlcmluZyAoYmFzZWQgb24g
RnJlZUNhbWVyYSkKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL2Nh
bWVyYXMjYW5hZ2x5cGgtY2FtZXJhcworICovCit2YXIgQW5hZ2x5cGhGcmVlQ2FtZXJhID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEFuYWdseXBoRnJlZUNhbWVyYSwgX3N1cGVyKTsK
KyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEFuYWdseXBoRnJlZUNhbWVyYQorICAgICAq
IEBwYXJhbSBuYW1lIGRlZmluZXMgY2FtZXJhIG5hbWUKKyAgICAgKiBAcGFyYW0gcG9zaXRpb24g
ZGVmaW5lcyBpbml0aWFsIHBvc2l0aW9uCisgICAgICogQHBhcmFtIGludGVyYXhpYWxEaXN0YW5j
ZSBkZWZpbmVzIGRpc3RhbmNlIGJldHdlZW4gZWFjaCBjb2xvciBheGlzCisgICAgICogQHBhcmFt
IHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBB
bmFnbHlwaEZyZWVDYW1lcmEobmFtZSwgcG9zaXRpb24sIGludGVyYXhpYWxEaXN0YW5jZSwgc2Nl
bmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgcG9zaXRp
b24sIHNjZW5lKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5pbnRlcmF4aWFsRGlzdGFuY2UgPSBp
bnRlcmF4aWFsRGlzdGFuY2U7CisgICAgICAgIF90aGlzLnNldENhbWVyYVJpZ01vZGUoX0NhbWVy
YXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNhbWVyYSJdLlJJR19NT0RF
X1NURVJFT1NDT1BJQ19BTkFHTFlQSCwgeyBpbnRlcmF4aWFsRGlzdGFuY2U6IGludGVyYXhpYWxE
aXN0YW5jZSB9KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAg
KiBHZXRzIGNhbWVyYSBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgQW5hZ2x5cGhGcmVlQ2Ft
ZXJhCisgICAgICovCisgICAgQW5hZ2x5cGhGcmVlQ2FtZXJhLnByb3RvdHlwZS5nZXRDbGFzc05h
bWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQW5hZ2x5cGhGcmVlQ2FtZXJhIjsK
KyAgICB9OworICAgIHJldHVybiBBbmFnbHlwaEZyZWVDYW1lcmE7Cit9KF9DYW1lcmFzX2ZyZWVD
YW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRnJlZUNhbWVyYSJdKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMvYW5hZ2x5cGhHYW1l
cGFkQ2FtZXJhLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvU3RlcmVvc2NvcGljL2FuYWds
eXBoR2FtZXBhZENhbWVyYS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuYWds
eXBoR2FtZXBhZENhbWVyYSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJB
bmFnbHlwaEdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFuYWdseXBoR2FtZXBh
ZENhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9u
b2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVyYSAqLyAiLi9DYW1lcmFzL2NhbWVy
YS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2dhbWVwYWRDYW1lcmFf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL0NhbWVyYXMvZ2FtZXBhZENhbWVyYSAqLyAiLi9DYW1lcmFzL2dhbWVwYWRDYW1lcmEudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhz
L21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9SaWdNb2Rlc19zdGVyZW9zY29waWNBbmFnbHlwaFJpZ01vZGVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1JpZ01v
ZGVzL3N0ZXJlb3Njb3BpY0FuYWdseXBoUmlnTW9kZSAqLyAiLi9DYW1lcmFzL1JpZ01vZGVzL3N0
ZXJlb3Njb3BpY0FuYWdseXBoUmlnTW9kZS50cyIpOworCisKKworCisKKy8vIFNpZGUgZWZmZWN0
IGltcG9ydCB0byBkZWZpbmUgdGhlIHN0ZXJlb3Njb3BpYyBtb2RlLgorCitfbm9kZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlIl0uQWRkTm9kZUNvbnN0cnVjdG9yKCJBbmFnbHlw
aEdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbiAobmFtZSwgc2NlbmUsIG9wdGlvbnMpIHsKKyAgICBy
ZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEFuYWdseXBoR2FtZXBhZENhbWVyYShuYW1l
LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9y
MyJdLlplcm8oKSwgb3B0aW9ucy5pbnRlcmF4aWFsX2Rpc3RhbmNlLCBzY2VuZSk7IH07Cit9KTsK
Ky8qKgorICogQ2FtZXJhIHVzZWQgdG8gc2ltdWxhdGUgYW5hZ2x5cGhpYyByZW5kZXJpbmcgKGJh
c2VkIG9uIEdhbWVwYWRDYW1lcmEpCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9m
ZWF0dXJlcy9jYW1lcmFzI2FuYWdseXBoLWNhbWVyYXMKKyAqLwordmFyIEFuYWdseXBoR2FtZXBh
ZENhbWVyYSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShBbmFnbHlwaEdhbWVwYWRD
YW1lcmEsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBBbmFnbHlwaEdh
bWVwYWRDYW1lcmEKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIGNhbWVyYSBuYW1lCisgICAg
ICogQHBhcmFtIHBvc2l0aW9uIGRlZmluZXMgaW5pdGlhbCBwb3NpdGlvbgorICAgICAqIEBwYXJh
bSBpbnRlcmF4aWFsRGlzdGFuY2UgZGVmaW5lcyBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggY29sb3Ig
YXhpcworICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAg
ICovCisgICAgZnVuY3Rpb24gQW5hZ2x5cGhHYW1lcGFkQ2FtZXJhKG5hbWUsIHBvc2l0aW9uLCBp
bnRlcmF4aWFsRGlzdGFuY2UsIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5j
YWxsKHRoaXMsIG5hbWUsIHBvc2l0aW9uLCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMu
aW50ZXJheGlhbERpc3RhbmNlID0gaW50ZXJheGlhbERpc3RhbmNlOworICAgICAgICBfdGhpcy5z
ZXRDYW1lcmFSaWdNb2RlKF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJDYW1lcmEiXS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNfQU5BR0xZUEgsIHsgaW50ZXJheGlh
bERpc3RhbmNlOiBpbnRlcmF4aWFsRGlzdGFuY2UgfSk7CisgICAgICAgIHJldHVybiBfdGhpczsK
KyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBjYW1lcmEgY2xhc3MgbmFtZQorICAgICAqIEBy
ZXR1cm5zIEFuYWdseXBoR2FtZXBhZENhbWVyYQorICAgICAqLworICAgIEFuYWdseXBoR2FtZXBh
ZENhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gIkFuYWdseXBoR2FtZXBhZENhbWVyYSI7CisgICAgfTsKKyAgICByZXR1cm4gQW5hZ2x5
cGhHYW1lcGFkQ2FtZXJhOworfShfQ2FtZXJhc19nYW1lcGFkQ2FtZXJhX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkdhbWVwYWRDYW1lcmEiXSkpOworCisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL0NhbWVyYXMvU3RlcmVvc2NvcGljL2FuYWdseXBoVW5pdmVyc2FsQ2FtZXJhLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9TdGVyZW9zY29waWMvYW5hZ2x5cGhVbml2ZXJzYWxD
YW1lcmEudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuYWdseXBoVW5pdmVy
c2FsQ2FtZXJhICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuYWdseXBo
VW5pdmVyc2FsQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBbmFnbHlwaFVuaXZlcnNhbENh
bWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2Rl
X21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVyYSAqLyAiLi9DYW1lcmFzL2NhbWVyYS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX3VuaXZlcnNhbENhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vQ2FtZXJhcy91bml2ZXJzYWxDYW1lcmEgKi8gIi4vQ2FtZXJhcy91bml2ZXJzYWxDYW1lcmEu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9SaWdNb2Rlc19zdGVyZW9zY29waWNBbmFnbHlwaFJpZ01vZGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1Jp
Z01vZGVzL3N0ZXJlb3Njb3BpY0FuYWdseXBoUmlnTW9kZSAqLyAiLi9DYW1lcmFzL1JpZ01vZGVz
L3N0ZXJlb3Njb3BpY0FuYWdseXBoUmlnTW9kZS50cyIpOworCisKKworCisKKy8vIFNpZGUgZWZm
ZWN0IGltcG9ydCB0byBkZWZpbmUgdGhlIHN0ZXJlb3Njb3BpYyBtb2RlLgorCitfbm9kZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlIl0uQWRkTm9kZUNvbnN0cnVjdG9yKCJBbmFn
bHlwaFVuaXZlcnNhbENhbWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSwgb3B0aW9ucykgewor
ICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQW5hZ2x5cGhVbml2ZXJzYWxDYW1l
cmEobmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXS5aZXJvKCksIG9wdGlvbnMuaW50ZXJheGlhbF9kaXN0YW5jZSwgc2NlbmUpOyB9
OworfSk7CisvKioKKyAqIENhbWVyYSB1c2VkIHRvIHNpbXVsYXRlIGFuYWdseXBoaWMgcmVuZGVy
aW5nIChiYXNlZCBvbiBVbml2ZXJzYWxDYW1lcmEpCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxv
bmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI2FuYWdseXBoLWNhbWVyYXMKKyAqLwordmFyIEFuYWds
eXBoVW5pdmVyc2FsQ2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgewor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEFuYWds
eXBoVW5pdmVyc2FsQ2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBu
ZXcgQW5hZ2x5cGhVbml2ZXJzYWxDYW1lcmEKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIGNh
bWVyYSBuYW1lCisgICAgICogQHBhcmFtIHBvc2l0aW9uIGRlZmluZXMgaW5pdGlhbCBwb3NpdGlv
bgorICAgICAqIEBwYXJhbSBpbnRlcmF4aWFsRGlzdGFuY2UgZGVmaW5lcyBkaXN0YW5jZSBiZXR3
ZWVuIGVhY2ggY29sb3IgYXhpcworICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0
aW5nIHNjZW5lCisgICAgICovCisgICAgZnVuY3Rpb24gQW5hZ2x5cGhVbml2ZXJzYWxDYW1lcmEo
bmFtZSwgcG9zaXRpb24sIGludGVyYXhpYWxEaXN0YW5jZSwgc2NlbmUpIHsKKyAgICAgICAgdmFy
IF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgcG9zaXRpb24sIHNjZW5lKSB8fCB0aGlz
OworICAgICAgICBfdGhpcy5pbnRlcmF4aWFsRGlzdGFuY2UgPSBpbnRlcmF4aWFsRGlzdGFuY2U7
CisgICAgICAgIF90aGlzLnNldENhbWVyYVJpZ01vZGUoX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19BTkFH
TFlQSCwgeyBpbnRlcmF4aWFsRGlzdGFuY2U6IGludGVyYXhpYWxEaXN0YW5jZSB9KTsKKyAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIGNhbWVyYSBjbGFz
cyBuYW1lCisgICAgICogQHJldHVybnMgQW5hZ2x5cGhVbml2ZXJzYWxDYW1lcmEKKyAgICAgKi8K
KyAgICBBbmFnbHlwaFVuaXZlcnNhbENhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkFuYWdseXBoVW5pdmVyc2FsQ2FtZXJhIjsKKyAg
ICB9OworICAgIHJldHVybiBBbmFnbHlwaFVuaXZlcnNhbENhbWVyYTsKK30oX0NhbWVyYXNfdW5p
dmVyc2FsQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlVuaXZlcnNhbENhbWVy
YSJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMv
aW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9DYW1lcmFzL1N0ZXJlb3Njb3BpYy9pbmRleC50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
QW5hZ2x5cGhBcmNSb3RhdGVDYW1lcmEsIEFuYWdseXBoRnJlZUNhbWVyYSwgQW5hZ2x5cGhHYW1l
cGFkQ2FtZXJhLCBBbmFnbHlwaFVuaXZlcnNhbENhbWVyYSwgU3RlcmVvc2NvcGljQXJjUm90YXRl
Q2FtZXJhLCBTdGVyZW9zY29waWNGcmVlQ2FtZXJhLCBTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJh
LCBTdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9hbmFnbHlwaEFyY1JvdGF0ZUNhbWVyYV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hbmFnbHlwaEFyY1Jv
dGF0ZUNhbWVyYSAqLyAiLi9DYW1lcmFzL1N0ZXJlb3Njb3BpYy9hbmFnbHlwaEFyY1JvdGF0ZUNh
bWVyYS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmFnbHlwaEFyY1JvdGF0ZUNhbWVyYSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2FuYWdseXBoQXJjUm90YXRlQ2FtZXJhX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkFuYWdseXBoQXJjUm90YXRlQ2FtZXJhIl07IH0pOworCisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2FuYWdseXBoRnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hbmFnbHlwaEZyZWVDYW1lcmEg
Ki8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMvYW5hZ2x5cGhGcmVlQ2FtZXJhLnRzIik7CisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkFuYWdseXBoRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Fu
YWdseXBoRnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBbmFnbHlwaEZy
ZWVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5hZ2x5cGhHYW1l
cGFkQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2FuYWdseXBoR2FtZXBhZENhbWVyYSAqLyAiLi9DYW1lcmFzL1N0ZXJlb3Njb3Bp
Yy9hbmFnbHlwaEdhbWVwYWRDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5hZ2x5cGhH
YW1lcGFkQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYW5hZ2x5cGhHYW1lcGFkQ2FtZXJh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFuYWdseXBoR2FtZXBhZENhbWVyYSJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hbmFnbHlwaFVuaXZlcnNhbENhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9h
bmFnbHlwaFVuaXZlcnNhbENhbWVyYSAqLyAiLi9DYW1lcmFzL1N0ZXJlb3Njb3BpYy9hbmFnbHlw
aFVuaXZlcnNhbENhbWVyYS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmFnbHlwaFVuaXZlcnNh
bENhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FuYWdseXBoVW5pdmVyc2FsQ2FtZXJhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFuYWdseXBoVW5pdmVyc2FsQ2FtZXJhIl07IH0p
OworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N0ZXJlb3Njb3BpY0FyY1JvdGF0ZUNhbWVy
YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9zdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMv
c3RlcmVvc2NvcGljQXJjUm90YXRlQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJl
b3Njb3BpY0FyY1JvdGF0ZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N0ZXJlb3Njb3Bp
Y0FyY1JvdGF0ZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTdGVyZW9zY29w
aWNBcmNSb3RhdGVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3Rl
cmVvc2NvcGljRnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9zdGVyZW9zY29waWNGcmVlQ2FtZXJhICovICIuL0NhbWVyYXMv
U3RlcmVvc2NvcGljL3N0ZXJlb3Njb3BpY0ZyZWVDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiU3RlcmVvc2NvcGljRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N0ZXJlb3Nj
b3BpY0ZyZWVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU3RlcmVvc2NvcGlj
RnJlZUNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdGVyZW9zY29w
aWNHYW1lcGFkQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL3N0ZXJlb3Njb3BpY0dhbWVwYWRDYW1lcmEgKi8gIi4vQ2FtZXJhcy9T
dGVyZW9zY29waWMvc3RlcmVvc2NvcGljR2FtZXBhZENhbWVyYS50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3Rl
cmVvc2NvcGljR2FtZXBhZENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTdGVy
ZW9zY29waWNHYW1lcGFkQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3N0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEg
Ki8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMvc3RlcmVvc2NvcGljVW5pdmVyc2FsQ2FtZXJhLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX3N0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfN19fWyJTdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEiXTsgfSk7CisKKwor
CisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvU3RlcmVvc2Nv
cGljL3N0ZXJlb3Njb3BpY0FyY1JvdGF0ZUNhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9DYW1lcmFzL1N0ZXJlb3Njb3BpYy9zdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTdGVyZW9zY29waWNBcmNSb3RhdGVD
YW1lcmEgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RlcmVvc2NvcGlj
QXJjUm90YXRlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdGVyZW9zY29waWNBcmNSb3Rh
dGVDYW1lcmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1lcmEgKi8gIi4vQ2FtZXJhcy9jYW1l
cmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19hcmNSb3RhdGVDYW1l
cmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL0NhbWVyYXMvYXJjUm90YXRlQ2FtZXJhICovICIuL0NhbWVyYXMvYXJjUm90YXRlQ2Ft
ZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlICovICIuL25vZGUudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfUmlnTW9kZXNfc3RlcmVvc2NvcGljUmlnTW9kZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmlnTW9k
ZXMvc3RlcmVvc2NvcGljUmlnTW9kZSAqLyAiLi9DYW1lcmFzL1JpZ01vZGVzL3N0ZXJlb3Njb3Bp
Y1JpZ01vZGUudHMiKTsKKworCisKKworCisvLyBTaWRlIGVmZmVjdCBpbXBvcnQgdG8gZGVmaW5l
IHRoZSBzdGVyZW9zY29waWMgbW9kZS4KKworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiU3RlcmVvc2NvcGljQXJjUm90YXRlQ2Ft
ZXJhIiwgZnVuY3Rpb24gKG5hbWUsIHNjZW5lLCBvcHRpb25zKSB7CisgICAgcmV0dXJuIGZ1bmN0
aW9uICgpIHsgcmV0dXJuIG5ldyBTdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEobmFtZSwgMCwg
MCwgMS4wLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdLlplcm8oKSwgb3B0aW9ucy5pbnRlcmF4aWFsX2Rpc3RhbmNlLCBvcHRpb25zLmlz
U3RlcmVvc2NvcGljU2lkZUJ5U2lkZSwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIENhbWVyYSB1
c2VkIHRvIHNpbXVsYXRlIHN0ZXJlb3Njb3BpYyByZW5kZXJpbmcgKGJhc2VkIG9uIEFyY1JvdGF0
ZUNhbWVyYSkKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL2NhbWVy
YXMKKyAqLwordmFyIFN0ZXJlb3Njb3BpY0FyY1JvdGF0ZUNhbWVyYSA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShTdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEsIF9zdXBlcik7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBTdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEK
KyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIGNhbWVyYSBuYW1lCisgICAgICogQHBhcmFtIGFs
cGhhIGRlZmluZXMgYWxwaGEgYW5nbGUgKGluIHJhZGlhbnMpCisgICAgICogQHBhcmFtIGJldGEg
ZGVmaW5lcyBiZXRhIGFuZ2xlIChpbiByYWRpYW5zKQorICAgICAqIEBwYXJhbSByYWRpdXMgZGVm
aW5lcyByYWRpdXMKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgY2FtZXJhIHRhcmdldAor
ICAgICAqIEBwYXJhbSBpbnRlcmF4aWFsRGlzdGFuY2UgZGVmaW5lcyBkaXN0YW5jZSBiZXR3ZWVu
IGVhY2ggY29sb3IgYXhpcworICAgICAqIEBwYXJhbSBpc1N0ZXJlb3Njb3BpY1NpZGVCeVNpZGUg
ZGVmaW5lcyBpcyBzdGVyZW9zY29waWMgaXMgZG9uZSBzaWRlIGJ5IHNpZGUgb3Igb3ZlciB1bmRl
cgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICov
CisgICAgZnVuY3Rpb24gU3RlcmVvc2NvcGljQXJjUm90YXRlQ2FtZXJhKG5hbWUsIGFscGhhLCBi
ZXRhLCByYWRpdXMsIHRhcmdldCwgaW50ZXJheGlhbERpc3RhbmNlLCBpc1N0ZXJlb3Njb3BpY1Np
ZGVCeVNpZGUsIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMs
IG5hbWUsIGFscGhhLCBiZXRhLCByYWRpdXMsIHRhcmdldCwgc2NlbmUpIHx8IHRoaXM7CisgICAg
ICAgIF90aGlzLmludGVyYXhpYWxEaXN0YW5jZSA9IGludGVyYXhpYWxEaXN0YW5jZTsKKyAgICAg
ICAgX3RoaXMuaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlID0gaXNTdGVyZW9zY29waWNTaWRlQnlT
aWRlOworICAgICAgICBfdGhpcy5zZXRDYW1lcmFSaWdNb2RlKGlzU3RlcmVvc2NvcGljU2lkZUJ5
U2lkZSA/IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDYW1l
cmEiXS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNfU0lERUJZU0lERV9QQVJBTExFTCA6IF9DYW1lcmFz
X2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDYW1lcmEiXS5SSUdfTU9ERV9T
VEVSRU9TQ09QSUNfT1ZFUlVOREVSLCB7IGludGVyYXhpYWxEaXN0YW5jZTogaW50ZXJheGlhbERp
c3RhbmNlIH0pOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAq
IEdldHMgY2FtZXJhIGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyBTdGVyZW9zY29waWNBcmNS
b3RhdGVDYW1lcmEKKyAgICAgKi8KKyAgICBTdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEucHJv
dG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJTdGVy
ZW9zY29waWNBcmNSb3RhdGVDYW1lcmEiOworICAgIH07CisgICAgcmV0dXJuIFN0ZXJlb3Njb3Bp
Y0FyY1JvdGF0ZUNhbWVyYTsKK30oX0NhbWVyYXNfYXJjUm90YXRlQ2FtZXJhX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIkFyY1JvdGF0ZUNhbWVyYSJdKSk7CisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMvc3RlcmVvc2NvcGljRnJlZUNhbWVyYS50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9TdGVyZW9zY29waWMvc3RlcmVvc2NvcGljRnJl
ZUNhbWVyYS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTdGVyZW9zY29waWNG
cmVlQ2FtZXJhICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Nj
b3BpY0ZyZWVDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN0ZXJlb3Njb3BpY0ZyZWVDYW1l
cmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9D
YW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1lcmEgKi8gIi4vQ2FtZXJhcy9jYW1lcmEudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19mcmVlQ2FtZXJhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1l
cmFzL2ZyZWVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9mcmVlQ2FtZXJhLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAq
LyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9u
b2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9ub2RlICovICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
UmlnTW9kZXNfc3RlcmVvc2NvcGljUmlnTW9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmlnTW9kZXMvc3RlcmVvc2NvcGljUmlnTW9k
ZSAqLyAiLi9DYW1lcmFzL1JpZ01vZGVzL3N0ZXJlb3Njb3BpY1JpZ01vZGUudHMiKTsKKworCisK
KworCisvLyBTaWRlIGVmZmVjdCBpbXBvcnQgdG8gZGVmaW5lIHRoZSBzdGVyZW9zY29waWMgbW9k
ZS4KKworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZSJdLkFkZE5vZGVD
b25zdHJ1Y3RvcigiU3RlcmVvc2NvcGljRnJlZUNhbWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2Vu
ZSwgb3B0aW9ucykgeworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3RlcmVv
c2NvcGljRnJlZUNhbWVyYShuYW1lLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKSwgb3B0aW9ucy5pbnRlcmF4aWFsX2Rpc3Rh
bmNlLCBvcHRpb25zLmlzU3RlcmVvc2NvcGljU2lkZUJ5U2lkZSwgc2NlbmUpOyB9OworfSk7Cisv
KioKKyAqIENhbWVyYSB1c2VkIHRvIHNpbXVsYXRlIHN0ZXJlb3Njb3BpYyByZW5kZXJpbmcgKGJh
c2VkIG9uIEZyZWVDYW1lcmEpCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0
dXJlcy9jYW1lcmFzCisgKi8KK3ZhciBTdGVyZW9zY29waWNGcmVlQ2FtZXJhID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKFN0ZXJlb3Njb3BpY0ZyZWVDYW1lcmEsIF9zdXBlcik7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBTdGVyZW9zY29waWNGcmVlQ2FtZXJhCisgICAg
ICogQHBhcmFtIG5hbWUgZGVmaW5lcyBjYW1lcmEgbmFtZQorICAgICAqIEBwYXJhbSBwb3NpdGlv
biBkZWZpbmVzIGluaXRpYWwgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gaW50ZXJheGlhbERpc3Rh
bmNlIGRlZmluZXMgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIGNvbG9yIGF4aXMKKyAgICAgKiBAcGFy
YW0gaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlIGRlZmluZXMgaXMgc3RlcmVvc2NvcGljIGlzIGRv
bmUgc2lkZSBieSBzaWRlIG9yIG92ZXIgdW5kZXIKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5l
cyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIFN0ZXJlb3Njb3BpY0Zy
ZWVDYW1lcmEobmFtZSwgcG9zaXRpb24sIGludGVyYXhpYWxEaXN0YW5jZSwgaXNTdGVyZW9zY29w
aWNTaWRlQnlTaWRlLCBzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0
aGlzLCBuYW1lLCBwb3NpdGlvbiwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmludGVy
YXhpYWxEaXN0YW5jZSA9IGludGVyYXhpYWxEaXN0YW5jZTsKKyAgICAgICAgX3RoaXMuaXNTdGVy
ZW9zY29waWNTaWRlQnlTaWRlID0gaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlOworICAgICAgICBf
dGhpcy5zZXRDYW1lcmFSaWdNb2RlKGlzU3RlcmVvc2NvcGljU2lkZUJ5U2lkZSA/IF9DYW1lcmFz
X2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDYW1lcmEiXS5SSUdfTU9ERV9T
VEVSRU9TQ09QSUNfU0lERUJZU0lERV9QQVJBTExFTCA6IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDYW1lcmEiXS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNfT1ZF
UlVOREVSLCB7IGludGVyYXhpYWxEaXN0YW5jZTogaW50ZXJheGlhbERpc3RhbmNlIH0pOworICAg
ICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgY2FtZXJhIGNs
YXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyBTdGVyZW9zY29waWNGcmVlQ2FtZXJhCisgICAgICov
CisgICAgU3RlcmVvc2NvcGljRnJlZUNhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlN0ZXJlb3Njb3BpY0ZyZWVDYW1lcmEiOworICAg
IH07CisgICAgcmV0dXJuIFN0ZXJlb3Njb3BpY0ZyZWVDYW1lcmE7Cit9KF9DYW1lcmFzX2ZyZWVD
YW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRnJlZUNhbWVyYSJdKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMvc3RlcmVvc2NvcGlj
R2FtZXBhZENhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9TdGVyZW9zY29w
aWMvc3RlcmVvc2NvcGljR2FtZXBhZENhbWVyYS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Njb3BpY0dhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFN0ZXJlb3Njb3BpY0dhbWVwYWRDYW1lcmE7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5q
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJh
cy9jYW1lcmEgKi8gIi4vQ2FtZXJhcy9jYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfQ2FtZXJhc19nYW1lcGFkQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2dhbWVwYWRDYW1lcmEgKi8g
Ii4vQ2FtZXJhcy9nYW1lcGFkQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRo
LnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlICov
ICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUmlnTW9kZXNfc3RlcmVv
c2NvcGljUmlnTW9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vUmlnTW9kZXMvc3RlcmVvc2NvcGljUmlnTW9kZSAqLyAiLi9DYW1lcmFz
L1JpZ01vZGVzL3N0ZXJlb3Njb3BpY1JpZ01vZGUudHMiKTsKKworCisKKworCisvLyBTaWRlIGVm
ZmVjdCBpbXBvcnQgdG8gZGVmaW5lIHRoZSBzdGVyZW9zY29waWMgbW9kZS4KKworX25vZGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiU3Rl
cmVvc2NvcGljR2FtZXBhZENhbWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSwgb3B0aW9ucykg
eworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3RlcmVvc2NvcGljR2FtZXBh
ZENhbWVyYShuYW1lLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVjdG9yMyJdLlplcm8oKSwgb3B0aW9ucy5pbnRlcmF4aWFsX2Rpc3RhbmNlLCBvcHRp
b25zLmlzU3RlcmVvc2NvcGljU2lkZUJ5U2lkZSwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIENh
bWVyYSB1c2VkIHRvIHNpbXVsYXRlIHN0ZXJlb3Njb3BpYyByZW5kZXJpbmcgKGJhc2VkIG9uIEdh
bWVwYWRDYW1lcmEpCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9j
YW1lcmFzCisgKi8KK3ZhciBTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZXh0ZW5kcyJdKFN0ZXJlb3Njb3BpY0dhbWVwYWRDYW1lcmEsIF9zdXBlcik7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhCisg
ICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyBjYW1lcmEgbmFtZQorICAgICAqIEBwYXJhbSBwb3Np
dGlvbiBkZWZpbmVzIGluaXRpYWwgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gaW50ZXJheGlhbERp
c3RhbmNlIGRlZmluZXMgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIGNvbG9yIGF4aXMKKyAgICAgKiBA
cGFyYW0gaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlIGRlZmluZXMgaXMgc3RlcmVvc2NvcGljIGlz
IGRvbmUgc2lkZSBieSBzaWRlIG9yIG92ZXIgdW5kZXIKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVm
aW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIFN0ZXJlb3Njb3Bp
Y0dhbWVwYWRDYW1lcmEobmFtZSwgcG9zaXRpb24sIGludGVyYXhpYWxEaXN0YW5jZSwgaXNTdGVy
ZW9zY29waWNTaWRlQnlTaWRlLCBzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIu
Y2FsbCh0aGlzLCBuYW1lLCBwb3NpdGlvbiwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlz
LmludGVyYXhpYWxEaXN0YW5jZSA9IGludGVyYXhpYWxEaXN0YW5jZTsKKyAgICAgICAgX3RoaXMu
aXNTdGVyZW9zY29waWNTaWRlQnlTaWRlID0gaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlOworICAg
ICAgICBfdGhpcy5zZXRDYW1lcmFSaWdNb2RlKGlzU3RlcmVvc2NvcGljU2lkZUJ5U2lkZSA/IF9D
YW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDYW1lcmEiXS5SSUdf
TU9ERV9TVEVSRU9TQ09QSUNfU0lERUJZU0lERV9QQVJBTExFTCA6IF9DYW1lcmFzX2NhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDYW1lcmEiXS5SSUdfTU9ERV9TVEVSRU9TQ09Q
SUNfT1ZFUlVOREVSLCB7IGludGVyYXhpYWxEaXN0YW5jZTogaW50ZXJheGlhbERpc3RhbmNlIH0p
OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgY2Ft
ZXJhIGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyBTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJh
CisgICAgICovCisgICAgU3RlcmVvc2NvcGljR2FtZXBhZENhbWVyYS5wcm90b3R5cGUuZ2V0Q2xh
c3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlN0ZXJlb3Njb3BpY0dhbWVw
YWRDYW1lcmEiOworICAgIH07CisgICAgcmV0dXJuIFN0ZXJlb3Njb3BpY0dhbWVwYWRDYW1lcmE7
Cit9KF9DYW1lcmFzX2dhbWVwYWRDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
R2FtZXBhZENhbWVyYSJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9T
dGVyZW9zY29waWMvc3RlcmVvc2NvcGljVW5pdmVyc2FsQ2FtZXJhLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL0NhbWVyYXMvU3RlcmVvc2NvcGljL3N0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVy
YS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN0ZXJlb3Njb3BpY1Vu
aXZlcnNhbENhbWVyYSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGVy
ZW9zY29waWNVbml2ZXJzYWxDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN0ZXJlb3Njb3Bp
Y1VuaXZlcnNhbENhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGli
ICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVyYSAqLyAiLi9DYW1l
cmFzL2NhbWVyYS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX3VuaXZl
cnNhbENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vQ2FtZXJhcy91bml2ZXJzYWxDYW1lcmEgKi8gIi4vQ2FtZXJhcy91bml2
ZXJzYWxDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGUgKi8gIi4vbm9kZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9SaWdNb2Rlc19zdGVyZW9zY29waWNSaWdNb2Rl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9SaWdNb2Rlcy9zdGVyZW9zY29waWNSaWdNb2RlICovICIuL0NhbWVyYXMvUmlnTW9kZXMvc3Rl
cmVvc2NvcGljUmlnTW9kZS50cyIpOworCisKKworCisKKy8vIFNpZGUgZWZmZWN0IGltcG9ydCB0
byBkZWZpbmUgdGhlIHN0ZXJlb3Njb3BpYyBtb2RlLgorCitfbm9kZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJOb2RlIl0uQWRkTm9kZUNvbnN0cnVjdG9yKCJTdGVyZW9zY29waWNGcmVl
Q2FtZXJhIiwgZnVuY3Rpb24gKG5hbWUsIHNjZW5lLCBvcHRpb25zKSB7CisgICAgcmV0dXJuIGZ1
bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEobmFtZSwg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMi
XS5aZXJvKCksIG9wdGlvbnMuaW50ZXJheGlhbF9kaXN0YW5jZSwgb3B0aW9ucy5pc1N0ZXJlb3Nj
b3BpY1NpZGVCeVNpZGUsIHNjZW5lKTsgfTsKK30pOworLyoqCisgKiBDYW1lcmEgdXNlZCB0byBz
aW11bGF0ZSBzdGVyZW9zY29waWMgcmVuZGVyaW5nIChiYXNlZCBvbiBVbml2ZXJzYWxDYW1lcmEp
CisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzCisgKi8K
K3ZhciBTdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19l
eHRlbmRzIl0oU3RlcmVvc2NvcGljVW5pdmVyc2FsQ2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgYSBuZXcgU3RlcmVvc2NvcGljVW5pdmVyc2FsQ2FtZXJhCisgICAgICog
QHBhcmFtIG5hbWUgZGVmaW5lcyBjYW1lcmEgbmFtZQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBk
ZWZpbmVzIGluaXRpYWwgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gaW50ZXJheGlhbERpc3RhbmNl
IGRlZmluZXMgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIGNvbG9yIGF4aXMKKyAgICAgKiBAcGFyYW0g
aXNTdGVyZW9zY29waWNTaWRlQnlTaWRlIGRlZmluZXMgaXMgc3RlcmVvc2NvcGljIGlzIGRvbmUg
c2lkZSBieSBzaWRlIG9yIG92ZXIgdW5kZXIKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0
aGUgaG9zdGluZyBzY2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIFN0ZXJlb3Njb3BpY1VuaXZl
cnNhbENhbWVyYShuYW1lLCBwb3NpdGlvbiwgaW50ZXJheGlhbERpc3RhbmNlLCBpc1N0ZXJlb3Nj
b3BpY1NpZGVCeVNpZGUsIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxs
KHRoaXMsIG5hbWUsIHBvc2l0aW9uLCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuaW50
ZXJheGlhbERpc3RhbmNlID0gaW50ZXJheGlhbERpc3RhbmNlOworICAgICAgICBfdGhpcy5pc1N0
ZXJlb3Njb3BpY1NpZGVCeVNpZGUgPSBpc1N0ZXJlb3Njb3BpY1NpZGVCeVNpZGU7CisgICAgICAg
IF90aGlzLnNldENhbWVyYVJpZ01vZGUoaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlID8gX0NhbWVy
YXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNhbWVyYSJdLlJJR19NT0RF
X1NURVJFT1NDT1BJQ19TSURFQllTSURFX1BBUkFMTEVMIDogX0NhbWVyYXNfY2FtZXJhX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19P
VkVSVU5ERVIsIHsgaW50ZXJheGlhbERpc3RhbmNlOiBpbnRlcmF4aWFsRGlzdGFuY2UgfSk7Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBjYW1lcmEg
Y2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIFN0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYQor
ICAgICAqLworICAgIFN0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYS5wcm90b3R5cGUuZ2V0Q2xh
c3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlN0ZXJlb3Njb3BpY1VuaXZl
cnNhbENhbWVyYSI7CisgICAgfTsKKyAgICByZXR1cm4gU3RlcmVvc2NvcGljVW5pdmVyc2FsQ2Ft
ZXJhOworfShfQ2FtZXJhc191bml2ZXJzYWxDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVW5pdmVyc2FsQ2FtZXJhIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9D
YW1lcmFzL1ZSL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9DYW1lcmFzL1ZSL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFZSQ2FtZXJhTWV0cmljcywgVlJE
ZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYSwgVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVD
YW1lcmEsIFZSRGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhLCBPbkFmdGVyRW50ZXJpbmdW
Uk9ic2VydmFibGVFdmVudCwgVlJFeHBlcmllbmNlSGVscGVyLCBXZWJWUkZyZWVDYW1lcmEgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92ckNhbWVyYU1ldHJp
Y3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vdnJDYW1lcmFNZXRyaWNzICovICIuL0NhbWVyYXMvVlIvdnJDYW1lcmFNZXRyaWNzLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlZSQ2FtZXJhTWV0cmljcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X3ZyQ2FtZXJhTWV0cmljc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWUkNhbWVyYU1l
dHJpY3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnJEZXZpY2VPcmllbnRh
dGlvbkFyY1JvdGF0ZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi92ckRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhICov
ICIuL0NhbWVyYXMvVlIvdnJEZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYS50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJWUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfdnJEZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2Ft
ZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZyRGV2aWNlT3JpZW50YXRp
b25GcmVlQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3ZyRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhICovICIuL0NhbWVyYXMv
VlIvdnJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
VlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92ckRl
dmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJW
UkRldmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF92ckRldmljZU9yaWVudGF0aW9uR2FtZXBhZENhbWVyYV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi92ckRldmljZU9yaWVudGF0
aW9uR2FtZXBhZENhbWVyYSAqLyAiLi9DYW1lcmFzL1ZSL3ZyRGV2aWNlT3JpZW50YXRpb25HYW1l
cGFkQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGV2aWNlT3JpZW50YXRpb25HYW1l
cGFkQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnJEZXZpY2VPcmllbnRhdGlvbkdhbWVw
YWRDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVlJEZXZpY2VPcmllbnRhdGlv
bkdhbWVwYWRDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnJFeHBl
cmllbmNlSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3ZyRXhwZXJpZW5jZUhlbHBlciAqLyAiLi9DYW1lcmFzL1ZSL3ZyRXhwZXJp
ZW5jZUhlbHBlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPbkFmdGVyRW50ZXJpbmdWUk9ic2Vy
dmFibGVFdmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3ZyRXhwZXJpZW5jZUhlbHBlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJPbkFmdGVyRW50ZXJpbmdWUk9ic2VydmFibGVFdmVu
dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWUkV4cGVyaWVuY2VIZWxwZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF92ckV4cGVyaWVuY2VIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siVlJFeHBlcmllbmNlSGVscGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3dlYlZSQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL3dlYlZSQ2FtZXJhICovICIuL0NhbWVyYXMvVlIvd2ViVlJDYW1lcmEu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViVlJGcmVlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfd2ViVlJDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siV2ViVlJGcmVl
Q2FtZXJhIl07IH0pOworCisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0Nh
bWVyYXMvVlIvdnJDYW1lcmFNZXRyaWNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9WUi92ckNhbWVyYU1ldHJpY3Mu
dHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFZSQ2FtZXJhTWV0cmljcyAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJWUkNhbWVyYU1ldHJpY3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFZS
Q2FtZXJhTWV0cmljczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIp
OworCisvKioKKyAqIFRoaXMgcmVwcmVzZW50cyBhbGwgdGhlIHJlcXVpcmVkIG1ldHJpY3MgdG8g
Y3JlYXRlIGEgVlIgY2FtZXJhLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFi
eWxvbjEwMS9jYW1lcmFzI2RldmljZS1vcmllbnRhdGlvbi1jYW1lcmEKKyAqLwordmFyIFZSQ2Ft
ZXJhTWV0cmljcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBW
UkNhbWVyYU1ldHJpY3MoKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgaWYgdGhl
IGN1cnJlbnQgdnIgY2FtZXJhIHNob3VsZCBjb21wZW5zYXRlIHRoZSBkaXN0b3J0aW9uIG9mIHRo
ZSBsZW5zZSBvciBub3QuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNvbXBlbnNhdGVEaXN0
b3J0aW9uID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaWYgbXVsdGl2
aWV3IHNob3VsZCBiZSBlbmFibGVkIHdoZW4gcmVuZGVyaW5nIChEZWZhdWx0OiBmYWxzZSkKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMubXVsdGl2aWV3RW5hYmxlZCA9IGZhbHNlOworICAgIH0K
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVlJDYW1lcmFNZXRyaWNzLnByb3RvdHlwZSwgImFz
cGVjdFJhdGlvIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgcmVuZGVyaW5n
IGFzcGVjdCByYXRpbyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcmVzb2x1dGlvbnMuCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LmhSZXNvbHV0aW9uIC8gKDIgKiB0aGlzLnZSZXNvbHV0aW9uKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZSQ2FtZXJhTWV0cmljcy5wcm90b3R5cGUsICJh
c3BlY3RSYXRpb0ZvdiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGFzcGVj
dCByYXRpbyBiYXNlZCBvbiB0aGUgRk9WLCBzY2FsZSBmYWN0b3JzLCBhbmQgcmVhbCBzY3JlZW4g
c2l6ZXMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiAoMiAqIE1hdGguYXRhbigodGhpcy5wb3N0UHJvY2Vzc1NjYWxlRmFjdG9yICog
dGhpcy52U2NyZWVuU2l6ZSkgLyAoMiAqIHRoaXMuZXllVG9TY3JlZW5EaXN0YW5jZSkpKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZSQ2FtZXJhTWV0cmlj
cy5wcm90b3R5cGUsICJsZWZ0SE1hdHJpeCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBo
aWRkZW4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgdmFyIG1ldGVycyA9ICh0aGlzLmhTY3JlZW5TaXplIC8gNCkgLSAodGhpcy5sZW5zU2VwYXJh
dGlvbkRpc3RhbmNlIC8gMik7CisgICAgICAgICAgICB2YXIgaCA9ICg0ICogbWV0ZXJzKSAvIHRo
aXMuaFNjcmVlblNpemU7CisgICAgICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlRyYW5zbGF0aW9uKGgsIDAsIDAp
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVlJDYW1lcmFN
ZXRyaWNzLnByb3RvdHlwZSwgInJpZ2h0SE1hdHJpeCIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEBoaWRkZW4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgdmFyIG1ldGVycyA9ICh0aGlzLmhTY3JlZW5TaXplIC8gNCkgLSAodGhpcy5sZW5z
U2VwYXJhdGlvbkRpc3RhbmNlIC8gMik7CisgICAgICAgICAgICB2YXIgaCA9ICg0ICogbWV0ZXJz
KSAvIHRoaXMuaFNjcmVlblNpemU7CisgICAgICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlRyYW5zbGF0aW9uKC1o
LCAwLCAwKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZS
Q2FtZXJhTWV0cmljcy5wcm90b3R5cGUsICJsZWZ0UHJlVmlld01hdHJpeCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5UcmFuc2xhdGlvbigwLjUgKiB0aGlzLmludGVy
cHVwaWxsYXJ5RGlzdGFuY2UsIDAsIDApOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoVlJDYW1lcmFNZXRyaWNzLnByb3RvdHlwZSwgInJpZ2h0UHJlVmlld01h
dHJpeCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5UcmFuc2xhdGlv
bigtMC41ICogdGhpcy5pbnRlcnB1cGlsbGFyeURpc3RhbmNlLCAwLCAwKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLyoqCisgICAgICogR2V0IHRoZSBkZWZhdWx0IFZSTWV0cmljcyBiYXNlZCBv
biB0aGUgbW9zdCBnZW5lcmljIHNldHVwLgorICAgICAqIEByZXR1cm5zIHRoZSBkZWZhdWx0IHZy
IG1ldHJpY3MKKyAgICAgKi8KKyAgICBWUkNhbWVyYU1ldHJpY3MuR2V0RGVmYXVsdCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBWUkNhbWVyYU1ldHJpY3MoKTsKKyAg
ICAgICAgcmVzdWx0LmhSZXNvbHV0aW9uID0gMTI4MDsKKyAgICAgICAgcmVzdWx0LnZSZXNvbHV0
aW9uID0gODAwOworICAgICAgICByZXN1bHQuaFNjcmVlblNpemUgPSAwLjE0OTc1OTk5MzsKKyAg
ICAgICAgcmVzdWx0LnZTY3JlZW5TaXplID0gMC4wOTM1OTk5OTc1OworICAgICAgICByZXN1bHQu
dlNjcmVlbkNlbnRlciA9IDAuMDQ2Nzk5OTk4NzsKKyAgICAgICAgcmVzdWx0LmV5ZVRvU2NyZWVu
RGlzdGFuY2UgPSAwLjA0MTAwMDAwMTE7CisgICAgICAgIHJlc3VsdC5sZW5zU2VwYXJhdGlvbkRp
c3RhbmNlID0gMC4wNjM1MDAwMDIwOworICAgICAgICByZXN1bHQuaW50ZXJwdXBpbGxhcnlEaXN0
YW5jZSA9IDAuMDY0MDAwMDAzMDsKKyAgICAgICAgcmVzdWx0LmRpc3RvcnRpb25LID0gWzEuMCwg
MC4yMTk5OTk5OTksIDAuMjM5OTk5OTk1LCAwLjBdOworICAgICAgICByZXN1bHQuY2hyb21hQWJD
b3JyZWN0aW9uID0gWzAuOTk1OTk5OTkyLCAtMC4wMDQwMDAwMDAxOSwgMS4wMTQwMDAwNiwgMC4w
XTsKKyAgICAgICAgcmVzdWx0LnBvc3RQcm9jZXNzU2NhbGVGYWN0b3IgPSAxLjcxNDYwNTUwNzgw
ODQxMjsKKyAgICAgICAgcmVzdWx0LmxlbnNDZW50ZXJPZmZzZXQgPSAwLjE1MTk3NjQyMTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIHJldHVybiBWUkNhbWVyYU1ldHJpY3M7
Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvVlIvdnJEZXZpY2VP
cmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFz
L1ZSL3ZyRGV2aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmEudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBWUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGV2aWNlT3JpZW50YXRpb25B
cmNSb3RhdGVDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFZSRGV2aWNlT3JpZW50YXRpb25B
cmNSb3RhdGVDYW1lcmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1lcmEgKi8gIi4vQ2FtZXJh
cy9jYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19hcmNSb3Rh
dGVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uLy4uL0NhbWVyYXMvYXJjUm90YXRlQ2FtZXJhICovICIuL0NhbWVyYXMvYXJjUm90
YXRlQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZyQ2FtZXJhTWV0cmlj
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li92ckNhbWVyYU1ldHJpY3MgKi8gIi4vQ2FtZXJhcy9WUi92ckNhbWVyYU1ldHJpY3MudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21h
dGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9JbnB1dHNfYXJjUm90YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9JbnB1dHMvYXJjUm90YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0ICovICIuL0Nh
bWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3JpZW50YXRpb25JbnB1dC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9SaWdNb2Rlc192clJpZ01vZGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1JpZ01vZGVz
L3ZyUmlnTW9kZSAqLyAiLi9DYW1lcmFzL1JpZ01vZGVzL3ZyUmlnTW9kZS50cyIpOworCisKKwor
CisKKworCisvLyBTaWRlIGVmZmVjdCBpbXBvcnQgdG8gZGVmaW5lIHRoZSBzdGVyZW9zY29waWMg
bW9kZS4KKworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTm9kZSJdLkFkZE5v
ZGVDb25zdHJ1Y3RvcigiVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEiLCBmdW5jdGlvbiAo
bmFtZSwgc2NlbmUpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFZSRGV2
aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmEobmFtZSwgMCwgMCwgMS4wLCBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdLlplcm8oKSwg
c2NlbmUpOyB9OworfSk7CisvKioKKyAqIENhbWVyYSB1c2VkIHRvIHNpbXVsYXRlIFZSIHJlbmRl
cmluZyAoYmFzZWQgb24gQXJjUm90YXRlQ2FtZXJhKQorICogQHNlZSBodHRwOi8vZG9jLmJhYnls
b25qcy5jb20vYmFieWxvbjEwMS9jYW1lcmFzI3ZyLWRldmljZS1vcmllbnRhdGlvbi1jYW1lcmFz
CisgKi8KK3ZhciBWUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKFZSRGV2aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmEs
IF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBWUkRldmljZU9yaWVudGF0
aW9uQXJjUm90YXRlQ2FtZXJhCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyBjYW1lcmEgbmFt
ZQorICAgICAqIEBwYXJhbSBhbHBoYSBkZWZpbmVzIHRoZSBjYW1lcmEgcm90YXRpb24gYWxvbmcg
dGhlIGxvZ2l0dWRpbmFsIGF4aXMKKyAgICAgKiBAcGFyYW0gYmV0YSBkZWZpbmVzIHRoZSBjYW1l
cmEgcm90YXRpb24gYWxvbmcgdGhlIGxhdGl0dWRpbmFsIGF4aXMKKyAgICAgKiBAcGFyYW0gcmFk
aXVzIGRlZmluZXMgdGhlIGNhbWVyYSBkaXN0YW5jZSBmcm9tIGl0cyB0YXJnZXQKKyAgICAgKiBA
cGFyYW0gdGFyZ2V0IGRlZmluZXMgdGhlIGNhbWVyYSB0YXJnZXQKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgZGVmaW5lcyB0aGUgc2NlbmUgdGhlIGNhbWVyYSBiZWxvbmdzIHRvCisgICAgICogQHBhcmFt
IGNvbXBlbnNhdGVEaXN0b3J0aW9uIGRlZmluZXMgaWYgdGhlIGNhbWVyYSBuZWVkcyB0byBjb21w
ZW5zYXRlIHRoZSBsZW5zIGRpc3RvcnNpb24KKyAgICAgKiBAcGFyYW0gdnJDYW1lcmFNZXRyaWNz
IGRlZmluZXMgdGhlIHZyIG1ldHJpY3MgYXNzb2NpYXRlZCB0byB0aGUgY2FtZXJhCisgICAgICov
CisgICAgZnVuY3Rpb24gVlJEZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYShuYW1lLCBh
bHBoYSwgYmV0YSwgcmFkaXVzLCB0YXJnZXQsIHNjZW5lLCBjb21wZW5zYXRlRGlzdG9ydGlvbiwg
dnJDYW1lcmFNZXRyaWNzKSB7CisgICAgICAgIGlmIChjb21wZW5zYXRlRGlzdG9ydGlvbiA9PT0g
dm9pZCAwKSB7IGNvbXBlbnNhdGVEaXN0b3J0aW9uID0gdHJ1ZTsgfQorICAgICAgICBpZiAodnJD
YW1lcmFNZXRyaWNzID09PSB2b2lkIDApIHsgdnJDYW1lcmFNZXRyaWNzID0gX3ZyQ2FtZXJhTWV0
cmljc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWUkNhbWVyYU1ldHJpY3MiXS5HZXRE
ZWZhdWx0KCk7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwg
YWxwaGEsIGJldGEsIHJhZGl1cywgdGFyZ2V0LCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgdnJD
YW1lcmFNZXRyaWNzLmNvbXBlbnNhdGVEaXN0b3J0aW9uID0gY29tcGVuc2F0ZURpc3RvcnRpb247
CisgICAgICAgIF90aGlzLnNldENhbWVyYVJpZ01vZGUoX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkNhbWVyYSJdLlJJR19NT0RFX1ZSLCB7IHZyQ2FtZXJhTWV0
cmljczogdnJDYW1lcmFNZXRyaWNzIH0pOworICAgICAgICBfdGhpcy5pbnB1dHMuYWRkVlJEZXZp
Y2VPcmllbnRhdGlvbigpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgor
ICAgICAqIEdldHMgY2FtZXJhIGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyBWUkRldmljZU9y
aWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhCisgICAgICovCisgICAgVlJEZXZpY2VPcmllbnRhdGlv
bkFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gIlZSRGV2aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmEiOworICAg
IH07CisgICAgcmV0dXJuIFZSRGV2aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmE7Cit9KF9D
YW1lcmFzX2FyY1JvdGF0ZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBcmNS
b3RhdGVDYW1lcmEiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvVlIv
dnJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMv
VlIvdnJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90
c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL0NhbWVyYXMvY2FtZXJhICovICIuL0NhbWVyYXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfZGV2aWNlT3JpZW50YXRpb25DYW1lcmFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVy
YXMvZGV2aWNlT3JpZW50YXRpb25DYW1lcmEgKi8gIi4vQ2FtZXJhcy9kZXZpY2VPcmllbnRhdGlv
bkNhbWVyYS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92ckNhbWVyYU1ldHJpY3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
dnJDYW1lcmFNZXRyaWNzICovICIuL0NhbWVyYXMvVlIvdnJDYW1lcmFNZXRyaWNzLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRo
LnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9ub2RlICovICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfUmlnTW9kZXNfdnJSaWdNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9SaWdNb2Rlcy92clJpZ01vZGUgKi8gIi4vQ2Ft
ZXJhcy9SaWdNb2Rlcy92clJpZ01vZGUudHMiKTsKKworCisKKworCisKKy8vIFNpZGUgZWZmZWN0
IGltcG9ydCB0byBkZWZpbmUgdGhlIHN0ZXJlb3Njb3BpYyBtb2RlLgorCitfbm9kZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJOb2RlIl0uQWRkTm9kZUNvbnN0cnVjdG9yKCJWUkRldmlj
ZU9yaWVudGF0aW9uRnJlZUNhbWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSkgeworICAgIHJl
dHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1l
cmEobmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKTsgfTsKK30pOworLyoqCisgKiBDYW1lcmEgdXNlZCB0
byBzaW11bGF0ZSBWUiByZW5kZXJpbmcgKGJhc2VkIG9uIEZyZWVDYW1lcmEpCisgKiBAc2VlIGh0
dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2NhbWVyYXMjdnItZGV2aWNlLW9yaWVu
dGF0aW9uLWNhbWVyYXMKKyAqLwordmFyIFZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2Ft
ZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgVlJEZXZpY2VPcmll
bnRhdGlvbkZyZWVDYW1lcmEKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIGNhbWVyYSBuYW1l
CisgICAgICogQHBhcmFtIHBvc2l0aW9uIGRlZmluZXMgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRo
ZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgdGhlIGNhbWVy
YSBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGNvbXBlbnNhdGVEaXN0b3J0aW9uIGRlZmluZXMg
aWYgdGhlIGNhbWVyYSBuZWVkcyB0byBjb21wZW5zYXRlIHRoZSBsZW5zIGRpc3RvcnNpb24KKyAg
ICAgKiBAcGFyYW0gdnJDYW1lcmFNZXRyaWNzIGRlZmluZXMgdGhlIHZyIG1ldHJpY3MgYXNzb2Np
YXRlZCB0byB0aGUgY2FtZXJhCisgICAgICovCisgICAgZnVuY3Rpb24gVlJEZXZpY2VPcmllbnRh
dGlvbkZyZWVDYW1lcmEobmFtZSwgcG9zaXRpb24sIHNjZW5lLCBjb21wZW5zYXRlRGlzdG9ydGlv
biwgdnJDYW1lcmFNZXRyaWNzKSB7CisgICAgICAgIGlmIChjb21wZW5zYXRlRGlzdG9ydGlvbiA9
PT0gdm9pZCAwKSB7IGNvbXBlbnNhdGVEaXN0b3J0aW9uID0gdHJ1ZTsgfQorICAgICAgICBpZiAo
dnJDYW1lcmFNZXRyaWNzID09PSB2b2lkIDApIHsgdnJDYW1lcmFNZXRyaWNzID0gX3ZyQ2FtZXJh
TWV0cmljc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWUkNhbWVyYU1ldHJpY3MiXS5H
ZXREZWZhdWx0KCk7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFt
ZSwgcG9zaXRpb24sIHNjZW5lKSB8fCB0aGlzOworICAgICAgICB2ckNhbWVyYU1ldHJpY3MuY29t
cGVuc2F0ZURpc3RvcnRpb24gPSBjb21wZW5zYXRlRGlzdG9ydGlvbjsKKyAgICAgICAgX3RoaXMu
c2V0Q2FtZXJhUmlnTW9kZShfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siQ2FtZXJhIl0uUklHX01PREVfVlIsIHsgdnJDYW1lcmFNZXRyaWNzOiB2ckNhbWVyYU1l
dHJpY3MgfSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICog
R2V0cyBjYW1lcmEgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIFZSRGV2aWNlT3JpZW50YXRp
b25GcmVlQ2FtZXJhCisgICAgICovCisgICAgVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEu
cHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJW
UkRldmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYSI7CisgICAgfTsKKyAgICByZXR1cm4gVlJEZXZp
Y2VPcmllbnRhdGlvbkZyZWVDYW1lcmE7Cit9KF9DYW1lcmFzX2RldmljZU9yaWVudGF0aW9uQ2Ft
ZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkRldmljZU9yaWVudGF0aW9uQ2FtZXJh
Il0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL1ZSL3ZyRGV2aWNlT3Jp
ZW50YXRpb25HYW1lcGFkQ2FtZXJhLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL1ZSL3Zy
RGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IFZSRGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJh
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBWUkRldmljZU9yaWVudGF0aW9uR2FtZXBhZENhbWVyYTsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVs
ZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZyRGV2
aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZyRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhICov
ICIuL0NhbWVyYXMvVlIvdnJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfdnJDYW1lcmFNZXRyaWNzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZyQ2FtZXJhTWV0cmljcyAqLyAi
Li9DYW1lcmFzL1ZSL3ZyQ2FtZXJhTWV0cmljcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMv
bWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9k
ZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0dhbWVwYWRzX2dh
bWVwYWRTY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vR2FtZXBhZHMvZ2FtZXBhZFNjZW5lQ29tcG9uZW50ICov
ICIuL0dhbWVwYWRzL2dhbWVwYWRTY2VuZUNvbXBvbmVudC50cyIpOworCisKKworCisKKworX25v
ZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3Rv
cigiVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbiAobmFtZSwgc2Nl
bmUpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFZSRGV2aWNlT3JpZW50
YXRpb25HYW1lcGFkQ2FtZXJhKG5hbWUsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpLCBzY2VuZSk7IH07Cit9KTsKKy8qKgor
ICogQ2FtZXJhIHVzZWQgdG8gc2ltdWxhdGUgVlIgcmVuZGVyaW5nIChiYXNlZCBvbiBWUkRldmlj
ZU9yaWVudGF0aW9uRnJlZUNhbWVyYSkKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2JhYnlsb24xMDEvY2FtZXJhcyN2ci1kZXZpY2Utb3JpZW50YXRpb24tY2FtZXJhcworICovCit2
YXIgVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEsIF9zdXBlcik7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBWUkRldmljZU9yaWVudGF0aW9uR2FtZXBhZENh
bWVyYQorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgY2FtZXJhIG5hbWUKKyAgICAgKiBAcGFy
YW0gcG9zaXRpb24gZGVmaW5lcyB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNhbWVyYQorICAg
ICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGUgY2FtZXJhIGJlbG9uZ3MgdG8K
KyAgICAgKiBAcGFyYW0gY29tcGVuc2F0ZURpc3RvcnRpb24gZGVmaW5lcyBpZiB0aGUgY2FtZXJh
IG5lZWRzIHRvIGNvbXBlbnNhdGUgdGhlIGxlbnMgZGlzdG9yc2lvbgorICAgICAqIEBwYXJhbSB2
ckNhbWVyYU1ldHJpY3MgZGVmaW5lcyB0aGUgdnIgbWV0cmljcyBhc3NvY2lhdGVkIHRvIHRoZSBj
YW1lcmEKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBWUkRldmljZU9yaWVudGF0aW9uR2FtZXBhZENh
bWVyYShuYW1lLCBwb3NpdGlvbiwgc2NlbmUsIGNvbXBlbnNhdGVEaXN0b3J0aW9uLCB2ckNhbWVy
YU1ldHJpY3MpIHsKKyAgICAgICAgaWYgKGNvbXBlbnNhdGVEaXN0b3J0aW9uID09PSB2b2lkIDAp
IHsgY29tcGVuc2F0ZURpc3RvcnRpb24gPSB0cnVlOyB9CisgICAgICAgIGlmICh2ckNhbWVyYU1l
dHJpY3MgPT09IHZvaWQgMCkgeyB2ckNhbWVyYU1ldHJpY3MgPSBfdnJDYW1lcmFNZXRyaWNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZSQ2FtZXJhTWV0cmljcyJdLkdldERlZmF1bHQo
KTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBwb3NpdGlv
biwgc2NlbmUsIGNvbXBlbnNhdGVEaXN0b3J0aW9uLCB2ckNhbWVyYU1ldHJpY3MpIHx8IHRoaXM7
CisgICAgICAgIF90aGlzLmlucHV0cy5hZGRHYW1lcGFkKCk7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBjYW1lcmEgY2xhc3MgbmFtZQorICAgICAq
IEByZXR1cm5zIFZSRGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhCisgICAgICovCisgICAg
VlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEucHJvdG90eXBlLmdldENsYXNzTmFtZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJWUkRldmljZU9yaWVudGF0aW9uR2FtZXBh
ZENhbWVyYSI7CisgICAgfTsKKyAgICByZXR1cm4gVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRD
YW1lcmE7Cit9KF92ckRldmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWUkRldmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYSJdKSk7CisKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9WUi92ckV4cGVyaWVuY2VIZWxwZXIudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9DYW1lcmFzL1ZSL3ZyRXhwZXJpZW5jZUhlbHBlci50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogT25B
ZnRlckVudGVyaW5nVlJPYnNlcnZhYmxlRXZlbnQsIFZSRXhwZXJpZW5jZUhlbHBlciAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPbkFmdGVyRW50ZXJpbmdWUk9ic2VydmFi
bGVFdmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gT25BZnRlckVudGVyaW5nVlJPYnNlcnZhYmxl
RXZlbnQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVlJFeHBlcmllbmNlSGVscGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBWUkV4cGVyaWVuY2VIZWxwZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9sb2dnZXIg
Ki8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfZnJlZUNhbWVyYV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJh
cy9mcmVlQ2FtZXJhICovICIuL0NhbWVyYXMvZnJlZUNhbWVyYS50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9DYW1lcmFzX3RhcmdldENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy90YXJnZXRDYW1l
cmEgKi8gIi4vQ2FtZXJhcy90YXJnZXRDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfQ2FtZXJhc19kZXZpY2VPcmllbnRhdGlvbkNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9kZXZpY2VP
cmllbnRhdGlvbkNhbWVyYSAqLyAiLi9DYW1lcmFzL2RldmljZU9yaWVudGF0aW9uQ2FtZXJhLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfVlJfdnJEZXZpY2VPcmllbnRh
dGlvbkZyZWVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvVlIvdnJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1l
cmEgKi8gIi4vQ2FtZXJhcy9WUi92ckRldmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX1ZSX3dlYlZSQ2FtZXJhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1l
cmFzL1ZSL3dlYlZSQ2FtZXJhICovICIuL0NhbWVyYXMvVlIvd2ViVlJDYW1lcmEudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0V2ZW50cy9w
b2ludGVyRXZlbnRzICovICIuL0V2ZW50cy9wb2ludGVyRXZlbnRzLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAq
LyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNv
bG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0dhbWVwYWRzX2dhbWVwYWRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9HYW1lcGFkcy9nYW1lcGFkICovICIuL0dhbWVwYWRzL2dhbWVwYWQudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfR2FtZXBhZHNfQ29udHJvbGxlcnNfcG9zZUVuYWJsZWRDb250cm9s
bGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvcG9zZUVuYWJsZWRDb250cm9sbGVyICovICIu
L0dhbWVwYWRzL0NvbnRyb2xsZXJzL3Bvc2VFbmFibGVkQ29udHJvbGxlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9HYW1lcGFkc19Db250cm9sbGVyc193ZWJWUkNvbnRyb2xsZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9HYW1lcGFkcy9Db250cm9sbGVycy93ZWJWUkNvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMv
Q29udHJvbGxlcnMvd2ViVlJDb250cm9sbGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0dhbWVwYWRzX3hib3hHYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vR2FtZXBhZHMveGJveEdhbWVwYWQgKi8gIi4v
R2FtZXBhZHMveGJveEdhbWVwYWQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVz
aGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9DdWxsaW5nX3JheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0N1bGxpbmcvcmF5ICovICIuL0N1
bGxpbmcvcmF5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19pbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2ltYWdlUHJvY2Vzc2luZ0Nv
bmZpZ3VyYXRpb24gKi8gIi4vTWF0ZXJpYWxzL2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24u
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvc3RhbmRh
cmRNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4
dHVyZXNfZHluYW1pY1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvZHluYW1pY1RleHR1
cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2R5bmFtaWNUZXh0dXJlLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfaW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nl
c3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9Qb3N0UHJvY2Vzc2VzL2ltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzICovICIuL1Bv
c3RQcm9jZXNzZXMvaW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfQW5pbWF0aW9uc19lYXNpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9BbmltYXRpb25zL2Vhc2luZyAq
LyAiLi9BbmltYXRpb25zL2Vhc2luZy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9B
bmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL0FuaW1hdGlvbnMvYW5pbWF0aW9uICovICIuL0FuaW1h
dGlvbnMvYW5pbWF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNf
VlJfdnJDYW1lcmFNZXRyaWNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9WUi92ckNhbWVyYU1ldHJpY3MgKi8gIi4v
Q2FtZXJhcy9WUi92ckNhbWVyYU1ldHJpY3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWVzaGVzX0J1aWxkZXJzX2dyb3VuZEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NZXNoZXMvQnVpbGRlcnMvZ3Jv
dW5kQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvZ3JvdW5kQnVpbGRlci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfdG9ydXNCdWlsZGVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWVzaGVzL0J1aWxkZXJzL3RvcnVzQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdG9ydXNC
dWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWlsZGVyc19j
eWxpbmRlckJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NZXNoZXMvQnVpbGRlcnMvY3lsaW5kZXJCdWlsZGVyICovICIu
L01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfR2FtZXBhZHNfZ2FtZXBhZFNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vR2FtZXBhZHMvZ2Ft
ZXBhZFNjZW5lQ29tcG9uZW50ICovICIuL0dhbWVwYWRzL2dhbWVwYWRTY2VuZUNvbXBvbmVudC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9BbmltYXRpb25zX2FuaW1hdGFibGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9BbmltYXRpb25zL2FuaW1hdGFibGUgKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRhYmxlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21h
dGguYXhpcyAqLyAiLi9NYXRocy9tYXRoLmF4aXMudHMiKTsKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3ZhciBWUkV4cGVyaWVuY2VI
ZWxwZXJHYXplciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBW
UkV4cGVyaWVuY2VIZWxwZXJHYXplcihzY2VuZSwgZ2F6ZVRyYWNrZXJUb0Nsb25lKSB7CisgICAg
ICAgIGlmIChnYXplVHJhY2tlclRvQ2xvbmUgPT09IHZvaWQgMCkgeyBnYXplVHJhY2tlclRvQ2xv
bmUgPSBudWxsOyB9CisgICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICAgICAgdGhpcy5fcG9pbnRlckRvd25Pbk1lc2hBc2tlZCA9IGZhbHNlOwor
ICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9pc0FjdGlvbmFibGVNZXNoID0g
ZmFsc2U7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX3RlbGVwb3J0YXRp
b25SZXF1ZXN0SW5pdGlhdGVkID0gZmFsc2U7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAg
ICAgIHRoaXMuX3RlbGVwb3J0YXRpb25CYWNrUmVxdWVzdEluaXRpYXRlZCA9IGZhbHNlOworICAg
ICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9yb3RhdGlvblJpZ2h0QXNrZWQgPSBm
YWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fcm90YXRpb25MZWZ0
QXNrZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fZHBh
ZFByZXNzZWQgPSB0cnVlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9h
Y3RpdmVQb2ludGVyID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lkID0gVlJFeHBlcmllbmNlSGVs
cGVyR2F6ZXIuX2lkQ291bnRlcisrOworICAgICAgICAvLyBHYXplIHRyYWNrZXIKKyAgICAgICAg
aWYgKCFnYXplVHJhY2tlclRvQ2xvbmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2dhemVUcmFja2Vy
ID0gX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJNZXNoIl0uQ3Jl
YXRlVG9ydXMoImdhemVUcmFja2VyIiwgMC4wMDM1LCAwLjAwMjUsIDIwLCBzY2VuZSwgZmFsc2Up
OworICAgICAgICAgICAgdGhpcy5fZ2F6ZVRyYWNrZXIuYmFrZUN1cnJlbnRUcmFuc2Zvcm1JbnRv
VmVydGljZXMoKTsKKyAgICAgICAgICAgIHRoaXMuX2dhemVUcmFja2VyLmlzUGlja2FibGUgPSBm
YWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2dhemVUcmFja2VyLmlzVmlzaWJsZSA9IGZhbHNlOwor
ICAgICAgICAgICAgdmFyIHRhcmdldE1hdCA9IG5ldyBfTWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIlN0YW5kYXJkTWF0ZXJpYWwiXSgidGFy
Z2V0TWF0Iiwgc2NlbmUpOworICAgICAgICAgICAgdGFyZ2V0TWF0LnNwZWN1bGFyQ29sb3IgPSBf
TWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQ29sb3IzIl0u
QmxhY2soKTsKKyAgICAgICAgICAgIHRhcmdldE1hdC5lbWlzc2l2ZUNvbG9yID0gbmV3IF9NYXRo
c19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJDb2xvcjMiXSgwLjcs
IDAuNywgMC43KTsKKyAgICAgICAgICAgIHRhcmdldE1hdC5iYWNrRmFjZUN1bGxpbmcgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHRoaXMuX2dhemVUcmFja2VyLm1hdGVyaWFsID0gdGFyZ2V0TWF0Owor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZ2F6ZVRyYWNrZXIg
PSBnYXplVHJhY2tlclRvQ2xvbmUuY2xvbmUoImdhemVUcmFja2VyIik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBWUkV4cGVyaWVuY2VIZWxwZXJHYXplci5wcm90
b3R5cGUuX2dldEZvcndhcmRSYXkgPSBmdW5jdGlvbiAobGVuZ3RoKSB7CisgICAgICAgIHJldHVy
biBuZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJSYXkiXShf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmVjdG9yMyJd
Llplcm8oKSwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OV9fWyJWZWN0b3IzIl0oMCwgMCwgbGVuZ3RoKSk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIFZSRXhwZXJpZW5jZUhlbHBlckdhemVyLnByb3RvdHlwZS5fc2VsZWN0aW9uUG9pbnRl
ckRvd24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3BvaW50ZXJEb3duT25NZXNoQXNr
ZWQgPSB0cnVlOworICAgICAgICBpZiAodGhpcy5fY3VycmVudEhpdCkgeworICAgICAgICAgICAg
dGhpcy5zY2VuZS5zaW11bGF0ZVBvaW50ZXJEb3duKHRoaXMuX2N1cnJlbnRIaXQsIHsgcG9pbnRl
cklkOiB0aGlzLl9pZCB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBWUkV4cGVyaWVuY2VIZWxwZXJHYXplci5wcm90b3R5cGUuX3NlbGVjdGlvblBvaW50ZXJV
cCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRIaXQpIHsKKyAgICAg
ICAgICAgIHRoaXMuc2NlbmUuc2ltdWxhdGVQb2ludGVyVXAodGhpcy5fY3VycmVudEhpdCwgeyBw
b2ludGVySWQ6IHRoaXMuX2lkIH0pOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3BvaW50ZXJE
b3duT25NZXNoQXNrZWQgPSBmYWxzZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAg
VlJFeHBlcmllbmNlSGVscGVyR2F6ZXIucHJvdG90eXBlLl9hY3RpdmF0ZVBvaW50ZXIgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2FjdGl2ZVBvaW50ZXIgPSB0cnVlOworICAgIH07Cisg
ICAgLyoqIEBoaWRkZW4gKi8KKyAgICBWUkV4cGVyaWVuY2VIZWxwZXJHYXplci5wcm90b3R5cGUu
X2RlYWN0aXZhdGVQb2ludGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9hY3RpdmVQ
b2ludGVyID0gZmFsc2U7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFZSRXhwZXJp
ZW5jZUhlbHBlckdhemVyLnByb3RvdHlwZS5fdXBkYXRlUG9pbnRlckRpc3RhbmNlID0gZnVuY3Rp
b24gKGRpc3RhbmNlKSB7CisgICAgICAgIGlmIChkaXN0YW5jZSA9PT0gdm9pZCAwKSB7IGRpc3Rh
bmNlID0gMTAwOyB9CisgICAgfTsKKyAgICBWUkV4cGVyaWVuY2VIZWxwZXJHYXplci5wcm90b3R5
cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW50ZXJhY3Rpb25zRW5h
YmxlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl90ZWxlcG9ydGF0aW9uRW5hYmxlZCA9IGZhbHNl
OworICAgICAgICBpZiAodGhpcy5fZ2F6ZVRyYWNrZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2dh
emVUcmFja2VyLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgVlJFeHBlcmllbmNl
SGVscGVyR2F6ZXIuX2lkQ291bnRlciA9IDA7CisgICAgcmV0dXJuIFZSRXhwZXJpZW5jZUhlbHBl
ckdhemVyOworfSgpKTsKK3ZhciBWUkV4cGVyaWVuY2VIZWxwZXJDb250cm9sbGVyR2F6ZXIgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVlJFeHBlcmllbmNlSGVscGVyQ29udHJvbGxl
ckdhemVyLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIFZSRXhwZXJpZW5jZUhlbHBlckNvbnRyb2xs
ZXJHYXplcih3ZWJWUkNvbnRyb2xsZXIsIHNjZW5lLCBnYXplVHJhY2tlclRvQ2xvbmUpIHsKKyAg
ICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NlbmUsIGdhemVUcmFja2VyVG9D
bG9uZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMud2ViVlJDb250cm9sbGVyID0gd2ViVlJDb250
cm9sbGVyOworICAgICAgICAvLyBMYXNlciBwb2ludGVyCisgICAgICAgIF90aGlzLl9sYXNlclBv
aW50ZXIgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIk1lc2gi
XS5DcmVhdGVDeWxpbmRlcigibGFzZXJQb2ludGVyIiwgMSwgMC4wMDQsIDAuMDAwMiwgMjAsIDEs
IHNjZW5lLCBmYWxzZSk7CisgICAgICAgIHZhciBsYXNlclBvaW50ZXJNYXRlcmlhbCA9IG5ldyBf
TWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19b
IlN0YW5kYXJkTWF0ZXJpYWwiXSgibGFzZXJQb2ludGVyTWF0Iiwgc2NlbmUpOworICAgICAgICBs
YXNlclBvaW50ZXJNYXRlcmlhbC5lbWlzc2l2ZUNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJDb2xvcjMiXSgwLjcsIDAuNywgMC43KTsK
KyAgICAgICAgbGFzZXJQb2ludGVyTWF0ZXJpYWwuYWxwaGEgPSAwLjY7CisgICAgICAgIF90aGlz
Ll9sYXNlclBvaW50ZXIubWF0ZXJpYWwgPSBsYXNlclBvaW50ZXJNYXRlcmlhbDsKKyAgICAgICAg
X3RoaXMuX2xhc2VyUG9pbnRlci5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7CisgICAgICAgIF90
aGlzLl9sYXNlclBvaW50ZXIucG9zaXRpb24ueiA9IC0wLjU7CisgICAgICAgIF90aGlzLl9sYXNl
clBvaW50ZXIuaXNWaXNpYmxlID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9sYXNlclBvaW50ZXIu
aXNQaWNrYWJsZSA9IGZhbHNlOworICAgICAgICBpZiAoIXdlYlZSQ29udHJvbGxlci5tZXNoKSB7
CisgICAgICAgICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgbWVzaCB0aGF0IGlzIHVzZWQgcHJpb3Ig
dG8gbG9hZGluZyB0aGUgaGlnaCBxdWFsaXR5IG1vZGVsCisgICAgICAgICAgICB2YXIgcHJlbG9h
ZE1lc2ggPSBuZXcgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJN
ZXNoIl0oInByZWxvYWRDb250cm9sbGVyTWVzaCIsIHNjZW5lKTsKKyAgICAgICAgICAgIHZhciBw
cmVsb2FkUG9pbnRlclBvc2UgPSBuZXcgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNV9fWyJNZXNoIl0oX0dhbWVwYWRzX0NvbnRyb2xsZXJzX3Bvc2VFbmFibGVkQ29udHJv
bGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siUG9zZUVuYWJsZWRDb250cm9sbGVy
Il0uUE9JTlRJTkdfUE9TRSwgc2NlbmUpOworICAgICAgICAgICAgcHJlbG9hZFBvaW50ZXJQb3Nl
LnJvdGF0aW9uLnggPSAtMC43OworICAgICAgICAgICAgcHJlbG9hZE1lc2guYWRkQ2hpbGQocHJl
bG9hZFBvaW50ZXJQb3NlKTsKKyAgICAgICAgICAgIHdlYlZSQ29udHJvbGxlci5hdHRhY2hUb01l
c2gocHJlbG9hZE1lc2gpOworICAgICAgICB9CisgICAgICAgIF90aGlzLl9zZXRMYXNlclBvaW50
ZXJQYXJlbnQod2ViVlJDb250cm9sbGVyLm1lc2gpOworICAgICAgICBfdGhpcy5fbWVzaEF0dGFj
aGVkT2JzZXJ2ZXIgPSB3ZWJWUkNvbnRyb2xsZXIuX21lc2hBdHRhY2hlZE9ic2VydmFibGUuYWRk
KGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgICAgICBfdGhpcy5fc2V0TGFzZXJQb2ludGVyUGFy
ZW50KG1lc2gpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAg
ICBWUkV4cGVyaWVuY2VIZWxwZXJDb250cm9sbGVyR2F6ZXIucHJvdG90eXBlLl9nZXRGb3J3YXJk
UmF5ID0gZnVuY3Rpb24gKGxlbmd0aCkgeworICAgICAgICByZXR1cm4gdGhpcy53ZWJWUkNvbnRy
b2xsZXIuZ2V0Rm9yd2FyZFJheShsZW5ndGgpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBWUkV4cGVyaWVuY2VIZWxwZXJDb250cm9sbGVyR2F6ZXIucHJvdG90eXBlLl9hY3RpdmF0
ZVBvaW50ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2FjdGl2
YXRlUG9pbnRlci5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl9sYXNlclBvaW50ZXIuaXNWaXNp
YmxlID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgVlJFeHBlcmllbmNl
SGVscGVyQ29udHJvbGxlckdhemVyLnByb3RvdHlwZS5fZGVhY3RpdmF0ZVBvaW50ZXIgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2RlYWN0aXZhdGVQb2ludGVyLmNh
bGwodGhpcyk7CisgICAgICAgIHRoaXMuX2xhc2VyUG9pbnRlci5pc1Zpc2libGUgPSBmYWxzZTsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgVlJFeHBlcmllbmNlSGVscGVyQ29udHJv
bGxlckdhemVyLnByb3RvdHlwZS5fc2V0TGFzZXJQb2ludGVyQ29sb3IgPSBmdW5jdGlvbiAoY29s
b3IpIHsKKyAgICAgICAgdGhpcy5fbGFzZXJQb2ludGVyLm1hdGVyaWFsLmVtaXNzaXZlQ29sb3Ig
PSBjb2xvcjsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgVlJFeHBlcmllbmNlSGVs
cGVyQ29udHJvbGxlckdhemVyLnByb3RvdHlwZS5fc2V0TGFzZXJQb2ludGVyUGFyZW50ID0gZnVu
Y3Rpb24gKG1lc2gpIHsKKyAgICAgICAgdmFyIG1ha2VOb3RQaWNrID0gZnVuY3Rpb24gKHJvb3Qp
IHsKKyAgICAgICAgICAgIHJvb3QuaXNQaWNrYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgcm9v
dC5nZXRDaGlsZE1lc2hlcygpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKKyAgICAgICAgICAgICAg
ICBtYWtlTm90UGljayhjKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9OworICAgICAgICBt
YWtlTm90UGljayhtZXNoKTsKKyAgICAgICAgdmFyIG1lc2hDaGlsZHJlbiA9IG1lc2guZ2V0Q2hp
bGRyZW4odW5kZWZpbmVkLCBmYWxzZSk7CisgICAgICAgIHZhciBsYXNlclBhcmVudCA9IG1lc2g7
CisgICAgICAgIHRoaXMud2ViVlJDb250cm9sbGVyLl9wb2ludGluZ1Bvc2VOb2RlID0gbnVsbDsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNoQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIGlmIChtZXNoQ2hpbGRyZW5baV0ubmFtZSAmJiBtZXNoQ2hpbGRyZW5baV0u
bmFtZS5pbmRleE9mKF9HYW1lcGFkc19Db250cm9sbGVyc19wb3NlRW5hYmxlZENvbnRyb2xsZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlBvc2VFbmFibGVkQ29udHJvbGxlciJdLlBP
SU5USU5HX1BPU0UpID49IDApIHsKKyAgICAgICAgICAgICAgICBsYXNlclBhcmVudCA9IG1lc2hD
aGlsZHJlbltpXTsKKyAgICAgICAgICAgICAgICB0aGlzLndlYlZSQ29udHJvbGxlci5fcG9pbnRp
bmdQb3NlTm9kZSA9IGxhc2VyUGFyZW50OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2xhc2VyUG9pbnRlci5wYXJlbnQgPSBs
YXNlclBhcmVudDsKKyAgICB9OworICAgIFZSRXhwZXJpZW5jZUhlbHBlckNvbnRyb2xsZXJHYXpl
ci5wcm90b3R5cGUuX3VwZGF0ZVBvaW50ZXJEaXN0YW5jZSA9IGZ1bmN0aW9uIChkaXN0YW5jZSkg
eworICAgICAgICBpZiAoZGlzdGFuY2UgPT09IHZvaWQgMCkgeyBkaXN0YW5jZSA9IDEwMDsgfQor
ICAgICAgICB0aGlzLl9sYXNlclBvaW50ZXIuc2NhbGluZy55ID0gZGlzdGFuY2U7CisgICAgICAg
IHRoaXMuX2xhc2VyUG9pbnRlci5wb3NpdGlvbi56ID0gLWRpc3RhbmNlIC8gMjsKKyAgICB9Owor
ICAgIFZSRXhwZXJpZW5jZUhlbHBlckNvbnRyb2xsZXJHYXplci5wcm90b3R5cGUuZGlzcG9zZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhp
cyk7CisgICAgICAgIHRoaXMuX2xhc2VyUG9pbnRlci5kaXNwb3NlKCk7CisgICAgICAgIGlmICh0
aGlzLl9tZXNoQXR0YWNoZWRPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy53ZWJWUkNvbnRy
b2xsZXIuX21lc2hBdHRhY2hlZE9ic2VydmFibGUucmVtb3ZlKHRoaXMuX21lc2hBdHRhY2hlZE9i
c2VydmVyKTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIFZSRXhwZXJpZW5jZUhlbHBl
ckNvbnRyb2xsZXJHYXplcjsKK30oVlJFeHBlcmllbmNlSGVscGVyR2F6ZXIpKTsKK3ZhciBWUkV4
cGVyaWVuY2VIZWxwZXJDYW1lcmFHYXplciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3Vw
ZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMi
XShWUkV4cGVyaWVuY2VIZWxwZXJDYW1lcmFHYXplciwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBW
UkV4cGVyaWVuY2VIZWxwZXJDYW1lcmFHYXplcihnZXRDYW1lcmEsIHNjZW5lKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICBf
dGhpcy5nZXRDYW1lcmEgPSBnZXRDYW1lcmE7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9
CisgICAgVlJFeHBlcmllbmNlSGVscGVyQ2FtZXJhR2F6ZXIucHJvdG90eXBlLl9nZXRGb3J3YXJk
UmF5ID0gZnVuY3Rpb24gKGxlbmd0aCkgeworICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5nZXRD
YW1lcmEoKTsKKyAgICAgICAgaWYgKGNhbWVyYSkgeworICAgICAgICAgICAgcmV0dXJuIGNhbWVy
YS5nZXRGb3J3YXJkUmF5KGxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IF9DdWxsaW5nX3JheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTZfX1siUmF5Il0oX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIlZlY3RvcjMiXS5aZXJvKCksIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOV9fWyJWZWN0b3IzIl0uRm9yd2FyZCgpKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgcmV0dXJuIFZSRXhwZXJpZW5jZUhlbHBlckNhbWVyYUdhemVyOworfShWUkV4cGVyaWVuY2VI
ZWxwZXJHYXplcikpOworLyoqCisgKiBFdmVudCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFmdGVy
IFZSIGhhcyBiZWVuIGVudGVyZWQKKyAqLwordmFyIE9uQWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJs
ZUV2ZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIE9uQWZ0
ZXJFbnRlcmluZ1ZST2JzZXJ2YWJsZUV2ZW50KCkgeworICAgIH0KKyAgICByZXR1cm4gT25BZnRl
ckVudGVyaW5nVlJPYnNlcnZhYmxlRXZlbnQ7Cit9KCkpOworCisvKioKKyAqIEhlbHBzIHRvIHF1
aWNrbHkgYWRkIFZSIHN1cHBvcnQgdG8gYW4gZXhpc3Rpbmcgc2NlbmUuCisgKiBTZWUgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2hvd190by93ZWJ2cl9oZWxwZXIKKyAqLwordmFyIFZSRXhwZXJp
ZW5jZUhlbHBlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBJbnN0YW50aWF0ZXMgYSBWUkV4cGVyaWVuY2VIZWxwZXIuCisgICAgICogSGVscHMgdG8gcXVp
Y2tseSBhZGQgVlIgc3VwcG9ydCB0byBhbiBleGlzdGluZyBzY2VuZS4KKyAgICAgKiBAcGFyYW0g
c2NlbmUgVGhlIHNjZW5lIHRoZSBWUkV4cGVyaWVuY2VIZWxwZXIgYmVsb25ncyB0by4KKyAgICAg
KiBAcGFyYW0gd2ViVlJPcHRpb25zIE9wdGlvbnMgdG8gbW9kaWZ5IHRoZSB2ciBleHBlcmllbmNl
IGhlbHBlcidzIGJlaGF2aW9yLgorICAgICAqLworICAgIGZ1bmN0aW9uIFZSRXhwZXJpZW5jZUhl
bHBlcihzY2VuZSwgCisgICAgLyoqIE9wdGlvbnMgdG8gbW9kaWZ5IHRoZSB2ciBleHBlcmllbmNl
IGhlbHBlcidzIGJlaGF2aW9yLiAqLworICAgIHdlYlZST3B0aW9ucykgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICBpZiAod2ViVlJPcHRpb25zID09PSB2b2lkIDApIHsgd2Vi
VlJPcHRpb25zID0ge307IH0KKyAgICAgICAgdGhpcy53ZWJWUk9wdGlvbnMgPSB3ZWJWUk9wdGlv
bnM7CisgICAgICAgIC8vIENhbiB0aGUgc3lzdGVtIHN1cHBvcnQgV2ViVlIsIGV2ZW4gaWYgYSBo
ZWFkc2V0IGlzbid0IHBsdWdnZWQgaW4/CisgICAgICAgIHRoaXMuX3dlYlZSc3VwcG9ydGVkID0g
ZmFsc2U7CisgICAgICAgIC8vIElmIFdlYlZSIGlzIHN1cHBvcnRlZCwgaXMgYSBoZWFkc2V0IHBs
dWdnZWQgaW4gYW5kIGFyZSB3ZSByZWFkeSB0byBwcmVzZW50PworICAgICAgICB0aGlzLl93ZWJW
UnJlYWR5ID0gZmFsc2U7CisgICAgICAgIC8vIEFyZSB3ZSB3YWl0aW5nIGZvciB0aGUgcmVxdWVz
dFByZXNlbnQgY2FsbGJhY2sgdG8gY29tcGxldGU/CisgICAgICAgIHRoaXMuX3dlYlZScmVxdWVz
dGluZyA9IGZhbHNlOworICAgICAgICAvLyBBcmUgd2UgcHJlc2VudGluZyB0byB0aGUgaGVhZHNl
dCByaWdodCBub3c/ICh0aGlzIGlzIHRoZSB2ckRldmljZSBzdGF0ZSkKKyAgICAgICAgdGhpcy5f
d2ViVlJwcmVzZW50aW5nID0gZmFsc2U7CisgICAgICAgIC8vIEFyZSB3ZSBwcmVzZW50aW5nIGlu
IHRoZSBmdWxsc2NyZWVuIGZhbGxiYWNrPworICAgICAgICB0aGlzLl9mdWxsc2NyZWVuVlJwcmVz
ZW50aW5nID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBi
b29sZWFuIGluZGljYXRpbmcgdGhhdCBnYXplIGNhbiBiZSBlbmFibGVkIGV2ZW4gaWYgcG9pbnRl
ciBsb2NrIGlzIG5vdCBlbmdhZ2UgKHVzZWZ1bCBvbiBpT1Mgd2hlcmUgZnVsbHNjcmVlbiBtb2Rl
IGFuZCBwb2ludGVyIGxvY2sgYXJlIG5vdCBzdXBwb3J0ZWQpCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmVuYWJsZUdhemVFdmVuV2hlbk5vUG9pbnRlckxvY2sgPSBmYWxzZTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRo
ZSBWUkVYcGVyaWVuY2VIZWxwZXIgd2lsbCBleGl0IFZSIGlmIGRvdWJsZSB0YXAgaXMgZGV0ZWN0
ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZXhpdFZST25Eb3VibGVUYXAgPSB0cnVlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgcmlnaHQgYmVmb3JlIGVu
dGVyaW5nIFZSLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkVudGVyaW5nVlJPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxlIHJhaXNl
ZCB3aGVuIGVudGVyaW5nIFZSIGhhcyBjb21wbGV0ZWQuCisgICAgICAgICAqLworICAgICAgICB0
aGlzLm9uQWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioK
KyAgICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiBleGl0aW5nIFZSLgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5vbkV4aXRpbmdWUk9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgcmFpc2VkIHdoZW4gY29udHJvbGxlciBtZXNo
IGlzIGxvYWRlZC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25Db250cm9sbGVyTWVzaExv
YWRlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgdGhpcy5fdXNlQ3VzdG9tVlJCdXR0
b24gPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdGVsZXBvcnRhdGlvblJlcXVlc3RlZCA9IGZhbHNl
OworICAgICAgICB0aGlzLl90ZWxlcG9ydEFjdGl2ZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9m
bG9vck1lc2hlc0NvbGxlY3Rpb24gPSBbXTsKKyAgICAgICAgdGhpcy5fcm90YXRpb25BbGxvd2Vk
ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fdGVsZXBvcnRCYWNrd2FyZHNWZWN0b3IgPSBuZXcgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlZlY3RvcjMiXSgw
LCAtMSwgLTEpOworICAgICAgICB0aGlzLl9pc0RlZmF1bHRUZWxlcG9ydGF0aW9uVGFyZ2V0ID0g
dHJ1ZTsKKyAgICAgICAgdGhpcy5fdGVsZXBvcnRhdGlvbkZpbGxDb2xvciA9ICIjNDQ0NDQ0IjsK
KyAgICAgICAgdGhpcy5fdGVsZXBvcnRhdGlvbkJvcmRlckNvbG9yID0gIiNGRkZGRkYiOworICAg
ICAgICB0aGlzLl9yb3RhdGlvbkFuZ2xlID0gMDsKKyAgICAgICAgdGhpcy5faGFsb0NlbnRlciA9
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmVj
dG9yMyJdKDAsIDAsIDApOworICAgICAgICB0aGlzLl9wYWRTZW5zaWJpbGl0eVVwID0gMC42NTsK
KyAgICAgICAgdGhpcy5fcGFkU2Vuc2liaWxpdHlEb3duID0gMC4zNTsKKyAgICAgICAgdGhpcy5f
bGVmdENvbnRyb2xsZXIgPSBudWxsOworICAgICAgICB0aGlzLl9yaWdodENvbnRyb2xsZXIgPSBu
dWxsOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiBhIG5l
dyBtZXNoIGlzIHNlbGVjdGVkIGJhc2VkIG9uIG1lc2hTZWxlY3Rpb25QcmVkaWNhdGUKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMub25OZXdNZXNoU2VsZWN0ZWQgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgcmFpc2VkIHdoZW4gYSBuZXcgbWVzaCBpcyBz
ZWxlY3RlZCBiYXNlZCBvbiBtZXNoU2VsZWN0aW9uUHJlZGljYXRlLgorICAgICAgICAgKiBUaGlz
IG9ic2VydmFibGUgd2lsbCBwcm92aWRlIHRoZSBtZXNoIGFuZCB0aGUgY29udHJvbGxlciB1c2Vk
IHRvIHNlbGVjdCB0aGUgbWVzaAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbk1lc2hTZWxl
Y3RlZFdpdGhDb250cm9sbGVyID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBP
YnNlcnZhYmxlIHJhaXNlZCB3aGVuIGEgbmV3IG1lc2ggaXMgcGlja2VkIGJhc2VkIG9uIG1lc2hT
ZWxlY3Rpb25QcmVkaWNhdGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25OZXdNZXNoUGlj
a2VkID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxlIHJhaXNl
ZCBiZWZvcmUgY2FtZXJhIHRlbGVwb3J0YXRpb24KKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5v
bkJlZm9yZUNhbWVyYVRlbGVwb3J0ID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAg
KiAgT2JzZXJ2YWJsZSByYWlzZWQgYWZ0ZXIgY2FtZXJhIHRlbGVwb3J0YXRpb24KKyAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5vbkFmdGVyQ2FtZXJhVGVsZXBvcnQgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiBjdXJyZW50IHNlbGVjdGVk
IG1lc2ggZ2V0cyB1bnNlbGVjdGVkCisgICAgICAgICovCisgICAgICAgIHRoaXMub25TZWxlY3Rl
ZE1lc2hVbnNlbGVjdGVkID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQg
dGVsZXBvcnRhdGlvbiBlbmFibGVkLiBJZiBzZXQgdG8gZmFsc2UgY2FtZXJhIHRlbGVwb3J0YXRp
b24gd2lsbCBiZSBkaXNhYmxlZCBidXQgY2FtZXJhIHJvdGF0aW9uIHdpbGwgYmUga2VwdC4KKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMudGVsZXBvcnRhdGlvbkVuYWJsZWQgPSB0cnVlOworICAg
ICAgICB0aGlzLl90ZWxlcG9ydGF0aW9uSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhp
cy5faW50ZXJhY3Rpb25zRW5hYmxlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9pbnRlcmFjdGlv
bnNSZXF1ZXN0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZGlzcGxheUdhemUgPSB0cnVlOwor
ICAgICAgICB0aGlzLl9kaXNwbGF5TGFzZXJQb2ludGVyID0gdHJ1ZTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIElmIHRoZSBnYXplIHRyYWNrZXJzIHNjYWxlIHNob3VsZCBiZSB1cGRhdGVkIHRv
IGJlIGNvbnN0YW50IHNpemUgd2hlbiBwb2ludGluZyBhdCBuZWFyL2ZhciBtZXNoZXMKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMudXBkYXRlR2F6ZVRyYWNrZXJTY2FsZSA9IHRydWU7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBJZiB0aGUgZ2F6ZSB0cmFja2VycyBjb2xvciBzaG91bGQgYmUg
dXBkYXRlZCB3aGVuIHNlbGVjdGluZyBtZXNoZXMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
dXBkYXRlR2F6ZVRyYWNrZXJDb2xvciA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
ZWZpbmVzIHdldGhlciBvciBub3QgUG9pbnRlciBsb2NrIHNob3VsZCBiZSByZXF1ZXN0ZWQgd2hl
biBzd2l0Y2hpbmcgdG8KKyAgICAgICAgICogZnVsbCBzY3JlZW4uCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLnJlcXVlc3RQb2ludGVyTG9ja09uRnVsbFNjcmVlbiA9IHRydWU7CisgICAgICAg
IHRoaXMuX29uUmVzaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMubW92ZUJ1
dHRvblRvQm90dG9tUmlnaHQoKTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fZnVsbHNjcmVlblZS
cHJlc2VudGluZyAmJiBfdGhpcy5fd2ViVlJyZWFkeSkgeworICAgICAgICAgICAgICAgIF90aGlz
LmV4aXRWUigpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB0aGlzLl9vbkZ1
bGxzY3JlZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgYW55RG9jID0g
ZG9jdW1lbnQ7CisgICAgICAgICAgICBpZiAoYW55RG9jLmZ1bGxzY3JlZW4gIT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9mdWxsc2NyZWVuVlJwcmVzZW50aW5nID0gZG9j
dW1lbnQuZnVsbHNjcmVlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGFu
eURvYy5tb3pGdWxsU2NyZWVuICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICBfdGhp
cy5fZnVsbHNjcmVlblZScHJlc2VudGluZyA9IGFueURvYy5tb3pGdWxsU2NyZWVuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYW55RG9jLndlYmtpdElzRnVsbFNjcmVlbiAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2Z1bGxzY3JlZW5WUnByZXNl
bnRpbmcgPSBhbnlEb2Mud2Via2l0SXNGdWxsU2NyZWVuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAoYW55RG9jLm1zSXNGdWxsU2NyZWVuICE9PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgICAgICBfdGhpcy5fZnVsbHNjcmVlblZScHJlc2VudGluZyA9IGFueURvYy5tc0lz
RnVsbFNjcmVlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50
Lm1zRnVsbHNjcmVlbkVsZW1lbnQgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIF90
aGlzLl9mdWxsc2NyZWVuVlJwcmVzZW50aW5nID0gZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVu
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghX3RoaXMuX2Z1bGxzY3JlZW5WUnBy
ZXNlbnRpbmcgJiYgX3RoaXMuX2NhbnZhcykgeworICAgICAgICAgICAgICAgIF90aGlzLmV4aXRW
UigpOworICAgICAgICAgICAgICAgIGlmICghX3RoaXMuX3VzZUN1c3RvbVZSQnV0dG9uICYmIF90
aGlzLl9idG5WUikgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYnRuVlIuc3R5bGUudG9w
ID0gX3RoaXMuX2NhbnZhcy5vZmZzZXRUb3AgKyBfdGhpcy5fY2FudmFzLm9mZnNldEhlaWdodCAt
IDcwICsgInB4IjsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2J0blZSLnN0eWxlLmxlZnQg
PSBfdGhpcy5fY2FudmFzLm9mZnNldExlZnQgKyBfdGhpcy5fY2FudmFzLm9mZnNldFdpZHRoIC0g
MTAwICsgInB4IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisgICAgICAgIHRoaXMuX2NhY2hlZEFuZ3VsYXJTZW5zaWJpbGl0eSA9IHsgYW5ndWxhclNlbnNp
YmlsaXR5WDogbnVsbCwgYW5ndWxhclNlbnNpYmlsaXR5WTogbnVsbCwgYW5ndWxhclNlbnNpYmls
aXR5OiBudWxsIH07CisgICAgICAgIHRoaXMuYmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgaWYgKF90aGlzLl9sZWZ0Q29udHJvbGxlciAmJiBfdGhpcy5fbGVmdENvbnRy
b2xsZXIuX2FjdGl2ZVBvaW50ZXIpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fY2FzdFJheUFu
ZFNlbGVjdE9iamVjdChfdGhpcy5fbGVmdENvbnRyb2xsZXIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKF90aGlzLl9yaWdodENvbnRyb2xsZXIgJiYgX3RoaXMuX3JpZ2h0Q29udHJv
bGxlci5fYWN0aXZlUG9pbnRlcikgeworICAgICAgICAgICAgICAgIF90aGlzLl9jYXN0UmF5QW5k
U2VsZWN0T2JqZWN0KF90aGlzLl9yaWdodENvbnRyb2xsZXIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKF90aGlzLl9ub0NvbnRyb2xsZXJJc0FjdGl2ZSAmJiAoX3RoaXMuX3NjZW5l
LmdldEVuZ2luZSgpLmlzUG9pbnRlckxvY2sgfHwgX3RoaXMuZW5hYmxlR2F6ZUV2ZW5XaGVuTm9Q
b2ludGVyTG9jaykpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fY2FzdFJheUFuZFNlbGVjdE9i
amVjdChfdGhpcy5fY2FtZXJhR2F6ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2NhbWVyYUdhemVyLl9nYXplVHJhY2tlci5pc1Zp
c2libGUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5f
b25OZXdHYW1lcGFkQ29ubmVjdGVkID0gZnVuY3Rpb24gKGdhbWVwYWQpIHsKKyAgICAgICAgICAg
IGlmIChnYW1lcGFkLnR5cGUgIT09IF9HYW1lcGFkc19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMV9fWyJHYW1lcGFkIl0uUE9TRV9FTkFCTEVEKSB7CisgICAgICAgICAgICAgICAg
aWYgKGdhbWVwYWQubGVmdFN0aWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGdhbWVwYWQub25s
ZWZ0c3RpY2tjaGFuZ2VkKGZ1bmN0aW9uIChzdGlja1ZhbHVlcykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKF90aGlzLl90ZWxlcG9ydGF0aW9uSW5pdGlhbGl6ZWQgJiYgX3RoaXMudGVs
ZXBvcnRhdGlvbkVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaXN0
ZW5pbmcgdG8gY2xhc3NpYy94Ym94IGdhbWVwYWQgb25seSBpZiBubyBWUiBjb250cm9sbGVyIGlz
IGFjdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIV90aGlzLl9sZWZ0Q29u
dHJvbGxlciAmJiAhX3RoaXMuX3JpZ2h0Q29udHJvbGxlcikgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKChfdGhpcy5fbGVmdENvbnRyb2xsZXIgJiYgIV90aGlzLl9sZWZ0Q29u
dHJvbGxlci5fYWN0aXZlUG9pbnRlcikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChfdGhpcy5fcmlnaHRDb250cm9sbGVyICYmICFfdGhpcy5fcmlnaHRDb250cm9sbGVy
Ll9hY3RpdmVQb2ludGVyKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuX2NoZWNrVGVsZXBvcnRXaXRoUmF5KHN0aWNrVmFsdWVzLCBfdGhpcy5fY2FtZXJhR2F6ZXIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY2hlY2tUZWxlcG9ydEJh
Y2t3YXJkcyhzdGlja1ZhbHVlcywgX3RoaXMuX2NhbWVyYUdhemVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZ2FtZXBh
ZC5yaWdodFN0aWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGdhbWVwYWQub25yaWdodHN0aWNr
Y2hhbmdlZChmdW5jdGlvbiAoc3RpY2tWYWx1ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChfdGhpcy5fdGVsZXBvcnRhdGlvbkluaXRpYWxpemVkKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX3RoaXMuX2NoZWNrUm90YXRlKHN0aWNrVmFsdWVzLCBfdGhpcy5fY2FtZXJh
R2F6ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGdhbWVwYWQudHlwZSA9
PT0gX0dhbWVwYWRzX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkdhbWVw
YWQiXS5YQk9YKSB7CisgICAgICAgICAgICAgICAgICAgIGdhbWVwYWQub25idXR0b25kb3duKGZ1
bmN0aW9uIChidXR0b25QcmVzc2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Ro
aXMuX2ludGVyYWN0aW9uc0VuYWJsZWQgJiYgYnV0dG9uUHJlc3NlZCA9PT0gX0dhbWVwYWRzX3hi
b3hHYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJYYm94MzYwQnV0dG9uIl0u
QSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9jYW1lcmFHYXplci5fc2Vs
ZWN0aW9uUG9pbnRlckRvd24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGdhbWVwYWQub25idXR0b251cChm
dW5jdGlvbiAoYnV0dG9uUHJlc3NlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90
aGlzLl9pbnRlcmFjdGlvbnNFbmFibGVkICYmIGJ1dHRvblByZXNzZWQgPT09IF9HYW1lcGFkc194
Ym94R2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siWGJveDM2MEJ1dHRvbiJd
LkEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY2FtZXJhR2F6ZXIuX3Nl
bGVjdGlvblBvaW50ZXJVcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgd2ViVlJDb250cm9sbGVyID0gZ2FtZXBh
ZDsKKyAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlciA9IG5ldyBWUkV4cGVyaWVuY2VIZWxw
ZXJDb250cm9sbGVyR2F6ZXIod2ViVlJDb250cm9sbGVyLCBfdGhpcy5fc2NlbmUsIF90aGlzLl9j
YW1lcmFHYXplci5fZ2F6ZVRyYWNrZXIpOworICAgICAgICAgICAgICAgIGlmICh3ZWJWUkNvbnRy
b2xsZXIuaGFuZCA9PT0gInJpZ2h0IiB8fCAoX3RoaXMuX2xlZnRDb250cm9sbGVyICYmIF90aGlz
Ll9sZWZ0Q29udHJvbGxlci53ZWJWUkNvbnRyb2xsZXIgIT0gd2ViVlJDb250cm9sbGVyKSkgewor
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcmlnaHRDb250cm9sbGVyID0gY29udHJvbGxlcjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl9sZWZ0Q29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIF90aGlzLl90cnlFbmFibGVJbnRlcmFjdGlvbk9uQ29udHJv
bGxlcihjb250cm9sbGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgLy8g
VGhpcyBvbmx5IHN1Y2NlZWRzIGlmIHRoZSBjb250cm9sbGVyJ3MgbWVzaCBleGlzdHMgZm9yIHRo
ZSBjb250cm9sbGVyIHNvIHRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbmV2ZXIgbmV3IGNvbnRyb2xs
ZXIgaXMgY29ubmVjdGVkIG9yIHdoZW4gbWVzaCBpcyBsb2FkZWQKKyAgICAgICAgdGhpcy5fdHJ5
RW5hYmxlSW50ZXJhY3Rpb25PbkNvbnRyb2xsZXIgPSBmdW5jdGlvbiAoY29udHJvbGxlcikgewor
ICAgICAgICAgICAgaWYgKF90aGlzLl9pbnRlcmFjdGlvbnNSZXF1ZXN0ZWQgJiYgIWNvbnRyb2xs
ZXIuX2ludGVyYWN0aW9uc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fZW5hYmxl
SW50ZXJhY3Rpb25PbkNvbnRyb2xsZXIoY29udHJvbGxlcik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoX3RoaXMuX3RlbGVwb3J0YXRpb25SZXF1ZXN0ZWQgJiYgIWNvbnRyb2xsZXIu
X3RlbGVwb3J0YXRpb25FbmFibGVkKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2VuYWJsZVRl
bGVwb3J0YXRpb25PbkNvbnRyb2xsZXIoY29udHJvbGxlcik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisgICAgICAgIHRoaXMuX29uTmV3R2FtZXBhZERpc2Nvbm5lY3RlZCA9IGZ1bmN0aW9u
IChnYW1lcGFkKSB7CisgICAgICAgICAgICBpZiAoZ2FtZXBhZCBpbnN0YW5jZW9mIF9HYW1lcGFk
c19Db250cm9sbGVyc193ZWJWUkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEz
X19bIldlYlZSQ29udHJvbGxlciJdKSB7CisgICAgICAgICAgICAgICAgaWYgKGdhbWVwYWQuaGFu
ZCA9PT0gImxlZnQiICYmIF90aGlzLl9sZWZ0Q29udHJvbGxlciAhPSBudWxsKSB7CisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl9sZWZ0Q29udHJvbGxlci5kaXNwb3NlKCk7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl9sZWZ0Q29udHJvbGxlciA9IG51bGw7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChnYW1lcGFkLmhhbmQgPT09ICJyaWdodCIgJiYgX3RoaXMu
X3JpZ2h0Q29udHJvbGxlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9y
aWdodENvbnRyb2xsZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcmln
aHRDb250cm9sbGVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgICAgIHRoaXMuX3dvcmtpbmdWZWN0b3IgPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAg
ICAgdGhpcy5fd29ya2luZ1F1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siUXVhdGVybmlvbiJdLklkZW50aXR5KCk7CisgICAgICAgIHRo
aXMuX3dvcmtpbmdNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBz
Y2VuZTsKKyAgICAgICAgdGhpcy5fY2FudmFzID0gc2NlbmUuZ2V0RW5naW5lKCkuZ2V0UmVuZGVy
aW5nQ2FudmFzKCk7CisgICAgICAgIC8vIFBhcnNlIG9wdGlvbnMKKyAgICAgICAgaWYgKHdlYlZS
T3B0aW9ucy5jcmVhdGVGYWxsYmFja1ZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhID09PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHdlYlZST3B0aW9ucy5jcmVhdGVGYWxsYmFja1ZSRGV2
aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
d2ViVlJPcHRpb25zLmNyZWF0ZURldmljZU9yaWVudGF0aW9uQ2FtZXJhID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgIHdlYlZST3B0aW9ucy5jcmVhdGVEZXZpY2VPcmllbnRhdGlvbkNhbWVy
YSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdlYlZST3B0aW9ucy5sYXNlclRvZ2ds
ZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICB3ZWJWUk9wdGlvbnMubGFzZXJUb2dnbGUg
PSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh3ZWJWUk9wdGlvbnMuZGVmYXVsdEhlaWdo
dCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICB3ZWJWUk9wdGlvbnMuZGVmYXVsdEhlaWdo
dCA9IDEuNzsKKyAgICAgICAgfQorICAgICAgICBpZiAod2ViVlJPcHRpb25zLnVzZUN1c3RvbVZS
QnV0dG9uKSB7CisgICAgICAgICAgICB0aGlzLl91c2VDdXN0b21WUkJ1dHRvbiA9IHRydWU7Cisg
ICAgICAgICAgICBpZiAod2ViVlJPcHRpb25zLmN1c3RvbVZSQnV0dG9uKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5fYnRuVlIgPSB3ZWJWUk9wdGlvbnMuY3VzdG9tVlJCdXR0b247CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdlYlZST3B0aW9ucy5yYXlMZW5ndGgpIHsK
KyAgICAgICAgICAgIHRoaXMuX3JheUxlbmd0aCA9IHdlYlZST3B0aW9ucy5yYXlMZW5ndGg7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGVmYXVsdEhlaWdodCA9IHdlYlZST3B0aW9ucy5kZWZh
dWx0SGVpZ2h0OworICAgICAgICBpZiAod2ViVlJPcHRpb25zLnBvc2l0aW9uU2NhbGUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3JheUxlbmd0aCAqPSB3ZWJWUk9wdGlvbnMucG9zaXRpb25TY2FsZTsK
KyAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRIZWlnaHQgKj0gd2ViVlJPcHRpb25zLnBvc2l0aW9u
U2NhbGU7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5faGFzRW50ZXJlZFZSID0gZmFsc2U7Cisg
ICAgICAgIC8vIFNldCBwb3NpdGlvbgorICAgICAgICBpZiAodGhpcy5fc2NlbmUuYWN0aXZlQ2Ft
ZXJhKSB7CisgICAgICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHRoaXMuX3NjZW5lLmFjdGl2ZUNh
bWVyYS5wb3NpdGlvbi5jbG9uZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdGhpcy5fcG9zaXRpb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIlZlY3RvcjMiXSgwLCB0aGlzLl9kZWZhdWx0SGVpZ2h0LCAwKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBTZXQgbm9uLXZyIGNhbWVyYQorICAgICAgICBpZiAod2Vi
VlJPcHRpb25zLmNyZWF0ZURldmljZU9yaWVudGF0aW9uQ2FtZXJhIHx8ICF0aGlzLl9zY2VuZS5h
Y3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgIHRoaXMuX2RldmljZU9yaWVudGF0aW9uQ2FtZXJh
ID0gbmV3IF9DYW1lcmFzX2RldmljZU9yaWVudGF0aW9uQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIkRldmljZU9yaWVudGF0aW9uQ2FtZXJhIl0oImRldmljZU9yaWVudGF0aW9u
VlJIZWxwZXIiLCB0aGlzLl9wb3NpdGlvbi5jbG9uZSgpLCBzY2VuZSk7CisgICAgICAgICAgICAv
LyBDb3B5IGRhdGEgZnJvbSBleGlzdGluZyBjYW1lcmEKKyAgICAgICAgICAgIGlmICh0aGlzLl9z
Y2VuZS5hY3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VPcmllbnRh
dGlvbkNhbWVyYS5taW5aID0gdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLm1pblo7CisgICAgICAg
ICAgICAgICAgdGhpcy5fZGV2aWNlT3JpZW50YXRpb25DYW1lcmEubWF4WiA9IHRoaXMuX3NjZW5l
LmFjdGl2ZUNhbWVyYS5tYXhaOworICAgICAgICAgICAgICAgIC8vIFNldCByb3RhdGlvbiBmcm9t
IHByZXZpb3VzIGNhbWVyYQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2VuZS5hY3RpdmVD
YW1lcmEgaW5zdGFuY2VvZiBfQ2FtZXJhc190YXJnZXRDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siVGFyZ2V0Q2FtZXJhIl0gJiYgdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLnJv
dGF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXRDYW1lcmEgPSB0aGlzLl9z
Y2VuZS5hY3RpdmVDYW1lcmE7CisgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDYW1lcmEu
cm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXZp
Y2VPcmllbnRhdGlvbkNhbWVyYS5yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odGFyZ2V0Q2Ft
ZXJhLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VP
cmllbnRhdGlvbkNhbWVyYS5yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20oX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlF1YXRlcm5pb24iXS5Sb3RhdGlv
bllhd1BpdGNoUm9sbCh0YXJnZXRDYW1lcmEucm90YXRpb24ueSwgdGFyZ2V0Q2FtZXJhLnJvdGF0
aW9uLngsIHRhcmdldENhbWVyYS5yb3RhdGlvbi56KSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlT3JpZW50YXRpb25DYW1lcmEucm90YXRp
b24gPSB0YXJnZXRDYW1lcmEucm90YXRpb24uY2xvbmUoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEgPSB0aGlz
Ll9kZXZpY2VPcmllbnRhdGlvbkNhbWVyYTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9jYW52YXMp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEuYXR0YWNoQ29udHJv
bCh0aGlzLl9jYW52YXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdDYW1lcmEgPSB0aGlzLl9zY2VuZS5hY3RpdmVD
YW1lcmE7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ3JlYXRlIFZSIGNhbWVyYXMKKyAgICAgICAg
aWYgKHdlYlZST3B0aW9ucy5jcmVhdGVGYWxsYmFja1ZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2Ft
ZXJhKSB7CisgICAgICAgICAgICBpZiAod2ViVlJPcHRpb25zLnVzZU11bHRpdmlldykgeworICAg
ICAgICAgICAgICAgIGlmICghd2ViVlJPcHRpb25zLnZyRGV2aWNlT3JpZW50YXRpb25DYW1lcmFN
ZXRyaWNzKSB7CisgICAgICAgICAgICAgICAgICAgIHdlYlZST3B0aW9ucy52ckRldmljZU9yaWVu
dGF0aW9uQ2FtZXJhTWV0cmljcyA9IF9DYW1lcmFzX1ZSX3ZyQ2FtZXJhTWV0cmljc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjNfX1siVlJDYW1lcmFNZXRyaWNzIl0uR2V0RGVmYXVsdCgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3ZWJWUk9wdGlvbnMudnJEZXZpY2VP
cmllbnRhdGlvbkNhbWVyYU1ldHJpY3MubXVsdGl2aWV3RW5hYmxlZCA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl92ckRldmljZU9yaWVudGF0aW9uQ2FtZXJhID0gbmV3
IF9DYW1lcmFzX1ZSX3ZyRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIlZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhIl0oIlZSRGV2aWNl
T3JpZW50YXRpb25WUkhlbHBlciIsIHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9zY2VuZSwgdHJ1ZSwg
d2ViVlJPcHRpb25zLnZyRGV2aWNlT3JpZW50YXRpb25DYW1lcmFNZXRyaWNzKTsKKyAgICAgICAg
ICAgIHRoaXMuX3ZyRGV2aWNlT3JpZW50YXRpb25DYW1lcmEuYW5ndWxhclNlbnNpYmlsaXR5ID0g
TnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl93ZWJWUkNhbWVyYSA9
IG5ldyBfQ2FtZXJhc19WUl93ZWJWUkNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJXZWJWUkZyZWVDYW1lcmEiXSgiV2ViVlJIZWxwZXIiLCB0aGlzLl9wb3NpdGlvbiwgdGhpcy5f
c2NlbmUsIHdlYlZST3B0aW9ucyk7CisgICAgICAgIHRoaXMuX3dlYlZSQ2FtZXJhLnVzZVN0YW5k
aW5nTWF0cml4KCk7CisgICAgICAgIHRoaXMuX2NhbWVyYUdhemVyID0gbmV3IFZSRXhwZXJpZW5j
ZUhlbHBlckNhbWVyYUdhemVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmN1cnJlbnRWUkNh
bWVyYTsgfSwgc2NlbmUpOworICAgICAgICAvLyBDcmVhdGUgZGVmYXVsdCBidXR0b24KKyAgICAg
ICAgaWYgKCF0aGlzLl91c2VDdXN0b21WUkJ1dHRvbikgeworICAgICAgICAgICAgdGhpcy5fYnRu
VlIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCVVRUT04iKTsKKyAgICAgICAgICAgIHRoaXMu
X2J0blZSLmNsYXNzTmFtZSA9ICJiYWJ5bG9uVlJpY29uIjsKKyAgICAgICAgICAgIHRoaXMuX2J0
blZSLmlkID0gImJhYnlsb25WUmljb25idG4iOworICAgICAgICAgICAgdGhpcy5fYnRuVlIudGl0
bGUgPSAiQ2xpY2sgdG8gc3dpdGNoIHRvIFZSIjsKKyAgICAgICAgICAgIHZhciBjc3MgPSAiLmJh
Ynlsb25WUmljb24geyBwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAyMHB4OyBoZWlnaHQ6IDUw
cHg7IHdpZHRoOiA4MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDUxLDUxLDUxLDAuNyk7IGJh
Y2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0Nz
dmclMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmclMjIlMjB3aWR0aCUz
RCUyMjIwNDglMjIlMjBoZWlnaHQlM0QlMjIxMTUyJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIw
MjA0OCUyMDExNTIlMjIlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTNFJTNDcGF0aCUyMHRyYW5zZm9y
bSUzRCUyMnJvdGF0ZSUyODE4MCUyMDEwMjQlMkM1NzYuMDAwMDAwMDAwMDAwMSUyOSUyMiUyMGQl
M0QlMjJtMTEwOSUyQzg5NnExNyUyQzAlMjAzMCUyQy0xMnQxMyUyQy0zMHQtMTIuNSUyQy0zMC41
dC0zMC41JTJDLTEyLjVsLTE3MCUyQzBxLTE4JTJDMCUyMC0zMC41JTJDMTIuNXQtMTIuNSUyQzMw
LjV0MTMlMkMzMHQzMCUyQzEybDE3MCUyQzB6bS04NSUyQzI1NnE1OSUyQzAlMjAxMzIuNSUyQy0x
LjV0MTU0LjUlMkMtNS41dDE2NC41JTJDLTExLjV0MTYzJTJDLTIwdDE1MCUyQy0zMHQxMjQuNSUy
Qy00MS41cTIzJTJDLTExJTIwNDIlMkMtMjR0MzglMkMtMzBxMjclMkMtMjUlMjA0MSUyQy02MS41
dDE0JTJDLTcyLjVsMCUyQy0yNTdxMCUyQy0xMjMlMjAtNDclMkMtMjMydC0xMjglMkMtMTkwdC0x
OTAlMkMtMTI4dC0yMzIlMkMtNDdsLTgxJTJDMHEtMzclMkMwJTIwLTY4LjUlMkMxNHQtNjAuNSUy
QzM0LjV0LTU1LjUlMkM0NXQtNTMlMkM0NXQtNTMlMkMzNC41dC01NS41JTJDMTR0LTU1LjUlMkMt
MTR0LTUzJTJDLTM0LjV0LTUzJTJDLTQ1dC01NS41JTJDLTQ1dC02MC41JTJDLTM0LjV0LTY4LjUl
MkMtMTRsLTgxJTJDMHEtMTIzJTJDMCUyMC0yMzIlMkM0N3QtMTkwJTJDMTI4dC0xMjglMkMxOTB0
LTQ3JTJDMjMybDAlMkMyNTdxMCUyQzY4JTIwMzglMkMxMTV0OTclMkM3M3E1NCUyQzI0JTIwMTI0
LjUlMkM0MS41dDE1MCUyQzMwdDE2MyUyQzIwdDE2NC41JTJDMTEuNXQxNTQuNSUyQzUuNXQxMzIu
NSUyQzEuNXptOTM5JTJDLTI5OHEwJTJDMzklMjAtMjQuNSUyQzY3dC01OC41JTJDNDJxLTU0JTJD
MjMlMjAtMTIyJTJDMzkuNXQtMTQzLjUlMkMyOHQtMTU1LjUlMkMxOXQtMTU3JTJDMTF0LTE0OC41
JTJDNXQtMTI5LjUlMkMxLjVxLTU5JTJDMCUyMC0xMzAlMkMtMS41dC0xNDglMkMtNXQtMTU3JTJD
LTExdC0xNTUuNSUyQy0xOXQtMTQzLjUlMkMtMjh0LTEyMiUyQy0zOS41cS0zNCUyQy0xNCUyMC01
OC41JTJDLTQydC0yNC41JTJDLTY3bDAlMkMtMjU3cTAlMkMtMTA2JTIwNDAuNSUyQy0xOTl0MTEw
JTJDLTE2Mi41dDE2Mi41JTJDLTEwOS41dDE5OSUyQy00MGw4MSUyQzBxMjclMkMwJTIwNTIlMkMx
NHQ1MCUyQzM0LjV0NTElMkM0NC41dDU1LjUlMkM0NC41dDYzLjUlMkMzNC41dDc0JTJDMTR0NzQl
MkMtMTR0NjMuNSUyQy0zNC41dDU1LjUlMkMtNDQuNXQ1MSUyQy00NC41dDUwJTJDLTM0LjV0NTIl
MkMtMTRsMTQlMkMwcTM3JTJDMCUyMDcwJTJDMC41dDY0LjUlMkM0LjV0NjMuNSUyQzEydDY4JTJD
MjNxNzElMkMzMCUyMDEyOC41JTJDNzguNXQ5OC41JTJDMTEwdDYzLjUlMkMxMzMuNXQyMi41JTJD
MTQ5bDAlMkMyNTd6JTIyJTIwZmlsbCUzRCUyMndoaXRlJTIyJTIwLyUzRSUzQy9zdmclM0UlMEEp
OyBiYWNrZ3JvdW5kLXNpemU6IDgwJTsgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OyBiYWNr
Z3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7IGJvcmRlcjogbm9uZTsgb3V0bGluZTogbm9uZTsgdHJh
bnNpdGlvbjogdHJhbnNmb3JtIDAuMTI1cyBlYXNlLW91dCB9IC5iYWJ5bG9uVlJpY29uOmhvdmVy
IHsgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KSB9IC5iYWJ5bG9uVlJpY29uOmFjdGl2ZSB7YmFja2dy
b3VuZC1jb2xvcjogcmdiYSg1MSw1MSw1MSwxKSB9IC5iYWJ5bG9uVlJpY29uOmZvY3VzIHtiYWNr
Z3JvdW5kLWNvbG9yOiByZ2JhKDUxLDUxLDUxLDEpIH0iOworICAgICAgICAgICAgY3NzICs9ICIu
YmFieWxvblZSaWNvbi52cmRpc3BsYXlwcmVzZW50aW5nIHsgZGlzcGxheTogbm9uZTsgfSI7Cisg
ICAgICAgICAgICAvLyBUT0RPOiBBZGQgdXNlciBmZWVkYmFjayBzbyB0aGF0IHRoZXkga25vdyB3
aGF0IHN0YXRlIHRoZSBWUkRpc3BsYXkgaXMgaW4gKGRpc2Nvbm5lY3RlZCwgY29ubmVjdGVkLCBl
bnRlcmluZy1WUikKKyAgICAgICAgICAgIC8vIGNzcyArPSAiLmJhYnlsb25WUmljb24udnJkaXNw
bGF5c3VwcG9ydGVkIHsgfSI7CisgICAgICAgICAgICAvLyBjc3MgKz0gIi5iYWJ5bG9uVlJpY29u
LnZyZGlzcGxheXJlYWR5IHsgfSI7CisgICAgICAgICAgICAvLyBjc3MgKz0gIi5iYWJ5bG9uVlJp
Y29uLnZyZGlzcGxheXJlcXVlc3RpbmcgeyB9IjsKKyAgICAgICAgICAgIHZhciBzdHlsZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgICAgICAgICBzdHlsZS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTsKKyAgICAgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc3R5bGUpOworICAg
ICAgICAgICAgdGhpcy5tb3ZlQnV0dG9uVG9Cb3R0b21SaWdodCgpOworICAgICAgICB9CisgICAg
ICAgIC8vIFZSIGJ1dHRvbiBjbGljayBldmVudAorICAgICAgICBpZiAodGhpcy5fYnRuVlIpIHsK
KyAgICAgICAgICAgIHRoaXMuX2J0blZSLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIGlmICghX3RoaXMuaXNJblZSTW9kZSkgeworICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5lbnRlclZSKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5leGl0VlIoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICAvLyBX
aW5kb3cgZXZlbnRzCisgICAgICAgIHZhciBob3N0V2luZG93ID0gdGhpcy5fc2NlbmUuZ2V0RW5n
aW5lKCkuZ2V0SG9zdFdpbmRvdygpOworICAgICAgICBob3N0V2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoInJlc2l6ZSIsIHRoaXMuX29uUmVzaXplKTsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigiZnVsbHNjcmVlbmNoYW5nZSIsIHRoaXMuX29uRnVsbHNjcmVlbkNoYW5nZSwgZmFs
c2UpOworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3pmdWxsc2NyZWVuY2hh
bmdlIiwgdGhpcy5fb25GdWxsc2NyZWVuQ2hhbmdlLCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCB0aGlzLl9vbkZ1bGxz
Y3JlZW5DaGFuZ2UsIGZhbHNlKTsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigi
bXNmdWxsc2NyZWVuY2hhbmdlIiwgdGhpcy5fb25GdWxsc2NyZWVuQ2hhbmdlLCBmYWxzZSk7Cisg
ICAgICAgIGRvY3VtZW50Lm9ubXNmdWxsc2NyZWVuY2hhbmdlID0gdGhpcy5fb25GdWxsc2NyZWVu
Q2hhbmdlOworICAgICAgICAvLyBEaXNwbGF5IHZyIGJ1dHRvbiB3aGVuIGhlYWRzZXQgaXMgY29u
bmVjdGVkCisgICAgICAgIGlmICh3ZWJWUk9wdGlvbnMuY3JlYXRlRmFsbGJhY2tWUkRldmljZU9y
aWVudGF0aW9uRnJlZUNhbWVyYSkgeworICAgICAgICAgICAgdGhpcy5kaXNwbGF5VlJCdXR0b24o
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLmdl
dEVuZ2luZSgpLm9uVlJEaXNwbGF5Q2hhbmdlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlKSB7
CisgICAgICAgICAgICAgICAgaWYgKGUudnJEaXNwbGF5KSB7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLmRpc3BsYXlWUkJ1dHRvbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIC8vIEV4aXRpbmcgVlIgbW9kZSB1c2luZyAnRVNDJyBr
ZXkgb24gZGVza3RvcAorICAgICAgICB0aGlzLl9vbktleURvd24gPSBmdW5jdGlvbiAoZXZlbnQp
IHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAyNyAmJiBfdGhpcy5pc0luVlJN
b2RlKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuZXhpdFZSKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0
aGlzLl9vbktleURvd24pOworICAgICAgICAvLyBFeGl0aW5nIFZSIG1vZGUgZG91YmxlIHRhcHBp
bmcgdGhlIHRvdWNoIHNjcmVlbgorICAgICAgICB0aGlzLl9zY2VuZS5vblByZVBvaW50ZXJPYnNl
cnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuaXNJblZSTW9k
ZSAmJiBfdGhpcy5leGl0VlJPbkRvdWJsZVRhcCkgeworICAgICAgICAgICAgICAgIF90aGlzLmV4
aXRWUigpOworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fZnVsbHNjcmVlblZScHJlc2VudGlu
ZykgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZXhpdEZ1
bGxzY3JlZW4oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0s
IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQb2lu
dGVyRXZlbnRUeXBlcyJdLlBPSU5URVJET1VCTEVUQVAsIGZhbHNlKTsKKyAgICAgICAgLy8gTGlz
dGVuIGZvciBXZWJWUiBkaXNwbGF5IGNoYW5nZXMKKyAgICAgICAgdGhpcy5fb25WUkRpc3BsYXlD
aGFuZ2VkID0gZnVuY3Rpb24gKGV2ZW50QXJncykgeyByZXR1cm4gX3RoaXMub25WUkRpc3BsYXlD
aGFuZ2VkKGV2ZW50QXJncyk7IH07CisgICAgICAgIHRoaXMuX29uVnJEaXNwbGF5UHJlc2VudENo
YW5nZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLm9uVnJEaXNwbGF5UHJlc2VudENoYW5n
ZSgpOyB9OworICAgICAgICB0aGlzLl9vblZSUmVxdWVzdFByZXNlbnRTdGFydCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIF90aGlzLl93ZWJWUnJlcXVlc3RpbmcgPSB0cnVlOworICAgICAg
ICAgICAgX3RoaXMudXBkYXRlQnV0dG9uVmlzaWJpbGl0eSgpOworICAgICAgICB9OworICAgICAg
ICB0aGlzLl9vblZSUmVxdWVzdFByZXNlbnRDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIF90aGlzLl93ZWJWUnJlcXVlc3RpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIF90aGlz
LnVwZGF0ZUJ1dHRvblZpc2liaWxpdHkoKTsKKyAgICAgICAgfTsKKyAgICAgICAgc2NlbmUuZ2V0
RW5naW5lKCkub25WUkRpc3BsYXlDaGFuZ2VkT2JzZXJ2YWJsZS5hZGQodGhpcy5fb25WUkRpc3Bs
YXlDaGFuZ2VkKTsKKyAgICAgICAgc2NlbmUuZ2V0RW5naW5lKCkub25WUlJlcXVlc3RQcmVzZW50
U3RhcnQuYWRkKHRoaXMuX29uVlJSZXF1ZXN0UHJlc2VudFN0YXJ0KTsKKyAgICAgICAgc2NlbmUu
Z2V0RW5naW5lKCkub25WUlJlcXVlc3RQcmVzZW50Q29tcGxldGUuYWRkKHRoaXMuX29uVlJSZXF1
ZXN0UHJlc2VudENvbXBsZXRlKTsKKyAgICAgICAgaG9zdFdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCd2cmRpc3BsYXlwcmVzZW50Y2hhbmdlJywgdGhpcy5fb25WckRpc3BsYXlQcmVzZW50Q2hhbmdl
KTsKKyAgICAgICAgc2NlbmUub25EaXNwb3NlT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgX3RoaXMuZGlzcG9zZSgpOworICAgICAgICB9KTsKKyAgICAgICAgLy8gR2Ft
ZXBhZCBjb25uZWN0aW9uIGV2ZW50cworICAgICAgICB0aGlzLl93ZWJWUkNhbWVyYS5vbkNvbnRy
b2xsZXJNZXNoTG9hZGVkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHdlYlZSQ29udHJvbGxlcikg
eyByZXR1cm4gX3RoaXMuX29uRGVmYXVsdE1lc2hMb2FkZWQod2ViVlJDb250cm9sbGVyKTsgfSk7
CisgICAgICAgIHRoaXMuX3NjZW5lLmdhbWVwYWRNYW5hZ2VyLm9uR2FtZXBhZENvbm5lY3RlZE9i
c2VydmFibGUuYWRkKHRoaXMuX29uTmV3R2FtZXBhZENvbm5lY3RlZCk7CisgICAgICAgIHRoaXMu
X3NjZW5lLmdhbWVwYWRNYW5hZ2VyLm9uR2FtZXBhZERpc2Nvbm5lY3RlZE9ic2VydmFibGUuYWRk
KHRoaXMuX29uTmV3R2FtZXBhZERpc2Nvbm5lY3RlZCk7CisgICAgICAgIHRoaXMudXBkYXRlQnV0
dG9uVmlzaWJpbGl0eSgpOworICAgICAgICAvL2NyZWF0ZSBlYXNpbmcgZnVuY3Rpb25zCisgICAg
ICAgIHRoaXMuX2NpcmNsZUVhc2UgPSBuZXcgX0FuaW1hdGlvbnNfZWFzaW5nX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yMV9fWyJDaXJjbGVFYXNlIl0oKTsKKyAgICAgICAgdGhpcy5fY2lyY2xl
RWFzZS5zZXRFYXNpbmdNb2RlKF9BbmltYXRpb25zX2Vhc2luZ19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjFfX1siRWFzaW5nRnVuY3Rpb24iXS5FQVNJTkdNT0RFX0VBU0VJTk9VVCk7CisgICAg
ICAgIC8vIEFsbG93IGNsaWNraW5nIGluIHRoZSB2ckRldmljZU9yaWVudGF0aW9uQ2FtZXJhCisg
ICAgICAgIHNjZW5lLm9uUG9pbnRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlKSB7CisgICAg
ICAgICAgICBpZiAoX3RoaXMuX2ludGVyYWN0aW9uc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoc2NlbmUuYWN0aXZlQ2FtZXJhID09PSBfdGhpcy52ckRldmljZU9yaWVudGF0aW9uQ2Ft
ZXJhICYmIGUuZXZlbnQucG9pbnRlclR5cGUgPT09ICJtb3VzZSIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGUudHlwZSA9PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV84X19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl9jYW1lcmFHYXplci5fc2VsZWN0aW9uUG9pbnRlckRv
d24oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChlLnR5cGUgPT09IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJVUCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX2NhbWVyYUdhemVyLl9zZWxlY3Rpb25Qb2ludGVyVXAoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CisgICAgICAgIGlmICh0aGlzLndlYlZST3B0aW9ucy5mbG9vck1lc2hlcykgeworICAg
ICAgICAgICAgdGhpcy5lbmFibGVUZWxlcG9ydGF0aW9uKHsgZmxvb3JNZXNoZXM6IHRoaXMud2Vi
VlJPcHRpb25zLmZsb29yTWVzaGVzIH0pOworICAgICAgICB9CisgICAgfQorICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAib25FbnRlcmluZ1ZS
IiwgeworICAgICAgICAvKiogUmV0dXJuIHRoaXMub25FbnRlcmluZ1ZST2JzZXJ2YWJsZQorICAg
ICAgICAgKiBOb3RlOiBUaGlzIG9uZSBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gUGxl
YXNlIHVzZSBvbkVudGVyaW5nVlJPYnNlcnZhYmxlIGRpcmVjdGx5CisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm9uRW50ZXJp
bmdWUk9ic2VydmFibGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAib25FeGl0aW5nVlIiLCB7CisgICAg
ICAgIC8qKiBSZXR1cm4gdGhpcy5vbkV4aXRpbmdWUk9ic2VydmFibGUKKyAgICAgICAgICogTm90
ZTogVGhpcyBvbmUgaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFBsZWFzZSB1c2Ugb25F
eGl0aW5nVlJPYnNlcnZhYmxlIGRpcmVjdGx5CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm9uRXhpdGluZ1ZST2JzZXJ2YWJs
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZSRXhwZXJp
ZW5jZUhlbHBlci5wcm90b3R5cGUsICJvbkNvbnRyb2xsZXJNZXNoTG9hZGVkIiwgeworICAgICAg
ICAvKiogUmV0dXJuIHRoaXMub25Db250cm9sbGVyTWVzaExvYWRlZE9ic2VydmFibGUKKyAgICAg
ICAgICogTm90ZTogVGhpcyBvbmUgaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFBsZWFz
ZSB1c2Ugb25Db250cm9sbGVyTWVzaExvYWRlZE9ic2VydmFibGUgZGlyZWN0bHkKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
b25Db250cm9sbGVyTWVzaExvYWRlZE9ic2VydmFibGU7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAidGVs
ZXBvcnRhdGlvblRhcmdldCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBtZXNoIHVz
ZWQgdG8gZGlzcGxheSB3aGVyZSB0aGUgdXNlciBpcyBnb2luZyB0byB0ZWxlcG9ydC4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3RlbGVwb3J0YXRpb25UYXJnZXQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBTZXRzIHRoZSBtZXNoIHRvIGJlIHVzZWQgdG8gZGlzcGxheSB3aGVyZSB0aGUgdXNlciBp
cyBnb2luZyB0byB0ZWxlcG9ydC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICB2YWx1
ZS5uYW1lID0gInRlbGVwb3J0YXRpb25UYXJnZXQiOworICAgICAgICAgICAgICAgIHRoaXMuX2lz
RGVmYXVsdFRlbGVwb3J0YXRpb25UYXJnZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll90ZWxlcG9ydGF0aW9uVGFyZ2V0ID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJv
dG90eXBlLCAiZ2F6ZVRyYWNrZXJNZXNoIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhl
IG1lc2ggdXNlZCB0byBkaXNwbGF5IHdoZXJlIHRoZSB1c2VyIGlzIHNlbGVjdGluZywgdGhpcyBt
ZXNoIHdpbGwgYmUgY2xvbmVkIGFuZCBzZXQgYXMgdGhlIGdhemVUcmFja2VyIGZvciB0aGUgbGVm
dCBhbmQgcmlnaHQgY29udHJvbGxlcgorICAgICAgICAgKiB3aGVuIHNldCBiYWtlQ3VycmVudFRy
YW5zZm9ybUludG9WZXJ0aWNlcyB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgbWVzaC4KKyAgICAgICAg
ICogU2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9yZXNvdXJjZXMvYmFraW5nX3RyYW5zZm9y
bWF0aW9ucworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fY2FtZXJhR2F6ZXIuX2dhemVUcmFja2VyOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlKSB7
CisgICAgICAgICAgICAgICAgLy8gRGlzcG9zZSBvZiBleGlzdGluZyBtZXNoZXMKKyAgICAgICAg
ICAgICAgICBpZiAodGhpcy5fY2FtZXJhR2F6ZXIuX2dhemVUcmFja2VyKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2NhbWVyYUdhemVyLl9nYXplVHJhY2tlci5kaXNwb3NlKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sZWZ0Q29udHJvbGxlciAm
JiB0aGlzLl9sZWZ0Q29udHJvbGxlci5fZ2F6ZVRyYWNrZXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fbGVmdENvbnRyb2xsZXIuX2dhemVUcmFja2VyLmRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JpZ2h0Q29udHJvbGxlciAmJiB0
aGlzLl9yaWdodENvbnRyb2xsZXIuX2dhemVUcmFja2VyKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX3JpZ2h0Q29udHJvbGxlci5fZ2F6ZVRyYWNrZXIuZGlzcG9zZSgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBTZXQgYW5kIGNyZWF0ZSBnYXplIHRyYWNrZXJz
IG9uIGhlYWQgYW5kIGNvbnRyb2xsZXJzCisgICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhR2F6
ZXIuX2dhemVUcmFja2VyID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhR2F6
ZXIuX2dhemVUcmFja2VyLmJha2VDdXJyZW50VHJhbnNmb3JtSW50b1ZlcnRpY2VzKCk7CisgICAg
ICAgICAgICAgICAgdGhpcy5fY2FtZXJhR2F6ZXIuX2dhemVUcmFja2VyLmlzUGlja2FibGUgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jYW1lcmFHYXplci5fZ2F6ZVRyYWNrZXIuaXNW
aXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhR2F6ZXIuX2dhemVU
cmFja2VyLm5hbWUgPSAiZ2F6ZVRyYWNrZXIiOworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9s
ZWZ0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZWZ0Q29udHJvbGxl
ci5fZ2F6ZVRyYWNrZXIgPSB0aGlzLl9jYW1lcmFHYXplci5fZ2F6ZVRyYWNrZXIuY2xvbmUoImdh
emVUcmFja2VyIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlz
Ll9yaWdodENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRDb250
cm9sbGVyLl9nYXplVHJhY2tlciA9IHRoaXMuX2NhbWVyYUdhemVyLl9nYXplVHJhY2tlci5jbG9u
ZSgiZ2F6ZVRyYWNrZXIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxw
ZXIucHJvdG90eXBlLCAibGVmdENvbnRyb2xsZXJHYXplVHJhY2tlck1lc2giLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBUaGUgZ2F6ZSB0cmFja2luZyBtZXNoIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIGxlZnQgY29udHJvbGxlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fbGVmdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fbGVmdENvbnRyb2xsZXIuX2dhemVUcmFja2VyOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAicmlnaHRD
b250cm9sbGVyR2F6ZVRyYWNrZXJNZXNoIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhl
IGdhemUgdHJhY2tpbmcgbWVzaCBjb3JyZXNwb25kaW5nIHRvIHRoZSByaWdodCBjb250cm9sbGVy
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9yaWdodENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
cmlnaHRDb250cm9sbGVyLl9nYXplVHJhY2tlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlwZSwgImRpc3BsYXlHYXplIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogSWYgdGhlIHJheSBvZiB0aGUgZ2F6ZSBzaG91bGQgYmUgZGlzcGxh
eWVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZGlzcGxheUdhemU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTZXRzIGlmIHRoZSByYXkgb2YgdGhlIGdhemUgc2hvdWxkIGJlIGRpc3BsYXllZC4K
KyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLl9kaXNwbGF5R2F6ZSA9IHZhbHVlOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX2NhbWVyYUdhemVyLl9nYXplVHJhY2tlci5pc1Zpc2libGUg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fbGVmdENvbnRyb2xsZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fbGVmdENvbnRyb2xsZXIuX2dhemVUcmFja2VyLmlzVmlz
aWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGhp
cy5fcmlnaHRDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JpZ2h0Q29u
dHJvbGxlci5fZ2F6ZVRyYWNrZXIuaXNWaXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlwZSwgImRpc3BsYXlMYXNlclBvaW50ZXIi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0aGUgcmF5IG9mIHRoZSBMYXNlclBvaW50
ZXIgc2hvdWxkIGJlIGRpc3BsYXllZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlMYXNlclBvaW50ZXI7Cisg
ICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIGlmIHRoZSByYXkgb2YgdGhl
IExhc2VyUG9pbnRlciBzaG91bGQgYmUgZGlzcGxheWVkLgorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlMYXNlclBv
aW50ZXIgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fcmlnaHRDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X3JpZ2h0Q29udHJvbGxlci5fZGVhY3RpdmF0ZVBvaW50ZXIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fcmlnaHRDb250cm9sbGVyLl9nYXplVHJhY2tlci5pc1Zpc2libGUgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xlZnRDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xlZnRDb250cm9sbGVyLl9kZWFjdGl2
YXRlUG9pbnRlcigpOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZWZ0Q29udHJvbGxlci5f
Z2F6ZVRyYWNrZXIuaXNWaXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Jp
Z2h0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yaWdodENvbnRyb2xs
ZXIuX2FjdGl2YXRlUG9pbnRlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fbGVmdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
bGVmdENvbnRyb2xsZXIuX2FjdGl2YXRlUG9pbnRlcigpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUsICJkZXZpY2VPcmllbnRhdGlvbkNhbWVyYSIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBkZXZpY2VPcmllbnRhdGlvbkNhbWVyYSB1
c2VkIGFzIHRoZSBjYW1lcmEgd2hlbiBub3QgaW4gVlIuCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2VPcmllbnRh
dGlvbkNhbWVyYTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUsICJjdXJyZW50VlJDYW1lcmEiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBCYXNlZCBvbiB0aGUgY3VycmVudCBXZWJWUiBzdXBwb3J0LCBy
ZXR1cm5zIHRoZSBjdXJyZW50IFZSIGNhbWVyYSB1c2VkLgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fd2ViVlJyZWFkeSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWJWUkNhbWVyYTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZS5h
Y3RpdmVDYW1lcmE7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAid2ViVlJDYW1l
cmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgd2ViVlJDYW1lcmEgd2hpY2ggaXMg
dXNlZCB3aGVuIGluIFZSLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2ViVlJDYW1lcmE7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBl
LCAidnJEZXZpY2VPcmllbnRhdGlvbkNhbWVyYSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFRoZSBkZXZpY2VPcmllbnRhdGlvbkNhbWVyYSB0aGF0IGlzIHVzZWQgYXMgYSBmYWxsYmFjayB3
aGVuIHZyIGRldmljZSBpcyBub3QgY29ubmVjdGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdnJEZXZpY2VPcmllbnRh
dGlvbkNhbWVyYTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUsICJ2ckJ1dHRvbiIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFRoZSBodG1sIGJ1dHRvbiB0aGF0IGlzIHVzZWQgdG8gdHJpZ2dlciBlbnRl
cmluZyBpbnRvIFZSLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fYnRuVlI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAiX3RlbGVw
b3J0YXRpb25SZXF1ZXN0SW5pdGlhdGVkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9jYW1lcmFHYXplci5fdGVsZXBvcnRhdGlv
blJlcXVlc3RJbml0aWF0ZWQKKyAgICAgICAgICAgICAgICB8fCAodGhpcy5fbGVmdENvbnRyb2xs
ZXIgIT09IG51bGwgJiYgdGhpcy5fbGVmdENvbnRyb2xsZXIuX3RlbGVwb3J0YXRpb25SZXF1ZXN0
SW5pdGlhdGVkKQorICAgICAgICAgICAgICAgIHx8ICh0aGlzLl9yaWdodENvbnRyb2xsZXIgIT09
IG51bGwgJiYgdGhpcy5fcmlnaHRDb250cm9sbGVyLl90ZWxlcG9ydGF0aW9uUmVxdWVzdEluaXRp
YXRlZCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICAvLyBSYWlzZWQgd2hlbiBvbmUgb2YgdGhlIGNvbnRyb2xsZXIgaGFzIGxvYWRlZCBzdWNjZXNz
ZnVsbHkgaXRzIGFzc29jaWF0ZWQgZGVmYXVsdCBtZXNoCisgICAgVlJFeHBlcmllbmNlSGVscGVy
LnByb3RvdHlwZS5fb25EZWZhdWx0TWVzaExvYWRlZCA9IGZ1bmN0aW9uICh3ZWJWUkNvbnRyb2xs
ZXIpIHsKKyAgICAgICAgaWYgKHRoaXMuX2xlZnRDb250cm9sbGVyICYmIHRoaXMuX2xlZnRDb250
cm9sbGVyLndlYlZSQ29udHJvbGxlciA9PSB3ZWJWUkNvbnRyb2xsZXIpIHsKKyAgICAgICAgICAg
IGlmICh3ZWJWUkNvbnRyb2xsZXIubWVzaCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2xlZnRD
b250cm9sbGVyLl9zZXRMYXNlclBvaW50ZXJQYXJlbnQod2ViVlJDb250cm9sbGVyLm1lc2gpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9yaWdodENvbnRyb2xs
ZXIgJiYgdGhpcy5fcmlnaHRDb250cm9sbGVyLndlYlZSQ29udHJvbGxlciA9PSB3ZWJWUkNvbnRy
b2xsZXIpIHsKKyAgICAgICAgICAgIGlmICh3ZWJWUkNvbnRyb2xsZXIubWVzaCkgeworICAgICAg
ICAgICAgICAgIHRoaXMuX3JpZ2h0Q29udHJvbGxlci5fc2V0TGFzZXJQb2ludGVyUGFyZW50KHdl
YlZSQ29udHJvbGxlci5tZXNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0
cnkgeworICAgICAgICAgICAgdGhpcy5vbkNvbnRyb2xsZXJNZXNoTG9hZGVkT2JzZXJ2YWJsZS5u
b3RpZnlPYnNlcnZlcnMod2ViVlJDb250cm9sbGVyKTsKKyAgICAgICAgfQorICAgICAgICBjYXRj
aCAoZXJyKSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siTG9nZ2VyIl0uV2FybigiRXJyb3IgaW4geW91ciBjdXN0b20gbG9naWMgb25Db250
cm9sbGVyTWVzaExvYWRlZDogIiArIGVycik7CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAiaXNJblZSTW9k
ZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIGlm
IHdlIGFyZSBjdXJyZW50bHkgaW4gVlIgbW9kZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlYlZScHJlc2VudGluZyB8
fCB0aGlzLl9mdWxsc2NyZWVuVlJwcmVzZW50aW5nOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBW
UkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLm9uVnJEaXNwbGF5UHJlc2VudENoYW5nZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHZyRGlzcGxheSA9IHRoaXMuX3NjZW5lLmdldEVuZ2lu
ZSgpLmdldFZSRGV2aWNlKCk7CisgICAgICAgIGlmICh2ckRpc3BsYXkpIHsKKyAgICAgICAgICAg
IHZhciB3YXNQcmVzZW50aW5nID0gdGhpcy5fd2ViVlJwcmVzZW50aW5nOworICAgICAgICAgICAg
dGhpcy5fd2ViVlJwcmVzZW50aW5nID0gdnJEaXNwbGF5LmlzUHJlc2VudGluZzsKKyAgICAgICAg
ICAgIGlmICh3YXNQcmVzZW50aW5nICYmICF0aGlzLl93ZWJWUnByZXNlbnRpbmcpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLmV4aXRWUigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIkxvZ2dlciJdLldhcm4oJ0RldGVjdGVkIFZSRGlzcGxheVByZXNlbnRDaGFuZ2Ug
b24gYW4gdW5rbm93biBWUkRpc3BsYXkuIERpZCB5b3UgY2FuIGVudGVyVlIgb24gdGhlIHZyRXhw
ZXJpZW5jZUhlbHBlcj8nKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvblZp
c2liaWxpdHkoKTsKKyAgICB9OworICAgIFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUub25W
UkRpc3BsYXlDaGFuZ2VkID0gZnVuY3Rpb24gKGV2ZW50QXJncykgeworICAgICAgICB0aGlzLl93
ZWJWUnN1cHBvcnRlZCA9IGV2ZW50QXJncy52clN1cHBvcnRlZDsKKyAgICAgICAgdGhpcy5fd2Vi
VlJyZWFkeSA9ICEhZXZlbnRBcmdzLnZyRGlzcGxheTsKKyAgICAgICAgdGhpcy5fd2ViVlJwcmVz
ZW50aW5nID0gZXZlbnRBcmdzLnZyRGlzcGxheSAmJiBldmVudEFyZ3MudnJEaXNwbGF5LmlzUHJl
c2VudGluZzsKKyAgICAgICAgdGhpcy51cGRhdGVCdXR0b25WaXNpYmlsaXR5KCk7CisgICAgfTsK
KyAgICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLm1vdmVCdXR0b25Ub0JvdHRvbVJpZ2h0
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fY2FudmFzICYmICF0aGlzLl91c2VD
dXN0b21WUkJ1dHRvbiAmJiB0aGlzLl9idG5WUikgeworICAgICAgICAgICAgdmFyIHJlY3QgPSB0
aGlzLl9jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgICAgICB0aGlzLl9i
dG5WUi5zdHlsZS50b3AgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC0gNzAgKyAicHgiOworICAg
ICAgICAgICAgdGhpcy5fYnRuVlIuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIHJlY3Qud2lkdGgg
LSAxMDAgKyAicHgiOworICAgICAgICB9CisgICAgfTsKKyAgICBWUkV4cGVyaWVuY2VIZWxwZXIu
cHJvdG90eXBlLmRpc3BsYXlWUkJ1dHRvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0
aGlzLl91c2VDdXN0b21WUkJ1dHRvbiAmJiAhdGhpcy5fYnRuVlJEaXNwbGF5ZWQgJiYgdGhpcy5f
YnRuVlIpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fYnRu
VlIpOworICAgICAgICAgICAgdGhpcy5fYnRuVlJEaXNwbGF5ZWQgPSB0cnVlOworICAgICAgICB9
CisgICAgfTsKKyAgICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLnVwZGF0ZUJ1dHRvblZp
c2liaWxpdHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fYnRuVlIgfHwgdGhp
cy5fdXNlQ3VzdG9tVlJCdXR0b24pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9idG5WUi5jbGFzc05hbWUgPSAiYmFieWxvblZSaWNvbiI7CisgICAgICAg
IGlmICh0aGlzLmlzSW5WUk1vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J0blZSLmNsYXNzTmFt
ZSArPSAiIHZyZGlzcGxheXByZXNlbnRpbmciOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgaWYgKHRoaXMuX3dlYlZScmVhZHkpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9idG5WUi5jbGFzc05hbWUgKz0gIiB2cmRpc3BsYXlyZWFkeSI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAodGhpcy5fd2ViVlJzdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9idG5WUi5jbGFzc05hbWUgKz0gIiB2cmRpc3BsYXlzdXBwb3J0ZWQiOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX3dlYlZScmVxdWVzdGluZykgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2J0blZSLmNsYXNzTmFtZSArPSAiIHZyZGlzcGxheXJlcXVlc3RpbmciOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRlbXB0
IHRvIGVudGVyIFZSLiBJZiBhIGhlYWRzZXQgaXMgY29ubmVjdGVkIGFuZCByZWFkeSwgd2lsbCBy
ZXF1ZXN0IHByZXNlbnQgb24gdGhhdC4KKyAgICAgKiBPdGhlcndpc2UsIHdpbGwgdXNlIHRoZSBm
dWxsc2NyZWVuIEFQSS4KKyAgICAgKi8KKyAgICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBl
LmVudGVyVlIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIGlmICh0aGlzLm9uRW50ZXJpbmdWUk9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIHRyeSB7
CisgICAgICAgICAgICAgICAgdGhpcy5vbkVudGVyaW5nVlJPYnNlcnZhYmxlLm5vdGlmeU9ic2Vy
dmVycyh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChlcnIpIHsKKyAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TG9nZ2VyIl0uV2FybigiRXJyb3IgaW4geW91ciBjdXN0b20gbG9naWMgb25FbnRlcmluZ1ZSOiAi
ICsgZXJyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc2Nl
bmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHRoaXMuX3Nj
ZW5lLmFjdGl2ZUNhbWVyYS5wb3NpdGlvbi5jbG9uZSgpOworICAgICAgICAgICAgaWYgKHRoaXMu
dnJEZXZpY2VPcmllbnRhdGlvbkNhbWVyYSkgeworICAgICAgICAgICAgICAgIHRoaXMudnJEZXZp
Y2VPcmllbnRhdGlvbkNhbWVyYS5yb3RhdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJRdWF0ZXJuaW9uIl0uRnJvbVJvdGF0aW9uTWF0cml4KHRo
aXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5nZXRXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4
KCkpLnRvRXVsZXJBbmdsZXMoKTsKKyAgICAgICAgICAgICAgICB0aGlzLnZyRGV2aWNlT3JpZW50
YXRpb25DYW1lcmEuYW5ndWxhclNlbnNpYmlsaXR5ID0gMjAwMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0aGlzLndlYlZSQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgdmFyIGN1
cnJlbnRZUm90YXRpb24gPSB0aGlzLndlYlZSQ2FtZXJhLmRldmljZVJvdGF0aW9uUXVhdGVybmlv
bi50b0V1bGVyQW5nbGVzKCkueTsKKyAgICAgICAgICAgICAgICB2YXIgZGVzaXJlZFlSb3RhdGlv
biA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJRdWF0
ZXJuaW9uIl0uRnJvbVJvdGF0aW9uTWF0cml4KHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5nZXRX
b3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4KCkpLnRvRXVsZXJBbmdsZXMoKS55OworICAg
ICAgICAgICAgICAgIHZhciBkZWx0YSA9IGRlc2lyZWRZUm90YXRpb24gLSBjdXJyZW50WVJvdGF0
aW9uOworICAgICAgICAgICAgICAgIHZhciBjdXJyZW50R2xvYmFsUm90YXRpb24gPSB0aGlzLndl
YlZSQ2FtZXJhLnJvdGF0aW9uUXVhdGVybmlvbi50b0V1bGVyQW5nbGVzKCkueTsKKyAgICAgICAg
ICAgICAgICB0aGlzLndlYlZSQ2FtZXJhLnJvdGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJRdWF0ZXJuaW9uIl0uRnJvbUV1
bGVyQW5nbGVzKDAsIGN1cnJlbnRHbG9iYWxSb3RhdGlvbiArIGRlbHRhLCAwKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHdlIHJldHVybiB0byB0aGUgbGFz
dCBhY3RpdmUgY2FtZXJhCisgICAgICAgICAgICB0aGlzLl9leGlzdGluZ0NhbWVyYSA9IHRoaXMu
X3NjZW5lLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBhbmQgY2FjaGUgYW5n
dWxhciBzZW5zYWJpbGl0eSB0byBhdm9pZCBjYW1lcmEgcm90YXRpb24gd2hlbiBpbiBWUgorICAg
ICAgICAgICAgaWYgKHRoaXMuX2V4aXN0aW5nQ2FtZXJhLmFuZ3VsYXJTZW5zaWJpbGl0eVgpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRBbmd1bGFyU2Vuc2liaWxpdHkuYW5ndWxhclNl
bnNpYmlsaXR5WCA9IHRoaXMuX2V4aXN0aW5nQ2FtZXJhLmFuZ3VsYXJTZW5zaWJpbGl0eVg7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdDYW1lcmEuYW5ndWxhclNlbnNpYmlsaXR5WCA9
IE51bWJlci5NQVhfVkFMVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5f
ZXhpc3RpbmdDYW1lcmEuYW5ndWxhclNlbnNpYmlsaXR5WSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX2NhY2hlZEFuZ3VsYXJTZW5zaWJpbGl0eS5hbmd1bGFyU2Vuc2liaWxpdHlZID0gdGhpcy5f
ZXhpc3RpbmdDYW1lcmEuYW5ndWxhclNlbnNpYmlsaXR5WTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9leGlzdGluZ0NhbWVyYS5hbmd1bGFyU2Vuc2liaWxpdHlZID0gTnVtYmVyLk1BWF9WQUxVRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9leGlzdGluZ0NhbWVyYS5hbmd1
bGFyU2Vuc2liaWxpdHkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRBbmd1bGFyU2Vu
c2liaWxpdHkuYW5ndWxhclNlbnNpYmlsaXR5ID0gdGhpcy5fZXhpc3RpbmdDYW1lcmEuYW5ndWxh
clNlbnNpYmlsaXR5OworICAgICAgICAgICAgICAgIHRoaXMuX2V4aXN0aW5nQ2FtZXJhLmFuZ3Vs
YXJTZW5zaWJpbGl0eSA9IE51bWJlci5NQVhfVkFMVUU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuX3dlYlZScmVxdWVzdGluZykgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIC8vIElmIFdlYlZSIGlzIHN1cHBvcnRlZCBhbmQgYSBo
ZWFkc2V0IGlzIGNvbm5lY3RlZAorICAgICAgICBpZiAodGhpcy5fd2ViVlJyZWFkeSkgeworICAg
ICAgICAgICAgaWYgKCF0aGlzLl93ZWJWUnByZXNlbnRpbmcpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5vblZSUmVxdWVzdFByZXNlbnRDb21wbGV0ZS5hZGRPbmNl
KGZ1bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25BZnRlckVu
dGVyaW5nVlJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7IHN1Y2Nlc3M6IHJlc3VsdCB9KTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB0aGlzLl93ZWJWUkNhbWVyYS5w
b3NpdGlvbiA9IHRoaXMuX3Bvc2l0aW9uOworICAgICAgICAgICAgICAgIHRoaXMuX3NjZW5lLmFj
dGl2ZUNhbWVyYSA9IHRoaXMuX3dlYlZSQ2FtZXJhOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX3ZyRGV2aWNlT3JpZW50YXRpb25DYW1lcmEpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3ZyRGV2aWNlT3JpZW50YXRpb25DYW1lcmEucG9zaXRpb24gPSB0aGlz
Ll9wb3NpdGlvbjsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl92ckRldmljZU9yaWVudGF0aW9uQ2FtZXJhLm1pblogPSB0
aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEubWluWjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSA9IHRoaXMuX3ZyRGV2aWNlT3JpZW50YXRpb25DYW1l
cmE7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5lbnRlckZ1bGxzY3JlZW4o
dGhpcy5yZXF1ZXN0UG9pbnRlckxvY2tPbkZ1bGxTY3JlZW4pOworICAgICAgICAgICAgdGhpcy51
cGRhdGVCdXR0b25WaXNpYmlsaXR5KCk7CisgICAgICAgICAgICB0aGlzLl92ckRldmljZU9yaWVu
dGF0aW9uQ2FtZXJhLm9uVmlld01hdHJpeENoYW5nZWRPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLm9uQWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJs
ZS5ub3RpZnlPYnNlcnZlcnMoeyBzdWNjZXNzOiB0cnVlIH0pOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSAmJiB0aGlzLl9j
YW52YXMpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5hdHRhY2hDb250
cm9sKHRoaXMuX2NhbnZhcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2ludGVyYWN0
aW9uc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLnJlZ2lzdGVyQmVmb3JlUmVu
ZGVyKHRoaXMuYmVmb3JlUmVuZGVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZGlz
cGxheUxhc2VyUG9pbnRlcikgeworICAgICAgICAgICAgW3RoaXMuX2xlZnRDb250cm9sbGVyLCB0
aGlzLl9yaWdodENvbnRyb2xsZXJdLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY29udHJvbGxlcikgeworICAgICAgICAgICAgICAgICAgICBjb250
cm9sbGVyLl9hY3RpdmF0ZVBvaW50ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9oYXNFbnRlcmVkVlIgPSB0cnVlOworICAg
IH07CisgICAgLyoqCisgICAgICogQXR0ZW1wdCB0byBleGl0IFZSLCBvciBmdWxsc2NyZWVuLgor
ICAgICAqLworICAgIFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUuZXhpdFZSID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBpZiAodGhpcy5faGFzRW50ZXJlZFZSKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5vbkV4aXRpbmdWUk9ic2VydmFibGUpIHsKKyAgICAgICAgICAgICAgICB0cnkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXhpdGluZ1ZST2JzZXJ2YWJsZS5ub3RpZnlPYnNl
cnZlcnModGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoIChl
cnIpIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4oIkVycm9yIGluIHlvdXIgY3VzdG9tIGxvZ2ljIG9u
RXhpdGluZ1ZSOiAiICsgZXJyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAodGhpcy5fd2ViVlJwcmVzZW50aW5nKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZGlzYWJsZVZSKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fcG9zaXRpb24gPSB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEucG9zaXRpb24uY2xvbmUo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLnZyRGV2aWNlT3JpZW50YXRp
b25DYW1lcmEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnZyRGV2aWNlT3JpZW50YXRpb25DYW1l
cmEuYW5ndWxhclNlbnNpYmlsaXR5ID0gTnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2VPcmllbnRhdGlvbkNhbWVyYSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuX2RldmljZU9yaWVudGF0aW9uQ2FtZXJhLnBvc2l0aW9uID0gdGhpcy5f
cG9zaXRpb247CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhID0gdGhp
cy5fZGV2aWNlT3JpZW50YXRpb25DYW1lcmE7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Nh
bnZhcykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEuYXR0
YWNoQ29udHJvbCh0aGlzLl9jYW52YXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAvLyBSZXN0b3JlIGFuZ3VsYXIgc2Vuc2liaWxpdHkKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fY2FjaGVkQW5ndWxhclNlbnNpYmlsaXR5LmFuZ3VsYXJTZW5zaWJpbGl0eVgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlT3JpZW50YXRpb25DYW1lcmEuYW5ndWxhclNl
bnNpYmlsaXR5WCA9IHRoaXMuX2NhY2hlZEFuZ3VsYXJTZW5zaWJpbGl0eS5hbmd1bGFyU2Vuc2li
aWxpdHlYOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRBbmd1bGFyU2Vuc2liaWxp
dHkuYW5ndWxhclNlbnNpYmlsaXR5WCA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRBbmd1bGFyU2Vuc2liaWxpdHkuYW5ndWxhclNlbnNp
YmlsaXR5WSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VPcmllbnRhdGlvbkNh
bWVyYS5hbmd1bGFyU2Vuc2liaWxpdHlZID0gdGhpcy5fY2FjaGVkQW5ndWxhclNlbnNpYmlsaXR5
LmFuZ3VsYXJTZW5zaWJpbGl0eVk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZEFu
Z3VsYXJTZW5zaWJpbGl0eS5hbmd1bGFyU2Vuc2liaWxpdHlZID0gbnVsbDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZEFuZ3VsYXJTZW5zaWJpbGl0
eS5hbmd1bGFyU2Vuc2liaWxpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNl
T3JpZW50YXRpb25DYW1lcmEuYW5ndWxhclNlbnNpYmlsaXR5ID0gdGhpcy5fY2FjaGVkQW5ndWxh
clNlbnNpYmlsaXR5LmFuZ3VsYXJTZW5zaWJpbGl0eTsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5fY2FjaGVkQW5ndWxhclNlbnNpYmlsaXR5LmFuZ3VsYXJTZW5zaWJpbGl0eSA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhp
cy5fZXhpc3RpbmdDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9leGlzdGluZ0NhbWVy
YS5wb3NpdGlvbiA9IHRoaXMuX3Bvc2l0aW9uOworICAgICAgICAgICAgICAgIHRoaXMuX3NjZW5l
LmFjdGl2ZUNhbWVyYSA9IHRoaXMuX2V4aXN0aW5nQ2FtZXJhOworICAgICAgICAgICAgICAgIC8v
IFJlc3RvcmUgYW5ndWxhciBzZW5zaWJpbGl0eQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9j
YWNoZWRBbmd1bGFyU2Vuc2liaWxpdHkuYW5ndWxhclNlbnNpYmlsaXR5WCkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9leGlzdGluZ0NhbWVyYS5hbmd1bGFyU2Vuc2liaWxpdHlYID0gdGhp
cy5fY2FjaGVkQW5ndWxhclNlbnNpYmlsaXR5LmFuZ3VsYXJTZW5zaWJpbGl0eVg7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX2NhY2hlZEFuZ3VsYXJTZW5zaWJpbGl0eS5hbmd1bGFyU2Vuc2li
aWxpdHlYID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX2NhY2hlZEFuZ3VsYXJTZW5zaWJpbGl0eS5hbmd1bGFyU2Vuc2liaWxpdHlZKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2V4aXN0aW5nQ2FtZXJhLmFuZ3VsYXJTZW5zaWJpbGl0eVkg
PSB0aGlzLl9jYWNoZWRBbmd1bGFyU2Vuc2liaWxpdHkuYW5ndWxhclNlbnNpYmlsaXR5WTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkQW5ndWxhclNlbnNpYmlsaXR5LmFuZ3VsYXJT
ZW5zaWJpbGl0eVkgPSBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fY2FjaGVkQW5ndWxhclNlbnNpYmlsaXR5LmFuZ3VsYXJTZW5zaWJpbGl0eSkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9leGlzdGluZ0NhbWVyYS5hbmd1bGFyU2Vuc2liaWxp
dHkgPSB0aGlzLl9jYWNoZWRBbmd1bGFyU2Vuc2liaWxpdHkuYW5ndWxhclNlbnNpYmlsaXR5Owor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRBbmd1bGFyU2Vuc2liaWxpdHkuYW5ndWxh
clNlbnNpYmlsaXR5ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvblZpc2liaWxpdHkoKTsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9pbnRlcmFjdGlvbnNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2Nl
bmUudW5yZWdpc3RlckJlZm9yZVJlbmRlcih0aGlzLmJlZm9yZVJlbmRlcik7CisgICAgICAgICAg
ICAgICAgdGhpcy5fY2FtZXJhR2F6ZXIuX2dhemVUcmFja2VyLmlzVmlzaWJsZSA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sZWZ0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9sZWZ0Q29udHJvbGxlci5fZ2F6ZVRyYWNrZXIuaXNWaXNpYmxlID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yaWdodENv
bnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRDb250cm9sbGVyLl9n
YXplVHJhY2tlci5pc1Zpc2libGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyByZXNpemUgdG8gdXBkYXRlIHdpZHRoIGFuZCBoZWlnaHQg
d2hlbiBleGl0aW5nIHZyIGV4aXRzIGZ1bGxzY3JlZW4KKyAgICAgICAgICAgIHRoaXMuX3NjZW5l
LmdldEVuZ2luZSgpLnJlc2l6ZSgpOworICAgICAgICAgICAgW3RoaXMuX2xlZnRDb250cm9sbGVy
LCB0aGlzLl9yaWdodENvbnRyb2xsZXJdLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHsK
KyAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlcikgeworICAgICAgICAgICAgICAgICAgICBj
b250cm9sbGVyLl9kZWFjdGl2YXRlUG9pbnRlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5faGFzRW50ZXJlZFZSID0gZmFsc2U7CisgICAg
ICAgICAgICAvLyBVcGRhdGUgZW5naW5lIHN0YXRlIHRvIHJlIGVuYWJsZSBub24tdnIgY2FtZXJh
IGlucHV0CisgICAgICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7
CisgICAgICAgICAgICBpZiAoZW5naW5lLl9vblZyRGlzcGxheVByZXNlbnRDaGFuZ2UpIHsKKyAg
ICAgICAgICAgICAgICBlbmdpbmUuX29uVnJEaXNwbGF5UHJlc2VudENoYW5nZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVlJF
eHBlcmllbmNlSGVscGVyLnByb3RvdHlwZSwgInBvc2l0aW9uIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSB2ciBleHBlcmllbmNlIGhlbHBlci4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3Bvc2l0aW9uOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0
aGUgcG9zaXRpb24gb2YgdGhlIHZyIGV4cGVyaWVuY2UgaGVscGVyLgorICAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9u
ID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLnBvc2l0aW9uID0gdmFsdWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEVuYWJs
ZXMgY29udHJvbGxlcnMgYW5kIHVzZXIgaW50ZXJhY3Rpb25zIHN1Y2ggYXMgc2VsZWN0aW5nIGFu
ZCBvYmplY3Qgb3IgY2xpY2tpbmcgb24gYW4gb2JqZWN0LgorICAgICAqLworICAgIFZSRXhwZXJp
ZW5jZUhlbHBlci5wcm90b3R5cGUuZW5hYmxlSW50ZXJhY3Rpb25zID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoIXRoaXMuX2ludGVyYWN0aW9u
c0VuYWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2ludGVyYWN0aW9uc1JlcXVlc3RlZCA9IHRy
dWU7CisgICAgICAgICAgICBpZiAodGhpcy5fbGVmdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9lbmFibGVJbnRlcmFjdGlvbk9uQ29udHJvbGxlcih0aGlzLl9sZWZ0Q29udHJv
bGxlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fcmlnaHRDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlSW50ZXJhY3Rpb25PbkNvbnRyb2xs
ZXIodGhpcy5fcmlnaHRDb250cm9sbGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMucmF5U2VsZWN0aW9uUHJlZGljYXRlID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWVzaC5pc1Zpc2libGUgJiYgKG1lc2guaXNQaWNrYWJsZSB8fCBtZXNoLm5h
bWUgPT09IF90aGlzLl9mbG9vck1lc2hOYW1lKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB0aGlzLm1lc2hTZWxlY3Rpb25QcmVkaWNhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdGhpcy5fcmF5
U2VsZWN0aW9uUHJlZGljYXRlID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoX3RoaXMuX2lzVGVsZXBvcnRhdGlvbkZsb29yKG1lc2gpIHx8IChtZXNoLm5hbWUuaW5kZXhP
ZigiZ2F6ZVRyYWNrZXIiKSA9PT0gLTEKKyAgICAgICAgICAgICAgICAgICAgJiYgbWVzaC5uYW1l
LmluZGV4T2YoInRlbGVwb3J0YXRpb25UYXJnZXQiKSA9PT0gLTEKKyAgICAgICAgICAgICAgICAg
ICAgJiYgbWVzaC5uYW1lLmluZGV4T2YoInRvcnVzVGVsZXBvcnRhdGlvbiIpID09PSAtMSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnJheVNlbGVjdGlvblByZWRpY2F0ZSht
ZXNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRoaXMuX2ludGVyYWN0aW9uc0VuYWJsZWQgPSB0
cnVlOworICAgICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVlJFeHBl
cmllbmNlSGVscGVyLnByb3RvdHlwZSwgIl9ub0NvbnRyb2xsZXJJc0FjdGl2ZSIsIHsKKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gISh0aGlzLl9sZWZ0Q29u
dHJvbGxlciAmJiB0aGlzLl9sZWZ0Q29udHJvbGxlci5fYWN0aXZlUG9pbnRlcikgJiYgISh0aGlz
Ll9yaWdodENvbnRyb2xsZXIgJiYgdGhpcy5fcmlnaHRDb250cm9sbGVyLl9hY3RpdmVQb2ludGVy
KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlwZS5f
aXNUZWxlcG9ydGF0aW9uRmxvb3IgPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMuX2Zsb29yTWVzaGVzQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgaWYgKHRoaXMuX2Zsb29yTWVzaGVzQ29sbGVjdGlvbltpXS5pZCA9PT0gbWVz
aC5pZCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLl9mbG9vck1lc2hOYW1lICYmIG1lc2gubmFtZSA9PT0g
dGhpcy5fZmxvb3JNZXNoTmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBh
IGZsb29yIG1lc2ggdG8gYmUgdXNlZCBmb3IgdGVsZXBvcnRhdGlvbi4KKyAgICAgKiBAcGFyYW0g
Zmxvb3JNZXNoIHRoZSBtZXNoIHRvIGJlIHVzZWQgZm9yIHRlbGVwb3J0YXRpb24uCisgICAgICov
CisgICAgVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlwZS5hZGRGbG9vck1lc2ggPSBmdW5jdGlv
biAoZmxvb3JNZXNoKSB7CisgICAgICAgIGlmICghdGhpcy5fZmxvb3JNZXNoZXNDb2xsZWN0aW9u
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2Zs
b29yTWVzaGVzQ29sbGVjdGlvbi5pbmRleE9mKGZsb29yTWVzaCkgPiAtMSkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Zsb29yTWVzaGVzQ29sbGVjdGlv
bi5wdXNoKGZsb29yTWVzaCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGEgZmxv
b3IgbWVzaCBmcm9tIGJlaW5nIHVzZWQgZm9yIHRlbGVwb3J0YXRpb24uCisgICAgICogQHBhcmFt
IGZsb29yTWVzaCB0aGUgbWVzaCB0byBiZSByZW1vdmVkLgorICAgICAqLworICAgIFZSRXhwZXJp
ZW5jZUhlbHBlci5wcm90b3R5cGUucmVtb3ZlRmxvb3JNZXNoID0gZnVuY3Rpb24gKGZsb29yTWVz
aCkgeworICAgICAgICBpZiAoIXRoaXMuX2Zsb29yTWVzaGVzQ29sbGVjdGlvbikgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBtZXNoSW5kZXggPSB0aGlzLl9m
bG9vck1lc2hlc0NvbGxlY3Rpb24uaW5kZXhPZihmbG9vck1lc2gpOworICAgICAgICBpZiAobWVz
aEluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgdGhpcy5fZmxvb3JNZXNoZXNDb2xsZWN0aW9u
LnNwbGljZShtZXNoSW5kZXgsIDEpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBFbmFibGVzIGludGVyYWN0aW9ucyBhbmQgdGVsZXBvcnRhdGlvbiB1c2luZyB0aGUgVlIgY29u
dHJvbGxlcnMgYW5kIGdhemUuCisgICAgICogQHBhcmFtIHZyVGVsZXBvcnRhdGlvbk9wdGlvbnMg
b3B0aW9ucyB0byBtb2RpZnkgdGVsZXBvcnRhdGlvbiBiZWhhdmlvci4KKyAgICAgKi8KKyAgICBW
UkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLmVuYWJsZVRlbGVwb3J0YXRpb24gPSBmdW5jdGlv
biAodnJUZWxlcG9ydGF0aW9uT3B0aW9ucykgeworICAgICAgICBpZiAodnJUZWxlcG9ydGF0aW9u
T3B0aW9ucyA9PT0gdm9pZCAwKSB7IHZyVGVsZXBvcnRhdGlvbk9wdGlvbnMgPSB7fTsgfQorICAg
ICAgICBpZiAoIXRoaXMuX3RlbGVwb3J0YXRpb25Jbml0aWFsaXplZCkgeworICAgICAgICAgICAg
dGhpcy5fdGVsZXBvcnRhdGlvblJlcXVlc3RlZCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLmVu
YWJsZUludGVyYWN0aW9ucygpOworICAgICAgICAgICAgaWYgKHZyVGVsZXBvcnRhdGlvbk9wdGlv
bnMuZmxvb3JNZXNoTmFtZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2Zsb29yTWVzaE5hbWUg
PSB2clRlbGVwb3J0YXRpb25PcHRpb25zLmZsb29yTWVzaE5hbWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAodnJUZWxlcG9ydGF0aW9uT3B0aW9ucy5mbG9vck1lc2hlcykgeworICAg
ICAgICAgICAgICAgIHRoaXMuX2Zsb29yTWVzaGVzQ29sbGVjdGlvbiA9IHZyVGVsZXBvcnRhdGlv
bk9wdGlvbnMuZmxvb3JNZXNoZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhp
cy5fbGVmdENvbnRyb2xsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJs
ZVRlbGVwb3J0YXRpb25PbkNvbnRyb2xsZXIodGhpcy5fbGVmdENvbnRyb2xsZXIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX3JpZ2h0Q29udHJvbGxlciAhPSBudWxsKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlVGVsZXBvcnRhdGlvbk9uQ29udHJvbGxlcih0
aGlzLl9yaWdodENvbnRyb2xsZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ3Jl
YXRlcyBhbiBpbWFnZSBwcm9jZXNzaW5nIHBvc3QgcHJvY2VzcyBmb3IgdGhlIHZpZ25ldHRlIG5v
dCByZWx5aW5nCisgICAgICAgICAgICAvLyBvbiB0aGUgbWFpbiBzY2VuZSBjb25maWd1cmF0aW9u
IGZvciBpbWFnZSBwcm9jZXNzaW5nIHRvIHJlZHVjZSBzZXR1cCBhbmQgc3BhY2VzCisgICAgICAg
ICAgICAvLyAoZ2FtbWEvbGluZWFyKSBjb25mbGljdHMuCisgICAgICAgICAgICB2YXIgaW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbiA9IG5ldyBfTWF0ZXJpYWxzX2ltYWdlUHJvY2Vzc2luZ0Nv
bmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bIkltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24iXSgpOworICAgICAgICAgICAgaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbi52aWduZXR0ZUNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xMF9fWyJDb2xvcjQiXSgwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIGltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udmlnbmV0dGVFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHRoaXMuX3Bvc3RQcm9jZXNzTW92ZSA9IG5ldyBfUG9zdFByb2Nlc3Nlc19pbWFnZVByb2Nl
c3NpbmdQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siSW1hZ2VQcm9j
ZXNzaW5nUG9zdFByb2Nlc3MiXSgicG9zdFByb2Nlc3NNb3ZlIiwgMS4wLCB0aGlzLl93ZWJWUkNh
bWVyYSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBpbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uKTsKKyAgICAgICAgICAgIHRoaXMuX3dlYlZSQ2FtZXJhLmRl
dGFjaFBvc3RQcm9jZXNzKHRoaXMuX3Bvc3RQcm9jZXNzTW92ZSk7CisgICAgICAgICAgICB0aGlz
Ll90ZWxlcG9ydGF0aW9uSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKHRoaXMu
X2lzRGVmYXVsdFRlbGVwb3J0YXRpb25UYXJnZXQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9j
cmVhdGVUZWxlcG9ydGF0aW9uQ2lyY2xlcygpOworICAgICAgICAgICAgICAgIHRoaXMuX3RlbGVw
b3J0YXRpb25UYXJnZXQuc2NhbGluZy5zY2FsZUluUGxhY2UodGhpcy5fd2ViVlJDYW1lcmEuZGV2
aWNlU2NhbGVGYWN0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBW
UkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLl9lbmFibGVJbnRlcmFjdGlvbk9uQ29udHJvbGxl
ciA9IGZ1bmN0aW9uIChjb250cm9sbGVyKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIHZhciBjb250cm9sbGVyTWVzaCA9IGNvbnRyb2xsZXIud2ViVlJDb250cm9sbGVyLm1l
c2g7CisgICAgICAgIGlmIChjb250cm9sbGVyTWVzaCkgeworICAgICAgICAgICAgY29udHJvbGxl
ci5faW50ZXJhY3Rpb25zRW5hYmxlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAodGhpcy5pc0lu
VlJNb2RlICYmIHRoaXMuX2Rpc3BsYXlMYXNlclBvaW50ZXIpIHsKKyAgICAgICAgICAgICAgICBj
b250cm9sbGVyLl9hY3RpdmF0ZVBvaW50ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0aGlzLndlYlZST3B0aW9ucy5sYXNlclRvZ2dsZSkgeworICAgICAgICAgICAgICAgIGNv
bnRyb2xsZXIud2ViVlJDb250cm9sbGVyLm9uTWFpbkJ1dHRvblN0YXRlQ2hhbmdlZE9ic2VydmFi
bGUuYWRkKGZ1bmN0aW9uIChzdGF0ZU9iamVjdCkgeworICAgICAgICAgICAgICAgICAgICAvLyBF
bmFibGluZyAvIGRpc2FibGluZyBsYXNlclBvaW50ZXIKKyAgICAgICAgICAgICAgICAgICAgaWYg
KF90aGlzLl9kaXNwbGF5TGFzZXJQb2ludGVyICYmIHN0YXRlT2JqZWN0LnZhbHVlID09PSAxKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fYWN0aXZlUG9pbnRlcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX2RlYWN0aXZhdGVQb2lu
dGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9hY3RpdmF0
ZVBvaW50ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChfdGhpcy5kaXNwbGF5R2F6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRyb2xsZXIuX2dhemVUcmFja2VyLmlzVmlzaWJsZSA9IGNvbnRyb2xsZXIuX2FjdGl2
ZVBvaW50ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRy
b2xsZXIud2ViVlJDb250cm9sbGVyLm9uVHJpZ2dlclN0YXRlQ2hhbmdlZE9ic2VydmFibGUuYWRk
KGZ1bmN0aW9uIChzdGF0ZU9iamVjdCkgeworICAgICAgICAgICAgICAgIHZhciBnYXplciA9IGNv
bnRyb2xsZXI7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9ub0NvbnRyb2xsZXJJc0FjdGl2
ZSkgeworICAgICAgICAgICAgICAgICAgICBnYXplciA9IF90aGlzLl9jYW1lcmFHYXplcjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFnYXplci5fcG9pbnRlckRvd25P
bk1lc2hBc2tlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QudmFsdWUg
PiBfdGhpcy5fcGFkU2Vuc2liaWxpdHlVcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ2F6
ZXIuX3NlbGVjdGlvblBvaW50ZXJEb3duKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVPYmplY3QudmFsdWUg
PCBfdGhpcy5fcGFkU2Vuc2liaWxpdHlEb3duKSB7CisgICAgICAgICAgICAgICAgICAgIGdhemVy
Ll9zZWxlY3Rpb25Qb2ludGVyVXAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlwZS5f
Y2hlY2tUZWxlcG9ydFdpdGhSYXkgPSBmdW5jdGlvbiAoc3RhdGVPYmplY3QsIGdhemVyKSB7Cisg
ICAgICAgIC8vIERvbnQgdGVsZXBvcnQgaWYgYW5vdGhlciBnYXplIGFscmVhZHkgcmVxdWVzdGVk
IHRlbGVwb3J0YXRpb24KKyAgICAgICAgaWYgKHRoaXMuX3RlbGVwb3J0YXRpb25SZXF1ZXN0SW5p
dGlhdGVkICYmICFnYXplci5fdGVsZXBvcnRhdGlvblJlcXVlc3RJbml0aWF0ZWQpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWdhemVyLl90ZWxlcG9ydGF0
aW9uUmVxdWVzdEluaXRpYXRlZCkgeworICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LnkgPCAt
dGhpcy5fcGFkU2Vuc2liaWxpdHlVcCAmJiBnYXplci5fZHBhZFByZXNzZWQpIHsKKyAgICAgICAg
ICAgICAgICBnYXplci5fYWN0aXZhdGVQb2ludGVyKCk7CisgICAgICAgICAgICAgICAgZ2F6ZXIu
X3RlbGVwb3J0YXRpb25SZXF1ZXN0SW5pdGlhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIExpc3RlbmluZyB0byB0aGUg
cHJvcGVyIGNvbnRyb2xsZXIgdmFsdWVzIGNoYW5nZXMgdG8gY29uZmlybSB0ZWxlcG9ydGF0aW9u
CisgICAgICAgICAgICBpZiAoTWF0aC5zcXJ0KHN0YXRlT2JqZWN0LnkgKiBzdGF0ZU9iamVjdC55
ICsgc3RhdGVPYmplY3QueCAqIHN0YXRlT2JqZWN0LngpIDwgdGhpcy5fcGFkU2Vuc2liaWxpdHlE
b3duKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RlbGVwb3J0QWN0aXZlKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMudGVsZXBvcnRDYW1lcmEodGhpcy5faGFsb0NlbnRlcik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdhemVyLl90ZWxlcG9ydGF0aW9uUmVx
dWVzdEluaXRpYXRlZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
KyAgICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLl9jaGVja1JvdGF0ZSA9IGZ1bmN0aW9u
IChzdGF0ZU9iamVjdCwgZ2F6ZXIpIHsKKyAgICAgICAgLy8gT25seSByb3RhdGUgd2hlbiB1c2Vy
IGlzIG5vdCBjdXJyZW50bHkgc2VsZWN0aW5nIGEgdGVsZXBvcnRhdGlvbiBsb2NhdGlvbgorICAg
ICAgICBpZiAoZ2F6ZXIuX3RlbGVwb3J0YXRpb25SZXF1ZXN0SW5pdGlhdGVkKSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFnYXplci5fcm90YXRpb25MZWZ0
QXNrZWQpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC54IDwgLXRoaXMuX3BhZFNlbnNp
YmlsaXR5VXAgJiYgZ2F6ZXIuX2RwYWRQcmVzc2VkKSB7CisgICAgICAgICAgICAgICAgZ2F6ZXIu
X3JvdGF0aW9uTGVmdEFza2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fcm90
YXRpb25BbGxvd2VkKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZUNhbWVyYShm
YWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LnggPiAtdGhpcy5fcGFkU2Vu
c2liaWxpdHlEb3duKSB7CisgICAgICAgICAgICAgICAgZ2F6ZXIuX3JvdGF0aW9uTGVmdEFza2Vk
ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFnYXplci5f
cm90YXRpb25SaWdodEFza2VkKSB7CisgICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QueCA+IHRo
aXMuX3BhZFNlbnNpYmlsaXR5VXAgJiYgZ2F6ZXIuX2RwYWRQcmVzc2VkKSB7CisgICAgICAgICAg
ICAgICAgZ2F6ZXIuX3JvdGF0aW9uUmlnaHRBc2tlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX3JvdGF0aW9uQWxsb3dlZCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9y
b3RhdGVDYW1lcmEodHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LnggPCB0
aGlzLl9wYWRTZW5zaWJpbGl0eURvd24pIHsKKyAgICAgICAgICAgICAgICBnYXplci5fcm90YXRp
b25SaWdodEFza2VkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
ICAgIFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUuX2NoZWNrVGVsZXBvcnRCYWNrd2FyZHMg
PSBmdW5jdGlvbiAoc3RhdGVPYmplY3QsIGdhemVyKSB7CisgICAgICAgIC8vIE9ubHkgdGVsZXBv
cnQgYmFja3dhcmRzIHdoZW4gdXNlciBpcyBub3QgY3VycmVudGx5IHNlbGVjdGluZyBhIHRlbGVw
b3J0YXRpb24gbG9jYXRpb24KKyAgICAgICAgaWYgKGdhemVyLl90ZWxlcG9ydGF0aW9uUmVxdWVz
dEluaXRpYXRlZCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8v
IFRlbGVwb3J0IGJhY2t3YXJkcworICAgICAgICBpZiAoc3RhdGVPYmplY3QueSA+IHRoaXMuX3Bh
ZFNlbnNpYmlsaXR5VXAgJiYgZ2F6ZXIuX2RwYWRQcmVzc2VkKSB7CisgICAgICAgICAgICBpZiAo
IWdhemVyLl90ZWxlcG9ydGF0aW9uQmFja1JlcXVlc3RJbml0aWF0ZWQpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMuY3VycmVudFZSQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gR2V0IHJvdGF0aW9u
IGFuZCBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBjYW1lcmEKKyAgICAgICAgICAgICAgICB2YXIg
cm90YXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siUXVhdGVybmlvbiJdLkZyb21Sb3RhdGlvbk1hdHJpeCh0aGlzLmN1cnJlbnRWUkNhbWVyYS5n
ZXRXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4KCkpOworICAgICAgICAgICAgICAgIHZh
ciBwb3NpdGlvbiA9IHRoaXMuY3VycmVudFZSQ2FtZXJhLnBvc2l0aW9uOworICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBjYW1lcmEgaGFzIGRldmljZSBwb3NpdGlvbiwgdXNlIHRoYXQgaW5zdGVh
ZAorICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRWUkNhbWVyYS5kZXZpY2VQb3NpdGlv
biAmJiB0aGlzLmN1cnJlbnRWUkNhbWVyYS5kZXZpY2VSb3RhdGlvblF1YXRlcm5pb24pIHsKKyAg
ICAgICAgICAgICAgICAgICAgcm90YXRpb24gPSB0aGlzLmN1cnJlbnRWUkNhbWVyYS5kZXZpY2VS
b3RhdGlvblF1YXRlcm5pb247CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5j
dXJyZW50VlJDYW1lcmEuZGV2aWNlUG9zaXRpb247CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIC8vIEdldCBtYXRyaXggd2l0aCBvbmx5IHRoZSB5IHJvdGF0aW9uIG9mIHRoZSBk
ZXZpY2Ugcm90YXRpb24KKyAgICAgICAgICAgICAgICByb3RhdGlvbi50b0V1bGVyQW5nbGVzVG9S
ZWYodGhpcy5fd29ya2luZ1ZlY3Rvcik7CisgICAgICAgICAgICAgICAgdGhpcy5fd29ya2luZ1Zl
Y3Rvci56ID0gMDsKKyAgICAgICAgICAgICAgICB0aGlzLl93b3JraW5nVmVjdG9yLnggPSAwOwor
ICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih0aGlzLl93b3Jr
aW5nVmVjdG9yLnksIHRoaXMuX3dvcmtpbmdWZWN0b3IueCwgdGhpcy5fd29ya2luZ1ZlY3Rvci56
LCB0aGlzLl93b3JraW5nUXVhdGVybmlvbik7CisgICAgICAgICAgICAgICAgdGhpcy5fd29ya2lu
Z1F1YXRlcm5pb24udG9Sb3RhdGlvbk1hdHJpeCh0aGlzLl93b3JraW5nTWF0cml4KTsKKyAgICAg
ICAgICAgICAgICAvLyBSb3RhdGUgYmFja3dhcmRzIHJheSBieSBkZXZpY2Ugcm90YXRpb24gdG8g
Y2FzdCBhdCB0aGUgZ3JvdW5kIGJlaGluZCB0aGUgdXNlcgorICAgICAgICAgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJWZWN0b3IzIl0uVHJh
bnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0aGlzLl90ZWxlcG9ydEJhY2t3YXJkc1ZlY3RvciwgdGhp
cy5fd29ya2luZ01hdHJpeCwgdGhpcy5fd29ya2luZ1ZlY3Rvcik7CisgICAgICAgICAgICAgICAg
Ly8gVGVsZXBvcnQgaWYgcmF5IGhpdCB0aGUgZ3JvdW5kIGFuZCBpcyBub3QgdG8gZmFyIGF3YXkg
ZWcuIGJhY2t3YXJkcyBvZmYgYSBjbGlmZgorICAgICAgICAgICAgICAgIHZhciByYXkgPSBuZXcg
X0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJSYXkiXShwb3NpdGlv
biwgdGhpcy5fd29ya2luZ1ZlY3Rvcik7CisgICAgICAgICAgICAgICAgdmFyIGhpdCA9IHRoaXMu
X3NjZW5lLnBpY2tXaXRoUmF5KHJheSwgdGhpcy5fcmF5U2VsZWN0aW9uUHJlZGljYXRlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoaGl0ICYmIGhpdC5waWNrZWRQb2ludCAmJiBoaXQucGlja2VkTWVz
aCAmJiB0aGlzLl9pc1RlbGVwb3J0YXRpb25GbG9vcihoaXQucGlja2VkTWVzaCkgJiYgaGl0LmRp
c3RhbmNlIDwgNSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbGVwb3J0Q2FtZXJhKGhp
dC5waWNrZWRQb2ludCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdhemVy
Ll90ZWxlcG9ydGF0aW9uQmFja1JlcXVlc3RJbml0aWF0ZWQgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZ2F6ZXIuX3RlbGVwb3J0
YXRpb25CYWNrUmVxdWVzdEluaXRpYXRlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfTsKKyAg
ICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLl9lbmFibGVUZWxlcG9ydGF0aW9uT25Db250
cm9sbGVyID0gZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhp
czsKKyAgICAgICAgdmFyIGNvbnRyb2xsZXJNZXNoID0gY29udHJvbGxlci53ZWJWUkNvbnRyb2xs
ZXIubWVzaDsKKyAgICAgICAgaWYgKGNvbnRyb2xsZXJNZXNoKSB7CisgICAgICAgICAgICBpZiAo
IWNvbnRyb2xsZXIuX2ludGVyYWN0aW9uc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9lbmFibGVJbnRlcmFjdGlvbk9uQ29udHJvbGxlcihjb250cm9sbGVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNvbnRyb2xsZXIuX2ludGVyYWN0aW9uc0VuYWJsZWQgPSB0cnVlOwor
ICAgICAgICAgICAgY29udHJvbGxlci5fdGVsZXBvcnRhdGlvbkVuYWJsZWQgPSB0cnVlOworICAg
ICAgICAgICAgaWYgKGNvbnRyb2xsZXIud2ViVlJDb250cm9sbGVyLmNvbnRyb2xsZXJUeXBlID09
PSBfR2FtZXBhZHNfQ29udHJvbGxlcnNfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMl9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXJUeXBlIl0uVklWRSkgewor
ICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX2RwYWRQcmVzc2VkID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgY29udHJvbGxlci53ZWJWUkNvbnRyb2xsZXIub25QYWRTdGF0ZUNoYW5nZWRPYnNl
cnZhYmxlLmFkZChmdW5jdGlvbiAoc3RhdGVPYmplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29udHJvbGxlci5fZHBhZFByZXNzZWQgPSBzdGF0ZU9iamVjdC5wcmVzc2VkOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvbnRyb2xsZXIuX2RwYWRQcmVzc2VkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250cm9sbGVyLl9yb3RhdGlvbkxlZnRBc2tlZCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcm90YXRpb25SaWdodEFza2VkID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl90ZWxlcG9ydGF0aW9uQmFja1Jl
cXVlc3RJbml0aWF0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udHJvbGxlci53ZWJWUkNv
bnRyb2xsZXIub25QYWRWYWx1ZXNDaGFuZ2VkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHN0YXRl
T2JqZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLnRlbGVwb3J0YXRpb25FbmFibGVk
KSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9jaGVja1RlbGVwb3J0QmFja3dhcmRzKHN0
YXRlT2JqZWN0LCBjb250cm9sbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2NoZWNr
VGVsZXBvcnRXaXRoUmF5KHN0YXRlT2JqZWN0LCBjb250cm9sbGVyKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgX3RoaXMuX2NoZWNrUm90YXRlKHN0YXRlT2JqZWN0LCBjb250
cm9sbGVyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKyAgICBWUkV4cGVy
aWVuY2VIZWxwZXIucHJvdG90eXBlLl9jcmVhdGVUZWxlcG9ydGF0aW9uQ2lyY2xlcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdGhpcy5fdGVsZXBvcnRhdGlvblRhcmdldCA9IF9NZXNoZXNfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siTWVzaCJdLkNyZWF0ZUdyb3VuZCgidGVs
ZXBvcnRhdGlvblRhcmdldCIsIDIsIDIsIDIsIHRoaXMuX3NjZW5lKTsKKyAgICAgICAgdGhpcy5f
dGVsZXBvcnRhdGlvblRhcmdldC5pc1BpY2thYmxlID0gZmFsc2U7CisgICAgICAgIHZhciBsZW5n
dGggPSA1MTI7CisgICAgICAgIHZhciBkeW5hbWljVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX2R5bmFtaWNUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJEeW5h
bWljVGV4dHVyZSJdKCJEeW5hbWljVGV4dHVyZSIsIGxlbmd0aCwgdGhpcy5fc2NlbmUsIHRydWUp
OworICAgICAgICBkeW5hbWljVGV4dHVyZS5oYXNBbHBoYSA9IHRydWU7CisgICAgICAgIHZhciBj
b250ZXh0ID0gZHluYW1pY1RleHR1cmUuZ2V0Q29udGV4dCgpOworICAgICAgICB2YXIgY2VudGVy
WCA9IGxlbmd0aCAvIDI7CisgICAgICAgIHZhciBjZW50ZXJZID0gbGVuZ3RoIC8gMjsKKyAgICAg
ICAgdmFyIHJhZGl1cyA9IDIwMDsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAg
ICAgY29udGV4dC5hcmMoY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCAwLCAyICogTWF0aC5QSSwg
ZmFsc2UpOworICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX3RlbGVwb3J0YXRpb25G
aWxsQ29sb3I7CisgICAgICAgIGNvbnRleHQuZmlsbCgpOworICAgICAgICBjb250ZXh0LmxpbmVX
aWR0aCA9IDEwOworICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdGhpcy5fdGVsZXBvcnRh
dGlvbkJvcmRlckNvbG9yOworICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgICAgICBjb250
ZXh0LmNsb3NlUGF0aCgpOworICAgICAgICBkeW5hbWljVGV4dHVyZS51cGRhdGUoKTsKKyAgICAg
ICAgdmFyIHRlbGVwb3J0YXRpb25DaXJjbGVNYXRlcmlhbCA9IG5ldyBfTWF0ZXJpYWxzX3N0YW5k
YXJkTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIlN0YW5kYXJkTWF0ZXJp
YWwiXSgiVGV4dFBsYW5lTWF0ZXJpYWwiLCB0aGlzLl9zY2VuZSk7CisgICAgICAgIHRlbGVwb3J0
YXRpb25DaXJjbGVNYXRlcmlhbC5kaWZmdXNlVGV4dHVyZSA9IGR5bmFtaWNUZXh0dXJlOworICAg
ICAgICB0aGlzLl90ZWxlcG9ydGF0aW9uVGFyZ2V0Lm1hdGVyaWFsID0gdGVsZXBvcnRhdGlvbkNp
cmNsZU1hdGVyaWFsOworICAgICAgICB2YXIgdG9ydXMgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE1X19bIk1lc2giXS5DcmVhdGVUb3J1cygidG9ydXNUZWxlcG9ydGF0
aW9uIiwgMC43NSwgMC4xLCAyNSwgdGhpcy5fc2NlbmUsIGZhbHNlKTsKKyAgICAgICAgdG9ydXMu
aXNQaWNrYWJsZSA9IGZhbHNlOworICAgICAgICB0b3J1cy5wYXJlbnQgPSB0aGlzLl90ZWxlcG9y
dGF0aW9uVGFyZ2V0OworICAgICAgICB2YXIgYW5pbWF0aW9uSW5uZXJDaXJjbGUgPSBuZXcgX0Fu
aW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJBbmltYXRp
b24iXSgiYW5pbWF0aW9uSW5uZXJDaXJjbGUiLCAicG9zaXRpb24ueSIsIDMwLCBfQW5pbWF0aW9u
c19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkFuaW1hdGlvbiJdLkFO
SU1BVElPTlRZUEVfRkxPQVQsIF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OTE9PUE1PREVfQ1lDTEUpOworICAg
ICAgICB2YXIga2V5cyA9IFtdOworICAgICAgICBrZXlzLnB1c2goeworICAgICAgICAgICAgZnJh
bWU6IDAsCisgICAgICAgICAgICB2YWx1ZTogMAorICAgICAgICB9KTsKKyAgICAgICAga2V5cy5w
dXNoKHsKKyAgICAgICAgICAgIGZyYW1lOiAzMCwKKyAgICAgICAgICAgIHZhbHVlOiAwLjQKKyAg
ICAgICAgfSk7CisgICAgICAgIGtleXMucHVzaCh7CisgICAgICAgICAgICBmcmFtZTogNjAsCisg
ICAgICAgICAgICB2YWx1ZTogMAorICAgICAgICB9KTsKKyAgICAgICAgYW5pbWF0aW9uSW5uZXJD
aXJjbGUuc2V0S2V5cyhrZXlzKTsKKyAgICAgICAgdmFyIGVhc2luZ0Z1bmN0aW9uID0gbmV3IF9B
bmltYXRpb25zX2Vhc2luZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siU2luZUVhc2Ui
XSgpOworICAgICAgICBlYXNpbmdGdW5jdGlvbi5zZXRFYXNpbmdNb2RlKF9BbmltYXRpb25zX2Vh
c2luZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siRWFzaW5nRnVuY3Rpb24iXS5FQVNJ
TkdNT0RFX0VBU0VJTk9VVCk7CisgICAgICAgIGFuaW1hdGlvbklubmVyQ2lyY2xlLnNldEVhc2lu
Z0Z1bmN0aW9uKGVhc2luZ0Z1bmN0aW9uKTsKKyAgICAgICAgdG9ydXMuYW5pbWF0aW9ucyA9IFtd
OworICAgICAgICB0b3J1cy5hbmltYXRpb25zLnB1c2goYW5pbWF0aW9uSW5uZXJDaXJjbGUpOwor
ICAgICAgICB0aGlzLl9zY2VuZS5iZWdpbkFuaW1hdGlvbih0b3J1cywgMCwgNjAsIHRydWUpOwor
ICAgICAgICB0aGlzLl9oaWRlVGVsZXBvcnRhdGlvblRhcmdldCgpOworICAgIH07CisgICAgVlJF
eHBlcmllbmNlSGVscGVyLnByb3RvdHlwZS5fZGlzcGxheVRlbGVwb3J0YXRpb25UYXJnZXQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3RlbGVwb3J0QWN0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgaWYgKHRoaXMuX3RlbGVwb3J0YXRpb25Jbml0aWFsaXplZCkgeworICAgICAgICAgICAgdGhp
cy5fdGVsZXBvcnRhdGlvblRhcmdldC5pc1Zpc2libGUgPSB0cnVlOworICAgICAgICAgICAgaWYg
KHRoaXMuX2lzRGVmYXVsdFRlbGVwb3J0YXRpb25UYXJnZXQpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl90ZWxlcG9ydGF0aW9uVGFyZ2V0LmdldENoaWxkcmVuKClbMF0uaXNWaXNpYmxlID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgVlJFeHBlcmllbmNlSGVs
cGVyLnByb3RvdHlwZS5faGlkZVRlbGVwb3J0YXRpb25UYXJnZXQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuX3RlbGVwb3J0QWN0aXZlID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlzLl90
ZWxlcG9ydGF0aW9uSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX3RlbGVwb3J0YXRp
b25UYXJnZXQuaXNWaXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodGhpcy5faXNEZWZh
dWx0VGVsZXBvcnRhdGlvblRhcmdldCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3RlbGVwb3J0
YXRpb25UYXJnZXQuZ2V0Q2hpbGRyZW4oKVswXS5pc1Zpc2libGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlw
ZS5fcm90YXRlQ2FtZXJhID0gZnVuY3Rpb24gKHJpZ2h0KSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIGlmICghKHRoaXMuY3VycmVudFZSQ2FtZXJhIGluc3RhbmNlb2YgX0Nh
bWVyYXNfZnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJGcmVlQ2FtZXJh
Il0pKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJpZ2h0
KSB7CisgICAgICAgICAgICB0aGlzLl9yb3RhdGlvbkFuZ2xlKys7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9yb3RhdGlvbkFuZ2xlLS07CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5jdXJyZW50VlJDYW1lcmEuYW5pbWF0aW9ucyA9IFtdOworICAgICAgICB2
YXIgdGFyZ2V0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIlF1YXRlcm5pb24iXS5Gcm9tUm90YXRpb25NYXRyaXgoX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIk1hdHJpeCJdLlJvdGF0aW9uWShNYXRoLlBJIC8g
NCAqIHRoaXMuX3JvdGF0aW9uQW5nbGUpKTsKKyAgICAgICAgdmFyIGFuaW1hdGlvblJvdGF0aW9u
ID0gbmV3IF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJf
X1siQW5pbWF0aW9uIl0oImFuaW1hdGlvblJvdGF0aW9uIiwgInJvdGF0aW9uUXVhdGVybmlvbiIs
IDkwLCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19b
IkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVfUVVBVEVSTklPTiwgX0FuaW1hdGlvbnNfYW5pbWF0
aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05M
T09QTU9ERV9DT05TVEFOVCk7CisgICAgICAgIHZhciBhbmltYXRpb25Sb3RhdGlvbktleXMgPSBb
XTsKKyAgICAgICAgYW5pbWF0aW9uUm90YXRpb25LZXlzLnB1c2goeworICAgICAgICAgICAgZnJh
bWU6IDAsCisgICAgICAgICAgICB2YWx1ZTogdGhpcy5jdXJyZW50VlJDYW1lcmEucm90YXRpb25R
dWF0ZXJuaW9uCisgICAgICAgIH0pOworICAgICAgICBhbmltYXRpb25Sb3RhdGlvbktleXMucHVz
aCh7CisgICAgICAgICAgICBmcmFtZTogNiwKKyAgICAgICAgICAgIHZhbHVlOiB0YXJnZXQKKyAg
ICAgICAgfSk7CisgICAgICAgIGFuaW1hdGlvblJvdGF0aW9uLnNldEtleXMoYW5pbWF0aW9uUm90
YXRpb25LZXlzKTsKKyAgICAgICAgYW5pbWF0aW9uUm90YXRpb24uc2V0RWFzaW5nRnVuY3Rpb24o
dGhpcy5fY2lyY2xlRWFzZSk7CisgICAgICAgIHRoaXMuY3VycmVudFZSQ2FtZXJhLmFuaW1hdGlv
bnMucHVzaChhbmltYXRpb25Sb3RhdGlvbik7CisgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzTW92
ZS5hbmltYXRpb25zID0gW107CisgICAgICAgIHZhciBhbmltYXRpb25QUCA9IG5ldyBfQW5pbWF0
aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkFuaW1hdGlvbiJd
KCJhbmltYXRpb25QUCIsICJ2aWduZXR0ZVdlaWdodCIsIDkwLCBfQW5pbWF0aW9uc19hbmltYXRp
b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZ
UEVfRkxPQVQsIF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MjJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQpOworICAgICAgICB2
YXIgdmlnbmV0dGVXZWlnaHRLZXlzID0gW107CisgICAgICAgIHZpZ25ldHRlV2VpZ2h0S2V5cy5w
dXNoKHsKKyAgICAgICAgICAgIGZyYW1lOiAwLAorICAgICAgICAgICAgdmFsdWU6IDAKKyAgICAg
ICAgfSk7CisgICAgICAgIHZpZ25ldHRlV2VpZ2h0S2V5cy5wdXNoKHsKKyAgICAgICAgICAgIGZy
YW1lOiAzLAorICAgICAgICAgICAgdmFsdWU6IDQKKyAgICAgICAgfSk7CisgICAgICAgIHZpZ25l
dHRlV2VpZ2h0S2V5cy5wdXNoKHsKKyAgICAgICAgICAgIGZyYW1lOiA2LAorICAgICAgICAgICAg
dmFsdWU6IDAKKyAgICAgICAgfSk7CisgICAgICAgIGFuaW1hdGlvblBQLnNldEtleXModmlnbmV0
dGVXZWlnaHRLZXlzKTsKKyAgICAgICAgYW5pbWF0aW9uUFAuc2V0RWFzaW5nRnVuY3Rpb24odGhp
cy5fY2lyY2xlRWFzZSk7CisgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzTW92ZS5hbmltYXRpb25z
LnB1c2goYW5pbWF0aW9uUFApOworICAgICAgICB2YXIgYW5pbWF0aW9uUFAyID0gbmV3IF9Bbmlt
YXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQW5pbWF0aW9u
Il0oImFuaW1hdGlvblBQMiIsICJ2aWduZXR0ZVN0cmV0Y2giLCA5MCwgX0FuaW1hdGlvbnNfYW5p
bWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJBbmltYXRpb24iXS5BTklNQVRJ
T05UWVBFX0ZMT0FULCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIyX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTkxPT1BNT0RFX0NPTlNUQU5UKTsKKyAgICAg
ICAgdmFyIHZpZ25ldHRlU3RyZXRjaEtleXMgPSBbXTsKKyAgICAgICAgdmlnbmV0dGVTdHJldGNo
S2V5cy5wdXNoKHsKKyAgICAgICAgICAgIGZyYW1lOiAwLAorICAgICAgICAgICAgdmFsdWU6IDAK
KyAgICAgICAgfSk7CisgICAgICAgIHZpZ25ldHRlU3RyZXRjaEtleXMucHVzaCh7CisgICAgICAg
ICAgICBmcmFtZTogMywKKyAgICAgICAgICAgIHZhbHVlOiAxMAorICAgICAgICB9KTsKKyAgICAg
ICAgdmlnbmV0dGVTdHJldGNoS2V5cy5wdXNoKHsKKyAgICAgICAgICAgIGZyYW1lOiA2LAorICAg
ICAgICAgICAgdmFsdWU6IDAKKyAgICAgICAgfSk7CisgICAgICAgIGFuaW1hdGlvblBQMi5zZXRL
ZXlzKHZpZ25ldHRlU3RyZXRjaEtleXMpOworICAgICAgICBhbmltYXRpb25QUDIuc2V0RWFzaW5n
RnVuY3Rpb24odGhpcy5fY2lyY2xlRWFzZSk7CisgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzTW92
ZS5hbmltYXRpb25zLnB1c2goYW5pbWF0aW9uUFAyKTsKKyAgICAgICAgdGhpcy5fcG9zdFByb2Nl
c3NNb3ZlLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udmlnbmV0dGVXZWlnaHQgPSAwOwor
ICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc01vdmUuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bi52aWduZXR0ZVN0cmV0Y2ggPSAwOworICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc01vdmUuc2Ft
cGxlcyA9IDQ7CisgICAgICAgIHRoaXMuX3dlYlZSQ2FtZXJhLmF0dGFjaFBvc3RQcm9jZXNzKHRo
aXMuX3Bvc3RQcm9jZXNzTW92ZSk7CisgICAgICAgIHRoaXMuX3NjZW5lLmJlZ2luQW5pbWF0aW9u
KHRoaXMuX3Bvc3RQcm9jZXNzTW92ZSwgMCwgNiwgZmFsc2UsIDEsIGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIF90aGlzLl93ZWJWUkNhbWVyYS5kZXRhY2hQb3N0UHJvY2VzcyhfdGhpcy5fcG9z
dFByb2Nlc3NNb3ZlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3NjZW5lLmJlZ2luQW5p
bWF0aW9uKHRoaXMuY3VycmVudFZSQ2FtZXJhLCAwLCA2LCBmYWxzZSwgMSk7CisgICAgfTsKKyAg
ICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLl9tb3ZlVGVsZXBvcnRhdGlvblNlbGVjdG9y
VG8gPSBmdW5jdGlvbiAoaGl0LCBnYXplciwgcmF5KSB7CisgICAgICAgIGlmIChoaXQucGlja2Vk
UG9pbnQpIHsKKyAgICAgICAgICAgIGlmIChnYXplci5fdGVsZXBvcnRhdGlvblJlcXVlc3RJbml0
aWF0ZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kaXNwbGF5VGVsZXBvcnRhdGlvblRhcmdl
dCgpOworICAgICAgICAgICAgICAgIHRoaXMuX2hhbG9DZW50ZXIuY29weUZyb20oaGl0LnBpY2tl
ZFBvaW50KTsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZWxlcG9ydGF0aW9uVGFyZ2V0LnBvc2l0
aW9uLmNvcHlGcm9tKGhpdC5waWNrZWRQb2ludCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YXIgcGlja05vcm1hbCA9IHRoaXMuX2NvbnZlcnROb3JtYWxUb0RpcmVjdGlvbk9mUmF5KGhp
dC5nZXROb3JtYWwodHJ1ZSwgZmFsc2UpLCByYXkpOworICAgICAgICAgICAgaWYgKHBpY2tOb3Jt
YWwpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXhpczEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmVjdG9yMyJdLkNyb3NzKF9NYXRoc19tYXRoX2F4
aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X19bIkF4aXMiXS5ZLCBwaWNrTm9ybWFsKTsK
KyAgICAgICAgICAgICAgICB2YXIgYXhpczIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siVmVjdG9yMyJdLkNyb3NzKHBpY2tOb3JtYWwsIGF4aXMxKTsK
KyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siVmVjdG9yMyJdLlJvdGF0aW9uRnJvbUF4aXNUb1JlZihheGlzMiwgcGlja05vcm1h
bCwgYXhpczEsIHRoaXMuX3RlbGVwb3J0YXRpb25UYXJnZXQucm90YXRpb24pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fdGVsZXBvcnRhdGlvblRhcmdldC5wb3NpdGlvbi55ICs9
IDAuMTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogVGVsZXBvcnRzIHRoZSB1
c2VycyBmZWV0IHRvIHRoZSBkZXNpcmVkIGxvY2F0aW9uCisgICAgICogQHBhcmFtIGxvY2F0aW9u
IFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgdXNlcidzIGZlZXQgc2hvdWxkIGJlIHBsYWNlZAorICAg
ICAqLworICAgIFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUudGVsZXBvcnRDYW1lcmEgPSBm
dW5jdGlvbiAobG9jYXRpb24pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
aWYgKCEodGhpcy5jdXJyZW50VlJDYW1lcmEgaW5zdGFuY2VvZiBfQ2FtZXJhc19mcmVlQ2FtZXJh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkZyZWVDYW1lcmEiXSkpIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBUZWxlcG9ydCB0aGUgaG1kIHRvIHdo
ZXJlIHRoZSB1c2VyIGlzIGxvb2tpbmcgYnkgbW92aW5nIHRoZSBhbmNob3IgdG8gd2hlcmUgdGhl
eSBhcmUgbG9va2luZyBtaW51cyB0aGUKKyAgICAgICAgLy8gb2Zmc2V0IG9mIHRoZSBoZWFkc2V0
IGZyb20gdGhlIGFuY2hvci4KKyAgICAgICAgaWYgKHRoaXMud2ViVlJDYW1lcmEubGVmdENhbWVy
YSkgeworICAgICAgICAgICAgdGhpcy5fd29ya2luZ1ZlY3Rvci5jb3B5RnJvbSh0aGlzLndlYlZS
Q2FtZXJhLmxlZnRDYW1lcmEuZ2xvYmFsUG9zaXRpb24pOworICAgICAgICAgICAgdGhpcy5fd29y
a2luZ1ZlY3Rvci5zdWJ0cmFjdEluUGxhY2UodGhpcy53ZWJWUkNhbWVyYS5wb3NpdGlvbik7Cisg
ICAgICAgICAgICBsb2NhdGlvbi5zdWJ0cmFjdFRvUmVmKHRoaXMuX3dvcmtpbmdWZWN0b3IsIHRo
aXMuX3dvcmtpbmdWZWN0b3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5fd29ya2luZ1ZlY3Rvci5jb3B5RnJvbShsb2NhdGlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gQWRkIGhlaWdodCB0byBhY2NvdW50IGZvciB1c2VyJ3MgaGVpZ2h0IG9mZnNldAor
ICAgICAgICBpZiAodGhpcy5pc0luVlJNb2RlKSB7CisgICAgICAgICAgICB0aGlzLl93b3JraW5n
VmVjdG9yLnkgKz0gdGhpcy53ZWJWUkNhbWVyYS5kZXZpY2VEaXN0YW5jZVRvUm9vbUdyb3VuZCgp
ICogdGhpcy5fd2ViVlJDYW1lcmEuZGV2aWNlU2NhbGVGYWN0b3I7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl93b3JraW5nVmVjdG9yLnkgKz0gdGhpcy5fZGVm
YXVsdEhlaWdodDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uQmVmb3JlQ2FtZXJhVGVsZXBv
cnQubm90aWZ5T2JzZXJ2ZXJzKHRoaXMuX3dvcmtpbmdWZWN0b3IpOworICAgICAgICAvLyBDcmVh
dGUgYW5pbWF0aW9uIGZyb20gdGhlIGNhbWVyYSdzIHBvc2l0aW9uIHRvIHRoZSBuZXcgbG9jYXRp
b24KKyAgICAgICAgdGhpcy5jdXJyZW50VlJDYW1lcmEuYW5pbWF0aW9ucyA9IFtdOworICAgICAg
ICB2YXIgYW5pbWF0aW9uQ2FtZXJhVGVsZXBvcnRhdGlvbiA9IG5ldyBfQW5pbWF0aW9uc19hbmlt
YXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkFuaW1hdGlvbiJdKCJhbmltYXRp
b25DYW1lcmFUZWxlcG9ydGF0aW9uIiwgInBvc2l0aW9uIiwgOTAsIF9BbmltYXRpb25zX2FuaW1h
dGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9O
VFlQRV9WRUNUT1IzLCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIyX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTkxPT1BNT0RFX0NPTlNUQU5UKTsKKyAgICAg
ICAgdmFyIGFuaW1hdGlvbkNhbWVyYVRlbGVwb3J0YXRpb25LZXlzID0gW3sKKyAgICAgICAgICAg
ICAgICBmcmFtZTogMCwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jdXJyZW50VlJDYW1l
cmEucG9zaXRpb24KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZnJhbWU6IDExLAorICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl93b3JraW5nVmVjdG9y
CisgICAgICAgICAgICB9CisgICAgICAgIF07CisgICAgICAgIGFuaW1hdGlvbkNhbWVyYVRlbGVw
b3J0YXRpb24uc2V0S2V5cyhhbmltYXRpb25DYW1lcmFUZWxlcG9ydGF0aW9uS2V5cyk7CisgICAg
ICAgIGFuaW1hdGlvbkNhbWVyYVRlbGVwb3J0YXRpb24uc2V0RWFzaW5nRnVuY3Rpb24odGhpcy5f
Y2lyY2xlRWFzZSk7CisgICAgICAgIHRoaXMuY3VycmVudFZSQ2FtZXJhLmFuaW1hdGlvbnMucHVz
aChhbmltYXRpb25DYW1lcmFUZWxlcG9ydGF0aW9uKTsKKyAgICAgICAgdGhpcy5fcG9zdFByb2Nl
c3NNb3ZlLmFuaW1hdGlvbnMgPSBbXTsKKyAgICAgICAgdmFyIGFuaW1hdGlvblBQID0gbmV3IF9B
bmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQW5pbWF0
aW9uIl0oImFuaW1hdGlvblBQIiwgInZpZ25ldHRlV2VpZ2h0IiwgOTAsIF9BbmltYXRpb25zX2Fu
aW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQW5pbWF0aW9uIl0uQU5JTUFU
SU9OVFlQRV9GTE9BVCwgX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yMl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05MT09QTU9ERV9DT05TVEFOVCk7CisgICAg
ICAgIHZhciB2aWduZXR0ZVdlaWdodEtleXMgPSBbXTsKKyAgICAgICAgdmlnbmV0dGVXZWlnaHRL
ZXlzLnB1c2goeworICAgICAgICAgICAgZnJhbWU6IDAsCisgICAgICAgICAgICB2YWx1ZTogMAor
ICAgICAgICB9KTsKKyAgICAgICAgdmlnbmV0dGVXZWlnaHRLZXlzLnB1c2goeworICAgICAgICAg
ICAgZnJhbWU6IDUsCisgICAgICAgICAgICB2YWx1ZTogOAorICAgICAgICB9KTsKKyAgICAgICAg
dmlnbmV0dGVXZWlnaHRLZXlzLnB1c2goeworICAgICAgICAgICAgZnJhbWU6IDExLAorICAgICAg
ICAgICAgdmFsdWU6IDAKKyAgICAgICAgfSk7CisgICAgICAgIGFuaW1hdGlvblBQLnNldEtleXMo
dmlnbmV0dGVXZWlnaHRLZXlzKTsKKyAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3NNb3ZlLmFuaW1h
dGlvbnMucHVzaChhbmltYXRpb25QUCk7CisgICAgICAgIHZhciBhbmltYXRpb25QUDIgPSBuZXcg
X0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJBbmlt
YXRpb24iXSgiYW5pbWF0aW9uUFAyIiwgInZpZ25ldHRlU3RyZXRjaCIsIDkwLCBfQW5pbWF0aW9u
c19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkFuaW1hdGlvbiJdLkFO
SU1BVElPTlRZUEVfRkxPQVQsIF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQpOwor
ICAgICAgICB2YXIgdmlnbmV0dGVTdHJldGNoS2V5cyA9IFtdOworICAgICAgICB2aWduZXR0ZVN0
cmV0Y2hLZXlzLnB1c2goeworICAgICAgICAgICAgZnJhbWU6IDAsCisgICAgICAgICAgICB2YWx1
ZTogMAorICAgICAgICB9KTsKKyAgICAgICAgdmlnbmV0dGVTdHJldGNoS2V5cy5wdXNoKHsKKyAg
ICAgICAgICAgIGZyYW1lOiA1LAorICAgICAgICAgICAgdmFsdWU6IDEwCisgICAgICAgIH0pOwor
ICAgICAgICB2aWduZXR0ZVN0cmV0Y2hLZXlzLnB1c2goeworICAgICAgICAgICAgZnJhbWU6IDEx
LAorICAgICAgICAgICAgdmFsdWU6IDAKKyAgICAgICAgfSk7CisgICAgICAgIGFuaW1hdGlvblBQ
Mi5zZXRLZXlzKHZpZ25ldHRlU3RyZXRjaEtleXMpOworICAgICAgICB0aGlzLl9wb3N0UHJvY2Vz
c01vdmUuYW5pbWF0aW9ucy5wdXNoKGFuaW1hdGlvblBQMik7CisgICAgICAgIHRoaXMuX3Bvc3RQ
cm9jZXNzTW92ZS5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnZpZ25ldHRlV2VpZ2h0ID0g
MDsKKyAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3NNb3ZlLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24udmlnbmV0dGVTdHJldGNoID0gMDsKKyAgICAgICAgdGhpcy5fd2ViVlJDYW1lcmEuYXR0
YWNoUG9zdFByb2Nlc3ModGhpcy5fcG9zdFByb2Nlc3NNb3ZlKTsKKyAgICAgICAgdGhpcy5fc2Nl
bmUuYmVnaW5BbmltYXRpb24odGhpcy5fcG9zdFByb2Nlc3NNb3ZlLCAwLCAxMSwgZmFsc2UsIDEs
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl93ZWJWUkNhbWVyYS5kZXRhY2hQb3N0
UHJvY2VzcyhfdGhpcy5fcG9zdFByb2Nlc3NNb3ZlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRo
aXMuX3NjZW5lLmJlZ2luQW5pbWF0aW9uKHRoaXMuY3VycmVudFZSQ2FtZXJhLCAwLCAxMSwgZmFs
c2UsIDEsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLm9uQWZ0ZXJDYW1lcmFUZWxl
cG9ydC5ub3RpZnlPYnNlcnZlcnMoX3RoaXMuX3dvcmtpbmdWZWN0b3IpOworICAgICAgICB9KTsK
KyAgICAgICAgdGhpcy5faGlkZVRlbGVwb3J0YXRpb25UYXJnZXQoKTsKKyAgICB9OworICAgIFZS
RXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUuX2NvbnZlcnROb3JtYWxUb0RpcmVjdGlvbk9mUmF5
ID0gZnVuY3Rpb24gKG5vcm1hbCwgcmF5KSB7CisgICAgICAgIGlmIChub3JtYWwpIHsKKyAgICAg
ICAgICAgIHZhciBhbmdsZSA9IE1hdGguYWNvcyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siVmVjdG9yMyJdLkRvdChub3JtYWwsIHJheS5kaXJlY3Rpb24p
KTsKKyAgICAgICAgICAgIGlmIChhbmdsZSA8IE1hdGguUEkgLyAyKSB7CisgICAgICAgICAgICAg
ICAgbm9ybWFsLnNjYWxlSW5QbGFjZSgtMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG5vcm1hbDsKKyAgICB9OworICAgIFZSRXhwZXJpZW5jZUhlbHBlci5wcm90
b3R5cGUuX2Nhc3RSYXlBbmRTZWxlY3RPYmplY3QgPSBmdW5jdGlvbiAoZ2F6ZXIpIHsKKyAgICAg
ICAgaWYgKCEodGhpcy5jdXJyZW50VlJDYW1lcmEgaW5zdGFuY2VvZiBfQ2FtZXJhc19mcmVlQ2Ft
ZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkZyZWVDYW1lcmEiXSkpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgcmF5ID0gZ2F6ZXIuX2dldEZv
cndhcmRSYXkodGhpcy5fcmF5TGVuZ3RoKTsKKyAgICAgICAgdmFyIGhpdCA9IHRoaXMuX3NjZW5l
LnBpY2tXaXRoUmF5KHJheSwgdGhpcy5fcmF5U2VsZWN0aW9uUHJlZGljYXRlKTsKKyAgICAgICAg
aWYgKGhpdCkgeworICAgICAgICAgICAgLy8gUG9wdWxhdGUgdGhlIGNvbnRyb2xsZXJzIG1lc2gg
dGhhdCBjYW4gYmUgdXNlZCBmb3IgZHJhZy9kcm9wCisgICAgICAgICAgICBpZiAoZ2F6ZXIuX2xh
c2VyUG9pbnRlcikgeworICAgICAgICAgICAgICAgIGhpdC5vcmlnaW5NZXNoID0gZ2F6ZXIuX2xh
c2VyUG9pbnRlci5wYXJlbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zY2Vu
ZS5zaW11bGF0ZVBvaW50ZXJNb3ZlKGhpdCwgeyBwb2ludGVySWQ6IGdhemVyLl9pZCB9KTsKKyAg
ICAgICAgfQorICAgICAgICBnYXplci5fY3VycmVudEhpdCA9IGhpdDsKKyAgICAgICAgLy8gTW92
aW5nIHRoZSBnYXplVHJhY2tlciBvbiB0aGUgbWVzaCBmYWNlIHRhcmdldHRlZAorICAgICAgICBp
ZiAoaGl0ICYmIGhpdC5waWNrZWRQb2ludCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2Rpc3Bs
YXlHYXplKSB7CisgICAgICAgICAgICAgICAgdmFyIG11bHRpcGxpZXIgPSAxOworICAgICAgICAg
ICAgICAgIGdhemVyLl9nYXplVHJhY2tlci5pc1Zpc2libGUgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGlmIChnYXplci5faXNBY3Rpb25hYmxlTWVzaCkgeworICAgICAgICAgICAgICAgICAgICBt
dWx0aXBsaWVyID0gMzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRo
aXMudXBkYXRlR2F6ZVRyYWNrZXJTY2FsZSkgeworICAgICAgICAgICAgICAgICAgICBnYXplci5f
Z2F6ZVRyYWNrZXIuc2NhbGluZy54ID0gaGl0LmRpc3RhbmNlICogbXVsdGlwbGllcjsKKyAgICAg
ICAgICAgICAgICAgICAgZ2F6ZXIuX2dhemVUcmFja2VyLnNjYWxpbmcueSA9IGhpdC5kaXN0YW5j
ZSAqIG11bHRpcGxpZXI7CisgICAgICAgICAgICAgICAgICAgIGdhemVyLl9nYXplVHJhY2tlci5z
Y2FsaW5nLnogPSBoaXQuZGlzdGFuY2UgKiBtdWx0aXBsaWVyOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB2YXIgcGlja05vcm1hbCA9IHRoaXMuX2NvbnZlcnROb3JtYWxUb0Rp
cmVjdGlvbk9mUmF5KGhpdC5nZXROb3JtYWwoKSwgcmF5KTsKKyAgICAgICAgICAgICAgICAvLyBU
byBhdm9pZCB6LWZpZ2h0aW5nCisgICAgICAgICAgICAgICAgdmFyIGRlbHRhRmlnaHRpbmcgPSAw
LjAwMjsKKyAgICAgICAgICAgICAgICBpZiAocGlja05vcm1hbCkgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgYXhpczEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siVmVjdG9yMyJdLkNyb3NzKF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzI5X19bIkF4aXMiXS5ZLCBwaWNrTm9ybWFsKTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGF4aXMyID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIlZlY3RvcjMiXS5Dcm9zcyhwaWNrTm9ybWFsLCBheGlzMSk7CisgICAgICAgICAgICAg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJW
ZWN0b3IzIl0uUm90YXRpb25Gcm9tQXhpc1RvUmVmKGF4aXMyLCBwaWNrTm9ybWFsLCBheGlzMSwg
Z2F6ZXIuX2dhemVUcmFja2VyLnJvdGF0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZ2F6ZXIuX2dhemVUcmFja2VyLnBvc2l0aW9uLmNvcHlGcm9tKGhpdC5waWNrZWRQ
b2ludCk7CisgICAgICAgICAgICAgICAgaWYgKGdhemVyLl9nYXplVHJhY2tlci5wb3NpdGlvbi54
IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBnYXplci5fZ2F6ZVRyYWNrZXIucG9zaXRpb24u
eCArPSBkZWx0YUZpZ2h0aW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ2F6ZXIuX2dhemVUcmFja2VyLnBvc2l0aW9uLngg
LT0gZGVsdGFGaWdodGluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KGdhemVyLl9nYXplVHJhY2tlci5wb3NpdGlvbi55IDwgMCkgeworICAgICAgICAgICAgICAgICAg
ICBnYXplci5fZ2F6ZVRyYWNrZXIucG9zaXRpb24ueSArPSBkZWx0YUZpZ2h0aW5nOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Z2F6ZXIuX2dhemVUcmFja2VyLnBvc2l0aW9uLnkgLT0gZGVsdGFGaWdodGluZzsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGdhemVyLl9nYXplVHJhY2tlci5wb3NpdGlv
bi56IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBnYXplci5fZ2F6ZVRyYWNrZXIucG9zaXRp
b24ueiArPSBkZWx0YUZpZ2h0aW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ2F6ZXIuX2dhemVUcmFja2VyLnBvc2l0aW9u
LnogLT0gZGVsdGFGaWdodGluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBDaGFuZ2luZyB0aGUgc2l6ZSBvZiB0aGUgbGFzZXIgcG9pbnRlciBiYXNl
ZCBvbiB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgdGFyZ2V0dGVkIHBvaW50CisgICAgICAgICAgICBn
YXplci5fdXBkYXRlUG9pbnRlckRpc3RhbmNlKGhpdC5kaXN0YW5jZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBnYXplci5fdXBkYXRlUG9pbnRlckRpc3RhbmNlKCk7
CisgICAgICAgICAgICBnYXplci5fZ2F6ZVRyYWNrZXIuaXNWaXNpYmxlID0gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGhpdCAmJiBoaXQucGlja2VkTWVzaCkgeworICAgICAgICAgICAg
Ly8gVGhlIG9iamVjdCBzZWxlY3RlZCBpcyB0aGUgZmxvb3IsIHdlJ3JlIGluIGEgdGVsZXBvcnRh
dGlvbiBzY2VuYXJpbworICAgICAgICAgICAgaWYgKHRoaXMuX3RlbGVwb3J0YXRpb25Jbml0aWFs
aXplZCAmJiB0aGlzLl9pc1RlbGVwb3J0YXRpb25GbG9vcihoaXQucGlja2VkTWVzaCkgJiYgaGl0
LnBpY2tlZFBvaW50KSB7CisgICAgICAgICAgICAgICAgLy8gTW92aW5nIHRoZSB0ZWxlcG9ydGF0
aW9uIGFyZWEgdG8gdGhpcyB0YXJnZXR0ZWQgcG9pbnQKKyAgICAgICAgICAgICAgICAvL1JhaXNl
IG9uU2VsZWN0ZWRNZXNoVW5zZWxlY3RlZCBvYnNlcnZhYmxlIGlmIHJheSBjb2xsaWRlZCBmbG9v
ciBtZXNoL21lc2hlcyBhbmQgYSBub24gZmxvb3IgbWVzaCB3YXMgcHJldmlvdXNseSBzZWxlY3Rl
ZAorICAgICAgICAgICAgICAgIGlmIChnYXplci5fY3VycmVudE1lc2hTZWxlY3RlZCAmJiAhdGhp
cy5faXNUZWxlcG9ydGF0aW9uRmxvb3IoZ2F6ZXIuX2N1cnJlbnRNZXNoU2VsZWN0ZWQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmeVNlbGVjdGVkTWVzaFVuc2VsZWN0ZWQoZ2F6
ZXIuX2N1cnJlbnRNZXNoU2VsZWN0ZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBnYXplci5fY3VycmVudE1lc2hTZWxlY3RlZCA9IG51bGw7CisgICAgICAgICAgICAgICAg
aWYgKGdhemVyLl90ZWxlcG9ydGF0aW9uUmVxdWVzdEluaXRpYXRlZCkgeworICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9tb3ZlVGVsZXBvcnRhdGlvblNlbGVjdG9yVG8oaGl0LCBnYXplciwgcmF5
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gSWYgbm90LCB3ZSdyZSBpbiBhIHNlbGVjdGlvbiBzY2VuYXJp
bworICAgICAgICAgICAgLy90aGlzLl90ZWxlcG9ydGF0aW9uQWxsb3dlZCA9IGZhbHNlOworICAg
ICAgICAgICAgaWYgKGhpdC5waWNrZWRNZXNoICE9PSBnYXplci5fY3VycmVudE1lc2hTZWxlY3Rl
ZCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lc2hTZWxlY3Rpb25QcmVkaWNhdGUoaGl0
LnBpY2tlZE1lc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMub25OZXdNZXNoUGlja2Vk
Lm5vdGlmeU9ic2VydmVycyhoaXQpOworICAgICAgICAgICAgICAgICAgICBnYXplci5fY3VycmVu
dE1lc2hTZWxlY3RlZCA9IGhpdC5waWNrZWRNZXNoOworICAgICAgICAgICAgICAgICAgICBpZiAo
aGl0LnBpY2tlZE1lc2guaXNQaWNrYWJsZSAmJiBoaXQucGlja2VkTWVzaC5hY3Rpb25NYW5hZ2Vy
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUdhemVDb2xvcihuZXcgX01h
dGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNvbG9yMyJdKDAs
IDAsIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlTGFzZXJDb2xvcihu
ZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNvbG9y
MyJdKDAuMiwgMC4yLCAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnYXplci5faXNBY3Rp
b25hYmxlTWVzaCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUdhemVDb2xv
cihuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNv
bG9yMyJdKDAuNywgMC43LCAwLjcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hh
bmdlTGFzZXJDb2xvcihuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEwX19bIkNvbG9yMyJdKDAuNywgMC43LCAwLjcpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdhemVyLl9pc0FjdGlvbmFibGVNZXNoID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMub25OZXdNZXNoU2VsZWN0ZWQubm90aWZ5T2JzZXJ2ZXJzKGhpdC5waWNrZWRNZXNoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBnYXplckFzQ29udHJvbGxlckdhemVyID0gZ2F6ZXI7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2F6ZXJBc0NvbnRyb2xsZXJHYXplci53ZWJW
UkNvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTWVzaFNl
bGVjdGVkV2l0aENvbnRyb2xsZXIubm90aWZ5T2JzZXJ2ZXJzKHsgbWVzaDogaGl0LnBpY2tlZE1l
c2gsIGNvbnRyb2xsZXI6IGdhemVyQXNDb250cm9sbGVyR2F6ZXIud2ViVlJDb250cm9sbGVyIH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9N
aXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCJF
cnJvciB3aGlsZSByYWlzaW5nIG9uTmV3TWVzaFNlbGVjdGVkIG9yIG9uTWVzaFNlbGVjdGVkV2l0
aENvbnRyb2xsZXI6ICIgKyBlcnIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9ub3RpZnlTZWxlY3RlZE1lc2hVbnNlbGVjdGVkKGdhemVyLl9jdXJyZW50TWVzaFNlbGVjdGVk
KTsKKyAgICAgICAgICAgICAgICAgICAgZ2F6ZXIuX2N1cnJlbnRNZXNoU2VsZWN0ZWQgPSBudWxs
OworICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUdhemVDb2xvcihuZXcgX01hdGhzX21h
dGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNvbG9yMyJdKDAuNywgMC43
LCAwLjcpKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VMYXNlckNvbG9yKG5ldyBf
TWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQ29sb3IzIl0o
MC43LCAwLjcsIDAuNykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX25vdGlmeVNlbGVjdGVkTWVz
aFVuc2VsZWN0ZWQoZ2F6ZXIuX2N1cnJlbnRNZXNoU2VsZWN0ZWQpOworICAgICAgICAgICAgZ2F6
ZXIuX2N1cnJlbnRNZXNoU2VsZWN0ZWQgPSBudWxsOworICAgICAgICAgICAgLy90aGlzLl90ZWxl
cG9ydGF0aW9uQWxsb3dlZCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5jaGFuZ2VHYXplQ29s
b3IobmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJD
b2xvcjMiXSgwLjcsIDAuNywgMC43KSk7CisgICAgICAgICAgICB0aGlzLmNoYW5nZUxhc2VyQ29s
b3IobmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJD
b2xvcjMiXSgwLjcsIDAuNywgMC43KSk7CisgICAgICAgIH0KKyAgICB9OworICAgIFZSRXhwZXJp
ZW5jZUhlbHBlci5wcm90b3R5cGUuX25vdGlmeVNlbGVjdGVkTWVzaFVuc2VsZWN0ZWQgPSBmdW5j
dGlvbiAobWVzaCkgeworICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgdGhpcy5vblNl
bGVjdGVkTWVzaFVuc2VsZWN0ZWQubm90aWZ5T2JzZXJ2ZXJzKG1lc2gpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgbGFzZXIgcmF5IGZy
b20gdGhlIHZyIGNvbnRyb2xsZXJzLgorICAgICAqIEBwYXJhbSBjb2xvciBuZXcgY29sb3IgZm9y
IHRoZSByYXkuCisgICAgICovCisgICAgVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlwZS5jaGFu
Z2VMYXNlckNvbG9yID0gZnVuY3Rpb24gKGNvbG9yKSB7CisgICAgICAgIGlmICh0aGlzLl9sZWZ0
Q29udHJvbGxlcikgeworICAgICAgICAgICAgdGhpcy5fbGVmdENvbnRyb2xsZXIuX3NldExhc2Vy
UG9pbnRlckNvbG9yKGNvbG9yKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmlnaHRD
b250cm9sbGVyKSB7CisgICAgICAgICAgICB0aGlzLl9yaWdodENvbnRyb2xsZXIuX3NldExhc2Vy
UG9pbnRlckNvbG9yKGNvbG9yKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
U2V0cyB0aGUgY29sb3Igb2YgdGhlIHJheSBmcm9tIHRoZSB2ciBoZWFkc2V0cyBnYXplLgorICAg
ICAqIEBwYXJhbSBjb2xvciBuZXcgY29sb3IgZm9yIHRoZSByYXkuCisgICAgICovCisgICAgVlJF
eHBlcmllbmNlSGVscGVyLnByb3RvdHlwZS5jaGFuZ2VHYXplQ29sb3IgPSBmdW5jdGlvbiAoY29s
b3IpIHsKKyAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZUdhemVUcmFja2VyQ29sb3IpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2NhbWVyYUdhemVy
Ll9nYXplVHJhY2tlci5tYXRlcmlhbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX2NhbWVyYUdhemVyLl9nYXplVHJhY2tlci5tYXRlcmlhbC5lbWlzc2l2
ZUNvbG9yID0gY29sb3I7CisgICAgICAgIGlmICh0aGlzLl9sZWZ0Q29udHJvbGxlcikgeworICAg
ICAgICAgICAgdGhpcy5fbGVmdENvbnRyb2xsZXIuX2dhemVUcmFja2VyLm1hdGVyaWFsLmVtaXNz
aXZlQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmlnaHRDb250
cm9sbGVyKSB7CisgICAgICAgICAgICB0aGlzLl9yaWdodENvbnRyb2xsZXIuX2dhemVUcmFja2Vy
Lm1hdGVyaWFsLmVtaXNzaXZlQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqCisgICAgICogRXhpdHMgVlIgYW5kIGRpc3Bvc2VzIG9mIHRoZSB2ciBleHBlcmllbmNlIGhl
bHBlcgorICAgICAqLworICAgIFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUuZGlzcG9zZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuaXNJblZSTW9kZSkgeworICAgICAgICAg
ICAgdGhpcy5leGl0VlIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcG9zdFByb2Nl
c3NNb3ZlKSB7CisgICAgICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc01vdmUuZGlzcG9zZSgpOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl93ZWJWUkNhbWVyYSkgeworICAgICAgICAgICAg
dGhpcy5fd2ViVlJDYW1lcmEuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
Ll92ckRldmljZU9yaWVudGF0aW9uQ2FtZXJhKSB7CisgICAgICAgICAgICB0aGlzLl92ckRldmlj
ZU9yaWVudGF0aW9uQ2FtZXJhLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRo
aXMuX3VzZUN1c3RvbVZSQnV0dG9uICYmIHRoaXMuX2J0blZSICYmIHRoaXMuX2J0blZSLnBhcmVu
dE5vZGUpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5fYnRu
VlIpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9kZXZpY2VPcmllbnRhdGlvbkNhbWVy
YSAmJiAodGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhICE9IHRoaXMuX2RldmljZU9yaWVudGF0aW9u
Q2FtZXJhKSkgeworICAgICAgICAgICAgdGhpcy5fZGV2aWNlT3JpZW50YXRpb25DYW1lcmEuZGlz
cG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9jYW1lcmFHYXplcikgeworICAg
ICAgICAgICAgdGhpcy5fY2FtZXJhR2F6ZXIuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9sZWZ0Q29udHJvbGxlcikgeworICAgICAgICAgICAgdGhpcy5fbGVmdENvbnRy
b2xsZXIuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9yaWdodENvbnRy
b2xsZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX3JpZ2h0Q29udHJvbGxlci5kaXNwb3NlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3RlbGVwb3J0YXRpb25UYXJnZXQpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3RlbGVwb3J0YXRpb25UYXJnZXQuZGlzcG9zZSgpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2Zsb29yTWVzaGVzQ29sbGVjdGlvbiA9IFtdOworICAgICAgICBkb2N1bWVu
dC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fb25LZXlEb3duKTsKKyAgICAg
ICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3ZyZGlzcGxheXByZXNlbnRjaGFuZ2UnLCB0
aGlzLl9vblZyRGlzcGxheVByZXNlbnRDaGFuZ2UpOworICAgICAgICB3aW5kb3cucmVtb3ZlRXZl
bnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5fb25SZXNpemUpOworICAgICAgICBkb2N1bWVudC5y
ZW1vdmVFdmVudExpc3RlbmVyKCJmdWxsc2NyZWVuY2hhbmdlIiwgdGhpcy5fb25GdWxsc2NyZWVu
Q2hhbmdlKTsKKyAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW96ZnVsbHNj
cmVlbmNoYW5nZSIsIHRoaXMuX29uRnVsbHNjcmVlbkNoYW5nZSk7CisgICAgICAgIGRvY3VtZW50
LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCB0aGlzLl9vbkZ1
bGxzY3JlZW5DaGFuZ2UpOworICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJt
c2Z1bGxzY3JlZW5jaGFuZ2UiLCB0aGlzLl9vbkZ1bGxzY3JlZW5DaGFuZ2UpOworICAgICAgICBk
b2N1bWVudC5vbm1zZnVsbHNjcmVlbmNoYW5nZSA9IG51bGw7CisgICAgICAgIHRoaXMuX3NjZW5l
LmdldEVuZ2luZSgpLm9uVlJEaXNwbGF5Q2hhbmdlZE9ic2VydmFibGUucmVtb3ZlQ2FsbGJhY2so
dGhpcy5fb25WUkRpc3BsYXlDaGFuZ2VkKTsKKyAgICAgICAgdGhpcy5fc2NlbmUuZ2V0RW5naW5l
KCkub25WUlJlcXVlc3RQcmVzZW50U3RhcnQucmVtb3ZlQ2FsbGJhY2sodGhpcy5fb25WUlJlcXVl
c3RQcmVzZW50U3RhcnQpOworICAgICAgICB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5vblZSUmVx
dWVzdFByZXNlbnRDb21wbGV0ZS5yZW1vdmVDYWxsYmFjayh0aGlzLl9vblZSUmVxdWVzdFByZXNl
bnRDb21wbGV0ZSk7CisgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2cmRpc3Bs
YXlwcmVzZW50Y2hhbmdlJywgdGhpcy5fb25WckRpc3BsYXlQcmVzZW50Q2hhbmdlKTsKKyAgICAg
ICAgdGhpcy5fc2NlbmUuZ2FtZXBhZE1hbmFnZXIub25HYW1lcGFkQ29ubmVjdGVkT2JzZXJ2YWJs
ZS5yZW1vdmVDYWxsYmFjayh0aGlzLl9vbk5ld0dhbWVwYWRDb25uZWN0ZWQpOworICAgICAgICB0
aGlzLl9zY2VuZS5nYW1lcGFkTWFuYWdlci5vbkdhbWVwYWREaXNjb25uZWN0ZWRPYnNlcnZhYmxl
LnJlbW92ZUNhbGxiYWNrKHRoaXMuX29uTmV3R2FtZXBhZERpc2Nvbm5lY3RlZCk7CisgICAgICAg
IHRoaXMuX3NjZW5lLnVucmVnaXN0ZXJCZWZvcmVSZW5kZXIodGhpcy5iZWZvcmVSZW5kZXIpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgVlJFeHBlcmllbmNl
SGVscGVyIGNsYXNzCisgICAgICogQHJldHVybnMgIlZSRXhwZXJpZW5jZUhlbHBlciIKKyAgICAg
Ki8KKyAgICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJWUkV4cGVyaWVuY2VIZWxwZXIiOworICAgIH07Cisg
ICAgcmV0dXJuIFZSRXhwZXJpZW5jZUhlbHBlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vQ2FtZXJhcy9WUi93ZWJWUkNhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9WUi93ZWJWUkNhbWVyYS50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBXZWJWUkZyZWVDYW1lcmEgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiV2ViVlJGcmVlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBXZWJWUkZy
ZWVDYW1lcmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2Vy
dmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19mcmVlQ2FtZXJh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9DYW1lcmFzL2ZyZWVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9mcmVlQ2FtZXJhLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVy
YSAqLyAiLi9DYW1lcmFzL2NhbWVyYS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52
ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfR2FtZXBhZHNfZ2FtZXBhZF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vR2FtZXBhZHMvZ2FtZXBhZCAqLyAiLi9HYW1lcGFkcy9nYW1lcGFkLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0dhbWVwYWRzX0NvbnRyb2xsZXJzX3Bvc2VFbmFibGVkQ29udHJv
bGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvcG9zZUVuYWJsZWRDb250cm9sbGVyICovICIu
L0dhbWVwYWRzL0NvbnRyb2xsZXJzL3Bvc2VFbmFibGVkQ29udHJvbGxlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlICovICIuL25vZGUudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTGlnaHRzX2hlbWlzcGhlcmljTGlnaHRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0xpZ2h0cy9o
ZW1pc3BoZXJpY0xpZ2h0ICovICIuL0xpZ2h0cy9oZW1pc3BoZXJpY0xpZ2h0LnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9N
aXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2Vz
X3ZyTXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9Qb3N0UHJvY2Vzc2VzL3Zy
TXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy92ck11
bHRpdmlld1RvU2luZ2xldmlld1Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1JpZ01vZGVzX3dlYlZSUmlnTW9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1JpZ01vZGVzL3dlYlZSUmlnTW9kZSAqLyAi
Li9DYW1lcmFzL1JpZ01vZGVzL3dlYlZSUmlnTW9kZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9FbmdpbmVzX0V4dGVuc2lvbnNfZW5naW5lX3dlYlZSX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9FeHRl
bnNpb25zL2VuZ2luZS53ZWJWUiAqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLndlYlZS
LnRzIik7CisKKworCisKKworCisKKworCisKKworLy8gU2lkZSBlZmZlY3QgaW1wb3J0IHRvIGRl
ZmluZSB0aGUgc3RlcmVvc2NvcGljIG1vZGUuCisKKy8vIFNpZGUgZWZmZWN0IGltcG9ydCB0byBh
ZGQgd2VidnIgc3VwcG9ydCB0byBlbmdpbmUKKworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiV2ViVlJGcmVlQ2FtZXJhIiwgZnVu
Y3Rpb24gKG5hbWUsIHNjZW5lKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5l
dyBXZWJWUkZyZWVDYW1lcmEobmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKTsgfTsKK30pOworX25vZGVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3Rvcigi
V2ViVlJHYW1lcGFkQ2FtZXJhIiwgZnVuY3Rpb24gKG5hbWUsIHNjZW5lKSB7CisgICAgcmV0dXJu
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBXZWJWUkZyZWVDYW1lcmEobmFtZSwgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3RvcjMiXS5aZXJvKCks
IHNjZW5lKTsgfTsKK30pOworLyoqCisgKiBUaGlzIHJlcHJlc2VudHMgYSBXZWJWUiBjYW1lcmEu
CisgKiBUaGUgV2ViVlIgY2FtZXJhIGlzIEJhYnlsb24ncyBzaW1wbGUgaW50ZXJmYWNlIHRvIGlu
dGVyYWN0aW9uIHdpdGggV2luZG93cyBNaXhlZCBSZWFsaXR5LCBIVEMgVml2ZSBhbmQgT2N1bHVz
IFJpZnQuCisgKiBAZXhhbXBsZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3dlYnZy
X2NhbWVyYQorICovCit2YXIgV2ViVlJGcmVlQ2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZXh0ZW5kcyJdKFdlYlZSRnJlZUNhbWVyYSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0
YW50aWF0ZXMgYSBXZWJWUkZyZWVDYW1lcmEuCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUg
b2YgdGhlIFdlYlZSRnJlZUNhbWVyYQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgc3RhcnRp
bmcgYW5jaG9yIHBvc2l0aW9uIGZvciB0aGUgY2FtZXJhCisgICAgICogQHBhcmFtIHNjZW5lIFRo
ZSBzY2VuZSB0aGUgY2FtZXJhIGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gd2ViVlJPcHRpb25z
IGEgc2V0IG9mIGN1c3RvbWl6YWJsZSBvcHRpb25zIGZvciB0aGUgd2ViVlJDYW1lcmEKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBXZWJWUkZyZWVDYW1lcmEobmFtZSwgcG9zaXRpb24sIHNjZW5lLCB3
ZWJWUk9wdGlvbnMpIHsKKyAgICAgICAgaWYgKHdlYlZST3B0aW9ucyA9PT0gdm9pZCAwKSB7IHdl
YlZST3B0aW9ucyA9IHt9OyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMs
IG5hbWUsIHBvc2l0aW9uLCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMud2ViVlJPcHRp
b25zID0gd2ViVlJPcHRpb25zOworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbgorICAg
ICAgICAgKiBUaGUgdnJEaXNwbGF5IHRpZWQgdG8gdGhlIGNhbWVyYS4gU2VlIGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9WUkRpc3BsYXkKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLl92ckRldmljZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaGUgcmF3UG9zZSBvZiB0aGUgdnJEZXZpY2UuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5yYXdQb3NlID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX3NwZWNzVmVyc2lvbiA9ICIxLjEi
OworICAgICAgICBfdGhpcy5fYXR0YWNoZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2Rlc2Nl
bmRhbnRzID0gW107CisgICAgICAgIC8vIFJlcHJlc2VudHMgZGV2aWNlIHBvc2l0aW9uIGFuZCBy
b3RhdGlvbiBpbiByb29tIHNwYWNlLiBTaG91bGQgb25seSBiZSB1c2VkIHRvIGhlbHAgY2FsY3Vs
YXRlIGJhYnlsb24gc3BhY2UgdmFsdWVzCisgICAgICAgIF90aGlzLl9kZXZpY2VSb29tUG9zaXRp
b24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVj
dG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2Rl
dmljZVJvb21Sb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siUXVhdGVybmlvbiJdLklkZW50aXR5KCk7CisgICAgICAgIF90
aGlzLl9zdGFuZGluZ01hdHJpeCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXBy
ZXNlbnRzIGRldmljZSBwb3NpdGlvbiBpbiBiYWJ5bG9uIHNwYWNlLgorICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMuZGV2aWNlUG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFJlcHJlc2VudHMgZGV2aWNlIHJvdGF0aW9uIGluIGJhYnlsb24gc3BhY2UuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5kZXZpY2VSb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUXVhdGVybmlvbiJdLklk
ZW50aXR5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIGRldmlj
ZSB0byBiZSB1c2VkIHdoZW4gdHJhbnNsYXRpbmcgZnJvbSBkZXZpY2Ugc3BhY2UgdG8gYmFieWxv
biBzcGFjZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmRldmljZVNjYWxlRmFjdG9yID0g
MTsKKyAgICAgICAgX3RoaXMuX2RldmljZVRvV29ybGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAg
X3RoaXMuX3dvcmxkVG9EZXZpY2UgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFJlZmVyZW5jZXMgdG8gdGhlIHdlYlZSIGNvbnRyb2xsZXJzIGZvciB0aGUgdnJEZXZpY2Uu
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5jb250cm9sbGVycyA9IFtdOworICAgICAgICAv
KioKKyAgICAgICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIGNvbnRyb2xsZXIgaXMgYXR0YWNo
ZWQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkNvbnRyb2xsZXJzQXR0YWNoZWRPYnNl
cnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbWl0cyBhbiBldmVu
dCB3aGVuIGEgY29udHJvbGxlcidzIG1lc2ggaGFzIGJlZW4gbG9hZGVkOworICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMub25Db250cm9sbGVyTWVzaExvYWRlZE9ic2VydmFibGUgPSBuZXcgX01p
c2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0o
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIEhNRCdz
IHBvc2UgaGFzIGJlZW4gdXBkYXRlZC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uUG9z
ZVVwZGF0ZWRGcm9tRGV2aWNlT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhpcy5f
cG9zZVNldCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgdGhlIHJpZyBjYW1l
cmFzIGJlIHVzZWQgYXMgcGFyZW50IGluc3RlYWQgb2YgdGhpcyBjYW1lcmEuCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5yaWdQYXJlbnRpbmcgPSB0cnVlOworICAgICAgICBfdGhpcy5fZGVm
YXVsdEhlaWdodCA9IHVuZGVmaW5lZDsKKyAgICAgICAgX3RoaXMuX2h0bWxFbGVtZW50QXR0YWNo
ZWQgPSBudWxsOworICAgICAgICBfdGhpcy5fZGV0YWNoSWZBdHRhY2hlZCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHZhciB2ckRpc3BsYXkgPSBfdGhpcy5nZXRFbmdpbmUoKS5nZXRWUkRl
dmljZSgpOworICAgICAgICAgICAgaWYgKHZyRGlzcGxheSAmJiAhdnJEaXNwbGF5LmlzUHJlc2Vu
dGluZyAmJiBfdGhpcy5faHRtbEVsZW1lbnRBdHRhY2hlZCkgeworICAgICAgICAgICAgICAgIF90
aGlzLmRldGFjaENvbnRyb2woX3RoaXMuX2h0bWxFbGVtZW50QXR0YWNoZWQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9OworICAgICAgICBfdGhpcy5fd29ya2luZ1ZlY3RvciA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZWN0b3IzIl0uWmVybygp
OworICAgICAgICBfdGhpcy5fb25lVmVjdG9yID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3RvcjMiXS5PbmUoKTsKKyAgICAgICAgX3RoaXMuX3dv
cmtpbmdNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgX3RoaXMuX3RtcE1hdHJpeCA9IG5l
dyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0cml4
Il0oKTsKKyAgICAgICAgX3RoaXMuX2NhY2hlLnBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAg
IGlmICh3ZWJWUk9wdGlvbnMuZGVmYXVsdEhlaWdodCkgeworICAgICAgICAgICAgX3RoaXMuX2Rl
ZmF1bHRIZWlnaHQgPSB3ZWJWUk9wdGlvbnMuZGVmYXVsdEhlaWdodDsKKyAgICAgICAgICAgIF90
aGlzLnBvc2l0aW9uLnkgPSBfdGhpcy5fZGVmYXVsdEhlaWdodDsKKyAgICAgICAgfQorICAgICAg
ICBfdGhpcy5taW5aID0gMC4xOworICAgICAgICAvL2xlZ2FjeSBzdXBwb3J0IC0gdGhlIGNvbXBl
bnNhdGlvbiBib29sZWFuIHdhcyByZW1vdmVkLgorICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0
aCA9PT0gNSkgeworICAgICAgICAgICAgX3RoaXMud2ViVlJPcHRpb25zID0gYXJndW1lbnRzWzRd
OworICAgICAgICB9CisgICAgICAgIC8vIGRlZmF1bHQgd2ViVlIgb3B0aW9ucworICAgICAgICBp
ZiAoX3RoaXMud2ViVlJPcHRpb25zLnRyYWNrUG9zaXRpb24gPT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgICAgICBfdGhpcy53ZWJWUk9wdGlvbnMudHJhY2tQb3NpdGlvbiA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKF90aGlzLndlYlZST3B0aW9ucy5jb250cm9sbGVyTWVzaGVzID09IHVu
ZGVmaW5lZCkgeworICAgICAgICAgICAgX3RoaXMud2ViVlJPcHRpb25zLmNvbnRyb2xsZXJNZXNo
ZXMgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChfdGhpcy53ZWJWUk9wdGlvbnMuZGVm
YXVsdExpZ2h0aW5nT25Db250cm9sbGVycyA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIF90
aGlzLndlYlZST3B0aW9ucy5kZWZhdWx0TGlnaHRpbmdPbkNvbnRyb2xsZXJzID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBfdGhpcy5yb3RhdGlvblF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlF1YXRlcm5pb24iXSgpOwor
ICAgICAgICBpZiAoX3RoaXMud2ViVlJPcHRpb25zICYmIF90aGlzLndlYlZST3B0aW9ucy5wb3Np
dGlvblNjYWxlKSB7CisgICAgICAgICAgICBfdGhpcy5kZXZpY2VTY2FsZUZhY3RvciA9IF90aGlz
LndlYlZST3B0aW9ucy5wb3NpdGlvblNjYWxlOworICAgICAgICB9CisgICAgICAgIC8vZW5hYmxl
IFZSCisgICAgICAgIHZhciBlbmdpbmUgPSBfdGhpcy5nZXRFbmdpbmUoKTsKKyAgICAgICAgX3Ro
aXMuX29uVlJFbmFibGVkID0gZnVuY3Rpb24gKHN1Y2Nlc3MpIHsgaWYgKHN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgIF90aGlzLmluaXRDb250cm9sbGVycygpOworICAgICAgICB9IH07CisgICAgICAg
IGVuZ2luZS5vblZSUmVxdWVzdFByZXNlbnRDb21wbGV0ZS5hZGQoX3RoaXMuX29uVlJFbmFibGVk
KTsKKyAgICAgICAgZW5naW5lLmluaXRXZWJWUigpLmFkZChmdW5jdGlvbiAoZXZlbnQpIHsKKyAg
ICAgICAgICAgIGlmICghZXZlbnQudnJEaXNwbGF5IHx8IF90aGlzLl92ckRldmljZSA9PT0gZXZl
bnQudnJEaXNwbGF5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgX3RoaXMuX3ZyRGV2aWNlID0gZXZlbnQudnJEaXNwbGF5OworICAgICAgICAg
ICAgLy9yZXNldCB0aGUgcmlnIHBhcmFtZXRlcnMuCisgICAgICAgICAgICBfdGhpcy5zZXRDYW1l
cmFSaWdNb2RlKF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJD
YW1lcmEiXS5SSUdfTU9ERV9XRUJWUiwgeyBwYXJlbnRDYW1lcmE6IF90aGlzLCB2ckRpc3BsYXk6
IF90aGlzLl92ckRldmljZSwgZnJhbWVEYXRhOiBfdGhpcy5fZnJhbWVEYXRhLCBzcGVjczogX3Ro
aXMuX3NwZWNzVmVyc2lvbiB9KTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fYXR0YWNoZWQpIHsK
KyAgICAgICAgICAgICAgICBfdGhpcy5nZXRFbmdpbmUoKS5lbmFibGVWUigpOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICAgICAgaWYgKHR5cGVvZiAoVlJGcmFtZURhdGEpICE9PSAi
dW5kZWZpbmVkIikgeworICAgICAgICAgICAgX3RoaXMuX2ZyYW1lRGF0YSA9IG5ldyBWUkZyYW1l
RGF0YSgpOworICAgICAgICB9CisgICAgICAgIGlmICh3ZWJWUk9wdGlvbnMudXNlTXVsdGl2aWV3
KSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuZ2V0Q2Fw
cygpLm11bHRpdmlldykgeworICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJMb2dnZXIiXS5XYXJuKCJNdWx0aXZpZXcgaXMgbm90IHN1cHBv
cnRlZCwgZmFsbGluZyBiYWNrIHRvIHN0YW5kYXJkIHJlbmRlcmluZyIpOworICAgICAgICAgICAg
ICAgIF90aGlzLl91c2VNdWx0aXZpZXdUb1NpbmdsZVZpZXcgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIF90aGlzLl91c2VNdWx0aXZp
ZXdUb1NpbmdsZVZpZXcgPSB0cnVlOworICAgICAgICAgICAgICAgIF90aGlzLl9yaWdQb3N0UHJv
Y2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc192ck11bHRpdmlld1RvU2luZ2xldmlld1Bvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJWUk11bHRpdmlld1RvU2luZ2xldmll
d1Bvc3RQcm9jZXNzIl0oIlZSTXVsdGl2aWV3VG9TaW5nbGV2aWV3IiwgX3RoaXMsIDEuMCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBpZGVh
IGJlaGluZCB0aGUgZm9sbG93aW5nIGxpbmVzOgorICAgICAgICAgKiBvYmplY3RzIHRoYXQgaGF2
ZSB0aGUgY2FtZXJhIGFzIHBhcmVudCBzaG91bGQgYWN0dWFsbHkgaGF2ZSB0aGUgcmlnIGNhbWVy
YXMgYXMgYSBwYXJlbnQuCisgICAgICAgICAqIEJVVCwgZWFjaCBvZiB0aG9zZSBjYW1lcmFzIGhh
cyBhIGRpZmZlcmVudCB2aWV3IG1hdHJpeCwgd2hpY2ggbWVhbnMgdGhhdCBpZiB3ZSBzZXQgdGhl
IHBhcmVudCB0byB0aGUgZmlyc3QgcmlnIGNhbWVyYSwKKyAgICAgICAgICogdGhlIHNlY29uZCB3
aWxsIG5vdCBzaG93IGl0IGNvcnJlY3RseS4KKyAgICAgICAgICoKKyAgICAgICAgICogVG8gc29s
dmUgdGhpcyAtIGVhY2ggb2JqZWN0IHRoYXQgaGFzIHRoZSBjYW1lcmEgYXMgcGFyZW50IHdpbGwg
YmUgYWRkZWQgdG8gYSBwcm90ZWN0ZWQgYXJyYXkuCisgICAgICAgICAqIFdoZW4gdGhlIHJpZyBj
YW1lcmEgcmVuZGVycywgaXQgd2lsbCB0YWtlIHRoaXMgYXJyYXkgYW5kIHNldCBhbGwgb2YgdGhv
c2UgdG8gYmUgaXRzIGNoaWxkcmVuLgorICAgICAgICAgKiBUaGlzIHdheSwgdGhlIHJpZ2h0IGNh
bWVyYSB3aWxsIGJlIHVzZWQgYXMgYSBwYXJlbnQsIGFuZCB0aGUgbWVzaCB3aWxsIGJlIHJlbmRl
cmVkIGNvcnJlY3RseS4KKyAgICAgICAgICogQW1hemluZyEKKyAgICAgICAgICovCisgICAgICAg
IHNjZW5lLm9uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGNhbWVy
YSkgeworICAgICAgICAgICAgaWYgKGNhbWVyYS5wYXJlbnQgPT09IF90aGlzICYmIF90aGlzLnJp
Z1BhcmVudGluZykgeworICAgICAgICAgICAgICAgIF90aGlzLl9kZXNjZW5kYW50cyA9IF90aGlz
LmdldERlc2NlbmRhbnRzKHRydWUsIGZ1bmN0aW9uIChuKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIGRvbid0IHRha2UgdGhlIGNhbWVyYXMgb3IgdGhlIGNvbnRyb2xsZXJzIQorICAgICAgICAg
ICAgICAgICAgICB2YXIgaXNDb250cm9sbGVyID0gX3RoaXMuY29udHJvbGxlcnMuc29tZShmdW5j
dGlvbiAoY29udHJvbGxlcikgeyByZXR1cm4gY29udHJvbGxlci5fbWVzaCA9PT0gbjsgfSk7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBpc1JpZ0NhbWVyYSA9IF90aGlzLl9yaWdDYW1lcmFzLmlu
ZGV4T2YobikgIT09IC0xOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzQ29udHJvbGxl
ciAmJiAhaXNSaWdDYW1lcmE7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
X3RoaXMuX2Rlc2NlbmRhbnRzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS5wYXJlbnQgPSBjYW1lcmE7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBzY2VuZS5vbkFmdGVyQ2FtZXJhUmVuZGVy
T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICAgICAgaWYgKGNhbWVy
YS5wYXJlbnQgPT09IF90aGlzICYmIF90aGlzLnJpZ1BhcmVudGluZykgeworICAgICAgICAgICAg
ICAgIF90aGlzLl9kZXNjZW5kYW50cy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gX3RoaXM7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQor
ICAgIC8qKgorICAgICAqIEdldHMgdGhlIGRldmljZSBkaXN0YW5jZSBmcm9tIHRoZSBncm91bmQg
aW4gbWV0ZXJzLgorICAgICAqIEByZXR1cm5zIHRoZSBkaXN0YW5jZSBpbiBtZXRlcnMgZnJvbSB0
aGUgdnJEZXZpY2UgdG8gZ3JvdW5kIGluIGRldmljZSBzcGFjZS4gSWYgc3RhbmRpbmcgbWF0cml4
IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSB2ckRldmljZSAwIGlzIHJldHVybmVkLgorICAgICAq
LworICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUuZGV2aWNlRGlzdGFuY2VUb1Jvb21Hcm91
bmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9zdGFuZGluZ01hdHJpeCkgewor
ICAgICAgICAgICAgLy8gQWRkIHN0YW5kaW5nIG1hdHJpeCBvZmZzZXQgdG8gZ2V0IHJlYWwgb2Zm
c2V0IGZyb20gZ3JvdW5kIGluIHJvb20KKyAgICAgICAgICAgIHRoaXMuX3N0YW5kaW5nTWF0cml4
LmdldFRyYW5zbGF0aW9uVG9SZWYodGhpcy5fd29ya2luZ1ZlY3Rvcik7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fZGV2aWNlUm9vbVBvc2l0aW9uLnkgKyB0aGlzLl93b3JraW5nVmVjdG9yLnk7
CisgICAgICAgIH0KKyAgICAgICAgLy9JZiBWUkRpc3BsYXkgZG9lcyBub3QgaW5mb3JtIHN0YWdl
IHBhcmFtZXRlcnMgYW5kIG5vIGRlZmF1bHQgaGVpZ2h0IGlzIHNldCB3ZSBmYWxsYmFjayB0byB6
ZXJvLgorICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEhlaWdodCB8fCAwOworICAgIH07Cisg
ICAgLyoqCisgICAgICogRW5hYmxlcyB0aGUgc3RhbmRpbmcgbWF0cml4IHdoZW4gc3VwcG9ydGVk
LiBUaGlzIGNhbiBiZSB1c2VkIHRvIHBvc2l0aW9uIHRoZSB1c2VyJ3MgdmlldyB0aGUgY29ycmVj
dCBoZWlnaHQgZnJvbSB0aGUgZ3JvdW5kLgorICAgICAqIEBwYXJhbSBjYWxsYmFjayB3aWxsIGJl
IGNhbGxlZCB3aGVuIHRoZSBzdGFuZGluZyBtYXRyaXggaXMgc2V0LiBDYWxsYmFjayBwYXJhbWV0
ZXIgaXMgaWYgdGhlIHN0YW5kaW5nIG1hdHJpeCBpcyBzdXBwb3J0ZWQuCisgICAgICovCisgICAg
V2ViVlJGcmVlQ2FtZXJhLnByb3RvdHlwZS51c2VTdGFuZGluZ01hdHJpeCA9IGZ1bmN0aW9uIChj
YWxsYmFjaykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoY2FsbGJh
Y2sgPT09IHZvaWQgMCkgeyBjYWxsYmFjayA9IGZ1bmN0aW9uIChib29sKSB7IH07IH0KKyAgICAg
ICAgLy8gVXNlIHN0YW5kaW5nIG1hdHJpeCBpZiBhdmFpbGFibGUKKyAgICAgICAgdGhpcy5nZXRF
bmdpbmUoKS5pbml0V2ViVlJBc3luYygpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAg
ICAgICAgaWYgKCFyZXN1bHQudnJEaXNwbGF5IHx8ICFyZXN1bHQudnJEaXNwbGF5LnN0YWdlUGFy
YW1ldGVycyB8fCAhcmVzdWx0LnZyRGlzcGxheS5zdGFnZVBhcmFtZXRlcnMuc2l0dGluZ1RvU3Rh
bmRpbmdUcmFuc2Zvcm0gfHwgIV90aGlzLndlYlZST3B0aW9ucy50cmFja1Bvc2l0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3N0YW5kaW5nTWF0cml4ID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRyaXgiXSgp
OworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJNYXRyaXgiXS5Gcm9tRmxvYXQzMkFycmF5VG9SZWZTY2FsZWQocmVzdWx0LnZy
RGlzcGxheS5zdGFnZVBhcmFtZXRlcnMuc2l0dGluZ1RvU3RhbmRpbmdUcmFuc2Zvcm0sIDAsIDEs
IF90aGlzLl9zdGFuZGluZ01hdHJpeCk7CisgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5nZXRT
Y2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVtKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChf
dGhpcy5fc3RhbmRpbmdNYXRyaXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9z
dGFuZGluZ01hdHJpeC50b2dnbGVNb2RlbE1hdHJpeEhhbmRJblBsYWNlKCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FsbGJhY2so
dHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAg
ICogRW5hYmxlcyB0aGUgc3RhbmRpbmcgbWF0cml4IHdoZW4gc3VwcG9ydGVkLiBUaGlzIGNhbiBi
ZSB1c2VkIHRvIHBvc2l0aW9uIHRoZSB1c2VyJ3MgdmlldyB0aGUgY29ycmVjdCBoZWlnaHQgZnJv
bSB0aGUgZ3JvdW5kLgorICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRoIGEgYm9vbGVhbiBz
ZXQgdG8gaWYgdGhlIHN0YW5kaW5nIG1hdHJpeCBpcyBzdXBwb3J0ZWQuCisgICAgICovCisgICAg
V2ViVlJGcmVlQ2FtZXJhLnByb3RvdHlwZS51c2VTdGFuZGluZ01hdHJpeEFzeW5jID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICByZXR1cm4gbmV3IFBy
b21pc2UoZnVuY3Rpb24gKHJlcykgeworICAgICAgICAgICAgX3RoaXMudXNlU3RhbmRpbmdNYXRy
aXgoZnVuY3Rpb24gKHN1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgIHJlcyhzdXBwb3J0ZWQp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICog
RGlzcG9zZXMgdGhlIGNhbWVyYQorICAgICAqLworICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5
cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fZGV0YWNoSWZBdHRhY2hl
ZCgpOworICAgICAgICB0aGlzLmdldEVuZ2luZSgpLm9uVlJSZXF1ZXN0UHJlc2VudENvbXBsZXRl
LnJlbW92ZUNhbGxiYWNrKHRoaXMuX29uVlJFbmFibGVkKTsKKyAgICAgICAgaWYgKHRoaXMuX3Vw
ZGF0ZUNhY2hlV2hlblRyYWNraW5nRGlzYWJsZWRPYnNlcnZlcikgeworICAgICAgICAgICAgdGhp
cy5fc2NlbmUub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl91cGRhdGVDYWNo
ZVdoZW5UcmFja2luZ0Rpc2FibGVkT2JzZXJ2ZXIpOworICAgICAgICB9CisgICAgICAgIF9zdXBl
ci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0cyBhIHZyQ29udHJvbGxlciBieSBuYW1lLgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1l
IG9mIHRoZSBjb250cm9sbGVyIHRvIHJldHJlaXZlCisgICAgICogQHJldHVybnMgdGhlIGNvbnRy
b2xsZXIgbWF0Y2hpbmcgdGhlIG5hbWUgc3BlY2lmaWVkIG9yIG51bGwgaWYgbm90IGZvdW5kCisg
ICAgICovCisgICAgV2ViVlJGcmVlQ2FtZXJhLnByb3RvdHlwZS5nZXRDb250cm9sbGVyQnlOYW1l
ID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMu
Y29udHJvbGxlcnM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgZ3Ag
PSBfYVtfaV07CisgICAgICAgICAgICBpZiAoZ3AuaGFuZCA9PT0gbmFtZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBncDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJWUkZyZWVDYW1l
cmEucHJvdG90eXBlLCAibGVmdENvbnRyb2xsZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBUaGUgY29udHJvbGxlciBjb3JyZXNwb25kaW5nIHRvIHRoZSB1c2VycyBsZWZ0IGhhbmQuCisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICgh
dGhpcy5fbGVmdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9sZWZ0Q29udHJv
bGxlciA9IHRoaXMuZ2V0Q29udHJvbGxlckJ5TmFtZSgibGVmdCIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRDb250cm9sbGVyOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViVlJGcmVlQ2FtZXJhLnByb3RvdHlwZSwg
InJpZ2h0Q29udHJvbGxlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjb250cm9s
bGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHVzZXJzIHJpZ2h0IGhhbmQuCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fcmlnaHRD
b250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRDb250cm9sbGVyID0gdGhp
cy5nZXRDb250cm9sbGVyQnlOYW1lKCJyaWdodCIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3JpZ2h0Q29udHJvbGxlcjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqCisgICAgICogQ2FzdHMgYSByYXkgZm9yd2FyZCBmcm9tIHRoZSB2ckNhbWVyYSdzIGdhemUu
CisgICAgICogQHBhcmFtIGxlbmd0aCBMZW5ndGggb2YgdGhlIHJheSAoZGVmYXVsdDogMTAwKQor
ICAgICAqIEByZXR1cm5zIHRoZSByYXkgY29ycmVzcG9uZGluZyB0byB0aGUgZ2F6ZQorICAgICAq
LworICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUuZ2V0Rm9yd2FyZFJheSA9IGZ1bmN0aW9u
IChsZW5ndGgpIHsKKyAgICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7IGxlbmd0aCA9IDEw
MDsgfQorICAgICAgICBpZiAodGhpcy5sZWZ0Q2FtZXJhKSB7CisgICAgICAgICAgICAvLyBVc2Ug
bGVmdCBleWUgdG8gYXZvaWQgY29tcHV0YXRpb24gdG8gY29tcHV0ZSBjZW50ZXIgb24gZXZlcnkg
Y2FsbAorICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0Rm9yd2FyZFJheS5j
YWxsKHRoaXMsIGxlbmd0aCwgdGhpcy5sZWZ0Q2FtZXJhLmdldFdvcmxkTWF0cml4KCksIHRoaXMu
bGVmdENhbWVyYS5nbG9iYWxQb3NpdGlvbik7IC8vIE5lZWQgdGhlIGFjdHVhbCByZW5kZXJlZCBj
YW1lcmEKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBfc3Vw
ZXIucHJvdG90eXBlLmdldEZvcndhcmRSYXkuY2FsbCh0aGlzLCBsZW5ndGgpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICogVXBkYXRlcyB0aGUgY2Ft
ZXJhIGJhc2VkIG9uIGRldmljZSdzIGZyYW1lIGRhdGEKKyAgICAgKi8KKyAgICBXZWJWUkZyZWVD
YW1lcmEucHJvdG90eXBlLl9jaGVja0lucHV0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMuX3ZyRGV2aWNlICYmIHRoaXMuX3ZyRGV2aWNlLmlzUHJlc2VudGluZykgeworICAgICAg
ICAgICAgdGhpcy5fdnJEZXZpY2UuZ2V0RnJhbWVEYXRhKHRoaXMuX2ZyYW1lRGF0YSk7CisgICAg
ICAgICAgICB0aGlzLnVwZGF0ZUZyb21EZXZpY2UodGhpcy5fZnJhbWVEYXRhLnBvc2UpOworICAg
ICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2NoZWNrSW5wdXRzLmNhbGwodGhpcyk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBwb3NlQ29udHJvbGxlZCB2YWx1
ZXMgYmFzZWQgb24gdGhlIGlucHV0IGRldmljZSBwb3NlLgorICAgICAqIEBwYXJhbSBwb3NlRGF0
YSBQb3NlIGNvbWluZyBmcm9tIHRoZSBkZXZpY2UKKyAgICAgKi8KKyAgICBXZWJWUkZyZWVDYW1l
cmEucHJvdG90eXBlLnVwZGF0ZUZyb21EZXZpY2UgPSBmdW5jdGlvbiAocG9zZURhdGEpIHsKKyAg
ICAgICAgaWYgKHBvc2VEYXRhICYmIHBvc2VEYXRhLm9yaWVudGF0aW9uICYmIHBvc2VEYXRhLm9y
aWVudGF0aW9uLmxlbmd0aCA9PT0gNCkgeworICAgICAgICAgICAgdGhpcy5yYXdQb3NlID0gcG9z
ZURhdGE7CisgICAgICAgICAgICB0aGlzLl9kZXZpY2VSb29tUm90YXRpb25RdWF0ZXJuaW9uLmNv
cHlGcm9tRmxvYXRzKHBvc2VEYXRhLm9yaWVudGF0aW9uWzBdLCBwb3NlRGF0YS5vcmllbnRhdGlv
blsxXSwgLXBvc2VEYXRhLm9yaWVudGF0aW9uWzJdLCAtcG9zZURhdGEub3JpZW50YXRpb25bM10p
OworICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkg
eworICAgICAgICAgICAgICAgIHRoaXMuX2RldmljZVJvb21Sb3RhdGlvblF1YXRlcm5pb24ueiAq
PSAtMTsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VSb29tUm90YXRpb25RdWF0ZXJuaW9u
LncgKj0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy53ZWJWUk9wdGlv
bnMudHJhY2tQb3NpdGlvbiAmJiB0aGlzLnJhd1Bvc2UucG9zaXRpb24pIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9kZXZpY2VSb29tUG9zaXRpb24uY29weUZyb21GbG9hdHModGhpcy5yYXdQb3Nl
LnBvc2l0aW9uWzBdLCB0aGlzLnJhd1Bvc2UucG9zaXRpb25bMV0sIC10aGlzLnJhd1Bvc2UucG9z
aXRpb25bMl0pOworICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFNjZW5lKCkudXNlUmlnaHRI
YW5kZWRTeXN0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlUm9vbVBvc2l0
aW9uLnogKj0gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fcG9zZVNldCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIFdlYlZSJ3MgYXR0YWNoIGNvbnRyb2wgd2lsbCBzdGFydCBicm9hZGNhc3RpbmcgZnJhbWVz
IHRvIHRoZSBkZXZpY2UuCisgICAgICogTm90ZSB0aGF0IGluIGNlcnRhaW4gYnJvd3NlcnMgKGNo
cm9tZSBmb3IgZXhhbXBsZSkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAorICAgICAqIHdp
dGhpbiBhIHVzZXItaW50ZXJhY3Rpb24gY2FsbGJhY2suIEV4YW1wbGU6CisgICAgICogPHByZT4g
c2NlbmUub25Qb2ludGVyRG93biA9IGZ1bmN0aW9uKCkgeyBjYW1lcmEuYXR0YWNoQ29udHJvbChj
YW52YXMpOyB9PC9wcmU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gZWxlbWVudCBodG1sIGVsZW1l
bnQgdG8gYXR0YWNoIHRoZSB2ckRldmljZSB0bworICAgICAqIEBwYXJhbSBub1ByZXZlbnREZWZh
dWx0IHByZXZlbnQgdGhlIGRlZmF1bHQgaHRtbCBlbGVtZW50IG9wZXJhdGlvbiB3aGVuIGF0dGFj
aGluZyB0aGUgdnJEZXZpY2UKKyAgICAgKi8KKyAgICBXZWJWUkZyZWVDYW1lcmEucHJvdG90eXBl
LmF0dGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCkgewor
ICAgICAgICBfc3VwZXIucHJvdG90eXBlLmF0dGFjaENvbnRyb2wuY2FsbCh0aGlzLCBlbGVtZW50
LCBub1ByZXZlbnREZWZhdWx0KTsKKyAgICAgICAgdGhpcy5fYXR0YWNoZWQgPSB0cnVlOworICAg
ICAgICB0aGlzLl9odG1sRWxlbWVudEF0dGFjaGVkID0gZWxlbWVudDsKKyAgICAgICAgbm9QcmV2
ZW50RGVmYXVsdCA9IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJDYW1lcmEiXS5Gb3JjZUF0dGFjaENvbnRyb2xUb0Fsd2F5c1ByZXZlbnREZWZhdWx0ID8gZmFs
c2UgOiBub1ByZXZlbnREZWZhdWx0OworICAgICAgICBpZiAodGhpcy5fdnJEZXZpY2UpIHsKKyAg
ICAgICAgICAgIHRoaXMuZ2V0RW5naW5lKCkuZW5hYmxlVlIoKTsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgaG9zdFdpbmRvdyA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldEhvc3RXaW5kb3co
KTsKKyAgICAgICAgaG9zdFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd2cmRpc3BsYXlwcmVzZW50
Y2hhbmdlJywgdGhpcy5fZGV0YWNoSWZBdHRhY2hlZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBEZXRhY2hlcyB0aGUgY2FtZXJhIGZyb20gdGhlIGh0bWwgZWxlbWVudCBhbmQgZGlzYWJsZXMg
VlIKKyAgICAgKgorICAgICAqIEBwYXJhbSBlbGVtZW50IGh0bWwgZWxlbWVudCB0byBkZXRhY2gg
ZnJvbQorICAgICAqLworICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUuZGV0YWNoQ29udHJv
bCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5nYW1lcGFk
TWFuYWdlci5vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkdhbWVw
YWRDb25uZWN0ZWRPYnNlcnZlcik7CisgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5nYW1lcGFkTWFu
YWdlci5vbkdhbWVwYWREaXNjb25uZWN0ZWRPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkdhbWVw
YWREaXNjb25uZWN0ZWRPYnNlcnZlcik7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGV0YWNo
Q29udHJvbC5jYWxsKHRoaXMsIGVsZW1lbnQpOworICAgICAgICB0aGlzLl9hdHRhY2hlZCA9IGZh
bHNlOworICAgICAgICB0aGlzLmdldEVuZ2luZSgpLmRpc2FibGVWUigpOworICAgICAgICB3aW5k
b3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndnJkaXNwbGF5cHJlc2VudGNoYW5nZScsIHRoaXMuX2Rl
dGFjaElmQXR0YWNoZWQpOworICAgIH07CisgICAgLyoqCisgICAgICogQHJldHVybnMgdGhlIG5h
bWUgb2YgdGhpcyBjbGFzcworICAgICAqLworICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUu
Z2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIldlYlZSRnJlZUNh
bWVyYSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxscyByZXNldFBvc2Ugb24gdGhlIHZy
RGlzcGxheQorICAgICAqIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMv
ZG9jcy9XZWIvQVBJL1ZSRGlzcGxheS9yZXNldFBvc2UKKyAgICAgKi8KKyAgICBXZWJWUkZyZWVD
YW1lcmEucHJvdG90eXBlLnJlc2V0VG9DdXJyZW50Um90YXRpb24gPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIC8vdXNlcyB0aGUgdnJEaXNwbGF5J3MgInJlc2V0UG9zZSgpIi4KKyAgICAgICAgLy9w
aXRjaCBhbmQgcm9sbCB3b24ndCBiZSBhZmZlY3RlZC4KKyAgICAgICAgdGhpcy5fdnJEZXZpY2Uu
cmVzZXRQb3NlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICogVXBk
YXRlcyB0aGUgcmlnIGNhbWVyYXMgKGxlZnQgYW5kIHJpZ2h0IGV5ZSkKKyAgICAgKi8KKyAgICBX
ZWJWUkZyZWVDYW1lcmEucHJvdG90eXBlLl91cGRhdGVSaWdDYW1lcmFzID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgY2FtTGVmdCA9IHRoaXMuX3JpZ0NhbWVyYXNbMF07CisgICAgICAgIHZh
ciBjYW1SaWdodCA9IHRoaXMuX3JpZ0NhbWVyYXNbMV07CisgICAgICAgIGNhbUxlZnQucm90YXRp
b25RdWF0ZXJuaW9uLmNvcHlGcm9tKHRoaXMuX2RldmljZVJvb21Sb3RhdGlvblF1YXRlcm5pb24p
OworICAgICAgICBjYW1SaWdodC5yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odGhpcy5fZGV2
aWNlUm9vbVJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIGNhbUxlZnQucG9zaXRpb24uY29w
eUZyb20odGhpcy5fZGV2aWNlUm9vbVBvc2l0aW9uKTsKKyAgICAgICAgY2FtUmlnaHQucG9zaXRp
b24uY29weUZyb20odGhpcy5fZGV2aWNlUm9vbVBvc2l0aW9uKTsKKyAgICB9OworICAgIC8vIFJl
bW92ZSB0cmFuc2xhdGlvbiBmcm9tIDZkb2YgaGVhZHNldCBpZiB0cmFja3Bvc2l0aW9uIGlzIHNl
dCB0byBmYWxzZQorICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUuX2NvcnJlY3RQb3NpdGlv
bklmTm90VHJhY2tQb3NpdGlvbiA9IGZ1bmN0aW9uIChtYXRyaXgsIGlzVmlld01hdHJpeCkgewor
ICAgICAgICBpZiAoaXNWaWV3TWF0cml4ID09PSB2b2lkIDApIHsgaXNWaWV3TWF0cml4ID0gZmFs
c2U7IH0KKyAgICAgICAgaWYgKHRoaXMucmF3UG9zZSAmJiB0aGlzLnJhd1Bvc2UucG9zaXRpb24g
JiYgIXRoaXMud2ViVlJPcHRpb25zLnRyYWNrUG9zaXRpb24pIHsKKyAgICAgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRyaXgiXS5UcmFu
c2xhdGlvblRvUmVmKHRoaXMucmF3UG9zZS5wb3NpdGlvblswXSwgdGhpcy5yYXdQb3NlLnBvc2l0
aW9uWzFdLCAtdGhpcy5yYXdQb3NlLnBvc2l0aW9uWzJdLCB0aGlzLl90bXBNYXRyaXgpOworICAg
ICAgICAgICAgaWYgKCFpc1ZpZXdNYXRyaXgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90bXBN
YXRyaXguaW52ZXJ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl90bXBNYXRy
aXgubXVsdGlwbHlUb1JlZihtYXRyaXgsIG1hdHJpeCk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAgKiBVcGRhdGVzIHRoZSBjYWNoZWQgdmFsdWVzIG9m
IHRoZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gaWdub3JlUGFyZW50Q2xhc3MgaWdub3JlcyB1cGRh
dGluZyB0aGUgcGFyZW50IGNsYXNzJ3MgY2FjaGUgKGRlZmF1bHQ6IGZhbHNlKQorICAgICAqLwor
ICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUuX3VwZGF0ZUNhY2hlID0gZnVuY3Rpb24gKGln
bm9yZVBhcmVudENsYXNzKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlm
ICghdGhpcy5yb3RhdGlvblF1YXRlcm5pb24uZXF1YWxzKHRoaXMuX2NhY2hlLnJvdGF0aW9uUXVh
dGVybmlvbikgfHwgIXRoaXMucG9zaXRpb24uZXF1YWxzKHRoaXMuX2NhY2hlLnBvc2l0aW9uKSkg
eworICAgICAgICAgICAgLy8gVXBkYXRlIHRvIGVuc3VyZSBkZXZpY2VQb3NpdGlvbiBpcyB1cCB0
byBkYXRlIHdpdGggbW9zdCByZWNlbnQgX2RldmljZVJvb21Qb3NpdGlvbgorICAgICAgICAgICAg
aWYgKCF0aGlzLnVwZGF0ZUNhY2hlQ2FsbGVkKSB7CisgICAgICAgICAgICAgICAgLy8gbWFrZSBz
dXJlIGl0IGlzIG9ubHkgY2FsbGVkIG9uY2UgcGVyIGxvb3AuIHRoaXMudXBkYXRlKCkgbWlnaHQg
Y2F1c2UgYW4gaW5maW5pdGUgbG9vcC4KKyAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hl
Q2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gU2V0IHdvcmtpbmcgdmVjdG9yIHRvIHRoZSBkZXZpY2UgcG9z
aXRpb24gaW4gcm9vbSBzcGFjZSByb3RhdGVkIGJ5IHRoZSBuZXcgcm90YXRpb24KKyAgICAgICAg
ICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uLnRvUm90YXRpb25NYXRyaXgodGhpcy5fd29ya2lu
Z01hdHJpeCk7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYodGhpcy5f
ZGV2aWNlUm9vbVBvc2l0aW9uLCB0aGlzLl93b3JraW5nTWF0cml4LCB0aGlzLl93b3JraW5nVmVj
dG9yKTsKKyAgICAgICAgICAgIC8vIFN1YnRyYWN0IHRoaXMgdmVjdG9yIGZyb20gdGhlIGN1cnJl
bnQgZGV2aWNlIHBvc2l0aW9uIGluIHdvcmxkIHRvIGdldCB0aGUgdHJhbnNsYXRpb24gZm9yIHRo
ZSBkZXZpY2Ugd29ybGQgbWF0cml4CisgICAgICAgICAgICB0aGlzLmRldmljZVBvc2l0aW9uLnN1
YnRyYWN0VG9SZWYodGhpcy5fd29ya2luZ1ZlY3RvciwgdGhpcy5fd29ya2luZ1ZlY3Rvcik7Cisg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siTWF0cml4Il0uQ29tcG9zZVRvUmVmKHRoaXMuX29uZVZlY3RvciwgdGhpcy5yb3RhdGlvblF1
YXRlcm5pb24sIHRoaXMuX3dvcmtpbmdWZWN0b3IsIHRoaXMuX2RldmljZVRvV29ybGQpOworICAg
ICAgICAgICAgLy8gQWRkIHRyYW5zbGF0aW9uIGZyb20gYW5jaG9yIHBvc2l0aW9uCisgICAgICAg
ICAgICB0aGlzLl9kZXZpY2VUb1dvcmxkLmdldFRyYW5zbGF0aW9uVG9SZWYodGhpcy5fd29ya2lu
Z1ZlY3Rvcik7CisgICAgICAgICAgICB0aGlzLl93b3JraW5nVmVjdG9yLmFkZEluUGxhY2UodGhp
cy5wb3NpdGlvbik7CisgICAgICAgICAgICB0aGlzLl93b3JraW5nVmVjdG9yLnN1YnRyYWN0SW5Q
bGFjZSh0aGlzLl9jYWNoZS5wb3NpdGlvbik7CisgICAgICAgICAgICB0aGlzLl9kZXZpY2VUb1dv
cmxkLnNldFRyYW5zbGF0aW9uKHRoaXMuX3dvcmtpbmdWZWN0b3IpOworICAgICAgICAgICAgLy8g
U2V0IGFuIGludmVydGVkIG1hdHJpeCB0byBiZSB1c2VkIHdoZW4gdXBkYXRpbmcgdGhlIGNhbWVy
YQorICAgICAgICAgICAgdGhpcy5fZGV2aWNlVG9Xb3JsZC5pbnZlcnRUb1JlZih0aGlzLl93b3Js
ZFRvRGV2aWNlKTsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZ2FtZXBhZCB0byBlbnN1cmUg
dGhlIG1lc2ggaXMgdXBkYXRlZCBvbiB0aGUgc2FtZSBmcmFtZSBhcyBjYW1lcmEKKyAgICAgICAg
ICAgIHRoaXMuY29udHJvbGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoY29udHJvbGxlcikgeworICAg
ICAgICAgICAgICAgIGNvbnRyb2xsZXIuX2RldmljZVRvV29ybGQuY29weUZyb20oX3RoaXMuX2Rl
dmljZVRvV29ybGQpOworICAgICAgICAgICAgICAgIF90aGlzLl9jb3JyZWN0UG9zaXRpb25JZk5v
dFRyYWNrUG9zaXRpb24oY29udHJvbGxlci5fZGV2aWNlVG9Xb3JsZCk7CisgICAgICAgICAgICAg
ICAgY29udHJvbGxlci51cGRhdGUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
ICAgIGlmICghaWdub3JlUGFyZW50Q2xhc3MpIHsKKyAgICAgICAgICAgIF9zdXBlci5wcm90b3R5
cGUuX3VwZGF0ZUNhY2hlLmNhbGwodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy51cGRh
dGVDYWNoZUNhbGxlZCA9IGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRlbgor
ICAgICAqIEdldCBjdXJyZW50IGRldmljZSBwb3NpdGlvbiBpbiBiYWJ5bG9uIHdvcmxkCisgICAg
ICovCisgICAgV2ViVlJGcmVlQ2FtZXJhLnByb3RvdHlwZS5fY29tcHV0ZURldmljZVBvc2l0aW9u
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYodGhp
cy5fZGV2aWNlUm9vbVBvc2l0aW9uLCB0aGlzLl9kZXZpY2VUb1dvcmxkLCB0aGlzLmRldmljZVBv
c2l0aW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgZGV2
aWNlIHBvc2l0aW9uIGFuZCByb3RhdGlvbiBpbiB0aGUgYmFieWxvbiB3b3JsZAorICAgICAqLwor
ICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB0aGlzLl9jb21wdXRlRGV2aWNlUG9zaXRpb24oKTsKKyAgICAgICAgLy8gR2V0IGN1cnJl
bnQgZGV2aWNlIHJvdGF0aW9uIGluIGJhYnlsb24gd29ybGQKKyAgICAgICAgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdHJpeCJdLkZyb21RdWF0ZXJu
aW9uVG9SZWYodGhpcy5fZGV2aWNlUm9vbVJvdGF0aW9uUXVhdGVybmlvbiwgdGhpcy5fd29ya2lu
Z01hdHJpeCk7CisgICAgICAgIHRoaXMuX3dvcmtpbmdNYXRyaXgubXVsdGlwbHlUb1JlZih0aGlz
Ll9kZXZpY2VUb1dvcmxkLCB0aGlzLl93b3JraW5nTWF0cml4KTsKKyAgICAgICAgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlF1YXRlcm5pb24iXS5Gcm9t
Um90YXRpb25NYXRyaXhUb1JlZih0aGlzLl93b3JraW5nTWF0cml4LCB0aGlzLmRldmljZVJvdGF0
aW9uUXVhdGVybmlvbik7CisgICAgICAgIGlmICh0aGlzLl9wb3NlU2V0KSB7CisgICAgICAgICAg
ICB0aGlzLm9uUG9zZVVwZGF0ZWRGcm9tRGV2aWNlT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMo
bnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0
aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAgKiBHZXRzIHRoZSB2
aWV3IG1hdHJpeCBvZiB0aGlzIGNhbWVyYSAoQWx3YXlzIHNldCB0byBpZGVudGl0eSBhcyBsZWZ0
IGFuZCByaWdodCBleWUgY2FtZXJhcyBjb250YWluIHRoZSBhY3R1YWwgdmlldyBtYXRyaXgpCisg
ICAgICogQHJldHVybnMgYW4gaWRlbnRpdHkgbWF0cml4CisgICAgICovCisgICAgV2ViVlJGcmVl
Q2FtZXJhLnByb3RvdHlwZS5fZ2V0Vmlld01hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJN
YXRyaXgiXS5JZGVudGl0eSgpOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgYnkgdGhlIHR3byBSSUcgY2FtZXJhcy4KKyAgICAgKiAndGhpcycgaXMgdGhl
IGxlZnQgb3IgcmlnaHQgY2FtZXJhIChhbmQgTk9UICghISEpIHRoZSBXZWJWUkZyZWVDYW1lcmEg
aW5zdGFuY2UpCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIFdlYlZSRnJlZUNhbWVyYS5w
cm90b3R5cGUuX2dldFdlYlZSVmlld01hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8g
VXBkYXRlIHRoZSBwYXJlbnQgY2FtZXJhIHByaW9yIHRvIHVzaW5nIGEgY2hpbGQgY2FtZXJhIHRv
IGF2b2lkIGRlc3luY2hyb25pemF0aW9uCisgICAgICAgIHZhciBwYXJlbnRDYW1lcmEgPSB0aGlz
Ll9jYW1lcmFSaWdQYXJhbXNbInBhcmVudENhbWVyYSJdOworICAgICAgICBwYXJlbnRDYW1lcmEu
X3VwZGF0ZUNhY2hlKCk7CisgICAgICAgIC8vV2ViVlIgMS4xCisgICAgICAgIHZhciB2aWV3QXJy
YXkgPSB0aGlzLl9jYW1lcmFSaWdQYXJhbXNbImxlZnQiXSA/IHRoaXMuX2NhbWVyYVJpZ1BhcmFt
c1siZnJhbWVEYXRhIl0ubGVmdFZpZXdNYXRyaXggOiB0aGlzLl9jYW1lcmFSaWdQYXJhbXNbImZy
YW1lRGF0YSJdLnJpZ2h0Vmlld01hdHJpeDsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdHJpeCJdLkZyb21BcnJheVRvUmVmKHZpZXdB
cnJheSwgMCwgdGhpcy5fd2VidnJWaWV3TWF0cml4KTsKKyAgICAgICAgaWYgKCF0aGlzLmdldFNj
ZW5lKCkudXNlUmlnaHRIYW5kZWRTeXN0ZW0pIHsKKyAgICAgICAgICAgIHRoaXMuX3dlYnZyVmll
d01hdHJpeC50b2dnbGVNb2RlbE1hdHJpeEhhbmRJblBsYWNlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gdXBkYXRlIHRoZSBjYW1lcmEgcm90YXRpb24gbWF0cml4CisgICAgICAgIHRoaXMuX3dl
YnZyVmlld01hdHJpeC5nZXRSb3RhdGlvbk1hdHJpeFRvUmVmKHRoaXMuX2NhbWVyYVJvdGF0aW9u
TWF0cml4KTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHRoaXMuX3JlZmVy
ZW5jZVBvaW50LCB0aGlzLl9jYW1lcmFSb3RhdGlvbk1hdHJpeCwgdGhpcy5fdHJhbnNmb3JtZWRS
ZWZlcmVuY2VQb2ludCk7CisgICAgICAgIC8vIENvbXB1dGluZyB0YXJnZXQgYW5kIGZpbmFsIG1h
dHJpeAorICAgICAgICB0aGlzLnBvc2l0aW9uLmFkZFRvUmVmKHRoaXMuX3RyYW5zZm9ybWVkUmVm
ZXJlbmNlUG9pbnQsIHRoaXMuX2N1cnJlbnRUYXJnZXQpOworICAgICAgICAvLyBzaG91bGQgdGhl
IHZpZXcgbWF0cml4IGJlIHVwZGF0ZWQgd2l0aCBzY2FsZSBhbmQgcG9zaXRpb24gb2Zmc2V0Pwor
ICAgICAgICBpZiAocGFyZW50Q2FtZXJhLmRldmljZVNjYWxlRmFjdG9yICE9PSAxKSB7CisgICAg
ICAgICAgICB0aGlzLl93ZWJ2clZpZXdNYXRyaXguaW52ZXJ0KCk7CisgICAgICAgICAgICAvLyBz
Y2FsZSB0aGUgcG9zaXRpb24sIGlmIHNldAorICAgICAgICAgICAgaWYgKHBhcmVudENhbWVyYS5k
ZXZpY2VTY2FsZUZhY3RvcikgeworICAgICAgICAgICAgICAgIHRoaXMuX3dlYnZyVmlld01hdHJp
eC5tdWx0aXBseUF0SW5kZXgoMTIsIHBhcmVudENhbWVyYS5kZXZpY2VTY2FsZUZhY3Rvcik7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fd2VidnJWaWV3TWF0cml4Lm11bHRpcGx5QXRJbmRleCgxMywg
cGFyZW50Q2FtZXJhLmRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgICAgICB0aGlzLl93
ZWJ2clZpZXdNYXRyaXgubXVsdGlwbHlBdEluZGV4KDE0LCBwYXJlbnRDYW1lcmEuZGV2aWNlU2Nh
bGVGYWN0b3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fd2VidnJWaWV3TWF0
cml4LmludmVydCgpOworICAgICAgICB9CisgICAgICAgIC8vIFJlbW92ZSB0cmFuc2xhdGlvbiBm
cm9tIDZkb2YgaGVhZHNldCBpZiB0cmFja3Bvc2l0aW9uIGlzIHNldCB0byBmYWxzZQorICAgICAg
ICBwYXJlbnRDYW1lcmEuX2NvcnJlY3RQb3NpdGlvbklmTm90VHJhY2tQb3NpdGlvbih0aGlzLl93
ZWJ2clZpZXdNYXRyaXgsIHRydWUpOworICAgICAgICBwYXJlbnRDYW1lcmEuX3dvcmxkVG9EZXZp
Y2UubXVsdGlwbHlUb1JlZih0aGlzLl93ZWJ2clZpZXdNYXRyaXgsIHRoaXMuX3dlYnZyVmlld01h
dHJpeCk7CisgICAgICAgIC8vIENvbXB1dGUgZ2xvYmFsIHBvc2l0aW9uCisgICAgICAgIHRoaXMu
X3dvcmtpbmdNYXRyaXggPSB0aGlzLl93b3JraW5nTWF0cml4IHx8IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRyaXgiXS5JZGVudGl0eSgpOworICAg
ICAgICB0aGlzLl93ZWJ2clZpZXdNYXRyaXguaW52ZXJ0VG9SZWYodGhpcy5fd29ya2luZ01hdHJp
eCk7CisgICAgICAgIHRoaXMuX3dvcmtpbmdNYXRyaXgubXVsdGlwbHlUb1JlZihwYXJlbnRDYW1l
cmEuZ2V0V29ybGRNYXRyaXgoKSwgdGhpcy5fd29ya2luZ01hdHJpeCk7CisgICAgICAgIHRoaXMu
X3dvcmtpbmdNYXRyaXguZ2V0VHJhbnNsYXRpb25Ub1JlZih0aGlzLl9nbG9iYWxQb3NpdGlvbik7
CisgICAgICAgIHRoaXMuX21hcmtTeW5jZWRXaXRoUGFyZW50KCk7CisgICAgICAgIHJldHVybiB0
aGlzLl93ZWJ2clZpZXdNYXRyaXg7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFdl
YlZSRnJlZUNhbWVyYS5wcm90b3R5cGUuX2dldFdlYlZSUHJvamVjdGlvbk1hdHJpeCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdmFyIHBhcmVudENhbWVyYSA9IHRoaXMucGFyZW50OworICAgICAg
ICBwYXJlbnRDYW1lcmEuX3ZyRGV2aWNlLmRlcHRoTmVhciA9IHBhcmVudENhbWVyYS5taW5aOwor
ICAgICAgICBwYXJlbnRDYW1lcmEuX3ZyRGV2aWNlLmRlcHRoRmFyID0gcGFyZW50Q2FtZXJhLm1h
eFo7CisgICAgICAgIHZhciBwcm9qZWN0aW9uQXJyYXkgPSB0aGlzLl9jYW1lcmFSaWdQYXJhbXNb
ImxlZnQiXSA/IHRoaXMuX2NhbWVyYVJpZ1BhcmFtc1siZnJhbWVEYXRhIl0ubGVmdFByb2plY3Rp
b25NYXRyaXggOiB0aGlzLl9jYW1lcmFSaWdQYXJhbXNbImZyYW1lRGF0YSJdLnJpZ2h0UHJvamVj
dGlvbk1hdHJpeDsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIk1hdHJpeCJdLkZyb21BcnJheVRvUmVmKHByb2plY3Rpb25BcnJheSwgMCwg
dGhpcy5fcHJvamVjdGlvbk1hdHJpeCk7CisgICAgICAgIC8vYmFieWxvbiBjb21wYXRpYmxlIG1h
dHJpeAorICAgICAgICBpZiAoIXRoaXMuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkg
eworICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbk1hdHJpeC50b2dnbGVQcm9qZWN0aW9uTWF0
cml4SGFuZEluUGxhY2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fcHJvamVj
dGlvbk1hdHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBjb250
cm9sbGVycyBhbmQgdGhlaXIgbWVzaGVzCisgICAgICovCisgICAgV2ViVlJGcmVlQ2FtZXJhLnBy
b3RvdHlwZS5pbml0Q29udHJvbGxlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIHRoaXMuY29udHJvbGxlcnMgPSBbXTsKKyAgICAgICAgdmFyIG1h
bmFnZXIgPSB0aGlzLmdldFNjZW5lKCkuZ2FtZXBhZE1hbmFnZXI7CisgICAgICAgIHRoaXMuX29u
R2FtZXBhZERpc2Nvbm5lY3RlZE9ic2VydmVyID0gbWFuYWdlci5vbkdhbWVwYWREaXNjb25uZWN0
ZWRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZ2FtZXBhZCkgeworICAgICAgICAgICAgaWYgKGdh
bWVwYWQudHlwZSA9PT0gX0dhbWVwYWRzX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siR2FtZXBhZCJdLlBPU0VfRU5BQkxFRCkgeworICAgICAgICAgICAgICAgIHZhciB3ZWJW
ckNvbnRyb2xsZXIgPSBnYW1lcGFkOworICAgICAgICAgICAgICAgIGlmICh3ZWJWckNvbnRyb2xs
ZXIuZGVmYXVsdE1vZGVsKSB7CisgICAgICAgICAgICAgICAgICAgIHdlYlZyQ29udHJvbGxlci5k
ZWZhdWx0TW9kZWwuc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICh3ZWJWckNvbnRyb2xsZXIuaGFuZCA9PT0gInJpZ2h0IikgeworICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5fcmlnaHRDb250cm9sbGVyID0gbnVsbDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHdlYlZyQ29udHJvbGxlci5oYW5kID09PSAibGVm
dCIpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2xlZnRDb250cm9sbGVyID0gbnVsbDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXJJbmRleCA9
IF90aGlzLmNvbnRyb2xsZXJzLmluZGV4T2Yod2ViVnJDb250cm9sbGVyKTsKKyAgICAgICAgICAg
ICAgICBpZiAoY29udHJvbGxlckluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBf
dGhpcy5jb250cm9sbGVycy5zcGxpY2UoY29udHJvbGxlckluZGV4LCAxKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9vbkdhbWVw
YWRDb25uZWN0ZWRPYnNlcnZlciA9IG1hbmFnZXIub25HYW1lcGFkQ29ubmVjdGVkT2JzZXJ2YWJs
ZS5hZGQoZnVuY3Rpb24gKGdhbWVwYWQpIHsKKyAgICAgICAgICAgIGlmIChnYW1lcGFkLnR5cGUg
PT09IF9HYW1lcGFkc19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkdhbWVw
YWQiXS5QT1NFX0VOQUJMRUQpIHsKKyAgICAgICAgICAgICAgICB2YXIgd2ViVnJDb250cm9sbGVy
XzEgPSBnYW1lcGFkOworICAgICAgICAgICAgICAgIGlmICghX3RoaXMud2ViVlJPcHRpb25zLnRy
YWNrUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgd2ViVnJDb250cm9sbGVyXzEuX2Rp
c2FibGVUcmFja1Bvc2l0aW9uKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siVmVjdG9yMyJdKHdlYlZyQ29udHJvbGxlcl8xLmhhbmQgPT0gImxlZnQi
ID8gLTAuMTUgOiAwLjE1LCAtMC41LCAwLjI1KSk7CisgICAgICAgICAgICAgICAgICAgIC8vIENh
Y2hlIG11c3QgYmUgdXBkYXRlZCBiZWZvcmUgcmVuZGVyaW5nIGNvbnRyb2xsZXJzIHRvIGF2b2lk
IHRoZW0gYmVpbmcgb25lIGZyYW1lIGJlaGluZAorICAgICAgICAgICAgICAgICAgICBpZiAoIV90
aGlzLl91cGRhdGVDYWNoZVdoZW5UcmFja2luZ0Rpc2FibGVkT2JzZXJ2ZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVDYWNoZVdoZW5UcmFja2luZ0Rpc2FibGVkT2Jz
ZXJ2ZXIgPSBfdGhpcy5fc2NlbmUub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3VwZGF0ZUNhY2hlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3ZWJWckNvbnRyb2xsZXJfMS5kZXZpY2VT
Y2FsZUZhY3RvciA9IF90aGlzLmRldmljZVNjYWxlRmFjdG9yOworICAgICAgICAgICAgICAgIHdl
YlZyQ29udHJvbGxlcl8xLl9kZXZpY2VUb1dvcmxkLmNvcHlGcm9tKF90aGlzLl9kZXZpY2VUb1dv
cmxkKTsKKyAgICAgICAgICAgICAgICBfdGhpcy5fY29ycmVjdFBvc2l0aW9uSWZOb3RUcmFja1Bv
c2l0aW9uKHdlYlZyQ29udHJvbGxlcl8xLl9kZXZpY2VUb1dvcmxkKTsKKyAgICAgICAgICAgICAg
ICBpZiAoX3RoaXMud2ViVlJPcHRpb25zLmNvbnRyb2xsZXJNZXNoZXMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHdlYlZyQ29udHJvbGxlcl8xLmRlZmF1bHRNb2RlbCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgd2ViVnJDb250cm9sbGVyXzEuZGVmYXVsdE1vZGVsLnNldEVuYWJsZWQo
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIHRoZSBtZXNoZXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHdlYlZyQ29udHJvbGxlcl8xLmluaXRDb250cm9sbGVyTWVzaChfdGhpcy5n
ZXRTY2VuZSgpLCBmdW5jdGlvbiAobG9hZGVkTWVzaCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvYWRlZE1lc2guc2NhbGluZy5zY2FsZUluUGxhY2UoX3RoaXMuZGV2aWNlU2NhbGVG
YWN0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm9uQ29udHJvbGxlck1l
c2hMb2FkZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh3ZWJWckNvbnRyb2xsZXJfMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLndlYlZST3B0aW9ucy5kZWZhdWx0
TGlnaHRpbmdPbkNvbnRyb2xsZXJzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghX3RoaXMuX2xpZ2h0T25Db250cm9sbGVycykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX3RoaXMuX2xpZ2h0T25Db250cm9sbGVycyA9IG5ldyBfTGlnaHRzX2hl
bWlzcGhlcmljTGlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siSGVtaXNwaGVyaWNM
aWdodCJdKCJ2ckNvbnRyb2xsZXJzTGlnaHQiLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3RvcjMiXSgwLCAxLCAwKSwgX3RoaXMuZ2V0U2Nl
bmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2YXRlTGlnaHRPblN1Yk1lc2hlc18xID0gZnVuY3Rp
b24gKG1lc2gsIGxpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgY2hpbGRyZW4gPSBtZXNoLmdldENoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoICE9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChm
dW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaWdodC5pbmNsdWRlZE9ubHlNZXNoZXMucHVzaChtZXNoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGVMaWdodE9uU3ViTWVzaGVzXzEo
bWVzaCwgbGlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fbGlnaHRPbkNvbnRyb2xsZXJzLmluY2x1ZGVkT25seU1lc2hlcy5wdXNoKGxvYWRlZE1lc2gp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZUxpZ2h0T25TdWJNZXNo
ZXNfMShsb2FkZWRNZXNoLCBfdGhpcy5fbGlnaHRPbkNvbnRyb2xsZXJzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3ZWJWckNv
bnRyb2xsZXJfMS5hdHRhY2hUb1Bvc2VDb250cm9sbGVkQ2FtZXJhKF90aGlzKTsKKyAgICAgICAg
ICAgICAgICAvLyBzaW5jZSB0aGlzIGlzIGFzeW5jIC0gc2FuaXR5IGNoZWNrLiBJcyB0aGUgY29u
dHJvbGxlciBhbHJlYWR5IHN0b3JlZD8KKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY29udHJv
bGxlcnMuaW5kZXhPZih3ZWJWckNvbnRyb2xsZXJfMSkgPT09IC0xKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vYWRkIHRvIHRoZSBjb250cm9sbGVycyBhcnJheQorICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5jb250cm9sbGVycy5wdXNoKHdlYlZyQ29udHJvbGxlcl8xKTsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gRm9yY2VkIHRvIGFkZCBzb21lIGNvbnRyb2wgY29kZSBmb3IgVml2ZSBhcyBp
dCBkb2Vzbid0IGFsd2F5cyBmaWxsIHByb3Blcmx5IHRoZSAiaGFuZCIgcHJvcGVydHkKKyAgICAg
ICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzLCBib3RoIGNvbnRyb2xsZXJzIGFyZSBzZXQgY29y
cmVjdGx5IChsZWZ0IGFuZCByaWdodCksIHNvbWV0aW1lcyBub25lLCBzb21ldGltZXMgb25seSBv
bmUgb2YgdGhlbS4uLgorICAgICAgICAgICAgICAgICAgICAvLyBTbyB3ZSdyZSBvdmVycmlkaW5n
IHNldHRpbmcgbGVmdCAmIHJpZ2h0IG1hbnVhbGx5IHRvIGJlIHN1cmUKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGZpcnN0Vml2ZVdhbmREZXRlY3RlZCA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF90aGlzLmNvbnRyb2xsZXJzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY29udHJvbGxlcnNbaV0uY29udHJv
bGxlclR5cGUgPT09IF9HYW1lcGFkc19Db250cm9sbGVyc19wb3NlRW5hYmxlZENvbnRyb2xsZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZSJd
LlZJVkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Vml2ZVdhbmRE
ZXRlY3RlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFZpdmVXYW5k
RGV0ZWN0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5j
b250cm9sbGVyc1tpXS5oYW5kID0gImxlZnQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX3RoaXMuY29udHJvbGxlcnNbaV0uaGFuZCA9ICJyaWdodCI7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vZGlkIHdlIGZpbmQgZW5v
dWdoIGNvbnRyb2xsZXJzPyBHcmVhdCEgbGV0IHRoZSBkZXZlbG9wZXIga25vdy4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKF90aGlzLmNvbnRyb2xsZXJzLmxlbmd0aCA+PSAyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5vbkNvbnRyb2xsZXJzQXR0YWNoZWRPYnNlcnZhYmxlLm5v
dGlmeU9ic2VydmVycyhfdGhpcy5jb250cm9sbGVycyk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07Cisg
ICAgcmV0dXJuIFdlYlZSRnJlZUNhbWVyYTsKK30oX0NhbWVyYXNfZnJlZUNhbWVyYV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJGcmVlQ2FtZXJhIl0pKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9DYW1lcmFzL1hSL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL1hSL2luZGV4LnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFdlYlhSQ2Ft
ZXJhLCBXZWJYUkVudGVyRXhpdFVJQnV0dG9uLCBXZWJYUkVudGVyRXhpdFVJT3B0aW9ucywgV2Vi
WFJFbnRlckV4aXRVSSwgV2ViWFJTdGF0ZSwgV2ViWFJFeHBlcmllbmNlSGVscGVyLCBXZWJYUklu
cHV0LCBXZWJYUkNvbnRyb2xsZXJUZWxlcG9ydGF0aW9uLCBXZWJYUkNvbnRyb2xsZXJQb2ludGVy
U2VsZWN0aW9uLCBXZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciwgV2ViWFJDb250cm9sbGVyLCBX
ZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMsIFdlYlhSU2Vzc2lvbk1hbmFnZXIgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJYUkNhbWVyYV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUkNhbWVy
YSAqLyAiLi9DYW1lcmFzL1hSL3dlYlhSQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldl
YlhSQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfd2ViWFJDYW1lcmFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siV2ViWFJDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfd2ViWFJFbnRlckV4aXRVSV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUkVudGVyRXhpdFVJICovICIuL0NhbWVyYXMv
WFIvd2ViWFJFbnRlckV4aXRVSS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkVudGVyRXhp
dFVJQnV0dG9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfd2ViWFJFbnRlckV4aXRVSV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJXZWJYUkVudGVyRXhpdFVJQnV0dG9uIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIldlYlhSRW50ZXJFeGl0VUlPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfd2ViWFJFbnRlckV4aXRVSV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJXZWJY
UkVudGVyRXhpdFVJT3B0aW9ucyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkVudGVy
RXhpdFVJIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfd2ViWFJFbnRlckV4aXRVSV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJXZWJYUkVudGVyRXhpdFVJIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3dlYlhSRXhwZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUkV4cGVyaWVuY2VIZWxw
ZXIgKi8gIi4vQ2FtZXJhcy9YUi93ZWJYUkV4cGVyaWVuY2VIZWxwZXIudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiV2ViWFJTdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3dlYlhSRXhwZXJpZW5j
ZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJXZWJYUlN0YXRlIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSRXhwZXJpZW5jZUhlbHBlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX3dlYlhSRXhwZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJXZWJYUkV4cGVyaWVuY2VIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfd2ViWFJJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi93ZWJYUklucHV0ICovICIuL0NhbWVyYXMvWFIvd2ViWFJJbnB1dC50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJXZWJYUklucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfd2Vi
WFJJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJXZWJYUklucHV0Il07IH0pOwor
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb25f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
d2ViWFJDb250cm9sbGVyVGVsZXBvcnRhdGlvbiAqLyAiLi9DYW1lcmFzL1hSL3dlYlhSQ29udHJv
bGxlclRlbGVwb3J0YXRpb24udHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJDb250cm9sbGVy
VGVsZXBvcnRhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3dlYlhSQ29udHJvbGxlclRlbGVw
b3J0YXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siV2ViWFJDb250cm9sbGVyVGVs
ZXBvcnRhdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJYUkNvbnRy
b2xsZXJQb2ludGVyU2VsZWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3dlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb24gKi8g
Ii4vQ2FtZXJhcy9YUi93ZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uLnRzIik7CisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIldlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb24iLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF93ZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIldlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb24iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJDb250cm9sbGVyTW9kZWxMb2FkZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2Vi
WFJDb250cm9sbGVyTW9kZWxMb2FkZXIgKi8gIi4vQ2FtZXJhcy9YUi93ZWJYUkNvbnRyb2xsZXJN
b2RlbExvYWRlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkNvbnRyb2xsZXJNb2RlbExv
YWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3dlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIldlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlYlhSQ29udHJvbGxlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUkNv
bnRyb2xsZXIgKi8gIi4vQ2FtZXJhcy9YUi93ZWJYUkNvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiV2ViWFJDb250cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfd2ViWFJDb250
cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIldlYlhSQ29udHJvbGxlciJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJYUk1hbmFnZWRPdXRwdXRDYW52YXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
d2ViWFJNYW5hZ2VkT3V0cHV0Q2FudmFzICovICIuL0NhbWVyYXMvWFIvd2ViWFJNYW5hZ2VkT3V0
cHV0Q2FudmFzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSTWFuYWdlZE91dHB1dENhbnZh
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3dlYlhSTWFuYWdlZE91dHB1dENhbnZhc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fWyJXZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJTZXNzaW9uTWFuYWdlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUlNlc3Np
b25NYW5hZ2VyICovICIuL0NhbWVyYXMvWFIvd2ViWFJTZXNzaW9uTWFuYWdlci50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJXZWJYUlNlc3Npb25NYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
d2ViWFJTZXNzaW9uTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJYUlNl
c3Npb25NYW5hZ2VyIl07IH0pOworCisKKworCisKKworCisKKworCisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vQ2FtZXJhcy9YUi93ZWJYUkNhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9YUi93ZWJYUkNhbWVy
YS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBXZWJYUkNhbWVyYSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJXZWJYUkNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViWFJDYW1lcmE7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1
bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0Nh
bWVyYXMvY2FtZXJhICovICIuL0NhbWVyYXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0NhbWVyYXNfZnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9mcmVlQ2FtZXJhICovICIu
L0NhbWVyYXMvZnJlZUNhbWVyYS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1l
cmFzX3RhcmdldENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy90YXJnZXRDYW1lcmEgKi8gIi4vQ2FtZXJhcy90
YXJnZXRDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
aWV3cG9ydF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vTWF0aHMvbWF0aC52aWV3cG9ydCAqLyAiLi9NYXRocy9tYXRoLnZpZXdwb3J0
LnRzIik7CisKKworCisKKworCisvKioKKyAqIFdlYlhSIENhbWVyYSB3aGljaCBob2xkcyB0aGUg
dmlld3MgZm9yIHRoZSB4clNlc3Npb24KKyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNv
bS9ob3dfdG8vd2VieHIKKyAqLwordmFyIFdlYlhSQ2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKFdlYlhSQ2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0
ZXMgYSBuZXcgd2ViWFJDYW1lcmEsIHRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IGF0IHRoZSBjYW1l
cmEgYWZ0ZXIgaXQgaGFzIGJlZW4gdXBkYXRlZCBieSB0aGUgeHJTZXNzaW9uTWFuYWdlcgorICAg
ICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgdGhlIHNjZW5lIHRvIGFkZCB0aGUgY2FtZXJhIHRvCisgICAgICovCisgICAgZnVuY3Rpb24g
V2ViWFJDYW1lcmEobmFtZSwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNh
bGwodGhpcywgbmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKSB8fCB0aGlzOworICAgICAgICAvLyBJbml0
aWFsIGNhbWVyYSBjb25maWd1cmF0aW9uCisgICAgICAgIF90aGlzLm1pblogPSAwLjE7CisgICAg
ICAgIF90aGlzLnJvdGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIF90aGlz
LmNhbWVyYVJpZ01vZGUgPSBfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siQ2FtZXJhIl0uUklHX01PREVfQ1VTVE9NOworICAgICAgICBfdGhpcy51cGRhdGVVcFZl
Y3RvckZyb21Sb3RhdGlvbiA9IHRydWU7CisgICAgICAgIF90aGlzLl91cGRhdGVOdW1iZXJPZlJp
Z0NhbWVyYXMoMSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgV2ViWFJDYW1l
cmEucHJvdG90eXBlLl91cGRhdGVOdW1iZXJPZlJpZ0NhbWVyYXMgPSBmdW5jdGlvbiAodmlld0Nv
dW50KSB7CisgICAgICAgIGlmICh2aWV3Q291bnQgPT09IHZvaWQgMCkgeyB2aWV3Q291bnQgPSAx
OyB9CisgICAgICAgIHdoaWxlICh0aGlzLnJpZ0NhbWVyYXMubGVuZ3RoIDwgdmlld0NvdW50KSB7
CisgICAgICAgICAgICB2YXIgbmV3Q2FtZXJhID0gbmV3IF9DYW1lcmFzX3RhcmdldENhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUYXJnZXRDYW1lcmEiXSgidmlldzogIiArIHRo
aXMucmlnQ2FtZXJhcy5sZW5ndGgsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybygpLCB0aGlzLmdldFNjZW5lKCkpOworICAgICAg
ICAgICAgbmV3Q2FtZXJhLm1pblogPSAwLjE7CisgICAgICAgICAgICBuZXdDYW1lcmEucGFyZW50
ID0gdGhpczsKKyAgICAgICAgICAgIG5ld0NhbWVyYS5yb3RhdGlvblF1YXRlcm5pb24gPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlF1YXRlcm5p
b24iXSgpOworICAgICAgICAgICAgbmV3Q2FtZXJhLnVwZGF0ZVVwVmVjdG9yRnJvbVJvdGF0aW9u
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMucmlnQ2FtZXJhcy5wdXNoKG5ld0NhbWVyYSk7Cisg
ICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHRoaXMucmlnQ2FtZXJhcy5sZW5ndGggPiB2aWV3Q291
bnQpIHsKKyAgICAgICAgICAgIHZhciByZW1vdmVkQ2FtZXJhID0gdGhpcy5yaWdDYW1lcmFzLnBv
cCgpOworICAgICAgICAgICAgaWYgKHJlbW92ZWRDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICBy
ZW1vdmVkQ2FtZXJhLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBXZWJYUkNhbWVyYS5wcm90b3R5cGUuX3VwZGF0ZUZv
ckR1YWxFeWVEZWJ1Z2dpbmcgPSBmdW5jdGlvbiAocHVwaWxEaXN0YW5jZSkgeworICAgICAgICBp
ZiAocHVwaWxEaXN0YW5jZSA9PT0gdm9pZCAwKSB7IHB1cGlsRGlzdGFuY2UgPSAwLjAxOyB9Cisg
ICAgICAgIC8vIENyZWF0ZSBpbml0aWFsIGNhbWVyYSByaWdzCisgICAgICAgIHRoaXMuX3VwZGF0
ZU51bWJlck9mUmlnQ2FtZXJhcygyKTsKKyAgICAgICAgdGhpcy5yaWdDYW1lcmFzWzBdLnZpZXdw
b3J0ID0gbmV3IF9NYXRoc19tYXRoX3ZpZXdwb3J0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIlZpZXdwb3J0Il0oMCwgMCwgMC41LCAxLjApOworICAgICAgICB0aGlzLnJpZ0NhbWVyYXNb
MF0ucG9zaXRpb24ueCA9IC1wdXBpbERpc3RhbmNlIC8gMjsKKyAgICAgICAgdGhpcy5yaWdDYW1l
cmFzWzBdLm91dHB1dFJlbmRlclRhcmdldCA9IG51bGw7CisgICAgICAgIHRoaXMucmlnQ2FtZXJh
c1sxXS52aWV3cG9ydCA9IG5ldyBfTWF0aHNfbWF0aF92aWV3cG9ydF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJWaWV3cG9ydCJdKDAuNSwgMCwgMC41LCAxLjApOworICAgICAgICB0aGlz
LnJpZ0NhbWVyYXNbMV0ucG9zaXRpb24ueCA9IHB1cGlsRGlzdGFuY2UgLyAyOworICAgICAgICB0
aGlzLnJpZ0NhbWVyYXNbMV0ub3V0cHV0UmVuZGVyVGFyZ2V0ID0gbnVsbDsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGNhbWVyYXMgcG9zaXRpb24gZnJvbSB0aGUgY3VycmVu
dCBwb3NlIGluZm9ybWF0aW9uIG9mIHRoZSAgWFIgc2Vzc2lvbgorICAgICAqIEBwYXJhbSB4clNl
c3Npb25NYW5hZ2VyIHRoZSBzZXNzaW9uIGNvbnRhaW5pbmcgcG9zZSBpbmZvcm1hdGlvbgorICAg
ICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGNhbWVyYSBoYXMgYmVlbiB1cGRhdGVkLCBmYWxzZSBp
ZiB0aGUgc2Vzc2lvbiBkaWQgbm90IGNvbnRhaW4gcG9zZSBvciBmcmFtZSBkYXRhCisgICAgICov
CisgICAgV2ViWFJDYW1lcmEucHJvdG90eXBlLnVwZGF0ZUZyb21YUlNlc3Npb25NYW5hZ2VyID0g
ZnVuY3Rpb24gKHhyU2Vzc2lvbk1hbmFnZXIpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgLy8gRW5zdXJlIGFsbCBmcmFtZSBkYXRhIGlzIGF2YWlsYWJsZQorICAgICAgICBp
ZiAoIXhyU2Vzc2lvbk1hbmFnZXIuY3VycmVudEZyYW1lIHx8ICF4clNlc3Npb25NYW5hZ2VyLmN1
cnJlbnRGcmFtZS5nZXRWaWV3ZXJQb3NlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHBvc2UgPSB4clNlc3Npb25NYW5hZ2VyLmN1cnJlbnRGcmFt
ZS5nZXRWaWV3ZXJQb3NlKHhyU2Vzc2lvbk1hbmFnZXIucmVmZXJlbmNlU3BhY2UpOworICAgICAg
ICBpZiAoIXBvc2UgfHwgIXBvc2UudHJhbnNmb3JtIHx8ICFwb3NlLnRyYW5zZm9ybS5tYXRyaXgp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAvLyBVcGRh
dGUgdGhlIHBhcmVudCBjYW1lcmFzIG1hdHJpeAorICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uRnJvbUZsb2F0MzJBcnJheVRv
UmVmU2NhbGVkKHBvc2UudHJhbnNmb3JtLm1hdHJpeCwgMCwgMSwgV2ViWFJDYW1lcmEuX1RtcE1h
dHJpeCk7CisgICAgICAgIGlmICghdGhpcy5fc2NlbmUudXNlUmlnaHRIYW5kZWRTeXN0ZW0pIHsK
KyAgICAgICAgICAgIFdlYlhSQ2FtZXJhLl9UbXBNYXRyaXgudG9nZ2xlTW9kZWxNYXRyaXhIYW5k
SW5QbGFjZSgpOworICAgICAgICB9CisgICAgICAgIFdlYlhSQ2FtZXJhLl9UbXBNYXRyaXguZ2V0
VHJhbnNsYXRpb25Ub1JlZih0aGlzLnBvc2l0aW9uKTsKKyAgICAgICAgV2ViWFJDYW1lcmEuX1Rt
cE1hdHJpeC5nZXRSb3RhdGlvbk1hdHJpeFRvUmVmKFdlYlhSQ2FtZXJhLl9UbXBNYXRyaXgpOwor
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
UXVhdGVybmlvbiJdLkZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKFdlYlhSQ2FtZXJhLl9UbXBNYXRy
aXgsIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgdGhpcy5jb21wdXRlV29ybGRN
YXRyaXgoKTsKKyAgICAgICAgLy8gVXBkYXRlIGNhbWVyYSByaWdzCisgICAgICAgIHRoaXMuX3Vw
ZGF0ZU51bWJlck9mUmlnQ2FtZXJhcyhwb3NlLnZpZXdzLmxlbmd0aCk7CisgICAgICAgIHBvc2Uu
dmlld3MuZm9yRWFjaChmdW5jdGlvbiAodmlldywgaSkgeworICAgICAgICAgICAgLy8gVXBkYXRl
IHZpZXcvcHJvamVjdGlvbiBtYXRyaXgKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5Gcm9tRmxvYXQzMkFycmF5VG9S
ZWZTY2FsZWQodmlldy50cmFuc2Zvcm0ubWF0cml4LCAwLCAxLCBfdGhpcy5yaWdDYW1lcmFzW2ld
Ll9jb21wdXRlZFZpZXdNYXRyaXgpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLkZyb21GbG9hdDMyQXJyYXlUb1Jl
ZlNjYWxlZCh2aWV3LnByb2plY3Rpb25NYXRyaXgsIDAsIDEsIF90aGlzLnJpZ0NhbWVyYXNbaV0u
X3Byb2plY3Rpb25NYXRyaXgpOworICAgICAgICAgICAgaWYgKCFfdGhpcy5fc2NlbmUudXNlUmln
aHRIYW5kZWRTeXN0ZW0pIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5yaWdDYW1lcmFzW2ldLl9j
b21wdXRlZFZpZXdNYXRyaXgudG9nZ2xlTW9kZWxNYXRyaXhIYW5kSW5QbGFjZSgpOworICAgICAg
ICAgICAgICAgIF90aGlzLnJpZ0NhbWVyYXNbaV0uX3Byb2plY3Rpb25NYXRyaXgudG9nZ2xlUHJv
amVjdGlvbk1hdHJpeEhhbmRJblBsYWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBVcGRhdGUgdmlld3BvcnQKKyAgICAgICAgICAgIGlmICh4clNlc3Npb25NYW5hZ2VyLnNlc3Np
b24ucmVuZGVyU3RhdGUuYmFzZUxheWVyKSB7CisgICAgICAgICAgICAgICAgdmFyIHZpZXdwb3J0
ID0geHJTZXNzaW9uTWFuYWdlci5zZXNzaW9uLnJlbmRlclN0YXRlLmJhc2VMYXllci5nZXRWaWV3
cG9ydCh2aWV3KTsKKyAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSB4clNlc3Npb25NYW5hZ2Vy
LnNlc3Npb24ucmVuZGVyU3RhdGUuYmFzZUxheWVyLmZyYW1lYnVmZmVyV2lkdGg7CisgICAgICAg
ICAgICAgICAgdmFyIGhlaWdodCA9IHhyU2Vzc2lvbk1hbmFnZXIuc2Vzc2lvbi5yZW5kZXJTdGF0
ZS5iYXNlTGF5ZXIuZnJhbWVidWZmZXJIZWlnaHQ7CisgICAgICAgICAgICAgICAgX3RoaXMucmln
Q2FtZXJhc1tpXS52aWV3cG9ydC53aWR0aCA9IHZpZXdwb3J0LndpZHRoIC8gd2lkdGg7CisgICAg
ICAgICAgICAgICAgX3RoaXMucmlnQ2FtZXJhc1tpXS52aWV3cG9ydC5oZWlnaHQgPSB2aWV3cG9y
dC5oZWlnaHQgLyBoZWlnaHQ7CisgICAgICAgICAgICAgICAgX3RoaXMucmlnQ2FtZXJhc1tpXS52
aWV3cG9ydC54ID0gdmlld3BvcnQueCAvIHdpZHRoOworICAgICAgICAgICAgICAgIF90aGlzLnJp
Z0NhbWVyYXNbaV0udmlld3BvcnQueSA9IHZpZXdwb3J0LnkgLyBoZWlnaHQ7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBTZXQgY2FtZXJhcyB0byByZW5kZXIgdG8gdGhlIHNlc3Npb24n
cyByZW5kZXIgdGFyZ2V0CisgICAgICAgICAgICBfdGhpcy5yaWdDYW1lcmFzW2ldLm91dHB1dFJl
bmRlclRhcmdldCA9IHhyU2Vzc2lvbk1hbmFnZXIuX3Nlc3Npb25SZW5kZXJUYXJnZXRUZXh0dXJl
OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICBXZWJYUkNh
bWVyYS5fVG1wTWF0cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJNYXRyaXgiXSgpOworICAgIHJldHVybiBXZWJYUkNhbWVyYTsKK30oX0Nh
bWVyYXNfZnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJGcmVlQ2FtZXJh
Il0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL1hSL3dlYlhSQ29udHJv
bGxlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL0NhbWVyYXMvWFIvd2ViWFJDb250cm9sbGVyLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBX
ZWJYUkNvbnRyb2xsZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2Vi
WFJDb250cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBXZWJYUkNvbnRyb2xsZXI7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2JzZXJ2
YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVzL2Fic3RyYWN0TWVzaCAqLyAiLi9NZXNo
ZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50
cyIpOworCisKKworLyoqCisgKiBSZXByZXNlbnRzIGFuIFhSIGlucHV0CisgKi8KK3ZhciBXZWJY
UkNvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyB0aGUgY29udHJvbGxlcgorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxv
bmpzLmNvbS9ob3dfdG8vd2VieHIKKyAgICAgKiBAcGFyYW0gc2NlbmUgdGhlIHNjZW5lIHdoaWNo
IHRoZSBjb250cm9sbGVyIHNob3VsZCBiZSBhc3NvY2lhdGVkIHRvCisgICAgICogQHBhcmFtIGlu
cHV0U291cmNlIHRoZSB1bmRlcmx5aW5nIGlucHV0IHNvdXJjZSBmb3IgdGhlIGNvbnRyb2xsZXIK
KyAgICAgKiBAcGFyYW0gcGFyZW50Q29udGFpbmVyIHBhcmVudCB0aGF0IHRoZSBjb250cm9sbGVy
IG1lc2hlcyBzaG91bGQgYmUgY2hpbGRyZW4gb2YKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBXZWJY
UkNvbnRyb2xsZXIoc2NlbmUsIAorICAgIC8qKiBUaGUgdW5kZXJseWluZyBpbnB1dCBzb3VyY2Ug
Zm9yIHRoZSBjb250cm9sbGVyICAqLworICAgIGlucHV0U291cmNlLCBwYXJlbnRDb250YWluZXIp
IHsKKyAgICAgICAgaWYgKHBhcmVudENvbnRhaW5lciA9PT0gdm9pZCAwKSB7IHBhcmVudENvbnRh
aW5lciA9IG51bGw7IH0KKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlz
LmlucHV0U291cmNlID0gaW5wdXRTb3VyY2U7CisgICAgICAgIHRoaXMucGFyZW50Q29udGFpbmVy
ID0gcGFyZW50Q29udGFpbmVyOworICAgICAgICAvKioKKyAgICAgICAgICogRXZlbnQgdGhhdCBm
aXJlcyB3aGVuIHRoZSBjb250cm9sbGVyIGlzIHJlbW92ZWQvZGlzcG9zZWQKKyAgICAgICAgICov
CisgICAgICAgIHRoaXMub25EaXNwb3NlT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0
aGlzLl90bXBNYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk1hdHJpeCJdKCk7CisgICAgICAgIHRoaXMuX3RtcFF1YXRlcm5pb24gPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRl
cm5pb24iXSgpOworICAgICAgICB0aGlzLl90bXBWZWN0b3IgPSBuZXcgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgpOworICAgICAgICB0
aGlzLnBvaW50ZXIgPSBuZXcgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siQWJzdHJhY3RNZXNoIl0oImNvbnRyb2xsZXJQb2ludGVyIiwgc2NlbmUpOwor
ICAgICAgICBpZiAocGFyZW50Q29udGFpbmVyKSB7CisgICAgICAgICAgICBwYXJlbnRDb250YWlu
ZXIuYWRkQ2hpbGQodGhpcy5wb2ludGVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5p
bnB1dFNvdXJjZS5ncmlwU3BhY2UpIHsKKyAgICAgICAgICAgIHRoaXMuZ3JpcCA9IG5ldyBfTWVz
aGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdE1l
c2giXSgiY29udHJvbGxlckdyaXAiLCB0aGlzLnNjZW5lKTsKKyAgICAgICAgICAgIGlmICh0aGlz
LnBhcmVudENvbnRhaW5lcikgeworICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q29udGFpbmVy
LmFkZENoaWxkKHRoaXMuZ3JpcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgY29udHJvbGxlciBwb3NlIGJhc2VkIG9uIHRoZSBn
aXZlbiBYUkZyYW1lCisgICAgICogQHBhcmFtIHhyRnJhbWUgeHIgZnJhbWUgdG8gdXBkYXRlIHRo
ZSBwb3NlIHdpdGgKKyAgICAgKiBAcGFyYW0gcmVmZXJlbmNlU3BhY2UgcmVmZXJlbmNlIHNwYWNl
IHRvIHVzZQorICAgICAqLworICAgIFdlYlhSQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRlRnJv
bVhSRnJhbWUgPSBmdW5jdGlvbiAoeHJGcmFtZSwgcmVmZXJlbmNlU3BhY2UpIHsKKyAgICAgICAg
dmFyIHBvc2UgPSB4ckZyYW1lLmdldFBvc2UodGhpcy5pbnB1dFNvdXJjZS50YXJnZXRSYXlTcGFj
ZSwgcmVmZXJlbmNlU3BhY2UpOworICAgICAgICAvLyBVcGRhdGUgdGhlIHBvaW50ZXIgbWVzaAor
ICAgICAgICBpZiAocG9zZSkgeworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLkZyb21GbG9hdDMyQXJyYXlUb1JlZlNj
YWxlZChwb3NlLnRyYW5zZm9ybS5tYXRyaXgsIDAsIDEsIHRoaXMuX3RtcE1hdHJpeCk7CisgICAg
ICAgICAgICBpZiAoIXRoaXMucG9pbnRlci5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVt
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdG1wTWF0cml4LnRvZ2dsZU1vZGVsTWF0cml4SGFu
ZEluUGxhY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdGhpcy5wb2ludGVy
LnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIHRoaXMucG9pbnRlci5yb3Rh
dGlvblF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlF1YXRlcm5pb24iXSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5fdG1wTWF0cml4LmRlY29tcG9zZSh0aGlzLnBvaW50ZXIuc2NhbGluZywgdGhpcy5wb2lu
dGVyLnJvdGF0aW9uUXVhdGVybmlvbiwgdGhpcy5wb2ludGVyLnBvc2l0aW9uKTsKKyAgICAgICAg
fQorICAgICAgICAvLyBVcGRhdGUgdGhlIGdyaXAgbWVzaCBpZiBpdCBleGlzdHMKKyAgICAgICAg
aWYgKHRoaXMuaW5wdXRTb3VyY2UuZ3JpcFNwYWNlICYmIHRoaXMuZ3JpcCkgeworICAgICAgICAg
ICAgdmFyIHBvc2VfMSA9IHhyRnJhbWUuZ2V0UG9zZSh0aGlzLmlucHV0U291cmNlLmdyaXBTcGFj
ZSwgcmVmZXJlbmNlU3BhY2UpOworICAgICAgICAgICAgaWYgKHBvc2VfMSkgeworICAgICAgICAg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJN
YXRyaXgiXS5Gcm9tRmxvYXQzMkFycmF5VG9SZWZTY2FsZWQocG9zZV8xLnRyYW5zZm9ybS5tYXRy
aXgsIDAsIDEsIHRoaXMuX3RtcE1hdHJpeCk7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdy
aXAuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl90bXBNYXRyaXgudG9nZ2xlTW9kZWxNYXRyaXhIYW5kSW5QbGFjZSgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ3JpcC5yb3RhdGlvblF1YXRl
cm5pb24pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlwLnJvdGF0aW9uUXVhdGVybmlv
biA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
UXVhdGVybmlvbiJdKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMu
X3RtcE1hdHJpeC5kZWNvbXBvc2UodGhpcy5ncmlwLnNjYWxpbmcsIHRoaXMuZ3JpcC5yb3RhdGlv
blF1YXRlcm5pb24sIHRoaXMuZ3JpcC5wb3NpdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSB3b3JsZCBzcGFjZSByYXkgY29taW5n
IGZyb20gdGhlIGNvbnRyb2xsZXIKKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHRpbmcg
cmF5CisgICAgICovCisgICAgV2ViWFJDb250cm9sbGVyLnByb3RvdHlwZS5nZXRXb3JsZFBvaW50
ZXJSYXlUb1JlZiA9IGZ1bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAgLy8gRm9yY2UgdXBkYXRl
IHRvIGVuc3VyZSBwaWNrZWQgcG9pbnQgaXMgc3luY2VkIHdpdGggcmF5CisgICAgICAgIHZhciB3
b3JsZE1hdHJpeCA9IHRoaXMucG9pbnRlci5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAg
ICAgIHdvcmxkTWF0cml4LmRlY29tcG9zZSh1bmRlZmluZWQsIHRoaXMuX3RtcFF1YXRlcm5pb24s
IHVuZGVmaW5lZCk7CisgICAgICAgIHRoaXMuX3RtcFZlY3Rvci5zZXQoMCwgMCwgMSk7CisgICAg
ICAgIHRoaXMuX3RtcFZlY3Rvci5yb3RhdGVCeVF1YXRlcm5pb25Ub1JlZih0aGlzLl90bXBRdWF0
ZXJuaW9uLCB0aGlzLl90bXBWZWN0b3IpOworICAgICAgICByZXN1bHQub3JpZ2luID0gdGhpcy5w
b2ludGVyLmFic29sdXRlUG9zaXRpb247CisgICAgICAgIHJlc3VsdC5kaXJlY3Rpb24uY29weUZy
b20odGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAgcmVzdWx0Lmxlbmd0aCA9IDEwMDA7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyBvZiB0aGUgb2JqZWN0CisgICAgICovCisgICAg
V2ViWFJDb250cm9sbGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAodGhpcy5ncmlwKSB7CisgICAgICAgICAgICB0aGlzLmdyaXAuZGlzcG9zZSgpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMucG9pbnRlci5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMub25E
aXNwb3NlT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOworICAgIH07CisgICAgcmV0dXJu
IFdlYlhSQ29udHJvbGxlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2Ft
ZXJhcy9YUi93ZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlci50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJh
cy9YUi93ZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlci50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBXZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJXZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gV2ViWFJDb250cm9sbGVyTW9kZWxMb2FkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0
aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfR2FtZXBhZHNf
Q29udHJvbGxlcnNfd2luZG93c01vdGlvbkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0dhbWVwYWRzL0NvbnRyb2xs
ZXJzL3dpbmRvd3NNb3Rpb25Db250cm9sbGVyICovICIuL0dhbWVwYWRzL0NvbnRyb2xsZXJzL3dp
bmRvd3NNb3Rpb25Db250cm9sbGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0dh
bWVwYWRzX0NvbnRyb2xsZXJzX29jdWx1c1RvdWNoQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vR2FtZXBhZHMvQ29u
dHJvbGxlcnMvb2N1bHVzVG91Y2hDb250cm9sbGVyICovICIuL0dhbWVwYWRzL0NvbnRyb2xsZXJz
L29jdWx1c1RvdWNoQ29udHJvbGxlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9H
YW1lcGFkc19Db250cm9sbGVyc192aXZlQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vR2FtZXBhZHMvQ29udHJvbGxl
cnMvdml2ZUNvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvdml2ZUNvbnRyb2xs
ZXIudHMiKTsKKworCisKKworLyoqCisgKiBMb2FkcyBhIGNvbnRyb2xsZXIgbW9kZWwgYW5kIGFk
ZHMgaXQgYXMgYSBjaGlsZCBvZiB0aGUgV2ViWFJDb250cm9sbGVycyBncmlwIHdoZW4gdGhlIGNv
bnRyb2xsZXIgaXMgY3JlYXRlZAorICovCit2YXIgV2ViWFJDb250cm9sbGVyTW9kZWxMb2FkZXIg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0
aGUgV2ViWFJDb250cm9sbGVyTW9kZWxMb2FkZXIKKyAgICAgKiBAcGFyYW0gaW5wdXQgeHIgaW5w
dXQgdGhhdCBjcmVhdGVzIHRoZSBjb250cm9sbGVycworICAgICAqLworICAgIGZ1bmN0aW9uIFdl
YlhSQ29udHJvbGxlck1vZGVsTG9hZGVyKGlucHV0KSB7CisgICAgICAgIGlucHV0Lm9uQ29udHJv
bGxlckFkZGVkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGMpIHsKKyAgICAgICAgICAgIGlmIChj
LmlucHV0U291cmNlLmdhbWVwYWQgJiYgYy5pbnB1dFNvdXJjZS5nYW1lcGFkLmlkID09PSAiaHRj
LXZpdmUiKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXJNb2RlbF8xID0gbmV3IF9H
YW1lcGFkc19Db250cm9sbGVyc192aXZlQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWaXZlQ29udHJvbGxlciJdKGMuaW5wdXRTb3VyY2UuZ2FtZXBhZCk7CisgICAgICAg
ICAgICAgICAgY29udHJvbGxlck1vZGVsXzEuaGFuZCA9IGMuaW5wdXRTb3VyY2UuaGFuZGVkbmVz
czsKKyAgICAgICAgICAgICAgICBjb250cm9sbGVyTW9kZWxfMS5pc1hSID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBjb250cm9sbGVyTW9kZWxfMS5pbml0Q29udHJvbGxlck1lc2goYy5ncmlwLmdl
dFNjZW5lKCksIGZ1bmN0aW9uIChtKSB7CisgICAgICAgICAgICAgICAgICAgIG0uaXNQaWNrYWJs
ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtLmdldENoaWxkTWVzaGVzKGZhbHNlKS5m
b3JFYWNoKGZ1bmN0aW9uIChtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtLmlzUGlja2Fi
bGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRyb2xsZXJNb2RlbF8xLm1lc2gucGFyZW50ID0gYy5ncmlwOworICAgICAgICAgICAgICAg
ICAgICBjb250cm9sbGVyTW9kZWxfMS5tZXNoLnJvdGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJRdWF0ZXJuaW9uIl0uRnJv
bUV1bGVyQW5nbGVzKDAsIE1hdGguUEksIDApOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYy5pbnB1dFNvdXJjZS5nYW1lcGFkICYmIGMu
aW5wdXRTb3VyY2UuZ2FtZXBhZC5pZCA9PT0gIm9jdWx1cy10b3VjaCIpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgY29udHJvbGxlck1vZGVsXzIgPSBuZXcgX0dhbWVwYWRzX0NvbnRyb2xsZXJzX29j
dWx1c1RvdWNoQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPY3VsdXNU
b3VjaENvbnRyb2xsZXIiXShjLmlucHV0U291cmNlLmdhbWVwYWQpOworICAgICAgICAgICAgICAg
IGNvbnRyb2xsZXJNb2RlbF8yLmhhbmQgPSBjLmlucHV0U291cmNlLmhhbmRlZG5lc3M7CisgICAg
ICAgICAgICAgICAgY29udHJvbGxlck1vZGVsXzIuaXNYUiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgY29udHJvbGxlck1vZGVsXzIuaW5pdENvbnRyb2xsZXJNZXNoKGMuZ3JpcC5nZXRTY2VuZSgp
LCBmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyTW9kZWxfMi5t
ZXNoLnBhcmVudCA9IGMuZ3JpcDsKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlck1vZGVs
XzIubWVzaC5yb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLkZyb21FdWxlckFuZ2xlcygwLCBNYXRo
LlBJLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlck1vZGVsXzIubWVzaC5wb3Np
dGlvbi55ID0gMC4wMzQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJNb2RlbF8yLm1l
c2gucG9zaXRpb24ueiA9IDAuMDUyOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBpZiAoYy5pbnB1dFNvdXJjZS5nYW1lcGFkICYmIGMuaW5wdXRT
b3VyY2UuZ2FtZXBhZC5pZCA9PT0gIm9jdWx1cy1xdWVzdCIpIHsKKyAgICAgICAgICAgICAgICBf
R2FtZXBhZHNfQ29udHJvbGxlcnNfb2N1bHVzVG91Y2hDb250cm9sbGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk9jdWx1c1RvdWNoQ29udHJvbGxlciJdLl9Jc1F1ZXN0ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlck1vZGVsXzMgPSBuZXcgX0dhbWVwYWRzX0Nv
bnRyb2xsZXJzX29jdWx1c1RvdWNoQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJPY3VsdXNUb3VjaENvbnRyb2xsZXIiXShjLmlucHV0U291cmNlLmdhbWVwYWQpOworICAg
ICAgICAgICAgICAgIGNvbnRyb2xsZXJNb2RlbF8zLmhhbmQgPSBjLmlucHV0U291cmNlLmhhbmRl
ZG5lc3M7CisgICAgICAgICAgICAgICAgY29udHJvbGxlck1vZGVsXzMuaXNYUiA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgY29udHJvbGxlck1vZGVsXzMuaW5pdENvbnRyb2xsZXJNZXNoKGMuZ3Jp
cC5nZXRTY2VuZSgpLCBmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgICAgICAgICBjb250cm9s
bGVyTW9kZWxfMy5tZXNoLnBhcmVudCA9IGMuZ3JpcDsKKyAgICAgICAgICAgICAgICAgICAgY29u
dHJvbGxlck1vZGVsXzMubWVzaC5yb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLkZyb21FdWxlckFu
Z2xlcyhNYXRoLlBJIC8gLTQsIE1hdGguUEksIDApOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbnRy
b2xsZXJNb2RlbF80ID0gbmV3IF9HYW1lcGFkc19Db250cm9sbGVyc193aW5kb3dzTW90aW9uQ29u
dHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJXaW5kb3dzTW90aW9uQ29udHJv
bGxlciJdKGMuaW5wdXRTb3VyY2UuZ2FtZXBhZCk7CisgICAgICAgICAgICAgICAgY29udHJvbGxl
ck1vZGVsXzQuaGFuZCA9IGMuaW5wdXRTb3VyY2UuaGFuZGVkbmVzczsKKyAgICAgICAgICAgICAg
ICBjb250cm9sbGVyTW9kZWxfNC5pc1hSID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250cm9s
bGVyTW9kZWxfNC5pbml0Q29udHJvbGxlck1lc2goYy5ncmlwLmdldFNjZW5lKCksIGZ1bmN0aW9u
IChtKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJNb2RlbF80Lm1lc2gucGFyZW50
ID0gYy5ncmlwOworICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyTW9kZWxfNC5tZXNoLnJv
dGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJRdWF0ZXJuaW9uIl0uRnJvbUV1bGVyQW5nbGVzKDAsIE1hdGguUEksIDApOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cisg
ICAgcmV0dXJuIFdlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9DYW1lcmFzL1hSL3dlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rp
b24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9YUi93ZWJYUkNvbnRyb2xsZXJQb2ludGVy
U2VsZWN0aW9uLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogV2ViWFJDb250cm9s
bGVyUG9pbnRlclNlbGVjdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJXZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBX
ZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhz
L21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9DdWxsaW5nX3JheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ3VsbGluZy9yYXkgKi8gIi4vQ3VsbGluZy9yYXku
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9zdGFuZGFyZE1hdGVyaWFsICovICIuL01hdGVyaWFscy9zdGFuZGFy
ZE1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGguYXhp
cyAqLyAiLi9NYXRocy9tYXRoLmF4aXMudHMiKTsKKworCisKKworCisKKy8qKgorICogSGFuZGxl
cyBwb2ludGVyIGlucHV0IGF1dG9tYXRpY2FsbHkgZm9yIHRoZSBwb2ludGVyIG9mIFhSIGNvbnRy
b2xsZXJzCisgKi8KK3ZhciBXZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBXZWJYUkNv
bnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uCisgICAgICogQHBhcmFtIGlucHV0IGlucHV0IG1hbmFn
ZXIgdG8gc2V0dXAgcG9pbnRlciBzZWxlY3Rpb24KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBXZWJY
UkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uKGlucHV0KSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIHRoaXMuX3RtcFJheSA9IG5ldyBfQ3VsbGluZ19yYXlfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siUmF5Il0obmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oKSwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oKSk7CisgICAgICAgIGlu
cHV0Lm9uQ29udHJvbGxlckFkZGVkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGNvbnRyb2xsZXIp
IHsKKyAgICAgICAgICAgIHZhciBzY2VuZSA9IGNvbnRyb2xsZXIucG9pbnRlci5nZXRTY2VuZSgp
OworICAgICAgICAgICAgdmFyIGxhc2VyUG9pbnRlcjsKKyAgICAgICAgICAgIHZhciBjdXJzb3JN
ZXNoOworICAgICAgICAgICAgdmFyIHRyaWdnZXJEb3duID0gZmFsc2U7CisgICAgICAgICAgICB2
YXIgaWQ7CisgICAgICAgICAgICBpZCA9IFdlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb24u
X2lkQ291bnRlcisrOworICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbGFzZXIgcG9pbnRlciBmb3Ig
dGhlIFhSIGNvbnRyb2xsZXIKKyAgICAgICAgICAgIGxhc2VyUG9pbnRlciA9IF9NZXNoZXNfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uQ3JlYXRlQ3lsaW5kZXIoImxh
c2VyUG9pbnRlciIsIDEsIDAuMDAwMiwgMC4wMDQsIDIwLCAxLCBzY2VuZSwgZmFsc2UpOworICAg
ICAgICAgICAgbGFzZXJQb2ludGVyLnBhcmVudCA9IGNvbnRyb2xsZXIucG9pbnRlcjsKKyAgICAg
ICAgICAgIHZhciBsYXNlclBvaW50ZXJNYXRlcmlhbCA9IG5ldyBfTWF0ZXJpYWxzX3N0YW5kYXJk
TWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU3RhbmRhcmRNYXRlcmlhbCJd
KCJsYXNlclBvaW50ZXJNYXQiLCBzY2VuZSk7CisgICAgICAgICAgICBsYXNlclBvaW50ZXJNYXRl
cmlhbC5lbWlzc2l2ZUNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIkNvbG9yMyJdKDAuNywgMC43LCAwLjcpOworICAgICAgICAgICAgbGFz
ZXJQb2ludGVyTWF0ZXJpYWwuYWxwaGEgPSAwLjY7CisgICAgICAgICAgICBsYXNlclBvaW50ZXIu
bWF0ZXJpYWwgPSBsYXNlclBvaW50ZXJNYXRlcmlhbDsKKyAgICAgICAgICAgIGxhc2VyUG9pbnRl
ci5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7CisgICAgICAgICAgICBfdGhpcy5fdXBkYXRlUG9p
bnRlckRpc3RhbmNlKGxhc2VyUG9pbnRlciwgMSk7CisgICAgICAgICAgICBsYXNlclBvaW50ZXIu
aXNQaWNrYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgLy8gQ3JlYXRlIGEgZ2F6ZSB0cmFja2Vy
IGZvciB0aGUgIFhSIGNvbnRyb2xlbHIKKyAgICAgICAgICAgIGN1cnNvck1lc2ggPSBfTWVzaGVz
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZVRvcnVzKCJn
YXplVHJhY2tlciIsIDAuMDAzNSAqIDMsIDAuMDAyNSAqIDMsIDIwLCBzY2VuZSwgZmFsc2UpOwor
ICAgICAgICAgICAgY3Vyc29yTWVzaC5iYWtlQ3VycmVudFRyYW5zZm9ybUludG9WZXJ0aWNlcygp
OworICAgICAgICAgICAgY3Vyc29yTWVzaC5pc1BpY2thYmxlID0gZmFsc2U7CisgICAgICAgICAg
ICBjdXJzb3JNZXNoLmlzVmlzaWJsZSA9IGZhbHNlOworICAgICAgICAgICAgdmFyIHRhcmdldE1h
dCA9IG5ldyBfTWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siU3RhbmRhcmRNYXRlcmlhbCJdKCJ0YXJnZXRNYXQiLCBzY2VuZSk7CisgICAgICAg
ICAgICB0YXJnZXRNYXQuc3BlY3VsYXJDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yMyJdLkJsYWNrKCk7CisgICAgICAgICAgICB0YXJn
ZXRNYXQuZW1pc3NpdmVDb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJDb2xvcjMiXSgwLjcsIDAuNywgMC43KTsKKyAgICAgICAgICAgIHRh
cmdldE1hdC5iYWNrRmFjZUN1bGxpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIGN1cnNvck1lc2gu
bWF0ZXJpYWwgPSB0YXJnZXRNYXQ7CisgICAgICAgICAgICB2YXIgcmVuZGVyT2JzZXJ2ZXIgPSBz
Y2VuZS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICAgICAvLyBFdmVyeSBmcmFtZSBjaGVjayBjb2xsaXNpb25zL2lucHV0CisgICAgICAgICAg
ICAgICAgY29udHJvbGxlci5nZXRXb3JsZFBvaW50ZXJSYXlUb1JlZihfdGhpcy5fdG1wUmF5KTsK
KyAgICAgICAgICAgICAgICB2YXIgcGljayA9IHNjZW5lLnBpY2tXaXRoUmF5KF90aGlzLl90bXBS
YXkpOworICAgICAgICAgICAgICAgIGlmIChwaWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjb250cm9sbGVyLmlucHV0U291cmNlLmdhbWVwYWQgJiYgY29udHJvbGxlci5pbnB1dFNvdXJj
ZS5nYW1lcGFkLmJ1dHRvbnNbMF0gJiYgY29udHJvbGxlci5pbnB1dFNvdXJjZS5nYW1lcGFkLmJ1
dHRvbnNbMF0udmFsdWUgPiAwLjcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHJp
Z2dlckRvd24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2VuZS5zaW11bGF0ZVBv
aW50ZXJEb3duKHBpY2ssIHsgcG9pbnRlcklkOiBpZCB9KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJEb3duID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0cmlnZ2VyRG93bikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjZW5lLnNpbXVsYXRlUG9pbnRlclVwKHBpY2ssIHsgcG9pbnRlcklkOiBpZCB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJE
b3duID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
c2NlbmUuc2ltdWxhdGVQb2ludGVyTW92ZShwaWNrLCB7IHBvaW50ZXJJZDogaWQgfSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwaWNrICYmIHBpY2sucGlja2VkUG9p
bnQgJiYgcGljay5oaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGxhc2VyIHN0
YXRlCisgICAgICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVQb2ludGVyRGlzdGFuY2UobGFz
ZXJQb2ludGVyLCBwaWNrLmRpc3RhbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRl
IGN1cnNvciBzdGF0ZQorICAgICAgICAgICAgICAgICAgICBjdXJzb3JNZXNoLnBvc2l0aW9uLmNv
cHlGcm9tKHBpY2sucGlja2VkUG9pbnQpOworICAgICAgICAgICAgICAgICAgICBjdXJzb3JNZXNo
LnNjYWxpbmcueCA9IE1hdGguc3FydChwaWNrLmRpc3RhbmNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgY3Vyc29yTWVzaC5zY2FsaW5nLnkgPSBNYXRoLnNxcnQocGljay5kaXN0YW5jZSk7CisgICAg
ICAgICAgICAgICAgICAgIGN1cnNvck1lc2guc2NhbGluZy56ID0gTWF0aC5zcXJ0KHBpY2suZGlz
dGFuY2UpOworICAgICAgICAgICAgICAgICAgICAvLyBUbyBhdm9pZCB6LWZpZ2h0aW5nCisgICAg
ICAgICAgICAgICAgICAgIHZhciBwaWNrTm9ybWFsID0gX3RoaXMuX2NvbnZlcnROb3JtYWxUb0Rp
cmVjdGlvbk9mUmF5KHBpY2suZ2V0Tm9ybWFsKCksIF90aGlzLl90bXBSYXkpOworICAgICAgICAg
ICAgICAgICAgICB2YXIgZGVsdGFGaWdodGluZyA9IDAuMDAyOworICAgICAgICAgICAgICAgICAg
ICBjdXJzb3JNZXNoLnBvc2l0aW9uLmNvcHlGcm9tKHBpY2sucGlja2VkUG9pbnQpOworICAgICAg
ICAgICAgICAgICAgICBpZiAocGlja05vcm1hbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGF4aXMxID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlZlY3RvcjMiXS5Dcm9zcyhfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIkF4aXMiXS5ZLCBwaWNrTm9ybWFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBheGlzMiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJWZWN0b3IzIl0uQ3Jvc3MocGlja05vcm1hbCwgYXhpczEpOworICAgICAgICAgICAgICAg
ICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlZlY3RvcjMiXS5Sb3RhdGlvbkZyb21BeGlzVG9SZWYoYXhpczIsIHBpY2tOb3JtYWwsIGF4aXMx
LCBjdXJzb3JNZXNoLnJvdGF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvck1l
c2gucG9zaXRpb24uYWRkSW5QbGFjZShwaWNrTm9ybWFsLnNjYWxlKGRlbHRhRmlnaHRpbmcpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjdXJzb3JNZXNoLmlz
VmlzaWJsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBjdXJzb3JNZXNoLmlzVmlzaWJsZSA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY29udHJvbGxlci5v
bkRpc3Bvc2VPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg
IGxhc2VyUG9pbnRlci5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgY3Vyc29yTWVzaC5kaXNw
b3NlKCk7CisgICAgICAgICAgICAgICAgc2NlbmUub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLnJl
bW92ZShyZW5kZXJPYnNlcnZlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
fQorICAgIFdlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb24ucHJvdG90eXBlLl9jb252ZXJ0
Tm9ybWFsVG9EaXJlY3Rpb25PZlJheSA9IGZ1bmN0aW9uIChub3JtYWwsIHJheSkgeworICAgICAg
ICBpZiAobm9ybWFsKSB7CisgICAgICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLmFjb3MoX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Eb3Qo
bm9ybWFsLCByYXkuZGlyZWN0aW9uKSk7CisgICAgICAgICAgICBpZiAoYW5nbGUgPCBNYXRoLlBJ
IC8gMikgeworICAgICAgICAgICAgICAgIG5vcm1hbC5zY2FsZUluUGxhY2UoLTEpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBub3JtYWw7CisgICAgfTsKKyAgICBX
ZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uLnByb3RvdHlwZS5fdXBkYXRlUG9pbnRlckRp
c3RhbmNlID0gZnVuY3Rpb24gKF9sYXNlclBvaW50ZXIsIGRpc3RhbmNlKSB7CisgICAgICAgIGlm
IChkaXN0YW5jZSA9PT0gdm9pZCAwKSB7IGRpc3RhbmNlID0gMTAwOyB9CisgICAgICAgIF9sYXNl
clBvaW50ZXIuc2NhbGluZy55ID0gZGlzdGFuY2U7CisgICAgICAgIF9sYXNlclBvaW50ZXIucG9z
aXRpb24ueiA9IGRpc3RhbmNlIC8gMjsKKyAgICB9OworICAgIFdlYlhSQ29udHJvbGxlclBvaW50
ZXJTZWxlY3Rpb24uX2lkQ291bnRlciA9IDA7CisgICAgcmV0dXJuIFdlYlhSQ29udHJvbGxlclBv
aW50ZXJTZWxlY3Rpb247Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVy
YXMvWFIvd2ViWFJDb250cm9sbGVyVGVsZXBvcnRhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1l
cmFzL1hSL3dlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24udHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBXZWJYUkNvbnRyb2xsZXJUZWxlcG9ydGF0aW9uICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb247IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0
b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DdWxsaW5nL3JheSAqLyAi
Li9DdWxsaW5nL3JheS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
c3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwgKi8gIi4vTWF0
ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX1RleHR1cmVzX2R5bmFtaWNUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMv
ZHluYW1pY1RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2R5bmFtaWNUZXh0dXJlLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0FuaW1hdGlvbnNfZWFzaW5nX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9Bbmlt
YXRpb25zL2Vhc2luZyAqLyAiLi9BbmltYXRpb25zL2Vhc2luZy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQW5pbWF0aW9ucy9hbmltYXRp
b24gKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb24udHMiKTsKKworCisKKworCisKKworLyoqCisg
KiBFbmFibGVzIHRlbGVwb3J0YXRpb24KKyAqLwordmFyIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0
YXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyBhIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24KKyAgICAgKiBAcGFyYW0gaW5wdXQg
aW5wdXQgbWFuYWdlciB0byBhZGQgdGVsZXBvcnRhdGlvbiB0bworICAgICAqIEBwYXJhbSBmbG9v
ck1lc2hlcyBmbG9vcm1lc2hlcyB3aGljaCBjYW4gYmUgdGVsZXBvcnRlZCB0bworICAgICAqLwor
ICAgIGZ1bmN0aW9uIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24oaW5wdXQsIGZsb29yTWVz
aGVzKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChmbG9vck1lc2hl
cyA9PT0gdm9pZCAwKSB7IGZsb29yTWVzaGVzID0gW107IH0KKyAgICAgICAgdGhpcy5fdGVsZXBv
cnRhdGlvbkZpbGxDb2xvciA9ICIjNDQ0NDQ0IjsKKyAgICAgICAgdGhpcy5fdGVsZXBvcnRhdGlv
bkJvcmRlckNvbG9yID0gIiNGRkZGRkYiOworICAgICAgICB0aGlzLl90bXBSYXkgPSBuZXcgX0N1
bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlJheSJdKG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKCksIG5l
dyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdKCkpOworICAgICAgICB0aGlzLl90bXBWZWN0b3IgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgpOworICAgICAgICBpbnB1
dC5vbkNvbnRyb2xsZXJBZGRlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChjKSB7CisgICAgICAg
ICAgICB2YXIgc2NlbmUgPSBjLnBvaW50ZXIuZ2V0U2NlbmUoKTsKKyAgICAgICAgICAgIHZhciBm
b3J3YXJkUmVhZHlUb1RlbGVwb3J0ID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgYmFja3dhcmRS
ZWFkeVRvVGVsZXBvcnQgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBsZWZ0UmVhZHlUb1RlbGVw
b3J0ID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgcmlnaHRSZWFkeVRvVGVsZXBvcnQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIC8vIFRlbGVwb3J0IHRhcmdldCBhYmQgaXQncyBhbmltYXRpb24KKyAg
ICAgICAgICAgIHZhciB0ZWxlcG9ydGF0aW9uVGFyZ2V0ID0gX01lc2hlc19tZXNoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DcmVhdGVHcm91bmQoInRlbGVwb3J0YXRpb25U
YXJnZXQiLCAyLCAyLCAyLCBzY2VuZSk7CisgICAgICAgICAgICB0ZWxlcG9ydGF0aW9uVGFyZ2V0
LmlzUGlja2FibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBsZW5ndGggPSA1MTI7CisgICAg
ICAgICAgICB2YXIgZHluYW1pY1RleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19keW5h
bWljVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJEeW5hbWljVGV4dHVyZSJd
KCJEeW5hbWljVGV4dHVyZSIsIGxlbmd0aCwgc2NlbmUsIHRydWUpOworICAgICAgICAgICAgZHlu
YW1pY1RleHR1cmUuaGFzQWxwaGEgPSB0cnVlOworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBk
eW5hbWljVGV4dHVyZS5nZXRDb250ZXh0KCk7CisgICAgICAgICAgICB2YXIgY2VudGVyWCA9IGxl
bmd0aCAvIDI7CisgICAgICAgICAgICB2YXIgY2VudGVyWSA9IGxlbmd0aCAvIDI7CisgICAgICAg
ICAgICB2YXIgcmFkaXVzID0gMjAwOworICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsK
KyAgICAgICAgICAgIGNvbnRleHQuYXJjKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgMCwgMiAq
IE1hdGguUEksIGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gX3RoaXMu
X3RlbGVwb3J0YXRpb25GaWxsQ29sb3I7CisgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTsKKyAg
ICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMTA7CisgICAgICAgICAgICBjb250ZXh0LnN0
cm9rZVN0eWxlID0gX3RoaXMuX3RlbGVwb3J0YXRpb25Cb3JkZXJDb2xvcjsKKyAgICAgICAgICAg
IGNvbnRleHQuc3Ryb2tlKCk7CisgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpOworICAg
ICAgICAgICAgZHluYW1pY1RleHR1cmUudXBkYXRlKCk7CisgICAgICAgICAgICB2YXIgdGVsZXBv
cnRhdGlvbkNpcmNsZU1hdGVyaWFsID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlhbF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTdGFuZGFyZE1hdGVyaWFsIl0oIlRleHRQbGFu
ZU1hdGVyaWFsIiwgc2NlbmUpOworICAgICAgICAgICAgdGVsZXBvcnRhdGlvbkNpcmNsZU1hdGVy
aWFsLmRpZmZ1c2VUZXh0dXJlID0gZHluYW1pY1RleHR1cmU7CisgICAgICAgICAgICB0ZWxlcG9y
dGF0aW9uVGFyZ2V0Lm1hdGVyaWFsID0gdGVsZXBvcnRhdGlvbkNpcmNsZU1hdGVyaWFsOworICAg
ICAgICAgICAgdmFyIHRvcnVzID0gX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIk1lc2giXS5DcmVhdGVUb3J1cygidG9ydXNUZWxlcG9ydGF0aW9uIiwgMC43NSwgMC4x
LCAyNSwgc2NlbmUsIGZhbHNlKTsKKyAgICAgICAgICAgIHRvcnVzLmlzUGlja2FibGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHRvcnVzLnBhcmVudCA9IHRlbGVwb3J0YXRpb25UYXJnZXQ7CisgICAg
ICAgICAgICB2YXIgYW5pbWF0aW9uSW5uZXJDaXJjbGUgPSBuZXcgX0FuaW1hdGlvbnNfYW5pbWF0
aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFuaW1hdGlvbiJdKCJhbmltYXRpb25J
bm5lckNpcmNsZSIsICJwb3NpdGlvbi55IiwgMzAsIF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05UWVBFX0ZMT0FU
LCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQW5p
bWF0aW9uIl0uQU5JTUFUSU9OTE9PUE1PREVfQ1lDTEUpOworICAgICAgICAgICAgdmFyIGtleXMg
PSBbXTsKKyAgICAgICAgICAgIGtleXMucHVzaCh7CisgICAgICAgICAgICAgICAgZnJhbWU6IDAs
CisgICAgICAgICAgICAgICAgdmFsdWU6IDAKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
a2V5cy5wdXNoKHsKKyAgICAgICAgICAgICAgICBmcmFtZTogMzAsCisgICAgICAgICAgICAgICAg
dmFsdWU6IDAuNAorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBrZXlzLnB1c2goeworICAg
ICAgICAgICAgICAgIGZyYW1lOiA2MCwKKyAgICAgICAgICAgICAgICB2YWx1ZTogMAorICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBhbmltYXRpb25Jbm5lckNpcmNsZS5zZXRLZXlzKGtleXMp
OworICAgICAgICAgICAgdmFyIGVhc2luZ0Z1bmN0aW9uID0gbmV3IF9BbmltYXRpb25zX2Vhc2lu
Z19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTaW5lRWFzZSJdKCk7CisgICAgICAgICAg
ICBlYXNpbmdGdW5jdGlvbi5zZXRFYXNpbmdNb2RlKF9BbmltYXRpb25zX2Vhc2luZ19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFYXNpbmdGdW5jdGlvbiJdLkVBU0lOR01PREVfRUFTRUlO
T1VUKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbklubmVyQ2lyY2xlLnNldEVhc2luZ0Z1bmN0aW9u
KGVhc2luZ0Z1bmN0aW9uKTsKKyAgICAgICAgICAgIHRvcnVzLmFuaW1hdGlvbnMgPSBbXTsKKyAg
ICAgICAgICAgIHRvcnVzLmFuaW1hdGlvbnMucHVzaChhbmltYXRpb25Jbm5lckNpcmNsZSk7Cisg
ICAgICAgICAgICBzY2VuZS5iZWdpbkFuaW1hdGlvbih0b3J1cywgMCwgNjAsIHRydWUpOworICAg
ICAgICAgICAgLy8gSGFuZGxlIHVzZXIgaW5wdXQgb24gZXZlcnkgZnJhbWUKKyAgICAgICAgICAg
IHZhciByZW5kZXJPYnNlcnZlciA9IHNjZW5lLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5hZGQo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIHRlbGVwb3J0YXRpb25U
YXJnZXQgdG8gd2hlcmUgdGhlIHVzZXIgaXMgdGFyZ2V0dGluZyB0byB0ZWxlcG9ydCB0bworICAg
ICAgICAgICAgICAgIGlmIChmb3J3YXJkUmVhZHlUb1RlbGVwb3J0KSB7CisgICAgICAgICAgICAg
ICAgICAgIGMuZ2V0V29ybGRQb2ludGVyUmF5VG9SZWYoX3RoaXMuX3RtcFJheSk7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBwaWNrID0gc2NlbmUucGlja1dpdGhSYXkoX3RoaXMuX3RtcFJheSwg
ZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbG9vck1lc2hl
cy5pbmRleE9mKG8pICE9PSAtMTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChwaWNrICYmIHBpY2sucGlja2VkUG9pbnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRvIGF2b2lkIHotZmlnaHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRlbGVwb3J0YXRpb25UYXJnZXQucG9zaXRpb24uY29weUZyb20ocGljay5waWNrZWRQb2ludCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZWxlcG9ydGF0aW9uVGFyZ2V0LnBvc2l0aW9uLnkg
Kz0gMC4wMDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGVs
ZXBvcnRhdGlvblRhcmdldC5pc1Zpc2libGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0
ZWxlcG9ydGF0aW9uVGFyZ2V0LmdldENoaWxkcmVuKClbMF0uaXNWaXNpYmxlID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHRlbGVwb3J0YXRpb25UYXJnZXQuaXNWaXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIHRlbGVwb3J0YXRpb25UYXJnZXQuZ2V0Q2hpbGRyZW4oKVswXS5pc1Zpc2libGUgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGMuaW5wdXRTb3Vy
Y2UuZ2FtZXBhZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYy5pbnB1dFNvdXJjZS5nYW1l
cGFkLmF4ZXNbMV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Rm9yd2FyZCB0ZWxlcG9ydGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYy5pbnB1
dFNvdXJjZS5nYW1lcGFkLmF4ZXNbMV0gPCAtMC43KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yd2FyZFJlYWR5VG9UZWxlcG9ydCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZm9yd2FyZFJlYWR5VG9UZWxlcG9ydCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUZWxlcG9ydCB0aGUgdXNlcnMgZmVldCB0byB3aGVyZSB0aGV5
IHRhcmdldHRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdG1wVmVj
dG9yLmNvcHlGcm9tKHRlbGVwb3J0YXRpb25UYXJnZXQucG9zaXRpb24pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdG1wVmVjdG9yLnkgKz0gaW5wdXQuYmFzZUV4cGVy
aWVuY2UuY2FtZXJhLnBvc2l0aW9uLnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlucHV0LmJhc2VFeHBlcmllbmNlLnNldFBvc2l0aW9uT2ZDYW1lcmFVc2luZ0NvbnRhaW5lcihf
dGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZFJlYWR5VG9UZWxlcG9ydCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmFja3dh
cmQgdGVsZXBvcnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMuaW5wdXRTb3Vy
Y2UuZ2FtZXBhZC5heGVzWzFdID4gMC43KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmFja3dhcmRSZWFkeVRvVGVsZXBvcnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGJhY2t3YXJkUmVhZHlUb1RlbGVwb3J0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIENhc3QgYSByYXkgZG93biBmcm9tIGJlaGluZCB0aGUgdXNlcgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FtTWF0ID0gaW5wdXQuYmFzZUV4cGVy
aWVuY2UuY2FtZXJhLmNvbXB1dGVXb3JsZE1hdHJpeCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbU1hdC5kZWNvbXBvc2UodW5kZWZpbmVkLCBxLCBfdGhpcy5fdG1wUmF5Lm9yaWdp
bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90bXBWZWN0b3Iuc2V0
KDAsIDAsIC0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFZl
Y3Rvci5yb3RhdGVCeVF1YXRlcm5pb25Ub1JlZihxLCBfdGhpcy5fdG1wVmVjdG9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFZlY3Rvci55ID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFZlY3Rvci5ub3JtYWxpemUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFZlY3Rvci55ID0gLTEu
NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFZlY3Rvci5ub3Jt
YWxpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFJheS5k
aXJlY3Rpb24uY29weUZyb20oX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBwaWNrID0gc2NlbmUucGlja1dpdGhSYXkoX3RoaXMuX3RtcFJheSwg
ZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmbG9vck1lc2hlcy5pbmRleE9mKG8pICE9PSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaWNrICYm
IHBpY2sucGlja2VkUG9pbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRlbGVwb3J0IHRoZSB1c2VycyBmZWV0IHRvIHdoZXJlIHRoZXkgdGFyZ2V0dGVkCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdG1wVmVjdG9yLmNvcHlGcm9t
KHBpY2sucGlja2VkUG9pbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X3RoaXMuX3RtcFZlY3Rvci55ICs9IGlucHV0LmJhc2VFeHBlcmllbmNlLmNhbWVyYS5wb3NpdGlv
bi55OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuYmFzZUV4cGVy
aWVuY2Uuc2V0UG9zaXRpb25PZkNhbWVyYVVzaW5nQ29udGFpbmVyKF90aGlzLl90bXBWZWN0b3Ip
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkUmVhZHlUb1Rl
bGVwb3J0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGMuaW5wdXRTb3VyY2UuZ2FtZXBhZC5h
eGVzWzBdICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjLmlu
cHV0U291cmNlLmdhbWVwYWQuYXhlc1swXSA8IC0wLjcpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0UmVhZHlUb1RlbGVwb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChsZWZ0UmVhZHlUb1RlbGVwb3J0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0LmJhc2VFeHBlcmllbmNlLnJvdGF0ZUNhbWVyYUJ5UXVhdGVybmlv
blVzaW5nQ29udGFpbmVyKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJRdWF0ZXJuaW9uIl0uRnJvbUV1bGVyQW5nbGVzKDAsIC1NYXRoLlBJIC8gNCwgMCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsZWZ0UmVhZHlUb1RlbGVwb3J0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYy5pbnB1dFNvdXJjZS5nYW1lcGFkLmF4
ZXNbMF0gPiAwLjcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodFJlYWR5VG9U
ZWxlcG9ydCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRS
ZWFkeVRvVGVsZXBvcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQu
YmFzZUV4cGVyaWVuY2Uucm90YXRlQ2FtZXJhQnlRdWF0ZXJuaW9uVXNpbmdDb250YWluZXIoX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlF1YXRlcm5pb24i
XS5Gcm9tRXVsZXJBbmdsZXMoMCwgTWF0aC5QSSAvIDQsIDApKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRSZWFkeVRvVGVs
ZXBvcnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
Yy5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgIHRlbGVwb3J0YXRpb25UYXJnZXQuZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIGR5bmFt
aWNUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgICAgICB0ZWxlcG9ydGF0aW9uQ2lyY2xl
TWF0ZXJpYWwuZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIHRvcnVzLmRpc3Bvc2UoKTsKKyAg
ICAgICAgICAgICAgICBzY2VuZS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHJlbmRl
ck9ic2VydmVyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisgICAgcmV0
dXJuIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb247Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL0NhbWVyYXMvWFIvd2ViWFJEZWZhdWx0RXhwZXJpZW5jZS50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9DYW1lcmFzL1hSL3dlYlhSRGVmYXVsdEV4cGVyaWVuY2UudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBXZWJYUkRlZmF1bHRFeHBlcmllbmNlT3B0aW9ucywgV2ViWFJEZWZhdWx0RXhwZXJpZW5j
ZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkRlZmF1bHRFeHBl
cmllbmNlT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViWFJEZWZhdWx0RXhwZXJpZW5j
ZU9wdGlvbnM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJEZWZhdWx0RXhwZXJpZW5jZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViWFJEZWZhdWx0RXhwZXJpZW5jZTsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3dlYlhSRXhwZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUkV4cGVyaWVuY2VI
ZWxwZXIgKi8gIi4vQ2FtZXJhcy9YUi93ZWJYUkV4cGVyaWVuY2VIZWxwZXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUklucHV0ICovICIuL0NhbWVyYXMv
WFIvd2ViWFJJbnB1dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJYUkNvbnRy
b2xsZXJNb2RlbExvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi93ZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciAqLyAiLi9DYW1lcmFz
L1hSL3dlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX3dlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2ViWFJDb250cm9sbGVyUG9p
bnRlclNlbGVjdGlvbiAqLyAiLi9DYW1lcmFzL1hSL3dlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxl
Y3Rpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJDb250cm9sbGVyVGVs
ZXBvcnRhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi93ZWJYUkNvbnRyb2xsZXJUZWxlcG9ydGF0aW9uICovICIuL0NhbWVyYXMvWFIv
d2ViWFJDb250cm9sbGVyVGVsZXBvcnRhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF93ZWJYUk1hbmFnZWRPdXRwdXRDYW52YXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2ViWFJNYW5hZ2VkT3V0cHV0Q2FudmFzICov
ICIuL0NhbWVyYXMvWFIvd2ViWFJNYW5hZ2VkT3V0cHV0Q2FudmFzLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3dlYlhSRW50ZXJFeGl0VUlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2ViWFJFbnRlckV4aXRVSSAqLyAiLi9D
YW1lcmFzL1hSL3dlYlhSRW50ZXJFeGl0VUkudHMiKTsKKworCisKKworCisKKworLyoqCisgKiBP
cHRpb25zIGZvciB0aGUgZGVmYXVsdCB4ciBoZWxwZXIKKyAqLwordmFyIFdlYlhSRGVmYXVsdEV4
cGVyaWVuY2VPcHRpb25zID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0
aW9uIFdlYlhSRGVmYXVsdEV4cGVyaWVuY2VPcHRpb25zKCkgeworICAgIH0KKyAgICByZXR1cm4g
V2ViWFJEZWZhdWx0RXhwZXJpZW5jZU9wdGlvbnM7Cit9KCkpOworCisvKioKKyAqIERlZmF1bHQg
ZXhwZXJpZW5jZSB3aGljaCBwcm92aWRlcyBhIHNpbWlsYXIgc2V0dXAgdG8gdGhlIHByZXZpb3Vz
IHdlYlZSRXhwZXJpZW5jZQorICovCit2YXIgV2ViWFJEZWZhdWx0RXhwZXJpZW5jZSA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBXZWJYUkRlZmF1bHRFeHBlcmll
bmNlKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IHhyIGV4
cGVyaWVuY2UKKyAgICAgKiBAcGFyYW0gc2NlbmUgc2NlbmUKKyAgICAgKiBAcGFyYW0gb3B0aW9u
cyBvcHRpb25zIGZvciBiYXNpYyBjb25maWd1cmF0aW9uCisgICAgICogQHJldHVybnMgcmVzdWx0
aW5nIFdlYlhSRGVmYXVsdEV4cGVyaWVuY2UKKyAgICAgKi8KKyAgICBXZWJYUkRlZmF1bHRFeHBl
cmllbmNlLkNyZWF0ZUFzeW5jID0gZnVuY3Rpb24gKHNjZW5lLCBvcHRpb25zKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSBuZXcgV2ViWFJEZWZhdWx0RXhwZXJpZW5jZSgpOworICAgICAgICAvLyBD
cmVhdGUgYmFzZSBleHBlcmllbmNlCisgICAgICAgIHJldHVybiBfd2ViWFJFeHBlcmllbmNlSGVs
cGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldlYlhSRXhwZXJpZW5jZUhlbHBlciJd
LkNyZWF0ZUFzeW5jKHNjZW5lKS50aGVuKGZ1bmN0aW9uICh4ckhlbHBlcikgeworICAgICAgICAg
ICAgcmVzdWx0LmJhc2VFeHBlcmllbmNlID0geHJIZWxwZXI7CisgICAgICAgICAgICAvLyBBZGQg
Y29udHJvbGxlciBzdXBwb3J0CisgICAgICAgICAgICByZXN1bHQuaW5wdXQgPSBuZXcgX3dlYlhS
SW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siV2ViWFJJbnB1dCJdKHhySGVscGVy
KTsKKyAgICAgICAgICAgIHJlc3VsdC5jb250cm9sbGVyTW9kZWxMb2FkZXIgPSBuZXcgX3dlYlhS
Q29udHJvbGxlck1vZGVsTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIldlYlhS
Q29udHJvbGxlck1vZGVsTG9hZGVyIl0ocmVzdWx0LmlucHV0KTsKKyAgICAgICAgICAgIHJlc3Vs
dC5wb2ludGVyU2VsZWN0aW9uID0gbmV3IF93ZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIldlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxl
Y3Rpb24iXShyZXN1bHQuaW5wdXQpOworICAgICAgICAgICAgcmVzdWx0LnRlbGVwb3J0YXRpb24g
PSBuZXcgX3dlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siV2ViWFJDb250cm9sbGVyVGVsZXBvcnRhdGlvbiJdKHJlc3VsdC5pbnB1dCwgb3B0
aW9ucy5mbG9vck1lc2hlcyk7CisgICAgICAgICAgICAvLyBDcmVhdGUgb3V0cHV0IGNhbnZhcyBt
YW5hZ2VyICh0aGlzIGNvbnRyb2xzIHdoZXJlIHRoZSB4ciBmcmFtZXMgd2lsbCBiZSByZW5kZXJl
ZCkKKyAgICAgICAgICAgIHJlc3VsdC5vdXRwdXRDYW52YXMgPSBuZXcgX3dlYlhSTWFuYWdlZE91
dHB1dENhbnZhc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJXZWJYUk1hbmFnZWRPdXRw
dXRDYW52YXMiXSh4ckhlbHBlciwgc2NlbmUuZ2V0RW5naW5lKCkuZ2V0UmVuZGVyaW5nQ2FudmFz
KCkpOworICAgICAgICAgICAgLy8gQ3JlYXRlIHVpIGZvciBlbnRlcmluZy9leGl0aW5nIHhyCisg
ICAgICAgICAgICByZXR1cm4gX3dlYlhSRW50ZXJFeGl0VUlfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzZfX1siV2ViWFJFbnRlckV4aXRVSSJdLkNyZWF0ZUFzeW5jKHNjZW5lLCByZXN1bHQuYmFz
ZUV4cGVyaWVuY2UsIHsgd2ViWFJNYW5hZ2VkT3V0cHV0Q2FudmFzOiByZXN1bHQub3V0cHV0Q2Fu
dmFzIH0pOworICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh1aSkgeworICAgICAgICAgICAgcmVz
dWx0LmVudGVyRXhpdFVJID0gdWk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERJc3Bvc2VzIG9mIHRoZSBleHBlcmllbmNl
IGhlbHBlcgorICAgICAqLworICAgIFdlYlhSRGVmYXVsdEV4cGVyaWVuY2UucHJvdG90eXBlLmRp
c3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLmJhc2VFeHBlcmllbmNlKSB7
CisgICAgICAgICAgICB0aGlzLmJhc2VFeHBlcmllbmNlLmRpc3Bvc2UoKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5pbnB1dCkgeworICAgICAgICAgICAgdGhpcy5pbnB1dC5kaXNwb3Nl
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuZW50ZXJFeGl0VUkpIHsKKyAgICAgICAg
ICAgIHRoaXMuZW50ZXJFeGl0VUkuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLm91dHB1dENhbnZhcykgeworICAgICAgICAgICAgdGhpcy5vdXRwdXRDYW52YXMuZGlzcG9z
ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gV2ViWFJEZWZhdWx0RXhwZXJpZW5j
ZTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9YUi93ZWJYUkVu
dGVyRXhpdFVJLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL0NhbWVyYXMvWFIvd2ViWFJFbnRlckV4aXRVSS50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IFdlYlhSRW50ZXJFeGl0VUlCdXR0b24sIFdlYlhSRW50ZXJFeGl0VUlPcHRpb25zLCBX
ZWJYUkVudGVyRXhpdFVJICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldl
YlhSRW50ZXJFeGl0VUlCdXR0b24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYlhSRW50ZXJFeGl0
VUlCdXR0b247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJFbnRlckV4aXRVSU9wdGlvbnMi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYlhSRW50ZXJFeGl0VUlPcHRpb25zOyB9KTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIldlYlhSRW50ZXJFeGl0VUkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYlhS
RW50ZXJFeGl0VUk7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAi
Li4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29i
c2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJFeHBlcmllbmNl
SGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL3dlYlhSRXhwZXJpZW5jZUhlbHBlciAqLyAiLi9DYW1lcmFzL1hSL3dlYlhSRXhwZXJp
ZW5jZUhlbHBlci50cyIpOworCisKKworLyoqCisgKiBCdXR0b24gd2hpY2ggY2FuIGJlIHVzZWQg
dG8gZW50ZXIgYSBkaWZmZXJlbnQgbW9kZSBvZiBYUgorICovCit2YXIgV2ViWFJFbnRlckV4aXRV
SUJ1dHRvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgV2ViWFJFbnRlckV4aXRVSUJ1dHRvbgorICAgICAqIEBwYXJhbSBlbGVtZW50IGJ1
dHRvbiBlbGVtZW50CisgICAgICogQHBhcmFtIHNlc3Npb25Nb2RlIFhSIGluaXRpYWxpemF0aW9u
IHNlc3Npb24gbW9kZQorICAgICAqIEBwYXJhbSByZWZlcmVuY2VTcGFjZVR5cGUgdGhlIHR5cGUg
b2YgcmVmZXJlbmNlIHNwYWNlIHRvIGJlIHVzZWQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBXZWJY
UkVudGVyRXhpdFVJQnV0dG9uKAorICAgIC8qKiBidXR0b24gZWxlbWVudCAqLworICAgIGVsZW1l
bnQsIAorICAgIC8qKiBYUiBpbml0aWFsaXphdGlvbiBvcHRpb25zIGZvciB0aGUgYnV0dG9uICov
CisgICAgc2Vzc2lvbk1vZGUsIAorICAgIC8qKiBSZWZlcmVuY2Ugc3BhY2UgdHlwZSAqLworICAg
IHJlZmVyZW5jZVNwYWNlVHlwZSkgeworICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50Owor
ICAgICAgICB0aGlzLnNlc3Npb25Nb2RlID0gc2Vzc2lvbk1vZGU7CisgICAgICAgIHRoaXMucmVm
ZXJlbmNlU3BhY2VUeXBlID0gcmVmZXJlbmNlU3BhY2VUeXBlOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBPdmVyd3JpdGFibGUgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIHVzZWQgdG8gdXBkYXRlIHRo
ZSBidXR0b24ncyB2aXN1YWxzIHdoZW4gdGhlIHN0YXRlIGNoYW5nZXMKKyAgICAgKiBAcGFyYW0g
YWN0aXZlQnV0dG9uIHRoZSBjdXJyZW50IGFjdGl2ZSBidXR0b24gaW4gdGhlIFVJCisgICAgICov
CisgICAgV2ViWFJFbnRlckV4aXRVSUJ1dHRvbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24g
KGFjdGl2ZUJ1dHRvbikgeworICAgIH07CisgICAgcmV0dXJuIFdlYlhSRW50ZXJFeGl0VUlCdXR0
b247Cit9KCkpOworCisvKioKKyAqIE9wdGlvbnMgdG8gY3JlYXRlIHRoZSB3ZWJYUiBVSQorICov
Cit2YXIgV2ViWFJFbnRlckV4aXRVSU9wdGlvbnMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisgICAgZnVuY3Rpb24gV2ViWFJFbnRlckV4aXRVSU9wdGlvbnMoKSB7CisgICAgfQorICAg
IHJldHVybiBXZWJYUkVudGVyRXhpdFVJT3B0aW9uczsKK30oKSk7CisKKy8qKgorICogVUkgdG8g
YWxsb3cgdGhlIHVzZXIgdG8gZW50ZXIvZXhpdCBYUiBtb2RlCisgKi8KK3ZhciBXZWJYUkVudGVy
RXhpdFVJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFdlYlhS
RW50ZXJFeGl0VUkoc2NlbmUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9idXR0b25zID0gW107
CisgICAgICAgIHRoaXMuX2FjdGl2ZUJ1dHRvbiA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBGaXJlZCBldmVyeSB0aW1lIHRoZSBhY3RpdmUgYnV0dG9uIGlzIGNoYW5nZWQuCisgICAg
ICAgICAqCisgICAgICAgICAqIFdoZW4geHIgaXMgZW50ZXJlZCB2aWEgYSBidXR0b24gdGhhdCBs
YXVuY2hlcyB4ciB0aGF0IGJ1dHRvbiB3aWxsIGJlIHRoZSBjYWxsYmFjayBwYXJhbWV0ZXIKKyAg
ICAgICAgICoKKyAgICAgICAgICogV2hlbiBleGl0aW5nIHhyIHRoZSBjYWxsYmFjayBwYXJhbWV0
ZXIgd2lsbCBiZSBudWxsKQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5hY3RpdmVCdXR0b25D
aGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0aGlzLl9vdmVybGF5ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIHRoaXMuX292ZXJsYXkuc3R5bGUu
Y3NzVGV4dCA9ICJ6LWluZGV4OjExO3Bvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDIwcHg7Ym90
dG9tOiA1MHB4OyI7CisgICAgICAgIGlmIChvcHRpb25zLmN1c3RvbUJ1dHRvbnMpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2J1dHRvbnMgPSBvcHRpb25zLmN1c3RvbUJ1dHRvbnM7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgaG1kQnRuID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiYnV0dG9uIik7CisgICAgICAgICAgICBobWRCdG4uc3R5bGUuY3NzVGV4dCA9ICJj
b2xvcjogIzg2ODY4NjsgYm9yZGVyLWNvbG9yOiAjODY4Njg2OyBib3JkZXItc3R5bGU6IHNvbGlk
OyBtYXJnaW4tbGVmdDogMTBweDsgaGVpZ2h0OiA1MHB4OyB3aWR0aDogODBweDsgYmFja2dyb3Vu
ZC1jb2xvcjogcmdiYSg1MSw1MSw1MSwwLjcpOyBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7
IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgb3V0bGluZTogbm9uZTsiOworICAgICAgICAg
ICAgaG1kQnRuLmlubmVyVGV4dCA9ICJITUQiOworICAgICAgICAgICAgdGhpcy5fYnV0dG9ucy5w
dXNoKG5ldyBXZWJYUkVudGVyRXhpdFVJQnV0dG9uKGhtZEJ0biwgImltbWVyc2l2ZS12ciIsICJs
b2NhbC1mbG9vciIpKTsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvbnNbdGhpcy5fYnV0dG9ucy5s
ZW5ndGggLSAxXS51cGRhdGUgPSBmdW5jdGlvbiAoYWN0aXZlQnV0dG9uKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAoYWN0aXZlQnV0dG9uID09PSBudWxs
IHx8IGFjdGl2ZUJ1dHRvbiA9PT0gdGhpcykgPyAiIiA6ICJub25lIjsKKyAgICAgICAgICAgICAg
ICB0aGlzLmVsZW1lbnQuaW5uZXJUZXh0ID0gYWN0aXZlQnV0dG9uID09PSB0aGlzID8gIkVYSVQi
IDogIkhNRCI7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdGhpcy5fdXBkYXRlQnV0dG9u
cyhudWxsKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcmVuZGVyQ2FudmFzID0gc2NlbmUuZ2V0
RW5naW5lKCkuZ2V0UmVuZGVyaW5nQ2FudmFzKCk7CisgICAgICAgIGlmIChyZW5kZXJDYW52YXMg
JiYgcmVuZGVyQ2FudmFzLnBhcmVudE5vZGUpIHsKKyAgICAgICAgICAgIHJlbmRlckNhbnZhcy5w
YXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX292ZXJsYXkpOworICAgICAgICAgICAgc2NlbmUu
b25EaXNwb3NlT2JzZXJ2YWJsZS5hZGRPbmNlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICBfdGhpcy5kaXNwb3NlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIFVJIHRvIGFsbG93IHRoZSB1c2VyIHRvIGVudGVyL2V4aXQg
WFIgbW9kZQorICAgICAqIEBwYXJhbSBzY2VuZSB0aGUgc2NlbmUgdG8gYWRkIHRoZSB1aSB0bwor
ICAgICAqIEBwYXJhbSBoZWxwZXIgdGhlIHhyIGV4cGVyaWVuY2UgaGVscGVyIHRvIGVudGVyL2V4
aXQgeHIgd2l0aAorICAgICAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnMgdG8gY29uZmlndXJlIHRo
ZSBVSQorICAgICAqIEByZXR1cm5zIHRoZSBjcmVhdGVkIHVpCisgICAgICovCisgICAgV2ViWFJF
bnRlckV4aXRVSS5DcmVhdGVBc3luYyA9IGZ1bmN0aW9uIChzY2VuZSwgaGVscGVyLCBvcHRpb25z
KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciB1aSA9IG5ldyBXZWJY
UkVudGVyRXhpdFVJKHNjZW5lLCBvcHRpb25zKTsKKyAgICAgICAgdmFyIHN1cHBvcnRlZFByb21p
c2VzID0gdWkuX2J1dHRvbnMubWFwKGZ1bmN0aW9uIChidG4pIHsKKyAgICAgICAgICAgIHJldHVy
biBoZWxwZXIuc2Vzc2lvbk1hbmFnZXIuc3VwcG9ydHNTZXNzaW9uQXN5bmMoYnRuLnNlc3Npb25N
b2RlKTsKKyAgICAgICAgfSk7CisgICAgICAgIGhlbHBlci5vblN0YXRlQ2hhbmdlZE9ic2VydmFi
bGUuYWRkKGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICAgICAgaWYgKHN0YXRlID09IF93ZWJY
UkV4cGVyaWVuY2VIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siV2ViWFJTdGF0
ZSJdLk5PVF9JTl9YUikgeworICAgICAgICAgICAgICAgIHVpLl91cGRhdGVCdXR0b25zKG51bGwp
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UuYWxs
KHN1cHBvcnRlZFByb21pc2VzKS50aGVuKGZ1bmN0aW9uIChyZXN1bHRzKSB7CisgICAgICAgICAg
ICByZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHN1cHBvcnRlZCwgaSkgeworICAgICAgICAgICAg
ICAgIGlmIChzdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdWkuX292ZXJsYXkuYXBw
ZW5kQ2hpbGQodWkuX2J1dHRvbnNbaV0uZWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgIHVp
Ll9idXR0b25zW2ldLmVsZW1lbnQub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXdhaXRlciJdKF90aGlzLCB2b2lkIDAs
IHZvaWQgMCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZ2VuZXJhdG9yIl0odGhpcywgZnVu
Y3Rpb24gKF9hKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJl
bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShoZWxwZXIuc3RhdGUgPT0gX3dlYlhSRXhw
ZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJXZWJYUlN0YXRlIl0u
SU5fWFIpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpLl91cGRhdGVCdXR0b25zKG51bGwpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgaGVscGVyLmV4aXRYUkFzeW5j
KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghKGhlbHBlci5zdGF0ZSA9PSBfd2ViWFJFeHBlcmllbmNlSGVscGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIldlYlhSU3RhdGUiXS5OT1RfSU5fWFIpKSByZXR1cm4gWzMg
LypicmVhayovLCA0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLl91
cGRhdGVCdXR0b25zKHVpLl9idXR0b25zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghb3B0aW9ucy53ZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMpIHJldHVybiBb
MyAvKmJyZWFrKi8sIDRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFs0IC8qeWllbGQqLywgaGVscGVyLmVudGVyWFJBc3luYyh1aS5fYnV0dG9uc1tpXS5zZXNz
aW9uTW9kZSwgdWkuX2J1dHRvbnNbaV0ucmVmZXJlbmNlU3BhY2VUeXBlLCBvcHRpb25zLndlYlhS
TWFuYWdlZE91dHB1dENhbnZhcyldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICB9KTsgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiB1aTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAg
ICBXZWJYUkVudGVyRXhpdFVJLnByb3RvdHlwZS5fdXBkYXRlQnV0dG9ucyA9IGZ1bmN0aW9uIChh
Y3RpdmVCdXR0b24pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5f
YWN0aXZlQnV0dG9uID0gYWN0aXZlQnV0dG9uOworICAgICAgICB0aGlzLl9idXR0b25zLmZvckVh
Y2goZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAgIGIudXBkYXRlKF90aGlzLl9hY3RpdmVCdXR0
b24pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5hY3RpdmVCdXR0b25DaGFuZ2VkT2JzZXJ2
YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcy5fYWN0aXZlQnV0dG9uKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIERpc3Bvc2VzIG9mIHRoZSBvYmplY3QKKyAgICAgKi8KKyAgICBXZWJYUkVudGVy
RXhpdFVJLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcmVu
ZGVyQ2FudmFzID0gdGhpcy5zY2VuZS5nZXRFbmdpbmUoKS5nZXRSZW5kZXJpbmdDYW52YXMoKTsK
KyAgICAgICAgaWYgKHJlbmRlckNhbnZhcyAmJiByZW5kZXJDYW52YXMucGFyZW50Tm9kZSAmJiBy
ZW5kZXJDYW52YXMucGFyZW50Tm9kZS5jb250YWlucyh0aGlzLl9vdmVybGF5KSkgeworICAgICAg
ICAgICAgcmVuZGVyQ2FudmFzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fb3ZlcmxheSk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5hY3RpdmVCdXR0b25DaGFuZ2VkT2JzZXJ2YWJsZS5j
bGVhcigpOworICAgIH07CisgICAgcmV0dXJuIFdlYlhSRW50ZXJFeGl0VUk7Cit9KCkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvWFIvd2ViWFJFeHBlcmllbmNlSGVscGVy
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vQ2FtZXJhcy9YUi93ZWJYUkV4cGVyaWVuY2VIZWxwZXIudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFdlYlhSU3RhdGUsIFdlYlhSRXhwZXJpZW5jZUhlbHBlciAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUlN0YXRlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBXZWJYUlN0YXRlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSRXhwZXJpZW5jZUhl
bHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViWFJFeHBlcmllbmNlSGVscGVyOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFi
bGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRo
LnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYWJzdHJhY3RN
ZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NZXNoZXMvYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1lc2gudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJTZXNzaW9uTWFuYWdlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUlNl
c3Npb25NYW5hZ2VyICovICIuL0NhbWVyYXMvWFIvd2ViWFJTZXNzaW9uTWFuYWdlci50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJYUkNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUkNhbWVyYSAqLyAiLi9D
YW1lcmFzL1hSL3dlYlhSQ2FtZXJhLnRzIik7CisKKworCisKKworLyoqCisgKiBTdGF0ZXMgb2Yg
dGhlIHdlYlhSIGV4cGVyaWVuY2UKKyAqLwordmFyIFdlYlhSU3RhdGU7CisoZnVuY3Rpb24gKFdl
YlhSU3RhdGUpIHsKKyAgICAvKioKKyAgICAgKiBUcmFuc2l0aW9uaW5nIHRvIGJlaW5nIGluIFhS
IG1vZGUKKyAgICAgKi8KKyAgICBXZWJYUlN0YXRlW1dlYlhSU3RhdGVbIkVOVEVSSU5HX1hSIl0g
PSAwXSA9ICJFTlRFUklOR19YUiI7CisgICAgLyoqCisgICAgICogVHJhbnNpdGlvbmluZyB0byBu
b24gWFIgbW9kZQorICAgICAqLworICAgIFdlYlhSU3RhdGVbV2ViWFJTdGF0ZVsiRVhJVElOR19Y
UiJdID0gMV0gPSAiRVhJVElOR19YUiI7CisgICAgLyoqCisgICAgICogSW4gWFIgbW9kZSBhbmQg
cHJlc2VudGluZworICAgICAqLworICAgIFdlYlhSU3RhdGVbV2ViWFJTdGF0ZVsiSU5fWFIiXSA9
IDJdID0gIklOX1hSIjsKKyAgICAvKioKKyAgICAgKiBOb3QgZW50ZXJlZCBYUiBtb2RlCisgICAg
ICovCisgICAgV2ViWFJTdGF0ZVtXZWJYUlN0YXRlWyJOT1RfSU5fWFIiXSA9IDNdID0gIk5PVF9J
Tl9YUiI7Cit9KShXZWJYUlN0YXRlIHx8IChXZWJYUlN0YXRlID0ge30pKTsKKy8qKgorICogQmFz
ZSBzZXQgb2YgZnVuY3Rpb25hbGl0eSBuZWVkZWQgdG8gY3JlYXRlIGFuIFhSIGV4cGVyaW5jZSAo
V2ViWFJTZXNzaW9uTWFuYWdlciwgQ2FtZXJhLCBTdGF0ZU1hbmFnZW1lbnQsIGV0Yy4pCisgKiBA
c2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3dlYnhyCisgKi8KK3ZhciBXZWJY
UkV4cGVyaWVuY2VIZWxwZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIFdlYlhSRXhwZXJpZW5jZUhlbHBlcgorICAgICAqIEBwYXJhbSBz
Y2VuZSBUaGUgc2NlbmUgdGhlIGhlbHBlciBzaG91bGQgYmUgY3JlYXRlZCBpbgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIFdlYlhSRXhwZXJpZW5jZUhlbHBlcihzY2VuZSkgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgWFIgZXhwZXJpZW5jZSAoZWcuIHRy
YW5zaXRpb25pbmcsIGluIFhSIG9yIG5vdCBpbiBYUikKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuc3RhdGUgPSBXZWJYUlN0YXRlLk5PVF9JTl9YUjsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEZpcmVzIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBleHBlcmllbmNlIGhlbHBlciBoYXMgY2hhbmdl
ZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vblN0YXRlQ2hhbmdlZE9ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgdGhpcy5fbm9uVlJDYW1lcmEgPSBudWxsOworICAgICAgICB0aGlz
Ll9vcmlnaW5hbFNjZW5lQXV0b0NsZWFyID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc3VwcG9ydGVk
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuY2FtZXJhID0gbmV3IF93ZWJYUkNhbWVyYV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJXZWJYUkNhbWVyYSJdKCIiLCBzY2VuZSk7CisgICAgICAg
IHRoaXMuc2Vzc2lvbk1hbmFnZXIgPSBuZXcgX3dlYlhSU2Vzc2lvbk1hbmFnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siV2ViWFJTZXNzaW9uTWFuYWdlciJdKHNjZW5lKTsKKyAgICAg
ICAgdGhpcy5jb250YWluZXIgPSBuZXcgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siQWJzdHJhY3RNZXNoIl0oIldlYlhSIENvbnRhaW5lciIsIHNjZW5l
KTsKKyAgICAgICAgdGhpcy5jYW1lcmEucGFyZW50ID0gdGhpcy5jb250YWluZXI7CisgICAgICAg
IHNjZW5lLm9uRGlzcG9zZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IF90aGlzLmV4aXRYUkFzeW5jKCk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBXZWJYUkV4cGVy
aWVuY2VIZWxwZXIucHJvdG90eXBlLl9zZXRTdGF0ZSA9IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAg
ICAgdGhpcy5zdGF0ZSA9IHZhbDsKKyAgICAgICAgdGhpcy5vblN0YXRlQ2hhbmdlZE9ic2VydmFi
bGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMuc3RhdGUpOworICAgIH07CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyB0aGUgZXhwZXJpZW5jZSBoZWxwZXIKKyAgICAgKiBAcGFyYW0gc2NlbmUgdGhlIHNj
ZW5lIHRvIGF0dGFjaCB0aGUgZXhwZXJpZW5jZSBoZWxwZXIgdG8KKyAgICAgKiBAcmV0dXJucyBh
IHByb21pc2UgZm9yIHRoZSBleHBlcmllbmNlIGhlbHBlcgorICAgICAqLworICAgIFdlYlhSRXhw
ZXJpZW5jZUhlbHBlci5DcmVhdGVBc3luYyA9IGZ1bmN0aW9uIChzY2VuZSkgeworICAgICAgICB2
YXIgaGVscGVyID0gbmV3IFdlYlhSRXhwZXJpZW5jZUhlbHBlcihzY2VuZSk7CisgICAgICAgIHJl
dHVybiBoZWxwZXIuc2Vzc2lvbk1hbmFnZXIuaW5pdGlhbGl6ZUFzeW5jKCkudGhlbihmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBoZWxwZXIuX3N1cHBvcnRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gaGVscGVyOworICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gaGVscGVyOworICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEV4aXRzIFhSIG1vZGUgYW5kIHJldHVybnMgdGhlIHNjZW5lIHRvIGl0cyBvcmlnaW5hbCBzdGF0
ZQorICAgICAqIEByZXR1cm5zIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB4ciBtb2RlIGhh
cyBleGl0ZWQKKyAgICAgKi8KKyAgICBXZWJYUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLmV4
aXRYUkFzeW5jID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9zZXRTdGF0ZShXZWJYUlN0
YXRlLkVYSVRJTkdfWFIpOworICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uTWFuYWdlci5leGl0
WFJBc3luYygpOworICAgIH07CisgICAgLyoqCisgICAgICogRW50ZXJzIFhSIG1vZGUgKFRoaXMg
bXVzdCBiZSBkb25lIHdpdGhpbiBhIHVzZXIgaW50ZXJhY3Rpb24gaW4gbW9zdCBicm93c2VycyBl
Zy4gYnV0dG9uIGNsaWNrKQorICAgICAqIEBwYXJhbSBzZXNzaW9uQ3JlYXRpb25PcHRpb25zIG9w
dGlvbnMgZm9yIHRoZSBYUiBzZXNzaW9uCisgICAgICogQHBhcmFtIHJlZmVyZW5jZVNwYWNlVHlw
ZSBmcmFtZSBvZiByZWZlcmVuY2Ugb2YgdGhlIFhSIHNlc3Npb24KKyAgICAgKiBAcGFyYW0gb3V0
cHV0Q2FudmFzIHRoZSBvdXRwdXQgY2FudmFzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGVudGVyIFhS
IG1vZGUKKyAgICAgKiBAcmV0dXJucyBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgeHIgbW9k
ZSBoYXMgZW50ZXJlZAorICAgICAqLworICAgIFdlYlhSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5
cGUuZW50ZXJYUkFzeW5jID0gZnVuY3Rpb24gKHNlc3Npb25DcmVhdGlvbk9wdGlvbnMsIHJlZmVy
ZW5jZVNwYWNlVHlwZSwgb3V0cHV0Q2FudmFzKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGlmICghdGhpcy5fc3VwcG9ydGVkKSB7CisgICAgICAgICAgICB0aHJvdyAiWFIg
c2Vzc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciI7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fc2V0U3RhdGUoV2ViWFJTdGF0ZS5FTlRFUklOR19YUik7CisgICAgICAgIHJldHVy
biB0aGlzLnNlc3Npb25NYW5hZ2VyLmluaXRpYWxpemVTZXNzaW9uQXN5bmMoc2Vzc2lvbkNyZWF0
aW9uT3B0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMu
c2Vzc2lvbk1hbmFnZXIuc2V0UmVmZXJlbmNlU3BhY2VBc3luYyhyZWZlcmVuY2VTcGFjZVR5cGUp
OworICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBvdXRw
dXRDYW52YXMuaW5pdGlhbGl6ZVhSTGF5ZXJBc3luYyhfdGhpcy5zZXNzaW9uTWFuYWdlci5zZXNz
aW9uKTsKKyAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
X3RoaXMuc2Vzc2lvbk1hbmFnZXIudXBkYXRlUmVuZGVyU3RhdGVBc3luYyh7IGRlcHRoRmFyOiBf
dGhpcy5jYW1lcmEubWF4WiwgZGVwdGhOZWFyOiBfdGhpcy5jYW1lcmEubWluWiwgYmFzZUxheWVy
OiBvdXRwdXRDYW52YXMueHJMYXllciB9KTsKKyAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuc2Vzc2lvbk1hbmFnZXIuc3RhcnRSZW5kZXJpbmdU
b1hSQXN5bmMoKTsKKyAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAv
LyBDYWNoZSBwcmUgeHIgc2NlbmUgc2V0dGluZ3MKKyAgICAgICAgICAgIF90aGlzLl9vcmlnaW5h
bFNjZW5lQXV0b0NsZWFyID0gX3RoaXMuc2NlbmUuYXV0b0NsZWFyOworICAgICAgICAgICAgX3Ro
aXMuX25vblZSQ2FtZXJhID0gX3RoaXMuc2NlbmUuYWN0aXZlQ2FtZXJhOworICAgICAgICAgICAg
Ly8gT3ZlcndyaXRlIGN1cnJlbnQgc2NlbmUgc2V0dGluZ3MKKyAgICAgICAgICAgIF90aGlzLnNj
ZW5lLmF1dG9DbGVhciA9IGZhbHNlOworICAgICAgICAgICAgX3RoaXMuc2NlbmUuYWN0aXZlQ2Ft
ZXJhID0gX3RoaXMuY2FtZXJhOworICAgICAgICAgICAgX3RoaXMuc2Vzc2lvbk1hbmFnZXIub25Y
UkZyYW1lT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlz
LmNhbWVyYS51cGRhdGVGcm9tWFJTZXNzaW9uTWFuYWdlcihfdGhpcy5zZXNzaW9uTWFuYWdlcik7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIF90aGlzLnNlc3Npb25NYW5hZ2VyLm9uWFJT
ZXNzaW9uRW5kZWQuYWRkT25jZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy8gUmVz
ZXQgY2FtZXJhIHJpZ3Mgb3V0cHV0IHJlbmRlciB0YXJnZXQgdG8gZW5zdXJlIHNlc3Npb25zIHJl
bmRlciB0YXJnZXQgaXMgbm90IGRyYXduIGFmdGVyIGl0IGVuZHMKKyAgICAgICAgICAgICAgICBf
dGhpcy5jYW1lcmEucmlnQ2FtZXJhcy5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7CisgICAgICAgICAg
ICAgICAgICAgIGMub3V0cHV0UmVuZGVyVGFyZ2V0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIHNjZW5lIHNldHRpbmdzCisgICAgICAgICAg
ICAgICAgX3RoaXMuc2NlbmUuYXV0b0NsZWFyID0gX3RoaXMuX29yaWdpbmFsU2NlbmVBdXRvQ2xl
YXI7CisgICAgICAgICAgICAgICAgX3RoaXMuc2NlbmUuYWN0aXZlQ2FtZXJhID0gX3RoaXMuX25v
blZSQ2FtZXJhOworICAgICAgICAgICAgICAgIF90aGlzLl9zZXRTdGF0ZShXZWJYUlN0YXRlLk5P
VF9JTl9YUik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgdGhl
IGZpcnN0IGZyYW1lIGFycml2ZXMgYmVmb3JlIHNldHRpbmcgc3RhdGUgdG8gaW4geHIKKyAgICAg
ICAgICAgIF90aGlzLnNlc3Npb25NYW5hZ2VyLm9uWFJGcmFtZU9ic2VydmFibGUuYWRkT25jZShm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3NldFN0YXRlKFdlYlhSU3RhdGUu
SU5fWFIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7
CisgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKGUu
bWVzc2FnZSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0
aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgYnkgbW92aW5nIHRoZSBjYW1lcmEncyBj
b250YWluZXIKKyAgICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgbW9kaWZ5aW5n
IHRoZSBjYW1lcmEncyBwb3NpdGlvbiBhcyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGFuIHhy
U2Vzc2lvbnMncyB1cGRhdGUgZnJhbWUKKyAgICAgKiBAcGFyYW0gcG9zaXRpb24gVGhlIGRlc2ly
ZWQgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEKKyAgICAgKi8KKyAgICBXZWJYUkV4cGVy
aWVuY2VIZWxwZXIucHJvdG90eXBlLnNldFBvc2l0aW9uT2ZDYW1lcmFVc2luZ0NvbnRhaW5lciA9
IGZ1bmN0aW9uIChwb3NpdGlvbikgeworICAgICAgICB0aGlzLmNhbWVyYS5nbG9iYWxQb3NpdGlv
bi5zdWJ0cmFjdFRvUmVmKHBvc2l0aW9uLCBXZWJYUkV4cGVyaWVuY2VIZWxwZXIuX1RtcFZlY3Rv
cik7CisgICAgICAgIHRoaXMuY29udGFpbmVyLnBvc2l0aW9uLnN1YnRyYWN0SW5QbGFjZShXZWJY
UkV4cGVyaWVuY2VIZWxwZXIuX1RtcFZlY3Rvcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
b3RhdGVzIHRoZSB4ciBjYW1lcmEgYnkgcm90YXRpbmcgdGhlIGNhbWVyYSdzIGNvbnRhaW5lciBh
cm91bmQgdGhlIGNhbWVyYSdzIHBvc2l0aW9uCisgICAgICogVGhpcyBzaG91bGQgYmUgdXNlZCBp
bnN0ZWFkIG9mIG1vZGlmeWluZyB0aGUgY2FtZXJhJ3Mgcm90YXRpb24gYXMgaXQgd2lsbCBiZSBv
dmVyd3JpdHRlbiBieSBhbiB4clNlc3Npb25zJ3MgdXBkYXRlIGZyYW1lCisgICAgICogQHBhcmFt
IHJvdGF0aW9uIHRoZSBkZXNpcmVkIHF1YXRlcm5pb24gcm90YXRpb24gdG8gYXBwbHkgdG8gdGhl
IGNhbWVyYQorICAgICAqLworICAgIFdlYlhSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUucm90
YXRlQ2FtZXJhQnlRdWF0ZXJuaW9uVXNpbmdDb250YWluZXIgPSBmdW5jdGlvbiAocm90YXRpb24p
IHsKKyAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5lci5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAg
ICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJvdGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl0uRnJvbUV1
bGVyVmVjdG9yKHRoaXMuY29udGFpbmVyLnJvdGF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLmNvbnRhaW5lci5yb3RhdGlvblF1YXRlcm5pb24ubXVsdGlwbHlJblBsYWNlKHJvdGF0aW9u
KTsKKyAgICAgICAgdGhpcy5jb250YWluZXIucG9zaXRpb24ucm90YXRlQnlRdWF0ZXJuaW9uQXJv
dW5kUG9pbnRUb1JlZihyb3RhdGlvbiwgdGhpcy5jYW1lcmEuZ2xvYmFsUG9zaXRpb24sIHRoaXMu
Y29udGFpbmVyLnBvc2l0aW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIG9m
IHRoZSBleHBlcmllbmNlIGhlbHBlcgorICAgICAqLworICAgIFdlYlhSRXhwZXJpZW5jZUhlbHBl
ci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5jYW1lcmEu
ZGlzcG9zZSgpOworICAgICAgICB0aGlzLmNvbnRhaW5lci5kaXNwb3NlKCk7CisgICAgICAgIHRo
aXMub25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMuc2Vzc2lv
bk1hbmFnZXIuZGlzcG9zZSgpOworICAgIH07CisgICAgV2ViWFJFeHBlcmllbmNlSGVscGVyLl9U
bXBWZWN0b3IgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlZlY3RvcjMiXSgpOworICAgIHJldHVybiBXZWJYUkV4cGVyaWVuY2VIZWxwZXI7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvWFIvd2ViWFJJbnB1dC50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9D
YW1lcmFzL1hSL3dlYlhSSW5wdXQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBXZWJYUklucHV0ICovCisvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIFdlYlhSSW5wdXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2Vy
dmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJFeHBlcmllbmNlSGVscGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3dlYlhSRXhwZXJp
ZW5jZUhlbHBlciAqLyAiLi9DYW1lcmFzL1hSL3dlYlhSRXhwZXJpZW5jZUhlbHBlci50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJYUkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2ViWFJDb250cm9sbGVy
ICovICIuL0NhbWVyYXMvWFIvd2ViWFJDb250cm9sbGVyLnRzIik7CisKKworCisvKioKKyAqIFhS
IGlucHV0IHVzZWQgdG8gdHJhY2sgWFIgaW5wdXRzIHN1Y2ggYXMgY29udHJvbGxlcnMvcmF5cwor
ICovCit2YXIgV2ViWFJJbnB1dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAv
KioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUgV2ViWFJJbnB1dAorICAgICAqIEBwYXJhbSBiYXNl
RXhwZXJpZW5jZSBleHBlcmllbmNlIGhlbHBlciB3aGljaCB0aGUgaW5wdXQgc2hvdWxkIGJlIGNy
ZWF0ZWQgZm9yCisgICAgICovCisgICAgZnVuY3Rpb24gV2ViWFJJbnB1dCgKKyAgICAvKioKKyAg
ICAgKiBCYXNlIGV4cGVyaWVuY2UgdGhlIGlucHV0IGxpc3RlbnMgdG8KKyAgICAgKi8KKyAgICBi
YXNlRXhwZXJpZW5jZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlz
LmJhc2VFeHBlcmllbmNlID0gYmFzZUV4cGVyaWVuY2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBYUiBjb250cm9sbGVycyBiZWluZyB0cmFja2VkCisgICAgICAgICAqLworICAgICAgICB0aGlz
LmNvbnRyb2xsZXJzID0gW107CisgICAgICAgIC8qKgorICAgICAgICAgKiBFdmVudCB3aGVuIGEg
Y29udHJvbGxlciBoYXMgYmVlbiBjb25uZWN0ZWQvYWRkZWQKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMub25Db250cm9sbGVyQWRkZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBFdmVudCB3aGVuIGEgY29udHJvbGxlciBoYXMgYmVlbiByZW1vdmVkL2Rp
c2Nvbm5lY3RlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkNvbnRyb2xsZXJSZW1vdmVk
T2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0aGlzLl9vbklucHV0U291cmNlc0NoYW5n
ZSA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgX3RoaXMuX2FkZEFuZFJlbW92ZUNv
bnRyb2xsZXJzKGV2ZW50LmFkZGVkLCBldmVudC5yZW1vdmVkKTsKKyAgICAgICAgfTsKKyAgICAg
ICAgLy8gUmVtb3ZlIGNvbnRyb2xsZXJzIHdoZW4gZXhpdGluZyBYUgorICAgICAgICB0aGlzLl9z
dGF0ZU9ic2VydmVyID0gYmFzZUV4cGVyaWVuY2Uub25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlLmFk
ZChmdW5jdGlvbiAocykgeworICAgICAgICAgICAgaWYgKHMgPT09IF93ZWJYUkV4cGVyaWVuY2VI
ZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siV2ViWFJTdGF0ZSJdLk5PVF9JTl9Y
UikgeworICAgICAgICAgICAgICAgIF90aGlzLl9hZGRBbmRSZW1vdmVDb250cm9sbGVycyhbXSwg
X3RoaXMuY29udHJvbGxlcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmlucHV0U291cmNl
OyB9KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9mcmFtZU9i
c2VydmVyID0gYmFzZUV4cGVyaWVuY2Uuc2Vzc2lvbk1hbmFnZXIub25YUkZyYW1lT2JzZXJ2YWJs
ZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCFiYXNlRXhwZXJpZW5jZS5zZXNz
aW9uTWFuYWdlci5jdXJyZW50RnJhbWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBTdGFydCBsaXN0aW5nIHRvIGlucHV0IGFkZC9yZW1v
dmUgZXZlbnQKKyAgICAgICAgICAgIGlmIChfdGhpcy5jb250cm9sbGVycy5sZW5ndGggPT0gMCAm
JiBiYXNlRXhwZXJpZW5jZS5zZXNzaW9uTWFuYWdlci5zZXNzaW9uLmlucHV0U291cmNlcykgewor
ICAgICAgICAgICAgICAgIF90aGlzLl9hZGRBbmRSZW1vdmVDb250cm9sbGVycyhiYXNlRXhwZXJp
ZW5jZS5zZXNzaW9uTWFuYWdlci5zZXNzaW9uLmlucHV0U291cmNlcywgW10pOworICAgICAgICAg
ICAgICAgIGJhc2VFeHBlcmllbmNlLnNlc3Npb25NYW5hZ2VyLnNlc3Npb24uYWRkRXZlbnRMaXN0
ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIiwgX3RoaXMuX29uSW5wdXRTb3VyY2VzQ2hhbmdlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFVwZGF0ZSBjb250cm9sbGVyIHBvc2UgaW5m
bworICAgICAgICAgICAgX3RoaXMuY29udHJvbGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoY29udHJv
bGxlcikgeworICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIudXBkYXRlRnJvbVhSRnJhbWUoYmFz
ZUV4cGVyaWVuY2Uuc2Vzc2lvbk1hbmFnZXIuY3VycmVudEZyYW1lLCBiYXNlRXhwZXJpZW5jZS5z
ZXNzaW9uTWFuYWdlci5yZWZlcmVuY2VTcGFjZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSk7CisgICAgfQorICAgIFdlYlhSSW5wdXQucHJvdG90eXBlLl9hZGRBbmRSZW1vdmVDb250cm9s
bGVycyA9IGZ1bmN0aW9uIChhZGRJbnB1dHMsIHJlbW92ZUlucHV0cykgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICAvLyBBZGQgY29udHJvbGxlcnMgaWYgdGhleSBkb24ndCBh
bHJlYWR5IGV4aXN0CisgICAgICAgIHZhciBzb3VyY2VzID0gdGhpcy5jb250cm9sbGVycy5tYXAo
ZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMuaW5wdXRTb3VyY2U7IH0pOworICAgICAgICBmb3IgKHZh
ciBfaSA9IDAsIGFkZElucHV0c18xID0gYWRkSW5wdXRzOyBfaSA8IGFkZElucHV0c18xLmxlbmd0
aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGlucHV0ID0gYWRkSW5wdXRzXzFbX2ldOworICAg
ICAgICAgICAgaWYgKHNvdXJjZXMuaW5kZXhPZihpbnB1dCkgPT09IC0xKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgX3dlYlhSQ29udHJvbGxlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJXZWJYUkNvbnRyb2xsZXIiXSh0aGlzLmJhc2VFeHBlcmllbmNlLmNh
bWVyYS5fc2NlbmUsIGlucHV0LCB0aGlzLmJhc2VFeHBlcmllbmNlLmNvbnRhaW5lcik7CisgICAg
ICAgICAgICAgICAgdGhpcy5jb250cm9sbGVycy5wdXNoKGNvbnRyb2xsZXIpOworICAgICAgICAg
ICAgICAgIHRoaXMub25Db250cm9sbGVyQWRkZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhj
b250cm9sbGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBSZW1vdmUg
YW5kIGRpc3Bvc2Ugb2YgY29udHJvbGxlcnMgdG8gYmUgZGlzcG9zZWQKKyAgICAgICAgdmFyIGtl
ZXBDb250cm9sbGVycyA9IFtdOworICAgICAgICB2YXIgcmVtb3ZlZENvbnRyb2xsZXJzID0gW107
CisgICAgICAgIHRoaXMuY29udHJvbGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoYykgeworICAgICAg
ICAgICAgaWYgKHJlbW92ZUlucHV0cy5pbmRleE9mKGMuaW5wdXRTb3VyY2UpID09PSAtMSkgewor
ICAgICAgICAgICAgICAgIGtlZXBDb250cm9sbGVycy5wdXNoKGMpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlZENvbnRyb2xsZXJzLnB1
c2goYyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0aGlzLmNvbnRyb2xs
ZXJzID0ga2VlcENvbnRyb2xsZXJzOworICAgICAgICByZW1vdmVkQ29udHJvbGxlcnMuZm9yRWFj
aChmdW5jdGlvbiAoYykgeworICAgICAgICAgICAgX3RoaXMub25Db250cm9sbGVyUmVtb3ZlZE9i
c2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGMpOworICAgICAgICAgICAgYy5kaXNwb3NlKCk7Cisg
ICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIG9iamVj
dAorICAgICAqLworICAgIFdlYlhSSW5wdXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRoaXMuY29udHJvbGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoYykgeworICAg
ICAgICAgICAgYy5kaXNwb3NlKCk7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLmJhc2VFeHBl
cmllbmNlLnNlc3Npb25NYW5hZ2VyLm9uWFJGcmFtZU9ic2VydmFibGUucmVtb3ZlKHRoaXMuX2Zy
YW1lT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLmJhc2VFeHBlcmllbmNlLm9uU3RhdGVDaGFuZ2Vk
T2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fc3RhdGVPYnNlcnZlcik7CisgICAgfTsKKyAgICByZXR1
cm4gV2ViWFJJbnB1dDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJh
cy9YUi93ZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL1hSL3dl
YlhSTWFuYWdlZE91dHB1dENhbnZhcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogV2ViWFJN
YW5hZ2VkT3V0cHV0Q2FudmFzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IldlYlhSTWFuYWdlZE91dHB1dENhbnZhcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViWFJNYW5h
Z2VkT3V0cHV0Q2FudmFzOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJFeHBl
cmllbmNlSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3dlYlhSRXhwZXJpZW5jZUhlbHBlciAqLyAiLi9DYW1lcmFzL1hSL3dlYlhS
RXhwZXJpZW5jZUhlbHBlci50cyIpOworCisvKioKKyAqIENyZWF0ZXMgYSBjYW52YXMgdGhhdCBp
cyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIHdlYnBhZ2Ugd2hlbiBlbnRlcmluZy9leGl0aW5nIFhS
CisgKi8KK3ZhciBXZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIGNhbnZhcyB0byBiZSBh
ZGRlZC9yZW1vdmVkIHVwb24gZW50ZXJpbmcvZXhpdGluZyB4cgorICAgICAqIEBwYXJhbSBoZWxw
ZXIgdGhlIHhyIGV4cGVyaWVuY2UgaGVscGVyIHVzZWQgdG8gdHJpZ2dlciBhZGRpbmcvcmVtb3Zp
bmcgb2YgdGhlIGNhbnZhcworICAgICAqIEBwYXJhbSBjYW52YXMgVGhlIGNhbnZhcyB0byBiZSBh
ZGRlZC9yZW1vdmVkIChJZiBub3Qgc3BlY2lmaWVkIGEgZnVsbCBzY3JlZW4gY2FudmFzIHdpbGwg
YmUgY3JlYXRlZCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBXZWJYUk1hbmFnZWRPdXRwdXRDYW52
YXMoaGVscGVyLCBjYW52YXMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
dGhpcy5oZWxwZXIgPSBoZWxwZXI7CisgICAgICAgIHRoaXMuX2NhbnZhcyA9IG51bGw7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiB4ciBsYXllciBmb3IgdGhlIGNhbnZhcworICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy54ckxheWVyID0gbnVsbDsKKyAgICAgICAgaWYgKCFjYW52YXMpIHsKKyAg
ICAgICAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOworICAg
ICAgICAgICAgY2FudmFzLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJzb2x1dGU7IGJvdHRv
bTowcHg7cmlnaHQ6MHB4O3otaW5kZXg6MTA7d2lkdGg6OTAlO2hlaWdodDoxMDAlO2JhY2tncm91
bmQtY29sb3I6ICMwMDAwMDA7IjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zZXRNYW5hZ2Vk
T3V0cHV0Q2FudmFzKGNhbnZhcyk7CisgICAgICAgIGhlbHBlci5vblN0YXRlQ2hhbmdlZE9ic2Vy
dmFibGUuYWRkKGZ1bmN0aW9uIChzdGF0ZUluZm8pIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZUlu
Zm8gPT0gX3dlYlhSRXhwZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJXZWJYUlN0YXRlIl0uRU5URVJJTkdfWFIpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgY2Fu
dmFzIGlzIGFkZGVkIHRvIHRoZSBzY3JlZW4gYmVmb3JlIGVudGVyaW5nIFhSIGJlY2F1c2UgY3Vy
cmVudGx5IHRoZSB4ciBzZXNzaW9uIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2hpbGUgdGhlIGNhbnZh
cyBpcyBhZGRlZCByZW5kZXIgcHJvcGVybHkKKyAgICAgICAgICAgICAgICBfdGhpcy5fYWRkQ2Fu
dmFzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChoZWxwZXIuc3RhdGUg
PT0gX3dlYlhSRXhwZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJX
ZWJYUlN0YXRlIl0uTk9UX0lOX1hSKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3JlbW92ZUNh
bnZhcygpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisgICAgLyoqCisgICAg
ICogSW5pdGlhbGl6ZXMgdGhlIHhyIGxheWVyIGZvciB0aGUgc2Vzc2lvbgorICAgICAqIEBwYXJh
bSB4clNlc3Npb24geHIgc2Vzc2lvbgorICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdp
bGwgcmVzb2x2ZSBvbmNlIHRoZSBYUiBMYXllciBoYXMgYmVlbiBjcmVhdGVkCisgICAgICovCisg
ICAgV2ViWFJNYW5hZ2VkT3V0cHV0Q2FudmFzLnByb3RvdHlwZS5pbml0aWFsaXplWFJMYXllckFz
eW5jID0gZnVuY3Rpb24gKHhyU2Vzc2lvbikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICByZXR1cm4gdGhpcy5jYW52YXNDb250ZXh0Lm1ha2VYUkNvbXBhdGlibGUoKS50aGVu
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLnhyTGF5ZXIgPSBuZXcgWFJXZWJHTExh
eWVyKHhyU2Vzc2lvbiwgX3RoaXMuY2FudmFzQ29udGV4dCk7CisgICAgICAgIH0pOworICAgIH07
CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIG9iamVjdAorICAgICAqLworICAgIFdl
YlhSTWFuYWdlZE91dHB1dENhbnZhcy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGhpcy5fcmVtb3ZlQ2FudmFzKCk7CisgICAgICAgIHRoaXMuX3NldE1hbmFnZWRP
dXRwdXRDYW52YXMobnVsbCk7CisgICAgfTsKKyAgICBXZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMu
cHJvdG90eXBlLl9zZXRNYW5hZ2VkT3V0cHV0Q2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcykgewor
ICAgICAgICB0aGlzLl9yZW1vdmVDYW52YXMoKTsKKyAgICAgICAgaWYgKCFjYW52YXMpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2NhbnZhcyA9IG51bGw7CisgICAgICAgICAgICB0aGlzLmNhbnZhc0Nv
bnRleHQgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhp
cy5fY2FudmFzID0gY2FudmFzOworICAgICAgICAgICAgdGhpcy5jYW52YXNDb250ZXh0ID0gdGhp
cy5fY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJyk7CisgICAgICAgICAgICBpZiAoIXRoaXMuY2Fu
dmFzQ29udGV4dCkgeworICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzQ29udGV4dCA9IHRoaXMu
X2NhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbDInKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisgICAgV2ViWFJNYW5hZ2VkT3V0cHV0Q2FudmFzLnByb3RvdHlwZS5fYWRkQ2FudmFz
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fY2FudmFzICYmIHRoaXMuX2NhbnZh
cyAhPT0gdGhpcy5oZWxwZXIuY29udGFpbmVyLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuZ2V0UmVu
ZGVyaW5nQ2FudmFzKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
dGhpcy5fY2FudmFzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgV2ViWFJNYW5hZ2VkT3V0cHV0
Q2FudmFzLnByb3RvdHlwZS5fcmVtb3ZlQ2FudmFzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAodGhpcy5fY2FudmFzICYmIGRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5fY2FudmFzKSAm
JiB0aGlzLl9jYW52YXMgIT09IHRoaXMuaGVscGVyLmNvbnRhaW5lci5nZXRTY2VuZSgpLmdldEVu
Z2luZSgpLmdldFJlbmRlcmluZ0NhbnZhcygpKSB7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5
LnJlbW92ZUNoaWxkKHRoaXMuX2NhbnZhcyk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVy
biBXZWJYUk1hbmFnZWRPdXRwdXRDYW52YXM7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL0NhbWVyYXMvWFIvd2ViWFJTZXNzaW9uTWFuYWdlci50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL1hS
L3dlYlhSU2Vzc2lvbk1hbmFnZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBXZWJYUlNlc3Npb25N
YW5hZ2VyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSU2Vzc2lv
bk1hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYlhSU2Vzc2lvbk1hbmFnZXI7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9sb2dnZXIgKi8g
Ii4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNl
cnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9UZXh0dXJlcy9pbnRlcm5hbFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxz
L1RleHR1cmVzL2ludGVybmFsVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1Rl
eHR1cmVzL3JlbmRlclRhcmdldFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRl
clRhcmdldFRleHR1cmUudHMiKTsKKworCisKKworLyoqCisgKiBNYW5hZ2VzIGFuIFhSU2Vzc2lv
biB0byB3b3JrIHdpdGggQmFieWxvbidzIGVuZ2luZQorICogQHNlZSBodHRwczovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by93ZWJ4cgorICovCit2YXIgV2ViWFJTZXNzaW9uTWFuYWdlciA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEg
V2ViWFJTZXNzaW9uTWFuYWdlciwgdGhpcyBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGhpbiBhIHVz
ZXIgYWN0aW9uIGJlZm9yZSB1c2FnZQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgd2hp
Y2ggdGhlIHNlc3Npb24gc2hvdWxkIGJlIGNyZWF0ZWQgZm9yCisgICAgICovCisgICAgZnVuY3Rp
b24gV2ViWFJTZXNzaW9uTWFuYWdlcihzY2VuZSkgeworICAgICAgICB0aGlzLnNjZW5lID0gc2Nl
bmU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlcyBldmVyeSB0aW1lIGEgbmV3IHhyRnJh
bWUgYXJyaXZlcyB3aGljaCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIGNhbWVyYQorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5vblhSRnJhbWVPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2Vy
dmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB4ciBzZXNzaW9uIGlzIGVuZGVkIGVp
dGhlciBieSB0aGUgZGV2aWNlIG9yIG1hbnVhbGx5IGRvbmUKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMub25YUlNlc3Npb25FbmRlZCA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKiogQGhpZGRlbiAq
LworICAgICAgICB0aGlzLl9zZXNzaW9uUmVuZGVyVGFyZ2V0VGV4dHVyZSA9IG51bGw7CisgICAg
ICAgIHRoaXMuYmFzZUxheWVyID0gbnVsbDsKKyAgICB9CisgICAgLyoqCisgICAgICogSW5pdGlh
bGl6ZXMgdGhlIG1hbmFnZXIKKyAgICAgKiBBZnRlciBpbml0aWFsaXphdGlvbiBlbnRlclhSIGNh
biBiZSBjYWxsZWQgdG8gc3RhcnQgYW4gWFIgc2Vzc2lvbgorICAgICAqIEByZXR1cm5zIFByb21p
c2Ugd2hpY2ggcmVzb2x2ZXMgYWZ0ZXIgaXQgaXMgaW5pdGlhbGl6ZWQKKyAgICAgKi8KKyAgICBX
ZWJYUlNlc3Npb25NYW5hZ2VyLnByb3RvdHlwZS5pbml0aWFsaXplQXN5bmMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJM
b2dnZXIiXS5XYXJuKCJUaGUgV2ViWFIgQVBJcyBhcmUgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQg
YW5kIGFyZSBzdWJqZWN0IHRvIGNoYW5nZSBpbiB0aGUgZnV0dXJlLiIpOworICAgICAgICAvLyBD
aGVjayBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyB3ZWJYUgorICAgICAgICB0aGlzLl94ck5hdmln
YXRvciA9IG5hdmlnYXRvcjsKKyAgICAgICAgaWYgKCF0aGlzLl94ck5hdmlnYXRvci54cikgewor
ICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJ3ZWJYUiBub3Qgc3VwcG9ydGVkIGJ5
IHRoaXMgYnJvd3NlciIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29s
dmUoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIGFuIHhyIHNlc3Npb24K
KyAgICAgKiBAcGFyYW0geHJTZXNzaW9uTW9kZSBtb2RlIHRvIGluaXRpYWxpemUKKyAgICAgKiBA
cmV0dXJucyBhIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIG9uY2UgdGhlIHNlc3Npb24gaGFz
IGJlZW4gaW5pdGlhbGl6ZWQKKyAgICAgKi8KKyAgICBXZWJYUlNlc3Npb25NYW5hZ2VyLnByb3Rv
dHlwZS5pbml0aWFsaXplU2Vzc2lvbkFzeW5jID0gZnVuY3Rpb24gKHhyU2Vzc2lvbk1vZGUpIHsK
KyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3hyTmF2aWdh
dG9yLnhyLnJlcXVlc3RTZXNzaW9uKHhyU2Vzc2lvbk1vZGUpLnRoZW4oZnVuY3Rpb24gKHNlc3Np
b24pIHsKKyAgICAgICAgICAgIF90aGlzLnNlc3Npb24gPSBzZXNzaW9uOworICAgICAgICAgICAg
Ly8gaGFuZGxlIHdoZW4gdGhlIHNlc3Npb24gaXMgZW5kZWQgKEJ5IGNhbGxpbmcgc2Vzc2lvbi5l
bmQgb3IgZGV2aWNlIGVuZHMgaXRzIG93biBzZXNzaW9uIGVnLiBwcmVzc2luZyBob21lIGJ1dHRv
biBvbiBwaG9uZSkKKyAgICAgICAgICAgIF90aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigi
ZW5kIiwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSByZW5kZXIgdGFy
Z2V0IHRleHR1cmUgYW5kIG5vdGlmeSBmcmFtZSBvYmVydmVycworICAgICAgICAgICAgICAgIF90
aGlzLl9zZXNzaW9uUmVuZGVyVGFyZ2V0VGV4dHVyZSA9IG51bGw7CisgICAgICAgICAgICAgICAg
Ly8gUmVzdG9yZSBmcmFtZSBidWZmZXIgdG8gYXZvaWQgY2xlYXIgb24geHIgZnJhbWVidWZmZXIg
YWZ0ZXIgc2Vzc2lvbiBlbmQKKyAgICAgICAgICAgICAgICBfdGhpcy5zY2VuZS5nZXRFbmdpbmUo
KS5yZXN0b3JlRGVmYXVsdEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgLy8gTmVlZCB0
byByZXN0YXJ0IHJlbmRlciBsb29wIGFzIGFmdGVyIHRoZSBzZXNzaW9uIGlzIGVuZGVkIHRoZSBs
YXN0IHJlcXVlc3QgZm9yIG5ldyBmcmFtZSB3aWxsIG5ldmVyIGNhbGwgY2FsbGJhY2sKKyAgICAg
ICAgICAgICAgICBfdGhpcy5zY2VuZS5nZXRFbmdpbmUoKS5jdXN0b21BbmltYXRpb25GcmFtZVJl
cXVlc3RlciA9IG51bGw7CisgICAgICAgICAgICAgICAgX3RoaXMub25YUlNlc3Npb25FbmRlZC5u
b3RpZnlPYnNlcnZlcnMobnVsbCk7CisgICAgICAgICAgICAgICAgX3RoaXMuc2NlbmUuZ2V0RW5n
aW5lKCkuX3JlbmRlckxvb3AoKTsKKyAgICAgICAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTsKKyAg
ICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSByZWZlcmVuY2Ugc3Bh
Y2Ugb24gdGhlIHhyIHNlc3Npb24KKyAgICAgKiBAcGFyYW0gcmVmZXJlbmNlU3BhY2Ugc3BhY2Ug
dG8gc2V0CisgICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2Ug
dGhlIHJlZmVyZW5jZSBzcGFjZSBoYXMgYmVlbiBzZXQKKyAgICAgKi8KKyAgICBXZWJYUlNlc3Np
b25NYW5hZ2VyLnByb3RvdHlwZS5zZXRSZWZlcmVuY2VTcGFjZUFzeW5jID0gZnVuY3Rpb24gKHJl
ZmVyZW5jZVNwYWNlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHJldHVy
biB0aGlzLnNlc3Npb24ucmVxdWVzdFJlZmVyZW5jZVNwYWNlKHJlZmVyZW5jZVNwYWNlKS50aGVu
KGZ1bmN0aW9uIChyZWZlcmVuY2VTcGFjZSkgeworICAgICAgICAgICAgX3RoaXMucmVmZXJlbmNl
U3BhY2UgPSByZWZlcmVuY2VTcGFjZTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBVcGRhdGVzIHRoZSByZW5kZXIgc3RhdGUgb2YgdGhlIHNlc3Npb24KKyAgICAgKiBAcGFy
YW0gc3RhdGUgc3RhdGUgdG8gc2V0CisgICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVz
b2x2ZXMgb25jZSB0aGUgcmVuZGVyIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQKKyAgICAgKi8KKyAg
ICBXZWJYUlNlc3Npb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVSZW5kZXJTdGF0ZUFzeW5jID0g
ZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIGlmIChzdGF0ZS5iYXNlTGF5ZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMuYmFzZUxheWVyID0gc3RhdGUuYmFzZUxheWVyOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0aGlzLnNlc3Npb24udXBkYXRlUmVuZGVyU3RhdGUoc3RhdGUpOworICAgIH07
CisgICAgLyoqCisgICAgICogU3RhcnRzIHJlbmRlcmluZyB0byB0aGUgeHIgbGF5ZXIKKyAgICAg
KiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSByZW5kZXJpbmcgaGFz
IHN0YXJ0ZWQKKyAgICAgKi8KKyAgICBXZWJYUlNlc3Npb25NYW5hZ2VyLnByb3RvdHlwZS5zdGFy
dFJlbmRlcmluZ1RvWFJBc3luYyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgLy8gVGVsbCB0aGUgZW5naW5lJ3MgcmVuZGVyIGxvb3AgdG8gYmUgZHJp
dmVuIGJ5IHRoZSB4ciBzZXNzaW9uJ3MgcmVmcmVzaCByYXRlIGFuZCBwcm92aWRlIHhyIHBvc2Ug
aW5mb3JtYXRpb24KKyAgICAgICAgdGhpcy5zY2VuZS5nZXRFbmdpbmUoKS5jdXN0b21BbmltYXRp
b25GcmFtZVJlcXVlc3RlciA9IHsKKyAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZTog
dGhpcy5zZXNzaW9uLnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHRoaXMuc2Vzc2lvbiksCisg
ICAgICAgICAgICByZW5kZXJGdW5jdGlvbjogZnVuY3Rpb24gKHRpbWVzdGFtcCwgeHJGcmFtZSkg
eworICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBYUiBmcmFtZSBpbiB0aGUgbWFuYWdlciB0
byBiZSBjb25zdW1lZCBieSB0aGUgWFIgY2FtZXJhIHRvIHVwZGF0ZSBwb3NlCisgICAgICAgICAg
ICAgICAgX3RoaXMuY3VycmVudEZyYW1lID0geHJGcmFtZTsKKyAgICAgICAgICAgICAgICBfdGhp
cy5vblhSRnJhbWVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhudWxsKTsKKyAgICAgICAgICAg
ICAgICBfdGhpcy5zY2VuZS5nZXRFbmdpbmUoKS5fcmVuZGVyTG9vcCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9OworICAgICAgICAvLyBDcmVhdGUgcmVuZGVyIHRhcmdldCB0ZXh0dXJlIGZy
b20geHIncyB3ZWJnbCByZW5kZXIgdGFyZ2V0CisgICAgICAgIHRoaXMuX3Nlc3Npb25SZW5kZXJU
YXJnZXRUZXh0dXJlID0gV2ViWFJTZXNzaW9uTWFuYWdlci5fQ3JlYXRlUmVuZGVyVGFyZ2V0VGV4
dHVyZUZyb21TZXNzaW9uKHRoaXMuc2Vzc2lvbiwgdGhpcy5zY2VuZSwgdGhpcy5iYXNlTGF5ZXIp
OworICAgICAgICAvLyBTdG9wIHdpbmRvdydzIGFuaW1hdGlvbiBmcmFtZSBhbmQgdHJpZ2dlciBz
ZXNzaW9ucyBhbmltYXRpb24gZnJhbWUKKyAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZy
YW1lKHRoaXMuc2NlbmUuZ2V0RW5naW5lKCkuX2ZyYW1lSGFuZGxlcik7CisgICAgICAgIHRoaXMu
c2NlbmUuZ2V0RW5naW5lKCkuX3JlbmRlckxvb3AoKTsKKyAgICAgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcHMgdGhlIHhyU2Vzc2lvbiBh
bmQgcmVzdG9yZXMgdGhlIHJlbmRlcmxvb3AKKyAgICAgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNo
IHJlc29sdmVzIGFmdGVyIGl0IGV4aXRzIFhSCisgICAgICovCisgICAgV2ViWFJTZXNzaW9uTWFu
YWdlci5wcm90b3R5cGUuZXhpdFhSQXN5bmMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLnNlc3Npb24pIHsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5lbmQoKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKCkgeyB9KTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBhIHNlc3Npb24gd291bGQgYmUgc3VwcG9ydGVkIGZv
ciB0aGUgY3JlYXRpb24gb3B0aW9ucyBzcGVjaWZpZWQKKyAgICAgKiBAcGFyYW0gc2Vzc2lvbk1v
ZGUgc2Vzc2lvbiBtb2RlIHRvIGNoZWNrIGlmIHN1cHBvcnRlZCBlZy4gaW1tZXJzaXZlLXZyCisg
ICAgICogQHJldHVybnMgdHJ1ZSBpZiBzdXBwb3J0ZWQKKyAgICAgKi8KKyAgICBXZWJYUlNlc3Np
b25NYW5hZ2VyLnByb3RvdHlwZS5zdXBwb3J0c1Nlc3Npb25Bc3luYyA9IGZ1bmN0aW9uIChzZXNz
aW9uTW9kZSkgeworICAgICAgICBpZiAoIW5hdmlnYXRvci54ciB8fCAhbmF2aWdhdG9yLnhyLnN1
cHBvcnRzU2Vzc2lvbikgeworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxz
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbmF2aWdh
dG9yLnhyLnN1cHBvcnRzU2Vzc2lvbihzZXNzaW9uTW9kZSkudGhlbihmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTsKKyAgICAgICAgICAg
IH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLldhcm4oZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqIENvbnZlcnRz
IHRoZSByZW5kZXIgbGF5ZXIgb2YgeHJTZXNzaW9uIHRvIGEgcmVuZGVyIHRhcmdldAorICAgICAq
IEBwYXJhbSBzZXNzaW9uIHNlc3Npb24gdG8gY3JlYXRlIHJlbmRlciB0YXJnZXQgZm9yCisgICAg
ICogQHBhcmFtIHNjZW5lIHNjZW5lIHRoZSBuZXcgcmVuZGVyIHRhcmdldCBzaG91bGQgYmUgY3Jl
YXRlZCBmb3IKKyAgICAgKi8KKyAgICBXZWJYUlNlc3Npb25NYW5hZ2VyLl9DcmVhdGVSZW5kZXJU
YXJnZXRUZXh0dXJlRnJvbVNlc3Npb24gPSBmdW5jdGlvbiAoc2Vzc2lvbiwgc2NlbmUsIGJhc2VM
YXllcikgeworICAgICAgICBpZiAoIWJhc2VMYXllcikgeworICAgICAgICAgICAgdGhyb3cgIm5v
IGxheWVyIjsKKyAgICAgICAgfQorICAgICAgICAvLyBDcmVhdGUgaW50ZXJuYWwgdGV4dHVyZQor
ICAgICAgICB2YXIgaW50ZXJuYWxUZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfaW50
ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkludGVybmFsVGV4dHVy
ZSJdKHNjZW5lLmdldEVuZ2luZSgpLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09V
UkNFX1VOS05PV04sIHRydWUpOworICAgICAgICBpbnRlcm5hbFRleHR1cmUud2lkdGggPSBiYXNl
TGF5ZXIuZnJhbWVidWZmZXJXaWR0aDsKKyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLmhlaWdodCA9
IGJhc2VMYXllci5mcmFtZWJ1ZmZlckhlaWdodDsKKyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLl9m
cmFtZWJ1ZmZlciA9IGJhc2VMYXllci5mcmFtZWJ1ZmZlcjsKKyAgICAgICAgLy8gQ3JlYXRlIHJl
bmRlciB0YXJnZXQgdGV4dHVyZSBmcm9tIHRoZSBpbnRlcm5hbCB0ZXh0dXJlCisgICAgICAgIHZh
ciByZW5kZXJUYXJnZXRUZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFy
Z2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJSZW5kZXJUYXJnZXRUZXh0
dXJlIl0oIlhSIHJlbmRlclRhcmdldFRleHR1cmUiLCB7IHdpZHRoOiBpbnRlcm5hbFRleHR1cmUu
d2lkdGgsIGhlaWdodDogaW50ZXJuYWxUZXh0dXJlLmhlaWdodCB9LCBzY2VuZSwgdW5kZWZpbmVk
LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwg
dW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSk7CisgICAgICAgIHJlbmRlclRh
cmdldFRleHR1cmUuX3RleHR1cmUgPSBpbnRlcm5hbFRleHR1cmU7CisgICAgICAgIHJldHVybiBy
ZW5kZXJUYXJnZXRUZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2Yg
dGhlIHNlc3Npb24gbWFuYWdlcgorICAgICAqLworICAgIFdlYlhSU2Vzc2lvbk1hbmFnZXIucHJv
dG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMub25YUkZyYW1lT2Jz
ZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uWFJTZXNzaW9uRW5kZWQuY2xlYXIoKTsK
KyAgICB9OworICAgIHJldHVybiBXZWJYUlNlc3Npb25NYW5hZ2VyOworfSgpKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL2FyY1JvdGF0ZUNhbWVyYS50cyI6CisvKiEqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvYXJj
Um90YXRlQ2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBcmNSb3RhdGVDYW1lcmEgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBBcmNSb3RhdGVDYW1lcmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGVjb3JhdG9ycyAqLyAi
Li9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZl
Y3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9ub2RlICovICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01lc2hlcy9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX0JlaGF2aW9yc19DYW1lcmFzX2F1dG9Sb3RhdGlvbkJlaGF2
aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9CZWhhdmlvcnMvQ2FtZXJhcy9hdXRvUm90YXRpb25CZWhhdmlvciAqLyAiLi9CZWhhdmlv
cnMvQ2FtZXJhcy9hdXRvUm90YXRpb25CZWhhdmlvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9CZWhhdmlvcnNfQ2FtZXJhc19ib3VuY2luZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9CZWhhdmlvcnMvQ2Ft
ZXJhcy9ib3VuY2luZ0JlaGF2aW9yICovICIuL0JlaGF2aW9ycy9DYW1lcmFzL2JvdW5jaW5nQmVo
YXZpb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQmVoYXZpb3JzX0NhbWVyYXNf
ZnJhbWluZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9CZWhhdmlvcnMvQ2FtZXJhcy9mcmFtaW5nQmVoYXZpb3IgKi8gIi4v
QmVoYXZpb3JzL0NhbWVyYXMvZnJhbWluZ0JlaGF2aW9yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9jYW1lcmEgKi8gIi4vQ2FtZXJhcy9jYW1lcmEudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfdGFyZ2V0Q2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90YXJnZXRDYW1lcmEgKi8gIi4vQ2Ft
ZXJhcy90YXJnZXRDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJh
c19hcmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1lcmFJ
bnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvYXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGguY29uc3RhbnRzICovICIuL01hdGhzL21hdGguY29uc3RhbnRzLnRzIik7CisKKwor
CisKKworCisKKworCisKKworCisKK19ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
Ik5vZGUiXS5BZGROb2RlQ29uc3RydWN0b3IoIkFyY1JvdGF0ZUNhbWVyYSIsIGZ1bmN0aW9uIChu
YW1lLCBzY2VuZSkgeworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQXJjUm90
YXRlQ2FtZXJhKG5hbWUsIDAsIDAsIDEuMCwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKTsgfTsKK30pOworLyoq
CisgKiBUaGlzIHJlcHJlc2VudHMgYW4gb3JiaXRhbCB0eXBlIG9mIGNhbWVyYS4KKyAqCisgKiBU
aGlzIGNhbWVyYSBhbHdheXMgcG9pbnRzIHRvd2FyZHMgYSBnaXZlbiB0YXJnZXQgcG9zaXRpb24g
YW5kIGNhbiBiZSByb3RhdGVkIGFyb3VuZCB0aGF0IHRhcmdldCB3aXRoIHRoZSB0YXJnZXQgYXMg
dGhlIGNlbnRyZSBvZiByb3RhdGlvbi4gSXQgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCBjdXJzb3Jz
IGFuZCBtb3VzZSwgb3Igd2l0aCB0b3VjaCBldmVudHMuCisgKiBUaGluayBvZiB0aGlzIGNhbWVy
YSBhcyBvbmUgb3JiaXRpbmcgaXRzIHRhcmdldCBwb3NpdGlvbiwgb3IgbW9yZSBpbWFnaW5hdGl2
ZWx5IGFzIGEgc3B5IHNhdGVsbGl0ZSBvcmJpdGluZyB0aGUgZWFydGguIEl0cyBwb3NpdGlvbiBy
ZWxhdGl2ZSB0byB0aGUgdGFyZ2V0IChlYXJ0aCkgY2FuIGJlIHNldCBieSB0aHJlZSBwYXJhbWV0
ZXJzLCBhbHBoYSAocmFkaWFucykgdGhlIGxvbmdpdHVkaW5hbCByb3RhdGlvbiwgYmV0YSAocmFk
aWFucykgdGhlIGxhdGl0dWRpbmFsIHJvdGF0aW9uIGFuZCByYWRpdXMgdGhlIGRpc3RhbmNlIGZy
b20gdGhlIHRhcmdldCBwb3NpdGlvbi4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2JhYnlsb24xMDEvY2FtZXJhcyNhcmMtcm90YXRlLWNhbWVyYQorICovCit2YXIgQXJjUm90YXRl
Q2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEFyY1JvdGF0ZUNhbWVyYSwg
X3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgQXJjUm90YXRlQ2Ft
ZXJhIGluIGEgZ2l2ZW4gc2NlbmUKKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmVzIHRoZSBuYW1l
IG9mIHRoZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gYWxwaGEgRGVmaW5lcyB0aGUgY2FtZXJhIHJv
dGF0aW9uIGFsb25nIHRoZSBsb2dpdHVkaW5hbCBheGlzCisgICAgICogQHBhcmFtIGJldGEgRGVm
aW5lcyB0aGUgY2FtZXJhIHJvdGF0aW9uIGFsb25nIHRoZSBsYXRpdHVkaW5hbCBheGlzCisgICAg
ICogQHBhcmFtIHJhZGl1cyBEZWZpbmVzIHRoZSBjYW1lcmEgZGlzdGFuY2UgZnJvbSBpdHMgdGFy
Z2V0CisgICAgICogQHBhcmFtIHRhcmdldCBEZWZpbmVzIHRoZSBjYW1lcmEgdGFyZ2V0CisgICAg
ICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRoZSBjYW1lcmEgYmVsb25ncyB0bwor
ICAgICAqIEBwYXJhbSBzZXRBY3RpdmVPblNjZW5lSWZOb25lQWN0aXZlIERlZmluZXMgd2hldGVy
IHRoZSBjYW1lcmEgc2hvdWxkIGJlIG1hcmtlZCBhcyBhY3RpdmUgaWYgbm90IG90aGVyIGFjdGl2
ZSBjYW1lcmFzIGhhdmUgYmVlbiBkZWZpbmVkCisgICAgICovCisgICAgZnVuY3Rpb24gQXJjUm90
YXRlQ2FtZXJhKG5hbWUsIGFscGhhLCBiZXRhLCByYWRpdXMsIHRhcmdldCwgc2NlbmUsIHNldEFj
dGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUpIHsKKyAgICAgICAgaWYgKHNldEFjdGl2ZU9uU2NlbmVJ
Zk5vbmVBY3RpdmUgPT09IHZvaWQgMCkgeyBzZXRBY3RpdmVPblNjZW5lSWZOb25lQWN0aXZlID0g
dHJ1ZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlpl
cm8oKSwgc2NlbmUsIHNldEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUpIHx8IHRoaXM7CisgICAg
ICAgIF90aGlzLl91cFZlY3RvciA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVXAoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEN1
cnJlbnQgaW5lcnRpYSB2YWx1ZSBvbiB0aGUgbG9uZ2l0dWRpbmFsIGF4aXMuCisgICAgICAgICAq
IFRoZSBiaWdnZXIgdGhpcyBudW1iZXIgdGhlIGxvbmdlciBpdCB3aWxsIHRha2UgZm9yIHRoZSBj
YW1lcmEgdG8gc3RvcC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmluZXJ0aWFsQWxwaGFP
ZmZzZXQgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogQ3VycmVudCBpbmVydGlhIHZhbHVl
IG9uIHRoZSBsYXRpdHVkaW5hbCBheGlzLgorICAgICAgICAgKiBUaGUgYmlnZ2VyIHRoaXMgbnVt
YmVyIHRoZSBsb25nZXIgaXQgd2lsbCB0YWtlIGZvciB0aGUgY2FtZXJhIHRvIHN0b3AuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5pbmVydGlhbEJldGFPZmZzZXQgPSAwOworICAgICAgICAv
KioKKyAgICAgICAgICogQ3VycmVudCBpbmVydGlhIHZhbHVlIG9uIHRoZSByYWRpdXMgYXhpcy4K
KyAgICAgICAgICogVGhlIGJpZ2dlciB0aGlzIG51bWJlciB0aGUgbG9uZ2VyIGl0IHdpbGwgdGFr
ZSBmb3IgdGhlIGNhbWVyYSB0byBzdG9wLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaW5l
cnRpYWxSYWRpdXNPZmZzZXQgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogTWluaW11bSBh
bGxvd2VkIGFuZ2xlIG9uIHRoZSBsb25naXR1ZGluYWwgYXhpcy4KKyAgICAgICAgICogVGhpcyBj
YW4gaGVscCBsaW1pdGluZyBob3cgdGhlIENhbWVyYSBpcyBhYmxlIHRvIG1vdmUgaW4gdGhlIHNj
ZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubG93ZXJBbHBoYUxpbWl0ID0gbnVsbDsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIE1heGltdW0gYWxsb3dlZCBhbmdsZSBvbiB0aGUgbG9u
Z2l0dWRpbmFsIGF4aXMuCisgICAgICAgICAqIFRoaXMgY2FuIGhlbHAgbGltaXRpbmcgaG93IHRo
ZSBDYW1lcmEgaXMgYWJsZSB0byBtb3ZlIGluIHRoZSBzY2VuZS4KKyAgICAgICAgICovCisgICAg
ICAgIF90aGlzLnVwcGVyQWxwaGFMaW1pdCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBNaW5pbXVtIGFsbG93ZWQgYW5nbGUgb24gdGhlIGxhdGl0dWRpbmFsIGF4aXMuCisgICAgICAg
ICAqIFRoaXMgY2FuIGhlbHAgbGltaXRpbmcgaG93IHRoZSBDYW1lcmEgaXMgYWJsZSB0byBtb3Zl
IGluIHRoZSBzY2VuZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmxvd2VyQmV0YUxpbWl0
ID0gMC4wMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1heGltdW0gYWxsb3dlZCBhbmdsZSBv
biB0aGUgbGF0aXR1ZGluYWwgYXhpcy4KKyAgICAgICAgICogVGhpcyBjYW4gaGVscCBsaW1pdGlu
ZyBob3cgdGhlIENhbWVyYSBpcyBhYmxlIHRvIG1vdmUgaW4gdGhlIHNjZW5lLgorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMudXBwZXJCZXRhTGltaXQgPSBNYXRoLlBJIC0gMC4wMTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIE1pbmltdW0gYWxsb3dlZCBkaXN0YW5jZSBvZiB0aGUgY2FtZXJh
IHRvIHRoZSB0YXJnZXQgKFRoZSBjYW1lcmEgY2FuIG5vdCBnZXQgY2xvc2VyKS4KKyAgICAgICAg
ICogVGhpcyBjYW4gaGVscCBsaW1pdGluZyBob3cgdGhlIENhbWVyYSBpcyBhYmxlIHRvIG1vdmUg
aW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubG93ZXJSYWRpdXNMaW1p
dCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNYXhpbXVtIGFsbG93ZWQgZGlzdGFu
Y2Ugb2YgdGhlIGNhbWVyYSB0byB0aGUgdGFyZ2V0IChUaGUgY2FtZXJhIGNhbiBub3QgZ2V0IGZ1
cnRoZXIpLgorICAgICAgICAgKiBUaGlzIGNhbiBoZWxwIGxpbWl0aW5nIGhvdyB0aGUgQ2FtZXJh
IGlzIGFibGUgdG8gbW92ZSBpbiB0aGUgc2NlbmUuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy51cHBlclJhZGl1c0xpbWl0ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZXMgdGhlIGN1cnJlbnQgaW5lcnRpYSB2YWx1ZSB1c2VkIGR1cmluZyBwYW5uaW5nIG9mIHRoZSBj
YW1lcmEgYWxvbmcgdGhlIFggYXhpcy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmluZXJ0
aWFsUGFubmluZ1ggPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgY3Vy
cmVudCBpbmVydGlhIHZhbHVlIHVzZWQgZHVyaW5nIHBhbm5pbmcgb2YgdGhlIGNhbWVyYSBhbG9u
ZyB0aGUgWSBheGlzLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaW5lcnRpYWxQYW5uaW5n
WSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBkaXN0YW5jZSB1c2Vk
IHRvIGNvbnNpZGVyIHRoZSBjYW1lcmEgaW4gcGFuIG1vZGUgdnMgcGluY2gvem9vbS4KKyAgICAg
ICAgICogQmFzaWNhbGx5IGlmIHlvdXIgZmluZ2VycyBtb3ZlcyBhd2F5IGZyb20gbW9yZSB0aGFu
IHRoaXMgZGlzdGFuY2UgeW91IHdpbGwgYmUgY29uc2lkZXJlZAorICAgICAgICAgKiBpbiBwaW5j
aCBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucGluY2hUb1Bhbk1heERpc3RhbmNl
ID0gMjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBtYXhpbXVtIGRpc3Rh
bmNlIHRoZSBjYW1lcmEgY2FuIHBhbi4KKyAgICAgICAgICogVGhpcyBjb3VsZCBoZWxwIGtlZXBp
bmcgdGhlIGNhbW1lcmEgYWx3YXlzIGluIHlvdXIgc2NlbmUuCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5wYW5uaW5nRGlzdGFuY2VMaW1pdCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBEZWZpbmVzIHRoZSB0YXJnZXQgb2YgdGhlIGNhbWVyYSBiZWZvcmUgcGFuaW5nLgorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMucGFubmluZ09yaWdpblRhcmdldCA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgdmFsdWUgb2YgdGhlIGluZXJ0aWEg
dXNlZCBkdXJpbmcgcGFubmluZy4KKyAgICAgICAgICogMCB3b3VsZCBtZWFuIHN0b3AgaW5lcnRp
YSBhbmQgb25lIHdvdWxkIG1lYW4gbm8gZGVjZWxsZXJhdGlvbiBhdCBhbGwuCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5wYW5uaW5nSW5lcnRpYSA9IDAuOTsKKyAgICAgICAgLy8tLSBlbmQg
cHJvcGVydGllcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgaW5wdXRzCisgICAgICAg
IC8qKgorICAgICAgICAgKiBEZWZpbmVzIGhvdyBtdWNoIHRoZSByYWRpdXMgc2hvdWxkIGJlIHNj
YWxlZCB3aGlsZSB6b21taW5nIG9uIGEgcGFydGljdWxhciBtZXNoICh0aHJvdWdoIHRoZSB6b29t
T24gZnVuY3Rpb24pCisgICAgICAgICAqLworICAgICAgICBfdGhpcy56b29tT25GYWN0b3IgPSAx
OworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBhIHNjcmVlbiBvZmZzZXQgZm9yIHRo
ZSBjYW1lcmEgcG9zaXRpb24uCisgICAgICAgICAqLworICAgICAgICBfdGhpcy50YXJnZXRTY3Jl
ZW5PZmZzZXQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVjdG9yMiJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFsbG93cyB0aGUg
Y2FtZXJhIHRvIGJlIGNvbXBsZXRlbHkgcmV2ZXJzZWQuCisgICAgICAgICAqIElmIGZhbHNlIHRo
ZSBjYW1lcmEgY2FuIG5vdCBhcnJpdmUgdXBzaWRlIGRvd24uCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5hbGxvd1Vwc2lkZURvd24gPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICog
RGVmaW5lIGlmIGRvdWJsZSB0YXAvY2xpY2sgaXMgdXNlZCB0byByZXN0b3JlIHRoZSBwcmV2aW91
c2x5IHNhdmVkIHN0YXRlIG9mIHRoZSBjYW1lcmEuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy51c2VJbnB1dFRvUmVzdG9yZVN0YXRlID0gdHJ1ZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICAgICAgX3RoaXMuX3ZpZXdNYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdKCk7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBEZWZpbmVzIHRoZSBhbGxvd2VkIHBhbm5pbmcgYXhpcy4KKyAgICAgICAgICovCisgICAg
ICAgIF90aGlzLnBhbm5pbmdBeGlzID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMSwgMSwgMCk7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBPYnNlcnZhYmxlIHRyaWdnZXJlZCB3aGVuIHRoZSBtZXNoIHRhcmdldCBoYXMgYmVl
biBjaGFuZ2VkIG9uIHRoZSBjYW1lcmEuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vbk1l
c2hUYXJnZXRDaGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAg
ICAgICogRGVmaW5lcyB3aGV0aGVyIHRoZSBjYW1lcmEgc2hvdWxkIGNoZWNrIGNvbGxpc2lvbiB3
aXRoIHRoZSBvYmplY3RzIG9oIHRoZSBzY2VuZS4KKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9jYW1lcmFzLF9tZXNoX2NvbGxpc2lvbnNfYW5kX2dy
YXZpdHkjaG93LWNhbi1pLWRvLXRoaXMKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmNoZWNr
Q29sbGlzaW9ucyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUg
Y29sbGlzaW9uIHJhZGl1cyBvZiB0aGUgY2FtZXJhLgorICAgICAgICAgKiBUaGlzIHNpbXVsYXRl
cyBhIHNwaGVyZSBhcm91bmQgdGhlIGNhbWVyYS4KKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9jYW1lcmFzLF9tZXNoX2NvbGxpc2lvbnNfYW5kX2dy
YXZpdHkjYXJjcm90YXRlY2FtZXJhCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5jb2xsaXNp
b25SYWRpdXMgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlY3RvcjMiXSgwLjUsIDAuNSwgMC41KTsKKyAgICAgICAgX3RoaXMuX3ByZXZpb3Vz
UG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgX3RoaXMuX2NvbGxpc2lvblZlbG9jaXR5ID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMi
XS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9uZXdQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAg
ICBfdGhpcy5fY29tcHV0YXRpb25WZWN0b3IgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgX3RoaXMuX29u
Q29sbGlzaW9uUG9zaXRpb25DaGFuZ2UgPSBmdW5jdGlvbiAoY29sbGlzaW9uSWQsIG5ld1Bvc2l0
aW9uLCBjb2xsaWRlZE1lc2gpIHsKKyAgICAgICAgICAgIGlmIChjb2xsaWRlZE1lc2ggPT09IHZv
aWQgMCkgeyBjb2xsaWRlZE1lc2ggPSBudWxsOyB9CisgICAgICAgICAgICBpZiAoIWNvbGxpZGVk
TWVzaCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9wcmV2aW91c1Bvc2l0aW9uLmNvcHlGcm9t
KF90aGlzLl9wb3NpdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBfdGhpcy5zZXRQb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgICAg
ICAgICAgaWYgKF90aGlzLm9uQ29sbGlkZSkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5v
bkNvbGxpZGUoY29sbGlkZWRNZXNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAvLyBSZWNvbXB1dGUgYmVjYXVzZSBvZiBjb25zdHJhaW50cworICAgICAg
ICAgICAgdmFyIGNvc2EgPSBNYXRoLmNvcyhfdGhpcy5hbHBoYSk7CisgICAgICAgICAgICB2YXIg
c2luYSA9IE1hdGguc2luKF90aGlzLmFscGhhKTsKKyAgICAgICAgICAgIHZhciBjb3NiID0gTWF0
aC5jb3MoX3RoaXMuYmV0YSk7CisgICAgICAgICAgICB2YXIgc2luYiA9IE1hdGguc2luKF90aGlz
LmJldGEpOworICAgICAgICAgICAgaWYgKHNpbmIgPT09IDApIHsKKyAgICAgICAgICAgICAgICBz
aW5iID0gMC4wMDAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHRhcmdldCA9IF90
aGlzLl9nZXRUYXJnZXRQb3NpdGlvbigpOworICAgICAgICAgICAgX3RoaXMuX2NvbXB1dGF0aW9u
VmVjdG9yLmNvcHlGcm9tRmxvYXRzKF90aGlzLnJhZGl1cyAqIGNvc2EgKiBzaW5iLCBfdGhpcy5y
YWRpdXMgKiBjb3NiLCBfdGhpcy5yYWRpdXMgKiBzaW5hICogc2luYik7CisgICAgICAgICAgICB0
YXJnZXQuYWRkVG9SZWYoX3RoaXMuX2NvbXB1dGF0aW9uVmVjdG9yLCBfdGhpcy5fbmV3UG9zaXRp
b24pOworICAgICAgICAgICAgX3RoaXMuX3Bvc2l0aW9uLmNvcHlGcm9tKF90aGlzLl9uZXdQb3Np
dGlvbik7CisgICAgICAgICAgICB2YXIgdXAgPSBfdGhpcy51cFZlY3RvcjsKKyAgICAgICAgICAg
IGlmIChfdGhpcy5hbGxvd1Vwc2lkZURvd24gJiYgX3RoaXMuYmV0YSA8IDApIHsKKyAgICAgICAg
ICAgICAgICB1cCA9IHVwLmNsb25lKCk7CisgICAgICAgICAgICAgICAgdXAgPSB1cC5uZWdhdGUo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl9jb21wdXRlVmlld01hdHJpeChf
dGhpcy5fcG9zaXRpb24sIHRhcmdldCwgdXApOworICAgICAgICAgICAgX3RoaXMuX3ZpZXdNYXRy
aXguYWRkQXRJbmRleCgxMiwgX3RoaXMudGFyZ2V0U2NyZWVuT2Zmc2V0LngpOworICAgICAgICAg
ICAgX3RoaXMuX3ZpZXdNYXRyaXguYWRkQXRJbmRleCgxMywgX3RoaXMudGFyZ2V0U2NyZWVuT2Zm
c2V0LnkpOworICAgICAgICAgICAgX3RoaXMuX2NvbGxpc2lvblRyaWdnZXJlZCA9IGZhbHNlOwor
ICAgICAgICB9OworICAgICAgICBfdGhpcy5fdGFyZ2V0ID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIGlm
ICh0YXJnZXQpIHsKKyAgICAgICAgICAgIF90aGlzLnNldFRhcmdldCh0YXJnZXQpOworICAgICAg
ICB9CisgICAgICAgIF90aGlzLmFscGhhID0gYWxwaGE7CisgICAgICAgIF90aGlzLmJldGEgPSBi
ZXRhOworICAgICAgICBfdGhpcy5yYWRpdXMgPSByYWRpdXM7CisgICAgICAgIF90aGlzLmdldFZp
ZXdNYXRyaXgoKTsKKyAgICAgICAgX3RoaXMuaW5wdXRzID0gbmV3IF9DYW1lcmFzX2FyY1JvdGF0
ZUNhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkFyY1Jv
dGF0ZUNhbWVyYUlucHV0c01hbmFnZXIiXShfdGhpcyk7CisgICAgICAgIF90aGlzLmlucHV0cy5h
ZGRLZXlib2FyZCgpLmFkZE1vdXNlV2hlZWwoKS5hZGRQb2ludGVycygpOworICAgICAgICByZXR1
cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcmNSb3RhdGVDYW1l
cmEucHJvdG90eXBlLCAidGFyZ2V0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5l
cyB0aGUgdGFyZ2V0IHBvaW50IG9mIHRoZSBjYW1lcmEuCisgICAgICAgICAqIFRoZSBjYW1lcmEg
bG9va3MgdG93YXJkcyBpdCBmb3JtIHRoZSByYWRpdXMgZGlzdGFuY2UuCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90YXJn
ZXQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICB0aGlzLnNldFRhcmdldCh2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAicG9zaXRpb24iLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGN1cnJlbnQgbG9jYWwgcG9zaXRp
b24gb2YgdGhlIGNhbWVyYSBpbiB0aGUgc2NlbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uOworICAgICAg
ICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQb3NpdGlvbikgeworICAgICAgICAgICAg
dGhpcy5zZXRQb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAidXBWZWN0b3Ii
LCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3VwVmVjdG9yOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHZlY3Rv
ciB0aGUgY2FtZXJhIHNob3VsZCBjb25zaWRlciBhcyB1cC4gKGRlZmF1bHQgaXMgVmVjdG9yMygw
LCAxLCAwKSBhcyByZXR1cm5lZCBieSBWZWN0b3IzLlVwKCkpCisgICAgICAgICAqIFNldHRpbmcg
dGhpcyB3aWxsIGNvcHkgdGhlIGdpdmVuIHZlY3RvciB0byB0aGUgY2FtZXJhJ3MgdXBWZWN0b3Is
IGFuZCBzZXQgcm90YXRpb24gbWF0cmljZXMgdG8gYW5kIGZyb20gWSB1cC4KKyAgICAgICAgICog
RE8gTk9UIHNldCB0aGUgdXAgdmVjdG9yIHVzaW5nIGNvcHlGcm9tIG9yIGNvcHlGcm9tRmxvYXRz
LCBhcyB0aGlzIGJ5cGFzc2VzIHNldHRpbmcgdGhlIGFib3ZlIG1hdHJpY2VzLgorICAgICAgICAg
Ki8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmVjKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMu
X3VwVG9ZTWF0cml4KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fWVRvVXBNYXRyaXggPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJd
KCk7CisgICAgICAgICAgICAgICAgdGhpcy5fdXBUb1lNYXRyaXggPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdKCk7CisgICAgICAg
ICAgICAgICAgdGhpcy5fdXBWZWN0b3IgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHZlYy5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgIHRoaXMuX3VwVmVjdG9yLmNvcHlG
cm9tKHZlYyk7CisgICAgICAgICAgICB0aGlzLnNldE1hdFVwKCk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIFktdXAgdG8gY2FtZXJhIHVwLXZlY3RvciByb3Rh
dGlvbiBtYXRyaXgsIGFuZCB0aGUgdXAtdmVjdG9yIHRvIFktdXAgcm90YXRpb24gbWF0cml4Lgor
ICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUuc2V0TWF0VXAgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIC8vIGZyb20geS11cCB0byBjdXN0b20tdXAgKHVzZWQgaW4gX2dldFZp
ZXdNYXRyaXgpCisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJNYXRyaXgiXS5Sb3RhdGlvbkFsaWduVG9SZWYoX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5VcFJlYWRPbmx5LCB0aGlz
Ll91cFZlY3RvciwgdGhpcy5fWVRvVXBNYXRyaXgpOworICAgICAgICAvLyBmcm9tIGN1c3RvbS11
cCB0byB5LXVwICh1c2VkIGluIHJlYnVpbGRBbmdsZXNBbmRSYWRpdXMpCisgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5Sb3Rh
dGlvbkFsaWduVG9SZWYodGhpcy5fdXBWZWN0b3IsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVXBSZWFkT25seSwgdGhpcy5fdXBUb1lN
YXRyaXgpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFyY1JvdGF0ZUNhbWVy
YS5wcm90b3R5cGUsICJhbmd1bGFyU2Vuc2liaWxpdHlYIiwgeworICAgICAgICAvLy0tIGJlZ2lu
IHByb3BlcnRpZXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIGlucHV0cworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyBvciBTZXQgdGhlIHBvaW50ZXIgYW5ndWxhciBzZW5zaWJp
bGl0eSAgYWxvbmcgdGhlIFggYXhpcyBvciBob3cgZmFzdCBpcyB0aGUgY2FtZXJhIHJvdGF0aW5n
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2
YXIgcG9pbnRlcnMgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsicG9pbnRlcnMiXTsKKyAgICAgICAg
ICAgIGlmIChwb2ludGVycykgeworICAgICAgICAgICAgICAgIHJldHVybiBwb2ludGVycy5hbmd1
bGFyU2Vuc2liaWxpdHlYOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2
YXIgcG9pbnRlcnMgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsicG9pbnRlcnMiXTsKKyAgICAgICAg
ICAgIGlmIChwb2ludGVycykgeworICAgICAgICAgICAgICAgIHBvaW50ZXJzLmFuZ3VsYXJTZW5z
aWJpbGl0eVggPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJhbmd1bGFy
U2Vuc2liaWxpdHlZIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBTZXQgdGhl
IHBvaW50ZXIgYW5ndWxhciBzZW5zaWJpbGl0eSBhbG9uZyB0aGUgWSBheGlzIG9yIGhvdyBmYXN0
IGlzIHRoZSBjYW1lcmEgcm90YXRpbmcuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMuaW5wdXRzLmF0dGFjaGVk
WyJwb2ludGVycyJdOworICAgICAgICAgICAgaWYgKHBvaW50ZXJzKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHBvaW50ZXJzLmFuZ3VsYXJTZW5zaWJpbGl0eVk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMuaW5wdXRzLmF0dGFjaGVk
WyJwb2ludGVycyJdOworICAgICAgICAgICAgaWYgKHBvaW50ZXJzKSB7CisgICAgICAgICAgICAg
ICAgcG9pbnRlcnMuYW5ndWxhclNlbnNpYmlsaXR5WSA9IHZhbHVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJjUm90YXRlQ2Ft
ZXJhLnByb3RvdHlwZSwgInBpbmNoUHJlY2lzaW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyBvciBTZXQgdGhlIHBvaW50ZXIgcGluY2ggcHJlY2lzaW9uIG9yIGhvdyBmYXN0IGlz
IHRoZSBjYW1lcmEgem9vbWluZy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIHBvaW50ZXJzID0gdGhpcy5pbnB1dHMuYXR0YWNoZWRbInBv
aW50ZXJzIl07CisgICAgICAgICAgICBpZiAocG9pbnRlcnMpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcG9pbnRlcnMucGluY2hQcmVjaXNpb247CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJwb2ludGVy
cyJdOworICAgICAgICAgICAgaWYgKHBvaW50ZXJzKSB7CisgICAgICAgICAgICAgICAgcG9pbnRl
cnMucGluY2hQcmVjaXNpb24gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUs
ICJwaW5jaERlbHRhUGVyY2VudGFnZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
b3IgU2V0IHRoZSBwb2ludGVyIHBpbmNoIGRlbHRhIHBlcmNlbnRhZ2Ugb3IgaG93IGZhc3QgaXMg
dGhlIGNhbWVyYSB6b29taW5nLgorICAgICAgICAgKiBJdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBv
ZiBwaW5jaERlbHRhUHJlY2lzaW9uIGlmIGRpZmZlcmVudCBmcm9tIDAuCisgICAgICAgICAqIEl0
IGRlZmluZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgY3VycmVudCBjYW1lcmEucmFkaXVzIHRvIHVzZSBh
cyBkZWx0YSB3aGVuIHBpbmNoIHpvb20gaXMgdXNlZC4KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHBvaW50ZXJzID0gdGhpcy5pbnB1dHMu
YXR0YWNoZWRbInBvaW50ZXJzIl07CisgICAgICAgICAgICBpZiAocG9pbnRlcnMpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcG9pbnRlcnMucGluY2hEZWx0YVBlcmNlbnRhZ2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMuaW5wdXRz
LmF0dGFjaGVkWyJwb2ludGVycyJdOworICAgICAgICAgICAgaWYgKHBvaW50ZXJzKSB7CisgICAg
ICAgICAgICAgICAgcG9pbnRlcnMucGluY2hEZWx0YVBlcmNlbnRhZ2UgPSB2YWx1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFy
Y1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJwYW5uaW5nU2Vuc2liaWxpdHkiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIG9yIFNldCB0aGUgcG9pbnRlciBwYW5uaW5nIHNlbnNpYmls
aXR5IG9yIGhvdyBmYXN0IGlzIHRoZSBjYW1lcmEgbW92aW5nLgorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgcG9pbnRlcnMgPSB0aGlzLmlu
cHV0cy5hdHRhY2hlZFsicG9pbnRlcnMiXTsKKyAgICAgICAgICAgIGlmIChwb2ludGVycykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBwb2ludGVycy5wYW5uaW5nU2Vuc2liaWxpdHk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMuaW5w
dXRzLmF0dGFjaGVkWyJwb2ludGVycyJdOworICAgICAgICAgICAgaWYgKHBvaW50ZXJzKSB7Cisg
ICAgICAgICAgICAgICAgcG9pbnRlcnMucGFubmluZ1NlbnNpYmlsaXR5ID0gdmFsdWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShB
cmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAia2V5c1VwIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBvciBTZXQgdGhlIGxpc3Qgb2Yga2V5Ym9hcmQga2V5cyB1c2VkIHRvIGNvbnRy
b2wgYmV0YSBhbmdsZSBpbiBhIHBvc2l0aXZlIGRpcmVjdGlvbi4KKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5p
bnB1dHMuYXR0YWNoZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4ga2V5Ym9hcmQua2V5c1VwOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5pbnB1dHMuYXR0YWNo
ZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsKKyAgICAgICAgICAg
ICAgICBrZXlib2FyZC5rZXlzVXAgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5
cGUsICJrZXlzRG93biIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3IgU2V0IHRo
ZSBsaXN0IG9mIGtleWJvYXJkIGtleXMgdXNlZCB0byBjb250cm9sIGJldGEgYW5nbGUgaW4gYSBu
ZWdhdGl2ZSBkaXJlY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJrZXli
b2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJkKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGtleWJvYXJkLmtleXNEb3duOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IFtdOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5pbnB1dHMuYXR0YWNoZWRbImtleWJvYXJkIl07Cisg
ICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsKKyAgICAgICAgICAgICAgICBrZXlib2FyZC5rZXlz
RG93biA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZSwgImtleXNMZWZ0Iiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBTZXQgdGhlIGxpc3Qgb2Yga2V5Ym9h
cmQga2V5cyB1c2VkIHRvIGNvbnRyb2wgYWxwaGEgYW5nbGUgaW4gYSBuZWdhdGl2ZSBkaXJlY3Rp
b24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHZhciBrZXlib2FyZCA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAg
ICAgICAgaWYgKGtleWJvYXJkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtleWJvYXJkLmtl
eXNMZWZ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIGtleWJv
YXJkID0gdGhpcy5pbnB1dHMuYXR0YWNoZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAo
a2V5Ym9hcmQpIHsKKyAgICAgICAgICAgICAgICBrZXlib2FyZC5rZXlzTGVmdCA9IHZhbHVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZSwgImtleXNSaWdodCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgb3IgU2V0IHRoZSBsaXN0IG9mIGtleWJvYXJkIGtleXMgdXNlZCB0
byBjb250cm9sIGFscGhhIGFuZ2xlIGluIGEgcG9zaXRpdmUgZGlyZWN0aW9uLgorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQg
PSB0aGlzLmlucHV0cy5hdHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlmIChrZXli
b2FyZCkgeworICAgICAgICAgICAgICAgIHJldHVybiBrZXlib2FyZC5rZXlzUmlnaHQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAgIH0sCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQgPSB0aGlzLmlu
cHV0cy5hdHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZCkgewor
ICAgICAgICAgICAgICAgIGtleWJvYXJkLmtleXNSaWdodCA9IHZhbHVlOworICAgICAgICAgICAg
fQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJjUm90YXRl
Q2FtZXJhLnByb3RvdHlwZSwgIndoZWVsUHJlY2lzaW9uIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBvciBTZXQgdGhlIG1vdXNlIHdoZWVsIHByZWNpc2lvbiBvciBob3cgZmFzdCBp
cyB0aGUgY2FtZXJhIHpvb21pbmcuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHZhciBtb3VzZXdoZWVsID0gdGhpcy5pbnB1dHMuYXR0YWNoZWRb
Im1vdXNld2hlZWwiXTsKKyAgICAgICAgICAgIGlmIChtb3VzZXdoZWVsKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1vdXNld2hlZWwud2hlZWxQcmVjaXNpb247CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBtb3VzZXdoZWVsID0gdGhpcy5pbnB1dHMuYXR0YWNo
ZWRbIm1vdXNld2hlZWwiXTsKKyAgICAgICAgICAgIGlmIChtb3VzZXdoZWVsKSB7CisgICAgICAg
ICAgICAgICAgbW91c2V3aGVlbC53aGVlbFByZWNpc2lvbiA9IHZhbHVlOworICAgICAgICAgICAg
fQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJjUm90YXRl
Q2FtZXJhLnByb3RvdHlwZSwgIndoZWVsRGVsdGFQZXJjZW50YWdlIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBvciBTZXQgdGhlIG1vdXNlIHdoZWVsIGRlbHRhIHBlcmNlbnRhZ2Ug
b3IgaG93IGZhc3QgaXMgdGhlIGNhbWVyYSB6b29taW5nLgorICAgICAgICAgKiBJdCB3aWxsIGJl
IHVzZWQgaW5zdGVhZCBvZiBwaW5jaERlbHRhUHJlY2lzaW9uIGlmIGRpZmZlcmVudCBmcm9tIDAu
CisgICAgICAgICAqIEl0IGRlZmluZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgY3VycmVudCBjYW1lcmEu
cmFkaXVzIHRvIHVzZSBhcyBkZWx0YSB3aGVuIHBpbmNoIHpvb20gaXMgdXNlZC4KKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG1vdXNld2hl
ZWwgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsibW91c2V3aGVlbCJdOworICAgICAgICAgICAgaWYg
KG1vdXNld2hlZWwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbW91c2V3aGVlbC53aGVlbERl
bHRhUGVyY2VudGFnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFy
IG1vdXNld2hlZWwgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsibW91c2V3aGVlbCJdOworICAgICAg
ICAgICAgaWYgKG1vdXNld2hlZWwpIHsKKyAgICAgICAgICAgICAgICBtb3VzZXdoZWVsLndoZWVs
RGVsdGFQZXJjZW50YWdlID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAi
Ym91bmNpbmdCZWhhdmlvciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGJv
dW5jaW5nIGJlaGF2aW9yIG9mIHRoZSBjYW1lcmEgaWYgaXQgaGFzIGJlZW4gZW5hYmxlZC4KKyAg
ICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2NhbWVyYV9iZWhh
dmlvcnMjYm91bmNpbmctYmVoYXZpb3IKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5jaW5nQmVoYXZpb3I7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcmNSb3RhdGVDYW1lcmEu
cHJvdG90eXBlLCAidXNlQm91bmNpbmdCZWhhdmlvciIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERlZmluZXMgaWYgdGhlIGJvdW5jaW5nIGJlaGF2aW9yIG9mIHRoZSBjYW1lcmEgaXMgZW5h
YmxlZCBvbiB0aGUgY2FtZXJhLgorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vY2FtZXJhX2JlaGF2aW9ycyNib3VuY2luZy1iZWhhdmlvcgorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
Ym91bmNpbmdCZWhhdmlvciAhPSBudWxsOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLnVzZUJvdW5jaW5n
QmVoYXZpb3IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ib3VuY2luZ0JlaGF2
aW9yID0gbmV3IF9CZWhhdmlvcnNfQ2FtZXJhc19ib3VuY2luZ0JlaGF2aW9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIkJvdW5jaW5nQmVoYXZpb3IiXSgpOworICAgICAgICAgICAgICAg
IHRoaXMuYWRkQmVoYXZpb3IodGhpcy5fYm91bmNpbmdCZWhhdmlvcik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9ib3VuY2luZ0JlaGF2aW9yKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5yZW1vdmVCZWhhdmlvcih0aGlzLl9ib3VuY2luZ0JlaGF2aW9yKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9ib3VuY2luZ0JlaGF2aW9yID0gbnVsbDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFyY1JvdGF0
ZUNhbWVyYS5wcm90b3R5cGUsICJmcmFtaW5nQmVoYXZpb3IiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSBmcmFtaW5nIGJlaGF2aW9yIG9mIHRoZSBjYW1lcmEgaWYgaXQgaGFz
IGJlZW4gZW5hYmxlZC4KKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL2NhbWVyYV9iZWhhdmlvcnMjZnJhbWluZy1iZWhhdmlvcgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWlu
Z0JlaGF2aW9yOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
QXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZSwgInVzZUZyYW1pbmdCZWhhdmlvciIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaWYgdGhlIGZyYW1pbmcgYmVoYXZpb3Igb2YgdGhl
IGNhbWVyYSBpcyBlbmFibGVkIG9uIHRoZSBjYW1lcmEuCisgICAgICAgICAqIEBzZWUgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jYW1lcmFfYmVoYXZpb3JzI2ZyYW1pbmctYmVoYXZp
b3IKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2ZyYW1pbmdCZWhhdmlvciAhPSBudWxsOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlz
LnVzZUZyYW1pbmdCZWhhdmlvcikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2Zy
YW1pbmdCZWhhdmlvciA9IG5ldyBfQmVoYXZpb3JzX0NhbWVyYXNfZnJhbWluZ0JlaGF2aW9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkZyYW1pbmdCZWhhdmlvciJdKCk7CisgICAgICAg
ICAgICAgICAgdGhpcy5hZGRCZWhhdmlvcih0aGlzLl9mcmFtaW5nQmVoYXZpb3IpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fZnJhbWluZ0JlaGF2aW9yKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVCZWhhdmlvcih0aGlzLl9mcmFtaW5nQmVoYXZpb3Ip
OworICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1pbmdCZWhhdmlvciA9IG51bGw7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcmNS
b3RhdGVDYW1lcmEucHJvdG90eXBlLCAiYXV0b1JvdGF0aW9uQmVoYXZpb3IiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBhdXRvIHJvdGF0aW9uIGJlaGF2aW9yIG9mIHRoZSBj
YW1lcmEgaWYgaXQgaGFzIGJlZW4gZW5hYmxlZC4KKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vaG93X3RvL2NhbWVyYV9iZWhhdmlvcnMjYXV0b3JvdGF0aW9uLWJlaGF2
aW9yCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9hdXRvUm90YXRpb25CZWhhdmlvcjsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJ1c2VB
dXRvUm90YXRpb25CZWhhdmlvciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMg
aWYgdGhlIGF1dG8gcm90YXRpb24gYmVoYXZpb3Igb2YgdGhlIGNhbWVyYSBpcyBlbmFibGVkIG9u
IHRoZSBjYW1lcmEuCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hv
d190by9jYW1lcmFfYmVoYXZpb3JzI2F1dG9yb3RhdGlvbi1iZWhhdmlvcgorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXV0
b1JvdGF0aW9uQmVoYXZpb3IgIT0gbnVsbDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy51c2VBdXRvUm90
YXRpb25CZWhhdmlvcikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9Sb3Rh
dGlvbkJlaGF2aW9yID0gbmV3IF9CZWhhdmlvcnNfQ2FtZXJhc19hdXRvUm90YXRpb25CZWhhdmlv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJBdXRvUm90YXRpb25CZWhhdmlvciJdKCk7
CisgICAgICAgICAgICAgICAgdGhpcy5hZGRCZWhhdmlvcih0aGlzLl9hdXRvUm90YXRpb25CZWhh
dmlvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9hdXRvUm90
YXRpb25CZWhhdmlvcikgeworICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQmVoYXZpb3IodGhp
cy5fYXV0b1JvdGF0aW9uQmVoYXZpb3IpOworICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9Sb3Rh
dGlvbkJlaGF2aW9yID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgLy8gQ2FjaGUKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90
b3R5cGUuX2luaXRDYWNoZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlw
ZS5faW5pdENhY2hlLmNhbGwodGhpcyk7CisgICAgICAgIHRoaXMuX2NhY2hlLl90YXJnZXQgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXShOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVF
KTsKKyAgICAgICAgdGhpcy5fY2FjaGUuYWxwaGEgPSB1bmRlZmluZWQ7CisgICAgICAgIHRoaXMu
X2NhY2hlLmJldGEgPSB1bmRlZmluZWQ7CisgICAgICAgIHRoaXMuX2NhY2hlLnJhZGl1cyA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgdGhpcy5fY2FjaGUudGFyZ2V0U2NyZWVuT2Zmc2V0ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjIiXS5aZXJv
KCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90
b3R5cGUuX3VwZGF0ZUNhY2hlID0gZnVuY3Rpb24gKGlnbm9yZVBhcmVudENsYXNzKSB7CisgICAg
ICAgIGlmICghaWdub3JlUGFyZW50Q2xhc3MpIHsKKyAgICAgICAgICAgIF9zdXBlci5wcm90b3R5
cGUuX3VwZGF0ZUNhY2hlLmNhbGwodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2Fj
aGUuX3RhcmdldC5jb3B5RnJvbSh0aGlzLl9nZXRUYXJnZXRQb3NpdGlvbigpKTsKKyAgICAgICAg
dGhpcy5fY2FjaGUuYWxwaGEgPSB0aGlzLmFscGhhOworICAgICAgICB0aGlzLl9jYWNoZS5iZXRh
ID0gdGhpcy5iZXRhOworICAgICAgICB0aGlzLl9jYWNoZS5yYWRpdXMgPSB0aGlzLnJhZGl1czsK
KyAgICAgICAgdGhpcy5fY2FjaGUudGFyZ2V0U2NyZWVuT2Zmc2V0LmNvcHlGcm9tKHRoaXMudGFy
Z2V0U2NyZWVuT2Zmc2V0KTsKKyAgICB9OworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUu
X2dldFRhcmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fdGFy
Z2V0SG9zdCAmJiB0aGlzLl90YXJnZXRIb3N0LmdldEFic29sdXRlUG9zaXRpb24pIHsKKyAgICAg
ICAgICAgIHZhciBwb3MgPSB0aGlzLl90YXJnZXRIb3N0LmFic29sdXRlUG9zaXRpb247CisgICAg
ICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Qm91bmRpbmdDZW50ZXIpIHsKKyAgICAgICAgICAgICAg
ICBwb3MuYWRkVG9SZWYodGhpcy5fdGFyZ2V0Qm91bmRpbmdDZW50ZXIsIHRoaXMuX3RhcmdldCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll90YXJnZXQuY29weUZyb20ocG9zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB2YXIgbG9ja2VkVGFyZ2V0UG9zaXRpb24gPSB0aGlzLl9nZXRMb2NrZWRUYXJnZXRQb3NpdGlv
bigpOworICAgICAgICBpZiAobG9ja2VkVGFyZ2V0UG9zaXRpb24pIHsKKyAgICAgICAgICAgIHJl
dHVybiBsb2NrZWRUYXJnZXRQb3NpdGlvbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp
cy5fdGFyZ2V0OworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcmVzIHRoZSBjdXJyZW50IHN0
YXRlIG9mIHRoZSBjYW1lcmEgKGFscGhhLCBiZXRhLCByYWRpdXMgYW5kIHRhcmdldCkKKyAgICAg
KiBAcmV0dXJucyB0aGUgY2FtZXJhIGl0c2VsZgorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVy
YS5wcm90b3R5cGUuc3RvcmVTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fc3Rv
cmVkQWxwaGEgPSB0aGlzLmFscGhhOworICAgICAgICB0aGlzLl9zdG9yZWRCZXRhID0gdGhpcy5i
ZXRhOworICAgICAgICB0aGlzLl9zdG9yZWRSYWRpdXMgPSB0aGlzLnJhZGl1czsKKyAgICAgICAg
dGhpcy5fc3RvcmVkVGFyZ2V0ID0gdGhpcy5fZ2V0VGFyZ2V0UG9zaXRpb24oKS5jbG9uZSgpOwor
ICAgICAgICB0aGlzLl9zdG9yZWRUYXJnZXRTY3JlZW5PZmZzZXQgPSB0aGlzLnRhcmdldFNjcmVl
bk9mZnNldC5jbG9uZSgpOworICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5zdG9yZVN0
YXRlLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICog
UmVzdG9yZWQgY2FtZXJhIHN0YXRlLiBZb3UgbXVzdCBjYWxsIHN0b3JlU3RhdGUoKSBmaXJzdAor
ICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUuX3Jlc3RvcmVTdGF0ZVZhbHVl
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCFfc3VwZXIucHJvdG90eXBlLl9yZXN0b3Jl
U3RhdGVWYWx1ZXMuY2FsbCh0aGlzKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuc2V0VGFyZ2V0KHRoaXMuX3N0b3JlZFRhcmdldC5jbG9uZSgp
KTsKKyAgICAgICAgdGhpcy5hbHBoYSA9IHRoaXMuX3N0b3JlZEFscGhhOworICAgICAgICB0aGlz
LmJldGEgPSB0aGlzLl9zdG9yZWRCZXRhOworICAgICAgICB0aGlzLnJhZGl1cyA9IHRoaXMuX3N0
b3JlZFJhZGl1czsKKyAgICAgICAgdGhpcy50YXJnZXRTY3JlZW5PZmZzZXQgPSB0aGlzLl9zdG9y
ZWRUYXJnZXRTY3JlZW5PZmZzZXQuY2xvbmUoKTsKKyAgICAgICAgdGhpcy5pbmVydGlhbEFscGhh
T2Zmc2V0ID0gMDsKKyAgICAgICAgdGhpcy5pbmVydGlhbEJldGFPZmZzZXQgPSAwOworICAgICAg
ICB0aGlzLmluZXJ0aWFsUmFkaXVzT2Zmc2V0ID0gMDsKKyAgICAgICAgdGhpcy5pbmVydGlhbFBh
bm5pbmdYID0gMDsKKyAgICAgICAgdGhpcy5pbmVydGlhbFBhbm5pbmdZID0gMDsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvLyBTeW5jaHJvbml6ZWQKKyAgICAvKiogQGhpZGRl
biAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUuX2lzU3luY2hyb25pemVkVmlld01h
dHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCFfc3VwZXIucHJvdG90eXBlLl9pc1N5
bmNocm9uaXplZFZpZXdNYXRyaXguY2FsbCh0aGlzKSkgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5fdGFyZ2V0LmVxdWFs
cyh0aGlzLl9nZXRUYXJnZXRQb3NpdGlvbigpKQorICAgICAgICAgICAgJiYgdGhpcy5fY2FjaGUu
YWxwaGEgPT09IHRoaXMuYWxwaGEKKyAgICAgICAgICAgICYmIHRoaXMuX2NhY2hlLmJldGEgPT09
IHRoaXMuYmV0YQorICAgICAgICAgICAgJiYgdGhpcy5fY2FjaGUucmFkaXVzID09PSB0aGlzLnJh
ZGl1cworICAgICAgICAgICAgJiYgdGhpcy5fY2FjaGUudGFyZ2V0U2NyZWVuT2Zmc2V0LmVxdWFs
cyh0aGlzLnRhcmdldFNjcmVlbk9mZnNldCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRh
Y2hlZCBjb250cm9scyB0byB0aGUgY3VycmVudCBjYW1lcmEuCisgICAgICogQHBhcmFtIGVsZW1l
bnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0aGUgY29udHJvbHMgc2hvdWxkIGJlIGxpc3RlbmVkIGZy
b20KKyAgICAgKiBAcGFyYW0gbm9QcmV2ZW50RGVmYXVsdCBEZWZpbmVzIHdoZXRoZXIgZXZlbnQg
Y2F1Z2h0IGJ5IHRoZSBjb250cm9scyBzaG91bGQgY2FsbCBwcmV2ZW50ZGVmYXVsdCgpIChodHRw
czovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvcHJldmVu
dERlZmF1bHQpCisgICAgICogQHBhcmFtIHVzZUN0cmxGb3JQYW5uaW5nICBEZWZpbmVzIHdoZXRo
ZXIgY3RybCBpcyB1c2VkIGZvciBwYW5pbmcgd2l0aGluIHRoZSBjb250cm9scworICAgICAqIEBw
YXJhbSBwYW5uaW5nTW91c2VCdXR0b24gRGVmaW5lcyB3aGV0aGVyIHBhbm5pbmcgaXMgYWxsb3dl
ZCB0aHJvdWdoIG1vdXNlIGNsaWNrIGJ1dHRvbgorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVy
YS5wcm90b3R5cGUuYXR0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBub1ByZXZlbnRE
ZWZhdWx0LCB1c2VDdHJsRm9yUGFubmluZywgcGFubmluZ01vdXNlQnV0dG9uKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmICh1c2VDdHJsRm9yUGFubmluZyA9PT0gdm9p
ZCAwKSB7IHVzZUN0cmxGb3JQYW5uaW5nID0gdHJ1ZTsgfQorICAgICAgICBpZiAocGFubmluZ01v
dXNlQnV0dG9uID09PSB2b2lkIDApIHsgcGFubmluZ01vdXNlQnV0dG9uID0gMjsgfQorICAgICAg
ICB0aGlzLl91c2VDdHJsRm9yUGFubmluZyA9IHVzZUN0cmxGb3JQYW5uaW5nOworICAgICAgICB0
aGlzLl9wYW5uaW5nTW91c2VCdXR0b24gPSBwYW5uaW5nTW91c2VCdXR0b247CisgICAgICAgIHRo
aXMuaW5wdXRzLmF0dGFjaEVsZW1lbnQoZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCk7CisgICAg
ICAgIHRoaXMuX3Jlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMuaW5lcnRp
YWxBbHBoYU9mZnNldCA9IDA7CisgICAgICAgICAgICBfdGhpcy5pbmVydGlhbEJldGFPZmZzZXQg
PSAwOworICAgICAgICAgICAgX3RoaXMuaW5lcnRpYWxSYWRpdXNPZmZzZXQgPSAwOworICAgICAg
ICAgICAgX3RoaXMuaW5lcnRpYWxQYW5uaW5nWCA9IDA7CisgICAgICAgICAgICBfdGhpcy5pbmVy
dGlhbFBhbm5pbmdZID0gMDsKKyAgICAgICAgfTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERl
dGFjaCB0aGUgY3VycmVudCBjb250cm9scyBmcm9tIHRoZSBjYW1lcmEuCisgICAgICogVGhlIGNh
bWVyYSB3aWxsIHN0b3AgcmVhY3RpbmcgdG8gaW5wdXRzLgorICAgICAqIEBwYXJhbSBlbGVtZW50
IERlZmluZXMgdGhlIGVsZW1lbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdGhlIGlucHV0cyBmcm9tCisg
ICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZS5kZXRhY2hDb250cm9sID0gZnVu
Y3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuZGV0YWNoRWxlbWVudChlbGVt
ZW50KTsKKyAgICAgICAgaWYgKHRoaXMuX3Jlc2V0KSB7CisgICAgICAgICAgICB0aGlzLl9yZXNl
dCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFyY1JvdGF0
ZUNhbWVyYS5wcm90b3R5cGUuX2NoZWNrSW5wdXRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAv
L2lmIChhc3luYykgY29sbGlzaW9uIGluc3BlY3Rpb24gd2FzIHRyaWdnZXJlZCwgZG9uJ3QgdXBk
YXRlIHRoZSBjYW1lcmEncyBwb3NpdGlvbiAtIHVudGlsIHRoZSBjb2xsaXNpb24gY2FsbGJhY2sg
d2FzIGNhbGxlZC4KKyAgICAgICAgaWYgKHRoaXMuX2NvbGxpc2lvblRyaWdnZXJlZCkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuaW5wdXRzLmNoZWNrSW5w
dXRzKCk7CisgICAgICAgIC8vIEluZXJ0aWEKKyAgICAgICAgaWYgKHRoaXMuaW5lcnRpYWxBbHBo
YU9mZnNldCAhPT0gMCB8fCB0aGlzLmluZXJ0aWFsQmV0YU9mZnNldCAhPT0gMCB8fCB0aGlzLmlu
ZXJ0aWFsUmFkaXVzT2Zmc2V0ICE9PSAwKSB7CisgICAgICAgICAgICB2YXIgaW5lcnRpYWxBbHBo
YU9mZnNldCA9IHRoaXMuaW5lcnRpYWxBbHBoYU9mZnNldDsKKyAgICAgICAgICAgIGlmICh0aGlz
LmJldGEgPD0gMCkgeworICAgICAgICAgICAgICAgIGluZXJ0aWFsQWxwaGFPZmZzZXQgKj0gLTE7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5nZXRTY2VuZSgpLnVzZVJpZ2h0
SGFuZGVkU3lzdGVtKSB7CisgICAgICAgICAgICAgICAgaW5lcnRpYWxBbHBoYU9mZnNldCAqPSAt
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBh
cmVudC5fZ2V0V29ybGRNYXRyaXhEZXRlcm1pbmFudCgpIDwgMCkgeworICAgICAgICAgICAgICAg
IGluZXJ0aWFsQWxwaGFPZmZzZXQgKj0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aGlzLmFscGhhICs9IGluZXJ0aWFsQWxwaGFPZmZzZXQ7CisgICAgICAgICAgICB0aGlzLmJldGEg
Kz0gdGhpcy5pbmVydGlhbEJldGFPZmZzZXQ7CisgICAgICAgICAgICB0aGlzLnJhZGl1cyAtPSB0
aGlzLmluZXJ0aWFsUmFkaXVzT2Zmc2V0OworICAgICAgICAgICAgdGhpcy5pbmVydGlhbEFscGhh
T2Zmc2V0ICo9IHRoaXMuaW5lcnRpYTsKKyAgICAgICAgICAgIHRoaXMuaW5lcnRpYWxCZXRhT2Zm
c2V0ICo9IHRoaXMuaW5lcnRpYTsKKyAgICAgICAgICAgIHRoaXMuaW5lcnRpYWxSYWRpdXNPZmZz
ZXQgKj0gdGhpcy5pbmVydGlhOworICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuaW5lcnRp
YWxBbHBoYU9mZnNldCkgPCBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEyX19bIkVwc2lsb24iXSkgeworICAgICAgICAgICAgICAgIHRoaXMuaW5lcnRpYWxB
bHBoYU9mZnNldCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTWF0aC5hYnMo
dGhpcy5pbmVydGlhbEJldGFPZmZzZXQpIDwgX01hdGhzX21hdGhfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMl9fWyJFcHNpbG9uIl0pIHsKKyAgICAgICAgICAgICAgICB0aGlz
LmluZXJ0aWFsQmV0YU9mZnNldCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
TWF0aC5hYnModGhpcy5pbmVydGlhbFJhZGl1c09mZnNldCkgPCB0aGlzLnNwZWVkICogX01hdGhz
X21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJFcHNpbG9uIl0p
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmluZXJ0aWFsUmFkaXVzT2Zmc2V0ID0gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBQYW5uaW5nIGluZXJ0aWEKKyAgICAgICAg
aWYgKHRoaXMuaW5lcnRpYWxQYW5uaW5nWCAhPT0gMCB8fCB0aGlzLmluZXJ0aWFsUGFubmluZ1kg
IT09IDApIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fbG9jYWxEaXJlY3Rpb24pIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9sb2NhbERpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAgICAg
ICAgIHRoaXMuX3RyYW5zZm9ybWVkRGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aGlzLl9sb2NhbERpcmVjdGlvbi5jb3B5RnJvbUZsb2F0cyh0aGlzLmlu
ZXJ0aWFsUGFubmluZ1gsIHRoaXMuaW5lcnRpYWxQYW5uaW5nWSwgdGhpcy5pbmVydGlhbFBhbm5p
bmdZKTsKKyAgICAgICAgICAgIHRoaXMuX2xvY2FsRGlyZWN0aW9uLm11bHRpcGx5SW5QbGFjZSh0
aGlzLnBhbm5pbmdBeGlzKTsKKyAgICAgICAgICAgIHRoaXMuX3ZpZXdNYXRyaXguaW52ZXJ0VG9S
ZWYodGhpcy5fY2FtZXJhVHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3Jt
Tm9ybWFsVG9SZWYodGhpcy5fbG9jYWxEaXJlY3Rpb24sIHRoaXMuX2NhbWVyYVRyYW5zZm9ybU1h
dHJpeCwgdGhpcy5fdHJhbnNmb3JtZWREaXJlY3Rpb24pOworICAgICAgICAgICAgLy9FbGltaW5h
dGUgeSBpZiBtYXAgcGFubmluZyBpcyBlbmFibGVkIChwYW5uaW5nQXhpcyA9PSAxLDAsMSkKKyAg
ICAgICAgICAgIGlmICghdGhpcy5wYW5uaW5nQXhpcy55KSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fdHJhbnNmb3JtZWREaXJlY3Rpb24ueSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIXRoaXMuX3RhcmdldEhvc3QpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5wYW5u
aW5nRGlzdGFuY2VMaW1pdCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1l
ZERpcmVjdGlvbi5hZGRJblBsYWNlKHRoaXMuX3RhcmdldCk7CisgICAgICAgICAgICAgICAgICAg
IHZhciBkaXN0YW5jZVNxdWFyZWQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkRpc3RhbmNlU3F1YXJlZCh0aGlzLl90cmFuc2Zvcm1l
ZERpcmVjdGlvbiwgdGhpcy5wYW5uaW5nT3JpZ2luVGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGRpc3RhbmNlU3F1YXJlZCA8PSAodGhpcy5wYW5uaW5nRGlzdGFuY2VMaW1pdCAqIHRo
aXMucGFubmluZ0Rpc3RhbmNlTGltaXQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Ll90YXJnZXQuY29weUZyb20odGhpcy5fdHJhbnNmb3JtZWREaXJlY3Rpb24pOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXQuYWRkSW5QbGFjZSh0aGlzLl90cmFuc2Zv
cm1lZERpcmVjdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGhpcy5pbmVydGlhbFBhbm5pbmdYICo9IHRoaXMucGFubmluZ0luZXJ0aWE7CisgICAg
ICAgICAgICB0aGlzLmluZXJ0aWFsUGFubmluZ1kgKj0gdGhpcy5wYW5uaW5nSW5lcnRpYTsKKyAg
ICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmluZXJ0aWFsUGFubmluZ1gpIDwgdGhpcy5zcGVl
ZCAqIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1si
RXBzaWxvbiJdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5pbmVydGlhbFBhbm5pbmdYID0gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmluZXJ0aWFsUGFu
bmluZ1kpIDwgdGhpcy5zcGVlZCAqIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTJfX1siRXBzaWxvbiJdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5pbmVy
dGlhbFBhbm5pbmdZID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBM
aW1pdHMKKyAgICAgICAgdGhpcy5fY2hlY2tMaW1pdHMoKTsKKyAgICAgICAgX3N1cGVyLnByb3Rv
dHlwZS5fY2hlY2tJbnB1dHMuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIEFyY1JvdGF0ZUNhbWVy
YS5wcm90b3R5cGUuX2NoZWNrTGltaXRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhp
cy5sb3dlckJldGFMaW1pdCA9PT0gbnVsbCB8fCB0aGlzLmxvd2VyQmV0YUxpbWl0ID09PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmFsbG93VXBzaWRlRG93biAmJiB0aGlzLmJl
dGEgPiBNYXRoLlBJKSB7CisgICAgICAgICAgICAgICAgdGhpcy5iZXRhID0gdGhpcy5iZXRhIC0g
KDIgKiBNYXRoLlBJKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLmJldGEgPCB0aGlzLmxvd2VyQmV0YUxpbWl0KSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5iZXRhID0gdGhpcy5sb3dlckJldGFMaW1pdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy51cHBlckJldGFMaW1pdCA9PT0gbnVsbCB8
fCB0aGlzLnVwcGVyQmV0YUxpbWl0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLmFsbG93VXBzaWRlRG93biAmJiB0aGlzLmJldGEgPCAtTWF0aC5QSSkgeworICAgICAgICAg
ICAgICAgIHRoaXMuYmV0YSA9IHRoaXMuYmV0YSArICgyICogTWF0aC5QSSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAodGhpcy5iZXRh
ID4gdGhpcy51cHBlckJldGFMaW1pdCkgeworICAgICAgICAgICAgICAgIHRoaXMuYmV0YSA9IHRo
aXMudXBwZXJCZXRhTGltaXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMubG93ZXJBbHBoYUxpbWl0ICE9PSBudWxsICYmIHRoaXMuYWxwaGEgPCB0aGlzLmxvd2Vy
QWxwaGFMaW1pdCkgeworICAgICAgICAgICAgdGhpcy5hbHBoYSA9IHRoaXMubG93ZXJBbHBoYUxp
bWl0OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnVwcGVyQWxwaGFMaW1pdCAhPT0gbnVs
bCAmJiB0aGlzLmFscGhhID4gdGhpcy51cHBlckFscGhhTGltaXQpIHsKKyAgICAgICAgICAgIHRo
aXMuYWxwaGEgPSB0aGlzLnVwcGVyQWxwaGFMaW1pdDsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5sb3dlclJhZGl1c0xpbWl0ICE9PSBudWxsICYmIHRoaXMucmFkaXVzIDwgdGhpcy5sb3dl
clJhZGl1c0xpbWl0KSB7CisgICAgICAgICAgICB0aGlzLnJhZGl1cyA9IHRoaXMubG93ZXJSYWRp
dXNMaW1pdDsKKyAgICAgICAgICAgIHRoaXMuaW5lcnRpYWxSYWRpdXNPZmZzZXQgPSAwOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLnVwcGVyUmFkaXVzTGltaXQgIT09IG51bGwgJiYgdGhp
cy5yYWRpdXMgPiB0aGlzLnVwcGVyUmFkaXVzTGltaXQpIHsKKyAgICAgICAgICAgIHRoaXMucmFk
aXVzID0gdGhpcy51cHBlclJhZGl1c0xpbWl0OworICAgICAgICAgICAgdGhpcy5pbmVydGlhbFJh
ZGl1c09mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlYnVp
bGRzIGFuZ2xlcyAoYWxwaGEsIGJldGEpIGFuZCByYWRpdXMgZnJvbSB0aGUgZ2l2ZSBwb3NpdGlv
biBhbmQgdGFyZ2V0CisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZS5yZWJ1
aWxkQW5nbGVzQW5kUmFkaXVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9wb3NpdGlv
bi5zdWJ0cmFjdFRvUmVmKHRoaXMuX2dldFRhcmdldFBvc2l0aW9uKCksIHRoaXMuX2NvbXB1dGF0
aW9uVmVjdG9yKTsKKyAgICAgICAgLy8gbmVlZCB0byByb3RhdGUgdG8gWSB1cCBlcXVpdmFsZW50
IGlmIHVwIHZlY3RvciBub3QgQXhpcy5ZCisgICAgICAgIGlmICh0aGlzLl91cFZlY3Rvci54ICE9
PSAwIHx8IHRoaXMuX3VwVmVjdG9yLnkgIT09IDEuMCB8fCB0aGlzLl91cFZlY3Rvci56ICE9PSAw
KSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYodGhpcy5fY29tcHV0
YXRpb25WZWN0b3IsIHRoaXMuX3VwVG9ZTWF0cml4LCB0aGlzLl9jb21wdXRhdGlvblZlY3Rvcik7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLl9jb21wdXRhdGlvblZlY3Rv
ci5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHRoaXMucmFkaXVzID09PSAwKSB7CisgICAgICAgICAg
ICB0aGlzLnJhZGl1cyA9IDAuMDAwMTsgLy8gSnVzdCB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJv
CisgICAgICAgIH0KKyAgICAgICAgLy8gQWxwaGEKKyAgICAgICAgaWYgKHRoaXMuX2NvbXB1dGF0
aW9uVmVjdG9yLnggPT09IDAgJiYgdGhpcy5fY29tcHV0YXRpb25WZWN0b3IueiA9PT0gMCkgewor
ICAgICAgICAgICAgdGhpcy5hbHBoYSA9IE1hdGguUEkgLyAyOyAvLyBhdm9pZCBkaXZpc2lvbiBi
eSB6ZXJvIHdoZW4gbG9va2luZyBhbG9uZyB1cCBheGlzLCBhbmQgc2V0IHRvIGFjb3MoMCkKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuYWxwaGEgPSBNYXRoLmFj
b3ModGhpcy5fY29tcHV0YXRpb25WZWN0b3IueCAvIE1hdGguc3FydChNYXRoLnBvdyh0aGlzLl9j
b21wdXRhdGlvblZlY3Rvci54LCAyKSArIE1hdGgucG93KHRoaXMuX2NvbXB1dGF0aW9uVmVjdG9y
LnosIDIpKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2NvbXB1dGF0aW9uVmVjdG9y
LnogPCAwKSB7CisgICAgICAgICAgICB0aGlzLmFscGhhID0gMiAqIE1hdGguUEkgLSB0aGlzLmFs
cGhhOworICAgICAgICB9CisgICAgICAgIC8vIEJldGEKKyAgICAgICAgdGhpcy5iZXRhID0gTWF0
aC5hY29zKHRoaXMuX2NvbXB1dGF0aW9uVmVjdG9yLnkgLyB0aGlzLnJhZGl1cyk7CisgICAgICAg
IHRoaXMuX2NoZWNrTGltaXRzKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVc2UgYSBwb3Np
dGlvbiB0byBkZWZpbmUgdGhlIGN1cnJlbnQgY2FtZXJhIHJlbGF0ZWQgaW5mb3JtYXRpb24gbGlr
ZSBhcGxoYSwgYmV0YSBhbmQgcmFkaXVzCisgICAgICogQHBhcmFtIHBvc2l0aW9uIERlZmluZXMg
dGhlIHBvc2l0aW9uIHRvIHNldCB0aGUgY2FtZXJhIGF0CisgICAgICovCisgICAgQXJjUm90YXRl
Q2FtZXJhLnByb3RvdHlwZS5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb3NpdGlvbikgeworICAg
ICAgICBpZiAodGhpcy5fcG9zaXRpb24uZXF1YWxzKHBvc2l0aW9uKSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Bvc2l0aW9uLmNvcHlGcm9tKHBvc2l0
aW9uKTsKKyAgICAgICAgdGhpcy5yZWJ1aWxkQW5nbGVzQW5kUmFkaXVzKCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSB0YXJnZXQgdGhlIGNhbWVyYSBzaG91bGQgbG9vayBh
dC4KKyAgICAgKiBUaGlzIHdpbGwgYXV0b21hdGljYWxseSBhZGFwdCBhbHBoYSBiZXRhIGFuZCBy
YWRpdXMgdG8gZml0IHdpdGhpbiB0aGUgbmV3IHRhcmdldC4KKyAgICAgKiBAcGFyYW0gdGFyZ2V0
IERlZmluZXMgdGhlIG5ldyB0YXJnZXQgYXMgYSBWZWN0b3Igb3IgYSBtZXNoCisgICAgICogQHBh
cmFtIHRvQm91bmRpbmdDZW50ZXIgSW4gY2FzZSBvZiBhIG1lc2ggdGFyZ2V0LCBkZWZpbmVzIHdl
dGhlciB0byB0YXJnZXQgdGhlIG1lc2ggcG9zaXRpb24gb3IgaXRzIGJvdW5kaW5nIGluZm9ybWF0
aW9uIGNlbnRlcgorICAgICAqIEBwYXJhbSBhbGxvd1NhbWVQb3NpdGlvbiBJZiBmYWxzZSwgcHJl
dmVudHMgcmVhcHBseWluZyB0aGUgbmV3IGNvbXB1dGVkIHBvc2l0aW9uIGlmIGl0IGlzIGlkZW50
aWNhbCB0byB0aGUgY3VycmVudCBvbmUgKG9wdGltKQorICAgICAqLworICAgIEFyY1JvdGF0ZUNh
bWVyYS5wcm90b3R5cGUuc2V0VGFyZ2V0ID0gZnVuY3Rpb24gKHRhcmdldCwgdG9Cb3VuZGluZ0Nl
bnRlciwgYWxsb3dTYW1lUG9zaXRpb24pIHsKKyAgICAgICAgaWYgKHRvQm91bmRpbmdDZW50ZXIg
PT09IHZvaWQgMCkgeyB0b0JvdW5kaW5nQ2VudGVyID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGFs
bG93U2FtZVBvc2l0aW9uID09PSB2b2lkIDApIHsgYWxsb3dTYW1lUG9zaXRpb24gPSBmYWxzZTsg
fQorICAgICAgICBpZiAodGFyZ2V0LmdldEJvdW5kaW5nSW5mbykgeworICAgICAgICAgICAgaWYg
KHRvQm91bmRpbmdDZW50ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXRCb3VuZGlu
Z0NlbnRlciA9IHRhcmdldC5nZXRCb3VuZGluZ0luZm8oKS5ib3VuZGluZ0JveC5jZW50ZXJXb3Js
ZC5jbG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5fdGFyZ2V0Qm91bmRpbmdDZW50ZXIgPSBudWxsOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGFyZ2V0LmNvbXB1dGVXb3JsZE1hdHJpeCgpOworICAgICAgICAgICAgdGhp
cy5fdGFyZ2V0SG9zdCA9IHRhcmdldDsKKyAgICAgICAgICAgIHRoaXMuX3RhcmdldCA9IHRoaXMu
X2dldFRhcmdldFBvc2l0aW9uKCk7CisgICAgICAgICAgICB0aGlzLm9uTWVzaFRhcmdldENoYW5n
ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzLl90YXJnZXRIb3N0KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBuZXdUYXJnZXQgPSB0YXJnZXQ7Cisg
ICAgICAgICAgICB2YXIgY3VycmVudFRhcmdldCA9IHRoaXMuX2dldFRhcmdldFBvc2l0aW9uKCk7
CisgICAgICAgICAgICBpZiAoY3VycmVudFRhcmdldCAmJiAhYWxsb3dTYW1lUG9zaXRpb24gJiYg
Y3VycmVudFRhcmdldC5lcXVhbHMobmV3VGFyZ2V0KSkgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3RhcmdldEhvc3QgPSBudWxsOwor
ICAgICAgICAgICAgdGhpcy5fdGFyZ2V0ID0gbmV3VGFyZ2V0OworICAgICAgICAgICAgdGhpcy5f
dGFyZ2V0Qm91bmRpbmdDZW50ZXIgPSBudWxsOworICAgICAgICAgICAgdGhpcy5vbk1lc2hUYXJn
ZXRDaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMobnVsbCk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5yZWJ1aWxkQW5nbGVzQW5kUmFkaXVzKCk7CisgICAgfTsKKyAgICAvKiogQGhp
ZGRlbiAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUuX2dldFZpZXdNYXRyaXggPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIC8vIENvbXB1dGUKKyAgICAgICAgdmFyIGNvc2EgPSBNYXRo
LmNvcyh0aGlzLmFscGhhKTsKKyAgICAgICAgdmFyIHNpbmEgPSBNYXRoLnNpbih0aGlzLmFscGhh
KTsKKyAgICAgICAgdmFyIGNvc2IgPSBNYXRoLmNvcyh0aGlzLmJldGEpOworICAgICAgICB2YXIg
c2luYiA9IE1hdGguc2luKHRoaXMuYmV0YSk7CisgICAgICAgIGlmIChzaW5iID09PSAwKSB7Cisg
ICAgICAgICAgICBzaW5iID0gMC4wMDAxOworICAgICAgICB9CisgICAgICAgIHZhciB0YXJnZXQg
PSB0aGlzLl9nZXRUYXJnZXRQb3NpdGlvbigpOworICAgICAgICB0aGlzLl9jb21wdXRhdGlvblZl
Y3Rvci5jb3B5RnJvbUZsb2F0cyh0aGlzLnJhZGl1cyAqIGNvc2EgKiBzaW5iLCB0aGlzLnJhZGl1
cyAqIGNvc2IsIHRoaXMucmFkaXVzICogc2luYSAqIHNpbmIpOworICAgICAgICAvLyBSb3RhdGUg
YWNjb3JkaW5nIHRvIHVwIHZlY3RvcgorICAgICAgICBpZiAodGhpcy5fdXBWZWN0b3IueCAhPT0g
MCB8fCB0aGlzLl91cFZlY3Rvci55ICE9PSAxLjAgfHwgdGhpcy5fdXBWZWN0b3IueiAhPT0gMCkg
eworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHRoaXMuX2NvbXB1dGF0
aW9uVmVjdG9yLCB0aGlzLl9ZVG9VcE1hdHJpeCwgdGhpcy5fY29tcHV0YXRpb25WZWN0b3IpOwor
ICAgICAgICB9CisgICAgICAgIHRhcmdldC5hZGRUb1JlZih0aGlzLl9jb21wdXRhdGlvblZlY3Rv
ciwgdGhpcy5fbmV3UG9zaXRpb24pOworICAgICAgICBpZiAodGhpcy5nZXRTY2VuZSgpLmNvbGxp
c2lvbnNFbmFibGVkICYmIHRoaXMuY2hlY2tDb2xsaXNpb25zKSB7CisgICAgICAgICAgICB2YXIg
Y29vcmRpbmF0b3IgPSB0aGlzLmdldFNjZW5lKCkuY29sbGlzaW9uQ29vcmRpbmF0b3I7CisgICAg
ICAgICAgICBpZiAoIXRoaXMuX2NvbGxpZGVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY29s
bGlkZXIgPSBjb29yZGluYXRvci5jcmVhdGVDb2xsaWRlcigpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhpcy5fY29sbGlkZXIuX3JhZGl1cyA9IHRoaXMuY29sbGlzaW9uUmFkaXVzOwor
ICAgICAgICAgICAgdGhpcy5fbmV3UG9zaXRpb24uc3VidHJhY3RUb1JlZih0aGlzLl9wb3NpdGlv
biwgdGhpcy5fY29sbGlzaW9uVmVsb2NpdHkpOworICAgICAgICAgICAgdGhpcy5fY29sbGlzaW9u
VHJpZ2dlcmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvb3JkaW5hdG9yLmdldE5ld1Bvc2l0aW9u
KHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9jb2xsaXNpb25WZWxvY2l0eSwgdGhpcy5fY29sbGlkZXIs
IDMsIG51bGwsIHRoaXMuX29uQ29sbGlzaW9uUG9zaXRpb25DaGFuZ2UsIHRoaXMudW5pcXVlSWQp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24u
Y29weUZyb20odGhpcy5fbmV3UG9zaXRpb24pOworICAgICAgICAgICAgdmFyIHVwID0gdGhpcy51
cFZlY3RvcjsKKyAgICAgICAgICAgIGlmICh0aGlzLmFsbG93VXBzaWRlRG93biAmJiBzaW5iIDwg
MCkgeworICAgICAgICAgICAgICAgIHVwID0gdXAubmVnYXRlKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl9jb21wdXRlVmlld01hdHJpeCh0aGlzLl9wb3NpdGlvbiwgdGFyZ2V0
LCB1cCk7CisgICAgICAgICAgICB0aGlzLl92aWV3TWF0cml4LmFkZEF0SW5kZXgoMTIsIHRoaXMu
dGFyZ2V0U2NyZWVuT2Zmc2V0LngpOworICAgICAgICAgICAgdGhpcy5fdmlld01hdHJpeC5hZGRB
dEluZGV4KDEzLCB0aGlzLnRhcmdldFNjcmVlbk9mZnNldC55KTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9jdXJyZW50VGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICByZXR1cm4gdGhpcy5fdmll
d01hdHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFpvb21zIG9uIGEgbWVzaCB0byBiZSBh
dCB0aGUgbWluIGRpc3RhbmNlIHdoZXJlIHdlIGNvdWxkIHNlZSBpdCBmdWxseSBpbiB0aGUgY3Vy
cmVudCB2aWV3cG9ydC4KKyAgICAgKiBAcGFyYW0gbWVzaGVzIERlZmluZXMgdGhlIG1lc2ggdG8g
em9vbSBvbgorICAgICAqIEBwYXJhbSBkb05vdFVwZGF0ZU1heFogRGVmaW5lcyB3aGV0aGVyIG9y
IG5vdCBtYXhaIHNob3VsZCBiZSB1cGRhdGVkIHdoaWxzdCB6b29taW5nIG9uIHRoZSBtZXNoICh0
aGlzIGNhbiBoYXBwZW4gaWYgdGhlIG1lc2ggaXMgYmlnIGFuZCB0aGUgbWF4cmFkaXVzIHByZXR0
eSBzbWFsbCBmb3IgaW5zdGFuY2UpCisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhLnByb3Rv
dHlwZS56b29tT24gPSBmdW5jdGlvbiAobWVzaGVzLCBkb05vdFVwZGF0ZU1heFopIHsKKyAgICAg
ICAgaWYgKGRvTm90VXBkYXRlTWF4WiA9PT0gdm9pZCAwKSB7IGRvTm90VXBkYXRlTWF4WiA9IGZh
bHNlOyB9CisgICAgICAgIG1lc2hlcyA9IG1lc2hlcyB8fCB0aGlzLmdldFNjZW5lKCkubWVzaGVz
OworICAgICAgICB2YXIgbWluTWF4VmVjdG9yID0gX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIk1lc2giXS5NaW5NYXgobWVzaGVzKTsKKyAgICAgICAgdmFyIGRpc3Rh
bmNlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
Y3RvcjMiXS5EaXN0YW5jZShtaW5NYXhWZWN0b3IubWluLCBtaW5NYXhWZWN0b3IubWF4KTsKKyAg
ICAgICAgdGhpcy5yYWRpdXMgPSBkaXN0YW5jZSAqIHRoaXMuem9vbU9uRmFjdG9yOworICAgICAg
ICB0aGlzLmZvY3VzT24oeyBtaW46IG1pbk1heFZlY3Rvci5taW4sIG1heDogbWluTWF4VmVjdG9y
Lm1heCwgZGlzdGFuY2U6IGRpc3RhbmNlIH0sIGRvTm90VXBkYXRlTWF4Wik7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBGb2N1cyBvbiBhIG1lc2ggb3IgYSBib3VuZGluZyBib3guIFRoaXMgYWRh
cHRzIHRoZSB0YXJnZXQgYW5kIG1heFJhZGl1cyBpZiBuZWNlc3NhcnkgYnV0IGRvZXMgbm90IHVw
ZGF0ZSB0aGUgY3VycmVudCByYWRpdXMuCisgICAgICogVGhlIHRhcmdldCB3aWxsIGJlIGNoYW5n
ZWQgYnV0IHRoZSByYWRpdXMKKyAgICAgKiBAcGFyYW0gbWVzaGVzT3JNaW5NYXhWZWN0b3JBbmRE
aXN0YW5jZSBEZWZpbmVzIHRoZSBtZXNoIG9yIGJvdW5kaW5nIGluZm8gdG8gZm9jdXMgb24KKyAg
ICAgKiBAcGFyYW0gZG9Ob3RVcGRhdGVNYXhaIERlZmluZXMgd2hldGhlciBvciBub3QgbWF4WiBz
aG91bGQgYmUgdXBkYXRlZCB3aGlsc3Qgem9vbWluZyBvbiB0aGUgbWVzaCAodGhpcyBjYW4gaGFw
cGVuIGlmIHRoZSBtZXNoIGlzIGJpZyBhbmQgdGhlIG1heHJhZGl1cyBwcmV0dHkgc21hbGwgZm9y
IGluc3RhbmNlKQorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUuZm9jdXNP
biA9IGZ1bmN0aW9uIChtZXNoZXNPck1pbk1heFZlY3RvckFuZERpc3RhbmNlLCBkb05vdFVwZGF0
ZU1heFopIHsKKyAgICAgICAgaWYgKGRvTm90VXBkYXRlTWF4WiA9PT0gdm9pZCAwKSB7IGRvTm90
VXBkYXRlTWF4WiA9IGZhbHNlOyB9CisgICAgICAgIHZhciBtZXNoZXNPck1pbk1heFZlY3RvcjsK
KyAgICAgICAgdmFyIGRpc3RhbmNlOworICAgICAgICBpZiAobWVzaGVzT3JNaW5NYXhWZWN0b3JB
bmREaXN0YW5jZS5taW4gPT09IHVuZGVmaW5lZCkgeyAvLyBtZXNoZXMKKyAgICAgICAgICAgIHZh
ciBtZXNoZXMgPSBtZXNoZXNPck1pbk1heFZlY3RvckFuZERpc3RhbmNlIHx8IHRoaXMuZ2V0U2Nl
bmUoKS5tZXNoZXM7CisgICAgICAgICAgICBtZXNoZXNPck1pbk1heFZlY3RvciA9IF9NZXNoZXNf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNZXNoIl0uTWluTWF4KG1lc2hlcyk7
CisgICAgICAgICAgICBkaXN0YW5jZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uRGlzdGFuY2UobWVzaGVzT3JNaW5NYXhWZWN0b3Iu
bWluLCBtZXNoZXNPck1pbk1heFZlY3Rvci5tYXgpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eyAvL21pbk1heFZlY3RvciBhbmQgZGlzdGFuY2UKKyAgICAgICAgICAgIHZhciBtaW5NYXhWZWN0
b3JBbmREaXN0YW5jZSA9IG1lc2hlc09yTWluTWF4VmVjdG9yQW5kRGlzdGFuY2U7CisgICAgICAg
ICAgICBtZXNoZXNPck1pbk1heFZlY3RvciA9IG1pbk1heFZlY3RvckFuZERpc3RhbmNlOworICAg
ICAgICAgICAgZGlzdGFuY2UgPSBtaW5NYXhWZWN0b3JBbmREaXN0YW5jZS5kaXN0YW5jZTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl90YXJnZXQgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siTWVzaCJdLkNlbnRlcihtZXNoZXNPck1pbk1heFZlY3Rvcik7Cisg
ICAgICAgIGlmICghZG9Ob3RVcGRhdGVNYXhaKSB7CisgICAgICAgICAgICB0aGlzLm1heFogPSBk
aXN0YW5jZSAqIDI7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEBvdmVycmlk
ZQorICAgICAqIE92ZXJyaWRlIENhbWVyYS5jcmVhdGVSaWdDYW1lcmEKKyAgICAgKi8KKyAgICBB
cmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLmNyZWF0ZVJpZ0NhbWVyYSA9IGZ1bmN0aW9uIChuYW1l
LCBjYW1lcmFJbmRleCkgeworICAgICAgICB2YXIgYWxwaGFTaGlmdCA9IDA7CisgICAgICAgIHN3
aXRjaCAodGhpcy5jYW1lcmFSaWdNb2RlKSB7CisgICAgICAgICAgICBjYXNlIF9jYW1lcmFfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ2FtZXJhIl0uUklHX01PREVfU1RFUkVPU0NPUElD
X0FOQUdMWVBIOgorICAgICAgICAgICAgY2FzZSBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19TSURFQllTSURFX1BBUkFM
TEVMOgorICAgICAgICAgICAgY2FzZSBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19PVkVSVU5ERVI6CisgICAgICAgICAg
ICBjYXNlIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ2FtZXJhIl0uUklH
X01PREVfVlI6CisgICAgICAgICAgICAgICAgYWxwaGFTaGlmdCA9IHRoaXMuX2NhbWVyYVJpZ1Bh
cmFtcy5zdGVyZW9IYWxmQW5nbGUgKiAoY2FtZXJhSW5kZXggPT09IDAgPyAxIDogLTEpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfY2FtZXJhX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19TSURFQllT
SURFX0NST1NTRVlFRDoKKyAgICAgICAgICAgICAgICBhbHBoYVNoaWZ0ID0gdGhpcy5fY2FtZXJh
UmlnUGFyYW1zLnN0ZXJlb0hhbGZBbmdsZSAqIChjYW1lcmFJbmRleCA9PT0gMCA/IC0xIDogMSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJpZ0NhbSA9
IG5ldyBBcmNSb3RhdGVDYW1lcmEobmFtZSwgdGhpcy5hbHBoYSArIGFscGhhU2hpZnQsIHRoaXMu
YmV0YSwgdGhpcy5yYWRpdXMsIHRoaXMuX3RhcmdldCwgdGhpcy5nZXRTY2VuZSgpKTsKKyAgICAg
ICAgcmlnQ2FtLl9jYW1lcmFSaWdQYXJhbXMgPSB7fTsKKyAgICAgICAgcmV0dXJuIHJpZ0NhbTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAg
KiBPdmVycmlkZSBDYW1lcmEuX3VwZGF0ZVJpZ0NhbWVyYXMKKyAgICAgKi8KKyAgICBBcmNSb3Rh
dGVDYW1lcmEucHJvdG90eXBlLl91cGRhdGVSaWdDYW1lcmFzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgY2FtTGVmdCA9IHRoaXMuX3JpZ0NhbWVyYXNbMF07CisgICAgICAgIHZhciBjYW1S
aWdodCA9IHRoaXMuX3JpZ0NhbWVyYXNbMV07CisgICAgICAgIGNhbUxlZnQuYmV0YSA9IGNhbVJp
Z2h0LmJldGEgPSB0aGlzLmJldGE7CisgICAgICAgIHN3aXRjaCAodGhpcy5jYW1lcmFSaWdNb2Rl
KSB7CisgICAgICAgICAgICBjYXNlIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siQ2FtZXJhIl0uUklHX01PREVfU1RFUkVPU0NPUElDX0FOQUdMWVBIOgorICAgICAgICAgICAg
Y2FzZSBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNhbWVyYSJdLlJJR19N
T0RFX1NURVJFT1NDT1BJQ19TSURFQllTSURFX1BBUkFMTEVMOgorICAgICAgICAgICAgY2FzZSBf
Y2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNhbWVyYSJdLlJJR19NT0RFX1NU
RVJFT1NDT1BJQ19PVkVSVU5ERVI6CisgICAgICAgICAgICBjYXNlIF9jYW1lcmFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siQ2FtZXJhIl0uUklHX01PREVfVlI6CisgICAgICAgICAgICAg
ICAgY2FtTGVmdC5hbHBoYSA9IHRoaXMuYWxwaGEgLSB0aGlzLl9jYW1lcmFSaWdQYXJhbXMuc3Rl
cmVvSGFsZkFuZ2xlOworICAgICAgICAgICAgICAgIGNhbVJpZ2h0LmFscGhhID0gdGhpcy5hbHBo
YSArIHRoaXMuX2NhbWVyYVJpZ1BhcmFtcy5zdGVyZW9IYWxmQW5nbGU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siQ2FtZXJhIl0uUklHX01PREVfU1RFUkVPU0NPUElDX1NJREVCWVNJREVfQ1JPU1NF
WUVEOgorICAgICAgICAgICAgICAgIGNhbUxlZnQuYWxwaGEgPSB0aGlzLmFscGhhICsgdGhpcy5f
Y2FtZXJhUmlnUGFyYW1zLnN0ZXJlb0hhbGZBbmdsZTsKKyAgICAgICAgICAgICAgICBjYW1SaWdo
dC5hbHBoYSA9IHRoaXMuYWxwaGEgLSB0aGlzLl9jYW1lcmFSaWdQYXJhbXMuc3RlcmVvSGFsZkFu
Z2xlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIF9zdXBlci5w
cm90b3R5cGUuX3VwZGF0ZVJpZ0NhbWVyYXMuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIERlc3Ryb3kgdGhlIGNhbWVyYSBhbmQgcmVsZWFzZSB0aGUgY3VycmVudCByZXNvdXJj
ZXMgaG9sZCBieSBpdC4KKyAgICAgKi8KKyAgICBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLmRp
c3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuaW5wdXRzLmNsZWFyKCk7CisgICAg
ICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgY3VycmVudCBvYmplY3QgY2xhc3MgbmFtZS4KKyAgICAgKiBAcmV0
dXJuIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlw
ZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQXJjUm90YXRl
Q2FtZXJhIjsKKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2Ft
ZXJhLnByb3RvdHlwZSwgImFscGhhIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJiZXRhIiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJyYWRpdXMiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVmVjdG9yMyJdKSgidGFyZ2V0IikKKyAgICBdLCBBcmNS
b3RhdGVDYW1lcmEucHJvdG90eXBlLCAiX3RhcmdldCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
QXNWZWN0b3IzIl0pKCJ1cFZlY3RvciIpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlw
ZSwgIl91cFZlY3RvciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNS
b3RhdGVDYW1lcmEucHJvdG90eXBlLCAiaW5lcnRpYWxBbHBoYU9mZnNldCIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAiaW5l
cnRpYWxCZXRhT2Zmc2V0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFy
Y1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJpbmVydGlhbFJhZGl1c09mZnNldCIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAi
bG93ZXJBbHBoYUxpbWl0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFy
Y1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJ1cHBlckFscGhhTGltaXQiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZSwgImxvd2Vy
QmV0YUxpbWl0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0
ZUNhbWVyYS5wcm90b3R5cGUsICJ1cHBlckJldGFMaW1pdCIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAibG93ZXJSYWRpdXNM
aW1pdCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1l
cmEucHJvdG90eXBlLCAidXBwZXJSYWRpdXNMaW1pdCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAiaW5lcnRpYWxQYW5uaW5n
WCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEu
cHJvdG90eXBlLCAiaW5lcnRpYWxQYW5uaW5nWSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAicGluY2hUb1Bhbk1heERpc3Rh
bmNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVy
YS5wcm90b3R5cGUsICJwYW5uaW5nRGlzdGFuY2VMaW1pdCIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplQXNWZWN0b3IzIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAicGFu
bmluZ09yaWdpblRhcmdldCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBB
cmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAicGFubmluZ0luZXJ0aWEiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZSwgInpvb21P
bkZhY3RvciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVD
YW1lcmEucHJvdG90eXBlLCAidGFyZ2V0U2NyZWVuT2Zmc2V0Iiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJhbGxvd1Vwc2lk
ZURvd24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2Ft
ZXJhLnByb3RvdHlwZSwgInVzZUlucHV0VG9SZXN0b3JlU3RhdGUiLCB2b2lkIDApOworICAgIHJl
dHVybiBBcmNSb3RhdGVDYW1lcmE7Cit9KF90YXJnZXRDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEwX19bIlRhcmdldENhbWVyYSJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0Nh
bWVyYXMvYXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlci50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IEFyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlcjsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIu
ZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfSW5wdXRzX2FyY1Jv
dGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYVBv
aW50ZXJzSW5wdXQgKi8gIi4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJ
bnB1dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX0lucHV0c19hcmNS
b3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2Ft
ZXJhS2V5Ym9hcmRNb3ZlSW5wdXQgKi8gIi4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2FtZXJh
S2V5Ym9hcmRNb3ZlSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJh
c19JbnB1dHNfYXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL0lucHV0cy9h
cmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQgKi8gIi4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90
YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNNYW5hZ2Vy
ICovICIuL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOworCisKKworCisKKy8qKgor
ICogRGVmYXVsdCBJbnB1dHMgbWFuYWdlciBmb3IgdGhlIEFyY1JvdGF0ZUNhbWVyYS4KKyAqIEl0
IGdyb3VwcyBhbGwgdGhlIGRlZmF1bHQgc3VwcG9ydGVkIGlucHV0cyBmb3IgZWFzZSBvZiB1c2Uu
CisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXppbmdfY2Ft
ZXJhX2lucHV0cworICovCit2YXIgQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlciA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShBcmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyLCBf
c3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBBcmNSb3RhdGVDYW1l
cmFJbnB1dHNNYW5hZ2VyLgorICAgICAqIEBwYXJhbSBjYW1lcmEgRGVmaW5lcyB0aGUgY2FtZXJh
IHRoZSBpbnB1dHMgYmVsb25nIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gQXJjUm90YXRlQ2Ft
ZXJhSW5wdXRzTWFuYWdlcihjYW1lcmEpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRo
aXMsIGNhbWVyYSkgfHwgdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIG1vdXNlIHdo
ZWVsIGlucHV0IHN1cHBvcnQgdG8gdGhlIGlucHV0IG1hbmFnZXIuCisgICAgICogQHJldHVybnMg
dGhlIGN1cnJlbnQgaW5wdXQgbWFuYWdlcgorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYUlu
cHV0c01hbmFnZXIucHJvdG90eXBlLmFkZE1vdXNlV2hlZWwgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuYWRkKG5ldyBfQ2FtZXJhc19JbnB1dHNfYXJjUm90YXRlQ2FtZXJhTW91c2VXaGVl
bElucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFyY1JvdGF0ZUNhbWVyYU1vdXNl
V2hlZWxJbnB1dCJdKCkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFkZCBwb2ludGVycyBpbnB1dCBzdXBwb3J0IHRvIHRoZSBpbnB1dCBtYW5hZ2VyLgor
ICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IGlucHV0IG1hbmFnZXIKKyAgICAgKi8KKyAgICBB
cmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyLnByb3RvdHlwZS5hZGRQb2ludGVycyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdGhpcy5hZGQobmV3IF9DYW1lcmFzX0lucHV0c19hcmNSb3RhdGVD
YW1lcmFQb2ludGVyc0lucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFyY1JvdGF0
ZUNhbWVyYVBvaW50ZXJzSW5wdXQiXSgpKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBZGQga2V5Ym9hcmQgaW5wdXQgc3VwcG9ydCB0byB0aGUgaW5wdXQg
bWFuYWdlci4KKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBpbnB1dCBtYW5hZ2VyCisgICAg
ICovCisgICAgQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlci5wcm90b3R5cGUuYWRkS2V5Ym9h
cmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuYWRkKG5ldyBfQ2FtZXJhc19JbnB1dHNf
YXJjUm90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siQXJjUm90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiXSgpKTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4gQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdl
cjsKK30oX0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJDYW1lcmFJbnB1dHNNYW5hZ2VyIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9DYW1lcmFzL2NhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL0NhbWVyYXMvY2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDYW1lcmEgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDYW1l
cmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3NtYXJ0
QXJyYXkgKi8gIi4vTWlzYy9zbWFydEFycmF5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAi
Li9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGUgKi8gIi4vbm9kZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIgKi8g
Ii4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBl
U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGV2VG9vbHMgKi8gIi4vTWlz
Yy9kZXZUb29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3Zp
ZXdwb3J0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0aHMvbWF0aC52aWV3cG9ydCAqLyAiLi9NYXRocy9tYXRoLnZpZXdwb3J0LnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfZnJ1c3R1bV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhz
L21hdGguZnJ1c3R1bSAqLyAiLi9NYXRocy9tYXRoLmZydXN0dW0udHMiKTsKKworCisKKworCisK
KworCisKKworCisKKy8qKgorICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgdGhlIGNh
bWVyYSB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9u
anMuY29tL2ZlYXR1cmVzL2NhbWVyYXMKKyAqLwordmFyIENhbWVyYSA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShDYW1lcmEsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFu
dGlhdGVzIGEgbmV3IGNhbWVyYSBvYmplY3QuCisgICAgICogVGhpcyBzaG91bGQgbm90IGJlIHVz
ZWQgZGlyZWN0bHkgYnV0IHRocm91Z2ggdGhlIGluaGVyaXRlZCBjYW1lcmFzOiBBcmNSb3RhdGUs
IEZyZWUuLi4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9j
YW1lcmFzCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY2FtZXJh
IGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBEZWZpbmVzIHRoZSBwb3NpdGlv
biBvZiB0aGUgY2FtZXJhCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRo
ZSBjYW1lcmEgYmVsb25ncyB0b28KKyAgICAgKiBAcGFyYW0gc2V0QWN0aXZlT25TY2VuZUlmTm9u
ZUFjdGl2ZSBEZWZpbmVzIGlmIHRoZSBjYW1lcmEgc2hvdWxkIGJlIHNldCBhcyBhY3RpdmUgYWZ0
ZXIgY3JlYXRpb24gaWYgbm8gb3RoZXIgY2FtZXJhIGhhdmUgYmVlbiBkZWZpbmVkIGluIHRoZSBz
Y2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIENhbWVyYShuYW1lLCBwb3NpdGlvbiwgc2NlbmUs
IHNldEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUpIHsKKyAgICAgICAgaWYgKHNldEFjdGl2ZU9u
U2NlbmVJZk5vbmVBY3RpdmUgPT09IHZvaWQgMCkgeyBzZXRBY3RpdmVPblNjZW5lSWZOb25lQWN0
aXZlID0gdHJ1ZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1l
LCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMu
X3Bvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgdmVjdG9y
IHRoZSBjYW1lcmEgc2hvdWxkIGNvbnNpZGVyIGFzIHVwLgorICAgICAgICAgKiAoZGVmYXVsdCBp
cyBWZWN0b3IzKDAsIDEsIDApIGFrYSBWZWN0b3IzLlVwKCkpCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy51cFZlY3RvciA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNV9fWyJWZWN0b3IzIl0uVXAoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZSB0aGUgY3VycmVudCBsaW1pdCBvbiB0aGUgbGVmdCBzaWRlIGZvciBhbiBvcnRob2dyYXBoaWMg
Y2FtZXJhCisgICAgICAgICAqIEluIHNjZW5lIHVuaXQKKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLm9ydGhvTGVmdCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhl
IGN1cnJlbnQgbGltaXQgb24gdGhlIHJpZ2h0IHNpZGUgZm9yIGFuIG9ydGhvZ3JhcGhpYyBjYW1l
cmEKKyAgICAgICAgICogSW4gc2NlbmUgdW5pdAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
b3J0aG9SaWdodCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGN1
cnJlbnQgbGltaXQgb24gdGhlIGJvdHRvbSBzaWRlIGZvciBhbiBvcnRob2dyYXBoaWMgY2FtZXJh
CisgICAgICAgICAqIEluIHNjZW5lIHVuaXQKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9y
dGhvQm90dG9tID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0aGUgY3Vy
cmVudCBsaW1pdCBvbiB0aGUgdG9wIHNpZGUgZm9yIGFuIG9ydGhvZ3JhcGhpYyBjYW1lcmEKKyAg
ICAgICAgICogSW4gc2NlbmUgdW5pdAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub3J0aG9U
b3AgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogRmllbGQgT2YgVmlldyBpcyBzZXQg
aW4gUmFkaWFucy4gKGRlZmF1bHQgaXMgMC44KQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
Zm92ID0gMC44OworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGRp
c3RhbmNlIHRoZSBjYW1lcmEgY2FuIHNlZSBmcm9tLgorICAgICAgICAgKiBUaGlzIGlzIGltcG9y
dGFudCB0byBub3RlIHRoYXQgdGhlIGRlcHRoIGJ1ZmZlciBhcmUgbm90IGluZmluaXRlIGFuZCB0
aGUgY2xvc2VyIGl0IHN0YXJ0cworICAgICAgICAgKiB0aGUgbW9yZSB5b3VyIHNjZW5lIG1pZ2h0
IGVuY291bnRlciBkZXB0aCBmaWdodGluZyBpc3N1ZS4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLm1pblogPSAxOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBtYXhpbXVt
IGRpc3RhbmNlIHRoZSBjYW1lcmEgY2FuIHNlZSB0by4KKyAgICAgICAgICogVGhpcyBpcyBpbXBv
cnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBkZXB0aCBidWZmZXIgYXJlIG5vdCBpbmZpbml0ZSBhbmQg
dGhlIGZ1cnRoZXIgaXQgZW5kCisgICAgICAgICAqIHRoZSBtb3JlIHlvdXIgc2NlbmUgbWlnaHQg
ZW5jb3VudGVyIGRlcHRoIGZpZ2h0aW5nIGlzc3VlLgorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMubWF4WiA9IDEwMDAwLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGRl
ZmF1bHQgaW5lcnRpYSBvZiB0aGUgY2FtZXJhLgorICAgICAgICAgKiBUaGlzIGhlbHBzIGdpdmlu
ZyBhIHNtb290aCBmZWVsaW5nIHRvIHRoZSBjYW1lcmEgbW92ZW1lbnQuCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5pbmVydGlhID0gMC45OworICAgICAgICAvKioKKyAgICAgICAgICogRGVm
aW5lIHRoZSBtb2RlIG9mIHRoZSBjYW1lcmEgKENhbWVyYS5QRVJTUEVDVElWRV9DQU1FUkEgb3Ig
Q2FtZXJhLk9SVEhPR1JBUEhJQ19DQU1FUkEpCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5t
b2RlID0gQ2FtZXJhLlBFUlNQRUNUSVZFX0NBTUVSQTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZSB3ZXRoZXIgdGhlIGNhbWVyYSBpcyBpbnRlcm1lZGlhdGUuCisgICAgICAgICAqIFRo
aXMgaXMgdXNlZnVsIHRvIG5vdCBwcmVzZW50IHRoZSBvdXRwdXQgZGlyZWN0bHkgdG8gdGhlIHNj
cmVlbiBpbiBjYXNlIG9mIHJpZyB3aXRob3V0IHBvc3QgcHJvY2VzcyBmb3IgaW5zdGFuY2UKKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLmlzSW50ZXJtZWRpYXRlID0gZmFsc2U7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIHZpZXdwb3J0IG9mIHRoZSBjYW1lcmEuCisgICAg
ICAgICAqIFRoaXMgY29ycmVzcG9uZCB0byB0aGUgcG9ydGlvbiBvZiB0aGUgc2NyZWVuIHRoZSBj
YW1lcmEgd2lsbCByZW5kZXIgdG8gaW4gbm9ybWFsaXplZCAwIHRvIDEgdW5pdC4KKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLnZpZXdwb3J0ID0gbmV3IF9NYXRoc19tYXRoX3ZpZXdwb3J0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJWaWV3cG9ydCJdKDAsIDAsIDEuMCwgMS4wKTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFJlc3RyaWN0cyB0aGUgY2FtZXJhIHRvIHZpZXdpbmcg
b2JqZWN0cyB3aXRoIHRoZSBzYW1lIGxheWVyTWFzay4KKyAgICAgICAgICogQSBjYW1lcmEgd2l0
aCBhIGxheWVyTWFzayBvZiAxIHdpbGwgcmVuZGVyIG1lc2gubGF5ZXJNYXNrICYgY2FtZXJhLmxh
eWVyTWFzayE9PSAwCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5sYXllck1hc2sgPSAweDBG
RkZGRkZGOworICAgICAgICAvKioKKyAgICAgICAgICogZm92TW9kZSBzZXRzIHRoZSBjYW1lcmEg
ZnJ1c3R1bSBib3VuZHMgdG8gdGhlIHZpZXdwb3J0IGJvdW5kcy4gKGRlZmF1bHQgaXMgRk9WTU9E
RV9WRVJUSUNBTF9GSVhFRCkKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmZvdk1vZGUgPSBD
YW1lcmEuRk9WTU9ERV9WRVJUSUNBTF9GSVhFRDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJp
ZyBtb2RlIG9mIHRoZSBjYW1lcmEuCisgICAgICAgICAqIFRoaXMgaXMgdXNlZnVsIHRvIGNyZWF0
ZSB0aGUgY2FtZXJhIHdpdGggdHdvICJleWVzIiBpbnN0ZWFkIG9mIG9uZSB0byBjcmVhdGUgVlIg
b3Igc3RlcmVvc2NvcGljIHNjZW5lcy4KKyAgICAgICAgICogVGhpcyBpcyBub3JtYWxseSBjb250
cm9sbGVkIGJ5dCB0aGUgY2FtZXJhIHRoZW1zZWx2ZXMgYXMgaW50ZXJuYWwgdXNlLgorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMuY2FtZXJhUmlnTW9kZSA9IENhbWVyYS5SSUdfTU9ERV9OT05F
OworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgbGlzdCBvZiBjdXN0b20gcmVu
ZGVyIHRhcmdldCB3aGljaCBhcmUgcmVuZGVyZWQgdG8gYW5kIHRoZW4gdXNlZCBhcyB0aGUgaW5w
dXQgdG8gdGhpcyBjYW1lcmEncyByZW5kZXIuIEVnLiBkaXNwbGF5IGFub3RoZXIgY2FtZXJhIHZp
ZXcgb24gYSBUViBpbiB0aGUgbWFpbiBzY2VuZQorICAgICAgICAgKiBUaGlzIGlzIHByZXR0eSBo
ZWxwZnVsbCBpZiB5b3Ugd2lzaCB0byBtYWtlIGEgY2FtZXJhIHJlbmRlciB0byBhIHRleHR1cmUg
eW91IGNvdWxkIHJldXNlIHNvbWV3aGVyZQorICAgICAgICAgKiBlbHNlIGluIHRoZSBzY2VuZS4g
KEVnLiBzZWN1cml0eSBjYW1lcmEpCisgICAgICAgICAqCisgICAgICAgICAqIFRvIGNoYW5nZSB0
aGUgZmluYWwgb3V0cHV0IHRhcmdldCBvZiB0aGUgY2FtZXJhLCBjYW1lcmEub3V0cHV0UmVuZGVy
VGFyZ2V0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQgKGVnLiB3ZWJYUiByZW5kZXJzIHRvIGEgcmVu
ZGVyIHRhcmdldCBjb3JyaXNwb25kaW5nIHRvIGFuIEhNRCkKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLmN1c3RvbVJlbmRlclRhcmdldHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFdoZW4gc2V0LCB0aGUgY2FtZXJhIHdpbGwgcmVuZGVyIHRvIHRoaXMgcmVuZGVy
IHRhcmdldCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGNhbnZhcworICAgICAgICAgKgorICAgICAg
ICAgKiBJZiB0aGUgZGVzaXJlIGlzIHRvIHVzZSB0aGUgb3V0cHV0IG9mIGEgY2FtZXJhIGFzIGEg
dGV4dHVyZSBpbiB0aGUgc2NlbmUgY29uc2lkZXIgdXNpbmcgY2FtZXJhLmN1c3RvbVJlbmRlclRh
cmdldHMgaW5zdGVhZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub3V0cHV0UmVuZGVyVGFy
Z2V0ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgdHJpZ2dlcmVk
IHdoZW4gdGhlIGNhbWVyYSB2aWV3IG1hdHJpeCBoYXMgY2hhbmdlZC4KKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLm9uVmlld01hdHJpeENoYW5nZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29i
c2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siT2JzZXJ2YWJsZSJdKCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxlIHRyaWdnZXJlZCB3aGVuIHRoZSBjYW1l
cmEgUHJvamVjdGlvbiBtYXRyaXggaGFzIGNoYW5nZWQuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5vblByb2plY3Rpb25NYXRyaXhDaGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNl
cnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk9ic2VydmFibGUiXSgpOworICAg
ICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSB0cmlnZ2VyZWQgd2hlbiB0aGUgaW5wdXRz
IGhhdmUgYmVlbiBwcm9jZXNzZWQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkFmdGVy
Q2hlY2tJbnB1dHNPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBPYnNlcnZhYmxlIHRyaWdnZXJlZCB3aGVuIHJlc2V0IGhhcyBiZWVuIGNhbGxlZCBhbmQgYXBw
bGllZCB0byB0aGUgY2FtZXJhLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25SZXN0b3Jl
U3RhdGVPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAg
ICAgIF90aGlzLl9yaWdDYW1lcmFzID0gbmV3IEFycmF5KCk7CisgICAgICAgIF90aGlzLl93ZWJ2
clZpZXdNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAg
ICAgX3RoaXMuX3NraXBSZW5kZXJpbmcgPSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICAgICAgX3RoaXMuX3Byb2plY3Rpb25NYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1hdHJpeCJdKCk7CisgICAgICAgIC8qKiBA
aGlkZGVuICovCisgICAgICAgIF90aGlzLl9wb3N0UHJvY2Vzc2VzID0gbmV3IEFycmF5KCk7Cisg
ICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9hY3RpdmVNZXNoZXMgPSBuZXcg
X01pc2Nfc21hcnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTbWFydEFycmF5
Il0oMjU2KTsKKyAgICAgICAgX3RoaXMuX2dsb2JhbFBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAg
ICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9jb21wdXRlZFZpZXdNYXRyaXggPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0cml4Il0u
SWRlbnRpdHkoKTsKKyAgICAgICAgX3RoaXMuX2RvTm90Q29tcHV0ZVByb2plY3Rpb25NYXRyaXgg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX3RyYW5zZm9ybU1hdHJpeCA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAg
ICAgIF90aGlzLl9yZWZyZXNoRnJ1c3R1bVBsYW5lcyA9IHRydWU7CisgICAgICAgIC8qKiBAaGlk
ZGVuICovCisgICAgICAgIF90aGlzLl9pc0NhbWVyYSA9IHRydWU7CisgICAgICAgIC8qKiBAaGlk
ZGVuICovCisgICAgICAgIF90aGlzLl9pc0xlZnRDYW1lcmEgPSBmYWxzZTsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2lzUmlnaHRDYW1lcmEgPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuZ2V0U2NlbmUoKS5hZGRDYW1lcmEoX3RoaXMpOworICAgICAgICBpZiAoc2V0QWN0
aXZlT25TY2VuZUlmTm9uZUFjdGl2ZSAmJiAhX3RoaXMuZ2V0U2NlbmUoKS5hY3RpdmVDYW1lcmEp
IHsKKyAgICAgICAgICAgIF90aGlzLmdldFNjZW5lKCkuYWN0aXZlQ2FtZXJhID0gX3RoaXM7Cisg
ICAgICAgIH0KKyAgICAgICAgX3RoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgcmV0
dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FtZXJhLnByb3Rv
dHlwZSwgInBvc2l0aW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBj
dXJyZW50IGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgaW4gdGhlIHNjZW5lCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9wb3NpdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UG9zaXRp
b24pIHsKKyAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3UG9zaXRpb247CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFN0b3JlIGN1cnJlbnQgY2FtZXJhIHN0YXRlIChm
b3YsIHBvc2l0aW9uLCBldGMuLikKKyAgICAgKiBAcmV0dXJucyB0aGUgY2FtZXJhCisgICAgICov
CisgICAgQ2FtZXJhLnByb3RvdHlwZS5zdG9yZVN0YXRlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB0aGlzLl9zdGF0ZVN0b3JlZCA9IHRydWU7CisgICAgICAgIHRoaXMuX3N0b3JlZEZvdiA9IHRo
aXMuZm92OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
c3RvcmVzIHRoZSBjYW1lcmEgc3RhdGUgdmFsdWVzIGlmIGl0IGhhcyBiZWVuIHN0b3JlZC4gWW91
IG11c3QgY2FsbCBzdG9yZVN0YXRlKCkgZmlyc3QKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90
eXBlLl9yZXN0b3JlU3RhdGVWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhp
cy5fc3RhdGVTdG9yZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLmZvdiA9IHRoaXMuX3N0b3JlZEZvdjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXN0b3JlZCBjYW1lcmEgc3RhdGUuIFlvdSBtdXN0
IGNhbGwgc3RvcmVTdGF0ZSgpIGZpcnN0LgorICAgICAqIEByZXR1cm5zIHRydWUgaWYgcmVzdG9y
ZWQgYW5kIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIENhbWVyYS5wcm90b3R5cGUucmVz
dG9yZVN0YXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fcmVzdG9yZVN0YXRl
VmFsdWVzKCkpIHsKKyAgICAgICAgICAgIHRoaXMub25SZXN0b3JlU3RhdGVPYnNlcnZhYmxlLm5v
dGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhl
IGNsYXNzIG5hbWUgb2YgdGhlIGNhbWVyYS4KKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFt
ZQorICAgICAqLworICAgIENhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gIkNhbWVyYSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjYW1lcmEgdXNlZnVsIGZvciBkZWJ1
ZyBwdXJwb3NlLgorICAgICAqIEBwYXJhbSBmdWxsRGV0YWlscyBEZWZpbmVzIHRoYXQgYSBtb3Jl
IHZlcmJvZSBsZXZlbCBvZiBsb2dnaW5nIGlzIHJlcXVpcmVkCisgICAgICogQHJldHVybnMgdGhl
IHN0cmluZyByZXByZXNlbnRhdGlvbgorICAgICAqLworICAgIENhbWVyYS5wcm90b3R5cGUudG9T
dHJpbmcgPSBmdW5jdGlvbiAoZnVsbERldGFpbHMpIHsKKyAgICAgICAgdmFyIHJldCA9ICJOYW1l
OiAiICsgdGhpcy5uYW1lOworICAgICAgICByZXQgKz0gIiwgdHlwZTogIiArIHRoaXMuZ2V0Q2xh
c3NOYW1lKCk7CisgICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbnMpIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hbmltYXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgcmV0ICs9ICIsIGFuaW1hdGlvblswXTogIiArIHRoaXMuYW5pbWF0aW9uc1tpXS50
b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGZ1bGxEZXRhaWxzKSB7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDYW1lcmEucHJvdG90eXBlLCAiZ2xvYmFsUG9z
aXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHdvcmxk
IHNwYWNlIHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEuCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbG9iYWxQb3NpdGlvbjsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGlzdCBvZiBhY3Rp
dmUgbWVzaGVzIHRoaXMgZnJhbWUgKG1lc2hlcyBubyBjdWxsZWQgb3IgZXhjbHVkZWQgYnkgbG9k
IHMgaW4gdGhlIGZyYW1lKQorICAgICAqIEByZXR1cm5zIHRoZSBhY3RpdmUgbWVzaGUgbGlzdAor
ICAgICAqLworICAgIENhbWVyYS5wcm90b3R5cGUuZ2V0QWN0aXZlTWVzaGVzID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlTWVzaGVzOworICAgIH07CisgICAgLyoq
CisgICAgICogQ2hlY2sgd2V0aGVyIGEgbWVzaCBpcyBwYXJ0IG9mIHRoZSBjdXJyZW50IGFjdGl2
ZSBtZXNoIGxpc3Qgb2YgdGhlIGNhbWVyYQorICAgICAqIEBwYXJhbSBtZXNoIERlZmluZXMgdGhl
IG1lc2ggdG8gY2hlY2sKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGFjdGl2ZSwgZmFsc2Ugb3Ro
ZXJ3aXNlCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5pc0FjdGl2ZU1lc2ggPSBmdW5j
dGlvbiAobWVzaCkgeworICAgICAgICByZXR1cm4gKHRoaXMuX2FjdGl2ZU1lc2hlcy5pbmRleE9m
KG1lc2gpICE9PSAtMSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJcyB0aGlzIGNhbWVyYSBy
ZWFkeSB0byBiZSB1c2VkL3JlbmRlcmVkCisgICAgICogQHBhcmFtIGNvbXBsZXRlQ2hlY2sgZGVm
aW5lcyBpZiBhIGNvbXBsZXRlIGNoZWNrIChpbmNsdWRpbmcgcG9zdCBwcm9jZXNzZXMpIGhhcyB0
byBiZSBkb25lIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUg
Y2FtZXJhIGlzIHJlYWR5CisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5pc1JlYWR5ID0g
ZnVuY3Rpb24gKGNvbXBsZXRlQ2hlY2spIHsKKyAgICAgICAgaWYgKGNvbXBsZXRlQ2hlY2sgPT09
IHZvaWQgMCkgeyBjb21wbGV0ZUNoZWNrID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGNvbXBsZXRl
Q2hlY2spIHsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9wb3N0UHJv
Y2Vzc2VzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZhciBwcCA9
IF9hW19pXTsKKyAgICAgICAgICAgICAgICBpZiAocHAgJiYgIXBwLmlzUmVhZHkoKSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmlzUmVh
ZHkuY2FsbCh0aGlzLCBjb21wbGV0ZUNoZWNrKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICov
CisgICAgQ2FtZXJhLnByb3RvdHlwZS5faW5pdENhY2hlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLl9pbml0Q2FjaGUuY2FsbCh0aGlzKTsKKyAgICAgICAgdGhpcy5f
Y2FjaGUucG9zaXRpb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlZlY3RvcjMiXShOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVF
LCBOdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICAgICAgdGhpcy5fY2FjaGUudXBWZWN0b3IgPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMi
XShOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFKTsK
KyAgICAgICAgdGhpcy5fY2FjaGUubW9kZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgdGhpcy5fY2Fj
aGUubWluWiA9IHVuZGVmaW5lZDsKKyAgICAgICAgdGhpcy5fY2FjaGUubWF4WiA9IHVuZGVmaW5l
ZDsKKyAgICAgICAgdGhpcy5fY2FjaGUuZm92ID0gdW5kZWZpbmVkOworICAgICAgICB0aGlzLl9j
YWNoZS5mb3ZNb2RlID0gdW5kZWZpbmVkOworICAgICAgICB0aGlzLl9jYWNoZS5hc3BlY3RSYXRp
byA9IHVuZGVmaW5lZDsKKyAgICAgICAgdGhpcy5fY2FjaGUub3J0aG9MZWZ0ID0gdW5kZWZpbmVk
OworICAgICAgICB0aGlzLl9jYWNoZS5vcnRob1JpZ2h0ID0gdW5kZWZpbmVkOworICAgICAgICB0
aGlzLl9jYWNoZS5vcnRob0JvdHRvbSA9IHVuZGVmaW5lZDsKKyAgICAgICAgdGhpcy5fY2FjaGUu
b3J0aG9Ub3AgPSB1bmRlZmluZWQ7CisgICAgICAgIHRoaXMuX2NhY2hlLnJlbmRlcldpZHRoID0g
dW5kZWZpbmVkOworICAgICAgICB0aGlzLl9jYWNoZS5yZW5kZXJIZWlnaHQgPSB1bmRlZmluZWQ7
CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIENhbWVyYS5wcm90b3R5cGUuX3VwZGF0
ZUNhY2hlID0gZnVuY3Rpb24gKGlnbm9yZVBhcmVudENsYXNzKSB7CisgICAgICAgIGlmICghaWdu
b3JlUGFyZW50Q2xhc3MpIHsKKyAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX3VwZGF0ZUNh
Y2hlLmNhbGwodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2FjaGUucG9zaXRpb24u
Y29weUZyb20odGhpcy5wb3NpdGlvbik7CisgICAgICAgIHRoaXMuX2NhY2hlLnVwVmVjdG9yLmNv
cHlGcm9tKHRoaXMudXBWZWN0b3IpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBD
YW1lcmEucHJvdG90eXBlLl9pc1N5bmNocm9uaXplZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2lzU3luY2hyb25pemVkVmlld01hdHJpeCgpICYmIHRoaXMuX2lzU3luY2hy
b25pemVkUHJvamVjdGlvbk1hdHJpeCgpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBDYW1lcmEucHJvdG90eXBlLl9pc1N5bmNocm9uaXplZFZpZXdNYXRyaXggPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICghX3N1cGVyLnByb3RvdHlwZS5faXNTeW5jaHJvbml6ZWQuY2FsbCh0
aGlzKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLl9jYWNoZS5wb3NpdGlvbi5lcXVhbHModGhpcy5wb3NpdGlvbikKKyAgICAgICAg
ICAgICYmIHRoaXMuX2NhY2hlLnVwVmVjdG9yLmVxdWFscyh0aGlzLnVwVmVjdG9yKQorICAgICAg
ICAgICAgJiYgdGhpcy5pc1N5bmNocm9uaXplZFdpdGhQYXJlbnQoKTsKKyAgICB9OworICAgIC8q
KiBAaGlkZGVuICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5faXNTeW5jaHJvbml6ZWRQcm9qZWN0
aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgY2hlY2sgPSB0aGlzLl9jYWNo
ZS5tb2RlID09PSB0aGlzLm1vZGUKKyAgICAgICAgICAgICYmIHRoaXMuX2NhY2hlLm1pblogPT09
IHRoaXMubWluWgorICAgICAgICAgICAgJiYgdGhpcy5fY2FjaGUubWF4WiA9PT0gdGhpcy5tYXha
OworICAgICAgICBpZiAoIWNoZWNrKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMuZ2V0RW5naW5lKCk7CisgICAgICAgIGlm
ICh0aGlzLm1vZGUgPT09IENhbWVyYS5QRVJTUEVDVElWRV9DQU1FUkEpIHsKKyAgICAgICAgICAg
IGNoZWNrID0gdGhpcy5fY2FjaGUuZm92ID09PSB0aGlzLmZvdgorICAgICAgICAgICAgICAgICYm
IHRoaXMuX2NhY2hlLmZvdk1vZGUgPT09IHRoaXMuZm92TW9kZQorICAgICAgICAgICAgICAgICYm
IHRoaXMuX2NhY2hlLmFzcGVjdFJhdGlvID09PSBlbmdpbmUuZ2V0QXNwZWN0UmF0aW8odGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjaGVjayA9IHRoaXMuX2Nh
Y2hlLm9ydGhvTGVmdCA9PT0gdGhpcy5vcnRob0xlZnQKKyAgICAgICAgICAgICAgICAmJiB0aGlz
Ll9jYWNoZS5vcnRob1JpZ2h0ID09PSB0aGlzLm9ydGhvUmlnaHQKKyAgICAgICAgICAgICAgICAm
JiB0aGlzLl9jYWNoZS5vcnRob0JvdHRvbSA9PT0gdGhpcy5vcnRob0JvdHRvbQorICAgICAgICAg
ICAgICAgICYmIHRoaXMuX2NhY2hlLm9ydGhvVG9wID09PSB0aGlzLm9ydGhvVG9wCisgICAgICAg
ICAgICAgICAgJiYgdGhpcy5fY2FjaGUucmVuZGVyV2lkdGggPT09IGVuZ2luZS5nZXRSZW5kZXJX
aWR0aCgpCisgICAgICAgICAgICAgICAgJiYgdGhpcy5fY2FjaGUucmVuZGVySGVpZ2h0ID09PSBl
bmdpbmUuZ2V0UmVuZGVySGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoZWNr
OworICAgIH07CisgICAgLyoqCisgICAgICogQXR0YWNoIHRoZSBpbnB1dCBjb250cm9scyB0byBh
IHNwZWNpZmljIGRvbSBlbGVtZW50IHRvIGdldCB0aGUgaW5wdXQgZnJvbS4KKyAgICAgKiBAcGFy
YW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVtZW50IHRoZSBjb250cm9scyBzaG91bGQgYmUgbGlz
dGVuZWQgZnJvbQorICAgICAqIEBwYXJhbSBub1ByZXZlbnREZWZhdWx0IERlZmluZXMgd2hldGhl
ciBldmVudCBjYXVnaHQgYnkgdGhlIGNvbnRyb2xzIHNob3VsZCBjYWxsIHByZXZlbnRkZWZhdWx0
KCkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVu
dC9wcmV2ZW50RGVmYXVsdCkKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLmF0dGFjaENv
bnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCkgeworICAgIH07Cisg
ICAgLyoqCisgICAgICogRGV0YWNoIHRoZSBjdXJyZW50IGNvbnRyb2xzIGZyb20gdGhlIHNwZWNp
ZmllZCBkb20gZWxlbWVudC4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVt
ZW50IHRvIHN0b3AgbGlzdGVuaW5nIHRoZSBpbnB1dHMgZnJvbQorICAgICAqLworICAgIENhbWVy
YS5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGNhbWVyYSBzdGF0ZSBhY2NvcmRpbmcgdG8gdGhl
IGRpZmZlcmVudCBpbnB1dHMgZ2F0aGVyZWQgZHVyaW5nIHRoZSBmcmFtZS4KKyAgICAgKi8KKyAg
ICBDYW1lcmEucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5f
Y2hlY2tJbnB1dHMoKTsKKyAgICAgICAgaWYgKHRoaXMuY2FtZXJhUmlnTW9kZSAhPT0gQ2FtZXJh
LlJJR19NT0RFX05PTkUpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVJpZ0NhbWVyYXMoKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBDYW1lcmEucHJvdG90
eXBlLl9jaGVja0lucHV0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5vbkFmdGVyQ2hl
Y2tJbnB1dHNPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICB9OworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShDYW1lcmEucHJvdG90eXBlLCAicmlnQ2FtZXJhcyIsIHsKKyAg
ICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fcmlnQ2FtZXJhczsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KENhbWVyYS5wcm90b3R5cGUsICJyaWdQb3N0UHJvY2VzcyIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBvc3QgcHJvY2VzcyB1c2VkIGJ5IHRo
ZSByaWcgY2FtZXJhcworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fcmlnUG9zdFByb2Nlc3M7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIC8qKgorICAgICAqIEludGVybmFsLCBnZXRzIHRoZSBmaXJzdCBwb3N0IHByb2Nlcy4K
KyAgICAgKiBAcmV0dXJucyB0aGUgZmlyc3QgcG9zdCBwcm9jZXNzIHRvIGJlIHJ1biBvbiB0aGlz
IGNhbWVyYS4KKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLl9nZXRGaXJzdFBvc3RQcm9j
ZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBwcEluZGV4ID0gMDsgcHBJbmRl
eCA8IHRoaXMuX3Bvc3RQcm9jZXNzZXMubGVuZ3RoOyBwcEluZGV4KyspIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9wb3N0UHJvY2Vzc2VzW3BwSW5kZXhdICE9PSBudWxsKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3Bvc3RQcm9jZXNzZXNbcHBJbmRleF07CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICBDYW1lcmEucHJv
dG90eXBlLl9jYXNjYWRlUG9zdFByb2Nlc3Nlc1RvUmlnQ2FtcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgLy8gaW52YWxpZGF0ZSBmcmFtZWJ1ZmZlcgorICAgICAgICB2YXIgZmlyc3RQb3N0UHJv
Y2VzcyA9IHRoaXMuX2dldEZpcnN0UG9zdFByb2Nlc3MoKTsKKyAgICAgICAgaWYgKGZpcnN0UG9z
dFByb2Nlc3MpIHsKKyAgICAgICAgICAgIGZpcnN0UG9zdFByb2Nlc3MubWFya1RleHR1cmVEaXJ0
eSgpOworICAgICAgICB9CisgICAgICAgIC8vIGdsdWUgdGhlIHJpZ1Bvc3RQcm9jZXNzIHRvIHRo
ZSBlbmQgb2YgdGhlIHVzZXIgcG9zdHByb2Nlc3NlcyAmIGFzc2lnbiB0byBlYWNoIHN1Yi1jYW1l
cmEKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3JpZ0NhbWVyYXMubGVuZ3Ro
OyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjYW0gPSB0aGlzLl9yaWdDYW1lcmFz
W2ldOworICAgICAgICAgICAgdmFyIHJpZ1Bvc3RQcm9jZXNzID0gY2FtLl9yaWdQb3N0UHJvY2Vz
czsKKyAgICAgICAgICAgIC8vIGZvciBWUiByaWcsIHRoZXJlIGRvZXMgbm90IGhhdmUgdG8gYmUg
YSBwb3N0IHByb2Nlc3MKKyAgICAgICAgICAgIGlmIChyaWdQb3N0UHJvY2VzcykgeworICAgICAg
ICAgICAgICAgIHZhciBpc1Bhc3MgPSByaWdQb3N0UHJvY2Vzcy5nZXRFZmZlY3ROYW1lKCkgPT09
ICJwYXNzIjsKKyAgICAgICAgICAgICAgICBpZiAoaXNQYXNzKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIGFueSByaWcgd2hpY2ggaGFzIGEgUGFzc1Bvc3RQcm9jZXNzIGZvciByaWdbMF0sIGNh
bm5vdCBiZSBpc0ludGVybWVkaWF0ZSB3aGVuIHRoZXJlIGFyZSBhbHNvIHVzZXIgcG9zdFByb2Nl
c3NlcworICAgICAgICAgICAgICAgICAgICBjYW0uaXNJbnRlcm1lZGlhdGUgPSB0aGlzLl9wb3N0
UHJvY2Vzc2VzLmxlbmd0aCA9PT0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY2FtLl9wb3N0UHJvY2Vzc2VzID0gdGhpcy5fcG9zdFByb2Nlc3Nlcy5zbGljZSgwKS5jb25j
YXQocmlnUG9zdFByb2Nlc3MpOworICAgICAgICAgICAgICAgIHJpZ1Bvc3RQcm9jZXNzLm1hcmtU
ZXh0dXJlRGlydHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGNhbS5fcG9zdFByb2Nlc3NlcyA9IHRoaXMuX3Bvc3RQcm9jZXNzZXMuc2xpY2Uo
MCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEF0
dGFjaCBhIHBvc3QgcHJvY2VzcyB0byB0aGUgY2FtZXJhLgorICAgICAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNzZXMjYXR0YWNoLXBv
c3Rwcm9jZXNzCisgICAgICogQHBhcmFtIHBvc3RQcm9jZXNzIFRoZSBwb3N0IHByb2Nlc3MgdG8g
YXR0YWNoIHRvIHRoZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gaW5zZXJ0QXQgVGhlIHBvc2l0aW9u
IG9mIHRoZSBwb3N0IHByb2Nlc3MgaW4gY2FzZSBzZXZlcmFsIG9mIHRoZW0gYXJlIGluIHVzZSBp
biB0aGUgc2NlbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgcG9zaXRpb24gdGhlIHBvc3QgcHJvY2Vz
cyBoYXMgYmVlbiBpbnNlcnRlZCBhdAorICAgICAqLworICAgIENhbWVyYS5wcm90b3R5cGUuYXR0
YWNoUG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAocG9zdFByb2Nlc3MsIGluc2VydEF0KSB7CisgICAg
ICAgIGlmIChpbnNlcnRBdCA9PT0gdm9pZCAwKSB7IGluc2VydEF0ID0gbnVsbDsgfQorICAgICAg
ICBpZiAoIXBvc3RQcm9jZXNzLmlzUmV1c2FibGUoKSAmJiB0aGlzLl9wb3N0UHJvY2Vzc2VzLmlu
ZGV4T2YocG9zdFByb2Nlc3MpID4gLTEpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJMb2dnZXIiXS5FcnJvcigiWW91J3JlIHRyeWluZyB0
byByZXVzZSBhIHBvc3QgcHJvY2VzcyBub3QgZGVmaW5lZCBhcyByZXVzYWJsZS4iKTsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChpbnNlcnRBdCA9PSBudWxs
IHx8IGluc2VydEF0IDwgMCkgeworICAgICAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3Nlcy5wdXNo
KHBvc3RQcm9jZXNzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLl9wb3N0UHJv
Y2Vzc2VzW2luc2VydEF0XSA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5fcG9zdFByb2Nl
c3Nlc1tpbnNlcnRBdF0gPSBwb3N0UHJvY2VzczsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzZXMuc3BsaWNlKGluc2VydEF0LCAwLCBwb3N0
UHJvY2Vzcyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2FzY2FkZVBvc3RQcm9jZXNzZXNU
b1JpZ0NhbXMoKTsgLy8gYWxzbyBlbnN1cmVzIGZyYW1lYnVmZmVyIGludmFsaWRhdGVkCisgICAg
ICAgIHJldHVybiB0aGlzLl9wb3N0UHJvY2Vzc2VzLmluZGV4T2YocG9zdFByb2Nlc3MpOworICAg
IH07CisgICAgLyoqCisgICAgICogRGV0YWNoIGEgcG9zdCBwcm9jZXNzIHRvIHRoZSBjYW1lcmEu
CisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vf
cG9zdHByb2Nlc3NlcyNhdHRhY2gtcG9zdHByb2Nlc3MKKyAgICAgKiBAcGFyYW0gcG9zdFByb2Nl
c3MgVGhlIHBvc3QgcHJvY2VzcyB0byBkZXRhY2ggZnJvbSB0aGUgY2FtZXJhCisgICAgICovCisg
ICAgQ2FtZXJhLnByb3RvdHlwZS5kZXRhY2hQb3N0UHJvY2VzcyA9IGZ1bmN0aW9uIChwb3N0UHJv
Y2VzcykgeworICAgICAgICB2YXIgaWR4ID0gdGhpcy5fcG9zdFByb2Nlc3Nlcy5pbmRleE9mKHBv
c3RQcm9jZXNzKTsKKyAgICAgICAgaWYgKGlkeCAhPT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMu
X3Bvc3RQcm9jZXNzZXNbaWR4XSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2Fz
Y2FkZVBvc3RQcm9jZXNzZXNUb1JpZ0NhbXMoKTsgLy8gYWxzbyBlbnN1cmVzIGZyYW1lYnVmZmVy
IGludmFsaWRhdGVkCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHdv
cmxkIG1hdHJpeCBvZiB0aGUgY2FtZXJhCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5n
ZXRXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2lzU3luY2hy
b25pemVkVmlld01hdHJpeCgpKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRNYXRy
aXg7CisgICAgICAgIH0KKyAgICAgICAgLy8gR2V0dGluZyB0aGUgdGhlIHZpZXcgbWF0cml4IHdp
bGwgYWxzbyBjb21wdXRlIHRoZSB3b3JsZCBtYXRyaXguCisgICAgICAgIHRoaXMuZ2V0Vmlld01h
dHJpeCgpOworICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRNYXRyaXg7CisgICAgfTsKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIENhbWVyYS5wcm90b3R5cGUuX2dldFZpZXdNYXRyaXggPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEdldHMgdGhlIGN1cnJlbnQgdmlldyBtYXRyaXggb2YgdGhlIGNhbWVyYS4KKyAgICAg
KiBAcGFyYW0gZm9yY2UgZm9yY2VzIHRoZSBjYW1lcmEgdG8gcmVjb21wdXRlIHRoZSBtYXRyaXgg
d2l0aG91dCBsb29raW5nIGF0IHRoZSBjYWNoZWQgc3RhdGUKKyAgICAgKiBAcmV0dXJucyB0aGUg
dmlldyBtYXRyaXgKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLmdldFZpZXdNYXRyaXgg
PSBmdW5jdGlvbiAoZm9yY2UpIHsKKyAgICAgICAgaWYgKCFmb3JjZSAmJiB0aGlzLl9pc1N5bmNo
cm9uaXplZFZpZXdNYXRyaXgoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVk
Vmlld01hdHJpeDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7CisgICAg
ICAgIHRoaXMuX2NvbXB1dGVkVmlld01hdHJpeCA9IHRoaXMuX2dldFZpZXdNYXRyaXgoKTsKKyAg
ICAgICAgdGhpcy5fY3VycmVudFJlbmRlcklkID0gdGhpcy5nZXRTY2VuZSgpLmdldFJlbmRlcklk
KCk7CisgICAgICAgIHRoaXMuX2NoaWxkVXBkYXRlSWQrKzsKKyAgICAgICAgdGhpcy5fcmVmcmVz
aEZydXN0dW1QbGFuZXMgPSB0cnVlOworICAgICAgICBpZiAodGhpcy5fY2FtZXJhUmlnUGFyYW1z
ICYmIHRoaXMuX2NhbWVyYVJpZ1BhcmFtcy52clByZVZpZXdNYXRyaXgpIHsKKyAgICAgICAgICAg
IHRoaXMuX2NvbXB1dGVkVmlld01hdHJpeC5tdWx0aXBseVRvUmVmKHRoaXMuX2NhbWVyYVJpZ1Bh
cmFtcy52clByZVZpZXdNYXRyaXgsIHRoaXMuX2NvbXB1dGVkVmlld01hdHJpeCk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gTm90aWZ5IHBhcmVudCBjYW1lcmEgaWYgcmlnIGNhbWVyYSBpcyBjaGFu
Z2VkCisgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5vblZpZXdNYXRyaXhD
aGFuZ2VkT2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgdGhpcy5wYXJlbnQub25WaWV3TWF0cml4
Q2hhbmdlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMucGFyZW50KTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLm9uVmlld01hdHJpeENoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2Vy
dmVycyh0aGlzKTsKKyAgICAgICAgdGhpcy5fY29tcHV0ZWRWaWV3TWF0cml4LmludmVydFRvUmVm
KHRoaXMuX3dvcmxkTWF0cml4KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVkVmlld01h
dHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEZyZWV6ZSB0aGUgcHJvamVjdGlvbiBtYXRy
aXguCisgICAgICogSXQgd2lsbCBwcmV2ZW50IHRoZSBjYWNoZSBjaGVjayBvZiB0aGUgY2FtZXJh
IHByb2plY3Rpb24gY29tcHV0ZSBhbmQgY2FuIHNwZWVkIHVwIHBlcmYKKyAgICAgKiBpZiBubyBw
YXJhbWV0ZXIgb2YgdGhlIGNhbWVyYSBhcmUgbWVhbnQgdG8gY2hhbmdlCisgICAgICogQHBhcmFt
IHByb2plY3Rpb24gRGVmaW5lcyBtYW51YWxseSBhIHByb2plY3Rpb24gaWYgbmVjZXNzYXJ5Cisg
ICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5mcmVlemVQcm9qZWN0aW9uTWF0cml4ID0gZnVu
Y3Rpb24gKHByb2plY3Rpb24pIHsKKyAgICAgICAgdGhpcy5fZG9Ob3RDb21wdXRlUHJvamVjdGlv
bk1hdHJpeCA9IHRydWU7CisgICAgICAgIGlmIChwcm9qZWN0aW9uICE9PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb25NYXRyaXggPSBwcm9qZWN0aW9uOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVbmZyZWV6ZSB0aGUgcHJvamVjdGlvbiBtYXRy
aXggaWYgaXQgaGFzIHByZXZpb3VzbHkgYmVlbiBmcmVlemVkIGJ5IGZyZWV6ZVByb2plY3Rpb25N
YXRyaXguCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS51bmZyZWV6ZVByb2plY3Rpb25N
YXRyaXggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2RvTm90Q29tcHV0ZVByb2plY3Rp
b25NYXRyaXggPSBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJl
bnQgcHJvamVjdGlvbiBtYXRyaXggb2YgdGhlIGNhbWVyYS4KKyAgICAgKiBAcGFyYW0gZm9yY2Ug
Zm9yY2VzIHRoZSBjYW1lcmEgdG8gcmVjb21wdXRlIHRoZSBtYXRyaXggd2l0aG91dCBsb29raW5n
IGF0IHRoZSBjYWNoZWQgc3RhdGUKKyAgICAgKiBAcmV0dXJucyB0aGUgcHJvamVjdGlvbiBtYXRy
aXgKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLmdldFByb2plY3Rpb25NYXRyaXggPSBm
dW5jdGlvbiAoZm9yY2UpIHsKKyAgICAgICAgaWYgKHRoaXMuX2RvTm90Q29tcHV0ZVByb2plY3Rp
b25NYXRyaXggfHwgKCFmb3JjZSAmJiB0aGlzLl9pc1N5bmNocm9uaXplZFByb2plY3Rpb25NYXRy
aXgoKSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9qZWN0aW9uTWF0cml4OworICAg
ICAgICB9CisgICAgICAgIC8vIENhY2hlCisgICAgICAgIHRoaXMuX2NhY2hlLm1vZGUgPSB0aGlz
Lm1vZGU7CisgICAgICAgIHRoaXMuX2NhY2hlLm1pblogPSB0aGlzLm1pblo7CisgICAgICAgIHRo
aXMuX2NhY2hlLm1heFogPSB0aGlzLm1heFo7CisgICAgICAgIC8vIE1hdHJpeAorICAgICAgICB0
aGlzLl9yZWZyZXNoRnJ1c3R1bVBsYW5lcyA9IHRydWU7CisgICAgICAgIHZhciBlbmdpbmUgPSB0
aGlzLmdldEVuZ2luZSgpOworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7Cisg
ICAgICAgIGlmICh0aGlzLm1vZGUgPT09IENhbWVyYS5QRVJTUEVDVElWRV9DQU1FUkEpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2NhY2hlLmZvdiA9IHRoaXMuZm92OworICAgICAgICAgICAgdGhpcy5f
Y2FjaGUuZm92TW9kZSA9IHRoaXMuZm92TW9kZTsKKyAgICAgICAgICAgIHRoaXMuX2NhY2hlLmFz
cGVjdFJhdGlvID0gZW5naW5lLmdldEFzcGVjdFJhdGlvKHRoaXMpOworICAgICAgICAgICAgaWYg
KHRoaXMubWluWiA8PSAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5taW5aID0gMC4xOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjZW5lLnVzZVJpZ2h0SGFuZGVkU3lzdGVtKSB7
CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIk1hdHJpeCJdLlBlcnNwZWN0aXZlRm92UkhUb1JlZih0aGlzLmZvdiwgZW5naW5l
LmdldEFzcGVjdFJhdGlvKHRoaXMpLCB0aGlzLm1pblosIHRoaXMubWF4WiwgdGhpcy5fcHJvamVj
dGlvbk1hdHJpeCwgdGhpcy5mb3ZNb2RlID09PSBDYW1lcmEuRk9WTU9ERV9WRVJUSUNBTF9GSVhF
RCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0cml4Il0u
UGVyc3BlY3RpdmVGb3ZMSFRvUmVmKHRoaXMuZm92LCBlbmdpbmUuZ2V0QXNwZWN0UmF0aW8odGhp
cyksIHRoaXMubWluWiwgdGhpcy5tYXhaLCB0aGlzLl9wcm9qZWN0aW9uTWF0cml4LCB0aGlzLmZv
dk1vZGUgPT09IENhbWVyYS5GT1ZNT0RFX1ZFUlRJQ0FMX0ZJWEVEKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBoYWxmV2lkdGggPSBl
bmdpbmUuZ2V0UmVuZGVyV2lkdGgoKSAvIDIuMDsKKyAgICAgICAgICAgIHZhciBoYWxmSGVpZ2h0
ID0gZW5naW5lLmdldFJlbmRlckhlaWdodCgpIC8gMi4wOworICAgICAgICAgICAgaWYgKHNjZW5l
LnVzZVJpZ2h0SGFuZGVkU3lzdGVtKSB7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1hdHJpeCJdLk9ydGhvT2ZmQ2VudGVy
UkhUb1JlZih0aGlzLm9ydGhvTGVmdCB8fCAtaGFsZldpZHRoLCB0aGlzLm9ydGhvUmlnaHQgfHwg
aGFsZldpZHRoLCB0aGlzLm9ydGhvQm90dG9tIHx8IC1oYWxmSGVpZ2h0LCB0aGlzLm9ydGhvVG9w
IHx8IGhhbGZIZWlnaHQsIHRoaXMubWluWiwgdGhpcy5tYXhaLCB0aGlzLl9wcm9qZWN0aW9uTWF0
cml4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRyaXgi
XS5PcnRob09mZkNlbnRlckxIVG9SZWYodGhpcy5vcnRob0xlZnQgfHwgLWhhbGZXaWR0aCwgdGhp
cy5vcnRob1JpZ2h0IHx8IGhhbGZXaWR0aCwgdGhpcy5vcnRob0JvdHRvbSB8fCAtaGFsZkhlaWdo
dCwgdGhpcy5vcnRob1RvcCB8fCBoYWxmSGVpZ2h0LCB0aGlzLm1pblosIHRoaXMubWF4WiwgdGhp
cy5fcHJvamVjdGlvbk1hdHJpeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9j
YWNoZS5vcnRob0xlZnQgPSB0aGlzLm9ydGhvTGVmdDsKKyAgICAgICAgICAgIHRoaXMuX2NhY2hl
Lm9ydGhvUmlnaHQgPSB0aGlzLm9ydGhvUmlnaHQ7CisgICAgICAgICAgICB0aGlzLl9jYWNoZS5v
cnRob0JvdHRvbSA9IHRoaXMub3J0aG9Cb3R0b207CisgICAgICAgICAgICB0aGlzLl9jYWNoZS5v
cnRob1RvcCA9IHRoaXMub3J0aG9Ub3A7CisgICAgICAgICAgICB0aGlzLl9jYWNoZS5yZW5kZXJX
aWR0aCA9IGVuZ2luZS5nZXRSZW5kZXJXaWR0aCgpOworICAgICAgICAgICAgdGhpcy5fY2FjaGUu
cmVuZGVySGVpZ2h0ID0gZW5naW5lLmdldFJlbmRlckhlaWdodCgpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMub25Qcm9qZWN0aW9uTWF0cml4Q2hhbmdlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2
ZXJzKHRoaXMpOworICAgICAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbk1hdHJpeDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCAoaWUuIHRo
ZSBtdWx0aXBsaWNhdGlvbiBvZiB2aWV3IGJ5IHByb2plY3Rpb24gbWF0cmljZXMpCisgICAgICog
QHJldHVybnMgYSBNYXRyaXgKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLmdldFRyYW5z
Zm9ybWF0aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jb21wdXRlZFZp
ZXdNYXRyaXgubXVsdGlwbHlUb1JlZih0aGlzLl9wcm9qZWN0aW9uTWF0cml4LCB0aGlzLl90cmFu
c2Zvcm1NYXRyaXgpOworICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtTWF0cml4OworICAg
IH07CisgICAgQ2FtZXJhLnByb3RvdHlwZS5fdXBkYXRlRnJ1c3R1bVBsYW5lcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9yZWZyZXNoRnJ1c3R1bVBsYW5lcykgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuZ2V0VHJhbnNmb3JtYXRpb25N
YXRyaXgoKTsKKyAgICAgICAgaWYgKCF0aGlzLl9mcnVzdHVtUGxhbmVzKSB7CisgICAgICAgICAg
ICB0aGlzLl9mcnVzdHVtUGxhbmVzID0gX01hdGhzX21hdGhfZnJ1c3R1bV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTFfX1siRnJ1c3R1bSJdLkdldFBsYW5lcyh0aGlzLl90cmFuc2Zvcm1NYXRy
aXgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX01hdGhzX21hdGhf
ZnJ1c3R1bV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siRnJ1c3R1bSJdLkdldFBsYW5l
c1RvUmVmKHRoaXMuX3RyYW5zZm9ybU1hdHJpeCwgdGhpcy5fZnJ1c3R1bVBsYW5lcyk7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fcmVmcmVzaEZydXN0dW1QbGFuZXMgPSBmYWxzZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBhIGN1bGxhYmxlIG9iamVjdCAobWVzaC4uLikg
aXMgaW4gdGhlIGNhbWVyYSBmcnVzdHVtCisgICAgICogVGhpcyBjaGVja3MgdGhlIGJvdW5kaW5n
IGJveCBjZW50ZXIuIFNlZSBpc0NvbXBsZXRlbHlJbkZydXN0dW0gZm9yIGEgZnVsbCBib3VuZGlu
ZyBjaGVjaworICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0byBjaGVjaworICAgICAq
IEBwYXJhbSBjaGVja1JpZ0NhbWVyYXMgSWYgdGhlIHJpZyBjYW1lcmFzIHNob3VsZCBiZSBjaGVj
a2VkIChlZy4gd2l0aCB3ZWJWUiBjYW1lcmEgYm90aCBleWVzIHNob3VsZCBiZSBjaGVja2VkKSAo
RGVmYXVsdDogZmFsc2UpCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGlu
IGZydXN0dW0gb3RoZXJ3aXNlIGZhbHNlCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5p
c0luRnJ1c3R1bSA9IGZ1bmN0aW9uICh0YXJnZXQsIGNoZWNrUmlnQ2FtZXJhcykgeworICAgICAg
ICBpZiAoY2hlY2tSaWdDYW1lcmFzID09PSB2b2lkIDApIHsgY2hlY2tSaWdDYW1lcmFzID0gZmFs
c2U7IH0KKyAgICAgICAgdGhpcy5fdXBkYXRlRnJ1c3R1bVBsYW5lcygpOworICAgICAgICBpZiAo
Y2hlY2tSaWdDYW1lcmFzICYmIHRoaXMucmlnQ2FtZXJhcy5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLnJpZ0NhbWVyYXMuZm9y
RWFjaChmdW5jdGlvbiAoY2FtKSB7CisgICAgICAgICAgICAgICAgY2FtLl91cGRhdGVGcnVzdHVt
UGxhbmVzKCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRhcmdldC5pc0lu
RnJ1c3R1bShjYW0uX2ZydXN0dW1QbGFuZXMpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuIHRhcmdldC5pc0luRnJ1c3R1bSh0aGlzLl9mcnVzdHVtUGxhbmVzKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIGEgY3VsbGFibGUgb2JqZWN0ICht
ZXNoLi4uKSBpcyBpbiB0aGUgY2FtZXJhIGZydXN0dW0KKyAgICAgKiBVbmxpa2UgaXNJbkZydXN0
dW0gdGhpcyBjaGVrcyB0aGUgZnVsbCBib3VuZGluZyBib3gKKyAgICAgKiBAcGFyYW0gdGFyZ2V0
IFRoZSBvYmplY3QgdG8gY2hlY2sKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3Qg
aXMgaW4gZnJ1c3R1bSBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90
eXBlLmlzQ29tcGxldGVseUluRnJ1c3R1bSA9IGZ1bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAg
dGhpcy5fdXBkYXRlRnJ1c3R1bVBsYW5lcygpOworICAgICAgICByZXR1cm4gdGFyZ2V0LmlzQ29t
cGxldGVseUluRnJ1c3R1bSh0aGlzLl9mcnVzdHVtUGxhbmVzKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEdldHMgYSByYXkgaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uIGZyb20gdGhlIGNhbWVy
YS4KKyAgICAgKiBAcGFyYW0gbGVuZ3RoIERlZmluZXMgdGhlIGxlbmd0aCBvZiB0aGUgcmF5IHRv
IGNyZWF0ZQorICAgICAqIEBwYXJhbSB0cmFuc2Zvcm0gRGVmaW5lcyB0aGUgdHJhbnNmb3JtIHRv
IGFwcGx5IHRvIHRoZSByYXksIGJ5IGRlZmF1bHQgdGhlIHdvcmxkIG1hdHJ4IGlzIHVzZWQgdG8g
Y3JlYXRlIGEgd29ya2Qgc3BhY2UgcmF5CisgICAgICogQHBhcmFtIG9yaWdpbiBEZWZpbmVzIHRo
ZSBzdGFydCBwb2ludCBvZiB0aGUgcmF5IHdoaWNoIGRlZmF1bHRzIHRvIHRoZSBjYW1lcmEgcG9z
aXRpb24KKyAgICAgKiBAcmV0dXJucyB0aGUgZm9yd2FyZCByYXkKKyAgICAgKi8KKyAgICBDYW1l
cmEucHJvdG90eXBlLmdldEZvcndhcmRSYXkgPSBmdW5jdGlvbiAobGVuZ3RoLCB0cmFuc2Zvcm0s
IG9yaWdpbikgeworICAgICAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsgbGVuZ3RoID0gMTAw
OyB9CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIlJheSIpOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmVsZWFzZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5vZGUuCisgICAg
ICogQHBhcmFtIGRvTm90UmVjdXJzZSBTZXQgdG8gdHJ1ZSB0byBub3QgcmVjdXJzZSBpbnRvIGVh
Y2ggY2hpbGRyZW4gKHJlY3Vyc2UgaW50byBlYWNoIGNoaWxkcmVuIGJ5IGRlZmF1bHQpCisgICAg
ICogQHBhcmFtIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzIFNldCB0byB0cnVlIHRvIGFsc28g
ZGlzcG9zZSByZWZlcmVuY2VkIG1hdGVyaWFscyBhbmQgdGV4dHVyZXMgKGZhbHNlIGJ5IGRlZmF1
bHQpCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGRv
Tm90UmVjdXJzZSwgZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMpIHsKKyAgICAgICAgaWYgKGRp
c3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzID09PSB2b2lkIDApIHsgZGlzcG9zZU1hdGVyaWFsQW5k
VGV4dHVyZXMgPSBmYWxzZTsgfQorICAgICAgICAvLyBPYnNlcnZhYmxlcworICAgICAgICB0aGlz
Lm9uVmlld01hdHJpeENoYW5nZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25Q
cm9qZWN0aW9uTWF0cml4Q2hhbmdlZE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5v
bkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25SZXN0
b3JlU3RhdGVPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIC8vIElucHV0cworICAgICAgICBp
ZiAodGhpcy5pbnB1dHMpIHsKKyAgICAgICAgICAgIHRoaXMuaW5wdXRzLmNsZWFyKCk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gQW5pbWF0aW9ucworICAgICAgICB0aGlzLmdldFNjZW5lKCkuc3Rv
cEFuaW1hdGlvbih0aGlzKTsKKyAgICAgICAgLy8gUmVtb3ZlIGZyb20gc2NlbmUKKyAgICAgICAg
dGhpcy5nZXRTY2VuZSgpLnJlbW92ZUNhbWVyYSh0aGlzKTsKKyAgICAgICAgd2hpbGUgKHRoaXMu
X3JpZ0NhbWVyYXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMu
X3JpZ0NhbWVyYXMucG9wKCk7CisgICAgICAgICAgICBpZiAoY2FtZXJhKSB7CisgICAgICAgICAg
ICAgICAgY2FtZXJhLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAvLyBQb3N0cHJvY2Vzc2VzCisgICAgICAgIGlmICh0aGlzLl9yaWdQb3N0UHJvY2Vzcykgewor
ICAgICAgICAgICAgdGhpcy5fcmlnUG9zdFByb2Nlc3MuZGlzcG9zZSh0aGlzKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JpZ1Bvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3Bvc3RQ
cm9jZXNzZXMgPSBbXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLmNhbWVyYVJp
Z01vZGUgIT09IENhbWVyYS5SSUdfTU9ERV9OT05FKSB7CisgICAgICAgICAgICB0aGlzLl9yaWdQ
b3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2VzID0gW107
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgaSA9IHRoaXMuX3Bv
c3RQcm9jZXNzZXMubGVuZ3RoOworICAgICAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHBvc3RQcm9jZXNzID0gdGhpcy5fcG9zdFByb2Nlc3Nlc1tpXTsKKyAg
ICAgICAgICAgICAgICBpZiAocG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9z
dFByb2Nlc3MuZGlzcG9zZSh0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVuZGVyIHRhcmdldHMKKyAgICAgICAgdmFyIGkgPSB0
aGlzLmN1c3RvbVJlbmRlclRhcmdldHMubGVuZ3RoOworICAgICAgICB3aGlsZSAoLS1pID49IDAp
IHsKKyAgICAgICAgICAgIHRoaXMuY3VzdG9tUmVuZGVyVGFyZ2V0c1tpXS5kaXNwb3NlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5jdXN0b21SZW5kZXJUYXJnZXRzID0gW107CisgICAgICAg
IC8vIEFjdGl2ZSBNZXNoZXMKKyAgICAgICAgdGhpcy5fYWN0aXZlTWVzaGVzLmRpc3Bvc2UoKTsK
KyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcywgZG9Ob3RSZWN1cnNl
LCBkaXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcyk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoQ2FtZXJhLnByb3RvdHlwZSwgImlzTGVmdENhbWVyYSIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIGxlZnQgY2FtZXJhIG9mIGEgcmlnIHNldHVwIGluIGNhc2Ug
b2YgUmlnZ2VkIENhbWVyYQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNMZWZ0Q2FtZXJhOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FtZXJhLnByb3RvdHlwZSwgImlzUmlnaHRD
YW1lcmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByaWdodCBjYW1lcmEg
b2YgYSByaWcgc2V0dXAgaW4gY2FzZSBvZiBSaWdnZWQgQ2FtZXJhCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1JpZ2h0
Q2FtZXJhOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2Ft
ZXJhLnByb3RvdHlwZSwgImxlZnRDYW1lcmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHRoZSBsZWZ0IGNhbWVyYSBvZiBhIHJpZyBzZXR1cCBpbiBjYXNlIG9mIFJpZ2dlZCBDYW1l
cmEKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX3JpZ0NhbWVyYXMubGVuZ3RoIDwgMSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ0NhbWVy
YXNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDYW1l
cmEucHJvdG90eXBlLCAicmlnaHRDYW1lcmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHRoZSByaWdodCBjYW1lcmEgb2YgYSByaWcgc2V0dXAgaW4gY2FzZSBvZiBSaWdnZWQgQ2Ft
ZXJhCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9yaWdDYW1lcmFzLmxlbmd0aCA8IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yaWdDYW1l
cmFzWzFdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBsZWZ0
IGNhbWVyYSB0YXJnZXQgb2YgYSByaWcgc2V0dXAgaW4gY2FzZSBvZiBSaWdnZWQgQ2FtZXJhCisg
ICAgICogQHJldHVybnMgdGhlIHRhcmdldCBwb3NpdGlvbgorICAgICAqLworICAgIENhbWVyYS5w
cm90b3R5cGUuZ2V0TGVmdFRhcmdldCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMu
X3JpZ0NhbWVyYXMubGVuZ3RoIDwgMSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ0NhbWVyYXNbMF0uZ2V0VGFyZ2V0KCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByaWdodCBjYW1lcmEgdGFyZ2V0IG9mIGEg
cmlnIHNldHVwIGluIGNhc2Ugb2YgUmlnZ2VkIENhbWVyYQorICAgICAqIEByZXR1cm5zIHRoZSB0
YXJnZXQgcG9zaXRpb24KKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLmdldFJpZ2h0VGFy
Z2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fcmlnQ2FtZXJhcy5sZW5ndGgg
PCAyKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdGhpcy5fcmlnQ2FtZXJhc1sxXS5nZXRUYXJnZXQoKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLnNldENhbWVyYVJpZ01v
ZGUgPSBmdW5jdGlvbiAobW9kZSwgcmlnUGFyYW1zKSB7CisgICAgICAgIGlmICh0aGlzLmNhbWVy
YVJpZ01vZGUgPT09IG1vZGUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB3aGlsZSAodGhpcy5fcmlnQ2FtZXJhcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB2
YXIgY2FtZXJhID0gdGhpcy5fcmlnQ2FtZXJhcy5wb3AoKTsKKyAgICAgICAgICAgIGlmIChjYW1l
cmEpIHsKKyAgICAgICAgICAgICAgICBjYW1lcmEuZGlzcG9zZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHRoaXMuY2FtZXJhUmlnTW9kZSA9IG1vZGU7CisgICAgICAgIHRo
aXMuX2NhbWVyYVJpZ1BhcmFtcyA9IHt9OworICAgICAgICAvL3dlIGhhdmUgdG8gaW1wbGVtZW50
IHN0ZXJlbyBjYW1lcmEgY2FsY3VsdGF0aW5nIGxlZnQgYW5kIHJpZ2h0IHZpZXdwb2ludHMgZnJv
bSBpbnRlcmF4aWFsRGlzdGFuY2UgYW5kIHRhcmdldCwKKyAgICAgICAgLy9ub3QgZnJvbSBhIGdp
dmVuIGFuZ2xlIGFzIGl0IGlzIG5vdywgYnV0IHVudGlsIHRoYXQgY29tcGxldGUgY29kZSByZXdy
aXRpbmcgcHJvdmlzaW9uYWwgc3RlcmVvSGFsZkFuZ2xlIHZhbHVlIGlzIGludHJvZHVjZWQKKyAg
ICAgICAgdGhpcy5fY2FtZXJhUmlnUGFyYW1zLmludGVyYXhpYWxEaXN0YW5jZSA9IHJpZ1BhcmFt
cy5pbnRlcmF4aWFsRGlzdGFuY2UgfHwgMC4wNjM3OworICAgICAgICB0aGlzLl9jYW1lcmFSaWdQ
YXJhbXMuc3RlcmVvSGFsZkFuZ2xlID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVG9vbHMiXS5Ub1JhZGlhbnModGhpcy5fY2FtZXJhUmlnUGFyYW1zLmludGVyYXhp
YWxEaXN0YW5jZSAvIDAuMDYzNyk7CisgICAgICAgIC8vIGNyZWF0ZSB0aGUgcmlnIGNhbWVyYXMs
IHVubGVzcyBub25lCisgICAgICAgIGlmICh0aGlzLmNhbWVyYVJpZ01vZGUgIT09IENhbWVyYS5S
SUdfTU9ERV9OT05FKSB7CisgICAgICAgICAgICB2YXIgbGVmdENhbWVyYSA9IHRoaXMuY3JlYXRl
UmlnQ2FtZXJhKHRoaXMubmFtZSArICJfTCIsIDApOworICAgICAgICAgICAgaWYgKGxlZnRDYW1l
cmEpIHsKKyAgICAgICAgICAgICAgICBsZWZ0Q2FtZXJhLl9pc0xlZnRDYW1lcmEgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJpZ2h0Q2FtZXJhID0gdGhpcy5jcmVhdGVS
aWdDYW1lcmEodGhpcy5uYW1lICsgIl9SIiwgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDYW1l
cmEpIHsKKyAgICAgICAgICAgICAgICByaWdodENhbWVyYS5faXNSaWdodENhbWVyYSA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVmdENhbWVyYSAmJiByaWdodENhbWVy
YSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3JpZ0NhbWVyYXMucHVzaChsZWZ0Q2FtZXJhKTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9yaWdDYW1lcmFzLnB1c2gocmlnaHRDYW1lcmEpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN3aXRjaCAodGhpcy5jYW1lcmFSaWdNb2Rl
KSB7CisgICAgICAgICAgICBjYXNlIENhbWVyYS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNfQU5BR0xZ
UEg6CisgICAgICAgICAgICAgICAgQ2FtZXJhLl9zZXRTdGVyZW9zY29waWNBbmFnbHlwaFJpZ01v
ZGUodGhpcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENhbWVy
YS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNfU0lERUJZU0lERV9QQVJBTExFTDoKKyAgICAgICAgICAg
IGNhc2UgQ2FtZXJhLlJJR19NT0RFX1NURVJFT1NDT1BJQ19TSURFQllTSURFX0NST1NTRVlFRDoK
KyAgICAgICAgICAgIGNhc2UgQ2FtZXJhLlJJR19NT0RFX1NURVJFT1NDT1BJQ19PVkVSVU5ERVI6
CisgICAgICAgICAgICAgICAgQ2FtZXJhLl9zZXRTdGVyZW9zY29waWNSaWdNb2RlKHRoaXMpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDYW1lcmEuUklHX01PREVf
VlI6CisgICAgICAgICAgICAgICAgQ2FtZXJhLl9zZXRWUlJpZ01vZGUodGhpcywgcmlnUGFyYW1z
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ2FtZXJhLlJJR19N
T0RFX1dFQlZSOgorICAgICAgICAgICAgICAgIENhbWVyYS5fc2V0V2ViVlJSaWdNb2RlKHRoaXMs
IHJpZ1BhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fY2FzY2FkZVBvc3RQcm9jZXNzZXNUb1JpZ0NhbXMoKTsKKyAgICAgICAgdGhpcy51cGRh
dGUoKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQ2FtZXJhLl9zZXRTdGVyZW9z
Y29waWNSaWdNb2RlID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICB0aHJvdyAiSW1wb3J0
IENhbWVyYXMvUmlnTW9kZXMvc3RlcmVvc2NvcGljUmlnTW9kZSBiZWZvcmUgdXNpbmcgc3RlcmVv
c2NvcGljIHJpZyBtb2RlIjsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQ2FtZXJh
Ll9zZXRTdGVyZW9zY29waWNBbmFnbHlwaFJpZ01vZGUgPSBmdW5jdGlvbiAoY2FtZXJhKSB7Cisg
ICAgICAgIHRocm93ICJJbXBvcnQgQ2FtZXJhcy9SaWdNb2Rlcy9zdGVyZW9zY29waWNBbmFnbHlw
aFJpZ01vZGUgYmVmb3JlIHVzaW5nIHN0ZXJlb3Njb3BpYyBhbmFnbHlwaCByaWcgbW9kZSI7Cisg
ICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIENhbWVyYS5fc2V0VlJSaWdNb2RlID0gZnVu
Y3Rpb24gKGNhbWVyYSwgcmlnUGFyYW1zKSB7CisgICAgICAgIHRocm93ICJJbXBvcnQgQ2FtZXJh
cy9SaWdNb2Rlcy92clJpZ01vZGUgYmVmb3JlIHVzaW5nIFZSIHJpZyBtb2RlIjsKKyAgICB9Owor
ICAgIC8qKiBAaGlkZGVuICovCisgICAgQ2FtZXJhLl9zZXRXZWJWUlJpZ01vZGUgPSBmdW5jdGlv
biAoY2FtZXJhLCByaWdQYXJhbXMpIHsKKyAgICAgICAgdGhyb3cgIkltcG9ydCBDYW1lcmFzL1Jp
Z01vZGVzL1dlYlZSUmlnTW9kZSBiZWZvcmUgdXNpbmcgV2ViIFZSIHJpZyBtb2RlIjsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5fZ2V0VlJQcm9qZWN0
aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0cml4Il0uUGVyc3BlY3RpdmVGb3ZMSFRvUmVm
KHRoaXMuX2NhbWVyYVJpZ1BhcmFtcy52ck1ldHJpY3MuYXNwZWN0UmF0aW9Gb3YsIHRoaXMuX2Nh
bWVyYVJpZ1BhcmFtcy52ck1ldHJpY3MuYXNwZWN0UmF0aW8sIHRoaXMubWluWiwgdGhpcy5tYXha
LCB0aGlzLl9jYW1lcmFSaWdQYXJhbXMudnJXb3JrTWF0cml4KTsKKyAgICAgICAgdGhpcy5fY2Ft
ZXJhUmlnUGFyYW1zLnZyV29ya01hdHJpeC5tdWx0aXBseVRvUmVmKHRoaXMuX2NhbWVyYVJpZ1Bh
cmFtcy52ckhNYXRyaXgsIHRoaXMuX3Byb2plY3Rpb25NYXRyaXgpOworICAgICAgICByZXR1cm4g
dGhpcy5fcHJvamVjdGlvbk1hdHJpeDsKKyAgICB9OworICAgIENhbWVyYS5wcm90b3R5cGUuX3Vw
ZGF0ZUNhbWVyYVJvdGF0aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvL0hlcmUg
Zm9yIFdlYlZSCisgICAgfTsKKyAgICBDYW1lcmEucHJvdG90eXBlLl91cGRhdGVXZWJWUkNhbWVy
YVJvdGF0aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvL0hlcmUgZm9yIFdlYlZS
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgb3ZlcndyaXR0
ZW4gYnkgdGhlIGRpZmZlcmVudCBXZWJWUiBjYW1lcmFzIGF2YWlsYWJsZS4KKyAgICAgKiBUaGUg
Y29udGV4dCBpbiB3aGljaCBpdCBpcyBydW5uaW5nIGlzIHRoZSBSSUcgY2FtZXJhLiBTbyAndGhp
cycgaXMgdGhlIFRhcmdldENhbWVyYSwgbGVmdCBvciByaWdodC4KKyAgICAgKiBAaGlkZGVuCisg
ICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5fZ2V0V2ViVlJQcm9qZWN0aW9uTWF0cml4ID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRpZmZl
cmVudCBXZWJWUiBjYW1lcmFzIGF2YWlsYWJsZS4KKyAgICAgKiBUaGUgY29udGV4dCBpbiB3aGlj
aCBpdCBpcyBydW5uaW5nIGlzIHRoZSBSSUcgY2FtZXJhLiBTbyAndGhpcycgaXMgdGhlIFRhcmdl
dENhbWVyYSwgbGVmdCBvciByaWdodC4KKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgQ2Ft
ZXJhLnByb3RvdHlwZS5fZ2V0V2ViVlJWaWV3TWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19b
Ik1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIENh
bWVyYS5wcm90b3R5cGUuc2V0Q2FtZXJhUmlnUGFyYW1ldGVyID0gZnVuY3Rpb24gKG5hbWUsIHZh
bHVlKSB7CisgICAgICAgIGlmICghdGhpcy5fY2FtZXJhUmlnUGFyYW1zKSB7CisgICAgICAgICAg
ICB0aGlzLl9jYW1lcmFSaWdQYXJhbXMgPSB7fTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9j
YW1lcmFSaWdQYXJhbXNbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgLy9wcm92aXNpb25uYWxseToK
KyAgICAgICAgaWYgKG5hbWUgPT09ICJpbnRlcmF4aWFsRGlzdGFuY2UiKSB7CisgICAgICAgICAg
ICB0aGlzLl9jYW1lcmFSaWdQYXJhbXMuc3RlcmVvSGFsZkFuZ2xlID0gX01pc2NfdG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG9vbHMiXS5Ub1JhZGlhbnModmFsdWUgLyAwLjA2
MzcpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBuZWVkcyB0byBiZSBvdmVy
cmlkZGVuIGJ5IGNoaWxkcmVuIHNvIHN1YiBoYXMgcmVxdWlyZWQgcHJvcGVydGllcyB0byBiZSBj
b3BpZWQKKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5jcmVh
dGVSaWdDYW1lcmEgPSBmdW5jdGlvbiAobmFtZSwgY2FtZXJhSW5kZXgpIHsKKyAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNYXkgbmVlZCB0byBiZSBvdmVycmlk
ZGVuIGJ5IGNoaWxkcmVuCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIENhbWVyYS5wcm90
b3R5cGUuX3VwZGF0ZVJpZ0NhbWVyYXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5fcmlnQ2FtZXJhcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
dGhpcy5fcmlnQ2FtZXJhc1tpXS5taW5aID0gdGhpcy5taW5aOworICAgICAgICAgICAgdGhpcy5f
cmlnQ2FtZXJhc1tpXS5tYXhaID0gdGhpcy5tYXhaOworICAgICAgICAgICAgdGhpcy5fcmlnQ2Ft
ZXJhc1tpXS5mb3YgPSB0aGlzLmZvdjsKKyAgICAgICAgICAgIHRoaXMuX3JpZ0NhbWVyYXNbaV0u
dXBWZWN0b3IuY29weUZyb20odGhpcy51cFZlY3Rvcik7CisgICAgICAgIH0KKyAgICAgICAgLy8g
b25seSB1cGRhdGUgdmlld3BvcnQgd2hlbiBBTkFHTFlQSAorICAgICAgICBpZiAodGhpcy5jYW1l
cmFSaWdNb2RlID09PSBDYW1lcmEuUklHX01PREVfU1RFUkVPU0NPUElDX0FOQUdMWVBIKSB7Cisg
ICAgICAgICAgICB0aGlzLl9yaWdDYW1lcmFzWzBdLnZpZXdwb3J0ID0gdGhpcy5fcmlnQ2FtZXJh
c1sxXS52aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KiBAaGlkZGVuICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5fc2V0dXBJbnB1dHMgPSBmdW5jdGlv
biAoKSB7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpYXplIHRoZSBjYW1lcmEgc2V0
dXAgdG8gYSBqc29uIHJlcHJlc2VudGlvbgorICAgICAqIEByZXR1cm5zIHRoZSBKU09OIHJlcHJl
c2VudGF0aW9uCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0u
U2VyaWFsaXplKHRoaXMpOworICAgICAgICAvLyBUeXBlCisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QudHlwZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIC8vIFBhcmVudAorICAg
ICAgICBpZiAodGhpcy5wYXJlbnQpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
cGFyZW50SWQgPSB0aGlzLnBhcmVudC5pZDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5p
bnB1dHMpIHsKKyAgICAgICAgICAgIHRoaXMuaW5wdXRzLnNlcmlhbGl6ZShzZXJpYWxpemF0aW9u
T2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhl
bHBlciJdLkFwcGVuZFNlcmlhbGl6ZWRBbmltYXRpb25zKHRoaXMsIHNlcmlhbGl6YXRpb25PYmpl
Y3QpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJhbmdlcyA9IHRoaXMuc2VyaWFsaXpl
QW5pbWF0aW9uUmFuZ2VzKCk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0Owor
ICAgIH07CisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBjdXJyZW50IGNhbWVyYS4KKyAgICAg
KiBAcGFyYW0gbmFtZSBUaGUgY2xvbmVkIGNhbWVyYSBuYW1lCisgICAgICogQHJldHVybnMgdGhl
IGNsb25lZCBjYW1lcmEKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLmNsb25lID0gZnVu
Y3Rpb24gKG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkNsb25lKENhbWVyYS5H
ZXRDb25zdHJ1Y3RvckZyb21OYW1lKHRoaXMuZ2V0Q2xhc3NOYW1lKCksIG5hbWUsIHRoaXMuZ2V0
U2NlbmUoKSwgdGhpcy5pbnRlcmF4aWFsRGlzdGFuY2UsIHRoaXMuaXNTdGVyZW9zY29waWNTaWRl
QnlTaWRlKSwgdGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBkaXJlY3Rp
b24gb2YgdGhlIGNhbWVyYSByZWxhdGl2ZSB0byBhIGdpdmVuIGxvY2FsIGF4aXMuCisgICAgICog
QHBhcmFtIGxvY2FsQXhpcyBEZWZpbmVzIHRoZSByZWZlcmVuY2UgYXhpcyB0byBwcm92aWRlIGEg
cmVsYXRpdmUgZGlyZWN0aW9uLgorICAgICAqIEByZXR1cm4gdGhlIGRpcmVjdGlvbgorICAgICAq
LworICAgIENhbWVyYS5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uID0gZnVuY3Rpb24gKGxvY2FsQXhp
cykgeworICAgICAgICB2YXIgcmVzdWx0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuZ2V0RGly
ZWN0aW9uVG9SZWYobG9jYWxBeGlzLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBjYW1lcmEg
cmVsYXRpdmUgdG8gYSBnaXZlbiBsb2NhbCBheGlzIGludG8gYSBwYXNzZWQgdmVjdG9yLgorICAg
ICAqIEBwYXJhbSBsb2NhbEF4aXMgRGVmaW5lcyB0aGUgcmVmZXJlbmNlIGF4aXMgdG8gcHJvdmlk
ZSBhIHJlbGF0aXZlIGRpcmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gcmVzdWx0IERlZmluZXMgdGhl
IHZlY3RvciB0byBzdG9yZSB0aGUgcmVzdWx0IGluCisgICAgICovCisgICAgQ2FtZXJhLnByb3Rv
dHlwZS5nZXREaXJlY3Rpb25Ub1JlZiA9IGZ1bmN0aW9uIChsb2NhbEF4aXMsIHJlc3VsdCkgewor
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
VmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKGxvY2FsQXhpcywgdGhpcy5nZXRXb3JsZE1h
dHJpeCgpLCByZXN1bHQpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGNhbWVyYSBj
b25zdHJ1Y3RvciBmb3IgYSBnaXZlbiBjYW1lcmEgdHlwZQorICAgICAqIEBwYXJhbSB0eXBlIFRo
ZSB0eXBlIG9mIHRoZSBjYW1lcmEgdG8gY29uc3RydWN0IChzaG91bGQgYmUgZXF1YWwgdG8gb25l
IG9mIHRoZSBjYW1lcmEgY2xhc3MgbmFtZSkKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBv
ZiB0aGUgY2FtZXJhIHRoZSByZXN1bHQgd2lsbCBiZSBhYmxlIHRvIGluc3RhbnRpYXRlCisgICAg
ICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0aGUgcmVzdWx0IHdpbGwgY29uc3RydWN0IHRoZSBj
YW1lcmEgaW4KKyAgICAgKiBAcGFyYW0gaW50ZXJheGlhbF9kaXN0YW5jZSBJbiBjYXNlIG9mIHN0
ZXJlb3Njb3BpYyBzZXR1cCwgdGhlIGRpc3RhbmNlIGJldHdlZW4gYm90aCBleWVzCisgICAgICog
QHBhcmFtIGlzU3RlcmVvc2NvcGljU2lkZUJ5U2lkZSBJbiBjYXNlIG9mIHN0ZXJlb3Njb3BpYyBz
ZXR1cCwgc2hvdWxkIHRoZSBzZXJlbyBiZSBzaWRlIGIgc2lkZQorICAgICAqIEByZXR1cm5zIGEg
ZmFjdG9yeSBtZXRob2QgdG8gY29uc3RydWMgdGhlIGNhbWVyYQorICAgICAqLworICAgIENhbWVy
YS5HZXRDb25zdHJ1Y3RvckZyb21OYW1lID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNjZW5lLCBp
bnRlcmF4aWFsX2Rpc3RhbmNlLCBpc1N0ZXJlb3Njb3BpY1NpZGVCeVNpZGUpIHsKKyAgICAgICAg
aWYgKGludGVyYXhpYWxfZGlzdGFuY2UgPT09IHZvaWQgMCkgeyBpbnRlcmF4aWFsX2Rpc3RhbmNl
ID0gMDsgfQorICAgICAgICBpZiAoaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlID09PSB2b2lkIDAp
IHsgaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlID0gdHJ1ZTsgfQorICAgICAgICB2YXIgY29uc3Ry
dWN0b3JGdW5jID0gX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siTm9kZSJdLkNv
bnN0cnVjdCh0eXBlLCBuYW1lLCBzY2VuZSwgeworICAgICAgICAgICAgaW50ZXJheGlhbF9kaXN0
YW5jZTogaW50ZXJheGlhbF9kaXN0YW5jZSwKKyAgICAgICAgICAgIGlzU3RlcmVvc2NvcGljU2lk
ZUJ5U2lkZTogaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlCisgICAgICAgIH0pOworICAgICAgICBp
ZiAoY29uc3RydWN0b3JGdW5jKSB7CisgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3JGdW5j
OworICAgICAgICB9CisgICAgICAgIC8vIERlZmF1bHQgdG8gdW5pdmVyc2FsIGNhbWVyYQorICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gQ2FtZXJhLl9jcmVhdGVEZWZhdWx0UGFy
c2VkQ2FtZXJhKG5hbWUsIHNjZW5lKTsgfTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXB1
dGUgdGhlIHdvcmxkICBtYXRyaXggb2YgdGhlIGNhbWVyYS4KKyAgICAgKiBAcmV0dXJucyB0aGUg
Y2FtZXJhIHdvcmtkIG1hdHJpeAorICAgICAqLworICAgIENhbWVyYS5wcm90b3R5cGUuY29tcHV0
ZVdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5nZXRXb3Js
ZE1hdHJpeCgpOworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2UgYSBKU09OIGFuZCBjcmVh
dGVzIHRoZSBjYW1lcmEgZnJvbSB0aGUgcGFyc2VkIGluZm9ybWF0aW9uCisgICAgICogQHBhcmFt
IHBhcnNlZENhbWVyYSBUaGUgSlNPTiB0byBwYXJzZQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUg
c2NlbmUgdG8gaW5zdGFudGlhdGUgdGhlIGNhbWVyYSBpbgorICAgICAqIEByZXR1cm5zIHRoZSBu
ZXdseSBjb25zdHJ1Y3RlZCBjYW1lcmEKKyAgICAgKi8KKyAgICBDYW1lcmEuUGFyc2UgPSBmdW5j
dGlvbiAocGFyc2VkQ2FtZXJhLCBzY2VuZSkgeworICAgICAgICB2YXIgdHlwZSA9IHBhcnNlZENh
bWVyYS50eXBlOworICAgICAgICB2YXIgY29uc3RydWN0ID0gQ2FtZXJhLkdldENvbnN0cnVjdG9y
RnJvbU5hbWUodHlwZSwgcGFyc2VkQ2FtZXJhLm5hbWUsIHNjZW5lLCBwYXJzZWRDYW1lcmEuaW50
ZXJheGlhbF9kaXN0YW5jZSwgcGFyc2VkQ2FtZXJhLmlzU3RlcmVvc2NvcGljU2lkZUJ5U2lkZSk7
CisgICAgICAgIHZhciBjYW1lcmEgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5QYXJzZShjb25zdHJ1Y3QsIHBhcnNl
ZENhbWVyYSwgc2NlbmUpOworICAgICAgICAvLyBQYXJlbnQKKyAgICAgICAgaWYgKHBhcnNlZENh
bWVyYS5wYXJlbnRJZCkgeworICAgICAgICAgICAgY2FtZXJhLl93YWl0aW5nUGFyZW50SWQgPSBw
YXJzZWRDYW1lcmEucGFyZW50SWQ7CisgICAgICAgIH0KKyAgICAgICAgLy9JZiBjYW1lcmEgaGFz
IGFuIGlucHV0IG1hbmFnZXIsIGxldCBpdCBwYXJzZSBpbnB1dHMgc2V0dGluZ3MKKyAgICAgICAg
aWYgKGNhbWVyYS5pbnB1dHMpIHsKKyAgICAgICAgICAgIGNhbWVyYS5pbnB1dHMucGFyc2UocGFy
c2VkQ2FtZXJhKTsKKyAgICAgICAgICAgIGNhbWVyYS5fc2V0dXBJbnB1dHMoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY2FtZXJhLnNldFBvc2l0aW9uKSB7IC8vIG5lZWQgdG8gZm9yY2UgcG9z
aXRpb24KKyAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5RnJvbUZsb2F0cygwLCAwLCAw
KTsKKyAgICAgICAgICAgIGNhbWVyYS5zZXRQb3NpdGlvbihfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZyb21BcnJheShwYXJzZWRDYW1l
cmEucG9zaXRpb24pKTsKKyAgICAgICAgfQorICAgICAgICAvLyBUYXJnZXQKKyAgICAgICAgaWYg
KHBhcnNlZENhbWVyYS50YXJnZXQpIHsKKyAgICAgICAgICAgIGlmIChjYW1lcmEuc2V0VGFyZ2V0
KSB7CisgICAgICAgICAgICAgICAgY2FtZXJhLnNldFRhcmdldChfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZyb21BcnJheShwYXJzZWRD
YW1lcmEudGFyZ2V0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQXBw
bHkgM2QgcmlnLCB3aGVuIGZvdW5kCisgICAgICAgIGlmIChwYXJzZWRDYW1lcmEuY2FtZXJhUmln
TW9kZSkgeworICAgICAgICAgICAgdmFyIHJpZ1BhcmFtcyA9IChwYXJzZWRDYW1lcmEuaW50ZXJh
eGlhbF9kaXN0YW5jZSkgPyB7IGludGVyYXhpYWxEaXN0YW5jZTogcGFyc2VkQ2FtZXJhLmludGVy
YXhpYWxfZGlzdGFuY2UgfSA6IHt9OworICAgICAgICAgICAgY2FtZXJhLnNldENhbWVyYVJpZ01v
ZGUocGFyc2VkQ2FtZXJhLmNhbWVyYVJpZ01vZGUsIHJpZ1BhcmFtcyk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gQW5pbWF0aW9ucworICAgICAgICBpZiAocGFyc2VkQ2FtZXJhLmFuaW1hdGlvbnMp
IHsKKyAgICAgICAgICAgIGZvciAodmFyIGFuaW1hdGlvbkluZGV4ID0gMDsgYW5pbWF0aW9uSW5k
ZXggPCBwYXJzZWRDYW1lcmEuYW5pbWF0aW9ucy5sZW5ndGg7IGFuaW1hdGlvbkluZGV4KyspIHsK
KyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkQW5pbWF0aW9uID0gcGFyc2VkQ2FtZXJhLmFuaW1h
dGlvbnNbYW5pbWF0aW9uSW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbENsYXNz
ID0gX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIl9UeXBlU3Rv
cmUiXS5HZXRDbGFzcygiQkFCWUxPTi5BbmltYXRpb24iKTsKKyAgICAgICAgICAgICAgICBpZiAo
aW50ZXJuYWxDbGFzcykgeworICAgICAgICAgICAgICAgICAgICBjYW1lcmEuYW5pbWF0aW9ucy5w
dXNoKGludGVybmFsQ2xhc3MuUGFyc2UocGFyc2VkQW5pbWF0aW9uKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siTm9kZSJdLlBhcnNlQW5pbWF0aW9uUmFuZ2VzKGNhbWVyYSwgcGFyc2VkQ2Ft
ZXJhLCBzY2VuZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZENhbWVyYS5hdXRvQW5p
bWF0ZSkgeworICAgICAgICAgICAgc2NlbmUuYmVnaW5BbmltYXRpb24oY2FtZXJhLCBwYXJzZWRD
YW1lcmEuYXV0b0FuaW1hdGVGcm9tLCBwYXJzZWRDYW1lcmEuYXV0b0FuaW1hdGVUbywgcGFyc2Vk
Q2FtZXJhLmF1dG9BbmltYXRlTG9vcCwgcGFyc2VkQ2FtZXJhLmF1dG9BbmltYXRlU3BlZWQgfHwg
MS4wKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2FtZXJhOworICAgIH07CisgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICBDYW1lcmEuX2NyZWF0ZURlZmF1bHRQYXJzZWRDYW1lcmEgPSBmdW5j
dGlvbiAobmFtZSwgc2NlbmUpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiVW5pdmVyc2Fs
Q2FtZXJhIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IHBy
b2plY3Rpb24gbW9kZSB1c2VkIGJ5IHRoZSBjYW1lcmFzLgorICAgICAqIEl0IGhlbHBzIHJlY3Jl
YXRpbmcgYSBmZWVsaW5nIG9mIHBlcnNwZWN0aXZlIGFuZCBiZXR0ZXIgYXBwcmVjaWF0ZSBkZXB0
aC4KKyAgICAgKiBUaGlzIGlzIHRoZSBiZXN0IHdheSB0byBzaW11bGF0ZSByZWFsIGxpZmUgY2Ft
ZXJhcy4KKyAgICAgKi8KKyAgICBDYW1lcmEuUEVSU1BFQ1RJVkVfQ0FNRVJBID0gMDsKKyAgICAv
KioKKyAgICAgKiBUaGlzIGhlbHBzIGNyZWF0aW5nIGNhbWVyYSB3aXRoIGFuIG9ydGhvZ3JhcGhp
YyBtb2RlLgorICAgICAqIE9ydGhvZ3JhcGhpYyBpcyBjb21tb25seSB1c2VkIGluIGVuZ2luZWVy
aW5nIGFzIGEgbWVhbnMgdG8gcHJvZHVjZSBvYmplY3Qgc3BlY2lmaWNhdGlvbnMgdGhhdCBjb21t
dW5pY2F0ZSBkaW1lbnNpb25zIHVuYW1iaWd1b3VzbHksIGVhY2ggbGluZSBvZiAxIHVuaXQgbGVu
Z3RoIChjbSwgbWV0ZXIuLndoYXRldmVyKSB3aWxsIGFwcGVhciB0byBoYXZlIHRoZSBzYW1lIGxl
bmd0aCBldmVyeXdoZXJlIG9uIHRoZSBkcmF3aW5nLiBUaGlzIGFsbG93cyB0aGUgZHJhZnRlciB0
byBkaW1lbnNpb24gb25seSBhIHN1YnNldCBvZiBsaW5lcyBhbmQgbGV0IHRoZSByZWFkZXIga25v
dyB0aGF0IG90aGVyIGxpbmVzIG9mIHRoYXQgbGVuZ3RoIG9uIHRoZSBkcmF3aW5nIGFyZSBhbHNv
IHRoYXQgbGVuZ3RoIGluIHJlYWxpdHkuIEV2ZXJ5IHBhcmFsbGVsIGxpbmUgaW4gdGhlIGRyYXdp
bmcgaXMgYWxzbyBwYXJhbGxlbCBpbiB0aGUgb2JqZWN0LgorICAgICAqLworICAgIENhbWVyYS5P
UlRIT0dSQVBISUNfQ0FNRVJBID0gMTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIHRoZSBkZWZh
dWx0IEZPViBtb2RlIGZvciBwZXJzcGVjdGl2ZSBjYW1lcmFzLgorICAgICAqIFRoaXMgc2V0dGlu
ZyBhbGlnbnMgdGhlIHVwcGVyIGFuZCBsb3dlciBib3VuZHMgb2YgdGhlIHZpZXdwb3J0IHRvIHRo
ZSB1cHBlciBhbmQgbG93ZXIgYm91bmRzIG9mIHRoZSBjYW1lcmEgZnJ1c3R1bS4KKyAgICAgKi8K
KyAgICBDYW1lcmEuRk9WTU9ERV9WRVJUSUNBTF9GSVhFRCA9IDA7CisgICAgLyoqCisgICAgICog
VGhpcyBzZXR0aW5nIGFsaWducyB0aGUgbGVmdCBhbmQgcmlnaHQgYm91bmRzIG9mIHRoZSB2aWV3
cG9ydCB0byB0aGUgbGVmdCBhbmQgcmlnaHQgYm91bmRzIG9mIHRoZSBjYW1lcmEgZnJ1c3R1bS4K
KyAgICAgKi8KKyAgICBDYW1lcmEuRk9WTU9ERV9IT1JJWk9OVEFMX0ZJWEVEID0gMTsKKyAgICAv
KioKKyAgICAgKiBUaGlzIHNwZWNpZmllcyB0aGVyIGlzIG5vIG5lZWQgZm9yIGEgY2FtZXJhIHJp
Zy4KKyAgICAgKiBCYXNpY2FsbHkgb25seSBvbmUgZXllIGlzIHJlbmRlcmVkIGNvcnJlc3BvbmRp
bmcgdG8gdGhlIGNhbWVyYS4KKyAgICAgKi8KKyAgICBDYW1lcmEuUklHX01PREVfTk9ORSA9IDA7
CisgICAgLyoqCisgICAgICogU2ltdWxhdGVzIGEgY2FtZXJhIFJpZyB3aXRoIG9uZSBibHVlIGV5
ZSBhbmQgb25lIHJlZCBleWUuCisgICAgICogVGhpcyBjYW4gYmUgdXNlIHdpdGggM2QgYmx1ZSBh
bmQgcmVkIGdsYXNzZXMuCisgICAgICovCisgICAgQ2FtZXJhLlJJR19NT0RFX1NURVJFT1NDT1BJ
Q19BTkFHTFlQSCA9IDEwOworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhhdCBib3RoIGV5ZXMg
b2YgdGhlIGNhbWVyYSB3aWxsIGJlIHJlbmRlcmVkIHNpZGUgYnkgc2lkZSB3aXRoIGEgcGFyYWxs
ZWwgdGFyZ2V0LgorICAgICAqLworICAgIENhbWVyYS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNfU0lE
RUJZU0lERV9QQVJBTExFTCA9IDExOworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhhdCBib3Ro
IGV5ZXMgb2YgdGhlIGNhbWVyYSB3aWxsIGJlIHJlbmRlcmVkIHNpZGUgYnkgc2lkZSB3aXRoIGEg
bm9uZSBwYXJhbGxlbCB0YXJnZXQuCisgICAgICovCisgICAgQ2FtZXJhLlJJR19NT0RFX1NURVJF
T1NDT1BJQ19TSURFQllTSURFX0NST1NTRVlFRCA9IDEyOworICAgIC8qKgorICAgICAqIERlZmlu
ZXMgdGhhdCBib3RoIGV5ZXMgb2YgdGhlIGNhbWVyYSB3aWxsIGJlIHJlbmRlcmVkIG92ZXIgdW5k
ZXIgZWFjaCBvdGhlci4KKyAgICAgKi8KKyAgICBDYW1lcmEuUklHX01PREVfU1RFUkVPU0NPUElD
X09WRVJVTkRFUiA9IDEzOworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhhdCBib3RoIGV5ZXMg
b2YgdGhlIGNhbWVyYSBzaG91bGQgYmUgcmVuZGVyZXJlZCBpbiBhIFZSIG1vZGUgKGNhcmJveCku
CisgICAgICovCisgICAgQ2FtZXJhLlJJR19NT0RFX1ZSID0gMjA7CisgICAgLyoqCisgICAgICog
RGVmaW5lcyB0aGF0IGJvdGggZXllcyBvZiB0aGUgY2FtZXJhIHNob3VsZCBiZSByZW5kZXJlcmVk
IGluIGEgVlIgbW9kZSAod2ViVlIpLgorICAgICAqLworICAgIENhbWVyYS5SSUdfTU9ERV9XRUJW
UiA9IDIxOworICAgIC8qKgorICAgICAqIEN1c3RvbSByaWcgbW9kZSBhbGxvd2luZyByaWcgY2Ft
ZXJhcyB0byBiZSBwb3B1bGF0ZWQgbWFudWFsbHkgd2l0aCBhbnkgbnVtYmVyIG9mIGNhbWVyYXMK
KyAgICAgKi8KKyAgICBDYW1lcmEuUklHX01PREVfQ1VTVE9NID0gMjI7CisgICAgLyoqCisgICAg
ICogRGVmaW5lcyBpZiBieSBkZWZhdWx0IGF0dGFjaGluZyBjb250cm9scyBzaG91bGQgcHJldmVu
dCB0aGUgZGVmYXVsdCBqYXZhc2NyaXB0IGV2ZW50IHRvIGNvbnRpbnVlLgorICAgICAqLworICAg
IENhbWVyYS5Gb3JjZUF0dGFjaENvbnRyb2xUb0Fsd2F5c1ByZXZlbnREZWZhdWx0ID0gZmFsc2U7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplQXNWZWN0b3IzIl0pKCJwb3NpdGlvbiIpCisgICAgXSwgQ2FtZXJhLnBy
b3RvdHlwZSwgIl9wb3NpdGlvbiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNWZWN0b3IzIl0p
KCkKKyAgICBdLCBDYW1lcmEucHJvdG90eXBlLCAidXBWZWN0b3IiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgQ2FtZXJhLnByb3RvdHlwZSwgIm9ydGhvTGVmdCIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBDYW1lcmEucHJvdG90eXBlLCAib3J0aG9S
aWdodCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBDYW1lcmEucHJvdG90
eXBlLCAib3J0aG9Cb3R0b20iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
Q2FtZXJhLnByb3RvdHlwZSwgIm9ydGhvVG9wIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIENhbWVyYS5wcm90b3R5cGUsICJmb3YiLCB2b2lkIDApOworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6
ZSJdKSgpCisgICAgXSwgQ2FtZXJhLnByb3RvdHlwZSwgIm1pbloiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgQ2FtZXJhLnByb3RvdHlwZSwgIm1heFoiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQ2FtZXJhLnByb3RvdHlwZSwgImluZXJ0aWEiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQ2FtZXJhLnByb3RvdHlwZSwgIm1v
ZGUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQ2FtZXJhLnByb3RvdHlw
ZSwgImxheWVyTWFzayIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBDYW1l
cmEucHJvdG90eXBlLCAiZm92TW9kZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAg
ICBdLCBDYW1lcmEucHJvdG90eXBlLCAiY2FtZXJhUmlnTW9kZSIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplIl0pKCkKKyAgICBdLCBDYW1lcmEucHJvdG90eXBlLCAiaW50ZXJheGlhbERpc3RhbmNl
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIENhbWVyYS5wcm90b3R5cGUs
ICJpc1N0ZXJlb3Njb3BpY1NpZGVCeVNpZGUiLCB2b2lkIDApOworICAgIHJldHVybiBDYW1lcmE7
Cit9KF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIk5vZGUiXSkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFuYWdlci50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9D
YW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDYW1lcmFJbnB1
dFR5cGVzLCBDYW1lcmFJbnB1dHNNYW5hZ2VyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkNhbWVyYUlucHV0VHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENhbWVyYUlu
cHV0VHlwZXM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2FtZXJhSW5wdXRzTWFuYWdlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gQ2FtZXJhSW5wdXRzTWFuYWdlcjsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGVj
b3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2NhbWVyYSAqLyAiLi9DYW1lcmFzL2NhbWVyYS50cyIpOworCisKKworLyoq
CisgKiBAaWdub3JlCisgKiBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgdGhlIGRpZmZlcmVudCBpbnB1
dCB0eXBlcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gdGhlIGFwcGxpY2F0aW9uLgorICogRm8gaW5z
dGFuY2U6IEFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dC4uLgorICovCit2YXIgQ2FtZXJhSW5w
dXRUeXBlcyA9IHt9OworLyoqCisgKiBUaGlzIHJlcHJlc2VudHMgdGhlIGlucHV0IG1hbmFnZXIg
dXNlZCB3aXRoaW4gYSBjYW1lcmEuCisgKiBJdCBoZWxwcyBkZWFsaW5nIHdpdGggYWxsIHRoZSBk
aWZmZXJlbnQga2luZCBvZiBpbnB1dCBhdHRhY2hlZCB0byBhIGNhbWVyYS4KKyAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRzCisg
Ki8KK3ZhciBDYW1lcmFJbnB1dHNNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIGEgbmV3IENhbWVyYSBJbnB1dCBNYW5hZ2Vy
LgorICAgICAqIEBwYXJhbSBjYW1lcmEgRGVmaW5lcyB0aGUgY2FtZXJhIHRoZSBpbnB1dCBtYW5h
Z2VyIGJsb25ncyB0bworICAgICAqLworICAgIGZ1bmN0aW9uIENhbWVyYUlucHV0c01hbmFnZXIo
Y2FtZXJhKSB7CisgICAgICAgIHRoaXMuYXR0YWNoZWQgPSB7fTsKKyAgICAgICAgdGhpcy5jYW1l
cmEgPSBjYW1lcmE7CisgICAgICAgIHRoaXMuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7IH07
CisgICAgfQorICAgIC8qKgorICAgICAqIEFkZCBhbiBpbnB1dCBtZXRob2QgdG8gYSBjYW1lcmEK
KyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXppbmdf
Y2FtZXJhX2lucHV0cworICAgICAqIEBwYXJhbSBpbnB1dCBjYW1lcmEgaW5wdXQgbWV0aG9kCisg
ICAgICovCisgICAgQ2FtZXJhSW5wdXRzTWFuYWdlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24g
KGlucHV0KSB7CisgICAgICAgIHZhciB0eXBlID0gaW5wdXQuZ2V0U2ltcGxlTmFtZSgpOworICAg
ICAgICBpZiAodGhpcy5hdHRhY2hlZFt0eXBlXSkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLldhcm4oImNhbWVyYSBpbnB1
dCBvZiB0eXBlICIgKyB0eXBlICsgIiBhbHJlYWR5IGV4aXN0cyBvbiBjYW1lcmEiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmF0dGFjaGVkW3R5cGVdID0g
aW5wdXQ7CisgICAgICAgIGlucHV0LmNhbWVyYSA9IHRoaXMuY2FtZXJhOworICAgICAgICAvL2Zv
ciBjaGVja0lucHV0cywgd2UgYXJlIGR5bmFtaWNhbGx5IGNyZWF0aW5nIGEgZnVuY3Rpb24KKyAg
ICAgICAgLy90aGUgZ29hbCBpcyB0byBhdm9pZCB0aGUgcGVyZm9ybWFuY2UgcGVuYWx0eSBvZiBs
b29waW5nIGZvciBpbnB1dHMgaW4gdGhlIHJlbmRlciBsb29wCisgICAgICAgIGlmIChpbnB1dC5j
aGVja0lucHV0cykgeworICAgICAgICAgICAgdGhpcy5jaGVja0lucHV0cyA9IHRoaXMuX2FkZENo
ZWNrSW5wdXRzKGlucHV0LmNoZWNrSW5wdXRzLmJpbmQoaW5wdXQpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodGhpcy5hdHRhY2hlZEVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlucHV0LmF0dGFj
aENvbnRyb2wodGhpcy5hdHRhY2hlZEVsZW1lbnQpOworICAgICAgICB9CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBSZW1vdmUgYSBzcGVjaWZpYyBpbnB1dCBtZXRob2QgZnJvbSBhIGNhbWVyYQor
ICAgICAqIGV4YW1wbGU6IGNhbWVyYS5pbnB1dHMucmVtb3ZlKGNhbWVyYS5pbnB1dHMuYXR0YWNo
ZWQubW91c2UpOworICAgICAqIEBwYXJhbSBpbnB1dFRvUmVtb3ZlIGNhbWVyYSBpbnB1dCBtZXRo
b2QKKyAgICAgKi8KKyAgICBDYW1lcmFJbnB1dHNNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmUgPSBm
dW5jdGlvbiAoaW5wdXRUb1JlbW92ZSkgeworICAgICAgICBmb3IgKHZhciBjYW0gaW4gdGhpcy5h
dHRhY2hlZCkgeworICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5hdHRhY2hlZFtjYW1dOwor
ICAgICAgICAgICAgaWYgKGlucHV0ID09PSBpbnB1dFRvUmVtb3ZlKSB7CisgICAgICAgICAgICAg
ICAgaW5wdXQuZGV0YWNoQ29udHJvbCh0aGlzLmF0dGFjaGVkRWxlbWVudCk7CisgICAgICAgICAg
ICAgICAgaW5wdXQuY2FtZXJhID0gbnVsbDsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5h
dHRhY2hlZFtjYW1dOworICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZElucHV0Q2hlY2soKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3Zl
IGEgc3BlY2lmaWMgaW5wdXQgdHlwZSBmcm9tIGEgY2FtZXJhCisgICAgICogZXhhbXBsZTogY2Ft
ZXJhLmlucHV0cy5yZW1vdmUoIkFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dCIpOworICAgICAq
IEBwYXJhbSBpbnB1dFR5cGUgdGhlIHR5cGUgb2YgdGhlIGlucHV0IHRvIHJlbW92ZQorICAgICAq
LworICAgIENhbWVyYUlucHV0c01hbmFnZXIucHJvdG90eXBlLnJlbW92ZUJ5VHlwZSA9IGZ1bmN0
aW9uIChpbnB1dFR5cGUpIHsKKyAgICAgICAgZm9yICh2YXIgY2FtIGluIHRoaXMuYXR0YWNoZWQp
IHsKKyAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuYXR0YWNoZWRbY2FtXTsKKyAgICAgICAg
ICAgIGlmIChpbnB1dC5nZXRDbGFzc05hbWUoKSA9PT0gaW5wdXRUeXBlKSB7CisgICAgICAgICAg
ICAgICAgaW5wdXQuZGV0YWNoQ29udHJvbCh0aGlzLmF0dGFjaGVkRWxlbWVudCk7CisgICAgICAg
ICAgICAgICAgaW5wdXQuY2FtZXJhID0gbnVsbDsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhp
cy5hdHRhY2hlZFtjYW1dOworICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZElucHV0Q2hlY2so
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgQ2FtZXJhSW5wdXRzTWFu
YWdlci5wcm90b3R5cGUuX2FkZENoZWNrSW5wdXRzID0gZnVuY3Rpb24gKGZuKSB7CisgICAgICAg
IHZhciBjdXJyZW50ID0gdGhpcy5jaGVja0lucHV0czsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIGN1cnJlbnQoKTsKKyAgICAgICAgICAgIGZuKCk7CisgICAgICAg
IH07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIGlucHV0IGNvbnRyb2xzIHRv
IHRoZSBjdXJyZW50bHkgYXR0YWNoZWQgZG9tIGVsZW1lbnQgdG8gbGlzdGVuIHRoZSBldmVudHMg
ZnJvbS4KKyAgICAgKiBAcGFyYW0gaW5wdXQgRGVmaW5lcyB0aGUgaW5wdXQgdG8gYXR0YWNoCisg
ICAgICovCisgICAgQ2FtZXJhSW5wdXRzTWFuYWdlci5wcm90b3R5cGUuYXR0YWNoSW5wdXQgPSBm
dW5jdGlvbiAoaW5wdXQpIHsKKyAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRFbGVtZW50KSB7Cisg
ICAgICAgICAgICBpbnB1dC5hdHRhY2hDb250cm9sKHRoaXMuYXR0YWNoZWRFbGVtZW50LCB0aGlz
Lm5vUHJldmVudERlZmF1bHQpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBB
dHRhY2ggdGhlIGN1cnJlbnQgbWFuYWdlciBpbnB1dHMgY29udHJvbHMgdG8gYSBzcGVjaWZpYyBk
b20gZWxlbWVudCB0byBsaXN0ZW4gdGhlIGV2ZW50cyBmcm9tLgorICAgICAqIEBwYXJhbSBlbGVt
ZW50IERlZmluZXMgdGhlIGRvbSBlbGVtZW50IHRvIGNvbGxlY3QgdGhlIGV2ZW50cyBmcm9tCisg
ICAgICogQHBhcmFtIG5vUHJldmVudERlZmF1bHQgRGVmaW5lcyB3aGV0aGVyIGV2ZW50IGNhdWdo
dCBieSB0aGUgY29udHJvbHMgc2hvdWxkIGNhbGwgcHJldmVudGRlZmF1bHQoKSAoaHR0cHM6Ly9k
ZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L3ByZXZlbnREZWZh
dWx0KQorICAgICAqLworICAgIENhbWVyYUlucHV0c01hbmFnZXIucHJvdG90eXBlLmF0dGFjaEVs
ZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICBp
ZiAobm9QcmV2ZW50RGVmYXVsdCA9PT0gdm9pZCAwKSB7IG5vUHJldmVudERlZmF1bHQgPSBmYWxz
ZTsgfQorICAgICAgICBpZiAodGhpcy5hdHRhY2hlZEVsZW1lbnQpIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBub1ByZXZlbnREZWZhdWx0ID0gX2NhbWVyYV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmEiXS5Gb3JjZUF0dGFjaENvbnRyb2xUb0Fs
d2F5c1ByZXZlbnREZWZhdWx0ID8gZmFsc2UgOiBub1ByZXZlbnREZWZhdWx0OworICAgICAgICB0
aGlzLmF0dGFjaGVkRWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAgIHRoaXMubm9QcmV2ZW50RGVm
YXVsdCA9IG5vUHJldmVudERlZmF1bHQ7CisgICAgICAgIGZvciAodmFyIGNhbSBpbiB0aGlzLmF0
dGFjaGVkKSB7CisgICAgICAgICAgICB0aGlzLmF0dGFjaGVkW2NhbV0uYXR0YWNoQ29udHJvbChl
bGVtZW50LCBub1ByZXZlbnREZWZhdWx0KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogRGV0YWNoIHRoZSBjdXJyZW50IG1hbmFnZXIgaW5wdXRzIGNvbnRyb2xzIGZyb20gYSBz
cGVjaWZpYyBkb20gZWxlbWVudC4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBk
b20gZWxlbWVudCB0byBjb2xsZWN0IHRoZSBldmVudHMgZnJvbQorICAgICAqIEBwYXJhbSBkaXNj
b25uZWN0IERlZmluZXMgd2hldGhlciB0aGUgaW5wdXQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0
aGUgY3VycmVudCBsaXN0IG9mIGF0dGFjaGVkIGlucHV0cworICAgICAqLworICAgIENhbWVyYUlu
cHV0c01hbmFnZXIucHJvdG90eXBlLmRldGFjaEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwg
ZGlzY29ubmVjdCkgeworICAgICAgICBpZiAoZGlzY29ubmVjdCA9PT0gdm9pZCAwKSB7IGRpc2Nv
bm5lY3QgPSBmYWxzZTsgfQorICAgICAgICBpZiAodGhpcy5hdHRhY2hlZEVsZW1lbnQgIT09IGVs
ZW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZh
ciBjYW0gaW4gdGhpcy5hdHRhY2hlZCkgeworICAgICAgICAgICAgdGhpcy5hdHRhY2hlZFtjYW1d
LmRldGFjaENvbnRyb2woZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoZGlzY29ubmVjdCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRbY2FtXS5jYW1lcmEgPSBudWxsOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuYXR0YWNoZWRFbGVtZW50ID0gbnVsbDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJlYnVpbGQgdGhlIGR5bmFtaWMgaW5wdXRDaGVjayBm
dW5jdGlvbiBmcm9tIHRoZSBjdXJyZW50IGxpc3Qgb2YKKyAgICAgKiBkZWZpbmVkIGlucHV0cyBp
biB0aGUgbWFuYWdlci4KKyAgICAgKi8KKyAgICBDYW1lcmFJbnB1dHNNYW5hZ2VyLnByb3RvdHlw
ZS5yZWJ1aWxkSW5wdXRDaGVjayA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5jaGVja0lu
cHV0cyA9IGZ1bmN0aW9uICgpIHsgfTsKKyAgICAgICAgZm9yICh2YXIgY2FtIGluIHRoaXMuYXR0
YWNoZWQpIHsKKyAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuYXR0YWNoZWRbY2FtXTsKKyAg
ICAgICAgICAgIGlmIChpbnB1dC5jaGVja0lucHV0cykgeworICAgICAgICAgICAgICAgIHRoaXMu
Y2hlY2tJbnB1dHMgPSB0aGlzLl9hZGRDaGVja0lucHV0cyhpbnB1dC5jaGVja0lucHV0cy5iaW5k
KGlucHV0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlbW92ZSBhbGwgYXR0YWNoZWQgaW5wdXQgbWV0aG9kcyBmcm9tIGEgY2FtZXJhCisgICAg
ICovCisgICAgQ2FtZXJhSW5wdXRzTWFuYWdlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkRWxlbWVudCkgeworICAgICAgICAgICAgdGhp
cy5kZXRhY2hFbGVtZW50KHRoaXMuYXR0YWNoZWRFbGVtZW50LCB0cnVlKTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLmF0dGFjaGVkID0ge307CisgICAgICAgIHRoaXMuYXR0YWNoZWRFbGVtZW50
ID0gbnVsbDsKKyAgICAgICAgdGhpcy5jaGVja0lucHV0cyA9IGZ1bmN0aW9uICgpIHsgfTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUgY3VycmVudCBpbnB1dCBtYW5hZ2Vy
IGF0dGFjaGVkIHRvIGEgY2FtZXJhLgorICAgICAqIFRoaXMgZW5zdXJlcyB0aGFuIG9uY2UgcGFy
c2VkLAorICAgICAqIHRoZSBpbnB1dCBhc3NvY2lhdGVkIHRvIHRoZSBjYW1lcmEgd2lsbCBiZSBp
ZGVudGljYWwgdG8gdGhlIGN1cnJlbnQgb25lcworICAgICAqIEBwYXJhbSBzZXJpYWxpemVkQ2Ft
ZXJhIERlZmluZXMgdGhlIGNhbWVyYSBzZXJpYWxpemF0aW9uIEpTT04gdGhlIGlucHV0IHNlcmlh
bGl6YXRpb24gc2hvdWxkIHdyaXRlIHRvCisgICAgICovCisgICAgQ2FtZXJhSW5wdXRzTWFuYWdl
ci5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKHNlcmlhbGl6ZWRDYW1lcmEpIHsKKyAg
ICAgICAgdmFyIGlucHV0cyA9IHt9OworICAgICAgICBmb3IgKHZhciBjYW0gaW4gdGhpcy5hdHRh
Y2hlZCkgeworICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5hdHRhY2hlZFtjYW1dOworICAg
ICAgICAgICAgdmFyIHJlcyA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlNlcmlhbGl6ZShpbnB1dCk7CisgICAgICAg
ICAgICBpbnB1dHNbaW5wdXQuZ2V0Q2xhc3NOYW1lKCldID0gcmVzOworICAgICAgICB9CisgICAg
ICAgIHNlcmlhbGl6ZWRDYW1lcmEuaW5wdXRzbWdyID0gaW5wdXRzOworICAgIH07CisgICAgLyoq
CisgICAgICogUGFyc2VzIGFuIGlucHV0IG1hbmFnZXIgc2VyaWFsaXplZCBKU09OIHRvIHJlc3Rv
cmUgdGhlIHByZXZpb3VzIGxpc3Qgb2YgaW5wdXRzCisgICAgICogYW5kIHN0YXRlcyBhc3NvY2lh
dGVkIHRvIGEgY2FtZXJhLgorICAgICAqIEBwYXJhbSBwYXJzZWRDYW1lcmEgRGVmaW5lcyB0aGUg
SlNPTiB0byBwYXJzZQorICAgICAqLworICAgIENhbWVyYUlucHV0c01hbmFnZXIucHJvdG90eXBl
LnBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZENhbWVyYSkgeworICAgICAgICB2YXIgcGFyc2VkSW5w
dXRzID0gcGFyc2VkQ2FtZXJhLmlucHV0c21ncjsKKyAgICAgICAgaWYgKHBhcnNlZElucHV0cykg
eworICAgICAgICAgICAgdGhpcy5jbGVhcigpOworICAgICAgICAgICAgZm9yICh2YXIgbiBpbiBw
YXJzZWRJbnB1dHMpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29uc3RydWN0ID0gQ2FtZXJhSW5w
dXRUeXBlc1tuXTsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3RydWN0KSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBwYXJzZWRpbnB1dCA9IHBhcnNlZElucHV0c1tuXTsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGlucHV0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoZnVuY3Rpb24gKCkgeyByZXR1
cm4gbmV3IGNvbnN0cnVjdCgpOyB9LCBwYXJzZWRpbnB1dCwgbnVsbCk7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuYWRkKGlucHV0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLzIwMTYtMDMtMDggdGhp
cyBwYXJ0IGlzIGZvciBtYW5hZ2luZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisgICAgICAgICAg
ICBmb3IgKHZhciBuIGluIHRoaXMuYXR0YWNoZWQpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29u
c3RydWN0ID0gQ2FtZXJhSW5wdXRUeXBlc1t0aGlzLmF0dGFjaGVkW25dLmdldENsYXNzTmFtZSgp
XTsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3RydWN0KSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBpbnB1dCA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBj
b25zdHJ1Y3QoKTsgfSwgcGFyc2VkQ2FtZXJhLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5yZW1vdmUodGhpcy5hdHRhY2hlZFtuXSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
YWRkKGlucHV0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworICAgIHJldHVybiBDYW1lcmFJbnB1dHNNYW5hZ2VyOworfSgpKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL2RldmljZU9yaWVudGF0aW9uQ2FtZXJhLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9DYW1lcmFzL2RldmljZU9yaWVudGF0aW9uQ2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IERldmljZU9yaWVudGF0aW9uQ2FtZXJhICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkRldmljZU9yaWVudGF0aW9uQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBE
ZXZpY2VPcmllbnRhdGlvbkNhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2ZyZWVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYSAqLyAiLi9DYW1lcmFzL2Zy
ZWVDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9JbnB1dHNfZnJlZUNhbWVyYURldmljZU9yaWVudGF0aW9uSW5w
dXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vSW5wdXRzL2ZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0ICovICIuL0NhbWVyYXMv
SW5wdXRzL2ZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0LnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5heGlzICovICIuL01h
dGhzL21hdGguYXhpcy50cyIpOworCisKKworCisKKworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiRGV2aWNlT3JpZW50YXRpb25D
YW1lcmEiLCBmdW5jdGlvbiAobmFtZSwgc2NlbmUpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkg
eyByZXR1cm4gbmV3IERldmljZU9yaWVudGF0aW9uQ2FtZXJhKG5hbWUsIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpLCBzY2Vu
ZSk7IH07Cit9KTsKKy8vIFdlJ3JlIG1haW5seSBiYXNlZCBvbiB0aGUgbG9naWMgZGVmaW5lZCBp
bnRvIHRoZSBGcmVlQ2FtZXJhIGNvZGUKKy8qKgorICogVGhpcyBpcyBhIGNhbWVyYSBzcGVjaWZp
Y2FsbHkgZGVzaWduZWQgdG8gcmVhY3QgdG8gZGV2aWNlIG9yaWVudGF0aW9uIGV2ZW50cyBzdWNo
IGFzIGEgbW9kZXJuIG1vYmlsZSBkZXZpY2UKKyAqIGJlaW5nIHRpbHRlZCBmb3J3YXJkIG9yIGJh
Y2sgYW5kIGxlZnQgb3IgcmlnaHQuCisgKi8KK3ZhciBEZXZpY2VPcmllbnRhdGlvbkNhbWVyYSA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShEZXZpY2VPcmllbnRhdGlvbkNhbWVyYSwg
X3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGRldmljZSBvcmllbnRhdGlv
biBjYW1lcmEKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY2FtZXJhCisgICAg
ICogQHBhcmFtIHBvc2l0aW9uIFRoZSBzdGFydCBwb3NpdGlvbiBjYW1lcmEKKyAgICAgKiBAcGFy
YW0gc2NlbmUgVGhlIHNjZW5lIHRoZSBjYW1lcmEgYmVsb25ncyB0bworICAgICAqLworICAgIGZ1
bmN0aW9uIERldmljZU9yaWVudGF0aW9uQ2FtZXJhKG5hbWUsIHBvc2l0aW9uLCBzY2VuZSkgewor
ICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBwb3NpdGlvbiwgc2Nl
bmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl90bXBEcmFnUXVhdGVybmlvbiA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJd
KCk7CisgICAgICAgIF90aGlzLl9kaXNhYmxlUG9pbnRlcklucHV0V2hlblVzaW5nRGV2aWNlT3Jp
ZW50YXRpb24gPSB0cnVlOworICAgICAgICBfdGhpcy5fZHJhZ0ZhY3RvciA9IDA7CisgICAgICAg
IF90aGlzLl9xdWF0ZXJuaW9uQ2FjaGUgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRlcm5pb24iXSgpOworICAgICAgICBfdGhpcy5pbnB1
dHMuYWRkRGV2aWNlT3JpZW50YXRpb24oKTsKKyAgICAgICAgLy8gV2hlbiB0aGUgb3JpZW50YXRp
b24gc2Vuc29yIGZpcmVzIGl0J3MgZmlyc3QgZXZlbnQsIGRpc2FibGUgbW91c2UgaW5wdXQKKyAg
ICAgICAgaWYgKF90aGlzLmlucHV0cy5fZGV2aWNlT3JpZW50YXRpb25JbnB1dCkgeworICAgICAg
ICAgICAgX3RoaXMuaW5wdXRzLl9kZXZpY2VPcmllbnRhdGlvbklucHV0Ll9vbkRldmljZU9yaWVu
dGF0aW9uQ2hhbmdlZE9ic2VydmFibGUuYWRkT25jZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICAgICAgaWYgKF90aGlzLl9kaXNhYmxlUG9pbnRlcklucHV0V2hlblVzaW5nRGV2aWNlT3JpZW50
YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmlucHV0cy5fbW91c2VJbnB1
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuaW5wdXRzLl9tb3VzZUlucHV0Ll9h
bGxvd0NhbWVyYVJvdGF0aW9uID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5pbnB1dHMuX21vdXNlSW5wdXQub25Qb2ludGVyTW92ZWRPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fZHJhZ0ZhY3Rv
ciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXMuX2lu
aXRpYWxRdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
dGhpcy5faW5pdGlhbFF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRlcm5pb24iXSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJvdGF0
ZSB0aGUgaW5pdGlhbCBzcGFjZSBhcm91bmQgdGhlIHkgYXhpcyB0byBhbGxvdyB1c2VycyB0byAi
dHVybiBhcm91bmQiIHZpYSB0b3VjaC9tb3VzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVh
dGVybmlvbiJdLkZyb21FdWxlckFuZ2xlc1RvUmVmKDAsIGUub2Zmc2V0WCAqIF90aGlzLl9kcmFn
RmFjdG9yLCAwLCBfdGhpcy5fdG1wRHJhZ1F1YXRlcm5pb24pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5faW5pdGlhbFF1YXRlcm5pb24ubXVsdGlwbHlUb1JlZihfdGhp
cy5fdG1wRHJhZ1F1YXRlcm5pb24sIF90aGlzLl9pbml0aWFsUXVhdGVybmlvbik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShEZXZpY2VPcmllbnRhdGlvbkNhbWVyYS5wcm90b3R5cGUsICJkaXNhYmxlUG9pbnRl
cklucHV0V2hlblVzaW5nRGV2aWNlT3JpZW50YXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCBwb2ludGVyIGlucHV0
IG11c3QgYmUgZGlzYWJsZWQgb24gZmlyc3Qgb3JpZW50YXRpb24gc2Vuc29yIHVwZGF0ZSAoRGVm
YXVsdDogdHJ1ZSkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVQb2ludGVySW5wdXRXaGVuVXNpbmdEZXZpY2VP
cmllbnRhdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVQb2ludGVySW5wdXRXaGVuVXNpbmdEZXZpY2VPcmll
bnRhdGlvbiA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBFbmFi
bGVkIHR1cm5pbmcgb24gdGhlIHkgYXhpcyB3aGVuIHRoZSBvcmllbnRhdGlvbiBzZW5zb3IgaXMg
YWN0aXZlCisgICAgICogQHBhcmFtIGRyYWdGYWN0b3IgdGhlIGZhY3RvciB0aGF0IGNvbnRyb2xz
IHRoZSB0dXJuIHNwZWVkIChkZWZhdWx0OiAxLzMwMCkKKyAgICAgKi8KKyAgICBEZXZpY2VPcmll
bnRhdGlvbkNhbWVyYS5wcm90b3R5cGUuZW5hYmxlSG9yaXpvbnRhbERyYWdnaW5nID0gZnVuY3Rp
b24gKGRyYWdGYWN0b3IpIHsKKyAgICAgICAgaWYgKGRyYWdGYWN0b3IgPT09IHZvaWQgMCkgeyBk
cmFnRmFjdG9yID0gMSAvIDMwMDsgfQorICAgICAgICB0aGlzLl9kcmFnRmFjdG9yID0gZHJhZ0Zh
Y3RvcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ug
Y2xhc3MgbmFtZSAoIkRldmljZU9yaWVudGF0aW9uQ2FtZXJhIikuCisgICAgICogVGhpcyBoZWxw
cyBhdm9pZGluZyBpbnN0YW5jZW9mIGF0IHJ1biB0aW1lLgorICAgICAqIEByZXR1cm5zIHRoZSBj
bGFzcyBuYW1lCisgICAgICovCisgICAgRGV2aWNlT3JpZW50YXRpb25DYW1lcmEucHJvdG90eXBl
LmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJEZXZpY2VPcmll
bnRhdGlvbkNhbWVyYSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICog
Q2hlY2tzIGFuZCBhcHBsaWVzIHRoZSBjdXJyZW50IHZhbHVlcyBvZiB0aGUgaW5wdXRzIHRvIHRo
ZSBjYW1lcmEuIChJbnRlcm5hbCB1c2Ugb25seSkKKyAgICAgKi8KKyAgICBEZXZpY2VPcmllbnRh
dGlvbkNhbWVyYS5wcm90b3R5cGUuX2NoZWNrSW5wdXRzID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLl9jaGVja0lucHV0cy5jYWxsKHRoaXMpOworICAgICAgICB0aGlz
Ll9xdWF0ZXJuaW9uQ2FjaGUuY29weUZyb20odGhpcy5yb3RhdGlvblF1YXRlcm5pb24pOworICAg
ICAgICBpZiAodGhpcy5faW5pdGlhbFF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHRoaXMuX2lu
aXRpYWxRdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYodGhpcy5yb3RhdGlvblF1YXRlcm5pb24sIHRo
aXMucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogUmVzZXQgdGhlIGNhbWVyYSB0byBpdHMgZGVmYXVsdCBvcmllbnRhdGlvbiBvbiB0aGUgc3Bl
Y2lmaWVkIGF4aXMgb25seS4KKyAgICAgKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyB0byByZXNldAor
ICAgICAqLworICAgIERldmljZU9yaWVudGF0aW9uQ2FtZXJhLnByb3RvdHlwZS5yZXNldFRvQ3Vy
cmVudFJvdGF0aW9uID0gZnVuY3Rpb24gKGF4aXMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhp
czsKKyAgICAgICAgaWYgKGF4aXMgPT09IHZvaWQgMCkgeyBheGlzID0gX01hdGhzX21hdGhfYXhp
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJBeGlzIl0uWTsgfQorICAgICAgICAvL2Nh
biBvbmx5IHdvcmsgaWYgdGhpcyBjYW1lcmEgaGFzIGEgcm90YXRpb24gcXVhdGVybmlvbiBhbHJl
YWR5LgorICAgICAgICBpZiAoIXRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsUXVhdGVybmlv
bikgeworICAgICAgICAgICAgdGhpcy5faW5pdGlhbFF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRlcm5pb24iXSgpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2luaXRpYWxRdWF0ZXJuaW9uLmNvcHlGcm9tKHRoaXMu
X3F1YXRlcm5pb25DYWNoZSB8fCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIFsn
eCcsICd5JywgJ3onXS5mb3JFYWNoKGZ1bmN0aW9uIChheGlzTmFtZSkgeworICAgICAgICAgICAg
aWYgKCFheGlzW2F4aXNOYW1lXSkgeworICAgICAgICAgICAgICAgIF90aGlzLl9pbml0aWFsUXVh
dGVybmlvbltheGlzTmFtZV0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgX3RoaXMuX2luaXRpYWxRdWF0ZXJuaW9uW2F4aXNOYW1lXSAqPSAt
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX2luaXRpYWxRdWF0
ZXJuaW9uLm5vcm1hbGl6ZSgpOworICAgICAgICAvL2ZvcmNlIHJvdGF0aW9uIHVwZGF0ZQorICAg
ICAgICB0aGlzLl9pbml0aWFsUXVhdGVybmlvbi5tdWx0aXBseVRvUmVmKHRoaXMucm90YXRpb25R
dWF0ZXJuaW9uLCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgfTsKKyAgICByZXR1cm4g
RGV2aWNlT3JpZW50YXRpb25DYW1lcmE7Cit9KF9mcmVlQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkZyZWVDYW1lcmEiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L0NhbWVyYXMvZmx5Q2FtZXJhLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vQ2FtZXJhcy9mbHlDYW1lcmEudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZseUNhbWVyYSAqLwor
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGbHlDYW1lcmEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIEZseUNhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRz
bGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01p
c2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvZW5naW5l
ICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rh
cmdldENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi90YXJnZXRDYW1lcmEgKi8gIi4vQ2FtZXJhcy90YXJnZXRDYW1lcmEudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmx5Q2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mbHlDYW1l
cmFJbnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvZmx5Q2FtZXJhSW5wdXRzTWFuYWdlci50cyIp
OworCisKKworCisKKworLyoqCisgKiBUaGlzIGlzIGEgZmx5aW5nIGNhbWVyYSwgZGVzaWduZWQg
Zm9yIDNEIG1vdmVtZW50IGFuZCByb3RhdGlvbiBpbiBhbGwgZGlyZWN0aW9ucywKKyAqIHN1Y2gg
YXMgaW4gYSAzRCBTcGFjZSBTaG9vdGVyIG9yIGEgRmxpZ2h0IFNpbXVsYXRvci4KKyAqLwordmFy
IEZseUNhbWVyYSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShGbHlDYW1lcmEsIF9z
dXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgRmx5Q2FtZXJhLgorICAgICAq
IFRoaXMgaXMgYSBmbHlpbmcgY2FtZXJhLCBkZXNpZ25lZCBmb3IgM0QgbW92ZW1lbnQgYW5kIHJv
dGF0aW9uIGluIGFsbCBkaXJlY3Rpb25zLAorICAgICAqIHN1Y2ggYXMgaW4gYSAzRCBTcGFjZSBT
aG9vdGVyIG9yIGEgRmxpZ2h0IFNpbXVsYXRvci4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUg
dGhlIG5hbWUgb2YgdGhlIGNhbWVyYSBpbiB0aGUgc2NlbmUuCisgICAgICogQHBhcmFtIHBvc2l0
aW9uIERlZmluZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGNhbWVyYSBpbiB0aGUgc2Nl
bmUuCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIGNhbWVyYSBiZWxv
bmdzIHRvLgorICAgICAqIEBwYXJhbSBzZXRBY3RpdmVPblNjZW5lSWZOb25lQWN0aXZlIERlZmlu
ZXMgd2hldGVyIHRoZSBjYW1lcmEgc2hvdWxkIGJlIG1hcmtlZCBhcyBhY3RpdmUsIGlmIG5vIG90
aGVyIGNhbWVyYSBoYXMgYmVlbiBkZWZpbmVkIGFzIGFjdGl2ZS4KKyAgICAqLworICAgIGZ1bmN0
aW9uIEZseUNhbWVyYShuYW1lLCBwb3NpdGlvbiwgc2NlbmUsIHNldEFjdGl2ZU9uU2NlbmVJZk5v
bmVBY3RpdmUpIHsKKyAgICAgICAgaWYgKHNldEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUgPT09
IHZvaWQgMCkgeyBzZXRBY3RpdmVPblNjZW5lSWZOb25lQWN0aXZlID0gdHJ1ZTsgfQorICAgICAg
ICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBwb3NpdGlvbiwgc2NlbmUsIHNl
dEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUpIHx8IHRoaXM7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBEZWZpbmUgdGhlIGNvbGxpc2lvbiBlbGxpcHNvaWQgb2YgdGhlIGNhbWVyYS4KKyAgICAg
ICAgICogVGhpcyBpcyBoZWxwZnVsIGZvciBzaW11bGF0aW5nIGEgY2FtZXJhIGJvZHksIGxpa2Ug
YSBwbGF5ZXIncyBib2R5LgorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNv
bS9iYWJ5bG9uMTAxL2NhbWVyYXMsX21lc2hfY29sbGlzaW9uc19hbmRfZ3Jhdml0eSNhcmNyb3Rh
dGVjYW1lcmEKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmVsbGlwc29pZCA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKDEs
IDEsIDEpOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGFuIG9mZnNldCBmb3IgdGhl
IHBvc2l0aW9uIG9mIHRoZSBlbGxpcHNvaWQgYXJvdW5kIHRoZSBjYW1lcmEuCisgICAgICAgICAq
IFRoaXMgY2FuIGJlIGhlbHBmdWwgaWYgdGhlIGNhbWVyYSBpcyBhdHRhY2hlZCBhd2F5IGZyb20g
dGhlIHBsYXllcidzIGJvZHkgY2VudGVyLAorICAgICAgICAgKiBzdWNoIGFzIGF0IGl0cyBoZWFk
LgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZWxsaXBzb2lkT2Zmc2V0ID0gbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0oMCwg
MCwgMCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSBjb2xsaXNp
b25zIG9mIHRoZSBjYW1lcmEgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc2NlbmUgb2JqZWN0cy4KKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLmNoZWNrQ29sbGlzaW9ucyA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogRW5hYmxlIG9yIGRpc2FibGUgZ3Jhdml0eSBvbiB0aGUgY2FtZXJh
LgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXBwbHlHcmF2aXR5ID0gZmFsc2U7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGN1cnJlbnQgZGlyZWN0aW9uIHRoZSBjYW1l
cmEgaXMgbW92aW5nIHRvLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuY2FtZXJhRGlyZWN0
aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZl
Y3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUcmFjayBSb2xsIHRvIG1h
aW50YWluIHRoZSB3YW50ZWQgUm9sbGluZyB3aGVuIGxvb2tpbmcgYXJvdW5kLgorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuX3RyYWNrUm9sbCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAq
IFNsb3dseSBjb3JyZWN0IHRoZSBSb2xsIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSBhZnRlciBhIFBp
dGNoK1lhdyByb3RhdGlvbi4KKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucm9sbENvcnJlY3Qg
PSAxMDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNaW1pYyBhIGJhbmtlZCB0dXJuLCBSb2xs
aW5nIHRoZSBjYW1lcmEgd2hlbiBZYXdpbmcuCisgICAgICAgICAqIEl0J3MgcmVjb21tZW5kZWQg
dG8gdXNlIHJvbGxDb3JyZWN0ID0gMTAgZm9yIGZhc3RlciBiYW5raW5nIGNvcnJlY3Rpb24uCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5iYW5rZWRUdXJuID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBMaW1pdCBpbiByYWRpYW5zIGZvciBob3cgbXVjaCBSb2xsIGJhbmtpbmcg
d2lsbCBhZGQuIChEZWZhdWx0OiA5MMKwKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYmFu
a2VkVHVybkxpbWl0ID0gTWF0aC5QSSAvIDI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBWYWx1
ZSBvZiAwIGRpc2FibGVzIHRoZSBiYW5rZWQgUm9sbC4KKyAgICAgICAgICogVmFsdWUgb2YgMSBp
cyBlcXVhbCB0byB0aGUgWWF3IGFuZ2xlIGluIHJhZGlhbnMuCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5iYW5rZWRUdXJuTXVsdGlwbGllciA9IDE7CisgICAgICAgIF90aGlzLl9uZWVkTW92
ZUZvckdyYXZpdHkgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX29sZFBvc2l0aW9uID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIF90aGlzLl9kaWZmUG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgX3Ro
aXMuX25ld1Bvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8vIENvbGxpc2lvbnMuCisgICAg
ICAgIF90aGlzLl9jb2xsaXNpb25NYXNrID0gLTE7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisg
ICAgICAgIF90aGlzLl9vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdlID0gZnVuY3Rpb24gKGNvbGxp
c2lvbklkLCBuZXdQb3NpdGlvbiwgY29sbGlkZWRNZXNoKSB7CisgICAgICAgICAgICBpZiAoY29s
bGlkZWRNZXNoID09PSB2b2lkIDApIHsgY29sbGlkZWRNZXNoID0gbnVsbDsgfQorICAgICAgICAg
ICAgdmFyIHVwZGF0ZVBvc2l0aW9uID0gZnVuY3Rpb24gKG5ld1BvcykgeworICAgICAgICAgICAg
ICAgIF90aGlzLl9uZXdQb3NpdGlvbi5jb3B5RnJvbShuZXdQb3MpOworICAgICAgICAgICAgICAg
IF90aGlzLl9uZXdQb3NpdGlvbi5zdWJ0cmFjdFRvUmVmKF90aGlzLl9vbGRQb3NpdGlvbiwgX3Ro
aXMuX2RpZmZQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9kaWZmUG9zaXRp
b24ubGVuZ3RoKCkgPiBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siRW5naW5lIl0uQ29sbGlzaW9uc0Vwc2lsb24pIHsKKyAgICAgICAgICAgICAgICAgICAgX3Ro
aXMucG9zaXRpb24uYWRkSW5QbGFjZShfdGhpcy5fZGlmZlBvc2l0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKF90aGlzLm9uQ29sbGlkZSAmJiBjb2xsaWRlZE1lc2gpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF90aGlzLm9uQ29sbGlkZShjb2xsaWRlZE1lc2gpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIHVwZGF0ZVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKKyAgICAgICAgfTsKKyAgICAgICAgX3Ro
aXMuaW5wdXRzID0gbmV3IF9mbHlDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIkZseUNhbWVyYUlucHV0c01hbmFnZXIiXShfdGhpcyk7CisgICAgICAgIF90
aGlzLmlucHV0cy5hZGRLZXlib2FyZCgpLmFkZE1vdXNlKCk7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZseUNhbWVyYS5wcm90b3R5cGUs
ICJhbmd1bGFyU2Vuc2liaWxpdHkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBpbnB1dCBzZW5zaWJpbGl0eSBmb3IgbW91c2UgaW5wdXQuCisgICAgICAgICAqIEhpZ2hlciB2
YWx1ZXMgcmVkdWNlIHNlbnNpdGl2aXR5LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbW91c2UgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsi
bW91c2UiXTsKKyAgICAgICAgICAgIGlmIChtb3VzZSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBtb3VzZS5hbmd1bGFyU2Vuc2liaWxpdHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGlu
cHV0IHNlbnNpYmlsaXR5IGZvciBhIG1vdXNlIGlucHV0LgorICAgICAgICAgKiBIaWdoZXIgdmFs
dWVzIHJlZHVjZSBzZW5zaXRpdml0eS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIgbW91c2UgPSB0aGlzLmlucHV0cy5hdHRhY2hl
ZFsibW91c2UiXTsKKyAgICAgICAgICAgIGlmIChtb3VzZSkgeworICAgICAgICAgICAgICAgIG1v
dXNlLmFuZ3VsYXJTZW5zaWJpbGl0eSA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmx5Q2FtZXJhLnByb3RvdHlwZSwg
ImtleXNGb3J3YXJkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSBrZXlzIGZv
ciBjYW1lcmEgbW92ZW1lbnQgZm9yd2FyZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5pbnB1dHMuYXR0YWNo
ZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4ga2V5Ym9hcmQua2V5c0ZvcndhcmQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gW107CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAqIFNldCB0
aGUga2V5cyBmb3IgY2FtZXJhIG1vdmVtZW50IGZvcndhcmQuCisgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQgPSB0aGlz
LmlucHV0cy5hdHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZCkg
eworICAgICAgICAgICAgICAgIGtleWJvYXJkLmtleXNGb3J3YXJkID0gdmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbHlD
YW1lcmEucHJvdG90eXBlLCAia2V5c0JhY2t3YXJkIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0IHRoZSBrZXlzIGZvciBjYW1lcmEgbW92ZW1lbnQgYmFja3dhcmQuCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9
IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJv
YXJkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtleWJvYXJkLmtleXNCYWNrd2FyZDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfSwKKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRoaXMu
aW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJkKSB7
CisgICAgICAgICAgICAgICAga2V5Ym9hcmQua2V5c0JhY2t3YXJkID0gdmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbHlD
YW1lcmEucHJvdG90eXBlLCAia2V5c1VwIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
IHRoZSBrZXlzIGZvciBjYW1lcmEgbW92ZW1lbnQgdXAuCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRoaXMuaW5wdXRz
LmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJkKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGtleWJvYXJkLmtleXNVcDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICogU2V0
IHRoZSBrZXlzIGZvciBjYW1lcmEgbW92ZW1lbnQgdXAuCisgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQgPSB0aGlzLmlu
cHV0cy5hdHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZCkgewor
ICAgICAgICAgICAgICAgIGtleWJvYXJkLmtleXNVcCA9IHZhbHVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmx5Q2FtZXJhLnBy
b3RvdHlwZSwgImtleXNEb3duIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSBr
ZXlzIGZvciBjYW1lcmEgbW92ZW1lbnQgZG93bi4KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5pbnB1dHMuYXR0
YWNoZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4ga2V5Ym9hcmQua2V5c0Rvd247CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gW107CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAqIFNldCB0
aGUga2V5cyBmb3IgY2FtZXJhIG1vdmVtZW50IGRvd24uCisgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQgPSB0aGlzLmlu
cHV0cy5hdHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZCkgewor
ICAgICAgICAgICAgICAgIGtleWJvYXJkLmtleXNEb3duID0gdmFsdWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbHlDYW1lcmEu
cHJvdG90eXBlLCAia2V5c0xlZnQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgdGhl
IGtleXMgZm9yIGNhbWVyYSBtb3ZlbWVudCBsZWZ0LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQgPSB0aGlzLmlucHV0cy5h
dHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBrZXlib2FyZC5rZXlzTGVmdDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICogU2V0
IHRoZSBrZXlzIGZvciBjYW1lcmEgbW92ZW1lbnQgbGVmdC4KKyAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRoaXMu
aW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJkKSB7
CisgICAgICAgICAgICAgICAga2V5Ym9hcmQua2V5c0xlZnQgPSB2YWx1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZseUNhbWVy
YS5wcm90b3R5cGUsICJrZXlzUmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQg
dGhlIGtleXMgZm9yIGNhbWVyYSBtb3ZlbWVudCByaWdodC4KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5pbnB1
dHMuYXR0YWNoZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4ga2V5Ym9hcmQua2V5c1JpZ2h0OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAg
KiBTZXQgdGhlIGtleXMgZm9yIGNhbWVyYSBtb3ZlbWVudCByaWdodC4KKyAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9
IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJv
YXJkKSB7CisgICAgICAgICAgICAgICAga2V5Ym9hcmQua2V5c1JpZ2h0ID0gdmFsdWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEF0dGFjaCBhIGNv
bnRyb2wgdG8gdGhlIEhUTUwgRE9NIGVsZW1lbnQuCisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVm
aW5lcyB0aGUgZWxlbWVudCB0aGF0IGxpc3RlbnMgdG8gdGhlIGlucHV0IGV2ZW50cy4KKyAgICAg
KiBAcGFyYW0gbm9QcmV2ZW50RGVmYXVsdCBEZWZpbmVzIHdoZXRoZXIgZXZlbnRzIGNhdWdodCBi
eSB0aGUgY29udHJvbHMgc2hvdWxkIGNhbGwgcHJldmVudGRlZmF1bHQoKS4gaHR0cHM6Ly9kZXZl
bG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L3ByZXZlbnREZWZhdWx0
CisgICAgICovCisgICAgRmx5Q2FtZXJhLnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0gZnVuY3Rp
b24gKGVsZW1lbnQsIG5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuYXR0
YWNoRWxlbWVudChlbGVtZW50LCBub1ByZXZlbnREZWZhdWx0KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIERldGFjaCBhIGNvbnRyb2wgZnJvbSB0aGUgSFRNTCBET00gZWxlbWVudC4KKyAgICAg
KiBUaGUgY2FtZXJhIHdpbGwgc3RvcCByZWFjdGluZyB0byB0aGF0IGlucHV0LgorICAgICAqIEBw
YXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdGhhdCBsaXN0ZW5zIHRvIHRoZSBpbnB1
dCBldmVudHMuCisgICAgICovCisgICAgRmx5Q2FtZXJhLnByb3RvdHlwZS5kZXRhY2hDb250cm9s
ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuZGV0YWNoRWxlbWVu
dChlbGVtZW50KTsKKyAgICAgICAgdGhpcy5jYW1lcmFEaXJlY3Rpb24gPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgwLCAwLCAw
KTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbHlDYW1lcmEucHJvdG90eXBl
LCAiY29sbGlzaW9uTWFzayIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCB0aGUgbWFz
ayB0aGF0IHRoZSBjYW1lcmEgaWdub3JlcyBpbiBjb2xsaXNpb24gZXZlbnRzLgorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
Y29sbGlzaW9uTWFzazsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICogU2V0IHRo
ZSBtYXNrIHRoYXQgdGhlIGNhbWVyYSBpZ25vcmVzIGluIGNvbGxpc2lvbiBldmVudHMuCisgICAg
ICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKG1hc2spIHsKKyAgICAgICAgICAgIHRoaXMu
X2NvbGxpc2lvbk1hc2sgPSAhaXNOYU4obWFzaykgPyBtYXNrIDogLTE7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8qKiBAaGlkZGVuICovCisgICAgRmx5Q2FtZXJhLnByb3RvdHlwZS5fY29sbGlk
ZVdpdGhXb3JsZCA9IGZ1bmN0aW9uIChkaXNwbGFjZW1lbnQpIHsKKyAgICAgICAgdmFyIGdsb2Jh
bFBvc2l0aW9uOworICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHsKKyAgICAgICAgICAgIGdsb2Jh
bFBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlcyh0aGlzLnBvc2l0aW9uLCB0aGlzLnBh
cmVudC5nZXRXb3JsZE1hdHJpeCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGdsb2JhbFBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjsKKyAgICAgICAgfQorICAgICAg
ICBnbG9iYWxQb3NpdGlvbi5zdWJ0cmFjdEZyb21GbG9hdHNUb1JlZigwLCB0aGlzLmVsbGlwc29p
ZC55LCAwLCB0aGlzLl9vbGRQb3NpdGlvbik7CisgICAgICAgIHRoaXMuX29sZFBvc2l0aW9uLmFk
ZEluUGxhY2UodGhpcy5lbGxpcHNvaWRPZmZzZXQpOworICAgICAgICB2YXIgY29vcmRpbmF0b3Ig
PSB0aGlzLmdldFNjZW5lKCkuY29sbGlzaW9uQ29vcmRpbmF0b3I7CisgICAgICAgIGlmICghdGhp
cy5fY29sbGlkZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2NvbGxpZGVyID0gY29vcmRpbmF0b3Iu
Y3JlYXRlQ29sbGlkZXIoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb2xsaWRlci5fcmFk
aXVzID0gdGhpcy5lbGxpcHNvaWQ7CisgICAgICAgIHRoaXMuX2NvbGxpZGVyLmNvbGxpc2lvbk1h
c2sgPSB0aGlzLl9jb2xsaXNpb25NYXNrOworICAgICAgICAvLyBObyBuZWVkIGZvciBjbG9uZSwg
YXMgbG9uZyBhcyBncmF2aXR5IGlzIG5vdCBvbi4KKyAgICAgICAgdmFyIGFjdHVhbERpc3BsYWNl
bWVudCA9IGRpc3BsYWNlbWVudDsKKyAgICAgICAgLy8gQWRkIGdyYXZpdHkgdG8gZGlyZWN0aW9u
IHRvIHByZXZlbnQgZHVhbC1jb2xsaXNpb24gY2hlY2tpbmcuCisgICAgICAgIGlmICh0aGlzLmFw
cGx5R3Jhdml0eSkgeworICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBtZW5kaW5nIHdpdGgg
Y2FtZXJhRGlyZWN0aW9uLCBhIGdsb2JhbCB2YXJpYWJsZSBvZiB0aGUgZmx5IGNhbWVyYSBjbGFz
cy4KKyAgICAgICAgICAgIGFjdHVhbERpc3BsYWNlbWVudCA9IGRpc3BsYWNlbWVudC5hZGQodGhp
cy5nZXRTY2VuZSgpLmdyYXZpdHkpOworICAgICAgICB9CisgICAgICAgIGNvb3JkaW5hdG9yLmdl
dE5ld1Bvc2l0aW9uKHRoaXMuX29sZFBvc2l0aW9uLCBhY3R1YWxEaXNwbGFjZW1lbnQsIHRoaXMu
X2NvbGxpZGVyLCAzLCBudWxsLCB0aGlzLl9vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdlLCB0aGlz
LnVuaXF1ZUlkKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRmx5Q2FtZXJhLnBy
b3RvdHlwZS5fY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5f
bG9jYWxEaXJlY3Rpb24pIHsKKyAgICAgICAgICAgIHRoaXMuX2xvY2FsRGlyZWN0aW9uID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1lZERpcmVjdGlvbiA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygp
OworICAgICAgICB9CisgICAgICAgIHRoaXMuaW5wdXRzLmNoZWNrSW5wdXRzKCk7CisgICAgICAg
IF9zdXBlci5wcm90b3R5cGUuX2NoZWNrSW5wdXRzLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIEZseUNhbWVyYS5wcm90b3R5cGUuX2RlY2lkZUlmTmVlZHNUb01v
dmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9uZWVkTW92ZUZvckdyYXZp
dHkgfHwgTWF0aC5hYnModGhpcy5jYW1lcmFEaXJlY3Rpb24ueCkgPiAwIHx8IE1hdGguYWJzKHRo
aXMuY2FtZXJhRGlyZWN0aW9uLnkpID4gMCB8fCBNYXRoLmFicyh0aGlzLmNhbWVyYURpcmVjdGlv
bi56KSA+IDA7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEZseUNhbWVyYS5wcm90
b3R5cGUuX3VwZGF0ZVBvc2l0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5j
aGVja0NvbGxpc2lvbnMgJiYgdGhpcy5nZXRTY2VuZSgpLmNvbGxpc2lvbnNFbmFibGVkKSB7Cisg
ICAgICAgICAgICB0aGlzLl9jb2xsaWRlV2l0aFdvcmxkKHRoaXMuY2FtZXJhRGlyZWN0aW9uKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUu
X3VwZGF0ZVBvc2l0aW9uLmNhbGwodGhpcyk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJlc3RvcmUgdGhlIFJvbGwgdG8gaXRzIHRhcmdldCB2YWx1ZSBhdCB0aGUgcmF0ZSBz
cGVjaWZpZWQuCisgICAgICogQHBhcmFtIHJhdGUgLSBIaWdoZXIgbWVhbnMgc2xvd2VyIHJlc3Rv
cmluZy4KKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgRmx5Q2FtZXJhLnByb3RvdHlwZS5y
ZXN0b3JlUm9sbCA9IGZ1bmN0aW9uIChyYXRlKSB7CisgICAgICAgIHZhciBsaW1pdCA9IHRoaXMu
X3RyYWNrUm9sbDsgLy8gVGFyZ2V0IFJvbGwuCisgICAgICAgIHZhciB6ID0gdGhpcy5yb3RhdGlv
bi56OyAvLyBDdXJyZW50IFJvbGwuCisgICAgICAgIHZhciBkZWx0YSA9IGxpbWl0IC0gejsgLy8g
RGlmZmVyZW5jZSBpbiBSb2xsLgorICAgICAgICB2YXIgbWluUmFkID0gMC4wMDE7IC8vIFRlbnRo
IG9mIGEgcmFkaWFuIGlzIGEgYmFyZWx5IG5vdGljYWJsZSBkaWZmZXJlbmNlLgorICAgICAgICAv
LyBJZiB0aGUgZGlmZmVyZW5jZSBpcyBub3RpY2FibGUsIHJlc3RvcmUgdGhlIFJvbGwuCisgICAg
ICAgIGlmIChNYXRoLmFicyhkZWx0YSkgPj0gbWluUmFkKSB7CisgICAgICAgICAgICAvLyBDaGFu
Z2UgWiByb3RhdGlvbiB0b3dhcmRzIHRoZSB0YXJnZXQgUm9sbC4KKyAgICAgICAgICAgIHRoaXMu
cm90YXRpb24ueiArPSBkZWx0YSAvIHJhdGU7CisgICAgICAgICAgICAvLyBNYXRjaCB3aGVuIG5l
YXIgZW5vdWdoLgorICAgICAgICAgICAgaWYgKE1hdGguYWJzKGxpbWl0IC0gdGhpcy5yb3RhdGlv
bi56KSA8PSBtaW5SYWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnJvdGF0aW9uLnogPSBsaW1p
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGVz
dHJveSB0aGUgY2FtZXJhIGFuZCByZWxlYXNlIHRoZSBjdXJyZW50IHJlc291cmNlcyBoZWxkIGJ5
IGl0LgorICAgICAqLworICAgIEZseUNhbWVyYS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuY2xlYXIoKTsKKyAgICAgICAgX3N1cGVyLnByb3Rv
dHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhl
IGN1cnJlbnQgb2JqZWN0IGNsYXNzIG5hbWUuCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5h
bWUuCisgICAgICovCisgICAgRmx5Q2FtZXJhLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiRmx5Q2FtZXJhIjsKKyAgICB9OworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZUFzVmVjdG9yMyJdKSgpCisgICAgXSwgRmx5Q2FtZXJhLnByb3RvdHlwZSwgImVsbGlwc29p
ZCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNWZWN0b3IzIl0pKCkKKyAgICBdLCBGbHlDYW1l
cmEucHJvdG90eXBlLCAiZWxsaXBzb2lkT2Zmc2V0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIEZseUNhbWVyYS5wcm90b3R5cGUsICJjaGVja0NvbGxpc2lvbnMiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRmx5Q2FtZXJhLnByb3RvdHlwZSwgImFw
cGx5R3Jhdml0eSIsIHZvaWQgMCk7CisgICAgcmV0dXJuIEZseUNhbWVyYTsKK30oX3RhcmdldENh
bWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUYXJnZXRDYW1lcmEiXSkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvZmx5Q2FtZXJhSW5wdXRzTWFuYWdlci50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9DYW1lcmFzL2ZseUNhbWVyYUlucHV0c01hbmFnZXIudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBGbHlDYW1lcmFJbnB1dHNNYW5hZ2VyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkZseUNhbWVyYUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZs
eUNhbWVyYUlucHV0c01hbmFnZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0
c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9jYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NhbWVyYUlucHV0c01hbmFnZXIg
Ki8gIi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0NhbWVyYXNfSW5wdXRzX2ZseUNhbWVyYU1vdXNlSW5wdXRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NhbWVyYXMvSW5w
dXRzL2ZseUNhbWVyYU1vdXNlSW5wdXQgKi8gIi4vQ2FtZXJhcy9JbnB1dHMvZmx5Q2FtZXJhTW91
c2VJbnB1dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX0lucHV0c19m
bHlDYW1lcmFLZXlib2FyZElucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL0lucHV0cy9mbHlDYW1lcmFLZXlib2FyZElu
cHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZseUNhbWVyYUtleWJvYXJkSW5wdXQudHMiKTsKKwor
CisKKworLyoqCisgKiBEZWZhdWx0IElucHV0cyBtYW5hZ2VyIGZvciB0aGUgRmx5Q2FtZXJhLgor
ICogSXQgZ3JvdXBzIGFsbCB0aGUgZGVmYXVsdCBzdXBwb3J0ZWQgaW5wdXRzIGZvciBlYXNlIG9m
IHVzZS4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jdXN0b21pemlu
Z19jYW1lcmFfaW5wdXRzCisgKi8KK3ZhciBGbHlDYW1lcmFJbnB1dHNNYW5hZ2VyID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEZseUNhbWVyYUlucHV0c01hbmFnZXIsIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgbmV3IEZseUNhbWVyYUlucHV0c01hbmFn
ZXIuCisgICAgICogQHBhcmFtIGNhbWVyYSBEZWZpbmVzIHRoZSBjYW1lcmEgdGhlIGlucHV0cyBi
ZWxvbmcgdG8uCisgICAgICovCisgICAgZnVuY3Rpb24gRmx5Q2FtZXJhSW5wdXRzTWFuYWdlcihj
YW1lcmEpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIGNhbWVyYSkgfHwgdGhp
czsKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIGtleWJvYXJkIGlucHV0IHN1cHBvcnQgdG8g
dGhlIGlucHV0IG1hbmFnZXIuCisgICAgICogQHJldHVybnMgdGhlIG5ldyBGbHlDYW1lcmFLZXli
b2FyZE1vdmVJbnB1dCgpLgorICAgICAqLworICAgIEZseUNhbWVyYUlucHV0c01hbmFnZXIucHJv
dG90eXBlLmFkZEtleWJvYXJkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmFkZChuZXcg
X0NhbWVyYXNfSW5wdXRzX2ZseUNhbWVyYUtleWJvYXJkSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCJdKCkpOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBtb3VzZSBpbnB1dCBzdXBwb3J0IHRv
IHRoZSBpbnB1dCBtYW5hZ2VyLgorICAgICAqIEBwYXJhbSB0b3VjaEVuYWJsZWQgRW5hYmxlIHRv
dWNoIHNjcmVlbiBzdXBwb3J0LgorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgRmx5Q2FtZXJhTW91
c2VJbnB1dCgpLgorICAgICAqLworICAgIEZseUNhbWVyYUlucHV0c01hbmFnZXIucHJvdG90eXBl
LmFkZE1vdXNlID0gZnVuY3Rpb24gKHRvdWNoRW5hYmxlZCkgeworICAgICAgICBpZiAodG91Y2hF
bmFibGVkID09PSB2b2lkIDApIHsgdG91Y2hFbmFibGVkID0gdHJ1ZTsgfQorICAgICAgICB0aGlz
LmFkZChuZXcgX0NhbWVyYXNfSW5wdXRzX2ZseUNhbWVyYU1vdXNlSW5wdXRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siRmx5Q2FtZXJhTW91c2VJbnB1dCJdKHRvdWNoRW5hYmxlZCkpOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBGbHlDYW1lcmFJbnB1dHNN
YW5hZ2VyOworfShfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJDYW1lcmFJbnB1dHNNYW5hZ2VyIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9DYW1lcmFzL2ZvbGxvd0NhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvZm9sbG93Q2FtZXJhLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBG
b2xsb3dDYW1lcmEsIEFyY0ZvbGxvd0NhbWVyYSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJGb2xsb3dDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZvbGxvd0NhbWVy
YTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmNGb2xsb3dDYW1lcmEiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIEFyY0ZvbGxvd0NhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIu
L01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NaXNjL3Rvb2xzICovICIuL01pc2MvdG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfdGFyZ2V0Q2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3RhcmdldENhbWVyYSAqLyAiLi9DYW1lcmFzL3RhcmdldENh
bWVyYS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2ZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZm9sbG93Q2FtZXJhSW5w
dXRzTWFuYWdlciAqLyAiLi9DYW1lcmFzL2ZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIudHMiKTsK
KworCisKKworCisKKworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTm9kZSJd
LkFkZE5vZGVDb25zdHJ1Y3RvcigiRm9sbG93Q2FtZXJhIiwgZnVuY3Rpb24gKG5hbWUsIHNjZW5l
KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBGb2xsb3dDYW1lcmEobmFt
ZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3Rv
cjMiXS5aZXJvKCksIHNjZW5lKTsgfTsKK30pOworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiQXJjRm9sbG93Q2FtZXJhIiwgZnVu
Y3Rpb24gKG5hbWUsIHNjZW5lKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5l
dyBBcmNGb2xsb3dDYW1lcmEobmFtZSwgMCwgMCwgMS4wLCBudWxsLCBzY2VuZSk7IH07Cit9KTsK
Ky8qKgorICogQSBmb2xsb3cgY2FtZXJhIHRha2VzIGEgbWVzaCBhcyBhIHRhcmdldCBhbmQgZm9s
bG93cyBpdCBhcyBpdCBtb3Zlcy4gQm90aCBhIGZyZWUgY2FtZXJhIHZlcnNpb24gZm9sbG93Q2Ft
ZXJhIGFuZAorICogYW4gYXJjIHJvdGF0ZSB2ZXJzaW9uIGFyY0ZvbGxvd0NhbWVyYSBhcmUgYXZh
aWxhYmxlLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vZmVhdHVyZXMvY2FtZXJh
cyNmb2xsb3ctY2FtZXJhCisgKi8KK3ZhciBGb2xsb3dDYW1lcmEgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19leHRlbmRzIl0oRm9sbG93Q2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIElu
c3RhbnRpYXRlcyB0aGUgZm9sbG93IGNhbWVyYS4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI2ZvbGxvdy1jYW1lcmEKKyAgICAgKiBAcGFyYW0g
bmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGNhbWVyYSBpbiB0aGUgc2NlbmUKKyAgICAgKiBA
cGFyYW0gcG9zaXRpb24gRGVmaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2FtZXJhCisgICAgICog
QHBhcmFtIHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIGNhbWVyYSBiZWxvbmcgdG8KKyAgICAg
KiBAcGFyYW0gbG9ja2VkVGFyZ2V0IERlZmluZSB0aGUgdGFyZ2V0IG9mIHRoZSBjYW1lcmEKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBGb2xsb3dDYW1lcmEobmFtZSwgcG9zaXRpb24sIHNjZW5lLCBs
b2NrZWRUYXJnZXQpIHsKKyAgICAgICAgaWYgKGxvY2tlZFRhcmdldCA9PT0gdm9pZCAwKSB7IGxv
Y2tlZFRhcmdldCA9IG51bGw7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgbmFtZSwgcG9zaXRpb24sIHNjZW5lKSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAg
ICogRGlzdGFuY2UgdGhlIGZvbGxvdyBjYW1lcmEgc2hvdWxkIGZvbGxvdyBhbiBvYmplY3QgYXQK
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLnJhZGl1cyA9IDEyOworICAgICAgICAvKioKKyAg
ICAgICAgICogTWluaW11bSBhbGxvd2VkIGRpc3RhbmNlIG9mIHRoZSBjYW1lcmEgdG8gdGhlIGF4
aXMgb2Ygcm90YXRpb24KKyAgICAgICAgICogKFRoZSBjYW1lcmEgY2FuIG5vdCBnZXQgY2xvc2Vy
KS4KKyAgICAgICAgICogVGhpcyBjYW4gaGVscCBsaW1pdGluZyBob3cgdGhlIENhbWVyYSBpcyBh
YmxlIHRvIG1vdmUgaW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubG93
ZXJSYWRpdXNMaW1pdCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNYXhpbXVtIGFs
bG93ZWQgZGlzdGFuY2Ugb2YgdGhlIGNhbWVyYSB0byB0aGUgYXhpcyBvZiByb3RhdGlvbgorICAg
ICAgICAgKiAoVGhlIGNhbWVyYSBjYW4gbm90IGdldCBmdXJ0aGVyKS4KKyAgICAgICAgICogVGhp
cyBjYW4gaGVscCBsaW1pdGluZyBob3cgdGhlIENhbWVyYSBpcyBhYmxlIHRvIG1vdmUgaW4gdGhl
IHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudXBwZXJSYWRpdXNMaW1pdCA9IG51
bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgYSByb3RhdGlvbiBvZmZzZXQgYmV0
d2VlbiB0aGUgY2FtZXJhIGFuZCB0aGUgb2JqZWN0IGl0IGZvbGxvd3MKKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLnJvdGF0aW9uT2Zmc2V0ID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IE1pbmltdW0gYWxsb3dlZCBhbmdsZSB0byBjYW1lcmEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGFy
Z2V0IG9iamVjdC4KKyAgICAgICAgICogVGhpcyBjYW4gaGVscCBsaW1pdGluZyBob3cgdGhlIENh
bWVyYSBpcyBhYmxlIHRvIG1vdmUgaW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMubG93ZXJSb3RhdGlvbk9mZnNldExpbWl0ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIE1heGltdW0gYWxsb3dlZCBhbmdsZSB0byBjYW1lcmEgcG9zaXRpb24gcmVsYXRpdmUg
dG8gdGFyZ2V0IG9iamVjdC4KKyAgICAgICAgICogVGhpcyBjYW4gaGVscCBsaW1pdGluZyBob3cg
dGhlIENhbWVyYSBpcyBhYmxlIHRvIG1vdmUgaW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMudXBwZXJSb3RhdGlvbk9mZnNldExpbWl0ID0gbnVsbDsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIERlZmluZSBhIGhlaWdodCBvZmZzZXQgYmV0d2VlbiB0aGUgY2FtZXJhIGFu
ZCB0aGUgb2JqZWN0IGl0IGZvbGxvd3MuCisgICAgICAgICAqIEl0IGNhbiBoZWxwIGZvbGxvd2lu
ZyBhbiBvYmplY3QgZnJvbSB0aGUgdG9wIChsaWtlIGEgY2FyIGNoYWluZyBhIHBsYW5lKQorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuaGVpZ2h0T2Zmc2V0ID0gNDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIE1pbmltdW0gYWxsb3dlZCBoZWlnaHQgb2YgY2FtZXJhIHBvc2l0aW9uIHJlbGF0
aXZlIHRvIHRhcmdldCBvYmplY3QuCisgICAgICAgICAqIFRoaXMgY2FuIGhlbHAgbGltaXRpbmcg
aG93IHRoZSBDYW1lcmEgaXMgYWJsZSB0byBtb3ZlIGluIHRoZSBzY2VuZS4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLmxvd2VySGVpZ2h0T2Zmc2V0TGltaXQgPSBudWxsOworICAgICAgICAv
KioKKyAgICAgICAgICogTWF4aW11bSBhbGxvd2VkIGhlaWdodCBvZiBjYW1lcmEgcG9zaXRpb24g
cmVsYXRpdmUgdG8gdGFyZ2V0IG9iamVjdC4KKyAgICAgICAgICogVGhpcyBjYW4gaGVscCBsaW1p
dGluZyBob3cgdGhlIENhbWVyYSBpcyBhYmxlIHRvIG1vdmUgaW4gdGhlIHNjZW5lLgorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMudXBwZXJIZWlnaHRPZmZzZXRMaW1pdCA9IG51bGw7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgaG93IGZhc3QgdGhlIGNhbWVyYSBjYW4gYWNjZWxl
cmF0ZSB0byBmb2xsb3cgaXQgcyB0YXJnZXQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5j
YW1lcmFBY2NlbGVyYXRpb24gPSAwLjA1OworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5l
IHRoZSBzcGVlZCBsaW1pdCBvZiB0aGUgY2FtZXJhIGZvbGxvd2luZyBhbiBvYmplY3QuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5tYXhDYW1lcmFTcGVlZCA9IDIwOworICAgICAgICBfdGhp
cy5sb2NrZWRUYXJnZXQgPSBsb2NrZWRUYXJnZXQ7CisgICAgICAgIF90aGlzLmlucHV0cyA9IG5l
dyBfZm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9f
WyJGb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyIl0oX3RoaXMpOworICAgICAgICBfdGhpcy5pbnB1
dHMuYWRkS2V5Ym9hcmQoKS5hZGRNb3VzZVdoZWVsKCkuYWRkUG9pbnRlcnMoKTsKKyAgICAgICAg
cmV0dXJuIF90aGlzOworICAgICAgICAvLyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHdo
ZW4gdGhlIHJlbGV2YW50IGhhbmRsZXJzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZC4KKyAgICAgICAg
Ly8gdGhpcy5pbnB1dHMuYWRkS2V5Ym9hcmQoKS5hZGRNb3VzZVdoZWVsKCkuYWRkUG9pbnRlcnMo
KS5hZGRWUkRldmljZU9yaWVudGF0aW9uKCk7CisgICAgfQorICAgIEZvbGxvd0NhbWVyYS5wcm90
b3R5cGUuX2ZvbGxvdyA9IGZ1bmN0aW9uIChjYW1lcmFUYXJnZXQpIHsKKyAgICAgICAgaWYgKCFj
YW1lcmFUYXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2
YXIgeVJvdGF0aW9uOworICAgICAgICBpZiAoY2FtZXJhVGFyZ2V0LnJvdGF0aW9uUXVhdGVybmlv
bikgeworICAgICAgICAgICAgdmFyIHJvdE1hdHJpeCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0cml4Il0oKTsKKyAgICAgICAgICAgIGNh
bWVyYVRhcmdldC5yb3RhdGlvblF1YXRlcm5pb24udG9Sb3RhdGlvbk1hdHJpeChyb3RNYXRyaXgp
OworICAgICAgICAgICAgeVJvdGF0aW9uID0gTWF0aC5hdGFuMihyb3RNYXRyaXgubVs4XSwgcm90
TWF0cml4Lm1bMTBdKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHlS
b3RhdGlvbiA9IGNhbWVyYVRhcmdldC5yb3RhdGlvbi55OworICAgICAgICB9CisgICAgICAgIHZh
ciByYWRpYW5zID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9v
bHMiXS5Ub1JhZGlhbnModGhpcy5yb3RhdGlvbk9mZnNldCkgKyB5Um90YXRpb247CisgICAgICAg
IHZhciB0YXJnZXRQb3NpdGlvbiA9IGNhbWVyYVRhcmdldC5nZXRBYnNvbHV0ZVBvc2l0aW9uKCk7
CisgICAgICAgIHZhciB0YXJnZXRYID0gdGFyZ2V0UG9zaXRpb24ueCArIE1hdGguc2luKHJhZGlh
bnMpICogdGhpcy5yYWRpdXM7CisgICAgICAgIHZhciB0YXJnZXRaID0gdGFyZ2V0UG9zaXRpb24u
eiArIE1hdGguY29zKHJhZGlhbnMpICogdGhpcy5yYWRpdXM7CisgICAgICAgIHZhciBkeCA9IHRh
cmdldFggLSB0aGlzLnBvc2l0aW9uLng7CisgICAgICAgIHZhciBkeSA9ICh0YXJnZXRQb3NpdGlv
bi55ICsgdGhpcy5oZWlnaHRPZmZzZXQpIC0gdGhpcy5wb3NpdGlvbi55OworICAgICAgICB2YXIg
ZHogPSAodGFyZ2V0WikgLSB0aGlzLnBvc2l0aW9uLno7CisgICAgICAgIHZhciB2eCA9IGR4ICog
dGhpcy5jYW1lcmFBY2NlbGVyYXRpb24gKiAyOyAvL3RoaXMgaXMgc2V0IHRvIC4wNQorICAgICAg
ICB2YXIgdnkgPSBkeSAqIHRoaXMuY2FtZXJhQWNjZWxlcmF0aW9uOworICAgICAgICB2YXIgdnog
PSBkeiAqIHRoaXMuY2FtZXJhQWNjZWxlcmF0aW9uICogMjsKKyAgICAgICAgaWYgKHZ4ID4gdGhp
cy5tYXhDYW1lcmFTcGVlZCB8fCB2eCA8IC10aGlzLm1heENhbWVyYVNwZWVkKSB7CisgICAgICAg
ICAgICB2eCA9IHZ4IDwgMSA/IC10aGlzLm1heENhbWVyYVNwZWVkIDogdGhpcy5tYXhDYW1lcmFT
cGVlZDsKKyAgICAgICAgfQorICAgICAgICBpZiAodnkgPiB0aGlzLm1heENhbWVyYVNwZWVkIHx8
IHZ5IDwgLXRoaXMubWF4Q2FtZXJhU3BlZWQpIHsKKyAgICAgICAgICAgIHZ5ID0gdnkgPCAxID8g
LXRoaXMubWF4Q2FtZXJhU3BlZWQgOiB0aGlzLm1heENhbWVyYVNwZWVkOworICAgICAgICB9Cisg
ICAgICAgIGlmICh2eiA+IHRoaXMubWF4Q2FtZXJhU3BlZWQgfHwgdnogPCAtdGhpcy5tYXhDYW1l
cmFTcGVlZCkgeworICAgICAgICAgICAgdnogPSB2eiA8IDEgPyAtdGhpcy5tYXhDYW1lcmFTcGVl
ZCA6IHRoaXMubWF4Q2FtZXJhU3BlZWQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5wb3NpdGlv
biA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
VmVjdG9yMyJdKHRoaXMucG9zaXRpb24ueCArIHZ4LCB0aGlzLnBvc2l0aW9uLnkgKyB2eSwgdGhp
cy5wb3NpdGlvbi56ICsgdnopOworICAgICAgICB0aGlzLnNldFRhcmdldCh0YXJnZXRQb3NpdGlv
bik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2hlZCBjb250cm9scyB0byB0aGUgY3Vy
cmVudCBjYW1lcmEuCisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0
aGUgY29udHJvbHMgc2hvdWxkIGJlIGxpc3RlbmVkIGZyb20KKyAgICAgKiBAcGFyYW0gbm9QcmV2
ZW50RGVmYXVsdCBEZWZpbmVzIHdoZXRoZXIgZXZlbnQgY2F1Z2h0IGJ5IHRoZSBjb250cm9scyBz
aG91bGQgY2FsbCBwcmV2ZW50ZGVmYXVsdCgpIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9y
Zy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvcHJldmVudERlZmF1bHQpCisgICAgICovCisgICAg
Rm9sbG93Q2FtZXJhLnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQs
IG5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuYXR0YWNoRWxlbWVudChl
bGVtZW50LCBub1ByZXZlbnREZWZhdWx0KTsKKyAgICAgICAgdGhpcy5fcmVzZXQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIH07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRhY2ggdGhlIGN1
cnJlbnQgY29udHJvbHMgZnJvbSB0aGUgY2FtZXJhLgorICAgICAqIFRoZSBjYW1lcmEgd2lsbCBz
dG9wIHJlYWN0aW5nIHRvIGlucHV0cy4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRo
ZSBlbGVtZW50IHRvIHN0b3AgbGlzdGVuaW5nIHRoZSBpbnB1dHMgZnJvbQorICAgICAqLworICAg
IEZvbGxvd0NhbWVyYS5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50
KSB7CisgICAgICAgIHRoaXMuaW5wdXRzLmRldGFjaEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAg
IGlmICh0aGlzLl9yZXNldCkgeworICAgICAgICAgICAgdGhpcy5fcmVzZXQoKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBGb2xsb3dDYW1lcmEucHJvdG90eXBl
Ll9jaGVja0lucHV0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuY2hlY2tJ
bnB1dHMoKTsKKyAgICAgICAgdGhpcy5fY2hlY2tMaW1pdHMoKTsKKyAgICAgICAgX3N1cGVyLnBy
b3RvdHlwZS5fY2hlY2tJbnB1dHMuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMubG9ja2Vk
VGFyZ2V0KSB7CisgICAgICAgICAgICB0aGlzLl9mb2xsb3codGhpcy5sb2NrZWRUYXJnZXQpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBGb2xsb3dDYW1lcmEucHJvdG90eXBlLl9jaGVja0xpbWl0
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMubG93ZXJSYWRpdXNMaW1pdCAhPT0g
bnVsbCAmJiB0aGlzLnJhZGl1cyA8IHRoaXMubG93ZXJSYWRpdXNMaW1pdCkgeworICAgICAgICAg
ICAgdGhpcy5yYWRpdXMgPSB0aGlzLmxvd2VyUmFkaXVzTGltaXQ7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMudXBwZXJSYWRpdXNMaW1pdCAhPT0gbnVsbCAmJiB0aGlzLnJhZGl1cyA+IHRo
aXMudXBwZXJSYWRpdXNMaW1pdCkgeworICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLnVw
cGVyUmFkaXVzTGltaXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubG93ZXJIZWlnaHRP
ZmZzZXRMaW1pdCAhPT0gbnVsbCAmJgorICAgICAgICAgICAgdGhpcy5oZWlnaHRPZmZzZXQgPCB0
aGlzLmxvd2VySGVpZ2h0T2Zmc2V0TGltaXQpIHsKKyAgICAgICAgICAgIHRoaXMuaGVpZ2h0T2Zm
c2V0ID0gdGhpcy5sb3dlckhlaWdodE9mZnNldExpbWl0OworICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLnVwcGVySGVpZ2h0T2Zmc2V0TGltaXQgIT09IG51bGwgJiYKKyAgICAgICAgICAgIHRo
aXMuaGVpZ2h0T2Zmc2V0ID4gdGhpcy51cHBlckhlaWdodE9mZnNldExpbWl0KSB7CisgICAgICAg
ICAgICB0aGlzLmhlaWdodE9mZnNldCA9IHRoaXMudXBwZXJIZWlnaHRPZmZzZXRMaW1pdDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5sb3dlclJvdGF0aW9uT2Zmc2V0TGltaXQgIT09IG51
bGwgJiYKKyAgICAgICAgICAgIHRoaXMucm90YXRpb25PZmZzZXQgPCB0aGlzLmxvd2VyUm90YXRp
b25PZmZzZXRMaW1pdCkgeworICAgICAgICAgICAgdGhpcy5yb3RhdGlvbk9mZnNldCA9IHRoaXMu
bG93ZXJSb3RhdGlvbk9mZnNldExpbWl0OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnVw
cGVyUm90YXRpb25PZmZzZXRMaW1pdCAhPT0gbnVsbCAmJgorICAgICAgICAgICAgdGhpcy5yb3Rh
dGlvbk9mZnNldCA+IHRoaXMudXBwZXJSb3RhdGlvbk9mZnNldExpbWl0KSB7CisgICAgICAgICAg
ICB0aGlzLnJvdGF0aW9uT2Zmc2V0ID0gdGhpcy51cHBlclJvdGF0aW9uT2Zmc2V0TGltaXQ7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGNhbWVyYSBjbGFzcyBu
YW1lLgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgRm9sbG93
Q2FtZXJhLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAiRm9sbG93Q2FtZXJhIjsKKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
Rm9sbG93Q2FtZXJhLnByb3RvdHlwZSwgInJhZGl1cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmEucHJvdG90eXBlLCAibG93ZXJSYWRpdXNMaW1pdCIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmEucHJvdG90
eXBlLCAidXBwZXJSYWRpdXNMaW1pdCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAg
ICBdLCBGb2xsb3dDYW1lcmEucHJvdG90eXBlLCAicm90YXRpb25PZmZzZXQiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJhLnByb3RvdHlwZSwgImxvd2Vy
Um90YXRpb25PZmZzZXRMaW1pdCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBd
LCBGb2xsb3dDYW1lcmEucHJvdG90eXBlLCAidXBwZXJSb3RhdGlvbk9mZnNldExpbWl0Iiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYS5wcm90b3R5cGUs
ICJoZWlnaHRPZmZzZXQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9s
bG93Q2FtZXJhLnByb3RvdHlwZSwgImxvd2VySGVpZ2h0T2Zmc2V0TGltaXQiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJhLnByb3RvdHlwZSwgInVwcGVy
SGVpZ2h0T2Zmc2V0TGltaXQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
Rm9sbG93Q2FtZXJhLnByb3RvdHlwZSwgImNhbWVyYUFjY2VsZXJhdGlvbiIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmEucHJvdG90eXBlLCAibWF4Q2Ft
ZXJhU3BlZWQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzTWVzaFJlZmVyZW5jZSJdKSgibG9j
a2VkVGFyZ2V0SWQiKQorICAgIF0sIEZvbGxvd0NhbWVyYS5wcm90b3R5cGUsICJsb2NrZWRUYXJn
ZXQiLCB2b2lkIDApOworICAgIHJldHVybiBGb2xsb3dDYW1lcmE7Cit9KF90YXJnZXRDYW1lcmFf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVGFyZ2V0Q2FtZXJhIl0pKTsKKworLyoqCisg
KiBBcmMgUm90YXRlIHZlcnNpb24gb2YgdGhlIGZvbGxvdyBjYW1lcmEuCisgKiBJdCBzdGlsbCBm
b2xsb3dzIGEgRGVmaW5lZCBtZXNoIGJ1dCBpbiBhbiBBcmMgUm90YXRlIENhbWVyYSBmYXNoaW9u
LgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vZmVhdHVyZXMvY2FtZXJhcyNmb2xs
b3ctY2FtZXJhCisgKi8KK3ZhciBBcmNGb2xsb3dDYW1lcmEgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oQXJjRm9sbG93Q2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIElu
c3RhbnRpYXRlcyBhIG5ldyBBcmNGb2xsb3dDYW1lcmEKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI2ZvbGxvdy1jYW1lcmEKKyAgICAgKiBAcGFy
YW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGNhbWVyYQorICAgICAqIEBwYXJhbSBhbHBo
YSBEZWZpbmUgdGhlIHJvdGF0aW9uIGFuZ2xlIG9mIHRoZSBjYW1lcmEgYXJvdW5kIHRoZSBsb2dp
dHVkaW5hbCBheGlzCisgICAgICogQHBhcmFtIGJldGEgRGVmaW5lIHRoZSByb3RhdGlvbiBhbmds
ZSBvZiB0aGUgY2FtZXJhIGFyb3VuZCB0aGUgZWxldmF0aW9uIGF4aXMKKyAgICAgKiBAcGFyYW0g
cmFkaXVzIERlZmluZSB0aGUgcmFkaXVzIG9mIHRoZSBjYW1lcmEgZnJvbSBpdHMgdGFyZ2V0IHBv
aW50CisgICAgICogQHBhcmFtIHRhcmdldCBEZWZpbmUgdGhlIHRhcmdldCBvZiB0aGUgY2FtZXJh
CisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIGNhbWVyYSBiZWxvbmdz
IHRvCisgICAgICovCisgICAgZnVuY3Rpb24gQXJjRm9sbG93Q2FtZXJhKG5hbWUsIAorICAgIC8q
KiBUaGUgbG9uZ2l0dWRpbmFsIGFuZ2xlIG9mIHRoZSBjYW1lcmEgKi8KKyAgICBhbHBoYSwgCisg
ICAgLyoqIFRoZSBsYXRpdHVkaW5hbCBhbmdsZSBvZiB0aGUgY2FtZXJhICovCisgICAgYmV0YSwg
CisgICAgLyoqIFRoZSByYWRpdXMgb2YgdGhlIGNhbWVyYSBmcm9tIGl0cyB0YXJnZXQgKi8KKyAg
ICByYWRpdXMsIAorICAgIC8qKiBEZWZpbmUgdGhlIGNhbWVyYSB0YXJnZXQgKHRoZSBtZXNzaCBp
dCBzaG91bGQgZm9sbG93KSAqLworICAgIHRhcmdldCwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKSB8fCB0aGlzOwor
ICAgICAgICBfdGhpcy5hbHBoYSA9IGFscGhhOworICAgICAgICBfdGhpcy5iZXRhID0gYmV0YTsK
KyAgICAgICAgX3RoaXMucmFkaXVzID0gcmFkaXVzOworICAgICAgICBfdGhpcy50YXJnZXQgPSB0
YXJnZXQ7CisgICAgICAgIF90aGlzLl9jYXJ0ZXNpYW5Db29yZGluYXRlcyA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICBfdGhpcy5fZm9sbG93KCk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9Cisg
ICAgQXJjRm9sbG93Q2FtZXJhLnByb3RvdHlwZS5fZm9sbG93ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAoIXRoaXMudGFyZ2V0KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fY2FydGVzaWFuQ29vcmRpbmF0ZXMueCA9IHRoaXMucmFkaXVzICogTWF0
aC5jb3ModGhpcy5hbHBoYSkgKiBNYXRoLmNvcyh0aGlzLmJldGEpOworICAgICAgICB0aGlzLl9j
YXJ0ZXNpYW5Db29yZGluYXRlcy55ID0gdGhpcy5yYWRpdXMgKiBNYXRoLnNpbih0aGlzLmJldGEp
OworICAgICAgICB0aGlzLl9jYXJ0ZXNpYW5Db29yZGluYXRlcy56ID0gdGhpcy5yYWRpdXMgKiBN
YXRoLnNpbih0aGlzLmFscGhhKSAqIE1hdGguY29zKHRoaXMuYmV0YSk7CisgICAgICAgIHZhciB0
YXJnZXRQb3NpdGlvbiA9IHRoaXMudGFyZ2V0LmdldEFic29sdXRlUG9zaXRpb24oKTsKKyAgICAg
ICAgdGhpcy5wb3NpdGlvbiA9IHRhcmdldFBvc2l0aW9uLmFkZCh0aGlzLl9jYXJ0ZXNpYW5Db29y
ZGluYXRlcyk7CisgICAgICAgIHRoaXMuc2V0VGFyZ2V0KHRhcmdldFBvc2l0aW9uKTsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQXJjRm9sbG93Q2FtZXJhLnByb3RvdHlwZS5fY2hl
Y2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2NoZWNr
SW5wdXRzLmNhbGwodGhpcyk7CisgICAgICAgIHRoaXMuX2ZvbGxvdygpOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LgorICAgICAq
IEl0IGlzIG1vc3RseSB1c2VkIGludGVybmFsbHkgZm9yIHNlcmlhbGl6YXRpb24gcHVycG9zZXMu
CisgICAgICovCisgICAgQXJjRm9sbG93Q2FtZXJhLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQXJjRm9sbG93Q2FtZXJhIjsKKyAgICB9Owor
ICAgIHJldHVybiBBcmNGb2xsb3dDYW1lcmE7Cit9KF90YXJnZXRDYW1lcmFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siVGFyZ2V0Q2FtZXJhIl0pKTsKKworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9DYW1lcmFzL2ZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2Ft
ZXJhcy9mb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
Rm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJGb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBG
b2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jYW1lcmFJbnB1dHNNYW5h
Z2VyICovICIuL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9JbnB1dHNfZm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vSW5wdXRz
L2ZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZvbGxv
d0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0lucHV0c19mb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vSW5wdXRzL2ZvbGxvd0NhbWVyYU1v
dXNlV2hlZWxJbnB1dCAqLyAiLi9DYW1lcmFzL0lucHV0cy9mb2xsb3dDYW1lcmFNb3VzZVdoZWVs
SW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfSW5wdXRzX2ZvbGxvd0NhbWVy
YVBvaW50ZXJzSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vSW5wdXRzL2ZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQgKi8gIi4vQ2Ft
ZXJhcy9JbnB1dHMvZm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dC50cyIpOworCisKKworCisKKy8q
KgorICogRGVmYXVsdCBJbnB1dHMgbWFuYWdlciBmb3IgdGhlIEZvbGxvd0NhbWVyYS4KKyAqIEl0
IGdyb3VwcyBhbGwgdGhlIGRlZmF1bHQgc3VwcG9ydGVkIGlucHV0cyBmb3IgZWFzZSBvZiB1c2Uu
CisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXppbmdfY2Ft
ZXJhX2lucHV0cworICovCit2YXIgRm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlciA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2V4dGVuZHMiXShGb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyLCBfc3VwZXIp
OworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBGb2xsb3dDYW1lcmFJbnB1dHNN
YW5hZ2VyLgorICAgICAqIEBwYXJhbSBjYW1lcmEgRGVmaW5lcyB0aGUgY2FtZXJhIHRoZSBpbnB1
dHMgYmVsb25nIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gRm9sbG93Q2FtZXJhSW5wdXRzTWFu
YWdlcihjYW1lcmEpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIGNhbWVyYSkg
fHwgdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIGtleWJvYXJkIGlucHV0IHN1cHBv
cnQgdG8gdGhlIGlucHV0IG1hbmFnZXIuCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgaW5w
dXQgbWFuYWdlcgorICAgICAqLworICAgIEZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIucHJvdG90
eXBlLmFkZEtleWJvYXJkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmFkZChuZXcgX0lu
cHV0c19mb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCJdKCkpOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBtb3VzZSB3aGVlbCBpbnB1dCBz
dXBwb3J0IHRvIHRoZSBpbnB1dCBtYW5hZ2VyLgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50
IGlucHV0IG1hbmFnZXIKKyAgICAgKi8KKyAgICBGb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyLnBy
b3RvdHlwZS5hZGRNb3VzZVdoZWVsID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmFkZChu
ZXcgX0lucHV0c19mb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siRm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0Il0oKSk7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkIHBvaW50ZXJzIGlucHV0IHN1
cHBvcnQgdG8gdGhlIGlucHV0IG1hbmFnZXIuCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQg
aW5wdXQgbWFuYWdlcgorICAgICAqLworICAgIEZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIucHJv
dG90eXBlLmFkZFBvaW50ZXJzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmFkZChuZXcg
X0lucHV0c19mb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQiXSgpKTsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgb3JpZW50YXRpb24gaW5wdXQgc3VwcG9y
dCB0byB0aGUgaW5wdXQgbWFuYWdlci4KKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBpbnB1
dCBtYW5hZ2VyCisgICAgICovCisgICAgRm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlci5wcm90b3R5
cGUuYWRkVlJEZXZpY2VPcmllbnRhdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY29uc29s
ZS53YXJuKCJEZXZpY2VPcmllbnRhdGlvbiBzdXBwb3J0IG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9y
IEZvbGxvd0NhbWVyYS4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1
cm4gRm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlcjsKK30oX2NhbWVyYUlucHV0c01hbmFnZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ2FtZXJhSW5wdXRzTWFuYWdlciJdKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9mcmVlQ2FtZXJhLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvZnJlZUNhbWVy
YS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IEZyZWVDYW1lcmEgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRnJlZUNhbWVyYTsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3Ig
Ki8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RhcmdldENhbWVyYV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90YXJnZXRDYW1lcmEgKi8g
Ii4vQ2FtZXJhcy90YXJnZXRDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
ZnJlZUNhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2Ft
ZXJhcy9mcmVlQ2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOworCisKKworCisKKworLyoqCisgKiBU
aGlzIHJlcHJlc2VudHMgYSBmcmVlIHR5cGUgb2YgY2FtZXJhLiBJdCBjYW4gYmUgdXNlZnVsIGlu
IEZpcnN0IFBlcnNvbiBTaG9vdGVyIGdhbWUgZm9yIGluc3RhbmNlLgorICogUGxlYXNlIGNvbnNp
ZGVyIHVzaW5nIHRoZSBuZXcgVW5pdmVyc2FsQ2FtZXJhIGluc3RlYWQgYXMgaXQgYWRkcyBtb3Jl
IGZ1bmN0aW9uYWxpdHkgbGlrZSB0aGUgZ2FtZXBhZC4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2ZlYXR1cmVzL2NhbWVyYXMjdW5pdmVyc2FsLWNhbWVyYQorICovCit2YXIgRnJl
ZUNhbWVyYSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShGcmVlQ2FtZXJhLCBfc3Vw
ZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIEZyZWUgQ2FtZXJhLgorICAgICAq
IFRoaXMgcmVwcmVzZW50cyBhIGZyZWUgdHlwZSBvZiBjYW1lcmEuIEl0IGNhbiBiZSB1c2VmdWwg
aW4gRmlyc3QgUGVyc29uIFNob290ZXIgZ2FtZSBmb3IgaW5zdGFuY2UuCisgICAgICogUGxlYXNl
IGNvbnNpZGVyIHVzaW5nIHRoZSBuZXcgVW5pdmVyc2FsQ2FtZXJhIGluc3RlYWQgYXMgaXQgYWRk
cyBtb3JlIGZ1bmN0aW9uYWxpdHkgbGlrZSB0b3VjaCB0byB0aGlzIGNhbWVyYS4KKyAgICAgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI3VuaXZlcnNhbC1j
YW1lcmEKKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGNhbWVyYSBp
biB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gcG9zaXRpb24gRGVmaW5lIHRoZSBzdGFydCBwb3Np
dGlvbiBvZiB0aGUgY2FtZXJhIGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZp
bmUgdGhlIHNjZW5lIHRoZSBjYW1lcmEgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBzZXRBY3Rp
dmVPblNjZW5lSWZOb25lQWN0aXZlIERlZmluZXMgd2hldGVyIHRoZSBjYW1lcmEgc2hvdWxkIGJl
IG1hcmtlZCBhcyBhY3RpdmUgaWYgbm90IG90aGVyIGFjdGl2ZSBjYW1lcmFzIGhhdmUgYmVlbiBk
ZWZpbmVkCisgICAgICovCisgICAgZnVuY3Rpb24gRnJlZUNhbWVyYShuYW1lLCBwb3NpdGlvbiwg
c2NlbmUsIHNldEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUpIHsKKyAgICAgICAgaWYgKHNldEFj
dGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUgPT09IHZvaWQgMCkgeyBzZXRBY3RpdmVPblNjZW5lSWZO
b25lQWN0aXZlID0gdHJ1ZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlz
LCBuYW1lLCBwb3NpdGlvbiwgc2NlbmUsIHNldEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUpIHx8
IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGNvbGxpc2lvbiBlbGxp
cHNvaWQgb2YgdGhlIGNhbWVyYS4KKyAgICAgICAgICogVGhpcyBpcyBoZWxwZnVsIHRvIHNpbXVs
YXRlIGEgY2FtZXJhIGJvZHkgbGlrZSB0aGUgcGxheWVyIGJvZHkgYXJvdW5kIHRoZSBjYW1lcmEK
KyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9jYW1l
cmFzLF9tZXNoX2NvbGxpc2lvbnNfYW5kX2dyYXZpdHkjYXJjcm90YXRlY2FtZXJhCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5lbGxpcHNvaWQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgwLjUsIDEsIDAuNSk7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgYW4gb2Zmc2V0IGZvciB0aGUgcG9zaXRpb24gb2Yg
dGhlIGVsbGlwc29pZCBhcm91bmQgdGhlIGNhbWVyYS4KKyAgICAgICAgICogVGhpcyBjYW4gYmUg
aGVscGZ1bCB0byBkZXRlcm1pbmUgdGhlIGNlbnRlciBvZiB0aGUgYm9keSBuZWFyIHRoZSBncmF2
aXR5IGNlbnRlciBvZiB0aGUgYm9keQorICAgICAgICAgKiBpbnN0ZWFkIG9mIGl0cyBoZWFkLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZWxsaXBzb2lkT2Zmc2V0ID0gbmV3IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0oMCwgMCwg
MCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSBjb2xsaXNpb25z
IG9mIHRoZSBjYW1lcmEgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc2NlbmUgb2JqZWN0cy4KKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLmNoZWNrQ29sbGlzaW9ucyA9IGZhbHNlOworICAgICAgICAv
KioKKyAgICAgICAgICogRW5hYmxlIG9yIGRpc2FibGUgZ3Jhdml0eSBvbiB0aGUgY2FtZXJhLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXBwbHlHcmF2aXR5ID0gZmFsc2U7CisgICAgICAg
IF90aGlzLl9uZWVkTW92ZUZvckdyYXZpdHkgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX29sZFBv
c2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9kaWZmUG9zaXRpb24gPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8o
KTsKKyAgICAgICAgX3RoaXMuX25ld1Bvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8vIENv
bGxpc2lvbnMKKyAgICAgICAgX3RoaXMuX2NvbGxpc2lvbk1hc2sgPSAtMTsKKyAgICAgICAgX3Ro
aXMuX29uQ29sbGlzaW9uUG9zaXRpb25DaGFuZ2UgPSBmdW5jdGlvbiAoY29sbGlzaW9uSWQsIG5l
d1Bvc2l0aW9uLCBjb2xsaWRlZE1lc2gpIHsKKyAgICAgICAgICAgIGlmIChjb2xsaWRlZE1lc2gg
PT09IHZvaWQgMCkgeyBjb2xsaWRlZE1lc2ggPSBudWxsOyB9CisgICAgICAgICAgICB2YXIgdXBk
YXRlUG9zaXRpb24gPSBmdW5jdGlvbiAobmV3UG9zKSB7CisgICAgICAgICAgICAgICAgX3RoaXMu
X25ld1Bvc2l0aW9uLmNvcHlGcm9tKG5ld1Bvcyk7CisgICAgICAgICAgICAgICAgX3RoaXMuX25l
d1Bvc2l0aW9uLnN1YnRyYWN0VG9SZWYoX3RoaXMuX29sZFBvc2l0aW9uLCBfdGhpcy5fZGlmZlBv
c2l0aW9uKTsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2RpZmZQb3NpdGlvbi5sZW5ndGgo
KSA+IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUi
XS5Db2xsaXNpb25zRXBzaWxvbikgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5wb3NpdGlv
bi5hZGRJblBsYWNlKF90aGlzLl9kaWZmUG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBp
ZiAoX3RoaXMub25Db2xsaWRlICYmIGNvbGxpZGVkTWVzaCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMub25Db2xsaWRlKGNvbGxpZGVkTWVzaCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdXBkYXRl
UG9zaXRpb24obmV3UG9zaXRpb24pOworICAgICAgICB9OworICAgICAgICBfdGhpcy5pbnB1dHMg
PSBuZXcgX2ZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIkZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyIl0oX3RoaXMpOworICAgICAgICBfdGhpcy5pbnB1
dHMuYWRkS2V5Ym9hcmQoKS5hZGRNb3VzZSgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAg
fQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGcmVlQ2FtZXJhLnByb3RvdHlwZSwgImFuZ3Vs
YXJTZW5zaWJpbGl0eSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGlucHV0
IHNlbnNpYmlsaXR5IGZvciBhIG1vdXNlIGlucHV0LiAoZGVmYXVsdCBpcyAyMDAwLjApCisgICAg
ICAgICAqIEhpZ2hlciB2YWx1ZXMgcmVkdWNlIHNlbnNpdGl2aXR5LgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbW91c2UgPSB0aGlzLmlu
cHV0cy5hdHRhY2hlZFsibW91c2UiXTsKKyAgICAgICAgICAgIGlmIChtb3VzZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBtb3VzZS5hbmd1bGFyU2Vuc2liaWxpdHk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFNldHMgdGhlIGlucHV0IHNlbnNpYmlsaXR5IGZvciBhIG1vdXNlIGlucHV0LiAoZGVmYXVs
dCBpcyAyMDAwLjApCisgICAgICAgICAqIEhpZ2hlciB2YWx1ZXMgcmVkdWNlIHNlbnNpdGl2aXR5
LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIHZhciBtb3VzZSA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJtb3VzZSJdOworICAgICAgICAg
ICAgaWYgKG1vdXNlKSB7CisgICAgICAgICAgICAgICAgbW91c2UuYW5ndWxhclNlbnNpYmlsaXR5
ID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShGcmVlQ2FtZXJhLnByb3RvdHlwZSwgImtleXNVcCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgb3IgU2V0IHRoZSBsaXN0IG9mIGtleWJvYXJkIGtleXMgdXNl
ZCB0byBjb250cm9sIHRoZSBmb3J3YXJkIG1vdmUgb2YgdGhlIGNhbWVyYS4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0g
dGhpcy5pbnB1dHMuYXR0YWNoZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9h
cmQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga2V5Ym9hcmQua2V5c1VwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5pbnB1dHMu
YXR0YWNoZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsKKyAgICAg
ICAgICAgICAgICBrZXlib2FyZC5rZXlzVXAgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZyZWVDYW1lcmEucHJvdG90
eXBlLCAia2V5c0Rvd24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIFNldCB0
aGUgbGlzdCBvZiBrZXlib2FyZCBrZXlzIHVzZWQgdG8gY29udHJvbCB0aGUgYmFja3dhcmQgbW92
ZSBvZiB0aGUgY2FtZXJhLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsia2V5Ym9h
cmQiXTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZCkgeworICAgICAgICAgICAgICAgIHJldHVy
biBrZXlib2FyZC5rZXlzRG93bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBb
XTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIHZhciBrZXlib2FyZCA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAg
ICAgICAgICAgaWYgKGtleWJvYXJkKSB7CisgICAgICAgICAgICAgICAga2V5Ym9hcmQua2V5c0Rv
d24gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEZyZWVDYW1lcmEucHJvdG90eXBlLCAia2V5c0xlZnQiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIFNldCB0aGUgbGlzdCBvZiBrZXlib2FyZCBrZXlz
IHVzZWQgdG8gY29udHJvbCB0aGUgbGVmdCBzdHJhZmUgbW92ZSBvZiB0aGUgY2FtZXJhLgorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIga2V5
Ym9hcmQgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlm
IChrZXlib2FyZCkgeworICAgICAgICAgICAgICAgIHJldHVybiBrZXlib2FyZC5rZXlzTGVmdDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfSwKKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRo
aXMuaW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJk
KSB7CisgICAgICAgICAgICAgICAga2V5Ym9hcmQua2V5c0xlZnQgPSB2YWx1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZyZWVD
YW1lcmEucHJvdG90eXBlLCAia2V5c1JpZ2h0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyBvciBTZXQgdGhlIGxpc3Qgb2Yga2V5Ym9hcmQga2V5cyB1c2VkIHRvIGNvbnRyb2wgdGhl
IHJpZ2h0IHN0cmFmZSBtb3ZlIG9mIHRoZSBjYW1lcmEuCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRoaXMuaW5wdXRz
LmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJkKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGtleWJvYXJkLmtleXNSaWdodDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRoaXMuaW5wdXRzLmF0dGFjaGVk
WyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJkKSB7CisgICAgICAgICAgICAg
ICAga2V5Ym9hcmQua2V5c1JpZ2h0ID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIC8qKgorICAgICAqIEF0dGFjaGVkIGNvbnRyb2xzIHRvIHRoZSBjdXJyZW50
IGNhbWVyYS4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVtZW50IHRoZSBj
b250cm9scyBzaG91bGQgYmUgbGlzdGVuZWQgZnJvbQorICAgICAqIEBwYXJhbSBub1ByZXZlbnRE
ZWZhdWx0IERlZmluZXMgd2hldGhlciBldmVudCBjYXVnaHQgYnkgdGhlIGNvbnRyb2xzIHNob3Vs
ZCBjYWxsIHByZXZlbnRkZWZhdWx0KCkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2Vu
LVVTL2RvY3MvV2ViL0FQSS9FdmVudC9wcmV2ZW50RGVmYXVsdCkKKyAgICAgKi8KKyAgICBGcmVl
Q2FtZXJhLnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5vUHJl
dmVudERlZmF1bHQpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuYXR0YWNoRWxlbWVudChlbGVtZW50
LCBub1ByZXZlbnREZWZhdWx0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGFjaCB0aGUg
Y3VycmVudCBjb250cm9scyBmcm9tIHRoZSBjYW1lcmEuCisgICAgICogVGhlIGNhbWVyYSB3aWxs
IHN0b3AgcmVhY3RpbmcgdG8gaW5wdXRzLgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMg
dGhlIGVsZW1lbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdGhlIGlucHV0cyBmcm9tCisgICAgICovCisg
ICAgRnJlZUNhbWVyYS5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50
KSB7CisgICAgICAgIHRoaXMuaW5wdXRzLmRldGFjaEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAg
IHRoaXMuY2FtZXJhRGlyZWN0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0oMCwgMCwgMCk7CisgICAgICAgIHRoaXMuY2Ft
ZXJhUm90YXRpb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlY3RvcjIiXSgwLCAwKTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShGcmVlQ2FtZXJhLnByb3RvdHlwZSwgImNvbGxpc2lvbk1hc2siLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmUgYSBjb2xsaXNpb24gbWFzayB0byBsaW1pdCB0aGUgbGlzdCBv
ZiBvYmplY3QgdGhlIGNhbWVyYSBjYW4gY29sbGlkZSB3aXRoCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb2xsaXNpb25N
YXNrOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXNrKSB7CisgICAgICAg
ICAgICB0aGlzLl9jb2xsaXNpb25NYXNrID0gIWlzTmFOKG1hc2spID8gbWFzayA6IC0xOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEZyZWVDYW1lcmEucHJvdG90
eXBlLl9jb2xsaWRlV2l0aFdvcmxkID0gZnVuY3Rpb24gKGRpc3BsYWNlbWVudCkgeworICAgICAg
ICB2YXIgZ2xvYmFsUG9zaXRpb247CisgICAgICAgIGlmICh0aGlzLnBhcmVudCkgeworICAgICAg
ICAgICAgZ2xvYmFsUG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzKHRoaXMucG9zaXRp
b24sIHRoaXMucGFyZW50LmdldFdvcmxkTWF0cml4KCkpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgZ2xvYmFsUG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uOworICAgICAg
ICB9CisgICAgICAgIGdsb2JhbFBvc2l0aW9uLnN1YnRyYWN0RnJvbUZsb2F0c1RvUmVmKDAsIHRo
aXMuZWxsaXBzb2lkLnksIDAsIHRoaXMuX29sZFBvc2l0aW9uKTsKKyAgICAgICAgdGhpcy5fb2xk
UG9zaXRpb24uYWRkSW5QbGFjZSh0aGlzLmVsbGlwc29pZE9mZnNldCk7CisgICAgICAgIHZhciBj
b29yZGluYXRvciA9IHRoaXMuZ2V0U2NlbmUoKS5jb2xsaXNpb25Db29yZGluYXRvcjsKKyAgICAg
ICAgaWYgKCF0aGlzLl9jb2xsaWRlcikgeworICAgICAgICAgICAgdGhpcy5fY29sbGlkZXIgPSBj
b29yZGluYXRvci5jcmVhdGVDb2xsaWRlcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Nv
bGxpZGVyLl9yYWRpdXMgPSB0aGlzLmVsbGlwc29pZDsKKyAgICAgICAgdGhpcy5fY29sbGlkZXIu
Y29sbGlzaW9uTWFzayA9IHRoaXMuX2NvbGxpc2lvbk1hc2s7CisgICAgICAgIC8vbm8gbmVlZCBm
b3IgY2xvbmUsIGFzIGxvbmcgYXMgZ3Jhdml0eSBpcyBub3Qgb24uCisgICAgICAgIHZhciBhY3R1
YWxEaXNwbGFjZW1lbnQgPSBkaXNwbGFjZW1lbnQ7CisgICAgICAgIC8vYWRkIGdyYXZpdHkgdG8g
dGhlIGRpcmVjdGlvbiB0byBwcmV2ZW50IHRoZSBkdWFsLWNvbGxpc2lvbiBjaGVja2luZworICAg
ICAgICBpZiAodGhpcy5hcHBseUdyYXZpdHkpIHsKKyAgICAgICAgICAgIC8vdGhpcyBwcmV2ZW50
cyBtZW5kaW5nIHdpdGggY2FtZXJhRGlyZWN0aW9uLCBhIGdsb2JhbCB2YXJpYWJsZSBvZiB0aGUg
ZnJlZSBjYW1lcmEgY2xhc3MuCisgICAgICAgICAgICBhY3R1YWxEaXNwbGFjZW1lbnQgPSBkaXNw
bGFjZW1lbnQuYWRkKHRoaXMuZ2V0U2NlbmUoKS5ncmF2aXR5KTsKKyAgICAgICAgfQorICAgICAg
ICBjb29yZGluYXRvci5nZXROZXdQb3NpdGlvbih0aGlzLl9vbGRQb3NpdGlvbiwgYWN0dWFsRGlz
cGxhY2VtZW50LCB0aGlzLl9jb2xsaWRlciwgMywgbnVsbCwgdGhpcy5fb25Db2xsaXNpb25Qb3Np
dGlvbkNoYW5nZSwgdGhpcy51bmlxdWVJZCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIEZyZWVDYW1lcmEucHJvdG90eXBlLl9jaGVja0lucHV0cyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9sb2NhbERpcmVjdGlvbikgeworICAgICAgICAgICAgdGhpcy5fbG9j
YWxEaXJlY3Rpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybWVkRGly
ZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5pbnB1dHMuY2hlY2tJ
bnB1dHMoKTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fY2hlY2tJbnB1dHMuY2FsbCh0aGlz
KTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRnJlZUNhbWVyYS5wcm90b3R5cGUu
X2RlY2lkZUlmTmVlZHNUb01vdmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9uZWVkTW92ZUZvckdyYXZpdHkgfHwgTWF0aC5hYnModGhpcy5jYW1lcmFEaXJlY3Rpb24ueCkg
PiAwIHx8IE1hdGguYWJzKHRoaXMuY2FtZXJhRGlyZWN0aW9uLnkpID4gMCB8fCBNYXRoLmFicyh0
aGlzLmNhbWVyYURpcmVjdGlvbi56KSA+IDA7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIEZyZWVDYW1lcmEucHJvdG90eXBlLl91cGRhdGVQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMuY2hlY2tDb2xsaXNpb25zICYmIHRoaXMuZ2V0U2NlbmUoKS5jb2xs
aXNpb25zRW5hYmxlZCkgeworICAgICAgICAgICAgdGhpcy5fY29sbGlkZVdpdGhXb3JsZCh0aGlz
LmNhbWVyYURpcmVjdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLl91cGRhdGVQb3NpdGlvbi5jYWxsKHRoaXMpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXN0cm95IHRoZSBjYW1lcmEgYW5kIHJlbGVhc2Ug
dGhlIGN1cnJlbnQgcmVzb3VyY2VzIGhvbGQgYnkgaXQuCisgICAgICovCisgICAgRnJlZUNhbWVy
YS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMu
Y2xlYXIoKTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IG9iamVjdCBjbGFzcyBuYW1l
LgorICAgICAqIEByZXR1cm4gdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJh
LnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAi
RnJlZUNhbWVyYSI7CisgICAgfTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1ZlY3RvcjMiXSkoKQorICAgIF0s
IEZyZWVDYW1lcmEucHJvdG90eXBlLCAiZWxsaXBzb2lkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emVBc1ZlY3RvcjMiXSkoKQorICAgIF0sIEZyZWVDYW1lcmEucHJvdG90eXBlLCAiZWxsaXBzb2lk
T2Zmc2V0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZyZWVDYW1lcmEu
cHJvdG90eXBlLCAiY2hlY2tDb2xsaXNpb25zIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIEZyZWVDYW1lcmEucHJvdG90eXBlLCAiYXBwbHlHcmF2aXR5Iiwgdm9pZCAwKTsK
KyAgICByZXR1cm4gRnJlZUNhbWVyYTsKK30oX3RhcmdldENhbWVyYV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJUYXJnZXRDYW1lcmEiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL0NhbWVyYXMvZnJlZUNhbWVyYUlucHV0c01hbmFnZXIudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvZnJl
ZUNhbWVyYUlucHV0c01hbmFnZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRnJlZUNhbWVyYUlu
cHV0c01hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNh
bWVyYUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZyZWVDYW1lcmFJbnB1dHNN
YW5hZ2VyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25v
ZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jYW1lcmFJbnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMv
Y2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1l
cmFzX0lucHV0c19mcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NhbWVyYXMvSW5wdXRzL2Zy
ZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCAqLyAiLi9DYW1lcmFzL0lucHV0cy9mcmVlQ2FtZXJh
S2V5Ym9hcmRNb3ZlSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJh
c19JbnB1dHNfZnJlZUNhbWVyYU1vdXNlSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFN
b3VzZUlucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFNb3VzZUlucHV0LnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfSW5wdXRzX2ZyZWVDYW1lcmFUb3Vj
aElucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9DYW1lcmFzL0lucHV0cy9mcmVlQ2FtZXJhVG91Y2hJbnB1dCAqLyAiLi9DYW1lcmFz
L0lucHV0cy9mcmVlQ2FtZXJhVG91Y2hJbnB1dC50cyIpOworCisKKworCisKKy8qKgorICogRGVm
YXVsdCBJbnB1dHMgbWFuYWdlciBmb3IgdGhlIEZyZWVDYW1lcmEuCisgKiBJdCBncm91cHMgYWxs
IHRoZSBkZWZhdWx0IHN1cHBvcnRlZCBpbnB1dHMgZm9yIGVhc2Ugb2YgdXNlLgorICogQHNlZSBo
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2N1c3RvbWl6aW5nX2NhbWVyYV9pbnB1dHMK
KyAqLwordmFyIEZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZXh0ZW5kcyJdKEZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIEluc3RhbnRpYXRlcyBhIG5ldyBGcmVlQ2FtZXJhSW5wdXRzTWFuYWdlci4KKyAgICAgKiBA
cGFyYW0gY2FtZXJhIERlZmluZXMgdGhlIGNhbWVyYSB0aGUgaW5wdXRzIGJlbG9uZyB0bworICAg
ICAqLworICAgIGZ1bmN0aW9uIEZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyKGNhbWVyYSkgeworICAg
ICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBjYW1lcmEpIHx8IHRoaXM7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5f
bW91c2VJbnB1dCA9IG51bGw7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoq
CisgICAgICogQWRkIGtleWJvYXJkIGlucHV0IHN1cHBvcnQgdG8gdGhlIGlucHV0IG1hbmFnZXIu
CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgaW5wdXQgbWFuYWdlcgorICAgICAqLworICAg
IEZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyLnByb3RvdHlwZS5hZGRLZXlib2FyZCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5hZGQobmV3IF9DYW1lcmFzX0lucHV0c19mcmVlQ2FtZXJhS2V5
Ym9hcmRNb3ZlSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRnJlZUNhbWVyYUtl
eWJvYXJkTW92ZUlucHV0Il0oKSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
LyoqCisgICAgICogQWRkIG1vdXNlIGlucHV0IHN1cHBvcnQgdG8gdGhlIGlucHV0IG1hbmFnZXIu
CisgICAgICogQHBhcmFtIHRvdWNoRW5hYmxlZCBpZiB0aGUgRnJlZUNhbWVyYU1vdXNlSW5wdXQg
c2hvdWxkIHN1cHBvcnQgdG91Y2ggKGRlZmF1bHQ6IHRydWUpCisgICAgICogQHJldHVybnMgdGhl
IGN1cnJlbnQgaW5wdXQgbWFuYWdlcgorICAgICAqLworICAgIEZyZWVDYW1lcmFJbnB1dHNNYW5h
Z2VyLnByb3RvdHlwZS5hZGRNb3VzZSA9IGZ1bmN0aW9uICh0b3VjaEVuYWJsZWQpIHsKKyAgICAg
ICAgaWYgKHRvdWNoRW5hYmxlZCA9PT0gdm9pZCAwKSB7IHRvdWNoRW5hYmxlZCA9IHRydWU7IH0K
KyAgICAgICAgaWYgKCF0aGlzLl9tb3VzZUlucHV0KSB7CisgICAgICAgICAgICB0aGlzLl9tb3Vz
ZUlucHV0ID0gbmV3IF9DYW1lcmFzX0lucHV0c19mcmVlQ2FtZXJhTW91c2VJbnB1dF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJGcmVlQ2FtZXJhTW91c2VJbnB1dCJdKHRvdWNoRW5hYmxl
ZCk7CisgICAgICAgICAgICB0aGlzLmFkZCh0aGlzLl9tb3VzZUlucHV0KTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGhl
IG1vdXNlIGlucHV0IHN1cHBvcnQgZnJvbSB0aGUgbWFuYWdlcgorICAgICAqIEByZXR1cm5zIHRo
ZSBjdXJyZW50IGlucHV0IG1hbmFnZXIKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhSW5wdXRzTWFu
YWdlci5wcm90b3R5cGUucmVtb3ZlTW91c2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLl9tb3VzZUlucHV0KSB7CisgICAgICAgICAgICB0aGlzLnJlbW92ZSh0aGlzLl9tb3VzZUlu
cHV0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFkZCB0b3VjaCBpbnB1dCBzdXBwb3J0IHRvIHRoZSBpbnB1dCBtYW5hZ2VyLgorICAg
ICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IGlucHV0IG1hbmFnZXIKKyAgICAgKi8KKyAgICBGcmVl
Q2FtZXJhSW5wdXRzTWFuYWdlci5wcm90b3R5cGUuYWRkVG91Y2ggPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuYWRkKG5ldyBfQ2FtZXJhc19JbnB1dHNfZnJlZUNhbWVyYVRvdWNoSW5wdXRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRnJlZUNhbWVyYVRvdWNoSW5wdXQiXSgpKTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxs
IGF0dGFjaGVkIGlucHV0IG1ldGhvZHMgZnJvbSBhIGNhbWVyYQorICAgICAqLworICAgIEZyZWVD
YW1lcmFJbnB1dHNNYW5hZ2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhci5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl9tb3Vz
ZUlucHV0ID0gbnVsbDsKKyAgICB9OworICAgIHJldHVybiBGcmVlQ2FtZXJhSW5wdXRzTWFuYWdl
cjsKK30oX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
Q2FtZXJhSW5wdXRzTWFuYWdlciJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2Ft
ZXJhcy9nYW1lcGFkQ2FtZXJhLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvZ2FtZXBhZENhbWVyYS50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEdh
bWVwYWRDYW1lcmEgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2FtZXBh
ZENhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gR2FtZXBhZENhbWVyYTsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNs
aWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3VuaXZlcnNhbENhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91
bml2ZXJzYWxDYW1lcmEgKi8gIi4vQ2FtZXJhcy91bml2ZXJzYWxDYW1lcmEudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworCisKKworCitfbm9kZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJOb2RlIl0uQWRkTm9kZUNvbnN0cnVjdG9yKCJHYW1lcGFkQ2FtZXJh
IiwgZnVuY3Rpb24gKG5hbWUsIHNjZW5lKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0
dXJuIG5ldyBHYW1lcGFkQ2FtZXJhKG5hbWUsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpLCBzY2VuZSk7IH07Cit9KTsKKy8q
KgorICogVGhpcyByZXByZXNlbnRzIGEgRlBTIHR5cGUgb2YgY2FtZXJhLiBUaGlzIGlzIG9ubHkg
aGVyZSBmb3IgYmFjayBjb21wYXQgcHVycG9zZS4KKyAqIFBsZWFzZSB1c2UgdGhlIFVuaXZlcnNh
bENhbWVyYSBpbnN0ZWFkIGFzIGJvdGggYXJlIGlkZW50aWNhbC4KKyAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL2NhbWVyYXMjdW5pdmVyc2FsLWNhbWVyYQorICovCit2
YXIgR2FtZXBhZENhbWVyYSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShHYW1lcGFk
Q2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBHYW1l
cGFkIENhbWVyYQorICAgICAqIFRoaXMgcmVwcmVzZW50cyBhIEZQUyB0eXBlIG9mIGNhbWVyYS4g
VGhpcyBpcyBvbmx5IGhlcmUgZm9yIGJhY2sgY29tcGF0IHB1cnBvc2UuCisgICAgICogUGxlYXNl
IHVzZSB0aGUgVW5pdmVyc2FsQ2FtZXJhIGluc3RlYWQgYXMgYm90aCBhcmUgaWRlbnRpY2FsLgor
ICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL2NhbWVyYXMjdW5p
dmVyc2FsLWNhbWVyYQorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUg
Y2FtZXJhIGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBEZWZpbmUgdGhlIHN0
YXJ0IHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgaW4gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIHNj
ZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIGNhbWVyYSBiZWxvbmdzIHRvCisgICAgICovCisgICAg
ZnVuY3Rpb24gR2FtZXBhZENhbWVyYShuYW1lLCBwb3NpdGlvbiwgc2NlbmUpIHsKKyAgICAgICAg
cmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHBvc2l0aW9uLCBzY2VuZSkgfHwgdGhpczsK
KyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBvYmplY3QgY2xhc3MgbmFt
ZS4KKyAgICAgKiBAcmV0dXJuIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgR2FtZXBhZENh
bWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gIkdhbWVwYWRDYW1lcmEiOworICAgIH07CisgICAgcmV0dXJuIEdhbWVwYWRDYW1lcmE7Cit9
KF91bml2ZXJzYWxDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVW5pdmVyc2Fs
Q2FtZXJhIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL2luZGV4LnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL2lu
ZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IENhbWVyYUlucHV0VHlwZXMsIENhbWVyYUlucHV0c01hbmFnZXIsIENhbWVyYSwg
VGFyZ2V0Q2FtZXJhLCBGcmVlQ2FtZXJhLCBGcmVlQ2FtZXJhSW5wdXRzTWFuYWdlciwgVG91Y2hD
YW1lcmEsIEFyY1JvdGF0ZUNhbWVyYSwgQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlciwgRGV2
aWNlT3JpZW50YXRpb25DYW1lcmEsIEZseUNhbWVyYSwgRmx5Q2FtZXJhSW5wdXRzTWFuYWdlciwg
Rm9sbG93Q2FtZXJhLCBBcmNGb2xsb3dDYW1lcmEsIEZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIs
IEdhbWVwYWRDYW1lcmEsIFVuaXZlcnNhbENhbWVyYSwgVmlydHVhbEpveXN0aWNrc0NhbWVyYSwg
QXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0LCBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dCwgQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LCBBcmNSb3RhdGVDYW1lcmFQb2lu
dGVyc0lucHV0LCBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5wdXQsIEZseUNh
bWVyYUtleWJvYXJkSW5wdXQsIEZseUNhbWVyYU1vdXNlSW5wdXQsIEZvbGxvd0NhbWVyYUtleWJv
YXJkTW92ZUlucHV0LCBGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQsIEZvbGxvd0NhbWVyYVBv
aW50ZXJzSW5wdXQsIEZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0LCBGcmVlQ2FtZXJh
R2FtZXBhZElucHV0LCBGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQsIEZyZWVDYW1lcmFNb3Vz
ZUlucHV0LCBGcmVlQ2FtZXJhVG91Y2hJbnB1dCwgRnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lu
cHV0LCBBbmFnbHlwaEFyY1JvdGF0ZUNhbWVyYSwgQW5hZ2x5cGhGcmVlQ2FtZXJhLCBBbmFnbHlw
aEdhbWVwYWRDYW1lcmEsIEFuYWdseXBoVW5pdmVyc2FsQ2FtZXJhLCBTdGVyZW9zY29waWNBcmNS
b3RhdGVDYW1lcmEsIFN0ZXJlb3Njb3BpY0ZyZWVDYW1lcmEsIFN0ZXJlb3Njb3BpY0dhbWVwYWRD
YW1lcmEsIFN0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYSwgVlJDYW1lcmFNZXRyaWNzLCBWUkRl
dmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhLCBWUkRldmljZU9yaWVudGF0aW9uRnJlZUNh
bWVyYSwgVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEsIE9uQWZ0ZXJFbnRlcmluZ1ZS
T2JzZXJ2YWJsZUV2ZW50LCBWUkV4cGVyaWVuY2VIZWxwZXIsIFdlYlZSRnJlZUNhbWVyYSwgV2Vi
WFJDYW1lcmEsIFdlYlhSRW50ZXJFeGl0VUlCdXR0b24sIFdlYlhSRW50ZXJFeGl0VUlPcHRpb25z
LCBXZWJYUkVudGVyRXhpdFVJLCBXZWJYUlN0YXRlLCBXZWJYUkV4cGVyaWVuY2VIZWxwZXIsIFdl
YlhSSW5wdXQsIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24sIFdlYlhSQ29udHJvbGxlclBv
aW50ZXJTZWxlY3Rpb24sIFdlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyLCBXZWJYUkNvbnRyb2xs
ZXIsIFdlYlhSTWFuYWdlZE91dHB1dENhbnZhcywgV2ViWFJTZXNzaW9uTWFuYWdlciAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0lucHV0c19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9JbnB1
dHMvaW5kZXggKi8gIi4vQ2FtZXJhcy9JbnB1dHMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSW5w
dXRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFyY1JvdGF0ZUNhbWVyYUdh
bWVwYWRJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmNSb3RhdGVDYW1lcmFLZXli
b2FyZE1vdmVJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0lucHV0c19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0Il07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJjUm90YXRl
Q2FtZXJhUG9pbnRlcnNJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmNSb3RhdGVD
YW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1
dHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJjUm90YXRlQ2FtZXJhVlJE
ZXZpY2VPcmllbnRhdGlvbklucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZseUNhbWVy
YUtleWJvYXJkSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJGbHlDYW1lcmFNb3VzZUlucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfSW5wdXRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZseUNhbWVyYU1v
dXNlSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRm9sbG93Q2FtZXJhS2V5Ym9hcmRN
b3ZlSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfSW5wdXRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZv
bGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGb2xs
b3dDYW1lcmFQb2ludGVyc0lucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSW5wdXRzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYURldmljZU9yaWVudGF0aW9uSW5w
dXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRnJlZUNhbWVyYURldmljZU9yaWVudGF0aW9uSW5wdXQiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYUdhbWVwYWRJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0lucHV0c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJGcmVlQ2FtZXJh
R2FtZXBhZElucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmFLZXlib2Fy
ZE1vdmVJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0lucHV0c19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYU1vdXNlSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRnJlZUNhbWVy
YU1vdXNlSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYVRvdWNoSW5w
dXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRnJlZUNhbWVyYVRvdWNoSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiRnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
SW5wdXRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZyZWVDYW1lcmFWaXJ0
dWFsSm95c3RpY2tJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jYW1l
cmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9jYW1lcmFJ
bnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNhbWVyYUlucHV0VHlwZXMiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9jYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkNhbWVyYUlucHV0VHlwZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Q2FtZXJhSW5wdXRzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NhbWVyYUlucHV0c01h
bmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ2FtZXJhSW5wdXRzTWFuYWdlciJd
OyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2FtZXJhICovICIuL0Nh
bWVyYXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNhbWVyYSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmEiXTsg
fSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGFyZ2V0Q2FtZXJhX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RhcmdldENhbWVy
YSAqLyAiLi9DYW1lcmFzL3RhcmdldENhbWVyYS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUYXJn
ZXRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90YXJnZXRDYW1lcmFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siVGFyZ2V0Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2ZyZWVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYSAqLyAiLi9DYW1lcmFzL2ZyZWVDYW1lcmEu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2ZyZWVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRnJlZUNhbWVyYSJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9mcmVlQ2FtZXJhSW5wdXRzTWFuYWdlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9m
cmVlQ2FtZXJhSW5wdXRzTWFuYWdlciAqLyAiLi9DYW1lcmFzL2ZyZWVDYW1lcmFJbnB1dHNNYW5h
Z2VyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfZnJlZUNhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siRnJlZUNhbWVyYUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfdG91Y2hDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdG91Y2hDYW1lcmEgKi8gIi4vQ2FtZXJhcy90
b3VjaENhbWVyYS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUb3VjaENhbWVyYSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX3RvdWNoQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRv
dWNoQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FyY1JvdGF0ZUNh
bWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9hcmNSb3RhdGVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1lcmEudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
YXJjUm90YXRlQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkFyY1JvdGF0ZUNh
bWVyYSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcmNSb3RhdGVDYW1lcmFJ
bnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2FyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9h
cmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1Jv
dGF0ZUNhbWVyYUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hcmNSb3RhdGVD
YW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkFyY1JvdGF0
ZUNhbWVyYUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
ZGV2aWNlT3JpZW50YXRpb25DYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vZGV2aWNlT3JpZW50YXRpb25DYW1lcmEgKi8gIi4vQ2Ft
ZXJhcy9kZXZpY2VPcmllbnRhdGlvbkNhbWVyYS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXZp
Y2VPcmllbnRhdGlvbkNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RldmljZU9yaWVudGF0
aW9uQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkRldmljZU9yaWVudGF0aW9u
Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZseUNhbWVyYV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZmx5
Q2FtZXJhICovICIuL0NhbWVyYXMvZmx5Q2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZs
eUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZseUNhbWVyYV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTBfX1siRmx5Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2ZseUNhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ZseUNhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4v
Q2FtZXJhcy9mbHlDYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZs
eUNhbWVyYUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mbHlDYW1lcmFJbnB1
dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJGbHlDYW1lcmFJbnB1dHNN
YW5hZ2VyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZvbGxvd0NhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
Zm9sbG93Q2FtZXJhICovICIuL0NhbWVyYXMvZm9sbG93Q2FtZXJhLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkZvbGxvd0NhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZvbGxvd0NhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siRm9sbG93Q2FtZXJhIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkFyY0ZvbGxvd0NhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZvbGxv
d0NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siQXJjRm9sbG93Q2FtZXJhIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZvbGxvd0NhbWVyYUlucHV0c01hbmFn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL2ZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9mb2xsb3dDYW1lcmFJ
bnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZvbGxvd0NhbWVyYUlucHV0c01h
bmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJGb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2dhbWVwYWRDYW1lcmFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2dhbWVwYWRD
YW1lcmEgKi8gIi4vQ2FtZXJhcy9nYW1lcGFkQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9nYW1lcGFkQ2FtZXJhX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJHYW1lcGFkQ2FtZXJhIl07IH0pOworCisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1N0ZXJlb3Njb3BpY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU3RlcmVvc2NvcGljL2luZGV4
ICovICIuL0NhbWVyYXMvU3RlcmVvc2NvcGljL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkFuYWdseXBoQXJjUm90YXRlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfU3RlcmVvc2Nv
cGljX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJBbmFnbHlwaEFyY1JvdGF0
ZUNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmFnbHlwaEZyZWVDYW1lcmEiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9TdGVyZW9zY29waWNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE1X19bIkFuYWdseXBoRnJlZUNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJBbmFnbHlwaEdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9TdGVyZW9zY29w
aWNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIkFuYWdseXBoR2FtZXBhZENh
bWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmFnbHlwaFVuaXZlcnNhbENhbWVyYSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1N0ZXJlb3Njb3BpY19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTVfX1siQW5hZ2x5cGhVbml2ZXJzYWxDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU3RlcmVvc2NvcGljQXJjUm90YXRlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfU3RlcmVvc2NvcGljX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJTdGVy
ZW9zY29waWNBcmNSb3RhdGVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RlcmVv
c2NvcGljRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1N0ZXJlb3Njb3BpY19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siU3RlcmVvc2NvcGljRnJlZUNhbWVyYSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfU3RlcmVvc2NvcGljX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNV9fWyJTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlN0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X1N0ZXJlb3Njb3BpY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siU3RlcmVv
c2NvcGljVW5pdmVyc2FsQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3VuaXZlcnNhbENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vdW5pdmVyc2FsQ2FtZXJhICovICIuL0NhbWVyYXMvdW5pdmVyc2Fs
Q2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlVuaXZlcnNhbENhbWVyYSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX3VuaXZlcnNhbENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZf
X1siVW5pdmVyc2FsQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Zp
cnR1YWxKb3lzdGlja3NDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZpcnR1YWxKb3lzdGlja3NDYW1lcmEgKi8gIi4vQ2FtZXJh
cy92aXJ0dWFsSm95c3RpY2tzQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpcnR1YWxK
b3lzdGlja3NDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92aXJ0dWFsSm95c3RpY2tzQ2Ft
ZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJWaXJ0dWFsSm95c3RpY2tzQ2FtZXJh
Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1ZSX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9WUi9pbmRleCAq
LyAiLi9DYW1lcmFzL1ZSL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSQ2FtZXJhTWV0
cmljcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1ZSX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xOF9fWyJWUkNhbWVyYU1ldHJpY3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVlJE
ZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1ZS
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJWUkRldmljZU9yaWVudGF0aW9u
QXJjUm90YXRlQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGV2aWNlT3JpZW50
YXRpb25GcmVlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVlJfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE4X19bIlZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfVlJfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4
X19bIlZSRGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIk9uQWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJsZUV2ZW50IiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfVlJfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIk9uQWZ0ZXJFbnRl
cmluZ1ZST2JzZXJ2YWJsZUV2ZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRXhwZXJp
ZW5jZUhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1ZSX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOF9fWyJWUkV4cGVyaWVuY2VIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiV2ViVlJGcmVlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVlJfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIldlYlZSRnJlZUNhbWVyYSJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9YUl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vWFIvaW5kZXggKi8gIi4vQ2FtZXJhcy9Y
Ui9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkNhbWVyYSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX1hSX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJXZWJYUkNh
bWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkVudGVyRXhpdFVJQnV0dG9uIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfWFJfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5
X19bIldlYlhSRW50ZXJFeGl0VUlCdXR0b24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2Vi
WFJFbnRlckV4aXRVSU9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9YUl9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siV2ViWFJFbnRlckV4aXRVSU9wdGlvbnMiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJFbnRlckV4aXRVSSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX1hSX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJXZWJYUkVudGVyRXhp
dFVJIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSU3RhdGUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9YUl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siV2ViWFJTdGF0
ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkV4cGVyaWVuY2VIZWxwZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9YUl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1si
V2ViWFJFeHBlcmllbmNlSGVscGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSSW5w
dXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9YUl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTlfX1siV2ViWFJJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkNvbnRy
b2xsZXJUZWxlcG9ydGF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfWFJfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE5X19bIldlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24iXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJDb250cm9sbGVyUG9pbnRlclNlbGVjdGlvbiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1hSX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
OV9fWyJXZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIldlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
WFJfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIldlYlhSQ29udHJvbGxlck1v
ZGVsTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSQ29udHJvbGxlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX1hSX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9f
WyJXZWJYUkNvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJNYW5hZ2Vk
T3V0cHV0Q2FudmFzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfWFJfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE5X19bIldlYlhSTWFuYWdlZE91dHB1dENhbnZhcyJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJXZWJYUlNlc3Npb25NYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
WFJfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIldlYlhSU2Vzc2lvbk1hbmFn
ZXIiXTsgfSk7CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvdGFyZ2V0Q2FtZXJhLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy90YXJnZXRD
YW1lcmEudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFRhcmdldENhbWVyYSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJUYXJnZXRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRhcmdldENh
bWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2Rl
X21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2FtZXJhICovICIuL0NhbWVy
YXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5j
b25zdGFudHMgKi8gIi4vTWF0aHMvbWF0aC5jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmF4aXMgKi8gIi4vTWF0aHMv
bWF0aC5heGlzLnRzIik7CisKKworCisKKworCisvKioKKyAqIEEgdGFyZ2V0IGNhbWVyYSB0YWtl
cyBhIG1lc2ggb3IgcG9zaXRpb24gYXMgYSB0YXJnZXQgYW5kIGNvbnRpbnVlcyB0byBsb29rIGF0
IGl0IHdoaWxlIGl0IG1vdmVzLgorICogVGhpcyBpcyB0aGUgYmFzZSBvZiB0aGUgZm9sbG93LCBh
cmMgcm90YXRlIGNhbWVyYXMgYW5kIEZyZWUgY2FtZXJhCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzCisgKi8KK3ZhciBUYXJnZXRDYW1lcmEgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVGFyZ2V0Q2FtZXJhLCBfc3VwZXIpOworICAgIC8q
KgorICAgICAqIEluc3RhbnRpYXRlcyBhIHRhcmdldCBjYW1lcmEgdGhhdCB0YWtlcyBhIG1lc2gg
b3IgcG9zaXRpb24gYXMgYSB0YXJnZXQgYW5kIGNvbnRpbnVlcyB0byBsb29rIGF0IGl0IHdoaWxl
IGl0IG1vdmVzLgorICAgICAqIFRoaXMgaXMgdGhlIGJhc2Ugb2YgdGhlIGZvbGxvdywgYXJjIHJv
dGF0ZSBjYW1lcmFzIGFuZCBGcmVlIGNhbWVyYQorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2ZlYXR1cmVzL2NhbWVyYXMKKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmVzIHRo
ZSBuYW1lIG9mIHRoZSBjYW1lcmEgaW4gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIHBvc2l0aW9u
IERlZmluZXMgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgaW4gdGhlIHNjZW5lCisg
ICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRoZSBjYW1lcmEgYmVsb25ncyB0
bworICAgICAqIEBwYXJhbSBzZXRBY3RpdmVPblNjZW5lSWZOb25lQWN0aXZlIERlZmluZXMgd2hl
dGVyIHRoZSBjYW1lcmEgc2hvdWxkIGJlIG1hcmtlZCBhcyBhY3RpdmUgaWYgbm90IG90aGVyIGFj
dGl2ZSBjYW1lcmFzIGhhdmUgYmVlbiBkZWZpbmVkCisgICAgICovCisgICAgZnVuY3Rpb24gVGFy
Z2V0Q2FtZXJhKG5hbWUsIHBvc2l0aW9uLCBzY2VuZSwgc2V0QWN0aXZlT25TY2VuZUlmTm9uZUFj
dGl2ZSkgeworICAgICAgICBpZiAoc2V0QWN0aXZlT25TY2VuZUlmTm9uZUFjdGl2ZSA9PT0gdm9p
ZCAwKSB7IHNldEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUgPSB0cnVlOyB9CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHBvc2l0aW9uLCBzY2VuZSwgc2V0QWN0
aXZlT25TY2VuZUlmTm9uZUFjdGl2ZSkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZSB0aGUgY3VycmVudCBkaXJlY3Rpb24gdGhlIGNhbWVyYSBpcyBtb3ZpbmcgdG8KKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLmNhbWVyYURpcmVjdGlvbiA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDAp
OworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBjdXJyZW50IHJvdGF0aW9uIHRo
ZSBjYW1lcmEgaXMgcm90YXRpbmcgdG8KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmNhbWVy
YVJvdGF0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZWN0b3IyIl0oMCwgMCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBXaGVuIHNl
dCwgdGhlIHVwIHZlY3RvciBvZiB0aGUgY2FtZXJhIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgcm90
YXRpb24gb2YgdGhlIGNhbWVyYQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudXBkYXRlVXBW
ZWN0b3JGcm9tUm90YXRpb24gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX3RtcFF1YXRlcm5pb24g
PSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1
YXRlcm5pb24iXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBjdXJyZW50
IHJvdGF0aW9uIG9mIHRoZSBjYW1lcmEKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnJvdGF0
aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJWZWN0b3IzIl0oMCwgMCwgMCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhl
IGN1cnJlbnQgc3BlZWQgb2YgdGhlIGNhbWVyYQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
c3BlZWQgPSAyLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBZGQgY2NvbnN0cmFpbnQgdG8g
dGhlIGNhbWVyYSB0byBwcmV2ZW50IGl0IHRvIG1vdmUgZnJlZWx5IGluIGFsbCBkaXJlY3Rpb25z
IGFuZAorICAgICAgICAgKiBhcm91bmQgYWxsIGF4aXMuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5ub1JvdGF0aW9uQ29uc3RyYWludCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAg
ICogRGVmaW5lIHRoZSBjdXJyZW50IHRhcmdldCBvZiB0aGUgY2FtZXJhIGFzIGFuIG9iamVjdCBv
ciBhIHBvc2l0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubG9ja2VkVGFyZ2V0ID0g
bnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2N1cnJlbnRUYXJn
ZXQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2lu
aXRpYWxGb2NhbERpc3RhbmNlID0gMTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAg
X3RoaXMuX3ZpZXdNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siTWF0cml4Il0uWmVybygpOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAg
ICAgICBfdGhpcy5fY2FtTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLlplcm8oKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICAgICAgX3RoaXMuX2NhbWVyYVRyYW5zZm9ybU1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAg
IC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9jYW1lcmFSb3RhdGlvbk1hdHJpeCA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5a
ZXJvKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9yZWZlcmVuY2VQ
b2ludCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVjdG9yMyJdKDAsIDAsIDEpOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBf
dGhpcy5fdHJhbnNmb3JtZWRSZWZlcmVuY2VQb2ludCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBfdGhp
cy5fZ2xvYmFsQ3VycmVudFRhcmdldCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBfdGhpcy5fZ2xvYmFs
Q3VycmVudFVwVmVjdG9yID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9kZWZhdWx0VXAgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJd
LlVwKCk7CisgICAgICAgIF90aGlzLl9jYWNoZWRSb3RhdGlvblogPSAwOworICAgICAgICBfdGhp
cy5fY2FjaGVkUXVhdGVybmlvblJvdGF0aW9uWiA9IDA7CisgICAgICAgIHJldHVybiBfdGhpczsK
KyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgcG9zaXRpb24gaW4gZnJvbnQgb2YgdGhl
IGNhbWVyYSBhdCBhIGdpdmVuIGRpc3RhbmNlLgorICAgICAqIEBwYXJhbSBkaXN0YW5jZSBUaGUg
ZGlzdGFuY2UgZnJvbSB0aGUgY2FtZXJhIHdlIHdhbnQgdGhlIHBvc2l0aW9uIHRvIGJlCisgICAg
ICogQHJldHVybnMgdGhlIHBvc2l0aW9uCisgICAgICovCisgICAgVGFyZ2V0Q2FtZXJhLnByb3Rv
dHlwZS5nZXRGcm9udFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3RhbmNlKSB7CisgICAgICAgIHRo
aXMuZ2V0V29ybGRNYXRyaXgoKTsKKyAgICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMuZ2V0VGFy
Z2V0KCkuc3VidHJhY3QodGhpcy5wb3NpdGlvbik7CisgICAgICAgIGRpcmVjdGlvbi5ub3JtYWxp
emUoKTsKKyAgICAgICAgZGlyZWN0aW9uLnNjYWxlSW5QbGFjZShkaXN0YW5jZSk7CisgICAgICAg
IHJldHVybiB0aGlzLmdsb2JhbFBvc2l0aW9uLmFkZChkaXJlY3Rpb24pOworICAgIH07CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBUYXJnZXRDYW1lcmEucHJvdG90eXBlLl9nZXRMb2NrZWRUYXJn
ZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmxvY2tlZFRhcmdl
dCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMubG9ja2VkVGFyZ2V0LmFic29sdXRlUG9zaXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMubG9j
a2VkVGFyZ2V0LmNvbXB1dGVXb3JsZE1hdHJpeCgpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzLmxvY2tlZFRhcmdldC5hYnNvbHV0ZVBvc2l0aW9uIHx8IHRoaXMubG9ja2VkVGFyZ2V0
OworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcmUgY3VycmVudCBjYW1lcmEgc3RhdGUgb2Yg
dGhlIGNhbWVyYSAoZm92LCBwb3NpdGlvbiwgcm90YXRpb24sIGV0Yy4uKQorICAgICAqIEByZXR1
cm5zIHRoZSBjYW1lcmEKKyAgICAgKi8KKyAgICBUYXJnZXRDYW1lcmEucHJvdG90eXBlLnN0b3Jl
U3RhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3N0b3JlZFBvc2l0aW9uID0gdGhp
cy5wb3NpdGlvbi5jbG9uZSgpOworICAgICAgICB0aGlzLl9zdG9yZWRSb3RhdGlvbiA9IHRoaXMu
cm90YXRpb24uY2xvbmUoKTsKKyAgICAgICAgaWYgKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7
CisgICAgICAgICAgICB0aGlzLl9zdG9yZWRSb3RhdGlvblF1YXRlcm5pb24gPSB0aGlzLnJvdGF0
aW9uUXVhdGVybmlvbi5jbG9uZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBfc3VwZXIu
cHJvdG90eXBlLnN0b3JlU3RhdGUuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJlc3RvcmVkIGNhbWVyYSBzdGF0ZS4gWW91IG11c3QgY2FsbCBzdG9yZVN0YXRlKCkgZmlyc3QK
KyAgICAgKiBAcmV0dXJucyB3aGV0aGVyIGl0IHdhcyBzdWNjZXNzZnVsIG9yIG5vdAorICAgICAq
IEBoaWRkZW4KKyAgICAgKi8KKyAgICBUYXJnZXRDYW1lcmEucHJvdG90eXBlLl9yZXN0b3JlU3Rh
dGVWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghX3N1cGVyLnByb3RvdHlwZS5f
cmVzdG9yZVN0YXRlVmFsdWVzLmNhbGwodGhpcykpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5fc3RvcmVkUG9zaXRp
b24uY2xvbmUoKTsKKyAgICAgICAgdGhpcy5yb3RhdGlvbiA9IHRoaXMuX3N0b3JlZFJvdGF0aW9u
LmNsb25lKCk7CisgICAgICAgIGlmICh0aGlzLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAg
ICAgICAgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24gPSB0aGlzLl9zdG9yZWRSb3RhdGlvblF1YXRl
cm5pb24uY2xvbmUoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmNhbWVyYURpcmVjdGlvbi5j
b3B5RnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5jYW1lcmFSb3RhdGlvbi5jb3B5
RnJvbUZsb2F0cygwLCAwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIFRhcmdldENhbWVyYS5wcm90b3R5cGUuX2luaXRDYWNoZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5faW5pdENhY2hlLmNhbGwodGhpcyk7
CisgICAgICAgIHRoaXMuX2NhY2hlLmxvY2tlZFRhcmdldCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKE51bWJlci5NQVhfVkFM
VUUsIE51bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUUpOworICAgICAgICB0aGlzLl9j
YWNoZS5yb3RhdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVmVjdG9yMyJdKE51bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUUs
IE51bWJlci5NQVhfVkFMVUUpOworICAgICAgICB0aGlzLl9jYWNoZS5yb3RhdGlvblF1YXRlcm5p
b24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlF1YXRlcm5pb24iXShOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIu
TUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICov
CisgICAgVGFyZ2V0Q2FtZXJhLnByb3RvdHlwZS5fdXBkYXRlQ2FjaGUgPSBmdW5jdGlvbiAoaWdu
b3JlUGFyZW50Q2xhc3MpIHsKKyAgICAgICAgaWYgKCFpZ25vcmVQYXJlbnRDbGFzcykgeworICAg
ICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fdXBkYXRlQ2FjaGUuY2FsbCh0aGlzKTsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgbG9ja2VkVGFyZ2V0UG9zaXRpb24gPSB0aGlzLl9nZXRMb2NrZWRU
YXJnZXRQb3NpdGlvbigpOworICAgICAgICBpZiAoIWxvY2tlZFRhcmdldFBvc2l0aW9uKSB7Cisg
ICAgICAgICAgICB0aGlzLl9jYWNoZS5sb2NrZWRUYXJnZXQgPSBudWxsOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9jYWNoZS5sb2NrZWRUYXJnZXQp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5sb2NrZWRUYXJnZXQgPSBsb2NrZWRUYXJn
ZXRQb3NpdGlvbi5jbG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUubG9ja2VkVGFyZ2V0LmNvcHlGcm9tKGxvY2tlZFRh
cmdldFBvc2l0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9j
YWNoZS5yb3RhdGlvbi5jb3B5RnJvbSh0aGlzLnJvdGF0aW9uKTsKKyAgICAgICAgaWYgKHRoaXMu
cm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICB0aGlzLl9jYWNoZS5yb3RhdGlvblF1
YXRlcm5pb24uY29weUZyb20odGhpcy5yb3RhdGlvblF1YXRlcm5pb24pOworICAgICAgICB9Cisg
ICAgfTsKKyAgICAvLyBTeW5jaHJvbml6ZWQKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFRhcmdl
dENhbWVyYS5wcm90b3R5cGUuX2lzU3luY2hyb25pemVkVmlld01hdHJpeCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKCFfc3VwZXIucHJvdG90eXBlLl9pc1N5bmNocm9uaXplZFZpZXdNYXRy
aXguY2FsbCh0aGlzKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHZhciBsb2NrZWRUYXJnZXRQb3NpdGlvbiA9IHRoaXMuX2dldExvY2tlZFRhcmdldFBv
c2l0aW9uKCk7CisgICAgICAgIHJldHVybiAodGhpcy5fY2FjaGUubG9ja2VkVGFyZ2V0ID8gdGhp
cy5fY2FjaGUubG9ja2VkVGFyZ2V0LmVxdWFscyhsb2NrZWRUYXJnZXRQb3NpdGlvbikgOiAhbG9j
a2VkVGFyZ2V0UG9zaXRpb24pCisgICAgICAgICAgICAmJiAodGhpcy5yb3RhdGlvblF1YXRlcm5p
b24gPyB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbi5lcXVhbHModGhpcy5fY2FjaGUucm90YXRpb25R
dWF0ZXJuaW9uKSA6IHRoaXMuX2NhY2hlLnJvdGF0aW9uLmVxdWFscyh0aGlzLnJvdGF0aW9uKSk7
CisgICAgfTsKKyAgICAvLyBNZXRob2RzCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUYXJnZXRD
YW1lcmEucHJvdG90eXBlLl9jb21wdXRlTG9jYWxDYW1lcmFTcGVlZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMuZ2V0RW5naW5lKCk7CisgICAgICAgIHJldHVybiB0
aGlzLnNwZWVkICogTWF0aC5zcXJ0KChlbmdpbmUuZ2V0RGVsdGFUaW1lKCkgLyAoZW5naW5lLmdl
dEZwcygpICogMTAwLjApKSk7CisgICAgfTsKKyAgICAvLyBUYXJnZXQKKyAgICAvKioKKyAgICAg
KiBEZWZpbmVzIHRoZSB0YXJnZXQgdGhlIGNhbWVyYSBzaG91bGQgbG9vayBhdC4KKyAgICAgKiBA
cGFyYW0gdGFyZ2V0IERlZmluZXMgdGhlIG5ldyB0YXJnZXQgYXMgYSBWZWN0b3Igb3IgYSBtZXNo
CisgICAgICovCisgICAgVGFyZ2V0Q2FtZXJhLnByb3RvdHlwZS5zZXRUYXJnZXQgPSBmdW5jdGlv
biAodGFyZ2V0KSB7CisgICAgICAgIHRoaXMudXBWZWN0b3Iubm9ybWFsaXplKCk7CisgICAgICAg
IHRoaXMuX2luaXRpYWxGb2NhbERpc3RhbmNlID0gdGFyZ2V0LnN1YnRyYWN0KHRoaXMucG9zaXRp
b24pLmxlbmd0aCgpOworICAgICAgICBpZiAodGhpcy5wb3NpdGlvbi56ID09PSB0YXJnZXQueikg
eworICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi56ICs9IF9NYXRoc19tYXRoX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFcHNpbG9uIl07CisgICAgICAgIH0KKyAgICAg
ICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJp
eCJdLkxvb2tBdExIVG9SZWYodGhpcy5wb3NpdGlvbiwgdGFyZ2V0LCB0aGlzLl9kZWZhdWx0VXAs
IHRoaXMuX2NhbU1hdHJpeCk7CisgICAgICAgIHRoaXMuX2NhbU1hdHJpeC5pbnZlcnQoKTsKKyAg
ICAgICAgdGhpcy5yb3RhdGlvbi54ID0gTWF0aC5hdGFuKHRoaXMuX2NhbU1hdHJpeC5tWzZdIC8g
dGhpcy5fY2FtTWF0cml4Lm1bMTBdKTsKKyAgICAgICAgdmFyIHZEaXIgPSB0YXJnZXQuc3VidHJh
Y3QodGhpcy5wb3NpdGlvbik7CisgICAgICAgIGlmICh2RGlyLnggPj0gMC4wKSB7CisgICAgICAg
ICAgICB0aGlzLnJvdGF0aW9uLnkgPSAoLU1hdGguYXRhbih2RGlyLnogLyB2RGlyLngpICsgTWF0
aC5QSSAvIDIuMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlz
LnJvdGF0aW9uLnkgPSAoLU1hdGguYXRhbih2RGlyLnogLyB2RGlyLngpIC0gTWF0aC5QSSAvIDIu
MCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5yb3RhdGlvbi56ID0gMDsKKyAgICAgICAgaWYg
KGlzTmFOKHRoaXMucm90YXRpb24ueCkpIHsKKyAgICAgICAgICAgIHRoaXMucm90YXRpb24ueCA9
IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzTmFOKHRoaXMucm90YXRpb24ueSkpIHsKKyAg
ICAgICAgICAgIHRoaXMucm90YXRpb24ueSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlz
TmFOKHRoaXMucm90YXRpb24ueikpIHsKKyAgICAgICAgICAgIHRoaXMucm90YXRpb24ueiA9IDA7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAg
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
UXVhdGVybmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYodGhpcy5yb3RhdGlvbi55LCB0
aGlzLnJvdGF0aW9uLngsIHRoaXMucm90YXRpb24ueiwgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24p
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQg
dGFyZ2V0IHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEuIFRoaXMgdmFsdWUgaXMgZXhwcmVzc2VkIGlu
IGxvY2FsIHNwYWNlLgorICAgICAqIEByZXR1cm5zIHRoZSB0YXJnZXQgcG9zaXRpb24KKyAgICAg
Ki8KKyAgICBUYXJnZXRDYW1lcmEucHJvdG90eXBlLmdldFRhcmdldCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUYXJnZXQ7CisgICAgfTsKKyAgICAvKiogQGhp
ZGRlbiAqLworICAgIFRhcmdldENhbWVyYS5wcm90b3R5cGUuX2RlY2lkZUlmTmVlZHNUb01vdmUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLmNhbWVyYURpcmVj
dGlvbi54KSA+IDAgfHwgTWF0aC5hYnModGhpcy5jYW1lcmFEaXJlY3Rpb24ueSkgPiAwIHx8IE1h
dGguYWJzKHRoaXMuY2FtZXJhRGlyZWN0aW9uLnopID4gMDsKKyAgICB9OworICAgIC8qKiBAaGlk
ZGVuICovCisgICAgVGFyZ2V0Q2FtZXJhLnByb3RvdHlwZS5fdXBkYXRlUG9zaXRpb24gPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnBhcmVudCkgeworICAgICAgICAgICAgdGhpcy5w
YXJlbnQuZ2V0V29ybGRNYXRyaXgoKS5pbnZlcnRUb1JlZihfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXSk7CisgICAg
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKHRoaXMuY2FtZXJhRGlyZWN0aW9uLCBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJd
Lk1hdHJpeFswXSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdKTsKKyAgICAgICAgICAgIHRoaXMucG9zaXRpb24u
YWRkSW5QbGFjZShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMucG9zaXRpb24uYWRkSW5QbGFjZSh0aGlzLmNhbWVyYURpcmVjdGlv
bik7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFRhcmdldENhbWVyYS5wcm90b3R5
cGUuX2NoZWNrSW5wdXRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbmVlZFRvTW92ZSA9
IHRoaXMuX2RlY2lkZUlmTmVlZHNUb01vdmUoKTsKKyAgICAgICAgdmFyIG5lZWRUb1JvdGF0ZSA9
IE1hdGguYWJzKHRoaXMuY2FtZXJhUm90YXRpb24ueCkgPiAwIHx8IE1hdGguYWJzKHRoaXMuY2Ft
ZXJhUm90YXRpb24ueSkgPiAwOworICAgICAgICAvLyBNb3ZlCisgICAgICAgIGlmIChuZWVkVG9N
b3ZlKSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVQb3NpdGlvbigpOworICAgICAgICB9Cisg
ICAgICAgIC8vIFJvdGF0ZQorICAgICAgICBpZiAobmVlZFRvUm90YXRlKSB7CisgICAgICAgICAg
ICB0aGlzLnJvdGF0aW9uLnggKz0gdGhpcy5jYW1lcmFSb3RhdGlvbi54OworICAgICAgICAgICAg
dGhpcy5yb3RhdGlvbi55ICs9IHRoaXMuY2FtZXJhUm90YXRpb24ueTsKKyAgICAgICAgICAgIC8v
cm90YXRlLCBpZiBxdWF0ZXJuaW9uIGlzIHNldCBhbmQgcm90YXRpb24gd2FzIHVzZWQKKyAgICAg
ICAgICAgIGlmICh0aGlzLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIHZh
ciBsZW4gPSB0aGlzLnJvdGF0aW9uLmxlbmd0aFNxdWFyZWQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAobGVuKSB7CisgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGxU
b1JlZih0aGlzLnJvdGF0aW9uLnksIHRoaXMucm90YXRpb24ueCwgdGhpcy5yb3RhdGlvbi56LCB0
aGlzLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCF0aGlzLm5vUm90YXRpb25Db25zdHJhaW50KSB7CisgICAgICAg
ICAgICAgICAgdmFyIGxpbWl0ID0gMS41NzA3OTY7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMu
cm90YXRpb24ueCA+IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucm90YXRpb24u
eCA9IGxpbWl0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5y
b3RhdGlvbi54IDwgLWxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucm90YXRpb24u
eCA9IC1saW1pdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgLy8gSW5lcnRpYQorICAgICAgICBpZiAobmVlZFRvTW92ZSkgeworICAgICAgICAg
ICAgaWYgKE1hdGguYWJzKHRoaXMuY2FtZXJhRGlyZWN0aW9uLngpIDwgdGhpcy5zcGVlZCAqIF9N
YXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFcHNpbG9u
Il0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYURpcmVjdGlvbi54ID0gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmNhbWVyYURpcmVjdGlvbi55
KSA8IHRoaXMuc3BlZWQgKiBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siRXBzaWxvbiJdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmFEaXJl
Y3Rpb24ueSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTWF0aC5hYnModGhp
cy5jYW1lcmFEaXJlY3Rpb24ueikgPCB0aGlzLnNwZWVkICogX01hdGhzX21hdGhfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVwc2lsb24iXSkgeworICAgICAgICAgICAg
ICAgIHRoaXMuY2FtZXJhRGlyZWN0aW9uLnogPSAwOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5jYW1lcmFEaXJlY3Rpb24uc2NhbGVJblBsYWNlKHRoaXMuaW5lcnRpYSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKG5lZWRUb1JvdGF0ZSkgeworICAgICAgICAgICAgaWYgKE1hdGgu
YWJzKHRoaXMuY2FtZXJhUm90YXRpb24ueCkgPCB0aGlzLnNwZWVkICogX01hdGhzX21hdGhfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVwc2lsb24iXSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuY2FtZXJhUm90YXRpb24ueCA9IDA7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5jYW1lcmFSb3RhdGlvbi55KSA8IHRoaXMuc3BlZWQg
KiBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRXBz
aWxvbiJdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmFSb3RhdGlvbi55ID0gMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuY2FtZXJhUm90YXRpb24uc2NhbGVJblBsYWNl
KHRoaXMuaW5lcnRpYSk7CisgICAgICAgIH0KKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fY2hl
Y2tJbnB1dHMuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIFRhcmdldENhbWVyYS5wcm90b3R5cGUu
X3VwZGF0ZUNhbWVyYVJvdGF0aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHRoaXMucm90YXRpb25RdWF0
ZXJuaW9uLnRvUm90YXRpb25NYXRyaXgodGhpcy5fY2FtZXJhUm90YXRpb25NYXRyaXgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xs
VG9SZWYodGhpcy5yb3RhdGlvbi55LCB0aGlzLnJvdGF0aW9uLngsIHRoaXMucm90YXRpb24ueiwg
dGhpcy5fY2FtZXJhUm90YXRpb25NYXRyaXgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBVcGRhdGUgdGhlIHVwIHZlY3RvciB0byBhcHBseSB0aGUgcm90YXRpb24gb2YgdGhl
IGNhbWVyYSAoU28gaWYgeW91IGNoYW5nZWQgdGhlIGNhbWVyYSByb3RhdGlvbi56IHRoaXMgd2ls
bCBsZXQgeW91IHVwZGF0ZSB0aGUgdXAgdmVjdG9yIGFzIHdlbGwpCisgICAgICogQHJldHVybnMg
dGhlIGN1cnJlbnQgY2FtZXJhCisgICAgICovCisgICAgVGFyZ2V0Q2FtZXJhLnByb3RvdHlwZS5f
cm90YXRlVXBWZWN0b3JXaXRoQ2FtZXJhUm90YXRpb25NYXRyaXggPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsVG9SZWYodGhpcy5fZGVmYXVsdFVwLCB0aGlzLl9jYW1l
cmFSb3RhdGlvbk1hdHJpeCwgdGhpcy51cFZlY3Rvcik7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUYXJnZXRDYW1lcmEucHJvdG90eXBlLl9n
ZXRWaWV3TWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5sb2NrZWRUYXJn
ZXQpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0VGFyZ2V0KHRoaXMuX2dldExvY2tlZFRhcmdldFBv
c2l0aW9uKCkpOworICAgICAgICB9CisgICAgICAgIC8vIENvbXB1dGUKKyAgICAgICAgdGhpcy5f
dXBkYXRlQ2FtZXJhUm90YXRpb25NYXRyaXgoKTsKKyAgICAgICAgLy8gQXBwbHkgdGhlIGNoYW5n
ZWQgcm90YXRpb24gdG8gdGhlIHVwVmVjdG9yCisgICAgICAgIGlmICh0aGlzLnJvdGF0aW9uUXVh
dGVybmlvbiAmJiB0aGlzLl9jYWNoZWRRdWF0ZXJuaW9uUm90YXRpb25aICE9IHRoaXMucm90YXRp
b25RdWF0ZXJuaW9uLnopIHsKKyAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVVwVmVjdG9yV2l0aENh
bWVyYVJvdGF0aW9uTWF0cml4KCk7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWRRdWF0ZXJuaW9u
Um90YXRpb25aID0gdGhpcy5yb3RhdGlvblF1YXRlcm5pb24uejsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICh0aGlzLl9jYWNoZWRSb3RhdGlvblogIT0gdGhpcy5yb3RhdGlvbi56KSB7Cisg
ICAgICAgICAgICB0aGlzLl9yb3RhdGVVcFZlY3RvcldpdGhDYW1lcmFSb3RhdGlvbk1hdHJpeCgp
OworICAgICAgICAgICAgdGhpcy5fY2FjaGVkUm90YXRpb25aID0gdGhpcy5yb3RhdGlvbi56Owor
ICAgICAgICB9CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0aGlzLl9yZWZl
cmVuY2VQb2ludCwgdGhpcy5fY2FtZXJhUm90YXRpb25NYXRyaXgsIHRoaXMuX3RyYW5zZm9ybWVk
UmVmZXJlbmNlUG9pbnQpOworICAgICAgICAvLyBDb21wdXRpbmcgdGFyZ2V0IGFuZCBmaW5hbCBt
YXRyaXgKKyAgICAgICAgdGhpcy5wb3NpdGlvbi5hZGRUb1JlZih0aGlzLl90cmFuc2Zvcm1lZFJl
ZmVyZW5jZVBvaW50LCB0aGlzLl9jdXJyZW50VGFyZ2V0KTsKKyAgICAgICAgaWYgKHRoaXMudXBk
YXRlVXBWZWN0b3JGcm9tUm90YXRpb24pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnJvdGF0aW9u
UXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siQXhpcyJdLlkucm90YXRlQnlRdWF0ZXJuaW9uVG9SZWYodGhp
cy5yb3RhdGlvblF1YXRlcm5pb24sIHRoaXMudXBWZWN0b3IpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXS5Gcm9tRXVsZXJWZWN0b3JUb1Jl
Zih0aGlzLnJvdGF0aW9uLCB0aGlzLl90bXBRdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICBf
TWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkF4aXMiXS5ZLnJv
dGF0ZUJ5UXVhdGVybmlvblRvUmVmKHRoaXMuX3RtcFF1YXRlcm5pb24sIHRoaXMudXBWZWN0b3Ip
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2NvbXB1dGVWaWV3TWF0
cml4KHRoaXMucG9zaXRpb24sIHRoaXMuX2N1cnJlbnRUYXJnZXQsIHRoaXMudXBWZWN0b3IpOwor
ICAgICAgICByZXR1cm4gdGhpcy5fdmlld01hdHJpeDsKKyAgICB9OworICAgIFRhcmdldENhbWVy
YS5wcm90b3R5cGUuX2NvbXB1dGVWaWV3TWF0cml4ID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB0YXJn
ZXQsIHVwKSB7CisgICAgICAgIGlmICh0aGlzLnBhcmVudCkgeworICAgICAgICAgICAgdmFyIHBh
cmVudFdvcmxkTWF0cml4ID0gdGhpcy5wYXJlbnQuZ2V0V29ybGRNYXRyaXgoKTsKKyAgICAgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0
b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihwb3NpdGlvbiwgcGFyZW50V29ybGRNYXRy
aXgsIHRoaXMuX2dsb2JhbFBvc2l0aW9uKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRp
bmF0ZXNUb1JlZih0YXJnZXQsIHBhcmVudFdvcmxkTWF0cml4LCB0aGlzLl9nbG9iYWxDdXJyZW50
VGFyZ2V0KTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsVG9SZWYodXAsIHBhcmVudFdv
cmxkTWF0cml4LCB0aGlzLl9nbG9iYWxDdXJyZW50VXBWZWN0b3IpOworICAgICAgICAgICAgdGhp
cy5fbWFya1N5bmNlZFdpdGhQYXJlbnQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHRoaXMuX2dsb2JhbFBvc2l0aW9uLmNvcHlGcm9tKHBvc2l0aW9uKTsKKyAgICAg
ICAgICAgIHRoaXMuX2dsb2JhbEN1cnJlbnRUYXJnZXQuY29weUZyb20odGFyZ2V0KTsKKyAgICAg
ICAgICAgIHRoaXMuX2dsb2JhbEN1cnJlbnRVcFZlY3Rvci5jb3B5RnJvbSh1cCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgewor
ICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk1hdHJpeCJdLkxvb2tBdFJIVG9SZWYodGhpcy5fZ2xvYmFsUG9zaXRpb24sIHRoaXMuX2ds
b2JhbEN1cnJlbnRUYXJnZXQsIHRoaXMuX2dsb2JhbEN1cnJlbnRVcFZlY3RvciwgdGhpcy5fdmll
d01hdHJpeCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uTG9va0F0
TEhUb1JlZih0aGlzLl9nbG9iYWxQb3NpdGlvbiwgdGhpcy5fZ2xvYmFsQ3VycmVudFRhcmdldCwg
dGhpcy5fZ2xvYmFsQ3VycmVudFVwVmVjdG9yLCB0aGlzLl92aWV3TWF0cml4KTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIFRhcmdldENh
bWVyYS5wcm90b3R5cGUuY3JlYXRlUmlnQ2FtZXJhID0gZnVuY3Rpb24gKG5hbWUsIGNhbWVyYUlu
ZGV4KSB7CisgICAgICAgIGlmICh0aGlzLmNhbWVyYVJpZ01vZGUgIT09IF9jYW1lcmFfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ2FtZXJhIl0uUklHX01PREVfTk9ORSkgeworICAgICAg
ICAgICAgdmFyIHJpZ0NhbWVyYSA9IG5ldyBUYXJnZXRDYW1lcmEobmFtZSwgdGhpcy5wb3NpdGlv
bi5jbG9uZSgpLCB0aGlzLmdldFNjZW5lKCkpOworICAgICAgICAgICAgaWYgKHRoaXMuY2FtZXJh
UmlnTW9kZSA9PT0gX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmEi
XS5SSUdfTU9ERV9WUiB8fCB0aGlzLmNhbWVyYVJpZ01vZGUgPT09IF9jYW1lcmFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siQ2FtZXJhIl0uUklHX01PREVfV0VCVlIpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0oKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmlnQ2FtZXJhLl9jYW1lcmFSaWdQYXJhbXMgPSB7fTsKKyAg
ICAgICAgICAgICAgICByaWdDYW1lcmEucm90YXRpb25RdWF0ZXJuaW9uID0gbmV3IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0oKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByaWdDYW1lcmE7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisg
ICAgICovCisgICAgVGFyZ2V0Q2FtZXJhLnByb3RvdHlwZS5fdXBkYXRlUmlnQ2FtZXJhcyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGNhbUxlZnQgPSB0aGlzLl9yaWdDYW1lcmFzWzBdOwor
ICAgICAgICB2YXIgY2FtUmlnaHQgPSB0aGlzLl9yaWdDYW1lcmFzWzFdOworICAgICAgICB0aGlz
LmNvbXB1dGVXb3JsZE1hdHJpeCgpOworICAgICAgICBzd2l0Y2ggKHRoaXMuY2FtZXJhUmlnTW9k
ZSkgeworICAgICAgICAgICAgY2FzZSBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19BTkFHTFlQSDoKKyAgICAgICAgICAg
IGNhc2UgX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmEiXS5SSUdf
TU9ERV9TVEVSRU9TQ09QSUNfU0lERUJZU0lERV9QQVJBTExFTDoKKyAgICAgICAgICAgIGNhc2Ug
X2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmEiXS5SSUdfTU9ERV9T
VEVSRU9TQ09QSUNfU0lERUJZU0lERV9DUk9TU0VZRUQ6CisgICAgICAgICAgICBjYXNlIF9jYW1l
cmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ2FtZXJhIl0uUklHX01PREVfU1RFUkVP
U0NPUElDX09WRVJVTkRFUjoKKyAgICAgICAgICAgICAgICAvL3Byb3Zpc2lvbm5hbHkgdXNpbmcg
X2NhbWVyYVJpZ1BhcmFtcy5zdGVyZW9IYWxmQW5nbGUgaW5zdGVhZCBvZiBjYWxjdWxhdGlvbnMg
YmFzZWQgb24gX2NhbWVyYVJpZ1BhcmFtcy5pbnRlcmF4aWFsRGlzdGFuY2U6CisgICAgICAgICAg
ICAgICAgdmFyIGxlZnRTaWduID0gKHRoaXMuY2FtZXJhUmlnTW9kZSA9PT0gX2NhbWVyYV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmEiXS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNf
U0lERUJZU0lERV9DUk9TU0VZRUQpID8gMSA6IC0xOworICAgICAgICAgICAgICAgIHZhciByaWdo
dFNpZ24gPSAodGhpcy5jYW1lcmFSaWdNb2RlID09PSBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19TSURFQllTSURFX0NS
T1NTRVlFRCkgPyAtMSA6IDE7CisgICAgICAgICAgICAgICAgdGhpcy5fZ2V0UmlnQ2FtUG9zaXRp
b25BbmRUYXJnZXQodGhpcy5fY2FtZXJhUmlnUGFyYW1zLnN0ZXJlb0hhbGZBbmdsZSAqIGxlZnRT
aWduLCBjYW1MZWZ0KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9nZXRSaWdDYW1Qb3NpdGlvbkFu
ZFRhcmdldCh0aGlzLl9jYW1lcmFSaWdQYXJhbXMuc3RlcmVvSGFsZkFuZ2xlICogcmlnaHRTaWdu
LCBjYW1SaWdodCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9j
YW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ2FtZXJhIl0uUklHX01PREVfVlI6
CisgICAgICAgICAgICAgICAgaWYgKGNhbUxlZnQucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhbUxlZnQucm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHRoaXMu
cm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgY2FtUmlnaHQucm90YXRp
b25RdWF0ZXJuaW9uLmNvcHlGcm9tKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNh
bUxlZnQucm90YXRpb24uY29weUZyb20odGhpcy5yb3RhdGlvbik7CisgICAgICAgICAgICAgICAg
ICAgIGNhbVJpZ2h0LnJvdGF0aW9uLmNvcHlGcm9tKHRoaXMucm90YXRpb24pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYW1MZWZ0LnBvc2l0aW9uLmNvcHlGcm9tKHRoaXMu
cG9zaXRpb24pOworICAgICAgICAgICAgICAgIGNhbVJpZ2h0LnBvc2l0aW9uLmNvcHlGcm9tKHRo
aXMucG9zaXRpb24pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IF9zdXBlci5wcm90b3R5cGUuX3VwZGF0ZVJpZ0NhbWVyYXMuY2FsbCh0aGlzKTsKKyAgICB9Owor
ICAgIFRhcmdldENhbWVyYS5wcm90b3R5cGUuX2dldFJpZ0NhbVBvc2l0aW9uQW5kVGFyZ2V0ID0g
ZnVuY3Rpb24gKGhhbGZTcGFjZSwgcmlnQ2FtZXJhKSB7CisgICAgICAgIHZhciB0YXJnZXQgPSB0
aGlzLmdldFRhcmdldCgpOworICAgICAgICB0YXJnZXQuc3VidHJhY3RUb1JlZih0aGlzLnBvc2l0
aW9uLCBUYXJnZXRDYW1lcmEuX1RhcmdldEZvY2FsUG9pbnQpOworICAgICAgICBUYXJnZXRDYW1l
cmEuX1RhcmdldEZvY2FsUG9pbnQubm9ybWFsaXplKCkuc2NhbGVJblBsYWNlKHRoaXMuX2luaXRp
YWxGb2NhbERpc3RhbmNlKTsKKyAgICAgICAgdmFyIG5ld0ZvY2FsVGFyZ2V0ID0gVGFyZ2V0Q2Ft
ZXJhLl9UYXJnZXRGb2NhbFBvaW50LmFkZEluUGxhY2UodGhpcy5wb3NpdGlvbik7CisgICAgICAg
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgi
XS5UcmFuc2xhdGlvblRvUmVmKC1uZXdGb2NhbFRhcmdldC54LCAtbmV3Rm9jYWxUYXJnZXQueSwg
LW5ld0ZvY2FsVGFyZ2V0LnosIFRhcmdldENhbWVyYS5fVGFyZ2V0VHJhbnNmb3JtTWF0cml4KTsK
KyAgICAgICAgVGFyZ2V0Q2FtZXJhLl9UYXJnZXRUcmFuc2Zvcm1NYXRyaXgubXVsdGlwbHlUb1Jl
ZihfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4
Il0uUm90YXRpb25ZKGhhbGZTcGFjZSksIFRhcmdldENhbWVyYS5fUmlnQ2FtVHJhbnNmb3JtTWF0
cml4KTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIk1hdHJpeCJdLlRyYW5zbGF0aW9uVG9SZWYobmV3Rm9jYWxUYXJnZXQueCwgbmV3Rm9j
YWxUYXJnZXQueSwgbmV3Rm9jYWxUYXJnZXQueiwgVGFyZ2V0Q2FtZXJhLl9UYXJnZXRUcmFuc2Zv
cm1NYXRyaXgpOworICAgICAgICBUYXJnZXRDYW1lcmEuX1JpZ0NhbVRyYW5zZm9ybU1hdHJpeC5t
dWx0aXBseVRvUmVmKFRhcmdldENhbWVyYS5fVGFyZ2V0VHJhbnNmb3JtTWF0cml4LCBUYXJnZXRD
YW1lcmEuX1JpZ0NhbVRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRp
bmF0ZXNUb1JlZih0aGlzLnBvc2l0aW9uLCBUYXJnZXRDYW1lcmEuX1JpZ0NhbVRyYW5zZm9ybU1h
dHJpeCwgcmlnQ2FtZXJhLnBvc2l0aW9uKTsKKyAgICAgICAgcmlnQ2FtZXJhLnNldFRhcmdldChu
ZXdGb2NhbFRhcmdldCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50
IG9iamVjdCBjbGFzcyBuYW1lLgorICAgICAqIEByZXR1cm4gdGhlIGNsYXNzIG5hbWUKKyAgICAg
Ki8KKyAgICBUYXJnZXRDYW1lcmEucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICJUYXJnZXRDYW1lcmEiOworICAgIH07CisgICAgVGFyZ2V0Q2Ft
ZXJhLl9SaWdDYW1UcmFuc2Zvcm1NYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdKCk7CisgICAgVGFyZ2V0Q2FtZXJhLl9U
YXJnZXRUcmFuc2Zvcm1NYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdKCk7CisgICAgVGFyZ2V0Q2FtZXJhLl9UYXJnZXRG
b2NhbFBvaW50ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZWN0b3IzIl0oKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1ZlY3RvcjMiXSkoKQorICAgIF0s
IFRhcmdldENhbWVyYS5wcm90b3R5cGUsICJyb3RhdGlvbiIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBUYXJnZXRDYW1lcmEucHJvdG90eXBlLCAic3BlZWQiLCB2b2lkIDAp
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZUFzTWVzaFJlZmVyZW5jZSJdKSgibG9ja2VkVGFyZ2V0SWQiKQorICAg
IF0sIFRhcmdldENhbWVyYS5wcm90b3R5cGUsICJsb2NrZWRUYXJnZXQiLCB2b2lkIDApOworICAg
IHJldHVybiBUYXJnZXRDYW1lcmE7Cit9KF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siQ2FtZXJhIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL3Rv
dWNoQ2FtZXJhLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9DYW1lcmFzL3RvdWNoQ2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFRvdWNoQ2FtZXJhICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvdWNoQ2FtZXJhIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBUb3VjaENhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2ZyZWVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYSAqLyAiLi9DYW1lcmFzL2Zy
ZWVDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworCisKKwor
Citfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlIl0uQWRkTm9kZUNvbnN0
cnVjdG9yKCJUb3VjaENhbWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSkgeworICAgIHJldHVy
biBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgVG91Y2hDYW1lcmEobmFtZSwgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCksIHNj
ZW5lKTsgfTsKK30pOworLyoqCisgKiBUaGlzIHJlcHJlc2VudHMgYSBGUFMgdHlwZSBvZiBjYW1l
cmEgY29udHJvbGxlZCBieSB0b3VjaC4KKyAqIFRoaXMgaXMgbGlrZSBhIHVuaXZlcnNhbCBjYW1l
cmEgbWludXMgdGhlIEdhbWVwYWQgY29udHJvbHMuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxv
bmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI3VuaXZlcnNhbC1jYW1lcmEKKyAqLwordmFyIFRvdWNo
Q2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFRvdWNoQ2FtZXJhLCBfc3Vw
ZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyB0b3VjaCBjYW1lcmEuCisg
ICAgICogVGhpcyByZXByZXNlbnRzIGEgRlBTIHR5cGUgb2YgY2FtZXJhIGNvbnRyb2xsZWQgYnkg
dG91Y2guCisgICAgICogVGhpcyBpcyBsaWtlIGEgdW5pdmVyc2FsIGNhbWVyYSBtaW51cyB0aGUg
R2FtZXBhZCBjb250cm9scy4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9m
ZWF0dXJlcy9jYW1lcmFzI3VuaXZlcnNhbC1jYW1lcmEKKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZp
bmUgdGhlIG5hbWUgb2YgdGhlIGNhbWVyYSBpbiB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gcG9z
aXRpb24gRGVmaW5lIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY2FtZXJhIGluIHRoZSBzY2Vu
ZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSBjYW1lcmEgYmVsb25n
cyB0bworICAgICAqLworICAgIGZ1bmN0aW9uIFRvdWNoQ2FtZXJhKG5hbWUsIHBvc2l0aW9uLCBz
Y2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBwb3Np
dGlvbiwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmlucHV0cy5hZGRUb3VjaCgpOwor
ICAgICAgICBfdGhpcy5fc2V0dXBJbnB1dHMoKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAg
IH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG91Y2hDYW1lcmEucHJvdG90eXBlLCAidG91
Y2hBbmd1bGFyU2Vuc2liaWxpdHkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVz
IHRoZSB0b3VjaCBzZW5zaWJpbGl0eSBmb3Igcm90YXRpb24uCisgICAgICAgICAqIFRoZSBoaWdo
ZXIgdGhlIGZhc3Rlci4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgdmFyIHRvdWNoID0gdGhpcy5pbnB1dHMuYXR0YWNoZWRbInRvdWNoIl07Cisg
ICAgICAgICAgICBpZiAodG91Y2gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG91Y2gudG91
Y2hBbmd1bGFyU2Vuc2liaWxpdHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIHZhciB0b3VjaCA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJ0b3VjaCJdOworICAgICAgICAg
ICAgaWYgKHRvdWNoKSB7CisgICAgICAgICAgICAgICAgdG91Y2gudG91Y2hBbmd1bGFyU2Vuc2li
aWxpdHkgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFRvdWNoQ2FtZXJhLnByb3RvdHlwZSwgInRvdWNoTW92ZVNlbnNp
YmlsaXR5IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgdG91Y2ggc2Vu
c2liaWxpdHkgZm9yIG1vdmUuCisgICAgICAgICAqIFRoZSBoaWdoZXIgdGhlIGZhc3Rlci4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHRv
dWNoID0gdGhpcy5pbnB1dHMuYXR0YWNoZWRbInRvdWNoIl07CisgICAgICAgICAgICBpZiAodG91
Y2gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG91Y2gudG91Y2hNb3ZlU2Vuc2liaWxpdHk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciB0b3VjaCA9IHRoaXMu
aW5wdXRzLmF0dGFjaGVkWyJ0b3VjaCJdOworICAgICAgICAgICAgaWYgKHRvdWNoKSB7CisgICAg
ICAgICAgICAgICAgdG91Y2gudG91Y2hNb3ZlU2Vuc2liaWxpdHkgPSB2YWx1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVu
dCBvYmplY3QgY2xhc3MgbmFtZS4KKyAgICAgKiBAcmV0dXJuIHRoZSBjbGFzcyBuYW1lCisgICAg
ICovCisgICAgVG91Y2hDYW1lcmEucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICJUb3VjaENhbWVyYSI7CisgICAgfTsKKyAgICAvKiogQGhpZGRl
biAqLworICAgIFRvdWNoQ2FtZXJhLnByb3RvdHlwZS5fc2V0dXBJbnB1dHMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBtb3VzZSA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJtb3VzZSJdOwor
ICAgICAgICBpZiAobW91c2UpIHsKKyAgICAgICAgICAgIG1vdXNlLnRvdWNoRW5hYmxlZCA9IGZh
bHNlOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gVG91Y2hDYW1lcmE7Cit9KF9mcmVl
Q2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkZyZWVDYW1lcmEiXSkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvdW5pdmVyc2FsQ2FtZXJhLnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJh
cy91bml2ZXJzYWxDYW1lcmEudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFVuaXZlcnNhbENhbWVyYSAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJVbml2ZXJzYWxDYW1lcmEiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFVuaXZlcnNhbENhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RvdWNoQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvdWNoQ2FtZXJhICovICIuL0Nh
bWVyYXMvdG91Y2hDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
bm9kZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2FtZXJhICovICIuL0NhbWVyYXMv
Y2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0dhbWVwYWRzX2dhbWVwYWRT
Y2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vR2FtZXBhZHMvZ2FtZXBhZFNjZW5lQ29tcG9uZW50ICovICIuL0dhbWVw
YWRzL2dhbWVwYWRTY2VuZUNvbXBvbmVudC50cyIpOworCisKKworCisKKworX25vZGVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiRnJlZUNh
bWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSkgeworICAgIC8vIEZvcmNpbmcgdG8gdXNlIHRo
ZSBVbml2ZXJzYWwgY2FtZXJhCisgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBV
bml2ZXJzYWxDYW1lcmEobmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKTsgfTsKK30pOworLyoqCisgKiBU
aGUgVW5pdmVyc2FsIENhbWVyYSBpcyB0aGUgb25lIHRvIGNob29zZSBmb3IgZmlyc3QgcGVyc29u
IHNob290ZXIgdHlwZSBnYW1lcywgYW5kIHdvcmtzIHdpdGggYWxsIHRoZSBrZXlib2FyZCwgbW91
c2UsIHRvdWNoIGFuZCBnYW1lcGFkcy4gVGhpcyByZXBsYWNlcyB0aGUgZWFybGllciBGcmVlIENh
bWVyYSwKKyAqIHdoaWNoIHN0aWxsIHdvcmtzIGFuZCB3aWxsIHN0aWxsIGJlIGZvdW5kIGluIG1h
bnkgUGxheWdyb3VuZHMuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJl
cy9jYW1lcmFzI3VuaXZlcnNhbC1jYW1lcmEKKyAqLwordmFyIFVuaXZlcnNhbENhbWVyYSA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShVbml2ZXJzYWxDYW1lcmEsIF9zdXBlcik7Cisg
ICAgLyoqCisgICAgICogVGhlIFVuaXZlcnNhbCBDYW1lcmEgaXMgdGhlIG9uZSB0byBjaG9vc2Ug
Zm9yIGZpcnN0IHBlcnNvbiBzaG9vdGVyIHR5cGUgZ2FtZXMsIGFuZCB3b3JrcyB3aXRoIGFsbCB0
aGUga2V5Ym9hcmQsIG1vdXNlLCB0b3VjaCBhbmQgZ2FtZXBhZHMuIFRoaXMgcmVwbGFjZXMgdGhl
IGVhcmxpZXIgRnJlZSBDYW1lcmEsCisgICAgICogd2hpY2ggc3RpbGwgd29ya3MgYW5kIHdpbGwg
c3RpbGwgYmUgZm91bmQgaW4gbWFueSBQbGF5Z3JvdW5kcy4KKyAgICAgKiBAc2VlIGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI3VuaXZlcnNhbC1jYW1lcmEKKyAgICAg
KiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGNhbWVyYSBpbiB0aGUgc2NlbmUK
KyAgICAgKiBAcGFyYW0gcG9zaXRpb24gRGVmaW5lIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUg
Y2FtZXJhIGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5l
IHRoZSBjYW1lcmEgYmVsb25ncyB0bworICAgICAqLworICAgIGZ1bmN0aW9uIFVuaXZlcnNhbENh
bWVyYShuYW1lLCBwb3NpdGlvbiwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgcG9zaXRpb24sIHNjZW5lKSB8fCB0aGlzOworICAgICAgICBfdGhp
cy5pbnB1dHMuYWRkR2FtZXBhZCgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbml2ZXJzYWxDYW1lcmEucHJvdG90eXBlLCAiZ2FtZXBh
ZEFuZ3VsYXJTZW5zaWJpbGl0eSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMg
dGhlIGdhbWVwYWQgcm90YXRpb24gc2Vuc2libGl0eS4KKyAgICAgICAgICogVGhpcyBpcyB0aGUg
dGhyZXNob2xkIGZyb20gd2hlbiByb3RhdGlvbiBzdGFydHMgdG8gYmUgYWNjb3VudGVkIGZvciB0
byBwcmV2ZW50IGppdHRlcmluZy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIGdhbWVwYWQgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsiZ2Ft
ZXBhZCJdOworICAgICAgICAgICAgaWYgKGdhbWVwYWQpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2FtZXBhZC5nYW1lcGFkQW5ndWxhclNlbnNpYmlsaXR5OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICB2YXIgZ2FtZXBhZCA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJn
YW1lcGFkIl07CisgICAgICAgICAgICBpZiAoZ2FtZXBhZCkgeworICAgICAgICAgICAgICAgIGdh
bWVwYWQuZ2FtZXBhZEFuZ3VsYXJTZW5zaWJpbGl0eSA9IHZhbHVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVW5pdmVyc2FsQ2Ft
ZXJhLnByb3RvdHlwZSwgImdhbWVwYWRNb3ZlU2Vuc2liaWxpdHkiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBEZWZpbmVzIHRoZSBnYW1lcGFkIG1vdmUgc2Vuc2libGl0eS4KKyAgICAgICAg
ICogVGhpcyBpcyB0aGUgdGhyZXNob2xkIGZyb20gd2hlbiBtb3Zpbmcgc3RhcnRzIHRvIGJlIGFj
Y291bnRlZCBmb3IgZm9yIHRvIHByZXZlbnQgaml0dGVyaW5nLgorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgZ2FtZXBhZCA9IHRoaXMuaW5w
dXRzLmF0dGFjaGVkWyJnYW1lcGFkIl07CisgICAgICAgICAgICBpZiAoZ2FtZXBhZCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnYW1lcGFkLmdhbWVwYWRNb3ZlU2Vuc2liaWxpdHk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBnYW1lcGFkID0gdGhpcy5pbnB1
dHMuYXR0YWNoZWRbImdhbWVwYWQiXTsKKyAgICAgICAgICAgIGlmIChnYW1lcGFkKSB7CisgICAg
ICAgICAgICAgICAgZ2FtZXBhZC5nYW1lcGFkTW92ZVNlbnNpYmlsaXR5ID0gdmFsdWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1
cnJlbnQgb2JqZWN0IGNsYXNzIG5hbWUuCisgICAgICogQHJldHVybiB0aGUgY2xhc3MgbmFtZQor
ICAgICAqLworICAgIFVuaXZlcnNhbENhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlVuaXZlcnNhbENhbWVyYSI7CisgICAgfTsKKyAg
ICByZXR1cm4gVW5pdmVyc2FsQ2FtZXJhOworfShfdG91Y2hDYW1lcmFfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVG91Y2hDYW1lcmEiXSkpOworCitfY2FtZXJhX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIkNhbWVyYSJdLl9jcmVhdGVEZWZhdWx0UGFyc2VkQ2FtZXJhID0gZnVu
Y3Rpb24gKG5hbWUsIHNjZW5lKSB7CisgICAgcmV0dXJuIG5ldyBVbml2ZXJzYWxDYW1lcmEobmFt
ZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXS5aZXJvKCksIHNjZW5lKTsKK307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVy
YXMvdmlydHVhbEpveXN0aWNrc0NhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL3ZpcnR1YWxKb3lzdGlj
a3NDYW1lcmEudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBWaXJ0dWFsSm95c3RpY2tzQ2FtZXJhICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpcnR1YWxKb3lzdGlja3NDYW1l
cmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFZpcnR1YWxKb3lzdGlja3NDYW1lcmE7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGli
L3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9mcmVlQ2FtZXJhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Zy
ZWVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9mcmVlQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2Rl
ICovICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfSW5wdXRzX2ZyZWVD
YW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9JbnB1dHMvZnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlj
a0lucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1
dC50cyIpOworCisKKworCisKK19ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5v
ZGUiXS5BZGROb2RlQ29uc3RydWN0b3IoIlZpcnR1YWxKb3lzdGlja3NDYW1lcmEiLCBmdW5jdGlv
biAobmFtZSwgc2NlbmUpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFZp
cnR1YWxKb3lzdGlja3NDYW1lcmEobmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKTsgfTsKK30pOworLyoq
CisgKiBUaGlzIHJlcHJlc2VudHMgYSBmcmVlIHR5cGUgb2YgY2FtZXJhLiBJdCBjYW4gYmUgdXNl
ZnVsIGluIEZpcnN0IFBlcnNvbiBTaG9vdGVyIGdhbWUgZm9yIGluc3RhbmNlLgorICogSXQgaXMg
aWRlbnRpY2FsIHRvIHRoZSBGcmVlIENhbWVyYSBhbmQgc2ltcGx5IGFkZHMgYnkgZGVmYXVsdCBh
IHZpcnR1YWwgam95c3RpY2suCisgKiBWaXJ0dWFsIEpveXN0aWNrcyBhcmUgb24tc2NyZWVuIDJE
IGdyYXBoaWNzIHRoYXQgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgY2FtZXJhIG9yIG90aGVyIHNj
ZW5lIGl0ZW1zLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vZmVhdHVyZXMvY2Ft
ZXJhcyN2aXJ0dWFsLWpveXN0aWNrcy1jYW1lcmEKKyAqLwordmFyIFZpcnR1YWxKb3lzdGlja3ND
YW1lcmEgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVmlydHVhbEpveXN0aWNrc0Nh
bWVyYSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnRhbnRpYXRlcyBhIFZpcnR1YWxKb3lz
dGlja3NDYW1lcmEuIEl0IGNhbiBiZSB1c2VmdWwgaW4gRmlyc3QgUGVyc29uIFNob290ZXIgZ2Ft
ZSBmb3IgaW5zdGFuY2UuCisgICAgICogSXQgaXMgaWRlbnRpY2FsIHRvIHRoZSBGcmVlIENhbWVy
YSBhbmQgc2ltcGx5IGFkZHMgYnkgZGVmYXVsdCBhIHZpcnR1YWwgam95c3RpY2suCisgICAgICog
VmlydHVhbCBKb3lzdGlja3MgYXJlIG9uLXNjcmVlbiAyRCBncmFwaGljcyB0aGF0IGFyZSB1c2Vk
IHRvIGNvbnRyb2wgdGhlIGNhbWVyYSBvciBvdGhlciBzY2VuZSBpdGVtcy4KKyAgICAgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI3ZpcnR1YWwtam95c3Rp
Y2tzLWNhbWVyYQorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgY2Ft
ZXJhIGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBEZWZpbmUgdGhlIHN0YXJ0
IHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgaW4gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIHNjZW5l
IERlZmluZSB0aGUgc2NlbmUgdGhlIGNhbWVyYSBiZWxvbmdzIHRvCisgICAgICovCisgICAgZnVu
Y3Rpb24gVmlydHVhbEpveXN0aWNrc0NhbWVyYShuYW1lLCBwb3NpdGlvbiwgc2NlbmUpIHsKKyAg
ICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgcG9zaXRpb24sIHNjZW5l
KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5pbnB1dHMuYWRkVmlydHVhbEpveXN0aWNrKCk7Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3Vy
cmVudCBvYmplY3QgY2xhc3MgbmFtZS4KKyAgICAgKiBAcmV0dXJuIHRoZSBjbGFzcyBuYW1lCisg
ICAgICovCisgICAgVmlydHVhbEpveXN0aWNrc0NhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlZpcnR1YWxKb3lzdGlja3NDYW1lcmEi
OworICAgIH07CisgICAgcmV0dXJuIFZpcnR1YWxKb3lzdGlja3NDYW1lcmE7Cit9KF9mcmVlQ2Ft
ZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkZyZWVDYW1lcmEiXSkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0NvbGxpc2lvbnMvY29sbGlkZXIudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NvbGxpc2lvbnMvY29sbGlk
ZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogQ29sbGlkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiQ29sbGlkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvbGxpZGVyOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgucGxhbmUgKi8gIi4vTWF0aHMvbWF0aC5wbGFu
ZS50cyIpOworCisKK3ZhciBpbnRlcnNlY3RCb3hBQVNwaGVyZSA9IGZ1bmN0aW9uIChib3hNaW4s
IGJveE1heCwgc3BoZXJlQ2VudGVyLCBzcGhlcmVSYWRpdXMpIHsKKyAgICBpZiAoYm94TWluLngg
PiBzcGhlcmVDZW50ZXIueCArIHNwaGVyZVJhZGl1cykgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGlmIChzcGhlcmVDZW50ZXIueCAtIHNwaGVyZVJhZGl1cyA+IGJveE1heC54
KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGJveE1pbi55ID4gc3Bo
ZXJlQ2VudGVyLnkgKyBzcGhlcmVSYWRpdXMpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAoc3BoZXJlQ2VudGVyLnkgLSBzcGhlcmVSYWRpdXMgPiBib3hNYXgueSkgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChib3hNaW4ueiA+IHNwaGVyZUNl
bnRlci56ICsgc3BoZXJlUmFkaXVzKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKHNwaGVyZUNlbnRlci56IC0gc3BoZXJlUmFkaXVzID4gYm94TWF4LnopIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK307Cit2YXIgZ2V0TG93
ZXN0Um9vdCA9IChmdW5jdGlvbiAoKSB7CisgICAgdmFyIHJlc3VsdCA9IHsgcm9vdDogMCwgZm91
bmQ6IGZhbHNlIH07CisgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjLCBtYXhSKSB7CisgICAg
ICAgIHJlc3VsdC5yb290ID0gMDsKKyAgICAgICAgcmVzdWx0LmZvdW5kID0gZmFsc2U7CisgICAg
ICAgIHZhciBkZXRlcm1pbmFudCA9IGIgKiBiIC0gNC4wICogYSAqIGM7CisgICAgICAgIGlmIChk
ZXRlcm1pbmFudCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIHNxcnREID0gTWF0aC5zcXJ0KGRldGVybWluYW50KTsKKyAgICAgICAgdmFy
IHIxID0gKC1iIC0gc3FydEQpIC8gKDIuMCAqIGEpOworICAgICAgICB2YXIgcjIgPSAoLWIgKyBz
cXJ0RCkgLyAoMi4wICogYSk7CisgICAgICAgIGlmIChyMSA+IHIyKSB7CisgICAgICAgICAgICB2
YXIgdGVtcCA9IHIyOworICAgICAgICAgICAgcjIgPSByMTsKKyAgICAgICAgICAgIHIxID0gdGVt
cDsKKyAgICAgICAgfQorICAgICAgICBpZiAocjEgPiAwICYmIHIxIDwgbWF4UikgeworICAgICAg
ICAgICAgcmVzdWx0LnJvb3QgPSByMTsKKyAgICAgICAgICAgIHJlc3VsdC5mb3VuZCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGlmIChyMiA+
IDAgJiYgcjIgPCBtYXhSKSB7CisgICAgICAgICAgICByZXN1bHQucm9vdCA9IHIyOworICAgICAg
ICAgICAgcmVzdWx0LmZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfSkoKTsKKy8qKiBAaGlk
ZGVuICovCit2YXIgQ29sbGlkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
ZnVuY3Rpb24gQ29sbGlkZXIoKSB7CisgICAgICAgIHRoaXMuX2NvbGxpc2lvblBvaW50ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIHRoaXMuX3BsYW5lSW50ZXJzZWN0aW9uUG9pbnQgPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsK
KyAgICAgICAgdGhpcy5fdGVtcFZlY3RvciA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlzLl90ZW1w
VmVjdG9yMiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlzLl90ZW1wVmVjdG9yMyA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygp
OworICAgICAgICB0aGlzLl90ZW1wVmVjdG9yNCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlzLl9l
ZGdlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2Jhc2VUb1ZlcnRleCA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICB0aGlzLl9kZXN0aW5hdGlvblBvaW50ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMu
X3NsaWRlUGxhbmVOb3JtYWwgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgdGhpcy5fZGlzcGxhY2VtZW50
VmVjdG9yID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMu
X3JhZGl1cyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0uT25lKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMu
X3JldHJ5ID0gMDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fYmFzZVBv
aW50V29ybGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgdGhpcy5fdmVsb2NpdHlXb3JsZCA9IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVy
bygpOworICAgICAgICB0aGlzLl9ub3JtYWxpemVkVmVsb2NpdHkgPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAg
ICAgdGhpcy5fY29sbGlzaW9uTWFzayA9IC0xOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoQ29sbGlkZXIucHJvdG90eXBlLCAiY29sbGlzaW9uTWFzayIsIHsKKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29sbGlzaW9uTWFzazsK
KyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAobWFzaykgeworICAgICAgICAgICAg
dGhpcy5fY29sbGlzaW9uTWFzayA9ICFpc05hTihtYXNrKSA/IG1hc2sgOiAtMTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbGxpZGVyLnByb3RvdHlwZSwg
InNsaWRlUGxhbmVOb3JtYWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBw
bGFuZSBub3JtYWwgdXNlZCB0byBjb21wdXRlIHRoZSBzbGlkaW5nIHJlc3BvbnNlIChpbiBsb2Nh
bCBzcGFjZSkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3NsaWRlUGxhbmVOb3JtYWw7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIC8vIE1ldGhvZHMKKyAgICAvKiogQGhpZGRlbiAqLworICAgIENvbGxpZGVyLnByb3RvdHlw
ZS5faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRpciwgZSkgeworICAgICAgICB0aGlz
Ll92ZWxvY2l0eSA9IGRpcjsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Ob3JtYWxpemVUb1JlZihkaXIsIHRoaXMuX25v
cm1hbGl6ZWRWZWxvY2l0eSk7CisgICAgICAgIHRoaXMuX2Jhc2VQb2ludCA9IHNvdXJjZTsKKyAg
ICAgICAgc291cmNlLm11bHRpcGx5VG9SZWYodGhpcy5fcmFkaXVzLCB0aGlzLl9iYXNlUG9pbnRX
b3JsZCk7CisgICAgICAgIGRpci5tdWx0aXBseVRvUmVmKHRoaXMuX3JhZGl1cywgdGhpcy5fdmVs
b2NpdHlXb3JsZCk7CisgICAgICAgIHRoaXMuX3ZlbG9jaXR5V29ybGRMZW5ndGggPSB0aGlzLl92
ZWxvY2l0eVdvcmxkLmxlbmd0aCgpOworICAgICAgICB0aGlzLl9lcHNpbG9uID0gZTsKKyAgICAg
ICAgdGhpcy5jb2xsaXNpb25Gb3VuZCA9IGZhbHNlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4g
Ki8KKyAgICBDb2xsaWRlci5wcm90b3R5cGUuX2NoZWNrUG9pbnRJblRyaWFuZ2xlID0gZnVuY3Rp
b24gKHBvaW50LCBwYSwgcGIsIHBjLCBuKSB7CisgICAgICAgIHBhLnN1YnRyYWN0VG9SZWYocG9p
bnQsIHRoaXMuX3RlbXBWZWN0b3IpOworICAgICAgICBwYi5zdWJ0cmFjdFRvUmVmKHBvaW50LCB0
aGlzLl90ZW1wVmVjdG9yMik7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZih0aGlzLl90ZW1wVmVjdG9y
LCB0aGlzLl90ZW1wVmVjdG9yMiwgdGhpcy5fdGVtcFZlY3RvcjQpOworICAgICAgICB2YXIgZCA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0uRG90KHRoaXMuX3RlbXBWZWN0b3I0LCBuKTsKKyAgICAgICAgaWYgKGQgPCAwKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcGMuc3VidHJhY3RUb1Jl
Zihwb2ludCwgdGhpcy5fdGVtcFZlY3RvcjMpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkNyb3NzVG9SZWYodGhpcy5f
dGVtcFZlY3RvcjIsIHRoaXMuX3RlbXBWZWN0b3IzLCB0aGlzLl90ZW1wVmVjdG9yNCk7CisgICAg
ICAgIGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLkRvdCh0aGlzLl90ZW1wVmVjdG9yNCwgbik7CisgICAgICAgIGlmIChkIDwgMCkg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uQ3Jvc3NU
b1JlZih0aGlzLl90ZW1wVmVjdG9yMywgdGhpcy5fdGVtcFZlY3RvciwgdGhpcy5fdGVtcFZlY3Rv
cjQpOworICAgICAgICBkID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5Eb3QodGhpcy5fdGVtcFZlY3RvcjQsIG4pOworICAgICAgICBy
ZXR1cm4gZCA+PSAwOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBDb2xsaWRlci5w
cm90b3R5cGUuX2NhbkRvQ29sbGlzaW9uID0gZnVuY3Rpb24gKHNwaGVyZUNlbnRlciwgc3BoZXJl
UmFkaXVzLCB2ZWNNaW4sIHZlY01heCkgeworICAgICAgICB2YXIgZGlzdGFuY2UgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRpc3Rh
bmNlKHRoaXMuX2Jhc2VQb2ludFdvcmxkLCBzcGhlcmVDZW50ZXIpOworICAgICAgICB2YXIgbWF4
ID0gTWF0aC5tYXgodGhpcy5fcmFkaXVzLngsIHRoaXMuX3JhZGl1cy55LCB0aGlzLl9yYWRpdXMu
eik7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IHRoaXMuX3ZlbG9jaXR5V29ybGRMZW5ndGggKyBt
YXggKyBzcGhlcmVSYWRpdXMpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIWludGVyc2VjdEJveEFBU3BoZXJlKHZlY01pbiwgdmVjTWF4LCB0aGlz
Ll9iYXNlUG9pbnRXb3JsZCwgdGhpcy5fdmVsb2NpdHlXb3JsZExlbmd0aCArIG1heCkpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQ29sbGlkZXIucHJvdG90eXBlLl90ZXN0
VHJpYW5nbGUgPSBmdW5jdGlvbiAoZmFjZUluZGV4LCB0cmlhbmdsZVBsYW5lQXJyYXksIHAxLCBw
MiwgcDMsIGhhc01hdGVyaWFsLCBob3N0TWVzaCkgeworICAgICAgICB2YXIgdDA7CisgICAgICAg
IHZhciBlbWJlZGRlZEluUGxhbmUgPSBmYWxzZTsKKyAgICAgICAgLy9kZWZlbnNpdmUgcHJvZ3Jh
bW1pbmcsIGFjdHVhbGx5IG5vdCBuZWVkZWQuCisgICAgICAgIGlmICghdHJpYW5nbGVQbGFuZUFy
cmF5KSB7CisgICAgICAgICAgICB0cmlhbmdsZVBsYW5lQXJyYXkgPSBbXTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIXRyaWFuZ2xlUGxhbmVBcnJheVtmYWNlSW5kZXhdKSB7CisgICAgICAgICAg
ICB0cmlhbmdsZVBsYW5lQXJyYXlbZmFjZUluZGV4XSA9IG5ldyBfTWF0aHNfbWF0aF9wbGFuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQbGFuZSJdKDAsIDAsIDAsIDApOworICAgICAg
ICAgICAgdHJpYW5nbGVQbGFuZUFycmF5W2ZhY2VJbmRleF0uY29weUZyb21Qb2ludHMocDEsIHAy
LCBwMyk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRyaWFuZ2xlUGxhbmUgPSB0cmlhbmdsZVBs
YW5lQXJyYXlbZmFjZUluZGV4XTsKKyAgICAgICAgaWYgKCghaGFzTWF0ZXJpYWwpICYmICF0cmlh
bmdsZVBsYW5lLmlzRnJvbnRGYWNpbmdUbyh0aGlzLl9ub3JtYWxpemVkVmVsb2NpdHksIDApKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNpZ25lZERpc3RU
b1RyaWFuZ2xlUGxhbmUgPSB0cmlhbmdsZVBsYW5lLnNpZ25lZERpc3RhbmNlVG8odGhpcy5fYmFz
ZVBvaW50KTsKKyAgICAgICAgdmFyIG5vcm1hbERvdFZlbG9jaXR5ID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Eb3QodHJpYW5nbGVQ
bGFuZS5ub3JtYWwsIHRoaXMuX3ZlbG9jaXR5KTsKKyAgICAgICAgaWYgKG5vcm1hbERvdFZlbG9j
aXR5ID09IDApIHsKKyAgICAgICAgICAgIGlmIChNYXRoLmFicyhzaWduZWREaXN0VG9Ucmlhbmds
ZVBsYW5lKSA+PSAxLjApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbWJlZGRlZEluUGxhbmUgPSB0cnVlOworICAgICAgICAgICAgdDAgPSAw
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdDAgPSAoLTEuMCAtIHNp
Z25lZERpc3RUb1RyaWFuZ2xlUGxhbmUpIC8gbm9ybWFsRG90VmVsb2NpdHk7CisgICAgICAgICAg
ICB2YXIgdDEgPSAoMS4wIC0gc2lnbmVkRGlzdFRvVHJpYW5nbGVQbGFuZSkgLyBub3JtYWxEb3RW
ZWxvY2l0eTsKKyAgICAgICAgICAgIGlmICh0MCA+IHQxKSB7CisgICAgICAgICAgICAgICAgdmFy
IHRlbXAgPSB0MTsKKyAgICAgICAgICAgICAgICB0MSA9IHQwOworICAgICAgICAgICAgICAgIHQw
ID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0MCA+IDEuMCB8fCB0MSA8
IDAuMCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh0MCA8IDApIHsKKyAgICAgICAgICAgICAgICB0MCA9IDA7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodDAgPiAxLjApIHsKKyAgICAgICAgICAgICAgICB0MCA9IDEuMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb2xsaXNpb25Qb2ludC5j
b3B5RnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7CisgICAg
ICAgIHZhciB0ID0gMS4wOworICAgICAgICBpZiAoIWVtYmVkZGVkSW5QbGFuZSkgeworICAgICAg
ICAgICAgdGhpcy5fYmFzZVBvaW50LnN1YnRyYWN0VG9SZWYodHJpYW5nbGVQbGFuZS5ub3JtYWws
IHRoaXMuX3BsYW5lSW50ZXJzZWN0aW9uUG9pbnQpOworICAgICAgICAgICAgdGhpcy5fdmVsb2Np
dHkuc2NhbGVUb1JlZih0MCwgdGhpcy5fdGVtcFZlY3Rvcik7CisgICAgICAgICAgICB0aGlzLl9w
bGFuZUludGVyc2VjdGlvblBvaW50LmFkZEluUGxhY2UodGhpcy5fdGVtcFZlY3Rvcik7CisgICAg
ICAgICAgICBpZiAodGhpcy5fY2hlY2tQb2ludEluVHJpYW5nbGUodGhpcy5fcGxhbmVJbnRlcnNl
Y3Rpb25Qb2ludCwgcDEsIHAyLCBwMywgdHJpYW5nbGVQbGFuZS5ub3JtYWwpKSB7CisgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIHQgPSB0MDsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9jb2xsaXNpb25Qb2ludC5jb3B5RnJvbSh0aGlzLl9wbGFuZUludGVyc2Vj
dGlvblBvaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWZvdW5k
KSB7CisgICAgICAgICAgICB2YXIgdmVsb2NpdHlTcXVhcmVkTGVuZ3RoID0gdGhpcy5fdmVsb2Np
dHkubGVuZ3RoU3F1YXJlZCgpOworICAgICAgICAgICAgdmFyIGEgPSB2ZWxvY2l0eVNxdWFyZWRM
ZW5ndGg7CisgICAgICAgICAgICB0aGlzLl9iYXNlUG9pbnQuc3VidHJhY3RUb1JlZihwMSwgdGhp
cy5fdGVtcFZlY3Rvcik7CisgICAgICAgICAgICB2YXIgYiA9IDIuMCAqIChfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdCh0aGlzLl92
ZWxvY2l0eSwgdGhpcy5fdGVtcFZlY3RvcikpOworICAgICAgICAgICAgdmFyIGMgPSB0aGlzLl90
ZW1wVmVjdG9yLmxlbmd0aFNxdWFyZWQoKSAtIDEuMDsKKyAgICAgICAgICAgIHZhciBsb3dlc3RS
b290ID0gZ2V0TG93ZXN0Um9vdChhLCBiLCBjLCB0KTsKKyAgICAgICAgICAgIGlmIChsb3dlc3RS
b290LmZvdW5kKSB7CisgICAgICAgICAgICAgICAgdCA9IGxvd2VzdFJvb3Qucm9vdDsKKyAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgdGhpcy5fY29sbGlzaW9u
UG9pbnQuY29weUZyb20ocDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYmFz
ZVBvaW50LnN1YnRyYWN0VG9SZWYocDIsIHRoaXMuX3RlbXBWZWN0b3IpOworICAgICAgICAgICAg
YiA9IDIuMCAqIChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdLkRvdCh0aGlzLl92ZWxvY2l0eSwgdGhpcy5fdGVtcFZlY3RvcikpOworICAg
ICAgICAgICAgYyA9IHRoaXMuX3RlbXBWZWN0b3IubGVuZ3RoU3F1YXJlZCgpIC0gMS4wOworICAg
ICAgICAgICAgbG93ZXN0Um9vdCA9IGdldExvd2VzdFJvb3QoYSwgYiwgYywgdCk7CisgICAgICAg
ICAgICBpZiAobG93ZXN0Um9vdC5mb3VuZCkgeworICAgICAgICAgICAgICAgIHQgPSBsb3dlc3RS
b290LnJvb3Q7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAg
IHRoaXMuX2NvbGxpc2lvblBvaW50LmNvcHlGcm9tKHAyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX2Jhc2VQb2ludC5zdWJ0cmFjdFRvUmVmKHAzLCB0aGlzLl90ZW1wVmVjdG9y
KTsKKyAgICAgICAgICAgIGIgPSAyLjAgKiAoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Eb3QodGhpcy5fdmVsb2NpdHksIHRoaXMuX3Rl
bXBWZWN0b3IpKTsKKyAgICAgICAgICAgIGMgPSB0aGlzLl90ZW1wVmVjdG9yLmxlbmd0aFNxdWFy
ZWQoKSAtIDEuMDsKKyAgICAgICAgICAgIGxvd2VzdFJvb3QgPSBnZXRMb3dlc3RSb290KGEsIGIs
IGMsIHQpOworICAgICAgICAgICAgaWYgKGxvd2VzdFJvb3QuZm91bmQpIHsKKyAgICAgICAgICAg
ICAgICB0ID0gbG93ZXN0Um9vdC5yb290OworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9jb2xsaXNpb25Qb2ludC5jb3B5RnJvbShwMyk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBwMi5zdWJ0cmFjdFRvUmVmKHAxLCB0aGlzLl9lZGdlKTsK
KyAgICAgICAgICAgIHAxLnN1YnRyYWN0VG9SZWYodGhpcy5fYmFzZVBvaW50LCB0aGlzLl9iYXNl
VG9WZXJ0ZXgpOworICAgICAgICAgICAgdmFyIGVkZ2VTcXVhcmVkTGVuZ3RoID0gdGhpcy5fZWRn
ZS5sZW5ndGhTcXVhcmVkKCk7CisgICAgICAgICAgICB2YXIgZWRnZURvdFZlbG9jaXR5ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5E
b3QodGhpcy5fZWRnZSwgdGhpcy5fdmVsb2NpdHkpOworICAgICAgICAgICAgdmFyIGVkZ2VEb3RC
YXNlVG9WZXJ0ZXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMyJdLkRvdCh0aGlzLl9lZGdlLCB0aGlzLl9iYXNlVG9WZXJ0ZXgpOworICAg
ICAgICAgICAgYSA9IGVkZ2VTcXVhcmVkTGVuZ3RoICogKC12ZWxvY2l0eVNxdWFyZWRMZW5ndGgp
ICsgZWRnZURvdFZlbG9jaXR5ICogZWRnZURvdFZlbG9jaXR5OworICAgICAgICAgICAgYiA9IGVk
Z2VTcXVhcmVkTGVuZ3RoICogKDIuMCAqIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KHRoaXMuX3ZlbG9jaXR5LCB0aGlzLl9iYXNl
VG9WZXJ0ZXgpKSAtIDIuMCAqIGVkZ2VEb3RWZWxvY2l0eSAqIGVkZ2VEb3RCYXNlVG9WZXJ0ZXg7
CisgICAgICAgICAgICBjID0gZWRnZVNxdWFyZWRMZW5ndGggKiAoMS4wIC0gdGhpcy5fYmFzZVRv
VmVydGV4Lmxlbmd0aFNxdWFyZWQoKSkgKyBlZGdlRG90QmFzZVRvVmVydGV4ICogZWRnZURvdEJh
c2VUb1ZlcnRleDsKKyAgICAgICAgICAgIGxvd2VzdFJvb3QgPSBnZXRMb3dlc3RSb290KGEsIGIs
IGMsIHQpOworICAgICAgICAgICAgaWYgKGxvd2VzdFJvb3QuZm91bmQpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgZiA9IChlZGdlRG90VmVsb2NpdHkgKiBsb3dlc3RSb290LnJvb3QgLSBlZGdlRG90
QmFzZVRvVmVydGV4KSAvIGVkZ2VTcXVhcmVkTGVuZ3RoOworICAgICAgICAgICAgICAgIGlmIChm
ID49IDAuMCAmJiBmIDw9IDEuMCkgeworICAgICAgICAgICAgICAgICAgICB0ID0gbG93ZXN0Um9v
dC5yb290OworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX2VkZ2Uuc2NhbGVJblBsYWNlKGYpOworICAgICAgICAgICAgICAgICAgICBw
MS5hZGRUb1JlZih0aGlzLl9lZGdlLCB0aGlzLl9jb2xsaXNpb25Qb2ludCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcDMuc3VidHJhY3RUb1JlZihwMiwg
dGhpcy5fZWRnZSk7CisgICAgICAgICAgICBwMi5zdWJ0cmFjdFRvUmVmKHRoaXMuX2Jhc2VQb2lu
dCwgdGhpcy5fYmFzZVRvVmVydGV4KTsKKyAgICAgICAgICAgIGVkZ2VTcXVhcmVkTGVuZ3RoID0g
dGhpcy5fZWRnZS5sZW5ndGhTcXVhcmVkKCk7CisgICAgICAgICAgICBlZGdlRG90VmVsb2NpdHkg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdLkRvdCh0aGlzLl9lZGdlLCB0aGlzLl92ZWxvY2l0eSk7CisgICAgICAgICAgICBlZGdlRG90
QmFzZVRvVmVydGV4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlZlY3RvcjMiXS5Eb3QodGhpcy5fZWRnZSwgdGhpcy5fYmFzZVRvVmVydGV4KTsKKyAg
ICAgICAgICAgIGEgPSBlZGdlU3F1YXJlZExlbmd0aCAqICgtdmVsb2NpdHlTcXVhcmVkTGVuZ3Ro
KSArIGVkZ2VEb3RWZWxvY2l0eSAqIGVkZ2VEb3RWZWxvY2l0eTsKKyAgICAgICAgICAgIGIgPSBl
ZGdlU3F1YXJlZExlbmd0aCAqICgyLjAgKiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdCh0aGlzLl92ZWxvY2l0eSwgdGhpcy5fYmFz
ZVRvVmVydGV4KSkgLSAyLjAgKiBlZGdlRG90VmVsb2NpdHkgKiBlZGdlRG90QmFzZVRvVmVydGV4
OworICAgICAgICAgICAgYyA9IGVkZ2VTcXVhcmVkTGVuZ3RoICogKDEuMCAtIHRoaXMuX2Jhc2VU
b1ZlcnRleC5sZW5ndGhTcXVhcmVkKCkpICsgZWRnZURvdEJhc2VUb1ZlcnRleCAqIGVkZ2VEb3RC
YXNlVG9WZXJ0ZXg7CisgICAgICAgICAgICBsb3dlc3RSb290ID0gZ2V0TG93ZXN0Um9vdChhLCBi
LCBjLCB0KTsKKyAgICAgICAgICAgIGlmIChsb3dlc3RSb290LmZvdW5kKSB7CisgICAgICAgICAg
ICAgICAgZiA9IChlZGdlRG90VmVsb2NpdHkgKiBsb3dlc3RSb290LnJvb3QgLSBlZGdlRG90QmFz
ZVRvVmVydGV4KSAvIGVkZ2VTcXVhcmVkTGVuZ3RoOworICAgICAgICAgICAgICAgIGlmIChmID49
IDAuMCAmJiBmIDw9IDEuMCkgeworICAgICAgICAgICAgICAgICAgICB0ID0gbG93ZXN0Um9vdC5y
b290OworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2VkZ2Uuc2NhbGVJblBsYWNlKGYpOworICAgICAgICAgICAgICAgICAgICBwMi5h
ZGRUb1JlZih0aGlzLl9lZGdlLCB0aGlzLl9jb2xsaXNpb25Qb2ludCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcDEuc3VidHJhY3RUb1JlZihwMywgdGhp
cy5fZWRnZSk7CisgICAgICAgICAgICBwMy5zdWJ0cmFjdFRvUmVmKHRoaXMuX2Jhc2VQb2ludCwg
dGhpcy5fYmFzZVRvVmVydGV4KTsKKyAgICAgICAgICAgIGVkZ2VTcXVhcmVkTGVuZ3RoID0gdGhp
cy5fZWRnZS5sZW5ndGhTcXVhcmVkKCk7CisgICAgICAgICAgICBlZGdlRG90VmVsb2NpdHkgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJd
LkRvdCh0aGlzLl9lZGdlLCB0aGlzLl92ZWxvY2l0eSk7CisgICAgICAgICAgICBlZGdlRG90QmFz
ZVRvVmVydGV4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlZlY3RvcjMiXS5Eb3QodGhpcy5fZWRnZSwgdGhpcy5fYmFzZVRvVmVydGV4KTsKKyAgICAg
ICAgICAgIGEgPSBlZGdlU3F1YXJlZExlbmd0aCAqICgtdmVsb2NpdHlTcXVhcmVkTGVuZ3RoKSAr
IGVkZ2VEb3RWZWxvY2l0eSAqIGVkZ2VEb3RWZWxvY2l0eTsKKyAgICAgICAgICAgIGIgPSBlZGdl
U3F1YXJlZExlbmd0aCAqICgyLjAgKiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdCh0aGlzLl92ZWxvY2l0eSwgdGhpcy5fYmFzZVRv
VmVydGV4KSkgLSAyLjAgKiBlZGdlRG90VmVsb2NpdHkgKiBlZGdlRG90QmFzZVRvVmVydGV4Owor
ICAgICAgICAgICAgYyA9IGVkZ2VTcXVhcmVkTGVuZ3RoICogKDEuMCAtIHRoaXMuX2Jhc2VUb1Zl
cnRleC5sZW5ndGhTcXVhcmVkKCkpICsgZWRnZURvdEJhc2VUb1ZlcnRleCAqIGVkZ2VEb3RCYXNl
VG9WZXJ0ZXg7CisgICAgICAgICAgICBsb3dlc3RSb290ID0gZ2V0TG93ZXN0Um9vdChhLCBiLCBj
LCB0KTsKKyAgICAgICAgICAgIGlmIChsb3dlc3RSb290LmZvdW5kKSB7CisgICAgICAgICAgICAg
ICAgZiA9IChlZGdlRG90VmVsb2NpdHkgKiBsb3dlc3RSb290LnJvb3QgLSBlZGdlRG90QmFzZVRv
VmVydGV4KSAvIGVkZ2VTcXVhcmVkTGVuZ3RoOworICAgICAgICAgICAgICAgIGlmIChmID49IDAu
MCAmJiBmIDw9IDEuMCkgeworICAgICAgICAgICAgICAgICAgICB0ID0gbG93ZXN0Um9vdC5yb290
OworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX2VkZ2Uuc2NhbGVJblBsYWNlKGYpOworICAgICAgICAgICAgICAgICAgICBwMy5hZGRU
b1JlZih0aGlzLl9lZGdlLCB0aGlzLl9jb2xsaXNpb25Qb2ludCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZCkgeworICAgICAg
ICAgICAgdmFyIGRpc3RUb0NvbGxpc2lvbiA9IHQgKiB0aGlzLl92ZWxvY2l0eS5sZW5ndGgoKTsK
KyAgICAgICAgICAgIGlmICghdGhpcy5jb2xsaXNpb25Gb3VuZCB8fCBkaXN0VG9Db2xsaXNpb24g
PCB0aGlzLl9uZWFyZXN0RGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW50
ZXJzZWN0aW9uUG9pbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25Q
b2ludCA9IHRoaXMuX2NvbGxpc2lvblBvaW50LmNsb25lKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVyc2Vj
dGlvblBvaW50LmNvcHlGcm9tKHRoaXMuX2NvbGxpc2lvblBvaW50KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdGhpcy5fbmVhcmVzdERpc3RhbmNlID0gZGlzdFRvQ29sbGlz
aW9uOworICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uRm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHRoaXMuY29sbGlkZWRNZXNoID0gaG9zdE1lc2g7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQ29sbGlkZXIucHJvdG90
eXBlLl9jb2xsaWRlID0gZnVuY3Rpb24gKHRyaWFuZ2xlUGxhbmVBcnJheSwgcHRzLCBpbmRpY2Vz
LCBpbmRleFN0YXJ0LCBpbmRleEVuZCwgZGVjYWwsIGhhc01hdGVyaWFsLCBob3N0TWVzaCkgewor
ICAgICAgICBmb3IgKHZhciBpID0gaW5kZXhTdGFydDsgaSA8IGluZGV4RW5kOyBpICs9IDMpIHsK
KyAgICAgICAgICAgIHZhciBwMSA9IHB0c1tpbmRpY2VzW2ldIC0gZGVjYWxdOworICAgICAgICAg
ICAgdmFyIHAyID0gcHRzW2luZGljZXNbaSArIDFdIC0gZGVjYWxdOworICAgICAgICAgICAgdmFy
IHAzID0gcHRzW2luZGljZXNbaSArIDJdIC0gZGVjYWxdOworICAgICAgICAgICAgdGhpcy5fdGVz
dFRyaWFuZ2xlKGksIHRyaWFuZ2xlUGxhbmVBcnJheSwgcDMsIHAyLCBwMSwgaGFzTWF0ZXJpYWws
IGhvc3RNZXNoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBD
b2xsaWRlci5wcm90b3R5cGUuX2dldFJlc3BvbnNlID0gZnVuY3Rpb24gKHBvcywgdmVsKSB7Cisg
ICAgICAgIHBvcy5hZGRUb1JlZih2ZWwsIHRoaXMuX2Rlc3RpbmF0aW9uUG9pbnQpOworICAgICAg
ICB2ZWwuc2NhbGVJblBsYWNlKCh0aGlzLl9uZWFyZXN0RGlzdGFuY2UgLyB2ZWwubGVuZ3RoKCkp
KTsKKyAgICAgICAgdGhpcy5fYmFzZVBvaW50LmFkZFRvUmVmKHZlbCwgcG9zKTsKKyAgICAgICAg
cG9zLnN1YnRyYWN0VG9SZWYodGhpcy5pbnRlcnNlY3Rpb25Qb2ludCwgdGhpcy5fc2xpZGVQbGFu
ZU5vcm1hbCk7CisgICAgICAgIHRoaXMuX3NsaWRlUGxhbmVOb3JtYWwubm9ybWFsaXplKCk7Cisg
ICAgICAgIHRoaXMuX3NsaWRlUGxhbmVOb3JtYWwuc2NhbGVUb1JlZih0aGlzLl9lcHNpbG9uLCB0
aGlzLl9kaXNwbGFjZW1lbnRWZWN0b3IpOworICAgICAgICBwb3MuYWRkSW5QbGFjZSh0aGlzLl9k
aXNwbGFjZW1lbnRWZWN0b3IpOworICAgICAgICB0aGlzLmludGVyc2VjdGlvblBvaW50LmFkZElu
UGxhY2UodGhpcy5fZGlzcGxhY2VtZW50VmVjdG9yKTsKKyAgICAgICAgdGhpcy5fc2xpZGVQbGFu
ZU5vcm1hbC5zY2FsZUluUGxhY2UoX01hdGhzX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siUGxhbmUiXS5TaWduZWREaXN0YW5jZVRvUGxhbmVGcm9tUG9zaXRpb25BbmRO
b3JtYWwodGhpcy5pbnRlcnNlY3Rpb25Qb2ludCwgdGhpcy5fc2xpZGVQbGFuZU5vcm1hbCwgdGhp
cy5fZGVzdGluYXRpb25Qb2ludCkpOworICAgICAgICB0aGlzLl9kZXN0aW5hdGlvblBvaW50LnN1
YnRyYWN0SW5QbGFjZSh0aGlzLl9zbGlkZVBsYW5lTm9ybWFsKTsKKyAgICAgICAgdGhpcy5fZGVz
dGluYXRpb25Qb2ludC5zdWJ0cmFjdFRvUmVmKHRoaXMuaW50ZXJzZWN0aW9uUG9pbnQsIHZlbCk7
CisgICAgfTsKKyAgICByZXR1cm4gQ29sbGlkZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL0NvbGxpc2lvbnMvY29sbGlzaW9uQ29vcmRpbmF0b3IudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NvbGxp
c2lvbnMvY29sbGlzaW9uQ29vcmRpbmF0b3IudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRGVmYXVs
dENvbGxpc2lvbkNvb3JkaW5hdG9yICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkRlZmF1bHRDb2xsaXNpb25Db29yZGluYXRvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGVm
YXVsdENvbGxpc2lvbkNvb3JkaW5hdG9yOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
c2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZl
Y3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5n
aW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfY29sbGlkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vY29sbGlkZXIgKi8gIi4vQ29sbGlzaW9ucy9jb2xsaWRlci50cyIp
OworCisKKworCisvKiogQGhpZGRlbiAqLwordmFyIERlZmF1bHRDb2xsaXNpb25Db29yZGluYXRv
ciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBEZWZhdWx0Q29s
bGlzaW9uQ29vcmRpbmF0b3IoKSB7CisgICAgICAgIHRoaXMuX3NjYWxlZFBvc2l0aW9uID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIHRoaXMuX3NjYWxlZFZlbG9jaXR5ID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAg
IHRoaXMuX2ZpbmFsUG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICB9CisgICAgRGVmYXVsdENvbGxp
c2lvbkNvb3JkaW5hdG9yLnByb3RvdHlwZS5nZXROZXdQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb3Np
dGlvbiwgZGlzcGxhY2VtZW50LCBjb2xsaWRlciwgbWF4aW11bVJldHJ5LCBleGNsdWRlZE1lc2gs
IG9uTmV3UG9zaXRpb24sIGNvbGxpc2lvbkluZGV4KSB7CisgICAgICAgIHBvc2l0aW9uLmRpdmlk
ZVRvUmVmKGNvbGxpZGVyLl9yYWRpdXMsIHRoaXMuX3NjYWxlZFBvc2l0aW9uKTsKKyAgICAgICAg
ZGlzcGxhY2VtZW50LmRpdmlkZVRvUmVmKGNvbGxpZGVyLl9yYWRpdXMsIHRoaXMuX3NjYWxlZFZl
bG9jaXR5KTsKKyAgICAgICAgY29sbGlkZXIuY29sbGlkZWRNZXNoID0gbnVsbDsKKyAgICAgICAg
Y29sbGlkZXIuX3JldHJ5ID0gMDsKKyAgICAgICAgY29sbGlkZXIuX2luaXRpYWxWZWxvY2l0eSA9
IHRoaXMuX3NjYWxlZFZlbG9jaXR5OworICAgICAgICBjb2xsaWRlci5faW5pdGlhbFBvc2l0aW9u
ID0gdGhpcy5fc2NhbGVkUG9zaXRpb247CisgICAgICAgIHRoaXMuX2NvbGxpZGVXaXRoV29ybGQo
dGhpcy5fc2NhbGVkUG9zaXRpb24sIHRoaXMuX3NjYWxlZFZlbG9jaXR5LCBjb2xsaWRlciwgbWF4
aW11bVJldHJ5LCB0aGlzLl9maW5hbFBvc2l0aW9uLCBleGNsdWRlZE1lc2gpOworICAgICAgICB0
aGlzLl9maW5hbFBvc2l0aW9uLm11bHRpcGx5SW5QbGFjZShjb2xsaWRlci5fcmFkaXVzKTsKKyAg
ICAgICAgLy9ydW4gdGhlIGNhbGxiYWNrCisgICAgICAgIG9uTmV3UG9zaXRpb24oY29sbGlzaW9u
SW5kZXgsIHRoaXMuX2ZpbmFsUG9zaXRpb24sIGNvbGxpZGVyLmNvbGxpZGVkTWVzaCk7CisgICAg
fTsKKyAgICBEZWZhdWx0Q29sbGlzaW9uQ29vcmRpbmF0b3IucHJvdG90eXBlLmNyZWF0ZUNvbGxp
ZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IF9jb2xsaWRlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb2xsaWRlciJdKCk7CisgICAgfTsKKyAgICBEZWZhdWx0
Q29sbGlzaW9uQ29vcmRpbmF0b3IucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoc2NlbmUpIHsK
KyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZTsKKyAgICB9OworICAgIERlZmF1bHRDb2xsaXNp
b25Db29yZGluYXRvci5wcm90b3R5cGUuX2NvbGxpZGVXaXRoV29ybGQgPSBmdW5jdGlvbiAocG9z
aXRpb24sIHZlbG9jaXR5LCBjb2xsaWRlciwgbWF4aW11bVJldHJ5LCBmaW5hbFBvc2l0aW9uLCBl
eGNsdWRlZE1lc2gpIHsKKyAgICAgICAgaWYgKGV4Y2x1ZGVkTWVzaCA9PT0gdm9pZCAwKSB7IGV4
Y2x1ZGVkTWVzaCA9IG51bGw7IH0KKyAgICAgICAgdmFyIGNsb3NlRGlzdGFuY2UgPSBfRW5naW5l
c19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lIl0uQ29sbGlzaW9u
c0Vwc2lsb24gKiAxMC4wOworICAgICAgICBpZiAoY29sbGlkZXIuX3JldHJ5ID49IG1heGltdW1S
ZXRyeSkgeworICAgICAgICAgICAgZmluYWxQb3NpdGlvbi5jb3B5RnJvbShwb3NpdGlvbik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBp
cyBhIG1lc2ggZWxzZSBjYW1lcmEgb3IgLTEKKyAgICAgICAgdmFyIGNvbGxpc2lvbk1hc2sgPSAo
ZXhjbHVkZWRNZXNoID8gZXhjbHVkZWRNZXNoLmNvbGxpc2lvbk1hc2sgOiBjb2xsaWRlci5jb2xs
aXNpb25NYXNrKTsKKyAgICAgICAgY29sbGlkZXIuX2luaXRpYWxpemUocG9zaXRpb24sIHZlbG9j
aXR5LCBjbG9zZURpc3RhbmNlKTsKKyAgICAgICAgLy8gQ2hlY2sgYWxsIG1lc2hlcworICAgICAg
ICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fc2NlbmUubWVzaGVzLmxlbmd0aDsg
aW5kZXgrKykgeworICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLl9zY2VuZS5tZXNoZXNbaW5k
ZXhdOworICAgICAgICAgICAgaWYgKG1lc2guaXNFbmFibGVkKCkgJiYgbWVzaC5jaGVja0NvbGxp
c2lvbnMgJiYgbWVzaC5zdWJNZXNoZXMgJiYgbWVzaCAhPT0gZXhjbHVkZWRNZXNoICYmICgoY29s
bGlzaW9uTWFzayAmIG1lc2guY29sbGlzaW9uR3JvdXApICE9PSAwKSkgeworICAgICAgICAgICAg
ICAgIG1lc2guX2NoZWNrQ29sbGlzaW9uKGNvbGxpZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWNvbGxpZGVyLmNvbGxpc2lvbkZvdW5kKSB7CisgICAgICAgICAg
ICBwb3NpdGlvbi5hZGRUb1JlZih2ZWxvY2l0eSwgZmluYWxQb3NpdGlvbik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlbG9jaXR5LnggIT09IDAgfHwgdmVs
b2NpdHkueSAhPT0gMCB8fCB2ZWxvY2l0eS56ICE9PSAwKSB7CisgICAgICAgICAgICBjb2xsaWRl
ci5fZ2V0UmVzcG9uc2UocG9zaXRpb24sIHZlbG9jaXR5KTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodmVsb2NpdHkubGVuZ3RoKCkgPD0gY2xvc2VEaXN0YW5jZSkgeworICAgICAgICAgICAgZmlu
YWxQb3NpdGlvbi5jb3B5RnJvbShwb3NpdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY29sbGlkZXIuX3JldHJ5Kys7CisgICAgICAgIHRoaXMuX2NvbGxpZGVX
aXRoV29ybGQocG9zaXRpb24sIHZlbG9jaXR5LCBjb2xsaWRlciwgbWF4aW11bVJldHJ5LCBmaW5h
bFBvc2l0aW9uLCBleGNsdWRlZE1lc2gpOworICAgIH07CisgICAgcmV0dXJuIERlZmF1bHRDb2xs
aXNpb25Db29yZGluYXRvcjsKK30oKSk7CisKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJTY2VuZSJdLkNvbGxpc2lvbkNvb3JkaW5hdG9yRmFjdG9yeSA9IGZ1bmN0aW9uICgp
IHsKKyAgICByZXR1cm4gbmV3IERlZmF1bHRDb2xsaXNpb25Db29yZGluYXRvcigpOworfTsKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vQ29sbGlzaW9ucy9pbmRleC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ29sbGlzaW9ucy9pbmRleC50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBDb2xsaWRlciwgRGVmYXVsdENvbGxpc2lvbkNvb3JkaW5hdG9yLCBQaWNraW5nSW5mbywg
SW50ZXJzZWN0aW9uSW5mbywgX01lc2hDb2xsaXNpb25EYXRhICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29sbGlkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29sbGlkZXIgKi8gIi4vQ29sbGlz
aW9ucy9jb2xsaWRlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xsaWRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2NvbGxpZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbGxp
ZGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbGxpc2lvbkNvb3JkaW5h
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL2NvbGxpc2lvbkNvb3JkaW5hdG9yICovICIuL0NvbGxpc2lvbnMvY29sbGlzaW9uQ29vcmRp
bmF0b3IudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVmYXVsdENvbGxpc2lvbkNvb3JkaW5hdG9y
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29sbGlzaW9uQ29vcmRpbmF0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siRGVmYXVsdENvbGxpc2lvbkNvb3JkaW5hdG9yIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BpY2tpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BpY2tpbmdJbmZvICovICIuL0Nv
bGxpc2lvbnMvcGlja2luZ0luZm8udHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGlja2luZ0luZm8i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9waWNraW5nSW5mb19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJQaWNraW5nSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9p
bnRlcnNlY3Rpb25JbmZvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL2ludGVyc2VjdGlvbkluZm8gKi8gIi4vQ29sbGlzaW9ucy9pbnRlcnNl
Y3Rpb25JbmZvLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkludGVyc2VjdGlvbkluZm8iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbnRlcnNlY3Rpb25JbmZvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIkludGVyc2VjdGlvbkluZm8iXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfbWVzaENvbGxpc2lvbkRhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vbWVzaENvbGxpc2lvbkRhdGEgKi8gIi4vQ29sbGlzaW9ucy9t
ZXNoQ29sbGlzaW9uRGF0YS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfTWVzaENvbGxpc2lvbkRh
dGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tZXNoQ29sbGlzaW9uRGF0YV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJfTWVzaENvbGxpc2lvbkRhdGEiXTsgfSk7CisKKworCisKKworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL0NvbGxpc2lvbnMvaW50ZXJzZWN0aW9uSW5mby50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9Db2xsaXNpb25zL2ludGVyc2VjdGlvbkluZm8udHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBJbnRlcnNl
Y3Rpb25JbmZvICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkludGVyc2Vj
dGlvbkluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIEludGVyc2VjdGlvbkluZm87IH0pOworLyoq
CisgKiBAaGlkZGVuCisgKi8KK3ZhciBJbnRlcnNlY3Rpb25JbmZvID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEludGVyc2VjdGlvbkluZm8oYnUsIGJ2LCBkaXN0
YW5jZSkgeworICAgICAgICB0aGlzLmJ1ID0gYnU7CisgICAgICAgIHRoaXMuYnYgPSBidjsKKyAg
ICAgICAgdGhpcy5kaXN0YW5jZSA9IGRpc3RhbmNlOworICAgICAgICB0aGlzLmZhY2VJZCA9IDA7
CisgICAgICAgIHRoaXMuc3ViTWVzaElkID0gMDsKKyAgICB9CisgICAgcmV0dXJuIEludGVyc2Vj
dGlvbkluZm87Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NvbGxpc2lvbnMv
bWVzaENvbGxpc2lvbkRhdGEudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL0NvbGxpc2lvbnMvbWVzaENvbGxpc2lvbkRhdGEudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogX01lc2hDb2xsaXNpb25EYXRhICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIl9NZXNoQ29sbGlzaW9uRGF0YSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01lc2hDb2xsaXNpb25EYXRhOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9y
LnRzIik7CisKKy8qKgorICogQGhpZGRlbgorICovCit2YXIgX01lc2hDb2xsaXNpb25EYXRhID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIF9NZXNoQ29sbGlzaW9u
RGF0YSgpIHsKKyAgICAgICAgdGhpcy5fY2hlY2tDb2xsaXNpb25zID0gZmFsc2U7CisgICAgICAg
IHRoaXMuX2NvbGxpc2lvbk1hc2sgPSAtMTsKKyAgICAgICAgdGhpcy5fY29sbGlzaW9uR3JvdXAg
PSAtMTsKKyAgICAgICAgdGhpcy5fY29sbGlkZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vbGRQ
b3NpdGlvbkZvckNvbGxpc2lvbnMgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fZGlm
ZlBvc2l0aW9uRm9yQ29sbGlzaW9ucyA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAgIH0KKyAgICByZXR1
cm4gX01lc2hDb2xsaXNpb25EYXRhOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9Db2xsaXNpb25zL3BpY2tpbmdJbmZvLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9Db2xsaXNpb25zL3BpY2tpbmdJbmZvLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IFBpY2tpbmdJbmZvICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBpY2tpbmdJbmZvIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQaWNraW5nSW5mbzsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3Rv
ciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsK
KworCisvKioKKyAgICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVzdWx0IG9mIHBpY2tpbmcg
d2l0aGluIGEgc2NlbmUKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFi
eWxvbjEwMS9waWNraW5nX2NvbGxpc2lvbnMKKyAgICAgKi8KK3ZhciBQaWNraW5nSW5mbyA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQaWNraW5nSW5mbygpIHsK
KyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fcGlja2luZ1VuYXZhaWxhYmxl
ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0aGUgcGljayBjb2xsaWRlZCB3
aXRoIGFuIG9iamVjdAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5oaXQgPSBmYWxzZTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIERpc3RhbmNlIGF3YXkgd2hlcmUgdGhlIHBpY2sgY29sbGlk
ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGlzdGFuY2UgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogVGhlIGxvY2F0aW9uIG9mIHBpY2sgY29sbGlzaW9uCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLnBpY2tlZFBvaW50ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFRoZSBtZXNoIGNvcnJlc3BvbmRpbmcgdGhlIHRoZSBwaWNrIGNvbGxpc2lvbgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5waWNrZWRNZXNoID0gbnVsbDsKKyAgICAgICAgLyoqIChTZWUgZ2V0
VGV4dHVyZUNvb3JkaW5hdGVzKSBUaGUgYmFyeWNlbnRyaWMgVSBjb29yZGluYXRlIHRoYXQgaXMg
dXNlZCB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIG9mIHRoZSBjb2xs
aXNpb24uKi8KKyAgICAgICAgdGhpcy5idSA9IDA7CisgICAgICAgIC8qKiAoU2VlIGdldFRleHR1
cmVDb29yZGluYXRlcykgVGhlIGJhcnljZW50cmljIFYgY29vcmRpbmF0ZSB0aGF0IGlzIHVzZWQg
d2hlbiBjYWxjdWxhdGluZyB0aGUgdGV4dHVyZSBjb29yZGluYXRlcyBvZiB0aGUgY29sbGlzaW9u
LiovCisgICAgICAgIHRoaXMuYnYgPSAwOworICAgICAgICAvKiogVGhlIGluZGV4IG9mIHRoZSBm
YWNlIG9uIHRoZSBtZXNoIHRoYXQgd2FzIHBpY2tlZCwgb3IgdGhlIGluZGV4IG9mIHRoZSBMaW5l
IGlmIHRoZSBwaWNrZWQgTWVzaCBpcyBhIExpbmVzTWVzaCAqLworICAgICAgICB0aGlzLmZhY2VJ
ZCA9IC0xOworICAgICAgICAvKiogSWQgb2YgdGhlIHRoZSBzdWJtZXNoIHRoYXQgd2FzIHBpY2tl
ZCAqLworICAgICAgICB0aGlzLnN1Yk1lc2hJZCA9IDA7CisgICAgICAgIC8qKiBJZiBhIHNwcml0
ZSB3YXMgcGlja2VkLCB0aGlzIHdpbGwgYmUgdGhlIHNwcml0ZSB0aGUgcGljayBjb2xsaWRlZCB3
aXRoICovCisgICAgICAgIHRoaXMucGlja2VkU3ByaXRlID0gbnVsbDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIElmIGEgbWVzaCB3YXMgdXNlZCB0byBkbyB0aGUgcGlja2luZyAoZWcuIDZkb2Yg
Y29udHJvbGxlcikgdGhpcyB3aWxsIGJlIHBvcHVsYXRlZC4KKyAgICAgICAgICovCisgICAgICAg
IHRoaXMub3JpZ2luTWVzaCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgcmF5
IHRoYXQgd2FzIHVzZWQgdG8gcGVyZm9ybSB0aGUgcGlja2luZy4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMucmF5ID0gbnVsbDsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbm9y
bWFsIGNvcnJlc3BvZG5pbmcgdG8gdGhlIGZhY2UgdGhlIHBpY2sgY29sbGlkZWQgd2l0aAorICAg
ICAqIEBwYXJhbSB1c2VXb3JsZENvb3JkaW5hdGVzIElmIHRoZSByZXN1bHRpbmcgbm9ybWFsIHNo
b3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgd29ybGQgKGRlZmF1bHQ6IGZhbHNlKQorICAgICAqIEBw
YXJhbSB1c2VWZXJ0aWNlc05vcm1hbHMgSWYgdGhlIHZlcnRpY2VzIG5vcm1hbHMgc2hvdWxkIGJl
IHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBub3JtYWwgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIG1hcAor
ICAgICAqIEByZXR1cm5zIFRoZSBub3JtYWwgY29ycmVzcG9kbmluZyB0byB0aGUgZmFjZSB0aGUg
cGljayBjb2xsaWRlZCB3aXRoCisgICAgICovCisgICAgUGlja2luZ0luZm8ucHJvdG90eXBlLmdl
dE5vcm1hbCA9IGZ1bmN0aW9uICh1c2VXb3JsZENvb3JkaW5hdGVzLCB1c2VWZXJ0aWNlc05vcm1h
bHMpIHsKKyAgICAgICAgaWYgKHVzZVdvcmxkQ29vcmRpbmF0ZXMgPT09IHZvaWQgMCkgeyB1c2VX
b3JsZENvb3JkaW5hdGVzID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHVzZVZlcnRpY2VzTm9ybWFs
cyA9PT0gdm9pZCAwKSB7IHVzZVZlcnRpY2VzTm9ybWFscyA9IHRydWU7IH0KKyAgICAgICAgaWYg
KCF0aGlzLnBpY2tlZE1lc2ggfHwgIXRoaXMucGlja2VkTWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNl
bnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVm
ZmVyIl0uTm9ybWFsS2luZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9
CisgICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5waWNrZWRNZXNoLmdldEluZGljZXMoKTsKKyAg
ICAgICAgaWYgKCFpbmRpY2VzKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICB2YXIgcmVzdWx0OworICAgICAgICBpZiAodXNlVmVydGljZXNOb3JtYWxzKSB7
CisgICAgICAgICAgICB2YXIgbm9ybWFscyA9IHRoaXMucGlja2VkTWVzaC5nZXRWZXJ0aWNlc0Rh
dGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVm
ZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAgICAgICB2YXIgbm9ybWFsMCA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5
KG5vcm1hbHMsIGluZGljZXNbdGhpcy5mYWNlSWQgKiAzXSAqIDMpOworICAgICAgICAgICAgdmFy
IG5vcm1hbDEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdLkZyb21BcnJheShub3JtYWxzLCBpbmRpY2VzW3RoaXMuZmFjZUlkICogMyAr
IDFdICogMyk7CisgICAgICAgICAgICB2YXIgbm9ybWFsMiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KG5vcm1hbHMs
IGluZGljZXNbdGhpcy5mYWNlSWQgKiAzICsgMl0gKiAzKTsKKyAgICAgICAgICAgIG5vcm1hbDAg
PSBub3JtYWwwLnNjYWxlKHRoaXMuYnUpOworICAgICAgICAgICAgbm9ybWFsMSA9IG5vcm1hbDEu
c2NhbGUodGhpcy5idik7CisgICAgICAgICAgICBub3JtYWwyID0gbm9ybWFsMi5zY2FsZSgxLjAg
LSB0aGlzLmJ1IC0gdGhpcy5idik7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShub3JtYWww
LnggKyBub3JtYWwxLnggKyBub3JtYWwyLngsIG5vcm1hbDAueSArIG5vcm1hbDEueSArIG5vcm1h
bDIueSwgbm9ybWFsMC56ICsgbm9ybWFsMS56ICsgbm9ybWFsMi56KTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbnMgPSB0aGlzLnBpY2tlZE1lc2gu
Z2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7CisgICAgICAgICAgICB2YXIgdmVydGV4
MSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0
b3IzIl0uRnJvbUFycmF5KHBvc2l0aW9ucywgaW5kaWNlc1t0aGlzLmZhY2VJZCAqIDNdICogMyk7
CisgICAgICAgICAgICB2YXIgdmVydGV4MiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KHBvc2l0aW9ucywgaW5kaWNl
c1t0aGlzLmZhY2VJZCAqIDMgKyAxXSAqIDMpOworICAgICAgICAgICAgdmFyIHZlcnRleDMgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJd
LkZyb21BcnJheShwb3NpdGlvbnMsIGluZGljZXNbdGhpcy5mYWNlSWQgKiAzICsgMl0gKiAzKTsK
KyAgICAgICAgICAgIHZhciBwMXAyID0gdmVydGV4MS5zdWJ0cmFjdCh2ZXJ0ZXgyKTsKKyAgICAg
ICAgICAgIHZhciBwM3AyID0gdmVydGV4My5zdWJ0cmFjdCh2ZXJ0ZXgyKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0uQ3Jvc3MocDFwMiwgcDNwMik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVz
ZVdvcmxkQ29vcmRpbmF0ZXMpIHsKKyAgICAgICAgICAgIHZhciB3bSA9IHRoaXMucGlja2VkTWVz
aC5nZXRXb3JsZE1hdHJpeCgpOworICAgICAgICAgICAgaWYgKHRoaXMucGlja2VkTWVzaC5ub25V
bmlmb3JtU2NhbGluZykgeworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdLmNvcHlGcm9t
KHdtKTsKKyAgICAgICAgICAgICAgICB3bSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdOworICAgICAgICAgICAg
ICAgIHdtLnNldFRyYW5zbGF0aW9uRnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICB3bS5pbnZlcnQoKTsKKyAgICAgICAgICAgICAgICB3bS50cmFuc3Bvc2VUb1JlZihfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLk1h
dHJpeFsxXSk7CisgICAgICAgICAgICAgICAgd20gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsxXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJlc3VsdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKHJlc3VsdCwgd20p
OworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5ub3JtYWxpemUoKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRleHR1cmUgY29vcmRp
bmF0ZXMgb2Ygd2hlcmUgdGhlIHBpY2sgb2NjdXJlZAorICAgICAqIEByZXR1cm5zIHRoZSB2ZWN0
b3IgY29udGFpbmluZyB0aGUgY29vcmRuYXRlcyBvZiB0aGUgdGV4dHVyZQorICAgICAqLworICAg
IFBpY2tpbmdJbmZvLnByb3RvdHlwZS5nZXRUZXh0dXJlQ29vcmRpbmF0ZXMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICghdGhpcy5waWNrZWRNZXNoIHx8ICF0aGlzLnBpY2tlZE1lc2guaXNW
ZXJ0aWNlc0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICB9CisgICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5waWNrZWRNZXNoLmdldElu
ZGljZXMoKTsKKyAgICAgICAgaWYgKCFpbmRpY2VzKSB7CisgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgfQorICAgICAgICB2YXIgdXZzID0gdGhpcy5waWNrZWRNZXNoLmdldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0
ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICBpZiAoIXV2cykgeworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHV2MCA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IyIl0uRnJvbUFycmF5KHV2cywg
aW5kaWNlc1t0aGlzLmZhY2VJZCAqIDNdICogMik7CisgICAgICAgIHZhciB1djEgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdLkZyb21B
cnJheSh1dnMsIGluZGljZXNbdGhpcy5mYWNlSWQgKiAzICsgMV0gKiAyKTsKKyAgICAgICAgdmFy
IHV2MiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IyIl0uRnJvbUFycmF5KHV2cywgaW5kaWNlc1t0aGlzLmZhY2VJZCAqIDMgKyAyXSAqIDIp
OworICAgICAgICB1djAgPSB1djAuc2NhbGUodGhpcy5idSk7CisgICAgICAgIHV2MSA9IHV2MS5z
Y2FsZSh0aGlzLmJ2KTsKKyAgICAgICAgdXYyID0gdXYyLnNjYWxlKDEuMCAtIHRoaXMuYnUgLSB0
aGlzLmJ2KTsKKyAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdKHV2MC54ICsgdXYxLnggKyB1djIueCwgdXYw
LnkgKyB1djEueSArIHV2Mi55KTsKKyAgICB9OworICAgIHJldHVybiBQaWNraW5nSW5mbzsKK30o
KSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ3VsbGluZy9PY3RyZWVzL2luZGV4LnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0N1
bGxpbmcvT2N0cmVlcy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE9jdHJlZSwgT2N0cmVlQmxvY2ssIE9j
dHJlZVNjZW5lQ29tcG9uZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfb2N0cmVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL29jdHJlZSAqLyAiLi9DdWxsaW5nL09jdHJlZXMvb2N0cmVlLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX29jdHJlZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJPY3RyZWUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfb2N0cmVlQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vb2N0cmVlQmxvY2sgKi8gIi4vQ3VsbGluZy9PY3Ry
ZWVzL29jdHJlZUJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZUJsb2NrIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfb2N0cmVlQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siT2N0cmVlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfb2N0cmVl
U2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vb2N0cmVlU2NlbmVDb21wb25lbnQgKi8gIi4vQ3VsbGluZy9PY3RyZWVz
L29jdHJlZVNjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZVNjZW5l
Q29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfb2N0cmVlU2NlbmVDb21wb25lbnRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siT2N0cmVlU2NlbmVDb21wb25lbnQiXTsgfSk7CisK
KworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ3VsbGluZy9PY3RyZWVzL29jdHJlZS50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
Q3VsbGluZy9PY3RyZWVzL29jdHJlZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBPY3RyZWUgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT2N0cmVlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBP
Y3RyZWU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3NtYXJ0QXJyYXlfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01pc2Mvc21hcnRBcnJheSAqLyAiLi9NaXNjL3NtYXJ0QXJyYXkudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfb2N0cmVlQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vb2N0cmVlQmxvY2sgKi8gIi4vQ3VsbGluZy9PY3Ry
ZWVzL29jdHJlZUJsb2NrLnRzIik7CisKKworLyoqCisgKiBPY3RyZWVzIGFyZSBhIHJlYWxseSBw
b3dlcmZ1bCBkYXRhIHN0cnVjdHVyZSB0aGF0IGNhbiBxdWlja2x5IHNlbGVjdCBlbnRpdGllcyBi
YXNlZCBvbiBzcGFjZSBjb29yZGluYXRlcy4KKyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vb3B0aW1pemluZ195b3VyX3NjZW5lX3dpdGhfb2N0cmVlcworICovCit2YXIg
T2N0cmVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBvY3RyZWUKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL29wdGltaXppbmdfeW91cl9zY2VuZV93aXRoX29jdHJlZXMKKyAgICAgKiBAcGFyYW0gY3Jl
YXRpb25GdW5jIGZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gaW5zdGF0aWF0ZSB0aGUgb2N0cmVlCisg
ICAgICogQHBhcmFtIG1heEJsb2NrQ2FwYWNpdHkgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIg
b2YgbWVzaGVzIHlvdSB3YW50IG9uIHlvdXIgb2N0cmVlJ3MgbGVhdmVzIChkZWZhdWx0OiA2NCkK
KyAgICAgKiBAcGFyYW0gbWF4RGVwdGggZGVmaW5lcyB0aGUgbWF4aW11bSBkZXB0aCAoc3ViLWxl
dmVscykgZm9yIHlvdXIgb2N0cmVlLiBEZWZhdWx0IHZhbHVlIGlzIDIsIHdoaWNoIG1lYW5zIDgg
OCA4ID0gNTEyIGJsb2NrcyA6KSAoVGhpcyBwYXJhbWV0ZXIgdGFrZXMgcHJlY2VkZW5jZSBvdmVy
IGNhcGFjaXR5LikKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBPY3RyZWUoY3JlYXRpb25GdW5jLCBt
YXhCbG9ja0NhcGFjaXR5LCAKKyAgICAvKiogRGVmaW5lcyB0aGUgbWF4aW11bSBkZXB0aCAoc3Vi
LWxldmVscykgZm9yIHlvdXIgb2N0cmVlLiBEZWZhdWx0IHZhbHVlIGlzIDIsIHdoaWNoIG1lYW5z
IDggOCA4ID0gNTEyIGJsb2NrcyA6KSAoVGhpcyBwYXJhbWV0ZXIgdGFrZXMgcHJlY2VkZW5jZSBv
dmVyIGNhcGFjaXR5LikgKi8KKyAgICBtYXhEZXB0aCkgeworICAgICAgICBpZiAobWF4RGVwdGgg
PT09IHZvaWQgMCkgeyBtYXhEZXB0aCA9IDI7IH0KKyAgICAgICAgdGhpcy5tYXhEZXB0aCA9IG1h
eERlcHRoOworICAgICAgICAvKioKKyAgICAgICAgICogQ29udGVudCBzdG9yZWQgaW4gdGhlIG9j
dHJlZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5keW5hbWljQ29udGVudCA9IG5ldyBBcnJh
eSgpOworICAgICAgICB0aGlzLl9tYXhCbG9ja0NhcGFjaXR5ID0gbWF4QmxvY2tDYXBhY2l0eSB8
fCA2NDsKKyAgICAgICAgdGhpcy5fc2VsZWN0aW9uQ29udGVudCA9IG5ldyBfTWlzY19zbWFydEFy
cmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNtYXJ0QXJyYXlOb0R1cGxpY2F0ZSJd
KDEwMjQpOworICAgICAgICB0aGlzLl9jcmVhdGlvbkZ1bmMgPSBjcmVhdGlvbkZ1bmM7CisgICAg
fQorICAgIC8vIE1ldGhvZHMKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBvY3RyZWUgYnkg
YWRkaW5nIGJsb2NrcyBmb3IgdGhlIHBhc3NlZCBpbiBtZXNoZXMgd2l0aGluIHRoZSBtaW4gYW5k
IG1heCB3b3JsZCBwYXJhbWV0ZXJzCisgICAgICogQHBhcmFtIHdvcmxkTWluIHdvcmxkTWluIGZv
ciB0aGUgb2N0cmVlIGJsb2NrcyB2YXIgYmxvY2tTaXplID0gbmV3IFZlY3RvcjMoKHdvcmxkTWF4
LnggLSB3b3JsZE1pbi54KSAvIDIsICh3b3JsZE1heC55IC0gd29ybGRNaW4ueSkgLyAyLCAod29y
bGRNYXgueiAtIHdvcmxkTWluLnopIC8gMik7CisgICAgICogQHBhcmFtIHdvcmxkTWF4IHdvcmxk
TWF4IGZvciB0aGUgb2N0cmVlIGJsb2NrcyB2YXIgYmxvY2tTaXplID0gbmV3IFZlY3RvcjMoKHdv
cmxkTWF4LnggLSB3b3JsZE1pbi54KSAvIDIsICh3b3JsZE1heC55IC0gd29ybGRNaW4ueSkgLyAy
LCAod29ybGRNYXgueiAtIHdvcmxkTWluLnopIC8gMik7CisgICAgICogQHBhcmFtIGVudHJpZXMg
bWVzaGVzIHRvIGJlIGFkZGVkIHRvIHRoZSBvY3RyZWUgYmxvY2tzCisgICAgICovCisgICAgT2N0
cmVlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAod29ybGRNaW4sIHdvcmxkTWF4LCBlbnRy
aWVzKSB7CisgICAgICAgIF9vY3RyZWVCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJPY3RyZWVCbG9jayJdLl9DcmVhdGVCbG9ja3Mod29ybGRNaW4sIHdvcmxkTWF4LCBlbnRyaWVz
LCB0aGlzLl9tYXhCbG9ja0NhcGFjaXR5LCAwLCB0aGlzLm1heERlcHRoLCB0aGlzLCB0aGlzLl9j
cmVhdGlvbkZ1bmMpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIG1lc2ggdG8gdGhl
IG9jdHJlZQorICAgICAqIEBwYXJhbSBlbnRyeSBNZXNoIHRvIGFkZCB0byB0aGUgb2N0cmVlCisg
ICAgICovCisgICAgT2N0cmVlLnByb3RvdHlwZS5hZGRNZXNoID0gZnVuY3Rpb24gKGVudHJ5KSB7
CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJsb2Nrcy5sZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBibG9jayA9IHRoaXMuYmxvY2tzW2luZGV4XTsK
KyAgICAgICAgICAgIGJsb2NrLmFkZEVudHJ5KGVudHJ5KTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogUmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgb2N0cmVlCisgICAgICog
QHBhcmFtIGVudHJ5IGRlZmluZXMgdGhlIGVsZW1lbnQgdG8gcmVtb3ZlCisgICAgICovCisgICAg
T2N0cmVlLnByb3RvdHlwZS5yZW1vdmVNZXNoID0gZnVuY3Rpb24gKGVudHJ5KSB7CisgICAgICAg
IGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJsb2Nrcy5sZW5ndGg7IGluZGV4Kysp
IHsKKyAgICAgICAgICAgIHZhciBibG9jayA9IHRoaXMuYmxvY2tzW2luZGV4XTsKKyAgICAgICAg
ICAgIGJsb2NrLnJlbW92ZUVudHJ5KGVudHJ5KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogU2VsZWN0cyBhbiBhcnJheSBvZiBtZXNoZXMgd2l0aGluIHRoZSBmcnVzdHVtCisg
ICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgVGhlIGZydXN0dW0gcGxhbmVzIHRvIHVzZSB3aGlj
aCB3aWxsIHNlbGVjdCBhbGwgbWVzaGVzIHdpdGhpbiBpdAorICAgICAqIEBwYXJhbSBhbGxvd0R1
cGxpY2F0ZSBJZiBkdXBsaWNhdGUgb2JqZWN0cyBhcmUgYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5n
IG9iamVjdCBhcnJheQorICAgICAqIEByZXR1cm5zIGFycmF5IG9mIG1lc2hlcyB3aXRoaW4gdGhl
IGZydXN0dW0KKyAgICAgKi8KKyAgICBPY3RyZWUucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9u
IChmcnVzdHVtUGxhbmVzLCBhbGxvd0R1cGxpY2F0ZSkgeworICAgICAgICB0aGlzLl9zZWxlY3Rp
b25Db250ZW50LnJlc2V0KCk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0
aGlzLmJsb2Nrcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBibG9jayA9IHRo
aXMuYmxvY2tzW2luZGV4XTsKKyAgICAgICAgICAgIGJsb2NrLnNlbGVjdChmcnVzdHVtUGxhbmVz
LCB0aGlzLl9zZWxlY3Rpb25Db250ZW50LCBhbGxvd0R1cGxpY2F0ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGFsbG93RHVwbGljYXRlKSB7CisgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25D
b250ZW50LmNvbmNhdCh0aGlzLmR5bmFtaWNDb250ZW50KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbkNvbnRlbnQuY29uY2F0V2l0aE5vRHVw
bGljYXRlKHRoaXMuZHluYW1pY0NvbnRlbnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
aGlzLl9zZWxlY3Rpb25Db250ZW50OworICAgIH07CisgICAgLyoqCisgICAgICogVGVzdCBpZiB0
aGUgb2N0cmVlIGludGVyc2VjdCB3aXRoIHRoZSBnaXZlbiBib3VuZGluZyBzcGhlcmUgYW5kIGlm
IHllcywgdGhlbiBhZGQgaXRzIGNvbnRlbnQgdG8gdGhlIHNlbGVjdGlvbiBhcnJheQorICAgICAq
IEBwYXJhbSBzcGhlcmVDZW50ZXIgZGVmaW5lcyB0aGUgYm91bmRpbmcgc3BoZXJlIGNlbnRlcgor
ICAgICAqIEBwYXJhbSBzcGhlcmVSYWRpdXMgZGVmaW5lcyB0aGUgYm91bmRpbmcgc3BoZXJlIHJh
ZGl1cworICAgICAqIEBwYXJhbSBhbGxvd0R1cGxpY2F0ZSBkZWZpbmVzIGlmIHRoZSBzZWxlY3Rp
b24gYXJyYXkgY2FuIGNvbnRhaW5zIGR1cGxpY2F0ZWQgZW50cmllcworICAgICAqIEByZXR1cm5z
IGFuIGFycmF5IG9mIG9iamVjdHMgdGhhdCBpbnRlcnNlY3QgdGhlIHNwaGVyZQorICAgICAqLwor
ICAgIE9jdHJlZS5wcm90b3R5cGUuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChzcGhlcmVDZW50ZXIs
IHNwaGVyZVJhZGl1cywgYWxsb3dEdXBsaWNhdGUpIHsKKyAgICAgICAgdGhpcy5fc2VsZWN0aW9u
Q29udGVudC5yZXNldCgpOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhp
cy5ibG9ja3MubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgYmxvY2sgPSB0aGlz
LmJsb2Nrc1tpbmRleF07CisgICAgICAgICAgICBibG9jay5pbnRlcnNlY3RzKHNwaGVyZUNlbnRl
ciwgc3BoZXJlUmFkaXVzLCB0aGlzLl9zZWxlY3Rpb25Db250ZW50LCBhbGxvd0R1cGxpY2F0ZSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbG93RHVwbGljYXRlKSB7CisgICAgICAgICAgICB0
aGlzLl9zZWxlY3Rpb25Db250ZW50LmNvbmNhdCh0aGlzLmR5bmFtaWNDb250ZW50KTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbkNvbnRlbnQu
Y29uY2F0V2l0aE5vRHVwbGljYXRlKHRoaXMuZHluYW1pY0NvbnRlbnQpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Db250ZW50OworICAgIH07CisgICAgLyoqCisg
ICAgKiBUZXN0IGlmIHRoZSBvY3RyZWUgaW50ZXJzZWN0IHdpdGggdGhlIGdpdmVuIHJheSBhbmQg
aWYgeWVzLCB0aGVuIGFkZCBpdHMgY29udGVudCB0byByZXN1bHRpbmcgYXJyYXkKKyAgICAgKiBA
cGFyYW0gcmF5IGRlZmluZXMgdGhlIHJheSB0byB0ZXN0IHdpdGgKKyAgICAgKiBAcmV0dXJucyBh
cnJheSBvZiBpbnRlcnNlY3RlZCBvYmplY3RzCisgICAgICovCisgICAgT2N0cmVlLnByb3RvdHlw
ZS5pbnRlcnNlY3RzUmF5ID0gZnVuY3Rpb24gKHJheSkgeworICAgICAgICB0aGlzLl9zZWxlY3Rp
b25Db250ZW50LnJlc2V0KCk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0
aGlzLmJsb2Nrcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBibG9jayA9IHRo
aXMuYmxvY2tzW2luZGV4XTsKKyAgICAgICAgICAgIGJsb2NrLmludGVyc2VjdHNSYXkocmF5LCB0
aGlzLl9zZWxlY3Rpb25Db250ZW50KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zZWxlY3Rp
b25Db250ZW50LmNvbmNhdFdpdGhOb0R1cGxpY2F0ZSh0aGlzLmR5bmFtaWNDb250ZW50KTsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkNvbnRlbnQ7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGRzIGEgbWVzaCBpbnRvIHRoZSBvY3RyZWUgYmxvY2sgaWYgaXQgaW50ZXJzZWN0cyB0
aGUgYmxvY2sKKyAgICAgKi8KKyAgICBPY3RyZWUuQ3JlYXRpb25GdW5jRm9yTWVzaGVzID0gZnVu
Y3Rpb24gKGVudHJ5LCBibG9jaykgeworICAgICAgICB2YXIgYm91bmRpbmdJbmZvID0gZW50cnku
Z2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIGlmICghZW50cnkuaXNCbG9ja2VkICYmIGJvdW5k
aW5nSW5mby5ib3VuZGluZ0JveC5pbnRlcnNlY3RzTWluTWF4KGJsb2NrLm1pblBvaW50LCBibG9j
ay5tYXhQb2ludCkpIHsKKyAgICAgICAgICAgIGJsb2NrLmVudHJpZXMucHVzaChlbnRyeSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgYSBzdWJtZXNoIGludG8gdGhl
IG9jdHJlZSBibG9jayBpZiBpdCBpbnRlcnNlY3RzIHRoZSBibG9jaworICAgICAqLworICAgIE9j
dHJlZS5DcmVhdGlvbkZ1bmNGb3JTdWJNZXNoZXMgPSBmdW5jdGlvbiAoZW50cnksIGJsb2NrKSB7
CisgICAgICAgIHZhciBib3VuZGluZ0luZm8gPSBlbnRyeS5nZXRCb3VuZGluZ0luZm8oKTsKKyAg
ICAgICAgaWYgKGJvdW5kaW5nSW5mby5ib3VuZGluZ0JveC5pbnRlcnNlY3RzTWluTWF4KGJsb2Nr
Lm1pblBvaW50LCBibG9jay5tYXhQb2ludCkpIHsKKyAgICAgICAgICAgIGJsb2NrLmVudHJpZXMu
cHVzaChlbnRyeSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBPY3RyZWU7Cit9KCkp
OworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0N1bGxpbmcvT2N0cmVlcy9vY3RyZWVCbG9j
ay50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9DdWxsaW5nL09jdHJlZXMvb2N0cmVlQmxvY2sudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBP
Y3RyZWVCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPY3RyZWVC
bG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gT2N0cmVlQmxvY2s7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8g
Ii4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ3Vs
bGluZ19ib3VuZGluZ0JveF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vQ3VsbGluZy9ib3VuZGluZ0JveCAqLyAiLi9DdWxsaW5nL2Jv
dW5kaW5nQm94LnRzIik7CisKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHN0b3JlIGEgY2VsbCBp
biBhbiBvY3RyZWUKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9vcHRp
bWl6aW5nX3lvdXJfc2NlbmVfd2l0aF9vY3RyZWVzCisgKi8KK3ZhciBPY3RyZWVCbG9jayA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3
IGJsb2NrCisgICAgICogQHBhcmFtIG1pblBvaW50IGRlZmluZXMgdGhlIG1pbmltdW0gdmVjdG9y
IChpbiB3b3JsZCBzcGFjZSkgb2YgdGhlIGJsb2NrJ3MgYm91bmRpbmcgYm94CisgICAgICogQHBh
cmFtIG1heFBvaW50IGRlZmluZXMgdGhlIG1heGltdW0gdmVjdG9yIChpbiB3b3JsZCBzcGFjZSkg
b2YgdGhlIGJsb2NrJ3MgYm91bmRpbmcgYm94CisgICAgICogQHBhcmFtIGNhcGFjaXR5IGRlZmlu
ZXMgdGhlIG1heGltdW0gY2FwYWNpdHkgb2YgdGhpcyBibG9jayAoaWYgY2FwYWNpdHkgaXMgcmVh
Y2hlZCB0aGUgYmxvY2sgd2lsbCBiZSBzcGxpdCBpbnRvIHN1YiBibG9ja3MpCisgICAgICogQHBh
cmFtIGRlcHRoIGRlZmluZXMgdGhlIGN1cnJlbnQgZGVwdGggb2YgdGhpcyBibG9jayBpbiB0aGUg
b2N0cmVlCisgICAgICogQHBhcmFtIG1heERlcHRoIGRlZmluZXMgdGhlIG1heGltYWwgZGVwdGgg
YWxsb3dlZCAoYmV5b25kIHRoaXMgdmFsdWUsIHRoZSBjYXBhY2l0eSBpcyBpZ25vcmVkKQorICAg
ICAqIEBwYXJhbSBjcmVhdGlvbkZ1bmMgZGVmaW5lcyBhIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiBh
biBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBibG9jaworICAgICAqLworICAgIGZ1bmN0aW9uIE9j
dHJlZUJsb2NrKG1pblBvaW50LCBtYXhQb2ludCwgY2FwYWNpdHksIGRlcHRoLCBtYXhEZXB0aCwg
Y3JlYXRpb25GdW5jKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjb250ZW50
IG9mIHRoZSBjdXJyZW50IGJsb2NrCisgICAgICAgICAqLworICAgICAgICB0aGlzLmVudHJpZXMg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fYm91bmRpbmdWZWN0b3JzID0gbmV3IEFycmF5
KCk7CisgICAgICAgIHRoaXMuX2NhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgICAgIHRoaXMuX2Rl
cHRoID0gZGVwdGg7CisgICAgICAgIHRoaXMuX21heERlcHRoID0gbWF4RGVwdGg7CisgICAgICAg
IHRoaXMuX2NyZWF0aW9uRnVuYyA9IGNyZWF0aW9uRnVuYzsKKyAgICAgICAgdGhpcy5fbWluUG9p
bnQgPSBtaW5Qb2ludDsKKyAgICAgICAgdGhpcy5fbWF4UG9pbnQgPSBtYXhQb2ludDsKKyAgICAg
ICAgdGhpcy5fYm91bmRpbmdWZWN0b3JzLnB1c2gobWluUG9pbnQuY2xvbmUoKSk7CisgICAgICAg
IHRoaXMuX2JvdW5kaW5nVmVjdG9ycy5wdXNoKG1heFBvaW50LmNsb25lKCkpOworICAgICAgICB0
aGlzLl9ib3VuZGluZ1ZlY3RvcnMucHVzaChtaW5Qb2ludC5jbG9uZSgpKTsKKyAgICAgICAgdGhp
cy5fYm91bmRpbmdWZWN0b3JzWzJdLnggPSBtYXhQb2ludC54OworICAgICAgICB0aGlzLl9ib3Vu
ZGluZ1ZlY3RvcnMucHVzaChtaW5Qb2ludC5jbG9uZSgpKTsKKyAgICAgICAgdGhpcy5fYm91bmRp
bmdWZWN0b3JzWzNdLnkgPSBtYXhQb2ludC55OworICAgICAgICB0aGlzLl9ib3VuZGluZ1ZlY3Rv
cnMucHVzaChtaW5Qb2ludC5jbG9uZSgpKTsKKyAgICAgICAgdGhpcy5fYm91bmRpbmdWZWN0b3Jz
WzRdLnogPSBtYXhQb2ludC56OworICAgICAgICB0aGlzLl9ib3VuZGluZ1ZlY3RvcnMucHVzaCht
YXhQb2ludC5jbG9uZSgpKTsKKyAgICAgICAgdGhpcy5fYm91bmRpbmdWZWN0b3JzWzVdLnogPSBt
aW5Qb2ludC56OworICAgICAgICB0aGlzLl9ib3VuZGluZ1ZlY3RvcnMucHVzaChtYXhQb2ludC5j
bG9uZSgpKTsKKyAgICAgICAgdGhpcy5fYm91bmRpbmdWZWN0b3JzWzZdLnggPSBtaW5Qb2ludC54
OworICAgICAgICB0aGlzLl9ib3VuZGluZ1ZlY3RvcnMucHVzaChtYXhQb2ludC5jbG9uZSgpKTsK
KyAgICAgICAgdGhpcy5fYm91bmRpbmdWZWN0b3JzWzddLnkgPSBtaW5Qb2ludC55OworICAgIH0K
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2N0cmVlQmxvY2sucHJvdG90eXBlLCAiY2FwYWNp
dHkiLCB7CisgICAgICAgIC8vIFByb3BlcnR5CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSBtYXhpbXVtIGNhcGFjaXR5IG9mIHRoaXMgYmxvY2sgKGlmIGNhcGFjaXR5IGlzIHJlYWNo
ZWQgdGhlIGJsb2NrIHdpbGwgYmUgc3BsaXQgaW50byBzdWIgYmxvY2tzKQorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fw
YWNpdHk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPY3Ry
ZWVCbG9jay5wcm90b3R5cGUsICJtaW5Qb2ludCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIG1pbmltdW0gdmVjdG9yIChpbiB3b3JsZCBzcGFjZSkgb2YgdGhlIGJsb2NrJ3Mg
Ym91bmRpbmcgYm94CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9taW5Qb2ludDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KE9jdHJlZUJsb2NrLnByb3RvdHlwZSwgIm1heFBvaW50Iiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbWF4aW11bSB2ZWN0b3IgKGluIHdv
cmxkIHNwYWNlKSBvZiB0aGUgYmxvY2sncyBib3VuZGluZyBib3gKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heFBvaW50
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvLyBNZXRob2RzCisgICAgLyoqCisgICAgICogQWRk
IGEgbmV3IGVsZW1lbnQgdG8gdGhpcyBibG9jaworICAgICAqIEBwYXJhbSBlbnRyeSBkZWZpbmVz
IHRoZSBlbGVtZW50IHRvIGFkZAorICAgICAqLworICAgIE9jdHJlZUJsb2NrLnByb3RvdHlwZS5h
ZGRFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkgeworICAgICAgICBpZiAodGhpcy5ibG9ja3MpIHsK
KyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJsb2Nrcy5sZW5n
dGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgYmxvY2sgPSB0aGlzLmJsb2Nrc1tp
bmRleF07CisgICAgICAgICAgICAgICAgYmxvY2suYWRkRW50cnkoZW50cnkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NyZWF0
aW9uRnVuYyhlbnRyeSwgdGhpcyk7CisgICAgICAgIGlmICh0aGlzLmVudHJpZXMubGVuZ3RoID4g
dGhpcy5jYXBhY2l0eSAmJiB0aGlzLl9kZXB0aCA8IHRoaXMuX21heERlcHRoKSB7CisgICAgICAg
ICAgICB0aGlzLmNyZWF0ZUlubmVyQmxvY2tzKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIFJlbW92ZSBhbiBlbGVtZW50IGZyb20gdGhpcyBibG9jaworICAgICAqIEBwYXJh
bSBlbnRyeSBkZWZpbmVzIHRoZSBlbGVtZW50IHRvIHJlbW92ZQorICAgICAqLworICAgIE9jdHJl
ZUJsb2NrLnByb3RvdHlwZS5yZW1vdmVFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkgeworICAgICAg
ICBpZiAodGhpcy5ibG9ja3MpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCB0aGlzLmJsb2Nrcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
YmxvY2sgPSB0aGlzLmJsb2Nrc1tpbmRleF07CisgICAgICAgICAgICAgICAgYmxvY2sucmVtb3Zl
RW50cnkoZW50cnkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHZhciBlbnRyeUluZGV4ID0gdGhpcy5lbnRyaWVzLmluZGV4T2YoZW50cnkp
OworICAgICAgICBpZiAoZW50cnlJbmRleCA+IC0xKSB7CisgICAgICAgICAgICB0aGlzLmVudHJp
ZXMuc3BsaWNlKGVudHJ5SW5kZXgsIDEpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGQgYW4gYXJyYXkgb2YgZWxlbWVudHMgdG8gdGhpcyBibG9jaworICAgICAqIEBwYXJh
bSBlbnRyaWVzIGRlZmluZXMgdGhlIGFycmF5IG9mIGVsZW1lbnRzIHRvIGFkZAorICAgICAqLwor
ICAgIE9jdHJlZUJsb2NrLnByb3RvdHlwZS5hZGRFbnRyaWVzID0gZnVuY3Rpb24gKGVudHJpZXMp
IHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBp
bmRleCsrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IGVudHJpZXNbaW5kZXhdOworICAgICAg
ICAgICAgdGhpcy5hZGRFbnRyeShtZXNoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogVGVzdCBpZiB0aGUgY3VycmVudCBibG9jayBpbnRlcnNlY3RzIHRoZSBmdXJzdHVtIHBs
YW5lcyBhbmQgaWYgeWVzLCB0aGVuIGFkZCBpdHMgY29udGVudCB0byB0aGUgc2VsZWN0aW9uIGFy
cmF5CisgICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgZGVmaW5lcyB0aGUgZnJ1c3R1bSBwbGFu
ZXMgdG8gdGVzdAorICAgICAqIEBwYXJhbSBzZWxlY3Rpb24gZGVmaW5lcyB0aGUgYXJyYXkgdG8g
c3RvcmUgY3VycmVudCBjb250ZW50IGlmIHNlbGVjdGlvbiBpcyBwb3NpdGl2ZQorICAgICAqIEBw
YXJhbSBhbGxvd0R1cGxpY2F0ZSBkZWZpbmVzIGlmIHRoZSBzZWxlY3Rpb24gYXJyYXkgY2FuIGNv
bnRhaW5zIGR1cGxpY2F0ZWQgZW50cmllcworICAgICAqLworICAgIE9jdHJlZUJsb2NrLnByb3Rv
dHlwZS5zZWxlY3QgPSBmdW5jdGlvbiAoZnJ1c3R1bVBsYW5lcywgc2VsZWN0aW9uLCBhbGxvd0R1
cGxpY2F0ZSkgeworICAgICAgICBpZiAoX0N1bGxpbmdfYm91bmRpbmdCb3hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siQm91bmRpbmdCb3giXS5Jc0luRnJ1c3R1bSh0aGlzLl9ib3VuZGlu
Z1ZlY3RvcnMsIGZydXN0dW1QbGFuZXMpKSB7CisgICAgICAgICAgICBpZiAodGhpcy5ibG9ja3Mp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5ibG9j
a3MubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBibG9jayA9IHRo
aXMuYmxvY2tzW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suc2VsZWN0KGZydXN0
dW1QbGFuZXMsIHNlbGVjdGlvbiwgYWxsb3dEdXBsaWNhdGUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
YWxsb3dEdXBsaWNhdGUpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24uY29uY2F0KHRoaXMu
ZW50cmllcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzZWxlY3Rpb24uY29uY2F0V2l0aE5vRHVwbGljYXRlKHRoaXMuZW50cmllcyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFRlc3QgaWYgdGhl
IGN1cnJlbnQgYmxvY2sgaW50ZXJzZWN0IHdpdGggdGhlIGdpdmVuIGJvdW5kaW5nIHNwaGVyZSBh
bmQgaWYgeWVzLCB0aGVuIGFkZCBpdHMgY29udGVudCB0byB0aGUgc2VsZWN0aW9uIGFycmF5Cisg
ICAgICogQHBhcmFtIHNwaGVyZUNlbnRlciBkZWZpbmVzIHRoZSBib3VuZGluZyBzcGhlcmUgY2Vu
dGVyCisgICAgICogQHBhcmFtIHNwaGVyZVJhZGl1cyBkZWZpbmVzIHRoZSBib3VuZGluZyBzcGhl
cmUgcmFkaXVzCisgICAgICogQHBhcmFtIHNlbGVjdGlvbiBkZWZpbmVzIHRoZSBhcnJheSB0byBz
dG9yZSBjdXJyZW50IGNvbnRlbnQgaWYgc2VsZWN0aW9uIGlzIHBvc2l0aXZlCisgICAgICogQHBh
cmFtIGFsbG93RHVwbGljYXRlIGRlZmluZXMgaWYgdGhlIHNlbGVjdGlvbiBhcnJheSBjYW4gY29u
dGFpbnMgZHVwbGljYXRlZCBlbnRyaWVzCisgICAgICovCisgICAgT2N0cmVlQmxvY2sucHJvdG90
eXBlLmludGVyc2VjdHMgPSBmdW5jdGlvbiAoc3BoZXJlQ2VudGVyLCBzcGhlcmVSYWRpdXMsIHNl
bGVjdGlvbiwgYWxsb3dEdXBsaWNhdGUpIHsKKyAgICAgICAgaWYgKF9DdWxsaW5nX2JvdW5kaW5n
Qm94X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkJvdW5kaW5nQm94Il0uSW50ZXJzZWN0
c1NwaGVyZSh0aGlzLl9taW5Qb2ludCwgdGhpcy5fbWF4UG9pbnQsIHNwaGVyZUNlbnRlciwgc3Bo
ZXJlUmFkaXVzKSkgeworICAgICAgICAgICAgaWYgKHRoaXMuYmxvY2tzKSB7CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYmxvY2tzLmxlbmd0aDsgaW5k
ZXgrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2sgPSB0aGlzLmJsb2Nrc1tpbmRl
eF07CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmludGVyc2VjdHMoc3BoZXJlQ2VudGVyLCBz
cGhlcmVSYWRpdXMsIHNlbGVjdGlvbiwgYWxsb3dEdXBsaWNhdGUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoYWxsb3dEdXBsaWNhdGUpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24uY29uY2F0KHRo
aXMuZW50cmllcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzZWxlY3Rpb24uY29uY2F0V2l0aE5vRHVwbGljYXRlKHRoaXMuZW50cmllcyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFRlc3QgaWYg
dGhlIGN1cnJlbnQgYmxvY2sgaW50ZXJzZWN0IHdpdGggdGhlIGdpdmVuIHJheSBhbmQgaWYgeWVz
LCB0aGVuIGFkZCBpdHMgY29udGVudCB0byB0aGUgc2VsZWN0aW9uIGFycmF5CisgICAgICogQHBh
cmFtIHJheSBkZWZpbmVzIHRoZSByYXkgdG8gdGVzdCB3aXRoCisgICAgICogQHBhcmFtIHNlbGVj
dGlvbiBkZWZpbmVzIHRoZSBhcnJheSB0byBzdG9yZSBjdXJyZW50IGNvbnRlbnQgaWYgc2VsZWN0
aW9uIGlzIHBvc2l0aXZlCisgICAgICovCisgICAgT2N0cmVlQmxvY2sucHJvdG90eXBlLmludGVy
c2VjdHNSYXkgPSBmdW5jdGlvbiAocmF5LCBzZWxlY3Rpb24pIHsKKyAgICAgICAgaWYgKHJheS5p
bnRlcnNlY3RzQm94TWluTWF4KHRoaXMuX21pblBvaW50LCB0aGlzLl9tYXhQb2ludCkpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmJsb2NrcykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGlu
ZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJsb2Nrcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGJsb2NrID0gdGhpcy5ibG9ja3NbaW5kZXhdOworICAgICAgICAgICAg
ICAgICAgICBibG9jay5pbnRlcnNlY3RzUmF5KHJheSwgc2VsZWN0aW9uKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgc2VsZWN0aW9uLmNvbmNhdFdpdGhOb0R1cGxpY2F0ZSh0aGlzLmVudHJpZXMpOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTdWJkaXZpZGUgdGhlIGNvbnRlbnQgaW50byBj
aGlsZCBibG9ja3MgKHRoaXMgYmxvY2sgd2lsbCB0aGVuIGJlIGVtcHR5KQorICAgICAqLworICAg
IE9jdHJlZUJsb2NrLnByb3RvdHlwZS5jcmVhdGVJbm5lckJsb2NrcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgT2N0cmVlQmxvY2suX0NyZWF0ZUJsb2Nrcyh0aGlzLl9taW5Qb2ludCwgdGhpcy5f
bWF4UG9pbnQsIHRoaXMuZW50cmllcywgdGhpcy5fY2FwYWNpdHksIHRoaXMuX2RlcHRoLCB0aGlz
Ll9tYXhEZXB0aCwgdGhpcywgdGhpcy5fY3JlYXRpb25GdW5jKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBPY3RyZWVCbG9jay5fQ3JlYXRlQmxvY2tzID0g
ZnVuY3Rpb24gKHdvcmxkTWluLCB3b3JsZE1heCwgZW50cmllcywgbWF4QmxvY2tDYXBhY2l0eSwg
Y3VycmVudERlcHRoLCBtYXhEZXB0aCwgdGFyZ2V0LCBjcmVhdGlvbkZ1bmMpIHsKKyAgICAgICAg
dGFyZ2V0LmJsb2NrcyA9IG5ldyBBcnJheSgpOworICAgICAgICB2YXIgYmxvY2tTaXplID0gbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0oKHdvcmxkTWF4LnggLSB3b3JsZE1pbi54KSAvIDIsICh3b3JsZE1heC55IC0gd29ybGRNaW4u
eSkgLyAyLCAod29ybGRNYXgueiAtIHdvcmxkTWluLnopIC8gMik7CisgICAgICAgIC8vIFNlZ21l
bnRpbmcgc3BhY2UKKyAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCAyOyB4KyspIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgMjsgeSsrKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgeiA9IDA7IHogPCAyOyB6KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2Fs
TWluID0gd29ybGRNaW4uYWRkKGJsb2NrU2l6ZS5tdWx0aXBseUJ5RmxvYXRzKHgsIHksIHopKTsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2FsTWF4ID0gd29ybGRNaW4uYWRkKGJsb2NrU2l6
ZS5tdWx0aXBseUJ5RmxvYXRzKHggKyAxLCB5ICsgMSwgeiArIDEpKTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGJsb2NrID0gbmV3IE9jdHJlZUJsb2NrKGxvY2FsTWluLCBsb2NhbE1heCwgbWF4
QmxvY2tDYXBhY2l0eSwgY3VycmVudERlcHRoICsgMSwgbWF4RGVwdGgsIGNyZWF0aW9uRnVuYyk7
CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmFkZEVudHJpZXMoZW50cmllcyk7CisgICAgICAg
ICAgICAgICAgICAgIHRhcmdldC5ibG9ja3MucHVzaChibG9jayk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gT2N0cmVlQmxv
Y2s7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0N1bGxpbmcvT2N0cmVlcy9v
Y3RyZWVTY2VuZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DdWxsaW5nL09jdHJlZXMvb2N0cmVl
U2NlbmVDb21wb25lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBPY3RyZWVTY2VuZUNv
bXBvbmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPY3RyZWVTY2Vu
ZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gT2N0cmVlU2NlbmVDb21wb25lbnQ7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc2NlbmUgKi8gIi4vc2NlbmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9hYnN0cmFjdE1l
c2ggKi8gIi4vTWVzaGVzL2Fic3RyYWN0TWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9DdWxsaW5nX3JheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vQ3VsbGluZy9yYXkgKi8gIi4vQ3VsbGluZy9yYXkudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3NjZW5lQ29tcG9u
ZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X29jdHJlZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9vY3RyZWUgKi8gIi4vQ3VsbGluZy9PY3RyZWVzL29jdHJlZS50cyIpOworCisKKwor
CisKKworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lIl0ucHJvdG90
eXBlLmNyZWF0ZU9yVXBkYXRlU2VsZWN0aW9uT2N0cmVlID0gZnVuY3Rpb24gKG1heENhcGFjaXR5
LCBtYXhEZXB0aCkgeworICAgIGlmIChtYXhDYXBhY2l0eSA9PT0gdm9pZCAwKSB7IG1heENhcGFj
aXR5ID0gNjQ7IH0KKyAgICBpZiAobWF4RGVwdGggPT09IHZvaWQgMCkgeyBtYXhEZXB0aCA9IDI7
IH0KKyAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVu
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJd
Lk5BTUVfT0NUUkVFKTsKKyAgICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICBjb21wb25lbnQg
PSBuZXcgT2N0cmVlU2NlbmVDb21wb25lbnQodGhpcyk7CisgICAgICAgIHRoaXMuX2FkZENvbXBv
bmVudChjb21wb25lbnQpOworICAgIH0KKyAgICBpZiAoIXRoaXMuX3NlbGVjdGlvbk9jdHJlZSkg
eworICAgICAgICB0aGlzLl9zZWxlY3Rpb25PY3RyZWUgPSBuZXcgX29jdHJlZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJPY3RyZWUiXShfb2N0cmVlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIk9jdHJlZSJdLkNyZWF0aW9uRnVuY0Zvck1lc2hlcywgbWF4Q2FwYWNpdHksIG1h
eERlcHRoKTsKKyAgICB9CisgICAgdmFyIHdvcmxkRXh0ZW5kcyA9IHRoaXMuZ2V0V29ybGRFeHRl
bmRzKCk7CisgICAgLy8gVXBkYXRlIG9jdHJlZQorICAgIHRoaXMuX3NlbGVjdGlvbk9jdHJlZS51
cGRhdGUod29ybGRFeHRlbmRzLm1pbiwgd29ybGRFeHRlbmRzLm1heCwgdGhpcy5tZXNoZXMpOwor
ICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25PY3RyZWU7Cit9OworT2JqZWN0LmRlZmluZVByb3Bl
cnR5KF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2VuZSJdLnByb3RvdHlw
ZSwgInNlbGVjdGlvbk9jdHJlZSIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX3NlbGVjdGlvbk9jdHJlZTsKKyAgICB9LAorICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgY29uZmlndXJhYmxlOiB0cnVlCit9KTsKKy8qKgorICogVGhpcyBmdW5jdGlvbiB3
aWxsIGNyZWF0ZSBhbiBvY3RyZWUgdG8gaGVscCB0byBzZWxlY3QgdGhlIHJpZ2h0IHN1Ym1lc2hl
cyBmb3IgcmVuZGVyaW5nLCBwaWNraW5nIGFuZCBjb2xsaXNpb24gY29tcHV0YXRpb25zLgorICog
UGxlYXNlIG5vdGUgdGhhdCB5b3UgbXVzdCBoYXZlIGEgZGVjZW50IG51bWJlciBvZiBzdWJtZXNo
ZXMgdG8gZ2V0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyB3aGVuIHVzaW5nIGFuIG9jdHJlZQor
ICogQHBhcmFtIG1heENhcGFjaXR5IGRlZmluZXMgdGhlIG1heGltdW0gc2l6ZSBvZiBlYWNoIGJs
b2NrICg2NCBieSBkZWZhdWx0KQorICogQHBhcmFtIG1heERlcHRoIGRlZmluZXMgdGhlIG1heGlt
dW0gZGVwdGggdG8gdXNlIChubyBtb3JlIHRoYW4gMiBsZXZlbHMgYnkgZGVmYXVsdCkKKyAqIEBy
ZXR1cm5zIHRoZSBuZXcgb2N0cmVlCisgKiBAc2VlIGh0dHBzOi8vd3d3LmJhYnlsb25qcy1wbGF5
Z3JvdW5kLmNvbS8jTkE0T1EjMTIKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hv
d190by9vcHRpbWl6aW5nX3lvdXJfc2NlbmVfd2l0aF9vY3RyZWVzCisgKi8KK19NZXNoZXNfYWJz
dHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFic3RyYWN0TWVzaCJdLnBy
b3RvdHlwZS5jcmVhdGVPclVwZGF0ZVN1Ym1lc2hlc09jdHJlZSA9IGZ1bmN0aW9uIChtYXhDYXBh
Y2l0eSwgbWF4RGVwdGgpIHsKKyAgICBpZiAobWF4Q2FwYWNpdHkgPT09IHZvaWQgMCkgeyBtYXhD
YXBhY2l0eSA9IDY0OyB9CisgICAgaWYgKG1heERlcHRoID09PSB2b2lkIDApIHsgbWF4RGVwdGgg
PSAyOyB9CisgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgIHZhciBjb21wb25l
bnQgPSBzY2VuZS5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfT0NUUkVFKTsKKyAg
ICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICBjb21wb25lbnQgPSBuZXcgT2N0cmVlU2NlbmVD
b21wb25lbnQoc2NlbmUpOworICAgICAgICBzY2VuZS5fYWRkQ29tcG9uZW50KGNvbXBvbmVudCk7
CisgICAgfQorICAgIGlmICghdGhpcy5fc3VibWVzaGVzT2N0cmVlKSB7CisgICAgICAgIHRoaXMu
X3N1Ym1lc2hlc09jdHJlZSA9IG5ldyBfb2N0cmVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIk9jdHJlZSJdKF9vY3RyZWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siT2N0cmVl
Il0uQ3JlYXRpb25GdW5jRm9yU3ViTWVzaGVzLCBtYXhDYXBhY2l0eSwgbWF4RGVwdGgpOworICAg
IH0KKyAgICB0aGlzLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAgICB2YXIgYm91bmRpbmdJ
bmZvID0gdGhpcy5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAvLyBVcGRhdGUgb2N0cmVlCisgICAg
dmFyIGJib3ggPSBib3VuZGluZ0luZm8uYm91bmRpbmdCb3g7CisgICAgdGhpcy5fc3VibWVzaGVz
T2N0cmVlLnVwZGF0ZShiYm94Lm1pbmltdW1Xb3JsZCwgYmJveC5tYXhpbXVtV29ybGQsIHRoaXMu
c3ViTWVzaGVzKTsKKyAgICByZXR1cm4gdGhpcy5fc3VibWVzaGVzT2N0cmVlOworfTsKKy8qKgor
ICogRGVmaW5lcyB0aGUgb2N0cmVlIHNjZW5lIGNvbXBvbmVudCByZXNwb25zaWJsZSB0byBtYW5h
Z2UgYW55IG9jdHJlZXMKKyAqIGluIGEgZ2l2ZW4gc2NlbmUuCisgKi8KK3ZhciBPY3RyZWVTY2Vu
ZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgZm9yIHRoZSBnaXZlbiBz
Y2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0byByZWdpc3RlciB0
aGUgY29tcG9uZW50IGluCisgICAgICovCisgICAgZnVuY3Rpb24gT2N0cmVlU2NlbmVDb21wb25l
bnQoc2NlbmUpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjb21wb25lbnQgbmFtZSBo
ZWxwIHRvIGlkZW50aWZ5IHRoZSBjb21wb25lbnQgaW4gdGhlIGxpc3Qgb2Ygc2NlbmUgY29tcG9u
ZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubmFtZSA9IF9zY2VuZUNvbXBvbmVudF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5B
TUVfT0NUUkVFOworICAgICAgICAvKioKKyAgICAgICAgICogSW5kaWNhdGVzIGlmIHRoZSBtZXNo
ZXMgaGF2ZSBiZWVuIGNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGlzRW5hYmxlZCgpCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmNoZWNrc0lzRW5hYmxlZCA9IHRydWU7CisgICAgICAg
IHRoaXMuX3RlbXBSYXkgPSBuZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlJheSJdKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJWZWN0b3IzIl0uWmVybygpLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXSgxLCAxLCAxKSk7CisgICAgICAgIHRoaXMuc2Nl
bmUgPSBzY2VuZTsKKyAgICAgICAgdGhpcy5zY2VuZS5nZXRBY3RpdmVNZXNoQ2FuZGlkYXRlcyA9
IHRoaXMuZ2V0QWN0aXZlTWVzaENhbmRpZGF0ZXMuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5z
Y2VuZS5nZXRBY3RpdmVTdWJNZXNoQ2FuZGlkYXRlcyA9IHRoaXMuZ2V0QWN0aXZlU3ViTWVzaENh
bmRpZGF0ZXMuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5zY2VuZS5nZXRDb2xsaWRpbmdTdWJN
ZXNoQ2FuZGlkYXRlcyA9IHRoaXMuZ2V0Q29sbGlkaW5nU3ViTWVzaENhbmRpZGF0ZXMuYmluZCh0
aGlzKTsKKyAgICAgICAgdGhpcy5zY2VuZS5nZXRJbnRlcnNlY3RpbmdTdWJNZXNoQ2FuZGlkYXRl
cyA9IHRoaXMuZ2V0SW50ZXJzZWN0aW5nU3ViTWVzaENhbmRpZGF0ZXMuYmluZCh0aGlzKTsKKyAg
ICB9CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25lbnQgaW4gYSBnaXZlbiBz
Y2VuZQorICAgICAqLworICAgIE9jdHJlZVNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWdpc3Rl
ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhp
cy5zY2VuZS5vbk1lc2hSZW1vdmVkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKG1lc2gpIHsKKyAg
ICAgICAgICAgIHZhciBzY2VuZU9jdHJlZSA9IF90aGlzLnNjZW5lLnNlbGVjdGlvbk9jdHJlZTsK
KyAgICAgICAgICAgIGlmIChzY2VuZU9jdHJlZSAhPT0gdW5kZWZpbmVkICYmIHNjZW5lT2N0cmVl
ICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2NlbmVPY3RyZWUuZHlu
YW1pY0NvbnRlbnQuaW5kZXhPZihtZXNoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09
IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lT2N0cmVlLmR5bmFtaWNDb250ZW50LnNw
bGljZShpbmRleCwgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5zY2VuZS5vbk1lc2hJbXBvcnRlZE9ic2VydmFibGUuYWRkKGZ1
bmN0aW9uIChtZXNoKSB7CisgICAgICAgICAgICB2YXIgc2NlbmVPY3RyZWUgPSBfdGhpcy5zY2Vu
ZS5zZWxlY3Rpb25PY3RyZWU7CisgICAgICAgICAgICBpZiAoc2NlbmVPY3RyZWUgIT09IHVuZGVm
aW5lZCAmJiBzY2VuZU9jdHJlZSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNjZW5lT2N0
cmVlLmFkZE1lc2gobWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBsaXN0IG9mIGFjdGl2ZSBtZXNoZXMKKyAgICAgKiBA
cmV0dXJucyB0aGUgbGlzdCBvZiBhY3RpdmUgbWVzaGVzCisgICAgICovCisgICAgT2N0cmVlU2Nl
bmVDb21wb25lbnQucHJvdG90eXBlLmdldEFjdGl2ZU1lc2hDYW5kaWRhdGVzID0gZnVuY3Rpb24g
KCkgeworICAgICAgICBpZiAodGhpcy5zY2VuZS5fc2VsZWN0aW9uT2N0cmVlKSB7CisgICAgICAg
ICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5zY2VuZS5fc2VsZWN0aW9uT2N0cmVlLnNlbGVjdCh0
aGlzLnNjZW5lLmZydXN0dW1QbGFuZXMpOworICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5zY2VuZS5fZ2V0RGVmYXVsdE1lc2hDYW5k
aWRhdGVzKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgYWN0
aXZlIHN1YiBtZXNoZXMKKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0byBnZXQgdGhlIGNh
bmRpZGF0ZXMgc3ViIG1lc2hlcyBmcm9tCisgICAgICogQHJldHVybnMgdGhlIGxpc3Qgb2YgYWN0
aXZlIHN1YiBtZXNoZXMKKyAgICAgKi8KKyAgICBPY3RyZWVTY2VuZUNvbXBvbmVudC5wcm90b3R5
cGUuZ2V0QWN0aXZlU3ViTWVzaENhbmRpZGF0ZXMgPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAg
ICBpZiAobWVzaC5fc3VibWVzaGVzT2N0cmVlICYmIG1lc2gudXNlT2N0cmVlRm9yUmVuZGVyaW5n
U2VsZWN0aW9uKSB7CisgICAgICAgICAgICB2YXIgaW50ZXJzZWN0aW9ucyA9IG1lc2guX3N1Ym1l
c2hlc09jdHJlZS5zZWxlY3QodGhpcy5zY2VuZS5mcnVzdHVtUGxhbmVzKTsKKyAgICAgICAgICAg
IHJldHVybiBpbnRlcnNlY3Rpb25zOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLnNj
ZW5lLl9nZXREZWZhdWx0U3ViTWVzaENhbmRpZGF0ZXMobWVzaCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2Ygc3ViIG1lc2hlcyBpbnRlcnNlY3Rpbmcgd2l0aCBh
IGdpdmVuIGxvY2FsIHJheQorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIG1lc2ggdG8g
ZmluZCB0aGUgc3VibWVzaCBmb3IKKyAgICAgKiBAcGFyYW0gbG9jYWxSYXkgZGVmaW5lcyB0aGUg
cmF5IGluIGxvY2FsIHNwYWNlCisgICAgICogQHJldHVybnMgdGhlIGxpc3Qgb2YgaW50ZXJzZWN0
aW5nIHN1YiBtZXNoZXMKKyAgICAgKi8KKyAgICBPY3RyZWVTY2VuZUNvbXBvbmVudC5wcm90b3R5
cGUuZ2V0SW50ZXJzZWN0aW5nU3ViTWVzaENhbmRpZGF0ZXMgPSBmdW5jdGlvbiAobWVzaCwgbG9j
YWxSYXkpIHsKKyAgICAgICAgaWYgKG1lc2guX3N1Ym1lc2hlc09jdHJlZSAmJiBtZXNoLnVzZU9j
dHJlZUZvclBpY2tpbmcpIHsKKyAgICAgICAgICAgIF9DdWxsaW5nX3JheV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJSYXkiXS5UcmFuc2Zvcm1Ub1JlZihsb2NhbFJheSwgbWVzaC5nZXRX
b3JsZE1hdHJpeCgpLCB0aGlzLl90ZW1wUmF5KTsKKyAgICAgICAgICAgIHZhciBpbnRlcnNlY3Rp
b25zID0gbWVzaC5fc3VibWVzaGVzT2N0cmVlLmludGVyc2VjdHNSYXkodGhpcy5fdGVtcFJheSk7
CisgICAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uczsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5zY2VuZS5fZ2V0RGVmYXVsdFN1Yk1lc2hDYW5kaWRhdGVzKG1lc2gpOworICAg
IH07CisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBsaXN0IG9mIHN1YiBtZXNoZXMgY29sbGlk
aW5nIHdpdGggYSBjb2xsaWRlcgorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIG1lc2gg
dG8gZmluZCB0aGUgc3VibWVzaCBmb3IKKyAgICAgKiBAcGFyYW0gY29sbGlkZXIgZGVmaW5lcyB0
aGUgY29sbGlkZXIgdG8gZXZhbHVhdGUgdGhlIGNvbGxpc2lvbiBhZ2FpbnN0CisgICAgICogQHJl
dHVybnMgdGhlIGxpc3Qgb2YgY29sbGlkaW5nIHN1YiBtZXNoZXMKKyAgICAgKi8KKyAgICBPY3Ry
ZWVTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuZ2V0Q29sbGlkaW5nU3ViTWVzaENhbmRpZGF0ZXMg
PSBmdW5jdGlvbiAobWVzaCwgY29sbGlkZXIpIHsKKyAgICAgICAgaWYgKG1lc2guX3N1Ym1lc2hl
c09jdHJlZSAmJiBtZXNoLnVzZU9jdHJlZUZvckNvbGxpc2lvbnMpIHsKKyAgICAgICAgICAgIHZh
ciByYWRpdXMgPSBjb2xsaWRlci5fdmVsb2NpdHlXb3JsZExlbmd0aCArIE1hdGgubWF4KGNvbGxp
ZGVyLl9yYWRpdXMueCwgY29sbGlkZXIuX3JhZGl1cy55LCBjb2xsaWRlci5fcmFkaXVzLnopOwor
ICAgICAgICAgICAgdmFyIGludGVyc2VjdGlvbnMgPSBtZXNoLl9zdWJtZXNoZXNPY3RyZWUuaW50
ZXJzZWN0cyhjb2xsaWRlci5fYmFzZVBvaW50V29ybGQsIHJhZGl1cyk7CisgICAgICAgICAgICBy
ZXR1cm4gaW50ZXJzZWN0aW9uczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5zY2Vu
ZS5fZ2V0RGVmYXVsdFN1Yk1lc2hDYW5kaWRhdGVzKG1lc2gpOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmVidWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4g
Y2FzZSBvZgorICAgICAqIGNvbnRleHQgbG9zdCBmb3IgaW5zdGFuY2UuCisgICAgICovCisgICAg
T2N0cmVlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLnJlYnVpbGQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICB9OworICAgIC8qKgorICAgICAqIERp
c3Bvc2VzIHRoZSBjb21wb25lbnQgYW5kIHRoZSBhc3NvY2lhdGVkIHJlc3NvdXJjZXMuCisgICAg
ICovCisgICAgT2N0cmVlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICB9OworICAgIHJldHVy
biBPY3RyZWVTY2VuZUNvbXBvbmVudDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vQ3VsbGluZy9ib3VuZGluZ0JveC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vQ3VsbGluZy9ib3VuZGluZ0JveC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBCb3Vu
ZGluZ0JveCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb3VuZGluZ0Jv
eCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQm91bmRpbmdCb3g7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvYXJyYXlUb29scyAqLyAiLi9NaXNjL2Fy
cmF5VG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNv
bnN0YW50cyAqLyAiLi9NYXRocy9tYXRoLmNvbnN0YW50cy50cyIpOworCisKKworLyoqCisgKiBD
bGFzcyB1c2VkIHRvIHN0b3JlIGJvdW5kaW5nIGJveCBpbmZvcm1hdGlvbgorICovCit2YXIgQm91
bmRpbmdCb3ggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIG5ldyBib3VuZGluZyBib3gKKyAgICAgKiBAcGFyYW0gbWluIGRlZmluZXMgdGhl
IG1pbmltdW0gdmVjdG9yIChpbiBsb2NhbCBzcGFjZSkKKyAgICAgKiBAcGFyYW0gbWF4IGRlZmlu
ZXMgdGhlIG1heGltdW0gdmVjdG9yIChpbiBsb2NhbCBzcGFjZSkKKyAgICAgKiBAcGFyYW0gd29y
bGRNYXRyaXggZGVmaW5lcyB0aGUgbmV3IHdvcmxkIG1hdHJpeAorICAgICAqLworICAgIGZ1bmN0
aW9uIEJvdW5kaW5nQm94KG1pbiwgbWF4LCB3b3JsZE1hdHJpeCkgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgOCB2ZWN0b3JzIHJlcHJlc2VudGluZyB0aGUgYm91bmRpbmcgYm94
IGluIGxvY2FsIHNwYWNlCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZlY3RvcnMgPSBfTWlz
Y19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFycmF5VG9vbHMiXS5C
dWlsZEFycmF5KDgsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJWZWN0b3IzIl0uWmVybyk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBj
ZW50ZXIgb2YgdGhlIGJvdW5kaW5nIGJveCBpbiBsb2NhbCBzcGFjZQorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5jZW50ZXIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIGNlbnRlciBvZiB0aGUgYm91bmRpbmcgYm94IGluIHdvcmxkIHNwYWNlCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmNlbnRlcldvcmxkID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHRoZSBleHRlbmQgc2l6ZSBpbiBsb2NhbCBzcGFjZQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5leHRlbmRTaXplID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSBleHRlbmQgc2l6ZSBpbiB3b3JsZCBzcGFjZQorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5leHRlbmRTaXplV29ybGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIE9CQiAob2JqZWN0IGJvdW5kaW5nIGJveCkgZGlyZWN0aW9ucwor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaXJlY3Rpb25zID0gX01pc2NfYXJyYXlUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBcnJheVRvb2xzIl0uQnVpbGRBcnJheSgzLCBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJd
Llplcm8pOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgOCB2ZWN0b3JzIHJlcHJl
c2VudGluZyB0aGUgYm91bmRpbmcgYm94IGluIHdvcmxkIHNwYWNlCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLnZlY3RvcnNXb3JsZCA9IF9NaXNjX2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siQXJyYXlUb29scyJdLkJ1aWxkQXJyYXkoOCwgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG1pbmltdW0gdmVjdG9yIGluIHdvcmxkIHNwYWNl
CisgICAgICAgICAqLworICAgICAgICB0aGlzLm1pbmltdW1Xb3JsZCA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybygpOworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbWF4aW11bSB2ZWN0b3IgaW4gd29ybGQgc3Bh
Y2UKKyAgICAgICAgICovCisgICAgICAgIHRoaXMubWF4aW11bVdvcmxkID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBtaW5pbXVtIHZlY3RvciBpbiBsb2NhbCBz
cGFjZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5taW5pbXVtID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIHZlY3RvciBpbiBsb2NhbCBzcGFj
ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tYXhpbXVtID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAg
IHRoaXMucmVDb25zdHJ1Y3QobWluLCBtYXgsIHdvcmxkTWF0cml4KTsKKyAgICB9CisgICAgLy8g
TWV0aG9kcworICAgIC8qKgorICAgICAqIFJlY3JlYXRlcyB0aGUgZW50aXJlIGJvdW5kaW5nIGJv
eCBmcm9tIHNjcmF0Y2ggYXMgaWYgd2UgY2FsbCB0aGUgY29uc3RydWN0b3IgaW4gcGxhY2UKKyAg
ICAgKiBAcGFyYW0gbWluIGRlZmluZXMgdGhlIG5ldyBtaW5pbXVtIHZlY3RvciAoaW4gbG9jYWwg
c3BhY2UpCisgICAgICogQHBhcmFtIG1heCBkZWZpbmVzIHRoZSBuZXcgbWF4aW11bSB2ZWN0b3Ig
KGluIGxvY2FsIHNwYWNlKQorICAgICAqIEBwYXJhbSB3b3JsZE1hdHJpeCBkZWZpbmVzIHRoZSBu
ZXcgd29ybGQgbWF0cml4CisgICAgICovCisgICAgQm91bmRpbmdCb3gucHJvdG90eXBlLnJlQ29u
c3RydWN0ID0gZnVuY3Rpb24gKG1pbiwgbWF4LCB3b3JsZE1hdHJpeCkgeworICAgICAgICB2YXIg
bWluWCA9IG1pbi54LCBtaW5ZID0gbWluLnksIG1pblogPSBtaW4ueiwgbWF4WCA9IG1heC54LCBt
YXhZID0gbWF4LnksIG1heFogPSBtYXguejsKKyAgICAgICAgdmFyIHZlY3RvcnMgPSB0aGlzLnZl
Y3RvcnM7CisgICAgICAgIHRoaXMubWluaW11bS5jb3B5RnJvbUZsb2F0cyhtaW5YLCBtaW5ZLCBt
aW5aKTsKKyAgICAgICAgdGhpcy5tYXhpbXVtLmNvcHlGcm9tRmxvYXRzKG1heFgsIG1heFksIG1h
eFopOworICAgICAgICB2ZWN0b3JzWzBdLmNvcHlGcm9tRmxvYXRzKG1pblgsIG1pblksIG1pblop
OworICAgICAgICB2ZWN0b3JzWzFdLmNvcHlGcm9tRmxvYXRzKG1heFgsIG1heFksIG1heFopOwor
ICAgICAgICB2ZWN0b3JzWzJdLmNvcHlGcm9tRmxvYXRzKG1heFgsIG1pblksIG1pblopOworICAg
ICAgICB2ZWN0b3JzWzNdLmNvcHlGcm9tRmxvYXRzKG1pblgsIG1heFksIG1pblopOworICAgICAg
ICB2ZWN0b3JzWzRdLmNvcHlGcm9tRmxvYXRzKG1pblgsIG1pblksIG1heFopOworICAgICAgICB2
ZWN0b3JzWzVdLmNvcHlGcm9tRmxvYXRzKG1heFgsIG1heFksIG1pblopOworICAgICAgICB2ZWN0
b3JzWzZdLmNvcHlGcm9tRmxvYXRzKG1pblgsIG1heFksIG1heFopOworICAgICAgICB2ZWN0b3Jz
WzddLmNvcHlGcm9tRmxvYXRzKG1heFgsIG1pblksIG1heFopOworICAgICAgICAvLyBPQkIKKyAg
ICAgICAgbWF4LmFkZFRvUmVmKG1pbiwgdGhpcy5jZW50ZXIpLnNjYWxlSW5QbGFjZSgwLjUpOwor
ICAgICAgICBtYXguc3VidHJhY3RUb1JlZihtaW4sIHRoaXMuZXh0ZW5kU2l6ZSkuc2NhbGVJblBs
YWNlKDAuNSk7CisgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4ID0gd29ybGRNYXRyaXggfHwgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLklk
ZW50aXR5UmVhZE9ubHk7CisgICAgICAgIHRoaXMuX3VwZGF0ZSh0aGlzLl93b3JsZE1hdHJpeCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0aGUgY3VycmVudCBib3VuZGluZyBib3gg
YnkgYXBwbHlpbmcgYSBzY2FsZSBmYWN0b3IKKyAgICAgKiBAcGFyYW0gZmFjdG9yIGRlZmluZXMg
dGhlIHNjYWxlIGZhY3RvciB0byBhcHBseQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IGJv
dW5kaW5nIGJveAorICAgICAqLworICAgIEJvdW5kaW5nQm94LnByb3RvdHlwZS5zY2FsZSA9IGZ1
bmN0aW9uIChmYWN0b3IpIHsKKyAgICAgICAgdmFyIHRtcFZlY3RvcnMgPSBCb3VuZGluZ0JveC5U
bXBWZWN0b3IzOworICAgICAgICB2YXIgZGlmZiA9IHRoaXMubWF4aW11bS5zdWJ0cmFjdFRvUmVm
KHRoaXMubWluaW11bSwgdG1wVmVjdG9yc1swXSk7CisgICAgICAgIHZhciBsZW4gPSBkaWZmLmxl
bmd0aCgpOworICAgICAgICBkaWZmLm5vcm1hbGl6ZUZyb21MZW5ndGgobGVuKTsKKyAgICAgICAg
dmFyIGRpc3RhbmNlID0gbGVuICogZmFjdG9yOworICAgICAgICB2YXIgbmV3UmFkaXVzID0gZGlm
Zi5zY2FsZUluUGxhY2UoZGlzdGFuY2UgKiAwLjUpOworICAgICAgICB2YXIgbWluID0gdGhpcy5j
ZW50ZXIuc3VidHJhY3RUb1JlZihuZXdSYWRpdXMsIHRtcFZlY3RvcnNbMV0pOworICAgICAgICB2
YXIgbWF4ID0gdGhpcy5jZW50ZXIuYWRkVG9SZWYobmV3UmFkaXVzLCB0bXBWZWN0b3JzWzJdKTsK
KyAgICAgICAgdGhpcy5yZUNvbnN0cnVjdChtaW4sIG1heCwgdGhpcy5fd29ybGRNYXRyaXgpOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHdv
cmxkIG1hdHJpeCBvZiB0aGUgYm91bmRpbmcgYm94CisgICAgICogQHJldHVybnMgYSBtYXRyaXgK
KyAgICAgKi8KKyAgICBCb3VuZGluZ0JveC5wcm90b3R5cGUuZ2V0V29ybGRNYXRyaXggPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl93b3JsZE1hdHJpeDsKKyAgICB9OworICAg
IC8qKiBAaGlkZGVuICovCisgICAgQm91bmRpbmdCb3gucHJvdG90eXBlLl91cGRhdGUgPSBmdW5j
dGlvbiAod29ybGQpIHsKKyAgICAgICAgdmFyIG1pbldvcmxkID0gdGhpcy5taW5pbXVtV29ybGQ7
CisgICAgICAgIHZhciBtYXhXb3JsZCA9IHRoaXMubWF4aW11bVdvcmxkOworICAgICAgICB2YXIg
ZGlyZWN0aW9ucyA9IHRoaXMuZGlyZWN0aW9uczsKKyAgICAgICAgdmFyIHZlY3RvcnNXb3JsZCA9
IHRoaXMudmVjdG9yc1dvcmxkOworICAgICAgICB2YXIgdmVjdG9ycyA9IHRoaXMudmVjdG9yczsK
KyAgICAgICAgaWYgKCF3b3JsZC5pc0lkZW50aXR5KCkpIHsKKyAgICAgICAgICAgIG1pbldvcmxk
LnNldEFsbChOdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICAgICAgICAgIG1heFdvcmxkLnNldEFsbCgt
TnVtYmVyLk1BWF9WQUxVRSk7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4
IDwgODsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIHZhciB2ID0gdmVjdG9yc1dvcmxkW2lu
ZGV4XTsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYodmVjdG9y
c1tpbmRleF0sIHdvcmxkLCB2KTsKKyAgICAgICAgICAgICAgICBtaW5Xb3JsZC5taW5pbWl6ZUlu
UGxhY2Uodik7CisgICAgICAgICAgICAgICAgbWF4V29ybGQubWF4aW1pemVJblBsYWNlKHYpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRXh0ZW5kCisgICAgICAgICAgICBtYXhXb3Js
ZC5zdWJ0cmFjdFRvUmVmKG1pbldvcmxkLCB0aGlzLmV4dGVuZFNpemVXb3JsZCkuc2NhbGVJblBs
YWNlKDAuNSk7CisgICAgICAgICAgICBtYXhXb3JsZC5hZGRUb1JlZihtaW5Xb3JsZCwgdGhpcy5j
ZW50ZXJXb3JsZCkuc2NhbGVJblBsYWNlKDAuNSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBtaW5Xb3JsZC5jb3B5RnJvbSh0aGlzLm1pbmltdW0pOworICAgICAgICAg
ICAgbWF4V29ybGQuY29weUZyb20odGhpcy5tYXhpbXVtKTsKKyAgICAgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCA4OyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgdmVjdG9y
c1dvcmxkW2luZGV4XS5jb3B5RnJvbSh2ZWN0b3JzW2luZGV4XSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBFeHRlbmQKKyAgICAgICAgICAgIHRoaXMuZXh0ZW5kU2l6ZVdvcmxkLmNv
cHlGcm9tKHRoaXMuZXh0ZW5kU2l6ZSk7CisgICAgICAgICAgICB0aGlzLmNlbnRlcldvcmxkLmNv
cHlGcm9tKHRoaXMuY2VudGVyKTsKKyAgICAgICAgfQorICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVm
KHdvcmxkLm0sIDAsIGRpcmVjdGlvbnNbMF0pOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKHdv
cmxkLm0sIDQsIGRpcmVjdGlvbnNbMV0pOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKHdvcmxk
Lm0sIDgsIGRpcmVjdGlvbnNbMl0pOworICAgICAgICB0aGlzLl93b3JsZE1hdHJpeCA9IHdvcmxk
OworICAgIH07CisgICAgLyoqCisgICAgICogVGVzdHMgaWYgdGhlIGJvdW5kaW5nIGJveCBpcyBp
bnRlcnNlY3RpbmcgdGhlIGZydXN0dW0gcGxhbmVzCisgICAgICogQHBhcmFtIGZydXN0dW1QbGFu
ZXMgZGVmaW5lcyB0aGUgZnJ1c3R1bSBwbGFuZXMgdG8gdGVzdAorICAgICAqIEByZXR1cm5zIHRy
dWUgaWYgdGhlcmUgaXMgYW4gaW50ZXJzZWN0aW9uCisgICAgICovCisgICAgQm91bmRpbmdCb3gu
cHJvdG90eXBlLmlzSW5GcnVzdHVtID0gZnVuY3Rpb24gKGZydXN0dW1QbGFuZXMpIHsKKyAgICAg
ICAgcmV0dXJuIEJvdW5kaW5nQm94LklzSW5GcnVzdHVtKHRoaXMudmVjdG9yc1dvcmxkLCBmcnVz
dHVtUGxhbmVzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRlc3RzIGlmIHRoZSBib3VuZGlu
ZyBib3ggaXMgZW50aXJlbHkgaW5zaWRlIHRoZSBmcnVzdHVtIHBsYW5lcworICAgICAqIEBwYXJh
bSBmcnVzdHVtUGxhbmVzIGRlZmluZXMgdGhlIGZydXN0dW0gcGxhbmVzIHRvIHRlc3QKKyAgICAg
KiBAcmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGluY2x1c2lvbgorICAgICAqLworICAgIEJv
dW5kaW5nQm94LnByb3RvdHlwZS5pc0NvbXBsZXRlbHlJbkZydXN0dW0gPSBmdW5jdGlvbiAoZnJ1
c3R1bVBsYW5lcykgeworICAgICAgICByZXR1cm4gQm91bmRpbmdCb3guSXNDb21wbGV0ZWx5SW5G
cnVzdHVtKHRoaXMudmVjdG9yc1dvcmxkLCBmcnVzdHVtUGxhbmVzKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoZSBib3VuZGluZyBib3gKKyAg
ICAgKiBAcGFyYW0gcG9pbnQgZGVmaW5lcyB0aGUgcG9pbnQgdG8gdGVzdAorICAgICAqIEByZXR1
cm5zIHRydWUgaWYgdGhlIHBvaW50IGlzIGluc2lkZSB0aGUgYm91bmRpbmcgYm94CisgICAgICov
CisgICAgQm91bmRpbmdCb3gucHJvdG90eXBlLmludGVyc2VjdHNQb2ludCA9IGZ1bmN0aW9uIChw
b2ludCkgeworICAgICAgICB2YXIgbWluID0gdGhpcy5taW5pbXVtV29ybGQ7CisgICAgICAgIHZh
ciBtYXggPSB0aGlzLm1heGltdW1Xb3JsZDsKKyAgICAgICAgdmFyIG1pblggPSBtaW4ueCwgbWlu
WSA9IG1pbi55LCBtaW5aID0gbWluLnosIG1heFggPSBtYXgueCwgbWF4WSA9IG1heC55LCBtYXha
ID0gbWF4Lno7CisgICAgICAgIHZhciBwb2ludFggPSBwb2ludC54LCBwb2ludFkgPSBwb2ludC55
LCBwb2ludFogPSBwb2ludC56OworICAgICAgICB2YXIgZGVsdGEgPSAtX01hdGhzX21hdGhfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkVwc2lsb24iXTsKKyAgICAgICAg
aWYgKG1heFggLSBwb2ludFggPCBkZWx0YSB8fCBkZWx0YSA+IHBvaW50WCAtIG1pblgpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF4WSAtIHBv
aW50WSA8IGRlbHRhIHx8IGRlbHRhID4gcG9pbnRZIC0gbWluWSkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChtYXhaIC0gcG9pbnRaIDwgZGVsdGEg
fHwgZGVsdGEgPiBwb2ludFogLSBtaW5aKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBU
ZXN0cyBpZiB0aGUgYm91bmRpbmcgYm94IGludGVyc2VjdHMgd2l0aCBhIGJvdW5kaW5nIHNwaGVy
ZQorICAgICAqIEBwYXJhbSBzcGhlcmUgZGVmaW5lcyB0aGUgc3BoZXJlIHRvIHRlc3QKKyAgICAg
KiBAcmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGludGVyc2VjdGlvbgorICAgICAqLworICAg
IEJvdW5kaW5nQm94LnByb3RvdHlwZS5pbnRlcnNlY3RzU3BoZXJlID0gZnVuY3Rpb24gKHNwaGVy
ZSkgeworICAgICAgICByZXR1cm4gQm91bmRpbmdCb3guSW50ZXJzZWN0c1NwaGVyZSh0aGlzLm1p
bmltdW1Xb3JsZCwgdGhpcy5tYXhpbXVtV29ybGQsIHNwaGVyZS5jZW50ZXJXb3JsZCwgc3BoZXJl
LnJhZGl1c1dvcmxkKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRlc3RzIGlmIHRoZSBib3Vu
ZGluZyBib3ggaW50ZXJzZWN0cyB3aXRoIGEgYm94IGRlZmluZWQgYnkgYSBtaW4gYW5kIG1heCB2
ZWN0b3JzCisgICAgICogQHBhcmFtIG1pbiBkZWZpbmVzIHRoZSBtaW4gdmVjdG9yIHRvIHVzZQor
ICAgICAqIEBwYXJhbSBtYXggZGVmaW5lcyB0aGUgbWF4IHZlY3RvciB0byB1c2UKKyAgICAgKiBA
cmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGludGVyc2VjdGlvbgorICAgICAqLworICAgIEJv
dW5kaW5nQm94LnByb3RvdHlwZS5pbnRlcnNlY3RzTWluTWF4ID0gZnVuY3Rpb24gKG1pbiwgbWF4
KSB7CisgICAgICAgIHZhciBteU1pbiA9IHRoaXMubWluaW11bVdvcmxkOworICAgICAgICB2YXIg
bXlNYXggPSB0aGlzLm1heGltdW1Xb3JsZDsKKyAgICAgICAgdmFyIG15TWluWCA9IG15TWluLngs
IG15TWluWSA9IG15TWluLnksIG15TWluWiA9IG15TWluLnosIG15TWF4WCA9IG15TWF4LngsIG15
TWF4WSA9IG15TWF4LnksIG15TWF4WiA9IG15TWF4Lno7CisgICAgICAgIHZhciBtaW5YID0gbWlu
LngsIG1pblkgPSBtaW4ueSwgbWluWiA9IG1pbi56LCBtYXhYID0gbWF4LngsIG1heFkgPSBtYXgu
eSwgbWF4WiA9IG1heC56OworICAgICAgICBpZiAobXlNYXhYIDwgbWluWCB8fCBteU1pblggPiBt
YXhYKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG15TWF4WSA8IG1pblkgfHwgbXlNaW5ZID4gbWF4WSkgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGlmIChteU1heFogPCBtaW5aIHx8IG15TWluWiA+IG1h
eFopIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAgICAgKiBUZXN0cyBp
ZiB0d28gYm91bmRpbmcgYm94ZXMgYXJlIGludGVyc2VjdGlvbnMKKyAgICAgKiBAcGFyYW0gYm94
MCBkZWZpbmVzIHRoZSBmaXJzdCBib3ggdG8gdGVzdAorICAgICAqIEBwYXJhbSBib3gxIGRlZmlu
ZXMgdGhlIHNlY29uZCBib3ggdG8gdGVzdAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlcmUg
aXMgYW4gaW50ZXJzZWN0aW9uCisgICAgICovCisgICAgQm91bmRpbmdCb3guSW50ZXJzZWN0cyA9
IGZ1bmN0aW9uIChib3gwLCBib3gxKSB7CisgICAgICAgIHJldHVybiBib3gwLmludGVyc2VjdHNN
aW5NYXgoYm94MS5taW5pbXVtV29ybGQsIGJveDEubWF4aW11bVdvcmxkKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFRlc3RzIGlmIGEgYm91bmRpbmcgYm94IGRlZmluZXMgYnkgYSBtaW4vbWF4
IHZlY3RvcnMgaW50ZXJzZWN0cyBhIHNwaGVyZQorICAgICAqIEBwYXJhbSBtaW5Qb2ludCBkZWZp
bmVzIHRoZSBtaW5pbXVtIHZlY3RvciBvZiB0aGUgYm91bmRpbmcgYm94CisgICAgICogQHBhcmFt
IG1heFBvaW50IGRlZmluZXMgdGhlIG1heGltdW0gdmVjdG9yIG9mIHRoZSBib3VuZGluZyBib3gK
KyAgICAgKiBAcGFyYW0gc3BoZXJlQ2VudGVyIGRlZmluZXMgdGhlIHNwaGVyZSBjZW50ZXIKKyAg
ICAgKiBAcGFyYW0gc3BoZXJlUmFkaXVzIGRlZmluZXMgdGhlIHNwaGVyZSByYWRpdXMKKyAgICAg
KiBAcmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGludGVyc2VjdGlvbgorICAgICAqLworICAg
IEJvdW5kaW5nQm94LkludGVyc2VjdHNTcGhlcmUgPSBmdW5jdGlvbiAobWluUG9pbnQsIG1heFBv
aW50LCBzcGhlcmVDZW50ZXIsIHNwaGVyZVJhZGl1cykgeworICAgICAgICB2YXIgdmVjdG9yID0g
Qm91bmRpbmdCb3guVG1wVmVjdG9yM1swXTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5DbGFtcFRvUmVmKHNwaGVyZUNl
bnRlciwgbWluUG9pbnQsIG1heFBvaW50LCB2ZWN0b3IpOworICAgICAgICB2YXIgbnVtID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5E
aXN0YW5jZVNxdWFyZWQoc3BoZXJlQ2VudGVyLCB2ZWN0b3IpOworICAgICAgICByZXR1cm4gKG51
bSA8PSAoc3BoZXJlUmFkaXVzICogc3BoZXJlUmFkaXVzKSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBUZXN0cyBpZiBhIGJvdW5kaW5nIGJveCBkZWZpbmVkIHdpdGggOCB2ZWN0b3JzIGlzIGVu
dGlyZWx5IGluc2lkZSBmcnVzdHVtIHBsYW5lcworICAgICAqIEBwYXJhbSBib3VuZGluZ1ZlY3Rv
cnMgZGVmaW5lcyBhbiBhcnJheSBvZiA4IHZlY3RvcnMgcmVwcmVzZW50aW5nIGEgYm91bmRpbmcg
Ym94CisgICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgZGVmaW5lcyB0aGUgZnJ1c3R1bSBwbGFu
ZXMgdG8gdGVzdAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBpbmNsdXNpb24K
KyAgICAgKi8KKyAgICBCb3VuZGluZ0JveC5Jc0NvbXBsZXRlbHlJbkZydXN0dW0gPSBmdW5jdGlv
biAoYm91bmRpbmdWZWN0b3JzLCBmcnVzdHVtUGxhbmVzKSB7CisgICAgICAgIGZvciAodmFyIHAg
PSAwOyBwIDwgNjsgKytwKSB7CisgICAgICAgICAgICB2YXIgZnJ1c3R1bVBsYW5lID0gZnJ1c3R1
bVBsYW5lc1twXTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGZydXN0dW1QbGFuZS5kb3RDb29yZGluYXRlKGJvdW5kaW5nVmVj
dG9yc1tpXSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUZXN0cyBpZiBhIGJvdW5kaW5nIGJveCBkZWZp
bmVkIHdpdGggOCB2ZWN0b3JzIGludGVyc2VjdHMgZnJ1c3R1bSBwbGFuZXMKKyAgICAgKiBAcGFy
YW0gYm91bmRpbmdWZWN0b3JzIGRlZmluZXMgYW4gYXJyYXkgb2YgOCB2ZWN0b3JzIHJlcHJlc2Vu
dGluZyBhIGJvdW5kaW5nIGJveAorICAgICAqIEBwYXJhbSBmcnVzdHVtUGxhbmVzIGRlZmluZXMg
dGhlIGZydXN0dW0gcGxhbmVzIHRvIHRlc3QKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlcmUg
aXMgYW4gaW50ZXJzZWN0aW9uCisgICAgICovCisgICAgQm91bmRpbmdCb3guSXNJbkZydXN0dW0g
PSBmdW5jdGlvbiAoYm91bmRpbmdWZWN0b3JzLCBmcnVzdHVtUGxhbmVzKSB7CisgICAgICAgIGZv
ciAodmFyIHAgPSAwOyBwIDwgNjsgKytwKSB7CisgICAgICAgICAgICB2YXIgY2FuUmV0dXJuRmFs
c2UgPSB0cnVlOworICAgICAgICAgICAgdmFyIGZydXN0dW1QbGFuZSA9IGZydXN0dW1QbGFuZXNb
cF07CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7ICsraSkgeworICAgICAgICAg
ICAgICAgIGlmIChmcnVzdHVtUGxhbmUuZG90Q29vcmRpbmF0ZShib3VuZGluZ1ZlY3RvcnNbaV0p
ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY2FuUmV0dXJuRmFsc2UgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGNhblJldHVybkZhbHNlKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH07CisgICAgQm91bmRpbmdCb3guVG1wVmVjdG9yMyA9IF9NaXNjX2FycmF5VG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJyYXlUb29scyJdLkJ1aWxkQXJyYXkoMywg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMi
XS5aZXJvKTsKKyAgICByZXR1cm4gQm91bmRpbmdCb3g7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL0N1bGxpbmcvYm91bmRpbmdJbmZvLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ3VsbGluZy9ib3VuZGluZ0luZm8udHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IEJvdW5kaW5nSW5mbyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJCb3VuZGluZ0luZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJvdW5kaW5nSW5mbzsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfYXJyYXlUb29sc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9hcnJheVRv
b2xzICovICIuL01pc2MvYXJyYXlUb29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52
ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2JvdW5kaW5nQm94X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2JvdW5kaW5nQm94ICovICIuL0N1bGxpbmcv
Ym91bmRpbmdCb3gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm91bmRpbmdTcGhl
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vYm91bmRpbmdTcGhlcmUgKi8gIi4vQ3VsbGluZy9ib3VuZGluZ1NwaGVyZS50cyIpOworCisK
KworCisKK3ZhciBfcmVzdWx0MCA9IHsgbWluOiAwLCBtYXg6IDAgfTsKK3ZhciBfcmVzdWx0MSA9
IHsgbWluOiAwLCBtYXg6IDAgfTsKK3ZhciBjb21wdXRlQm94RXh0ZW50cyA9IGZ1bmN0aW9uIChh
eGlzLCBib3gsIHJlc3VsdCkgeworICAgIHZhciBwID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Eb3QoYm94LmNlbnRlcldvcmxkLCBh
eGlzKTsKKyAgICB2YXIgcjAgPSBNYXRoLmFicyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRvdChib3guZGlyZWN0aW9uc1swXSwgYXhp
cykpICogYm94LmV4dGVuZFNpemUueDsKKyAgICB2YXIgcjEgPSBNYXRoLmFicyhfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRvdChib3gu
ZGlyZWN0aW9uc1sxXSwgYXhpcykpICogYm94LmV4dGVuZFNpemUueTsKKyAgICB2YXIgcjIgPSBN
YXRoLmFicyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVjdG9yMyJdLkRvdChib3guZGlyZWN0aW9uc1syXSwgYXhpcykpICogYm94LmV4dGVuZFNpemUu
ejsKKyAgICB2YXIgciA9IHIwICsgcjEgKyByMjsKKyAgICByZXN1bHQubWluID0gcCAtIHI7Cisg
ICAgcmVzdWx0Lm1heCA9IHAgKyByOworfTsKK3ZhciBheGlzT3ZlcmxhcCA9IGZ1bmN0aW9uIChh
eGlzLCBib3gwLCBib3gxKSB7CisgICAgY29tcHV0ZUJveEV4dGVudHMoYXhpcywgYm94MCwgX3Jl
c3VsdDApOworICAgIGNvbXB1dGVCb3hFeHRlbnRzKGF4aXMsIGJveDEsIF9yZXN1bHQxKTsKKyAg
ICByZXR1cm4gIShfcmVzdWx0MC5taW4gPiBfcmVzdWx0MS5tYXggfHwgX3Jlc3VsdDEubWluID4g
X3Jlc3VsdDAubWF4KTsKK307CisvKioKKyAqIEluZm8gZm9yIGEgYm91bmRpbmcgZGF0YSBvZiBh
IG1lc2gKKyAqLwordmFyIEJvdW5kaW5nSW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgp
IHsKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGJvdW5kaW5nIGluZm8KKyAgICAgKiBAcGFy
YW0gbWluaW11bSBtaW4gdmVjdG9yIG9mIHRoZSBib3VuZGluZyBib3gvc3BoZXJlCisgICAgICog
QHBhcmFtIG1heGltdW0gbWF4IHZlY3RvciBvZiB0aGUgYm91bmRpbmcgYm94L3NwaGVyZQorICAg
ICAqIEBwYXJhbSB3b3JsZE1hdHJpeCBkZWZpbmVzIHRoZSBuZXcgd29ybGQgbWF0cml4CisgICAg
ICovCisgICAgZnVuY3Rpb24gQm91bmRpbmdJbmZvKG1pbmltdW0sIG1heGltdW0sIHdvcmxkTWF0
cml4KSB7CisgICAgICAgIHRoaXMuX2lzTG9ja2VkID0gZmFsc2U7CisgICAgICAgIHRoaXMuYm91
bmRpbmdCb3ggPSBuZXcgX2JvdW5kaW5nQm94X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkJvdW5kaW5nQm94Il0obWluaW11bSwgbWF4aW11bSwgd29ybGRNYXRyaXgpOworICAgICAgICB0
aGlzLmJvdW5kaW5nU3BoZXJlID0gbmV3IF9ib3VuZGluZ1NwaGVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJCb3VuZGluZ1NwaGVyZSJdKG1pbmltdW0sIG1heGltdW0sIHdvcmxkTWF0
cml4KTsKKyAgICB9CisgICAgLyoqCisgICAgICogUmVjcmVhdGVzIHRoZSBlbnRpcmUgYm91bmRp
bmcgaW5mbyBmcm9tIHNjcmF0Y2ggYXMgaWYgd2UgY2FsbCB0aGUgY29uc3RydWN0b3IgaW4gcGxh
Y2UKKyAgICAgKiBAcGFyYW0gbWluIGRlZmluZXMgdGhlIG5ldyBtaW5pbXVtIHZlY3RvciAoaW4g
bG9jYWwgc3BhY2UpCisgICAgICogQHBhcmFtIG1heCBkZWZpbmVzIHRoZSBuZXcgbWF4aW11bSB2
ZWN0b3IgKGluIGxvY2FsIHNwYWNlKQorICAgICAqIEBwYXJhbSB3b3JsZE1hdHJpeCBkZWZpbmVz
IHRoZSBuZXcgd29ybGQgbWF0cml4CisgICAgICovCisgICAgQm91bmRpbmdJbmZvLnByb3RvdHlw
ZS5yZUNvbnN0cnVjdCA9IGZ1bmN0aW9uIChtaW4sIG1heCwgd29ybGRNYXRyaXgpIHsKKyAgICAg
ICAgdGhpcy5ib3VuZGluZ0JveC5yZUNvbnN0cnVjdChtaW4sIG1heCwgd29ybGRNYXRyaXgpOwor
ICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlLnJlQ29uc3RydWN0KG1pbiwgbWF4LCB3b3JsZE1h
dHJpeCk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm91bmRpbmdJbmZvLnBy
b3RvdHlwZSwgIm1pbmltdW0iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBtaW4gdmVjdG9y
IG9mIHRoZSBib3VuZGluZyBib3gvc3BoZXJlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmJvdW5kaW5nQm94Lm1pbmltdW07
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCb3VuZGluZ0lu
Zm8ucHJvdG90eXBlLCAibWF4aW11bSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIG1heCB2
ZWN0b3Igb2YgdGhlIGJvdW5kaW5nIGJveC9zcGhlcmUKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm91bmRpbmdCb3gubWF4
aW11bTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJvdW5k
aW5nSW5mby5wcm90b3R5cGUsICJpc0xvY2tlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IElmIHRoZSBpbmZvIGlzIGxvY2tlZCBhbmQgd29uJ3QgYmUgdXBkYXRlZCB0byBhdm9pZCBwZXJm
IG92ZXJoZWFkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2tlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2lzTG9ja2VkID0gdmFsdWU7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIC8vIE1ldGhvZHMKKyAgICAvKioKKyAgICAgKiBVcGRhdGVz
IHRoZSBib3VuZGluZyBzcGhlcmUgYW5kIGJveAorICAgICAqIEBwYXJhbSB3b3JsZCB3b3JsZCBt
YXRyaXggdG8gYmUgdXNlZCB0byB1cGRhdGUKKyAgICAgKi8KKyAgICBCb3VuZGluZ0luZm8ucHJv
dG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICh3b3JsZCkgeworICAgICAgICBpZiAodGhpcy5faXNM
b2NrZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmJv
dW5kaW5nQm94Ll91cGRhdGUod29ybGQpOworICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlLl91
cGRhdGUod29ybGQpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVjcmVhdGUgdGhlIGJvdW5k
aW5nIGluZm8gdG8gYmUgY2VudGVyZWQgYXJvdW5kIGEgc3BlY2lmaWMgcG9pbnQgZ2l2ZW4gYSBz
cGVjaWZpYyBleHRlbmQuCisgICAgICogQHBhcmFtIGNlbnRlciBOZXcgY2VudGVyIG9mIHRoZSBi
b3VuZGluZyBpbmZvCisgICAgICogQHBhcmFtIGV4dGVuZCBOZXcgZXh0ZW5kIG9mIHRoZSBib3Vu
ZGluZyBpbmZvCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgYm91bmRpbmcgaW5mbworICAg
ICAqLworICAgIEJvdW5kaW5nSW5mby5wcm90b3R5cGUuY2VudGVyT24gPSBmdW5jdGlvbiAoY2Vu
dGVyLCBleHRlbmQpIHsKKyAgICAgICAgdmFyIG1pbmltdW0gPSBCb3VuZGluZ0luZm8uVG1wVmVj
dG9yM1swXS5jb3B5RnJvbShjZW50ZXIpLnN1YnRyYWN0SW5QbGFjZShleHRlbmQpOworICAgICAg
ICB2YXIgbWF4aW11bSA9IEJvdW5kaW5nSW5mby5UbXBWZWN0b3IzWzFdLmNvcHlGcm9tKGNlbnRl
cikuYWRkSW5QbGFjZShleHRlbmQpOworICAgICAgICB0aGlzLmJvdW5kaW5nQm94LnJlQ29uc3Ry
dWN0KG1pbmltdW0sIG1heGltdW0sIHRoaXMuYm91bmRpbmdCb3guZ2V0V29ybGRNYXRyaXgoKSk7
CisgICAgICAgIHRoaXMuYm91bmRpbmdTcGhlcmUucmVDb25zdHJ1Y3QobWluaW11bSwgbWF4aW11
bSwgdGhpcy5ib3VuZGluZ0JveC5nZXRXb3JsZE1hdHJpeCgpKTsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0aGUgY3VycmVudCBib3VuZGluZyBp
bmZvIGJ5IGFwcGx5aW5nIGEgc2NhbGUgZmFjdG9yCisgICAgICogQHBhcmFtIGZhY3RvciBkZWZp
bmVzIHRoZSBzY2FsZSBmYWN0b3IgdG8gYXBwbHkKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVu
dCBib3VuZGluZyBpbmZvCisgICAgICovCisgICAgQm91bmRpbmdJbmZvLnByb3RvdHlwZS5zY2Fs
ZSA9IGZ1bmN0aW9uIChmYWN0b3IpIHsKKyAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5zY2FsZShm
YWN0b3IpOworICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlLnNjYWxlKGZhY3Rvcik7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBgdHJ1ZWAg
aWYgdGhlIGJvdW5kaW5nIGluZm8gaXMgd2l0aGluIHRoZSBmcnVzdHVtIGRlZmluZWQgYnkgdGhl
IHBhc3NlZCBhcnJheSBvZiBwbGFuZXMuCisgICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgZGVm
aW5lcyB0aGUgZnJ1c3R1bSB0byB0ZXN0CisgICAgICogQHBhcmFtIHN0cmF0ZWd5IGRlZmluZXMg
dGhlIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIGN1bGxpbmcgKGRlZmF1bHQgaXMgQkFCWUxPTi5B
YnN0cmFjdE1lc2guQ1VMTElOR1NUUkFURUdZX1NUQU5EQVJEKQorICAgICAqIEByZXR1cm5zIHRy
dWUgaWYgdGhlIGJvdW5kaW5nIGluZm8gaXMgaW4gdGhlIGZydXN0dW0gcGxhbmVzCisgICAgICov
CisgICAgQm91bmRpbmdJbmZvLnByb3RvdHlwZS5pc0luRnJ1c3R1bSA9IGZ1bmN0aW9uIChmcnVz
dHVtUGxhbmVzLCBzdHJhdGVneSkgeworICAgICAgICBpZiAoc3RyYXRlZ3kgPT09IHZvaWQgMCkg
eyBzdHJhdGVneSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJDb25zdGFudHMiXS5NRVNIRVNfQ1VMTElOR1NUUkFURUdZX1NUQU5EQVJEOyB9CisgICAg
ICAgIHZhciBpbmNsdXNpb25UZXN0ID0gKHN0cmF0ZWd5ID09PSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uTUVTSEVTX0NVTExJTkdT
VFJBVEVHWV9PUFRJTUlTVElDX0lOQ0xVU0lPTiB8fCBzdHJhdGVneSA9PT0gX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLk1FU0hFU19D
VUxMSU5HU1RSQVRFR1lfT1BUSU1JU1RJQ19JTkNMVVNJT05fVEhFTl9CU1BIRVJFX09OTFkpOwor
ICAgICAgICBpZiAoaW5jbHVzaW9uVGVzdCkgeworICAgICAgICAgICAgaWYgKHRoaXMuYm91bmRp
bmdTcGhlcmUuaXNDZW50ZXJJbkZydXN0dW0oZnJ1c3R1bVBsYW5lcykpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
IXRoaXMuYm91bmRpbmdTcGhlcmUuaXNJbkZydXN0dW0oZnJ1c3R1bVBsYW5lcykpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYlNwaGVyZU9ubHlU
ZXN0ID0gKHN0cmF0ZWd5ID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uTUVTSEVTX0NVTExJTkdTVFJBVEVHWV9CT1VORElOR1NQ
SEVSRV9PTkxZIHx8IHN0cmF0ZWd5ID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uTUVTSEVTX0NVTExJTkdTVFJBVEVHWV9PUFRJ
TUlTVElDX0lOQ0xVU0lPTl9USEVOX0JTUEhFUkVfT05MWSk7CisgICAgICAgIGlmIChiU3BoZXJl
T25seVRlc3QpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0aGlzLmJvdW5kaW5nQm94LmlzSW5GcnVzdHVtKGZydXN0dW1QbGFuZXMpOworICAg
IH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJvdW5kaW5nSW5mby5wcm90b3R5cGUsICJk
aWFnb25hbExlbmd0aCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHdvcmxk
IGRpc3RhbmNlIGJldHdlZW4gdGhlIG1pbiBhbmQgbWF4IHBvaW50cyBvZiB0aGUgYm91bmRpbmcg
Ym94CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHZhciBib3VuZGluZ0JveCA9IHRoaXMuYm91bmRpbmdCb3g7CisgICAgICAgICAgICB2YXIgZGlh
ZyA9IGJvdW5kaW5nQm94Lm1heGltdW1Xb3JsZC5zdWJ0cmFjdFRvUmVmKGJvdW5kaW5nQm94Lm1p
bmltdW1Xb3JsZCwgQm91bmRpbmdJbmZvLlRtcFZlY3RvcjNbMF0pOworICAgICAgICAgICAgcmV0
dXJuIGRpYWcubGVuZ3RoKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIENo
ZWNrcyBpZiBhIGN1bGxhYmxlIG9iamVjdCAobWVzaC4uLikgaXMgaW4gdGhlIGNhbWVyYSBmcnVz
dHVtCisgICAgICogVW5saWtlIGlzSW5GcnVzdHVtIHRoaXMgY2hla3MgdGhlIGZ1bGwgYm91bmRp
bmcgYm94CisgICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgQ2FtZXJhIG5lYXIvcGxhbmVzCisg
ICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGluIGZydXN0dW0gb3RoZXJ3aXNl
IGZhbHNlCisgICAgICovCisgICAgQm91bmRpbmdJbmZvLnByb3RvdHlwZS5pc0NvbXBsZXRlbHlJ
bkZydXN0dW0gPSBmdW5jdGlvbiAoZnJ1c3R1bVBsYW5lcykgeworICAgICAgICByZXR1cm4gdGhp
cy5ib3VuZGluZ0JveC5pc0NvbXBsZXRlbHlJbkZydXN0dW0oZnJ1c3R1bVBsYW5lcyk7CisgICAg
fTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEJvdW5kaW5nSW5mby5wcm90b3R5cGUuX2NoZWNr
Q29sbGlzaW9uID0gZnVuY3Rpb24gKGNvbGxpZGVyKSB7CisgICAgICAgIHJldHVybiBjb2xsaWRl
ci5fY2FuRG9Db2xsaXNpb24odGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXJXb3JsZCwgdGhpcy5i
b3VuZGluZ1NwaGVyZS5yYWRpdXNXb3JsZCwgdGhpcy5ib3VuZGluZ0JveC5taW5pbXVtV29ybGQs
IHRoaXMuYm91bmRpbmdCb3gubWF4aW11bVdvcmxkKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGUgYm91bmRpbmcgYm94IGFuZCBib3VuZGlu
ZyBzcGhlcmUgb3IgdGhlIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5j
b20vYmFieWxvbjEwMS9pbnRlcnNlY3RfY29sbGlzaW9uc18tX21lc2gKKyAgICAgKiBAcGFyYW0g
cG9pbnQgdGhlIHBvaW50IHRvIGNoZWNrIGludGVyc2VjdGlvbiB3aXRoCisgICAgICogQHJldHVy
bnMgaWYgdGhlIHBvaW50IGludGVyc2VjdHMKKyAgICAgKi8KKyAgICBCb3VuZGluZ0luZm8ucHJv
dG90eXBlLmludGVyc2VjdHNQb2ludCA9IGZ1bmN0aW9uIChwb2ludCkgeworICAgICAgICBpZiAo
IXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyV29ybGQpIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuYm91bmRpbmdTcGhlcmUuaW50ZXJz
ZWN0c1BvaW50KHBvaW50KSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmICghdGhpcy5ib3VuZGluZ0JveC5pbnRlcnNlY3RzUG9pbnQocG9pbnQpKSB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgYW5vdGhlciBib3VuZGluZyBp
bmZvIGludGVyc2VjdHMgdGhlIGJvdW5kaW5nIGJveCBhbmQgYm91bmRpbmcgc3BoZXJlIG9yIHRo
ZSBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEv
aW50ZXJzZWN0X2NvbGxpc2lvbnNfLV9tZXNoCisgICAgICogQHBhcmFtIGJvdW5kaW5nSW5mbyB0
aGUgYm91bmRpbmcgaW5mbyB0byBjaGVjayBpbnRlcnNlY3Rpb24gd2l0aAorICAgICAqIEBwYXJh
bSBwcmVjaXNlIGlmIHRoZSBpbnRlcnNlY3Rpb24gc2hvdWxkIGJlIGRvbmUgdXNpbmcgT0JCCisg
ICAgICogQHJldHVybnMgaWYgdGhlIGJvdW5kaW5nIGluZm8gaW50ZXJzZWN0cworICAgICAqLwor
ICAgIEJvdW5kaW5nSW5mby5wcm90b3R5cGUuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChib3VuZGlu
Z0luZm8sIHByZWNpc2UpIHsKKyAgICAgICAgaWYgKCFfYm91bmRpbmdTcGhlcmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siQm91bmRpbmdTcGhlcmUiXS5JbnRlcnNlY3RzKHRoaXMuYm91
bmRpbmdTcGhlcmUsIGJvdW5kaW5nSW5mby5ib3VuZGluZ1NwaGVyZSkpIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIV9ib3VuZGluZ0JveF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJCb3VuZGluZ0JveCJdLkludGVyc2VjdHModGhpcy5i
b3VuZGluZ0JveCwgYm91bmRpbmdJbmZvLmJvdW5kaW5nQm94KSkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghcHJlY2lzZSkgeworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGJveDAgPSB0aGlzLmJvdW5k
aW5nQm94OworICAgICAgICB2YXIgYm94MSA9IGJvdW5kaW5nSW5mby5ib3VuZGluZ0JveDsKKyAg
ICAgICAgaWYgKCFheGlzT3ZlcmxhcChib3gwLmRpcmVjdGlvbnNbMF0sIGJveDAsIGJveDEpKSB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFheGlz
T3ZlcmxhcChib3gwLmRpcmVjdGlvbnNbMV0sIGJveDAsIGJveDEpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFheGlzT3ZlcmxhcChib3gwLmRp
cmVjdGlvbnNbMl0sIGJveDAsIGJveDEpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFheGlzT3ZlcmxhcChib3gxLmRpcmVjdGlvbnNbMF0sIGJv
eDAsIGJveDEpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFheGlzT3ZlcmxhcChib3gxLmRpcmVjdGlvbnNbMV0sIGJveDAsIGJveDEpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFheGlzT3Zl
cmxhcChib3gxLmRpcmVjdGlvbnNbMl0sIGJveDAsIGJveDEpKSB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFheGlzT3ZlcmxhcChfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKGJv
eDAuZGlyZWN0aW9uc1swXSwgYm94MS5kaXJlY3Rpb25zWzBdKSwgYm94MCwgYm94MSkpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWF4aXNPdmVy
bGFwKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0
b3IzIl0uQ3Jvc3MoYm94MC5kaXJlY3Rpb25zWzBdLCBib3gxLmRpcmVjdGlvbnNbMV0pLCBib3gw
LCBib3gxKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmICghYXhpc092ZXJsYXAoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlZlY3RvcjMiXS5Dcm9zcyhib3gwLmRpcmVjdGlvbnNbMF0sIGJveDEuZGlyZWN0
aW9uc1syXSksIGJveDAsIGJveDEpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFheGlzT3ZlcmxhcChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKGJveDAuZGlyZWN0aW9uc1sx
XSwgYm94MS5kaXJlY3Rpb25zWzBdKSwgYm94MCwgYm94MSkpIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWF4aXNPdmVybGFwKF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uQ3Jvc3MoYm94
MC5kaXJlY3Rpb25zWzFdLCBib3gxLmRpcmVjdGlvbnNbMV0pLCBib3gwLCBib3gxKSkgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghYXhpc092ZXJs
YXAoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3Rv
cjMiXS5Dcm9zcyhib3gwLmRpcmVjdGlvbnNbMV0sIGJveDEuZGlyZWN0aW9uc1syXSksIGJveDAs
IGJveDEpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFheGlzT3ZlcmxhcChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKGJveDAuZGlyZWN0aW9uc1syXSwgYm94MS5kaXJlY3Rp
b25zWzBdKSwgYm94MCwgYm94MSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWF4aXNPdmVybGFwKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uQ3Jvc3MoYm94MC5kaXJlY3Rpb25zWzJd
LCBib3gxLmRpcmVjdGlvbnNbMV0pLCBib3gwLCBib3gxKSkgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghYXhpc092ZXJsYXAoX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Dcm9zcyhib3gw
LmRpcmVjdGlvbnNbMl0sIGJveDEuZGlyZWN0aW9uc1syXSksIGJveDAsIGJveDEpKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfTsKKyAgICBCb3VuZGluZ0luZm8uVG1wVmVjdG9yMyA9IF9NaXNjX2FycmF5VG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJyYXlUb29scyJdLkJ1aWxkQXJyYXkoMiwgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5a
ZXJvKTsKKyAgICByZXR1cm4gQm91bmRpbmdJbmZvOworfSgpKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9DdWxsaW5nL2JvdW5kaW5nU3BoZXJlLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DdWxsaW5nL2JvdW5kaW5nU3BoZXJl
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IEJvdW5kaW5nU3BoZXJlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkJvdW5kaW5nU3BoZXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCb3VuZGlu
Z1NwaGVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfYXJyYXlUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWlzYy9hcnJheVRvb2xzICovICIuL01pc2MvYXJyYXlUb29scy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4v
TWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gc3RvcmUg
Ym91bmRpbmcgc3BoZXJlIGluZm9ybWF0aW9uCisgKi8KK3ZhciBCb3VuZGluZ1NwaGVyZSA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3
IGJvdW5kaW5nIHNwaGVyZQorICAgICAqIEBwYXJhbSBtaW4gZGVmaW5lcyB0aGUgbWluaW11bSB2
ZWN0b3IgKGluIGxvY2FsIHNwYWNlKQorICAgICAqIEBwYXJhbSBtYXggZGVmaW5lcyB0aGUgbWF4
aW11bSB2ZWN0b3IgKGluIGxvY2FsIHNwYWNlKQorICAgICAqIEBwYXJhbSB3b3JsZE1hdHJpeCBk
ZWZpbmVzIHRoZSBuZXcgd29ybGQgbWF0cml4CisgICAgICovCisgICAgZnVuY3Rpb24gQm91bmRp
bmdTcGhlcmUobWluLCBtYXgsIHdvcmxkTWF0cml4KSB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBjZW50ZXIgb2YgdGhlIGJvdW5kaW5nIHNwaGVyZSBpbiBsb2NhbCBzcGFjZQor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5jZW50ZXIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIGNlbnRlciBvZiB0aGUgYm91bmRpbmcgc3BoZXJlIGluIHdv
cmxkIHNwYWNlCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNlbnRlcldvcmxkID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBtaW5pbXVtIHZlY3RvciBpbiBs
b2NhbCBzcGFjZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5taW5pbXVtID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIHZlY3RvciBpbiBsb2Nh
bCBzcGFjZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tYXhpbXVtID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7Cisg
ICAgICAgIHRoaXMucmVDb25zdHJ1Y3QobWluLCBtYXgsIHdvcmxkTWF0cml4KTsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogUmVjcmVhdGVzIHRoZSBlbnRpcmUgYm91bmRpbmcgc3BoZXJlIGZyb20g
c2NyYXRjaCBhcyBpZiB3ZSBjYWxsIHRoZSBjb25zdHJ1Y3RvciBpbiBwbGFjZQorICAgICAqIEBw
YXJhbSBtaW4gZGVmaW5lcyB0aGUgbmV3IG1pbmltdW0gdmVjdG9yIChpbiBsb2NhbCBzcGFjZSkK
KyAgICAgKiBAcGFyYW0gbWF4IGRlZmluZXMgdGhlIG5ldyBtYXhpbXVtIHZlY3RvciAoaW4gbG9j
YWwgc3BhY2UpCisgICAgICogQHBhcmFtIHdvcmxkTWF0cml4IGRlZmluZXMgdGhlIG5ldyB3b3Js
ZCBtYXRyaXgKKyAgICAgKi8KKyAgICBCb3VuZGluZ1NwaGVyZS5wcm90b3R5cGUucmVDb25zdHJ1
Y3QgPSBmdW5jdGlvbiAobWluLCBtYXgsIHdvcmxkTWF0cml4KSB7CisgICAgICAgIHRoaXMubWlu
aW11bS5jb3B5RnJvbShtaW4pOworICAgICAgICB0aGlzLm1heGltdW0uY29weUZyb20obWF4KTsK
KyAgICAgICAgdmFyIGRpc3RhbmNlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5EaXN0YW5jZShtaW4sIG1heCk7CisgICAgICAgIG1h
eC5hZGRUb1JlZihtaW4sIHRoaXMuY2VudGVyKS5zY2FsZUluUGxhY2UoMC41KTsKKyAgICAgICAg
dGhpcy5yYWRpdXMgPSBkaXN0YW5jZSAqIDAuNTsKKyAgICAgICAgdGhpcy5fdXBkYXRlKHdvcmxk
TWF0cml4IHx8IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJNYXRyaXgiXS5JZGVudGl0eVJlYWRPbmx5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNj
YWxlIHRoZSBjdXJyZW50IGJvdW5kaW5nIHNwaGVyZSBieSBhcHBseWluZyBhIHNjYWxlIGZhY3Rv
cgorICAgICAqIEBwYXJhbSBmYWN0b3IgZGVmaW5lcyB0aGUgc2NhbGUgZmFjdG9yIHRvIGFwcGx5
CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgYm91bmRpbmcgYm94CisgICAgICovCisgICAg
Qm91bmRpbmdTcGhlcmUucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKGZhY3RvcikgeworICAg
ICAgICB2YXIgbmV3UmFkaXVzID0gdGhpcy5yYWRpdXMgKiBmYWN0b3I7CisgICAgICAgIHZhciB0
bXBWZWN0b3JzID0gQm91bmRpbmdTcGhlcmUuVG1wVmVjdG9yMzsKKyAgICAgICAgdmFyIHRlbXBS
YWRpdXNWZWN0b3IgPSB0bXBWZWN0b3JzWzBdLnNldEFsbChuZXdSYWRpdXMpOworICAgICAgICB2
YXIgbWluID0gdGhpcy5jZW50ZXIuc3VidHJhY3RUb1JlZih0ZW1wUmFkaXVzVmVjdG9yLCB0bXBW
ZWN0b3JzWzFdKTsKKyAgICAgICAgdmFyIG1heCA9IHRoaXMuY2VudGVyLmFkZFRvUmVmKHRlbXBS
YWRpdXNWZWN0b3IsIHRtcFZlY3RvcnNbMl0pOworICAgICAgICB0aGlzLnJlQ29uc3RydWN0KG1p
biwgbWF4LCB0aGlzLl93b3JsZE1hdHJpeCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgd29ybGQgbWF0cml4IG9mIHRoZSBib3VuZGluZyBi
b3gKKyAgICAgKiBAcmV0dXJucyBhIG1hdHJpeAorICAgICAqLworICAgIEJvdW5kaW5nU3BoZXJl
LnByb3RvdHlwZS5nZXRXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3dvcmxkTWF0cml4OworICAgIH07CisgICAgLy8gTWV0aG9kcworICAgIC8qKiBAaGlk
ZGVuICovCisgICAgQm91bmRpbmdTcGhlcmUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAo
d29ybGRNYXRyaXgpIHsKKyAgICAgICAgaWYgKCF3b3JsZE1hdHJpeC5pc0lkZW50aXR5KCkpIHsK
KyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0aGlzLmNlbnRlciwgd29y
bGRNYXRyaXgsIHRoaXMuY2VudGVyV29ybGQpOworICAgICAgICAgICAgdmFyIHRlbXBWZWN0b3Ig
PSBCb3VuZGluZ1NwaGVyZS5UbXBWZWN0b3IzWzBdOworICAgICAgICAgICAgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1O
b3JtYWxGcm9tRmxvYXRzVG9SZWYoMS4wLCAxLjAsIDEuMCwgd29ybGRNYXRyaXgsIHRlbXBWZWN0
b3IpOworICAgICAgICAgICAgdGhpcy5yYWRpdXNXb3JsZCA9IE1hdGgubWF4KE1hdGguYWJzKHRl
bXBWZWN0b3IueCksIE1hdGguYWJzKHRlbXBWZWN0b3IueSksIE1hdGguYWJzKHRlbXBWZWN0b3Iu
eikpICogdGhpcy5yYWRpdXM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICB0aGlzLmNlbnRlcldvcmxkLmNvcHlGcm9tKHRoaXMuY2VudGVyKTsKKyAgICAgICAgICAgIHRo
aXMucmFkaXVzV29ybGQgPSB0aGlzLnJhZGl1czsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogVGVzdHMgaWYgdGhlIGJvdW5kaW5nIHNwaGVyZSBpcyBpbnRlcnNlY3RpbmcgdGhl
IGZydXN0dW0gcGxhbmVzCisgICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgZGVmaW5lcyB0aGUg
ZnJ1c3R1bSBwbGFuZXMgdG8gdGVzdAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMg
YW4gaW50ZXJzZWN0aW9uCisgICAgICovCisgICAgQm91bmRpbmdTcGhlcmUucHJvdG90eXBlLmlz
SW5GcnVzdHVtID0gZnVuY3Rpb24gKGZydXN0dW1QbGFuZXMpIHsKKyAgICAgICAgdmFyIGNlbnRl
ciA9IHRoaXMuY2VudGVyV29ybGQ7CisgICAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1c1dv
cmxkOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykgeworICAgICAgICAgICAg
aWYgKGZydXN0dW1QbGFuZXNbaV0uZG90Q29vcmRpbmF0ZShjZW50ZXIpIDw9IC1yYWRpdXMpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUZXN0cyBpZiB0
aGUgYm91bmRpbmcgc3BoZXJlIGNlbnRlciBpcyBpbiBiZXR3ZWVuIHRoZSBmcnVzdHVtIHBsYW5l
cy4KKyAgICAgKiBVc2VkIGZvciBvcHRpbWlzdGljIGZhc3QgaW5jbHVzaW9uLgorICAgICAqIEBw
YXJhbSBmcnVzdHVtUGxhbmVzIGRlZmluZXMgdGhlIGZydXN0dW0gcGxhbmVzIHRvIHRlc3QKKyAg
ICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzcGhlcmUgY2VudGVyIGlzIGluIGJldHdlZW4gdGhl
IGZydXN0dW0gcGxhbmVzCisgICAgICovCisgICAgQm91bmRpbmdTcGhlcmUucHJvdG90eXBlLmlz
Q2VudGVySW5GcnVzdHVtID0gZnVuY3Rpb24gKGZydXN0dW1QbGFuZXMpIHsKKyAgICAgICAgdmFy
IGNlbnRlciA9IHRoaXMuY2VudGVyV29ybGQ7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
NjsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZnJ1c3R1bVBsYW5lc1tpXS5kb3RDb29yZGluYXRl
KGNlbnRlcikgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoqCisg
ICAgICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhlIGJvdW5kaW5nIHNwaGVyZQorICAg
ICAqIEBwYXJhbSBwb2ludCBkZWZpbmVzIHRoZSBwb2ludCB0byB0ZXN0CisgICAgICogQHJldHVy
bnMgdHJ1ZSBpZiB0aGUgcG9pbnQgaXMgaW5zaWRlIHRoZSBib3VuZGluZyBzcGhlcmUKKyAgICAg
Ki8KKyAgICBCb3VuZGluZ1NwaGVyZS5wcm90b3R5cGUuaW50ZXJzZWN0c1BvaW50ID0gZnVuY3Rp
b24gKHBvaW50KSB7CisgICAgICAgIHZhciBzcXVhcmVEaXN0YW5jZSA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uRGlzdGFuY2VTcXVh
cmVkKHRoaXMuY2VudGVyV29ybGQsIHBvaW50KTsKKyAgICAgICAgaWYgKHRoaXMucmFkaXVzV29y
bGQgKiB0aGlzLnJhZGl1c1dvcmxkIDwgc3F1YXJlRGlzdGFuY2UpIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAg
IC8vIFN0YXRpY3MKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdHdvIHNwaGVyZSBpbnRlcnNj
dAorICAgICAqIEBwYXJhbSBzcGhlcmUwIHNwaGVyZSAwCisgICAgICogQHBhcmFtIHNwaGVyZTEg
c3BoZXJlIDEKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzcGVyZXMgaW50ZXJzZWN0Cisg
ICAgICovCisgICAgQm91bmRpbmdTcGhlcmUuSW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChzcGhlcmUw
LCBzcGhlcmUxKSB7CisgICAgICAgIHZhciBzcXVhcmVEaXN0YW5jZSA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uRGlzdGFuY2VTcXVh
cmVkKHNwaGVyZTAuY2VudGVyV29ybGQsIHNwaGVyZTEuY2VudGVyV29ybGQpOworICAgICAgICB2
YXIgcmFkaXVzU3VtID0gc3BoZXJlMC5yYWRpdXNXb3JsZCArIHNwaGVyZTEucmFkaXVzV29ybGQ7
CisgICAgICAgIGlmIChyYWRpdXNTdW0gKiByYWRpdXNTdW0gPCBzcXVhcmVEaXN0YW5jZSkgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH07CisgICAgQm91bmRpbmdTcGhlcmUuVG1wVmVjdG9yMyA9IF9NaXNjX2FycmF5VG9v
bHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJyYXlUb29scyJdLkJ1aWxkQXJyYXko
MywgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3Rv
cjMiXS5aZXJvKTsKKyAgICByZXR1cm4gQm91bmRpbmdTcGhlcmU7Cit9KCkpOworCisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL0N1bGxpbmcvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL0N1bGxpbmcvaW5kZXgudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQm91bmRpbmdCb3gs
IEJvdW5kaW5nSW5mbywgQm91bmRpbmdTcGhlcmUsIFJheSwgT2N0cmVlLCBPY3RyZWVCbG9jaywg
T2N0cmVlU2NlbmVDb21wb25lbnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9ib3VuZGluZ0JveF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ib3VuZGluZ0JveCAqLyAiLi9DdWxsaW5nL2JvdW5kaW5n
Qm94LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvdW5kaW5nQm94IiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfYm91bmRpbmdCb3hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQm91bmRpbmdC
b3giXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm91bmRpbmdJbmZvX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2JvdW5k
aW5nSW5mbyAqLyAiLi9DdWxsaW5nL2JvdW5kaW5nSW5mby50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJCb3VuZGluZ0luZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ib3VuZGluZ0luZm9fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siQm91bmRpbmdJbmZvIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2JvdW5kaW5nU3BoZXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2JvdW5kaW5nU3BoZXJlICovICIuL0N1bGxp
bmcvYm91bmRpbmdTcGhlcmUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmRpbmdTcGhlcmUi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ib3VuZGluZ1NwaGVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJCb3VuZGluZ1NwaGVyZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9PY3RyZWVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL09jdHJlZXMvaW5kZXggKi8gIi4vQ3VsbGluZy9PY3RyZWVzL2lu
ZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X09jdHJlZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2N0cmVlIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
T2N0cmVlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPY3RyZWVCbG9jayJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJPY3RyZWVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX09jdHJlZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
T2N0cmVlU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL3JheSAqLyAiLi9DdWxsaW5nL3JheS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSYXkiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9yYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUmF5
Il07IH0pOworCisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DdWxsaW5nL3Jh
eS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0N1bGxpbmcv
cmF5LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBSYXkgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmF5Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBSYXk7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
aXNjX2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvYXJyYXlUb29scyAqLyAiLi9NaXNjL2FycmF5VG9vbHMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21h
dGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0NvbGxpc2lvbnNfcGlja2luZ0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NvbGxpc2lvbnMvcGlja2luZ0luZm8g
Ki8gIi4vQ29sbGlzaW9ucy9waWNraW5nSW5mby50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9Db2xsaXNpb25zX2ludGVyc2VjdGlvbkluZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NvbGxpc2lvbnMvaW50ZXJzZWN0aW9u
SW5mbyAqLyAiLi9Db2xsaXNpb25zL2ludGVyc2VjdGlvbkluZm8udHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL2NhbWVyYSAqLyAiLi9DYW1l
cmFzL2NhbWVyYS50cyIpOworCisKKworCisKKworLyoqCisgKiBDbGFzcyByZXByZXNlbnRpbmcg
YSByYXkgd2l0aCBwb3NpdGlvbiBhbmQgZGlyZWN0aW9uCisgKi8KK3ZhciBSYXkgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyByYXkK
KyAgICAgKiBAcGFyYW0gb3JpZ2luIG9yaWdpbiBwb2ludAorICAgICAqIEBwYXJhbSBkaXJlY3Rp
b24gZGlyZWN0aW9uCisgICAgICogQHBhcmFtIGxlbmd0aCBsZW5ndGggb2YgdGhlIHJheQorICAg
ICAqLworICAgIGZ1bmN0aW9uIFJheSgKKyAgICAvKiogb3JpZ2luIHBvaW50ICovCisgICAgb3Jp
Z2luLCAKKyAgICAvKiogZGlyZWN0aW9uICovCisgICAgZGlyZWN0aW9uLCAKKyAgICAvKiogbGVu
Z3RoIG9mIHRoZSByYXkgKi8KKyAgICBsZW5ndGgpIHsKKyAgICAgICAgaWYgKGxlbmd0aCA9PT0g
dm9pZCAwKSB7IGxlbmd0aCA9IE51bWJlci5NQVhfVkFMVUU7IH0KKyAgICAgICAgdGhpcy5vcmln
aW4gPSBvcmlnaW47CisgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uOworICAgICAg
ICB0aGlzLmxlbmd0aCA9IGxlbmd0aDsKKyAgICB9CisgICAgLy8gTWV0aG9kcworICAgIC8qKgor
ICAgICAqIENoZWNrcyBpZiB0aGUgcmF5IGludGVyc2VjdHMgYSBib3gKKyAgICAgKiBAcGFyYW0g
bWluaW11bSBib3VuZCBvZiB0aGUgYm94CisgICAgICogQHBhcmFtIG1heGltdW0gYm91bmQgb2Yg
dGhlIGJveAorICAgICAqIEBwYXJhbSBpbnRlcnNlY3Rpb25UcmVzaG9sZCBleHRyYSBleHRlbmQg
dG8gYmUgYWRkZWQgdG8gdGhlIGJveCBpbiBhbGwgZGlyZWN0aW9uCisgICAgICogQHJldHVybnMg
aWYgdGhlIGJveCB3YXMgaGl0CisgICAgICovCisgICAgUmF5LnByb3RvdHlwZS5pbnRlcnNlY3Rz
Qm94TWluTWF4ID0gZnVuY3Rpb24gKG1pbmltdW0sIG1heGltdW0sIGludGVyc2VjdGlvblRyZXNo
b2xkKSB7CisgICAgICAgIGlmIChpbnRlcnNlY3Rpb25UcmVzaG9sZCA9PT0gdm9pZCAwKSB7IGlu
dGVyc2VjdGlvblRyZXNob2xkID0gMDsgfQorICAgICAgICB2YXIgbmV3TWluaW11bSA9IFJheS5U
bXBWZWN0b3IzWzBdLmNvcHlGcm9tRmxvYXRzKG1pbmltdW0ueCAtIGludGVyc2VjdGlvblRyZXNo
b2xkLCBtaW5pbXVtLnkgLSBpbnRlcnNlY3Rpb25UcmVzaG9sZCwgbWluaW11bS56IC0gaW50ZXJz
ZWN0aW9uVHJlc2hvbGQpOworICAgICAgICB2YXIgbmV3TWF4aW11bSA9IFJheS5UbXBWZWN0b3Iz
WzFdLmNvcHlGcm9tRmxvYXRzKG1heGltdW0ueCArIGludGVyc2VjdGlvblRyZXNob2xkLCBtYXhp
bXVtLnkgKyBpbnRlcnNlY3Rpb25UcmVzaG9sZCwgbWF4aW11bS56ICsgaW50ZXJzZWN0aW9uVHJl
c2hvbGQpOworICAgICAgICB2YXIgZCA9IDAuMDsKKyAgICAgICAgdmFyIG1heFZhbHVlID0gTnVt
YmVyLk1BWF9WQUxVRTsKKyAgICAgICAgdmFyIGludjsKKyAgICAgICAgdmFyIG1pbjsKKyAgICAg
ICAgdmFyIG1heDsKKyAgICAgICAgdmFyIHRlbXA7CisgICAgICAgIGlmIChNYXRoLmFicyh0aGlz
LmRpcmVjdGlvbi54KSA8IDAuMDAwMDAwMSkgeworICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2lu
LnggPCBuZXdNaW5pbXVtLnggfHwgdGhpcy5vcmlnaW4ueCA+IG5ld01heGltdW0ueCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludiA9IDEuMCAvIHRoaXMuZGlyZWN0aW9uLng7Cisg
ICAgICAgICAgICBtaW4gPSAobmV3TWluaW11bS54IC0gdGhpcy5vcmlnaW4ueCkgKiBpbnY7Cisg
ICAgICAgICAgICBtYXggPSAobmV3TWF4aW11bS54IC0gdGhpcy5vcmlnaW4ueCkgKiBpbnY7Cisg
ICAgICAgICAgICBpZiAobWF4ID09PSAtSW5maW5pdHkpIHsKKyAgICAgICAgICAgICAgICBtYXgg
PSBJbmZpbml0eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtaW4gPiBtYXgpIHsK
KyAgICAgICAgICAgICAgICB0ZW1wID0gbWluOworICAgICAgICAgICAgICAgIG1pbiA9IG1heDsK
KyAgICAgICAgICAgICAgICBtYXggPSB0ZW1wOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZCA9IE1hdGgubWF4KG1pbiwgZCk7CisgICAgICAgICAgICBtYXhWYWx1ZSA9IE1hdGgubWluKG1h
eCwgbWF4VmFsdWUpOworICAgICAgICAgICAgaWYgKGQgPiBtYXhWYWx1ZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoTWF0aC5hYnModGhpcy5kaXJlY3Rpb24ueSkgPCAwLjAwMDAwMDEpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLm9yaWdpbi55IDwgbmV3TWluaW11bS55IHx8IHRoaXMub3JpZ2luLnkgPiBuZXdN
YXhpbXVtLnkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnYgPSAxLjAgLyB0aGlz
LmRpcmVjdGlvbi55OworICAgICAgICAgICAgbWluID0gKG5ld01pbmltdW0ueSAtIHRoaXMub3Jp
Z2luLnkpICogaW52OworICAgICAgICAgICAgbWF4ID0gKG5ld01heGltdW0ueSAtIHRoaXMub3Jp
Z2luLnkpICogaW52OworICAgICAgICAgICAgaWYgKG1heCA9PT0gLUluZmluaXR5KSB7CisgICAg
ICAgICAgICAgICAgbWF4ID0gSW5maW5pdHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAobWluID4gbWF4KSB7CisgICAgICAgICAgICAgICAgdGVtcCA9IG1pbjsKKyAgICAgICAgICAg
ICAgICBtaW4gPSBtYXg7CisgICAgICAgICAgICAgICAgbWF4ID0gdGVtcDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGQgPSBNYXRoLm1heChtaW4sIGQpOworICAgICAgICAgICAgbWF4VmFs
dWUgPSBNYXRoLm1pbihtYXgsIG1heFZhbHVlKTsKKyAgICAgICAgICAgIGlmIChkID4gbWF4VmFs
dWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuZGlyZWN0aW9uLnopIDwgMC4wMDAwMDAx
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5vcmlnaW4ueiA8IG5ld01pbmltdW0ueiB8fCB0aGlz
Lm9yaWdpbi56ID4gbmV3TWF4aW11bS56KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aW52ID0gMS4wIC8gdGhpcy5kaXJlY3Rpb24uejsKKyAgICAgICAgICAgIG1pbiA9IChuZXdNaW5p
bXVtLnogLSB0aGlzLm9yaWdpbi56KSAqIGludjsKKyAgICAgICAgICAgIG1heCA9IChuZXdNYXhp
bXVtLnogLSB0aGlzLm9yaWdpbi56KSAqIGludjsKKyAgICAgICAgICAgIGlmIChtYXggPT09IC1J
bmZpbml0eSkgeworICAgICAgICAgICAgICAgIG1heCA9IEluZmluaXR5OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG1pbiA+IG1heCkgeworICAgICAgICAgICAgICAgIHRlbXAgPSBt
aW47CisgICAgICAgICAgICAgICAgbWluID0gbWF4OworICAgICAgICAgICAgICAgIG1heCA9IHRl
bXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkID0gTWF0aC5tYXgobWluLCBkKTsKKyAg
ICAgICAgICAgIG1heFZhbHVlID0gTWF0aC5taW4obWF4LCBtYXhWYWx1ZSk7CisgICAgICAgICAg
ICBpZiAoZCA+IG1heFZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAg
LyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSByYXkgaW50ZXJzZWN0cyBhIGJveAorICAgICAqIEBw
YXJhbSBib3ggdGhlIGJvdW5kaW5nIGJveCB0byBjaGVjaworICAgICAqIEBwYXJhbSBpbnRlcnNl
Y3Rpb25UcmVzaG9sZCBleHRyYSBleHRlbmQgdG8gYmUgYWRkZWQgdG8gdGhlIEJvdW5kaW5nQm94
IGluIGFsbCBkaXJlY3Rpb24KKyAgICAgKiBAcmV0dXJucyBpZiB0aGUgYm94IHdhcyBoaXQKKyAg
ICAgKi8KKyAgICBSYXkucHJvdG90eXBlLmludGVyc2VjdHNCb3ggPSBmdW5jdGlvbiAoYm94LCBp
bnRlcnNlY3Rpb25UcmVzaG9sZCkgeworICAgICAgICBpZiAoaW50ZXJzZWN0aW9uVHJlc2hvbGQg
PT09IHZvaWQgMCkgeyBpbnRlcnNlY3Rpb25UcmVzaG9sZCA9IDA7IH0KKyAgICAgICAgcmV0dXJu
IHRoaXMuaW50ZXJzZWN0c0JveE1pbk1heChib3gubWluaW11bSwgYm94Lm1heGltdW0sIGludGVy
c2VjdGlvblRyZXNob2xkKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIElmIHRoZSByYXkgaGl0
cyBhIHNwaGVyZQorICAgICAqIEBwYXJhbSBzcGhlcmUgdGhlIGJvdW5kaW5nIHNwaGVyZSB0byBj
aGVjaworICAgICAqIEBwYXJhbSBpbnRlcnNlY3Rpb25UcmVzaG9sZCBleHRyYSBleHRlbmQgdG8g
YmUgYWRkZWQgdG8gdGhlIEJvdW5kaW5nU3BoZXJlIGluIGFsbCBkaXJlY3Rpb24KKyAgICAgKiBA
cmV0dXJucyB0cnVlIGlmIGl0IGhpdHMgdGhlIHNwaGVyZQorICAgICAqLworICAgIFJheS5wcm90
b3R5cGUuaW50ZXJzZWN0c1NwaGVyZSA9IGZ1bmN0aW9uIChzcGhlcmUsIGludGVyc2VjdGlvblRy
ZXNob2xkKSB7CisgICAgICAgIGlmIChpbnRlcnNlY3Rpb25UcmVzaG9sZCA9PT0gdm9pZCAwKSB7
IGludGVyc2VjdGlvblRyZXNob2xkID0gMDsgfQorICAgICAgICB2YXIgeCA9IHNwaGVyZS5jZW50
ZXIueCAtIHRoaXMub3JpZ2luLng7CisgICAgICAgIHZhciB5ID0gc3BoZXJlLmNlbnRlci55IC0g
dGhpcy5vcmlnaW4ueTsKKyAgICAgICAgdmFyIHogPSBzcGhlcmUuY2VudGVyLnogLSB0aGlzLm9y
aWdpbi56OworICAgICAgICB2YXIgcHl0aCA9ICh4ICogeCkgKyAoeSAqIHkpICsgKHogKiB6KTsK
KyAgICAgICAgdmFyIHJhZGl1cyA9IHNwaGVyZS5yYWRpdXMgKyBpbnRlcnNlY3Rpb25UcmVzaG9s
ZDsKKyAgICAgICAgdmFyIHJyID0gcmFkaXVzICogcmFkaXVzOworICAgICAgICBpZiAocHl0aCA8
PSBycikgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IGRvdCA9ICh4ICogdGhpcy5kaXJlY3Rpb24ueCkgKyAoeSAqIHRoaXMuZGlyZWN0aW9uLnkpICsg
KHogKiB0aGlzLmRpcmVjdGlvbi56KTsKKyAgICAgICAgaWYgKGRvdCA8IDAuMCkgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHZhciB0ZW1wID0gcHl0aCAt
IChkb3QgKiBkb3QpOworICAgICAgICByZXR1cm4gdGVtcCA8PSBycjsKKyAgICB9OworICAgIC8q
KgorICAgICAqIElmIHRoZSByYXkgaGl0cyBhIHRyaWFuZ2UKKyAgICAgKiBAcGFyYW0gdmVydGV4
MCB0cmlhbmdsZSB2ZXJ0ZXgKKyAgICAgKiBAcGFyYW0gdmVydGV4MSB0cmlhbmdsZSB2ZXJ0ZXgK
KyAgICAgKiBAcGFyYW0gdmVydGV4MiB0cmlhbmdsZSB2ZXJ0ZXgKKyAgICAgKiBAcmV0dXJucyBp
bnRlcnNlY3Rpb24gaW5mb3JtYXRpb24gaWYgaGl0CisgICAgICovCisgICAgUmF5LnByb3RvdHlw
ZS5pbnRlcnNlY3RzVHJpYW5nbGUgPSBmdW5jdGlvbiAodmVydGV4MCwgdmVydGV4MSwgdmVydGV4
MikgeworICAgICAgICB2YXIgZWRnZTEgPSBSYXkuVG1wVmVjdG9yM1swXTsKKyAgICAgICAgdmFy
IGVkZ2UyID0gUmF5LlRtcFZlY3RvcjNbMV07CisgICAgICAgIHZhciBwdmVjID0gUmF5LlRtcFZl
Y3RvcjNbMl07CisgICAgICAgIHZhciB0dmVjID0gUmF5LlRtcFZlY3RvcjNbM107CisgICAgICAg
IHZhciBxdmVjID0gUmF5LlRtcFZlY3RvcjNbNF07CisgICAgICAgIHZlcnRleDEuc3VidHJhY3RU
b1JlZih2ZXJ0ZXgwLCBlZGdlMSk7CisgICAgICAgIHZlcnRleDIuc3VidHJhY3RUb1JlZih2ZXJ0
ZXgwLCBlZGdlMik7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZih0aGlzLmRpcmVjdGlvbiwgZWRnZTIs
IHB2ZWMpOworICAgICAgICB2YXIgZGV0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Eb3QoZWRnZTEsIHB2ZWMpOworICAgICAgICBp
ZiAoZGV0ID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgaW52ZGV0ID0gMSAvIGRldDsKKyAgICAgICAgdGhpcy5vcmlnaW4uc3VidHJhY3RU
b1JlZih2ZXJ0ZXgwLCB0dmVjKTsKKyAgICAgICAgdmFyIGJ2ID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Eb3QodHZlYywgcHZlYykg
KiBpbnZkZXQ7CisgICAgICAgIGlmIChidiA8IDAgfHwgYnYgPiAxLjApIHsKKyAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZih0dmVjLCBlZGdl
MSwgcXZlYyk7CisgICAgICAgIHZhciBidyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uRG90KHRoaXMuZGlyZWN0aW9uLCBxdmVjKSAq
IGludmRldDsKKyAgICAgICAgaWYgKGJ3IDwgMCB8fCBidiArIGJ3ID4gMS4wKSB7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICAvL2NoZWNrIGlmIHRoZSBkaXN0
YW5jZSBpcyBsb25nZXIgdGhhbiB0aGUgcHJlZGVmaW5lZCBsZW5ndGguCisgICAgICAgIHZhciBk
aXN0YW5jZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJWZWN0b3IzIl0uRG90KGVkZ2UyLCBxdmVjKSAqIGludmRldDsKKyAgICAgICAgaWYgKGRpc3Rh
bmNlID4gdGhpcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBuZXcgX0NvbGxpc2lvbnNfaW50ZXJzZWN0aW9uSW5mb19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJJbnRlcnNlY3Rpb25JbmZvIl0oMSAtIGJ2IC0gYncsIGJ2
LCBkaXN0YW5jZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgcmF5IGludGVy
c2VjdHMgYSBwbGFuZQorICAgICAqIEBwYXJhbSBwbGFuZSB0aGUgcGxhbmUgdG8gY2hlY2sKKyAg
ICAgKiBAcmV0dXJucyB0aGUgZGlzdGFuY2UgYXdheSBpdCB3YXMgaGl0CisgICAgICovCisgICAg
UmF5LnByb3RvdHlwZS5pbnRlcnNlY3RzUGxhbmUgPSBmdW5jdGlvbiAocGxhbmUpIHsKKyAgICAg
ICAgdmFyIGRpc3RhbmNlOworICAgICAgICB2YXIgcmVzdWx0MSA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uRG90KHBsYW5lLm5vcm1h
bCwgdGhpcy5kaXJlY3Rpb24pOworICAgICAgICBpZiAoTWF0aC5hYnMocmVzdWx0MSkgPCA5Ljk5
OTk5OTk3NDc1MjQzRS0wNykgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0MiA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uRG90KHBsYW5lLm5v
cm1hbCwgdGhpcy5vcmlnaW4pOworICAgICAgICAgICAgZGlzdGFuY2UgPSAoLXBsYW5lLmQgLSBy
ZXN1bHQyKSAvIHJlc3VsdDE7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCAwLjApIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCAtOS45OTk5OTk5NzQ3NTI0M0UtMDcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZGlzdGFuY2U7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGN1bGF0ZSB0aGUgaW50ZXJjZXB0
IG9mIGEgcmF5IG9uIGEgZ2l2ZW4gYXhpcworICAgICAqIEBwYXJhbSBheGlzIHRvIGNoZWNrICd4
JyB8ICd5JyB8ICd6JworICAgICAqIEBwYXJhbSBvZmZzZXQgZnJvbSBheGlzIGludGVyY2VwdGlv
biAoaS5lLiBhbiBvZmZzZXQgb2YgMXkgaXMgaW50ZXJjZXB0ZWQgYWJvdmUgZ3JvdW5kKQorICAg
ICAqIEByZXR1cm5zIGEgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIHdoZXJlICdh
eGlzJyBpcyBlcXVhbCB0byB6ZXJvIChlbHNlIG9mZnNldCksIG9yIG51bGwgaWYgdGhlcmUgaXMg
bm8gaW50ZXJjZXB0LgorICAgICAqLworICAgIFJheS5wcm90b3R5cGUuaW50ZXJzZWN0c0F4aXMg
PSBmdW5jdGlvbiAoYXhpcywgb2Zmc2V0KSB7CisgICAgICAgIGlmIChvZmZzZXQgPT09IHZvaWQg
MCkgeyBvZmZzZXQgPSAwOyB9CisgICAgICAgIHN3aXRjaCAoYXhpcykgeworICAgICAgICAgICAg
Y2FzZSAneSc6CisgICAgICAgICAgICAgICAgdmFyIHQgPSAodGhpcy5vcmlnaW4ueSAtIG9mZnNl
dCkgLyB0aGlzLmRpcmVjdGlvbi55OworICAgICAgICAgICAgICAgIGlmICh0ID4gMCkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVjdG9yMyJdKHRoaXMub3JpZ2luLnggKyAodGhpcy5kaXJlY3Rpb24ueCAq
IC10KSwgb2Zmc2V0LCB0aGlzLm9yaWdpbi56ICsgKHRoaXMuZGlyZWN0aW9uLnogKiAtdCkpOwor
ICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAgdmFyIHQgPSAodGhpcy5vcmln
aW4ueCAtIG9mZnNldCkgLyB0aGlzLmRpcmVjdGlvbi54OworICAgICAgICAgICAgICAgIGlmICh0
ID4gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKG9mZnNldCwgdGhpcy5vcmlnaW4ueSAr
ICh0aGlzLmRpcmVjdGlvbi55ICogLXQpLCB0aGlzLm9yaWdpbi56ICsgKHRoaXMuZGlyZWN0aW9u
LnogKiAtdCkpOworICAgICAgICAgICAgY2FzZSAneic6CisgICAgICAgICAgICAgICAgdmFyIHQg
PSAodGhpcy5vcmlnaW4ueiAtIG9mZnNldCkgLyB0aGlzLmRpcmVjdGlvbi56OworICAgICAgICAg
ICAgICAgIGlmICh0ID4gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKHRoaXMub3JpZ2lu
LnggKyAodGhpcy5kaXJlY3Rpb24ueCAqIC10KSwgdGhpcy5vcmlnaW4ueSArICh0aGlzLmRpcmVj
dGlvbi55ICogLXQpLCBvZmZzZXQpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ2hl
Y2tzIGlmIHJheSBpbnRlcnNlY3RzIGEgbWVzaAorICAgICAqIEBwYXJhbSBtZXNoIHRoZSBtZXNo
IHRvIGNoZWNrCisgICAgICogQHBhcmFtIGZhc3RDaGVjayBpZiBvbmx5IHRoZSBib3VuZGluZyBi
b3ggc2hvdWxkIGNoZWNrZWQKKyAgICAgKiBAcmV0dXJucyBwaWNraW5nIGluZm8gb2YgdGhlIGlu
dGVyc2VjdG9uCisgICAgICovCisgICAgUmF5LnByb3RvdHlwZS5pbnRlcnNlY3RzTWVzaCA9IGZ1
bmN0aW9uIChtZXNoLCBmYXN0Q2hlY2spIHsKKyAgICAgICAgdmFyIHRtID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhb
MF07CisgICAgICAgIG1lc2guZ2V0V29ybGRNYXRyaXgoKS5pbnZlcnRUb1JlZih0bSk7CisgICAg
ICAgIGlmICh0aGlzLl90bXBSYXkpIHsKKyAgICAgICAgICAgIFJheS5UcmFuc2Zvcm1Ub1JlZih0
aGlzLCB0bSwgdGhpcy5fdG1wUmF5KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHRoaXMuX3RtcFJheSA9IFJheS5UcmFuc2Zvcm0odGhpcywgdG0pOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBtZXNoLmludGVyc2VjdHModGhpcy5fdG1wUmF5LCBmYXN0Q2hlY2sp
OworICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHJheSBpbnRlcnNlY3RzIGEgbWVz
aAorICAgICAqIEBwYXJhbSBtZXNoZXMgdGhlIG1lc2hlcyB0byBjaGVjaworICAgICAqIEBwYXJh
bSBmYXN0Q2hlY2sgaWYgb25seSB0aGUgYm91bmRpbmcgYm94IHNob3VsZCBjaGVja2VkCisgICAg
ICogQHBhcmFtIHJlc3VsdHMgYXJyYXkgdG8gc3RvcmUgcmVzdWx0IGluCisgICAgICogQHJldHVy
bnMgQXJyYXkgb2YgcGlja2luZyBpbmZvcworICAgICAqLworICAgIFJheS5wcm90b3R5cGUuaW50
ZXJzZWN0c01lc2hlcyA9IGZ1bmN0aW9uIChtZXNoZXMsIGZhc3RDaGVjaywgcmVzdWx0cykgewor
ICAgICAgICBpZiAocmVzdWx0cykgeworICAgICAgICAgICAgcmVzdWx0cy5sZW5ndGggPSAwOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0cyA9IFtdOworICAg
ICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzaGVzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICB2YXIgcGlja0luZm8gPSB0aGlzLmludGVyc2VjdHNNZXNoKG1lc2hlc1tp
XSwgZmFzdENoZWNrKTsKKyAgICAgICAgICAgIGlmIChwaWNrSW5mby5oaXQpIHsKKyAgICAgICAg
ICAgICAgICByZXN1bHRzLnB1c2gocGlja0luZm8pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJlc3VsdHMuc29ydCh0aGlzLl9jb21wYXJlUGlja2luZ0luZm8pOworICAgICAg
ICByZXR1cm4gcmVzdWx0czsKKyAgICB9OworICAgIFJheS5wcm90b3R5cGUuX2NvbXBhcmVQaWNr
aW5nSW5mbyA9IGZ1bmN0aW9uIChwaWNraW5nSW5mb0EsIHBpY2tpbmdJbmZvQikgeworICAgICAg
ICBpZiAocGlja2luZ0luZm9BLmRpc3RhbmNlIDwgcGlja2luZ0luZm9CLmRpc3RhbmNlKSB7Cisg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocGlja2lu
Z0luZm9BLmRpc3RhbmNlID4gcGlja2luZ0luZm9CLmRpc3RhbmNlKSB7CisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcnNlY3Rpb24gdGVzdCBi
ZXR3ZWVuIHRoZSByYXkgYW5kIGEgZ2l2ZW4gc2VnbWVudCB3aGl0aGluIGEgZ2l2ZW4gdG9sZXJh
bmNlICh0aHJlc2hvbGQpCisgICAgICogQHBhcmFtIHNlZ2EgdGhlIGZpcnN0IHBvaW50IG9mIHRo
ZSBzZWdtZW50IHRvIHRlc3QgdGhlIGludGVyc2VjdGlvbiBhZ2FpbnN0CisgICAgICogQHBhcmFt
IHNlZ2IgdGhlIHNlY29uZCBwb2ludCBvZiB0aGUgc2VnbWVudCB0byB0ZXN0IHRoZSBpbnRlcnNl
Y3Rpb24gYWdhaW5zdAorICAgICAqIEBwYXJhbSB0aHJlc2hvbGQgdGhlIHRvbGVyYW5jZSBtYXJn
aW4sIGlmIHRoZSByYXkgZG9lc24ndCBpbnRlcnNlY3QgdGhlIHNlZ21lbnQgYnV0IGlzIGNsb3Nl
IHRvIHRoZSBnaXZlbiB0aHJlc2hvbGQsIHRoZSBpbnRlcnNlY3Rpb24gaXMgc3VjY2Vzc2Z1bAor
ICAgICAqIEByZXR1cm4gdGhlIGRpc3RhbmNlIGZyb20gdGhlIHJheSBvcmlnaW4gdG8gdGhlIGlu
dGVyc2VjdGlvbiBwb2ludCBpZiB0aGVyZSdzIGludGVyc2VjdGlvbiwgb3IgLTEgaWYgdGhlcmUn
cyBubyBpbnRlcnNlY3Rpb24KKyAgICAgKi8KKyAgICBSYXkucHJvdG90eXBlLmludGVyc2VjdGlv
blNlZ21lbnQgPSBmdW5jdGlvbiAoc2VnYSwgc2VnYiwgdGhyZXNob2xkKSB7CisgICAgICAgIHZh
ciBvID0gdGhpcy5vcmlnaW47CisgICAgICAgIHZhciB1ID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdOworICAg
ICAgICB2YXIgcnNlZ2IgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMV07CisgICAgICAgIHZhciB2ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5W
ZWN0b3IzWzJdOworICAgICAgICB2YXIgdyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1szXTsKKyAgICAgICAgc2Vn
Yi5zdWJ0cmFjdFRvUmVmKHNlZ2EsIHUpOworICAgICAgICB0aGlzLmRpcmVjdGlvbi5zY2FsZVRv
UmVmKFJheS5yYXlsLCB2KTsKKyAgICAgICAgby5hZGRUb1JlZih2LCByc2VnYik7CisgICAgICAg
IHNlZ2Euc3VidHJhY3RUb1JlZihvLCB3KTsKKyAgICAgICAgdmFyIGEgPSBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRvdCh1LCB1KTsg
Ly8gYWx3YXlzID49IDAKKyAgICAgICAgdmFyIGIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRvdCh1LCB2KTsKKyAgICAgICAgdmFy
IGMgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVj
dG9yMyJdLkRvdCh2LCB2KTsgLy8gYWx3YXlzID49IDAKKyAgICAgICAgdmFyIGQgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRvdCh1
LCB3KTsKKyAgICAgICAgdmFyIGUgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRvdCh2LCB3KTsKKyAgICAgICAgdmFyIEQgPSBhICog
YyAtIGIgKiBiOyAvLyBhbHdheXMgPj0gMAorICAgICAgICB2YXIgc2MsIHNOLCBzRCA9IEQ7IC8v
IHNjID0gc04gLyBzRCwgZGVmYXVsdCBzRCA9IEQgPj0gMAorICAgICAgICB2YXIgdGMsIHROLCB0
RCA9IEQ7IC8vIHRjID0gdE4gLyB0RCwgZGVmYXVsdCB0RCA9IEQgPj0gMAorICAgICAgICAvLyBj
b21wdXRlIHRoZSBsaW5lIHBhcmFtZXRlcnMgb2YgdGhlIHR3byBjbG9zZXN0IHBvaW50cworICAg
ICAgICBpZiAoRCA8IFJheS5zbWFsbG51bSkgeyAvLyB0aGUgbGluZXMgYXJlIGFsbW9zdCBwYXJh
bGxlbAorICAgICAgICAgICAgc04gPSAwLjA7IC8vIGZvcmNlIHVzaW5nIHBvaW50IFAwIG9uIHNl
Z21lbnQgUzEKKyAgICAgICAgICAgIHNEID0gMS4wOyAvLyB0byBwcmV2ZW50IHBvc3NpYmxlIGRp
dmlzaW9uIGJ5IDAuMCBsYXRlcgorICAgICAgICAgICAgdE4gPSBlOworICAgICAgICAgICAgdEQg
PSBjOworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAvLyBnZXQgdGhlIGNsb3Nlc3QgcG9pbnRz
IG9uIHRoZSBpbmZpbml0ZSBsaW5lcworICAgICAgICAgICAgc04gPSAoYiAqIGUgLSBjICogZCk7
CisgICAgICAgICAgICB0TiA9IChhICogZSAtIGIgKiBkKTsKKyAgICAgICAgICAgIGlmIChzTiA8
IDAuMCkgeyAvLyBzYyA8IDAgPT4gdGhlIHM9MCBlZGdlIGlzIHZpc2libGUKKyAgICAgICAgICAg
ICAgICBzTiA9IDAuMDsKKyAgICAgICAgICAgICAgICB0TiA9IGU7CisgICAgICAgICAgICAgICAg
dEQgPSBjOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc04gPiBzRCkgeyAv
LyBzYyA+IDEgPT4gdGhlIHM9MSBlZGdlIGlzIHZpc2libGUKKyAgICAgICAgICAgICAgICBzTiA9
IHNEOworICAgICAgICAgICAgICAgIHROID0gZSArIGI7CisgICAgICAgICAgICAgICAgdEQgPSBj
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0TiA8IDAuMCkgeyAvLyB0
YyA8IDAgPT4gdGhlIHQ9MCBlZGdlIGlzIHZpc2libGUKKyAgICAgICAgICAgIHROID0gMC4wOwor
ICAgICAgICAgICAgLy8gcmVjb21wdXRlIHNjIGZvciB0aGlzIGVkZ2UKKyAgICAgICAgICAgIGlm
ICgtZCA8IDAuMCkgeworICAgICAgICAgICAgICAgIHNOID0gMC4wOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAoLWQgPiBhKSB7CisgICAgICAgICAgICAgICAgc04gPSBzRDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNOID0g
LWQ7CisgICAgICAgICAgICAgICAgc0QgPSBhOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHROID4gdEQpIHsgLy8gdGMgPiAxID0+IHRoZSB0PTEgZWRnZSBpcyB2
aXNpYmxlCisgICAgICAgICAgICB0TiA9IHREOworICAgICAgICAgICAgLy8gcmVjb21wdXRlIHNj
IGZvciB0aGlzIGVkZ2UKKyAgICAgICAgICAgIGlmICgoLWQgKyBiKSA8IDAuMCkgeworICAgICAg
ICAgICAgICAgIHNOID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCgt
ZCArIGIpID4gYSkgeworICAgICAgICAgICAgICAgIHNOID0gc0Q7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzTiA9ICgtZCArIGIpOworICAgICAg
ICAgICAgICAgIHNEID0gYTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBm
aW5hbGx5IGRvIHRoZSBkaXZpc2lvbiB0byBnZXQgc2MgYW5kIHRjCisgICAgICAgIHNjID0gKE1h
dGguYWJzKHNOKSA8IFJheS5zbWFsbG51bSA/IDAuMCA6IHNOIC8gc0QpOworICAgICAgICB0YyA9
IChNYXRoLmFicyh0TikgPCBSYXkuc21hbGxudW0gPyAwLjAgOiB0TiAvIHREKTsKKyAgICAgICAg
Ly8gZ2V0IHRoZSBkaWZmZXJlbmNlIG9mIHRoZSB0d28gY2xvc2VzdCBwb2ludHMKKyAgICAgICAg
dmFyIHF0YyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJUbXBWZWN0b3JzIl0uVmVjdG9yM1s0XTsKKyAgICAgICAgdi5zY2FsZVRvUmVmKHRjLCBxdGMp
OworICAgICAgICB2YXIgcXNjID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzVdOworICAgICAgICB1LnNjYWxlVG9S
ZWYoc2MsIHFzYyk7CisgICAgICAgIHFzYy5hZGRJblBsYWNlKHcpOworICAgICAgICB2YXIgZFAg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG1wVmVj
dG9ycyJdLlZlY3RvcjNbNl07CisgICAgICAgIHFzYy5zdWJ0cmFjdFRvUmVmKHF0YywgZFApOyAv
LyA9IFMxKHNjKSAtIFMyKHRjKQorICAgICAgICB2YXIgaXNJbnRlcnNlY3RlZCA9ICh0YyA+IDAp
ICYmICh0YyA8PSB0aGlzLmxlbmd0aCkgJiYgKGRQLmxlbmd0aFNxdWFyZWQoKSA8ICh0aHJlc2hv
bGQgKiB0aHJlc2hvbGQpKTsgLy8gcmV0dXJuIGludGVyc2VjdGlvbiByZXN1bHQKKyAgICAgICAg
aWYgKGlzSW50ZXJzZWN0ZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBxc2MubGVuZ3RoKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH07CisgICAgLyoqCisgICAgICogVXBk
YXRlIHRoZSByYXkgZnJvbSB2aWV3cG9ydCBwb3NpdGlvbgorICAgICAqIEBwYXJhbSB4IHBvc2l0
aW9uCisgICAgICogQHBhcmFtIHkgeSBwb3NpdGlvbgorICAgICAqIEBwYXJhbSB2aWV3cG9ydFdp
ZHRoIHZpZXdwb3J0IHdpZHRoCisgICAgICogQHBhcmFtIHZpZXdwb3J0SGVpZ2h0IHZpZXdwb3J0
IGhlaWdodAorICAgICAqIEBwYXJhbSB3b3JsZCB3b3JsZCBtYXRyaXgKKyAgICAgKiBAcGFyYW0g
dmlldyB2aWV3IG1hdHJpeAorICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIHByb2plY3Rpb24gbWF0
cml4CisgICAgICogQHJldHVybnMgdGhpcyByYXkgdXBkYXRlZAorICAgICAqLworICAgIFJheS5w
cm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKHgsIHksIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0
SGVpZ2h0LCB3b3JsZCwgdmlldywgcHJvamVjdGlvbikgeworICAgICAgICB0aGlzLnVucHJvamVj
dFJheVRvUmVmKHgsIHksIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB3b3JsZCwgdmll
dywgcHJvamVjdGlvbik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLy8gU3Rh
dGljcworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSByYXkgd2l0aCBvcmlnaW4gYW5kIGRpcmVj
dGlvbiBvZiAwLDAsMAorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgcmF5CisgICAgICovCisgICAg
UmF5Llplcm8gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgUmF5KF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybygp
LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9y
MyJdLlplcm8oKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHJheSBm
cm9tIHNjcmVlbiBzcGFjZSBhbmQgdmlld3BvcnQKKyAgICAgKiBAcGFyYW0geCBwb3NpdGlvbgor
ICAgICAqIEBwYXJhbSB5IHkgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gdmlld3BvcnRXaWR0aCB2
aWV3cG9ydCB3aWR0aAorICAgICAqIEBwYXJhbSB2aWV3cG9ydEhlaWdodCB2aWV3cG9ydCBoZWln
aHQKKyAgICAgKiBAcGFyYW0gd29ybGQgd29ybGQgbWF0cml4CisgICAgICogQHBhcmFtIHZpZXcg
dmlldyBtYXRyaXgKKyAgICAgKiBAcGFyYW0gcHJvamVjdGlvbiBwcm9qZWN0aW9uIG1hdHJpeAor
ICAgICAqIEByZXR1cm5zIG5ldyByYXkKKyAgICAgKi8KKyAgICBSYXkuQ3JlYXRlTmV3ID0gZnVu
Y3Rpb24gKHgsIHksIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB3b3JsZCwgdmlldywg
cHJvamVjdGlvbikgeworICAgICAgICB2YXIgcmVzdWx0ID0gUmF5Llplcm8oKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC51cGRhdGUoeCwgeSwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQs
IHdvcmxkLCB2aWV3LCBwcm9qZWN0aW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICogRnVuY3Rp
b24gd2lsbCBjcmVhdGUgYSBuZXcgdHJhbnNmb3JtZWQgcmF5IHN0YXJ0aW5nIGZyb20gb3JpZ2lu
IGFuZCBlbmRpbmcgYXQgdGhlIGVuZCBwb2ludC4gUmF5J3MgbGVuZ3RoIHdpbGwgYmUgc2V0LCBh
bmQgcmF5IHdpbGwgYmUKKyAgICAqIHRyYW5zZm9ybWVkIHRvIHRoZSBnaXZlbiB3b3JsZCBtYXRy
aXguCisgICAgKiBAcGFyYW0gb3JpZ2luIFRoZSBvcmlnaW4gcG9pbnQKKyAgICAqIEBwYXJhbSBl
bmQgVGhlIGVuZCBwb2ludAorICAgICogQHBhcmFtIHdvcmxkIGEgbWF0cml4IHRvIHRyYW5zZm9y
bSB0aGUgcmF5IHRvLiBEZWZhdWx0IGlzIHRoZSBpZGVudGl0eSBtYXRyaXguCisgICAgKiBAcmV0
dXJucyB0aGUgbmV3IHJheQorICAgICovCisgICAgUmF5LkNyZWF0ZU5ld0Zyb21UbyA9IGZ1bmN0
aW9uIChvcmlnaW4sIGVuZCwgd29ybGQpIHsKKyAgICAgICAgaWYgKHdvcmxkID09PSB2b2lkIDAp
IHsgd29ybGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siTWF0cml4Il0uSWRlbnRpdHlSZWFkT25seTsgfQorICAgICAgICB2YXIgZGlyZWN0aW9uID0g
ZW5kLnN1YnRyYWN0KG9yaWdpbik7CisgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLnNxcnQoKGRp
cmVjdGlvbi54ICogZGlyZWN0aW9uLngpICsgKGRpcmVjdGlvbi55ICogZGlyZWN0aW9uLnkpICsg
KGRpcmVjdGlvbi56ICogZGlyZWN0aW9uLnopKTsKKyAgICAgICAgZGlyZWN0aW9uLm5vcm1hbGl6
ZSgpOworICAgICAgICByZXR1cm4gUmF5LlRyYW5zZm9ybShuZXcgUmF5KG9yaWdpbiwgZGlyZWN0
aW9uLCBsZW5ndGgpLCB3b3JsZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUcmFuc2Zvcm1z
IGEgcmF5IGJ5IGEgbWF0cml4CisgICAgICogQHBhcmFtIHJheSByYXkgdG8gdHJhbnNmb3JtCisg
ICAgICogQHBhcmFtIG1hdHJpeCBtYXRyaXggdG8gYXBwbHkKKyAgICAgKiBAcmV0dXJucyB0aGUg
cmVzdWx0aW5nIG5ldyByYXkKKyAgICAgKi8KKyAgICBSYXkuVHJhbnNmb3JtID0gZnVuY3Rpb24g
KHJheSwgbWF0cml4KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgUmF5KG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAsIDAs
IDApLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlY3RvcjMiXSgwLCAwLCAwKSk7CisgICAgICAgIFJheS5UcmFuc2Zvcm1Ub1JlZihyYXksIG1h
dHJpeCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFRyYW5zZm9ybXMgYSByYXkgYnkgYSBtYXRyaXgKKyAgICAgKiBAcGFyYW0gcmF5IHJh
eSB0byB0cmFuc2Zvcm0KKyAgICAgKiBAcGFyYW0gbWF0cml4IG1hdHJpeCB0byBhcHBseQorICAg
ICAqIEBwYXJhbSByZXN1bHQgcmF5IHRvIHN0b3JlIHJlc3VsdCBpbgorICAgICAqLworICAgIFJh
eS5UcmFuc2Zvcm1Ub1JlZiA9IGZ1bmN0aW9uIChyYXksIG1hdHJpeCwgcmVzdWx0KSB7CisgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0
b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihyYXkub3JpZ2luLCBtYXRyaXgsIHJlc3Vs
dC5vcmlnaW4pOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKHJheS5kaXJlY3Rpb24s
IG1hdHJpeCwgcmVzdWx0LmRpcmVjdGlvbik7CisgICAgICAgIHJlc3VsdC5sZW5ndGggPSByYXku
bGVuZ3RoOworICAgICAgICB2YXIgZGlyID0gcmVzdWx0LmRpcmVjdGlvbjsKKyAgICAgICAgdmFy
IGxlbiA9IGRpci5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCEobGVuID09PSAwIHx8IGxlbiA9PT0g
MSkpIHsKKyAgICAgICAgICAgIHZhciBudW0gPSAxLjAgLyBsZW47CisgICAgICAgICAgICBkaXIu
eCAqPSBudW07CisgICAgICAgICAgICBkaXIueSAqPSBudW07CisgICAgICAgICAgICBkaXIueiAq
PSBudW07CisgICAgICAgICAgICByZXN1bHQubGVuZ3RoICo9IGxlbjsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICAqIFVucHJvamVjdCBhIHJheSBmcm9tIHNjcmVlbiBzcGFjZSB0
byBvYmplY3Qgc3BhY2UKKyAgICAgICogQHBhcmFtIHNvdXJjZVggZGVmaW5lcyB0aGUgc2NyZWVu
IHNwYWNlIHggY29vcmRpbmF0ZSB0byB1c2UKKyAgICAgICogQHBhcmFtIHNvdXJjZVkgZGVmaW5l
cyB0aGUgc2NyZWVuIHNwYWNlIHkgY29vcmRpbmF0ZSB0byB1c2UKKyAgICAgICogQHBhcmFtIHZp
ZXdwb3J0V2lkdGggZGVmaW5lcyB0aGUgY3VycmVudCB3aWR0aCBvZiB0aGUgdmlld3BvcnQKKyAg
ICAgICogQHBhcmFtIHZpZXdwb3J0SGVpZ2h0IGRlZmluZXMgdGhlIGN1cnJlbnQgaGVpZ2h0IG9m
IHRoZSB2aWV3cG9ydAorICAgICAgKiBAcGFyYW0gd29ybGQgZGVmaW5lcyB0aGUgd29ybGQgbWF0
cml4IHRvIHVzZSAoY2FuIGJlIHNldCB0byBJZGVudGl0eSB0byBnbyB0byB3b3JsZCBzcGFjZSkK
KyAgICAgICogQHBhcmFtIHZpZXcgZGVmaW5lcyB0aGUgdmlldyBtYXRyaXggdG8gdXNlCisgICAg
ICAqIEBwYXJhbSBwcm9qZWN0aW9uIGRlZmluZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IHRvIHVz
ZQorICAgICAgKi8KKyAgICBSYXkucHJvdG90eXBlLnVucHJvamVjdFJheVRvUmVmID0gZnVuY3Rp
b24gKHNvdXJjZVgsIHNvdXJjZVksIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB3b3Js
ZCwgdmlldywgcHJvamVjdGlvbikgeworICAgICAgICB2YXIgbWF0cml4ID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhb
MF07CisgICAgICAgIHdvcmxkLm11bHRpcGx5VG9SZWYodmlldywgbWF0cml4KTsKKyAgICAgICAg
bWF0cml4Lm11bHRpcGx5VG9SZWYocHJvamVjdGlvbiwgbWF0cml4KTsKKyAgICAgICAgbWF0cml4
LmludmVydCgpOworICAgICAgICB2YXIgbmVhclNjcmVlblNvdXJjZSA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1sw
XTsKKyAgICAgICAgbmVhclNjcmVlblNvdXJjZS54ID0gc291cmNlWCAvIHZpZXdwb3J0V2lkdGgg
KiAyIC0gMTsKKyAgICAgICAgbmVhclNjcmVlblNvdXJjZS55ID0gLShzb3VyY2VZIC8gdmlld3Bv
cnRIZWlnaHQgKiAyIC0gMSk7CisgICAgICAgIG5lYXJTY3JlZW5Tb3VyY2UueiA9IC0xLjA7Cisg
ICAgICAgIHZhciBmYXJTY3JlZW5Tb3VyY2UgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMV0uY29weUZyb21GbG9h
dHMobmVhclNjcmVlblNvdXJjZS54LCBuZWFyU2NyZWVuU291cmNlLnksIDEuMCk7CisgICAgICAg
IHZhciBuZWFyVmVjMyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1syXTsKKyAgICAgICAgdmFyIGZhclZlYzMgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG1wVmVjdG9y
cyJdLlZlY3RvcjNbM107CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uX1VucHJvamVjdEZyb21JbnZlcnRlZE1hdHJpeFRv
UmVmKG5lYXJTY3JlZW5Tb3VyY2UsIG1hdHJpeCwgbmVhclZlYzMpOworICAgICAgICBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLl9VbnBy
b2plY3RGcm9tSW52ZXJ0ZWRNYXRyaXhUb1JlZihmYXJTY3JlZW5Tb3VyY2UsIG1hdHJpeCwgZmFy
VmVjMyk7CisgICAgICAgIHRoaXMub3JpZ2luLmNvcHlGcm9tKG5lYXJWZWMzKTsKKyAgICAgICAg
ZmFyVmVjMy5zdWJ0cmFjdFRvUmVmKG5lYXJWZWMzLCB0aGlzLmRpcmVjdGlvbik7CisgICAgICAg
IHRoaXMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpOworICAgIH07CisgICAgUmF5LlRtcFZlY3RvcjMg
PSBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFycmF5VG9v
bHMiXS5CdWlsZEFycmF5KDYsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybyk7CisgICAgUmF5LnNtYWxsbnVtID0gMC4wMDAwMDAw
MTsKKyAgICBSYXkucmF5bCA9IDEwZTg7CisgICAgcmV0dXJuIFJheTsKK30oKSk7CisKK19zY2Vu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZSJdLnByb3RvdHlwZS5jcmVhdGVQ
aWNraW5nUmF5ID0gZnVuY3Rpb24gKHgsIHksIHdvcmxkLCBjYW1lcmEsIGNhbWVyYVZpZXdTcGFj
ZSkgeworICAgIGlmIChjYW1lcmFWaWV3U3BhY2UgPT09IHZvaWQgMCkgeyBjYW1lcmFWaWV3U3Bh
Y2UgPSBmYWxzZTsgfQorICAgIHZhciByZXN1bHQgPSBSYXkuWmVybygpOworICAgIHRoaXMuY3Jl
YXRlUGlja2luZ1JheVRvUmVmKHgsIHksIHdvcmxkLCByZXN1bHQsIGNhbWVyYSwgY2FtZXJhVmll
d1NwYWNlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJTY2VuZSJdLnByb3RvdHlwZS5jcmVhdGVQaWNraW5nUmF5VG9SZWYgPSBm
dW5jdGlvbiAoeCwgeSwgd29ybGQsIHJlc3VsdCwgY2FtZXJhLCBjYW1lcmFWaWV3U3BhY2UpIHsK
KyAgICBpZiAoY2FtZXJhVmlld1NwYWNlID09PSB2b2lkIDApIHsgY2FtZXJhVmlld1NwYWNlID0g
ZmFsc2U7IH0KKyAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRFbmdpbmUoKTsKKyAgICBpZiAoIWNh
bWVyYSkgeworICAgICAgICBpZiAoIXRoaXMuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIkFjdGl2ZSBjYW1lcmEgbm90IHNldCIpOworICAgICAgICB9CisgICAg
ICAgIGNhbWVyYSA9IHRoaXMuYWN0aXZlQ2FtZXJhOworICAgIH0KKyAgICB2YXIgY2FtZXJhVmll
d3BvcnQgPSBjYW1lcmEudmlld3BvcnQ7CisgICAgdmFyIHZpZXdwb3J0ID0gY2FtZXJhVmlld3Bv
cnQudG9HbG9iYWwoZW5naW5lLmdldFJlbmRlcldpZHRoKCksIGVuZ2luZS5nZXRSZW5kZXJIZWln
aHQoKSk7CisgICAgLy8gTW92aW5nIGNvb3JkaW5hdGVzIHRvIGxvY2FsIHZpZXdwb3J0IHdvcmxk
CisgICAgeCA9IHggLyBlbmdpbmUuZ2V0SGFyZHdhcmVTY2FsaW5nTGV2ZWwoKSAtIHZpZXdwb3J0
Lng7CisgICAgeSA9IHkgLyBlbmdpbmUuZ2V0SGFyZHdhcmVTY2FsaW5nTGV2ZWwoKSAtIChlbmdp
bmUuZ2V0UmVuZGVySGVpZ2h0KCkgLSB2aWV3cG9ydC55IC0gdmlld3BvcnQuaGVpZ2h0KTsKKyAg
ICByZXN1bHQudXBkYXRlKHgsIHksIHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQsIHdv
cmxkID8gd29ybGQgOiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siTWF0cml4Il0uSWRlbnRpdHlSZWFkT25seSwgY2FtZXJhVmlld1NwYWNlID8gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLklkZW50
aXR5UmVhZE9ubHkgOiBjYW1lcmEuZ2V0Vmlld01hdHJpeCgpLCBjYW1lcmEuZ2V0UHJvamVjdGlv
bk1hdHJpeCgpKTsKKyAgICByZXR1cm4gdGhpczsKK307Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siU2NlbmUiXS5wcm90b3R5cGUuY3JlYXRlUGlja2luZ1JheUluQ2FtZXJh
U3BhY2UgPSBmdW5jdGlvbiAoeCwgeSwgY2FtZXJhKSB7CisgICAgdmFyIHJlc3VsdCA9IFJheS5a
ZXJvKCk7CisgICAgdGhpcy5jcmVhdGVQaWNraW5nUmF5SW5DYW1lcmFTcGFjZVRvUmVmKHgsIHks
IHJlc3VsdCwgY2FtZXJhKTsKKyAgICByZXR1cm4gcmVzdWx0OworfTsKK19zY2VuZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZSJdLnByb3RvdHlwZS5jcmVhdGVQaWNraW5nUmF5
SW5DYW1lcmFTcGFjZVRvUmVmID0gZnVuY3Rpb24gKHgsIHksIHJlc3VsdCwgY2FtZXJhKSB7Cisg
ICAgaWYgKCFfQ29sbGlzaW9uc19waWNraW5nSW5mb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJQaWNraW5nSW5mbyJdKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgICB2
YXIgZW5naW5lID0gdGhpcy5nZXRFbmdpbmUoKTsKKyAgICBpZiAoIWNhbWVyYSkgeworICAgICAg
ICBpZiAoIXRoaXMuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkFjdGl2ZSBjYW1lcmEgbm90IHNldCIpOworICAgICAgICB9CisgICAgICAgIGNhbWVyYSA9IHRo
aXMuYWN0aXZlQ2FtZXJhOworICAgIH0KKyAgICB2YXIgY2FtZXJhVmlld3BvcnQgPSBjYW1lcmEu
dmlld3BvcnQ7CisgICAgdmFyIHZpZXdwb3J0ID0gY2FtZXJhVmlld3BvcnQudG9HbG9iYWwoZW5n
aW5lLmdldFJlbmRlcldpZHRoKCksIGVuZ2luZS5nZXRSZW5kZXJIZWlnaHQoKSk7CisgICAgdmFy
IGlkZW50aXR5ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgLy8gTW92aW5nIGNvb3JkaW5hdGVzIHRvIGxv
Y2FsIHZpZXdwb3J0IHdvcmxkCisgICAgeCA9IHggLyBlbmdpbmUuZ2V0SGFyZHdhcmVTY2FsaW5n
TGV2ZWwoKSAtIHZpZXdwb3J0Lng7CisgICAgeSA9IHkgLyBlbmdpbmUuZ2V0SGFyZHdhcmVTY2Fs
aW5nTGV2ZWwoKSAtIChlbmdpbmUuZ2V0UmVuZGVySGVpZ2h0KCkgLSB2aWV3cG9ydC55IC0gdmll
d3BvcnQuaGVpZ2h0KTsKKyAgICByZXN1bHQudXBkYXRlKHgsIHksIHZpZXdwb3J0LndpZHRoLCB2
aWV3cG9ydC5oZWlnaHQsIGlkZW50aXR5LCBpZGVudGl0eSwgY2FtZXJhLmdldFByb2plY3Rpb25N
YXRyaXgoKSk7CisgICAgcmV0dXJuIHRoaXM7Cit9OworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIlNjZW5lIl0ucHJvdG90eXBlLl9pbnRlcm5hbFBpY2sgPSBmdW5jdGlvbiAo
cmF5RnVuY3Rpb24sIHByZWRpY2F0ZSwgZmFzdENoZWNrLCB0cmlhbmdsZVByZWRpY2F0ZSkgewor
ICAgIGlmICghX0NvbGxpc2lvbnNfcGlja2luZ0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siUGlja2luZ0luZm8iXSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAg
dmFyIHBpY2tpbmdJbmZvID0gbnVsbDsKKyAgICBmb3IgKHZhciBtZXNoSW5kZXggPSAwOyBtZXNo
SW5kZXggPCB0aGlzLm1lc2hlcy5sZW5ndGg7IG1lc2hJbmRleCsrKSB7CisgICAgICAgIHZhciBt
ZXNoID0gdGhpcy5tZXNoZXNbbWVzaEluZGV4XTsKKyAgICAgICAgaWYgKHByZWRpY2F0ZSkgewor
ICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUobWVzaCkpIHsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghbWVzaC5p
c0VuYWJsZWQoKSB8fCAhbWVzaC5pc1Zpc2libGUgfHwgIW1lc2guaXNQaWNrYWJsZSkgeworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHdvcmxkID0gbWVzaC5n
ZXRXb3JsZE1hdHJpeCgpOworICAgICAgICB2YXIgcmF5ID0gcmF5RnVuY3Rpb24od29ybGQpOwor
ICAgICAgICB2YXIgcmVzdWx0ID0gbWVzaC5pbnRlcnNlY3RzKHJheSwgZmFzdENoZWNrLCB0cmlh
bmdsZVByZWRpY2F0ZSk7CisgICAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuaGl0KSB7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWZhc3RDaGVjayAm
JiBwaWNraW5nSW5mbyAhPSBudWxsICYmIHJlc3VsdC5kaXN0YW5jZSA+PSBwaWNraW5nSW5mby5k
aXN0YW5jZSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcGlj
a2luZ0luZm8gPSByZXN1bHQ7CisgICAgICAgIGlmIChmYXN0Q2hlY2spIHsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwaWNraW5nSW5mbyB8fCBuZXcg
X0NvbGxpc2lvbnNfcGlja2luZ0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUGlj
a2luZ0luZm8iXSgpOworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJT
Y2VuZSJdLnByb3RvdHlwZS5faW50ZXJuYWxNdWx0aVBpY2sgPSBmdW5jdGlvbiAocmF5RnVuY3Rp
b24sIHByZWRpY2F0ZSwgdHJpYW5nbGVQcmVkaWNhdGUpIHsKKyAgICBpZiAoIV9Db2xsaXNpb25z
X3BpY2tpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBpY2tpbmdJbmZvIl0p
IHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHZhciBwaWNraW5nSW5mb3MgPSBu
ZXcgQXJyYXkoKTsKKyAgICBmb3IgKHZhciBtZXNoSW5kZXggPSAwOyBtZXNoSW5kZXggPCB0aGlz
Lm1lc2hlcy5sZW5ndGg7IG1lc2hJbmRleCsrKSB7CisgICAgICAgIHZhciBtZXNoID0gdGhpcy5t
ZXNoZXNbbWVzaEluZGV4XTsKKyAgICAgICAgaWYgKHByZWRpY2F0ZSkgeworICAgICAgICAgICAg
aWYgKCFwcmVkaWNhdGUobWVzaCkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghbWVzaC5pc0VuYWJsZWQoKSB8
fCAhbWVzaC5pc1Zpc2libGUgfHwgIW1lc2guaXNQaWNrYWJsZSkgeworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHdvcmxkID0gbWVzaC5nZXRXb3JsZE1hdHJp
eCgpOworICAgICAgICB2YXIgcmF5ID0gcmF5RnVuY3Rpb24od29ybGQpOworICAgICAgICB2YXIg
cmVzdWx0ID0gbWVzaC5pbnRlcnNlY3RzKHJheSwgZmFsc2UsIHRyaWFuZ2xlUHJlZGljYXRlKTsK
KyAgICAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5oaXQpIHsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIHBpY2tpbmdJbmZvcy5wdXNoKHJlc3VsdCk7CisgICAg
fQorICAgIHJldHVybiBwaWNraW5nSW5mb3M7Cit9OworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIlNjZW5lIl0ucHJvdG90eXBlLnBpY2sgPSBmdW5jdGlvbiAoeCwgeSwgcHJl
ZGljYXRlLCBmYXN0Q2hlY2ssIGNhbWVyYSwgdHJpYW5nbGVQcmVkaWNhdGUpIHsKKyAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgIGlmICghX0NvbGxpc2lvbnNfcGlja2luZ0luZm9fX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siUGlja2luZ0luZm8iXSkgeworICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9CisgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2ludGVybmFsUGljayhmdW5jdGlvbiAo
d29ybGQpIHsKKyAgICAgICAgaWYgKCFfdGhpcy5fdGVtcFBpY2tpbmdSYXkpIHsKKyAgICAgICAg
ICAgIF90aGlzLl90ZW1wUGlja2luZ1JheSA9IFJheS5aZXJvKCk7CisgICAgICAgIH0KKyAgICAg
ICAgX3RoaXMuY3JlYXRlUGlja2luZ1JheVRvUmVmKHgsIHksIHdvcmxkLCBfdGhpcy5fdGVtcFBp
Y2tpbmdSYXksIGNhbWVyYSB8fCBudWxsKTsKKyAgICAgICAgcmV0dXJuIF90aGlzLl90ZW1wUGlj
a2luZ1JheTsKKyAgICB9LCBwcmVkaWNhdGUsIGZhc3RDaGVjaywgdHJpYW5nbGVQcmVkaWNhdGUp
OworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnJheSA9IHRoaXMuY3JlYXRlUGlj
a2luZ1JheSh4LCB5LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siTWF0cml4Il0uSWRlbnRpdHkoKSwgY2FtZXJhIHx8IG51bGwpOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJT
Y2VuZSJdLnByb3RvdHlwZS5waWNrV2l0aFJheSA9IGZ1bmN0aW9uIChyYXksIHByZWRpY2F0ZSwg
ZmFzdENoZWNrLCB0cmlhbmdsZVByZWRpY2F0ZSkgeworICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgdmFyIHJlc3VsdCA9IHRoaXMuX2ludGVybmFsUGljayhmdW5jdGlvbiAod29ybGQpIHsKKyAg
ICAgICAgaWYgKCFfdGhpcy5fcGlja1dpdGhSYXlJbnZlcnNlTWF0cml4KSB7CisgICAgICAgICAg
ICBfdGhpcy5fcGlja1dpdGhSYXlJbnZlcnNlTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgICAg
IH0KKyAgICAgICAgd29ybGQuaW52ZXJ0VG9SZWYoX3RoaXMuX3BpY2tXaXRoUmF5SW52ZXJzZU1h
dHJpeCk7CisgICAgICAgIGlmICghX3RoaXMuX2NhY2hlZFJheUZvclRyYW5zZm9ybSkgeworICAg
ICAgICAgICAgX3RoaXMuX2NhY2hlZFJheUZvclRyYW5zZm9ybSA9IFJheS5aZXJvKCk7CisgICAg
ICAgIH0KKyAgICAgICAgUmF5LlRyYW5zZm9ybVRvUmVmKHJheSwgX3RoaXMuX3BpY2tXaXRoUmF5
SW52ZXJzZU1hdHJpeCwgX3RoaXMuX2NhY2hlZFJheUZvclRyYW5zZm9ybSk7CisgICAgICAgIHJl
dHVybiBfdGhpcy5fY2FjaGVkUmF5Rm9yVHJhbnNmb3JtOworICAgIH0sIHByZWRpY2F0ZSwgZmFz
dENoZWNrLCB0cmlhbmdsZVByZWRpY2F0ZSk7CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICBy
ZXN1bHQucmF5ID0gcmF5OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfTsKK19zY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZSJdLnByb3RvdHlwZS5tdWx0aVBpY2sg
PSBmdW5jdGlvbiAoeCwgeSwgcHJlZGljYXRlLCBjYW1lcmEsIHRyaWFuZ2xlUHJlZGljYXRlKSB7
CisgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxNdWx0aVBp
Y2soZnVuY3Rpb24gKHdvcmxkKSB7IHJldHVybiBfdGhpcy5jcmVhdGVQaWNraW5nUmF5KHgsIHks
IHdvcmxkLCBjYW1lcmEgfHwgbnVsbCk7IH0sIHByZWRpY2F0ZSwgdHJpYW5nbGVQcmVkaWNhdGUp
OworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZSJdLnByb3Rv
dHlwZS5tdWx0aVBpY2tXaXRoUmF5ID0gZnVuY3Rpb24gKHJheSwgcHJlZGljYXRlLCB0cmlhbmds
ZVByZWRpY2F0ZSkgeworICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgcmV0dXJuIHRoaXMuX2lu
dGVybmFsTXVsdGlQaWNrKGZ1bmN0aW9uICh3b3JsZCkgeworICAgICAgICBpZiAoIV90aGlzLl9w
aWNrV2l0aFJheUludmVyc2VNYXRyaXgpIHsKKyAgICAgICAgICAgIF90aGlzLl9waWNrV2l0aFJh
eUludmVyc2VNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgfQorICAgICAgICB3b3JsZC5p
bnZlcnRUb1JlZihfdGhpcy5fcGlja1dpdGhSYXlJbnZlcnNlTWF0cml4KTsKKyAgICAgICAgaWYg
KCFfdGhpcy5fY2FjaGVkUmF5Rm9yVHJhbnNmb3JtKSB7CisgICAgICAgICAgICBfdGhpcy5fY2Fj
aGVkUmF5Rm9yVHJhbnNmb3JtID0gUmF5Llplcm8oKTsKKyAgICAgICAgfQorICAgICAgICBSYXku
VHJhbnNmb3JtVG9SZWYocmF5LCBfdGhpcy5fcGlja1dpdGhSYXlJbnZlcnNlTWF0cml4LCBfdGhp
cy5fY2FjaGVkUmF5Rm9yVHJhbnNmb3JtKTsKKyAgICAgICAgcmV0dXJuIF90aGlzLl9jYWNoZWRS
YXlGb3JUcmFuc2Zvcm07CisgICAgfSwgcHJlZGljYXRlLCB0cmlhbmdsZVByZWRpY2F0ZSk7Cit9
OworX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNhbWVyYSJd
LnByb3RvdHlwZS5nZXRGb3J3YXJkUmF5ID0gZnVuY3Rpb24gKGxlbmd0aCwgdHJhbnNmb3JtLCBv
cmlnaW4pIHsKKyAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsgbGVuZ3RoID0gMTAwOyB9Cisg
ICAgaWYgKCF0cmFuc2Zvcm0pIHsKKyAgICAgICAgdHJhbnNmb3JtID0gdGhpcy5nZXRXb3JsZE1h
dHJpeCgpOworICAgIH0KKyAgICBpZiAoIW9yaWdpbikgeworICAgICAgICBvcmlnaW4gPSB0aGlz
LnBvc2l0aW9uOworICAgIH0KKyAgICB2YXIgZm9yd2FyZCA9IHRoaXMuX3NjZW5lLnVzZVJpZ2h0
SGFuZGVkU3lzdGVtID8gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0oMCwgMCwgLTEpIDogbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0oMCwgMCwgMSk7CisgICAgdmFy
IGZvcndhcmRXb3JsZCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKGZvcndhcmQsIHRyYW5zZm9ybSk7Cisg
ICAgdmFyIGRpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uTm9ybWFsaXplKGZvcndhcmRXb3JsZCk7CisgICAgcmV0dXJu
IG5ldyBSYXkob3JpZ2luLCBkaXJlY3Rpb24sIGxlbmd0aCk7Cit9OworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9EZWJ1Zy9heGVzVmlld2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9EZWJ1Zy9heGVzVmlld2VyLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEF4ZXNWaWV3
ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXhlc1ZpZXdlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gQXhlc1ZpZXdlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRo
LnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfc3RhbmRh
cmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL3N0
YW5kYXJkTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfR2l6bW9zX2F4
aXNEcmFnR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL0dpem1vcy9heGlzRHJhZ0dpem1vICovICIuL0dpem1vcy9heGlzRHJhZ0dp
em1vLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworCisKKworCisvKioK
KyAgICAgKiBUaGUgQXhlcyB2aWV3ZXIgd2lsbCBzaG93IDMgYXhlcyBpbiBhIHNwZWNpZmljIHBv
aW50IGluIHNwYWNlCisgICAgICovCit2YXIgQXhlc1ZpZXdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEF4ZXNWaWV3ZXIKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJh
bSBzY2FsZUxpbmVzIGRlZmluZXMgYSBudW1iZXIgdXNlZCB0byBzY2FsZSBsaW5lIGxlbmd0aCAo
MSBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSByZW5kZXJpbmdHcm91cElkIGRlZmluZXMgYSBu
dW1iZXIgdXNlZCB0byBzZXQgdGhlIHJlbmRlcmluZ0dyb3VwSWQgb2YgdGhlIG1lc2hlcyAoMiBi
eSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSB4QXhpcyBkZWZpbmVzIHRoZSBub2RlIGhpZXJhcmNo
eSB1c2VkIHRvIHJlbmRlciB0aGUgeC1heGlzCisgICAgICogQHBhcmFtIHlBeGlzIGRlZmluZXMg
dGhlIG5vZGUgaGllcmFyY2h5IHVzZWQgdG8gcmVuZGVyIHRoZSB5LWF4aXMKKyAgICAgKiBAcGFy
YW0gekF4aXMgZGVmaW5lcyB0aGUgbm9kZSBoaWVyYXJjaHkgdXNlZCB0byByZW5kZXIgdGhlIHot
YXhpcworICAgICAqLworICAgIGZ1bmN0aW9uIEF4ZXNWaWV3ZXIoc2NlbmUsIHNjYWxlTGluZXMs
IHJlbmRlcmluZ0dyb3VwSWQsIHhBeGlzLCB5QXhpcywgekF4aXMpIHsKKyAgICAgICAgaWYgKHNj
YWxlTGluZXMgPT09IHZvaWQgMCkgeyBzY2FsZUxpbmVzID0gMTsgfQorICAgICAgICBpZiAocmVu
ZGVyaW5nR3JvdXBJZCA9PT0gdm9pZCAwKSB7IHJlbmRlcmluZ0dyb3VwSWQgPSAyOyB9CisgICAg
ICAgIHRoaXMuX3NjYWxlTGluZXNGYWN0b3IgPSA0OworICAgICAgICB0aGlzLl9pbnN0YW5jZWQg
PSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIG51bWJlciB1
c2VkIHRvIHNjYWxlIGxpbmUgbGVuZ3RoCisgICAgICAgICAqLworICAgICAgICB0aGlzLnNjYWxl
TGluZXMgPSAxOworICAgICAgICB0aGlzLnNjYWxlTGluZXMgPSBzY2FsZUxpbmVzOworICAgICAg
ICBpZiAoIXhBeGlzKSB7CisgICAgICAgICAgICB2YXIgcmVkQ29sb3JlZE1hdGVyaWFsID0gbmV3
IF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJTdGFuZGFyZE1hdGVyaWFsIl0oIiIsIHNjZW5lKTsKKyAgICAgICAgICAgIHJlZENvbG9yZWRN
YXRlcmlhbC5kaXNhYmxlTGlnaHRpbmcgPSB0cnVlOworICAgICAgICAgICAgcmVkQ29sb3JlZE1h
dGVyaWFsLmVtaXNzaXZlQ29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJDb2xvcjMiXS5SZWQoKS5zY2FsZSgwLjUpOworICAgICAgICAgICAgeEF4
aXMgPSBfR2l6bW9zX2F4aXNEcmFnR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
QXhpc0RyYWdHaXptbyJdLl9DcmVhdGVBcnJvdyhzY2VuZSwgcmVkQ29sb3JlZE1hdGVyaWFsKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIXlBeGlzKSB7CisgICAgICAgICAgICB2YXIgZ3JlZW5D
b2xvcmVkTWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlN0YW5kYXJkTWF0ZXJpYWwiXSgiIiwgc2NlbmUpOworICAg
ICAgICAgICAgZ3JlZW5Db2xvcmVkTWF0ZXJpYWwuZGlzYWJsZUxpZ2h0aW5nID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGdyZWVuQ29sb3JlZE1hdGVyaWFsLmVtaXNzaXZlQ29sb3IgPSBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb2xvcjMiXS5HcmVlbigpLnNj
YWxlKDAuNSk7CisgICAgICAgICAgICB5QXhpcyA9IF9HaXptb3NfYXhpc0RyYWdHaXptb19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBeGlzRHJhZ0dpem1vIl0uX0NyZWF0ZUFycm93KHNj
ZW5lLCBncmVlbkNvbG9yZWRNYXRlcmlhbCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF6QXhp
cykgeworICAgICAgICAgICAgdmFyIGJsdWVDb2xvcmVkTWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFs
c19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlN0YW5kYXJk
TWF0ZXJpYWwiXSgiIiwgc2NlbmUpOworICAgICAgICAgICAgYmx1ZUNvbG9yZWRNYXRlcmlhbC5k
aXNhYmxlTGlnaHRpbmcgPSB0cnVlOworICAgICAgICAgICAgYmx1ZUNvbG9yZWRNYXRlcmlhbC5l
bWlzc2l2ZUNvbG9yID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siQ29sb3IzIl0uQmx1ZSgpLnNjYWxlKDAuNSk7CisgICAgICAgICAgICB6QXhpcyA9IF9H
aXptb3NfYXhpc0RyYWdHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBeGlzRHJh
Z0dpem1vIl0uX0NyZWF0ZUFycm93KHNjZW5lLCBibHVlQ29sb3JlZE1hdGVyaWFsKTsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl94QXhpcyA9IHhBeGlzOworICAgICAgICB0aGlzLl94QXhpcy5z
Y2FsaW5nLnNldEFsbCh0aGlzLnNjYWxlTGluZXMgKiB0aGlzLl9zY2FsZUxpbmVzRmFjdG9yKTsK
KyAgICAgICAgdGhpcy5feUF4aXMgPSB5QXhpczsKKyAgICAgICAgdGhpcy5feUF4aXMuc2NhbGlu
Zy5zZXRBbGwodGhpcy5zY2FsZUxpbmVzICogdGhpcy5fc2NhbGVMaW5lc0ZhY3Rvcik7CisgICAg
ICAgIHRoaXMuX3pBeGlzID0gekF4aXM7CisgICAgICAgIHRoaXMuX3pBeGlzLnNjYWxpbmcuc2V0
QWxsKHRoaXMuc2NhbGVMaW5lcyAqIHRoaXMuX3NjYWxlTGluZXNGYWN0b3IpOworICAgICAgICBp
ZiAocmVuZGVyaW5nR3JvdXBJZCAhPSBudWxsKSB7CisgICAgICAgICAgICBBeGVzVmlld2VyLl9T
ZXRSZW5kZXJpbmdHcm91cElkKHRoaXMuX3hBeGlzLCByZW5kZXJpbmdHcm91cElkKTsKKyAgICAg
ICAgICAgIEF4ZXNWaWV3ZXIuX1NldFJlbmRlcmluZ0dyb3VwSWQodGhpcy5feUF4aXMsIHJlbmRl
cmluZ0dyb3VwSWQpOworICAgICAgICAgICAgQXhlc1ZpZXdlci5fU2V0UmVuZGVyaW5nR3JvdXBJ
ZCh0aGlzLl96QXhpcywgcmVuZGVyaW5nR3JvdXBJZCk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLnVwZGF0ZShuZXcgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgpLCBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlJpZ2h0KCks
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0uVXAoKSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlZlY3RvcjMiXS5Gb3J3YXJkKCkpOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
QXhlc1ZpZXdlci5wcm90b3R5cGUsICJ4QXhpcyIsIHsKKyAgICAgICAgLyoqIEdldHMgdGhlIG5v
ZGUgaGllcmFyY2h5IHVzZWQgdG8gcmVuZGVyIHgtYXhpcyAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl94QXhpczsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEF4ZXNWaWV3ZXIucHJvdG90eXBlLCAieUF4
aXMiLCB7CisgICAgICAgIC8qKiBHZXRzIHRoZSBub2RlIGhpZXJhcmNoeSB1c2VkIHRvIHJlbmRl
ciB5LWF4aXMgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5feUF4aXM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShBeGVzVmlld2VyLnByb3RvdHlwZSwgInpBeGlzIiwgeworICAgICAgICAvKiogR2V0cyB0
aGUgbm9kZSBoaWVyYXJjaHkgdXNlZCB0byByZW5kZXIgei1heGlzICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3pBeGlzOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSB0aGUgdmlld2VyIHRvIHVwZGF0ZQorICAg
ICAqIEBwYXJhbSBwb3NpdGlvbiBkZWZpbmVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgdmlld2VyCisg
ICAgICogQHBhcmFtIHhheGlzIGRlZmluZXMgdGhlIHggYXhpcyBvZiB0aGUgdmlld2VyCisgICAg
ICogQHBhcmFtIHlheGlzIGRlZmluZXMgdGhlIHkgYXhpcyBvZiB0aGUgdmlld2VyCisgICAgICog
QHBhcmFtIHpheGlzIGRlZmluZXMgdGhlIHogYXhpcyBvZiB0aGUgdmlld2VyCisgICAgICovCisg
ICAgQXhlc1ZpZXdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB4YXhp
cywgeWF4aXMsIHpheGlzKSB7CisgICAgICAgIHRoaXMuX3hBeGlzLnBvc2l0aW9uLmNvcHlGcm9t
KHBvc2l0aW9uKTsKKyAgICAgICAgdGhpcy5feEF4aXMuc2V0RGlyZWN0aW9uKHhheGlzKTsKKyAg
ICAgICAgdGhpcy5feEF4aXMuc2NhbGluZy5zZXRBbGwodGhpcy5zY2FsZUxpbmVzICogdGhpcy5f
c2NhbGVMaW5lc0ZhY3Rvcik7CisgICAgICAgIHRoaXMuX3lBeGlzLnBvc2l0aW9uLmNvcHlGcm9t
KHBvc2l0aW9uKTsKKyAgICAgICAgdGhpcy5feUF4aXMuc2V0RGlyZWN0aW9uKHlheGlzKTsKKyAg
ICAgICAgdGhpcy5feUF4aXMuc2NhbGluZy5zZXRBbGwodGhpcy5zY2FsZUxpbmVzICogdGhpcy5f
c2NhbGVMaW5lc0ZhY3Rvcik7CisgICAgICAgIHRoaXMuX3pBeGlzLnBvc2l0aW9uLmNvcHlGcm9t
KHBvc2l0aW9uKTsKKyAgICAgICAgdGhpcy5fekF4aXMuc2V0RGlyZWN0aW9uKHpheGlzKTsKKyAg
ICAgICAgdGhpcy5fekF4aXMuc2NhbGluZy5zZXRBbGwodGhpcy5zY2FsZUxpbmVzICogdGhpcy5f
c2NhbGVMaW5lc0ZhY3Rvcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIGlu
c3RhbmNlIG9mIHRoaXMgYXhlcyB2aWV3ZXIuCisgICAgICogQHJldHVybnMgYSBuZXcgYXhlcyB2
aWV3ZXIgd2l0aCBpbnN0YW5jZWQgbWVzaGVzCisgICAgICovCisgICAgQXhlc1ZpZXdlci5wcm90
b3R5cGUuY3JlYXRlSW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB4QXhpcyA9
IF9HaXptb3NfYXhpc0RyYWdHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBeGlz
RHJhZ0dpem1vIl0uX0NyZWF0ZUFycm93SW5zdGFuY2UodGhpcy5zY2VuZSwgdGhpcy5feEF4aXMp
OworICAgICAgICB2YXIgeUF4aXMgPSBfR2l6bW9zX2F4aXNEcmFnR2l6bW9fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siQXhpc0RyYWdHaXptbyJdLl9DcmVhdGVBcnJvd0luc3RhbmNlKHRo
aXMuc2NlbmUsIHRoaXMuX3lBeGlzKTsKKyAgICAgICAgdmFyIHpBeGlzID0gX0dpem1vc19heGlz
RHJhZ0dpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkF4aXNEcmFnR2l6bW8iXS5f
Q3JlYXRlQXJyb3dJbnN0YW5jZSh0aGlzLnNjZW5lLCB0aGlzLl96QXhpcyk7CisgICAgICAgIHZh
ciBheGVzVmlld2VyID0gbmV3IEF4ZXNWaWV3ZXIodGhpcy5zY2VuZSwgdGhpcy5zY2FsZUxpbmVz
LCBudWxsLCB4QXhpcywgeUF4aXMsIHpBeGlzKTsKKyAgICAgICAgYXhlc1ZpZXdlci5faW5zdGFu
Y2VkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGF4ZXNWaWV3ZXI7CisgICAgfTsKKyAgICAvKiog
UmVsZWFzZXMgcmVzb3VyY2VzICovCisgICAgQXhlc1ZpZXdlci5wcm90b3R5cGUuZGlzcG9zZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3hBeGlzKSB7CisgICAgICAgICAgICB0
aGlzLl94QXhpcy5kaXNwb3NlKGZhbHNlLCAhdGhpcy5faW5zdGFuY2VkKTsKKyAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl94QXhpczsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5feUF4aXMp
IHsKKyAgICAgICAgICAgIHRoaXMuX3lBeGlzLmRpc3Bvc2UoZmFsc2UsICF0aGlzLl9pbnN0YW5j
ZWQpOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3lBeGlzOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl96QXhpcykgeworICAgICAgICAgICAgdGhpcy5fekF4aXMuZGlzcG9zZShmYWxz
ZSwgIXRoaXMuX2luc3RhbmNlZCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fekF4aXM7Cisg
ICAgICAgIH0KKyAgICAgICAgZGVsZXRlIHRoaXMuc2NlbmU7CisgICAgfTsKKyAgICBBeGVzVmll
d2VyLl9TZXRSZW5kZXJpbmdHcm91cElkID0gZnVuY3Rpb24gKG5vZGUsIGlkKSB7CisgICAgICAg
IG5vZGUuZ2V0Q2hpbGRNZXNoZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAg
ICAgICBtZXNoLnJlbmRlcmluZ0dyb3VwSWQgPSBpZDsKKyAgICAgICAgfSk7CisgICAgfTsKKyAg
ICByZXR1cm4gQXhlc1ZpZXdlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
RGVidWcvYm9uZUF4ZXNWaWV3ZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9EZWJ1Zy9ib25lQXhlc1ZpZXdlci50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQm9u
ZUF4ZXNWaWV3ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm9uZUF4
ZXNWaWV3ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJvbmVBeGVzVmlld2VyOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90
c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRGVidWdfYXhlc1ZpZXdl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vRGVidWcvYXhlc1ZpZXdlciAqLyAiLi9EZWJ1Zy9heGVzVmlld2VyLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAq
LyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguYXhpcyAqLyAiLi9NYXRocy9tYXRoLmF4aXMudHMi
KTsKKworCisKKworLyoqCisgICAgICogVGhlIEJvbmVBeGVzVmlld2VyIHdpbGwgYXR0YWNoIDMg
YXhlcyB0byBhIHNwZWNpZmljIGJvbmUgb2YgYSBzcGVjaWZpYyBtZXNoCisgICAgICogQHNlZSBk
ZW1vIGhlcmU6IGh0dHBzOi8vd3d3LmJhYnlsb25qcy1wbGF5Z3JvdW5kLmNvbS8jMERFOEY0IzgK
KyAgICAgKi8KK3ZhciBCb25lQXhlc1ZpZXdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChf
c3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVu
ZHMiXShCb25lQXhlc1ZpZXdlciwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEg
bmV3IEJvbmVBeGVzVmlld2VyCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rp
bmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gYm9uZSBkZWZpbmVzIHRoZSB0YXJnZXQgYm9uZQorICAg
ICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIHRhcmdldCBtZXNoCisgICAgICogQHBhcmFtIHNj
YWxlTGluZXMgZGVmaW5lcyBhIHNjYWxpbmcgZmFjdG9yIGZvciBsaW5lIGxlbmd0aCAoMSBieSBk
ZWZhdWx0KQorICAgICAqLworICAgIGZ1bmN0aW9uIEJvbmVBeGVzVmlld2VyKHNjZW5lLCBib25l
LCBtZXNoLCBzY2FsZUxpbmVzKSB7CisgICAgICAgIGlmIChzY2FsZUxpbmVzID09PSB2b2lkIDAp
IHsgc2NhbGVMaW5lcyA9IDE7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgc2NlbmUsIHNjYWxlTGluZXMpIHx8IHRoaXM7CisgICAgICAgIC8qKiBHZXRzIGN1cnJlbnQg
cG9zaXRpb24gKi8KKyAgICAgICAgX3RoaXMucG9zID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKiBH
ZXRzIGRpcmVjdGlvbiBvZiBYIGF4aXMgKi8KKyAgICAgICAgX3RoaXMueGF4aXMgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8o
KTsKKyAgICAgICAgLyoqIEdldHMgZGlyZWN0aW9uIG9mIFkgYXhpcyAqLworICAgICAgICBfdGhp
cy55YXhpcyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAvKiogR2V0cyBkaXJlY3Rpb24gb2YgWiBheGlz
ICovCisgICAgICAgIF90aGlzLnpheGlzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLm1lc2gg
PSBtZXNoOworICAgICAgICBfdGhpcy5ib25lID0gYm9uZTsKKyAgICAgICAgcmV0dXJuIF90aGlz
OworICAgIH0KKyAgICAvKioKKyAgICAgKiBGb3JjZSB0aGUgdmlld2VyIHRvIHVwZGF0ZQorICAg
ICAqLworICAgIEJvbmVBeGVzVmlld2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICghdGhpcy5tZXNoIHx8ICF0aGlzLmJvbmUpIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgYm9uZSA9IHRoaXMuYm9uZTsKKyAgICAgICAg
Ym9uZS5fbWFya0FzRGlydHlBbmRDb21wb3NlKCk7CisgICAgICAgIGJvbmUuZ2V0QWJzb2x1dGVQ
b3NpdGlvblRvUmVmKHRoaXMubWVzaCwgdGhpcy5wb3MpOworICAgICAgICBib25lLmdldERpcmVj
dGlvblRvUmVmKF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
QXhpcyJdLlgsIHRoaXMubWVzaCwgdGhpcy54YXhpcyk7CisgICAgICAgIGJvbmUuZ2V0RGlyZWN0
aW9uVG9SZWYoX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJB
eGlzIl0uWSwgdGhpcy5tZXNoLCB0aGlzLnlheGlzKTsKKyAgICAgICAgYm9uZS5nZXREaXJlY3Rp
b25Ub1JlZihfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkF4
aXMiXS5aLCB0aGlzLm1lc2gsIHRoaXMuemF4aXMpOworICAgICAgICBfc3VwZXIucHJvdG90eXBl
LnVwZGF0ZS5jYWxsKHRoaXMsIHRoaXMucG9zLCB0aGlzLnhheGlzLCB0aGlzLnlheGlzLCB0aGlz
LnpheGlzKTsKKyAgICB9OworICAgIC8qKiBSZWxlYXNlcyByZXNvdXJjZXMgKi8KKyAgICBCb25l
QXhlc1ZpZXdlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMubWVzaCkgeworICAgICAgICAgICAgdGhpcy5tZXNoID0gbnVsbDsKKyAgICAgICAgICAg
IHRoaXMuYm9uZSA9IG51bGw7CisgICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2Uu
Y2FsbCh0aGlzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIEJvbmVBeGVzVmlld2Vy
OworfShfRGVidWdfYXhlc1ZpZXdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBeGVz
Vmlld2VyIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9EZWJ1Zy9kZWJ1Z0xheWVy
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9EZWJ1
Zy9kZWJ1Z0xheWVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IERlYnVnTGF5ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRGVidWdMYXllciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGVidWdMYXll
cjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNj
L29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5l
ICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworCisKKworCisK
K09iamVjdC5kZWZpbmVQcm9wZXJ0eShfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siU2NlbmUiXS5wcm90b3R5cGUsICJkZWJ1Z0xheWVyIiwgeworICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICBpZiAoIXRoaXMuX2RlYnVnTGF5ZXIpIHsKKyAgICAgICAgICAgIHRoaXMu
X2RlYnVnTGF5ZXIgPSBuZXcgRGVidWdMYXllcih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5fZGVidWdMYXllcjsKKyAgICB9LAorICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgY29uZmlndXJhYmxlOiB0cnVlCit9KTsKKy8qKgorICogVGhlIGRlYnVnIGxheWVyIChha2Eg
SW5zcGVjdG9yKSBpcyB0aGUgZ28gdG8gdG9vbCBpbiBvcmRlciB0byBiZXR0ZXIgdW5kZXJzdGFu
ZAorICogd2hhdCBpcyBoYXBwZW5pbmcgaW4geW91ciBzY2VuZQorICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vZmVhdHVyZXMvcGxheWdyb3VuZF9kZWJ1Z2xheWVyCisgKi8KK3ZhciBE
ZWJ1Z0xheWVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAq
IEluc3RhbnRpYXRlcyBhIG5ldyBkZWJ1ZyBsYXllci4KKyAgICAgKiBUaGUgZGVidWcgbGF5ZXIg
KGFrYSBJbnNwZWN0b3IpIGlzIHRoZSBnbyB0byB0b29sIGluIG9yZGVyIHRvIGJldHRlciB1bmRl
cnN0YW5kCisgICAgICogd2hhdCBpcyBoYXBwZW5pbmcgaW4geW91ciBzY2VuZQorICAgICAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL3BsYXlncm91bmRfZGVidWdsYXll
cgorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0byBpbnNwZWN0CisgICAg
ICovCisgICAgZnVuY3Rpb24gRGVidWdMYXllcihzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMg
PSB0aGlzOworICAgICAgICB0aGlzLkJKU0lOU1BFQ1RPUiA9IHRoaXMuX2dldEdsb2JhbEluc3Bl
Y3RvcigpOworICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9zY2Vu
ZS5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyBE
ZWJ1ZyBsYXllcgorICAgICAgICAgICAgaWYgKF90aGlzLl9zY2VuZS5fZGVidWdMYXllcikgewor
ICAgICAgICAgICAgICAgIF90aGlzLl9zY2VuZS5fZGVidWdMYXllci5oaWRlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGVi
dWdMYXllci5wcm90b3R5cGUsICJvblByb3BlcnR5Q2hhbmdlZE9ic2VydmFibGUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxlIHRyaWdnZXJlZCB3aGVuIGEgcHJvcGVydHkg
aXMgY2hhbmdlZCB0aHJvdWdoIHRoZSBpbnNwZWN0b3IuCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLkJKU0lOU1BFQ1RPUiAmJiB0
aGlzLkJKU0lOU1BFQ1RPUi5JbnNwZWN0b3IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5CSlNJTlNQRUNUT1IuSW5zcGVjdG9yLk9uUHJvcGVydHlDaGFuZ2VkT2JzZXJ2YWJsZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdGhpcy5fb25Qcm9wZXJ0eUNoYW5nZWRPYnNl
cnZhYmxlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fb25Qcm9wZXJ0eUNoYW5nZWRPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
b25Qcm9wZXJ0eUNoYW5nZWRPYnNlcnZhYmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKiog
Q3JlYXRlcyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4gKi8KKyAgICBEZWJ1Z0xheWVyLnByb3RvdHlw
ZS5fY3JlYXRlSW5zcGVjdG9yID0gZnVuY3Rpb24gKGNvbmZpZykgeworICAgICAgICBpZiAodGhp
cy5pc1Zpc2libGUoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9vblByb3BlcnR5Q2hhbmdlZE9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9vblByb3BlcnR5Q2hhbmdlZE9ic2VydmFibGUub2Jz
ZXJ2ZXJzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZhciBvYnNl
cnZlciA9IF9hW19pXTsKKyAgICAgICAgICAgICAgICB0aGlzLkJKU0lOU1BFQ1RPUi5JbnNwZWN0
b3IuT25Qcm9wZXJ0eUNoYW5nZWRPYnNlcnZhYmxlLmFkZChvYnNlcnZlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9vblByb3BlcnR5Q2hhbmdlZE9ic2VydmFibGUuY2xlYXIo
KTsKKyAgICAgICAgICAgIHRoaXMuX29uUHJvcGVydHlDaGFuZ2VkT2JzZXJ2YWJsZSA9IHVuZGVm
aW5lZDsKKyAgICAgICAgfQorICAgICAgICB2YXIgdXNlck9wdGlvbnMgPSB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fzc2lnbiJdKHsgb3ZlcmxheTogZmFsc2UsIHNob3dF
eHBsb3JlcjogdHJ1ZSwgc2hvd0luc3BlY3RvcjogdHJ1ZSwgZW1iZWRNb2RlOiBmYWxzZSwgaGFu
ZGxlUmVzaXplOiB0cnVlLCBlbmFibGVQb3B1cDogdHJ1ZSB9LCBjb25maWcpOworICAgICAgICB0
aGlzLkJKU0lOU1BFQ1RPUiA9IHRoaXMuQkpTSU5TUEVDVE9SIHx8IHRoaXMuX2dldEdsb2JhbElu
c3BlY3RvcigpOworICAgICAgICB0aGlzLkJKU0lOU1BFQ1RPUi5JbnNwZWN0b3IuU2hvdyh0aGlz
Ll9zY2VuZSwgdXNlck9wdGlvbnMpOworICAgIH07CisgICAgLyoqCisgICAgICogU2VsZWN0IGEg
c3BlY2lmaWMgZW50aXR5IGluIHRoZSBzY2VuZSBleHBsb3JlciBhbmQgaGlnaGxpZ2h0IGEgc3Bl
Y2lmaWMgYmxvY2sgaW4gdGhhdCBlbnRpdHkgcHJvcGVydHkgZ3JpZAorICAgICAqIEBwYXJhbSBl
bnRpdHkgZGVmaW5lcyB0aGUgZW50aXR5IHRvIHNlbGVjdAorICAgICAqIEBwYXJhbSBsaW5lQ29u
dGFpbmVyVGl0bGUgZGVmaW5lcyB0aGUgc3BlY2lmaWMgYmxvY2sgdG8gaGlnaGxpZ2h0CisgICAg
ICovCisgICAgRGVidWdMYXllci5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24gKGVudGl0eSwg
bGluZUNvbnRhaW5lclRpdGxlKSB7CisgICAgICAgIGlmICh0aGlzLkJKU0lOU1BFQ1RPUikgewor
ICAgICAgICAgICAgdGhpcy5CSlNJTlNQRUNUT1IuSW5zcGVjdG9yLk1hcmtMaW5lQ29udGFpbmVy
VGl0bGVGb3JIaWdobGlnaHRpbmcobGluZUNvbnRhaW5lclRpdGxlKTsKKyAgICAgICAgICAgIHRo
aXMuQkpTSU5TUEVDVE9SLkluc3BlY3Rvci5PblNlbGVjdGlvbkNoYW5nZU9ic2VydmFibGUubm90
aWZ5T2JzZXJ2ZXJzKGVudGl0eSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBHZXQgdGhl
IGluc3BlY3RvciBmcm9tIGJ1bmRsZSBvciBnbG9iYWwgKi8KKyAgICBEZWJ1Z0xheWVyLnByb3Rv
dHlwZS5fZ2V0R2xvYmFsSW5zcGVjdG9yID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBVTUQg
R2xvYmFsIG5hbWUgZGV0ZWN0aW9uIGZyb20gV2VicGFjayBCdW5kbGUgVU1EIE5hbWUuCisgICAg
ICAgIGlmICh0eXBlb2YgSU5TUEVDVE9SICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAg
cmV0dXJuIElOU1BFQ1RPUjsKKyAgICAgICAgfQorICAgICAgICAvLyBJbiBjYXNlIG9mIG1vZHVs
ZSBsZXQgcyBjaGVjayB0aGUgZ2xvYmFsIGVtaXR0ZWQgZnJvbSB0aGUgSW5zcGVjdG9yIGVudHJ5
IHBvaW50LgorICAgICAgICBpZiAodHlwZW9mIEJBQllMT04gIT09ICd1bmRlZmluZWQnICYmIHR5
cGVvZiBCQUJZTE9OLkluc3BlY3RvciAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgIHJl
dHVybiBCQUJZTE9OOworICAgICAgICB9CisgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXQgaWYgdGhlIGluc3BlY3RvciBpcyB2aXNpYmxlIG9yIG5v
dC4KKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHZpc2libGUgb3RoZXJ3aXNlLCBmYWxzZQorICAg
ICAqLworICAgIERlYnVnTGF5ZXIucHJvdG90eXBlLmlzVmlzaWJsZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuQkpTSU5TUEVDVE9SICYmIHRoaXMuQkpTSU5TUEVDVE9SLklu
c3BlY3Rvci5Jc1Zpc2libGU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBIaWRlIHRoZSBpbnNw
ZWN0b3IgYW5kIGNsb3NlIGl0cyB3aW5kb3cuCisgICAgICovCisgICAgRGVidWdMYXllci5wcm90
b3R5cGUuaGlkZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuQkpTSU5TUEVDVE9S
KSB7CisgICAgICAgICAgICB0aGlzLkJKU0lOU1BFQ1RPUi5JbnNwZWN0b3IuSGlkZSgpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgICogTGF1bmNoIHRoZSBkZWJ1Z0xheWVyLgor
ICAgICAgKiBAcGFyYW0gY29uZmlnIERlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgaW5z
cGVjdG9yCisgICAgICAqIEByZXR1cm4gYSBwcm9taXNlIGZ1bGZpbGxlZCB3aGVuIHRoZSBkZWJ1
ZyBsYXllciBpcyB2aXNpYmxlCisgICAgICAqLworICAgIERlYnVnTGF5ZXIucHJvdG90eXBlLnNo
b3cgPSBmdW5jdGlvbiAoY29uZmlnKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAg
ICAgICAgICBpZiAodHlwZW9mIF90aGlzLkJKU0lOU1BFQ1RPUiA9PSAndW5kZWZpbmVkJykgewor
ICAgICAgICAgICAgICAgIHZhciBpbnNwZWN0b3JVcmwgPSBjb25maWcgJiYgY29uZmlnLmluc3Bl
Y3RvclVSTCA/IGNvbmZpZy5pbnNwZWN0b3JVUkwgOiBEZWJ1Z0xheWVyLkluc3BlY3RvclVSTDsK
KyAgICAgICAgICAgICAgICAvLyBMb2FkIGluc3BlY3RvciBhbmQgYWRkIGl0IHRvIHRoZSBET00K
KyAgICAgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJUb29scyJdLkxvYWRTY3JpcHQoaW5zcGVjdG9yVXJsLCBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl9jcmVhdGVJbnNwZWN0b3IoY29uZmlnKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZShfdGhpcyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgY3Jl
YXRlcyB0aGUgaW5zcGVjdG9yCisgICAgICAgICAgICAgICAgX3RoaXMuX2NyZWF0ZUluc3BlY3Rv
cihjb25maWcpOworICAgICAgICAgICAgICAgIHJlc29sdmUoX3RoaXMpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmluZSB0aGUgdXJsIHRv
IGdldCB0aGUgaW5zcGVjdG9yIHNjcmlwdCBmcm9tLgorICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNl
cyB0aGUgYmFieWxvbmpzIENETi4KKyAgICAgKiBAaWdub3JlTmFtaW5nCisgICAgICovCisgICAg
RGVidWdMYXllci5JbnNwZWN0b3JVUkwgPSAiaHR0cHM6Ly91bnBrZy5jb20vYmFieWxvbmpzLWlu
c3BlY3RvckAiICsgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkVuZ2luZSJdLlZlcnNpb24gKyAiL2JhYnlsb24uaW5zcGVjdG9yLmJ1bmRsZS5qcyI7CisgICAg
cmV0dXJuIERlYnVnTGF5ZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0Rl
YnVnL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
RGVidWcvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IEF4ZXNWaWV3ZXIsIEJvbmVBeGVzVmlld2VyLCBEZWJ1Z0xheWVyLCBQ
aHlzaWNzVmlld2VyLCBSYXlIZWxwZXIsIFNrZWxldG9uVmlld2VyICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXhlc1ZpZXdlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9heGVzVmlld2VyICovICIu
L0RlYnVnL2F4ZXNWaWV3ZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXhlc1ZpZXdlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2F4ZXNWaWV3ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQXhlc1ZpZXdlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ib25lQXhl
c1ZpZXdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9ib25lQXhlc1ZpZXdlciAqLyAiLi9EZWJ1Zy9ib25lQXhlc1ZpZXdlci50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJCb25lQXhlc1ZpZXdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Jv
bmVBeGVzVmlld2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkJvbmVBeGVzVmlld2Vy
Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlYnVnTGF5ZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVidWdMYXll
ciAqLyAiLi9EZWJ1Zy9kZWJ1Z0xheWVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlYnVnTGF5
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWJ1Z0xheWVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIkRlYnVnTGF5ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cGh5c2ljc1ZpZXdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9waHlzaWNzVmlld2VyICovICIuL0RlYnVnL3BoeXNpY3NWaWV3ZXIudHMi
KTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1ZpZXdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X3BoeXNpY3NWaWV3ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUGh5c2ljc1ZpZXdl
ciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yYXlIZWxwZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmF5SGVscGVy
ICovICIuL0RlYnVnL3JheUhlbHBlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSYXlIZWxwZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9yYXlIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siUmF5SGVscGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NrZWxl
dG9uVmlld2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL3NrZWxldG9uVmlld2VyICovICIuL0RlYnVnL3NrZWxldG9uVmlld2VyLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlNrZWxldG9uVmlld2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
c2tlbGV0b25WaWV3ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2tlbGV0b25WaWV3
ZXIiXTsgfSk7CisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRGVidWcv
cGh5c2ljc1ZpZXdlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vRGVidWcvcGh5c2ljc1ZpZXdlci50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQaHlzaWNzVmlld2Vy
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NWaWV3ZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIFBoeXNpY3NWaWV3ZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJzX2JveEJ1aWxkZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01l
c2hlcy9CdWlsZGVycy9ib3hCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9ib3hCdWlsZGVy
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWlsZGVyc19zcGhlcmVC
dWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRl
cnMvc3BoZXJlQnVpbGRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0
aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvZW5naW5lU3RvcmUgKi8gIi4vRW5n
aW5lcy9lbmdpbmVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlh
bHNfc3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwgKi8gIi4vTWF0
ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
UGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL1BoeXNpY3MvcGh5c2ljc0ltcG9zdG9yICovICIuL1Bo
eXNpY3MvcGh5c2ljc0ltcG9zdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Jl
bmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJlbmRl
cmVyICovICIuL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfY3lsaW5kZXJCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMv
QnVpbGRlcnMvY3lsaW5kZXJCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1
aWxkZXIudHMiKTsKKworCisKKworCisKKworCisKKworLyoqCisgICAgICogVXNlZCB0byBzaG93
IHRoZSBwaHlzaWNzIGltcG9zdG9yIGFyb3VuZCB0aGUgc3BlY2lmaWMgbWVzaAorICAgICAqLwor
dmFyIFBoeXNpY3NWaWV3ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIG5ldyBQaHlzaWNzVmlld2VyCisgICAgICogQHBhcmFtIHNjZW5l
IGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQaHlzaWNz
Vmlld2VyKHNjZW5lKSB7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2lt
cG9zdG9ycyA9IFtdOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9tZXNo
ZXMgPSBbXTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fbnVtTWVzaGVz
ID0gMDsKKyAgICAgICAgdGhpcy5fZGVidWdNZXNoTWVzaGVzID0gbmV3IEFycmF5KCk7CisgICAg
ICAgIHRoaXMuX3NjZW5lID0gc2NlbmUgfHwgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZFNjZW5lOworICAg
ICAgICB2YXIgcGh5c2ljRW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0UGh5c2ljc0VuZ2luZSgpOwor
ICAgICAgICBpZiAocGh5c2ljRW5naW5lKSB7CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzRW5n
aW5lUGx1Z2luID0gcGh5c2ljRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl91dGlsaXR5TGF5ZXIgPSBuZXcgX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJS
ZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJVdGlsaXR5TGF5ZXJSZW5kZXJl
ciJdKHRoaXMuX3NjZW5lLCBmYWxzZSk7CisgICAgICAgIHRoaXMuX3V0aWxpdHlMYXllci5waWNr
VXRpbGl0eVNjZW5lRmlyc3QgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdXRpbGl0eUxheWVyLnV0
aWxpdHlMYXllclNjZW5lLmF1dG9DbGVhckRlcHRoQW5kU3RlbmNpbCA9IHRydWU7CisgICAgfQor
ICAgIC8qKiBAaGlkZGVuICovCisgICAgUGh5c2ljc1ZpZXdlci5wcm90b3R5cGUuX3VwZGF0ZURl
YnVnTWVzaGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcGx1Z2luID0gdGhpcy5fcGh5
c2ljc0VuZ2luZVBsdWdpbjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9udW1N
ZXNoZXM7IGkrKykgeworICAgICAgICAgICAgdmFyIGltcG9zdG9yID0gdGhpcy5faW1wb3N0b3Jz
W2ldOworICAgICAgICAgICAgaWYgKCFpbXBvc3RvcikgeworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGltcG9zdG9yLmlzRGlzcG9zZWQp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmhpZGVJbXBvc3Rvcih0aGlzLl9pbXBvc3RvcnNbaS0t
XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaW1wb3N0b3IudHlwZSA9PT0gX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIlBoeXNpY3NJbXBvc3RvciJdLk1lc2hJbXBvc3RvcikgeworICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgdmFyIG1lc2ggPSB0aGlzLl9tZXNoZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKG1l
c2ggJiYgcGx1Z2luKSB7CisgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5zeW5jTWVzaFdpdGhJ
bXBvc3RvcihtZXNoLCBpbXBvc3Rvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIGEgc3BlY2lmaWVk
IHBoeXNpYyBpbXBvc3RvcgorICAgICAqIEBwYXJhbSBpbXBvc3RvciBkZWZpbmVzIHRoZSBpbXBv
c3RvciB0byByZW5kZXIKKyAgICAgKiBAcGFyYW0gdGFyZ2V0TWVzaCBkZWZpbmVzIHRoZSBtZXNo
IHJlcHJlc2VudGVkIGJ5IHRoZSBpbXBvc3RvcgorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgZGVi
dWcgbWVzaCB1c2VkIHRvIHJlbmRlciB0aGUgaW1wb3N0b3IKKyAgICAgKi8KKyAgICBQaHlzaWNz
Vmlld2VyLnByb3RvdHlwZS5zaG93SW1wb3N0b3IgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIHRhcmdl
dE1lc2gpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9zY2VuZSkgeworICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9udW1N
ZXNoZXM7IGkrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuX2ltcG9zdG9yc1tpXSA9PSBpbXBv
c3RvcikgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHZhciBkZWJ1Z01lc2ggPSB0aGlzLl9nZXREZWJ1Z01lc2goaW1wb3N0
b3IsIHRhcmdldE1lc2gpOworICAgICAgICBpZiAoZGVidWdNZXNoKSB7CisgICAgICAgICAgICB0
aGlzLl9pbXBvc3RvcnNbdGhpcy5fbnVtTWVzaGVzXSA9IGltcG9zdG9yOworICAgICAgICAgICAg
dGhpcy5fbWVzaGVzW3RoaXMuX251bU1lc2hlc10gPSBkZWJ1Z01lc2g7CisgICAgICAgICAgICBp
ZiAodGhpcy5fbnVtTWVzaGVzID09PSAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVy
RnVuY3Rpb24gPSB0aGlzLl91cGRhdGVEZWJ1Z01lc2hlcy5iaW5kKHRoaXMpOworICAgICAgICAg
ICAgICAgIHRoaXMuX3NjZW5lLnJlZ2lzdGVyQmVmb3JlUmVuZGVyKHRoaXMuX3JlbmRlckZ1bmN0
aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX251bU1lc2hlcysrOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBkZWJ1Z01lc2g7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBIaWRlcyBhIHNwZWNpZmllZCBwaHlzaWMgaW1wb3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0
b3IgZGVmaW5lcyB0aGUgaW1wb3N0b3IgdG8gaGlkZQorICAgICAqLworICAgIFBoeXNpY3NWaWV3
ZXIucHJvdG90eXBlLmhpZGVJbXBvc3RvciA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAg
ICBpZiAoIWltcG9zdG9yIHx8ICF0aGlzLl9zY2VuZSB8fCAhdGhpcy5fdXRpbGl0eUxheWVyKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJlbW92ZWQgPSBm
YWxzZTsKKyAgICAgICAgdmFyIHV0aWxpdHlMYXllclNjZW5lID0gdGhpcy5fdXRpbGl0eUxheWVy
LnV0aWxpdHlMYXllclNjZW5lOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX251
bU1lc2hlczsgaSsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5faW1wb3N0b3JzW2ldID09IGlt
cG9zdG9yKSB7CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLl9tZXNoZXNbaV07Cisg
ICAgICAgICAgICAgICAgaWYgKCFtZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1dGlsaXR5TGF5ZXJTY2VuZS5y
ZW1vdmVNZXNoKG1lc2gpOworICAgICAgICAgICAgICAgIG1lc2guZGlzcG9zZSgpOworICAgICAg
ICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2RlYnVnTWVzaE1lc2hlcy5pbmRleE9mKG1lc2gp
OworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX2RlYnVnTWVzaE1lc2hlcy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB0aGlzLl9udW1NZXNoZXMtLTsKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fbnVtTWVzaGVzID4gMCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNo
ZXNbaV0gPSB0aGlzLl9tZXNoZXNbdGhpcy5fbnVtTWVzaGVzXTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5faW1wb3N0b3JzW2ldID0gdGhpcy5faW1wb3N0b3JzW3RoaXMuX251bU1lc2hlc107
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc2hlc1t0aGlzLl9udW1NZXNoZXNdID0gbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5faW1wb3N0b3JzW3RoaXMuX251bU1lc2hlc10g
PSBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fbWVzaGVzWzBdID0gbnVsbDsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5faW1wb3N0b3JzWzBdID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmVtb3ZlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlbW92ZWQgJiYgdGhpcy5fbnVtTWVzaGVz
ID09PSAwKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS51bnJlZ2lzdGVyQmVmb3JlUmVuZGVy
KHRoaXMuX3JlbmRlckZ1bmN0aW9uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgUGh5c2ljc1Zp
ZXdlci5wcm90b3R5cGUuX2dldERlYnVnTWF0ZXJpYWwgPSBmdW5jdGlvbiAoc2NlbmUpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9kZWJ1Z01hdGVyaWFsKSB7CisgICAgICAgICAgICB0aGlzLl9kZWJ1
Z01hdGVyaWFsID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fWyJTdGFuZGFyZE1hdGVyaWFsIl0oJycsIHNjZW5lKTsKKyAgICAgICAg
ICAgIHRoaXMuX2RlYnVnTWF0ZXJpYWwud2lyZWZyYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgIHRo
aXMuX2RlYnVnTWF0ZXJpYWwuZW1pc3NpdmVDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yMyJdLldoaXRlKCk7CisgICAgICAgICAgICB0
aGlzLl9kZWJ1Z01hdGVyaWFsLmRpc2FibGVMaWdodGluZyA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2RlYnVnTWF0ZXJpYWw7CisgICAgfTsKKyAgICBQaHlzaWNzVmll
d2VyLnByb3RvdHlwZS5fZ2V0RGVidWdCb3hNZXNoID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAg
ICAgIGlmICghdGhpcy5fZGVidWdCb3hNZXNoKSB7CisgICAgICAgICAgICB0aGlzLl9kZWJ1Z0Jv
eE1lc2ggPSBfTWVzaGVzX0J1aWxkZXJzX2JveEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siQm94QnVpbGRlciJdLkNyZWF0ZUJveCgncGh5c2ljc0JvZHlCb3hWaWV3TWVzaCcs
IHsgc2l6ZTogMSB9LCBzY2VuZSk7CisgICAgICAgICAgICB0aGlzLl9kZWJ1Z0JveE1lc2gucm90
YXRpb25RdWF0ZXJuaW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlF1YXRlcm5pb24iXS5JZGVudGl0eSgpOworICAgICAgICAgICAgdGhpcy5fZGVi
dWdCb3hNZXNoLm1hdGVyaWFsID0gdGhpcy5fZ2V0RGVidWdNYXRlcmlhbChzY2VuZSk7CisgICAg
ICAgICAgICB0aGlzLl9kZWJ1Z0JveE1lc2guc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoaXMuX2RlYnVnQm94TWVzaC5jcmVhdGVJbnN0YW5jZSgncGh5c2lj
c0JvZHlCb3hWaWV3SW5zdGFuY2UnKTsKKyAgICB9OworICAgIFBoeXNpY3NWaWV3ZXIucHJvdG90
eXBlLl9nZXREZWJ1Z1NwaGVyZU1lc2ggPSBmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9kZWJ1Z1NwaGVyZU1lc2gpIHsKKyAgICAgICAgICAgIHRoaXMuX2RlYnVnU3BoZXJl
TWVzaCA9IF9NZXNoZXNfQnVpbGRlcnNfc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJTcGhlcmVCdWlsZGVyIl0uQ3JlYXRlU3BoZXJlKCdwaHlzaWNzQm9keVNwaGVy
ZVZpZXdNZXNoJywgeyBkaWFtZXRlcjogMSB9LCBzY2VuZSk7CisgICAgICAgICAgICB0aGlzLl9k
ZWJ1Z1NwaGVyZU1lc2gucm90YXRpb25RdWF0ZXJuaW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXS5JZGVudGl0eSgpOworICAg
ICAgICAgICAgdGhpcy5fZGVidWdTcGhlcmVNZXNoLm1hdGVyaWFsID0gdGhpcy5fZ2V0RGVidWdN
YXRlcmlhbChzY2VuZSk7CisgICAgICAgICAgICB0aGlzLl9kZWJ1Z1NwaGVyZU1lc2guc2V0RW5h
YmxlZChmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2RlYnVnU3BoZXJl
TWVzaC5jcmVhdGVJbnN0YW5jZSgncGh5c2ljc0JvZHlCb3hWaWV3SW5zdGFuY2UnKTsKKyAgICB9
OworICAgIFBoeXNpY3NWaWV3ZXIucHJvdG90eXBlLl9nZXREZWJ1Z0N5bGluZGVyTWVzaCA9IGZ1
bmN0aW9uIChzY2VuZSkgeworICAgICAgICBpZiAoIXRoaXMuX2RlYnVnQ3lsaW5kZXJNZXNoKSB7
CisgICAgICAgICAgICB0aGlzLl9kZWJ1Z0N5bGluZGVyTWVzaCA9IF9NZXNoZXNfQnVpbGRlcnNf
Y3lsaW5kZXJCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkN5bGluZGVyQnVp
bGRlciJdLkNyZWF0ZUN5bGluZGVyKCdwaHlzaWNzQm9keUN5bGluZGVyVmlld01lc2gnLCB7IGRp
YW1ldGVyVG9wOiAxLCBkaWFtZXRlckJvdHRvbTogMSwgaGVpZ2h0OiAxIH0sIHNjZW5lKTsKKyAg
ICAgICAgICAgIHRoaXMuX2RlYnVnQ3lsaW5kZXJNZXNoLnJvdGF0aW9uUXVhdGVybmlvbiA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9u
Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIHRoaXMuX2RlYnVnQ3lsaW5kZXJNZXNoLm1hdGVy
aWFsID0gdGhpcy5fZ2V0RGVidWdNYXRlcmlhbChzY2VuZSk7CisgICAgICAgICAgICB0aGlzLl9k
ZWJ1Z0N5bGluZGVyTWVzaC5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5fZGVidWdDeWxpbmRlck1lc2guY3JlYXRlSW5zdGFuY2UoJ3BoeXNpY3NCb2R5
Qm94Vmlld0luc3RhbmNlJyk7CisgICAgfTsKKyAgICBQaHlzaWNzVmlld2VyLnByb3RvdHlwZS5f
Z2V0RGVidWdNZXNoTWVzaCA9IGZ1bmN0aW9uIChtZXNoLCBzY2VuZSkgeworICAgICAgICB2YXIg
d2lyZWZyYW1lT3ZlciA9IG5ldyBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTWVzaCJdKG1lc2gubmFtZSwgc2NlbmUsIG51bGwsIG1lc2gpOworICAgICAgICB3aXJl
ZnJhbWVPdmVyLnBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHdpcmVmcmFtZU92ZXIuc2V0
UGFyZW50KG1lc2gpOworICAgICAgICB3aXJlZnJhbWVPdmVyLm1hdGVyaWFsID0gdGhpcy5fZ2V0
RGVidWdNYXRlcmlhbChzY2VuZSk7CisgICAgICAgIHRoaXMuX2RlYnVnTWVzaE1lc2hlcy5wdXNo
KHdpcmVmcmFtZU92ZXIpOworICAgICAgICByZXR1cm4gd2lyZWZyYW1lT3ZlcjsKKyAgICB9Owor
ICAgIFBoeXNpY3NWaWV3ZXIucHJvdG90eXBlLl9nZXREZWJ1Z01lc2ggPSBmdW5jdGlvbiAoaW1w
b3N0b3IsIHRhcmdldE1lc2gpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
aWYgKCF0aGlzLl91dGlsaXR5TGF5ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICB9CisgICAgICAgIC8vIE9ubHkgY3JlYXRlIGNoaWxkIGltcG9zdG9yIGRlYnVnIG1lc2hl
cyB3aGVuIGV2YWx1YXRpbmcgdGhlIHBhcmVudAorICAgICAgICBpZiAodGFyZ2V0TWVzaCAmJiB0
YXJnZXRNZXNoLnBhcmVudCAmJiB0YXJnZXRNZXNoLnBhcmVudC5waHlzaWNzSW1wb3N0b3IpIHsK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBtZXNoID0g
bnVsbDsKKyAgICAgICAgdmFyIHV0aWxpdHlMYXllclNjZW5lID0gdGhpcy5fdXRpbGl0eUxheWVy
LnV0aWxpdHlMYXllclNjZW5lOworICAgICAgICBzd2l0Y2ggKGltcG9zdG9yLnR5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X19bIlBoeXNpY3NJbXBvc3RvciJdLkJveEltcG9zdG9yOgorICAgICAgICAgICAg
ICAgIG1lc2ggPSB0aGlzLl9nZXREZWJ1Z0JveE1lc2godXRpbGl0eUxheWVyU2NlbmUpOworICAg
ICAgICAgICAgICAgIGltcG9zdG9yLmdldEJveFNpemVUb1JlZihtZXNoLnNjYWxpbmcpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSW1w
b3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUGh5c2ljc0ltcG9zdG9yIl0uU3Bo
ZXJlSW1wb3N0b3I6CisgICAgICAgICAgICAgICAgbWVzaCA9IHRoaXMuX2dldERlYnVnU3BoZXJl
TWVzaCh1dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgICAgICAgICAgdmFyIHJhZGl1cyA9IGlt
cG9zdG9yLmdldFJhZGl1cygpOworICAgICAgICAgICAgICAgIG1lc2guc2NhbGluZy54ID0gcmFk
aXVzICogMjsKKyAgICAgICAgICAgICAgICBtZXNoLnNjYWxpbmcueSA9IHJhZGl1cyAqIDI7Cisg
ICAgICAgICAgICAgICAgbWVzaC5zY2FsaW5nLnogPSByYWRpdXMgKiAyOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUGh5c2ljc0ltcG9zdG9yIl0uTWVzaEltcG9zdG9y
OgorICAgICAgICAgICAgICAgIGlmICh0YXJnZXRNZXNoKSB7CisgICAgICAgICAgICAgICAgICAg
IG1lc2ggPSB0aGlzLl9nZXREZWJ1Z01lc2hNZXNoKHRhcmdldE1lc2gsIHV0aWxpdHlMYXllclNj
ZW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJQaHlzaWNzSW1wb3N0b3IiXS5Ob0ltcG9zdG9yOgorICAgICAgICAgICAgICAgIGlm
ICh0YXJnZXRNZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBjb21wb3VuZCBp
bXBvc3RvcnMKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkTWVzaGVzID0gdGFyZ2V0TWVz
aC5nZXRDaGlsZE1lc2hlcygpLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5waHlzaWNz
SW1wb3N0b3IgPyAxIDogMDsgfSk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkTWVzaGVzLmZv
ckVhY2goZnVuY3Rpb24gKG0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gX3Ro
aXMuX2dldERlYnVnQm94TWVzaCh1dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhLnBhcmVudCA9IG07CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNp
Y3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlBoeXNpY3NJ
bXBvc3RvciJdLkN5bGluZGVySW1wb3N0b3I6CisgICAgICAgICAgICAgICAgbWVzaCA9IHRoaXMu
X2dldERlYnVnQ3lsaW5kZXJNZXNoKHV0aWxpdHlMYXllclNjZW5lKTsKKyAgICAgICAgICAgICAg
ICB2YXIgYmkgPSBpbXBvc3Rvci5vYmplY3QuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAg
ICAgICAgbWVzaC5zY2FsaW5nLnggPSBiaS5ib3VuZGluZ0JveC5tYXhpbXVtLnggLSBiaS5ib3Vu
ZGluZ0JveC5taW5pbXVtLng7CisgICAgICAgICAgICAgICAgbWVzaC5zY2FsaW5nLnkgPSBiaS5i
b3VuZGluZ0JveC5tYXhpbXVtLnkgLSBiaS5ib3VuZGluZ0JveC5taW5pbXVtLnk7CisgICAgICAg
ICAgICAgICAgbWVzaC5zY2FsaW5nLnogPSBiaS5ib3VuZGluZ0JveC5tYXhpbXVtLnogLSBiaS5i
b3VuZGluZ0JveC5taW5pbXVtLno7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG1lc2g7CisgICAgfTsKKyAgICAvKiogUmVsZWFzZXMgYWxsIHJlc291
cmNlcyAqLworICAgIFBoeXNpY3NWaWV3ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBjb3VudCA9IHRoaXMuX251bU1lc2hlczsKKyAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyBpbmRleCsrKSB7CisgICAgICAgICAgICB0aGlz
LmhpZGVJbXBvc3Rvcih0aGlzLl9pbXBvc3RvcnNbMF0pOworICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLl9kZWJ1Z0JveE1lc2gpIHsKKyAgICAgICAgICAgIHRoaXMuX2RlYnVnQm94TWVzaC5k
aXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2RlYnVnU3BoZXJlTWVzaCkg
eworICAgICAgICAgICAgdGhpcy5fZGVidWdTcGhlcmVNZXNoLmRpc3Bvc2UoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5fZGVidWdDeWxpbmRlck1lc2gpIHsKKyAgICAgICAgICAgIHRo
aXMuX2RlYnVnQ3lsaW5kZXJNZXNoLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fZGVidWdNYXRlcmlhbCkgeworICAgICAgICAgICAgdGhpcy5fZGVidWdNYXRlcmlhbC5k
aXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5faW1wb3N0b3JzLmxlbmd0aCA9IDA7
CisgICAgICAgIHRoaXMuX3NjZW5lID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcGh5c2ljc0VuZ2lu
ZVBsdWdpbiA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLl91dGlsaXR5TGF5ZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3V0aWxpdHlMYXllci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl91
dGlsaXR5TGF5ZXIgPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gUGh5c2lj
c1ZpZXdlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRGVidWcvcmF5SGVs
cGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0Rl
YnVnL3JheUhlbHBlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJheUhlbHBlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJSYXlIZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJheUhlbHBlcjsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9t
YXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVpbGRl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWVzaGVzL0J1aWxkZXJzL2xpbmVzQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvbGlu
ZXNCdWlsZGVyLnRzIik7CisKKworCisvKioKKyAqIEFzIHJheWNhc3QgbWlnaHQgYmUgaGFyZCB0
byBkZWJ1ZywgdGhlIFJheUhlbHBlciBjYW4gaGVscCByZW5kZXJpbmcgdGhlIGRpZmZlcmVudCBy
YXlzCisgKiBpbiBvcmRlciB0byBiZXR0ZXIgYXBwcmVjaWF0ZSB0aGUgaXNzdWUgb25lIG1pZ2h0
IGhhdmUuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL3JheWNh
c3RzI2RlYnVnZ2luZworICovCit2YXIgUmF5SGVscGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIGEgbmV3IHJheSBoZWxwZXIuCisg
ICAgICogQXMgcmF5Y2FzdCBtaWdodCBiZSBoYXJkIHRvIGRlYnVnLCB0aGUgUmF5SGVscGVyIGNh
biBoZWxwIHJlbmRlcmluZyB0aGUgZGlmZmVyZW50IHJheXMKKyAgICAgKiBpbiBvcmRlciB0byBi
ZXR0ZXIgYXBwcmVjaWF0ZSB0aGUgaXNzdWUgb25lIG1pZ2h0IGhhdmUuCisgICAgICogQHNlZSBo
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9yYXljYXN0cyNkZWJ1Z2dpbmcKKyAg
ICAgKiBAcGFyYW0gcmF5IERlZmluZXMgdGhlIHJheSB3ZSBhcmUgY3VycmVudGx5IHRyeWluIHRv
IHZpc3VhbGl6ZQorICAgICAqLworICAgIGZ1bmN0aW9uIFJheUhlbHBlcihyYXkpIHsKKyAgICAg
ICAgdGhpcy5yYXkgPSByYXk7CisgICAgfQorICAgIC8qKgorICAgICAqIEhlbHBlciBmdW5jdGlv
biB0byBjcmVhdGUgYSBjb2xvcmVkIGhlbHBlciBpbiBhIHNjZW5lIGluIG9uZSBsaW5lLgorICAg
ICAqIEBwYXJhbSByYXkgRGVmaW5lcyB0aGUgcmF5IHdlIGFyZSBjdXJyZW50bHkgdHJ5aW4gdG8g
dmlzdWFsaXplCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRoZSByYXkg
aXMgdXNlZCBpbgorICAgICAqIEBwYXJhbSBjb2xvciBEZWZpbmVzIHRoZSBjb2xvciB3ZSB3YW50
IHRvIHNlZSB0aGUgcmF5IGluCisgICAgICogQHJldHVybnMgVGhlIG5ld2x5IGNyZWF0ZWQgcmF5
IGhlbHBlci4KKyAgICAgKi8KKyAgICBSYXlIZWxwZXIuQ3JlYXRlQW5kU2hvdyA9IGZ1bmN0aW9u
IChyYXksIHNjZW5lLCBjb2xvcikgeworICAgICAgICB2YXIgaGVscGVyID0gbmV3IFJheUhlbHBl
cihyYXkpOworICAgICAgICBoZWxwZXIuc2hvdyhzY2VuZSwgY29sb3IpOworICAgICAgICByZXR1
cm4gaGVscGVyOworICAgIH07CisgICAgLyoqCisgICAgICogU2hvd3MgdGhlIHJheSB3ZSBhcmUg
d2lsbGluZyB0byBkZWJ1Zy4KKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lcyB0aGUgc2NlbmUg
dGhlIHJheSBuZWVkcyB0byBiZSByZW5kZXJlZCBpbgorICAgICAqIEBwYXJhbSBjb2xvciBEZWZp
bmVzIHRoZSBjb2xvciB0aGUgcmF5IG5lZWRzIHRvIGJlIHJlbmRlcmVkIGluCisgICAgICovCisg
ICAgUmF5SGVscGVyLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKHNjZW5lLCBjb2xvcikgewor
ICAgICAgICBpZiAoIXRoaXMuX3JlbmRlckZ1bmN0aW9uICYmIHRoaXMucmF5KSB7CisgICAgICAg
ICAgICB2YXIgcmF5ID0gdGhpcy5yYXk7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJGdW5jdGlv
biA9IHRoaXMuX3JlbmRlci5iaW5kKHRoaXMpOworICAgICAgICAgICAgdGhpcy5fc2NlbmUgPSBz
Y2VuZTsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlclBvaW50cyA9IFtyYXkub3JpZ2luLCByYXku
b3JpZ2luLmFkZChyYXkuZGlyZWN0aW9uLnNjYWxlKHJheS5sZW5ndGgpKV07CisgICAgICAgICAg
ICB0aGlzLl9yZW5kZXJMaW5lID0gX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIk1lc2giXS5DcmVhdGVMaW5lcygicmF5IiwgdGhpcy5fcmVuZGVyUG9pbnRzLCBzY2Vu
ZSwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyRnVuY3Rpb24pIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9zY2VuZS5yZWdpc3RlckJlZm9yZVJlbmRlcih0aGlzLl9yZW5kZXJG
dW5jdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbG9yICYm
IHRoaXMuX3JlbmRlckxpbmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlckxpbmUuY29sb3Iu
Y29weUZyb20oY29sb3IpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBIaWRl
cyB0aGUgcmF5IHdlIGFyZSBkZWJ1Z2dpbmcuCisgICAgICovCisgICAgUmF5SGVscGVyLnByb3Rv
dHlwZS5oaWRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fcmVuZGVyRnVuY3Rp
b24gJiYgdGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLnVucmVnaXN0ZXJC
ZWZvcmVSZW5kZXIodGhpcy5fcmVuZGVyRnVuY3Rpb24pOworICAgICAgICAgICAgdGhpcy5fc2Nl
bmUgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fcmVuZGVyRnVuY3Rpb24gPSBudWxsOworICAg
ICAgICAgICAgaWYgKHRoaXMuX3JlbmRlckxpbmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9y
ZW5kZXJMaW5lLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJMaW5lID0g
bnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3JlbmRlclBvaW50cyA9IFtd
OworICAgICAgICB9CisgICAgfTsKKyAgICBSYXlIZWxwZXIucHJvdG90eXBlLl9yZW5kZXIgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHZhciByYXkgPSB0aGlzLnJheTsKKyAgICAgICAgaWYgKCFy
YXkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgcG9pbnQg
PSB0aGlzLl9yZW5kZXJQb2ludHNbMV07CisgICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihyYXku
bGVuZ3RoLCAxMDAwMDAwKTsKKyAgICAgICAgcG9pbnQuY29weUZyb20ocmF5LmRpcmVjdGlvbik7
CisgICAgICAgIHBvaW50LnNjYWxlSW5QbGFjZShsZW4pOworICAgICAgICBwb2ludC5hZGRJblBs
YWNlKHJheS5vcmlnaW4pOworICAgICAgICBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZUxpbmVzKCJyYXkiLCB0aGlzLl9yZW5kZXJQb2ludHMs
IHRoaXMuX3NjZW5lLCB0cnVlLCB0aGlzLl9yZW5kZXJMaW5lKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEF0dGFjaCBhIHJheSBoZWxwZXIgdG8gYSBtZXNoIHNvIHRoYXQgd2UgY2FuIGVhc2ls
eSBzZWUgaXRzIG9yaWVudGF0aW9uIGZvciBpbnN0YW5jZSBvciBpbmZvcm1hdGlvbiBsaWtlIGl0
cyBub3JtYWxzLgorICAgICAqIEBwYXJhbSBtZXNoIERlZmluZXMgdGhlIG1lc2ggd2Ugd2FudCB0
aGUgaGVscGVyIGF0dGFjaGVkIHRvCisgICAgICogQHBhcmFtIG1lc2hTcGFjZURpcmVjdGlvbiBE
ZWZpbmVzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIFJheSBpbiBtZXNoIHNwYWNlIChsb2NhbCBzcGFj
ZSBvZiB0aGUgbWVzaCBub2RlKQorICAgICAqIEBwYXJhbSBtZXNoU3BhY2VPcmlnaW4gRGVmaW5l
cyB0aGUgb3JpZ2luIG9mIHRoZSBSYXkgaW4gbWVzaCBzcGFjZSAobG9jYWwgc3BhY2Ugb2YgdGhl
IG1lc2ggbm9kZSkKKyAgICAgKiBAcGFyYW0gbGVuZ3RoIERlZmluZXMgdGhlIGxlbmd0aCBvZiB0
aGUgcmF5CisgICAgICovCisgICAgUmF5SGVscGVyLnByb3RvdHlwZS5hdHRhY2hUb01lc2ggPSBm
dW5jdGlvbiAobWVzaCwgbWVzaFNwYWNlRGlyZWN0aW9uLCBtZXNoU3BhY2VPcmlnaW4sIGxlbmd0
aCkgeworICAgICAgICB0aGlzLl9hdHRhY2hlZFRvTWVzaCA9IG1lc2g7CisgICAgICAgIHZhciBy
YXkgPSB0aGlzLnJheTsKKyAgICAgICAgaWYgKCFyYXkpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIXJheS5kaXJlY3Rpb24pIHsKKyAgICAgICAgICAgIHJh
eS5kaXJlY3Rpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJheS5vcmln
aW4pIHsKKyAgICAgICAgICAgIHJheS5vcmlnaW4gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobGVuZ3RoKSB7CisgICAgICAgICAgICByYXkubGVuZ3RoID0gbGVuZ3RoOworICAg
ICAgICB9CisgICAgICAgIGlmICghbWVzaFNwYWNlT3JpZ2luKSB7CisgICAgICAgICAgICBtZXNo
U3BhY2VPcmlnaW4gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1lc2hTcGFj
ZURpcmVjdGlvbikgeworICAgICAgICAgICAgLy8gLTEgc28gdGhhdCB0aGlzIHdpbGwgd29yayB3
aXRoIE1lc2gubG9va0F0CisgICAgICAgICAgICBtZXNoU3BhY2VEaXJlY3Rpb24gPSBuZXcgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgw
LCAwLCAtMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9tZXNoU3BhY2VEaXJlY3Rp
b24pIHsKKyAgICAgICAgICAgIHRoaXMuX21lc2hTcGFjZURpcmVjdGlvbiA9IG1lc2hTcGFjZURp
cmVjdGlvbi5jbG9uZSgpOworICAgICAgICAgICAgdGhpcy5fbWVzaFNwYWNlT3JpZ2luID0gbWVz
aFNwYWNlT3JpZ2luLmNsb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLl9tZXNoU3BhY2VEaXJlY3Rpb24uY29weUZyb20obWVzaFNwYWNlRGlyZWN0aW9u
KTsKKyAgICAgICAgICAgIHRoaXMuX21lc2hTcGFjZU9yaWdpbi5jb3B5RnJvbShtZXNoU3BhY2VP
cmlnaW4pOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fdXBkYXRlVG9NZXNoRnVuY3Rp
b24pIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRvTWVzaEZ1bmN0aW9uID0gdGhpcy5fdXBk
YXRlVG9NZXNoLmJpbmQodGhpcyk7CisgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZFRvTWVzaC5n
ZXRTY2VuZSgpLnJlZ2lzdGVyQmVmb3JlUmVuZGVyKHRoaXMuX3VwZGF0ZVRvTWVzaEZ1bmN0aW9u
KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl91cGRhdGVUb01lc2goKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIERldGFjaCB0aGUgcmF5IGhlbHBlciBmcm9tIHRoZSBtZXNoIGl0IGhhcyBw
cmV2aW91c2x5IGJlZW4gYXR0YWNoZWQgdG8uCisgICAgICovCisgICAgUmF5SGVscGVyLnByb3Rv
dHlwZS5kZXRhY2hGcm9tTWVzaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2F0
dGFjaGVkVG9NZXNoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdXBkYXRlVG9NZXNoRnVuY3Rp
b24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZFRvTWVzaC5nZXRTY2VuZSgpLnVu
cmVnaXN0ZXJCZWZvcmVSZW5kZXIodGhpcy5fdXBkYXRlVG9NZXNoRnVuY3Rpb24pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYXR0YWNoZWRUb01lc2ggPSBudWxsOworICAgICAg
ICAgICAgdGhpcy5fdXBkYXRlVG9NZXNoRnVuY3Rpb24gPSBudWxsOworICAgICAgICB9CisgICAg
fTsKKyAgICBSYXlIZWxwZXIucHJvdG90eXBlLl91cGRhdGVUb01lc2ggPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciByYXkgPSB0aGlzLnJheTsKKyAgICAgICAgaWYgKCF0aGlzLl9hdHRhY2hl
ZFRvTWVzaCB8fCAhcmF5KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuX2F0dGFjaGVkVG9NZXNoLl9pc0Rpc3Bvc2VkKSB7CisgICAgICAgICAgICB0
aGlzLmRldGFjaEZyb21NZXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fYXR0YWNoZWRUb01lc2guZ2V0RGlyZWN0aW9uVG9SZWYodGhpcy5fbWVzaFNw
YWNlRGlyZWN0aW9uLCByYXkuZGlyZWN0aW9uKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGlu
YXRlc1RvUmVmKHRoaXMuX21lc2hTcGFjZU9yaWdpbiwgdGhpcy5fYXR0YWNoZWRUb01lc2guZ2V0
V29ybGRNYXRyaXgoKSwgcmF5Lm9yaWdpbik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNw
b3NlIHRoZSBoZWxwZXIgYW5kIHJlbGVhc2UgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICAg
ICAqLworICAgIFJheUhlbHBlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5oaWRlKCk7CisgICAgICAgIHRoaXMuZGV0YWNoRnJvbU1lc2goKTsKKyAgICAg
ICAgdGhpcy5yYXkgPSBudWxsOworICAgIH07CisgICAgcmV0dXJuIFJheUhlbHBlcjsKK30oKSk7
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRGVidWcvc2tlbGV0b25WaWV3ZXIudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9EZWJ1Zy9z
a2VsZXRvblZpZXdlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2tlbGV0b25WaWV3ZXIgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2tlbGV0b25WaWV3ZXIiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIFNrZWxldG9uVmlld2VyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21h
dGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfbGluZXNCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvbGlu
ZXNCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9saW5lc0J1aWxkZXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfUmVuZGVyaW5nX3V0aWxpdHlMYXllclJlbmRlcmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9SZW5k
ZXJpbmcvdXRpbGl0eUxheWVyUmVuZGVyZXIgKi8gIi4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJl
bmRlcmVyLnRzIik7CisKKworCisKKy8qKgorICAgICAqIENsYXNzIHVzZWQgdG8gcmVuZGVyIGEg
ZGVidWcgdmlldyBvZiBhIGdpdmVuIHNrZWxldG9uCisgICAgICogQHNlZSBodHRwOi8vd3d3LmJh
Ynlsb25qcy1wbGF5Z3JvdW5kLmNvbS8jMUJaSlZKIzgKKyAgICAgKi8KK3ZhciBTa2VsZXRvblZp
ZXdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IFNrZWxldG9uVmlld2VyCisgICAgICogQHBhcmFtIHNrZWxldG9uIGRlZmluZXMg
dGhlIHNrZWxldG9uIHRvIHJlbmRlcgorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIG1l
c2ggYXR0YWNoZWQgdG8gdGhlIHNrZWxldG9uCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMg
dGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gYXV0b1VwZGF0ZUJvbmVzTWF0cmljZXMg
ZGVmaW5lcyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBib25lcyBtYXRyaWNlcyBtdXN0IGJlIGZv
cmNlZCB0byB1cGRhdGUgYmVmb3JlIHJlbmRlcmluZyAodHJ1ZSBieSBkZWZhdWx0KQorICAgICAq
IEBwYXJhbSByZW5kZXJpbmdHcm91cElkIGRlZmluZXMgdGhlIHJlbmRlcmluZyBncm91cCBpZCB0
byB1c2Ugd2l0aCB0aGUgdmlld2VyCisgICAgICovCisgICAgZnVuY3Rpb24gU2tlbGV0b25WaWV3
ZXIoCisgICAgLyoqIGRlZmluZXMgdGhlIHNrZWxldG9uIHRvIHJlbmRlciAqLworICAgIHNrZWxl
dG9uLCAKKyAgICAvKiogZGVmaW5lcyB0aGUgbWVzaCBhdHRhY2hlZCB0byB0aGUgc2tlbGV0b24g
Ki8KKyAgICBtZXNoLCBzY2VuZSwgCisgICAgLyoqIGRlZmluZXMgYSBib29sZWFuIGluZGljYXRp
bmcgaWYgYm9uZXMgbWF0cmljZXMgbXVzdCBiZSBmb3JjZWQgdG8gdXBkYXRlIGJlZm9yZSByZW5k
ZXJpbmcgKHRydWUgYnkgZGVmYXVsdCkgICovCisgICAgYXV0b1VwZGF0ZUJvbmVzTWF0cmljZXMs
IAorICAgIC8qKiBkZWZpbmVzIHRoZSByZW5kZXJpbmcgZ3JvdXAgaWQgdG8gdXNlIHdpdGggdGhl
IHZpZXdlciAqLworICAgIHJlbmRlcmluZ0dyb3VwSWQpIHsKKyAgICAgICAgaWYgKGF1dG9VcGRh
dGVCb25lc01hdHJpY2VzID09PSB2b2lkIDApIHsgYXV0b1VwZGF0ZUJvbmVzTWF0cmljZXMgPSB0
cnVlOyB9CisgICAgICAgIGlmIChyZW5kZXJpbmdHcm91cElkID09PSB2b2lkIDApIHsgcmVuZGVy
aW5nR3JvdXBJZCA9IDE7IH0KKyAgICAgICAgdGhpcy5za2VsZXRvbiA9IHNrZWxldG9uOworICAg
ICAgICB0aGlzLm1lc2ggPSBtZXNoOworICAgICAgICB0aGlzLmF1dG9VcGRhdGVCb25lc01hdHJp
Y2VzID0gYXV0b1VwZGF0ZUJvbmVzTWF0cmljZXM7CisgICAgICAgIHRoaXMucmVuZGVyaW5nR3Jv
dXBJZCA9IHJlbmRlcmluZ0dyb3VwSWQ7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIGNv
bG9yIHVzZWQgdG8gcmVuZGVyIHRoZSBza2VsZXRvbiAqLworICAgICAgICB0aGlzLmNvbG9yID0g
X01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3IzIl0u
V2hpdGUoKTsKKyAgICAgICAgdGhpcy5fZGVidWdMaW5lcyA9IG5ldyBBcnJheSgpOworICAgICAg
ICB0aGlzLl9pc0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZTsK
KyAgICAgICAgdGhpcy5fdXRpbGl0eUxheWVyID0gbmV3IF9SZW5kZXJpbmdfdXRpbGl0eUxheWVy
UmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVXRpbGl0eUxheWVyUmVuZGVy
ZXIiXSh0aGlzLl9zY2VuZSwgZmFsc2UpOworICAgICAgICB0aGlzLl91dGlsaXR5TGF5ZXIucGlj
a1V0aWxpdHlTY2VuZUZpcnN0ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3V0aWxpdHlMYXllci51
dGlsaXR5TGF5ZXJTY2VuZS5hdXRvQ2xlYXJEZXB0aEFuZFN0ZW5jaWwgPSB0cnVlOworICAgICAg
ICB0aGlzLnVwZGF0ZSgpOworICAgICAgICB0aGlzLl9yZW5kZXJGdW5jdGlvbiA9IHRoaXMudXBk
YXRlLmJpbmQodGhpcyk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTa2VsZXRv
blZpZXdlci5wcm90b3R5cGUsICJkZWJ1Z01lc2giLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBSZXR1cm5zIHRoZSBtZXNoIHVzZWQgdG8gcmVuZGVyIHRoZSBib25lcworICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVi
dWdNZXNoOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2tl
bGV0b25WaWV3ZXIucHJvdG90eXBlLCAiaXNFbmFibGVkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0VuYWJsZWQ7CisgICAgICAgIH0s
CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHZp
ZXdlciBpcyBlbmFibGVkICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5faXNFbmFibGVkID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IHZh
bHVlOworICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2Nl
bmUucmVnaXN0ZXJCZWZvcmVSZW5kZXIodGhpcy5fcmVuZGVyRnVuY3Rpb24pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUudW5y
ZWdpc3RlckJlZm9yZVJlbmRlcih0aGlzLl9yZW5kZXJGdW5jdGlvbik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIFNrZWxldG9uVmlld2VyLnByb3RvdHlwZS5fZ2V0Qm9u
ZVBvc2l0aW9uID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBib25lLCBtZXNoTWF0LCB4LCB5LCB6KSB7
CisgICAgICAgIGlmICh4ID09PSB2b2lkIDApIHsgeCA9IDA7IH0KKyAgICAgICAgaWYgKHkgPT09
IHZvaWQgMCkgeyB5ID0gMDsgfQorICAgICAgICBpZiAoeiA9PT0gdm9pZCAwKSB7IHogPSAwOyB9
CisgICAgICAgIHZhciB0bWF0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF07CisgICAgICAgIHZhciBwYXJlbnRC
b25lID0gYm9uZS5nZXRQYXJlbnQoKTsKKyAgICAgICAgdG1hdC5jb3B5RnJvbShib25lLmdldExv
Y2FsTWF0cml4KCkpOworICAgICAgICBpZiAoeCAhPT0gMCB8fCB5ICE9PSAwIHx8IHogIT09IDAp
IHsKKyAgICAgICAgICAgIHZhciB0bWF0MiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzFdOworICAgICAgICAgICAg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJd
LklkZW50aXR5VG9SZWYodG1hdDIpOworICAgICAgICAgICAgdG1hdDIuc2V0VHJhbnNsYXRpb25G
cm9tRmxvYXRzKHgsIHksIHopOworICAgICAgICAgICAgdG1hdDIubXVsdGlwbHlUb1JlZih0bWF0
LCB0bWF0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyZW50Qm9uZSkgeworICAgICAgICAg
ICAgdG1hdC5tdWx0aXBseVRvUmVmKHBhcmVudEJvbmUuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0oKSwg
dG1hdCk7CisgICAgICAgIH0KKyAgICAgICAgdG1hdC5tdWx0aXBseVRvUmVmKG1lc2hNYXQsIHRt
YXQpOworICAgICAgICBwb3NpdGlvbi54ID0gdG1hdC5tWzEyXTsKKyAgICAgICAgcG9zaXRpb24u
eSA9IHRtYXQubVsxM107CisgICAgICAgIHBvc2l0aW9uLnogPSB0bWF0Lm1bMTRdOworICAgIH07
CisgICAgU2tlbGV0b25WaWV3ZXIucHJvdG90eXBlLl9nZXRMaW5lc0ZvckJvbmVzV2l0aExlbmd0
aCA9IGZ1bmN0aW9uIChib25lcywgbWVzaE1hdCkgeworICAgICAgICB2YXIgbGVuID0gYm9uZXMu
bGVuZ3RoOworICAgICAgICB2YXIgbWVzaCA9IHRoaXMubWVzaC5fZWZmZWN0aXZlTWVzaDsKKyAg
ICAgICAgdmFyIG1lc2hQb3MgPSBtZXNoLnBvc2l0aW9uOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYm9uZSA9IGJvbmVzW2ldOworICAg
ICAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMuX2RlYnVnTGluZXNbaV07CisgICAgICAgICAgICBp
ZiAoIXBvaW50cykgeworICAgICAgICAgICAgICAgIHBvaW50cyA9IFtfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKSwgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJv
KCldOworICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnTGluZXNbaV0gPSBwb2ludHM7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9nZXRCb25lUG9zaXRpb24ocG9pbnRzWzBdLCBi
b25lLCBtZXNoTWF0KTsKKyAgICAgICAgICAgIHRoaXMuX2dldEJvbmVQb3NpdGlvbihwb2ludHNb
MV0sIGJvbmUsIG1lc2hNYXQsIDAsIGJvbmUubGVuZ3RoLCAwKTsKKyAgICAgICAgICAgIHBvaW50
c1swXS5zdWJ0cmFjdEluUGxhY2UobWVzaFBvcyk7CisgICAgICAgICAgICBwb2ludHNbMV0uc3Vi
dHJhY3RJblBsYWNlKG1lc2hQb3MpOworICAgICAgICB9CisgICAgfTsKKyAgICBTa2VsZXRvblZp
ZXdlci5wcm90b3R5cGUuX2dldExpbmVzRm9yQm9uZXNOb0xlbmd0aCA9IGZ1bmN0aW9uIChib25l
cywgbWVzaE1hdCkgeworICAgICAgICB2YXIgbGVuID0gYm9uZXMubGVuZ3RoOworICAgICAgICB2
YXIgYm9uZU51bSA9IDA7CisgICAgICAgIHZhciBtZXNoID0gdGhpcy5tZXNoLl9lZmZlY3RpdmVN
ZXNoOworICAgICAgICB2YXIgbWVzaFBvcyA9IG1lc2gucG9zaXRpb247CisgICAgICAgIGZvciAo
dmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgdmFyIGNoaWxkQm9u
ZSA9IGJvbmVzW2ldOworICAgICAgICAgICAgdmFyIHBhcmVudEJvbmUgPSBjaGlsZEJvbmUuZ2V0
UGFyZW50KCk7CisgICAgICAgICAgICBpZiAoIXBhcmVudEJvbmUpIHsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBwb2ludHMgPSB0aGlz
Ll9kZWJ1Z0xpbmVzW2JvbmVOdW1dOworICAgICAgICAgICAgaWYgKCFwb2ludHMpIHsKKyAgICAg
ICAgICAgICAgICBwb2ludHMgPSBbX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCksIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpXTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9kZWJ1Z0xpbmVzW2JvbmVOdW1dID0gcG9pbnRzOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2hpbGRCb25lLmdldEFic29sdXRlUG9zaXRpb25Ub1JlZihtZXNoLCBwb2ludHNb
MF0pOworICAgICAgICAgICAgcGFyZW50Qm9uZS5nZXRBYnNvbHV0ZVBvc2l0aW9uVG9SZWYobWVz
aCwgcG9pbnRzWzFdKTsKKyAgICAgICAgICAgIHBvaW50c1swXS5zdWJ0cmFjdEluUGxhY2UobWVz
aFBvcyk7CisgICAgICAgICAgICBwb2ludHNbMV0uc3VidHJhY3RJblBsYWNlKG1lc2hQb3MpOwor
ICAgICAgICAgICAgYm9uZU51bSsrOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogVXBkYXRl
IHRoZSB2aWV3ZXIgdG8gc3luYyB3aXRoIGN1cnJlbnQgc2tlbGV0b24gc3RhdGUgKi8KKyAgICBT
a2VsZXRvblZpZXdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAoIXRoaXMuX3V0aWxpdHlMYXllcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGlmICh0aGlzLmF1dG9VcGRhdGVCb25lc01hdHJpY2VzKSB7CisgICAgICAgICAg
ICB0aGlzLnNrZWxldG9uLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9ybXMoKTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgbWVzaCA9IHRoaXMubWVzaC5fZWZmZWN0aXZlTWVzaDsKKyAgICAgICAgaWYg
KHRoaXMuc2tlbGV0b24uYm9uZXNbMF0ubGVuZ3RoID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2dldExpbmVzRm9yQm9uZXNOb0xlbmd0aCh0aGlzLnNrZWxldG9uLmJvbmVzLCBt
ZXNoLmdldFdvcmxkTWF0cml4KCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdGhpcy5fZ2V0TGluZXNGb3JCb25lc1dpdGhMZW5ndGgodGhpcy5za2VsZXRvbi5ib25l
cywgbWVzaC5nZXRXb3JsZE1hdHJpeCgpKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgdGFyZ2V0
U2NlbmUgPSB0aGlzLl91dGlsaXR5TGF5ZXIudXRpbGl0eUxheWVyU2NlbmU7CisgICAgICAgIGlm
ICghdGhpcy5fZGVidWdNZXNoKSB7CisgICAgICAgICAgICB0aGlzLl9kZWJ1Z01lc2ggPSBfTWVz
aGVzX0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJM
aW5lc0J1aWxkZXIiXS5DcmVhdGVMaW5lU3lzdGVtKCIiLCB7IGxpbmVzOiB0aGlzLl9kZWJ1Z0xp
bmVzLCB1cGRhdGFibGU6IHRydWUsIGluc3RhbmNlOiBudWxsIH0sIHRhcmdldFNjZW5lKTsKKyAg
ICAgICAgICAgIHRoaXMuX2RlYnVnTWVzaC5yZW5kZXJpbmdHcm91cElkID0gdGhpcy5yZW5kZXJp
bmdHcm91cElkOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX01lc2hl
c19CdWlsZGVyc19saW5lc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTGlu
ZXNCdWlsZGVyIl0uQ3JlYXRlTGluZVN5c3RlbSgiIiwgeyBsaW5lczogdGhpcy5fZGVidWdMaW5l
cywgdXBkYXRhYmxlOiB0cnVlLCBpbnN0YW5jZTogdGhpcy5fZGVidWdNZXNoIH0sIHRhcmdldFNj
ZW5lKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9kZWJ1Z01lc2gucG9zaXRpb24uY29weUZy
b20odGhpcy5tZXNoLnBvc2l0aW9uKTsKKyAgICAgICAgdGhpcy5fZGVidWdNZXNoLmNvbG9yID0g
dGhpcy5jb2xvcjsKKyAgICB9OworICAgIC8qKiBSZWxlYXNlIGFzc29jaWF0ZWQgcmVzb3VyY2Vz
ICovCisgICAgU2tlbGV0b25WaWV3ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMuaXNFbmFibGVkID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlzLl9kZWJ1
Z01lc2gpIHsKKyAgICAgICAgICAgIHRoaXMuaXNFbmFibGVkID0gZmFsc2U7CisgICAgICAgICAg
ICB0aGlzLl9kZWJ1Z01lc2guZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fZGVidWdNZXNo
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fdXRpbGl0eUxheWVyKSB7Cisg
ICAgICAgICAgICB0aGlzLl91dGlsaXR5TGF5ZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhp
cy5fdXRpbGl0eUxheWVyID0gbnVsbDsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIFNr
ZWxldG9uVmlld2VyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVz
L0V4dGVuc2lvbnMvZW5naW5lLmN1YmVUZXh0dXJlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9FbmdpbmVzL0V4
dGVuc2lvbnMvZW5naW5lLmN1YmVUZXh0dXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIG5vIGV4cG9ydHMgcHJvdmlk
ZWQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xp
YiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5n
aW5lcy9lbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4
dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJuYWxUZXh0dXJlLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9N
aXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2ZpbGVUb29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTWlzYy9maWxlVG9vbHMgKi8gIi4vTWlzYy9maWxlVG9vbHMudHMiKTsKKworCisKKwor
CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0u
cHJvdG90eXBlLl9jcmVhdGVEZXB0aFN0ZW5jaWxDdWJlVGV4dHVyZSA9IGZ1bmN0aW9uIChzaXpl
LCBvcHRpb25zKSB7CisgICAgdmFyIGludGVybmFsVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRl
cm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09VUkNF
X1VOS05PV04pOworICAgIGludGVybmFsVGV4dHVyZS5pc0N1YmUgPSB0cnVlOworICAgIGlmICh0
aGlzLndlYkdMVmVyc2lvbiA9PT0gMSkgeworICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siTG9nZ2VyIl0uRXJyb3IoIkRlcHRoIGN1YmUgdGV4dHVyZSBp
cyBub3Qgc3VwcG9ydGVkIGJ5IFdlYkdMIDEuIik7CisgICAgICAgIHJldHVybiBpbnRlcm5hbFRl
eHR1cmU7CisgICAgfQorICAgIHZhciBpbnRlcm5hbE9wdGlvbnMgPSB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fzc2lnbiJdKHsgYmlsaW5lYXJGaWx0ZXJpbmc6IGZhbHNl
LCBjb21wYXJpc29uRnVuY3Rpb246IDAsIGdlbmVyYXRlU3RlbmNpbDogZmFsc2UgfSwgb3B0aW9u
cyk7CisgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3Rs
eShnbC5URVhUVVJFX0NVQkVfTUFQLCBpbnRlcm5hbFRleHR1cmUsIHRydWUpOworICAgIHRoaXMu
X3NldHVwRGVwdGhTdGVuY2lsVGV4dHVyZShpbnRlcm5hbFRleHR1cmUsIHNpemUsIGludGVybmFs
T3B0aW9ucy5nZW5lcmF0ZVN0ZW5jaWwsIGludGVybmFsT3B0aW9ucy5iaWxpbmVhckZpbHRlcmlu
ZywgaW50ZXJuYWxPcHRpb25zLmNvbXBhcmlzb25GdW5jdGlvbik7CisgICAgLy8gQ3JlYXRlIHRo
ZSBkZXB0aC9zdGVuY2lsIGJ1ZmZlcgorICAgIGZvciAodmFyIGZhY2UgPSAwOyBmYWNlIDwgNjsg
ZmFjZSsrKSB7CisgICAgICAgIGlmIChpbnRlcm5hbE9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsKSB7
CisgICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCArIGZhY2UsIDAsIGdsLkRFUFRIMjRfU1RFTkNJTDgsIHNpemUsIHNpemUsIDAsIGdsLkRFUFRI
X1NURU5DSUwsIGdsLlVOU0lHTkVEX0lOVF8yNF84LCBudWxsKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YICsgZmFjZSwgMCwgZ2wuREVQVEhfQ09NUE9ORU5UMjQsIHNpemUsIHNpemUsIDAs
IGdsLkRFUFRIX0NPTVBPTkVOVCwgZ2wuVU5TSUdORURfSU5ULCBudWxsKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfQ1VCRV9NQVAs
IG51bGwpOworICAgIHJldHVybiBpbnRlcm5hbFRleHR1cmU7Cit9OworX0VuZ2luZXNfZW5naW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2luZSJdLnByb3RvdHlwZS5fcGFydGlh
bExvYWRGaWxlID0gZnVuY3Rpb24gKHVybCwgaW5kZXgsIGxvYWRlZEZpbGVzLCBvbmZpbmlzaCwg
b25FcnJvckNhbGxCYWNrKSB7CisgICAgaWYgKG9uRXJyb3JDYWxsQmFjayA9PT0gdm9pZCAwKSB7
IG9uRXJyb3JDYWxsQmFjayA9IG51bGw7IH0KKyAgICB2YXIgb25sb2FkID0gZnVuY3Rpb24gKGRh
dGEpIHsKKyAgICAgICAgbG9hZGVkRmlsZXNbaW5kZXhdID0gZGF0YTsKKyAgICAgICAgbG9hZGVk
RmlsZXMuX2ludGVybmFsQ291bnQrKzsKKyAgICAgICAgaWYgKGxvYWRlZEZpbGVzLl9pbnRlcm5h
bENvdW50ID09PSA2KSB7CisgICAgICAgICAgICBvbmZpbmlzaChsb2FkZWRGaWxlcyk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIHZhciBvbmVycm9yID0gZnVuY3Rpb24gKHJlcXVlc3QsIGV4Y2Vw
dGlvbikgeworICAgICAgICBpZiAob25FcnJvckNhbGxCYWNrICYmIHJlcXVlc3QpIHsKKyAgICAg
ICAgICAgIG9uRXJyb3JDYWxsQmFjayhyZXF1ZXN0LnN0YXR1cyArICIgIiArIHJlcXVlc3Quc3Rh
dHVzVGV4dCwgZXhjZXB0aW9uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5fbG9hZEZp
bGUodXJsLCBvbmxvYWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlLCBvbmVycm9yKTsKK307
CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0u
cHJvdG90eXBlLl9jYXNjYWRlTG9hZEZpbGVzID0gZnVuY3Rpb24gKHNjZW5lLCBvbmZpbmlzaCwg
ZmlsZXMsIG9uRXJyb3IpIHsKKyAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3Ig
PSBudWxsOyB9CisgICAgdmFyIGxvYWRlZEZpbGVzID0gW107CisgICAgbG9hZGVkRmlsZXMuX2lu
dGVybmFsQ291bnQgPSAwOworICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCA2OyBpbmRl
eCsrKSB7CisgICAgICAgIHRoaXMuX3BhcnRpYWxMb2FkRmlsZShmaWxlc1tpbmRleF0sIGluZGV4
LCBsb2FkZWRGaWxlcywgb25maW5pc2gsIG9uRXJyb3IpOworICAgIH0KK307CitfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0ucHJvdG90eXBlLl9j
YXNjYWRlTG9hZEltZ3MgPSBmdW5jdGlvbiAoc2NlbmUsIG9uZmluaXNoLCBmaWxlcywgb25FcnJv
cikgeworICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG51bGw7IH0KKyAg
ICB2YXIgbG9hZGVkSW1hZ2VzID0gW107CisgICAgbG9hZGVkSW1hZ2VzLl9pbnRlcm5hbENvdW50
ID0gMDsKKyAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgNjsgaW5kZXgrKykgeworICAg
ICAgICB0aGlzLl9wYXJ0aWFsTG9hZEltZyhmaWxlc1tpbmRleF0sIGluZGV4LCBsb2FkZWRJbWFn
ZXMsIHNjZW5lLCBvbmZpbmlzaCwgb25FcnJvcik7CisgICAgfQorfTsKK19FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5wcm90b3R5cGUuX3BhcnRp
YWxMb2FkSW1nID0gZnVuY3Rpb24gKHVybCwgaW5kZXgsIGxvYWRlZEltYWdlcywgc2NlbmUsIG9u
ZmluaXNoLCBvbkVycm9yQ2FsbEJhY2spIHsKKyAgICBpZiAob25FcnJvckNhbGxCYWNrID09PSB2
b2lkIDApIHsgb25FcnJvckNhbGxCYWNrID0gbnVsbDsgfQorICAgIHZhciBpbWc7CisgICAgdmFy
IG9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgbG9hZGVkSW1hZ2VzW2luZGV4XSA9IGlt
ZzsKKyAgICAgICAgbG9hZGVkSW1hZ2VzLl9pbnRlcm5hbENvdW50Kys7CisgICAgICAgIGlmIChz
Y2VuZSkgeworICAgICAgICAgICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKGltZyk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGxvYWRlZEltYWdlcy5faW50ZXJuYWxDb3VudCA9PT0gNikgewor
ICAgICAgICAgICAgb25maW5pc2gobG9hZGVkSW1hZ2VzKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgdmFyIG9uZXJyb3IgPSBmdW5jdGlvbiAobWVzc2FnZSwgZXhjZXB0aW9uKSB7CisgICAgICAg
IGlmIChzY2VuZSkgeworICAgICAgICAgICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKGltZyk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9uRXJyb3JDYWxsQmFjaykgeworICAgICAgICAgICAg
b25FcnJvckNhbGxCYWNrKG1lc3NhZ2UsIGV4Y2VwdGlvbik7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIGltZyA9IF9NaXNjX2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJG
aWxlVG9vbHMiXS5Mb2FkSW1hZ2UodXJsLCBvbmxvYWQsIG9uZXJyb3IsIHNjZW5lID8gc2NlbmUu
b2ZmbGluZVByb3ZpZGVyIDogbnVsbCk7CisgICAgaWYgKHNjZW5lKSB7CisgICAgICAgIHNjZW5l
Ll9hZGRQZW5kaW5nRGF0YShpbWcpOworICAgIH0KK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0ucHJvdG90eXBlLmNyZWF0ZUN1YmVUZXh0
dXJlID0gZnVuY3Rpb24gKHJvb3RVcmwsIHNjZW5lLCBmaWxlcywgbm9NaXBtYXAsIG9uTG9hZCwg
b25FcnJvciwgZm9ybWF0LCBmb3JjZWRFeHRlbnNpb24sIGNyZWF0ZVBvbHlub21pYWxzLCBsb2RT
Y2FsZSwgbG9kT2Zmc2V0LCBmYWxsYmFjaywgZXhjbHVkZUxvYWRlcnMpIHsKKyAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgIGlmIChvbkxvYWQgPT09IHZvaWQgMCkgeyBvbkxvYWQgPSBudWxsOyB9
CisgICAgaWYgKG9uRXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbnVsbDsgfQorICAgIGlm
IChmb3JjZWRFeHRlbnNpb24gPT09IHZvaWQgMCkgeyBmb3JjZWRFeHRlbnNpb24gPSBudWxsOyB9
CisgICAgaWYgKGNyZWF0ZVBvbHlub21pYWxzID09PSB2b2lkIDApIHsgY3JlYXRlUG9seW5vbWlh
bHMgPSBmYWxzZTsgfQorICAgIGlmIChsb2RTY2FsZSA9PT0gdm9pZCAwKSB7IGxvZFNjYWxlID0g
MDsgfQorICAgIGlmIChsb2RPZmZzZXQgPT09IHZvaWQgMCkgeyBsb2RPZmZzZXQgPSAwOyB9Cisg
ICAgaWYgKGZhbGxiYWNrID09PSB2b2lkIDApIHsgZmFsbGJhY2sgPSBudWxsOyB9CisgICAgaWYg
KGV4Y2x1ZGVMb2FkZXJzID09PSB2b2lkIDApIHsgZXhjbHVkZUxvYWRlcnMgPSBbXTsgfQorICAg
IHZhciBnbCA9IHRoaXMuX2dsOworICAgIHZhciB0ZXh0dXJlID0gZmFsbGJhY2sgPyBmYWxsYmFj
ayA6IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1
cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5h
bFRleHR1cmUiXS5EQVRBU09VUkNFX0NVQkUpOworICAgIHRleHR1cmUuaXNDdWJlID0gdHJ1ZTsK
KyAgICB0ZXh0dXJlLnVybCA9IHJvb3RVcmw7CisgICAgdGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMg
PSAhbm9NaXBtYXA7CisgICAgdGV4dHVyZS5fbG9kR2VuZXJhdGlvblNjYWxlID0gbG9kU2NhbGU7
CisgICAgdGV4dHVyZS5fbG9kR2VuZXJhdGlvbk9mZnNldCA9IGxvZE9mZnNldDsKKyAgICBpZiAo
IXRoaXMuX2RvTm90SGFuZGxlQ29udGV4dExvc3QpIHsKKyAgICAgICAgdGV4dHVyZS5fZXh0ZW5z
aW9uID0gZm9yY2VkRXh0ZW5zaW9uOworICAgICAgICB0ZXh0dXJlLl9maWxlcyA9IGZpbGVzOwor
ICAgIH0KKyAgICB2YXIgbGFzdERvdCA9IHJvb3RVcmwubGFzdEluZGV4T2YoJy4nKTsKKyAgICB2
YXIgZXh0ZW5zaW9uID0gZm9yY2VkRXh0ZW5zaW9uID8gZm9yY2VkRXh0ZW5zaW9uIDogKGxhc3RE
b3QgPiAtMSA/IHJvb3RVcmwuc3Vic3RyaW5nKGxhc3REb3QpLnRvTG93ZXJDYXNlKCkgOiAiIik7
CisgICAgdmFyIGxvYWRlciA9IG51bGw7CisgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5fVGV4dHVy
ZUxvYWRlcnM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgIHZhciBhdmFpbGFibGVM
b2FkZXIgPSBfYVtfaV07CisgICAgICAgIGlmIChleGNsdWRlTG9hZGVycy5pbmRleE9mKGF2YWls
YWJsZUxvYWRlcikgPT09IC0xICYmIGF2YWlsYWJsZUxvYWRlci5jYW5Mb2FkKGV4dGVuc2lvbiwg
dGhpcy5fdGV4dHVyZUZvcm1hdEluVXNlLCBmYWxsYmFjaywgZmFsc2UsIGZhbHNlKSkgeworICAg
ICAgICAgICAgbG9hZGVyID0gYXZhaWxhYmxlTG9hZGVyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgdmFyIG9uSW50ZXJuYWxFcnJvciA9IGZ1bmN0aW9uIChyZXF1
ZXN0LCBleGNlcHRpb24pIHsKKyAgICAgICAgaWYgKGxvYWRlcikgeworICAgICAgICAgICAgdmFy
IGZhbGxiYWNrVXJsID0gbG9hZGVyLmdldEZhbGxiYWNrVGV4dHVyZVVybCh0ZXh0dXJlLnVybCwg
X3RoaXMuX3RleHR1cmVGb3JtYXRJblVzZSk7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTG9nZ2VyIl0uV2Fybihsb2FkZXIuY29uc3RydWN0
b3IubmFtZSArICIgZmFpbGVkIHdoZW4gdHJ5aW5nIHRvIGxvYWQgIiArIHRleHR1cmUudXJsICsg
IiwgZmFsbGluZyBiYWNrIHRvIHRoZSBuZXh0IHN1cHBvcnRlZCBsb2FkZXIiKTsKKyAgICAgICAg
ICAgIGlmIChmYWxsYmFja1VybCkgeworICAgICAgICAgICAgICAgIGV4Y2x1ZGVMb2FkZXJzLnB1
c2gobG9hZGVyKTsKKyAgICAgICAgICAgICAgICBfdGhpcy5jcmVhdGVDdWJlVGV4dHVyZShmYWxs
YmFja1VybCwgc2NlbmUsIGZpbGVzLCBub01pcG1hcCwgb25Mb2FkLCBvbkVycm9yLCBmb3JtYXQs
IGV4dGVuc2lvbiwgY3JlYXRlUG9seW5vbWlhbHMsIGxvZFNjYWxlLCBsb2RPZmZzZXQsIHRleHR1
cmUsIGV4Y2x1ZGVMb2FkZXJzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9uRXJyb3IgJiYgcmVxdWVzdCkgeworICAgICAg
ICAgICAgb25FcnJvcihyZXF1ZXN0LnN0YXR1cyArICIgIiArIHJlcXVlc3Quc3RhdHVzVGV4dCwg
ZXhjZXB0aW9uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgaWYgKGxvYWRlcikgeworICAgICAg
ICByb290VXJsID0gbG9hZGVyLnRyYW5zZm9ybVVybChyb290VXJsLCB0aGlzLl90ZXh0dXJlRm9y
bWF0SW5Vc2UpOworICAgICAgICB2YXIgb25sb2FkZGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7Cisg
ICAgICAgICAgICBfdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQ
LCB0ZXh0dXJlLCB0cnVlKTsKKyAgICAgICAgICAgIGxvYWRlci5sb2FkQ3ViZURhdGEoZGF0YSwg
dGV4dHVyZSwgY3JlYXRlUG9seW5vbWlhbHMsIG9uTG9hZCwgb25FcnJvcik7CisgICAgICAgIH07
CisgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPT09IDYpIHsKKyAgICAgICAgICAg
IGlmIChsb2FkZXIuc3VwcG9ydENhc2NhZGVzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY2Fz
Y2FkZUxvYWRGaWxlcyhzY2VuZSwgb25sb2FkZGF0YSwgZmlsZXMsIG9uRXJyb3IpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3Ip
IHsKKyAgICAgICAgICAgICAgICAgICAgb25FcnJvcigiVGV4dHVyZXMgdHlwZSBkb2VzIG5vdCBz
dXBwb3J0IGNhc2NhZGVzLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkxvZ2dlciJdLldhcm4oIlRleHR1cmUgbG9hZGVyIGRvZXMgbm90IHN1cHBv
cnQgY2FzY2FkZXMuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fbG9hZEZpbGUocm9vdFVybCwg
b25sb2FkZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUsIG9uSW50ZXJuYWxFcnJvcik7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmICghZmlsZXMpIHsKKyAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGxvYWQgY3ViZW1hcCBiZWNhdXNlIGZp
bGVzIHdlcmUgbm90IGRlZmluZWQiKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYXNjYWRl
TG9hZEltZ3Moc2NlbmUsIGZ1bmN0aW9uIChpbWdzKSB7CisgICAgICAgICAgICB2YXIgd2lkdGgg
PSBfdGhpcy5uZWVkUE9UVGV4dHVyZXMgPyBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siRW5naW5lIl0uR2V0RXhwb25lbnRPZlR3byhpbWdzWzBdLndpZHRoLCBf
dGhpcy5fY2Fwcy5tYXhDdWJlbWFwVGV4dHVyZVNpemUpIDogaW1nc1swXS53aWR0aDsKKyAgICAg
ICAgICAgIHZhciBoZWlnaHQgPSB3aWR0aDsKKyAgICAgICAgICAgIF90aGlzLl9wcmVwYXJlV29y
a2luZ0NhbnZhcygpOworICAgICAgICAgICAgaWYgKCFfdGhpcy5fd29ya2luZ0NhbnZhcyB8fCAh
X3RoaXMuX3dvcmtpbmdDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgX3RoaXMuX3dvcmtpbmdDYW52YXMud2lkdGggPSB3aWR0aDsK
KyAgICAgICAgICAgIF90aGlzLl93b3JraW5nQ2FudmFzLmhlaWdodCA9IGhlaWdodDsKKyAgICAg
ICAgICAgIHZhciBmYWNlcyA9IFsKKyAgICAgICAgICAgICAgICBnbC5URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1gsIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwgZ2wuVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9aLAorICAgICAgICAgICAgICAgIGdsLlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWCwgZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZLCBnbC5URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1oKKyAgICAgICAgICAgIF07CisgICAgICAgICAgICBfdGhpcy5fYmlu
ZFRleHR1cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlLCB0cnVlKTsKKyAg
ICAgICAgICAgIF90aGlzLl91bnBhY2tGbGlwWShmYWxzZSk7CisgICAgICAgICAgICB2YXIgaW50
ZXJuYWxGb3JtYXQgPSBmb3JtYXQgPyBfdGhpcy5fZ2V0SW50ZXJuYWxGb3JtYXQoZm9ybWF0KSA6
IF90aGlzLl9nbC5SR0JBOworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IGZhY2VzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIGlmIChpbWdzW2luZGV4
XS53aWR0aCAhPT0gd2lkdGggfHwgaW1nc1tpbmRleF0uaGVpZ2h0ICE9PSBoZWlnaHQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgX3RoaXMuX3dvcmtpbmdDb250ZXh0LmRyYXdJbWFnZShpbWdzW2lu
ZGV4XSwgMCwgMCwgaW1nc1tpbmRleF0ud2lkdGgsIGltZ3NbaW5kZXhdLmhlaWdodCwgMCwgMCwg
d2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZmFjZXNb
aW5kZXhdLCAwLCBpbnRlcm5hbEZvcm1hdCwgaW50ZXJuYWxGb3JtYXQsIGdsLlVOU0lHTkVEX0JZ
VEUsIF90aGlzLl93b3JraW5nQ2FudmFzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZmFjZXNbaW5k
ZXhdLCAwLCBpbnRlcm5hbEZvcm1hdCwgaW50ZXJuYWxGb3JtYXQsIGdsLlVOU0lHTkVEX0JZVEUs
IGltZ3NbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIW5vTWlwbWFwKSB7CisgICAgICAgICAgICAgICAgZ2wuZ2VuZXJhdGVNaXBtYXAo
Z2wuVEVYVFVSRV9DVUJFX01BUCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfdGhpcy5f
c2V0Q3ViZU1hcFRleHR1cmVQYXJhbXMoIW5vTWlwbWFwKTsKKyAgICAgICAgICAgIHRleHR1cmUu
d2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0OworICAg
ICAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChmb3JtYXQp
IHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLmZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRleHR1cmUub25Mb2FkZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyh0ZXh0dXJlKTsKKyAgICAgICAgICAgIHRleHR1cmUub25Mb2FkZWRPYnNlcnZhYmxlLmNsZWFy
KCk7CisgICAgICAgICAgICBpZiAob25Mb2FkKSB7CisgICAgICAgICAgICAgICAgb25Mb2FkKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sIGZpbGVzLCBvbkVycm9yKTsKKyAgICB9CisgICAg
dGhpcy5faW50ZXJuYWxUZXh0dXJlc0NhY2hlLnB1c2godGV4dHVyZSk7CisgICAgcmV0dXJuIHRl
eHR1cmU7Cit9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMv
ZW5naW5lLm11bHRpUmVuZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5n
aW5lLm11bHRpUmVuZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIG5vIGV4cG9ydHMgcHJvdmlkZWQgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
RW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50
ZXJuYWxUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworCisKKworX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS51
bkJpbmRNdWx0aUNvbG9yQXR0YWNobWVudEZyYW1lYnVmZmVyID0gZnVuY3Rpb24gKHRleHR1cmVz
LCBkaXNhYmxlR2VuZXJhdGVNaXBNYXBzLCBvbkJlZm9yZVVuYmluZCkgeworICAgIGlmIChkaXNh
YmxlR2VuZXJhdGVNaXBNYXBzID09PSB2b2lkIDApIHsgZGlzYWJsZUdlbmVyYXRlTWlwTWFwcyA9
IGZhbHNlOyB9CisgICAgdGhpcy5fY3VycmVudFJlbmRlclRhcmdldCA9IG51bGw7CisgICAgLy8g
SWYgTVNBQSwgd2UgbmVlZCB0byBiaXRibHQgYmFjayB0byBtYWluIHRleHR1cmUKKyAgICB2YXIg
Z2wgPSB0aGlzLl9nbDsKKyAgICBpZiAodGV4dHVyZXNbMF0uX01TQUFGcmFtZWJ1ZmZlcikgewor
ICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuUkVBRF9GUkFNRUJVRkZFUiwgdGV4dHVyZXNb
MF0uX01TQUFGcmFtZWJ1ZmZlcik7CisgICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5EUkFX
X0ZSQU1FQlVGRkVSLCB0ZXh0dXJlc1swXS5fZnJhbWVidWZmZXIpOworICAgICAgICB2YXIgYXR0
YWNobWVudHMgPSB0ZXh0dXJlc1swXS5fYXR0YWNobWVudHM7CisgICAgICAgIGlmICghYXR0YWNo
bWVudHMpIHsKKyAgICAgICAgICAgIGF0dGFjaG1lbnRzID0gbmV3IEFycmF5KHRleHR1cmVzLmxl
bmd0aCk7CisgICAgICAgICAgICB0ZXh0dXJlc1swXS5fYXR0YWNobWVudHMgPSBhdHRhY2htZW50
czsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHR1cmVzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRleHR1cmVzW2ldOworICAgICAg
ICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRhY2htZW50cy5sZW5ndGg7IGorKykgeworICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRzW2pdID0gZ2wuTk9ORTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGF0dGFjaG1lbnRzW2ldID0gZ2xbdGhpcy53ZWJHTFZlcnNpb24gPiAxID8gIkNP
TE9SX0FUVEFDSE1FTlQiICsgaSA6ICJDT0xPUl9BVFRBQ0hNRU5UIiArIGkgKyAiX1dFQkdMIl07
CisgICAgICAgICAgICBnbC5yZWFkQnVmZmVyKGF0dGFjaG1lbnRzW2ldKTsKKyAgICAgICAgICAg
IGdsLmRyYXdCdWZmZXJzKGF0dGFjaG1lbnRzKTsKKyAgICAgICAgICAgIGdsLmJsaXRGcmFtZWJ1
ZmZlcigwLCAwLCB0ZXh0dXJlLndpZHRoLCB0ZXh0dXJlLmhlaWdodCwgMCwgMCwgdGV4dHVyZS53
aWR0aCwgdGV4dHVyZS5oZWlnaHQsIGdsLkNPTE9SX0JVRkZFUl9CSVQsIGdsLk5FQVJFU1QpOwor
ICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0YWNobWVudHMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGF0dGFjaG1lbnRzW2ldID0gZ2xbdGhpcy53ZWJHTFZlcnNp
b24gPiAxID8gIkNPTE9SX0FUVEFDSE1FTlQiICsgaSA6ICJDT0xPUl9BVFRBQ0hNRU5UIiArIGkg
KyAiX1dFQkdMIl07CisgICAgICAgIH0KKyAgICAgICAgZ2wuZHJhd0J1ZmZlcnMoYXR0YWNobWVu
dHMpOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHR1cmVzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgIHZhciB0ZXh0dXJlID0gdGV4dHVyZXNbaV07CisgICAgICAgIGlmICh0ZXh0
dXJlLmdlbmVyYXRlTWlwTWFwcyAmJiAhZGlzYWJsZUdlbmVyYXRlTWlwTWFwcyAmJiAhdGV4dHVy
ZS5pc0N1YmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkoZ2wuVEVY
VFVSRV8yRCwgdGV4dHVyZSk7CisgICAgICAgICAgICBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhU
VVJFXzJEKTsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkoZ2wuVEVYVFVS
RV8yRCwgbnVsbCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG9uQmVmb3JlVW5iaW5kKSB7
CisgICAgICAgIGlmICh0ZXh0dXJlc1swXS5fTVNBQUZyYW1lYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBCaW5kIHRoZSBjb3JyZWN0IGZyYW1lYnVmZmVyCisgICAgICAgICAgICB0aGlzLl9iaW5k
VW5ib3VuZEZyYW1lYnVmZmVyKHRleHR1cmVzWzBdLl9mcmFtZWJ1ZmZlcik7CisgICAgICAgIH0K
KyAgICAgICAgb25CZWZvcmVVbmJpbmQoKTsKKyAgICB9CisgICAgdGhpcy5fYmluZFVuYm91bmRG
cmFtZWJ1ZmZlcihudWxsKTsKK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmNyZWF0ZU11bHRpcGxlUmVuZGVyVGFyZ2V0
ID0gZnVuY3Rpb24gKHNpemUsIG9wdGlvbnMpIHsKKyAgICB2YXIgZ2VuZXJhdGVNaXBNYXBzID0g
ZmFsc2U7CisgICAgdmFyIGdlbmVyYXRlRGVwdGhCdWZmZXIgPSB0cnVlOworICAgIHZhciBnZW5l
cmF0ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKKyAgICB2YXIgZ2VuZXJhdGVEZXB0aFRleHR1cmUg
PSBmYWxzZTsKKyAgICB2YXIgdGV4dHVyZUNvdW50ID0gMTsKKyAgICB2YXIgZGVmYXVsdFR5cGUg
PSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgIHZhciBkZWZhdWx0U2FtcGxpbmdNb2RlID0g
X0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLlRF
WFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERTsKKyAgICB2YXIgdHlwZXMgPSBuZXcgQXJyYXko
KTsKKyAgICB2YXIgc2FtcGxpbmdNb2RlcyA9IG5ldyBBcnJheSgpOworICAgIGlmIChvcHRpb25z
ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgZ2VuZXJhdGVNaXBNYXBzID0gb3B0aW9ucy5nZW5l
cmF0ZU1pcE1hcHMgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogb3B0aW9ucy5nZW5lcmF0ZU1pcE1h
cHM7CisgICAgICAgIGdlbmVyYXRlRGVwdGhCdWZmZXIgPSBvcHRpb25zLmdlbmVyYXRlRGVwdGhC
dWZmZXIgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb25zLmdlbmVyYXRlRGVwdGhCdWZmZXI7
CisgICAgICAgIGdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA9IG9wdGlvbnMuZ2VuZXJhdGVTdGVuY2ls
QnVmZmVyID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVm
ZmVyOworICAgICAgICBnZW5lcmF0ZURlcHRoVGV4dHVyZSA9IG9wdGlvbnMuZ2VuZXJhdGVEZXB0
aFRleHR1cmUgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogb3B0aW9ucy5nZW5lcmF0ZURlcHRoVGV4
dHVyZTsKKyAgICAgICAgdGV4dHVyZUNvdW50ID0gb3B0aW9ucy50ZXh0dXJlQ291bnQgfHwgMTsK
KyAgICAgICAgaWYgKG9wdGlvbnMudHlwZXMpIHsKKyAgICAgICAgICAgIHR5cGVzID0gb3B0aW9u
cy50eXBlczsKKyAgICAgICAgfQorICAgICAgICBpZiAob3B0aW9ucy5zYW1wbGluZ01vZGVzKSB7
CisgICAgICAgICAgICBzYW1wbGluZ01vZGVzID0gb3B0aW9ucy5zYW1wbGluZ01vZGVzOworICAg
ICAgICB9CisgICAgfQorICAgIHZhciBnbCA9IHRoaXMuX2dsOworICAgIC8vIENyZWF0ZSB0aGUg
ZnJhbWVidWZmZXIKKyAgICB2YXIgZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigp
OworICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAgIHZh
ciB3aWR0aCA9IHNpemUud2lkdGggfHwgc2l6ZTsKKyAgICB2YXIgaGVpZ2h0ID0gc2l6ZS5oZWln
aHQgfHwgc2l6ZTsKKyAgICB2YXIgdGV4dHVyZXMgPSBbXTsKKyAgICB2YXIgYXR0YWNobWVudHMg
PSBbXTsKKyAgICB2YXIgZGVwdGhTdGVuY2lsQnVmZmVyID0gdGhpcy5fc2V0dXBGcmFtZWJ1ZmZl
ckRlcHRoQXR0YWNobWVudHMoZ2VuZXJhdGVTdGVuY2lsQnVmZmVyLCBnZW5lcmF0ZURlcHRoQnVm
ZmVyLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHR1cmVDb3Vu
dDsgaSsrKSB7CisgICAgICAgIHZhciBzYW1wbGluZ01vZGUgPSBzYW1wbGluZ01vZGVzW2ldIHx8
IGRlZmF1bHRTYW1wbGluZ01vZGU7CisgICAgICAgIHZhciB0eXBlID0gdHlwZXNbaV0gfHwgZGVm
YXVsdFR5cGU7CisgICAgICAgIGlmICh0eXBlID09PSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVfRkxPQVQgJiYgIXRoaXMu
X2NhcHMudGV4dHVyZUZsb2F0TGluZWFyRmlsdGVyaW5nKSB7CisgICAgICAgICAgICAvLyBpZiBm
bG9hdGluZyBwb2ludCBsaW5lYXIgKGdsLkZMT0FUKSB0aGVuIGZvcmNlIHRvIE5FQVJFU1RfU0FN
UExJTkdNT0RFCisgICAgICAgICAgICBzYW1wbGluZ01vZGUgPSBfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRV9ORUFSRVNUX1NBTVBM
SU5HTU9ERTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09PSBfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVf
SEFMRl9GTE9BVCAmJiAhdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZsb2F0TGluZWFyRmlsdGVyaW5n
KSB7CisgICAgICAgICAgICAvLyBpZiBmbG9hdGluZyBwb2ludCBsaW5lYXIgKEhBTEZfRkxPQVQp
IHRoZW4gZm9yY2UgdG8gTkVBUkVTVF9TQU1QTElOR01PREUKKyAgICAgICAgICAgIHNhbXBsaW5n
TW9kZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdp
bmUiXS5URVhUVVJFX05FQVJFU1RfU0FNUExJTkdNT0RFOworICAgICAgICB9CisgICAgICAgIHZh
ciBmaWx0ZXJzID0gdGhpcy5fZ2V0U2FtcGxpbmdQYXJhbWV0ZXJzKHNhbXBsaW5nTW9kZSwgZ2Vu
ZXJhdGVNaXBNYXBzKTsKKyAgICAgICAgaWYgKHR5cGUgPT09IF9FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5URVhUVVJFVFlQRV9GTE9BVCAmJiAh
dGhpcy5fY2Fwcy50ZXh0dXJlRmxvYXQpIHsKKyAgICAgICAgICAgIHR5cGUgPSBfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVf
VU5TSUdORURfSU5UOworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkxvZ2dlciJdLldhcm4oIkZsb2F0IHRleHR1cmVzIGFyZSBub3Qgc3VwcG9y
dGVkLiBSZW5kZXIgdGFyZ2V0IGZvcmNlZCB0byBURVhUVVJFVFlQRV9VTlNJR05FRF9CWVRFIHR5
cGUiKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnRl
cm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09VUkNF
X01VTFRJUkVOREVSVEFSR0VUKTsKKyAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSBnbFt0aGlzLndl
YkdMVmVyc2lvbiA+IDEgPyAiQ09MT1JfQVRUQUNITUVOVCIgKyBpIDogIkNPTE9SX0FUVEFDSE1F
TlQiICsgaSArICJfV0VCR0wiXTsKKyAgICAgICAgdGV4dHVyZXMucHVzaCh0ZXh0dXJlKTsKKyAg
ICAgICAgYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTsKKyAgICAgICAgZ2wuYWN0aXZlVGV4
dHVyZShnbFsiVEVYVFVSRSIgKyBpXSk7CisgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRV
UkVfMkQsIHRleHR1cmUuX3dlYkdMVGV4dHVyZSk7CisgICAgICAgIGdsLnRleFBhcmFtZXRlcmko
Z2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXJzLm1hZyk7CisgICAg
ICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVS
LCBmaWx0ZXJzLm1pbik7CisgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwg
Z2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpOworICAgICAgICBnbC50ZXhQYXJh
bWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdF
KTsKKyAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLl9nZXRSR0JB
QnVmZmVySW50ZXJuYWxTaXplZEZvcm1hdCh0eXBlKSwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuUkdC
QSwgdGhpcy5fZ2V0V2ViR0xUZXh0dXJlVHlwZSh0eXBlKSwgbnVsbCk7CisgICAgICAgIGdsLmZy
YW1lYnVmZmVyVGV4dHVyZTJEKGdsLkRSQVdfRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIGdsLlRF
WFRVUkVfMkQsIHRleHR1cmUuX3dlYkdMVGV4dHVyZSwgMCk7CisgICAgICAgIGlmIChnZW5lcmF0
ZU1pcE1hcHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmdlbmVyYXRlTWlwbWFwKHRoaXMuX2ds
LlRFWFRVUkVfMkQpOworICAgICAgICB9CisgICAgICAgIC8vIFVuYmluZAorICAgICAgICB0aGlz
Ll9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIG51bGwpOworICAgICAgICB0ZXh0
dXJlLl9mcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOworICAgICAgICB0ZXh0dXJlLl9kZXB0aFN0
ZW5jaWxCdWZmZXIgPSBkZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgICAgIHRleHR1cmUuYmFzZVdp
ZHRoID0gd2lkdGg7CisgICAgICAgIHRleHR1cmUuYmFzZUhlaWdodCA9IGhlaWdodDsKKyAgICAg
ICAgdGV4dHVyZS53aWR0aCA9IHdpZHRoOworICAgICAgICB0ZXh0dXJlLmhlaWdodCA9IGhlaWdo
dDsKKyAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgdGV4dHVyZS5zYW1w
bGVzID0gMTsKKyAgICAgICAgdGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMgPSBnZW5lcmF0ZU1pcE1h
cHM7CisgICAgICAgIHRleHR1cmUuc2FtcGxpbmdNb2RlID0gc2FtcGxpbmdNb2RlOworICAgICAg
ICB0ZXh0dXJlLnR5cGUgPSB0eXBlOworICAgICAgICB0ZXh0dXJlLl9nZW5lcmF0ZURlcHRoQnVm
ZmVyID0gZ2VuZXJhdGVEZXB0aEJ1ZmZlcjsKKyAgICAgICAgdGV4dHVyZS5fZ2VuZXJhdGVTdGVu
Y2lsQnVmZmVyID0gZ2VuZXJhdGVTdGVuY2lsQnVmZmVyOworICAgICAgICB0ZXh0dXJlLl9hdHRh
Y2htZW50cyA9IGF0dGFjaG1lbnRzOworICAgICAgICB0aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2Fj
aGUucHVzaCh0ZXh0dXJlKTsKKyAgICB9CisgICAgaWYgKGdlbmVyYXRlRGVwdGhUZXh0dXJlICYm
IHRoaXMuX2NhcHMuZGVwdGhUZXh0dXJlRXh0ZW5zaW9uKSB7CisgICAgICAgIC8vIERlcHRoIHRl
eHR1cmUKKyAgICAgICAgdmFyIGRlcHRoVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVz
X2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnRlcm5hbFRl
eHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09VUkNFX01VTFRJ
UkVOREVSVEFSR0VUKTsKKyAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7Cisg
ICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGRlcHRoVGV4dHVyZS5fd2ViR0xU
ZXh0dXJlKTsKKyAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhU
VVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1QpOworICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGds
LlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgICAg
IGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNM
QU1QX1RPX0VER0UpOworICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGds
LlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2wudGV4SW1hZ2Uy
RChnbC5URVhUVVJFXzJELCAwLCB0aGlzLndlYkdMVmVyc2lvbiA8IDIgPyBnbC5ERVBUSF9DT01Q
T05FTlQgOiBnbC5ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuREVQVEhf
Q09NUE9ORU5ULCBnbC5VTlNJR05FRF9TSE9SVCwgbnVsbCk7CisgICAgICAgIGdsLmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9BVFRBQ0hNRU5ULCBnbC5URVhU
VVJFXzJELCBkZXB0aFRleHR1cmUuX3dlYkdMVGV4dHVyZSwgMCk7CisgICAgICAgIGRlcHRoVGV4
dHVyZS5fZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKKyAgICAgICAgZGVwdGhUZXh0dXJlLmJh
c2VXaWR0aCA9IHdpZHRoOworICAgICAgICBkZXB0aFRleHR1cmUuYmFzZUhlaWdodCA9IGhlaWdo
dDsKKyAgICAgICAgZGVwdGhUZXh0dXJlLndpZHRoID0gd2lkdGg7CisgICAgICAgIGRlcHRoVGV4
dHVyZS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGRlcHRoVGV4dHVyZS5pc1JlYWR5ID0gdHJ1
ZTsKKyAgICAgICAgZGVwdGhUZXh0dXJlLnNhbXBsZXMgPSAxOworICAgICAgICBkZXB0aFRleHR1
cmUuZ2VuZXJhdGVNaXBNYXBzID0gZ2VuZXJhdGVNaXBNYXBzOworICAgICAgICBkZXB0aFRleHR1
cmUuc2FtcGxpbmdNb2RlID0gZ2wuTkVBUkVTVDsKKyAgICAgICAgZGVwdGhUZXh0dXJlLl9nZW5l
cmF0ZURlcHRoQnVmZmVyID0gZ2VuZXJhdGVEZXB0aEJ1ZmZlcjsKKyAgICAgICAgZGVwdGhUZXh0
dXJlLl9nZW5lcmF0ZVN0ZW5jaWxCdWZmZXIgPSBnZW5lcmF0ZVN0ZW5jaWxCdWZmZXI7CisgICAg
ICAgIHRleHR1cmVzLnB1c2goZGVwdGhUZXh0dXJlKTsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxU
ZXh0dXJlc0NhY2hlLnB1c2goZGVwdGhUZXh0dXJlKTsKKyAgICB9CisgICAgZ2wuZHJhd0J1ZmZl
cnMoYXR0YWNobWVudHMpOworICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVS
LCBudWxsKTsKKyAgICB0aGlzLl9iaW5kVW5ib3VuZEZyYW1lYnVmZmVyKG51bGwpOworICAgIHRo
aXMucmVzZXRUZXh0dXJlQ2FjaGUoKTsKKyAgICByZXR1cm4gdGV4dHVyZXM7Cit9OworX0VuZ2lu
ZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlw
ZS51cGRhdGVNdWx0aXBsZVJlbmRlclRhcmdldFRleHR1cmVTYW1wbGVDb3VudCA9IGZ1bmN0aW9u
ICh0ZXh0dXJlcywgc2FtcGxlcykgeworICAgIGlmICh0aGlzLndlYkdMVmVyc2lvbiA8IDIgfHwg
IXRleHR1cmVzIHx8IHRleHR1cmVzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgIHJldHVybiAxOwor
ICAgIH0KKyAgICBpZiAodGV4dHVyZXNbMF0uc2FtcGxlcyA9PT0gc2FtcGxlcykgeworICAgICAg
ICByZXR1cm4gc2FtcGxlczsKKyAgICB9CisgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgc2Ft
cGxlcyA9IE1hdGgubWluKHNhbXBsZXMsIHRoaXMuZ2V0Q2FwcygpLm1heE1TQUFTYW1wbGVzKTsK
KyAgICAvLyBEaXNwb3NlIHByZXZpb3VzIHJlbmRlciBidWZmZXJzCisgICAgaWYgKHRleHR1cmVz
WzBdLl9kZXB0aFN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgZ2wuZGVsZXRlUmVuZGVyYnVmZmVy
KHRleHR1cmVzWzBdLl9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB0ZXh0dXJlc1swXS5f
ZGVwdGhTdGVuY2lsQnVmZmVyID0gbnVsbDsKKyAgICB9CisgICAgaWYgKHRleHR1cmVzWzBdLl9N
U0FBRnJhbWVidWZmZXIpIHsKKyAgICAgICAgZ2wuZGVsZXRlRnJhbWVidWZmZXIodGV4dHVyZXNb
MF0uX01TQUFGcmFtZWJ1ZmZlcik7CisgICAgICAgIHRleHR1cmVzWzBdLl9NU0FBRnJhbWVidWZm
ZXIgPSBudWxsOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHR1cmVzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgIGlmICh0ZXh0dXJlc1tpXS5fTVNBQVJlbmRlckJ1ZmZlcikgewor
ICAgICAgICAgICAgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRleHR1cmVzW2ldLl9NU0FBUmVuZGVy
QnVmZmVyKTsKKyAgICAgICAgICAgIHRleHR1cmVzW2ldLl9NU0FBUmVuZGVyQnVmZmVyID0gbnVs
bDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc2FtcGxlcyA+IDEpIHsKKyAgICAgICAgdmFy
IGZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICAgICAgaWYgKCFmcmFt
ZWJ1ZmZlcikgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gY3JlYXRl
IG11bHRpIHNhbXBsZWQgZnJhbWVidWZmZXIiKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9i
aW5kVW5ib3VuZEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKyAgICAgICAgdmFyIGRlcHRoU3Rl
bmNpbEJ1ZmZlciA9IHRoaXMuX3NldHVwRnJhbWVidWZmZXJEZXB0aEF0dGFjaG1lbnRzKHRleHR1
cmVzWzBdLl9nZW5lcmF0ZVN0ZW5jaWxCdWZmZXIsIHRleHR1cmVzWzBdLl9nZW5lcmF0ZURlcHRo
QnVmZmVyLCB0ZXh0dXJlc1swXS53aWR0aCwgdGV4dHVyZXNbMF0uaGVpZ2h0LCBzYW1wbGVzKTsK
KyAgICAgICAgdmFyIGF0dGFjaG1lbnRzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGV4dHVyZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGV4
dHVyZXNbaV07CisgICAgICAgICAgICB2YXIgYXR0YWNobWVudCA9IGdsW3RoaXMud2ViR0xWZXJz
aW9uID4gMSA/ICJDT0xPUl9BVFRBQ0hNRU5UIiArIGkgOiAiQ09MT1JfQVRUQUNITUVOVCIgKyBp
ICsgIl9XRUJHTCJdOworICAgICAgICAgICAgdmFyIGNvbG9yUmVuZGVyYnVmZmVyID0gZ2wuY3Jl
YXRlUmVuZGVyYnVmZmVyKCk7CisgICAgICAgICAgICBpZiAoIWNvbG9yUmVuZGVyYnVmZmVyKSB7
CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gY3JlYXRlIG11bHRp
IHNhbXBsZWQgZnJhbWVidWZmZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsLmJp
bmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCBjb2xvclJlbmRlcmJ1ZmZlcik7CisgICAg
ICAgICAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoZ2wuUkVOREVSQlVGRkVS
LCBzYW1wbGVzLCB0aGlzLl9nZXRSR0JBTXVsdGlTYW1wbGVCdWZmZXJGb3JtYXQodGV4dHVyZS50
eXBlKSwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQpOworICAgICAgICAgICAgZ2wuZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIGdsLlJFTkRF
UkJVRkZFUiwgY29sb3JSZW5kZXJidWZmZXIpOworICAgICAgICAgICAgdGV4dHVyZS5fTVNBQUZy
YW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CisgICAgICAgICAgICB0ZXh0dXJlLl9NU0FBUmVuZGVy
QnVmZmVyID0gY29sb3JSZW5kZXJidWZmZXI7CisgICAgICAgICAgICB0ZXh0dXJlLnNhbXBsZXMg
PSBzYW1wbGVzOworICAgICAgICAgICAgdGV4dHVyZS5fZGVwdGhTdGVuY2lsQnVmZmVyID0gZGVw
dGhTdGVuY2lsQnVmZmVyOworICAgICAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5E
RVJCVUZGRVIsIG51bGwpOworICAgICAgICAgICAgYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50
KTsKKyAgICAgICAgfQorICAgICAgICBnbC5kcmF3QnVmZmVycyhhdHRhY2htZW50cyk7CisgICAg
fQorICAgIGVsc2UgeworICAgICAgICB0aGlzLl9iaW5kVW5ib3VuZEZyYW1lYnVmZmVyKHRleHR1
cmVzWzBdLl9mcmFtZWJ1ZmZlcik7CisgICAgfQorICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVi
dWZmZXIobnVsbCk7CisgICAgcmV0dXJuIHNhbXBsZXM7Cit9OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLm11bHRpdmlldy50cyI6CisvKiEqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUubXVsdGl2aWV3LnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBubyBleHBvcnRz
IHByb3ZpZGVkICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
Q2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhICovICIuL0NhbWVyYXMvY2FtZXJhLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVz
L2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vc2NlbmUgKi8gIi4vc2NlbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxz
L1RleHR1cmVzL2ludGVybmFsVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJu
YWxUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfdW5pZm9ybUJ1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0
ZXJpYWxzL3VuaWZvcm1CdWZmZXIgKi8gIi4vTWF0ZXJpYWxzL3VuaWZvcm1CdWZmZXIudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX011bHRpdmlld1Jl
bmRlclRhcmdldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL011bHRpdmlld1JlbmRlclRhcmdldCAq
LyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvTXVsdGl2aWV3UmVuZGVyVGFyZ2V0LnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfZnJ1c3R1bV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5m
cnVzdHVtICovICIuL01hdGhzL21hdGguZnJ1c3R1bS50cyIpOworCisKKworCisKKworCisKK19F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5wcm90
b3R5cGUuY3JlYXRlTXVsdGl2aWV3UmVuZGVyVGFyZ2V0VGV4dHVyZSA9IGZ1bmN0aW9uICh3aWR0
aCwgaGVpZ2h0KSB7CisgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgaWYgKCF0aGlzLmdldENh
cHMoKS5tdWx0aXZpZXcpIHsKKyAgICAgICAgdGhyb3cgIk11bHRpdmlldyBpcyBub3Qgc3VwcG9y
dGVkIjsKKyAgICB9CisgICAgdmFyIGludGVybmFsVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJJbnRl
cm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09VUkNF
X1VOS05PV04sIHRydWUpOworICAgIGludGVybmFsVGV4dHVyZS53aWR0aCA9IHdpZHRoOworICAg
IGludGVybmFsVGV4dHVyZS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgaW50ZXJuYWxUZXh0dXJlLl9m
cmFtZWJ1ZmZlciA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgaW50ZXJuYWxUZXh0dXJl
Ll9jb2xvclRleHR1cmVBcnJheSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4
dHVyZShnbC5URVhUVVJFXzJEX0FSUkFZLCBpbnRlcm5hbFRleHR1cmUuX2NvbG9yVGV4dHVyZUFy
cmF5KTsKKyAgICBnbC50ZXhTdG9yYWdlM0QoZ2wuVEVYVFVSRV8yRF9BUlJBWSwgMSwgZ2wuUkdC
QTgsIHdpZHRoLCBoZWlnaHQsIDIpOworICAgIGludGVybmFsVGV4dHVyZS5fZGVwdGhTdGVuY2ls
VGV4dHVyZUFycmF5ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJpbmRUZXh0dXJlKGds
LlRFWFRVUkVfMkRfQVJSQVksIGludGVybmFsVGV4dHVyZS5fZGVwdGhTdGVuY2lsVGV4dHVyZUFy
cmF5KTsKKyAgICBnbC50ZXhTdG9yYWdlM0QoZ2wuVEVYVFVSRV8yRF9BUlJBWSwgMSwgZ2wuREVQ
VEgzMkZfU1RFTkNJTDgsIHdpZHRoLCBoZWlnaHQsIDIpOworICAgIGludGVybmFsVGV4dHVyZS5p
c1JlYWR5ID0gdHJ1ZTsKKyAgICByZXR1cm4gaW50ZXJuYWxUZXh0dXJlOworfTsKK19FbmdpbmVz
X2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5wcm90b3R5cGUu
YmluZE11bHRpdmlld0ZyYW1lYnVmZmVyID0gZnVuY3Rpb24gKG11bHRpdmlld1RleHR1cmUpIHsK
KyAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAgICB2YXIgZXh0ID0gdGhpcy5nZXRDYXBzKCkubXVs
dGl2aWV3OworICAgIHRoaXMuYmluZEZyYW1lYnVmZmVyKG11bHRpdmlld1RleHR1cmUsIHVuZGVm
aW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUpOworICAgIGdsLmJpbmRGcmFtZWJ1ZmZl
cihnbC5EUkFXX0ZSQU1FQlVGRkVSLCBtdWx0aXZpZXdUZXh0dXJlLl9mcmFtZWJ1ZmZlcik7Cisg
ICAgaWYgKG11bHRpdmlld1RleHR1cmUuX2NvbG9yVGV4dHVyZUFycmF5ICYmIG11bHRpdmlld1Rl
eHR1cmUuX2RlcHRoU3RlbmNpbFRleHR1cmVBcnJheSkgeworICAgICAgICBleHQuZnJhbWVidWZm
ZXJUZXh0dXJlTXVsdGl2aWV3T1ZSKGdsLkRSQVdfRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFD
SE1FTlQwLCBtdWx0aXZpZXdUZXh0dXJlLl9jb2xvclRleHR1cmVBcnJheSwgMCwgMCwgMik7Cisg
ICAgICAgIGV4dC5mcmFtZWJ1ZmZlclRleHR1cmVNdWx0aXZpZXdPVlIoZ2wuRFJBV19GUkFNRUJV
RkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBtdWx0aXZpZXdUZXh0dXJlLl9kZXB0
aFN0ZW5jaWxUZXh0dXJlQXJyYXksIDAsIDAsIDIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAg
ICAgdGhyb3cgIkludmFsaWQgbXVsdGl2aWV3IGZyYW1lIGJ1ZmZlciI7CisgICAgfQorfTsKK19D
YW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDYW1lcmEiXS5wcm90
b3R5cGUuX3VzZU11bHRpdmlld1RvU2luZ2xlVmlldyA9IGZhbHNlOworX0NhbWVyYXNfY2FtZXJh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNhbWVyYSJdLnByb3RvdHlwZS5fbXVsdGl2
aWV3VGV4dHVyZSA9IG51bGw7CitfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQ2FtZXJhIl0ucHJvdG90eXBlLl9yZXNpemVPckNyZWF0ZU11bHRpdmlld1RleHR1
cmUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkgeworICAgIGlmICghdGhpcy5fbXVsdGl2aWV3
VGV4dHVyZSkgeworICAgICAgICB0aGlzLl9tdWx0aXZpZXdUZXh0dXJlID0gbmV3IF9NYXRlcmlh
bHNfVGV4dHVyZXNfTXVsdGl2aWV3UmVuZGVyVGFyZ2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIk11bHRpdmlld1JlbmRlclRhcmdldCJdKHRoaXMuZ2V0U2NlbmUoKSwgeyB3aWR0aDog
d2lkdGgsIGhlaWdodDogaGVpZ2h0IH0pOworICAgIH0KKyAgICBlbHNlIGlmICh0aGlzLl9tdWx0
aXZpZXdUZXh0dXJlLmdldFJlbmRlcldpZHRoKCkgIT0gd2lkdGggfHwgdGhpcy5fbXVsdGl2aWV3
VGV4dHVyZS5nZXRSZW5kZXJIZWlnaHQoKSAhPSBoZWlnaHQpIHsKKyAgICAgICAgdGhpcy5fbXVs
dGl2aWV3VGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMuX211bHRpdmlld1RleHR1cmUg
PSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19NdWx0aXZpZXdSZW5kZXJUYXJnZXRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siTXVsdGl2aWV3UmVuZGVyVGFyZ2V0Il0odGhpcy5nZXRTY2Vu
ZSgpLCB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfSk7CisgICAgfQorfTsKK19zY2Vu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2VuZSJdLnByb3RvdHlwZS5fdHJhbnNm
b3JtTWF0cml4UiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJNYXRyaXgiXS5aZXJvKCk7Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siU2NlbmUiXS5wcm90b3R5cGUuX211bHRpdmlld1NjZW5lVWJvID0gbnVsbDsKK19zY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2VuZSJdLnByb3RvdHlwZS5fY3JlYXRlTXVs
dGl2aWV3VWJvID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuX211bHRpdmlld1NjZW5lVWJvID0g
bmV3IF9NYXRlcmlhbHNfdW5pZm9ybUJ1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJVbmlmb3JtQnVmZmVyIl0odGhpcy5nZXRFbmdpbmUoKSwgdW5kZWZpbmVkLCB0cnVlKTsKKyAg
ICB0aGlzLl9tdWx0aXZpZXdTY2VuZVViby5hZGRVbmlmb3JtKCJ2aWV3UHJvamVjdGlvbiIsIDE2
KTsKKyAgICB0aGlzLl9tdWx0aXZpZXdTY2VuZVViby5hZGRVbmlmb3JtKCJ2aWV3UHJvamVjdGlv
blIiLCAxNik7CisgICAgdGhpcy5fbXVsdGl2aWV3U2NlbmVVYm8uYWRkVW5pZm9ybSgidmlldyIs
IDE2KTsKK307Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NlbmUiXS5w
cm90b3R5cGUuX3VwZGF0ZU11bHRpdmlld1VibyA9IGZ1bmN0aW9uICh2aWV3UiwgcHJvamVjdGlv
blIpIHsKKyAgICBpZiAodmlld1IgJiYgcHJvamVjdGlvblIpIHsKKyAgICAgICAgdmlld1IubXVs
dGlwbHlUb1JlZihwcm9qZWN0aW9uUiwgdGhpcy5fdHJhbnNmb3JtTWF0cml4Uik7CisgICAgfQor
ICAgIGlmICh2aWV3UiAmJiBwcm9qZWN0aW9uUikgeworICAgICAgICB2aWV3Ui5tdWx0aXBseVRv
UmVmKHByb2plY3Rpb25SLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXSk7CisgICAgICAgIF9NYXRoc19tYXRoX2Zy
dXN0dW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRnJ1c3R1bSJdLkdldFJpZ2h0UGxh
bmVUb1JlZihfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
VG1wVmVjdG9ycyJdLk1hdHJpeFswXSwgdGhpcy5fZnJ1c3R1bVBsYW5lc1szXSk7IC8vIFJlcGxh
Y2UgcmlnaHQgcGxhbmUgYnkgc2Vjb25kIGNhbWVyYSByaWdodCBwbGFuZQorICAgIH0KKyAgICBp
ZiAodGhpcy5fbXVsdGl2aWV3U2NlbmVVYm8pIHsKKyAgICAgICAgdGhpcy5fbXVsdGl2aWV3U2Nl
bmVVYm8udXBkYXRlTWF0cml4KCJ2aWV3UHJvamVjdGlvbiIsIHRoaXMuZ2V0VHJhbnNmb3JtTWF0
cml4KCkpOworICAgICAgICB0aGlzLl9tdWx0aXZpZXdTY2VuZVViby51cGRhdGVNYXRyaXgoInZp
ZXdQcm9qZWN0aW9uUiIsIHRoaXMuX3RyYW5zZm9ybU1hdHJpeFIpOworICAgICAgICB0aGlzLl9t
dWx0aXZpZXdTY2VuZVViby51cGRhdGVNYXRyaXgoInZpZXciLCB0aGlzLl92aWV3TWF0cml4KTsK
KyAgICAgICAgdGhpcy5fbXVsdGl2aWV3U2NlbmVVYm8udXBkYXRlKCk7CisgICAgfQorfTsKK19z
Y2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2VuZSJdLnByb3RvdHlwZS5fcmVu
ZGVyTXVsdGl2aWV3VG9TaW5nbGVWaWV3ID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgIC8vIE11
bHRpdmlldyBpcyBvbmx5IGFibGUgdG8gYmUgZGlzcGxheWVkIGRpcmVjdGx5IGZvciBBUEkncyBz
dWNoIGFzIHdlYlhSCisgICAgLy8gVGhpcyBkaXNwbGF5cyBhIG11bHRpdmlldyBpbWFnZSBieSBy
ZW5kZXJpbmcgdG8gdGhlIG11bHRpdmlldyBpbWFnZSBhbmQgdGhlbgorICAgIC8vIGNvcHlpbmcg
dGhlIHJlc3VsdCBpbnRvIHRoZSBzdWIgY2FtZXJhcyBpbnN0ZWFkIG9mIHJlbmRlcmluZyB0aGVt
IGFuZCBwcm9jZWVkaW5nIGFzIG5vcm1hbCBmcm9tIHRoZXJlCisgICAgLy8gUmVuZGVyIHRvIGEg
bXVsdGl2aWV3IHRleHR1cmUKKyAgICBjYW1lcmEuX3Jlc2l6ZU9yQ3JlYXRlTXVsdGl2aWV3VGV4
dHVyZSgoY2FtZXJhLl9yaWdQb3N0UHJvY2VzcyAmJiBjYW1lcmEuX3JpZ1Bvc3RQcm9jZXNzICYm
IGNhbWVyYS5fcmlnUG9zdFByb2Nlc3Mud2lkdGggPiAwKSA/IGNhbWVyYS5fcmlnUG9zdFByb2Nl
c3Mud2lkdGggLyAyIDogdGhpcy5nZXRFbmdpbmUoKS5nZXRSZW5kZXJXaWR0aCh0cnVlKSAvIDIs
IChjYW1lcmEuX3JpZ1Bvc3RQcm9jZXNzICYmIGNhbWVyYS5fcmlnUG9zdFByb2Nlc3MgJiYgY2Ft
ZXJhLl9yaWdQb3N0UHJvY2Vzcy5oZWlnaHQgPiAwKSA/IGNhbWVyYS5fcmlnUG9zdFByb2Nlc3Mu
aGVpZ2h0IDogdGhpcy5nZXRFbmdpbmUoKS5nZXRSZW5kZXJIZWlnaHQodHJ1ZSkpOworICAgIGlm
ICghdGhpcy5fbXVsdGl2aWV3U2NlbmVVYm8pIHsKKyAgICAgICAgdGhpcy5fY3JlYXRlTXVsdGl2
aWV3VWJvKCk7CisgICAgfQorICAgIGNhbWVyYS5vdXRwdXRSZW5kZXJUYXJnZXQgPSBjYW1lcmEu
X211bHRpdmlld1RleHR1cmU7CisgICAgdGhpcy5fcmVuZGVyRm9yQ2FtZXJhKGNhbWVyYSk7Cisg
ICAgY2FtZXJhLm91dHB1dFJlbmRlclRhcmdldCA9IG51bGw7CisgICAgLy8gQ29uc3VtZSB0aGUg
bXVsdGl2aWV3IHRleHR1cmUgdGhyb3VnaCBhIHNoYWRlciBmb3IgZWFjaCBleWUKKyAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgY2FtZXJhLl9yaWdDYW1lcmFzLmxlbmd0aDsgaW5kZXgr
KykgeworICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRFbmdpbmUoKTsKKyAgICAgICAgdGhp
cy5fYWN0aXZlQ2FtZXJhID0gY2FtZXJhLl9yaWdDYW1lcmFzW2luZGV4XTsKKyAgICAgICAgZW5n
aW5lLnNldFZpZXdwb3J0KHRoaXMuX2FjdGl2ZUNhbWVyYS52aWV3cG9ydCk7CisgICAgICAgIGlm
ICh0aGlzLnBvc3RQcm9jZXNzTWFuYWdlcikgeworICAgICAgICAgICAgdGhpcy5wb3N0UHJvY2Vz
c01hbmFnZXIuX3ByZXBhcmVGcmFtZSgpOworICAgICAgICAgICAgdGhpcy5wb3N0UHJvY2Vzc01h
bmFnZXIuX2ZpbmFsaXplRnJhbWUodGhpcy5fYWN0aXZlQ2FtZXJhLmlzSW50ZXJtZWRpYXRlKTsK
KyAgICAgICAgfQorICAgIH0KK307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMv
RXh0ZW5zaW9ucy9lbmdpbmUub2NjbHVzaW9uUXVlcnkudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2lu
ZXMvRXh0ZW5zaW9ucy9lbmdpbmUub2NjbHVzaW9uUXVlcnkudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogX09jY2x1c2lvbkRhdGFTdG9yYWdlICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIl9PY2NsdXNpb25EYXRhU3RvcmFnZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX09jY2x1c2lvbkRhdGFTdG9yYWdlOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01l
c2hlcy9hYnN0cmFjdE1lc2ggKi8gIi4vTWVzaGVzL2Fic3RyYWN0TWVzaC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9JbnN0cnVtZW50YXRpb25fdGltZVRva2VuX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9JbnN0cnVt
ZW50YXRpb24vdGltZVRva2VuICovICIuL0luc3RydW1lbnRhdGlvbi90aW1lVG9rZW4udHMiKTsK
KworCisKKy8qKiBAaGlkZGVuICovCit2YXIgX09jY2x1c2lvbkRhdGFTdG9yYWdlID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIF9PY2NsdXNpb25EYXRhU3RvcmFn
ZSgpIHsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5vY2NsdXNpb25JbnRl
cm5hbFJldHJ5Q291bnRlciA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRo
aXMuaXNPY2NsdXNpb25RdWVyeUluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICAgICAgdGhpcy5pc09jY2x1ZGVkID0gZmFsc2U7CisgICAgICAgIC8qKiBAaGlk
ZGVuICovCisgICAgICAgIHRoaXMub2NjbHVzaW9uUmV0cnlDb3VudCA9IC0xOworICAgICAgICAv
KiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLm9jY2x1c2lvblR5cGUgPSBfTWVzaGVzX2Fic3Ry
YWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdE1lc2giXS5PQ0NM
VVNJT05fVFlQRV9OT05FOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLm9j
Y2x1c2lvblF1ZXJ5QWxnb3JpdGhtVHlwZSA9IF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkFic3RyYWN0TWVzaCJdLk9DQ0xVU0lPTl9BTEdPUklUSE1f
VFlQRV9DT05TRVJWQVRJVkU7CisgICAgfQorICAgIHJldHVybiBfT2NjbHVzaW9uRGF0YVN0b3Jh
Z2U7Cit9KCkpOworCitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRW5naW5lIl0ucHJvdG90eXBlLmNyZWF0ZVF1ZXJ5ID0gZnVuY3Rpb24gKCkgeworICAgIHJl
dHVybiB0aGlzLl9nbC5jcmVhdGVRdWVyeSgpOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuZGVsZXRlUXVlcnkgPSBm
dW5jdGlvbiAocXVlcnkpIHsKKyAgICB0aGlzLl9nbC5kZWxldGVRdWVyeShxdWVyeSk7CisgICAg
cmV0dXJuIHRoaXM7Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS5pc1F1ZXJ5UmVzdWx0QXZhaWxhYmxlID0gZnVuY3Rp
b24gKHF1ZXJ5KSB7CisgICAgcmV0dXJuIHRoaXMuX2dsLmdldFF1ZXJ5UGFyYW1ldGVyKHF1ZXJ5
LCB0aGlzLl9nbC5RVUVSWV9SRVNVTFRfQVZBSUxBQkxFKTsKK307CitfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmdldFF1ZXJ5
UmVzdWx0ID0gZnVuY3Rpb24gKHF1ZXJ5KSB7CisgICAgcmV0dXJuIHRoaXMuX2dsLmdldFF1ZXJ5
UGFyYW1ldGVyKHF1ZXJ5LCB0aGlzLl9nbC5RVUVSWV9SRVNVTFQpOworfTsKK19FbmdpbmVzX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuYmVn
aW5PY2NsdXNpb25RdWVyeSA9IGZ1bmN0aW9uIChhbGdvcml0aG1UeXBlLCBxdWVyeSkgeworICAg
IHZhciBnbEFsZ29yaXRobSA9IHRoaXMuX2dldEdsQWxnb3JpdGhtVHlwZShhbGdvcml0aG1UeXBl
KTsKKyAgICB0aGlzLl9nbC5iZWdpblF1ZXJ5KGdsQWxnb3JpdGhtLCBxdWVyeSk7CisgICAgcmV0
dXJuIHRoaXM7Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkVuZ2luZSJdLnByb3RvdHlwZS5lbmRPY2NsdXNpb25RdWVyeSA9IGZ1bmN0aW9uIChhbGdv
cml0aG1UeXBlKSB7CisgICAgdmFyIGdsQWxnb3JpdGhtID0gdGhpcy5fZ2V0R2xBbGdvcml0aG1U
eXBlKGFsZ29yaXRobVR5cGUpOworICAgIHRoaXMuX2dsLmVuZFF1ZXJ5KGdsQWxnb3JpdGhtKTsK
KyAgICByZXR1cm4gdGhpczsKK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLl9jcmVhdGVUaW1lUXVlcnkgPSBmdW5jdGlv
biAoKSB7CisgICAgdmFyIHRpbWVyUXVlcnkgPSB0aGlzLmdldENhcHMoKS50aW1lclF1ZXJ5Owor
ICAgIGlmICh0aW1lclF1ZXJ5LmNyZWF0ZVF1ZXJ5RVhUKSB7CisgICAgICAgIHJldHVybiB0aW1l
clF1ZXJ5LmNyZWF0ZVF1ZXJ5RVhUKCk7CisgICAgfQorICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1
ZXJ5KCk7Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkVuZ2luZSJdLnByb3RvdHlwZS5fZGVsZXRlVGltZVF1ZXJ5ID0gZnVuY3Rpb24gKHF1ZXJ5KSB7
CisgICAgdmFyIHRpbWVyUXVlcnkgPSB0aGlzLmdldENhcHMoKS50aW1lclF1ZXJ5OworICAgIGlm
ICh0aW1lclF1ZXJ5LmRlbGV0ZVF1ZXJ5RVhUKSB7CisgICAgICAgIHRpbWVyUXVlcnkuZGVsZXRl
UXVlcnlFWFQocXVlcnkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHRoaXMuZGVsZXRl
UXVlcnkocXVlcnkpOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuX2dldFRpbWVRdWVyeVJlc3VsdCA9IGZ1bmN0aW9u
IChxdWVyeSkgeworICAgIHZhciB0aW1lclF1ZXJ5ID0gdGhpcy5nZXRDYXBzKCkudGltZXJRdWVy
eTsKKyAgICBpZiAodGltZXJRdWVyeS5nZXRRdWVyeU9iamVjdEVYVCkgeworICAgICAgICByZXR1
cm4gdGltZXJRdWVyeS5nZXRRdWVyeU9iamVjdEVYVChxdWVyeSwgdGltZXJRdWVyeS5RVUVSWV9S
RVNVTFRfRVhUKTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlSZXN1bHQocXVlcnkp
OworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdp
bmUiXS5wcm90b3R5cGUuX2dldFRpbWVRdWVyeUF2YWlsYWJpbGl0eSA9IGZ1bmN0aW9uIChxdWVy
eSkgeworICAgIHZhciB0aW1lclF1ZXJ5ID0gdGhpcy5nZXRDYXBzKCkudGltZXJRdWVyeTsKKyAg
ICBpZiAodGltZXJRdWVyeS5nZXRRdWVyeU9iamVjdEVYVCkgeworICAgICAgICByZXR1cm4gdGlt
ZXJRdWVyeS5nZXRRdWVyeU9iamVjdEVYVChxdWVyeSwgdGltZXJRdWVyeS5RVUVSWV9SRVNVTFRf
QVZBSUxBQkxFX0VYVCk7CisgICAgfQorICAgIHJldHVybiB0aGlzLmlzUXVlcnlSZXN1bHRBdmFp
bGFibGUocXVlcnkpOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuc3RhcnRUaW1lUXVlcnkgPSBmdW5jdGlvbiAoKSB7
CisgICAgdmFyIGNhcHMgPSB0aGlzLmdldENhcHMoKTsKKyAgICB2YXIgdGltZXJRdWVyeSA9IGNh
cHMudGltZXJRdWVyeTsKKyAgICBpZiAoIXRpbWVyUXVlcnkpIHsKKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfQorICAgIHZhciB0b2tlbiA9IG5ldyBfSW5zdHJ1bWVudGF0aW9uX3RpbWVUb2tl
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfVGltZVRva2VuIl0oKTsKKyAgICB0aGlz
Ll9nbC5nZXRQYXJhbWV0ZXIodGltZXJRdWVyeS5HUFVfRElTSk9JTlRfRVhUKTsKKyAgICBpZiAo
Y2Fwcy5jYW5Vc2VUaW1lc3RhbXBGb3JUaW1lclF1ZXJ5KSB7CisgICAgICAgIHRva2VuLl9zdGFy
dFRpbWVRdWVyeSA9IHRoaXMuX2NyZWF0ZVRpbWVRdWVyeSgpOworICAgICAgICB0aW1lclF1ZXJ5
LnF1ZXJ5Q291bnRlckVYVCh0b2tlbi5fc3RhcnRUaW1lUXVlcnksIHRpbWVyUXVlcnkuVElNRVNU
QU1QX0VYVCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAodGhpcy5fY3VycmVudE5v
blRpbWVzdGFtcFRva2VuKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudE5vblRp
bWVzdGFtcFRva2VuOworICAgICAgICB9CisgICAgICAgIHRva2VuLl90aW1lRWxhcHNlZFF1ZXJ5
ID0gdGhpcy5fY3JlYXRlVGltZVF1ZXJ5KCk7CisgICAgICAgIGlmICh0aW1lclF1ZXJ5LmJlZ2lu
UXVlcnlFWFQpIHsKKyAgICAgICAgICAgIHRpbWVyUXVlcnkuYmVnaW5RdWVyeUVYVCh0aW1lclF1
ZXJ5LlRJTUVfRUxBUFNFRF9FWFQsIHRva2VuLl90aW1lRWxhcHNlZFF1ZXJ5KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmJlZ2luUXVlcnkodGltZXJR
dWVyeS5USU1FX0VMQVBTRURfRVhULCB0b2tlbi5fdGltZUVsYXBzZWRRdWVyeSk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fY3VycmVudE5vblRpbWVzdGFtcFRva2VuID0gdG9rZW47CisgICAg
fQorICAgIHJldHVybiB0b2tlbjsKK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmVuZFRpbWVRdWVyeSA9IGZ1bmN0aW9u
ICh0b2tlbikgeworICAgIHZhciBjYXBzID0gdGhpcy5nZXRDYXBzKCk7CisgICAgdmFyIHRpbWVy
UXVlcnkgPSBjYXBzLnRpbWVyUXVlcnk7CisgICAgaWYgKCF0aW1lclF1ZXJ5IHx8ICF0b2tlbikg
eworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChjYXBzLmNhblVzZVRpbWVzdGFt
cEZvclRpbWVyUXVlcnkpIHsKKyAgICAgICAgaWYgKCF0b2tlbi5fc3RhcnRUaW1lUXVlcnkpIHsK
KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRva2VuLl9l
bmRUaW1lUXVlcnkpIHsKKyAgICAgICAgICAgIHRva2VuLl9lbmRUaW1lUXVlcnkgPSB0aGlzLl9j
cmVhdGVUaW1lUXVlcnkoKTsKKyAgICAgICAgICAgIHRpbWVyUXVlcnkucXVlcnlDb3VudGVyRVhU
KHRva2VuLl9lbmRUaW1lUXVlcnksIHRpbWVyUXVlcnkuVElNRVNUQU1QX0VYVCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAoIXRva2VuLl90aW1lRWxhcHNlZFF1ZXJ5RW5kZWQpIHsK
KyAgICAgICAgaWYgKCF0b2tlbi5fdGltZUVsYXBzZWRRdWVyeSkgeworICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICh0aW1lclF1ZXJ5LmVuZFF1ZXJ5RVhUKSB7
CisgICAgICAgICAgICB0aW1lclF1ZXJ5LmVuZFF1ZXJ5RVhUKHRpbWVyUXVlcnkuVElNRV9FTEFQ
U0VEX0VYVCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9n
bC5lbmRRdWVyeSh0aW1lclF1ZXJ5LlRJTUVfRUxBUFNFRF9FWFQpOworICAgICAgICB9CisgICAg
ICAgIHRva2VuLl90aW1lRWxhcHNlZFF1ZXJ5RW5kZWQgPSB0cnVlOworICAgIH0KKyAgICB2YXIg
ZGlzam9pbnQgPSB0aGlzLl9nbC5nZXRQYXJhbWV0ZXIodGltZXJRdWVyeS5HUFVfRElTSk9JTlRf
RVhUKTsKKyAgICB2YXIgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgaWYgKHRva2VuLl9lbmRUaW1l
UXVlcnkpIHsKKyAgICAgICAgYXZhaWxhYmxlID0gdGhpcy5fZ2V0VGltZVF1ZXJ5QXZhaWxhYmls
aXR5KHRva2VuLl9lbmRUaW1lUXVlcnkpOworICAgIH0KKyAgICBlbHNlIGlmICh0b2tlbi5fdGlt
ZUVsYXBzZWRRdWVyeSkgeworICAgICAgICBhdmFpbGFibGUgPSB0aGlzLl9nZXRUaW1lUXVlcnlB
dmFpbGFiaWxpdHkodG9rZW4uX3RpbWVFbGFwc2VkUXVlcnkpOworICAgIH0KKyAgICBpZiAoYXZh
aWxhYmxlICYmICFkaXNqb2ludCkgeworICAgICAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICAgICAg
aWYgKGNhcHMuY2FuVXNlVGltZXN0YW1wRm9yVGltZXJRdWVyeSkgeworICAgICAgICAgICAgaWYg
KCF0b2tlbi5fc3RhcnRUaW1lUXVlcnkgfHwgIXRva2VuLl9lbmRUaW1lUXVlcnkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgdGlt
ZVN0YXJ0ID0gdGhpcy5fZ2V0VGltZVF1ZXJ5UmVzdWx0KHRva2VuLl9zdGFydFRpbWVRdWVyeSk7
CisgICAgICAgICAgICB2YXIgdGltZUVuZCA9IHRoaXMuX2dldFRpbWVRdWVyeVJlc3VsdCh0b2tl
bi5fZW5kVGltZVF1ZXJ5KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRpbWVFbmQgLSB0aW1lU3Rh
cnQ7CisgICAgICAgICAgICB0aGlzLl9kZWxldGVUaW1lUXVlcnkodG9rZW4uX3N0YXJ0VGltZVF1
ZXJ5KTsKKyAgICAgICAgICAgIHRoaXMuX2RlbGV0ZVRpbWVRdWVyeSh0b2tlbi5fZW5kVGltZVF1
ZXJ5KTsKKyAgICAgICAgICAgIHRva2VuLl9zdGFydFRpbWVRdWVyeSA9IG51bGw7CisgICAgICAg
ICAgICB0b2tlbi5fZW5kVGltZVF1ZXJ5ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGlmICghdG9rZW4uX3RpbWVFbGFwc2VkUXVlcnkpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQgPSB0
aGlzLl9nZXRUaW1lUXVlcnlSZXN1bHQodG9rZW4uX3RpbWVFbGFwc2VkUXVlcnkpOworICAgICAg
ICAgICAgdGhpcy5fZGVsZXRlVGltZVF1ZXJ5KHRva2VuLl90aW1lRWxhcHNlZFF1ZXJ5KTsKKyAg
ICAgICAgICAgIHRva2VuLl90aW1lRWxhcHNlZFF1ZXJ5ID0gbnVsbDsKKyAgICAgICAgICAgIHRv
a2VuLl90aW1lRWxhcHNlZFF1ZXJ5RW5kZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2N1
cnJlbnROb25UaW1lc3RhbXBUb2tlbiA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuX2dldEdsQWxnb3Jp
dGhtVHlwZSA9IGZ1bmN0aW9uIChhbGdvcml0aG1UeXBlKSB7CisgICAgcmV0dXJuIGFsZ29yaXRo
bVR5cGUgPT09IF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkFic3RyYWN0TWVzaCJdLk9DQ0xVU0lPTl9BTEdPUklUSE1fVFlQRV9DT05TRVJWQVRJVkUg
PyB0aGlzLl9nbC5BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFIDogdGhpcy5fZ2wuQU5Z
X1NBTVBMRVNfUEFTU0VEOworfTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShfTWVzaGVzX2Fic3Ry
YWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdE1lc2giXS5wcm90
b3R5cGUsICJpc09jY2x1c2lvblF1ZXJ5SW5Qcm9ncmVzcyIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX29jY2x1c2lvbkRhdGFTdG9yYWdlLmlzT2NjbHVz
aW9uUXVlcnlJblByb2dyZXNzOworICAgIH0sCisgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAg
Y29uZmlndXJhYmxlOiB0cnVlCit9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShfTWVzaGVzX2Fi
c3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdE1lc2giXS5w
cm90b3R5cGUsICJfb2NjbHVzaW9uRGF0YVN0b3JhZ2UiLCB7CisgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICghdGhpcy5fX29jY2x1c2lvbkRhdGFTdG9yYWdlKSB7CisgICAgICAg
ICAgICB0aGlzLl9fb2NjbHVzaW9uRGF0YVN0b3JhZ2UgPSBuZXcgX09jY2x1c2lvbkRhdGFTdG9y
YWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX19vY2NsdXNpb25EYXRhU3Rv
cmFnZTsKKyAgICB9LAorICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoX01lc2hlc19hYnN0cmFjdE1lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJzdHJhY3RNZXNoIl0ucHJvdG90eXBlLCAiaXNP
Y2NsdWRlZCIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X29jY2x1c2lvbkRhdGFTdG9yYWdlLmlzT2NjbHVkZWQ7CisgICAgfSwKKyAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICB0aGlzLl9vY2NsdXNpb25EYXRhU3RvcmFnZS5pc09jY2x1
ZGVkID0gdmFsdWU7CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoX01lc2hlc19hYnN0cmFjdE1l
c2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJzdHJhY3RNZXNoIl0ucHJvdG90eXBl
LCAib2NjbHVzaW9uUXVlcnlBbGdvcml0aG1UeXBlIiwgeworICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5fb2NjbHVzaW9uRGF0YVN0b3JhZ2Uub2NjbHVzaW9uUXVl
cnlBbGdvcml0aG1UeXBlOworICAgIH0sCisgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgdGhpcy5fb2NjbHVzaW9uRGF0YVN0b3JhZ2Uub2NjbHVzaW9uUXVlcnlBbGdvcml0aG1U
eXBlID0gdmFsdWU7CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoX01lc2hlc19hYnN0cmFjdE1l
c2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJzdHJhY3RNZXNoIl0ucHJvdG90eXBl
LCAib2NjbHVzaW9uVHlwZSIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX29jY2x1c2lvbkRhdGFTdG9yYWdlLm9jY2x1c2lvblR5cGU7CisgICAgfSwKKyAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB0aGlzLl9vY2NsdXNpb25EYXRhU3Rv
cmFnZS5vY2NsdXNpb25UeXBlID0gdmFsdWU7CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoX01l
c2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJzdHJhY3RN
ZXNoIl0ucHJvdG90eXBlLCAib2NjbHVzaW9uUmV0cnlDb3VudCIsIHsKKyAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX29jY2x1c2lvbkRhdGFTdG9yYWdlLm9jY2x1
c2lvblJldHJ5Q291bnQ7CisgICAgfSwKKyAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICB0aGlzLl9vY2NsdXNpb25EYXRhU3RvcmFnZS5vY2NsdXNpb25SZXRyeUNvdW50ID0gdmFs
dWU7CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorfSk7CisvLyBXZSBhbHNvIG5lZWQgdG8gdXBkYXRlIEFic3RyYWN0TWVzaCBhcyB0aGVyZSBp
cyBhIHBvcnRpb24gb2YgdGhlIGNvZGUgdGhlcmUKK19NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFic3RyYWN0TWVzaCJdLnByb3RvdHlwZS5fY2hlY2tP
Y2NsdXNpb25RdWVyeSA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgZGF0YVN0b3JhZ2UgPSB0aGlz
Ll9vY2NsdXNpb25EYXRhU3RvcmFnZTsKKyAgICBpZiAoZGF0YVN0b3JhZ2Uub2NjbHVzaW9uVHlw
ZSA9PT0gX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
QWJzdHJhY3RNZXNoIl0uT0NDTFVTSU9OX1RZUEVfTk9ORSkgeworICAgICAgICBkYXRhU3RvcmFn
ZS5pc09jY2x1ZGVkID0gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
dmFyIGVuZ2luZSA9IHRoaXMuZ2V0RW5naW5lKCk7CisgICAgaWYgKGVuZ2luZS53ZWJHTFZlcnNp
b24gPCAyKSB7CisgICAgICAgIGRhdGFTdG9yYWdlLmlzT2NjbHVkZWQgPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIWVuZ2luZS5pc1F1ZXJ5UmVzdWx0QXZh
aWxhYmxlKSB7IC8vIE9jY2x1c2lvbiBxdWVyeSB3aGVyZSBub3QgcmVmZXJlbmNlZAorICAgICAg
ICBkYXRhU3RvcmFnZS5pc09jY2x1ZGVkID0gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKHRoaXMuaXNPY2NsdXNpb25RdWVyeUluUHJvZ3Jlc3MgJiYgdGhpcy5f
b2NjbHVzaW9uUXVlcnkpIHsKKyAgICAgICAgdmFyIGlzT2NjbHVzaW9uUXVlcnlBdmFpbGFibGUg
PSBlbmdpbmUuaXNRdWVyeVJlc3VsdEF2YWlsYWJsZSh0aGlzLl9vY2NsdXNpb25RdWVyeSk7Cisg
ICAgICAgIGlmIChpc09jY2x1c2lvblF1ZXJ5QXZhaWxhYmxlKSB7CisgICAgICAgICAgICB2YXIg
b2NjbHVzaW9uUXVlcnlSZXN1bHQgPSBlbmdpbmUuZ2V0UXVlcnlSZXN1bHQodGhpcy5fb2NjbHVz
aW9uUXVlcnkpOworICAgICAgICAgICAgZGF0YVN0b3JhZ2UuaXNPY2NsdXNpb25RdWVyeUluUHJv
Z3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIGRhdGFTdG9yYWdlLm9jY2x1c2lvbkludGVybmFs
UmV0cnlDb3VudGVyID0gMDsKKyAgICAgICAgICAgIGRhdGFTdG9yYWdlLmlzT2NjbHVkZWQgPSBv
Y2NsdXNpb25RdWVyeVJlc3VsdCA9PT0gMSA/IGZhbHNlIDogdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRhdGFTdG9yYWdlLm9jY2x1c2lvbkludGVybmFsUmV0
cnlDb3VudGVyKys7CisgICAgICAgICAgICBpZiAoZGF0YVN0b3JhZ2Uub2NjbHVzaW9uUmV0cnlD
b3VudCAhPT0gLTEgJiYgZGF0YVN0b3JhZ2Uub2NjbHVzaW9uSW50ZXJuYWxSZXRyeUNvdW50ZXIg
PiBkYXRhU3RvcmFnZS5vY2NsdXNpb25SZXRyeUNvdW50KSB7CisgICAgICAgICAgICAgICAgZGF0
YVN0b3JhZ2UuaXNPY2NsdXNpb25RdWVyeUluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBkYXRhU3RvcmFnZS5vY2NsdXNpb25JbnRlcm5hbFJldHJ5Q291bnRlciA9IDA7CisgICAg
ICAgICAgICAgICAgLy8gaWYgb3B0aW1pc3RpYyBzZXQgaXNPY2NsdWRlZCB0byBmYWxzZSByZWdh
cmRsZXNzIG9mIHRoZSBzdGF0dXMgb2YgaXNPY2NsdWRlZC4gKFJlbmRlciBpbiB0aGUgY3VycmVu
dCByZW5kZXIgbG9vcCkKKyAgICAgICAgICAgICAgICAvLyBpZiBzdHJpY3QgY29udGludWUgdGhl
IGxhc3Qgc3RhdGUgb2YgdGhlIG9iamVjdC4KKyAgICAgICAgICAgICAgICBkYXRhU3RvcmFnZS5p
c09jY2x1ZGVkID0gZGF0YVN0b3JhZ2Uub2NjbHVzaW9uVHlwZSA9PT0gX01lc2hlc19hYnN0cmFj
dE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJzdHJhY3RNZXNoIl0uT0NDTFVT
SU9OX1RZUEVfT1BUSU1JU1RJQyA/IGZhbHNlIDogZGF0YVN0b3JhZ2UuaXNPY2NsdWRlZDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB2YXIgc2NlbmUgPSB0
aGlzLmdldFNjZW5lKCk7CisgICAgaWYgKHNjZW5lLmdldEJvdW5kaW5nQm94UmVuZGVyZXIpIHsK
KyAgICAgICAgdmFyIG9jY2x1c2lvbkJvdW5kaW5nQm94UmVuZGVyZXIgPSBzY2VuZS5nZXRCb3Vu
ZGluZ0JveFJlbmRlcmVyKCk7CisgICAgICAgIGlmICghdGhpcy5fb2NjbHVzaW9uUXVlcnkpIHsK
KyAgICAgICAgICAgIHRoaXMuX29jY2x1c2lvblF1ZXJ5ID0gZW5naW5lLmNyZWF0ZVF1ZXJ5KCk7
CisgICAgICAgIH0KKyAgICAgICAgZW5naW5lLmJlZ2luT2NjbHVzaW9uUXVlcnkoZGF0YVN0b3Jh
Z2Uub2NjbHVzaW9uUXVlcnlBbGdvcml0aG1UeXBlLCB0aGlzLl9vY2NsdXNpb25RdWVyeSk7Cisg
ICAgICAgIG9jY2x1c2lvbkJvdW5kaW5nQm94UmVuZGVyZXIucmVuZGVyT2NjbHVzaW9uQm91bmRp
bmdCb3godGhpcyk7CisgICAgICAgIGVuZ2luZS5lbmRPY2NsdXNpb25RdWVyeShkYXRhU3RvcmFn
ZS5vY2NsdXNpb25RdWVyeUFsZ29yaXRobVR5cGUpOworICAgICAgICB0aGlzLl9vY2NsdXNpb25E
YXRhU3RvcmFnZS5pc09jY2x1c2lvblF1ZXJ5SW5Qcm9ncmVzcyA9IHRydWU7CisgICAgfQorICAg
IHJldHVybiBkYXRhU3RvcmFnZS5pc09jY2x1ZGVkOworfTsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vRW5naW5lcy9FeHRlbnNpb25zL2VuZ2luZS5yYXdUZXh0dXJlLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUucmF3VGV4dHVyZS50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIG5vIGV4cG9y
dHMgcHJvdmlkZWQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVy
bmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZSAqLyAiLi9N
YXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJuYWxUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3Rvb2xz
ICovICIuL01pc2MvdG9vbHMudHMiKTsKKworCisKKworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS51cGRhdGVSYXdUZXh0dXJl
ID0gZnVuY3Rpb24gKHRleHR1cmUsIGRhdGEsIGZvcm1hdCwgaW52ZXJ0WSwgY29tcHJlc3Npb24s
IHR5cGUpIHsKKyAgICBpZiAoY29tcHJlc3Npb24gPT09IHZvaWQgMCkgeyBjb21wcmVzc2lvbiA9
IG51bGw7IH0KKyAgICBpZiAodHlwZSA9PT0gdm9pZCAwKSB7IHR5cGUgPSBfRW5naW5lc19lbmdp
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVfVU5T
SUdORURfSU5UOyB9CisgICAgaWYgKCF0ZXh0dXJlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgLy8gQmFieWxvbidzIGludGVybmFsU2l6ZWRGb21hdCBidXQgZ2wncyB0ZXhJbWFnZTJE
IGludGVybmFsRm9ybWF0CisgICAgdmFyIGludGVybmFsU2l6ZWRGb21hdCA9IHRoaXMuX2dldFJH
QkFCdWZmZXJJbnRlcm5hbFNpemVkRm9ybWF0KHR5cGUsIGZvcm1hdCk7CisgICAgLy8gQmFieWxv
bidzIGludGVybmFsRm9ybWF0IGJ1dCBnbCdzIHRleEltYWdlMkQgZm9ybWF0CisgICAgdmFyIGlu
dGVybmFsRm9ybWF0ID0gdGhpcy5fZ2V0SW50ZXJuYWxGb3JtYXQoZm9ybWF0KTsKKyAgICB2YXIg
dGV4dHVyZVR5cGUgPSB0aGlzLl9nZXRXZWJHTFRleHR1cmVUeXBlKHR5cGUpOworICAgIHRoaXMu
X2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSwgdHJ1ZSk7
CisgICAgdGhpcy5fdW5wYWNrRmxpcFkoaW52ZXJ0WSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IChp
bnZlcnRZID8gdHJ1ZSA6IGZhbHNlKSk7CisgICAgaWYgKCF0aGlzLl9kb05vdEhhbmRsZUNvbnRl
eHRMb3N0KSB7CisgICAgICAgIHRleHR1cmUuX2J1ZmZlclZpZXcgPSBkYXRhOworICAgICAgICB0
ZXh0dXJlLmZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgdGV4dHVyZS50eXBlID0gdHlwZTsKKyAg
ICAgICAgdGV4dHVyZS5pbnZlcnRZID0gaW52ZXJ0WTsKKyAgICAgICAgdGV4dHVyZS5fY29tcHJl
c3Npb24gPSBjb21wcmVzc2lvbjsKKyAgICB9CisgICAgaWYgKHRleHR1cmUud2lkdGggJSA0ICE9
PSAwKSB7CisgICAgICAgIHRoaXMuX2dsLnBpeGVsU3RvcmVpKHRoaXMuX2dsLlVOUEFDS19BTElH
Tk1FTlQsIDEpOworICAgIH0KKyAgICBpZiAoY29tcHJlc3Npb24gJiYgZGF0YSkgeworICAgICAg
ICB0aGlzLl9nbC5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0aGlzLl9nbC5URVhUVVJFXzJELCAwLCB0
aGlzLmdldENhcHMoKS5zM3RjW2NvbXByZXNzaW9uXSwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5o
ZWlnaHQsIDAsIGRhdGEpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgdGhpcy5fZ2wudGV4
SW1hZ2UyRCh0aGlzLl9nbC5URVhUVVJFXzJELCAwLCBpbnRlcm5hbFNpemVkRm9tYXQsIHRleHR1
cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LCAwLCBpbnRlcm5hbEZvcm1hdCwgdGV4dHVyZVR5cGUs
IGRhdGEpOworICAgIH0KKyAgICBpZiAodGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAg
ICAgdGhpcy5fZ2wuZ2VuZXJhdGVNaXBtYXAodGhpcy5fZ2wuVEVYVFVSRV8yRCk7CisgICAgfQor
ICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVYVFVSRV8yRCwgbnVsbCk7
CisgICAgLy8gIHRoaXMucmVzZXRUZXh0dXJlQ2FjaGUoKTsKKyAgICB0ZXh0dXJlLmlzUmVhZHkg
PSB0cnVlOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJFbmdpbmUiXS5wcm90b3R5cGUuY3JlYXRlUmF3VGV4dHVyZSA9IGZ1bmN0aW9uIChkYXRhLCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2FtcGxpbmdN
b2RlLCBjb21wcmVzc2lvbiwgdHlwZSkgeworICAgIGlmIChjb21wcmVzc2lvbiA9PT0gdm9pZCAw
KSB7IGNvbXByZXNzaW9uID0gbnVsbDsgfQorICAgIGlmICh0eXBlID09PSB2b2lkIDApIHsgdHlw
ZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUi
XS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7IH0KKyAgICB2YXIgdGV4dHVyZSA9IG5ldyBfTWF0
ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJJbnRlcm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFs
VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnRlcm5hbFRleHR1cmUiXS5E
QVRBU09VUkNFX1JBVyk7CisgICAgdGV4dHVyZS5iYXNlV2lkdGggPSB3aWR0aDsKKyAgICB0ZXh0
dXJlLmJhc2VIZWlnaHQgPSBoZWlnaHQ7CisgICAgdGV4dHVyZS53aWR0aCA9IHdpZHRoOworICAg
IHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0OworICAgIHRleHR1cmUuZm9ybWF0ID0gZm9ybWF0Owor
ICAgIHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzID0gZ2VuZXJhdGVNaXBNYXBzOworICAgIHRleHR1
cmUuc2FtcGxpbmdNb2RlID0gc2FtcGxpbmdNb2RlOworICAgIHRleHR1cmUuaW52ZXJ0WSA9IGlu
dmVydFk7CisgICAgdGV4dHVyZS5fY29tcHJlc3Npb24gPSBjb21wcmVzc2lvbjsKKyAgICB0ZXh0
dXJlLnR5cGUgPSB0eXBlOworICAgIGlmICghdGhpcy5fZG9Ob3RIYW5kbGVDb250ZXh0TG9zdCkg
eworICAgICAgICB0ZXh0dXJlLl9idWZmZXJWaWV3ID0gZGF0YTsKKyAgICB9CisgICAgdGhpcy51
cGRhdGVSYXdUZXh0dXJlKHRleHR1cmUsIGRhdGEsIGZvcm1hdCwgaW52ZXJ0WSwgY29tcHJlc3Np
b24sIHR5cGUpOworICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVYVFVS
RV8yRCwgdGV4dHVyZSwgdHJ1ZSk7CisgICAgLy8gRmlsdGVycworICAgIHZhciBmaWx0ZXJzID0g
dGhpcy5fZ2V0U2FtcGxpbmdQYXJhbWV0ZXJzKHNhbXBsaW5nTW9kZSwgZ2VuZXJhdGVNaXBNYXBz
KTsKKyAgICB0aGlzLl9nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRoaXMu
X2dsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVycy5tYWcpOworICAgIHRoaXMuX2dsLnRleFBh
cmFtZXRlcmkodGhpcy5fZ2wuVEVYVFVSRV8yRCwgdGhpcy5fZ2wuVEVYVFVSRV9NSU5fRklMVEVS
LCBmaWx0ZXJzLm1pbik7CisgICAgaWYgKGdlbmVyYXRlTWlwTWFwcykgeworICAgICAgICB0aGlz
Ll9nbC5nZW5lcmF0ZU1pcG1hcCh0aGlzLl9nbC5URVhUVVJFXzJEKTsKKyAgICB9CisgICAgdGhp
cy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzJELCBudWxsKTsKKyAgICB0
aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2FjaGUucHVzaCh0ZXh0dXJlKTsKKyAgICByZXR1cm4gdGV4
dHVyZTsKK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RW5naW5lIl0ucHJvdG90eXBlLmNyZWF0ZVJhd0N1YmVUZXh0dXJlID0gZnVuY3Rpb24gKGRhdGEs
IHNpemUsIGZvcm1hdCwgdHlwZSwgZ2VuZXJhdGVNaXBNYXBzLCBpbnZlcnRZLCBzYW1wbGluZ01v
ZGUsIGNvbXByZXNzaW9uKSB7CisgICAgaWYgKGNvbXByZXNzaW9uID09PSB2b2lkIDApIHsgY29t
cHJlc3Npb24gPSBudWxsOyB9CisgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgdmFyIHRleHR1
cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siSW50ZXJuYWxUZXh0dXJlIl0odGhpcywgX01hdGVyaWFsc19UZXh0
dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siSW50ZXJu
YWxUZXh0dXJlIl0uREFUQVNPVVJDRV9DVUJFUkFXKTsKKyAgICB0ZXh0dXJlLmlzQ3ViZSA9IHRy
dWU7CisgICAgdGV4dHVyZS5mb3JtYXQgPSBmb3JtYXQ7CisgICAgdGV4dHVyZS50eXBlID0gdHlw
ZTsKKyAgICBpZiAoIXRoaXMuX2RvTm90SGFuZGxlQ29udGV4dExvc3QpIHsKKyAgICAgICAgdGV4
dHVyZS5fYnVmZmVyVmlld0FycmF5ID0gZGF0YTsKKyAgICB9CisgICAgdmFyIHRleHR1cmVUeXBl
ID0gdGhpcy5fZ2V0V2ViR0xUZXh0dXJlVHlwZSh0eXBlKTsKKyAgICB2YXIgaW50ZXJuYWxGb3Jt
YXQgPSB0aGlzLl9nZXRJbnRlcm5hbEZvcm1hdChmb3JtYXQpOworICAgIGlmIChpbnRlcm5hbEZv
cm1hdCA9PT0gZ2wuUkdCKSB7CisgICAgICAgIGludGVybmFsRm9ybWF0ID0gZ2wuUkdCQTsKKyAg
ICB9CisgICAgLy8gTWlwbWFwIGdlbmVyYXRpb24gbmVlZHMgYSBzaXplZCBpbnRlcm5hbCBmb3Jt
YXQgdGhhdCBpcyBib3RoIGNvbG9yLXJlbmRlcmFibGUgYW5kIHRleHR1cmUtZmlsdGVyYWJsZQor
ICAgIGlmICh0ZXh0dXJlVHlwZSA9PT0gZ2wuRkxPQVQgJiYgIXRoaXMuX2NhcHMudGV4dHVyZUZs
b2F0TGluZWFyRmlsdGVyaW5nKSB7CisgICAgICAgIGdlbmVyYXRlTWlwTWFwcyA9IGZhbHNlOwor
ICAgICAgICBzYW1wbGluZ01vZGUgPSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5HTU9ERTsKKyAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkxvZ2dlciJdLldh
cm4oIkZsb2F0IHRleHR1cmUgZmlsdGVyaW5nIGlzIG5vdCBzdXBwb3J0ZWQuIE1pcG1hcCBnZW5l
cmF0aW9uIGFuZCBzYW1wbGluZyBtb2RlIGFyZSBmb3JjZWQgdG8gZmFsc2UgYW5kIFRFWFRVUkVf
TkVBUkVTVF9TQU1QTElOR01PREUsIHJlc3BlY3RpdmVseS4iKTsKKyAgICB9CisgICAgZWxzZSBp
ZiAodGV4dHVyZVR5cGUgPT09IHRoaXMuX2dsLkhBTEZfRkxPQVRfT0VTICYmICF0aGlzLl9jYXBz
LnRleHR1cmVIYWxmRmxvYXRMaW5lYXJGaWx0ZXJpbmcpIHsKKyAgICAgICAgZ2VuZXJhdGVNaXBN
YXBzID0gZmFsc2U7CisgICAgICAgIHNhbXBsaW5nTW9kZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5URVhUVVJFX05FQVJFU1RfU0FNUExJ
TkdNT0RFOworICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTG9nZ2VyIl0uV2FybigiSGFsZiBmbG9hdCB0ZXh0dXJlIGZpbHRlcmluZyBpcyBub3Qgc3Vw
cG9ydGVkLiBNaXBtYXAgZ2VuZXJhdGlvbiBhbmQgc2FtcGxpbmcgbW9kZSBhcmUgZm9yY2VkIHRv
IGZhbHNlIGFuZCBURVhUVVJFX05FQVJFU1RfU0FNUExJTkdNT0RFLCByZXNwZWN0aXZlbHkuIik7
CisgICAgfQorICAgIGVsc2UgaWYgKHRleHR1cmVUeXBlID09PSBnbC5GTE9BVCAmJiAhdGhpcy5f
Y2Fwcy50ZXh0dXJlRmxvYXRSZW5kZXIpIHsKKyAgICAgICAgZ2VuZXJhdGVNaXBNYXBzID0gZmFs
c2U7CisgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJM
b2dnZXIiXS5XYXJuKCJSZW5kZXIgdG8gZmxvYXQgdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZC4g
TWlwbWFwIGdlbmVyYXRpb24gZm9yY2VkIHRvIGZhbHNlLiIpOworICAgIH0KKyAgICBlbHNlIGlm
ICh0ZXh0dXJlVHlwZSA9PT0gZ2wuSEFMRl9GTE9BVCAmJiAhdGhpcy5fY2Fwcy5jb2xvckJ1ZmZl
ckZsb2F0KSB7CisgICAgICAgIGdlbmVyYXRlTWlwTWFwcyA9IGZhbHNlOworICAgICAgICBfTWlz
Y19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTG9nZ2VyIl0uV2FybigiUmVu
ZGVyIHRvIGhhbGYgZmxvYXQgdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZC4gTWlwbWFwIGdlbmVy
YXRpb24gZm9yY2VkIHRvIGZhbHNlLiIpOworICAgIH0KKyAgICB2YXIgd2lkdGggPSBzaXplOwor
ICAgIHZhciBoZWlnaHQgPSB3aWR0aDsKKyAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7CisgICAg
dGV4dHVyZS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgLy8gRG91YmxlIGNoZWNrIG9uIFBPVCB0byBn
ZW5lcmF0ZSBNaXBzLgorICAgIHZhciBpc1BvdCA9ICF0aGlzLm5lZWRQT1RUZXh0dXJlcyB8fCAo
X01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG9vbHMiXS5Jc0V4cG9u
ZW50T2ZUd28odGV4dHVyZS53aWR0aCkgJiYgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVG9vbHMiXS5Jc0V4cG9uZW50T2ZUd28odGV4dHVyZS5oZWlnaHQpKTsKKyAg
ICBpZiAoIWlzUG90KSB7CisgICAgICAgIGdlbmVyYXRlTWlwTWFwcyA9IGZhbHNlOworICAgIH0K
KyAgICAvLyBVcGxvYWQgZGF0YSBpZiBuZWVkZWQuIFRoZSB0ZXh0dXJlIHdvbid0IGJlIHJlYWR5
IHVudGlsIHRoZW4uCisgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgdGhpcy51cGRhdGVSYXdDdWJl
VGV4dHVyZSh0ZXh0dXJlLCBkYXRhLCBmb3JtYXQsIHR5cGUsIGludmVydFksIGNvbXByZXNzaW9u
KTsKKyAgICB9CisgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJF
X0NVQkVfTUFQLCB0ZXh0dXJlLCB0cnVlKTsKKyAgICAvLyBGaWx0ZXJzCisgICAgaWYgKGRhdGEg
JiYgZ2VuZXJhdGVNaXBNYXBzKSB7CisgICAgICAgIHRoaXMuX2dsLmdlbmVyYXRlTWlwbWFwKHRo
aXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVApOworICAgIH0KKyAgICB2YXIgZmlsdGVycyA9IHRoaXMu
X2dldFNhbXBsaW5nUGFyYW1ldGVycyhzYW1wbGluZ01vZGUsIGdlbmVyYXRlTWlwTWFwcyk7Cisg
ICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFX0NVQkVfTUFQLCBnbC5URVhUVVJFX01BR19G
SUxURVIsIGZpbHRlcnMubWFnKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfQ1VC
RV9NQVAsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZmlsdGVycy5taW4pOworICAgIGdsLnRleFBh
cmFtZXRlcmkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1Q
X1RPX0VER0UpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wu
VEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpOworICAgIHRoaXMuX2JpbmRUZXh0dXJl
RGlyZWN0bHkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7CisgICAgdGV4dHVyZS5nZW5lcmF0
ZU1pcE1hcHMgPSBnZW5lcmF0ZU1pcE1hcHM7CisgICAgcmV0dXJuIHRleHR1cmU7Cit9OworX0Vu
Z2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3Rv
dHlwZS51cGRhdGVSYXdDdWJlVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBkYXRhLCBmb3Jt
YXQsIHR5cGUsIGludmVydFksIGNvbXByZXNzaW9uLCBsZXZlbCkgeworICAgIGlmIChjb21wcmVz
c2lvbiA9PT0gdm9pZCAwKSB7IGNvbXByZXNzaW9uID0gbnVsbDsgfQorICAgIGlmIChsZXZlbCA9
PT0gdm9pZCAwKSB7IGxldmVsID0gMDsgfQorICAgIHRleHR1cmUuX2J1ZmZlclZpZXdBcnJheSA9
IGRhdGE7CisgICAgdGV4dHVyZS5mb3JtYXQgPSBmb3JtYXQ7CisgICAgdGV4dHVyZS50eXBlID0g
dHlwZTsKKyAgICB0ZXh0dXJlLmludmVydFkgPSBpbnZlcnRZOworICAgIHRleHR1cmUuX2NvbXBy
ZXNzaW9uID0gY29tcHJlc3Npb247CisgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgdmFyIHRl
eHR1cmVUeXBlID0gdGhpcy5fZ2V0V2ViR0xUZXh0dXJlVHlwZSh0eXBlKTsKKyAgICB2YXIgaW50
ZXJuYWxGb3JtYXQgPSB0aGlzLl9nZXRJbnRlcm5hbEZvcm1hdChmb3JtYXQpOworICAgIHZhciBp
bnRlcm5hbFNpemVkRm9tYXQgPSB0aGlzLl9nZXRSR0JBQnVmZmVySW50ZXJuYWxTaXplZEZvcm1h
dCh0eXBlKTsKKyAgICB2YXIgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBpZiAoaW50ZXJu
YWxGb3JtYXQgPT09IGdsLlJHQikgeworICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IGdsLlJHQkE7
CisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICB9CisgICAgdGhpcy5fYmluZFRl
eHR1cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlLCB0cnVlKTsKKyAgICB0
aGlzLl91bnBhY2tGbGlwWShpbnZlcnRZID09PSB1bmRlZmluZWQgPyB0cnVlIDogKGludmVydFkg
PyB0cnVlIDogZmFsc2UpKTsKKyAgICBpZiAodGV4dHVyZS53aWR0aCAlIDQgIT09IDApIHsKKyAg
ICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgfQorICAg
IC8vIERhdGEgYXJlIGtub3duIHRvIGJlIGluICtYICtZICtaIC1YIC1ZIC1aCisgICAgZm9yICh2
YXIgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspIHsKKyAgICAgICAg
dmFyIGZhY2VEYXRhID0gZGF0YVtmYWNlSW5kZXhdOworICAgICAgICBpZiAoY29tcHJlc3Npb24p
IHsKKyAgICAgICAgICAgIGdsLmNvbXByZXNzZWRUZXhJbWFnZTJEKGdsLlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCArIGZhY2VJbmRleCwgbGV2ZWwsICh0aGlzLmdldENhcHMoKS5zM3RjKVtj
b21wcmVzc2lvbl0sIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LCAwLCBmYWNlRGF0YSk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAobmVlZENvbnZlcnNp
b24pIHsKKyAgICAgICAgICAgICAgICBmYWNlRGF0YSA9IHRoaXMuX2NvbnZlcnRSR0J0b1JHQkFU
ZXh0dXJlRGF0YShmYWNlRGF0YSwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsIHR5cGUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlSW5kZXgsIGxldmVsLCBpbnRlcm5hbFNpemVkRm9tYXQs
IHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LCAwLCBpbnRlcm5hbEZvcm1hdCwgdGV4dHVy
ZVR5cGUsIGZhY2VEYXRhKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2YXIgaXNQb3QgPSAhdGhp
cy5uZWVkUE9UVGV4dHVyZXMgfHwgKF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlRvb2xzIl0uSXNFeHBvbmVudE9mVHdvKHRleHR1cmUud2lkdGgpICYmIF9NaXNjX3Rv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRvb2xzIl0uSXNFeHBvbmVudE9mVHdv
KHRleHR1cmUuaGVpZ2h0KSk7CisgICAgaWYgKGlzUG90ICYmIHRleHR1cmUuZ2VuZXJhdGVNaXBN
YXBzICYmIGxldmVsID09PSAwKSB7CisgICAgICAgIHRoaXMuX2dsLmdlbmVyYXRlTWlwbWFwKHRo
aXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVApOworICAgIH0KKyAgICB0aGlzLl9iaW5kVGV4dHVyZURp
cmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpOworICAgIC8vIHRoaXMucmVz
ZXRUZXh0dXJlQ2FjaGUoKTsKKyAgICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworfTsKK19Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5
cGUuY3JlYXRlUmF3Q3ViZVRleHR1cmVGcm9tVXJsID0gZnVuY3Rpb24gKHVybCwgc2NlbmUsIHNp
emUsIGZvcm1hdCwgdHlwZSwgbm9NaXBtYXAsIGNhbGxiYWNrLCBtaXBtYXBHZW5lcmF0b3IsIG9u
TG9hZCwgb25FcnJvciwgc2FtcGxpbmdNb2RlLCBpbnZlcnRZKSB7CisgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICBpZiAob25Mb2FkID09PSB2b2lkIDApIHsgb25Mb2FkID0gbnVsbDsgfQorICAg
IGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG51bGw7IH0KKyAgICBpZiAoc2Ft
cGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gX0VuZ2luZXNfZW5naW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLlRFWFRVUkVfVFJJTElORUFSX1NB
TVBMSU5HTU9ERTsgfQorICAgIGlmIChpbnZlcnRZID09PSB2b2lkIDApIHsgaW52ZXJ0WSA9IGZh
bHNlOyB9CisgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgdmFyIHRleHR1cmUgPSB0aGlzLmNy
ZWF0ZVJhd0N1YmVUZXh0dXJlKG51bGwsIHNpemUsIGZvcm1hdCwgdHlwZSwgIW5vTWlwbWFwLCBp
bnZlcnRZLCBzYW1wbGluZ01vZGUpOworICAgIHNjZW5lLl9hZGRQZW5kaW5nRGF0YSh0ZXh0dXJl
KTsKKyAgICB0ZXh0dXJlLnVybCA9IHVybDsKKyAgICB0aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2Fj
aGUucHVzaCh0ZXh0dXJlKTsKKyAgICB2YXIgb25lcnJvciA9IGZ1bmN0aW9uIChyZXF1ZXN0LCBl
eGNlcHRpb24pIHsKKyAgICAgICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKHRleHR1cmUpOwor
ICAgICAgICBpZiAob25FcnJvciAmJiByZXF1ZXN0KSB7CisgICAgICAgICAgICBvbkVycm9yKHJl
cXVlc3Quc3RhdHVzICsgIiAiICsgcmVxdWVzdC5zdGF0dXNUZXh0LCBleGNlcHRpb24pOworICAg
ICAgICB9CisgICAgfTsKKyAgICB2YXIgaW50ZXJuYWxDYWxsYmFjayA9IGZ1bmN0aW9uIChkYXRh
KSB7CisgICAgICAgIHZhciB3aWR0aCA9IHRleHR1cmUud2lkdGg7CisgICAgICAgIHZhciBmYWNl
RGF0YUFycmF5cyA9IGNhbGxiYWNrKGRhdGEpOworICAgICAgICBpZiAoIWZhY2VEYXRhQXJyYXlz
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1pcG1hcEdl
bmVyYXRvcikgeworICAgICAgICAgICAgdmFyIHRleHR1cmVUeXBlID0gX3RoaXMuX2dldFdlYkdM
VGV4dHVyZVR5cGUodHlwZSk7CisgICAgICAgICAgICB2YXIgaW50ZXJuYWxGb3JtYXQgPSBfdGhp
cy5fZ2V0SW50ZXJuYWxGb3JtYXQoZm9ybWF0KTsKKyAgICAgICAgICAgIHZhciBpbnRlcm5hbFNp
emVkRm9tYXQgPSBfdGhpcy5fZ2V0UkdCQUJ1ZmZlckludGVybmFsU2l6ZWRGb3JtYXQodHlwZSk7
CisgICAgICAgICAgICB2YXIgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGlm
IChpbnRlcm5hbEZvcm1hdCA9PT0gZ2wuUkdCKSB7CisgICAgICAgICAgICAgICAgaW50ZXJuYWxG
b3JtYXQgPSBnbC5SR0JBOworICAgICAgICAgICAgICAgIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGds
LlRFWFRVUkVfQ1VCRV9NQVAsIHRleHR1cmUsIHRydWUpOworICAgICAgICAgICAgX3RoaXMuX3Vu
cGFja0ZsaXBZKGZhbHNlKTsKKyAgICAgICAgICAgIHZhciBtaXBEYXRhID0gbWlwbWFwR2VuZXJh
dG9yKGZhY2VEYXRhQXJyYXlzKTsKKyAgICAgICAgICAgIGZvciAodmFyIGxldmVsID0gMDsgbGV2
ZWwgPCBtaXBEYXRhLmxlbmd0aDsgbGV2ZWwrKykgeworICAgICAgICAgICAgICAgIHZhciBtaXBT
aXplID0gd2lkdGggPj4gbGV2ZWw7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgZmFjZUluZGV4
ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIG1pcEZhY2VEYXRhID0gbWlwRGF0YVtsZXZlbF1bZmFjZUluZGV4XTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5lZWRDb252ZXJzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
aXBGYWNlRGF0YSA9IF90aGlzLl9jb252ZXJ0UkdCdG9SR0JBVGV4dHVyZURhdGEobWlwRmFjZURh
dGEsIG1pcFNpemUsIG1pcFNpemUsIHR5cGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZmFjZUluZGV4LCBsZXZlbCwgaW50ZXJuYWxT
aXplZEZvbWF0LCBtaXBTaXplLCBtaXBTaXplLCAwLCBpbnRlcm5hbEZvcm1hdCwgdGV4dHVyZVR5
cGUsIG1pcEZhY2VEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBfdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQLCBu
dWxsKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF90aGlzLnVwZGF0
ZVJhd0N1YmVUZXh0dXJlKHRleHR1cmUsIGZhY2VEYXRhQXJyYXlzLCBmb3JtYXQsIHR5cGUsIGlu
dmVydFkpOworICAgICAgICB9CisgICAgICAgIHRleHR1cmUuaXNSZWFkeSA9IHRydWU7CisgICAg
ICAgIC8vIHRoaXMucmVzZXRUZXh0dXJlQ2FjaGUoKTsKKyAgICAgICAgc2NlbmUuX3JlbW92ZVBl
bmRpbmdEYXRhKHRleHR1cmUpOworICAgICAgICBpZiAob25Mb2FkKSB7CisgICAgICAgICAgICBv
bkxvYWQoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5fbG9hZEZpbGUodXJsLCBmdW5j
dGlvbiAoZGF0YSkgeworICAgICAgICBpbnRlcm5hbENhbGxiYWNrKGRhdGEpOworICAgIH0sIHVu
ZGVmaW5lZCwgc2NlbmUub2ZmbGluZVByb3ZpZGVyLCB0cnVlLCBvbmVycm9yKTsKKyAgICByZXR1
cm4gdGV4dHVyZTsKK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmNyZWF0ZVJhd1RleHR1cmUzRCA9IGZ1bmN0aW9uIChk
YXRhLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBnZW5lcmF0ZU1pcE1hcHMsIGludmVy
dFksIHNhbXBsaW5nTW9kZSwgY29tcHJlc3Npb24sIHRleHR1cmVUeXBlKSB7CisgICAgaWYgKGNv
bXByZXNzaW9uID09PSB2b2lkIDApIHsgY29tcHJlc3Npb24gPSBudWxsOyB9CisgICAgaWYgKHRl
eHR1cmVUeXBlID09PSB2b2lkIDApIHsgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVfVU5TSUdORURf
SU5UOyB9CisgICAgdmFyIHRleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5h
bFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siSW50ZXJuYWxUZXh0dXJlIl0o
dGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9SQVczRCk7CisgICAg
dGV4dHVyZS5iYXNlV2lkdGggPSB3aWR0aDsKKyAgICB0ZXh0dXJlLmJhc2VIZWlnaHQgPSBoZWln
aHQ7CisgICAgdGV4dHVyZS5iYXNlRGVwdGggPSBkZXB0aDsKKyAgICB0ZXh0dXJlLndpZHRoID0g
d2lkdGg7CisgICAgdGV4dHVyZS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgdGV4dHVyZS5kZXB0aCA9
IGRlcHRoOworICAgIHRleHR1cmUuZm9ybWF0ID0gZm9ybWF0OworICAgIHRleHR1cmUudHlwZSA9
IHRleHR1cmVUeXBlOworICAgIHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzID0gZ2VuZXJhdGVNaXBN
YXBzOworICAgIHRleHR1cmUuc2FtcGxpbmdNb2RlID0gc2FtcGxpbmdNb2RlOworICAgIHRleHR1
cmUuaXMzRCA9IHRydWU7CisgICAgaWYgKCF0aGlzLl9kb05vdEhhbmRsZUNvbnRleHRMb3N0KSB7
CisgICAgICAgIHRleHR1cmUuX2J1ZmZlclZpZXcgPSBkYXRhOworICAgIH0KKyAgICB0aGlzLnVw
ZGF0ZVJhd1RleHR1cmUzRCh0ZXh0dXJlLCBkYXRhLCBmb3JtYXQsIGludmVydFksIGNvbXByZXNz
aW9uLCB0ZXh0dXJlVHlwZSk7CisgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlzLl9n
bC5URVhUVVJFXzNELCB0ZXh0dXJlLCB0cnVlKTsKKyAgICAvLyBGaWx0ZXJzCisgICAgdmFyIGZp
bHRlcnMgPSB0aGlzLl9nZXRTYW1wbGluZ1BhcmFtZXRlcnMoc2FtcGxpbmdNb2RlLCBnZW5lcmF0
ZU1pcE1hcHMpOworICAgIHRoaXMuX2dsLnRleFBhcmFtZXRlcmkodGhpcy5fZ2wuVEVYVFVSRV8z
RCwgdGhpcy5fZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXJzLm1hZyk7CisgICAgdGhpcy5f
Z2wudGV4UGFyYW1ldGVyaSh0aGlzLl9nbC5URVhUVVJFXzNELCB0aGlzLl9nbC5URVhUVVJFX01J
Tl9GSUxURVIsIGZpbHRlcnMubWluKTsKKyAgICBpZiAoZ2VuZXJhdGVNaXBNYXBzKSB7CisgICAg
ICAgIHRoaXMuX2dsLmdlbmVyYXRlTWlwbWFwKHRoaXMuX2dsLlRFWFRVUkVfM0QpOworICAgIH0K
KyAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfM0QsIG51bGwp
OworICAgIHRoaXMuX2ludGVybmFsVGV4dHVyZXNDYWNoZS5wdXNoKHRleHR1cmUpOworICAgIHJl
dHVybiB0ZXh0dXJlOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUudXBkYXRlUmF3VGV4dHVyZTNEID0gZnVuY3Rpb24g
KHRleHR1cmUsIGRhdGEsIGZvcm1hdCwgaW52ZXJ0WSwgY29tcHJlc3Npb24sIHRleHR1cmVUeXBl
KSB7CisgICAgaWYgKGNvbXByZXNzaW9uID09PSB2b2lkIDApIHsgY29tcHJlc3Npb24gPSBudWxs
OyB9CisgICAgaWYgKHRleHR1cmVUeXBlID09PSB2b2lkIDApIHsgdGV4dHVyZVR5cGUgPSBfRW5n
aW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVS
RVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgdmFyIGludGVybmFsVHlwZSA9IHRoaXMuX2dldFdl
YkdMVGV4dHVyZVR5cGUodGV4dHVyZVR5cGUpOworICAgIHZhciBpbnRlcm5hbEZvcm1hdCA9IHRo
aXMuX2dldEludGVybmFsRm9ybWF0KGZvcm1hdCk7CisgICAgdmFyIGludGVybmFsU2l6ZWRGb21h
dCA9IHRoaXMuX2dldFJHQkFCdWZmZXJJbnRlcm5hbFNpemVkRm9ybWF0KHRleHR1cmVUeXBlLCBm
b3JtYXQpOworICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVYVFVSRV8z
RCwgdGV4dHVyZSwgdHJ1ZSk7CisgICAgdGhpcy5fdW5wYWNrRmxpcFkoaW52ZXJ0WSA9PT0gdW5k
ZWZpbmVkID8gdHJ1ZSA6IChpbnZlcnRZID8gdHJ1ZSA6IGZhbHNlKSk7CisgICAgaWYgKCF0aGlz
Ll9kb05vdEhhbmRsZUNvbnRleHRMb3N0KSB7CisgICAgICAgIHRleHR1cmUuX2J1ZmZlclZpZXcg
PSBkYXRhOworICAgICAgICB0ZXh0dXJlLmZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgdGV4dHVy
ZS5pbnZlcnRZID0gaW52ZXJ0WTsKKyAgICAgICAgdGV4dHVyZS5fY29tcHJlc3Npb24gPSBjb21w
cmVzc2lvbjsKKyAgICB9CisgICAgaWYgKHRleHR1cmUud2lkdGggJSA0ICE9PSAwKSB7CisgICAg
ICAgIHRoaXMuX2dsLnBpeGVsU3RvcmVpKHRoaXMuX2dsLlVOUEFDS19BTElHTk1FTlQsIDEpOwor
ICAgIH0KKyAgICBpZiAoY29tcHJlc3Npb24gJiYgZGF0YSkgeworICAgICAgICB0aGlzLl9nbC5j
b21wcmVzc2VkVGV4SW1hZ2UzRCh0aGlzLl9nbC5URVhUVVJFXzNELCAwLCB0aGlzLmdldENhcHMo
KS5zM3RjW2NvbXByZXNzaW9uXSwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsIHRleHR1
cmUuZGVwdGgsIDAsIGRhdGEpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgdGhpcy5fZ2wu
dGV4SW1hZ2UzRCh0aGlzLl9nbC5URVhUVVJFXzNELCAwLCBpbnRlcm5hbFNpemVkRm9tYXQsIHRl
eHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LCB0ZXh0dXJlLmRlcHRoLCAwLCBpbnRlcm5hbEZv
cm1hdCwgaW50ZXJuYWxUeXBlLCBkYXRhKTsKKyAgICB9CisgICAgaWYgKHRleHR1cmUuZ2VuZXJh
dGVNaXBNYXBzKSB7CisgICAgICAgIHRoaXMuX2dsLmdlbmVyYXRlTWlwbWFwKHRoaXMuX2dsLlRF
WFRVUkVfM0QpOworICAgIH0KKyAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2ds
LlRFWFRVUkVfM0QsIG51bGwpOworICAgIC8vIHRoaXMucmVzZXRUZXh0dXJlQ2FjaGUoKTsKKyAg
ICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
RW5naW5lcy9FeHRlbnNpb25zL2VuZ2luZS5yZW5kZXJUYXJnZXQudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9F
bmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLnJlbmRlclRhcmdldC50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgbm8gZXhw
b3J0cyBwcm92aWRlZCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL2VuZ2lu
ZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRlcmlhbHNfVGV4dHVyZXNfaW50ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMv
aW50ZXJuYWxUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9pbnRlcm5hbFRleHR1cmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvbG9n
Z2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisKKworCisKK19FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5wcm90b3R5cGUuY3JlYXRlUmVuZGVy
VGFyZ2V0Q3ViZVRleHR1cmUgPSBmdW5jdGlvbiAoc2l6ZSwgb3B0aW9ucykgeworICAgIHZhciBm
dWxsT3B0aW9ucyA9IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXNzaWdu
Il0oeyBnZW5lcmF0ZU1pcE1hcHM6IHRydWUsIGdlbmVyYXRlRGVwdGhCdWZmZXI6IHRydWUsIGdl
bmVyYXRlU3RlbmNpbEJ1ZmZlcjogZmFsc2UsIHR5cGU6IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQs
IHNhbXBsaW5nTW9kZTogX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkVuZ2luZSJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERSwgZm9ybWF0OiBfRW5n
aW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uVEVYVFVS
RUZPUk1BVF9SR0JBIH0sIG9wdGlvbnMpOworICAgIGZ1bGxPcHRpb25zLmdlbmVyYXRlU3RlbmNp
bEJ1ZmZlciA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlRGVwdGhCdWZmZXIgJiYgZnVsbE9wdGlvbnMu
Z2VuZXJhdGVTdGVuY2lsQnVmZmVyOworICAgIGlmIChmdWxsT3B0aW9ucy50eXBlID09PSBfRW5n
aW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uVEVYVFVS
RVRZUEVfRkxPQVQgJiYgIXRoaXMuX2NhcHMudGV4dHVyZUZsb2F0TGluZWFyRmlsdGVyaW5nKSB7
CisgICAgICAgIC8vIGlmIGZsb2F0aW5nIHBvaW50IGxpbmVhciAoZ2wuRkxPQVQpIHRoZW4gZm9y
Y2UgdG8gTkVBUkVTVF9TQU1QTElOR01PREUKKyAgICAgICAgZnVsbE9wdGlvbnMuc2FtcGxpbmdN
b2RlID0gX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2lu
ZSJdLlRFWFRVUkVfTkVBUkVTVF9TQU1QTElOR01PREU7CisgICAgfQorICAgIGVsc2UgaWYgKGZ1
bGxPcHRpb25zLnR5cGUgPT09IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUICYmICF0aGlzLl9jYXBzLnRl
eHR1cmVIYWxmRmxvYXRMaW5lYXJGaWx0ZXJpbmcpIHsKKyAgICAgICAgLy8gaWYgZmxvYXRpbmcg
cG9pbnQgbGluZWFyIChIQUxGX0ZMT0FUKSB0aGVuIGZvcmNlIHRvIE5FQVJFU1RfU0FNUExJTkdN
T0RFCisgICAgICAgIGZ1bGxPcHRpb25zLnNhbXBsaW5nTW9kZSA9IF9FbmdpbmVzX2VuZ2luZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX05FQVJFU1RfU0FN
UExJTkdNT0RFOworICAgIH0KKyAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAgICB2YXIgdGV4dHVy
ZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1
cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5h
bFRleHR1cmUiXS5EQVRBU09VUkNFX1JFTkRFUlRBUkdFVCk7CisgICAgdGhpcy5fYmluZFRleHR1
cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlLCB0cnVlKTsKKyAgICB2YXIg
ZmlsdGVycyA9IHRoaXMuX2dldFNhbXBsaW5nUGFyYW1ldGVycyhmdWxsT3B0aW9ucy5zYW1wbGlu
Z01vZGUsIGZ1bGxPcHRpb25zLmdlbmVyYXRlTWlwTWFwcyk7CisgICAgaWYgKGZ1bGxPcHRpb25z
LnR5cGUgPT09IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJF
bmdpbmUiXS5URVhUVVJFVFlQRV9GTE9BVCAmJiAhdGhpcy5fY2Fwcy50ZXh0dXJlRmxvYXQpIHsK
KyAgICAgICAgZnVsbE9wdGlvbnMudHlwZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7CisgICAg
ICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJMb2dnZXIiXS5X
YXJuKCJGbG9hdCB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZC4gQ3ViZSByZW5kZXIgdGFyZ2V0
IGZvcmNlZCB0byBURVhUVVJFVFlQRV9VTkVTSUdORURfQllURSB0eXBlIik7CisgICAgfQorICAg
IGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wuVEVYVFVSRV9NQUdfRklM
VEVSLCBmaWx0ZXJzLm1hZyk7CisgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFX0NVQkVf
TUFQLCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcnMubWluKTsKKyAgICBnbC50ZXhQYXJh
bWV0ZXJpKGdsLlRFWFRVUkVfQ1VCRV9NQVAsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9U
T19FREdFKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfQ1VCRV9NQVAsIGdsLlRF
WFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTsKKyAgICBmb3IgKHZhciBmYWNlID0gMDsg
ZmFjZSA8IDY7IGZhY2UrKykgeworICAgICAgICBnbC50ZXhJbWFnZTJEKChnbC5URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlKSwgMCwgdGhpcy5fZ2V0UkdCQUJ1ZmZlckludGVybmFs
U2l6ZWRGb3JtYXQoZnVsbE9wdGlvbnMudHlwZSwgZnVsbE9wdGlvbnMuZm9ybWF0KSwgc2l6ZSwg
c2l6ZSwgMCwgdGhpcy5fZ2V0SW50ZXJuYWxGb3JtYXQoZnVsbE9wdGlvbnMuZm9ybWF0KSwgdGhp
cy5fZ2V0V2ViR0xUZXh0dXJlVHlwZShmdWxsT3B0aW9ucy50eXBlKSwgbnVsbCk7CisgICAgfQor
ICAgIC8vIENyZWF0ZSB0aGUgZnJhbWVidWZmZXIKKyAgICB2YXIgZnJhbWVidWZmZXIgPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVidWZmZXIoZnJh
bWVidWZmZXIpOworICAgIHRleHR1cmUuX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IHRoaXMuX3NldHVw
RnJhbWVidWZmZXJEZXB0aEF0dGFjaG1lbnRzKGZ1bGxPcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1
ZmZlciwgZnVsbE9wdGlvbnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlciwgc2l6ZSwgc2l6ZSk7CisgICAg
Ly8gTWlwTWFwcworICAgIGlmIChmdWxsT3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAg
ICAgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV9DVUJFX01BUCk7CisgICAgfQorICAgIC8v
IFVuYmluZAorICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkoZ2wuVEVYVFVSRV9DVUJFX01B
UCwgbnVsbCk7CisgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIG51bGwp
OworICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVidWZmZXIobnVsbCk7CisgICAgdGV4dHVyZS5f
ZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKKyAgICB0ZXh0dXJlLndpZHRoID0gc2l6ZTsKKyAg
ICB0ZXh0dXJlLmhlaWdodCA9IHNpemU7CisgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAg
ICB0ZXh0dXJlLmlzQ3ViZSA9IHRydWU7CisgICAgdGV4dHVyZS5zYW1wbGVzID0gMTsKKyAgICB0
ZXh0dXJlLmdlbmVyYXRlTWlwTWFwcyA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlTWlwTWFwczsKKyAg
ICB0ZXh0dXJlLnNhbXBsaW5nTW9kZSA9IGZ1bGxPcHRpb25zLnNhbXBsaW5nTW9kZTsKKyAgICB0
ZXh0dXJlLnR5cGUgPSBmdWxsT3B0aW9ucy50eXBlOworICAgIHRleHR1cmUuZm9ybWF0ID0gZnVs
bE9wdGlvbnMuZm9ybWF0OworICAgIHRleHR1cmUuX2dlbmVyYXRlRGVwdGhCdWZmZXIgPSBmdWxs
T3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyOworICAgIHRleHR1cmUuX2dlbmVyYXRlU3RlbmNp
bEJ1ZmZlciA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlcjsKKyAgICB0aGlzLl9p
bnRlcm5hbFRleHR1cmVzQ2FjaGUucHVzaCh0ZXh0dXJlKTsKKyAgICByZXR1cm4gdGV4dHVyZTsK
K307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUu
dHJhbnNmb3JtRmVlZGJhY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvRXh0ZW5zaW9u
cy9lbmdpbmUudHJhbnNmb3JtRmVlZGJhY2sudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogX2ZvcmNlVHJhbnNmb3JtRmVlZGJhY2tUb0J1bmRsZSAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJfZm9yY2VUcmFuc2Zvcm1GZWVkYmFja1RvQnVuZGxlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfZm9yY2VUcmFuc2Zvcm1GZWVkYmFja1RvQnVuZGxlOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvZW5naW5l
ICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisKKy8qKiBAaGlkZGVuICovCit2YXIgX2ZvcmNl
VHJhbnNmb3JtRmVlZGJhY2tUb0J1bmRsZSA9IHRydWU7CitfRW5naW5lc19lbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmNyZWF0ZVRyYW5zZm9y
bUZlZWRiYWNrID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiB0aGlzLl9nbC5jcmVhdGVUcmFu
c2Zvcm1GZWVkYmFjaygpOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2sgPSBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICB0aGlzLl9nbC5kZWxldGVUcmFuc2Zvcm1GZWVkYmFjayh2
YWx1ZSk7Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkVuZ2luZSJdLnByb3RvdHlwZS5iaW5kVHJhbnNmb3JtRmVlZGJhY2sgPSBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICB0aGlzLl9nbC5iaW5kVHJhbnNmb3JtRmVlZGJhY2sodGhpcy5fZ2wuVFJBTlNG
T1JNX0ZFRURCQUNLLCB2YWx1ZSk7Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS5iZWdpblRyYW5zZm9ybUZlZWRiYWNr
ID0gZnVuY3Rpb24gKHVzZVBvaW50cykgeworICAgIGlmICh1c2VQb2ludHMgPT09IHZvaWQgMCkg
eyB1c2VQb2ludHMgPSB0cnVlOyB9CisgICAgdGhpcy5fZ2wuYmVnaW5UcmFuc2Zvcm1GZWVkYmFj
ayh1c2VQb2ludHMgPyB0aGlzLl9nbC5QT0lOVFMgOiB0aGlzLl9nbC5UUklBTkdMRVMpOworfTsK
K19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5w
cm90b3R5cGUuZW5kVHJhbnNmb3JtRmVlZGJhY2sgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5f
Z2wuZW5kVHJhbnNmb3JtRmVlZGJhY2soKTsKK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLnNldFRyYW5mb3JtRmVlZGJh
Y2tWYXJ5aW5ncyA9IGZ1bmN0aW9uIChwcm9ncmFtLCB2YWx1ZSkgeworICAgIHRoaXMuX2dsLnRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MocHJvZ3JhbSwgdmFsdWUsIHRoaXMuX2dsLklOVEVSTEVB
VkVEX0FUVFJJQlMpOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuYmluZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyID0g
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgdGhpcy5fZ2wuYmluZEJ1ZmZlckJhc2UodGhpcy5fZ2wu
VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUiwgMCwgdmFsdWUgPyB2YWx1ZS51bmRlcmx5aW5nUmVz
b3VyY2UgOiBudWxsKTsKK307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMvRXh0
ZW5zaW9ucy9lbmdpbmUud2ViVlIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUu
d2ViVlIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgbm8gZXhwb3J0cyBwcm92aWRlZCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL2VuZ2luZSAq
LyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRo
c19tYXRoX3NpemVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGguc2l6ZSAqLyAiLi9NYXRocy9tYXRoLnNpemUudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29i
c2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RvbU1hbmFnZW1lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZG9t
TWFuYWdlbWVudCAqLyAiLi9NaXNjL2RvbU1hbmFnZW1lbnQudHMiKTsKKworCisKKworCitPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZSwgImlzSW5WUkV4Y2x1c2l2ZVBvaW50ZXJNb2RlIiwg
eworICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdnJFeGNsdXNp
dmVQb2ludGVyTW9kZTsKKyAgICB9LAorICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgY29uZmln
dXJhYmxlOiB0cnVlCit9KTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuX3ByZXBhcmVWUkNvbXBvbmVudCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICB0aGlzLl92clN1cHBvcnRlZCA9IGZhbHNlOworICAgIHRoaXMuX3ZyRXhjbHVz
aXZlUG9pbnRlck1vZGUgPSBmYWxzZTsKKyAgICB0aGlzLm9uVlJEaXNwbGF5Q2hhbmdlZE9ic2Vy
dmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJPYnNlcnZhYmxlIl0oKTsKKyAgICB0aGlzLm9uVlJSZXF1ZXN0UHJlc2VudENvbXBsZXRlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgdGhpcy5vblZSUmVxdWVzdFByZXNlbnRTdGFydCA9IG5ldyBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgpOwor
fTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUi
XS5wcm90b3R5cGUuaXNWUkRldmljZVByZXNlbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJu
ICEhdGhpcy5fdnJEaXNwbGF5OworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuZ2V0VlJEZXZpY2UgPSBmdW5jdGlvbiAo
KSB7CisgICAgcmV0dXJuIHRoaXMuX3ZyRGlzcGxheTsKK307CitfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmluaXRXZWJWUiA9
IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLmluaXRXZWJWUkFzeW5jKCk7CisgICAgcmV0dXJuIHRo
aXMub25WUkRpc3BsYXlDaGFuZ2VkT2JzZXJ2YWJsZTsKK307CitfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmluaXRXZWJWUkFz
eW5jID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgdmFyIG5vdGlm
eU9ic2VydmVycyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGV2ZW50QXJncyA9IHsKKyAg
ICAgICAgICAgIHZyRGlzcGxheTogX3RoaXMuX3ZyRGlzcGxheSwKKyAgICAgICAgICAgIHZyU3Vw
cG9ydGVkOiBfdGhpcy5fdnJTdXBwb3J0ZWQKKyAgICAgICAgfTsKKyAgICAgICAgX3RoaXMub25W
UkRpc3BsYXlDaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoZXZlbnRBcmdzKTsKKyAg
ICAgICAgX3RoaXMuX3dlYlZSSW5pdFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVz
KSB7IHJlcyhldmVudEFyZ3MpOyB9KTsKKyAgICB9OworICAgIGlmICghdGhpcy5fb25WckRpc3Bs
YXlDb25uZWN0KSB7CisgICAgICAgIHRoaXMuX29uVnJEaXNwbGF5Q29ubmVjdCA9IGZ1bmN0aW9u
IChldmVudCkgeworICAgICAgICAgICAgX3RoaXMuX3ZyRGlzcGxheSA9IGV2ZW50LmRpc3BsYXk7
CisgICAgICAgICAgICBub3RpZnlPYnNlcnZlcnMoKTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhp
cy5fb25WckRpc3BsYXlEaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3Ro
aXMuX3ZyRGlzcGxheS5jYW5jZWxBbmltYXRpb25GcmFtZShfdGhpcy5fZnJhbWVIYW5kbGVyKTsK
KyAgICAgICAgICAgIF90aGlzLl92ckRpc3BsYXkgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICBf
dGhpcy5fZnJhbWVIYW5kbGVyID0gX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVuZ2luZSJdLlF1ZXVlTmV3RnJhbWUoX3RoaXMuX2JpbmRlZFJlbmRlckZ1bmN0
aW9uKTsKKyAgICAgICAgICAgIG5vdGlmeU9ic2VydmVycygpOworICAgICAgICB9OworICAgICAg
ICB0aGlzLl9vblZyRGlzcGxheVByZXNlbnRDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICBfdGhpcy5fdnJFeGNsdXNpdmVQb2ludGVyTW9kZSA9IF90aGlzLl92ckRpc3BsYXkgJiYg
X3RoaXMuX3ZyRGlzcGxheS5pc1ByZXNlbnRpbmc7CisgICAgICAgIH07CisgICAgICAgIHZhciBo
b3N0V2luZG93ID0gdGhpcy5nZXRIb3N0V2luZG93KCk7CisgICAgICAgIGhvc3RXaW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigndnJkaXNwbGF5Y29ubmVjdCcsIHRoaXMuX29uVnJEaXNwbGF5Q29ubmVj
dCk7CisgICAgICAgIGhvc3RXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndnJkaXNwbGF5ZGlzY29u
bmVjdCcsIHRoaXMuX29uVnJEaXNwbGF5RGlzY29ubmVjdCk7CisgICAgICAgIGhvc3RXaW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigndnJkaXNwbGF5cHJlc2VudGNoYW5nZScsIHRoaXMuX29uVnJEaXNw
bGF5UHJlc2VudENoYW5nZSk7CisgICAgfQorICAgIHRoaXMuX3dlYlZSSW5pdFByb21pc2UgPSB0
aGlzLl93ZWJWUkluaXRQcm9taXNlIHx8IHRoaXMuX2dldFZSRGlzcGxheXNBc3luYygpOworICAg
IHRoaXMuX3dlYlZSSW5pdFByb21pc2UudGhlbihub3RpZnlPYnNlcnZlcnMpOworICAgIHJldHVy
biB0aGlzLl93ZWJWUkluaXRQcm9taXNlOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuX2dldFZSRGlzcGxheXNBc3lu
YyA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbiAocmVzKSB7CisgICAgICAgIGlmIChuYXZpZ2F0b3IuZ2V0VlJEaXNw
bGF5cykgeworICAgICAgICAgICAgbmF2aWdhdG9yLmdldFZSRGlzcGxheXMoKS50aGVuKGZ1bmN0
aW9uIChkZXZpY2VzKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3ZyU3VwcG9ydGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAvLyBub3RlIHRoYXQgZGV2aWNlcyBtYXkgYWN0dWFsbHkgYmUg
YW4gZW1wdHkgYXJyYXkuIFRoaXMgaXMgZmluZTsKKyAgICAgICAgICAgICAgICAvLyB3ZSBleHBl
Y3QgdGhpcy5fdnJEaXNwbGF5IHRvIGJlIHVuZGVmaW5lZCBpbiB0aGlzIGNhc2UuCisgICAgICAg
ICAgICAgICAgX3RoaXMuX3ZyRGlzcGxheSA9IGRldmljZXNbMF07CisgICAgICAgICAgICAgICAg
cmVzKHsKKyAgICAgICAgICAgICAgICAgICAgdnJEaXNwbGF5OiBfdGhpcy5fdnJEaXNwbGF5LAor
ICAgICAgICAgICAgICAgICAgICB2clN1cHBvcnRlZDogX3RoaXMuX3ZyU3VwcG9ydGVkCisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIF90aGlzLl92ckRpc3BsYXkgPSB1bmRlZmluZWQ7CisgICAgICAgICAg
ICBfdGhpcy5fdnJTdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJlcyh7CisgICAgICAg
ICAgICAgICAgdnJEaXNwbGF5OiBfdGhpcy5fdnJEaXNwbGF5LAorICAgICAgICAgICAgICAgIHZy
U3VwcG9ydGVkOiBfdGhpcy5fdnJTdXBwb3J0ZWQKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
CisgICAgfSk7Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkVuZ2luZSJdLnByb3RvdHlwZS5lbmFibGVWUiA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgIGlmICh0aGlzLl92ckRpc3BsYXkgJiYgIXRoaXMuX3ZyRGlzcGxh
eS5pc1ByZXNlbnRpbmcpIHsKKyAgICAgICAgdmFyIG9uUmVzb2x2ZWQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICBfdGhpcy5vblZSUmVxdWVzdFByZXNlbnRDb21wbGV0ZS5ub3RpZnlPYnNl
cnZlcnModHJ1ZSk7CisgICAgICAgICAgICBfdGhpcy5fb25WUkZ1bGxTY3JlZW5UcmlnZ2VyZWQo
KTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIG9uUmVqZWN0ZWQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBfdGhpcy5vblZSUmVxdWVzdFByZXNlbnRDb21wbGV0ZS5ub3RpZnlPYnNlcnZl
cnMoZmFsc2UpOworICAgICAgICB9OworICAgICAgICB0aGlzLm9uVlJSZXF1ZXN0UHJlc2VudFN0
YXJ0Lm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgdGhpcy5fdnJEaXNwbGF5LnJlcXVl
c3RQcmVzZW50KFt7IHNvdXJjZTogdGhpcy5nZXRSZW5kZXJpbmdDYW52YXMoKSB9XSkudGhlbihv
blJlc29sdmVkKS5jYXRjaChvblJlamVjdGVkKTsKKyAgICB9Cit9OworX0VuZ2luZXNfZW5naW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS5fb25WUkZ1
bGxTY3JlZW5UcmlnZ2VyZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHRoaXMuX3ZyRGlzcGxh
eSAmJiB0aGlzLl92ckRpc3BsYXkuaXNQcmVzZW50aW5nKSB7CisgICAgICAgIC8vZ2V0IHRoZSBv
bGQgc2l6ZSBiZWZvcmUgd2UgY2hhbmdlCisgICAgICAgIHRoaXMuX29sZFNpemUgPSBuZXcgX01h
dGhzX21hdGhfc2l6ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTaXplIl0odGhpcy5n
ZXRSZW5kZXJXaWR0aCgpLCB0aGlzLmdldFJlbmRlckhlaWdodCgpKTsKKyAgICAgICAgdGhpcy5f
b2xkSGFyZHdhcmVTY2FsZUZhY3RvciA9IHRoaXMuZ2V0SGFyZHdhcmVTY2FsaW5nTGV2ZWwoKTsK
KyAgICAgICAgLy9nZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQsIGNoYW5nZSB0aGUgcmVuZGVyIHNp
emUKKyAgICAgICAgdmFyIGxlZnRFeWUgPSB0aGlzLl92ckRpc3BsYXkuZ2V0RXllUGFyYW1ldGVy
cygnbGVmdCcpOworICAgICAgICB0aGlzLnNldEhhcmR3YXJlU2NhbGluZ0xldmVsKDEpOworICAg
ICAgICB0aGlzLnNldFNpemUobGVmdEV5ZS5yZW5kZXJXaWR0aCAqIDIsIGxlZnRFeWUucmVuZGVy
SGVpZ2h0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHRoaXMuc2V0SGFyZHdhcmVTY2Fs
aW5nTGV2ZWwodGhpcy5fb2xkSGFyZHdhcmVTY2FsZUZhY3Rvcik7CisgICAgICAgIHRoaXMuc2V0
U2l6ZSh0aGlzLl9vbGRTaXplLndpZHRoLCB0aGlzLl9vbGRTaXplLmhlaWdodCk7CisgICAgfQor
fTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUi
XS5wcm90b3R5cGUuZGlzYWJsZVZSID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBfdGhpcyA9IHRo
aXM7CisgICAgaWYgKHRoaXMuX3ZyRGlzcGxheSAmJiB0aGlzLl92ckRpc3BsYXkuaXNQcmVzZW50
aW5nKSB7CisgICAgICAgIHRoaXMuX3ZyRGlzcGxheS5leGl0UHJlc2VudCgpCisgICAgICAgICAg
ICAudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fb25WUkZ1bGxTY3JlZW5UcmlnZ2Vy
ZWQoKTsgfSkKKyAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5f
b25WUkZ1bGxTY3JlZW5UcmlnZ2VyZWQoKTsgfSk7CisgICAgfQorICAgIGlmIChfTWlzY19kb21N
YW5hZ2VtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkRvbU1hbmFnZW1lbnQiXS5J
c1dpbmRvd09iamVjdEV4aXN0KCkpIHsKKyAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoJ3ZyZGlzcGxheXBvaW50ZXJyZXN0cmljdGVkJywgdGhpcy5fb25WUkRpc3BsYXlQb2ludGVy
UmVzdHJpY3RlZCk7CisgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2cmRpc3Bs
YXlwb2ludGVydW5yZXN0cmljdGVkJywgdGhpcy5fb25WUkRpc3BsYXlQb2ludGVyVW5yZXN0cmlj
dGVkKTsKKyAgICAgICAgaWYgKHRoaXMuX29uVnJEaXNwbGF5Q29ubmVjdCkgeworICAgICAgICAg
ICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3ZyZGlzcGxheWNvbm5lY3QnLCB0aGlzLl9v
blZyRGlzcGxheUNvbm5lY3QpOworICAgICAgICAgICAgaWYgKHRoaXMuX29uVnJEaXNwbGF5RGlz
Y29ubmVjdCkgeworICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2
cmRpc3BsYXlkaXNjb25uZWN0JywgdGhpcy5fb25WckRpc3BsYXlEaXNjb25uZWN0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9vblZyRGlzcGxheVByZXNlbnRDaGFuZ2Up
IHsKKyAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndnJkaXNwbGF5
cHJlc2VudGNoYW5nZScsIHRoaXMuX29uVnJEaXNwbGF5UHJlc2VudENoYW5nZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl9vblZyRGlzcGxheUNvbm5lY3QgPSBudWxsOworICAg
ICAgICAgICAgdGhpcy5fb25WckRpc3BsYXlEaXNjb25uZWN0ID0gbnVsbDsKKyAgICAgICAgfQor
ICAgIH0KK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RW5naW5lIl0ucHJvdG90eXBlLl9jb25uZWN0VlJFdmVudHMgPSBmdW5jdGlvbiAoY2FudmFzLCBk
b2N1bWVudCkgeworICAgIHRoaXMuX29uVlJEaXNwbGF5UG9pbnRlclJlc3RyaWN0ZWQgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmIChjYW52YXMpIHsKKyAgICAgICAgICAgIGNhbnZhcy5yZXF1
ZXN0UG9pbnRlckxvY2soKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5fb25WUkRpc3Bs
YXlQb2ludGVyVW5yZXN0cmljdGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIWRvY3Vt
ZW50LmV4aXRQb2ludGVyTG9jaykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGRvY3VtZW50LmV4aXRQb2ludGVyTG9jaygpOworICAgIH07CisgICAgaWYgKF9NaXNj
X2RvbU1hbmFnZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRG9tTWFuYWdlbWVu
dCJdLklzV2luZG93T2JqZWN0RXhpc3QoKSkgeworICAgICAgICB2YXIgaG9zdFdpbmRvdyA9IHRo
aXMuZ2V0SG9zdFdpbmRvdygpOworICAgICAgICBob3N0V2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
J3ZyZGlzcGxheXBvaW50ZXJyZXN0cmljdGVkJywgdGhpcy5fb25WUkRpc3BsYXlQb2ludGVyUmVz
dHJpY3RlZCwgZmFsc2UpOworICAgICAgICBob3N0V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Zy
ZGlzcGxheXBvaW50ZXJ1bnJlc3RyaWN0ZWQnLCB0aGlzLl9vblZSRGlzcGxheVBvaW50ZXJVbnJl
c3RyaWN0ZWQsIGZhbHNlKTsKKyAgICB9Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS5fc3VibWl0VlJGcmFtZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAvLyBTdWJtaXQgZnJhbWUgdG8gdGhlIHZyIGRldmljZSwgaWYgZW5h
YmxlZAorICAgIGlmICh0aGlzLl92ckRpc3BsYXkgJiYgdGhpcy5fdnJEaXNwbGF5LmlzUHJlc2Vu
dGluZykgeworICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgb25seSBzdWJtaXQgdGhlIGZyYW1l
IGlmIHdlIHJlYWQgZnJhbWVEYXRhIHN1Y2Nlc3NmdWxseS4KKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIHRoaXMuX3ZyRGlzcGxheS5zdWJtaXRGcmFtZSgpOworICAgICAgICB9CisgICAgICAg
IGNhdGNoIChlKSB7CisgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJUb29scyJdLldhcm4oIndlYlZSIHN1Ym1pdEZyYW1lIGhhcyBoYWQgYW4gdW5l
eHBlY3RlZCBmYWlsdXJlOiAiICsgZSk7CisgICAgICAgIH0KKyAgICB9Cit9OworX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS5p
c1ZSUHJlc2VudGluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gdGhpcy5fdnJEaXNwbGF5
ICYmIHRoaXMuX3ZyRGlzcGxheS5pc1ByZXNlbnRpbmc7Cit9OworX0VuZ2luZXNfZW5naW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS5fcmVxdWVzdFZS
RnJhbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5fZnJhbWVIYW5kbGVyID0gX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLlF1ZXVlTmV3RnJh
bWUodGhpcy5fYmluZGVkUmVuZGVyRnVuY3Rpb24sIHRoaXMuX3ZyRGlzcGxheSk7Cit9OworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5l
cy9FeHRlbnNpb25zL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogX09jY2x1c2lvbkRhdGFTdG9yYWdl
LCBfZm9yY2VUcmFuc2Zvcm1GZWVkYmFja1RvQnVuZGxlICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZW5naW5lX29jY2x1c2lvblF1ZXJ5X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VuZ2luZS5vY2Ns
dXNpb25RdWVyeSAqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLm9jY2x1c2lvblF1ZXJ5
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9PY2NsdXNpb25EYXRhU3RvcmFnZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2VuZ2luZV9vY2NsdXNpb25RdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfT2NjbHVzaW9uRGF0YVN0b3JhZ2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfZW5naW5lX3RyYW5zZm9ybUZlZWRiYWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VuZ2luZS50cmFuc2Zvcm1GZWVkYmFj
ayAqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLnRyYW5zZm9ybUZlZWRiYWNrLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIl9mb3JjZVRyYW5zZm9ybUZlZWRiYWNrVG9CdW5kbGUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9lbmdpbmVfdHJhbnNmb3JtRmVlZGJhY2tfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siX2ZvcmNlVHJhbnNmb3JtRmVlZGJhY2tUb0J1bmRsZSJdOyB9KTsKKwor
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRW5naW5lcy9OYXRpdmUvbmF0aXZlU2hhZGVy
UHJvY2Vzc29yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvTmF0aXZlL25hdGl2ZVNoYWRlclByb2Nl
c3Nvci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE5hdGl2ZVNoYWRlclByb2Nlc3NvciAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOYXRpdmVTaGFkZXJQcm9jZXNz
b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE5hdGl2ZVNoYWRlclByb2Nlc3NvcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIv
dHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1dlYkdMX3dlYkdMMlNo
YWRlclByb2Nlc3NvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL1dlYkdML3dlYkdMMlNoYWRlclByb2Nlc3NvcnMgKi8gIi4vRW5naW5l
cy9XZWJHTC93ZWJHTDJTaGFkZXJQcm9jZXNzb3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZl
ci50cyIpOwordmFyIF9hOworCisKKworLy8gVGhlc2UgbnVtYmVycyBtdXN0IG1hdGNoIHRoZSB2
YWx1ZXMgZm9yIGJnZng6OkF0dHJpYjo6RW51bQordmFyIGF0dHJpYnV0ZUxvY2F0aW9ucyA9IChf
YSA9IHt9LAorICAgIF9hW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0gPSAwLAorICAgIF9hW19NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtp
bmRdID0gMSwKKyAgICBfYVtfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJWZXJ0ZXhCdWZmZXIiXS5UYW5nZW50S2luZF0gPSAyLAorICAgIF9hW19NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2lu
ZF0gPSA0LAorICAgIF9hW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0tpbmRdID0gOCwKKyAgICBfYVtfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5N
YXRyaWNlc1dlaWdodHNLaW5kXSA9IDksCisgICAgX2EpOworLy8gTXVzdCBtYXRjaCBiZ2Z4OjpB
dHRyaWI6OlRleENvb3JkMAordmFyIGZpcnN0R2VuZXJpY0F0dHJpYnV0ZUxvY2F0aW9uID0gMTA7
CisvLyBNdXN0IG1hdGNoIGJnZng6OkF0dHJpYjo6VGV4Q29vcmQ3Cit2YXIgbGFzdEdlbmVyaWNB
dHRyaWJ1dGVMb2NhdGlvbiA9IDE3OworLyoqIEBoaWRkZW4gKi8KK3ZhciBOYXRpdmVTaGFkZXJQ
cm9jZXNzb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTmF0aXZlU2hhZGVyUHJv
Y2Vzc29yLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIE5hdGl2ZVNoYWRlclByb2Nlc3NvcigpIHsK
KyAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJn
dW1lbnRzKSB8fCB0aGlzOworICAgIH0KKyAgICBOYXRpdmVTaGFkZXJQcm9jZXNzb3IucHJvdG90
eXBlLmxpbmVQcm9jZXNzb3IgPSBmdW5jdGlvbiAobGluZSkgeworICAgICAgICBmb3IgKHZhciBf
aSA9IDAsIF9hID0gdGhpcy5fcmVwbGFjZW1lbnRzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewor
ICAgICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gX2FbX2ldOworICAgICAgICAgICAgbGluZSA9
IGxpbmUucmVwbGFjZShyZXBsYWNlbWVudC5zZWFyY2hWYWx1ZSwgcmVwbGFjZW1lbnQucmVwbGFj
ZVZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGluZTsKKyAgICB9OworICAgIE5h
dGl2ZVNoYWRlclByb2Nlc3Nvci5wcm90b3R5cGUuYXR0cmlidXRlUHJvY2Vzc29yID0gZnVuY3Rp
b24gKGF0dHJpYnV0ZSkgeworICAgICAgICB2YXIgbWF0Y2ggPSBhdHRyaWJ1dGUubWF0Y2goL2F0
dHJpYnV0ZVxzK1teXHNdK1xzKyhbXlxzXSspXHMqKD86XFsuK1xdKT9ccyo7Lyk7CisgICAgICAg
IHZhciBuYW1lID0gbWF0Y2hbMV07CisgICAgICAgIHZhciBsb2NhdGlvbiA9IGF0dHJpYnV0ZUxv
Y2F0aW9uc1tuYW1lXTsKKyAgICAgICAgaWYgKGxvY2F0aW9uID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgIGxvY2F0aW9uID0gdGhpcy5fZ2VuZXJpY0F0dHJpYnV0ZUxvY2F0aW9uKys7Cisg
ICAgICAgICAgICBpZiAobG9jYXRpb24gPiBsYXN0R2VuZXJpY0F0dHJpYnV0ZUxvY2F0aW9uKSB7
CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeGNlZWRlZCBtYXhpbXVtIGN1c3Rv
bSBhdHRyaWJ1dGVzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
ICJsYXlvdXQobG9jYXRpb249IiArIGxvY2F0aW9uICsgIikgIiArIF9zdXBlci5wcm90b3R5cGUu
YXR0cmlidXRlUHJvY2Vzc29yLmNhbGwodGhpcywgYXR0cmlidXRlKTsKKyAgICB9OworICAgIE5h
dGl2ZVNoYWRlclByb2Nlc3Nvci5wcm90b3R5cGUudmFyeWluZ1Byb2Nlc3NvciA9IGZ1bmN0aW9u
ICh2YXJ5aW5nLCBpc0ZyYWdtZW50KSB7CisgICAgICAgIHZhciBsb2NhdGlvbjsKKyAgICAgICAg
aWYgKGlzRnJhZ21lbnQpIHsKKyAgICAgICAgICAgIGxvY2F0aW9uID0gdGhpcy5fdmFyeWluZ0xv
Y2F0aW9uTWFwW3ZhcnlpbmddOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgbG9jYXRpb24gPSB0aGlzLl92YXJ5aW5nTG9jYXRpb25Db3VudCsrOworICAgICAgICAgICAg
dGhpcy5fdmFyeWluZ0xvY2F0aW9uTWFwW3ZhcnlpbmddID0gbG9jYXRpb247CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuICJsYXlvdXQobG9jYXRpb249IiArIGxvY2F0aW9uICsgIikgIiArIF9z
dXBlci5wcm90b3R5cGUudmFyeWluZ1Byb2Nlc3Nvci5jYWxsKHRoaXMsIHZhcnlpbmcsIGlzRnJh
Z21lbnQpOworICAgIH07CisgICAgTmF0aXZlU2hhZGVyUHJvY2Vzc29yLnByb3RvdHlwZS51bmlm
b3JtUHJvY2Vzc29yID0gZnVuY3Rpb24gKHVuaWZvcm0pIHsKKyAgICAgICAgdmFyIG1hdGNoID0g
dW5pZm9ybS5tYXRjaCgvdW5pZm9ybVxzKyhbXlxzXSspXHMrKFteXHNdKylccyooPzpcWy4rXF0p
P1xzKjsvKTsKKyAgICAgICAgdmFyIHR5cGUgPSBtYXRjaFsxXTsKKyAgICAgICAgdmFyIG5hbWUg
PSBtYXRjaFsyXTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlICJz
YW1wbGVyMkQiOgorICAgICAgICAgICAgY2FzZSAic2FtcGxlckN1YmUiOiB7CisgICAgICAgICAg
ICAgICAgdmFyIHN1ZmZpeCA9IHR5cGUuc3Vic3RyKDcpOworICAgICAgICAgICAgICAgIHZhciBi
aW5kaW5nID0gdGhpcy5fdGV4dHVyZUNvdW50Kys7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVw
bGFjZW1lbnRzLnB1c2goeyBzZWFyY2hWYWx1ZTogbmV3IFJlZ0V4cCgiXFxiIiArIG5hbWUgKyAi
XFxiIiksIHJlcGxhY2VWYWx1ZTogInNhbXBsZXIiICsgc3VmZml4ICsgIigiICsgbmFtZSArICJU
ZXh0dXJlLCAiICsgbmFtZSArICIpIiB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gImxheW91
dChiaW5kaW5nPSIgKyBiaW5kaW5nICsgIikgdW5pZm9ybSB0ZXh0dXJlIiArIHN1ZmZpeCArICIg
IiArIG5hbWUgKyAiVGV4dHVyZTtcbmxheW91dChiaW5kaW5nPSIgKyBiaW5kaW5nICsgIikgdW5p
Zm9ybSBzYW1wbGVyICIgKyBuYW1lICsgIjsiOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX3VuaWZvcm1zLnB1c2godW5pZm9ybSk7CisgICAgICAgIHJldHVybiB0aGlz
Ll91bmlmb3Jtcy5sZW5ndGggPT09IDEgPyAiPFVOSUZPUk0+IiA6ICIiOworICAgIH07CisgICAg
TmF0aXZlU2hhZGVyUHJvY2Vzc29yLnByb3RvdHlwZS5wcmVQcm9jZXNzb3IgPSBmdW5jdGlvbiAo
Y29kZSwgZGVmaW5lcywgaXNGcmFnbWVudCkgeworICAgICAgICB0aGlzLl9nZW5lcmljQXR0cmli
dXRlTG9jYXRpb24gPSBmaXJzdEdlbmVyaWNBdHRyaWJ1dGVMb2NhdGlvbjsKKyAgICAgICAgaWYg
KCFpc0ZyYWdtZW50KSB7CisgICAgICAgICAgICB0aGlzLl92YXJ5aW5nTG9jYXRpb25Db3VudCA9
IDA7CisgICAgICAgICAgICB0aGlzLl92YXJ5aW5nTG9jYXRpb25NYXAgPSB7fTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLl9yZXBsYWNlbWVudHMgPSBbXTsKKyAgICAgICAgdGhpcy5fdGV4dHVy
ZUNvdW50ID0gMDsKKyAgICAgICAgdGhpcy5fdW5pZm9ybXMgPSBbXTsKKyAgICAgICAgcmV0dXJu
IGNvZGU7CisgICAgfTsKKyAgICBOYXRpdmVTaGFkZXJQcm9jZXNzb3IucHJvdG90eXBlLnBvc3RQ
cm9jZXNzb3IgPSBmdW5jdGlvbiAoY29kZSwgZGVmaW5lcywgaXNGcmFnbWVudCkgeworICAgICAg
ICBjb2RlID0gX3N1cGVyLnByb3RvdHlwZS5wb3N0UHJvY2Vzc29yLmNhbGwodGhpcywgY29kZSwg
ZGVmaW5lcywgaXNGcmFnbWVudCk7CisgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoIjxVTklG
T1JNPiIsICJ1bmlmb3JtIEZyYW1lIHtcbiIgKyB0aGlzLl91bmlmb3Jtcy5qb2luKCJcbiIpICsg
IlxufTsiKTsKKyAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgib3V0IHZlYzQgZ2xGcmFnQ29s
b3IiLCAibGF5b3V0KGxvY2F0aW9uPTApIG91dCB2ZWM0IGdsRnJhZ0NvbG9yIik7CisgICAgICAg
IHJldHVybiBjb2RlOworICAgIH07CisgICAgcmV0dXJuIE5hdGl2ZVNoYWRlclByb2Nlc3NvcjsK
K30oX1dlYkdMX3dlYkdMMlNoYWRlclByb2Nlc3NvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siV2ViR0wyU2hhZGVyUHJvY2Vzc29yIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9FbmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvT3BlcmF0b3JzL3NoYWRlckRlZmlu
ZUFuZE9wZXJhdG9yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9F
bmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvT3BlcmF0b3JzL3NoYWRlckRlZmluZUFuZE9w
ZXJhdG9yLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IFNoYWRlckRlZmluZUFuZE9wZXJhdG9yICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlNoYWRlckRlZmluZUFuZE9wZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBTaGFkZXJEZWZpbmVBbmRPcGVyYXRvcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3NoYWRlckRlZmluZUV4cHJlc3Npb25fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NoYWRlckRlZmlu
ZUV4cHJlc3Npb24gKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL0V4cHJlc3Npb25zL3NoYWRlckRl
ZmluZUV4cHJlc3Npb24udHMiKTsKKworCisvKiogQGhpZGRlbiAqLwordmFyIFNoYWRlckRlZmlu
ZUFuZE9wZXJhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFNoYWRlckRlZmlu
ZUFuZE9wZXJhdG9yLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIFNoYWRlckRlZmluZUFuZE9wZXJh
dG9yKCkgeworICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0
aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CisgICAgfQorICAgIFNoYWRlckRlZmluZUFuZE9wZXJh
dG9yLnByb3RvdHlwZS5pc1RydWUgPSBmdW5jdGlvbiAocHJlcHJvY2Vzc29ycykgeworICAgICAg
ICByZXR1cm4gdGhpcy5sZWZ0T3BlcmFuZC5pc1RydWUocHJlcHJvY2Vzc29ycykgJiYgdGhpcy5y
aWdodE9wZXJhbmQuaXNUcnVlKHByZXByb2Nlc3NvcnMpOworICAgIH07CisgICAgcmV0dXJuIFNo
YWRlckRlZmluZUFuZE9wZXJhdG9yOworfShfc2hhZGVyRGVmaW5lRXhwcmVzc2lvbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTaGFkZXJEZWZpbmVFeHByZXNzaW9uIl0pKTsKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvT3Bl
cmF0b3JzL3NoYWRlckRlZmluZUFyaXRobWV0aWNPcGVyYXRvci50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvUHJvY2Vzc29ycy9FeHByZXNz
aW9ucy9PcGVyYXRvcnMvc2hhZGVyRGVmaW5lQXJpdGhtZXRpY09wZXJhdG9yLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTaGFk
ZXJEZWZpbmVBcml0aG1ldGljT3BlcmF0b3IgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU2hhZGVyRGVmaW5lQXJpdGhtZXRpY09wZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBTaGFkZXJEZWZpbmVBcml0aG1ldGljT3BlcmF0b3I7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5q
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zaGFkZXJEZWZpbmVFeHByZXNzaW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9z
aGFkZXJEZWZpbmVFeHByZXNzaW9uICovICIuL0VuZ2luZXMvUHJvY2Vzc29ycy9FeHByZXNzaW9u
cy9zaGFkZXJEZWZpbmVFeHByZXNzaW9uLnRzIik7CisKKworLyoqIEBoaWRkZW4gKi8KK3ZhciBT
aGFkZXJEZWZpbmVBcml0aG1ldGljT3BlcmF0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
X3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRl
bmRzIl0oU2hhZGVyRGVmaW5lQXJpdGhtZXRpY09wZXJhdG9yLCBfc3VwZXIpOworICAgIGZ1bmN0
aW9uIFNoYWRlckRlZmluZUFyaXRobWV0aWNPcGVyYXRvcihkZWZpbmUsIG9wZXJhbmQsIHRlc3RW
YWx1ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwor
ICAgICAgICBfdGhpcy5kZWZpbmUgPSBkZWZpbmU7CisgICAgICAgIF90aGlzLm9wZXJhbmQgPSBv
cGVyYW5kOworICAgICAgICBfdGhpcy50ZXN0VmFsdWUgPSB0ZXN0VmFsdWU7CisgICAgICAgIHJl
dHVybiBfdGhpczsKKyAgICB9CisgICAgU2hhZGVyRGVmaW5lQXJpdGhtZXRpY09wZXJhdG9yLnBy
b3RvdHlwZS5pc1RydWUgPSBmdW5jdGlvbiAocHJlcHJvY2Vzc29ycykgeworICAgICAgICB2YXIg
dmFsdWUgPSBwcmVwcm9jZXNzb3JzW3RoaXMuZGVmaW5lXTsKKyAgICAgICAgaWYgKHZhbHVlID09
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgY29uZGl0aW9uID0gZmFsc2U7CisgICAgICAgIHZhciBsZWZ0ID0gcGFyc2VJbnQo
dmFsdWUpOworICAgICAgICB2YXIgcmlnaHQgPSBwYXJzZUludCh0aGlzLnRlc3RWYWx1ZSk7Cisg
ICAgICAgIHN3aXRjaCAodGhpcy5vcGVyYW5kKSB7CisgICAgICAgICAgICBjYXNlICI+IjoKKyAg
ICAgICAgICAgICAgICBjb25kaXRpb24gPSBsZWZ0ID4gcmlnaHQ7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlICI8IjoKKyAgICAgICAgICAgICAgICBjb25kaXRpb24g
PSBsZWZ0IDwgcmlnaHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
ICI8PSI6CisgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gbGVmdCA8PSByaWdodDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIj49IjoKKyAgICAgICAgICAgICAg
ICBjb25kaXRpb24gPSBsZWZ0ID49IHJpZ2h0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSAiPT0iOgorICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IGxlZnQgPT09
IHJpZ2h0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBjb25kaXRpb247CisgICAgfTsKKyAgICByZXR1cm4gU2hhZGVyRGVmaW5lQXJpdGhtZXRpY09w
ZXJhdG9yOworfShfc2hhZGVyRGVmaW5lRXhwcmVzc2lvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJTaGFkZXJEZWZpbmVFeHByZXNzaW9uIl0pKTsKKworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9FbmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvT3BlcmF0b3JzL3NoYWRlckRl
ZmluZUlzRGVmaW5lZE9wZXJhdG9yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9FbmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvT3BlcmF0b3JzL3No
YWRlckRlZmluZUlzRGVmaW5lZE9wZXJhdG9yLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNoYWRlckRlZmluZUlzRGVmaW5lZE9w
ZXJhdG9yICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNoYWRlckRlZmlu
ZUlzRGVmaW5lZE9wZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTaGFkZXJEZWZpbmVJc0Rl
ZmluZWRPcGVyYXRvcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3NoYWRlckRlZmluZUV4cHJlc3Npb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NoYWRlckRlZmluZUV4cHJlc3Npb24g
Ki8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL0V4cHJlc3Npb25zL3NoYWRlckRlZmluZUV4cHJlc3Np
b24udHMiKTsKKworCisvKiogQGhpZGRlbiAqLwordmFyIFNoYWRlckRlZmluZUlzRGVmaW5lZE9w
ZXJhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFNoYWRlckRlZmluZUlzRGVm
aW5lZE9wZXJhdG9yLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIFNoYWRlckRlZmluZUlzRGVmaW5l
ZE9wZXJhdG9yKGRlZmluZSwgbm90KSB7CisgICAgICAgIGlmIChub3QgPT09IHZvaWQgMCkgeyBu
b3QgPSBmYWxzZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0
aGlzOworICAgICAgICBfdGhpcy5kZWZpbmUgPSBkZWZpbmU7CisgICAgICAgIF90aGlzLm5vdCA9
IG5vdDsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBTaGFkZXJEZWZpbmVJc0Rl
ZmluZWRPcGVyYXRvci5wcm90b3R5cGUuaXNUcnVlID0gZnVuY3Rpb24gKHByZXByb2Nlc3NvcnMp
IHsKKyAgICAgICAgdmFyIGNvbmRpdGlvbiA9IHByZXByb2Nlc3NvcnNbdGhpcy5kZWZpbmVdICE9
PSB1bmRlZmluZWQ7CisgICAgICAgIGlmICh0aGlzLm5vdCkgeworICAgICAgICAgICAgY29uZGl0
aW9uID0gIWNvbmRpdGlvbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29uZGl0aW9uOwor
ICAgIH07CisgICAgcmV0dXJuIFNoYWRlckRlZmluZUlzRGVmaW5lZE9wZXJhdG9yOworfShfc2hh
ZGVyRGVmaW5lRXhwcmVzc2lvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTaGFkZXJE
ZWZpbmVFeHByZXNzaW9uIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVz
L1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvT3BlcmF0b3JzL3NoYWRlckRlZmluZU9yT3BlcmF0b3Iu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5lcy9Qcm9jZXNz
b3JzL0V4cHJlc3Npb25zL09wZXJhdG9ycy9zaGFkZXJEZWZpbmVPck9wZXJhdG9yLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2hhZGVyRGVm
aW5lT3JPcGVyYXRvciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaGFk
ZXJEZWZpbmVPck9wZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTaGFkZXJEZWZpbmVPck9w
ZXJhdG9yOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25v
ZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfc2hhZGVyRGVmaW5lRXhwcmVzc2lvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vc2hhZGVyRGVmaW5lRXhwcmVzc2lvbiAqLyAiLi9F
bmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvc2hhZGVyRGVmaW5lRXhwcmVzc2lvbi50cyIp
OworCisKKy8qKiBAaGlkZGVuICovCit2YXIgU2hhZGVyRGVmaW5lT3JPcGVyYXRvciA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShTaGFkZXJEZWZpbmVPck9wZXJhdG9yLCBfc3VwZXIp
OworICAgIGZ1bmN0aW9uIFNoYWRlckRlZmluZU9yT3BlcmF0b3IoKSB7CisgICAgICAgIHJldHVy
biBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhp
czsKKyAgICB9CisgICAgU2hhZGVyRGVmaW5lT3JPcGVyYXRvci5wcm90b3R5cGUuaXNUcnVlID0g
ZnVuY3Rpb24gKHByZXByb2Nlc3NvcnMpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubGVmdE9wZXJh
bmQuaXNUcnVlKHByZXByb2Nlc3NvcnMpIHx8IHRoaXMucmlnaHRPcGVyYW5kLmlzVHJ1ZShwcmVw
cm9jZXNzb3JzKTsKKyAgICB9OworICAgIHJldHVybiBTaGFkZXJEZWZpbmVPck9wZXJhdG9yOwor
fShfc2hhZGVyRGVmaW5lRXhwcmVzc2lvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
aGFkZXJEZWZpbmVFeHByZXNzaW9uIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9F
bmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvc2hhZGVyRGVmaW5lRXhwcmVzc2lvbi50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvUHJvY2Vzc29ycy9FeHByZXNzaW9u
cy9zaGFkZXJEZWZpbmVFeHByZXNzaW9uLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBTaGFkZXJEZWZpbmVFeHByZXNzaW9uICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlNoYWRlckRlZmluZUV4cHJlc3Npb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFNoYWRlckRlZmluZUV4cHJlc3Npb247IH0pOworLyoqIEBoaWRkZW4gKi8KK3ZhciBT
aGFkZXJEZWZpbmVFeHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAg
IGZ1bmN0aW9uIFNoYWRlckRlZmluZUV4cHJlc3Npb24oKSB7CisgICAgfQorICAgIFNoYWRlckRl
ZmluZUV4cHJlc3Npb24ucHJvdG90eXBlLmlzVHJ1ZSA9IGZ1bmN0aW9uIChwcmVwcm9jZXNzb3Jz
KSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgcmV0dXJuIFNoYWRlckRlZmlu
ZUV4cHJlc3Npb247Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMv
UHJvY2Vzc29ycy9zaGFkZXJDb2RlQ29uZGl0aW9uTm9kZS50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9F
bmdpbmVzL1Byb2Nlc3NvcnMvc2hhZGVyQ29kZUNvbmRpdGlvbk5vZGUudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBTaGFkZXJDb2RlQ29uZGl0aW9uTm9kZSAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaGFkZXJDb2RlQ29uZGl0aW9uTm9kZSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gU2hhZGVyQ29kZUNvbmRpdGlvbk5vZGU7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVz
Ni5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zaGFkZXJDb2RlTm9kZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zaGFkZXJD
b2RlTm9kZSAqLyAiLi9FbmdpbmVzL1Byb2Nlc3NvcnMvc2hhZGVyQ29kZU5vZGUudHMiKTsKKwor
CisvKiogQGhpZGRlbiAqLwordmFyIFNoYWRlckNvZGVDb25kaXRpb25Ob2RlID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKFNoYWRlckNvZGVDb25kaXRpb25Ob2RlLCBfc3VwZXIpOwor
ICAgIGZ1bmN0aW9uIFNoYWRlckNvZGVDb25kaXRpb25Ob2RlKCkgeworICAgICAgICByZXR1cm4g
X3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7
CisgICAgfQorICAgIFNoYWRlckNvZGVDb25kaXRpb25Ob2RlLnByb3RvdHlwZS5wcm9jZXNzID0g
ZnVuY3Rpb24gKHByZXByb2Nlc3NvcnMsIG9wdGlvbnMpIHsKKyAgICAgICAgZm9yICh2YXIgaW5k
ZXggPSAwOyBpbmRleCA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuY2hpbGRyZW5baW5kZXhdOworICAgICAgICAgICAgaWYgKG5v
ZGUuaXNWYWxpZChwcmVwcm9jZXNzb3JzKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
LnByb2Nlc3MocHJlcHJvY2Vzc29ycywgb3B0aW9ucyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuICIiOworICAgIH07CisgICAgcmV0dXJuIFNoYWRlckNvZGVDb25k
aXRpb25Ob2RlOworfShfc2hhZGVyQ29kZU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siU2hhZGVyQ29kZU5vZGUiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2lu
ZXMvUHJvY2Vzc29ycy9zaGFkZXJDb2RlQ3Vyc29yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5lcy9Qcm9j
ZXNzb3JzL3NoYWRlckNvZGVDdXJzb3IudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNoYWRl
ckNvZGVDdXJzb3IgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hhZGVy
Q29kZUN1cnNvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2hhZGVyQ29kZUN1cnNvcjsgfSk7Cisv
KiogQGhpZGRlbiAqLwordmFyIFNoYWRlckNvZGVDdXJzb3IgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgZnVuY3Rpb24gU2hhZGVyQ29kZUN1cnNvcigpIHsKKyAgICB9CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlckNvZGVDdXJzb3IucHJvdG90eXBlLCAiY3VycmVu
dExpbmUiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2xpbmVzW3RoaXMubGluZUluZGV4XTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlckNvZGVDdXJzb3IucHJvdG90eXBlLCAiY2FuUmVhZCIs
IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5s
aW5lSW5kZXggPCB0aGlzLl9saW5lcy5sZW5ndGggLSAxOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyQ29kZUN1cnNvci5wcm90b3R5cGUsICJsaW5l
cyIsIHsKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMu
X2xpbmVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIHZhbHVlXzEgPSB2YWx1
ZTsgX2kgPCB2YWx1ZV8xLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZhciBsaW5l
ID0gdmFsdWVfMVtfaV07CisgICAgICAgICAgICAgICAgLy8gUHJldmVudCByZW1vdmluZyBsaW5l
IGJyZWFrIGluIG1hY3Jvcy4KKyAgICAgICAgICAgICAgICBpZiAobGluZVswXSA9PT0gIiMiKSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVzLnB1c2gobGluZSk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2
YXIgc3BsaXQgPSBsaW5lLnNwbGl0KCI7Iik7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5k
ZXggPSAwOyBpbmRleCA8IHNwbGl0Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgc3ViTGluZSA9IHNwbGl0W2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgc3Vi
TGluZSA9IHN1YkxpbmUudHJpbSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YkxpbmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVzLnB1c2goc3ViTGluZSArIChpbmRl
eCAhPT0gc3BsaXQubGVuZ3RoIC0gMSA/ICI7IiA6ICIiKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICByZXR1cm4gU2hhZGVyQ29kZUN1
cnNvcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRW5naW5lcy9Qcm9jZXNz
b3JzL3NoYWRlckNvZGVOb2RlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvUHJvY2Vzc29ycy9zaGFkZXJD
b2RlTm9kZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNoYWRlckNvZGVOb2RlICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNoYWRlckNvZGVOb2RlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBTaGFkZXJDb2RlTm9kZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2Nfc3RyaW5nVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvc3RyaW5nVG9vbHMgKi8gIi4vTWlzYy9zdHJpbmdU
b29scy50cyIpOworCisvKiogQGhpZGRlbiAqLwordmFyIFNoYWRlckNvZGVOb2RlID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFNoYWRlckNvZGVOb2RlKCkgewor
ICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107CisgICAgfQorICAgIFNoYWRlckNvZGVOb2RlLnBy
b3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24gKHByZXByb2Nlc3NvcnMpIHsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfTsKKyAgICBTaGFkZXJDb2RlTm9kZS5wcm90b3R5cGUucHJvY2VzcyA9
IGZ1bmN0aW9uIChwcmVwcm9jZXNzb3JzLCBvcHRpb25zKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSAiIjsKKyAgICAgICAgaWYgKHRoaXMubGluZSkgeworICAgICAgICAgICAgdmFyIHZhbHVlID0g
dGhpcy5saW5lOworICAgICAgICAgICAgdmFyIHByb2Nlc3NvciA9IG9wdGlvbnMucHJvY2Vzc29y
OworICAgICAgICAgICAgaWYgKHByb2Nlc3NvcikgeworICAgICAgICAgICAgICAgIC8vIFRoaXMg
bXVzdCBiZSBkb25lIGJlZm9yZSBvdGhlciByZXBsYWNlbWVudHMgdG8gYXZvaWQgbWlzdGFrZW5s
eSBjaGFuZ2luZyBzb21ldGhpbmcgdGhhdCB3YXMgYWxyZWFkeSBjaGFuZ2VkLgorICAgICAgICAg
ICAgICAgIGlmIChwcm9jZXNzb3IubGluZVByb2Nlc3NvcikgeworICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHByb2Nlc3Nvci5saW5lUHJvY2Vzc29yKHZhbHVlLCBvcHRpb25zLmlzRnJhZ21l
bnQsIG9wdGlvbnMucHJvY2Vzc2luZ0NvbnRleHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAocHJvY2Vzc29yLmF0dHJpYnV0ZVByb2Nlc3NvciAmJiBfTWlzY19zdHJp
bmdUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdHJpbmdUb29scyJdLlN0YXJ0
c1dpdGgodGhpcy5saW5lLCAiYXR0cmlidXRlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBwcm9jZXNzb3IuYXR0cmlidXRlUHJvY2Vzc29yKHRoaXMubGluZSwgb3B0aW9ucy5wcm9j
ZXNzaW5nQ29udGV4dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHByb2Nlc3Nvci52YXJ5aW5nUHJvY2Vzc29yICYmIF9NaXNjX3N0cmluZ1Rvb2xzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlN0cmluZ1Rvb2xzIl0uU3RhcnRzV2l0aCh0aGlzLmxp
bmUsICJ2YXJ5aW5nIikpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzb3Iu
dmFyeWluZ1Byb2Nlc3Nvcih0aGlzLmxpbmUsIG9wdGlvbnMuaXNGcmFnbWVudCwgb3B0aW9ucy5w
cm9jZXNzaW5nQ29udGV4dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKChwcm9jZXNzb3IudW5pZm9ybVByb2Nlc3NvciB8fCBwcm9jZXNzb3IudW5pZm9ybUJ1
ZmZlclByb2Nlc3NvcikgJiYgX01pc2Nfc3RyaW5nVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siU3RyaW5nVG9vbHMiXS5TdGFydHNXaXRoKHRoaXMubGluZSwgInVuaWZvcm0iKSAm
JiAhb3B0aW9ucy5sb29rRm9yQ2xvc2luZ0JyYWNrZXRGb3JVbmlmb3JtQnVmZmVyKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciByZWdleCA9IC91bmlmb3JtXHMrKFxTKylccysoXFMrKVxzKjsv
OworICAgICAgICAgICAgICAgICAgICBpZiAocmVnZXgudGVzdCh0aGlzLmxpbmUpKSB7IC8vIHVu
aWZvcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzb3IudW5pZm9ybVByb2Nl
c3NvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc29yLnVu
aWZvcm1Qcm9jZXNzb3IodGhpcy5saW5lLCBvcHRpb25zLmlzRnJhZ21lbnQsIHByZXByb2Nlc3Nv
cnMsIG9wdGlvbnMucHJvY2Vzc2luZ0NvbnRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBV
bmlmb3JtIGJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3Nvci51bmlm
b3JtQnVmZmVyUHJvY2Vzc29yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBwcm9jZXNzb3IudW5pZm9ybUJ1ZmZlclByb2Nlc3Nvcih0aGlzLmxpbmUsIG9wdGlvbnMuaXNG
cmFnbWVudCwgb3B0aW9ucy5wcm9jZXNzaW5nQ29udGV4dCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3B0aW9ucy5sb29rRm9yQ2xvc2luZ0JyYWNrZXRGb3JVbmlmb3JtQnVmZmVyID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sb29rRm9yQ2xv
c2luZ0JyYWNrZXRGb3JVbmlmb3JtQnVmZmVyICYmIHRoaXMubGluZS5pbmRleE9mKCJ9IikgIT09
IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubG9va0ZvckNsb3NpbmdCcmFja2V0
Rm9yVW5pZm9ybUJ1ZmZlciA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vz
c29yLmVuZE9mVW5pZm9ybUJ1ZmZlclByb2Nlc3NvcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBwcm9jZXNzb3IuZW5kT2ZVbmlmb3JtQnVmZmVyUHJvY2Vzc29yKHRoaXMubGlu
ZSwgb3B0aW9ucy5pc0ZyYWdtZW50LCBvcHRpb25zLnByb2Nlc3NpbmdDb250ZXh0KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJlc3VsdCArPSB2YWx1ZSArICJcclxuIjsKKyAgICAgICAgfQorICAgICAgICB0aGlz
LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7CisgICAgICAgICAgICByZXN1bHQg
Kz0gY2hpbGQucHJvY2VzcyhwcmVwcm9jZXNzb3JzLCBvcHRpb25zKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIGlmICh0aGlzLmFkZGl0aW9uYWxEZWZpbmVLZXkpIHsKKyAgICAgICAgICAgIHByZXBy
b2Nlc3NvcnNbdGhpcy5hZGRpdGlvbmFsRGVmaW5lS2V5XSA9IHRoaXMuYWRkaXRpb25hbERlZmlu
ZVZhbHVlIHx8ICJ0cnVlIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07CisgICAgcmV0dXJuIFNoYWRlckNvZGVOb2RlOworfSgpKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9FbmdpbmVzL1Byb2Nlc3NvcnMvc2hhZGVyQ29kZVRlc3ROb2RlLnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9FbmdpbmVzL1Byb2Nlc3NvcnMvc2hhZGVyQ29kZVRlc3ROb2RlLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFNoYWRlckNvZGVUZXN0Tm9kZSAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTaGFkZXJDb2RlVGVzdE5vZGUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIFNoYWRlckNvZGVUZXN0Tm9kZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3NoYWRlckNvZGVOb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NoYWRlckNvZGVOb2RlICovICIuL0Vu
Z2luZXMvUHJvY2Vzc29ycy9zaGFkZXJDb2RlTm9kZS50cyIpOworCisKKy8qKiBAaGlkZGVuICov
Cit2YXIgU2hhZGVyQ29kZVRlc3ROb2RlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBl
cikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJd
KFNoYWRlckNvZGVUZXN0Tm9kZSwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBTaGFkZXJDb2RlVGVz
dE5vZGUoKSB7CisgICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpczsKKyAgICB9CisgICAgU2hhZGVyQ29kZVRlc3ROb2Rl
LnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24gKHByZXByb2Nlc3NvcnMpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMudGVzdEV4cHJlc3Npb24uaXNUcnVlKHByZXByb2Nlc3NvcnMpOworICAgIH07
CisgICAgcmV0dXJuIFNoYWRlckNvZGVUZXN0Tm9kZTsKK30oX3NoYWRlckNvZGVOb2RlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNoYWRlckNvZGVOb2RlIl0pKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9FbmdpbmVzL1Byb2Nlc3NvcnMvc2hhZGVyUHJvY2Vzc29yLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9FbmdpbmVzL1Byb2Nlc3NvcnMvc2hhZGVyUHJvY2Vzc29yLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFNoYWRlclByb2Nlc3NvciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTaGFkZXJQcm9jZXNzb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNoYWRlclBy
b2Nlc3NvcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NoYWRlckNvZGVOb2RlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3No
YWRlckNvZGVOb2RlICovICIuL0VuZ2luZXMvUHJvY2Vzc29ycy9zaGFkZXJDb2RlTm9kZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zaGFkZXJDb2RlQ3Vyc29yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NoYWRlckNvZGVD
dXJzb3IgKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL3NoYWRlckNvZGVDdXJzb3IudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2hhZGVyQ29kZUNvbmRpdGlvbk5vZGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2hhZGVyQ29k
ZUNvbmRpdGlvbk5vZGUgKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL3NoYWRlckNvZGVDb25kaXRp
b25Ob2RlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NoYWRlckNvZGVUZXN0Tm9k
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9zaGFkZXJDb2RlVGVzdE5vZGUgKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL3NoYWRlckNvZGVU
ZXN0Tm9kZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FeHByZXNzaW9uc19PcGVy
YXRvcnNfc2hhZGVyRGVmaW5lSXNEZWZpbmVkT3BlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vRXhwcmVzc2lvbnMvT3BlcmF0b3Jz
L3NoYWRlckRlZmluZUlzRGVmaW5lZE9wZXJhdG9yICovICIuL0VuZ2luZXMvUHJvY2Vzc29ycy9F
eHByZXNzaW9ucy9PcGVyYXRvcnMvc2hhZGVyRGVmaW5lSXNEZWZpbmVkT3BlcmF0b3IudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXhwcmVzc2lvbnNfT3BlcmF0b3JzX3NoYWRlckRl
ZmluZU9yT3BlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vRXhwcmVzc2lvbnMvT3BlcmF0b3JzL3NoYWRlckRlZmluZU9yT3BlcmF0
b3IgKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL0V4cHJlc3Npb25zL09wZXJhdG9ycy9zaGFkZXJE
ZWZpbmVPck9wZXJhdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0V4cHJlc3Np
b25zX09wZXJhdG9yc19zaGFkZXJEZWZpbmVBbmRPcGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9FeHByZXNzaW9ucy9PcGVyYXRv
cnMvc2hhZGVyRGVmaW5lQW5kT3BlcmF0b3IgKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL0V4cHJl
c3Npb25zL09wZXJhdG9ycy9zaGFkZXJEZWZpbmVBbmRPcGVyYXRvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9FeHByZXNzaW9uc19PcGVyYXRvcnNfc2hhZGVyRGVmaW5lQXJpdGht
ZXRpY09wZXJhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL0V4cHJlc3Npb25zL09wZXJhdG9ycy9zaGFkZXJEZWZpbmVBcml0aG1ldGlj
T3BlcmF0b3IgKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL0V4cHJlc3Npb25zL09wZXJhdG9ycy9z
aGFkZXJEZWZpbmVBcml0aG1ldGljT3BlcmF0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWlzY19maWxlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZmlsZVRvb2xzICovICIuL01pc2MvZmlsZVRv
b2xzLnRzIik7CisKKworCisKKworCisKKworCisvKiogQGhpZGRlbiAqLwordmFyIFNoYWRlclBy
b2Nlc3NvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBTaGFk
ZXJQcm9jZXNzb3IoKSB7CisgICAgfQorICAgIFNoYWRlclByb2Nlc3Nvci5Qcm9jZXNzID0gZnVu
Y3Rpb24gKHNvdXJjZUNvZGUsIG9wdGlvbnMsIGNhbGxiYWNrKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIHRoaXMuX1Byb2Nlc3NJbmNsdWRlcyhzb3VyY2VDb2RlLCBvcHRp
b25zLCBmdW5jdGlvbiAoY29kZVdpdGhJbmNsdWRlcykgeworICAgICAgICAgICAgdmFyIG1pZ3Jh
dGVkQ29kZSA9IF90aGlzLl9Qcm9jZXNzU2hhZGVyQ29udmVyc2lvbihjb2RlV2l0aEluY2x1ZGVz
LCBvcHRpb25zKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKG1pZ3JhdGVkQ29kZSk7CisgICAgICAg
IH0pOworICAgIH07CisgICAgU2hhZGVyUHJvY2Vzc29yLkZpbmFsaXplID0gZnVuY3Rpb24gKHZl
cnRleENvZGUsIGZyYWdtZW50Q29kZSwgb3B0aW9ucykgeworICAgICAgICBpZiAoIW9wdGlvbnMu
cHJvY2Vzc29yIHx8ICFvcHRpb25zLnByb2Nlc3Nvci5maW5hbGl6ZVNoYWRlcnMpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7IHZlcnRleENvZGU6IHZlcnRleENvZGUsIGZyYWdtZW50Q29kZTogZnJh
Z21lbnRDb2RlIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9wdGlvbnMucHJvY2Vzc29y
LmZpbmFsaXplU2hhZGVycyh2ZXJ0ZXhDb2RlLCBmcmFnbWVudENvZGUsIG9wdGlvbnMucHJvY2Vz
c2luZ0NvbnRleHQpOworICAgIH07CisgICAgU2hhZGVyUHJvY2Vzc29yLl9Qcm9jZXNzUHJlY2lz
aW9uID0gZnVuY3Rpb24gKHNvdXJjZSwgb3B0aW9ucykgeworICAgICAgICB2YXIgc2hvdWxkVXNl
SGlnaFByZWNpc2lvblNoYWRlciA9IG9wdGlvbnMuc2hvdWxkVXNlSGlnaFByZWNpc2lvblNoYWRl
cjsKKyAgICAgICAgaWYgKHNvdXJjZS5pbmRleE9mKCJwcmVjaXNpb24gaGlnaHAgZmxvYXQiKSA9
PT0gLTEpIHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkVXNlSGlnaFByZWNpc2lvblNoYWRlcikg
eworICAgICAgICAgICAgICAgIHNvdXJjZSA9ICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIg
KyBzb3VyY2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzb3VyY2UgPSAicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuIiArIHNvdXJjZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICghc2hv
dWxkVXNlSGlnaFByZWNpc2lvblNoYWRlcikgeyAvLyBNb3ZpbmcgaGlnaHAgdG8gbWVkaXVtcAor
ICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5yZXBsYWNlKCJwcmVjaXNpb24gaGlnaHAg
ZmxvYXQiLCAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gc291cmNlOworICAgIH07CisgICAgU2hhZGVyUHJvY2Vzc29y
Ll9FeHRyYWN0T3BlcmF0aW9uID0gZnVuY3Rpb24gKGV4cHJlc3Npb24pIHsKKyAgICAgICAgdmFy
IHJlZ2V4ID0gL2RlZmluZWRcKCguKylcKS87CisgICAgICAgIHZhciBtYXRjaCA9IHJlZ2V4LmV4
ZWMoZXhwcmVzc2lvbik7CisgICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaC5sZW5ndGgpIHsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgX0V4cHJlc3Npb25zX09wZXJhdG9yc19zaGFkZXJEZWZpbmVJ
c0RlZmluZWRPcGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTaGFkZXJEZWZp
bmVJc0RlZmluZWRPcGVyYXRvciJdKG1hdGNoWzFdLnRyaW0oKSwgZXhwcmVzc2lvblswXSA9PT0g
IiEiKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgb3BlcmF0b3JzID0gWyI9PSIsICI+PSIsICI8
PSIsICI8IiwgIj4iXTsKKyAgICAgICAgdmFyIG9wZXJhdG9yID0gIiI7CisgICAgICAgIHZhciBp
bmRleE9wZXJhdG9yID0gMDsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBvcGVyYXRvcnNfMSA9
IG9wZXJhdG9yczsgX2kgPCBvcGVyYXRvcnNfMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAg
IG9wZXJhdG9yID0gb3BlcmF0b3JzXzFbX2ldOworICAgICAgICAgICAgaW5kZXhPcGVyYXRvciA9
IGV4cHJlc3Npb24uaW5kZXhPZihvcGVyYXRvcik7CisgICAgICAgICAgICBpZiAoaW5kZXhPcGVy
YXRvciA+IC0xKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGluZGV4T3BlcmF0b3IgPT09IC0xKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IF9FeHByZXNzaW9uc19PcGVyYXRvcnNfc2hhZGVyRGVmaW5lSXNEZWZpbmVkT3Bl
cmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2hhZGVyRGVmaW5lSXNEZWZpbmVk
T3BlcmF0b3IiXShleHByZXNzaW9uKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZGVmaW5lID0g
ZXhwcmVzc2lvbi5zdWJzdHJpbmcoMCwgaW5kZXhPcGVyYXRvcikudHJpbSgpOworICAgICAgICB2
YXIgdmFsdWUgPSBleHByZXNzaW9uLnN1YnN0cmluZyhpbmRleE9wZXJhdG9yICsgb3BlcmF0b3Iu
bGVuZ3RoKS50cmltKCk7CisgICAgICAgIHJldHVybiBuZXcgX0V4cHJlc3Npb25zX09wZXJhdG9y
c19zaGFkZXJEZWZpbmVBcml0aG1ldGljT3BlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzdfX1siU2hhZGVyRGVmaW5lQXJpdGhtZXRpY09wZXJhdG9yIl0oZGVmaW5lLCBvcGVyYXRvciwg
dmFsdWUpOworICAgIH07CisgICAgU2hhZGVyUHJvY2Vzc29yLl9CdWlsZFN1YkV4cHJlc3Npb24g
PSBmdW5jdGlvbiAoZXhwcmVzc2lvbikgeworICAgICAgICB2YXIgaW5kZXhPciA9IGV4cHJlc3Np
b24uaW5kZXhPZigifHwiKTsKKyAgICAgICAgaWYgKGluZGV4T3IgPT09IC0xKSB7CisgICAgICAg
ICAgICB2YXIgaW5kZXhBbmQgPSBleHByZXNzaW9uLmluZGV4T2YoIiYmIik7CisgICAgICAgICAg
ICBpZiAoaW5kZXhBbmQgPiAtMSkgeworICAgICAgICAgICAgICAgIHZhciBhbmRPcGVyYXRvciA9
IG5ldyBfRXhwcmVzc2lvbnNfT3BlcmF0b3JzX3NoYWRlckRlZmluZUFuZE9wZXJhdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNoYWRlckRlZmluZUFuZE9wZXJhdG9yIl0oKTsKKyAg
ICAgICAgICAgICAgICB2YXIgbGVmdFBhcnQgPSBleHByZXNzaW9uLnN1YnN0cmluZygwLCBpbmRl
eEFuZCkudHJpbSgpOworICAgICAgICAgICAgICAgIHZhciByaWdodFBhcnQgPSBleHByZXNzaW9u
LnN1YnN0cmluZyhpbmRleEFuZCArIDIpLnRyaW0oKTsKKyAgICAgICAgICAgICAgICBhbmRPcGVy
YXRvci5sZWZ0T3BlcmFuZCA9IHRoaXMuX0J1aWxkU3ViRXhwcmVzc2lvbihsZWZ0UGFydCk7Cisg
ICAgICAgICAgICAgICAgYW5kT3BlcmF0b3IucmlnaHRPcGVyYW5kID0gdGhpcy5fQnVpbGRTdWJF
eHByZXNzaW9uKHJpZ2h0UGFydCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFuZE9wZXJhdG9y
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX0V4dHJhY3RPcGVyYXRpb24oZXhwcmVzc2lvbik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgb3JPcGVyYXRvciA9IG5l
dyBfRXhwcmVzc2lvbnNfT3BlcmF0b3JzX3NoYWRlckRlZmluZU9yT3BlcmF0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siU2hhZGVyRGVmaW5lT3JPcGVyYXRvciJdKCk7CisgICAgICAg
ICAgICB2YXIgbGVmdFBhcnQgPSBleHByZXNzaW9uLnN1YnN0cmluZygwLCBpbmRleE9yKS50cmlt
KCk7CisgICAgICAgICAgICB2YXIgcmlnaHRQYXJ0ID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcoaW5k
ZXhPciArIDIpLnRyaW0oKTsKKyAgICAgICAgICAgIG9yT3BlcmF0b3IubGVmdE9wZXJhbmQgPSB0
aGlzLl9CdWlsZFN1YkV4cHJlc3Npb24obGVmdFBhcnQpOworICAgICAgICAgICAgb3JPcGVyYXRv
ci5yaWdodE9wZXJhbmQgPSB0aGlzLl9CdWlsZFN1YkV4cHJlc3Npb24ocmlnaHRQYXJ0KTsKKyAg
ICAgICAgICAgIHJldHVybiBvck9wZXJhdG9yOworICAgICAgICB9CisgICAgfTsKKyAgICBTaGFk
ZXJQcm9jZXNzb3IuX0J1aWxkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChsaW5lLCBzdGFydCkgewor
ICAgICAgICB2YXIgbm9kZSA9IG5ldyBfc2hhZGVyQ29kZVRlc3ROb2RlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlNoYWRlckNvZGVUZXN0Tm9kZSJdKCk7CisgICAgICAgIHZhciBjb21t
YW5kID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnQpOworICAgICAgICB2YXIgZXhwcmVzc2lvbiA9
IGxpbmUuc3Vic3RyaW5nKHN0YXJ0KS50cmltKCk7CisgICAgICAgIGlmIChjb21tYW5kID09PSAi
I2lmZGVmIikgeworICAgICAgICAgICAgbm9kZS50ZXN0RXhwcmVzc2lvbiA9IG5ldyBfRXhwcmVz
c2lvbnNfT3BlcmF0b3JzX3NoYWRlckRlZmluZUlzRGVmaW5lZE9wZXJhdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlNoYWRlckRlZmluZUlzRGVmaW5lZE9wZXJhdG9yIl0oZXhwcmVz
c2lvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29tbWFuZCA9PT0gIiNpZm5kZWYi
KSB7CisgICAgICAgICAgICBub2RlLnRlc3RFeHByZXNzaW9uID0gbmV3IF9FeHByZXNzaW9uc19P
cGVyYXRvcnNfc2hhZGVyRGVmaW5lSXNEZWZpbmVkT3BlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siU2hhZGVyRGVmaW5lSXNEZWZpbmVkT3BlcmF0b3IiXShleHByZXNzaW9uLCB0
cnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5vZGUudGVzdEV4
cHJlc3Npb24gPSB0aGlzLl9CdWlsZFN1YkV4cHJlc3Npb24oZXhwcmVzc2lvbik7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfTsKKyAgICBTaGFkZXJQcm9jZXNzb3IuX01v
dmVDdXJzb3JXaXRoaW5JZiA9IGZ1bmN0aW9uIChjdXJzb3IsIHJvb3ROb2RlLCBpZk5vZGUpIHsK
KyAgICAgICAgdmFyIGxpbmUgPSBjdXJzb3IuY3VycmVudExpbmU7CisgICAgICAgIHdoaWxlICh0
aGlzLl9Nb3ZlQ3Vyc29yKGN1cnNvciwgaWZOb2RlKSkgeworICAgICAgICAgICAgbGluZSA9IGN1
cnNvci5jdXJyZW50TGluZTsKKyAgICAgICAgICAgIHZhciBmaXJzdDUgPSBsaW5lLnN1YnN0cmlu
ZygwLCA1KS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgaWYgKGZpcnN0NSA9PT0gIiNlbHNl
IikgeworICAgICAgICAgICAgICAgIHZhciBlbHNlTm9kZSA9IG5ldyBfc2hhZGVyQ29kZU5vZGVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2hhZGVyQ29kZU5vZGUiXSgpOworICAgICAg
ICAgICAgICAgIHJvb3ROb2RlLmNoaWxkcmVuLnB1c2goZWxzZU5vZGUpOworICAgICAgICAgICAg
ICAgIHRoaXMuX01vdmVDdXJzb3IoY3Vyc29yLCBlbHNlTm9kZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3Q1ID09PSAi
I2VsaWYiKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsaWZOb2RlID0gdGhpcy5fQnVpbGRFeHBy
ZXNzaW9uKGxpbmUsIDUpOworICAgICAgICAgICAgICAgIHJvb3ROb2RlLmNoaWxkcmVuLnB1c2go
ZWxpZk5vZGUpOworICAgICAgICAgICAgICAgIGlmTm9kZSA9IGVsaWZOb2RlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBTaGFkZXJQcm9jZXNzb3IuX01vdmVDdXJzb3Ig
PSBmdW5jdGlvbiAoY3Vyc29yLCByb290Tm9kZSkgeworICAgICAgICB3aGlsZSAoY3Vyc29yLmNh
blJlYWQpIHsKKyAgICAgICAgICAgIGN1cnNvci5saW5lSW5kZXgrKzsKKyAgICAgICAgICAgIHZh
ciBsaW5lID0gY3Vyc29yLmN1cnJlbnRMaW5lOworICAgICAgICAgICAgdmFyIGtleXdvcmRzID0g
LygjaWZkZWYpfCgjZWxzZSl8KCNlbGlmKXwoI2VuZGlmKXwoI2lmbmRlZil8KCNpZikvOworICAg
ICAgICAgICAgdmFyIG1hdGNoZXMgPSBrZXl3b3Jkcy5leGVjKGxpbmUpOworICAgICAgICAgICAg
aWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB2YXIga2V5
d29yZCA9IG1hdGNoZXNbMF07CisgICAgICAgICAgICAgICAgc3dpdGNoIChrZXl3b3JkKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgIiNpZmRlZiI6IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBuZXdSb290Tm9kZSA9IG5ldyBfc2hhZGVyQ29kZUNvbmRpdGlvbk5vZGVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2hhZGVyQ29kZUNvbmRpdGlvbk5vZGUiXSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcm9vdE5vZGUuY2hpbGRyZW4ucHVzaChuZXdSb290Tm9kZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWZOb2RlID0gdGhpcy5fQnVpbGRFeHByZXNz
aW9uKGxpbmUsIDYpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Um9vdE5vZGUuY2hpbGRy
ZW4ucHVzaChpZk5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fTW92ZUN1cnNv
cldpdGhpbklmKGN1cnNvciwgbmV3Um9vdE5vZGUsIGlmTm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBjYXNlICIjZWxzZSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiNlbGlmIjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICBjYXNl
ICIjZW5kaWYiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBjYXNlICIjaWZuZGVmIjogeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG5ld1Jvb3ROb2RlID0gbmV3IF9zaGFkZXJDb2RlQ29uZGl0aW9uTm9kZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJTaGFkZXJDb2RlQ29uZGl0aW9uTm9kZSJdKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByb290Tm9kZS5jaGlsZHJlbi5wdXNoKG5ld1Jvb3ROb2RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBpZk5vZGUgPSB0aGlzLl9CdWlsZEV4cHJlc3Npb24o
bGluZSwgNyk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdSb290Tm9kZS5jaGlsZHJlbi5w
dXNoKGlmTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9Nb3ZlQ3Vyc29yV2l0
aGluSWYoY3Vyc29yLCBuZXdSb290Tm9kZSwgaWZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgIiNpZiI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdSb290Tm9kZSA9IG5l
dyBfc2hhZGVyQ29kZUNvbmRpdGlvbk5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
U2hhZGVyQ29kZUNvbmRpdGlvbk5vZGUiXSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGlmTm9kZSA9IHRoaXMuX0J1aWxkRXhwcmVzc2lvbihsaW5lLCAzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJvb3ROb2RlLmNoaWxkcmVuLnB1c2gobmV3Um9vdE5vZGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3Um9vdE5vZGUuY2hpbGRyZW4ucHVzaChpZk5vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fTW92ZUN1cnNvcldpdGhpbklmKGN1cnNvciwgbmV3Um9v
dE5vZGUsIGlmTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gbmV3IF9zaGFkZXJDb2Rl
Tm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTaGFkZXJDb2RlTm9kZSJdKCk7Cisg
ICAgICAgICAgICAgICAgbmV3Tm9kZS5saW5lID0gbGluZTsKKyAgICAgICAgICAgICAgICByb290
Tm9kZS5jaGlsZHJlbi5wdXNoKG5ld05vZGUpOworICAgICAgICAgICAgICAgIC8vIERldGVjdCBh
ZGRpdGlvbmFsIGRlZmluZXMKKyAgICAgICAgICAgICAgICBpZiAobGluZVswXSA9PT0gIiMiICYm
IGxpbmVbMV0gPT09ICJkIikgeworICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXQgPSBsaW5l
LnJlcGxhY2UoIjsiLCAiIikuc3BsaXQoIiAiKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Tm9k
ZS5hZGRpdGlvbmFsRGVmaW5lS2V5ID0gc3BsaXRbMV07CisgICAgICAgICAgICAgICAgICAgIGlm
IChzcGxpdC5sZW5ndGggPT09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUu
YWRkaXRpb25hbERlZmluZVZhbHVlID0gc3BsaXRbMl07CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CisgICAgU2hhZGVyUHJvY2Vzc29yLl9FdmFsdWF0ZVByZVByb2Nl
c3NvcnMgPSBmdW5jdGlvbiAoc291cmNlQ29kZSwgcHJlcHJvY2Vzc29ycywgb3B0aW9ucykgewor
ICAgICAgICB2YXIgcm9vdE5vZGUgPSBuZXcgX3NoYWRlckNvZGVOb2RlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlNoYWRlckNvZGVOb2RlIl0oKTsKKyAgICAgICAgdmFyIGN1cnNvciA9
IG5ldyBfc2hhZGVyQ29kZUN1cnNvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTaGFk
ZXJDb2RlQ3Vyc29yIl0oKTsKKyAgICAgICAgY3Vyc29yLmxpbmVJbmRleCA9IC0xOworICAgICAg
ICBjdXJzb3IubGluZXMgPSBzb3VyY2VDb2RlLnNwbGl0KCJcbiIpOworICAgICAgICAvLyBEZWNv
bXBvc2UgKFdlIGtlZXAgaXQgaW4gMiBzdGVwcyBzbyBpdCBpcyBlYXNpZXIgdG8gbWFpbnRhaW4g
YW5kIHBlcmYgaGl0IGlzIGluc2lnbmlmaWNhbnQpCisgICAgICAgIHRoaXMuX01vdmVDdXJzb3Io
Y3Vyc29yLCByb290Tm9kZSk7CisgICAgICAgIC8vIFJlY29tcG9zZQorICAgICAgICByZXR1cm4g
cm9vdE5vZGUucHJvY2VzcyhwcmVwcm9jZXNzb3JzLCBvcHRpb25zKTsKKyAgICB9OworICAgIFNo
YWRlclByb2Nlc3Nvci5fUHJlcGFyZVByZVByb2Nlc3NvcnMgPSBmdW5jdGlvbiAob3B0aW9ucykg
eworICAgICAgICB2YXIgZGVmaW5lcyA9IG9wdGlvbnMuZGVmaW5lczsKKyAgICAgICAgdmFyIHBy
ZXByb2Nlc3NvcnMgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBkZWZpbmVzXzEgPSBk
ZWZpbmVzOyBfaSA8IGRlZmluZXNfMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBk
ZWZpbmUgPSBkZWZpbmVzXzFbX2ldOworICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZGVmaW5l
LnJlcGxhY2UoIiNkZWZpbmUiLCAiIikucmVwbGFjZSgiOyIsICIiKS50cmltKCk7CisgICAgICAg
ICAgICB2YXIgc3BsaXQgPSBrZXlWYWx1ZS5zcGxpdCgiICIpOworICAgICAgICAgICAgcHJlcHJv
Y2Vzc29yc1tzcGxpdFswXV0gPSBzcGxpdC5sZW5ndGggPiAxID8gc3BsaXRbMV0gOiAiIjsKKyAg
ICAgICAgfQorICAgICAgICBwcmVwcm9jZXNzb3JzWyJHTF9FUyJdID0gInRydWUiOworICAgICAg
ICBwcmVwcm9jZXNzb3JzWyJfX1ZFUlNJT05fXyJdID0gb3B0aW9ucy52ZXJzaW9uOworICAgICAg
ICBwcmVwcm9jZXNzb3JzW29wdGlvbnMucGxhdGZvcm1OYW1lXSA9ICJ0cnVlIjsKKyAgICAgICAg
cmV0dXJuIHByZXByb2Nlc3NvcnM7CisgICAgfTsKKyAgICBTaGFkZXJQcm9jZXNzb3IuX1Byb2Nl
c3NTaGFkZXJDb252ZXJzaW9uID0gZnVuY3Rpb24gKHNvdXJjZUNvZGUsIG9wdGlvbnMpIHsKKyAg
ICAgICAgdmFyIHByZXBhcmVkU291cmNlQ29kZSA9IHRoaXMuX1Byb2Nlc3NQcmVjaXNpb24oc291
cmNlQ29kZSwgb3B0aW9ucyk7CisgICAgICAgIGlmICghb3B0aW9ucy5wcm9jZXNzb3IpIHsKKyAg
ICAgICAgICAgIHJldHVybiBwcmVwYXJlZFNvdXJjZUNvZGU7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQWxyZWFkeSBjb252ZXJ0ZWQKKyAgICAgICAgaWYgKHByZXBhcmVkU291cmNlQ29kZS5pbmRl
eE9mKCIjdmVyc2lvbiAzIikgIT09IC0xKSB7CisgICAgICAgICAgICByZXR1cm4gcHJlcGFyZWRT
b3VyY2VDb2RlLnJlcGxhY2UoIiN2ZXJzaW9uIDMwMCBlcyIsICIiKTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgZGVmaW5lcyA9IG9wdGlvbnMuZGVmaW5lczsKKyAgICAgICAgdmFyIHByZXByb2Nl
c3NvcnMgPSB0aGlzLl9QcmVwYXJlUHJlUHJvY2Vzc29ycyhvcHRpb25zKTsKKyAgICAgICAgLy8g
R2VuZXJhbCBwcmUgcHJvY2Vzc2luZworICAgICAgICBpZiAob3B0aW9ucy5wcm9jZXNzb3IucHJl
UHJvY2Vzc29yKSB7CisgICAgICAgICAgICBwcmVwYXJlZFNvdXJjZUNvZGUgPSBvcHRpb25zLnBy
b2Nlc3Nvci5wcmVQcm9jZXNzb3IocHJlcGFyZWRTb3VyY2VDb2RlLCBkZWZpbmVzLCBvcHRpb25z
LmlzRnJhZ21lbnQsIG9wdGlvbnMucHJvY2Vzc2luZ0NvbnRleHQpOworICAgICAgICB9CisgICAg
ICAgIHByZXBhcmVkU291cmNlQ29kZSA9IHRoaXMuX0V2YWx1YXRlUHJlUHJvY2Vzc29ycyhwcmVw
YXJlZFNvdXJjZUNvZGUsIHByZXByb2Nlc3NvcnMsIG9wdGlvbnMpOworICAgICAgICAvLyBQb3N0
IHByb2Nlc3NpbmcKKyAgICAgICAgaWYgKG9wdGlvbnMucHJvY2Vzc29yLnBvc3RQcm9jZXNzb3Ip
IHsKKyAgICAgICAgICAgIHByZXBhcmVkU291cmNlQ29kZSA9IG9wdGlvbnMucHJvY2Vzc29yLnBv
c3RQcm9jZXNzb3IocHJlcGFyZWRTb3VyY2VDb2RlLCBkZWZpbmVzLCBvcHRpb25zLmlzRnJhZ21l
bnQsIG9wdGlvbnMucHJvY2Vzc2luZ0NvbnRleHQpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBwcmVwYXJlZFNvdXJjZUNvZGU7CisgICAgfTsKKyAgICBTaGFkZXJQcm9jZXNzb3IuX1Byb2Nl
c3NJbmNsdWRlcyA9IGZ1bmN0aW9uIChzb3VyY2VDb2RlLCBvcHRpb25zLCBjYWxsYmFjaykgewor
ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgcmVnZXggPSAvI2luY2x1ZGU8
KC4rKT4oXCgoLiopXCkpKihcWyguKilcXSkqL2c7CisgICAgICAgIHZhciBtYXRjaCA9IHJlZ2V4
LmV4ZWMoc291cmNlQ29kZSk7CisgICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG5ldyBTdHJpbmco
c291cmNlQ29kZSk7CisgICAgICAgIHdoaWxlIChtYXRjaCAhPSBudWxsKSB7CisgICAgICAgICAg
ICB2YXIgaW5jbHVkZUZpbGUgPSBtYXRjaFsxXTsKKyAgICAgICAgICAgIC8vIFVuaWZvcm0gZGVj
bGFyYXRpb24KKyAgICAgICAgICAgIGlmIChpbmNsdWRlRmlsZS5pbmRleE9mKCJfX2RlY2xfXyIp
ICE9PSAtMSkgeworICAgICAgICAgICAgICAgIGluY2x1ZGVGaWxlID0gaW5jbHVkZUZpbGUucmVw
bGFjZSgvX19kZWNsX18vLCAiIik7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3VwcG9y
dHNVbmlmb3JtQnVmZmVycykgeworICAgICAgICAgICAgICAgICAgICBpbmNsdWRlRmlsZSA9IGlu
Y2x1ZGVGaWxlLnJlcGxhY2UoL1ZlcnRleC8sICJVYm8iKTsKKyAgICAgICAgICAgICAgICAgICAg
aW5jbHVkZUZpbGUgPSBpbmNsdWRlRmlsZS5yZXBsYWNlKC9GcmFnbWVudC8sICJVYm8iKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5jbHVkZUZpbGUgPSBpbmNsdWRlRmls
ZSArICJEZWNsYXJhdGlvbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3B0aW9u
cy5pbmNsdWRlc1NoYWRlcnNTdG9yZVtpbmNsdWRlRmlsZV0pIHsKKyAgICAgICAgICAgICAgICAv
LyBTdWJzdGl0dXRpb24KKyAgICAgICAgICAgICAgICB2YXIgaW5jbHVkZUNvbnRlbnQgPSBvcHRp
b25zLmluY2x1ZGVzU2hhZGVyc1N0b3JlW2luY2x1ZGVGaWxlXTsKKyAgICAgICAgICAgICAgICBp
ZiAobWF0Y2hbMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNwbGl0cyA9IG1hdGNoWzNd
LnNwbGl0KCIsIik7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBzcGxpdHMubGVuZ3RoOyBpbmRleCArPSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgc291cmNlID0gbmV3IFJlZ0V4cChzcGxpdHNbaW5kZXhdLCAiZyIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGRlc3QgPSBzcGxpdHNbaW5kZXggKyAxXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluY2x1ZGVDb250ZW50ID0gaW5jbHVkZUNvbnRlbnQucmVwbGFjZShzb3Vy
Y2UsIGRlc3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChtYXRjaFs0XSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgaW5k
ZXhTdHJpbmcgPSBtYXRjaFs1XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4U3RyaW5n
LmluZGV4T2YoIi4uIikgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5k
ZXhTcGxpdHMgPSBpbmRleFN0cmluZy5zcGxpdCgiLi4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBtaW5JbmRleCA9IHBhcnNlSW50KGluZGV4U3BsaXRzWzBdKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBtYXhJbmRleCA9IHBhcnNlSW50KGluZGV4U3BsaXRzWzFdKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VJbmNsdWRlQ29udGVudCA9IGluY2x1ZGVD
b250ZW50LnNsaWNlKDApOworICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZUNvbnRlbnQg
PSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihtYXhJbmRleCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG9wdGlvbnMuaW5kZXhQYXJhbWV0
ZXJzW2luZGV4U3BsaXRzWzFdXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBtaW5JbmRleDsgaSA8IG1heEluZGV4OyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuc3VwcG9ydHNVbmlm
b3JtQnVmZmVycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVYm8gcmVw
bGFjZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSW5jbHVkZUNv
bnRlbnQgPSBzb3VyY2VJbmNsdWRlQ29udGVudC5yZXBsYWNlKC9saWdodFx7WFx9LihcdyopL2cs
IGZ1bmN0aW9uIChzdHIsIHAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcDEgKyAie1h9IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluY2x1ZGVDb250ZW50ICs9IHNvdXJjZUluY2x1ZGVDb250ZW50LnJlcGxhY2UoL1x7WFx9
L2csIGkudG9TdHJpbmcoKSkgKyAiXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN1cHBvcnRzVW5pZm9ybUJ1ZmZlcnMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVYm8gcmVwbGFjZW1lbnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmNsdWRlQ29udGVudCA9IGluY2x1ZGVDb250ZW50LnJlcGxhY2Uo
L2xpZ2h0XHtYXH0uKFx3KikvZywgZnVuY3Rpb24gKHN0ciwgcDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxICsgIntYfSI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNsdWRlQ29udGVudCA9IGluY2x1ZGVDb250ZW50LnJlcGxhY2UoL1x7WFx9L2cs
IGluZGV4U3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyBSZXBsYWNlCisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUg
PSByZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoWzBdLCBpbmNsdWRlQ29udGVudCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgaW5jbHVkZVNo
YWRlclVybCA9IG9wdGlvbnMuc2hhZGVyc1JlcG9zaXRvcnkgKyAiU2hhZGVyc0luY2x1ZGUvIiAr
IGluY2x1ZGVGaWxlICsgIi5meCI7CisgICAgICAgICAgICAgICAgX01pc2NfZmlsZVRvb2xzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkZpbGVUb29scyJdLkxvYWRGaWxlKGluY2x1ZGVT
aGFkZXJVcmwsIGZ1bmN0aW9uIChmaWxlQ29udGVudCkgeworICAgICAgICAgICAgICAgICAgICBv
cHRpb25zLmluY2x1ZGVzU2hhZGVyc1N0b3JlW2luY2x1ZGVGaWxlXSA9IGZpbGVDb250ZW50Owor
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5fUHJvY2Vzc0luY2x1ZGVzKHJldHVyblZhbHVlLCBv
cHRpb25zLCBjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2ggPSByZWdleC5leGVjKHNv
dXJjZUNvZGUpOworICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKHJldHVyblZhbHVlKTsKKyAg
ICB9OworICAgIHJldHVybiBTaGFkZXJQcm9jZXNzb3I7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL0VuZ2luZXMvV2ViR0wvd2ViR0wyU2hhZGVyUHJvY2Vzc29ycy50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9FbmdpbmVzL1dlYkdML3dlYkdMMlNoYWRlclByb2Nlc3NvcnMudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBXZWJHTDJTaGFkZXJQcm9jZXNzb3IgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViR0wyU2hhZGVyUHJvY2Vzc29yIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBXZWJHTDJTaGFkZXJQcm9jZXNzb3I7IH0pOworLyoqIEBoaWRkZW4gKi8KK3ZhciBX
ZWJHTDJTaGFkZXJQcm9jZXNzb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
ZnVuY3Rpb24gV2ViR0wyU2hhZGVyUHJvY2Vzc29yKCkgeworICAgIH0KKyAgICBXZWJHTDJTaGFk
ZXJQcm9jZXNzb3IucHJvdG90eXBlLmF0dHJpYnV0ZVByb2Nlc3NvciA9IGZ1bmN0aW9uIChhdHRy
aWJ1dGUpIHsKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS5yZXBsYWNlKCJhdHRyaWJ1dGUiLCAi
aW4iKTsKKyAgICB9OworICAgIFdlYkdMMlNoYWRlclByb2Nlc3Nvci5wcm90b3R5cGUudmFyeWlu
Z1Byb2Nlc3NvciA9IGZ1bmN0aW9uICh2YXJ5aW5nLCBpc0ZyYWdtZW50KSB7CisgICAgICAgIHJl
dHVybiB2YXJ5aW5nLnJlcGxhY2UoInZhcnlpbmciLCBpc0ZyYWdtZW50ID8gImluIiA6ICJvdXQi
KTsKKyAgICB9OworICAgIFdlYkdMMlNoYWRlclByb2Nlc3Nvci5wcm90b3R5cGUucG9zdFByb2Nl
c3NvciA9IGZ1bmN0aW9uIChjb2RlLCBkZWZpbmVzLCBpc0ZyYWdtZW50KSB7CisgICAgICAgIHZh
ciBoYXNEcmF3QnVmZmVyc0V4dGVuc2lvbiA9IGNvZGUuc2VhcmNoKC8jZXh0ZW5zaW9uLitHTF9F
WFRfZHJhd19idWZmZXJzLityZXF1aXJlLykgIT09IC0xOworICAgICAgICAvLyBSZW1vdmUgZXh0
ZW5zaW9ucworICAgICAgICB2YXIgcmVnZXggPSAvI2V4dGVuc2lvbi4rKEdMX09WUl9tdWx0aXZp
ZXcyfEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlc3xHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9k
fEdMX0VYVF9mcmFnX2RlcHRofEdMX0VYVF9kcmF3X2J1ZmZlcnMpLisoZW5hYmxlfHJlcXVpcmUp
L2c7CisgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UocmVnZXgsICIiKTsKKyAgICAgICAgLy8g
UmVwbGFjZSBpbnN0cnVjdGlvbnMKKyAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgvdGV4dHVy
ZTJEXHMqXCgvZywgInRleHR1cmUoIik7CisgICAgICAgIGlmIChpc0ZyYWdtZW50KSB7CisgICAg
ICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC90ZXh0dXJlMkRMb2RFWFRccypcKC9nLCAidGV4
dHVyZUxvZCgiKTsKKyAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL3RleHR1cmVDdWJl
TG9kRVhUXHMqXCgvZywgInRleHR1cmVMb2QoIik7CisgICAgICAgICAgICBjb2RlID0gY29kZS5y
ZXBsYWNlKC90ZXh0dXJlQ3ViZVxzKlwoL2csICJ0ZXh0dXJlKCIpOworICAgICAgICAgICAgY29k
ZSA9IGNvZGUucmVwbGFjZSgvZ2xfRnJhZ0RlcHRoRVhUL2csICJnbF9GcmFnRGVwdGgiKTsKKyAg
ICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL2dsX0ZyYWdDb2xvci9nLCAiZ2xGcmFnQ29s
b3IiKTsKKyAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL2dsX0ZyYWdEYXRhL2csICJn
bEZyYWdEYXRhIik7CisgICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC92b2lkXHMrP21h
aW5ccypcKC9nLCAoaGFzRHJhd0J1ZmZlcnNFeHRlbnNpb24gPyAiIiA6ICJvdXQgdmVjNCBnbEZy
YWdDb2xvcjtcbiIpICsgInZvaWQgbWFpbigiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHZhciBoYXNNdWx0aXZpZXdFeHRlbnNpb24gPSBkZWZpbmVzLmluZGV4T2Yo
IiNkZWZpbmUgTVVMVElWSUVXIikgIT09IC0xOworICAgICAgICAgICAgaWYgKGhhc011bHRpdmll
d0V4dGVuc2lvbikgeworICAgICAgICAgICAgICAgIHJldHVybiAiI2V4dGVuc2lvbiBHTF9PVlJf
bXVsdGl2aWV3MiA6IHJlcXVpcmVcbmxheW91dCAobnVtX3ZpZXdzID0gMikgaW47XG4iICsgY29k
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29kZTsKKyAgICB9
OworICAgIHJldHVybiBXZWJHTDJTaGFkZXJQcm9jZXNzb3I7Cit9KCkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL0VuZ2luZXMvV2ViR0wvd2ViR0xQaXBlbGluZUNvbnRleHQudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL0VuZ2luZXMvV2ViR0wvd2ViR0xQaXBlbGluZUNvbnRleHQudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogV2ViR0xQaXBlbGluZUNvbnRleHQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiV2ViR0xQaXBlbGluZUNvbnRleHQiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFdlYkdMUGlwZWxpbmVDb250ZXh0OyB9KTsKKy8qKiBAaGlkZGVuICovCit2YXIgV2ViR0xQaXBl
bGluZUNvbnRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24g
V2ViR0xQaXBlbGluZUNvbnRleHQoKSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGUgPSB7fTsK
KyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYkdMUGlwZWxpbmVDb250ZXh0LnBy
b3RvdHlwZSwgImlzQXN5bmMiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuaXNQYXJhbGxlbENvbXBpbGVkOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBl
LCAiaXNSZWFkeSIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5wcm9ncmFtKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQYXJhbGxlbENv
bXBpbGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuZ2luZS5faXNSZW5k
ZXJpbmdTdGF0ZUNvbXBpbGVkKHRoaXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBl
Ll9oYW5kbGVzU3BlY3RvclJlYnVpbGRDYWxsYmFjayA9IGZ1bmN0aW9uIChvbkNvbXBpbGVkKSB7
CisgICAgICAgIGlmIChvbkNvbXBpbGVkICYmIHRoaXMucHJvZ3JhbSkgeworICAgICAgICAgICAg
b25Db21waWxlZCh0aGlzLnByb2dyYW0pOworICAgICAgICB9CisgICAgfTsKKyAgICBXZWJHTFBp
cGVsaW5lQ29udGV4dC5wcm90b3R5cGUuX2ZpbGxFZmZlY3RJbmZvcm1hdGlvbiA9IGZ1bmN0aW9u
IChlZmZlY3QsIHVuaWZvcm1CdWZmZXJzTmFtZXMsIHVuaWZvcm1zTmFtZXMsIHVuaWZvcm1zLCBz
YW1wbGVyTGlzdCwgc2FtcGxlcnMsIGF0dHJpYnV0ZXNOYW1lcywgYXR0cmlidXRlcykgeworICAg
ICAgICB2YXIgZW5naW5lID0gdGhpcy5lbmdpbmU7CisgICAgICAgIGlmIChlbmdpbmUuc3VwcG9y
dHNVbmlmb3JtQnVmZmVycykgeworICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB1bmlmb3Jt
QnVmZmVyc05hbWVzKSB7CisgICAgICAgICAgICAgICAgZWZmZWN0LmJpbmRVbmlmb3JtQmxvY2so
bmFtZSwgdW5pZm9ybUJ1ZmZlcnNOYW1lc1tuYW1lXSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGVmZmVjdEF2YWlsYWJsZVVuaWZvcm1zID0gdGhpcy5lbmdpbmUuZ2V0
VW5pZm9ybXModGhpcywgdW5pZm9ybXNOYW1lcyk7CisgICAgICAgIGVmZmVjdEF2YWlsYWJsZVVu
aWZvcm1zLmZvckVhY2goZnVuY3Rpb24gKHVuaWZvcm0sIGluZGV4KSB7CisgICAgICAgICAgICB1
bmlmb3Jtc1t1bmlmb3Jtc05hbWVzW2luZGV4XV0gPSB1bmlmb3JtOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy5fdW5pZm9ybXMgPSB1bmlmb3JtczsKKyAgICAgICAgdmFyIGluZGV4OworICAg
ICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzYW1wbGVyTGlzdC5sZW5ndGg7IGluZGV4Kysp
IHsKKyAgICAgICAgICAgIHZhciBzYW1wbGVyID0gZWZmZWN0LmdldFVuaWZvcm0oc2FtcGxlckxp
c3RbaW5kZXhdKTsKKyAgICAgICAgICAgIGlmIChzYW1wbGVyID09IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICBzYW1wbGVyTGlzdC5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgICAgIGlu
ZGV4LS07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2FtcGxlckxpc3QuZm9y
RWFjaChmdW5jdGlvbiAobmFtZSwgaW5kZXgpIHsKKyAgICAgICAgICAgIHNhbXBsZXJzW25hbWVd
ID0gaW5kZXg7CisgICAgICAgIH0pOworICAgICAgICBhdHRyaWJ1dGVzLnB1c2guYXBwbHkoYXR0
cmlidXRlcywgZW5naW5lLmdldEF0dHJpYnV0ZXModGhpcywgYXR0cmlidXRlc05hbWVzKSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4K
KyAgICAgKiovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLmRpc3Bvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3VuaWZvcm1zID0ge307CisgICAgfTsKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIFdlYkdMUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5fY2FjaGVN
YXRyaXggPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIG1hdHJpeCkgeworICAgICAgICB2YXIgY2Fj
aGUgPSB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXTsKKyAgICAgICAgdmFyIGZsYWcgPSBt
YXRyaXgudXBkYXRlRmxhZzsKKyAgICAgICAgaWYgKGNhY2hlICE9PSB1bmRlZmluZWQgJiYgY2Fj
aGUgPT09IGZsYWcpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXSA9IGZsYWc7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBXZWJHTFBpcGVsaW5lQ29u
dGV4dC5wcm90b3R5cGUuX2NhY2hlRmxvYXQyID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB4LCB5
KSB7CisgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdOwor
ICAgICAgICBpZiAoIWNhY2hlKSB7CisgICAgICAgICAgICBjYWNoZSA9IFt4LCB5XTsKKyAgICAg
ICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gY2FjaGU7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICBpZiAoY2FjaGVbMF0gIT09IHgpIHsKKyAgICAgICAgICAgIGNhY2hlWzBdID0geDsK
KyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChjYWNo
ZVsxXSAhPT0geSkgeworICAgICAgICAgICAgY2FjaGVbMV0gPSB5OworICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIFdlYkdMUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5f
Y2FjaGVGbG9hdDMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIHgsIHksIHopIHsKKyAgICAgICAg
dmFyIGNhY2hlID0gdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV07CisgICAgICAgIGlmICgh
Y2FjaGUpIHsKKyAgICAgICAgICAgIGNhY2hlID0gW3gsIHksIHpdOworICAgICAgICAgICAgdGhp
cy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBjYWNoZTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGlm
IChjYWNoZVswXSAhPT0geCkgeworICAgICAgICAgICAgY2FjaGVbMF0gPSB4OworICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhY2hlWzFdICE9PSB5
KSB7CisgICAgICAgICAgICBjYWNoZVsxXSA9IHk7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FjaGVbMl0gIT09IHopIHsKKyAgICAgICAgICAg
IGNhY2hlWzJdID0gejsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBX
ZWJHTFBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuX2NhY2hlRmxvYXQ0ID0gZnVuY3Rpb24gKHVu
aWZvcm1OYW1lLCB4LCB5LCB6LCB3KSB7CisgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX3ZhbHVl
Q2FjaGVbdW5pZm9ybU5hbWVdOworICAgICAgICBpZiAoIWNhY2hlKSB7CisgICAgICAgICAgICBj
YWNoZSA9IFt4LCB5LCB6LCB3XTsKKyAgICAgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9y
bU5hbWVdID0gY2FjaGU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBpZiAoY2FjaGVbMF0gIT09IHgpIHsK
KyAgICAgICAgICAgIGNhY2hlWzBdID0geDsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChjYWNoZVsxXSAhPT0geSkgeworICAgICAgICAgICAgY2Fj
aGVbMV0gPSB5OworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNhY2hlWzJdICE9PSB6KSB7CisgICAgICAgICAgICBjYWNoZVsyXSA9IHo7CisgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FjaGVbM10g
IT09IHcpIHsKKyAgICAgICAgICAgIGNhY2hlWzNdID0gdzsKKyAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH07CisgICAg
LyoqCisgICAgICogU2V0cyBhbiBpbnRlcmdlciB2YWx1ZSBvbiBhIHVuaWZvcm0gdmFyaWFibGUu
CisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAq
IEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGlu
ZUNvbnRleHQucHJvdG90eXBlLnNldEludCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgdmFsdWUp
IHsKKyAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV07Cisg
ICAgICAgIGlmIChjYWNoZSAhPT0gdW5kZWZpbmVkICYmIGNhY2hlID09PSB2YWx1ZSkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5p
Zm9ybU5hbWVdID0gdmFsdWU7CisgICAgICAgIHRoaXMuZW5naW5lLnNldEludCh0aGlzLl91bmlm
b3Jtc1t1bmlmb3JtTmFtZV0sIHZhbHVlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMg
YW4gaW50IGFycmF5IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9y
bU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5IHRv
IGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHTFBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0
SW50QXJyYXkgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMu
X3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0
SW50QXJyYXkodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTZXRzIGFuIGludCBhcnJheSAyIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4g
KEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIsMyw0XSB3aWxsIHJl
c3VsdCBpbiBbWzEsMl0sWzMsNF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZv
cm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0
byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNl
dEludEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhp
cy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVuZ2luZS5z
ZXRJbnRBcnJheTIodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGludCBhcnJheSAzIG9uIGEgdW5pZm9ybSB2YXJpYWJs
ZS4gKEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIsMyw0LDUsNl0g
d2lsbCByZXN1bHQgaW4gW1sxLDIsM10sWzQsNSw2XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBA
cGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFy
cmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHTFBpcGVsaW5lQ29udGV4dC5w
cm90b3R5cGUuc2V0SW50QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgewor
ICAgICAgICB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXSA9IG51bGw7CisgICAgICAgIHRo
aXMuZW5naW5lLnNldEludEFycmF5Myh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIGFycmF5
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYW4gaW50IGFycmF5IDQgb24gYSB1bmlm
b3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEs
MiwzLDQsNSw2LDcsOF0gd2lsbCByZXN1bHQgaW4gW1sxLDIsMyw0XSxbNSw2LDcsOF1dIGluIHRo
ZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxl
LgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisgICAgV2Vi
R0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEludEFycmF5NCA9IGZ1bmN0aW9uICh1bmlm
b3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0g
PSBudWxsOworICAgICAgICB0aGlzLmVuZ2luZS5zZXRJbnRBcnJheTQodGhpcy5fdW5pZm9ybXNb
dW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGZs
b2F0IGFycmF5IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5h
bWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5IHRvIGJl
IHNldC4KKyAgICAgKi8KKyAgICBXZWJHTFBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0Rmxv
YXRBcnJheSA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhpcy5f
dmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVuZ2luZS5zZXRG
bG9hdEFycmF5KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgYXJyYXkpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU2V0cyBhbiBmbG9hdCBhcnJheSAyIG9uIGEgdW5pZm9ybSB2YXJpYWJs
ZS4gKEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIsMyw0XSB3aWxs
IHJlc3VsdCBpbiBbWzEsMl0sWzMsNF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVu
aWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJh
eSB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBl
LnNldEZsb2F0QXJyYXkyID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAg
ICB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXSA9IG51bGw7CisgICAgICAgIHRoaXMuZW5n
aW5lLnNldEZsb2F0QXJyYXkyKHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgYXJyYXkpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBmbG9hdCBhcnJheSAzIG9uIGEgdW5pZm9y
bSB2YXJpYWJsZS4gKEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIs
Myw0LDUsNl0gd2lsbCByZXN1bHQgaW4gW1sxLDIsM10sWzQsNSw2XV0gaW4gdGhlIHNoYWRlcikK
KyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICog
QHBhcmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHTFBpcGVsaW5l
Q29udGV4dC5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUs
IGFycmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsK
KyAgICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXRBcnJheTModGhpcy5fdW5pZm9ybXNbdW5pZm9y
bU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGZsb2F0IGFy
cmF5IDQgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmds
ZSBhcnJheSBlZy4gWzEsMiwzLDQsNSw2LDcsOF0gd2lsbCByZXN1bHQgaW4gW1sxLDIsMyw0XSxb
NSw2LDcsOF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUg
b2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisg
ICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEZsb2F0QXJyYXk0
ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aGlzLl92YWx1ZUNh
Y2hlW3VuaWZvcm1OYW1lXSA9IG51bGw7CisgICAgICAgIHRoaXMuZW5naW5lLnNldEZsb2F0QXJy
YXk0KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgYXJyYXkpOworICAgIH07CisgICAgLyoq
CisgICAgICogU2V0cyBhbiBhcnJheSBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBh
cmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJh
eSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJv
dG90eXBlLnNldEFycmF5ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAg
ICB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXSA9IG51bGw7CisgICAgICAgIHRoaXMuZW5n
aW5lLnNldEFycmF5KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgYXJyYXkpOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0cyBhbiBhcnJheSAyIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4g
KEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIsMyw0XSB3aWxsIHJl
c3VsdCBpbiBbWzEsMl0sWzMsNF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZv
cm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0
byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNl
dEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhpcy5f
dmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVuZ2luZS5zZXRB
cnJheTIodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIGFuIGFycmF5IDMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkg
aXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDQsNSw2XSB3aWxsIHJlc3Vs
dCBpbiBbWzEsMiwzXSxbNCw1LDZdXSBpbiB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlm
b3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkg
dG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIFdl
YkdMUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9y
bU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0g
bnVsbDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0QXJyYXkzKHRoaXMuX3VuaWZvcm1zW3VuaWZv
cm1OYW1lXSwgYXJyYXkpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBhcnJheSA0
IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4gKEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJy
YXkgZWcuIFsxLDIsMyw0LDUsNiw3LDhdIHdpbGwgcmVzdWx0IGluIFtbMSwyLDMsNF0sWzUsNiw3
LDhdXSBpbiB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRo
ZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAq
LworICAgIFdlYkdMUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRBcnJheTQgPSBmdW5jdGlv
biAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9y
bU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0QXJyYXk0KHRoaXMuX3VuaWZv
cm1zW3VuaWZvcm1OYW1lXSwgYXJyYXkpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBt
YXRyaWNlcyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1l
IE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBtYXRyaWNlcyBtYXRyaWNlcyB0
byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNl
dE1hdHJpY2VzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBtYXRyaWNlcykgeworICAgICAgICBp
ZiAoIW1hdHJpY2VzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVuZ2lu
ZS5zZXRNYXRyaWNlcyh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIG1hdHJpY2VzKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNldHMgbWF0cml4IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4K
KyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICog
QHBhcmFtIG1hdHJpeCBtYXRyaXggdG8gYmUgc2V0LgorICAgICAqLworICAgIFdlYkdMUGlwZWxp
bmVDb250ZXh0LnByb3RvdHlwZS5zZXRNYXRyaXggPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIG1h
dHJpeCkgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVNYXRyaXgodW5pZm9ybU5hbWUsIG1hdHJp
eCkpIHsKKyAgICAgICAgICAgIHRoaXMuZW5naW5lLnNldE1hdHJpY2VzKHRoaXMuX3VuaWZvcm1z
W3VuaWZvcm1OYW1lXSwgbWF0cml4LnRvQXJyYXkoKSk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHMgYSAzeDMgbWF0cml4IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4gKFNw
ZWljaWZpZWQgYXMgWzEsMiwzLDQsNSw2LDcsOCw5XSB3aWxsIHJlc3VsdCBpbiBbMSwyLDNdWzQs
NSw2XVs3LDgsOV0gbWF0cml4KQorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRo
ZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gbWF0cml4IG1hdHJpeCB0byBiZSBzZXQuCisgICAg
ICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldE1hdHJpeDN4MyA9IGZ1
bmN0aW9uICh1bmlmb3JtTmFtZSwgbWF0cml4KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVb
dW5pZm9ybU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0TWF0cml4M3gzKHRo
aXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgbWF0cml4KTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldHMgYSAyeDIgbWF0cml4IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4gKFNwZWljaWZpZWQg
YXMgWzEsMiwzLDRdIHdpbGwgcmVzdWx0IGluIFsxLDJdWzMsNF0gbWF0cml4KQorICAgICAqIEBw
YXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gbWF0
cml4IG1hdHJpeCB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQu
cHJvdG90eXBlLnNldE1hdHJpeDJ4MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgbWF0cml4KSB7
CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsKKyAgICAgICAg
dGhpcy5lbmdpbmUuc2V0TWF0cml4MngyKHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgbWF0
cml4KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYSBmbG9hdCBvbiBhIHVuaWZvcm0g
dmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxl
LgorICAgICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBiZSBzZXQuCisgICAgICogQHJldHVybnMg
dGhpcyBlZmZlY3QuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBl
LnNldEZsb2F0ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB2YWx1ZSkgeworICAgICAgICB2YXIg
Y2FjaGUgPSB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXTsKKyAgICAgICAgaWYgKGNhY2hl
ICE9PSB1bmRlZmluZWQgJiYgY2FjaGUgPT09IHZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSB2YWx1
ZTsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXQodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5h
bWVdLCB2YWx1ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgYm9vbGVhbiBvbiBh
IHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhl
IHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBib29sIHZhbHVlIHRvIGJlIHNldC4KKyAgICAgKi8K
KyAgICBXZWJHTFBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0Qm9vbCA9IGZ1bmN0aW9uICh1
bmlmb3JtTmFtZSwgYm9vbCkgeworICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl92YWx1ZUNhY2hl
W3VuaWZvcm1OYW1lXTsKKyAgICAgICAgaWYgKGNhY2hlICE9PSB1bmRlZmluZWQgJiYgY2FjaGUg
PT09IGJvb2wpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXSA9IGJvb2w7CisgICAgICAgIHRoaXMuZW5naW5lLnNl
dEJvb2wodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBib29sID8gMSA6IDApOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0cyBhIFZlY3RvcjIgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgor
ICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBA
cGFyYW0gdmVjdG9yMiB2ZWN0b3IyIHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHTFBpcGVs
aW5lQ29udGV4dC5wcm90b3R5cGUuc2V0VmVjdG9yMiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwg
dmVjdG9yMikgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDIodW5pZm9ybU5hbWUsIHZl
Y3RvcjIueCwgdmVjdG9yMi55KSkgeworICAgICAgICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXQy
KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgdmVjdG9yMi54LCB2ZWN0b3IyLnkpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgZmxvYXQyIG9uIGEgdW5pZm9y
bSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFi
bGUuCisgICAgICogQHBhcmFtIHggRmlyc3QgZmxvYXQgaW4gZmxvYXQyLgorICAgICAqIEBwYXJh
bSB5IFNlY29uZCBmbG9hdCBpbiBmbG9hdDIuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNv
bnRleHQucHJvdG90eXBlLnNldEZsb2F0MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgeCwgeSkg
eworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDIodW5pZm9ybU5hbWUsIHgsIHkpKSB7Cisg
ICAgICAgICAgICB0aGlzLmVuZ2luZS5zZXRGbG9hdDIodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5h
bWVdLCB4LCB5KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIFZl
Y3RvcjMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBO
YW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdmVjdG9yMyBWYWx1ZSB0byBiZSBz
ZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldFZlY3Rv
cjMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIHZlY3RvcjMpIHsKKyAgICAgICAgaWYgKHRoaXMu
X2NhY2hlRmxvYXQzKHVuaWZvcm1OYW1lLCB2ZWN0b3IzLngsIHZlY3RvcjMueSwgdmVjdG9yMy56
KSkgeworICAgICAgICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXQzKHRoaXMuX3VuaWZvcm1zW3Vu
aWZvcm1OYW1lXSwgdmVjdG9yMy54LCB2ZWN0b3IzLnksIHZlY3RvcjMueik7CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYSBmbG9hdDMgb24gYSB1bmlmb3JtIHZhcmlh
YmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAg
ICAgKiBAcGFyYW0geCBGaXJzdCBmbG9hdCBpbiBmbG9hdDMuCisgICAgICogQHBhcmFtIHkgU2Vj
b25kIGZsb2F0IGluIGZsb2F0My4KKyAgICAgKiBAcGFyYW0geiBUaGlyZCBmbG9hdCBpbiBmbG9h
dDMuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEZsb2F0
MyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgeCwgeSwgeikgeworICAgICAgICBpZiAodGhpcy5f
Y2FjaGVGbG9hdDModW5pZm9ybU5hbWUsIHgsIHksIHopKSB7CisgICAgICAgICAgICB0aGlzLmVu
Z2luZS5zZXRGbG9hdDModGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCB4LCB5LCB6KTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIFZlY3RvcjQgb24gYSB1bmlm
b3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJp
YWJsZS4KKyAgICAgKiBAcGFyYW0gdmVjdG9yNCBWYWx1ZSB0byBiZSBzZXQuCisgICAgICovCisg
ICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldFZlY3RvcjQgPSBmdW5jdGlvbiAo
dW5pZm9ybU5hbWUsIHZlY3RvcjQpIHsKKyAgICAgICAgaWYgKHRoaXMuX2NhY2hlRmxvYXQ0KHVu
aWZvcm1OYW1lLCB2ZWN0b3I0LngsIHZlY3RvcjQueSwgdmVjdG9yNC56LCB2ZWN0b3I0LncpKSB7
CisgICAgICAgICAgICB0aGlzLmVuZ2luZS5zZXRGbG9hdDQodGhpcy5fdW5pZm9ybXNbdW5pZm9y
bU5hbWVdLCB2ZWN0b3I0LngsIHZlY3RvcjQueSwgdmVjdG9yNC56LCB2ZWN0b3I0LncpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgZmxvYXQ0IG9uIGEgdW5pZm9y
bSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFi
bGUuCisgICAgICogQHBhcmFtIHggRmlyc3QgZmxvYXQgaW4gZmxvYXQ0LgorICAgICAqIEBwYXJh
bSB5IFNlY29uZCBmbG9hdCBpbiBmbG9hdDQuCisgICAgICogQHBhcmFtIHogVGhpcmQgZmxvYXQg
aW4gZmxvYXQ0LgorICAgICAqIEBwYXJhbSB3IEZvdXJ0aCBmbG9hdCBpbiBmbG9hdDQuCisgICAg
ICogQHJldHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRl
eHQucHJvdG90eXBlLnNldEZsb2F0NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgeCwgeSwgeiwg
dykgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDQodW5pZm9ybU5hbWUsIHgsIHksIHos
IHcpKSB7CisgICAgICAgICAgICB0aGlzLmVuZ2luZS5zZXRGbG9hdDQodGhpcy5fdW5pZm9ybXNb
dW5pZm9ybU5hbWVdLCB4LCB5LCB6LCB3KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0cyBhIENvbG9yMyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFt
IHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBjb2xvcjMg
VmFsdWUgdG8gYmUgc2V0LgorICAgICAqLworICAgIFdlYkdMUGlwZWxpbmVDb250ZXh0LnByb3Rv
dHlwZS5zZXRDb2xvcjMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGNvbG9yMykgeworICAgICAg
ICBpZiAodGhpcy5fY2FjaGVGbG9hdDModW5pZm9ybU5hbWUsIGNvbG9yMy5yLCBjb2xvcjMuZywg
Y29sb3IzLmIpKSB7CisgICAgICAgICAgICB0aGlzLmVuZ2luZS5zZXRGbG9hdDModGhpcy5fdW5p
Zm9ybXNbdW5pZm9ybU5hbWVdLCBjb2xvcjMuciwgY29sb3IzLmcsIGNvbG9yMy5iKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIENvbG9yNCBvbiBhIHVuaWZvcm0g
dmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxl
LgorICAgICAqIEBwYXJhbSBjb2xvcjMgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSBh
bHBoYSBBbHBoYSB2YWx1ZSB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNv
bnRleHQucHJvdG90eXBlLnNldENvbG9yNCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgY29sb3Iz
LCBhbHBoYSkgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDQodW5pZm9ybU5hbWUsIGNv
bG9yMy5yLCBjb2xvcjMuZywgY29sb3IzLmIsIGFscGhhKSkgeworICAgICAgICAgICAgdGhpcy5l
bmdpbmUuc2V0RmxvYXQ0KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgY29sb3IzLnIsIGNv
bG9yMy5nLCBjb2xvcjMuYiwgYWxwaGEpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXRzIGEgQ29sb3I0IG9uIGEgdW5pZm9ybSB2YXJpYWJsZQorICAgICAqIEBwYXJhbSB1
bmlmb3JtTmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZQorICAgICAqIEBwYXJh
bSBjb2xvcjQgZGVmaW5lcyB0aGUgdmFsdWUgdG8gYmUgc2V0CisgICAgICovCisgICAgV2ViR0xQ
aXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldERpcmVjdENvbG9yNCA9IGZ1bmN0aW9uICh1bmlm
b3JtTmFtZSwgY29sb3I0KSB7CisgICAgICAgIGlmICh0aGlzLl9jYWNoZUZsb2F0NCh1bmlmb3Jt
TmFtZSwgY29sb3I0LnIsIGNvbG9yNC5nLCBjb2xvcjQuYiwgY29sb3I0LmEpKSB7CisgICAgICAg
ICAgICB0aGlzLmVuZ2luZS5zZXREaXJlY3RDb2xvcjQodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5h
bWVdLCBjb2xvcjQpOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gV2ViR0xQaXBlbGlu
ZUNvbnRleHQ7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMvV2Vi
R1BVL3dlYmdwdUNvbnN0YW50cy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9FbmdpbmVzL1dlYkdQVS93ZWJncHVDb25zdGFu
dHMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBXZWJHUFVDb25zdGFudHMgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViR1BVQ29uc3RhbnRzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBXZWJHUFVDb25zdGFudHM7IH0pOworLyoqIEBoaWRkZW4gKi8KK3ZhciBXZWJHUFVDb25z
dGFudHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gV2ViR1BV
Q29uc3RhbnRzKCkgeworICAgIH0KKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQ3VsbE1vZGVfbm9u
ZSA9ICJub25lIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQ3VsbE1vZGVfZnJvbnQgPSAiZnJv
bnQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVDdWxsTW9kZV9iYWNrID0gImJhY2siOworICAg
IFdlYkdQVUNvbnN0YW50cy5HUFVGcm9udEZhY2VfY2N3ID0gImNjdyI7CisgICAgV2ViR1BVQ29u
c3RhbnRzLkdQVUZyb250RmFjZV9jdyA9ICJjdyI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUlu
ZGV4Rm9ybWF0X3VpbnQxNiA9ICJ1aW50MTYiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVJbmRl
eEZvcm1hdF91aW50MzIgPSAidWludDMyIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVTG9hZE9w
X2xvYWQgPSAibG9hZCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVN0b3JlT3Bfc3RvcmUgPSAi
c3RvcmUiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVTdG9yZU9wX2NsZWFyID0gImNsZWFyIjsK
KyAgICBXZWJHUFVDb25zdGFudHMuR1BVUHJpbWl0aXZlVG9wb2xvZ3lfcG9pbnRMaXN0ID0gInBv
aW50LWxpc3QiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVQcmltaXRpdmVUb3BvbG9neV9saW5l
TGlzdCA9ICJsaW5lLWxpc3QiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVQcmltaXRpdmVUb3Bv
bG9neV9saW5lU3RyaXAgPSAibGluZS1zdHJpcCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVBy
aW1pdGl2ZVRvcG9sb2d5X3RyaWFuZ2xlTGlzdCA9ICJ0cmlhbmdsZS1saXN0IjsKKyAgICBXZWJH
UFVDb25zdGFudHMuR1BVUHJpbWl0aXZlVG9wb2xvZ3lfdHJpYW5nbGVTdHJpcCA9ICJ0cmlhbmds
ZS1zdHJpcCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVEaW1lbnNpb25fMWQgPSAi
MWQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRGltZW5zaW9uXzJkID0gIjJkIjsK
KyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZURpbWVuc2lvbl8zZCA9ICIzZCI7CisgICAg
LyogTm9ybWFsIDggYml0IGZvcm1hdHMgKi8KKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVy
ZUZvcm1hdF9yOHVub3JtID0gInI4dW5vcm0iOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0
dXJlRm9ybWF0X3I4c25vcm0gPSAicjhzbm9ybSI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRl
eHR1cmVGb3JtYXRfcjh1aW50ID0gInI4dWludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRl
eHR1cmVGb3JtYXRfcjhzaW50ID0gInI4c2ludCI7CisgICAgLyogTm9ybWFsIDE2IGJpdCBmb3Jt
YXRzICovCisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRfcjE2dWludCA9ICJy
MTZ1aW50IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUZvcm1hdF9yMTZzaW50ID0g
InIxNnNpbnQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3IxNmZsb2F0
ID0gInIxNmZsb2F0IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUZvcm1hdF9yZzh1
bm9ybSA9ICJyZzh1bm9ybSI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRf
cmc4c25vcm0gPSAicmc4c25vcm0iOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9y
bWF0X3JnOHVpbnQgPSAicmc4dWludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVG
b3JtYXRfcmc4c2ludCA9ICJyZzhzaW50IjsKKyAgICAvKiBOb3JtYWwgMzIgYml0IGZvcm1hdHMg
Ki8KKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUZvcm1hdF9yMzJ1aW50ID0gInIzMnVp
bnQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3IzMnNpbnQgPSAicjMy
c2ludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRfcjMyZmxvYXQgPSAi
cjMyZmxvYXQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3JnMTZ1aW50
ID0gInJnMTZ1aW50IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUZvcm1hdF9yZzE2
c2ludCA9ICJyZzE2c2ludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRf
cmcxNmZsb2F0ID0gInJnMTZmbG9hdCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVG
b3JtYXRfcmdiYTh1bm9ybSA9ICJyZ2JhOHVub3JtIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BV
VGV4dHVyZUZvcm1hdF9yZ2JhOHVub3JtU3JnYiA9ICJyZ2JhOHVub3JtLXNyZ2IiOworICAgIFdl
YkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3JnYmE4c25vcm0gPSAicmdiYThzbm9ybSI7
CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRfcmdiYTh1aW50ID0gInJnYmE4
dWludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRfcmdiYThzaW50ID0g
InJnYmE4c2ludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRfYmdyYTh1
bm9ybSA9ICJiZ3JhOHVub3JtIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUZvcm1h
dF9iZ3JhOHVub3JtU3JnYiA9ICJiZ3JhOHVub3JtLXNyZ2IiOworICAgIC8qIFBhY2tlZCAzMiBi
aXQgZm9ybWF0cyAqLworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3JnYjEw
YTJ1bm9ybSA9ICJyZ2IxMGEydW5vcm0iOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJl
Rm9ybWF0X3JnMTFiMTBmbG9hdCA9ICJyZzExYjEwZmxvYXQiOworICAgIC8qIE5vcm1hbCA2NCBi
aXQgZm9ybWF0cyAqLworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3JnMzJ1
aW50ID0gInJnMzJ1aW50IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUZvcm1hdF9y
ZzMyc2ludCA9ICJyZzMyc2ludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3Jt
YXRfcmczMmZsb2F0ID0gInJnMzJmbG9hdCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1
cmVGb3JtYXRfcmdiYTE2dWludCA9ICJyZ2JhMTZ1aW50IjsKKyAgICBXZWJHUFVDb25zdGFudHMu
R1BVVGV4dHVyZUZvcm1hdF9yZ2JhMTZzaW50ID0gInJnYmExNnNpbnQiOworICAgIFdlYkdQVUNv
bnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3JnYmExNmZsb2F0ID0gInJnYmExNmZsb2F0IjsKKyAg
ICAvKiBOb3JtYWwgMTI4IGJpdCBmb3JtYXRzICovCisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRl
eHR1cmVGb3JtYXRfcmdiYTMydWludCA9ICJyZ2JhMzJ1aW50IjsKKyAgICBXZWJHUFVDb25zdGFu
dHMuR1BVVGV4dHVyZUZvcm1hdF9yZ2JhMzJzaW50ID0gInJnYmEzMnNpbnQiOworICAgIFdlYkdQ
VUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3JnYmEzMmZsb2F0ID0gInJnYmEzMmZsb2F0IjsK
KyAgICAvKiBEZXB0aCBhbmQgU3RlbmNpbCBmb3JtYXRzICovCisgICAgV2ViR1BVQ29uc3RhbnRz
LkdQVVRleHR1cmVGb3JtYXRfZGVwdGgzMmZsb2F0ID0gImRlcHRoMzJmbG9hdCI7CisgICAgV2Vi
R1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRfZGVwdGgyNHBsdXMgPSAiZGVwdGgyNHBsdXMi
OworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X2RlcHRoMjRwbHVzU3RlbmNp
bDggPSAiZGVwdGgyNHBsdXMtc3RlbmNpbDgiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0
dXJlVmlld0RpbWVuc2lvbl8xZCA9ICIxZCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1
cmVWaWV3RGltZW5zaW9uXzJkID0gIjJkIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVy
ZVZpZXdEaW1lbnNpb25fMmRBcnJheSA9ICIyZC1hcnJheSI7CisgICAgV2ViR1BVQ29uc3RhbnRz
LkdQVVRleHR1cmVWaWV3RGltZW5zaW9uX2N1YmUgPSAiY3ViZSI7CisgICAgV2ViR1BVQ29uc3Rh
bnRzLkdQVVRleHR1cmVWaWV3RGltZW5zaW9uX2N1YmVBcnJheSA9ICJjdWJlLWFycmF5IjsKKyAg
ICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fM2QgPSAiM2QiOworICAg
IFdlYkdQVUNvbnN0YW50cy5HUFVQb3dlclByZWZlcmVuY2VfbG93UG93ZXIgPSAibG93LXBvd2Vy
IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVUG93ZXJQcmVmZXJlbmNlX2hpZ2hQZXJmb3JtYW5j
ZSA9ICJoaWdoLXBlcmZvcm1hbmNlIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVydGV4Rm9y
bWF0X3VjaGFyMiA9ICJ1Y2hhcjIiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVWZXJ0ZXhGb3Jt
YXRfdWNoYXI0ID0gInVjaGFyNCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1h
dF9jaGFyMiA9ICJjaGFyMiI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF9j
aGFyNCA9ICJjaGFyNCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF91Y2hh
cjJub3JtID0gInVjaGFyMm5vcm0iOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVWZXJ0ZXhGb3Jt
YXRfdWNoYXI0bm9ybSA9ICJ1Y2hhcjRub3JtIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVy
dGV4Rm9ybWF0X2NoYXIybm9ybSA9ICJjaGFyMm5vcm0iOworICAgIFdlYkdQVUNvbnN0YW50cy5H
UFVWZXJ0ZXhGb3JtYXRfY2hhcjRub3JtID0gImNoYXI0bm9ybSI7CisgICAgV2ViR1BVQ29uc3Rh
bnRzLkdQVVZlcnRleEZvcm1hdF91c2hvcnQyID0gInVzaG9ydDIiOworICAgIFdlYkdQVUNvbnN0
YW50cy5HUFVWZXJ0ZXhGb3JtYXRfdXNob3J0NCA9ICJ1c2hvcnQ0IjsKKyAgICBXZWJHUFVDb25z
dGFudHMuR1BVVmVydGV4Rm9ybWF0X3Nob3J0MiA9ICJzaG9ydDIiOworICAgIFdlYkdQVUNvbnN0
YW50cy5HUFVWZXJ0ZXhGb3JtYXRfc2hvcnQ0ID0gInNob3J0NCI7CisgICAgV2ViR1BVQ29uc3Rh
bnRzLkdQVVZlcnRleEZvcm1hdF91c2hvcnQybm9ybSA9ICJ1c2hvcnQybm9ybSI7CisgICAgV2Vi
R1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF91c2hvcnQ0bm9ybSA9ICJ1c2hvcnQ0bm9ybSI7
CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF9zaG9ydDJub3JtID0gInNob3J0
Mm5vcm0iOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVWZXJ0ZXhGb3JtYXRfc2hvcnQ0bm9ybSA9
ICJzaG9ydDRub3JtIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVydGV4Rm9ybWF0X2hhbGYy
ID0gImhhbGYyIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVydGV4Rm9ybWF0X2hhbGY0ID0g
ImhhbGY0IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVydGV4Rm9ybWF0X2Zsb2F0ID0gImZs
b2F0IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVydGV4Rm9ybWF0X2Zsb2F0MiA9ICJmbG9h
dDIiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVWZXJ0ZXhGb3JtYXRfZmxvYXQzID0gImZsb2F0
MyI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF9mbG9hdDQgPSAiZmxvYXQ0
IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVydGV4Rm9ybWF0X3VpbnQgPSAidWludCI7Cisg
ICAgV2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF91aW50MiA9ICJ1aW50MiI7CisgICAg
V2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF91aW50MyA9ICJ1aW50MyI7CisgICAgV2Vi
R1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF91aW50NCA9ICJ1aW50NCI7CisgICAgV2ViR1BV
Q29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF9pbnQgPSAiaW50IjsKKyAgICBXZWJHUFVDb25zdGFu
dHMuR1BVVmVydGV4Rm9ybWF0X2ludDIgPSAiaW50MiI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQ
VVZlcnRleEZvcm1hdF9pbnQzID0gImludDMiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVWZXJ0
ZXhGb3JtYXRfaW50NCA9ICJpbnQ0IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQnVmZmVyVXNh
Z2VfTk9ORSA9IDA7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJ1ZmZlclVzYWdlX01BUF9SRUFE
ID0gMTsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQnVmZmVyVXNhZ2VfTUFQX1dSSVRFID0gMjsK
KyAgICBXZWJHUFVDb25zdGFudHMuR1BVQnVmZmVyVXNhZ2VfVFJBTlNGRVJfU1JDID0gNDsKKyAg
ICBXZWJHUFVDb25zdGFudHMuR1BVQnVmZmVyVXNhZ2VfVFJBTlNGRVJfRFNUID0gODsKKyAgICBX
ZWJHUFVDb25zdGFudHMuR1BVQnVmZmVyVXNhZ2VfSU5ERVggPSAxNjsKKyAgICBXZWJHUFVDb25z
dGFudHMuR1BVQnVmZmVyVXNhZ2VfVkVSVEVYID0gMzI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQ
VUJ1ZmZlclVzYWdlX1VOSUZPUk0gPSA2NDsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQnVmZmVy
VXNhZ2VfU1RPUkFHRSA9IDEyODsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQ29sb3JXcml0ZUJp
dHNfTk9ORSA9IDA7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUNvbG9yV3JpdGVCaXRzX1JFRCA9
IDE7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUNvbG9yV3JpdGVCaXRzX0dSRUVOID0gMjsKKyAg
ICBXZWJHUFVDb25zdGFudHMuR1BVQ29sb3JXcml0ZUJpdHNfQkxVRSA9IDQ7CisgICAgV2ViR1BV
Q29uc3RhbnRzLkdQVUNvbG9yV3JpdGVCaXRzX0FMUEhBID0gODsKKyAgICBXZWJHUFVDb25zdGFu
dHMuR1BVQ29sb3JXcml0ZUJpdHNfQUxMID0gMTU7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVNo
YWRlclN0YWdlQml0X05PTkUgPSAwOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVTaGFkZXJTdGFn
ZUJpdF9WRVJURVggPSAxOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVTaGFkZXJTdGFnZUJpdF9G
UkFHTUVOVCA9IDI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVNoYWRlclN0YWdlQml0X0NPTVBV
VEUgPSA0OworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlQXNwZWN0X2FsbCA9ICJhbGwi
OworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlQXNwZWN0X2RlcHRoT25seSA9ICJkZXB0
aC1vbmx5IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUFzcGVjdF9zdGVuY2lsT25s
eSA9ICJzdGVuY2lsLW9ubHkiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlVXNhZ2Vf
Tk9ORSA9IDA7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVVc2FnZV9DT1BZX1NSQyA9
IDE7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVVc2FnZV9DT1BZX0RTVCA9IDI7Cisg
ICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVVc2FnZV9TQU1QTEVEID0gNDsKKyAgICBXZWJH
UFVDb25zdGFudHMuR1BVVGV4dHVyZVVzYWdlX1NUT1JBR0UgPSA4OworICAgIFdlYkdQVUNvbnN0
YW50cy5HUFVUZXh0dXJlVXNhZ2VfT1VUUFVUX0FUVEFDSE1FTlQgPSAxNjsKKyAgICBXZWJHUFVD
b25zdGFudHMuR1BVQ29tcGFyZUZ1bmN0aW9uX25ldmVyID0gIm5ldmVyIjsKKyAgICBXZWJHUFVD
b25zdGFudHMuR1BVQ29tcGFyZUZ1bmN0aW9uX2xlc3MgPSAibGVzcyI7CisgICAgV2ViR1BVQ29u
c3RhbnRzLkdQVUNvbXBhcmVGdW5jdGlvbl9lcXVhbCA9ICJlcXVhbCI7CisgICAgV2ViR1BVQ29u
c3RhbnRzLkdQVUNvbXBhcmVGdW5jdGlvbl9sZXNzRXF1YWwgPSAibGVzc0VxdWFsIjsKKyAgICBX
ZWJHUFVDb25zdGFudHMuR1BVQ29tcGFyZUZ1bmN0aW9uX2dyZWF0ZXIgPSAiZ3JlYXRlciI7Cisg
ICAgV2ViR1BVQ29uc3RhbnRzLkdQVUNvbXBhcmVGdW5jdGlvbl9ub3RFcXVhbCA9ICJub3RFcXVh
bCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUNvbXBhcmVGdW5jdGlvbl9ncmVhdGVyRXF1YWwg
PSAiZ3JlYXRlckVxdWFsIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQ29tcGFyZUZ1bmN0aW9u
X2Fsd2F5cyA9ICJhbHdheXMiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVCaW5kaW5nVHlwZV91
bmlmb3JtQnVmZmVyID0gInVuaWZvcm0tYnVmZmVyIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BV
QmluZGluZ1R5cGVfc2FtcGxlciA9ICJzYW1wbGVyIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BV
QmluZGluZ1R5cGVfc2FtcGxlZFRleHR1cmUgPSAic2FtcGxlZC10ZXh0dXJlIjsKKyAgICBXZWJH
UFVDb25zdGFudHMuR1BVQmluZGluZ1R5cGVfc3RvcmFnZUJ1ZmZlciA9ICJzdG9yYWdlLWJ1ZmZl
ciI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUlucHV0U3RlcE1vZGVfdmVydGV4ID0gInZlcnRl
eCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUlucHV0U3RlcE1vZGVfaW5zdGFuY2UgPSAiaW5z
dGFuY2UiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVTdGVuY2lsT3BlcmF0aW9uX2tlZXAgPSAi
a2VlcCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVN0ZW5jaWxPcGVyYXRpb25femVybyA9ICJ6
ZXJvIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVU3RlbmNpbE9wZXJhdGlvbl9yZXBsYWNlID0g
InJlcGxhY2UiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVTdGVuY2lsT3BlcmF0aW9uX2ludmVy
dCA9ICJpbnZlcnQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVTdGVuY2lsT3BlcmF0aW9uX2lu
Y3JlbWVudENsYW1wID0gImluY3JlbWVudC1jbGFtcCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQ
VVN0ZW5jaWxPcGVyYXRpb25fZGVjcmVtZW50Q2xhbXAgPSAiZGVjcmVtZW50LWNsYW1wIjsKKyAg
ICBXZWJHUFVDb25zdGFudHMuR1BVU3RlbmNpbE9wZXJhdGlvbl9pbmNyZW1lbnRXcmFwID0gImlu
Y3JlbWVudC13cmFwIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVU3RlbmNpbE9wZXJhdGlvbl9k
ZWNyZW1lbnRXcmFwID0gImRlY3JlbWVudC13cmFwIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BV
RmlsdGVyTW9kZV9uZWFyZXN0ID0gIm5lYXJlc3QiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVG
aWx0ZXJNb2RlX2xpbmVhciA9ICJsaW5lYXIiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVBZGRy
ZXNzTW9kZV9jbGFtcFRvRWRnZSA9ICJjbGFtcC10by1lZGdlIjsKKyAgICBXZWJHUFVDb25zdGFu
dHMuR1BVQWRkcmVzc01vZGVfcmVwZWF0ID0gInJlcGVhdCI7CisgICAgV2ViR1BVQ29uc3RhbnRz
LkdQVUFkZHJlc3NNb2RlX21pcnJvclJlcGVhdCA9ICJtaXJyb3ItcmVwZWF0IjsKKyAgICBXZWJH
UFVDb25zdGFudHMuR1BVQmxlbmRGYWN0b3JfemVybyA9ICJ6ZXJvIjsKKyAgICBXZWJHUFVDb25z
dGFudHMuR1BVQmxlbmRGYWN0b3Jfb25lID0gIm9uZSI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQ
VUJsZW5kRmFjdG9yX3NyY0NvbG9yID0gInNyYy1jb2xvciI7CisgICAgV2ViR1BVQ29uc3RhbnRz
LkdQVUJsZW5kRmFjdG9yX29uZU1pbnVzU3JjQ29sb3IgPSAib25lLW1pbnVzLXNyYy1jb2xvciI7
CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5kRmFjdG9yX3NyY0FscGhhID0gInNyYy1hbHBo
YSI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5kRmFjdG9yX29uZU1pbnVzU3JjQWxwaGEg
PSAib25lLW1pbnVzLXNyYy1hbHBoYSI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5kRmFj
dG9yX2RzdENvbG9yID0gImRzdC1jb2xvciI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5k
RmFjdG9yX29uZU1pbnVzRHN0Q29sb3IgPSAib25lLW1pbnVzLWRzdC1jb2xvciI7CisgICAgV2Vi
R1BVQ29uc3RhbnRzLkdQVUJsZW5kRmFjdG9yX2RzdEFscGhhID0gImRzdC1hbHBoYSI7CisgICAg
V2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5kRmFjdG9yX29uZU1pbnVzRHN0QWxwaGEgPSAib25lLW1p
bnVzLWRzdC1hbHBoYSI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5kRmFjdG9yX3NyY0Fs
cGhhU2F0dXJhdGVkID0gInNyYy1hbHBoYS1zYXR1cmF0ZWQiOworICAgIFdlYkdQVUNvbnN0YW50
cy5HUFVCbGVuZEZhY3Rvcl9ibGVuZENvbG9yID0gImJsZW5kLWNvbG9yIjsKKyAgICBXZWJHUFVD
b25zdGFudHMuR1BVQmxlbmRGYWN0b3Jfb25lTWludXNCbGVuZENvbG9yID0gIm9uZS1taW51cy1i
bGVuZC1jb2xvciI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5kT3BlcmF0aW9uX2FkZCA9
ICJhZGQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVCbGVuZE9wZXJhdGlvbl9zdWJzdHJhY3Qg
PSAic3VidHJhY3QiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVCbGVuZE9wZXJhdGlvbl9yZXZl
cnNlU3VidHJhY3QgPSAicmV2ZXJzZS1zdWJ0cmFjdCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQ
VUJsZW5kT3BlcmF0aW9uX21pbiA9ICJtaW4iOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVCbGVu
ZE9wZXJhdGlvbl9tYXggPSAibWF4IjsKKyAgICByZXR1cm4gV2ViR1BVQ29uc3RhbnRzOworfSgp
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL1dlYkdQVS93ZWJncHVQaXBl
bGluZUNvbnRleHQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5lcy9XZWJHUFUvd2ViZ3B1UGlwZWxpbmVD
b250ZXh0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogV2ViR1BVUGlwZWxpbmVDb250ZXh0
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkdQVVBpcGVsaW5lQ29u
dGV4dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViR1BVUGlwZWxpbmVDb250ZXh0OyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX3VuaWZvcm1CdWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVy
aWFscy91bmlmb3JtQnVmZmVyICovICIuL01hdGVyaWFscy91bmlmb3JtQnVmZmVyLnRzIik7CisK
K3ZhciBfdW5pZm9ybVNpemVzID0geworICAgICJmbG9hdCI6IDEsCisgICAgInZlYzIiOiAyLAor
ICAgICJ2ZWMzIjogMywKKyAgICAidmVjNCI6IDQsCisgICAgIm1hdDIiOiA0LAorICAgICJtYXQz
IjogOSwKKyAgICAibWF0NCI6IDE2Cit9OworLyoqIEBoaWRkZW4gKi8KK3ZhciBXZWJHUFVQaXBl
bGluZUNvbnRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24g
V2ViR1BVUGlwZWxpbmVDb250ZXh0KHNoYWRlclByb2Nlc3NpbmdDb250ZXh0LCBlbmdpbmUpIHsK
KyAgICAgICAgdGhpcy5zYW1wbGVycyA9IHt9OworICAgICAgICBpZiAoc2hhZGVyUHJvY2Vzc2lu
Z0NvbnRleHQpIHsKKyAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQXR0cmlidXRlcyA9IHNoYWRl
clByb2Nlc3NpbmdDb250ZXh0LmF2YWlsYWJsZUF0dHJpYnV0ZXM7CisgICAgICAgICAgICB0aGlz
LmF2YWlsYWJsZVVCT3MgPSBzaGFkZXJQcm9jZXNzaW5nQ29udGV4dC5hdmFpbGFibGVVQk9zOwor
ICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVTYW1wbGVycyA9IHNoYWRlclByb2Nlc3NpbmdDb250
ZXh0LmF2YWlsYWJsZVNhbXBsZXJzOworICAgICAgICAgICAgdGhpcy5vcmRlcmVkQXR0cmlidXRl
cyA9IHNoYWRlclByb2Nlc3NpbmdDb250ZXh0Lm9yZGVyZWRBdHRyaWJ1dGVzOworICAgICAgICAg
ICAgdGhpcy5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzID0gc2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQu
b3JkZXJlZFVCT3NBbmRTYW1wbGVyczsKKyAgICAgICAgICAgIHRoaXMubGVmdE92ZXJVbmlmb3Jt
cyA9IHNoYWRlclByb2Nlc3NpbmdDb250ZXh0LmxlZnRPdmVyVW5pZm9ybXM7CisgICAgICAgICAg
ICB0aGlzLmxlZnRPdmVyVW5pZm9ybXNCeU5hbWUgPSB7fTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZSwg
ImlzQXN5bmMiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
V2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZSwgImlzUmVhZHkiLCB7CisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRoaXMuc3RhZ2VzKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4dC5wcm90
b3R5cGUuX2hhbmRsZXNTcGVjdG9yUmVidWlsZENhbGxiYWNrID0gZnVuY3Rpb24gKG9uQ29tcGls
ZWQpIHsKKyAgICAgICAgLy8gTm90aGluZyB0byBkbyB5ZXQgZm9yIHNwZWN0b3IuCisgICAgfTsK
KyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLl9maWxsRWZmZWN0SW5mb3JtYXRp
b24gPSBmdW5jdGlvbiAoZWZmZWN0LCB1bmlmb3JtQnVmZmVyc05hbWVzLCB1bmlmb3Jtc05hbWVz
LCB1bmlmb3Jtcywgc2FtcGxlckxpc3QsIHNhbXBsZXJzLCBhdHRyaWJ1dGVzTmFtZXMsIGF0dHJp
YnV0ZXMpIHsKKyAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMuZW5naW5lOworICAgICAgICAvLyBU
T0RPIFdFQkdQVS4gQ2xlYW51cCBTRUIgb24gdGhpcyBlbnRpcmUgZnVuY3Rpb24uIFNob3VsZCBu
b3QgbmVlZCBhbnl0aGluZyBpbiBoZXJlIG9yIGFsbW9zdC4KKyAgICAgICAgdmFyIGVmZmVjdEF2
YWlsYWJsZVVuaWZvcm1zID0gZW5naW5lLmdldFVuaWZvcm1zKHRoaXMsIHVuaWZvcm1zTmFtZXMp
OworICAgICAgICBlZmZlY3RBdmFpbGFibGVVbmlmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uICh1bmlm
b3JtLCBpbmRleCkgeworICAgICAgICAgICAgdW5pZm9ybXNbdW5pZm9ybXNOYW1lc1tpbmRleF1d
ID0gdW5pZm9ybTsKKyAgICAgICAgfSk7CisgICAgICAgIC8vIFByZXZlbnQgTWVtb3J5IExlYWsg
YnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBzdHJpbmcsIHJlZmVyIHRvIHRoZSBzdHJpbmcgaW5z
dGVhZCBvZiBjb3B5LgorICAgICAgICBlZmZlY3QuX2ZyYWdtZW50U291cmNlQ29kZSA9ICIiOwor
ICAgICAgICBlZmZlY3QuX3ZlcnRleFNvdXJjZUNvZGUgPSAiIjsKKyAgICAgICAgLy8gdGhpcy5f
ZnJhZ21lbnRTb3VyY2VDb2RlT3ZlcnJpZGUgPSAiIjsKKyAgICAgICAgLy8gdGhpcy5fdmVydGV4
U291cmNlQ29kZU92ZXJyaWRlID0gIiI7CisgICAgICAgIHZhciBmb3VuZFNhbXBsZXJzID0gdGhp
cy5hdmFpbGFibGVTYW1wbGVyczsKKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICBmb3IgKGlu
ZGV4ID0gMDsgaW5kZXggPCBzYW1wbGVyTGlzdC5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgIHZhciBuYW1lXzEgPSBzYW1wbGVyTGlzdFtpbmRleF07CisgICAgICAgICAgICB2YXIgc2Ft
cGxlciA9IGZvdW5kU2FtcGxlcnNbc2FtcGxlckxpc3RbaW5kZXhdXTsKKyAgICAgICAgICAgIGlm
IChzYW1wbGVyID09IG51bGwgfHwgc2FtcGxlciA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
ICAgICBzYW1wbGVyTGlzdC5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgICAgIGluZGV4
LS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
YW1wbGVyc1tuYW1lXzFdID0gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgYXR0cmlidXRlcy5wdXNoLmFwcGx5KGF0dHJpYnV0ZXMsIGVuZ2luZS5nZXRBdHRyaWJ1dGVz
KHRoaXMsIGF0dHJpYnV0ZXNOYW1lcykpOworICAgICAgICAvLyBCdWlsZCB0aGUgdW5pZm9ybSBs
YXlvdXQgZm9yIHRoZSBsZWZ0IG92ZXIgdW5pZm9ybXMuCisgICAgICAgIHRoaXMuYnVpbGRVbmlm
b3JtTGF5b3V0KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCdWlsZCB0aGUgdW5pZm9ybSBi
dWZmZXIgdXNlZCBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICovCisgICAgV2ViR1BVUGlwZWxpbmVD
b250ZXh0LnByb3RvdHlwZS5idWlsZFVuaWZvcm1MYXlvdXQgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICghdGhpcy5sZWZ0T3ZlclVuaWZvcm1zLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZlciA9IG5ldyBfTWF0ZXJp
YWxzX3VuaWZvcm1CdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVW5pZm9ybUJ1
ZmZlciJdKHRoaXMuZW5naW5lKTsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMu
bGVmdE92ZXJVbmlmb3JtczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZh
ciBsZWZ0T3ZlclVuaWZvcm0gPSBfYVtfaV07CisgICAgICAgICAgICB2YXIgc2l6ZSA9IF91bmlm
b3JtU2l6ZXNbbGVmdE92ZXJVbmlmb3JtLnR5cGVdOworICAgICAgICAgICAgdGhpcy51bmlmb3Jt
QnVmZmVyLmFkZFVuaWZvcm0obGVmdE92ZXJVbmlmb3JtLm5hbWUsIHNpemUsIGxlZnRPdmVyVW5p
Zm9ybS5sZW5ndGgpOworICAgICAgICAgICAgLy8gVE9ETyBXRUJHUFUuIFJlcGxhY2Ugd2l0aCBp
bmZvIGZyb20gdW5pZm9ybSBidWZmZXIgY2xhc3MKKyAgICAgICAgICAgIHRoaXMubGVmdE92ZXJV
bmlmb3Jtc0J5TmFtZVtsZWZ0T3ZlclVuaWZvcm0ubmFtZV0gPSBsZWZ0T3ZlclVuaWZvcm0udHlw
ZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnVuaWZvcm1CdWZmZXIuY3JlYXRlKCk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAg
ICAgKiovCisgICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy51bmlmb3JtQnVmZmVyKSB7CisgICAgICAgICAg
ICB0aGlzLnVuaWZvcm1CdWZmZXIuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIGFuIGludGVyZ2VyIHZhbHVlIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4K
KyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICog
QHBhcmFtIHZhbHVlIFZhbHVlIHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHUFVQaXBlbGlu
ZUNvbnRleHQucHJvdG90eXBlLnNldEludCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgdmFsdWUp
IHsKKyAgICAgICAgdGhyb3cgInNldEludCBub3QgU3VwcG9ydGVkIGluIExlZnRPdmVyIFVCTy4i
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBpbnQgYXJyYXkgb24gYSB1bmlmb3Jt
IHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJs
ZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqLworICAgIFdl
YkdQVVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0SW50QXJyYXkgPSBmdW5jdGlvbiAodW5p
Zm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRocm93ICJzZXRJbnRBcnJheSBub3QgU3VwcG9y
dGVkIGluIExlZnRPdmVyIFVCTy4iOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBp
bnQgYXJyYXkgMiBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJheSBpcyBzcGVjaWZpZWQgYXMg
c2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNF0gd2lsbCByZXN1bHQgaW4gW1sxLDJdLFszLDRdXSBp
biB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJp
YWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqLworICAg
IFdlYkdQVVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0SW50QXJyYXkyID0gZnVuY3Rpb24g
KHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aHJvdyAic2V0SW50QXJyYXkyIG5vdCBT
dXBwb3J0ZWQgaW4gTGVmdE92ZXIgVUJPLiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRz
IGFuIGludCBhcnJheSAzIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4gKEFycmF5IGlzIHNwZWNpZmll
ZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIsMyw0LDUsNl0gd2lsbCByZXN1bHQgaW4gW1sxLDIs
M10sWzQsNSw2XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFt
ZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4K
KyAgICAgKi8KKyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEludEFycmF5
MyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhyb3cgInNldElu
dEFycmF5MyBub3QgU3VwcG9ydGVkIGluIExlZnRPdmVyIFVCTy4iOworICAgIH07CisgICAgLyoq
CisgICAgICogU2V0cyBhbiBpbnQgYXJyYXkgNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJh
eSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNCw1LDYsNyw4XSB3aWxs
IHJlc3VsdCBpbiBbWzEsMiwzLDRdLFs1LDYsNyw4XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBA
cGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFy
cmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQu
cHJvdG90eXBlLnNldEludEFycmF5NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsK
KyAgICAgICAgdGhyb3cgInNldEludEFycmF5NCBub3QgU3VwcG9ydGVkIGluIExlZnRPdmVyIFVC
Ty4iOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBmbG9hdCBhcnJheSBvbiBhIHVu
aWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZh
cmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisg
ICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRGbG9hdEFycmF5ID0gZnVuY3Rp
b24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICBpZiAoIXRoaXMudW5pZm9ybUJ1ZmZl
ciB8fCAhdGhpcy5sZWZ0T3ZlclVuaWZvcm1zQnlOYW1lW3VuaWZvcm1OYW1lXSkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZlci51cGRh
dGVGbG9hdEFycmF5KHVuaWZvcm1OYW1lLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIGFuIGZsb2F0IGFycmF5IDIgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMg
c3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDRdIHdpbGwgcmVzdWx0IGluIFtb
MSwyXSxbMyw0XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFt
ZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4K
KyAgICAgKi8KKyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEZsb2F0QXJy
YXkyID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aHJvdyAic2V0
RmxvYXRBcnJheTIgbm90IFN1cHBvcnRlZCBpbiBMZWZ0T3ZlciBVQk8uIjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHMgYW4gZmxvYXQgYXJyYXkgMyBvbiBhIHVuaWZvcm0gdmFyaWFibGUu
IChBcnJheSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNCw1LDZdIHdp
bGwgcmVzdWx0IGluIFtbMSwyLDNdLFs0LDUsNl1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBh
cmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJh
eSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnBy
b3RvdHlwZS5zZXRGbG9hdEFycmF5MyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsK
KyAgICAgICAgdGhyb3cgInNldEZsb2F0QXJyYXkzIG5vdCBTdXBwb3J0ZWQgaW4gTGVmdE92ZXIg
VUJPLiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGZsb2F0IGFycmF5IDQgb24g
YSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBl
Zy4gWzEsMiwzLDQsNSw2LDcsOF0gd2lsbCByZXN1bHQgaW4gW1sxLDIsMyw0XSxbNSw2LDcsOF1d
IGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZh
cmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisg
ICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRGbG9hdEFycmF5NCA9IGZ1bmN0
aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhyb3cgInNldEZsb2F0QXJyYXk0
IG5vdCBTdXBwb3J0ZWQgaW4gTGVmdE92ZXIgVUJPLiI7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIGFuIGFycmF5IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5p
Zm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5
IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBl
LnNldEFycmF5ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aHJv
dyAic2V0QXJyYXkgbm90IFN1cHBvcnRlZCBpbiBMZWZ0T3ZlciBVQk8uIjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHMgYW4gYXJyYXkgMiBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJh
eSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNF0gd2lsbCByZXN1bHQg
aW4gW1sxLDJdLFszLDRdXSBpbiB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFt
ZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUg
c2V0LgorICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0QXJy
YXkyID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aHJvdyAic2V0
QXJyYXkyIG5vdCBTdXBwb3J0ZWQgaW4gTGVmdE92ZXIgVUJPLiI7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTZXRzIGFuIGFycmF5IDMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMg
c3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDQsNSw2XSB3aWxsIHJlc3VsdCBp
biBbWzEsMiwzXSxbNCw1LDZdXSBpbiB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlmb3Jt
TmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8g
YmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIFdlYkdQ
VVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm1O
YW1lLCBhcnJheSkgeworICAgICAgICB0aHJvdyAic2V0QXJyYXkzIG5vdCBTdXBwb3J0ZWQgaW4g
TGVmdE92ZXIgVUJPLiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGFycmF5IDQg
b24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJh
eSBlZy4gWzEsMiwzLDQsNSw2LDcsOF0gd2lsbCByZXN1bHQgaW4gW1sxLDIsMyw0XSxbNSw2LDcs
OF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhl
IHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAgICov
CisgICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRBcnJheTQgPSBmdW5jdGlv
biAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRocm93ICJzZXRBcnJheTQgbm90IFN1
cHBvcnRlZCBpbiBMZWZ0T3ZlciBVQk8uIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMg
bWF0cmljZXMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFt
ZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gbWF0cmljZXMgbWF0cmljZXMg
dG8gYmUgc2V0LgorICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUu
c2V0TWF0cmljZXMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIG1hdHJpY2VzKSB7CisgICAgICAg
IGlmICghdGhpcy51bmlmb3JtQnVmZmVyIHx8ICF0aGlzLmxlZnRPdmVyVW5pZm9ybXNCeU5hbWVb
dW5pZm9ybU5hbWVdKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy51bmlmb3JtQnVmZmVyLnVwZGF0ZU1hdHJpY2VzKHVuaWZvcm1OYW1lLCBtYXRyaWNlcyk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIG1hdHJpeCBvbiBhIHVuaWZvcm0gdmFyaWFi
bGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAg
ICAqIEBwYXJhbSBtYXRyaXggbWF0cml4IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHUFVQ
aXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldE1hdHJpeCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFt
ZSwgbWF0cml4KSB7CisgICAgICAgIGlmICghdGhpcy51bmlmb3JtQnVmZmVyIHx8ICF0aGlzLmxl
ZnRPdmVyVW5pZm9ybXNCeU5hbWVbdW5pZm9ybU5hbWVdKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy51bmlmb3JtQnVmZmVyLnVwZGF0ZU1hdHJpeCh1bmlm
b3JtTmFtZSwgbWF0cml4KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYSAzeDMgbWF0
cml4IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4gKFNwZWljaWZpZWQgYXMgWzEsMiwzLDQsNSw2LDcs
OCw5XSB3aWxsIHJlc3VsdCBpbiBbMSwyLDNdWzQsNSw2XVs3LDgsOV0gbWF0cml4KQorICAgICAq
IEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0g
bWF0cml4IG1hdHJpeCB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR1BVUGlwZWxpbmVDb250
ZXh0LnByb3RvdHlwZS5zZXRNYXRyaXgzeDMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIG1hdHJp
eCkgeworICAgICAgICBpZiAoIXRoaXMudW5pZm9ybUJ1ZmZlciB8fCAhdGhpcy5sZWZ0T3ZlclVu
aWZvcm1zQnlOYW1lW3VuaWZvcm1OYW1lXSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZlci51cGRhdGVNYXRyaXgzeDModW5pZm9ybU5h
bWUsIG1hdHJpeCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgMngyIG1hdHJpeCBv
biBhIHVuaWZvcm0gdmFyaWFibGUuIChTcGVpY2lmaWVkIGFzIFsxLDIsMyw0XSB3aWxsIHJlc3Vs
dCBpbiBbMSwyXVszLDRdIG1hdHJpeCkKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBv
ZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIG1hdHJpeCBtYXRyaXggdG8gYmUgc2V0Lgor
ICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0TWF0cml4Mngy
ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBtYXRyaXgpIHsKKyAgICAgICAgaWYgKCF0aGlzLnVu
aWZvcm1CdWZmZXIgfHwgIXRoaXMubGVmdE92ZXJVbmlmb3Jtc0J5TmFtZVt1bmlmb3JtTmFtZV0p
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnVuaWZvcm1C
dWZmZXIudXBkYXRlTWF0cml4MngyKHVuaWZvcm1OYW1lLCBtYXRyaXgpOworICAgIH07CisgICAg
LyoqCisgICAgICogU2V0cyBhIGZsb2F0IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBA
cGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIHZh
bHVlIHZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAg
Ki8KKyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEZsb2F0ID0gZnVuY3Rp
b24gKHVuaWZvcm1OYW1lLCB2YWx1ZSkgeworICAgICAgICBpZiAoIXRoaXMudW5pZm9ybUJ1ZmZl
ciB8fCAhdGhpcy5sZWZ0T3ZlclVuaWZvcm1zQnlOYW1lW3VuaWZvcm1OYW1lXSkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZlci51cGRh
dGVGbG9hdCh1bmlmb3JtTmFtZSwgdmFsdWUpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
cyBhIGJvb2xlYW4gb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3Jt
TmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYm9vbCB2YWx1ZSB0byBi
ZSBzZXQuCisgICAgICovCisgICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRC
b29sID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBib29sKSB7CisgICAgICAgIHRocm93ICJzZXRC
b29sIG5vdCBTdXBwb3J0ZWQgaW4gTGVmdE92ZXIgVUJPLiI7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXRzIGEgVmVjdG9yMiBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFt
IHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB2ZWN0b3Iy
IHZlY3RvcjIgdG8gYmUgc2V0LgorICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4dC5w
cm90b3R5cGUuc2V0VmVjdG9yMiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgdmVjdG9yMikgewor
ICAgICAgICB0aGlzLnNldEZsb2F0Mih1bmlmb3JtTmFtZSwgdmVjdG9yMi54LCB2ZWN0b3IyLnkp
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIGZsb2F0MiBvbiBhIHVuaWZvcm0gdmFy
aWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgor
ICAgICAqIEBwYXJhbSB4IEZpcnN0IGZsb2F0IGluIGZsb2F0Mi4KKyAgICAgKiBAcGFyYW0geSBT
ZWNvbmQgZmxvYXQgaW4gZmxvYXQyLgorICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4
dC5wcm90b3R5cGUuc2V0RmxvYXQyID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB4LCB5KSB7Cisg
ICAgICAgIGlmICghdGhpcy51bmlmb3JtQnVmZmVyIHx8ICF0aGlzLmxlZnRPdmVyVW5pZm9ybXNC
eU5hbWVbdW5pZm9ybU5hbWVdKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy51bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0Mih1bmlmb3JtTmFtZSwgeCwgeSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgVmVjdG9yMyBvbiBhIHVuaWZvcm0gdmFy
aWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgor
ICAgICAqIEBwYXJhbSB2ZWN0b3IzIFZhbHVlIHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJH
UFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldFZlY3RvcjMgPSBmdW5jdGlvbiAodW5pZm9y
bU5hbWUsIHZlY3RvcjMpIHsKKyAgICAgICAgdGhpcy5zZXRGbG9hdDModW5pZm9ybU5hbWUsIHZl
Y3RvcjMueCwgdmVjdG9yMy55LCB2ZWN0b3IzLnopOworICAgIH07CisgICAgLyoqCisgICAgICog
U2V0cyBhIGZsb2F0MyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZv
cm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB4IEZpcnN0IGZsb2F0
IGluIGZsb2F0My4KKyAgICAgKiBAcGFyYW0geSBTZWNvbmQgZmxvYXQgaW4gZmxvYXQzLgorICAg
ICAqIEBwYXJhbSB6IFRoaXJkIGZsb2F0IGluIGZsb2F0My4KKyAgICAgKi8KKyAgICBXZWJHUFVQ
aXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEZsb2F0MyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFt
ZSwgeCwgeSwgeikgeworICAgICAgICBpZiAoIXRoaXMudW5pZm9ybUJ1ZmZlciB8fCAhdGhpcy5s
ZWZ0T3ZlclVuaWZvcm1zQnlOYW1lW3VuaWZvcm1OYW1lXSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDModW5p
Zm9ybU5hbWUsIHgsIHksIHopOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIFZlY3Rv
cjQgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1l
IG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdmVjdG9yNCBWYWx1ZSB0byBiZSBzZXQu
CisgICAgICovCisgICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRWZWN0b3I0
ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB2ZWN0b3I0KSB7CisgICAgICAgIHRoaXMuc2V0Rmxv
YXQ0KHVuaWZvcm1OYW1lLCB2ZWN0b3I0LngsIHZlY3RvcjQueSwgdmVjdG9yNC56LCB2ZWN0b3I0
LncpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIGZsb2F0NCBvbiBhIHVuaWZvcm0g
dmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxl
LgorICAgICAqIEBwYXJhbSB4IEZpcnN0IGZsb2F0IGluIGZsb2F0NC4KKyAgICAgKiBAcGFyYW0g
eSBTZWNvbmQgZmxvYXQgaW4gZmxvYXQ0LgorICAgICAqIEBwYXJhbSB6IFRoaXJkIGZsb2F0IGlu
IGZsb2F0NC4KKyAgICAgKiBAcGFyYW0gdyBGb3VydGggZmxvYXQgaW4gZmxvYXQ0LgorICAgICAq
IEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4
dC5wcm90b3R5cGUuc2V0RmxvYXQ0ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB4LCB5LCB6LCB3
KSB7CisgICAgICAgIGlmICghdGhpcy51bmlmb3JtQnVmZmVyIHx8ICF0aGlzLmxlZnRPdmVyVW5p
Zm9ybXNCeU5hbWVbdW5pZm9ybU5hbWVdKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy51bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCh1bmlmb3JtTmFtZSwg
eCwgeSwgeiwgdyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgQ29sb3IzIG9uIGEg
dW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUg
dmFyaWFibGUuCisgICAgICogQHBhcmFtIGNvbG9yMyBWYWx1ZSB0byBiZSBzZXQuCisgICAgICov
CisgICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRDb2xvcjMgPSBmdW5jdGlv
biAodW5pZm9ybU5hbWUsIGNvbG9yMykgeworICAgICAgICB0aGlzLnNldEZsb2F0Myh1bmlmb3Jt
TmFtZSwgY29sb3IzLmIsIGNvbG9yMy5nLCBjb2xvcjMuYik7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXRzIGEgQ29sb3I0IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0g
dW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGNvbG9yMyBW
YWx1ZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtIGFscGhhIEFscGhhIHZhbHVlIHRvIGJlIHNl
dC4KKyAgICAgKi8KKyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldENvbG9y
NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgY29sb3IzLCBhbHBoYSkgeworICAgICAgICB0aGlz
LnNldEZsb2F0NCh1bmlmb3JtTmFtZSwgY29sb3IzLmIsIGNvbG9yMy5nLCBjb2xvcjMuYiwgYWxw
aGEpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIENvbG9yNCBvbiBhIHVuaWZvcm0g
dmFyaWFibGUKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0
aGUgdmFyaWFibGUKKyAgICAgKiBAcGFyYW0gY29sb3I0IGRlZmluZXMgdGhlIHZhbHVlIHRvIGJl
IHNldAorICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0RGly
ZWN0Q29sb3I0ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBjb2xvcjQpIHsKKyAgICAgICAgdGhp
cy5zZXRGbG9hdDQodW5pZm9ybU5hbWUsIGNvbG9yNC5yLCBjb2xvcjQuZywgY29sb3I0LmIsIGNv
bG9yNC5hKTsKKyAgICB9OworICAgIHJldHVybiBXZWJHUFVQaXBlbGluZUNvbnRleHQ7Cit9KCkp
OworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMvV2ViR1BVL3dlYmdwdVNoYWRl
clByb2Nlc3NpbmdDb250ZXh0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5lcy9XZWJHUFUv
d2ViZ3B1U2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQudHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IFdlYkdQVVNoYWRlclByb2Nlc3NpbmdDb250ZXh0ICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkdQVVNoYWRlclByb2Nlc3NpbmdDb250ZXh0IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBXZWJHUFVTaGFkZXJQcm9jZXNzaW5nQ29udGV4dDsgfSk7Cit2YXIg
X21heFNldHMgPSA0OwordmFyIF9tYXhCaW5kaW5nc1BlclNldCA9IDE2OworLyoqCisgKiBAaGlk
ZGVuCisgKi8KK3ZhciBXZWJHUFVTaGFkZXJQcm9jZXNzaW5nQ29udGV4dCA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBXZWJHUFVTaGFkZXJQcm9jZXNzaW5nQ29u
dGV4dCgpIHsKKyAgICAgICAgdGhpcy5hdHRyaWJ1dGVOZXh0TG9jYXRpb24gPSAwOworICAgICAg
ICB0aGlzLnZhcnlpbmdOZXh0TG9jYXRpb24gPSAwOworICAgICAgICB0aGlzLmZyZWVTZXRJbmRl
eCA9IDI7CisgICAgICAgIHRoaXMuZnJlZUJpbmRpbmdJbmRleCA9IDA7CisgICAgICAgIHRoaXMu
YXZhaWxhYmxlVmFyeWluZ3MgPSB7fTsKKyAgICAgICAgdGhpcy5hdmFpbGFibGVBdHRyaWJ1dGVz
ID0ge307CisgICAgICAgIHRoaXMuYXZhaWxhYmxlVUJPcyA9IHt9OworICAgICAgICB0aGlzLmF2
YWlsYWJsZVNhbXBsZXJzID0ge307CisgICAgICAgIHRoaXMub3JkZXJlZEF0dHJpYnV0ZXMgPSBb
XTsKKyAgICAgICAgdGhpcy5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzID0gW107CisgICAgICAgIHRo
aXMubGVmdE92ZXJVbmlmb3JtcyA9IFtdOworICAgIH0KKyAgICBXZWJHUFVTaGFkZXJQcm9jZXNz
aW5nQ29udGV4dC5wcm90b3R5cGUuZ2V0TmV4dEZyZWVVQk9CaW5kaW5nID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TmV4dEZyZWVCaW5kaW5nKDEpOworICAgIH07Cisg
ICAgV2ViR1BVU2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQucHJvdG90eXBlLmdldE5leHRGcmVlVGV4
dHVyZUJpbmRpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9nZXROZXh0
RnJlZUJpbmRpbmcoMik7CisgICAgfTsKKyAgICBXZWJHUFVTaGFkZXJQcm9jZXNzaW5nQ29udGV4
dC5wcm90b3R5cGUuX2dldE5leHRGcmVlQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nQ291bnQp
IHsKKyAgICAgICAgaWYgKHRoaXMuZnJlZUJpbmRpbmdJbmRleCA+IF9tYXhCaW5kaW5nc1BlclNl
dCAtIGJpbmRpbmdDb3VudCkgeworICAgICAgICAgICAgdGhpcy5mcmVlU2V0SW5kZXgrKzsKKyAg
ICAgICAgICAgIHRoaXMuZnJlZUJpbmRpbmdJbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuZnJlZVNldEluZGV4ID09PSBfbWF4U2V0cykgeworICAgICAgICAgICAgdGhyb3cg
IlRvbyBtYW55IHRleHR1cmVzIG9yIFVCT3MgaGF2ZSBiZWVuIGRlY2xhcmVkIGFuZCBpdCBpcyBu
b3Qgc3VwcHJ0ZWQgaW4gV2ViR1BVLiI7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJldHVyblZh
bHVlID0geworICAgICAgICAgICAgc2V0SW5kZXg6IHRoaXMuZnJlZVNldEluZGV4LAorICAgICAg
ICAgICAgYmluZGluZ0luZGV4OiB0aGlzLmZyZWVCaW5kaW5nSW5kZXgKKyAgICAgICAgfTsKKyAg
ICAgICAgdGhpcy5mcmVlQmluZGluZ0luZGV4ICs9IGJpbmRpbmdDb3VudDsKKyAgICAgICAgcmV0
dXJuIHJldHVyblZhbHVlOworICAgIH07CisgICAgcmV0dXJuIFdlYkdQVVNoYWRlclByb2Nlc3Np
bmdDb250ZXh0OworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL1dl
YkdQVS93ZWJncHVTaGFkZXJQcm9jZXNzb3JzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9FbmdpbmVzL1dlYkdQ
VS93ZWJncHVTaGFkZXJQcm9jZXNzb3JzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFdl
YkdQVVNoYWRlclByb2Nlc3NvciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJXZWJHUFVTaGFkZXJQcm9jZXNzb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYkdQVVNoYWRl
clByb2Nlc3NvcjsgfSk7Cit2YXIgX2tub3duVUJPcyA9IHsKKyAgICAiU2NlbmUiOiB7IHNldElu
ZGV4OiAwLCBiaW5kaW5nSW5kZXg6IDAgfSwKKyAgICAiTGlnaHQwIjogeyBzZXRJbmRleDogMCwg
YmluZGluZ0luZGV4OiA1IH0sCisgICAgIkxpZ2h0MSI6IHsgc2V0SW5kZXg6IDAsIGJpbmRpbmdJ
bmRleDogNiB9LAorICAgICJMaWdodDIiOiB7IHNldEluZGV4OiAwLCBiaW5kaW5nSW5kZXg6IDcg
fSwKKyAgICAiTGlnaHQzIjogeyBzZXRJbmRleDogMCwgYmluZGluZ0luZGV4OiA4IH0sCisgICAg
Ik1hdGVyaWFsIjogeyBzZXRJbmRleDogMSwgYmluZGluZ0luZGV4OiAwIH0sCisgICAgIk1lc2gi
OiB7IHNldEluZGV4OiAxLCBiaW5kaW5nSW5kZXg6IDEgfSwKK307Cit2YXIgX2tub3duU2FtcGxl
cnMgPSB7CisgICAgImVudmlyb25tZW50QnJkZlNhbXBsZXIiOiB7IHNldEluZGV4OiAwLCBiaW5k
aW5nSW5kZXg6IDEgfSwKK307CisvLyBUT0RPIFdFQkdQVS4gc2FtcGxlcjNECit2YXIgX3NhbXBs
ZXJGdW5jdGlvbkJ5V2ViR0xTYW1wbGVyVHlwZSA9IHsKKyAgICAidGV4dHVyZUN1YmUiOiAic2Ft
cGxlckN1YmUiLAorICAgICJ0ZXh0dXJlMkQiOiAic2FtcGxlcjJEIiwKKyAgICAic2FtcGxlcjJE
IjogInNhbXBsZXIyRCIsCisgICAgInNhbXBsZXJDdWJlIjogInNhbXBsZXJDdWJlIgorfTsKK3Zh
ciBfdGV4dHVyZVR5cGVCeVdlYkdMU2FtcGxlclR5cGUgPSB7CisgICAgInRleHR1cmVDdWJlIjog
InRleHR1cmVDdWJlIiwKKyAgICAidGV4dHVyZTJEIjogInRleHR1cmUyRCIsCisgICAgInNhbXBs
ZXIyRCI6ICJ0ZXh0dXJlMkQiLAorICAgICJzYW1wbGVyQ3ViZSI6ICJ0ZXh0dXJlQ3ViZSIKK307
CisvKiogQGhpZGRlbiAqLwordmFyIFdlYkdQVVNoYWRlclByb2Nlc3NvciA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBXZWJHUFVTaGFkZXJQcm9jZXNzb3IoKSB7
CisgICAgfQorICAgIFdlYkdQVVNoYWRlclByb2Nlc3Nvci5wcm90b3R5cGUudmFyeWluZ1Byb2Nl
c3NvciA9IGZ1bmN0aW9uICh2YXJ5aW5nLCBpc0ZyYWdtZW50LCBwcm9jZXNzaW5nQ29udGV4dCkg
eworICAgICAgICB2YXIgd2ViZ3B1UHJvY2Vzc2luZ0NvbnRleHQgPSBwcm9jZXNzaW5nQ29udGV4
dDsKKyAgICAgICAgdmFyIHZhcnlpbmdSZWdleCA9IG5ldyBSZWdFeHAoL1xzKnZhcnlpbmdccyso
XFMrKVxzKyhcUyspXHMqOy9nbSk7CisgICAgICAgIHZhciBtYXRjaCA9IHZhcnlpbmdSZWdleC5l
eGVjKHZhcnlpbmcpOworICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbCkgeworICAgICAgICAgICAg
dmFyIG5hbWVfMSA9IG1hdGNoWzJdOworICAgICAgICAgICAgdmFyIGxvY2F0aW9uXzE7CisgICAg
ICAgICAgICBpZiAoaXNGcmFnbWVudCkgeworICAgICAgICAgICAgICAgIGxvY2F0aW9uXzEgPSB3
ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5hdmFpbGFibGVWYXJ5aW5nc1tuYW1lXzFdOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbG9jYXRpb25fMSA9
IHdlYmdwdVByb2Nlc3NpbmdDb250ZXh0LnZhcnlpbmdOZXh0TG9jYXRpb24rKzsKKyAgICAgICAg
ICAgICAgICB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5hdmFpbGFibGVWYXJ5aW5nc1tuYW1lXzFd
ID0gbG9jYXRpb25fMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcnlpbmcgPSB2YXJ5
aW5nLnJlcGxhY2UobWF0Y2hbMF0sICJsYXlvdXQobG9jYXRpb24gPSAiICsgbG9jYXRpb25fMSAr
ICIpICIgKyAoaXNGcmFnbWVudCA/ICJpbiIgOiAib3V0IikgKyAiICIgKyBtYXRjaFsxXSArICIg
IiArIG5hbWVfMSArICI7Iik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhcnlpbmc7Cisg
ICAgfTsKKyAgICBXZWJHUFVTaGFkZXJQcm9jZXNzb3IucHJvdG90eXBlLmF0dHJpYnV0ZVByb2Nl
c3NvciA9IGZ1bmN0aW9uIChhdHRyaWJ1dGUsIHByb2Nlc3NpbmdDb250ZXh0KSB7CisgICAgICAg
IHZhciB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dCA9IHByb2Nlc3NpbmdDb250ZXh0OworICAgICAg
ICB2YXIgYXR0cmliUmVnZXggPSBuZXcgUmVnRXhwKC9ccyphdHRyaWJ1dGVccysoXFMrKVxzKyhc
UyspXHMqOy9nbSk7CisgICAgICAgIHZhciBtYXRjaCA9IGF0dHJpYlJlZ2V4LmV4ZWMoYXR0cmli
dXRlKTsKKyAgICAgICAgaWYgKG1hdGNoICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBuYW1l
XzIgPSBtYXRjaFsyXTsKKyAgICAgICAgICAgIHZhciBsb2NhdGlvbl8yID0gd2ViZ3B1UHJvY2Vz
c2luZ0NvbnRleHQuYXR0cmlidXRlTmV4dExvY2F0aW9uKys7CisgICAgICAgICAgICB3ZWJncHVQ
cm9jZXNzaW5nQ29udGV4dC5hdmFpbGFibGVBdHRyaWJ1dGVzW25hbWVfMl0gPSBsb2NhdGlvbl8y
OworICAgICAgICAgICAgd2ViZ3B1UHJvY2Vzc2luZ0NvbnRleHQub3JkZXJlZEF0dHJpYnV0ZXNb
bG9jYXRpb25fMl0gPSBuYW1lXzI7CisgICAgICAgICAgICBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUu
cmVwbGFjZShtYXRjaFswXSwgImxheW91dChsb2NhdGlvbiA9ICIgKyBsb2NhdGlvbl8yICsgIikg
aW4gIiArIG1hdGNoWzFdICsgIiAiICsgbmFtZV8yICsgIjsiKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gYXR0cmlidXRlOworICAgIH07CisgICAgV2ViR1BVU2hhZGVyUHJvY2Vzc29yLnBy
b3RvdHlwZS51bmlmb3JtUHJvY2Vzc29yID0gZnVuY3Rpb24gKHVuaWZvcm0sIGlzRnJhZ21lbnQs
IHByZVByb2Nlc3NvcnMsIHByb2Nlc3NpbmdDb250ZXh0KSB7CisgICAgICAgIHZhciB3ZWJncHVQ
cm9jZXNzaW5nQ29udGV4dCA9IHByb2Nlc3NpbmdDb250ZXh0OworICAgICAgICB2YXIgdW5pZm9y
bVJlZ2V4ID0gbmV3IFJlZ0V4cCgvXHMqdW5pZm9ybVxzKyhcUyspXHMrKFxTKylccyo7L2dtKTsK
KyAgICAgICAgdmFyIG1hdGNoID0gdW5pZm9ybVJlZ2V4LmV4ZWModW5pZm9ybSk7CisgICAgICAg
IGlmIChtYXRjaCAhPSBudWxsKSB7CisgICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSBtYXRj
aFsxXTsKKyAgICAgICAgICAgIHZhciBuYW1lXzMgPSBtYXRjaFsyXTsKKyAgICAgICAgICAgIGlm
ICh1bmlmb3JtVHlwZS5pbmRleE9mKCJ0ZXh0dXJlIikgPT09IDAgfHwgdW5pZm9ybVR5cGUuaW5k
ZXhPZigic2FtcGxlciIpID09PSAwKSB7CisgICAgICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZv
ID0gX2tub3duU2FtcGxlcnNbbmFtZV8zXTsKKyAgICAgICAgICAgICAgICBpZiAoIXNhbXBsZXJJ
bmZvKSB7CisgICAgICAgICAgICAgICAgICAgIHNhbXBsZXJJbmZvID0gd2ViZ3B1UHJvY2Vzc2lu
Z0NvbnRleHQuYXZhaWxhYmxlU2FtcGxlcnNbbmFtZV8zXTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFzYW1wbGVySW5mbykgeworICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlckluZm8g
PSB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5nZXROZXh0RnJlZVRleHR1cmVCaW5kaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dmFyIHNldEluZGV4ID0gc2FtcGxlckluZm8uc2V0SW5kZXg7CisgICAgICAgICAgICAgICAgdmFy
IHRleHR1cmVCaW5kaW5nSW5kZXggPSBzYW1wbGVySW5mby5iaW5kaW5nSW5kZXg7CisgICAgICAg
ICAgICAgICAgdmFyIHNhbXBsZXJCaW5kaW5nSW5kZXggPSBzYW1wbGVySW5mby5iaW5kaW5nSW5k
ZXggKyAxOworICAgICAgICAgICAgICAgIHZhciBzYW1wbGVyRnVuY3Rpb24gPSBfc2FtcGxlckZ1
bmN0aW9uQnlXZWJHTFNhbXBsZXJUeXBlW3VuaWZvcm1UeXBlXTsKKyAgICAgICAgICAgICAgICB2
YXIgdGV4dHVyZVR5cGUgPSBfdGV4dHVyZVR5cGVCeVdlYkdMU2FtcGxlclR5cGVbdW5pZm9ybVR5
cGVdOworICAgICAgICAgICAgICAgIC8vIE1hbmFnZSB0ZXh0dXJlcyBhbmQgc2FtcGxlcnMuCisg
ICAgICAgICAgICAgICAgdW5pZm9ybSA9ICJsYXlvdXQoc2V0ID0gIiArIHNldEluZGV4ICsgIiwg
YmluZGluZyA9ICIgKyB0ZXh0dXJlQmluZGluZ0luZGV4ICsgIikgdW5pZm9ybSAiICsgdGV4dHVy
ZVR5cGUgKyAiICIgKyBuYW1lXzMgKyAiVGV4dHVyZTtcbiAgICAgICAgICAgICAgICAgICAgbGF5
b3V0KHNldCA9ICIgKyBzZXRJbmRleCArICIsIGJpbmRpbmcgPSAiICsgc2FtcGxlckJpbmRpbmdJ
bmRleCArICIpIHVuaWZvcm0gc2FtcGxlciAiICsgbmFtZV8zICsgIlNhbXBsZXI7XG4gICAgICAg
ICAgICAgICAgICAgICNkZWZpbmUgIiArIG5hbWVfMyArICIgIiArIHNhbXBsZXJGdW5jdGlvbiAr
ICIoIiArIG5hbWVfMyArICJUZXh0dXJlLCAiICsgbmFtZV8zICsgIlNhbXBsZXIpIjsKKyAgICAg
ICAgICAgICAgICB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5hdmFpbGFibGVTYW1wbGVyc1tuYW1l
XzNdID0gc2FtcGxlckluZm87CisgICAgICAgICAgICAgICAgaWYgKCF3ZWJncHVQcm9jZXNzaW5n
Q29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzW3NldEluZGV4XSkgeworICAgICAgICAgICAg
ICAgICAgICB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzW3Nl
dEluZGV4XSA9IFtdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3ZWJncHVQ
cm9jZXNzaW5nQ29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzW3NldEluZGV4XVt0ZXh0dXJl
QmluZGluZ0luZGV4XSA9IHsgaXNTYW1wbGVyOiB0cnVlLCBuYW1lOiBuYW1lXzMgfTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRo
ZSBzaXplIG9mIHRoZSB1bmlmb3JtIGFycmF5IGluIGNhc2Ugb2YgYXJyYXkuCisgICAgICAgICAg
ICAgICAgdmFyIGxlbmd0aF8xID0gMDsKKyAgICAgICAgICAgICAgICB2YXIgc3RhcnRBcnJheSA9
IG5hbWVfMy5pbmRleE9mKCJbIik7CisgICAgICAgICAgICAgICAgdmFyIGVuZEFycmF5ID0gbmFt
ZV8zLmluZGV4T2YoIl0iKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRBcnJheSA+IDAgJiYg
ZW5kQXJyYXkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGhJblN0cmluZyA9
IG5hbWVfMy5zdWJzdHJpbmcoc3RhcnRBcnJheSArIDEsIGVuZEFycmF5KTsKKyAgICAgICAgICAg
ICAgICAgICAgbGVuZ3RoXzEgPSArKGxlbmd0aEluU3RyaW5nKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzTmFOKGxlbmd0aF8xKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3Ro
XzEgPSArKHByZVByb2Nlc3NvcnNbbGVuZ3RoSW5TdHJpbmddKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBuYW1lXzMgPSBuYW1lXzMuc3Vic3RyKDAsIHN0YXJ0
QXJyYXkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHdlYmdwdVByb2Nlc3NpbmdDb250ZXh0LmxlZnRPdmVyVW5pZm9ybXMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdlYmdwdVByb2Nlc3NpbmdDb250ZXh0Lmxl
ZnRPdmVyVW5pZm9ybXNbaV0ubmFtZSA9PT0gbmFtZV8zKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gIiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgd2ViZ3B1UHJvY2Vzc2luZ0NvbnRleHQubGVmdE92ZXJVbmlmb3Jt
cy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZV8zLAorICAgICAgICAgICAg
ICAgICAgICB0eXBlOiB1bmlmb3JtVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBs
ZW5ndGhfMQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHVuaWZvcm0gPSAi
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdW5pZm9ybTsKKyAg
ICB9OworICAgIFdlYkdQVVNoYWRlclByb2Nlc3Nvci5wcm90b3R5cGUudW5pZm9ybUJ1ZmZlclBy
b2Nlc3NvciA9IGZ1bmN0aW9uICh1bmlmb3JtQnVmZmVyLCBpc0ZyYWdtZW50LCBwcm9jZXNzaW5n
Q29udGV4dCkgeworICAgICAgICB2YXIgd2ViZ3B1UHJvY2Vzc2luZ0NvbnRleHQgPSBwcm9jZXNz
aW5nQ29udGV4dDsKKyAgICAgICAgdmFyIHVib1JlZ2V4ID0gbmV3IFJlZ0V4cCgvdW5pZm9ybVxz
KyhcdyspL2dtKTsKKyAgICAgICAgdmFyIG1hdGNoID0gdWJvUmVnZXguZXhlYyh1bmlmb3JtQnVm
ZmVyKTsKKyAgICAgICAgaWYgKG1hdGNoICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBuYW1l
XzQgPSBtYXRjaFsxXTsKKyAgICAgICAgICAgIHZhciBzZXRJbmRleCA9IHZvaWQgMDsKKyAgICAg
ICAgICAgIHZhciBiaW5kaW5nSW5kZXggPSB2b2lkIDA7CisgICAgICAgICAgICB2YXIga25vd25V
Qk8gPSBfa25vd25VQk9zW25hbWVfNF07CisgICAgICAgICAgICBpZiAoa25vd25VQk8pIHsKKyAg
ICAgICAgICAgICAgICBzZXRJbmRleCA9IGtub3duVUJPLnNldEluZGV4OworICAgICAgICAgICAg
ICAgIGJpbmRpbmdJbmRleCA9IGtub3duVUJPLmJpbmRpbmdJbmRleDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc0ZyYWdtZW50KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBhdmFpbGFibGVVQk8gPSB3ZWJncHVQcm9jZXNzaW5nQ29u
dGV4dC5hdmFpbGFibGVVQk9zW25hbWVfNF07CisgICAgICAgICAgICAgICAgICAgIGlmIChhdmFp
bGFibGVVQk8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldEluZGV4ID0gYXZhaWxhYmxl
VUJPLnNldEluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZ0luZGV4ID0gYXZh
aWxhYmxlVUJPLmJpbmRpbmdJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0QmluZGlu
ZyA9IHdlYmdwdVByb2Nlc3NpbmdDb250ZXh0LmdldE5leHRGcmVlVUJPQmluZGluZygpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0SW5kZXggPSBuZXh0QmluZGluZy5zZXRJbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdJbmRleCA9IG5leHRCaW5kaW5nLmJpbmRpbmdJ
bmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRCaW5kaW5nID0gd2Vi
Z3B1UHJvY2Vzc2luZ0NvbnRleHQuZ2V0TmV4dEZyZWVVQk9CaW5kaW5nKCk7CisgICAgICAgICAg
ICAgICAgICAgIHNldEluZGV4ID0gbmV4dEJpbmRpbmcuc2V0SW5kZXg7CisgICAgICAgICAgICAg
ICAgICAgIGJpbmRpbmdJbmRleCA9IG5leHRCaW5kaW5nLmJpbmRpbmdJbmRleDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3ZWJncHVQcm9jZXNzaW5nQ29u
dGV4dC5hdmFpbGFibGVVQk9zW25hbWVfNF0gPSB7IHNldEluZGV4OiBzZXRJbmRleCwgYmluZGlu
Z0luZGV4OiBiaW5kaW5nSW5kZXggfTsKKyAgICAgICAgICAgIGlmICghd2ViZ3B1UHJvY2Vzc2lu
Z0NvbnRleHQub3JkZXJlZFVCT3NBbmRTYW1wbGVyc1tzZXRJbmRleF0pIHsKKyAgICAgICAgICAg
ICAgICB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzW3NldElu
ZGV4XSA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2ViZ3B1UHJvY2Vzc2luZ0Nv
bnRleHQub3JkZXJlZFVCT3NBbmRTYW1wbGVyc1tzZXRJbmRleF1bYmluZGluZ0luZGV4XSA9IHsg
aXNTYW1wbGVyOiBmYWxzZSwgbmFtZTogbmFtZV80IH07CisgICAgICAgICAgICB1bmlmb3JtQnVm
ZmVyID0gdW5pZm9ybUJ1ZmZlci5yZXBsYWNlKCJ1bmlmb3JtIiwgImxheW91dChzZXQgPSAiICsg
c2V0SW5kZXggKyAiLCBiaW5kaW5nID0gIiArIGJpbmRpbmdJbmRleCArICIpIHVuaWZvcm0iKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdW5pZm9ybUJ1ZmZlcjsKKyAgICB9OworICAgIC8v
IHB1YmxpYyBlbmRPZlVuaWZvcm1CdWZmZXJQcm9jZXNzb3IoY2xvc2luZ0JyYWNrZXRMaW5lOiBz
dHJpbmcsIGlzRnJhZ21lbnQ6IGJvb2xlYW4pOiBzdHJpbmcgeworICAgIC8vICAgICBjb25zb2xl
LmxvZygidW5pZm9ybUJ1ZmZlciBjbG9zaW5nQnJhY2tldExpbmUgIiwgY2xvc2luZ0JyYWNrZXRM
aW5lKTsKKyAgICAvLyAgICAgcmV0dXJuIGNsb3NpbmdCcmFja2V0TGluZTsKKyAgICAvLyB9Cisg
ICAgV2ViR1BVU2hhZGVyUHJvY2Vzc29yLnByb3RvdHlwZS5wb3N0UHJvY2Vzc29yID0gZnVuY3Rp
b24gKGNvZGUsIGRlZmluZXMsIGlzRnJhZ21lbnQsIHByb2Nlc3NpbmdDb250ZXh0KSB7CisgICAg
ICAgIHZhciBoYXNEcmF3QnVmZmVyc0V4dGVuc2lvbiA9IGNvZGUuc2VhcmNoKC8jZXh0ZW5zaW9u
LitHTF9FWFRfZHJhd19idWZmZXJzLityZXF1aXJlLykgIT09IC0xOworICAgICAgICAvLyBSZW1v
dmUgZXh0ZW5zaW9ucworICAgICAgICB2YXIgcmVnZXggPSAvI2V4dGVuc2lvbi4rKEdMX09WUl9t
dWx0aXZpZXcyfEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlc3xHTF9FWFRfc2hhZGVyX3RleHR1
cmVfbG9kfEdMX0VYVF9mcmFnX2RlcHRofEdMX0VYVF9kcmF3X2J1ZmZlcnMpLisoZW5hYmxlfHJl
cXVpcmUpL2c7CisgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UocmVnZXgsICIiKTsKKyAgICAg
ICAgLy8gUmVwbGFjZSBpbnN0cnVjdGlvbnMKKyAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgv
dGV4dHVyZTJEXHMqXCgvZywgInRleHR1cmUoIik7CisgICAgICAgIGlmIChpc0ZyYWdtZW50KSB7
CisgICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC90ZXh0dXJlMkRMb2RFWFRccypcKC9n
LCAidGV4dHVyZUxvZCgiKTsKKyAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL3RleHR1
cmVDdWJlTG9kRVhUXHMqXCgvZywgInRleHR1cmVMb2QoIik7CisgICAgICAgICAgICBjb2RlID0g
Y29kZS5yZXBsYWNlKC90ZXh0dXJlQ3ViZVxzKlwoL2csICJ0ZXh0dXJlKCIpOworICAgICAgICAg
ICAgY29kZSA9IGNvZGUucmVwbGFjZSgvZ2xfRnJhZ0RlcHRoRVhUL2csICJnbF9GcmFnRGVwdGgi
KTsKKyAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL2dsX0ZyYWdDb2xvci9nLCAiZ2xG
cmFnQ29sb3IiKTsKKyAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL2dsX0ZyYWdEYXRh
L2csICJnbEZyYWdEYXRhIik7CisgICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC92b2lk
XHMrP21haW5ccypcKC9nLCAoaGFzRHJhd0J1ZmZlcnNFeHRlbnNpb24gPyAiIiA6ICJsYXlvdXQo
bG9jYXRpb24gPSAwKSBvdXQgdmVjNCBnbEZyYWdDb2xvcjtcbiIpICsgInZvaWQgbWFpbigiKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBoYXNNdWx0aXZpZXdF
eHRlbnNpb24gPSBkZWZpbmVzLmluZGV4T2YoIiNkZWZpbmUgTVVMVElWSUVXIikgIT09IC0xOwor
ICAgICAgICAgICAgaWYgKGhhc011bHRpdmlld0V4dGVuc2lvbikgeworICAgICAgICAgICAgICAg
IHJldHVybiAiI2V4dGVuc2lvbiBHTF9PVlJfbXVsdGl2aWV3MiA6IHJlcXVpcmVcbmxheW91dCAo
bnVtX3ZpZXdzID0gMikgaW47XG4iICsgY29kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAvLyBGbGlwIFkuCisgICAgICAgIC8vIFRPRE8gV0VCR1BVLiBUcmlwbGUgY2hlY2sg
dGhpcyBwYXJ0IGFuZCB3YWl0IG9uIEdvb2dsZSBOZXdzIGZvciB0aGlzIGlzc3VlLgorICAgICAg
ICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ3B1d2ViL2dwdXdlYi9pc3N1ZXMvMzc5CisgICAgICAg
IGlmICghaXNGcmFnbWVudCkgeworICAgICAgICAgICAgdmFyIGxhc3RDbG9zaW5nQ3VybHkgPSBj
b2RlLmxhc3RJbmRleE9mKCJ9Iik7CisgICAgICAgICAgICBjb2RlID0gY29kZS5zdWJzdHJpbmco
MCwgbGFzdENsb3NpbmdDdXJseSk7CisgICAgICAgICAgICBjb2RlICs9ICJnbF9Qb3NpdGlvbi55
ICo9IC0xLjsgfSI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgfTsKKyAg
ICBXZWJHUFVTaGFkZXJQcm9jZXNzb3IucHJvdG90eXBlLmZpbmFsaXplU2hhZGVycyA9IGZ1bmN0
aW9uICh2ZXJ0ZXhDb2RlLCBmcmFnbWVudENvZGUsIHByb2Nlc3NpbmdDb250ZXh0KSB7CisgICAg
ICAgIC8vIEJ1aWxkcyB0aGUgbGVmdG92ZXIgVUJPcy4KKyAgICAgICAgdmFyIHdlYmdwdVByb2Nl
c3NpbmdDb250ZXh0ID0gcHJvY2Vzc2luZ0NvbnRleHQ7CisgICAgICAgIGlmICh3ZWJncHVQcm9j
ZXNzaW5nQ29udGV4dC5sZWZ0T3ZlclVuaWZvcm1zLmxlbmd0aCkgeworICAgICAgICAgICAgdmFy
IG5hbWVfNSA9ICJMZWZ0T3ZlciI7CisgICAgICAgICAgICB2YXIgYXZhaWxhYmxlVUJPID0gd2Vi
Z3B1UHJvY2Vzc2luZ0NvbnRleHQuYXZhaWxhYmxlVUJPc1tuYW1lXzVdOworICAgICAgICAgICAg
aWYgKCFhdmFpbGFibGVVQk8pIHsKKyAgICAgICAgICAgICAgICBhdmFpbGFibGVVQk8gPSB3ZWJn
cHVQcm9jZXNzaW5nQ29udGV4dC5nZXROZXh0RnJlZVVCT0JpbmRpbmcoKTsKKyAgICAgICAgICAg
ICAgICB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5hdmFpbGFibGVVQk9zW25hbWVfNV0gPSBhdmFp
bGFibGVVQk87CisgICAgICAgICAgICAgICAgaWYgKCF3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5v
cmRlcmVkVUJPc0FuZFNhbXBsZXJzW2F2YWlsYWJsZVVCTy5zZXRJbmRleF0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgd2ViZ3B1UHJvY2Vzc2luZ0NvbnRleHQub3JkZXJlZFVCT3NBbmRTYW1wbGVy
c1thdmFpbGFibGVVQk8uc2V0SW5kZXhdID0gW107CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHdlYmdwdVByb2Nlc3NpbmdDb250ZXh0Lm9yZGVyZWRVQk9zQW5kU2FtcGxlcnNb
YXZhaWxhYmxlVUJPLnNldEluZGV4XVthdmFpbGFibGVVQk8uYmluZGluZ0luZGV4XSA9IHsgaXNT
YW1wbGVyOiBmYWxzZSwgbmFtZTogbmFtZV81IH07CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YXIgdWJvID0gImxheW91dChzZXQgPSAiICsgYXZhaWxhYmxlVUJPLnNldEluZGV4ICsgIiwg
YmluZGluZyA9ICIgKyBhdmFpbGFibGVVQk8uYmluZGluZ0luZGV4ICsgIikgdW5pZm9ybSAiICsg
bmFtZV81ICsgIiB7XG4gICAgIjsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB3
ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5sZWZ0T3ZlclVuaWZvcm1zOyBfaSA8IF9hLmxlbmd0aDsg
X2krKykgeworICAgICAgICAgICAgICAgIHZhciBsZWZ0T3ZlclVuaWZvcm0gPSBfYVtfaV07Cisg
ICAgICAgICAgICAgICAgaWYgKGxlZnRPdmVyVW5pZm9ybS5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIHVibyArPSAiICAgICIgKyBsZWZ0T3ZlclVuaWZvcm0udHlwZSArICIgIiAr
IGxlZnRPdmVyVW5pZm9ybS5uYW1lICsgIlsiICsgbGVmdE92ZXJVbmlmb3JtLmxlbmd0aCArICJd
O1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHVibyArPSAiICAgICIgKyBsZWZ0T3ZlclVuaWZvcm0udHlwZSArICIgIiAr
IGxlZnRPdmVyVW5pZm9ybS5uYW1lICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdWJvICs9ICJ9O1xuXG4iOworICAgICAgICAgICAgLy8gQ3Vy
cmVudGx5IHNldCBpbiBib3RoIHZlcnQgYW5kIGZyYWcgYnV0IGNvdWxkIGJlIG9wdGltIGF3YXkg
aWYgbmVjZXNzYXJ5LgorICAgICAgICAgICAgdmVydGV4Q29kZSA9IHVibyArIHZlcnRleENvZGU7
CisgICAgICAgICAgICBmcmFnbWVudENvZGUgPSB1Ym8gKyBmcmFnbWVudENvZGU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHsgdmVydGV4Q29kZTogdmVydGV4Q29kZSwgZnJhZ21lbnRDb2Rl
OiBmcmFnbWVudENvZGUgfTsKKyAgICB9OworICAgIHJldHVybiBXZWJHUFVTaGFkZXJQcm9jZXNz
b3I7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMvY29uc3RhbnRz
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5n
aW5lcy9jb25zdGFudHMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbnN0YW50cyAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJDb25zdGFudHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvbnN0YW50
czsgfSk7CisvKiogRGVmaW5lcyB0aGUgY3Jvc3MgbW9kdWxlIHVzZWQgY29uc3RhbnRzIHRvIGF2
b2lkIGNpcmN1bGFyIGRlcGVuZG5jaWVzICovCit2YXIgQ29uc3RhbnRzID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIENvbnN0YW50cygpIHsKKyAgICB9CisgICAg
LyoqIERlZmluZXMgdGhhdCBhbHBoYSBibGVuZGluZyBpcyBkaXNhYmxlZCAqLworICAgIENvbnN0
YW50cy5BTFBIQV9ESVNBQkxFID0gMDsKKyAgICAvKiogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5k
aW5nIHRvIFNSQyBBTFBIQSAqIFNSQyArIERFU1QgKi8KKyAgICBDb25zdGFudHMuQUxQSEFfQURE
ID0gMTsKKyAgICAvKiogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5kaW5nIHRvIFNSQyBBTFBIQSAq
IFNSQyArICgxIC0gU1JDIEFMUEhBKSAqIERFU1QgKi8KKyAgICBDb25zdGFudHMuQUxQSEFfQ09N
QklORSA9IDI7CisgICAgLyoqIERlZmluZXMgdGhhdCBhbHBoYSBibGVuZGluZyB0byBERVNUIC0g
U1JDICogREVTVCAqLworICAgIENvbnN0YW50cy5BTFBIQV9TVUJUUkFDVCA9IDM7CisgICAgLyoq
IERlZmluZXMgdGhhdCBhbHBoYSBibGVuZGluZyB0byBTUkMgKiBERVNUICovCisgICAgQ29uc3Rh
bnRzLkFMUEhBX01VTFRJUExZID0gNDsKKyAgICAvKiogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5k
aW5nIHRvIFNSQyBBTFBIQSAqIFNSQyArICgxIC0gU1JDKSAqIERFU1QgKi8KKyAgICBDb25zdGFu
dHMuQUxQSEFfTUFYSU1JWkVEID0gNTsKKyAgICAvKiogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5k
aW5nIHRvIFNSQyArIERFU1QgKi8KKyAgICBDb25zdGFudHMuQUxQSEFfT05FT05FID0gNjsKKyAg
ICAvKiogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5kaW5nIHRvIFNSQyArICgxIC0gU1JDIEFMUEhB
KSAqIERFU1QgKi8KKyAgICBDb25zdGFudHMuQUxQSEFfUFJFTVVMVElQTElFRCA9IDc7CisgICAg
LyoqCisgICAgICogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5kaW5nIHRvIFNSQyArICgxIC0gU1JD
IEFMUEhBKSAqIERFU1QKKyAgICAgKiBBbHBoYSB3aWxsIGJlIHNldCB0byAoMSAtIFNSQyBBTFBI
QSkgKiBERVNUIEFMUEhBCisgICAgICovCisgICAgQ29uc3RhbnRzLkFMUEhBX1BSRU1VTFRJUExJ
RURfUE9SVEVSRFVGRiA9IDg7CisgICAgLyoqIERlZmluZXMgdGhhdCBhbHBoYSBibGVuZGluZyB0
byBDU1QgKiBTUkMgKyAoMSAtIENTVCkgKiBERVNUICovCisgICAgQ29uc3RhbnRzLkFMUEhBX0lO
VEVSUE9MQVRFID0gOTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoYXQgYWxwaGEgYmxlbmRp
bmcgdG8gU1JDICsgKDEgLSBTUkMpICogREVTVAorICAgICAqIEFscGhhIHdpbGwgYmUgc2V0IHRv
IFNSQyBBTFBIQSArICgxIC0gU1JDIEFMUEhBKSAqIERFU1QgQUxQSEEKKyAgICAgKi8KKyAgICBD
b25zdGFudHMuQUxQSEFfU0NSRUVOTU9ERSA9IDEwOworICAgIC8qKiBEZWZpbmVzIHRoYXQgdGhl
IHJlc3NvdXJjZSBpcyBub3QgZGVsYXllZCovCisgICAgQ29uc3RhbnRzLkRFTEFZTE9BRFNUQVRF
X05PTkUgPSAwOworICAgIC8qKiBEZWZpbmVzIHRoYXQgdGhlIHJlc3NvdXJjZSB3YXMgc3VjY2Vz
c2Z1bGx5IGRlbGF5IGxvYWRlZCAqLworICAgIENvbnN0YW50cy5ERUxBWUxPQURTVEFURV9MT0FE
RUQgPSAxOworICAgIC8qKiBEZWZpbmVzIHRoYXQgdGhlIHJlc3NvdXJjZSBpcyBjdXJyZW50bHkg
ZGVsYXkgbG9hZGluZyAqLworICAgIENvbnN0YW50cy5ERUxBWUxPQURTVEFURV9MT0FESU5HID0g
MjsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRoZSByZXNzb3VyY2UgaXMgZGVsYXllZCBhbmQgaGFz
IG5vdCBzdGFydGVkIGxvYWRpbmcgKi8KKyAgICBDb25zdGFudHMuREVMQVlMT0FEU1RBVEVfTk9U
TE9BREVEID0gNDsKKyAgICAvLyBEZXBodCBvciBTdGVuY2lsIHRlc3QgQ29uc3RhbnRzLgorICAg
IC8qKiBQYXNzZWQgdG8gZGVwdGhGdW5jdGlvbiBvciBzdGVuY2lsRnVuY3Rpb24gdG8gc3BlY2lm
eSBkZXB0aCBvciBzdGVuY2lsIHRlc3RzIHdpbGwgbmV2ZXIgcGFzcy4gaS5lLiBOb3RoaW5nIHdp
bGwgYmUgZHJhd24gKi8KKyAgICBDb25zdGFudHMuTkVWRVIgPSAweDAyMDA7CisgICAgLyoqIFBh
c3NlZCB0byBkZXB0aEZ1bmN0aW9uIG9yIHN0ZW5jaWxGdW5jdGlvbiB0byBzcGVjaWZ5IGRlcHRo
IG9yIHN0ZW5jaWwgdGVzdHMgd2lsbCBhbHdheXMgcGFzcy4gaS5lLiBQaXhlbHMgd2lsbCBiZSBk
cmF3biBpbiB0aGUgb3JkZXIgdGhleSBhcmUgZHJhd24gKi8KKyAgICBDb25zdGFudHMuQUxXQVlT
ID0gMHgwMjA3OworICAgIC8qKiBQYXNzZWQgdG8gZGVwdGhGdW5jdGlvbiBvciBzdGVuY2lsRnVu
Y3Rpb24gdG8gc3BlY2lmeSBkZXB0aCBvciBzdGVuY2lsIHRlc3RzIHdpbGwgcGFzcyBpZiB0aGUg
bmV3IGRlcHRoIHZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgc3RvcmVkIHZhbHVlICovCisgICAgQ29u
c3RhbnRzLkxFU1MgPSAweDAyMDE7CisgICAgLyoqIFBhc3NlZCB0byBkZXB0aEZ1bmN0aW9uIG9y
IHN0ZW5jaWxGdW5jdGlvbiB0byBzcGVjaWZ5IGRlcHRoIG9yIHN0ZW5jaWwgdGVzdHMgd2lsbCBw
YXNzIGlmIHRoZSBuZXcgZGVwdGggdmFsdWUgaXMgZXF1YWxzIHRvIHRoZSBzdG9yZWQgdmFsdWUg
Ki8KKyAgICBDb25zdGFudHMuRVFVQUwgPSAweDAyMDI7CisgICAgLyoqIFBhc3NlZCB0byBkZXB0
aEZ1bmN0aW9uIG9yIHN0ZW5jaWxGdW5jdGlvbiB0byBzcGVjaWZ5IGRlcHRoIG9yIHN0ZW5jaWwg
dGVzdHMgd2lsbCBwYXNzIGlmIHRoZSBuZXcgZGVwdGggdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVx
dWFsIHRvIHRoZSBzdG9yZWQgdmFsdWUgKi8KKyAgICBDb25zdGFudHMuTEVRVUFMID0gMHgwMjAz
OworICAgIC8qKiBQYXNzZWQgdG8gZGVwdGhGdW5jdGlvbiBvciBzdGVuY2lsRnVuY3Rpb24gdG8g
c3BlY2lmeSBkZXB0aCBvciBzdGVuY2lsIHRlc3RzIHdpbGwgcGFzcyBpZiB0aGUgbmV3IGRlcHRo
IHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3RvcmVkIHZhbHVlICovCisgICAgQ29uc3RhbnRz
LkdSRUFURVIgPSAweDAyMDQ7CisgICAgLyoqIFBhc3NlZCB0byBkZXB0aEZ1bmN0aW9uIG9yIHN0
ZW5jaWxGdW5jdGlvbiB0byBzcGVjaWZ5IGRlcHRoIG9yIHN0ZW5jaWwgdGVzdHMgd2lsbCBwYXNz
IGlmIHRoZSBuZXcgZGVwdGggdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBz
dG9yZWQgdmFsdWUgKi8KKyAgICBDb25zdGFudHMuR0VRVUFMID0gMHgwMjA2OworICAgIC8qKiBQ
YXNzZWQgdG8gZGVwdGhGdW5jdGlvbiBvciBzdGVuY2lsRnVuY3Rpb24gdG8gc3BlY2lmeSBkZXB0
aCBvciBzdGVuY2lsIHRlc3RzIHdpbGwgcGFzcyBpZiB0aGUgbmV3IGRlcHRoIHZhbHVlIGlzIG5v
dCBlcXVhbCB0byB0aGUgc3RvcmVkIHZhbHVlICovCisgICAgQ29uc3RhbnRzLk5PVEVRVUFMID0g
MHgwMjA1OworICAgIC8vIFN0ZW5jaWwgQWN0aW9ucyBDb25zdGFudHMuCisgICAgLyoqIFBhc3Nl
ZCB0byBzdGVuY2lsT3BlcmF0aW9uIHRvIHNwZWNpZnkgdGhhdCBzdGVuY2lsIHZhbHVlIG11c3Qg
YmUga2VwdCAqLworICAgIENvbnN0YW50cy5LRUVQID0gMHgxRTAwOworICAgIC8qKiBQYXNzZWQg
dG8gc3RlbmNpbE9wZXJhdGlvbiB0byBzcGVjaWZ5IHRoYXQgc3RlbmNpbCB2YWx1ZSBtdXN0IGJl
IHplcm8gKi8KKyAgICBDb25zdGFudHMuWkVSTyA9IDB4MDAwMDsKKyAgICAvKiogUGFzc2VkIHRv
IHN0ZW5jaWxPcGVyYXRpb24gdG8gc3BlY2lmeSB0aGF0IHN0ZW5jaWwgdmFsdWUgbXVzdCBiZSBy
ZXBsYWNlZCAqLworICAgIENvbnN0YW50cy5SRVBMQUNFID0gMHgxRTAxOworICAgIC8qKiBQYXNz
ZWQgdG8gc3RlbmNpbE9wZXJhdGlvbiB0byBzcGVjaWZ5IHRoYXQgc3RlbmNpbCB2YWx1ZSBtdXN0
IGJlIGluY3JlbWVudGVkICovCisgICAgQ29uc3RhbnRzLklOQ1IgPSAweDFFMDI7CisgICAgLyoq
IFBhc3NlZCB0byBzdGVuY2lsT3BlcmF0aW9uIHRvIHNwZWNpZnkgdGhhdCBzdGVuY2lsIHZhbHVl
IG11c3QgYmUgZGVjcmVtZW50ZWQgKi8KKyAgICBDb25zdGFudHMuREVDUiA9IDB4MUUwMzsKKyAg
ICAvKiogUGFzc2VkIHRvIHN0ZW5jaWxPcGVyYXRpb24gdG8gc3BlY2lmeSB0aGF0IHN0ZW5jaWwg
dmFsdWUgbXVzdCBiZSBpbnZlcnRlZCAqLworICAgIENvbnN0YW50cy5JTlZFUlQgPSAweDE1MEE7
CisgICAgLyoqIFBhc3NlZCB0byBzdGVuY2lsT3BlcmF0aW9uIHRvIHNwZWNpZnkgdGhhdCBzdGVu
Y2lsIHZhbHVlIG11c3QgYmUgaW5jcmVtZW50ZWQgd2l0aCB3cmFwcGluZyAqLworICAgIENvbnN0
YW50cy5JTkNSX1dSQVAgPSAweDg1MDc7CisgICAgLyoqIFBhc3NlZCB0byBzdGVuY2lsT3BlcmF0
aW9uIHRvIHNwZWNpZnkgdGhhdCBzdGVuY2lsIHZhbHVlIG11c3QgYmUgZGVjcmVtZW50ZWQgd2l0
aCB3cmFwcGluZyAqLworICAgIENvbnN0YW50cy5ERUNSX1dSQVAgPSAweDg1MDg7CisgICAgLyoq
IFRleHR1cmUgaXMgbm90IHJlcGVhdGluZyBvdXRzaWRlIG9mIDAuLjEgVVZzICovCisgICAgQ29u
c3RhbnRzLlRFWFRVUkVfQ0xBTVBfQUREUkVTU01PREUgPSAwOworICAgIC8qKiBUZXh0dXJlIGlz
IHJlcGVhdGluZyBvdXRzaWRlIG9mIDAuLjEgVVZzICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVf
V1JBUF9BRERSRVNTTU9ERSA9IDE7CisgICAgLyoqIFRleHR1cmUgaXMgcmVwZWF0aW5nIGFuZCBt
aXJyb3JlZCAqLworICAgIENvbnN0YW50cy5URVhUVVJFX01JUlJPUl9BRERSRVNTTU9ERSA9IDI7
CisgICAgLyoqIEFMUEhBICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVGT1JNQVRfQUxQSEEgPSAw
OworICAgIC8qKiBMVU1JTkFOQ0UgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRUZPUk1BVF9MVU1J
TkFOQ0UgPSAxOworICAgIC8qKiBMVU1JTkFOQ0VfQUxQSEEgKi8KKyAgICBDb25zdGFudHMuVEVY
VFVSRUZPUk1BVF9MVU1JTkFOQ0VfQUxQSEEgPSAyOworICAgIC8qKiBSR0IgKi8KKyAgICBDb25z
dGFudHMuVEVYVFVSRUZPUk1BVF9SR0IgPSA0OworICAgIC8qKiBSR0JBICovCisgICAgQ29uc3Rh
bnRzLlRFWFRVUkVGT1JNQVRfUkdCQSA9IDU7CisgICAgLyoqIFJFRCAqLworICAgIENvbnN0YW50
cy5URVhUVVJFRk9STUFUX1JFRCA9IDY7CisgICAgLyoqIFJFRCAoMm5kIHJlZmVyZW5jZSkgKi8K
KyAgICBDb25zdGFudHMuVEVYVFVSRUZPUk1BVF9SID0gNjsKKyAgICAvKiogUkcgKi8KKyAgICBD
b25zdGFudHMuVEVYVFVSRUZPUk1BVF9SRyA9IDc7CisgICAgLyoqIFJFRF9JTlRFR0VSICovCisg
ICAgQ29uc3RhbnRzLlRFWFRVUkVGT1JNQVRfUkVEX0lOVEVHRVIgPSA4OworICAgIC8qKiBSRURf
SU5URUdFUiAoMm5kIHJlZmVyZW5jZSkgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRUZPUk1BVF9S
X0lOVEVHRVIgPSA4OworICAgIC8qKiBSR19JTlRFR0VSICovCisgICAgQ29uc3RhbnRzLlRFWFRV
UkVGT1JNQVRfUkdfSU5URUdFUiA9IDk7CisgICAgLyoqIFJHQl9JTlRFR0VSICovCisgICAgQ29u
c3RhbnRzLlRFWFRVUkVGT1JNQVRfUkdCX0lOVEVHRVIgPSAxMDsKKyAgICAvKiogUkdCQV9JTlRF
R0VSICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVGT1JNQVRfUkdCQV9JTlRFR0VSID0gMTE7Cisg
ICAgLyoqIFVOU0lHTkVEX0JZVEUgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRVRZUEVfVU5TSUdO
RURfQllURSA9IDA7CisgICAgLyoqIFVOU0lHTkVEX0JZVEUgKDJuZCByZWZlcmVuY2UpICovCisg
ICAgQ29uc3RhbnRzLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCA9IDA7CisgICAgLyoqIEZMT0FU
ICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVUWVBFX0ZMT0FUID0gMTsKKyAgICAvKiogSEFMRl9G
TE9BVCAqLworICAgIENvbnN0YW50cy5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUID0gMjsKKyAgICAv
KiogQllURSAqLworICAgIENvbnN0YW50cy5URVhUVVJFVFlQRV9CWVRFID0gMzsKKyAgICAvKiog
U0hPUlQgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRVRZUEVfU0hPUlQgPSA0OworICAgIC8qKiBV
TlNJR05FRF9TSE9SVCAqLworICAgIENvbnN0YW50cy5URVhUVVJFVFlQRV9VTlNJR05FRF9TSE9S
VCA9IDU7CisgICAgLyoqIElOVCAqLworICAgIENvbnN0YW50cy5URVhUVVJFVFlQRV9JTlQgPSA2
OworICAgIC8qKiBVTlNJR05FRF9JTlQgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRVRZUEVfVU5T
SUdORURfSU5URUdFUiA9IDc7CisgICAgLyoqIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgKi8KKyAg
ICBDb25zdGFudHMuVEVYVFVSRVRZUEVfVU5TSUdORURfU0hPUlRfNF80XzRfNCA9IDg7CisgICAg
LyoqIFVOU0lHTkVEX1NIT1JUXzVfNV81XzEgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRVRZUEVf
VU5TSUdORURfU0hPUlRfNV81XzVfMSA9IDk7CisgICAgLyoqIFVOU0lHTkVEX1NIT1JUXzVfNl81
ICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVUWVBFX1VOU0lHTkVEX1NIT1JUXzVfNl81ID0gMTA7
CisgICAgLyoqIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAqLworICAgIENvbnN0YW50cy5U
RVhUVVJFVFlQRV9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgPSAxMTsKKyAgICAvKiogVU5T
SUdORURfSU5UXzI0XzggKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5U
XzI0XzggPSAxMjsKKyAgICAvKiogVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViAqLworICAg
IENvbnN0YW50cy5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWID0gMTM7
CisgICAgLyoqIFVOU0lHTkVEX0lOVF81XzlfOV85X1JFViAqLworICAgIENvbnN0YW50cy5URVhU
VVJFVFlQRV9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYgPSAxNDsKKyAgICAvKiogRkxPQVRfMzJf
VU5TSUdORURfSU5UXzI0XzhfUkVWICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVUWVBFX0ZMT0FU
XzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViA9IDE1OworICAgIC8qKiBuZWFyZXN0IGlzIG1hZyA9
IG5lYXJlc3QgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1pcCA9IGxpbmVhciAqLworICAgIENvbnN0
YW50cy5URVhUVVJFX05FQVJFU1RfU0FNUExJTkdNT0RFID0gMTsKKyAgICAvKiogQmlsaW5lYXIg
aXMgbWFnID0gbGluZWFyIGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IG5lYXJlc3QgKi8KKyAg
ICBDb25zdGFudHMuVEVYVFVSRV9CSUxJTkVBUl9TQU1QTElOR01PREUgPSAyOworICAgIC8qKiBU
cmlsaW5lYXIgaXMgbWFnID0gbGluZWFyIGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IGxpbmVh
ciAqLworICAgIENvbnN0YW50cy5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01PREUgPSAzOwor
ICAgIC8qKiBuZWFyZXN0IGlzIG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1p
cCA9IGxpbmVhciAqLworICAgIENvbnN0YW50cy5URVhUVVJFX05FQVJFU1RfTkVBUkVTVF9NSVBM
SU5FQVIgPSAxOworICAgIC8qKiBCaWxpbmVhciBpcyBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IGxp
bmVhciBhbmQgbWlwID0gbmVhcmVzdCAqLworICAgIENvbnN0YW50cy5URVhUVVJFX0xJTkVBUl9M
SU5FQVJfTUlQTkVBUkVTVCA9IDI7CisgICAgLyoqIFRyaWxpbmVhciBpcyBtYWcgPSBsaW5lYXIg
YW5kIG1pbiA9IGxpbmVhciBhbmQgbWlwID0gbGluZWFyICovCisgICAgQ29uc3RhbnRzLlRFWFRV
UkVfTElORUFSX0xJTkVBUl9NSVBMSU5FQVIgPSAzOworICAgIC8qKiBtYWcgPSBuZWFyZXN0IGFu
ZCBtaW4gPSBuZWFyZXN0IGFuZCBtaXAgPSBuZWFyZXN0ICovCisgICAgQ29uc3RhbnRzLlRFWFRV
UkVfTkVBUkVTVF9ORUFSRVNUX01JUE5FQVJFU1QgPSA0OworICAgIC8qKiBtYWcgPSBuZWFyZXN0
IGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IG5lYXJlc3QgKi8KKyAgICBDb25zdGFudHMuVEVY
VFVSRV9ORUFSRVNUX0xJTkVBUl9NSVBORUFSRVNUID0gNTsKKyAgICAvKiogbWFnID0gbmVhcmVz
dCBhbmQgbWluID0gbGluZWFyIGFuZCBtaXAgPSBsaW5lYXIgKi8KKyAgICBDb25zdGFudHMuVEVY
VFVSRV9ORUFSRVNUX0xJTkVBUl9NSVBMSU5FQVIgPSA2OworICAgIC8qKiBtYWcgPSBuZWFyZXN0
IGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IG5vbmUgKi8KKyAgICBDb25zdGFudHMuVEVYVFVS
RV9ORUFSRVNUX0xJTkVBUiA9IDc7CisgICAgLyoqIG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IG5l
YXJlc3QgYW5kIG1pcCA9IG5vbmUgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRV9ORUFSRVNUX05F
QVJFU1QgPSA4OworICAgIC8qKiBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1p
cCA9IG5lYXJlc3QgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRV9MSU5FQVJfTkVBUkVTVF9NSVBO
RUFSRVNUID0gOTsKKyAgICAvKiogbWFnID0gbGluZWFyIGFuZCBtaW4gPSBuZWFyZXN0IGFuZCBt
aXAgPSBsaW5lYXIgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRV9MSU5FQVJfTkVBUkVTVF9NSVBM
SU5FQVIgPSAxMDsKKyAgICAvKiogbWFnID0gbGluZWFyIGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1p
cCA9IG5vbmUgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRV9MSU5FQVJfTElORUFSID0gMTE7Cisg
ICAgLyoqIG1hZyA9IGxpbmVhciBhbmQgbWluID0gbmVhcmVzdCBhbmQgbWlwID0gbm9uZSAqLwor
ICAgIENvbnN0YW50cy5URVhUVVJFX0xJTkVBUl9ORUFSRVNUID0gMTI7CisgICAgLyoqIEV4cGxp
Y2l0IGNvb3JkaW5hdGVzIG1vZGUgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRV9FWFBMSUNJVF9N
T0RFID0gMDsKKyAgICAvKiogU3BoZXJpY2FsIGNvb3JkaW5hdGVzIG1vZGUgKi8KKyAgICBDb25z
dGFudHMuVEVYVFVSRV9TUEhFUklDQUxfTU9ERSA9IDE7CisgICAgLyoqIFBsYW5hciBjb29yZGlu
YXRlcyBtb2RlICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVfUExBTkFSX01PREUgPSAyOworICAg
IC8qKiBDdWJpYyBjb29yZGluYXRlcyBtb2RlICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVfQ1VC
SUNfTU9ERSA9IDM7CisgICAgLyoqIFByb2plY3Rpb24gY29vcmRpbmF0ZXMgbW9kZSAqLworICAg
IENvbnN0YW50cy5URVhUVVJFX1BST0pFQ1RJT05fTU9ERSA9IDQ7CisgICAgLyoqIFNreWJveCBj
b29yZGluYXRlcyBtb2RlICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVfU0tZQk9YX01PREUgPSA1
OworICAgIC8qKiBJbnZlcnNlIEN1YmljIGNvb3JkaW5hdGVzIG1vZGUgKi8KKyAgICBDb25zdGFu
dHMuVEVYVFVSRV9JTlZDVUJJQ19NT0RFID0gNjsKKyAgICAvKiogRXF1aXJlY3Rhbmd1bGFyIGNv
b3JkaW5hdGVzIG1vZGUgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRV9FUVVJUkVDVEFOR1VMQVJf
TU9ERSA9IDc7CisgICAgLyoqIEVxdWlyZWN0YW5ndWxhciBGaXhlZCBjb29yZGluYXRlcyBtb2Rl
ICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVfRklYRURfRVFVSVJFQ1RBTkdVTEFSX01PREUgPSA4
OworICAgIC8qKiBFcXVpcmVjdGFuZ3VsYXIgRml4ZWQgTWlycm9yZWQgY29vcmRpbmF0ZXMgbW9k
ZSAqLworICAgIENvbnN0YW50cy5URVhUVVJFX0ZJWEVEX0VRVUlSRUNUQU5HVUxBUl9NSVJST1JF
RF9NT0RFID0gOTsKKyAgICAvLyBUZXh0dXJlIHJlc2NhbGluZyBtb2RlCisgICAgLyoqIERlZmlu
ZXMgdGhhdCB0ZXh0dXJlIHJlc2NhbGluZyB3aWxsIHVzZSBhIGZsb29yIHRvIGZpbmQgdGhlIGNs
b3NlciBwb3dlciBvZiAyIHNpemUgKi8KKyAgICBDb25zdGFudHMuU0NBTEVNT0RFX0ZMT09SID0g
MTsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRleHR1cmUgcmVzY2FsaW5nIHdpbGwgbG9vayBmb3Ig
dGhlIG5lYXJlc3QgcG93ZXIgb2YgMiBzaXplICovCisgICAgQ29uc3RhbnRzLlNDQUxFTU9ERV9O
RUFSRVNUID0gMjsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRleHR1cmUgcmVzY2FsaW5nIHdpbGwg
dXNlIGEgY2VpbCB0byBmaW5kIHRoZSBjbG9zZXIgcG93ZXIgb2YgMiBzaXplICovCisgICAgQ29u
c3RhbnRzLlNDQUxFTU9ERV9DRUlMSU5HID0gMzsKKyAgICAvKioKKyAgICAgKiBUaGUgZGlydHkg
dGV4dHVyZSBmbGFnIHZhbHVlCisgICAgICovCisgICAgQ29uc3RhbnRzLk1BVEVSSUFMX1RleHR1
cmVEaXJ0eUZsYWcgPSAxOworICAgIC8qKgorICAgICAqIFRoZSBkaXJ0eSBsaWdodCBmbGFnIHZh
bHVlCisgICAgICovCisgICAgQ29uc3RhbnRzLk1BVEVSSUFMX0xpZ2h0RGlydHlGbGFnID0gMjsK
KyAgICAvKioKKyAgICAgKiBUaGUgZGlydHkgZnJlc25lbCBmbGFnIHZhbHVlCisgICAgICovCisg
ICAgQ29uc3RhbnRzLk1BVEVSSUFMX0ZyZXNuZWxEaXJ0eUZsYWcgPSA0OworICAgIC8qKgorICAg
ICAqIFRoZSBkaXJ0eSBhdHRyaWJ1dGUgZmxhZyB2YWx1ZQorICAgICAqLworICAgIENvbnN0YW50
cy5NQVRFUklBTF9BdHRyaWJ1dGVzRGlydHlGbGFnID0gODsKKyAgICAvKioKKyAgICAgKiBUaGUg
ZGlydHkgbWlzYyBmbGFnIHZhbHVlCisgICAgICovCisgICAgQ29uc3RhbnRzLk1BVEVSSUFMX01p
c2NEaXJ0eUZsYWcgPSAxNjsKKyAgICAvKioKKyAgICAgKiBUaGUgYWxsIGRpcnR5IGZsYWcgdmFs
dWUKKyAgICAgKi8KKyAgICBDb25zdGFudHMuTUFURVJJQUxfQWxsRGlydHlGbGFnID0gMzE7Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdHJpYW5nbGUgZmlsbCBtb2RlCisgICAgICovCisg
ICAgQ29uc3RhbnRzLk1BVEVSSUFMX1RyaWFuZ2xlRmlsbE1vZGUgPSAwOworICAgIC8qKgorICAg
ICAqIFJldHVybnMgdGhlIHdpcmVmcmFtZSBtb2RlCisgICAgICovCisgICAgQ29uc3RhbnRzLk1B
VEVSSUFMX1dpcmVGcmFtZUZpbGxNb2RlID0gMTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSBwb2ludCBmaWxsIG1vZGUKKyAgICAgKi8KKyAgICBDb25zdGFudHMuTUFURVJJQUxfUG9pbnRG
aWxsTW9kZSA9IDI7CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgcG9pbnQgbGlzdCBkcmF3
IG1vZGUKKyAgICAgKi8KKyAgICBDb25zdGFudHMuTUFURVJJQUxfUG9pbnRMaXN0RHJhd01vZGUg
PSAzOworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGxpbmUgbGlzdCBkcmF3IG1vZGUKKyAg
ICAgKi8KKyAgICBDb25zdGFudHMuTUFURVJJQUxfTGluZUxpc3REcmF3TW9kZSA9IDQ7CisgICAg
LyoqCisgICAgICogUmV0dXJucyB0aGUgbGluZSBsb29wIGRyYXcgbW9kZQorICAgICAqLworICAg
IENvbnN0YW50cy5NQVRFUklBTF9MaW5lTG9vcERyYXdNb2RlID0gNTsKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIHRoZSBsaW5lIHN0cmlwIGRyYXcgbW9kZQorICAgICAqLworICAgIENvbnN0YW50
cy5NQVRFUklBTF9MaW5lU3RyaXBEcmF3TW9kZSA9IDY7CisgICAgLyoqCisgICAgICogUmV0dXJu
cyB0aGUgdHJpYW5nbGUgc3RyaXAgZHJhdyBtb2RlCisgICAgICovCisgICAgQ29uc3RhbnRzLk1B
VEVSSUFMX1RyaWFuZ2xlU3RyaXBEcmF3TW9kZSA9IDc7CisgICAgLyoqCisgICAgICogUmV0dXJu
cyB0aGUgdHJpYW5nbGUgZmFuIGRyYXcgbW9kZQorICAgICAqLworICAgIENvbnN0YW50cy5NQVRF
UklBTF9UcmlhbmdsZUZhbkRyYXdNb2RlID0gODsKKyAgICAvKioKKyAgICAgKiBTdG9yZXMgdGhl
IGNsb2NrLXdpc2Ugc2lkZSBvcmllbnRhdGlvbgorICAgICAqLworICAgIENvbnN0YW50cy5NQVRF
UklBTF9DbG9ja1dpc2VTaWRlT3JpZW50YXRpb24gPSAwOworICAgIC8qKgorICAgICAqIFN0b3Jl
cyB0aGUgY291bnRlciBjbG9jay13aXNlIHNpZGUgb3JpZW50YXRpb24KKyAgICAgKi8KKyAgICBD
b25zdGFudHMuTUFURVJJQUxfQ291bnRlckNsb2NrV2lzZVNpZGVPcmllbnRhdGlvbiA9IDE7Cisg
ICAgLyoqCisgICAgICogTm90aGluZworICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBDb25z
dGFudHMuQUNUSU9OX05vdGhpbmdUcmlnZ2VyID0gMDsKKyAgICAvKioKKyAgICAgKiBPbiBwaWNr
CisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vf
YWN0aW9ucyN0cmlnZ2VycworICAgICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25QaWNrVHJp
Z2dlciA9IDE7CisgICAgLyoqCisgICAgICogT24gbGVmdCBwaWNrCisgICAgICogQHNlZSBodHRw
Oi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucyN0cmlnZ2Vycwor
ICAgICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25MZWZ0UGlja1RyaWdnZXIgPSAyOworICAg
IC8qKgorICAgICAqIE9uIHJpZ2h0IHBpY2sKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxv
bmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJzCisgICAgICovCisgICAg
Q29uc3RhbnRzLkFDVElPTl9PblJpZ2h0UGlja1RyaWdnZXIgPSAzOworICAgIC8qKgorICAgICAq
IE9uIGNlbnRlciBwaWNrCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL2hvd190b191c2VfYWN0aW9ucyN0cmlnZ2VycworICAgICAqLworICAgIENvbnN0YW50cy5B
Q1RJT05fT25DZW50ZXJQaWNrVHJpZ2dlciA9IDQ7CisgICAgLyoqCisgICAgICogT24gcGljayBk
b3duCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191
c2VfYWN0aW9ucyN0cmlnZ2VycworICAgICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25QaWNr
RG93blRyaWdnZXIgPSA1OworICAgIC8qKgorICAgICAqIE9uIGRvdWJsZSBwaWNrCisgICAgICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucyN0
cmlnZ2VycworICAgICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25Eb3VibGVQaWNrVHJpZ2dl
ciA9IDY7CisgICAgLyoqCisgICAgICogT24gcGljayB1cAorICAgICAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAg
Ki8KKyAgICBDb25zdGFudHMuQUNUSU9OX09uUGlja1VwVHJpZ2dlciA9IDc7CisgICAgLyoqCisg
ICAgICogT24gcGljayBvdXQuCisgICAgICogVGhpcyB0cmlnZ2VyIHdpbGwgb25seSBiZSByYWlz
ZWQgaWYgeW91IGFsc28gZGVjbGFyZWQgYSBPblBpY2tEb3duCisgICAgICogQHNlZSBodHRwOi8v
ZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucyN0cmlnZ2VycworICAg
ICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25QaWNrT3V0VHJpZ2dlciA9IDE2OworICAgIC8q
KgorICAgICAqIE9uIGxvbmcgcHJlc3MKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJzCisgICAgICovCisgICAgQ29u
c3RhbnRzLkFDVElPTl9PbkxvbmdQcmVzc1RyaWdnZXIgPSA4OworICAgIC8qKgorICAgICAqIE9u
IHBvaW50ZXIgb3ZlcgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBDb25zdGFudHMuQUNU
SU9OX09uUG9pbnRlck92ZXJUcmlnZ2VyID0gOTsKKyAgICAvKioKKyAgICAgKiBPbiBwb2ludGVy
IG91dAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9f
dXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBDb25zdGFudHMuQUNUSU9OX09uUG9p
bnRlck91dFRyaWdnZXIgPSAxMDsKKyAgICAvKioKKyAgICAgKiBPbiBldmVyeSBmcmFtZQorICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlv
bnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBDb25zdGFudHMuQUNUSU9OX09uRXZlcnlGcmFtZVRy
aWdnZXIgPSAxMTsKKyAgICAvKioKKyAgICAgKiBPbiBpbnRlcnNlY3Rpb24gZW50ZXIKKyAgICAg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25z
I3RyaWdnZXJzCisgICAgICovCisgICAgQ29uc3RhbnRzLkFDVElPTl9PbkludGVyc2VjdGlvbkVu
dGVyVHJpZ2dlciA9IDEyOworICAgIC8qKgorICAgICAqIE9uIGludGVyc2VjdGlvbiBleGl0Cisg
ICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0
aW9ucyN0cmlnZ2VycworICAgICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25JbnRlcnNlY3Rp
b25FeGl0VHJpZ2dlciA9IDEzOworICAgIC8qKgorICAgICAqIE9uIGtleSBkb3duCisgICAgICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucyN0
cmlnZ2VycworICAgICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25LZXlEb3duVHJpZ2dlciA9
IDE0OworICAgIC8qKgorICAgICAqIE9uIGtleSB1cAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8K
KyAgICBDb25zdGFudHMuQUNUSU9OX09uS2V5VXBUcmlnZ2VyID0gMTU7CisgICAgLyoqCisgICAg
ICogQmlsbGJvYXJkIG1vZGUgd2lsbCBvbmx5IGFwcGx5IHRvIFkgYXhpcworICAgICAqLworICAg
IENvbnN0YW50cy5QQVJUSUNMRVNfQklMTEJPQVJETU9ERV9ZID0gMjsKKyAgICAvKioKKyAgICAg
KiBCaWxsYm9hcmQgbW9kZSB3aWxsIGFwcGx5IHRvIGFsbCBheGVzCisgICAgICovCisgICAgQ29u
c3RhbnRzLlBBUlRJQ0xFU19CSUxMQk9BUkRNT0RFX0FMTCA9IDc7CisgICAgLyoqCisgICAgICog
U3BlY2lhbCBiaWxsYm9hcmQgbW9kZSB3aGVyZSB0aGUgcGFydGljbGUgd2lsbCBiZSBiaWlsYm9h
cmQgdG8gdGhlIGNhbWVyYSBidXQgcm90YXRlZCB0byBhbGlnbiB3aXRoIGRpcmVjdGlvbgorICAg
ICAqLworICAgIENvbnN0YW50cy5QQVJUSUNMRVNfQklMTEJPQVJETU9ERV9TVFJFVENIRUQgPSA4
OworICAgIC8qKgorICAgICAqIEdldHMgb3Igc2V0cyBiYXNlIEFzc2V0cyBVUkwKKyAgICAgKi8K
KyAgICBDb25zdGFudHMuUEFSVElDTEVTX0Jhc2VBc3NldHNVcmwgPSAiaHR0cHM6Ly9hc3NldHMu
YmFieWxvbmpzLmNvbS9wYXJ0aWNsZXMiOworICAgIC8qKiBEZWZhdWx0IGN1bGxpbmcgc3RyYXRl
Z3kgOiB0aGlzIGlzIGFuIGV4Y2x1c2lvbiB0ZXN0IGFuZCBpdCdzIHRoZSBtb3JlIGFjY3VyYXRl
LgorICAgICAqICBUZXN0IG9yZGVyIDoKKyAgICAgKiAgSXMgdGhlIGJvdW5kaW5nIHNwaGVyZSBv
dXRzaWRlIHRoZSBmcnVzdHVtID8KKyAgICAgKiAgSWYgbm90LCBhcmUgdGhlIGJvdW5kaW5nIGJv
eCB2ZXJ0aWNlcyBvdXRzaWRlIHRoZSBmcnVzdHVtID8KKyAgICAgKiAgSXQgbm90LCB0aGVuIHRo
ZSBjdWxsYWJsZSBvYmplY3QgaXMgaW4gdGhlIGZydXN0dW0uCisgICAgICovCisgICAgQ29uc3Rh
bnRzLk1FU0hFU19DVUxMSU5HU1RSQVRFR1lfU1RBTkRBUkQgPSAwOworICAgIC8qKiBDdWxsaW5n
IHN0cmF0ZWd5IDogQm91bmRpbmcgU3BoZXJlIE9ubHkuCisgICAgICogIFRoaXMgaXMgYW4gZXhj
bHVzaW9uIHRlc3QuIEl0J3MgZmFzdGVyIHRoYW4gdGhlIHN0YW5kYXJkIHN0cmF0ZWd5IGJlY2F1
c2UgdGhlIGJvdW5kaW5nIGJveCBpcyBub3QgdGVzdGVkLgorICAgICAqICBJdCdzIGFsc28gbGVz
cyBhY2N1cmF0ZSB0aGFuIHRoZSBzdGFuZGFyZCBiZWNhdXNlIHNvbWUgbm90IHZpc2libGUgb2Jq
ZWN0cyBjYW4gc3RpbGwgYmUgc2VsZWN0ZWQuCisgICAgICogIFRlc3QgOiBpcyB0aGUgYm91bmRp
bmcgc3BoZXJlIG91dHNpZGUgdGhlIGZydXN0dW0gPworICAgICAqICBJZiBub3QsIHRoZW4gdGhl
IGN1bGxhYmxlIG9iamVjdCBpcyBpbiB0aGUgZnJ1c3R1bS4KKyAgICAgKi8KKyAgICBDb25zdGFu
dHMuTUVTSEVTX0NVTExJTkdTVFJBVEVHWV9CT1VORElOR1NQSEVSRV9PTkxZID0gMTsKKyAgICAv
KiogQ3VsbGluZyBzdHJhdGVneSA6IE9wdGltaXN0aWMgSW5jbHVzaW9uLgorICAgICAqICBUaGlz
IGluIGFuIGluY2x1c2lvbiB0ZXN0IGZpcnN0LCB0aGVuIHRoZSBzdGFuZGFyZCBleGNsdXNpb24g
dGVzdC4KKyAgICAgKiAgVGhpcyBjYW4gYmUgZmFzdGVyIHdoZW4gYSBjdWxsYWJsZSBvYmplY3Qg
aXMgZXhwZWN0ZWQgdG8gYmUgYWxtb3N0IGFsd2F5cyBpbiB0aGUgY2FtZXJhIGZydXN0dW0uCisg
ICAgICogIFRoaXMgY291bGQgYWxzbyBiZSBhIGxpdHRsZSBzbG93ZXIgdGhhbiB0aGUgc3RhbmRh
cmQgdGVzdCB3aGVuIHRoZSB0ZXN0ZWQgb2JqZWN0IGNlbnRlciBpcyBub3QgdGhlIGZydXN0dW0g
YnV0IG9uZSBvZiBpdHMgYm91bmRpbmcgYm94IHZlcnRleCBpcyBzdGlsbCBpbnNpZGUuCisgICAg
ICogIEFueXdheSwgaXQncyBhcyBhY2N1cmF0ZSBhcyB0aGUgc3RhbmRhcmQgc3RyYXRlZ3kuCisg
ICAgICogIFRlc3QgOgorICAgICAqICBJcyB0aGUgY3VsbGFibGUgb2JqZWN0IGJvdW5kaW5nIHNw
aGVyZSBjZW50ZXIgaW4gdGhlIGZydXN0dW0gPworICAgICAqICBJZiBub3QsIGFwcGx5IHRoZSBk
ZWZhdWx0IGN1bGxpbmcgc3RyYXRlZ3kuCisgICAgICovCisgICAgQ29uc3RhbnRzLk1FU0hFU19D
VUxMSU5HU1RSQVRFR1lfT1BUSU1JU1RJQ19JTkNMVVNJT04gPSAyOworICAgIC8qKiBDdWxsaW5n
IHN0cmF0ZWd5IDogT3B0aW1pc3RpYyBJbmNsdXNpb24gdGhlbiBCb3VuZGluZyBTcGhlcmUgT25s
eS4KKyAgICAgKiAgVGhpcyBpbiBhbiBpbmNsdXNpb24gdGVzdCBmaXJzdCwgdGhlbiB0aGUgYm91
bmRpbmcgc3BoZXJlIG9ubHkgZXhjbHVzaW9uIHRlc3QuCisgICAgICogIFRoaXMgY2FuIGJlIHRo
ZSBmYXN0ZXN0IHRlc3Qgd2hlbiBhIGN1bGxhYmxlIG9iamVjdCBpcyBleHBlY3RlZCB0byBiZSBh
bG1vc3QgYWx3YXlzIGluIHRoZSBjYW1lcmEgZnJ1c3R1bS4KKyAgICAgKiAgVGhpcyBjb3VsZCBh
bHNvIGJlIGEgbGl0dGxlIHNsb3dlciB0aGFuIHRoZSBCb3VuZGluZ1NwaGVyZU9ubHkgc3RyYXRl
Z3kgd2hlbiB0aGUgdGVzdGVkIG9iamVjdCBjZW50ZXIgaXMgbm90IGluIHRoZSBmcnVzdHVtIGJ1
dCBpdHMgYm91bmRpbmcgc3BoZXJlIHN0aWxsIGludGVyc2VjdHMgaXQuCisgICAgICogIEl0J3Mg
bGVzcyBhY2N1cmF0ZSB0aGFuIHRoZSBzdGFuZGFyZCBzdHJhdGVneSBhbmQgYXMgYWNjdXJhdGUg
YXMgdGhlIEJvdW5kaW5nU3BoZXJlT25seSBzdHJhdGVneS4KKyAgICAgKiAgVGVzdCA6CisgICAg
ICogIElzIHRoZSBjdWxsYWJsZSBvYmplY3QgYm91bmRpbmcgc3BoZXJlIGNlbnRlciBpbiB0aGUg
ZnJ1c3R1bSA/CisgICAgICogIElmIG5vdCwgYXBwbHkgdGhlIEJvdW5kaW5nIFNwaGVyZSBPbmx5
IHN0cmF0ZWd5LiBObyBCb3VuZGluZyBCb3ggaXMgdGVzdGVkIGhlcmUuCisgICAgICovCisgICAg
Q29uc3RhbnRzLk1FU0hFU19DVUxMSU5HU1RSQVRFR1lfT1BUSU1JU1RJQ19JTkNMVVNJT05fVEhF
Tl9CU1BIRVJFX09OTFkgPSAzOworICAgIC8qKgorICAgICAqIE5vIGxvZ2dpbmcgd2hpbGUgbG9h
ZGluZworICAgICAqLworICAgIENvbnN0YW50cy5TQ0VORUxPQURFUl9OT19MT0dHSU5HID0gMDsK
KyAgICAvKioKKyAgICAgKiBNaW5pbWFsIGxvZ2dpbmcgd2hpbGUgbG9hZGluZworICAgICAqLwor
ICAgIENvbnN0YW50cy5TQ0VORUxPQURFUl9NSU5JTUFMX0xPR0dJTkcgPSAxOworICAgIC8qKgor
ICAgICAqIFN1bW1hcnkgbG9nZ2luZyB3aGlsZSBsb2FkaW5nCisgICAgICovCisgICAgQ29uc3Rh
bnRzLlNDRU5FTE9BREVSX1NVTU1BUllfTE9HR0lORyA9IDI7CisgICAgLyoqCisgICAgICogRGV0
YWlsbGVkIGxvZ2dpbmcgd2hpbGUgbG9hZGluZworICAgICAqLworICAgIENvbnN0YW50cy5TQ0VO
RUxPQURFUl9ERVRBSUxFRF9MT0dHSU5HID0gMzsKKyAgICByZXR1cm4gQ29uc3RhbnRzOworfSgp
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvZW5naW5lLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBJbnN0YW5jaW5nQXR0cmlidXRlSW5mbywgRGVwdGhUZXh0dXJlQ3JlYXRpb25PcHRpb25z
LCBFbmdpbmVDYXBhYmlsaXRpZXMsIEVuZ2luZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJJbnN0YW5jaW5nQXR0cmlidXRlSW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
SW5zdGFuY2luZ0F0dHJpYnV0ZUluZm87IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhUZXh0
dXJlQ3JlYXRpb25PcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEZXB0aFRleHR1cmVDcmVh
dGlvbk9wdGlvbnM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRW5naW5lQ2FwYWJpbGl0aWVzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBFbmdpbmVDYXBhYmlsaXRpZXM7IH0pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFbmdpbmU7IH0pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGli
LmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01p
c2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWlzY19wZXJmb3JtYW5jZU1vbml0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvcGVyZm9ybWFuY2VNb25p
dG9yICovICIuL01pc2MvcGVyZm9ybWFuY2VNb25pdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2Nfc3RyaW5nRGljdGlvbmFyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9zdHJpbmdEaWN0aW9uYXJ5ICov
ICIuL01pc2Mvc3RyaW5nRGljdGlvbmFyeS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZl
Y3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2lu
dGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZSAqLyAiLi9N
YXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJuYWxUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1N0YXRlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU3RhdGVzL2luZGV4ICovICIuL1N0YXRlcy9pbmRleC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29uc3RhbnRzICovICIu
L0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
ZG9tTWFuYWdlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWlzYy9kb21NYW5hZ2VtZW50ICovICIuL01pc2MvZG9tTWFuYWdlbWVu
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dn
ZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZW5n
aW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5lU3RvcmUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldENy
ZWF0aW9uT3B0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRDcmVhdGlvbk9w
dGlvbnMgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRlclRhcmdldENyZWF0aW9uT3B0aW9u
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RldlRvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9k
ZXZUb29scyAqLyAiLi9NaXNjL2RldlRvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1dlYkdMX3dlYkdMUGlwZWxpbmVDb250ZXh0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9XZWJHTC93ZWJHTFBpcGVsaW5lQ29udGV4
dCAqLyAiLi9FbmdpbmVzL1dlYkdML3dlYkdMUGlwZWxpbmVDb250ZXh0LnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01lc2hlc19XZWJHTF93ZWJHTERhdGFCdWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMv
V2ViR0wvd2ViR0xEYXRhQnVmZmVyICovICIuL01lc2hlcy9XZWJHTC93ZWJHTERhdGFCdWZmZXIu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfV2ViR0xfd2ViR0wyU2hhZGVyUHJvY2Vz
c29yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vV2ViR0wvd2ViR0wyU2hhZGVyUHJvY2Vzc29ycyAqLyAiLi9FbmdpbmVzL1dlYkdML3dl
YkdMMlNoYWRlclByb2Nlc3NvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlz
Y19wZXJmQ291bnRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvcGVyZkNvdW50ZXIgKi8gIi4vTWlzYy9wZXJmQ291bnRlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2ZpbGVUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZmls
ZVRvb2xzICovICIuL01pc2MvZmlsZVRvb2xzLnRzIik7CisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisvKioKKyAqIEtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgYnVmZmVyIGluZm8g
dXNlZCBpbiBlbmdpbmUuCisgKi8KK3ZhciBCdWZmZXJQb2ludGVyID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEJ1ZmZlclBvaW50ZXIoKSB7CisgICAgfQorICAg
IHJldHVybiBCdWZmZXJQb2ludGVyOworfSgpKTsKKy8qKgorICogSW50ZXJmYWNlIGZvciBhdHRy
aWJ1dGUgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGJ1ZmZlciBpbnN0YW5jaWF0aW9uCisg
Ki8KK3ZhciBJbnN0YW5jaW5nQXR0cmlidXRlSW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICBmdW5jdGlvbiBJbnN0YW5jaW5nQXR0cmlidXRlSW5mbygpIHsKKyAgICB9Cisg
ICAgcmV0dXJuIEluc3RhbmNpbmdBdHRyaWJ1dGVJbmZvOworfSgpKTsKKworLyoqCisgKiBEZWZp
bmUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSBhIGRlcHRoIHRleHR1cmUKKyAqLwordmFyIERlcHRo
VGV4dHVyZUNyZWF0aW9uT3B0aW9ucyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICBmdW5jdGlvbiBEZXB0aFRleHR1cmVDcmVhdGlvbk9wdGlvbnMoKSB7CisgICAgfQorICAgIHJl
dHVybiBEZXB0aFRleHR1cmVDcmVhdGlvbk9wdGlvbnM7Cit9KCkpOworCisvKioKKyAqIENsYXNz
IHVzZWQgdG8gZGVzY3JpYmUgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZW5naW5lIHJlbGF0aXZl
bHkgdG8gdGhlIGN1cnJlbnQgYnJvd3NlcgorICovCit2YXIgRW5naW5lQ2FwYWJpbGl0aWVzID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEVuZ2luZUNhcGFiaWxp
dGllcygpIHsKKyAgICAgICAgLyoqIE1heCBudW1iZXIgb2YgdGV4dHVyZSBzYW1wbGVzIGZvciBN
U0FBICovCisgICAgICAgIHRoaXMubWF4TVNBQVNhbXBsZXMgPSAxOworICAgIH0KKyAgICByZXR1
cm4gRW5naW5lQ2FwYWJpbGl0aWVzOworfSgpKTsKKworLyoqCisgKiBUaGUgZW5naW5lIGNsYXNz
IGlzIHJlc3BvbnNpYmxlIGZvciBpbnRlcmZhY2luZyB3aXRoIGFsbCBsb3dlci1sZXZlbCBBUElz
IHN1Y2ggYXMgV2ViR0wgYW5kIEF1ZGlvCisgKi8KK3ZhciBFbmdpbmUgPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBlbmdpbmUKKyAg
ICAgKiBAcGFyYW0gY2FudmFzT3JDb250ZXh0IGRlZmluZXMgdGhlIGNhbnZhcyBvciBXZWJHTCBj
b250ZXh0IHRvIHVzZSBmb3IgcmVuZGVyaW5nLiBJZiB5b3UgcHJvdmlkZSBhIFdlYkdMIGNvbnRl
eHQsIEJhYnlsb24uanMgd2lsbCBub3QgaG9vayBldmVudHMgb24gdGhlIGNhbnZhcyAobGlrZSBw
b2ludGVycywga2V5Ym9hcmRzLCBldGMuLi4pIHNvIG5vIGV2ZW50IG9ic2VydmFibGVzIHdpbGwg
YmUgYXZhaWxhYmxlLiBUaGlzIGlzIG1vc3RseSB1c2VkIHdoZW4gQmFieWxvbi5qcyBpcyB1c2Vk
IGFzIGEgcGx1Z2luIG9uIGEgc3lzdGVtIHdoaWNoIGFscmVheSB1c2VkIHRoZSBXZWJHTCBjb250
ZXh0CisgICAgICogQHBhcmFtIGFudGlhbGlhcyBkZWZpbmVzIGVuYWJsZSBhbnRpYWxpYXNpbmcg
KGRlZmF1bHQ6IGZhbHNlKQorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgZnVydGhlciBv
cHRpb25zIHRvIGJlIHNlbnQgdG8gdGhlIGdldENvbnRleHQoKSBmdW5jdGlvbgorICAgICAqIEBw
YXJhbSBhZGFwdFRvRGV2aWNlUmF0aW8gZGVmaW5lcyB3aGV0aGVyIHRvIGFkYXB0IHRvIHRoZSBk
ZXZpY2UncyB2aWV3cG9ydCBjaGFyYWN0ZXJpc3RpY3MgKGRlZmF1bHQ6IGZhbHNlKQorICAgICAq
LworICAgIGZ1bmN0aW9uIEVuZ2luZShjYW52YXNPckNvbnRleHQsIGFudGlhbGlhcywgb3B0aW9u
cywgYWRhcHRUb0RldmljZVJhdGlvKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIGlmIChhZGFwdFRvRGV2aWNlUmF0aW8gPT09IHZvaWQgMCkgeyBhZGFwdFRvRGV2aWNlUmF0
aW8gPSBmYWxzZTsgfQorICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9v
bGVhbiB0aGF0IGluZGljYXRlcyBpZiB0ZXh0dXJlcyBtdXN0IGJlIGZvcmNlZCB0byBwb3dlciBv
ZiAyIHNpemUgZXZlbiBpZiBub3QgcmVxdWlyZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
Zm9yY2VQT1RUZXh0dXJlcyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBh
IGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgZW5naW5lIGlzIGN1cnJlbnRseSByZW5kZXJpbmcg
aW4gZnVsbHNjcmVlbiBtb2RlCisgICAgICAgICAqLworICAgICAgICB0aGlzLmlzRnVsbHNjcmVl
biA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNh
dGluZyBpZiB0aGUgcG9pbnRlciBpcyBjdXJyZW50bHkgbG9ja2VkCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLmlzUG9pbnRlckxvY2sgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBiYWNrIGZhY2VzIG11c3QgYmUg
Y3VsbGVkICh0cnVlIGJ5IGRlZmF1bHQpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmN1bGxC
YWNrRmFjZXMgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBlbmdpbmUgbXVzdCBrZWVwIHJlbmRlcmluZyBldmVu
IGlmIHRoZSB3aW5kb3cgaXMgbm90IGluIGZvcmVncm91bgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5yZW5kZXJFdmVuSW5CYWNrZ3JvdW5kID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGNhY2hlIGNhbiBiZSBr
ZXB0IGJldHdlZW4gZnJhbWVzCisgICAgICAgICAqLworICAgICAgICB0aGlzLnByZXZlbnRDYWNo
ZVdpcGVCZXR3ZWVuRnJhbWVzID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IG9yIHNldHMgYSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIEluZGV4ZWREQiBzdXBwb3J0IGFu
ZCBhdm9pZCBYSFIgb24gLm1hbmlmZXN0CisgICAgICAgICAqKi8KKyAgICAgICAgdGhpcy5lbmFi
bGVPZmZsaW5lU3VwcG9ydCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBv
ciBzZXRzIGEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjaGVja2luZyBtYW5pZmVzdCBpZiBJ
bmRleGVkREIgc3VwcG9ydCBpcyBlbmFibGVkIChqcyB3aWxsIGFsd2F5cyBjb25zaWRlciB0aGUg
ZGF0YWJhc2UgaXMgdXAgdG8gZGF0ZSkKKyAgICAgICAgICoqLworICAgICAgICB0aGlzLmRpc2Fi
bGVNYW5pZmVzdENoZWNrID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBsaXN0IG9mIGNyZWF0ZWQgc2NlbmVzCisgICAgICAgICAqLworICAgICAgICB0aGlzLnNjZW5l
cyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogRXZlbnQgcmFpc2VkIHdo
ZW4gYSBuZXcgc2NlbmUgaXMgY3JlYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbk5l
d1NjZW5lQWRkZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBsaXN0IG9mIGNyZWF0ZWQgcG9zdHByb2Nlc3NlcworICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5wb3N0UHJvY2Vzc2VzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKiBHZXRz
IG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGVuZ2luZSBzaG91bGQgdmFsaWRh
dGUgcHJvZ3JhbXMgYWZ0ZXIgY29tcGlsYXRpb24gKi8KKyAgICAgICAgdGhpcy52YWxpZGF0ZVNo
YWRlclByb2dyYW1zID0gZmFsc2U7CisgICAgICAgIC8vIE9ic2VydmFibGVzCisgICAgICAgIC8q
KgorICAgICAgICAgKiBPYnNlcnZhYmxlIGV2ZW50IHRyaWdnZXJlZCBlYWNoIHRpbWUgdGhlIHJl
bmRlcmluZyBjYW52YXMgaXMgcmVzaXplZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vblJl
c2l6ZU9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2Vy
dmFibGUgZXZlbnQgdHJpZ2dlcmVkIGVhY2ggdGltZSB0aGUgY2FudmFzIGxvc2VzIGZvY3VzCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLm9uQ2FudmFzQmx1ck9ic2VydmFibGUgPSBuZXcgX01p
c2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0o
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgZXZlbnQgdHJpZ2dlcmVkIGVh
Y2ggdGltZSB0aGUgY2FudmFzIGdhaW5zIGZvY3VzCisgICAgICAgICAqLworICAgICAgICB0aGlz
Lm9uQ2FudmFzRm9jdXNPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBPYnNlcnZhYmxlIGV2ZW50IHRyaWdnZXJlZCBlYWNoIHRpbWUgdGhlIGNhbnZhcyByZWNl
aXZlcyBwb2ludGVyb3V0IGV2ZW50CisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uQ2FudmFz
UG9pbnRlck91dE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IE9ic2VydmFibGUgZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSBlYWNoIHRleHR1cmUgaXMgaW5pdGlh
bGl6ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25CZWZvcmVUZXh0dXJlSW5pdE9ic2Vy
dmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLy8gVW5pZm9ybSBidWZmZXJzIGxpc3QKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0
IHVuaWZvcm0gYnVmZmVycyBtdXN0IGJlIGRpc2FibGVkIGV2ZW4gaWYgdGhleSBhcmUgc3VwcG9y
dGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLmRpc2FibGVVbmlmb3JtQnVmZmVycyA9IGZh
bHNlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVy
cyA9IG5ldyBBcnJheSgpOworICAgICAgICAvLyBPYnNlcnZhYmxlcworICAgICAgICAvKioKKyAg
ICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiB0aGUgZW5naW5lIGJlZ2lucyBhIG5ldyBm
cmFtZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkJlZ2luRnJhbWVPYnNlcnZhYmxlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBzZXQsIHdpbGwgYmUgdXNlZCB0
byByZXF1ZXN0IHRoZSBuZXh0IGFuaW1hdGlvbiBmcmFtZSBmb3IgdGhlIHJlbmRlciBsb29wCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmN1c3RvbUFuaW1hdGlvbkZyYW1lUmVxdWVzdGVyID0g
bnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgcmFpc2VkIHdoZW4gdGhl
IGVuZ2luZSBlbmRzIHRoZSBjdXJyZW50IGZyYW1lCisgICAgICAgICAqLworICAgICAgICB0aGlz
Lm9uRW5kRnJhbWVPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBPYnNlcnZhYmxlIHJhaXNlZCB3aGVuIHRoZSBlbmdpbmUgaXMgYWJvdXQgdG8gY29tcGlsZSBh
IHNoYWRlcgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkJlZm9yZVNoYWRlckNvbXBpbGF0
aW9uT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2
YWJsZSByYWlzZWQgd2hlbiB0aGUgZW5naW5lIGhhcyBqc3V0IGNvbXBpbGVkIGEgc2hhZGVyCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLm9uQWZ0ZXJTaGFkZXJDb21waWxhdGlvbk9ic2VydmFi
bGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJP
YnNlcnZhYmxlIl0oKTsKKyAgICAgICAgdGhpcy5fd2luZG93SXNCYWNrZ3JvdW5kID0gZmFsc2U7
CisgICAgICAgIHRoaXMuX3dlYkdMVmVyc2lvbiA9IDEuMDsKKyAgICAgICAgdGhpcy5faGlnaFBy
ZWNpc2lvblNoYWRlcnNBbGxvd2VkID0gdHJ1ZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICAgICAgdGhpcy5fYmFkT1MgPSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAg
ICAgdGhpcy5fYmFkRGVza3RvcE9TID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NvbG9yV3JpdGUg
PSB0cnVlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9kcmF3Q2FsbHMg
PSBuZXcgX01pc2NfcGVyZkNvdW50ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIlBl
cmZDb3VudGVyIl0oKTsKKyAgICAgICAgdGhpcy5fcmVuZGVyaW5nUXVldWVMYXVuY2hlZCA9IGZh
bHNlOworICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJMb29wcyA9IG5ldyBBcnJheSgpOworICAg
ICAgICAvLyBEZXRlcm1pbmlzdGljIGxvY2tzdGVwTWF4U3RlcHMKKyAgICAgICAgdGhpcy5fZGV0
ZXJtaW5pc3RpY0xvY2tzdGVwID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2xvY2tzdGVwTWF4U3Rl
cHMgPSA0OworICAgICAgICAvLyBMb3N0IGNvbnRleHQKKyAgICAgICAgLyoqCisgICAgICAgICAq
IE9ic2VydmFibGUgc2lnbmFsZWQgd2hlbiBhIGNvbnRleHQgbG9zdCBldmVudCBpcyByYWlzZWQK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMub25Db250ZXh0TG9zdE9ic2VydmFibGUgPSBuZXcg
X01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxl
Il0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgc2lnbmFsZWQgd2hlbiBh
IGNvbnRleHQgcmVzdG9yZWQgZXZlbnQgaXMgcmFpc2VkCisgICAgICAgICAqLworICAgICAgICB0
aGlzLm9uQ29udGV4dFJlc3RvcmVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0aGlz
Ll9jb250ZXh0V2FzTG9zdCA9IGZhbHNlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAg
ICB0aGlzLl9kb05vdEhhbmRsZUNvbnRleHRMb3N0ID0gZmFsc2U7CisgICAgICAgIC8vIEZQUwor
ICAgICAgICB0aGlzLl9wZXJmb3JtYW5jZU1vbml0b3IgPSBuZXcgX01pc2NfcGVyZm9ybWFuY2VN
b25pdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBlcmZvcm1hbmNlTW9uaXRvciJd
KCk7CisgICAgICAgIHRoaXMuX2ZwcyA9IDYwOworICAgICAgICB0aGlzLl9kZWx0YVRpbWUgPSAw
OworICAgICAgICAvKioKKyAgICAgICAgICogVHVybiB0aGlzIHZhbHVlIG9uIGlmIHlvdSB3YW50
IHRvIHBhdXNlIEZQUyBjb21wdXRhdGlvbiB3aGVuIGluIGJhY2tncm91bmQKKyAgICAgICAgICov
CisgICAgICAgIHRoaXMuZGlzYWJsZVBlcmZvcm1hbmNlTW9uaXRvckluQmFja2dyb3VuZCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRp
Y2F0aW5nIHRoYXQgdmVydGV4IGFycmF5IG9iamVjdCBtdXN0IGJlIGRpc2FibGVkIGV2ZW4gaWYg
dGhleSBhcmUgc3VwcG9ydGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLmRpc2FibGVWZXJ0
ZXhBcnJheU9iamVjdHMgPSBmYWxzZTsKKyAgICAgICAgLy8gU3RhdGVzCisgICAgICAgIC8qKiBA
aGlkZGVuICovCisgICAgICAgIHRoaXMuX2RlcHRoQ3VsbGluZ1N0YXRlID0gbmV3IF9TdGF0ZXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siX0RlcHRoQ3VsbGluZ1N0YXRlIl0o
KTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fc3RlbmNpbFN0YXRlID0g
bmV3IF9TdGF0ZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siX1N0ZW5jaWxT
dGF0ZSJdKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2FscGhhU3Rh
dGUgPSBuZXcgX1N0YXRlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJfQWxw
aGFTdGF0ZSJdKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2FscGhh
TW9kZSA9IEVuZ2luZS5BTFBIQV9ESVNBQkxFOworICAgICAgICAvLyBDYWNoZQorICAgICAgICAv
KiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2FjaGUgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fYWN0aXZlQ2hh
bm5lbCA9IDA7CisgICAgICAgIHRoaXMuX2N1cnJlbnRUZXh0dXJlQ2hhbm5lbCA9IC0xOworICAg
ICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9ib3VuZFRleHR1cmVzQ2FjaGUgPSB7
fTsKKyAgICAgICAgdGhpcy5fY29tcGlsZWRFZmZlY3RzID0ge307CisgICAgICAgIHRoaXMuX3Zl
cnRleEF0dHJpYkFycmF5c0VuYWJsZWQgPSBbXTsKKyAgICAgICAgdGhpcy5fdWludEluZGljZXND
dXJyZW50bHlTZXQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kQnVmZmVyID0g
bmV3IEFycmF5KCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2N1cnJl
bnRGcmFtZWJ1ZmZlciA9IG51bGw7CisgICAgICAgIHRoaXMuX2N1cnJlbnRCdWZmZXJQb2ludGVy
cyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLl9jdXJyZW50SW5zdGFuY2VMb2NhdGlvbnMg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fY3VycmVudEluc3RhbmNlQnVmZmVycyA9IG5l
dyBBcnJheSgpOworICAgICAgICB0aGlzLl92YW9SZWNvcmRJblByb2dyZXNzID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMuX211c3RXaXBlVmVydGV4QXR0cmlidXRlcyA9IGZhbHNlOworICAgICAgICB0
aGlzLl9uZXh0RnJlZVRleHR1cmVTbG90cyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLl9t
YXhTaW11bHRhbmVvdXNUZXh0dXJlcyA9IDA7CisgICAgICAgIHRoaXMuX2FjdGl2ZVJlcXVlc3Rz
ID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8vIEhhcmR3YXJlIHN1cHBvcnRlZCBDb21wcmVzc2Vk
IFRleHR1cmVzCisgICAgICAgIHRoaXMuX3RleHR1cmVzU3VwcG9ydGVkID0gbmV3IEFycmF5KCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIGVuZ2luZSBoYXMg
YmVlbiBjcmVhdGVkIHdpdGggdGhlIHByZW11bHRpcGxpZWRBbHBoYSBvcHRpb24gb24gb3Igbm90
LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlOwor
ICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9pc1dlYkdQVSA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl92aWV3cG9ydENhY2hlZCA9IHsgeDogMCwgeTogMCwgejogMCwgdzogMCB9
OworICAgICAgICB0aGlzLl91bnBhY2tGbGlwWUNhY2hlZCA9IG51bGw7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBJbiBjYXNlIHlvdSBhcmUgc2hhcmluZyB0aGUgY29udGV4dCB3aXRoIG90aGVy
IGFwcGxpY2F0aW9ucywgaXQgbWlnaHQKKyAgICAgICAgICogYmUgaW50ZXJlc3RlZCB0byBub3Qg
Y2FjaGUgdGhlIHVucGFjayBmbGlwIHkgc3RhdGUgdG8gZW5zdXJlIGEgY29uc2lzdGVudAorICAg
ICAgICAgKiB2YWx1ZSB3b3VsZCBiZSBzZXQuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmVu
YWJsZVVucGFja0ZsaXBZQ2FjaGVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fYm91bmRVbmlmb3Jt
cyA9IHt9OworICAgICAgICB2YXIgY2FudmFzID0gbnVsbDsKKyAgICAgICAgRW5naW5lLkluc3Rh
bmNlcy5wdXNoKHRoaXMpOworICAgICAgICBpZiAoIWNhbnZhc09yQ29udGV4dCkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9
OworICAgICAgICBpZiAoY2FudmFzT3JDb250ZXh0LmdldENvbnRleHQpIHsKKyAgICAgICAgICAg
IGlmIChvcHRpb25zLnByZW11bHRpcGxpZWRBbHBoYSA9PT0gZmFsc2UpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGFudGlhbGlhcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgb3B0aW9u
cy5hbnRpYWxpYXMgPSBhbnRpYWxpYXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
b3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgICAgIG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAob3B0aW9ucy5zdGVuY2lsID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgICAgICBvcHRpb25zLnN0ZW5jaWwgPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG9wdGlvbnMuZGV0ZXJtaW5pc3RpY0xvY2tzdGVwID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgICAgICBvcHRpb25zLmRldGVybWluaXN0aWNMb2Nrc3RlcCA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9wdGlvbnMubG9ja3N0ZXBNYXhTdGVw
cyA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2Nrc3RlcE1heFN0
ZXBzID0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLmF1ZGlvRW5n
aW5lID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zLmF1ZGlvRW5naW5l
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2RldGVybWluaXN0aWNM
b2Nrc3RlcCA9IG9wdGlvbnMuZGV0ZXJtaW5pc3RpY0xvY2tzdGVwOworICAgICAgICAgICAgdGhp
cy5fbG9ja3N0ZXBNYXhTdGVwcyA9IG9wdGlvbnMubG9ja3N0ZXBNYXhTdGVwczsKKyAgICAgICAg
ICAgIHRoaXMuX2RvTm90SGFuZGxlQ29udGV4dExvc3QgPSBvcHRpb25zLmRvTm90SGFuZGxlQ29u
dGV4dExvc3QgPyB0cnVlIDogZmFsc2U7CisgICAgICAgICAgICAvLyBFeGNlcHRpb25zCisgICAg
ICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50OworICAgICAgICAgICAgICAgIGZv
ciAodmFyIF9pID0gMCwgX2EgPSBFbmdpbmUuRXhjZXB0aW9uTGlzdDsgX2kgPCBfYS5sZW5ndGg7
IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGV4Y2VwdGlvbiA9IF9hW19pXTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGV4Y2VwdGlvbi5rZXk7CisgICAgICAgICAgICAg
ICAgICAgIHZhciB0YXJnZXRzID0gZXhjZXB0aW9uLnRhcmdldHM7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBjaGVjayA9IG5ldyBSZWdFeHAoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNoZWNrLnRlc3QodWEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9u
LmNhcHR1cmUgJiYgZXhjZXB0aW9uLmNhcHR1cmVDb25zdHJhaW50KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGNhcHR1cmUgPSBleGNlcHRpb24uY2FwdHVyZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgY29uc3RyYWludCA9IGV4Y2VwdGlvbi5jYXB0dXJlQ29u
c3RyYWludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVnZXggPSBuZXcgUmVn
RXhwKGNhcHR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzID0g
cmVnZXguZXhlYyh1YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMg
JiYgbWF0Y2hlcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBjYXB0dXJlZFZhbHVlID0gcGFyc2VJbnQobWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFd
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhcHR1cmVkVmFsdWUgPj0g
Y29uc3RyYWludCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHZhciBfYiA9IDAsIHRhcmdldHNfMSA9IHRhcmdldHM7IF9iIDwgdGFyZ2V0
c18xLmxlbmd0aDsgX2IrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXJn
ZXQgPSB0YXJnZXRzXzFbX2JdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInVuaWZvcm1C
dWZmZXIiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxl
VW5pZm9ybUJ1ZmZlcnMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInZhbyI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVWZXJ0ZXhBcnJh
eU9iamVjdHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FudmFzID0gY2FudmFzT3JDb250ZXh0OworICAgICAgICAgICAg
Ly8gR0wKKyAgICAgICAgICAgIGlmICghb3B0aW9ucy5kaXNhYmxlV2ViR0wyU3VwcG9ydCkgewor
ICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dsID0gKGNh
bnZhcy5nZXRDb250ZXh0KCJ3ZWJnbDIiLCBvcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgi
ZXhwZXJpbWVudGFsLXdlYmdsMiIsIG9wdGlvbnMpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMuX2dsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93ZWJHTFZlcnNpb24g
PSAyLjA7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGFkZXJQbGF0Zm9ybU5hbWUg
PSAiV0VCR0wyIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgd2VpcmQgYnJv
d3NlcnMgdG8gbGllIDotKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9nbC5k
ZWxldGVRdWVyeSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlYkdMVmVy
c2lvbiA9IDEuMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGFkZXJQbGF0
Zm9ybU5hbWUgPSAiV0VCR0wxIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAo
ZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0aGlzLl9nbCkgeworICAgICAgICAg
ICAgICAgIGlmICghY2FudmFzKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiVGhlIHByb3ZpZGVkIGNhbnZhcyBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5fZ2wgPSAoY2FudmFzLmdldENvbnRleHQoIndlYmdsIiwgb3B0aW9ucykgfHwgY2FudmFzLmdl
dENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsIG9wdGlvbnMpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJXZWJHTCBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0aGlzLl9nbCkgeworICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiV2ViR0wgbm90IHN1cHBvcnRlZCIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5fc2hhcmVkSW5pdChjYW52YXMsICEhb3B0aW9ucy5kb05vdEhh
bmRsZVRvdWNoQWN0aW9uLCBvcHRpb25zLmF1ZGlvRW5naW5lKTsKKyAgICAgICAgICAgIC8vIEVu
c3VyZXMgYSBjb25zaXN0ZW50IGNvbG9yIHNwYWNlIHVucGFja2luZyBvZiB0ZXh0dXJlcyBjcm9z
cyBicm93c2VyLgorICAgICAgICAgICAgdGhpcy5fZ2wucGl4ZWxTdG9yZWkodGhpcy5fZ2wuVU5Q
QUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCwgdGhpcy5fZ2wuTk9ORSk7CisgICAgICAg
ICAgICAvLyBDb250ZXh0IGxvc3QKKyAgICAgICAgICAgIGlmICghdGhpcy5fZG9Ob3RIYW5kbGVD
b250ZXh0TG9zdCkgeworICAgICAgICAgICAgICAgIHRoaXMuX29uQ29udGV4dExvc3QgPSBmdW5j
dGlvbiAoZXZ0KSB7CisgICAgICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOwor
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY29udGV4dFdhc0xvc3QgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
TG9nZ2VyIl0uV2FybigiV2ViR0wgY29udGV4dCBsb3N0LiIpOworICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5vbkNvbnRleHRMb3N0T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoX3RoaXMpOwor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdGhpcy5fb25Db250ZXh0UmVzdG9y
ZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFkZGluZyBhIHRpbWVv
dXQgdG8gYXZvaWQgcmFjZSBjb25kaXRpb24gYXQgYnJvd3NlciBsZXZlbAorICAgICAgICAgICAg
ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFJlYnVpbGQgZ2wgY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2lu
aXRHTENvbnRleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYnVpbGQgZWZmZWN0
cworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3JlYnVpbGRFZmZlY3RzKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBSZWJ1aWxkIHRleHR1cmVzCisgICAgICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5fcmVidWlsZEludGVybmFsVGV4dHVyZXMoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlYnVpbGQgYnVmZmVycworICAgICAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuX3JlYnVpbGRCdWZmZXJzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMud2lwZUNhY2hlcyh0cnVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
WyJMb2dnZXIiXS5XYXJuKCJXZWJHTCBjb250ZXh0IHN1Y2Nlc3NmdWxseSByZXN0b3JlZC4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm9uQ29udGV4dFJlc3RvcmVkT2JzZXJ2YWJs
ZS5ub3RpZnlPYnNlcnZlcnMoX3RoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMu
X2NvbnRleHRXYXNMb3N0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0sIDApOworICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIo
IndlYmdsY29udGV4dGxvc3QiLCB0aGlzLl9vbkNvbnRleHRMb3N0LCBmYWxzZSk7CisgICAgICAg
ICAgICAgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIiwg
dGhpcy5fb25Db250ZXh0UmVzdG9yZWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBvcHRpb25z
LnBvd2VyUHJlZmVyZW5jZSA9ICJoaWdoLXBlcmZvcm1hbmNlIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2dsID0gY2FudmFzT3JD
b250ZXh0OworICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nQ2FudmFzID0gdGhpcy5fZ2wuY2Fu
dmFzOworICAgICAgICAgICAgaWYgKHRoaXMuX2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3dlYkdMVmVyc2lvbiA9IDIuMDsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9zaGFkZXJQbGF0Zm9ybU5hbWUgPSAiV0VCR0wyIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5fZ2wuZ2V0Q29udGV4dEF0
dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7CisgICAgICAgICAgICAg
ICAgb3B0aW9ucy5zdGVuY2lsID0gYXR0cmlidXRlcy5zdGVuY2lsOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGlmIChvcHRpb25zLnVzZUhpZ2hQcmVjaXNpb25GbG9hdHMgIT09
IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdGhpcy5faGlnaFByZWNpc2lvblNoYWRlcnNBbGxv
d2VkID0gb3B0aW9ucy51c2VIaWdoUHJlY2lzaW9uRmxvYXRzOworICAgICAgICB9CisgICAgICAg
IC8vIFZpZXdwb3J0CisgICAgICAgIHZhciBkZXZpY2VQaXhlbFJhdGlvID0gX01pc2NfZG9tTWFu
YWdlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJEb21NYW5hZ2VtZW50Il0uSXNX
aW5kb3dPYmplY3RFeGlzdCgpID8gKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEuMCkgOiAx
LjA7CisgICAgICAgIHZhciBsaW1pdERldmljZVJhdGlvID0gb3B0aW9ucy5saW1pdERldmljZVJh
dGlvIHx8IGRldmljZVBpeGVsUmF0aW87CisgICAgICAgIHRoaXMuX2hhcmR3YXJlU2NhbGluZ0xl
dmVsID0gYWRhcHRUb0RldmljZVJhdGlvID8gMS4wIC8gTWF0aC5taW4obGltaXREZXZpY2VSYXRp
bywgZGV2aWNlUGl4ZWxSYXRpbykgOiAxLjA7CisgICAgICAgIHRoaXMucmVzaXplKCk7CisgICAg
ICAgIHRoaXMuX2lzU3RlbmNpbEVuYWJsZSA9IG9wdGlvbnMuc3RlbmNpbCA/IHRydWUgOiBmYWxz
ZTsKKyAgICAgICAgdGhpcy5faW5pdEdMQ29udGV4dCgpOworICAgICAgICBpZiAoY2FudmFzKSB7
CisgICAgICAgICAgICB2YXIgYW55RG9jXzEgPSBkb2N1bWVudDsKKyAgICAgICAgICAgIC8vIEZ1
bGxzY3JlZW4KKyAgICAgICAgICAgIHRoaXMuX29uRnVsbHNjcmVlbkNoYW5nZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYW55RG9jXzEuZnVsbHNjcmVlbiAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmlzRnVsbHNjcmVlbiA9IGFueURvY18x
LmZ1bGxzY3JlZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGFueURvY18xLm1vekZ1bGxTY3JlZW4gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAg
ICAgICBfdGhpcy5pc0Z1bGxzY3JlZW4gPSBhbnlEb2NfMS5tb3pGdWxsU2NyZWVuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhbnlEb2NfMS53ZWJraXRJc0Z1
bGxTY3JlZW4gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5pc0Z1
bGxzY3JlZW4gPSBhbnlEb2NfMS53ZWJraXRJc0Z1bGxTY3JlZW47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFueURvY18xLm1zSXNGdWxsU2NyZWVuICE9PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuaXNGdWxsc2NyZWVuID0gYW55
RG9jXzEubXNJc0Z1bGxTY3JlZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vIFBvaW50ZXIgbG9jaworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5pc0Z1bGxzY3JlZW4g
JiYgX3RoaXMuX3BvaW50ZXJMb2NrUmVxdWVzdGVkICYmIGNhbnZhcykgeworICAgICAgICAgICAg
ICAgICAgICBFbmdpbmUuX1JlcXVlc3RQb2ludGVybG9jayhjYW52YXMpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCJmdWxsc2NyZWVuY2hhbmdlIiwgdGhpcy5fb25GdWxsc2NyZWVuQ2hhbmdlLCBmYWxzZSk7
CisgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3pmdWxsc2NyZWVuY2hh
bmdlIiwgdGhpcy5fb25GdWxsc2NyZWVuQ2hhbmdlLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1
bWVudC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIiwgdGhpcy5fb25G
dWxsc2NyZWVuQ2hhbmdlLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExp
c3RlbmVyKCJtc2Z1bGxzY3JlZW5jaGFuZ2UiLCB0aGlzLl9vbkZ1bGxzY3JlZW5DaGFuZ2UsIGZh
bHNlKTsKKyAgICAgICAgICAgIC8vIFBvaW50ZXIgbG9jaworICAgICAgICAgICAgdGhpcy5fb25Q
b2ludGVyTG9ja0NoYW5nZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5p
c1BvaW50ZXJMb2NrID0gKGFueURvY18xLm1velBvaW50ZXJMb2NrRWxlbWVudCA9PT0gY2FudmFz
IHx8CisgICAgICAgICAgICAgICAgICAgIGFueURvY18xLndlYmtpdFBvaW50ZXJMb2NrRWxlbWVu
dCA9PT0gY2FudmFzIHx8CisgICAgICAgICAgICAgICAgICAgIGFueURvY18xLm1zUG9pbnRlckxv
Y2tFbGVtZW50ID09PSBjYW52YXMgfHwKKyAgICAgICAgICAgICAgICAgICAgYW55RG9jXzEucG9p
bnRlckxvY2tFbGVtZW50ID09PSBjYW52YXMpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJsb2NrY2hhbmdlIiwgdGhpcy5fb25Q
b2ludGVyTG9ja0NoYW5nZSwgZmFsc2UpOworICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigibXNwb2ludGVybG9ja2NoYW5nZSIsIHRoaXMuX29uUG9pbnRlckxvY2tDaGFuZ2Us
IGZhbHNlKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1venBvaW50
ZXJsb2NrY2hhbmdlIiwgdGhpcy5fb25Qb2ludGVyTG9ja0NoYW5nZSwgZmFsc2UpOworICAgICAg
ICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0cG9pbnRlcmxvY2tjaGFuZ2Ui
LCB0aGlzLl9vblBvaW50ZXJMb2NrQ2hhbmdlLCBmYWxzZSk7CisgICAgICAgICAgICB0aGlzLl9j
b25uZWN0VlJFdmVudHMoY2FudmFzLCBhbnlEb2NfMSk7CisgICAgICAgIH0KKyAgICAgICAgLy8g
UHJlcGFyZSBidWZmZXIgcG9pbnRlcnMKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
Ll9jYXBzLm1heFZlcnRleEF0dHJpYnM7IGkrKykgeworICAgICAgICAgICAgdGhpcy5fY3VycmVu
dEJ1ZmZlclBvaW50ZXJzW2ldID0gbmV3IEJ1ZmZlclBvaW50ZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBMb2FkIFdlYlZSIERldmljZXMKKyAgICAgICAgdGhpcy5fcHJlcGFyZVZSQ29tcG9u
ZW50KCk7CisgICAgICAgIGlmIChvcHRpb25zLmF1dG9FbmFibGVXZWJWUikgeworICAgICAgICAg
ICAgdGhpcy5pbml0V2ViVlIoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBEZXRlY3QgaWYgd2Ug
YXJlIHJ1bm5pbmcgb24gYSBmYXVsdHkgYnVnZ3kgT1MuCisgICAgICAgIHRoaXMuX2JhZE9TID0g
L2lQYWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpIHx8IC9pUGhvbmUvaS50ZXN0KG5hdmln
YXRvci51c2VyQWdlbnQpOworICAgICAgICAvLyBEZXRlY3QgaWYgd2UgYXJlIHJ1bm5pbmcgb24g
YSBmYXVsdHkgYnVnZ3kgZGVza3RvcCBPUy4KKyAgICAgICAgdGhpcy5fYmFkRGVza3RvcE9TID0g
L14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50
KTsKKyAgICAgICAgY29uc29sZS5sb2coIkJhYnlsb24uanMgdiIgKyBFbmdpbmUuVmVyc2lvbiAr
ICIgLSAiICsgdGhpcy5kZXNjcmlwdGlvbik7CisgICAgICAgIHRoaXMuZW5hYmxlT2ZmbGluZVN1
cHBvcnQgPSBFbmdpbmUuT2ZmbGluZVByb3ZpZGVyRmFjdG9yeSAhPT0gdW5kZWZpbmVkOworICAg
IH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lLCAiSW5zdGFuY2VzIiwgeworICAg
ICAgICAvKiogR2V0cyB0aGUgbGlzdCBvZiBjcmVhdGVkIGVuZ2luZXMgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX2VuZ2luZVN0b3JlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMF9fWyJFbmdpbmVTdG9yZSJdLkluc3RhbmNlczsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuZ2luZSwgIkxhc3RDcmVhdGVk
RW5naW5lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGF0ZXN0IGNyZWF0
ZWQgZW5naW5lCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiBfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19b
IkVuZ2luZVN0b3JlIl0uTGFzdENyZWF0ZWRFbmdpbmU7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUsICJMYXN0Q3JlYXRlZFNjZW5lIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGF0ZXN0IGNyZWF0ZWQgc2NlbmUKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9l
bmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siRW5naW5lU3RvcmUiXS5M
YXN0Q3JlYXRlZFNjZW5lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBXaWxs
IGZsYWcgYWxsIG1hdGVyaWFscyBpbiBhbGwgc2NlbmVzIGluIGFsbCBlbmdpbmVzIGFzIGRpcnR5
IHRvIHRyaWdnZXIgbmV3IHNoYWRlciBjb21waWxhdGlvbgorICAgICAqIEBwYXJhbSBmbGFnIGRl
ZmluZXMgd2hpY2ggcGFydCBvZiB0aGUgbWF0ZXJpYWxzIG11c3QgYmUgbWFya2VkIGFzIGRpcnR5
CisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBkZWZpbmVzIGEgcHJlZGljYXRlIHVzZWQgdG8gZmls
dGVyIHdoaWNoIG1hdGVyaWFscyBzaG91bGQgYmUgYWZmZWN0ZWQKKyAgICAgKi8KKyAgICBFbmdp
bmUuTWFya0FsbE1hdGVyaWFsc0FzRGlydHkgPSBmdW5jdGlvbiAoZmxhZywgcHJlZGljYXRlKSB7
CisgICAgICAgIGZvciAodmFyIGVuZ2luZUluZGV4ID0gMDsgZW5naW5lSW5kZXggPCBFbmdpbmUu
SW5zdGFuY2VzLmxlbmd0aDsgZW5naW5lSW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGVuZ2lu
ZSA9IEVuZ2luZS5JbnN0YW5jZXNbZW5naW5lSW5kZXhdOworICAgICAgICAgICAgZm9yICh2YXIg
c2NlbmVJbmRleCA9IDA7IHNjZW5lSW5kZXggPCBlbmdpbmUuc2NlbmVzLmxlbmd0aDsgc2NlbmVJ
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgZW5naW5lLnNjZW5lc1tzY2VuZUluZGV4XS5tYXJr
QWxsTWF0ZXJpYWxzQXNEaXJ0eShmbGFnLCBwcmVkaWNhdGUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lLCAiTnBtUGFj
a2FnZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbnBt
IHBhY2thZ2Ugb2YgdGhlIHNkaworICAgICAgICAgKi8KKyAgICAgICAgLy8gTm90IG1peGVkIHdp
dGggVmVyc2lvbiBmb3IgdG9vbGluZyBwdXJwb3NlLgorICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiAiYmFieWxvbmpzQDQuMS4wLWFscGhhLjE3IjsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuZ2luZSwgIlZlcnNpb24i
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHZlcnNpb24g
b2YgdGhlIGZyYW1ld29yaworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gIjQuMS4wLWFscGhhLjE3IjsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuZ2luZS5wcm90b3R5cGUsICJkZXNjcmlwdGlv
biIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmlu
ZyB0aGUgY3VycmVudCBlbmdpbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gIldlYkdMIiArIHRoaXMud2ViR0xW
ZXJzaW9uOworICAgICAgICAgICAgaWYgKHRoaXMuX2NhcHMucGFyYWxsZWxTaGFkZXJDb21waWxl
KSB7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gIiAtIFBhcmFsbGVsIHNoYWRlciBj
b21waWxhdGlvbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRp
b247CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUs
ICJTaGFkZXJzUmVwb3NpdG9yeSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Ig
c2V0cyB0aGUgcmVsYXRpdmUgdXJsIHVzZWQgdG8gbG9hZCBzaGFkZXJzIGlmIHVzaW5nIHRoZSBl
bmdpbmUgaW4gbm9uLW1pbmlmaWVkIG1vZGUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIkVmZmVjdCJdLlNoYWRlcnNSZXBvc2l0b3J5OworICAgICAg
ICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgX01hdGVy
aWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRWZmZWN0Il0uU2hhZGVy
c1JlcG9zaXRvcnkgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICog
TWV0aG9kIGNhbGxlZCB0byBjcmVhdGUgdGhlIGRlZmF1bHQgbG9hZGluZyBzY3JlZW4uCisgICAg
ICogVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIGluIHlvdXIgb3duIGFwcC4KKyAgICAgKiBAcGFyYW0g
Y2FudmFzIFRoZSByZW5kZXJpbmcgY2FudmFzIGVsZW1lbnQKKyAgICAgKiBAcmV0dXJucyBUaGUg
bG9hZGluZyBzY3JlZW4KKyAgICAgKi8KKyAgICBFbmdpbmUuRGVmYXVsdExvYWRpbmdTY3JlZW5G
YWN0b3J5ID0gZnVuY3Rpb24gKGNhbnZhcykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgi
TG9hZGluZ1NjcmVlbiIpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuZ2lu
ZS5wcm90b3R5cGUsICJzdXBwb3J0c1VuaWZvcm1CdWZmZXJzIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBlbmdpbmUgc3VwcG9y
dHMgdW5pZm9ybSBidWZmZXJzCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2ZlYXR1cmVzL3dlYmdsMiN1bmlmb3JtLWJ1ZmZlci1vYmpldHMKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMud2ViR0xW
ZXJzaW9uID4gMSAmJiAhdGhpcy5kaXNhYmxlVW5pZm9ybUJ1ZmZlcnM7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAiX3Nob3Vs
ZFVzZUhpZ2hQcmVjaXNpb25TaGFkZXIiLCB7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHMuaGln
aFByZWNpc2lvblNoYWRlclN1cHBvcnRlZCAmJiB0aGlzLl9oaWdoUHJlY2lzaW9uU2hhZGVyc0Fs
bG93ZWQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdp
bmUucHJvdG90eXBlLCAibmVlZFBPVFRleHR1cmVzIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IG9ubHkgcG93ZXIgb2YgMiB0ZXh0dXJl
cyBhcmUgc3VwcG9ydGVkCisgICAgICAgICAqIFBsZWFzZSBub3RlIHRoYXQgeW91IGNhbiBzdGls
bCB1c2Ugbm9uIHBvd2VyIG9mIDIgdGV4dHVyZXMgYnV0IGluIHRoaXMgY2FzZSB0aGUgZW5naW5l
IHdpbGwgZm9yY2VmdWxseSBjb252ZXJ0IHRoZW0KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlYkdMVmVyc2lvbiA8IDIg
fHwgdGhpcy5mb3JjZVBPVFRleHR1cmVzOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoRW5naW5lLnByb3RvdHlwZSwgImRvTm90SGFuZGxlQ29udGV4dExvc3Qi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGlj
YXRpbmcgaWYgcmVzb3VyY2VzIHNob3VsZCBiZSByZXRhaW5lZCB0byBiZSBhYmxlIHRvIGhhbmRs
ZSBjb250ZXh0IGxvc3QgZXZlbnRzCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9vcHRpbWl6aW5nX3lvdXJfc2NlbmUjaGFuZGxpbmctd2ViZ2wtY29udGV4
dC1sb3N0CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9kb05vdEhhbmRsZUNvbnRleHRMb3N0OworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fZG9Ob3RIYW5k
bGVDb250ZXh0TG9zdCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoRW5naW5lLnByb3RvdHlwZSwgInBlcmZvcm1hbmNlTW9uaXRvciIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3IgYXR0YWNo
ZWQgdG8gdGhpcyBlbmdpbmUKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL29wdGltaXppbmdfeW91cl9zY2VuZSNlbmdpbmVpbnN0cnVtZW50YXRpb24KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3BlcmZvcm1hbmNlTW9uaXRvcjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEVuZ2luZS5wcm90b3R5cGUsICJ0ZXh0dXJlc1N1cHBvcnRlZCIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgdGV4dHVyZSBmb3JtYXRz
IHN1cHBvcnRlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXNTdXBwb3J0ZWQ7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAidGV4dHVyZUZv
cm1hdEluVXNlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiB0
ZXh0dXJlIGZvcm1hdHMgaW4gdXNlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlRm9ybWF0SW5Vc2U7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBl
LCAiY3VycmVudFZpZXdwb3J0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUg
Y3VycmVudCB2aWV3cG9ydAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkVmlld3BvcnQ7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAiZW1wdHlU
ZXh0dXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCBlbXB0
eSB0ZXh0dXJlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIGlmICghdGhpcy5fZW1wdHlUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
ZW1wdHlUZXh0dXJlID0gdGhpcy5jcmVhdGVSYXdUZXh0dXJlKG5ldyBVaW50OEFycmF5KDQpLCAx
LCAxLCBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBLCBmYWxzZSwgZmFsc2UsIEVuZ2luZS5URVhU
VVJFX05FQVJFU1RfU0FNUExJTkdNT0RFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9lbXB0eVRleHR1cmU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAiZW1wdHlUZXh0dXJlM0QiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IGVtcHR5IDNEIHRleHR1cmUKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0
aGlzLl9lbXB0eVRleHR1cmUzRCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2VtcHR5VGV4dHVy
ZTNEID0gdGhpcy5jcmVhdGVSYXdUZXh0dXJlM0QobmV3IFVpbnQ4QXJyYXkoNCksIDEsIDEsIDEs
IEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQkEsIGZhbHNlLCBmYWxzZSwgRW5naW5lLlRFWFRVUkVf
TkVBUkVTVF9TQU1QTElOR01PREUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2VtcHR5VGV4dHVyZTNEOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoRW5naW5lLnByb3RvdHlwZSwgImVtcHR5Q3ViZVRleHR1cmUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IGVtcHR5IGN1YmUgdGV4dHVyZQor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAo
IXRoaXMuX2VtcHR5Q3ViZVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB2YXIgZmFjZURhdGEg
PSBuZXcgVWludDhBcnJheSg0KTsKKyAgICAgICAgICAgICAgICB2YXIgY3ViZURhdGEgPSBbZmFj
ZURhdGEsIGZhY2VEYXRhLCBmYWNlRGF0YSwgZmFjZURhdGEsIGZhY2VEYXRhLCBmYWNlRGF0YV07
CisgICAgICAgICAgICAgICAgdGhpcy5fZW1wdHlDdWJlVGV4dHVyZSA9IHRoaXMuY3JlYXRlUmF3
Q3ViZVRleHR1cmUoY3ViZURhdGEsIDEsIEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQkEsIEVuZ2lu
ZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQsIGZhbHNlLCBmYWxzZSwgRW5naW5lLlRFWFRVUkVf
TkVBUkVTVF9TQU1QTElOR01PREUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2VtcHR5Q3ViZVRleHR1cmU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAiaXNXZWJHUFUiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBlbmdpbmUgcnVu
cyBpbiBXZWJHUFUgb3Igbm90LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNXZWJHUFU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAic2hhZGVyUGxh
dGZvcm1OYW1lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgc2hhZGVyIHBs
YXRmcm9tIG5hbWUgdXNlZCBieSB0aGUgZWZmZWN0cy4KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRlclBsYXRmb3Jt
TmFtZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogU2hhcmVkIGluaXRpYWxp
emF0aW9uIGFjcm9zcyBlbmdpbmVzIHR5cGVzLgorICAgICAqIEBwYXJhbSBjYW52YXMgVGhlIGNh
bnZhcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnN0YW5jZSBvZiB0aGUgZW5naW5lLgorICAgICAq
IEBwYXJhbSBkb05vdEhhbmRsZVRvdWNoQWN0aW9uIERlZmluZXMgdGhhdCBlbmdpbmUgc2hvdWxk
IGlnbm9yZSBtb2RpZnlpbmcgdG91Y2ggYWN0aW9uIGF0dHJpYnV0ZSBhbmQgc3R5bGUKKyAgICAg
KiBAcGFyYW0gYXVkaW9FbmdpbmUgRGVmaW5lcyBpZiBhbiBhdWRpbyBlbmdpbmUgc2hvdWxkIGJl
IGNyZWF0ZWQgYnkgZGVmYXVsdAorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3NoYXJl
ZEluaXQgPSBmdW5jdGlvbiAoY2FudmFzLCBkb05vdEhhbmRsZVRvdWNoQWN0aW9uLCBhdWRpb0Vu
Z2luZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl9yZW5kZXJp
bmdDYW52YXMgPSBjYW52YXM7CisgICAgICAgIHRoaXMuX29uQ2FudmFzRm9jdXMgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBfdGhpcy5vbkNhbnZhc0ZvY3VzT2JzZXJ2YWJsZS5ub3RpZnlP
YnNlcnZlcnMoX3RoaXMpOworICAgICAgICB9OworICAgICAgICB0aGlzLl9vbkNhbnZhc0JsdXIg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5vbkNhbnZhc0JsdXJPYnNlcnZhYmxl
Lm5vdGlmeU9ic2VydmVycyhfdGhpcyk7CisgICAgICAgIH07CisgICAgICAgIGNhbnZhcy5hZGRF
dmVudExpc3RlbmVyKCJmb2N1cyIsIHRoaXMuX29uQ2FudmFzRm9jdXMpOworICAgICAgICBjYW52
YXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsIHRoaXMuX29uQ2FudmFzQmx1cik7CisgICAgICAg
IHRoaXMuX29uQmx1ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5kaXNh
YmxlUGVyZm9ybWFuY2VNb25pdG9ySW5CYWNrZ3JvdW5kKSB7CisgICAgICAgICAgICAgICAgX3Ro
aXMuX3BlcmZvcm1hbmNlTW9uaXRvci5kaXNhYmxlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBfdGhpcy5fd2luZG93SXNCYWNrZ3JvdW5kID0gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICAg
ICAgdGhpcy5fb25Gb2N1cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5k
aXNhYmxlUGVyZm9ybWFuY2VNb25pdG9ySW5CYWNrZ3JvdW5kKSB7CisgICAgICAgICAgICAgICAg
X3RoaXMuX3BlcmZvcm1hbmNlTW9uaXRvci5lbmFibGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIF90aGlzLl93aW5kb3dJc0JhY2tncm91bmQgPSBmYWxzZTsKKyAgICAgICAgfTsKKyAg
ICAgICAgdGhpcy5fb25DYW52YXNQb2ludGVyT3V0ID0gZnVuY3Rpb24gKGV2KSB7CisgICAgICAg
ICAgICBfdGhpcy5vbkNhbnZhc1BvaW50ZXJPdXRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhl
dik7CisgICAgICAgIH07CisgICAgICAgIGlmIChfTWlzY19kb21NYW5hZ2VtZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIkRvbU1hbmFnZW1lbnQiXS5Jc1dpbmRvd09iamVjdEV4aXN0
KCkpIHsKKyAgICAgICAgICAgIHZhciBob3N0V2luZG93ID0gdGhpcy5nZXRIb3N0V2luZG93KCk7
CisgICAgICAgICAgICBob3N0V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlzLl9v
bkJsdXIpOworICAgICAgICAgICAgaG9zdFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIs
IHRoaXMuX29uRm9jdXMpOworICAgICAgICB9CisgICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3Rl
bmVyKCJwb2ludGVyb3V0IiwgdGhpcy5fb25DYW52YXNQb2ludGVyT3V0KTsKKyAgICAgICAgaWYg
KCFkb05vdEhhbmRsZVRvdWNoQWN0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl9kaXNhYmxlVG91
Y2hBY3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDcmVhdGUgQXVkaW8gRW5naW5lIGlm
IG5lZWRlZC4KKyAgICAgICAgaWYgKCFFbmdpbmUuYXVkaW9FbmdpbmUgJiYgYXVkaW9FbmdpbmUg
JiYgRW5naW5lLkF1ZGlvRW5naW5lRmFjdG9yeSkgeworICAgICAgICAgICAgRW5naW5lLmF1ZGlv
RW5naW5lID0gRW5naW5lLkF1ZGlvRW5naW5lRmFjdG9yeSh0aGlzLmdldFJlbmRlcmluZ0NhbnZh
cygpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBTaGFkZXIgcHJvY2Vzc29yCisgICAgICAgIHRo
aXMuX3NoYWRlclByb2Nlc3NvciA9IHRoaXMuX2dldFNoYWRlclByb2Nlc3NvcigpOworICAgIH07
CisgICAgLyoqCisgICAgICogR2V0cyBhIHNoYWRlciBwcm9jZXNzb3IgaW1wbGVtZW50YXRpb24g
Zml0dGluZyB3aXRoIHRoZSBjdXJyZW50IGVuZ2luZSB0eXBlLgorICAgICAqIEByZXR1cm5zIFRo
ZSBzaGFkZXIgcHJvY2Vzc29yIGltcGxlbWVudGF0aW9uLgorICAgICAqLworICAgIEVuZ2luZS5w
cm90b3R5cGUuX2dldFNoYWRlclByb2Nlc3NvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMud2ViR0xWZXJzaW9uID4gMSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBfV2ViR0xf
d2ViR0wyU2hhZGVyUHJvY2Vzc29yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siV2Vi
R0wyU2hhZGVyUHJvY2Vzc29yIl0oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fZ2V0U2hh
ZGVyUHJvY2Vzc2luZ0NvbnRleHQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBudWxs
OworICAgIH07CisgICAgLy8gV2ViVlIKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyBhIHdl
YlZSIGRpc3BsYXkgYW5kIHN0YXJ0cyBsaXN0ZW5pbmcgdG8gZGlzcGxheSBjaGFuZ2UgZXZlbnRz
CisgICAgICogVGhlIG9uVlJEaXNwbGF5Q2hhbmdlZE9ic2VydmFibGUgd2lsbCBiZSBub3RpZmll
ZCB1cG9uIHRoZXNlIGNoYW5nZXMKKyAgICAgKiBAcmV0dXJucyBUaGUgb25WUkRpc3BsYXlDaGFu
Z2VkT2JzZXJ2YWJsZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuaW5pdFdlYlZSID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiV2ViVlJDYW1lcmEiKTsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fcHJlcGFy
ZVZSQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBEbyBub3RoaW5nIGFzIHRo
ZSBlbmdpbmUgc2lkZSBlZmZlY3Qgd2lsbCBvdmVybG9hZCBpdAorICAgIH07CisgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9jb25uZWN0VlJFdmVudHMgPSBmdW5jdGlv
biAoY2FudmFzLCBkb2N1bWVudCkgeworICAgICAgICAvLyBEbyBub3RoaW5nIGFzIHRoZSBlbmdp
bmUgc2lkZSBlZmZlY3Qgd2lsbCBvdmVybG9hZCBpdAorICAgIH07CisgICAgLyoqIEBoaWRkZW4g
Ki8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9zdWJtaXRWUkZyYW1lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAvLyBEbyBub3RoaW5nIGFzIHRoZSBlbmdpbmUgc2lkZSBlZmZlY3Qgd2lsbCBvdmVy
bG9hZCBpdAorICAgIH07CisgICAgLyoqCisgICAgICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGxl
YXZlIHdlYlZSIG1vZGUKKyAgICAgKiBXaWxsIGRvIG5vdGhpbmcgaWYgd2ViVlIgaXMgbm90IHN1
cHBvcnRlZCBvciBpZiB0aGVyZSBpcyBubyB3ZWJWUiBkZXZpY2UKKyAgICAgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vd2VidnJfY2FtZXJhCisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5kaXNhYmxlVlIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIERvIG5v
dGhpbmcgYXMgdGhlIGVuZ2luZSBzaWRlIGVmZmVjdCB3aWxsIG92ZXJsb2FkIGl0CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhlIHN5c3Rl
bSBpcyBpbiBWUiBtb2RlIGFuZCBpcyBwcmVzZW50aW5nCisgICAgICogQHJldHVybnMgdHJ1ZSBp
ZiBWUiBtb2RlIGlzIGVuZ2FnZWQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmlzVlJQ
cmVzZW50aW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3JlcXVlc3RWUkZyYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBEbyBub3RoaW5nIGFzIHRoZSBlbmdpbmUgc2lk
ZSBlZmZlY3Qgd2lsbCBvdmVybG9hZCBpdAorICAgIH07CisgICAgRW5naW5lLnByb3RvdHlwZS5f
ZGlzYWJsZVRvdWNoQWN0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX3Jl
bmRlcmluZ0NhbnZhcykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX3JlbmRlcmluZ0NhbnZhcy5zZXRBdHRyaWJ1dGUoInRvdWNoLWFjdGlvbiIsICJub25l
Iik7CisgICAgICAgIHRoaXMuX3JlbmRlcmluZ0NhbnZhcy5zdHlsZS50b3VjaEFjdGlvbiA9ICJu
b25lIjsKKyAgICAgICAgdGhpcy5fcmVuZGVyaW5nQ2FudmFzLnN0eWxlLm1zVG91Y2hBY3Rpb24g
PSAibm9uZSI7CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl9yZWJ1aWxkSW50ZXJuYWxU
ZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHRoaXMu
X2ludGVybmFsVGV4dHVyZXNDYWNoZS5zbGljZSgpOyAvLyBEbyBhIGNvcHkgYmVjYXVzZSB0aGUg
cmVidWlsZCB3aWxsIGFkZCBwcm94aWVzCisgICAgICAgIGZvciAodmFyIF9pID0gMCwgY3VycmVu
dFN0YXRlXzEgPSBjdXJyZW50U3RhdGU7IF9pIDwgY3VycmVudFN0YXRlXzEubGVuZ3RoOyBfaSsr
KSB7CisgICAgICAgICAgICB2YXIgaW50ZXJuYWxUZXh0dXJlID0gY3VycmVudFN0YXRlXzFbX2ld
OworICAgICAgICAgICAgaW50ZXJuYWxUZXh0dXJlLl9yZWJ1aWxkKCk7CisgICAgICAgIH0KKyAg
ICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX3JlYnVpbGRFZmZlY3RzID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5fY29tcGlsZWRFZmZlY3RzKSB7CisgICAg
ICAgICAgICB2YXIgZWZmZWN0ID0gdGhpcy5fY29tcGlsZWRFZmZlY3RzW2tleV07CisgICAgICAg
ICAgICBlZmZlY3QuX3ByZXBhcmVFZmZlY3QoKTsKKyAgICAgICAgfQorICAgICAgICBfTWF0ZXJp
YWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFZmZlY3QiXS5SZXNldENh
Y2hlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5n
IGlmIGFsbCBjcmVhdGVkIGVmZmVjdHMgYXJlIHJlYWR5CisgICAgICogQHJldHVybnMgdHJ1ZSBp
ZiBhbGwgZWZmZWN0cyBhcmUgcmVhZHkKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmFy
ZUFsbEVmZmVjdHNSZWFkeSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIga2V5IGlu
IHRoaXMuX2NvbXBpbGVkRWZmZWN0cykgeworICAgICAgICAgICAgdmFyIGVmZmVjdCA9IHRoaXMu
X2NvbXBpbGVkRWZmZWN0c1trZXldOworICAgICAgICAgICAgaWYgKCFlZmZlY3QuaXNSZWFkeSgp
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgRW5naW5lLnByb3RvdHlwZS5f
cmVidWlsZEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIEluZGV4IC8gVmVydGV4
CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLnNjZW5lczsgX2kgPCBfYS5sZW5n
dGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBzY2VuZSA9IF9hW19pXTsKKyAgICAgICAgICAg
IHNjZW5lLnJlc2V0Q2FjaGVkTWF0ZXJpYWwoKTsKKyAgICAgICAgICAgIHNjZW5lLl9yZWJ1aWxk
R2VvbWV0cmllcygpOworICAgICAgICAgICAgc2NlbmUuX3JlYnVpbGRUZXh0dXJlcygpOworICAg
ICAgICB9CisgICAgICAgIC8vIFVuaWZvcm1zCisgICAgICAgIGZvciAodmFyIF9iID0gMCwgX2Mg
PSB0aGlzLl91bmlmb3JtQnVmZmVyczsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHsKKyAgICAgICAg
ICAgIHZhciB1bmlmb3JtQnVmZmVyID0gX2NbX2JdOworICAgICAgICAgICAgdW5pZm9ybUJ1ZmZl
ci5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl9p
bml0R0xDb250ZXh0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBDYXBzCisgICAgICAgIHRo
aXMuX2NhcHMgPSBuZXcgRW5naW5lQ2FwYWJpbGl0aWVzKCk7CisgICAgICAgIHRoaXMuX2NhcHMu
bWF4VGV4dHVyZXNJbWFnZVVuaXRzID0gdGhpcy5fZ2wuZ2V0UGFyYW1ldGVyKHRoaXMuX2dsLk1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICAgICAgdGhpcy5fY2Fwcy5tYXhDb21iaW5lZFRl
eHR1cmVzSW1hZ2VVbml0cyA9IHRoaXMuX2dsLmdldFBhcmFtZXRlcih0aGlzLl9nbC5NQVhfQ09N
QklORURfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgICAgIHRoaXMuX2NhcHMubWF4VmVydGV4
VGV4dHVyZUltYWdlVW5pdHMgPSB0aGlzLl9nbC5nZXRQYXJhbWV0ZXIodGhpcy5fZ2wuTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICAgICAgdGhpcy5fY2Fwcy5tYXhUZXh0dXJl
U2l6ZSA9IHRoaXMuX2dsLmdldFBhcmFtZXRlcih0aGlzLl9nbC5NQVhfVEVYVFVSRV9TSVpFKTsK
KyAgICAgICAgdGhpcy5fY2Fwcy5tYXhDdWJlbWFwVGV4dHVyZVNpemUgPSB0aGlzLl9nbC5nZXRQ
YXJhbWV0ZXIodGhpcy5fZ2wuTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSk7CisgICAgICAgIHRo
aXMuX2NhcHMubWF4UmVuZGVyVGV4dHVyZVNpemUgPSB0aGlzLl9nbC5nZXRQYXJhbWV0ZXIodGhp
cy5fZ2wuTUFYX1JFTkRFUkJVRkZFUl9TSVpFKTsKKyAgICAgICAgdGhpcy5fY2Fwcy5tYXhWZXJ0
ZXhBdHRyaWJzID0gdGhpcy5fZ2wuZ2V0UGFyYW1ldGVyKHRoaXMuX2dsLk1BWF9WRVJURVhfQVRU
UklCUyk7CisgICAgICAgIHRoaXMuX2NhcHMubWF4VmFyeWluZ1ZlY3RvcnMgPSB0aGlzLl9nbC5n
ZXRQYXJhbWV0ZXIodGhpcy5fZ2wuTUFYX1ZBUllJTkdfVkVDVE9SUyk7CisgICAgICAgIHRoaXMu
X2NhcHMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9IHRoaXMuX2dsLmdldFBhcmFtZXRlcih0
aGlzLl9nbC5NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTKTsKKyAgICAgICAgdGhpcy5fY2Fw
cy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IHRoaXMuX2dsLmdldFBhcmFtZXRlcih0aGlzLl9n
bC5NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyk7CisgICAgICAgIC8vIEluZm9zCisgICAgICAg
IHRoaXMuX2dsVmVyc2lvbiA9IHRoaXMuX2dsLmdldFBhcmFtZXRlcih0aGlzLl9nbC5WRVJTSU9O
KTsKKyAgICAgICAgdmFyIHJlbmRlcmVySW5mbyA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbigiV0VC
R0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOworICAgICAgICBpZiAocmVuZGVyZXJJbmZvICE9IG51
bGwpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsUmVuZGVyZXIgPSB0aGlzLl9nbC5nZXRQYXJhbWV0
ZXIocmVuZGVyZXJJbmZvLlVOTUFTS0VEX1JFTkRFUkVSX1dFQkdMKTsKKyAgICAgICAgICAgIHRo
aXMuX2dsVmVuZG9yID0gdGhpcy5fZ2wuZ2V0UGFyYW1ldGVyKHJlbmRlcmVySW5mby5VTk1BU0tF
RF9WRU5ET1JfV0VCR0wpOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fZ2xWZW5kb3Ip
IHsKKyAgICAgICAgICAgIHRoaXMuX2dsVmVuZG9yID0gIlVua25vd24gdmVuZG9yIjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXRoaXMuX2dsUmVuZGVyZXIpIHsKKyAgICAgICAgICAgIHRoaXMu
X2dsUmVuZGVyZXIgPSAiVW5rbm93biByZW5kZXJlciI7CisgICAgICAgIH0KKyAgICAgICAgLy8g
Q29uc3RhbnRzCisgICAgICAgIHRoaXMuX2dsLkhBTEZfRkxPQVRfT0VTID0gMHg4RDYxOyAvLyBI
YWxmIGZsb2F0aW5nLXBvaW50IHR5cGUgKDE2LWJpdCkuCisgICAgICAgIGlmICh0aGlzLl9nbC5S
R0JBMTZGICE9PSAweDg4MUEpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLlJHQkExNkYgPSAweDg4
MUE7IC8vIFJHQkEgMTYtYml0IGZsb2F0aW5nLXBvaW50IGNvbG9yLXJlbmRlcmFibGUgaW50ZXJu
YWwgc2l6ZWQgZm9ybWF0LgorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9nbC5SR0JBMzJG
ICE9PSAweDg4MTQpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLlJHQkEzMkYgPSAweDg4MTQ7IC8v
IFJHQkEgMzItYml0IGZsb2F0aW5nLXBvaW50IGNvbG9yLXJlbmRlcmFibGUgaW50ZXJuYWwgc2l6
ZWQgZm9ybWF0LgorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9nbC5ERVBUSDI0X1NURU5D
SUw4ICE9PSAzNTA1NikgeworICAgICAgICAgICAgdGhpcy5fZ2wuREVQVEgyNF9TVEVOQ0lMOCA9
IDM1MDU2OworICAgICAgICB9CisgICAgICAgIC8vIEV4dGVuc2lvbnMKKyAgICAgICAgdGhpcy5f
Y2Fwcy5zdGFuZGFyZERlcml2YXRpdmVzID0gdGhpcy5fd2ViR0xWZXJzaW9uID4gMSB8fCAodGhp
cy5fZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnKSAhPT0gbnVsbCk7
CisgICAgICAgIHRoaXMuX2NhcHMuYXN0YyA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbignV0VCR0xf
Y29tcHJlc3NlZF90ZXh0dXJlX2FzdGMnKSB8fCB0aGlzLl9nbC5nZXRFeHRlbnNpb24oJ1dFQktJ
VF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YycpOworICAgICAgICB0aGlzLl9jYXBzLnMz
dGMgPSB0aGlzLl9nbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3Rj
JykgfHwgdGhpcy5fZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0
dXJlX3MzdGMnKTsKKyAgICAgICAgdGhpcy5fY2Fwcy5wdnJ0YyA9IHRoaXMuX2dsLmdldEV4dGVu
c2lvbignV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJykgfHwgdGhpcy5fZ2wuZ2V0RXh0
ZW5zaW9uKCdXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyk7CisgICAgICAg
IHRoaXMuX2NhcHMuZXRjMSA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbignV0VCR0xfY29tcHJlc3Nl
ZF90ZXh0dXJlX2V0YzEnKSB8fCB0aGlzLl9nbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9XRUJHTF9j
b21wcmVzc2VkX3RleHR1cmVfZXRjMScpOworICAgICAgICB0aGlzLl9jYXBzLmV0YzIgPSB0aGlz
Ll9nbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMnKSB8fCB0aGlz
Ll9nbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjJykg
fHwKKyAgICAgICAgICAgIHRoaXMuX2dsLmdldEV4dGVuc2lvbignV0VCR0xfY29tcHJlc3NlZF90
ZXh0dXJlX2VzM18wJyk7IC8vIGFsc28gYSByZXF1aXJlbWVudCBvZiBPcGVuR0wgRVMgMworICAg
ICAgICB0aGlzLl9jYXBzLnRleHR1cmVBbmlzb3Ryb3BpY0ZpbHRlckV4dGVuc2lvbiA9IHRoaXMu
X2dsLmdldEV4dGVuc2lvbignRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJykgfHwgdGhp
cy5fZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
JykgfHwgdGhpcy5fZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljJyk7CisgICAgICAgIHRoaXMuX2NhcHMubWF4QW5pc290cm9weSA9IHRoaXMuX2NhcHMu
dGV4dHVyZUFuaXNvdHJvcGljRmlsdGVyRXh0ZW5zaW9uID8gdGhpcy5fZ2wuZ2V0UGFyYW1ldGVy
KHRoaXMuX2NhcHMudGV4dHVyZUFuaXNvdHJvcGljRmlsdGVyRXh0ZW5zaW9uLk1BWF9URVhUVVJF
X01BWF9BTklTT1RST1BZX0VYVCkgOiAwOworICAgICAgICB0aGlzLl9jYXBzLnVpbnRJbmRpY2Vz
ID0gdGhpcy5fd2ViR0xWZXJzaW9uID4gMSB8fCB0aGlzLl9nbC5nZXRFeHRlbnNpb24oJ09FU19l
bGVtZW50X2luZGV4X3VpbnQnKSAhPT0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2Fwcy5mcmFnbWVu
dERlcHRoU3VwcG9ydGVkID0gdGhpcy5fd2ViR0xWZXJzaW9uID4gMSB8fCB0aGlzLl9nbC5nZXRF
eHRlbnNpb24oJ0VYVF9mcmFnX2RlcHRoJykgIT09IG51bGw7CisgICAgICAgIHRoaXMuX2NhcHMu
aGlnaFByZWNpc2lvblNoYWRlclN1cHBvcnRlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9jYXBz
LnRpbWVyUXVlcnkgPSB0aGlzLl9nbC5nZXRFeHRlbnNpb24oJ0VYVF9kaXNqb2ludF90aW1lcl9x
dWVyeV93ZWJnbDInKSB8fCB0aGlzLl9nbC5nZXRFeHRlbnNpb24oIkVYVF9kaXNqb2ludF90aW1l
cl9xdWVyeSIpOworICAgICAgICBpZiAodGhpcy5fY2Fwcy50aW1lclF1ZXJ5KSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fd2ViR0xWZXJzaW9uID09PSAxKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fZ2wuZ2V0UXVlcnkgPSB0aGlzLl9jYXBzLnRpbWVyUXVlcnkuZ2V0UXVlcnlFWFQuYmluZCh0
aGlzLl9jYXBzLnRpbWVyUXVlcnkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
Y2Fwcy5jYW5Vc2VUaW1lc3RhbXBGb3JUaW1lclF1ZXJ5ID0gdGhpcy5fZ2wuZ2V0UXVlcnkodGhp
cy5fY2Fwcy50aW1lclF1ZXJ5LlRJTUVTVEFNUF9FWFQsIHRoaXMuX2NhcHMudGltZXJRdWVyeS5R
VUVSWV9DT1VOVEVSX0JJVFNfRVhUKSA+IDA7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2tz
IGlmIHNvbWUgb2YgdGhlIGZvcm1hdCByZW5kZXJzIGZpcnN0IHRvIGFsbG93IHRoZSB1c2Ugb2Yg
d2ViZ2wgaW5zcGVjdG9yLgorICAgICAgICB0aGlzLl9jYXBzLmNvbG9yQnVmZmVyRmxvYXQgPSB0
aGlzLl93ZWJHTFZlcnNpb24gPiAxICYmIHRoaXMuX2dsLmdldEV4dGVuc2lvbignRVhUX2NvbG9y
X2J1ZmZlcl9mbG9hdCcpOworICAgICAgICB0aGlzLl9jYXBzLnRleHR1cmVGbG9hdCA9ICh0aGlz
Ll93ZWJHTFZlcnNpb24gPiAxIHx8IHRoaXMuX2dsLmdldEV4dGVuc2lvbignT0VTX3RleHR1cmVf
ZmxvYXQnKSkgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIHRoaXMuX2NhcHMudGV4dHVyZUZsb2F0
TGluZWFyRmlsdGVyaW5nID0gdGhpcy5fY2Fwcy50ZXh0dXJlRmxvYXQgJiYgdGhpcy5fZ2wuZ2V0
RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInKSA/IHRydWUgOiBmYWxzZTsKKyAg
ICAgICAgdGhpcy5fY2Fwcy50ZXh0dXJlRmxvYXRSZW5kZXIgPSB0aGlzLl9jYXBzLnRleHR1cmVG
bG9hdCAmJiB0aGlzLl9jYW5SZW5kZXJUb0Zsb2F0RnJhbWVidWZmZXIoKSA/IHRydWUgOiBmYWxz
ZTsKKyAgICAgICAgdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZsb2F0ID0gKHRoaXMuX3dlYkdMVmVy
c2lvbiA+IDEgfHwgdGhpcy5fZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
JykpID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICB0aGlzLl9jYXBzLnRleHR1cmVIYWxmRmxvYXRM
aW5lYXJGaWx0ZXJpbmcgPSAodGhpcy5fd2ViR0xWZXJzaW9uID4gMSB8fCAodGhpcy5fY2Fwcy50
ZXh0dXJlSGFsZkZsb2F0ICYmIHRoaXMuX2dsLmdldEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdF9saW5lYXInKSkpID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICBpZiAodGhpcy5fd2Vi
R0xWZXJzaW9uID4gMSkgeworICAgICAgICAgICAgdGhpcy5fZ2wuSEFMRl9GTE9BVF9PRVMgPSAw
eDE0MEI7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZsb2F0UmVu
ZGVyID0gdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZsb2F0ICYmIHRoaXMuX2NhblJlbmRlclRvSGFs
ZkZsb2F0RnJhbWVidWZmZXIoKTsKKyAgICAgICAgdGhpcy5fY2Fwcy50ZXh0dXJlTE9EID0gKHRo
aXMuX3dlYkdMVmVyc2lvbiA+IDEgfHwgdGhpcy5fZ2wuZ2V0RXh0ZW5zaW9uKCdFWFRfc2hhZGVy
X3RleHR1cmVfbG9kJykpID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICB0aGlzLl9jYXBzLm11bHRp
dmlldyA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbignT1ZSX211bHRpdmlldzInKTsKKyAgICAgICAg
Ly8gRHJhdyBidWZmZXJzCisgICAgICAgIGlmICh0aGlzLl93ZWJHTFZlcnNpb24gPiAxKSB7Cisg
ICAgICAgICAgICB0aGlzLl9jYXBzLmRyYXdCdWZmZXJzRXh0ZW5zaW9uID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHRoaXMuX2NhcHMubWF4TVNBQVNhbXBsZXMgPSB0aGlzLl9nbC5nZXRQYXJhbWV0ZXIo
dGhpcy5fZ2wuTUFYX1NBTVBMRVMpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdmFyIGRyYXdCdWZmZXJzRXh0ZW5zaW9uID0gdGhpcy5fZ2wuZ2V0RXh0ZW5zaW9uKCdX
RUJHTF9kcmF3X2J1ZmZlcnMnKTsKKyAgICAgICAgICAgIGlmIChkcmF3QnVmZmVyc0V4dGVuc2lv
biAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2NhcHMuZHJhd0J1ZmZlcnNFeHRl
bnNpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMuX2dsLmRyYXdCdWZmZXJzID0gZHJh
d0J1ZmZlcnNFeHRlbnNpb24uZHJhd0J1ZmZlcnNXRUJHTC5iaW5kKGRyYXdCdWZmZXJzRXh0ZW5z
aW9uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9nbC5EUkFXX0ZSQU1FQlVGRkVSID0gdGhpcy5f
Z2wuRlJBTUVCVUZGRVI7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dsWyJDT0xPUl9BVFRBQ0hNRU5UIiAr
IGkgKyAiX1dFQkdMIl0gPSBkcmF3QnVmZmVyc0V4dGVuc2lvblsiQ09MT1JfQVRUQUNITUVOVCIg
KyBpICsgIl9XRUJHTCJdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX2NhcHMuZHJhd0J1ZmZlcnNFeHRl
bnNpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBTaGFk
ZXIgY29tcGlsZXIgdGhyZWFkcworICAgICAgICB0aGlzLl9jYXBzLnBhcmFsbGVsU2hhZGVyQ29t
cGlsZSA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbignS0hSX3BhcmFsbGVsX3NoYWRlcl9jb21waWxl
Jyk7CisgICAgICAgIC8vIERlcHRoIFRleHR1cmUKKyAgICAgICAgaWYgKHRoaXMuX3dlYkdMVmVy
c2lvbiA+IDEpIHsKKyAgICAgICAgICAgIHRoaXMuX2NhcHMuZGVwdGhUZXh0dXJlRXh0ZW5zaW9u
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBkZXB0
aFRleHR1cmVFeHRlbnNpb24gPSB0aGlzLl9nbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2RlcHRoX3Rl
eHR1cmUnKTsKKyAgICAgICAgICAgIGlmIChkZXB0aFRleHR1cmVFeHRlbnNpb24gIT0gbnVsbCkg
eworICAgICAgICAgICAgICAgIHRoaXMuX2NhcHMuZGVwdGhUZXh0dXJlRXh0ZW5zaW9uID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9nbC5VTlNJR05FRF9JTlRfMjRfOCA9IGRlcHRoVGV4
dHVyZUV4dGVuc2lvbi5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAvLyBWZXJ0ZXggYXJyYXkgb2JqZWN0CisgICAgICAgIGlmICh0aGlz
LmRpc2FibGVWZXJ0ZXhBcnJheU9iamVjdHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2NhcHMudmVy
dGV4QXJyYXlPYmplY3QgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlz
Ll93ZWJHTFZlcnNpb24gPiAxKSB7CisgICAgICAgICAgICB0aGlzLl9jYXBzLnZlcnRleEFycmF5
T2JqZWN0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZh
ciB2ZXJ0ZXhBcnJheU9iamVjdEV4dGVuc2lvbiA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbignT0VT
X3ZlcnRleF9hcnJheV9vYmplY3QnKTsKKyAgICAgICAgICAgIGlmICh2ZXJ0ZXhBcnJheU9iamVj
dEV4dGVuc2lvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY2Fwcy52ZXJ0ZXhB
cnJheU9iamVjdCA9IHRydWU7CisgICAgICAgICAgICAgICAgdGhpcy5fZ2wuY3JlYXRlVmVydGV4
QXJyYXkgPSB2ZXJ0ZXhBcnJheU9iamVjdEV4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUy5i
aW5kKHZlcnRleEFycmF5T2JqZWN0RXh0ZW5zaW9uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9n
bC5iaW5kVmVydGV4QXJyYXkgPSB2ZXJ0ZXhBcnJheU9iamVjdEV4dGVuc2lvbi5iaW5kVmVydGV4
QXJyYXlPRVMuYmluZCh2ZXJ0ZXhBcnJheU9iamVjdEV4dGVuc2lvbik7CisgICAgICAgICAgICAg
ICAgdGhpcy5fZ2wuZGVsZXRlVmVydGV4QXJyYXkgPSB2ZXJ0ZXhBcnJheU9iamVjdEV4dGVuc2lv
bi5kZWxldGVWZXJ0ZXhBcnJheU9FUy5iaW5kKHZlcnRleEFycmF5T2JqZWN0RXh0ZW5zaW9uKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMu
X2NhcHMudmVydGV4QXJyYXlPYmplY3QgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAvLyBJbnN0YW5jZXMgY291bnQKKyAgICAgICAgaWYgKHRoaXMuX3dlYkdMVmVy
c2lvbiA+IDEpIHsKKyAgICAgICAgICAgIHRoaXMuX2NhcHMuaW5zdGFuY2VkQXJyYXlzID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBpbnN0YW5jZUV4
dGVuc2lvbiA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbignQU5HTEVfaW5zdGFuY2VkX2FycmF5cycp
OworICAgICAgICAgICAgaWYgKGluc3RhbmNlRXh0ZW5zaW9uICE9IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9jYXBzLmluc3RhbmNlZEFycmF5cyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgdGhpcy5fZ2wuZHJhd0FycmF5c0luc3RhbmNlZCA9IGluc3RhbmNlRXh0ZW5zaW9uLmRyYXdB
cnJheXNJbnN0YW5jZWRBTkdMRS5iaW5kKGluc3RhbmNlRXh0ZW5zaW9uKTsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9nbC5kcmF3RWxlbWVudHNJbnN0YW5jZWQgPSBpbnN0YW5jZUV4dGVuc2lvbi5k
cmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRS5iaW5kKGluc3RhbmNlRXh0ZW5zaW9uKTsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9nbC52ZXJ0ZXhBdHRyaWJEaXZpc29yID0gaW5zdGFuY2VFeHRlbnNp
b24udmVydGV4QXR0cmliRGl2aXNvckFOR0xFLmJpbmQoaW5zdGFuY2VFeHRlbnNpb24pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY2Fw
cy5pbnN0YW5jZWRBcnJheXMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAvLyBJbnRlbGxpZ2VudGx5IGFkZCBzdXBwb3J0ZWQgY29tcHJlc3NlZCBmb3JtYXRzIGlu
IG9yZGVyIHRvIGNoZWNrIGZvci4KKyAgICAgICAgLy8gQ2hlY2sgZm9yIEFTVEMgc3VwcG9ydCBm
aXJzdCBhcyBpdCBpcyBtb3N0IHBvd2VyZnVsIGFuZCB0byBiZSB2ZXJ5IGNyb3NzIHBsYXRmb3Jt
LgorICAgICAgICAvLyBOZXh0IFBWUlRDICYgRFhULCB3aGljaCBhcmUgcHJvYmFibHkgc3VwZXJp
b3IgdG8gRVRDMS8yLgorICAgICAgICAvLyBMaWtlbHkgbm8gaGFyZHdhcmUgd2hpY2ggc3VwcG9y
dHMgYm90aCBQVlIgJiBEWFQsIHNvIG9yZGVyIG1hdHRlcnMgbGl0dGxlLgorICAgICAgICAvLyBF
VEMyIGlzIG5ld2VyIGFuZCBoYW5kbGVzIEVUQzEgKG5vIGFscGhhIGNhcGFiaWxpdHkpLCBzbyBj
aGVjayBmb3IgZmlyc3QuCisgICAgICAgIGlmICh0aGlzLl9jYXBzLmFzdGMpIHsKKyAgICAgICAg
ICAgIHRoaXMudGV4dHVyZXNTdXBwb3J0ZWQucHVzaCgnLWFzdGMua3R4Jyk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuX2NhcHMuczN0YykgeworICAgICAgICAgICAgdGhpcy50ZXh0dXJl
c1N1cHBvcnRlZC5wdXNoKCctZHh0Lmt0eCcpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
Ll9jYXBzLnB2cnRjKSB7CisgICAgICAgICAgICB0aGlzLnRleHR1cmVzU3VwcG9ydGVkLnB1c2go
Jy1wdnJ0Yy5rdHgnKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY2Fwcy5ldGMyKSB7
CisgICAgICAgICAgICB0aGlzLnRleHR1cmVzU3VwcG9ydGVkLnB1c2goJy1ldGMyLmt0eCcpOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9jYXBzLmV0YzEpIHsKKyAgICAgICAgICAgIHRo
aXMudGV4dHVyZXNTdXBwb3J0ZWQucHVzaCgnLWV0YzEua3R4Jyk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuX2dsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCkgeworICAgICAgICAgICAg
dmFyIHZlcnRleF9oaWdocCA9IHRoaXMuX2dsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCh0aGlz
Ll9nbC5WRVJURVhfU0hBREVSLCB0aGlzLl9nbC5ISUdIX0ZMT0FUKTsKKyAgICAgICAgICAgIHZh
ciBmcmFnbWVudF9oaWdocCA9IHRoaXMuX2dsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCh0aGlz
Ll9nbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuX2dsLkhJR0hfRkxPQVQpOworICAgICAgICAgICAg
aWYgKHZlcnRleF9oaWdocCAmJiBmcmFnbWVudF9oaWdocCkgeworICAgICAgICAgICAgICAgIHRo
aXMuX2NhcHMuaGlnaFByZWNpc2lvblNoYWRlclN1cHBvcnRlZCA9IHZlcnRleF9oaWdocC5wcmVj
aXNpb24gIT09IDAgJiYgZnJhZ21lbnRfaGlnaHAucHJlY2lzaW9uICE9PSAwOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIERlcHRoIGJ1ZmZlcgorICAgICAgICB0aGlzLnNl
dERlcHRoQnVmZmVyKHRydWUpOworICAgICAgICB0aGlzLnNldERlcHRoRnVuY3Rpb25Ub0xlc3NP
ckVxdWFsKCk7CisgICAgICAgIHRoaXMuc2V0RGVwdGhXcml0ZSh0cnVlKTsKKyAgICAgICAgLy8g
VGV4dHVyZSBtYXBzCisgICAgICAgIHRoaXMuX21heFNpbXVsdGFuZW91c1RleHR1cmVzID0gdGhp
cy5fY2Fwcy5tYXhDb21iaW5lZFRleHR1cmVzSW1hZ2VVbml0czsKKyAgICAgICAgZm9yICh2YXIg
c2xvdCA9IDA7IHNsb3QgPCB0aGlzLl9tYXhTaW11bHRhbmVvdXNUZXh0dXJlczsgc2xvdCsrKSB7
CisgICAgICAgICAgICB0aGlzLl9uZXh0RnJlZVRleHR1cmVTbG90cy5wdXNoKHNsb3QpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lLnByb3RvdHlw
ZSwgIndlYkdMVmVyc2lvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdmVyc2lv
biBvZiB0aGUgY3VycmVudCB3ZWJHTCBjb250ZXh0CisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWJHTFZlcnNpb247Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldHMgYSBzdHJpbmcgaWRlbmZpZnlp
bmcgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCisgICAgICogQHJldHVybnMgIkVuZ2luZSIgc3RyaW5n
CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiAiRW5naW5lIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAiaXNTdGVuY2lsRW5hYmxlIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzdGVuY2lsIGJ1ZmZlciBoYXMgYmVl
biBlbmFibGVkIHRocm91Z2ggdGhlIGNyZWF0aW9uIG9wdGlvbiBvZiB0aGUgY29udGV4dC4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2lzU3RlbmNpbEVuYWJsZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9wcmVwYXJlV29ya2luZ0NhbnZhcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3dvcmtpbmdDYW52YXMpIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl93b3JraW5nQ2FudmFzID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5f
d29ya2luZ0NhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgICAgICBpZiAoY29udGV4dCkgewor
ICAgICAgICAgICAgdGhpcy5fd29ya2luZ0NvbnRleHQgPSBjb250ZXh0OworICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXNldCB0aGUgdGV4dHVyZSBjYWNoZSB0byBlbXB0eSBz
dGF0ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUucmVzZXRUZXh0dXJlQ2FjaGUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl9ib3VuZFRleHR1cmVz
Q2FjaGUpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fYm91bmRUZXh0dXJlc0NhY2hlLmhhc093
blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuX2JvdW5kVGV4dHVyZXNDYWNoZVtrZXldID0gbnVsbDsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50VGV4dHVyZUNoYW5uZWwgPSAtMTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCB0aGUgZW5n
aW5lIGlzIHJ1bm5pbmcgaW4gZGV0ZXJtaW5pc3RpYyBsb2NrIHN0ZXAgbW9kZQorICAgICAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1p
bmlzdGljLWxvY2tzdGVwCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBlbmdpbmUgaXMgaW4gZGV0
ZXJtaW5pc3RpYyBsb2NrIHN0ZXAgbW9kZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUu
aXNEZXRlcm1pbmlzdGljTG9ja1N0ZXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0
aGlzLl9kZXRlcm1pbmlzdGljTG9ja3N0ZXA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRz
IHRoZSBtYXggc3RlcHMgd2hlbiBlbmdpbmUgaXMgcnVubmluZyBpbiBkZXRlcm1pbmlzdGljIGxv
Y2sgc3RlcAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEv
YW5pbWF0aW9ucyNkZXRlcm1pbmlzdGljLWxvY2tzdGVwCisgICAgICogQHJldHVybnMgdGhlIG1h
eCBzdGVwcworICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuZ2V0TG9ja3N0ZXBNYXhTdGVw
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2tzdGVwTWF4U3RlcHM7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGFuIG9iamVjdCBjb250YWluaW5nIGluZm9y
bWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHdlYkdMIGNvbnRleHQKKyAgICAgKiBAcmV0dXJucyBh
biBvYmplY3QgY29udGFpbmluZyB0aGUgdmVuZGVyLCB0aGUgcmVuZGVyZXIgYW5kIHRoZSB2ZXJz
aW9uIG9mIHRoZSBjdXJyZW50IHdlYkdMIGNvbnRleHQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJv
dG90eXBlLmdldEdsSW5mbyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgIHZlbmRvcjogdGhpcy5fZ2xWZW5kb3IsCisgICAgICAgICAgICByZW5kZXJlcjogdGhp
cy5fZ2xSZW5kZXJlciwKKyAgICAgICAgICAgIHZlcnNpb246IHRoaXMuX2dsVmVyc2lvbgorICAg
ICAgICB9OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBjdXJyZW50IGFzcGVjdCByYXRp
bworICAgICAqIEBwYXJhbSB2aWV3cG9ydE93bmVyIGRlZmluZXMgdGhlIGNhbWVyYSB0byB1c2Ug
dG8gZ2V0IHRoZSBhc3BlY3QgcmF0aW8KKyAgICAgKiBAcGFyYW0gdXNlU2NyZWVuIGRlZmluZXMg
aWYgc2NyZWVuIHNpemUgbXVzdCBiZSB1c2VkIChvciB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0
IGlmIGFueSkKKyAgICAgKiBAcmV0dXJucyBhIG51bWJlciBkZWZpbmluZyB0aGUgYXNwZWN0IHJh
dGlvCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRBc3BlY3RSYXRpbyA9IGZ1bmN0
aW9uICh2aWV3cG9ydE93bmVyLCB1c2VTY3JlZW4pIHsKKyAgICAgICAgaWYgKHVzZVNjcmVlbiA9
PT0gdm9pZCAwKSB7IHVzZVNjcmVlbiA9IGZhbHNlOyB9CisgICAgICAgIHZhciB2aWV3cG9ydCA9
IHZpZXdwb3J0T3duZXIudmlld3BvcnQ7CisgICAgICAgIHJldHVybiAodGhpcy5nZXRSZW5kZXJX
aWR0aCh1c2VTY3JlZW4pICogdmlld3BvcnQud2lkdGgpIC8gKHRoaXMuZ2V0UmVuZGVySGVpZ2h0
KHVzZVNjcmVlbikgKiB2aWV3cG9ydC5oZWlnaHQpOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0cyBjdXJyZW50IHNjcmVlbiBhc3BlY3QgcmF0aW8KKyAgICAgKiBAcmV0dXJucyBhIG51bWJl
ciBkZWZpbmluZyB0aGUgYXNwZWN0IHJhdGlvCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlw
ZS5nZXRTY3JlZW5Bc3BlY3RSYXRpbyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICh0
aGlzLmdldFJlbmRlcldpZHRoKHRydWUpKSAvICh0aGlzLmdldFJlbmRlckhlaWdodCh0cnVlKSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHJlbmRlciB3aWR0aAor
ICAgICAqIEBwYXJhbSB1c2VTY3JlZW4gZGVmaW5lcyBpZiBzY3JlZW4gc2l6ZSBtdXN0IGJlIHVz
ZWQgKG9yIHRoZSBjdXJyZW50IHJlbmRlciB0YXJnZXQgaWYgYW55KQorICAgICAqIEByZXR1cm5z
IGEgbnVtYmVyIGRlZmluaW5nIHRoZSBjdXJyZW50IHJlbmRlciB3aWR0aAorICAgICAqLworICAg
IEVuZ2luZS5wcm90b3R5cGUuZ2V0UmVuZGVyV2lkdGggPSBmdW5jdGlvbiAodXNlU2NyZWVuKSB7
CisgICAgICAgIGlmICh1c2VTY3JlZW4gPT09IHZvaWQgMCkgeyB1c2VTY3JlZW4gPSBmYWxzZTsg
fQorICAgICAgICBpZiAoIXVzZVNjcmVlbiAmJiB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0KSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlbmRlclRhcmdldC53aWR0aDsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRoOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCByZW5kZXIgaGVpZ2h0CisgICAg
ICogQHBhcmFtIHVzZVNjcmVlbiBkZWZpbmVzIGlmIHNjcmVlbiBzaXplIG11c3QgYmUgdXNlZCAo
b3IgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCBpZiBhbnkpCisgICAgICogQHJldHVybnMgYSBu
dW1iZXIgZGVmaW5pbmcgdGhlIGN1cnJlbnQgcmVuZGVyIGhlaWdodAorICAgICAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUuZ2V0UmVuZGVySGVpZ2h0ID0gZnVuY3Rpb24gKHVzZVNjcmVlbikgewor
ICAgICAgICBpZiAodXNlU2NyZWVuID09PSB2b2lkIDApIHsgdXNlU2NyZWVuID0gZmFsc2U7IH0K
KyAgICAgICAgaWYgKCF1c2VTY3JlZW4gJiYgdGhpcy5fY3VycmVudFJlbmRlclRhcmdldCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQuaGVpZ2h0OworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0OworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgSFRNTCBjYW52YXMgYXR0YWNoZWQgd2l0aCB0
aGUgY3VycmVudCB3ZWJHTCBjb250ZXh0CisgICAgICogQHJldHVybnMgYSBIVE1MIGNhbnZhcwor
ICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuZ2V0UmVuZGVyaW5nQ2FudmFzID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyaW5nQ2FudmFzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyBob3N0IHdpbmRvdworICAgICAqIEByZXR1cm5zIHRoZSBob3N0
IHdpbmRvdyBvYmplY3QKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmdldEhvc3RXaW5k
b3cgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9yZW5kZXJpbmdDYW52YXMgJiYg
dGhpcy5fcmVuZGVyaW5nQ2FudmFzLm93bmVyRG9jdW1lbnQgJiYgdGhpcy5fcmVuZGVyaW5nQ2Fu
dmFzLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9yZW5kZXJpbmdDYW52YXMub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldzsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gd2luZG93OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBob3N0
IGRvY3VtZW50CisgICAgICogQHJldHVybnMgdGhlIGhvc3QgZG9jdW1lbnQgb2JqZWN0CisgICAg
ICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRIb3N0RG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICh0aGlzLl9yZW5kZXJpbmdDYW52YXMgJiYgdGhpcy5fcmVuZGVyaW5nQ2Fu
dmFzLm93bmVyRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJpbmdD
YW52YXMub3duZXJEb2N1bWVudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZG9jdW1lbnQ7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGllbnQgcmVjdCBvZiB0aGUgSFRN
TCBjYW52YXMgYXR0YWNoZWQgd2l0aCB0aGUgY3VycmVudCB3ZWJHTCBjb250ZXh0CisgICAgICog
QHJldHVybnMgYSBjbGllbnQgcmVjdGFuZ2xlZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5
cGUuZ2V0UmVuZGVyaW5nQ2FudmFzQ2xpZW50UmVjdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9yZW5kZXJpbmdDYW52YXMpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJpbmdDYW52YXMuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBoYXJk
d2FyZSBzY2FsaW5nIGxldmVsLgorICAgICAqIEJ5IGRlZmF1bHQgdGhlIGhhcmR3YXJlIHNjYWxp
bmcgbGV2ZWwgaXMgY29tcHV0ZWQgZnJvbSB0aGUgd2luZG93IGRldmljZSByYXRpby4KKyAgICAg
KiBpZiBsZXZlbCA9IDEgdGhlbiB0aGUgZW5naW5lIHdpbGwgcmVuZGVyIGF0IHRoZSBleGFjdCBy
ZXNvbHV0aW9uIG9mIHRoZSBjYW52YXMuIElmIGxldmVsID0gMC41IHRoZW4gdGhlIGVuZ2luZSB3
aWxsIHJlbmRlciBhdCB0d2ljZSB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLgorICAgICAqIEBwYXJh
bSBsZXZlbCBkZWZpbmVzIHRoZSBsZXZlbCB0byB1c2UKKyAgICAgKi8KKyAgICBFbmdpbmUucHJv
dG90eXBlLnNldEhhcmR3YXJlU2NhbGluZ0xldmVsID0gZnVuY3Rpb24gKGxldmVsKSB7CisgICAg
ICAgIHRoaXMuX2hhcmR3YXJlU2NhbGluZ0xldmVsID0gbGV2ZWw7CisgICAgICAgIHRoaXMucmVz
aXplKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGhhcmR3YXJl
IHNjYWxpbmcgbGV2ZWwuCisgICAgICogQnkgZGVmYXVsdCB0aGUgaGFyZHdhcmUgc2NhbGluZyBs
ZXZlbCBpcyBjb21wdXRlZCBmcm9tIHRoZSB3aW5kb3cgZGV2aWNlIHJhdGlvLgorICAgICAqIGlm
IGxldmVsID0gMSB0aGVuIHRoZSBlbmdpbmUgd2lsbCByZW5kZXIgYXQgdGhlIGV4YWN0IHJlc29s
dXRpb24gb2YgdGhlIGNhbnZhcy4gSWYgbGV2ZWwgPSAwLjUgdGhlbiB0aGUgZW5naW5lIHdpbGwg
cmVuZGVyIGF0IHR3aWNlIHRoZSBzaXplIG9mIHRoZSBjYW52YXMuCisgICAgICogQHJldHVybnMg
YSBudW1iZXIgaW5kaWNhdGluZyB0aGUgY3VycmVudCBoYXJkd2FyZSBzY2FsaW5nIGxldmVsCisg
ICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRIYXJkd2FyZVNjYWxpbmdMZXZlbCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2hhcmR3YXJlU2NhbGluZ0xldmVsOwor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGlzdCBvZiBsb2FkZWQgdGV4dHVyZXMK
KyAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIGFsbCBsb2FkZWQgdGV4dHVyZXMK
KyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmdldExvYWRlZFRleHR1cmVzQ2FjaGUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2FjaGU7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBvYmplY3QgY29udGFpbmluZyBhbGwg
ZW5naW5lIGNhcGFiaWxpdGllcworICAgICAqIEByZXR1cm5zIHRoZSBFbmdpbmVDYXBhYmlsaXRp
ZXMgb2JqZWN0CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRDYXBzID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fY2FwczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIGN1cnJlbnQgZGVwdGggZnVuY3Rpb24KKyAgICAgKiBAcmV0dXJucyBhIG51
bWJlciBkZWZpbmluZyB0aGUgZGVwdGggZnVuY3Rpb24KKyAgICAgKi8KKyAgICBFbmdpbmUucHJv
dG90eXBlLmdldERlcHRoRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0
aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5kZXB0aEZ1bmM7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSBjdXJyZW50IGRlcHRoIGZ1bmN0aW9uCisgICAgICogQHBhcmFtIGRlcHRoRnVu
YyBkZWZpbmVzIHRoZSBmdW5jdGlvbiB0byB1c2UKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90
eXBlLnNldERlcHRoRnVuY3Rpb24gPSBmdW5jdGlvbiAoZGVwdGhGdW5jKSB7CisgICAgICAgIHRo
aXMuX2RlcHRoQ3VsbGluZ1N0YXRlLmRlcHRoRnVuYyA9IGRlcHRoRnVuYzsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHMgdGhlIGN1cnJlbnQgZGVwdGggZnVuY3Rpb24gdG8gR1JFQVRFUgor
ICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0RGVwdGhGdW5jdGlvblRvR3JlYXRlciA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUuZGVwdGhGdW5j
ID0gdGhpcy5fZ2wuR1JFQVRFUjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGN1
cnJlbnQgZGVwdGggZnVuY3Rpb24gdG8gR0VRVUFMCisgICAgICovCisgICAgRW5naW5lLnByb3Rv
dHlwZS5zZXREZXB0aEZ1bmN0aW9uVG9HcmVhdGVyT3JFcXVhbCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUuZGVwdGhGdW5jID0gdGhpcy5fZ2wuR0VRVUFM
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3VycmVudCBkZXB0aCBmdW5jdGlv
biB0byBMRVNTCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXREZXB0aEZ1bmN0aW9u
VG9MZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5k
ZXB0aEZ1bmMgPSB0aGlzLl9nbC5MRVNTOworICAgIH07CisgICAgLyoqCisgICAgICogQ2FjaGVz
IHRoZSB0aGUgc3RhdGUgb2YgdGhlIHN0ZW5jaWwgYnVmZmVyCisgICAgICovCisgICAgRW5naW5l
LnByb3RvdHlwZS5jYWNoZVN0ZW5jaWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy5fY2FjaGVkU3RlbmNpbEJ1ZmZlciA9IHRoaXMuZ2V0U3RlbmNpbEJ1ZmZlcigpOworICAgICAg
ICB0aGlzLl9jYWNoZWRTdGVuY2lsRnVuY3Rpb24gPSB0aGlzLmdldFN0ZW5jaWxGdW5jdGlvbigp
OworICAgICAgICB0aGlzLl9jYWNoZWRTdGVuY2lsTWFzayA9IHRoaXMuZ2V0U3RlbmNpbE1hc2so
KTsKKyAgICAgICAgdGhpcy5fY2FjaGVkU3RlbmNpbE9wZXJhdGlvblBhc3MgPSB0aGlzLmdldFN0
ZW5jaWxPcGVyYXRpb25QYXNzKCk7CisgICAgICAgIHRoaXMuX2NhY2hlZFN0ZW5jaWxPcGVyYXRp
b25GYWlsID0gdGhpcy5nZXRTdGVuY2lsT3BlcmF0aW9uRmFpbCgpOworICAgICAgICB0aGlzLl9j
YWNoZWRTdGVuY2lsT3BlcmF0aW9uRGVwdGhGYWlsID0gdGhpcy5nZXRTdGVuY2lsT3BlcmF0aW9u
RGVwdGhGYWlsKCk7CisgICAgICAgIHRoaXMuX2NhY2hlZFN0ZW5jaWxSZWZlcmVuY2UgPSB0aGlz
LmdldFN0ZW5jaWxGdW5jdGlvblJlZmVyZW5jZSgpOworICAgIH07CisgICAgLyoqCisgICAgICog
UmVzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlcgorICAgICAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUucmVzdG9yZVN0ZW5jaWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdGhpcy5zZXRTdGVuY2lsRnVuY3Rpb24odGhpcy5fY2FjaGVkU3RlbmNpbEZ1bmN0aW9uKTsK
KyAgICAgICAgdGhpcy5zZXRTdGVuY2lsTWFzayh0aGlzLl9jYWNoZWRTdGVuY2lsTWFzayk7Cisg
ICAgICAgIHRoaXMuc2V0U3RlbmNpbEJ1ZmZlcih0aGlzLl9jYWNoZWRTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgdGhpcy5zZXRTdGVuY2lsT3BlcmF0aW9uUGFzcyh0aGlzLl9jYWNoZWRTdGVuY2ls
T3BlcmF0aW9uUGFzcyk7CisgICAgICAgIHRoaXMuc2V0U3RlbmNpbE9wZXJhdGlvbkZhaWwodGhp
cy5fY2FjaGVkU3RlbmNpbE9wZXJhdGlvbkZhaWwpOworICAgICAgICB0aGlzLnNldFN0ZW5jaWxP
cGVyYXRpb25EZXB0aEZhaWwodGhpcy5fY2FjaGVkU3RlbmNpbE9wZXJhdGlvbkRlcHRoRmFpbCk7
CisgICAgICAgIHRoaXMuc2V0U3RlbmNpbEZ1bmN0aW9uUmVmZXJlbmNlKHRoaXMuX2NhY2hlZFN0
ZW5jaWxSZWZlcmVuY2UpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3VycmVu
dCBkZXB0aCBmdW5jdGlvbiB0byBMRVFVQUwKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBl
LnNldERlcHRoRnVuY3Rpb25Ub0xlc3NPckVxdWFsID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0
aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5kZXB0aEZ1bmMgPSB0aGlzLl9nbC5MRVFVQUw7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHN0ZW5jaWwg
YnVmZmVyIGlzIGVuYWJsZWQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBzdGVuY2lsIGJ1
ZmZlciBzdGF0ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuZ2V0U3RlbmNpbEJ1ZmZl
ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVu
Y2lsVGVzdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBz
dGVuY2lsIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBlbmFibGUgZGVmaW5lcyBpZiB0aGUgc3RlbmNp
bCBidWZmZXIgbXVzdCBiZSBlbmFibGVkIG9yIGRpc2FibGVkCisgICAgICovCisgICAgRW5naW5l
LnByb3RvdHlwZS5zZXRTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24gKGVuYWJsZSkgeworICAgICAg
ICB0aGlzLl9zdGVuY2lsU3RhdGUuc3RlbmNpbFRlc3QgPSBlbmFibGU7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHN0ZW5jaWwgbWFzaworICAgICAqIEByZXR1cm5z
IGEgbnVtYmVyIGRlZmluaW5nIHRoZSBuZXcgc3RlbmNpbCBtYXNrIHRvIHVzZQorICAgICAqLwor
ICAgIEVuZ2luZS5wcm90b3R5cGUuZ2V0U3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9zdGVuY2lsU3RhdGUuc3RlbmNpbE1hc2s7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIHRoZSBjdXJyZW50IHN0ZW5jaWwgbWFzaworICAgICAqIEBwYXJhbSBt
YXNrIGRlZmluZXMgdGhlIG5ldyBzdGVuY2lsIG1hc2sgdG8gdXNlCisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5zZXRTdGVuY2lsTWFzayA9IGZ1bmN0aW9uIChtYXNrKSB7CisgICAgICAg
IHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsTWFzayA9IG1hc2s7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHN0ZW5jaWwgZnVuY3Rpb24KKyAgICAgKiBAcmV0dXJu
cyBhIG51bWJlciBkZWZpbmluZyB0aGUgc3RlbmNpbCBmdW5jdGlvbiB0byB1c2UKKyAgICAgKi8K
KyAgICBFbmdpbmUucHJvdG90eXBlLmdldFN0ZW5jaWxGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsRnVuYzsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RlbmNpbCByZWZlcmVuY2UgdmFsdWUK
KyAgICAgKiBAcmV0dXJucyBhIG51bWJlciBkZWZpbmluZyB0aGUgc3RlbmNpbCByZWZlcmVuY2Ug
dmFsdWUgdG8gdXNlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRTdGVuY2lsRnVu
Y3Rpb25SZWZlcmVuY2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9zdGVu
Y2lsU3RhdGUuc3RlbmNpbEZ1bmNSZWY7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRo
ZSBjdXJyZW50IHN0ZW5jaWwgbWFzaworICAgICAqIEByZXR1cm5zIGEgbnVtYmVyIGRlZmluaW5n
IHRoZSBzdGVuY2lsIG1hc2sgdG8gdXNlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5n
ZXRTdGVuY2lsRnVuY3Rpb25NYXNrID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5fc3RlbmNpbFN0YXRlLnN0ZW5jaWxGdW5jTWFzazsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFNldHMgdGhlIGN1cnJlbnQgc3RlbmNpbCBmdW5jdGlvbgorICAgICAqIEBwYXJhbSBzdGVuY2ls
RnVuYyBkZWZpbmVzIHRoZSBuZXcgc3RlbmNpbCBmdW5jdGlvbiB0byB1c2UKKyAgICAgKi8KKyAg
ICBFbmdpbmUucHJvdG90eXBlLnNldFN0ZW5jaWxGdW5jdGlvbiA9IGZ1bmN0aW9uIChzdGVuY2ls
RnVuYykgeworICAgICAgICB0aGlzLl9zdGVuY2lsU3RhdGUuc3RlbmNpbEZ1bmMgPSBzdGVuY2ls
RnVuYzsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGN1cnJlbnQgc3RlbmNpbCBy
ZWZlcmVuY2UKKyAgICAgKiBAcGFyYW0gcmVmZXJlbmNlIGRlZmluZXMgdGhlIG5ldyBzdGVuY2ls
IHJlZmVyZW5jZSB0byB1c2UKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldFN0ZW5j
aWxGdW5jdGlvblJlZmVyZW5jZSA9IGZ1bmN0aW9uIChyZWZlcmVuY2UpIHsKKyAgICAgICAgdGhp
cy5fc3RlbmNpbFN0YXRlLnN0ZW5jaWxGdW5jUmVmID0gcmVmZXJlbmNlOworICAgIH07CisgICAg
LyoqCisgICAgICogU2V0cyB0aGUgY3VycmVudCBzdGVuY2lsIG1hc2sKKyAgICAgKiBAcGFyYW0g
bWFzayBkZWZpbmVzIHRoZSBuZXcgc3RlbmNpbCBtYXNrIHRvIHVzZQorICAgICAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUuc2V0U3RlbmNpbEZ1bmN0aW9uTWFzayA9IGZ1bmN0aW9uIChtYXNrKSB7
CisgICAgICAgIHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsRnVuY01hc2sgPSBtYXNrOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBzdGVuY2lsIG9wZXJhdGlvbiB3
aGVuIHN0ZW5jaWwgZmFpbHMKKyAgICAgKiBAcmV0dXJucyBhIG51bWJlciBkZWZpbmluZyBzdGVu
Y2lsIG9wZXJhdGlvbiB0byB1c2Ugd2hlbiBzdGVuY2lsIGZhaWxzCisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5nZXRTdGVuY2lsT3BlcmF0aW9uRmFpbCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsT3BTdGVuY2lsRmFpbDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RlbmNpbCBvcGVyYXRpb24g
d2hlbiBkZXB0aCBmYWlscworICAgICAqIEByZXR1cm5zIGEgbnVtYmVyIGRlZmluaW5nIHN0ZW5j
aWwgb3BlcmF0aW9uIHRvIHVzZSB3aGVuIGRlcHRoIGZhaWxzCisgICAgICovCisgICAgRW5naW5l
LnByb3RvdHlwZS5nZXRTdGVuY2lsT3BlcmF0aW9uRGVwdGhGYWlsID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fc3RlbmNpbFN0YXRlLnN0ZW5jaWxPcERlcHRoRmFpbDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RlbmNpbCBvcGVyYXRpb24g
d2hlbiBzdGVuY2lsIHBhc3NlcworICAgICAqIEByZXR1cm5zIGEgbnVtYmVyIGRlZmluaW5nIHN0
ZW5jaWwgb3BlcmF0aW9uIHRvIHVzZSB3aGVuIHN0ZW5jaWwgcGFzc2VzCisgICAgICovCisgICAg
RW5naW5lLnByb3RvdHlwZS5nZXRTdGVuY2lsT3BlcmF0aW9uUGFzcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsT3BTdGVuY2lsRGVwdGhQ
YXNzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgc3RlbmNpbCBvcGVyYXRpb24g
dG8gdXNlIHdoZW4gc3RlbmNpbCBmYWlscworICAgICAqIEBwYXJhbSBvcGVyYXRpb24gZGVmaW5l
cyB0aGUgc3RlbmNpbCBvcGVyYXRpb24gdG8gdXNlIHdoZW4gc3RlbmNpbCBmYWlscworICAgICAq
LworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0U3RlbmNpbE9wZXJhdGlvbkZhaWwgPSBmdW5jdGlv
biAob3BlcmF0aW9uKSB7CisgICAgICAgIHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsT3BTdGVu
Y2lsRmFpbCA9IG9wZXJhdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHN0
ZW5jaWwgb3BlcmF0aW9uIHRvIHVzZSB3aGVuIGRlcHRoIGZhaWxzCisgICAgICogQHBhcmFtIG9w
ZXJhdGlvbiBkZWZpbmVzIHRoZSBzdGVuY2lsIG9wZXJhdGlvbiB0byB1c2Ugd2hlbiBkZXB0aCBm
YWlscworICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0U3RlbmNpbE9wZXJhdGlvbkRl
cHRoRmFpbCA9IGZ1bmN0aW9uIChvcGVyYXRpb24pIHsKKyAgICAgICAgdGhpcy5fc3RlbmNpbFN0
YXRlLnN0ZW5jaWxPcERlcHRoRmFpbCA9IG9wZXJhdGlvbjsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldHMgdGhlIHN0ZW5jaWwgb3BlcmF0aW9uIHRvIHVzZSB3aGVuIHN0ZW5jaWwgcGFzc2Vz
CisgICAgICogQHBhcmFtIG9wZXJhdGlvbiBkZWZpbmVzIHRoZSBzdGVuY2lsIG9wZXJhdGlvbiB0
byB1c2Ugd2hlbiBzdGVuY2lsIHBhc3NlcworICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUu
c2V0U3RlbmNpbE9wZXJhdGlvblBhc3MgPSBmdW5jdGlvbiAob3BlcmF0aW9uKSB7CisgICAgICAg
IHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsT3BTdGVuY2lsRGVwdGhQYXNzID0gb3BlcmF0aW9u
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0
aGUgZGl0aGVyaW5nIHN0YXRlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQKKyAgICAgKiBAcGFyYW0g
dmFsdWUgZGVmaW5lcyB0aGUgZGl0aGVyaW5nIHN0YXRlCisgICAgICovCisgICAgRW5naW5lLnBy
b3RvdHlwZS5zZXREaXRoZXJpbmdTdGF0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBp
ZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmVuYWJsZSh0aGlzLl9nbC5ESVRIRVIp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZ2wuZGlzYWJs
ZSh0aGlzLl9nbC5ESVRIRVIpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSByYXN0ZXJpemVyIHN0YXRlIGlzIGVuYWJs
ZWQgb3IgZGlzYWJsZWQKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5lcyB0aGUgcmFzdGVyaXpl
ciBzdGF0ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0UmFzdGVyaXplclN0YXRl
ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAg
dGhpcy5fZ2wuZGlzYWJsZSh0aGlzLl9nbC5SQVNURVJJWkVSX0RJU0NBUkQpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZ2wuZW5hYmxlKHRoaXMuX2dsLlJB
U1RFUklaRVJfRElTQ0FSRCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIHN0
b3AgZXhlY3V0aW5nIGEgcmVuZGVyIGxvb3AgZnVuY3Rpb24gYW5kIHJlbW92ZSBpdCBmcm9tIHRo
ZSBleGVjdXRpb24gYXJyYXkKKyAgICAgKiBAcGFyYW0gcmVuZGVyRnVuY3Rpb24gZGVmaW5lcyB0
aGUgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZC4gSWYgbm90IHByb3ZpZGVkIGFsbCBmdW5jdGlvbnMg
d2lsbCBiZSByZW1vdmVkLgorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc3RvcFJlbmRl
ckxvb3AgPSBmdW5jdGlvbiAocmVuZGVyRnVuY3Rpb24pIHsKKyAgICAgICAgaWYgKCFyZW5kZXJG
dW5jdGlvbikgeworICAgICAgICAgICAgdGhpcy5fYWN0aXZlUmVuZGVyTG9vcHMgPSBbXTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9h
Y3RpdmVSZW5kZXJMb29wcy5pbmRleE9mKHJlbmRlckZ1bmN0aW9uKTsKKyAgICAgICAgaWYgKGlu
ZGV4ID49IDApIHsKKyAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlckxvb3BzLnNwbGljZShp
bmRleCwgMSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5fcmVuZGVyTG9vcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0
aGlzLl9jb250ZXh0V2FzTG9zdCkgeworICAgICAgICAgICAgdmFyIHNob3VsZFJlbmRlciA9IHRy
dWU7CisgICAgICAgICAgICBpZiAoIXRoaXMucmVuZGVyRXZlbkluQmFja2dyb3VuZCAmJiB0aGlz
Ll93aW5kb3dJc0JhY2tncm91bmQpIHsKKyAgICAgICAgICAgICAgICBzaG91bGRSZW5kZXIgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzaG91bGRSZW5kZXIpIHsKKyAg
ICAgICAgICAgICAgICAvLyBTdGFydCBuZXcgZnJhbWUKKyAgICAgICAgICAgICAgICB0aGlzLmJl
Z2luRnJhbWUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwg
dGhpcy5fYWN0aXZlUmVuZGVyTG9vcHMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciByZW5kZXJGdW5jdGlvbiA9IHRoaXMuX2FjdGl2ZVJlbmRlckxvb3BzW2luZGV4
XTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyRnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgLy8gUHJlc2VudAorICAgICAgICAgICAgICAgIHRoaXMuZW5k
RnJhbWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYWN0
aXZlUmVuZGVyTG9vcHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgLy8gUmVnaXN0ZXIgbmV3
IGZyYW1lCisgICAgICAgICAgICBpZiAodGhpcy5jdXN0b21BbmltYXRpb25GcmFtZVJlcXVlc3Rl
cikgeworICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tQW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZXIu
cmVxdWVzdElEID0gdGhpcy5fcXVldWVOZXdGcmFtZSh0aGlzLmN1c3RvbUFuaW1hdGlvbkZyYW1l
UmVxdWVzdGVyLnJlbmRlckZ1bmN0aW9uIHx8IHRoaXMuX2JpbmRlZFJlbmRlckZ1bmN0aW9uLCB0
aGlzLmN1c3RvbUFuaW1hdGlvbkZyYW1lUmVxdWVzdGVyKTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9mcmFtZUhhbmRsZXIgPSB0aGlzLmN1c3RvbUFuaW1hdGlvbkZyYW1lUmVxdWVzdGVyLnJlcXVl
c3RJRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNWUlByZXNl
bnRpbmcoKSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RWUkZyYW1lKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9mcmFt
ZUhhbmRsZXIgPSB0aGlzLl9xdWV1ZU5ld0ZyYW1lKHRoaXMuX2JpbmRlZFJlbmRlckZ1bmN0aW9u
LCB0aGlzLmdldEhvc3RXaW5kb3coKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdRdWV1ZUxhdW5jaGVkID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENhbiBiZSB1c2VkIHRvIG92
ZXJyaWRlIHRoZSBjdXJyZW50IHJlcXVlc3RBbmltYXRpb25GcmFtZSByZXF1ZXN0ZXIuCisgICAg
ICogQGhpZGRlbgorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3F1ZXVlTmV3RnJhbWUg
PSBmdW5jdGlvbiAoYmluZGVkUmVuZGVyRnVuY3Rpb24sIHJlcXVlc3RlcikgeworICAgICAgICBy
ZXR1cm4gRW5naW5lLlF1ZXVlTmV3RnJhbWUoYmluZGVkUmVuZGVyRnVuY3Rpb24sIHJlcXVlc3Rl
cik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlciBhbmQgZXhlY3V0ZSBhIHJlbmRl
ciBsb29wLiBUaGUgZW5naW5lIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgcmVuZGVyIGZ1bmN0aW9u
CisgICAgICogQHBhcmFtIHJlbmRlckZ1bmN0aW9uIGRlZmluZXMgdGhlIGZ1bmN0aW9uIHRvIGNv
bnRpbnVvdXNseSBleGVjdXRlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5ydW5SZW5k
ZXJMb29wID0gZnVuY3Rpb24gKHJlbmRlckZ1bmN0aW9uKSB7CisgICAgICAgIGlmICh0aGlzLl9h
Y3RpdmVSZW5kZXJMb29wcy5pbmRleE9mKHJlbmRlckZ1bmN0aW9uKSAhPT0gLTEpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJMb29w
cy5wdXNoKHJlbmRlckZ1bmN0aW9uKTsKKyAgICAgICAgaWYgKCF0aGlzLl9yZW5kZXJpbmdRdWV1
ZUxhdW5jaGVkKSB7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdRdWV1ZUxhdW5jaGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRlZFJlbmRlckZ1bmN0aW9uID0gdGhpcy5fcmVu
ZGVyTG9vcC5iaW5kKHRoaXMpOworICAgICAgICAgICAgdGhpcy5fZnJhbWVIYW5kbGVyID0gdGhp
cy5fcXVldWVOZXdGcmFtZSh0aGlzLl9iaW5kZWRSZW5kZXJGdW5jdGlvbiwgdGhpcy5nZXRIb3N0
V2luZG93KCkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUb2dnbGUgZnVs
bCBzY3JlZW4gbW9kZQorICAgICAqIEBwYXJhbSByZXF1ZXN0UG9pbnRlckxvY2sgZGVmaW5lcyBp
ZiBhIHBvaW50ZXIgbG9jayBzaG91bGQgYmUgcmVxdWVzdGVkIGZyb20gdGhlIHVzZXIKKyAgICAg
Ki8KKyAgICBFbmdpbmUucHJvdG90eXBlLnN3aXRjaEZ1bGxzY3JlZW4gPSBmdW5jdGlvbiAocmVx
dWVzdFBvaW50ZXJMb2NrKSB7CisgICAgICAgIGlmICh0aGlzLmlzRnVsbHNjcmVlbikgeworICAg
ICAgICAgICAgdGhpcy5leGl0RnVsbHNjcmVlbigpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgdGhpcy5lbnRlckZ1bGxzY3JlZW4ocmVxdWVzdFBvaW50ZXJMb2NrKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRW50ZXJzIGZ1bGwgc2NyZWVuIG1v
ZGUKKyAgICAgKiBAcGFyYW0gcmVxdWVzdFBvaW50ZXJMb2NrIGRlZmluZXMgaWYgYSBwb2ludGVy
IGxvY2sgc2hvdWxkIGJlIHJlcXVlc3RlZCBmcm9tIHRoZSB1c2VyCisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5lbnRlckZ1bGxzY3JlZW4gPSBmdW5jdGlvbiAocmVxdWVzdFBvaW50ZXJM
b2NrKSB7CisgICAgICAgIGlmICghdGhpcy5pc0Z1bGxzY3JlZW4pIHsKKyAgICAgICAgICAgIHRo
aXMuX3BvaW50ZXJMb2NrUmVxdWVzdGVkID0gcmVxdWVzdFBvaW50ZXJMb2NrOworICAgICAgICAg
ICAgaWYgKHRoaXMuX3JlbmRlcmluZ0NhbnZhcykgeworICAgICAgICAgICAgICAgIEVuZ2luZS5f
UmVxdWVzdEZ1bGxzY3JlZW4odGhpcy5fcmVuZGVyaW5nQ2FudmFzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRXhpdHMgZnVsbCBzY3JlZW4gbW9k
ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuZXhpdEZ1bGxzY3JlZW4gPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGlmICh0aGlzLmlzRnVsbHNjcmVlbikgeworICAgICAgICAgICAgRW5n
aW5lLl9FeGl0RnVsbHNjcmVlbigpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBFbnRlcnMgUG9pbnRlcmxvY2sgbW9kZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUu
ZW50ZXJQb2ludGVybG9jayA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRl
cmluZ0NhbnZhcykgeworICAgICAgICAgICAgRW5naW5lLl9SZXF1ZXN0UG9pbnRlcmxvY2sodGhp
cy5fcmVuZGVyaW5nQ2FudmFzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
RXhpdHMgUG9pbnRlcmxvY2sgbW9kZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuZXhp
dFBvaW50ZXJsb2NrID0gZnVuY3Rpb24gKCkgeworICAgICAgICBFbmdpbmUuX0V4aXRQb2ludGVy
bG9jaygpOworICAgIH07CisgICAgLyoqCisgICAgICogQ2xlYXIgdGhlIGN1cnJlbnQgcmVuZGVy
IGJ1ZmZlciBvciB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IChpZiBhbnkgaXMgc2V0IHVwKQor
ICAgICAqIEBwYXJhbSBjb2xvciBkZWZpbmVzIHRoZSBjb2xvciB0byB1c2UKKyAgICAgKiBAcGFy
YW0gYmFja0J1ZmZlciBkZWZpbmVzIGlmIHRoZSBiYWNrIGJ1ZmZlciBtdXN0IGJlIGNsZWFyZWQK
KyAgICAgKiBAcGFyYW0gZGVwdGggZGVmaW5lcyBpZiB0aGUgZGVwdGggYnVmZmVyIG11c3QgYmUg
Y2xlYXJlZAorICAgICAqIEBwYXJhbSBzdGVuY2lsIGRlZmluZXMgaWYgdGhlIHN0ZW5jaWwgYnVm
ZmVyIG11c3QgYmUgY2xlYXJlZAorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuY2xlYXIg
PSBmdW5jdGlvbiAoY29sb3IsIGJhY2tCdWZmZXIsIGRlcHRoLCBzdGVuY2lsKSB7CisgICAgICAg
IGlmIChzdGVuY2lsID09PSB2b2lkIDApIHsgc3RlbmNpbCA9IGZhbHNlOyB9CisgICAgICAgIHRo
aXMuYXBwbHlTdGF0ZXMoKTsKKyAgICAgICAgdmFyIG1vZGUgPSAwOworICAgICAgICBpZiAoYmFj
a0J1ZmZlciAmJiBjb2xvcikgeworICAgICAgICAgICAgdGhpcy5fZ2wuY2xlYXJDb2xvcihjb2xv
ci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hICE9PSB1bmRlZmluZWQgPyBjb2xvci5hIDog
MS4wKTsKKyAgICAgICAgICAgIG1vZGUgfD0gdGhpcy5fZ2wuQ09MT1JfQlVGRkVSX0JJVDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZGVwdGgpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmNsZWFy
RGVwdGgoMS4wKTsKKyAgICAgICAgICAgIG1vZGUgfD0gdGhpcy5fZ2wuREVQVEhfQlVGRkVSX0JJ
VDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RlbmNpbCkgeworICAgICAgICAgICAgdGhpcy5f
Z2wuY2xlYXJTdGVuY2lsKDApOworICAgICAgICAgICAgbW9kZSB8PSB0aGlzLl9nbC5TVEVOQ0lM
X0JVRkZFUl9CSVQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2wuY2xlYXIobW9kZSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlcyBhIHNjaXNzb3IgY2xlYXIgKGllLiBhIGNs
ZWFyIG9uIGEgc3BlY2lmaWMgcG9ydGlvbiBvZiB0aGUgc2NyZWVuKQorICAgICAqIEBwYXJhbSB4
IGRlZmluZXMgdGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBj
bGVhciByZWN0YW5nbGUKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5LWNvb3JkaW5hdGUg
b2YgdGhlIGNvcm5lciBvZiB0aGUgY2xlYXIgcmVjdGFuZ2xlCisgICAgICogQHBhcmFtIHdpZHRo
IGRlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBjbGVhciByZWN0YW5nbGUKKyAgICAgKiBAcGFyYW0g
aGVpZ2h0IGRlZmluZXMgdGhlIGhlaWdodCBvZiB0aGUgY2xlYXIgcmVjdGFuZ2xlCisgICAgICog
QHBhcmFtIGNsZWFyQ29sb3IgZGVmaW5lcyB0aGUgY2xlYXIgY29sb3IKKyAgICAgKi8KKyAgICBF
bmdpbmUucHJvdG90eXBlLnNjaXNzb3JDbGVhciA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBjbGVhckNvbG9yKSB7CisgICAgICAgIHRoaXMuZW5hYmxlU2Npc3Nvcih4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICAgICAgdGhpcy5jbGVhcihjbGVhckNvbG9yLCB0cnVlLCB0cnVlLCB0
cnVlKTsKKyAgICAgICAgdGhpcy5kaXNhYmxlU2Npc3NvcigpOworICAgIH07CisgICAgLyoqCisg
ICAgICogRW5hYmxlIHNjaXNzb3IgdGVzdCBvbiBhIHNwZWNpZmljIHJlY3RhbmdsZSAoaWUuIHJl
bmRlciB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYSBzcGVjaWZpYyBwb3J0aW9uIG9mIHRoZSBz
Y3JlZW4pCisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgeC1jb29yZGluYXRlIG9mIHRoZSB0
b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGNsZWFyIHJlY3RhbmdsZQorICAgICAqIEBwYXJhbSB5IGRl
ZmluZXMgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY29ybmVyIG9mIHRoZSBjbGVhciByZWN0YW5n
bGUKKyAgICAgKiBAcGFyYW0gd2lkdGggZGVmaW5lcyB0aGUgd2lkdGggb2YgdGhlIGNsZWFyIHJl
Y3RhbmdsZQorICAgICAqIEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgaGVpZ2h0IG9mIHRoZSBj
bGVhciByZWN0YW5nbGUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmVuYWJsZVNjaXNz
b3IgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCkgeworICAgICAgICB2YXIgZ2wgPSB0
aGlzLl9nbDsKKyAgICAgICAgLy8gQ2hhbmdlIHN0YXRlCisgICAgICAgIGdsLmVuYWJsZShnbC5T
Q0lTU09SX1RFU1QpOworICAgICAgICBnbC5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogRGlzYWJsZSBwcmV2aW91c2x5IHNldCBzY2lzc29yIHRl
c3QgcmVjdGFuZ2xlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5kaXNhYmxlU2Npc3Nv
ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIGds
LmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgRW5naW5lLnByb3RvdHlwZS5fdmlld3BvcnQgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhl
aWdodCkgeworICAgICAgICBpZiAoeCAhPT0gdGhpcy5fdmlld3BvcnRDYWNoZWQueCB8fAorICAg
ICAgICAgICAgeSAhPT0gdGhpcy5fdmlld3BvcnRDYWNoZWQueSB8fAorICAgICAgICAgICAgd2lk
dGggIT09IHRoaXMuX3ZpZXdwb3J0Q2FjaGVkLnogfHwKKyAgICAgICAgICAgIGhlaWdodCAhPT0g
dGhpcy5fdmlld3BvcnRDYWNoZWQudykgeworICAgICAgICAgICAgdGhpcy5fdmlld3BvcnRDYWNo
ZWQueCA9IHg7CisgICAgICAgICAgICB0aGlzLl92aWV3cG9ydENhY2hlZC55ID0geTsKKyAgICAg
ICAgICAgIHRoaXMuX3ZpZXdwb3J0Q2FjaGVkLnogPSB3aWR0aDsKKyAgICAgICAgICAgIHRoaXMu
X3ZpZXdwb3J0Q2FjaGVkLncgPSBoZWlnaHQ7CisgICAgICAgICAgICB0aGlzLl9nbC52aWV3cG9y
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0IHRoZSBXZWJHTCdzIHZpZXdwb3J0CisgICAgICogQHBhcmFtIHZpZXdwb3J0IGRlZmlu
ZXMgdGhlIHZpZXdwb3J0IGVsZW1lbnQgdG8gYmUgdXNlZAorICAgICAqIEBwYXJhbSByZXF1aXJl
ZFdpZHRoIGRlZmluZXMgdGhlIHdpZHRoIHJlcXVpcmVkIGZvciByZW5kZXJpbmcuIElmIG5vdCBw
cm92aWRlZCB0aGUgcmVuZGVyaW5nIGNhbnZhcycgd2lkdGggaXMgdXNlZAorICAgICAqIEBwYXJh
bSByZXF1aXJlZEhlaWdodCBkZWZpbmVzIHRoZSBoZWlnaHQgcmVxdWlyZWQgZm9yIHJlbmRlcmlu
Zy4gSWYgbm90IHByb3ZpZGVkIHRoZSByZW5kZXJpbmcgY2FudmFzJyBoZWlnaHQgaXMgdXNlZAor
ICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0Vmlld3BvcnQgPSBmdW5jdGlvbiAodmll
d3BvcnQsIHJlcXVpcmVkV2lkdGgsIHJlcXVpcmVkSGVpZ2h0KSB7CisgICAgICAgIHZhciB3aWR0
aCA9IHJlcXVpcmVkV2lkdGggfHwgdGhpcy5nZXRSZW5kZXJXaWR0aCgpOworICAgICAgICB2YXIg
aGVpZ2h0ID0gcmVxdWlyZWRIZWlnaHQgfHwgdGhpcy5nZXRSZW5kZXJIZWlnaHQoKTsKKyAgICAg
ICAgdmFyIHggPSB2aWV3cG9ydC54IHx8IDA7CisgICAgICAgIHZhciB5ID0gdmlld3BvcnQueSB8
fCAwOworICAgICAgICB0aGlzLl9jYWNoZWRWaWV3cG9ydCA9IHZpZXdwb3J0OworICAgICAgICB0
aGlzLl92aWV3cG9ydCh4ICogd2lkdGgsIHkgKiBoZWlnaHQsIHdpZHRoICogdmlld3BvcnQud2lk
dGgsIGhlaWdodCAqIHZpZXdwb3J0LmhlaWdodCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBE
aXJlY3RseSBzZXQgdGhlIFdlYkdMIFZpZXdwb3J0CisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0
aGUgeCBjb29yZGluYXRlIG9mIHRoZSB2aWV3cG9ydCAoaW4gc2NyZWVuIHNwYWNlKQorICAgICAq
IEBwYXJhbSB5IGRlZmluZXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgdmlld3BvcnQgKGluIHNj
cmVlbiBzcGFjZSkKKyAgICAgKiBAcGFyYW0gd2lkdGggZGVmaW5lcyB0aGUgd2lkdGggb2YgdGhl
IHZpZXdwb3J0IChpbiBzY3JlZW4gc3BhY2UpCisgICAgICogQHBhcmFtIGhlaWdodCBkZWZpbmVz
IHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0IChpbiBzY3JlZW4gc3BhY2UpCisgICAgICogQHJl
dHVybiB0aGUgY3VycmVudCB2aWV3cG9ydCBPYmplY3QgKGlmIGFueSkgdGhhdCBpcyBiZWluZyBy
ZXBsYWNlZCBieSB0aGlzIGNhbGwuIFlvdSBjYW4gcmVzdG9yZSB0aGlzIHZpZXdwb3J0IGxhdGVy
IG9uIHRvIGdvIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHN0YXRlCisgICAgICovCisgICAgRW5naW5l
LnByb3RvdHlwZS5zZXREaXJlY3RWaWV3cG9ydCA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVp
Z2h0KSB7CisgICAgICAgIHZhciBjdXJyZW50Vmlld3BvcnQgPSB0aGlzLl9jYWNoZWRWaWV3cG9y
dDsKKyAgICAgICAgdGhpcy5fY2FjaGVkVmlld3BvcnQgPSBudWxsOworICAgICAgICB0aGlzLl92
aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRWaWV3
cG9ydDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJlZ2luIGEgbmV3IGZyYW1lCisgICAgICov
CisgICAgRW5naW5lLnByb3RvdHlwZS5iZWdpbkZyYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB0aGlzLm9uQmVnaW5GcmFtZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAg
ICAgICB0aGlzLl9tZWFzdXJlRnBzKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFbmYgdGhl
IGN1cnJlbnQgZnJhbWUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmVuZEZyYW1lID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBGb3JjZSBhIGZsdXNoIGluIGNhc2Ugd2UgYXJlIHVz
aW5nIGEgYmFkIE9TLgorICAgICAgICBpZiAodGhpcy5fYmFkT1MpIHsKKyAgICAgICAgICAgIHRo
aXMuZmx1c2hGcmFtZWJ1ZmZlcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3N1Ym1pdFZS
RnJhbWUoKTsKKyAgICAgICAgdGhpcy5vbkVuZEZyYW1lT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZl
cnModGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXNpemUgdGhlIHZpZXcgYWNjb3Jk
aW5nIHRvIHRoZSBjYW52YXMnIHNpemUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnJl
c2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gV2UncmUgbm90IHJlc2l6aW5nIHRoZSBz
aXplIG9mIHRoZSBjYW52YXMgd2hpbGUgaW4gVlIgbW9kZSAmIHByZXNlbnRpbmcKKyAgICAgICAg
aWYgKCF0aGlzLmlzVlJQcmVzZW50aW5nKCkpIHsKKyAgICAgICAgICAgIHZhciB3aWR0aCA9IHRo
aXMuX3JlbmRlcmluZ0NhbnZhcyA/IHRoaXMuX3JlbmRlcmluZ0NhbnZhcy5jbGllbnRXaWR0aCA6
IHdpbmRvdy5pbm5lcldpZHRoOworICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuX3JlbmRl
cmluZ0NhbnZhcyA/IHRoaXMuX3JlbmRlcmluZ0NhbnZhcy5jbGllbnRIZWlnaHQgOiB3aW5kb3cu
aW5uZXJIZWlnaHQ7CisgICAgICAgICAgICB0aGlzLnNldFNpemUod2lkdGggLyB0aGlzLl9oYXJk
d2FyZVNjYWxpbmdMZXZlbCwgaGVpZ2h0IC8gdGhpcy5faGFyZHdhcmVTY2FsaW5nTGV2ZWwpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSBhIHNwZWNpZmljIHNpemUg
b2YgdGhlIGNhbnZhcworICAgICAqIEBwYXJhbSB3aWR0aCBkZWZpbmVzIHRoZSBuZXcgY2FudmFz
JyB3aWR0aAorICAgICAqIEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgbmV3IGNhbnZhcycgaGVp
Z2h0CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXRTaXplID0gZnVuY3Rpb24gKHdp
ZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9yZW5kZXJpbmdDYW52YXMpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB3aWR0aCA9IHdpZHRoIHwgMDsK
KyAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDsKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmlu
Z0NhbnZhcy53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy5fcmVuZGVyaW5nQ2FudmFzLmhlaWdodCA9
PT0gaGVpZ2h0KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fcmVuZGVyaW5nQ2FudmFzLndpZHRoID0gd2lkdGg7CisgICAgICAgIHRoaXMuX3JlbmRlcmlu
Z0NhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCB0aGlzLnNjZW5lcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBzY2Vu
ZSA9IHRoaXMuc2NlbmVzW2luZGV4XTsKKyAgICAgICAgICAgIGZvciAodmFyIGNhbUluZGV4ID0g
MDsgY2FtSW5kZXggPCBzY2VuZS5jYW1lcmFzLmxlbmd0aDsgY2FtSW5kZXgrKykgeworICAgICAg
ICAgICAgICAgIHZhciBjYW0gPSBzY2VuZS5jYW1lcmFzW2NhbUluZGV4XTsKKyAgICAgICAgICAg
ICAgICBjYW0uX2N1cnJlbnRSZW5kZXJJZCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMub25SZXNpemVPYnNlcnZhYmxlLmhhc09ic2VydmVycykgeworICAg
ICAgICAgICAgdGhpcy5vblJlc2l6ZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgZnJhbWUgYnVmZmVy
IHRvIHRoZSBzcGVjaWZpZWQgdGV4dHVyZS4KKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBUaGUgdGV4
dHVyZSB0byByZW5kZXIgdG8gb3IgbnVsbCBmb3IgdGhlIGRlZmF1bHQgY2FudmFzCisgICAgICog
QHBhcmFtIGZhY2VJbmRleCBUaGUgZmFjZSBvZiB0aGUgdGV4dHVyZSB0byByZW5kZXIgdG8gaW4g
Y2FzZSBvZiBjdWJlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gcmVxdWlyZWRXaWR0aCBUaGUgd2lk
dGggb2YgdGhlIHRhcmdldCB0byByZW5kZXIgdG8KKyAgICAgKiBAcGFyYW0gcmVxdWlyZWRIZWln
aHQgVGhlIGhlaWdodCBvZiB0aGUgdGFyZ2V0IHRvIHJlbmRlciB0bworICAgICAqIEBwYXJhbSBm
b3JjZUZ1bGxzY3JlZW5WaWV3cG9ydCBGb3JjZXMgdGhlIHZpZXdwb3J0IHRvIGJlIHRoZSBlbnRp
cmUgdGV4dHVyZS9zY3JlZW4gaWYgdHJ1ZQorICAgICAqIEBwYXJhbSBkZXB0aFN0ZW5jaWxUZXh0
dXJlIFRoZSBkZXB0aCBzdGVuY2lsIHRleHR1cmUgdG8gdXNlIHRvIHJlbmRlcgorICAgICAqIEBw
YXJhbSBsb2RMZXZlbCBkZWZpbmVzIGxlIGxvZCBsZXZlbCB0byBiaW5kIHRvIHRoZSBmcmFtZSBi
dWZmZXIKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmJpbmRGcmFtZWJ1ZmZlciA9IGZ1
bmN0aW9uICh0ZXh0dXJlLCBmYWNlSW5kZXgsIHJlcXVpcmVkV2lkdGgsIHJlcXVpcmVkSGVpZ2h0
LCBmb3JjZUZ1bGxzY3JlZW5WaWV3cG9ydCwgZGVwdGhTdGVuY2lsVGV4dHVyZSwgbG9kTGV2ZWwp
IHsKKyAgICAgICAgaWYgKGxvZExldmVsID09PSB2b2lkIDApIHsgbG9kTGV2ZWwgPSAwOyB9Cisg
ICAgICAgIGlmICh0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICB0aGlz
LnVuQmluZEZyYW1lYnVmZmVyKHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQgPSB0ZXh0dXJlOworICAgICAgICB0
aGlzLl9iaW5kVW5ib3VuZEZyYW1lYnVmZmVyKHRleHR1cmUuX01TQUFGcmFtZWJ1ZmZlciA/IHRl
eHR1cmUuX01TQUFGcmFtZWJ1ZmZlciA6IHRleHR1cmUuX2ZyYW1lYnVmZmVyKTsKKyAgICAgICAg
dmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIGlmICh0ZXh0dXJlLmlzQ3ViZSkgeworICAgICAg
ICAgICAgaWYgKGZhY2VJbmRleCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgZmFj
ZUluZGV4ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4
dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCB0ZXh0dXJlLl93ZWJHTFRleHR1cmUsIGxv
ZExldmVsKTsKKyAgICAgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxUZXh0dXJlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFRleHR1cmUuX2dlbmVyYXRlU3RlbmNpbEJ1ZmZlcikg
eworICAgICAgICAgICAgICAgICAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJV
RkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlSW5kZXgsIGRlcHRoU3RlbmNpbFRleHR1cmUuX3dlYkdMVGV4dHVyZSwg
bG9kTGV2ZWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIs
IGdsLkRFUFRIX0FUVEFDSE1FTlQsIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZh
Y2VJbmRleCwgZGVwdGhTdGVuY2lsVGV4dHVyZS5fd2ViR0xUZXh0dXJlLCBsb2RMZXZlbCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLl9jYWNoZWRWaWV3cG9ydCAmJiAhZm9yY2VGdWxsc2NyZWVuVmlld3BvcnQpIHsKKyAgICAg
ICAgICAgIHRoaXMuc2V0Vmlld3BvcnQodGhpcy5fY2FjaGVkVmlld3BvcnQsIHJlcXVpcmVkV2lk
dGgsIHJlcXVpcmVkSGVpZ2h0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGlmICghcmVxdWlyZWRXaWR0aCkgeworICAgICAgICAgICAgICAgIHJlcXVpcmVkV2lkdGgg
PSB0ZXh0dXJlLndpZHRoOworICAgICAgICAgICAgICAgIGlmIChsb2RMZXZlbCkgeworICAgICAg
ICAgICAgICAgICAgICByZXF1aXJlZFdpZHRoID0gcmVxdWlyZWRXaWR0aCAvIE1hdGgucG93KDIs
IGxvZExldmVsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIXJlcXVpcmVkSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgcmVxdWlyZWRIZWlnaHQg
PSB0ZXh0dXJlLmhlaWdodDsKKyAgICAgICAgICAgICAgICBpZiAobG9kTGV2ZWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVxdWlyZWRIZWlnaHQgPSByZXF1aXJlZEhlaWdodCAvIE1hdGgucG93
KDIsIGxvZExldmVsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl92aWV3cG9ydCgwLCAwLCByZXF1aXJlZFdpZHRoLCByZXF1aXJlZEhlaWdodCk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy53aXBlQ2FjaGVzKCk7CisgICAgfTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX2JpbmRVbmJvdW5kRnJhbWVidWZmZXIg
PSBmdW5jdGlvbiAoZnJhbWVidWZmZXIpIHsKKyAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRGcmFt
ZWJ1ZmZlciAhPT0gZnJhbWVidWZmZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmJpbmRGcmFt
ZWJ1ZmZlcih0aGlzLl9nbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpOworICAgICAgICAgICAg
dGhpcy5fY3VycmVudEZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIFVuYmluZCB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRleHR1
cmUgZnJvbSB0aGUgd2ViR0wgY29udGV4dAorICAgICAqIEBwYXJhbSB0ZXh0dXJlIGRlZmluZXMg
dGhlIHJlbmRlciB0YXJnZXQgdGV4dHVyZSB0byB1bmJpbmQKKyAgICAgKiBAcGFyYW0gZGlzYWJs
ZUdlbmVyYXRlTWlwTWFwcyBkZWZpbmVzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgbWlwbWFw
cyBtdXN0IG5vdCBiZSBnZW5lcmF0ZWQKKyAgICAgKiBAcGFyYW0gb25CZWZvcmVVbmJpbmQgZGVm
aW5lcyBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgZWZmZWN0aXZl
IHVuYmluZAorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUudW5CaW5kRnJhbWVidWZmZXIg
PSBmdW5jdGlvbiAodGV4dHVyZSwgZGlzYWJsZUdlbmVyYXRlTWlwTWFwcywgb25CZWZvcmVVbmJp
bmQpIHsKKyAgICAgICAgaWYgKGRpc2FibGVHZW5lcmF0ZU1pcE1hcHMgPT09IHZvaWQgMCkgeyBk
aXNhYmxlR2VuZXJhdGVNaXBNYXBzID0gZmFsc2U7IH0KKyAgICAgICAgdGhpcy5fY3VycmVudFJl
bmRlclRhcmdldCA9IG51bGw7CisgICAgICAgIC8vIElmIE1TQUEsIHdlIG5lZWQgdG8gYml0Ymx0
IGJhY2sgdG8gbWFpbiB0ZXh0dXJlCisgICAgICAgIHZhciBnbCA9IHRoaXMuX2dsOworICAgICAg
ICBpZiAodGV4dHVyZS5fTVNBQUZyYW1lYnVmZmVyKSB7CisgICAgICAgICAgICBnbC5iaW5kRnJh
bWVidWZmZXIoZ2wuUkVBRF9GUkFNRUJVRkZFUiwgdGV4dHVyZS5fTVNBQUZyYW1lYnVmZmVyKTsK
KyAgICAgICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5EUkFXX0ZSQU1FQlVGRkVSLCB0ZXh0
dXJlLl9mcmFtZWJ1ZmZlcik7CisgICAgICAgICAgICBnbC5ibGl0RnJhbWVidWZmZXIoMCwgMCwg
dGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsIDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1
cmUuaGVpZ2h0LCBnbC5DT0xPUl9CVUZGRVJfQklULCBnbC5ORUFSRVNUKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMgJiYgIWRpc2FibGVHZW5lcmF0ZU1p
cE1hcHMgJiYgIXRleHR1cmUuaXNDdWJlKSB7CisgICAgICAgICAgICB0aGlzLl9iaW5kVGV4dHVy
ZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIHRleHR1cmUsIHRydWUpOworICAgICAgICAgICAgZ2wu
Z2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7CisgICAgICAgICAgICB0aGlzLl9iaW5kVGV4
dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIG51bGwpOworICAgICAgICB9CisgICAgICAgIGlm
IChvbkJlZm9yZVVuYmluZCkgeworICAgICAgICAgICAgaWYgKHRleHR1cmUuX01TQUFGcmFtZWJ1
ZmZlcikgeworICAgICAgICAgICAgICAgIC8vIEJpbmQgdGhlIGNvcnJlY3QgZnJhbWVidWZmZXIK
KyAgICAgICAgICAgICAgICB0aGlzLl9iaW5kVW5ib3VuZEZyYW1lYnVmZmVyKHRleHR1cmUuX2Zy
YW1lYnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9uQmVmb3JlVW5iaW5kKCk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYmluZFVuYm91bmRGcmFtZWJ1ZmZlcihudWxsKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEZvcmNlIHRoZSBtaXBtYXAgZ2VuZXJhdGlvbiBmb3Ig
dGhlIGdpdmVuIHJlbmRlciB0YXJnZXQgdGV4dHVyZQorICAgICAqIEBwYXJhbSB0ZXh0dXJlIGRl
ZmluZXMgdGhlIHJlbmRlciB0YXJnZXQgdGV4dHVyZSB0byB1c2UKKyAgICAgKi8KKyAgICBFbmdp
bmUucHJvdG90eXBlLmdlbmVyYXRlTWlwTWFwc0ZvckN1YmVtYXAgPSBmdW5jdGlvbiAodGV4dHVy
ZSkgeworICAgICAgICBpZiAodGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAgICAgICAg
IHZhciBnbCA9IHRoaXMuX2dsOworICAgICAgICAgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3Rs
eShnbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlLCB0cnVlKTsKKyAgICAgICAgICAgIGdsLmdl
bmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfQ1VCRV9NQVApOworICAgICAgICAgICAgdGhpcy5fYmlu
ZFRleHR1cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQLCBudWxsKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqCisgICAgICogRm9yY2UgYSB3ZWJHTCBmbHVzaCAoaWUuIGEgZmx1c2gg
b2YgYWxsIHdhaXRpbmcgd2ViR0wgY29tbWFuZHMpCisgICAgICovCisgICAgRW5naW5lLnByb3Rv
dHlwZS5mbHVzaEZyYW1lYnVmZmVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9nbC5m
bHVzaCgpOworICAgIH07CisgICAgLyoqCisgICAgICogVW5iaW5kIHRoZSBjdXJyZW50IHJlbmRl
ciB0YXJnZXQgYW5kIGJpbmQgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIKKyAgICAgKi8KKyAgICBF
bmdpbmUucHJvdG90eXBlLnJlc3RvcmVEZWZhdWx0RnJhbWVidWZmZXIgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICB0
aGlzLnVuQmluZEZyYW1lYnVmZmVyKHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fYmluZFVuYm91bmRGcmFtZWJ1
ZmZlcihudWxsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY2FjaGVkVmlld3BvcnQp
IHsKKyAgICAgICAgICAgIHRoaXMuc2V0Vmlld3BvcnQodGhpcy5fY2FjaGVkVmlld3BvcnQpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMud2lwZUNhY2hlcygpOworICAgIH07CisgICAgLy8gVUJP
cworICAgIC8qKgorICAgICAqIENyZWF0ZSBhbiB1bmlmb3JtIGJ1ZmZlcgorICAgICAqIEBzZWUg
aHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL3dlYmdsMiN1bmlmb3JtLWJ1ZmZlci1v
YmpldHMKKyAgICAgKiBAcGFyYW0gZWxlbWVudHMgZGVmaW5lcyB0aGUgY29udGVudCBvZiB0aGUg
dW5pZm9ybSBidWZmZXIKKyAgICAgKiBAcmV0dXJucyB0aGUgd2ViR0wgdW5pZm9ybSBidWZmZXIK
KyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVVuaWZvcm1CdWZmZXIgPSBmdW5j
dGlvbiAoZWxlbWVudHMpIHsKKyAgICAgICAgdmFyIHVibyA9IHRoaXMuX2dsLmNyZWF0ZUJ1ZmZl
cigpOworICAgICAgICBpZiAoIXVibykgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJV
bmFibGUgdG8gY3JlYXRlIHVuaWZvcm0gYnVmZmVyIik7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHJlc3VsdCA9IG5ldyBfTWVzaGVzX1dlYkdMX3dlYkdMRGF0YUJ1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfX1siV2ViR0xEYXRhQnVmZmVyIl0odWJvKTsKKyAgICAgICAgdGhpcy5i
aW5kVW5pZm9ybUJ1ZmZlcihyZXN1bHQpOworICAgICAgICBpZiAoZWxlbWVudHMgaW5zdGFuY2Vv
ZiBGbG9hdDMyQXJyYXkpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmJ1ZmZlckRhdGEodGhpcy5f
Z2wuVU5JRk9STV9CVUZGRVIsIGVsZW1lbnRzLCB0aGlzLl9nbC5TVEFUSUNfRFJBVyk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9nbC5idWZmZXJEYXRhKHRo
aXMuX2dsLlVOSUZPUk1fQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KGVsZW1lbnRzKSwgdGhpcy5f
Z2wuU1RBVElDX0RSQVcpOworICAgICAgICB9CisgICAgICAgIHRoaXMuYmluZFVuaWZvcm1CdWZm
ZXIobnVsbCk7CisgICAgICAgIHJlc3VsdC5yZWZlcmVuY2VzID0gMTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGR5bmFtaWMgdW5pZm9y
bSBidWZmZXIKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy93
ZWJnbDIjdW5pZm9ybS1idWZmZXItb2JqZXRzCisgICAgICogQHBhcmFtIGVsZW1lbnRzIGRlZmlu
ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHVuaWZvcm0gYnVmZmVyCisgICAgICogQHJldHVybnMgdGhl
IHdlYkdMIHVuaWZvcm0gYnVmZmVyCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5jcmVh
dGVEeW5hbWljVW5pZm9ybUJ1ZmZlciA9IGZ1bmN0aW9uIChlbGVtZW50cykgeworICAgICAgICB2
YXIgdWJvID0gdGhpcy5fZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgICAgIGlmICghdWJvKSB7Cisg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgZHluYW1pYyB1bmlm
b3JtIGJ1ZmZlciIpOworICAgICAgICB9CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgX01lc2hl
c19XZWJHTF93ZWJHTERhdGFCdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIldl
YkdMRGF0YUJ1ZmZlciJdKHVibyk7CisgICAgICAgIHRoaXMuYmluZFVuaWZvcm1CdWZmZXIocmVz
dWx0KTsKKyAgICAgICAgaWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSB7Cisg
ICAgICAgICAgICB0aGlzLl9nbC5idWZmZXJEYXRhKHRoaXMuX2dsLlVOSUZPUk1fQlVGRkVSLCBl
bGVtZW50cywgdGhpcy5fZ2wuRFlOQU1JQ19EUkFXKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmJ1ZmZlckRhdGEodGhpcy5fZ2wuVU5JRk9STV9CVUZG
RVIsIG5ldyBGbG9hdDMyQXJyYXkoZWxlbWVudHMpLCB0aGlzLl9nbC5EWU5BTUlDX0RSQVcpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuYmluZFVuaWZvcm1CdWZmZXIobnVsbCk7CisgICAgICAg
IHJlc3VsdC5yZWZlcmVuY2VzID0gMTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFVwZGF0ZSBhbiBleGlzdGluZyB1bmlmb3JtIGJ1ZmZlcgorICAgICAq
IEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL3dlYmdsMiN1bmlmb3JtLWJ1
ZmZlci1vYmpldHMKKyAgICAgKiBAcGFyYW0gdW5pZm9ybUJ1ZmZlciBkZWZpbmVzIHRoZSB0YXJn
ZXQgdW5pZm9ybSBidWZmZXIKKyAgICAgKiBAcGFyYW0gZWxlbWVudHMgZGVmaW5lcyB0aGUgY29u
dGVudCB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gb2Zmc2V0IGRlZmluZXMgdGhlIG9mZnNldCBp
biB0aGUgdW5pZm9ybSBidWZmZXIgd2hlcmUgdXBkYXRlIHNob3VsZCBzdGFydAorICAgICAqIEBw
YXJhbSBjb3VudCBkZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBkYXRhIHRvIHVwZGF0ZQorICAgICAq
LworICAgIEVuZ2luZS5wcm90b3R5cGUudXBkYXRlVW5pZm9ybUJ1ZmZlciA9IGZ1bmN0aW9uICh1
bmlmb3JtQnVmZmVyLCBlbGVtZW50cywgb2Zmc2V0LCBjb3VudCkgeworICAgICAgICB0aGlzLmJp
bmRVbmlmb3JtQnVmZmVyKHVuaWZvcm1CdWZmZXIpOworICAgICAgICBpZiAob2Zmc2V0ID09PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGNvdW50ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50cyBpbnN0
YW5jZW9mIEZsb2F0MzJBcnJheSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2dsLmJ1ZmZlclN1
YkRhdGEodGhpcy5fZ2wuVU5JRk9STV9CVUZGRVIsIG9mZnNldCwgZWxlbWVudHMpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZ2wuYnVm
ZmVyU3ViRGF0YSh0aGlzLl9nbC5VTklGT1JNX0JVRkZFUiwgb2Zmc2V0LCBuZXcgRmxvYXQzMkFy
cmF5KGVsZW1lbnRzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9nbC5idWZmZXJTdWJEYXRhKHRoaXMuX2dsLlVOSUZPUk1fQlVG
RkVSLCAwLCBlbGVtZW50cy5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGNvdW50KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9nbC5i
dWZmZXJTdWJEYXRhKHRoaXMuX2dsLlVOSUZPUk1fQlVGRkVSLCAwLCBuZXcgRmxvYXQzMkFycmF5
KGVsZW1lbnRzKS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGNvdW50KSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5iaW5kVW5pZm9ybUJ1ZmZlcihudWxsKTsKKyAg
ICB9OworICAgIC8vIFZCT3MKKyAgICBFbmdpbmUucHJvdG90eXBlLl9yZXNldFZlcnRleEJ1ZmZl
ckJpbmRpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuYmluZEFycmF5QnVmZmVyKG51
bGwpOworICAgICAgICB0aGlzLl9jYWNoZWRWZXJ0ZXhCdWZmZXJzID0gbnVsbDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSB2ZXJ0ZXggYnVmZmVyCisgICAgICogQHBhcmFtIGRh
dGEgdGhlIGRhdGEgZm9yIHRoZSB2ZXJ0ZXggYnVmZmVyCisgICAgICogQHJldHVybnMgdGhlIG5l
dyBXZWJHTCBzdGF0aWMgYnVmZmVyCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5jcmVh
dGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB2YXIgdmJvID0gdGhp
cy5fZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgICAgIGlmICghdmJvKSB7CisgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgdmVydGV4IGJ1ZmZlciIpOworICAgICAg
ICB9CisgICAgICAgIHZhciBkYXRhQnVmZmVyID0gbmV3IF9NZXNoZXNfV2ViR0xfd2ViR0xEYXRh
QnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJXZWJHTERhdGFCdWZmZXIiXSh2
Ym8pOworICAgICAgICB0aGlzLmJpbmRBcnJheUJ1ZmZlcihkYXRhQnVmZmVyKTsKKyAgICAgICAg
aWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgdGhpcy5fZ2wuYnVmZmVy
RGF0YSh0aGlzLl9nbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoZGF0YSksIHRoaXMu
X2dsLlNUQVRJQ19EUkFXKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHRoaXMuX2dsLmJ1ZmZlckRhdGEodGhpcy5fZ2wuQVJSQVlfQlVGRkVSLCBkYXRhLCB0aGlzLl9n
bC5TVEFUSUNfRFJBVyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVzZXRWZXJ0ZXhCdWZm
ZXJCaW5kaW5nKCk7CisgICAgICAgIGRhdGFCdWZmZXIucmVmZXJlbmNlcyA9IDE7CisgICAgICAg
IHJldHVybiBkYXRhQnVmZmVyOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGR5
bmFtaWMgdmVydGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBkYXRhIHRoZSBkYXRhIGZvciB0aGUg
ZHluYW1pYyB2ZXJ0ZXggYnVmZmVyCisgICAgICogQHJldHVybnMgdGhlIG5ldyBXZWJHTCBkeW5h
bWljIGJ1ZmZlcgorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuY3JlYXRlRHluYW1pY1Zl
cnRleEJ1ZmZlciA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIHZhciB2Ym8gPSB0aGlzLl9n
bC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgaWYgKCF2Ym8pIHsKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBkeW5hbWljIHZlcnRleCBidWZmZXIiKTsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IF9NZXNoZXNfV2ViR0xfd2ViR0xEYXRh
QnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJXZWJHTERhdGFCdWZmZXIiXSh2
Ym8pOworICAgICAgICB0aGlzLmJpbmRBcnJheUJ1ZmZlcihyZXN1bHQpOworICAgICAgICBpZiAo
ZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICB0aGlzLl9nbC5idWZmZXJEYXRh
KHRoaXMuX2dsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShkYXRhKSwgdGhpcy5fZ2wu
RFlOQU1JQ19EUkFXKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRo
aXMuX2dsLmJ1ZmZlckRhdGEodGhpcy5fZ2wuQVJSQVlfQlVGRkVSLCBkYXRhLCB0aGlzLl9nbC5E
WU5BTUlDX0RSQVcpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Jlc2V0VmVydGV4QnVmZmVy
QmluZGluZygpOworICAgICAgICByZXN1bHQucmVmZXJlbmNlcyA9IDE7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgYSBkeW5hbWljIGluZGV4
IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBpbmRleEJ1ZmZlciBkZWZpbmVzIHRoZSB0YXJnZXQgaW5k
ZXggYnVmZmVyCisgICAgICogQHBhcmFtIGluZGljZXMgZGVmaW5lcyB0aGUgZGF0YSB0byB1cGRh
dGUKKyAgICAgKiBAcGFyYW0gb2Zmc2V0IGRlZmluZXMgdGhlIG9mZnNldCBpbiB0aGUgdGFyZ2V0
IGluZGV4IGJ1ZmZlciB3aGVyZSB1cGRhdGUgc2hvdWxkIHN0YXJ0CisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS51cGRhdGVEeW5hbWljSW5kZXhCdWZmZXIgPSBmdW5jdGlvbiAoaW5kZXhC
dWZmZXIsIGluZGljZXMsIG9mZnNldCkgeworICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDAp
IHsgb2Zmc2V0ID0gMDsgfQorICAgICAgICAvLyBGb3JjZSBjYWNoZSB1cGRhdGUKKyAgICAgICAg
dGhpcy5fY3VycmVudEJvdW5kQnVmZmVyW3RoaXMuX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSXSA9
IG51bGw7CisgICAgICAgIHRoaXMuYmluZEluZGV4QnVmZmVyKGluZGV4QnVmZmVyKTsKKyAgICAg
ICAgdmFyIGFycmF5QnVmZmVyOworICAgICAgICBpZiAoaW5kaWNlcyBpbnN0YW5jZW9mIFVpbnQx
NkFycmF5IHx8IGluZGljZXMgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkgeworICAgICAgICAgICAg
YXJyYXlCdWZmZXIgPSBpbmRpY2VzOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYXJyYXlCdWZmZXIgPSBpbmRleEJ1ZmZlci5pczMyQml0cyA/IG5ldyBVaW50MzJBcnJh
eShpbmRpY2VzKSA6IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9nbC5idWZmZXJEYXRhKHRoaXMuX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBhcnJh
eUJ1ZmZlciwgdGhpcy5fZ2wuRFlOQU1JQ19EUkFXKTsKKyAgICAgICAgdGhpcy5fcmVzZXRJbmRl
eEJ1ZmZlckJpbmRpbmcoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgYSBkeW5h
bWljIHZlcnRleCBidWZmZXIuCisgICAgICogQHBhcmFtIHZlcnRleEJ1ZmZlciB0aGUgdmVydGV4
IGJ1ZmZlciB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSB1c2VkIHRvIHVw
ZGF0ZSB0aGUgdmVydGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBieXRlT2Zmc2V0IHRoZSBieXRl
IG9mZnNldCBvZiB0aGUgZGF0YQorICAgICAqIEBwYXJhbSBieXRlTGVuZ3RoIHRoZSBieXRlIGxl
bmd0aCBvZiB0aGUgZGF0YQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUudXBkYXRlRHlu
YW1pY1ZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uICh2ZXJ0ZXhCdWZmZXIsIGRhdGEsIGJ5dGVPZmZz
ZXQsIGJ5dGVMZW5ndGgpIHsKKyAgICAgICAgdGhpcy5iaW5kQXJyYXlCdWZmZXIodmVydGV4QnVm
ZmVyKTsKKyAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgYnl0ZU9mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ5dGVMZW5ndGggPT09
IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX2dsLmJ1ZmZlclN1YkRhdGEodGhpcy5fZ2wuQVJSQVlfQlVG
RkVSLCBieXRlT2Zmc2V0LCBuZXcgRmxvYXQzMkFycmF5KGRhdGEpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX2dsLmJ1ZmZlclN1YkRh
dGEodGhpcy5fZ2wuQVJSQVlfQlVGRkVSLCBieXRlT2Zmc2V0LCBkYXRhKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChkYXRhIGluc3Rh
bmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9nbC5idWZmZXJTdWJEYXRhKHRo
aXMuX2dsLkFSUkFZX0JVRkZFUiwgMCwgbmV3IEZsb2F0MzJBcnJheShkYXRhKS5zdWJhcnJheShi
eXRlT2Zmc2V0LCBieXRlT2Zmc2V0ICsgYnl0ZUxlbmd0aCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJh
eUJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0
YSwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXko
ZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl9nbC5idWZmZXJTdWJEYXRh
KHRoaXMuX2dsLkFSUkFZX0JVRkZFUiwgMCwgZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fcmVzZXRWZXJ0ZXhCdWZmZXJCaW5kaW5nKCk7CisgICAgfTsKKyAg
ICBFbmdpbmUucHJvdG90eXBlLl9yZXNldEluZGV4QnVmZmVyQmluZGluZyA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdGhpcy5iaW5kSW5kZXhCdWZmZXIobnVsbCk7CisgICAgICAgIHRoaXMuX2Nh
Y2hlZEluZGV4QnVmZmVyID0gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgaW5kZXggYnVmZmVyCisgICAgICogQHBhcmFtIGluZGljZXMgZGVmaW5lcyB0aGUgY29u
dGVudCBvZiB0aGUgaW5kZXggYnVmZmVyCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVz
IGlmIHRoZSBpbmRleCBidWZmZXIgbXVzdCBiZSB1cGRhdGFibGUKKyAgICAgKiBAcmV0dXJucyBh
IG5ldyB3ZWJHTCBidWZmZXIKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmNyZWF0ZUlu
ZGV4QnVmZmVyID0gZnVuY3Rpb24gKGluZGljZXMsIHVwZGF0YWJsZSkgeworICAgICAgICB2YXIg
dmJvID0gdGhpcy5fZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgICAgIHZhciBkYXRhQnVmZmVyID0g
bmV3IF9NZXNoZXNfV2ViR0xfd2ViR0xEYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xNF9fWyJXZWJHTERhdGFCdWZmZXIiXSh2Ym8pOworICAgICAgICBpZiAoIXZibykgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGJ1ZmZlciIp
OworICAgICAgICB9CisgICAgICAgIHRoaXMuYmluZEluZGV4QnVmZmVyKGRhdGFCdWZmZXIpOwor
ICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX25vcm1hbGl6ZUluZGV4RGF0YShpbmRpY2VzKTsKKyAg
ICAgICAgdGhpcy5fZ2wuYnVmZmVyRGF0YSh0aGlzLl9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwg
ZGF0YSwgdXBkYXRhYmxlID8gdGhpcy5fZ2wuRFlOQU1JQ19EUkFXIDogdGhpcy5fZ2wuU1RBVElD
X0RSQVcpOworICAgICAgICB0aGlzLl9yZXNldEluZGV4QnVmZmVyQmluZGluZygpOworICAgICAg
ICBkYXRhQnVmZmVyLnJlZmVyZW5jZXMgPSAxOworICAgICAgICBkYXRhQnVmZmVyLmlzMzJCaXRz
ID0gKGRhdGEuQllURVNfUEVSX0VMRU1FTlQgPT09IDQpOworICAgICAgICByZXR1cm4gZGF0YUJ1
ZmZlcjsKKyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX25vcm1hbGl6ZUluZGV4RGF0YSA9
IGZ1bmN0aW9uIChpbmRpY2VzKSB7CisgICAgICAgIGlmIChpbmRpY2VzIGluc3RhbmNlb2YgVWlu
dDE2QXJyYXkpIHsKKyAgICAgICAgICAgIHJldHVybiBpbmRpY2VzOworICAgICAgICB9CisgICAg
ICAgIC8vIENoZWNrIDMyIGJpdCBzdXBwb3J0CisgICAgICAgIGlmICh0aGlzLl9jYXBzLnVpbnRJ
bmRpY2VzKSB7CisgICAgICAgICAgICBpZiAoaW5kaWNlcyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGljZXM7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBudW1iZXJbXSBvciBJbnQzMkFycmF5
LCBjaGVjayBpZiAzMiBiaXQgaXMgbmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IGluZGljZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpbmRpY2VzW2luZGV4XSA+PSA2NTUzNSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyBVaW50MzJBcnJheShpbmRpY2VzKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVp
bnQxNkFycmF5KGluZGljZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IE5vIDMyIGJpdCBzdXBwb3J0LCBmb3JjZSBjb252ZXJzaW9uIHRvIDE2IGJpdCAodmFsdWVzIGdy
ZWF0ZXIgMTYgYml0IGFyZSBsb3N0KQorICAgICAgICByZXR1cm4gbmV3IFVpbnQxNkFycmF5KGlu
ZGljZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogQmluZCBhIHdlYkdMIGJ1ZmZlciB0byB0
aGUgd2ViR0wgY29udGV4dAorICAgICAqIEBwYXJhbSBidWZmZXIgZGVmaW5lcyB0aGUgYnVmZmVy
IHRvIGJpbmQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmJpbmRBcnJheUJ1ZmZlciA9
IGZ1bmN0aW9uIChidWZmZXIpIHsKKyAgICAgICAgaWYgKCF0aGlzLl92YW9SZWNvcmRJblByb2dy
ZXNzKSB7CisgICAgICAgICAgICB0aGlzLl91bmJpbmRWZXJ0ZXhBcnJheU9iamVjdCgpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuYmluZEJ1ZmZlcihidWZmZXIsIHRoaXMuX2dsLkFSUkFZX0JV
RkZFUik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kIGFuIHVuaWZvcm0gYnVmZmVyIHRv
IHRoZSBjdXJyZW50IHdlYkdMIGNvbnRleHQKKyAgICAgKiBAcGFyYW0gYnVmZmVyIGRlZmluZXMg
dGhlIGJ1ZmZlciB0byBiaW5kCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5iaW5kVW5p
Zm9ybUJ1ZmZlciA9IGZ1bmN0aW9uIChidWZmZXIpIHsKKyAgICAgICAgdGhpcy5fZ2wuYmluZEJ1
ZmZlcih0aGlzLl9nbC5VTklGT1JNX0JVRkZFUiwgYnVmZmVyID8gYnVmZmVyLnVuZGVybHlpbmdS
ZXNvdXJjZSA6IG51bGwpOworICAgIH07CisgICAgLyoqCisgICAgICogQmluZCBhIGJ1ZmZlciB0
byB0aGUgY3VycmVudCB3ZWJHTCBjb250ZXh0IGF0IGEgZ2l2ZW4gbG9jYXRpb24KKyAgICAgKiBA
cGFyYW0gYnVmZmVyIGRlZmluZXMgdGhlIGJ1ZmZlciB0byBiaW5kCisgICAgICogQHBhcmFtIGxv
Y2F0aW9uIGRlZmluZXMgdGhlIGluZGV4IHdoZXJlIHRvIGJpbmQgdGhlIGJ1ZmZlcgorICAgICAq
IEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHVuaWZvcm0gdmFyaWFibGUgdG8gYmluZAorICAgICAq
LworICAgIEVuZ2luZS5wcm90b3R5cGUuYmluZFVuaWZvcm1CdWZmZXJCYXNlID0gZnVuY3Rpb24g
KGJ1ZmZlciwgbG9jYXRpb24sIG5hbWUpIHsKKyAgICAgICAgdGhpcy5fZ2wuYmluZEJ1ZmZlckJh
c2UodGhpcy5fZ2wuVU5JRk9STV9CVUZGRVIsIGxvY2F0aW9uLCBidWZmZXIgPyBidWZmZXIudW5k
ZXJseWluZ1Jlc291cmNlIDogbnVsbCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kIGEg
c3BlY2lmaWMgYmxvY2sgYXQgYSBnaXZlbiBpbmRleCBpbiBhIHNwZWNpZmljIHNoYWRlciBwcm9n
cmFtCisgICAgICogQHBhcmFtIHBpcGVsaW5lQ29udGV4dCBkZWZpbmVzIHRoZSBwaXBlbGluZSBj
b250ZXh0IHRvIHVzZQorICAgICAqIEBwYXJhbSBibG9ja05hbWUgZGVmaW5lcyB0aGUgYmxvY2sg
bmFtZQorICAgICAqIEBwYXJhbSBpbmRleCBkZWZpbmVzIHRoZSBpbmRleCB3aGVyZSB0byBiaW5k
IHRoZSBibG9jaworICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuYmluZFVuaWZvcm1CbG9j
ayA9IGZ1bmN0aW9uIChwaXBlbGluZUNvbnRleHQsIGJsb2NrTmFtZSwgaW5kZXgpIHsKKyAgICAg
ICAgdmFyIHByb2dyYW0gPSBwaXBlbGluZUNvbnRleHQucHJvZ3JhbTsKKyAgICAgICAgdmFyIHVu
aWZvcm1Mb2NhdGlvbiA9IHRoaXMuX2dsLmdldFVuaWZvcm1CbG9ja0luZGV4KHByb2dyYW0sIGJs
b2NrTmFtZSk7CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm1CbG9ja0JpbmRpbmcocHJvZ3JhbSwg
dW5pZm9ybUxvY2F0aW9uLCBpbmRleCk7CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLmJp
bmRJbmRleEJ1ZmZlciA9IGZ1bmN0aW9uIChidWZmZXIpIHsKKyAgICAgICAgaWYgKCF0aGlzLl92
YW9SZWNvcmRJblByb2dyZXNzKSB7CisgICAgICAgICAgICB0aGlzLl91bmJpbmRWZXJ0ZXhBcnJh
eU9iamVjdCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuYmluZEJ1ZmZlcihidWZmZXIsIHRo
aXMuX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSKTsKKyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5
cGUuYmluZEJ1ZmZlciA9IGZ1bmN0aW9uIChidWZmZXIsIHRhcmdldCkgeworICAgICAgICBpZiAo
dGhpcy5fdmFvUmVjb3JkSW5Qcm9ncmVzcyB8fCB0aGlzLl9jdXJyZW50Qm91bmRCdWZmZXJbdGFy
Z2V0XSAhPT0gYnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9nbC5iaW5kQnVmZmVyKHRhcmdl
dCwgYnVmZmVyID8gYnVmZmVyLnVuZGVybHlpbmdSZXNvdXJjZSA6IG51bGwpOworICAgICAgICAg
ICAgdGhpcy5fY3VycmVudEJvdW5kQnVmZmVyW3RhcmdldF0gPSBidWZmZXI7CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKgorICAgICAqIHVwZGF0ZSB0aGUgYm91bmQgYnVmZmVyIHdpdGggdGhl
IGdpdmVuIGRhdGEKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHRvIHVwZGF0
ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUudXBkYXRlQXJyYXlCdWZmZXIgPSBmdW5j
dGlvbiAoZGF0YSkgeworICAgICAgICB0aGlzLl9nbC5idWZmZXJTdWJEYXRhKHRoaXMuX2dsLkFS
UkFZX0JVRkZFUiwgMCwgZGF0YSk7CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl92ZXJ0
ZXhBdHRyaWJQb2ludGVyID0gZnVuY3Rpb24gKGJ1ZmZlciwgaW5keCwgc2l6ZSwgdHlwZSwgbm9y
bWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpIHsKKyAgICAgICAgdmFyIHBvaW50ZXIgPSB0aGlzLl9j
dXJyZW50QnVmZmVyUG9pbnRlcnNbaW5keF07CisgICAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7
CisgICAgICAgIGlmICghcG9pbnRlci5hY3RpdmUpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgcG9pbnRlci5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgcG9p
bnRlci5pbmRleCA9IGluZHg7CisgICAgICAgICAgICBwb2ludGVyLnNpemUgPSBzaXplOworICAg
ICAgICAgICAgcG9pbnRlci50eXBlID0gdHlwZTsKKyAgICAgICAgICAgIHBvaW50ZXIubm9ybWFs
aXplZCA9IG5vcm1hbGl6ZWQ7CisgICAgICAgICAgICBwb2ludGVyLnN0cmlkZSA9IHN0cmlkZTsK
KyAgICAgICAgICAgIHBvaW50ZXIub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgcG9pbnRl
ci5idWZmZXIgPSBidWZmZXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBpZiAocG9pbnRlci5idWZmZXIgIT09IGJ1ZmZlcikgeworICAgICAgICAgICAgICAgIHBvaW50
ZXIuYnVmZmVyID0gYnVmZmVyOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvaW50ZXIuc2l6ZSAhPT0gc2l6ZSkgeworICAg
ICAgICAgICAgICAgIHBvaW50ZXIuc2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAgY2hhbmdl
ZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9pbnRlci50eXBlICE9
PSB0eXBlKSB7CisgICAgICAgICAgICAgICAgcG9pbnRlci50eXBlID0gdHlwZTsKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChw
b2ludGVyLm5vcm1hbGl6ZWQgIT09IG5vcm1hbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICBwb2lu
dGVyLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvaW50ZXIuc3RyaWRlICE9PSBz
dHJpZGUpIHsKKyAgICAgICAgICAgICAgICBwb2ludGVyLnN0cmlkZSA9IHN0cmlkZTsKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChwb2ludGVyLm9mZnNldCAhPT0gb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgcG9pbnRlci5v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoYW5nZWQgfHwgdGhpcy5fdmFvUmVjb3Jk
SW5Qcm9ncmVzcykgeworICAgICAgICAgICAgdGhpcy5iaW5kQXJyYXlCdWZmZXIoYnVmZmVyKTsK
KyAgICAgICAgICAgIHRoaXMuX2dsLnZlcnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlw
ZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpOworICAgICAgICB9CisgICAgfTsKKyAgICBF
bmdpbmUucHJvdG90eXBlLl9iaW5kSW5kZXhCdWZmZXJXaXRoQ2FjaGUgPSBmdW5jdGlvbiAoaW5k
ZXhCdWZmZXIpIHsKKyAgICAgICAgaWYgKGluZGV4QnVmZmVyID09IG51bGwpIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY2FjaGVkSW5kZXhCdWZm
ZXIgIT09IGluZGV4QnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWRJbmRleEJ1ZmZl
ciA9IGluZGV4QnVmZmVyOworICAgICAgICAgICAgdGhpcy5iaW5kSW5kZXhCdWZmZXIoaW5kZXhC
dWZmZXIpOworICAgICAgICAgICAgdGhpcy5fdWludEluZGljZXNDdXJyZW50bHlTZXQgPSBpbmRl
eEJ1ZmZlci5pczMyQml0czsKKyAgICAgICAgfQorICAgIH07CisgICAgRW5naW5lLnByb3RvdHlw
ZS5fYmluZFZlcnRleEJ1ZmZlcnNBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHZlcnRleEJ1ZmZlcnMs
IGVmZmVjdCkgeworICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGVmZmVjdC5nZXRBdHRyaWJ1dGVz
TmFtZXMoKTsKKyAgICAgICAgaWYgKCF0aGlzLl92YW9SZWNvcmRJblByb2dyZXNzKSB7CisgICAg
ICAgICAgICB0aGlzLl91bmJpbmRWZXJ0ZXhBcnJheU9iamVjdCgpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMudW5iaW5kQWxsQXR0cmlidXRlcygpOworICAgICAgICBmb3IgKHZhciBpbmRleCA9
IDA7IGluZGV4IDwgYXR0cmlidXRlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZh
ciBvcmRlciA9IGVmZmVjdC5nZXRBdHRyaWJ1dGVMb2NhdGlvbihpbmRleCk7CisgICAgICAgICAg
ICBpZiAob3JkZXIgPj0gMCkgeworICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB2
ZXJ0ZXhCdWZmZXJzW2F0dHJpYnV0ZXNbaW5kZXhdXTsKKyAgICAgICAgICAgICAgICBpZiAoIXZl
cnRleEJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5fZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
b3JkZXIpOworICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdmFvUmVjb3JkSW5Qcm9ncmVzcykg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJBcnJheXNFbmFibGVkW29y
ZGVyXSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBidWZm
ZXIgPSB2ZXJ0ZXhCdWZmZXIuZ2V0QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZl
cikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJQb2ludGVyKGJ1ZmZl
ciwgb3JkZXIsIHZlcnRleEJ1ZmZlci5nZXRTaXplKCksIHZlcnRleEJ1ZmZlci50eXBlLCB2ZXJ0
ZXhCdWZmZXIubm9ybWFsaXplZCwgdmVydGV4QnVmZmVyLmJ5dGVTdHJpZGUsIHZlcnRleEJ1ZmZl
ci5ieXRlT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnRleEJ1ZmZlci5nZXRJ
c0luc3RhbmNlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nbC52ZXJ0ZXhB
dHRyaWJEaXZpc29yKG9yZGVyLCB2ZXJ0ZXhCdWZmZXIuZ2V0SW5zdGFuY2VEaXZpc29yKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl92YW9SZWNvcmRJblByb2dyZXNzKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEluc3RhbmNlTG9jYXRp
b25zLnB1c2gob3JkZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJl
bnRJbnN0YW5jZUJ1ZmZlcnMucHVzaChidWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWNvcmRzIGEgdmVydGV4IGFy
cmF5IG9iamVjdAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVz
L3dlYmdsMiN2ZXJ0ZXgtYXJyYXktb2JqZWN0cworICAgICAqIEBwYXJhbSB2ZXJ0ZXhCdWZmZXJz
IGRlZmluZXMgdGhlIGxpc3Qgb2YgdmVydGV4IGJ1ZmZlcnMgdG8gc3RvcmUKKyAgICAgKiBAcGFy
YW0gaW5kZXhCdWZmZXIgZGVmaW5lcyB0aGUgaW5kZXggYnVmZmVyIHRvIHN0b3JlCisgICAgICog
QHBhcmFtIGVmZmVjdCBkZWZpbmVzIHRoZSBlZmZlY3QgdG8gc3RvcmUKKyAgICAgKiBAcmV0dXJu
cyB0aGUgbmV3IHZlcnRleCBhcnJheSBvYmplY3QKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90
eXBlLnJlY29yZFZlcnRleEFycmF5T2JqZWN0ID0gZnVuY3Rpb24gKHZlcnRleEJ1ZmZlcnMsIGlu
ZGV4QnVmZmVyLCBlZmZlY3QpIHsKKyAgICAgICAgdmFyIHZhbyA9IHRoaXMuX2dsLmNyZWF0ZVZl
cnRleEFycmF5KCk7CisgICAgICAgIHRoaXMuX3Zhb1JlY29yZEluUHJvZ3Jlc3MgPSB0cnVlOwor
ICAgICAgICB0aGlzLl9nbC5iaW5kVmVydGV4QXJyYXkodmFvKTsKKyAgICAgICAgdGhpcy5fbXVz
dFdpcGVWZXJ0ZXhBdHRyaWJ1dGVzID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fYmluZFZlcnRleEJ1
ZmZlcnNBdHRyaWJ1dGVzKHZlcnRleEJ1ZmZlcnMsIGVmZmVjdCk7CisgICAgICAgIHRoaXMuYmlu
ZEluZGV4QnVmZmVyKGluZGV4QnVmZmVyKTsKKyAgICAgICAgdGhpcy5fdmFvUmVjb3JkSW5Qcm9n
cmVzcyA9IGZhbHNlOworICAgICAgICB0aGlzLl9nbC5iaW5kVmVydGV4QXJyYXkobnVsbCk7Cisg
ICAgICAgIHJldHVybiB2YW87CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kIGEgc3BlY2lm
aWMgdmVydGV4IGFycmF5IG9iamVjdAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2ZlYXR1cmVzL3dlYmdsMiN2ZXJ0ZXgtYXJyYXktb2JqZWN0cworICAgICAqIEBwYXJhbSB2
ZXJ0ZXhBcnJheU9iamVjdCBkZWZpbmVzIHRoZSB2ZXJ0ZXggYXJyYXkgb2JqZWN0IHRvIGJpbmQK
KyAgICAgKiBAcGFyYW0gaW5kZXhCdWZmZXIgZGVmaW5lcyB0aGUgaW5kZXggYnVmZmVyIHRvIGJp
bmQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmJpbmRWZXJ0ZXhBcnJheU9iamVjdCA9
IGZ1bmN0aW9uICh2ZXJ0ZXhBcnJheU9iamVjdCwgaW5kZXhCdWZmZXIpIHsKKyAgICAgICAgaWYg
KHRoaXMuX2NhY2hlZFZlcnRleEFycmF5T2JqZWN0ICE9PSB2ZXJ0ZXhBcnJheU9iamVjdCkgewor
ICAgICAgICAgICAgdGhpcy5fY2FjaGVkVmVydGV4QXJyYXlPYmplY3QgPSB2ZXJ0ZXhBcnJheU9i
amVjdDsKKyAgICAgICAgICAgIHRoaXMuX2dsLmJpbmRWZXJ0ZXhBcnJheSh2ZXJ0ZXhBcnJheU9i
amVjdCk7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWRWZXJ0ZXhCdWZmZXJzID0gbnVsbDsKKyAg
ICAgICAgICAgIHRoaXMuX2NhY2hlZEluZGV4QnVmZmVyID0gbnVsbDsKKyAgICAgICAgICAgIHRo
aXMuX3VpbnRJbmRpY2VzQ3VycmVudGx5U2V0ID0gaW5kZXhCdWZmZXIgIT0gbnVsbCAmJiBpbmRl
eEJ1ZmZlci5pczMyQml0czsKKyAgICAgICAgICAgIHRoaXMuX211c3RXaXBlVmVydGV4QXR0cmli
dXRlcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmQgd2Vi
R2wgYnVmZmVycyBkaXJlY3RseSB0byB0aGUgd2ViR0wgY29udGV4dAorICAgICAqIEBwYXJhbSB2
ZXJ0ZXhCdWZmZXIgZGVmaW5lcyB0aGUgdmVydGV4IGJ1ZmZlciB0byBiaW5kCisgICAgICogQHBh
cmFtIGluZGV4QnVmZmVyIGRlZmluZXMgdGhlIGluZGV4IGJ1ZmZlciB0byBiaW5kCisgICAgICog
QHBhcmFtIHZlcnRleERlY2xhcmF0aW9uIGRlZmluZXMgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiB0
byB1c2Ugd2l0aCB0aGUgdmVydGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSB2ZXJ0ZXhTdHJpZGVT
aXplIGRlZmluZXMgdGhlIHZlcnRleCBzdHJpZGUgb2YgdGhlIHZlcnRleCBidWZmZXIKKyAgICAg
KiBAcGFyYW0gZWZmZWN0IGRlZmluZXMgdGhlIGVmZmVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHZl
cnRleCBidWZmZXIKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmJpbmRCdWZmZXJzRGly
ZWN0bHkgPSBmdW5jdGlvbiAodmVydGV4QnVmZmVyLCBpbmRleEJ1ZmZlciwgdmVydGV4RGVjbGFy
YXRpb24sIHZlcnRleFN0cmlkZVNpemUsIGVmZmVjdCkgeworICAgICAgICBpZiAodGhpcy5fY2Fj
aGVkVmVydGV4QnVmZmVycyAhPT0gdmVydGV4QnVmZmVyIHx8IHRoaXMuX2NhY2hlZEVmZmVjdEZv
clZlcnRleEJ1ZmZlcnMgIT09IGVmZmVjdCkgeworICAgICAgICAgICAgdGhpcy5fY2FjaGVkVmVy
dGV4QnVmZmVycyA9IHZlcnRleEJ1ZmZlcjsKKyAgICAgICAgICAgIHRoaXMuX2NhY2hlZEVmZmVj
dEZvclZlcnRleEJ1ZmZlcnMgPSBlZmZlY3Q7CisgICAgICAgICAgICB2YXIgYXR0cmlidXRlc0Nv
dW50ID0gZWZmZWN0LmdldEF0dHJpYnV0ZXNDb3VudCgpOworICAgICAgICAgICAgdGhpcy5fdW5i
aW5kVmVydGV4QXJyYXlPYmplY3QoKTsKKyAgICAgICAgICAgIHRoaXMudW5iaW5kQWxsQXR0cmli
dXRlcygpOworICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7CisgICAgICAgICAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgYXR0cmlidXRlc0NvdW50OyBpbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGluZGV4IDwgdmVydGV4RGVjbGFyYXRpb24ubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBvcmRlciA9IGVmZmVjdC5nZXRBdHRyaWJ1dGVMb2NhdGlvbihpbmRl
eCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvcmRlciA+PSAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShvcmRlcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJBcnJheXNFbmFibGVkW29yZGVy
XSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJQb2lu
dGVyKHZlcnRleEJ1ZmZlciwgb3JkZXIsIHZlcnRleERlY2xhcmF0aW9uW2luZGV4XSwgdGhpcy5f
Z2wuRkxPQVQsIGZhbHNlLCB2ZXJ0ZXhTdHJpZGVTaXplLCBvZmZzZXQpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB2ZXJ0ZXhEZWNsYXJhdGlv
bltpbmRleF0gKiA0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICB0aGlzLl9iaW5kSW5kZXhCdWZmZXJXaXRoQ2FjaGUoaW5kZXhCdWZmZXIpOwor
ICAgIH07CisgICAgRW5naW5lLnByb3RvdHlwZS5fdW5iaW5kVmVydGV4QXJyYXlPYmplY3QgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fY2FjaGVkVmVydGV4QXJyYXlPYmplY3Qp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYWNoZWRW
ZXJ0ZXhBcnJheU9iamVjdCA9IG51bGw7CisgICAgICAgIHRoaXMuX2dsLmJpbmRWZXJ0ZXhBcnJh
eShudWxsKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmQgYSBsaXN0IG9mIHZlcnRleCBi
dWZmZXJzIHRvIHRoZSB3ZWJHTCBjb250ZXh0CisgICAgICogQHBhcmFtIHZlcnRleEJ1ZmZlcnMg
ZGVmaW5lcyB0aGUgbGlzdCBvZiB2ZXJ0ZXggYnVmZmVycyB0byBiaW5kCisgICAgICogQHBhcmFt
IGluZGV4QnVmZmVyIGRlZmluZXMgdGhlIGluZGV4IGJ1ZmZlciB0byBiaW5kCisgICAgICogQHBh
cmFtIGVmZmVjdCBkZWZpbmVzIHRoZSBlZmZlY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSB2ZXJ0ZXgg
YnVmZmVycworICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuYmluZEJ1ZmZlcnMgPSBmdW5j
dGlvbiAodmVydGV4QnVmZmVycywgaW5kZXhCdWZmZXIsIGVmZmVjdCkgeworICAgICAgICBpZiAo
dGhpcy5fY2FjaGVkVmVydGV4QnVmZmVycyAhPT0gdmVydGV4QnVmZmVycyB8fCB0aGlzLl9jYWNo
ZWRFZmZlY3RGb3JWZXJ0ZXhCdWZmZXJzICE9PSBlZmZlY3QpIHsKKyAgICAgICAgICAgIHRoaXMu
X2NhY2hlZFZlcnRleEJ1ZmZlcnMgPSB2ZXJ0ZXhCdWZmZXJzOworICAgICAgICAgICAgdGhpcy5f
Y2FjaGVkRWZmZWN0Rm9yVmVydGV4QnVmZmVycyA9IGVmZmVjdDsKKyAgICAgICAgICAgIHRoaXMu
X2JpbmRWZXJ0ZXhCdWZmZXJzQXR0cmlidXRlcyh2ZXJ0ZXhCdWZmZXJzLCBlZmZlY3QpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2JpbmRJbmRleEJ1ZmZlcldpdGhDYWNoZShpbmRleEJ1ZmZl
cik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVbmJpbmQgYWxsIGluc3RhbmNlIGF0dHJpYnV0
ZXMKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnVuYmluZEluc3RhbmNlQXR0cmlidXRl
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGJvdW5kQnVmZmVyOworICAgICAgICBmb3Ig
KHZhciBpID0gMCwgdWwgPSB0aGlzLl9jdXJyZW50SW5zdGFuY2VMb2NhdGlvbnMubGVuZ3RoOyBp
IDwgdWw7IGkrKykgeworICAgICAgICAgICAgdmFyIGluc3RhbmNlc0J1ZmZlciA9IHRoaXMuX2N1
cnJlbnRJbnN0YW5jZUJ1ZmZlcnNbaV07CisgICAgICAgICAgICBpZiAoYm91bmRCdWZmZXIgIT0g
aW5zdGFuY2VzQnVmZmVyICYmIGluc3RhbmNlc0J1ZmZlci5yZWZlcmVuY2VzKSB7CisgICAgICAg
ICAgICAgICAgYm91bmRCdWZmZXIgPSBpbnN0YW5jZXNCdWZmZXI7CisgICAgICAgICAgICAgICAg
dGhpcy5iaW5kQXJyYXlCdWZmZXIoaW5zdGFuY2VzQnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBvZmZzZXRMb2NhdGlvbiA9IHRoaXMuX2N1cnJlbnRJbnN0YW5jZUxvY2F0
aW9uc1tpXTsKKyAgICAgICAgICAgIHRoaXMuX2dsLnZlcnRleEF0dHJpYkRpdmlzb3Iob2Zmc2V0
TG9jYXRpb24sIDApOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2N1cnJlbnRJbnN0YW5jZUJ1
ZmZlcnMubGVuZ3RoID0gMDsKKyAgICAgICAgdGhpcy5fY3VycmVudEluc3RhbmNlTG9jYXRpb25z
Lmxlbmd0aCA9IDA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIGFuZCBmcmVlIHRo
ZSBtZW1vcnkgb2YgYSB2ZXJ0ZXggYXJyYXkgb2JqZWN0CisgICAgICogQHBhcmFtIHZhbyBkZWZp
bmVzIHRoZSB2ZXJ0ZXggYXJyYXkgb2JqZWN0IHRvIGRlbGV0ZQorICAgICAqLworICAgIEVuZ2lu
ZS5wcm90b3R5cGUucmVsZWFzZVZlcnRleEFycmF5T2JqZWN0ID0gZnVuY3Rpb24gKHZhbykgewor
ICAgICAgICB0aGlzLl9nbC5kZWxldGVWZXJ0ZXhBcnJheSh2YW8pOworICAgIH07CisgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9yZWxlYXNlQnVmZmVyID0gZnVuY3Rp
b24gKGJ1ZmZlcikgeworICAgICAgICBidWZmZXIucmVmZXJlbmNlcy0tOworICAgICAgICBpZiAo
YnVmZmVyLnJlZmVyZW5jZXMgPT09IDApIHsKKyAgICAgICAgICAgIHRoaXMuX2RlbGV0ZUJ1ZmZl
cihidWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH07CisgICAgRW5naW5lLnByb3RvdHlwZS5fZGVsZXRlQnVmZmVy
ID0gZnVuY3Rpb24gKGJ1ZmZlcikgeworICAgICAgICB0aGlzLl9nbC5kZWxldGVCdWZmZXIoYnVm
ZmVyLnVuZGVybHlpbmdSZXNvdXJjZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgd2ViR0wgYnVmZmVyIHRvIHVzZSB3aXRoIGluc3RhbmNpYXRpb24KKyAgICAgKiBAcGFyYW0g
Y2FwYWNpdHkgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyCisgICAgICogQHJldHVybnMg
dGhlIHdlYkdMIGJ1ZmZlcgorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuY3JlYXRlSW5z
dGFuY2VzQnVmZmVyID0gZnVuY3Rpb24gKGNhcGFjaXR5KSB7CisgICAgICAgIHZhciBidWZmZXIg
PSB0aGlzLl9nbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBpbnN0YW5jZSBidWZmZXIi
KTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IF9NZXNoZXNfV2ViR0xfd2Vi
R0xEYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJXZWJHTERhdGFCdWZm
ZXIiXShidWZmZXIpOworICAgICAgICByZXN1bHQuY2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICAg
ICAgdGhpcy5iaW5kQXJyYXlCdWZmZXIocmVzdWx0KTsKKyAgICAgICAgdGhpcy5fZ2wuYnVmZmVy
RGF0YSh0aGlzLl9nbC5BUlJBWV9CVUZGRVIsIGNhcGFjaXR5LCB0aGlzLl9nbC5EWU5BTUlDX0RS
QVcpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogRGVs
ZXRlIGEgd2ViR0wgYnVmZmVyIHVzZWQgd2l0aCBpbnN0YW5jaWF0aW9uCisgICAgICogQHBhcmFt
IGJ1ZmZlciBkZWZpbmVzIHRoZSB3ZWJHTCBidWZmZXIgdG8gZGVsZXRlCisgICAgICovCisgICAg
RW5naW5lLnByb3RvdHlwZS5kZWxldGVJbnN0YW5jZXNCdWZmZXIgPSBmdW5jdGlvbiAoYnVmZmVy
KSB7CisgICAgICAgIHRoaXMuX2dsLmRlbGV0ZUJ1ZmZlcihidWZmZXIpOworICAgIH07CisgICAg
LyoqCisgICAgICogVXBkYXRlIHRoZSBjb250ZW50IG9mIGEgd2ViR0wgYnVmZmVyIHVzZWQgd2l0
aCBpbnN0YW5jaWF0aW9uIGFuZCBiaW5kIGl0IHRvIHRoZSB3ZWJHTCBjb250ZXh0CisgICAgICog
QHBhcmFtIGluc3RhbmNlc0J1ZmZlciBkZWZpbmVzIHRoZSB3ZWJHTCBidWZmZXIgdG8gdXBkYXRl
IGFuZCBiaW5kCisgICAgICogQHBhcmFtIGRhdGEgZGVmaW5lcyB0aGUgZGF0YSB0byBzdG9yZSBp
biB0aGUgYnVmZmVyCisgICAgICogQHBhcmFtIG9mZnNldExvY2F0aW9ucyBkZWZpbmVzIHRoZSBv
ZmZzZXRzIG9yIGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24gdXNlZCB0byBkZXRlcm1pbmUgd2hlcmUg
ZGF0YSBtdXN0IGJlIHN0b3JlZCBpbiB0aGUgYnVmZmVyCisgICAgICovCisgICAgRW5naW5lLnBy
b3RvdHlwZS51cGRhdGVBbmRCaW5kSW5zdGFuY2VzQnVmZmVyID0gZnVuY3Rpb24gKGluc3RhbmNl
c0J1ZmZlciwgZGF0YSwgb2Zmc2V0TG9jYXRpb25zKSB7CisgICAgICAgIHRoaXMuYmluZEFycmF5
QnVmZmVyKGluc3RhbmNlc0J1ZmZlcik7CisgICAgICAgIGlmIChkYXRhKSB7CisgICAgICAgICAg
ICB0aGlzLl9nbC5idWZmZXJTdWJEYXRhKHRoaXMuX2dsLkFSUkFZX0JVRkZFUiwgMCwgZGF0YSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9mZnNldExvY2F0aW9uc1swXS5pbmRleCAhPT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICB2YXIgc3RyaWRlID0gMDsKKyAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgb2Zmc2V0TG9jYXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGFpID0gb2Zmc2V0TG9jYXRpb25zW2ldOworICAgICAgICAgICAgICAgIHN0cmlk
ZSArPSBhaS5hdHRyaWJ1dGVTaXplICogNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgb2Zmc2V0TG9jYXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGFpID0gb2Zmc2V0TG9jYXRpb25zW2ldOworICAgICAgICAgICAgICAgIGlm
ICghdGhpcy5fdmVydGV4QXR0cmliQXJyYXlzRW5hYmxlZFthaS5pbmRleF0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYWkuaW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJBcnJheXNFbmFibGVkW2FpLmlu
ZGV4XSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX3Zl
cnRleEF0dHJpYlBvaW50ZXIoaW5zdGFuY2VzQnVmZmVyLCBhaS5pbmRleCwgYWkuYXR0cmlidXRl
U2l6ZSwgYWkuYXR0cmlieXRlVHlwZSB8fCB0aGlzLl9nbC5GTE9BVCwgYWkubm9ybWFsaXplZCB8
fCBmYWxzZSwgc3RyaWRlLCBhaS5vZmZzZXQpOworICAgICAgICAgICAgICAgIHRoaXMuX2dsLnZl
cnRleEF0dHJpYkRpdmlzb3IoYWkuaW5kZXgsIDEpOworICAgICAgICAgICAgICAgIHRoaXMuX2N1
cnJlbnRJbnN0YW5jZUxvY2F0aW9ucy5wdXNoKGFpLmluZGV4KTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9jdXJyZW50SW5zdGFuY2VCdWZmZXJzLnB1c2goaW5zdGFuY2VzQnVmZmVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCA0OyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIG9m
ZnNldExvY2F0aW9uID0gb2Zmc2V0TG9jYXRpb25zW2luZGV4XTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMuX3ZlcnRleEF0dHJpYkFycmF5c0VuYWJsZWRbb2Zmc2V0TG9jYXRpb25dKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2dsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG9mZnNl
dExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmVydGV4QXR0cmliQXJyYXlz
RW5hYmxlZFtvZmZzZXRMb2NhdGlvbl0gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJQb2ludGVyKGluc3RhbmNlc0J1ZmZlciwgb2Zm
c2V0TG9jYXRpb24sIDQsIHRoaXMuX2dsLkZMT0FULCBmYWxzZSwgNjQsIGluZGV4ICogMTYpOwor
ICAgICAgICAgICAgICAgIHRoaXMuX2dsLnZlcnRleEF0dHJpYkRpdmlzb3Iob2Zmc2V0TG9jYXRp
b24sIDEpOworICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbnN0YW5jZUxvY2F0aW9ucy5w
dXNoKG9mZnNldExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50SW5zdGFu
Y2VCdWZmZXJzLnB1c2goaW5zdGFuY2VzQnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogQXBwbHkgYWxsIGNhY2hlZCBzdGF0ZXMgKGRlcHRo
LCBjdWxsaW5nLCBzdGVuY2lsIGFuZCBhbHBoYSkKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90
eXBlLmFwcGx5U3RhdGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9kZXB0aEN1bGxp
bmdTdGF0ZS5hcHBseSh0aGlzLl9nbCk7CisgICAgICAgIHRoaXMuX3N0ZW5jaWxTdGF0ZS5hcHBs
eSh0aGlzLl9nbCk7CisgICAgICAgIHRoaXMuX2FscGhhU3RhdGUuYXBwbHkodGhpcy5fZ2wpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogU2VuZCBhIGRyYXcgb3JkZXIKKyAgICAgKiBAcGFyYW0g
dXNlVHJpYW5nbGVzIGRlZmluZXMgaWYgdHJpYW5nbGVzIG11c3QgYmUgdXNlZCB0byBkcmF3IChl
bHNlIHdpcmVmcmFtZSB3aWxsIGJlIHVzZWQpCisgICAgICogQHBhcmFtIGluZGV4U3RhcnQgZGVm
aW5lcyB0aGUgc3RhcnRpbmcgaW5kZXgKKyAgICAgKiBAcGFyYW0gaW5kZXhDb3VudCBkZWZpbmVz
IHRoZSBudW1iZXIgb2YgaW5kZXggdG8gZHJhdworICAgICAqIEBwYXJhbSBpbnN0YW5jZXNDb3Vu
dCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgaW5zdGFuY2VzIHRvIGRyYXcgKGlmIGluc3RhbmNpYXRp
b24gaXMgZW5hYmxlZCkKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmRyYXcgPSBmdW5j
dGlvbiAodXNlVHJpYW5nbGVzLCBpbmRleFN0YXJ0LCBpbmRleENvdW50LCBpbnN0YW5jZXNDb3Vu
dCkgeworICAgICAgICB0aGlzLmRyYXdFbGVtZW50c1R5cGUodXNlVHJpYW5nbGVzID8gX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5NQVRFUklBTF9U
cmlhbmdsZUZpbGxNb2RlIDogX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJDb25zdGFudHMiXS5NQVRFUklBTF9XaXJlRnJhbWVGaWxsTW9kZSwgaW5kZXhTdGFydCwgaW5k
ZXhDb3VudCwgaW5zdGFuY2VzQ291bnQpOworICAgIH07CisgICAgLyoqCisgICAgICogRHJhdyBh
IGxpc3Qgb2YgcG9pbnRzCisgICAgICogQHBhcmFtIHZlcnRpY2VzU3RhcnQgZGVmaW5lcyB0aGUg
aW5kZXggb2YgZmlyc3QgdmVydGV4IHRvIGRyYXcKKyAgICAgKiBAcGFyYW0gdmVydGljZXNDb3Vu
dCBkZWZpbmVzIHRoZSBjb3VudCBvZiB2ZXJ0aWNlcyB0byBkcmF3CisgICAgICogQHBhcmFtIGlu
c3RhbmNlc0NvdW50IGRlZmluZXMgdGhlIG51bWJlciBvZiBpbnN0YW5jZXMgdG8gZHJhdyAoaWYg
aW5zdGFuY2lhdGlvbiBpcyBlbmFibGVkKQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUu
ZHJhd1BvaW50Q2xvdWRzID0gZnVuY3Rpb24gKHZlcnRpY2VzU3RhcnQsIHZlcnRpY2VzQ291bnQs
IGluc3RhbmNlc0NvdW50KSB7CisgICAgICAgIHRoaXMuZHJhd0FycmF5c1R5cGUoX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5NQVRFUklBTF9Qb2lu
dEZpbGxNb2RlLCB2ZXJ0aWNlc1N0YXJ0LCB2ZXJ0aWNlc0NvdW50LCBpbnN0YW5jZXNDb3VudCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEcmF3IGEgbGlzdCBvZiB1bmluZGV4ZWQgcHJpbWl0
aXZlcworICAgICAqIEBwYXJhbSB1c2VUcmlhbmdsZXMgZGVmaW5lcyBpZiB0cmlhbmdsZXMgbXVz
dCBiZSB1c2VkIHRvIGRyYXcgKGVsc2Ugd2lyZWZyYW1lIHdpbGwgYmUgdXNlZCkKKyAgICAgKiBA
cGFyYW0gdmVydGljZXNTdGFydCBkZWZpbmVzIHRoZSBpbmRleCBvZiBmaXJzdCB2ZXJ0ZXggdG8g
ZHJhdworICAgICAqIEBwYXJhbSB2ZXJ0aWNlc0NvdW50IGRlZmluZXMgdGhlIGNvdW50IG9mIHZl
cnRpY2VzIHRvIGRyYXcKKyAgICAgKiBAcGFyYW0gaW5zdGFuY2VzQ291bnQgZGVmaW5lcyB0aGUg
bnVtYmVyIG9mIGluc3RhbmNlcyB0byBkcmF3IChpZiBpbnN0YW5jaWF0aW9uIGlzIGVuYWJsZWQp
CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5kcmF3VW5JbmRleGVkID0gZnVuY3Rpb24g
KHVzZVRyaWFuZ2xlcywgdmVydGljZXNTdGFydCwgdmVydGljZXNDb3VudCwgaW5zdGFuY2VzQ291
bnQpIHsKKyAgICAgICAgdGhpcy5kcmF3QXJyYXlzVHlwZSh1c2VUcmlhbmdsZXMgPyBfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1Ry
aWFuZ2xlRmlsbE1vZGUgOiBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19b
IkNvbnN0YW50cyJdLk1BVEVSSUFMX1dpcmVGcmFtZUZpbGxNb2RlLCB2ZXJ0aWNlc1N0YXJ0LCB2
ZXJ0aWNlc0NvdW50LCBpbnN0YW5jZXNDb3VudCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBE
cmF3IGEgbGlzdCBvZiBpbmRleGVkIHByaW1pdGl2ZXMKKyAgICAgKiBAcGFyYW0gZmlsbE1vZGUg
ZGVmaW5lcyB0aGUgcHJpbWl0aXZlIHRvIHVzZQorICAgICAqIEBwYXJhbSBpbmRleFN0YXJ0IGRl
ZmluZXMgdGhlIHN0YXJ0aW5nIGluZGV4CisgICAgICogQHBhcmFtIGluZGV4Q291bnQgZGVmaW5l
cyB0aGUgbnVtYmVyIG9mIGluZGV4IHRvIGRyYXcKKyAgICAgKiBAcGFyYW0gaW5zdGFuY2VzQ291
bnQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGluc3RhbmNlcyB0byBkcmF3IChpZiBpbnN0YW5jaWF0
aW9uIGlzIGVuYWJsZWQpCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5kcmF3RWxlbWVu
dHNUeXBlID0gZnVuY3Rpb24gKGZpbGxNb2RlLCBpbmRleFN0YXJ0LCBpbmRleENvdW50LCBpbnN0
YW5jZXNDb3VudCkgeworICAgICAgICAvLyBBcHBseSBzdGF0ZXMKKyAgICAgICAgdGhpcy5hcHBs
eVN0YXRlcygpOworICAgICAgICB0aGlzLl9kcmF3Q2FsbHMuYWRkQ291bnQoMSwgZmFsc2UpOwor
ICAgICAgICAvLyBSZW5kZXIKKyAgICAgICAgdmFyIGRyYXdNb2RlID0gdGhpcy5fZHJhd01vZGUo
ZmlsbE1vZGUpOworICAgICAgICB2YXIgaW5kZXhGb3JtYXQgPSB0aGlzLl91aW50SW5kaWNlc0N1
cnJlbnRseVNldCA/IHRoaXMuX2dsLlVOU0lHTkVEX0lOVCA6IHRoaXMuX2dsLlVOU0lHTkVEX1NI
T1JUOworICAgICAgICB2YXIgbXVsdCA9IHRoaXMuX3VpbnRJbmRpY2VzQ3VycmVudGx5U2V0ID8g
NCA6IDI7CisgICAgICAgIGlmIChpbnN0YW5jZXNDb3VudCkgeworICAgICAgICAgICAgdGhpcy5f
Z2wuZHJhd0VsZW1lbnRzSW5zdGFuY2VkKGRyYXdNb2RlLCBpbmRleENvdW50LCBpbmRleEZvcm1h
dCwgaW5kZXhTdGFydCAqIG11bHQsIGluc3RhbmNlc0NvdW50KTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgaW5k
ZXhDb3VudCwgaW5kZXhGb3JtYXQsIGluZGV4U3RhcnQgKiBtdWx0KTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogRHJhdyBhIGxpc3Qgb2YgdW5pbmRleGVkIHByaW1pdGl2ZXMK
KyAgICAgKiBAcGFyYW0gZmlsbE1vZGUgZGVmaW5lcyB0aGUgcHJpbWl0aXZlIHRvIHVzZQorICAg
ICAqIEBwYXJhbSB2ZXJ0aWNlc1N0YXJ0IGRlZmluZXMgdGhlIGluZGV4IG9mIGZpcnN0IHZlcnRl
eCB0byBkcmF3CisgICAgICogQHBhcmFtIHZlcnRpY2VzQ291bnQgZGVmaW5lcyB0aGUgY291bnQg
b2YgdmVydGljZXMgdG8gZHJhdworICAgICAqIEBwYXJhbSBpbnN0YW5jZXNDb3VudCBkZWZpbmVz
IHRoZSBudW1iZXIgb2YgaW5zdGFuY2VzIHRvIGRyYXcgKGlmIGluc3RhbmNpYXRpb24gaXMgZW5h
YmxlZCkKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmRyYXdBcnJheXNUeXBlID0gZnVu
Y3Rpb24gKGZpbGxNb2RlLCB2ZXJ0aWNlc1N0YXJ0LCB2ZXJ0aWNlc0NvdW50LCBpbnN0YW5jZXND
b3VudCkgeworICAgICAgICAvLyBBcHBseSBzdGF0ZXMKKyAgICAgICAgdGhpcy5hcHBseVN0YXRl
cygpOworICAgICAgICB0aGlzLl9kcmF3Q2FsbHMuYWRkQ291bnQoMSwgZmFsc2UpOworICAgICAg
ICB2YXIgZHJhd01vZGUgPSB0aGlzLl9kcmF3TW9kZShmaWxsTW9kZSk7CisgICAgICAgIGlmIChp
bnN0YW5jZXNDb3VudCkgeworICAgICAgICAgICAgdGhpcy5fZ2wuZHJhd0FycmF5c0luc3RhbmNl
ZChkcmF3TW9kZSwgdmVydGljZXNTdGFydCwgdmVydGljZXNDb3VudCwgaW5zdGFuY2VzQ291bnQp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZ2wuZHJhd0Fy
cmF5cyhkcmF3TW9kZSwgdmVydGljZXNTdGFydCwgdmVydGljZXNDb3VudCk7CisgICAgICAgIH0K
KyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX2RyYXdNb2RlID0gZnVuY3Rpb24gKGZpbGxN
b2RlKSB7CisgICAgICAgIHN3aXRjaCAoZmlsbE1vZGUpIHsKKyAgICAgICAgICAgIC8vIFRyaWFu
Z2xlIHZpZXdzCisgICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVHJpYW5nbGVGaWxsTW9kZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuVFJJQU5HTEVTOworICAgICAgICAgICAgY2FzZSBf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLk1BVEVS
SUFMX1BvaW50RmlsbE1vZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlBPSU5U
UzsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJDb25zdGFudHMiXS5NQVRFUklBTF9XaXJlRnJhbWVGaWxsTW9kZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fZ2wuTElORVM7CisgICAgICAgICAgICAvLyBEcmF3IG1vZGVzCisg
ICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
Q29uc3RhbnRzIl0uTUFURVJJQUxfUG9pbnRMaXN0RHJhd01vZGU6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2dsLlBPSU5UUzsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5NQVRFUklBTF9MaW5lTGlzdERy
YXdNb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5MSU5FUzsKKyAgICAgICAg
ICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFu
dHMiXS5NQVRFUklBTF9MaW5lTG9vcERyYXdNb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLl9nbC5MSU5FX0xPT1A7CisgICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfTGluZVN0cmlwRHJhd01v
ZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLkxJTkVfU1RSSVA7CisgICAgICAg
ICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3Rh
bnRzIl0uTUFURVJJQUxfVHJpYW5nbGVTdHJpcERyYXdNb2RlOgorICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9nbC5UUklBTkdMRV9TVFJJUDsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5NQVRFUklBTF9Ucmlh
bmdsZUZhbkRyYXdNb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5UUklBTkdM
RV9GQU47CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9nbC5UUklBTkdMRVM7CisgICAgICAgIH0KKyAgICB9OworICAgIC8vIFNoYWRlcnMKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3JlbGVhc2VFZmZlY3QgPSBmdW5j
dGlvbiAoZWZmZWN0KSB7CisgICAgICAgIGlmICh0aGlzLl9jb21waWxlZEVmZmVjdHNbZWZmZWN0
Ll9rZXldKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fY29tcGlsZWRFZmZlY3RzW2VmZmVj
dC5fa2V5XTsKKyAgICAgICAgICAgIHRoaXMuX2RlbGV0ZVBpcGVsaW5lQ29udGV4dChlZmZlY3Qu
Z2V0UGlwZWxpbmVDb250ZXh0KCkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRl
biAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX2RlbGV0ZVBpcGVsaW5lQ29udGV4dCA9IGZ1bmN0
aW9uIChwaXBlbGluZUNvbnRleHQpIHsKKyAgICAgICAgdmFyIHdlYkdMUGlwZWxpbmVDb250ZXh0
ID0gcGlwZWxpbmVDb250ZXh0OworICAgICAgICBpZiAod2ViR0xQaXBlbGluZUNvbnRleHQgJiYg
d2ViR0xQaXBlbGluZUNvbnRleHQucHJvZ3JhbSkgeworICAgICAgICAgICAgd2ViR0xQaXBlbGlu
ZUNvbnRleHQucHJvZ3JhbS5fX1NQRUNUT1JfcmVidWlsZFByb2dyYW0gPSBudWxsOworICAgICAg
ICAgICAgaWYgKHdlYkdMUGlwZWxpbmVDb250ZXh0LnRyYW5zZm9ybUZlZWRiYWNrKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5kZWxldGVUcmFuc2Zvcm1GZWVkYmFjayh3ZWJHTFBpcGVsaW5lQ29u
dGV4dC50cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgICAgICAgICAgICAgd2ViR0xQaXBlbGluZUNv
bnRleHQudHJhbnNmb3JtRmVlZGJhY2sgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fZ2wuZGVsZXRlUHJvZ3JhbSh3ZWJHTFBpcGVsaW5lQ29udGV4dC5wcm9ncmFtKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IGVmZmVjdCAo
dXNlZCB0byBzdG9yZSB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycykKKyAgICAgKiBAcGFyYW0gYmFz
ZU5hbWUgZGVmaW5lcyB0aGUgYmFzZSBuYW1lIG9mIHRoZSBlZmZlY3QgKFRoZSBuYW1lIG9mIGZp
bGUgd2l0aG91dCAuZnJhZ21lbnQuZnggb3IgLnZlcnRleC5meCkKKyAgICAgKiBAcGFyYW0gYXR0
cmlidXRlc05hbWVzT3JPcHRpb25zIGRlZmluZXMgZWl0aGVyIGEgbGlzdCBvZiBhdHRyaWJ1dGUg
bmFtZXMgb3IgYW4gRWZmZWN0Q3JlYXRpb25PcHRpb25zIG9iamVjdAorICAgICAqIEBwYXJhbSB1
bmlmb3Jtc05hbWVzT3JFbmdpbmUgZGVmaW5lcyBlaXRoZXIgYSBsaXN0IG9mIHVuaWZvcm0gbmFt
ZXMgb3IgdGhlIGVuZ2luZSB0byB1c2UKKyAgICAgKiBAcGFyYW0gc2FtcGxlcnMgZGVmaW5lcyBh
biBhcnJheSBvZiBzdHJpbmcgdXNlZCB0byByZXByZXNlbnQgdGV4dHVyZXMKKyAgICAgKiBAcGFy
YW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVmaW5lcyB0byB1
c2UgdG8gY29tcGlsZSB0aGUgc2hhZGVycworICAgICAqIEBwYXJhbSBmYWxsYmFja3MgZGVmaW5l
cyB0aGUgbGlzdCBvZiBwb3RlbnRpYWwgZmFsbGJhY2tzIHRvIHVzZSBpZiBzaGFkZXIgY29ubXBp
bGF0aW9uIGZhaWxzCisgICAgICogQHBhcmFtIG9uQ29tcGlsZWQgZGVmaW5lcyBhIGZ1bmN0aW9u
IHRvIGNhbGwgd2hlbiB0aGUgZWZmZWN0IGNyZWF0aW9uIGlzIHN1Y2Nlc3NmdWwKKyAgICAgKiBA
cGFyYW0gb25FcnJvciBkZWZpbmVzIGEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBlZmZlY3Qg
Y3JlYXRpb24gaGFzIGZhaWxlZAorICAgICAqIEBwYXJhbSBpbmRleFBhcmFtZXRlcnMgZGVmaW5l
cyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgaW5kZXggdmFsdWVzIHRvIHVzZSB0byBjb21waWxl
IHNoYWRlcnMgKGxpa2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBsaWdodHMp
CisgICAgICogQHJldHVybnMgdGhlIG5ldyBFZmZlY3QKKyAgICAgKi8KKyAgICBFbmdpbmUucHJv
dG90eXBlLmNyZWF0ZUVmZmVjdCA9IGZ1bmN0aW9uIChiYXNlTmFtZSwgYXR0cmlidXRlc05hbWVz
T3JPcHRpb25zLCB1bmlmb3Jtc05hbWVzT3JFbmdpbmUsIHNhbXBsZXJzLCBkZWZpbmVzLCBmYWxs
YmFja3MsIG9uQ29tcGlsZWQsIG9uRXJyb3IsIGluZGV4UGFyYW1ldGVycykgeworICAgICAgICB2
YXIgdmVydGV4ID0gYmFzZU5hbWUudmVydGV4RWxlbWVudCB8fCBiYXNlTmFtZS52ZXJ0ZXggfHwg
YmFzZU5hbWU7CisgICAgICAgIHZhciBmcmFnbWVudCA9IGJhc2VOYW1lLmZyYWdtZW50RWxlbWVu
dCB8fCBiYXNlTmFtZS5mcmFnbWVudCB8fCBiYXNlTmFtZTsKKyAgICAgICAgdmFyIG5hbWUgPSB2
ZXJ0ZXggKyAiKyIgKyBmcmFnbWVudCArICJAIiArIChkZWZpbmVzID8gZGVmaW5lcyA6IGF0dHJp
YnV0ZXNOYW1lc09yT3B0aW9ucy5kZWZpbmVzKTsKKyAgICAgICAgaWYgKHRoaXMuX2NvbXBpbGVk
RWZmZWN0c1tuYW1lXSkgeworICAgICAgICAgICAgdmFyIGNvbXBpbGVkRWZmZWN0ID0gdGhpcy5f
Y29tcGlsZWRFZmZlY3RzW25hbWVdOworICAgICAgICAgICAgaWYgKG9uQ29tcGlsZWQgJiYgY29t
cGlsZWRFZmZlY3QuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgb25Db21waWxlZChjb21w
aWxlZEVmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZWRF
ZmZlY3Q7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVmZmVjdCA9IG5ldyBfTWF0ZXJpYWxzX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFZmZlY3QiXShiYXNlTmFtZSwgYXR0
cmlidXRlc05hbWVzT3JPcHRpb25zLCB1bmlmb3Jtc05hbWVzT3JFbmdpbmUsIHNhbXBsZXJzLCB0
aGlzLCBkZWZpbmVzLCBmYWxsYmFja3MsIG9uQ29tcGlsZWQsIG9uRXJyb3IsIGluZGV4UGFyYW1l
dGVycywgbmFtZSk7CisgICAgICAgIHRoaXMuX2NvbXBpbGVkRWZmZWN0c1tuYW1lXSA9IGVmZmVj
dDsKKyAgICAgICAgcmV0dXJuIGVmZmVjdDsKKyAgICB9OworICAgIEVuZ2luZS5fY29uY2F0ZW5h
dGVTaGFkZXIgPSBmdW5jdGlvbiAoc291cmNlLCBkZWZpbmVzLCBzaGFkZXJWZXJzaW9uKSB7Cisg
ICAgICAgIGlmIChzaGFkZXJWZXJzaW9uID09PSB2b2lkIDApIHsgc2hhZGVyVmVyc2lvbiA9ICIi
OyB9CisgICAgICAgIHJldHVybiBzaGFkZXJWZXJzaW9uICsgKGRlZmluZXMgPyBkZWZpbmVzICsg
IlxuIiA6ICIiKSArIHNvdXJjZTsKKyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX2NvbXBp
bGVTaGFkZXIgPSBmdW5jdGlvbiAoc291cmNlLCB0eXBlLCBkZWZpbmVzLCBzaGFkZXJWZXJzaW9u
KSB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb21waWxlUmF3U2hhZGVyKEVuZ2luZS5fY29uY2F0
ZW5hdGVTaGFkZXIoc291cmNlLCBkZWZpbmVzLCBzaGFkZXJWZXJzaW9uKSwgdHlwZSk7CisgICAg
fTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl9jb21waWxlUmF3U2hhZGVyID0gZnVuY3Rpb24gKHNv
dXJjZSwgdHlwZSkgeworICAgICAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAgICAgICAgdmFyIHNo
YWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlID09PSAidmVydGV4IiA/IGdsLlZFUlRFWF9TSEFE
RVIgOiBnbC5GUkFHTUVOVF9TSEFERVIpOworICAgICAgICBpZiAoIXNoYWRlcikgeworICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBjb21waWxl
IHRoZSBzaGFkZXIuIik7CisgICAgICAgIH0KKyAgICAgICAgZ2wuc2hhZGVyU291cmNlKHNoYWRl
ciwgc291cmNlKTsKKyAgICAgICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgICAgICBy
ZXR1cm4gc2hhZGVyOworICAgIH07CisgICAgLyoqCisgICAgICogRGlyZWN0bHkgY3JlYXRlcyBh
IHdlYkdMIHByb2dyYW0KKyAgICAgKiBAcGFyYW0gcGlwZWxpbmVDb250ZXh0ICBkZWZpbmVzIHRo
ZSBwaXBlbGluZSBjb250ZXh0IHRvIGF0dGFjaCB0bworICAgICAqIEBwYXJhbSB2ZXJ0ZXhDb2Rl
IGRlZmluZXMgdGhlIHZlcnRleCBzaGFkZXIgY29kZSB0byB1c2UKKyAgICAgKiBAcGFyYW0gZnJh
Z21lbnRDb2RlIGRlZmluZXMgdGhlIGZyYWdtZW50IHNoYWRlciBjb2RlIHRvIHVzZQorICAgICAq
IEBwYXJhbSBjb250ZXh0IGRlZmluZXMgdGhlIHdlYkdMIGNvbnRleHQgdG8gdXNlIChpZiBub3Qg
c2V0LCB0aGUgY3VycmVudCBvbmUgd2lsbCBiZSB1c2VkKQorICAgICAqIEBwYXJhbSB0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzIGRlZmluZXMgdGhlIGxpc3Qgb2YgdHJhbnNmb3JtIGZlZWRiYWNr
IHZhcnlpbmdzIHRvIHVzZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgd2ViR0wgcHJvZ3JhbQor
ICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuY3JlYXRlUmF3U2hhZGVyUHJvZ3JhbSA9IGZ1
bmN0aW9uIChwaXBlbGluZUNvbnRleHQsIHZlcnRleENvZGUsIGZyYWdtZW50Q29kZSwgY29udGV4
dCwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncykgeworICAgICAgICBpZiAodHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5ncyA9PT0gdm9pZCAwKSB7IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MgPSBu
dWxsOyB9CisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IHRoaXMuX2dsOworICAgICAgICB2
YXIgdmVydGV4U2hhZGVyID0gdGhpcy5fY29tcGlsZVJhd1NoYWRlcih2ZXJ0ZXhDb2RlLCAidmVy
dGV4Iik7CisgICAgICAgIHZhciBmcmFnbWVudFNoYWRlciA9IHRoaXMuX2NvbXBpbGVSYXdTaGFk
ZXIoZnJhZ21lbnRDb2RlLCAiZnJhZ21lbnQiKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0
ZVNoYWRlclByb2dyYW0ocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hh
ZGVyLCBjb250ZXh0LCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYSB3ZWJHTCBwcm9ncmFtCisgICAgICogQHBhcmFtIHBpcGVsaW5l
Q29udGV4dCAgZGVmaW5lcyB0aGUgcGlwZWxpbmUgY29udGV4dCB0byBhdHRhY2ggdG8KKyAgICAg
KiBAcGFyYW0gdmVydGV4Q29kZSAgZGVmaW5lcyB0aGUgdmVydGV4IHNoYWRlciBjb2RlIHRvIHVz
ZQorICAgICAqIEBwYXJhbSBmcmFnbWVudENvZGUgZGVmaW5lcyB0aGUgZnJhZ21lbnQgc2hhZGVy
IGNvZGUgdG8gdXNlCisgICAgICogQHBhcmFtIGRlZmluZXMgZGVmaW5lcyB0aGUgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIGRlZmluZXMgdG8gdXNlIHRvIGNvbXBpbGUgdGhlIHNoYWRlcnMKKyAgICAg
KiBAcGFyYW0gY29udGV4dCBkZWZpbmVzIHRoZSB3ZWJHTCBjb250ZXh0IHRvIHVzZSAoaWYgbm90
IHNldCwgdGhlIGN1cnJlbnQgb25lIHdpbGwgYmUgdXNlZCkKKyAgICAgKiBAcGFyYW0gdHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5ncyBkZWZpbmVzIHRoZSBsaXN0IG9mIHRyYW5zZm9ybSBmZWVkYmFj
ayB2YXJ5aW5ncyB0byB1c2UKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IHdlYkdMIHByb2dyYW0K
KyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVNoYWRlclByb2dyYW0gPSBmdW5j
dGlvbiAocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhDb2RlLCBmcmFnbWVudENvZGUsIGRlZmluZXMs
IGNvbnRleHQsIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpIHsKKyAgICAgICAgaWYgKHRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ3MgPT09IHZvaWQgMCkgeyB0cmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdzID0gbnVsbDsgfQorICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLl9nbDsKKyAg
ICAgICAgdGhpcy5vbkJlZm9yZVNoYWRlckNvbXBpbGF0aW9uT2JzZXJ2YWJsZS5ub3RpZnlPYnNl
cnZlcnModGhpcyk7CisgICAgICAgIHZhciBzaGFkZXJWZXJzaW9uID0gKHRoaXMuX3dlYkdMVmVy
c2lvbiA+IDEpID8gIiN2ZXJzaW9uIDMwMCBlc1xuI2RlZmluZSBXRUJHTDIgXG4iIDogIiI7Cisg
ICAgICAgIHZhciB2ZXJ0ZXhTaGFkZXIgPSB0aGlzLl9jb21waWxlU2hhZGVyKHZlcnRleENvZGUs
ICJ2ZXJ0ZXgiLCBkZWZpbmVzLCBzaGFkZXJWZXJzaW9uKTsKKyAgICAgICAgdmFyIGZyYWdtZW50
U2hhZGVyID0gdGhpcy5fY29tcGlsZVNoYWRlcihmcmFnbWVudENvZGUsICJmcmFnbWVudCIsIGRl
ZmluZXMsIHNoYWRlclZlcnNpb24pOworICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMuX2NyZWF0
ZVNoYWRlclByb2dyYW0ocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hh
ZGVyLCBjb250ZXh0LCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKKyAgICAgICAgdGhpcy5v
bkFmdGVyU2hhZGVyQ29tcGlsYXRpb25PYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsK
KyAgICAgICAgcmV0dXJuIHByb2dyYW07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgbmV3IHBpcGVsaW5lIGNvbnRleHQKKyAgICAgKiBAcGFyYW0gc2hhZGVyUHJvY2Vzc2luZ0Nv
bnRleHQgZGVmaW5lcyB0aGUgc2hhZGVyIHByb2Nlc3NpbmcgY29udGV4dCB1c2VkIGR1cmluZyB0
aGUgcHJvY2Vzc2luZyBpZiBhdmFpbGFibGUKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IHBpcGVs
aW5lCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5jcmVhdGVQaXBlbGluZUNvbnRleHQg
PSBmdW5jdGlvbiAoc2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQpIHsKKyAgICAgICAgdmFyIHBpcGVs
aW5lQ29udGV4dCA9IG5ldyBfV2ViR0xfd2ViR0xQaXBlbGluZUNvbnRleHRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEzX19bIldlYkdMUGlwZWxpbmVDb250ZXh0Il0oKTsKKyAgICAgICAgcGlw
ZWxpbmVDb250ZXh0LmVuZ2luZSA9IHRoaXM7CisgICAgICAgIGlmICh0aGlzLl9jYXBzLnBhcmFs
bGVsU2hhZGVyQ29tcGlsZSkgeworICAgICAgICAgICAgcGlwZWxpbmVDb250ZXh0LmlzUGFyYWxs
ZWxDb21waWxlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBpcGVsaW5lQ29u
dGV4dDsKKyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX2NyZWF0ZVNoYWRlclByb2dyYW0g
PSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVy
LCBjb250ZXh0LCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKSB7CisgICAgICAgIGlmICh0cmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzID09PSB2b2lkIDApIHsgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5ncyA9IG51bGw7IH0KKyAgICAgICAgdmFyIHNoYWRlclByb2dyYW0gPSBjb250ZXh0LmNyZWF0
ZVByb2dyYW0oKTsKKyAgICAgICAgcGlwZWxpbmVDb250ZXh0LnByb2dyYW0gPSBzaGFkZXJQcm9n
cmFtOworICAgICAgICBpZiAoIXNoYWRlclByb2dyYW0pIHsKKyAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBwcm9ncmFtIik7CisgICAgICAgIH0KKyAgICAgICAg
Y29udGV4dC5hdHRhY2hTaGFkZXIoc2hhZGVyUHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICAg
ICAgY29udGV4dC5hdHRhY2hTaGFkZXIoc2hhZGVyUHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwor
ICAgICAgICBpZiAodGhpcy53ZWJHTFZlcnNpb24gPiAxICYmIHRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ3MpIHsKKyAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1GZWVkYmFjayA9IHRoaXMuY3JlYXRl
VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIHRoaXMuYmluZFRyYW5zZm9ybUZlZWRi
YWNrKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICAgICAgICAgIHRoaXMuc2V0VHJhbmZvcm1GZWVk
YmFja1ZhcnlpbmdzKHNoYWRlclByb2dyYW0sIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOwor
ICAgICAgICAgICAgcGlwZWxpbmVDb250ZXh0LnRyYW5zZm9ybUZlZWRiYWNrID0gdHJhbnNmb3Jt
RmVlZGJhY2s7CisgICAgICAgIH0KKyAgICAgICAgY29udGV4dC5saW5rUHJvZ3JhbShzaGFkZXJQ
cm9ncmFtKTsKKyAgICAgICAgaWYgKHRoaXMud2ViR0xWZXJzaW9uID4gMSAmJiB0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzKSB7CisgICAgICAgICAgICB0aGlzLmJpbmRUcmFuc2Zvcm1GZWVkYmFj
ayhudWxsKTsKKyAgICAgICAgfQorICAgICAgICBwaXBlbGluZUNvbnRleHQuY29udGV4dCA9IGNv
bnRleHQ7CisgICAgICAgIHBpcGVsaW5lQ29udGV4dC52ZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFk
ZXI7CisgICAgICAgIHBpcGVsaW5lQ29udGV4dC5mcmFnbWVudFNoYWRlciA9IGZyYWdtZW50U2hh
ZGVyOworICAgICAgICBpZiAoIXBpcGVsaW5lQ29udGV4dC5pc1BhcmFsbGVsQ29tcGlsZWQpIHsK
KyAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplUGlwZWxpbmVDb250ZXh0KHBpcGVsaW5lQ29udGV4
dCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNoYWRlclByb2dyYW07CisgICAgfTsKKyAg
ICBFbmdpbmUucHJvdG90eXBlLl9maW5hbGl6ZVBpcGVsaW5lQ29udGV4dCA9IGZ1bmN0aW9uIChw
aXBlbGluZUNvbnRleHQpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBwaXBlbGluZUNvbnRleHQu
Y29udGV4dDsKKyAgICAgICAgdmFyIHZlcnRleFNoYWRlciA9IHBpcGVsaW5lQ29udGV4dC52ZXJ0
ZXhTaGFkZXI7CisgICAgICAgIHZhciBmcmFnbWVudFNoYWRlciA9IHBpcGVsaW5lQ29udGV4dC5m
cmFnbWVudFNoYWRlcjsKKyAgICAgICAgdmFyIHByb2dyYW0gPSBwaXBlbGluZUNvbnRleHQucHJv
Z3JhbTsKKyAgICAgICAgdmFyIGxpbmtlZCA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihw
cm9ncmFtLCBjb250ZXh0LkxJTktfU1RBVFVTKTsKKyAgICAgICAgaWYgKCFsaW5rZWQpIHsgLy8g
R2V0IG1vcmUgaW5mbworICAgICAgICAgICAgLy8gVmVydGV4CisgICAgICAgICAgICBpZiAoIXRo
aXMuX2dsLmdldFNoYWRlclBhcmFtZXRlcih2ZXJ0ZXhTaGFkZXIsIHRoaXMuX2dsLkNPTVBJTEVf
U1RBVFVTKSkgeworICAgICAgICAgICAgICAgIHZhciBsb2cgPSB0aGlzLl9nbC5nZXRTaGFkZXJJ
bmZvTG9nKHZlcnRleFNoYWRlcik7CisgICAgICAgICAgICAgICAgaWYgKGxvZykgeworICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlZFUlRFWCBTSEFERVIgIiArIGxvZyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRnJhZ21lbnQK
KyAgICAgICAgICAgIGlmICghdGhpcy5fZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZyYWdtZW50U2hh
ZGVyLCB0aGlzLl9nbC5DT01QSUxFX1NUQVRVUykpIHsKKyAgICAgICAgICAgICAgICB2YXIgbG9n
ID0gdGhpcy5fZ2wuZ2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNoYWRlcik7CisgICAgICAgICAg
ICAgICAgaWYgKGxvZykgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkZS
QUdNRU5UIFNIQURFUiAiICsgbG9nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXIgZXJyb3IgPSBjb250ZXh0LmdldFByb2dyYW1JbmZvTG9nKHByb2dy
YW0pOworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy52YWxpZGF0ZVNoYWRlclByb2dyYW1zKSB7CisgICAgICAgICAgICBjb250ZXh0LnZhbGlkYXRl
UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgIHZhciB2YWxpZGF0ZWQgPSBjb250ZXh0Lmdl
dFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgY29udGV4dC5WQUxJREFURV9TVEFUVVMpOworICAg
ICAgICAgICAgaWYgKCF2YWxpZGF0ZWQpIHsKKyAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBj
b250ZXh0LmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pOworICAgICAgICAgICAgICAgIGlmIChl
cnJvcikgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb250ZXh0
LmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBjb250ZXh0LmRlbGV0ZVNoYWRl
cihmcmFnbWVudFNoYWRlcik7CisgICAgICAgIHBpcGVsaW5lQ29udGV4dC52ZXJ0ZXhTaGFkZXIg
PSB1bmRlZmluZWQ7CisgICAgICAgIHBpcGVsaW5lQ29udGV4dC5mcmFnbWVudFNoYWRlciA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgaWYgKHBpcGVsaW5lQ29udGV4dC5vbkNvbXBpbGVkKSB7CisgICAg
ICAgICAgICBwaXBlbGluZUNvbnRleHQub25Db21waWxlZCgpOworICAgICAgICAgICAgcGlwZWxp
bmVDb250ZXh0Lm9uQ29tcGlsZWQgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fcHJlcGFyZVBpcGVsaW5lQ29u
dGV4dCA9IGZ1bmN0aW9uIChwaXBlbGluZUNvbnRleHQsIHZlcnRleFNvdXJjZUNvZGUsIGZyYWdt
ZW50U291cmNlQ29kZSwgY3JlYXRlQXNSYXcsIHJlYnVpbGRSZWJpbmQsIGRlZmluZXMsIHRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ3MsIGtleSkgeworICAgICAgICB2YXIgd2ViR0xSZW5kZXJpbmdT
dGF0ZSA9IHBpcGVsaW5lQ29udGV4dDsKKyAgICAgICAgaWYgKGNyZWF0ZUFzUmF3KSB7CisgICAg
ICAgICAgICB3ZWJHTFJlbmRlcmluZ1N0YXRlLnByb2dyYW0gPSB0aGlzLmNyZWF0ZVJhd1NoYWRl
clByb2dyYW0od2ViR0xSZW5kZXJpbmdTdGF0ZSwgdmVydGV4U291cmNlQ29kZSwgZnJhZ21lbnRT
b3VyY2VDb2RlLCB1bmRlZmluZWQsIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgd2ViR0xSZW5kZXJpbmdTdGF0ZS5wcm9n
cmFtID0gdGhpcy5jcmVhdGVTaGFkZXJQcm9ncmFtKHdlYkdMUmVuZGVyaW5nU3RhdGUsIHZlcnRl
eFNvdXJjZUNvZGUsIGZyYWdtZW50U291cmNlQ29kZSwgZGVmaW5lcywgdW5kZWZpbmVkLCB0cmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKKyAgICAgICAgfQorICAgICAgICB3ZWJHTFJlbmRlcmlu
Z1N0YXRlLnByb2dyYW0uX19TUEVDVE9SX3JlYnVpbGRQcm9ncmFtID0gcmVidWlsZFJlYmluZDsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5faXNSZW5k
ZXJpbmdTdGF0ZUNvbXBpbGVkID0gZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCkgeworICAgICAg
ICB2YXIgd2ViR0xQaXBlbGluZUNvbnRleHQgPSBwaXBlbGluZUNvbnRleHQ7CisgICAgICAgIGlm
ICh0aGlzLl9nbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHdlYkdMUGlwZWxpbmVDb250ZXh0LnByb2dy
YW0sIHRoaXMuX2NhcHMucGFyYWxsZWxTaGFkZXJDb21waWxlLkNPTVBMRVRJT05fU1RBVFVTX0tI
UikpIHsKKyAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplUGlwZWxpbmVDb250ZXh0KHdlYkdMUGlw
ZWxpbmVDb250ZXh0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5l
LnByb3RvdHlwZS5fZXhlY3V0ZVdoZW5SZW5kZXJpbmdTdGF0ZUlzQ29tcGlsZWQgPSBmdW5jdGlv
biAocGlwZWxpbmVDb250ZXh0LCBhY3Rpb24pIHsKKyAgICAgICAgdmFyIHdlYkdMUGlwZWxpbmVD
b250ZXh0ID0gcGlwZWxpbmVDb250ZXh0OworICAgICAgICBpZiAoIXdlYkdMUGlwZWxpbmVDb250
ZXh0LmlzUGFyYWxsZWxDb21waWxlZCkgeworICAgICAgICAgICAgYWN0aW9uKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgd2ViR0xQaXBlbGluZUNvbnRleHQub25D
b21waWxlZCA9IGFjdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxpc3Qg
b2Ygd2ViR0wgdW5pZm9ybSBsb2NhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgcHJv
Z3JhbSBiYXNlZCBvbiBhIGxpc3Qgb2YgdW5pZm9ybSBuYW1lcworICAgICAqIEBwYXJhbSBwaXBl
bGluZUNvbnRleHQgZGVmaW5lcyB0aGUgcGlwZWxpbmUgY29udGV4dCB0byB1c2UKKyAgICAgKiBA
cGFyYW0gdW5pZm9ybXNOYW1lcyBkZWZpbmVzIHRoZSBsaXN0IG9mIHVuaWZvcm0gbmFtZXMKKyAg
ICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9ucworICAgICAq
LworICAgIEVuZ2luZS5wcm90b3R5cGUuZ2V0VW5pZm9ybXMgPSBmdW5jdGlvbiAocGlwZWxpbmVD
b250ZXh0LCB1bmlmb3Jtc05hbWVzKSB7CisgICAgICAgIHZhciByZXN1bHRzID0gbmV3IEFycmF5
KCk7CisgICAgICAgIHZhciB3ZWJHTFBpcGVsaW5lQ29udGV4dCA9IHBpcGVsaW5lQ29udGV4dDsK
KyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHVuaWZvcm1zTmFtZXMubGVuZ3Ro
OyBpbmRleCsrKSB7CisgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fZ2wuZ2V0VW5pZm9y
bUxvY2F0aW9uKHdlYkdMUGlwZWxpbmVDb250ZXh0LnByb2dyYW0sIHVuaWZvcm1zTmFtZXNbaW5k
ZXhdKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBsc2l0IG9mIGFjdGl2ZSBhdHRyaWJ1dGVzIGZvciBhIGdpdmVu
IHdlYkdMIHByb2dyYW0KKyAgICAgKiBAcGFyYW0gcGlwZWxpbmVDb250ZXh0IGRlZmluZXMgdGhl
IHBpcGVsaW5lIGNvbnRleHQgdG8gdXNlCisgICAgICogQHBhcmFtIGF0dHJpYnV0ZXNOYW1lcyBk
ZWZpbmVzIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZSBuYW1lcyB0byBnZXQKKyAgICAgKiBAcmV0dXJu
cyBhbiBhcnJheSBvZiBpbmRpY2VzIGluZGljYXRpbmcgdGhlIG9mZnNldCBvZiBlYWNoIGF0dHJp
YnV0ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuZ2V0QXR0cmlidXRlcyA9IGZ1bmN0
aW9uIChwaXBlbGluZUNvbnRleHQsIGF0dHJpYnV0ZXNOYW1lcykgeworICAgICAgICB2YXIgcmVz
dWx0cyA9IFtdOworICAgICAgICB2YXIgd2ViR0xQaXBlbGluZUNvbnRleHQgPSBwaXBlbGluZUNv
bnRleHQ7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVzTmFt
ZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAg
IHJlc3VsdHMucHVzaCh0aGlzLl9nbC5nZXRBdHRyaWJMb2NhdGlvbih3ZWJHTFBpcGVsaW5lQ29u
dGV4dC5wcm9ncmFtLCBhdHRyaWJ1dGVzTmFtZXNbaW5kZXhdKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCgtMSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBY3RpdmF0ZXMgYW4gZWZmZWN0LCBta2FpbmcgaXQgdGhlIGN1
cnJlbnQgb25lIChpZS4gdGhlIG9uZSB1c2VkIGZvciByZW5kZXJpbmcpCisgICAgICogQHBhcmFt
IGVmZmVjdCBkZWZpbmVzIHRoZSBlZmZlY3QgdG8gYWN0aXZhdGUKKyAgICAgKi8KKyAgICBFbmdp
bmUucHJvdG90eXBlLmVuYWJsZUVmZmVjdCA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAg
aWYgKCFlZmZlY3QgfHwgZWZmZWN0ID09PSB0aGlzLl9jdXJyZW50RWZmZWN0KSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gVXNlIHByb2dyYW0KKyAgICAgICAg
dGhpcy5iaW5kU2FtcGxlcnMoZWZmZWN0KTsKKyAgICAgICAgdGhpcy5fY3VycmVudEVmZmVjdCA9
IGVmZmVjdDsKKyAgICAgICAgaWYgKGVmZmVjdC5vbkJpbmQpIHsKKyAgICAgICAgICAgIGVmZmVj
dC5vbkJpbmQoZWZmZWN0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZWZmZWN0Ll9vbkJpbmRP
YnNlcnZhYmxlKSB7CisgICAgICAgICAgICBlZmZlY3QuX29uQmluZE9ic2VydmFibGUubm90aWZ5
T2JzZXJ2ZXJzKGVmZmVjdCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
dCB0aGUgdmFsdWUgb2YgYW4gdW5pZm9ybSB0byBhbiBhcnJheSBvZiBpbnQzMgorICAgICAqIEBw
YXJhbSB1bmlmb3JtIGRlZmluZXMgdGhlIHdlYkdMIHVuaWZvcm0gbG9jYXRpb24gd2hlcmUgdG8g
c3RvcmUgdGhlIHZhbHVlCisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIGFycmF5IG9m
IGludDMyIHRvIHN0b3JlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXRJbnRBcnJh
eSA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3Jt
MWl2KHVuaWZvcm0sIGFycmF5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFs
dWUgb2YgYW4gdW5pZm9ybSB0byBhbiBhcnJheSBvZiBpbnQzMiAoc3RvcmVkIGFzIHZlYzIpCisg
ICAgICogQHBhcmFtIHVuaWZvcm0gZGVmaW5lcyB0aGUgd2ViR0wgdW5pZm9ybSBsb2NhdGlvbiB3
aGVyZSB0byBzdG9yZSB0aGUgdmFsdWUKKyAgICAgKiBAcGFyYW0gYXJyYXkgZGVmaW5lcyB0aGUg
YXJyYXkgb2YgaW50MzIgdG8gc3RvcmUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNl
dEludEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVu
aWZvcm0gfHwgYXJyYXkubGVuZ3RoICUgMiAhPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm0yaXYodW5pZm9ybSwgYXJyYXkpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhbiB1bmlmb3JtIHRvIGFu
IGFycmF5IG9mIGludDMyIChzdG9yZWQgYXMgdmVjMykKKyAgICAgKiBAcGFyYW0gdW5pZm9ybSBk
ZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRoZSB2YWx1
ZQorICAgICAqIEBwYXJhbSBhcnJheSBkZWZpbmVzIHRoZSBhcnJheSBvZiBpbnQzMiB0byBzdG9y
ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0SW50QXJyYXkzID0gZnVuY3Rpb24g
KHVuaWZvcm0sIGFycmF5KSB7CisgICAgICAgIGlmICghdW5pZm9ybSB8fCBhcnJheS5sZW5ndGgg
JSAzICE9PSAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZ2wudW5pZm9ybTNpdih1bmlmb3JtLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXQgdGhlIHZhbHVlIG9mIGFuIHVuaWZvcm0gdG8gYW4gYXJyYXkgb2YgaW50MzIgKHN0b3Jl
ZCBhcyB2ZWM0KQorICAgICAqIEBwYXJhbSB1bmlmb3JtIGRlZmluZXMgdGhlIHdlYkdMIHVuaWZv
cm0gbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgdGhlIHZhbHVlCisgICAgICogQHBhcmFtIGFycmF5
IGRlZmluZXMgdGhlIGFycmF5IG9mIGludDMyIHRvIHN0b3JlCisgICAgICovCisgICAgRW5naW5l
LnByb3RvdHlwZS5zZXRJbnRBcnJheTQgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAg
ICAgICAgaWYgKCF1bmlmb3JtIHx8IGFycmF5Lmxlbmd0aCAlIDQgIT09IDApIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3JtNGl2KHVuaWZv
cm0sIGFycmF5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYW4g
dW5pZm9ybSB0byBhbiBhcnJheSBvZiBmbG9hdDMyCisgICAgICogQHBhcmFtIHVuaWZvcm0gZGVm
aW5lcyB0aGUgd2ViR0wgdW5pZm9ybSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUgdmFsdWUK
KyAgICAgKiBAcGFyYW0gYXJyYXkgZGVmaW5lcyB0aGUgYXJyYXkgb2YgZmxvYXQzMiB0byBzdG9y
ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXRBcnJheSA9IGZ1bmN0aW9u
ICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3JtMWZ2KHVuaWZvcm0s
IGFycmF5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYW4gdW5p
Zm9ybSB0byBhbiBhcnJheSBvZiBmbG9hdDMyIChzdG9yZWQgYXMgdmVjMikKKyAgICAgKiBAcGFy
YW0gdW5pZm9ybSBkZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRvIHN0
b3JlIHRoZSB2YWx1ZQorICAgICAqIEBwYXJhbSBhcnJheSBkZWZpbmVzIHRoZSBhcnJheSBvZiBm
bG9hdDMyIHRvIHN0b3JlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXRGbG9hdEFy
cmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVuaWZvcm0g
fHwgYXJyYXkubGVuZ3RoICUgMiAhPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm0yZnYodW5pZm9ybSwgYXJyYXkpOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhbiB1bmlmb3JtIHRvIGFuIGFycmF5
IG9mIGZsb2F0MzIgKHN0b3JlZCBhcyB2ZWMzKQorICAgICAqIEBwYXJhbSB1bmlmb3JtIGRlZmlu
ZXMgdGhlIHdlYkdMIHVuaWZvcm0gbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgdGhlIHZhbHVlCisg
ICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIGFycmF5IG9mIGZsb2F0MzIgdG8gc3RvcmUK
KyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0QXJyYXkzID0gZnVuY3Rpb24g
KHVuaWZvcm0sIGFycmF5KSB7CisgICAgICAgIGlmICghdW5pZm9ybSB8fCBhcnJheS5sZW5ndGgg
JSAzICE9PSAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZ2wudW5pZm9ybTNmdih1bmlmb3JtLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXQgdGhlIHZhbHVlIG9mIGFuIHVuaWZvcm0gdG8gYW4gYXJyYXkgb2YgZmxvYXQzMiAoc3Rv
cmVkIGFzIHZlYzQpCisgICAgICogQHBhcmFtIHVuaWZvcm0gZGVmaW5lcyB0aGUgd2ViR0wgdW5p
Zm9ybSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUgdmFsdWUKKyAgICAgKiBAcGFyYW0gYXJy
YXkgZGVmaW5lcyB0aGUgYXJyYXkgb2YgZmxvYXQzMiB0byBzdG9yZQorICAgICAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTQgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkp
IHsKKyAgICAgICAgaWYgKCF1bmlmb3JtIHx8IGFycmF5Lmxlbmd0aCAlIDQgIT09IDApIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3JtNGZ2
KHVuaWZvcm0sIGFycmF5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFsdWUg
b2YgYW4gdW5pZm9ybSB0byBhbiBhcnJheSBvZiBudW1iZXIKKyAgICAgKiBAcGFyYW0gdW5pZm9y
bSBkZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRoZSB2
YWx1ZQorICAgICAqIEBwYXJhbSBhcnJheSBkZWZpbmVzIHRoZSBhcnJheSBvZiBudW1iZXIgdG8g
c3RvcmUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldEFycmF5ID0gZnVuY3Rpb24g
KHVuaWZvcm0sIGFycmF5KSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm0xZnYodW5pZm9ybSwg
YXJyYXkpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhbiB1bmlm
b3JtIHRvIGFuIGFycmF5IG9mIG51bWJlciAoc3RvcmVkIGFzIHZlYzIpCisgICAgICogQHBhcmFt
IHVuaWZvcm0gZGVmaW5lcyB0aGUgd2ViR0wgdW5pZm9ybSBsb2NhdGlvbiB3aGVyZSB0byBzdG9y
ZSB0aGUgdmFsdWUKKyAgICAgKiBAcGFyYW0gYXJyYXkgZGVmaW5lcyB0aGUgYXJyYXkgb2YgbnVt
YmVyIHRvIHN0b3JlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXRBcnJheTIgPSBm
dW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtIHx8IGFycmF5
Lmxlbmd0aCAlIDIgIT09IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9nbC51bmlmb3JtMmZ2KHVuaWZvcm0sIGFycmF5KTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYW4gdW5pZm9ybSB0byBhbiBhcnJheSBvZiBudW1i
ZXIgKHN0b3JlZCBhcyB2ZWMzKQorICAgICAqIEBwYXJhbSB1bmlmb3JtIGRlZmluZXMgdGhlIHdl
YkdMIHVuaWZvcm0gbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgdGhlIHZhbHVlCisgICAgICogQHBh
cmFtIGFycmF5IGRlZmluZXMgdGhlIGFycmF5IG9mIG51bWJlciB0byBzdG9yZQorICAgICAqLwor
ICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5
KSB7CisgICAgICAgIGlmICghdW5pZm9ybSB8fCBhcnJheS5sZW5ndGggJSAzICE9PSAwKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2wudW5pZm9ybTNm
dih1bmlmb3JtLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHZhbHVl
IG9mIGFuIHVuaWZvcm0gdG8gYW4gYXJyYXkgb2YgbnVtYmVyIChzdG9yZWQgYXMgdmVjNCkKKyAg
ICAgKiBAcGFyYW0gdW5pZm9ybSBkZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdo
ZXJlIHRvIHN0b3JlIHRoZSB2YWx1ZQorICAgICAqIEBwYXJhbSBhcnJheSBkZWZpbmVzIHRoZSBh
cnJheSBvZiBudW1iZXIgdG8gc3RvcmUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNl
dEFycmF5NCA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVuaWZv
cm0gfHwgYXJyYXkubGVuZ3RoICUgNCAhPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm00ZnYodW5pZm9ybSwgYXJyYXkpOworICAg
IH07CisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhbiB1bmlmb3JtIHRvIGFuIGFy
cmF5IG9mIGZsb2F0MzIgKHN0b3JlZCBhcyBtYXRyaWNlcykKKyAgICAgKiBAcGFyYW0gdW5pZm9y
bSBkZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRoZSB2
YWx1ZQorICAgICAqIEBwYXJhbSBtYXRyaWNlcyBkZWZpbmVzIHRoZSBhcnJheSBvZiBmbG9hdDMy
IHRvIHN0b3JlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXRNYXRyaWNlcyA9IGZ1
bmN0aW9uICh1bmlmb3JtLCBtYXRyaWNlcykgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3JtTWF0
cml4NGZ2KHVuaWZvcm0sIGZhbHNlLCBtYXRyaWNlcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXQgdGhlIHZhbHVlIG9mIGFuIHVuaWZvcm0gdG8gYSBtYXRyaXggKDN4MykKKyAgICAgKiBA
cGFyYW0gdW5pZm9ybSBkZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRv
IHN0b3JlIHRoZSB2YWx1ZQorICAgICAqIEBwYXJhbSBtYXRyaXggZGVmaW5lcyB0aGUgRmxvYXQz
MkFycmF5IHJlcHJlc2VudGluZyB0aGUgM3gzIG1hdHJpeCB0byBzdG9yZQorICAgICAqLworICAg
IEVuZ2luZS5wcm90b3R5cGUuc2V0TWF0cml4M3gzID0gZnVuY3Rpb24gKHVuaWZvcm0sIG1hdHJp
eCkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3JtTWF0cml4M2Z2KHVuaWZvcm0sIGZhbHNlLCBt
YXRyaXgpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhbiB1bmlm
b3JtIHRvIGEgbWF0cml4ICgyeDIpCisgICAgICogQHBhcmFtIHVuaWZvcm0gZGVmaW5lcyB0aGUg
d2ViR0wgdW5pZm9ybSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUgdmFsdWUKKyAgICAgKiBA
cGFyYW0gbWF0cml4IGRlZmluZXMgdGhlIEZsb2F0MzJBcnJheSByZXByZXNlbnRpbmcgdGhlIDJ4
MiBtYXRyaXggdG8gc3RvcmUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldE1hdHJp
eDJ4MiA9IGZ1bmN0aW9uICh1bmlmb3JtLCBtYXRyaXgpIHsKKyAgICAgICAgaWYgKCF1bmlmb3Jt
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2wudW5p
Zm9ybU1hdHJpeDJmdih1bmlmb3JtLCBmYWxzZSwgbWF0cml4KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYW4gdW5pZm9ybSB0byBhIG51bWJlciAoaW50KQorICAg
ICAqIEBwYXJhbSB1bmlmb3JtIGRlZmluZXMgdGhlIHdlYkdMIHVuaWZvcm0gbG9jYXRpb24gd2hl
cmUgdG8gc3RvcmUgdGhlIHZhbHVlCisgICAgICogQHBhcmFtIHZhbHVlIGRlZmluZXMgdGhlIGlu
dCBudW1iZXIgdG8gc3RvcmUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldEludCA9
IGZ1bmN0aW9uICh1bmlmb3JtLCB2YWx1ZSkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3JtMWko
dW5pZm9ybSwgdmFsdWUpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBv
ZiBhbiB1bmlmb3JtIHRvIGEgbnVtYmVyIChmbG9hdCkKKyAgICAgKiBAcGFyYW0gdW5pZm9ybSBk
ZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRoZSB2YWx1
ZQorICAgICAqIEBwYXJhbSB2YWx1ZSBkZWZpbmVzIHRoZSBmbG9hdCBudW1iZXIgdG8gc3RvcmUK
KyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0ID0gZnVuY3Rpb24gKHVuaWZv
cm0sIHZhbHVlKSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm0xZih1bmlmb3JtLCB2YWx1ZSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHZhbHVlIG9mIGFuIHVuaWZvcm0gdG8g
YSB2ZWMyCisgICAgICogQHBhcmFtIHVuaWZvcm0gZGVmaW5lcyB0aGUgd2ViR0wgdW5pZm9ybSBs
b2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUgdmFsdWUKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVz
IHRoZSAxc3QgY29tcG9uZW50IG9mIHRoZSB2YWx1ZQorICAgICAqIEBwYXJhbSB5IGRlZmluZXMg
dGhlIDJuZCBjb21wb25lbnQgb2YgdGhlIHZhbHVlCisgICAgICovCisgICAgRW5naW5lLnByb3Rv
dHlwZS5zZXRGbG9hdDIgPSBmdW5jdGlvbiAodW5pZm9ybSwgeCwgeSkgeworICAgICAgICBpZiAo
IXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9nbC51bmlmb3JtMmYodW5pZm9ybSwgeCwgeSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXQgdGhlIHZhbHVlIG9mIGFuIHVuaWZvcm0gdG8gYSB2ZWMzCisgICAgICogQHBhcmFtIHVuaWZv
cm0gZGVmaW5lcyB0aGUgd2ViR0wgdW5pZm9ybSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUg
dmFsdWUKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSAxc3QgY29tcG9uZW50IG9mIHRoZSB2
YWx1ZQorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgdGhlIDJuZCBjb21wb25lbnQgb2YgdGhlIHZh
bHVlCisgICAgICogQHBhcmFtIHogZGVmaW5lcyB0aGUgM3JkIGNvbXBvbmVudCBvZiB0aGUgdmFs
dWUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0MyA9IGZ1bmN0aW9uICh1
bmlmb3JtLCB4LCB5LCB6KSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm0zZih1bmlmb3JtLCB4
LCB5LCB6KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYW4gdW5p
Zm9ybSB0byBhIGJvb2xlYW4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybSBkZWZpbmVzIHRoZSB3ZWJH
TCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRoZSB2YWx1ZQorICAgICAqIEBwYXJh
bSBib29sIGRlZmluZXMgdGhlIGJvb2xlYW4gdG8gc3RvcmUKKyAgICAgKi8KKyAgICBFbmdpbmUu
cHJvdG90eXBlLnNldEJvb2wgPSBmdW5jdGlvbiAodW5pZm9ybSwgYm9vbCkgeworICAgICAgICBp
ZiAoIXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9nbC51bmlmb3JtMWkodW5pZm9ybSwgYm9vbCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXQgdGhlIHZhbHVlIG9mIGFuIHVuaWZvcm0gdG8gYSB2ZWM0CisgICAgICogQHBhcmFtIHVu
aWZvcm0gZGVmaW5lcyB0aGUgd2ViR0wgdW5pZm9ybSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0
aGUgdmFsdWUKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSAxc3QgY29tcG9uZW50IG9mIHRo
ZSB2YWx1ZQorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgdGhlIDJuZCBjb21wb25lbnQgb2YgdGhl
IHZhbHVlCisgICAgICogQHBhcmFtIHogZGVmaW5lcyB0aGUgM3JkIGNvbXBvbmVudCBvZiB0aGUg
dmFsdWUKKyAgICAgKiBAcGFyYW0gdyBkZWZpbmVzIHRoZSA0dGggY29tcG9uZW50IG9mIHRoZSB2
YWx1ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXQ0ID0gZnVuY3Rpb24g
KHVuaWZvcm0sIHgsIHksIHosIHcpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2wudW5pZm9ybTRmKHVuaWZv
cm0sIHgsIHksIHosIHcpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIENvbG9yNCBv
biBhIHVuaWZvcm0gdmFyaWFibGUKKyAgICAgKiBAcGFyYW0gdW5pZm9ybSBkZWZpbmVzIHRoZSB1
bmlmb3JtIGxvY2F0aW9uCisgICAgICogQHBhcmFtIGNvbG9yNCBkZWZpbmVzIHRoZSB2YWx1ZSB0
byBiZSBzZXQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldERpcmVjdENvbG9yNCA9
IGZ1bmN0aW9uICh1bmlmb3JtLCBjb2xvcjQpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2wudW5pZm9ybTRm
KHVuaWZvcm0sIGNvbG9yNC5yLCBjb2xvcjQuZywgY29sb3I0LmIsIGNvbG9yNC5hKTsKKyAgICB9
OworICAgIC8vIFN0YXRlcworICAgIC8qKgorICAgICAqIFNldCB2YXJpb3VzIHN0YXRlcyB0byB0
aGUgd2ViR0wgY29udGV4dAorICAgICAqIEBwYXJhbSBjdWxsaW5nIGRlZmluZXMgYmFja2ZhY2Ug
Y3VsbGluZyBzdGF0ZQorICAgICAqIEBwYXJhbSB6T2Zmc2V0IGRlZmluZXMgdGhlIHZhbHVlIHRv
IGFwcGx5IHRvIHpPZmZzZXQgKDAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gZm9yY2UgZGVm
aW5lcyBpZiBzdGF0ZXMgbXVzdCBiZSBhcHBsaWVkIGV2ZW4gaWYgY2FjaGUgaXMgdXAgdG8gZGF0
ZQorICAgICAqIEBwYXJhbSByZXZlcnNlU2lkZSBkZWZpbmVzIGlmIGN1bGxpbmcgbXVzdCBiZSBy
ZXZlcnNlZCAoQ0NXIGluc3RlYWQgb2YgQ1cgYW5kIENXIGluc3RlYWQgb2YgQ0NXKQorICAgICAq
LworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAoY3VsbGluZywgek9m
ZnNldCwgZm9yY2UsIHJldmVyc2VTaWRlKSB7CisgICAgICAgIGlmICh6T2Zmc2V0ID09PSB2b2lk
IDApIHsgek9mZnNldCA9IDA7IH0KKyAgICAgICAgaWYgKHJldmVyc2VTaWRlID09PSB2b2lkIDAp
IHsgcmV2ZXJzZVNpZGUgPSBmYWxzZTsgfQorICAgICAgICAvLyBDdWxsaW5nCisgICAgICAgIGlm
ICh0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5jdWxsICE9PSBjdWxsaW5nIHx8IGZvcmNlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5jdWxsID0gY3VsbGluZzsKKyAgICAg
ICAgfQorICAgICAgICAvLyBDdWxsIGZhY2UKKyAgICAgICAgdmFyIGN1bGxGYWNlID0gdGhpcy5j
dWxsQmFja0ZhY2VzID8gdGhpcy5fZ2wuQkFDSyA6IHRoaXMuX2dsLkZST05UOworICAgICAgICBp
ZiAodGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUuY3VsbEZhY2UgIT09IGN1bGxGYWNlIHx8IGZvcmNl
KSB7CisgICAgICAgICAgICB0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5jdWxsRmFjZSA9IGN1bGxG
YWNlOworICAgICAgICB9CisgICAgICAgIC8vIFogb2Zmc2V0CisgICAgICAgIHRoaXMuc2V0Wk9m
ZnNldCh6T2Zmc2V0KTsKKyAgICAgICAgLy8gRnJvbnQgZmFjZQorICAgICAgICB2YXIgZnJvbnRG
YWNlID0gcmV2ZXJzZVNpZGUgPyB0aGlzLl9nbC5DVyA6IHRoaXMuX2dsLkNDVzsKKyAgICAgICAg
aWYgKHRoaXMuX2RlcHRoQ3VsbGluZ1N0YXRlLmZyb250RmFjZSAhPT0gZnJvbnRGYWNlIHx8IGZv
cmNlKSB7CisgICAgICAgICAgICB0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5mcm9udEZhY2UgPSBm
cm9udEZhY2U7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgeiBv
ZmZzZXQgdG8gYXBwbHkgdG8gY3VycmVudCByZW5kZXJpbmcKKyAgICAgKiBAcGFyYW0gdmFsdWUg
ZGVmaW5lcyB0aGUgb2Zmc2V0IHRvIGFwcGx5CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlw
ZS5zZXRaT2Zmc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2RlcHRoQ3Vs
bGluZ1N0YXRlLnpPZmZzZXQgPSB2YWx1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMg
dGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHpPZmZzZXQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3Vy
cmVudCB6T2Zmc2V0IHN0YXRlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRaT2Zm
c2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGhDdWxsaW5nU3Rh
dGUuek9mZnNldDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIGRl
cHRoIGJ1ZmZlcmluZworICAgICAqIEBwYXJhbSBlbmFibGUgZGVmaW5lcyB0aGUgc3RhdGUgdG8g
c2V0CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXREZXB0aEJ1ZmZlciA9IGZ1bmN0
aW9uIChlbmFibGUpIHsKKyAgICAgICAgdGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUuZGVwdGhUZXN0
ID0gZW5hYmxlOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNh
dGluZyBpZiBkZXB0aCB3cml0aW5nIGlzIGVuYWJsZWQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3Vy
cmVudCBkZXB0aCB3cml0aW5nIHN0YXRlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5n
ZXREZXB0aFdyaXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGhD
dWxsaW5nU3RhdGUuZGVwdGhNYXNrOworICAgIH07CisgICAgLyoqCisgICAgICogRW5hYmxlIG9y
IGRpc2FibGUgZGVwdGggd3JpdGluZworICAgICAqIEBwYXJhbSBlbmFibGUgZGVmaW5lcyB0aGUg
c3RhdGUgdG8gc2V0CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXREZXB0aFdyaXRl
ID0gZnVuY3Rpb24gKGVuYWJsZSkgeworICAgICAgICB0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5k
ZXB0aE1hc2sgPSBlbmFibGU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFbmFibGUgb3IgZGlz
YWJsZSBjb2xvciB3cml0aW5nCisgICAgICogQHBhcmFtIGVuYWJsZSBkZWZpbmVzIHRoZSBzdGF0
ZSB0byBzZXQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldENvbG9yV3JpdGUgPSBm
dW5jdGlvbiAoZW5hYmxlKSB7CisgICAgICAgIHRoaXMuX2dsLmNvbG9yTWFzayhlbmFibGUsIGVu
YWJsZSwgZW5hYmxlLCBlbmFibGUpOworICAgICAgICB0aGlzLl9jb2xvcldyaXRlID0gZW5hYmxl
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBj
b2xvciB3cml0aW5nIGlzIGVuYWJsZWQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBjb2xv
ciB3cml0aW5nIHN0YXRlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRDb2xvcldy
aXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fY29sb3JXcml0ZTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNldHMgYWxwaGEgY29uc3RhbnRzIHVzZWQgYnkgc29tZSBh
bHBoYSBibGVuZGluZyBtb2RlcworICAgICAqIEBwYXJhbSByIGRlZmluZXMgdGhlIHJlZCBjb21w
b25lbnQKKyAgICAgKiBAcGFyYW0gZyBkZWZpbmVzIHRoZSBncmVlbiBjb21wb25lbnQKKyAgICAg
KiBAcGFyYW0gYiBkZWZpbmVzIHRoZSBibHVlIGNvbXBvbmVudAorICAgICAqIEBwYXJhbSBhIGRl
ZmluZXMgdGhlIGFscGhhIGNvbXBvbmVudAorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUu
c2V0QWxwaGFDb25zdGFudHMgPSBmdW5jdGlvbiAociwgZywgYiwgYSkgeworICAgICAgICB0aGlz
Ll9hbHBoYVN0YXRlLnNldEFscGhhQmxlbmRDb25zdGFudHMociwgZywgYiwgYSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGFscGhhIG1vZGUKKyAgICAgKiBAcGFy
YW0gbW9kZSBkZWZpbmVzIHRoZSBtb2RlIHRvIHVzZSAob25lIG9mIHRoZSBFbmdpbmUuQUxQSEFf
WFhYKQorICAgICAqIEBwYXJhbSBub0RlcHRoV3JpdGVDaGFuZ2UgZGVmaW5lcyBpZiBkZXB0aCB3
cml0aW5nIHN0YXRlIHNob3VsZCByZW1haW5zIHVuY2hhbmdlZCAoZmFsc2UgYnkgZGVmYXVsdCkK
KyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9yZXNvdXJjZXMvdHJhbnNwYXJl
bmN5X2FuZF9ob3dfbWVzaGVzX2FyZV9yZW5kZXJlZAorICAgICAqLworICAgIEVuZ2luZS5wcm90
b3R5cGUuc2V0QWxwaGFNb2RlID0gZnVuY3Rpb24gKG1vZGUsIG5vRGVwdGhXcml0ZUNoYW5nZSkg
eworICAgICAgICBpZiAobm9EZXB0aFdyaXRlQ2hhbmdlID09PSB2b2lkIDApIHsgbm9EZXB0aFdy
aXRlQ2hhbmdlID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHRoaXMuX2FscGhhTW9kZSA9PT0gbW9k
ZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAobW9k
ZSkgeworICAgICAgICAgICAgY2FzZSBFbmdpbmUuQUxQSEFfRElTQUJMRToKKyAgICAgICAgICAg
ICAgICB0aGlzLl9hbHBoYVN0YXRlLmFscGhhQmxlbmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLkFMUEhBX1BSRU1VTFRJUExJRUQ6Cisg
ICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJh
bWV0ZXJzKHRoaXMuX2dsLk9ORSwgdGhpcy5fZ2wuT05FX01JTlVTX1NSQ19BTFBIQSwgdGhpcy5f
Z2wuT05FLCB0aGlzLl9nbC5PTkUpOworICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUu
YWxwaGFCbGVuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEVuZ2luZS5BTFBIQV9QUkVNVUxUSVBMSUVEX1BPUlRFUkRVRkY6CisgICAgICAgICAgICAg
ICAgdGhpcy5fYWxwaGFTdGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzKHRoaXMu
X2dsLk9ORSwgdGhpcy5fZ2wuT05FX01JTlVTX1NSQ19BTFBIQSwgdGhpcy5fZ2wuT05FLCB0aGlz
Ll9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0
YXRlLmFscGhhQmxlbmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBFbmdpbmUuQUxQSEFfQ09NQklORToKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBo
YVN0YXRlLnNldEFscGhhQmxlbmRGdW5jdGlvblBhcmFtZXRlcnModGhpcy5fZ2wuU1JDX0FMUEhB
LCB0aGlzLl9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBLCB0aGlzLl9nbC5PTkUsIHRoaXMuX2dsLk9O
RSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJsZW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLkFMUEhBX09O
RU9ORToKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnNldEFscGhhQmxlbmRGdW5j
dGlvblBhcmFtZXRlcnModGhpcy5fZ2wuT05FLCB0aGlzLl9nbC5PTkUsIHRoaXMuX2dsLlpFUk8s
IHRoaXMuX2dsLk9ORSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJs
ZW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRW5n
aW5lLkFMUEhBX0FERDoKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnNldEFscGhh
QmxlbmRGdW5jdGlvblBhcmFtZXRlcnModGhpcy5fZ2wuU1JDX0FMUEhBLCB0aGlzLl9nbC5PTkUs
IHRoaXMuX2dsLlpFUk8sIHRoaXMuX2dsLk9ORSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYWxw
aGFTdGF0ZS5hbHBoYUJsZW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRW5naW5lLkFMUEhBX1NVQlRSQUNUOgorICAgICAgICAgICAgICAgIHRoaXMu
X2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9nbC5aRVJP
LCB0aGlzLl9nbC5PTkVfTUlOVVNfU1JDX0NPTE9SLCB0aGlzLl9nbC5PTkUsIHRoaXMuX2dsLk9O
RSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJsZW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLkFMUEhBX01V
TFRJUExZOgorICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1
bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9nbC5EU1RfQ09MT1IsIHRoaXMuX2dsLlpFUk8sIHRoaXMu
X2dsLk9ORSwgdGhpcy5fZ2wuT05FKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRl
LmFscGhhQmxlbmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBFbmdpbmUuQUxQSEFfTUFYSU1JWkVEOgorICAgICAgICAgICAgICAgIHRoaXMuX2FscGhh
U3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9nbC5TUkNfQUxQSEEs
IHRoaXMuX2dsLk9ORV9NSU5VU19TUkNfQ09MT1IsIHRoaXMuX2dsLk9ORSwgdGhpcy5fZ2wuT05F
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLmFscGhhQmxlbmQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuQUxQSEFfSU5U
RVJQT0xBVEU6CisgICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5zZXRBbHBoYUJsZW5k
RnVuY3Rpb25QYXJhbWV0ZXJzKHRoaXMuX2dsLkNPTlNUQU5UX0NPTE9SLCB0aGlzLl9nbC5PTkVf
TUlOVVNfQ09OU1RBTlRfQ09MT1IsIHRoaXMuX2dsLkNPTlNUQU5UX0FMUEhBLCB0aGlzLl9nbC5P
TkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpOworICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3Rh
dGUuYWxwaGFCbGVuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEVuZ2luZS5BTFBIQV9TQ1JFRU5NT0RFOgorICAgICAgICAgICAgICAgIHRoaXMuX2Fs
cGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9nbC5PTkUsIHRo
aXMuX2dsLk9ORV9NSU5VU19TUkNfQ09MT1IsIHRoaXMuX2dsLk9ORSwgdGhpcy5fZ2wuT05FX01J
TlVTX1NSQ19BTFBIQSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJs
ZW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIW5vRGVwdGhXcml0ZUNoYW5nZSkgeworICAgICAgICAgICAgdGhpcy5zZXREZXB0aFdyaXRl
KG1vZGUgPT09IEVuZ2luZS5BTFBIQV9ESVNBQkxFKTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9hbHBoYU1vZGUgPSBtb2RlOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3Vy
cmVudCBhbHBoYSBtb2RlCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vcmVz
b3VyY2VzL3RyYW5zcGFyZW5jeV9hbmRfaG93X21lc2hlc19hcmVfcmVuZGVyZWQKKyAgICAgKiBA
cmV0dXJucyB0aGUgY3VycmVudCBhbHBoYSBtb2RlCisgICAgICovCisgICAgRW5naW5lLnByb3Rv
dHlwZS5nZXRBbHBoYU1vZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9h
bHBoYU1vZGU7CisgICAgfTsKKyAgICAvLyBUZXh0dXJlcworICAgIC8qKgorICAgICAqIENsZWFy
cyB0aGUgbGlzdCBvZiB0ZXh0dXJlIGFjY2Vzc2libGUgdGhyb3VnaCBlbmdpbmUuCisgICAgICog
VGhpcyBjYW4gaGVscCBwcmV2ZW50aW5nIHRleHR1cmUgbG9hZCBjb25mbGljdCBkdWUgdG8gbmFt
ZSBjb2xsaXNpb24uCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5jbGVhckludGVybmFs
VGV4dHVyZXNDYWNoZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxUZXh0
dXJlc0NhY2hlID0gW107CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSB0aGUgZW50aXJl
IGNhY2hlIHRvIGJlIGNsZWFyZWQKKyAgICAgKiBZb3Ugc2hvdWxkIG5vdCBoYXZlIHRvIHVzZSB0
aGlzIGZ1bmN0aW9uIHVubGVzcyB5b3VyIGVuZ2luZSBuZWVkcyB0byBzaGFyZSB0aGUgd2ViR0wg
Y29udGV4dCB3aXRoIGFub3RoZXIgZW5naW5lCisgICAgICogQHBhcmFtIGJydXRlRm9yY2UgZGVm
aW5lcyBhIGJvb2xlYW4gdG8gZm9yY2UgY2xlYXJpbmcgQUxMIGNhY2hlcyAoaW5jbHVkaW5nIHN0
ZW5jaWwsIGRldG9oIGFuZCBhbHBoYSBzdGF0ZXMpCisgICAgICovCisgICAgRW5naW5lLnByb3Rv
dHlwZS53aXBlQ2FjaGVzID0gZnVuY3Rpb24gKGJydXRlRm9yY2UpIHsKKyAgICAgICAgaWYgKHRo
aXMucHJldmVudENhY2hlV2lwZUJldHdlZW5GcmFtZXMgJiYgIWJydXRlRm9yY2UpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0ID0g
bnVsbDsKKyAgICAgICAgdGhpcy5fdmlld3BvcnRDYWNoZWQueCA9IDA7CisgICAgICAgIHRoaXMu
X3ZpZXdwb3J0Q2FjaGVkLnkgPSAwOworICAgICAgICB0aGlzLl92aWV3cG9ydENhY2hlZC56ID0g
MDsKKyAgICAgICAgdGhpcy5fdmlld3BvcnRDYWNoZWQudyA9IDA7CisgICAgICAgIGlmIChicnV0
ZUZvcmNlKSB7CisgICAgICAgICAgICB0aGlzLnJlc2V0VGV4dHVyZUNhY2hlKCk7CisgICAgICAg
ICAgICB0aGlzLl9jdXJyZW50UHJvZ3JhbSA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl9zdGVu
Y2lsU3RhdGUucmVzZXQoKTsKKyAgICAgICAgICAgIHRoaXMuX2RlcHRoQ3VsbGluZ1N0YXRlLnJl
c2V0KCk7CisgICAgICAgICAgICB0aGlzLnNldERlcHRoRnVuY3Rpb25Ub0xlc3NPckVxdWFsKCk7
CisgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnJlc2V0KCk7CisgICAgICAgICAgICB0aGlz
Ll91bnBhY2tGbGlwWUNhY2hlZCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVz
ZXRWZXJ0ZXhCdWZmZXJCaW5kaW5nKCk7CisgICAgICAgIHRoaXMuX2NhY2hlZEluZGV4QnVmZmVy
ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2FjaGVkRWZmZWN0Rm9yVmVydGV4QnVmZmVycyA9IG51
bGw7CisgICAgICAgIHRoaXMuX3VuYmluZFZlcnRleEFycmF5T2JqZWN0KCk7CisgICAgICAgIHRo
aXMuYmluZEluZGV4QnVmZmVyKG51bGwpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0IHRo
ZSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IHRvIHVzZSwgYmFzZWQgb24gdGhlIGZvcm1hdHMg
eW91IGhhdmUsIGFuZCB0aGUgZm9ybWF0cworICAgICAqIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdh
cmUgLyBicm93c2VyLgorICAgICAqCisgICAgICogS2hyb25vcyBUZXh0dXJlIENvbnRhaW5lciAo
Lmt0eCkgZmlsZXMgYXJlIHVzZWQgdG8gc3VwcG9ydCB0aGlzLiAgVGhpcyBmb3JtYXQgaGFzIHRo
ZQorICAgICAqIGFkdmFudGFnZSBvZiBiZWluZyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIE9w
ZW5HTC4gIEhlYWRlciBlbGVtZW50cyBkaXJlY3RseSBjb3JyZXNwb25kCisgICAgICogdG8gQVBJ
IGFyZ3VtZW50cyBuZWVkZWQgdG8gY29tcHJlc3NlZCB0ZXh0dXJlcy4gIFRoaXMgcHV0cyB0aGUg
YnVyZGVuIG9uIHRoZSBjb250YWluZXIKKyAgICAgKiBnZW5lcmF0b3IgdG8gaG91c2UgdGhlIGFy
Y2FuZSBjb2RlIGZvciBkZXRlcm1pbmluZyB0aGVzZSBmb3IgY3VycmVudCAmIGZ1dHVyZSBmb3Jt
YXRzLgorICAgICAqCisgICAgICogZm9yIGRlc2NyaXB0aW9uIHNlZSBodHRwczovL3d3dy5raHJv
bm9zLm9yZy9vcGVuZ2xlcy9zZGsvdG9vbHMvS1RYLworICAgICAqIGZvciBmaWxlIGxheW91dCBz
ZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL3Rvb2xzL0tUWC9maWxlX2Zv
cm1hdF9zcGVjLworICAgICAqCisgICAgICogTm90ZTogVGhlIHJlc3VsdCBvZiB0aGlzIGNhbGwg
aXMgbm90IHRha2VuIGludG8gYWNjb3VudCB3aGVuIGEgdGV4dHVyZSBpcyBiYXNlNjQuCisgICAg
ICoKKyAgICAgKiBAcGFyYW0gZm9ybWF0c0F2YWlsYWJsZSBkZWZpbmVzIHRoZSBsaXN0IG9mIHRo
b3NlIGZvcm1hdCBmYW1pbGllcyB5b3UgaGF2ZSBjcmVhdGVkCisgICAgICogb24geW91ciBzZXJ2
ZXIuICBTeW50YXg6ICctJyArIGZvcm1hdCBmYW1pbHkgKyAnLmt0eCcuICAoQ2FzZSBhbmQgb3Jk
ZXIgZG8gbm90IG1hdHRlci4pCisgICAgICoKKyAgICAgKiBDdXJyZW50IGZhbWlsaWVzIGFyZSBh
c3RjLCBkeHQsIHB2cnRjLCBldGMyLCAmIGV0YzEuCisgICAgICogQHJldHVybnMgVGhlIGV4dGVu
c2lvbiBzZWxlY3RlZC4KKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldFRleHR1cmVG
b3JtYXRUb1VzZSA9IGZ1bmN0aW9uIChmb3JtYXRzQXZhaWxhYmxlKSB7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBsZW4xID0gdGhpcy50ZXh0dXJlc1N1cHBvcnRlZC5sZW5ndGg7IGkgPCBsZW4x
OyBpKyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBsZW4yID0gZm9ybWF0c0F2YWls
YWJsZS5sZW5ndGg7IGogPCBsZW4yOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5f
dGV4dHVyZXNTdXBwb3J0ZWRbaV0gPT09IGZvcm1hdHNBdmFpbGFibGVbal0udG9Mb3dlckNhc2Uo
KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZUZvcm1hdEluVXNl
ID0gdGhpcy5fdGV4dHVyZXNTdXBwb3J0ZWRbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGFjdGl2ZWx5IHNldCBmb3JtYXQgdG8gbm90
aGluZywgdG8gYWxsb3cgdGhpcyB0byBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAg
Ly8gYW5kIHBvc3NpYmx5IGZhaWwgdGhlIDJuZCB0aW1lCisgICAgICAgIHRoaXMuX3RleHR1cmVG
b3JtYXRJblVzZSA9IG51bGw7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9nZXRTYW1wbGluZ1BhcmFtZXRlcnMg
PSBmdW5jdGlvbiAoc2FtcGxpbmdNb2RlLCBnZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAgICAgdmFy
IGdsID0gdGhpcy5fZ2w7CisgICAgICAgIHZhciBtYWdGaWx0ZXIgPSBnbC5ORUFSRVNUOworICAg
ICAgICB2YXIgbWluRmlsdGVyID0gZ2wuTkVBUkVTVDsKKyAgICAgICAgc3dpdGNoIChzYW1wbGlu
Z01vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVfQklMSU5FQVJfU0FNUExJ
TkdNT0RFOgorICAgICAgICAgICAgICAgIG1hZ0ZpbHRlciA9IGdsLkxJTkVBUjsKKyAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVNaXBNYXBzKSB7CisgICAgICAgICAgICAgICAgICAgIG1pbkZp
bHRlciA9IGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9IGdsLkxJ
TkVBUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEVuZ2luZS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01PREU6CisgICAgICAg
ICAgICAgICAgbWFnRmlsdGVyID0gZ2wuTElORUFSOworICAgICAgICAgICAgICAgIGlmIChnZW5l
cmF0ZU1pcE1hcHMpIHsKKyAgICAgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTElORUFS
X01JUE1BUF9MSU5FQVI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPSBnbC5MSU5FQVI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFbmdpbmUu
VEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5HTU9ERToKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIg
PSBnbC5ORUFSRVNUOworICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZU1pcE1hcHMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTkVBUkVTVF9NSVBNQVBfTElORUFSOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgbWluRmlsdGVyID0gZ2wuTkVBUkVTVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFX05FQVJFU1Rf
TkVBUkVTVF9NSVBORUFSRVNUOgorICAgICAgICAgICAgICAgIG1hZ0ZpbHRlciA9IGdsLk5FQVJF
U1Q7CisgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlTWlwTWFwcykgeworICAgICAgICAgICAg
ICAgICAgICBtaW5GaWx0ZXIgPSBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbWlu
RmlsdGVyID0gZ2wuTkVBUkVTVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFX05FQVJFU1RfTElORUFSX01J
UE5FQVJFU1Q6CisgICAgICAgICAgICAgICAgbWFnRmlsdGVyID0gZ2wuTkVBUkVTVDsKKyAgICAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdGVNaXBNYXBzKSB7CisgICAgICAgICAgICAgICAgICAgIG1p
bkZpbHRlciA9IGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9IGds
LkxJTkVBUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFX05FQVJFU1RfTElORUFSX01JUExJTkVBUjoKKyAg
ICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBnbC5ORUFSRVNUOworICAgICAgICAgICAgICAgIGlm
IChnZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wu
TElORUFSX01JUE1BUF9MSU5FQVI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPSBnbC5MSU5FQVI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBF
bmdpbmUuVEVYVFVSRV9ORUFSRVNUX0xJTkVBUjoKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIg
PSBnbC5ORUFSRVNUOworICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9IGdsLkxJTkVBUjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVfTkVB
UkVTVF9ORUFSRVNUOgorICAgICAgICAgICAgICAgIG1hZ0ZpbHRlciA9IGdsLk5FQVJFU1Q7Cisg
ICAgICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTkVBUkVTVDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVfTElORUFSX05FQVJFU1RfTUlQ
TkVBUkVTVDoKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBnbC5MSU5FQVI7CisgICAgICAg
ICAgICAgICAgaWYgKGdlbmVyYXRlTWlwTWFwcykgeworICAgICAgICAgICAgICAgICAgICBtaW5G
aWx0ZXIgPSBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wu
TkVBUkVTVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFX0xJTkVBUl9ORUFSRVNUX01JUExJTkVBUjoKKyAg
ICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBnbC5MSU5FQVI7CisgICAgICAgICAgICAgICAgaWYg
KGdlbmVyYXRlTWlwTWFwcykgeworICAgICAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPSBnbC5O
RUFSRVNUX01JUE1BUF9MSU5FQVI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPSBnbC5ORUFSRVNUOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
RW5naW5lLlRFWFRVUkVfTElORUFSX0xJTkVBUjoKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIg
PSBnbC5MSU5FQVI7CisgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTElORUFSOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRV9MSU5F
QVJfTkVBUkVTVDoKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBnbC5MSU5FQVI7CisgICAg
ICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTkVBUkVTVDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgbWluOiBtaW5GaWx0
ZXIsCisgICAgICAgICAgICBtYWc6IG1hZ0ZpbHRlcgorICAgICAgICB9OworICAgIH07CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9jcmVhdGVUZXh0dXJlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2dsLmNyZWF0ZVRleHR1cmUo
KTsKKyAgICAgICAgaWYgKCF0ZXh0dXJlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IlVuYWJsZSB0byBjcmVhdGUgdGV4dHVyZSIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
ZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICogVXN1YWxseSBjYWxsZWQgZnJvbSBUZXh0
dXJlLnRzLgorICAgICAqIFBhc3NlZCBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBXZWJHTFRleHR1
cmUKKyAgICAgKiBAcGFyYW0gdXJsQXJnIGRlZmluZXMgYSB2YWx1ZSB3aGljaCBjb250YWlucyBv
bmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgKiAqIEEgY29udmVudGlvbmFsIGh0dHAgVVJMLCBl
LmcuICdodHRwOi8vLi4uJyBvciAnZmlsZTovLy4uLicKKyAgICAgKiAqIEEgYmFzZTY0IHN0cmlu
ZyBvZiBpbi1saW5lIHRleHR1cmUgZGF0YSwgZS5nLiAnZGF0YTppbWFnZS9qcGc7YmFzZTY0LC8u
Li4nCisgICAgICogKiBBbiBpbmRpY2F0b3IgdGhhdCBkYXRhIGJlaW5nIHBhc3NlZCB1c2luZyB0
aGUgYnVmZmVyIHBhcmFtZXRlciwgZS5nLiAnZGF0YTpteXRleHR1cmUuanBnJworICAgICAqIEBw
YXJhbSBub01pcG1hcCBkZWZpbmVzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgbm8gbWlwbWFw
cyBzaGFsbCBiZSBnZW5lcmF0ZWQuICBJZ25vcmVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzLiAg
VGhleSBtdXN0IGJlIGluIHRoZSBmaWxlCisgICAgICogQHBhcmFtIGludmVydFkgd2hlbiB0cnVl
LCBpbWFnZSBpcyBmbGlwcGVkIHdoZW4gbG9hZGVkLiAgWW91IHByb2JhYmx5IHdhbnQgdHJ1ZS4g
Q2VydGFpbiBjb21wcmVzc2VkIHRleHR1cmVzIG1heSBpbnZlcnQgdGhpcyBpZiB0aGVpciBkZWZh
dWx0IGlzIGludmVydGVkIChlZy4ga3R4KQorICAgICAqIEBwYXJhbSBzY2VuZSBuZWVkZWQgZm9y
IGxvYWRpbmcgdG8gdGhlIGNvcnJlY3Qgc2NlbmUKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2Rl
IG1vZGUgd2l0aCBzaG91bGQgYmUgdXNlZCBzYW1wbGUgLyBhY2Nlc3MgdGhlIHRleHR1cmUgKERl
ZmF1bHQ6IFRleHR1cmUuVFJJTElORUFSX1NBTVBMSU5HTU9ERSkKKyAgICAgKiBAcGFyYW0gb25M
b2FkIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxl
dGlvbgorICAgICAqIEBwYXJhbSBvbkVycm9yIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGNhbGxl
ZCB1cG9uIGZhaWx1cmUKKyAgICAgKiBAcGFyYW0gYnVmZmVyIGEgc291cmNlIG9mIGEgZmlsZSBw
cmV2aW91c2x5IGZldGNoZWQgYXMgZWl0aGVyIGEgYmFzZTY0IHN0cmluZywgYW4gQXJyYXlCdWZm
ZXIgKGNvbXByZXNzZWQgb3IgaW1hZ2UgZm9ybWF0KSwgSFRNTEltYWdlRWxlbWVudCAoaW1hZ2Ug
Zm9ybWF0KSwgb3IgYSBCbG9iCisgICAgICogQHBhcmFtIGZhbGxiYWNrIGFuIGludGVybmFsIGFy
Z3VtZW50IGluIGNhc2UgdGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFnYWluLCBkdWUgdG8g
ZXRjMSBub3QgaGF2aW5nIGFscGhhIGNhcGFiaWxpdGllcworICAgICAqIEBwYXJhbSBmb3JtYXQg
aW50ZXJuYWwgZm9ybWF0LiAgRGVmYXVsdDogUkdCIHdoZW4gZXh0ZW5zaW9uIGlzICcuanBnJyBl
bHNlIFJHQkEuICBJZ25vcmVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCisgICAgICogQHBhcmFt
IGZvcmNlZEV4dGVuc2lvbiBkZWZpbmVzIHRoZSBleHRlbnNpb24gdG8gdXNlIHRvIHBpY2sgdGhl
IHJpZ2h0IGxvYWRlcgorICAgICAqIEBwYXJhbSBleGNsdWRlTG9hZGVycyBhcnJheSBvZiB0ZXh0
dXJlIGxvYWRlcnMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgd2hlbiBwaWNraW5nIGEgbG9hZGVy
IGZvciB0aGUgdGV4dHVyZSAoZGVmYXVsdDogZW1wdHkgYXJyYXkpCisgICAgICogQHJldHVybnMg
YSBJbnRlcm5hbFRleHR1cmUgZm9yIGFzc2lnbm1lbnQgYmFjayBpbnRvIEJBQllMT04uVGV4dHVy
ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuY3JlYXRlVGV4dHVyZSA9IGZ1bmN0aW9u
ICh1cmxBcmcsIG5vTWlwbWFwLCBpbnZlcnRZLCBzY2VuZSwgc2FtcGxpbmdNb2RlLCBvbkxvYWQs
IG9uRXJyb3IsIGJ1ZmZlciwgZmFsbGJhY2ssIGZvcm1hdCwgZm9yY2VkRXh0ZW5zaW9uLCBleGNs
dWRlTG9hZGVycykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoc2Ft
cGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gRW5naW5lLlRFWFRVUkVfVFJJ
TElORUFSX1NBTVBMSU5HTU9ERTsgfQorICAgICAgICBpZiAob25Mb2FkID09PSB2b2lkIDApIHsg
b25Mb2FkID0gbnVsbDsgfQorICAgICAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJy
b3IgPSBudWxsOyB9CisgICAgICAgIGlmIChidWZmZXIgPT09IHZvaWQgMCkgeyBidWZmZXIgPSBu
dWxsOyB9CisgICAgICAgIGlmIChmYWxsYmFjayA9PT0gdm9pZCAwKSB7IGZhbGxiYWNrID0gbnVs
bDsgfQorICAgICAgICBpZiAoZm9ybWF0ID09PSB2b2lkIDApIHsgZm9ybWF0ID0gbnVsbDsgfQor
ICAgICAgICBpZiAoZm9yY2VkRXh0ZW5zaW9uID09PSB2b2lkIDApIHsgZm9yY2VkRXh0ZW5zaW9u
ID0gbnVsbDsgfQorICAgICAgICBpZiAoZXhjbHVkZUxvYWRlcnMgPT09IHZvaWQgMCkgeyBleGNs
dWRlTG9hZGVycyA9IFtdOyB9CisgICAgICAgIHZhciB1cmwgPSBTdHJpbmcodXJsQXJnKTsgLy8g
YXNzaWduIGEgbmV3IHN0cmluZywgc28gdGhhdCB0aGUgb3JpZ2luYWwgaXMgc3RpbGwgYXZhaWxh
YmxlIGluIGNhc2Ugb2YgZmFsbGJhY2sKKyAgICAgICAgdmFyIGZyb21EYXRhID0gdXJsLnN1YnN0
cigwLCA1KSA9PT0gImRhdGE6IjsKKyAgICAgICAgdmFyIGZyb21CbG9iID0gdXJsLnN1YnN0cigw
LCA1KSA9PT0gImJsb2I6IjsKKyAgICAgICAgdmFyIGlzQmFzZTY0ID0gZnJvbURhdGEgJiYgdXJs
LmluZGV4T2YoIjtiYXNlNjQsIikgIT09IC0xOworICAgICAgICB2YXIgdGV4dHVyZSA9IGZhbGxi
YWNrID8gZmFsbGJhY2sgOiBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW50ZXJuYWxUZXh0dXJlIl0odGhpcywgX01h
dGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9VUkwpOworICAgICAgICAvLyBlc3Rh
Ymxpc2ggdGhlIGZpbGUgZXh0ZW5zaW9uLCBpZiBwb3NzaWJsZQorICAgICAgICB2YXIgbGFzdERv
dCA9IHVybC5sYXN0SW5kZXhPZignLicpOworICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZm9yY2Vk
RXh0ZW5zaW9uID8gZm9yY2VkRXh0ZW5zaW9uIDogKGxhc3REb3QgPiAtMSA/IHVybC5zdWJzdHJp
bmcobGFzdERvdCkudG9Mb3dlckNhc2UoKSA6ICIiKTsKKyAgICAgICAgdmFyIGxvYWRlciA9IG51
bGw7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBFbmdpbmUuX1RleHR1cmVMb2FkZXJz
OyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGF2YWlsYWJsZUxvYWRl
ciA9IF9hW19pXTsKKyAgICAgICAgICAgIGlmIChleGNsdWRlTG9hZGVycy5pbmRleE9mKGF2YWls
YWJsZUxvYWRlcikgPT09IC0xICYmIGF2YWlsYWJsZUxvYWRlci5jYW5Mb2FkKGV4dGVuc2lvbiwg
dGhpcy5fdGV4dHVyZUZvcm1hdEluVXNlLCBmYWxsYmFjaywgaXNCYXNlNjQsIGJ1ZmZlciA/IHRy
dWUgOiBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBhdmFpbGFibGVMb2FkZXI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGxvYWRlcikgeworICAgICAgICAgICAgdXJsID0gbG9hZGVyLnRyYW5zZm9ybVVybCh1
cmwsIHRoaXMuX3RleHR1cmVGb3JtYXRJblVzZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNj
ZW5lKSB7CisgICAgICAgICAgICBzY2VuZS5fYWRkUGVuZGluZ0RhdGEodGV4dHVyZSk7CisgICAg
ICAgIH0KKyAgICAgICAgdGV4dHVyZS51cmwgPSB1cmw7CisgICAgICAgIHRleHR1cmUuZ2VuZXJh
dGVNaXBNYXBzID0gIW5vTWlwbWFwOworICAgICAgICB0ZXh0dXJlLnNhbXBsaW5nTW9kZSA9IHNh
bXBsaW5nTW9kZTsKKyAgICAgICAgdGV4dHVyZS5pbnZlcnRZID0gaW52ZXJ0WTsKKyAgICAgICAg
aWYgKCF0aGlzLl9kb05vdEhhbmRsZUNvbnRleHRMb3N0KSB7CisgICAgICAgICAgICAvLyBLZWVw
IGEgbGluayB0byB0aGUgYnVmZmVyIG9ubHkgaWYgd2UgcGxhbiB0byBoYW5kbGUgY29udGV4dCBs
b3N0CisgICAgICAgICAgICB0ZXh0dXJlLl9idWZmZXIgPSBidWZmZXI7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIG9uTG9hZE9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgaWYgKG9uTG9hZCAmJiAh
ZmFsbGJhY2spIHsKKyAgICAgICAgICAgIG9uTG9hZE9ic2VydmVyID0gdGV4dHVyZS5vbkxvYWRl
ZE9ic2VydmFibGUuYWRkKG9uTG9hZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmYWxsYmFj
aykgeworICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxUZXh0dXJlc0NhY2hlLnB1c2godGV4dHVy
ZSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9uSW50ZXJuYWxFcnJvciA9IGZ1bmN0aW9uICht
ZXNzYWdlLCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIGlmIChzY2VuZSkgeworICAgICAgICAg
ICAgICAgIHNjZW5lLl9yZW1vdmVQZW5kaW5nRGF0YSh0ZXh0dXJlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZhciBjdXN0b21GYWxsYmFjayA9IGZhbHNlOworICAgICAgICAgICAgaWYg
KGxvYWRlcikgeworICAgICAgICAgICAgICAgIHZhciBmYWxsYmFja1VybCA9IGxvYWRlci5nZXRG
YWxsYmFja1RleHR1cmVVcmwodXJsLCBfdGhpcy5fdGV4dHVyZUZvcm1hdEluVXNlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZmFsbGJhY2tVcmwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQWRk
IEJhY2sKKyAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmFsbGJhY2sgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBleGNsdWRlTG9hZGVycy5wdXNoKGxvYWRlcik7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLmNyZWF0ZVRleHR1cmUodXJsQXJnLCBub01pcG1hcCwgdGV4dHVyZS5pbnZl
cnRZLCBzY2VuZSwgc2FtcGxpbmdNb2RlLCBudWxsLCBvbkVycm9yLCBidWZmZXIsIHRleHR1cmUs
IHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBleGNsdWRlTG9hZGVycyk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIWN1c3RvbUZhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgaWYgKG9uTG9hZE9ic2Vy
dmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUub25Mb2FkZWRPYnNlcnZhYmxlLnJl
bW92ZShvbkxvYWRPYnNlcnZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkVuZ2luZVN0
b3JlIl0uVXNlRmFsbGJhY2tUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmNy
ZWF0ZVRleHR1cmUoX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJF
bmdpbmVTdG9yZSJdLkZhbGxiYWNrVGV4dHVyZSwgbm9NaXBtYXAsIHRleHR1cmUuaW52ZXJ0WSwg
c2NlbmUsIHNhbXBsaW5nTW9kZSwgbnVsbCwgb25FcnJvciwgYnVmZmVyLCB0ZXh0dXJlKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChvbkVycm9yKSB7CisgICAgICAgICAgICAgICAgb25FcnJvciht
ZXNzYWdlIHx8ICJVbmtub3duIGVycm9yIiwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKyAgICAgICAgLy8gcHJvY2Vzc2luZyBmb3Igbm9uLWltYWdlIGZvcm1hdHMKKyAg
ICAgICAgaWYgKGxvYWRlcikgeworICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24g
KGRhdGEpIHsKKyAgICAgICAgICAgICAgICBsb2FkZXIubG9hZERhdGEoZGF0YSwgdGV4dHVyZSwg
ZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIGxvYWRNaXBtYXAsIGlzQ29tcHJlc3NlZCwgZG9uZSwg
bG9hZEZhaWxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEZhaWxlZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb25JbnRlcm5hbEVycm9yKCJUZXh0dXJlTG9hZGVyIGZhaWxl
ZCB0byBsb2FkIGRhdGEiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wcmVwYXJlV2ViR0xU
ZXh0dXJlKHRleHR1cmUsIHNjZW5lLCB3aWR0aCwgaGVpZ2h0LCB0ZXh0dXJlLmludmVydFksICFs
b2FkTWlwbWFwLCBpc0NvbXByZXNzZWQsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2FtcGxpbmdNb2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fbG9hZEZpbGUodXJs
LCBjYWxsYmFjaywgdW5kZWZpbmVkLCBzY2VuZSA/IHNjZW5lLm9mZmxpbmVQcm92aWRlciA6IHVu
ZGVmaW5lZCwgdHJ1ZSwgZnVuY3Rpb24gKHJlcXVlc3QsIGV4Y2VwdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICBvbkludGVybmFsRXJyb3IoIlVuYWJsZSB0byBsb2FkICIgKyAocmVxdWVzdCA/
IHJlcXVlc3QucmVzcG9uc2VVUkwgOiB1cmwsIGV4Y2VwdGlvbikpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
Ly9jYWxsYmFjayhidWZmZXIgYXMgQXJyYXlCdWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChi
dWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBjYWxs
YmFjayhidWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9uRXJyb3IoIlVuYWJsZSB0byBsb2FkOiBvbmx5IEFycmF5QnVmZmVyIHN1cHBvcnRlZCBo
ZXJlIiwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIg
b25sb2FkID0gZnVuY3Rpb24gKGltZykgeworICAgICAgICAgICAgICAgIGlmIChmcm9tQmxvYiAm
JiAhX3RoaXMuX2RvTm90SGFuZGxlQ29udGV4dExvc3QpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBzdG9yZSB0aGUgaW1hZ2UgaWYgd2UgbmVlZCB0byByZWJ1aWxkIHRoZSB0
ZXh0dXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgYSB3ZWJnbCBjb250ZXh0
IGxvc3QKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5fYnVmZmVyID0gaW1nOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBfdGhpcy5fcHJlcGFyZVdlYkdMVGV4dHVyZSh0
ZXh0dXJlLCBzY2VuZSwgaW1nLndpZHRoLCBpbWcuaGVpZ2h0LCB0ZXh0dXJlLmludmVydFksIG5v
TWlwbWFwLCBmYWxzZSwgZnVuY3Rpb24gKHBvdFdpZHRoLCBwb3RIZWlnaHQsIGNvbnRpbnVhdGlv
bkNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBnbCA9IF90aGlzLl9nbDsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGlzUG90ID0gKGltZy53aWR0aCA9PT0gcG90V2lkdGggJiYg
aW1nLmhlaWdodCA9PT0gcG90SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGludGVy
bmFsRm9ybWF0ID0gZm9ybWF0ID8gX3RoaXMuX2dldEludGVybmFsRm9ybWF0KGZvcm1hdCkgOiAo
KGV4dGVuc2lvbiA9PT0gIi5qcGciKSA/IGdsLlJHQiA6IGdsLlJHQkEpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNQb3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsLnRleEltYWdl
MkQoZ2wuVEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxGb3JtYXQsIGludGVybmFsRm9ybWF0LCBnbC5V
TlNJR05FRF9CWVRFLCBpbWcpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhciBtYXhUZXh0
dXJlU2l6ZSA9IF90aGlzLl9jYXBzLm1heFRleHR1cmVTaXplOworICAgICAgICAgICAgICAgICAg
ICBpZiAoaW1nLndpZHRoID4gbWF4VGV4dHVyZVNpemUgfHwgaW1nLmhlaWdodCA+IG1heFRleHR1
cmVTaXplIHx8IEVuZ2luZS5fUmVzY2FsZVBvc3RQcm9jZXNzRmFjdG9yeSA9PT0gbnVsbCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ByZXBhcmVXb3JraW5nQ2FudmFzKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLl93b3JraW5nQ2FudmFzIHx8ICFfdGhp
cy5fd29ya2luZ0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5fd29ya2luZ0NhbnZhcy53aWR0aCA9IHBvdFdpZHRoOworICAgICAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX3dvcmtpbmdDYW52YXMuaGVpZ2h0ID0gcG90SGVpZ2h0OworICAgICAg
ICAgICAgICAgICAgICAgICAgX3RoaXMuX3dvcmtpbmdDb250ZXh0LmRyYXdJbWFnZShpbWcsIDAs
IDAsIGltZy53aWR0aCwgaW1nLmhlaWdodCwgMCwgMCwgcG90V2lkdGgsIHBvdEhlaWdodCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGlu
dGVybmFsRm9ybWF0LCBpbnRlcm5hbEZvcm1hdCwgZ2wuVU5TSUdORURfQllURSwgX3RoaXMuX3dv
cmtpbmdDYW52YXMpOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS53aWR0aCA9IHBv
dFdpZHRoOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBwb3RIZWln
aHQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBVc2luZyBzaGFkZXJzIHdoZW4gcG9zc2libGUgdG8gcmVzY2FsZSBiZWNhdXNlIGNh
bnZhcy5kcmF3SW1hZ2UgaXMgbG9zc3kKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3Vy
Y2VfMSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJJbnRlcm5hbFRleHR1cmUiXShfdGhpcywgX01hdGVyaWFsc19U
ZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW50
ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9URU1QKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IF90aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIHNvdXJjZV8xLCB0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwg
MCwgaW50ZXJuYWxGb3JtYXQsIGludGVybmFsRm9ybWF0LCBnbC5VTlNJR05FRF9CWVRFLCBpbWcp
OworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Jlc2NhbGVUZXh0dXJlKHNvdXJjZV8x
LCB0ZXh0dXJlLCBzY2VuZSwgaW50ZXJuYWxGb3JtYXQsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcmVsZWFzZVRleHR1cmUoc291cmNlXzEpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRF
WFRVUkVfMkQsIHRleHR1cmUsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVhdGlvbkNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9LCBzYW1wbGluZ01vZGUpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IGlmICghZnJvbURhdGEgfHwgaXNCYXNlNjQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVy
IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICBvbmxv
YWQoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIF9NaXNjX2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTdfX1siRmlsZVRvb2xzIl0uTG9hZEltYWdlKHVybCwgb25sb2FkLCBvbkludGVybmFsRXJy
b3IsIHNjZW5lID8gc2NlbmUub2ZmbGluZVByb3ZpZGVyIDogbnVsbCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGJ1ZmZlciA9
PT0gInN0cmluZyIgfHwgYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZm
ZXIuaXNWaWV3KGJ1ZmZlcikgfHwgYnVmZmVyIGluc3RhbmNlb2YgQmxvYikgeworICAgICAgICAg
ICAgICAgIF9NaXNjX2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siRmls
ZVRvb2xzIl0uTG9hZEltYWdlKGJ1ZmZlciwgb25sb2FkLCBvbkludGVybmFsRXJyb3IsIHNjZW5l
ID8gc2NlbmUub2ZmbGluZVByb3ZpZGVyIDogbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBvbmxvYWQoYnVmZmVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEBoaWRkZW4KKyAgICAgKiBSZXNjYWxlcyBhIHRleHR1cmUKKyAgICAgKiBAcGFyYW0g
c291cmNlIGlucHV0IHRleHV0cmUKKyAgICAgKiBAcGFyYW0gZGVzdGluYXRpb24gZGVzdGluYXRp
b24gdGV4dHVyZQorICAgICAqIEBwYXJhbSBzY2VuZSBzY2VuZSB0byB1c2UgdG8gcmVuZGVyIHRo
ZSByZXNpemUKKyAgICAgKiBAcGFyYW0gaW50ZXJuYWxGb3JtYXQgZm9ybWF0IHRvIHVzZSB3aGVu
IHJlc2l6aW5nCisgICAgICogQHBhcmFtIG9uQ29tcGxldGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVk
IHdoZW4gcmVzaXplIGhhcyBjb21wbGV0ZWQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBl
Ll9yZXNjYWxlVGV4dHVyZSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3RpbmF0aW9uLCBzY2VuZSwg
aW50ZXJuYWxGb3JtYXQsIG9uQ29tcGxldGUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgdGhpcy5fZ2wudGV4UGFyYW1ldGVyaSh0aGlzLl9nbC5URVhUVVJFXzJELCB0aGlz
Ll9nbC5URVhUVVJFX01BR19GSUxURVIsIHRoaXMuX2dsLkxJTkVBUik7CisgICAgICAgIHRoaXMu
X2dsLnRleFBhcmFtZXRlcmkodGhpcy5fZ2wuVEVYVFVSRV8yRCwgdGhpcy5fZ2wuVEVYVFVSRV9N
SU5fRklMVEVSLCB0aGlzLl9nbC5MSU5FQVIpOworICAgICAgICB0aGlzLl9nbC50ZXhQYXJhbWV0
ZXJpKHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRoaXMuX2dsLlRFWFRVUkVfV1JBUF9TLCB0aGlzLl9n
bC5DTEFNUF9UT19FREdFKTsKKyAgICAgICAgdGhpcy5fZ2wudGV4UGFyYW1ldGVyaSh0aGlzLl9n
bC5URVhUVVJFXzJELCB0aGlzLl9nbC5URVhUVVJFX1dSQVBfVCwgdGhpcy5fZ2wuQ0xBTVBfVE9f
RURHRSk7CisgICAgICAgIHZhciBydHQgPSB0aGlzLmNyZWF0ZVJlbmRlclRhcmdldFRleHR1cmUo
eworICAgICAgICAgICAgd2lkdGg6IGRlc3RpbmF0aW9uLndpZHRoLAorICAgICAgICAgICAgaGVp
Z2h0OiBkZXN0aW5hdGlvbi5oZWlnaHQsCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIGdlbmVy
YXRlTWlwTWFwczogZmFsc2UsCisgICAgICAgICAgICB0eXBlOiBFbmdpbmUuVEVYVFVSRVRZUEVf
VU5TSUdORURfSU5ULAorICAgICAgICAgICAgc2FtcGxpbmdNb2RlOiBFbmdpbmUuVEVYVFVSRV9C
SUxJTkVBUl9TQU1QTElOR01PREUsCisgICAgICAgICAgICBnZW5lcmF0ZURlcHRoQnVmZmVyOiBm
YWxzZSwKKyAgICAgICAgICAgIGdlbmVyYXRlU3RlbmNpbEJ1ZmZlcjogZmFsc2UKKyAgICAgICAg
fSk7CisgICAgICAgIGlmICghdGhpcy5fcmVzY2FsZVBvc3RQcm9jZXNzICYmIEVuZ2luZS5fUmVz
Y2FsZVBvc3RQcm9jZXNzRmFjdG9yeSkgeworICAgICAgICAgICAgdGhpcy5fcmVzY2FsZVBvc3RQ
cm9jZXNzID0gRW5naW5lLl9SZXNjYWxlUG9zdFByb2Nlc3NGYWN0b3J5KHRoaXMpOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX3Jlc2NhbGVQb3N0UHJvY2Vzcy5nZXRFZmZlY3QoKS5leGVjdXRl
V2hlbkNvbXBpbGVkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl9yZXNjYWxlUG9z
dFByb2Nlc3Mub25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgICAgICBl
ZmZlY3QuX2JpbmRUZXh0dXJlKCJ0ZXh0dXJlU2FtcGxlciIsIHNvdXJjZSk7CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgdmFyIGhvc3RpbmdTY2VuZSA9IHNjZW5lOworICAgICAgICAgICAg
aWYgKCFob3N0aW5nU2NlbmUpIHsKKyAgICAgICAgICAgICAgICBob3N0aW5nU2NlbmUgPSBfdGhp
cy5zY2VuZXNbX3RoaXMuc2NlbmVzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaG9zdGluZ1NjZW5lLnBvc3RQcm9jZXNzTWFuYWdlci5kaXJlY3RSZW5kZXIoW190aGlz
Ll9yZXNjYWxlUG9zdFByb2Nlc3NdLCBydHQsIHRydWUpOworICAgICAgICAgICAgX3RoaXMuX2Jp
bmRUZXh0dXJlRGlyZWN0bHkoX3RoaXMuX2dsLlRFWFRVUkVfMkQsIGRlc3RpbmF0aW9uLCB0cnVl
KTsKKyAgICAgICAgICAgIF90aGlzLl9nbC5jb3B5VGV4SW1hZ2UyRChfdGhpcy5fZ2wuVEVYVFVS
RV8yRCwgMCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIGRlc3RpbmF0aW9uLndpZHRoLCBkZXN0aW5h
dGlvbi5oZWlnaHQsIDApOworICAgICAgICAgICAgX3RoaXMudW5CaW5kRnJhbWVidWZmZXIocnR0
KTsKKyAgICAgICAgICAgIF90aGlzLl9yZWxlYXNlVGV4dHVyZShydHQpOworICAgICAgICAgICAg
aWYgKG9uQ29tcGxldGUpIHsKKyAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHJh
dyB0ZXh0dXJlCisgICAgICogQHBhcmFtIGRhdGEgZGVmaW5lcyB0aGUgZGF0YSB0byBzdG9yZSBp
biB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSB3aWR0aCBkZWZpbmVzIHRoZSB3aWR0aCBvZiB0
aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgaGVpZ2h0IG9mIHRo
ZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGZvcm1hdCBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgdGhl
IGRhdGEKKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVNaXBNYXBzIGRlZmluZXMgaWYgdGhlIGVuZ2lu
ZSBzaG91bGQgZ2VuZXJhdGUgdGhlIG1pcCBsZXZlbHMKKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBk
ZWZpbmVzIGlmIGRhdGEgbXVzdCBiZSBzdG9yZWQgd2l0aCBZIGF4aXMgaW52ZXJ0ZWQKKyAgICAg
KiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZXMgdGhlIHJlcXVpcmVkIHNhbXBsaW5nIG1vZGUg
KFRleHR1cmUuTkVBUkVTVF9TQU1QTElOR01PREUgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0g
Y29tcHJlc3Npb24gZGVmaW5lcyB0aGUgY29tcHJlc3Npb24gdXNlZCAobnVsbCBieSBkZWZhdWx0
KQorICAgICAqIEBwYXJhbSB0eXBlIGRlZmluZXMgdGhlIHR5cGUgZm8gdGhlIGRhdGEgKEVuZ2lu
ZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQgYnkgZGVmYXVsdCkKKyAgICAgKiBAcmV0dXJucyB0
aGUgcmF3IHRleHR1cmUgaW5zaWRlIGFuIEludGVybmFsVGV4dHVyZQorICAgICAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUuY3JlYXRlUmF3VGV4dHVyZSA9IGZ1bmN0aW9uIChkYXRhLCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlLCBj
b21wcmVzc2lvbiwgdHlwZSkgeworICAgICAgICBpZiAoY29tcHJlc3Npb24gPT09IHZvaWQgMCkg
eyBjb21wcmVzc2lvbiA9IG51bGw7IH0KKyAgICAgICAgaWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0
eXBlID0gRW5naW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICB0aHJvdyBf
TWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siX0RldlRvb2xzIl0u
V2FybkltcG9ydCgiRW5naW5lLlJhd1RleHR1cmUiKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVu
ICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fdW5wYWNrRmxpcFkgPSBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgaWYgKHRoaXMuX3VucGFja0ZsaXBZQ2FjaGVkICE9PSB2YWx1ZSkgeworICAg
ICAgICAgICAgdGhpcy5fZ2wucGl4ZWxTdG9yZWkodGhpcy5fZ2wuVU5QQUNLX0ZMSVBfWV9XRUJH
TCwgdmFsdWUgPyAxIDogMCk7CisgICAgICAgICAgICBpZiAodGhpcy5lbmFibGVVbnBhY2tGbGlw
WUNhY2hlZCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3VucGFja0ZsaXBZQ2FjaGVkID0gdmFs
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICov
CisgICAgRW5naW5lLnByb3RvdHlwZS5fZ2V0VW5wYWNrQWxpZ25lbWVudCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2dsLmdldFBhcmFtZXRlcih0aGlzLl9nbC5VTlBBQ0tf
QUxJR05NRU5UKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBkeW5hbWljIHRl
eHR1cmUKKyAgICAgKiBAcGFyYW0gd2lkdGggZGVmaW5lcyB0aGUgd2lkdGggb2YgdGhlIHRleHR1
cmUKKyAgICAgKiBAcGFyYW0gaGVpZ2h0IGRlZmluZXMgdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVy
ZQorICAgICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMgZGVmaW5lcyBpZiB0aGUgZW5naW5lIHNo
b3VsZCBnZW5lcmF0ZSB0aGUgbWlwIGxldmVscworICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUg
ZGVmaW5lcyB0aGUgcmVxdWlyZWQgc2FtcGxpbmcgbW9kZSAoVGV4dHVyZS5ORUFSRVNUX1NBTVBM
SU5HTU9ERSBieSBkZWZhdWx0KQorICAgICAqIEByZXR1cm5zIHRoZSBkeW5hbWljIHRleHR1cmUg
aW5zaWRlIGFuIEludGVybmFsVGV4dHVyZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUu
Y3JlYXRlRHluYW1pY1RleHR1cmUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgZ2VuZXJhdGVN
aXBNYXBzLCBzYW1wbGluZ01vZGUpIHsKKyAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgX01hdGVy
aWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siSW50ZXJuYWxUZXh0dXJlIl0odGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFU
QVNPVVJDRV9EWU5BTUlDKTsKKyAgICAgICAgdGV4dHVyZS5iYXNlV2lkdGggPSB3aWR0aDsKKyAg
ICAgICAgdGV4dHVyZS5iYXNlSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBpZiAoZ2VuZXJhdGVN
aXBNYXBzKSB7CisgICAgICAgICAgICB3aWR0aCA9IHRoaXMubmVlZFBPVFRleHR1cmVzID8gRW5n
aW5lLkdldEV4cG9uZW50T2ZUd28od2lkdGgsIHRoaXMuX2NhcHMubWF4VGV4dHVyZVNpemUpIDog
d2lkdGg7CisgICAgICAgICAgICBoZWlnaHQgPSB0aGlzLm5lZWRQT1RUZXh0dXJlcyA/IEVuZ2lu
ZS5HZXRFeHBvbmVudE9mVHdvKGhlaWdodCwgdGhpcy5fY2Fwcy5tYXhUZXh0dXJlU2l6ZSkgOiBo
ZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gIHRoaXMucmVzZXRUZXh0dXJlQ2FjaGUoKTsK
KyAgICAgICAgdGV4dHVyZS53aWR0aCA9IHdpZHRoOworICAgICAgICB0ZXh0dXJlLmhlaWdodCA9
IGhlaWdodDsKKyAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gZmFsc2U7CisgICAgICAgIHRleHR1
cmUuZ2VuZXJhdGVNaXBNYXBzID0gZ2VuZXJhdGVNaXBNYXBzOworICAgICAgICB0ZXh0dXJlLnNh
bXBsaW5nTW9kZSA9IHNhbXBsaW5nTW9kZTsKKyAgICAgICAgdGhpcy51cGRhdGVUZXh0dXJlU2Ft
cGxpbmdNb2RlKHNhbXBsaW5nTW9kZSwgdGV4dHVyZSk7CisgICAgICAgIHRoaXMuX2ludGVybmFs
VGV4dHVyZXNDYWNoZS5wdXNoKHRleHR1cmUpOworICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgc2FtcGxpbmcgbW9kZSBvZiBhIGdpdmVu
IHRleHR1cmUKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZXMgdGhlIHJlcXVpcmVk
IHNhbXBsaW5nIG1vZGUKKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBkZWZpbmVzIHRoZSB0ZXh0dXJl
IHRvIHVwZGF0ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUudXBkYXRlVGV4dHVyZVNh
bXBsaW5nTW9kZSA9IGZ1bmN0aW9uIChzYW1wbGluZ01vZGUsIHRleHR1cmUpIHsKKyAgICAgICAg
dmFyIGZpbHRlcnMgPSB0aGlzLl9nZXRTYW1wbGluZ1BhcmFtZXRlcnMoc2FtcGxpbmdNb2RlLCB0
ZXh0dXJlLmdlbmVyYXRlTWlwTWFwcyk7CisgICAgICAgIGlmICh0ZXh0dXJlLmlzQ3ViZSkgewor
ICAgICAgICAgICAgdGhpcy5fc2V0VGV4dHVyZVBhcmFtZXRlckludGVnZXIodGhpcy5fZ2wuVEVY
VFVSRV9DVUJFX01BUCwgdGhpcy5fZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXJzLm1hZywg
dGV4dHVyZSk7CisgICAgICAgICAgICB0aGlzLl9zZXRUZXh0dXJlUGFyYW1ldGVySW50ZWdlcih0
aGlzLl9nbC5URVhUVVJFX0NVQkVfTUFQLCB0aGlzLl9nbC5URVhUVVJFX01JTl9GSUxURVIsIGZp
bHRlcnMubWluKTsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5f
Z2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
dGV4dHVyZS5pczNEKSB7CisgICAgICAgICAgICB0aGlzLl9zZXRUZXh0dXJlUGFyYW1ldGVySW50
ZWdlcih0aGlzLl9nbC5URVhUVVJFXzNELCB0aGlzLl9nbC5URVhUVVJFX01BR19GSUxURVIsIGZp
bHRlcnMubWFnLCB0ZXh0dXJlKTsKKyAgICAgICAgICAgIHRoaXMuX3NldFRleHR1cmVQYXJhbWV0
ZXJJbnRlZ2VyKHRoaXMuX2dsLlRFWFRVUkVfM0QsIHRoaXMuX2dsLlRFWFRVUkVfTUlOX0ZJTFRF
UiwgZmlsdGVycy5taW4pOworICAgICAgICAgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseSh0
aGlzLl9nbC5URVhUVVJFXzNELCBudWxsKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHRoaXMuX3NldFRleHR1cmVQYXJhbWV0ZXJJbnRlZ2VyKHRoaXMuX2dsLlRFWFRV
UkVfMkQsIHRoaXMuX2dsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVycy5tYWcsIHRleHR1cmUp
OworICAgICAgICAgICAgdGhpcy5fc2V0VGV4dHVyZVBhcmFtZXRlckludGVnZXIodGhpcy5fZ2wu
VEVYVFVSRV8yRCwgdGhpcy5fZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXJzLm1pbik7Cisg
ICAgICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfMkQs
IG51bGwpOworICAgICAgICB9CisgICAgICAgIHRleHR1cmUuc2FtcGxpbmdNb2RlID0gc2FtcGxp
bmdNb2RlOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBjb250ZW50IG9mIGEg
ZHluYW1pYyB0ZXh0dXJlCisgICAgICogQHBhcmFtIHRleHR1cmUgZGVmaW5lcyB0aGUgdGV4dHVy
ZSB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gY2FudmFzIGRlZmluZXMgdGhlIGNhbnZhcyBjb250
YWluaW5nIHRoZSBzb3VyY2UKKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmVzIGlmIGRhdGEg
bXVzdCBiZSBzdG9yZWQgd2l0aCBZIGF4aXMgaW52ZXJ0ZWQKKyAgICAgKiBAcGFyYW0gcHJlbXVs
QWxwaGEgZGVmaW5lcyBpZiBhbHBoYSBpcyBzdG9yZWQgYXMgcHJlbXVsdGlwbGllZAorICAgICAq
IEBwYXJhbSBmb3JtYXQgZGVmaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhCisgICAgICogQHBh
cmFtIGZvcmNlQmluZFRleHR1cmUgaWYgdGhlIHRleHR1cmUgc2hvdWxkIGJlIGZvcmNlZCB0byBi
ZSBib3VuZCBlZy4gYWZ0ZXIgYSBncmFwaGljcyBjb250ZXh0IGxvc3MgKERlZmF1bHQ6IGZhbHNl
KQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUudXBkYXRlRHluYW1pY1RleHR1cmUgPSBm
dW5jdGlvbiAodGV4dHVyZSwgY2FudmFzLCBpbnZlcnRZLCBwcmVtdWxBbHBoYSwgZm9ybWF0LCBm
b3JjZUJpbmRUZXh0dXJlKSB7CisgICAgICAgIGlmIChwcmVtdWxBbHBoYSA9PT0gdm9pZCAwKSB7
IHByZW11bEFscGhhID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGZvcmNlQmluZFRleHR1cmUgPT09
IHZvaWQgMCkgeyBmb3JjZUJpbmRUZXh0dXJlID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCF0ZXh0
dXJlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYmlu
ZFRleHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzJELCB0ZXh0dXJlLCB0cnVlLCBmb3Jj
ZUJpbmRUZXh0dXJlKTsKKyAgICAgICAgdGhpcy5fdW5wYWNrRmxpcFkoaW52ZXJ0WSk7CisgICAg
ICAgIGlmIChwcmVtdWxBbHBoYSkgeworICAgICAgICAgICAgdGhpcy5fZ2wucGl4ZWxTdG9yZWko
dGhpcy5fZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCAxKTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgaW50ZXJuYWxGb3JtYXQgPSBmb3JtYXQgPyB0aGlzLl9nZXRJbnRlcm5hbEZv
cm1hdChmb3JtYXQpIDogdGhpcy5fZ2wuUkdCQTsKKyAgICAgICAgdGhpcy5fZ2wudGV4SW1hZ2Uy
RCh0aGlzLl9nbC5URVhUVVJFXzJELCAwLCBpbnRlcm5hbEZvcm1hdCwgaW50ZXJuYWxGb3JtYXQs
IHRoaXMuX2dsLlVOU0lHTkVEX0JZVEUsIGNhbnZhcyk7CisgICAgICAgIGlmICh0ZXh0dXJlLmdl
bmVyYXRlTWlwTWFwcykgeworICAgICAgICAgICAgdGhpcy5fZ2wuZ2VuZXJhdGVNaXBtYXAodGhp
cy5fZ2wuVEVYVFVSRV8yRCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYmluZFRleHR1cmVE
aXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzJELCBudWxsKTsKKyAgICAgICAgaWYgKHByZW11bEFs
cGhhKSB7CisgICAgICAgICAgICB0aGlzLl9nbC5waXhlbFN0b3JlaSh0aGlzLl9nbC5VTlBBQ0tf
UFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIDApOworICAgICAgICB9CisgICAgICAgIHRleHR1cmUu
aXNSZWFkeSA9IHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgYSB2aWRlbyB0
ZXh0dXJlCisgICAgICogQHBhcmFtIHRleHR1cmUgZGVmaW5lcyB0aGUgdGV4dHVyZSB0byB1cGRh
dGUKKyAgICAgKiBAcGFyYW0gdmlkZW8gZGVmaW5lcyB0aGUgdmlkZW8gZWxlbWVudCB0byB1c2UK
KyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmVzIGlmIGRhdGEgbXVzdCBiZSBzdG9yZWQgd2l0
aCBZIGF4aXMgaW52ZXJ0ZWQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnVwZGF0ZVZp
ZGVvVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCB2aWRlbywgaW52ZXJ0WSkgeworICAgICAg
ICBpZiAoIXRleHR1cmUgfHwgdGV4dHVyZS5faXNEaXNhYmxlZCkgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHZhciB3YXNQcmV2aW91c2x5Qm91bmQgPSB0aGlzLl9i
aW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRleHR1cmUsIHRydWUpOwor
ICAgICAgICB0aGlzLl91bnBhY2tGbGlwWSghaW52ZXJ0WSk7IC8vIFZpZGVvIGFyZSB1cHNpZGUg
ZG93biBieSBkZWZhdWx0CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBUZXN0aW5nIHZp
ZGVvIHRleHR1cmUgc3VwcG9ydAorICAgICAgICAgICAgaWYgKHRoaXMuX3ZpZGVvVGV4dHVyZVN1
cHBvcnRlZCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZ2wudGV4SW1h
Z2UyRCh0aGlzLl9nbC5URVhUVVJFXzJELCAwLCB0aGlzLl9nbC5SR0JBLCB0aGlzLl9nbC5SR0JB
LCB0aGlzLl9nbC5VTlNJR05FRF9CWVRFLCB2aWRlbyk7CisgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX2dsLmdldEVycm9yKCkgIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlk
ZW9UZXh0dXJlU3VwcG9ydGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl92aWRlb1RleHR1cmVTdXBw
b3J0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIC8vIENvcHkgdmlkZW8gdGhyb3VnaCB0aGUgY3VycmVudCB3b3JraW5nIGNhbnZhcyBpZiB2
aWRlbyB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgICAgIGlmICghdGhpcy5fdmlk
ZW9UZXh0dXJlU3VwcG9ydGVkKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLl93b3Jr
aW5nQ2FudmFzKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuX3dvcmtpbmdDYW52YXMg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGNvbnRleHQgPSB0ZXh0dXJlLl93b3JraW5nQ2FudmFzLmdldENvbnRleHQoIjJkIik7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZ2V0IDJkIGNvbnRleHQiKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLl93b3JraW5nQ29udGV4
dCA9IGNvbnRleHQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuX3dvcmtpbmdDYW52YXMu
d2lkdGggPSB0ZXh0dXJlLndpZHRoOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLl93b3Jr
aW5nQ2FudmFzLmhlaWdodCA9IHRleHR1cmUuaGVpZ2h0OworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB0ZXh0dXJlLl93b3JraW5nQ29udGV4dC5kcmF3SW1hZ2UodmlkZW8sIDAs
IDAsIHZpZGVvLnZpZGVvV2lkdGgsIHZpZGVvLnZpZGVvSGVpZ2h0LCAwLCAwLCB0ZXh0dXJlLndp
ZHRoLCB0ZXh0dXJlLmhlaWdodCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZ2wudGV4SW1hZ2Uy
RCh0aGlzLl9nbC5URVhUVVJFXzJELCAwLCB0aGlzLl9nbC5SR0JBLCB0aGlzLl9nbC5SR0JBLCB0
aGlzLl9nbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLl93b3JraW5nQ2FudmFzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX2dsLnRleElt
YWdlMkQodGhpcy5fZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5fZ2wuUkdCQSwgdGhpcy5fZ2wuUkdC
QSwgdGhpcy5fZ2wuVU5TSUdORURfQllURSwgdmlkZW8pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fZ2wuZ2VuZXJhdGVNaXBtYXAodGhpcy5fZ2wuVEVYVFVSRV8yRCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoIXdhc1ByZXZpb3VzbHlCb3VuZCkgeworICAgICAgICAgICAgICAg
IHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVYVFVSRV8yRCwgbnVsbCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAgICB0aGlzLnJlc2V0VGV4dHVyZUNhY2hlKCk7
CisgICAgICAgICAgICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IGNhdGNoIChleCkgeworICAgICAgICAgICAgLy8gU29tZXRoaW5nIHVuZXhwZWN0ZWQKKyAgICAg
ICAgICAgIC8vIExldCdzIGRpc2FibGUgdGhlIHRleHR1cmUKKyAgICAgICAgICAgIHRleHR1cmUu
X2lzRGlzYWJsZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBV
cGRhdGVzIGEgZGVwdGggdGV4dHVyZSBDb21wYXJpc29uIE1vZGUgYW5kIEZ1bmN0aW9uLgorICAg
ICAqIElmIHRoZSBjb21wYXJpc29uIEZ1bmN0aW9uIGlzIGVxdWFsIHRvIDAsIHRoZSBtb2RlIHdp
bGwgYmUgc2V0IHRvIG5vbmUuCisgICAgICogT3RoZXJ3aXNlLCB0aGlzIG9ubHkgd29ya3MgaW4g
d2ViZ2wgMiBhbmQgcmVxdWlyZXMgYSBzaGFkb3cgc2FtcGxlciBpbiB0aGUgc2hhZGVyLgorICAg
ICAqIEBwYXJhbSB0ZXh0dXJlIFRoZSB0ZXh0dXJlIHRvIHNldCB0aGUgY29tcGFyaXNvbiBmdW5j
dGlvbiBmb3IKKyAgICAgKiBAcGFyYW0gY29tcGFyaXNvbkZ1bmN0aW9uIFRoZSBjb21wYXJpc29u
IGZ1bmN0aW9uIHRvIHNldCwgMCBpZiBubyBjb21wYXJpc29uIHJlcXVpcmVkCisgICAgICovCisg
ICAgRW5naW5lLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlQ29tcGFyaXNvbkZ1bmN0aW9uID0gZnVu
Y3Rpb24gKHRleHR1cmUsIGNvbXBhcmlzb25GdW5jdGlvbikgeworICAgICAgICBpZiAodGhpcy53
ZWJHTFZlcnNpb24gPT09IDEpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJMb2dnZXIiXS5FcnJvcigiV2ViR0wgMSBkb2VzIG5vdCBzdXBw
b3J0IHRleHR1cmUgY29tcGFyaXNvbi4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAgICAgICAgaWYgKHRleHR1cmUuaXNDdWJl
KSB7CisgICAgICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRV
UkVfQ1VCRV9NQVAsIHRleHR1cmUsIHRydWUpOworICAgICAgICAgICAgaWYgKGNvbXBhcmlzb25G
dW5jdGlvbiA9PT0gMCkgeworICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVY
VFVSRV9DVUJFX01BUCwgZ2wuVEVYVFVSRV9DT01QQVJFX0ZVTkMsIEVuZ2luZS5MRVFVQUwpOwor
ICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wu
VEVYVFVSRV9DT01QQVJFX01PREUsIGdsLk5PTkUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFX0NV
QkVfTUFQLCBnbC5URVhUVVJFX0NPTVBBUkVfRlVOQywgY29tcGFyaXNvbkZ1bmN0aW9uKTsKKyAg
ICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfQ1VCRV9NQVAsIGdsLlRF
WFRVUkVfQ09NUEFSRV9NT0RFLCBnbC5DT01QQVJFX1JFRl9UT19URVhUVVJFKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVY
VFVSRV9DVUJFX01BUCwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRleHR1
cmUsIHRydWUpOworICAgICAgICAgICAgaWYgKGNvbXBhcmlzb25GdW5jdGlvbiA9PT0gMCkgewor
ICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVS
RV9DT01QQVJFX0ZVTkMsIEVuZ2luZS5MRVFVQUwpOworICAgICAgICAgICAgICAgIGdsLnRleFBh
cmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9DT01QQVJFX01PREUsIGdsLk5PTkUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZ2wu
dGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX0NPTVBBUkVfRlVOQywgY29t
cGFyaXNvbkZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRF
WFRVUkVfMkQsIGdsLlRFWFRVUkVfQ09NUEFSRV9NT0RFLCBnbC5DT01QQVJFX1JFRl9UT19URVhU
VVJFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0
bHkodGhpcy5fZ2wuVEVYVFVSRV8yRCwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgdGV4dHVy
ZS5fY29tcGFyaXNvbkZ1bmN0aW9uID0gY29tcGFyaXNvbkZ1bmN0aW9uOworICAgIH07CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9zZXR1cERlcHRoU3RlbmNpbFRl
eHR1cmUgPSBmdW5jdGlvbiAoaW50ZXJuYWxUZXh0dXJlLCBzaXplLCBnZW5lcmF0ZVN0ZW5jaWws
IGJpbGluZWFyRmlsdGVyaW5nLCBjb21wYXJpc29uRnVuY3Rpb24pIHsKKyAgICAgICAgdmFyIHdp
ZHRoID0gc2l6ZS53aWR0aCB8fCBzaXplOworICAgICAgICB2YXIgaGVpZ2h0ID0gc2l6ZS5oZWln
aHQgfHwgc2l6ZTsKKyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLmJhc2VXaWR0aCA9IHdpZHRoOwor
ICAgICAgICBpbnRlcm5hbFRleHR1cmUuYmFzZUhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgaW50
ZXJuYWxUZXh0dXJlLndpZHRoID0gd2lkdGg7CisgICAgICAgIGludGVybmFsVGV4dHVyZS5oZWln
aHQgPSBoZWlnaHQ7CisgICAgICAgIGludGVybmFsVGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAg
ICAgICAgaW50ZXJuYWxUZXh0dXJlLnNhbXBsZXMgPSAxOworICAgICAgICBpbnRlcm5hbFRleHR1
cmUuZ2VuZXJhdGVNaXBNYXBzID0gZmFsc2U7CisgICAgICAgIGludGVybmFsVGV4dHVyZS5fZ2Vu
ZXJhdGVEZXB0aEJ1ZmZlciA9IHRydWU7CisgICAgICAgIGludGVybmFsVGV4dHVyZS5fZ2VuZXJh
dGVTdGVuY2lsQnVmZmVyID0gZ2VuZXJhdGVTdGVuY2lsOworICAgICAgICBpbnRlcm5hbFRleHR1
cmUuc2FtcGxpbmdNb2RlID0gYmlsaW5lYXJGaWx0ZXJpbmcgPyBFbmdpbmUuVEVYVFVSRV9CSUxJ
TkVBUl9TQU1QTElOR01PREUgOiBFbmdpbmUuVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5HTU9ERTsK
KyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLnR5cGUgPSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdO
RURfSU5UOworICAgICAgICBpbnRlcm5hbFRleHR1cmUuX2NvbXBhcmlzb25GdW5jdGlvbiA9IGNv
bXBhcmlzb25GdW5jdGlvbjsKKyAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIHZh
ciB0YXJnZXQgPSBpbnRlcm5hbFRleHR1cmUuaXNDdWJlID8gZ2wuVEVYVFVSRV9DVUJFX01BUCA6
IGdsLlRFWFRVUkVfMkQ7CisgICAgICAgIHZhciBzYW1wbGluZ1BhcmFtZXRlcnMgPSB0aGlzLl9n
ZXRTYW1wbGluZ1BhcmFtZXRlcnMoaW50ZXJuYWxUZXh0dXJlLnNhbXBsaW5nTW9kZSwgZmFsc2Up
OworICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVS
LCBzYW1wbGluZ1BhcmFtZXRlcnMubWFnKTsKKyAgICAgICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJn
ZXQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgc2FtcGxpbmdQYXJhbWV0ZXJzLm1pbik7CisgICAg
ICAgIGdsLnRleFBhcmFtZXRlcmkodGFyZ2V0LCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBf
VE9fRURHRSk7CisgICAgICAgIGdsLnRleFBhcmFtZXRlcmkodGFyZ2V0LCBnbC5URVhUVVJFX1dS
QVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIGlmIChjb21wYXJpc29uRnVuY3Rpb24g
PT09IDApIHsKKyAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkodGFyZ2V0LCBnbC5URVhUVVJF
X0NPTVBBUkVfRlVOQywgRW5naW5lLkxFUVVBTCk7CisgICAgICAgICAgICBnbC50ZXhQYXJhbWV0
ZXJpKHRhcmdldCwgZ2wuVEVYVFVSRV9DT01QQVJFX01PREUsIGdsLk5PTkUpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIGds
LlRFWFRVUkVfQ09NUEFSRV9GVU5DLCBjb21wYXJpc29uRnVuY3Rpb24pOworICAgICAgICAgICAg
Z2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIGdsLlRFWFRVUkVfQ09NUEFSRV9NT0RFLCBnbC5DT01Q
QVJFX1JFRl9UT19URVhUVVJFKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZS4KKyAgICAgKiBUaGlzIGlzIG9ubHkgYXZh
aWxhYmxlIGluIFdlYkdMIDIgb3Igd2l0aCB0aGUgZGVwdGggdGV4dHVyZSBleHRlbnNpb24gYXZh
aWxhYmxlLgorICAgICAqIEBwYXJhbSBzaXplIFRoZSBzaXplIG9mIGZhY2UgZWRnZSBpbiB0aGUg
dGV4dHVyZS4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBkZWZpbmluZyB0aGUg
dGV4dHVyZS4KKyAgICAgKiBAcmV0dXJucyBUaGUgdGV4dHVyZQorICAgICAqLworICAgIEVuZ2lu
ZS5wcm90b3R5cGUuY3JlYXRlRGVwdGhTdGVuY2lsVGV4dHVyZSA9IGZ1bmN0aW9uIChzaXplLCBv
cHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25zLmlzQ3ViZSkgeworICAgICAgICAgICAgdmFy
IHdpZHRoID0gc2l6ZS53aWR0aCB8fCBzaXplOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Ny
ZWF0ZURlcHRoU3RlbmNpbEN1YmVUZXh0dXJlKHdpZHRoLCBvcHRpb25zKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVEZXB0aFN0ZW5j
aWxUZXh0dXJlKHNpemUsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgZGVwdGggc3RlbmNpbCB0ZXh0dXJlLgorICAgICAqIFRoaXMgaXMgb25s
eSBhdmFpbGFibGUgaW4gV2ViR0wgMiBvciB3aXRoIHRoZSBkZXB0aCB0ZXh0dXJlIGV4dGVuc2lv
biBhdmFpbGFibGUuCisgICAgICogQHBhcmFtIHNpemUgVGhlIHNpemUgb2YgZmFjZSBlZGdlIGlu
IHRoZSB0ZXh0dXJlLgorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGRlZmluaW5n
IHRoZSB0ZXh0dXJlLgorICAgICAqIEByZXR1cm5zIFRoZSB0ZXh0dXJlCisgICAgICovCisgICAg
RW5naW5lLnByb3RvdHlwZS5fY3JlYXRlRGVwdGhTdGVuY2lsVGV4dHVyZSA9IGZ1bmN0aW9uIChz
aXplLCBvcHRpb25zKSB7CisgICAgICAgIHZhciBpbnRlcm5hbFRleHR1cmUgPSBuZXcgX01hdGVy
aWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siSW50ZXJuYWxUZXh0dXJlIl0odGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFU
QVNPVVJDRV9ERVBUSFRFWFRVUkUpOworICAgICAgICBpZiAoIXRoaXMuX2NhcHMuZGVwdGhUZXh0
dXJlRXh0ZW5zaW9uKSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siTG9nZ2VyIl0uRXJyb3IoIkRlcHRoIHRleHR1cmUgaXMgbm90IHN1cHBv
cnRlZCBieSB5b3VyIGJyb3dzZXIgb3IgaGFyZHdhcmUuIik7CisgICAgICAgICAgICByZXR1cm4g
aW50ZXJuYWxUZXh0dXJlOworICAgICAgICB9CisgICAgICAgIHZhciBpbnRlcm5hbE9wdGlvbnMg
PSB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fzc2lnbiJdKHsgYmlsaW5l
YXJGaWx0ZXJpbmc6IGZhbHNlLCBjb21wYXJpc29uRnVuY3Rpb246IDAsIGdlbmVyYXRlU3RlbmNp
bDogZmFsc2UgfSwgb3B0aW9ucyk7CisgICAgICAgIHZhciBnbCA9IHRoaXMuX2dsOworICAgICAg
ICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIGludGVybmFsVGV4dHVy
ZSwgdHJ1ZSk7CisgICAgICAgIHRoaXMuX3NldHVwRGVwdGhTdGVuY2lsVGV4dHVyZShpbnRlcm5h
bFRleHR1cmUsIHNpemUsIGludGVybmFsT3B0aW9ucy5nZW5lcmF0ZVN0ZW5jaWwsIGludGVybmFs
T3B0aW9ucy5iaWxpbmVhckZpbHRlcmluZywgaW50ZXJuYWxPcHRpb25zLmNvbXBhcmlzb25GdW5j
dGlvbik7CisgICAgICAgIGlmICh0aGlzLndlYkdMVmVyc2lvbiA+IDEpIHsKKyAgICAgICAgICAg
IGlmIChpbnRlcm5hbE9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsKSB7CisgICAgICAgICAgICAgICAg
Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5ERVBUSDI0X1NURU5DSUw4LCBpbnRl
cm5hbFRleHR1cmUud2lkdGgsIGludGVybmFsVGV4dHVyZS5oZWlnaHQsIDAsIGdsLkRFUFRIX1NU
RU5DSUwsIGdsLlVOU0lHTkVEX0lOVF8yNF84LCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8y
RCwgMCwgZ2wuREVQVEhfQ09NUE9ORU5UMjQsIGludGVybmFsVGV4dHVyZS53aWR0aCwgaW50ZXJu
YWxUZXh0dXJlLmhlaWdodCwgMCwgZ2wuREVQVEhfQ09NUE9ORU5ULCBnbC5VTlNJR05FRF9JTlQs
IG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgaWYgKGludGVybmFsT3B0aW9ucy5nZW5lcmF0ZVN0ZW5jaWwpIHsKKyAgICAgICAgICAg
ICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLkRFUFRIX1NURU5DSUwsIGlu
dGVybmFsVGV4dHVyZS53aWR0aCwgaW50ZXJuYWxUZXh0dXJlLmhlaWdodCwgMCwgZ2wuREVQVEhf
U1RFTkNJTCwgZ2wuVU5TSUdORURfSU5UXzI0XzgsIG51bGwpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJF
XzJELCAwLCBnbC5ERVBUSF9DT01QT05FTlQsIGludGVybmFsVGV4dHVyZS53aWR0aCwgaW50ZXJu
YWxUZXh0dXJlLmhlaWdodCwgMCwgZ2wuREVQVEhfQ09NUE9ORU5ULCBnbC5VTlNJR05FRF9JTlQs
IG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2JpbmRUZXh0
dXJlRGlyZWN0bHkoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7CisgICAgICAgIHJldHVybiBpbnRlcm5h
bFRleHR1cmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBmcmFtZSBidWZmZXIg
RGVwdGggLyBTdGVuY2lsIGF0dGFjaGVtZW50IG9mIHRoZSByZW5kZXIgdGFyZ2V0IHRvIHRoZSBk
ZWZpbmVkIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZS4KKyAgICAgKiBAcGFyYW0gcmVuZGVyVGFyZ2V0
IFRoZSByZW5kZXIgdGFyZ2V0IHRvIHNldCB0aGUgZnJhbWUgYnVmZmVyIGZvcgorICAgICAqLwor
ICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0RnJhbWVCdWZmZXJEZXB0aFN0ZW5jaWxUZXh0dXJlID0g
ZnVuY3Rpb24gKHJlbmRlclRhcmdldCkgeworICAgICAgICAvLyBDcmVhdGUgdGhlIGZyYW1lYnVm
ZmVyCisgICAgICAgIHZhciBpbnRlcm5hbFRleHR1cmUgPSByZW5kZXJUYXJnZXQuZ2V0SW50ZXJu
YWxUZXh0dXJlKCk7CisgICAgICAgIGlmICghaW50ZXJuYWxUZXh0dXJlIHx8ICFpbnRlcm5hbFRl
eHR1cmUuX2ZyYW1lYnVmZmVyIHx8ICFyZW5kZXJUYXJnZXQuZGVwdGhTdGVuY2lsVGV4dHVyZSkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBnbCA9IHRoaXMu
X2dsOworICAgICAgICB2YXIgZGVwdGhTdGVuY2lsVGV4dHVyZSA9IHJlbmRlclRhcmdldC5kZXB0
aFN0ZW5jaWxUZXh0dXJlOworICAgICAgICB0aGlzLl9iaW5kVW5ib3VuZEZyYW1lYnVmZmVyKGlu
dGVybmFsVGV4dHVyZS5fZnJhbWVidWZmZXIpOworICAgICAgICBpZiAoZGVwdGhTdGVuY2lsVGV4
dHVyZS5pc0N1YmUpIHsKKyAgICAgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxUZXh0dXJlLl9nZW5l
cmF0ZVN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBnbC5mcmFtZWJ1ZmZlclRleHR1
cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIGRlcHRoU3RlbmNpbFRleHR1cmUuX3dlYkdMVGV4dHVy
ZSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfQVRUQUNI
TUVOVCwgZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCBkZXB0aFN0ZW5jaWxUZXh0dXJl
Ll93ZWJHTFRleHR1cmUsIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFRleHR1cmUuX2dlbmVyYXRlU3RlbmNp
bEJ1ZmZlcikgeworICAgICAgICAgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZS
QU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlRFWFRVUkVfMkQsIGRl
cHRoU3RlbmNpbFRleHR1cmUuX3dlYkdMVGV4dHVyZSwgMCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChn
bC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfQVRUQUNITUVOVCwgZ2wuVEVYVFVSRV8yRCwgZGVwdGhT
dGVuY2lsVGV4dHVyZS5fd2ViR0xUZXh0dXJlLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICB0aGlzLl9iaW5kVW5ib3VuZEZyYW1lYnVmZmVyKG51bGwpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyByZW5kZXIgdGFyZ2V0IHRleHR1cmUKKyAgICAg
KiBAcGFyYW0gc2l6ZSBkZWZpbmVzIHRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBh
cmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dHVy
ZQorICAgICAqIEByZXR1cm5zIGEgbmV3IHJlbmRlciB0YXJnZXQgdGV4dHVyZSBzdG9yZWQgaW4g
YW4gSW50ZXJuYWxUZXh0dXJlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5jcmVhdGVS
ZW5kZXJUYXJnZXRUZXh0dXJlID0gZnVuY3Rpb24gKHNpemUsIG9wdGlvbnMpIHsKKyAgICAgICAg
dmFyIGZ1bGxPcHRpb25zID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0Q3Jl
YXRpb25PcHRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJSZW5kZXJUYXJnZXRD
cmVhdGlvbk9wdGlvbnMiXSgpOworICAgICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYm
IHR5cGVvZiBvcHRpb25zID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgZnVsbE9wdGlvbnMu
Z2VuZXJhdGVNaXBNYXBzID0gb3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHM7CisgICAgICAgICAgICBm
dWxsT3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyID0gb3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVm
ZmVyID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyOwor
ICAgICAgICAgICAgZnVsbE9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVmZmVyID0gZnVsbE9wdGlv
bnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlciAmJiBvcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlcjsK
KyAgICAgICAgICAgIGZ1bGxPcHRpb25zLnR5cGUgPSBvcHRpb25zLnR5cGUgPT09IHVuZGVmaW5l
ZCA/IEVuZ2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQgOiBvcHRpb25zLnR5cGU7CisgICAg
ICAgICAgICBmdWxsT3B0aW9ucy5zYW1wbGluZ01vZGUgPSBvcHRpb25zLnNhbXBsaW5nTW9kZSA9
PT0gdW5kZWZpbmVkID8gRW5naW5lLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERSA6IG9w
dGlvbnMuc2FtcGxpbmdNb2RlOworICAgICAgICAgICAgZnVsbE9wdGlvbnMuZm9ybWF0ID0gb3B0
aW9ucy5mb3JtYXQgPT09IHVuZGVmaW5lZCA/IEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQkEgOiBv
cHRpb25zLmZvcm1hdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZ1
bGxPcHRpb25zLmdlbmVyYXRlTWlwTWFwcyA9IG9wdGlvbnM7CisgICAgICAgICAgICBmdWxsT3B0
aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyID0gdHJ1ZTsKKyAgICAgICAgICAgIGZ1bGxPcHRpb25z
LmdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA9IGZhbHNlOworICAgICAgICAgICAgZnVsbE9wdGlvbnMu
dHlwZSA9IEVuZ2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7CisgICAgICAgICAgICBmdWxs
T3B0aW9ucy5zYW1wbGluZ01vZGUgPSBFbmdpbmUuVEVYVFVSRV9UUklMSU5FQVJfU0FNUExJTkdN
T0RFOworICAgICAgICAgICAgZnVsbE9wdGlvbnMuZm9ybWF0ID0gRW5naW5lLlRFWFRVUkVGT1JN
QVRfUkdCQTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVsbE9wdGlvbnMudHlwZSA9PT0gRW5n
aW5lLlRFWFRVUkVUWVBFX0ZMT0FUICYmICF0aGlzLl9jYXBzLnRleHR1cmVGbG9hdExpbmVhckZp
bHRlcmluZykgeworICAgICAgICAgICAgLy8gaWYgZmxvYXRpbmcgcG9pbnQgbGluZWFyIChnbC5G
TE9BVCkgdGhlbiBmb3JjZSB0byBORUFSRVNUX1NBTVBMSU5HTU9ERQorICAgICAgICAgICAgZnVs
bE9wdGlvbnMuc2FtcGxpbmdNb2RlID0gRW5naW5lLlRFWFRVUkVfTkVBUkVTVF9TQU1QTElOR01P
REU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZnVsbE9wdGlvbnMudHlwZSA9PT0gRW5n
aW5lLlRFWFRVUkVUWVBFX0hBTEZfRkxPQVQgJiYgIXRoaXMuX2NhcHMudGV4dHVyZUhhbGZGbG9h
dExpbmVhckZpbHRlcmluZykgeworICAgICAgICAgICAgLy8gaWYgZmxvYXRpbmcgcG9pbnQgbGlu
ZWFyIChIQUxGX0ZMT0FUKSB0aGVuIGZvcmNlIHRvIE5FQVJFU1RfU0FNUExJTkdNT0RFCisgICAg
ICAgICAgICBmdWxsT3B0aW9ucy5zYW1wbGluZ01vZGUgPSBFbmdpbmUuVEVYVFVSRV9ORUFSRVNU
X1NBTVBMSU5HTU9ERTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAg
ICAgICAgdmFyIHRleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW50ZXJuYWxUZXh0dXJlIl0odGhpcywg
X01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9SRU5ERVJUQVJHRVQpOworICAg
ICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIHRleHR1cmUsIHRy
dWUpOworICAgICAgICB2YXIgd2lkdGggPSBzaXplLndpZHRoIHx8IHNpemU7CisgICAgICAgIHZh
ciBoZWlnaHQgPSBzaXplLmhlaWdodCB8fCBzaXplOworICAgICAgICB2YXIgZmlsdGVycyA9IHRo
aXMuX2dldFNhbXBsaW5nUGFyYW1ldGVycyhmdWxsT3B0aW9ucy5zYW1wbGluZ01vZGUsIGZ1bGxP
cHRpb25zLmdlbmVyYXRlTWlwTWFwcyA/IHRydWUgOiBmYWxzZSk7CisgICAgICAgIGlmIChmdWxs
T3B0aW9ucy50eXBlID09PSBFbmdpbmUuVEVYVFVSRVRZUEVfRkxPQVQgJiYgIXRoaXMuX2NhcHMu
dGV4dHVyZUZsb2F0KSB7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy50eXBlID0gRW5naW5lLlRF
WFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJMb2dnZXIiXS5XYXJuKCJGbG9hdCB0ZXh0dXJlcyBhcmUg
bm90IHN1cHBvcnRlZC4gUmVuZGVyIHRhcmdldCBmb3JjZWQgdG8gVEVYVFVSRVRZUEVfVU5TSUdO
RURfQllURSB0eXBlIik7CisgICAgICAgIH0KKyAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5U
RVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGZpbHRlcnMubWFnKTsKKyAgICAgICAg
Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGZp
bHRlcnMubWluKTsKKyAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5U
RVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIGdsLnRleFBhcmFtZXRl
cmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpOwor
ICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuX2dldFJHQkFCdWZm
ZXJJbnRlcm5hbFNpemVkRm9ybWF0KGZ1bGxPcHRpb25zLnR5cGUsIGZ1bGxPcHRpb25zLmZvcm1h
dCksIHdpZHRoLCBoZWlnaHQsIDAsIHRoaXMuX2dldEludGVybmFsRm9ybWF0KGZ1bGxPcHRpb25z
LmZvcm1hdCksIHRoaXMuX2dldFdlYkdMVGV4dHVyZVR5cGUoZnVsbE9wdGlvbnMudHlwZSksIG51
bGwpOworICAgICAgICAvLyBDcmVhdGUgdGhlIGZyYW1lYnVmZmVyCisgICAgICAgIHZhciBjdXJy
ZW50RnJhbWVCdWZmZXIgPSB0aGlzLl9jdXJyZW50RnJhbWVidWZmZXI7CisgICAgICAgIHZhciBm
cmFtZWJ1ZmZlciA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgICAgIHRoaXMuX2JpbmRV
bmJvdW5kRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAgICAgICBnbC5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVf
MkQsIHRleHR1cmUuX3dlYkdMVGV4dHVyZSwgMCk7CisgICAgICAgIHRleHR1cmUuX2RlcHRoU3Rl
bmNpbEJ1ZmZlciA9IHRoaXMuX3NldHVwRnJhbWVidWZmZXJEZXB0aEF0dGFjaG1lbnRzKGZ1bGxP
cHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA/IHRydWUgOiBmYWxzZSwgZnVsbE9wdGlvbnMu
Z2VuZXJhdGVEZXB0aEJ1ZmZlciwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGlmIChmdWxsT3B0
aW9ucy5nZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmdlbmVyYXRlTWlw
bWFwKHRoaXMuX2dsLlRFWFRVUkVfMkQpOworICAgICAgICB9CisgICAgICAgIC8vIFVuYmluZAor
ICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIG51bGwpOwor
ICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgbnVsbCk7CisgICAg
ICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVidWZmZXIoY3VycmVudEZyYW1lQnVmZmVyKTsKKyAg
ICAgICAgdGV4dHVyZS5fZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKKyAgICAgICAgdGV4dHVy
ZS5iYXNlV2lkdGggPSB3aWR0aDsKKyAgICAgICAgdGV4dHVyZS5iYXNlSGVpZ2h0ID0gaGVpZ2h0
OworICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7CisgICAgICAgIHRleHR1cmUuaGVpZ2h0
ID0gaGVpZ2h0OworICAgICAgICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAgICAgICB0ZXh0
dXJlLnNhbXBsZXMgPSAxOworICAgICAgICB0ZXh0dXJlLmdlbmVyYXRlTWlwTWFwcyA9IGZ1bGxP
cHRpb25zLmdlbmVyYXRlTWlwTWFwcyA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgdGV4dHVyZS5z
YW1wbGluZ01vZGUgPSBmdWxsT3B0aW9ucy5zYW1wbGluZ01vZGU7CisgICAgICAgIHRleHR1cmUu
dHlwZSA9IGZ1bGxPcHRpb25zLnR5cGU7CisgICAgICAgIHRleHR1cmUuZm9ybWF0ID0gZnVsbE9w
dGlvbnMuZm9ybWF0OworICAgICAgICB0ZXh0dXJlLl9nZW5lcmF0ZURlcHRoQnVmZmVyID0gZnVs
bE9wdGlvbnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlcjsKKyAgICAgICAgdGV4dHVyZS5fZ2VuZXJhdGVT
dGVuY2lsQnVmZmVyID0gZnVsbE9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVmZmVyID8gdHJ1ZSA6
IGZhbHNlOworICAgICAgICAvLyB0aGlzLnJlc2V0VGV4dHVyZUNhY2hlKCk7CisgICAgICAgIHRo
aXMuX2ludGVybmFsVGV4dHVyZXNDYWNoZS5wdXNoKHRleHR1cmUpOworICAgICAgICByZXR1cm4g
dGV4dHVyZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlw
ZS5fc2V0dXBGcmFtZWJ1ZmZlckRlcHRoQXR0YWNobWVudHMgPSBmdW5jdGlvbiAoZ2VuZXJhdGVT
dGVuY2lsQnVmZmVyLCBnZW5lcmF0ZURlcHRoQnVmZmVyLCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVz
KSB7CisgICAgICAgIGlmIChzYW1wbGVzID09PSB2b2lkIDApIHsgc2FtcGxlcyA9IDE7IH0KKyAg
ICAgICAgdmFyIGRlcHRoU3RlbmNpbEJ1ZmZlciA9IG51bGw7CisgICAgICAgIHZhciBnbCA9IHRo
aXMuX2dsOworICAgICAgICAvLyBDcmVhdGUgdGhlIGRlcHRoL3N0ZW5jaWwgYnVmZmVyCisgICAg
ICAgIGlmIChnZW5lcmF0ZVN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgICAgIGRlcHRoU3RlbmNp
bEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgICAgICAgICAgZ2wuYmluZFJl
bmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIGRlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAg
ICAgICBpZiAoc2FtcGxlcyA+IDEpIHsKKyAgICAgICAgICAgICAgICBnbC5yZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUoZ2wuUkVOREVSQlVGRkVSLCBzYW1wbGVzLCBnbC5ERVBUSDI0X1NU
RU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVS
LCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBU
SF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgZGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChnZW5lcmF0ZURlcHRoQnVmZmVyKSB7Cisg
ICAgICAgICAgICBkZXB0aFN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTsK
KyAgICAgICAgICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCBkZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgaWYgKHNhbXBsZXMgPiAxKSB7CisgICAgICAgICAg
ICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKGdsLlJFTkRFUkJVRkZFUiwg
c2FtcGxlcywgZ2wuREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZ2wucmVuZGVyYnVmZmVy
U3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIs
IGRlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlcHRoU3Rl
bmNpbEJ1ZmZlcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIHNhbXBsZSBj
b3VudCBvZiBhIHJlbmRlciB0YXJnZXQgdGV4dHVyZQorICAgICAqIEBzZWUgaHR0cDovL2RvYy5i
YWJ5bG9uanMuY29tL2ZlYXR1cmVzL3dlYmdsMiNtdWx0aXNhbXBsZS1yZW5kZXItdGFyZ2V0cwor
ICAgICAqIEBwYXJhbSB0ZXh0dXJlIGRlZmluZXMgdGhlIHRleHR1cmUgdG8gdXBkYXRlCisgICAg
ICogQHBhcmFtIHNhbXBsZXMgZGVmaW5lcyB0aGUgc2FtcGxlIGNvdW50IHRvIHNldAorICAgICAq
IEByZXR1cm5zIHRoZSBlZmZlY3RpdmUgc2FtcGxlIGNvdW50IChjb3VsZCBiZSAwIGlmIG11bHRp
c2FtcGxlIHJlbmRlciB0YXJnZXRzIGFyZSBub3Qgc3VwcG9ydGVkKQorICAgICAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUudXBkYXRlUmVuZGVyVGFyZ2V0VGV4dHVyZVNhbXBsZUNvdW50ID0gZnVu
Y3Rpb24gKHRleHR1cmUsIHNhbXBsZXMpIHsKKyAgICAgICAgaWYgKHRoaXMud2ViR0xWZXJzaW9u
IDwgMiB8fCAhdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRleHR1cmUuc2FtcGxlcyA9PT0gc2FtcGxlcykgeworICAgICAgICAgICAgcmV0
dXJuIHNhbXBsZXM7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAg
ICAgIHNhbXBsZXMgPSBNYXRoLm1pbihzYW1wbGVzLCB0aGlzLmdldENhcHMoKS5tYXhNU0FBU2Ft
cGxlcyk7CisgICAgICAgIC8vIERpc3Bvc2UgcHJldmlvdXMgcmVuZGVyIGJ1ZmZlcnMKKyAgICAg
ICAgaWYgKHRleHR1cmUuX2RlcHRoU3RlbmNpbEJ1ZmZlcikgeworICAgICAgICAgICAgZ2wuZGVs
ZXRlUmVuZGVyYnVmZmVyKHRleHR1cmUuX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAg
ICB0ZXh0dXJlLl9kZXB0aFN0ZW5jaWxCdWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAg
IGlmICh0ZXh0dXJlLl9NU0FBRnJhbWVidWZmZXIpIHsKKyAgICAgICAgICAgIGdsLmRlbGV0ZUZy
YW1lYnVmZmVyKHRleHR1cmUuX01TQUFGcmFtZWJ1ZmZlcik7CisgICAgICAgICAgICB0ZXh0dXJl
Ll9NU0FBRnJhbWVidWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJl
Ll9NU0FBUmVuZGVyQnVmZmVyKSB7CisgICAgICAgICAgICBnbC5kZWxldGVSZW5kZXJidWZmZXIo
dGV4dHVyZS5fTVNBQVJlbmRlckJ1ZmZlcik7CisgICAgICAgICAgICB0ZXh0dXJlLl9NU0FBUmVu
ZGVyQnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2FtcGxlcyA+IDEpIHsK
KyAgICAgICAgICAgIHZhciBmcmFtZWJ1ZmZlciA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7Cisg
ICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJVbmFibGUgdG8gY3JlYXRlIG11bHRpIHNhbXBsZWQgZnJhbWVidWZmZXIiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHR1cmUuX01TQUFGcmFtZWJ1ZmZlciA9IGZyYW1l
YnVmZmVyOworICAgICAgICAgICAgdGhpcy5fYmluZFVuYm91bmRGcmFtZWJ1ZmZlcih0ZXh0dXJl
Ll9NU0FBRnJhbWVidWZmZXIpOworICAgICAgICAgICAgdmFyIGNvbG9yUmVuZGVyYnVmZmVyID0g
Z2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgICAgICAgICBpZiAoIWNvbG9yUmVuZGVyYnVm
ZmVyKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gY3JlYXRl
IG11bHRpIHNhbXBsZWQgZnJhbWVidWZmZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCBjb2xvclJlbmRlcmJ1ZmZlcik7
CisgICAgICAgICAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoZ2wuUkVOREVS
QlVGRkVSLCBzYW1wbGVzLCB0aGlzLl9nZXRSR0JBTXVsdGlTYW1wbGVCdWZmZXJGb3JtYXQodGV4
dHVyZS50eXBlKSwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQpOworICAgICAgICAgICAg
Z2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFD
SE1FTlQwLCBnbC5SRU5ERVJCVUZGRVIsIGNvbG9yUmVuZGVyYnVmZmVyKTsKKyAgICAgICAgICAg
IHRleHR1cmUuX01TQUFSZW5kZXJCdWZmZXIgPSBjb2xvclJlbmRlcmJ1ZmZlcjsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVidWZm
ZXIodGV4dHVyZS5fZnJhbWVidWZmZXIpOworICAgICAgICB9CisgICAgICAgIHRleHR1cmUuc2Ft
cGxlcyA9IHNhbXBsZXM7CisgICAgICAgIHRleHR1cmUuX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IHRo
aXMuX3NldHVwRnJhbWVidWZmZXJEZXB0aEF0dGFjaG1lbnRzKHRleHR1cmUuX2dlbmVyYXRlU3Rl
bmNpbEJ1ZmZlciwgdGV4dHVyZS5fZ2VuZXJhdGVEZXB0aEJ1ZmZlciwgdGV4dHVyZS53aWR0aCwg
dGV4dHVyZS5oZWlnaHQsIHNhbXBsZXMpOworICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGds
LlJFTkRFUkJVRkZFUiwgbnVsbCk7CisgICAgICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVidWZm
ZXIobnVsbCk7CisgICAgICAgIHJldHVybiBzYW1wbGVzOworICAgIH07CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl91cGxvYWRDb21wcmVzc2VkRGF0YVRvVGV4dHVy
ZURpcmVjdGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBkYXRhLCBmYWNlSW5kZXgsIGxvZCkgeworICAgICAgICBpZiAoZmFjZUluZGV4ID09PSB2
b2lkIDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAgICAgICBpZiAobG9kID09PSB2b2lkIDApIHsg
bG9kID0gMDsgfQorICAgICAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAgICAgICAgdmFyIHRhcmdl
dCA9IGdsLlRFWFRVUkVfMkQ7CisgICAgICAgIGlmICh0ZXh0dXJlLmlzQ3ViZSkgeworICAgICAg
ICAgICAgdGFyZ2V0ID0gZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dsLmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdl
dCwgbG9kLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZGF0YSk7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3VwbG9hZERhdGFUb1Rl
eHR1cmVEaXJlY3RseSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpbWFnZURhdGEsIGZhY2VJbmRleCwg
bG9kLCBiYWJ5bG9uSW50ZXJuYWxGb3JtYXQsIHVzZVRleHR1cmVXaWR0aEFuZEhlaWdodCkgewor
ICAgICAgICBpZiAoZmFjZUluZGV4ID09PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAg
ICAgICBpZiAobG9kID09PSB2b2lkIDApIHsgbG9kID0gMDsgfQorICAgICAgICBpZiAodXNlVGV4
dHVyZVdpZHRoQW5kSGVpZ2h0ID09PSB2b2lkIDApIHsgdXNlVGV4dHVyZVdpZHRoQW5kSGVpZ2h0
ID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIHZhciB0ZXh0
dXJlVHlwZSA9IHRoaXMuX2dldFdlYkdMVGV4dHVyZVR5cGUodGV4dHVyZS50eXBlKTsKKyAgICAg
ICAgdmFyIGZvcm1hdCA9IHRoaXMuX2dldEludGVybmFsRm9ybWF0KHRleHR1cmUuZm9ybWF0KTsK
KyAgICAgICAgdmFyIGludGVybmFsRm9ybWF0ID0gYmFieWxvbkludGVybmFsRm9ybWF0ID09PSB1
bmRlZmluZWQgPyB0aGlzLl9nZXRSR0JBQnVmZmVySW50ZXJuYWxTaXplZEZvcm1hdCh0ZXh0dXJl
LnR5cGUsIGZvcm1hdCkgOiB0aGlzLl9nZXRJbnRlcm5hbEZvcm1hdChiYWJ5bG9uSW50ZXJuYWxG
b3JtYXQpOworICAgICAgICB0aGlzLl91bnBhY2tGbGlwWSh0ZXh0dXJlLmludmVydFkpOworICAg
ICAgICB2YXIgdGFyZ2V0ID0gZ2wuVEVYVFVSRV8yRDsKKyAgICAgICAgaWYgKHRleHR1cmUuaXND
dWJlKSB7CisgICAgICAgICAgICB0YXJnZXQgPSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1ggKyBmYWNlSW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGxvZE1heFdpZHRoID0gTWF0
aC5yb3VuZChNYXRoLmxvZyh0ZXh0dXJlLndpZHRoKSAqIE1hdGguTE9HMkUpOworICAgICAgICB2
YXIgbG9kTWF4SGVpZ2h0ID0gTWF0aC5yb3VuZChNYXRoLmxvZyh0ZXh0dXJlLmhlaWdodCkgKiBN
YXRoLkxPRzJFKTsKKyAgICAgICAgdmFyIHdpZHRoID0gdXNlVGV4dHVyZVdpZHRoQW5kSGVpZ2h0
ID8gdGV4dHVyZS53aWR0aCA6IE1hdGgucG93KDIsIE1hdGgubWF4KGxvZE1heFdpZHRoIC0gbG9k
LCAwKSk7CisgICAgICAgIHZhciBoZWlnaHQgPSB1c2VUZXh0dXJlV2lkdGhBbmRIZWlnaHQgPyB0
ZXh0dXJlLmhlaWdodCA6IE1hdGgucG93KDIsIE1hdGgubWF4KGxvZE1heEhlaWdodCAtIGxvZCwg
MCkpOworICAgICAgICBnbC50ZXhJbWFnZTJEKHRhcmdldCwgbG9kLCBpbnRlcm5hbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0ZXh0dXJlVHlwZSwgaW1hZ2VEYXRhKTsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fdXBsb2FkQXJyYXlC
dWZmZXJWaWV3VG9UZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGltYWdlRGF0YSwgZmFjZUlu
ZGV4LCBsb2QpIHsKKyAgICAgICAgaWYgKGZhY2VJbmRleCA9PT0gdm9pZCAwKSB7IGZhY2VJbmRl
eCA9IDA7IH0KKyAgICAgICAgaWYgKGxvZCA9PT0gdm9pZCAwKSB7IGxvZCA9IDA7IH0KKyAgICAg
ICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIHZhciBiaW5kVGFyZ2V0ID0gdGV4dHVyZS5p
c0N1YmUgPyBnbC5URVhUVVJFX0NVQkVfTUFQIDogZ2wuVEVYVFVSRV8yRDsKKyAgICAgICAgdGhp
cy5fYmluZFRleHR1cmVEaXJlY3RseShiaW5kVGFyZ2V0LCB0ZXh0dXJlLCB0cnVlKTsKKyAgICAg
ICAgdGhpcy5fdXBsb2FkRGF0YVRvVGV4dHVyZURpcmVjdGx5KHRleHR1cmUsIGltYWdlRGF0YSwg
ZmFjZUluZGV4LCBsb2QpOworICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGJpbmRU
YXJnZXQsIG51bGwsIHRydWUpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBFbmdp
bmUucHJvdG90eXBlLl91cGxvYWRJbWFnZVRvVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBp
bWFnZSwgZmFjZUluZGV4LCBsb2QpIHsKKyAgICAgICAgaWYgKGZhY2VJbmRleCA9PT0gdm9pZCAw
KSB7IGZhY2VJbmRleCA9IDA7IH0KKyAgICAgICAgaWYgKGxvZCA9PT0gdm9pZCAwKSB7IGxvZCA9
IDA7IH0KKyAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIHZhciB0ZXh0dXJlVHlw
ZSA9IHRoaXMuX2dldFdlYkdMVGV4dHVyZVR5cGUodGV4dHVyZS50eXBlKTsKKyAgICAgICAgdmFy
IGZvcm1hdCA9IHRoaXMuX2dldEludGVybmFsRm9ybWF0KHRleHR1cmUuZm9ybWF0KTsKKyAgICAg
ICAgdmFyIGludGVybmFsRm9ybWF0ID0gdGhpcy5fZ2V0UkdCQUJ1ZmZlckludGVybmFsU2l6ZWRG
b3JtYXQodGV4dHVyZS50eXBlLCBmb3JtYXQpOworICAgICAgICB2YXIgYmluZFRhcmdldCA9IHRl
eHR1cmUuaXNDdWJlID8gZ2wuVEVYVFVSRV9DVUJFX01BUCA6IGdsLlRFWFRVUkVfMkQ7CisgICAg
ICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkoYmluZFRhcmdldCwgdGV4dHVyZSwgdHJ1ZSk7
CisgICAgICAgIHRoaXMuX3VucGFja0ZsaXBZKHRleHR1cmUuaW52ZXJ0WSk7CisgICAgICAgIHZh
ciB0YXJnZXQgPSBnbC5URVhUVVJFXzJEOworICAgICAgICBpZiAodGV4dHVyZS5pc0N1YmUpIHsK
KyAgICAgICAgICAgIHRhcmdldCA9IGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZh
Y2VJbmRleDsKKyAgICAgICAgfQorICAgICAgICBnbC50ZXhJbWFnZTJEKHRhcmdldCwgbG9kLCBp
bnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0ZXh0dXJlVHlwZSwgaW1hZ2UpOworICAgICAgICB0aGlz
Ll9iaW5kVGV4dHVyZURpcmVjdGx5KGJpbmRUYXJnZXQsIG51bGwsIHRydWUpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3Nl
dEN1YmVNYXBUZXh0dXJlUGFyYW1zID0gZnVuY3Rpb24gKGxvYWRNaXBtYXApIHsKKyAgICAgICAg
dmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV9D
VUJFX01BUCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpOworICAgICAgICBnbC50
ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfQ1VCRV9NQVAsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwg
bG9hZE1pcG1hcCA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTElORUFSKTsKKyAgICAg
ICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFX0NVQkVfTUFQLCBnbC5URVhUVVJFX1dSQVBf
UywgZ2wuQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVS
RV9DVUJFX01BUCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpOworICAgICAg
ICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyByYXcgY3ViZSB0ZXh0dXJlCisg
ICAgICogQHBhcmFtIGRhdGEgZGVmaW5lcyB0aGUgYXJyYXkgb2YgZGF0YSB0byB1c2UgdG8gY3Jl
YXRlIGVhY2ggZmFjZQorICAgICAqIEBwYXJhbSBzaXplIGRlZmluZXMgdGhlIHNpemUgb2YgdGhl
IHRleHR1cmVzCisgICAgICogQHBhcmFtIGZvcm1hdCBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgdGhl
IGRhdGEKKyAgICAgKiBAcGFyYW0gdHlwZSBkZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSBkYXRhIChs
aWtlIEVuZ2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQpCisgICAgICogQHBhcmFtIGdlbmVy
YXRlTWlwTWFwcyAgZGVmaW5lcyBpZiB0aGUgZW5naW5lIHNob3VsZCBnZW5lcmF0ZSB0aGUgbWlw
IGxldmVscworICAgICAqIEBwYXJhbSBpbnZlcnRZIGRlZmluZXMgaWYgZGF0YSBtdXN0IGJlIHN0
b3JlZCB3aXRoIFkgYXhpcyBpbnZlcnRlZAorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgZGVm
aW5lcyB0aGUgcmVxdWlyZWQgc2FtcGxpbmcgbW9kZSAobGlrZSBUZXh0dXJlLk5FQVJFU1RfU0FN
UExJTkdNT0RFKQorICAgICAqIEBwYXJhbSBjb21wcmVzc2lvbiBkZWZpbmVzIHRoZSBjb21wcmVz
c2lvbiB1c2VkIChudWxsIGJ5IGRlZmF1bHQpCisgICAgICogQHJldHVybnMgdGhlIGN1YmUgdGV4
dHVyZSBhcyBhbiBJbnRlcm5hbFRleHR1cmUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBl
LmNyZWF0ZVJhd0N1YmVUZXh0dXJlID0gZnVuY3Rpb24gKGRhdGEsIHNpemUsIGZvcm1hdCwgdHlw
ZSwgZ2VuZXJhdGVNaXBNYXBzLCBpbnZlcnRZLCBzYW1wbGluZ01vZGUsIGNvbXByZXNzaW9uKSB7
CisgICAgICAgIGlmIChjb21wcmVzc2lvbiA9PT0gdm9pZCAwKSB7IGNvbXByZXNzaW9uID0gbnVs
bDsgfQorICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiRW5naW5lLlJhd1RleHR1cmUiKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgcmF3IDNEIHRleHR1cmUKKyAgICAg
KiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJl
CisgICAgICogQHBhcmFtIHdpZHRoIGRlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlCisg
ICAgICogQHBhcmFtIGhlaWdodCBkZWZpbmVzIHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUKKyAg
ICAgKiBAcGFyYW0gZGVwdGggZGVmaW5lcyB0aGUgZGVwdGggb2YgdGhlIHRleHR1cmUKKyAgICAg
KiBAcGFyYW0gZm9ybWF0IGRlZmluZXMgdGhlIGZvcm1hdCBvZiB0aGUgdGV4dHVyZQorICAgICAq
IEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMgZGVmaW5lcyBpZiB0aGUgZW5naW5lIG11c3QgZ2VuZXJh
dGUgbWlwIGxldmVscworICAgICAqIEBwYXJhbSBpbnZlcnRZIGRlZmluZXMgaWYgZGF0YSBtdXN0
IGJlIHN0b3JlZCB3aXRoIFkgYXhpcyBpbnZlcnRlZAorICAgICAqIEBwYXJhbSBzYW1wbGluZ01v
ZGUgZGVmaW5lcyB0aGUgcmVxdWlyZWQgc2FtcGxpbmcgbW9kZSAobGlrZSBUZXh0dXJlLk5FQVJF
U1RfU0FNUExJTkdNT0RFKQorICAgICAqIEBwYXJhbSBjb21wcmVzc2lvbiBkZWZpbmVzIHRoZSBj
b21wcmVzc2VkIHVzZWQgKGNhbiBiZSBudWxsKQorICAgICAqIEBwYXJhbSB0ZXh0dXJlVHlwZSBk
ZWZpbmVzIHRoZSBjb21wcmVzc2VkIHVzZWQgKGNhbiBiZSBudWxsKQorICAgICAqIEByZXR1cm5z
IGEgbmV3IHJhdyAzRCB0ZXh0dXJlIChzdG9yZWQgaW4gYW4gSW50ZXJuYWxUZXh0dXJlKQorICAg
ICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuY3JlYXRlUmF3VGV4dHVyZTNEID0gZnVuY3Rpb24g
KGRhdGEsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGdlbmVyYXRlTWlwTWFwcywgaW52
ZXJ0WSwgc2FtcGxpbmdNb2RlLCBjb21wcmVzc2lvbiwgdGV4dHVyZVR5cGUpIHsKKyAgICAgICAg
aWYgKGNvbXByZXNzaW9uID09PSB2b2lkIDApIHsgY29tcHJlc3Npb24gPSBudWxsOyB9CisgICAg
ICAgIGlmICh0ZXh0dXJlVHlwZSA9PT0gdm9pZCAwKSB7IHRleHR1cmVUeXBlID0gRW5naW5lLlRF
WFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiRW5n
aW5lLlJhd1RleHR1cmUiKTsKKyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX3ByZXBhcmVX
ZWJHTFRleHR1cmVDb250aW51YXRpb24gPSBmdW5jdGlvbiAodGV4dHVyZSwgc2NlbmUsIG5vTWlw
bWFwLCBpc0NvbXByZXNzZWQsIHNhbXBsaW5nTW9kZSkgeworICAgICAgICB2YXIgZ2wgPSB0aGlz
Ll9nbDsKKyAgICAgICAgaWYgKCFnbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHZhciBmaWx0ZXJzID0gdGhpcy5fZ2V0U2FtcGxpbmdQYXJhbWV0ZXJzKHNhbXBs
aW5nTW9kZSwgIW5vTWlwbWFwKTsKKyAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJF
XzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGZpbHRlcnMubWFnKTsKKyAgICAgICAgZ2wudGV4
UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcnMu
bWluKTsKKyAgICAgICAgaWYgKCFub01pcG1hcCAmJiAhaXNDb21wcmVzc2VkKSB7CisgICAgICAg
ICAgICBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIG51bGwpOworICAgICAg
ICAvLyB0aGlzLnJlc2V0VGV4dHVyZUNhY2hlKCk7CisgICAgICAgIGlmIChzY2VuZSkgeworICAg
ICAgICAgICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKHRleHR1cmUpOworICAgICAgICB9Cisg
ICAgICAgIHRleHR1cmUub25Mb2FkZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0ZXh0dXJl
KTsKKyAgICAgICAgdGV4dHVyZS5vbkxvYWRlZE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICB9Owor
ICAgIEVuZ2luZS5wcm90b3R5cGUuX3ByZXBhcmVXZWJHTFRleHR1cmUgPSBmdW5jdGlvbiAodGV4
dHVyZSwgc2NlbmUsIHdpZHRoLCBoZWlnaHQsIGludmVydFksIG5vTWlwbWFwLCBpc0NvbXByZXNz
ZWQsIHByb2Nlc3NGdW5jdGlvbiwgc2FtcGxpbmdNb2RlKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIGlmIChzYW1wbGluZ01vZGUgPT09IHZvaWQgMCkgeyBzYW1wbGluZ01v
ZGUgPSBFbmdpbmUuVEVYVFVSRV9UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIHZh
ciBtYXhUZXh0dXJlU2l6ZSA9IHRoaXMuZ2V0Q2FwcygpLm1heFRleHR1cmVTaXplOworICAgICAg
ICB2YXIgcG90V2lkdGggPSBNYXRoLm1pbihtYXhUZXh0dXJlU2l6ZSwgdGhpcy5uZWVkUE9UVGV4
dHVyZXMgPyBFbmdpbmUuR2V0RXhwb25lbnRPZlR3byh3aWR0aCwgbWF4VGV4dHVyZVNpemUpIDog
d2lkdGgpOworICAgICAgICB2YXIgcG90SGVpZ2h0ID0gTWF0aC5taW4obWF4VGV4dHVyZVNpemUs
IHRoaXMubmVlZFBPVFRleHR1cmVzID8gRW5naW5lLkdldEV4cG9uZW50T2ZUd28oaGVpZ2h0LCBt
YXhUZXh0dXJlU2l6ZSkgOiBoZWlnaHQpOworICAgICAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAg
ICAgICAgaWYgKCFnbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGlmICghdGV4dHVyZS5fd2ViR0xUZXh0dXJlKSB7CisgICAgICAgICAgICAvLyAgdGhpcy5yZXNl
dFRleHR1cmVDYWNoZSgpOworICAgICAgICAgICAgaWYgKHNjZW5lKSB7CisgICAgICAgICAgICAg
ICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKHRleHR1cmUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlRGly
ZWN0bHkoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSwgdHJ1ZSk7CisgICAgICAgIHRoaXMuX3VucGFj
a0ZsaXBZKGludmVydFkgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAoaW52ZXJ0WSA/IHRydWUgOiBm
YWxzZSkpOworICAgICAgICB0ZXh0dXJlLmJhc2VXaWR0aCA9IHdpZHRoOworICAgICAgICB0ZXh0
dXJlLmJhc2VIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIHRleHR1cmUud2lkdGggPSBwb3RXaWR0
aDsKKyAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBwb3RIZWlnaHQ7CisgICAgICAgIHRleHR1cmUu
aXNSZWFkeSA9IHRydWU7CisgICAgICAgIGlmIChwcm9jZXNzRnVuY3Rpb24ocG90V2lkdGgsIHBv
dEhlaWdodCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMuX3ByZXBhcmVXZWJHTFRl
eHR1cmVDb250aW51YXRpb24odGV4dHVyZSwgc2NlbmUsIG5vTWlwbWFwLCBpc0NvbXByZXNzZWQs
IHNhbXBsaW5nTW9kZSk7CisgICAgICAgIH0pKSB7CisgICAgICAgICAgICAvLyBSZXR1cm5pbmcg
YXMgdGV4dHVyZSBuZWVkcyBleHRyYSBhc3luYyBzdGVwcworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX3ByZXBhcmVXZWJHTFRleHR1cmVDb250aW51YXRpb24o
dGV4dHVyZSwgc2NlbmUsIG5vTWlwbWFwLCBpc0NvbXByZXNzZWQsIHNhbXBsaW5nTW9kZSk7Cisg
ICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX2NvbnZlcnRS
R0J0b1JHQkFUZXh0dXJlRGF0YSA9IGZ1bmN0aW9uIChyZ2JEYXRhLCB3aWR0aCwgaGVpZ2h0LCB0
ZXh0dXJlVHlwZSkgeworICAgICAgICAvLyBDcmVhdGUgbmV3IFJHQkEgZGF0YSBjb250YWluZXIu
CisgICAgICAgIHZhciByZ2JhRGF0YTsKKyAgICAgICAgaWYgKHRleHR1cmVUeXBlID09PSBFbmdp
bmUuVEVYVFVSRVRZUEVfRkxPQVQpIHsKKyAgICAgICAgICAgIHJnYmFEYXRhID0gbmV3IEZsb2F0
MzJBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgcmdiYURhdGEgPSBuZXcgVWludDMyQXJyYXkod2lkdGggKiBoZWlnaHQgKiA0
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb252ZXJ0IGVhY2ggcGl4ZWwuCisgICAgICAgIGZv
ciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgZm9yICh2YXIgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAgIHZhciBpbmRleCA9ICh5ICog
d2lkdGggKyB4KSAqIDM7CisgICAgICAgICAgICAgICAgdmFyIG5ld0luZGV4ID0gKHkgKiB3aWR0
aCArIHgpICogNDsKKyAgICAgICAgICAgICAgICAvLyBNYXAgT2xkIFZhbHVlIHRvIG5ldyB2YWx1
ZS4KKyAgICAgICAgICAgICAgICByZ2JhRGF0YVtuZXdJbmRleCArIDBdID0gcmdiRGF0YVtpbmRl
eCArIDBdOworICAgICAgICAgICAgICAgIHJnYmFEYXRhW25ld0luZGV4ICsgMV0gPSByZ2JEYXRh
W2luZGV4ICsgMV07CisgICAgICAgICAgICAgICAgcmdiYURhdGFbbmV3SW5kZXggKyAyXSA9IHJn
YkRhdGFbaW5kZXggKyAyXTsKKyAgICAgICAgICAgICAgICAvLyBBZGQgZnVsbHkgb3BhcXVlIGFs
cGhhIGNoYW5uZWwuCisgICAgICAgICAgICAgICAgcmdiYURhdGFbbmV3SW5kZXggKyAzXSA9IDE7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJnYmFEYXRhOworICAg
IH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9yZWxlYXNlRnJh
bWVidWZmZXJPYmplY3RzID0gZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAgICAgICAgdmFyIGdsID0g
dGhpcy5fZ2w7CisgICAgICAgIGlmICh0ZXh0dXJlLl9mcmFtZWJ1ZmZlcikgeworICAgICAgICAg
ICAgZ2wuZGVsZXRlRnJhbWVidWZmZXIodGV4dHVyZS5fZnJhbWVidWZmZXIpOworICAgICAgICAg
ICAgdGV4dHVyZS5fZnJhbWVidWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0
ZXh0dXJlLl9kZXB0aFN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgICAgIGdsLmRlbGV0ZVJlbmRl
cmJ1ZmZlcih0ZXh0dXJlLl9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgdGV4dHVy
ZS5fZGVwdGhTdGVuY2lsQnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGV4
dHVyZS5fTVNBQUZyYW1lYnVmZmVyKSB7CisgICAgICAgICAgICBnbC5kZWxldGVGcmFtZWJ1ZmZl
cih0ZXh0dXJlLl9NU0FBRnJhbWVidWZmZXIpOworICAgICAgICAgICAgdGV4dHVyZS5fTVNBQUZy
YW1lYnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZS5fTVNBQVJl
bmRlckJ1ZmZlcikgeworICAgICAgICAgICAgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRleHR1cmUu
X01TQUFSZW5kZXJCdWZmZXIpOworICAgICAgICAgICAgdGV4dHVyZS5fTVNBQVJlbmRlckJ1ZmZl
ciA9IG51bGw7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5fcmVsZWFzZVRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAg
ICAgICB0aGlzLl9yZWxlYXNlRnJhbWVidWZmZXJPYmplY3RzKHRleHR1cmUpOworICAgICAgICB0
aGlzLl9kZWxldGVUZXh0dXJlKHRleHR1cmUuX3dlYkdMVGV4dHVyZSk7CisgICAgICAgIC8vIFVu
YmluZCBjaGFubmVscworICAgICAgICB0aGlzLnVuYmluZEFsbFRleHR1cmVzKCk7CisgICAgICAg
IHZhciBpbmRleCA9IHRoaXMuX2ludGVybmFsVGV4dHVyZXNDYWNoZS5pbmRleE9mKHRleHR1cmUp
OworICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICB0aGlzLl9pbnRlcm5h
bFRleHR1cmVzQ2FjaGUuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJ
bnRlZ3JhdGVkIGZpeGVkIGxvZCBzYW1wbGVycy4KKyAgICAgICAgaWYgKHRleHR1cmUuX2xvZFRl
eHR1cmVIaWdoKSB7CisgICAgICAgICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJlSGlnaC5kaXNwb3Nl
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmUuX2xvZFRleHR1cmVNaWQpIHsKKyAg
ICAgICAgICAgIHRleHR1cmUuX2xvZFRleHR1cmVNaWQuZGlzcG9zZSgpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0ZXh0dXJlLl9sb2RUZXh0dXJlTG93KSB7CisgICAgICAgICAgICB0ZXh0dXJl
Ll9sb2RUZXh0dXJlTG93LmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbnRlZ3Jh
dGVkIGlycmFkaWFuY2UgbWFwLgorICAgICAgICBpZiAodGV4dHVyZS5faXJyYWRpYW5jZVRleHR1
cmUpIHsKKyAgICAgICAgICAgIHRleHR1cmUuX2lycmFkaWFuY2VUZXh0dXJlLmRpc3Bvc2UoKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBTZXQgb3V0cHV0IHRleHR1cmUgb2YgcG9zdCBwcm9jZXNz
IHRvIG51bGwgaWYgdGhlIHRleHR1cmUgaGFzIGJlZW4gcmVsZWFzZWQvZGlzcG9zZWQKKyAgICAg
ICAgdGhpcy5zY2VuZXMuZm9yRWFjaChmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICAgICAgICAgIHNj
ZW5lLnBvc3RQcm9jZXNzZXMuZm9yRWFjaChmdW5jdGlvbiAocG9zdFByb2Nlc3MpIHsKKyAgICAg
ICAgICAgICAgICBpZiAocG9zdFByb2Nlc3MuX291dHB1dFRleHR1cmUgPT0gdGV4dHVyZSkgewor
ICAgICAgICAgICAgICAgICAgICBwb3N0UHJvY2Vzcy5fb3V0cHV0VGV4dHVyZSA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzY2VuZS5jYW1l
cmFzLmZvckVhY2goZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICAgICAgICAgIGNhbWVyYS5f
cG9zdFByb2Nlc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChwb3N0UHJvY2VzcykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAocG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwb3N0UHJvY2Vzcy5fb3V0cHV0VGV4dHVyZSA9PSB0ZXh0dXJlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9zdFByb2Nlc3MuX291dHB1dFRleHR1cmUgPSBudWxsOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBFbmdpbmUu
cHJvdG90eXBlLl9kZWxldGVUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAgICAgICAg
dGhpcy5fZ2wuZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTsKKyAgICB9OworICAgIEVuZ2luZS5wcm90
b3R5cGUuX3NldFByb2dyYW0gPSBmdW5jdGlvbiAocHJvZ3JhbSkgeworICAgICAgICBpZiAodGhp
cy5fY3VycmVudFByb2dyYW0gIT09IHByb2dyYW0pIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLnVz
ZVByb2dyYW0ocHJvZ3JhbSk7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50UHJvZ3JhbSA9IHBy
b2dyYW07CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRzIGFuIGVmZmVj
dCB0byB0aGUgd2ViR0wgY29udGV4dAorICAgICAqIEBwYXJhbSBlZmZlY3QgZGVmaW5lcyB0aGUg
ZWZmZWN0IHRvIGJpbmQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmJpbmRTYW1wbGVy
cyA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgdmFyIHdlYkdMUGlwZWxpbmVDb250ZXh0
ID0gZWZmZWN0LmdldFBpcGVsaW5lQ29udGV4dCgpOworICAgICAgICB0aGlzLl9zZXRQcm9ncmFt
KHdlYkdMUGlwZWxpbmVDb250ZXh0LnByb2dyYW0pOworICAgICAgICB2YXIgc2FtcGxlcnMgPSBl
ZmZlY3QuZ2V0U2FtcGxlcnMoKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IHNhbXBsZXJzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHVuaWZvcm0gPSBl
ZmZlY3QuZ2V0VW5pZm9ybShzYW1wbGVyc1tpbmRleF0pOworICAgICAgICAgICAgaWYgKHVuaWZv
cm0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ib3VuZFVuaWZvcm1zW2luZGV4XSA9IHVuaWZv
cm07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY3VycmVudEVmZmVj
dCA9IG51bGw7CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl9hY3RpdmF0ZUN1cnJlbnRU
ZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fY3VycmVudFRleHR1cmVD
aGFubmVsICE9PSB0aGlzLl9hY3RpdmVDaGFubmVsKSB7CisgICAgICAgICAgICB0aGlzLl9nbC5h
Y3RpdmVUZXh0dXJlKHRoaXMuX2dsLlRFWFRVUkUwICsgdGhpcy5fYWN0aXZlQ2hhbm5lbCk7Cisg
ICAgICAgICAgICB0aGlzLl9jdXJyZW50VGV4dHVyZUNoYW5uZWwgPSB0aGlzLl9hY3RpdmVDaGFu
bmVsOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEVuZ2luZS5w
cm90b3R5cGUuX2JpbmRUZXh0dXJlRGlyZWN0bHkgPSBmdW5jdGlvbiAodGFyZ2V0LCB0ZXh0dXJl
LCBmb3JUZXh0dXJlRGF0YVVwZGF0ZSwgZm9yY2UpIHsKKyAgICAgICAgaWYgKGZvclRleHR1cmVE
YXRhVXBkYXRlID09PSB2b2lkIDApIHsgZm9yVGV4dHVyZURhdGFVcGRhdGUgPSBmYWxzZTsgfQor
ICAgICAgICBpZiAoZm9yY2UgPT09IHZvaWQgMCkgeyBmb3JjZSA9IGZhbHNlOyB9CisgICAgICAg
IHZhciB3YXNQcmV2aW91c2x5Qm91bmQgPSBmYWxzZTsKKyAgICAgICAgdmFyIGlzVGV4dHVyZUZv
clJlbmRlcmluZyA9IHRleHR1cmUgJiYgdGV4dHVyZS5fYXNzb2NpYXRlZENoYW5uZWwgPiAtMTsK
KyAgICAgICAgaWYgKGZvclRleHR1cmVEYXRhVXBkYXRlICYmIGlzVGV4dHVyZUZvclJlbmRlcmlu
ZykgeworICAgICAgICAgICAgdGhpcy5fYWN0aXZlQ2hhbm5lbCA9IHRleHR1cmUuX2Fzc29jaWF0
ZWRDaGFubmVsOworICAgICAgICB9CisgICAgICAgIHZhciBjdXJyZW50VGV4dHVyZUJvdW5kID0g
dGhpcy5fYm91bmRUZXh0dXJlc0NhY2hlW3RoaXMuX2FjdGl2ZUNoYW5uZWxdOworICAgICAgICBp
ZiAoY3VycmVudFRleHR1cmVCb3VuZCAhPT0gdGV4dHVyZSB8fCBmb3JjZSkgeworICAgICAgICAg
ICAgdGhpcy5fYWN0aXZhdGVDdXJyZW50VGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKHRleHR1
cmUgJiYgdGV4dHVyZS5pc011bHRpdmlldykgeworICAgICAgICAgICAgICAgIHRoaXMuX2dsLmJp
bmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSA/IHRleHR1cmUuX2NvbG9yVGV4dHVyZUFycmF5IDog
bnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9nbC5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUgPyB0ZXh0dXJlLl93ZWJHTFRl
eHR1cmUgOiBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2JvdW5kVGV4
dHVyZXNDYWNoZVt0aGlzLl9hY3RpdmVDaGFubmVsXSA9IHRleHR1cmU7CisgICAgICAgICAgICBp
ZiAodGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRleHR1cmUuX2Fzc29jaWF0ZWRDaGFubmVs
ID0gdGhpcy5fYWN0aXZlQ2hhbm5lbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChmb3JUZXh0dXJlRGF0YVVwZGF0ZSkgeworICAgICAgICAgICAgd2FzUHJldmlv
dXNseUJvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX2FjdGl2YXRlQ3VycmVudFRleHR1
cmUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNUZXh0dXJlRm9yUmVuZGVyaW5nICYmICFm
b3JUZXh0dXJlRGF0YVVwZGF0ZSkgeworICAgICAgICAgICAgdGhpcy5fYmluZFNhbXBsZXJVbmlm
b3JtVG9DaGFubmVsKHRleHR1cmUuX2Fzc29jaWF0ZWRDaGFubmVsLCB0aGlzLl9hY3RpdmVDaGFu
bmVsKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gd2FzUHJldmlvdXNseUJvdW5kOworICAg
IH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9iaW5kVGV4dHVy
ZSA9IGZ1bmN0aW9uIChjaGFubmVsLCB0ZXh0dXJlKSB7CisgICAgICAgIGlmIChjaGFubmVsID09
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGV4dHVyZSkgeworICAgICAgICAgICAgdGV4dHVyZS5fYXNzb2NpYXRlZENoYW5uZWwgPSBj
aGFubmVsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2FjdGl2ZUNoYW5uZWwgPSBjaGFubmVs
OworICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfMkQs
IHRleHR1cmUpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIHRleHR1cmUgdG8gdGhl
IHdlYkdMIGNvbnRleHQgZnJvbSBhIHBvc3Rwcm9jZXNzCisgICAgICogQHBhcmFtIGNoYW5uZWwg
ZGVmaW5lcyB0aGUgY2hhbm5lbCB0byB1c2UKKyAgICAgKiBAcGFyYW0gcG9zdFByb2Nlc3MgZGVm
aW5lcyB0aGUgc291cmNlIHBvc3Rwcm9jZXNzCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlw
ZS5zZXRUZXh0dXJlRnJvbVBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKGNoYW5uZWwsIHBvc3RQcm9j
ZXNzKSB7CisgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlKGNoYW5uZWwsIHBvc3RQcm9jZXNzID8g
cG9zdFByb2Nlc3MuX3RleHR1cmVzLmRhdGFbcG9zdFByb2Nlc3MuX2N1cnJlbnRSZW5kZXJUZXh0
dXJlSW5kXSA6IG51bGwpOworICAgIH07CisgICAgLyoqCisgICAgICogQmluZHMgdGhlIG91dHB1
dCBvZiB0aGUgcGFzc2VkIGluIHBvc3QgcHJvY2VzcyB0byB0aGUgdGV4dHVyZSBjaGFubmVsIHNw
ZWNpZmllZAorICAgICAqIEBwYXJhbSBjaGFubmVsIFRoZSBjaGFubmVsIHRoZSB0ZXh0dXJlIHNo
b3VsZCBiZSBib3VuZCB0bworICAgICAqIEBwYXJhbSBwb3N0UHJvY2VzcyBUaGUgcG9zdCBwcm9j
ZXNzIHdoaWNoJ3Mgb3V0cHV0IHNob3VsZCBiZSBib3VuZAorICAgICAqLworICAgIEVuZ2luZS5w
cm90b3R5cGUuc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2Vzc091dHB1dCA9IGZ1bmN0aW9uIChjaGFu
bmVsLCBwb3N0UHJvY2VzcykgeworICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZShjaGFubmVsLCBw
b3N0UHJvY2VzcyA/IHBvc3RQcm9jZXNzLl9vdXRwdXRUZXh0dXJlIDogbnVsbCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBVbmJpbmQgYWxsIHRleHR1cmVzIGZyb20gdGhlIHdlYkdMIGNvbnRl
eHQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnVuYmluZEFsbFRleHR1cmVzID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBjaGFubmVsID0gMDsgY2hhbm5lbCA8IHRoaXMu
X21heFNpbXVsdGFuZW91c1RleHR1cmVzOyBjaGFubmVsKyspIHsKKyAgICAgICAgICAgIHRoaXMu
X2FjdGl2ZUNoYW5uZWwgPSBjaGFubmVsOworICAgICAgICAgICAgdGhpcy5fYmluZFRleHR1cmVE
aXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzJELCBudWxsKTsKKyAgICAgICAgICAgIHRoaXMuX2Jp
bmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7CisgICAg
ICAgICAgICBpZiAodGhpcy53ZWJHTFZlcnNpb24gPiAxKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzNELCBudWxsKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIHRleHR1
cmUgdG8gdGhlIGFjY29yZGluZyB1bmlmb3JtLgorICAgICAqIEBwYXJhbSBjaGFubmVsIFRoZSB0
ZXh0dXJlIGNoYW5uZWwKKyAgICAgKiBAcGFyYW0gdW5pZm9ybSBUaGUgdW5pZm9ybSB0byBzZXQK
KyAgICAgKiBAcGFyYW0gdGV4dHVyZSBUaGUgdGV4dHVyZSB0byBhcHBseQorICAgICAqIEBwYXJh
bSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGluIHRoZSBlZmZlY3QKKyAgICAgKi8KKyAg
ICBFbmdpbmUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbiAoY2hhbm5lbCwgdW5pZm9y
bSwgdGV4dHVyZSwgbmFtZSkgeworICAgICAgICBpZiAoY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVuaWZvcm0pIHsK
KyAgICAgICAgICAgIHRoaXMuX2JvdW5kVW5pZm9ybXNbY2hhbm5lbF0gPSB1bmlmb3JtOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX3NldFRleHR1cmUoY2hhbm5lbCwgdGV4dHVyZSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgZGVwdGggc3RlbmNpbCB0ZXh0dXJlIGZyb20gYSBy
ZW5kZXIgdGFyZ2V0IHRvIHRoZSBhY2NvcmRpbmcgdW5pZm9ybS4KKyAgICAgKiBAcGFyYW0gY2hh
bm5lbCBUaGUgdGV4dHVyZSBjaGFubmVsCisgICAgICogQHBhcmFtIHVuaWZvcm0gVGhlIHVuaWZv
cm0gdG8gc2V0CisgICAgICogQHBhcmFtIHRleHR1cmUgVGhlIHJlbmRlciB0YXJnZXQgdGV4dHVy
ZSBjb250YWluaW5nIHRoZSBkZXB0aCBzdGVuY2lsIHRleHR1cmUgdG8gYXBwbHkKKyAgICAgKi8K
KyAgICBFbmdpbmUucHJvdG90eXBlLnNldERlcHRoU3RlbmNpbFRleHR1cmUgPSBmdW5jdGlvbiAo
Y2hhbm5lbCwgdW5pZm9ybSwgdGV4dHVyZSkgeworICAgICAgICBpZiAoY2hhbm5lbCA9PT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVu
aWZvcm0pIHsKKyAgICAgICAgICAgIHRoaXMuX2JvdW5kVW5pZm9ybXNbY2hhbm5lbF0gPSB1bmlm
b3JtOworICAgICAgICB9CisgICAgICAgIGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS5kZXB0aFN0
ZW5jaWxUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9zZXRUZXh0dXJlKGNoYW5uZWwsIG51
bGwpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fc2V0VGV4
dHVyZShjaGFubmVsLCB0ZXh0dXJlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIEVuZ2luZS5wcm90b3R5cGUuX2JpbmRTYW1wbGVyVW5pZm9ybVRvQ2hhbm5lbCA9IGZ1bmN0
aW9uIChzb3VyY2VTbG90LCBkZXN0aW5hdGlvbikgeworICAgICAgICB2YXIgdW5pZm9ybSA9IHRo
aXMuX2JvdW5kVW5pZm9ybXNbc291cmNlU2xvdF07CisgICAgICAgIGlmICghdW5pZm9ybSB8fCB1
bmlmb3JtLl9jdXJyZW50U3RhdGUgPT09IGRlc3RpbmF0aW9uKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2wudW5pZm9ybTFpKHVuaWZvcm0sIGRlc3Rp
bmF0aW9uKTsKKyAgICAgICAgdW5pZm9ybS5fY3VycmVudFN0YXRlID0gZGVzdGluYXRpb247Cisg
ICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl9nZXRUZXh0dXJlV3JhcE1vZGUgPSBmdW5jdGlv
biAobW9kZSkgeworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRW5n
aW5lLlRFWFRVUkVfV1JBUF9BRERSRVNTTU9ERToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fZ2wuUkVQRUFUOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRV9DTEFNUF9BRERS
RVNTTU9ERToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuQ0xBTVBfVE9fRURHRTsK
KyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVfTUlSUk9SX0FERFJFU1NNT0RFOgorICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5NSVJST1JFRF9SRVBFQVQ7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJFUEVBVDsKKyAgICB9OworICAgIEVuZ2luZS5wcm90
b3R5cGUuX3NldFRleHR1cmUgPSBmdW5jdGlvbiAoY2hhbm5lbCwgdGV4dHVyZSwgaXNQYXJ0T2ZU
ZXh0dXJlQXJyYXksIGRlcHRoU3RlbmNpbFRleHR1cmUpIHsKKyAgICAgICAgaWYgKGlzUGFydE9m
VGV4dHVyZUFycmF5ID09PSB2b2lkIDApIHsgaXNQYXJ0T2ZUZXh0dXJlQXJyYXkgPSBmYWxzZTsg
fQorICAgICAgICBpZiAoZGVwdGhTdGVuY2lsVGV4dHVyZSA9PT0gdm9pZCAwKSB7IGRlcHRoU3Rl
bmNpbFRleHR1cmUgPSBmYWxzZTsgfQorICAgICAgICAvLyBOb3QgcmVhZHk/CisgICAgICAgIGlm
ICghdGV4dHVyZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2JvdW5kVGV4dHVyZXNDYWNoZVtj
aGFubmVsXSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlQ2hhbm5lbCA9
IGNoYW5uZWw7CisgICAgICAgICAgICAgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlz
Ll9nbC5URVhUVVJFXzJELCBudWxsKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9iaW5kVGV4dHVy
ZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpOworICAgICAgICAgICAg
ICAgIGlmICh0aGlzLndlYkdMVmVyc2lvbiA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzNELCBudWxsKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gVmlkZW8KKyAgICAgICAgaWYgKHRleHR1cmUudmlkZW8pIHsK
KyAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUNoYW5uZWwgPSBjaGFubmVsOworICAgICAgICAgICAg
dGV4dHVyZS51cGRhdGUoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0ZXh0dXJlLmRl
bGF5TG9hZFN0YXRlID09PSBFbmdpbmUuREVMQVlMT0FEU1RBVEVfTk9UTE9BREVEKSB7IC8vIERl
bGF5IGxvYWRpbmcKKyAgICAgICAgICAgIHRleHR1cmUuZGVsYXlMb2FkKCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGludGVybmFsVGV4dHVyZTsK
KyAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFRleHR1cmUpIHsKKyAgICAgICAgICAgIGludGVybmFs
VGV4dHVyZSA9IHRleHR1cmUuZGVwdGhTdGVuY2lsVGV4dHVyZTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICh0ZXh0dXJlLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgaW50ZXJuYWxUZXh0
dXJlID0gdGV4dHVyZS5nZXRJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmICh0ZXh0dXJlLmlzQ3ViZSkgeworICAgICAgICAgICAgaW50ZXJuYWxUZXh0dXJlID0g
dGhpcy5lbXB0eUN1YmVUZXh0dXJlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRleHR1
cmUuaXMzRCkgeworICAgICAgICAgICAgaW50ZXJuYWxUZXh0dXJlID0gdGhpcy5lbXB0eVRleHR1
cmUzRDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludGVybmFsVGV4
dHVyZSA9IHRoaXMuZW1wdHlUZXh0dXJlOworICAgICAgICB9CisgICAgICAgIGlmICghaXNQYXJ0
T2ZUZXh0dXJlQXJyYXkgJiYgaW50ZXJuYWxUZXh0dXJlKSB7CisgICAgICAgICAgICBpbnRlcm5h
bFRleHR1cmUuX2Fzc29jaWF0ZWRDaGFubmVsID0gY2hhbm5lbDsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgbmVlZFRvQmluZCA9IHRydWU7CisgICAgICAgIGlmICh0aGlzLl9ib3VuZFRleHR1cmVz
Q2FjaGVbY2hhbm5lbF0gPT09IGludGVybmFsVGV4dHVyZSkgeworICAgICAgICAgICAgaWYgKCFp
c1BhcnRPZlRleHR1cmVBcnJheSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2JpbmRTYW1wbGVy
VW5pZm9ybVRvQ2hhbm5lbChpbnRlcm5hbFRleHR1cmUuX2Fzc29jaWF0ZWRDaGFubmVsLCBjaGFu
bmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5lZWRUb0JpbmQgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9hY3RpdmVDaGFubmVsID0gY2hhbm5lbDsKKyAgICAgICAg
aWYgKGludGVybmFsVGV4dHVyZSAmJiBpbnRlcm5hbFRleHR1cmUuaXNNdWx0aXZpZXcpIHsKKyAg
ICAgICAgICAgIGlmIChuZWVkVG9CaW5kKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYmluZFRl
eHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzJEX0FSUkFZLCBpbnRlcm5hbFRleHR1cmUs
IGlzUGFydE9mVGV4dHVyZUFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChpbnRlcm5hbFRleHR1cmUgJiYgaW50ZXJuYWxUZXh0dXJlLmlzM0QpIHsKKyAg
ICAgICAgICAgIGlmIChuZWVkVG9CaW5kKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYmluZFRl
eHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzNELCBpbnRlcm5hbFRleHR1cmUsIGlzUGFy
dE9mVGV4dHVyZUFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnRlcm5h
bFRleHR1cmUgJiYgaW50ZXJuYWxUZXh0dXJlLl9jYWNoZWRXcmFwVSAhPT0gdGV4dHVyZS53cmFw
VSkgeworICAgICAgICAgICAgICAgIGludGVybmFsVGV4dHVyZS5fY2FjaGVkV3JhcFUgPSB0ZXh0
dXJlLndyYXBVOworICAgICAgICAgICAgICAgIHRoaXMuX3NldFRleHR1cmVQYXJhbWV0ZXJJbnRl
Z2VyKHRoaXMuX2dsLlRFWFRVUkVfM0QsIHRoaXMuX2dsLlRFWFRVUkVfV1JBUF9TLCB0aGlzLl9n
ZXRUZXh0dXJlV3JhcE1vZGUodGV4dHVyZS53cmFwVSksIGludGVybmFsVGV4dHVyZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW50ZXJuYWxUZXh0dXJlICYmIGludGVybmFsVGV4
dHVyZS5fY2FjaGVkV3JhcFYgIT09IHRleHR1cmUud3JhcFYpIHsKKyAgICAgICAgICAgICAgICBp
bnRlcm5hbFRleHR1cmUuX2NhY2hlZFdyYXBWID0gdGV4dHVyZS53cmFwVjsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9zZXRUZXh0dXJlUGFyYW1ldGVySW50ZWdlcih0aGlzLl9nbC5URVhUVVJFXzNE
LCB0aGlzLl9nbC5URVhUVVJFX1dSQVBfVCwgdGhpcy5fZ2V0VGV4dHVyZVdyYXBNb2RlKHRleHR1
cmUud3JhcFYpLCBpbnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGludGVybmFsVGV4dHVyZSAmJiBpbnRlcm5hbFRleHR1cmUuX2NhY2hlZFdyYXBSICE9PSB0
ZXh0dXJlLndyYXBSKSB7CisgICAgICAgICAgICAgICAgaW50ZXJuYWxUZXh0dXJlLl9jYWNoZWRX
cmFwUiA9IHRleHR1cmUud3JhcFI7CisgICAgICAgICAgICAgICAgdGhpcy5fc2V0VGV4dHVyZVBh
cmFtZXRlckludGVnZXIodGhpcy5fZ2wuVEVYVFVSRV8zRCwgdGhpcy5fZ2wuVEVYVFVSRV9XUkFQ
X1IsIHRoaXMuX2dldFRleHR1cmVXcmFwTW9kZSh0ZXh0dXJlLndyYXBSKSwgaW50ZXJuYWxUZXh0
dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3NldEFuaXNvdHJvcGljTGV2
ZWwodGhpcy5fZ2wuVEVYVFVSRV8zRCwgdGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAoaW50ZXJuYWxUZXh0dXJlICYmIGludGVybmFsVGV4dHVyZS5pc0N1YmUpIHsKKyAgICAg
ICAgICAgIGlmIChuZWVkVG9CaW5kKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYmluZFRleHR1
cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFX0NVQkVfTUFQLCBpbnRlcm5hbFRleHR1cmUsIGlz
UGFydE9mVGV4dHVyZUFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnRl
cm5hbFRleHR1cmUuX2NhY2hlZENvb3JkaW5hdGVzTW9kZSAhPT0gdGV4dHVyZS5jb29yZGluYXRl
c01vZGUpIHsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbFRleHR1cmUuX2NhY2hlZENvb3JkaW5h
dGVzTW9kZSA9IHRleHR1cmUuY29vcmRpbmF0ZXNNb2RlOworICAgICAgICAgICAgICAgIC8vIENV
QklDX01PREUgYW5kIFNLWUJPWF9NT0RFIGJvdGggcmVxdWlyZSBDTEFNUF9UT19FREdFLiAgQWxs
IG90aGVyIG1vZGVzIHVzZSBSRVBFQVQuCisgICAgICAgICAgICAgICAgdmFyIHRleHR1cmVXcmFw
TW9kZSA9ICh0ZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSAhPT0gRW5naW5lLlRFWFRVUkVfQ1VCSUNf
TU9ERSAmJiB0ZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSAhPT0gRW5naW5lLlRFWFRVUkVfU0tZQk9Y
X01PREUpID8gdGhpcy5fZ2wuUkVQRUFUIDogdGhpcy5fZ2wuQ0xBTVBfVE9fRURHRTsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9zZXRUZXh0dXJlUGFyYW1ldGVySW50ZWdlcih0aGlzLl9nbC5URVhU
VVJFX0NVQkVfTUFQLCB0aGlzLl9nbC5URVhUVVJFX1dSQVBfUywgdGV4dHVyZVdyYXBNb2RlLCBp
bnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgICAgIHRoaXMuX3NldFRleHR1cmVQYXJhbWV0
ZXJJbnRlZ2VyKHRoaXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuX2dsLlRFWFRVUkVfV1JB
UF9ULCB0ZXh0dXJlV3JhcE1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
c2V0QW5pc290cm9waWNMZXZlbCh0aGlzLl9nbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChuZWVkVG9CaW5kKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhU
VVJFXzJELCBpbnRlcm5hbFRleHR1cmUsIGlzUGFydE9mVGV4dHVyZUFycmF5KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChpbnRlcm5hbFRleHR1cmUgJiYgaW50ZXJuYWxUZXh0dXJl
Ll9jYWNoZWRXcmFwVSAhPT0gdGV4dHVyZS53cmFwVSkgeworICAgICAgICAgICAgICAgIGludGVy
bmFsVGV4dHVyZS5fY2FjaGVkV3JhcFUgPSB0ZXh0dXJlLndyYXBVOworICAgICAgICAgICAgICAg
IHRoaXMuX3NldFRleHR1cmVQYXJhbWV0ZXJJbnRlZ2VyKHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRo
aXMuX2dsLlRFWFRVUkVfV1JBUF9TLCB0aGlzLl9nZXRUZXh0dXJlV3JhcE1vZGUodGV4dHVyZS53
cmFwVSksIGludGVybmFsVGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aW50ZXJuYWxUZXh0dXJlICYmIGludGVybmFsVGV4dHVyZS5fY2FjaGVkV3JhcFYgIT09IHRleHR1
cmUud3JhcFYpIHsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbFRleHR1cmUuX2NhY2hlZFdyYXBW
ID0gdGV4dHVyZS53cmFwVjsKKyAgICAgICAgICAgICAgICB0aGlzLl9zZXRUZXh0dXJlUGFyYW1l
dGVySW50ZWdlcih0aGlzLl9nbC5URVhUVVJFXzJELCB0aGlzLl9nbC5URVhUVVJFX1dSQVBfVCwg
dGhpcy5fZ2V0VGV4dHVyZVdyYXBNb2RlKHRleHR1cmUud3JhcFYpLCBpbnRlcm5hbFRleHR1cmUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2V0QW5pc290cm9waWNMZXZlbCh0
aGlzLl9nbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYW4gYXJyYXkgb2YgdGV4dHVyZSB0
byB0aGUgd2ViR0wgY29udGV4dAorICAgICAqIEBwYXJhbSBjaGFubmVsIGRlZmluZXMgdGhlIGNo
YW5uZWwgd2hlcmUgdGhlIHRleHR1cmUgYXJyYXkgbXVzdCBiZSBzZXQKKyAgICAgKiBAcGFyYW0g
dW5pZm9ybSBkZWZpbmVzIHRoZSBhc3NvY2lhdGVkIHVuaWZvcm0gbG9jYXRpb24KKyAgICAgKiBA
cGFyYW0gdGV4dHVyZXMgZGVmaW5lcyB0aGUgYXJyYXkgb2YgdGV4dHVyZXMgdG8gYmluZAorICAg
ICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0VGV4dHVyZUFycmF5ID0gZnVuY3Rpb24gKGNo
YW5uZWwsIHVuaWZvcm0sIHRleHR1cmVzKSB7CisgICAgICAgIGlmIChjaGFubmVsID09PSB1bmRl
ZmluZWQgfHwgIXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIXRoaXMuX3RleHR1cmVVbml0cyB8fCB0aGlzLl90ZXh0dXJlVW5pdHMubGVuZ3Ro
ICE9PSB0ZXh0dXJlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuX3RleHR1cmVVbml0cyA9
IG5ldyBJbnQzMkFycmF5KHRleHR1cmVzLmxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0ZXh0dXJlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFy
IHRleHR1cmUgPSB0ZXh0dXJlc1tpXS5nZXRJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAgICAgICAg
IGlmICh0ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZVVuaXRzW2ldID0g
Y2hhbm5lbCArIGk7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5fYXNzb2NpYXRlZENoYW5uZWwg
PSBjaGFubmVsICsgaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHRoaXMuX3RleHR1cmVVbml0c1tpXSA9IC0xOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm0xaXYodW5pZm9ybSwgdGhpcy5fdGV4dHVy
ZVVuaXRzKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRleHR1cmVzLmxl
bmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdGhpcy5fc2V0VGV4dHVyZSh0aGlzLl90ZXh0
dXJlVW5pdHNbaW5kZXhdLCB0ZXh0dXJlc1tpbmRleF0sIHRydWUpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3NldEFuaXNvdHJv
cGljTGV2ZWwgPSBmdW5jdGlvbiAodGFyZ2V0LCB0ZXh0dXJlKSB7CisgICAgICAgIHZhciBpbnRl
cm5hbFRleHR1cmUgPSB0ZXh0dXJlLmdldEludGVybmFsVGV4dHVyZSgpOworICAgICAgICBpZiAo
IWludGVybmFsVGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHZhciBhbmlzb3Ryb3BpY0ZpbHRlckV4dGVuc2lvbiA9IHRoaXMuX2NhcHMudGV4dHVyZUFu
aXNvdHJvcGljRmlsdGVyRXh0ZW5zaW9uOworICAgICAgICB2YXIgdmFsdWUgPSB0ZXh0dXJlLmFu
aXNvdHJvcGljRmlsdGVyaW5nTGV2ZWw7CisgICAgICAgIGlmIChpbnRlcm5hbFRleHR1cmUuc2Ft
cGxpbmdNb2RlICE9PSBFbmdpbmUuVEVYVFVSRV9MSU5FQVJfTElORUFSX01JUE5FQVJFU1QKKyAg
ICAgICAgICAgICYmIGludGVybmFsVGV4dHVyZS5zYW1wbGluZ01vZGUgIT09IEVuZ2luZS5URVhU
VVJFX0xJTkVBUl9MSU5FQVJfTUlQTElORUFSCisgICAgICAgICAgICAmJiBpbnRlcm5hbFRleHR1
cmUuc2FtcGxpbmdNb2RlICE9PSBFbmdpbmUuVEVYVFVSRV9MSU5FQVJfTElORUFSKSB7CisgICAg
ICAgICAgICB2YWx1ZSA9IDE7IC8vIEZvcmNpbmcgdGhlIGFuaXNvdHJvcGljIHRvIDEgYmVjYXVz
ZSBlbHNlIHdlYmdsIHdpbGwgZm9yY2UgZmlsdGVycyB0byBsaW5lYXIKKyAgICAgICAgfQorICAg
ICAgICBpZiAoYW5pc290cm9waWNGaWx0ZXJFeHRlbnNpb24gJiYgaW50ZXJuYWxUZXh0dXJlLl9j
YWNoZWRBbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsICE9PSB2YWx1ZSkgeworICAgICAgICAgICAg
dGhpcy5fc2V0VGV4dHVyZVBhcmFtZXRlckZsb2F0KHRhcmdldCwgYW5pc290cm9waWNGaWx0ZXJF
eHRlbnNpb24uVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsIE1hdGgubWluKHZhbHVlLCB0aGlz
Ll9jYXBzLm1heEFuaXNvdHJvcHkpLCBpbnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgaW50
ZXJuYWxUZXh0dXJlLl9jYWNoZWRBbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsID0gdmFsdWU7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX3NldFRleHR1cmVQYXJhbWV0
ZXJGbG9hdCA9IGZ1bmN0aW9uICh0YXJnZXQsIHBhcmFtZXRlciwgdmFsdWUsIHRleHR1cmUpIHsK
KyAgICAgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseSh0YXJnZXQsIHRleHR1cmUsIHRydWUs
IHRydWUpOworICAgICAgICB0aGlzLl9nbC50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcGFyYW1ldGVy
LCB2YWx1ZSk7CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl9zZXRUZXh0dXJlUGFyYW1l
dGVySW50ZWdlciA9IGZ1bmN0aW9uICh0YXJnZXQsIHBhcmFtZXRlciwgdmFsdWUsIHRleHR1cmUp
IHsKKyAgICAgICAgaWYgKHRleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJl
RGlyZWN0bHkodGFyZ2V0LCB0ZXh0dXJlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9nbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcGFyYW1ldGVyLCB2YWx1ZSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZWFkcyBwaXhlbHMgZnJvbSB0aGUgY3VycmVudCBmcmFtZSBi
dWZmZXIuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gYmUgc2xvdworICAgICAq
IEBwYXJhbSB4IGRlZmluZXMgdGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcmVjdGFuZ2xlIHdoZXJl
IHBpeGVscyBtdXN0IGJlIHJlYWQKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5IGNvb3Jk
aW5hdGUgb2YgdGhlIHJlY3RhbmdsZSB3aGVyZSBwaXhlbHMgbXVzdCBiZSByZWFkCisgICAgICog
QHBhcmFtIHdpZHRoIGRlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUgd2hlcmUgcGl4
ZWxzIG11c3QgYmUgcmVhZAorICAgICAqIEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgaGVpZ2h0
IG9mIHRoZSByZWN0YW5nbGUgd2hlcmUgcGl4ZWxzIG11c3QgYmUgcmVhZAorICAgICAqIEByZXR1
cm5zIGEgVWludDhBcnJheSBjb250YWluaW5nIFJHQkEgY29sb3JzCisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5yZWFkUGl4ZWxzID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQp
IHsKKyAgICAgICAgdmFyIGRhdGEgPSBuZXcgVWludDhBcnJheShoZWlnaHQgKiB3aWR0aCAqIDQp
OworICAgICAgICB0aGlzLl9nbC5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIHRoaXMu
X2dsLlJHQkEsIHRoaXMuX2dsLlVOU0lHTkVEX0JZVEUsIGRhdGEpOworICAgICAgICByZXR1cm4g
ZGF0YTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBhbiBleHRlcm5hbHkgYXR0YWNoZWQg
ZGF0YSBmcm9tIGl0cyBrZXkuCisgICAgICogVGhpcyBtZXRob2QgY2FsbCB3aWxsIGZhaWwgYW5k
IHJldHVybiBmYWxzZSwgaWYgc3VjaCBrZXkgYWxyZWFkeSBleGlzdHMuCisgICAgICogSWYgeW91
IGRvbid0IGNhcmUgYW5kIGp1c3Qgd2FudCB0byBnZXQgdGhlIGRhdGEgbm8gbWF0dGVyIHdoYXQs
IHVzZSB0aGUgbW9yZSBjb252ZW5pZW50IGdldE9yQWRkRXh0ZXJuYWxEYXRhV2l0aEZhY3Rvcnko
KSBtZXRob2QuCisgICAgICogQHBhcmFtIGtleSB0aGUgdW5pcXVlIGtleSB0aGF0IGlkZW50aWZp
ZXMgdGhlIGRhdGEKKyAgICAgKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSBvYmplY3QgdG8gYXNzb2Np
YXRlIHRvIHRoZSBrZXkgZm9yIHRoaXMgRW5naW5lIGluc3RhbmNlCisgICAgICogQHJldHVybiB0
cnVlIGlmIG5vIHN1Y2gga2V5IHdlcmUgYWxyZWFkeSBwcmVzZW50IGFuZCB0aGUgZGF0YSB3YXMg
YWRkZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBFbmdpbmUu
cHJvdG90eXBlLmFkZEV4dGVybmFsRGF0YSA9IGZ1bmN0aW9uIChrZXksIGRhdGEpIHsKKyAgICAg
ICAgaWYgKCF0aGlzLl9leHRlcm5hbERhdGEpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4dGVybmFs
RGF0YSA9IG5ldyBfTWlzY19zdHJpbmdEaWN0aW9uYXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlN0cmluZ0RpY3Rpb25hcnkiXSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
aGlzLl9leHRlcm5hbERhdGEuYWRkKGtleSwgZGF0YSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBHZXQgYW4gZXh0ZXJuYWx5IGF0dGFjaGVkIGRhdGEgZnJvbSBpdHMga2V5CisgICAgICogQHBh
cmFtIGtleSB0aGUgdW5pcXVlIGtleSB0aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEKKyAgICAgKiBA
cmV0dXJuIHRoZSBhc3NvY2lhdGVkIGRhdGEsIGlmIHByZXNlbnQgKGNhbiBiZSBudWxsKSwgb3Ig
dW5kZWZpbmVkIGlmIG5vdCBwcmVzZW50CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5n
ZXRFeHRlcm5hbERhdGEgPSBmdW5jdGlvbiAoa2V5KSB7CisgICAgICAgIGlmICghdGhpcy5fZXh0
ZXJuYWxEYXRhKSB7CisgICAgICAgICAgICB0aGlzLl9leHRlcm5hbERhdGEgPSBuZXcgX01pc2Nf
c3RyaW5nRGljdGlvbmFyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTdHJpbmdEaWN0
aW9uYXJ5Il0oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fZXh0ZXJuYWxEYXRh
LmdldChrZXkpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGFuIGV4dGVybmFseSBhdHRh
Y2hlZCBkYXRhIGZyb20gaXRzIGtleSwgY3JlYXRlIGl0IHVzaW5nIGEgZmFjdG9yeSBpZiBpdCdz
IG5vdCBhbHJlYWR5IHByZXNlbnQKKyAgICAgKiBAcGFyYW0ga2V5IHRoZSB1bmlxdWUga2V5IHRo
YXQgaWRlbnRpZmllcyB0aGUgZGF0YQorICAgICAqIEBwYXJhbSBmYWN0b3J5IHRoZSBmYWN0b3J5
IHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gY3JlYXRlIHRoZSBpbnN0YW5jZSBpZiBhbmQgb25seSBp
ZiBpdCBkb2Vzbid0IGV4aXN0cworICAgICAqIEByZXR1cm4gdGhlIGFzc29jaWF0ZWQgZGF0YSwg
Y2FuIGJlIG51bGwgaWYgdGhlIGZhY3RvcnkgcmV0dXJuZWQgbnVsbC4KKyAgICAgKi8KKyAgICBF
bmdpbmUucHJvdG90eXBlLmdldE9yQWRkRXh0ZXJuYWxEYXRhV2l0aEZhY3RvcnkgPSBmdW5jdGlv
biAoa2V5LCBmYWN0b3J5KSB7CisgICAgICAgIGlmICghdGhpcy5fZXh0ZXJuYWxEYXRhKSB7Cisg
ICAgICAgICAgICB0aGlzLl9leHRlcm5hbERhdGEgPSBuZXcgX01pc2Nfc3RyaW5nRGljdGlvbmFy
eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTdHJpbmdEaWN0aW9uYXJ5Il0oKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fZXh0ZXJuYWxEYXRhLmdldE9yQWRkV2l0aEZh
Y3Rvcnkoa2V5LCBmYWN0b3J5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhbiBl
eHRlcm5hbHkgYXR0YWNoZWQgZGF0YSBmcm9tIHRoZSBFbmdpbmUgaW5zdGFuY2UKKyAgICAgKiBA
cGFyYW0ga2V5IHRoZSB1bmlxdWUga2V5IHRoYXQgaWRlbnRpZmllcyB0aGUgZGF0YQorICAgICAq
IEByZXR1cm4gdHJ1ZSBpZiB0aGUgZGF0YSB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQsIGZhbHNl
IGlmIGl0IGRvZXNuJ3QgZXhpc3QKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnJlbW92
ZUV4dGVybmFsRGF0YSA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leHRl
cm5hbERhdGEpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4dGVybmFsRGF0YSA9IG5ldyBfTWlzY19z
dHJpbmdEaWN0aW9uYXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlN0cmluZ0RpY3Rp
b25hcnkiXSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9leHRlcm5hbERhdGEu
cmVtb3ZlKGtleSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVbmJpbmQgYWxsIHZlcnRleCBh
dHRyaWJ1dGVzIGZyb20gdGhlIHdlYkdMIGNvbnRleHQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJv
dG90eXBlLnVuYmluZEFsbEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLl9tdXN0V2lwZVZlcnRleEF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX211c3RX
aXBlVmVydGV4QXR0cmlidXRlcyA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0aGlzLl9jYXBzLm1heFZlcnRleEF0dHJpYnM7IGkrKykgeworICAgICAgICAgICAgICAg
IHRoaXMuX2dsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTsKKyAgICAgICAgICAgICAgICB0
aGlzLl92ZXJ0ZXhBdHRyaWJBcnJheXNFbmFibGVkW2ldID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgdGhpcy5fY3VycmVudEJ1ZmZlclBvaW50ZXJzW2ldLmFjdGl2ZSA9IGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAodmFy
IGkgPSAwLCB1bCA9IHRoaXMuX3ZlcnRleEF0dHJpYkFycmF5c0VuYWJsZWQubGVuZ3RoOyBpIDwg
dWw7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPj0gdGhpcy5fY2Fwcy5tYXhWZXJ0ZXhBdHRy
aWJzIHx8ICF0aGlzLl92ZXJ0ZXhBdHRyaWJBcnJheXNFbmFibGVkW2ldKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9nbC5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoaSk7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJB
cnJheXNFbmFibGVkW2ldID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50QnVmZmVy
UG9pbnRlcnNbaV0uYWN0aXZlID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIEZvcmNlIHRoZSBlbmdpbmUgdG8gcmVsZWFzZSBhbGwgY2FjaGVkIGVmZmVjdHMuIFRo
aXMgbWVhbnMgdGhhdCBuZXh0IGVmZmVjdCBjb21waWxhdGlvbiB3aWxsIGhhdmUgdG8gYmUgZG9u
ZSBjb21wbGV0ZWx5IGV2ZW4gaWYgYSBzaW1pbGFyIGVmZmVjdCB3YXMgYWxyZWFkeSBjb21waWxl
ZAorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUucmVsZWFzZUVmZmVjdHMgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fY29tcGlsZWRFZmZlY3RzKSB7
CisgICAgICAgICAgICB2YXIgd2ViR0xQaXBlbGluZUNvbnRleHQgPSB0aGlzLl9jb21waWxlZEVm
ZmVjdHNbbmFtZV0uZ2V0UGlwZWxpbmVDb250ZXh0KCk7CisgICAgICAgICAgICB0aGlzLl9kZWxl
dGVQaXBlbGluZUNvbnRleHQod2ViR0xQaXBlbGluZUNvbnRleHQpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2NvbXBpbGVkRWZmZWN0cyA9IHt9OworICAgIH07CisgICAgLyoqCisgICAgICog
RGlzcG9zZSBhbmQgcmVsZWFzZSBhbGwgYXNzb2NpYXRlZCByZXNvdXJjZXMKKyAgICAgKi8KKyAg
ICBFbmdpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMu
aGlkZUxvYWRpbmdVSSgpOworICAgICAgICB0aGlzLnN0b3BSZW5kZXJMb29wKCk7CisgICAgICAg
IHRoaXMub25OZXdTY2VuZUFkZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICAvLyBSZWxl
YXNlIHBvc3RQcm9jZXNzZXMKKyAgICAgICAgd2hpbGUgKHRoaXMucG9zdFByb2Nlc3Nlcy5sZW5n
dGgpIHsKKyAgICAgICAgICAgIHRoaXMucG9zdFByb2Nlc3Nlc1swXS5kaXNwb3NlKCk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gRW1wdHkgdGV4dHVyZQorICAgICAgICBpZiAodGhpcy5fZW1wdHlU
ZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9yZWxlYXNlVGV4dHVyZSh0aGlzLl9lbXB0eVRl
eHR1cmUpOworICAgICAgICAgICAgdGhpcy5fZW1wdHlUZXh0dXJlID0gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5fZW1wdHlDdWJlVGV4dHVyZSkgeworICAgICAgICAgICAgdGhp
cy5fcmVsZWFzZVRleHR1cmUodGhpcy5fZW1wdHlDdWJlVGV4dHVyZSk7CisgICAgICAgICAgICB0
aGlzLl9lbXB0eUN1YmVUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXNj
YWxlIFBQCisgICAgICAgIGlmICh0aGlzLl9yZXNjYWxlUG9zdFByb2Nlc3MpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3Jlc2NhbGVQb3N0UHJvY2Vzcy5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gUmVsZWFzZSBzY2VuZXMKKyAgICAgICAgd2hpbGUgKHRoaXMuc2NlbmVzLmxlbmd0aCkg
eworICAgICAgICAgICAgdGhpcy5zY2VuZXNbMF0uZGlzcG9zZSgpOworICAgICAgICB9CisgICAg
ICAgIC8vIFJlbGVhc2UgYXVkaW8gZW5naW5lCisgICAgICAgIGlmIChFbmdpbmUuSW5zdGFuY2Vz
Lmxlbmd0aCA9PT0gMSAmJiBFbmdpbmUuYXVkaW9FbmdpbmUpIHsKKyAgICAgICAgICAgIEVuZ2lu
ZS5hdWRpb0VuZ2luZS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVsZWFzZSBl
ZmZlY3RzCisgICAgICAgIHRoaXMucmVsZWFzZUVmZmVjdHMoKTsKKyAgICAgICAgLy8gVW5iaW5k
CisgICAgICAgIHRoaXMudW5iaW5kQWxsQXR0cmlidXRlcygpOworICAgICAgICB0aGlzLl9ib3Vu
ZFVuaWZvcm1zID0gW107CisgICAgICAgIGlmICh0aGlzLl9kdW1teUZyYW1lYnVmZmVyKSB7Cisg
ICAgICAgICAgICB0aGlzLl9nbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLl9kdW1teUZyYW1lYnVm
ZmVyKTsKKyAgICAgICAgfQorICAgICAgICAvL1dlYlZSCisgICAgICAgIHRoaXMuZGlzYWJsZVZS
KCk7CisgICAgICAgIC8vIEV2ZW50cworICAgICAgICBpZiAoX01pc2NfZG9tTWFuYWdlbWVudF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJEb21NYW5hZ2VtZW50Il0uSXNXaW5kb3dPYmpl
Y3RFeGlzdCgpKSB7CisgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1
ciIsIHRoaXMuX29uQmx1cik7CisgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5l
cigiZm9jdXMiLCB0aGlzLl9vbkZvY3VzKTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZW5kZXJp
bmdDYW52YXMpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdDYW52YXMucmVtb3Zl
RXZlbnRMaXN0ZW5lcigiZm9jdXMiLCB0aGlzLl9vbkNhbnZhc0ZvY3VzKTsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9yZW5kZXJpbmdDYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsIHRo
aXMuX29uQ2FudmFzQmx1cik7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nQ2FudmFz
LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJvdXQiLCB0aGlzLl9vbkNhbnZhc1BvaW50ZXJP
dXQpOworICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZG9Ob3RIYW5kbGVDb250ZXh0TG9zdCkg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdDYW52YXMucmVtb3ZlRXZlbnRM
aXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsIHRoaXMuX29uQ29udGV4dExvc3QpOworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdDYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
d2ViZ2xjb250ZXh0cmVzdG9yZWQiLCB0aGlzLl9vbkNvbnRleHRSZXN0b3JlZCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZl
bnRMaXN0ZW5lcigiZnVsbHNjcmVlbmNoYW5nZSIsIHRoaXMuX29uRnVsbHNjcmVlbkNoYW5nZSk7
CisgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3pmdWxsc2NyZWVu
Y2hhbmdlIiwgdGhpcy5fb25GdWxsc2NyZWVuQ2hhbmdlKTsKKyAgICAgICAgICAgIGRvY3VtZW50
LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCB0aGlzLl9vbkZ1
bGxzY3JlZW5DaGFuZ2UpOworICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5l
cigibXNmdWxsc2NyZWVuY2hhbmdlIiwgdGhpcy5fb25GdWxsc2NyZWVuQ2hhbmdlKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJsb2NrY2hhbmdlIiwg
dGhpcy5fb25Qb2ludGVyTG9ja0NoYW5nZSk7CisgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVF
dmVudExpc3RlbmVyKCJtc3BvaW50ZXJsb2NrY2hhbmdlIiwgdGhpcy5fb25Qb2ludGVyTG9ja0No
YW5nZSk7CisgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3pwb2lu
dGVybG9ja2NoYW5nZSIsIHRoaXMuX29uUG9pbnRlckxvY2tDaGFuZ2UpOworICAgICAgICAgICAg
ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2Via2l0cG9pbnRlcmxvY2tjaGFuZ2UiLCB0
aGlzLl9vblBvaW50ZXJMb2NrQ2hhbmdlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZW1vdmUg
ZnJvbSBJbnN0YW5jZXMKKyAgICAgICAgdmFyIGluZGV4ID0gRW5naW5lLkluc3RhbmNlcy5pbmRl
eE9mKHRoaXMpOworICAgICAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAgICAgICAgRW5naW5l
Lkluc3RhbmNlcy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3dv
cmtpbmdDYW52YXMgPSBudWxsOworICAgICAgICB0aGlzLl93b3JraW5nQ29udGV4dCA9IG51bGw7
CisgICAgICAgIHRoaXMuX2N1cnJlbnRCdWZmZXJQb2ludGVycyA9IFtdOworICAgICAgICB0aGlz
Ll9yZW5kZXJpbmdDYW52YXMgPSBudWxsOworICAgICAgICB0aGlzLl9jdXJyZW50UHJvZ3JhbSA9
IG51bGw7CisgICAgICAgIHRoaXMuX2JpbmRlZFJlbmRlckZ1bmN0aW9uID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5vblJlc2l6ZU9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkNhbnZh
c0JsdXJPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25DYW52YXNGb2N1c09ic2Vy
dmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkNhbnZhc1BvaW50ZXJPdXRPYnNlcnZhYmxl
LmNsZWFyKCk7CisgICAgICAgIHRoaXMub25CZWdpbkZyYW1lT2JzZXJ2YWJsZS5jbGVhcigpOwor
ICAgICAgICB0aGlzLm9uRW5kRnJhbWVPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIF9NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVmZmVjdCJdLlJlc2V0
Q2FjaGUoKTsKKyAgICAgICAgLy8gQWJvcnQgYWN0aXZlIHJlcXVlc3RzCisgICAgICAgIGZvciAo
dmFyIF9pID0gMCwgX2EgPSB0aGlzLl9hY3RpdmVSZXF1ZXN0czsgX2kgPCBfYS5sZW5ndGg7IF9p
KyspIHsKKyAgICAgICAgICAgIHZhciByZXF1ZXN0ID0gX2FbX2ldOworICAgICAgICAgICAgcmVx
dWVzdC5hYm9ydCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvLyBMb2FkaW5nIHNjcmVlbgor
ICAgIC8qKgorICAgICAqIERpc3BsYXkgdGhlIGxvYWRpbmcgc2NyZWVuCisgICAgICogQHNlZSBo
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2NyZWF0aW5nX2FfY3VzdG9tX2xvYWRpbmdf
c2NyZWVuCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5kaXNwbGF5TG9hZGluZ1VJID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIV9NaXNjX2RvbU1hbmFnZW1lbnRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfX1siRG9tTWFuYWdlbWVudCJdLklzV2luZG93T2JqZWN0RXhpc3Qo
KSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBsb2FkaW5n
U2NyZWVuID0gdGhpcy5sb2FkaW5nU2NyZWVuOworICAgICAgICBpZiAobG9hZGluZ1NjcmVlbikg
eworICAgICAgICAgICAgbG9hZGluZ1NjcmVlbi5kaXNwbGF5TG9hZGluZ1VJKCk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEhpZGUgdGhlIGxvYWRpbmcgc2NyZWVuCisgICAg
ICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2NyZWF0aW5nX2FfY3VzdG9t
X2xvYWRpbmdfc2NyZWVuCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5oaWRlTG9hZGlu
Z1VJID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIV9NaXNjX2RvbU1hbmFnZW1lbnRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siRG9tTWFuYWdlbWVudCJdLklzV2luZG93T2JqZWN0
RXhpc3QoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBs
b2FkaW5nU2NyZWVuID0gdGhpcy5fbG9hZGluZ1NjcmVlbjsKKyAgICAgICAgaWYgKGxvYWRpbmdT
Y3JlZW4pIHsKKyAgICAgICAgICAgIGxvYWRpbmdTY3JlZW4uaGlkZUxvYWRpbmdVSSgpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lLnByb3RvdHlw
ZSwgImxvYWRpbmdTY3JlZW4iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBj
dXJyZW50IGxvYWRpbmcgc2NyZWVuIG9iamVjdAorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vY3JlYXRpbmdfYV9jdXN0b21fbG9hZGluZ19zY3JlZW4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0
aGlzLl9sb2FkaW5nU2NyZWVuICYmIHRoaXMuX3JlbmRlcmluZ0NhbnZhcykgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2xvYWRpbmdTY3JlZW4gPSBFbmdpbmUuRGVmYXVsdExvYWRpbmdTY3JlZW5G
YWN0b3J5KHRoaXMuX3JlbmRlcmluZ0NhbnZhcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fbG9hZGluZ1NjcmVlbjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNldHMgdGhlIGN1cnJlbnQgbG9hZGluZyBzY3JlZW4gb2JqZWN0CisgICAgICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jcmVhdGluZ19hX2N1c3Rv
bV9sb2FkaW5nX3NjcmVlbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9h
ZGluZ1NjcmVlbikgeworICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1NjcmVlbiA9IGxvYWRpbmdT
Y3JlZW47CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdp
bmUucHJvdG90eXBlLCAibG9hZGluZ1VJVGV4dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFNldHMgdGhlIGN1cnJlbnQgbG9hZGluZyBzY3JlZW4gdGV4dAorICAgICAgICAgKiBAc2VlIGh0
dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3JlYXRpbmdfYV9jdXN0b21fbG9hZGluZ19z
Y3JlZW4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpIHsKKyAgICAg
ICAgICAgIHRoaXMubG9hZGluZ1NjcmVlbi5sb2FkaW5nVUlUZXh0ID0gdGV4dDsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuZ2luZS5wcm90b3R5cGUsICJs
b2FkaW5nVUlCYWNrZ3JvdW5kQ29sb3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRz
IHRoZSBjdXJyZW50IGxvYWRpbmcgc2NyZWVuIGJhY2tncm91bmQgY29sb3IKKyAgICAgICAgICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2NyZWF0aW5nX2FfY3VzdG9tX2xv
YWRpbmdfc2NyZWVuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb2xvcikg
eworICAgICAgICAgICAgdGhpcy5sb2FkaW5nU2NyZWVuLmxvYWRpbmdVSUJhY2tncm91bmRDb2xv
ciA9IGNvbG9yOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2ggYSBu
ZXcgY2FsbGJhY2sgcmFpc2VkIHdoZW4gY29udGV4dCBsb3N0IGV2ZW50IGlzIGZpcmVkCisgICAg
ICogQHBhcmFtIGNhbGxiYWNrIGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIGNhbGwKKyAgICAgKi8K
KyAgICBFbmdpbmUucHJvdG90eXBlLmF0dGFjaENvbnRleHRMb3N0RXZlbnQgPSBmdW5jdGlvbiAo
Y2FsbGJhY2spIHsKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmluZ0NhbnZhcykgeworICAgICAg
ICAgICAgdGhpcy5fcmVuZGVyaW5nQ2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4
dGxvc3QiLCBjYWxsYmFjaywgZmFsc2UpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBdHRhY2ggYSBuZXcgY2FsbGJhY2sgcmFpc2VkIHdoZW4gY29udGV4dCByZXN0b3JlZCBl
dmVudCBpcyBmaXJlZAorICAgICAqIEBwYXJhbSBjYWxsYmFjayBkZWZpbmVzIHRoZSBjYWxsYmFj
ayB0byBjYWxsCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5hdHRhY2hDb250ZXh0UmVz
dG9yZWRFdmVudCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICBpZiAodGhpcy5fcmVu
ZGVyaW5nQ2FudmFzKSB7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdDYW52YXMuYWRkRXZl
bnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCBjYWxsYmFjaywgZmFsc2UpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzb3VyY2UgY29kZSBvZiB0
aGUgdmVydGV4IHNoYWRlciBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyB3ZWJHTCBwcm9ncmFt
CisgICAgICogQHBhcmFtIHByb2dyYW0gZGVmaW5lcyB0aGUgcHJvZ3JhbSB0byB1c2UKKyAgICAg
KiBAcmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgdmVy
dGV4IHNoYWRlciBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2dyYW0KKyAgICAgKi8KKyAgICBFbmdp
bmUucHJvdG90eXBlLmdldFZlcnRleFNoYWRlclNvdXJjZSA9IGZ1bmN0aW9uIChwcm9ncmFtKSB7
CisgICAgICAgIHZhciBzaGFkZXJzID0gdGhpcy5fZ2wuZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dy
YW0pOworICAgICAgICBpZiAoIXNoYWRlcnMpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nbC5nZXRTaGFkZXJTb3VyY2Uoc2hhZGVy
c1swXSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzb3VyY2UgY29kZSBvZiB0
aGUgZnJhZ21lbnQgc2hhZGVyIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIHdlYkdMIHByb2dy
YW0KKyAgICAgKiBAcGFyYW0gcHJvZ3JhbSBkZWZpbmVzIHRoZSBwcm9ncmFtIHRvIHVzZQorICAg
ICAqIEByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBm
cmFnbWVudCBzaGFkZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9ncmFtCisgICAgICovCisgICAg
RW5naW5lLnByb3RvdHlwZS5nZXRGcmFnbWVudFNoYWRlclNvdXJjZSA9IGZ1bmN0aW9uIChwcm9n
cmFtKSB7CisgICAgICAgIHZhciBzaGFkZXJzID0gdGhpcy5fZ2wuZ2V0QXR0YWNoZWRTaGFkZXJz
KHByb2dyYW0pOworICAgICAgICBpZiAoIXNoYWRlcnMpIHsKKyAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nbC5nZXRTaGFkZXJTb3VyY2Uo
c2hhZGVyc1sxXSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgZXJy
b3IgY29kZSBvZiB0aGUgd2ViR0wgY29udGV4dAorICAgICAqIEByZXR1cm5zIHRoZSBlcnJvciBj
b2RlCisgICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2Nz
L1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2dldEVycm9yCisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5nZXRFcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2dsLmdldEVycm9yKCk7CisgICAgfTsKKyAgICAvLyBGUFMKKyAgICAvKioKKyAgICAgKiBH
ZXRzIHRoZSBjdXJyZW50IGZyYW1lcmF0ZQorICAgICAqIEByZXR1cm5zIGEgbnVtYmVyIHJlcHJl
c2VudGluZyB0aGUgZnJhbWVyYXRlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRG
cHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9mcHM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXRzIHRoZSB0aW1lIHNwZW50IGJldHdlZW4gY3VycmVudCBhbmQgcHJl
dmlvdXMgZnJhbWUKKyAgICAgKiBAcmV0dXJucyBhIG51bWJlciByZXByZXNlbnRpbmcgdGhlIGRl
bHRhIHRpbWUgaW4gbXMKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmdldERlbHRhVGlt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RlbHRhVGltZTsKKyAgICB9
OworICAgIEVuZ2luZS5wcm90b3R5cGUuX21lYXN1cmVGcHMgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX3BlcmZvcm1hbmNlTW9uaXRvci5zYW1wbGVGcmFtZSgpOworICAgICAgICB0aGlz
Ll9mcHMgPSB0aGlzLl9wZXJmb3JtYW5jZU1vbml0b3IuYXZlcmFnZUZQUzsKKyAgICAgICAgdGhp
cy5fZGVsdGFUaW1lID0gdGhpcy5fcGVyZm9ybWFuY2VNb25pdG9yLmluc3RhbnRhbmVvdXNGcmFt
ZVRpbWUgfHwgMDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3Rv
dHlwZS5fcmVhZFRleHR1cmVQaXhlbHMgPSBmdW5jdGlvbiAodGV4dHVyZSwgd2lkdGgsIGhlaWdo
dCwgZmFjZUluZGV4LCBsZXZlbCwgYnVmZmVyKSB7CisgICAgICAgIGlmIChmYWNlSW5kZXggPT09
IHZvaWQgMCkgeyBmYWNlSW5kZXggPSAtMTsgfQorICAgICAgICBpZiAobGV2ZWwgPT09IHZvaWQg
MCkgeyBsZXZlbCA9IDA7IH0KKyAgICAgICAgaWYgKGJ1ZmZlciA9PT0gdm9pZCAwKSB7IGJ1ZmZl
ciA9IG51bGw7IH0KKyAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIGlmICghdGhp
cy5fZHVtbXlGcmFtZWJ1ZmZlcikgeworICAgICAgICAgICAgdmFyIGR1bW15ID0gZ2wuY3JlYXRl
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGlmICghZHVtbXkpIHsKKyAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgZHVtbXkgZnJhbWVidWZmZXIiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2R1bW15RnJhbWVidWZmZXIgPSBkdW1t
eTsKKyAgICAgICAgfQorICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIs
IHRoaXMuX2R1bW15RnJhbWVidWZmZXIpOworICAgICAgICBpZiAoZmFjZUluZGV4ID4gLTEpIHsK
KyAgICAgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5D
T0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUlu
ZGV4LCB0ZXh0dXJlLl93ZWJHTFRleHR1cmUsIGxldmVsKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVS
LCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fd2ViR0xUZXh0
dXJlLCBsZXZlbCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJlYWRUeXBlID0gKHRleHR1cmUu
dHlwZSAhPT0gdW5kZWZpbmVkKSA/IHRoaXMuX2dldFdlYkdMVGV4dHVyZVR5cGUodGV4dHVyZS50
eXBlKSA6IGdsLlVOU0lHTkVEX0JZVEU7CisgICAgICAgIHN3aXRjaCAocmVhZFR5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgZ2wuVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICBpZiAoIWJ1
ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBuZXcgVWludDhBcnJheSg0ICog
d2lkdGggKiBoZWlnaHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZWFk
VHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVhZFR5cGUgPSBnbC5GTE9BVDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBnbC5yZWFkUGl4ZWxz
KDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIHJlYWRUeXBlLCBidWZmZXIpOworICAgICAg
ICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuX2N1cnJlbnRGcmFtZWJ1
ZmZlcik7CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90
eXBlLl9jYW5SZW5kZXJUb0Zsb2F0RnJhbWVidWZmZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICh0aGlzLl93ZWJHTFZlcnNpb24gPiAxKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
Y2Fwcy5jb2xvckJ1ZmZlckZsb2F0OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9j
YW5SZW5kZXJUb0ZyYW1lYnVmZmVyKEVuZ2luZS5URVhUVVJFVFlQRV9GTE9BVCk7CisgICAgfTsK
KyAgICBFbmdpbmUucHJvdG90eXBlLl9jYW5SZW5kZXJUb0hhbGZGbG9hdEZyYW1lYnVmZmVyID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fd2ViR0xWZXJzaW9uID4gMSkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHMuY29sb3JCdWZmZXJGbG9hdDsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpcy5fY2FuUmVuZGVyVG9GcmFtZWJ1ZmZlcihFbmdpbmUuVEVYVFVS
RVRZUEVfSEFMRl9GTE9BVCk7CisgICAgfTsKKyAgICAvLyBUaGFuayB5b3UgOiBodHRwOi8vc3Rh
Y2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI4ODI3NTExL3dlYmdsLWlvcy1yZW5kZXItdG8tZmxv
YXRpbmctcG9pbnQtdGV4dHVyZQorICAgIEVuZ2luZS5wcm90b3R5cGUuX2NhblJlbmRlclRvRnJh
bWVidWZmZXIgPSBmdW5jdGlvbiAodHlwZSkgeworICAgICAgICB2YXIgZ2wgPSB0aGlzLl9nbDsK
KyAgICAgICAgLy9jbGVhciBleGlzdGluZyBlcnJvcnMKKyAgICAgICAgd2hpbGUgKGdsLmdldEVy
cm9yKCkgIT09IGdsLk5PX0VSUk9SKSB7IH0KKyAgICAgICAgdmFyIHN1Y2Nlc3NmdWwgPSB0cnVl
OworICAgICAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgZ2wu
YmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgICAgIGdsLnRleEltYWdl
MkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5fZ2V0UkdCQUJ1ZmZlckludGVybmFsU2l6ZWRGb3Jt
YXQodHlwZSksIDEsIDEsIDAsIGdsLlJHQkEsIHRoaXMuX2dldFdlYkdMVGV4dHVyZVR5cGUodHlw
ZSksIG51bGwpOworICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRF
WFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgICAgIGdsLnRleFBhcmFtZXRlcmko
Z2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICAg
ICAgdmFyIGZiID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICAgICAgZ2wuYmluZEZyYW1l
YnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmYik7CisgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVy
ZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwg
dGV4dHVyZSwgMCk7CisgICAgICAgIHZhciBzdGF0dXMgPSBnbC5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKGdsLkZSQU1FQlVGRkVSKTsKKyAgICAgICAgc3VjY2Vzc2Z1bCA9IHN1Y2Nlc3NmdWwgJiYg
KHN0YXR1cyA9PT0gZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUpOworICAgICAgICBzdWNjZXNzZnVs
ID0gc3VjY2Vzc2Z1bCAmJiAoZ2wuZ2V0RXJyb3IoKSA9PT0gZ2wuTk9fRVJST1IpOworICAgICAg
ICAvL3RyeSByZW5kZXIgYnkgY2xlYXJpbmcgZnJhbWUgYnVmZmVyJ3MgY29sb3IgYnVmZmVyCisg
ICAgICAgIGlmIChzdWNjZXNzZnVsKSB7CisgICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9C
VUZGRVJfQklUKTsKKyAgICAgICAgICAgIHN1Y2Nlc3NmdWwgPSBzdWNjZXNzZnVsICYmIChnbC5n
ZXRFcnJvcigpID09PSBnbC5OT19FUlJPUik7CisgICAgICAgIH0KKyAgICAgICAgLy90cnkgcmVh
ZGluZyBmcm9tIGZyYW1lIHRvIGVuc3VyZSByZW5kZXIgb2NjdXJzIChqdXN0IGNyZWF0aW5nIHRo
ZSBGQk8gaXMgbm90IHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lIGlmIHJlbmRlcmluZyBpcyBzdXBw
b3J0ZWQpCisgICAgICAgIGlmIChzdWNjZXNzZnVsKSB7CisgICAgICAgICAgICAvL2luIHByYWN0
aWNlIGl0J3Mgc3VmZmljaWVudCB0byBqdXN0IHJlYWQgZnJvbSB0aGUgYmFja2J1ZmZlciByYXRo
ZXIgdGhhbiBoYW5kbGUgcG90ZW50aWFsbHkgaXNzdWVzIHJlYWRpbmcgZnJvbSB0aGUgdGV4dHVy
ZQorICAgICAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTsK
KyAgICAgICAgICAgIHZhciByZWFkRm9ybWF0ID0gZ2wuUkdCQTsKKyAgICAgICAgICAgIHZhciBy
ZWFkVHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7CisgICAgICAgICAgICB2YXIgYnVmZmVyID0gbmV3
IFVpbnQ4QXJyYXkoNCk7CisgICAgICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIDEsIDEsIHJl
YWRGb3JtYXQsIHJlYWRUeXBlLCBidWZmZXIpOworICAgICAgICAgICAgc3VjY2Vzc2Z1bCA9IHN1
Y2Nlc3NmdWwgJiYgKGdsLmdldEVycm9yKCkgPT09IGdsLk5PX0VSUk9SKTsKKyAgICAgICAgfQor
ICAgICAgICAvL2NsZWFuIHVwCisgICAgICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7Cisg
ICAgICAgIGdsLmRlbGV0ZUZyYW1lYnVmZmVyKGZiKTsKKyAgICAgICAgZ2wuYmluZEZyYW1lYnVm
ZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTsKKyAgICAgICAgLy9jbGVhciBhY2N1bXVsYXRlZCBl
cnJvcnMKKyAgICAgICAgd2hpbGUgKCFzdWNjZXNzZnVsICYmIChnbC5nZXRFcnJvcigpICE9PSBn
bC5OT19FUlJPUikpIHsgfQorICAgICAgICByZXR1cm4gc3VjY2Vzc2Z1bDsKKyAgICB9OworICAg
IC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fZ2V0V2ViR0xUZXh0dXJlVHlw
ZSA9IGZ1bmN0aW9uICh0eXBlKSB7CisgICAgICAgIGlmICh0aGlzLl93ZWJHTFZlcnNpb24gPT09
IDEpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
RW5naW5lLlRFWFRVUkVUWVBFX0ZMT0FUOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fZ2wuRkxPQVQ7CisgICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfSEFM
Rl9GTE9BVDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLkhBTEZfRkxPQVRf
T0VTOworICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0JZ
VEU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5VTlNJR05FRF9CWVRFOwor
ICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX1NIT1JUXzRf
NF80XzQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5VTlNJR05FRF9TSE9S
VF80XzRfNF80OworICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX1VOU0lH
TkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5V
TlNJR05FRF9TSE9SVF81XzVfNV8xOworICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRV
UkVUWVBFX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5fZ2wuVU5TSUdORURfU0hPUlRfNV82XzU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ2wuVU5TSUdORURfQllURTsKKyAgICAgICAgfQorICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX0JZVEU6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLkJZVEU7CisgICAgICAgICAgICBjYXNlIEVu
Z2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLl9nbC5VTlNJR05FRF9CWVRFOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZ
UEVfU0hPUlQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlNIT1JUOworICAgICAg
ICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2dsLlVOU0lHTkVEX1NIT1JUOworICAgICAgICAgICAgY2FzZSBF
bmdpbmUuVEVYVFVSRVRZUEVfSU5UOgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5J
TlQ7CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlRFR0VS
OiAvLyBSZWZlcnMgdG8gVU5TSUdORURfSU5UCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2dsLlVOU0lHTkVEX0lOVDsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX0ZM
T0FUOgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5GTE9BVDsKKyAgICAgICAgICAg
IGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX0hBTEZfRkxPQVQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2dsLkhBTEZfRkxPQVQ7CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJF
VFlQRV9VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9nbC5VTlNJR05FRF9TSE9SVF80XzRfNF80OworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVY
VFVSRVRZUEVfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5fZ2wuVU5TSUdORURfU0hPUlRfNV81XzVfMTsKKyAgICAgICAgICAgIGNhc2UgRW5naW5l
LlRFWFRVUkVUWVBFX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLl9nbC5VTlNJR05FRF9TSE9SVF81XzZfNTsKKyAgICAgICAgICAgIGNhc2UgRW5naW5l
LlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ2wuVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOworICAgICAgICAg
ICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UXzI0Xzg6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2dsLlVOU0lHTkVEX0lOVF8yNF84OworICAgICAgICAgICAgY2Fz
ZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjsK
KyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVF81XzlfOV85
X1JFVjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuVU5TSUdORURfSU5UXzVfOV85
XzlfUkVWOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfRkxPQVRfMzJfVU5T
SUdORURfSU5UXzI0XzhfUkVWOgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5GTE9B
VF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXMuX2dsLlVOU0lHTkVEX0JZVEU7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUuX2dldEludGVybmFsRm9ybWF0ID0gZnVuY3Rpb24gKGZvcm1hdCkgewor
ICAgICAgICB2YXIgaW50ZXJuYWxGb3JtYXQgPSB0aGlzLl9nbC5SR0JBOworICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9BTFBI
QToKKyAgICAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IHRoaXMuX2dsLkFMUEhBOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1B
VF9MVU1JTkFOQ0U6CisgICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSB0aGlzLl9nbC5M
VU1JTkFOQ0U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVuZ2lu
ZS5URVhUVVJFRk9STUFUX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgICAgICBpbnRlcm5h
bEZvcm1hdCA9IHRoaXMuX2dsLkxVTUlOQU5DRV9BTFBIQTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkVEOgorICAgICAgICAg
ICAgICAgIGludGVybmFsRm9ybWF0ID0gdGhpcy5fZ2wuUkVEOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SRzoKKyAgICAgICAg
ICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IHRoaXMuX2dsLlJHOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0I6CisgICAgICAg
ICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSB0aGlzLl9nbC5SR0I7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQkE6CisgICAg
ICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSB0aGlzLl9nbC5SR0JBOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl93ZWJHTFZlcnNpb24gPiAx
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAgICAgICAgIGNhc2Ug
RW5naW5lLlRFWFRVUkVGT1JNQVRfUkVEX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgIGlu
dGVybmFsRm9ybWF0ID0gdGhpcy5fZ2wuUkVEX0lOVEVHRVI7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdfSU5U
RUdFUjoKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSB0aGlzLl9nbC5SR19J
TlRFR0VSOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQl9JTlRFR0VSOgorICAgICAgICAgICAgICAgICAgICBp
bnRlcm5hbEZvcm1hdCA9IHRoaXMuX2dsLlJHQl9JTlRFR0VSOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQkFf
SU5URUdFUjoKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSB0aGlzLl9nbC5S
R0JBX0lOVEVHRVI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdDsKKyAgICB9OworICAgIC8q
KiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fZ2V0UkdCQUJ1ZmZlckludGVybmFs
U2l6ZWRGb3JtYXQgPSBmdW5jdGlvbiAodHlwZSwgZm9ybWF0KSB7CisgICAgICAgIGlmICh0aGlz
Ll93ZWJHTFZlcnNpb24gPT09IDEpIHsKKyAgICAgICAgICAgIGlmIChmb3JtYXQgIT09IHVuZGVm
aW5lZCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfQUxQSEE6CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fZ2wuQUxQSEE7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RW5naW5lLlRFWFRVUkVGT1JNQVRfTFVNSU5BTkNFOgorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2dsLkxVTUlOQU5DRTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdp
bmUuVEVYVFVSRUZPUk1BVF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ2wuTFVNSU5BTkNFX0FMUEhBOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0JBOworICAgICAgICB9
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVS
RVRZUEVfQllURToKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JFRDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SOF9TTk9STTsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SRzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9nbC5SRzhfU05PUk07CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5l
LlRFWFRVUkVGT1JNQVRfUkdCOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2dsLlJHQjhfU05PUk07CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVG
T1JNQVRfUkVEX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
Z2wuUjhJOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JH
X0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkc4STsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JfSU5URUdF
UjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0I4STsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBX0lOVEVHRVI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQThJOworICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2dsLlJHQkE4X1NOT1JNOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRW5n
aW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgc3dpdGNoIChm
b3JtYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9S
RUQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUjg7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkc6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkc4OworICAgICAgICAgICAgICAgICAgICBjYXNl
IEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLl9nbC5SR0I4OyAvLyBCeSBkZWZhdWx0LiBPdGhlciBwb3NzaWJpbGl0aWVzIGFyZSBS
R0I1NjUsIFNSR0I4LgorICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9S
TUFUX1JHQkE6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQTg7
IC8vIEJ5IGRlZmF1bHQuIE90aGVyIHBvc3NpYmlsaXRpZXMgYXJlIFJHQjVfQTEsIFJHQkE0LCBT
UkdCOF9BTFBIQTguCisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JN
QVRfUkVEX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wu
UjhVSTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR19J
TlRFR0VSOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHOFVJOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQl9JTlRFR0VS
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQjhVSTsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBX0lOVEVHRVI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQThVSTsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9BTFBIQToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5BTFBIQTsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9MVU1JTkFOQ0U6CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fZ2wuTFVNSU5BTkNFOworICAgICAgICAgICAgICAgICAgICBjYXNl
IEVuZ2luZS5URVhUVVJFRk9STUFUX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9nbC5MVU1JTkFOQ0VfQUxQSEE7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdC
QTg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZ
UEVfU0hPUlQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SRURfSU5URUdFUjoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SMTZJOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JHX0lOVEVHRVI6CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkcxNkk7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ2wuUkdCMTZJOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2lu
ZS5URVhUVVJFRk9STUFUX1JHQkFfSU5URUdFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9nbC5SR0JBMTZJOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQkExNkk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfU0hP
UlQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SRURfSU5URUdFUjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SMTZVSTsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR19JTlRFR0VSOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2dsLlJHMTZVSTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdp
bmUuVEVYVFVSRUZPUk1BVF9SR0JfSU5URUdFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9nbC5SR0IxNlVJOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5U
RVhUVVJFRk9STUFUX1JHQkFfSU5URUdFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLl9nbC5SR0JBMTZVSTsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0JBMTZVSTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFVFlQRV9JTlQ6CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdp
bmUuVEVYVFVSRUZPUk1BVF9SRURfSU5URUdFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9nbC5SMzJJOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhU
VVJFRk9STUFUX1JHX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fZ2wuUkczMkk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JN
QVRfUkdCX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wu
UkdCMzJJOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JH
QkFfSU5URUdFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0JB
MzJJOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2dsLlJHQkEzMkk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5URUdFUjogLy8gUmVmZXJzIHRv
IFVOU0lHTkVEX0lOVAorICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkVEX0lOVEVHRVI6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUjMyVUk7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdfSU5URUdFUjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SRzMyVUk7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCX0lOVEVHRVI6CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCMzJVSTsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQTMyVUk7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQTMyVUk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfRkxP
QVQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SRUQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ2wuUjMyRjsgLy8gQnkgZGVmYXVsdC4gT3RoZXIgcG9zc2liaWxpdHkg
aXMgUjE2Ri4KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9S
RzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SRzMyRjsgLy8gQnkg
ZGVmYXVsdC4gT3RoZXIgcG9zc2liaWxpdHkgaXMgUkcxNkYuCisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCOgorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2dsLlJHQjMyRjsgLy8gQnkgZGVmYXVsdC4gT3RoZXIgcG9zc2liaWxpdGll
cyBhcmUgUkdCMTZGLCBSMTFGX0cxMUZfQjEwRiwgUkdCOV9FNS4KKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2dsLlJHQkEzMkY7IC8vIEJ5IGRlZmF1bHQuIE90aGVyIHBvc3NpYmls
aXR5IGlzIFJHQkExNkYuCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQTMyRjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUOgorICAgICAg
ICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5n
aW5lLlRFWFRVUkVGT1JNQVRfUkVEOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2dsLlIxNkY7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JN
QVRfUkc6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkcxNkY7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQjE2RjsgLy8gQnkgZGVmYXVsdC4g
T3RoZXIgcG9zc2liaWxpdGllcyBhcmUgUjExRl9HMTFGX0IxMEYsIFJHQjlfRTUuCisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCQToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0JBMTZGOworICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQkEx
NkY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZ
UEVfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ds
LlJHQjU2NTsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lO
VF8xMEZfMTFGXzExRl9SRVY6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlIxMUZf
RzExRl9CMTBGOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURf
SU5UXzVfOV85XzlfUkVWOgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0I5X0U1
OworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfU0hPUlRfNF80
XzRfNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQTQ7CisgICAgICAgICAg
ICBjYXNlIEVuZ2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0I1X0ExOworICAgICAgICAgICAgY2FzZSBFbmdp
bmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAgICAgICAg
ICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRF
WFRVUkVGT1JNQVRfUkdCQToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9n
bC5SR0IxMF9BMjsgLy8gQnkgZGVmYXVsdC4gT3RoZXIgcG9zc2liaWxpdHkgaXMgUkdCNV9BMS4K
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBX0lOVEVH
RVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCMTBfQTJVSTsK
KyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9nbC5SR0IxMF9BMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQkE4OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBFbmdpbmUucHJvdG90eXBlLl9nZXRSR0JBTXVsdGlTYW1wbGVCdWZmZXJGb3JtYXQgPSBm
dW5jdGlvbiAodHlwZSkgeworICAgICAgICBpZiAodHlwZSA9PT0gRW5naW5lLlRFWFRVUkVUWVBF
X0ZMT0FUKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQTMyRjsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmICh0eXBlID09PSBFbmdpbmUuVEVYVFVSRVRZUEVfSEFMRl9GTE9B
VCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQkExNkY7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQkE4OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBFbmdpbmUucHJvdG90eXBlLl9sb2FkRmlsZSA9IGZ1bmN0aW9uICh1cmwsIG9uU3VjY2Vz
cywgb25Qcm9ncmVzcywgb2ZmbGluZVByb3ZpZGVyLCB1c2VBcnJheUJ1ZmZlciwgb25FcnJvcikg
eworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgcmVxdWVzdCA9IF9NaXNj
X2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siRmlsZVRvb2xzIl0uTG9h
ZEZpbGUodXJsLCBvblN1Y2Nlc3MsIG9uUHJvZ3Jlc3MsIG9mZmxpbmVQcm92aWRlciwgdXNlQXJy
YXlCdWZmZXIsIG9uRXJyb3IpOworICAgICAgICB0aGlzLl9hY3RpdmVSZXF1ZXN0cy5wdXNoKHJl
cXVlc3QpOworICAgICAgICByZXF1ZXN0Lm9uQ29tcGxldGVPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAocmVxdWVzdCkgeworICAgICAgICAgICAgX3RoaXMuX2FjdGl2ZVJlcXVlc3RzLnNwbGljZShf
dGhpcy5fYWN0aXZlUmVxdWVzdHMuaW5kZXhPZihyZXF1ZXN0KSwgMSk7CisgICAgICAgIH0pOwor
ICAgICAgICByZXR1cm4gcmVxdWVzdDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAg
RW5naW5lLnByb3RvdHlwZS5fbG9hZEZpbGVBc3luYyA9IGZ1bmN0aW9uICh1cmwsIG9mZmxpbmVQ
cm92aWRlciwgdXNlQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAg
ICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAg
ICAgICAgICAgIF90aGlzLl9sb2FkRmlsZSh1cmwsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAg
ICAgICAgICAgcmVzb2x2ZShkYXRhKTsKKyAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgb2ZmbGlu
ZVByb3ZpZGVyLCB1c2VBcnJheUJ1ZmZlciwgZnVuY3Rpb24gKHJlcXVlc3QsIGV4Y2VwdGlvbikg
eworICAgICAgICAgICAgICAgIHJlamVjdChleGNlcHRpb24pOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90
eXBlLl9zaG91bGRPbmx5VXBkYXRlQ2FtZXJhcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CisgICAgLy8gU3RhdGljcworICAgIC8qKgorICAgICAqIEdldHMg
YSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGVuZ2luZSBjYW4gYmUgaW5zdGFuY2lhdGVkIChp
ZS4gaWYgYSB3ZWJHTCBjb250ZXh0IGNhbiBiZSBmb3VuZCkKKyAgICAgKiBAcmV0dXJucyB0cnVl
IGlmIHRoZSBlbmdpbmUgY2FuIGJlIGNyZWF0ZWQKKyAgICAgKiBAaWdub3JlbmFtaW5nCisgICAg
ICovCisgICAgRW5naW5lLmlzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0cnkg
eworICAgICAgICAgICAgdmFyIHRlbXBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJj
YW52YXMiKTsKKyAgICAgICAgICAgIHZhciBnbCA9IHRlbXBjYW52YXMuZ2V0Q29udGV4dCgid2Vi
Z2wiKSB8fCB0ZW1wY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIpOworICAg
ICAgICAgICAgcmV0dXJuIGdsICE9IG51bGwgJiYgISF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250
ZXh0OworICAgICAgICB9CisgICAgICAgIGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEZpbmQgdGhlIG5leHQg
aGlnaGVzdCBwb3dlciBvZiB0d28uCisgICAgICogQHBhcmFtIHggTnVtYmVyIHRvIHN0YXJ0IHNl
YXJjaCBmcm9tLgorICAgICAqIEByZXR1cm4gTmV4dCBoaWdoZXN0IHBvd2VyIG9mIHR3by4KKyAg
ICAgKi8KKyAgICBFbmdpbmUuQ2VpbGluZ1BPVCA9IGZ1bmN0aW9uICh4KSB7CisgICAgICAgIHgt
LTsKKyAgICAgICAgeCB8PSB4ID4+IDE7CisgICAgICAgIHggfD0geCA+PiAyOworICAgICAgICB4
IHw9IHggPj4gNDsKKyAgICAgICAgeCB8PSB4ID4+IDg7CisgICAgICAgIHggfD0geCA+PiAxNjsK
KyAgICAgICAgeCsrOworICAgICAgICByZXR1cm4geDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEZpbmQgdGhlIG5leHQgbG93ZXN0IHBvd2VyIG9mIHR3by4KKyAgICAgKiBAcGFyYW0geCBOdW1i
ZXIgdG8gc3RhcnQgc2VhcmNoIGZyb20uCisgICAgICogQHJldHVybiBOZXh0IGxvd2VzdCBwb3dl
ciBvZiB0d28uCisgICAgICovCisgICAgRW5naW5lLkZsb29yUE9UID0gZnVuY3Rpb24gKHgpIHsK
KyAgICAgICAgeCA9IHggfCAoeCA+PiAxKTsKKyAgICAgICAgeCA9IHggfCAoeCA+PiAyKTsKKyAg
ICAgICAgeCA9IHggfCAoeCA+PiA0KTsKKyAgICAgICAgeCA9IHggfCAoeCA+PiA4KTsKKyAgICAg
ICAgeCA9IHggfCAoeCA+PiAxNik7CisgICAgICAgIHJldHVybiB4IC0gKHggPj4gMSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBGaW5kIHRoZSBuZWFyZXN0IHBvd2VyIG9mIHR3by4KKyAgICAg
KiBAcGFyYW0geCBOdW1iZXIgdG8gc3RhcnQgc2VhcmNoIGZyb20uCisgICAgICogQHJldHVybiBO
ZXh0IG5lYXJlc3QgcG93ZXIgb2YgdHdvLgorICAgICAqLworICAgIEVuZ2luZS5OZWFyZXN0UE9U
ID0gZnVuY3Rpb24gKHgpIHsKKyAgICAgICAgdmFyIGMgPSBFbmdpbmUuQ2VpbGluZ1BPVCh4KTsK
KyAgICAgICAgdmFyIGYgPSBFbmdpbmUuRmxvb3JQT1QoeCk7CisgICAgICAgIHJldHVybiAoYyAt
IHgpID4gKHggLSBmKSA/IGYgOiBjOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBj
bG9zZXN0IGV4cG9uZW50IG9mIHR3bworICAgICAqIEBwYXJhbSB2YWx1ZSBkZWZpbmVzIHRoZSB2
YWx1ZSB0byBhcHByb3hpbWF0ZQorICAgICAqIEBwYXJhbSBtYXggZGVmaW5lcyB0aGUgbWF4aW11
bSB2YWx1ZSB0byByZXR1cm4KKyAgICAgKiBAcGFyYW0gbW9kZSBkZWZpbmVzIGhvdyB0byBkZWZp
bmUgdGhlIGNsb3Nlc3QgdmFsdWUKKyAgICAgKiBAcmV0dXJucyBjbG9zZXN0IGV4cG9uZW50IG9m
IHR3byBvZiB0aGUgZ2l2ZW4gdmFsdWUKKyAgICAgKi8KKyAgICBFbmdpbmUuR2V0RXhwb25lbnRP
ZlR3byA9IGZ1bmN0aW9uICh2YWx1ZSwgbWF4LCBtb2RlKSB7CisgICAgICAgIGlmIChtb2RlID09
PSB2b2lkIDApIHsgbW9kZSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
X1siQ29uc3RhbnRzIl0uU0NBTEVNT0RFX05FQVJFU1Q7IH0KKyAgICAgICAgdmFyIHBvdDsKKyAg
ICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uU0NBTEVNT0RFX0ZMT09SOgorICAg
ICAgICAgICAgICAgIHBvdCA9IEVuZ2luZS5GbG9vclBPVCh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uU0NBTEVNT0RFX05FQVJFU1Q6CisgICAgICAgICAgICAg
ICAgcG90ID0gRW5naW5lLk5lYXJlc3RQT1QodmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83
X19bIkNvbnN0YW50cyJdLlNDQUxFTU9ERV9DRUlMSU5HOgorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBwb3QgPSBFbmdpbmUuQ2VpbGluZ1BPVCh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE1hdGgubWluKHBvdCwg
bWF4KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFF1ZXVlIGEgbmV3IGZ1bmN0aW9uIGludG8g
dGhlIHJlcXVlc3RlZCBhbmltYXRpb24gZnJhbWUgcG9vbCAoaWUuIHRoaXMgZnVuY3Rpb24gd2ls
bCBiZSBleGVjdXRlZCBieXQgdGhlIGJyb3dzZXIgZm9yIHRoZSBuZXh0IGZyYW1lKQorICAgICAq
IEBwYXJhbSBmdW5jIC0gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZAorICAgICAqIEBwYXJhbSBy
ZXF1ZXN0ZXIgLSB0aGUgb2JqZWN0IHRoYXQgd2lsbCByZXF1ZXN0IHRoZSBuZXh0IGZyYW1lLiBG
YWxscyBiYWNrIHRvIHdpbmRvdy4KKyAgICAgKiBAcmV0dXJucyBmcmFtZSBudW1iZXIKKyAgICAg
Ki8KKyAgICBFbmdpbmUuUXVldWVOZXdGcmFtZSA9IGZ1bmN0aW9uIChmdW5jLCByZXF1ZXN0ZXIp
IHsKKyAgICAgICAgaWYgKCFfTWlzY19kb21NYW5hZ2VtZW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIkRvbU1hbmFnZW1lbnQiXS5Jc1dpbmRvd09iamVjdEV4aXN0KCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmMsIDE2KTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXJlcXVlc3RlcikgeworICAgICAgICAgICAgcmVxdWVzdGVyID0gd2luZG93OworICAgICAg
ICB9CisgICAgICAgIGlmIChyZXF1ZXN0ZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7CisgICAg
ICAgICAgICByZXR1cm4gcmVxdWVzdGVyLnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChyZXF1ZXN0ZXIubXNSZXF1ZXN0QW5pbWF0aW9uRnJh
bWUpIHsKKyAgICAgICAgICAgIHJldHVybiByZXF1ZXN0ZXIubXNSZXF1ZXN0QW5pbWF0aW9uRnJh
bWUoZnVuYyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocmVxdWVzdGVyLndlYmtpdFJl
cXVlc3RBbmltYXRpb25GcmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Rlci53ZWJr
aXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuYyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAocmVxdWVzdGVyLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSkgeworICAgICAgICAgICAgcmV0
dXJuIHJlcXVlc3Rlci5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuYyk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAocmVxdWVzdGVyLm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHsKKyAg
ICAgICAgICAgIHJldHVybiByZXF1ZXN0ZXIub1JlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3cuc2V0
VGltZW91dChmdW5jLCAxNik7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEFz
ayB0aGUgYnJvd3NlciB0byBwcm9tb3RlIHRoZSBjdXJyZW50IGVsZW1lbnQgdG8gcG9pbnRlcmxv
Y2sgbW9kZQorICAgICAqIEBwYXJhbSBlbGVtZW50IGRlZmluZXMgdGhlIERPTSBlbGVtZW50IHRv
IHByb21vdGUKKyAgICAgKi8KKyAgICBFbmdpbmUuX1JlcXVlc3RQb2ludGVybG9jayA9IGZ1bmN0
aW9uIChlbGVtZW50KSB7CisgICAgICAgIGVsZW1lbnQucmVxdWVzdFBvaW50ZXJMb2NrID0gZWxl
bWVudC5yZXF1ZXN0UG9pbnRlckxvY2sgfHwgZWxlbWVudC5tc1JlcXVlc3RQb2ludGVyTG9jayB8
fCBlbGVtZW50Lm1velJlcXVlc3RQb2ludGVyTG9jayB8fCBlbGVtZW50LndlYmtpdFJlcXVlc3RQ
b2ludGVyTG9jazsKKyAgICAgICAgaWYgKGVsZW1lbnQucmVxdWVzdFBvaW50ZXJMb2NrKSB7Cisg
ICAgICAgICAgICBlbGVtZW50LnJlcXVlc3RQb2ludGVyTG9jaygpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBc2tzIHRoZSBicm93c2VyIHRvIGV4aXQgcG9pbnRlcmxvY2sg
bW9kZQorICAgICAqLworICAgIEVuZ2luZS5fRXhpdFBvaW50ZXJsb2NrID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgYW55RG9jID0gZG9jdW1lbnQ7CisgICAgICAgIGRvY3VtZW50LmV4aXRQ
b2ludGVyTG9jayA9IGRvY3VtZW50LmV4aXRQb2ludGVyTG9jayB8fCBhbnlEb2MubXNFeGl0UG9p
bnRlckxvY2sgfHwgYW55RG9jLm1vekV4aXRQb2ludGVyTG9jayB8fCBhbnlEb2Mud2Via2l0RXhp
dFBvaW50ZXJMb2NrOworICAgICAgICBpZiAoZG9jdW1lbnQuZXhpdFBvaW50ZXJMb2NrKSB7Cisg
ICAgICAgICAgICBkb2N1bWVudC5leGl0UG9pbnRlckxvY2soKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogQXNrIHRoZSBicm93c2VyIHRvIHByb21vdGUgdGhlIGN1cnJlbnQg
ZWxlbWVudCB0byBmdWxsc2NyZWVuIHJlbmRlcmluZyBtb2RlCisgICAgICogQHBhcmFtIGVsZW1l
bnQgZGVmaW5lcyB0aGUgRE9NIGVsZW1lbnQgdG8gcHJvbW90ZQorICAgICAqLworICAgIEVuZ2lu
ZS5fUmVxdWVzdEZ1bGxzY3JlZW4gPSBmdW5jdGlvbiAoZWxlbWVudCkgeworICAgICAgICB2YXIg
cmVxdWVzdEZ1bmN0aW9uID0gZWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbiB8fCBlbGVtZW50Lm1z
UmVxdWVzdEZ1bGxzY3JlZW4gfHwgZWxlbWVudC53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiB8fCBl
bGVtZW50Lm1velJlcXVlc3RGdWxsU2NyZWVuOworICAgICAgICBpZiAoIXJlcXVlc3RGdW5jdGlv
bikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlcXVlc3RGdW5j
dGlvbi5jYWxsKGVsZW1lbnQpOworICAgIH07CisgICAgLyoqCisgICAgICogQXNrcyB0aGUgYnJv
d3NlciB0byBleGl0IGZ1bGxzY3JlZW4gbW9kZQorICAgICAqLworICAgIEVuZ2luZS5fRXhpdEZ1
bGxzY3JlZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBhbnlEb2MgPSBkb2N1bWVudDsK
KyAgICAgICAgaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7CisgICAgICAgICAgICBkb2N1
bWVudC5leGl0RnVsbHNjcmVlbigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFueURv
Yy5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7CisgICAgICAgICAgICBhbnlEb2MubW96Q2FuY2VsRnVs
bFNjcmVlbigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFueURvYy53ZWJraXRDYW5j
ZWxGdWxsU2NyZWVuKSB7CisgICAgICAgICAgICBhbnlEb2Mud2Via2l0Q2FuY2VsRnVsbFNjcmVl
bigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFueURvYy5tc0NhbmNlbEZ1bGxTY3Jl
ZW4pIHsKKyAgICAgICAgICAgIGFueURvYy5tc0NhbmNlbEZ1bGxTY3JlZW4oKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqIFVzZSB0aGlzIGFycmF5IHRvIHR1cm4gb2ZmIHNvbWUgV2ViR0wy
IGZlYXR1cmVzIG9uIGtub3duIGJ1Z2d5IGJyb3dzZXJzIHZlcnNpb24gKi8KKyAgICBFbmdpbmUu
RXhjZXB0aW9uTGlzdCA9IFsKKyAgICAgICAgeyBrZXk6ICJDaHJvbWVcLzYzXC4wIiwgY2FwdHVy
ZTogIjYzXFwuMFxcLjMyMzlcXC4oXFxkKykiLCBjYXB0dXJlQ29uc3RyYWludDogMTA4LCB0YXJn
ZXRzOiBbInVuaWZvcm1CdWZmZXIiXSB9LAorICAgICAgICB7IGtleTogIkZpcmVmb3hcLzU4Iiwg
Y2FwdHVyZTogbnVsbCwgY2FwdHVyZUNvbnN0cmFpbnQ6IG51bGwsIHRhcmdldHM6IFsidW5pZm9y
bUJ1ZmZlciJdIH0sCisgICAgICAgIHsga2V5OiAiRmlyZWZveFwvNTkiLCBjYXB0dXJlOiBudWxs
LCBjYXB0dXJlQ29uc3RyYWludDogbnVsbCwgdGFyZ2V0czogWyJ1bmlmb3JtQnVmZmVyIl0gfSwK
KyAgICAgICAgeyBrZXk6ICJDaHJvbWVcLzcyLis/TW9iaWxlIiwgY2FwdHVyZTogbnVsbCwgY2Fw
dHVyZUNvbnN0cmFpbnQ6IG51bGwsIHRhcmdldHM6IFsidmFvIl0gfSwKKyAgICAgICAgeyBrZXk6
ICJDaHJvbWVcLzczLis/TW9iaWxlIiwgY2FwdHVyZTogbnVsbCwgY2FwdHVyZUNvbnN0cmFpbnQ6
IG51bGwsIHRhcmdldHM6IFsidmFvIl0gfSwKKyAgICAgICAgeyBrZXk6ICJDaHJvbWVcLzc0Lis/
TW9iaWxlIiwgY2FwdHVyZTogbnVsbCwgY2FwdHVyZUNvbnN0cmFpbnQ6IG51bGwsIHRhcmdldHM6
IFsidmFvIl0gfSwKKyAgICAgICAgeyBrZXk6ICJNYWMgT1MuK0Nocm9tZVwvNzEiLCBjYXB0dXJl
OiBudWxsLCBjYXB0dXJlQ29uc3RyYWludDogbnVsbCwgdGFyZ2V0czogWyJ2YW8iXSB9LAorICAg
ICAgICB7IGtleTogIk1hYyBPUy4rQ2hyb21lXC83MiIsIGNhcHR1cmU6IG51bGwsIGNhcHR1cmVD
b25zdHJhaW50OiBudWxsLCB0YXJnZXRzOiBbInZhbyJdIH0KKyAgICBdOworICAgIC8qKiBAaGlk
ZGVuICovCisgICAgRW5naW5lLl9UZXh0dXJlTG9hZGVycyA9IFtdOworICAgIC8vIENvbnN0IHN0
YXRpY3MKKyAgICAvKiogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5kaW5nIGlzIGRpc2FibGVkICov
CisgICAgRW5naW5lLkFMUEhBX0RJU0FCTEUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X19bIkNvbnN0YW50cyJdLkFMUEhBX0RJU0FCTEU7CisgICAgLyoqIERlZmluZXMg
dGhhdCBhbHBoYSBibGVuZGluZyB0byBTUkMgQUxQSEEgKiBTUkMgKyBERVNUICovCisgICAgRW5n
aW5lLkFMUEhBX0FERCA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
Q29uc3RhbnRzIl0uQUxQSEFfQUREOworICAgIC8qKiBEZWZpbmVzIHRoYXQgYWxwaGEgYmxlbmRp
bmcgdG8gU1JDIEFMUEhBICogU1JDICsgKDEgLSBTUkMgQUxQSEEpICogREVTVCAqLworICAgIEVu
Z2luZS5BTFBIQV9DT01CSU5FID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJDb25zdGFudHMiXS5BTFBIQV9DT01CSU5FOworICAgIC8qKiBEZWZpbmVzIHRoYXQgYWxw
aGEgYmxlbmRpbmcgdG8gREVTVCAtIFNSQyAqIERFU1QgKi8KKyAgICBFbmdpbmUuQUxQSEFfU1VC
VFJBQ1QgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50
cyJdLkFMUEhBX1NVQlRSQUNUOworICAgIC8qKiBEZWZpbmVzIHRoYXQgYWxwaGEgYmxlbmRpbmcg
dG8gU1JDICogREVTVCAqLworICAgIEVuZ2luZS5BTFBIQV9NVUxUSVBMWSA9IF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uQUxQSEFfTVVMVElQTFk7
CisgICAgLyoqIERlZmluZXMgdGhhdCBhbHBoYSBibGVuZGluZyB0byBTUkMgQUxQSEEgKiBTUkMg
KyAoMSAtIFNSQykgKiBERVNUICovCisgICAgRW5naW5lLkFMUEhBX01BWElNSVpFRCA9IF9jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uQUxQSEFfTUFY
SU1JWkVEOworICAgIC8qKiBEZWZpbmVzIHRoYXQgYWxwaGEgYmxlbmRpbmcgdG8gU1JDICsgREVT
VCAqLworICAgIEVuZ2luZS5BTFBIQV9PTkVPTkUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLkFMUEhBX09ORU9ORTsKKyAgICAvKiogRGVmaW5l
cyB0aGF0IGFscGhhIGJsZW5kaW5nIHRvIFNSQyArICgxIC0gU1JDIEFMUEhBKSAqIERFU1QgKi8K
KyAgICBFbmdpbmUuQUxQSEFfUFJFTVVMVElQTElFRCA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uQUxQSEFfUFJFTVVMVElQTElFRDsKKyAgICAv
KioKKyAgICAgKiBEZWZpbmVzIHRoYXQgYWxwaGEgYmxlbmRpbmcgdG8gU1JDICsgKDEgLSBTUkMg
QUxQSEEpICogREVTVAorICAgICAqIEFscGhhIHdpbGwgYmUgc2V0IHRvICgxIC0gU1JDIEFMUEhB
KSAqIERFU1QgQUxQSEEKKyAgICAgKi8KKyAgICBFbmdpbmUuQUxQSEFfUFJFTVVMVElQTElFRF9Q
T1JURVJEVUZGID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25z
dGFudHMiXS5BTFBIQV9QUkVNVUxUSVBMSUVEX1BPUlRFUkRVRkY7CisgICAgLyoqIERlZmluZXMg
dGhhdCBhbHBoYSBibGVuZGluZyB0byBDU1QgKiBTUkMgKyAoMSAtIENTVCkgKiBERVNUICovCisg
ICAgRW5naW5lLkFMUEhBX0lOVEVSUE9MQVRFID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5BTFBIQV9JTlRFUlBPTEFURTsKKyAgICAvKioKKyAg
ICAgKiBEZWZpbmVzIHRoYXQgYWxwaGEgYmxlbmRpbmcgdG8gU1JDICsgKDEgLSBTUkMpICogREVT
VAorICAgICAqIEFscGhhIHdpbGwgYmUgc2V0IHRvIFNSQyBBTFBIQSArICgxIC0gU1JDIEFMUEhB
KSAqIERFU1QgQUxQSEEKKyAgICAgKi8KKyAgICBFbmdpbmUuQUxQSEFfU0NSRUVOTU9ERSA9IF9j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uQUxQSEFf
U0NSRUVOTU9ERTsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRoZSByZXNzb3VyY2UgaXMgbm90IGRl
bGF5ZWQqLworICAgIEVuZ2luZS5ERUxBWUxPQURTVEFURV9OT05FID0gX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9OT05F
OworICAgIC8qKiBEZWZpbmVzIHRoYXQgdGhlIHJlc3NvdXJjZSB3YXMgc3VjY2Vzc2Z1bGx5IGRl
bGF5IGxvYWRlZCAqLworICAgIEVuZ2luZS5ERUxBWUxPQURTVEFURV9MT0FERUQgPSBfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNU
QVRFX0xPQURFRDsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRoZSByZXNzb3VyY2UgaXMgY3VycmVu
dGx5IGRlbGF5IGxvYWRpbmcgKi8KKyAgICBFbmdpbmUuREVMQVlMT0FEU1RBVEVfTE9BRElORyA9
IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uREVM
QVlMT0FEU1RBVEVfTE9BRElORzsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRoZSByZXNzb3VyY2Ug
aXMgZGVsYXllZCBhbmQgaGFzIG5vdCBzdGFydGVkIGxvYWRpbmcgKi8KKyAgICBFbmdpbmUuREVM
QVlMT0FEU1RBVEVfTk9UTE9BREVEID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9OT1RMT0FERUQ7CisgICAgLy8gRGVw
aHQgb3IgU3RlbmNpbCB0ZXN0IENvbnN0YW50cy4KKyAgICAvKiogUGFzc2VkIHRvIGRlcHRoRnVu
Y3Rpb24gb3Igc3RlbmNpbEZ1bmN0aW9uIHRvIHNwZWNpZnkgZGVwdGggb3Igc3RlbmNpbCB0ZXN0
cyB3aWxsIG5ldmVyIHBhc3MuIGkuZS4gTm90aGluZyB3aWxsIGJlIGRyYXduICovCisgICAgRW5n
aW5lLk5FVkVSID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25z
dGFudHMiXS5ORVZFUjsKKyAgICAvKiogUGFzc2VkIHRvIGRlcHRoRnVuY3Rpb24gb3Igc3RlbmNp
bEZ1bmN0aW9uIHRvIHNwZWNpZnkgZGVwdGggb3Igc3RlbmNpbCB0ZXN0cyB3aWxsIGFsd2F5cyBw
YXNzLiBpLmUuIFBpeGVscyB3aWxsIGJlIGRyYXduIGluIHRoZSBvcmRlciB0aGV5IGFyZSBkcmF3
biAqLworICAgIEVuZ2luZS5BTFdBWVMgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkNvbnN0YW50cyJdLkFMV0FZUzsKKyAgICAvKiogUGFzc2VkIHRvIGRlcHRoRnVu
Y3Rpb24gb3Igc3RlbmNpbEZ1bmN0aW9uIHRvIHNwZWNpZnkgZGVwdGggb3Igc3RlbmNpbCB0ZXN0
cyB3aWxsIHBhc3MgaWYgdGhlIG5ldyBkZXB0aCB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIHN0b3Jl
ZCB2YWx1ZSAqLworICAgIEVuZ2luZS5MRVNTID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5MRVNTOworICAgIC8qKiBQYXNzZWQgdG8gZGVwdGhG
dW5jdGlvbiBvciBzdGVuY2lsRnVuY3Rpb24gdG8gc3BlY2lmeSBkZXB0aCBvciBzdGVuY2lsIHRl
c3RzIHdpbGwgcGFzcyBpZiB0aGUgbmV3IGRlcHRoIHZhbHVlIGlzIGVxdWFscyB0byB0aGUgc3Rv
cmVkIHZhbHVlICovCisgICAgRW5naW5lLkVRVUFMID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5FUVVBTDsKKyAgICAvKiogUGFzc2VkIHRvIGRl
cHRoRnVuY3Rpb24gb3Igc3RlbmNpbEZ1bmN0aW9uIHRvIHNwZWNpZnkgZGVwdGggb3Igc3RlbmNp
bCB0ZXN0cyB3aWxsIHBhc3MgaWYgdGhlIG5ldyBkZXB0aCB2YWx1ZSBpcyBsZXNzIHRoYW4gb3Ig
ZXF1YWwgdG8gdGhlIHN0b3JlZCB2YWx1ZSAqLworICAgIEVuZ2luZS5MRVFVQUwgPSBfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLkxFUVVBTDsKKyAg
ICAvKiogUGFzc2VkIHRvIGRlcHRoRnVuY3Rpb24gb3Igc3RlbmNpbEZ1bmN0aW9uIHRvIHNwZWNp
ZnkgZGVwdGggb3Igc3RlbmNpbCB0ZXN0cyB3aWxsIHBhc3MgaWYgdGhlIG5ldyBkZXB0aCB2YWx1
ZSBpcyBncmVhdGVyIHRoYW4gdGhlIHN0b3JlZCB2YWx1ZSAqLworICAgIEVuZ2luZS5HUkVBVEVS
ID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5H
UkVBVEVSOworICAgIC8qKiBQYXNzZWQgdG8gZGVwdGhGdW5jdGlvbiBvciBzdGVuY2lsRnVuY3Rp
b24gdG8gc3BlY2lmeSBkZXB0aCBvciBzdGVuY2lsIHRlc3RzIHdpbGwgcGFzcyBpZiB0aGUgbmV3
IGRlcHRoIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc3RvcmVkIHZhbHVl
ICovCisgICAgRW5naW5lLkdFUVVBTCA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siQ29uc3RhbnRzIl0uR0VRVUFMOworICAgIC8qKiBQYXNzZWQgdG8gZGVwdGhGdW5j
dGlvbiBvciBzdGVuY2lsRnVuY3Rpb24gdG8gc3BlY2lmeSBkZXB0aCBvciBzdGVuY2lsIHRlc3Rz
IHdpbGwgcGFzcyBpZiB0aGUgbmV3IGRlcHRoIHZhbHVlIGlzIG5vdCBlcXVhbCB0byB0aGUgc3Rv
cmVkIHZhbHVlICovCisgICAgRW5naW5lLk5PVEVRVUFMID0gX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5OT1RFUVVBTDsKKyAgICAvLyBTdGVuY2ls
IEFjdGlvbnMgQ29uc3RhbnRzLgorICAgIC8qKiBQYXNzZWQgdG8gc3RlbmNpbE9wZXJhdGlvbiB0
byBzcGVjaWZ5IHRoYXQgc3RlbmNpbCB2YWx1ZSBtdXN0IGJlIGtlcHQgKi8KKyAgICBFbmdpbmUu
S0VFUCA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRz
Il0uS0VFUDsKKyAgICAvKiogUGFzc2VkIHRvIHN0ZW5jaWxPcGVyYXRpb24gdG8gc3BlY2lmeSB0
aGF0IHN0ZW5jaWwgdmFsdWUgbXVzdCBiZSByZXBsYWNlZCAqLworICAgIEVuZ2luZS5SRVBMQUNF
ID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5S
RVBMQUNFOworICAgIC8qKiBQYXNzZWQgdG8gc3RlbmNpbE9wZXJhdGlvbiB0byBzcGVjaWZ5IHRo
YXQgc3RlbmNpbCB2YWx1ZSBtdXN0IGJlIGluY3JlbWVudGVkICovCisgICAgRW5naW5lLklOQ1Ig
PSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLklO
Q1I7CisgICAgLyoqIFBhc3NlZCB0byBzdGVuY2lsT3BlcmF0aW9uIHRvIHNwZWNpZnkgdGhhdCBz
dGVuY2lsIHZhbHVlIG11c3QgYmUgZGVjcmVtZW50ZWQgKi8KKyAgICBFbmdpbmUuREVDUiA9IF9j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uREVDUjsK
KyAgICAvKiogUGFzc2VkIHRvIHN0ZW5jaWxPcGVyYXRpb24gdG8gc3BlY2lmeSB0aGF0IHN0ZW5j
aWwgdmFsdWUgbXVzdCBiZSBpbnZlcnRlZCAqLworICAgIEVuZ2luZS5JTlZFUlQgPSBfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLklOVkVSVDsKKyAg
ICAvKiogUGFzc2VkIHRvIHN0ZW5jaWxPcGVyYXRpb24gdG8gc3BlY2lmeSB0aGF0IHN0ZW5jaWwg
dmFsdWUgbXVzdCBiZSBpbmNyZW1lbnRlZCB3aXRoIHdyYXBwaW5nICovCisgICAgRW5naW5lLklO
Q1JfV1JBUCA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3Rh
bnRzIl0uSU5DUl9XUkFQOworICAgIC8qKiBQYXNzZWQgdG8gc3RlbmNpbE9wZXJhdGlvbiB0byBz
cGVjaWZ5IHRoYXQgc3RlbmNpbCB2YWx1ZSBtdXN0IGJlIGRlY3JlbWVudGVkIHdpdGggd3JhcHBp
bmcgKi8KKyAgICBFbmdpbmUuREVDUl9XUkFQID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5ERUNSX1dSQVA7CisgICAgLyoqIFRleHR1cmUgaXMg
bm90IHJlcGVhdGluZyBvdXRzaWRlIG9mIDAuLjEgVVZzICovCisgICAgRW5naW5lLlRFWFRVUkVf
Q0xBTVBfQUREUkVTU01PREUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83
X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfQ0xBTVBfQUREUkVTU01PREU7CisgICAgLyoqIFRleHR1
cmUgaXMgcmVwZWF0aW5nIG91dHNpZGUgb2YgMC4uMSBVVnMgKi8KKyAgICBFbmdpbmUuVEVYVFVS
RV9XUkFQX0FERFJFU1NNT0RFID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJDb25zdGFudHMiXS5URVhUVVJFX1dSQVBfQUREUkVTU01PREU7CisgICAgLyoqIFRleHR1
cmUgaXMgcmVwZWF0aW5nIGFuZCBtaXJyb3JlZCAqLworICAgIEVuZ2luZS5URVhUVVJFX01JUlJP
Ul9BRERSRVNTTU9ERSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
Q29uc3RhbnRzIl0uVEVYVFVSRV9NSVJST1JfQUREUkVTU01PREU7CisgICAgLyoqIEFMUEhBICov
CisgICAgRW5naW5lLlRFWFRVUkVGT1JNQVRfQUxQSEEgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfQUxQSEE7CisgICAg
LyoqIExVTUlOQU5DRSAqLworICAgIEVuZ2luZS5URVhUVVJFRk9STUFUX0xVTUlOQU5DRSA9IF9j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RUZPUk1BVF9MVU1JTkFOQ0U7CisgICAgLyoqIExVTUlOQU5DRV9BTFBIQSAqLworICAgIEVuZ2lu
ZS5URVhUVVJFRk9STUFUX0xVTUlOQU5DRV9BTFBIQSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9MVU1JTkFOQ0VfQUxQ
SEE7CisgICAgLyoqIFJHQiAqLworICAgIEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQiA9IF9jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZP
Uk1BVF9SR0I7CisgICAgLyoqIFJHQkEgKi8KKyAgICBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JB
ID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5U
RVhUVVJFRk9STUFUX1JHQkE7CisgICAgLyoqIFJFRCAqLworICAgIEVuZ2luZS5URVhUVVJFRk9S
TUFUX1JFRCA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3Rh
bnRzIl0uVEVYVFVSRUZPUk1BVF9SRUQ7CisgICAgLyoqIFJFRCAoMm5kIHJlZmVyZW5jZSkgKi8K
KyAgICBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFRk9STUFUX1I7CisgICAgLyoqIFJHICov
CisgICAgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkcgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfUkc7CisgICAgLyoqIFJF
RF9JTlRFR0VSICovCisgICAgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkVEX0lOVEVHRVIgPSBfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVG
T1JNQVRfUkVEX0lOVEVHRVI7CisgICAgLyoqIFJFRF9JTlRFR0VSICgybmQgcmVmZXJlbmNlKSAq
LworICAgIEVuZ2luZS5URVhUVVJFRk9STUFUX1JfSU5URUdFUiA9IF9jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SX0lOVEVH
RVI7CisgICAgLyoqIFJHX0lOVEVHRVIgKi8KKyAgICBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR19J
TlRFR0VSID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFu
dHMiXS5URVhUVVJFRk9STUFUX1JHX0lOVEVHRVI7CisgICAgLyoqIFJHQl9JTlRFR0VSICovCisg
ICAgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCX0lOVEVHRVIgPSBfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCX0lOVEVH
RVI7CisgICAgLyoqIFJHQkFfSU5URUdFUiAqLworICAgIEVuZ2luZS5URVhUVVJFRk9STUFUX1JH
QkFfSU5URUdFUiA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBX0lOVEVHRVI7CisgICAgLyoqIFVOU0lHTkVEX0JZ
VEUgKi8KKyAgICBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfQllURSA9IF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5T
SUdORURfQllURTsKKyAgICAvKiogVU5TSUdORURfQllURSAoMm5kIHJlZmVyZW5jZSkgKi8KKyAg
ICBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UID0gX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7
CisgICAgLyoqIEZMT0FUICovCisgICAgRW5naW5lLlRFWFRVUkVUWVBFX0ZMT0FUID0gX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQ
RV9GTE9BVDsKKyAgICAvKiogSEFMRl9GTE9BVCAqLworICAgIEVuZ2luZS5URVhUVVJFVFlQRV9I
QUxGX0ZMT0FUID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUOworICAgIC8qKiBCWVRFICovCisgICAgRW5n
aW5lLlRFWFRVUkVUWVBFX0JZVEUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0JZVEU7CisgICAgLyoqIFNIT1JUICovCisg
ICAgRW5naW5lLlRFWFRVUkVUWVBFX1NIT1JUID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9TSE9SVDsKKyAgICAvKiogVU5T
SUdORURfU0hPUlQgKi8KKyAgICBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfU0hPUlQgPSBf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRV
UkVUWVBFX1VOU0lHTkVEX1NIT1JUOworICAgIC8qKiBJTlQgKi8KKyAgICBFbmdpbmUuVEVYVFVS
RVRZUEVfSU5UID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9JTlQ7CisgICAgLyoqIFVOU0lHTkVEX0lOVCAqLworICAgIEVu
Z2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlRFR0VSID0gX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlRF
R0VSOworICAgIC8qKiBVTlNJR05FRF9TSE9SVF80XzRfNF80ICovCisgICAgRW5naW5lLlRFWFRV
UkVUWVBFX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX1NIT1JUXzRf
NF80XzQ7CisgICAgLyoqIFVOU0lHTkVEX1NIT1JUXzVfNV81XzEgKi8KKyAgICBFbmdpbmUuVEVY
VFVSRVRZUEVfVU5TSUdORURfU0hPUlRfNV81XzVfMSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfU0hPUlRf
NV81XzVfMTsKKyAgICAvKiogVU5TSUdORURfU0hPUlRfNV82XzUgKi8KKyAgICBFbmdpbmUuVEVY
VFVSRVRZUEVfVU5TSUdORURfU0hPUlRfNV82XzUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX1NIT1JUXzVf
Nl81OworICAgIC8qKiBVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgKi8KKyAgICBFbmdpbmUu
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWID0gX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVY7CisgICAgLyoqIFVOU0lHTkVEX0lOVF8yNF84ICovCisgICAg
RW5naW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVF8yNF84ID0gX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9J
TlRfMjRfODsKKyAgICAvKiogVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViAqLworICAgIEVu
Z2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWID0gX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9V
TlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOworICAgIC8qKiBVTlNJR05FRF9JTlRfNV85Xzlf
OV9SRVYgKi8KKyAgICBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UXzVfOV85XzlfUkVW
ID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5U
RVhUVVJFVFlQRV9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVY7CisgICAgLyoqIEZMT0FUXzMyX1VO
U0lHTkVEX0lOVF8yNF84X1JFViAqLworICAgIEVuZ2luZS5URVhUVVJFVFlQRV9GTE9BVF8zMl9V
TlNJR05FRF9JTlRfMjRfOF9SRVYgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84
X1JFVjsKKyAgICAvKiogbmVhcmVzdCBpcyBtYWcgPSBuZWFyZXN0IGFuZCBtaW4gPSBuZWFyZXN0
IGFuZCBtaXAgPSBsaW5lYXIgKi8KKyAgICBFbmdpbmUuVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5H
TU9ERSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRz
Il0uVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5HTU9ERTsKKyAgICAvKiogQmlsaW5lYXIgaXMgbWFn
ID0gbGluZWFyIGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IG5lYXJlc3QgKi8KKyAgICBFbmdp
bmUuVEVYVFVSRV9CSUxJTkVBUl9TQU1QTElOR01PREUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfQklMSU5FQVJfU0FNUExJTkdN
T0RFOworICAgIC8qKiBUcmlsaW5lYXIgaXMgbWFnID0gbGluZWFyIGFuZCBtaW4gPSBsaW5lYXIg
YW5kIG1pcCA9IGxpbmVhciAqLworICAgIEVuZ2luZS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElO
R01PREUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50
cyJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERTsKKyAgICAvKiogbmVhcmVzdCBpcyBt
YWcgPSBuZWFyZXN0IGFuZCBtaW4gPSBuZWFyZXN0IGFuZCBtaXAgPSBsaW5lYXIgKi8KKyAgICBF
bmdpbmUuVEVYVFVSRV9ORUFSRVNUX05FQVJFU1RfTUlQTElORUFSID0gX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1RfTkVB
UkVTVF9NSVBMSU5FQVI7CisgICAgLyoqIEJpbGluZWFyIGlzIG1hZyA9IGxpbmVhciBhbmQgbWlu
ID0gbGluZWFyIGFuZCBtaXAgPSBuZWFyZXN0ICovCisgICAgRW5naW5lLlRFWFRVUkVfTElORUFS
X0xJTkVBUl9NSVBORUFSRVNUID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJDb25zdGFudHMiXS5URVhUVVJFX0xJTkVBUl9MSU5FQVJfTUlQTkVBUkVTVDsKKyAgICAv
KiogVHJpbGluZWFyIGlzIG1hZyA9IGxpbmVhciBhbmQgbWluID0gbGluZWFyIGFuZCBtaXAgPSBs
aW5lYXIgKi8KKyAgICBFbmdpbmUuVEVYVFVSRV9MSU5FQVJfTElORUFSX01JUExJTkVBUiA9IF9j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RV9MSU5FQVJfTElORUFSX01JUExJTkVBUjsKKyAgICAvKiogbWFnID0gbmVhcmVzdCBhbmQgbWlu
ID0gbmVhcmVzdCBhbmQgbWlwID0gbmVhcmVzdCAqLworICAgIEVuZ2luZS5URVhUVVJFX05FQVJF
U1RfTkVBUkVTVF9NSVBORUFSRVNUID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1RfTkVBUkVTVF9NSVBORUFSRVNUOwor
ICAgIC8qKiBtYWcgPSBuZWFyZXN0IGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IG5lYXJlc3Qg
Ki8KKyAgICBFbmdpbmUuVEVYVFVSRV9ORUFSRVNUX0xJTkVBUl9NSVBORUFSRVNUID0gX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX05F
QVJFU1RfTElORUFSX01JUE5FQVJFU1Q7CisgICAgLyoqIG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9
IGxpbmVhciBhbmQgbWlwID0gbGluZWFyICovCisgICAgRW5naW5lLlRFWFRVUkVfTkVBUkVTVF9M
SU5FQVJfTUlQTElORUFSID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1RfTElORUFSX01JUExJTkVBUjsKKyAgICAvKiog
bWFnID0gbmVhcmVzdCBhbmQgbWluID0gbGluZWFyIGFuZCBtaXAgPSBub25lICovCisgICAgRW5n
aW5lLlRFWFRVUkVfTkVBUkVTVF9MSU5FQVIgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfTkVBUkVTVF9MSU5FQVI7CisgICAgLyoq
IG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1pcCA9IG5vbmUgKi8KKyAgICBF
bmdpbmUuVEVYVFVSRV9ORUFSRVNUX05FQVJFU1QgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfTkVBUkVTVF9ORUFSRVNUOworICAg
IC8qKiBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1pcCA9IG5lYXJlc3QgKi8K
KyAgICBFbmdpbmUuVEVYVFVSRV9MSU5FQVJfTkVBUkVTVF9NSVBORUFSRVNUID0gX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX0xJTkVB
Ul9ORUFSRVNUX01JUE5FQVJFU1Q7CisgICAgLyoqIG1hZyA9IGxpbmVhciBhbmQgbWluID0gbmVh
cmVzdCBhbmQgbWlwID0gbGluZWFyICovCisgICAgRW5naW5lLlRFWFRVUkVfTElORUFSX05FQVJF
U1RfTUlQTElORUFSID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJD
b25zdGFudHMiXS5URVhUVVJFX0xJTkVBUl9ORUFSRVNUX01JUExJTkVBUjsKKyAgICAvKiogbWFn
ID0gbGluZWFyIGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IG5vbmUgKi8KKyAgICBFbmdpbmUu
VEVYVFVSRV9MSU5FQVJfTElORUFSID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX0xJTkVBUl9MSU5FQVI7CisgICAgLyoqIG1hZyA9
IGxpbmVhciBhbmQgbWluID0gbmVhcmVzdCBhbmQgbWlwID0gbm9uZSAqLworICAgIEVuZ2luZS5U
RVhUVVJFX0xJTkVBUl9ORUFSRVNUID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX0xJTkVBUl9ORUFSRVNUOworICAgIC8qKiBFeHBs
aWNpdCBjb29yZGluYXRlcyBtb2RlICovCisgICAgRW5naW5lLlRFWFRVUkVfRVhQTElDSVRfTU9E
RSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRV9FWFBMSUNJVF9NT0RFOworICAgIC8qKiBTcGhlcmljYWwgY29vcmRpbmF0ZXMgbW9k
ZSAqLworICAgIEVuZ2luZS5URVhUVVJFX1NQSEVSSUNBTF9NT0RFID0gX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX1NQSEVSSUNBTF9N
T0RFOworICAgIC8qKiBQbGFuYXIgY29vcmRpbmF0ZXMgbW9kZSAqLworICAgIEVuZ2luZS5URVhU
VVJFX1BMQU5BUl9NT0RFID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJDb25zdGFudHMiXS5URVhUVVJFX1BMQU5BUl9NT0RFOworICAgIC8qKiBDdWJpYyBjb29yZGlu
YXRlcyBtb2RlICovCisgICAgRW5naW5lLlRFWFRVUkVfQ1VCSUNfTU9ERSA9IF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9DVUJJQ19N
T0RFOworICAgIC8qKiBQcm9qZWN0aW9uIGNvb3JkaW5hdGVzIG1vZGUgKi8KKyAgICBFbmdpbmUu
VEVYVFVSRV9QUk9KRUNUSU9OX01PREUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfUFJPSkVDVElPTl9NT0RFOworICAgIC8qKiBT
a3lib3ggY29vcmRpbmF0ZXMgbW9kZSAqLworICAgIEVuZ2luZS5URVhUVVJFX1NLWUJPWF9NT0RF
ID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5U
RVhUVVJFX1NLWUJPWF9NT0RFOworICAgIC8qKiBJbnZlcnNlIEN1YmljIGNvb3JkaW5hdGVzIG1v
ZGUgKi8KKyAgICBFbmdpbmUuVEVYVFVSRV9JTlZDVUJJQ19NT0RFID0gX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX0lOVkNVQklDX01P
REU7CisgICAgLyoqIEVxdWlyZWN0YW5ndWxhciBjb29yZGluYXRlcyBtb2RlICovCisgICAgRW5n
aW5lLlRFWFRVUkVfRVFVSVJFQ1RBTkdVTEFSX01PREUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfRVFVSVJFQ1RBTkdVTEFSX01P
REU7CisgICAgLyoqIEVxdWlyZWN0YW5ndWxhciBGaXhlZCBjb29yZGluYXRlcyBtb2RlICovCisg
ICAgRW5naW5lLlRFWFRVUkVfRklYRURfRVFVSVJFQ1RBTkdVTEFSX01PREUgPSBfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfRklYRURf
RVFVSVJFQ1RBTkdVTEFSX01PREU7CisgICAgLyoqIEVxdWlyZWN0YW5ndWxhciBGaXhlZCBNaXJy
b3JlZCBjb29yZGluYXRlcyBtb2RlICovCisgICAgRW5naW5lLlRFWFRVUkVfRklYRURfRVFVSVJF
Q1RBTkdVTEFSX01JUlJPUkVEX01PREUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfRklYRURfRVFVSVJFQ1RBTkdVTEFSX01JUlJP
UkVEX01PREU7CisgICAgLy8gVGV4dHVyZSByZXNjYWxpbmcgbW9kZQorICAgIC8qKiBEZWZpbmVz
IHRoYXQgdGV4dHVyZSByZXNjYWxpbmcgd2lsbCB1c2UgYSBmbG9vciB0byBmaW5kIHRoZSBjbG9z
ZXIgcG93ZXIgb2YgMiBzaXplICovCisgICAgRW5naW5lLlNDQUxFTU9ERV9GTE9PUiA9IF9jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uU0NBTEVNT0RF
X0ZMT09SOworICAgIC8qKiBEZWZpbmVzIHRoYXQgdGV4dHVyZSByZXNjYWxpbmcgd2lsbCBsb29r
IGZvciB0aGUgbmVhcmVzdCBwb3dlciBvZiAyIHNpemUgKi8KKyAgICBFbmdpbmUuU0NBTEVNT0RF
X05FQVJFU1QgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0
YW50cyJdLlNDQUxFTU9ERV9ORUFSRVNUOworICAgIC8qKiBEZWZpbmVzIHRoYXQgdGV4dHVyZSBy
ZXNjYWxpbmcgd2lsbCB1c2UgYSBjZWlsIHRvIGZpbmQgdGhlIGNsb3NlciBwb3dlciBvZiAyIHNp
emUgKi8KKyAgICBFbmdpbmUuU0NBTEVNT0RFX0NFSUxJTkcgPSBfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlNDQUxFTU9ERV9DRUlMSU5HOworICAg
IC8vIFVwZGF0YWJsZSBzdGF0aWNzIHNvIHN0aWNrIHdpdGggdmFycyBoZXJlCisgICAgLyoqCisg
ICAgICogR2V0cyBvciBzZXRzIHRoZSBlcHNpbG9uIHZhbHVlIHVzZWQgYnkgY29sbGlzaW9uIGVu
Z2luZQorICAgICAqLworICAgIEVuZ2luZS5Db2xsaXNpb25zRXBzaWxvbiA9IDAuMDAxOworICAg
IC8qKgorICAgICAqIE1ldGhvZCBjYWxsZWQgdG8gY3JlYXRlIHRoZSBkZWZhdWx0IHJlc2NhbGUg
cG9zdCBwcm9jZXNzIG9uIGVhY2ggZW5naW5lLgorICAgICAqLworICAgIEVuZ2luZS5fUmVzY2Fs
ZVBvc3RQcm9jZXNzRmFjdG9yeSA9IG51bGw7CisgICAgcmV0dXJuIEVuZ2luZTsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRW5naW5lcy9lbmdpbmVTdG9yZS50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5lcy9lbmdp
bmVTdG9yZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBFbmdpbmVTdG9yZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJFbmdpbmVTdG9yZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRW5naW5lU3Rv
cmU7IH0pOworLyoqCisgKiBUaGUgZW5naW5lIHN0b3JlIGNsYXNzIGlzIHJlc3BvbnNpYmxlIHRv
IGhvbGQgYWxsIHRoZSBpbnN0YW5jZXMgb2YgRW5naW5lIGFuZCBTY2VuZSBjcmVhdGVkCisgKiBk
dXJpbmcgdGhlIGxpZmUgdGltZSBvZiB0aGUgYXBwbGljYXRpb24uCisgKi8KK3ZhciBFbmdpbmVT
dG9yZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBFbmdpbmVT
dG9yZSgpIHsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuZ2luZVN0b3JlLCAi
TGFzdENyZWF0ZWRFbmdpbmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBs
YXRlc3QgY3JlYXRlZCBlbmdpbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgaWYgKHRoaXMuSW5zdGFuY2VzLmxlbmd0aCA9PT0gMCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHRoaXMuSW5zdGFuY2VzW3RoaXMuSW5zdGFuY2VzLmxlbmd0aCAtIDFdOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lU3RvcmUsICJMYXN0Q3Jl
YXRlZFNjZW5lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGF0ZXN0IGNy
ZWF0ZWQgc2NlbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX0xhc3RDcmVhdGVkU2NlbmU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIC8qKiBHZXRzIHRoZSBsaXN0IG9mIGNyZWF0ZWQgZW5naW5lcyAqLworICAgIEVuZ2lu
ZVN0b3JlLkluc3RhbmNlcyA9IG5ldyBBcnJheSgpOworICAgIC8qKiBAaGlkZGVuICovCisgICAg
RW5naW5lU3RvcmUuX0xhc3RDcmVhdGVkU2NlbmUgPSBudWxsOworICAgIC8qKgorICAgICAqIEdl
dHMgb3Igc2V0cyBhIGdsb2JhbCB2YXJpYWJsZSBpbmRpY2F0aW5nIGlmIGZhbGxiYWNrIHRleHR1
cmUgbXVzdCBiZSB1c2VkIHdoZW4gYSB0ZXh0dXJlIGNhbm5vdCBiZSBsb2FkZWQKKyAgICAgKiBA
aWdub3JlbmFtaW5nCisgICAgICovCisgICAgRW5naW5lU3RvcmUuVXNlRmFsbGJhY2tUZXh0dXJl
ID0gdHJ1ZTsKKyAgICAvKioKKyAgICAgKiBUZXh0dXJlIGNvbnRlbnQgdXNlZCBpZiBhIHRleHR1
cmUgY2Fubm90IGxvYWRlZAorICAgICAqIEBpZ25vcmVuYW1pbmcKKyAgICAgKi8KKyAgICBFbmdp
bmVTdG9yZS5GYWxsYmFja1RleHR1cmUgPSAiIjsKKyAgICByZXR1cm4gRW5naW5lU3RvcmU7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvaW5kZXgudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogQ29uc3RhbnRzLCBJbnN0YW5jaW5nQXR0cmlidXRlSW5mbywgRGVwdGhUZXh0dXJlQ3JlYXRp
b25PcHRpb25zLCBFbmdpbmVDYXBhYmlsaXRpZXMsIEVuZ2luZSwgRW5naW5lU3RvcmUsIE51bGxF
bmdpbmVPcHRpb25zLCBOdWxsRW5naW5lLCBXZWJHTFBpcGVsaW5lQ29udGV4dCwgV2ViR1BVQ29u
c3RhbnRzLCBXZWJHUFVFbmdpbmUsIFdlYkdMMlNoYWRlclByb2Nlc3NvciwgTmF0aXZlRW5naW5l
LCBfT2NjbHVzaW9uRGF0YVN0b3JhZ2UsIF9mb3JjZVRyYW5zZm9ybUZlZWRiYWNrVG9CdW5kbGUg
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
Y29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkNvbnN0YW50cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJDb25zdGFudHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJJbnN0YW5jaW5nQXR0cmlidXRlSW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnN0YW5jaW5nQXR0cmlidXRlSW5m
byJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aFRleHR1cmVDcmVhdGlvbk9wdGlvbnMi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siRGVwdGhUZXh0dXJlQ3JlYXRpb25PcHRpb25zIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkVuZ2luZUNhcGFiaWxpdGllcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2VuZ2luZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmVDYXBhYmlsaXRpZXMiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZW5naW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2luZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3Jl
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVuZ2luZVN0b3JlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lU3RvcmUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbnVsbEVuZ2luZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9udWxsRW5naW5l
ICovICIuL0VuZ2luZXMvbnVsbEVuZ2luZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOdWxsRW5n
aW5lT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX251bGxFbmdpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siTnVsbEVuZ2luZU9wdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTnVsbEVuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX251bGxFbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siTnVsbEVuZ2luZSJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9FeHRlbnNpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0V4dGVuc2lvbnMvaW5kZXggKi8gIi4vRW5n
aW5lcy9FeHRlbnNpb25zL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9PY2NsdXNpb25E
YXRhU3RvcmFnZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0V4dGVuc2lvbnNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siX09jY2x1c2lvbkRhdGFTdG9yYWdlIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIl9mb3JjZVRyYW5zZm9ybUZlZWRiYWNrVG9CdW5kbGUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9FeHRlbnNpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIl9mb3JjZVRyYW5zZm9ybUZlZWRiYWNrVG9CdW5kbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfV2ViR0xfd2ViR0xQaXBlbGluZUNvbnRleHRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vV2ViR0wvd2ViR0xQaXBl
bGluZUNvbnRleHQgKi8gIi4vRW5naW5lcy9XZWJHTC93ZWJHTFBpcGVsaW5lQ29udGV4dC50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJXZWJHTFBpcGVsaW5lQ29udGV4dCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX1dlYkdMX3dlYkdMUGlwZWxpbmVDb250ZXh0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X19bIldlYkdMUGlwZWxpbmVDb250ZXh0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vV2ViR1BVL3dlYmdwdUNvbnN0YW50cyAqLyAi
Li9FbmdpbmVzL1dlYkdQVS93ZWJncHVDb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
V2ViR1BVQ29uc3RhbnRzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJXZWJHUFVDb25zdGFudHMiXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViZ3B1RW5naW5lX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3dlYmdwdUVuZ2luZSAq
LyAiLi9FbmdpbmVzL3dlYmdwdUVuZ2luZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJHUFVF
bmdpbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF93ZWJncHVFbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzdfX1siV2ViR1BVRW5naW5lIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1dlYkdMX3dlYkdMMlNoYWRlclByb2Nlc3NvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vV2ViR0wvd2ViR0wyU2hhZGVyUHJv
Y2Vzc29ycyAqLyAiLi9FbmdpbmVzL1dlYkdML3dlYkdMMlNoYWRlclByb2Nlc3NvcnMudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiV2ViR0wyU2hhZGVyUHJvY2Vzc29yIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfV2ViR0xfd2ViR0wyU2hhZGVyUHJvY2Vzc29yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJXZWJHTDJTaGFkZXJQcm9jZXNzb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbmF0aXZlRW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL25hdGl2ZUVuZ2luZSAqLyAiLi9FbmdpbmVzL25hdGl2ZUVu
Z2luZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOYXRpdmVFbmdpbmUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9uYXRpdmVFbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siTmF0aXZl
RW5naW5lIl07IH0pOworCisKKworCisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vRW5naW5lcy9uYXRpdmVFbmdpbmUudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9FbmdpbmVzL25hdGl2ZUVuZ2luZS50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogTmF0aXZlRW5naW5lICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5h
dGl2ZUVuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTmF0aXZlRW5naW5lOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90
c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFs
cy9UZXh0dXJlcy9pbnRlcm5hbFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVy
bmFsVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxz
L1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVz
X2RhdGFCdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01lc2hlcy9kYXRhQnVmZmVyICovICIuL01lc2hlcy9kYXRhQnVmZmVyLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8g
Ii4vTWlzYy90b29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2Vudmly
b25tZW50VGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2Vudmlyb25tZW50VGV4dHVyZVRvb2xzICovICIuL01p
c2MvZW52aXJvbm1lbnRUZXh0dXJlVG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldENyZWF0aW9uT3B0aW9uc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL3JlbmRlclRhcmdldENyZWF0aW9uT3B0aW9ucyAqLyAiLi9NYXRlcmlhbHMv
VGV4dHVyZXMvcmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25zLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX05hdGl2ZV9uYXRpdmVTaGFkZXJQcm9jZXNzb3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vTmF0aXZlL25hdGl2ZVNo
YWRlclByb2Nlc3NvciAqLyAiLi9FbmdpbmVzL05hdGl2ZS9uYXRpdmVTaGFkZXJQcm9jZXNzb3Iu
dHMiKTsKKworCisKKworCisKKworCisKK3ZhciBOYXRpdmVQaXBlbGluZUNvbnRleHQgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gTmF0aXZlUGlwZWxpbmVDb250
ZXh0KCkgeworICAgICAgICAvLyBUT0RPOiBhc3luYyBzaG91bGQgYmUgdHJ1ZT8KKyAgICAgICAg
dGhpcy5pc0FzeW5jID0gZmFsc2U7CisgICAgICAgIHRoaXMuaXNSZWFkeSA9IGZhbHNlOworICAg
ICAgICB0aGlzLl92YWx1ZUNhY2hlID0ge307CisgICAgfQorICAgIC8vIFRPRE86IHdoYXQgc2hv
dWxkIHRoaXMgZG8/CisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5faGFuZGxl
c1NwZWN0b3JSZWJ1aWxkQ2FsbGJhY2sgPSBmdW5jdGlvbiAob25Db21waWxlZCkgeworICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOworICAgIH07CisgICAgTmF0aXZl
UGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5fZmlsbEVmZmVjdEluZm9ybWF0aW9uID0gZnVuY3Rp
b24gKGVmZmVjdCwgdW5pZm9ybUJ1ZmZlcnNOYW1lcywgdW5pZm9ybXNOYW1lcywgdW5pZm9ybXMs
IHNhbXBsZXJMaXN0LCBzYW1wbGVycywgYXR0cmlidXRlc05hbWVzLCBhdHRyaWJ1dGVzKSB7Cisg
ICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLmVuZ2luZTsKKyAgICAgICAgaWYgKGVuZ2luZS5zdXBw
b3J0c1VuaWZvcm1CdWZmZXJzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHVuaWZv
cm1CdWZmZXJzTmFtZXMpIHsKKyAgICAgICAgICAgICAgICBlZmZlY3QuYmluZFVuaWZvcm1CbG9j
ayhuYW1lLCB1bmlmb3JtQnVmZmVyc05hbWVzW25hbWVdKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB2YXIgZWZmZWN0QXZhaWxhYmxlVW5pZm9ybXMgPSB0aGlzLmVuZ2luZS5n
ZXRVbmlmb3Jtcyh0aGlzLCB1bmlmb3Jtc05hbWVzKTsKKyAgICAgICAgZWZmZWN0QXZhaWxhYmxl
VW5pZm9ybXMuZm9yRWFjaChmdW5jdGlvbiAodW5pZm9ybSwgaW5kZXgpIHsKKyAgICAgICAgICAg
IHVuaWZvcm1zW3VuaWZvcm1zTmFtZXNbaW5kZXhdXSA9IHVuaWZvcm07CisgICAgICAgIH0pOwor
ICAgICAgICB0aGlzLl91bmlmb3JtcyA9IHVuaWZvcm1zOworICAgICAgICB2YXIgaW5kZXg7Cisg
ICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNhbXBsZXJMaXN0Lmxlbmd0aDsgaW5kZXgr
KykgeworICAgICAgICAgICAgdmFyIHNhbXBsZXIgPSBlZmZlY3QuZ2V0VW5pZm9ybShzYW1wbGVy
TGlzdFtpbmRleF0pOworICAgICAgICAgICAgaWYgKHNhbXBsZXIgPT0gbnVsbCkgeworICAgICAg
ICAgICAgICAgIHNhbXBsZXJMaXN0LnNwbGljZShpbmRleCwgMSk7CisgICAgICAgICAgICAgICAg
aW5kZXgtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzYW1wbGVyTGlzdC5m
b3JFYWNoKGZ1bmN0aW9uIChuYW1lLCBpbmRleCkgeworICAgICAgICAgICAgc2FtcGxlcnNbbmFt
ZV0gPSBpbmRleDsKKyAgICAgICAgfSk7CisgICAgICAgIGF0dHJpYnV0ZXMucHVzaC5hcHBseShh
dHRyaWJ1dGVzLCBlbmdpbmUuZ2V0QXR0cmlidXRlcyh0aGlzLCBhdHRyaWJ1dGVzTmFtZXMpKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJlbGVhc2UgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2Vz
LgorICAgICAqKi8KKyAgICBOYXRpdmVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLmRpc3Bvc2Ug
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3VuaWZvcm1zID0ge307CisgICAgfTsKKyAg
ICAvKiogQGhpZGRlbiAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuX2Nh
Y2hlTWF0cml4ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBtYXRyaXgpIHsKKyAgICAgICAgdmFy
IGNhY2hlID0gdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV07CisgICAgICAgIHZhciBmbGFn
ID0gbWF0cml4LnVwZGF0ZUZsYWc7CisgICAgICAgIGlmIChjYWNoZSAhPT0gdW5kZWZpbmVkICYm
IGNhY2hlID09PSBmbGFnKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBmbGFnOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTmF0aXZlUGlwZWxp
bmVDb250ZXh0LnByb3RvdHlwZS5fY2FjaGVGbG9hdDIgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUs
IHgsIHkpIHsKKyAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFt
ZV07CisgICAgICAgIGlmICghY2FjaGUpIHsKKyAgICAgICAgICAgIGNhY2hlID0gW3gsIHldOwor
ICAgICAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBjYWNoZTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHZhciBjaGFuZ2VkID0gZmFs
c2U7CisgICAgICAgIGlmIChjYWNoZVswXSAhPT0geCkgeworICAgICAgICAgICAgY2FjaGVbMF0g
PSB4OworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNhY2hlWzFdICE9PSB5KSB7CisgICAgICAgICAgICBjYWNoZVsxXSA9IHk7CisgICAgICAgICAg
ICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAg
ICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3Rv
dHlwZS5fY2FjaGVGbG9hdDMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIHgsIHksIHopIHsKKyAg
ICAgICAgdmFyIGNhY2hlID0gdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV07CisgICAgICAg
IGlmICghY2FjaGUpIHsKKyAgICAgICAgICAgIGNhY2hlID0gW3gsIHksIHpdOworICAgICAgICAg
ICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBjYWNoZTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGlmIChjYWNoZVswXSAhPT0geCkgeworICAgICAgICAgICAgY2FjaGVbMF0gPSB4OworICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhY2hlWzFd
ICE9PSB5KSB7CisgICAgICAgICAgICBjYWNoZVsxXSA9IHk7CisgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FjaGVbMl0gIT09IHopIHsKKyAgICAg
ICAgICAgIGNhY2hlWzJdID0gejsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBOYXRpdmVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLl9jYWNoZUZsb2F0NCA9IGZ1bmN0
aW9uICh1bmlmb3JtTmFtZSwgeCwgeSwgeiwgdykgeworICAgICAgICB2YXIgY2FjaGUgPSB0aGlz
Ll92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXTsKKyAgICAgICAgaWYgKCFjYWNoZSkgeworICAgICAg
ICAgICAgY2FjaGUgPSBbeCwgeSwgeiwgd107CisgICAgICAgICAgICB0aGlzLl92YWx1ZUNhY2hl
W3VuaWZvcm1OYW1lXSA9IGNhY2hlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGNhY2hlWzBdICE9
PSB4KSB7CisgICAgICAgICAgICBjYWNoZVswXSA9IHg7CisgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FjaGVbMV0gIT09IHkpIHsKKyAgICAgICAg
ICAgIGNhY2hlWzFdID0geTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIGlmIChjYWNoZVsyXSAhPT0geikgeworICAgICAgICAgICAgY2FjaGVbMl0gPSB6
OworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNh
Y2hlWzNdICE9PSB3KSB7CisgICAgICAgICAgICBjYWNoZVszXSA9IHc7CisgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgYW4gaW50ZXJnZXIgdmFsdWUgb24gYSB1bmlmb3JtIHZh
cmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4K
KyAgICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqLworICAgIE5hdGl2
ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0SW50ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1l
LCB2YWx1ZSkgeworICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1O
YW1lXTsKKyAgICAgICAgaWYgKGNhY2hlICE9PSB1bmRlZmluZWQgJiYgY2FjaGUgPT09IHZhbHVl
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdmFsdWVD
YWNoZVt1bmlmb3JtTmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0SW50KHRo
aXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgdmFsdWUpOworICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0cyBhbiBpbnQgYXJyYXkgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJh
bSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkg
YXJyYXkgdG8gYmUgc2V0LgorICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90
b3R5cGUuc2V0SW50QXJyYXkgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAg
ICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhpcy5l
bmdpbmUuc2V0SW50QXJyYXkodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGludCBhcnJheSAyIG9uIGEgdW5pZm9ybSB2
YXJpYWJsZS4gKEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIsMyw0
XSB3aWxsIHJlc3VsdCBpbiBbWzEsMl0sWzMsNF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBh
cmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJh
eSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnBy
b3RvdHlwZS5zZXRJbnRBcnJheTIgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFycmF5KSB7Cisg
ICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhp
cy5lbmdpbmUuc2V0SW50QXJyYXkyKHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgYXJyYXkp
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBpbnQgYXJyYXkgMyBvbiBhIHVuaWZv
cm0gdmFyaWFibGUuIChBcnJheSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwy
LDMsNCw1LDZdIHdpbGwgcmVzdWx0IGluIFtbMSwyLDNdLFs0LDUsNl1dIGluIHRoZSBzaGFkZXIp
CisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAq
IEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisgICAgTmF0aXZlUGlwZWxp
bmVDb250ZXh0LnByb3RvdHlwZS5zZXRJbnRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUs
IGFycmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsK
KyAgICAgICAgdGhpcy5lbmdpbmUuc2V0SW50QXJyYXkzKHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1O
YW1lXSwgYXJyYXkpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBpbnQgYXJyYXkg
NCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJheSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFy
cmF5IGVnLiBbMSwyLDMsNCw1LDYsNyw4XSB3aWxsIHJlc3VsdCBpbiBbWzEsMiwzLDRdLFs1LDYs
Nyw4XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0
aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAg
Ki8KKyAgICBOYXRpdmVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEludEFycmF5NCA9IGZ1
bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1
bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVuZ2luZS5zZXRJbnRBcnJheTQodGhp
cy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIGFuIGZsb2F0IGFycmF5IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFy
YW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5
IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBOYXRpdmVQaXBlbGluZUNvbnRleHQucHJv
dG90eXBlLnNldEZsb2F0QXJyYXkgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFycmF5KSB7Cisg
ICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhp
cy5lbmdpbmUuc2V0RmxvYXRBcnJheSh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIGFycmF5
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYW4gZmxvYXQgYXJyYXkgMiBvbiBhIHVu
aWZvcm0gdmFyaWFibGUuIChBcnJheSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBb
MSwyLDMsNF0gd2lsbCByZXN1bHQgaW4gW1sxLDJdLFszLDRdXSBpbiB0aGUgc2hhZGVyKQorICAg
ICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFy
YW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29u
dGV4dC5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTIgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFy
cmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXRBcnJheTIodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5h
bWVdLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGZsb2F0IGFycmF5
IDMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBh
cnJheSBlZy4gWzEsMiwzLDQsNSw2XSB3aWxsIHJlc3VsdCBpbiBbWzEsMiwzXSxbNCw1LDZdXSBp
biB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJp
YWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqLworICAg
IE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTMgPSBmdW5jdGlv
biAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9y
bU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXRBcnJheTModGhpcy5f
dW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXRzIGFuIGZsb2F0IGFycmF5IDQgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3Bl
Y2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDQsNSw2LDcsOF0gd2lsbCByZXN1bHQg
aW4gW1sxLDIsMyw0XSxbNSw2LDcsOF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVu
aWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJh
eSB0byBiZSBzZXQuCisgICAgICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3RvdHlw
ZS5zZXRGbG9hdEFycmF5NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAg
ICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVu
Z2luZS5zZXRGbG9hdEFycmF5NCh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIGFycmF5KTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYW4gYXJyYXkgb24gYSB1bmlmb3JtIHZhcmlh
YmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAg
ICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqLworICAgIE5hdGl2ZVBp
cGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0QXJyYXkgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUs
IGFycmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsK
KyAgICAgICAgdGhpcy5lbmdpbmUuc2V0QXJyYXkodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVd
LCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGFycmF5IDIgb24gYSB1
bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4g
WzEsMiwzLDRdIHdpbGwgcmVzdWx0IGluIFtbMSwyXSxbMyw0XV0gaW4gdGhlIHNoYWRlcikKKyAg
ICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBh
cmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBOYXRpdmVQaXBlbGluZUNv
bnRleHQucHJvdG90eXBlLnNldEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkp
IHsKKyAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAg
ICB0aGlzLmVuZ2luZS5zZXRBcnJheTIodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJh
eSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGFycmF5IDMgb24gYSB1bmlmb3Jt
IHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwz
LDQsNSw2XSB3aWxsIHJlc3VsdCBpbiBbWzEsMiwzXSxbNCw1LDZdXSBpbiB0aGUgc2hhZGVyKQor
ICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBA
cGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0
LgorICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0QXJyYXkz
ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aGlzLl92YWx1ZUNh
Y2hlW3VuaWZvcm1OYW1lXSA9IG51bGw7CisgICAgICAgIHRoaXMuZW5naW5lLnNldEFycmF5Myh0
aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIGFycmF5KTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldHMgYW4gYXJyYXkgNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJheSBpcyBzcGVj
aWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNCw1LDYsNyw4XSB3aWxsIHJlc3VsdCBp
biBbWzEsMiwzLDRdLFs1LDYsNyw4XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0gdW5p
Zm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5
IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBOYXRpdmVQaXBlbGluZUNvbnRleHQucHJvdG90eXBl
LnNldEFycmF5NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhp
cy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVuZ2luZS5z
ZXRBcnJheTQodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTZXRzIG1hdHJpY2VzIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAg
KiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFt
IG1hdHJpY2VzIG1hdHJpY2VzIHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBOYXRpdmVQaXBlbGlu
ZUNvbnRleHQucHJvdG90eXBlLnNldE1hdHJpY2VzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBt
YXRyaWNlcykgeworICAgICAgICBpZiAoIW1hdHJpY2VzKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxs
OworICAgICAgICB0aGlzLmVuZ2luZS5zZXRNYXRyaWNlcyh0aGlzLl91bmlmb3Jtc1t1bmlmb3Jt
TmFtZV0sIG1hdHJpY2VzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgbWF0cml4IG9u
IGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0
aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIG1hdHJpeCBtYXRyaXggdG8gYmUgc2V0LgorICAg
ICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0TWF0cml4ID0gZnVu
Y3Rpb24gKHVuaWZvcm1OYW1lLCBtYXRyaXgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2NhY2hlTWF0
cml4KHVuaWZvcm1OYW1lLCBtYXRyaXgpKSB7CisgICAgICAgICAgICB0aGlzLmVuZ2luZS5zZXRN
YXRyaWNlcyh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIG1hdHJpeC50b0FycmF5KCkpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgM3gzIG1hdHJpeCBvbiBh
IHVuaWZvcm0gdmFyaWFibGUuIChTcGVpY2lmaWVkIGFzIFsxLDIsMyw0LDUsNiw3LDgsOV0gd2ls
bCByZXN1bHQgaW4gWzEsMiwzXVs0LDUsNl1bNyw4LDldIG1hdHJpeCkKKyAgICAgKiBAcGFyYW0g
dW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIG1hdHJpeCBt
YXRyaXggdG8gYmUgc2V0LgorICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90
b3R5cGUuc2V0TWF0cml4M3gzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBtYXRyaXgpIHsKKyAg
ICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlz
LmVuZ2luZS5zZXRNYXRyaXgzeDModGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBtYXRyaXgp
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIDJ4MiBtYXRyaXggb24gYSB1bmlmb3Jt
IHZhcmlhYmxlLiAoU3BlaWNpZmllZCBhcyBbMSwyLDMsNF0gd2lsbCByZXN1bHQgaW4gWzEsMl1b
Myw0XSBtYXRyaXgpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlh
YmxlLgorICAgICAqIEBwYXJhbSBtYXRyaXggbWF0cml4IHRvIGJlIHNldC4KKyAgICAgKi8KKyAg
ICBOYXRpdmVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldE1hdHJpeDJ4MiA9IGZ1bmN0aW9u
ICh1bmlmb3JtTmFtZSwgbWF0cml4KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9y
bU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0TWF0cml4MngyKHRoaXMuX3Vu
aWZvcm1zW3VuaWZvcm1OYW1lXSwgbWF0cml4KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
dHMgYSBmbG9hdCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1O
YW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBi
ZSBzZXQuCisgICAgICogQHJldHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisgICAgTmF0aXZl
UGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRGbG9hdCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFt
ZSwgdmFsdWUpIHsKKyAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3Jt
TmFtZV07CisgICAgICAgIGlmIChjYWNoZSAhPT0gdW5kZWZpbmVkICYmIGNhY2hlID09PSB2YWx1
ZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3ZhbHVl
Q2FjaGVbdW5pZm9ybU5hbWVdID0gdmFsdWU7CisgICAgICAgIHRoaXMuZW5naW5lLnNldEZsb2F0
KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgdmFsdWUpOworICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0cyBhIGJvb2xlYW4gb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJh
bSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYm9vbCB2
YWx1ZSB0byBiZSBzZXQuCisgICAgICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3Rv
dHlwZS5zZXRCb29sID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBib29sKSB7CisgICAgICAgIHZh
ciBjYWNoZSA9IHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdOworICAgICAgICBpZiAoY2Fj
aGUgIT09IHVuZGVmaW5lZCAmJiBjYWNoZSA9PT0gYm9vbCkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gYm9v
bDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0Qm9vbCh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFt
ZV0sIGJvb2wgPyAxIDogMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgVmVjdG9y
MiBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUg
b2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB2ZWN0b3IyIHZlY3RvcjIgdG8gYmUgc2V0
LgorICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0VmVjdG9y
MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgdmVjdG9yMikgeworICAgICAgICBpZiAodGhpcy5f
Y2FjaGVGbG9hdDIodW5pZm9ybU5hbWUsIHZlY3RvcjIueCwgdmVjdG9yMi55KSkgeworICAgICAg
ICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXQyKHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwg
dmVjdG9yMi54LCB2ZWN0b3IyLnkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIGEgZmxvYXQyIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5p
Zm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIHggRmlyc3QgZmxv
YXQgaW4gZmxvYXQyLgorICAgICAqIEBwYXJhbSB5IFNlY29uZCBmbG9hdCBpbiBmbG9hdDIuCisg
ICAgICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRGbG9hdDIgPSBm
dW5jdGlvbiAodW5pZm9ybU5hbWUsIHgsIHkpIHsKKyAgICAgICAgaWYgKHRoaXMuX2NhY2hlRmxv
YXQyKHVuaWZvcm1OYW1lLCB4LCB5KSkgeworICAgICAgICAgICAgdGhpcy5lbmdpbmUuc2V0Rmxv
YXQyKHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgeCwgeSk7CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgYSBWZWN0b3IzIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4K
KyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICog
QHBhcmFtIHZlY3RvcjMgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqLworICAgIE5hdGl2ZVBpcGVs
aW5lQ29udGV4dC5wcm90b3R5cGUuc2V0VmVjdG9yMyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwg
dmVjdG9yMykgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDModW5pZm9ybU5hbWUsIHZl
Y3RvcjMueCwgdmVjdG9yMy55LCB2ZWN0b3IzLnopKSB7CisgICAgICAgICAgICB0aGlzLmVuZ2lu
ZS5zZXRGbG9hdDModGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCB2ZWN0b3IzLngsIHZlY3Rv
cjMueSwgdmVjdG9yMy56KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0
cyBhIGZsb2F0MyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1O
YW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB4IEZpcnN0IGZsb2F0IGlu
IGZsb2F0My4KKyAgICAgKiBAcGFyYW0geSBTZWNvbmQgZmxvYXQgaW4gZmxvYXQzLgorICAgICAq
IEBwYXJhbSB6IFRoaXJkIGZsb2F0IGluIGZsb2F0My4KKyAgICAgKi8KKyAgICBOYXRpdmVQaXBl
bGluZUNvbnRleHQucHJvdG90eXBlLnNldEZsb2F0MyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwg
eCwgeSwgeikgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDModW5pZm9ybU5hbWUsIHgs
IHksIHopKSB7CisgICAgICAgICAgICB0aGlzLmVuZ2luZS5zZXRGbG9hdDModGhpcy5fdW5pZm9y
bXNbdW5pZm9ybU5hbWVdLCB4LCB5LCB6KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0cyBhIFZlY3RvcjQgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJh
bSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdmVjdG9y
NCBWYWx1ZSB0byBiZSBzZXQuCisgICAgICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnBy
b3RvdHlwZS5zZXRWZWN0b3I0ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB2ZWN0b3I0KSB7Cisg
ICAgICAgIGlmICh0aGlzLl9jYWNoZUZsb2F0NCh1bmlmb3JtTmFtZSwgdmVjdG9yNC54LCB2ZWN0
b3I0LnksIHZlY3RvcjQueiwgdmVjdG9yNC53KSkgeworICAgICAgICAgICAgdGhpcy5lbmdpbmUu
c2V0RmxvYXQ0KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgdmVjdG9yNC54LCB2ZWN0b3I0
LnksIHZlY3RvcjQueiwgdmVjdG9yNC53KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0cyBhIGZsb2F0NCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFt
IHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB4IEZpcnN0
IGZsb2F0IGluIGZsb2F0NC4KKyAgICAgKiBAcGFyYW0geSBTZWNvbmQgZmxvYXQgaW4gZmxvYXQ0
LgorICAgICAqIEBwYXJhbSB6IFRoaXJkIGZsb2F0IGluIGZsb2F0NC4KKyAgICAgKiBAcGFyYW0g
dyBGb3VydGggZmxvYXQgaW4gZmxvYXQ0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0Lgor
ICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0RmxvYXQ0ID0g
ZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB4LCB5LCB6LCB3KSB7CisgICAgICAgIGlmICh0aGlzLl9j
YWNoZUZsb2F0NCh1bmlmb3JtTmFtZSwgeCwgeSwgeiwgdykpIHsKKyAgICAgICAgICAgIHRoaXMu
ZW5naW5lLnNldEZsb2F0NCh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIHgsIHksIHosIHcp
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgQ29sb3IzIG9uIGEg
dW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUg
dmFyaWFibGUuCisgICAgICogQHBhcmFtIGNvbG9yMyBWYWx1ZSB0byBiZSBzZXQuCisgICAgICov
CisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRDb2xvcjMgPSBmdW5jdGlv
biAodW5pZm9ybU5hbWUsIGNvbG9yMykgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDMo
dW5pZm9ybU5hbWUsIGNvbG9yMy5yLCBjb2xvcjMuZywgY29sb3IzLmIpKSB7CisgICAgICAgICAg
ICB0aGlzLmVuZ2luZS5zZXRGbG9hdDModGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBjb2xv
cjMuciwgY29sb3IzLmcsIGNvbG9yMy5iKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0cyBhIENvbG9yNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFt
IHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBjb2xvcjMg
VmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSBhbHBoYSBBbHBoYSB2YWx1ZSB0byBiZSBz
ZXQuCisgICAgICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRDb2xv
cjQgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGNvbG9yMywgYWxwaGEpIHsKKyAgICAgICAgaWYg
KHRoaXMuX2NhY2hlRmxvYXQ0KHVuaWZvcm1OYW1lLCBjb2xvcjMuciwgY29sb3IzLmcsIGNvbG9y
My5iLCBhbHBoYSkpIHsKKyAgICAgICAgICAgIHRoaXMuZW5naW5lLnNldEZsb2F0NCh0aGlzLl91
bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIGNvbG9yMy5yLCBjb2xvcjMuZywgY29sb3IzLmIsIGFscGhh
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIENvbG9yNCBvbiBh
IHVuaWZvcm0gdmFyaWFibGUKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgZGVmaW5lcyB0aGUg
bmFtZSBvZiB0aGUgdmFyaWFibGUKKyAgICAgKiBAcGFyYW0gY29sb3I0IGRlZmluZXMgdGhlIHZh
bHVlIHRvIGJlIHNldAorICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5
cGUuc2V0RGlyZWN0Q29sb3I0ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBjb2xvcjQpIHsKKyAg
ICAgICAgaWYgKHRoaXMuX2NhY2hlRmxvYXQ0KHVuaWZvcm1OYW1lLCBjb2xvcjQuciwgY29sb3I0
LmcsIGNvbG9yNC5iLCBjb2xvcjQuYSkpIHsKKyAgICAgICAgICAgIHRoaXMuZW5naW5lLnNldERp
cmVjdENvbG9yNCh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIGNvbG9yNCk7CisgICAgICAg
IH0KKyAgICB9OworICAgIHJldHVybiBOYXRpdmVQaXBlbGluZUNvbnRleHQ7Cit9KCkpOworLyoq
CisgKiBDb250YWluZXIgZm9yIGFjY2Vzc29ycyBmb3IgbmF0aXZlbHktc3RvcmVkIG1lc2ggZGF0
YSBidWZmZXJzLgorICovCit2YXIgTmF0aXZlRGF0YUJ1ZmZlciA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2V4dGVuZHMiXShOYXRpdmVEYXRhQnVmZmVyLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIE5h
dGl2ZURhdGFCdWZmZXIoKSB7CisgICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1
cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpczsKKyAgICB9CisgICAgcmV0dXJuIE5h
dGl2ZURhdGFCdWZmZXI7Cit9KF9NZXNoZXNfZGF0YUJ1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJEYXRhQnVmZmVyIl0pKTsKKy8vIFRPRE86IGNoYW5nZSB0aGlzIHRvIG1hdGNo
IGJnZnguCisvLyBNdXN0IG1hdGNoIEZpbHRlciBlbnVtIGluIFNwZWN0cmVFbmdpbmUuaC4KK3Zh
ciBOYXRpdmVGaWx0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rp
b24gTmF0aXZlRmlsdGVyKCkgeworICAgIH0KKyAgICBOYXRpdmVGaWx0ZXIuUE9JTlQgPSAwOwor
ICAgIE5hdGl2ZUZpbHRlci5NSU5QT0lOVF9NQUdQT0lOVF9NSVBQT0lOVCA9IE5hdGl2ZUZpbHRl
ci5QT0lOVDsKKyAgICBOYXRpdmVGaWx0ZXIuQklMSU5FQVIgPSAxOworICAgIE5hdGl2ZUZpbHRl
ci5NSU5MSU5FQVJfTUFHTElORUFSX01JUFBPSU5UID0gTmF0aXZlRmlsdGVyLkJJTElORUFSOwor
ICAgIE5hdGl2ZUZpbHRlci5UUklMSU5FQVIgPSAyOworICAgIE5hdGl2ZUZpbHRlci5NSU5MSU5F
QVJfTUFHTElORUFSX01JUExJTkVBUiA9IE5hdGl2ZUZpbHRlci5UUklMSU5FQVI7CisgICAgTmF0
aXZlRmlsdGVyLkFOSVNPVFJPUElDID0gMzsKKyAgICBOYXRpdmVGaWx0ZXIuUE9JTlRfQ09NUEFS
RSA9IDQ7CisgICAgTmF0aXZlRmlsdGVyLlRSSUxJTkVBUl9DT01QQVJFID0gNTsKKyAgICBOYXRp
dmVGaWx0ZXIuTUlOQklMSU5FQVJfTUFHUE9JTlQgPSA2OworICAgIE5hdGl2ZUZpbHRlci5NSU5M
SU5FQVJfTUFHUE9JTlRfTUlQTElORUFSID0gTmF0aXZlRmlsdGVyLk1JTkJJTElORUFSX01BR1BP
SU5UOworICAgIE5hdGl2ZUZpbHRlci5NSU5QT0lOVF9NQUdQT0lOVF9NSVBMSU5FQVIgPSA3Owor
ICAgIE5hdGl2ZUZpbHRlci5NSU5QT0lOVF9NQUdMSU5FQVJfTUlQUE9JTlQgPSA4OworICAgIE5h
dGl2ZUZpbHRlci5NSU5QT0lOVF9NQUdMSU5FQVJfTUlQTElORUFSID0gOTsKKyAgICBOYXRpdmVG
aWx0ZXIuTUlOTElORUFSX01BR1BPSU5UX01JUFBPSU5UID0gMTA7CisgICAgcmV0dXJuIE5hdGl2
ZUZpbHRlcjsKK30oKSk7CisvLyBUT0RPOiBjaGFuZ2UgdGhpcyB0byBtYXRjaCBiZ2Z4LgorLy8g
TXVzdCBtYXRjaCBBZGRyZXNzTW9kZSBlbnVtIGluIFNwZWN0cmVFbmdpbmUuaC4KK3ZhciBOYXRp
dmVBZGRyZXNzTW9kZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlv
biBOYXRpdmVBZGRyZXNzTW9kZSgpIHsKKyAgICB9CisgICAgTmF0aXZlQWRkcmVzc01vZGUuV1JB
UCA9IDA7CisgICAgTmF0aXZlQWRkcmVzc01vZGUuTUlSUk9SID0gMTsKKyAgICBOYXRpdmVBZGRy
ZXNzTW9kZS5DTEFNUCA9IDI7CisgICAgTmF0aXZlQWRkcmVzc01vZGUuQk9SREVSID0gMzsKKyAg
ICBOYXRpdmVBZGRyZXNzTW9kZS5NSVJST1JfT05DRSA9IDQ7CisgICAgcmV0dXJuIE5hdGl2ZUFk
ZHJlc3NNb2RlOworfSgpKTsKKy8qKiBAaGlkZGVuICovCit2YXIgTmF0aXZlRW5naW5lID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKE5hdGl2ZUVuZ2luZSwgX3N1cGVyKTsKKyAgICBm
dW5jdGlvbiBOYXRpdmVFbmdpbmUoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxs
KHRoaXMsIG51bGwpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9uYXRpdmUgPSBuYXRpdmVFbmdp
bmU7CisgICAgICAgIF90aGlzLl93ZWJHTFZlcnNpb24gPSAyOworICAgICAgICBfdGhpcy5kaXNh
YmxlVW5pZm9ybUJ1ZmZlcnMgPSB0cnVlOworICAgICAgICAvLyBUT0RPOiBJbml0aWFsaXplIHRo
aXMgbW9yZSBjb3JyZWN0bHkgYmFzZWQgb24gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4KKyAg
ICAgICAgLy8gSW5pdCBjYXBzCisgICAgICAgIF90aGlzLl9jYXBzID0gbmV3IF9FbmdpbmVzX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmVDYXBhYmlsaXRpZXMiXSgp
OworICAgICAgICBfdGhpcy5fY2Fwcy5tYXhUZXh0dXJlc0ltYWdlVW5pdHMgPSAxNjsKKyAgICAg
ICAgX3RoaXMuX2NhcHMubWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAxNjsKKyAgICAgICAg
X3RoaXMuX2NhcHMubWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgICAgIF90aGlzLl9jYXBzLm1h
eEN1YmVtYXBUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAgICAgX3RoaXMuX2NhcHMubWF4UmVuZGVy
VGV4dHVyZVNpemUgPSA1MTI7CisgICAgICAgIF90aGlzLl9jYXBzLm1heFZlcnRleEF0dHJpYnMg
PSAxNjsKKyAgICAgICAgX3RoaXMuX2NhcHMubWF4VmFyeWluZ1ZlY3RvcnMgPSAxNjsKKyAgICAg
ICAgX3RoaXMuX2NhcHMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9IDE2OworICAgICAgICBf
dGhpcy5fY2Fwcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IDE2OworICAgICAgICAvLyBFeHRl
bnNpb25zCisgICAgICAgIF90aGlzLl9jYXBzLnN0YW5kYXJkRGVyaXZhdGl2ZXMgPSB0cnVlOwor
ICAgICAgICBfdGhpcy5fY2Fwcy5hc3RjID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX2NhcHMuczN0
YyA9IG51bGw7CisgICAgICAgIF90aGlzLl9jYXBzLnB2cnRjID0gbnVsbDsKKyAgICAgICAgX3Ro
aXMuX2NhcHMuZXRjMSA9IG51bGw7CisgICAgICAgIF90aGlzLl9jYXBzLmV0YzIgPSBudWxsOwor
ICAgICAgICBfdGhpcy5fY2Fwcy5tYXhBbmlzb3Ryb3B5ID0gMTY7IC8vIFRPRE86IFJldHJpZXZl
IHRoaXMgc21hcnRseS4gQ3VycmVudGx5IHNldCB0byBEM0QxMSBtYXhpbXVtIGFsbG93YWJsZSB2
YWx1ZS4KKyAgICAgICAgX3RoaXMuX2NhcHMudWludEluZGljZXMgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuX2NhcHMuZnJhZ21lbnREZXB0aFN1cHBvcnRlZCA9IGZhbHNlOworICAgICAgICBfdGhp
cy5fY2Fwcy5oaWdoUHJlY2lzaW9uU2hhZGVyU3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgX3Ro
aXMuX2NhcHMuY29sb3JCdWZmZXJGbG9hdCA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2Fwcy50
ZXh0dXJlRmxvYXQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2NhcHMudGV4dHVyZUZsb2F0TGlu
ZWFyRmlsdGVyaW5nID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9jYXBzLnRleHR1cmVGbG9hdFJl
bmRlciA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZsb2F0ID0gZmFs
c2U7CisgICAgICAgIF90aGlzLl9jYXBzLnRleHR1cmVIYWxmRmxvYXRMaW5lYXJGaWx0ZXJpbmcg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2NhcHMudGV4dHVyZUhhbGZGbG9hdFJlbmRlciA9IGZh
bHNlOworICAgICAgICBfdGhpcy5fY2Fwcy50ZXh0dXJlTE9EID0gdHJ1ZTsKKyAgICAgICAgX3Ro
aXMuX2NhcHMuZHJhd0J1ZmZlcnNFeHRlbnNpb24gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2Nh
cHMuZGVwdGhUZXh0dXJlRXh0ZW5zaW9uID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9jYXBzLnZl
cnRleEFycmF5T2JqZWN0ID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX2NhcHMuaW5zdGFuY2VkQXJy
YXlzID0gZmFsc2U7CisgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X19bIlRvb2xzIl0uTG9nKCJCYWJ5bG9uIE5hdGl2ZSAodiIgKyBfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uVmVyc2lvbiArICIpIGxhdW5j
aGVkIik7CisgICAgICAgIC8vIFdyYXBwZXJzCisgICAgICAgIGlmICh0eXBlb2YgVVJMID09PSAi
dW5kZWZpbmVkIikgeworICAgICAgICAgICAgd2luZG93LlVSTCA9IHsKKyAgICAgICAgICAgICAg
ICBjcmVhdGVPYmplY3RVUkw6IGZ1bmN0aW9uICgpIHsgfSwKKyAgICAgICAgICAgICAgICByZXZv
a2VPYmplY3RVUkw6IGZ1bmN0aW9uICgpIHsgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodHlwZW9mIEJsb2IgPT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICB3
aW5kb3cuQmxvYiA9IGZ1bmN0aW9uICgpIHsgfTsKKyAgICAgICAgfQorICAgICAgICAvLyBTaGFk
ZXIgcHJvY2Vzc29yCisgICAgICAgIF90aGlzLl9zaGFkZXJQcm9jZXNzb3IgPSBuZXcgX05hdGl2
ZV9uYXRpdmVTaGFkZXJQcm9jZXNzb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTmF0
aXZlU2hhZGVyUHJvY2Vzc29yIl0oKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAg
ICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLmdldEhhcmR3YXJlU2NhbGluZ0xldmVsID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gMS4wOworICAgIH07CisgICAgLyoqCisgICAgICogQ2Fu
IGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGN1cnJlbnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHJl
cXVlc3Rlci4KKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgTmF0aXZlRW5naW5lLnByb3Rv
dHlwZS5fcXVldWVOZXdGcmFtZSA9IGZ1bmN0aW9uIChiaW5kZWRSZW5kZXJGdW5jdGlvbiwgcmVx
dWVzdGVyKSB7CisgICAgICAgIHRoaXMuX25hdGl2ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYmlu
ZGVkUmVuZGVyRnVuY3Rpb24pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9OworICAgIE5hdGl2
ZUVuZ2luZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoY29sb3IsIGJhY2tCdWZmZXIsIGRl
cHRoLCBzdGVuY2lsKSB7CisgICAgICAgIGlmIChzdGVuY2lsID09PSB2b2lkIDApIHsgc3RlbmNp
bCA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMuX25hdGl2ZS5jbGVhcihjb2xvci5yLCBjb2xvci5n
LCBjb2xvci5iLCBjb2xvci5hLCBiYWNrQnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgfTsK
KyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24g
KGluZGljZXMpIHsKKyAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9ub3JtYWxpemVJbmRleERhdGEo
aW5kaWNlcyk7CisgICAgICAgIHZhciBidWZmZXIgPSBuZXcgTmF0aXZlRGF0YUJ1ZmZlcigpOwor
ICAgICAgICBidWZmZXIucmVmZXJlbmNlcyA9IDE7CisgICAgICAgIGJ1ZmZlci5pczMyQml0cyA9
IChkYXRhLkJZVEVTX1BFUl9FTEVNRU5UID09PSA0KTsKKyAgICAgICAgYnVmZmVyLm5hdGl2ZUlu
ZGV4QnVmZmVyID0gdGhpcy5fbmF0aXZlLmNyZWF0ZUluZGV4QnVmZmVyKGRhdGEpOworICAgICAg
ICByZXR1cm4gYnVmZmVyOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5jcmVh
dGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB2YXIgYnVmZmVyID0g
bmV3IE5hdGl2ZURhdGFCdWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLnJlZmVyZW5jZXMgPSAxOwor
ICAgICAgICBidWZmZXIubmF0aXZlVmVydGV4QnVmZmVyID0gdGhpcy5fbmF0aXZlLmNyZWF0ZVZl
cnRleEJ1ZmZlcihBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkgPyBkYXRhIDogbmV3IEZsb2F0MzJB
cnJheShkYXRhKSk7CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgfTsKKyAgICBOYXRpdmVF
bmdpbmUucHJvdG90eXBlLnJlY29yZFZlcnRleEFycmF5T2JqZWN0ID0gZnVuY3Rpb24gKHZlcnRl
eEJ1ZmZlcnMsIGluZGV4QnVmZmVyLCBlZmZlY3QpIHsKKyAgICAgICAgdmFyIHZlcnRleEFycmF5
ID0gdGhpcy5fbmF0aXZlLmNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgICAgIGlmIChpbmRleEJ1
ZmZlcikgeworICAgICAgICAgICAgdGhpcy5fbmF0aXZlLnJlY29yZEluZGV4QnVmZmVyKHZlcnRl
eEFycmF5LCBpbmRleEJ1ZmZlci5uYXRpdmVJbmRleEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIGF0dHJpYnV0ZXMgPSBlZmZlY3QuZ2V0QXR0cmlidXRlc05hbWVzKCk7CisgICAgICAg
IGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaW5kZXgrKykg
eworICAgICAgICAgICAgdmFyIGxvY2F0aW9uXzEgPSBlZmZlY3QuZ2V0QXR0cmlidXRlTG9jYXRp
b24oaW5kZXgpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uXzEgPj0gMCkgeworICAgICAgICAg
ICAgICAgIHZhciBraW5kID0gYXR0cmlidXRlc1tpbmRleF07CisgICAgICAgICAgICAgICAgdmFy
IHZlcnRleEJ1ZmZlciA9IHZlcnRleEJ1ZmZlcnNba2luZF07CisgICAgICAgICAgICAgICAgaWYg
KHZlcnRleEJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdmVydGV4
QnVmZmVyLmdldEJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9uYXRpdmUucmVjb3JkVmVydGV4QnVmZmVyKHZl
cnRleEFycmF5LCBidWZmZXIubmF0aXZlVmVydGV4QnVmZmVyLCBsb2NhdGlvbl8xLCB2ZXJ0ZXhC
dWZmZXIuYnl0ZU9mZnNldCwgdmVydGV4QnVmZmVyLmJ5dGVTdHJpZGUsIHZlcnRleEJ1ZmZlci5n
ZXRTaXplKCksIHZlcnRleEJ1ZmZlci50eXBlLCB2ZXJ0ZXhCdWZmZXIubm9ybWFsaXplZCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZlcnRleEFycmF5OworICAgIH07CisgICAgTmF0aXZl
RW5naW5lLnByb3RvdHlwZS5iaW5kVmVydGV4QXJyYXlPYmplY3QgPSBmdW5jdGlvbiAodmVydGV4
QXJyYXkpIHsKKyAgICAgICAgdGhpcy5fbmF0aXZlLmJpbmRWZXJ0ZXhBcnJheSh2ZXJ0ZXhBcnJh
eSk7CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnJlbGVhc2VWZXJ0ZXhBcnJh
eU9iamVjdCA9IGZ1bmN0aW9uICh2ZXJ0ZXhBcnJheSkgeworICAgICAgICB0aGlzLl9uYXRpdmUu
ZGVsZXRlVmVydGV4QXJyYXkodmVydGV4QXJyYXkpOworICAgIH07CisgICAgTmF0aXZlRW5naW5l
LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCwgYXR0
cmlidXRlc05hbWVzKSB7CisgICAgICAgIHZhciBuYXRpdmVQaXBlbGluZUNvbnRleHQgPSBwaXBl
bGluZUNvbnRleHQ7CisgICAgICAgIHJldHVybiB0aGlzLl9uYXRpdmUuZ2V0QXR0cmlidXRlcyhu
YXRpdmVQaXBlbGluZUNvbnRleHQubmF0aXZlUHJvZ3JhbSwgYXR0cmlidXRlc05hbWVzKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIERyYXcgYSBsaXN0IG9mIGluZGV4ZWQgcHJpbWl0aXZlcwor
ICAgICAqIEBwYXJhbSBmaWxsTW9kZSBkZWZpbmVzIHRoZSBwcmltaXRpdmUgdG8gdXNlCisgICAg
ICogQHBhcmFtIGluZGV4U3RhcnQgZGVmaW5lcyB0aGUgc3RhcnRpbmcgaW5kZXgKKyAgICAgKiBA
cGFyYW0gaW5kZXhDb3VudCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgaW5kZXggdG8gZHJhdworICAg
ICAqIEBwYXJhbSBpbnN0YW5jZXNDb3VudCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgaW5zdGFuY2Vz
IHRvIGRyYXcgKGlmIGluc3RhbmNpYXRpb24gaXMgZW5hYmxlZCkKKyAgICAgKi8KKyAgICBOYXRp
dmVFbmdpbmUucHJvdG90eXBlLmRyYXdFbGVtZW50c1R5cGUgPSBmdW5jdGlvbiAoZmlsbE1vZGUs
IGluZGV4U3RhcnQsIGluZGV4Q291bnQsIGluc3RhbmNlc0NvdW50KSB7CisgICAgICAgIC8vIEFw
cGx5IHN0YXRlcworICAgICAgICB0aGlzLl9kcmF3Q2FsbHMuYWRkQ291bnQoMSwgZmFsc2UpOwor
ICAgICAgICAvLyBUT0RPOiBNYWtlIHRoaXMgaW1wbGVtZW50YXRpb24gbW9yZSByb2J1c3QgbGlr
ZSBjb3JlIEVuZ2luZSB2ZXJzaW9uLgorICAgICAgICAvLyBSZW5kZXIKKyAgICAgICAgLy92YXIg
aW5kZXhGb3JtYXQgPSB0aGlzLl91aW50SW5kaWNlc0N1cnJlbnRseVNldCA/IHRoaXMuX2dsLlVO
U0lHTkVEX0lOVCA6IHRoaXMuX2dsLlVOU0lHTkVEX1NIT1JUOworICAgICAgICAvL3ZhciBtdWx0
ID0gdGhpcy5fdWludEluZGljZXNDdXJyZW50bHlTZXQgPyA0IDogMjsKKyAgICAgICAgLy8gaWYg
KGluc3RhbmNlc0NvdW50KSB7CisgICAgICAgIC8vICAgICB0aGlzLl9nbC5kcmF3RWxlbWVudHNJ
bnN0YW5jZWQoZHJhd01vZGUsIGluZGV4Q291bnQsIGluZGV4Rm9ybWF0LCBpbmRleFN0YXJ0ICog
bXVsdCwgaW5zdGFuY2VzQ291bnQpOworICAgICAgICAvLyB9IGVsc2UgeworICAgICAgICB0aGlz
Ll9uYXRpdmUuZHJhd0luZGV4ZWQoZmlsbE1vZGUsIGluZGV4U3RhcnQsIGluZGV4Q291bnQpOwor
ICAgICAgICAvLyB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEcmF3IGEgbGlzdCBvZiB1bmlu
ZGV4ZWQgcHJpbWl0aXZlcworICAgICAqIEBwYXJhbSBmaWxsTW9kZSBkZWZpbmVzIHRoZSBwcmlt
aXRpdmUgdG8gdXNlCisgICAgICogQHBhcmFtIHZlcnRpY2VzU3RhcnQgZGVmaW5lcyB0aGUgaW5k
ZXggb2YgZmlyc3QgdmVydGV4IHRvIGRyYXcKKyAgICAgKiBAcGFyYW0gdmVydGljZXNDb3VudCBk
ZWZpbmVzIHRoZSBjb3VudCBvZiB2ZXJ0aWNlcyB0byBkcmF3CisgICAgICogQHBhcmFtIGluc3Rh
bmNlc0NvdW50IGRlZmluZXMgdGhlIG51bWJlciBvZiBpbnN0YW5jZXMgdG8gZHJhdyAoaWYgaW5z
dGFuY2lhdGlvbiBpcyBlbmFibGVkKQorICAgICAqLworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5
cGUuZHJhd0FycmF5c1R5cGUgPSBmdW5jdGlvbiAoZmlsbE1vZGUsIHZlcnRpY2VzU3RhcnQsIHZl
cnRpY2VzQ291bnQsIGluc3RhbmNlc0NvdW50KSB7CisgICAgICAgIC8vIEFwcGx5IHN0YXRlcwor
ICAgICAgICB0aGlzLl9kcmF3Q2FsbHMuYWRkQ291bnQoMSwgZmFsc2UpOworICAgICAgICAvLyBU
T0RPOiBNYWtlIHRoaXMgaW1wbGVtZW50YXRpb24gbW9yZSByb2J1c3QgbGlrZSBjb3JlIEVuZ2lu
ZSB2ZXJzaW9uLgorICAgICAgICAvLyBpZiAoaW5zdGFuY2VzQ291bnQpIHsKKyAgICAgICAgLy8g
ICAgIHRoaXMuX2dsLmRyYXdBcnJheXNJbnN0YW5jZWQoZHJhd01vZGUsIHZlcnRpY2VzU3RhcnQs
IHZlcnRpY2VzQ291bnQsIGluc3RhbmNlc0NvdW50KTsKKyAgICAgICAgLy8gfSBlbHNlIHsKKyAg
ICAgICAgdGhpcy5fbmF0aXZlLmRyYXcoZmlsbE1vZGUsIHZlcnRpY2VzU3RhcnQsIHZlcnRpY2Vz
Q291bnQpOworICAgICAgICAvLyB9CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBl
LmNyZWF0ZVBpcGVsaW5lQ29udGV4dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBOYXRpdmVQaXBlbGluZUNvbnRleHQoKTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90
b3R5cGUuX3ByZXBhcmVQaXBlbGluZUNvbnRleHQgPSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0
LCB2ZXJ0ZXhTb3VyY2VDb2RlLCBmcmFnbWVudFNvdXJjZUNvZGUsIGNyZWF0ZUFzUmF3LCByZWJ1
aWxkUmViaW5kLCBkZWZpbmVzLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKSB7CisgICAgICAg
IHZhciBuYXRpdmVQaXBlbGluZUNvbnRleHQgPSBwaXBlbGluZUNvbnRleHQ7CisgICAgICAgIGlm
IChjcmVhdGVBc1JhdykgeworICAgICAgICAgICAgbmF0aXZlUGlwZWxpbmVDb250ZXh0Lm5hdGl2
ZVByb2dyYW0gPSB0aGlzLmNyZWF0ZVJhd1NoYWRlclByb2dyYW0ocGlwZWxpbmVDb250ZXh0LCB2
ZXJ0ZXhTb3VyY2VDb2RlLCBmcmFnbWVudFNvdXJjZUNvZGUsIHVuZGVmaW5lZCwgdHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBuYXRpdmVQaXBlbGluZUNvbnRleHQubmF0aXZlUHJvZ3JhbSA9IHRoaXMuY3JlYXRlU2hhZGVy
UHJvZ3JhbShwaXBlbGluZUNvbnRleHQsIHZlcnRleFNvdXJjZUNvZGUsIGZyYWdtZW50U291cmNl
Q29kZSwgZGVmaW5lcywgdW5kZWZpbmVkLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOYXRpdmVFbmdpbmUucHJv
dG90eXBlLl9pc1JlbmRlcmluZ1N0YXRlQ29tcGlsZWQgPSBmdW5jdGlvbiAocGlwZWxpbmVDb250
ZXh0KSB7CisgICAgICAgIC8vIFRPRE86IHN1cHBvcnQgYXN5bmMgc2hhZGVyIGNvbXBpbGNhdGlv
bgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAg
TmF0aXZlRW5naW5lLnByb3RvdHlwZS5fZXhlY3V0ZVdoZW5SZW5kZXJpbmdTdGF0ZUlzQ29tcGls
ZWQgPSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0LCBhY3Rpb24pIHsKKyAgICAgICAgLy8gVE9E
Tzogc3VwcG9ydCBhc3luYyBzaGFkZXIgY29tcGlsY2F0aW9uCisgICAgICAgIGFjdGlvbigpOwor
ICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5jcmVhdGVSYXdTaGFkZXJQcm9ncmFt
ID0gZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCwgdmVydGV4Q29kZSwgZnJhZ21lbnRDb2RlLCBj
b250ZXh0LCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKSB7CisgICAgICAgIGlmICh0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzID09PSB2b2lkIDApIHsgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyA9IG51bGw7IH0KKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgU3VwcG9ydGVkIik7Cisg
ICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVNoYWRlclByb2dyYW0gPSBm
dW5jdGlvbiAocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhDb2RlLCBmcmFnbWVudENvZGUsIGRlZmlu
ZXMsIGNvbnRleHQsIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpIHsKKyAgICAgICAgaWYgKHRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MgPT09IHZvaWQgMCkgeyB0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzID0gbnVsbDsgfQorICAgICAgICB0aGlzLm9uQmVmb3JlU2hhZGVyQ29tcGlsYXRpb25P
YnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgdmFyIHByb2dyYW0gPSB0
aGlzLl9uYXRpdmUuY3JlYXRlUHJvZ3JhbShfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siRW5naW5lIl0uX2NvbmNhdGVuYXRlU2hhZGVyKHZlcnRleENvZGUsIGRl
ZmluZXMpLCBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5n
aW5lIl0uX2NvbmNhdGVuYXRlU2hhZGVyKGZyYWdtZW50Q29kZSwgZGVmaW5lcykpOworICAgICAg
ICB0aGlzLm9uQWZ0ZXJTaGFkZXJDb21waWxhdGlvbk9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJz
KHRoaXMpOworICAgICAgICByZXR1cm4gcHJvZ3JhbTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2lu
ZS5wcm90b3R5cGUuX3NldFByb2dyYW0gPSBmdW5jdGlvbiAocHJvZ3JhbSkgeworICAgICAgICBp
ZiAodGhpcy5fY3VycmVudFByb2dyYW0gIT09IHByb2dyYW0pIHsKKyAgICAgICAgICAgIHRoaXMu
X25hdGl2ZS5zZXRQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgdGhpcy5fY3VycmVudFBy
b2dyYW0gPSBwcm9ncmFtOworICAgICAgICB9CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJv
dG90eXBlLl9yZWxlYXNlRWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAvLyBU
T0RPCisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLl9kZWxldGVQaXBlbGluZUNv
bnRleHQgPSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0KSB7CisgICAgICAgIC8vIFRPRE8KKyAg
ICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuZ2V0VW5pZm9ybXMgPSBmdW5jdGlvbiAo
cGlwZWxpbmVDb250ZXh0LCB1bmlmb3Jtc05hbWVzKSB7CisgICAgICAgIHZhciBuYXRpdmVQaXBl
bGluZUNvbnRleHQgPSBwaXBlbGluZUNvbnRleHQ7CisgICAgICAgIHJldHVybiB0aGlzLl9uYXRp
dmUuZ2V0VW5pZm9ybXMobmF0aXZlUGlwZWxpbmVDb250ZXh0Lm5hdGl2ZVByb2dyYW0sIHVuaWZv
cm1zTmFtZXMpOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5iaW5kVW5pZm9y
bUJsb2NrID0gZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCwgYmxvY2tOYW1lLCBpbmRleCkgewor
ICAgICAgICAvLyBUT0RPCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IEltcGxlbWVudGVk
Iik7CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLmJpbmRTYW1wbGVycyA9IGZ1
bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgdmFyIG5hdGl2ZVBpcGVsaW5lQ29udGV4dCA9IGVm
ZmVjdC5nZXRQaXBlbGluZUNvbnRleHQoKTsKKyAgICAgICAgdGhpcy5fc2V0UHJvZ3JhbShuYXRp
dmVQaXBlbGluZUNvbnRleHQubmF0aXZlUHJvZ3JhbSk7CisgICAgICAgIC8vIFRPRE86IHNoYXJl
IHRoaXMgd2l0aCBlbmdpbmU/CisgICAgICAgIHZhciBzYW1wbGVycyA9IGVmZmVjdC5nZXRTYW1w
bGVycygpOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc2FtcGxlcnMubGVu
Z3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgdW5pZm9ybSA9IGVmZmVjdC5nZXRVbmlm
b3JtKHNhbXBsZXJzW2luZGV4XSk7CisgICAgICAgICAgICBpZiAodW5pZm9ybSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuX2JvdW5kVW5pZm9ybXNbaW5kZXhdID0gdW5pZm9ybTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0ID0gbnVsbDsKKyAg
ICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0TWF0cml4ID0gZnVuY3Rpb24gKHVu
aWZvcm0sIG1hdHJpeCkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRpdmUuc2V0TWF0cml4KHVuaWZvcm0s
IG1hdHJpeC50b0FycmF5KCkpOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5n
ZXRSZW5kZXJXaWR0aCA9IGZ1bmN0aW9uICh1c2VTY3JlZW4pIHsKKyAgICAgICAgaWYgKHVzZVNj
cmVlbiA9PT0gdm9pZCAwKSB7IHVzZVNjcmVlbiA9IGZhbHNlOyB9CisgICAgICAgIGlmICghdXNl
U2NyZWVuICYmIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0LndpZHRoOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLl9uYXRpdmUuZ2V0UmVuZGVyV2lkdGgoKTsKKyAgICB9OworICAgIE5hdGl2ZUVu
Z2luZS5wcm90b3R5cGUuZ2V0UmVuZGVySGVpZ2h0ID0gZnVuY3Rpb24gKHVzZVNjcmVlbikgewor
ICAgICAgICBpZiAodXNlU2NyZWVuID09PSB2b2lkIDApIHsgdXNlU2NyZWVuID0gZmFsc2U7IH0K
KyAgICAgICAgaWYgKCF1c2VTY3JlZW4gJiYgdGhpcy5fY3VycmVudFJlbmRlclRhcmdldCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQuaGVpZ2h0OworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9uYXRpdmUuZ2V0UmVuZGVySGVpZ2h0KCk7Cisg
ICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnNldFZpZXdwb3J0ID0gZnVuY3Rpb24g
KHZpZXdwb3J0LCByZXF1aXJlZFdpZHRoLCByZXF1aXJlZEhlaWdodCkgeworICAgICAgICAvLyBU
T0RPOiBJbXBsZW1lbnQuCisgICAgICAgIHRoaXMuX2NhY2hlZFZpZXdwb3J0ID0gdmlld3BvcnQ7
CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24g
KGN1bGxpbmcsIHpPZmZzZXQsIGZvcmNlLCByZXZlcnNlU2lkZSkgeworICAgICAgICBpZiAoek9m
ZnNldCA9PT0gdm9pZCAwKSB7IHpPZmZzZXQgPSAwOyB9CisgICAgICAgIGlmIChyZXZlcnNlU2lk
ZSA9PT0gdm9pZCAwKSB7IHJldmVyc2VTaWRlID0gZmFsc2U7IH0KKyAgICAgICAgdGhpcy5fbmF0
aXZlLnNldFN0YXRlKGN1bGxpbmcsIHpPZmZzZXQsIHJldmVyc2VTaWRlKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldCB0aGUgeiBvZmZzZXQgdG8gYXBwbHkgdG8gY3VycmVudCByZW5kZXJp
bmcKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5lcyB0aGUgb2Zmc2V0IHRvIGFwcGx5CisgICAg
ICovCisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5zZXRaT2Zmc2V0ID0gZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgIHRoaXMuX25hdGl2ZS5zZXRaT2Zmc2V0KHZhbHVlKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHpPZmZzZXQKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB6T2Zmc2V0IHN0YXRlCisgICAgICovCisgICAgTmF0
aXZlRW5naW5lLnByb3RvdHlwZS5nZXRaT2Zmc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fbmF0aXZlLmdldFpPZmZzZXQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEVuYWJsZSBvciBkaXNhYmxlIGRlcHRoIGJ1ZmZlcmluZworICAgICAqIEBwYXJhbSBlbmFibGUg
ZGVmaW5lcyB0aGUgc3RhdGUgdG8gc2V0CisgICAgICovCisgICAgTmF0aXZlRW5naW5lLnByb3Rv
dHlwZS5zZXREZXB0aEJ1ZmZlciA9IGZ1bmN0aW9uIChlbmFibGUpIHsKKyAgICAgICAgdGhpcy5f
bmF0aXZlLnNldERlcHRoVGVzdChlbmFibGUpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0
cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBkZXB0aCB3cml0aW5nIGlzIGVuYWJsZWQKKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCBkZXB0aCB3cml0aW5nIHN0YXRlCisgICAgICovCisgICAg
TmF0aXZlRW5naW5lLnByb3RvdHlwZS5nZXREZXB0aFdyaXRlID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5fbmF0aXZlLmdldERlcHRoV3JpdGUoKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIGRlcHRoIHdyaXRpbmcKKyAgICAgKiBAcGFyYW0g
ZW5hYmxlIGRlZmluZXMgdGhlIHN0YXRlIHRvIHNldAorICAgICAqLworICAgIE5hdGl2ZUVuZ2lu
ZS5wcm90b3R5cGUuc2V0RGVwdGhXcml0ZSA9IGZ1bmN0aW9uIChlbmFibGUpIHsKKyAgICAgICAg
dGhpcy5fbmF0aXZlLnNldERlcHRoV3JpdGUoZW5hYmxlKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEVuYWJsZSBvciBkaXNhYmxlIGNvbG9yIHdyaXRpbmcKKyAgICAgKiBAcGFyYW0gZW5hYmxl
IGRlZmluZXMgdGhlIHN0YXRlIHRvIHNldAorICAgICAqLworICAgIE5hdGl2ZUVuZ2luZS5wcm90
b3R5cGUuc2V0Q29sb3JXcml0ZSA9IGZ1bmN0aW9uIChlbmFibGUpIHsKKyAgICAgICAgdGhpcy5f
bmF0aXZlLnNldENvbG9yV3JpdGUoZW5hYmxlKTsKKyAgICAgICAgdGhpcy5fY29sb3JXcml0ZSA9
IGVuYWJsZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRp
bmcgaWYgY29sb3Igd3JpdGluZyBpcyBlbmFibGVkCisgICAgICogQHJldHVybnMgdGhlIGN1cnJl
bnQgY29sb3Igd3JpdGluZyBzdGF0ZQorICAgICAqLworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5
cGUuZ2V0Q29sb3JXcml0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Nv
bG9yV3JpdGU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFscGhhIGNvbnN0YW50cyB1
c2VkIGJ5IHNvbWUgYWxwaGEgYmxlbmRpbmcgbW9kZXMKKyAgICAgKiBAcGFyYW0gciBkZWZpbmVz
IHRoZSByZWQgY29tcG9uZW50CisgICAgICogQHBhcmFtIGcgZGVmaW5lcyB0aGUgZ3JlZW4gY29t
cG9uZW50CisgICAgICogQHBhcmFtIGIgZGVmaW5lcyB0aGUgYmx1ZSBjb21wb25lbnQKKyAgICAg
KiBAcGFyYW0gYSBkZWZpbmVzIHRoZSBhbHBoYSBjb21wb25lbnQKKyAgICAgKi8KKyAgICBOYXRp
dmVFbmdpbmUucHJvdG90eXBlLnNldEFscGhhQ29uc3RhbnRzID0gZnVuY3Rpb24gKHIsIGcsIGIs
IGEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nIGFscGhhIGJsZW5kIGNvbnN0
YW50IGNvbG9yIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIik7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSBjdXJyZW50IGFscGhhIG1vZGUKKyAgICAgKiBAcGFyYW0gbW9kZSBkZWZpbmVz
IHRoZSBtb2RlIHRvIHVzZSAob25lIG9mIHRoZSBCQUJZTE9OLkVuZ2luZS5BTFBIQV9YWFgpCisg
ICAgICogQHBhcmFtIG5vRGVwdGhXcml0ZUNoYW5nZSBkZWZpbmVzIGlmIGRlcHRoIHdyaXRpbmcg
c3RhdGUgc2hvdWxkIHJlbWFpbnMgdW5jaGFuZ2VkIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAq
IEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL3Jlc291cmNlcy90cmFuc3BhcmVuY3lfYW5k
X2hvd19tZXNoZXNfYXJlX3JlbmRlcmVkCisgICAgICovCisgICAgTmF0aXZlRW5naW5lLnByb3Rv
dHlwZS5zZXRBbHBoYU1vZGUgPSBmdW5jdGlvbiAobW9kZSwgbm9EZXB0aFdyaXRlQ2hhbmdlKSB7
CisgICAgICAgIGlmIChub0RlcHRoV3JpdGVDaGFuZ2UgPT09IHZvaWQgMCkgeyBub0RlcHRoV3Jp
dGVDaGFuZ2UgPSBmYWxzZTsgfQorICAgICAgICBpZiAodGhpcy5fYWxwaGFNb2RlID09PSBtb2Rl
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbmF0aXZl
LnNldEJsZW5kTW9kZShtb2RlKTsKKyAgICAgICAgaWYgKCFub0RlcHRoV3JpdGVDaGFuZ2UpIHsK
KyAgICAgICAgICAgIHRoaXMuc2V0RGVwdGhXcml0ZShtb2RlID09PSBfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uQUxQSEFfRElTQUJMRSk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWxwaGFNb2RlID0gbW9kZTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgYWxwaGEgbW9kZQorICAgICAqIEBzZWUgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL3Jlc291cmNlcy90cmFuc3BhcmVuY3lfYW5kX2hvd19tZXNoZXNf
YXJlX3JlbmRlcmVkCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgYWxwaGEgbW9kZQorICAg
ICAqLworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuZ2V0QWxwaGFNb2RlID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYWxwaGFNb2RlOworICAgIH07CisgICAgTmF0aXZl
RW5naW5lLnByb3RvdHlwZS5zZXRJbnRBcnJheSA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkg
eworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLl9uYXRpdmUuc2V0SW50QXJyYXkodW5pZm9ybSwgYXJyYXkpOworICAg
IH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5zZXRJbnRBcnJheTIgPSBmdW5jdGlvbiAo
dW5pZm9ybSwgYXJyYXkpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbmF0aXZlLnNldEludEFycmF5Mih1bmlm
b3JtLCBhcnJheSk7CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnNldEludEFy
cmF5MyA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVuaWZvcm0p
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRpdmUu
c2V0SW50QXJyYXkzKHVuaWZvcm0sIGFycmF5KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5w
cm90b3R5cGUuc2V0SW50QXJyYXk0ID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5KSB7CisgICAg
ICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX25hdGl2ZS5zZXRJbnRBcnJheTQodW5pZm9ybSwgYXJyYXkpOworICAgIH07Cisg
ICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5zZXRGbG9hdEFycmF5ID0gZnVuY3Rpb24gKHVuaWZv
cm0sIGFycmF5KSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX25hdGl2ZS5zZXRGbG9hdEFycmF5KHVuaWZvcm0s
IGFycmF5KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXRBcnJh
eTIgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbmF0aXZlLnNl
dEZsb2F0QXJyYXkyKHVuaWZvcm0sIGFycmF5KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5w
cm90b3R5cGUuc2V0RmxvYXRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAg
ICAgICAgaWYgKCF1bmlmb3JtKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fbmF0aXZlLnNldEZsb2F0QXJyYXkzKHVuaWZvcm0sIGFycmF5KTsKKyAgICB9
OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTQgPSBmdW5jdGlvbiAo
dW5pZm9ybSwgYXJyYXkpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbmF0aXZlLnNldEZsb2F0QXJyYXk0KHVu
aWZvcm0sIGFycmF5KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0QXJy
YXkgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbmF0aXZlLnNl
dEZsb2F0QXJyYXkodW5pZm9ybSwgYXJyYXkpOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnBy
b3RvdHlwZS5zZXRBcnJheTIgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICAgICAg
aWYgKCF1bmlmb3JtKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fbmF0aXZlLnNldEZsb2F0QXJyYXkyKHVuaWZvcm0sIGFycmF5KTsKKyAgICB9OworICAg
IE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFy
cmF5KSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX25hdGl2ZS5zZXRGbG9hdEFycmF5Myh1bmlmb3JtLCBhcnJh
eSk7CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnNldEFycmF5NCA9IGZ1bmN0
aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRpdmUuc2V0RmxvYXRBcnJh
eTQodW5pZm9ybSwgYXJyYXkpOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5z
ZXRNYXRyaWNlcyA9IGZ1bmN0aW9uICh1bmlmb3JtLCBtYXRyaWNlcykgeworICAgICAgICBpZiAo
IXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9uYXRpdmUuc2V0TWF0cmljZXModW5pZm9ybSwgbWF0cmljZXMpOworICAgIH07CisgICAgTmF0
aXZlRW5naW5lLnByb3RvdHlwZS5zZXRNYXRyaXgzeDMgPSBmdW5jdGlvbiAodW5pZm9ybSwgbWF0
cml4KSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX25hdGl2ZS5zZXRNYXRyaXgzeDModW5pZm9ybSwgbWF0cml4
KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0TWF0cml4MngyID0gZnVu
Y3Rpb24gKHVuaWZvcm0sIG1hdHJpeCkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRpdmUuc2V0TWF0cml4
MngyKHVuaWZvcm0sIG1hdHJpeCk7CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBl
LnNldEZsb2F0ID0gZnVuY3Rpb24gKHVuaWZvcm0sIHZhbHVlKSB7CisgICAgICAgIGlmICghdW5p
Zm9ybSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX25h
dGl2ZS5zZXRGbG9hdCh1bmlmb3JtLCB2YWx1ZSk7CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUu
cHJvdG90eXBlLnNldEZsb2F0MiA9IGZ1bmN0aW9uICh1bmlmb3JtLCB4LCB5KSB7CisgICAgICAg
IGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX25hdGl2ZS5zZXRGbG9hdDIodW5pZm9ybSwgeCwgeSk7CisgICAgfTsKKyAgICBOYXRp
dmVFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0MyA9IGZ1bmN0aW9uICh1bmlmb3JtLCB4LCB5LCB6
KSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX25hdGl2ZS5zZXRGbG9hdDModW5pZm9ybSwgeCwgeSwgeik7Cisg
ICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnNldEJvb2wgPSBmdW5jdGlvbiAodW5p
Zm9ybSwgYm9vbCkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRpdmUuc2V0Qm9vbCh1bmlmb3JtLCBib29s
KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXQ0ID0gZnVuY3Rp
b24gKHVuaWZvcm0sIHgsIHksIHosIHcpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbmF0aXZlLnNldEZsb2F0
NCh1bmlmb3JtLCB4LCB5LCB6LCB3KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5
cGUuc2V0Q29sb3IzID0gZnVuY3Rpb24gKHVuaWZvcm0sIGNvbG9yMykgeworICAgICAgICBpZiAo
IXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9uYXRpdmUuc2V0RmxvYXQzKHVuaWZvcm0sIGNvbG9yMy5yLCBjb2xvcjMuZywgY29sb3IzLmIp
OworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5zZXRDb2xvcjQgPSBmdW5jdGlv
biAodW5pZm9ybSwgY29sb3IzLCBhbHBoYSkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRpdmUuc2V0Rmxv
YXQ0KHVuaWZvcm0sIGNvbG9yMy5yLCBjb2xvcjMuZywgY29sb3IzLmIsIGFscGhhKTsKKyAgICB9
OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUud2lwZUNhY2hlcyA9IGZ1bmN0aW9uIChicnV0
ZUZvcmNlKSB7CisgICAgICAgIGlmICh0aGlzLnByZXZlbnRDYWNoZVdpcGVCZXR3ZWVuRnJhbWVz
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5yZXNldFRl
eHR1cmVDYWNoZSgpOworICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0ID0gbnVsbDsKKyAgICAg
ICAgaWYgKGJydXRlRm9yY2UpIHsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQcm9ncmFtID0g
bnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3N0ZW5jaWxTdGF0ZS5yZXNldCgpOworICAgICAgICAg
ICAgdGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUucmVzZXQoKTsKKyAgICAgICAgICAgIHRoaXMuX2Fs
cGhhU3RhdGUucmVzZXQoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYWNoZWRWZXJ0ZXhC
dWZmZXJzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2FjaGVkSW5kZXhCdWZmZXIgPSBudWxsOwor
ICAgICAgICB0aGlzLl9jYWNoZWRFZmZlY3RGb3JWZXJ0ZXhCdWZmZXJzID0gbnVsbDsKKyAgICB9
OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuX2NyZWF0ZVRleHR1cmUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiB0aGlzLl9uYXRpdmUuY3JlYXRlVGV4dHVyZSgpOworICAgIH07
CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5fZGVsZXRlVGV4dHVyZSA9IGZ1bmN0aW9uICh0
ZXh0dXJlKSB7CisgICAgICAgIHRoaXMuX25hdGl2ZS5kZWxldGVUZXh0dXJlKHRleHR1cmUpOwor
ICAgIH07CisgICAgLy8gVE9ETzogUmVmYWN0b3IgdG8gc2hhcmUgbW9yZSBsb2dpYyB3aXRoIGJh
Ynlsb24uZW5naW5lLnRzIHZlcnNpb24uCisgICAgLyoqCisgICAgICogVXN1YWxseSBjYWxsZWQg
ZnJvbSBCQUJZTE9OLlRleHR1cmUudHMuCisgICAgICogUGFzc2VkIGluZm9ybWF0aW9uIHRvIGNy
ZWF0ZSBhIFdlYkdMVGV4dHVyZQorICAgICAqIEBwYXJhbSB1cmxBcmcgZGVmaW5lcyBhIHZhbHVl
IHdoaWNoIGNvbnRhaW5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAqICogQSBjb252ZW50
aW9uYWwgaHR0cCBVUkwsIGUuZy4gJ2h0dHA6Ly8uLi4nIG9yICdmaWxlOi8vLi4uJworICAgICAq
ICogQSBiYXNlNjQgc3RyaW5nIG9mIGluLWxpbmUgdGV4dHVyZSBkYXRhLCBlLmcuICdkYXRhOmlt
YWdlL2pwZztiYXNlNjQsLy4uLicKKyAgICAgKiAqIEFuIGluZGljYXRvciB0aGF0IGRhdGEgYmVp
bmcgcGFzc2VkIHVzaW5nIHRoZSBidWZmZXIgcGFyYW1ldGVyLCBlLmcuICdkYXRhOm15dGV4dHVy
ZS5qcGcnCisgICAgICogQHBhcmFtIG5vTWlwbWFwIGRlZmluZXMgYSBib29sZWFuIGluZGljYXRp
bmcgdGhhdCBubyBtaXBtYXBzIHNoYWxsIGJlIGdlbmVyYXRlZC4gIElnbm9yZWQgZm9yIGNvbXBy
ZXNzZWQgdGV4dHVyZXMuICBUaGV5IG11c3QgYmUgaW4gdGhlIGZpbGUKKyAgICAgKiBAcGFyYW0g
aW52ZXJ0WSB3aGVuIHRydWUsIGltYWdlIGlzIGZsaXBwZWQgd2hlbiBsb2FkZWQuICBZb3UgcHJv
YmFibHkgd2FudCB0cnVlLiBJZ25vcmVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzLiAgTXVzdCBi
ZSBmbGlwcGVkIGluIHRoZSBmaWxlCisgICAgICogQHBhcmFtIHNjZW5lIG5lZWRlZCBmb3IgbG9h
ZGluZyB0byB0aGUgY29ycmVjdCBzY2VuZQorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgbW9k
ZSB3aXRoIHNob3VsZCBiZSB1c2VkIHNhbXBsZSAvIGFjY2VzcyB0aGUgdGV4dHVyZSAoRGVmYXVs
dDogQkFCWUxPTi5UZXh0dXJlLlRSSUxJTkVBUl9TQU1QTElOR01PREUpCisgICAgICogQHBhcmFt
IG9uTG9hZCBvcHRpb25hbCBjYWxsYmFjayB0byBiZSBjYWxsZWQgdXBvbiBzdWNjZXNzZnVsIGNv
bXBsZXRpb24KKyAgICAgKiBAcGFyYW0gb25FcnJvciBvcHRpb25hbCBjYWxsYmFjayB0byBiZSBj
YWxsZWQgdXBvbiBmYWlsdXJlCisgICAgICogQHBhcmFtIGJ1ZmZlciBhIHNvdXJjZSBvZiBhIGZp
bGUgcHJldmlvdXNseSBmZXRjaGVkIGFzIGVpdGhlciBhIGJhc2U2NCBzdHJpbmcsIGFuIEFycmF5
QnVmZmVyIChjb21wcmVzc2VkIG9yIGltYWdlIGZvcm1hdCksIG9yIGEgQmxvYgorICAgICAqIEBw
YXJhbSBmYWxsYmFjayBhbiBpbnRlcm5hbCBhcmd1bWVudCBpbiBjYXNlIHRoZSBmdW5jdGlvbiBt
dXN0IGJlIGNhbGxlZCBhZ2FpbiwgZHVlIHRvIGV0YzEgbm90IGhhdmluZyBhbHBoYSBjYXBhYmls
aXRpZXMKKyAgICAgKiBAcGFyYW0gZm9ybWF0IGludGVybmFsIGZvcm1hdC4gIERlZmF1bHQ6IFJH
QiB3aGVuIGV4dGVuc2lvbiBpcyAnLmpwZycgZWxzZSBSR0JBLiAgSWdub3JlZCBmb3IgY29tcHJl
c3NlZCB0ZXh0dXJlcworICAgICAqIEBwYXJhbSBmb3JjZWRFeHRlbnNpb24gZGVmaW5lcyB0aGUg
ZXh0ZW5zaW9uIHRvIHVzZSB0byBwaWNrIHRoZSByaWdodCBsb2FkZXIKKyAgICAgKiBAcmV0dXJu
cyBhIEludGVybmFsVGV4dHVyZSBmb3IgYXNzaWdubWVudCBiYWNrIGludG8gQkFCWUxPTi5UZXh0
dXJlCisgICAgICovCisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5jcmVhdGVUZXh0dXJlID0g
ZnVuY3Rpb24gKHVybEFyZywgbm9NaXBtYXAsIGludmVydFksIHNjZW5lLCBzYW1wbGluZ01vZGUs
IG9uTG9hZCwgb25FcnJvciwgYnVmZmVyLCBmYWxsYmFjaywgZm9ybWF0LCBmb3JjZWRFeHRlbnNp
b24pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHNhbXBsaW5nTW9k
ZSA9PT0gdm9pZCAwKSB7IHNhbXBsaW5nTW9kZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01P
REU7IH0KKyAgICAgICAgaWYgKG9uTG9hZCA9PT0gdm9pZCAwKSB7IG9uTG9hZCA9IG51bGw7IH0K
KyAgICAgICAgaWYgKG9uRXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbnVsbDsgfQorICAg
ICAgICBpZiAoYnVmZmVyID09PSB2b2lkIDApIHsgYnVmZmVyID0gbnVsbDsgfQorICAgICAgICBp
ZiAoZmFsbGJhY2sgPT09IHZvaWQgMCkgeyBmYWxsYmFjayA9IG51bGw7IH0KKyAgICAgICAgaWYg
KGZvcm1hdCA9PT0gdm9pZCAwKSB7IGZvcm1hdCA9IG51bGw7IH0KKyAgICAgICAgaWYgKGZvcmNl
ZEV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IGZvcmNlZEV4dGVuc2lvbiA9IG51bGw7IH0KKyAgICAg
ICAgdmFyIHVybCA9IFN0cmluZyh1cmxBcmcpOyAvLyBhc3NpZ24gYSBuZXcgc3RyaW5nLCBzbyB0
aGF0IHRoZSBvcmlnaW5hbCBpcyBzdGlsbCBhdmFpbGFibGUgaW4gY2FzZSBvZiBmYWxsYmFjawor
ICAgICAgICB2YXIgZnJvbURhdGEgPSB1cmwuc3Vic3RyKDAsIDUpID09PSAiZGF0YToiOworICAg
ICAgICB2YXIgZnJvbUJsb2IgPSB1cmwuc3Vic3RyKDAsIDUpID09PSAiYmxvYjoiOworICAgICAg
ICB2YXIgaXNCYXNlNjQgPSBmcm9tRGF0YSAmJiB1cmwuaW5kZXhPZigiYmFzZTY0IikgIT09IC0x
OworICAgICAgICB2YXIgdGV4dHVyZSA9IGZhbGxiYWNrID8gZmFsbGJhY2sgOiBuZXcgX01hdGVy
aWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siSW50ZXJuYWxUZXh0dXJlIl0odGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFU
QVNPVVJDRV9VUkwpOworICAgICAgICAvLyBlc3RhYmxpc2ggdGhlIGZpbGUgZXh0ZW5zaW9uLCBp
ZiBwb3NzaWJsZQorICAgICAgICB2YXIgbGFzdERvdCA9IHVybC5sYXN0SW5kZXhPZignLicpOwor
ICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZm9yY2VkRXh0ZW5zaW9uID8gZm9yY2VkRXh0ZW5zaW9u
IDogKGxhc3REb3QgPiAtMSA/IHVybC5zdWJzdHJpbmcobGFzdERvdCkudG9Mb3dlckNhc2UoKSA6
ICIiKTsKKyAgICAgICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgdGV4dHVy
ZSBmb3JtYXRzLgorICAgICAgICB2YXIgdGV4dHVyZUZvcm1hdEluVXNlID0gbnVsbDsKKyAgICAg
ICAgdmFyIGxvYWRlciA9IG51bGw7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBfRW5n
aW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uX1RleHR1
cmVMb2FkZXJzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGF2YWls
YWJsZUxvYWRlciA9IF9hW19pXTsKKyAgICAgICAgICAgIGlmIChhdmFpbGFibGVMb2FkZXIuY2Fu
TG9hZChleHRlbnNpb24sIHRleHR1cmVGb3JtYXRJblVzZSwgZmFsbGJhY2ssIGlzQmFzZTY0LCBi
dWZmZXIgPyB0cnVlIDogZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgbG9hZGVyID0gYXZhaWxh
YmxlTG9hZGVyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmIChsb2FkZXIpIHsKKyAgICAgICAgICAgIHVybCA9IGxvYWRlci50cmFu
c2Zvcm1VcmwodXJsLCB0ZXh0dXJlRm9ybWF0SW5Vc2UpOworICAgICAgICB9CisgICAgICAgIGlm
IChzY2VuZSkgeworICAgICAgICAgICAgc2NlbmUuX2FkZFBlbmRpbmdEYXRhKHRleHR1cmUpOwor
ICAgICAgICB9CisgICAgICAgIHRleHR1cmUudXJsID0gdXJsOworICAgICAgICB0ZXh0dXJlLmdl
bmVyYXRlTWlwTWFwcyA9ICFub01pcG1hcDsKKyAgICAgICAgdGV4dHVyZS5zYW1wbGluZ01vZGUg
PSBzYW1wbGluZ01vZGU7CisgICAgICAgIHRleHR1cmUuaW52ZXJ0WSA9IGludmVydFk7CisgICAg
ICAgIGlmICghdGhpcy5kb05vdEhhbmRsZUNvbnRleHRMb3N0KSB7CisgICAgICAgICAgICAvLyBL
ZWVwIGEgbGluayB0byB0aGUgYnVmZmVyIG9ubHkgaWYgd2UgcGxhbiB0byBoYW5kbGUgY29udGV4
dCBsb3N0CisgICAgICAgICAgICB0ZXh0dXJlLl9idWZmZXIgPSBidWZmZXI7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIG9uTG9hZE9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgaWYgKG9uTG9hZCAm
JiAhZmFsbGJhY2spIHsKKyAgICAgICAgICAgIG9uTG9hZE9ic2VydmVyID0gdGV4dHVyZS5vbkxv
YWRlZE9ic2VydmFibGUuYWRkKG9uTG9hZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmYWxs
YmFjaykgeworICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxUZXh0dXJlc0NhY2hlLnB1c2godGV4
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9uSW50ZXJuYWxFcnJvciA9IGZ1bmN0aW9u
IChtZXNzYWdlLCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIGlmIChzY2VuZSkgeworICAgICAg
ICAgICAgICAgIHNjZW5lLl9yZW1vdmVQZW5kaW5nRGF0YSh0ZXh0dXJlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBjdXN0b21GYWxsYmFjayA9IGZhbHNlOworICAgICAgICAgICAg
aWYgKGxvYWRlcikgeworICAgICAgICAgICAgICAgIHZhciBmYWxsYmFja1VybCA9IGxvYWRlci5n
ZXRGYWxsYmFja1RleHR1cmVVcmwodXJsLCB0ZXh0dXJlRm9ybWF0SW5Vc2UpOworICAgICAgICAg
ICAgICAgIGlmIChmYWxsYmFja1VybCkgeworICAgICAgICAgICAgICAgICAgICAvLyBBZGQgQmFj
aworICAgICAgICAgICAgICAgICAgICBjdXN0b21GYWxsYmFjayA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLmNyZWF0ZVRleHR1cmUodXJsQXJnLCBub01pcG1hcCwgaW52ZXJ0WSwg
c2NlbmUsIHNhbXBsaW5nTW9kZSwgbnVsbCwgb25FcnJvciwgYnVmZmVyLCB0ZXh0dXJlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWN1c3RvbUZh
bGxiYWNrKSB7CisgICAgICAgICAgICAgICAgaWYgKG9uTG9hZE9ic2VydmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUub25Mb2FkZWRPYnNlcnZhYmxlLnJlbW92ZShvbkxvYWRPYnNl
cnZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChfTWlzY190b29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLlVzZUZhbGxiYWNrVGV4dHVy
ZSkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5jcmVhdGVUZXh0dXJlKF9NaXNjX3Rvb2xz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRvb2xzIl0uZmFsbGJhY2tUZXh0dXJlLCBu
b01pcG1hcCwgaW52ZXJ0WSwgc2NlbmUsIHNhbXBsaW5nTW9kZSwgbnVsbCwgb25FcnJvciwgYnVm
ZmVyLCB0ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAob25FcnJvcikgeworICAgICAgICAgICAgICAgIG9uRXJyb3IobWVzc2FnZSB8fCAi
VW5rbm93biBlcnJvciIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH07Cisg
ICAgICAgIC8vIHByb2Nlc3NpbmcgZm9yIG5vbi1pbWFnZSBmb3JtYXRzCisgICAgICAgIGlmIChs
b2FkZXIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTG9hZGluZyB0ZXh0dXJlcyBm
cm9tIElJbnRlcm5hbFRleHR1cmVMb2FkZXIgbm90IHlldCBpbXBsZW1lbnRlZC4iKTsKKyAgICAg
ICAgICAgIC8vIHZhciBjYWxsYmFjayA9IChkYXRhOiBzdHJpbmcgfCBBcnJheUJ1ZmZlcikgPT4g
eworICAgICAgICAgICAgLy8gICAgIGxvYWRlciEubG9hZERhdGEoZGF0YSBhcyBBcnJheUJ1ZmZl
ciwgdGV4dHVyZSwgKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBsb2FkTWlwbWFwOiBi
b29sZWFuLCBpc0NvbXByZXNzZWQ6IGJvb2xlYW4sIGRvbmU6ICgpID0+IHZvaWQpID0+IHsKKyAg
ICAgICAgICAgIC8vICAgICAgICAgdGhpcy5fcHJlcGFyZVdlYkdMVGV4dHVyZSh0ZXh0dXJlLCBz
Y2VuZSwgd2lkdGgsIGhlaWdodCwgaW52ZXJ0WSwgIWxvYWRNaXBtYXAsIGlzQ29tcHJlc3NlZCwg
KCkgPT4geworICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAvLyAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgLy8gICAgICAgICAgICAgc2FtcGxpbmdNb2RlKTsKKyAg
ICAgICAgICAgIC8vICAgICB9KTsKKyAgICAgICAgICAgIC8vIH0KKyAgICAgICAgICAgIC8vIGlm
ICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyAgICAgdGhpcy5fbG9hZEZpbGUodXJsLCBjYWxs
YmFjaywgdW5kZWZpbmVkLCBzY2VuZSA/IHNjZW5lLmRhdGFiYXNlIDogdW5kZWZpbmVkLCB0cnVl
LCAocmVxdWVzdD86IFhNTEh0dHBSZXF1ZXN0LCBleGNlcHRpb24/OiBhbnkpID0+IHsKKyAgICAg
ICAgICAgIC8vICAgICAgICAgb25JbnRlcm5hbEVycm9yKCJVbmFibGUgdG8gbG9hZCAiICsgKHJl
cXVlc3QgPyByZXF1ZXN0LnJlc3BvbnNlVVJMIDogdXJsLCBleGNlcHRpb24pKTsKKyAgICAgICAg
ICAgIC8vICAgICB9KTsKKyAgICAgICAgICAgIC8vIH0gZWxzZSB7CisgICAgICAgICAgICAvLyAg
ICAgY2FsbGJhY2soYnVmZmVyIGFzIEFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgIC8vIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBvbmxvYWQgPSBmdW5jdGlv
biAoZGF0YSwgcmVzcG9uc2VVUkwpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChkYXRh
KSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJM
b2FkaW5nIHRleHR1cmVzIGZyb20gc3RyaW5nIGRhdGEgbm90IHlldCBpbXBsZW1lbnRlZC4iKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZyb21CbG9iICYmICFfdGhp
cy5kb05vdEhhbmRsZUNvbnRleHRMb3N0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gc3RvcmUgdGhlIGltYWdlIGlmIHdlIG5lZWQgdG8gcmVidWlsZCB0aGUgdGV4dHVyZQor
ICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGEgd2ViZ2wgY29udGV4dCBsb3N0Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUuX2J1ZmZlciA9IGRhdGE7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHZhciB3ZWJHTFRleHR1cmUgPSB0ZXh0dXJlLl93ZWJHTFRl
eHR1cmU7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWJHTFRleHR1cmUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gIHRoaXMucmVzZXRUZXh0dXJlQ2FjaGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHNjZW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2VuZS5fcmVtb3ZlUGVu
ZGluZ0RhdGEodGV4dHVyZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBfdGhpcy5f
bmF0aXZlLmxvYWRUZXh0dXJlKHdlYkdMVGV4dHVyZSwgZGF0YSwgIW5vTWlwbWFwKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW52ZXJ0WSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIlN1cHBvcnQgZm9yIHRleHR1cmVzIHdpdGggaW52ZXJ0ZWQgWSBjb29yZGluYXRlcyBu
b3QgeWV0IGltcGxlbWVudGVkLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAvL3RoaXMuX3VucGFja0ZsaXBZKGludmVydFkgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAoaW52
ZXJ0WSA/IHRydWUgOiBmYWxzZSkpOworICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVdpZHRo
ID0gX3RoaXMuX25hdGl2ZS5nZXRUZXh0dXJlV2lkdGgod2ViR0xUZXh0dXJlKTsKKyAgICAgICAg
ICAgICAgICB0ZXh0dXJlLmJhc2VIZWlnaHQgPSBfdGhpcy5fbmF0aXZlLmdldFRleHR1cmVIZWln
aHQod2ViR0xUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLndpZHRoID0gdGV4dHVy
ZS5iYXNlV2lkdGg7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSB0ZXh0dXJlLmJh
c2VIZWlnaHQ7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB2YXIgZmlsdGVyID0gX3RoaXMuX2dldFNhbXBsaW5nRmlsdGVyKHNhbXBsaW5n
TW9kZSk7CisgICAgICAgICAgICAgICAgX3RoaXMuX25hdGl2ZS5zZXRUZXh0dXJlU2FtcGxpbmco
d2ViR0xUZXh0dXJlLCBmaWx0ZXIpOworICAgICAgICAgICAgICAgIC8vIHRoaXMucmVzZXRUZXh0
dXJlQ2FjaGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2NlbmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKHRleHR1cmUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB0ZXh0dXJlLm9uTG9hZGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNl
cnZlcnModGV4dHVyZSk7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5vbkxvYWRlZE9ic2VydmFi
bGUuY2xlYXIoKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoYnVmZmVyIGluc3Rh
bmNlb2YgQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBvbmxvYWQoYnVmZmVyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhidWZm
ZXIpKSB7CisgICAgICAgICAgICAgICAgb25sb2FkKGJ1ZmZlci5idWZmZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYnVmZmVyIGluc3RhbmNlb2YgQmxvYikgeworICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTG9hZGluZyB0ZXh0dXJlIGZyb20gQmxvYiBu
b3QgeWV0IGltcGxlbWVudGVkLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoIWZyb21EYXRhKSB7CisgICAgICAgICAgICAgICAgdmFyIG9uTG9hZEZpbGVFcnJvciA9IGZ1
bmN0aW9uIChyZXF1ZXN0LCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgb25JbnRl
cm5hbEVycm9yKCJGYWlsZWQgdG8gcmV0cmlldmUgIiArIHVybCArICIuIiwgZXhjZXB0aW9uKTsK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlRvb2xzIl0uTG9hZEZpbGUodXJsLCBvbmxvYWQsIHVuZGVm
aW5lZCwgdW5kZWZpbmVkLCAvKnVzZUFycmF5QnVmZmVyKi8gdHJ1ZSwgb25Mb2FkRmlsZUVycm9y
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG9u
bG9hZChfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLkRl
Y29kZUJhc2U2NChidWZmZXIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGV4dHVyZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBjdWJlIHRl
eHR1cmUKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSB1cmwgd2hlcmUgdGhlIGZp
bGVzIHRvIGxvYWQgaXMgbG9jYXRlZAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBj
dXJyZW50IHNjZW5lCisgICAgICogQHBhcmFtIGZpbGVzIGRlZmluZXMgdGhlIGxpc3Qgb2YgZmls
ZXMgdG8gbG9hZCAoMSBwZXIgZmFjZSkKKyAgICAgKiBAcGFyYW0gbm9NaXBtYXAgZGVmaW5lcyBh
IGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IG5vIG1pcG1hcHMgc2hhbGwgYmUgZ2VuZXJhdGVkIChm
YWxzZSBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBvbkxvYWQgZGVmaW5lcyBhbiBvcHRpb25h
bCBjYWxsYmFjayByYWlzZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyBsb2FkZWQKKyAgICAgKiBAcGFy
YW0gb25FcnJvciBkZWZpbmVzIGFuIG9wdGlvbmFsIGNhbGxiYWNrIHJhaXNlZCBpZiB0aGVyZSBp
cyBhbiBpc3N1ZSB0byBsb2FkIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGZvcm1hdCBkZWZp
bmVzIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEKKyAgICAgKiBAcGFyYW0gZm9yY2VkRXh0ZW5zaW9u
IGRlZmluZXMgdGhlIGV4dGVuc2lvbiB0byB1c2UgdG8gcGljayB0aGUgcmlnaHQgbG9hZGVyCisg
ICAgICogQHBhcmFtIGNyZWF0ZVBvbHlub21pYWxzIGlmIGEgcG9seW5vbWlhbCBzcGhlcmUgc2hv
dWxkIGJlIGNyZWF0ZWQgZm9yIHRoZSBjdWJlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gbG9kU2Nh
bGUgZGVmaW5lcyB0aGUgc2NhbGUgYXBwbGllZCB0byBlbnZpcm9ubWVudCB0ZXh0dXJlLiBUaGlz
IG1hbmFnZXMgdGhlIHJhbmdlIG9mIExPRCBsZXZlbCB1c2VkIGZvciBJQkwgYWNjb3JkaW5nIHRv
IHRoZSByb3VnaG5lc3MKKyAgICAgKiBAcGFyYW0gbG9kT2Zmc2V0IGRlZmluZXMgdGhlIG9mZnNl
dCBhcHBsaWVkIHRvIGVudmlyb25tZW50IHRleHR1cmUuIFRoaXMgbWFuYWdlcyBmaXJzdCBMT0Qg
bGV2ZWwgdXNlZCBmb3IgSUJMIGFjY29yZGluZyB0byB0aGUgcm91Z2huZXNzCisgICAgICogQHBh
cmFtIGZhbGxiYWNrIGRlZmluZXMgdGV4dHVyZSB0byB1c2Ugd2hpbGUgZmFsbGluZyBiYWNrIHdo
ZW4gKGNvbXByZXNzZWQpIHRleHR1cmUgZmlsZSBub3QgZm91bmQuCisgICAgICogQHJldHVybnMg
dGhlIGN1YmUgdGV4dHVyZSBhcyBhbiBJbnRlcm5hbFRleHR1cmUKKyAgICAgKi8KKyAgICBOYXRp
dmVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZUN1YmVUZXh0dXJlID0gZnVuY3Rpb24gKHJvb3RVcmws
IHNjZW5lLCBmaWxlcywgbm9NaXBtYXAsIG9uTG9hZCwgb25FcnJvciwgZm9ybWF0LCBmb3JjZWRF
eHRlbnNpb24sIGNyZWF0ZVBvbHlub21pYWxzLCBsb2RTY2FsZSwgbG9kT2Zmc2V0LCBmYWxsYmFj
aykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAob25Mb2FkID09PSB2
b2lkIDApIHsgb25Mb2FkID0gbnVsbDsgfQorICAgICAgICBpZiAob25FcnJvciA9PT0gdm9pZCAw
KSB7IG9uRXJyb3IgPSBudWxsOyB9CisgICAgICAgIGlmIChmb3JjZWRFeHRlbnNpb24gPT09IHZv
aWQgMCkgeyBmb3JjZWRFeHRlbnNpb24gPSBudWxsOyB9CisgICAgICAgIGlmIChjcmVhdGVQb2x5
bm9taWFscyA9PT0gdm9pZCAwKSB7IGNyZWF0ZVBvbHlub21pYWxzID0gZmFsc2U7IH0KKyAgICAg
ICAgaWYgKGxvZFNjYWxlID09PSB2b2lkIDApIHsgbG9kU2NhbGUgPSAwOyB9CisgICAgICAgIGlm
IChsb2RPZmZzZXQgPT09IHZvaWQgMCkgeyBsb2RPZmZzZXQgPSAwOyB9CisgICAgICAgIGlmIChm
YWxsYmFjayA9PT0gdm9pZCAwKSB7IGZhbGxiYWNrID0gbnVsbDsgfQorICAgICAgICB2YXIgdGV4
dHVyZSA9IGZhbGxiYWNrID8gZmFsbGJhY2sgOiBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19pbnRl
cm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siSW50ZXJuYWxUZXh0dXJl
Il0odGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9DVUJFKTsKKyAg
ICAgICAgdGV4dHVyZS5pc0N1YmUgPSB0cnVlOworICAgICAgICB0ZXh0dXJlLnVybCA9IHJvb3RV
cmw7CisgICAgICAgIHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzID0gIW5vTWlwbWFwOworICAgICAg
ICB0ZXh0dXJlLl9sb2RHZW5lcmF0aW9uU2NhbGUgPSBsb2RTY2FsZTsKKyAgICAgICAgdGV4dHVy
ZS5fbG9kR2VuZXJhdGlvbk9mZnNldCA9IGxvZE9mZnNldDsKKyAgICAgICAgaWYgKCF0aGlzLl9k
b05vdEhhbmRsZUNvbnRleHRMb3N0KSB7CisgICAgICAgICAgICB0ZXh0dXJlLl9leHRlbnNpb24g
PSBmb3JjZWRFeHRlbnNpb247CisgICAgICAgICAgICB0ZXh0dXJlLl9maWxlcyA9IGZpbGVzOwor
ICAgICAgICB9CisgICAgICAgIHZhciBsYXN0RG90ID0gcm9vdFVybC5sYXN0SW5kZXhPZignLicp
OworICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZm9yY2VkRXh0ZW5zaW9uID8gZm9yY2VkRXh0ZW5z
aW9uIDogKGxhc3REb3QgPiAtMSA/IHJvb3RVcmwuc3Vic3RyaW5nKGxhc3REb3QpLnRvTG93ZXJD
YXNlKCkgOiAiIik7CisgICAgICAgIGlmIChleHRlbnNpb24gPT09ICIuZW52IikgeworICAgICAg
ICAgICAgdmFyIG9ubG9hZGRhdGEgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgICAg
IGRhdGEgPSBkYXRhOworICAgICAgICAgICAgICAgIHZhciBpbmZvID0gX01pc2NfZW52aXJvbm1l
bnRUZXh0dXJlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRW52aXJvbm1lbnRU
ZXh0dXJlVG9vbHMiXS5HZXRFbnZJbmZvKGRhdGEpOworICAgICAgICAgICAgICAgIHRleHR1cmUu
d2lkdGggPSBpbmZvLndpZHRoOworICAgICAgICAgICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gaW5m
by53aWR0aDsKKyAgICAgICAgICAgICAgICBfTWlzY19lbnZpcm9ubWVudFRleHR1cmVUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJFbnZpcm9ubWVudFRleHR1cmVUb29scyJdLlVw
bG9hZEVudlNwaGVyaWNhbCh0ZXh0dXJlLCBpbmZvKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5m
by52ZXJzaW9uICE9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
VW5zdXBwb3J0ZWQgYmFieWxvbiBlbnZpcm9ubWVudCBtYXAgdmVyc2lvbiBcIiIgKyBpbmZvLnZl
cnNpb24gKyAiXCIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHNw
ZWN1bGFySW5mbyA9IGluZm8uc3BlY3VsYXI7CisgICAgICAgICAgICAgICAgaWYgKCFzcGVjdWxh
ckluZm8pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3RoaW5nIGVs
c2UgcGFyc2VkIHNvIGZhciIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0
ZXh0dXJlLl9sb2RHZW5lcmF0aW9uU2NhbGUgPSBzcGVjdWxhckluZm8ubG9kR2VuZXJhdGlvblNj
YWxlOworICAgICAgICAgICAgICAgIHZhciBpbWFnZURhdGEgPSBfTWlzY19lbnZpcm9ubWVudFRl
eHR1cmVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJFbnZpcm9ubWVudFRleHR1
cmVUb29scyJdLkNyZWF0ZUltYWdlRGF0YUFycmF5QnVmZmVyVmlld3MoZGF0YSwgaW5mbyk7Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZS5mb3JtYXQgPSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uVEVYVFVSRUZPUk1BVF9SR0JBOworICAgICAg
ICAgICAgICAgIHRleHR1cmUudHlwZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7CisgICAgICAg
ICAgICAgICAgdGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMgPSB0cnVlOworICAgICAgICAgICAgICAg
IHRleHR1cmUuZ2V0RW5naW5lKCkudXBkYXRlVGV4dHVyZVNhbXBsaW5nTW9kZShfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVGV4dHVyZSJd
LlRSSUxJTkVBUl9TQU1QTElOR01PREUsIHRleHR1cmUpOworICAgICAgICAgICAgICAgIHRleHR1
cmUuX2lzUkdCRCA9IHRydWU7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5pbnZlcnRZID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBfdGhpcy5fbmF0aXZlLmxvYWRDdWJlVGV4dHVyZSh0ZXh0dXJl
Ll93ZWJHTFRleHR1cmUsIGltYWdlRGF0YSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgdGV4dHVy
ZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAob25Mb2FkKSB7CisgICAgICAg
ICAgICAgICAgICAgIG9uTG9hZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID09PSA2KSB7CisgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJNdWx0aS1maWxlIGxvYWRpbmcgbm90IHlldCBzdXBw
b3J0ZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB2YXIgb25JbnRlcm5hbEVycm9yID0gZnVuY3Rpb24gKHJlcXVlc3QsIGV4Y2VwdGlvbikg
eworICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciAmJiByZXF1ZXN0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBvbkVycm9yKHJlcXVlc3Quc3RhdHVzICsgIiAiICsgcmVxdWVzdC5z
dGF0dXNUZXh0LCBleGNlcHRpb24pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICB0aGlzLl9sb2FkRmlsZShyb290VXJsLCBvbmxvYWRk
YXRhLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSwgb25JbnRlcm5hbEVycm9yKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiQ2Fubm90IGxvYWQgY3ViZW1hcDogbm9uLUVOViBmb3JtYXQgbm90IHN1cHBvcnRl
ZC4iKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2FjaGUucHVz
aCh0ZXh0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfTsKKyAgICAvLyBSZXR1
cm5zIGEgTmF0aXZlRmlsdGVyLlhYWFggdmFsdWUuCisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlw
ZS5fZ2V0U2FtcGxpbmdGaWx0ZXIgPSBmdW5jdGlvbiAoc2FtcGxpbmdNb2RlKSB7CisgICAgICAg
IHN3aXRjaCAoc2FtcGxpbmdNb2RlKSB7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX0JJTElORUFS
X1NBTVBMSU5HTU9ERToKKyAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRmlsdGVyLk1JTkxJ
TkVBUl9NQUdMSU5FQVJfTUlQUE9JTlQ7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX1RSSUxJTkVB
Ul9TQU1QTElOR01PREU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUZpbHRlci5NSU5M
SU5FQVJfTUFHTElORUFSX01JUExJTkVBUjsKKyAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2luZSJdLlRFWFRVUkVfTkVBUkVT
VF9TQU1QTElOR01PREU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUZpbHRlci5NSU5Q
T0lOVF9NQUdQT0lOVF9NSVBMSU5FQVI7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX05FQVJFU1Rf
TkVBUkVTVF9NSVBORUFSRVNUOgorICAgICAgICAgICAgICAgIHJldHVybiBOYXRpdmVGaWx0ZXIu
TUlOUE9JTlRfTUFHUE9JTlRfTUlQUE9JTlQ7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX05FQVJF
U1RfTElORUFSX01JUE5FQVJFU1Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUZpbHRl
ci5NSU5MSU5FQVJfTUFHUE9JTlRfTUlQUE9JTlQ7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVz
X2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX05F
QVJFU1RfTElORUFSX01JUExJTkVBUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRmls
dGVyLk1JTkxJTkVBUl9NQUdQT0lOVF9NSVBMSU5FQVI7CisgICAgICAgICAgICBjYXNlIF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJF
X05FQVJFU1RfTElORUFSOgorICAgICAgICAgICAgICAgIHJldHVybiBOYXRpdmVGaWx0ZXIuTUlO
TElORUFSX01BR1BPSU5UX01JUExJTkVBUjsKKyAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2luZSJdLlRFWFRVUkVfTkVBUkVT
VF9ORUFSRVNUOgorICAgICAgICAgICAgICAgIHJldHVybiBOYXRpdmVGaWx0ZXIuTUlOUE9JTlRf
TUFHUE9JTlRfTUlQUE9JTlQ7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX0xJTkVBUl9ORUFSRVNU
X01JUE5FQVJFU1Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUZpbHRlci5NSU5QT0lO
VF9NQUdMSU5FQVJfTUlQUE9JTlQ7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX0xJTkVBUl9ORUFS
RVNUX01JUExJTkVBUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRmlsdGVyLk1JTlBP
SU5UX01BR0xJTkVBUl9NSVBMSU5FQVI7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX0xJTkVBUl9M
SU5FQVI6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUZpbHRlci5NSU5MSU5FQVJfTUFH
TElORUFSX01JUExJTkVBUjsKKyAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfZW5naW5lX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2luZSJdLlRFWFRVUkVfTElORUFSX05FQVJFU1Q6
CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUZpbHRlci5NSU5QT0lOVF9NQUdMSU5FQVJf
TUlQTElORUFSOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc2FtcGxpbmcgbW9kZTogIiArIHNhbXBsaW5nTW9kZSArICIu
Iik7CisgICAgICAgIH0KKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuY3JlYXRl
UmVuZGVyVGFyZ2V0VGV4dHVyZSA9IGZ1bmN0aW9uIChzaXplLCBvcHRpb25zKSB7CisgICAgICAg
IHZhciBmdWxsT3B0aW9ucyA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldENy
ZWF0aW9uT3B0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJSZW5kZXJUYXJnZXRD
cmVhdGlvbk9wdGlvbnMiXSgpOworICAgICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYm
IHR5cGVvZiBvcHRpb25zID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgZnVsbE9wdGlvbnMu
Z2VuZXJhdGVNaXBNYXBzID0gb3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHM7CisgICAgICAgICAgICBm
dWxsT3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyID0gb3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVm
ZmVyID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyOwor
ICAgICAgICAgICAgZnVsbE9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVmZmVyID0gZnVsbE9wdGlv
bnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlciAmJiBvcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlcjsK
KyAgICAgICAgICAgIGZ1bGxPcHRpb25zLnR5cGUgPSBvcHRpb25zLnR5cGUgPT09IHVuZGVmaW5l
ZCA/IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUi
XS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQgOiBvcHRpb25zLnR5cGU7CisgICAgICAgICAgICBm
dWxsT3B0aW9ucy5zYW1wbGluZ01vZGUgPSBvcHRpb25zLnNhbXBsaW5nTW9kZSA9PT0gdW5kZWZp
bmVkID8gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFIDogb3B0aW9ucy5zYW1wbGlu
Z01vZGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmdWxsT3B0aW9u
cy5nZW5lcmF0ZU1pcE1hcHMgPSBvcHRpb25zOworICAgICAgICAgICAgZnVsbE9wdGlvbnMuZ2Vu
ZXJhdGVEZXB0aEJ1ZmZlciA9IHRydWU7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy5nZW5lcmF0
ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGZ1bGxPcHRpb25zLnR5cGUgPSBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uVEVY
VFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICAgICAgZnVsbE9wdGlvbnMuc2FtcGxpbmdN
b2RlID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOworICAgICAgICB9CisgICAg
ICAgIHZhciB0ZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfaW50ZXJuYWxUZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkludGVybmFsVGV4dHVyZSJdKHRoaXMsIF9N
YXRlcmlhbHNfVGV4dHVyZXNfaW50ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkludGVybmFsVGV4dHVyZSJdLkRBVEFTT1VSQ0VfUkVOREVSVEFSR0VUKTsKKyAgICAg
ICAgdmFyIHdpZHRoID0gc2l6ZS53aWR0aCB8fCBzaXplOworICAgICAgICB2YXIgaGVpZ2h0ID0g
c2l6ZS5oZWlnaHQgfHwgc2l6ZTsKKyAgICAgICAgdGV4dHVyZS5fZGVwdGhTdGVuY2lsQnVmZmVy
ID0ge307CisgICAgICAgIHRleHR1cmUuX2ZyYW1lYnVmZmVyID0ge307CisgICAgICAgIHRleHR1
cmUuYmFzZVdpZHRoID0gd2lkdGg7CisgICAgICAgIHRleHR1cmUuYmFzZUhlaWdodCA9IGhlaWdo
dDsKKyAgICAgICAgdGV4dHVyZS53aWR0aCA9IHdpZHRoOworICAgICAgICB0ZXh0dXJlLmhlaWdo
dCA9IGhlaWdodDsKKyAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgdGV4
dHVyZS5zYW1wbGVzID0gMTsKKyAgICAgICAgdGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMgPSBmdWxs
T3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHMgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIHRleHR1cmUu
c2FtcGxpbmdNb2RlID0gZnVsbE9wdGlvbnMuc2FtcGxpbmdNb2RlOworICAgICAgICB0ZXh0dXJl
LnR5cGUgPSBmdWxsT3B0aW9ucy50eXBlOworICAgICAgICB0ZXh0dXJlLl9nZW5lcmF0ZURlcHRo
QnVmZmVyID0gZnVsbE9wdGlvbnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlcjsKKyAgICAgICAgdGV4dHVy
ZS5fZ2VuZXJhdGVTdGVuY2lsQnVmZmVyID0gZnVsbE9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVm
ZmVyID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICB0aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2FjaGUu
cHVzaCh0ZXh0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfTsKKyAgICBOYXRp
dmVFbmdpbmUucHJvdG90eXBlLnVwZGF0ZVRleHR1cmVTYW1wbGluZ01vZGUgPSBmdW5jdGlvbiAo
c2FtcGxpbmdNb2RlLCB0ZXh0dXJlKSB7CisgICAgICAgIGlmICh0ZXh0dXJlLl93ZWJHTFRleHR1
cmUpIHsKKyAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLl9nZXRTYW1wbGluZ0ZpbHRlcihz
YW1wbGluZ01vZGUpOworICAgICAgICAgICAgdGhpcy5fbmF0aXZlLnNldFRleHR1cmVTYW1wbGlu
Zyh0ZXh0dXJlLl93ZWJHTFRleHR1cmUsIGZpbHRlcik7CisgICAgICAgIH0KKyAgICAgICAgdGV4
dHVyZS5zYW1wbGluZ01vZGUgPSBzYW1wbGluZ01vZGU7CisgICAgfTsKKyAgICBOYXRpdmVFbmdp
bmUucHJvdG90eXBlLmJpbmRGcmFtZWJ1ZmZlciA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBmYWNlSW5k
ZXgsIHJlcXVpcmVkV2lkdGgsIHJlcXVpcmVkSGVpZ2h0LCBmb3JjZUZ1bGxzY3JlZW5WaWV3cG9y
dCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJpbmRGcmFtZWJ1ZmZlciBub3QgeWV0IGlt
cGxlbWVudGVkLiIpOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS51bkJpbmRG
cmFtZWJ1ZmZlciA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBkaXNhYmxlR2VuZXJhdGVNaXBNYXBzLCBv
bkJlZm9yZVVuYmluZCkgeworICAgICAgICBpZiAoZGlzYWJsZUdlbmVyYXRlTWlwTWFwcyA9PT0g
dm9pZCAwKSB7IGRpc2FibGVHZW5lcmF0ZU1pcE1hcHMgPSBmYWxzZTsgfQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoInVuQmluZEZyYW1lYnVmZmVyIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIik7Cisg
ICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZUR5bmFtaWNWZXJ0ZXhCdWZm
ZXIgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNyZWF0ZUR5
bmFtaWNWZXJ0ZXhCdWZmZXIgbm90IHlldCBpbXBsZW1lbnRlZC4iKTsKKyAgICB9OworICAgIE5h
dGl2ZUVuZ2luZS5wcm90b3R5cGUudXBkYXRlRHluYW1pY0luZGV4QnVmZmVyID0gZnVuY3Rpb24g
KGluZGV4QnVmZmVyLCBpbmRpY2VzLCBvZmZzZXQpIHsKKyAgICAgICAgaWYgKG9mZnNldCA9PT0g
dm9pZCAwKSB7IG9mZnNldCA9IDA7IH0KKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ1cGRhdGVE
eW5hbWljSW5kZXhCdWZmZXIgbm90IHlldCBpbXBsZW1lbnRlZC4iKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFVwZGF0ZXMgYSBkeW5hbWljIHZlcnRleCBidWZmZXIuCisgICAgICogQHBhcmFt
IHZlcnRleEJ1ZmZlciB0aGUgdmVydGV4IGJ1ZmZlciB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0g
ZGF0YSB0aGUgZGF0YSB1c2VkIHRvIHVwZGF0ZSB0aGUgdmVydGV4IGJ1ZmZlcgorICAgICAqIEBw
YXJhbSBieXRlT2Zmc2V0IHRoZSBieXRlIG9mZnNldCBvZiB0aGUgZGF0YSAob3B0aW9uYWwpCisg
ICAgICogQHBhcmFtIGJ5dGVMZW5ndGggdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBkYXRhIChvcHRp
b25hbCkKKyAgICAgKi8KKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnVwZGF0ZUR5bmFtaWNW
ZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbiAodmVydGV4QnVmZmVyLCBkYXRhLCBieXRlT2Zmc2V0LCBi
eXRlTGVuZ3RoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigidXBkYXRlRHluYW1pY1ZlcnRl
eEJ1ZmZlciBub3QgeWV0IGltcGxlbWVudGVkLiIpOworICAgIH07CisgICAgLy8gVE9ETzogUmVm
YWN0b3IgdG8gc2hhcmUgbW9yZSBsb2dpYyB3aXRoIGJhc2UgRW5naW5lIGltcGxlbWVudGF0aW9u
LgorICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuX3NldFRleHR1cmUgPSBmdW5jdGlvbiAoY2hh
bm5lbCwgdGV4dHVyZSwgaXNQYXJ0T2ZUZXh0dXJlQXJyYXksIGRlcHRoU3RlbmNpbFRleHR1cmUp
IHsKKyAgICAgICAgaWYgKGlzUGFydE9mVGV4dHVyZUFycmF5ID09PSB2b2lkIDApIHsgaXNQYXJ0
T2ZUZXh0dXJlQXJyYXkgPSBmYWxzZTsgfQorICAgICAgICBpZiAoZGVwdGhTdGVuY2lsVGV4dHVy
ZSA9PT0gdm9pZCAwKSB7IGRlcHRoU3RlbmNpbFRleHR1cmUgPSBmYWxzZTsgfQorICAgICAgICB2
YXIgdW5pZm9ybSA9IHRoaXMuX2JvdW5kVW5pZm9ybXNbY2hhbm5lbF07CisgICAgICAgIGlmICgh
dW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IC8vIE5vdCByZWFkeT8KKyAgICAgICAgaWYgKCF0ZXh0dXJlKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fYm91bmRUZXh0dXJlc0NhY2hlW2NoYW5uZWxdICE9IG51bGwpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9hY3RpdmVDaGFubmVsID0gY2hhbm5lbDsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9uYXRpdmUuc2V0VGV4dHVyZSh1bmlmb3JtLCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAvLyBWaWRlbworICAgICAg
ICBpZiAodGV4dHVyZS52aWRlbykgeworICAgICAgICAgICAgdGhpcy5fYWN0aXZlQ2hhbm5lbCA9
IGNoYW5uZWw7CisgICAgICAgICAgICB0ZXh0dXJlLnVwZGF0ZSgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHRleHR1cmUuZGVsYXlMb2FkU3RhdGUgPT09IF9FbmdpbmVzX2VuZ2luZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5ERUxBWUxPQURTVEFURV9OT1RM
T0FERUQpIHsgLy8gRGVsYXkgbG9hZGluZworICAgICAgICAgICAgdGV4dHVyZS5kZWxheUxvYWQo
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW50
ZXJuYWxUZXh0dXJlOworICAgICAgICBpZiAoZGVwdGhTdGVuY2lsVGV4dHVyZSkgeworICAgICAg
ICAgICAgaW50ZXJuYWxUZXh0dXJlID0gdGV4dHVyZS5kZXB0aFN0ZW5jaWxUZXh0dXJlOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRleHR1cmUuaXNSZWFkeSgpKSB7CisgICAgICAgICAg
ICBpbnRlcm5hbFRleHR1cmUgPSB0ZXh0dXJlLmdldEludGVybmFsVGV4dHVyZSgpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHRleHR1cmUuaXNDdWJlKSB7CisgICAgICAgICAgICBpbnRl
cm5hbFRleHR1cmUgPSB0aGlzLmVtcHR5Q3ViZVRleHR1cmU7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAodGV4dHVyZS5pczNEKSB7CisgICAgICAgICAgICBpbnRlcm5hbFRleHR1cmUgPSB0
aGlzLmVtcHR5VGV4dHVyZTNEOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaW50ZXJuYWxUZXh0dXJlID0gdGhpcy5lbXB0eVRleHR1cmU7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fYWN0aXZlQ2hhbm5lbCA9IGNoYW5uZWw7CisgICAgICAgIGlmICghaW50ZXJuYWxU
ZXh0dXJlIHx8CisgICAgICAgICAgICAhaW50ZXJuYWxUZXh0dXJlLl93ZWJHTFRleHR1cmUpIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRp
dmUuc2V0VGV4dHVyZVdyYXBNb2RlKGludGVybmFsVGV4dHVyZS5fd2ViR0xUZXh0dXJlLCB0aGlz
Ll9nZXRBZGRyZXNzTW9kZSh0ZXh0dXJlLndyYXBVKSwgdGhpcy5fZ2V0QWRkcmVzc01vZGUodGV4
dHVyZS53cmFwViksIHRoaXMuX2dldEFkZHJlc3NNb2RlKHRleHR1cmUud3JhcFIpKTsKKyAgICAg
ICAgdGhpcy5fdXBkYXRlQW5pc290cm9waWNMZXZlbCh0ZXh0dXJlKTsKKyAgICAgICAgdGhpcy5f
bmF0aXZlLnNldFRleHR1cmUodW5pZm9ybSwgaW50ZXJuYWxUZXh0dXJlLl93ZWJHTFRleHR1cmUp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8vIFRPRE86IFNoYXJlIG1vcmUg
b2YgdGhpcyBsb2dpYyB3aXRoIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uLgorICAgIC8vIFRPRE86
IFJlbmFtZSB0byBtYXRjaCBuYW1pbmcgaW4gYmFzZSBpbXBsZW1lbnRhdGlvbiBvbmNlIHJlZmFj
dG9yaW5nIGFsbG93cyBkaWZmZXJlbnQgcGFyYW1ldGVycy4KKyAgICBOYXRpdmVFbmdpbmUucHJv
dG90eXBlLl91cGRhdGVBbmlzb3Ryb3BpY0xldmVsID0gZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAg
ICAgICAgdmFyIGludGVybmFsVGV4dHVyZSA9IHRleHR1cmUuZ2V0SW50ZXJuYWxUZXh0dXJlKCk7
CisgICAgICAgIHZhciB2YWx1ZSA9IHRleHR1cmUuYW5pc290cm9waWNGaWx0ZXJpbmdMZXZlbDsK
KyAgICAgICAgaWYgKCFpbnRlcm5hbFRleHR1cmUgfHwgIWludGVybmFsVGV4dHVyZS5fd2ViR0xU
ZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlu
dGVybmFsVGV4dHVyZS5fY2FjaGVkQW5pc290cm9waWNGaWx0ZXJpbmdMZXZlbCAhPT0gdmFsdWUp
IHsKKyAgICAgICAgICAgIHRoaXMuX25hdGl2ZS5zZXRUZXh0dXJlQW5pc290cm9waWNMZXZlbChp
bnRlcm5hbFRleHR1cmUuX3dlYkdMVGV4dHVyZSwgdmFsdWUpOworICAgICAgICAgICAgaW50ZXJu
YWxUZXh0dXJlLl9jYWNoZWRBbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsID0gdmFsdWU7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8vIFJldHVybnMgYSBOYXRpdmVBZGRyZXNzTW9kZS5YWFggdmFs
dWUuCisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5fZ2V0QWRkcmVzc01vZGUgPSBmdW5jdGlv
biAod3JhcE1vZGUpIHsKKyAgICAgICAgc3dpdGNoICh3cmFwTW9kZSkgeworICAgICAgICAgICAg
Y2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5l
Il0uVEVYVFVSRV9XUkFQX0FERFJFU1NNT0RFOgorICAgICAgICAgICAgICAgIHJldHVybiBOYXRp
dmVBZGRyZXNzTW9kZS5XUkFQOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uVEVYVFVSRV9DTEFNUF9BRERSRVNT
TU9ERToKKyAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlQWRkcmVzc01vZGUuQ0xBTVA7Cisg
ICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJFbmdpbmUiXS5URVhUVVJFX01JUlJPUl9BRERSRVNTTU9ERToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTmF0aXZlQWRkcmVzc01vZGUuTUlSUk9SOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgd3JhcCBtb2RlOiAi
ICsgd3JhcE1vZGUgKyAiLiIpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuX2JpbmRUZXh0dXJlID0gZnVuY3Rpb24gKGNo
YW5uZWwsIHRleHR1cmUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJfYmluZFRleHR1cmUg
bm90IGltcGxlbWVudGVkLiIpOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5f
ZGVsZXRlQnVmZmVyID0gZnVuY3Rpb24gKGJ1ZmZlcikgeworICAgICAgICBpZiAoYnVmZmVyLm5h
dGl2ZUluZGV4QnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9uYXRpdmUuZGVsZXRlSW5kZXhC
dWZmZXIoYnVmZmVyLm5hdGl2ZUluZGV4QnVmZmVyKTsKKyAgICAgICAgICAgIGRlbGV0ZSBidWZm
ZXIubmF0aXZlSW5kZXhCdWZmZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1ZmZlci5uYXRp
dmVWZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX25hdGl2ZS5kZWxldGVWZXJ0ZXhC
dWZmZXIoYnVmZmVyLm5hdGl2ZVZlcnRleEJ1ZmZlcik7CisgICAgICAgICAgICBkZWxldGUgYnVm
ZmVyLm5hdGl2ZVZlcnRleEJ1ZmZlcjsKKyAgICAgICAgfQorICAgIH07CisgICAgTmF0aXZlRW5n
aW5lLnByb3RvdHlwZS5yZWxlYXNlRWZmZWN0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8g
VE9ETworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOYXRpdmVFbmdpbmUucHJvdG90
eXBlLl91cGxvYWRDb21wcmVzc2VkRGF0YVRvVGV4dHVyZURpcmVjdGx5ID0gZnVuY3Rpb24gKHRl
eHR1cmUsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkYXRhLCBmYWNlSW5kZXgsIGxv
ZCkgeworICAgICAgICBpZiAoZmFjZUluZGV4ID09PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsg
fQorICAgICAgICBpZiAobG9kID09PSB2b2lkIDApIHsgbG9kID0gMDsgfQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIl91cGxvYWRDb21wcmVzc2VkRGF0YVRvVGV4dHVyZURpcmVjdGx5IG5vdCBp
bXBsZW1lbnRlZC4iKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTmF0aXZlRW5n
aW5lLnByb3RvdHlwZS5fdXBsb2FkRGF0YVRvVGV4dHVyZURpcmVjdGx5ID0gZnVuY3Rpb24gKHRl
eHR1cmUsIGltYWdlRGF0YSwgZmFjZUluZGV4LCBsb2QpIHsKKyAgICAgICAgaWYgKGZhY2VJbmRl
eCA9PT0gdm9pZCAwKSB7IGZhY2VJbmRleCA9IDA7IH0KKyAgICAgICAgaWYgKGxvZCA9PT0gdm9p
ZCAwKSB7IGxvZCA9IDA7IH0KKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJfdXBsb2FkRGF0YVRv
VGV4dHVyZURpcmVjdGx5IG5vdCBpbXBsZW1lbnRlZC4iKTsKKyAgICB9OworICAgIC8qKiBAaGlk
ZGVuICovCisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5fdXBsb2FkQXJyYXlCdWZmZXJWaWV3
VG9UZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGltYWdlRGF0YSwgZmFjZUluZGV4LCBsb2Qp
IHsKKyAgICAgICAgaWYgKGZhY2VJbmRleCA9PT0gdm9pZCAwKSB7IGZhY2VJbmRleCA9IDA7IH0K
KyAgICAgICAgaWYgKGxvZCA9PT0gdm9pZCAwKSB7IGxvZCA9IDA7IH0KKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJfdXBsb2FkQXJyYXlCdWZmZXJWaWV3VG9UZXh0dXJlIG5vdCBpbXBsZW1lbnRl
ZC4iKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTmF0aXZlRW5naW5lLnByb3Rv
dHlwZS5fdXBsb2FkSW1hZ2VUb1RleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgaW1hZ2UsIGZh
Y2VJbmRleCwgbG9kKSB7CisgICAgICAgIGlmIChmYWNlSW5kZXggPT09IHZvaWQgMCkgeyBmYWNl
SW5kZXggPSAwOyB9CisgICAgICAgIGlmIChsb2QgPT09IHZvaWQgMCkgeyBsb2QgPSAwOyB9Cisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiX3VwbG9hZEFycmF5QnVmZmVyVmlld1RvVGV4dHVyZSBu
b3QgaW1wbGVtZW50ZWQuIik7CisgICAgfTsKKyAgICByZXR1cm4gTmF0aXZlRW5naW5lOworfShf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0pKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL251bGxFbmdpbmUudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5lcy9udWxs
RW5naW5lLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogTnVsbEVuZ2luZU9wdGlvbnMsIE51bGxFbmdpbmUgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkg
ey8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIk51bGxFbmdpbmVPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBOdWxsRW5naW5lT3B0aW9uczsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOdWxsRW5naW5lIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBOdWxsRW5naW5lOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIu
L01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0Q3JlYXRpb25P
cHRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25zICov
ICIuL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRDcmVhdGlvbk9wdGlvbnMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMv
VGV4dHVyZXMvaW50ZXJuYWxUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2RhdGFCdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9kYXRhQnVmZmVy
ICovICIuL01lc2hlcy9kYXRhQnVmZmVyLnRzIik7CisKKworCisKKworCisKKy8qKgorICogT3B0
aW9ucyB0byBjcmVhdGUgdGhlIG51bGwgZW5naW5lCisgKi8KK3ZhciBOdWxsRW5naW5lT3B0aW9u
cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBOdWxsRW5naW5l
T3B0aW9ucygpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJlbmRlciB3aWR0aCAoRGVmYXVs
dDogNTEyKQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZW5kZXJXaWR0aCA9IDUxMjsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFJlbmRlciBoZWlnaHQgKERlZmF1bHQ6IDI1NikKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMucmVuZGVySGVpZ2h0ID0gMjU2OworICAgICAgICAvKioKKyAg
ICAgICAgICogVGV4dHVyZSBzaXplIChEZWZhdWx0OiA1MTIpCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLnRleHR1cmVTaXplID0gNTEyOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgZGVs
dGEgdGltZSBiZXR3ZWVuIGZyYW1lcyBzaG91bGQgYmUgY29uc3RhbnQKKyAgICAgICAgICogQHNl
ZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1p
bmlzdGljLWxvY2tzdGVwCisgICAgICAgICAqLworICAgICAgICB0aGlzLmRldGVybWluaXN0aWNM
b2Nrc3RlcCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogTWF4aW11bSBhYm91dCBv
ZiBzdGVwcyBiZXR3ZWVuIGZyYW1lcyAoRGVmYXVsdDogNCkKKyAgICAgICAgICogQHNlZSBodHRw
czovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1pbmlzdGlj
LWxvY2tzdGVwCisgICAgICAgICAqLworICAgICAgICB0aGlzLmxvY2tzdGVwTWF4U3RlcHMgPSA0
OworICAgIH0KKyAgICByZXR1cm4gTnVsbEVuZ2luZU9wdGlvbnM7Cit9KCkpOworCisvKioKKyAq
IFRoZSBudWxsIGVuZ2luZSBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciBoZWFkbGVzcyB2ZXJz
aW9uIG9mIGJhYnlsb24uanMuCisgKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNlcnZlciBzaWRlIHNj
ZW5hcmlvIG9yIGZvciB0ZXN0aW5nIHB1cnBvc2VzCisgKi8KK3ZhciBOdWxsRW5naW5lID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKE51bGxFbmdpbmUsIF9zdXBlcik7CisgICAgZnVu
Y3Rpb24gTnVsbEVuZ2luZShvcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25zID09PSB2b2lk
IDApIHsgb3B0aW9ucyA9IG5ldyBOdWxsRW5naW5lT3B0aW9ucygpOyB9CisgICAgICAgIHZhciBf
dGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG51bGwpIHx8IHRoaXM7CisgICAgICAgIGlmIChvcHRp
b25zLmRldGVybWluaXN0aWNMb2Nrc3RlcCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBv
cHRpb25zLmRldGVybWluaXN0aWNMb2Nrc3RlcCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmIChvcHRpb25zLmxvY2tzdGVwTWF4U3RlcHMgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgb3B0aW9ucy5sb2Nrc3RlcE1heFN0ZXBzID0gNDsKKyAgICAgICAgfQorICAgICAgICBfdGhp
cy5fb3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIC8vIEluaXQgY2FwcworICAgICAgICAvLyBX
ZSBjb25zaWRlciB3ZSBhcmUgb24gYSB3ZWJnbDEgY2FwYWJsZSBkZXZpY2UKKyAgICAgICAgX3Ro
aXMuX2NhcHMgPSBuZXcgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkVuZ2luZUNhcGFiaWxpdGllcyJdKCk7CisgICAgICAgIF90aGlzLl9jYXBzLm1heFRleHR1
cmVzSW1hZ2VVbml0cyA9IDE2OworICAgICAgICBfdGhpcy5fY2Fwcy5tYXhWZXJ0ZXhUZXh0dXJl
SW1hZ2VVbml0cyA9IDE2OworICAgICAgICBfdGhpcy5fY2Fwcy5tYXhUZXh0dXJlU2l6ZSA9IDUx
MjsKKyAgICAgICAgX3RoaXMuX2NhcHMubWF4Q3ViZW1hcFRleHR1cmVTaXplID0gNTEyOworICAg
ICAgICBfdGhpcy5fY2Fwcy5tYXhSZW5kZXJUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAgICAgX3Ro
aXMuX2NhcHMubWF4VmVydGV4QXR0cmlicyA9IDE2OworICAgICAgICBfdGhpcy5fY2Fwcy5tYXhW
YXJ5aW5nVmVjdG9ycyA9IDE2OworICAgICAgICBfdGhpcy5fY2Fwcy5tYXhGcmFnbWVudFVuaWZv
cm1WZWN0b3JzID0gMTY7CisgICAgICAgIF90aGlzLl9jYXBzLm1heFZlcnRleFVuaWZvcm1WZWN0
b3JzID0gMTY7CisgICAgICAgIC8vIEV4dGVuc2lvbnMKKyAgICAgICAgX3RoaXMuX2NhcHMuc3Rh
bmRhcmREZXJpdmF0aXZlcyA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2Fwcy5hc3RjID0gbnVs
bDsKKyAgICAgICAgX3RoaXMuX2NhcHMuczN0YyA9IG51bGw7CisgICAgICAgIF90aGlzLl9jYXBz
LnB2cnRjID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX2NhcHMuZXRjMSA9IG51bGw7CisgICAgICAg
IF90aGlzLl9jYXBzLmV0YzIgPSBudWxsOworICAgICAgICBfdGhpcy5fY2Fwcy50ZXh0dXJlQW5p
c290cm9waWNGaWx0ZXJFeHRlbnNpb24gPSBudWxsOworICAgICAgICBfdGhpcy5fY2Fwcy5tYXhB
bmlzb3Ryb3B5ID0gMDsKKyAgICAgICAgX3RoaXMuX2NhcHMudWludEluZGljZXMgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuX2NhcHMuZnJhZ21lbnREZXB0aFN1cHBvcnRlZCA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5fY2Fwcy5oaWdoUHJlY2lzaW9uU2hhZGVyU3VwcG9ydGVkID0gdHJ1ZTsKKyAg
ICAgICAgX3RoaXMuX2NhcHMuY29sb3JCdWZmZXJGbG9hdCA9IGZhbHNlOworICAgICAgICBfdGhp
cy5fY2Fwcy50ZXh0dXJlRmxvYXQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2NhcHMudGV4dHVy
ZUZsb2F0TGluZWFyRmlsdGVyaW5nID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9jYXBzLnRleHR1
cmVGbG9hdFJlbmRlciA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZs
b2F0ID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9jYXBzLnRleHR1cmVIYWxmRmxvYXRMaW5lYXJG
aWx0ZXJpbmcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2NhcHMudGV4dHVyZUhhbGZGbG9hdFJl
bmRlciA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2Fwcy50ZXh0dXJlTE9EID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLl9jYXBzLmRyYXdCdWZmZXJzRXh0ZW5zaW9uID0gZmFsc2U7CisgICAgICAg
IF90aGlzLl9jYXBzLmRlcHRoVGV4dHVyZUV4dGVuc2lvbiA9IGZhbHNlOworICAgICAgICBfdGhp
cy5fY2Fwcy52ZXJ0ZXhBcnJheU9iamVjdCA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2Fwcy5p
bnN0YW5jZWRBcnJheXMgPSBmYWxzZTsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkxvZygiQmFieWxvbi5qcyB2IiArIF9FbmdpbmVz
X2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmUiXS5WZXJzaW9uICsg
IiAtIE51bGwgZW5naW5lIik7CisgICAgICAgIC8vIFdyYXBwZXJzCisgICAgICAgIHZhciB0aGVD
dXJyZW50R2xvYmFsID0gKHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBl
b2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHdpbmRvdyk7CisgICAgICAgIGlm
ICh0eXBlb2YgVVJMID09PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgdGhlQ3VycmVudEds
b2JhbC5VUkwgPSB7CisgICAgICAgICAgICAgICAgY3JlYXRlT2JqZWN0VVJMOiBmdW5jdGlvbiAo
KSB7IH0sCisgICAgICAgICAgICAgICAgcmV2b2tlT2JqZWN0VVJMOiBmdW5jdGlvbiAoKSB7IH0K
KyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiBCbG9iID09PSAi
dW5kZWZpbmVkIikgeworICAgICAgICAgICAgdGhlQ3VycmVudEdsb2JhbC5CbG9iID0gZnVuY3Rp
b24gKCkgeyB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAg
LyoqCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5p
bWF0aW9ucyNkZXRlcm1pbmlzdGljLWxvY2tzdGVwCisgICAgICovCisgICAgTnVsbEVuZ2luZS5w
cm90b3R5cGUuaXNEZXRlcm1pbmlzdGljTG9ja1N0ZXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLl9vcHRpb25zLmRldGVybWluaXN0aWNMb2Nrc3RlcDsKKyAgICB9OworICAg
IC8qKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9hbmltYXRpb25z
I2RldGVybWluaXN0aWMtbG9ja3N0ZXAgKi8KKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5nZXRM
b2Nrc3RlcE1heFN0ZXBzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fb3B0
aW9ucy5sb2Nrc3RlcE1heFN0ZXBzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBoYXJk
d2FyZSBzY2FsaW5nLCB1c2VkIHRvIHNhdmUgcGVyZm9ybWFuY2UgaWYgbmVlZGVkCisgICAgICog
QHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3NjZW5lb3B0
aW1pemVyCisgICAgICovCisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuZ2V0SGFyZHdhcmVTY2Fs
aW5nTGV2ZWwgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAxLjA7CisgICAgfTsKKyAg
ICBOdWxsRW5naW5lLnByb3RvdHlwZS5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbiAodmVy
dGljZXMpIHsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBfTWVzaGVzX2RhdGFCdWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRGF0YUJ1ZmZlciJdKCk7CisgICAgICAgIGJ1ZmZl
ci5yZWZlcmVuY2VzID0gMTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9OworICAgIE51
bGxFbmdpbmUucHJvdG90eXBlLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24gKGluZGljZXMp
IHsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBfTWVzaGVzX2RhdGFCdWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siRGF0YUJ1ZmZlciJdKCk7CisgICAgICAgIGJ1ZmZlci5yZWZl
cmVuY2VzID0gMTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9OworICAgIE51bGxFbmdp
bmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGNvbG9yLCBiYWNrQnVmZmVyLCBkZXB0aCwg
c3RlbmNpbCkgeworICAgICAgICBpZiAoc3RlbmNpbCA9PT0gdm9pZCAwKSB7IHN0ZW5jaWwgPSBm
YWxzZTsgfQorICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuZ2V0UmVuZGVyV2lkdGgg
PSBmdW5jdGlvbiAodXNlU2NyZWVuKSB7CisgICAgICAgIGlmICh1c2VTY3JlZW4gPT09IHZvaWQg
MCkgeyB1c2VTY3JlZW4gPSBmYWxzZTsgfQorICAgICAgICBpZiAoIXVzZVNjcmVlbiAmJiB0aGlz
Ll9jdXJyZW50UmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVu
dFJlbmRlclRhcmdldC53aWR0aDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fb3B0
aW9ucy5yZW5kZXJXaWR0aDsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLmdldFJl
bmRlckhlaWdodCA9IGZ1bmN0aW9uICh1c2VTY3JlZW4pIHsKKyAgICAgICAgaWYgKHVzZVNjcmVl
biA9PT0gdm9pZCAwKSB7IHVzZVNjcmVlbiA9IGZhbHNlOyB9CisgICAgICAgIGlmICghdXNlU2Ny
ZWVuICYmIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0LmhlaWdodDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdGhpcy5fb3B0aW9ucy5yZW5kZXJIZWlnaHQ7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnBy
b3RvdHlwZS5zZXRWaWV3cG9ydCA9IGZ1bmN0aW9uICh2aWV3cG9ydCwgcmVxdWlyZWRXaWR0aCwg
cmVxdWlyZWRIZWlnaHQpIHsKKyAgICAgICAgdGhpcy5fY2FjaGVkVmlld3BvcnQgPSB2aWV3cG9y
dDsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVNoYWRlclByb2dyYW0g
PSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhDb2RlLCBmcmFnbWVudENvZGUsIGRl
ZmluZXMsIGNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIF9fU1BFQ1RP
Ul9yZWJ1aWxkUHJvZ3JhbTogbnVsbCwKKyAgICAgICAgfTsKKyAgICB9OworICAgIE51bGxFbmdp
bmUucHJvdG90eXBlLmdldFVuaWZvcm1zID0gZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCwgdW5p
Zm9ybXNOYW1lcykgeworICAgICAgICByZXR1cm4gW107CisgICAgfTsKKyAgICBOdWxsRW5naW5l
LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCwgYXR0
cmlidXRlc05hbWVzKSB7CisgICAgICAgIHJldHVybiBbXTsKKyAgICB9OworICAgIE51bGxFbmdp
bmUucHJvdG90eXBlLmJpbmRTYW1wbGVycyA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAg
dGhpcy5fY3VycmVudEVmZmVjdCA9IG51bGw7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3Rv
dHlwZS5lbmFibGVFZmZlY3QgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgIHRoaXMuX2N1
cnJlbnRFZmZlY3QgPSBlZmZlY3Q7CisgICAgICAgIGlmIChlZmZlY3Qub25CaW5kKSB7CisgICAg
ICAgICAgICBlZmZlY3Qub25CaW5kKGVmZmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVm
ZmVjdC5fb25CaW5kT2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgZWZmZWN0Ll9vbkJpbmRPYnNl
cnZhYmxlLm5vdGlmeU9ic2VydmVycyhlZmZlY3QpOworICAgICAgICB9CisgICAgfTsKKyAgICBO
dWxsRW5naW5lLnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChjdWxsaW5nLCB6T2Zmc2V0
LCBmb3JjZSwgcmV2ZXJzZVNpZGUpIHsKKyAgICAgICAgaWYgKHpPZmZzZXQgPT09IHZvaWQgMCkg
eyB6T2Zmc2V0ID0gMDsgfQorICAgICAgICBpZiAocmV2ZXJzZVNpZGUgPT09IHZvaWQgMCkgeyBy
ZXZlcnNlU2lkZSA9IGZhbHNlOyB9CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5z
ZXRJbnRBcnJheSA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgIH07CisgICAgTnVs
bEVuZ2luZS5wcm90b3R5cGUuc2V0SW50QXJyYXkyID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5
KSB7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5zZXRJbnRBcnJheTMgPSBmdW5j
dGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBl
LnNldEludEFycmF5NCA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgIH07CisgICAg
TnVsbEVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXRBcnJheSA9IGZ1bmN0aW9uICh1bmlmb3JtLCBh
cnJheSkgeworICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTIg
PSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJv
dG90eXBlLnNldEZsb2F0QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5KSB7CisgICAg
fTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5zZXRGbG9hdEFycmF5NCA9IGZ1bmN0aW9uICh1
bmlmb3JtLCBhcnJheSkgeworICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuc2V0QXJy
YXkgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUu
cHJvdG90eXBlLnNldEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgIH07
CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuc2V0QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm0s
IGFycmF5KSB7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5zZXRBcnJheTQgPSBm
dW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90
eXBlLnNldE1hdHJpY2VzID0gZnVuY3Rpb24gKHVuaWZvcm0sIG1hdHJpY2VzKSB7CisgICAgfTsK
KyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5zZXRNYXRyaXgzeDMgPSBmdW5jdGlvbiAodW5pZm9y
bSwgbWF0cml4KSB7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5zZXRNYXRyaXgy
eDIgPSBmdW5jdGlvbiAodW5pZm9ybSwgbWF0cml4KSB7CisgICAgfTsKKyAgICBOdWxsRW5naW5l
LnByb3RvdHlwZS5zZXRGbG9hdCA9IGZ1bmN0aW9uICh1bmlmb3JtLCB2YWx1ZSkgeworICAgIH07
CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXQyID0gZnVuY3Rpb24gKHVuaWZvcm0s
IHgsIHkpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0MyA9IGZ1
bmN0aW9uICh1bmlmb3JtLCB4LCB5LCB6KSB7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3Rv
dHlwZS5zZXRCb29sID0gZnVuY3Rpb24gKHVuaWZvcm0sIGJvb2wpIHsKKyAgICB9OworICAgIE51
bGxFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0NCA9IGZ1bmN0aW9uICh1bmlmb3JtLCB4LCB5LCB6
LCB3KSB7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5zZXRBbHBoYU1vZGUgPSBm
dW5jdGlvbiAobW9kZSwgbm9EZXB0aFdyaXRlQ2hhbmdlKSB7CisgICAgICAgIGlmIChub0RlcHRo
V3JpdGVDaGFuZ2UgPT09IHZvaWQgMCkgeyBub0RlcHRoV3JpdGVDaGFuZ2UgPSBmYWxzZTsgfQor
ICAgICAgICBpZiAodGhpcy5fYWxwaGFNb2RlID09PSBtb2RlKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJsZW5kID0gKG1v
ZGUgIT09IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRz
Il0uQUxQSEFfRElTQUJMRSk7CisgICAgICAgIGlmICghbm9EZXB0aFdyaXRlQ2hhbmdlKSB7Cisg
ICAgICAgICAgICB0aGlzLnNldERlcHRoV3JpdGUobW9kZSA9PT0gX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5BTFBIQV9ESVNBQkxFKTsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9hbHBoYU1vZGUgPSBtb2RlOworICAgIH07CisgICAgTnVsbEVu
Z2luZS5wcm90b3R5cGUuYmluZEJ1ZmZlcnMgPSBmdW5jdGlvbiAodmVydGV4QnVmZmVycywgaW5k
ZXhCdWZmZXIsIGVmZmVjdCkgeworICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUud2lw
ZUNhY2hlcyA9IGZ1bmN0aW9uIChicnV0ZUZvcmNlKSB7CisgICAgICAgIGlmICh0aGlzLnByZXZl
bnRDYWNoZVdpcGVCZXR3ZWVuRnJhbWVzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5yZXNldFRleHR1cmVDYWNoZSgpOworICAgICAgICB0aGlzLl9jdXJy
ZW50RWZmZWN0ID0gbnVsbDsKKyAgICAgICAgaWYgKGJydXRlRm9yY2UpIHsKKyAgICAgICAgICAg
IHRoaXMuX2N1cnJlbnRQcm9ncmFtID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3N0ZW5jaWxT
dGF0ZS5yZXNldCgpOworICAgICAgICAgICAgdGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUucmVzZXQo
KTsKKyAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUucmVzZXQoKTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9jYWNoZWRWZXJ0ZXhCdWZmZXJzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2Fj
aGVkSW5kZXhCdWZmZXIgPSBudWxsOworICAgICAgICB0aGlzLl9jYWNoZWRFZmZlY3RGb3JWZXJ0
ZXhCdWZmZXJzID0gbnVsbDsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLmRyYXcg
PSBmdW5jdGlvbiAodXNlVHJpYW5nbGVzLCBpbmRleFN0YXJ0LCBpbmRleENvdW50LCBpbnN0YW5j
ZXNDb3VudCkgeworICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuZHJhd0VsZW1lbnRz
VHlwZSA9IGZ1bmN0aW9uIChmaWxsTW9kZSwgaW5kZXhTdGFydCwgaW5kZXhDb3VudCwgaW5zdGFu
Y2VzQ291bnQpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLmRyYXdBcnJheXNU
eXBlID0gZnVuY3Rpb24gKGZpbGxNb2RlLCB2ZXJ0aWNlc1N0YXJ0LCB2ZXJ0aWNlc0NvdW50LCBp
bnN0YW5jZXNDb3VudCkgeworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOdWxsRW5n
aW5lLnByb3RvdHlwZS5fY3JlYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIHt9OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOdWxsRW5naW5lLnByb3Rv
dHlwZS5fcmVsZWFzZVRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgIH07CisgICAg
TnVsbEVuZ2luZS5wcm90b3R5cGUuY3JlYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICh1cmxBcmcsIG5v
TWlwbWFwLCBpbnZlcnRZLCBzY2VuZSwgc2FtcGxpbmdNb2RlLCBvbkxvYWQsIG9uRXJyb3IsIGJ1
ZmZlciwgZmFsbEJhY2ssIGZvcm1hdCkgeworICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2
b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01PREU7IH0KKyAg
ICAgICAgaWYgKG9uTG9hZCA9PT0gdm9pZCAwKSB7IG9uTG9hZCA9IG51bGw7IH0KKyAgICAgICAg
aWYgKG9uRXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbnVsbDsgfQorICAgICAgICBpZiAo
YnVmZmVyID09PSB2b2lkIDApIHsgYnVmZmVyID0gbnVsbDsgfQorICAgICAgICB2YXIgdGV4dHVy
ZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJJbnRlcm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1
cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJJbnRlcm5h
bFRleHR1cmUiXS5EQVRBU09VUkNFX1VSTCk7CisgICAgICAgIHZhciB1cmwgPSBTdHJpbmcodXJs
QXJnKTsKKyAgICAgICAgdGV4dHVyZS51cmwgPSB1cmw7CisgICAgICAgIHRleHR1cmUuZ2VuZXJh
dGVNaXBNYXBzID0gIW5vTWlwbWFwOworICAgICAgICB0ZXh0dXJlLnNhbXBsaW5nTW9kZSA9IHNh
bXBsaW5nTW9kZTsKKyAgICAgICAgdGV4dHVyZS5pbnZlcnRZID0gaW52ZXJ0WTsKKyAgICAgICAg
dGV4dHVyZS5iYXNlV2lkdGggPSB0aGlzLl9vcHRpb25zLnRleHR1cmVTaXplOworICAgICAgICB0
ZXh0dXJlLmJhc2VIZWlnaHQgPSB0aGlzLl9vcHRpb25zLnRleHR1cmVTaXplOworICAgICAgICB0
ZXh0dXJlLndpZHRoID0gdGhpcy5fb3B0aW9ucy50ZXh0dXJlU2l6ZTsKKyAgICAgICAgdGV4dHVy
ZS5oZWlnaHQgPSB0aGlzLl9vcHRpb25zLnRleHR1cmVTaXplOworICAgICAgICBpZiAoZm9ybWF0
KSB7CisgICAgICAgICAgICB0ZXh0dXJlLmZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgfQorICAg
ICAgICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAgICAgICBpZiAob25Mb2FkKSB7CisgICAg
ICAgICAgICBvbkxvYWQoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pbnRlcm5hbFRleHR1
cmVzQ2FjaGUucHVzaCh0ZXh0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfTsK
KyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5jcmVhdGVSZW5kZXJUYXJnZXRUZXh0dXJlID0gZnVu
Y3Rpb24gKHNpemUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIGZ1bGxPcHRpb25zID0gbmV3IF9N
YXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25zX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlJlbmRlclRhcmdldENyZWF0aW9uT3B0aW9ucyJdKCk7CisgICAg
ICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICJvYmpl
Y3QiKSB7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHMgPSBvcHRpb25z
LmdlbmVyYXRlTWlwTWFwczsKKyAgICAgICAgICAgIGZ1bGxPcHRpb25zLmdlbmVyYXRlRGVwdGhC
dWZmZXIgPSBvcHRpb25zLmdlbmVyYXRlRGVwdGhCdWZmZXIgPT09IHVuZGVmaW5lZCA/IHRydWUg
OiBvcHRpb25zLmdlbmVyYXRlRGVwdGhCdWZmZXI7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy5n
ZW5lcmF0ZVN0ZW5jaWxCdWZmZXIgPSBmdWxsT3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyICYm
IG9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVmZmVyOworICAgICAgICAgICAgZnVsbE9wdGlvbnMu
dHlwZSA9IG9wdGlvbnMudHlwZSA9PT0gdW5kZWZpbmVkID8gX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQg
OiBvcHRpb25zLnR5cGU7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy5zYW1wbGluZ01vZGUgPSBv
cHRpb25zLnNhbXBsaW5nTW9kZSA9PT0gdW5kZWZpbmVkID8gX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElO
R01PREUgOiBvcHRpb25zLnNhbXBsaW5nTW9kZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGZ1bGxPcHRpb25zLmdlbmVyYXRlTWlwTWFwcyA9IG9wdGlvbnM7CisgICAg
ICAgICAgICBmdWxsT3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGZ1bGxPcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA9IGZhbHNlOworICAgICAgICAg
ICAgZnVsbE9wdGlvbnMudHlwZSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICAgICAg
ZnVsbE9wdGlvbnMuc2FtcGxpbmdNb2RlID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01PREU7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19p
bnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siSW50ZXJuYWxUZXh0
dXJlIl0odGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9SRU5ERVJU
QVJHRVQpOworICAgICAgICB2YXIgd2lkdGggPSBzaXplLndpZHRoIHx8IHNpemU7CisgICAgICAg
IHZhciBoZWlnaHQgPSBzaXplLmhlaWdodCB8fCBzaXplOworICAgICAgICB0ZXh0dXJlLl9kZXB0
aFN0ZW5jaWxCdWZmZXIgPSB7fTsKKyAgICAgICAgdGV4dHVyZS5fZnJhbWVidWZmZXIgPSB7fTsK
KyAgICAgICAgdGV4dHVyZS5iYXNlV2lkdGggPSB3aWR0aDsKKyAgICAgICAgdGV4dHVyZS5iYXNl
SGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7CisgICAgICAg
IHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVl
OworICAgICAgICB0ZXh0dXJlLnNhbXBsZXMgPSAxOworICAgICAgICB0ZXh0dXJlLmdlbmVyYXRl
TWlwTWFwcyA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlTWlwTWFwcyA/IHRydWUgOiBmYWxzZTsKKyAg
ICAgICAgdGV4dHVyZS5zYW1wbGluZ01vZGUgPSBmdWxsT3B0aW9ucy5zYW1wbGluZ01vZGU7Cisg
ICAgICAgIHRleHR1cmUudHlwZSA9IGZ1bGxPcHRpb25zLnR5cGU7CisgICAgICAgIHRleHR1cmUu
X2dlbmVyYXRlRGVwdGhCdWZmZXIgPSBmdWxsT3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyOwor
ICAgICAgICB0ZXh0dXJlLl9nZW5lcmF0ZVN0ZW5jaWxCdWZmZXIgPSBmdWxsT3B0aW9ucy5nZW5l
cmF0ZVN0ZW5jaWxCdWZmZXIgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIHRoaXMuX2ludGVybmFs
VGV4dHVyZXNDYWNoZS5wdXNoKHRleHR1cmUpOworICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAg
ICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLnVwZGF0ZVRleHR1cmVTYW1wbGluZ01vZGUg
PSBmdW5jdGlvbiAoc2FtcGxpbmdNb2RlLCB0ZXh0dXJlKSB7CisgICAgICAgIHRleHR1cmUuc2Ft
cGxpbmdNb2RlID0gc2FtcGxpbmdNb2RlOworICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5
cGUuYmluZEZyYW1lYnVmZmVyID0gZnVuY3Rpb24gKHRleHR1cmUsIGZhY2VJbmRleCwgcmVxdWly
ZWRXaWR0aCwgcmVxdWlyZWRIZWlnaHQsIGZvcmNlRnVsbHNjcmVlblZpZXdwb3J0KSB7CisgICAg
ICAgIGlmICh0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICB0aGlzLnVu
QmluZEZyYW1lYnVmZmVyKHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQgPSB0ZXh0dXJlOworICAgICAgICB0aGlz
Ll9jdXJyZW50RnJhbWVidWZmZXIgPSB0ZXh0dXJlLl9NU0FBRnJhbWVidWZmZXIgPyB0ZXh0dXJl
Ll9NU0FBRnJhbWVidWZmZXIgOiB0ZXh0dXJlLl9mcmFtZWJ1ZmZlcjsKKyAgICAgICAgaWYgKHRo
aXMuX2NhY2hlZFZpZXdwb3J0ICYmICFmb3JjZUZ1bGxzY3JlZW5WaWV3cG9ydCkgeworICAgICAg
ICAgICAgdGhpcy5zZXRWaWV3cG9ydCh0aGlzLl9jYWNoZWRWaWV3cG9ydCwgcmVxdWlyZWRXaWR0
aCwgcmVxdWlyZWRIZWlnaHQpOworICAgICAgICB9CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnBy
b3RvdHlwZS51bkJpbmRGcmFtZWJ1ZmZlciA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBkaXNhYmxlR2Vu
ZXJhdGVNaXBNYXBzLCBvbkJlZm9yZVVuYmluZCkgeworICAgICAgICBpZiAoZGlzYWJsZUdlbmVy
YXRlTWlwTWFwcyA9PT0gdm9pZCAwKSB7IGRpc2FibGVHZW5lcmF0ZU1pcE1hcHMgPSBmYWxzZTsg
fQorICAgICAgICB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0ID0gbnVsbDsKKyAgICAgICAgaWYg
KG9uQmVmb3JlVW5iaW5kKSB7CisgICAgICAgICAgICBpZiAodGV4dHVyZS5fTVNBQUZyYW1lYnVm
ZmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEZyYW1lYnVmZmVyID0gdGV4dHVy
ZS5fZnJhbWVidWZmZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvbkJlZm9yZVVuYmlu
ZCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2N1cnJlbnRGcmFtZWJ1ZmZlciA9IG51bGw7
CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5jcmVhdGVEeW5hbWljVmVydGV4QnVm
ZmVyID0gZnVuY3Rpb24gKHZlcnRpY2VzKSB7CisgICAgICAgIHZhciBidWZmZXIgPSBuZXcgX01l
c2hlc19kYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkRhdGFCdWZmZXIi
XSgpOworICAgICAgICBidWZmZXIucmVmZXJlbmNlcyA9IDE7CisgICAgICAgIGJ1ZmZlci5jYXBh
Y2l0eSA9IDE7CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgfTsKKyAgICBOdWxsRW5naW5l
LnByb3RvdHlwZS51cGRhdGVEeW5hbWljVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjYW52
YXMsIGludmVydFksIHByZW11bEFscGhhLCBmb3JtYXQpIHsKKyAgICAgICAgaWYgKHByZW11bEFs
cGhhID09PSB2b2lkIDApIHsgcHJlbXVsQWxwaGEgPSBmYWxzZTsgfQorICAgIH07CisgICAgTnVs
bEVuZ2luZS5wcm90b3R5cGUuYXJlQWxsRWZmZWN0c1JlYWR5ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAg
KiBHZXQgdGhlIGN1cnJlbnQgZXJyb3IgY29kZSBvZiB0aGUgd2ViR0wgY29udGV4dAorICAgICAq
IEByZXR1cm5zIHRoZSBlcnJvciBjb2RlCisgICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5t
b3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2dldEVy
cm9yCisgICAgICovCisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuZ2V0RXJyb3IgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBOdWxsRW5naW5lLnByb3RvdHlwZS5fZ2V0VW5wYWNrQWxpZ25lbWVudCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE51
bGxFbmdpbmUucHJvdG90eXBlLl91bnBhY2tGbGlwWSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
IH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUudXBkYXRlRHluYW1pY0luZGV4QnVmZmVyID0g
ZnVuY3Rpb24gKGluZGV4QnVmZmVyLCBpbmRpY2VzLCBvZmZzZXQpIHsKKyAgICAgICAgaWYgKG9m
ZnNldCA9PT0gdm9pZCAwKSB7IG9mZnNldCA9IDA7IH0KKyAgICB9OworICAgIC8qKgorICAgICAq
IFVwZGF0ZXMgYSBkeW5hbWljIHZlcnRleCBidWZmZXIuCisgICAgICogQHBhcmFtIHZlcnRleEJ1
ZmZlciB0aGUgdmVydGV4IGJ1ZmZlciB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gZGF0YSB0aGUg
ZGF0YSB1c2VkIHRvIHVwZGF0ZSB0aGUgdmVydGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBieXRl
T2Zmc2V0IHRoZSBieXRlIG9mZnNldCBvZiB0aGUgZGF0YSAob3B0aW9uYWwpCisgICAgICogQHBh
cmFtIGJ5dGVMZW5ndGggdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBkYXRhIChvcHRpb25hbCkKKyAg
ICAgKi8KKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS51cGRhdGVEeW5hbWljVmVydGV4QnVmZmVy
ID0gZnVuY3Rpb24gKHZlcnRleEJ1ZmZlciwgdmVydGljZXMsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLl9iaW5kVGV4dHVyZURpcmVj
dGx5ID0gZnVuY3Rpb24gKHRhcmdldCwgdGV4dHVyZSkgeworICAgICAgICBpZiAodGhpcy5fYm91
bmRUZXh0dXJlc0NhY2hlW3RoaXMuX2FjdGl2ZUNoYW5uZWxdICE9PSB0ZXh0dXJlKSB7CisgICAg
ICAgICAgICB0aGlzLl9ib3VuZFRleHR1cmVzQ2FjaGVbdGhpcy5fYWN0aXZlQ2hhbm5lbF0gPSB0
ZXh0dXJlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOdWxsRW5naW5lLnBy
b3RvdHlwZS5fYmluZFRleHR1cmUgPSBmdW5jdGlvbiAoY2hhbm5lbCwgdGV4dHVyZSkgeworICAg
ICAgICBpZiAoY2hhbm5lbCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KDAsIHRleHR1cmUpOworICAgIH07Cisg
ICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuX2RlbGV0ZUJ1ZmZlciA9IGZ1bmN0aW9uIChidWZmZXIp
IHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLnJlbGVhc2VFZmZlY3RzID0gZnVu
Y3Rpb24gKCkgeworICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuZGlzcGxheUxvYWRp
bmdVSSA9IGZ1bmN0aW9uICgpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLmhp
ZGVMb2FkaW5nVUkgPSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIE51bGxFbmdpbmUucHJvdG90eXBlLl91cGxvYWRDb21wcmVzc2VkRGF0YVRvVGV4dHVyZURp
cmVjdGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBkYXRhLCBmYWNlSW5kZXgsIGxvZCkgeworICAgICAgICBpZiAoZmFjZUluZGV4ID09PSB2b2lk
IDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAgICAgICBpZiAobG9kID09PSB2b2lkIDApIHsgbG9k
ID0gMDsgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOdWxsRW5naW5lLnByb3Rv
dHlwZS5fdXBsb2FkRGF0YVRvVGV4dHVyZURpcmVjdGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGlt
YWdlRGF0YSwgZmFjZUluZGV4LCBsb2QpIHsKKyAgICAgICAgaWYgKGZhY2VJbmRleCA9PT0gdm9p
ZCAwKSB7IGZhY2VJbmRleCA9IDA7IH0KKyAgICAgICAgaWYgKGxvZCA9PT0gdm9pZCAwKSB7IGxv
ZCA9IDA7IH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTnVsbEVuZ2luZS5wcm90
b3R5cGUuX3VwbG9hZEFycmF5QnVmZmVyVmlld1RvVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJl
LCBpbWFnZURhdGEsIGZhY2VJbmRleCwgbG9kKSB7CisgICAgICAgIGlmIChmYWNlSW5kZXggPT09
IHZvaWQgMCkgeyBmYWNlSW5kZXggPSAwOyB9CisgICAgICAgIGlmIChsb2QgPT09IHZvaWQgMCkg
eyBsb2QgPSAwOyB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE51bGxFbmdpbmUu
cHJvdG90eXBlLl91cGxvYWRJbWFnZVRvVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpbWFn
ZSwgZmFjZUluZGV4LCBsb2QpIHsKKyAgICAgICAgaWYgKGZhY2VJbmRleCA9PT0gdm9pZCAwKSB7
IGZhY2VJbmRleCA9IDA7IH0KKyAgICAgICAgaWYgKGxvZCA9PT0gdm9pZCAwKSB7IGxvZCA9IDA7
IH0KKyAgICB9OworICAgIHJldHVybiBOdWxsRW5naW5lOworfShfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lIl0pKTsKKworCisvKiBXRUJQQUNLIFZB
UiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi8uLi8u
Li9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyAqLyAiLi4vbm9kZV9tb2R1
bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMiKSkpCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9FbmdpbmVzL3dlYmdwdUVuZ2luZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvd2ViZ3B1RW5naW5lLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBX
ZWJHUFVFbmdpbmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViR1BV
RW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBXZWJHUFVFbmdpbmU7IH0pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGli
LmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9s
b2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0aHMvbWF0aCAqLyAiLi9NYXRocy9tYXRoLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnNjYWxhciAqLyAi
Li9NYXRocy9tYXRoLnNjYWxhci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldENy
ZWF0aW9uT3B0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRlclRhcmdldENyZWF0aW9uT3B0
aW9ucyAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25z
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19pbnRl
cm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9pbnRlcm5hbFRleHR1cmUgKi8gIi4vTWF0
ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFs
cy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbnN0
YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1dlYkdQVS93ZWJncHVDb25zdGFudHMgKi8gIi4v
RW5naW5lcy9XZWJHUFUvd2ViZ3B1Q29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfV2ViR1BVX3dlYmdwdVBpcGVsaW5lQ29u
dGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vV2ViR1BVL3dlYmdwdVBpcGVsaW5lQ29udGV4dCAqLyAiLi9FbmdpbmVzL1dlYkdQVS93
ZWJncHVQaXBlbGluZUNvbnRleHQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVz
aGVzX1dlYkdQVV93ZWJncHVEYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL1dlYkdQVS93ZWJncHVEYXRhQnVm
ZmVyICovICIuL01lc2hlcy9XZWJHUFUvd2ViZ3B1RGF0YUJ1ZmZlci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9XZWJHUFVfd2ViZ3B1U2hhZGVyUHJvY2Vzc29yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vV2ViR1BVL3dl
YmdwdVNoYWRlclByb2Nlc3NvcnMgKi8gIi4vRW5naW5lcy9XZWJHUFUvd2ViZ3B1U2hhZGVyUHJv
Y2Vzc29ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9XZWJHUFVfd2ViZ3B1U2hh
ZGVyUHJvY2Vzc2luZ0NvbnRleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL1dlYkdQVS93ZWJncHVTaGFkZXJQcm9jZXNzaW5nQ29udGV4
dCAqLyAiLi9FbmdpbmVzL1dlYkdQVS93ZWJncHVTaGFkZXJQcm9jZXNzaW5nQ29udGV4dC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAi
Li9NaXNjL3Rvb2xzLnRzIik7CisKKworCisKKworCisKKworCisKKworCisKKworCisKKy8qKgor
ICogVGhlIHdlYiBHUFUgZW5naW5lIGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFdlYkdQVSB2
ZXJzaW9uIG9mIGJhYnlsb24uanMuCisgKi8KK3ZhciBXZWJHUFVFbmdpbmUgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19leHRlbmRzIl0oV2ViR1BVRW5naW5lLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgZ3B1IGVuZ2luZS4KKyAgICAgKiBAcGFy
YW0gY2FudmFzIERlZmluZXMgdGhlIGNhbnZhcyB0byB1c2UgdG8gZGlzcGxheSB0aGUgcmVzdWx0
CisgICAgICogQHBhcmFtIG9wdGlvbnMgRGVmaW5lcyB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhl
IGVuZ2luZSB0byBjcmVhdGUgdGhlIEdQVSBjb250ZXh0IGRlcGVuZGVuY2llcworICAgICAqLwor
ICAgIGZ1bmN0aW9uIFdlYkdQVUVuZ2luZShjYW52YXMsIG9wdGlvbnMpIHsKKyAgICAgICAgaWYg
KG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH0KKyAgICAgICAgdmFyIF90aGlz
ID0gX3N1cGVyLmNhbGwodGhpcywgbnVsbCkgfHwgdGhpczsKKyAgICAgICAgLy8gUGFnZSBMaWZl
IGN5Y2xlIGFuZCBjb25zdGFudHMKKyAgICAgICAgX3RoaXMuX3VwbG9hZEVuY29kZXJEZXNjcmlw
dG9yID0geyBsYWJlbDogInVwbG9hZCIgfTsKKyAgICAgICAgX3RoaXMuX3JlbmRlckVuY29kZXJE
ZXNjcmlwdG9yID0geyBsYWJlbDogInJlbmRlciIgfTsKKyAgICAgICAgX3RoaXMuX2NsZWFyRGVw
dGhWYWx1ZSA9IDE7CisgICAgICAgIF90aGlzLl9jbGVhclN0ZW5jaWxWYWx1ZSA9IDA7CisgICAg
ICAgIF90aGlzLl9kZWZhdWx0U2FtcGxlQ291bnQgPSA0OyAvLyBPbmx5IHN1cHBvcnRlZCB2YWx1
ZSBmb3Igbm93LgorICAgICAgICBfdGhpcy5fc2hhZGVyYyA9IG51bGw7CisgICAgICAgIF90aGlz
Ll9jb21tYW5kQnVmZmVycyA9IFtudWxsLCBudWxsXTsKKyAgICAgICAgLy8gRnJhbWUgQnVmZmVy
IExpZmUgQ3ljbGUgKHJlY3JlYXRlZCBmb3IgZWFjaCByZW5kZXIgdGFyZ2V0IHBhc3MpCisgICAg
ICAgIF90aGlzLl9jdXJyZW50UmVuZGVyUGFzcyA9IG51bGw7CisgICAgICAgIC8vIERyYXdDYWxs
IExpZmUgQ3ljbGUKKyAgICAgICAgLy8gRWZmZWN0IGlzIG9uIHRoZSBwYXJlbnQgY2xhc3MKKyAg
ICAgICAgLy8gcHJvdGVjdGVkIF9jdXJyZW50RWZmZWN0OiBOdWxsYWJsZTxFZmZlY3Q+ID0gbnVs
bDsKKyAgICAgICAgX3RoaXMuX2N1cnJlbnRWZXJ0ZXhCdWZmZXJzID0gbnVsbDsKKyAgICAgICAg
X3RoaXMuX2N1cnJlbnRJbmRleEJ1ZmZlciA9IG51bGw7CisgICAgICAgIF90aGlzLl9fY29sb3JX
cml0ZSA9IHRydWU7CisgICAgICAgIF90aGlzLl91bmlmb3Jtc0J1ZmZlcnMgPSB7fTsKKyAgICAg
ICAgLy8gQ2FjaGVzCisgICAgICAgIF90aGlzLl9jb21waWxlZFNoYWRlcnMgPSB7fTsKKyAgICAg
ICAgLy8gVE9ETyBXRUJHUFUuIFRleHR1cmUgTWFuYWdlbWVudC4gVGVtcG9yYXJ5Li4uCisgICAg
ICAgIF90aGlzLl9kZWNvZGVDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMi
KTsKKyAgICAgICAgX3RoaXMuX2RlY29kZUVuZ2luZSA9IG5ldyBfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0oX3RoaXMuX2RlY29kZUNhbnZhcywg
ZmFsc2UsIHsKKyAgICAgICAgICAgIGFscGhhOiB0cnVlLAorICAgICAgICAgICAgcHJlbXVsdGlw
bGllZEFscGhhOiBmYWxzZSwKKyAgICAgICAgfSwgZmFsc2UpOworICAgICAgICBfdGhpcy5fZnJl
ZXplQ29tbWFuZHMgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2Zyb3plbkNvbW1hbmRzID0gbnVs
bDsKKyAgICAgICAgb3B0aW9ucy5kZXZpY2VEZXNjcmlwdG9yID0gb3B0aW9ucy5kZXZpY2VEZXNj
cmlwdG9yIHx8IHt9OworICAgICAgICBvcHRpb25zLnN3YXBDaGFpbkZvcm1hdCA9IG9wdGlvbnMu
c3dhcENoYWluRm9ybWF0IHx8IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVRleHR1cmVGb3JtYXRfYmdyYTh1
bm9ybTsKKyAgICAgICAgb3B0aW9ucy5hbnRpYWxpYXNpbmcgPSBvcHRpb25zLmFudGlhbGlhc2lu
ZyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuYW50aWFsaWFzaW5nOworICAgICAgICBf
dGhpcy5fZGVjb2RlRW5naW5lLmdldENhcHMoKS50ZXh0dXJlRmxvYXQgPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuX2RlY29kZUVuZ2luZS5nZXRDYXBzKCkudGV4dHVyZUZsb2F0UmVuZGVyID0gZmFs
c2U7CisgICAgICAgIF90aGlzLl9kZWNvZGVFbmdpbmUuZ2V0Q2FwcygpLnRleHR1cmVIYWxmRmxv
YXQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2RlY29kZUVuZ2luZS5nZXRDYXBzKCkudGV4dHVy
ZUhhbGZGbG9hdFJlbmRlciA9IGZhbHNlOworICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uTG9nKCJCYWJ5bG9uLmpzIHYiICsgX0VuZ2lu
ZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdLlZlcnNpb24g
KyAiIC0gV2ViR1BVIGVuZ2luZSIpOworICAgICAgICBpZiAoIW5hdmlnYXRvci5ncHUpIHsKKyAg
ICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dn
ZXIiXS5FcnJvcigiV2ViR1BVIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLiIpOwor
ICAgICAgICAgICAgcmV0dXJuIF90aGlzOworICAgICAgICB9CisgICAgICAgIF90aGlzLl9pc1dl
YkdQVSA9IHRydWU7CisgICAgICAgIF90aGlzLl9zaGFkZXJQbGF0Zm9ybU5hbWUgPSAiV0VCR1BV
IjsKKyAgICAgICAgaWYgKG9wdGlvbnMuZGV0ZXJtaW5pc3RpY0xvY2tzdGVwID09PSB1bmRlZmlu
ZWQpIHsKKyAgICAgICAgICAgIG9wdGlvbnMuZGV0ZXJtaW5pc3RpY0xvY2tzdGVwID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdGlvbnMubG9ja3N0ZXBNYXhTdGVwcyA9PT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICBvcHRpb25zLmxvY2tzdGVwTWF4U3RlcHMgPSA0OworICAg
ICAgICB9CisgICAgICAgIGlmIChvcHRpb25zLmF1ZGlvRW5naW5lID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIG9wdGlvbnMuYXVkaW9FbmdpbmUgPSB0cnVlOworICAgICAgICB9CisgICAg
ICAgIF90aGlzLl9kZXRlcm1pbmlzdGljTG9ja3N0ZXAgPSBvcHRpb25zLmRldGVybWluaXN0aWNM
b2Nrc3RlcDsKKyAgICAgICAgX3RoaXMuX2xvY2tzdGVwTWF4U3RlcHMgPSBvcHRpb25zLmxvY2tz
dGVwTWF4U3RlcHM7CisgICAgICAgIF90aGlzLl9kb05vdEhhbmRsZUNvbnRleHRMb3N0ID0gdHJ1
ZTsKKyAgICAgICAgX3RoaXMuX2NhbnZhcyA9IGNhbnZhczsKKyAgICAgICAgX3RoaXMuX29wdGlv
bnMgPSBvcHRpb25zOworICAgICAgICBfdGhpcy5faGFyZHdhcmVTY2FsaW5nTGV2ZWwgPSAxOwor
ICAgICAgICBfdGhpcy5fbWFpblBhc3NTYW1wbGVDb3VudCA9IG9wdGlvbnMuYW50aWFsaWFzaW5n
ID8gX3RoaXMuX2RlZmF1bHRTYW1wbGVDb3VudCA6IDE7CisgICAgICAgIF90aGlzLl9zaGFyZWRJ
bml0KGNhbnZhcywgISFvcHRpb25zLmRvTm90SGFuZGxlVG91Y2hBY3Rpb24sIG9wdGlvbnMuYXVk
aW9FbmdpbmUpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShXZWJHUFVFbmdpbmUucHJvdG90eXBlLCAic3VwcG9ydHNVbmlmb3JtQnVmZmVy
cyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRpbmcg
dGhhdCB0aGUgZW5naW5lIHN1cHBvcnRzIHVuaWZvcm0gYnVmZmVycworICAgICAgICAgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy93ZWJnbDIjdW5pZm9ybS1idWZmZXIt
b2JqZXRzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6YXRp
b24KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8qKgorICAgICAqIEluaXRpYWxp
emVzIHRoZSBXZWJHUFUgY29udGV4dCBhbmQgZGVwZW5kZW5jaWVzLgorICAgICAqIEBwYXJhbSBz
aGFkZXJjT3B0aW9ucyBEZWZpbmVzIHRoZSBTaGFkZXJDIGNvbXBpbGVyIG9wdGlvbnMgaWYgbmVj
ZXNzYXJ5CisgICAgICogQHJldHVybnMgYSBwcm9taXNlIG5vdGlmeWluZyB0aGUgcmVhZGluZXNz
IG9mIHRoZSBlbmdpbmUuCisgICAgICovCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5pbml0
QXN5bmMgPSBmdW5jdGlvbiAoc2hhZGVyY09wdGlvbnMpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRTaGFkZXJjKHNoYWRlcmNPcHRpb25zKQor
ICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHNoYWRlcmMpIHsKKyAgICAgICAgICAgIF90aGlz
Ll9zaGFkZXJjID0gc2hhZGVyYzsKKyAgICAgICAgICAgIHJldHVybiBuYXZpZ2F0b3IuZ3B1LnJl
cXVlc3RBZGFwdGVyKF90aGlzLl9vcHRpb25zKTsKKyAgICAgICAgfSkKKyAgICAgICAgICAgIC50
aGVuKGZ1bmN0aW9uIChhZGFwdGVyKSB7CisgICAgICAgICAgICBfdGhpcy5fYWRhcHRlciA9IGFk
YXB0ZXI7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2FkYXB0ZXIucmVxdWVzdERldmljZShf
dGhpcy5fb3B0aW9ucy5kZXZpY2VEZXNjcmlwdG9yKTsKKyAgICAgICAgfSkKKyAgICAgICAgICAg
IC50aGVuKGZ1bmN0aW9uIChkZXZpY2UpIHsgcmV0dXJuIF90aGlzLl9kZXZpY2UgPSBkZXZpY2U7
IH0pCisgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5f
aW5pdGlhbGl6ZUxpbWl0cygpOworICAgICAgICAgICAgX3RoaXMuX2luaXRpYWxpemVDb250ZXh0
QW5kU3dhcENoYWluKCk7CisgICAgICAgICAgICAvLyB0aGlzLl9pbml0aWFsaXplTWFpbkF0dGFj
aG1lbnRzKCk7CisgICAgICAgICAgICAvLyBJbml0aWFsaXphdGlvbiBpcyBpbiB0aGUgcmVzaXpl
IDotKQorICAgICAgICAgICAgX3RoaXMucmVzaXplKCk7CisgICAgICAgIH0pCisgICAgICAgICAg
ICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJvcigiQ2FuIG5vdCBjcmVhdGUgV2Vi
R1BVIERldmljZSBhbmQvb3IgY29udGV4dC4iKTsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJvcihlKTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9pbml0U2hhZGVyYyA9IGZ1
bmN0aW9uIChzaGFkZXJjT3B0aW9ucykgeworICAgICAgICBzaGFkZXJjT3B0aW9ucyA9IHNoYWRl
cmNPcHRpb25zIHx8IHt9OworICAgICAgICBzaGFkZXJjT3B0aW9ucyA9IHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXNzaWduIl0oe30sIFdlYkdQVUVuZ2luZS5fc2hhZGVy
Y0RlZmF1bHRPcHRpb25zLCBzaGFkZXJjT3B0aW9ucyk7CisgICAgICAgIGlmIChzaGFkZXJjT3B0
aW9ucy5zaGFkZXJjKSB7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNoYWRl
cmNPcHRpb25zLnNoYWRlcmMpOworICAgICAgICB9CisgICAgICAgIHZhciB3YXNtT3B0aW9ucyA9
IHsKKyAgICAgICAgICAgIHdhc21CaW5hcnlGaWxlOiBzaGFkZXJjT3B0aW9ucy53YXNtUGF0aAor
ICAgICAgICB9OworICAgICAgICBpZiAod2luZG93LlNoYWRlcmMpIHsKKyAgICAgICAgICAgIHJl
dHVybiB3aW5kb3cuU2hhZGVyYyh3YXNtT3B0aW9ucyk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHNoYWRlcmNPcHRpb25zLmpzUGF0aCAmJiBzaGFkZXJjT3B0aW9ucy53YXNtUGF0aCkgeworICAg
ICAgICAgICAgcmV0dXJuIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9f
WyJUb29scyJdLkxvYWRTY3JpcHRBc3luYyhzaGFkZXJjT3B0aW9ucy5qc1BhdGgpCisgICAgICAg
ICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB3aW5k
b3cuU2hhZGVyYyh3YXNtT3B0aW9ucyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoInNoYWRlcmMgaXMgbm90IGF2YWlsYWJsZS4iKTsK
KyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2luaXRpYWxpemVMaW1pdHMgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIC8vIEluaXQgY2FwcworICAgICAgICAvLyBUT0RPIFdFQkdQ
VSBSZWFsIENhcGFiaWxpdHkgY2hlY2sgb25jZSBsaW1pdHMgd2lsbCBiZSB3b3JraW5nLgorICAg
ICAgICB0aGlzLl9jYXBzID0gbmV3IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJFbmdpbmVDYXBhYmlsaXRpZXMiXSgpOworICAgICAgICB0aGlzLl9jYXBzLm1h
eFRleHR1cmVzSW1hZ2VVbml0cyA9IDE2OworICAgICAgICB0aGlzLl9jYXBzLm1heFZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzID0gMTY7CisgICAgICAgIHRoaXMuX2NhcHMubWF4VGV4dHVyZVNpemUg
PSAyMDQ4OworICAgICAgICB0aGlzLl9jYXBzLm1heEN1YmVtYXBUZXh0dXJlU2l6ZSA9IDIwNDg7
CisgICAgICAgIHRoaXMuX2NhcHMubWF4UmVuZGVyVGV4dHVyZVNpemUgPSAyMDQ4OworICAgICAg
ICB0aGlzLl9jYXBzLm1heFZlcnRleEF0dHJpYnMgPSAxNjsKKyAgICAgICAgdGhpcy5fY2Fwcy5t
YXhWYXJ5aW5nVmVjdG9ycyA9IDE2OworICAgICAgICB0aGlzLl9jYXBzLm1heEZyYWdtZW50VW5p
Zm9ybVZlY3RvcnMgPSAxMDI0OworICAgICAgICB0aGlzLl9jYXBzLm1heFZlcnRleFVuaWZvcm1W
ZWN0b3JzID0gMTAyNDsKKyAgICAgICAgLy8gRXh0ZW5zaW9ucworICAgICAgICB0aGlzLl9jYXBz
LnN0YW5kYXJkRGVyaXZhdGl2ZXMgPSB0cnVlOworICAgICAgICB0aGlzLl9jYXBzLmFzdGMgPSBu
dWxsOworICAgICAgICB0aGlzLl9jYXBzLnMzdGMgPSBudWxsOworICAgICAgICB0aGlzLl9jYXBz
LnB2cnRjID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2Fwcy5ldGMxID0gbnVsbDsKKyAgICAgICAg
dGhpcy5fY2Fwcy5ldGMyID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2Fwcy50ZXh0dXJlQW5pc290
cm9waWNGaWx0ZXJFeHRlbnNpb24gPSBudWxsOworICAgICAgICB0aGlzLl9jYXBzLm1heEFuaXNv
dHJvcHkgPSAwOworICAgICAgICB0aGlzLl9jYXBzLnVpbnRJbmRpY2VzID0gdHJ1ZTsKKyAgICAg
ICAgdGhpcy5fY2Fwcy5mcmFnbWVudERlcHRoU3VwcG9ydGVkID0gZmFsc2U7CisgICAgICAgIHRo
aXMuX2NhcHMuaGlnaFByZWNpc2lvblNoYWRlclN1cHBvcnRlZCA9IHRydWU7CisgICAgICAgIHRo
aXMuX2NhcHMuY29sb3JCdWZmZXJGbG9hdCA9IHRydWU7CisgICAgICAgIHRoaXMuX2NhcHMudGV4
dHVyZUZsb2F0ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NhcHMudGV4dHVyZUZsb2F0TGluZWFy
RmlsdGVyaW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NhcHMudGV4dHVyZUZsb2F0UmVuZGVy
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NhcHMudGV4dHVyZUhhbGZGbG9hdCA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl9jYXBzLnRleHR1cmVIYWxmRmxvYXRMaW5lYXJGaWx0ZXJpbmcgPSBmYWxz
ZTsKKyAgICAgICAgdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZsb2F0UmVuZGVyID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMuX2NhcHMudGV4dHVyZUxPRCA9IHRydWU7CisgICAgICAgIHRoaXMuX2NhcHMu
ZHJhd0J1ZmZlcnNFeHRlbnNpb24gPSB0cnVlOworICAgICAgICB0aGlzLl9jYXBzLmRlcHRoVGV4
dHVyZUV4dGVuc2lvbiA9IHRydWU7CisgICAgICAgIHRoaXMuX2NhcHMudmVydGV4QXJyYXlPYmpl
Y3QgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY2Fwcy5pbnN0YW5jZWRBcnJheXMgPSB0cnVlOwor
ICAgICAgICB0aGlzLl9jYXBzLnBhcmFsbGVsU2hhZGVyQ29tcGlsZSA9IG51bGw7CisgICAgfTsK
KyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9pbml0aWFsaXplQ29udGV4dEFuZFN3YXBDaGFp
biA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fY29udGV4dCA9IHRoaXMuX2NhbnZhcy5n
ZXRDb250ZXh0KCdncHUnKTsKKyAgICAgICAgdGhpcy5fc3dhcENoYWluID0gdGhpcy5fY29udGV4
dC5jb25maWd1cmVTd2FwQ2hhaW4oeworICAgICAgICAgICAgZGV2aWNlOiB0aGlzLl9kZXZpY2Us
CisgICAgICAgICAgICBmb3JtYXQ6IHRoaXMuX29wdGlvbnMuc3dhcENoYWluRm9ybWF0LAorICAg
ICAgICAgICAgdXNhZ2U6IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVRleHR1cmVVc2FnZV9PVVRQVVRfQVRU
QUNITUVOVCB8IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVRleHR1cmVVc2FnZV9DT1BZX1NSQywKKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgYXMgV2ViR0wgd2l0aCBk
ZXB0aCBhbmQgc3RlbmNpbCBhdHRhY2htZW50IGZvciB0aGUgYnJvYWRlc3QgQ29tcGF0LgorICAg
IFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2luaXRpYWxpemVNYWluQXR0YWNobWVudHMgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRoaXMuX21haW5UZXh0dXJlRXh0ZW5kcyA9IHsKKyAgICAgICAg
ICAgIHdpZHRoOiB0aGlzLmdldFJlbmRlcldpZHRoKCksCisgICAgICAgICAgICBoZWlnaHQ6IHRo
aXMuZ2V0UmVuZGVySGVpZ2h0KCksCisgICAgICAgICAgICBkZXB0aDogMQorICAgICAgICB9Owor
ICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5hbnRpYWxpYXNpbmcpIHsKKyAgICAgICAgICAgIHZh
ciBtYWluVGV4dHVyZURlc2NyaXB0b3IgPSB7CisgICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5f
bWFpblRleHR1cmVFeHRlbmRzLAorICAgICAgICAgICAgICAgIGFycmF5TGF5ZXJDb3VudDogMSwK
KyAgICAgICAgICAgICAgICBtaXBMZXZlbENvdW50OiAxLAorICAgICAgICAgICAgICAgIHNhbXBs
ZUNvdW50OiB0aGlzLl9tYWluUGFzc1NhbXBsZUNvdW50LAorICAgICAgICAgICAgICAgIGRpbWVu
c2lvbjogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVGV4dHVyZURpbWVuc2lvbl8yZCwKKyAgICAgICAgICAg
ICAgICBmb3JtYXQ6IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVRleHR1cmVGb3JtYXRfYmdyYTh1bm9ybSwK
KyAgICAgICAgICAgICAgICB1c2FnZTogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVGV4dHVyZVVzYWdlX09V
VFBVVF9BVFRBQ0hNRU5ULAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9t
YWluVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX21haW5UZXh0dXJlLmRlc3Ryb3ko
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX21haW5UZXh0dXJlID0gdGhpcy5f
ZGV2aWNlLmNyZWF0ZVRleHR1cmUobWFpblRleHR1cmVEZXNjcmlwdG9yKTsKKyAgICAgICAgICAg
IHRoaXMuX21haW5Db2xvckF0dGFjaG1lbnRzID0gW3sKKyAgICAgICAgICAgICAgICAgICAgYXR0
YWNobWVudDogdGhpcy5fbWFpblRleHR1cmUuY3JlYXRlVmlldygpLAorICAgICAgICAgICAgICAg
ICAgICBsb2FkVmFsdWU6IG5ldyBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJDb2xvcjQiXSgwLCAwLCAwLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgbG9hZE9wOiAi
Y2xlYXIiLAorICAgICAgICAgICAgICAgICAgICBjbGVhckNvbG9yOiBuZXcgX01hdGhzX21hdGhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29sb3I0Il0oMCwgMCwgMCwgMSksCisgICAg
ICAgICAgICAgICAgICAgIHN0b3JlT3A6IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0b3JlT3Bfc3RvcmUK
KyAgICAgICAgICAgICAgICB9XTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHRoaXMuX21haW5Db2xvckF0dGFjaG1lbnRzID0gW3sKKyAgICAgICAgICAgICAgICAgICAg
YXR0YWNobWVudDogdGhpcy5fc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCkuY3JlYXRlRGVm
YXVsdFZpZXcoKSwKKyAgICAgICAgICAgICAgICAgICAgbG9hZFZhbHVlOiBuZXcgX01hdGhzX21h
dGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29sb3I0Il0oMCwgMCwgMCwgMSksCisg
ICAgICAgICAgICAgICAgICAgIGxvYWRPcDogImNsZWFyIiwKKyAgICAgICAgICAgICAgICAgICAg
Y2xlYXJDb2xvcjogbmV3IF9NYXRoc19tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IkNvbG9yNCJdKDAsIDAsIDAsIDEpLAorICAgICAgICAgICAgICAgICAgICBzdG9yZU9wOiBfV2Vi
R1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVD
b25zdGFudHMiXS5HUFVTdG9yZU9wX3N0b3JlCisgICAgICAgICAgICAgICAgfV07CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGRlcHRoVGV4dHVyZURlc2NyaXB0b3IgPSB7CisgICAgICAgICAgICBz
aXplOiB0aGlzLl9tYWluVGV4dHVyZUV4dGVuZHMsCisgICAgICAgICAgICBhcnJheUxheWVyQ291
bnQ6IDEsCisgICAgICAgICAgICBtaXBMZXZlbENvdW50OiAxLAorICAgICAgICAgICAgc2FtcGxl
Q291bnQ6IHRoaXMuX21haW5QYXNzU2FtcGxlQ291bnQsCisgICAgICAgICAgICBkaW1lbnNpb246
IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldl
YkdQVUNvbnN0YW50cyJdLkdQVVRleHR1cmVEaW1lbnNpb25fMmQsCisgICAgICAgICAgICBmb3Jt
YXQ6ICJkZXB0aDMyZmxvYXQtc3RlbmNpbDgiLAorICAgICAgICAgICAgdXNhZ2U6IF9XZWJHUFVf
d2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0
YW50cyJdLkdQVVRleHR1cmVVc2FnZV9PVVRQVVRfQVRUQUNITUVOVAorICAgICAgICB9OworICAg
ICAgICBpZiAodGhpcy5fZGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9kZXB0aFRl
eHR1cmUuZGVzdHJveSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2RlcHRoVGV4dHVyZSA9
IHRoaXMuX2RldmljZS5jcmVhdGVUZXh0dXJlKGRlcHRoVGV4dHVyZURlc2NyaXB0b3IpOworICAg
ICAgICB0aGlzLl9tYWluRGVwdGhBdHRhY2htZW50ID0geworICAgICAgICAgICAgYXR0YWNobWVu
dDogdGhpcy5fZGVwdGhUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCksCisgICAgICAgICAgICBk
ZXB0aExvYWRWYWx1ZTogdGhpcy5fY2xlYXJEZXB0aFZhbHVlLAorICAgICAgICAgICAgZGVwdGhM
b2FkT3A6ICJjbGVhciIsCisgICAgICAgICAgICBjbGVhckRlcHRoOiB0aGlzLl9jbGVhckRlcHRo
VmFsdWUsCisgICAgICAgICAgICBkZXB0aFN0b3JlT3A6IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0b3Jl
T3Bfc3RvcmUsCisgICAgICAgICAgICBzdGVuY2lsTG9hZFZhbHVlOiB0aGlzLl9jbGVhclN0ZW5j
aWxWYWx1ZSwKKyAgICAgICAgICAgIHN0ZW5jaWxMb2FkT3A6ICJjbGVhciIsCisgICAgICAgICAg
ICBjbGVhclN0ZW5jaWw6IHRoaXMuX2NsZWFyU3RlbmNpbFZhbHVlLAorICAgICAgICAgICAgc3Rl
bmNpbFN0b3JlT3A6IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0b3JlT3Bfc3RvcmUsCisgICAgICAgIH07
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc2hhZGVyIHByb2Nlc3NvciBpbXBsZW1l
bnRhdGlvbiBmaXR0aW5nIHdpdGggdGhlIGN1cnJlbnQgZW5naW5lIHR5cGUuCisgICAgICogQHJl
dHVybnMgVGhlIHNoYWRlciBwcm9jZXNzb3IgaW1wbGVtZW50YXRpb24uCisgICAgICovCisgICAg
V2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZ2V0U2hhZGVyUHJvY2Vzc29yID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gbmV3IF9XZWJHUFVfd2ViZ3B1U2hhZGVyUHJvY2Vzc29yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siV2ViR1BVU2hhZGVyUHJvY2Vzc29yIl0oKTsKKyAg
ICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZ2V0
U2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBu
ZXcgX1dlYkdQVV93ZWJncHVTaGFkZXJQcm9jZXNzaW5nQ29udGV4dF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTRfX1siV2ViR1BVU2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQiXSgpOworICAgIH07
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhdGljIFBpcGVsaW5lIFdlYkdQVSBTdGF0ZXMKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUud2lwZUNhY2hlcyA9IGZ1bmN0aW9u
IChicnV0ZUZvcmNlKSB7CisgICAgICAgIGlmICh0aGlzLnByZXZlbnRDYWNoZVdpcGVCZXR3ZWVu
RnJhbWVzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5y
ZXNldFRleHR1cmVDYWNoZSgpOworICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0ID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fY3VycmVudEluZGV4QnVmZmVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
Y3VycmVudFZlcnRleEJ1ZmZlcnMgPSBudWxsOworICAgICAgICBpZiAoYnJ1dGVGb3JjZSkgewor
ICAgICAgICAgICAgdGhpcy5fY3VycmVudFByb2dyYW0gPSBudWxsOworICAgICAgICAgICAgdGhp
cy5fc3RlbmNpbFN0YXRlLnJlc2V0KCk7CisgICAgICAgICAgICB0aGlzLl9kZXB0aEN1bGxpbmdT
dGF0ZS5yZXNldCgpOworICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5yZXNldCgpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2NhY2hlZFZlcnRleEJ1ZmZlcnMgPSBudWxsOworICAgICAg
ICB0aGlzLl9jYWNoZWRJbmRleEJ1ZmZlciA9IG51bGw7CisgICAgICAgIHRoaXMuX2NhY2hlZEVm
ZmVjdEZvclZlcnRleEJ1ZmZlcnMgPSBudWxsOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnBy
b3RvdHlwZS5zZXRDb2xvcldyaXRlID0gZnVuY3Rpb24gKGVuYWJsZSkgeworICAgICAgICB0aGlz
Ll9fY29sb3JXcml0ZSA9IGVuYWJsZTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5
cGUuZ2V0Q29sb3JXcml0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX19j
b2xvcldyaXRlOworICAgIH07CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWMgV2ViR1BVIFN0YXRlcworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fdmlld3Bv
cnQgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCkgeworICAgICAgICAvLyBUT0RPIFdF
QkdQVS4gQ2FjaGUuCisgICAgICAgIC8vIGlmICh4ICE9PSB0aGlzLl92aWV3cG9ydENhY2hlZC54
IHx8CisgICAgICAgIC8vICAgICB5ICE9PSB0aGlzLl92aWV3cG9ydENhY2hlZC55IHx8CisgICAg
ICAgIC8vICAgICB3aWR0aCAhPT0gdGhpcy5fdmlld3BvcnRDYWNoZWQueiB8fAorICAgICAgICAv
LyAgICAgaGVpZ2h0ICE9PSB0aGlzLl92aWV3cG9ydENhY2hlZC53KSB7CisgICAgICAgIC8vICAg
ICB0aGlzLl92aWV3cG9ydENhY2hlZC54ID0geDsKKyAgICAgICAgLy8gICAgIHRoaXMuX3ZpZXdw
b3J0Q2FjaGVkLnkgPSB5OworICAgICAgICAvLyAgICAgdGhpcy5fdmlld3BvcnRDYWNoZWQueiA9
IHdpZHRoOworICAgICAgICAvLyAgICAgdGhpcy5fdmlld3BvcnRDYWNoZWQudyA9IGhlaWdodDsK
KyAgICAgICAgLy8gICAgIHRoaXMuX2dsLnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICAvLyB9CisgICAgICAgIGlmICghdGhpcy5fY3VycmVudFJlbmRlclBhc3MpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3N0YXJ0TWFpblJlbmRlclBhc3MoKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBUT0RPIFdFQkdQVS4gVmlld3BvcnQuCisgICAgICAgIC8vIFVzZSAwIDEgbGlrZSB0aGUg
ZGVmYXVsdCB3ZWJnbCB2YWx1ZXMuCisgICAgICAgIC8vIHRoaXMuX2N1cnJlbnRSZW5kZXJQYXNz
IS5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCAwLCAxKTsKKyAgICB9OworICAgIFdl
YkdQVUVuZ2luZS5wcm90b3R5cGUuZW5hYmxlU2Npc3NvciA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0
aCwgaGVpZ2h0KSB7CisgICAgICAgIGlmICghdGhpcy5fY3VycmVudFJlbmRlclBhc3MpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3N0YXJ0TWFpblJlbmRlclBhc3MoKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9jdXJyZW50UmVuZGVyUGFzcy5zZXRTY2lzc29yUmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuZGlzYWJsZVNjaXNzb3Ig
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fY3VycmVudFJlbmRlclBhc3MpIHsK
KyAgICAgICAgICAgIHRoaXMuX3N0YXJ0TWFpblJlbmRlclBhc3MoKTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9jdXJyZW50UmVuZGVyUGFzcy5zZXRTY2lzc29yUmVjdCgwLCAwLCB0aGlzLmdl
dFJlbmRlcldpZHRoKCksIHRoaXMuZ2V0UmVuZGVySGVpZ2h0KCkpOworICAgIH07CisgICAgV2Vi
R1BVRW5naW5lLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIChjb2xvciwgYmFja0J1ZmZlciwg
ZGVwdGgsIHN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKHN0ZW5jaWwgPT09IHZvaWQgMCkgeyBzdGVu
Y2lsID0gZmFsc2U7IH0KKyAgICAgICAgLy8gU29tZSBQR3MgYXJlIHVzaW5nIGNvbG9yMy4uLgor
ICAgICAgICBpZiAoY29sb3IuYSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBjb2xvci5h
ID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmFja0J1ZmZlcikgeworICAgICAgICAgICAg
dGhpcy5fbWFpbkNvbG9yQXR0YWNobWVudHNbMF0ubG9hZFZhbHVlID0gY29sb3I7CisgICAgICAg
ICAgICB0aGlzLl9tYWluQ29sb3JBdHRhY2htZW50c1swXS5sb2FkT3AgPSAiY2xlYXIiOworICAg
ICAgICAgICAgdGhpcy5fbWFpbkNvbG9yQXR0YWNobWVudHNbMF0uY2xlYXJDb2xvciA9IGNvbG9y
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5fbWFpbkNvbG9yQXR0YWNobWVu
dHNbMF0ubG9hZFZhbHVlID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVTG9hZE9wX2xvYWQ7CisgICAgICAg
ICAgICB0aGlzLl9tYWluQ29sb3JBdHRhY2htZW50c1swXS5sb2FkT3AgPSBfV2ViR1BVX3dlYmdw
dUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMi
XS5HUFVMb2FkT3BfbG9hZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVwdGgpIHsKKyAgICAg
ICAgICAgIHRoaXMuX21haW5EZXB0aEF0dGFjaG1lbnQuZGVwdGhMb2FkVmFsdWUgPSB0aGlzLl9j
bGVhckRlcHRoVmFsdWU7CisgICAgICAgICAgICB0aGlzLl9tYWluRGVwdGhBdHRhY2htZW50LmRl
cHRoTG9hZE9wID0gImNsZWFyIjsKKyAgICAgICAgICAgIHRoaXMuX21haW5EZXB0aEF0dGFjaG1l
bnQuY2xlYXJEZXB0aCA9IHRoaXMuX2NsZWFyRGVwdGhWYWx1ZTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHRoaXMuX21haW5EZXB0aEF0dGFjaG1lbnQuZGVwdGhMb2FkVmFsdWUgPSBf
V2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJH
UFVDb25zdGFudHMiXS5HUFVMb2FkT3BfbG9hZDsKKyAgICAgICAgICAgIHRoaXMuX21haW5EZXB0
aEF0dGFjaG1lbnQuZGVwdGhMb2FkT3AgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVMb2FkT3BfbG9hZDsK
KyAgICAgICAgICAgIHRoaXMuX21haW5EZXB0aEF0dGFjaG1lbnQuY2xlYXJEZXB0aCA9IDA7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHN0ZW5jaWwpIHsKKyAgICAgICAgICAgIHRoaXMuX21haW5E
ZXB0aEF0dGFjaG1lbnQuc3RlbmNpbExvYWRWYWx1ZSA9IHRoaXMuX2NsZWFyU3RlbmNpbFZhbHVl
OworICAgICAgICAgICAgdGhpcy5fbWFpbkRlcHRoQXR0YWNobWVudC5zdGVuY2lsTG9hZE9wID0g
ImNsZWFyIjsKKyAgICAgICAgICAgIHRoaXMuX21haW5EZXB0aEF0dGFjaG1lbnQuY2xlYXJTdGVu
Y2lsID0gdGhpcy5fY2xlYXJTdGVuY2lsVmFsdWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLl9tYWluRGVwdGhBdHRhY2htZW50LnN0ZW5jaWxMb2FkVmFsdWUgPSBfV2ViR1BV
X3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25z
dGFudHMiXS5HUFVMb2FkT3BfbG9hZDsKKyAgICAgICAgICAgIHRoaXMuX21haW5EZXB0aEF0dGFj
aG1lbnQuc3RlbmNpbExvYWRPcCA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUxvYWRPcF9sb2FkOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX3N0YXJ0TWFpblJlbmRlclBhc3MoKTsKKyAgICB9OworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJHUFUgQnVmZmVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgV2Vi
R1BVRW5naW5lLnByb3RvdHlwZS5fY3JlYXRlQnVmZmVyID0gZnVuY3Rpb24gKHZpZXcsIGZsYWdz
KSB7CisgICAgICAgIHZhciBwYWRkaW5nID0gdmlldy5ieXRlTGVuZ3RoICUgNDsKKyAgICAgICAg
dmFyIHZlcnRpY2VzQnVmZmVyRGVzY3JpcHRvciA9IHsKKyAgICAgICAgICAgIHNpemU6IHZpZXcu
Ynl0ZUxlbmd0aCArIHBhZGRpbmcsCisgICAgICAgICAgICB1c2FnZTogZmxhZ3MKKyAgICAgICAg
fTsKKyAgICAgICAgdmFyIFtidWZmZXIsIGFycl0gPSB0aGlzLl9kZXZpY2UuY3JlYXRlQnVmZmVy
TWFwcGVkKHZlcnRpY2VzQnVmZmVyRGVzY3JpcHRvcik7CisgICAgICAgIHZhciB1aW50OFZpZXcg
PSBuZXcgVWludDhBcnJheSh2aWV3LmJ1ZmZlciwgdmlldy5ieXRlT2Zmc2V0KTsKKyAgICAgICAg
dmFyIHVpbnQ4QXJyID0gbmV3IFVpbnQ4QXJyYXkoYXJyKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB1aW50OFZpZXcubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB1aW50OEFycltpXSA9
IHVpbnQ4Vmlld1tpXTsKKyAgICAgICAgYnVmZmVyLnVubWFwKCk7CisgICAgICAgIHZhciBkYXRh
QnVmZmVyID0gbmV3IF9NZXNoZXNfV2ViR1BVX3dlYmdwdURhdGFCdWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEyX19bIldlYkdQVURhdGFCdWZmZXIiXShidWZmZXIpOworICAgICAgICBk
YXRhQnVmZmVyLnJlZmVyZW5jZXMgPSAxOworICAgICAgICBkYXRhQnVmZmVyLmNhcGFjaXR5ID0g
dmlldy5ieXRlTGVuZ3RoOworICAgICAgICByZXR1cm4gZGF0YUJ1ZmZlcjsKKyAgICB9OworICAg
IFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX3NldFN1YkRhdGEgPSBmdW5jdGlvbiAoZGF0YUJ1ZmZl
ciwgZHN0Qnl0ZU9mZnNldCwgc3JjLCBzcmNCeXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7CisgICAg
ICAgIGlmIChzcmNCeXRlT2Zmc2V0ID09PSB2b2lkIDApIHsgc3JjQnl0ZU9mZnNldCA9IDA7IH0K
KyAgICAgICAgaWYgKGJ5dGVMZW5ndGggPT09IHZvaWQgMCkgeyBieXRlTGVuZ3RoID0gMDsgfQor
ICAgICAgICB2YXIgYnVmZmVyID0gZGF0YUJ1ZmZlci51bmRlcmx5aW5nUmVzb3VyY2U7CisgICAg
ICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHx8IHNyYy5ieXRlTGVuZ3RoOworICAgICAgICBi
eXRlTGVuZ3RoID0gTWF0aC5taW4oYnl0ZUxlbmd0aCwgZGF0YUJ1ZmZlci5jYXBhY2l0eSAtIGRz
dEJ5dGVPZmZzZXQpOworICAgICAgICAvLyBUT0RPIFdFQkdQVS4gRGVwcmVjYXRlZCBzb29uIHRv
IGJlIHJlbW92ZWQuLi4gcmVwbGFjZSBieSBtYXBwZWRCdWZmZXJzCisgICAgICAgIHZhciBidWZm
ZXJEZXNjcmlwdG9yID0geworICAgICAgICAgICAgc2l6ZTogYnl0ZUxlbmd0aCwKKyAgICAgICAg
ICAgIHVzYWdlOiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCdWZmZXJVc2FnZV9NQVBfV1JJVEUgfCBfV2Vi
R1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVD
b25zdGFudHMiXS5HUFVCdWZmZXJVc2FnZV9UUkFOU0ZFUl9TUkMKKyAgICAgICAgfTsKKyAgICAg
ICAgdmFyIFt0ZW1wQnVmZmVyLCBhcnJdID0gdGhpcy5fZGV2aWNlLmNyZWF0ZUJ1ZmZlck1hcHBl
ZChidWZmZXJEZXNjcmlwdG9yKTsKKyAgICAgICAgdmFyIHVpbnQ4U3JjID0gbmV3IFVpbnQ4QXJy
YXkoc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQpOworICAgICAgICB2YXIgdWludDhBcnIgPSBu
ZXcgVWludDhBcnJheShhcnIpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVMZW5n
dGg7ICsraSkKKyAgICAgICAgICAgIHVpbnQ4QXJyW2ldID0gdWludDhTcmNbc3JjQnl0ZU9mZnNl
dCArIGldOworICAgICAgICB0ZW1wQnVmZmVyLnVubWFwKCk7CisgICAgICAgIHZhciBjb21tYW5k
RW5jb2RlciA9IHRoaXMuX2RldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOworICAgICAgICBj
b21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIodGVtcEJ1ZmZlciwgMCwgYnVmZmVyLCBk
c3RCeXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKKyAgICAgICAgdmFyIGNvbW1hbmRCdWZmZXIgPSBj
b21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICAgICAgdGhpcy5fZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisgICAgICAgIHRlbXBCdWZmZXIuZGVzdHJveSgpOwor
ICAgIH07CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZlcnRleC9JbmRleCBCdWZmZXJzCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVZlcnRleEJ1ZmZlciA9
IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIHZhciB2aWV3OworICAgICAgICBpZiAoZGF0YSBp
bnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICB2aWV3ID0gbmV3IEZsb2F0MzJBcnJheShk
YXRhKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlC
dWZmZXIpIHsKKyAgICAgICAgICAgIHZpZXcgPSBuZXcgVWludDhBcnJheShkYXRhKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZpZXcgPSBkYXRhOworICAgICAgICB9
CisgICAgICAgIHZhciBkYXRhQnVmZmVyID0gdGhpcy5fY3JlYXRlQnVmZmVyKHZpZXcsIF9XZWJH
UFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNv
bnN0YW50cyJdLkdQVUJ1ZmZlclVzYWdlX1ZFUlRFWCB8IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJ1ZmZl
clVzYWdlX1RSQU5TRkVSX0RTVCk7CisgICAgICAgIHJldHVybiBkYXRhQnVmZmVyOworICAgIH07
CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5jcmVhdGVEeW5hbWljVmVydGV4QnVmZmVyID0g
ZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVmVydGV4QnVmZmVy
KGRhdGEpOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS51cGRhdGVEeW5hbWlj
VmVydGV4QnVmZmVyID0gZnVuY3Rpb24gKHZlcnRleEJ1ZmZlciwgZGF0YSwgYnl0ZU9mZnNldCwg
Ynl0ZUxlbmd0aCkgeworICAgICAgICB2YXIgZGF0YUJ1ZmZlciA9IHZlcnRleEJ1ZmZlcjsKKyAg
ICAgICAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgYnl0ZU9m
ZnNldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHZpZXc7CisgICAgICAgIGlmIChieXRl
TGVuZ3RoID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2Yg
QXJyYXkpIHsKKyAgICAgICAgICAgICAgICB2aWV3ID0gbmV3IEZsb2F0MzJBcnJheShkYXRhKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJh
eUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIHZpZXcgPSBuZXcgVWludDhBcnJheShkYXRhKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZpZXcg
PSBkYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHZpZXcuYnl0
ZUxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChkYXRh
IGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgICAgICB2aWV3ID0gbmV3IEZsb2F0MzJB
cnJheShkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEgaW5z
dGFuY2VvZiBBcnJheUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIHZpZXcgPSBuZXcgVWludDhB
cnJheShkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIHZpZXcgPSBkYXRhOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRo
aXMuX3NldFN1YkRhdGEoZGF0YUJ1ZmZlciwgYnl0ZU9mZnNldCwgdmlldywgMCwgYnl0ZUxlbmd0
aCk7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZUluZGV4QnVmZmVy
ID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdmFyIGlzMzJCaXRzID0gdHJ1ZTsKKyAgICAg
ICAgdmFyIHZpZXc7CisgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkgfHwg
ZGF0YSBpbnN0YW5jZW9mIEludDMyQXJyYXkpIHsKKyAgICAgICAgICAgIHZpZXcgPSBkYXRhOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkg
eworICAgICAgICAgICAgdmlldyA9IGRhdGE7CisgICAgICAgICAgICBpczMyQml0cyA9IGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3Ro
ID4gNjU1MzUpIHsKKyAgICAgICAgICAgICAgICB2aWV3ID0gbmV3IFVpbnQzMkFycmF5KGRhdGEp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmll
dyA9IG5ldyBVaW50MTZBcnJheShkYXRhKTsKKyAgICAgICAgICAgICAgICBpczMyQml0cyA9IGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBkYXRhQnVmZmVyID0g
dGhpcy5fY3JlYXRlQnVmZmVyKHZpZXcsIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJ1ZmZlclVzYWdlX0lO
REVYIHwgX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQnVmZmVyVXNhZ2VfVFJBTlNGRVJfRFNUKTsKKyAgICAg
ICAgZGF0YUJ1ZmZlci5pczMyQml0cyA9IGlzMzJCaXRzOworICAgICAgICByZXR1cm4gZGF0YUJ1
ZmZlcjsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUudXBkYXRlRHluYW1pY0lu
ZGV4QnVmZmVyID0gZnVuY3Rpb24gKGluZGV4QnVmZmVyLCBpbmRpY2VzLCBvZmZzZXQpIHsKKyAg
ICAgICAgaWYgKG9mZnNldCA9PT0gdm9pZCAwKSB7IG9mZnNldCA9IDA7IH0KKyAgICAgICAgdmFy
IGdwdUJ1ZmZlciA9IGluZGV4QnVmZmVyOworICAgICAgICB2YXIgdmlldzsKKyAgICAgICAgaWYg
KGluZGljZXMgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkgeworICAgICAgICAgICAgaWYgKGluZGV4
QnVmZmVyLmlzMzJCaXRzKSB7CisgICAgICAgICAgICAgICAgdmlldyA9IFVpbnQzMkFycmF5LmZy
b20oaW5kaWNlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2aWV3ID0gaW5kaWNlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChpbmRpY2VzIGluc3RhbmNlb2YgVWludDMyQXJyYXkpIHsKKyAgICAgICAgICAg
IGlmIChpbmRleEJ1ZmZlci5pczMyQml0cykgeworICAgICAgICAgICAgICAgIHZpZXcgPSBpbmRp
Y2VzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
dmlldyA9IFVpbnQxNkFycmF5LmZyb20oaW5kaWNlcyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoaW5kZXhCdWZmZXIuaXMzMkJpdHMp
IHsKKyAgICAgICAgICAgICAgICB2aWV3ID0gbmV3IFVpbnQzMkFycmF5KGluZGljZXMpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmlldyA9IG5l
dyBVaW50MTZBcnJheShpbmRpY2VzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9zZXRTdWJEYXRhKGdwdUJ1ZmZlciwgb2Zmc2V0LCB2aWV3KTsKKyAgICB9OworICAg
IFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuYmluZEJ1ZmZlcnNEaXJlY3RseSA9IGZ1bmN0aW9uICh2
ZXJ0ZXhCdWZmZXIsIGluZGV4QnVmZmVyLCB2ZXJ0ZXhEZWNsYXJhdGlvbiwgdmVydGV4U3RyaWRl
U2l6ZSwgZWZmZWN0KSB7CisgICAgICAgIHRocm93ICJOb3QgaW1wbGVtZW50ZWQgb24gV2ViR1BV
IHNvIGZhci4iOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS51cGRhdGVBbmRC
aW5kSW5zdGFuY2VzQnVmZmVyID0gZnVuY3Rpb24gKGluc3RhbmNlc0J1ZmZlciwgZGF0YSwgb2Zm
c2V0TG9jYXRpb25zKSB7CisgICAgICAgIHRocm93ICJOb3QgaW1wbGVtZW50ZWQgb24gV2ViR1BV
IHNvIGZhci4iOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5iaW5kQnVmZmVy
cyA9IGZ1bmN0aW9uICh2ZXJ0ZXhCdWZmZXJzLCBpbmRleEJ1ZmZlciwgZWZmZWN0KSB7CisgICAg
ICAgIHRoaXMuX2N1cnJlbnRJbmRleEJ1ZmZlciA9IGluZGV4QnVmZmVyOworICAgICAgICB0aGlz
Ll9jdXJyZW50VmVydGV4QnVmZmVycyA9IHZlcnRleEJ1ZmZlcnM7CisgICAgfTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX3JlbGVhc2VCdWZmZXIgPSBm
dW5jdGlvbiAoYnVmZmVyKSB7CisgICAgICAgIGJ1ZmZlci5yZWZlcmVuY2VzLS07CisgICAgICAg
IGlmIChidWZmZXIucmVmZXJlbmNlcyA9PT0gMCkgeworICAgICAgICAgICAgYnVmZmVyLnVuZGVy
bHlpbmdSZXNvdXJjZS5kZXN0cm95KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUJPCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVVu
aWZvcm1CdWZmZXIgPSBmdW5jdGlvbiAoZWxlbWVudHMpIHsKKyAgICAgICAgdmFyIHZpZXc7Cisg
ICAgICAgIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICB2aWV3
ID0gbmV3IEZsb2F0MzJBcnJheShlbGVtZW50cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB2aWV3ID0gZWxlbWVudHM7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRh
dGFCdWZmZXIgPSB0aGlzLl9jcmVhdGVCdWZmZXIodmlldywgX1dlYkdQVV93ZWJncHVDb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQnVm
ZmVyVXNhZ2VfVU5JRk9STSB8IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJ1ZmZlclVzYWdlX1RSQU5TRkVS
X0RTVCk7CisgICAgICAgIHJldHVybiBkYXRhQnVmZmVyOworICAgIH07CisgICAgV2ViR1BVRW5n
aW5lLnByb3RvdHlwZS5jcmVhdGVEeW5hbWljVW5pZm9ybUJ1ZmZlciA9IGZ1bmN0aW9uIChlbGVt
ZW50cykgeworICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVVbmlmb3JtQnVmZmVyKGVsZW1lbnRz
KTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUudXBkYXRlVW5pZm9ybUJ1ZmZl
ciA9IGZ1bmN0aW9uICh1bmlmb3JtQnVmZmVyLCBlbGVtZW50cywgb2Zmc2V0LCBjb3VudCkgewor
ICAgICAgICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIG9mZnNldCA9
IDA7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRhdGFCdWZmZXIgPSB1bmlmb3JtQnVmZmVyOwor
ICAgICAgICB2YXIgdmlldzsKKyAgICAgICAgaWYgKGNvdW50ID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkgeworICAgICAg
ICAgICAgICAgIHZpZXcgPSBlbGVtZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHZpZXcgPSBuZXcgRmxvYXQzMkFycmF5KGVsZW1lbnRzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50ID0gdmlldy5ieXRlTGVuZ3RoOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGVsZW1lbnRzIGluc3RhbmNl
b2YgRmxvYXQzMkFycmF5KSB7CisgICAgICAgICAgICAgICAgdmlldyA9IGVsZW1lbnRzOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmlldyA9IG5l
dyBGbG9hdDMyQXJyYXkoZWxlbWVudHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHRoaXMuX3NldFN1YkRhdGEoZGF0YUJ1ZmZlciwgb2Zmc2V0LCB2aWV3LCAwLCBjb3VudCk7
CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmJpbmRVbmlmb3JtQnVmZmVyQmFz
ZSA9IGZ1bmN0aW9uIChidWZmZXIsIGxvY2F0aW9uLCBuYW1lKSB7CisgICAgICAgIHRoaXMuX3Vu
aWZvcm1zQnVmZmVyc1tuYW1lXSA9IGJ1ZmZlcjsKKyAgICB9OworICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RzCisg
ICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmNy
ZWF0ZUVmZmVjdCA9IGZ1bmN0aW9uIChiYXNlTmFtZSwgYXR0cmlidXRlc05hbWVzT3JPcHRpb25z
LCB1bmlmb3Jtc05hbWVzT3JFbmdpbmUsIHNhbXBsZXJzLCBkZWZpbmVzLCBmYWxsYmFja3MsIG9u
Q29tcGlsZWQsIG9uRXJyb3IsIGluZGV4UGFyYW1ldGVycykgeworICAgICAgICB2YXIgdmVydGV4
ID0gYmFzZU5hbWUudmVydGV4RWxlbWVudCB8fCBiYXNlTmFtZS52ZXJ0ZXggfHwgYmFzZU5hbWU7
CisgICAgICAgIHZhciBmcmFnbWVudCA9IGJhc2VOYW1lLmZyYWdtZW50RWxlbWVudCB8fCBiYXNl
TmFtZS5mcmFnbWVudCB8fCBiYXNlTmFtZTsKKyAgICAgICAgdmFyIG5hbWUgPSB2ZXJ0ZXggKyAi
KyIgKyBmcmFnbWVudCArICJAIiArIChkZWZpbmVzID8gZGVmaW5lcyA6IGF0dHJpYnV0ZXNOYW1l
c09yT3B0aW9ucy5kZWZpbmVzKTsKKyAgICAgICAgdmFyIHNoYWRlciA9IHRoaXMuX2NvbXBpbGVk
U2hhZGVyc1tuYW1lXTsKKyAgICAgICAgaWYgKHNoYWRlcikgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJFZmZl
Y3QiXShiYXNlTmFtZSwgYXR0cmlidXRlc05hbWVzT3JPcHRpb25zLCB1bmlmb3Jtc05hbWVzT3JF
bmdpbmUsIHNhbXBsZXJzLCB0aGlzLCBkZWZpbmVzLCBmYWxsYmFja3MsIG9uQ29tcGlsZWQsIG9u
RXJyb3IsIGluZGV4UGFyYW1ldGVycywgbmFtZSwgc2hhZGVyLnNvdXJjZXMpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJFZmZlY3QiXShiYXNlTmFtZSwgYXR0cmli
dXRlc05hbWVzT3JPcHRpb25zLCB1bmlmb3Jtc05hbWVzT3JFbmdpbmUsIHNhbXBsZXJzLCB0aGlz
LCBkZWZpbmVzLCBmYWxsYmFja3MsIG9uQ29tcGlsZWQsIG9uRXJyb3IsIGluZGV4UGFyYW1ldGVy
cywgbmFtZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUu
X2NvbXBpbGVSYXdTaGFkZXJUb1NwaXJWID0gZnVuY3Rpb24gKHNvdXJjZSwgdHlwZSkgeworICAg
ICAgICB2YXIgU2hhZGVyYyA9IHRoaXMuX3NoYWRlcmM7CisgICAgICAgIHZhciBjb21waWxlciA9
IG5ldyBTaGFkZXJjLkNvbXBpbGVyKCk7CisgICAgICAgIHZhciBvcHRzID0gbmV3IFNoYWRlcmMu
Q29tcGlsZU9wdGlvbnMoKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGNvbXBpbGVyLkNvbXBpbGVH
bHNsVG9TcHYoc291cmNlLCB0eXBlID09PSAiZnJhZ21lbnQiID8gU2hhZGVyYy5zaGFkZXJfa2lu
ZC5mcmFnbWVudCA6CisgICAgICAgICAgICB0eXBlID09PSAidmVydGV4IiA/IFNoYWRlcmMuc2hh
ZGVyX2tpbmQudmVydGV4IDoKKyAgICAgICAgICAgICAgICB0eXBlID09PSAiY29tcHV0ZSIgPyBT
aGFkZXJjLnNoYWRlcl9raW5kLmNvbXB1dGUgOiBudWxsLCAidGVtcENvbXBpbGF0aW9uLmdsc2wi
LCAibWFpbiIsIG9wdHMpOworICAgICAgICB2YXIgZXJyb3IgPSByZXN1bHQuR2V0RXJyb3JNZXNz
YWdlKCk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVycm9yKGVycm9yKTsKKyAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgY29tcGls
ZSB0aGUgc2hhZGVyLiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQuR2V0Qmlu
YXJ5KCkuc2xpY2UoKTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2NvbXBp
bGVTaGFkZXJUb1NwaXJWID0gZnVuY3Rpb24gKHNvdXJjZSwgdHlwZSwgZGVmaW5lcywgc2hhZGVy
VmVyc2lvbikgeworICAgICAgICByZXR1cm4gdGhpcy5fY29tcGlsZVJhd1NoYWRlclRvU3BpclYo
c2hhZGVyVmVyc2lvbiArIChkZWZpbmVzID8gZGVmaW5lcyArICJcbiIgOiAiIikgKyBzb3VyY2Us
IHR5cGUpOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fY3JlYXRlUGlwZWxp
bmVTdGFnZURlc2NyaXB0b3IgPSBmdW5jdGlvbiAodmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRl
cikgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdmVydGV4U3RhZ2U6IHsKKyAgICAg
ICAgICAgICAgICBtb2R1bGU6IHRoaXMuX2RldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoeworICAg
ICAgICAgICAgICAgICAgICBjb2RlOiB2ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgfSks
CisgICAgICAgICAgICAgICAgZW50cnlQb2ludDogIm1haW4iLAorICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIGZyYWdtZW50U3RhZ2U6IHsKKyAgICAgICAgICAgICAgICBtb2R1bGU6IHRoaXMu
X2RldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoeworICAgICAgICAgICAgICAgICAgICBjb2RlOiBm
cmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgICAgICBlbnRy
eVBvaW50OiAibWFpbiIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9OworICAgIFdl
YkdQVUVuZ2luZS5wcm90b3R5cGUuX2NvbXBpbGVSYXdQaXBlbGluZVN0YWdlRGVzY3JpcHRvciA9
IGZ1bmN0aW9uICh2ZXJ0ZXhDb2RlLCBmcmFnbWVudENvZGUpIHsKKyAgICAgICAgdmFyIHZlcnRl
eFNoYWRlciA9IHRoaXMuX2NvbXBpbGVSYXdTaGFkZXJUb1NwaXJWKHZlcnRleENvZGUsICJ2ZXJ0
ZXgiKTsKKyAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gdGhpcy5fY29tcGlsZVJhd1NoYWRl
clRvU3BpclYoZnJhZ21lbnRDb2RlLCAiZnJhZ21lbnQiKTsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2NyZWF0ZVBpcGVsaW5lU3RhZ2VEZXNjcmlwdG9yKHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFk
ZXIpOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fY29tcGlsZVBpcGVsaW5l
U3RhZ2VEZXNjcmlwdG9yID0gZnVuY3Rpb24gKHZlcnRleENvZGUsIGZyYWdtZW50Q29kZSwgZGVm
aW5lcykgeworICAgICAgICB0aGlzLm9uQmVmb3JlU2hhZGVyQ29tcGlsYXRpb25PYnNlcnZhYmxl
Lm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgdmFyIHNoYWRlclZlcnNpb24gPSAiI3Zl
cnNpb24gNDUwXG4iOworICAgICAgICB2YXIgdmVydGV4U2hhZGVyID0gdGhpcy5fY29tcGlsZVNo
YWRlclRvU3BpclYodmVydGV4Q29kZSwgInZlcnRleCIsIGRlZmluZXMsIHNoYWRlclZlcnNpb24p
OworICAgICAgICB2YXIgZnJhZ21lbnRTaGFkZXIgPSB0aGlzLl9jb21waWxlU2hhZGVyVG9TcGly
VihmcmFnbWVudENvZGUsICJmcmFnbWVudCIsIGRlZmluZXMsIHNoYWRlclZlcnNpb24pOworICAg
ICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMuX2NyZWF0ZVBpcGVsaW5lU3RhZ2VEZXNjcmlwdG9yKHZl
cnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOworICAgICAgICB0aGlzLm9uQWZ0ZXJTaGFkZXJD
b21waWxhdGlvbk9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICByZXR1
cm4gcHJvZ3JhbTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuY3JlYXRlUmF3
U2hhZGVyUHJvZ3JhbSA9IGZ1bmN0aW9uIChwaXBlbGluZUNvbnRleHQsIHZlcnRleENvZGUsIGZy
YWdtZW50Q29kZSwgY29udGV4dCwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncykgeworICAgICAg
ICBpZiAodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyA9PT0gdm9pZCAwKSB7IHRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ3MgPSBudWxsOyB9CisgICAgICAgIHRocm93ICJOb3QgYXZhaWxhYmxlIG9u
IFdlYkdQVSI7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVNoYWRl
clByb2dyYW0gPSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhDb2RlLCBmcmFnbWVu
dENvZGUsIGRlZmluZXMsIGNvbnRleHQsIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpIHsKKyAg
ICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MgPT09IHZvaWQgMCkgeyB0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzID0gbnVsbDsgfQorICAgICAgICB0aHJvdyAiTm90IGF2YWlsYWJs
ZSBvbiBXZWJHUFUiOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5jcmVhdGVQ
aXBlbGluZUNvbnRleHQgPSBmdW5jdGlvbiAoc2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQpIHsKKyAg
ICAgICAgdmFyIHBpcGVsaW5lQ29udGV4dCA9IG5ldyBfV2ViR1BVX3dlYmdwdVBpcGVsaW5lQ29u
dGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siV2ViR1BVUGlwZWxpbmVDb250ZXh0
Il0oc2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQsIHRoaXMpOworICAgICAgICBwaXBlbGluZUNvbnRl
eHQuZW5naW5lID0gdGhpczsKKyAgICAgICAgcmV0dXJuIHBpcGVsaW5lQ29udGV4dDsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fcHJlcGFy
ZVBpcGVsaW5lQ29udGV4dCA9IGZ1bmN0aW9uIChwaXBlbGluZUNvbnRleHQsIHZlcnRleFNvdXJj
ZUNvZGUsIGZyYWdtZW50U291cmNlQ29kZSwgY3JlYXRlQXNSYXcsIHJlYnVpbGRSZWJpbmQsIGRl
ZmluZXMsIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIGtleSkgeworICAgICAgICB2YXIgd2Vi
R3B1Q29udGV4dCA9IHBpcGVsaW5lQ29udGV4dDsKKyAgICAgICAgLy8gVE9ETyBXRUJHUFUuIENo
ZWNrIGlmIGNhY2hlcyBjb3VsZCBiZSByZXVzZSBmcm9tIHBpZXBsaW5lID8/PworICAgICAgICB2
YXIgc2hhZGVyID0gdGhpcy5fY29tcGlsZWRTaGFkZXJzW2tleV07CisgICAgICAgIGlmIChzaGFk
ZXIpIHsKKyAgICAgICAgICAgIHdlYkdwdUNvbnRleHQuc3RhZ2VzID0gc2hhZGVyLnN0YWdlczsK
KyAgICAgICAgICAgIHdlYkdwdUNvbnRleHQuYXZhaWxhYmxlQXR0cmlidXRlcyA9IHNoYWRlci5h
dmFpbGFibGVBdHRyaWJ1dGVzOworICAgICAgICAgICAgd2ViR3B1Q29udGV4dC5hdmFpbGFibGVV
Qk9zID0gc2hhZGVyLmF2YWlsYWJsZVVCT3M7CisgICAgICAgICAgICB3ZWJHcHVDb250ZXh0LmF2
YWlsYWJsZVNhbXBsZXJzID0gc2hhZGVyLmF2YWlsYWJsZVNhbXBsZXJzOworICAgICAgICAgICAg
d2ViR3B1Q29udGV4dC5vcmRlcmVkQXR0cmlidXRlcyA9IHNoYWRlci5vcmRlcmVkQXR0cmlidXRl
czsKKyAgICAgICAgICAgIHdlYkdwdUNvbnRleHQub3JkZXJlZFVCT3NBbmRTYW1wbGVycyA9IHNo
YWRlci5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzOworICAgICAgICAgICAgd2ViR3B1Q29udGV4dC5s
ZWZ0T3ZlclVuaWZvcm1zID0gc2hhZGVyLmxlZnRPdmVyVW5pZm9ybXM7CisgICAgICAgICAgICB3
ZWJHcHVDb250ZXh0LmxlZnRPdmVyVW5pZm9ybXNCeU5hbWUgPSBzaGFkZXIubGVmdE92ZXJVbmlm
b3Jtc0J5TmFtZTsKKyAgICAgICAgICAgIHdlYkdwdUNvbnRleHQuc291cmNlcyA9IHNoYWRlci5z
b3VyY2VzOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGNyZWF0
ZUFzUmF3KSB7CisgICAgICAgICAgICAgICAgd2ViR3B1Q29udGV4dC5zdGFnZXMgPSB0aGlzLl9j
b21waWxlUmF3UGlwZWxpbmVTdGFnZURlc2NyaXB0b3IodmVydGV4U291cmNlQ29kZSwgZnJhZ21l
bnRTb3VyY2VDb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHdlYkdwdUNvbnRleHQuc3RhZ2VzID0gdGhpcy5fY29tcGlsZVBpcGVsaW5lU3Rh
Z2VEZXNjcmlwdG9yKHZlcnRleFNvdXJjZUNvZGUsIGZyYWdtZW50U291cmNlQ29kZSwgZGVmaW5l
cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9jb21waWxlZFNoYWRlcnNba2V5
XSA9IHsKKyAgICAgICAgICAgICAgICBzdGFnZXM6IHdlYkdwdUNvbnRleHQuc3RhZ2VzLAorICAg
ICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZXM6IHdlYkdwdUNvbnRleHQuYXZhaWxhYmxl
QXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICBhdmFpbGFibGVVQk9zOiB3ZWJHcHVDb250ZXh0
LmF2YWlsYWJsZVVCT3MsCisgICAgICAgICAgICAgICAgYXZhaWxhYmxlU2FtcGxlcnM6IHdlYkdw
dUNvbnRleHQuYXZhaWxhYmxlU2FtcGxlcnMsCisgICAgICAgICAgICAgICAgb3JkZXJlZEF0dHJp
YnV0ZXM6IHdlYkdwdUNvbnRleHQub3JkZXJlZEF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAg
b3JkZXJlZFVCT3NBbmRTYW1wbGVyczogd2ViR3B1Q29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBs
ZXJzLAorICAgICAgICAgICAgICAgIGxlZnRPdmVyVW5pZm9ybXM6IHdlYkdwdUNvbnRleHQubGVm
dE92ZXJVbmlmb3JtcywKKyAgICAgICAgICAgICAgICBsZWZ0T3ZlclVuaWZvcm1zQnlOYW1lOiB3
ZWJHcHVDb250ZXh0LmxlZnRPdmVyVW5pZm9ybXNCeU5hbWUsCisgICAgICAgICAgICAgICAgc291
cmNlczogeworICAgICAgICAgICAgICAgICAgICBmcmFnbWVudDogZnJhZ21lbnRTb3VyY2VDb2Rl
LAorICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXg6IHZlcnRleFNvdXJjZUNvZGUKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfTsKKyAgICBXZWJHUFVF
bmdpbmUucHJvdG90eXBlLmdldEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0
LCBhdHRyaWJ1dGVzTmFtZXMpIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkoYXR0
cmlidXRlc05hbWVzLmxlbmd0aCk7CisgICAgICAgIHZhciBncHVQaXBlbGluZUNvbnRleHQgPSBw
aXBlbGluZUNvbnRleHQ7CisgICAgICAgIC8vIFRPRE8gV0VCR1BVLiBIYXJkIGNvZGVkIGZvciBX
ZWJHUFUgdW50aWwgYW4gaW50cm9zcGVjdGlvbiBsaWIgaXMgYXZhaWxhYmxlLgorICAgICAgICAv
LyBTaG91bGQgYmUgZG9uZSBhdCBwcm9jZXNzaW5nIHRpbWUsIG5vdCBuZWVkIHRvIGRvdWJsZSB0
aGUgd29yayBpbiBoZXJlLgorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXNO
YW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBhdHRy
aWJ1dGVzTmFtZXNbaV07CisgICAgICAgICAgICB2YXIgYXR0cmlidXRlTG9jYXRpb24gPSBncHVQ
aXBlbGluZUNvbnRleHQuYXZhaWxhYmxlQXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXTsKKyAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGVMb2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHRzW2ldID0g
YXR0cmlidXRlTG9jYXRpb247CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7Cisg
ICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmVuYWJsZUVmZmVjdCA9IGZ1bmN0aW9u
IChlZmZlY3QpIHsKKyAgICAgICAgdGhpcy5fY3VycmVudEVmZmVjdCA9IGVmZmVjdDsKKyAgICAg
ICAgaWYgKGVmZmVjdC5vbkJpbmQpIHsKKyAgICAgICAgICAgIGVmZmVjdC5vbkJpbmQoZWZmZWN0
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZWZmZWN0Ll9vbkJpbmRPYnNlcnZhYmxlKSB7Cisg
ICAgICAgICAgICBlZmZlY3QuX29uQmluZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGVmZmVj
dCk7CisgICAgICAgIH0KKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX3JlbGVh
c2VFZmZlY3QgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgIC8vIEVmZmVjdCBnZXRzIGdh
cmJhZ2UgY29sbGVjdGVkIHdpdGhvdXQgZXhwbGljaXQgZGVzdHJveSBpbiBXZWJHUFUuCisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSB0aGUgZW5naW5lIHRvIHJlbGVhc2UgYWxsIGNhY2hl
ZCBlZmZlY3RzLiBUaGlzIG1lYW5zIHRoYXQgbmV4dCBlZmZlY3QgY29tcGlsYXRpb24gd2lsbCBo
YXZlIHRvIGJlIGRvbmUgY29tcGxldGVseSBldmVuIGlmIGEgc2ltaWxhciBlZmZlY3Qgd2FzIGFs
cmVhZHkgY29tcGlsZWQKKyAgICAgKi8KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnJlbGVh
c2VFZmZlY3RzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBFZmZlY3QgZ2V0cyBnYXJiYWdl
IGNvbGxlY3RlZCB3aXRob3V0IGV4cGxpY2l0IGRlc3Ryb3kgaW4gV2ViR1BVLgorICAgIH07Cisg
ICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZGVsZXRlUGlwZWxpbmVDb250ZXh0ID0gZnVuY3Rp
b24gKHBpcGVsaW5lQ29udGV4dCkgeworICAgICAgICB2YXIgd2ViZ3B1UGlwZWxpbmVDb250ZXh0
ID0gcGlwZWxpbmVDb250ZXh0OworICAgICAgICBpZiAod2ViZ3B1UGlwZWxpbmVDb250ZXh0KSB7
CisgICAgICAgICAgICBwaXBlbGluZUNvbnRleHQuZGlzcG9zZSgpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVGV4dHVyZXMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8q
KiBAaGlkZGVuICovCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fY3JlYXRlVGV4dHVyZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gVE9ETyBXRUJHUFUuIFRoaXMgc2hvdWxkIHJldHVy
biB0aGUgR1BVVGV4dHVyZSwgV2ViR0xUZXh0dXJlIG1pZ2h0IG5lZWQgdG8gYmUgd3JhcHBlZCBs
aWtlIHRoZSBidWZmZXJzLgorICAgICAgICByZXR1cm4ge307CisgICAgfTsKKyAgICAvKiogQGhp
ZGRlbiAqLworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX3JlbGVhc2VUZXh0dXJlID0gZnVu
Y3Rpb24gKHRleHR1cmUpIHsKKyAgICAgICAgaWYgKHRleHR1cmUuX3dlYkdQVVRleHR1cmUpIHsK
KyAgICAgICAgICAgIHRleHR1cmUuX3dlYkdQVVRleHR1cmUuZGVzdHJveSgpOworICAgICAgICB9
CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9qdXN0VGhlVXBsb2FkID0gZnVu
Y3Rpb24gKHBpeGVscywgZ3B1VGV4dHVyZSwgd2lkdGgsIGhlaWdodCwgZmFjZSwgbWlwKSB7Cisg
ICAgICAgIHZhciB0ZXh0dXJlVmlldyA9IHsKKyAgICAgICAgICAgIHRleHR1cmU6IGdwdVRleHR1
cmUsCisgICAgICAgICAgICBvcmlnaW46IHsKKyAgICAgICAgICAgICAgICB4OiAwLAorICAgICAg
ICAgICAgICAgIHk6IDAsCisgICAgICAgICAgICAgICAgejogMAorICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIG1pcExldmVsOiBtaXAsCisgICAgICAgICAgICBhcnJheUxheWVyOiBNYXRoLm1h
eChmYWNlLCAwKSwKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHRleHR1cmVFeHRlbnQgPSB7Cisg
ICAgICAgICAgICB3aWR0aDogd2lkdGgsCisgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCwKKyAg
ICAgICAgICAgIGRlcHRoOiAxCisgICAgICAgIH07CisgICAgICAgIHZhciBjb21tYW5kRW5jb2Rl
ciA9IHRoaXMuX2RldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcih7fSk7CisgICAgICAgIHZhciBy
b3dQaXRjaCA9IE1hdGguY2VpbCh3aWR0aCAqIDQgLyAyNTYpICogMjU2OworICAgICAgICB2YXIg
ZGF0YUJ1ZmZlcjsKKyAgICAgICAgaWYgKHJvd1BpdGNoID09IHdpZHRoICogNCkgeworICAgICAg
ICAgICAgZGF0YUJ1ZmZlciA9IHRoaXMuX2NyZWF0ZUJ1ZmZlcihwaXhlbHMsIF9XZWJHUFVfd2Vi
Z3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50
cyJdLkdQVUJ1ZmZlclVzYWdlX1RSQU5TRkVSX1NSQyB8IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJ1ZmZl
clVzYWdlX1RSQU5TRkVSX0RTVCk7CisgICAgICAgICAgICB2YXIgYnVmZmVyVmlldyA9IHsKKyAg
ICAgICAgICAgICAgICBidWZmZXI6IGRhdGFCdWZmZXIudW5kZXJseWluZ1Jlc291cmNlLAorICAg
ICAgICAgICAgICAgIHJvd1BpdGNoOiByb3dQaXRjaCwKKyAgICAgICAgICAgICAgICBpbWFnZUhl
aWdodDogaGVpZ2h0LAorICAgICAgICAgICAgICAgIG9mZnNldDogMCwKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9UZXh0dXJlKGJ1ZmZlclZp
ZXcsIHRleHR1cmVWaWV3LCB0ZXh0dXJlRXh0ZW50KTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHZhciBhbGlnbmVkUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkocm93UGl0
Y2ggKiBoZWlnaHQpOworICAgICAgICAgICAgdmFyIHBpeGVsc0luZGV4ID0gMDsKKyAgICAgICAg
ICAgIGZvciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGkgPSB4ICogNCArIHkgKiByb3dQaXRjaDsKKyAgICAgICAgICAgICAgICAgICAgYWxpZ25lZFBp
eGVsc1tpXSA9IHBpeGVsc1twaXhlbHNJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGFsaWdu
ZWRQaXhlbHNbaSArIDFdID0gcGl4ZWxzW3BpeGVsc0luZGV4ICsgMV07CisgICAgICAgICAgICAg
ICAgICAgIGFsaWduZWRQaXhlbHNbaSArIDJdID0gcGl4ZWxzW3BpeGVsc0luZGV4ICsgMl07Cisg
ICAgICAgICAgICAgICAgICAgIGFsaWduZWRQaXhlbHNbaSArIDNdID0gcGl4ZWxzW3BpeGVsc0lu
ZGV4ICsgM107CisgICAgICAgICAgICAgICAgICAgIHBpeGVsc0luZGV4ICs9IDQ7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUJ1ZmZlciA9IHRoaXMu
X2NyZWF0ZUJ1ZmZlcihhbGlnbmVkUGl4ZWxzLCBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCdWZmZXJVc2Fn
ZV9UUkFOU0ZFUl9TUkMgfCBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCdWZmZXJVc2FnZV9UUkFOU0ZFUl9E
U1QpOworICAgICAgICAgICAgdmFyIGJ1ZmZlclZpZXcgPSB7CisgICAgICAgICAgICAgICAgYnVm
ZmVyOiBkYXRhQnVmZmVyLnVuZGVybHlpbmdSZXNvdXJjZSwKKyAgICAgICAgICAgICAgICByb3dQ
aXRjaDogcm93UGl0Y2gsCisgICAgICAgICAgICAgICAgaW1hZ2VIZWlnaHQ6IGhlaWdodCwKKyAg
ICAgICAgICAgICAgICBvZmZzZXQ6IDAsCisgICAgICAgICAgICB9OworICAgICAgICAgICAgY29t
bWFuZEVuY29kZXIuY29weUJ1ZmZlclRvVGV4dHVyZShidWZmZXJWaWV3LCB0ZXh0dXJlVmlldywg
dGV4dHVyZUV4dGVudCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGV2aWNlLmdldFF1ZXVl
KCkuc3VibWl0KFtjb21tYW5kRW5jb2Rlci5maW5pc2goKV0pOworICAgICAgICB0aGlzLl9yZWxl
YXNlQnVmZmVyKGRhdGFCdWZmZXIpOworICAgIH0KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBl
Ll91cGxvYWRNaXBNYXBzRnJvbVdlYmdsVGV4dHVyZSA9IGZ1bmN0aW9uIChtaXBNYXBzLCB3ZWJn
bEVuZ2luZVRleHR1cmUsIGdwdVRleHR1cmUsIHdpZHRoLCBoZWlnaHQsIGZhY2UpIHsKKyAgICAg
ICAgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBTYWZhcmkgVGVjaG5vbG9neSBQcmV2aWV3
IG9ubHkgc3VwcG9ydHMgV2ViR0wgMS4KKyAgICAgICAgLy8gSW4gV2ViR0wgMSwgdGhlICJtaXAi
IGFyZ3VtZW50IHRvIF9yZWFkVGV4dHVyZVBpeGVscygpIG11c3QgYmUgMCwgd2hpY2ggbWVhbnMg
aXQncyBpbXBvc3NpYmxlIHRvIHJlYWRQaXhlbHMoKSBhIG5vbi0wIG1pcGxldmVsIG9mIGEgdGV4
dHVyZS4KKyAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIGdlbmVyYXRlIG91ciBvd24g
bWlwbWFwcyBvbiB0aGUgQ1BVIGhlcmUuCisgICAgICAgIHZhciBwaXhlbHMgPSB0aGlzLl9kZWNv
ZGVFbmdpbmUuX3JlYWRUZXh0dXJlUGl4ZWxzKHdlYmdsRW5naW5lVGV4dHVyZSwgd2ViZ2xFbmdp
bmVUZXh0dXJlLndpZHRoLCB3ZWJnbEVuZ2luZVRleHR1cmUuaGVpZ2h0LCBmYWNlLCAwKTsKKyAg
ICAgICAgaWYgKHBpeGVscyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkgeworICAgICAgICAgICAg
dmFyIG5ld1BpeGVsc18xID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHBpeGVscy5sZW5ndGgpOwor
ICAgICAgICAgICAgcGl4ZWxzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgeyByZXR1
cm4gbmV3UGl4ZWxzXzFbaW5kZXhdID0gdmFsdWUgKiAyNTU7IH0pOworICAgICAgICAgICAgcGl4
ZWxzID0gbmV3UGl4ZWxzXzE7CisgICAgICAgIH0KKyAgICAgICAgbGV0IG9yaWdpbmFsQ2FudmFz
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgICAgIG9yaWdpbmFsQ2Fu
dmFzLndpZHRoID0gd2ViZ2xFbmdpbmVUZXh0dXJlLndpZHRoOworICAgICAgICBvcmlnaW5hbENh
bnZhcy5oZWlnaHQgPSB3ZWJnbEVuZ2luZVRleHR1cmUuaGVpZ2h0OworICAgICAgICBsZXQgb3Jp
Z2luYWxDb250ZXh0ID0gb3JpZ2luYWxDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICAgICAg
bGV0IGltYWdlRGF0YSA9IG5ldyBJbWFnZURhdGEobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHBpeGVs
cyksIHdlYmdsRW5naW5lVGV4dHVyZS53aWR0aCwgd2ViZ2xFbmdpbmVUZXh0dXJlLndpZHRoKTsK
KyAgICAgICAgb3JpZ2luYWxDb250ZXh0LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApOwor
CisgICAgICAgIHZhciBmYWNlV2lkdGggPSB3aWR0aDsKKyAgICAgICAgdmFyIGZhY2VIZWlnaHQg
PSBoZWlnaHQ7CisgICAgICAgIHZhciBtaXAgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICBsZXQgc21hbGxDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKKyAg
ICAgICAgICAgIHNtYWxsQ2FudmFzLndpZHRoID0gZmFjZVdpZHRoOworICAgICAgICAgICAgc21h
bGxDYW52YXMuaGVpZ2h0ID0gZmFjZUhlaWdodDsKKyAgICAgICAgICAgIGxldCBzbWFsbENvbnRl
eHQgPSBzbWFsbENhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgICAgICAgICAgc21hbGxDb250
ZXh0LmRyYXdJbWFnZShvcmlnaW5hbENhbnZhcywgMCwgMCwgZmFjZVdpZHRoLCBmYWNlSGVpZ2h0
KTsKKyAgICAgICAgICAgIGxldCBpbWFnZURhdGEgPSBzbWFsbENvbnRleHQuZ2V0SW1hZ2VEYXRh
KDAsIDAsIGZhY2VXaWR0aCwgZmFjZUhlaWdodCk7CisgICAgICAgICAgICB0aGlzLl9qdXN0VGhl
VXBsb2FkKGltYWdlRGF0YS5kYXRhLCBncHVUZXh0dXJlLCBmYWNlV2lkdGgsIGZhY2VIZWlnaHQs
IGZhY2UsIG1pcCk7CisgICAgICAgICAgICBpZiAoZmFjZVdpZHRoIDw9IDEgJiYgZmFjZUhlaWdo
dCA8PSAxKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZmFjZVdpZHRoIC89
IDI7CisgICAgICAgICAgICBmYWNlSGVpZ2h0IC89IDI7CisgICAgICAgICAgICArK21pcDsKKyAg
ICAgICAgfSB3aGlsZSAodHJ1ZSk7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBl
Ll91cGxvYWRGcm9tV2ViZ2xUZXh0dXJlID0gZnVuY3Rpb24gKHdlYmdsRW5naW5lVGV4dHVyZSwg
Z3B1VGV4dHVyZSwgd2lkdGgsIGhlaWdodCwgZmFjZSwgbWlwKSB7CisgICAgICAgIGlmIChtaXAg
PT09IHZvaWQgMCkgeyBtaXAgPSAwOyB9CisgICAgICAgIHZhciBwaXhlbHMgPSB0aGlzLl9kZWNv
ZGVFbmdpbmUuX3JlYWRUZXh0dXJlUGl4ZWxzKHdlYmdsRW5naW5lVGV4dHVyZSwgd2lkdGgsIGhl
aWdodCwgZmFjZSwgbWlwKTsKKyAgICAgICAgaWYgKHBpeGVscyBpbnN0YW5jZW9mIEZsb2F0MzJB
cnJheSkgeworICAgICAgICAgICAgdmFyIG5ld1BpeGVsc18xID0gbmV3IFVpbnQ4Q2xhbXBlZEFy
cmF5KHBpeGVscy5sZW5ndGgpOworICAgICAgICAgICAgcGl4ZWxzLmZvckVhY2goZnVuY3Rpb24g
KHZhbHVlLCBpbmRleCkgeyByZXR1cm4gbmV3UGl4ZWxzXzFbaW5kZXhdID0gdmFsdWUgKiAyNTU7
IH0pOworICAgICAgICAgICAgcGl4ZWxzID0gbmV3UGl4ZWxzXzE7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHRleHR1cmVWaWV3ID0geworICAgICAgICAgICAgdGV4dHVyZTogZ3B1VGV4dHVyZSwK
KyAgICAgICAgICAgIG9yaWdpbjogeworICAgICAgICAgICAgICAgIHg6IDAsCisgICAgICAgICAg
ICAgICAgeTogMCwKKyAgICAgICAgICAgICAgICB6OiAwCisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgbWlwTGV2ZWw6IG1pcCwKKyAgICAgICAgICAgIGFycmF5TGF5ZXI6IE1hdGgubWF4KGZh
Y2UsIDApLAorICAgICAgICB9OworICAgICAgICB2YXIgdGV4dHVyZUV4dGVudCA9IHsKKyAgICAg
ICAgICAgIHdpZHRoOiB3aWR0aCwKKyAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAorICAgICAg
ICAgICAgZGVwdGg6IDEKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIGNvbW1hbmRFbmNvZGVyID0g
dGhpcy5fZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKHt9KTsKKyAgICAgICAgdmFyIHJvd1Bp
dGNoID0gTWF0aC5jZWlsKHdpZHRoICogNCAvIDI1NikgKiAyNTY7CisgICAgICAgIHZhciBkYXRh
QnVmZmVyOworICAgICAgICBpZiAocm93UGl0Y2ggPT0gd2lkdGggKiA0KSB7CisgICAgICAgICAg
ICBkYXRhQnVmZmVyID0gdGhpcy5fY3JlYXRlQnVmZmVyKHBpeGVscywgX1dlYkdQVV93ZWJncHVD
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0u
R1BVQnVmZmVyVXNhZ2VfVFJBTlNGRVJfU1JDIHwgX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQnVmZmVyVXNh
Z2VfVFJBTlNGRVJfRFNUKTsKKyAgICAgICAgICAgIHZhciBidWZmZXJWaWV3ID0geworICAgICAg
ICAgICAgICAgIGJ1ZmZlcjogZGF0YUJ1ZmZlci51bmRlcmx5aW5nUmVzb3VyY2UsCisgICAgICAg
ICAgICAgICAgcm93UGl0Y2g6IHJvd1BpdGNoLAorICAgICAgICAgICAgICAgIGltYWdlSGVpZ2h0
OiBoZWlnaHQsCisgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLAorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb1RleHR1cmUoYnVmZmVyVmlldywg
dGV4dHVyZVZpZXcsIHRleHR1cmVFeHRlbnQpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgdmFyIGFsaWduZWRQaXhlbHMgPSBuZXcgVWludDhBcnJheShyb3dQaXRjaCAq
IGhlaWdodCk7CisgICAgICAgICAgICB2YXIgcGl4ZWxzSW5kZXggPSAwOworICAgICAgICAgICAg
Zm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgeworICAgICAgICAgICAgICAgIGZvciAo
dmFyIHggPSAwOyB4IDwgd2lkdGg7ICsreCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgaSA9
IHggKiA0ICsgeSAqIHJvd1BpdGNoOworICAgICAgICAgICAgICAgICAgICBhbGlnbmVkUGl4ZWxz
W2ldID0gcGl4ZWxzW3BpeGVsc0luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgYWxpZ25lZFBp
eGVsc1tpICsgMV0gPSBwaXhlbHNbcGl4ZWxzSW5kZXggKyAxXTsKKyAgICAgICAgICAgICAgICAg
ICAgYWxpZ25lZFBpeGVsc1tpICsgMl0gPSBwaXhlbHNbcGl4ZWxzSW5kZXggKyAyXTsKKyAgICAg
ICAgICAgICAgICAgICAgYWxpZ25lZFBpeGVsc1tpICsgM10gPSBwaXhlbHNbcGl4ZWxzSW5kZXgg
KyAzXTsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxzSW5kZXggKz0gNDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhQnVmZmVyID0gdGhpcy5fY3Jl
YXRlQnVmZmVyKGFsaWduZWRQaXhlbHMsIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJ1ZmZlclVzYWdlX1RS
QU5TRkVSX1NSQyB8IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJ1ZmZlclVzYWdlX1RSQU5TRkVSX0RTVCk7
CisgICAgICAgICAgICB2YXIgYnVmZmVyVmlldyA9IHsKKyAgICAgICAgICAgICAgICBidWZmZXI6
IGRhdGFCdWZmZXIudW5kZXJseWluZ1Jlc291cmNlLAorICAgICAgICAgICAgICAgIHJvd1BpdGNo
OiByb3dQaXRjaCwKKyAgICAgICAgICAgICAgICBpbWFnZUhlaWdodDogaGVpZ2h0LAorICAgICAg
ICAgICAgICAgIG9mZnNldDogMCwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBjb21tYW5k
RW5jb2Rlci5jb3B5QnVmZmVyVG9UZXh0dXJlKGJ1ZmZlclZpZXcsIHRleHR1cmVWaWV3LCB0ZXh0
dXJlRXh0ZW50KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9kZXZpY2UuZ2V0UXVldWUoKS5z
dWJtaXQoW2NvbW1hbmRFbmNvZGVyLmZpbmlzaCgpXSk7CisgICAgICAgIHRoaXMuX3JlbGVhc2VC
dWZmZXIoZGF0YUJ1ZmZlcik7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9n
ZXRTYW1wbGVyRmlsdGVyRGVzY3JpcHRvciA9IGZ1bmN0aW9uIChpbnRlcm5hbFRleHR1cmUpIHsK
KyAgICAgICAgdmFyIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBtaXBtYXBGaWx0ZXI7CisgICAgICAg
IHN3aXRjaCAoaW50ZXJuYWxUZXh0dXJlLnNhbXBsaW5nTW9kZSkgeworICAgICAgICAgICAgY2Fz
ZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0u
VEVYVFVSRV9CSUxJTkVBUl9TQU1QTElOR01PREU6CisgICAgICAgICAgICAgICAgbWFnRmlsdGVy
ID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
V2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9kZV9saW5lYXI7CisgICAgICAgICAgICAgICAg
bWluRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9kZV9saW5lYXI7CisgICAgICAg
ICAgICAgICAgbWlwbWFwRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9kZV9uZWFy
ZXN0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uVEVYVFVSRV9UUklM
SU5FQVJfU0FNUExJTkdNT0RFOgorICAgICAgICAgICAgICAgIG1hZ0ZpbHRlciA9IF9XZWJHUFVf
d2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0
YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFyOworICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9
IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldl
YkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFyOworICAgICAgICAgICAgICAgIG1p
cG1hcEZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFyOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5H
TU9ERToKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0
ZXJNb2RlX25lYXJlc3Q7CisgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gX1dlYkdQVV93ZWJn
cHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRz
Il0uR1BVRmlsdGVyTW9kZV9uZWFyZXN0OworICAgICAgICAgICAgICAgIG1pcG1hcEZpbHRlciA9
IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldl
YkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFyOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siRW5naW5lIl0uVEVYVFVSRV9ORUFSRVNUX05FQVJFU1RfTUlQTkVBUkVTVDoK
KyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2Rl
X25lYXJlc3Q7CisgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BV
RmlsdGVyTW9kZV9uZWFyZXN0OworICAgICAgICAgICAgICAgIG1pcG1hcEZpbHRlciA9IF9XZWJH
UFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNv
bnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbmVhcmVzdDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkVuZ2luZSJdLlRFWFRVUkVfTkVBUkVTVF9MSU5FQVJfTUlQTkVBUkVTVDoKKyAgICAg
ICAgICAgICAgICBtYWdGaWx0ZXIgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX25lYXJl
c3Q7CisgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVy
TW9kZV9saW5lYXI7CisgICAgICAgICAgICAgICAgbWlwbWFwRmlsdGVyID0gX1dlYkdQVV93ZWJn
cHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRz
Il0uR1BVRmlsdGVyTW9kZV9uZWFyZXN0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
RW5naW5lIl0uVEVYVFVSRV9ORUFSRVNUX0xJTkVBUl9NSVBMSU5FQVI6CisgICAgICAgICAgICAg
ICAgbWFnRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9kZV9uZWFyZXN0OworICAg
ICAgICAgICAgICAgIG1pbkZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGlu
ZWFyOworICAgICAgICAgICAgICAgIG1pcG1hcEZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZp
bHRlck1vZGVfbGluZWFyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0u
VEVYVFVSRV9ORUFSRVNUX0xJTkVBUjoKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBfV2Vi
R1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVD
b25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX25lYXJlc3Q7CisgICAgICAgICAgICAgICAgbWluRmls
dGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9kZV9saW5lYXI7CisgICAgICAgICAgICAg
ICAgbWlwbWFwRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9kZV9uZWFyZXN0Owor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uVEVYVFVSRV9ORUFSRVNUX05F
QVJFU1Q6CisgICAgICAgICAgICAgICAgbWFnRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmls
dGVyTW9kZV9uZWFyZXN0OworICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9IF9XZWJHUFVfd2Vi
Z3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50
cyJdLkdQVUZpbHRlck1vZGVfbmVhcmVzdDsKKyAgICAgICAgICAgICAgICBtaXBtYXBGaWx0ZXIg
PSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX25lYXJlc3Q7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5URVhUVVJFX0xJTkVBUl9ORUFSRVNUX01JUE5FQVJFU1Q6
CisgICAgICAgICAgICAgICAgbWFnRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9k
ZV9saW5lYXI7CisgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BV
RmlsdGVyTW9kZV9uZWFyZXN0OworICAgICAgICAgICAgICAgIG1pcG1hcEZpbHRlciA9IF9XZWJH
UFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNv
bnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbmVhcmVzdDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkVuZ2luZSJdLlRFWFRVUkVfTElORUFSX05FQVJFU1RfTUlQTElORUFSOgorICAgICAg
ICAgICAgICAgIG1hZ0ZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFy
OworICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1v
ZGVfbmVhcmVzdDsKKyAgICAgICAgICAgICAgICBtaXBtYXBGaWx0ZXIgPSBfV2ViR1BVX3dlYmdw
dUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMi
XS5HUFVGaWx0ZXJNb2RlX2xpbmVhcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVu
Z2luZSJdLlRFWFRVUkVfTElORUFSX0xJTkVBUjoKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIg
PSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX2xpbmVhcjsKKyAgICAgICAgICAgICAgICBt
aW5GaWx0ZXIgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX2xpbmVhcjsKKyAgICAgICAg
ICAgICAgICBtaXBtYXBGaWx0ZXIgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX25lYXJl
c3Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5URVhUVVJFX0xJTkVB
Ul9ORUFSRVNUOgorICAgICAgICAgICAgICAgIG1hZ0ZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQ
VUZpbHRlck1vZGVfbGluZWFyOworICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9IF9XZWJHUFVf
d2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0
YW50cyJdLkdQVUZpbHRlck1vZGVfbmVhcmVzdDsKKyAgICAgICAgICAgICAgICBtaXBtYXBGaWx0
ZXIgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
WyJXZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX25lYXJlc3Q7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1hZ0ZpbHRl
ciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFyOworICAgICAgICAgICAgICAg
IG1pbkZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFyOworICAgICAg
ICAgICAgICAgIG1pcG1hcEZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGlu
ZWFyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICBtYWdGaWx0ZXI6IG1hZ0ZpbHRlciwKKyAgICAgICAgICAgIG1pbkZpbHRl
cjogbWluRmlsdGVyLAorICAgICAgICAgICAgbWlwbWFwRmlsdGVyOiBtaXBtYXBGaWx0ZXIKKyAg
ICAgICAgfTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2dldFdyYXBwaW5n
TW9kZSA9IGZ1bmN0aW9uIChtb2RlKSB7CisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAg
ICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
RW5naW5lIl0uVEVYVFVSRV9XUkFQX0FERFJFU1NNT0RFOgorICAgICAgICAgICAgICAgIHJldHVy
biBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVBZGRyZXNzTW9kZV9yZXBlYXQ7CisgICAgICAgICAgICBjYXNl
IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5U
RVhUVVJFX0NMQU1QX0FERFJFU1NNT0RFOgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BV
X3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25z
dGFudHMiXS5HUFVBZGRyZXNzTW9kZV9jbGFtcFRvRWRnZTsKKyAgICAgICAgICAgIGNhc2UgX0Vu
Z2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdLlRFWFRV
UkVfTUlSUk9SX0FERFJFU1NNT0RFOgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dl
YmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFu
dHMiXS5HUFVBZGRyZXNzTW9kZV9taXJyb3JSZXBlYXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IldlYkdQVUNvbnN0YW50cyJdLkdQVUFkZHJlc3NNb2RlX3JlcGVhdDsKKyAgICB9OworICAgIFdl
YkdQVUVuZ2luZS5wcm90b3R5cGUuX2dldFNhbXBsZXJXcmFwcGluZ0Rlc2NyaXB0b3IgPSBmdW5j
dGlvbiAoaW50ZXJuYWxUZXh0dXJlKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBh
ZGRyZXNzTW9kZVU6IHRoaXMuX2dldFdyYXBwaW5nTW9kZShpbnRlcm5hbFRleHR1cmUuX2NhY2hl
ZFdyYXBVKSwKKyAgICAgICAgICAgIGFkZHJlc3NNb2RlVjogdGhpcy5fZ2V0V3JhcHBpbmdNb2Rl
KGludGVybmFsVGV4dHVyZS5fY2FjaGVkV3JhcFYpLAorICAgICAgICAgICAgYWRkcmVzc01vZGVX
OiB0aGlzLl9nZXRXcmFwcGluZ01vZGUoaW50ZXJuYWxUZXh0dXJlLl9jYWNoZWRXcmFwUiksCisg
ICAgICAgIH07CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRTYW1wbGVy
RGVzY3JpcHRvciA9IGZ1bmN0aW9uIChpbnRlcm5hbFRleHR1cmUpIHsKKyAgICAgICAgcmV0dXJu
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXNzaWduIl0oe30sIHRoaXMu
X2dldFNhbXBsZXJGaWx0ZXJEZXNjcmlwdG9yKGludGVybmFsVGV4dHVyZSksIHRoaXMuX2dldFNh
bXBsZXJXcmFwcGluZ0Rlc2NyaXB0b3IoaW50ZXJuYWxUZXh0dXJlKSk7CisgICAgfTsKKyAgICBX
ZWJHUFVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVRleHR1cmUgPSBmdW5jdGlvbiAodXJsQXJnLCBu
b01pcG1hcCwgaW52ZXJ0WSwgc2NlbmUsIHNhbXBsaW5nTW9kZSwgb25Mb2FkLCBvbkVycm9yLCBi
dWZmZXIsIGZhbGxCYWNrLCBmb3JtYXQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAg
ICAgICAgaWYgKHNhbXBsaW5nTW9kZSA9PT0gdm9pZCAwKSB7IHNhbXBsaW5nTW9kZSA9IF9jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9U
UklMSU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIGlmIChvbkxvYWQgPT09IHZvaWQgMCkg
eyBvbkxvYWQgPSBudWxsOyB9CisgICAgICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25F
cnJvciA9IG51bGw7IH0KKyAgICAgICAgaWYgKGJ1ZmZlciA9PT0gdm9pZCAwKSB7IGJ1ZmZlciA9
IG51bGw7IH0KKyAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19p
bnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW50ZXJuYWxUZXh0
dXJlIl0odGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9VUkwpOwor
ICAgICAgICB2YXIgdXJsID0gU3RyaW5nKHVybEFyZyk7CisgICAgICAgIC8vIFRPRE8gV0VCR1BV
LiBGaW5kIGEgYmV0dGVyIHdheS4KKyAgICAgICAgLy8gVE9ETyBXRUJHUFUuIHRoaXMuX29wdGlv
bnMudGV4dHVyZVNpemUKKyAgICAgICAgdGV4dHVyZS51cmwgPSB1cmw7CisgICAgICAgIHRleHR1
cmUuZ2VuZXJhdGVNaXBNYXBzID0gIW5vTWlwbWFwOworICAgICAgICB0ZXh0dXJlLnNhbXBsaW5n
TW9kZSA9IHNhbXBsaW5nTW9kZTsKKyAgICAgICAgdGV4dHVyZS5pbnZlcnRZID0gaW52ZXJ0WTsK
KyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgdGV4dHVyZS5mb3JtYXQgPSBmb3Jt
YXQ7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHdlYmdsRW5naW5lVGV4dHVyZTsKKyAgICAgICAg
dmFyIG9uTG9hZEludGVybmFsID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGV4dHVyZS5p
c1JlYWR5ID0gd2ViZ2xFbmdpbmVUZXh0dXJlLmlzUmVhZHk7CisgICAgICAgICAgICB2YXIgd2lk
dGggPSB3ZWJnbEVuZ2luZVRleHR1cmUud2lkdGg7CisgICAgICAgICAgICB2YXIgaGVpZ2h0ID0g
d2ViZ2xFbmdpbmVUZXh0dXJlLmhlaWdodDsKKyAgICAgICAgICAgIHRleHR1cmUud2lkdGggPSB3
aWR0aDsKKyAgICAgICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAg
dGV4dHVyZS5iYXNlV2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHRleHR1cmUuYmFzZUhlaWdo
dCA9IGhlaWdodDsKKyAgICAgICAgICAgIHRleHR1cmUuX2lzUkdCRCA9IHdlYmdsRW5naW5lVGV4
dHVyZS5faXNSR0JEOworICAgICAgICAgICAgdGV4dHVyZS5fc3BoZXJpY2FsUG9seW5vbWlhbCA9
IHdlYmdsRW5naW5lVGV4dHVyZS5fc3BoZXJpY2FsUG9seW5vbWlhbDsKKyAgICAgICAgICAgIHZh
ciBtaXBNYXBzID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlNjYWxhciJdLkxvZzIoTWF0aC5tYXgod2lkdGgsIGhlaWdodCkpOworICAgICAgICAgICAg
bWlwTWFwcyA9IE1hdGguZmxvb3IobWlwTWFwcyk7CisgICAgICAgICAgICB2YXIgdGV4dHVyZUV4
dGVudCA9IHsKKyAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsCisgICAgICAgICAgICAgICAg
aGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAgICAgICAgZGVwdGg6IDEKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICB2YXIgdGV4dHVyZURlc2NyaXB0b3IgPSB7CisgICAgICAgICAgICAgICAg
ZGltZW5zaW9uOiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVUZXh0dXJlRGltZW5zaW9uXzJkLAorICAgICAg
ICAgICAgICAgIGZvcm1hdDogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVGV4dHVyZUZvcm1hdF9yZ2JhOHVu
b3JtLAorICAgICAgICAgICAgICAgIGFycmF5TGF5ZXJDb3VudDogMSwKKyAgICAgICAgICAgICAg
ICBtaXBMZXZlbENvdW50OiBub01pcG1hcCA/IDEgOiBtaXBNYXBzICsgMSwKKyAgICAgICAgICAg
ICAgICBzYW1wbGVDb3VudDogMSwKKyAgICAgICAgICAgICAgICBzaXplOiB0ZXh0dXJlRXh0ZW50
LAorICAgICAgICAgICAgICAgIHVzYWdlOiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVUZXh0dXJlVXNhZ2Vf
Q09QWV9EU1QgfCBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVUZXh0dXJlVXNhZ2VfU0FNUExFRAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIHZhciBncHVUZXh0dXJlID0gX3RoaXMuX2RldmljZS5jcmVh
dGVUZXh0dXJlKHRleHR1cmVEZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIHRleHR1cmUuX3dlYkdQ
VVRleHR1cmUgPSBncHVUZXh0dXJlOworICAgICAgICAgICAgaWYgKG5vTWlwbWFwKSB7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX3VwbG9hZEZyb21XZWJnbFRleHR1cmUod2ViZ2xFbmdpbmVUZXh0
dXJlLCBncHVUZXh0dXJlLCB3aWR0aCwgaGVpZ2h0LCAtMSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdXBsb2FkTWlwTWFwc0Zyb21X
ZWJnbFRleHR1cmUobWlwTWFwcywgd2ViZ2xFbmdpbmVUZXh0dXJlLCBncHVUZXh0dXJlLCB3aWR0
aCwgaGVpZ2h0LCAtMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0dXJlLl93ZWJH
UFVUZXh0dXJlVmlldyA9IGdwdVRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKyAgICAgICAg
ICAgIHdlYmdsRW5naW5lVGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0ZXh0dXJlLm9u
TG9hZGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGV4dHVyZSk7CisgICAgICAgICAgICB0
ZXh0dXJlLm9uTG9hZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICAgICAgaWYgKG9uTG9h
ZCkgeworICAgICAgICAgICAgICAgIG9uTG9hZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgICAgICB3ZWJnbEVuZ2luZVRleHR1cmUgPSB0aGlzLl9kZWNvZGVFbmdpbmUuY3JlYXRl
VGV4dHVyZSh1cmxBcmcsIG5vTWlwbWFwLCBpbnZlcnRZLCBzY2VuZSwgc2FtcGxpbmdNb2RlLCBv
bkxvYWRJbnRlcm5hbCwgb25FcnJvciwgYnVmZmVyLCBmYWxsQmFjaywgZm9ybWF0KTsKKyAgICAg
ICAgdGhpcy5faW50ZXJuYWxUZXh0dXJlc0NhY2hlLnB1c2godGV4dHVyZSk7CisgICAgICAgIHJl
dHVybiB0ZXh0dXJlOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5jcmVhdGVD
dWJlVGV4dHVyZSA9IGZ1bmN0aW9uIChyb290VXJsLCBzY2VuZSwgZmlsZXMsIG5vTWlwbWFwLCBv
bkxvYWQsIG9uRXJyb3IsIGZvcm1hdCwgZm9yY2VkRXh0ZW5zaW9uLCBjcmVhdGVQb2x5bm9taWFs
cywgbG9kU2NhbGUsIGxvZE9mZnNldCwgZmFsbGJhY2ssIGV4Y2x1ZGVMb2FkZXJzKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChvbkxvYWQgPT09IHZvaWQgMCkgeyBv
bkxvYWQgPSBudWxsOyB9CisgICAgICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJv
ciA9IG51bGw7IH0KKyAgICAgICAgaWYgKGZvcmNlZEV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IGZv
cmNlZEV4dGVuc2lvbiA9IG51bGw7IH0KKyAgICAgICAgaWYgKGNyZWF0ZVBvbHlub21pYWxzID09
PSB2b2lkIDApIHsgY3JlYXRlUG9seW5vbWlhbHMgPSBmYWxzZTsgfQorICAgICAgICBpZiAobG9k
U2NhbGUgPT09IHZvaWQgMCkgeyBsb2RTY2FsZSA9IDA7IH0KKyAgICAgICAgaWYgKGxvZE9mZnNl
dCA9PT0gdm9pZCAwKSB7IGxvZE9mZnNldCA9IDA7IH0KKyAgICAgICAgaWYgKGZhbGxiYWNrID09
PSB2b2lkIDApIHsgZmFsbGJhY2sgPSBudWxsOyB9CisgICAgICAgIGlmIChleGNsdWRlTG9hZGVy
cyA9PT0gdm9pZCAwKSB7IGV4Y2x1ZGVMb2FkZXJzID0gW107IH0KKyAgICAgICAgdmFyIHRleHR1
cmUgPSBmYWxsYmFjayA/IGZhbGxiYWNrIDogbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfaW50ZXJu
YWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkludGVybmFsVGV4dHVyZSJd
KHRoaXMsIF9NYXRlcmlhbHNfVGV4dHVyZXNfaW50ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIkludGVybmFsVGV4dHVyZSJdLkRBVEFTT1VSQ0VfQ1VCRSk7CisgICAg
ICAgIHRleHR1cmUuaXNDdWJlID0gdHJ1ZTsKKyAgICAgICAgdGV4dHVyZS51cmwgPSByb290VXJs
OworICAgICAgICB0ZXh0dXJlLmdlbmVyYXRlTWlwTWFwcyA9ICFub01pcG1hcDsKKyAgICAgICAg
Ly8gVE9ETyBXRUJHUFUuIEN1YmUgVGV4dHVyZSBTYW1wbGluZyBNb2RlLgorICAgICAgICB0ZXh0
dXJlLnNhbXBsaW5nTW9kZSA9IG5vTWlwbWFwID8gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5URVhUVVJFX0JJTElORUFSX1NBTVBMSU5HTU9ERSA6
IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVY
VFVSRV9UUklMSU5FQVJfU0FNUExJTkdNT0RFOworICAgICAgICB0ZXh0dXJlLl9sb2RHZW5lcmF0
aW9uU2NhbGUgPSBsb2RTY2FsZTsKKyAgICAgICAgdGV4dHVyZS5fbG9kR2VuZXJhdGlvbk9mZnNl
dCA9IGxvZE9mZnNldDsKKyAgICAgICAgaWYgKCF0aGlzLl9kb05vdEhhbmRsZUNvbnRleHRMb3N0
KSB7CisgICAgICAgICAgICB0ZXh0dXJlLl9leHRlbnNpb24gPSBmb3JjZWRFeHRlbnNpb247Cisg
ICAgICAgICAgICB0ZXh0dXJlLl9maWxlcyA9IGZpbGVzOworICAgICAgICB9CisgICAgICAgIHZh
ciB3ZWJnbEVuZ2luZVRleHR1cmU7CisgICAgICAgIHZhciBvbkxvYWRJbnRlcm5hbCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHRleHR1cmUuaXNSZWFkeSA9IHdlYmdsRW5naW5lVGV4dHVy
ZS5pc1JlYWR5OworICAgICAgICAgICAgdmFyIHdpZHRoOworICAgICAgICAgICAgdmFyIGhlaWdo
dDsKKyAgICAgICAgICAgIGlmIChub01pcG1hcCkgeworICAgICAgICAgICAgICAgIHdpZHRoID0g
d2ViZ2xFbmdpbmVUZXh0dXJlLndpZHRoOworICAgICAgICAgICAgICAgIGhlaWdodCA9IHdlYmds
RW5naW5lVGV4dHVyZS5oZWlnaHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIFdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgU2FmYXJpIFRlY2huaWNhbCBQcmV2aWV3
IGJyYW5jaGVkIGJlZm9yZSBTYW1wbGVMZXZlbCgpIHdhcyBpbXBsZW1lbnRlZC4KKyAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxMzg1
CisgICAgICAgICAgICAgICAgdmFyIGN1YmVNYXBUZXh0dXJlQ2FwID0gMTY7CisgICAgICAgICAg
ICAgICAgaWYgKHdlYmdsRW5naW5lVGV4dHVyZS53aWR0aCA8IGN1YmVNYXBUZXh0dXJlQ2FwIHx8
IHdlYmdsRW5naW5lVGV4dHVyZS5oZWlnaHQgPCBjdWJlTWFwVGV4dHVyZUNhcCkKKyAgICAgICAg
ICAgICAgICAgICAgYWxlcnQoIlRleHR1cmUgdG9vIHNtYWxsIik7CisgICAgICAgICAgICAgICAg
d2lkdGggPSBjdWJlTWFwVGV4dHVyZUNhcDsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBjdWJl
TWFwVGV4dHVyZUNhcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBkZXB0aCA9IDE7
CisgICAgICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7CisgICAgICAgICAgICB0ZXh0dXJl
LmhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgIHRleHR1cmUuYmFzZVdpZHRoID0gd2lkdGg7
CisgICAgICAgICAgICB0ZXh0dXJlLmJhc2VIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICB0
ZXh0dXJlLmRlcHRoID0gZGVwdGg7CisgICAgICAgICAgICB0ZXh0dXJlLmJhc2VEZXB0aCA9IGRl
cHRoOworICAgICAgICAgICAgdGV4dHVyZS5faXNSR0JEID0gd2ViZ2xFbmdpbmVUZXh0dXJlLl9p
c1JHQkQ7CisgICAgICAgICAgICB0ZXh0dXJlLl9zcGhlcmljYWxQb2x5bm9taWFsID0gd2ViZ2xF
bmdpbmVUZXh0dXJlLl9zcGhlcmljYWxQb2x5bm9taWFsOworICAgICAgICAgICAgdmFyIG1pcE1h
cHMgPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2Nh
bGFyIl0uTG9nMih3aWR0aCk7CisgICAgICAgICAgICBtaXBNYXBzID0gTWF0aC5yb3VuZChtaXBN
YXBzKTsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlRXh0ZW50ID0geworICAgICAgICAgICAgICAg
IHdpZHRoOiB3aWR0aCwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCwKKyAgICAgICAg
ICAgICAgICBkZXB0aDogZGVwdGgsCisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIHRl
eHR1cmVEZXNjcmlwdG9yID0geworICAgICAgICAgICAgICAgIGRpbWVuc2lvbjogX1dlYkdQVV93
ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3Rh
bnRzIl0uR1BVVGV4dHVyZURpbWVuc2lvbl8yZCwKKyAgICAgICAgICAgICAgICBmb3JtYXQ6IF9X
ZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQ
VUNvbnN0YW50cyJdLkdQVVRleHR1cmVGb3JtYXRfcmdiYTh1bm9ybSwKKyAgICAgICAgICAgICAg
ICBhcnJheUxheWVyQ291bnQ6IDEsCisgICAgICAgICAgICAgICAgbWlwTGV2ZWxDb3VudDogbm9N
aXBtYXAgPyAxIDogbWlwTWFwcyArIDEsCisgICAgICAgICAgICAgICAgc2FtcGxlQ291bnQ6IDEs
CisgICAgICAgICAgICAgICAgc2l6ZTogdGV4dHVyZUV4dGVudCwKKyAgICAgICAgICAgICAgICB1
c2FnZTogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVGV4dHVyZVVzYWdlX0NPUFlfRFNUIHwgX1dlYkdQVV93
ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3Rh
bnRzIl0uR1BVVGV4dHVyZVVzYWdlX1NBTVBMRUQKKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB2YXIgZ3B1VGV4dHVyZSA9IF90aGlzLl9kZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVz
Y3JpcHRvcik7CisgICAgICAgICAgICB0ZXh0dXJlLl93ZWJHUFVUZXh0dXJlID0gZ3B1VGV4dHVy
ZTsKKyAgICAgICAgICAgIHZhciBmYWNlcyA9IFswXTsKKyAgICAgICAgICAgIGZvciAodmFyIF9p
ID0gMCwgZmFjZXNfMSA9IGZhY2VzOyBfaSA8IGZhY2VzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGZhY2UgPSBmYWNlc18xW19pXTsKKyAgICAgICAgICAgICAgICBpZiAo
bm9NaXBtYXApIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3VwbG9hZEZyb21XZWJnbFRl
eHR1cmUod2ViZ2xFbmdpbmVUZXh0dXJlLCBncHVUZXh0dXJlLCB3aWR0aCwgaGVpZ2h0LCBmYWNl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl91cGxvYWRNaXBNYXBzRnJvbVdlYmdsVGV4dHVyZShtaXBNYXBzLCB3
ZWJnbEVuZ2luZVRleHR1cmUsIGdwdVRleHR1cmUsIHdpZHRoLCBoZWlnaHQsIGZhY2UpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHR1cmUuX3dlYkdQ
VVRleHR1cmVWaWV3ID0gZ3B1VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworICAgICAgICAg
ICAgd2ViZ2xFbmdpbmVUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIG9uTG9hZCAmJiBv
bkxvYWQoKTsKKyAgICAgICAgfTsKKyAgICAgICAgd2ViZ2xFbmdpbmVUZXh0dXJlID0gdGhpcy5f
ZGVjb2RlRW5naW5lLmNyZWF0ZUN1YmVUZXh0dXJlKHJvb3RVcmwsIHNjZW5lLCBmaWxlcywgbm9N
aXBtYXAsIG9uTG9hZEludGVybmFsLCBvbkVycm9yLCBmb3JtYXQsIGZvcmNlZEV4dGVuc2lvbiwg
Y3JlYXRlUG9seW5vbWlhbHMsIGxvZFNjYWxlLCBsb2RPZmZzZXQsIGZhbGxiYWNrLCBleGNsdWRl
TG9hZGVycyk7CisgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dHVyZXNDYWNoZS5wdXNoKHRleHR1
cmUpOworICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5w
cm90b3R5cGUudXBkYXRlVGV4dHVyZVNhbXBsaW5nTW9kZSA9IGZ1bmN0aW9uIChzYW1wbGluZ01v
ZGUsIHRleHR1cmUpIHsKKyAgICAgICAgdGV4dHVyZS5zYW1wbGluZ01vZGUgPSBzYW1wbGluZ01v
ZGU7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnVwZGF0ZUR5bmFtaWNUZXh0
dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGNhbnZhcywgaW52ZXJ0WSwgcHJlbXVsQWxwaGEsIGZv
cm1hdCkgeworICAgICAgICBpZiAocHJlbXVsQWxwaGEgPT09IHZvaWQgMCkgeyBwcmVtdWxBbHBo
YSA9IGZhbHNlOyB9CisgICAgICAgIHRocm93ICJVbmltcGxlbWVudGVkIHVwZGF0ZUR5bmFtaWNU
ZXh0dXJlIG9uIFdlYkdQVSBzbyBmYXIiOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3Rv
dHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24gKGNoYW5uZWwsIF8sIHRleHR1cmUsIG5hbWUpIHsK
KyAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRFZmZlY3QpIHsKKyAgICAgICAgICAgIHZhciBwaXBl
bGluZSA9IHRoaXMuX2N1cnJlbnRFZmZlY3QuX3BpcGVsaW5lQ29udGV4dDsKKyAgICAgICAgICAg
IGlmICghdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHBpcGVsaW5lLnNhbXBsZXJzW25hbWVd
ID0gbnVsbDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgaW50ZXJuYWxUZXh0dXJlID0gdGV4dHVyZS5nZXRJbnRlcm5hbFRleHR1cmUoKTsK
KyAgICAgICAgICAgIGlmIChpbnRlcm5hbFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBpbnRl
cm5hbFRleHR1cmUuX2NhY2hlZFdyYXBVID0gdGV4dHVyZS53cmFwVTsKKyAgICAgICAgICAgICAg
ICBpbnRlcm5hbFRleHR1cmUuX2NhY2hlZFdyYXBWID0gdGV4dHVyZS53cmFwVjsKKyAgICAgICAg
ICAgICAgICBpbnRlcm5hbFRleHR1cmUuX2NhY2hlZFdyYXBSID0gdGV4dHVyZS53cmFwUjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwaXBlbGluZS5zYW1wbGVyc1tuYW1lXSkgewor
ICAgICAgICAgICAgICAgIHBpcGVsaW5lLnNhbXBsZXJzW25hbWVdLnRleHR1cmUgPSBpbnRlcm5h
bFRleHR1cmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBUT0RPIFdFQkdQVS4gMTIxIG1hcHBpbmcgc2FtcGxlcnMgPC0+IGF2YWlsYWJsZVNh
bXBsZXJzCisgICAgICAgICAgICAgICAgdmFyIGF2YWlsYWJsZVNhbXBsZXIgPSBwaXBlbGluZS5h
dmFpbGFibGVTYW1wbGVyc1tuYW1lXTsKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlU2Ft
cGxlcikgeworICAgICAgICAgICAgICAgICAgICBwaXBlbGluZS5zYW1wbGVyc1tuYW1lXSA9IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNldEluZGV4OiBhdmFpbGFibGVTYW1wbGVyLnNldElu
ZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUJpbmRpbmc6IGF2YWlsYWJsZVNh
bXBsZXIuYmluZGluZ0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlckJpbmRp
bmc6IGF2YWlsYWJsZVNhbXBsZXIuYmluZGluZ0luZGV4ICsgMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmU6IGludGVybmFsVGV4dHVyZQorICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAg
V2ViR1BVRW5naW5lLnByb3RvdHlwZS5iaW5kU2FtcGxlcnMgPSBmdW5jdGlvbiAoZWZmZWN0KSB7
IH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fYmluZFRleHR1cmVEaXJlY3RseSA9IGZ1
bmN0aW9uICh0YXJnZXQsIHRleHR1cmUpIHsKKyAgICAgICAgaWYgKHRoaXMuX2JvdW5kVGV4dHVy
ZXNDYWNoZVt0aGlzLl9hY3RpdmVDaGFubmVsXSAhPT0gdGV4dHVyZSkgeworICAgICAgICAgICAg
dGhpcy5fYm91bmRUZXh0dXJlc0NhY2hlW3RoaXMuX2FjdGl2ZUNoYW5uZWxdID0gdGV4dHVyZTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlw
ZS5fYmluZFRleHR1cmUgPSBmdW5jdGlvbiAoY2hhbm5lbCwgdGV4dHVyZSkgeworICAgICAgICBp
ZiAoY2hhbm5lbCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KDAsIHRleHR1cmUpOworICAgIH07CisgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl91cGxvYWRDb21wcmVzc2Vk
RGF0YVRvVGV4dHVyZURpcmVjdGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBkYXRhLCBmYWNlSW5kZXgsIGxvZCkgeworICAgICAgICBpZiAoZmFj
ZUluZGV4ID09PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAgICAgICBpZiAobG9kID09
PSB2b2lkIDApIHsgbG9kID0gMDsgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBX
ZWJHUFVFbmdpbmUucHJvdG90eXBlLl91cGxvYWREYXRhVG9UZXh0dXJlRGlyZWN0bHkgPSBmdW5j
dGlvbiAodGV4dHVyZSwgaW1hZ2VEYXRhLCBmYWNlSW5kZXgsIGxvZCkgeworICAgICAgICBpZiAo
ZmFjZUluZGV4ID09PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAgICAgICBpZiAobG9k
ID09PSB2b2lkIDApIHsgbG9kID0gMDsgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl91cGxvYWRBcnJheUJ1ZmZlclZpZXdUb1RleHR1cmUg
PSBmdW5jdGlvbiAodGV4dHVyZSwgaW1hZ2VEYXRhLCBmYWNlSW5kZXgsIGxvZCkgeworICAgICAg
ICBpZiAoZmFjZUluZGV4ID09PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAgICAgICBp
ZiAobG9kID09PSB2b2lkIDApIHsgbG9kID0gMDsgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4g
Ki8KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl91cGxvYWRJbWFnZVRvVGV4dHVyZSA9IGZ1
bmN0aW9uICh0ZXh0dXJlLCBpbWFnZSwgZmFjZUluZGV4LCBsb2QpIHsKKyAgICAgICAgaWYgKGZh
Y2VJbmRleCA9PT0gdm9pZCAwKSB7IGZhY2VJbmRleCA9IDA7IH0KKyAgICAgICAgaWYgKGxvZCA9
PT0gdm9pZCAwKSB7IGxvZCA9IDA7IH0KKyAgICB9OworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXIgVGFyZ2V0IFRl
eHR1cmVzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXZWJHUFVFbmdpbmUucHJv
dG90eXBlLmNyZWF0ZVJlbmRlclRhcmdldFRleHR1cmUgPSBmdW5jdGlvbiAoc2l6ZSwgb3B0aW9u
cykgeworICAgICAgICB2YXIgZnVsbE9wdGlvbnMgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19y
ZW5kZXJUYXJnZXRDcmVhdGlvbk9wdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
UmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25zIl0oKTsKKyAgICAgICAgaWYgKG9wdGlvbnMgIT09
IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAg
IGZ1bGxPcHRpb25zLmdlbmVyYXRlTWlwTWFwcyA9IG9wdGlvbnMuZ2VuZXJhdGVNaXBNYXBzOwor
ICAgICAgICAgICAgZnVsbE9wdGlvbnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlciA9IG9wdGlvbnMuZ2Vu
ZXJhdGVEZXB0aEJ1ZmZlciA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuZ2VuZXJhdGVE
ZXB0aEJ1ZmZlcjsKKyAgICAgICAgICAgIGZ1bGxPcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZl
ciA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlRGVwdGhCdWZmZXIgJiYgb3B0aW9ucy5nZW5lcmF0ZVN0
ZW5jaWxCdWZmZXI7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy50eXBlID0gb3B0aW9ucy50eXBl
ID09PSB1bmRlZmluZWQgPyBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCA6IG9wdGlvbnMudHlwZTsKKyAg
ICAgICAgICAgIGZ1bGxPcHRpb25zLnNhbXBsaW5nTW9kZSA9IG9wdGlvbnMuc2FtcGxpbmdNb2Rl
ID09PSB1bmRlZmluZWQgPyBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IkNvbnN0YW50cyJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERSA6IG9wdGlvbnMuc2Ft
cGxpbmdNb2RlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZnVsbE9w
dGlvbnMuZ2VuZXJhdGVNaXBNYXBzID0gb3B0aW9uczsKKyAgICAgICAgICAgIGZ1bGxPcHRpb25z
LmdlbmVyYXRlRGVwdGhCdWZmZXIgPSB0cnVlOworICAgICAgICAgICAgZnVsbE9wdGlvbnMuZ2Vu
ZXJhdGVTdGVuY2lsQnVmZmVyID0gZmFsc2U7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy50eXBl
ID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5U
RVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy5zYW1wbGlu
Z01vZGUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50
cyJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERTsKKyAgICAgICAgfQorICAgICAgICB2
YXIgdGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJJbnRlcm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJp
YWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9f
WyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09VUkNFX1JFTkRFUlRBUkdFVCk7CisgICAgICAgIHZh
ciB3aWR0aCA9IHNpemUud2lkdGggfHwgc2l6ZTsKKyAgICAgICAgdmFyIGhlaWdodCA9IHNpemUu
aGVpZ2h0IHx8IHNpemU7CisgICAgICAgIHRleHR1cmUuX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IHt9
OworICAgICAgICB0ZXh0dXJlLl9mcmFtZWJ1ZmZlciA9IHt9OworICAgICAgICB0ZXh0dXJlLmJh
c2VXaWR0aCA9IHdpZHRoOworICAgICAgICB0ZXh0dXJlLmJhc2VIZWlnaHQgPSBoZWlnaHQ7Cisg
ICAgICAgIHRleHR1cmUud2lkdGggPSB3aWR0aDsKKyAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBo
ZWlnaHQ7CisgICAgICAgIHRleHR1cmUuaXNSZWFkeSA9IHRydWU7CisgICAgICAgIHRleHR1cmUu
c2FtcGxlcyA9IDE7CisgICAgICAgIHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzID0gZnVsbE9wdGlv
bnMuZ2VuZXJhdGVNaXBNYXBzID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICB0ZXh0dXJlLnNhbXBs
aW5nTW9kZSA9IGZ1bGxPcHRpb25zLnNhbXBsaW5nTW9kZTsKKyAgICAgICAgdGV4dHVyZS50eXBl
ID0gZnVsbE9wdGlvbnMudHlwZTsKKyAgICAgICAgdGV4dHVyZS5fZ2VuZXJhdGVEZXB0aEJ1ZmZl
ciA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlRGVwdGhCdWZmZXI7CisgICAgICAgIHRleHR1cmUuX2dl
bmVyYXRlU3RlbmNpbEJ1ZmZlciA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA/
IHRydWUgOiBmYWxzZTsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxUZXh0dXJlc0NhY2hlLnB1c2go
dGV4dHVyZSk7CisgICAgICAgIHJldHVybiB0ZXh0dXJlOworICAgIH07CisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRl
ciBDb21tYW5kcworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLyoqCisgICAgICog
QmVnaW4gYSBuZXcgZnJhbWUKKyAgICAgKi8KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmJl
Z2luRnJhbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuYmVnaW5G
cmFtZS5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl91cGxvYWRFbmNvZGVyID0gdGhpcy5fZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKHRoaXMuX3VwbG9hZEVuY29kZXJEZXNjcmlwdG9yKTsK
KyAgICAgICAgdGhpcy5fcmVuZGVyRW5jb2RlciA9IHRoaXMuX2RldmljZS5jcmVhdGVDb21tYW5k
RW5jb2Rlcih0aGlzLl9yZW5kZXJFbmNvZGVyRGVzY3JpcHRvcik7CisgICAgfTsKKyAgICBXZWJH
UFVFbmdpbmUucHJvdG90eXBlLl9zaG91bGRPbmx5VXBkYXRlQ2FtZXJhcyA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Zyb3plbkNvbW1hbmRzICE9PSBudWxsOworICAgIH07
CisgICAgLyoqCisgICAgICogRW5kIHRoZSBjdXJyZW50IGZyYW1lCisgICAgICovCisgICAgV2Vi
R1BVRW5naW5lLnByb3RvdHlwZS5lbmRGcmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy5fZW5kUmVuZGVyUGFzcygpOworICAgICAgICBpZiAodGhpcy5fZnJlZXplQ29tbWFuZHMgJiYg
dGhpcy5fZnJvemVuQ29tbWFuZHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2NvbW1hbmRCdWZmZXJz
WzBdID0gdGhpcy5fZnJvemVuQ29tbWFuZHNbMF07CisgICAgICAgICAgICB0aGlzLl9jb21tYW5k
QnVmZmVyc1sxXSA9IHRoaXMuX2Zyb3plbkNvbW1hbmRzWzFdOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGhpcy5fY29tbWFuZEJ1ZmZlcnNbMF0gPSB0aGlzLl91cGxv
YWRFbmNvZGVyLmZpbmlzaCgpOworICAgICAgICAgICAgdGhpcy5fY29tbWFuZEJ1ZmZlcnNbMV0g
PSB0aGlzLl9yZW5kZXJFbmNvZGVyLmZpbmlzaCgpOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLl9mcmVlemVDb21tYW5kcyAmJiAhdGhpcy5fZnJvemVuQ29tbWFuZHMpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2Zyb3plbkNvbW1hbmRzID0gW107CisgICAgICAgICAgICB0aGlzLl9mcm96ZW5D
b21tYW5kc1swXSA9IHRoaXMuX2NvbW1hbmRCdWZmZXJzWzBdOworICAgICAgICAgICAgdGhpcy5f
ZnJvemVuQ29tbWFuZHNbMV0gPSB0aGlzLl9jb21tYW5kQnVmZmVyc1sxXTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9kZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQodGhpcy5fY29tbWFuZEJ1ZmZl
cnMpOworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmVuZEZyYW1lLmNhbGwodGhpcyk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBGcmVlemVzIHRoZSBjdXJyZW50IGxpc3Qgb2YgY29tbWFuZHMg
dG8gc3BlZWQgdXAgcmVuZGVyaW5nIG9mIHN1YiBzZXF1ZW50IGZyYW1lcy4KKyAgICAgKi8KKyAg
ICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmZyZWV6ZUNvbW1hbmRzID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB0aGlzLl9mcmVlemVDb21tYW5kcyA9IHRydWU7CisgICAgICAgIHRoaXMuX2Zyb3pl
bkNvbW1hbmRzID0gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEZyZWV6ZXMgdGhlIGN1
cnJlbnQgbGlzdCBvZiBjb21tYW5kcyB0byBzcGVlZCB1cCByZW5kZXJpbmcgb2Ygc3ViIHNlcXVl
bnQgZnJhbWVzLgorICAgICAqLworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUudW5GcmVlemVD
b21tYW5kcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fZnJlZXplQ29tbWFuZHMgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5fZnJvemVuQ29tbWFuZHMgPSBudWxsOworICAgIH07CisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlbmRlciBQYXNzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXZWJHUFVF
bmdpbmUucHJvdG90eXBlLl9zdGFydE1haW5SZW5kZXJQYXNzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAodGhpcy5fY3VycmVudFJlbmRlclBhc3MpIHsKKyAgICAgICAgICAgIHRoaXMuX2Vu
ZFJlbmRlclBhc3MoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXNvbHZlIGluIGNhc2Ugb2Yg
TVNBQQorICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5hbnRpYWxpYXNpbmcpIHsKKyAgICAgICAg
ICAgIHRoaXMuX21haW5Db2xvckF0dGFjaG1lbnRzWzBdLnJlc29sdmVUYXJnZXQgPSB0aGlzLl9z
d2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKS5jcmVhdGVWaWV3KCk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9tYWluQ29sb3JBdHRhY2htZW50c1swXS5h
dHRhY2htZW50ID0gdGhpcy5fc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCkuY3JlYXRlRGVm
YXVsdFZpZXcoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50UmVuZGVyUGFzcyA9
IHRoaXMuX3JlbmRlckVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHsKKyAgICAgICAgICAgIGNvbG9y
QXR0YWNobWVudHM6IHRoaXMuX21haW5Db2xvckF0dGFjaG1lbnRzLAorICAgICAgICAgICAgZGVw
dGhTdGVuY2lsQXR0YWNobWVudDogdGhpcy5fbWFpbkRlcHRoQXR0YWNobWVudAorICAgICAgICB9
KTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2VuZFJlbmRlclBhc3MgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50UmVuZGVyUGFzcykgeworICAg
ICAgICAgICAgdGhpcy5fY3VycmVudFJlbmRlclBhc3MuZW5kUGFzcygpOworICAgICAgICAgICAg
dGhpcy5fY3VycmVudFJlbmRlclBhc3MgPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICBX
ZWJHUFVFbmdpbmUucHJvdG90eXBlLmJpbmRGcmFtZWJ1ZmZlciA9IGZ1bmN0aW9uICh0ZXh0dXJl
LCBmYWNlSW5kZXgsIHJlcXVpcmVkV2lkdGgsIHJlcXVpcmVkSGVpZ2h0LCBmb3JjZUZ1bGxzY3Jl
ZW5WaWV3cG9ydCkgeworICAgICAgICBpZiAodGhpcy5fY3VycmVudFJlbmRlclRhcmdldCkgewor
ICAgICAgICAgICAgdGhpcy51bkJpbmRGcmFtZWJ1ZmZlcih0aGlzLl9jdXJyZW50UmVuZGVyVGFy
Z2V0KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0ID0gdGV4
dHVyZTsKKyAgICAgICAgdGhpcy5fY3VycmVudEZyYW1lYnVmZmVyID0gdGV4dHVyZS5fTVNBQUZy
YW1lYnVmZmVyID8gdGV4dHVyZS5fTVNBQUZyYW1lYnVmZmVyIDogdGV4dHVyZS5fZnJhbWVidWZm
ZXI7CisgICAgICAgIGlmICh0aGlzLl9jYWNoZWRWaWV3cG9ydCAmJiAhZm9yY2VGdWxsc2NyZWVu
Vmlld3BvcnQpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0Vmlld3BvcnQodGhpcy5fY2FjaGVkVmll
d3BvcnQsIHJlcXVpcmVkV2lkdGgsIHJlcXVpcmVkSGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH07
CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS51bkJpbmRGcmFtZWJ1ZmZlciA9IGZ1bmN0aW9u
ICh0ZXh0dXJlLCBkaXNhYmxlR2VuZXJhdGVNaXBNYXBzLCBvbkJlZm9yZVVuYmluZCkgeworICAg
ICAgICBpZiAoZGlzYWJsZUdlbmVyYXRlTWlwTWFwcyA9PT0gdm9pZCAwKSB7IGRpc2FibGVHZW5l
cmF0ZU1pcE1hcHMgPSBmYWxzZTsgfQorICAgICAgICB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0
ID0gbnVsbDsKKyAgICAgICAgaWYgKG9uQmVmb3JlVW5iaW5kKSB7CisgICAgICAgICAgICBpZiAo
dGV4dHVyZS5fTVNBQUZyYW1lYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVu
dEZyYW1lYnVmZmVyID0gdGV4dHVyZS5fZnJhbWVidWZmZXI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBvbkJlZm9yZVVuYmluZCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2N1cnJl
bnRGcmFtZWJ1ZmZlciA9IG51bGw7CisgICAgfTsKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRUb3BvbG9n
eSA9IGZ1bmN0aW9uIChmaWxsTW9kZSkgeworICAgICAgICBzd2l0Y2ggKGZpbGxNb2RlKSB7Cisg
ICAgICAgICAgICAvLyBUcmlhbmdsZSB2aWV3cworICAgICAgICAgICAgY2FzZSBfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RyaWFu
Z2xlRmlsbE1vZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVBy
aW1pdGl2ZVRvcG9sb2d5X3RyaWFuZ2xlTGlzdDsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9Qb2lu
dEZpbGxNb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVQcmlt
aXRpdmVUb3BvbG9neV9wb2ludExpc3Q7CisgICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfV2lyZUZyYW1l
RmlsbE1vZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVByaW1p
dGl2ZVRvcG9sb2d5X2xpbmVMaXN0OworICAgICAgICAgICAgLy8gRHJhdyBtb2RlcworICAgICAg
ICAgICAgY2FzZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0
YW50cyJdLk1BVEVSSUFMX1BvaW50TGlzdERyYXdNb2RlOgorICAgICAgICAgICAgICAgIHJldHVy
biBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVQcmltaXRpdmVUb3BvbG9neV9wb2ludExpc3Q7CisgICAgICAg
ICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3Rh
bnRzIl0uTUFURVJJQUxfTGluZUxpc3REcmF3TW9kZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
X1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2Vi
R1BVQ29uc3RhbnRzIl0uR1BVUHJpbWl0aXZlVG9wb2xvZ3lfbGluZUxpc3Q7CisgICAgICAgICAg
ICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRz
Il0uTUFURVJJQUxfTGluZUxvb3BEcmF3TW9kZToKKyAgICAgICAgICAgICAgICAvLyByZXR1cm4g
dGhpcy5fZ2wuTElORV9MT09QOworICAgICAgICAgICAgICAgIC8vIFRPRE8gV0VCR1BVLiBMaW5l
IExvb3AgTW9kZSBGYWxsYmFjayBhdCBidWZmZXIgbG9hZCB0aW1lLgorICAgICAgICAgICAgICAg
IHRocm93ICJMaW5lTG9vcCBpcyBhbiB1bnN1cHBvcnRlZCBmaWxsbW9kZSBpbiBXZWJHUFUiOwor
ICAgICAgICAgICAgY2FzZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IkNvbnN0YW50cyJdLk1BVEVSSUFMX0xpbmVTdHJpcERyYXdNb2RlOgorICAgICAgICAgICAgICAg
IHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVQcmltaXRpdmVUb3BvbG9neV9saW5lU3RyaXA7Cisg
ICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
Q29uc3RhbnRzIl0uTUFURVJJQUxfVHJpYW5nbGVTdHJpcERyYXdNb2RlOgorICAgICAgICAgICAg
ICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVQcmltaXRpdmVUb3BvbG9neV90cmlhbmdsZVN0
cmlwOworICAgICAgICAgICAgY2FzZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV84X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RyaWFuZ2xlRmFuRHJhd01vZGU6CisgICAgICAg
ICAgICAgICAgLy8gcmV0dXJuIHRoaXMuX2dsLlRSSUFOR0xFX0ZBTjsKKyAgICAgICAgICAgICAg
ICAvLyBUT0RPIFdFQkdQVS4gVHJpYW5nbGUgRmFuIE1vZGUgRmFsbGJhY2sgYXQgYnVmZmVyIGxv
YWQgdGltZS4KKyAgICAgICAgICAgICAgICB0aHJvdyAiVHJpYW5nbGVGYW4gaXMgYW4gdW5zdXBw
b3J0ZWQgZmlsbG1vZGUgaW4gV2ViR1BVIjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVByaW1pdGl2ZVRvcG9sb2d5X3RyaWFu
Z2xlTGlzdDsKKyAgICAgICAgfQorICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5f
Z2V0Q29tcGFyZUZ1bmN0aW9uID0gZnVuY3Rpb24gKGNvbXBhcmVGdW5jdGlvbikgeworICAgICAg
ICBzd2l0Y2ggKGNvbXBhcmVGdW5jdGlvbikgeworICAgICAgICAgICAgY2FzZSBfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLkFMV0FZUzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQ29tcGFyZUZ1bmN0aW9uX2Fsd2F5
czsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJDb25zdGFudHMiXS5FUVVBTDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93
ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3Rh
bnRzIl0uR1BVQ29tcGFyZUZ1bmN0aW9uX2VxdWFsOworICAgICAgICAgICAgY2FzZSBfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLkdSRUFURVI6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUNvbXBhcmVGdW5jdGlvbl9n
cmVhdGVyOworICAgICAgICAgICAgY2FzZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIkNvbnN0YW50cyJdLkdFUVVBTDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dl
YkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BV
Q29uc3RhbnRzIl0uR1BVQ29tcGFyZUZ1bmN0aW9uX2dyZWF0ZXJFcXVhbDsKKyAgICAgICAgICAg
IGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMi
XS5MRVNTOgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVDb21wYXJl
RnVuY3Rpb25fbGVzczsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5MRVFVQUw6CisgICAgICAgICAgICAgICAgcmV0
dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IldlYkdQVUNvbnN0YW50cyJdLkdQVUNvbXBhcmVGdW5jdGlvbl9sZXNzRXF1YWw7CisgICAgICAg
ICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3Rh
bnRzIl0uTkVWRVI6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUNv
bXBhcmVGdW5jdGlvbl9uZXZlcjsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5OT1RFUVVBTDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQ29tcGFyZUZ1bmN0aW9uX25vdEVxdWFsOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJn
cHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRz
Il0uR1BVQ29tcGFyZUZ1bmN0aW9uX2xlc3M7CisgICAgICAgIH0KKyAgICB9OworICAgIFdlYkdQ
VUVuZ2luZS5wcm90b3R5cGUuX2dldE9wRnVuY3Rpb24gPSBmdW5jdGlvbiAob3BlcmF0aW9uLCBk
ZWZhdWx0T3ApIHsKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKKyAgICAgICAgICAgIGNh
c2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5L
RUVQOgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVTdGVuY2lsT3Bl
cmF0aW9uX2tlZXA7CisgICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uWkVSTzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
X1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2Vi
R1BVQ29uc3RhbnRzIl0uR1BVU3RlbmNpbE9wZXJhdGlvbl96ZXJvOworICAgICAgICAgICAgY2Fz
ZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLlJF
UExBQ0U6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0ZW5jaWxP
cGVyYXRpb25fcmVwbGFjZTsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5JTlZFUlQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0ZW5jaWxPcGVyYXRpb25faW52ZXJ0OworICAgICAg
ICAgICAgY2FzZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0
YW50cyJdLklOQ1I6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0
ZW5jaWxPcGVyYXRpb25faW5jcmVtZW50Q2xhbXA7CisgICAgICAgICAgICBjYXNlIF9jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uREVDUjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVU3RlbmNpbE9wZXJhdGlvbl9kZWNy
ZW1lbnRDbGFtcDsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5JTkNSX1dSQVA6CisgICAgICAgICAgICAgICAgcmV0
dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IldlYkdQVUNvbnN0YW50cyJdLkdQVVN0ZW5jaWxPcGVyYXRpb25faW5jcmVtZW50V3JhcDsKKyAg
ICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJD
b25zdGFudHMiXS5ERUNSX1dSQVA6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2Vi
Z3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50
cyJdLkdQVVN0ZW5jaWxPcGVyYXRpb25fZGVjcmVtZW50V3JhcDsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRPcDsKKyAgICAgICAgfQorICAgIH07
CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZ2V0RGVwdGhTdGVuY2lsU3RhdGVEZXNjcmlw
dG9yID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBUT0RPIFdFQkdQVS4gRGVwdGggU3RhdGUg
YWNjb3JkaW5nIHRvIHRoZSBjYWNoZWQgc3RhdGUuCisgICAgICAgIC8vIEFuZCB0aGUgY3VycmVu
dCByZW5kZXIgcGFzcyBhdHRhY2htZW50IHNldHVwLgorICAgICAgICB2YXIgc3RlbmNpbEZyb250
QmFjayA9IHsKKyAgICAgICAgICAgIGNvbXBhcmU6IHRoaXMuX2dldENvbXBhcmVGdW5jdGlvbih0
aGlzLl9zdGVuY2lsU3RhdGUuc3RlbmNpbEZ1bmMpLAorICAgICAgICAgICAgZGVwdGhGYWlsT3A6
IHRoaXMuX2dldE9wRnVuY3Rpb24odGhpcy5fc3RlbmNpbFN0YXRlLnN0ZW5jaWxPcERlcHRoRmFp
bCwgX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
V2ViR1BVQ29uc3RhbnRzIl0uR1BVU3RlbmNpbE9wZXJhdGlvbl9rZWVwKSwKKyAgICAgICAgICAg
IGZhaWxPcDogdGhpcy5fZ2V0T3BGdW5jdGlvbih0aGlzLl9zdGVuY2lsU3RhdGUuc3RlbmNpbE9w
U3RlbmNpbEZhaWwsIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0ZW5jaWxPcGVyYXRpb25fa2VlcCksCisg
ICAgICAgICAgICBwYXNzT3A6IHRoaXMuX2dldE9wRnVuY3Rpb24odGhpcy5fc3RlbmNpbFN0YXRl
LnN0ZW5jaWxPcFN0ZW5jaWxEZXB0aFBhc3MsIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0ZW5jaWxPcGVy
YXRpb25fcmVwbGFjZSkKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IGRlcHRoV3JpdGVFbmFibGVkOiB0aGlzLmdldERlcHRoV3JpdGUoKSwKKyAgICAgICAgICAgIGRl
cHRoQ29tcGFyZTogdGhpcy5fZ2V0Q29tcGFyZUZ1bmN0aW9uKHRoaXMuZ2V0RGVwdGhGdW5jdGlv
bigpKSwKKyAgICAgICAgICAgIGZvcm1hdDogImRlcHRoMzJmbG9hdC1zdGVuY2lsOCIsCisgICAg
ICAgICAgICBzdGVuY2lsRnJvbnQ6IHN0ZW5jaWxGcm9udEJhY2ssCisgICAgICAgICAgICBzdGVu
Y2lsQmFjazogc3RlbmNpbEZyb250QmFjaywKKyAgICAgICAgICAgIHN0ZW5jaWxSZWFkTWFzazog
dGhpcy5fc3RlbmNpbFN0YXRlLnN0ZW5jaWxGdW5jTWFzaywKKyAgICAgICAgICAgIHN0ZW5jaWxX
cml0ZU1hc2s6IHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsTWFzaywKKyAgICAgICAgfTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNldCB2YXJpb3VzIHN0YXRlcyB0byB0aGUgd2ViR0wgY29u
dGV4dAorICAgICAqIEBwYXJhbSBjdWxsaW5nIGRlZmluZXMgYmFja2ZhY2UgY3VsbGluZyBzdGF0
ZQorICAgICAqIEBwYXJhbSB6T2Zmc2V0IGRlZmluZXMgdGhlIHZhbHVlIHRvIGFwcGx5IHRvIHpP
ZmZzZXQgKDAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gZm9yY2UgZGVmaW5lcyBpZiBzdGF0
ZXMgbXVzdCBiZSBhcHBsaWVkIGV2ZW4gaWYgY2FjaGUgaXMgdXAgdG8gZGF0ZQorICAgICAqIEBw
YXJhbSByZXZlcnNlU2lkZSBkZWZpbmVzIGlmIGN1bGxpbmcgbXVzdCBiZSByZXZlcnNlZCAoQ0NX
IGluc3RlYWQgb2YgQ1cgYW5kIENXIGluc3RlYWQgb2YgQ0NXKQorICAgICAqLworICAgIFdlYkdQ
VUVuZ2luZS5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAoY3VsbGluZywgek9mZnNldCwg
Zm9yY2UsIHJldmVyc2VTaWRlKSB7CisgICAgICAgIGlmICh6T2Zmc2V0ID09PSB2b2lkIDApIHsg
ek9mZnNldCA9IDA7IH0KKyAgICAgICAgaWYgKHJldmVyc2VTaWRlID09PSB2b2lkIDApIHsgcmV2
ZXJzZVNpZGUgPSBmYWxzZTsgfQorICAgICAgICAvLyBDdWxsaW5nCisgICAgICAgIGlmICh0aGlz
Ll9kZXB0aEN1bGxpbmdTdGF0ZS5jdWxsICE9PSBjdWxsaW5nIHx8IGZvcmNlKSB7CisgICAgICAg
ICAgICB0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5jdWxsID0gY3VsbGluZzsKKyAgICAgICAgfQor
ICAgICAgICAvLyBDdWxsIGZhY2UKKyAgICAgICAgLy8gdmFyIGN1bGxGYWNlID0gdGhpcy5jdWxs
QmFja0ZhY2VzID8gdGhpcy5fZ2wuQkFDSyA6IHRoaXMuX2dsLkZST05UOworICAgICAgICB2YXIg
Y3VsbEZhY2UgPSB0aGlzLmN1bGxCYWNrRmFjZXMgPyAxIDogMjsKKyAgICAgICAgaWYgKHRoaXMu
X2RlcHRoQ3VsbGluZ1N0YXRlLmN1bGxGYWNlICE9PSBjdWxsRmFjZSB8fCBmb3JjZSkgeworICAg
ICAgICAgICAgdGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUuY3VsbEZhY2UgPSBjdWxsRmFjZTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBaIG9mZnNldAorICAgICAgICB0aGlzLnNldFpPZmZzZXQoek9m
ZnNldCk7CisgICAgICAgIC8vIEZyb250IGZhY2UKKyAgICAgICAgLy8gdmFyIGZyb250RmFjZSA9
IHJldmVyc2VTaWRlID8gdGhpcy5fZ2wuQ1cgOiB0aGlzLl9nbC5DQ1c7CisgICAgICAgIHZhciBm
cm9udEZhY2UgPSByZXZlcnNlU2lkZSA/IDEgOiAyOworICAgICAgICBpZiAodGhpcy5fZGVwdGhD
dWxsaW5nU3RhdGUuZnJvbnRGYWNlICE9PSBmcm9udEZhY2UgfHwgZm9yY2UpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2RlcHRoQ3VsbGluZ1N0YXRlLmZyb250RmFjZSA9IGZyb250RmFjZTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZ2V0RnJvbnRGYWNlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBzd2l0Y2ggKHRoaXMuX2RlcHRoQ3VsbGluZ1N0YXRlLmZy
b250RmFjZSkgeworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIHJldHVybiBf
V2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJH
UFVDb25zdGFudHMiXS5HUFVGcm9udEZhY2VfY3c7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVGcm9udEZhY2VfY2N3OworICAg
ICAgICB9CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRDdWxsTW9kZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2RlcHRoQ3VsbGluZ1N0YXRlLmN1bGwg
PT09IGZhbHNlKSB7CisgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQ3VsbE1v
ZGVfbm9uZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUu
Y3VsbEZhY2UgPT09IDIpIHsKKyAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVD
dWxsTW9kZV9mcm9udDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJl
dHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
WyJXZWJHUFVDb25zdGFudHMiXS5HUFVDdWxsTW9kZV9iYWNrOworICAgICAgICB9CisgICAgfTsK
KyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRSYXN0ZXJpemF0aW9uU3RhdGVEZXNjcmlw
dG9yID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgZnJvbnRG
YWNlOiB0aGlzLl9nZXRGcm9udEZhY2UoKSwKKyAgICAgICAgICAgIGN1bGxNb2RlOiB0aGlzLl9n
ZXRDdWxsTW9kZSgpLAorICAgICAgICAgICAgZGVwdGhCaWFzOiB0aGlzLl9kZXB0aEN1bGxpbmdT
dGF0ZS56T2Zmc2V0LAorICAgICAgICB9OworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3Rv
dHlwZS5fZ2V0V3JpdGVNYXNrID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fX2Nv
bG9yV3JpdGUpIHsKKyAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVDb2xvcldy
aXRlQml0c19BTEw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQ
VUNvbG9yV3JpdGVCaXRzX05PTkU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBj
dXJyZW50IGFscGhhIG1vZGUKKyAgICAgKiBAcGFyYW0gbW9kZSBkZWZpbmVzIHRoZSBtb2RlIHRv
IHVzZSAob25lIG9mIHRoZSBFbmdpbmUuQUxQSEFfWFhYKQorICAgICAqIEBwYXJhbSBub0RlcHRo
V3JpdGVDaGFuZ2UgZGVmaW5lcyBpZiBkZXB0aCB3cml0aW5nIHN0YXRlIHNob3VsZCByZW1haW5z
IHVuY2hhbmdlZCAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9yZXNvdXJjZXMvdHJhbnNwYXJlbmN5X2FuZF9ob3dfbWVzaGVzX2FyZV9yZW5k
ZXJlZAorICAgICAqLworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuc2V0QWxwaGFNb2RlID0g
ZnVuY3Rpb24gKG1vZGUsIG5vRGVwdGhXcml0ZUNoYW5nZSkgeworICAgICAgICBpZiAobm9EZXB0
aFdyaXRlQ2hhbmdlID09PSB2b2lkIDApIHsgbm9EZXB0aFdyaXRlQ2hhbmdlID0gZmFsc2U7IH0K
KyAgICAgICAgaWYgKHRoaXMuX2FscGhhTW9kZSA9PT0gbW9kZSkgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICAgICAgY2Fz
ZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0u
QUxQSEFfRElTQUJMRToKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLmFscGhhQmxl
bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX0Vu
Z2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdLkFMUEhB
X1BSRU1VTFRJUExJRUQ6CisgICAgICAgICAgICAgICAgLy8gdGhpcy5fYWxwaGFTdGF0ZS5zZXRB
bHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzKHRoaXMuX2dsLk9ORSwgdGhpcy5fZ2wuT05FX01J
TlVTX1NSQ19BTFBIQSwgdGhpcy5fZ2wuT05FLCB0aGlzLl9nbC5PTkUpOworICAgICAgICAgICAg
ICAgIHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycygxLCAw
eDAzMDMsIDEsIDEpOworICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUuYWxwaGFCbGVu
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5BTFBIQV9Q
UkVNVUxUSVBMSUVEX1BPUlRFUkRVRkY6CisgICAgICAgICAgICAgICAgLy8gdGhpcy5fYWxwaGFT
dGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzKHRoaXMuX2dsLk9ORSwgdGhpcy5f
Z2wuT05FX01JTlVTX1NSQ19BTFBIQSwgdGhpcy5fZ2wuT05FLCB0aGlzLl9nbC5PTkVfTUlOVVNf
U1JDX0FMUEhBKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnNldEFscGhhQmxl
bmRGdW5jdGlvblBhcmFtZXRlcnMoMSwgMHgwMzAzLCAxLCAweDAzMDMpOworICAgICAgICAgICAg
ICAgIHRoaXMuX2FscGhhU3RhdGUuYWxwaGFCbGVuZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5BTFBIQV9DT01CSU5FOgorICAgICAgICAgICAgICAgIC8v
IHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9n
bC5TUkNfQUxQSEEsIHRoaXMuX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEsIHRoaXMuX2dsLk9ORSwg
dGhpcy5fZ2wuT05FKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnNldEFscGhh
QmxlbmRGdW5jdGlvblBhcmFtZXRlcnMoMHgwMzAyLCAweDAzMDMsIDEsIDEpOworICAgICAgICAg
ICAgICAgIHRoaXMuX2FscGhhU3RhdGUuYWxwaGFCbGVuZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5BTFBIQV9PTkVPTkU6CisgICAgICAgICAgICAgICAg
Ly8gdGhpcy5fYWxwaGFTdGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzKHRoaXMu
X2dsLk9ORSwgdGhpcy5fZ2wuT05FLCB0aGlzLl9nbC5aRVJPLCB0aGlzLl9nbC5PTkUpOworICAg
ICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1l
dGVycygxLCAxLCAwLCAxKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLmFscGhh
QmxlbmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uQUxQ
SEFfQUREOgorICAgICAgICAgICAgICAgIC8vIHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVu
ZEZ1bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9nbC5TUkNfQUxQSEEsIHRoaXMuX2dsLk9ORSwgdGhp
cy5fZ2wuWkVSTywgdGhpcy5fZ2wuT05FKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0
YXRlLnNldEFscGhhQmxlbmRGdW5jdGlvblBhcmFtZXRlcnMoMHgwMzAyLCAxLCAwLCAxKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLmFscGhhQmxlbmQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uQUxQSEFfU1VCVFJBQ1Q6CisgICAgICAg
ICAgICAgICAgLy8gdGhpcy5fYWxwaGFTdGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0
ZXJzKHRoaXMuX2dsLlpFUk8sIHRoaXMuX2dsLk9ORV9NSU5VU19TUkNfQ09MT1IsIHRoaXMuX2ds
Lk9ORSwgdGhpcy5fZ2wuT05FKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnNl
dEFscGhhQmxlbmRGdW5jdGlvblBhcmFtZXRlcnMoMCwgMHgwMzAxLCAxLCAxKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLmFscGhhQmxlbmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uQUxQSEFfTVVMVElQTFk6CisgICAgICAgICAgICAg
ICAgLy8gdGhpcy5fYWxwaGFTdGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzKHRo
aXMuX2dsLkRTVF9DT0xPUiwgdGhpcy5fZ2wuWkVSTywgdGhpcy5fZ2wuT05FLCB0aGlzLl9nbC5P
TkUpOworICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0
aW9uUGFyYW1ldGVycygweDAzMDYsIDAsIDEsIDEpOworICAgICAgICAgICAgICAgIHRoaXMuX2Fs
cGhhU3RhdGUuYWxwaGFCbGVuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJFbmdpbmUiXS5BTFBIQV9NQVhJTUlaRUQ6CisgICAgICAgICAgICAgICAgLy8gdGhpcy5fYWxw
aGFTdGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzKHRoaXMuX2dsLlNSQ19BTFBI
QSwgdGhpcy5fZ2wuT05FX01JTlVTX1NSQ19DT0xPUiwgdGhpcy5fZ2wuT05FLCB0aGlzLl9nbC5P
TkUpOworICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0
aW9uUGFyYW1ldGVycygweDAzMDIsIDB4MDMwMSwgMSwgMSk7CisgICAgICAgICAgICAgICAgdGhp
cy5fYWxwaGFTdGF0ZS5hbHBoYUJsZW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkVuZ2luZSJdLkFMUEhBX0lOVEVSUE9MQVRFOgorICAgICAgICAgICAgICAgIC8vIHRo
aXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9nbC5D
T05TVEFOVF9DT0xPUiwgdGhpcy5fZ2wuT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SLCB0aGlzLl9n
bC5DT05TVEFOVF9BTFBIQSwgdGhpcy5fZ2wuT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnNldEFscGhhQmxlbmRGdW5jdGlvblBhcmFt
ZXRlcnMoMHg4MDAxLCAweDgwMDIsIDB4ODAwMywgMHg4MDA0KTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9hbHBoYVN0YXRlLmFscGhhQmxlbmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siRW5naW5lIl0uQUxQSEFfU0NSRUVOTU9ERToKKyAgICAgICAgICAgICAgICAvLyB0
aGlzLl9hbHBoYVN0YXRlLnNldEFscGhhQmxlbmRGdW5jdGlvblBhcmFtZXRlcnModGhpcy5fZ2wu
T05FLCB0aGlzLl9nbC5PTkVfTUlOVVNfU1JDX0NPTE9SLCB0aGlzLl9nbC5PTkUsIHRoaXMuX2ds
Lk9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUu
c2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycygxLCAweDAzMDEsIDEsIDB4MDMwMyk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJsZW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW5vRGVwdGhXcml0ZUNo
YW5nZSkgeworICAgICAgICAgICAgdGhpcy5zZXREZXB0aFdyaXRlKG1vZGUgPT09IF9FbmdpbmVz
X2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5BTFBIQV9ESVNB
QkxFKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hbHBoYU1vZGUgPSBtb2RlOworICAgIH07
CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZ2V0QXBoYUJsZW5kT3BlcmF0aW9uID0gZnVu
Y3Rpb24gKG9wZXJhdGlvbikgeworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbikgeworICAgICAg
ICAgICAgY2FzZSAweDgwMDY6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1
Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJd
LkdQVUJsZW5kT3BlcmF0aW9uX2FkZDsKKyAgICAgICAgICAgIGNhc2UgMHg4MDBBOgorICAgICAg
ICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCbGVuZE9wZXJhdGlvbl9zdWJzdHJh
Y3Q7CisgICAgICAgICAgICBjYXNlIDB4ODAwQjoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dl
YkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BV
Q29uc3RhbnRzIl0uR1BVQmxlbmRPcGVyYXRpb25fcmV2ZXJzZVN1YnRyYWN0OworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQmxl
bmRPcGVyYXRpb25fYWRkOworICAgICAgICB9CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJv
dG90eXBlLl9nZXRBcGhhQmxlbmRGYWN0b3IgPSBmdW5jdGlvbiAoZmFjdG9yKSB7CisgICAgICAg
IHN3aXRjaCAoZmFjdG9yKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAg
cmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJsZW5kRmFjdG9yX3plcm87CisgICAgICAgICAgICBj
YXNlIDE6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJsZW5kRmFj
dG9yX29uZTsKKyAgICAgICAgICAgIGNhc2UgMHgwMzAwOgorICAgICAgICAgICAgICAgIHJldHVy
biBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVCbGVuZEZhY3Rvcl9zcmNDb2xvcjsKKyAgICAgICAgICAgIGNh
c2UgMHgwMzAxOgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCbGVu
ZEZhY3Rvcl9vbmVNaW51c1NyY0NvbG9yOworICAgICAgICAgICAgY2FzZSAweDAzMDI6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJsZW5kRmFjdG9yX3NyY0FscGhh
OworICAgICAgICAgICAgY2FzZSAweDAzMDM6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJH
UFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNv
bnN0YW50cyJdLkdQVUJsZW5kRmFjdG9yX29uZU1pbnVzU3JjQWxwaGE7CisgICAgICAgICAgICBj
YXNlIDB4MDMwNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQmxl
bmRGYWN0b3JfZHN0QWxwaGE7CisgICAgICAgICAgICBjYXNlIDB4MDMwNToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQmxlbmRGYWN0b3Jfb25lTWludXNEc3RBbHBo
YTsKKyAgICAgICAgICAgIGNhc2UgMHgwMzA2OgorICAgICAgICAgICAgICAgIHJldHVybiBfV2Vi
R1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVD
b25zdGFudHMiXS5HUFVCbGVuZEZhY3Rvcl9kc3RDb2xvcjsKKyAgICAgICAgICAgIGNhc2UgMHgw
MzA3OgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCbGVuZEZhY3Rv
cl9vbmVNaW51c0RzdENvbG9yOworICAgICAgICAgICAgY2FzZSAweDAzMDg6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJsZW5kRmFjdG9yX3NyY0FscGhhU2F0dXJh
dGVkOworICAgICAgICAgICAgY2FzZSAweDgwMDE6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9X
ZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQ
VUNvbnN0YW50cyJdLkdQVUJsZW5kRmFjdG9yX2JsZW5kQ29sb3I7CisgICAgICAgICAgICBjYXNl
IDB4ODAwMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQmxlbmRG
YWN0b3Jfb25lTWludXNCbGVuZENvbG9yOworICAgICAgICAgICAgY2FzZSAweDgwMDM6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJsZW5kRmFjdG9yX2JsZW5kQ29s
b3I7CisgICAgICAgICAgICBjYXNlIDB4ODAwNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dl
YkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BV
Q29uc3RhbnRzIl0uR1BVQmxlbmRGYWN0b3Jfb25lTWludXNCbGVuZENvbG9yOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQmxl
bmRGYWN0b3Jfb25lOworICAgICAgICB9CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90
eXBlLl9nZXRBcGhhQmxlbmRTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlz
Ll9hbHBoYVN0YXRlLmFscGhhQmxlbmQpIHsKKyAgICAgICAgICAgIHJldHVybiB7fTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgc3JjRmFjdG9yOiB0aGlzLl9nZXRB
cGhhQmxlbmRGYWN0b3IodGhpcy5fYWxwaGFTdGF0ZS5fYmxlbmRGdW5jdGlvblBhcmFtZXRlcnNb
Ml0pLAorICAgICAgICAgICAgZHN0RmFjdG9yOiB0aGlzLl9nZXRBcGhhQmxlbmRGYWN0b3IodGhp
cy5fYWxwaGFTdGF0ZS5fYmxlbmRGdW5jdGlvblBhcmFtZXRlcnNbM10pLAorICAgICAgICAgICAg
b3BlcmF0aW9uOiB0aGlzLl9nZXRBcGhhQmxlbmRPcGVyYXRpb24odGhpcy5fYWxwaGFTdGF0ZS5f
YmxlbmRFcXVhdGlvblBhcmFtZXRlcnNbMV0pLAorICAgICAgICB9OworICAgIH07CisgICAgV2Vi
R1BVRW5naW5lLnByb3RvdHlwZS5fZ2V0Q29sb3JCbGVuZFN0YXRlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICBpZiAoIXRoaXMuX2FscGhhU3RhdGUuYWxwaGFCbGVuZCkgeworICAgICAgICAgICAg
cmV0dXJuIHt9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBzcmNG
YWN0b3I6IHRoaXMuX2dldEFwaGFCbGVuZEZhY3Rvcih0aGlzLl9hbHBoYVN0YXRlLl9ibGVuZEZ1
bmN0aW9uUGFyYW1ldGVyc1swXSksCisgICAgICAgICAgICBkc3RGYWN0b3I6IHRoaXMuX2dldEFw
aGFCbGVuZEZhY3Rvcih0aGlzLl9hbHBoYVN0YXRlLl9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1sx
XSksCisgICAgICAgICAgICBvcGVyYXRpb246IHRoaXMuX2dldEFwaGFCbGVuZE9wZXJhdGlvbih0
aGlzLl9hbHBoYVN0YXRlLl9ibGVuZEVxdWF0aW9uUGFyYW1ldGVyc1swXSksCisgICAgICAgIH07
CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRDb2xvclN0YXRlRGVzY3Jp
cHRvcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIFRPRE8gV0VCR1BVLiBNYW5hZ2UgTXVs
dGkgcmVuZGVyIHRhcmdldC4KKyAgICAgICAgcmV0dXJuIFt7CisgICAgICAgICAgICAgICAgZm9y
bWF0OiB0aGlzLl9vcHRpb25zLnN3YXBDaGFpbkZvcm1hdCwKKyAgICAgICAgICAgICAgICBhbHBo
YUJsZW5kOiB0aGlzLl9nZXRBcGhhQmxlbmRTdGF0ZSgpLAorICAgICAgICAgICAgICAgIGNvbG9y
QmxlbmQ6IHRoaXMuX2dldENvbG9yQmxlbmRTdGF0ZSgpLAorICAgICAgICAgICAgICAgIHdyaXRl
TWFzazogdGhpcy5fZ2V0V3JpdGVNYXNrKCksCisgICAgICAgICAgICB9XTsKKyAgICB9OworICAg
IFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2dldFN0YWdlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIGdwdVBpcGVsaW5lID0gdGhpcy5fY3VycmVudEVmZmVjdC5fcGlwZWxpbmVDb250ZXh0
OworICAgICAgICByZXR1cm4gZ3B1UGlwZWxpbmUuc3RhZ2VzOworICAgIH07CisgICAgV2ViR1BV
RW5naW5lLnByb3RvdHlwZS5fZ2V0VmVydGV4SW5wdXREZXNjcmlwdG9yRm9ybWF0ID0gZnVuY3Rp
b24gKHZlcnRleEJ1ZmZlcikgeworICAgICAgICB2YXIga2luZCA9IHZlcnRleEJ1ZmZlci5nZXRL
aW5kKCk7CisgICAgICAgIHZhciB0eXBlID0gdmVydGV4QnVmZmVyLnR5cGU7CisgICAgICAgIHZh
ciBub3JtYWxpemVkID0gdmVydGV4QnVmZmVyLm5vcm1hbGl6ZWQ7CisgICAgICAgIHZhciBzaXpl
ID0gdmVydGV4QnVmZmVyLmdldFNpemUoKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgICAgICBjYXNlIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9f
WyJWZXJ0ZXhCdWZmZXIiXS5CWVRFOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoc2l6ZSkgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9ybWFsaXplZCA/IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVZlcnRleEZvcm1hdF9jaGFyMm5vcm0g
OiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfY2hhcjI7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVkID8g
X1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2Vi
R1BVQ29uc3RhbnRzIl0uR1BVVmVydGV4Rm9ybWF0X2NoYXI0bm9ybSA6IF9XZWJHUFVfd2ViZ3B1
Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJd
LkdQVVZlcnRleEZvcm1hdF9jaGFyNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJWZXJ0ZXhC
dWZmZXIiXS5VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoc2l6ZSkgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9ybWFsaXplZCA/IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVZlcnRleEZvcm1hdF91Y2hhcjJub3Jt
IDogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
V2ViR1BVQ29uc3RhbnRzIl0uR1BVVmVydGV4Rm9ybWF0X3VjaGFyMjsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQg
PyBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfdWNoYXI0bm9ybSA6IF9XZWJHUFVfd2Vi
Z3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50
cyJdLkdQVVZlcnRleEZvcm1hdF91Y2hhcjQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siVmVy
dGV4QnVmZmVyIl0uU0hPUlQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChzaXplKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b3JtYWxpemVkID8gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVmVydGV4Rm9ybWF0X3Nob3J0Mm5vcm0gOiBf
V2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJH
UFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfc2hvcnQyOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZCA/IF9X
ZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQ
VUNvbnN0YW50cyJdLkdQVVZlcnRleEZvcm1hdF9zaG9ydDRub3JtIDogX1dlYkdQVV93ZWJncHVD
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0u
R1BVVmVydGV4Rm9ybWF0X3Nob3J0NDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJWZXJ0ZXhC
dWZmZXIiXS5VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNpemUpIHsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vcm1hbGl6ZWQgPyBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfdXNob3J0Mm5v
cm0gOiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
WyJXZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfdXNob3J0MjsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6
ZWQgPyBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
WyJXZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfdXNob3J0NG5vcm0gOiBfV2ViR1BV
X3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25z
dGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfdXNob3J0NDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9f
WyJWZXJ0ZXhCdWZmZXIiXS5JTlQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChzaXplKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfaW50OworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVD
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0u
R1BVVmVydGV4Rm9ybWF0X2ludDI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRf
aW50MzsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVZlcnRleEZvcm1hdF9pbnQ0OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzEwX19bIlZlcnRleEJ1ZmZlciJdLlVOU0lHTkVEX0lOVDoKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVZlcnRleEZvcm1hdF91
aW50OworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVmVydGV4Rm9ybWF0X3VpbnQyOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQ
VV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29u
c3RhbnRzIl0uR1BVVmVydGV4Rm9ybWF0X3VpbnQzOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVmVy
dGV4Rm9ybWF0X3VpbnQ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlZlcnRleEJ1ZmZlciJd
LkZMT0FUOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoc2l6ZSkgeworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJn
cHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRz
Il0uR1BVVmVydGV4Rm9ybWF0X2Zsb2F0OworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVmVydGV4Rm9y
bWF0X2Zsb2F0MjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVZlcnRleEZvcm1hdF9mbG9hdDM7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfZmxvYXQ0OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRm9ybWF0ICci
ICsga2luZCArICInIik7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRW
ZXJ0ZXhJbnB1dERlc2NyaXB0b3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBkZXNjcmlw
dG9ycyA9IFtdOworICAgICAgICB2YXIgZWZmZWN0ID0gdGhpcy5fY3VycmVudEVmZmVjdDsKKyAg
ICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBlZmZlY3QuZ2V0QXR0cmlidXRlc05hbWVzKCk7CisgICAg
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaW5kZXgr
KykgeworICAgICAgICAgICAgdmFyIGxvY2F0aW9uXzEgPSBlZmZlY3QuZ2V0QXR0cmlidXRlTG9j
YXRpb24oaW5kZXgpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uXzEgPj0gMCkgeworICAgICAg
ICAgICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB0aGlzLl9jdXJyZW50VmVydGV4QnVmZmVyc1th
dHRyaWJ1dGVzW2luZGV4XV07CisgICAgICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhCdWZmZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHZhciBwb3NpdGlvbkF0dHJpYnV0ZURlc2NyaXB0b3IgPSB7CisgICAgICAgICAg
ICAgICAgICAgIHNoYWRlckxvY2F0aW9uOiBsb2NhdGlvbl8xLAorICAgICAgICAgICAgICAgICAg
ICBvZmZzZXQ6IDAsCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogdGhpcy5fZ2V0VmVydGV4
SW5wdXREZXNjcmlwdG9yRm9ybWF0KHZlcnRleEJ1ZmZlciksCisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAvLyBUT0RPIFdFQkdQVS4gRmFjdG9yaXplIHRoZSBvbmUgd2l0aCB0
aGUgc2FtZSB1bmRlcmx5aW5nIGJ1ZmZlci4KKyAgICAgICAgICAgICAgICB2YXIgdmVydGV4QnVm
ZmVyRGVzY3JpcHRvciA9IHsKKyAgICAgICAgICAgICAgICAgICAgc3RyaWRlOiB2ZXJ0ZXhCdWZm
ZXIuYnl0ZVN0cmlkZSwKKyAgICAgICAgICAgICAgICAgICAgc3RlcE1vZGU6IHZlcnRleEJ1ZmZl
ci5nZXRJc0luc3RhbmNlZCgpID8gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVSW5wdXRTdGVwTW9kZV9pbnN0
YW5jZSA6IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUlucHV0U3RlcE1vZGVfdmVydGV4LAorICAgICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGVTZXQ6IFtwb3NpdGlvbkF0dHJpYnV0ZURlc2NyaXB0b3JdCisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9ycy5wdXNoKHZlcnRl
eEJ1ZmZlckRlc2NyaXB0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
ICghdGhpcy5fY3VycmVudEluZGV4QnVmZmVyKSB7CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIGluZGV4Rm9ybWF0OiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVJbmRleEZvcm1hdF91
aW50MzIsCisgICAgICAgICAgICAgICAgdmVydGV4QnVmZmVyczogZGVzY3JpcHRvcnMKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgdmFyIGlucHV0U3RhdGVEZXNjcmlwdG9yID0g
eworICAgICAgICAgICAgaW5kZXhGb3JtYXQ6IHRoaXMuX2N1cnJlbnRJbmRleEJ1ZmZlci5pczMy
Qml0cyA/IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUluZGV4Rm9ybWF0X3VpbnQzMiA6IF9XZWJHUFVfd2Vi
Z3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50
cyJdLkdQVUluZGV4Rm9ybWF0X3VpbnQxNiwKKyAgICAgICAgICAgIHZlcnRleEJ1ZmZlcnM6IGRl
c2NyaXB0b3JzCisgICAgICAgIH07CisgICAgICAgIHJldHVybiBpbnB1dFN0YXRlRGVzY3JpcHRv
cjsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2dldFBpcGVsaW5lTGF5b3V0
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgYmluZEdyb3VwTGF5b3V0cyA9IFtdOworICAg
ICAgICB2YXIgd2ViZ3B1UGlwZWxpbmVDb250ZXh0ID0gdGhpcy5fY3VycmVudEVmZmVjdC5fcGlw
ZWxpbmVDb250ZXh0OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdlYmdwdVBpcGVsaW5l
Q29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICB2YXIgc2V0RGVmaW5pdGlvbiA9IHdlYmdwdVBpcGVsaW5lQ29udGV4dC5vcmRlcmVkVUJPc0Fu
ZFNhbXBsZXJzW2ldOworICAgICAgICAgICAgaWYgKHNldERlZmluaXRpb24gPT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgICAgIHZhciBiaW5kaW5nc18xID0gW107CisgICAgICAgICAgICAg
ICAgdmFyIHVuaWZvcm1zQmluZEdyb3VwTGF5b3V0ID0gdGhpcy5fZGV2aWNlLmNyZWF0ZUJpbmRH
cm91cExheW91dCh7CisgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdzOiBiaW5kaW5nc18xLAor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGJpbmRHcm91cExheW91dHNbaV0g
PSB1bmlmb3Jtc0JpbmRHcm91cExheW91dDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IFtdOworICAgICAgICAgICAg
Zm9yICh2YXIgaiA9IDA7IGogPCBzZXREZWZpbml0aW9uLmxlbmd0aDsgaisrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGJpbmRpbmdEZWZpbml0aW9uID0gd2ViZ3B1UGlwZWxpbmVDb250ZXh0Lm9y
ZGVyZWRVQk9zQW5kU2FtcGxlcnNbaV1bal07CisgICAgICAgICAgICAgICAgaWYgKGJpbmRpbmdE
ZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFRPRE8gV0VCR1BVLiBPcHRp
bWl6ZSBzaGFyZWQgc2FtcGxlcnMgdmlzaWJpbGl0eSBmb3IgdmVydGV4L2ZyYW1nZW50LgorICAg
ICAgICAgICAgICAgIGlmIChiaW5kaW5nRGVmaW5pdGlvbi5pc1NhbXBsZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYmluZGluZ3MucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAgICBiaW5k
aW5nOiBqLAorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogX1dlYkdQVV93ZWJn
cHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRz
Il0uR1BVU2hhZGVyU3RhZ2VCaXRfVkVSVEVYIHwgX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVU2hhZGVyU3Rh
Z2VCaXRfRlJBR01FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBfV2ViR1BVX3dl
YmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFu
dHMiXS5HUFVCaW5kaW5nVHlwZV9zYW1wbGVkVGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAg
fSwgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBXRUJHUFUuIE5vIE1hZ2ljICsg
MSAoY29taW5nIGZyb20gY3VycmVudCAxIHRleHR1cmUgMSBzYW1wbGVyIHN0YXJ0ZWd5KS4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmc6IGogKyAxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdmlzaWJpbGl0eTogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVU2hhZGVyU3RhZ2VCaXRfVkVSVEVY
IHwgX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
V2ViR1BVQ29uc3RhbnRzIl0uR1BVU2hhZGVyU3RhZ2VCaXRfRlJBR01FTlQsCisgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlOiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCaW5kaW5nVHlwZV9zYW1wbGVy
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHVzaCh7CisgICAgICAg
ICAgICAgICAgICAgICAgICBiaW5kaW5nOiBqLAorICAgICAgICAgICAgICAgICAgICAgICAgdmlz
aWJpbGl0eTogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVU2hhZGVyU3RhZ2VCaXRfVkVSVEVYIHwgX1dlYkdQ
VV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29u
c3RhbnRzIl0uR1BVU2hhZGVyU3RhZ2VCaXRfRlJBR01FTlQsCisgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlOiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCaW5kaW5nVHlwZV91bmlmb3JtQnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoYmluZGluZ3MubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAg
IHZhciB1bmlmb3Jtc0JpbmRHcm91cExheW91dCA9IHRoaXMuX2RldmljZS5jcmVhdGVCaW5kR3Jv
dXBMYXlvdXQoeworICAgICAgICAgICAgICAgICAgICBiaW5kaW5nczogYmluZGluZ3MsCisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgYmluZEdyb3VwTGF5b3V0c1tpXSA9IHVu
aWZvcm1zQmluZEdyb3VwTGF5b3V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHdlYmdwdVBpcGVsaW5lQ29udGV4dC5iaW5kR3JvdXBMYXlvdXRzID0gYmluZEdyb3VwTGF5b3V0
czsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5jcmVhdGVQaXBlbGluZUxheW91dCh7IGJp
bmRHcm91cExheW91dHM6IGJpbmRHcm91cExheW91dHMgfSk7CisgICAgfTsKKyAgICBXZWJHUFVF
bmdpbmUucHJvdG90eXBlLl9nZXRSZW5kZXJQaXBlbGluZSA9IGZ1bmN0aW9uIChmaWxsTW9kZSkg
eworICAgICAgICAvLyBUaGlzIGlzIHdyb25nIHRvIGNhY2hlIHRoaXMgd2F5IGJ1dCB3b3JrYXJv
dW5kcyB0aGUgbmVlZCBvZiBjYWNoZSBpbiB0aGUgc2ltcGxlIGRlbW8gY29udGV4dC4KKyAgICAg
ICAgdmFyIGdwdVBpcGVsaW5lID0gdGhpcy5fY3VycmVudEVmZmVjdC5fcGlwZWxpbmVDb250ZXh0
OworICAgICAgICBpZiAoZ3B1UGlwZWxpbmUucmVuZGVyUGlwZWxpbmUpIHsKKyAgICAgICAgICAg
IHJldHVybiBncHVQaXBlbGluZS5yZW5kZXJQaXBlbGluZTsKKyAgICAgICAgfQorICAgICAgICAv
LyBVbnN1cHBvcnRlZCBhdCB0aGUgbW9tZW50IGJ1dCBuZWVkcyB0byBiZSBleHRyYWN0ZWQgZnJv
bSB0aGUgTVNBQSBwYXJhbS4KKyAgICAgICAgdmFyIHRvcG9sb2d5ID0gdGhpcy5fZ2V0VG9wb2xv
Z3koZmlsbE1vZGUpOworICAgICAgICB2YXIgcmFzdGVyaXphdGlvblN0YXRlRGVzY3JpcHRvciA9
IHRoaXMuX2dldFJhc3Rlcml6YXRpb25TdGF0ZURlc2NyaXB0b3IoKTsKKyAgICAgICAgdmFyIGRl
cHRoU3RhdGVEZXNjcmlwdG9yID0gdGhpcy5fZ2V0RGVwdGhTdGVuY2lsU3RhdGVEZXNjcmlwdG9y
KCk7CisgICAgICAgIHZhciBjb2xvclN0YXRlRGVzY3JpcHRvcnMgPSB0aGlzLl9nZXRDb2xvclN0
YXRlRGVzY3JpcHRvcnMoKTsKKyAgICAgICAgdmFyIHN0YWdlcyA9IHRoaXMuX2dldFN0YWdlcygp
OworICAgICAgICB2YXIgaW5wdXRTdGF0ZURlc2NyaXB0b3IgPSB0aGlzLl9nZXRWZXJ0ZXhJbnB1
dERlc2NyaXB0b3IoKTsKKyAgICAgICAgdmFyIHBpcGVsaW5lTGF5b3V0ID0gdGhpcy5fZ2V0UGlw
ZWxpbmVMYXlvdXQoKTsKKyAgICAgICAgZ3B1UGlwZWxpbmUucmVuZGVyUGlwZWxpbmUgPSB0aGlz
Ll9kZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUodHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19hc3NpZ24iXSh7IHNhbXBsZUNvdW50OiB0aGlzLl9tYWluUGFzc1NhbXBsZUNv
dW50LCBwcmltaXRpdmVUb3BvbG9neTogdG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZTogcmFz
dGVyaXphdGlvblN0YXRlRGVzY3JpcHRvciwgZGVwdGhTdGVuY2lsU3RhdGU6IGRlcHRoU3RhdGVE
ZXNjcmlwdG9yLCBjb2xvclN0YXRlczogY29sb3JTdGF0ZURlc2NyaXB0b3JzIH0sIHN0YWdlcywg
eyB2ZXJ0ZXhJbnB1dDogaW5wdXRTdGF0ZURlc2NyaXB0b3IsIGxheW91dDogcGlwZWxpbmVMYXlv
dXQgfSkpOworICAgICAgICByZXR1cm4gZ3B1UGlwZWxpbmUucmVuZGVyUGlwZWxpbmU7CisgICAg
fTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRWZXJ0ZXhJbnB1dHNUb1JlbmRlciA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGVmZmVjdCA9IHRoaXMuX2N1cnJlbnRFZmZlY3Q7
CisgICAgICAgIHZhciBncHVDb250ZXh0ID0gdGhpcy5fY3VycmVudEVmZmVjdC5fcGlwZWxpbmVD
b250ZXh0OworICAgICAgICB2YXIgdmVydGV4SW5wdXRzID0gZ3B1Q29udGV4dC52ZXJ0ZXhJbnB1
dHM7CisgICAgICAgIGlmICh2ZXJ0ZXhJbnB1dHMpIHsKKyAgICAgICAgICAgIHJldHVybiB2ZXJ0
ZXhJbnB1dHM7CisgICAgICAgIH0KKyAgICAgICAgdmVydGV4SW5wdXRzID0geworICAgICAgICAg
ICAgaW5kZXhCdWZmZXI6IG51bGwsCisgICAgICAgICAgICBpbmRleE9mZnNldDogMCwKKyAgICAg
ICAgICAgIHZlcnRleFN0YXJ0U2xvdDogMCwKKyAgICAgICAgICAgIHZlcnRleEJ1ZmZlcnM6IFtd
LAorICAgICAgICAgICAgdmVydGV4T2Zmc2V0czogW10sCisgICAgICAgIH07CisgICAgICAgIGdw
dUNvbnRleHQudmVydGV4SW5wdXRzID0gdmVydGV4SW5wdXRzOworICAgICAgICBpZiAodGhpcy5f
Y3VycmVudEluZGV4QnVmZmVyKSB7CisgICAgICAgICAgICAvLyBUT0RPIFdFQkdQVS4gQ2hlY2sg
aWYgY2FjaGUgd291bGQgYmUgd29ydGggaXQuCisgICAgICAgICAgICB2ZXJ0ZXhJbnB1dHMuaW5k
ZXhCdWZmZXIgPSB0aGlzLl9jdXJyZW50SW5kZXhCdWZmZXIudW5kZXJseWluZ1Jlc291cmNlOwor
ICAgICAgICAgICAgdmVydGV4SW5wdXRzLmluZGV4T2Zmc2V0ID0gMDsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZlcnRleElucHV0cy5pbmRleEJ1ZmZlciA9IG51bGw7
CisgICAgICAgIH0KKyAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBlZmZlY3QuZ2V0QXR0cmlidXRl
c05hbWVzKCk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVz
Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIG9yZGVyID0gZWZmZWN0LmdldEF0
dHJpYnV0ZUxvY2F0aW9uKGluZGV4KTsKKyAgICAgICAgICAgIGlmIChvcmRlciA+PSAwKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHZlcnRleEJ1ZmZlciA9IHRoaXMuX2N1cnJlbnRWZXJ0ZXhCdWZm
ZXJzW2F0dHJpYnV0ZXNbaW5kZXhdXTsKKyAgICAgICAgICAgICAgICBpZiAoIXZlcnRleEJ1ZmZl
cikgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHZlcnRleEJ1ZmZlci5nZXRCdWZmZXIoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleElu
cHV0cy52ZXJ0ZXhCdWZmZXJzLnB1c2goYnVmZmVyLnVuZGVybHlpbmdSZXNvdXJjZSk7CisgICAg
ICAgICAgICAgICAgICAgIHZlcnRleElucHV0cy52ZXJ0ZXhPZmZzZXRzLnB1c2godmVydGV4QnVm
ZmVyLmJ5dGVPZmZzZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAvLyBUT0RPIFdFQkdQVS4gT3B0aW1pemUgYnVmZmVyIHJldXNhYmlsaXR5
IGFuZCB0eXBlcyBhcyBtb3JlIGFyZSBub3cgYWxsb3dlZC4KKyAgICAgICAgcmV0dXJuIHZlcnRl
eElucHV0czsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2dldEJpbmRHcm91
cHNUb1JlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHdlYmdwdVBpcGVsaW5lQ29u
dGV4dCA9IHRoaXMuX2N1cnJlbnRFZmZlY3QuX3BpcGVsaW5lQ29udGV4dDsKKyAgICAgICAgdmFy
IGJpbmRHcm91cHMgPSB3ZWJncHVQaXBlbGluZUNvbnRleHQuYmluZEdyb3VwczsKKyAgICAgICAg
aWYgKGJpbmRHcm91cHMpIHsKKyAgICAgICAgICAgIGlmICh3ZWJncHVQaXBlbGluZUNvbnRleHQu
dW5pZm9ybUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIHdlYmdwdVBpcGVsaW5lQ29udGV4dC51
bmlmb3JtQnVmZmVyLnVwZGF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGJpbmRHcm91cHM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdlYmdwdVBpcGVsaW5lQ29udGV4
dC51bmlmb3JtQnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLmJpbmRVbmlmb3JtQnVmZmVyQmFz
ZSh3ZWJncHVQaXBlbGluZUNvbnRleHQudW5pZm9ybUJ1ZmZlci5nZXRCdWZmZXIoKSwgMCwgIkxl
ZnRPdmVyIik7CisgICAgICAgICAgICB3ZWJncHVQaXBlbGluZUNvbnRleHQudW5pZm9ybUJ1ZmZl
ci51cGRhdGUoKTsKKyAgICAgICAgfQorICAgICAgICBiaW5kR3JvdXBzID0gW107CisgICAgICAg
IHdlYmdwdVBpcGVsaW5lQ29udGV4dC5iaW5kR3JvdXBzID0gYmluZEdyb3VwczsKKyAgICAgICAg
dmFyIGJpbmRHcm91cExheW91dHMgPSB3ZWJncHVQaXBlbGluZUNvbnRleHQuYmluZEdyb3VwTGF5
b3V0czsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3ZWJncHVQaXBlbGluZUNvbnRleHQu
b3JkZXJlZFVCT3NBbmRTYW1wbGVycy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIHNl
dERlZmluaXRpb24gPSB3ZWJncHVQaXBlbGluZUNvbnRleHQub3JkZXJlZFVCT3NBbmRTYW1wbGVy
c1tpXTsKKyAgICAgICAgICAgIGlmIChzZXREZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgZ3JvdXBMYXlvdXRfMSA9IGJpbmRHcm91cExheW91dHNbaV07Cisg
ICAgICAgICAgICAgICAgaWYgKGdyb3VwTGF5b3V0XzEpIHsKKyAgICAgICAgICAgICAgICAgICAg
YmluZEdyb3Vwc1tpXSA9IHRoaXMuX2RldmljZS5jcmVhdGVCaW5kR3JvdXAoeworICAgICAgICAg
ICAgICAgICAgICAgICAgbGF5b3V0OiBncm91cExheW91dF8xLAorICAgICAgICAgICAgICAgICAg
ICAgICAgYmluZGluZ3M6IFtdLAorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgYmluZGluZ3MgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
c2V0RGVmaW5pdGlvbi5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIHZhciBiaW5kaW5n
RGVmaW5pdGlvbiA9IHdlYmdwdVBpcGVsaW5lQ29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBsZXJz
W2ldW2pdOworICAgICAgICAgICAgICAgIGlmIChiaW5kaW5nRGVmaW5pdGlvbiA9PT0gdW5kZWZp
bmVkKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyBUT0RPIFdFQkdQVS4gQXV0aG9yaXplIHNoYXJlZCBzYW1wbGVy
cyBhbmQgVmVydGV4IFRleHR1cmVzLgorICAgICAgICAgICAgICAgIGlmIChiaW5kaW5nRGVmaW5p
dGlvbi5pc1NhbXBsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGJpbmRpbmdJbmZvID0g
d2ViZ3B1UGlwZWxpbmVDb250ZXh0LnNhbXBsZXJzW2JpbmRpbmdEZWZpbml0aW9uLm5hbWVdOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoYmluZGluZ0luZm8pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghYmluZGluZ0luZm8udGV4dHVyZS5fd2ViR1BVU2FtcGxlcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzYW1wbGVyRGVzY3JpcHRvciA9IHRoaXMuX2dldFNh
bXBsZXJEZXNjcmlwdG9yKGJpbmRpbmdJbmZvLnRleHR1cmUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBncHVTYW1wbGVyID0gdGhpcy5fZGV2aWNlLmNyZWF0ZVNhbXBsZXIoc2Ft
cGxlckRlc2NyaXB0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdJbmZv
LnRleHR1cmUuX3dlYkdQVVNhbXBsZXIgPSBncHVTYW1wbGVyOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHVzaCh7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmluZGluZzogYmluZGluZ0luZm8udGV4dHVyZUJpbmRpbmcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2U6IGJpbmRpbmdJbmZvLnRleHR1
cmUuX3dlYkdQVVRleHR1cmVWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmc6IGJpbmRpbmdJbmZvLnNhbXBsZXJCaW5k
aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiBiaW5kaW5nSW5mby50
ZXh0dXJlLl93ZWJHUFVTYW1wbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TG9nZ2VyIl0uRXJyb3IoIlNhbXBsZXIgaGFzIG5vdCBiZWVuIGJvdW5kOiAiICsgYmluZGluZ0Rl
ZmluaXRpb24ubmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhQnVm
ZmVyID0gdGhpcy5fdW5pZm9ybXNCdWZmZXJzW2JpbmRpbmdEZWZpbml0aW9uLm5hbWVdOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZGF0YUJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHdlYmdwdUJ1ZmZlciA9IGRhdGFCdWZmZXIudW5kZXJseWluZ1Jlc291cmNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHVzaCh7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmluZGluZzogaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJj
ZTogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI6IHdlYmdwdUJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBkYXRhQnVmZmVyLmNhcGFjaXR5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJMb2dnZXIiXS5FcnJvcigiVUJPIGhhcyBub3QgYmVlbiBib3VuZDogIiArIGJpbmRpbmdEZWZp
bml0aW9uLm5hbWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGdyb3VwTGF5b3V0ID0gYmluZEdyb3VwTGF5
b3V0c1tpXTsKKyAgICAgICAgICAgIGlmIChncm91cExheW91dCkgeworICAgICAgICAgICAgICAg
IGJpbmRHcm91cHNbaV0gPSB0aGlzLl9kZXZpY2UuY3JlYXRlQmluZEdyb3VwKHsKKyAgICAgICAg
ICAgICAgICAgICAgbGF5b3V0OiBncm91cExheW91dCwKKyAgICAgICAgICAgICAgICAgICAgYmlu
ZGluZ3M6IGJpbmRpbmdzLAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBiaW5kR3JvdXBzOworICAgIH07CisgICAgV2ViR1BVRW5n
aW5lLnByb3RvdHlwZS5fYmluZFZlcnRleElucHV0cyA9IGZ1bmN0aW9uICh2ZXJ0ZXhJbnB1dHMp
IHsKKyAgICAgICAgdmFyIHJlbmRlclBhc3MgPSB0aGlzLl9jdXJyZW50UmVuZGVyUGFzczsKKyAg
ICAgICAgaWYgKHZlcnRleElucHV0cy5pbmRleEJ1ZmZlcikgeworICAgICAgICAgICAgLy8gVE9E
TyBXRUJHUFUuIENoZWNrIGlmIGNhY2hlIHdvdWxkIGJlIHdvcnRoIGl0LgorICAgICAgICAgICAg
cmVuZGVyUGFzcy5zZXRJbmRleEJ1ZmZlcih2ZXJ0ZXhJbnB1dHMuaW5kZXhCdWZmZXIsIHZlcnRl
eElucHV0cy5pbmRleE9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETyBXRUJHUFUu
IE9wdGltaXplIGJ1ZmZlciByZXVzYWJpbGl0eSBhbmQgdHlwZXMgYXMgbW9yZSBhcmUgbm93IGFs
bG93ZWQuCisgICAgICAgIHRoaXMuX2N1cnJlbnRSZW5kZXJQYXNzLnNldFZlcnRleEJ1ZmZlcnMo
dmVydGV4SW5wdXRzLnZlcnRleFN0YXJ0U2xvdCwgdmVydGV4SW5wdXRzLnZlcnRleEJ1ZmZlcnMs
IHZlcnRleElucHV0cy52ZXJ0ZXhPZmZzZXRzKTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5w
cm90b3R5cGUuX3NldFJlbmRlckJpbmRHcm91cHMgPSBmdW5jdGlvbiAoYmluZEdyb3Vwcykgewor
ICAgICAgICAvLyBUT0RPIFdFQkdQVS4gT25seSBzZXQgZ3JvdXBzIGlmIGNoYW5nZXMgaGFwcGVu
ZWQuCisgICAgICAgIHZhciByZW5kZXJQYXNzID0gdGhpcy5fY3VycmVudFJlbmRlclBhc3M7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmluZEdyb3Vwcy5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgcmVuZGVyUGFzcy5zZXRCaW5kR3JvdXAoaSwgYmluZEdyb3Vwc1tpXSk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX3NldFJlbmRlclBpcGVs
aW5lID0gZnVuY3Rpb24gKGZpbGxNb2RlKSB7CisgICAgICAgIHZhciBwaXBlbGluZSA9IHRoaXMu
X2dldFJlbmRlclBpcGVsaW5lKGZpbGxNb2RlKTsKKyAgICAgICAgdGhpcy5fY3VycmVudFJlbmRl
clBhc3Muc2V0UGlwZWxpbmUocGlwZWxpbmUpOworICAgICAgICB2YXIgdmVydGV4SW5wdXRzID0g
dGhpcy5fZ2V0VmVydGV4SW5wdXRzVG9SZW5kZXIoKTsKKyAgICAgICAgdGhpcy5fYmluZFZlcnRl
eElucHV0cyh2ZXJ0ZXhJbnB1dHMpOworICAgICAgICB2YXIgYmluZEdyb3VwcyA9IHRoaXMuX2dl
dEJpbmRHcm91cHNUb1JlbmRlcigpOworICAgICAgICB0aGlzLl9zZXRSZW5kZXJCaW5kR3JvdXBz
KGJpbmRHcm91cHMpOworICAgICAgICBpZiAodGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJsZW5kICYm
IHRoaXMuX2FscGhhU3RhdGUuX2lzQmxlbmRDb25zdGFudHNEaXJ0eSkgeworICAgICAgICAgICAg
dGhpcy5fY3VycmVudFJlbmRlclBhc3Muc2V0QmxlbmRDb2xvcih0aGlzLl9hbHBoYVN0YXRlLl9i
bGVuZENvbnN0YW50cyk7CisgICAgICAgIH0KKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90
b3R5cGUuZHJhd0VsZW1lbnRzVHlwZSA9IGZ1bmN0aW9uIChmaWxsTW9kZSwgaW5kZXhTdGFydCwg
aW5kZXhDb3VudCwgaW5zdGFuY2VzQ291bnQpIHsKKyAgICAgICAgaWYgKGluc3RhbmNlc0NvdW50
ID09PSB2b2lkIDApIHsgaW5zdGFuY2VzQ291bnQgPSAxOyB9CisgICAgICAgIHRoaXMuX3NldFJl
bmRlclBpcGVsaW5lKGZpbGxNb2RlKTsKKyAgICAgICAgdGhpcy5fY3VycmVudFJlbmRlclBhc3Mu
ZHJhd0luZGV4ZWQoaW5kZXhDb3VudCwgaW5zdGFuY2VzQ291bnQsIGluZGV4U3RhcnQsIDAsIDAp
OworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5kcmF3QXJyYXlzVHlwZSA9IGZ1
bmN0aW9uIChmaWxsTW9kZSwgdmVydGljZXNTdGFydCwgdmVydGljZXNDb3VudCwgaW5zdGFuY2Vz
Q291bnQpIHsKKyAgICAgICAgaWYgKGluc3RhbmNlc0NvdW50ID09PSB2b2lkIDApIHsgaW5zdGFu
Y2VzQ291bnQgPSAxOyB9CisgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleEJ1ZmZlciA9IG51bGw7
CisgICAgICAgIHRoaXMuX3NldFJlbmRlclBpcGVsaW5lKGZpbGxNb2RlKTsKKyAgICAgICAgdGhp
cy5fY3VycmVudFJlbmRlclBhc3MuZHJhdyh2ZXJ0aWNlc0NvdW50LCBpbnN0YW5jZXNDb3VudCwg
dmVydGljZXNTdGFydCwgMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSBhIHNwZWNp
ZmljIHNpemUgb2YgdGhlIGNhbnZhcworICAgICAqIEBwYXJhbSB3aWR0aCBkZWZpbmVzIHRoZSBu
ZXcgY2FudmFzJyB3aWR0aAorICAgICAqIEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgbmV3IGNh
bnZhcycgaGVpZ2h0CisgICAgICovCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5zZXRTaXpl
ID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5z
ZXRTaXplLmNhbGwodGhpcywgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIHRoaXMuX2luaXRpYWxp
emVNYWluQXR0YWNobWVudHMoKTsKKyAgICB9OworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwb3NlCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvKioKKyAgICAgKiBEaXNwb3NlIGFuZCByZWxlYXNlIGFs
bCBhc3NvY2lhdGVkIHJlc291cmNlcworICAgICAqLworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5
cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fZGVjb2RlRW5naW5lLmRp
c3Bvc2UoKTsKKyAgICAgICAgdGhpcy5fY29tcGlsZWRTaGFkZXJzID0ge307CisgICAgICAgIGlm
ICh0aGlzLl9tYWluVGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5fbWFpblRleHR1cmUuZGVz
dHJveSgpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9kZXB0aFRleHR1cmUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2RlcHRoVGV4dHVyZS5kZXN0cm95KCk7CisgICAgICAgIH0KKyAgICAg
ICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWlzYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgV2ViR1BVRW5naW5lLnByb3Rv
dHlwZS5nZXRSZW5kZXJXaWR0aCA9IGZ1bmN0aW9uICh1c2VTY3JlZW4pIHsKKyAgICAgICAgaWYg
KHVzZVNjcmVlbiA9PT0gdm9pZCAwKSB7IHVzZVNjcmVlbiA9IGZhbHNlOyB9CisgICAgICAgIGlm
ICghdXNlU2NyZWVuICYmIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0LndpZHRoOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0aGlzLl9jYW52YXMud2lkdGg7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUu
cHJvdG90eXBlLmdldFJlbmRlckhlaWdodCA9IGZ1bmN0aW9uICh1c2VTY3JlZW4pIHsKKyAgICAg
ICAgaWYgKHVzZVNjcmVlbiA9PT0gdm9pZCAwKSB7IHVzZVNjcmVlbiA9IGZhbHNlOyB9CisgICAg
ICAgIGlmICghdXNlU2NyZWVuICYmIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0LmhlaWdodDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpcy5fY2FudmFzLmhlaWdodDsKKyAgICB9OworICAgIFdlYkdQ
VUVuZ2luZS5wcm90b3R5cGUuZ2V0UmVuZGVyaW5nQ2FudmFzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5fY2FudmFzOworICAgIH07CisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9ycworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5nZXRFcnJv
ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gVE9ETyBXRUJHUFUuIGZyb20gdGhlIHdlYmdw
dSBlcnJvcnMuCisgICAgICAgIHJldHVybiAwOworICAgIH07CisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVudXNlZCBXZWJH
UFUKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5
cGUuYXJlQWxsRWZmZWN0c1JlYWR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBObyBwYXJh
bGxlbCBzaGFkZXIgY29tcGlsYXRpb24uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07Cisg
ICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZXhlY3V0ZVdoZW5SZW5kZXJpbmdTdGF0ZUlzQ29t
cGlsZWQgPSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0LCBhY3Rpb24pIHsKKyAgICAgICAgLy8g
Tm8gcGFyYWxsZWwgc2hhZGVyIGNvbXBpbGF0aW9uLgorICAgICAgICAvLyBObyBBc3luYywgc28g
ZGlyZWN0IGxhdW5jaAorICAgICAgICBhY3Rpb24oKTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2lu
ZS5wcm90b3R5cGUuX2lzUmVuZGVyaW5nU3RhdGVDb21waWxlZCA9IGZ1bmN0aW9uIChwaXBlbGlu
ZUNvbnRleHQpIHsKKyAgICAgICAgLy8gTm8gcGFyYWxsZWwgc2hhZGVyIGNvbXBpbGF0aW9uLgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUu
X2dldFVucGFja0FsaWduZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAxOwor
ICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fdW5wYWNrRmxpcFkgPSBmdW5jdGlv
biAodmFsdWUpIHsgfTsKKyAgICAvLyBUT0RPIFdFQkdQVS4gQWxsIG9mIHRoZSBiZWxvdyBzaG91
bGQgZ28gb25jZSBlbmdpbmUgc3BsaXQgd2l0aCBiYXNlRW5naW5lLgorICAgIFdlYkdQVUVuZ2lu
ZS5wcm90b3R5cGUuYXBwbHlTdGF0ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIEFwcGx5
IFN0YXRlcyBkeW5hbWljYWxseS4KKyAgICAgICAgLy8gVGhpcyBpcyBkb25lIGF0IHRoZSBwaXBl
bGluZSBjcmVhdGlvbiBsZXZlbCBmb3IgdGhlIG1vbWVudC4uLgorICAgIH07CisgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRTYW1wbGluZ1BhcmFtZXRl
cnMgPSBmdW5jdGlvbiAoc2FtcGxpbmdNb2RlLCBnZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAgICAg
dGhyb3cgIl9nZXRTYW1wbGluZ1BhcmFtZXRlcnMgaXMgbm90IGF2YWlsYWJsZSBpbiBXZWJHUFUi
OworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5iaW5kVW5pZm9ybUJsb2NrID0g
ZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCwgYmxvY2tOYW1lLCBpbmRleCkgeworICAgIH07Cisg
ICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5nZXRVbmlmb3JtcyA9IGZ1bmN0aW9uIChwaXBlbGlu
ZUNvbnRleHQsIHVuaWZvcm1zTmFtZXMpIHsKKyAgICAgICAgcmV0dXJuIFtdOworICAgIH07Cisg
ICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5zZXRJbnRBcnJheSA9IGZ1bmN0aW9uICh1bmlmb3Jt
LCBhcnJheSkgeworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5zZXRJbnRBcnJh
eTIgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICB9OworICAgIFdlYkdQVUVuZ2lu
ZS5wcm90b3R5cGUuc2V0SW50QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5KSB7Cisg
ICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnNldEludEFycmF5NCA9IGZ1bmN0aW9u
ICh1bmlmb3JtLCBhcnJheSkgeworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5z
ZXRGbG9hdEFycmF5ID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5KSB7CisgICAgfTsKKyAgICBX
ZWJHUFVFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0QXJyYXkyID0gZnVuY3Rpb24gKHVuaWZvcm0s
IGFycmF5KSB7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0QXJy
YXkzID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5KSB7CisgICAgfTsKKyAgICBXZWJHUFVFbmdp
bmUucHJvdG90eXBlLnNldEZsb2F0QXJyYXk0ID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5KSB7
CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnNldEFycmF5ID0gZnVuY3Rpb24g
KHVuaWZvcm0sIGFycmF5KSB7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnNl
dEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgIH07CisgICAgV2ViR1BV
RW5naW5lLnByb3RvdHlwZS5zZXRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsK
KyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuc2V0QXJyYXk0ID0gZnVuY3Rpb24g
KHVuaWZvcm0sIGFycmF5KSB7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnNl
dE1hdHJpY2VzID0gZnVuY3Rpb24gKHVuaWZvcm0sIG1hdHJpY2VzKSB7CisgICAgfTsKKyAgICBX
ZWJHUFVFbmdpbmUucHJvdG90eXBlLnNldE1hdHJpeDN4MyA9IGZ1bmN0aW9uICh1bmlmb3JtLCBt
YXRyaXgpIHsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuc2V0TWF0cml4Mngy
ID0gZnVuY3Rpb24gKHVuaWZvcm0sIG1hdHJpeCkgeworICAgIH07CisgICAgV2ViR1BVRW5naW5l
LnByb3RvdHlwZS5zZXRGbG9hdCA9IGZ1bmN0aW9uICh1bmlmb3JtLCB2YWx1ZSkgeworICAgIH07
CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5zZXRGbG9hdDIgPSBmdW5jdGlvbiAodW5pZm9y
bSwgeCwgeSkgeworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5zZXRGbG9hdDMg
PSBmdW5jdGlvbiAodW5pZm9ybSwgeCwgeSwgeikgeworICAgIH07CisgICAgV2ViR1BVRW5naW5l
LnByb3RvdHlwZS5zZXRCb29sID0gZnVuY3Rpb24gKHVuaWZvcm0sIGJvb2wpIHsKKyAgICB9Owor
ICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXQ0ID0gZnVuY3Rpb24gKHVuaWZvcm0s
IHgsIHksIHosIHcpIHsKKyAgICB9OworICAgIC8vIERlZmF1bHQgc2hhZGVyYyBvcHRpb25zLgor
ICAgIFdlYkdQVUVuZ2luZS5fc2hhZGVyY0RlZmF1bHRPcHRpb25zID0geworICAgICAgICBqc1Bh
dGg6ICJodHRwczovL3ByZXZpZXcuYmFieWxvbmpzLmNvbS9zaGFkZXJjL3NoYWRlcmMuanMiLAor
ICAgICAgICB3YXNtUGF0aDogImh0dHBzOi8vcHJldmlldy5iYWJ5bG9uanMuY29tL3NoYWRlcmMv
c2hhZGVyYy53YXNtIgorICAgIH07CisgICAgcmV0dXJuIFdlYkdQVUVuZ2luZTsKK30oX0VuZ2lu
ZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vRXZlbnRzL2NsaXBib2FyZEV2ZW50cy50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRXZlbnRzL2Ns
aXBib2FyZEV2ZW50cy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDbGlwYm9hcmRFdmVudFR5cGVzLCBDbGlwYm9h
cmRJbmZvICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNsaXBib2FyZEV2
ZW50VHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENsaXBib2FyZEV2ZW50VHlwZXM7IH0pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQ2xpcGJvYXJkSW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ2xp
cGJvYXJkSW5mbzsgfSk7CisvKioKKyAqIEdhdGhlciB0aGUgbGlzdCBvZiBjbGlwYm9hcmQgZXZl
bnQgdHlwZXMgYXMgY29uc3RhbnRzLgorICovCit2YXIgQ2xpcGJvYXJkRXZlbnRUeXBlcyA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBDbGlwYm9hcmRFdmVudFR5
cGVzKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBUaGUgY2xpcGJvYXJkIGV2ZW50IGlzIGZp
cmVkIHdoZW4gYSBjb3B5IGNvbW1hbmQgaXMgYWN0aXZlIChwcmVzc2VkKS4KKyAgICAgKi8KKyAg
ICBDbGlwYm9hcmRFdmVudFR5cGVzLkNPUFkgPSAweDAxOyAvLworICAgIC8qKgorICAgICAqICBU
aGUgY2xpcGJvYXJkIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBjdXQgY29tbWFuZCBpcyBhY3RpdmUg
KHByZXNzZWQpLgorICAgICAqLworICAgIENsaXBib2FyZEV2ZW50VHlwZXMuQ1VUID0gMHgwMjsK
KyAgICAvKioKKyAgICAgKiBUaGUgY2xpcGJvYXJkIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBwYXN0
ZSBjb21tYW5kIGlzIGFjdGl2ZSAocHJlc3NlZCkuCisgICAgICovCisgICAgQ2xpcGJvYXJkRXZl
bnRUeXBlcy5QQVNURSA9IDB4MDM7CisgICAgcmV0dXJuIENsaXBib2FyZEV2ZW50VHlwZXM7Cit9
KCkpOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBzdG9yZSBjbGlwYm9hcmQgcmVs
YXRlZCBpbmZvIGZvciB0aGUgb25DbGlwYm9hcmRPYnNlcnZhYmxlIGV2ZW50LgorICovCit2YXIg
Q2xpcGJvYXJkSW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAg
ICAgKkNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQ2xpcGJvYXJkSW5mby4KKyAgICAgKiBAcGFyYW0g
dHlwZSBEZWZpbmVzIHRoZSB0eXBlIG9mIGV2ZW50IChCQUJZTE9OLkNsaXBib2FyZEV2ZW50VHlw
ZXMpCisgICAgICogQHBhcmFtIGV2ZW50IERlZmluZXMgdGhlIHJlbGF0ZWQgZG9tIGV2ZW50Cisg
ICAgICovCisgICAgZnVuY3Rpb24gQ2xpcGJvYXJkSW5mbygKKyAgICAvKioKKyAgICAgKiBEZWZp
bmVzIHRoZSB0eXBlIG9mIGV2ZW50IChCQUJZTE9OLkNsaXBib2FyZEV2ZW50VHlwZXMpCisgICAg
ICovCisgICAgdHlwZSwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgcmVsYXRlZCBkb20g
ZXZlbnQKKyAgICAgKi8KKyAgICBldmVudCkgeworICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwor
ICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7CisgICAgfQorICAgIC8qKgorICAgICAqICBHZXQg
dGhlIGNsaXBib2FyZCBldmVudCdzIHR5cGUgZnJvbSB0aGUga2V5Y29kZS4KKyAgICAgKiBAcGFy
YW0ga2V5Q29kZSBEZWZpbmVzIHRoZSBrZXlDb2RlIGZvciB0aGUgY3VycmVudCBrZXlib2FyZCBl
dmVudC4KKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICovCisgICAgQ2xpcGJvYXJkSW5m
by5HZXRUeXBlRnJvbUNoYXJhY3RlciA9IGZ1bmN0aW9uIChrZXlDb2RlKSB7CisgICAgICAgIHZh
ciBjaGFyQ29kZSA9IGtleUNvZGU7CisgICAgICAgIC8vVE9ETzogYWRkIGNvZGVzIGZvciBleHRl
bmRlZCBBU0NJSQorICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7CisgICAgICAgICAgICBjYXNl
IDY3OiByZXR1cm4gQ2xpcGJvYXJkRXZlbnRUeXBlcy5DT1BZOworICAgICAgICAgICAgY2FzZSA4
NjogcmV0dXJuIENsaXBib2FyZEV2ZW50VHlwZXMuUEFTVEU7CisgICAgICAgICAgICBjYXNlIDg4
OiByZXR1cm4gQ2xpcGJvYXJkRXZlbnRUeXBlcy5DVVQ7CisgICAgICAgICAgICBkZWZhdWx0OiBy
ZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBDbGlwYm9hcmRJbmZvOwor
fSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FdmVudHMvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRXZlbnRzL2luZGV4LnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
S2V5Ym9hcmRFdmVudFR5cGVzLCBLZXlib2FyZEluZm8sIEtleWJvYXJkSW5mb1ByZSwgUG9pbnRl
ckV2ZW50VHlwZXMsIFBvaW50ZXJJbmZvQmFzZSwgUG9pbnRlckluZm9QcmUsIFBvaW50ZXJJbmZv
LCBDbGlwYm9hcmRFdmVudFR5cGVzLCBDbGlwYm9hcmRJbmZvICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfa2V5Ym9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4va2V5Ym9hcmRFdmVudHMg
Ki8gIi4vRXZlbnRzL2tleWJvYXJkRXZlbnRzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktleWJv
YXJkRXZlbnRUeXBlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2tleWJvYXJkRXZlbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIktleWJvYXJkRXZlbnRUeXBlcyJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJLZXlib2FyZEluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9rZXlib2Fy
ZEV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJLZXlib2FyZEluZm8iXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiS2V5Ym9hcmRJbmZvUHJlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfa2V5Ym9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siS2V5Ym9hcmRJ
bmZvUHJlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvaW50ZXJFdmVudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
cG9pbnRlckV2ZW50cyAqLyAiLi9FdmVudHMvcG9pbnRlckV2ZW50cy50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQb2ludGVyRXZlbnRUeXBlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BvaW50ZXJF
dmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUG9pbnRlckV2ZW50VHlwZXMiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRlckluZm9CYXNlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb2ludGVy
SW5mb0Jhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRlckluZm9QcmUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlBvaW50ZXJJbmZvUHJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvaW50ZXJJbmZv
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJQb2ludGVySW5mbyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9jbGlwYm9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vY2xpcGJvYXJkRXZlbnRzICovICIuL0V2ZW50cy9jbGlwYm9hcmRF
dmVudHMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2xpcGJvYXJkRXZlbnRUeXBlcyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2NsaXBib2FyZEV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJDbGlwYm9hcmRFdmVudFR5cGVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNsaXBi
b2FyZEluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jbGlwYm9hcmRFdmVudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siQ2xpcGJvYXJkSW5mbyJdOyB9KTsKKworCisKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9FdmVudHMva2V5Ym9hcmRFdmVudHMudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRXZlbnRzL2tleWJvYXJk
RXZlbnRzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogS2V5Ym9hcmRFdmVudFR5cGVzLCBLZXlib2FyZEluZm8sIEtl
eWJvYXJkSW5mb1ByZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJLZXli
b2FyZEV2ZW50VHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEtleWJvYXJkRXZlbnRUeXBlczsg
fSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJLZXlib2FyZEluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEtleWJvYXJkSW5mbzsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJLZXlib2FyZEluZm9QcmUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIEtleWJvYXJkSW5mb1ByZTsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lmpz
Iik7CisKKy8qKgorICogR2F0aGVyIHRoZSBsaXN0IG9mIGtleWJvYXJkIGV2ZW50IHR5cGVzIGFz
IGNvbnN0YW50cy4KKyAqLwordmFyIEtleWJvYXJkRXZlbnRUeXBlcyA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBLZXlib2FyZEV2ZW50VHlwZXMoKSB7CisgICAg
fQorICAgIC8qKgorICAgICAqIFRoZSBrZXlkb3duIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBrZXkg
YmVjb21lcyBhY3RpdmUgKHByZXNzZWQpLgorICAgICAqLworICAgIEtleWJvYXJkRXZlbnRUeXBl
cy5LRVlET1dOID0gMHgwMTsKKyAgICAvKioKKyAgICAgKiBUaGUga2V5dXAgZXZlbnQgaXMgZmly
ZWQgd2hlbiBhIGtleSBoYXMgYmVlbiByZWxlYXNlZC4KKyAgICAgKi8KKyAgICBLZXlib2FyZEV2
ZW50VHlwZXMuS0VZVVAgPSAweDAyOworICAgIHJldHVybiBLZXlib2FyZEV2ZW50VHlwZXM7Cit9
KCkpOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBzdG9yZSBrZXlib2FyZCByZWxh
dGVkIGluZm8gZm9yIHRoZSBvbktleWJvYXJkT2JzZXJ2YWJsZSBldmVudC4KKyAqLwordmFyIEtl
eWJvYXJkSW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBJbnN0YW50aWF0ZXMgYSBuZXcga2V5Ym9hcmQgaW5mby4KKyAgICAgKiBUaGlzIGNsYXNzIGlz
IHVzZWQgdG8gc3RvcmUga2V5Ym9hcmQgcmVsYXRlZCBpbmZvIGZvciB0aGUgb25LZXlib2FyZE9i
c2VydmFibGUgZXZlbnQuCisgICAgICogQHBhcmFtIHR5cGUgRGVmaW5lcyB0aGUgdHlwZSBvZiBl
dmVudCAoS2V5Ym9hcmRFdmVudFR5cGVzKQorICAgICAqIEBwYXJhbSBldmVudCBEZWZpbmVzIHRo
ZSByZWxhdGVkIGRvbSBldmVudAorICAgICAqLworICAgIGZ1bmN0aW9uIEtleWJvYXJkSW5mbygK
KyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSB0eXBlIG9mIGV2ZW50IChLZXlib2FyZEV2ZW50
VHlwZXMpCisgICAgICovCisgICAgdHlwZSwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUg
cmVsYXRlZCBkb20gZXZlbnQKKyAgICAgKi8KKyAgICBldmVudCkgeworICAgICAgICB0aGlzLnR5
cGUgPSB0eXBlOworICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7CisgICAgfQorICAgIHJldHVy
biBLZXlib2FyZEluZm87Cit9KCkpOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBz
dG9yZSBrZXlib2FyZCByZWxhdGVkIGluZm8gZm9yIHRoZSBvblByZUtleWJvYXJkT2JzZXJ2YWJs
ZSBldmVudC4KKyAqIFNldCB0aGUgc2tpcE9uS2V5Ym9hcmRPYnNlcnZhYmxlIHByb3BlcnR5IHRv
IHRydWUgaWYgeW91IHdhbnQgdGhlIGVuZ2luZSB0byBzdG9wIGFueSBwcm9jZXNzIGFmdGVyIHRo
aXMgZXZlbnQgaXMgdHJpZ2dlcmVkLCBldmVuIG5vdCBjYWxsaW5nIG9uS2V5Ym9hcmRPYnNlcnZh
YmxlCisgKi8KK3ZhciBLZXlib2FyZEluZm9QcmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
X3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRl
bmRzIl0oS2V5Ym9hcmRJbmZvUHJlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRp
YXRlcyBhIG5ldyBrZXlib2FyZCBwcmUgaW5mby4KKyAgICAgKiBUaGlzIGNsYXNzIGlzIHVzZWQg
dG8gc3RvcmUga2V5Ym9hcmQgcmVsYXRlZCBpbmZvIGZvciB0aGUgb25QcmVLZXlib2FyZE9ic2Vy
dmFibGUgZXZlbnQuCisgICAgICogQHBhcmFtIHR5cGUgRGVmaW5lcyB0aGUgdHlwZSBvZiBldmVu
dCAoS2V5Ym9hcmRFdmVudFR5cGVzKQorICAgICAqIEBwYXJhbSBldmVudCBEZWZpbmVzIHRoZSBy
ZWxhdGVkIGRvbSBldmVudAorICAgICAqLworICAgIGZ1bmN0aW9uIEtleWJvYXJkSW5mb1ByZSgK
KyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSB0eXBlIG9mIGV2ZW50IChLZXlib2FyZEV2ZW50
VHlwZXMpCisgICAgICovCisgICAgdHlwZSwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUg
cmVsYXRlZCBkb20gZXZlbnQKKyAgICAgKi8KKyAgICBldmVudCkgeworICAgICAgICB2YXIgX3Ro
aXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0eXBlLCBldmVudCkgfHwgdGhpczsKKyAgICAgICAgX3Ro
aXMudHlwZSA9IHR5cGU7CisgICAgICAgIF90aGlzLmV2ZW50ID0gZXZlbnQ7CisgICAgICAgIF90
aGlzLnNraXBPblBvaW50ZXJPYnNlcnZhYmxlID0gZmFsc2U7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgcmV0dXJuIEtleWJvYXJkSW5mb1ByZTsKK30oS2V5Ym9hcmRJbmZvKSk7
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRXZlbnRzL3BvaW50ZXJFdmVudHMudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9FdmVudHMv
cG9pbnRlckV2ZW50cy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9pbnRlckV2ZW50VHlwZXMsIFBvaW50ZXJJbmZv
QmFzZSwgUG9pbnRlckluZm9QcmUsIFBvaW50ZXJJbmZvICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBvaW50ZXJFdmVudFR5cGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQ
b2ludGVyRXZlbnRUeXBlczsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2ludGVySW5mb0Jhc2Ui
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvaW50ZXJJbmZvQmFzZTsgfSk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJQb2ludGVySW5mb1ByZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUG9pbnRlckluZm9QcmU7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRlckluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFBvaW50ZXJJbmZvOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8g
Ii4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhz
L21hdGgudmVjdG9yLnRzIik7CisKKworLyoqCisgKiBHYXRoZXIgdGhlIGxpc3Qgb2YgcG9pbnRl
ciBldmVudCB0eXBlcyBhcyBjb25zdGFudHMuCisgKi8KK3ZhciBQb2ludGVyRXZlbnRUeXBlcyA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQb2ludGVyRXZlbnRU
eXBlcygpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogVGhlIHBvaW50ZXJkb3duIGV2ZW50IGlz
IGZpcmVkIHdoZW4gYSBwb2ludGVyIGJlY29tZXMgYWN0aXZlLiBGb3IgbW91c2UsIGl0IGlzIGZp
cmVkIHdoZW4gdGhlIGRldmljZSB0cmFuc2l0aW9ucyBmcm9tIG5vIGJ1dHRvbnMgZGVwcmVzc2Vk
IHRvIGF0IGxlYXN0IG9uZSBidXR0b24gZGVwcmVzc2VkLiBGb3IgdG91Y2gsIGl0IGlzIGZpcmVk
IHdoZW4gcGh5c2ljYWwgY29udGFjdCBpcyBtYWRlIHdpdGggdGhlIGRpZ2l0aXplci4gRm9yIHBl
biwgaXQgaXMgZmlyZWQgd2hlbiB0aGUgc3R5bHVzIG1ha2VzIHBoeXNpY2FsIGNvbnRhY3Qgd2l0
aCB0aGUgZGlnaXRpemVyLgorICAgICAqLworICAgIFBvaW50ZXJFdmVudFR5cGVzLlBPSU5URVJE
T1dOID0gMHgwMTsKKyAgICAvKioKKyAgICAgKiBUaGUgcG9pbnRlcnVwIGV2ZW50IGlzIGZpcmVk
IHdoZW4gYSBwb2ludGVyIGlzIG5vIGxvbmdlciBhY3RpdmUuCisgICAgICovCisgICAgUG9pbnRl
ckV2ZW50VHlwZXMuUE9JTlRFUlVQID0gMHgwMjsKKyAgICAvKioKKyAgICAgKiBUaGUgcG9pbnRl
cm1vdmUgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIHBvaW50ZXIgY2hhbmdlcyBjb29yZGluYXRlcy4K
KyAgICAgKi8KKyAgICBQb2ludGVyRXZlbnRUeXBlcy5QT0lOVEVSTU9WRSA9IDB4MDQ7CisgICAg
LyoqCisgICAgICogVGhlIHBvaW50ZXJ3aGVlbCBldmVudCBpcyBmaXJlZCB3aGVuIGEgbW91c2Ug
d2hlZWwgaGFzIGJlZW4gcm90YXRlZC4KKyAgICAgKi8KKyAgICBQb2ludGVyRXZlbnRUeXBlcy5Q
T0lOVEVSV0hFRUwgPSAweDA4OworICAgIC8qKgorICAgICAqIFRoZSBwb2ludGVycGljayBldmVu
dCBpcyBmaXJlZCB3aGVuIGEgbWVzaCBvciBzcHJpdGUgaGFzIGJlZW4gcGlja2VkIGJ5IHRoZSBw
b2ludGVyLgorICAgICAqLworICAgIFBvaW50ZXJFdmVudFR5cGVzLlBPSU5URVJQSUNLID0gMHgx
MDsKKyAgICAvKioKKyAgICAgKiBUaGUgcG9pbnRlcnRhcCBldmVudCBpcyBmaXJlZCB3aGVuIGEg
dGhlIG9iamVjdCBoYXMgYmVlbiB0b3VjaGVkIGFuZCByZWxlYXNlZCB3aXRob3V0IGRyYWcuCisg
ICAgICovCisgICAgUG9pbnRlckV2ZW50VHlwZXMuUE9JTlRFUlRBUCA9IDB4MjA7CisgICAgLyoq
CisgICAgICogVGhlIHBvaW50ZXJkb3VibGV0YXAgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIHRoZSBv
YmplY3QgaGFzIGJlZW4gdG91Y2hlZCBhbmQgcmVsZWFzZWQgdHdpY2Ugd2l0aG91dCBkcmFnLgor
ICAgICAqLworICAgIFBvaW50ZXJFdmVudFR5cGVzLlBPSU5URVJET1VCTEVUQVAgPSAweDQwOwor
ICAgIHJldHVybiBQb2ludGVyRXZlbnRUeXBlczsKK30oKSk7CisKKy8qKgorICogQmFzZSBjbGFz
cyBvZiBwb2ludGVyIGluZm8gdHlwZXMuCisgKi8KK3ZhciBQb2ludGVySW5mb0Jhc2UgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIHRo
ZSBiYXNlIGNsYXNzIG9mIHBvaW50ZXJzIGluZm8uCisgICAgICogQHBhcmFtIHR5cGUgRGVmaW5l
cyB0aGUgdHlwZSBvZiBldmVudCAoUG9pbnRlckV2ZW50VHlwZXMpCisgICAgICogQHBhcmFtIGV2
ZW50IERlZmluZXMgdGhlIHJlbGF0ZWQgZG9tIGV2ZW50CisgICAgICovCisgICAgZnVuY3Rpb24g
UG9pbnRlckluZm9CYXNlKAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIHR5cGUgb2YgZXZl
bnQgKFBvaW50ZXJFdmVudFR5cGVzKQorICAgICAqLworICAgIHR5cGUsIAorICAgIC8qKgorICAg
ICAqIERlZmluZXMgdGhlIHJlbGF0ZWQgZG9tIGV2ZW50CisgICAgICovCisgICAgZXZlbnQpIHsK
KyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICAgICAgdGhpcy5ldmVudCA9IGV2ZW50Owor
ICAgIH0KKyAgICByZXR1cm4gUG9pbnRlckluZm9CYXNlOworfSgpKTsKKworLyoqCisgKiBUaGlz
IGNsYXNzIGlzIHVzZWQgdG8gc3RvcmUgcG9pbnRlciByZWxhdGVkIGluZm8gZm9yIHRoZSBvblBy
ZVBvaW50ZXJPYnNlcnZhYmxlIGV2ZW50LgorICogU2V0IHRoZSBza2lwT25Qb2ludGVyT2JzZXJ2
YWJsZSBwcm9wZXJ0eSB0byB0cnVlIGlmIHlvdSB3YW50IHRoZSBlbmdpbmUgdG8gc3RvcCBhbnkg
cHJvY2VzcyBhZnRlciB0aGlzIGV2ZW50IGlzIHRyaWdnZXJlZCwgZXZlbiBub3QgY2FsbGluZyBv
blBvaW50ZXJPYnNlcnZhYmxlCisgKi8KK3ZhciBQb2ludGVySW5mb1ByZSA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2V4dGVuZHMiXShQb2ludGVySW5mb1ByZSwgX3N1cGVyKTsKKyAgICAvKioKKyAg
ICAgKiBJbnN0YW50aWF0ZXMgYSBQb2ludGVySW5mb1ByZSB0byBzdG9yZSBwb2ludGVyIHJlbGF0
ZWQgaW5mbyB0byB0aGUgb25QcmVQb2ludGVyT2JzZXJ2YWJsZSBldmVudC4KKyAgICAgKiBAcGFy
YW0gdHlwZSBEZWZpbmVzIHRoZSB0eXBlIG9mIGV2ZW50IChQb2ludGVyRXZlbnRUeXBlcykKKyAg
ICAgKiBAcGFyYW0gZXZlbnQgRGVmaW5lcyB0aGUgcmVsYXRlZCBkb20gZXZlbnQKKyAgICAgKiBA
cGFyYW0gbG9jYWxYIERlZmluZXMgdGhlIGxvY2FsIHggY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50
ZXIgd2hlbiB0aGUgZXZlbnQgb2NjdXJlZAorICAgICAqIEBwYXJhbSBsb2NhbFkgRGVmaW5lcyB0
aGUgbG9jYWwgeSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnRlciB3aGVuIHRoZSBldmVudCBvY2N1
cmVkCisgICAgICovCisgICAgZnVuY3Rpb24gUG9pbnRlckluZm9QcmUodHlwZSwgZXZlbnQsIGxv
Y2FsWCwgbG9jYWxZKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5
cGUsIGV2ZW50KSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAgICogUmF5IGZyb20gYSBw
b2ludGVyIGlmIGF2YWlsaWJsZSAoZWcuIDZkb2YgY29udHJvbGxlcikKKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLnJheSA9IG51bGw7CisgICAgICAgIF90aGlzLnNraXBPblBvaW50ZXJPYnNl
cnZhYmxlID0gZmFsc2U7CisgICAgICAgIF90aGlzLmxvY2FsUG9zaXRpb24gPSBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjIiXShsb2Nh
bFgsIGxvY2FsWSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgcmV0dXJuIFBv
aW50ZXJJbmZvUHJlOworfShQb2ludGVySW5mb0Jhc2UpKTsKKworLyoqCisgKiBUaGlzIHR5cGUg
Y29udGFpbnMgYWxsIHRoZSBkYXRhIHJlbGF0ZWQgdG8gYSBwb2ludGVyIGV2ZW50IGluIEJhYnls
b24uanMuCisgKiBUaGUgZXZlbnQgbWVtYmVyIGlzIGFuIGluc3RhbmNlIG9mIFBvaW50ZXJFdmVu
dCBmb3IgYWxsIHR5cGVzIGV4Y2VwdCBQb2ludGVyV2hlZWwgYW5kIGlzIG9mIHR5cGUgTW91c2VX
aGVlbEV2ZW50IHdoZW4gdHlwZSBlcXVhbHMgUG9pbnRlcldoZWVsLiBUaGUgZGlmZmVyZW50IGV2
ZW50IHR5cGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUG9pbnRlckV2ZW50VHlwZXMgY2xhc3MuCisg
Ki8KK3ZhciBQb2ludGVySW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShQb2lu
dGVySW5mbywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBQb2ludGVy
SW5mbyB0byBzdG9yZSBwb2ludGVyIHJlbGF0ZWQgaW5mbyB0byB0aGUgb25Qb2ludGVyT2JzZXJ2
YWJsZSBldmVudC4KKyAgICAgKiBAcGFyYW0gdHlwZSBEZWZpbmVzIHRoZSB0eXBlIG9mIGV2ZW50
IChQb2ludGVyRXZlbnRUeXBlcykKKyAgICAgKiBAcGFyYW0gZXZlbnQgRGVmaW5lcyB0aGUgcmVs
YXRlZCBkb20gZXZlbnQKKyAgICAgKiBAcGFyYW0gcGlja0luZm8gRGVmaW5lcyB0aGUgcGlja2lu
ZyBpbmZvIGFzc29jaWF0ZWQgdG8gdGhlIGluZm8gKGlmIGFueSlcCisgICAgICovCisgICAgZnVu
Y3Rpb24gUG9pbnRlckluZm8odHlwZSwgZXZlbnQsIAorICAgIC8qKgorICAgICAqIERlZmluZXMg
dGhlIHBpY2tpbmcgaW5mbyBhc3NvY2lhdGVkIHRvIHRoZSBpbmZvIChpZiBhbnkpXAorICAgICAq
LworICAgIHBpY2tJbmZvKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMs
IHR5cGUsIGV2ZW50KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5waWNrSW5mbyA9IHBpY2tJbmZv
OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIHJldHVybiBQb2ludGVySW5mbzsK
K30oUG9pbnRlckluZm9CYXNlKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vR2FtZXBh
ZHMvQ29udHJvbGxlcnMvZGF5ZHJlYW1Db250cm9sbGVyLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dhbWVw
YWRzL0NvbnRyb2xsZXJzL2RheWRyZWFtQ29udHJvbGxlci50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IERheWRyZWFtQ29udHJvbGxlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJEYXlkcmVhbUNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERheWRy
ZWFtQ29udHJvbGxlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9M
b2FkaW5nL3NjZW5lTG9hZGVyICovICIuL0xvYWRpbmcvc2NlbmVMb2FkZXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfd2ViVlJDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3dlYlZSQ29udHJvbGxlciAqLyAi
Li9HYW1lcGFkcy9Db250cm9sbGVycy93ZWJWUkNvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc2VFbmFibGVkQ29udHJvbGxl
ciAqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy9wb3NlRW5hYmxlZENvbnRyb2xsZXIudHMiKTsK
KworCisKKworCisvKioKKyAqIEdvb2dsZSBEYXlkcmVhbSBjb250cm9sbGVyCisgKi8KK3ZhciBE
YXlkcmVhbUNvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oRGF5ZHJl
YW1Db250cm9sbGVyLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgRGF5
ZHJlYW1Db250cm9sbGVyIGZyb20gYSBnYW1lcGFkCisgICAgICogQHBhcmFtIHZyR2FtZXBhZCB0
aGUgZ2FtZXBhZCB0aGF0IHRoZSBjb250cm9sbGVyIHNob3VsZCBiZSBjcmVhdGVkIGZyb20KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBEYXlkcmVhbUNvbnRyb2xsZXIodnJHYW1lcGFkKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHZyR2FtZXBhZCkgfHwgdGhpczsKKyAg
ICAgICAgX3RoaXMuY29udHJvbGxlclR5cGUgPSBfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvc2VFbmFibGVkQ29udHJvbGxlclR5cGUiXS5EQVlE
UkVBTTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBJbXBs
ZW1lbnRzIGFic3RyYWN0IG1ldGhvZCBvbiBXZWJWUkNvbnRyb2xsZXIgY2xhc3MsIGxvYWRpbmcg
Y29udHJvbGxlciBtZXNoZXMgYW5kIGNhbGxpbmcgdGhpcy5hdHRhY2hUb01lc2ggaWYgc3VjY2Vz
c2Z1bC4KKyAgICAgKiBAcGFyYW0gc2NlbmUgc2NlbmUgaW4gd2hpY2ggdG8gYWRkIG1lc2hlcwor
ICAgICAqIEBwYXJhbSBtZXNoTG9hZGVkIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQg
d2lsbCBiZSBjYWxsZWQgaWYgdGhlIG1lc2ggbG9hZHMgc3VjY2Vzc2Z1bGx5LgorICAgICAqLwor
ICAgIERheWRyZWFtQ29udHJvbGxlci5wcm90b3R5cGUuaW5pdENvbnRyb2xsZXJNZXNoID0gZnVu
Y3Rpb24gKHNjZW5lLCBtZXNoTG9hZGVkKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlNjZW5lTG9hZGVyIl0uSW1wb3J0TWVzaCgiIiwgRGF5ZHJlYW1Db250cm9sbGVyLk1PREVMX0JB
U0VfVVJMLCBEYXlkcmVhbUNvbnRyb2xsZXIuTU9ERUxfRklMRU5BTUUsIHNjZW5lLCBmdW5jdGlv
biAobmV3TWVzaGVzKSB7CisgICAgICAgICAgICBfdGhpcy5fZGVmYXVsdE1vZGVsID0gbmV3TWVz
aGVzWzFdOworICAgICAgICAgICAgX3RoaXMuYXR0YWNoVG9NZXNoKF90aGlzLl9kZWZhdWx0TW9k
ZWwpOworICAgICAgICAgICAgaWYgKG1lc2hMb2FkZWQpIHsKKyAgICAgICAgICAgICAgICBtZXNo
TG9hZGVkKF90aGlzLl9kZWZhdWx0TW9kZWwpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxlZCBvbmNlIGZvciBlYWNoIGJ1dHRvbiB0aGF0
IGNoYW5nZWQgc3RhdGUgc2luY2UgdGhlIGxhc3QgZnJhbWUKKyAgICAgKiBAcGFyYW0gYnV0dG9u
SWR4IFdoaWNoIGJ1dHRvbiBpbmRleCBjaGFuZ2VkCisgICAgICogQHBhcmFtIHN0YXRlIE5ldyBz
dGF0ZSBvZiB0aGUgYnV0dG9uCisgICAgICogQHBhcmFtIGNoYW5nZXMgV2hpY2ggcHJvcGVydGll
cyBvbiB0aGUgc3RhdGUgY2hhbmdlZCBzaW5jZSBsYXN0IGZyYW1lCisgICAgICovCisgICAgRGF5
ZHJlYW1Db250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlQnV0dG9uQ2hhbmdlID0gZnVuY3Rpb24g
KGJ1dHRvbklkeCwgc3RhdGUsIGNoYW5nZXMpIHsKKyAgICAgICAgLy8gRGF5ZHJlYW0gY29udHJv
bGxlciBvbmx5IGhhcyAxIEdhbWVwYWRCdXR0b24gKG9uIHRoZSB0cmFja3BhZCkuCisgICAgICAg
IGlmIChidXR0b25JZHggPT09IDApIHsKKyAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gdGhp
cy5vblRyaWdnZXJTdGF0ZUNoYW5nZWRPYnNlcnZhYmxlOworICAgICAgICAgICAgaWYgKG9ic2Vy
dmFibGUpIHsKKyAgICAgICAgICAgICAgICBvYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhzdGF0
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAvLyBJZiB0aGUgYXBwIG9yIGhvbWUgYnV0dG9ucyBhcmUgZXZlciBtYWRlIGF2YWlsYWJsZQor
ICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxv
Z2dlciJdLldhcm4oIlVucmVjb2duaXplZCBEYXlkcmVhbSBidXR0b24gaW5kZXg6ICIgKyBidXR0
b25JZHgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCYXNlIFVybCBmb3Ig
dGhlIGNvbnRyb2xsZXIgbW9kZWwuCisgICAgICovCisgICAgRGF5ZHJlYW1Db250cm9sbGVyLk1P
REVMX0JBU0VfVVJMID0gJ2h0dHBzOi8vY29udHJvbGxlcnMuYmFieWxvbmpzLmNvbS9nZW5lcmlj
Lyc7CisgICAgLyoqCisgICAgICogRmlsZSBuYW1lIGZvciB0aGUgY29udHJvbGxlciBtb2RlbC4K
KyAgICAgKi8KKyAgICBEYXlkcmVhbUNvbnRyb2xsZXIuTU9ERUxfRklMRU5BTUUgPSAnZ2VuZXJp
Yy5iYWJ5bG9uJzsKKyAgICAvKioKKyAgICAgKiBHYW1lcGFkIElkIHByZWZpeCB1c2VkIHRvIGlk
ZW50aWZ5IERheWRyZWFtIENvbnRyb2xsZXIuCisgICAgICovCisgICAgRGF5ZHJlYW1Db250cm9s
bGVyLkdBTUVQQURfSURfUFJFRklYID0gJ0RheWRyZWFtJzsgLy8gaWQgaXMgJ0RheWRyZWFtIENv
bnRyb2xsZXInCisgICAgcmV0dXJuIERheWRyZWFtQ29udHJvbGxlcjsKK30oX3dlYlZSQ29udHJv
bGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJXZWJWUkNvbnRyb2xsZXIiXSkpOwor
CitfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBv
c2VFbmFibGVkQ29udHJvbGxlckhlbHBlciJdLl9Db250cm9sbGVyRmFjdG9yaWVzLnB1c2goewor
ICAgIGNhbkNyZWF0ZTogZnVuY3Rpb24gKGdhbWVwYWRJbmZvKSB7CisgICAgICAgIHJldHVybiBn
YW1lcGFkSW5mby5pZC5pbmRleE9mKERheWRyZWFtQ29udHJvbGxlci5HQU1FUEFEX0lEX1BSRUZJ
WCkgPT09IDA7CisgICAgfSwKKyAgICBjcmVhdGU6IGZ1bmN0aW9uIChnYW1lcGFkSW5mbykgewor
ICAgICAgICByZXR1cm4gbmV3IERheWRyZWFtQ29udHJvbGxlcihnYW1lcGFkSW5mbyk7CisgICAg
fQorfSk7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0dhbWVwYWRzL0NvbnRyb2xsZXJzL2dl
YXJWUkNvbnRyb2xsZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dhbWVwYWRzL0NvbnRyb2xsZXJzL2dlYXJW
UkNvbnRyb2xsZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogR2VhclZSQ29udHJvbGxl
ciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHZWFyVlJDb250cm9sbGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBHZWFyVlJDb250cm9sbGVyOyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5l
czYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNo
ZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Mb2FkaW5nX3NjZW5lTG9h
ZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9Mb2FkaW5nL3NjZW5lTG9hZGVyICovICIuL0xvYWRpbmcvc2NlbmVMb2FkZXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViVlJDb250cm9sbGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3dlYlZSQ29udHJv
bGxlciAqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy93ZWJWUkNvbnRyb2xsZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc2VFbmFibGVk
Q29udHJvbGxlciAqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy9wb3NlRW5hYmxlZENvbnRyb2xs
ZXIudHMiKTsKKworCisKKworCisKKy8qKgorICAgICAqIEdlYXIgVlIgQ29udHJvbGxlcgorICAg
ICAqLwordmFyIEdlYXJWUkNvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1
cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRz
Il0oR2VhclZSQ29udHJvbGxlciwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEg
bmV3IEdlYXJWUkNvbnRyb2xsZXIgZnJvbSBhIGdhbWVwYWQKKyAgICAgKiBAcGFyYW0gdnJHYW1l
cGFkIHRoZSBnYW1lcGFkIHRoYXQgdGhlIGNvbnRyb2xsZXIgc2hvdWxkIGJlIGNyZWF0ZWQgZnJv
bQorICAgICAqLworICAgIGZ1bmN0aW9uIEdlYXJWUkNvbnRyb2xsZXIodnJHYW1lcGFkKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHZyR2FtZXBhZCkgfHwgdGhpczsK
KyAgICAgICAgX3RoaXMuX2J1dHRvbkluZGV4VG9PYnNlcnZhYmxlTmFtZU1hcCA9IFsKKyAgICAg
ICAgICAgICdvblBhZFN0YXRlQ2hhbmdlZE9ic2VydmFibGUnLAorICAgICAgICAgICAgJ29uVHJp
Z2dlclN0YXRlQ2hhbmdlZE9ic2VydmFibGUnIC8vIFRyaWdnZXIKKyAgICAgICAgXTsKKyAgICAg
ICAgX3RoaXMuY29udHJvbGxlclR5cGUgPSBfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlBvc2VFbmFibGVkQ29udHJvbGxlclR5cGUiXS5HRUFSX1ZS
OworICAgICAgICAvLyBJbml0aWFsIHN0YXJ0aW5nIHBvc2l0aW9uIGRlZmF1bHRzIHRvIHdoZXJl
IGhhbmQgd291bGQgYmUgKGluY2FzZSBvZiBvbmx5IDNkb2YgY29udHJvbGxlcikKKyAgICAgICAg
X3RoaXMuX2NhbGN1bGF0ZWRQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKF90aGlzLmhhbmQgPT0gImxlZnQiID8g
LTAuMTUgOiAwLjE1LCAtMC41LCAwLjI1KTsKKyAgICAgICAgX3RoaXMuX2Rpc2FibGVUcmFja1Bv
c2l0aW9uKF90aGlzLl9jYWxjdWxhdGVkUG9zaXRpb24pOworICAgICAgICByZXR1cm4gX3RoaXM7
CisgICAgfQorICAgIC8qKgorICAgICAqIEltcGxlbWVudHMgYWJzdHJhY3QgbWV0aG9kIG9uIFdl
YlZSQ29udHJvbGxlciBjbGFzcywgbG9hZGluZyBjb250cm9sbGVyIG1lc2hlcyBhbmQgY2FsbGlu
ZyB0aGlzLmF0dGFjaFRvTWVzaCBpZiBzdWNjZXNzZnVsLgorICAgICAqIEBwYXJhbSBzY2VuZSBz
Y2VuZSBpbiB3aGljaCB0byBhZGQgbWVzaGVzCisgICAgICogQHBhcmFtIG1lc2hMb2FkZWQgb3B0
aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBpZiB0aGUgbWVzaCBs
b2FkcyBzdWNjZXNzZnVsbHkuCisgICAgICovCisgICAgR2VhclZSQ29udHJvbGxlci5wcm90b3R5
cGUuaW5pdENvbnRyb2xsZXJNZXNoID0gZnVuY3Rpb24gKHNjZW5lLCBtZXNoTG9hZGVkKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlNjZW5lTG9hZGVyIl0uSW1wb3J0TWVzaCgiIiwg
R2VhclZSQ29udHJvbGxlci5NT0RFTF9CQVNFX1VSTCwgR2VhclZSQ29udHJvbGxlci5NT0RFTF9G
SUxFTkFNRSwgc2NlbmUsIGZ1bmN0aW9uIChuZXdNZXNoZXMpIHsKKyAgICAgICAgICAgIC8vIE9m
ZnNldCB0aGUgY29udHJvbGxlciBzbyBpdCB3aWxsIHJvdGF0ZSBhcm91bmQgdGhlIHVzZXJzIHdy
aXN0CisgICAgICAgICAgICB2YXIgbWVzaCA9IG5ldyBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTWVzaCJdKCIiLCBzY2VuZSk7CisgICAgICAgICAgICBuZXdNZXNo
ZXNbMV0ucGFyZW50ID0gbWVzaDsKKyAgICAgICAgICAgIG5ld01lc2hlc1sxXS5wb3NpdGlvbi56
ID0gLTAuMTU7CisgICAgICAgICAgICBfdGhpcy5fZGVmYXVsdE1vZGVsID0gbWVzaDsKKyAgICAg
ICAgICAgIF90aGlzLmF0dGFjaFRvTWVzaChfdGhpcy5fZGVmYXVsdE1vZGVsKTsKKyAgICAgICAg
ICAgIGlmIChtZXNoTG9hZGVkKSB7CisgICAgICAgICAgICAgICAgbWVzaExvYWRlZChfdGhpcy5f
ZGVmYXVsdE1vZGVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDYWxsZWQgb25jZSBmb3IgZWFjaCBidXR0b24gdGhhdCBjaGFuZ2VkIHN0YXRl
IHNpbmNlIHRoZSBsYXN0IGZyYW1lCisgICAgICogQHBhcmFtIGJ1dHRvbklkeCBXaGljaCBidXR0
b24gaW5kZXggY2hhbmdlZAorICAgICAqIEBwYXJhbSBzdGF0ZSBOZXcgc3RhdGUgb2YgdGhlIGJ1
dHRvbgorICAgICAqIEBwYXJhbSBjaGFuZ2VzIFdoaWNoIHByb3BlcnRpZXMgb24gdGhlIHN0YXRl
IGNoYW5nZWQgc2luY2UgbGFzdCBmcmFtZQorICAgICAqLworICAgIEdlYXJWUkNvbnRyb2xsZXIu
cHJvdG90eXBlLl9oYW5kbGVCdXR0b25DaGFuZ2UgPSBmdW5jdGlvbiAoYnV0dG9uSWR4LCBzdGF0
ZSwgY2hhbmdlcykgeworICAgICAgICBpZiAoYnV0dG9uSWR4IDwgdGhpcy5fYnV0dG9uSW5kZXhU
b09ic2VydmFibGVOYW1lTWFwLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIG9ic2VydmFibGVO
YW1lID0gdGhpcy5fYnV0dG9uSW5kZXhUb09ic2VydmFibGVOYW1lTWFwW2J1dHRvbklkeF07Cisg
ICAgICAgICAgICAvLyBPbmx5IGVtaXQgZXZlbnRzIGZvciBidXR0b25zIHRoYXQgd2Uga25vdyBo
b3cgdG8gbWFwIGZyb20gaW5kZXggdG8gb2JzZXJ2YWJsZQorICAgICAgICAgICAgdmFyIG9ic2Vy
dmFibGUgPSB0aGlzW29ic2VydmFibGVOYW1lXTsKKyAgICAgICAgICAgIGlmIChvYnNlcnZhYmxl
KSB7CisgICAgICAgICAgICAgICAgb2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoc3RhdGUpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCYXNlIFVy
bCBmb3IgdGhlIGNvbnRyb2xsZXIgbW9kZWwuCisgICAgICovCisgICAgR2VhclZSQ29udHJvbGxl
ci5NT0RFTF9CQVNFX1VSTCA9ICdodHRwczovL2NvbnRyb2xsZXJzLmJhYnlsb25qcy5jb20vZ2Vu
ZXJpYy8nOworICAgIC8qKgorICAgICAqIEZpbGUgbmFtZSBmb3IgdGhlIGNvbnRyb2xsZXIgbW9k
ZWwuCisgICAgICovCisgICAgR2VhclZSQ29udHJvbGxlci5NT0RFTF9GSUxFTkFNRSA9ICdnZW5l
cmljLmJhYnlsb24nOworICAgIC8qKgorICAgICAqIEdhbWVwYWQgSWQgcHJlZml4IHVzZWQgdG8g
aWRlbnRpZnkgdGhpcyBjb250cm9sbGVyLgorICAgICAqLworICAgIEdlYXJWUkNvbnRyb2xsZXIu
R0FNRVBBRF9JRF9QUkVGSVggPSAnR2VhciBWUic7IC8vIGlkIGlzICdHZWFyIFZSIENvbnRyb2xs
ZXInCisgICAgcmV0dXJuIEdlYXJWUkNvbnRyb2xsZXI7Cit9KF93ZWJWUkNvbnRyb2xsZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siV2ViVlJDb250cm9sbGVyIl0pKTsKKworX3Bvc2VF
bmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJQb3NlRW5hYmxl
ZENvbnRyb2xsZXJIZWxwZXIiXS5fQ29udHJvbGxlckZhY3Rvcmllcy5wdXNoKHsKKyAgICBjYW5D
cmVhdGU6IGZ1bmN0aW9uIChnYW1lcGFkSW5mbykgeworICAgICAgICByZXR1cm4gZ2FtZXBhZElu
Zm8uaWQuaW5kZXhPZihHZWFyVlJDb250cm9sbGVyLkdBTUVQQURfSURfUFJFRklYKSA9PT0gMCB8
fAorICAgICAgICAgICAgZ2FtZXBhZEluZm8uaWQuaW5kZXhPZignT2N1bHVzIEdvJykgIT09IC0x
IHx8CisgICAgICAgICAgICBnYW1lcGFkSW5mby5pZC5pbmRleE9mKCdWaXZlIEZvY3VzJykgIT09
IC0xOworICAgIH0sCisgICAgY3JlYXRlOiBmdW5jdGlvbiAoZ2FtZXBhZEluZm8pIHsKKyAgICAg
ICAgcmV0dXJuIG5ldyBHZWFyVlJDb250cm9sbGVyKGdhbWVwYWRJbmZvKTsKKyAgICB9Cit9KTsK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvZ2VuZXJpY0Nv
bnRyb2xsZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9HYW1lcGFkcy9Db250cm9sbGVycy9nZW5lcmljQ29u
dHJvbGxlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogR2VuZXJpY0NvbnRyb2xsZXIg
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2VuZXJpY0NvbnRyb2xsZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIEdlbmVyaWNDb250cm9sbGVyOyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5l
czYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTG9hZGluZ19zY2VuZUxvYWRlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTG9hZGluZy9zY2VuZUxvYWRlciAqLyAiLi9Mb2FkaW5nL3NjZW5lTG9hZGVyLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlYlZSQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJWUkNvbnRyb2xsZXIg
Ki8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvd2ViVlJDb250cm9sbGVyLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3Bvc2VFbmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3NlRW5hYmxlZENvbnRy
b2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvcG9zZUVuYWJsZWRDb250cm9sbGVyLnRz
Iik7CisKKworCisKKy8qKgorICogR2VuZXJpYyBDb250cm9sbGVyCisgKi8KK3ZhciBHZW5lcmlj
Q29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShHZW5lcmljQ29udHJv
bGxlciwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEdlbmVyaWNDb250
cm9sbGVyIGZyb20gYSBnYW1lcGFkCisgICAgICogQHBhcmFtIHZyR2FtZXBhZCB0aGUgZ2FtZXBh
ZCB0aGF0IHRoZSBjb250cm9sbGVyIHNob3VsZCBiZSBjcmVhdGVkIGZyb20KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBHZW5lcmljQ29udHJvbGxlcih2ckdhbWVwYWQpIHsKKyAgICAgICAgcmV0dXJu
IF9zdXBlci5jYWxsKHRoaXMsIHZyR2FtZXBhZCkgfHwgdGhpczsKKyAgICB9CisgICAgLyoqCisg
ICAgICogSW1wbGVtZW50cyBhYnN0cmFjdCBtZXRob2Qgb24gV2ViVlJDb250cm9sbGVyIGNsYXNz
LCBsb2FkaW5nIGNvbnRyb2xsZXIgbWVzaGVzIGFuZCBjYWxsaW5nIHRoaXMuYXR0YWNoVG9NZXNo
IGlmIHN1Y2Nlc3NmdWwuCisgICAgICogQHBhcmFtIHNjZW5lIHNjZW5lIGluIHdoaWNoIHRvIGFk
ZCBtZXNoZXMKKyAgICAgKiBAcGFyYW0gbWVzaExvYWRlZCBvcHRpb25hbCBjYWxsYmFjayBmdW5j
dGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGlmIHRoZSBtZXNoIGxvYWRzIHN1Y2Nlc3NmdWxseS4K
KyAgICAgKi8KKyAgICBHZW5lcmljQ29udHJvbGxlci5wcm90b3R5cGUuaW5pdENvbnRyb2xsZXJN
ZXNoID0gZnVuY3Rpb24gKHNjZW5lLCBtZXNoTG9hZGVkKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlNjZW5lTG9hZGVyIl0uSW1wb3J0TWVzaCgiIiwgR2VuZXJpY0NvbnRyb2xsZXIu
TU9ERUxfQkFTRV9VUkwsIEdlbmVyaWNDb250cm9sbGVyLk1PREVMX0ZJTEVOQU1FLCBzY2VuZSwg
ZnVuY3Rpb24gKG5ld01lc2hlcykgeworICAgICAgICAgICAgX3RoaXMuX2RlZmF1bHRNb2RlbCA9
IG5ld01lc2hlc1sxXTsKKyAgICAgICAgICAgIF90aGlzLmF0dGFjaFRvTWVzaChfdGhpcy5fZGVm
YXVsdE1vZGVsKTsKKyAgICAgICAgICAgIGlmIChtZXNoTG9hZGVkKSB7CisgICAgICAgICAgICAg
ICAgbWVzaExvYWRlZChfdGhpcy5fZGVmYXVsdE1vZGVsKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgb25jZSBmb3IgZWFjaCBidXR0
b24gdGhhdCBjaGFuZ2VkIHN0YXRlIHNpbmNlIHRoZSBsYXN0IGZyYW1lCisgICAgICogQHBhcmFt
IGJ1dHRvbklkeCBXaGljaCBidXR0b24gaW5kZXggY2hhbmdlZAorICAgICAqIEBwYXJhbSBzdGF0
ZSBOZXcgc3RhdGUgb2YgdGhlIGJ1dHRvbgorICAgICAqIEBwYXJhbSBjaGFuZ2VzIFdoaWNoIHBy
b3BlcnRpZXMgb24gdGhlIHN0YXRlIGNoYW5nZWQgc2luY2UgbGFzdCBmcmFtZQorICAgICAqLwor
ICAgIEdlbmVyaWNDb250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlQnV0dG9uQ2hhbmdlID0gZnVu
Y3Rpb24gKGJ1dHRvbklkeCwgc3RhdGUsIGNoYW5nZXMpIHsKKyAgICAgICAgY29uc29sZS5sb2co
IkJ1dHRvbiBpZDogIiArIGJ1dHRvbklkeCArICJzdGF0ZTogIik7CisgICAgICAgIGNvbnNvbGUu
ZGlyKHN0YXRlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJhc2UgVXJsIGZvciB0aGUgY29u
dHJvbGxlciBtb2RlbC4KKyAgICAgKi8KKyAgICBHZW5lcmljQ29udHJvbGxlci5NT0RFTF9CQVNF
X1VSTCA9ICdodHRwczovL2NvbnRyb2xsZXJzLmJhYnlsb25qcy5jb20vZ2VuZXJpYy8nOworICAg
IC8qKgorICAgICAqIEZpbGUgbmFtZSBmb3IgdGhlIGNvbnRyb2xsZXIgbW9kZWwuCisgICAgICov
CisgICAgR2VuZXJpY0NvbnRyb2xsZXIuTU9ERUxfRklMRU5BTUUgPSAnZ2VuZXJpYy5iYWJ5bG9u
JzsKKyAgICByZXR1cm4gR2VuZXJpY0NvbnRyb2xsZXI7Cit9KF93ZWJWUkNvbnRyb2xsZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siV2ViVlJDb250cm9sbGVyIl0pKTsKKworX3Bvc2VF
bmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb3NlRW5hYmxl
ZENvbnRyb2xsZXJIZWxwZXIiXS5fRGVmYXVsdENvbnRyb2xsZXJGYWN0b3J5ID0gZnVuY3Rpb24g
KGdhbWVwYWRJbmZvKSB7IHJldHVybiBuZXcgR2VuZXJpY0NvbnRyb2xsZXIoZ2FtZXBhZEluZm8p
OyB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy9pbmRl
eC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL0dhbWVwYWRzL0NvbnRyb2xsZXJzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBEYXlk
cmVhbUNvbnRyb2xsZXIsIEdlYXJWUkNvbnRyb2xsZXIsIEdlbmVyaWNDb250cm9sbGVyLCBPY3Vs
dXNUb3VjaENvbnRyb2xsZXIsIFBvc2VFbmFibGVkQ29udHJvbGxlclR5cGUsIFBvc2VFbmFibGVk
Q29udHJvbGxlckhlbHBlciwgUG9zZUVuYWJsZWRDb250cm9sbGVyLCBWaXZlQ29udHJvbGxlciwg
V2ViVlJDb250cm9sbGVyLCBXaW5kb3dzTW90aW9uQ29udHJvbGxlciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RheWRyZWFtQ29udHJvbGxlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kYXlkcmVh
bUNvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvZGF5ZHJlYW1Db250cm9sbGVy
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRheWRyZWFtQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2RheWRyZWFtQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJEYXlkcmVhbUNvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
Z2VhclZSQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9nZWFyVlJDb250cm9sbGVyICovICIuL0dhbWVwYWRzL0NvbnRyb2xs
ZXJzL2dlYXJWUkNvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2VhclZSQ29udHJv
bGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2dlYXJWUkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siR2VhclZSQ29udHJvbGxlciJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9nZW5lcmljQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9nZW5lcmljQ29udHJvbGxlciAqLyAiLi9H
YW1lcGFkcy9Db250cm9sbGVycy9nZW5lcmljQ29udHJvbGxlci50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJHZW5lcmljQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2dlbmVyaWNDb250
cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdlbmVyaWNDb250cm9sbGVyIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX29jdWx1c1RvdWNoQ29udHJvbGxlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9v
Y3VsdXNUb3VjaENvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvb2N1bHVzVG91
Y2hDb250cm9sbGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdWx1c1RvdWNoQ29udHJvbGxl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX29jdWx1c1RvdWNoQ29udHJvbGxlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJPY3VsdXNUb3VjaENvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc2VFbmFibGVkQ29u
dHJvbGxlciAqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy9wb3NlRW5hYmxlZENvbnRyb2xsZXIu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX3Bvc2VFbmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXJUeXBlIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X3Bvc2VFbmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQb3Nl
RW5hYmxlZENvbnRyb2xsZXJIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zZUVu
YWJsZWRDb250cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9zZUVuYWJsZWRDb250cm9s
bGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvc2VFbmFibGVkQ29udHJvbGxlciJd
OyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92aXZlQ29udHJvbGxlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi92aXZlQ29u
dHJvbGxlciAqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy92aXZlQ29udHJvbGxlci50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJWaXZlQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Zp
dmVDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZpdmVDb250cm9sbGVy
Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlYlZSQ29udHJvbGxlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJW
UkNvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvd2ViVlJDb250cm9sbGVyLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlZSQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX3dlYlZSQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJXZWJWUkNv
bnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2luZG93c01vdGlv
bkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vd2luZG93c01vdGlvbkNvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29udHJv
bGxlcnMvd2luZG93c01vdGlvbkNvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2lu
ZG93c01vdGlvbkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF93aW5kb3dzTW90aW9u
Q29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJXaW5kb3dzTW90aW9uQ29u
dHJvbGxlciJdOyB9KTsKKworCisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vR2FtZXBhZHMvQ29udHJvbGxlcnMvb2N1bHVzVG91Y2hDb250cm9sbGVyLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL0dhbWVwYWRzL0NvbnRyb2xsZXJzL29jdWx1c1RvdWNoQ29udHJvbGxlci50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE9jdWx1c1RvdWNoQ29udHJvbGxlciAqLwor
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPY3VsdXNUb3VjaENvbnRyb2xsZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIE9jdWx1c1RvdWNoQ29udHJvbGxlcjsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNs
aWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9Mb2FkaW5nL3NjZW5lTG9h
ZGVyICovICIuL0xvYWRpbmcvc2NlbmVMb2FkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfd2ViVlJDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3dlYlZSQ29udHJvbGxlciAqLyAiLi9HYW1lcGFkcy9Db250
cm9sbGVycy93ZWJWUkNvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc2VFbmFibGVkQ29udHJvbGxlciAqLyAiLi9HYW1lcGFk
cy9Db250cm9sbGVycy9wb3NlRW5hYmxlZENvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2lu
ZXMvZW5naW5lLnRzIik7CisKKworCisKKworCisvKioKKyAqIE9jdWx1cyBUb3VjaCBDb250cm9s
bGVyCisgKi8KK3ZhciBPY3VsdXNUb3VjaENvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oT2N1bHVzVG91Y2hDb250cm9sbGVyLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBuZXcgT2N1bHVzVG91Y2hDb250cm9sbGVyIGZyb20gYSBnYW1lcGFkCisg
ICAgICogQHBhcmFtIHZyR2FtZXBhZCB0aGUgZ2FtZXBhZCB0aGF0IHRoZSBjb250cm9sbGVyIHNo
b3VsZCBiZSBjcmVhdGVkIGZyb20KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBPY3VsdXNUb3VjaENv
bnRyb2xsZXIodnJHYW1lcGFkKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRo
aXMsIHZyR2FtZXBhZCkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZpcmVkIHdo
ZW4gdGhlIHNlY29uZGFyeSB0cmlnZ2VyIG9uIHRoaXMgY29udHJvbGxlciBpcyBtb2RpZmllZAor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25TZWNvbmRhcnlUcmlnZ2VyU3RhdGVDaGFuZ2Vk
T2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogRmlyZWQgd2hl
biB0aGUgdGh1bWIgcmVzdCBvbiB0aGlzIGNvbnRyb2xsZXIgaXMgbW9kaWZpZWQKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLm9uVGh1bWJSZXN0Q2hhbmdlZE9ic2VydmFibGUgPSBuZXcgX01p
c2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0o
KTsKKyAgICAgICAgX3RoaXMuY29udHJvbGxlclR5cGUgPSBfcG9zZUVuYWJsZWRDb250cm9sbGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvc2VFbmFibGVkQ29udHJvbGxlclR5cGUi
XS5PQ1VMVVM7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICog
SW1wbGVtZW50cyBhYnN0cmFjdCBtZXRob2Qgb24gV2ViVlJDb250cm9sbGVyIGNsYXNzLCBsb2Fk
aW5nIGNvbnRyb2xsZXIgbWVzaGVzIGFuZCBjYWxsaW5nIHRoaXMuYXR0YWNoVG9NZXNoIGlmIHN1
Y2Nlc3NmdWwuCisgICAgICogQHBhcmFtIHNjZW5lIHNjZW5lIGluIHdoaWNoIHRvIGFkZCBtZXNo
ZXMKKyAgICAgKiBAcGFyYW0gbWVzaExvYWRlZCBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IHdpbGwgYmUgY2FsbGVkIGlmIHRoZSBtZXNoIGxvYWRzIHN1Y2Nlc3NmdWxseS4KKyAgICAg
Ki8KKyAgICBPY3VsdXNUb3VjaENvbnRyb2xsZXIucHJvdG90eXBlLmluaXRDb250cm9sbGVyTWVz
aCA9IGZ1bmN0aW9uIChzY2VuZSwgbWVzaExvYWRlZCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0
aGlzOworICAgICAgICB2YXIgbWVzaE5hbWU7CisgICAgICAgIC8vIEhhbmQKKyAgICAgICAgaWYg
KHRoaXMuaGFuZCA9PT0gJ2xlZnQnKSB7CisgICAgICAgICAgICBtZXNoTmFtZSA9IE9jdWx1c1Rv
dWNoQ29udHJvbGxlci5NT0RFTF9MRUZUX0ZJTEVOQU1FOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeyAvLyBSaWdodCBpcyB0aGUgZGVmYXVsdCBpZiBubyBoYW5kIGlzIHNwZWNpZmllZAorICAg
ICAgICAgICAgbWVzaE5hbWUgPSBPY3VsdXNUb3VjaENvbnRyb2xsZXIuTU9ERUxfUklHSFRfRklM
RU5BTUU7CisgICAgICAgIH0KKyAgICAgICAgX0xvYWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siU2NlbmVMb2FkZXIiXS5JbXBvcnRNZXNoKCIiLCBPY3VsdXNU
b3VjaENvbnRyb2xsZXIuX0lzUXVlc3QgPyBPY3VsdXNUb3VjaENvbnRyb2xsZXIuUVVFU1RfTU9E
RUxfQkFTRV9VUkwgOiBPY3VsdXNUb3VjaENvbnRyb2xsZXIuTU9ERUxfQkFTRV9VUkwsIG1lc2hO
YW1lLCBzY2VuZSwgZnVuY3Rpb24gKG5ld01lc2hlcykgeworICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgIFBhcmVudCBNZXNoIG5hbWU6IG9jdWx1c190b3VjaF9sZWZ0CisgICAgICAgICAgICAt
IGJvZHkKKyAgICAgICAgICAgIC0gdHJpZ2dlcgorICAgICAgICAgICAgLSB0aHVtYnN0aWNrCisg
ICAgICAgICAgICAtIGdyaXAKKyAgICAgICAgICAgIC0gYnV0dG9uX3kKKyAgICAgICAgICAgIC0g
YnV0dG9uX3gKKyAgICAgICAgICAgIC0gYnV0dG9uX2VudGVyCisgICAgICAgICAgICAqLworICAg
ICAgICAgICAgX3RoaXMuX2RlZmF1bHRNb2RlbCA9IE9jdWx1c1RvdWNoQ29udHJvbGxlci5fSXNR
dWVzdCA/IG5ld01lc2hlc1swXSA6IG5ld01lc2hlc1sxXTsKKyAgICAgICAgICAgIF90aGlzLmF0
dGFjaFRvTWVzaChfdGhpcy5fZGVmYXVsdE1vZGVsKTsKKyAgICAgICAgICAgIGlmIChtZXNoTG9h
ZGVkKSB7CisgICAgICAgICAgICAgICAgbWVzaExvYWRlZChfdGhpcy5fZGVmYXVsdE1vZGVsKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoT2N1bHVzVG91Y2hDb250cm9sbGVyLnByb3RvdHlwZSwgIm9uQUJ1dHRvblN0YXRlQ2hh
bmdlZE9ic2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3aGVuIHRo
ZSBBIGJ1dHRvbiBvbiB0aGlzIGNvbnRyb2xsZXIgaXMgbW9kaWZpZWQKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRoaXMuaGFuZCA9PT0g
J3JpZ2h0JykgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9uTWFpbkJ1dHRvblN0YXRl
Q2hhbmdlZE9ic2VydmFibGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIEEgYnV0dG9uIG9uIGxlZnQgaGFuZCcp
OworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoT2N1bHVzVG91Y2hDb250cm9sbGVyLnByb3RvdHlwZSwgIm9uQkJ1dHRvblN0YXRlQ2hh
bmdlZE9ic2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3aGVuIHRo
ZSBCIGJ1dHRvbiBvbiB0aGlzIGNvbnRyb2xsZXIgaXMgbW9kaWZpZWQKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRoaXMuaGFuZCA9PT0g
J3JpZ2h0JykgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9uU2Vjb25kYXJ5QnV0dG9u
U3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gQiBidXR0b24gb24gbGVmdCBo
YW5kJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShPY3VsdXNUb3VjaENvbnRyb2xsZXIucHJvdG90eXBlLCAib25YQnV0dG9uU3Rh
dGVDaGFuZ2VkT2JzZXJ2YWJsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZpcmVkIHdo
ZW4gdGhlIFggYnV0dG9uIG9uIHRoaXMgY29udHJvbGxlciBpcyBtb2RpZmllZAorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5oYW5k
ID09PSAnbGVmdCcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vbk1haW5CdXR0b25T
dGF0ZUNoYW5nZWRPYnNlcnZhYmxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBYIGJ1dHRvbiBvbiByaWdodCBo
YW5kJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShPY3VsdXNUb3VjaENvbnRyb2xsZXIucHJvdG90eXBlLCAib25ZQnV0dG9uU3Rh
dGVDaGFuZ2VkT2JzZXJ2YWJsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZpcmVkIHdo
ZW4gdGhlIFkgYnV0dG9uIG9uIHRoaXMgY29udHJvbGxlciBpcyBtb2RpZmllZAorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5oYW5k
ID09PSAnbGVmdCcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vblNlY29uZGFyeUJ1
dHRvblN0YXRlQ2hhbmdlZE9ic2VydmFibGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFkgYnV0dG9uIG9uIHJp
Z2h0IGhhbmQnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisg
ICAgICAqIENhbGxlZCBvbmNlIGZvciBlYWNoIGJ1dHRvbiB0aGF0IGNoYW5nZWQgc3RhdGUgc2lu
Y2UgdGhlIGxhc3QgZnJhbWUKKyAgICAgICogMCkgdGh1bWIgc3RpY2sgKHRvdWNoLCBwcmVzcywg
dmFsdWUgPSBwcmVzc2VkICgwLDEpKS4gdmFsdWUgaXMgaW4gdGhpcy5sZWZ0U3RpY2sKKyAgICAg
ICogMSkgaW5kZXggdHJpZ2dlciAodG91Y2ggKD8pLCBwcmVzcyAob25seSB3aGVuIHZhbHVlID4g
MC4xKSwgdmFsdWUgMCB0byAxKQorICAgICAgKiAyKSBzZWNvbmRhcnkgdHJpZ2dlciAoc2FtZSkK
KyAgICAgICogMykgQSAocmlnaHQpIFggKGxlZnQpLCB0b3VjaCwgcHJlc3NlZCA9IHZhbHVlCisg
ICAgICAqIDQpIEIgLyBZCisgICAgICAqIDUpIHRodW1iIHJlc3QKKyAgICAgICogQHBhcmFtIGJ1
dHRvbklkeCBXaGljaCBidXR0b24gaW5kZXggY2hhbmdlZAorICAgICAgKiBAcGFyYW0gc3RhdGUg
TmV3IHN0YXRlIG9mIHRoZSBidXR0b24KKyAgICAgICogQHBhcmFtIGNoYW5nZXMgV2hpY2ggcHJv
cGVydGllcyBvbiB0aGUgc3RhdGUgY2hhbmdlZCBzaW5jZSBsYXN0IGZyYW1lCisgICAgICAqLwor
ICAgIE9jdWx1c1RvdWNoQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZUJ1dHRvbkNoYW5nZSA9
IGZ1bmN0aW9uIChidXR0b25JZHgsIHN0YXRlLCBjaGFuZ2VzKSB7CisgICAgICAgIHZhciBub3Rp
ZnlPYmplY3QgPSBzdGF0ZTsgLy97IHN0YXRlOiBzdGF0ZSwgY2hhbmdlczogY2hhbmdlcyB9Owor
ICAgICAgICB2YXIgdHJpZ2dlckRpcmVjdGlvbiA9IHRoaXMuaGFuZCA9PT0gJ3JpZ2h0JyA/IC0x
IDogMTsKKyAgICAgICAgc3dpdGNoIChidXR0b25JZHgpIHsKKyAgICAgICAgICAgIGNhc2UgMDoK
KyAgICAgICAgICAgICAgICB0aGlzLm9uUGFkU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlP
YnNlcnZlcnMobm90aWZ5T2JqZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBjYXNlIDE6IC8vIGluZGV4IHRyaWdnZXIKKyAgICAgICAgICAgICAgICBpZiAoIU9jdWx1
c1RvdWNoQ29udHJvbGxlci5fSXNRdWVzdCAmJiB0aGlzLl9kZWZhdWx0TW9kZWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgKHRoaXMuX2RlZmF1bHRNb2RlbC5nZXRDaGlsZHJlbigpWzNdKS5yb3Rh
dGlvbi54ID0gLW5vdGlmeU9iamVjdC52YWx1ZSAqIDAuMjA7CisgICAgICAgICAgICAgICAgICAg
ICh0aGlzLl9kZWZhdWx0TW9kZWwuZ2V0Q2hpbGRyZW4oKVszXSkucG9zaXRpb24ueSA9IC1ub3Rp
ZnlPYmplY3QudmFsdWUgKiAwLjAwNTsKKyAgICAgICAgICAgICAgICAgICAgKHRoaXMuX2RlZmF1
bHRNb2RlbC5nZXRDaGlsZHJlbigpWzNdKS5wb3NpdGlvbi56ID0gLW5vdGlmeU9iamVjdC52YWx1
ZSAqIDAuMDA1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLm9uVHJp
Z2dlclN0YXRlQ2hhbmdlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKG5vdGlmeU9iamVjdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2FzZSAyOiAvLyBzZWNvbmRh
cnkgdHJpZ2dlcgorICAgICAgICAgICAgICAgIGlmICghT2N1bHVzVG91Y2hDb250cm9sbGVyLl9J
c1F1ZXN0ICYmIHRoaXMuX2RlZmF1bHRNb2RlbCkgeworICAgICAgICAgICAgICAgICAgICAodGhp
cy5fZGVmYXVsdE1vZGVsLmdldENoaWxkcmVuKClbNF0pLnBvc2l0aW9uLnggPSB0cmlnZ2VyRGly
ZWN0aW9uICogbm90aWZ5T2JqZWN0LnZhbHVlICogMC4wMDM1OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB0aGlzLm9uU2Vjb25kYXJ5VHJpZ2dlclN0YXRlQ2hhbmdlZE9ic2Vy
dmFibGUubm90aWZ5T2JzZXJ2ZXJzKG5vdGlmeU9iamVjdCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIGlmICghT2N1bHVzVG91
Y2hDb250cm9sbGVyLl9Jc1F1ZXN0ICYmIHRoaXMuX2RlZmF1bHRNb2RlbCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobm90aWZ5T2JqZWN0LnByZXNzZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICh0aGlzLl9kZWZhdWx0TW9kZWwuZ2V0Q2hpbGRyZW4oKVsxXSkucG9zaXRpb24ueSA9
IC0wLjAwMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLl9kZWZhdWx0TW9kZWwuZ2V0Q2hpbGRy
ZW4oKVsxXSkucG9zaXRpb24ueSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5vbk1haW5CdXR0b25TdGF0ZUNoYW5nZWRP
YnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhub3RpZnlPYmplY3QpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBpZiAoIU9jdWx1
c1RvdWNoQ29udHJvbGxlci5fSXNRdWVzdCAmJiB0aGlzLl9kZWZhdWx0TW9kZWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vdGlmeU9iamVjdC5wcmVzc2VkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAodGhpcy5fZGVmYXVsdE1vZGVsLmdldENoaWxkcmVuKClbMl0pLnBvc2l0aW9u
LnkgPSAtMC4wMDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5fZGVmYXVsdE1vZGVsLmdldENo
aWxkcmVuKClbMl0pLnBvc2l0aW9uLnkgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMub25TZWNvbmRhcnlCdXR0b25TdGF0
ZUNoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhub3RpZnlPYmplY3QpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICB0
aGlzLm9uVGh1bWJSZXN0Q2hhbmdlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKG5vdGlmeU9i
amVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBCYXNlIFVybCBmb3IgdGhlIGNvbnRyb2xsZXIgbW9kZWwuCisgICAgICovCisg
ICAgT2N1bHVzVG91Y2hDb250cm9sbGVyLk1PREVMX0JBU0VfVVJMID0gJ2h0dHBzOi8vY29udHJv
bGxlcnMuYmFieWxvbmpzLmNvbS9vY3VsdXMvJzsKKyAgICAvKioKKyAgICAgKiBGaWxlIG5hbWUg
Zm9yIHRoZSBsZWZ0IGNvbnRyb2xsZXIgbW9kZWwuCisgICAgICovCisgICAgT2N1bHVzVG91Y2hD
b250cm9sbGVyLk1PREVMX0xFRlRfRklMRU5BTUUgPSAnbGVmdC5iYWJ5bG9uJzsKKyAgICAvKioK
KyAgICAgKiBGaWxlIG5hbWUgZm9yIHRoZSByaWdodCBjb250cm9sbGVyIG1vZGVsLgorICAgICAq
LworICAgIE9jdWx1c1RvdWNoQ29udHJvbGxlci5NT0RFTF9SSUdIVF9GSUxFTkFNRSA9ICdyaWdo
dC5iYWJ5bG9uJzsKKyAgICAvKioKKyAgICAgKiBCYXNlIFVybCBmb3IgdGhlIFF1ZXN0IGNvbnRy
b2xsZXIgbW9kZWwuCisgICAgICovCisgICAgT2N1bHVzVG91Y2hDb250cm9sbGVyLlFVRVNUX01P
REVMX0JBU0VfVVJMID0gJ2h0dHBzOi8vY29udHJvbGxlcnMuYmFieWxvbmpzLmNvbS9vY3VsdXNR
dWVzdC8nOworICAgIC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAgKiBJZiB0aGUgY29udHJvbGxl
cnMgYXJlIHJ1bm5pbmcgb24gYSBkZXZpY2UgdGhhdCBuZWVkcyB0aGUgdXBkYXRlZCBRdWVzdCBj
b250cm9sbGVyIG1vZGVscworICAgICAqLworICAgIE9jdWx1c1RvdWNoQ29udHJvbGxlci5fSXNR
dWVzdCA9IGZhbHNlOworICAgIHJldHVybiBPY3VsdXNUb3VjaENvbnRyb2xsZXI7Cit9KF93ZWJW
UkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siV2ViVlJDb250cm9sbGVy
Il0pKTsKKworX3Bvc2VFbmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXJIZWxwZXIiXS5fQ29udHJvbGxlckZhY3Rvcmllcy5w
dXNoKHsKKyAgICBjYW5DcmVhdGU6IGZ1bmN0aW9uIChnYW1lcGFkSW5mbykgeworICAgICAgICAv
LyBJZiB0aGUgaGVhZHNldCByZXBvcnRzIGJlaW5nIGFuIE9jdWx1cyBRdWVzdCwgdXNlIHRoZSBR
dWVzdCBjb250cm9sbGVyIG1vZGVscworICAgICAgICBpZiAoX0VuZ2luZXNfZW5naW5lX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkVuZ2luZSJdLkxhc3RDcmVhdGVkRW5naW5lICYmIF9F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFbmdpbmUiXS5MYXN0
Q3JlYXRlZEVuZ2luZS5fdnJEaXNwbGF5ICYmIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJFbmdpbmUiXS5MYXN0Q3JlYXRlZEVuZ2luZS5fdnJEaXNwbGF5LmRp
c3BsYXlOYW1lID09PSAiT2N1bHVzIFF1ZXN0IikgeworICAgICAgICAgICAgT2N1bHVzVG91Y2hD
b250cm9sbGVyLl9Jc1F1ZXN0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2Ft
ZXBhZEluZm8uaWQuaW5kZXhPZignT2N1bHVzIFRvdWNoJykgIT09IC0xOworICAgIH0sCisgICAg
Y3JlYXRlOiBmdW5jdGlvbiAoZ2FtZXBhZEluZm8pIHsKKyAgICAgICAgcmV0dXJuIG5ldyBPY3Vs
dXNUb3VjaENvbnRyb2xsZXIoZ2FtZXBhZEluZm8pOworICAgIH0KK30pOworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy9wb3NlRW5hYmxlZENvbnRyb2xsZXIu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vR2FtZXBhZHMvQ29udHJvbGxlcnMvcG9zZUVuYWJsZWRDb250
cm9sbGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9zZUVuYWJsZWRDb250
cm9sbGVyVHlwZSwgUG9zZUVuYWJsZWRDb250cm9sbGVySGVscGVyLCBQb3NlRW5hYmxlZENvbnRy
b2xsZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zZUVuYWJsZWRD
b250cm9sbGVyVHlwZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUG9zZUVuYWJsZWRDb250cm9sbGVy
VHlwZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NlRW5hYmxlZENvbnRyb2xsZXJIZWxwZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlcjsgfSk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQb3NlRW5hYmxlZENvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIFBvc2VFbmFibGVkQ29udHJvbGxlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9vYnNlcnZhYmxl
ICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52
ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ3VsbGluZ19yYXlfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0N1
bGxpbmcvcmF5ICovICIuL0N1bGxpbmcvcmF5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvZW5naW5lU3RvcmUgKi8gIi4vRW5n
aW5lcy9lbmdpbmVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9HYW1lcGFk
c19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9HYW1lcGFkcy9nYW1lcGFkICovICIuL0dhbWVwYWRzL2dhbWVwYWQudHMi
KTsKKworCisKKworCisKKy8qKgorKiBEZWZpbmVzIHRoZSB0eXBlcyBvZiBwb3NlIGVuYWJsZWQg
Y29udHJvbGxlcnMgdGhhdCBhcmUgc3VwcG9ydGVkCisqLwordmFyIFBvc2VFbmFibGVkQ29udHJv
bGxlclR5cGU7CisoZnVuY3Rpb24gKFBvc2VFbmFibGVkQ29udHJvbGxlclR5cGUpIHsKKyAgICAv
KioKKyAgICAgKiBIVEMgVml2ZQorICAgICAqLworICAgIFBvc2VFbmFibGVkQ29udHJvbGxlclR5
cGVbUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZVsiVklWRSJdID0gMF0gPSAiVklWRSI7CisgICAg
LyoqCisgICAgICogT2N1bHVzIFJpZnQKKyAgICAgKi8KKyAgICBQb3NlRW5hYmxlZENvbnRyb2xs
ZXJUeXBlW1Bvc2VFbmFibGVkQ29udHJvbGxlclR5cGVbIk9DVUxVUyJdID0gMV0gPSAiT0NVTFVT
IjsKKyAgICAvKioKKyAgICAgKiBXaW5kb3dzIG1peGVkIHJlYWxpdHkKKyAgICAgKi8KKyAgICBQ
b3NlRW5hYmxlZENvbnRyb2xsZXJUeXBlW1Bvc2VFbmFibGVkQ29udHJvbGxlclR5cGVbIldJTkRP
V1MiXSA9IDJdID0gIldJTkRPV1MiOworICAgIC8qKgorICAgICAqIFNhbXN1bmcgZ2VhciBWUgor
ICAgICAqLworICAgIFBvc2VFbmFibGVkQ29udHJvbGxlclR5cGVbUG9zZUVuYWJsZWRDb250cm9s
bGVyVHlwZVsiR0VBUl9WUiJdID0gM10gPSAiR0VBUl9WUiI7CisgICAgLyoqCisgICAgICogR29v
Z2xlIERheWRyZWFtCisgICAgICovCisgICAgUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZVtQb3Nl
RW5hYmxlZENvbnRyb2xsZXJUeXBlWyJEQVlEUkVBTSJdID0gNF0gPSAiREFZRFJFQU0iOworICAg
IC8qKgorICAgICAqIEdlbmVyaWMKKyAgICAgKi8KKyAgICBQb3NlRW5hYmxlZENvbnRyb2xsZXJU
eXBlW1Bvc2VFbmFibGVkQ29udHJvbGxlclR5cGVbIkdFTkVSSUMiXSA9IDVdID0gIkdFTkVSSUMi
OworfSkoUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZSB8fCAoUG9zZUVuYWJsZWRDb250cm9sbGVy
VHlwZSA9IHt9KSk7CisvKioKKyAqIERlZmluZXMgdGhlIFBvc2VFbmFibGVkQ29udHJvbGxlckhl
bHBlciBvYmplY3QgdGhhdCBpcyB1c2VkIGluaXRpYWxpemUgYSBnYW1lcGFkIGFzIHRoZSBjb250
cm9sbGVyIHR5cGUgaXQgaXMgc3BlY2lmaWVkIGFzIChlZy4gd2luZG93cyBtaXhlZCByZWFsaXR5
IGNvbnRyb2xsZXIpCisgKi8KK3ZhciBQb3NlRW5hYmxlZENvbnRyb2xsZXJIZWxwZXIgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gUG9zZUVuYWJsZWRDb250cm9s
bGVySGVscGVyKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyBhIGdhbWVw
YWQgYXMgdGhlIGNvbnRyb2xsZXIgdHlwZSBpdCBpcyBzcGVjaWZpZWQgYXMgKGVnLiB3aW5kb3dz
IG1peGVkIHJlYWxpdHkgY29udHJvbGxlcikKKyAgICAgKiBAcGFyYW0gdnJHYW1lcGFkIHRoZSBn
YW1lcGFkIHRvIGluaXRpYWxpemVkCisgICAgICogQHJldHVybnMgYSB2ciBjb250cm9sbGVyIG9m
IHRoZSB0eXBlIHRoZSBnYW1lcGFkIGlkZW50aWZpZWQgYXMKKyAgICAgKi8KKyAgICBQb3NlRW5h
YmxlZENvbnRyb2xsZXJIZWxwZXIuSW5pdGlhdGVDb250cm9sbGVyID0gZnVuY3Rpb24gKHZyR2Ft
ZXBhZCkgeworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fQ29udHJvbGxlckZh
Y3RvcmllczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBmYWN0b3J5
ID0gX2FbX2ldOworICAgICAgICAgICAgaWYgKGZhY3RvcnkuY2FuQ3JlYXRlKHZyR2FtZXBhZCkp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeS5jcmVhdGUodnJHYW1lcGFkKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fRGVmYXVsdENvbnRyb2xs
ZXJGYWN0b3J5KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fRGVmYXVsdENvbnRyb2xsZXJG
YWN0b3J5KHZyR2FtZXBhZCk7CisgICAgICAgIH0KKyAgICAgICAgdGhyb3cgIlRoZSB0eXBlIG9m
IGdhbWVwYWQgeW91IGFyZSB0cnlpbmcgdG8gbG9hZCBuZWVkcyB0byBiZSBpbXBvcnRlZCBmaXJz
dCBvciBpcyBub3Qgc3VwcG9ydGVkLiI7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAg
IFBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlci5fQ29udHJvbGxlckZhY3RvcmllcyA9IFtdOwor
ICAgIC8qKiBAaGlkZGVuICovCisgICAgUG9zZUVuYWJsZWRDb250cm9sbGVySGVscGVyLl9EZWZh
dWx0Q29udHJvbGxlckZhY3RvcnkgPSBudWxsOworICAgIHJldHVybiBQb3NlRW5hYmxlZENvbnRy
b2xsZXJIZWxwZXI7Cit9KCkpOworCisvKioKKyAqIERlZmluZXMgdGhlIFBvc2VFbmFibGVkQ29u
dHJvbGxlciBvYmplY3QgdGhhdCBjb250YWlucyBzdGF0ZSBvZiBhIHZyIGNhcGFibGUgY29udHJv
bGxlcgorICovCit2YXIgUG9zZUVuYWJsZWRDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKFBvc2VFbmFibGVkQ29udHJvbGxlciwgX3N1cGVyKTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgbmV3IFBvc2VFbmFibGVkQ29udHJvbGxlciBmcm9tIGEgZ2FtZXBhZAor
ICAgICAqIEBwYXJhbSBicm93c2VyR2FtZXBhZCB0aGUgZ2FtZXBhZCB0aGF0IHRoZSBQb3NlRW5h
YmxlZENvbnRyb2xsZXIgc2hvdWxkIGJlIGNyZWF0ZWQgZnJvbQorICAgICAqLworICAgIGZ1bmN0
aW9uIFBvc2VFbmFibGVkQ29udHJvbGxlcihicm93c2VyR2FtZXBhZCkgeworICAgICAgICB2YXIg
X3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBicm93c2VyR2FtZXBhZC5pZCwgYnJvd3NlckdhbWVw
YWQuaW5kZXgsIGJyb3dzZXJHYW1lcGFkKSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAg
ICogSWYgdGhlIGNvbnRyb2xsZXIgaXMgdXNlZCBpbiBhIHdlYlhSIHNlc3Npb24KKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLmlzWFIgPSBmYWxzZTsKKyAgICAgICAgLy8gUmVwcmVzZW50cyBk
ZXZpY2UgcG9zaXRpb24gYW5kIHJvdGF0aW9uIGluIHJvb20gc3BhY2UuIFNob3VsZCBvbmx5IGJl
IHVzZWQgdG8gaGVscCBjYWxjdWxhdGUgYmFieWxvbiBzcGFjZSB2YWx1ZXMKKyAgICAgICAgX3Ro
aXMuX2RldmljZVJvb21Qb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBfdGhpcy5fZGV2aWNl
Um9vbVJvdGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaGUgZGV2aWNlIHBvc2l0aW9uIGluIGJhYnlsb24gc3BhY2UKKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLmRldmljZVBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBUaGUgZGV2aWNlIHJvdGF0aW9uIGluIGJhYnlsb24gc3BhY2UKKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLmRldmljZVJvdGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJdKCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBkZXZpY2UgaW4g
YmFieWxvbiBzcGFjZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZGV2aWNlU2NhbGVGYWN0
b3IgPSAxOworICAgICAgICAvLyBVc2VkIHRvIGNvbnZlcnQgNmRvZiBjb250cm9sbGVycyB0byAz
ZG9mCisgICAgICAgIF90aGlzLl90cmFja1Bvc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMu
X21heFJvdGF0aW9uRGlzdEZyb21IZWFkc2V0ID0gTWF0aC5QSSAvIDU7CisgICAgICAgIF90aGlz
Ll9kcmFnZ2VkUm9vbVJvdGF0aW9uID0gMDsKKyAgICAgICAgX3RoaXMuX2xlZnRIYW5kU3lzdGVt
UXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJbnRlcm5h
bCwgbWF0cml4IHVzZWQgdG8gY29udmVydCByb29tIHNwYWNlIHRvIGJhYnlsb24gc3BhY2UKKyAg
ICAgICAgICogQGhpZGRlbgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2RldmljZVRvV29y
bGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWF0
cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE5vZGUgdG8gYmUgdXNl
ZCB3aGVuIGNhc3RpbmcgYSByYXkgZnJvbSB0aGUgY29udHJvbGxlcgorICAgICAgICAgKiBAaGlk
ZGVuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fcG9pbnRpbmdQb3NlTm9kZSA9IG51bGw7
CisgICAgICAgIF90aGlzLl93b3JraW5nTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fbWVzaEF0
dGFjaGVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhpcy50eXBlID0gX0dhbWVw
YWRzX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siR2FtZXBhZCJdLlBPU0Vf
RU5BQkxFRDsKKyAgICAgICAgX3RoaXMuY29udHJvbGxlclR5cGUgPSBQb3NlRW5hYmxlZENvbnRy
b2xsZXJUeXBlLkdFTkVSSUM7CisgICAgICAgIF90aGlzLnBvc2l0aW9uID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7Cisg
ICAgICAgIF90aGlzLnJvdGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIF90
aGlzLl9jYWxjdWxhdGVkUG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgX3RoaXMuX2NhbGN1
bGF0ZWRSb3RhdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRj
aFJvbGxUb1JlZihNYXRoLlBJLCAwLCAwLCBfdGhpcy5fbGVmdEhhbmRTeXN0ZW1RdWF0ZXJuaW9u
KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBAaGlkZGVu
CisgICAgICovCisgICAgUG9zZUVuYWJsZWRDb250cm9sbGVyLnByb3RvdHlwZS5fZGlzYWJsZVRy
YWNrUG9zaXRpb24gPSBmdW5jdGlvbiAoZml4ZWRQb3NpdGlvbikgeworICAgICAgICBpZiAodGhp
cy5fdHJhY2tQb3NpdGlvbikgeworICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlZFBvc2l0aW9u
LmNvcHlGcm9tKGZpeGVkUG9zaXRpb24pOworICAgICAgICAgICAgdGhpcy5fdHJhY2tQb3NpdGlv
biA9IGZhbHNlOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRo
ZSBzdGF0ZSBvZiB0aGUgcG9zZSBlbmJhbGVkIGNvbnRyb2xsZXIgYW5kIG1lc2ggYmFzZWQgb24g
dGhlIGN1cnJlbnQgcG9zaXRpb24gYW5kIHJvdGF0aW9uIG9mIHRoZSBjb250cm9sbGVyCisgICAg
ICovCisgICAgUG9zZUVuYWJsZWRDb250cm9sbGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGlmICh0aGlzLmlzWFIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVwZGF0ZS5jYWxsKHRoaXMpOworICAg
ICAgICB0aGlzLl91cGRhdGVQb3NlQW5kTWVzaCgpOworICAgIH07CisgICAgLyoqCisgICAgICog
VXBkYXRlcyBvbmx5IHRoZSBwb3NlIGRldmljZSBhbmQgbWVzaCB3aXRob3V0IGRvaW5nIGFueSBi
dXR0b24gZXZlbnQgY2hlY2tpbmcKKyAgICAgKi8KKyAgICBQb3NlRW5hYmxlZENvbnRyb2xsZXIu
cHJvdG90eXBlLl91cGRhdGVQb3NlQW5kTWVzaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMuaXNYUikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZh
ciBwb3NlID0gdGhpcy5icm93c2VyR2FtZXBhZC5wb3NlOworICAgICAgICB0aGlzLnVwZGF0ZUZy
b21EZXZpY2UocG9zZSk7CisgICAgICAgIGlmICghdGhpcy5fdHJhY2tQb3NpdGlvbiAmJiBfRW5n
aW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFbmdpbmVTdG9y
ZSJdLkxhc3RDcmVhdGVkU2NlbmUgJiYgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZFNjZW5lLmFjdGl2ZUNh
bWVyYSAmJiBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmUuYWN0aXZlQ2FtZXJhLmRldmljZVBvc2l0
aW9uKSB7CisgICAgICAgICAgICB2YXIgY2FtZXJhID0gX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZFNjZW5l
LmFjdGl2ZUNhbWVyYTsKKyAgICAgICAgICAgIGNhbWVyYS5fY29tcHV0ZURldmljZVBvc2l0aW9u
KCk7CisgICAgICAgICAgICB0aGlzLl9kZXZpY2VUb1dvcmxkLnNldFRyYW5zbGF0aW9uKGNhbWVy
YS5kZXZpY2VQb3NpdGlvbik7CisgICAgICAgICAgICBpZiAoY2FtZXJhLmRldmljZVJvdGF0aW9u
UXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIHZhciBjYW1lcmEgPSBjYW1lcmE7CisgICAg
ICAgICAgICAgICAgY2FtZXJhLl9kZXZpY2VSb29tUm90YXRpb25RdWF0ZXJuaW9uLnRvRXVsZXJB
bmdsZXNUb1JlZihfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF0pOworICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhl
IHJhZGlhbiBkaXN0YW5jZSBhd2F5IHRoYXQgdGhlIGhlYWRzZXQgaXMgZnJvbSB0aGUgY29udHJv
bGxlcnMgcm90YXRpb24KKyAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2VBd2F5ID0gTWF0aC5h
dGFuMihNYXRoLnNpbihfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF0ueSAtIHRoaXMuX2RyYWdnZWRSb29tUm90YXRp
b24pLCBNYXRoLmNvcyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF0ueSAtIHRoaXMuX2RyYWdnZWRSb29tUm90YXRp
b24pKTsKKyAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoZGlzdGFuY2VBd2F5KSA+IHRoaXMu
X21heFJvdGF0aW9uRGlzdEZyb21IZWFkc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE9u
bHkgcm90YXRlIGVub3VwaCB0byBiZSB3aXRoaW4gdGhlIF9tYXhSb3RhdGlvbkRpc3RGcm9tSGVh
ZHNldAorICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRpb25BbW91bnQgPSBkaXN0YW5jZUF3
YXkgLSAoZGlzdGFuY2VBd2F5IDwgMCA/IC10aGlzLl9tYXhSb3RhdGlvbkRpc3RGcm9tSGVhZHNl
dCA6IHRoaXMuX21heFJvdGF0aW9uRGlzdEZyb21IZWFkc2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fZHJhZ2dlZFJvb21Sb3RhdGlvbiArPSByb3RhdGlvbkFtb3VudDsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gUm90YXRlIGNvbnRyb2xsZXIgYXJvdW5kIGhlYWRzZXQKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHNpbiA9IE1hdGguc2luKC1yb3RhdGlvbkFtb3VudCk7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBjb3MgPSBNYXRoLmNvcygtcm90YXRpb25BbW91bnQpOworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVkUG9zaXRpb24ueCA9IHRoaXMuX2NhbGN1bGF0
ZWRQb3NpdGlvbi54ICogY29zIC0gdGhpcy5fY2FsY3VsYXRlZFBvc2l0aW9uLnogKiBzaW47Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZWRQb3NpdGlvbi56ID0gdGhpcy5fY2Fs
Y3VsYXRlZFBvc2l0aW9uLnggKiBzaW4gKyB0aGlzLl9jYWxjdWxhdGVkUG9zaXRpb24ueiAqIGNv
czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMi
XS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHRoaXMuX2NhbGN1bGF0ZWRQb3NpdGlvbiwgdGhp
cy5fZGV2aWNlVG9Xb3JsZCwgdGhpcy5kZXZpY2VQb3NpdGlvbik7CisgICAgICAgIHRoaXMuX2Rl
dmljZVRvV29ybGQuZ2V0Um90YXRpb25NYXRyaXhUb1JlZih0aGlzLl93b3JraW5nTWF0cml4KTsK
KyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlF1YXRlcm5pb24iXS5Gcm9tUm90YXRpb25NYXRyaXhUb1JlZih0aGlzLl93b3JraW5nTWF0cml4
LCB0aGlzLmRldmljZVJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIHRoaXMuZGV2aWNlUm90
YXRpb25RdWF0ZXJuaW9uLm11bHRpcGx5SW5QbGFjZSh0aGlzLl9jYWxjdWxhdGVkUm90YXRpb24p
OworICAgICAgICBpZiAodGhpcy5fbWVzaCkgeworICAgICAgICAgICAgdGhpcy5fbWVzaC5wb3Np
dGlvbi5jb3B5RnJvbSh0aGlzLmRldmljZVBvc2l0aW9uKTsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9tZXNoLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIHRoaXMuX21lc2gu
cm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHRoaXMuZGV2aWNlUm90YXRpb25RdWF0ZXJuaW9u
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogVXBk
YXRlcyB0aGUgc3RhdGUgb2YgdGhlIHBvc2UgZW5iYWxlZCBjb250cm9sbGVyIGJhc2VkIG9uIHRo
ZSByYXcgcG9zZSBkYXRhIGZyb20gdGhlIGRldmljZQorICAgICAqIEBwYXJhbSBwb3NlRGF0YSBy
YXcgcG9zZSBmcm9tdGhlIGRldmljZQorICAgICAqLworICAgIFBvc2VFbmFibGVkQ29udHJvbGxl
ci5wcm90b3R5cGUudXBkYXRlRnJvbURldmljZSA9IGZ1bmN0aW9uIChwb3NlRGF0YSkgeworICAg
ICAgICBpZiAodGhpcy5pc1hSKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHBvc2VEYXRhKSB7CisgICAgICAgICAgICB0aGlzLnJhd1Bvc2UgPSBwb3NlRGF0
YTsKKyAgICAgICAgICAgIGlmIChwb3NlRGF0YS5wb3NpdGlvbikgeworICAgICAgICAgICAgICAg
IHRoaXMuX2RldmljZVJvb21Qb3NpdGlvbi5jb3B5RnJvbUZsb2F0cyhwb3NlRGF0YS5wb3NpdGlv
blswXSwgcG9zZURhdGEucG9zaXRpb25bMV0sIC1wb3NlRGF0YS5wb3NpdGlvblsyXSk7CisgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuX21lc2ggJiYgdGhpcy5fbWVzaC5nZXRTY2VuZSgpLnVzZVJp
Z2h0SGFuZGVkU3lzdGVtKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RldmljZVJvb21Q
b3NpdGlvbi56ICo9IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fdHJhY2tQb3NpdGlvbikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VS
b29tUG9zaXRpb24uc2NhbGVUb1JlZih0aGlzLmRldmljZVNjYWxlRmFjdG9yLCB0aGlzLl9jYWxj
dWxhdGVkUG9zaXRpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlz
Ll9jYWxjdWxhdGVkUG9zaXRpb24uYWRkSW5QbGFjZSh0aGlzLnBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhciBwb3NlID0gdGhpcy5yYXdQb3NlOworICAgICAgICAgICAg
aWYgKHBvc2VEYXRhLm9yaWVudGF0aW9uICYmIHBvc2Uub3JpZW50YXRpb24gJiYgcG9zZS5vcmll
bnRhdGlvbi5sZW5ndGggPT09IDQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VSb29t
Um90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tRmxvYXRzKHBvc2Uub3JpZW50YXRpb25bMF0sIHBv
c2Uub3JpZW50YXRpb25bMV0sIC1wb3NlLm9yaWVudGF0aW9uWzJdLCAtcG9zZS5vcmllbnRhdGlv
blszXSk7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21lc2gpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX21lc2guZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlUm9vbVJvdGF0aW9uUXVhdGVybmlv
bi56ICo9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlUm9vbVJvdGF0
aW9uUXVhdGVybmlvbi53ICo9IC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlUm9v
bVJvdGF0aW9uUXVhdGVybmlvbi5tdWx0aXBseVRvUmVmKHRoaXMuX2xlZnRIYW5kU3lzdGVtUXVh
dGVybmlvbiwgdGhpcy5fZGV2aWNlUm9vbVJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gaWYgdGhl
IGNhbWVyYSBpcyBzZXQsIHJvdGF0ZSB0byB0aGUgY2FtZXJhJ3Mgcm90YXRpb24KKyAgICAgICAg
ICAgICAgICB0aGlzLl9kZXZpY2VSb29tUm90YXRpb25RdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYo
dGhpcy5yb3RhdGlvblF1YXRlcm5pb24sIHRoaXMuX2NhbGN1bGF0ZWRSb3RhdGlvbik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEF0dGFjaGVzIGEg
bWVzaCB0byB0aGUgY29udHJvbGxlcgorICAgICAqIEBwYXJhbSBtZXNoIHRoZSBtZXNoIHRvIGJl
IGF0dGFjaGVkCisgICAgICovCisgICAgUG9zZUVuYWJsZWRDb250cm9sbGVyLnByb3RvdHlwZS5h
dHRhY2hUb01lc2ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICBpZiAodGhpcy5fbWVzaCkg
eworICAgICAgICAgICAgdGhpcy5fbWVzaC5wYXJlbnQgPSBudWxsOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX21lc2ggPSBtZXNoOworICAgICAgICBpZiAodGhpcy5fcG9zZUNvbnRyb2xsZWRD
YW1lcmEpIHsKKyAgICAgICAgICAgIHRoaXMuX21lc2gucGFyZW50ID0gdGhpcy5fcG9zZUNvbnRy
b2xsZWRDYW1lcmE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9tZXNoLnJvdGF0aW9u
UXVhdGVybmlvbikgeworICAgICAgICAgICAgdGhpcy5fbWVzaC5yb3RhdGlvblF1YXRlcm5pb24g
PSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlF1
YXRlcm5pb24iXSgpOworICAgICAgICB9CisgICAgICAgIC8vIFN5bmMgY29udHJvbGxlciBtZXNo
IGFuZCBwb2ludGluZyBwb3NlIG5vZGUncyBzdGF0ZSB3aXRoIGNvbnRyb2xsZXIsIHRoaXMgaXMg
ZG9uZSB0byBhdm9pZCBhIGZyYW1lIHdoZXJlIHBvc2l0aW9uIGlzIDAsMCwwIHdoZW4gYXR0YWNo
aW5nIG1lc2gKKyAgICAgICAgaWYgKCF0aGlzLmlzWFIpIHsKKyAgICAgICAgICAgIHRoaXMuX3Vw
ZGF0ZVBvc2VBbmRNZXNoKCk7CisgICAgICAgICAgICBpZiAodGhpcy5fcG9pbnRpbmdQb3NlTm9k
ZSkgeworICAgICAgICAgICAgICAgIHZhciBwYXJlbnRzID0gW107CisgICAgICAgICAgICAgICAg
dmFyIG9iaiA9IHRoaXMuX3BvaW50aW5nUG9zZU5vZGU7CisgICAgICAgICAgICAgICAgd2hpbGUg
KG9iai5wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKG9iai5wYXJl
bnQpOworICAgICAgICAgICAgICAgICAgICBvYmogPSBvYmoucGFyZW50OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBwYXJlbnRzLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9u
IChwKSB7IHAuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOyB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9tZXNoQXR0YWNoZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2Vy
dmVycyhtZXNoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEF0dGFjaGVzIHRoZSBjb250cm9s
bGVycyBtZXNoIHRvIGEgY2FtZXJhCisgICAgICogQHBhcmFtIGNhbWVyYSB0aGUgY2FtZXJhIHRo
ZSBtZXNoIHNob3VsZCBiZSBhdHRhY2hlZCB0bworICAgICAqLworICAgIFBvc2VFbmFibGVkQ29u
dHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG9Qb3NlQ29udHJvbGxlZENhbWVyYSA9IGZ1bmN0aW9u
IChjYW1lcmEpIHsKKyAgICAgICAgdGhpcy5fcG9zZUNvbnRyb2xsZWRDYW1lcmEgPSBjYW1lcmE7
CisgICAgICAgIGlmICh0aGlzLl9tZXNoKSB7CisgICAgICAgICAgICB0aGlzLl9tZXNoLnBhcmVu
dCA9IHRoaXMuX3Bvc2VDb250cm9sbGVkQ2FtZXJhOworICAgICAgICB9CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBEaXNwb3NlcyBvZiB0aGUgY29udHJvbGxlcgorICAgICAqLworICAgIFBvc2VF
bmFibGVkQ29udHJvbGxlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgaWYgKHRoaXMuX21lc2gpIHsKKyAgICAgICAgICAgIHRoaXMuX21lc2guZGlzcG9zZSgpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX21lc2ggPSBudWxsOworICAgICAgICBfc3VwZXIucHJv
dG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShQb3NlRW5hYmxlZENvbnRyb2xsZXIucHJvdG90eXBlLCAibWVzaCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFRoZSBtZXNoIHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhlIGNvbnRyb2xs
ZXIKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX21lc2g7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdl
dHMgdGhlIHJheSBvZiB0aGUgY29udHJvbGxlciBpbiB0aGUgZGlyZWN0aW9uIHRoZSBjb250cm9s
bGVyIGlzIHBvaW50aW5nCisgICAgICogQHBhcmFtIGxlbmd0aCB0aGUgbGVuZ3RoIHRoZSByZXN1
bHRpbmcgcmF5IHNob3VsZCBiZQorICAgICAqIEByZXR1cm5zIGEgcmF5IGluIHRoZSBkaXJlY3Rp
b24gdGhlIGNvbnRyb2xsZXIgaXMgcG9pbnRpbmcKKyAgICAgKi8KKyAgICBQb3NlRW5hYmxlZENv
bnRyb2xsZXIucHJvdG90eXBlLmdldEZvcndhcmRSYXkgPSBmdW5jdGlvbiAobGVuZ3RoKSB7Cisg
ICAgICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCkgeyBsZW5ndGggPSAxMDA7IH0KKyAgICAgICAg
aWYgKCF0aGlzLm1lc2gpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgX0N1bGxpbmdfcmF5X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlJheSJdKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpLCBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgwLCAwLCAx
KSwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbSA9IHRoaXMuX3BvaW50aW5nUG9z
ZU5vZGUgPyB0aGlzLl9wb2ludGluZ1Bvc2VOb2RlLmdldFdvcmxkTWF0cml4KCkgOiB0aGlzLm1l
c2guZ2V0V29ybGRNYXRyaXgoKTsKKyAgICAgICAgdmFyIG9yaWdpbiA9IG0uZ2V0VHJhbnNsYXRp
b24oKTsKKyAgICAgICAgdmFyIGZvcndhcmQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgwLCAwLCAtMSk7CisgICAgICAgIHZh
ciBmb3J3YXJkV29ybGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbChmb3J3YXJkLCBtKTsKKyAgICAgICAg
dmFyIGRpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJWZWN0b3IzIl0uTm9ybWFsaXplKGZvcndhcmRXb3JsZCk7CisgICAgICAgIHJldHVy
biBuZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlJheSJdKG9y
aWdpbiwgZGlyZWN0aW9uLCBsZW5ndGgpOworICAgIH07CisgICAgLyoqCisgICAgICogTmFtZSBv
ZiB0aGUgY2hpbGQgbWVzaCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNhc3QgYSByYXkgZnJvbSB0aGUg
Y29udHJvbGxlcgorICAgICAqLworICAgIFBvc2VFbmFibGVkQ29udHJvbGxlci5QT0lOVElOR19Q
T1NFID0gIlBPSU5USU5HX1BPU0UiOworICAgIHJldHVybiBQb3NlRW5hYmxlZENvbnRyb2xsZXI7
Cit9KF9HYW1lcGFkc19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkdhbWVw
YWQiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0dhbWVwYWRzL0NvbnRyb2xsZXJz
L3ZpdmVDb250cm9sbGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vR2FtZXBhZHMvQ29udHJvbGxlcnMvdml2ZUNv
bnRyb2xsZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFZpdmVDb250cm9sbGVyICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpdmVDb250cm9sbGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBWaXZlQ29udHJvbGxlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0xvYWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0xvYWRpbmcv
c2NlbmVMb2FkZXIgKi8gIi4vTG9hZGluZy9zY2VuZUxvYWRlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF93ZWJWUkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2ViVlJDb250cm9sbGVyICovICIuL0dhbWVw
YWRzL0NvbnRyb2xsZXJzL3dlYlZSQ29udHJvbGxlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9wb3NlRW5hYmxlZENvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9zZUVuYWJsZWRDb250cm9sbGVyICovICIu
L0dhbWVwYWRzL0NvbnRyb2xsZXJzL3Bvc2VFbmFibGVkQ29udHJvbGxlci50cyIpOworCisKKwor
CisvKioKKyAqIFZpdmUgQ29udHJvbGxlcgorICovCit2YXIgVml2ZUNvbnRyb2xsZXIgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVml2ZUNvbnRyb2xsZXIsIF9zdXBlcik7CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBWaXZlQ29udHJvbGxlciBmcm9tIGEgZ2FtZXBhZAor
ICAgICAqIEBwYXJhbSB2ckdhbWVwYWQgdGhlIGdhbWVwYWQgdGhhdCB0aGUgY29udHJvbGxlciBz
aG91bGQgYmUgY3JlYXRlZCBmcm9tCisgICAgICovCisgICAgZnVuY3Rpb24gVml2ZUNvbnRyb2xs
ZXIodnJHYW1lcGFkKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHZy
R2FtZXBhZCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuY29udHJvbGxlclR5cGUgPSBfcG9zZUVu
YWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBvc2VFbmFibGVk
Q29udHJvbGxlclR5cGUiXS5WSVZFOworICAgICAgICBfdGhpcy5faW52ZXJ0TGVmdFN0aWNrWSA9
IHRydWU7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogSW1w
bGVtZW50cyBhYnN0cmFjdCBtZXRob2Qgb24gV2ViVlJDb250cm9sbGVyIGNsYXNzLCBsb2FkaW5n
IGNvbnRyb2xsZXIgbWVzaGVzIGFuZCBjYWxsaW5nIHRoaXMuYXR0YWNoVG9NZXNoIGlmIHN1Y2Nl
c3NmdWwuCisgICAgICogQHBhcmFtIHNjZW5lIHNjZW5lIGluIHdoaWNoIHRvIGFkZCBtZXNoZXMK
KyAgICAgKiBAcGFyYW0gbWVzaExvYWRlZCBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0
IHdpbGwgYmUgY2FsbGVkIGlmIHRoZSBtZXNoIGxvYWRzIHN1Y2Nlc3NmdWxseS4KKyAgICAgKi8K
KyAgICBWaXZlQ29udHJvbGxlci5wcm90b3R5cGUuaW5pdENvbnRyb2xsZXJNZXNoID0gZnVuY3Rp
b24gKHNjZW5lLCBtZXNoTG9hZGVkKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNj
ZW5lTG9hZGVyIl0uSW1wb3J0TWVzaCgiIiwgVml2ZUNvbnRyb2xsZXIuTU9ERUxfQkFTRV9VUkws
IFZpdmVDb250cm9sbGVyLk1PREVMX0ZJTEVOQU1FLCBzY2VuZSwgZnVuY3Rpb24gKG5ld01lc2hl
cykgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgIFBhcmVudCBNZXNoIG5hbWU6IFZpdmVX
YW5kCisgICAgICAgICAgICAtIGJvZHkKKyAgICAgICAgICAgIC0gcl9ncmlwcGVyCisgICAgICAg
ICAgICAtIGxfZ3JpcHBlcgorICAgICAgICAgICAgLSBtZW51X2J1dHRvbgorICAgICAgICAgICAg
LSBzeXN0ZW1fYnV0dG9uCisgICAgICAgICAgICAtIHRyYWNrcGFkCisgICAgICAgICAgICAtIHRy
aWdnZXIKKyAgICAgICAgICAgIC0gTEVECisgICAgICAgICAgICAqLworICAgICAgICAgICAgX3Ro
aXMuX2RlZmF1bHRNb2RlbCA9IG5ld01lc2hlc1sxXTsKKyAgICAgICAgICAgIF90aGlzLmF0dGFj
aFRvTWVzaChfdGhpcy5fZGVmYXVsdE1vZGVsKTsKKyAgICAgICAgICAgIGlmIChtZXNoTG9hZGVk
KSB7CisgICAgICAgICAgICAgICAgbWVzaExvYWRlZChfdGhpcy5fZGVmYXVsdE1vZGVsKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoVml2ZUNvbnRyb2xsZXIucHJvdG90eXBlLCAib25MZWZ0QnV0dG9uU3RhdGVDaGFuZ2VkT2Jz
ZXJ2YWJsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZpcmVkIHdoZW4gdGhlIGxlZnQg
YnV0dG9uIG9uIHRoaXMgY29udHJvbGxlciBpcyBtb2RpZmllZAorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5vbk1haW5CdXR0
b25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoVml2ZUNvbnRyb2xsZXIucHJvdG90eXBlLCAib25SaWdodEJ1dHRvblN0
YXRlQ2hhbmdlZE9ic2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3
aGVuIHRoZSByaWdodCBidXR0b24gb24gdGhpcyBjb250cm9sbGVyIGlzIG1vZGlmaWVkCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLm9uTWFpbkJ1dHRvblN0YXRlQ2hhbmdlZE9ic2VydmFibGU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWaXZlQ29udHJvbGxlci5wcm90b3R5cGUsICJv
bk1lbnVCdXR0b25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogRmlyZWQgd2hlbiB0aGUgbWVudSBidXR0b24gb24gdGhpcyBjb250cm9sbGVyIGlzIG1v
ZGlmaWVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLm9uU2Vjb25kYXJ5QnV0dG9uU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQ2FsbGVkIG9uY2UgZm9yIGVhY2gg
YnV0dG9uIHRoYXQgY2hhbmdlZCBzdGF0ZSBzaW5jZSB0aGUgbGFzdCBmcmFtZQorICAgICAqIFZp
dmUgbWFwcGluZzoKKyAgICAgKiAwOiB0b3VjaHBhZAorICAgICAqIDE6IHRyaWdnZXIKKyAgICAg
KiAyOiBsZWZ0IEFORCByaWdodCBidXR0b25zCisgICAgICogMzogbWVudSBidXR0b24KKyAgICAg
KiBAcGFyYW0gYnV0dG9uSWR4IFdoaWNoIGJ1dHRvbiBpbmRleCBjaGFuZ2VkCisgICAgICogQHBh
cmFtIHN0YXRlIE5ldyBzdGF0ZSBvZiB0aGUgYnV0dG9uCisgICAgICogQHBhcmFtIGNoYW5nZXMg
V2hpY2ggcHJvcGVydGllcyBvbiB0aGUgc3RhdGUgY2hhbmdlZCBzaW5jZSBsYXN0IGZyYW1lCisg
ICAgICovCisgICAgVml2ZUNvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVCdXR0b25DaGFuZ2Ug
PSBmdW5jdGlvbiAoYnV0dG9uSWR4LCBzdGF0ZSwgY2hhbmdlcykgeworICAgICAgICB2YXIgbm90
aWZ5T2JqZWN0ID0gc3RhdGU7IC8veyBzdGF0ZTogc3RhdGUsIGNoYW5nZXM6IGNoYW5nZXMgfTsK
KyAgICAgICAgc3dpdGNoIChidXR0b25JZHgpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAg
ICAgICAgICAgICB0aGlzLm9uUGFkU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZl
cnMobm90aWZ5T2JqZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBj
YXNlIDE6IC8vIGluZGV4IHRyaWdnZXIKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVs
dE1vZGVsKSB7CisgICAgICAgICAgICAgICAgICAgICh0aGlzLl9kZWZhdWx0TW9kZWwuZ2V0Q2hp
bGRyZW4oKVs2XSkucm90YXRpb24ueCA9IC1ub3RpZnlPYmplY3QudmFsdWUgKiAwLjE1OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLm9uVHJpZ2dlclN0YXRlQ2hhbmdl
ZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKG5vdGlmeU9iamVjdCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgY2FzZSAyOiAvLyBsZWZ0IEFORCByaWdodCBidXR0b24K
KyAgICAgICAgICAgICAgICB0aGlzLm9uTWFpbkJ1dHRvblN0YXRlQ2hhbmdlZE9ic2VydmFibGUu
bm90aWZ5T2JzZXJ2ZXJzKG5vdGlmeU9iamVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kZWZhdWx0TW9k
ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vdGlmeU9iamVjdC5wcmVzc2VkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5fZGVmYXVsdE1vZGVsLmdldENoaWxkcmVuKClb
Ml0pLnBvc2l0aW9uLnkgPSAtMC4wMDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5fZGVmYXVs
dE1vZGVsLmdldENoaWxkcmVuKClbMl0pLnBvc2l0aW9uLnkgPSAwOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMub25TZWNvbmRh
cnlCdXR0b25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhub3RpZnlPYmpl
Y3QpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogQmFzZSBVcmwgZm9yIHRoZSBjb250cm9sbGVyIG1vZGVsLgorICAgICAqLworICAg
IFZpdmVDb250cm9sbGVyLk1PREVMX0JBU0VfVVJMID0gJ2h0dHBzOi8vY29udHJvbGxlcnMuYmFi
eWxvbmpzLmNvbS92aXZlLyc7CisgICAgLyoqCisgICAgICogRmlsZSBuYW1lIGZvciB0aGUgY29u
dHJvbGxlciBtb2RlbC4KKyAgICAgKi8KKyAgICBWaXZlQ29udHJvbGxlci5NT0RFTF9GSUxFTkFN
RSA9ICd3YW5kLmJhYnlsb24nOworICAgIHJldHVybiBWaXZlQ29udHJvbGxlcjsKK30oX3dlYlZS
Q29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJXZWJWUkNvbnRyb2xsZXIi
XSkpOworCitfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlciJdLl9Db250cm9sbGVyRmFjdG9yaWVzLnB1
c2goeworICAgIGNhbkNyZWF0ZTogZnVuY3Rpb24gKGdhbWVwYWRJbmZvKSB7CisgICAgICAgIHJl
dHVybiBnYW1lcGFkSW5mby5pZC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ29wZW52cicpICE9PSAt
MTsKKyAgICB9LAorICAgIGNyZWF0ZTogZnVuY3Rpb24gKGdhbWVwYWRJbmZvKSB7CisgICAgICAg
IHJldHVybiBuZXcgVml2ZUNvbnRyb2xsZXIoZ2FtZXBhZEluZm8pOworICAgIH0KK30pOworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy93ZWJWUkNvbnRyb2xs
ZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vR2FtZXBhZHMvQ29udHJvbGxlcnMvd2ViVlJDb250cm9sbGVyLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogV2ViVlJDb250cm9sbGVyICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlZSQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gV2ViVlJDb250cm9sbGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
dHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8g
Ii4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc2VF
bmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9wb3NlRW5hYmxlZENvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29u
dHJvbGxlcnMvcG9zZUVuYWJsZWRDb250cm9sbGVyLnRzIik7CisKKworCisvKioKKyAqIERlZmlu
ZXMgdGhlIFdlYlZSQ29udHJvbGxlciBvYmplY3QgdGhhdCByZXByZXNlbnRzIGNvbnRyb2xsZXJz
IHRyYWNrZWQgaW4gM0Qgc3BhY2UKKyAqLwordmFyIFdlYlZSQ29udHJvbGxlciA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2V4dGVuZHMiXShXZWJWUkNvbnRyb2xsZXIsIF9zdXBlcik7CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIG5ldyBXZWJWUkNvbnRyb2xsZXIgZnJvbSBhIGdhbWVwYWQKKyAg
ICAgKiBAcGFyYW0gdnJHYW1lcGFkIHRoZSBnYW1lcGFkIHRoYXQgdGhlIFdlYlZSQ29udHJvbGxl
ciBzaG91bGQgYmUgY3JlYXRlZCBmcm9tCisgICAgICovCisgICAgZnVuY3Rpb24gV2ViVlJDb250
cm9sbGVyKHZyR2FtZXBhZCkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlz
LCB2ckdhbWVwYWQpIHx8IHRoaXM7CisgICAgICAgIC8vIE9ic2VydmFibGVzCisgICAgICAgIC8q
KgorICAgICAgICAgKiBGaXJlZCB3aGVuIHRoZSB0cmlnZ2VyIHN0YXRlIGhhcyBjaGFuZ2VkCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5vblRyaWdnZXJTdGF0ZUNoYW5nZWRPYnNlcnZhYmxl
ID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2Jz
ZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3aGVuIHRoZSBtYWlu
IGJ1dHRvbiBzdGF0ZSBoYXMgY2hhbmdlZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25N
YWluQnV0dG9uU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioK
KyAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgc2Vjb25kYXJ5IGJ1dHRvbiBzdGF0ZSBoYXMgY2hh
bmdlZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25TZWNvbmRhcnlCdXR0b25TdGF0ZUNo
YW5nZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJl
ZCB3aGVuIHRoZSBwYWQgc3RhdGUgaGFzIGNoYW5nZWQKKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLm9uUGFkU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioK
KyAgICAgICAgICogRmlyZWQgd2hlbiBjb250cm9sbGVycyBzdGljayB2YWx1ZXMgaGF2ZSBjaGFu
Z2VkCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vblBhZFZhbHVlc0NoYW5nZWRPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBYIGFuZCBZIGF4aXMgY29y
cmVzcG9uZGluZyB0byB0aGUgY29udHJvbGxlcnMgam95c3RpY2sKKyAgICAgICAgICovCisgICAg
ICAgIF90aGlzLnBhZCA9IHsgeDogMCwgeTogMCB9OworICAgICAgICAvLyBhdm9pZCBHQywgc3Rv
cmUgc3RhdGUgaW4gYSB0bXAgb2JqZWN0CisgICAgICAgIF90aGlzLl9jaGFuZ2VzID0geworICAg
ICAgICAgICAgcHJlc3NDaGFuZ2VkOiBmYWxzZSwKKyAgICAgICAgICAgIHRvdWNoQ2hhbmdlZDog
ZmFsc2UsCisgICAgICAgICAgICB2YWx1ZUNoYW5nZWQ6IGZhbHNlLAorICAgICAgICAgICAgY2hh
bmdlZDogZmFsc2UKKyAgICAgICAgfTsKKyAgICAgICAgX3RoaXMuX2J1dHRvbnMgPSBuZXcgQXJy
YXkodnJHYW1lcGFkLmJ1dHRvbnMubGVuZ3RoKTsKKyAgICAgICAgX3RoaXMuaGFuZCA9IHZyR2Ft
ZXBhZC5oYW5kOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAq
IEZpcmVkIHdoZW4gYSBjb250cm9sbGVyIGJ1dHRvbidzIHN0YXRlIGhhcyBjaGFuZ2VkCisgICAg
ICogQHBhcmFtIGNhbGxiYWNrIHRoZSBjYWxsYmFjayBjb250YWluaW5nIHRoZSBidXR0b24gdGhh
dCB3YXMgbW9kaWZpZWQKKyAgICAgKi8KKyAgICBXZWJWUkNvbnRyb2xsZXIucHJvdG90eXBlLm9u
QnV0dG9uU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5f
b25CdXR0b25TdGF0ZUNoYW5nZSA9IGNhbGxiYWNrOworICAgIH07CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KFdlYlZSQ29udHJvbGxlci5wcm90b3R5cGUsICJkZWZhdWx0TW9kZWwiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZGVmYXVsdCBjb250cm9sbGVyIG1vZGVsIGZvciB0
aGUgY29udHJvbGxlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdE1vZGVsOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiB0aGUgY29udHJvbGxlciBhbmQg
bWVzaCBiYXNlZCBvbiB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgcm90YXRpb24gb2YgdGhlIGNv
bnRyb2xsZXIKKyAgICAgKi8KKyAgICBXZWJWUkNvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlz
KTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2J1dHRvbnMubGVu
Z3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB0aGlzLl9zZXRCdXR0b25WYWx1ZSh0aGlzLmJy
b3dzZXJHYW1lcGFkLmJ1dHRvbnNbaW5kZXhdLCB0aGlzLl9idXR0b25zW2luZGV4XSwgaW5kZXgp
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmxlZnRTdGljay54ICE9PSB0aGlzLnBhZC54
IHx8IHRoaXMubGVmdFN0aWNrLnkgIT09IHRoaXMucGFkLnkpIHsKKyAgICAgICAgICAgIHRoaXMu
cGFkLnggPSB0aGlzLmxlZnRTdGljay54OworICAgICAgICAgICAgdGhpcy5wYWQueSA9IHRoaXMu
bGVmdFN0aWNrLnk7CisgICAgICAgICAgICB0aGlzLm9uUGFkVmFsdWVzQ2hhbmdlZE9ic2VydmFi
bGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMucGFkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgV2Vi
VlJDb250cm9sbGVyLnByb3RvdHlwZS5fc2V0QnV0dG9uVmFsdWUgPSBmdW5jdGlvbiAobmV3U3Rh
dGUsIGN1cnJlbnRTdGF0ZSwgYnV0dG9uSW5kZXgpIHsKKyAgICAgICAgaWYgKCFuZXdTdGF0ZSkg
eworICAgICAgICAgICAgbmV3U3RhdGUgPSB7CisgICAgICAgICAgICAgICAgcHJlc3NlZDogZmFs
c2UsCisgICAgICAgICAgICAgICAgdG91Y2hlZDogZmFsc2UsCisgICAgICAgICAgICAgICAgdmFs
dWU6IDAKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjdXJyZW50U3Rh
dGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvbnNbYnV0dG9uSW5kZXhdID0geworICAgICAg
ICAgICAgICAgIHByZXNzZWQ6IG5ld1N0YXRlLnByZXNzZWQsCisgICAgICAgICAgICAgICAgdG91
Y2hlZDogbmV3U3RhdGUudG91Y2hlZCwKKyAgICAgICAgICAgICAgICB2YWx1ZTogbmV3U3RhdGUu
dmFsdWUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fY2hlY2tDaGFuZ2VzKG5ld1N0YXRlLCBjdXJyZW50U3RhdGUpOworICAgICAg
ICBpZiAodGhpcy5fY2hhbmdlcy5jaGFuZ2VkKSB7CisgICAgICAgICAgICB0aGlzLl9vbkJ1dHRv
blN0YXRlQ2hhbmdlICYmIHRoaXMuX29uQnV0dG9uU3RhdGVDaGFuZ2UodGhpcy5pbmRleCwgYnV0
dG9uSW5kZXgsIG5ld1N0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX2hhbmRsZUJ1dHRvbkNoYW5n
ZShidXR0b25JbmRleCwgbmV3U3RhdGUsIHRoaXMuX2NoYW5nZXMpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2J1dHRvbnNbYnV0dG9uSW5kZXhdLnByZXNzZWQgPSBuZXdTdGF0ZS5wcmVzc2Vk
OworICAgICAgICB0aGlzLl9idXR0b25zW2J1dHRvbkluZGV4XS50b3VjaGVkID0gbmV3U3RhdGUu
dG91Y2hlZDsKKyAgICAgICAgLy8gb2N1bHVzIHRyaWdnZXJzIGFyZSBuZXZlciAwLCB0aG91IG5v
dCB0b3VjaGVkLgorICAgICAgICB0aGlzLl9idXR0b25zW2J1dHRvbkluZGV4XS52YWx1ZSA9IG5l
d1N0YXRlLnZhbHVlIDwgMC4wMDAwMDAwMSA/IDAgOiBuZXdTdGF0ZS52YWx1ZTsKKyAgICB9Owor
ICAgIFdlYlZSQ29udHJvbGxlci5wcm90b3R5cGUuX2NoZWNrQ2hhbmdlcyA9IGZ1bmN0aW9uIChu
ZXdTdGF0ZSwgY3VycmVudFN0YXRlKSB7CisgICAgICAgIHRoaXMuX2NoYW5nZXMucHJlc3NDaGFu
Z2VkID0gbmV3U3RhdGUucHJlc3NlZCAhPT0gY3VycmVudFN0YXRlLnByZXNzZWQ7CisgICAgICAg
IHRoaXMuX2NoYW5nZXMudG91Y2hDaGFuZ2VkID0gbmV3U3RhdGUudG91Y2hlZCAhPT0gY3VycmVu
dFN0YXRlLnRvdWNoZWQ7CisgICAgICAgIHRoaXMuX2NoYW5nZXMudmFsdWVDaGFuZ2VkID0gbmV3
U3RhdGUudmFsdWUgIT09IGN1cnJlbnRTdGF0ZS52YWx1ZTsKKyAgICAgICAgdGhpcy5fY2hhbmdl
cy5jaGFuZ2VkID0gdGhpcy5fY2hhbmdlcy5wcmVzc0NoYW5nZWQgfHwgdGhpcy5fY2hhbmdlcy50
b3VjaENoYW5nZWQgfHwgdGhpcy5fY2hhbmdlcy52YWx1ZUNoYW5nZWQ7CisgICAgICAgIHJldHVy
biB0aGlzLl9jaGFuZ2VzOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGgg
d2ViVlJDT250cm9sbGVyCisgICAgICovCisgICAgV2ViVlJDb250cm9sbGVyLnByb3RvdHlwZS5k
aXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2Uu
Y2FsbCh0aGlzKTsKKyAgICAgICAgdGhpcy5vblRyaWdnZXJTdGF0ZUNoYW5nZWRPYnNlcnZhYmxl
LmNsZWFyKCk7CisgICAgICAgIHRoaXMub25NYWluQnV0dG9uU3RhdGVDaGFuZ2VkT2JzZXJ2YWJs
ZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uU2Vjb25kYXJ5QnV0dG9uU3RhdGVDaGFuZ2VkT2Jz
ZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uUGFkU3RhdGVDaGFuZ2VkT2JzZXJ2YWJs
ZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uUGFkVmFsdWVzQ2hhbmdlZE9ic2VydmFibGUuY2xl
YXIoKTsKKyAgICB9OworICAgIHJldHVybiBXZWJWUkNvbnRyb2xsZXI7Cit9KF9wb3NlRW5hYmxl
ZENvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUG9zZUVuYWJsZWRDb250
cm9sbGVyIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9HYW1lcGFkcy9Db250cm9s
bGVycy93aW5kb3dzTW90aW9uQ29udHJvbGxlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dhbWVw
YWRzL0NvbnRyb2xsZXJzL3dpbmRvd3NNb3Rpb25Db250cm9sbGVyLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBXaW5kb3dzTW90aW9uQ29udHJvbGxlciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJXaW5kb3dzTW90aW9uQ29udHJvbGxlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gV2luZG93c01vdGlvbkNvbnRyb2xsZXI7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVz
Ni5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9s
b2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9N
YXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVz
L21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ3VsbGluZ19yYXlfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0N1
bGxpbmcvcmF5ICovICIuL0N1bGxpbmcvcmF5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0xvYWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0xvYWRpbmcvc2NlbmVMb2FkZXIgKi8gIi4vTG9h
ZGluZy9zY2VuZUxvYWRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJWUkNv
bnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vd2ViVlJDb250cm9sbGVyICovICIuL0dhbWVwYWRzL0NvbnRyb2xsZXJzL3dlYlZS
Q29udHJvbGxlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9nZW5lcmljQ29udHJv
bGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9nZW5lcmljQ29udHJvbGxlciAqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy9nZW5lcmlj
Q29udHJvbGxlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3NlRW5hYmxlZENv
bnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vcG9zZUVuYWJsZWRDb250cm9sbGVyICovICIuL0dhbWVwYWRzL0NvbnRyb2xsZXJz
L3Bvc2VFbmFibGVkQ29udHJvbGxlci50cyIpOworCisKKworCisKKworCisKKworCisvKioKKyAq
IERlZmluZXMgdGhlIExvYWRlZE1lc2hJbmZvIG9iamVjdCB0aGF0IGRlc2NyaWJlcyBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgbG9hZGVkIHdlYlZSIGNvbnRyb2xsZXIgbWVzaAorICovCit2YXIgTG9h
ZGVkTWVzaEluZm8gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24g
TG9hZGVkTWVzaEluZm8oKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNYXAgb2YgdGhlIGJ1
dHRvbiBtZXNoZXMgY29udGFpbmVkIGluIHRoZSBjb250cm9sbGVyCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLmJ1dHRvbk1lc2hlcyA9IHt9OworICAgICAgICAvKioKKyAgICAgICAgICogTWFw
IG9mIHRoZSBheGlzIG1lc2hlcyBjb250YWluZWQgaW4gdGhlIGNvbnRyb2xsZXIKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuYXhpc01lc2hlcyA9IHt9OworICAgIH0KKyAgICByZXR1cm4gTG9h
ZGVkTWVzaEluZm87Cit9KCkpOworLyoqCisgKiBEZWZpbmVzIHRoZSBXaW5kb3dzTW90aW9uQ29u
dHJvbGxlciBvYmplY3QgdGhhdCB0aGUgc3RhdGUgb2YgdGhlIHdpbmRvd3MgbW90aW9uIGNvbnRy
b2xsZXIKKyAqLwordmFyIFdpbmRvd3NNb3Rpb25Db250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZXh0ZW5kcyJdKFdpbmRvd3NNb3Rpb25Db250cm9sbGVyLCBfc3VwZXIpOworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYSBuZXcgV2luZG93c01vdGlvbkNvbnRyb2xsZXIgZnJvbSBhIGdh
bWVwYWQKKyAgICAgKiBAcGFyYW0gdnJHYW1lcGFkIHRoZSBnYW1lcGFkIHRoYXQgdGhlIGNvbnRy
b2xsZXIgc2hvdWxkIGJlIGNyZWF0ZWQgZnJvbQorICAgICAqLworICAgIGZ1bmN0aW9uIFdpbmRv
d3NNb3Rpb25Db250cm9sbGVyKHZyR2FtZXBhZCkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3Vw
ZXIuY2FsbCh0aGlzLCB2ckdhbWVwYWQpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9tYXBwaW5n
ID0geworICAgICAgICAgICAgLy8gU2VtYW50aWMgYnV0dG9uIG5hbWVzCisgICAgICAgICAgICBi
dXR0b25zOiBbJ3RodW1ic3RpY2snLCAndHJpZ2dlcicsICdncmlwJywgJ21lbnUnLCAndHJhY2tw
YWQnXSwKKyAgICAgICAgICAgIC8vIEEgbWFwcGluZyBvZiB0aGUgYnV0dG9uIG5hbWUgdG8gZ2xU
RiBtb2RlbCBub2RlIG5hbWUKKyAgICAgICAgICAgIC8vIHRoYXQgc2hvdWxkIGJlIHRyYW5zZm9y
bWVkIGJ5IGJ1dHRvbiB2YWx1ZS4KKyAgICAgICAgICAgIGJ1dHRvbk1lc2hOYW1lczogeworICAg
ICAgICAgICAgICAgICd0cmlnZ2VyJzogJ1NFTEVDVCcsCisgICAgICAgICAgICAgICAgJ21lbnUn
OiAnTUVOVScsCisgICAgICAgICAgICAgICAgJ2dyaXAnOiAnR1JBU1AnLAorICAgICAgICAgICAg
ICAgICd0aHVtYnN0aWNrJzogJ1RIVU1CU1RJQ0tfUFJFU1MnLAorICAgICAgICAgICAgICAgICd0
cmFja3BhZCc6ICdUT1VDSFBBRF9QUkVTUycKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAv
LyBUaGlzIG1hcHBpbmcgaXMgdXNlZCB0byB0cmFuc2xhdGUgZnJvbSB0aGUgTW90aW9uIENvbnRy
b2xsZXIgdG8gQmFieWxvbiBzZW1hbnRpY3MKKyAgICAgICAgICAgIGJ1dHRvbk9ic2VydmFibGVO
YW1lczogeworICAgICAgICAgICAgICAgICd0cmlnZ2VyJzogJ29uVHJpZ2dlclN0YXRlQ2hhbmdl
ZE9ic2VydmFibGUnLAorICAgICAgICAgICAgICAgICdtZW51JzogJ29uU2Vjb25kYXJ5QnV0dG9u
U3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZScsCisgICAgICAgICAgICAgICAgJ2dyaXAnOiAnb25NYWlu
QnV0dG9uU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZScsCisgICAgICAgICAgICAgICAgJ3RodW1ic3Rp
Y2snOiAnb25QYWRTdGF0ZUNoYW5nZWRPYnNlcnZhYmxlJywKKyAgICAgICAgICAgICAgICAndHJh
Y2twYWQnOiAnb25UcmFja3BhZENoYW5nZWRPYnNlcnZhYmxlJworICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIC8vIEEgbWFwcGluZyBvZiB0aGUgYXhpcyBuYW1lIHRvIGdsVEYgbW9kZWwgbm9k
ZSBuYW1lCisgICAgICAgICAgICAvLyB0aGF0IHNob3VsZCBiZSB0cmFuc2Zvcm1lZCBieSBheGlz
IHZhbHVlLgorICAgICAgICAgICAgLy8gVGhpcyBhcnJheSBtaXJyb3JzIHRoZSBicm93c2VyR2Ft
ZXBhZC5heGVzIGFycmF5LCBzdWNoIHRoYXQKKyAgICAgICAgICAgIC8vIHRoZSBtZXNoIGNvcnJl
c3BvbmRpbmcgdG8gYXhpcyAwIGlzIGluIHRoaXMgYXJyYXkgaW5kZXggMC4KKyAgICAgICAgICAg
IGF4aXNNZXNoTmFtZXM6IFsKKyAgICAgICAgICAgICAgICAnVEhVTUJTVElDS19YJywKKyAgICAg
ICAgICAgICAgICAnVEhVTUJTVElDS19ZJywKKyAgICAgICAgICAgICAgICAnVE9VQ0hQQURfVE9V
Q0hfWCcsCisgICAgICAgICAgICAgICAgJ1RPVUNIUEFEX1RPVUNIX1knCisgICAgICAgICAgICBd
LAorICAgICAgICAgICAgcG9pbnRpbmdQb3NlTWVzaE5hbWU6IF9wb3NlRW5hYmxlZENvbnRyb2xs
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUG9zZUVuYWJsZWRDb250cm9sbGVyIl0u
UE9JTlRJTkdfUE9TRQorICAgICAgICB9OworICAgICAgICAvKioKKyAgICAgICAgICogRmlyZWQg
d2hlbiB0aGUgdHJhY2twYWQgb24gdGhpcyBjb250cm9sbGVyIGlzIGNsaWNrZWQKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLm9uVHJhY2twYWRDaGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlz
Y19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgp
OworICAgICAgICAvKioKKyAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgdHJhY2twYWQgb24gdGhp
cyBjb250cm9sbGVyIGlzIG1vZGlmaWVkCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vblRy
YWNrcGFkVmFsdWVzQ2hhbmdlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFRoZSBjdXJyZW50IHggYW5kIHkgdmFsdWVzIG9mIHRoaXMgY29udHJvbGxlcidz
IHRyYWNrcGFkCisgICAgICAgICAqLworICAgICAgICBfdGhpcy50cmFja3BhZCA9IHsgeDogMCwg
eTogMCB9OworICAgICAgICBfdGhpcy5jb250cm9sbGVyVHlwZSA9IF9wb3NlRW5hYmxlZENvbnRy
b2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUG9zZUVuYWJsZWRDb250cm9sbGVy
VHlwZSJdLldJTkRPV1M7CisgICAgICAgIF90aGlzLl9sb2FkZWRNZXNoSW5mbyA9IG51bGw7Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdp
bmRvd3NNb3Rpb25Db250cm9sbGVyLnByb3RvdHlwZSwgIm9uVHJpZ2dlckJ1dHRvblN0YXRlQ2hh
bmdlZE9ic2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3aGVuIHRo
ZSB0cmlnZ2VyIG9uIHRoaXMgY29udHJvbGxlciBpcyBtb2RpZmllZAorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5vblRyaWdn
ZXJTdGF0ZUNoYW5nZWRPYnNlcnZhYmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoV2luZG93c01vdGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLCAib25NZW51
QnV0dG9uU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEZpcmVkIHdoZW4gdGhlIG1lbnUgYnV0dG9uIG9uIHRoaXMgY29udHJvbGxlciBpcyBtb2RpZmll
ZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5vblNlY29uZGFyeUJ1dHRvblN0YXRlQ2hhbmdlZE9ic2VydmFibGU7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5kb3dzTW90aW9uQ29u
dHJvbGxlci5wcm90b3R5cGUsICJvbkdyaXBCdXR0b25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgZ3JpcCBidXR0b24gb24g
dGhpcyBjb250cm9sbGVyIGlzIG1vZGlmaWVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm9uTWFpbkJ1dHRvblN0YXRlQ2hh
bmdlZE9ic2VydmFibGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShXaW5kb3dzTW90aW9uQ29udHJvbGxlci5wcm90b3R5cGUsICJvblRodW1ic3RpY2tCdXR0
b25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRmly
ZWQgd2hlbiB0aGUgdGh1bWJzdGljayBidXR0b24gb24gdGhpcyBjb250cm9sbGVyIGlzIG1vZGlm
aWVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLm9uUGFkU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpbmRvd3NNb3Rpb25Db250cm9sbGVyLnBy
b3RvdHlwZSwgIm9uVG91Y2hwYWRCdXR0b25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgdG91Y2hwYWQgYnV0dG9uIG9uIHRo
aXMgY29udHJvbGxlciBpcyBtb2RpZmllZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5vblRyYWNrcGFkQ2hhbmdlZE9ic2Vy
dmFibGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5k
b3dzTW90aW9uQ29udHJvbGxlci5wcm90b3R5cGUsICJvblRvdWNocGFkVmFsdWVzQ2hhbmdlZE9i
c2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3aGVuIHRoZSB0b3Vj
aHBhZCB2YWx1ZXMgb24gdGhpcyBjb250cm9sbGVyIGFyZSBtb2RpZmllZAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5vblRy
YWNrcGFkVmFsdWVzQ2hhbmdlZE9ic2VydmFibGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIFdp
bmRvd3NNb3Rpb25Db250cm9sbGVyLnByb3RvdHlwZS5fdXBkYXRlVHJhY2twYWQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGlmICh0aGlzLmJyb3dzZXJHYW1lcGFkLmF4ZXMgJiYgKHRoaXMuYnJv
d3NlckdhbWVwYWQuYXhlc1syXSAhPSB0aGlzLnRyYWNrcGFkLnggfHwgdGhpcy5icm93c2VyR2Ft
ZXBhZC5heGVzWzNdICE9IHRoaXMudHJhY2twYWQueSkpIHsKKyAgICAgICAgICAgIHRoaXMudHJh
Y2twYWQueCA9IHRoaXMuYnJvd3NlckdhbWVwYWRbImF4ZXMiXVsyXTsKKyAgICAgICAgICAgIHRo
aXMudHJhY2twYWQueSA9IHRoaXMuYnJvd3NlckdhbWVwYWRbImF4ZXMiXVszXTsKKyAgICAgICAg
ICAgIHRoaXMub25UcmFja3BhZFZhbHVlc0NoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyh0aGlzLnRyYWNrcGFkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ2Fs
bGVkIG9uY2UgcGVyIGZyYW1lIGJ5IHRoZSBlbmdpbmUuCisgICAgICovCisgICAgV2luZG93c01v
dGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
X3N1cGVyLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMuYnJv
d3NlckdhbWVwYWQuYXhlcykgeworICAgICAgICAgICAgdGhpcy5fdXBkYXRlVHJhY2twYWQoKTsK
KyAgICAgICAgICAgIC8vIE9ubHkgbmVlZCB0byBhbmltYXRlIGF4ZXMgaWYgdGhlcmUgaXMgYSBs
b2FkZWQgbWVzaAorICAgICAgICAgICAgaWYgKHRoaXMuX2xvYWRlZE1lc2hJbmZvKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgYXhpcyA9IDA7IGF4aXMgPCB0aGlzLl9tYXBwaW5nLmF4aXNN
ZXNoTmFtZXMubGVuZ3RoOyBheGlzKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGVy
cEF4aXNUcmFuc2Zvcm0oYXhpcywgdGhpcy5icm93c2VyR2FtZXBhZC5heGVzW2F4aXNdKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIENhbGxlZCBvbmNlIGZvciBlYWNoIGJ1dHRvbiB0aGF0IGNoYW5nZWQgc3RhdGUg
c2luY2UgdGhlIGxhc3QgZnJhbWUKKyAgICAgKiBAcGFyYW0gYnV0dG9uSWR4IFdoaWNoIGJ1dHRv
biBpbmRleCBjaGFuZ2VkCisgICAgICogQHBhcmFtIHN0YXRlIE5ldyBzdGF0ZSBvZiB0aGUgYnV0
dG9uCisgICAgICogQHBhcmFtIGNoYW5nZXMgV2hpY2ggcHJvcGVydGllcyBvbiB0aGUgc3RhdGUg
Y2hhbmdlZCBzaW5jZSBsYXN0IGZyYW1lCisgICAgICovCisgICAgV2luZG93c01vdGlvbkNvbnRy
b2xsZXIucHJvdG90eXBlLl9oYW5kbGVCdXR0b25DaGFuZ2UgPSBmdW5jdGlvbiAoYnV0dG9uSWR4
LCBzdGF0ZSwgY2hhbmdlcykgeworICAgICAgICB2YXIgYnV0dG9uTmFtZSA9IHRoaXMuX21hcHBp
bmcuYnV0dG9uc1tidXR0b25JZHhdOworICAgICAgICBpZiAoIWJ1dHRvbk5hbWUpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBVcGRhdGUgdGhlIHRyYWNrcGFk
IHRvIGVuc3VyZSB0cmFja3BhZC54L3kgYXJlIGFjY3VyYXRlIGR1cmluZyBidXR0b24gZXZlbnRz
IGJldHdlZW4gZnJhbWVzCisgICAgICAgIHRoaXMuX3VwZGF0ZVRyYWNrcGFkKCk7CisgICAgICAg
IC8vIE9ubHkgZW1pdCBldmVudHMgZm9yIGJ1dHRvbnMgdGhhdCB3ZSBrbm93IGhvdyB0byBtYXAg
ZnJvbSBpbmRleCB0byBuYW1lCisgICAgICAgIHZhciBvYnNlcnZhYmxlID0gdGhpc1sodGhpcy5f
bWFwcGluZy5idXR0b25PYnNlcnZhYmxlTmFtZXMpW2J1dHRvbk5hbWVdXTsKKyAgICAgICAgaWYg
KG9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIG9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHN0
YXRlKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9sZXJwQnV0dG9uVHJhbnNmb3JtKGJ1dHRv
bk5hbWUsIHN0YXRlLnZhbHVlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1vdmVzIHRoZSBi
dXR0b25zIG9uIHRoZSBjb250cm9sbGVyIG1lc2ggYmFzZWQgb24gdGhlaXIgY3VycmVudCBzdGF0
ZQorICAgICAqIEBwYXJhbSBidXR0b25OYW1lIHRoZSBuYW1lIG9mIHRoZSBidXR0b24gdG8gbW92
ZQorICAgICAqIEBwYXJhbSBidXR0b25WYWx1ZSB0aGUgdmFsdWUgb2YgdGhlIGJ1dHRvbiB3aGlj
aCBkZXRlcm1pbmVzIHRoZSBidXR0b25zIG5ldyBwb3NpdGlvbgorICAgICAqLworICAgIFdpbmRv
d3NNb3Rpb25Db250cm9sbGVyLnByb3RvdHlwZS5fbGVycEJ1dHRvblRyYW5zZm9ybSA9IGZ1bmN0
aW9uIChidXR0b25OYW1lLCBidXR0b25WYWx1ZSkgeworICAgICAgICAvLyBJZiB0aGVyZSBpcyBu
byBsb2FkZWQgbWVzaCwgdGhlcmUgaXMgbm90aGluZyB0byB0cmFuc2Zvcm0uCisgICAgICAgIGlm
ICghdGhpcy5fbG9hZGVkTWVzaEluZm8pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB2YXIgbWVzaEluZm8gPSB0aGlzLl9sb2FkZWRNZXNoSW5mby5idXR0b25NZXNo
ZXNbYnV0dG9uTmFtZV07CisgICAgICAgIGlmICghbWVzaEluZm8udW5wcmVzc2VkLnJvdGF0aW9u
UXVhdGVybmlvbiB8fCAhbWVzaEluZm8ucHJlc3NlZC5yb3RhdGlvblF1YXRlcm5pb24gfHwgIW1l
c2hJbmZvLnZhbHVlLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0uU2xlcnBUb1JlZihtZXNoSW5mby51bnByZXNzZWQucm90
YXRpb25RdWF0ZXJuaW9uLCBtZXNoSW5mby5wcmVzc2VkLnJvdGF0aW9uUXVhdGVybmlvbiwgYnV0
dG9uVmFsdWUsIG1lc2hJbmZvLnZhbHVlLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0u
TGVycFRvUmVmKG1lc2hJbmZvLnVucHJlc3NlZC5wb3NpdGlvbiwgbWVzaEluZm8ucHJlc3NlZC5w
b3NpdGlvbiwgYnV0dG9uVmFsdWUsIG1lc2hJbmZvLnZhbHVlLnBvc2l0aW9uKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIE1vdmVzIHRoZSBheGlzIG9uIHRoZSBjb250cm9sbGVyIG1lc2ggYmFz
ZWQgb24gaXRzIGN1cnJlbnQgc3RhdGUKKyAgICAgKiBAcGFyYW0gYXhpcyB0aGUgaW5kZXggb2Yg
dGhlIGF4aXMKKyAgICAgKiBAcGFyYW0gYXhpc1ZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgYXhpcyB3
aGljaCBkZXRlcm1pbmVzIHRoZSBtZXNoZXMgbmV3IHBvc2l0aW9uCisgICAgICogQGhpZGRlbgor
ICAgICAqLworICAgIFdpbmRvd3NNb3Rpb25Db250cm9sbGVyLnByb3RvdHlwZS5fbGVycEF4aXNU
cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXhpcywgYXhpc1ZhbHVlKSB7CisgICAgICAgIGlmICghdGhp
cy5fbG9hZGVkTWVzaEluZm8pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgbWVzaEluZm8gPSB0aGlzLl9sb2FkZWRNZXNoSW5mby5heGlzTWVzaGVzW2F4aXNd
OworICAgICAgICBpZiAoIW1lc2hJbmZvKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFtZXNoSW5mby5taW4ucm90YXRpb25RdWF0ZXJuaW9uIHx8ICFtZXNo
SW5mby5tYXgucm90YXRpb25RdWF0ZXJuaW9uIHx8ICFtZXNoSW5mby52YWx1ZS5yb3RhdGlvblF1
YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBD
b252ZXJ0IGZyb20gZ2FtZXBhZCB2YWx1ZSByYW5nZSAoLTEgdG8gKzEpIHRvIGxlcnAgcmFuZ2Ug
KDAgdG8gMSkKKyAgICAgICAgdmFyIGxlcnBWYWx1ZSA9IGF4aXNWYWx1ZSAqIDAuNSArIDAuNTsK
KyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlF1YXRlcm5pb24iXS5TbGVycFRvUmVmKG1lc2hJbmZvLm1pbi5yb3RhdGlvblF1YXRlcm5pb24s
IG1lc2hJbmZvLm1heC5yb3RhdGlvblF1YXRlcm5pb24sIGxlcnBWYWx1ZSwgbWVzaEluZm8udmFs
dWUucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5MZXJwVG9SZWYobWVzaEluZm8ubWlu
LnBvc2l0aW9uLCBtZXNoSW5mby5tYXgucG9zaXRpb24sIGxlcnBWYWx1ZSwgbWVzaEluZm8udmFs
dWUucG9zaXRpb24pOworICAgIH07CisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyBhYnN0cmFj
dCBtZXRob2Qgb24gV2ViVlJDb250cm9sbGVyIGNsYXNzLCBsb2FkaW5nIGNvbnRyb2xsZXIgbWVz
aGVzIGFuZCBjYWxsaW5nIHRoaXMuYXR0YWNoVG9NZXNoIGlmIHN1Y2Nlc3NmdWwuCisgICAgICog
QHBhcmFtIHNjZW5lIHNjZW5lIGluIHdoaWNoIHRvIGFkZCBtZXNoZXMKKyAgICAgKiBAcGFyYW0g
bWVzaExvYWRlZCBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVk
IGlmIHRoZSBtZXNoIGxvYWRzIHN1Y2Nlc3NmdWxseS4KKyAgICAgKi8KKyAgICBXaW5kb3dzTW90
aW9uQ29udHJvbGxlci5wcm90b3R5cGUuaW5pdENvbnRyb2xsZXJNZXNoID0gZnVuY3Rpb24gKHNj
ZW5lLCBtZXNoTG9hZGVkLCBmb3JjZURlZmF1bHQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhp
czsKKyAgICAgICAgaWYgKGZvcmNlRGVmYXVsdCA9PT0gdm9pZCAwKSB7IGZvcmNlRGVmYXVsdCA9
IGZhbHNlOyB9CisgICAgICAgIHZhciBwYXRoOworICAgICAgICB2YXIgZmlsZW5hbWU7CisgICAg
ICAgIC8vIENoZWNraW5nIGlmIEdMQiBsb2FkZXIgaXMgcHJlc2VudAorICAgICAgICBpZiAoX0xv
YWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siU2NlbmVMb2Fk
ZXIiXS5Jc1BsdWdpbkZvckV4dGVuc2lvbkF2YWlsYWJsZSgiLmdsYiIpKSB7CisgICAgICAgICAg
ICAvLyBEZXRlcm1pbmUgdGhlIGRldmljZSBzcGVjaWZpYyBmb2xkZXIgYmFzZWQgb24gdGhlIElE
IHN1ZmZpeAorICAgICAgICAgICAgdmFyIGRldmljZSA9ICdkZWZhdWx0JzsKKyAgICAgICAgICAg
IGlmICh0aGlzLmlkICYmICFmb3JjZURlZmF1bHQpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0
Y2ggPSB0aGlzLmlkLm1hdGNoKFdpbmRvd3NNb3Rpb25Db250cm9sbGVyLkdBTUVQQURfSURfUEFU
VEVSTik7CisgICAgICAgICAgICAgICAgZGV2aWNlID0gKChtYXRjaCAmJiBtYXRjaFswXSkgfHwg
ZGV2aWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEhhbmQKKyAgICAgICAgICAg
IGlmICh0aGlzLmhhbmQgPT09ICdsZWZ0JykgeworICAgICAgICAgICAgICAgIGZpbGVuYW1lID0g
V2luZG93c01vdGlvbkNvbnRyb2xsZXIuTU9ERUxfTEVGVF9GSUxFTkFNRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeyAvLyBSaWdodCBpcyB0aGUgZGVmYXVsdCBpZiBubyBoYW5k
IGlzIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gV2luZG93c01vdGlvbkNv
bnRyb2xsZXIuTU9ERUxfUklHSFRfRklMRU5BTUU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBwYXRoID0gV2luZG93c01vdGlvbkNvbnRyb2xsZXIuTU9ERUxfQkFTRV9VUkwgKyBkZXZpY2Ug
KyAnLyc7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uV2FybigiWW91IG5lZWQg
dG8gcmVmZXJlbmNlIEdMVEYgbG9hZGVyIHRvIGxvYWQgV2luZG93cyBNb3Rpb24gQ29udHJvbGxl
cnMgbW9kZWwuIEZhbGxpbmcgYmFjayB0byBnZW5lcmljIG1vZGVscyIpOworICAgICAgICAgICAg
cGF0aCA9IF9nZW5lcmljQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJH
ZW5lcmljQ29udHJvbGxlciJdLk1PREVMX0JBU0VfVVJMOworICAgICAgICAgICAgZmlsZW5hbWUg
PSBfZ2VuZXJpY0NvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siR2VuZXJp
Y0NvbnRyb2xsZXIiXS5NT0RFTF9GSUxFTkFNRTsKKyAgICAgICAgfQorICAgICAgICBfTG9hZGlu
Z19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTY2VuZUxvYWRlciJd
LkltcG9ydE1lc2goIiIsIHBhdGgsIGZpbGVuYW1lLCBzY2VuZSwgZnVuY3Rpb24gKG1lc2hlcykg
eworICAgICAgICAgICAgLy8gZ2xURiBmaWxlcyBzdWNjZXNzZnVsbHkgbG9hZGVkIGZyb20gdGhl
IHJlbW90ZSBzZXJ2ZXIsIG5vdyBwcm9jZXNzIHRoZW0gdG8gZW5zdXJlIHRoZXkgYXJlIGluIHRo
ZSByaWdodCBmb3JtYXQuCisgICAgICAgICAgICBfdGhpcy5fbG9hZGVkTWVzaEluZm8gPSBfdGhp
cy5wcm9jZXNzTW9kZWwoc2NlbmUsIG1lc2hlcyk7CisgICAgICAgICAgICBpZiAoIV90aGlzLl9s
b2FkZWRNZXNoSW5mbykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIF90aGlzLl9kZWZhdWx0TW9kZWwgPSBfdGhpcy5fbG9hZGVkTWVzaEluZm8u
cm9vdE5vZGU7CisgICAgICAgICAgICBfdGhpcy5hdHRhY2hUb01lc2goX3RoaXMuX2RlZmF1bHRN
b2RlbCk7CisgICAgICAgICAgICBpZiAobWVzaExvYWRlZCkgeworICAgICAgICAgICAgICAgIG1l
c2hMb2FkZWQoX3RoaXMuX2RlZmF1bHRNb2RlbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
IG51bGwsIGZ1bmN0aW9uIChzY2VuZSwgbWVzc2FnZSkgeworICAgICAgICAgICAgX01pc2NfbG9n
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkxvZyhtZXNzYWdlKTsK
KyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJM
b2dnZXIiXS5XYXJuKCdGYWlsZWQgdG8gcmV0cmlldmUgY29udHJvbGxlciBtb2RlbCBmcm9tIHRo
ZSByZW1vdGUgc2VydmVyOiAnICsgcGF0aCArIGZpbGVuYW1lKTsKKyAgICAgICAgICAgIGlmICgh
Zm9yY2VEZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgX3RoaXMuaW5pdENvbnRyb2xsZXJNZXNo
KHNjZW5lLCBtZXNoTG9hZGVkLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBUYWtlcyBhIGxpc3Qgb2YgbWVzaGVzIChhcyBsb2FkZWQg
ZnJvbSB0aGUgZ2xURiBmaWxlKSBhbmQgZmluZHMgdGhlIHJvb3Qgbm9kZSwgYXMgd2VsbCBhcyBu
b2RlcyB0aGF0CisgICAgICogY2FuIGJlIHRyYW5zZm9ybWVkIGJ5IGJ1dHRvbiBwcmVzc2VzIGFu
ZCBheGVzIHZhbHVlcywgYmFzZWQgb24gdGhpcy5fbWFwcGluZy4KKyAgICAgKgorICAgICAqIEBw
YXJhbSBzY2VuZSBzY2VuZSBpbiB3aGljaCB0aGUgbWVzaGVzIGV4aXN0CisgICAgICogQHBhcmFt
IG1lc2hlcyBsaXN0IG9mIG1lc2hlcyB0aGF0IG1ha2UgdXAgdGhlIGNvbnRyb2xsZXIgbW9kZWwg
dG8gcHJvY2VzcworICAgICAqIEByZXR1cm4gc3RydWN0dXJlZCB2aWV3IG9mIHRoZSBnaXZlbiBt
ZXNoZXMsIHdpdGggbWFwcGluZyBvZiBidXR0b25zIGFuZCBheGVzIHRvIG1lc2hlcyB0aGF0IGNh
biBiZSB0cmFuc2Zvcm1lZC4KKyAgICAgKi8KKyAgICBXaW5kb3dzTW90aW9uQ29udHJvbGxlci5w
cm90b3R5cGUucHJvY2Vzc01vZGVsID0gZnVuY3Rpb24gKHNjZW5lLCBtZXNoZXMpIHsKKyAgICAg
ICAgdmFyIGxvYWRlZE1lc2hJbmZvID0gbnVsbDsKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG1l
c2ggdG8gY29udGFpbiB0aGUgZ2xURiBoaWVyYXJjaHkKKyAgICAgICAgdmFyIHBhcmVudE1lc2gg
PSBuZXcgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1lc2giXSh0
aGlzLmlkICsgIiAiICsgdGhpcy5oYW5kLCBzY2VuZSk7CisgICAgICAgIC8vIEZpbmQgdGhlIHJv
b3Qgbm9kZSBpbiB0aGUgbG9hZGVkIGdsVEYgc2NlbmUsIGFuZCBhdHRhY2ggaXQgYXMgYSBjaGls
ZCBvZiAncGFyZW50TWVzaCcKKyAgICAgICAgdmFyIGNoaWxkTWVzaCA9IG51bGw7CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbWVzaGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2
YXIgbWVzaCA9IG1lc2hlc1tpXTsKKyAgICAgICAgICAgIGlmICghbWVzaC5wYXJlbnQpIHsKKyAg
ICAgICAgICAgICAgICAvLyBFeGNsdWRlIGNvbnRyb2xsZXIgbWVzaGVzIGZyb20gcGlja2luZyBy
ZXN1bHRzCisgICAgICAgICAgICAgICAgbWVzaC5pc1BpY2thYmxlID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgLy8gSGFuZGxlIHJvb3Qgbm9kZSwgYXR0YWNoIHRvIHRoZSBuZXcgcGFyZW50TWVz
aAorICAgICAgICAgICAgICAgIGNoaWxkTWVzaCA9IG1lc2g7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoaWxkTWVzaCkgewor
ICAgICAgICAgICAgY2hpbGRNZXNoLnNldFBhcmVudChwYXJlbnRNZXNoKTsKKyAgICAgICAgICAg
IC8vIENyZWF0ZSBvdXIgbWVzaCBpbmZvLiBOb3RlIHRoYXQgdGhpcyBtZXRob2Qgd2lsbCBhbHdh
eXMgcmV0dXJuIG5vbi1udWxsLgorICAgICAgICAgICAgbG9hZGVkTWVzaEluZm8gPSB0aGlzLmNy
ZWF0ZU1lc2hJbmZvKHBhcmVudE1lc2gpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dl
ciJdLldhcm4oJ0NvdWxkIG5vdCBmaW5kIHJvb3Qgbm9kZSBpbiBtb2RlbCBmaWxlLicpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBsb2FkZWRNZXNoSW5mbzsKKyAgICB9OworICAgIFdpbmRv
d3NNb3Rpb25Db250cm9sbGVyLnByb3RvdHlwZS5jcmVhdGVNZXNoSW5mbyA9IGZ1bmN0aW9uIChy
b290Tm9kZSkgeworICAgICAgICB2YXIgbG9hZGVkTWVzaEluZm8gPSBuZXcgTG9hZGVkTWVzaElu
Zm8oKTsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIGxvYWRlZE1lc2hJbmZvLnJvb3ROb2RlID0g
cm9vdE5vZGU7CisgICAgICAgIC8vIFJlc2V0IHRoZSBjYWNoZXMKKyAgICAgICAgbG9hZGVkTWVz
aEluZm8uYnV0dG9uTWVzaGVzID0ge307CisgICAgICAgIGxvYWRlZE1lc2hJbmZvLmF4aXNNZXNo
ZXMgPSB7fTsKKyAgICAgICAgLy8gQnV0dG9uIE1lc2hlcworICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgdGhpcy5fbWFwcGluZy5idXR0b25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIg
YnV0dG9uTWVzaE5hbWUgPSB0aGlzLl9tYXBwaW5nLmJ1dHRvbk1lc2hOYW1lc1t0aGlzLl9tYXBw
aW5nLmJ1dHRvbnNbaV1dOworICAgICAgICAgICAgaWYgKCFidXR0b25NZXNoTmFtZSkgeworICAg
ICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJM
b2dnZXIiXS5Mb2coJ1NraXBwaW5nIHVua25vd24gYnV0dG9uIGF0IGluZGV4OiAnICsgaSArICcg
d2l0aCBtYXBwZWQgbmFtZTogJyArIHRoaXMuX21hcHBpbmcuYnV0dG9uc1tpXSk7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYnV0dG9u
TWVzaCA9IGdldENoaWxkQnlOYW1lKHJvb3ROb2RlLCBidXR0b25NZXNoTmFtZSk7CisgICAgICAg
ICAgICBpZiAoIWJ1dHRvbk1lc2gpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uV2FybignTWlzc2luZyBidXR0b24g
bWVzaCB3aXRoIG5hbWU6ICcgKyBidXR0b25NZXNoTmFtZSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYnV0dG9uTWVzaEluZm8gPSB7
CisgICAgICAgICAgICAgICAgaW5kZXg6IGksCisgICAgICAgICAgICAgICAgdmFsdWU6IGdldElt
bWVkaWF0ZUNoaWxkQnlOYW1lKGJ1dHRvbk1lc2gsICdWQUxVRScpLAorICAgICAgICAgICAgICAg
IHByZXNzZWQ6IGdldEltbWVkaWF0ZUNoaWxkQnlOYW1lKGJ1dHRvbk1lc2gsICdQUkVTU0VEJyks
CisgICAgICAgICAgICAgICAgdW5wcmVzc2VkOiBnZXRJbW1lZGlhdGVDaGlsZEJ5TmFtZShidXR0
b25NZXNoLCAnVU5QUkVTU0VEJykKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoYnV0
dG9uTWVzaEluZm8udmFsdWUgJiYgYnV0dG9uTWVzaEluZm8ucHJlc3NlZCAmJiBidXR0b25NZXNo
SW5mby51bnByZXNzZWQpIHsKKyAgICAgICAgICAgICAgICBsb2FkZWRNZXNoSW5mby5idXR0b25N
ZXNoZXNbdGhpcy5fbWFwcGluZy5idXR0b25zW2ldXSA9IGJ1dHRvbk1lc2hJbmZvOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlk
bid0IGZpbmQgdGhlIG1lc2gsIGl0IHNpbXBseSBtZWFucyB0aGlzIGJ1dHRvbiB3b24ndCBoYXZl
IHRyYW5zZm9ybXMgYXBwbGllZCBhcyBtYXBwZWQgYnV0dG9uIHZhbHVlIGNoYW5nZXMuCisgICAg
ICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxv
Z2dlciJdLldhcm4oJ01pc3NpbmcgYnV0dG9uIHN1Ym1lc2ggdW5kZXIgbWVzaCB3aXRoIG5hbWU6
ICcgKyBidXR0b25NZXNoTmFtZSArCisgICAgICAgICAgICAgICAgICAgICcoVkFMVUU6ICcgKyAh
IWJ1dHRvbk1lc2hJbmZvLnZhbHVlICsKKyAgICAgICAgICAgICAgICAgICAgJywgUFJFU1NFRDog
JyArICEhYnV0dG9uTWVzaEluZm8ucHJlc3NlZCArCisgICAgICAgICAgICAgICAgICAgICcsIFVO
UFJFU1NFRDonICsgISFidXR0b25NZXNoSW5mby51bnByZXNzZWQgKworICAgICAgICAgICAgICAg
ICAgICAnKScpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEF4aXMgTWVz
aGVzCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLl9tYXBwaW5nLmF4aXNNZXNoTmFtZXMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBheGlzTWVzaE5hbWUgPSB0aGlzLl9tYXBw
aW5nLmF4aXNNZXNoTmFtZXNbaV07CisgICAgICAgICAgICBpZiAoIWF4aXNNZXNoTmFtZSkgewor
ICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJMb2dnZXIiXS5Mb2coJ1NraXBwaW5nIHVua25vd24gYXhpcyBhdCBpbmRleDogJyArIGkpOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFy
IGF4aXNNZXNoID0gZ2V0Q2hpbGRCeU5hbWUocm9vdE5vZGUsIGF4aXNNZXNoTmFtZSk7CisgICAg
ICAgICAgICBpZiAoIWF4aXNNZXNoKSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4oJ01pc3NpbmcgYXhpcyBt
ZXNoIHdpdGggbmFtZTogJyArIGF4aXNNZXNoTmFtZSk7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYXhpc01lc2hJbmZvID0geworICAg
ICAgICAgICAgICAgIGluZGV4OiBpLAorICAgICAgICAgICAgICAgIHZhbHVlOiBnZXRJbW1lZGlh
dGVDaGlsZEJ5TmFtZShheGlzTWVzaCwgJ1ZBTFVFJyksCisgICAgICAgICAgICAgICAgbWluOiBn
ZXRJbW1lZGlhdGVDaGlsZEJ5TmFtZShheGlzTWVzaCwgJ01JTicpLAorICAgICAgICAgICAgICAg
IG1heDogZ2V0SW1tZWRpYXRlQ2hpbGRCeU5hbWUoYXhpc01lc2gsICdNQVgnKQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGlmIChheGlzTWVzaEluZm8udmFsdWUgJiYgYXhpc01lc2hJbmZv
Lm1pbiAmJiBheGlzTWVzaEluZm8ubWF4KSB7CisgICAgICAgICAgICAgICAgbG9hZGVkTWVzaElu
Zm8uYXhpc01lc2hlc1tpXSA9IGF4aXNNZXNoSW5mbzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIHRoZSBtZXNo
LCBpdCBzaW1wbHkgbWVhbnMgdGhpdCBheGlzIHdvbid0IGhhdmUgdHJhbnNmb3JtcyBhcHBsaWVk
IGFzIG1hcHBlZCBheGlzIHZhbHVlcyBjaGFuZ2UuCisgICAgICAgICAgICAgICAgX01pc2NfbG9n
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4oJ01pc3Npbmcg
YXhpcyBzdWJtZXNoIHVuZGVyIG1lc2ggd2l0aCBuYW1lOiAnICsgYXhpc01lc2hOYW1lICsKKyAg
ICAgICAgICAgICAgICAgICAgJyhWQUxVRTogJyArICEhYXhpc01lc2hJbmZvLnZhbHVlICsKKyAg
ICAgICAgICAgICAgICAgICAgJywgTUlOOiAnICsgISFheGlzTWVzaEluZm8ubWluICsKKyAgICAg
ICAgICAgICAgICAgICAgJywgTUFYOicgKyAhIWF4aXNNZXNoSW5mby5tYXggKworICAgICAgICAg
ICAgICAgICAgICAnKScpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFBv
aW50aW5nIFJheQorICAgICAgICBsb2FkZWRNZXNoSW5mby5wb2ludGluZ1Bvc2VOb2RlID0gZ2V0
Q2hpbGRCeU5hbWUocm9vdE5vZGUsIHRoaXMuX21hcHBpbmcucG9pbnRpbmdQb3NlTWVzaE5hbWUp
OworICAgICAgICBpZiAoIWxvYWRlZE1lc2hJbmZvLnBvaW50aW5nUG9zZU5vZGUpIHsKKyAgICAg
ICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIi
XS5XYXJuKCdNaXNzaW5nIHBvaW50aW5nIHBvc2UgbWVzaCB3aXRoIG5hbWU6ICcgKyB0aGlzLl9t
YXBwaW5nLnBvaW50aW5nUG9zZU1lc2hOYW1lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHRoaXMuX3BvaW50aW5nUG9zZU5vZGUgPSBsb2FkZWRNZXNoSW5mby5wb2lu
dGluZ1Bvc2VOb2RlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsb2FkZWRNZXNoSW5mbzsK
KyAgICAgICAgLy8gTG9vayB0aHJvdWdoIGFsbCBjaGlsZHJlbiByZWN1cnNpdmVseS4gVGhpcyB3
aWxsIHJldHVybiBudWxsIGlmIG5vIG1lc2ggZXhpc3RzIHdpdGggdGhlIGdpdmVuIG5hbWUuCisg
ICAgICAgIGZ1bmN0aW9uIGdldENoaWxkQnlOYW1lKG5vZGUsIG5hbWUpIHsKKyAgICAgICAgICAg
IHJldHVybiBub2RlLmdldENoaWxkcmVuKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuLm5hbWUgPT09
IG5hbWU7IH0sIGZhbHNlKVswXTsKKyAgICAgICAgfQorICAgICAgICAvLyBMb29rIHRocm91Z2gg
b25seSBpbW1lZGlhdGUgY2hpbGRyZW4uIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiBubyBtZXNo
IGV4aXN0cyB3aXRoIHRoZSBnaXZlbiBuYW1lLgorICAgICAgICBmdW5jdGlvbiBnZXRJbW1lZGlh
dGVDaGlsZEJ5TmFtZShub2RlLCBuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5nZXRD
aGlsZHJlbihmdW5jdGlvbiAobikgeyByZXR1cm4gbi5uYW1lID09IG5hbWU7IH0sIHRydWUpWzBd
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByYXkgb2YgdGhl
IGNvbnRyb2xsZXIgaW4gdGhlIGRpcmVjdGlvbiB0aGUgY29udHJvbGxlciBpcyBwb2ludGluZwor
ICAgICAqIEBwYXJhbSBsZW5ndGggdGhlIGxlbmd0aCB0aGUgcmVzdWx0aW5nIHJheSBzaG91bGQg
YmUKKyAgICAgKiBAcmV0dXJucyBhIHJheSBpbiB0aGUgZGlyZWN0aW9uIHRoZSBjb250cm9sbGVy
IGlzIHBvaW50aW5nCisgICAgICovCisgICAgV2luZG93c01vdGlvbkNvbnRyb2xsZXIucHJvdG90
eXBlLmdldEZvcndhcmRSYXkgPSBmdW5jdGlvbiAobGVuZ3RoKSB7CisgICAgICAgIGlmIChsZW5n
dGggPT09IHZvaWQgMCkgeyBsZW5ndGggPSAxMDA7IH0KKyAgICAgICAgaWYgKCEodGhpcy5fbG9h
ZGVkTWVzaEluZm8gJiYgdGhpcy5fbG9hZGVkTWVzaEluZm8ucG9pbnRpbmdQb3NlTm9kZSkpIHsK
KyAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldEZvcndhcmRSYXkuY2FsbCh0
aGlzLCBsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIHZhciBtID0gdGhpcy5fbG9hZGVkTWVz
aEluZm8ucG9pbnRpbmdQb3NlTm9kZS5nZXRXb3JsZE1hdHJpeCgpOworICAgICAgICB2YXIgb3Jp
Z2luID0gbS5nZXRUcmFuc2xhdGlvbigpOworICAgICAgICB2YXIgZm9yd2FyZCA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAs
IDAsIC0xKTsKKyAgICAgICAgdmFyIGZvcndhcmRXb3JsZCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKGZv
cndhcmQsIG0pOworICAgICAgICB2YXIgZGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5Ob3JtYWxpemUoZm9yd2FyZFdv
cmxkKTsKKyAgICAgICAgcmV0dXJuIG5ldyBfQ3VsbGluZ19yYXlfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siUmF5Il0ob3JpZ2luLCBkaXJlY3Rpb24sIGxlbmd0aCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAqIERpc3Bvc2VzIG9mIHRoZSBjb250cm9sbGVyCisgICAgKi8KKyAgICBXaW5k
b3dzTW90aW9uQ29udHJvbGxlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7CisgICAgICAgIHRoaXMu
b25UcmFja3BhZENoYW5nZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBUaGUgYmFzZSB1cmwgdXNlZCB0byBsb2FkIHRoZSBsZWZ0IGFuZCByaWdodCBjb250cm9s
bGVyIG1vZGVscworICAgICAqLworICAgIFdpbmRvd3NNb3Rpb25Db250cm9sbGVyLk1PREVMX0JB
U0VfVVJMID0gJ2h0dHBzOi8vY29udHJvbGxlcnMuYmFieWxvbmpzLmNvbS9taWNyb3NvZnQvJzsK
KyAgICAvKioKKyAgICAgKiBUaGUgbmFtZSBvZiB0aGUgbGVmdCBjb250cm9sbGVyIG1vZGVsIGZp
bGUKKyAgICAgKi8KKyAgICBXaW5kb3dzTW90aW9uQ29udHJvbGxlci5NT0RFTF9MRUZUX0ZJTEVO
QU1FID0gJ2xlZnQuZ2xiJzsKKyAgICAvKioKKyAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcmlnaHQg
Y29udHJvbGxlciBtb2RlbCBmaWxlCisgICAgICovCisgICAgV2luZG93c01vdGlvbkNvbnRyb2xs
ZXIuTU9ERUxfUklHSFRfRklMRU5BTUUgPSAncmlnaHQuZ2xiJzsKKyAgICAvKioKKyAgICAgKiBU
aGUgY29udHJvbGxlciBuYW1lIHByZWZpeCBmb3IgdGhpcyBjb250cm9sbGVyIHR5cGUKKyAgICAg
Ki8KKyAgICBXaW5kb3dzTW90aW9uQ29udHJvbGxlci5HQU1FUEFEX0lEX1BSRUZJWCA9ICdTcGF0
aWFsIENvbnRyb2xsZXIgKFNwYXRpYWwgSW50ZXJhY3Rpb24gU291cmNlKSAnOworICAgIC8qKgor
ICAgICAqIFRoZSBjb250cm9sbGVyIGlkIHBhdHRlcm4gZm9yIHRoaXMgY29udHJvbGxlciB0eXBl
CisgICAgICovCisgICAgV2luZG93c01vdGlvbkNvbnRyb2xsZXIuR0FNRVBBRF9JRF9QQVRURVJO
ID0gLyhbMC05YS16QS1aXSstWzAtOWEtekEtWl0rKSQvOworICAgIHJldHVybiBXaW5kb3dzTW90
aW9uQ29udHJvbGxlcjsKK30oX3dlYlZSQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJXZWJWUkNvbnRyb2xsZXIiXSkpOworCitfcG9zZUVuYWJsZWRDb250cm9sbGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlciJd
Ll9Db250cm9sbGVyRmFjdG9yaWVzLnB1c2goeworICAgIGNhbkNyZWF0ZTogZnVuY3Rpb24gKGdh
bWVwYWRJbmZvKSB7CisgICAgICAgIHJldHVybiBnYW1lcGFkSW5mby5pZC5pbmRleE9mKFdpbmRv
d3NNb3Rpb25Db250cm9sbGVyLkdBTUVQQURfSURfUFJFRklYKSA9PT0gMDsKKyAgICB9LAorICAg
IGNyZWF0ZTogZnVuY3Rpb24gKGdhbWVwYWRJbmZvKSB7CisgICAgICAgIHJldHVybiBuZXcgV2lu
ZG93c01vdGlvbkNvbnRyb2xsZXIoZ2FtZXBhZEluZm8pOworICAgIH0KK30pOworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9HYW1lcGFkcy9kdWFsU2hvY2tHYW1lcGFkLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HYW1lcGFkcy9k
dWFsU2hvY2tHYW1lcGFkLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IER1YWxTaG9ja0J1dHRvbiwgRHVhbFNo
b2NrRHBhZCwgRHVhbFNob2NrUGFkICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkR1YWxTaG9ja0J1dHRvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRHVhbFNob2NrQnV0dG9u
OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkR1YWxTaG9ja0RwYWQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIER1YWxTaG9ja0RwYWQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRHVhbFNob2NrUGFkIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBEdWFsU2hvY2tQYWQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2
YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfZ2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9nYW1lcGFkICovICIuL0dhbWVwYWRzL2dhbWVwYWQudHMiKTsKKworCisKKy8q
KgorICogRGVmaW5lcyBzdXBwb3J0ZWQgYnV0dG9ucyBmb3IgRHVhbFNob2NrIGNvbXBhdGlibGUg
Z2FtZXBhZHMKKyAqLwordmFyIER1YWxTaG9ja0J1dHRvbjsKKyhmdW5jdGlvbiAoRHVhbFNob2Nr
QnV0dG9uKSB7CisgICAgLyoqIENyb3NzICovCisgICAgRHVhbFNob2NrQnV0dG9uW0R1YWxTaG9j
a0J1dHRvblsiQ3Jvc3MiXSA9IDBdID0gIkNyb3NzIjsKKyAgICAvKiogQ2lyY2xlICovCisgICAg
RHVhbFNob2NrQnV0dG9uW0R1YWxTaG9ja0J1dHRvblsiQ2lyY2xlIl0gPSAxXSA9ICJDaXJjbGUi
OworICAgIC8qKiBTcXVhcmUgKi8KKyAgICBEdWFsU2hvY2tCdXR0b25bRHVhbFNob2NrQnV0dG9u
WyJTcXVhcmUiXSA9IDJdID0gIlNxdWFyZSI7CisgICAgLyoqIFRyaWFuZ2xlICovCisgICAgRHVh
bFNob2NrQnV0dG9uW0R1YWxTaG9ja0J1dHRvblsiVHJpYW5nbGUiXSA9IDNdID0gIlRyaWFuZ2xl
IjsKKyAgICAvKiogT3B0aW9ucyAqLworICAgIER1YWxTaG9ja0J1dHRvbltEdWFsU2hvY2tCdXR0
b25bIk9wdGlvbnMiXSA9IDRdID0gIk9wdGlvbnMiOworICAgIC8qKiBTaGFyZSAqLworICAgIER1
YWxTaG9ja0J1dHRvbltEdWFsU2hvY2tCdXR0b25bIlNoYXJlIl0gPSA1XSA9ICJTaGFyZSI7Cisg
ICAgLyoqIEwxICovCisgICAgRHVhbFNob2NrQnV0dG9uW0R1YWxTaG9ja0J1dHRvblsiTDEiXSA9
IDZdID0gIkwxIjsKKyAgICAvKiogUjEgKi8KKyAgICBEdWFsU2hvY2tCdXR0b25bRHVhbFNob2Nr
QnV0dG9uWyJSMSJdID0gN10gPSAiUjEiOworICAgIC8qKiBMZWZ0IHN0aWNrICovCisgICAgRHVh
bFNob2NrQnV0dG9uW0R1YWxTaG9ja0J1dHRvblsiTGVmdFN0aWNrIl0gPSA4XSA9ICJMZWZ0U3Rp
Y2siOworICAgIC8qKiBSaWdodCBzdGljayAqLworICAgIER1YWxTaG9ja0J1dHRvbltEdWFsU2hv
Y2tCdXR0b25bIlJpZ2h0U3RpY2siXSA9IDldID0gIlJpZ2h0U3RpY2siOworfSkoRHVhbFNob2Nr
QnV0dG9uIHx8IChEdWFsU2hvY2tCdXR0b24gPSB7fSkpOworLyoqIERlZmluZXMgdmFsdWVzIGZv
ciBEdWFsU2hvY2sgRFBhZCAgKi8KK3ZhciBEdWFsU2hvY2tEcGFkOworKGZ1bmN0aW9uIChEdWFs
U2hvY2tEcGFkKSB7CisgICAgLyoqIFVwICovCisgICAgRHVhbFNob2NrRHBhZFtEdWFsU2hvY2tE
cGFkWyJVcCJdID0gMF0gPSAiVXAiOworICAgIC8qKiBEb3duICovCisgICAgRHVhbFNob2NrRHBh
ZFtEdWFsU2hvY2tEcGFkWyJEb3duIl0gPSAxXSA9ICJEb3duIjsKKyAgICAvKiogTGVmdCAqLwor
ICAgIER1YWxTaG9ja0RwYWRbRHVhbFNob2NrRHBhZFsiTGVmdCJdID0gMl0gPSAiTGVmdCI7Cisg
ICAgLyoqIFJpZ2h0ICovCisgICAgRHVhbFNob2NrRHBhZFtEdWFsU2hvY2tEcGFkWyJSaWdodCJd
ID0gM10gPSAiUmlnaHQiOworfSkoRHVhbFNob2NrRHBhZCB8fCAoRHVhbFNob2NrRHBhZCA9IHt9
KSk7CisvKioKKyAqIERlZmluZXMgYSBEdWFsU2hvY2sgZ2FtZXBhZAorICovCit2YXIgRHVhbFNo
b2NrUGFkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKER1YWxTaG9ja1BhZCwgX3N1
cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IER1YWxTaG9jayBnYW1lcGFkIG9i
amVjdAorICAgICAqIEBwYXJhbSBpZCBkZWZpbmVzIHRoZSBpZCBvZiB0aGlzIGdhbWVwYWQKKyAg
ICAgKiBAcGFyYW0gaW5kZXggZGVmaW5lcyBpdHMgaW5kZXgKKyAgICAgKiBAcGFyYW0gZ2FtZXBh
ZCBkZWZpbmVzIHRoZSBpbnRlcm5hbCBIVE1MIGdhbWVwYWQgb2JqZWN0CisgICAgICovCisgICAg
ZnVuY3Rpb24gRHVhbFNob2NrUGFkKGlkLCBpbmRleCwgZ2FtZXBhZCkgeworICAgICAgICB2YXIg
X3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBpZC5yZXBsYWNlKCJTVEFOREFSRCBHQU1FUEFEIiwg
IlNPTlkgUExBWVNUQVRJT04gRFVBTFNIT0NLIiksIGluZGV4LCBnYW1lcGFkLCAwLCAxLCAyLCAz
KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fbGVmdFRyaWdnZXIgPSAwOworICAgICAgICBfdGhp
cy5fcmlnaHRUcmlnZ2VyID0gMDsKKyAgICAgICAgLyoqIE9ic2VydmFibGUgcmFpc2VkIHdoZW4g
YSBidXR0b24gaXMgcHJlc3NlZCAqLworICAgICAgICBfdGhpcy5vbkJ1dHRvbkRvd25PYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKiBPYnNlcnZhYmxlIHJhaXNlZCB3aGVuIGEgYnV0
dG9uIGlzIHJlbGVhc2VkICovCisgICAgICAgIF90aGlzLm9uQnV0dG9uVXBPYnNlcnZhYmxlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgICAgIC8qKiBPYnNlcnZhYmxlIHJhaXNlZCB3aGVuIGEgcGFkIGlzIHBy
ZXNzZWQgKi8KKyAgICAgICAgX3RoaXMub25QYWREb3duT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOwor
ICAgICAgICAvKiogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiBhIHBhZCBpcyByZWxlYXNlZCAqLwor
ICAgICAgICBfdGhpcy5vblBhZFVwT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhp
cy5fYnV0dG9uQ3Jvc3MgPSAwOworICAgICAgICBfdGhpcy5fYnV0dG9uQ2lyY2xlID0gMDsKKyAg
ICAgICAgX3RoaXMuX2J1dHRvblNxdWFyZSA9IDA7CisgICAgICAgIF90aGlzLl9idXR0b25Ucmlh
bmdsZSA9IDA7CisgICAgICAgIF90aGlzLl9idXR0b25TaGFyZSA9IDA7CisgICAgICAgIF90aGlz
Ll9idXR0b25PcHRpb25zID0gMDsKKyAgICAgICAgX3RoaXMuX2J1dHRvbkwxID0gMDsKKyAgICAg
ICAgX3RoaXMuX2J1dHRvblIxID0gMDsKKyAgICAgICAgX3RoaXMuX2J1dHRvbkxlZnRTdGljayA9
IDA7CisgICAgICAgIF90aGlzLl9idXR0b25SaWdodFN0aWNrID0gMDsKKyAgICAgICAgX3RoaXMu
X2RQYWRVcCA9IDA7CisgICAgICAgIF90aGlzLl9kUGFkRG93biA9IDA7CisgICAgICAgIF90aGlz
Ll9kUGFkTGVmdCA9IDA7CisgICAgICAgIF90aGlzLl9kUGFkUmlnaHQgPSAwOworICAgICAgICBf
dGhpcy50eXBlID0gX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR2FtZXBh
ZCJdLkRVQUxTSE9DSzsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gbGVmdCB0cmlnZ2VyIGlzIHBy
ZXNzZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdXNl
CisgICAgICovCisgICAgRHVhbFNob2NrUGFkLnByb3RvdHlwZS5vbmxlZnR0cmlnZ2VyY2hhbmdl
ZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9vbmxlZnR0cmlnZ2VyY2hh
bmdlZCA9IGNhbGxiYWNrOworICAgIH07CisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgY2Fs
bGJhY2sgdG8gY2FsbCB3aGVuIHJpZ2h0IHRyaWdnZXIgaXMgcHJlc3NlZAorICAgICAqIEBwYXJh
bSBjYWxsYmFjayBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byB1c2UKKyAgICAgKi8KKyAgICBEdWFs
U2hvY2tQYWQucHJvdG90eXBlLm9ucmlnaHR0cmlnZ2VyY2hhbmdlZCA9IGZ1bmN0aW9uIChjYWxs
YmFjaykgeworICAgICAgICB0aGlzLl9vbnJpZ2h0dHJpZ2dlcmNoYW5nZWQgPSBjYWxsYmFjazsK
KyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hvY2tQYWQucHJvdG90eXBl
LCAibGVmdFRyaWdnZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBsZWZ0
IHRyaWdnZXIgdmFsdWUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRUcmlnZ2VyOworICAgICAgICB9LAorICAgICAg
ICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgbGVmdCB0cmlnZ2VyIHZhbHVlCisgICAgICAgICAq
LworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuX29ubGVmdHRyaWdnZXJjaGFuZ2VkICYmIHRoaXMuX2xlZnRUcmlnZ2VyICE9PSBuZXdWYWx1
ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX29ubGVmdHRyaWdnZXJjaGFuZ2VkKG5ld1ZhbHVl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2xlZnRUcmlnZ2VyID0gbmV3VmFs
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hv
Y2tQYWQucHJvdG90eXBlLCAicmlnaHRUcmlnZ2VyIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgcmlnaHQgdHJpZ2dlciB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmlnaHRUcmlnZ2VyOwor
ICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgcmlnaHQgdHJpZ2dl
ciB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl9vbnJpZ2h0dHJpZ2dlcmNoYW5nZWQgJiYgdGhpcy5fcmln
aHRUcmlnZ2VyICE9PSBuZXdWYWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX29ucmlnaHR0
cmlnZ2VyY2hhbmdlZChuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9yaWdodFRyaWdnZXIgPSBuZXdWYWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisg
ICAgICogRGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIGEgYnV0dG9uIGlzIHByZXNz
ZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdXNlCisg
ICAgICovCisgICAgRHVhbFNob2NrUGFkLnByb3RvdHlwZS5vbmJ1dHRvbmRvd24gPSBmdW5jdGlv
biAoY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5fb25idXR0b25kb3duID0gY2FsbGJhY2s7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4g
YSBidXR0b24gaXMgcmVsZWFzZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgZGVmaW5lcyB0aGUg
Y2FsbGJhY2sgdG8gdXNlCisgICAgICovCisgICAgRHVhbFNob2NrUGFkLnByb3RvdHlwZS5vbmJ1
dHRvbnVwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgIHRoaXMuX29uYnV0dG9udXAg
PSBjYWxsYmFjazsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGNhbGxiYWNr
IHRvIGNhbGwgd2hlbiBhIHBhZCBpcyBwcmVzc2VkCisgICAgICogQHBhcmFtIGNhbGxiYWNrIGRl
ZmluZXMgdGhlIGNhbGxiYWNrIHRvIHVzZQorICAgICAqLworICAgIER1YWxTaG9ja1BhZC5wcm90
b3R5cGUub25kcGFkZG93biA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9v
bmRwYWRkb3duID0gY2FsbGJhY2s7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRo
ZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gYSBwYWQgaXMgcmVsZWFzZWQKKyAgICAgKiBAcGFyYW0g
Y2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdXNlCisgICAgICovCisgICAgRHVhbFNo
b2NrUGFkLnByb3RvdHlwZS5vbmRwYWR1cCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAg
ICB0aGlzLl9vbmRwYWR1cCA9IGNhbGxiYWNrOworICAgIH07CisgICAgRHVhbFNob2NrUGFkLnBy
b3RvdHlwZS5fc2V0QnV0dG9uVmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUsIGN1cnJlbnRWYWx1
ZSwgYnV0dG9uVHlwZSkgeworICAgICAgICBpZiAobmV3VmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkg
eworICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSAxKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRoaXMuX29uYnV0dG9uZG93bikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbmJ1dHRv
bmRvd24oYnV0dG9uVHlwZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRo
aXMub25CdXR0b25Eb3duT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoYnV0dG9uVHlwZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IDApIHsKKyAgICAgICAg
ICAgICAgICBpZiAodGhpcy5fb25idXR0b251cCkgeworICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9vbmJ1dHRvbnVwKGJ1dHRvblR5cGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB0aGlzLm9uQnV0dG9uVXBPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhidXR0b25UeXBl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3VmFsdWU7Cisg
ICAgfTsKKyAgICBEdWFsU2hvY2tQYWQucHJvdG90eXBlLl9zZXREUGFkVmFsdWUgPSBmdW5jdGlv
biAobmV3VmFsdWUsIGN1cnJlbnRWYWx1ZSwgYnV0dG9uVHlwZSkgeworICAgICAgICBpZiAobmV3
VmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkgeworICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSAx
KSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29uZHBhZGRvd24pIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fb25kcGFkZG93bihidXR0b25UeXBlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdGhpcy5vblBhZERvd25PYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyhidXR0b25UeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9
PT0gMCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vbmRwYWR1cCkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9vbmRwYWR1cChidXR0b25UeXBlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdGhpcy5vblBhZFVwT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMo
YnV0dG9uVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5l
d1ZhbHVlOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KER1YWxTaG9ja1BhZC5w
cm90b3R5cGUsICJidXR0b25Dcm9zcyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
dGhlIHZhbHVlIG9mIHRoZSBgQ3Jvc3NgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uQ3Jvc3M7Cisg
ICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUg
YENyb3NzYCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9idXR0b25Dcm9zcyA9IHRoaXMuX3NldEJ1dHRvblZhbHVl
KHZhbHVlLCB0aGlzLl9idXR0b25Dcm9zcywgRHVhbFNob2NrQnV0dG9uLkNyb3NzKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KER1YWxTaG9ja1BhZC5wcm90
b3R5cGUsICJidXR0b25DaXJjbGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSB2YWx1ZSBvZiB0aGUgYENpcmNsZWAgYnV0dG9uCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9idXR0b25DaXJjbGU7Cisg
ICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUg
YENpcmNsZWAgYnV0dG9uCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdGhpcy5fYnV0dG9uQ2lyY2xlID0gdGhpcy5fc2V0QnV0dG9uVmFs
dWUodmFsdWUsIHRoaXMuX2J1dHRvbkNpcmNsZSwgRHVhbFNob2NrQnV0dG9uLkNpcmNsZSk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hvY2tQYWQu
cHJvdG90eXBlLCAiYnV0dG9uU3F1YXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgdmFsdWUgb2YgdGhlIGBTcXVhcmVgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uU3F1YXJl
OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2Yg
dGhlIGBTcXVhcmVgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvblNxdWFyZSA9IHRoaXMuX3NldEJ1dHRv
blZhbHVlKHZhbHVlLCB0aGlzLl9idXR0b25TcXVhcmUsIER1YWxTaG9ja0J1dHRvbi5TcXVhcmUp
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRHVhbFNob2Nr
UGFkLnByb3RvdHlwZSwgImJ1dHRvblRyaWFuZ2xlIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBUcmlhbmdsZWAgYnV0dG9uCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9idXR0
b25UcmlhbmdsZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhl
IHZhbHVlIG9mIHRoZSBgVHJpYW5nbGVgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvblRyaWFuZ2xlID0g
dGhpcy5fc2V0QnV0dG9uVmFsdWUodmFsdWUsIHRoaXMuX2J1dHRvblRyaWFuZ2xlLCBEdWFsU2hv
Y2tCdXR0b24uVHJpYW5nbGUpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoRHVhbFNob2NrUGFkLnByb3RvdHlwZSwgImJ1dHRvbk9wdGlvbnMiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYE9wdGlvbnNgIGJ1dHRv
bgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fYnV0dG9uT3B0aW9uczsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBgT3B0aW9uc2AgYnV0dG9uCisgICAgICAgICAq
LworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYnV0
dG9uT3B0aW9ucyA9IHRoaXMuX3NldEJ1dHRvblZhbHVlKHZhbHVlLCB0aGlzLl9idXR0b25PcHRp
b25zLCBEdWFsU2hvY2tCdXR0b24uT3B0aW9ucyk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hvY2tQYWQucHJvdG90eXBlLCAiYnV0dG9uU2hhcmUi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYFNoYXJl
YCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblNoYXJlOworICAgICAgICB9LAorICAgICAgICAvKioK
KyAgICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBTaGFyZWAgYnV0dG9uCisgICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5f
YnV0dG9uU2hhcmUgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uU2hh
cmUsIER1YWxTaG9ja0J1dHRvbi5TaGFyZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hvY2tQYWQucHJvdG90eXBlLCAiYnV0dG9uTDEiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYEwxYCBidXR0b24K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2J1dHRvbkwxOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICog
U2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBMMWAgYnV0dG9uCisgICAgICAgICAqLworICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYnV0dG9uTDEgPSB0aGlz
Ll9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uTDEsIER1YWxTaG9ja0J1dHRvbi5M
MSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hv
Y2tQYWQucHJvdG90eXBlLCAiYnV0dG9uUjEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYFIxYCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblIxOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBS
MWAgYnV0dG9uCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgdGhpcy5fYnV0dG9uUjEgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwg
dGhpcy5fYnV0dG9uUjEsIER1YWxTaG9ja0J1dHRvbi5SMSk7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hvY2tQYWQucHJvdG90eXBlLCAiYnV0dG9u
TGVmdFN0aWNrIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdmFsdWUgb2Yg
dGhlIExlZnQgam95c3RpY2sKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvbkxlZnRTdGljazsKKyAgICAgICAgfSwK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBMZWZ0IGpveXN0
aWNrCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgdGhpcy5fYnV0dG9uTGVmdFN0aWNrID0gdGhpcy5fc2V0QnV0dG9uVmFsdWUodmFsdWUs
IHRoaXMuX2J1dHRvbkxlZnRTdGljaywgRHVhbFNob2NrQnV0dG9uLkxlZnRTdGljayk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hvY2tQYWQucHJv
dG90eXBlLCAiYnV0dG9uUmlnaHRTdGljayIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIHZhbHVlIG9mIHRoZSBSaWdodCBqb3lzdGljaworICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uUmlnaHRT
dGljazsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHZhbHVl
IG9mIHRoZSBSaWdodCBqb3lzdGljaworICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvblJpZ2h0U3RpY2sgPSB0aGlzLl9z
ZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uUmlnaHRTdGljaywgRHVhbFNob2NrQnV0
dG9uLlJpZ2h0U3RpY2spOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoRHVhbFNob2NrUGFkLnByb3RvdHlwZSwgImRQYWRVcCIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIHZhbHVlIG9mIEQtcGFkIHVwCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kUGFkVXA7Cisg
ICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBELXBh
ZCB1cAorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2RQYWRVcCA9IHRoaXMuX3NldERQYWRWYWx1ZSh2YWx1ZSwgdGhpcy5fZFBh
ZFVwLCBEdWFsU2hvY2tEcGFkLlVwKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KER1YWxTaG9ja1BhZC5wcm90b3R5cGUsICJkUGFkRG93biIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHZhbHVlIG9mIEQtcGFkIGRvd24KKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2RQYWREb3duOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUg
dmFsdWUgb2YgRC1wYWQgZG93bgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2RQYWREb3duID0gdGhpcy5fc2V0RFBhZFZhbHVl
KHZhbHVlLCB0aGlzLl9kUGFkRG93biwgRHVhbFNob2NrRHBhZC5Eb3duKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KER1YWxTaG9ja1BhZC5wcm90b3R5cGUs
ICJkUGFkTGVmdCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHZhbHVlIG9m
IEQtcGFkIGxlZnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2RQYWRMZWZ0OworICAgICAgICB9LAorICAgICAgICAvKioK
KyAgICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgRC1wYWQgbGVmdAorICAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2RQYWRMZWZ0
ID0gdGhpcy5fc2V0RFBhZFZhbHVlKHZhbHVlLCB0aGlzLl9kUGFkTGVmdCwgRHVhbFNob2NrRHBh
ZC5MZWZ0KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KER1
YWxTaG9ja1BhZC5wcm90b3R5cGUsICJkUGFkUmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiBELXBhZCByaWdodAorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZFBhZFJpZ2h0Owor
ICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgRC1w
YWQgcmlnaHQKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9kUGFkUmlnaHQgPSB0aGlzLl9zZXREUGFkVmFsdWUodmFsdWUsIHRo
aXMuX2RQYWRSaWdodCwgRHVhbFNob2NrRHBhZC5SaWdodCk7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIC8qKgorICAgICAqIEZvcmNlIHRoZSBnYW1lcGFkIHRvIHN5bmNocm9uaXplIHdpdGggZGV2
aWNlIHZhbHVlcworICAgICAqLworICAgIER1YWxTaG9ja1BhZC5wcm90b3R5cGUudXBkYXRlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVwZGF0ZS5jYWxsKHRoaXMp
OworICAgICAgICB0aGlzLmJ1dHRvbkNyb3NzID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25z
WzBdLnZhbHVlOworICAgICAgICB0aGlzLmJ1dHRvbkNpcmNsZSA9IHRoaXMuYnJvd3NlckdhbWVw
YWQuYnV0dG9uc1sxXS52YWx1ZTsKKyAgICAgICAgdGhpcy5idXR0b25TcXVhcmUgPSB0aGlzLmJy
b3dzZXJHYW1lcGFkLmJ1dHRvbnNbMl0udmFsdWU7CisgICAgICAgIHRoaXMuYnV0dG9uVHJpYW5n
bGUgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbM10udmFsdWU7CisgICAgICAgIHRoaXMu
YnV0dG9uTDEgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbNF0udmFsdWU7CisgICAgICAg
IHRoaXMuYnV0dG9uUjEgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbNV0udmFsdWU7Cisg
ICAgICAgIHRoaXMubGVmdFRyaWdnZXIgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbNl0u
dmFsdWU7CisgICAgICAgIHRoaXMucmlnaHRUcmlnZ2VyID0gdGhpcy5icm93c2VyR2FtZXBhZC5i
dXR0b25zWzddLnZhbHVlOworICAgICAgICB0aGlzLmJ1dHRvblNoYXJlID0gdGhpcy5icm93c2Vy
R2FtZXBhZC5idXR0b25zWzhdLnZhbHVlOworICAgICAgICB0aGlzLmJ1dHRvbk9wdGlvbnMgPSB0
aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbOV0udmFsdWU7CisgICAgICAgIHRoaXMuYnV0dG9u
TGVmdFN0aWNrID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzEwXS52YWx1ZTsKKyAgICAg
ICAgdGhpcy5idXR0b25SaWdodFN0aWNrID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzEx
XS52YWx1ZTsKKyAgICAgICAgdGhpcy5kUGFkVXAgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRv
bnNbMTJdLnZhbHVlOworICAgICAgICB0aGlzLmRQYWREb3duID0gdGhpcy5icm93c2VyR2FtZXBh
ZC5idXR0b25zWzEzXS52YWx1ZTsKKyAgICAgICAgdGhpcy5kUGFkTGVmdCA9IHRoaXMuYnJvd3Nl
ckdhbWVwYWQuYnV0dG9uc1sxNF0udmFsdWU7CisgICAgICAgIHRoaXMuZFBhZFJpZ2h0ID0gdGhp
cy5icm93c2VyR2FtZXBhZC5idXR0b25zWzE1XS52YWx1ZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIERpc3Bvc2VzIHRoZSBnYW1lcGFkCisgICAgICovCisgICAgRHVhbFNob2NrUGFkLnByb3Rv
dHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRp
c3Bvc2UuY2FsbCh0aGlzKTsKKyAgICAgICAgdGhpcy5vbkJ1dHRvbkRvd25PYnNlcnZhYmxlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMub25CdXR0b25VcE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAg
ICAgdGhpcy5vblBhZERvd25PYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25QYWRV
cE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICB9OworICAgIHJldHVybiBEdWFsU2hvY2tQYWQ7Cit9
KF9nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdhbWVwYWQiXSkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL0dhbWVwYWRzL2dhbWVwYWQudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dhbWVwYWRzL2dhbWVwYWQudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogU3RpY2tWYWx1ZXMsIEdhbWVwYWQsIEdlbmVyaWNQYWQgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU3RpY2tWYWx1ZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN0
aWNrVmFsdWVzOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdhbWVwYWQiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIEdhbWVwYWQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2VuZXJpY1BhZCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gR2VuZXJpY1BhZDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICov
ICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworCisKKy8qKgorICogUmVwcmVzZW50cyBhIGdhbWVw
YWQgY29udHJvbCBzdGljayBwb3NpdGlvbgorICovCit2YXIgU3RpY2tWYWx1ZXMgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIGdh
bWVwYWQgeCBhbmQgeSBjb250cm9sIHN0aWNrIHZhbHVlcworICAgICAqIEBwYXJhbSB4IFRoZSB4
IGNvbXBvbmVudCBvZiB0aGUgZ2FtZXBhZCBjb250cm9sIHN0aWNrIHZhbHVlCisgICAgICogQHBh
cmFtIHkgVGhlIHkgY29tcG9uZW50IG9mIHRoZSBnYW1lcGFkIGNvbnRyb2wgc3RpY2sgdmFsdWUK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdGlja1ZhbHVlcygKKyAgICAvKioKKyAgICAgKiBUaGUg
eCBjb21wb25lbnQgb2YgdGhlIGNvbnRyb2wgc3RpY2sKKyAgICAgKi8KKyAgICB4LCAKKyAgICAv
KioKKyAgICAgKiBUaGUgeSBjb21wb25lbnQgb2YgdGhlIGNvbnRyb2wgc3RpY2sKKyAgICAgKi8K
KyAgICB5KSB7CisgICAgICAgIHRoaXMueCA9IHg7CisgICAgICAgIHRoaXMueSA9IHk7CisgICAg
fQorICAgIHJldHVybiBTdGlja1ZhbHVlczsKK30oKSk7CisKKy8qKgorICogUmVwcmVzZW50cyBh
IGdhbWVwYWQKKyAqLwordmFyIEdhbWVwYWQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIGdhbWVwYWQKKyAgICAgKiBAcGFyYW0g
aWQgVGhlIGlkIG9mIHRoZSBnYW1lcGFkCisgICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBv
ZiB0aGUgZ2FtZXBhZAorICAgICAqIEBwYXJhbSBicm93c2VyR2FtZXBhZCBUaGUgYnJvd3NlciBn
YW1lcGFkCisgICAgICogQHBhcmFtIGxlZnRTdGlja1ggVGhlIHggY29tcG9uZW50IG9mIHRoZSBs
ZWZ0IGpveXN0aWNrCisgICAgICogQHBhcmFtIGxlZnRTdGlja1kgVGhlIHkgY29tcG9uZW50IG9m
IHRoZSBsZWZ0IGpveXN0aWNrCisgICAgICogQHBhcmFtIHJpZ2h0U3RpY2tYIFRoZSB4IGNvbXBv
bmVudCBvZiB0aGUgcmlnaHQgam95c3RpY2sKKyAgICAgKiBAcGFyYW0gcmlnaHRTdGlja1kgVGhl
IHkgY29tcG9uZW50IG9mIHRoZSByaWdodCBqb3lzdGljaworICAgICAqLworICAgIGZ1bmN0aW9u
IEdhbWVwYWQoCisgICAgLyoqCisgICAgICogVGhlIGlkIG9mIHRoZSBnYW1lcGFkCisgICAgICov
CisgICAgaWQsIAorICAgIC8qKgorICAgICAqIFRoZSBpbmRleCBvZiB0aGUgZ2FtZXBhZAorICAg
ICAqLworICAgIGluZGV4LCAKKyAgICAvKioKKyAgICAgKiBUaGUgYnJvd3NlciBnYW1lcGFkCisg
ICAgICovCisgICAgYnJvd3NlckdhbWVwYWQsIGxlZnRTdGlja1gsIGxlZnRTdGlja1ksIHJpZ2h0
U3RpY2tYLCByaWdodFN0aWNrWSkgeworICAgICAgICBpZiAobGVmdFN0aWNrWCA9PT0gdm9pZCAw
KSB7IGxlZnRTdGlja1ggPSAwOyB9CisgICAgICAgIGlmIChsZWZ0U3RpY2tZID09PSB2b2lkIDAp
IHsgbGVmdFN0aWNrWSA9IDE7IH0KKyAgICAgICAgaWYgKHJpZ2h0U3RpY2tYID09PSB2b2lkIDAp
IHsgcmlnaHRTdGlja1ggPSAyOyB9CisgICAgICAgIGlmIChyaWdodFN0aWNrWSA9PT0gdm9pZCAw
KSB7IHJpZ2h0U3RpY2tZID0gMzsgfQorICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgIHRo
aXMuaW5kZXggPSBpbmRleDsKKyAgICAgICAgdGhpcy5icm93c2VyR2FtZXBhZCA9IGJyb3dzZXJH
YW1lcGFkOworICAgICAgICB0aGlzLl9sZWZ0U3RpY2sgPSB7IHg6IDAsIHk6IDAgfTsKKyAgICAg
ICAgdGhpcy5fcmlnaHRTdGljayA9IHsgeDogMCwgeTogMCB9OworICAgICAgICAvKiogQGhpZGRl
biAqLworICAgICAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IHRydWU7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgbGVmdCBjb250cm9sIHN0aWNrIHNob3VsZCBi
ZSBZLWludmVydGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9pbnZlcnRMZWZ0U3RpY2tZ
ID0gZmFsc2U7CisgICAgICAgIHRoaXMudHlwZSA9IEdhbWVwYWQuR0FNRVBBRDsKKyAgICAgICAg
dGhpcy5fbGVmdFN0aWNrQXhpc1ggPSBsZWZ0U3RpY2tYOworICAgICAgICB0aGlzLl9sZWZ0U3Rp
Y2tBeGlzWSA9IGxlZnRTdGlja1k7CisgICAgICAgIHRoaXMuX3JpZ2h0U3RpY2tBeGlzWCA9IHJp
Z2h0U3RpY2tYOworICAgICAgICB0aGlzLl9yaWdodFN0aWNrQXhpc1kgPSByaWdodFN0aWNrWTsK
KyAgICAgICAgaWYgKHRoaXMuYnJvd3NlckdhbWVwYWQuYXhlcy5sZW5ndGggPj0gMikgeworICAg
ICAgICAgICAgdGhpcy5fbGVmdFN0aWNrID0geyB4OiB0aGlzLmJyb3dzZXJHYW1lcGFkLmF4ZXNb
dGhpcy5fbGVmdFN0aWNrQXhpc1hdLCB5OiB0aGlzLmJyb3dzZXJHYW1lcGFkLmF4ZXNbdGhpcy5f
bGVmdFN0aWNrQXhpc1ldIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuYnJvd3Nlckdh
bWVwYWQuYXhlcy5sZW5ndGggPj0gNCkgeworICAgICAgICAgICAgdGhpcy5fcmlnaHRTdGljayA9
IHsgeDogdGhpcy5icm93c2VyR2FtZXBhZC5heGVzW3RoaXMuX3JpZ2h0U3RpY2tBeGlzWF0sIHk6
IHRoaXMuYnJvd3NlckdhbWVwYWQuYXhlc1t0aGlzLl9yaWdodFN0aWNrQXhpc1ldIH07CisgICAg
ICAgIH0KKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEdhbWVwYWQucHJvdG90eXBl
LCAiaXNDb25uZWN0ZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgaWYg
dGhlIGdhbWVwYWQgaGFzIGJlZW4gY29ubmVjdGVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0Nvbm5lY3RlZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQ2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4g
dGhlIGxlZnQgam95c3RpY2sgaGFzIGNoYW5nZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sKKyAg
ICAgKi8KKyAgICBHYW1lcGFkLnByb3RvdHlwZS5vbmxlZnRzdGlja2NoYW5nZWQgPSBmdW5jdGlv
biAoY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5fb25sZWZ0c3RpY2tjaGFuZ2VkID0gY2FsbGJh
Y2s7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUg
cmlnaHQgam95c3RpY2sgaGFzIGNoYW5nZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sKKyAgICAg
Ki8KKyAgICBHYW1lcGFkLnByb3RvdHlwZS5vbnJpZ2h0c3RpY2tjaGFuZ2VkID0gZnVuY3Rpb24g
KGNhbGxiYWNrKSB7CisgICAgICAgIHRoaXMuX29ucmlnaHRzdGlja2NoYW5nZWQgPSBjYWxsYmFj
azsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHYW1lcGFkLnByb3RvdHlwZSwg
ImxlZnRTdGljayIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxlZnQgam95
c3RpY2sKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2xlZnRTdGljazsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFNldHMgdGhlIGxlZnQgam95c3RpY2sgdmFsdWVzCisgICAgICAgICAqLworICAgICAg
ICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbmxl
ZnRzdGlja2NoYW5nZWQgJiYgKHRoaXMuX2xlZnRTdGljay54ICE9PSBuZXdWYWx1ZXMueCB8fCB0
aGlzLl9sZWZ0U3RpY2sueSAhPT0gbmV3VmFsdWVzLnkpKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fb25sZWZ0c3RpY2tjaGFuZ2VkKG5ld1ZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl9sZWZ0U3RpY2sgPSBuZXdWYWx1ZXM7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHYW1lcGFkLnByb3RvdHlwZSwgInJpZ2h0U3RpY2siLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByaWdodCBqb3lzdGljaworICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fcmlnaHRTdGljazsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMg
dGhlIHJpZ2h0IGpveXN0aWNrIHZhbHVlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uIChuZXdWYWx1ZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbnJpZ2h0c3RpY2tjaGFu
Z2VkICYmICh0aGlzLl9yaWdodFN0aWNrLnggIT09IG5ld1ZhbHVlcy54IHx8IHRoaXMuX3JpZ2h0
U3RpY2sueSAhPT0gbmV3VmFsdWVzLnkpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fb25yaWdo
dHN0aWNrY2hhbmdlZChuZXdWYWx1ZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5fcmlnaHRTdGljayA9IG5ld1ZhbHVlczsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisg
ICAgICogVXBkYXRlcyB0aGUgZ2FtZXBhZCBqb3lzdGljayBwb3NpdGlvbnMKKyAgICAgKi8KKyAg
ICBHYW1lcGFkLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLl9sZWZ0U3RpY2spIHsKKyAgICAgICAgICAgIHRoaXMubGVmdFN0aWNrID0geyB4OiB0aGlz
LmJyb3dzZXJHYW1lcGFkLmF4ZXNbdGhpcy5fbGVmdFN0aWNrQXhpc1hdLCB5OiB0aGlzLmJyb3dz
ZXJHYW1lcGFkLmF4ZXNbdGhpcy5fbGVmdFN0aWNrQXhpc1ldIH07CisgICAgICAgICAgICBpZiAo
dGhpcy5faW52ZXJ0TGVmdFN0aWNrWSkgeworICAgICAgICAgICAgICAgIHRoaXMubGVmdFN0aWNr
LnkgKj0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Jp
Z2h0U3RpY2spIHsKKyAgICAgICAgICAgIHRoaXMucmlnaHRTdGljayA9IHsgeDogdGhpcy5icm93
c2VyR2FtZXBhZC5heGVzW3RoaXMuX3JpZ2h0U3RpY2tBeGlzWF0sIHk6IHRoaXMuYnJvd3Nlckdh
bWVwYWQuYXhlc1t0aGlzLl9yaWdodFN0aWNrQXhpc1ldIH07CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBnYW1lcGFkCisgICAgICovCisgICAgR2FtZXBh
ZC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlcHJlc2VudHMgYSBnYW1lcGFkIGNvbnRyb2xsZXIKKyAgICAgKi8KKyAgICBHYW1lcGFk
LkdBTUVQQUQgPSAwOworICAgIC8qKgorICAgICAqIFJlcHJlc2VudHMgYSBnZW5lcmljIGNvbnRy
b2xsZXIKKyAgICAgKi8KKyAgICBHYW1lcGFkLkdFTkVSSUMgPSAxOworICAgIC8qKgorICAgICAq
IFJlcHJlc2VudHMgYW4gWEJveCBjb250cm9sbGVyCisgICAgICovCisgICAgR2FtZXBhZC5YQk9Y
ID0gMjsKKyAgICAvKioKKyAgICAgKiBSZXByZXNlbnRzIGEgcG9zZS1lbmFibGVkIGNvbnRyb2xs
ZXIKKyAgICAgKi8KKyAgICBHYW1lcGFkLlBPU0VfRU5BQkxFRCA9IDM7CisgICAgLyoqCisgICAg
ICogUmVwcmVzZW50cyBhbiBEdWFsIFNob2NrIGNvbnRyb2xsZXIKKyAgICAgKi8KKyAgICBHYW1l
cGFkLkRVQUxTSE9DSyA9IDQ7CisgICAgcmV0dXJuIEdhbWVwYWQ7Cit9KCkpOworCisvKioKKyAq
IFJlcHJlc2VudHMgYSBnZW5lcmljIGdhbWVwYWQKKyAqLwordmFyIEdlbmVyaWNQYWQgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oR2VuZXJpY1BhZCwgX3N1cGVyKTsKKyAgICAvKioK
KyAgICAgKiBJbml0aWFsaXplcyB0aGUgZ2VuZXJpYyBnYW1lcGFkCisgICAgICogQHBhcmFtIGlk
IFRoZSBpZCBvZiB0aGUgZ2VuZXJpYyBnYW1lcGFkCisgICAgICogQHBhcmFtIGluZGV4IFRoZSBp
bmRleCBvZiB0aGUgZ2VuZXJpYyBnYW1lcGFkCisgICAgICogQHBhcmFtIGJyb3dzZXJHYW1lcGFk
IFRoZSBicm93c2VyIGdhbWVwYWQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBHZW5lcmljUGFkKGlk
LCBpbmRleCwgYnJvd3NlckdhbWVwYWQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNh
bGwodGhpcywgaWQsIGluZGV4LCBicm93c2VyR2FtZXBhZCkgfHwgdGhpczsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIE9ic2VydmFibGUgdHJpZ2dlcmVkIHdoZW4gYSBidXR0b24gaGFzIGJlZW4g
cHJlc3NlZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25CdXR0b25Eb3duT2JzZXJ2YWJs
ZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9i
c2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSB0cmlnZ2Vy
ZWQgd2hlbiBhIGJ1dHRvbiBoYXMgYmVlbiByZWxlYXNlZAorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMub25CdXR0b25VcE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgX3RoaXMudHlw
ZSA9IEdhbWVwYWQuR0VORVJJQzsKKyAgICAgICAgX3RoaXMuX2J1dHRvbnMgPSBuZXcgQXJyYXko
YnJvd3NlckdhbWVwYWQuYnV0dG9ucy5sZW5ndGgpOworICAgICAgICByZXR1cm4gX3RoaXM7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIENhbGxiYWNrIHRyaWdnZXJlZCB3aGVuIGEgYnV0dG9uIGhh
cyBiZWVuIHByZXNzZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGVkIHdoZW4gYSBidXR0
b24gaGFzIGJlZW4gcHJlc3NlZAorICAgICAqLworICAgIEdlbmVyaWNQYWQucHJvdG90eXBlLm9u
YnV0dG9uZG93biA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9vbmJ1dHRv
bmRvd24gPSBjYWxsYmFjazsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxiYWNrIHRyaWdn
ZXJlZCB3aGVuIGEgYnV0dG9uIGhhcyBiZWVuIHJlbGVhc2VkCisgICAgICogQHBhcmFtIGNhbGxi
YWNrIENhbGxlZCB3aGVuIGEgYnV0dG9uIGhhcyBiZWVuIHJlbGVhc2VkCisgICAgICovCisgICAg
R2VuZXJpY1BhZC5wcm90b3R5cGUub25idXR0b251cCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewor
ICAgICAgICB0aGlzLl9vbmJ1dHRvbnVwID0gY2FsbGJhY2s7CisgICAgfTsKKyAgICBHZW5lcmlj
UGFkLnByb3RvdHlwZS5fc2V0QnV0dG9uVmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUsIGN1cnJl
bnRWYWx1ZSwgYnV0dG9uSW5kZXgpIHsKKyAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBjdXJyZW50
VmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gMSkgeworICAgICAgICAgICAg
ICAgIGlmICh0aGlzLl9vbmJ1dHRvbmRvd24pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
b25idXR0b25kb3duKGJ1dHRvbkluZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgdGhpcy5vbkJ1dHRvbkRvd25PYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhidXR0b25J
bmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IDApIHsK
KyAgICAgICAgICAgICAgICBpZiAodGhpcy5fb25idXR0b251cCkgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9vbmJ1dHRvbnVwKGJ1dHRvbkluZGV4KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdGhpcy5vbkJ1dHRvblVwT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMo
YnV0dG9uSW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBu
ZXdWYWx1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGdlbmVyaWMgZ2Ft
ZXBhZAorICAgICAqLworICAgIEdlbmVyaWNQYWQucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzKTsKKyAgICAg
ICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2J1dHRvbnMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICB0aGlzLl9idXR0b25zW2luZGV4XSA9IHRoaXMuX3NldEJ1dHRv
blZhbHVlKHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9uc1tpbmRleF0udmFsdWUsIHRoaXMuX2J1
dHRvbnNbaW5kZXhdLCBpbmRleCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAq
IERpc3Bvc2VzIHRoZSBnZW5lcmljIGdhbWVwYWQKKyAgICAgKi8KKyAgICBHZW5lcmljUGFkLnBy
b3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBl
LmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAgICAgICAgdGhpcy5vbkJ1dHRvbkRvd25PYnNlcnZhYmxl
LmNsZWFyKCk7CisgICAgICAgIHRoaXMub25CdXR0b25VcE9ic2VydmFibGUuY2xlYXIoKTsKKyAg
ICB9OworICAgIHJldHVybiBHZW5lcmljUGFkOworfShHYW1lcGFkKSk7CisKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vR2FtZXBhZHMvZ2FtZXBhZE1hbmFnZXIudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HYW1lcGFkcy9nYW1lcGFk
TWFuYWdlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogR2FtZXBhZE1hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiR2FtZXBhZE1hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEdhbWVwYWRNYW5hZ2VyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNl
cnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZG9tTWFuYWdlbWVudF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kb21NYW5hZ2Vt
ZW50ICovICIuL01pc2MvZG9tTWFuYWdlbWVudC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9HYW1lcGFkc19Db250cm9sbGVyc19wb3NlRW5hYmxlZENvbnRyb2xsZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0dhbWVwYWRz
L0NvbnRyb2xsZXJzL3Bvc2VFbmFibGVkQ29udHJvbGxlciAqLyAiLi9HYW1lcGFkcy9Db250cm9s
bGVycy9wb3NlRW5hYmxlZENvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfeGJveEdhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4veGJveEdhbWVwYWQgKi8gIi4vR2FtZXBhZHMveGJveEdhbWVwYWQudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZ2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9nYW1lcGFkICovICIuL0dhbWVw
YWRzL2dhbWVwYWQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdp
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2R1YWxTaG9ja0dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZHVhbFNob2NrR2FtZXBhZCAqLyAiLi9H
YW1lcGFkcy9kdWFsU2hvY2tHYW1lcGFkLnRzIik7CisKKworCisKKworCisKKy8qKgorICogTWFu
YWdlciBmb3IgaGFuZGxpbmcgZ2FtZXBhZHMKKyAqLwordmFyIEdhbWVwYWRNYW5hZ2VyID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRo
ZSBnYW1lcGFkIG1hbmFnZXIKKyAgICAgKiBAcGFyYW0gX3NjZW5lIEJhYnlsb25KUyBzY2VuZQor
ICAgICAqLworICAgIGZ1bmN0aW9uIEdhbWVwYWRNYW5hZ2VyKF9zY2VuZSkgeworICAgICAgICB2
YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl9zY2VuZSA9IF9zY2VuZTsKKyAgICAgICAg
dGhpcy5fYmFieWxvbkdhbWVwYWRzID0gW107CisgICAgICAgIHRoaXMuX29uZUdhbWVwYWRDb25u
ZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5faXNN
b25pdG9yaW5nID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBvYnNlcnZhYmxlIHRv
IGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBnYW1lcGFkIGNvbnRyb2xsZXIgaGFzIGJlZW4gZGlzY29u
bmVjdGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uR2FtZXBhZERpc2Nvbm5lY3RlZE9i
c2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgaWYgKCFfTWlzY19kb21NYW5hZ2VtZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkRvbU1hbmFnZW1lbnQiXS5Jc1dpbmRvd09iamVj
dEV4aXN0KCkpIHsKKyAgICAgICAgICAgIHRoaXMuX2dhbWVwYWRFdmVudFN1cHBvcnRlZCA9IGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZ2FtZXBh
ZEV2ZW50U3VwcG9ydGVkID0gJ0dhbWVwYWRFdmVudCcgaW4gd2luZG93OworICAgICAgICAgICAg
dGhpcy5fZ2FtZXBhZFN1cHBvcnQgPSAobmF2aWdhdG9yLmdldEdhbWVwYWRzIHx8CisgICAgICAg
ICAgICAgICAgbmF2aWdhdG9yLndlYmtpdEdldEdhbWVwYWRzIHx8IG5hdmlnYXRvci5tc0dldEdh
bWVwYWRzIHx8IG5hdmlnYXRvci53ZWJraXRHYW1lcGFkcyk7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKGZ1bmN0aW9uIChvYnNl
cnZlcikgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcmFpc2UgdGhlIG9u
R2FtZXBhZENvbm5lY3RlZCBmb3IgYWxsIGdhbWVwYWRzIEFMUkVBRFkgY29ubmVjdGVkCisgICAg
ICAgICAgICBmb3IgKHZhciBpIGluIF90aGlzLl9iYWJ5bG9uR2FtZXBhZHMpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgZ2FtZXBhZCA9IF90aGlzLl9iYWJ5bG9uR2FtZXBhZHNbaV07CisgICAgICAg
ICAgICAgICAgaWYgKGdhbWVwYWQgJiYgZ2FtZXBhZC5faXNDb25uZWN0ZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgX3RoaXMub25HYW1lcGFkQ29ubmVjdGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNl
cnZlcihvYnNlcnZlciwgZ2FtZXBhZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fb25HYW1lcGFkQ29ubmVjdGVkRXZlbnQgPSBm
dW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICB2YXIgZ2FtZXBhZCA9IGV2dC5nYW1lcGFkOwor
ICAgICAgICAgICAgaWYgKGdhbWVwYWQuaW5kZXggaW4gX3RoaXMuX2JhYnlsb25HYW1lcGFkcykg
eworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fYmFieWxvbkdhbWVwYWRzW2dhbWVwYWQuaW5k
ZXhdLmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbmV3R2FtZXBhZDsKKyAg
ICAgICAgICAgIGlmIChfdGhpcy5fYmFieWxvbkdhbWVwYWRzW2dhbWVwYWQuaW5kZXhdKSB7Cisg
ICAgICAgICAgICAgICAgbmV3R2FtZXBhZCA9IF90aGlzLl9iYWJ5bG9uR2FtZXBhZHNbZ2FtZXBh
ZC5pbmRleF07CisgICAgICAgICAgICAgICAgbmV3R2FtZXBhZC5icm93c2VyR2FtZXBhZCA9IGdh
bWVwYWQ7CisgICAgICAgICAgICAgICAgbmV3R2FtZXBhZC5faXNDb25uZWN0ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbmV3R2Ft
ZXBhZCA9IF90aGlzLl9hZGROZXdHYW1lcGFkKGdhbWVwYWQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgX3RoaXMub25HYW1lcGFkQ29ubmVjdGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZl
cnMobmV3R2FtZXBhZCk7CisgICAgICAgICAgICBfdGhpcy5fc3RhcnRNb25pdG9yaW5nR2FtZXBh
ZHMoKTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fb25HYW1lcGFkRGlzY29ubmVjdGVkRXZl
bnQgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICB2YXIgZ2FtZXBhZCA9IGV2dC5nYW1l
cGFkOworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBnYW1lcGFkIGZyb20gdGhlIGxpc3Qgb2Yg
Z2FtZXBhZHMgdG8gbW9uaXRvci4KKyAgICAgICAgICAgIGZvciAodmFyIGkgaW4gX3RoaXMuX2Jh
Ynlsb25HYW1lcGFkcykgeworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fYmFieWxvbkdhbWVw
YWRzW2ldLmluZGV4ID09PSBnYW1lcGFkLmluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBkaXNjb25uZWN0ZWRHYW1lcGFkID0gX3RoaXMuX2JhYnlsb25HYW1lcGFkc1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgZGlzY29ubmVjdGVkR2FtZXBhZC5faXNDb25uZWN0ZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25HYW1lcGFkRGlzY29ubmVjdGVkT2JzZXJ2YWJs
ZS5ub3RpZnlPYnNlcnZlcnMoZGlzY29ubmVjdGVkR2FtZXBhZCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KyAgICAgICAgaWYgKHRoaXMuX2dhbWVwYWRTdXBwb3J0KSB7CisgICAgICAgICAgICAvL2ZpcnN0
IGFkZCBhbHJlYWR5LWNvbm5lY3RlZCBnYW1lcGFkcworICAgICAgICAgICAgdGhpcy5fdXBkYXRl
R2FtZXBhZE9iamVjdHMoKTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9iYWJ5bG9uR2FtZXBhZHMu
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRNb25pdG9yaW5nR2FtZXBhZHMo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENoZWNraW5nIGlmIHRoZSBnYW1lcGFk
IGNvbm5lY3RlZCBldmVudCBpcyBzdXBwb3J0ZWQgKGxpa2UgaW4gRmlyZWZveCkKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9nYW1lcGFkRXZlbnRTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgICAgICB2
YXIgaG9zdFdpbmRvdyA9IHRoaXMuX3NjZW5lID8gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZ2V0
SG9zdFdpbmRvdygpIDogd2luZG93OworICAgICAgICAgICAgICAgIGhvc3RXaW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcignZ2FtZXBhZGNvbm5lY3RlZCcsIHRoaXMuX29uR2FtZXBhZENvbm5lY3RlZEV2
ZW50LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgaG9zdFdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCdnYW1lcGFkZGlzY29ubmVjdGVkJywgdGhpcy5fb25HYW1lcGFkRGlzY29ubmVjdGVkRXZlbnQs
IGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHRoaXMuX3N0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEdhbWVwYWRNYW5hZ2VyLnBy
b3RvdHlwZSwgImdhbWVwYWRzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGdhbWVw
YWRzIGluIHRoZSBnYW1lIHBhZCBtYW5hZ2VyCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYWJ5bG9uR2FtZXBhZHM7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldCB0aGUgZ2FtZXBhZCBjb250cm9s
bGVycyBiYXNlZCBvbiB0eXBlCisgICAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgZ2FtZXBh
ZCBjb250cm9sbGVyCisgICAgICogQHJldHVybnMgTnVsbGFibGUgZ2FtZXBhZAorICAgICAqLwor
ICAgIEdhbWVwYWRNYW5hZ2VyLnByb3RvdHlwZS5nZXRHYW1lcGFkQnlUeXBlID0gZnVuY3Rpb24g
KHR5cGUpIHsKKyAgICAgICAgaWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0eXBlID0gX2dhbWVwYWRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siR2FtZXBhZCJdLlhCT1g7IH0KKyAgICAgICAg
Zm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX2JhYnlsb25HYW1lcGFkczsgX2kgPCBfYS5sZW5n
dGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBnYW1lcGFkID0gX2FbX2ldOworICAgICAgICAg
ICAgaWYgKGdhbWVwYWQgJiYgZ2FtZXBhZC50eXBlID09PSB0eXBlKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdhbWVwYWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgZ2FtZXBhZCBt
YW5hZ2VyCisgICAgICovCisgICAgR2FtZXBhZE1hbmFnZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9nYW1lcGFkRXZlbnRTdXBwb3J0ZWQpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl9vbkdhbWVwYWRDb25uZWN0ZWRFdmVudCkgeworICAgICAg
ICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdnYW1lcGFkY29ubmVjdGVkJywg
dGhpcy5fb25HYW1lcGFkQ29ubmVjdGVkRXZlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHRoaXMuX29uR2FtZXBhZERpc2Nvbm5lY3RlZEV2ZW50KSB7CisgICAgICAgICAgICAg
ICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2dhbWVwYWRkaXNjb25uZWN0ZWQnLCB0aGlz
Ll9vbkdhbWVwYWREaXNjb25uZWN0ZWRFdmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0aGlzLl9vbkdhbWVwYWRDb25uZWN0ZWRFdmVudCA9IG51bGw7CisgICAgICAgICAgICB0aGlz
Ll9vbkdhbWVwYWREaXNjb25uZWN0ZWRFdmVudCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fYmFieWxvbkdhbWVwYWRzLmZvckVhY2goZnVuY3Rpb24gKGdhbWVwYWQpIHsKKyAgICAg
ICAgICAgIGdhbWVwYWQuZGlzcG9zZSgpOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5vbkdh
bWVwYWRDb25uZWN0ZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25HYW1lcGFk
RGlzY29ubmVjdGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLl9vbmVHYW1lcGFk
Q29ubmVjdGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3N0b3BNb25pdG9yaW5nR2FtZXBhZHMo
KTsKKyAgICAgICAgdGhpcy5fYmFieWxvbkdhbWVwYWRzID0gW107CisgICAgfTsKKyAgICBHYW1l
cGFkTWFuYWdlci5wcm90b3R5cGUuX2FkZE5ld0dhbWVwYWQgPSBmdW5jdGlvbiAoZ2FtZXBhZCkg
eworICAgICAgICBpZiAoIXRoaXMuX29uZUdhbWVwYWRDb25uZWN0ZWQpIHsKKyAgICAgICAgICAg
IHRoaXMuX29uZUdhbWVwYWRDb25uZWN0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHZh
ciBuZXdHYW1lcGFkOworICAgICAgICB2YXIgZHVhbFNob2NrID0gKGdhbWVwYWQuaWQuc2VhcmNo
KCIwNTRjIikgIT09IC0xKTsKKyAgICAgICAgdmFyIHhib3hPbmUgPSAoZ2FtZXBhZC5pZC5zZWFy
Y2goIlhib3ggT25lIikgIT09IC0xKTsKKyAgICAgICAgaWYgKHhib3hPbmUgfHwgZ2FtZXBhZC5p
ZC5zZWFyY2goIlhib3ggMzYwIikgIT09IC0xIHx8IGdhbWVwYWQuaWQuc2VhcmNoKCJ4aW5wdXQi
KSAhPT0gLTEpIHsKKyAgICAgICAgICAgIG5ld0dhbWVwYWQgPSBuZXcgX3hib3hHYW1lcGFkX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlhib3gzNjBQYWQiXShnYW1lcGFkLmlkLCBnYW1l
cGFkLmluZGV4LCBnYW1lcGFkLCB4Ym94T25lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChkdWFsU2hvY2spIHsKKyAgICAgICAgICAgIG5ld0dhbWVwYWQgPSBuZXcgX2R1YWxTaG9ja0dh
bWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRHVhbFNob2NrUGFkIl0oZ2FtZXBh
ZC5pZCwgZ2FtZXBhZC5pbmRleCwgZ2FtZXBhZCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gaWYg
cG9zZSBpcyBzdXBwb3J0ZWQsIHVzZSB0aGUgKFdlYlZSKSBwb3NlIGVuYWJsZWQgY29udHJvbGxl
cgorICAgICAgICBlbHNlIGlmIChnYW1lcGFkLnBvc2UpIHsKKyAgICAgICAgICAgIG5ld0dhbWVw
YWQgPSBfR2FtZXBhZHNfQ29udHJvbGxlcnNfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlciJdLkluaXRp
YXRlQ29udHJvbGxlcihnYW1lcGFkKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIG5ld0dhbWVwYWQgPSBuZXcgX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siR2VuZXJpY1BhZCJdKGdhbWVwYWQuaWQsIGdhbWVwYWQuaW5kZXgsIGdhbWVwYWQpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2JhYnlsb25HYW1lcGFkc1tuZXdHYW1lcGFkLmluZGV4
XSA9IG5ld0dhbWVwYWQ7CisgICAgICAgIHJldHVybiBuZXdHYW1lcGFkOworICAgIH07CisgICAg
R2FtZXBhZE1hbmFnZXIucHJvdG90eXBlLl9zdGFydE1vbml0b3JpbmdHYW1lcGFkcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9pc01vbml0b3JpbmcpIHsKKyAgICAgICAgICAg
IHRoaXMuX2lzTW9uaXRvcmluZyA9IHRydWU7CisgICAgICAgICAgICAvL2JhY2stY29tcAorICAg
ICAgICAgICAgaWYgKCF0aGlzLl9zY2VuZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNr
R2FtZXBhZHNTdGF0dXMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAg
R2FtZXBhZE1hbmFnZXIucHJvdG90eXBlLl9zdG9wTW9uaXRvcmluZ0dhbWVwYWRzID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB0aGlzLl9pc01vbml0b3JpbmcgPSBmYWxzZTsKKyAgICB9OworICAg
IC8qKiBAaGlkZGVuICovCisgICAgR2FtZXBhZE1hbmFnZXIucHJvdG90eXBlLl9jaGVja0dhbWVw
YWRzU3RhdHVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICAvLyBIYWNrIHRvIGJlIGNvbXBhdGlibGUgQ2hyb21lCisgICAgICAgIHRoaXMuX3VwZGF0
ZUdhbWVwYWRPYmplY3RzKCk7CisgICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5fYmFieWxvbkdh
bWVwYWRzKSB7CisgICAgICAgICAgICB2YXIgZ2FtZXBhZCA9IHRoaXMuX2JhYnlsb25HYW1lcGFk
c1tpXTsKKyAgICAgICAgICAgIGlmICghZ2FtZXBhZCB8fCAhZ2FtZXBhZC5pc0Nvbm5lY3RlZCkg
eworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Z2FtZXBhZC51cGRhdGUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5faXNNb25pdG9y
aW5nICYmICF0aGlzLl9zY2VuZSkgeworICAgICAgICAgICAgX0VuZ2luZXNfZW5naW5lX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkVuZ2luZSJdLlF1ZXVlTmV3RnJhbWUoZnVuY3Rpb24g
KCkgeyBfdGhpcy5fY2hlY2tHYW1lcGFkc1N0YXR1cygpOyB9KTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBvbiBDaHJvbWUsIHdoaWNoIGRv
ZXMgbm90IHByb3Blcmx5IHN1cHBvcnQKKyAgICAvLyBjb25uZWN0aW9uL2Rpc2Nvbm5lY3Rpb24g
ZXZlbnRzIGFuZCBmb3JjZXMgeW91IHRvIHJlY29weSBhZ2FpbiB0aGUgZ2FtZXBhZCBvYmplY3QK
KyAgICBHYW1lcGFkTWFuYWdlci5wcm90b3R5cGUuX3VwZGF0ZUdhbWVwYWRPYmplY3RzID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgZ2FtZXBhZHMgPSBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMg
PyBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMoKSA6IChuYXZpZ2F0b3Iud2Via2l0R2V0R2FtZXBhZHMg
PyBuYXZpZ2F0b3Iud2Via2l0R2V0R2FtZXBhZHMoKSA6IFtdKTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBnYW1lcGFkcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGdhbWVw
YWQgPSBnYW1lcGFkc1tpXTsKKyAgICAgICAgICAgIGlmIChnYW1lcGFkKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLl9iYWJ5bG9uR2FtZXBhZHNbZ2FtZXBhZC5pbmRleF0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG5ld0dhbWVwYWQgPSB0aGlzLl9hZGROZXdHYW1lcGFkKGdhbWVw
YWQpOworICAgICAgICAgICAgICAgICAgICB0aGlzLm9uR2FtZXBhZENvbm5lY3RlZE9ic2VydmFi
bGUubm90aWZ5T2JzZXJ2ZXJzKG5ld0dhbWVwYWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2VkIHRvIGNvcHkg
YWdhaW4gdGhpcyBvYmplY3QgZm9yIENocm9tZSBmb3IgdW5rbm93biByZWFzb24KKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fYmFieWxvbkdhbWVwYWRzW2ldLmJyb3dzZXJHYW1lcGFkID0gZ2Ft
ZXBhZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9iYWJ5bG9uR2FtZXBhZHNbaV0u
aXNDb25uZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JhYnlsb25HYW1l
cGFkc1tpXS5faXNDb25uZWN0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzLl9iYWJ5
bG9uR2FtZXBhZHNbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gR2FtZXBhZE1h
bmFnZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0dhbWVwYWRzL2dhbWVw
YWRTY2VuZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9HYW1lcGFkcy9nYW1lcGFkU2NlbmVDb21wb25lbnQu
dHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBHYW1lcGFkU3lzdGVtU2NlbmVDb21wb25lbnQgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2FtZXBhZFN5c3RlbVNjZW5lQ29tcG9u
ZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBHYW1lcGFkU3lzdGVtU2NlbmVDb21wb25lbnQ7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vc2NlbmUgKi8gIi4vc2NlbmUudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lQ29tcG9u
ZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2dhbWVwYWRNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL2dhbWVwYWRNYW5hZ2VyICovICIuL0dhbWVwYWRzL2dhbWVwYWRNYW5h
Z2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfZnJlZUNhbWVyYUlu
cHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL0NhbWVyYXMvZnJlZUNhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJh
cy9mcmVlQ2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9DYW1lcmFzX0lucHV0c19mcmVlQ2FtZXJhR2FtZXBhZElucHV0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL0lucHV0cy9m
cmVlQ2FtZXJhR2FtZXBhZElucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFHYW1l
cGFkSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19hcmNSb3Rh
dGVDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL2FyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFn
ZXIgKi8gIi4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfSW5wdXRzX2FyY1JvdGF0ZUNhbWVyYUdhbWVw
YWRJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0ICovICIu
L0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dC50cyIpOworCisKKwor
CisKKworCitPYmplY3QuZGVmaW5lUHJvcGVydHkoX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlNjZW5lIl0ucHJvdG90eXBlLCAiZ2FtZXBhZE1hbmFnZXIiLCB7CisgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fZ2FtZXBhZE1hbmFnZXIpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2dhbWVwYWRNYW5hZ2VyID0gbmV3IF9nYW1lcGFkTWFuYWdlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHYW1lcGFkTWFuYWdlciJdKHRoaXMpOworICAgICAg
ICAgICAgdmFyIGNvbXBvbmVudCA9IHRoaXMuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5O
QU1FX0dBTUVQQUQpOworICAgICAgICAgICAgaWYgKCFjb21wb25lbnQpIHsKKyAgICAgICAgICAg
ICAgICBjb21wb25lbnQgPSBuZXcgR2FtZXBhZFN5c3RlbVNjZW5lQ29tcG9uZW50KHRoaXMpOwor
ICAgICAgICAgICAgICAgIHRoaXMuX2FkZENvbXBvbmVudChjb21wb25lbnQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nYW1lcGFkTWFuYWdlcjsKKyAg
ICB9LAorICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgY29uZmlndXJhYmxlOiB0cnVlCit9KTsK
Ky8qKgorICogQWRkcyBhIGdhbWVwYWQgdG8gdGhlIGZyZWUgY2FtZXJhIGlucHV0cyBtYW5hZ2Vy
CisgKi8KK19DYW1lcmFzX2ZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyIl0ucHJvdG90eXBlLmFkZEdhbWVw
YWQgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5hZGQobmV3IF9DYW1lcmFzX0lucHV0c19mcmVl
Q2FtZXJhR2FtZXBhZElucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkZyZWVDYW1l
cmFHYW1lcGFkSW5wdXQiXSgpKTsKKyAgICByZXR1cm4gdGhpczsKK307CisvKioKKyAqIEFkZHMg
YSBnYW1lcGFkIHRvIHRoZSBhcmMgcm90YXRlIGNhbWVyYSBpbnB1dHMgbWFuYWdlcgorICovCitf
Q2FtZXJhc19hcmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIkFyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIiXS5wcm90b3R5cGUuYWRkR2Ft
ZXBhZCA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLmFkZChuZXcgX0NhbWVyYXNfSW5wdXRzX2Fy
Y1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJB
cmNSb3RhdGVDYW1lcmFHYW1lcGFkSW5wdXQiXSgpKTsKKyAgICByZXR1cm4gdGhpczsKK307Cisv
KioKKyAgKiBEZWZpbmVzIHRoZSBnYW1lcGFkIHNjZW5lIGNvbXBvbmVudCByZXNwb25zaWJsZSB0
byBtYW5hZ2UgZ2FtZXBhZHMgaW4gYSBnaXZlbiBzY2VuZQorICAqLwordmFyIEdhbWVwYWRTeXN0
ZW1TY2VuZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgZm9yIHRoZSBn
aXZlbiBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0byByZWdp
c3RlciB0aGUgY29tcG9uZW50IGluCisgICAgICovCisgICAgZnVuY3Rpb24gR2FtZXBhZFN5c3Rl
bVNjZW5lQ29tcG9uZW50KHNjZW5lKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY29t
cG9uZW50IG5hbWUgaGVscGZ1bGwgdG8gaWRlbnRpZnkgdGhlIGNvbXBvbmVudCBpbiB0aGUgbGlz
dCBvZiBzY2VuZSBjb21wb25lbnRzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5uYW1lID0g
X3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lQ29tcG9u
ZW50Q29uc3RhbnRzIl0uTkFNRV9HQU1FUEFEOworICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7
CisgICAgfQorICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyB0aGUgY29tcG9uZW50IGluIGEgZ2l2
ZW4gc2NlbmUKKyAgICAgKi8KKyAgICBHYW1lcGFkU3lzdGVtU2NlbmVDb21wb25lbnQucHJvdG90
eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLnNjZW5lLl9iZWZvcmVD
YW1lcmFVcGRhdGVTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9CRUZPUkVD
QU1FUkFVUERBVEVfR0FNRVBBRCwgdGhpcywgdGhpcy5fYmVmb3JlQ2FtZXJhVXBkYXRlKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJlYnVpbGRzIHRoZSBlbGVtZW50cyByZWxhdGVkIHRvIHRo
aXMgY29tcG9uZW50IGluIGNhc2Ugb2YKKyAgICAgKiBjb250ZXh0IGxvc3QgZm9yIGluc3RhbmNl
LgorICAgICAqLworICAgIEdhbWVwYWRTeXN0ZW1TY2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVi
dWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gTm90aGluZyB0byBkbyBmb3IgZ2FtZXBh
ZHMKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBjb21wb25lbnQgYW5kIHRo
ZSBhc3NvY2lhdGVkIHJlc3NvdXJjZXMKKyAgICAgKi8KKyAgICBHYW1lcGFkU3lzdGVtU2NlbmVD
b21wb25lbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBn
YW1lcGFkTWFuYWdlciA9IHRoaXMuc2NlbmUuX2dhbWVwYWRNYW5hZ2VyOworICAgICAgICBpZiAo
Z2FtZXBhZE1hbmFnZXIpIHsKKyAgICAgICAgICAgIGdhbWVwYWRNYW5hZ2VyLmRpc3Bvc2UoKTsK
KyAgICAgICAgICAgIHRoaXMuc2NlbmUuX2dhbWVwYWRNYW5hZ2VyID0gbnVsbDsKKyAgICAgICAg
fQorICAgIH07CisgICAgR2FtZXBhZFN5c3RlbVNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5fYmVm
b3JlQ2FtZXJhVXBkYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgZ2FtZXBhZE1hbmFn
ZXIgPSB0aGlzLnNjZW5lLl9nYW1lcGFkTWFuYWdlcjsKKyAgICAgICAgaWYgKGdhbWVwYWRNYW5h
Z2VyICYmIGdhbWVwYWRNYW5hZ2VyLl9pc01vbml0b3JpbmcpIHsKKyAgICAgICAgICAgIGdhbWVw
YWRNYW5hZ2VyLl9jaGVja0dhbWVwYWRzU3RhdHVzKCk7CisgICAgICAgIH0KKyAgICB9OworICAg
IHJldHVybiBHYW1lcGFkU3lzdGVtU2NlbmVDb21wb25lbnQ7Cit9KCkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL0dhbWVwYWRzL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vR2FtZXBhZHMvaW5kZXgudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN0aWNrVmFsdWVz
LCBHYW1lcGFkLCBHZW5lcmljUGFkLCBHYW1lcGFkTWFuYWdlciwgR2FtZXBhZFN5c3RlbVNjZW5l
Q29tcG9uZW50LCBYYm94MzYwQnV0dG9uLCBYYm94MzYwRHBhZCwgWGJveDM2MFBhZCwgRHVhbFNo
b2NrQnV0dG9uLCBEdWFsU2hvY2tEcGFkLCBEdWFsU2hvY2tQYWQsIERheWRyZWFtQ29udHJvbGxl
ciwgR2VhclZSQ29udHJvbGxlciwgR2VuZXJpY0NvbnRyb2xsZXIsIE9jdWx1c1RvdWNoQ29udHJv
bGxlciwgUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZSwgUG9zZUVuYWJsZWRDb250cm9sbGVySGVs
cGVyLCBQb3NlRW5hYmxlZENvbnRyb2xsZXIsIFZpdmVDb250cm9sbGVyLCBXZWJWUkNvbnRyb2xs
ZXIsIFdpbmRvd3NNb3Rpb25Db250cm9sbGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfQ29udHJvbGxlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQ29udHJvbGxlcnMvaW5kZXggKi8g
Ii4vR2FtZXBhZHMvQ29udHJvbGxlcnMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGF5
ZHJlYW1Db250cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ29udHJvbGxlcnNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRGF5ZHJlYW1Db250cm9sbGVyIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkdlYXJWUkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9Db250cm9sbGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHZWFyVlJD
b250cm9sbGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdlbmVyaWNDb250cm9sbGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfQ29udHJvbGxlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siR2VuZXJpY0NvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
T2N1bHVzVG91Y2hDb250cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ29udHJvbGxlcnNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2N1bHVzVG91Y2hDb250cm9sbGVy
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc2VFbmFibGVkQ29udHJvbGxlclR5cGUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9Db250cm9sbGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXJUeXBlIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0NvbnRyb2xsZXJzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvc2VFbmFi
bGVkQ29udHJvbGxlckhlbHBlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NlRW5hYmxl
ZENvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Db250cm9sbGVyc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXIiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiVml2ZUNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9D
b250cm9sbGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWaXZlQ29udHJv
bGxlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJWUkNvbnRyb2xsZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9Db250cm9sbGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJXZWJWUkNvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2luZG93c01v
dGlvbkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Db250cm9sbGVyc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXaW5kb3dzTW90aW9uQ29udHJvbGxlciJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2dhbWVwYWQgKi8gIi4vR2Ft
ZXBhZHMvZ2FtZXBhZC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGlja1ZhbHVlcyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU3Rp
Y2tWYWx1ZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2FtZXBhZCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siR2FtZXBhZCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJHZW5lcmljUGFkIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfZ2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJHZW5lcmljUGFkIl07IH0p
OworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2dhbWVwYWRNYW5hZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2dhbWVwYWRNYW5h
Z2VyICovICIuL0dhbWVwYWRzL2dhbWVwYWRNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkdhbWVwYWRNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZ2FtZXBhZE1hbmFnZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR2FtZXBhZE1hbmFnZXIiXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfZ2FtZXBhZFNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2dhbWVwYWRTY2VuZUNv
bXBvbmVudCAqLyAiLi9HYW1lcGFkcy9nYW1lcGFkU2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiR2FtZXBhZFN5c3RlbVNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfZ2FtZXBhZFNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkdhbWVwYWRTeXN0ZW1TY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF94Ym94R2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi94Ym94R2FtZXBhZCAqLyAiLi9HYW1lcGFkcy94Ym94R2FtZXBh
ZC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJYYm94MzYwQnV0dG9uIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfeGJveEdhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siWGJveDM2MEJ1
dHRvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJYYm94MzYwRHBhZCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX3hib3hHYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlhib3gz
NjBEcGFkIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlhib3gzNjBQYWQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF94Ym94R2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJYYm94
MzYwUGFkIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2R1YWxTaG9ja0dhbWVw
YWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vZHVhbFNob2NrR2FtZXBhZCAqLyAiLi9HYW1lcGFkcy9kdWFsU2hvY2tHYW1lcGFkLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkR1YWxTaG9ja0J1dHRvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2R1YWxTaG9ja0dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRHVhbFNob2Nr
QnV0dG9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkR1YWxTaG9ja0RwYWQiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9kdWFsU2hvY2tHYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIkR1YWxTaG9ja0RwYWQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRHVhbFNob2NrUGFk
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZHVhbFNob2NrR2FtZXBhZF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJEdWFsU2hvY2tQYWQiXTsgfSk7CisKKworCisKKworCisKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vR2FtZXBhZHMveGJveEdhbWVwYWQudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HYW1lcGFkcy94Ym94R2FtZXBh
ZC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogWGJveDM2MEJ1dHRvbiwgWGJveDM2MERwYWQsIFhib3gzNjBQYWQgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiWGJveDM2MEJ1dHRvbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gWGJveDM2MEJ1dHRvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJYYm94
MzYwRHBhZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gWGJveDM2MERwYWQ7IH0pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiWGJveDM2MFBhZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gWGJveDM2MFBhZDsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9HYW1lcGFkc19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9HYW1lcGFkcy9nYW1lcGFk
ICovICIuL0dhbWVwYWRzL2dhbWVwYWQudHMiKTsKKworCisKKy8qKgorICogRGVmaW5lcyBzdXBw
b3J0ZWQgYnV0dG9ucyBmb3IgWEJveDM2MCBjb21wYXRpYmxlIGdhbWVwYWRzCisgKi8KK3ZhciBY
Ym94MzYwQnV0dG9uOworKGZ1bmN0aW9uIChYYm94MzYwQnV0dG9uKSB7CisgICAgLyoqIEEgKi8K
KyAgICBYYm94MzYwQnV0dG9uW1hib3gzNjBCdXR0b25bIkEiXSA9IDBdID0gIkEiOworICAgIC8q
KiBCICovCisgICAgWGJveDM2MEJ1dHRvbltYYm94MzYwQnV0dG9uWyJCIl0gPSAxXSA9ICJCIjsK
KyAgICAvKiogWCAqLworICAgIFhib3gzNjBCdXR0b25bWGJveDM2MEJ1dHRvblsiWCJdID0gMl0g
PSAiWCI7CisgICAgLyoqIFkgKi8KKyAgICBYYm94MzYwQnV0dG9uW1hib3gzNjBCdXR0b25bIlki
XSA9IDNdID0gIlkiOworICAgIC8qKiBTdGFydCAqLworICAgIFhib3gzNjBCdXR0b25bWGJveDM2
MEJ1dHRvblsiU3RhcnQiXSA9IDRdID0gIlN0YXJ0IjsKKyAgICAvKiogQmFjayAqLworICAgIFhi
b3gzNjBCdXR0b25bWGJveDM2MEJ1dHRvblsiQmFjayJdID0gNV0gPSAiQmFjayI7CisgICAgLyoq
IExlZnQgYnV0dG9uICovCisgICAgWGJveDM2MEJ1dHRvbltYYm94MzYwQnV0dG9uWyJMQiJdID0g
Nl0gPSAiTEIiOworICAgIC8qKiBSaWdodCBidXR0b24gKi8KKyAgICBYYm94MzYwQnV0dG9uW1hi
b3gzNjBCdXR0b25bIlJCIl0gPSA3XSA9ICJSQiI7CisgICAgLyoqIExlZnQgc3RpY2sgKi8KKyAg
ICBYYm94MzYwQnV0dG9uW1hib3gzNjBCdXR0b25bIkxlZnRTdGljayJdID0gOF0gPSAiTGVmdFN0
aWNrIjsKKyAgICAvKiogUmlnaHQgc3RpY2sgKi8KKyAgICBYYm94MzYwQnV0dG9uW1hib3gzNjBC
dXR0b25bIlJpZ2h0U3RpY2siXSA9IDldID0gIlJpZ2h0U3RpY2siOworfSkoWGJveDM2MEJ1dHRv
biB8fCAoWGJveDM2MEJ1dHRvbiA9IHt9KSk7CisvKiogRGVmaW5lcyB2YWx1ZXMgZm9yIFhCb3gz
NjAgRFBhZCAgKi8KK3ZhciBYYm94MzYwRHBhZDsKKyhmdW5jdGlvbiAoWGJveDM2MERwYWQpIHsK
KyAgICAvKiogVXAgKi8KKyAgICBYYm94MzYwRHBhZFtYYm94MzYwRHBhZFsiVXAiXSA9IDBdID0g
IlVwIjsKKyAgICAvKiogRG93biAqLworICAgIFhib3gzNjBEcGFkW1hib3gzNjBEcGFkWyJEb3du
Il0gPSAxXSA9ICJEb3duIjsKKyAgICAvKiogTGVmdCAqLworICAgIFhib3gzNjBEcGFkW1hib3gz
NjBEcGFkWyJMZWZ0Il0gPSAyXSA9ICJMZWZ0IjsKKyAgICAvKiogUmlnaHQgKi8KKyAgICBYYm94
MzYwRHBhZFtYYm94MzYwRHBhZFsiUmlnaHQiXSA9IDNdID0gIlJpZ2h0IjsKK30pKFhib3gzNjBE
cGFkIHx8IChYYm94MzYwRHBhZCA9IHt9KSk7CisvKioKKyAqIERlZmluZXMgYSBYQm94MzYwIGdh
bWVwYWQKKyAqLwordmFyIFhib3gzNjBQYWQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1
cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRz
Il0oWGJveDM2MFBhZCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFhC
b3gzNjAgZ2FtZXBhZCBvYmplY3QKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgaWQgb2Yg
dGhpcyBnYW1lcGFkCisgICAgICogQHBhcmFtIGluZGV4IGRlZmluZXMgaXRzIGluZGV4CisgICAg
ICogQHBhcmFtIGdhbWVwYWQgZGVmaW5lcyB0aGUgaW50ZXJuYWwgSFRNTCBnYW1lcGFkIG9iamVj
dAorICAgICAqIEBwYXJhbSB4Ym94T25lIGRlZmluZXMgaWYgaXQgaXMgYSBYQm94IE9uZSBnYW1l
cGFkCisgICAgICovCisgICAgZnVuY3Rpb24gWGJveDM2MFBhZChpZCwgaW5kZXgsIGdhbWVwYWQs
IHhib3hPbmUpIHsKKyAgICAgICAgaWYgKHhib3hPbmUgPT09IHZvaWQgMCkgeyB4Ym94T25lID0g
ZmFsc2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgaWQsIGluZGV4
LCBnYW1lcGFkLCAwLCAxLCAyLCAzKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fbGVmdFRyaWdn
ZXIgPSAwOworICAgICAgICBfdGhpcy5fcmlnaHRUcmlnZ2VyID0gMDsKKyAgICAgICAgLyoqIE9i
c2VydmFibGUgcmFpc2VkIHdoZW4gYSBidXR0b24gaXMgcHJlc3NlZCAqLworICAgICAgICBfdGhp
cy5vbkJ1dHRvbkRvd25PYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKiBPYnNlcnZh
YmxlIHJhaXNlZCB3aGVuIGEgYnV0dG9uIGlzIHJlbGVhc2VkICovCisgICAgICAgIF90aGlzLm9u
QnV0dG9uVXBPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKiBPYnNlcnZhYmxlIHJh
aXNlZCB3aGVuIGEgcGFkIGlzIHByZXNzZWQgKi8KKyAgICAgICAgX3RoaXMub25QYWREb3duT2Jz
ZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKiogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiBh
IHBhZCBpcyByZWxlYXNlZCAqLworICAgICAgICBfdGhpcy5vblBhZFVwT2JzZXJ2YWJsZSA9IG5l
dyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFi
bGUiXSgpOworICAgICAgICBfdGhpcy5fYnV0dG9uQSA9IDA7CisgICAgICAgIF90aGlzLl9idXR0
b25CID0gMDsKKyAgICAgICAgX3RoaXMuX2J1dHRvblggPSAwOworICAgICAgICBfdGhpcy5fYnV0
dG9uWSA9IDA7CisgICAgICAgIF90aGlzLl9idXR0b25CYWNrID0gMDsKKyAgICAgICAgX3RoaXMu
X2J1dHRvblN0YXJ0ID0gMDsKKyAgICAgICAgX3RoaXMuX2J1dHRvbkxCID0gMDsKKyAgICAgICAg
X3RoaXMuX2J1dHRvblJCID0gMDsKKyAgICAgICAgX3RoaXMuX2J1dHRvbkxlZnRTdGljayA9IDA7
CisgICAgICAgIF90aGlzLl9idXR0b25SaWdodFN0aWNrID0gMDsKKyAgICAgICAgX3RoaXMuX2RQ
YWRVcCA9IDA7CisgICAgICAgIF90aGlzLl9kUGFkRG93biA9IDA7CisgICAgICAgIF90aGlzLl9k
UGFkTGVmdCA9IDA7CisgICAgICAgIF90aGlzLl9kUGFkUmlnaHQgPSAwOworICAgICAgICBfdGhp
cy5faXNYYm94T25lUGFkID0gZmFsc2U7CisgICAgICAgIF90aGlzLnR5cGUgPSBfR2FtZXBhZHNf
Z2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHYW1lcGFkIl0uWEJPWDsKKyAg
ICAgICAgX3RoaXMuX2lzWGJveE9uZVBhZCA9IHhib3hPbmU7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gY2FsbCB3
aGVuIGxlZnQgdHJpZ2dlciBpcyBwcmVzc2VkCisgICAgICogQHBhcmFtIGNhbGxiYWNrIGRlZmlu
ZXMgdGhlIGNhbGxiYWNrIHRvIHVzZQorICAgICAqLworICAgIFhib3gzNjBQYWQucHJvdG90eXBl
Lm9ubGVmdHRyaWdnZXJjaGFuZ2VkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgIHRo
aXMuX29ubGVmdHRyaWdnZXJjaGFuZ2VkID0gY2FsbGJhY2s7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gcmlnaHQgdHJpZ2dlciBpcyBw
cmVzc2VkCisgICAgICogQHBhcmFtIGNhbGxiYWNrIGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIHVz
ZQorICAgICAqLworICAgIFhib3gzNjBQYWQucHJvdG90eXBlLm9ucmlnaHR0cmlnZ2VyY2hhbmdl
ZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9vbnJpZ2h0dHJpZ2dlcmNo
YW5nZWQgPSBjYWxsYmFjazsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYYm94
MzYwUGFkLnByb3RvdHlwZSwgImxlZnRUcmlnZ2VyIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgbGVmdCB0cmlnZ2VyIHZhbHVlCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZWZ0VHJpZ2dlcjsKKyAg
ICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGxlZnQgdHJpZ2dlciB2
YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9vbmxlZnR0cmlnZ2VyY2hhbmdlZCAmJiB0aGlzLl9sZWZ0VHJp
Z2dlciAhPT0gbmV3VmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbmxlZnR0cmlnZ2Vy
Y2hhbmdlZChuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9sZWZ0
VHJpZ2dlciA9IG5ld1ZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoWGJveDM2MFBhZC5wcm90b3R5cGUsICJyaWdodFRyaWdnZXIiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByaWdodCB0cmlnZ2VyIHZhbHVlCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9y
aWdodFRyaWdnZXI7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRo
ZSByaWdodCB0cmlnZ2VyIHZhbHVlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9u
IChuZXdWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX29ucmlnaHR0cmlnZ2VyY2hhbmdl
ZCAmJiB0aGlzLl9yaWdodFRyaWdnZXIgIT09IG5ld1ZhbHVlKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fb25yaWdodHRyaWdnZXJjaGFuZ2VkKG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX3JpZ2h0VHJpZ2dlciA9IG5ld1ZhbHVlOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gYSBi
dXR0b24gaXMgcHJlc3NlZAorICAgICAqIEBwYXJhbSBjYWxsYmFjayBkZWZpbmVzIHRoZSBjYWxs
YmFjayB0byB1c2UKKyAgICAgKi8KKyAgICBYYm94MzYwUGFkLnByb3RvdHlwZS5vbmJ1dHRvbmRv
d24gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5fb25idXR0b25kb3duID0g
Y2FsbGJhY2s7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0
byBjYWxsIHdoZW4gYSBidXR0b24gaXMgcmVsZWFzZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sg
ZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdXNlCisgICAgICovCisgICAgWGJveDM2MFBhZC5wcm90
b3R5cGUub25idXR0b251cCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9v
bmJ1dHRvbnVwID0gY2FsbGJhY2s7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRo
ZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gYSBwYWQgaXMgcHJlc3NlZAorICAgICAqIEBwYXJhbSBj
YWxsYmFjayBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byB1c2UKKyAgICAgKi8KKyAgICBYYm94MzYw
UGFkLnByb3RvdHlwZS5vbmRwYWRkb3duID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAg
IHRoaXMuX29uZHBhZGRvd24gPSBjYWxsYmFjazsKKyAgICB9OworICAgIC8qKgorICAgICAqIERl
ZmluZXMgdGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiBhIHBhZCBpcyByZWxlYXNlZAorICAgICAq
IEBwYXJhbSBjYWxsYmFjayBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byB1c2UKKyAgICAgKi8KKyAg
ICBYYm94MzYwUGFkLnByb3RvdHlwZS5vbmRwYWR1cCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewor
ICAgICAgICB0aGlzLl9vbmRwYWR1cCA9IGNhbGxiYWNrOworICAgIH07CisgICAgWGJveDM2MFBh
ZC5wcm90b3R5cGUuX3NldEJ1dHRvblZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlLCBjdXJyZW50
VmFsdWUsIGJ1dHRvblR5cGUpIHsKKyAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBjdXJyZW50VmFs
dWUpIHsKKyAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gMSkgeworICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9vbmJ1dHRvbmRvd24pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25i
dXR0b25kb3duKGJ1dHRvblR5cGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB0aGlzLm9uQnV0dG9uRG93bk9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGJ1dHRvblR5cGUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSAwKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuX29uYnV0dG9udXApIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5fb25idXR0b251cChidXR0b25UeXBlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdGhpcy5vbkJ1dHRvblVwT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoYnV0dG9u
VHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ld1ZhbHVl
OworICAgIH07CisgICAgWGJveDM2MFBhZC5wcm90b3R5cGUuX3NldERQYWRWYWx1ZSA9IGZ1bmN0
aW9uIChuZXdWYWx1ZSwgY3VycmVudFZhbHVlLCBidXR0b25UeXBlKSB7CisgICAgICAgIGlmIChu
ZXdWYWx1ZSAhPT0gY3VycmVudFZhbHVlKSB7CisgICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09
IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fb25kcGFkZG93bikgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9vbmRwYWRkb3duKGJ1dHRvblR5cGUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB0aGlzLm9uUGFkRG93bk9ic2VydmFibGUubm90aWZ5T2JzZXJ2
ZXJzKGJ1dHRvblR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5ld1ZhbHVl
ID09PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29uZHBhZHVwKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX29uZHBhZHVwKGJ1dHRvblR5cGUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB0aGlzLm9uUGFkVXBPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyhidXR0b25UeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bmV3VmFsdWU7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWGJveDM2MFBhZC5w
cm90b3R5cGUsICJidXR0b25BIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUg
dmFsdWUgb2YgdGhlIGBBYCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvbkE7CisgICAgICAgIH0sCisg
ICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYEFgIGJ1dHRvbgor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IHRoaXMuX2J1dHRvbkEgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9u
QSwgWGJveDM2MEJ1dHRvbi5BKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KFhib3gzNjBQYWQucHJvdG90eXBlLCAiYnV0dG9uQiIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSBgQmAgYnV0dG9uCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9i
dXR0b25COworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgdmFs
dWUgb2YgdGhlIGBCYCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9idXR0b25CID0gdGhpcy5fc2V0QnV0dG9uVmFs
dWUodmFsdWUsIHRoaXMuX2J1dHRvbkIsIFhib3gzNjBCdXR0b24uQik7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYYm94MzYwUGFkLnByb3RvdHlwZSwgImJ1
dHRvblgiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUg
YFhgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uWDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBgWGAgYnV0dG9uCisgICAgICAgICAqLwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYnV0dG9u
WCA9IHRoaXMuX3NldEJ1dHRvblZhbHVlKHZhbHVlLCB0aGlzLl9idXR0b25YLCBYYm94MzYwQnV0
dG9uLlgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWGJv
eDM2MFBhZC5wcm90b3R5cGUsICJidXR0b25ZIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBZYCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblk7CisgICAg
ICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYFlg
IGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2J1dHRvblkgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhp
cy5fYnV0dG9uWSwgWGJveDM2MEJ1dHRvbi5ZKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFhib3gzNjBQYWQucHJvdG90eXBlLCAiYnV0dG9uU3RhcnQiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYFN0YXJ0YCBi
dXR0b24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2J1dHRvblN0YXJ0OworICAgICAgICB9LAorICAgICAgICAvKioKKyAg
ICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBTdGFydGAgYnV0dG9uCisgICAgICAgICAq
LworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYnV0
dG9uU3RhcnQgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uU3RhcnQs
IFhib3gzNjBCdXR0b24uU3RhcnQpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoWGJveDM2MFBhZC5wcm90b3R5cGUsICJidXR0b25CYWNrIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBCYWNrYCBidXR0b24KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2J1dHRvbkJhY2s7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBT
ZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYEJhY2tgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvbkJhY2sgPSB0
aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uQmFjaywgWGJveDM2MEJ1dHRv
bi5CYWNrKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhi
b3gzNjBQYWQucHJvdG90eXBlLCAiYnV0dG9uTEIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYExlZnRgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uTEI7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0
aGUgYExlZnRgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvbkxCID0gdGhpcy5fc2V0QnV0dG9uVmFsdWUo
dmFsdWUsIHRoaXMuX2J1dHRvbkxCLCBYYm94MzYwQnV0dG9uLkxCKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhib3gzNjBQYWQucHJvdG90eXBlLCAiYnV0
dG9uUkIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUg
YFJpZ2h0YCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblJCOworICAgICAgICB9LAorICAgICAgICAv
KioKKyAgICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBSaWdodGAgYnV0dG9uCisgICAg
ICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhp
cy5fYnV0dG9uUkIgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uUkIs
IFhib3gzNjBCdXR0b24uUkIpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoWGJveDM2MFBhZC5wcm90b3R5cGUsICJidXR0b25MZWZ0U3RpY2siLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgTGVmdCBqb3lzdGljawor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fYnV0dG9uTGVmdFN0aWNrOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAg
ICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIExlZnQgam95c3RpY2sKKyAgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9idXR0b25M
ZWZ0U3RpY2sgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uTGVmdFN0
aWNrLCBYYm94MzYwQnV0dG9uLkxlZnRTdGljayk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShYYm94MzYwUGFkLnByb3RvdHlwZSwgImJ1dHRvblJpZ2h0U3Rp
Y2siLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgUmln
aHQgam95c3RpY2sKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblJpZ2h0U3RpY2s7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgUmlnaHQgam95c3RpY2sK
KyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLl9idXR0b25SaWdodFN0aWNrID0gdGhpcy5fc2V0QnV0dG9uVmFsdWUodmFsdWUsIHRo
aXMuX2J1dHRvblJpZ2h0U3RpY2ssIFhib3gzNjBCdXR0b24uUmlnaHRTdGljayk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYYm94MzYwUGFkLnByb3RvdHlw
ZSwgImRQYWRVcCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHZhbHVlIG9m
IEQtcGFkIHVwCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9kUGFkVXA7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBELXBhZCB1cAorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2RQYWRVcCA9IHRoaXMu
X3NldERQYWRWYWx1ZSh2YWx1ZSwgdGhpcy5fZFBhZFVwLCBYYm94MzYwRHBhZC5VcCk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYYm94MzYwUGFkLnByb3Rv
dHlwZSwgImRQYWREb3duIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdmFs
dWUgb2YgRC1wYWQgZG93bgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZFBhZERvd247CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBELXBhZCBkb3duCisgICAgICAgICAq
LworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fZFBh
ZERvd24gPSB0aGlzLl9zZXREUGFkVmFsdWUodmFsdWUsIHRoaXMuX2RQYWREb3duLCBYYm94MzYw
RHBhZC5Eb3duKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFhib3gzNjBQYWQucHJvdG90eXBlLCAiZFBhZExlZnQiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiBELXBhZCBsZWZ0CisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kUGFkTGVmdDsKKyAg
ICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIEQtcGFk
IGxlZnQKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICB0aGlzLl9kUGFkTGVmdCA9IHRoaXMuX3NldERQYWRWYWx1ZSh2YWx1ZSwgdGhpcy5f
ZFBhZExlZnQsIFhib3gzNjBEcGFkLkxlZnQpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoWGJveDM2MFBhZC5wcm90b3R5cGUsICJkUGFkUmlnaHQiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiBELXBhZCByaWdodAorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fZFBhZFJpZ2h0OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0
cyB0aGUgdmFsdWUgb2YgRC1wYWQgcmlnaHQKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9kUGFkUmlnaHQgPSB0aGlzLl9zZXRE
UGFkVmFsdWUodmFsdWUsIHRoaXMuX2RQYWRSaWdodCwgWGJveDM2MERwYWQuUmlnaHQpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSB0aGUgZ2FtZXBhZCB0byBzeW5j
aHJvbml6ZSB3aXRoIGRldmljZSB2YWx1ZXMKKyAgICAgKi8KKyAgICBYYm94MzYwUGFkLnByb3Rv
dHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUudXBk
YXRlLmNhbGwodGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9pc1hib3hPbmVQYWQpIHsKKyAgICAg
ICAgICAgIHRoaXMuYnV0dG9uQSA9IHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9uc1swXS52YWx1
ZTsKKyAgICAgICAgICAgIHRoaXMuYnV0dG9uQiA9IHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9u
c1sxXS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYnV0dG9uWCA9IHRoaXMuYnJvd3NlckdhbWVw
YWQuYnV0dG9uc1syXS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYnV0dG9uWSA9IHRoaXMuYnJv
d3NlckdhbWVwYWQuYnV0dG9uc1szXS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYnV0dG9uTEIg
PSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbNF0udmFsdWU7CisgICAgICAgICAgICB0aGlz
LmJ1dHRvblJCID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzVdLnZhbHVlOworICAgICAg
ICAgICAgdGhpcy5sZWZ0VHJpZ2dlciA9IHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9uc1s2XS52
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMucmlnaHRUcmlnZ2VyID0gdGhpcy5icm93c2VyR2FtZXBh
ZC5idXR0b25zWzddLnZhbHVlOworICAgICAgICAgICAgdGhpcy5idXR0b25CYWNrID0gdGhpcy5i
cm93c2VyR2FtZXBhZC5idXR0b25zWzhdLnZhbHVlOworICAgICAgICAgICAgdGhpcy5idXR0b25T
dGFydCA9IHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9uc1s5XS52YWx1ZTsKKyAgICAgICAgICAg
IHRoaXMuYnV0dG9uTGVmdFN0aWNrID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzEwXS52
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYnV0dG9uUmlnaHRTdGljayA9IHRoaXMuYnJvd3Nlckdh
bWVwYWQuYnV0dG9uc1sxMV0udmFsdWU7CisgICAgICAgICAgICB0aGlzLmRQYWRVcCA9IHRoaXMu
YnJvd3NlckdhbWVwYWQuYnV0dG9uc1sxMl0udmFsdWU7CisgICAgICAgICAgICB0aGlzLmRQYWRE
b3duID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzEzXS52YWx1ZTsKKyAgICAgICAgICAg
IHRoaXMuZFBhZExlZnQgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbMTRdLnZhbHVlOwor
ICAgICAgICAgICAgdGhpcy5kUGFkUmlnaHQgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNb
MTVdLnZhbHVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5i
dXR0b25BID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzBdLnZhbHVlOworICAgICAgICAg
ICAgdGhpcy5idXR0b25CID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzFdLnZhbHVlOwor
ICAgICAgICAgICAgdGhpcy5idXR0b25YID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzJd
LnZhbHVlOworICAgICAgICAgICAgdGhpcy5idXR0b25ZID0gdGhpcy5icm93c2VyR2FtZXBhZC5i
dXR0b25zWzNdLnZhbHVlOworICAgICAgICAgICAgdGhpcy5idXR0b25MQiA9IHRoaXMuYnJvd3Nl
ckdhbWVwYWQuYnV0dG9uc1s0XS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYnV0dG9uUkIgPSB0
aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbNV0udmFsdWU7CisgICAgICAgICAgICB0aGlzLmxl
ZnRUcmlnZ2VyID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzZdLnZhbHVlOworICAgICAg
ICAgICAgdGhpcy5yaWdodFRyaWdnZXIgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbN10u
dmFsdWU7CisgICAgICAgICAgICB0aGlzLmJ1dHRvbkJhY2sgPSB0aGlzLmJyb3dzZXJHYW1lcGFk
LmJ1dHRvbnNbOF0udmFsdWU7CisgICAgICAgICAgICB0aGlzLmJ1dHRvblN0YXJ0ID0gdGhpcy5i
cm93c2VyR2FtZXBhZC5idXR0b25zWzldLnZhbHVlOworICAgICAgICAgICAgdGhpcy5idXR0b25M
ZWZ0U3RpY2sgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbMTBdLnZhbHVlOworICAgICAg
ICAgICAgdGhpcy5idXR0b25SaWdodFN0aWNrID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25z
WzExXS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuZFBhZFVwID0gdGhpcy5icm93c2VyR2FtZXBh
ZC5idXR0b25zWzEyXS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuZFBhZERvd24gPSB0aGlzLmJy
b3dzZXJHYW1lcGFkLmJ1dHRvbnNbMTNdLnZhbHVlOworICAgICAgICAgICAgdGhpcy5kUGFkTGVm
dCA9IHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9uc1sxNF0udmFsdWU7CisgICAgICAgICAgICB0
aGlzLmRQYWRSaWdodCA9IHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9uc1sxNV0udmFsdWU7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBnYW1lcGFkCisg
ICAgICovCisgICAgWGJveDM2MFBhZC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7CisgICAgICAgIHRo
aXMub25CdXR0b25Eb3duT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQnV0dG9u
VXBPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25QYWREb3duT2JzZXJ2YWJsZS5j
bGVhcigpOworICAgICAgICB0aGlzLm9uUGFkVXBPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgfTsK
KyAgICByZXR1cm4gWGJveDM2MFBhZDsKK30oX0dhbWVwYWRzX2dhbWVwYWRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siR2FtZXBhZCJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vR2l6bW9zL2F4aXNEcmFnR2l6bW8udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9HaXptb3MvYXhpc0RyYWdHaXptby50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
QXhpc0RyYWdHaXptbyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBeGlz
RHJhZ0dpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBeGlzRHJhZ0dpem1vOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90
c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAi
Li9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNo
ZXNfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL3RyYW5zZm9ybU5vZGUgKi8gIi4vTWVzaGVzL3RyYW5z
Zm9ybU5vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJz
X2N5bGluZGVyQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL0J1aWxkZXJzL2N5bGluZGVyQnVpbGRlciAqLyAiLi9N
ZXNoZXMvQnVpbGRlcnMvY3lsaW5kZXJCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0JlaGF2aW9yc19NZXNoZXNfcG9pbnRlckRyYWdCZWhhdmlvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQmVoYXZpb3JzL01l
c2hlcy9wb2ludGVyRHJhZ0JlaGF2aW9yICovICIuL0JlaGF2aW9ycy9NZXNoZXMvcG9pbnRlckRy
YWdCZWhhdmlvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9naXptb19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9naXptbyAq
LyAiLi9HaXptb3MvZ2l6bW8udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUmVuZGVy
aW5nX3V0aWxpdHlMYXllclJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9SZW5kZXJpbmcvdXRpbGl0eUxheWVyUmVuZGVyZXIg
Ki8gIi4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJlbmRlcmVyLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc3RhbmRh
cmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICov
ICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKworCisKKworCisKKworCisKKworLyoqCisgKiBT
aW5nbGUgYXhpcyBkcmFnIGdpem1vCisgKi8KK3ZhciBBeGlzRHJhZ0dpem1vID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKEF4aXNEcmFnR2l6bW8sIF9zdXBlcik7CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhbiBBeGlzRHJhZ0dpem1vCisgICAgICogQHBhcmFtIGdpem1vTGF5ZXIg
VGhlIHV0aWxpdHkgbGF5ZXIgdGhlIGdpem1vIHdpbGwgYmUgYWRkZWQgdG8KKyAgICAgKiBAcGFy
YW0gZHJhZ0F4aXMgVGhlIGF4aXMgd2hpY2ggdGhlIGdpem1vIHdpbGwgYmUgYWJsZSB0byBkcmFn
IG9uCisgICAgICogQHBhcmFtIGNvbG9yIFRoZSBjb2xvciBvZiB0aGUgZ2l6bW8KKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBBeGlzRHJhZ0dpem1vKGRyYWdBeGlzLCBjb2xvciwgZ2l6bW9MYXllciwg
cGFyZW50KSB7CisgICAgICAgIGlmIChjb2xvciA9PT0gdm9pZCAwKSB7IGNvbG9yID0gX01hdGhz
X21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ29sb3IzIl0uR3JheSgp
OyB9CisgICAgICAgIGlmIChnaXptb0xheWVyID09PSB2b2lkIDApIHsgZ2l6bW9MYXllciA9IF9S
ZW5kZXJpbmdfdXRpbGl0eUxheWVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
X1siVXRpbGl0eUxheWVyUmVuZGVyZXIiXS5EZWZhdWx0VXRpbGl0eUxheWVyOyB9CisgICAgICAg
IGlmIChwYXJlbnQgPT09IHZvaWQgMCkgeyBwYXJlbnQgPSBudWxsOyB9CisgICAgICAgIHZhciBf
dGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGdpem1vTGF5ZXIpIHx8IHRoaXM7CisgICAgICAgIF90
aGlzLl9wb2ludGVyT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogRHJh
ZyBkaXN0YW5jZSBpbiBiYWJ5bG9uIHVuaXRzIHRoYXQgdGhlIGdpem1vIHdpbGwgc25hcCB0byB3
aGVuIGRyYWdnZWQgKERlZmF1bHQ6IDApCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5zbmFw
RGlzdGFuY2UgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogRXZlbnQgdGhhdCBmaXJlcyBl
YWNoIHRpbWUgdGhlIGdpem1vIHNuYXBzIHRvIGEgbmV3IGxvY2F0aW9uLgorICAgICAgICAgKiAq
IHNuYXBEaXN0YW5jZSBpcyB0aGUgdGhlIGNoYW5nZSBpbiBkaXN0YW5jZQorICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMub25TbmFwT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhp
cy5faXNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX3BhcmVudCA9IG51bGw7CisgICAg
ICAgIF90aGlzLl9wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIC8vIENyZWF0ZSBNYXRlcmlhbAor
ICAgICAgICBfdGhpcy5fY29sb3JlZE1hdGVyaWFsID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRhcmRN
YXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJTdGFuZGFyZE1hdGVyaWFsIl0o
IiIsIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpOworICAgICAgICBfdGhpcy5fY29sb3Jl
ZE1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGNvbG9yOworICAgICAgICBfdGhpcy5fY29sb3JlZE1h
dGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBjb2xvci5zdWJ0cmFjdChuZXcgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ29sb3IzIl0oMC4xLCAwLjEsIDAuMSkp
OworICAgICAgICBfdGhpcy5faG92ZXJNYXRlcmlhbCA9IG5ldyBfTWF0ZXJpYWxzX3N0YW5kYXJk
TWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siU3RhbmRhcmRNYXRlcmlhbCJd
KCIiLCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKTsKKyAgICAgICAgX3RoaXMuX2hvdmVy
TWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gY29sb3IuYWRkKG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJDb2xvcjMiXSgwLjMsIDAuMywgMC4zKSk7Cisg
ICAgICAgIC8vIEJ1aWxkIG1lc2ggb24gcm9vdCBub2RlCisgICAgICAgIF90aGlzLl9hcnJvdyA9
IEF4aXNEcmFnR2l6bW8uX0NyZWF0ZUFycm93KGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUs
IF90aGlzLl9jb2xvcmVkTWF0ZXJpYWwpOworICAgICAgICBfdGhpcy5fYXJyb3cubG9va0F0KF90
aGlzLl9yb290TWVzaC5wb3NpdGlvbi5hZGQoZHJhZ0F4aXMpKTsKKyAgICAgICAgX3RoaXMuX2Fy
cm93LnNjYWxpbmcuc2NhbGVJblBsYWNlKDEgLyAzKTsKKyAgICAgICAgX3RoaXMuX2Fycm93LnBh
cmVudCA9IF90aGlzLl9yb290TWVzaDsKKyAgICAgICAgdmFyIGN1cnJlbnRTbmFwRHJhZ0Rpc3Rh
bmNlID0gMDsKKyAgICAgICAgdmFyIHRtcFZlY3RvciA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKCk7CisgICAgICAgIHZhciB0
bXBTbmFwRXZlbnQgPSB7IHNuYXBEaXN0YW5jZTogMCB9OworICAgICAgICAvLyBBZGQgZHJhZyBi
ZWhhdmlvciB0byBoYW5kbGUgZXZlbnRzIHdoZW4gdGhlIGdpem1vIGlzIGRyYWdnZWQKKyAgICAg
ICAgX3RoaXMuZHJhZ0JlaGF2aW9yID0gbmV3IF9CZWhhdmlvcnNfTWVzaGVzX3BvaW50ZXJEcmFn
QmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUG9pbnRlckRyYWdCZWhhdmlv
ciJdKHsgZHJhZ0F4aXM6IGRyYWdBeGlzIH0pOworICAgICAgICBfdGhpcy5kcmFnQmVoYXZpb3Iu
bW92ZUF0dGFjaGVkID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9yb290TWVzaC5hZGRCZWhhdmlv
cihfdGhpcy5kcmFnQmVoYXZpb3IpOworICAgICAgICB2YXIgbG9jYWxEZWx0YSA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKCk7
CisgICAgICAgIHZhciB0bXBNYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdKCk7CisgICAgICAgIF90aGlzLmRyYWdCZWhh
dmlvci5vbkRyYWdPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAg
IGlmIChfdGhpcy5hdHRhY2hlZE1lc2gpIHsKKyAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGRl
bHRhIHRvIGxvY2FsIHRyYW5zbGF0aW9uIGlmIGl0IGhhcyBhIHBhcmVudAorICAgICAgICAgICAg
ICAgIGlmIChfdGhpcy5hdHRhY2hlZE1lc2gucGFyZW50KSB7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLmF0dGFjaGVkTWVzaC5wYXJlbnQuY29tcHV0ZVdvcmxkTWF0cml4KCkuaW52ZXJ0VG9S
ZWYodG1wTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgdG1wTWF0cml4LnNldFRyYW5zbGF0
aW9uRnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1D
b29yZGluYXRlc1RvUmVmKGV2ZW50LmRlbHRhLCB0bXBNYXRyaXgsIGxvY2FsRGVsdGEpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgbG9jYWxEZWx0YS5jb3B5RnJvbShldmVudC5kZWx0YSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIC8vIFNuYXBwaW5nIGxvZ2ljCisgICAgICAgICAgICAgICAgaWYgKF90
aGlzLnNuYXBEaXN0YW5jZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmF0dGFj
aGVkTWVzaC5wb3NpdGlvbi5hZGRJblBsYWNlKGxvY2FsRGVsdGEpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNu
YXBEcmFnRGlzdGFuY2UgKz0gZXZlbnQuZHJhZ0Rpc3RhbmNlOworICAgICAgICAgICAgICAgICAg
ICBpZiAoTWF0aC5hYnMoY3VycmVudFNuYXBEcmFnRGlzdGFuY2UpID4gX3RoaXMuc25hcERpc3Rh
bmNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHJhZ1N0ZXBzID0gTWF0aC5mbG9v
cihNYXRoLmFicyhjdXJyZW50U25hcERyYWdEaXN0YW5jZSkgLyBfdGhpcy5zbmFwRGlzdGFuY2Up
OworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNuYXBEcmFnRGlzdGFuY2UgPSBjdXJy
ZW50U25hcERyYWdEaXN0YW5jZSAlIF90aGlzLnNuYXBEaXN0YW5jZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2FsRGVsdGEubm9ybWFsaXplVG9SZWYodG1wVmVjdG9yKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRtcFZlY3Rvci5zY2FsZUluUGxhY2UoX3RoaXMuc25hcERpc3RhbmNl
ICogZHJhZ1N0ZXBzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmF0dGFjaGVkTWVz
aC5wb3NpdGlvbi5hZGRJblBsYWNlKHRtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0bXBTbmFwRXZlbnQuc25hcERpc3RhbmNlID0gX3RoaXMuc25hcERpc3RhbmNlICogZHJhZ1N0
ZXBzOworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub25TbmFwT2JzZXJ2YWJsZS5ub3Rp
ZnlPYnNlcnZlcnModG1wU25hcEV2ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLl9w
b2ludGVyT2JzZXJ2ZXIgPSBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lLm9uUG9pbnRlck9i
c2VydmFibGUuYWRkKGZ1bmN0aW9uIChwb2ludGVySW5mbykgeworICAgICAgICAgICAgaWYgKF90
aGlzLl9jdXN0b21NZXNoU2V0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIGlzSG92ZXJlZCA9IHBvaW50ZXJJbmZvLnBpY2tJbmZvICYm
IChfdGhpcy5fcm9vdE1lc2guZ2V0Q2hpbGRNZXNoZXMoKS5pbmRleE9mKHBvaW50ZXJJbmZvLnBp
Y2tJbmZvLnBpY2tlZE1lc2gpICE9IC0xKTsKKyAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IGlz
SG92ZXJlZCA/IF90aGlzLl9ob3Zlck1hdGVyaWFsIDogX3RoaXMuX2NvbG9yZWRNYXRlcmlhbDsK
KyAgICAgICAgICAgIF90aGlzLl9yb290TWVzaC5nZXRDaGlsZE1lc2hlcygpLmZvckVhY2goZnVu
Y3Rpb24gKG0pIHsKKyAgICAgICAgICAgICAgICBtLm1hdGVyaWFsID0gbWF0ZXJpYWw7CisgICAg
ICAgICAgICAgICAgaWYgKG0uY29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgbS5jb2xvciA9
IG1hdGVyaWFsLmRpZmZ1c2VDb2xvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHZhciBsaWdodCA9IGdpem1vTGF5ZXIuX2dldFNoYXJl
ZEdpem1vTGlnaHQoKTsKKyAgICAgICAgbGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVzID0gbGlnaHQu
aW5jbHVkZWRPbmx5TWVzaGVzLmNvbmNhdChfdGhpcy5fcm9vdE1lc2guZ2V0Q2hpbGRNZXNoZXMo
ZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAq
LworICAgIEF4aXNEcmFnR2l6bW8uX0NyZWF0ZUFycm93ID0gZnVuY3Rpb24gKHNjZW5lLCBtYXRl
cmlhbCkgeworICAgICAgICB2YXIgYXJyb3cgPSBuZXcgX01lc2hlc190cmFuc2Zvcm1Ob2RlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRyYW5zZm9ybU5vZGUiXSgiYXJyb3ciLCBzY2Vu
ZSk7CisgICAgICAgIHZhciBjeWxpbmRlciA9IF9NZXNoZXNfQnVpbGRlcnNfY3lsaW5kZXJCdWls
ZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkN5bGluZGVyQnVpbGRlciJdLkNyZWF0
ZUN5bGluZGVyKCJjeWxpbmRlciIsIHsgZGlhbWV0ZXJUb3A6IDAsIGhlaWdodDogMC4wNzUsIGRp
YW1ldGVyQm90dG9tOiAwLjAzNzUsIHRlc3NlbGxhdGlvbjogOTYgfSwgc2NlbmUpOworICAgICAg
ICB2YXIgbGluZSA9IF9NZXNoZXNfQnVpbGRlcnNfY3lsaW5kZXJCdWlsZGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIkN5bGluZGVyQnVpbGRlciJdLkNyZWF0ZUN5bGluZGVyKCJjeWxp
bmRlciIsIHsgZGlhbWV0ZXJUb3A6IDAuMDA1LCBoZWlnaHQ6IDAuMjc1LCBkaWFtZXRlckJvdHRv
bTogMC4wMDUsIHRlc3NlbGxhdGlvbjogOTYgfSwgc2NlbmUpOworICAgICAgICBsaW5lLm1hdGVy
aWFsID0gbWF0ZXJpYWw7CisgICAgICAgIGN5bGluZGVyLnBhcmVudCA9IGFycm93OworICAgICAg
ICBsaW5lLnBhcmVudCA9IGFycm93OworICAgICAgICAvLyBQb3NpdGlvbiBhcnJvdyBwb2ludGlu
ZyBpbiBpdHMgZHJhZyBheGlzCisgICAgICAgIGN5bGluZGVyLm1hdGVyaWFsID0gbWF0ZXJpYWw7
CisgICAgICAgIGN5bGluZGVyLnJvdGF0aW9uLnggPSBNYXRoLlBJIC8gMjsKKyAgICAgICAgY3ls
aW5kZXIucG9zaXRpb24ueiArPSAwLjM7CisgICAgICAgIGxpbmUucG9zaXRpb24ueiArPSAwLjI3
NSAvIDI7CisgICAgICAgIGxpbmUucm90YXRpb24ueCA9IE1hdGguUEkgLyAyOworICAgICAgICBy
ZXR1cm4gYXJyb3c7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEF4aXNEcmFnR2l6
bW8uX0NyZWF0ZUFycm93SW5zdGFuY2UgPSBmdW5jdGlvbiAoc2NlbmUsIGFycm93KSB7CisgICAg
ICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfTWVzaGVzX3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siVHJhbnNmb3JtTm9kZSJdKCJhcnJvdyIsIHNjZW5lKTsKKyAgICAg
ICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IGFycm93LmdldENoaWxkTWVzaGVzKCk7IF9pIDwgX2Eu
bGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IF9hW19pXTsKKyAgICAgICAg
ICAgIHZhciBjaGlsZEluc3RhbmNlID0gbWVzaC5jcmVhdGVJbnN0YW5jZShtZXNoLm5hbWUpOwor
ICAgICAgICAgICAgY2hpbGRJbnN0YW5jZS5wYXJlbnQgPSBpbnN0YW5jZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfTsKKyAgICBBeGlzRHJhZ0dpem1vLnByb3Rv
dHlwZS5fYXR0YWNoZWRNZXNoQ2hhbmdlZCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBp
ZiAodGhpcy5kcmFnQmVoYXZpb3IpIHsKKyAgICAgICAgICAgIHRoaXMuZHJhZ0JlaGF2aW9yLmVu
YWJsZWQgPSB2YWx1ZSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KEF4aXNEcmFnR2l6bW8ucHJvdG90eXBlLCAiaXNFbmFibGVkIiwg
eworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9p
c0VuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0aGUgZ2l6
bW8gaXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAgaWYg
KCF2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRNZXNoID0gbnVsbDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0aGlz
Ll9wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hlZE1lc2ggPSB0aGlz
Ll9wYXJlbnQuYXR0YWNoZWRNZXNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIGdpem1v
CisgICAgICovCisgICAgQXhpc0RyYWdHaXptby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5vblNuYXBPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRo
aXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLnJlbW92
ZSh0aGlzLl9wb2ludGVyT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLmRyYWdCZWhhdmlvci5kZXRh
Y2goKTsKKyAgICAgICAgaWYgKHRoaXMuX2Fycm93KSB7CisgICAgICAgICAgICB0aGlzLl9hcnJv
dy5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgW3RoaXMuX2NvbG9yZWRNYXRlcmlhbCwg
dGhpcy5faG92ZXJNYXRlcmlhbF0uZm9yRWFjaChmdW5jdGlvbiAobWF0bCkgeworICAgICAgICAg
ICAgaWYgKG1hdGwpIHsKKyAgICAgICAgICAgICAgICBtYXRsLmRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxs
KHRoaXMpOworICAgIH07CisgICAgcmV0dXJuIEF4aXNEcmFnR2l6bW87Cit9KF9naXptb19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJHaXptbyJdKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vR2l6bW9zL2F4aXNTY2FsZUdpem1vLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dpem1vcy9heGlzU2NhbGVHaXptby50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IEF4aXNTY2FsZUdpem1vICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkF4aXNTY2FsZUdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBeGlzU2NhbGVHaXpt
bzsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0
aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2Fic3RyYWN0TWVzaCAqLyAiLi9N
ZXNoZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hl
c19CdWlsZGVyc19ib3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvYm94QnVpbGRlciAqLyAiLi9N
ZXNoZXMvQnVpbGRlcnMvYm94QnVpbGRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NZXNoZXNfQnVpbGRlcnNfY3lsaW5kZXJCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvY3lsaW5k
ZXJCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1aWxkZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVy
aWFscy9zdGFuZGFyZE1hdGVyaWFsICovICIuL01hdGVyaWFscy9zdGFuZGFyZE1hdGVyaWFsLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0JlaGF2aW9yc19NZXNoZXNfcG9pbnRlckRy
YWdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vQmVoYXZpb3JzL01lc2hlcy9wb2ludGVyRHJhZ0JlaGF2aW9yICovICIuL0Jl
aGF2aW9ycy9NZXNoZXMvcG9pbnRlckRyYWdCZWhhdmlvci50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9naXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9naXptbyAqLyAiLi9HaXptb3MvZ2l6bW8udHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfUmVuZGVyaW5nX3V0aWxpdHlMYXllclJlbmRlcmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9SZW5kZXJp
bmcvdXRpbGl0eUxheWVyUmVuZGVyZXIgKi8gIi4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJlbmRl
cmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKworCisKKworCisK
KworCisKKworCisvKioKKyAqIFNpbmdsZSBheGlzIHNjYWxlIGdpem1vCisgKi8KK3ZhciBBeGlz
U2NhbGVHaXptbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShBeGlzU2NhbGVHaXpt
bywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIEF4aXNTY2FsZUdpem1vCisg
ICAgICogQHBhcmFtIGdpem1vTGF5ZXIgVGhlIHV0aWxpdHkgbGF5ZXIgdGhlIGdpem1vIHdpbGwg
YmUgYWRkZWQgdG8KKyAgICAgKiBAcGFyYW0gZHJhZ0F4aXMgVGhlIGF4aXMgd2hpY2ggdGhlIGdp
em1vIHdpbGwgYmUgYWJsZSB0byBzY2FsZSBvbgorICAgICAqIEBwYXJhbSBjb2xvciBUaGUgY29s
b3Igb2YgdGhlIGdpem1vCisgICAgICovCisgICAgZnVuY3Rpb24gQXhpc1NjYWxlR2l6bW8oZHJh
Z0F4aXMsIGNvbG9yLCBnaXptb0xheWVyLCBwYXJlbnQpIHsKKyAgICAgICAgaWYgKGNvbG9yID09
PSB2b2lkIDApIHsgY29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTBfX1siQ29sb3IzIl0uR3JheSgpOyB9CisgICAgICAgIGlmIChnaXptb0xheWVyID09
PSB2b2lkIDApIHsgZ2l6bW9MYXllciA9IF9SZW5kZXJpbmdfdXRpbGl0eUxheWVyUmVuZGVyZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVXRpbGl0eUxheWVyUmVuZGVyZXIiXS5EZWZh
dWx0VXRpbGl0eUxheWVyOyB9CisgICAgICAgIGlmIChwYXJlbnQgPT09IHZvaWQgMCkgeyBwYXJl
bnQgPSBudWxsOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGdpem1v
TGF5ZXIpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9wb2ludGVyT2JzZXJ2ZXIgPSBudWxsOwor
ICAgICAgICAvKioKKyAgICAgICAgICogU2NhbGUgZGlzdGFuY2UgaW4gYmFieWxvbiB1bml0cyB0
aGF0IHRoZSBnaXptbyB3aWxsIHNuYXAgdG8gd2hlbiBkcmFnZ2VkIChEZWZhdWx0OiAwKQorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuc25hcERpc3RhbmNlID0gMDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEV2ZW50IHRoYXQgZmlyZXMgZWFjaCB0aW1lIHRoZSBnaXptbyBzbmFwcyB0byBh
IG5ldyBsb2NhdGlvbi4KKyAgICAgICAgICogKiBzbmFwRGlzdGFuY2UgaXMgdGhlIHRoZSBjaGFu
Z2UgaW4gZGlzdGFuY2UKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uU25hcE9ic2VydmFi
bGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJP
YnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBzY2FsaW5nIG9w
ZXJhdGlvbiBzaG91bGQgYmUgZG9uZSBvbiBhbGwgYXhpcyAoZGVmYXVsdDogZmFsc2UpCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy51bmlmb3JtU2NhbGluZyA9IGZhbHNlOworICAgICAgICBf
dGhpcy5faXNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX3BhcmVudCA9IG51bGw7Cisg
ICAgICAgIF90aGlzLl9wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIC8vIENyZWF0ZSBNYXRlcmlh
bAorICAgICAgICBfdGhpcy5fY29sb3JlZE1hdGVyaWFsID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRh
cmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTdGFuZGFyZE1hdGVyaWFs
Il0oIiIsIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpOworICAgICAgICBfdGhpcy5fY29s
b3JlZE1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGNvbG9yOworICAgICAgICBfdGhpcy5fY29sb3Jl
ZE1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBjb2xvci5zdWJ0cmFjdChuZXcgX01hdGhzX21hdGhf
Y29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNvbG9yMyJdKDAuMSwgMC4xLCAw
LjEpKTsKKyAgICAgICAgX3RoaXMuX2hvdmVyTWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFsc19zdGFu
ZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlN0YW5kYXJkTWF0ZXJp
YWwiXSgiIiwgZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgIF90aGlzLl9o
b3Zlck1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGNvbG9yLmFkZChuZXcgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNvbG9yMyJdKDAuMywgMC4zLCAwLjMp
KTsKKyAgICAgICAgLy8gQnVpbGQgbWVzaCBvbiByb290IG5vZGUKKyAgICAgICAgX3RoaXMuX2Fy
cm93ID0gbmV3IF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIkFic3RyYWN0TWVzaCJdKCIiLCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKTsKKyAg
ICAgICAgdmFyIGFycm93TWVzaCA9IF9NZXNoZXNfQnVpbGRlcnNfYm94QnVpbGRlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJCb3hCdWlsZGVyIl0uQ3JlYXRlQm94KCJ5UG9zTWVzaCIs
IHsgc2l6ZTogMC40IH0sIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpOworICAgICAgICB2
YXIgYXJyb3dUYWlsID0gX01lc2hlc19CdWlsZGVyc19jeWxpbmRlckJ1aWxkZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siQ3lsaW5kZXJCdWlsZGVyIl0uQ3JlYXRlQ3lsaW5kZXIoImN5
bGluZGVyIiwgeyBkaWFtZXRlclRvcDogMC4wMDUsIGhlaWdodDogMC4yNzUsIGRpYW1ldGVyQm90
dG9tOiAwLjAwNSwgdGVzc2VsbGF0aW9uOiA5NiB9LCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNj
ZW5lKTsKKyAgICAgICAgYXJyb3dUYWlsLm1hdGVyaWFsID0gX3RoaXMuX2NvbG9yZWRNYXRlcmlh
bDsKKyAgICAgICAgX3RoaXMuX2Fycm93LmFkZENoaWxkKGFycm93TWVzaCk7CisgICAgICAgIF90
aGlzLl9hcnJvdy5hZGRDaGlsZChhcnJvd1RhaWwpOworICAgICAgICAvLyBQb3NpdGlvbiBhcnJv
dyBwb2ludGluZyBpbiBpdHMgZHJhZyBheGlzCisgICAgICAgIGFycm93TWVzaC5zY2FsaW5nLnNj
YWxlSW5QbGFjZSgwLjEpOworICAgICAgICBhcnJvd01lc2gubWF0ZXJpYWwgPSBfdGhpcy5fY29s
b3JlZE1hdGVyaWFsOworICAgICAgICBhcnJvd01lc2gucm90YXRpb24ueCA9IE1hdGguUEkgLyAy
OworICAgICAgICBhcnJvd01lc2gucG9zaXRpb24ueiArPSAwLjM7CisgICAgICAgIGFycm93VGFp
bC5wb3NpdGlvbi56ICs9IDAuMjc1IC8gMjsKKyAgICAgICAgYXJyb3dUYWlsLnJvdGF0aW9uLngg
PSBNYXRoLlBJIC8gMjsKKyAgICAgICAgX3RoaXMuX2Fycm93Lmxvb2tBdChfdGhpcy5fcm9vdE1l
c2gucG9zaXRpb24uYWRkKGRyYWdBeGlzKSk7CisgICAgICAgIF90aGlzLl9yb290TWVzaC5hZGRD
aGlsZChfdGhpcy5fYXJyb3cpOworICAgICAgICBfdGhpcy5fYXJyb3cuc2NhbGluZy5zY2FsZUlu
UGxhY2UoMSAvIDMpOworICAgICAgICAvLyBBZGQgZHJhZyBiZWhhdmlvciB0byBoYW5kbGUgZXZl
bnRzIHdoZW4gdGhlIGdpem1vIGlzIGRyYWdnZWQKKyAgICAgICAgX3RoaXMuZHJhZ0JlaGF2aW9y
ID0gbmV3IF9CZWhhdmlvcnNfTWVzaGVzX3BvaW50ZXJEcmFnQmVoYXZpb3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siUG9pbnRlckRyYWdCZWhhdmlvciJdKHsgZHJhZ0F4aXM6IGRyYWdB
eGlzIH0pOworICAgICAgICBfdGhpcy5kcmFnQmVoYXZpb3IubW92ZUF0dGFjaGVkID0gZmFsc2U7
CisgICAgICAgIF90aGlzLl9yb290TWVzaC5hZGRCZWhhdmlvcihfdGhpcy5kcmFnQmVoYXZpb3Ip
OworICAgICAgICB2YXIgY3VycmVudFNuYXBEcmFnRGlzdGFuY2UgPSAwOworICAgICAgICB2YXIg
dG1wVmVjdG9yID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJWZWN0b3IzIl0oKTsKKyAgICAgICAgdmFyIHRtcFNuYXBFdmVudCA9IHsgc25hcERp
c3RhbmNlOiAwIH07CisgICAgICAgIF90aGlzLmRyYWdCZWhhdmlvci5vbkRyYWdPYnNlcnZhYmxl
LmFkZChmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5hdHRhY2hlZE1l
c2gpIHsKKyAgICAgICAgICAgICAgICAvLyBEcmFnIHN0cmVuZ3RoIGlzIG1vZGlmaWVkIGJ5IHRo
ZSBzY2FsZSBvZiB0aGUgZ2l6bW8gKGVnLiBmb3Igc21hbGwgb2JqZWN0cyBsaWtlIGJvb21ib3gg
dGhlIHN0cmVuZ3RoIHdpbGwgYmUgaW5jcmVhc2VkIHRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBs
YXJnZXIgb2JqZWN0cykKKyAgICAgICAgICAgICAgICB2YXIgZHJhZ1N0cmVuZ3RoID0gZXZlbnQu
ZHJhZ0Rpc3RhbmNlICogKChfdGhpcy5zY2FsZVJhdGlvICogMykgLyBfdGhpcy5fcm9vdE1lc2gu
c2NhbGluZy5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgLy8gU25hcHBpbmcgbG9naWMKKyAg
ICAgICAgICAgICAgICB2YXIgc25hcHBlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHZhciBk
cmFnU3RlcHMgPSAwOworICAgICAgICAgICAgICAgIGlmIChfdGhpcy51bmlmb3JtU2NhbGluZykg
eworICAgICAgICAgICAgICAgICAgICBfdGhpcy5hdHRhY2hlZE1lc2guc2NhbGluZy5ub3JtYWxp
emVUb1JlZih0bXBWZWN0b3IpOworICAgICAgICAgICAgICAgICAgICBpZiAodG1wVmVjdG9yLnkg
PCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXBWZWN0b3Iuc2NhbGVJblBsYWNlKC0x
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdG1wVmVjdG9yLmNvcHlGcm9tKGRyYWdB
eGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLnNuYXBE
aXN0YW5jZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcFZlY3Rvci5zY2FsZVRvUmVm
KGRyYWdTdHJlbmd0aCwgdG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTbmFwRHJhZ0Rpc3RhbmNl
ICs9IGRyYWdTdHJlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGN1cnJl
bnRTbmFwRHJhZ0Rpc3RhbmNlKSA+IF90aGlzLnNuYXBEaXN0YW5jZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZHJhZ1N0ZXBzID0gTWF0aC5mbG9vcihNYXRoLmFicyhjdXJyZW50U25hcERy
YWdEaXN0YW5jZSkgLyBfdGhpcy5zbmFwRGlzdGFuY2UpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGN1cnJlbnRTbmFwRHJhZ0Rpc3RhbmNlIDwgMCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRyYWdTdGVwcyAqPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTbmFwRHJhZ0Rpc3RhbmNlID0gY3VycmVudFNu
YXBEcmFnRGlzdGFuY2UgJSBfdGhpcy5zbmFwRGlzdGFuY2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0bXBWZWN0b3Iuc2NhbGVUb1JlZihfdGhpcy5zbmFwRGlzdGFuY2UgKiBkcmFnU3RlcHMs
IHRtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRtcFZlY3Rvci5zY2FsZUluUGxhY2UoMCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgX3RoaXMuYXR0YWNo
ZWRNZXNoLnNjYWxpbmcuYWRkSW5QbGFjZSh0bXBWZWN0b3IpOworICAgICAgICAgICAgICAgIGlm
IChzbmFwcGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcFNuYXBFdmVudC5zbmFwRGlzdGFu
Y2UgPSBfdGhpcy5zbmFwRGlzdGFuY2UgKiBkcmFnU3RlcHM7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLm9uU25hcE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRtcFNuYXBFdmVudCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgX3Ro
aXMuX3BvaW50ZXJPYnNlcnZlciA9IGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUub25Qb2lu
dGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHBvaW50ZXJJbmZvKSB7CisgICAgICAgICAgICBp
ZiAoX3RoaXMuX2N1c3RvbU1lc2hTZXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YXIgaXNIb3ZlcmVkID0gcG9pbnRlckluZm8ucGlja0lu
Zm8gJiYgKF90aGlzLl9yb290TWVzaC5nZXRDaGlsZE1lc2hlcygpLmluZGV4T2YocG9pbnRlcklu
Zm8ucGlja0luZm8ucGlja2VkTWVzaCkgIT0gLTEpOworICAgICAgICAgICAgdmFyIG1hdGVyaWFs
ID0gaXNIb3ZlcmVkID8gX3RoaXMuX2hvdmVyTWF0ZXJpYWwgOiBfdGhpcy5fY29sb3JlZE1hdGVy
aWFsOworICAgICAgICAgICAgX3RoaXMuX3Jvb3RNZXNoLmdldENoaWxkTWVzaGVzKCkuZm9yRWFj
aChmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgICAgIG0ubWF0ZXJpYWwgPSBtYXRlcmlhbDsK
KyAgICAgICAgICAgICAgICBpZiAobS5jb2xvcikgeworICAgICAgICAgICAgICAgICAgICBtLmNv
bG9yID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9KTsKKyAgICAgICAgdmFyIGxpZ2h0ID0gZ2l6bW9MYXllci5fZ2V0
U2hhcmVkR2l6bW9MaWdodCgpOworICAgICAgICBsaWdodC5pbmNsdWRlZE9ubHlNZXNoZXMgPSBs
aWdodC5pbmNsdWRlZE9ubHlNZXNoZXMuY29uY2F0KF90aGlzLl9yb290TWVzaC5nZXRDaGlsZE1l
c2hlcygpKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBBeGlzU2NhbGVHaXpt
by5wcm90b3R5cGUuX2F0dGFjaGVkTWVzaENoYW5nZWQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgaWYgKHRoaXMuZHJhZ0JlaGF2aW9yKSB7CisgICAgICAgICAgICB0aGlzLmRyYWdCZWhh
dmlvci5lbmFibGVkID0gdmFsdWUgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBeGlzU2NhbGVHaXptby5wcm90b3R5cGUsICJpc0Vu
YWJsZWQiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2lzRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICogSWYgdGhl
IGdpem1vIGlzIGVuYWJsZWQKKyAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAgaWYg
KCF2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRNZXNoID0gbnVsbDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0aGlz
Ll9wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hlZE1lc2ggPSB0aGlz
Ll9wYXJlbnQuYXR0YWNoZWRNZXNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIGdpem1v
CisgICAgICovCisgICAgQXhpc1NjYWxlR2l6bW8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRoaXMub25TbmFwT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0
aGlzLmdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUub25Qb2ludGVyT2JzZXJ2YWJsZS5yZW1v
dmUodGhpcy5fcG9pbnRlck9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5kcmFnQmVoYXZpb3IuZGV0
YWNoKCk7CisgICAgICAgIGlmICh0aGlzLl9hcnJvdykgeworICAgICAgICAgICAgdGhpcy5fYXJy
b3cuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIFt0aGlzLl9jb2xvcmVkTWF0ZXJpYWws
IHRoaXMuX2hvdmVyTWF0ZXJpYWxdLmZvckVhY2goZnVuY3Rpb24gKG1hdGwpIHsKKyAgICAgICAg
ICAgIGlmIChtYXRsKSB7CisgICAgICAgICAgICAgICAgbWF0bC5kaXNwb3NlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2Fs
bCh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIGFuZCByZXBsYWNlcyB0
aGUgY3VycmVudCBtZXNoZXMgaW4gdGhlIGdpem1vIHdpdGggdGhlIHNwZWNpZmllZCBtZXNoCisg
ICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gcmVwbGFjZSB0aGUgZGVmYXVsdCBtZXNoIG9m
IHRoZSBnaXptbworICAgICAqIEBwYXJhbSB1c2VHaXptb01hdGVyaWFsIElmIHRoZSBnaXptbydz
IGRlZmF1bHQgbWF0ZXJpYWwgc2hvdWxkIGJlIHVzZWQgKGRlZmF1bHQ6IGZhbHNlKQorICAgICAq
LworICAgIEF4aXNTY2FsZUdpem1vLnByb3RvdHlwZS5zZXRDdXN0b21NZXNoID0gZnVuY3Rpb24g
KG1lc2gsIHVzZUdpem1vTWF0ZXJpYWwpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAg
ICAgICAgaWYgKHVzZUdpem1vTWF0ZXJpYWwgPT09IHZvaWQgMCkgeyB1c2VHaXptb01hdGVyaWFs
ID0gZmFsc2U7IH0KKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRDdXN0b21NZXNoLmNhbGwo
dGhpcywgbWVzaCk7CisgICAgICAgIGlmICh1c2VHaXptb01hdGVyaWFsKSB7CisgICAgICAgICAg
ICB0aGlzLl9yb290TWVzaC5nZXRDaGlsZE1lc2hlcygpLmZvckVhY2goZnVuY3Rpb24gKG0pIHsK
KyAgICAgICAgICAgICAgICBtLm1hdGVyaWFsID0gX3RoaXMuX2NvbG9yZWRNYXRlcmlhbDsKKyAg
ICAgICAgICAgICAgICBpZiAobS5jb2xvcikgeworICAgICAgICAgICAgICAgICAgICBtLmNvbG9y
ID0gX3RoaXMuX2NvbG9yZWRNYXRlcmlhbC5kaWZmdXNlQ29sb3I7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0aGlzLl9jdXN0b21NZXNoU2V0ID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBBeGlzU2NhbGVHaXptbzsKK30oX2dp
em1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkdpem1vIl0pKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9HaXptb3MvYm91bmRpbmdCb3hHaXptby50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dpem1vcy9ib3VuZGlu
Z0JveEdpem1vLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBCb3VuZGluZ0JveEdpem1vICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvdW5kaW5nQm94R2l6bW8iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIEJvdW5kaW5nQm94R2l6bW87IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAi
Li9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19s
b2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9N
YXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNf
YWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1l
c2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9t
ZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01l
c2hlc19CdWlsZGVyc19zcGhlcmVCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRl
ciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfYm94QnVpbGRlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL0J1aWxkZXJz
L2JveEJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL2JveEJ1aWxkZXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVz
L0J1aWxkZXJzL2xpbmVzQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvbGluZXNCdWlsZGVy
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0JlaGF2aW9yc19NZXNoZXNfcG9pbnRl
ckRyYWdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vQmVoYXZpb3JzL01lc2hlcy9wb2ludGVyRHJhZ0JlaGF2aW9yICovICIu
L0JlaGF2aW9ycy9NZXNoZXMvcG9pbnRlckRyYWdCZWhhdmlvci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9naXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vZ2l6bW8gKi8gIi4vR2l6bW9zL2dpem1vLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1Jl
bmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlciAqLyAiLi9SZW5kZXJpbmcvdXRpbGl0eUxheWVy
UmVuZGVyZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX3N0YW5k
YXJkTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMv
c3RhbmRhcmRNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Bp
dm90VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NaXNjL3Bpdm90VG9vbHMgKi8gIi4vTWlzYy9waXZvdFRvb2xzLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNv
bG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbnN0YW50cyAqLyAiLi9NYXRo
cy9tYXRoLmNvbnN0YW50cy50cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
Ky8qKgorICogQm91bmRpbmcgYm94IGdpem1vCisgKi8KK3ZhciBCb3VuZGluZ0JveEdpem1vID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEJvdW5kaW5nQm94R2l6bW8sIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBCb3VuZGluZ0JveEdpem1vCisgICAgICogQHBh
cmFtIGdpem1vTGF5ZXIgVGhlIHV0aWxpdHkgbGF5ZXIgdGhlIGdpem1vIHdpbGwgYmUgYWRkZWQg
dG8KKyAgICAgKiBAcGFyYW0gY29sb3IgVGhlIGNvbG9yIG9mIHRoZSBnaXptbworICAgICAqLwor
ICAgIGZ1bmN0aW9uIEJvdW5kaW5nQm94R2l6bW8oY29sb3IsIGdpem1vTGF5ZXIpIHsKKyAgICAg
ICAgaWYgKGNvbG9yID09PSB2b2lkIDApIHsgY29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siQ29sb3IzIl0uR3JheSgpOyB9CisgICAgICAgIGlm
IChnaXptb0xheWVyID09PSB2b2lkIDApIHsgZ2l6bW9MYXllciA9IF9SZW5kZXJpbmdfdXRpbGl0
eUxheWVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIlV0aWxpdHlMYXll
clJlbmRlcmVyIl0uRGVmYXVsdEtlZXBEZXB0aFV0aWxpdHlMYXllcjsgfQorICAgICAgICB2YXIg
X3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBnaXptb0xheWVyKSB8fCB0aGlzOworICAgICAgICBf
dGhpcy5fYm91bmRpbmdEaW1lbnNpb25zID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMSwgMSwgMSk7CisgICAgICAgIF90aGlz
Ll9yZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIF90aGlzLl9wb2ludGVyT2JzZXJ2ZXIg
PSBudWxsOworICAgICAgICBfdGhpcy5fc2NhbGVEcmFnU3BlZWQgPSAwLjI7CisgICAgICAgIF90
aGlzLl90bXBRdWF0ZXJuaW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0oKTsKKyAgICAgICAgX3RoaXMuX3RtcFZlY3Rv
ciA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdKDAsIDAsIDApOworICAgICAgICBfdGhpcy5fdG1wUm90YXRpb25NYXRyaXggPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJp
eCJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBjaGlsZCBtZXNoZXMgc2hvdWxkIGJl
IGlnbm9yZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgYm91ZG5pbmcgYm94LiBUaGlzIHNob3VsZCBi
ZSBzZXQgdG8gdHJ1ZSB0byBhdm9pZCBwZXJmIGhpdHMgd2l0aCBoZWF2aWx5IG5lc3RlZCBtZXNo
ZXMgKERlZmF1bHQ6IGZhbHNlKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaWdub3JlQ2hp
bGRyZW4gPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiBh
IGRlc2NlbmRhbnQgc2hvdWxkIGJlIGluY2x1ZGVkIHdoZW4gY29tcHV0aW5nIHRoZSBib3VuZGlu
ZyBib3guIFdoZW4gbnVsbCwgYWxsIGRlc2NlbmRhbnRzIGFyZSBpbmNsdWRlZC4gSWYgaWdub3Jl
Q2hpbGRyZW4gaXMgc2V0IHRoaXMgd2lsbCBiZSBpZ25vcmVkLiAoRGVmYXVsdDogbnVsbCkKKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLmluY2x1ZGVDaGlsZFByZWRpY2F0ZSA9IG51bGw7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgcm90YXRpb24gc3BoZXJlcyBh
dHRhY2hlZCB0byB0aGUgYm91bmRpbmcgYm94IChEZWZhdWx0OiAwLjEpCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5yb3RhdGlvblNwaGVyZVNpemUgPSAwLjE7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgc2NhbGUgYm94ZXMgYXR0YWNoZWQgdG8gdGhlIGJvdW5k
aW5nIGJveCAoRGVmYXVsdDogMC4xKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuc2NhbGVC
b3hTaXplID0gMC4xOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgc2V0LCB0aGUgcm90YXRp
b24gc3BoZXJlcyBhbmQgc2NhbGUgYm94ZXMgd2lsbCBpbmNyZWFzZSBpbiBzaXplIGJhc2VkIG9u
IHRoZSBkaXN0YW5jZSBhd2F5IGZyb20gdGhlIGNhbWVyYSB0byBoYXZlIGEgY29uc2lzdGVudCBz
Y3JlZW4gc2l6ZSAoRGVmYXVsdDogZmFsc2UpCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5m
aXhlZERyYWdNZXNoU2NyZWVuU2l6ZSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICog
VGhlIGRpc3RhbmNlIGF3YXkgZnJvbSB0aGUgb2JqZWN0IHdoaWNoIHRoZSBkcmFnZ2FibGUgbWVz
aGVzIHNob3VsZCBhcHBlYXIgd29ybGQgc2l6ZWQgd2hlbiBmaXhlZERyYWdNZXNoU2NyZWVuU2l6
ZSBpcyBzZXQgdG8gdHJ1ZSAoZGVmYXVsdDogMTApCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5maXhlZERyYWdNZXNoU2NyZWVuU2l6ZURpc3RhbmNlRmFjdG9yID0gMTA7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBGaXJlZCB3aGVuIGEgcm90YXRpb24gc3BoZXJlIG9yIHNjYWxlIGJveCBp
cyBkcmFnZ2VkCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkRyYWdTdGFydE9ic2VydmFi
bGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJP
YnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZpcmVkIHdoZW4gYSBzY2Fs
ZSBib3ggaXMgZHJhZ2dlZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25TY2FsZUJveERy
YWdPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgICogRmlyZWQg
d2hlbiBhIHNjYWxlIGJveCBkcmFnIGlzIGVuZGVkCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5vblNjYWxlQm94RHJhZ0VuZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEZpcmVkIHdoZW4gYSByb3RhdGlvbiBzcGhlcmUgaXMgZHJhZ2dlZAorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMub25Sb3RhdGlvblNwaGVyZURyYWdPYnNlcnZhYmxlID0gbmV3
IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJs
ZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3aGVuIGEgcm90YXRpb24gc3Bo
ZXJlIGRyYWcgaXMgZW5kZWQKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uUm90YXRpb25T
cGhlcmVEcmFnRW5kT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAg
ICogUmVsYXRpdmUgYm91bmRpbmcgYm94IHBpdm90IHVzZWQgd2hlbiBzY2FsaW5nIHRoZSBhdHRh
Y2hlZCBtZXNoLiBXaGVuIG51bGwgb2JqZWN0IHdpdGggc2NhbGUgZnJvbSB0aGUgb3Bwb3NpdGUg
Y29ybmVyLiAwLjUsMC41LDAuNSBmb3IgY2VudGVyIGFuZCAwLjUsMCwwLjUgZm9yIGJvdHRvbSAo
RGVmYXVsdDogbnVsbCkKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnNjYWxlUGl2b3QgPSBu
dWxsOworICAgICAgICBfdGhpcy5fZXhpc3RpbmdNZXNoU2NhbGUgPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgpOworICAgICAg
ICAvLyBEcmFnZ2luZworICAgICAgICBfdGhpcy5fZHJhZ01lc2ggPSBudWxsOworICAgICAgICBf
dGhpcy5wb2ludGVyRHJhZ0JlaGF2aW9yID0gbmV3IF9CZWhhdmlvcnNfTWVzaGVzX3BvaW50ZXJE
cmFnQmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUG9pbnRlckRyYWdCZWhh
dmlvciJdKCk7CisgICAgICAgIC8vIERvIG5vdCB1cGRhdGUgdGhlIGdpem1vJ3Mgc2NhbGUgc28g
aXQgaGFzIGEgZml4ZWQgc2l6ZSB0byB0aGUgb2JqZWN0IGl0cyBhdHRhY2hlZCB0bworICAgICAg
ICBfdGhpcy51cGRhdGVTY2FsZSA9IGZhbHNlOworICAgICAgICBfdGhpcy5fYW5jaG9yTWVzaCA9
IG5ldyBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJB
YnN0cmFjdE1lc2giXSgiYW5jaG9yIiwgZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSk7Cisg
ICAgICAgIC8vIENyZWF0ZSBNYXRlcmlhbHMKKyAgICAgICAgX3RoaXMuY29sb3JlZE1hdGVyaWFs
ID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTJfX1siU3RhbmRhcmRNYXRlcmlhbCJdKCIiLCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNj
ZW5lKTsKKyAgICAgICAgX3RoaXMuY29sb3JlZE1hdGVyaWFsLmRpc2FibGVMaWdodGluZyA9IHRy
dWU7CisgICAgICAgIF90aGlzLmhvdmVyQ29sb3JlZE1hdGVyaWFsID0gbmV3IF9NYXRlcmlhbHNf
c3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siU3RhbmRhcmRN
YXRlcmlhbCJdKCIiLCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKTsKKyAgICAgICAgX3Ro
aXMuaG92ZXJDb2xvcmVkTWF0ZXJpYWwuZGlzYWJsZUxpZ2h0aW5nID0gdHJ1ZTsKKyAgICAgICAg
Ly8gQnVpbGQgYm91bmRpbmcgYm94IG91dCBvZiBsaW5lcworICAgICAgICBfdGhpcy5fbGluZUJv
dW5kaW5nQm94ID0gbmV3IF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIkFic3RyYWN0TWVzaCJdKCIiLCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5l
KTsKKyAgICAgICAgX3RoaXMuX2xpbmVCb3VuZGluZ0JveC5yb3RhdGlvblF1YXRlcm5pb24gPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRl
cm5pb24iXSgpOworICAgICAgICB2YXIgbGluZXMgPSBbXTsKKyAgICAgICAgbGluZXMucHVzaChf
TWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
WyJMaW5lc0J1aWxkZXIiXS5DcmVhdGVMaW5lcygibGluZXMiLCB7IHBvaW50czogW25ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAs
IDAsIDApLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlZlY3RvcjMiXShfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLngsIDAsIDApXSB9LCBnaXpt
b0xheWVyLnV0aWxpdHlMYXllclNjZW5lKSk7CisgICAgICAgIGxpbmVzLnB1c2goX01lc2hlc19C
dWlsZGVyc19saW5lc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTGluZXNC
dWlsZGVyIl0uQ3JlYXRlTGluZXMoImxpbmVzIiwgeyBwb2ludHM6IFtuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgwLCAwLCAwKSwg
bmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0
b3IzIl0oMCwgX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy55LCAwKV0gfSwgZ2l6bW9MYXllci51
dGlsaXR5TGF5ZXJTY2VuZSkpOworICAgICAgICBsaW5lcy5wdXNoKF9NZXNoZXNfQnVpbGRlcnNf
bGluZXNCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkxpbmVzQnVpbGRlciJd
LkNyZWF0ZUxpbmVzKCJsaW5lcyIsIHsgcG9pbnRzOiBbbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMCwgMCksIG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAs
IDAsIF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueildIH0sIGdpem1vTGF5ZXIudXRpbGl0eUxh
eWVyU2NlbmUpKTsKKyAgICAgICAgbGluZXMucHVzaChfTWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVp
bGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJMaW5lc0J1aWxkZXIiXS5DcmVhdGVM
aW5lcygibGluZXMiLCB7IHBvaW50czogW25ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMu
eCwgMCwgMCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVjdG9yMyJdKF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueCwgX3RoaXMuX2JvdW5k
aW5nRGltZW5zaW9ucy55LCAwKV0gfSwgZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSkpOwor
ICAgICAgICBsaW5lcy5wdXNoKF9NZXNoZXNfQnVpbGRlcnNfbGluZXNCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIkxpbmVzQnVpbGRlciJdLkNyZWF0ZUxpbmVzKCJsaW5lcyIs
IHsgcG9pbnRzOiBbbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZWN0b3IzIl0oX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy54LCAwLCAwKSwgbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3Iz
Il0oX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy54LCAwLCBfdGhpcy5fYm91bmRpbmdEaW1lbnNp
b25zLnopXSB9LCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKSk7CisgICAgICAgIGxpbmVz
LnB1c2goX01lc2hlc19CdWlsZGVyc19saW5lc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siTGluZXNCdWlsZGVyIl0uQ3JlYXRlTGluZXMoImxpbmVzIiwgeyBwb2ludHM6IFtu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXSgwLCBfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnksIDApLCBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXShfdGhpcy5fYm91
bmRpbmdEaW1lbnNpb25zLngsIF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueSwgMCldIH0sIGdp
em1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpKTsKKyAgICAgICAgbGluZXMucHVzaChfTWVzaGVz
X0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJMaW5l
c0J1aWxkZXIiXS5DcmVhdGVMaW5lcygibGluZXMiLCB7IHBvaW50czogW25ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIF90aGlz
Ll9ib3VuZGluZ0RpbWVuc2lvbnMueSwgMCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIF90aGlzLl9ib3VuZGluZ0RpbWVu
c2lvbnMueSwgX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy56KV0gfSwgZ2l6bW9MYXllci51dGls
aXR5TGF5ZXJTY2VuZSkpOworICAgICAgICBsaW5lcy5wdXNoKF9NZXNoZXNfQnVpbGRlcnNfbGlu
ZXNCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkxpbmVzQnVpbGRlciJdLkNy
ZWF0ZUxpbmVzKCJsaW5lcyIsIHsgcG9pbnRzOiBbbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMCwgX3RoaXMuX2JvdW5kaW5n
RGltZW5zaW9ucy56KSwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZWN0b3IzIl0oX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy54LCAwLCBfdGhp
cy5fYm91bmRpbmdEaW1lbnNpb25zLnopXSB9LCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5l
KSk7CisgICAgICAgIGxpbmVzLnB1c2goX01lc2hlc19CdWlsZGVyc19saW5lc0J1aWxkZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTGluZXNCdWlsZGVyIl0uQ3JlYXRlTGluZXMoImxp
bmVzIiwgeyBwb2ludHM6IFtuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlY3RvcjMiXSgwLCAwLCBfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnop
LCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
Y3RvcjMiXSgwLCBfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnksIF90aGlzLl9ib3VuZGluZ0Rp
bWVuc2lvbnMueildIH0sIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpKTsKKyAgICAgICAg
bGluZXMucHVzaChfTWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fWyJMaW5lc0J1aWxkZXIiXS5DcmVhdGVMaW5lcygibGluZXMiLCB7IHBvaW50
czogW25ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdKF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueCwgX3RoaXMuX2JvdW5kaW5nRGlt
ZW5zaW9ucy55LCBfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnopLCBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgwLCBfdGhpcy5f
Ym91bmRpbmdEaW1lbnNpb25zLnksIF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueildIH0sIGdp
em1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpKTsKKyAgICAgICAgbGluZXMucHVzaChfTWVzaGVz
X0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJMaW5l
c0J1aWxkZXIiXS5DcmVhdGVMaW5lcygibGluZXMiLCB7IHBvaW50czogW25ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKF90aGlzLl9i
b3VuZGluZ0RpbWVuc2lvbnMueCwgX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy55LCBfdGhpcy5f
Ym91bmRpbmdEaW1lbnNpb25zLnopLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXShfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLngs
IDAsIF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueildIH0sIGdpem1vTGF5ZXIudXRpbGl0eUxh
eWVyU2NlbmUpKTsKKyAgICAgICAgbGluZXMucHVzaChfTWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVp
bGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJMaW5lc0J1aWxkZXIiXS5DcmVhdGVM
aW5lcygibGluZXMiLCB7IHBvaW50czogW25ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMu
eCwgX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy55LCBfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25z
LnopLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXShfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLngsIF90aGlzLl9ib3VuZGluZ0Rp
bWVuc2lvbnMueSwgMCldIH0sIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpKTsKKyAgICAg
ICAgbGluZXMuZm9yRWFjaChmdW5jdGlvbiAobCkgeworICAgICAgICAgICAgbC5jb2xvciA9IGNv
bG9yOworICAgICAgICAgICAgbC5wb3NpdGlvbi5hZGRJblBsYWNlKG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKC1fdGhpcy5fYm91
bmRpbmdEaW1lbnNpb25zLnggLyAyLCAtX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy55IC8gMiwg
LV90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueiAvIDIpKTsKKyAgICAgICAgICAgIGwuaXNQaWNr
YWJsZSA9IGZhbHNlOworICAgICAgICAgICAgX3RoaXMuX2xpbmVCb3VuZGluZ0JveC5hZGRDaGls
ZChsKTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLl9yb290TWVzaC5hZGRDaGlsZChfdGhp
cy5fbGluZUJvdW5kaW5nQm94KTsKKyAgICAgICAgX3RoaXMuc2V0Q29sb3IoY29sb3IpOworICAg
ICAgICAvLyBDcmVhdGUgcm90YXRpb24gc3BoZXJlcworICAgICAgICBfdGhpcy5fcm90YXRlU3Bo
ZXJlc1BhcmVudCA9IG5ldyBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJBYnN0cmFjdE1lc2giXSgiIiwgZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2Vu
ZSk7CisgICAgICAgIF90aGlzLl9yb3RhdGVTcGhlcmVzUGFyZW50LnJvdGF0aW9uUXVhdGVybmlv
biA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
UXVhdGVybmlvbiJdKCk7CisgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGlfMSkgewor
ICAgICAgICAgICAgdmFyIHNwaGVyZSA9IF9NZXNoZXNfQnVpbGRlcnNfc3BoZXJlQnVpbGRlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTcGhlcmVCdWlsZGVyIl0uQ3JlYXRlU3BoZXJl
KCIiLCB7IGRpYW1ldGVyOiAxIH0sIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpOworICAg
ICAgICAgICAgc3BoZXJlLnJvdGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAg
ICAgICBzcGhlcmUubWF0ZXJpYWwgPSB0aGlzXzEuY29sb3JlZE1hdGVyaWFsOworICAgICAgICAg
ICAgLy8gRHJhZyBiZWhhdmlvcgorICAgICAgICAgICAgX2RyYWdCZWhhdmlvciA9IG5ldyBfQmVo
YXZpb3JzX01lc2hlc19wb2ludGVyRHJhZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIlBvaW50ZXJEcmFnQmVoYXZpb3IiXSh7fSk7CisgICAgICAgICAgICBfZHJhZ0JlaGF2
aW9yLm1vdmVBdHRhY2hlZCA9IGZhbHNlOworICAgICAgICAgICAgX2RyYWdCZWhhdmlvci51cGRh
dGVEcmFnUGxhbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIHNwaGVyZS5hZGRCZWhhdmlvcihfZHJh
Z0JlaGF2aW9yKTsKKyAgICAgICAgICAgIHZhciBzdGFydGluZ1R1cm5EaXJlY3Rpb24gPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMi
XSgxLCAwLCAwKTsKKyAgICAgICAgICAgIHZhciB0b3RhbFR1cm5BbW91bnRPZkRyYWcgPSAwOwor
ICAgICAgICAgICAgX2RyYWdCZWhhdmlvci5vbkRyYWdTdGFydE9ic2VydmFibGUuYWRkKGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgICAgICBzdGFydGluZ1R1cm5EaXJlY3Rpb24uY29weUZyb20o
c3BoZXJlLmZvcndhcmQpOworICAgICAgICAgICAgICAgIHRvdGFsVHVybkFtb3VudE9mRHJhZyA9
IDA7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIF9kcmFnQmVoYXZpb3Iub25EcmFnT2Jz
ZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgX3RoaXMub25S
b3RhdGlvblNwaGVyZURyYWdPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7fSk7CisgICAgICAg
ICAgICAgICAgaWYgKF90aGlzLmF0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgb3JpZ2luYWxQYXJlbnQgPSBfdGhpcy5hdHRhY2hlZE1lc2gucGFyZW50OworICAgICAgICAg
ICAgICAgICAgICBpZiAob3JpZ2luYWxQYXJlbnQgJiYgKG9yaWdpbmFsUGFyZW50LnNjYWxpbmcg
JiYgb3JpZ2luYWxQYXJlbnQuc2NhbGluZy5pc05vblVuaWZvcm1XaXRoaW5FcHNpbG9uKDAuMDAx
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5XYXJuKCJCb3VuZGluZ0JveEdpem1vIGNvbnRyb2xz
IGFyZSBub3Qgc3VwcG9ydGVkIG9uIGNoaWxkIG1lc2hlcyB3aXRoIG5vbi11bmlmb3JtIHBhcmVu
dCBzY2FsaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgX01pc2NfcGl2b3RUb29sc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUGl2b3RUb29scyJdLl9SZW1vdmVBbmRTdG9yZVBpdm90
UG9pbnQoX3RoaXMuYXR0YWNoZWRNZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmxk
RHJhZ0RpcmVjdGlvbiA9IHN0YXJ0aW5nVHVybkRpcmVjdGlvbjsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gUHJvamVjdCB0aGUgd29ybGQgcmlnaHQgb24gdG8gdGhlIGRyYWcgcGxhbmUKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHRvU3ViID0gZXZlbnQuZHJhZ1BsYW5lTm9ybWFsLnNjYWxlKF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0u
RG90KGV2ZW50LmRyYWdQbGFuZU5vcm1hbCwgd29ybGREcmFnRGlyZWN0aW9uKSk7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBkcmFnQXhpcyA9IHdvcmxkRHJhZ0RpcmVjdGlvbi5zdWJ0cmFjdCh0
b1N1Yikubm9ybWFsaXplVG9OZXcoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJvamVjdCBk
cmFnIGRlbHRhIG9uIHRvIHRoZSByZXN1bHRpbmcgZHJhZyBheGlzIGFuZCByb3RhdGUgYmFzZWQg
b24gdGhhdAorICAgICAgICAgICAgICAgICAgICB2YXIgcHJvamVjdERpc3QgPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkRvdChkcmFn
QXhpcywgZXZlbnQuZGVsdGEpIDwgMCA/IE1hdGguYWJzKGV2ZW50LmRlbHRhLmxlbmd0aCgpKSA6
IC1NYXRoLmFicyhldmVudC5kZWx0YS5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgIC8v
IE1ha2Ugcm90YXRpb24gcmVsYXRpdmUgdG8gc2l6ZSBvZiBtZXNoLgorICAgICAgICAgICAgICAg
ICAgICBwcm9qZWN0RGlzdCA9IChwcm9qZWN0RGlzdCAvIF90aGlzLl9ib3VuZGluZ0RpbWVuc2lv
bnMubGVuZ3RoKCkpICogX3RoaXMuX2FuY2hvck1lc2guc2NhbGluZy5sZW5ndGgoKTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gUm90YXRlIGJhc2VkIG9uIGF4aXMKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFfdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5p
b24iXS5Sb3RhdGlvbllhd1BpdGNoUm9sbChfdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb24ueSwg
X3RoaXMuYXR0YWNoZWRNZXNoLnJvdGF0aW9uLngsIF90aGlzLmF0dGFjaGVkTWVzaC5yb3RhdGlv
bi56KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIV90
aGlzLl9hbmNob3JNZXNoLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMuX2FuY2hvck1lc2gucm90YXRpb25RdWF0ZXJuaW9uID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlv
bllhd1BpdGNoUm9sbChfdGhpcy5fYW5jaG9yTWVzaC5yb3RhdGlvbi55LCBfdGhpcy5fYW5jaG9y
TWVzaC5yb3RhdGlvbi54LCBfdGhpcy5fYW5jaG9yTWVzaC5yb3RhdGlvbi56KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cgdGhlIG9i
amVjdCB0byB0dXJuIG1vcmUgdGhhbiBhIGZ1bGwgY2lyY2xlCisgICAgICAgICAgICAgICAgICAg
IHRvdGFsVHVybkFtb3VudE9mRHJhZyArPSBwcm9qZWN0RGlzdDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKE1hdGguYWJzKHRvdGFsVHVybkFtb3VudE9mRHJhZykgPD0gMiAqIE1hdGguUEkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpXzEgPj0gOCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZigwLCAwLCBwcm9qZWN0
RGlzdCwgX3RoaXMuX3RtcFF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaV8xID49IDQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siUXVhdGVybmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYocHJvamVjdERp
c3QsIDAsIDAsIF90aGlzLl90bXBRdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJR
dWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZigwLCBwcm9qZWN0RGlzdCwgMCwg
X3RoaXMuX3RtcFF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUm90YXRlIGFyb3VuZCBjZW50ZXIgb2YgYm91bmRpbmcgYm94
CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYW5jaG9yTWVzaC5hZGRDaGlsZChfdGhp
cy5hdHRhY2hlZE1lc2gpOworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FuY2hvck1l
c2gucm90YXRpb25RdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYoX3RoaXMuX3RtcFF1YXRlcm5pb24s
IF90aGlzLl9hbmNob3JNZXNoLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5fYW5jaG9yTWVzaC5yZW1vdmVDaGlsZChfdGhpcy5hdHRhY2hlZE1lc2gp
OworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoLnNldFBhcmVudChv
cmlnaW5hbFBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgX3RoaXMudXBkYXRlQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgICAgICAgICAgX01pc2Nf
cGl2b3RUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUGl2b3RUb29scyJdLl9S
ZXN0b3JlUGl2b3RQb2ludChfdGhpcy5hdHRhY2hlZE1lc2gpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBfdGhpcy5fdXBkYXRlRHVtbXkoKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgLy8gU2VsZWN0aW9uL2Rlc2VsZWN0aW9uCisgICAgICAgICAgICBfZHJhZ0Jl
aGF2aW9yLm9uRHJhZ1N0YXJ0T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgICAgIF90aGlzLm9uRHJhZ1N0YXJ0T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOwor
ICAgICAgICAgICAgICAgIF90aGlzLl9zZWxlY3ROb2RlKHNwaGVyZSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIF9kcmFnQmVoYXZpb3Iub25EcmFnRW5kT2JzZXJ2YWJsZS5hZGQoZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLm9uUm90YXRpb25TcGhlcmVEcmFnRW5k
T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOworICAgICAgICAgICAgICAgIF90aGlzLl9z
ZWxlY3ROb2RlKG51bGwpOworICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVEdW1teSgpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0aGlzXzEuX3JvdGF0ZVNwaGVyZXNQYXJlbnQu
YWRkQ2hpbGQoc3BoZXJlKTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHRoaXNfMSA9IHRoaXMs
IF9kcmFnQmVoYXZpb3I7CisgICAgICAgIGZvciAodmFyIGlfMSA9IDA7IGlfMSA8IDEyOyBpXzEr
KykgeworICAgICAgICAgICAgX2xvb3BfMShpXzEpOworICAgICAgICB9CisgICAgICAgIF90aGlz
Ll9yb290TWVzaC5hZGRDaGlsZChfdGhpcy5fcm90YXRlU3BoZXJlc1BhcmVudCk7CisgICAgICAg
IC8vIENyZWF0ZSBzY2FsZSBjdWJlcworICAgICAgICBfdGhpcy5fc2NhbGVCb3hlc1BhcmVudCA9
IG5ldyBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJB
YnN0cmFjdE1lc2giXSgiIiwgZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAg
IF90aGlzLl9zY2FsZUJveGVzUGFyZW50LnJvdGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdKCk7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IDI7IGorKykgeworICAgICAgICAgICAgICAgIHZhciBfbG9vcF8yID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgYm94ID0gX01lc2hlc19CdWls
ZGVyc19ib3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkJveEJ1aWxkZXIi
XS5DcmVhdGVCb3goIiIsIHsgc2l6ZTogMSB9LCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5l
KTsKKyAgICAgICAgICAgICAgICAgICAgYm94Lm1hdGVyaWFsID0gdGhpc18yLmNvbG9yZWRNYXRl
cmlhbDsKKyAgICAgICAgICAgICAgICAgICAgLy8gRHJhZ2dpbmcgbG9naWMKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGRyYWdBeGlzID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oaSA9PSAwID8gLTEgOiAxLCBqID09IDAgPyAt
MSA6IDEsIGsgPT0gMCA/IC0xIDogMSk7CisgICAgICAgICAgICAgICAgICAgIF9kcmFnQmVoYXZp
b3IgPSBuZXcgX0JlaGF2aW9yc19NZXNoZXNfcG9pbnRlckRyYWdCZWhhdmlvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJQb2ludGVyRHJhZ0JlaGF2aW9yIl0oeyBkcmFnQXhpczogZHJh
Z0F4aXMgfSk7CisgICAgICAgICAgICAgICAgICAgIF9kcmFnQmVoYXZpb3IubW92ZUF0dGFjaGVk
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJveC5hZGRCZWhhdmlvcihfZHJhZ0JlaGF2
aW9yKTsKKyAgICAgICAgICAgICAgICAgICAgX2RyYWdCZWhhdmlvci5vbkRyYWdPYnNlcnZhYmxl
LmFkZChmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm9u
U2NhbGVCb3hEcmFnT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKF90aGlzLmF0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBvcmlnaW5hbFBhcmVudCA9IF90aGlzLmF0dGFjaGVkTWVzaC5wYXJlbnQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsUGFyZW50ICYmIChvcmln
aW5hbFBhcmVudC5zY2FsaW5nICYmIG9yaWdpbmFsUGFyZW50LnNjYWxpbmcuaXNOb25Vbmlmb3Jt
V2l0aGluRXBzaWxvbigwLjAwMSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5XYXJu
KCJCb3VuZGluZ0JveEdpem1vIGNvbnRyb2xzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGNoaWxkIG1l
c2hlcyB3aXRoIG5vbi11bmlmb3JtIHBhcmVudCBzY2FsaW5nIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX01pc2NfcGl2b3RUb29sc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTNfX1siUGl2b3RUb29scyJdLl9SZW1vdmVBbmRTdG9yZVBpdm90UG9pbnQo
X3RoaXMuYXR0YWNoZWRNZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVs
YXRpdmVEcmFnRGlzdGFuY2UgPSAoZXZlbnQuZHJhZ0Rpc3RhbmNlIC8gX3RoaXMuX2JvdW5kaW5n
RGltZW5zaW9ucy5sZW5ndGgoKSkgKiBfdGhpcy5fYW5jaG9yTWVzaC5zY2FsaW5nLmxlbmd0aCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YVNjYWxlID0gbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0ocmVs
YXRpdmVEcmFnRGlzdGFuY2UsIHJlbGF0aXZlRHJhZ0Rpc3RhbmNlLCByZWxhdGl2ZURyYWdEaXN0
YW5jZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFTY2FsZS5zY2FsZUluUGxh
Y2UoX3RoaXMuX3NjYWxlRHJhZ1NwZWVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
dGhpcy51cGRhdGVCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChfdGhpcy5zY2FsZVBpdm90KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90
aGlzLmF0dGFjaGVkTWVzaC5nZXRXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4VG9SZWYo
X3RoaXMuX3RtcFJvdGF0aW9uTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTW92ZSBhbmNob3IgdG8gZGVzaXJlZCBwaXZvdCBwb2ludCAoQm90dG9tIGxlZnQgY29y
bmVyICsgZGltZW5zaW9uLzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlz
Ll9ib3VuZGluZ0RpbWVuc2lvbnMuc2NhbGVUb1JlZigwLjUsIF90aGlzLl90bXBWZWN0b3IpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9S
ZWYoX3RoaXMuX3RtcFZlY3RvciwgX3RoaXMuX3RtcFJvdGF0aW9uTWF0cml4LCBfdGhpcy5fdG1w
VmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FuY2hvck1l
c2gucG9zaXRpb24uc3VidHJhY3RJblBsYWNlKF90aGlzLl90bXBWZWN0b3IpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLm11bHRpcGx5
VG9SZWYoX3RoaXMuc2NhbGVQaXZvdCwgX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihfdGhpcy5fdG1w
VmVjdG9yLCBfdGhpcy5fdG1wUm90YXRpb25NYXRyaXgsIF90aGlzLl90bXBWZWN0b3IpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYW5jaG9yTWVzaC5wb3NpdGlvbi5h
ZGRJblBsYWNlKF90aGlzLl90bXBWZWN0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU2NhbGUgZnJvbSB0aGUgcG9zaXRpb24gb2YgdGhlIG9wcG9zaXRl
IGNvcm5lcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3guYWJzb2x1dGVQb3Np
dGlvbi5zdWJ0cmFjdFRvUmVmKF90aGlzLl9hbmNob3JNZXNoLnBvc2l0aW9uLCBfdGhpcy5fdG1w
VmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FuY2hvck1l
c2gucG9zaXRpb24uc3VidHJhY3RJblBsYWNlKF90aGlzLl90bXBWZWN0b3IpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5f
YW5jaG9yTWVzaC5hZGRDaGlsZChfdGhpcy5hdHRhY2hlZE1lc2gpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl9hbmNob3JNZXNoLnNjYWxpbmcuYWRkSW5QbGFjZShkZWx0YVNj
YWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2FuY2hvck1lc2gu
c2NhbGluZy54IDwgMCB8fCBfdGhpcy5fYW5jaG9yTWVzaC5zY2FsaW5nLnkgPCAwIHx8IF90aGlz
Ll9hbmNob3JNZXNoLnNjYWxpbmcueiA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMuX2FuY2hvck1lc2guc2NhbGluZy5zdWJ0cmFjdEluUGxhY2UoZGVsdGFTY2Fs
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl9hbmNob3JNZXNoLnJlbW92ZUNoaWxkKF90aGlzLmF0dGFjaGVkTWVzaCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoLnNldFBhcmVu
dChvcmlnaW5hbFBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01pc2NfcGl2
b3RUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUGl2b3RUb29scyJdLl9SZXN0
b3JlUGl2b3RQb2ludChfdGhpcy5hdHRhY2hlZE1lc2gpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3VwZGF0ZUR1bW15KCk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3Rpb24vZGVz
ZWxlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgX2RyYWdCZWhhdmlvci5vbkRyYWdTdGFydE9i
c2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlz
Lm9uRHJhZ1N0YXJ0T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOworICAgICAgICAgICAg
ICAgICAgICAgICAgX3RoaXMuX3NlbGVjdE5vZGUoYm94KTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgICAgIF9kcmFnQmVoYXZpb3Iub25EcmFnRW5kT2JzZXJ2YWJs
ZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub25TY2Fs
ZUJveERyYWdFbmRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7fSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5fc2VsZWN0Tm9kZShudWxsKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF90aGlzLl91cGRhdGVEdW1teSgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpc18yLl9zY2FsZUJveGVzUGFyZW50LmFkZENoaWxkKGJveCk7Cisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB2YXIgdGhpc18yID0gdGhpcywgX2Ry
YWdCZWhhdmlvcjsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDI7IGsrKykg
eworICAgICAgICAgICAgICAgICAgICBfbG9vcF8yKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIF90aGlzLl9yb290TWVzaC5hZGRDaGlsZChf
dGhpcy5fc2NhbGVCb3hlc1BhcmVudCk7CisgICAgICAgIC8vIEhvdmVyIGNvbG9yIGNoYW5nZQor
ICAgICAgICB2YXIgcG9pbnRlcklkcyA9IG5ldyBBcnJheSgpOworICAgICAgICBfdGhpcy5fcG9p
bnRlck9ic2VydmVyID0gZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5vblBvaW50ZXJPYnNl
cnZhYmxlLmFkZChmdW5jdGlvbiAocG9pbnRlckluZm8pIHsKKyAgICAgICAgICAgIGlmICghcG9p
bnRlcklkc1twb2ludGVySW5mby5ldmVudC5wb2ludGVySWRdKSB7CisgICAgICAgICAgICAgICAg
X3RoaXMuX3JvdGF0ZVNwaGVyZXNQYXJlbnQuZ2V0Q2hpbGRNZXNoZXMoKS5jb25jYXQoX3RoaXMu
X3NjYWxlQm94ZXNQYXJlbnQuZ2V0Q2hpbGRNZXNoZXMoKSkuZm9yRWFjaChmdW5jdGlvbiAobWVz
aCkgeworICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnRlckluZm8ucGlja0luZm8gJiYgcG9p
bnRlckluZm8ucGlja0luZm8ucGlja2VkTWVzaCA9PSBtZXNoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwb2ludGVySWRzW3BvaW50ZXJJbmZvLmV2ZW50LnBvaW50ZXJJZF0gPSBtZXNoOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbCA9IF90aGlzLmhvdmVyQ29sb3Jl
ZE1hdGVyaWFsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocG9p
bnRlckluZm8ucGlja0luZm8gJiYgcG9pbnRlckluZm8ucGlja0luZm8ucGlja2VkTWVzaCAhPSBw
b2ludGVySWRzW3BvaW50ZXJJbmZvLmV2ZW50LnBvaW50ZXJJZF0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgcG9pbnRlcklkc1twb2ludGVySW5mby5ldmVudC5wb2ludGVySWRdLm1hdGVyaWFsID0g
X3RoaXMuY29sb3JlZE1hdGVyaWFsOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcG9pbnRl
cklkc1twb2ludGVySW5mby5ldmVudC5wb2ludGVySWRdOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIC8vIFVwZGF0ZSBib3VuZGluZyBib3gg
cG9zaXRpb25zCisgICAgICAgIF90aGlzLl9yZW5kZXJPYnNlcnZlciA9IF90aGlzLmdpem1vTGF5
ZXIub3JpZ2luYWxTY2VuZS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBib3VkaW5nIGJveCBpZiBzY2FsaW5n
IGhhcyBjaGFuZ2VkCisgICAgICAgICAgICBpZiAoX3RoaXMuYXR0YWNoZWRNZXNoICYmICFfdGhp
cy5fZXhpc3RpbmdNZXNoU2NhbGUuZXF1YWxzKF90aGlzLmF0dGFjaGVkTWVzaC5zY2FsaW5nKSkg
eworICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZUJvdW5kaW5nQm94KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5maXhlZERyYWdNZXNoU2NyZWVuU2l6ZSkg
eworICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVSb3RhdGlvblNwaGVyZXMoKTsKKyAgICAg
ICAgICAgICAgICBfdGhpcy5fdXBkYXRlU2NhbGVCb3hlcygpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgLy8gSWYgZHJhZ2cgbWVzaCBpcyBlbmFibGVkIGFuZCBkcmFnZ2luZywgdXBkYXRl
IHRoZSBhdHRhY2hlZCBtZXNoIHBvc2UgdG8gbWF0Y2ggdGhlIGRyYWcgbWVzaAorICAgICAgICAg
ICAgaWYgKF90aGlzLl9kcmFnTWVzaCAmJiBfdGhpcy5hdHRhY2hlZE1lc2ggJiYgX3RoaXMucG9p
bnRlckRyYWdCZWhhdmlvci5kcmFnZ2luZykgeworICAgICAgICAgICAgICAgIF90aGlzLl9saW5l
Qm91bmRpbmdCb3gucG9zaXRpb24ucm90YXRlQnlRdWF0ZXJuaW9uVG9SZWYoX3RoaXMuX3Jvb3RN
ZXNoLnJvdGF0aW9uUXVhdGVybmlvbiwgX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICAg
ICAgX3RoaXMuYXR0YWNoZWRNZXNoLnNldEFic29sdXRlUG9zaXRpb24oX3RoaXMuX2RyYWdNZXNo
LnBvc2l0aW9uLmFkZChfdGhpcy5fdG1wVmVjdG9yLnNjYWxlKC0xKSkpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICAgICAgX3RoaXMudXBkYXRlQm91bmRpbmdCb3goKTsKKyAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjb2xvciBv
ZiB0aGUgYm91bmRpbmcgYm94IGdpem1vCisgICAgICogQHBhcmFtIGNvbG9yIHRoZSBjb2xvciB0
byBzZXQKKyAgICAgKi8KKyAgICBCb3VuZGluZ0JveEdpem1vLnByb3RvdHlwZS5zZXRDb2xvciA9
IGZ1bmN0aW9uIChjb2xvcikgeworICAgICAgICB0aGlzLmNvbG9yZWRNYXRlcmlhbC5lbWlzc2l2
ZUNvbG9yID0gY29sb3I7CisgICAgICAgIHRoaXMuaG92ZXJDb2xvcmVkTWF0ZXJpYWwuZW1pc3Np
dmVDb2xvciA9IGNvbG9yLmNsb25lKCkuYWRkKG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTRfX1siQ29sb3IzIl0oMC4zLCAwLjMsIDAuMykpOworICAgICAg
ICB0aGlzLl9saW5lQm91bmRpbmdCb3guZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uIChs
KSB7CisgICAgICAgICAgICBpZiAobC5jb2xvcikgeworICAgICAgICAgICAgICAgIGwuY29sb3Ig
PSBjb2xvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBCb3VuZGlu
Z0JveEdpem1vLnByb3RvdHlwZS5fYXR0YWNoZWRNZXNoQ2hhbmdlZCA9IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIC8vIFJlc2V0IGFuY2hvciBtZXNoIHRvIG1hdGNoIGF0dGFjaGVkIG1lc2gncyBz
Y2FsZQorICAgICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgaW52YWxpZCBib3gv
c3BoZXJlIHBvc2l0aW9uIG9uIGZpcnN0IGRyYWcKKyAgICAgICAgICAgIF9NaXNjX3Bpdm90VG9v
bHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlBpdm90VG9vbHMiXS5fUmVtb3ZlQW5k
U3RvcmVQaXZvdFBvaW50KHZhbHVlKTsKKyAgICAgICAgICAgIHZhciBvcmlnaW5hbFBhcmVudCA9
IHZhbHVlLnBhcmVudDsKKyAgICAgICAgICAgIHRoaXMuX2FuY2hvck1lc2guYWRkQ2hpbGQodmFs
dWUpOworICAgICAgICAgICAgdGhpcy5fYW5jaG9yTWVzaC5yZW1vdmVDaGlsZCh2YWx1ZSk7Cisg
ICAgICAgICAgICB2YWx1ZS5zZXRQYXJlbnQob3JpZ2luYWxQYXJlbnQpOworICAgICAgICAgICAg
X01pc2NfcGl2b3RUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUGl2b3RUb29s
cyJdLl9SZXN0b3JlUGl2b3RQb2ludCh2YWx1ZSk7CisgICAgICAgICAgICB0aGlzLnVwZGF0ZUJv
dW5kaW5nQm94KCk7CisgICAgICAgICAgICB2YWx1ZS5nZXRDaGlsZE1lc2hlcyhmYWxzZSkuZm9y
RWFjaChmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgICAgIG0ubWFya0FzRGlydHkoInNjYWxp
bmciKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5naXptb0xheWVyLnV0aWxp
dHlMYXllclNjZW5lLm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVEdW1teSgpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICB9OworICAgIEJvdW5kaW5nQm94R2l6bW8ucHJvdG90eXBlLl9zZWxl
Y3ROb2RlID0gZnVuY3Rpb24gKHNlbGVjdGVkTWVzaCkgeworICAgICAgICB0aGlzLl9yb3RhdGVT
cGhlcmVzUGFyZW50LmdldENoaWxkTWVzaGVzKCkKKyAgICAgICAgICAgIC5jb25jYXQodGhpcy5f
c2NhbGVCb3hlc1BhcmVudC5nZXRDaGlsZE1lc2hlcygpKS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7
CisgICAgICAgICAgICBtLmlzVmlzaWJsZSA9ICghc2VsZWN0ZWRNZXNoIHx8IG0gPT0gc2VsZWN0
ZWRNZXNoKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRo
ZSBib3VuZGluZyBib3ggaW5mb3JtYXRpb24gZm9yIHRoZSBHaXptbworICAgICAqLworICAgIEJv
dW5kaW5nQm94R2l6bW8ucHJvdG90eXBlLnVwZGF0ZUJvdW5kaW5nQm94ID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBpZiAodGhpcy5hdHRhY2hlZE1lc2gpIHsKKyAgICAgICAgICAgIF9NaXNjX3Bp
dm90VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlBpdm90VG9vbHMiXS5fUmVt
b3ZlQW5kU3RvcmVQaXZvdFBvaW50KHRoaXMuYXR0YWNoZWRNZXNoKTsKKyAgICAgICAgICAgIC8v
IFN0b3JlIG9yaWdpbmFsIHBhcmVudAorICAgICAgICAgICAgdmFyIG9yaWdpbmFsUGFyZW50ID0g
dGhpcy5hdHRhY2hlZE1lc2gucGFyZW50OworICAgICAgICAgICAgdGhpcy5hdHRhY2hlZE1lc2gu
c2V0UGFyZW50KG51bGwpOworICAgICAgICAgICAgLy8gU3RvcmUgb3JpZ2luYWwgc2tlbHRvbiBv
dmVycmlkZSBtZXNoCisgICAgICAgICAgICB2YXIgb3JpZ2luYWxTa2VsZXRvbk92ZXJyaWRlTWVz
aCA9IG51bGw7CisgICAgICAgICAgICBpZiAodGhpcy5hdHRhY2hlZE1lc2guc2tlbGV0b24pIHsK
KyAgICAgICAgICAgICAgICBvcmlnaW5hbFNrZWxldG9uT3ZlcnJpZGVNZXNoID0gdGhpcy5hdHRh
Y2hlZE1lc2guc2tlbGV0b24ub3ZlcnJpZGVNZXNoOworICAgICAgICAgICAgICAgIHRoaXMuYXR0
YWNoZWRNZXNoLnNrZWxldG9uLm92ZXJyaWRlTWVzaCA9IG51bGw7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl91cGRhdGUoKTsKKyAgICAgICAgICAgIC8vIFJvdGF0ZSBiYXNlZCBv
biBheGlzCisgICAgICAgICAgICBpZiAoIXRoaXMuYXR0YWNoZWRNZXNoLnJvdGF0aW9uUXVhdGVy
bmlvbikgeworICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRNZXNoLnJvdGF0aW9uUXVhdGVy
bmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJR
dWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGwodGhpcy5hdHRhY2hlZE1lc2gucm90YXRp
b24ueSwgdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb24ueCwgdGhpcy5hdHRhY2hlZE1lc2gucm90
YXRpb24ueik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXRoaXMuX2FuY2hvck1l
c2gucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYW5jaG9yTWVz
aC5yb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsKHRoaXMuX2Fu
Y2hvck1lc2gucm90YXRpb24ueSwgdGhpcy5fYW5jaG9yTWVzaC5yb3RhdGlvbi54LCB0aGlzLl9h
bmNob3JNZXNoLnJvdGF0aW9uLnopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
YW5jaG9yTWVzaC5yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odGhpcy5hdHRhY2hlZE1lc2gu
cm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgIC8vIFN0b3JlIG9yaWdpbmFsIHBvc2l0
aW9uIGFuZCByZXNldCBtZXNoIHRvIG9yaWdpbiBiZWZvcmUgY29tcHV0aW5nIHRoZSBib3VuZGlu
ZyBib3gKKyAgICAgICAgICAgIHRoaXMuX3RtcFF1YXRlcm5pb24uY29weUZyb20odGhpcy5hdHRh
Y2hlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgIHRoaXMuX3RtcFZlY3Rv
ci5jb3B5RnJvbSh0aGlzLmF0dGFjaGVkTWVzaC5wb3NpdGlvbik7CisgICAgICAgICAgICB0aGlz
LmF0dGFjaGVkTWVzaC5yb3RhdGlvblF1YXRlcm5pb24uc2V0KDAsIDAsIDAsIDEpOworICAgICAg
ICAgICAgdGhpcy5hdHRhY2hlZE1lc2gucG9zaXRpb24uc2V0KDAsIDAsIDApOworICAgICAgICAg
ICAgLy8gVXBkYXRlIGJvdW5kaW5nIGRpbWVuc2lvbnMvcG9zaXRpb25zCisgICAgICAgICAgICB2
YXIgYm91bmRpbmdNaW5NYXggPSB0aGlzLmF0dGFjaGVkTWVzaC5nZXRIaWVyYXJjaHlCb3VuZGlu
Z1ZlY3RvcnMoIXRoaXMuaWdub3JlQ2hpbGRyZW4sIHRoaXMuaW5jbHVkZUNoaWxkUHJlZGljYXRl
KTsKKyAgICAgICAgICAgIGJvdW5kaW5nTWluTWF4Lm1heC5zdWJ0cmFjdFRvUmVmKGJvdW5kaW5n
TWluTWF4Lm1pbiwgdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zKTsKKyAgICAgICAgICAgIC8vIFVw
ZGF0ZSBnaXptbyB0byBtYXRjaCBib3VuZGluZyBib3ggc2NhbGluZyBhbmQgcm90YXRpb24KKyAg
ICAgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBzZXQgaGVyZSBpcyB0aGUgb2Zmc2V0IGZyb20gdGhl
IG9yaWdpbiBmb3IgdGhlIGJvdW5kaW5nYm94IHdoZW4gdGhlIGF0dGFjaGVkIG1lc2ggaXMgYXQg
dGhlIG9yaWdpbgorICAgICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSBnaXptbyBpcyB0
aGVuIHNldCB0byB0aGUgYXR0YWNoZWRNZXNoIGluIGdpem1vLl91cGRhdGUKKyAgICAgICAgICAg
IHRoaXMuX2xpbmVCb3VuZGluZ0JveC5zY2FsaW5nLmNvcHlGcm9tKHRoaXMuX2JvdW5kaW5nRGlt
ZW5zaW9ucyk7CisgICAgICAgICAgICB0aGlzLl9saW5lQm91bmRpbmdCb3gucG9zaXRpb24uc2V0
KChib3VuZGluZ01pbk1heC5tYXgueCArIGJvdW5kaW5nTWluTWF4Lm1pbi54KSAvIDIsIChib3Vu
ZGluZ01pbk1heC5tYXgueSArIGJvdW5kaW5nTWluTWF4Lm1pbi55KSAvIDIsIChib3VuZGluZ01p
bk1heC5tYXgueiArIGJvdW5kaW5nTWluTWF4Lm1pbi56KSAvIDIpOworICAgICAgICAgICAgdGhp
cy5fcm90YXRlU3BoZXJlc1BhcmVudC5wb3NpdGlvbi5jb3B5RnJvbSh0aGlzLl9saW5lQm91bmRp
bmdCb3gucG9zaXRpb24pOworICAgICAgICAgICAgdGhpcy5fc2NhbGVCb3hlc1BhcmVudC5wb3Np
dGlvbi5jb3B5RnJvbSh0aGlzLl9saW5lQm91bmRpbmdCb3gucG9zaXRpb24pOworICAgICAgICAg
ICAgdGhpcy5fbGluZUJvdW5kaW5nQm94LmNvbXB1dGVXb3JsZE1hdHJpeCgpOworICAgICAgICAg
ICAgdGhpcy5fYW5jaG9yTWVzaC5wb3NpdGlvbi5jb3B5RnJvbSh0aGlzLl9saW5lQm91bmRpbmdC
b3guYWJzb2x1dGVQb3NpdGlvbik7CisgICAgICAgICAgICAvLyBSZXN0b3JlIHBvc2l0aW9uL3Jv
dGF0aW9uIHZhbHVlcworICAgICAgICAgICAgdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb25RdWF0
ZXJuaW9uLmNvcHlGcm9tKHRoaXMuX3RtcFF1YXRlcm5pb24pOworICAgICAgICAgICAgdGhpcy5h
dHRhY2hlZE1lc2gucG9zaXRpb24uY29weUZyb20odGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAg
ICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgcGFyZW50CisgICAgICAgICAgICB0aGlzLmF0dGFjaGVk
TWVzaC5zZXRQYXJlbnQob3JpZ2luYWxQYXJlbnQpOworICAgICAgICAgICAgLy8gUmVzdG9yZSBv
cmlnaW5hbCBza2VsZXRvbiBvdmVycmlkZSBtZXNoCisgICAgICAgICAgICBpZiAodGhpcy5hdHRh
Y2hlZE1lc2guc2tlbGV0b24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaGVkTWVzaC5z
a2VsZXRvbi5vdmVycmlkZU1lc2ggPSBvcmlnaW5hbFNrZWxldG9uT3ZlcnJpZGVNZXNoOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZVJvdGF0aW9uU3BoZXJl
cygpOworICAgICAgICB0aGlzLl91cGRhdGVTY2FsZUJveGVzKCk7CisgICAgICAgIGlmICh0aGlz
LmF0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdNZXNoU2NhbGUuY29w
eUZyb20odGhpcy5hdHRhY2hlZE1lc2guc2NhbGluZyk7CisgICAgICAgICAgICBfTWlzY19waXZv
dFRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJQaXZvdFRvb2xzIl0uX1Jlc3Rv
cmVQaXZvdFBvaW50KHRoaXMuYXR0YWNoZWRNZXNoKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
Qm91bmRpbmdCb3hHaXptby5wcm90b3R5cGUuX3VwZGF0ZVJvdGF0aW9uU3BoZXJlcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdmFyIHJvdGF0ZVNwaGVyZXMgPSB0aGlzLl9yb3RhdGVTcGhlcmVz
UGFyZW50LmdldENoaWxkTWVzaGVzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsg
aSsrKSB7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDI7IGorKykgeworICAgICAg
ICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgMjsgaysrKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBpbmRleCA9ICgoaSAqIDQpICsgKGogKiAyKSkgKyBrOworICAgICAgICAgICAgICAg
ICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVTcGhlcmVz
W2luZGV4XS5wb3NpdGlvbi5zZXQodGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnggLyAyLCB0aGlz
Ll9ib3VuZGluZ0RpbWVuc2lvbnMueSAqIGosIHRoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy56ICog
ayk7CisgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVTcGhlcmVzW2luZGV4XS5wb3NpdGlv
bi5hZGRJblBsYWNlKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdKC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueCAvIDIsIC10aGlz
Ll9ib3VuZGluZ0RpbWVuc2lvbnMueSAvIDIsIC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueiAv
IDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVNwaGVyZXNbaW5kZXhdLmxvb2tB
dChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9y
MyJdLkNyb3NzKHJvdGF0ZVNwaGVyZXNbaW5kZXhdLnBvc2l0aW9uLm5vcm1hbGl6ZVRvTmV3KCks
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3Iz
Il0uUmlnaHQoKSkubm9ybWFsaXplVG9OZXcoKS5hZGQocm90YXRlU3BoZXJlc1tpbmRleF0ucG9z
aXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
aSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVTcGhlcmVzW2luZGV4XS5w
b3NpdGlvbi5zZXQodGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnggKiBqLCB0aGlzLl9ib3VuZGlu
Z0RpbWVuc2lvbnMueSAvIDIsIHRoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy56ICogayk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByb3RhdGVTcGhlcmVzW2luZGV4XS5wb3NpdGlvbi5hZGRJblBs
YWNlKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdKC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueCAvIDIsIC10aGlzLl9ib3VuZGlu
Z0RpbWVuc2lvbnMueSAvIDIsIC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueiAvIDIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVNwaGVyZXNbaW5kZXhdLmxvb2tBdChfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkNyb3Nz
KHJvdGF0ZVNwaGVyZXNbaW5kZXhdLnBvc2l0aW9uLm5vcm1hbGl6ZVRvTmV3KCksIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVXAoKSku
bm9ybWFsaXplVG9OZXcoKS5hZGQocm90YXRlU3BoZXJlc1tpbmRleF0ucG9zaXRpb24pKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVTcGhlcmVzW2luZGV4XS5wb3NpdGlvbi5zZXQo
dGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnggKiBqLCB0aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMu
eSAqIGssIHRoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy56IC8gMik7CisgICAgICAgICAgICAgICAg
ICAgICAgICByb3RhdGVTcGhlcmVzW2luZGV4XS5wb3NpdGlvbi5hZGRJblBsYWNlKG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKC10
aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueCAvIDIsIC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMu
eSAvIDIsIC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueiAvIDIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJvdGF0ZVNwaGVyZXNbaW5kZXhdLmxvb2tBdChfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkNyb3NzKHJvdGF0ZVNwaGVy
ZXNbaW5kZXhdLnBvc2l0aW9uLm5vcm1hbGl6ZVRvTmV3KCksIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uRm9yd2FyZCgpKS5ub3JtYWxp
emVUb05ldygpLmFkZChyb3RhdGVTcGhlcmVzW2luZGV4XS5wb3NpdGlvbikpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpeGVkRHJhZ01lc2hT
Y3JlZW5TaXplICYmIHRoaXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5hY3RpdmVDYW1l
cmEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVNwaGVyZXNbaW5kZXhdLmFic29s
dXRlUG9zaXRpb24uc3VidHJhY3RUb1JlZih0aGlzLmdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2Nl
bmUuYWN0aXZlQ2FtZXJhLnBvc2l0aW9uLCB0aGlzLl90bXBWZWN0b3IpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGRpc3RhbmNlRnJvbUNhbWVyYSA9IHRoaXMucm90YXRpb25TcGhlcmVT
aXplICogdGhpcy5fdG1wVmVjdG9yLmxlbmd0aCgpIC8gdGhpcy5maXhlZERyYWdNZXNoU2NyZWVu
U2l6ZURpc3RhbmNlRmFjdG9yOworICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlU3BoZXJl
c1tpbmRleF0uc2NhbGluZy5zZXQoZGlzdGFuY2VGcm9tQ2FtZXJhLCBkaXN0YW5jZUZyb21DYW1l
cmEsIGRpc3RhbmNlRnJvbUNhbWVyYSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVTcGhlcmVz
W2luZGV4XS5zY2FsaW5nLnNldCh0aGlzLnJvdGF0aW9uU3BoZXJlU2l6ZSwgdGhpcy5yb3RhdGlv
blNwaGVyZVNpemUsIHRoaXMucm90YXRpb25TcGhlcmVTaXplKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgQm91bmRpbmdCb3hHaXptby5wcm90b3R5cGUuX3VwZGF0ZVNjYWxlQm94ZXMgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciBzY2FsZUJveGVzID0gdGhpcy5fc2NhbGVCb3hlc1BhcmVu
dC5nZXRDaGlsZE1lc2hlcygpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI7IGkrKykg
eworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAyOyBqKyspIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHZhciBrID0gMDsgayA8IDI7IGsrKykgeworICAgICAgICAgICAgICAgICAgICB2
YXIgaW5kZXggPSAoKGkgKiA0KSArIChqICogMikpICsgazsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHNjYWxlQm94ZXNbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZUJv
eGVzW2luZGV4XS5wb3NpdGlvbi5zZXQodGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnggKiBpLCB0
aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueSAqIGosIHRoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy56
ICogayk7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZUJveGVzW2luZGV4XS5wb3NpdGlv
bi5hZGRJblBsYWNlKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdKC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueCAvIDIsIC10aGlz
Ll9ib3VuZGluZ0RpbWVuc2lvbnMueSAvIDIsIC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueiAv
IDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpeGVkRHJhZ01lc2hTY3Jl
ZW5TaXplICYmIHRoaXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5hY3RpdmVDYW1lcmEp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZUJveGVzW2luZGV4XS5hYnNvbHV0
ZVBvc2l0aW9uLnN1YnRyYWN0VG9SZWYodGhpcy5naXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5l
LmFjdGl2ZUNhbWVyYS5wb3NpdGlvbiwgdGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgZGlzdGFuY2VGcm9tQ2FtZXJhID0gdGhpcy5zY2FsZUJveFNpemUg
KiB0aGlzLl90bXBWZWN0b3IubGVuZ3RoKCkgLyB0aGlzLmZpeGVkRHJhZ01lc2hTY3JlZW5TaXpl
RGlzdGFuY2VGYWN0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVCb3hlc1tp
bmRleF0uc2NhbGluZy5zZXQoZGlzdGFuY2VGcm9tQ2FtZXJhLCBkaXN0YW5jZUZyb21DYW1lcmEs
IGRpc3RhbmNlRnJvbUNhbWVyYSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2Fs
ZUJveGVzW2luZGV4XS5zY2FsaW5nLnNldCh0aGlzLnNjYWxlQm94U2l6ZSwgdGhpcy5zY2FsZUJv
eFNpemUsIHRoaXMuc2NhbGVCb3hTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRW5hYmxlcyByb3RhdGlvbiBvbiB0aGUg
c3BlY2lmaWVkIGF4aXMgYW5kIGRpc2FibGVzIHJvdGF0aW9uIG9uIHRoZSBvdGhlcnMKKyAgICAg
KiBAcGFyYW0gYXhpcyBUaGUgbGlzdCBvZiBheGlzIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgKGVn
LiAieHkiIG9yICJ4eXoiKQorICAgICAqLworICAgIEJvdW5kaW5nQm94R2l6bW8ucHJvdG90eXBl
LnNldEVuYWJsZWRSb3RhdGlvbkF4aXMgPSBmdW5jdGlvbiAoYXhpcykgeworICAgICAgICB0aGlz
Ll9yb3RhdGVTcGhlcmVzUGFyZW50LmdldENoaWxkTWVzaGVzKCkuZm9yRWFjaChmdW5jdGlvbiAo
bSwgaSkgeworICAgICAgICAgICAgaWYgKGkgPCA0KSB7CisgICAgICAgICAgICAgICAgbS5zZXRF
bmFibGVkKGF4aXMuaW5kZXhPZigieCIpICE9IC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKGkgPCA4KSB7CisgICAgICAgICAgICAgICAgbS5zZXRFbmFibGVkKGF4aXMu
aW5kZXhPZigieSIpICE9IC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIG0uc2V0RW5hYmxlZChheGlzLmluZGV4T2YoInoiKSAhPSAtMSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogRW5hYmxl
cy9kaXNhYmxlcyBzY2FsaW5nCisgICAgICogQHBhcmFtIGVuYWJsZSBpZiBzY2FsaW5nIHNob3Vs
ZCBiZSBlbmFibGVkCisgICAgICovCisgICAgQm91bmRpbmdCb3hHaXptby5wcm90b3R5cGUuc2V0
RW5hYmxlZFNjYWxpbmcgPSBmdW5jdGlvbiAoZW5hYmxlKSB7CisgICAgICAgIHRoaXMuX3NjYWxl
Qm94ZXNQYXJlbnQuZ2V0Q2hpbGRNZXNoZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChtLCBpKSB7Cisg
ICAgICAgICAgICBtLnNldEVuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAg
ICBCb3VuZGluZ0JveEdpem1vLnByb3RvdHlwZS5fdXBkYXRlRHVtbXkgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICh0aGlzLl9kcmFnTWVzaCkgeworICAgICAgICAgICAgdGhpcy5fZHJhZ01l
c2gucG9zaXRpb24uY29weUZyb20odGhpcy5fbGluZUJvdW5kaW5nQm94LmdldEFic29sdXRlUG9z
aXRpb24oKSk7CisgICAgICAgICAgICB0aGlzLl9kcmFnTWVzaC5zY2FsaW5nLmNvcHlGcm9tKHRo
aXMuX2xpbmVCb3VuZGluZ0JveC5zY2FsaW5nKTsKKyAgICAgICAgICAgIHRoaXMuX2RyYWdNZXNo
LnJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbSh0aGlzLl9yb290TWVzaC5yb3RhdGlvblF1YXRl
cm5pb24pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFbmFibGVzIGEgcG9p
bnRlciBkcmFnIGJlaGF2aW9yIG9uIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIGdpem1vCisgICAg
ICovCisgICAgQm91bmRpbmdCb3hHaXptby5wcm90b3R5cGUuZW5hYmxlRHJhZ0JlaGF2aW9yID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9kcmFnTWVzaCA9IF9NZXNoZXNfbWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNZXNoIl0uQ3JlYXRlQm94KCJkdW1teSIsIDEsIHRo
aXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgIHRoaXMuX2RyYWdNZXNo
LnZpc2liaWxpdHkgPSAwOworICAgICAgICB0aGlzLl9kcmFnTWVzaC5yb3RhdGlvblF1YXRlcm5p
b24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlF1YXRlcm5pb24iXSgpOworICAgICAgICB0aGlzLnBvaW50ZXJEcmFnQmVoYXZpb3IudXNlT2Jq
ZWN0T3JpZW5hdGlvbkZvckRyYWdnaW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2RyYWdNZXNo
LmFkZEJlaGF2aW9yKHRoaXMucG9pbnRlckRyYWdCZWhhdmlvcik7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBEaXNwb3NlcyBvZiB0aGUgZ2l6bW8KKyAgICAgKi8KKyAgICBCb3VuZGluZ0JveEdp
em1vLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmdpem1v
TGF5ZXIudXRpbGl0eUxheWVyU2NlbmUub25Qb2ludGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5f
cG9pbnRlck9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5naXptb0xheWVyLm9yaWdpbmFsU2NlbmUu
b25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9yZW5kZXJPYnNlcnZlcik7Cisg
ICAgICAgIHRoaXMuX2xpbmVCb3VuZGluZ0JveC5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMuX3Jv
dGF0ZVNwaGVyZXNQYXJlbnQuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9zY2FsZUJveGVzUGFy
ZW50LmRpc3Bvc2UoKTsKKyAgICAgICAgaWYgKHRoaXMuX2RyYWdNZXNoKSB7CisgICAgICAgICAg
ICB0aGlzLl9kcmFnTWVzaC5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgX3N1cGVyLnBy
b3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNYWtl
cyBhIG1lc2ggbm90IHBpY2thYmxlIGFuZCB3cmFwcyB0aGUgbWVzaCBpbnNpZGUgb2YgYSBib3Vu
ZGluZyBib3ggbWVzaCB0aGF0IGlzIHBpY2thYmxlLiAoVGhpcyBpcyB1c2VmdWwgdG8gYXZvaWQg
cGlja2luZyB3aXRoaW4gY29tcGxleCBnZW9tZXRyeSkKKyAgICAgKiBAcGFyYW0gbWVzaCB0aGUg
bWVzaCB0byB3cmFwIGluIHRoZSBib3VuZGluZyBib3ggbWVzaCBhbmQgbWFrZSBub3QgcGlja2Fi
bGUKKyAgICAgKiBAcmV0dXJucyB0aGUgYm91bmRpbmcgYm94IG1lc2ggd2l0aCB0aGUgcGFzc2Vk
IGluIG1lc2ggYXMgYSBjaGlsZAorICAgICAqLworICAgIEJvdW5kaW5nQm94R2l6bW8uTWFrZU5v
dFBpY2thYmxlQW5kV3JhcEluQm91bmRpbmdCb3ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAg
ICB2YXIgbWFrZU5vdFBpY2thYmxlID0gZnVuY3Rpb24gKHJvb3QpIHsKKyAgICAgICAgICAgIHJv
b3QuaXNQaWNrYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgcm9vdC5nZXRDaGlsZE1lc2hlcygp
LmZvckVhY2goZnVuY3Rpb24gKGMpIHsKKyAgICAgICAgICAgICAgICBtYWtlTm90UGlja2FibGUo
Yyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAgICAgICAgbWFrZU5vdFBpY2thYmxl
KG1lc2gpOworICAgICAgICAvLyBSZXNldCBwb3NpdGlvbiB0byBnZXQgYm91ZG5pbmcgYm94IGZy
b20gb3JpZ2luIHdpdGggbm8gcm90YXRpb24KKyAgICAgICAgaWYgKCFtZXNoLnJvdGF0aW9uUXVh
dGVybmlvbikgeworICAgICAgICAgICAgbWVzaC5yb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdLlJv
dGF0aW9uWWF3UGl0Y2hSb2xsKG1lc2gucm90YXRpb24ueSwgbWVzaC5yb3RhdGlvbi54LCBtZXNo
LnJvdGF0aW9uLnopOworICAgICAgICB9CisgICAgICAgIHZhciBvbGRQb3MgPSBtZXNoLnBvc2l0
aW9uLmNsb25lKCk7CisgICAgICAgIHZhciBvbGRSb3QgPSBtZXNoLnJvdGF0aW9uUXVhdGVybmlv
bi5jbG9uZSgpOworICAgICAgICBtZXNoLnJvdGF0aW9uUXVhdGVybmlvbi5zZXQoMCwgMCwgMCwg
MSk7CisgICAgICAgIG1lc2gucG9zaXRpb24uc2V0KDAsIDAsIDApOworICAgICAgICAvLyBVcGRh
dGUgYm91bmRpbmcgZGltZW5zaW9ucy9wb3NpdGlvbnMKKyAgICAgICAgdmFyIGJveCA9IF9NZXNo
ZXNfQnVpbGRlcnNfYm94QnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJCb3hC
dWlsZGVyIl0uQ3JlYXRlQm94KCJib3giLCB7IHNpemU6IDEgfSwgbWVzaC5nZXRTY2VuZSgpKTsK
KyAgICAgICAgdmFyIGJvdW5kaW5nTWluTWF4ID0gbWVzaC5nZXRIaWVyYXJjaHlCb3VuZGluZ1Zl
Y3RvcnMoKTsKKyAgICAgICAgYm91bmRpbmdNaW5NYXgubWF4LnN1YnRyYWN0VG9SZWYoYm91bmRp
bmdNaW5NYXgubWluLCBib3guc2NhbGluZyk7CisgICAgICAgIC8vIEFkanVzdCBzY2FsZSB0byBh
dm9pZCB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiBhZGRpbmcgY2hpbGQKKyAgICAgICAgaWYgKGJv
eC5zY2FsaW5nLnkgPT09IDApIHsKKyAgICAgICAgICAgIGJveC5zY2FsaW5nLnkgPSBfTWF0aHNf
bWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIkVwc2lsb24iXTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoYm94LnNjYWxpbmcueCA9PT0gMCkgeworICAgICAgICAg
ICAgYm94LnNjYWxpbmcueCA9IF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTVfX1siRXBzaWxvbiJdOworICAgICAgICB9CisgICAgICAgIGlmIChib3guc2Nh
bGluZy56ID09PSAwKSB7CisgICAgICAgICAgICBib3guc2NhbGluZy56ID0gX01hdGhzX21hdGhf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJFcHNpbG9uIl07CisgICAg
ICAgIH0KKyAgICAgICAgYm94LnBvc2l0aW9uLnNldCgoYm91bmRpbmdNaW5NYXgubWF4LnggKyBi
b3VuZGluZ01pbk1heC5taW4ueCkgLyAyLCAoYm91bmRpbmdNaW5NYXgubWF4LnkgKyBib3VuZGlu
Z01pbk1heC5taW4ueSkgLyAyLCAoYm91bmRpbmdNaW5NYXgubWF4LnogKyBib3VuZGluZ01pbk1h
eC5taW4ueikgLyAyKTsKKyAgICAgICAgLy8gUmVzdG9yZSBvcmlnaW5hbCBwb3NpdGlvbnMKKyAg
ICAgICAgbWVzaC5hZGRDaGlsZChib3gpOworICAgICAgICBtZXNoLnJvdGF0aW9uUXVhdGVybmlv
bi5jb3B5RnJvbShvbGRSb3QpOworICAgICAgICBtZXNoLnBvc2l0aW9uLmNvcHlGcm9tKG9sZFBv
cyk7CisgICAgICAgIC8vIFJldmVyc2UgcGFyZW50aW5nCisgICAgICAgIG1lc2gucmVtb3ZlQ2hp
bGQoYm94KTsKKyAgICAgICAgYm94LmFkZENoaWxkKG1lc2gpOworICAgICAgICBib3gudmlzaWJp
bGl0eSA9IDA7CisgICAgICAgIHJldHVybiBib3g7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
dXN0b21NZXNoZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBnaXptbworICAgICAqIEBwYXJh
bSBtZXNoIFRoZSBtZXNoIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgbWVzaCBvZiB0aGUgZ2l6bW8K
KyAgICAgKi8KKyAgICBCb3VuZGluZ0JveEdpem1vLnByb3RvdHlwZS5zZXRDdXN0b21NZXNoID0g
ZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkxvZ2dlciJdLkVycm9yKCJDdXN0b20gbWVzaGVzIGFyZSBub3Qgc3VwcG9y
dGVkIG9uIHRoaXMgZ2l6bW8iKTsKKyAgICB9OworICAgIHJldHVybiBCb3VuZGluZ0JveEdpem1v
OworfShfZ2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkdpem1vIl0pKTsKKwor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9HaXptb3MvZ2l6bW8udHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vR2l6bW9zL2dpem1vLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogR2l6bW8gKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2l6bW8iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIEdpem1vOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9N
ZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9SZW5kZXJpbmdfdXRp
bGl0eUxheWVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlciAqLyAiLi9S
ZW5kZXJpbmcvdXRpbGl0eUxheWVyUmVuZGVyZXIudHMiKTsKKworCisKKy8qKgorICogUmVuZGVy
cyBnaXptb3Mgb24gdG9wIG9mIGFuIGV4aXN0aW5nIHNjZW5lIHdoaWNoIHByb3ZpZGUgY29udHJv
bHMgZm9yIHBvc2l0aW9uLCByb3RhdGlvbiwgZXRjLgorICovCit2YXIgR2l6bW8gPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGdpem1vCisg
ICAgICogQHBhcmFtIGdpem1vTGF5ZXIgVGhlIHV0aWxpdHkgbGF5ZXIgdGhlIGdpem1vIHdpbGwg
YmUgYWRkZWQgdG8KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBHaXptbygKKyAgICAvKiogVGhlIHV0
aWxpdHkgbGF5ZXIgdGhlIGdpem1vIHdpbGwgYmUgYWRkZWQgdG8gKi8KKyAgICBnaXptb0xheWVy
KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChnaXptb0xheWVyID09
PSB2b2lkIDApIHsgZ2l6bW9MYXllciA9IF9SZW5kZXJpbmdfdXRpbGl0eUxheWVyUmVuZGVyZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVXRpbGl0eUxheWVyUmVuZGVyZXIiXS5EZWZh
dWx0VXRpbGl0eUxheWVyOyB9CisgICAgICAgIHRoaXMuZ2l6bW9MYXllciA9IGdpem1vTGF5ZXI7
CisgICAgICAgIHRoaXMuX2F0dGFjaGVkTWVzaCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBSYXRpbyBmb3IgdGhlIHNjYWxlIG9mIHRoZSBnaXptbyAoRGVmYXVsdDogMSkKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuc2NhbGVSYXRpbyA9IDE7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBJZiBhIGN1c3RvbSBtZXNoIGhhcyBiZWVuIHNldCAoRGVmYXVsdDogZmFsc2UpCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLl9jdXN0b21NZXNoU2V0ID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBJZiBzZXQgdGhlIGdpem1vJ3Mgcm90YXRpb24gd2lsbCBiZSB1cGRhdGVk
IHRvIG1hdGNoIHRoZSBhdHRhY2hlZCBtZXNoIGVhY2ggZnJhbWUgKERlZmF1bHQ6IHRydWUpCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLnVwZGF0ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0YWNo
ZWRNZXNoID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHNldCB0aGUgZ2l6bW8n
cyBwb3NpdGlvbiB3aWxsIGJlIHVwZGF0ZWQgdG8gbWF0Y2ggdGhlIGF0dGFjaGVkIG1lc2ggZWFj
aCBmcmFtZSAoRGVmYXVsdDogdHJ1ZSkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudXBkYXRl
R2l6bW9Qb3NpdGlvblRvTWF0Y2hBdHRhY2hlZE1lc2ggPSB0cnVlOworICAgICAgICAvKioKKyAg
ICAgICAgICogV2hlbiBzZXQsIHRoZSBnaXptbyB3aWxsIGFsd2F5cyBhcHBlYXIgdGhlIHNhbWUg
c2l6ZSBubyBtYXR0ZXIgd2hlcmUgdGhlIGNhbWVyYSBpcyAoZGVmYXVsdDogdHJ1ZSkKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMudXBkYXRlU2NhbGUgPSB0cnVlOworICAgICAgICB0aGlzLl9p
bnRlcmFjdGlvbnNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fdGVtcFZlY3RvciA9IG5l
dyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdKCk7CisgICAgICAgIHRoaXMuX3Jvb3RNZXNoID0gbmV3IF9NZXNoZXNfbWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0oImdpem1vUm9vdE5vZGUiLCBnaXptb0xheWVy
LnV0aWxpdHlMYXllclNjZW5lKTsKKyAgICAgICAgdGhpcy5fcm9vdE1lc2gucm90YXRpb25RdWF0
ZXJuaW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlF1YXRlcm5pb24iXS5JZGVudGl0eSgpOworICAgICAgICB0aGlzLl9iZWZvcmVSZW5kZXJPYnNl
cnZlciA9IHRoaXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5vbkJlZm9yZVJlbmRlck9i
c2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl91cGRhdGUoKTsK
KyAgICAgICAgfSk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHaXptby5wcm90
b3R5cGUsICJhdHRhY2hlZE1lc2giLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNZXNoIHRo
YXQgdGhlIGdpem1vIHdpbGwgYmUgYXR0YWNoZWQgdG8uIChlZy4gb24gYSBkcmFnIGdpem1vIHRo
ZSBtZXNoIHRoYXQgd2lsbCBiZSBkcmFnZ2VkKQorICAgICAgICAgKiAqIFdoZW4gc2V0LCBpbnRl
cmFjdGlvbnMgd2lsbCBiZSBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hlZE1lc2g7CisgICAgICAg
IH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9h
dHRhY2hlZE1lc2ggPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX3Jvb3RNZXNoLnNldEVuYWJs
ZWQodmFsdWUgPyB0cnVlIDogZmFsc2UpOworICAgICAgICAgICAgdGhpcy5fYXR0YWNoZWRNZXNo
Q2hhbmdlZCh2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIERpc3Bv
c2VzIGFuZCByZXBsYWNlcyB0aGUgY3VycmVudCBtZXNoZXMgaW4gdGhlIGdpem1vIHdpdGggdGhl
IHNwZWNpZmllZCBtZXNoCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gcmVwbGFjZSB0
aGUgZGVmYXVsdCBtZXNoIG9mIHRoZSBnaXptbworICAgICAqLworICAgIEdpem1vLnByb3RvdHlw
ZS5zZXRDdXN0b21NZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKG1lc2guZ2V0
U2NlbmUoKSAhPSB0aGlzLmdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpIHsKKyAgICAgICAg
ICAgIHRocm93ICJXaGVuIHNldHRpbmcgYSBjdXN0b20gbWVzaCBvbiBhIGdpem1vLCB0aGUgY3Vz
dG9tIG1lc2hlcyBzY2VuZSBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBnaXptb3MgKGVnLiBnaXpt
by5naXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKSI7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fcm9vdE1lc2guZ2V0Q2hpbGRNZXNoZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7CisgICAg
ICAgICAgICBjLmRpc3Bvc2UoKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1lc2gucGFyZW50ID0g
dGhpcy5fcm9vdE1lc2g7CisgICAgICAgIHRoaXMuX2N1c3RvbU1lc2hTZXQgPSB0cnVlOworICAg
IH07CisgICAgR2l6bW8ucHJvdG90eXBlLl9hdHRhY2hlZE1lc2hDaGFuZ2VkID0gZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBnaXptbyB0byBt
YXRjaCB0aGUgYXR0YWNoZWQgbWVzaCdzIHBvc2l0aW9uL3JvdGF0aW9uCisgICAgICovCisgICAg
R2l6bW8ucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
LmF0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgdmFyIGVmZmVjdGl2ZU1lc2ggPSB0aGlzLmF0
dGFjaGVkTWVzaC5fZWZmZWN0aXZlTWVzaCB8fCB0aGlzLmF0dGFjaGVkTWVzaDsKKyAgICAgICAg
ICAgIC8vIFBvc2l0aW9uCisgICAgICAgICAgICBpZiAodGhpcy51cGRhdGVHaXptb1Bvc2l0aW9u
VG9NYXRjaEF0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3RNZXNoLnBv
c2l0aW9uLmNvcHlGcm9tKGVmZmVjdGl2ZU1lc2guYWJzb2x1dGVQb3NpdGlvbik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBSb3RhdGlvbgorICAgICAgICAgICAgaWYgKHRoaXMudXBk
YXRlR2l6bW9Sb3RhdGlvblRvTWF0Y2hBdHRhY2hlZE1lc2gpIHsKKyAgICAgICAgICAgICAgICBl
ZmZlY3RpdmVNZXNoLmdldFdvcmxkTWF0cml4KCkuZGVjb21wb3NlKHVuZGVmaW5lZCwgdGhpcy5f
cm9vdE1lc2gucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3RNZXNoLnJvdGF0aW9uUXVhdGVybmlv
bi5zZXQoMCwgMCwgMCwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBTY2FsZQor
ICAgICAgICAgICAgaWYgKHRoaXMudXBkYXRlU2NhbGUpIHsKKyAgICAgICAgICAgICAgICB2YXIg
YWN0aXZlQ2FtZXJhID0gdGhpcy5naXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lLmFjdGl2ZUNh
bWVyYTsKKyAgICAgICAgICAgICAgICB2YXIgY2FtZXJhUG9zaXRpb24gPSBhY3RpdmVDYW1lcmEu
Z2xvYmFsUG9zaXRpb247CisgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUNhbWVyYS5kZXZpY2VQ
b3NpdGlvbikgeworICAgICAgICAgICAgICAgICAgICBjYW1lcmFQb3NpdGlvbiA9IGFjdGl2ZUNh
bWVyYS5kZXZpY2VQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dGhpcy5fcm9vdE1lc2gucG9zaXRpb24uc3VidHJhY3RUb1JlZihjYW1lcmFQb3NpdGlvbiwgdGhp
cy5fdGVtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgdmFyIGRpc3QgPSB0aGlzLl90ZW1wVmVj
dG9yLmxlbmd0aCgpICogdGhpcy5zY2FsZVJhdGlvOworICAgICAgICAgICAgICAgIHRoaXMuX3Jv
b3RNZXNoLnNjYWxpbmcuc2V0KGRpc3QsIGRpc3QsIGRpc3QpOworICAgICAgICAgICAgICAgIC8v
IEFjY291bnQgZm9yIGhhbmRlZG5lc3MsIHNpbWlsYXIgdG8gTWF0cml4LmRlY29tcG9zZQorICAg
ICAgICAgICAgICAgIGlmIChlZmZlY3RpdmVNZXNoLl9nZXRXb3JsZE1hdHJpeERldGVybWluYW50
KCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3RNZXNoLnNjYWxpbmcueSAq
PSAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yb290TWVzaC5zY2FsaW5nLnNldEFsbCh0aGlzLnNj
YWxlUmF0aW8pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBEaXNwb3NlcyBvZiB0aGUgZ2l6bW8KKyAgICAgKi8KKyAgICBHaXptby5wcm90b3R5cGUu
ZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fcm9vdE1lc2guZGlzcG9zZSgp
OworICAgICAgICBpZiAodGhpcy5fYmVmb3JlUmVuZGVyT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAg
IHRoaXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5vbkJlZm9yZVJlbmRlck9ic2VydmFi
bGUucmVtb3ZlKHRoaXMuX2JlZm9yZVJlbmRlck9ic2VydmVyKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgcmV0dXJuIEdpem1vOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9H
aXptb3MvZ2l6bW9NYW5hZ2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9HaXptb3MvZ2l6bW9NYW5hZ2VyLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEdpem1vTWFu
YWdlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHaXptb01hbmFnZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIEdpem1vTWFuYWdlcjsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2Jz
ZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FdmVudHNfcG9pbnRlckV2
ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vRXZlbnRzL3BvaW50ZXJFdmVudHMgKi8gIi4vRXZlbnRzL3BvaW50ZXJFdmVudHMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVz
L2Fic3RyYWN0TWVzaCAqLyAiLi9NZXNoZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmVuZGVyaW5n
L3V0aWxpdHlMYXllclJlbmRlcmVyICovICIuL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJl
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRo
cy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfQmVoYXZpb3JzX01lc2hlc19zaXhEb2ZEcmFnQmVoYXZpb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0JlaGF2aW9y
cy9NZXNoZXMvc2l4RG9mRHJhZ0JlaGF2aW9yICovICIuL0JlaGF2aW9ycy9NZXNoZXMvc2l4RG9m
RHJhZ0JlaGF2aW9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JvdGF0aW9uR2l6
bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vcm90YXRpb25HaXptbyAqLyAiLi9HaXptb3Mvcm90YXRpb25HaXptby50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9wb3NpdGlvbkdpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc2l0aW9uR2l6bW8gKi8gIi4vR2l6
bW9zL3Bvc2l0aW9uR2l6bW8udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NhbGVH
aXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9zY2FsZUdpem1vICovICIuL0dpem1vcy9zY2FsZUdpem1vLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2JvdW5kaW5nQm94R2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYm91bmRpbmdCb3hHaXptbyAqLyAiLi9H
aXptb3MvYm91bmRpbmdCb3hHaXptby50cyIpOworCisKKworCisKKworCisKKworCisvKioKKyAq
IEhlbHBzIHNldHVwIGdpem1vJ3MgaW4gdGhlIHNjZW5lIHRvIHJvdGF0ZS9zY2FsZS9wb3NpdGlv
biBtZXNoZXMKKyAqLwordmFyIEdpem1vTWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICAvKioKKyAgICAgKiBJbnN0YXRpYXRlcyBhIGdpem1vIG1hbmFnZXIKKyAgICAg
KiBAcGFyYW0gc2NlbmUgdGhlIHNjZW5lIHRvIG92ZXJsYXkgdGhlIGdpem1vcyBvbiB0b3Agb2YK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBHaXptb01hbmFnZXIoc2NlbmUpIHsKKyAgICAgICAgdmFy
IF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICAvKiog
V2hlbiB0cnVlLCB0aGUgZ2l6bW8gd2lsbCBiZSBkZXRhY2hlZCBmcm9tIHRoZSBjdXJyZW50IG9i
amVjdCB3aGVuIGEgcG9pbnRlciBkb3duIG9jY3VycyB3aXRoIGFuIGVtcHR5IHBpY2tlZCBtZXNo
ICovCisgICAgICAgIHRoaXMuY2xlYXJHaXptb09uRW1wdHlQb2ludGVyRXZlbnQgPSBmYWxzZTsK
KyAgICAgICAgLyoqIEZpcmVzIGFuIGV2ZW50IHdoZW4gdGhlIG1hbmFnZXIgaXMgYXR0YWNoZWQg
dG8gYSBtZXNoICovCisgICAgICAgIHRoaXMub25BdHRhY2hlZFRvTWVzaE9ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgdGhpcy5fZ2l6bW9zRW5hYmxlZCA9IHsgcG9zaXRpb25HaXptbzog
ZmFsc2UsIHJvdGF0aW9uR2l6bW86IGZhbHNlLCBzY2FsZUdpem1vOiBmYWxzZSwgYm91bmRpbmdC
b3hHaXptbzogZmFsc2UgfTsKKyAgICAgICAgdGhpcy5fcG9pbnRlck9ic2VydmVyID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fYXR0YWNoZWRNZXNoID0gbnVsbDsKKyAgICAgICAgdGhpcy5fYm91bmRp
bmdCb3hDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIkNvbG9yMyJdLkZyb21IZXhTdHJpbmcoIiMwOTg0ZTMiKTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFdoZW4gYm91bmRpbmcgYm94IGdpem1vIGlzIGVuYWJsZWQsIHRoaXMgY2FuIGJlIHVz
ZWQgdG8gdHJhY2sgZHJhZy9lbmQgZXZlbnRzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmJv
dW5kaW5nQm94RHJhZ0JlaGF2aW9yID0gbmV3IF9CZWhhdmlvcnNfTWVzaGVzX3NpeERvZkRyYWdC
ZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTaXhEb2ZEcmFnQmVoYXZpb3Ii
XSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQXJyYXkgb2YgbWVzaGVzIHdoaWNoIHdpbGwg
aGF2ZSB0aGUgZ2l6bW8gYXR0YWNoZWQgd2hlbiBhIHBvaW50ZXIgc2VsZWN0ZWQgdGhlbS4gSWYg
bnVsbCwgYWxsIG1lc2hlcyBhcmUgYXR0YWNoYWJsZS4gKERlZmF1bHQ6IG51bGwpCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmF0dGFjaGFibGVNZXNoZXMgPSBudWxsOworICAgICAgICAvKioK
KyAgICAgICAgICogSWYgcG9pbnRlciBldmVudHMgc2hvdWxkIHBlcmZvcm0gYXR0YWNoaW5nL2Rl
dGFjaGluZyBhIGdpem1vLCBpZiBmYWxzZSB0aGlzIGNhbiBiZSBkb25lIG1hbnVhbGx5IHZpYSBh
dHRhY2hUb01lc2guIChEZWZhdWx0OiB0cnVlKQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy51
c2VQb2ludGVyVG9BdHRhY2hHaXptb3MgPSB0cnVlOworICAgICAgICB0aGlzLl9kZWZhdWx0S2Vl
cERlcHRoVXRpbGl0eUxheWVyID0gbmV3IF9SZW5kZXJpbmdfdXRpbGl0eUxheWVyUmVuZGVyZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVXRpbGl0eUxheWVyUmVuZGVyZXIiXShzY2Vu
ZSk7CisgICAgICAgIHRoaXMuX2RlZmF1bHRLZWVwRGVwdGhVdGlsaXR5TGF5ZXIudXRpbGl0eUxh
eWVyU2NlbmUuYXV0b0NsZWFyRGVwdGhBbmRTdGVuY2lsID0gZmFsc2U7CisgICAgICAgIHRoaXMu
X2RlZmF1bHRVdGlsaXR5TGF5ZXIgPSBuZXcgX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJVdGlsaXR5TGF5ZXJSZW5kZXJlciJdKHNj
ZW5lKTsKKyAgICAgICAgdGhpcy5naXptb3MgPSB7IHBvc2l0aW9uR2l6bW86IG51bGwsIHJvdGF0
aW9uR2l6bW86IG51bGwsIHNjYWxlR2l6bW86IG51bGwsIGJvdW5kaW5nQm94R2l6bW86IG51bGwg
fTsKKyAgICAgICAgLy8gSW5zdGF0aWF0ZS9kaXNwb3NlIGdpem1vcyBiYXNlZCBvbiBwb2ludGVy
IGFjdGlvbnMKKyAgICAgICAgdGhpcy5fcG9pbnRlck9ic2VydmVyID0gc2NlbmUub25Qb2ludGVy
T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHBvaW50ZXJJbmZvKSB7CisgICAgICAgICAgICBpZiAo
IV90aGlzLnVzZVBvaW50ZXJUb0F0dGFjaEdpem1vcykgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwb2ludGVySW5mby50eXBlID09IF9F
dmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb2ludGVy
RXZlbnRUeXBlcyJdLlBPSU5URVJET1dOKSB7CisgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXJJ
bmZvLnBpY2tJbmZvICYmIHBvaW50ZXJJbmZvLnBpY2tJbmZvLnBpY2tlZE1lc2gpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBwb2ludGVySW5mby5waWNrSW5mby5waWNrZWRNZXNo
OworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuYXR0YWNoYWJsZU1lc2hlcyA9PSBudWxs
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRhY2ggdG8gdGhlIG1vc3QgcGFyZW50
IG5vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50
ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJl
bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRh
Y2ggdG8gdGhlIHBhcmVudCBub2RlIHRoYXQgaXMgYW4gYXR0YWNoYWJsZU1lc2gKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgX3RoaXMuYXR0YWNoYWJsZU1lc2hlcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXNoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUgJiYgKG5vZGUgPT0gbWVzaCB8fCBub2Rl
LmlzRGVzY2VuZGFudE9mKG1lc2gpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlID0gbWVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlIGlu
c3RhbmNlb2YgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQWJzdHJhY3RNZXNoIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5f
YXR0YWNoZWRNZXNoICE9IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5hdHRhY2hUb01lc2gobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoX3RoaXMuY2xlYXJHaXptb09uRW1wdHlQb2ludGVyRXZlbnQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5hdHRhY2hUb01lc2gobnVsbCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChf
dGhpcy5jbGVhckdpem1vT25FbXB0eVBvaW50ZXJFdmVudCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMuYXR0YWNoVG9NZXNoKG51bGwpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KEdpem1vTWFuYWdlci5wcm90b3R5cGUsICJrZWVwRGVwdGhV
dGlsaXR5TGF5ZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVdGlsaXR5IGxheWVyIHRo
YXQgdGhlIGJvdW5kaW5nIGJveCBnaXptbyBiZWxvbmdzIHRvCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0S2Vl
cERlcHRoVXRpbGl0eUxheWVyOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoR2l6bW9NYW5hZ2VyLnByb3RvdHlwZSwgInV0aWxpdHlMYXllciIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFV0aWxpdHkgbGF5ZXIgdGhhdCBhbGwgZ2l6bW9zIGJlc2lkZXMg
Ym91bmRpbmcgYm94IGJlbG9uZyB0bworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFV0aWxpdHlMYXllcjsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQXR0YWNoZXMgYSBzZXQgb2YgZ2l6bW9z
IHRvIHRoZSBzcGVjaWZpZWQgbWVzaAorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRoZSBn
aXptbydzIHNob3VsZCBiZSBhdHRhY2hlZCB0bworICAgICAqLworICAgIEdpem1vTWFuYWdlci5w
cm90b3R5cGUuYXR0YWNoVG9NZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKHRo
aXMuX2F0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgdGhpcy5fYXR0YWNoZWRNZXNoLnJlbW92
ZUJlaGF2aW9yKHRoaXMuYm91bmRpbmdCb3hEcmFnQmVoYXZpb3IpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2F0dGFjaGVkTWVzaCA9IG1lc2g7CisgICAgICAgIGZvciAodmFyIGtleSBpbiB0
aGlzLmdpem1vcykgeworICAgICAgICAgICAgdmFyIGdpem1vID0gKHRoaXMuZ2l6bW9zW2tleV0p
OworICAgICAgICAgICAgaWYgKGdpem1vICYmIHRoaXMuX2dpem1vc0VuYWJsZWRba2V5XSkgewor
ICAgICAgICAgICAgICAgIGdpem1vLmF0dGFjaGVkTWVzaCA9IG1lc2g7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuYm91bmRpbmdCb3hHaXptb0VuYWJsZWQgJiYg
dGhpcy5fYXR0YWNoZWRNZXNoKSB7CisgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZE1lc2guYWRk
QmVoYXZpb3IodGhpcy5ib3VuZGluZ0JveERyYWdCZWhhdmlvcik7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5vbkF0dGFjaGVkVG9NZXNoT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMobWVzaCk7
CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2l6bW9NYW5hZ2VyLnByb3RvdHlw
ZSwgInBvc2l0aW9uR2l6bW9FbmFibGVkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9naXptb3NFbmFibGVkLnBvc2l0aW9uR2l6bW87Cisg
ICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0aGUgcG9zaXRpb24gZ2l6bW8g
aXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmICghdGhpcy5naXpt
b3MucG9zaXRpb25HaXptbykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmdpem1vcy5wb3Np
dGlvbkdpem1vID0gbmV3IF9wb3NpdGlvbkdpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83
X19bIlBvc2l0aW9uR2l6bW8iXSh0aGlzLl9kZWZhdWx0VXRpbGl0eUxheWVyKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5naXptb3MucG9zaXRpb25HaXptby5hdHRh
Y2hlZE1lc2ggPSB0aGlzLl9hdHRhY2hlZE1lc2g7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmICh0aGlzLmdpem1vcy5wb3NpdGlvbkdpem1vKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5naXptb3MucG9zaXRpb25HaXptby5hdHRhY2hlZE1lc2ggPSBudWxsOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fZ2l6bW9zRW5hYmxlZC5wb3NpdGlvbkdpem1vID0gdmFs
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHaXptb01h
bmFnZXIucHJvdG90eXBlLCAicm90YXRpb25HaXptb0VuYWJsZWQiLCB7CisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dpem1vc0VuYWJsZWQucm90
YXRpb25HaXptbzsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBy
b3RhdGlvbiBnaXptbyBpcyBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
aWYgKCF0aGlzLmdpem1vcy5yb3RhdGlvbkdpem1vKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuZ2l6bW9zLnJvdGF0aW9uR2l6bW8gPSBuZXcgX3JvdGF0aW9uR2l6bW9fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfX1siUm90YXRpb25HaXptbyJdKHRoaXMuX2RlZmF1bHRVdGlsaXR5TGF5
ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLmdpem1vcy5yb3Rh
dGlvbkdpem1vLmF0dGFjaGVkTWVzaCA9IHRoaXMuX2F0dGFjaGVkTWVzaDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZ2l6bW9zLnJvdGF0aW9uR2l6bW8pIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLmdpem1vcy5yb3RhdGlvbkdpem1vLmF0dGFjaGVkTWVzaCA9IG51
bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9naXptb3NFbmFibGVkLnJvdGF0
aW9uR2l6bW8gPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEdpem1vTWFuYWdlci5wcm90b3R5cGUsICJzY2FsZUdpem1vRW5hYmxlZCIsIHsKKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2l6bW9z
RW5hYmxlZC5zY2FsZUdpem1vOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICog
SWYgdGhlIHNjYWxlIGdpem1vIGlzIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLmdpem1vcy5zY2FsZUdpem1vID0gdGhpcy5naXptb3Muc2NhbGVHaXptbyB8fCBu
ZXcgX3NjYWxlR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2NhbGVHaXptbyJd
KHRoaXMuX2RlZmF1bHRVdGlsaXR5TGF5ZXIpOworICAgICAgICAgICAgICAgIHRoaXMuZ2l6bW9z
LnNjYWxlR2l6bW8uYXR0YWNoZWRNZXNoID0gdGhpcy5fYXR0YWNoZWRNZXNoOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5naXptb3Muc2NhbGVHaXptbykgeworICAg
ICAgICAgICAgICAgIHRoaXMuZ2l6bW9zLnNjYWxlR2l6bW8uYXR0YWNoZWRNZXNoID0gbnVsbDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2dpem1vc0VuYWJsZWQuc2NhbGVHaXpt
byA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
R2l6bW9NYW5hZ2VyLnByb3RvdHlwZSwgImJvdW5kaW5nQm94R2l6bW9FbmFibGVkIiwgeworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9naXptb3NF
bmFibGVkLmJvdW5kaW5nQm94R2l6bW87CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBJZiB0aGUgYm91bmRpbmdCb3ggZ2l6bW8gaXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuZ2l6bW9zLmJvdW5kaW5nQm94R2l6bW8gPSB0aGlzLmdpem1v
cy5ib3VuZGluZ0JveEdpem1vIHx8IG5ldyBfYm91bmRpbmdCb3hHaXptb19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOV9fWyJCb3VuZGluZ0JveEdpem1vIl0odGhpcy5fYm91bmRpbmdCb3hDb2xv
ciwgdGhpcy5fZGVmYXVsdEtlZXBEZXB0aFV0aWxpdHlMYXllcik7CisgICAgICAgICAgICAgICAg
dGhpcy5naXptb3MuYm91bmRpbmdCb3hHaXptby5hdHRhY2hlZE1lc2ggPSB0aGlzLl9hdHRhY2hl
ZE1lc2g7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkTWVzaCkgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZE1lc2gucmVtb3ZlQmVoYXZpb3IodGhpcy5ib3Vu
ZGluZ0JveERyYWdCZWhhdmlvcik7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFjaGVk
TWVzaC5hZGRCZWhhdmlvcih0aGlzLmJvdW5kaW5nQm94RHJhZ0JlaGF2aW9yKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmdpem1v
cy5ib3VuZGluZ0JveEdpem1vKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVk
TWVzaCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZE1lc2gucmVtb3ZlQmVo
YXZpb3IodGhpcy5ib3VuZGluZ0JveERyYWdCZWhhdmlvcik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHRoaXMuZ2l6bW9zLmJvdW5kaW5nQm94R2l6bW8uYXR0YWNoZWRNZXNo
ID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2dpem1vc0VuYWJsZWQu
Ym91bmRpbmdCb3hHaXptbyA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAg
ICAgKiBEaXNwb3NlcyBvZiB0aGUgZ2l6bW8gbWFuYWdlcgorICAgICAqLworICAgIEdpem1vTWFu
YWdlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2Vu
ZS5vblBvaW50ZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9wb2ludGVyT2JzZXJ2ZXIpOworICAg
ICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5naXptb3MpIHsKKyAgICAgICAgICAgIHZhciBnaXpt
byA9ICh0aGlzLmdpem1vc1trZXldKTsKKyAgICAgICAgICAgIGlmIChnaXptbykgeworICAgICAg
ICAgICAgICAgIGdpem1vLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9kZWZhdWx0S2VlcERlcHRoVXRpbGl0eUxheWVyLmRpc3Bvc2UoKTsKKyAgICAg
ICAgdGhpcy5fZGVmYXVsdFV0aWxpdHlMYXllci5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMuYm91
bmRpbmdCb3hEcmFnQmVoYXZpb3IuZGV0YWNoKCk7CisgICAgICAgIHRoaXMub25BdHRhY2hlZFRv
TWVzaE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICB9OworICAgIHJldHVybiBHaXptb01hbmFnZXI7
Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0dpem1vcy9pbmRleC50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HaXptb3MvaW5kZXgudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBBeGlzRHJhZ0dpem1vLCBBeGlzU2NhbGVHaXptbywgQm91bmRpbmdCb3hHaXptbywgR2l6bW8s
IEdpem1vTWFuYWdlciwgUGxhbmVSb3RhdGlvbkdpem1vLCBQb3NpdGlvbkdpem1vLCBSb3RhdGlv
bkdpem1vLCBTY2FsZUdpem1vLCBMaWdodEdpem1vLCBQbGFuZURyYWdHaXptbyAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2F4aXNEcmFnR2l6bW9fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXhpc0Ry
YWdHaXptbyAqLyAiLi9HaXptb3MvYXhpc0RyYWdHaXptby50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJBeGlzRHJhZ0dpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYXhpc0RyYWdHaXptb19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBeGlzRHJhZ0dpem1vIl07IH0pOworCisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2F4aXNTY2FsZUdpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2F4aXNTY2FsZUdpem1vICovICIuL0dp
em1vcy9heGlzU2NhbGVHaXptby50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBeGlzU2NhbGVHaXpt
byIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2F4aXNTY2FsZUdpem1vX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkF4aXNTY2FsZUdpem1vIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2JvdW5kaW5nQm94R2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vYm91bmRpbmdCb3hHaXptbyAqLyAiLi9HaXptb3MvYm91
bmRpbmdCb3hHaXptby50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb3VuZGluZ0JveEdpem1vIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfYm91bmRpbmdCb3hHaXptb19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJCb3VuZGluZ0JveEdpem1vIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2dpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2dpem1vICovICIuL0dpem1vcy9naXptby50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2dpem1vX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkdpem1vIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2dp
em1vTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9naXptb01hbmFnZXIgKi8gIi4vR2l6bW9zL2dpem1vTWFuYWdlci50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJHaXptb01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9naXpt
b01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siR2l6bW9NYW5hZ2VyIl07IH0p
OworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BsYW5lUm90YXRpb25HaXptb19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wbGFuZVJv
dGF0aW9uR2l6bW8gKi8gIi4vR2l6bW9zL3BsYW5lUm90YXRpb25HaXptby50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJQbGFuZVJvdGF0aW9uR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wbGFu
ZVJvdGF0aW9uR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUGxhbmVSb3RhdGlv
bkdpem1vIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc2l0aW9uR2l6bW9f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
cG9zaXRpb25HaXptbyAqLyAiLi9HaXptb3MvcG9zaXRpb25HaXptby50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQb3NpdGlvbkdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9zaXRpb25HaXpt
b19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQb3NpdGlvbkdpem1vIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JvdGF0aW9uR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcm90YXRpb25HaXptbyAqLyAi
Li9HaXptb3Mvcm90YXRpb25HaXptby50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSb3RhdGlvbkdp
em1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcm90YXRpb25HaXptb19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJSb3RhdGlvbkdpem1vIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX3NjYWxlR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vc2NhbGVHaXptbyAqLyAiLi9HaXptb3Mvc2NhbGVHaXptby50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTY2FsZUdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2Nh
bGVHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJTY2FsZUdpem1vIl07IH0pOwor
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xpZ2h0R2l6bW9fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbGlnaHRHaXptbyAqLyAiLi9H
aXptb3MvbGlnaHRHaXptby50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaWdodEdpem1vIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfbGlnaHRHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
WyJMaWdodEdpem1vIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BsYW5lRHJh
Z0dpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9wbGFuZURyYWdHaXptbyAqLyAiLi9HaXptb3MvcGxhbmVEcmFnR2l6bW8udHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUGxhbmVEcmFnR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9w
bGFuZURyYWdHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siUGxhbmVEcmFnR2l6
bW8iXTsgfSk7CisKKworCisKKworCisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL0dpem1vcy9saWdodEdpem1vLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vR2l6bW9zL2xpZ2h0R2l6bW8udHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IExpZ2h0R2l6bW8g
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGlnaHRHaXptbyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gTGlnaHRHaXptbzsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3Rv
ciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29s
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWVzaGVzL2Fic3RyYWN0TWVzaCAqLyAiLi9NZXNoZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNo
ZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9naXptb19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9naXptbyAqLyAi
Li9HaXptb3MvZ2l6bW8udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X3N0YW5kYXJkTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9zdGFuZGFyZE1hdGVyaWFsICovICIuL01hdGVy
aWFscy9zdGFuZGFyZE1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0xp
Z2h0c19oZW1pc3BoZXJpY0xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9MaWdodHMvaGVtaXNwaGVyaWNMaWdodCAqLyAiLi9MaWdo
dHMvaGVtaXNwaGVyaWNMaWdodC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9MaWdo
dHNfZGlyZWN0aW9uYWxMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTGlnaHRzL2RpcmVjdGlvbmFsTGlnaHQgKi8gIi4vTGlnaHRz
L2RpcmVjdGlvbmFsTGlnaHQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVz
X0J1aWxkZXJzX3NwaGVyZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9CdWlsZGVycy9zcGhlcmVCdWlsZGVyICov
ICIuL01lc2hlcy9CdWlsZGVycy9zcGhlcmVCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01lc2hlc19CdWlsZGVyc19oZW1pc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9CdWls
ZGVycy9oZW1pc3BoZXJlQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvaGVtaXNwaGVyZUJ1
aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTGlnaHRzX3Nwb3RMaWdodF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L0xpZ2h0cy9zcG90TGlnaHQgKi8gIi4vTGlnaHRzL3Nwb3RMaWdodC50cyIpOworCisKKworCisK
KworCisKKworCisKKworLyoqCisgKiBHaXptbyB0aGF0IGVuYWJsZXMgdmlld2luZyBhIGxpZ2h0
CisgKi8KK3ZhciBMaWdodEdpem1vID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikg
eworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKExp
Z2h0R2l6bW8sIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIExpZ2h0R2l6bW8K
KyAgICAgKiBAcGFyYW0gZ2l6bW9MYXllciBUaGUgdXRpbGl0eSBsYXllciB0aGUgZ2l6bW8gd2ls
bCBiZSBhZGRlZCB0bworICAgICAqLworICAgIGZ1bmN0aW9uIExpZ2h0R2l6bW8oZ2l6bW9MYXll
cikgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBnaXptb0xheWVyKSB8
fCB0aGlzOworICAgICAgICBfdGhpcy5jYWNoZWRQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKCk7CisgICAgICAg
IF90aGlzLmNhY2hlZEZvcndhcmQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXSgwLCAwLCAxKTsKKyAgICAgICAgX3RoaXMuX2xp
Z2h0ID0gbnVsbDsKKyAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoID0gbmV3IF9NZXNoZXNfYWJz
dHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFic3RyYWN0TWVzaCJdKCIi
LCBfdGhpcy5naXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKTsKKyAgICAgICAgX3RoaXMuX21h
dGVyaWFsID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fWyJTdGFuZGFyZE1hdGVyaWFsIl0oImxpZ2h0IiwgX3RoaXMuZ2l6bW9MYXll
ci5vcmlnaW5hbFNjZW5lKTsKKyAgICAgICAgX3RoaXMuX21hdGVyaWFsLmRpZmZ1c2VDb2xvciA9
IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb2xv
cjMiXSgwLjUsIDAuNSwgMC41KTsKKyAgICAgICAgX3RoaXMuX21hdGVyaWFsLnNwZWN1bGFyQ29s
b3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Q29sb3IzIl0oMC4xLCAwLjEsIDAuMSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExpZ2h0R2l6bW8ucHJvdG90eXBlLCAibGlnaHQiLCB7
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xp
Z2h0OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGxpZ2h0IHRoYXQg
dGhlIGdpem1vIGlzIGF0dGFjaGVkIHRvCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uIChsaWdodCkgeworICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgICAg
IHRoaXMuX2xpZ2h0ID0gbGlnaHQ7CisgICAgICAgICAgICBpZiAobGlnaHQpIHsKKyAgICAgICAg
ICAgICAgICAvLyBDcmVhdGUgdGhlIG1lc2ggZm9yIHRoZSBnaXZlbiBsaWdodCB0eXBlCisgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0TWVzaCkgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLl9saWdodE1lc2guZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAobGlnaHQgaW5zdGFuY2VvZiBfTGlnaHRzX2hlbWlzcGhlcmljTGlnaHRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfX1siSGVtaXNwaGVyaWNMaWdodCJdKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2xpZ2h0TWVzaCA9IExpZ2h0R2l6bW8uX0NyZWF0ZUhlbWlzcGhlcmlj
TGlnaHRNZXNoKHRoaXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxpZ2h0IGluc3RhbmNlb2YgX0xpZ2h0
c19kaXJlY3Rpb25hbExpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkRpcmVjdGlv
bmFsTGlnaHQiXSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9saWdodE1lc2ggPSBMaWdo
dEdpem1vLl9DcmVhdGVEaXJlY3Rpb25hbExpZ2h0TWVzaCh0aGlzLmdpem1vTGF5ZXIudXRpbGl0
eUxheWVyU2NlbmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChsaWdodCBpbnN0YW5jZW9mIF9MaWdodHNfc3BvdExpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xMV9fWyJTcG90TGlnaHQiXSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9saWdo
dE1lc2ggPSBMaWdodEdpem1vLl9DcmVhdGVTcG90TGlnaHRNZXNoKHRoaXMuZ2l6bW9MYXllci51
dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9saWdodE1lc2ggPSBMaWdodEdpem1vLl9D
cmVhdGVQb2ludExpZ2h0TWVzaCh0aGlzLmdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl9saWdodE1lc2guZ2V0Q2hp
bGRNZXNoZXMoZmFsc2UpLmZvckVhY2goZnVuY3Rpb24gKG0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgbS5tYXRlcmlhbCA9IF90aGlzLl9tYXRlcmlhbDsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9saWdodE1lc2gucGFyZW50ID0gdGhpcy5fcm9vdE1lc2g7Cisg
ICAgICAgICAgICAgICAgLy8gQWRkIGxpZ2h0aW5nIHRvIHRoZSBsaWdodCBnaXptbworICAgICAg
ICAgICAgICAgIHZhciBnaXptb0xpZ2h0ID0gdGhpcy5naXptb0xheWVyLl9nZXRTaGFyZWRHaXpt
b0xpZ2h0KCk7CisgICAgICAgICAgICAgICAgZ2l6bW9MaWdodC5pbmNsdWRlZE9ubHlNZXNoZXMg
PSBnaXptb0xpZ2h0LmluY2x1ZGVkT25seU1lc2hlcy5jb25jYXQodGhpcy5fbGlnaHRNZXNoLmdl
dENoaWxkTWVzaGVzKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRNZXNoLnJv
dGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlz
LmF0dGFjaGVkTWVzaC5yZXNlcnZlZERhdGFTdG9yZSkgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLmF0dGFjaGVkTWVzaC5yZXNlcnZlZERhdGFTdG9yZSA9IHt9OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaGVkTWVzaC5yZXNlcnZlZERhdGFTdG9yZS5s
aWdodEdpem1vID0gdGhpczsKKyAgICAgICAgICAgICAgICAvLyBHZXQgdXBkYXRlIHBvc2l0aW9u
IGFuZCBkaXJlY3Rpb24gaWYgdGhlIGxpZ2h0IGhhcyBpdAorICAgICAgICAgICAgICAgIGlmIChs
aWdodC5wb3NpdGlvbikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaGVkTWVzaC5w
b3NpdGlvbi5jb3B5RnJvbShsaWdodC5wb3NpdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChsaWdodC5kaXJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5hdHRhY2hlZE1lc2guc2V0RGlyZWN0aW9uKGxpZ2h0LmRpcmVjdGlvbik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHRHaXpt
by5wcm90b3R5cGUsICJtYXRlcmlhbCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
dGhlIG1hdGVyaWFsIHVzZWQgdG8gcmVuZGVyIHRoZSBsaWdodCBnaXptbworICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF0
ZXJpYWw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAg
KiBVcGRhdGVzIHRoZSBnaXptbyB0byBtYXRjaCB0aGUgYXR0YWNoZWQgbWVzaCdzIHBvc2l0aW9u
L3JvdGF0aW9uCisgICAgICovCisgICAgTGlnaHRHaXptby5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7
CisgICAgICAgIGlmICghdGhpcy5fbGlnaHQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5fbGlnaHQucG9zaXRpb24pIHsKKyAgICAgICAgICAgIC8v
IElmIHRoZSBnaXptbyBpcyBtb3ZlZCB1cGRhdGUgdGhlIGxpZ2h0IG90aGVyd2lzZSB1cGRhdGUg
dGhlIGdpem1vIHRvIG1hdGNoIHRoZSBsaWdodAorICAgICAgICAgICAgaWYgKCF0aGlzLmF0dGFj
aGVkTWVzaC5wb3NpdGlvbi5lcXVhbHModGhpcy5jYWNoZWRQb3NpdGlvbikpIHsKKyAgICAgICAg
ICAgICAgICAvLyB1cGRhdGUgbGlnaHQgdG8gbWF0Y2ggZ2l6bW8KKyAgICAgICAgICAgICAgICB0
aGlzLl9saWdodC5wb3NpdGlvbi5jb3B5RnJvbSh0aGlzLmF0dGFjaGVkTWVzaC5wb3NpdGlvbik7
CisgICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRQb3NpdGlvbi5jb3B5RnJvbSh0aGlzLmF0dGFj
aGVkTWVzaC5wb3NpdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyB1cGRhdGUgZ2l6bW8gdG8gbWF0Y2ggbGlnaHQKKyAgICAgICAgICAg
ICAgICB0aGlzLmF0dGFjaGVkTWVzaC5wb3NpdGlvbi5jb3B5RnJvbSh0aGlzLl9saWdodC5wb3Np
dGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xpZ2h0
LmRpcmVjdGlvbikgeworICAgICAgICAgICAgLy8gSWYgdGhlIGdpem1vIGlzIG1vdmVkIHVwZGF0
ZSB0aGUgbGlnaHQgb3RoZXJ3aXNlIHVwZGF0ZSB0aGUgZ2l6bW8gdG8gbWF0Y2ggdGhlIGxpZ2h0
CisgICAgICAgICAgICBpZiAoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlZlY3RvcjMiXS5EaXN0YW5jZVNxdWFyZWQodGhpcy5hdHRhY2hlZE1lc2guZm9y
d2FyZCwgdGhpcy5jYWNoZWRGb3J3YXJkKSA+IDAuMDAwMSkgeworICAgICAgICAgICAgICAgIC8v
IHVwZGF0ZSBsaWdodCB0byBtYXRjaCBnaXptbworICAgICAgICAgICAgICAgIHRoaXMuX2xpZ2h0
LmRpcmVjdGlvbi5jb3B5RnJvbSh0aGlzLmF0dGFjaGVkTWVzaC5mb3J3YXJkKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLmNhY2hlZEZvcndhcmQuY29weUZyb20odGhpcy5hdHRhY2hlZE1lc2guZm9y
d2FyZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRpc3RhbmNlU3F1
YXJlZCh0aGlzLmF0dGFjaGVkTWVzaC5mb3J3YXJkLCB0aGlzLl9saWdodC5kaXJlY3Rpb24pID4g
MC4wMDAxKSB7CisgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGdpem1vIHRvIG1hdGNoIGxpZ2h0
CisgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hlZE1lc2guc2V0RGlyZWN0aW9uKHRoaXMuX2xp
Z2h0LmRpcmVjdGlvbik7CisgICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRGb3J3YXJkLmNvcHlG
cm9tKHRoaXMuX2xpZ2h0TWVzaC5mb3J3YXJkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBpZiAoIXRoaXMuX2xpZ2h0LmlzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICB0aGlz
Ll9tYXRlcmlhbC5kaWZmdXNlQ29sb3Iuc2V0KDAsIDAsIDApOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGhpcy5fbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLnNldCh0aGlz
Ll9saWdodC5kaWZmdXNlLnIgLyAzLCB0aGlzLl9saWdodC5kaWZmdXNlLmcgLyAzLCB0aGlzLl9s
aWdodC5kaWZmdXNlLmIgLyAzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
RGlzcG9zZXMgb2YgdGhlIGxpZ2h0IGdpem1vCisgICAgICovCisgICAgTGlnaHRHaXptby5wcm90
b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fbWF0ZXJpYWwuZGlz
cG9zZSgpOworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAg
ICB9OworICAgIExpZ2h0R2l6bW8uX0NyZWF0ZUhlbWlzcGhlcmljTGlnaHRNZXNoID0gZnVuY3Rp
b24gKHNjZW5lKSB7CisgICAgICAgIHZhciByb290ID0gbmV3IF9NZXNoZXNfbWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0oImhlbWlzcGhlcmVMaWdodCIsIHNjZW5lKTsK
KyAgICAgICAgdmFyIGhlbWlzcGhlcmUgPSBfTWVzaGVzX0J1aWxkZXJzX2hlbWlzcGhlcmVCdWls
ZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJIZW1pc3BoZXJlQnVpbGRlciJdLkNy
ZWF0ZUhlbWlzcGhlcmUocm9vdC5uYW1lLCB7IHNlZ21lbnRzOiAxMCwgZGlhbWV0ZXI6IDEgfSwg
c2NlbmUpOworICAgICAgICBoZW1pc3BoZXJlLnBvc2l0aW9uLnogPSAtMC4xNTsKKyAgICAgICAg
aGVtaXNwaGVyZS5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7CisgICAgICAgIGhlbWlzcGhlcmUu
cGFyZW50ID0gcm9vdDsKKyAgICAgICAgdmFyIGxpbmVzID0gdGhpcy5fY3JlYXRlTGlnaHRMaW5l
cygzLCBzY2VuZSk7CisgICAgICAgIGxpbmVzLnBhcmVudCA9IHJvb3Q7CisgICAgICAgIGxpbmVz
LnBvc2l0aW9uLnogLSAwLjE1OworICAgICAgICByb290LnNjYWxpbmcuc2NhbGVJblBsYWNlKExp
Z2h0R2l6bW8uX1NjYWxlKTsKKyAgICAgICAgcm9vdC5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7
CisgICAgICAgIHJldHVybiByb290OworICAgIH07CisgICAgTGlnaHRHaXptby5fQ3JlYXRlUG9p
bnRMaWdodE1lc2ggPSBmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICAgICAgdmFyIHJvb3QgPSBuZXcg
X01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1lc2giXSgicG9pbnRM
aWdodCIsIHNjZW5lKTsKKyAgICAgICAgdmFyIHNwaGVyZSA9IF9NZXNoZXNfQnVpbGRlcnNfc3Bo
ZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJTcGhlcmVCdWlsZGVyIl0u
Q3JlYXRlU3BoZXJlKHJvb3QubmFtZSwgeyBzZWdtZW50czogMTAsIGRpYW1ldGVyOiAxIH0sIHNj
ZW5lKTsKKyAgICAgICAgc3BoZXJlLnJvdGF0aW9uLnggPSBNYXRoLlBJIC8gMjsKKyAgICAgICAg
c3BoZXJlLnBhcmVudCA9IHJvb3Q7CisgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuX2NyZWF0ZUxp
Z2h0TGluZXMoNSwgc2NlbmUpOworICAgICAgICBsaW5lcy5wYXJlbnQgPSByb290OworICAgICAg
ICByb290LnNjYWxpbmcuc2NhbGVJblBsYWNlKExpZ2h0R2l6bW8uX1NjYWxlKTsKKyAgICAgICAg
cm9vdC5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7CisgICAgICAgIHJldHVybiByb290OworICAg
IH07CisgICAgTGlnaHRHaXptby5fQ3JlYXRlU3BvdExpZ2h0TWVzaCA9IGZ1bmN0aW9uIChzY2Vu
ZSkgeworICAgICAgICB2YXIgcm9vdCA9IG5ldyBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siTWVzaCJdKCJzcG90TGlnaHQiLCBzY2VuZSk7CisgICAgICAgIHZhciBz
cGhlcmUgPSBfTWVzaGVzX0J1aWxkZXJzX3NwaGVyZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siU3BoZXJlQnVpbGRlciJdLkNyZWF0ZVNwaGVyZShyb290Lm5hbWUsIHsgc2Vn
bWVudHM6IDEwLCBkaWFtZXRlcjogMSB9LCBzY2VuZSk7CisgICAgICAgIHNwaGVyZS5wYXJlbnQg
PSByb290OworICAgICAgICB2YXIgaGVtaXNwaGVyZSA9IF9NZXNoZXNfQnVpbGRlcnNfaGVtaXNw
aGVyZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkhlbWlzcGhlcmVCdWls
ZGVyIl0uQ3JlYXRlSGVtaXNwaGVyZShyb290Lm5hbWUsIHsgc2VnbWVudHM6IDEwLCBkaWFtZXRl
cjogMiB9LCBzY2VuZSk7CisgICAgICAgIGhlbWlzcGhlcmUucGFyZW50ID0gcm9vdDsKKyAgICAg
ICAgaGVtaXNwaGVyZS5yb3RhdGlvbi54ID0gLU1hdGguUEkgLyAyOworICAgICAgICB2YXIgbGlu
ZXMgPSB0aGlzLl9jcmVhdGVMaWdodExpbmVzKDIsIHNjZW5lKTsKKyAgICAgICAgbGluZXMucGFy
ZW50ID0gcm9vdDsKKyAgICAgICAgcm9vdC5zY2FsaW5nLnNjYWxlSW5QbGFjZShMaWdodEdpem1v
Ll9TY2FsZSk7CisgICAgICAgIHJvb3Qucm90YXRpb24ueCA9IE1hdGguUEkgLyAyOworICAgICAg
ICByZXR1cm4gcm9vdDsKKyAgICB9OworICAgIExpZ2h0R2l6bW8uX0NyZWF0ZURpcmVjdGlvbmFs
TGlnaHRNZXNoID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAgICAgIHZhciByb290ID0gbmV3IF9N
ZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0oImRpcmVjdGlv
bmFsTGlnaHQiLCBzY2VuZSk7CisgICAgICAgIHZhciBtZXNoID0gbmV3IF9NZXNoZXNfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0ocm9vdC5uYW1lLCBzY2VuZSk7Cisg
ICAgICAgIG1lc2gucGFyZW50ID0gcm9vdDsKKyAgICAgICAgdmFyIHNwaGVyZSA9IF9NZXNoZXNf
QnVpbGRlcnNfc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJTcGhl
cmVCdWlsZGVyIl0uQ3JlYXRlU3BoZXJlKHJvb3QubmFtZSwgeyBkaWFtZXRlcjogMS4yLCBzZWdt
ZW50czogMTAgfSwgc2NlbmUpOworICAgICAgICBzcGhlcmUucGFyZW50ID0gbWVzaDsKKyAgICAg
ICAgdmFyIGxpbmUgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
TWVzaCJdLkNyZWF0ZUN5bGluZGVyKHJvb3QubmFtZSwgNiwgMC4zLCAwLjMsIDYsIDEsIHNjZW5l
KTsKKyAgICAgICAgbGluZS5wYXJlbnQgPSBtZXNoOworICAgICAgICB2YXIgbGVmdCA9IGxpbmUu
Y2xvbmUocm9vdC5uYW1lKTsKKyAgICAgICAgbGVmdC5zY2FsaW5nLnkgPSAwLjU7CisgICAgICAg
IGxlZnQucG9zaXRpb24ueCArPSAxLjI1OworICAgICAgICB2YXIgcmlnaHQgPSBsaW5lLmNsb25l
KHJvb3QubmFtZSk7CisgICAgICAgIHJpZ2h0LnNjYWxpbmcueSA9IDAuNTsKKyAgICAgICAgcmln
aHQucG9zaXRpb24ueCArPSAtMS4yNTsKKyAgICAgICAgdmFyIGFycm93SGVhZCA9IF9NZXNoZXNf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0uQ3JlYXRlQ3lsaW5kZXIo
cm9vdC5uYW1lLCAxLCAwLCAwLjYsIDYsIDEsIHNjZW5lKTsKKyAgICAgICAgYXJyb3dIZWFkLnBv
c2l0aW9uLnkgKz0gMzsKKyAgICAgICAgYXJyb3dIZWFkLnBhcmVudCA9IG1lc2g7CisgICAgICAg
IHZhciBsZWZ0ID0gYXJyb3dIZWFkLmNsb25lKHJvb3QubmFtZSk7CisgICAgICAgIGxlZnQucG9z
aXRpb24ueSA9IDEuNTsKKyAgICAgICAgbGVmdC5wb3NpdGlvbi54ICs9IDEuMjU7CisgICAgICAg
IHZhciByaWdodCA9IGFycm93SGVhZC5jbG9uZShyb290Lm5hbWUpOworICAgICAgICByaWdodC5w
b3NpdGlvbi55ID0gMS41OworICAgICAgICByaWdodC5wb3NpdGlvbi54ICs9IC0xLjI1OworICAg
ICAgICBtZXNoLnNjYWxpbmcuc2NhbGVJblBsYWNlKExpZ2h0R2l6bW8uX1NjYWxlKTsKKyAgICAg
ICAgbWVzaC5yb3RhdGlvbi56ID0gTWF0aC5QSSAvIDI7CisgICAgICAgIG1lc2gucm90YXRpb24u
eSA9IE1hdGguUEkgLyAyOworICAgICAgICByZXR1cm4gcm9vdDsKKyAgICB9OworICAgIC8vIFN0
YXRpYyBoZWxwZXIgbWV0aG9kcworICAgIExpZ2h0R2l6bW8uX1NjYWxlID0gMC4wMDc7CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyB0aGUgbGluZXMgZm9yIGEgbGlnaHQgbWVzaAorICAgICAqLwor
ICAgIExpZ2h0R2l6bW8uX2NyZWF0ZUxpZ2h0TGluZXMgPSBmdW5jdGlvbiAobGV2ZWxzLCBzY2Vu
ZSkgeworICAgICAgICB2YXIgZGlzdEZyb21TcGhlcmUgPSAxLjI7CisgICAgICAgIHZhciByb290
ID0gbmV3IF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0o
InJvb3QiLCBzY2VuZSk7CisgICAgICAgIHJvb3Qucm90YXRpb24ueCA9IE1hdGguUEkgLyAyOwor
ICAgICAgICAvLyBDcmVhdGUgdGhlIHRvcCBsaW5lLCB0aGlzIHdpbGwgYmUgY2xvbmVkIGZvciBh
bGwgb3RoZXIgbGluZXMKKyAgICAgICAgdmFyIGxpbmVQaXZvdCA9IG5ldyBfTWVzaGVzX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWVzaCJdKCJsaW5lUGl2b3QiLCBzY2VuZSk7
CisgICAgICAgIGxpbmVQaXZvdC5wYXJlbnQgPSByb290OworICAgICAgICB2YXIgbGluZSA9IF9N
ZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0uQ3JlYXRlQ3ls
aW5kZXIoImxpbmUiLCAyLCAwLjIsIDAuMywgNiwgMSwgc2NlbmUpOworICAgICAgICBsaW5lLnBv
c2l0aW9uLnkgPSBsaW5lLnNjYWxpbmcueSAvIDIgKyBkaXN0RnJvbVNwaGVyZTsKKyAgICAgICAg
bGluZS5wYXJlbnQgPSBsaW5lUGl2b3Q7CisgICAgICAgIGlmIChsZXZlbHMgPCAyKSB7CisgICAg
ICAgICAgICByZXR1cm4gbGluZVBpdm90OworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgbCA9IGxpbmVQaXZvdC5jbG9uZSgi
bGluZVBhcmVudENsb25lIik7CisgICAgICAgICAgICBsLnJvdGF0aW9uLnogPSBNYXRoLlBJIC8g
NDsKKyAgICAgICAgICAgIGwucm90YXRpb24ueSA9IChNYXRoLlBJIC8gMikgKyAoTWF0aC5QSSAv
IDIgKiBpKTsKKyAgICAgICAgICAgIGwuZ2V0Q2hpbGRNZXNoZXMoKVswXS5zY2FsaW5nLnkgPSAw
LjU7CisgICAgICAgICAgICBsLmdldENoaWxkTWVzaGVzKClbMF0uc2NhbGluZy54ID0gbC5nZXRD
aGlsZE1lc2hlcygpWzBdLnNjYWxpbmcueiA9IDAuODsKKyAgICAgICAgICAgIGwuZ2V0Q2hpbGRN
ZXNoZXMoKVswXS5wb3NpdGlvbi55ID0gbC5nZXRDaGlsZE1lc2hlcygpWzBdLnNjYWxpbmcueSAv
IDIgKyBkaXN0RnJvbVNwaGVyZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGV2ZWxzIDwgMykg
eworICAgICAgICAgICAgcmV0dXJuIHJvb3Q7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgICAgIHZhciBsID0gbGluZVBpdm90LmNsb25l
KCJsaW5lUGl2b3RDbG9uZSIpOworICAgICAgICAgICAgbC5yb3RhdGlvbi56ID0gTWF0aC5QSSAv
IDI7CisgICAgICAgICAgICBsLnJvdGF0aW9uLnkgPSAoTWF0aC5QSSAvIDIgKiBpKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAobGV2ZWxzIDwgNCkgeworICAgICAgICAgICAgcmV0dXJuIHJvb3Q7
CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAg
ICAgICAgIHZhciBsID0gbGluZVBpdm90LmNsb25lKCJsaW5lUGl2b3RDbG9uZSIpOworICAgICAg
ICAgICAgbC5yb3RhdGlvbi56ID0gTWF0aC5QSSArIChNYXRoLlBJIC8gNCk7CisgICAgICAgICAg
ICBsLnJvdGF0aW9uLnkgPSAoTWF0aC5QSSAvIDIpICsgKE1hdGguUEkgLyAyICogaSk7CisgICAg
ICAgICAgICBsLmdldENoaWxkTWVzaGVzKClbMF0uc2NhbGluZy55ID0gMC41OworICAgICAgICAg
ICAgbC5nZXRDaGlsZE1lc2hlcygpWzBdLnNjYWxpbmcueCA9IGwuZ2V0Q2hpbGRNZXNoZXMoKVsw
XS5zY2FsaW5nLnogPSAwLjg7CisgICAgICAgICAgICBsLmdldENoaWxkTWVzaGVzKClbMF0ucG9z
aXRpb24ueSA9IGwuZ2V0Q2hpbGRNZXNoZXMoKVswXS5zY2FsaW5nLnkgLyAyICsgZGlzdEZyb21T
cGhlcmU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxldmVscyA8IDUpIHsKKyAgICAgICAgICAg
IHJldHVybiByb290OworICAgICAgICB9CisgICAgICAgIHZhciBsID0gbGluZVBpdm90LmNsb25l
KCJsaW5lUGl2b3RDbG9uZSIpOworICAgICAgICBsLnJvdGF0aW9uLnogPSBNYXRoLlBJOworICAg
ICAgICByZXR1cm4gcm9vdDsKKyAgICB9OworICAgIHJldHVybiBMaWdodEdpem1vOworfShfZ2l6
bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siR2l6bW8iXSkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL0dpem1vcy9wbGFuZURyYWdHaXptby50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HaXptb3MvcGxhbmVEcmFnR2l6
bW8udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBQbGFuZURyYWdHaXptbyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJQbGFuZURyYWdHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGxhbmVE
cmFnR2l6bW87IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFi
bGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4v
TWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNf
dHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWVzaGVzL3RyYW5zZm9ybU5vZGUgKi8gIi4vTWVzaGVzL3RyYW5zZm9y
bU5vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJzX3Bs
YW5lQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWVzaGVzL0J1aWxkZXJzL3BsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVp
bGRlcnMvcGxhbmVCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0JlaGF2
aW9yc19NZXNoZXNfcG9pbnRlckRyYWdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQmVoYXZpb3JzL01lc2hlcy9wb2ludGVy
RHJhZ0JlaGF2aW9yICovICIuL0JlaGF2aW9ycy9NZXNoZXMvcG9pbnRlckRyYWdCZWhhdmlvci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9naXptb19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9naXptbyAqLyAiLi9HaXptb3Mv
Z2l6bW8udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUmVuZGVyaW5nX3V0aWxpdHlM
YXllclJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9SZW5kZXJpbmcvdXRpbGl0eUxheWVyUmVuZGVyZXIgKi8gIi4vUmVuZGVy
aW5nL3V0aWxpdHlMYXllclJlbmRlcmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbCAq
LyAiLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbC50cyIpOworCisKKworCisKKworCisKKwor
CisvKioKKyAqIFNpbmdsZSBwbGFuZSBkcmFnIGdpem1vCisgKi8KK3ZhciBQbGFuZURyYWdHaXpt
byA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShQbGFuZURyYWdHaXptbywgX3N1cGVy
KTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgUGxhbmVEcmFnR2l6bW8KKyAgICAgKiBAcGFy
YW0gZ2l6bW9MYXllciBUaGUgdXRpbGl0eSBsYXllciB0aGUgZ2l6bW8gd2lsbCBiZSBhZGRlZCB0
bworICAgICAqIEBwYXJhbSBkcmFnUGxhbmVOb3JtYWwgVGhlIGF4aXMgbm9ybWFsIHRvIHdoaWNo
IHRoZSBnaXptbyB3aWxsIGJlIGFibGUgdG8gZHJhZyBvbgorICAgICAqIEBwYXJhbSBjb2xvciBU
aGUgY29sb3Igb2YgdGhlIGdpem1vCisgICAgICovCisgICAgZnVuY3Rpb24gUGxhbmVEcmFnR2l6
bW8oZHJhZ1BsYW5lTm9ybWFsLCBjb2xvciwgZ2l6bW9MYXllciwgcGFyZW50KSB7CisgICAgICAg
IGlmIChjb2xvciA9PT0gdm9pZCAwKSB7IGNvbG9yID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29sb3IzIl0uR3JheSgpOyB9CisgICAgICAgIGlmIChn
aXptb0xheWVyID09PSB2b2lkIDApIHsgZ2l6bW9MYXllciA9IF9SZW5kZXJpbmdfdXRpbGl0eUxh
eWVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVXRpbGl0eUxheWVyUmVu
ZGVyZXIiXS5EZWZhdWx0VXRpbGl0eUxheWVyOyB9CisgICAgICAgIGlmIChwYXJlbnQgPT09IHZv
aWQgMCkgeyBwYXJlbnQgPSBudWxsOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxs
KHRoaXMsIGdpem1vTGF5ZXIpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9wb2ludGVyT2JzZXJ2
ZXIgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogRHJhZyBkaXN0YW5jZSBpbiBiYWJ5
bG9uIHVuaXRzIHRoYXQgdGhlIGdpem1vIHdpbGwgc25hcCB0byB3aGVuIGRyYWdnZWQgKERlZmF1
bHQ6IDApCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5zbmFwRGlzdGFuY2UgPSAwOworICAg
ICAgICAvKioKKyAgICAgICAgICogRXZlbnQgdGhhdCBmaXJlcyBlYWNoIHRpbWUgdGhlIGdpem1v
IHNuYXBzIHRvIGEgbmV3IGxvY2F0aW9uLgorICAgICAgICAgKiAqIHNuYXBEaXN0YW5jZSBpcyB0
aGUgdGhlIGNoYW5nZSBpbiBkaXN0YW5jZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25T
bmFwT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhpcy5faXNFbmFibGVkID0gZmFs
c2U7CisgICAgICAgIF90aGlzLl9wYXJlbnQgPSBudWxsOworICAgICAgICBfdGhpcy5fcGFyZW50
ID0gcGFyZW50OworICAgICAgICAvLyBDcmVhdGUgTWF0ZXJpYWwKKyAgICAgICAgX3RoaXMuX2Nv
bG9yZWRNYXRlcmlhbCA9IG5ldyBfTWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJpYWxfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siU3RhbmRhcmRNYXRlcmlhbCJdKCIiLCBnaXptb0xheWVyLnV0
aWxpdHlMYXllclNjZW5lKTsKKyAgICAgICAgX3RoaXMuX2NvbG9yZWRNYXRlcmlhbC5kaWZmdXNl
Q29sb3IgPSBjb2xvcjsKKyAgICAgICAgX3RoaXMuX2NvbG9yZWRNYXRlcmlhbC5zcGVjdWxhckNv
bG9yID0gY29sb3Iuc3VidHJhY3QobmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIkNvbG9yMyJdKDAuMSwgMC4xLCAwLjEpKTsKKyAgICAgICAgX3RoaXMu
X2hvdmVyTWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIlN0YW5kYXJkTWF0ZXJpYWwiXSgiIiwgZ2l6bW9MYXllci51
dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgIF90aGlzLl9ob3Zlck1hdGVyaWFsLmRpZmZ1c2VD
b2xvciA9IGNvbG9yLmFkZChuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siQ29sb3IzIl0oMC4zLCAwLjMsIDAuMykpOworICAgICAgICAvLyBCdWlsZCBw
bGFuZSBtZXNoIG9uIHJvb3Qgbm9kZQorICAgICAgICBfdGhpcy5fcGxhbmUgPSBQbGFuZURyYWdH
aXptby5fQ3JlYXRlUGxhbmUoZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSwgX3RoaXMuX2Nv
bG9yZWRNYXRlcmlhbCk7CisgICAgICAgIF90aGlzLl9wbGFuZS5sb29rQXQoX3RoaXMuX3Jvb3RN
ZXNoLnBvc2l0aW9uLmFkZChkcmFnUGxhbmVOb3JtYWwpKTsKKyAgICAgICAgX3RoaXMuX3BsYW5l
LnNjYWxpbmcuc2NhbGVJblBsYWNlKDEgLyAzKTsKKyAgICAgICAgX3RoaXMuX3BsYW5lLnBhcmVu
dCA9IF90aGlzLl9yb290TWVzaDsKKyAgICAgICAgdmFyIGN1cnJlbnRTbmFwRHJhZ0Rpc3RhbmNl
ID0gMDsKKyAgICAgICAgdmFyIHRtcFZlY3RvciA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKCk7CisgICAgICAgIHZhciB0bXBT
bmFwRXZlbnQgPSB7IHNuYXBEaXN0YW5jZTogMCB9OworICAgICAgICAvLyBBZGQgZHJhZ1BsYW5l
Tm9ybWFsIGRyYWcgYmVoYXZpb3IgdG8gaGFuZGxlIGV2ZW50cyB3aGVuIHRoZSBnaXptbyBpcyBk
cmFnZ2VkCisgICAgICAgIF90aGlzLmRyYWdCZWhhdmlvciA9IG5ldyBfQmVoYXZpb3JzX01lc2hl
c19wb2ludGVyRHJhZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvaW50
ZXJEcmFnQmVoYXZpb3IiXSh7IGRyYWdQbGFuZU5vcm1hbDogZHJhZ1BsYW5lTm9ybWFsIH0pOwor
ICAgICAgICBfdGhpcy5kcmFnQmVoYXZpb3IubW92ZUF0dGFjaGVkID0gZmFsc2U7CisgICAgICAg
IF90aGlzLl9yb290TWVzaC5hZGRCZWhhdmlvcihfdGhpcy5kcmFnQmVoYXZpb3IpOworICAgICAg
ICB2YXIgbG9jYWxEZWx0YSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKCk7CisgICAgICAgIHZhciB0bXBNYXRyaXggPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJd
KCk7CisgICAgICAgIF90aGlzLmRyYWdCZWhhdmlvci5vbkRyYWdPYnNlcnZhYmxlLmFkZChmdW5j
dGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5hdHRhY2hlZE1lc2gpIHsKKyAg
ICAgICAgICAgICAgICAvLyBDb252ZXJ0IGRlbHRhIHRvIGxvY2FsIHRyYW5zbGF0aW9uIGlmIGl0
IGhhcyBhIHBhcmVudAorICAgICAgICAgICAgICAgIGlmIChfdGhpcy5hdHRhY2hlZE1lc2gucGFy
ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmF0dGFjaGVkTWVzaC5wYXJlbnQuY29t
cHV0ZVdvcmxkTWF0cml4KCkuaW52ZXJ0VG9SZWYodG1wTWF0cml4KTsKKyAgICAgICAgICAgICAg
ICAgICAgdG1wTWF0cml4LnNldFRyYW5zbGF0aW9uRnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKGV2ZW50LmRlbHRhLCB0
bXBNYXRyaXgsIGxvY2FsRGVsdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxEZWx0YS5jb3B5RnJvbShldmVudC5k
ZWx0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFNuYXBwaW5nIGxv
Z2ljCisgICAgICAgICAgICAgICAgaWYgKF90aGlzLnNuYXBEaXN0YW5jZSA9PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIF90aGlzLmF0dGFjaGVkTWVzaC5wb3NpdGlvbi5hZGRJblBsYWNlKGxv
Y2FsRGVsdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNuYXBEcmFnRGlzdGFuY2UgKz0gZXZlbnQuZHJhZ0Rp
c3RhbmNlOworICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoY3VycmVudFNuYXBEcmFn
RGlzdGFuY2UpID4gX3RoaXMuc25hcERpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZHJhZ1N0ZXBzID0gTWF0aC5mbG9vcihNYXRoLmFicyhjdXJyZW50U25hcERyYWdEaXN0
YW5jZSkgLyBfdGhpcy5zbmFwRGlzdGFuY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNuYXBEcmFnRGlzdGFuY2UgPSBjdXJyZW50U25hcERyYWdEaXN0YW5jZSAlIF90aGlzLnNu
YXBEaXN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsRGVsdGEubm9ybWFsaXpl
VG9SZWYodG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcFZlY3Rvci5zY2Fs
ZUluUGxhY2UoX3RoaXMuc25hcERpc3RhbmNlICogZHJhZ1N0ZXBzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLmF0dGFjaGVkTWVzaC5wb3NpdGlvbi5hZGRJblBsYWNlKHRtcFZlY3Rv
cik7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXBTbmFwRXZlbnQuc25hcERpc3RhbmNlID0g
X3RoaXMuc25hcERpc3RhbmNlICogZHJhZ1N0ZXBzOworICAgICAgICAgICAgICAgICAgICAgICAg
X3RoaXMub25TbmFwT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModG1wU25hcEV2ZW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CisgICAgICAgIF90aGlzLl9wb2ludGVyT2JzZXJ2ZXIgPSBnaXptb0xheWVyLnV0
aWxpdHlMYXllclNjZW5lLm9uUG9pbnRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChwb2ludGVy
SW5mbykgeworICAgICAgICAgICAgaWYgKF90aGlzLl9jdXN0b21NZXNoU2V0KSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGlzSG92ZXJl
ZCA9IHBvaW50ZXJJbmZvLnBpY2tJbmZvICYmIChfdGhpcy5fcm9vdE1lc2guZ2V0Q2hpbGRNZXNo
ZXMoKS5pbmRleE9mKHBvaW50ZXJJbmZvLnBpY2tJbmZvLnBpY2tlZE1lc2gpICE9IC0xKTsKKyAg
ICAgICAgICAgIHZhciBtYXRlcmlhbCA9IGlzSG92ZXJlZCA/IF90aGlzLl9ob3Zlck1hdGVyaWFs
IDogX3RoaXMuX2NvbG9yZWRNYXRlcmlhbDsKKyAgICAgICAgICAgIF90aGlzLl9yb290TWVzaC5n
ZXRDaGlsZE1lc2hlcygpLmZvckVhY2goZnVuY3Rpb24gKG0pIHsKKyAgICAgICAgICAgICAgICBt
Lm1hdGVyaWFsID0gbWF0ZXJpYWw7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHZhciBsaWdodCA9IGdpem1vTGF5ZXIuX2dldFNoYXJlZEdpem1vTGlnaHQoKTsKKyAgICAg
ICAgbGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVzID0gbGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVzLmNv
bmNhdChfdGhpcy5fcm9vdE1lc2guZ2V0Q2hpbGRNZXNoZXMoZmFsc2UpKTsKKyAgICAgICAgcmV0
dXJuIF90aGlzOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBsYW5lRHJhZ0dpem1v
Ll9DcmVhdGVQbGFuZSA9IGZ1bmN0aW9uIChzY2VuZSwgbWF0ZXJpYWwpIHsKKyAgICAgICAgdmFy
IHBsYW5lID0gbmV3IF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJUcmFuc2Zvcm1Ob2RlIl0oInBsYW5lIiwgc2NlbmUpOworICAgICAgICAvL21ha2Ug
c3VyZSBwbGFuZSBpcyBkb3VibGUgc2lkZWQKKyAgICAgICAgdmFyIGRyYWdQbGFuZSA9IF9NZXNo
ZXNfQnVpbGRlcnNfcGxhbmVCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlBs
YW5lQnVpbGRlciJdLkNyZWF0ZVBsYW5lKCJkcmFnUGxhbmUiLCB7IHdpZHRoOiAuMTM3NSwgaGVp
Z2h0OiAuMTM3NSwgc2lkZU9yaWVudGF0aW9uOiAyIH0sIHNjZW5lKTsKKyAgICAgICAgZHJhZ1Bs
YW5lLm1hdGVyaWFsID0gbWF0ZXJpYWw7CisgICAgICAgIGRyYWdQbGFuZS5wYXJlbnQgPSBwbGFu
ZTsKKyAgICAgICAgLy8gUG9zaXRpb24gcGxhbmUgcG9pbnRpbmcgbm9ybWFsIHRvIGRyYWdQbGFu
ZSBub3JtYWwKKyAgICAgICAgZHJhZ1BsYW5lLm1hdGVyaWFsID0gbWF0ZXJpYWw7CisgICAgICAg
IHJldHVybiBwbGFuZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgUGxhbmVEcmFn
R2l6bW8uX0NyZWF0ZUFycm93SW5zdGFuY2UgPSBmdW5jdGlvbiAoc2NlbmUsIGFycm93KSB7Cisg
ICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfTWVzaGVzX3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siVHJhbnNmb3JtTm9kZSJdKCJhcnJvdyIsIHNjZW5lKTsKKyAg
ICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IGFycm93LmdldENoaWxkTWVzaGVzKCk7IF9pIDwg
X2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IF9hW19pXTsKKyAgICAg
ICAgICAgIHZhciBjaGlsZEluc3RhbmNlID0gbWVzaC5jcmVhdGVJbnN0YW5jZShtZXNoLm5hbWUp
OworICAgICAgICAgICAgY2hpbGRJbnN0YW5jZS5wYXJlbnQgPSBpbnN0YW5jZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfTsKKyAgICBQbGFuZURyYWdHaXptby5w
cm90b3R5cGUuX2F0dGFjaGVkTWVzaENoYW5nZWQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg
ICAgaWYgKHRoaXMuZHJhZ0JlaGF2aW9yKSB7CisgICAgICAgICAgICB0aGlzLmRyYWdCZWhhdmlv
ci5lbmFibGVkID0gdmFsdWUgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQbGFuZURyYWdHaXptby5wcm90b3R5cGUsICJpc0VuYWJs
ZWQiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2lzRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRo
ZSBnaXptbyBpcyBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faXNFbmFibGVkID0gdmFsdWU7CisgICAgICAgICAg
ICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hlZE1lc2ggPSBudWxs
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYg
KHRoaXMuX3BhcmVudCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaGVkTWVzaCA9
IHRoaXMuX3BhcmVudC5hdHRhY2hlZE1lc2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyBvZiB0aGUg
Z2l6bW8KKyAgICAgKi8KKyAgICBQbGFuZURyYWdHaXptby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5vblNuYXBPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAg
ICAgIHRoaXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxl
LnJlbW92ZSh0aGlzLl9wb2ludGVyT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLmRyYWdCZWhhdmlv
ci5kZXRhY2goKTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7
CisgICAgICAgIGlmICh0aGlzLl9wbGFuZSkgeworICAgICAgICAgICAgdGhpcy5fcGxhbmUuZGlz
cG9zZSgpOworICAgICAgICB9CisgICAgICAgIFt0aGlzLl9jb2xvcmVkTWF0ZXJpYWwsIHRoaXMu
X2hvdmVyTWF0ZXJpYWxdLmZvckVhY2goZnVuY3Rpb24gKG1hdGwpIHsKKyAgICAgICAgICAgIGlm
IChtYXRsKSB7CisgICAgICAgICAgICAgICAgbWF0bC5kaXNwb3NlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0pOworICAgIH07CisgICAgcmV0dXJuIFBsYW5lRHJhZ0dpem1vOworfShfZ2l6
bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siR2l6bW8iXSkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL0dpem1vcy9wbGFuZVJvdGF0aW9uR2l6bW8udHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dpem1vcy9wbGFu
ZVJvdGF0aW9uR2l6bW8udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUGxhbmVSb3RhdGlvbkdpem1vICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBsYW5lUm90YXRpb25HaXptbyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gUGxhbmVSb3RhdGlvbkdpem1vOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL29i
c2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2Fic3RyYWN0
TWVzaCAqLyAiLi9NZXNoZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9CZWhhdmlvcnNfTWVzaGVzX3BvaW50ZXJEcmFnQmVo
YXZpb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL0JlaGF2aW9ycy9NZXNoZXMvcG9pbnRlckRyYWdCZWhhdmlvciAqLyAiLi9CZWhhdmlv
cnMvTWVzaGVzL3BvaW50ZXJEcmFnQmVoYXZpb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfZ2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vZ2l6bW8gKi8gIi4vR2l6bW9zL2dpem1vLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmVuZGVyaW5nL3V0
aWxpdHlMYXllclJlbmRlcmVyICovICIuL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlh
bF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL3N0YW5kYXJkTWF0
ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJzX2xp
bmVzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01lc2hlcy9CdWlsZGVycy9saW5lc0J1aWxkZXIgKi8gIi4vTWVzaGVzL0J1
aWxkZXJzL2xpbmVzQnVpbGRlci50cyIpOworCisKKworCisKKworCisKKworCisKKy8qKgorICog
U2luZ2xlIHBsYW5lIHJvdGF0aW9uIGdpem1vCisgKi8KK3ZhciBQbGFuZVJvdGF0aW9uR2l6bW8g
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUGxhbmVSb3RhdGlvbkdpem1vLCBfc3Vw
ZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBQbGFuZVJvdGF0aW9uR2l6bW8KKyAgICAg
KiBAcGFyYW0gZ2l6bW9MYXllciBUaGUgdXRpbGl0eSBsYXllciB0aGUgZ2l6bW8gd2lsbCBiZSBh
ZGRlZCB0bworICAgICAqIEBwYXJhbSBwbGFuZU5vcm1hbCBUaGUgbm9ybWFsIG9mIHRoZSBwbGFu
ZSB3aGljaCB0aGUgZ2l6bW8gd2lsbCBiZSBhYmxlIHRvIHJvdGF0ZSBvbgorICAgICAqIEBwYXJh
bSBjb2xvciBUaGUgY29sb3Igb2YgdGhlIGdpem1vCisgICAgICogQHBhcmFtIHRlc3NlbGxhdGlv
biBBbW91bnQgb2YgdGVzc2VsbGF0aW9uIHRvIGJlIHVzZWQgd2hlbiBjcmVhdGluZyByb3RhdGlv
biBjaXJjbGVzCisgICAgICogQHBhcmFtIHVzZUV1bGVyUm90YXRpb24gVXNlIGFuZCB1cGRhdGUg
RXVsZXIgYW5nbGUgaW5zdGVhZCBvZiBxdWF0ZXJuaW9uCisgICAgICovCisgICAgZnVuY3Rpb24g
UGxhbmVSb3RhdGlvbkdpem1vKHBsYW5lTm9ybWFsLCBjb2xvciwgZ2l6bW9MYXllciwgdGVzc2Vs
bGF0aW9uLCBwYXJlbnQsIHVzZUV1bGVyUm90YXRpb24pIHsKKyAgICAgICAgaWYgKGNvbG9yID09
PSB2b2lkIDApIHsgY29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJDb2xvcjMiXS5HcmF5KCk7IH0KKyAgICAgICAgaWYgKGdpem1vTGF5ZXIgPT09
IHZvaWQgMCkgeyBnaXptb0xheWVyID0gX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJVdGlsaXR5TGF5ZXJSZW5kZXJlciJdLkRlZmF1
bHRVdGlsaXR5TGF5ZXI7IH0KKyAgICAgICAgaWYgKHRlc3NlbGxhdGlvbiA9PT0gdm9pZCAwKSB7
IHRlc3NlbGxhdGlvbiA9IDMyOyB9CisgICAgICAgIGlmIChwYXJlbnQgPT09IHZvaWQgMCkgeyBw
YXJlbnQgPSBudWxsOyB9CisgICAgICAgIGlmICh1c2VFdWxlclJvdGF0aW9uID09PSB2b2lkIDAp
IHsgdXNlRXVsZXJSb3RhdGlvbiA9IGZhbHNlOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIGdpem1vTGF5ZXIpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9wb2ludGVy
T2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogUm90YXRpb24gZGlzdGFu
Y2UgaW4gcmFkaWFucyB0aGF0IHRoZSBnaXptbyB3aWxsIHNuYXAgdG8gKERlZmF1bHQ6IDApCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5zbmFwRGlzdGFuY2UgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogRXZlbnQgdGhhdCBmaXJlcyBlYWNoIHRpbWUgdGhlIGdpem1vIHNuYXBzIHRv
IGEgbmV3IGxvY2F0aW9uLgorICAgICAgICAgKiAqIHNuYXBEaXN0YW5jZSBpcyB0aGUgdGhlIGNo
YW5nZSBpbiBkaXN0YW5jZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25TbmFwT2JzZXJ2
YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
Ik9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhpcy5faXNFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgX3RoaXMuX3BhcmVudCA9IG51bGw7CisgICAgICAgIF90aGlzLl9wYXJlbnQgPSBwYXJlbnQ7
CisgICAgICAgIC8vIENyZWF0ZSBNYXRlcmlhbAorICAgICAgICB2YXIgY29sb3JlZE1hdGVyaWFs
ID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJTdGFuZGFyZE1hdGVyaWFsIl0oIiIsIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2Nl
bmUpOworICAgICAgICBjb2xvcmVkTWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gY29sb3I7CisgICAg
ICAgIGNvbG9yZWRNYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gY29sb3Iuc3VidHJhY3QobmV3IF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbG9yMyJdKDAu
MSwgMC4xLCAwLjEpKTsKKyAgICAgICAgdmFyIGhvdmVyTWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFs
c19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlN0YW5kYXJk
TWF0ZXJpYWwiXSgiIiwgZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgIGhv
dmVyTWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gY29sb3IuYWRkKG5ldyBfTWF0aHNfbWF0aF9jb2xv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb2xvcjMiXSgwLjMsIDAuMywgMC4zKSk7
CisgICAgICAgIC8vIEJ1aWxkIG1lc2ggb24gcm9vdCBub2RlCisgICAgICAgIHZhciBwYXJlbnRN
ZXNoID0gbmV3IF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIkFic3RyYWN0TWVzaCJdKCIiLCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKTsKKyAg
ICAgICAgdmFyIGRyYWcgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siTWVzaCJdLkNyZWF0ZVRvcnVzKCIiLCAwLjYsIDAuMDMsIHRlc3NlbGxhdGlvbiwgZ2l6bW9M
YXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgIGRyYWcudmlzaWJpbGl0eSA9IDA7Cisg
ICAgICAgIHZhciByb3RhdGlvbk1lc2ggPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siTWVzaCJdLkNyZWF0ZVRvcnVzKCIiLCAwLjYsIDAuMDA1LCB0ZXNzZWxsYXRp
b24sIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpOworICAgICAgICByb3RhdGlvbk1lc2gu
bWF0ZXJpYWwgPSBjb2xvcmVkTWF0ZXJpYWw7CisgICAgICAgIC8vIFBvc2l0aW9uIGFycm93IHBv
aW50aW5nIGluIGl0cyBkcmFnIGF4aXMKKyAgICAgICAgcm90YXRpb25NZXNoLnJvdGF0aW9uLngg
PSBNYXRoLlBJIC8gMjsKKyAgICAgICAgZHJhZy5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7Cisg
ICAgICAgIHBhcmVudE1lc2guYWRkQ2hpbGQocm90YXRpb25NZXNoKTsKKyAgICAgICAgcGFyZW50
TWVzaC5hZGRDaGlsZChkcmFnKTsKKyAgICAgICAgcGFyZW50TWVzaC5sb29rQXQoX3RoaXMuX3Jv
b3RNZXNoLnBvc2l0aW9uLmFkZChwbGFuZU5vcm1hbCkpOworICAgICAgICBfdGhpcy5fcm9vdE1l
c2guYWRkQ2hpbGQocGFyZW50TWVzaCk7CisgICAgICAgIHBhcmVudE1lc2guc2NhbGluZy5zY2Fs
ZUluUGxhY2UoMSAvIDMpOworICAgICAgICAvLyBBZGQgZHJhZyBiZWhhdmlvciB0byBoYW5kbGUg
ZXZlbnRzIHdoZW4gdGhlIGdpem1vIGlzIGRyYWdnZWQKKyAgICAgICAgX3RoaXMuZHJhZ0JlaGF2
aW9yID0gbmV3IF9CZWhhdmlvcnNfTWVzaGVzX3BvaW50ZXJEcmFnQmVoYXZpb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siUG9pbnRlckRyYWdCZWhhdmlvciJdKHsgZHJhZ1BsYW5lTm9y
bWFsOiBwbGFuZU5vcm1hbCB9KTsKKyAgICAgICAgX3RoaXMuZHJhZ0JlaGF2aW9yLm1vdmVBdHRh
Y2hlZCA9IGZhbHNlOworICAgICAgICBfdGhpcy5kcmFnQmVoYXZpb3IubWF4RHJhZ0FuZ2xlID0g
TWF0aC5QSSAqIDkgLyAyMDsKKyAgICAgICAgX3RoaXMuZHJhZ0JlaGF2aW9yLl91c2VBbHRlcm5h
dGVQaWNrZWRQb2ludEFib3ZlTWF4RHJhZ0FuZ2xlID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX3Jv
b3RNZXNoLmFkZEJlaGF2aW9yKF90aGlzLmRyYWdCZWhhdmlvcik7CisgICAgICAgIHZhciBsYXN0
RHJhZ1Bvc2l0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZWN0b3IzIl0oKTsKKyAgICAgICAgX3RoaXMuZHJhZ0JlaGF2aW9yLm9uRHJh
Z1N0YXJ0T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGlmIChfdGhp
cy5hdHRhY2hlZE1lc2gpIHsKKyAgICAgICAgICAgICAgICBsYXN0RHJhZ1Bvc2l0aW9uLmNvcHlG
cm9tKGUuZHJhZ1BsYW5lUG9pbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAg
ICAgdmFyIHJvdGF0aW9uTWF0cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJNYXRyaXgiXSgpOworICAgICAgICB2YXIgcGxhbmVOb3JtYWxU
b3dhcmRzQ2FtZXJhID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZWN0b3IzIl0oKTsKKyAgICAgICAgdmFyIGxvY2FsUGxhbmVOb3JtYWxUb3dh
cmRzQ2FtZXJhID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJWZWN0b3IzIl0oKTsKKyAgICAgICAgdmFyIHRtcFNuYXBFdmVudCA9IHsgc25hcERp
c3RhbmNlOiAwIH07CisgICAgICAgIHZhciBjdXJyZW50U25hcERyYWdEaXN0YW5jZSA9IDA7Cisg
ICAgICAgIHZhciB0bXBNYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdKCk7CisgICAgICAgIHZhciB0bXBWZWN0b3IgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3Rv
cjMiXSgpOworICAgICAgICB2YXIgYW1vdW50VG9Sb3RhdGUgPSBuZXcgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRlcm5pb24iXSgpOworICAgICAg
ICBfdGhpcy5kcmFnQmVoYXZpb3Iub25EcmFnT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGV2ZW50
KSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuYXR0YWNoZWRNZXNoKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFfdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uIHx8IHVzZUV1bGVy
Um90YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoLnJvdGF0
aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGwoX3RoaXMuYXR0YWNoZWRN
ZXNoLnJvdGF0aW9uLnksIF90aGlzLmF0dGFjaGVkTWVzaC5yb3RhdGlvbi54LCBfdGhpcy5hdHRh
Y2hlZE1lc2gucm90YXRpb24ueik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vIFJlbW92ZSBwYXJlbnQgcHJpb3J0IHRvIHJvdGF0aW5nCisgICAgICAgICAgICAgICAgdmFy
IGF0dGFjaGVkTWVzaFBhcmVudCA9IF90aGlzLmF0dGFjaGVkTWVzaC5wYXJlbnQ7CisgICAgICAg
ICAgICAgICAgaWYgKGF0dGFjaGVkTWVzaFBhcmVudCkgeworICAgICAgICAgICAgICAgICAgICBf
dGhpcy5hdHRhY2hlZE1lc2guc2V0UGFyZW50KG51bGwpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyBDYWxjIGFuZ2xlIG92ZXIgZnVsbCAzNjAgZGVncmVlIChodHRwczov
L3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MzQ5MzcxMS90aGUtYW5nbGUtYmV0d2Vlbi10
d28tM2QtdmVjdG9ycy13aXRoLWEtcmVzdWx0LXJhbmdlLTAtMzYwKQorICAgICAgICAgICAgICAg
IHZhciBuZXdWZWN0b3IgPSBldmVudC5kcmFnUGxhbmVQb2ludC5zdWJ0cmFjdChfdGhpcy5hdHRh
Y2hlZE1lc2guYWJzb2x1dGVQb3NpdGlvbikubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAg
dmFyIG9yaWdpbmFsVmVjdG9yID0gbGFzdERyYWdQb3NpdGlvbi5zdWJ0cmFjdChfdGhpcy5hdHRh
Y2hlZE1lc2guYWJzb2x1dGVQb3NpdGlvbikubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAg
dmFyIGNyb3NzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlY3RvcjMiXS5Dcm9zcyhuZXdWZWN0b3IsIG9yaWdpbmFsVmVjdG9yKTsKKyAgICAgICAg
ICAgICAgICB2YXIgZG90ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlY3RvcjMiXS5Eb3QobmV3VmVjdG9yLCBvcmlnaW5hbFZlY3Rvcik7CisgICAg
ICAgICAgICAgICAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuMihjcm9zcy5sZW5ndGgoKSwgZG90KTsK
KyAgICAgICAgICAgICAgICBwbGFuZU5vcm1hbFRvd2FyZHNDYW1lcmEuY29weUZyb20ocGxhbmVO
b3JtYWwpOworICAgICAgICAgICAgICAgIGxvY2FsUGxhbmVOb3JtYWxUb3dhcmRzQ2FtZXJhLmNv
cHlGcm9tKHBsYW5lTm9ybWFsKTsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMudXBkYXRlR2l6
bW9Sb3RhdGlvblRvTWF0Y2hBdHRhY2hlZE1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuYXR0YWNoZWRNZXNoLnJvdGF0aW9uUXVhdGVybmlvbi50b1JvdGF0aW9uTWF0cml4KHJvdGF0
aW9uTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxQbGFuZU5vcm1hbFRvd2FyZHND
YW1lcmEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
VmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzKHBsYW5lTm9ybWFsVG93YXJkc0NhbWVyYSwg
cm90YXRpb25NYXRyaXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBG
bGlwIHVwIHZlY3RvciBkZXBlbmRpbmcgb24gd2hpY2ggc2lkZSB0aGUgY2FtZXJhIGlzIG9uCisg
ICAgICAgICAgICAgICAgaWYgKGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUuYWN0aXZlQ2Ft
ZXJhKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjYW1WZWMgPSBnaXptb0xheWVyLnV0aWxp
dHlMYXllclNjZW5lLmFjdGl2ZUNhbWVyYS5wb3NpdGlvbi5zdWJ0cmFjdChfdGhpcy5hdHRhY2hl
ZE1lc2gucG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBpZiAoX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5Eb3QoY2FtVmVjLCBs
b2NhbFBsYW5lTm9ybWFsVG93YXJkc0NhbWVyYSkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwbGFuZU5vcm1hbFRvd2FyZHNDYW1lcmEuc2NhbGVJblBsYWNlKC0xKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2FsUGxhbmVOb3JtYWxUb3dhcmRzQ2FtZXJhLnNjYWxlSW5QbGFj
ZSgtMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdmFyIGhhbGZDaXJjbGVTaWRlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5Eb3QobG9jYWxQbGFuZU5vcm1hbFRvd2Fy
ZHNDYW1lcmEsIGNyb3NzKSA+IDAuMDsKKyAgICAgICAgICAgICAgICBpZiAoaGFsZkNpcmNsZVNp
ZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSAtYW5nbGU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vIFNuYXBwaW5nIGxvZ2ljCisgICAgICAgICAgICAgICAg
dmFyIHNuYXBwZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuc25hcERpc3Rh
bmNlICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNuYXBEcmFnRGlzdGFuY2Ug
Kz0gYW5nbGU7CisgICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhjdXJyZW50U25hcERy
YWdEaXN0YW5jZSkgPiBfdGhpcy5zbmFwRGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBkcmFnU3RlcHMgPSBNYXRoLmZsb29yKE1hdGguYWJzKGN1cnJlbnRTbmFwRHJhZ0Rp
c3RhbmNlKSAvIF90aGlzLnNuYXBEaXN0YW5jZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudFNuYXBEcmFnRGlzdGFuY2UgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZHJhZ1N0ZXBzICo9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNuYXBEcmFnRGlzdGFuY2UgPSBjdXJyZW50U25hcERy
YWdEaXN0YW5jZSAlIF90aGlzLnNuYXBEaXN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFuZ2xlID0gX3RoaXMuc25hcERpc3RhbmNlICogZHJhZ1N0ZXBzOworICAgICAgICAgICAgICAg
ICAgICAgICAgc25hcHBlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIG1lc2ggaGFzIGEgcGFyZW50LCBjb252ZXJ0IG5lZWRlZCB3b3JsZCByb3RhdGlv
biB0byBsb2NhbCByb3RhdGlvbgorICAgICAgICAgICAgICAgIHRtcE1hdHJpeC5yZXNldCgpOwor
ICAgICAgICAgICAgICAgIGlmIChfdGhpcy5hdHRhY2hlZE1lc2gucGFyZW50KSB7CisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLmF0dGFjaGVkTWVzaC5wYXJlbnQuY29tcHV0ZVdvcmxkTWF0cml4
KCkuaW52ZXJ0VG9SZWYodG1wTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgdG1wTWF0cml4
LmdldFJvdGF0aW9uTWF0cml4VG9SZWYodG1wTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMi
XS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHBsYW5lTm9ybWFsVG93YXJkc0NhbWVyYSwgdG1w
TWF0cml4LCBwbGFuZU5vcm1hbFRvd2FyZHNDYW1lcmEpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyBDb252ZXJ0IGFuZ2xlIGFuZCBheGlzIHRvIHF1YXRlcm5pb24gKGh0
dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2dlb21ldHJ5L3JvdGF0aW9ucy9jb252
ZXJzaW9ucy9hbmdsZVRvUXVhdGVybmlvbi9pbmRleC5odG0pCisgICAgICAgICAgICAgICAgdmFy
IHF1YXRlcm5pb25Db2VmZmljaWVudCA9IE1hdGguc2luKGFuZ2xlIC8gMik7CisgICAgICAgICAg
ICAgICAgYW1vdW50VG9Sb3RhdGUuc2V0KHBsYW5lTm9ybWFsVG93YXJkc0NhbWVyYS54ICogcXVh
dGVybmlvbkNvZWZmaWNpZW50LCBwbGFuZU5vcm1hbFRvd2FyZHNDYW1lcmEueSAqIHF1YXRlcm5p
b25Db2VmZmljaWVudCwgcGxhbmVOb3JtYWxUb3dhcmRzQ2FtZXJhLnogKiBxdWF0ZXJuaW9uQ29l
ZmZpY2llbnQsIE1hdGguY29zKGFuZ2xlIC8gMikpOworICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBtZXNoZXMgbG9jYWwgc2NhbGUgaXMgaW52ZXJ0ZWQgKGVnLiBsb2FkZWQgZ2x0ZiBmaWxlIHBh
cmVudCB3aXRoIHogc2NhbGUgb2YgLTEpIHRoZSByb3RhdGlvbiBuZWVkcyB0byBiZSBpbnZlcnRl
ZCBvbiB0aGUgeSBheGlzCisgICAgICAgICAgICAgICAgaWYgKHRtcE1hdHJpeC5kZXRlcm1pbmFu
dCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICBhbW91bnRUb1JvdGF0ZS50b0V1bGVyQW5n
bGVzVG9SZWYodG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbllh
d1BpdGNoUm9sbFRvUmVmKHRtcFZlY3Rvci55LCAtdG1wVmVjdG9yLngsIC10bXBWZWN0b3Iueiwg
YW1vdW50VG9Sb3RhdGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
X3RoaXMudXBkYXRlR2l6bW9Sb3RhdGlvblRvTWF0Y2hBdHRhY2hlZE1lc2gpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gUm90YXRlIHNlbGVjdGVkIG1lc2ggcXVhdGVybmlvbiBvdmVyIGZpeGVk
IGF4aXMKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoLnJvdGF0aW9uUXVh
dGVybmlvbi5tdWx0aXBseVRvUmVmKGFtb3VudFRvUm90YXRlLCBfdGhpcy5hdHRhY2hlZE1lc2gu
cm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJvdGF0ZSBzZWxlY3RlZCBtZXNoIHF1YXRl
cm5pb24gb3ZlciByb3RhdGVkIGF4aXMKKyAgICAgICAgICAgICAgICAgICAgYW1vdW50VG9Sb3Rh
dGUubXVsdGlwbHlUb1JlZihfdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uLCBf
dGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKHVzZUV1bGVyUm90YXRpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoLnJvdGF0aW9uUXVhdGVybmlvbi50b0V1bGVyQW5nbGVz
VG9SZWYodG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNo
LnJvdGF0aW9uUXVhdGVybmlvbiA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmF0
dGFjaGVkTWVzaC5yb3RhdGlvbi5jb3B5RnJvbSh0bXBWZWN0b3IpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBsYXN0RHJhZ1Bvc2l0aW9uLmNvcHlGcm9tKGV2ZW50LmRyYWdQ
bGFuZVBvaW50KTsKKyAgICAgICAgICAgICAgICBpZiAoc25hcHBlZCkgeworICAgICAgICAgICAg
ICAgICAgICB0bXBTbmFwRXZlbnQuc25hcERpc3RhbmNlID0gYW5nbGU7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLm9uU25hcE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRtcFNuYXBFdmVu
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgcGFyZW50
CisgICAgICAgICAgICAgICAgaWYgKGF0dGFjaGVkTWVzaFBhcmVudCkgeworICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5hdHRhY2hlZE1lc2guc2V0UGFyZW50KGF0dGFjaGVkTWVzaFBhcmVudCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAg
X3RoaXMuX3BvaW50ZXJPYnNlcnZlciA9IGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUub25Q
b2ludGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHBvaW50ZXJJbmZvKSB7CisgICAgICAgICAg
ICBpZiAoX3RoaXMuX2N1c3RvbU1lc2hTZXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgaXNIb3ZlcmVkID0gcG9pbnRlckluZm8ucGlj
a0luZm8gJiYgKF90aGlzLl9yb290TWVzaC5nZXRDaGlsZE1lc2hlcygpLmluZGV4T2YocG9pbnRl
ckluZm8ucGlja0luZm8ucGlja2VkTWVzaCkgIT0gLTEpOworICAgICAgICAgICAgdmFyIG1hdGVy
aWFsID0gaXNIb3ZlcmVkID8gaG92ZXJNYXRlcmlhbCA6IGNvbG9yZWRNYXRlcmlhbDsKKyAgICAg
ICAgICAgIF90aGlzLl9yb290TWVzaC5nZXRDaGlsZE1lc2hlcygpLmZvckVhY2goZnVuY3Rpb24g
KG0pIHsKKyAgICAgICAgICAgICAgICBtLm1hdGVyaWFsID0gbWF0ZXJpYWw7CisgICAgICAgICAg
ICAgICAgaWYgKG0uY29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgbS5jb2xvciA9IG1hdGVy
aWFsLmRpZmZ1c2VDb2xvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7CisgICAgICAgIHZhciBsaWdodCA9IGdpem1vTGF5ZXIuX2dldFNoYXJlZEdpem1v
TGlnaHQoKTsKKyAgICAgICAgbGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVzID0gbGlnaHQuaW5jbHVk
ZWRPbmx5TWVzaGVzLmNvbmNhdChfdGhpcy5fcm9vdE1lc2guZ2V0Q2hpbGRNZXNoZXMoZmFsc2Up
KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBQbGFuZVJvdGF0aW9uR2l6bW8u
cHJvdG90eXBlLl9hdHRhY2hlZE1lc2hDaGFuZ2VkID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgIGlmICh0aGlzLmRyYWdCZWhhdmlvcikgeworICAgICAgICAgICAgdGhpcy5kcmFnQmVoYXZp
b3IuZW5hYmxlZCA9IHZhbHVlID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICB9CisgICAgfTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGxhbmVSb3RhdGlvbkdpem1vLnByb3RvdHlwZSwgImlz
RW5hYmxlZCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5faXNFbmFibGVkOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICAg
ICAqIElmIHRoZSBnaXptbyBpcyBlbmFibGVkCisgICAgICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IHZhbHVl
OworICAgICAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNo
ZWRNZXNoID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5h
dHRhY2hlZE1lc2ggPSB0aGlzLl9wYXJlbnQuYXR0YWNoZWRNZXNoOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRGlz
cG9zZXMgb2YgdGhlIGdpem1vCisgICAgICovCisgICAgUGxhbmVSb3RhdGlvbkdpem1vLnByb3Rv
dHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLm9uU25hcE9ic2VydmFi
bGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5naXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lLm9u
UG9pbnRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX3BvaW50ZXJPYnNlcnZlcik7CisgICAgICAg
IHRoaXMuZHJhZ0JlaGF2aW9yLmRldGFjaCgpOworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRp
c3Bvc2UuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIHJldHVybiBQbGFuZVJvdGF0aW9uR2l6bW87
Cit9KF9naXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJHaXptbyJdKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vR2l6bW9zL3Bvc2l0aW9uR2l6bW8udHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HaXptb3MvcG9zaXRp
b25HaXptby50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogUG9zaXRpb25HaXptbyAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQb3NpdGlvbkdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQb3Np
dGlvbkdpem1vOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4u
L25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxl
ICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX2dpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2dpem1vICovICIuL0dpem1vcy9naXptby50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9heGlzRHJhZ0dpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2F4aXNEcmFnR2l6bW8gKi8gIi4vR2l6
bW9zL2F4aXNEcmFnR2l6bW8udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGxhbmVE
cmFnR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vcGxhbmVEcmFnR2l6bW8gKi8gIi4vR2l6bW9zL3BsYW5lRHJhZ0dpem1vLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJlbmRlcmVyICovICIuL1JlbmRlcmluZy91dGlsaXR5
TGF5ZXJSZW5kZXJlci50cyIpOworCisKKworCisKKworCisKKworLyoqCisgKiBHaXptbyB0aGF0
IGVuYWJsZXMgZHJhZ2dpbmcgYSBtZXNoIGFsb25nIDMgYXhpcworICovCit2YXIgUG9zaXRpb25H
aXptbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShQb3NpdGlvbkdpem1vLCBfc3Vw
ZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBQb3NpdGlvbkdpem1vCisgICAgICogQHBh
cmFtIGdpem1vTGF5ZXIgVGhlIHV0aWxpdHkgbGF5ZXIgdGhlIGdpem1vIHdpbGwgYmUgYWRkZWQg
dG8KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQb3NpdGlvbkdpem1vKGdpem1vTGF5ZXIpIHsKKyAg
ICAgICAgaWYgKGdpem1vTGF5ZXIgPT09IHZvaWQgMCkgeyBnaXptb0xheWVyID0gX1JlbmRlcmlu
Z191dGlsaXR5TGF5ZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJVdGls
aXR5TGF5ZXJSZW5kZXJlciJdLkRlZmF1bHRVdGlsaXR5TGF5ZXI7IH0KKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZ2l6bW9MYXllcikgfHwgdGhpczsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIHByaXZhdGUgdmFyaWFibGVzCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5fbWVzaEF0dGFjaGVkID0gbnVsbDsKKyAgICAgICAgLyoqIEZpcmVzIGFuIGV2ZW50IHdoZW4g
YW55IG9mIGl0J3Mgc3ViIGdpem1vcyBhcmUgZHJhZ2dlZCAqLworICAgICAgICBfdGhpcy5vbkRy
YWdTdGFydE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqIEZpcmVzIGFuIGV2ZW50
IHdoZW4gYW55IG9mIGl0J3Mgc3ViIGdpem1vcyBhcmUgcmVsZWFzZWQgZnJvbSBkcmFnZ2luZyAq
LworICAgICAgICBfdGhpcy5vbkRyYWdFbmRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFi
bGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgcGxhbmFyIGRyYWcgaXMgZW5hYmxlZAor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3BsYW5hckdpem1vRW5hYmxlZCA9IGZhbHNlOwor
ICAgICAgICBfdGhpcy54R2l6bW8gPSBuZXcgX2F4aXNEcmFnR2l6bW9fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siQXhpc0RyYWdHaXptbyJdKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDEsIDAsIDApLCBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb2xvcjMiXS5SZWQoKS5zY2Fs
ZSgwLjUpLCBnaXptb0xheWVyLCBfdGhpcyk7CisgICAgICAgIF90aGlzLnlHaXptbyA9IG5ldyBf
YXhpc0RyYWdHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJBeGlzRHJhZ0dpem1v
Il0obmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZWN0b3IzIl0oMCwgMSwgMCksIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIkNvbG9yMyJdLkdyZWVuKCkuc2NhbGUoMC41KSwgZ2l6bW9MYXllciwgX3RoaXMp
OworICAgICAgICBfdGhpcy56R2l6bW8gPSBuZXcgX2F4aXNEcmFnR2l6bW9fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfX1siQXhpc0RyYWdHaXptbyJdKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDEpLCBfTWF0aHNf
bWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb2xvcjMiXS5CbHVlKCku
c2NhbGUoMC41KSwgZ2l6bW9MYXllciwgX3RoaXMpOworICAgICAgICBfdGhpcy54UGxhbmVHaXpt
byA9IG5ldyBfcGxhbmVEcmFnR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUGxh
bmVEcmFnR2l6bW8iXShuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXSgxLCAwLCAwKSwgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siQ29sb3IzIl0uUmVkKCkuc2NhbGUoMC41KSwgX3RoaXMuZ2l6
bW9MYXllciwgX3RoaXMpOworICAgICAgICBfdGhpcy55UGxhbmVHaXptbyA9IG5ldyBfcGxhbmVE
cmFnR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUGxhbmVEcmFnR2l6bW8iXShu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXSgwLCAxLCAwKSwgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siQ29sb3IzIl0uR3JlZW4oKS5zY2FsZSgwLjUpLCBfdGhpcy5naXptb0xheWVyLCBfdGhp
cyk7CisgICAgICAgIF90aGlzLnpQbGFuZUdpem1vID0gbmV3IF9wbGFuZURyYWdHaXptb19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJQbGFuZURyYWdHaXptbyJdKG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDEp
LCBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb2xvcjMi
XS5CbHVlKCkuc2NhbGUoMC41KSwgX3RoaXMuZ2l6bW9MYXllciwgX3RoaXMpOworICAgICAgICAv
LyBSZWxheSBkcmFnIGV2ZW50cworICAgICAgICBbX3RoaXMueEdpem1vLCBfdGhpcy55R2l6bW8s
IF90aGlzLnpHaXptbywgX3RoaXMueFBsYW5lR2l6bW8sIF90aGlzLnlQbGFuZUdpem1vLCBfdGhp
cy56UGxhbmVHaXptb10uZm9yRWFjaChmdW5jdGlvbiAoZ2l6bW8pIHsKKyAgICAgICAgICAgIGdp
em1vLmRyYWdCZWhhdmlvci5vbkRyYWdTdGFydE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgICAgICBfdGhpcy5vbkRyYWdTdGFydE9ic2VydmFibGUubm90aWZ5T2JzZXJ2
ZXJzKHt9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZ2l6bW8uZHJhZ0JlaGF2aW9y
Lm9uRHJhZ0VuZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBf
dGhpcy5vbkRyYWdFbmRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7fSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLmF0dGFjaGVkTWVzaCA9IG51bGw7Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBv
c2l0aW9uR2l6bW8ucHJvdG90eXBlLCAiYXR0YWNoZWRNZXNoIiwgeworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXNoQXR0YWNoZWQ7CisgICAg
ICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgICAgIHRoaXMu
X21lc2hBdHRhY2hlZCA9IG1lc2g7CisgICAgICAgICAgICBbdGhpcy54R2l6bW8sIHRoaXMueUdp
em1vLCB0aGlzLnpHaXptbywgdGhpcy54UGxhbmVHaXptbywgdGhpcy55UGxhbmVHaXptbywgdGhp
cy56UGxhbmVHaXptb10uZm9yRWFjaChmdW5jdGlvbiAoZ2l6bW8pIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZ2l6bW8uaXNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGdpem1vLmF0dGFj
aGVkTWVzaCA9IG1lc2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBnaXptby5hdHRhY2hlZE1lc2ggPSBudWxsOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoUG9zaXRpb25HaXptby5wcm90b3R5cGUsICJwbGFuYXJHaXptb0Vu
YWJsZWQiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3BsYW5hckdpem1vRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIElmIHRoZSBwbGFuYXIgZHJhZyBnaXptbyBpcyBlbmFibGVkCisgICAgICAgICAqIHNl
dHRpbmcgdGhpcyB3aWxsIGVuYWJsZS9kaXNhYmxlIFhZLCBYWiBhbmQgWVogcGxhbmVzIHJlZ2Fy
ZGxlc3Mgb2YgaW5kaXZpZHVhbCBnaXptbyBzZXR0aW5ncy4KKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICAgICAgdGhpcy5fcGxhbmFyR2l6bW9FbmFibGVkID0gdmFsdWU7CisgICAgICAgICAg
ICBbdGhpcy54UGxhbmVHaXptbywgdGhpcy55UGxhbmVHaXptbywgdGhpcy56UGxhbmVHaXptb10u
Zm9yRWFjaChmdW5jdGlvbiAoZ2l6bW8pIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2l6bW8pIHsK
KyAgICAgICAgICAgICAgICAgICAgZ2l6bW8uaXNFbmFibGVkID0gdmFsdWU7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ2l6bW8uYXR0
YWNoZWRNZXNoID0gX3RoaXMuYXR0YWNoZWRNZXNoOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgdGhpcyk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3NpdGlvbkdpem1vLnByb3RvdHlwZSwgInVw
ZGF0ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0YWNoZWRNZXNoIiwgeworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVHaXptb1JvdGF0aW9u
VG9NYXRjaEF0dGFjaGVkTWVzaDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0
YWNoZWRNZXNoID0gdmFsdWU7CisgICAgICAgICAgICBbdGhpcy54R2l6bW8sIHRoaXMueUdpem1v
LCB0aGlzLnpHaXptbywgdGhpcy54UGxhbmVHaXptbywgdGhpcy55UGxhbmVHaXptbywgdGhpcy56
UGxhbmVHaXptb10uZm9yRWFjaChmdW5jdGlvbiAoZ2l6bW8pIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZ2l6bW8pIHsKKyAgICAgICAgICAgICAgICAgICAgZ2l6bW8udXBkYXRlR2l6bW9Sb3RhdGlv
blRvTWF0Y2hBdHRhY2hlZE1lc2ggPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBv
c2l0aW9uR2l6bW8ucHJvdG90eXBlLCAic25hcERpc3RhbmNlIiwgeworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zbmFwRGlzdGFuY2U7CisgICAg
ICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBEcmFnIGRpc3RhbmNlIGluIGJhYnlsb24g
dW5pdHMgdGhhdCB0aGUgZ2l6bW8gd2lsbCBzbmFwIHRvIHdoZW4gZHJhZ2dlZCAoRGVmYXVsdDog
MCkKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICB0aGlzLl9zbmFwRGlzdGFuY2UgPSB2YWx1ZTsKKyAgICAgICAgICAgIFt0aGlzLnhHaXpt
bywgdGhpcy55R2l6bW8sIHRoaXMuekdpem1vLCB0aGlzLnhQbGFuZUdpem1vLCB0aGlzLnlQbGFu
ZUdpem1vLCB0aGlzLnpQbGFuZUdpem1vXS5mb3JFYWNoKGZ1bmN0aW9uIChnaXptbykgeworICAg
ICAgICAgICAgICAgIGlmIChnaXptbykgeworICAgICAgICAgICAgICAgICAgICBnaXptby5zbmFw
RGlzdGFuY2UgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvc2l0aW9uR2l6bW8u
cHJvdG90eXBlLCAic2NhbGVSYXRpbyIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGVSYXRpbzsKKyAgICAgICAgfSwKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFJhdGlvIGZvciB0aGUgc2NhbGUgb2YgdGhlIGdpem1vIChEZWZhdWx0
OiAxKQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3NjYWxlUmF0aW8gPSB2YWx1ZTsKKyAgICAgICAgICAgIFt0aGlzLnhHaXpt
bywgdGhpcy55R2l6bW8sIHRoaXMuekdpem1vLCB0aGlzLnhQbGFuZUdpem1vLCB0aGlzLnlQbGFu
ZUdpem1vLCB0aGlzLnpQbGFuZUdpem1vXS5mb3JFYWNoKGZ1bmN0aW9uIChnaXptbykgeworICAg
ICAgICAgICAgICAgIGlmIChnaXptbykgeworICAgICAgICAgICAgICAgICAgICBnaXptby5zY2Fs
ZVJhdGlvID0gdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIG9mIHRoZSBnaXptbworICAg
ICAqLworICAgIFBvc2l0aW9uR2l6bW8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIFt0aGlzLnhHaXptbywgdGhpcy55R2l6bW8sIHRoaXMuekdpem1vLCB0aGlzLnhQ
bGFuZUdpem1vLCB0aGlzLnlQbGFuZUdpem1vLCB0aGlzLnpQbGFuZUdpem1vXS5mb3JFYWNoKGZ1
bmN0aW9uIChnaXptbykgeworICAgICAgICAgICAgaWYgKGdpem1vKSB7CisgICAgICAgICAgICAg
ICAgZ2l6bW8uZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAg
dGhpcy5vbkRyYWdTdGFydE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkRyYWdF
bmRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDdXN0b21NZXNo
ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBnaXptbworICAgICAqIEBwYXJhbSBtZXNoIFRo
ZSBtZXNoIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgbWVzaCBvZiB0aGUgZ2l6bW8KKyAgICAgKi8K
KyAgICBQb3NpdGlvbkdpem1vLnByb3RvdHlwZS5zZXRDdXN0b21NZXNoID0gZnVuY3Rpb24gKG1l
c2gpIHsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkxvZ2dlciJdLkVycm9yKCJDdXN0b20gbWVzaGVzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMg
Z2l6bW8sIHBsZWFzZSBzZXQgdGhlIGN1c3RvbSBtZXNoZXMgb24gdGhlIGdpem1vcyBjb250YWlu
ZWQgd2l0aGluIHRoaXMgb25lIChnaXptby54R2l6bW8sIGdpem1vLnlHaXptbywgZ2l6bW8uekdp
em1vLGdpem1vLnhQbGFuZUdpem1vLCBnaXptby55UGxhbmVHaXptbywgZ2l6bW8uelBsYW5lR2l6
bW8pIik7CisgICAgfTsKKyAgICByZXR1cm4gUG9zaXRpb25HaXptbzsKK30oX2dpem1vX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkdpem1vIl0pKTsKKworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9HaXptb3Mvcm90YXRpb25HaXptby50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dpem1vcy9yb3RhdGlvbkdpem1vLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBSb3RhdGlvbkdpem1vICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlJvdGF0aW9uR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJvdGF0aW9uR2l6bW87IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3Rz
bGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWlzYy9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNl
cnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICov
ICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZ2l6
bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vZ2l6bW8gKi8gIi4vR2l6bW9zL2dpem1vLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3BsYW5lUm90YXRpb25HaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wbGFuZVJvdGF0aW9uR2l6bW8gKi8gIi4vR2l6bW9zL3Bs
YW5lUm90YXRpb25HaXptby50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9SZW5kZXJp
bmdfdXRpbGl0eUxheWVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlciAq
LyAiLi9SZW5kZXJpbmcvdXRpbGl0eUxheWVyUmVuZGVyZXIudHMiKTsKKworCisKKworCisKKwor
CisvKioKKyAqIEdpem1vIHRoYXQgZW5hYmxlcyByb3RhdGluZyBhIG1lc2ggYWxvbmcgMyBheGlz
CisgKi8KK3ZhciBSb3RhdGlvbkdpem1vID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBl
cikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJd
KFJvdGF0aW9uR2l6bW8sIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIFJvdGF0
aW9uR2l6bW8KKyAgICAgKiBAcGFyYW0gZ2l6bW9MYXllciBUaGUgdXRpbGl0eSBsYXllciB0aGUg
Z2l6bW8gd2lsbCBiZSBhZGRlZCB0bworICAgICAqIEBwYXJhbSB0ZXNzZWxsYXRpb24gQW1vdW50
IG9mIHRlc3NlbGxhdGlvbiB0byBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgcm90YXRpb24gY2lyY2xl
cworICAgICAqIEBwYXJhbSB1c2VFdWxlclJvdGF0aW9uIFVzZSBhbmQgdXBkYXRlIEV1bGVyIGFu
Z2xlIGluc3RlYWQgb2YgcXVhdGVybmlvbgorICAgICAqLworICAgIGZ1bmN0aW9uIFJvdGF0aW9u
R2l6bW8oZ2l6bW9MYXllciwgdGVzc2VsbGF0aW9uLCB1c2VFdWxlclJvdGF0aW9uKSB7CisgICAg
ICAgIGlmIChnaXptb0xheWVyID09PSB2b2lkIDApIHsgZ2l6bW9MYXllciA9IF9SZW5kZXJpbmdf
dXRpbGl0eUxheWVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVXRpbGl0
eUxheWVyUmVuZGVyZXIiXS5EZWZhdWx0VXRpbGl0eUxheWVyOyB9CisgICAgICAgIGlmICh0ZXNz
ZWxsYXRpb24gPT09IHZvaWQgMCkgeyB0ZXNzZWxsYXRpb24gPSAzMjsgfQorICAgICAgICBpZiAo
dXNlRXVsZXJSb3RhdGlvbiA9PT0gdm9pZCAwKSB7IHVzZUV1bGVyUm90YXRpb24gPSBmYWxzZTsg
fQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBnaXptb0xheWVyKSB8fCB0
aGlzOworICAgICAgICAvKiogRmlyZXMgYW4gZXZlbnQgd2hlbiBhbnkgb2YgaXQncyBzdWIgZ2l6
bW9zIGFyZSBkcmFnZ2VkICovCisgICAgICAgIF90aGlzLm9uRHJhZ1N0YXJ0T2JzZXJ2YWJsZSA9
IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2Vy
dmFibGUiXSgpOworICAgICAgICAvKiogRmlyZXMgYW4gZXZlbnQgd2hlbiBhbnkgb2YgaXQncyBz
dWIgZ2l6bW9zIGFyZSByZWxlYXNlZCBmcm9tIGRyYWdnaW5nICovCisgICAgICAgIF90aGlzLm9u
RHJhZ0VuZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgX3RoaXMueEdpem1vID0gbmV3
IF9wbGFuZVJvdGF0aW9uR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUGxhbmVS
b3RhdGlvbkdpem1vIl0obmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZWN0b3IzIl0oMSwgMCwgMCksIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yMyJdLlJlZCgpLnNjYWxlKDAuNSksIGdpem1vTGF5
ZXIsIHRlc3NlbGxhdGlvbiwgX3RoaXMsIHVzZUV1bGVyUm90YXRpb24pOworICAgICAgICBfdGhp
cy55R2l6bW8gPSBuZXcgX3BsYW5lUm90YXRpb25HaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fWyJQbGFuZVJvdGF0aW9uR2l6bW8iXShuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgwLCAxLCAwKSwgX01hdGhzX21hdGhf
Y29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29sb3IzIl0uR3JlZW4oKS5zY2Fs
ZSgwLjUpLCBnaXptb0xheWVyLCB0ZXNzZWxsYXRpb24sIF90aGlzLCB1c2VFdWxlclJvdGF0aW9u
KTsKKyAgICAgICAgX3RoaXMuekdpem1vID0gbmV3IF9wbGFuZVJvdGF0aW9uR2l6bW9fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siUGxhbmVSb3RhdGlvbkdpem1vIl0obmV3IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMCwg
MSksIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9y
MyJdLkJsdWUoKS5zY2FsZSgwLjUpLCBnaXptb0xheWVyLCB0ZXNzZWxsYXRpb24sIF90aGlzLCB1
c2VFdWxlclJvdGF0aW9uKTsKKyAgICAgICAgLy8gUmVsYXkgZHJhZyBldmVudHMKKyAgICAgICAg
W190aGlzLnhHaXptbywgX3RoaXMueUdpem1vLCBfdGhpcy56R2l6bW9dLmZvckVhY2goZnVuY3Rp
b24gKGdpem1vKSB7CisgICAgICAgICAgICBnaXptby5kcmFnQmVoYXZpb3Iub25EcmFnU3RhcnRP
YnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMub25EcmFn
U3RhcnRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7fSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIGdpem1vLmRyYWdCZWhhdmlvci5vbkRyYWdFbmRPYnNlcnZhYmxlLmFkZChmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMub25EcmFnRW5kT2JzZXJ2YWJsZS5ub3Rp
ZnlPYnNlcnZlcnMoe30pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBf
dGhpcy5hdHRhY2hlZE1lc2ggPSBudWxsOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSb3RhdGlvbkdpem1vLnByb3RvdHlwZSwgImF0dGFj
aGVkTWVzaCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fbWVzaEF0dGFjaGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
IChtZXNoKSB7CisgICAgICAgICAgICB0aGlzLl9tZXNoQXR0YWNoZWQgPSBtZXNoOworICAgICAg
ICAgICAgW3RoaXMueEdpem1vLCB0aGlzLnlHaXptbywgdGhpcy56R2l6bW9dLmZvckVhY2goZnVu
Y3Rpb24gKGdpem1vKSB7CisgICAgICAgICAgICAgICAgaWYgKGdpem1vLmlzRW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgICAgICBnaXptby5hdHRhY2hlZE1lc2ggPSBtZXNoOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ2l6
bW8uYXR0YWNoZWRNZXNoID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJvdGF0aW9u
R2l6bW8ucHJvdG90eXBlLCAidXBkYXRlR2l6bW9Sb3RhdGlvblRvTWF0Y2hBdHRhY2hlZE1lc2gi
LCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
eEdpem1vLnVwZGF0ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0YWNoZWRNZXNoOworICAgICAgICB9
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMu
eEdpem1vKSB7CisgICAgICAgICAgICAgICAgdGhpcy54R2l6bW8udXBkYXRlR2l6bW9Sb3RhdGlv
blRvTWF0Y2hBdHRhY2hlZE1lc2ggPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLnlHaXpt
by51cGRhdGVHaXptb1JvdGF0aW9uVG9NYXRjaEF0dGFjaGVkTWVzaCA9IHZhbHVlOworICAgICAg
ICAgICAgICAgIHRoaXMuekdpem1vLnVwZGF0ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0YWNoZWRN
ZXNoID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShSb3RhdGlvbkdpem1vLnByb3RvdHlwZSwgInNuYXBEaXN0YW5jZSIs
IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy54
R2l6bW8uc25hcERpc3RhbmNlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICog
RHJhZyBkaXN0YW5jZSBpbiBiYWJ5bG9uIHVuaXRzIHRoYXQgdGhlIGdpem1vIHdpbGwgc25hcCB0
byB3aGVuIGRyYWdnZWQgKERlZmF1bHQ6IDApCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMueEdpem1vKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy54R2l6bW8uc25hcERpc3RhbmNlID0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgdGhpcy55R2l6bW8uc25hcERpc3RhbmNlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdGhp
cy56R2l6bW8uc25hcERpc3RhbmNlID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSb3RhdGlvbkdpem1vLnByb3RvdHlw
ZSwgInNjYWxlUmF0aW8iLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMueEdpem1vLnNjYWxlUmF0aW87CisgICAgICAgIH0sCisgICAgICAgIC8q
KgorICAgICAgICAgKiBSYXRpbyBmb3IgdGhlIHNjYWxlIG9mIHRoZSBnaXptbyAoRGVmYXVsdDog
MSkKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy54R2l6bW8pIHsKKyAgICAgICAgICAgICAgICB0aGlzLnhHaXptby5zY2Fs
ZVJhdGlvID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdGhpcy55R2l6bW8uc2NhbGVSYXRpbyA9
IHZhbHVlOworICAgICAgICAgICAgICAgIHRoaXMuekdpem1vLnNjYWxlUmF0aW8gPSB2YWx1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRGlzcG9z
ZXMgb2YgdGhlIGdpem1vCisgICAgICovCisgICAgUm90YXRpb25HaXptby5wcm90b3R5cGUuZGlz
cG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy54R2l6bW8uZGlzcG9zZSgpOworICAg
ICAgICB0aGlzLnlHaXptby5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMuekdpem1vLmRpc3Bvc2Uo
KTsKKyAgICAgICAgdGhpcy5vbkRyYWdTdGFydE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAg
dGhpcy5vbkRyYWdFbmRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBDdXN0b21NZXNoZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBnaXptbworICAgICAqIEBw
YXJhbSBtZXNoIFRoZSBtZXNoIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgbWVzaCBvZiB0aGUgZ2l6
bW8KKyAgICAgKi8KKyAgICBSb3RhdGlvbkdpem1vLnByb3RvdHlwZS5zZXRDdXN0b21NZXNoID0g
ZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkxvZ2dlciJdLkVycm9yKCJDdXN0b20gbWVzaGVzIGFyZSBub3Qgc3VwcG9y
dGVkIG9uIHRoaXMgZ2l6bW8sIHBsZWFzZSBzZXQgdGhlIGN1c3RvbSBtZXNoZXMgb24gdGhlIGdp
em1vcyBjb250YWluZWQgd2l0aGluIHRoaXMgb25lIChnaXptby54R2l6bW8sIGdpem1vLnlHaXpt
bywgZ2l6bW8uekdpem1vKSIpOworICAgIH07CisgICAgcmV0dXJuIFJvdGF0aW9uR2l6bW87Cit9
KF9naXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJHaXptbyJdKSk7CisKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vR2l6bW9zL3NjYWxlR2l6bW8udHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HaXptb3Mvc2NhbGVHaXptby50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogU2NhbGVHaXptbyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJT
Y2FsZUdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTY2FsZUdpem1vOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xp
Yi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mv
bG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMv
bWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRo
cy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWls
ZGVyc19wb2x5aGVkcm9uQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL0J1aWxkZXJzL3BvbHloZWRyb25CdWlsZGVy
ICovICIuL01lc2hlcy9CdWlsZGVycy9wb2x5aGVkcm9uQnVpbGRlci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9naXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9naXptbyAqLyAiLi9HaXptb3MvZ2l6bW8udHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXhpc1NjYWxlR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXhpc1NjYWxlR2l6bW8gKi8g
Ii4vR2l6bW9zL2F4aXNTY2FsZUdpem1vLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJl
bmRlcmVyICovICIuL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlci50cyIpOworCisKKwor
CisKKworCisKKworLyoqCisgKiBHaXptbyB0aGF0IGVuYWJsZXMgc2NhbGluZyBhIG1lc2ggYWxv
bmcgMyBheGlzCisgKi8KK3ZhciBTY2FsZUdpem1vID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0
ZW5kcyJdKFNjYWxlR2l6bW8sIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIFNj
YWxlR2l6bW8KKyAgICAgKiBAcGFyYW0gZ2l6bW9MYXllciBUaGUgdXRpbGl0eSBsYXllciB0aGUg
Z2l6bW8gd2lsbCBiZSBhZGRlZCB0bworICAgICAqLworICAgIGZ1bmN0aW9uIFNjYWxlR2l6bW8o
Z2l6bW9MYXllcikgeworICAgICAgICBpZiAoZ2l6bW9MYXllciA9PT0gdm9pZCAwKSB7IGdpem1v
TGF5ZXIgPSBfUmVuZGVyaW5nX3V0aWxpdHlMYXllclJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV84X19bIlV0aWxpdHlMYXllclJlbmRlcmVyIl0uRGVmYXVsdFV0aWxpdHlMYXllcjsg
fQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBnaXptb0xheWVyKSB8fCB0
aGlzOworICAgICAgICBfdGhpcy5fbWVzaEF0dGFjaGVkID0gbnVsbDsKKyAgICAgICAgLyoqIEZp
cmVzIGFuIGV2ZW50IHdoZW4gYW55IG9mIGl0J3Mgc3ViIGdpem1vcyBhcmUgZHJhZ2dlZCAqLwor
ICAgICAgICBfdGhpcy5vbkRyYWdTdGFydE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJs
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAg
LyoqIEZpcmVzIGFuIGV2ZW50IHdoZW4gYW55IG9mIGl0J3Mgc3ViIGdpem1vcyBhcmUgcmVsZWFz
ZWQgZnJvbSBkcmFnZ2luZyAqLworICAgICAgICBfdGhpcy5vbkRyYWdFbmRPYnNlcnZhYmxlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgICAgIF90aGlzLnhHaXptbyA9IG5ldyBfYXhpc1NjYWxlR2l6bW9fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQXhpc1NjYWxlR2l6bW8iXShuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgxLCAwLCAw
KSwgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29sb3Iz
Il0uUmVkKCkuc2NhbGUoMC41KSwgZ2l6bW9MYXllciwgX3RoaXMpOworICAgICAgICBfdGhpcy55
R2l6bW8gPSBuZXcgX2F4aXNTY2FsZUdpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19b
IkF4aXNTY2FsZUdpem1vIl0obmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMSwgMCksIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yMyJdLkdyZWVuKCkuc2NhbGUoMC41KSwgZ2l6
bW9MYXllciwgX3RoaXMpOworICAgICAgICBfdGhpcy56R2l6bW8gPSBuZXcgX2F4aXNTY2FsZUdp
em1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkF4aXNTY2FsZUdpem1vIl0obmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0o
MCwgMCwgMSksIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkNvbG9yMyJdLkJsdWUoKS5zY2FsZSgwLjUpLCBnaXptb0xheWVyLCBfdGhpcyk7CisgICAgICAg
IC8vIENyZWF0ZSB1bmlmb3JtIHNjYWxlIGdpem1vCisgICAgICAgIF90aGlzLnVuaWZvcm1TY2Fs
ZUdpem1vID0gbmV3IF9heGlzU2NhbGVHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJBeGlzU2NhbGVHaXptbyJdKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDEsIDApLCBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb2xvcjMiXS5ZZWxsb3coKS5zY2FsZSgwLjUpLCBn
aXptb0xheWVyLCBfdGhpcyk7CisgICAgICAgIF90aGlzLnVuaWZvcm1TY2FsZUdpem1vLnVwZGF0
ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0YWNoZWRNZXNoID0gZmFsc2U7CisgICAgICAgIF90aGlz
LnVuaWZvcm1TY2FsZUdpem1vLnVuaWZvcm1TY2FsaW5nID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMu
X3VuaWZvcm1TY2FsaW5nTWVzaCA9IF9NZXNoZXNfQnVpbGRlcnNfcG9seWhlZHJvbkJ1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUG9seWhlZHJvbkJ1aWxkZXIiXS5DcmVhdGVQ
b2x5aGVkcm9uKCIiLCB7IHR5cGU6IDEgfSwgX3RoaXMudW5pZm9ybVNjYWxlR2l6bW8uZ2l6bW9M
YXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgIF90aGlzLl91bmlmb3JtU2NhbGluZ01l
c2guc2NhbGluZy5zY2FsZUluUGxhY2UoMC4wMik7CisgICAgICAgIF90aGlzLl91bmlmb3JtU2Nh
bGluZ01lc2gudmlzaWJpbGl0eSA9IDA7CisgICAgICAgIF90aGlzLl9vY3RhaGVkcm9uID0gX01l
c2hlc19CdWlsZGVyc19wb2x5aGVkcm9uQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fWyJQb2x5aGVkcm9uQnVpbGRlciJdLkNyZWF0ZVBvbHloZWRyb24oIiIsIHsgdHlwZTogMSB9
LCBfdGhpcy51bmlmb3JtU2NhbGVHaXptby5naXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKTsK
KyAgICAgICAgX3RoaXMuX29jdGFoZWRyb24uc2NhbGluZy5zY2FsZUluUGxhY2UoMC4wMDcpOwor
ICAgICAgICBfdGhpcy5fdW5pZm9ybVNjYWxpbmdNZXNoLmFkZENoaWxkKF90aGlzLl9vY3RhaGVk
cm9uKTsKKyAgICAgICAgX3RoaXMudW5pZm9ybVNjYWxlR2l6bW8uc2V0Q3VzdG9tTWVzaChfdGhp
cy5fdW5pZm9ybVNjYWxpbmdNZXNoLCB0cnVlKTsKKyAgICAgICAgdmFyIGxpZ2h0ID0gZ2l6bW9M
YXllci5fZ2V0U2hhcmVkR2l6bW9MaWdodCgpOworICAgICAgICBsaWdodC5pbmNsdWRlZE9ubHlN
ZXNoZXMgPSBsaWdodC5pbmNsdWRlZE9ubHlNZXNoZXMuY29uY2F0KF90aGlzLl9vY3RhaGVkcm9u
KTsKKyAgICAgICAgLy8gUmVsYXkgZHJhZyBldmVudHMKKyAgICAgICAgW190aGlzLnhHaXptbywg
X3RoaXMueUdpem1vLCBfdGhpcy56R2l6bW8sIF90aGlzLnVuaWZvcm1TY2FsZUdpem1vXS5mb3JF
YWNoKGZ1bmN0aW9uIChnaXptbykgeworICAgICAgICAgICAgZ2l6bW8uZHJhZ0JlaGF2aW9yLm9u
RHJhZ1N0YXJ0T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90
aGlzLm9uRHJhZ1N0YXJ0T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBnaXptby5kcmFnQmVoYXZpb3Iub25EcmFnRW5kT2JzZXJ2YWJs
ZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLm9uRHJhZ0VuZE9ic2Vy
dmFibGUubm90aWZ5T2JzZXJ2ZXJzKHt9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsK
KyAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIF90aGlz
OworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NhbGVHaXptby5wcm90b3R5cGUs
ICJhdHRhY2hlZE1lc2giLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX21lc2hBdHRhY2hlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgdGhpcy5fbWVzaEF0dGFjaGVkID0gbWVzaDsK
KyAgICAgICAgICAgIFt0aGlzLnhHaXptbywgdGhpcy55R2l6bW8sIHRoaXMuekdpem1vLCB0aGlz
LnVuaWZvcm1TY2FsZUdpem1vXS5mb3JFYWNoKGZ1bmN0aW9uIChnaXptbykgeworICAgICAgICAg
ICAgICAgIGlmIChnaXptby5pc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2l6bW8u
YXR0YWNoZWRNZXNoID0gbWVzaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGdpem1vLmF0dGFjaGVkTWVzaCA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2FsZUdpem1vLnByb3RvdHlwZSwgInVwZGF0ZUdpem1v
Um90YXRpb25Ub01hdGNoQXR0YWNoZWRNZXNoIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVHaXptb1JvdGF0aW9uVG9NYXRjaEF0
dGFjaGVkTWVzaDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uV2FybigiU2V0dGluZyB1cGRh
dGVHaXptb1JvdGF0aW9uVG9NYXRjaEF0dGFjaGVkTWVzaCA9IGZhbHNlIG9uIHNjYWxpbmcgZ2l6
bW8gaXMgbm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0YWNo
ZWRNZXNoID0gdmFsdWU7CisgICAgICAgICAgICAgICAgW3RoaXMueEdpem1vLCB0aGlzLnlHaXpt
bywgdGhpcy56R2l6bW8sIHRoaXMudW5pZm9ybVNjYWxlR2l6bW9dLmZvckVhY2goZnVuY3Rpb24g
KGdpem1vKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChnaXptbykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZ2l6bW8udXBkYXRlR2l6bW9Sb3RhdGlvblRvTWF0Y2hBdHRhY2hlZE1lc2gg
PSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
U2NhbGVHaXptby5wcm90b3R5cGUsICJzbmFwRGlzdGFuY2UiLCB7CisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBEaXN0YW5jZTsKKyAgICAg
ICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIERyYWcgZGlzdGFuY2UgaW4gYmFieWxvbiB1
bml0cyB0aGF0IHRoZSBnaXptbyB3aWxsIHNuYXAgdG8gd2hlbiBkcmFnZ2VkIChEZWZhdWx0OiAw
KQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3NuYXBEaXN0YW5jZSA9IHZhbHVlOworICAgICAgICAgICAgW3RoaXMueEdpem1v
LCB0aGlzLnlHaXptbywgdGhpcy56R2l6bW8sIHRoaXMudW5pZm9ybVNjYWxlR2l6bW9dLmZvckVh
Y2goZnVuY3Rpb24gKGdpem1vKSB7CisgICAgICAgICAgICAgICAgaWYgKGdpem1vKSB7CisgICAg
ICAgICAgICAgICAgICAgIGdpem1vLnNuYXBEaXN0YW5jZSA9IHZhbHVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoU2NhbGVHaXptby5wcm90b3R5cGUsICJzY2FsZVJhdGlvIiwgeworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZVJhdGlv
OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogUmF0aW8gZm9yIHRoZSBzY2Fs
ZSBvZiB0aGUgZ2l6bW8gKERlZmF1bHQ6IDEpCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fc2NhbGVSYXRpbyA9IHZhbHVlOwor
ICAgICAgICAgICAgW3RoaXMueEdpem1vLCB0aGlzLnlHaXptbywgdGhpcy56R2l6bW8sIHRoaXMu
dW5pZm9ybVNjYWxlR2l6bW9dLmZvckVhY2goZnVuY3Rpb24gKGdpem1vKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGdpem1vKSB7CisgICAgICAgICAgICAgICAgICAgIGdpem1vLnNjYWxlUmF0aW8g
PSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIGdpem1vCisgICAgICovCisg
ICAgU2NhbGVHaXptby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
W3RoaXMueEdpem1vLCB0aGlzLnlHaXptbywgdGhpcy56R2l6bW8sIHRoaXMudW5pZm9ybVNjYWxl
R2l6bW9dLmZvckVhY2goZnVuY3Rpb24gKGdpem1vKSB7CisgICAgICAgICAgICBpZiAoZ2l6bW8p
IHsKKyAgICAgICAgICAgICAgICBnaXptby5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgICAgICB0aGlzLm9uRHJhZ1N0YXJ0T2JzZXJ2YWJsZS5jbGVhcigpOworICAg
ICAgICB0aGlzLm9uRHJhZ0VuZE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgW3RoaXMuX3Vu
aWZvcm1TY2FsaW5nTWVzaCwgdGhpcy5fb2N0YWhlZHJvbl0uZm9yRWFjaChmdW5jdGlvbiAobXNo
KSB7CisgICAgICAgICAgICBpZiAobXNoKSB7CisgICAgICAgICAgICAgICAgbXNoLmRpc3Bvc2Uo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICByZXR1cm4gU2NhbGVH
aXptbzsKK30oX2dpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkdpem1vIl0pKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9IZWxwZXJzL2Vudmlyb25tZW50SGVscGVyLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9IZWxwZXJzL2Vudmlyb25tZW50SGVscGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEVudmlyb25tZW50
SGVscGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVudmlyb25tZW50
SGVscGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFbnZpcm9ubWVudEhlbHBlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIv
dHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJs
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2FyY1JvdGF0ZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ2FtZXJhcy9hcmNSb3Rh
dGVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIu
L01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2ggKi8g
Ii4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X1RleHR1cmVzX2Jhc2VUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvYmFzZVRleHR1cmUgKi8g
Ii4vTWF0ZXJpYWxzL1RleHR1cmVzL2Jhc2VUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMv
dGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfbWlycm9yVGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL21pcnJvclRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL21pcnJv
clRleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1
cmVzX2N1YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvY3ViZVRleHR1cmUgKi8gIi4vTWF0
ZXJpYWxzL1RleHR1cmVzL2N1YmVUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19CYWNrZ3JvdW5kX2JhY2tncm91bmRNYXRlcmlhbF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9C
YWNrZ3JvdW5kL2JhY2tncm91bmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvQmFja2dyb3VuZC9i
YWNrZ3JvdW5kTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfcGxhbmVCdWls
ZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWVzaGVzL0J1aWxkZXJzL3BsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMv
cGxhbmVCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWls
ZGVyc19ib3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL0J1aWxkZXJzL2JveEJ1aWxkZXIgKi8gIi4vTWVzaGVz
L0J1aWxkZXJzL2JveEJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
aHNfbWF0aF9wbGFuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgucGxhbmUgKi8gIi4vTWF0aHMvbWF0aC5wbGFuZS50
cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKworLyoqCisgKiBUaGUgRW52aXJvbm1l
bnQgaGVscGVyIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGFkZCBhIGZ1bGx5IGZlYXR1cmVhZCBub25l
IGV4cGVuc2l2ZSBiYWNrZ3JvdW5kIHRvIHlvdXIgc2NlbmUuCisgKiBJdCBpbmNsdWRlcyBieSBk
ZWZhdWx0IGEgc2t5Ym94IGFuZCBhIGdyb3VuZCByZWx5aW5nIG9uIHRoZSBCYWNrZ3JvdW5kTWF0
ZXJpYWwuCisgKiBJdCBhbHNvIGhlbHBzIHdpdGggdGhlIGRlZmF1bHQgc2V0dXAgb2YgeW91ciBp
bWFnZVByb2Nlc3NpbmcgY29uZmlndXJhdGlvbi4KKyAqLwordmFyIEVudmlyb25tZW50SGVscGVy
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIGNvbnN0cnVj
dG9yCisgICAgICogQHBhcmFtIG9wdGlvbnMgRGVmaW5lcyB0aGUgb3B0aW9ucyB3ZSB3YW50IHRv
IGN1c3RvbWl6ZSB0aGUgaGVscGVyCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0byBh
ZGQgdGhlIG1hdGVyaWFsIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gRW52aXJvbm1lbnRIZWxw
ZXIob3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
dGhpcy5fZXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGV4Y2VwdGlvbikgeworICAg
ICAgICAgICAgX3RoaXMub25FcnJvck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHsgbWVzc2Fn
ZTogbWVzc2FnZSwgZXhjZXB0aW9uOiBleGNlcHRpb24gfSk7CisgICAgICAgIH07CisgICAgICAg
IHRoaXMuX29wdGlvbnMgPSB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fz
c2lnbiJdKHt9LCBFbnZpcm9ubWVudEhlbHBlci5fZ2V0RGVmYXVsdE9wdGlvbnMoKSwgb3B0aW9u
cyk7CisgICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7CisgICAgICAgIHRoaXMub25FcnJvck9i
c2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgdGhpcy5fc2V0dXBCYWNrZ3JvdW5kKCk7Cisg
ICAgICAgIHRoaXMuX3NldHVwSW1hZ2VQcm9jZXNzaW5nKCk7CisgICAgfQorICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIGhlbHBlci4KKyAgICAgKi8K
KyAgICBFbnZpcm9ubWVudEhlbHBlci5fZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBjcmVhdGVHcm91bmQ6IHRydWUsCisgICAg
ICAgICAgICBncm91bmRTaXplOiAxNSwKKyAgICAgICAgICAgIGdyb3VuZFRleHR1cmU6IHRoaXMu
X2dyb3VuZFRleHR1cmVDRE5VcmwsCisgICAgICAgICAgICBncm91bmRDb2xvcjogbmV3IF9NYXRo
c19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yMyJdKDAuMiwg
MC4yLCAwLjMpLnRvTGluZWFyU3BhY2UoKS5zY2FsZSgzKSwKKyAgICAgICAgICAgIGdyb3VuZE9w
YWNpdHk6IDAuOSwKKyAgICAgICAgICAgIGVuYWJsZUdyb3VuZFNoYWRvdzogdHJ1ZSwKKyAgICAg
ICAgICAgIGdyb3VuZFNoYWRvd0xldmVsOiAwLjUsCisgICAgICAgICAgICBlbmFibGVHcm91bmRN
aXJyb3I6IGZhbHNlLAorICAgICAgICAgICAgZ3JvdW5kTWlycm9yU2l6ZVJhdGlvOiAwLjMsCisg
ICAgICAgICAgICBncm91bmRNaXJyb3JCbHVyS2VybmVsOiA2NCwKKyAgICAgICAgICAgIGdyb3Vu
ZE1pcnJvckFtb3VudDogMSwKKyAgICAgICAgICAgIGdyb3VuZE1pcnJvckZyZXNuZWxXZWlnaHQ6
IDEsCisgICAgICAgICAgICBncm91bmRNaXJyb3JGYWxsT2ZmRGlzdGFuY2U6IDAsCisgICAgICAg
ICAgICBncm91bmRNaXJyb3JUZXh0dXJlVHlwZTogX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9J
TlQsCisgICAgICAgICAgICBncm91bmRZQmlhczogMC4wMDAwMSwKKyAgICAgICAgICAgIGNyZWF0
ZVNreWJveDogdHJ1ZSwKKyAgICAgICAgICAgIHNreWJveFNpemU6IDIwLAorICAgICAgICAgICAg
c2t5Ym94VGV4dHVyZTogdGhpcy5fc2t5Ym94VGV4dHVyZUNETlVybCwKKyAgICAgICAgICAgIHNr
eWJveENvbG9yOiBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siQ29sb3IzIl0oMC4yLCAwLjIsIDAuMykudG9MaW5lYXJTcGFjZSgpLnNjYWxlKDMpLAor
ICAgICAgICAgICAgYmFja2dyb3VuZFlSb3RhdGlvbjogMCwKKyAgICAgICAgICAgIHNpemVBdXRv
OiB0cnVlLAorICAgICAgICAgICAgcm9vdFBvc2l0aW9uOiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKSwKKyAgICAgICAgICAg
IHNldHVwSW1hZ2VQcm9jZXNzaW5nOiB0cnVlLAorICAgICAgICAgICAgZW52aXJvbm1lbnRUZXh0
dXJlOiB0aGlzLl9lbnZpcm9ubWVudFRleHR1cmVDRE5VcmwsCisgICAgICAgICAgICBjYW1lcmFF
eHBvc3VyZTogMC44LAorICAgICAgICAgICAgY2FtZXJhQ29udHJhc3Q6IDEuMiwKKyAgICAgICAg
ICAgIHRvbmVNYXBwaW5nRW5hYmxlZDogdHJ1ZSwKKyAgICAgICAgfTsKKyAgICB9OworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShFbnZpcm9ubWVudEhlbHBlci5wcm90b3R5cGUsICJyb290TWVz
aCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHJvb3QgbWVzaCBjcmVhdGVk
IGJ5IHRoZSBoZWxwZXIuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb290TWVzaDsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVudmlyb25tZW50SGVscGVyLnByb3RvdHlwZSwgInNr
eWJveCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHNreWJveCBjcmVhdGVk
IGJ5IHRoZSBoZWxwZXIuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9za3lib3g7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbnZpcm9ubWVudEhlbHBlci5wcm90b3R5cGUsICJza3li
b3hUZXh0dXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgc2t5Ym94IHRl
eHR1cmUgY3JlYXRlZCBieSB0aGUgaGVscGVyLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2t5Ym94VGV4dHVyZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVudmlyb25tZW50SGVs
cGVyLnByb3RvdHlwZSwgInNreWJveE1hdGVyaWFsIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgc2t5Ym94IG1hdGVyaWFsIGNyZWF0ZWQgYnkgdGhlIGhlbHBlci4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3NreWJveE1hdGVyaWFsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoRW52aXJvbm1lbnRIZWxwZXIucHJvdG90eXBlLCAiZ3JvdW5kIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZ3JvdW5kIG1lc2ggY3JlYXRlZCBieSB0aGUgaGVs
cGVyLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ3JvdW5kOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoRW52aXJvbm1lbnRIZWxwZXIucHJvdG90eXBlLCAiZ3JvdW5kVGV4dHVyZSIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGdyb3VuZCB0ZXh0dXJlIGNyZWF0
ZWQgYnkgdGhlIGhlbHBlci4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VuZFRleHR1cmU7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbnZpcm9ubWVudEhlbHBlci5wcm90b3R5
cGUsICJncm91bmRNaXJyb3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBn
cm91bmQgbWlycm9yIGNyZWF0ZWQgYnkgdGhlIGhlbHBlci4KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VuZE1pcnJv
cjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVudmlyb25t
ZW50SGVscGVyLnByb3RvdHlwZSwgImdyb3VuZE1pcnJvclJlbmRlckxpc3QiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBncm91bmQgbWlycm9yIHJlbmRlciBsaXN0IHRvIGhl
bHBzIHB1c2hpbmcgdGhlIG1lc2hlcworICAgICAgICAgKiB5b3Ugd2lzaCBpbiB0aGUgZ3JvdW5k
IHJlZmxlY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9ncm91bmRNaXJyb3IpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fZ3JvdW5kTWlycm9yLnJlbmRlckxpc3Q7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEVudmlyb25tZW50SGVscGVyLnByb3RvdHlwZSwgImdyb3VuZE1hdGVyaWFsIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZ3JvdW5kIG1hdGVyaWFsIGNyZWF0ZWQg
YnkgdGhlIGhlbHBlci4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VuZE1hdGVyaWFsOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBiYWNrZ3JvdW5kIGFjY29yZGluZyB0byB0
aGUgbmV3IG9wdGlvbnMKKyAgICAgKiBAcGFyYW0gb3B0aW9ucworICAgICAqLworICAgIEVudmly
b25tZW50SGVscGVyLnByb3RvdHlwZS51cGRhdGVPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMp
IHsKKyAgICAgICAgdmFyIG5ld09wdGlvbnMgPSB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2Fzc2lnbiJdKHt9LCB0aGlzLl9vcHRpb25zLCBvcHRpb25zKTsKKyAgICAgICAg
aWYgKHRoaXMuX2dyb3VuZCAmJiAhbmV3T3B0aW9ucy5jcmVhdGVHcm91bmQpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2dyb3VuZC5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9ncm91bmQgPSBu
dWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9ncm91bmRNYXRlcmlhbCAmJiAhbmV3
T3B0aW9ucy5jcmVhdGVHcm91bmQpIHsKKyAgICAgICAgICAgIHRoaXMuX2dyb3VuZE1hdGVyaWFs
LmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX2dyb3VuZE1hdGVyaWFsID0gbnVsbDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZ3JvdW5kVGV4dHVyZSkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX29wdGlvbnMuZ3JvdW5kVGV4dHVyZSAhPSBuZXdPcHRpb25zLmdyb3VuZFRleHR1
cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ncm91bmRUZXh0dXJlLmRpc3Bvc2UoKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9ncm91bmRUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc2t5Ym94ICYmICFuZXdPcHRpb25zLmNyZWF0
ZVNreWJveCkgeworICAgICAgICAgICAgdGhpcy5fc2t5Ym94LmRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgIHRoaXMuX3NreWJveCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Nr
eWJveE1hdGVyaWFsICYmICFuZXdPcHRpb25zLmNyZWF0ZVNreWJveCkgeworICAgICAgICAgICAg
dGhpcy5fc2t5Ym94TWF0ZXJpYWwuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fc2t5Ym94
TWF0ZXJpYWwgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9za3lib3hUZXh0
dXJlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5za3lib3hUZXh0dXJlICE9IG5l
d09wdGlvbnMuc2t5Ym94VGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3NreWJveFRl
eHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIHRoaXMuX3NreWJveFRleHR1cmUgPSBu
dWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9ncm91bmRN
aXJyb3IgJiYgIW5ld09wdGlvbnMuZW5hYmxlR3JvdW5kTWlycm9yKSB7CisgICAgICAgICAgICB0
aGlzLl9ncm91bmRNaXJyb3IuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fZ3JvdW5kTWly
cm9yID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc2NlbmUuZW52aXJvbm1l
bnRUZXh0dXJlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5lbnZpcm9ubWVudFRl
eHR1cmUgIT0gbmV3T3B0aW9ucy5lbnZpcm9ubWVudFRleHR1cmUpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9zY2VuZS5lbnZpcm9ubWVudFRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHRoaXMuX29wdGlvbnMgPSBuZXdPcHRpb25zOworICAgICAg
ICB0aGlzLl9zZXR1cEJhY2tncm91bmQoKTsKKyAgICAgICAgdGhpcy5fc2V0dXBJbWFnZVByb2Nl
c3NpbmcoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHByaW1hcnkgY29sb3Ig
b2YgYWxsIHRoZSBhdmFpbGFibGUgZWxlbWVudHMuCisgICAgICogQHBhcmFtIGNvbG9yIHRoZSBt
YWluIGNvbG9yIHRvIGFmZmVjdCB0byB0aGUgZ3JvdW5kIGFuZCB0aGUgYmFja2dyb3VuZAorICAg
ICAqLworICAgIEVudmlyb25tZW50SGVscGVyLnByb3RvdHlwZS5zZXRNYWluQ29sb3IgPSBmdW5j
dGlvbiAoY29sb3IpIHsKKyAgICAgICAgaWYgKHRoaXMuZ3JvdW5kTWF0ZXJpYWwpIHsKKyAgICAg
ICAgICAgIHRoaXMuZ3JvdW5kTWF0ZXJpYWwucHJpbWFyeUNvbG9yID0gY29sb3I7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuc2t5Ym94TWF0ZXJpYWwpIHsKKyAgICAgICAgICAgIHRoaXMu
c2t5Ym94TWF0ZXJpYWwucHJpbWFyeUNvbG9yID0gY29sb3I7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuZ3JvdW5kTWlycm9yKSB7CisgICAgICAgICAgICB0aGlzLmdyb3VuZE1pcnJvci5j
bGVhckNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkNvbG9yNCJdKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIDEuMCk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHVwIHRoZSBpbWFnZSBwcm9jZXNzaW5nIGFj
Y29yZGluZyB0byB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuCisgICAgICovCisgICAgRW52aXJvbm1l
bnRIZWxwZXIucHJvdG90eXBlLl9zZXR1cEltYWdlUHJvY2Vzc2luZyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuc2V0dXBJbWFnZVByb2Nlc3NpbmcpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3NjZW5lLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uY29udHJhc3Qg
PSB0aGlzLl9vcHRpb25zLmNhbWVyYUNvbnRyYXN0OworICAgICAgICAgICAgdGhpcy5fc2NlbmUu
aW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5leHBvc3VyZSA9IHRoaXMuX29wdGlvbnMuY2Ft
ZXJhRXhwb3N1cmU7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5pbWFnZVByb2Nlc3NpbmdDb25m
aWd1cmF0aW9uLnRvbmVNYXBwaW5nRW5hYmxlZCA9IHRoaXMuX29wdGlvbnMudG9uZU1hcHBpbmdF
bmFibGVkOworICAgICAgICAgICAgdGhpcy5fc2V0dXBFbnZpcm9ubWVudFRleHR1cmUoKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0dXAgdGhlIGVudmlyb25tZW50IHRl
eHR1cmUgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgb3B0aW9ucy4KKyAgICAgKi8KKyAgICBF
bnZpcm9ubWVudEhlbHBlci5wcm90b3R5cGUuX3NldHVwRW52aXJvbm1lbnRUZXh0dXJlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29wdGlv
bnMuZW52aXJvbm1lbnRUZXh0dXJlIGluc3RhbmNlb2YgX01hdGVyaWFsc19UZXh0dXJlc19iYXNl
VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJCYXNlVGV4dHVyZSJdKSB7Cisg
ICAgICAgICAgICB0aGlzLl9zY2VuZS5lbnZpcm9ubWVudFRleHR1cmUgPSB0aGlzLl9vcHRpb25z
LmVudmlyb25tZW50VGV4dHVyZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgZW52aXJvbm1lbnRUZXh0dXJlID0gX01hdGVyaWFsc19UZXh0dXJlc19jdWJlVGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJDdWJlVGV4dHVyZSJdLkNyZWF0ZUZy
b21QcmVmaWx0ZXJlZERhdGEodGhpcy5fb3B0aW9ucy5lbnZpcm9ubWVudFRleHR1cmUsIHRoaXMu
X3NjZW5lKTsKKyAgICAgICAgdGhpcy5fc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlID0gZW52aXJv
bm1lbnRUZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0dXAgdGhlIGJhY2tncm91
bmQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgb3B0aW9ucy4KKyAgICAgKi8KKyAgICBFbnZp
cm9ubWVudEhlbHBlci5wcm90b3R5cGUuX3NldHVwQmFja2dyb3VuZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9yb290TWVzaCkgeworICAgICAgICAgICAgdGhpcy5fcm9vdE1l
c2ggPSBuZXcgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1lc2gi
XSgiQmFja2dyb3VuZEhlbHBlciIsIHRoaXMuX3NjZW5lKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9yb290TWVzaC5yb3RhdGlvbi55ID0gdGhpcy5fb3B0aW9ucy5iYWNrZ3JvdW5kWVJvdGF0
aW9uOworICAgICAgICB2YXIgc2NlbmVTaXplID0gdGhpcy5fZ2V0U2NlbmVTaXplKCk7CisgICAg
ICAgIGlmICh0aGlzLl9vcHRpb25zLmNyZWF0ZUdyb3VuZCkgeworICAgICAgICAgICAgdGhpcy5f
c2V0dXBHcm91bmQoc2NlbmVTaXplKTsKKyAgICAgICAgICAgIHRoaXMuX3NldHVwR3JvdW5kTWF0
ZXJpYWwoKTsKKyAgICAgICAgICAgIHRoaXMuX3NldHVwR3JvdW5kRGlmZnVzZVRleHR1cmUoKTsK
KyAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmVuYWJsZUdyb3VuZE1pcnJvcikgeworICAg
ICAgICAgICAgICAgIHRoaXMuX3NldHVwR3JvdW5kTWlycm9yVGV4dHVyZShzY2VuZVNpemUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2V0dXBNaXJyb3JJbkdyb3VuZE1hdGVy
aWFsKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuY3JlYXRlU2t5Ym94
KSB7CisgICAgICAgICAgICB0aGlzLl9zZXR1cFNreWJveChzY2VuZVNpemUpOworICAgICAgICAg
ICAgdGhpcy5fc2V0dXBTa3lib3hNYXRlcmlhbCgpOworICAgICAgICAgICAgdGhpcy5fc2V0dXBT
a3lib3hSZWZsZWN0aW9uVGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Jvb3RN
ZXNoLnBvc2l0aW9uLnggPSBzY2VuZVNpemUucm9vdFBvc2l0aW9uLng7CisgICAgICAgIHRoaXMu
X3Jvb3RNZXNoLnBvc2l0aW9uLnogPSBzY2VuZVNpemUucm9vdFBvc2l0aW9uLno7CisgICAgICAg
IHRoaXMuX3Jvb3RNZXNoLnBvc2l0aW9uLnkgPSBzY2VuZVNpemUucm9vdFBvc2l0aW9uLnk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHNjZW5lIHNpemVzIGFjY29yZGluZyB0byB0
aGUgc2V0dXAuCisgICAgICovCisgICAgRW52aXJvbm1lbnRIZWxwZXIucHJvdG90eXBlLl9nZXRT
Y2VuZVNpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIHZhciBncm91bmRTaXplID0gdGhpcy5fb3B0aW9ucy5ncm91bmRTaXplOworICAgICAgICB2
YXIgc2t5Ym94U2l6ZSA9IHRoaXMuX29wdGlvbnMuc2t5Ym94U2l6ZTsKKyAgICAgICAgdmFyIHJv
b3RQb3NpdGlvbiA9IHRoaXMuX29wdGlvbnMucm9vdFBvc2l0aW9uOworICAgICAgICBpZiAoIXRo
aXMuX3NjZW5lLm1lc2hlcyB8fCB0aGlzLl9zY2VuZS5tZXNoZXMubGVuZ3RoID09PSAxKSB7IC8v
IDEgb25seSBtZWFucyB0aGUgcm9vdCBvZiB0aGUgaGVscGVyLgorICAgICAgICAgICAgcmV0dXJu
IHsgZ3JvdW5kU2l6ZTogZ3JvdW5kU2l6ZSwgc2t5Ym94U2l6ZTogc2t5Ym94U2l6ZSwgcm9vdFBv
c2l0aW9uOiByb290UG9zaXRpb24gfTsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2NlbmVFeHRl
bmRzID0gdGhpcy5fc2NlbmUuZ2V0V29ybGRFeHRlbmRzKGZ1bmN0aW9uIChtZXNoKSB7CisgICAg
ICAgICAgICByZXR1cm4gKG1lc2ggIT09IF90aGlzLl9ncm91bmQgJiYgbWVzaCAhPT0gX3RoaXMu
X3Jvb3RNZXNoICYmIG1lc2ggIT09IF90aGlzLl9za3lib3gpOworICAgICAgICB9KTsKKyAgICAg
ICAgdmFyIHNjZW5lRGlhZ29uYWwgPSBzY2VuZUV4dGVuZHMubWF4LnN1YnRyYWN0KHNjZW5lRXh0
ZW5kcy5taW4pOworICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5zaXplQXV0bykgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSBpbnN0YW5jZW9mIF9DYW1lcmFzX2Fy
Y1JvdGF0ZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBcmNSb3RhdGVDYW1l
cmEiXSAmJgorICAgICAgICAgICAgICAgIHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS51cHBlclJh
ZGl1c0xpbWl0KSB7CisgICAgICAgICAgICAgICAgZ3JvdW5kU2l6ZSA9IHRoaXMuX3NjZW5lLmFj
dGl2ZUNhbWVyYS51cHBlclJhZGl1c0xpbWl0ICogMjsKKyAgICAgICAgICAgICAgICBza3lib3hT
aXplID0gZ3JvdW5kU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBzY2VuZURp
YWdvbmFsTGVuZ2h0ID0gc2NlbmVEaWFnb25hbC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChz
Y2VuZURpYWdvbmFsTGVuZ2h0ID4gZ3JvdW5kU2l6ZSkgeworICAgICAgICAgICAgICAgIGdyb3Vu
ZFNpemUgPSBzY2VuZURpYWdvbmFsTGVuZ2h0ICogMjsKKyAgICAgICAgICAgICAgICBza3lib3hT
aXplID0gZ3JvdW5kU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIDEwICUgYmln
Z2VyLgorICAgICAgICAgICAgZ3JvdW5kU2l6ZSAqPSAxLjE7CisgICAgICAgICAgICBza3lib3hT
aXplICo9IDEuNTsKKyAgICAgICAgICAgIHJvb3RQb3NpdGlvbiA9IHNjZW5lRXh0ZW5kcy5taW4u
YWRkKHNjZW5lRGlhZ29uYWwuc2NhbGUoMC41KSk7CisgICAgICAgICAgICByb290UG9zaXRpb24u
eSA9IHNjZW5lRXh0ZW5kcy5taW4ueSAtIHRoaXMuX29wdGlvbnMuZ3JvdW5kWUJpYXM7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHsgZ3JvdW5kU2l6ZTogZ3JvdW5kU2l6ZSwgc2t5Ym94U2l6
ZTogc2t5Ym94U2l6ZSwgcm9vdFBvc2l0aW9uOiByb290UG9zaXRpb24gfTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHVwIHRoZSBncm91bmQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQg
b3B0aW9ucy4KKyAgICAgKi8KKyAgICBFbnZpcm9ubWVudEhlbHBlci5wcm90b3R5cGUuX3NldHVw
R3JvdW5kID0gZnVuY3Rpb24gKHNjZW5lU2l6ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlz
OworICAgICAgICBpZiAoIXRoaXMuX2dyb3VuZCB8fCB0aGlzLl9ncm91bmQuaXNEaXNwb3NlZCgp
KSB7CisgICAgICAgICAgICB0aGlzLl9ncm91bmQgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siTWVzaCJdLkNyZWF0ZVBsYW5lKCJCYWNrZ3JvdW5kUGxhbmUiLCBz
Y2VuZVNpemUuZ3JvdW5kU2l6ZSwgdGhpcy5fc2NlbmUpOworICAgICAgICAgICAgdGhpcy5fZ3Jv
dW5kLnJvdGF0aW9uLnggPSBNYXRoLlBJIC8gMjsgLy8gRmFjZSB1cCBieSBkZWZhdWx0LgorICAg
ICAgICAgICAgdGhpcy5fZ3JvdW5kLnBhcmVudCA9IHRoaXMuX3Jvb3RNZXNoOworICAgICAgICAg
ICAgdGhpcy5fZ3JvdW5kLm9uRGlzcG9zZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsgX3Ro
aXMuX2dyb3VuZCA9IG51bGw7IH0pOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dyb3VuZC5y
ZWNlaXZlU2hhZG93cyA9IHRoaXMuX29wdGlvbnMuZW5hYmxlR3JvdW5kU2hhZG93OworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0dXAgdGhlIGdyb3VuZCBtYXRlcmlhbCBhY2NvcmRpbmcgdG8g
dGhlIHNwZWNpZmllZCBvcHRpb25zLgorICAgICAqLworICAgIEVudmlyb25tZW50SGVscGVyLnBy
b3RvdHlwZS5fc2V0dXBHcm91bmRNYXRlcmlhbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9ncm91bmRNYXRlcmlhbCkgeworICAgICAgICAgICAgdGhpcy5fZ3JvdW5kTWF0ZXJp
YWwgPSBuZXcgX01hdGVyaWFsc19CYWNrZ3JvdW5kX2JhY2tncm91bmRNYXRlcmlhbF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQmFja2dyb3VuZE1hdGVyaWFsIl0oIkJhY2tncm91bmRQ
bGFuZU1hdGVyaWFsIiwgdGhpcy5fc2NlbmUpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dy
b3VuZE1hdGVyaWFsLmFscGhhID0gdGhpcy5fb3B0aW9ucy5ncm91bmRPcGFjaXR5OworICAgICAg
ICB0aGlzLl9ncm91bmRNYXRlcmlhbC5hbHBoYU1vZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkNvbnN0YW50cyJdLkFMUEhBX1BSRU1VTFRJUExJ
RURfUE9SVEVSRFVGRjsKKyAgICAgICAgdGhpcy5fZ3JvdW5kTWF0ZXJpYWwuc2hhZG93TGV2ZWwg
PSB0aGlzLl9vcHRpb25zLmdyb3VuZFNoYWRvd0xldmVsOworICAgICAgICB0aGlzLl9ncm91bmRN
YXRlcmlhbC5wcmltYXJ5Q29sb3IgPSB0aGlzLl9vcHRpb25zLmdyb3VuZENvbG9yOworICAgICAg
ICB0aGlzLl9ncm91bmRNYXRlcmlhbC51c2VSR0JDb2xvciA9IGZhbHNlOworICAgICAgICB0aGlz
Ll9ncm91bmRNYXRlcmlhbC5lbmFibGVOb2lzZSA9IHRydWU7CisgICAgICAgIGlmICh0aGlzLl9n
cm91bmQpIHsKKyAgICAgICAgICAgIHRoaXMuX2dyb3VuZC5tYXRlcmlhbCA9IHRoaXMuX2dyb3Vu
ZE1hdGVyaWFsOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXR1cCB0aGUg
Z3JvdW5kIGRpZmZ1c2UgdGV4dHVyZSBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBvcHRpb25z
LgorICAgICAqLworICAgIEVudmlyb25tZW50SGVscGVyLnByb3RvdHlwZS5fc2V0dXBHcm91bmRE
aWZmdXNlVGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9ncm91bmRN
YXRlcmlhbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLl9ncm91bmRUZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuX29wdGlvbnMuZ3JvdW5kVGV4dHVyZSBpbnN0YW5jZW9mIF9NYXRlcmlh
bHNfVGV4dHVyZXNfYmFzZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQmFz
ZVRleHR1cmUiXSkgeworICAgICAgICAgICAgdGhpcy5fZ3JvdW5kTWF0ZXJpYWwuZGlmZnVzZVRl
eHR1cmUgPSB0aGlzLl9vcHRpb25zLmdyb3VuZFRleHR1cmU7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRpZmZ1c2VUZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNf
VGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJUZXh0dXJlIl0o
dGhpcy5fb3B0aW9ucy5ncm91bmRUZXh0dXJlLCB0aGlzLl9zY2VuZSwgdW5kZWZpbmVkLCB1bmRl
ZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLl9lcnJvckhhbmRsZXIpOworICAgICAg
ICBkaWZmdXNlVGV4dHVyZS5nYW1tYVNwYWNlID0gZmFsc2U7CisgICAgICAgIGRpZmZ1c2VUZXh0
dXJlLmhhc0FscGhhID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fZ3JvdW5kTWF0ZXJpYWwuZGlmZnVz
ZVRleHR1cmUgPSBkaWZmdXNlVGV4dHVyZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHVw
IHRoZSBncm91bmQgbWlycm9yIHRleHR1cmUgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgb3B0
aW9ucy4KKyAgICAgKi8KKyAgICBFbnZpcm9ubWVudEhlbHBlci5wcm90b3R5cGUuX3NldHVwR3Jv
dW5kTWlycm9yVGV4dHVyZSA9IGZ1bmN0aW9uIChzY2VuZVNpemUpIHsKKyAgICAgICAgdmFyIHdy
YXBwaW5nID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgaWYgKCF0aGlz
Ll9ncm91bmRNaXJyb3IpIHsKKyAgICAgICAgICAgIHRoaXMuX2dyb3VuZE1pcnJvciA9IG5ldyBf
TWF0ZXJpYWxzX1RleHR1cmVzX21pcnJvclRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siTWlycm9yVGV4dHVyZSJdKCJCYWNrZ3JvdW5kUGxhbmVNaXJyb3JUZXh0dXJlIiwgeyBy
YXRpbzogdGhpcy5fb3B0aW9ucy5ncm91bmRNaXJyb3JTaXplUmF0aW8gfSwgdGhpcy5fc2NlbmUs
IGZhbHNlLCB0aGlzLl9vcHRpb25zLmdyb3VuZE1pcnJvclRleHR1cmVUeXBlLCBfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVGV4dHVyZSJd
LkJJTElORUFSX1NBTVBMSU5HTU9ERSwgdHJ1ZSk7CisgICAgICAgICAgICB0aGlzLl9ncm91bmRN
aXJyb3IubWlycm9yUGxhbmUgPSBuZXcgX01hdGhzX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE0X19bIlBsYW5lIl0oMCwgLTEsIDAsIHNjZW5lU2l6ZS5yb290UG9zaXRpb24u
eSk7CisgICAgICAgICAgICB0aGlzLl9ncm91bmRNaXJyb3IuYW5pc290cm9waWNGaWx0ZXJpbmdM
ZXZlbCA9IDE7CisgICAgICAgICAgICB0aGlzLl9ncm91bmRNaXJyb3Iud3JhcFUgPSB3cmFwcGlu
ZzsKKyAgICAgICAgICAgIHRoaXMuX2dyb3VuZE1pcnJvci53cmFwViA9IHdyYXBwaW5nOworICAg
ICAgICAgICAgdGhpcy5fZ3JvdW5kTWlycm9yLmdhbW1hU3BhY2UgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9ncm91bmRNaXJyb3IucmVuZGVyTGlzdCkgeworICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2NlbmUubWVzaGVzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fc2NlbmUubWVzaGVzW2ldOworICAg
ICAgICAgICAgICAgICAgICBpZiAobWVzaCAhPT0gdGhpcy5fZ3JvdW5kICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICBtZXNoICE9PSB0aGlzLl9za3lib3ggJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1lc2ggIT09IHRoaXMuX3Jvb3RNZXNoKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9ncm91bmRNaXJyb3IucmVuZGVyTGlzdC5wdXNoKG1lc2gpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2dyb3VuZE1pcnJvci5jbGVhckNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yNCJdKHRoaXMuX29wdGlvbnMu
Z3JvdW5kQ29sb3IuciwgdGhpcy5fb3B0aW9ucy5ncm91bmRDb2xvci5nLCB0aGlzLl9vcHRpb25z
Lmdyb3VuZENvbG9yLmIsIDEpOworICAgICAgICB0aGlzLl9ncm91bmRNaXJyb3IuYWRhcHRpdmVC
bHVyS2VybmVsID0gdGhpcy5fb3B0aW9ucy5ncm91bmRNaXJyb3JCbHVyS2VybmVsOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0dXAgdGhlIGdyb3VuZCB0byByZWNlaXZlIHRoZSBtaXJyb3Ig
dGV4dHVyZS4KKyAgICAgKi8KKyAgICBFbnZpcm9ubWVudEhlbHBlci5wcm90b3R5cGUuX3NldHVw
TWlycm9ySW5Hcm91bmRNYXRlcmlhbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMu
X2dyb3VuZE1hdGVyaWFsKSB7CisgICAgICAgICAgICB0aGlzLl9ncm91bmRNYXRlcmlhbC5yZWZs
ZWN0aW9uVGV4dHVyZSA9IHRoaXMuX2dyb3VuZE1pcnJvcjsKKyAgICAgICAgICAgIHRoaXMuX2dy
b3VuZE1hdGVyaWFsLnJlZmxlY3Rpb25GcmVzbmVsID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMu
X2dyb3VuZE1hdGVyaWFsLnJlZmxlY3Rpb25BbW91bnQgPSB0aGlzLl9vcHRpb25zLmdyb3VuZE1p
cnJvckFtb3VudDsKKyAgICAgICAgICAgIHRoaXMuX2dyb3VuZE1hdGVyaWFsLnJlZmxlY3Rpb25T
dGFuZGFyZEZyZXNuZWxXZWlnaHQgPSB0aGlzLl9vcHRpb25zLmdyb3VuZE1pcnJvckZyZXNuZWxX
ZWlnaHQ7CisgICAgICAgICAgICB0aGlzLl9ncm91bmRNYXRlcmlhbC5yZWZsZWN0aW9uRmFsbG9m
ZkRpc3RhbmNlID0gdGhpcy5fb3B0aW9ucy5ncm91bmRNaXJyb3JGYWxsT2ZmRGlzdGFuY2U7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHVwIHRoZSBza3lib3ggYWNjb3Jk
aW5nIHRvIHRoZSBzcGVjaWZpZWQgb3B0aW9ucy4KKyAgICAgKi8KKyAgICBFbnZpcm9ubWVudEhl
bHBlci5wcm90b3R5cGUuX3NldHVwU2t5Ym94ID0gZnVuY3Rpb24gKHNjZW5lU2l6ZSkgeworICAg
ICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoIXRoaXMuX3NreWJveCB8fCB0aGlz
Ll9za3lib3guaXNEaXNwb3NlZCgpKSB7CisgICAgICAgICAgICB0aGlzLl9za3lib3ggPSBfTWVz
aGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWVzaCJdLkNyZWF0ZUJveCgi
QmFja2dyb3VuZFNreWJveCIsIHNjZW5lU2l6ZS5za3lib3hTaXplLCB0aGlzLl9zY2VuZSwgdW5k
ZWZpbmVkLCBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWVzaCJd
LkJBQ0tTSURFKTsKKyAgICAgICAgICAgIHRoaXMuX3NreWJveC5vbkRpc3Bvc2VPYnNlcnZhYmxl
LmFkZChmdW5jdGlvbiAoKSB7IF90aGlzLl9za3lib3ggPSBudWxsOyB9KTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9za3lib3gucGFyZW50ID0gdGhpcy5fcm9vdE1lc2g7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTZXR1cCB0aGUgc2t5Ym94IG1hdGVyaWFsIGFjY29yZGluZyB0byB0aGUg
c3BlY2lmaWVkIG9wdGlvbnMuCisgICAgICovCisgICAgRW52aXJvbm1lbnRIZWxwZXIucHJvdG90
eXBlLl9zZXR1cFNreWJveE1hdGVyaWFsID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRo
aXMuX3NreWJveCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlm
ICghdGhpcy5fc2t5Ym94TWF0ZXJpYWwpIHsKKyAgICAgICAgICAgIHRoaXMuX3NreWJveE1hdGVy
aWFsID0gbmV3IF9NYXRlcmlhbHNfQmFja2dyb3VuZF9iYWNrZ3JvdW5kTWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkJhY2tncm91bmRNYXRlcmlhbCJdKCJCYWNrZ3JvdW5k
U2t5Ym94TWF0ZXJpYWwiLCB0aGlzLl9zY2VuZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
c2t5Ym94TWF0ZXJpYWwudXNlUkdCQ29sb3IgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc2t5Ym94
TWF0ZXJpYWwucHJpbWFyeUNvbG9yID0gdGhpcy5fb3B0aW9ucy5za3lib3hDb2xvcjsKKyAgICAg
ICAgdGhpcy5fc2t5Ym94TWF0ZXJpYWwuZW5hYmxlTm9pc2UgPSB0cnVlOworICAgICAgICB0aGlz
Ll9za3lib3gubWF0ZXJpYWwgPSB0aGlzLl9za3lib3hNYXRlcmlhbDsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFNldHVwIHRoZSBza3lib3ggcmVmbGVjdGlvbiB0ZXh0dXJlIGFjY29yZGluZyB0
byB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuCisgICAgICovCisgICAgRW52aXJvbm1lbnRIZWxwZXIu
cHJvdG90eXBlLl9zZXR1cFNreWJveFJlZmxlY3Rpb25UZXh0dXJlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICBpZiAoIXRoaXMuX3NreWJveE1hdGVyaWFsKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3NreWJveFRleHR1cmUpIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5za3lib3hU
ZXh0dXJlIGluc3RhbmNlb2YgX01hdGVyaWFsc19UZXh0dXJlc19iYXNlVGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJCYXNlVGV4dHVyZSJdKSB7CisgICAgICAgICAgICB0aGlz
Ll9za3lib3hNYXRlcmlhbC5yZWZsZWN0aW9uVGV4dHVyZSA9IHRoaXMuX29wdGlvbnMuc2t5Ym94
VGV4dHVyZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9z
a3lib3hUZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfY3ViZVRleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ3ViZVRleHR1cmUiXSh0aGlzLl9vcHRpb25zLnNreWJv
eFRleHR1cmUsIHRoaXMuX3NjZW5lLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1
bmRlZmluZWQsIHRoaXMuX2Vycm9ySGFuZGxlcik7CisgICAgICAgIHRoaXMuX3NreWJveFRleHR1
cmUuY29vcmRpbmF0ZXNNb2RlID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIlRleHR1cmUiXS5TS1lCT1hfTU9ERTsKKyAgICAgICAgdGhp
cy5fc2t5Ym94VGV4dHVyZS5nYW1tYVNwYWNlID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3NreWJv
eE1hdGVyaWFsLnJlZmxlY3Rpb25UZXh0dXJlID0gdGhpcy5fc2t5Ym94VGV4dHVyZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIERpc3Bvc2UgYWxsIHRoZSBlbGVtZW50cyBjcmVhdGVkIGJ5IHRo
ZSBIZWxwZXIuCisgICAgICovCisgICAgRW52aXJvbm1lbnRIZWxwZXIucHJvdG90eXBlLmRpc3Bv
c2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9ncm91bmRNYXRlcmlhbCkgewor
ICAgICAgICAgICAgdGhpcy5fZ3JvdW5kTWF0ZXJpYWwuZGlzcG9zZSh0cnVlLCB0cnVlKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc2t5Ym94TWF0ZXJpYWwpIHsKKyAgICAgICAgICAg
IHRoaXMuX3NreWJveE1hdGVyaWFsLmRpc3Bvc2UodHJ1ZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fcm9vdE1lc2guZGlzcG9zZShmYWxzZSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBEZWZhdWx0IGdyb3VuZCB0ZXh0dXJlIFVSTC4KKyAgICAgKi8KKyAgICBFbnZpcm9ubWVu
dEhlbHBlci5fZ3JvdW5kVGV4dHVyZUNETlVybCA9ICJodHRwczovL2Fzc2V0cy5iYWJ5bG9uanMu
Y29tL2Vudmlyb25tZW50cy9iYWNrZ3JvdW5kR3JvdW5kLnBuZyI7CisgICAgLyoqCisgICAgICog
RGVmYXVsdCBza3lib3ggdGV4dHVyZSBVUkwuCisgICAgICovCisgICAgRW52aXJvbm1lbnRIZWxw
ZXIuX3NreWJveFRleHR1cmVDRE5VcmwgPSAiaHR0cHM6Ly9hc3NldHMuYmFieWxvbmpzLmNvbS9l
bnZpcm9ubWVudHMvYmFja2dyb3VuZFNreWJveC5kZHMiOworICAgIC8qKgorICAgICAqIERlZmF1
bHQgZW52aXJvbm1lbnQgdGV4dHVyZSBVUkwuCisgICAgICovCisgICAgRW52aXJvbm1lbnRIZWxw
ZXIuX2Vudmlyb25tZW50VGV4dHVyZUNETlVybCA9ICJodHRwczovL2Fzc2V0cy5iYWJ5bG9uanMu
Y29tL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudFNwZWN1bGFyLmVudiI7CisgICAgcmV0dXJuIEVu
dmlyb25tZW50SGVscGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9IZWxw
ZXJzL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9IZWxwZXJzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IEVudmlyb25tZW50SGVscGVyLCBQaG90b0RvbWUsIF9mb3Jj
ZVNjZW5lSGVscGVyc1RvQnVuZGxlLCBWaWRlb0RvbWUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lbnZpcm9ubWVudEhlbHBlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lbnZpcm9ubWVudEhlbHBl
ciAqLyAiLi9IZWxwZXJzL2Vudmlyb25tZW50SGVscGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkVudmlyb25tZW50SGVscGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZW52aXJvbm1lbnRIZWxw
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW52aXJvbm1lbnRIZWxwZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGhvdG9Eb21lX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bob3RvRG9tZSAqLyAiLi9I
ZWxwZXJzL3Bob3RvRG9tZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaG90b0RvbWUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9waG90b0RvbWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
UGhvdG9Eb21lIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lSGVscGVy
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9zY2VuZUhlbHBlcnMgKi8gIi4vSGVscGVycy9zY2VuZUhlbHBlcnMudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiX2ZvcmNlU2NlbmVIZWxwZXJzVG9CdW5kbGUiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9zY2VuZUhlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siX2ZvcmNlU2NlbmVI
ZWxwZXJzVG9CdW5kbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdmlkZW9E
b21lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL3ZpZGVvRG9tZSAqLyAiLi9IZWxwZXJzL3ZpZGVvRG9tZS50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJWaWRlb0RvbWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92aWRlb0RvbWVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVmlkZW9Eb21lIl07IH0pOworCisKKworCisKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vSGVscGVycy9waG90b0RvbWUudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9IZWxwZXJzL3Bob3RvRG9tZS50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogUGhvdG9Eb21lICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBob3Rv
RG9tZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGhvdG9Eb21lOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL29i
c2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01lc2hlc190cmFuc2Zvcm1Ob2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvdHJhbnNmb3JtTm9kZSAqLyAiLi9N
ZXNoZXMvdHJhbnNmb3JtTm9kZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNo
ZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0
dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19CYWNrZ3JvdW5kX2JhY2tncm91bmRNYXRl
cmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWF0ZXJpYWxzL0JhY2tncm91bmQvYmFja2dyb3VuZE1hdGVyaWFsICovICIuL01hdGVy
aWFscy9CYWNrZ3JvdW5kL2JhY2tncm91bmRNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL0J1aWxkZXJz
L3NwaGVyZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3NwaGVyZUJ1aWxkZXIudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgu
dmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisKKworCisKKworCisKKworLyoq
CisgKiBEaXNwbGF5IGEgMzYwIGRlZ3JlZSBwaG90byBvbiBhbiBhcHByb3hpbWF0ZWx5IHNwaGVy
aWNhbCBzdXJmYWNlLCB1c2VmdWwgZm9yIFZSIGFwcGxpY2F0aW9ucyBvciBza3lib3hlcy4KKyAq
IEFzIGEgc3ViY2xhc3Mgb2YgVHJhbnNmb3JtTm9kZSwgdGhpcyBhbGxvdyBwYXJlbnRpbmcgdG8g
dGhlIGNhbWVyYSB3aXRoIGRpZmZlcmVudCBsb2NhdGlvbnMgaW4gdGhlIHNjZW5lLgorICogVGhp
cyBjbGFzcyBhY2hpZXZlcyBpdHMgZWZmZWN0IHdpdGggYSBUZXh0dXJlIGFuZCBhIGNvcnJlY3Rs
eSBjb25maWd1cmVkIEJhY2tncm91bmRNYXRlcmlhbCBvbiBhbiBpbnZlcnRlZCBzcGhlcmUuCisg
KiBQb3RlbnRpYWwgYWRkaXRpb25zIHRvIHRoaXMgaGVscGVyIGluY2x1ZGUgem9vbSBhbmQgYW5k
IG5vbi1pbmZpbml0ZSBkaXN0YW5jZSByZW5kZXJpbmcgZWZmZWN0cy4KKyAqLwordmFyIFBob3Rv
RG9tZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShQaG90b0RvbWUsIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYW5kIHBh
c3MgdGhyb3VnaCB0aGUgcGFyYW1ldGVycyB0byB0aGUgcmVsZXZhbnQgY2xhc3NlcywgVGV4dHVy
ZSwgU3RhbmRhcmRNYXRlcmlhbCwgYW5kIE1lc2guCisgICAgICogQHBhcmFtIG5hbWUgRWxlbWVu
dCdzIG5hbWUsIGNoaWxkIGVsZW1lbnRzIHdpbGwgYXBwZW5kIHN1ZmZpeGVzIGZvciB0aGVpciBv
d24gbmFtZXMuCisgICAgICogQHBhcmFtIHVybHNPZlBob3RvIGRlZmluZXMgdGhlIHVybCBvZiB0
aGUgcGhvdG8gdG8gZGlzcGxheQorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgYW4gb2Jq
ZWN0IGNvbnRhaW5pbmcgb3B0aW9uYWwgb3IgZXhwb3NlZCBzdWIgZWxlbWVudCBwcm9wZXJ0aWVz
CisgICAgICogQHBhcmFtIG9uRXJyb3IgZGVmaW5lcyBhIGNhbGxiYWNrIGNhbGxlZCB3aGVuIGFu
IGVycm9yIG9jY3VyZWQgd2hpbGUgbG9hZGluZyB0aGUgdGV4dHVyZQorICAgICAqLworICAgIGZ1
bmN0aW9uIFBob3RvRG9tZShuYW1lLCB1cmxPZlBob3RvLCBvcHRpb25zLCBzY2VuZSwgb25FcnJv
cikgeworICAgICAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBudWxsOyB9
CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0
aGlzOworICAgICAgICBfdGhpcy5fdXNlRGlyZWN0TWFwcGluZyA9IGZhbHNlOworICAgICAgICAv
KioKKyAgICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiBhbiBlcnJvciBvY2N1cmVkIHdo
aWxlIGxvYWRpbmcgdGhlIDM2MCBpbWFnZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25M
b2FkRXJyb3JPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIF90aGlzLl9pbWFnZU1vZGUg
PSBQaG90b0RvbWUuTU9ERV9NT05PU0NPUElDOworICAgICAgICBfdGhpcy5fb25CZWZvcmVDYW1l
cmFSZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIC8vIHNldCBkZWZhdWx0cyBhbmQgbWFu
YWdlIHZhbHVlcworICAgICAgICBuYW1lID0gbmFtZSB8fCAicGhvdG9Eb21lIjsKKyAgICAgICAg
b3B0aW9ucy5yZXNvbHV0aW9uID0gKE1hdGguYWJzKG9wdGlvbnMucmVzb2x1dGlvbikgfCAwKSB8
fCAzMjsKKyAgICAgICAgb3B0aW9ucy5zaXplID0gTWF0aC5hYnMob3B0aW9ucy5zaXplKSB8fCAo
c2NlbmUuYWN0aXZlQ2FtZXJhID8gc2NlbmUuYWN0aXZlQ2FtZXJhLm1heFogKiAwLjQ4IDogMTAw
MCk7CisgICAgICAgIGlmIChvcHRpb25zLnVzZURpcmVjdE1hcHBpbmcgPT09IHVuZGVmaW5lZCkg
eworICAgICAgICAgICAgX3RoaXMuX3VzZURpcmVjdE1hcHBpbmcgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX3RoaXMuX3VzZURpcmVjdE1hcHBpbmcgPSBv
cHRpb25zLnVzZURpcmVjdE1hcHBpbmc7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdGlvbnMu
ZmFjZUZvcndhcmQgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgb3B0aW9ucy5mYWNlRm9y
d2FyZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgX3RoaXMuX3NldFJlYWR5KGZhbHNlKTsK
KyAgICAgICAgLy8gY3JlYXRlCisgICAgICAgIHZhciBtYXRlcmlhbCA9IF90aGlzLl9tYXRlcmlh
bCA9IG5ldyBfTWF0ZXJpYWxzX0JhY2tncm91bmRfYmFja2dyb3VuZE1hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIkJhY2tncm91bmRNYXRlcmlhbCJdKG5hbWUgKyAiX21hdGVy
aWFsIiwgc2NlbmUpOworICAgICAgICBfdGhpcy5fbWVzaCA9IF9NZXNoZXNfbWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJNZXNoIl0uQ3JlYXRlU3BoZXJlKG5hbWUgKyAiX21lc2gi
LCBvcHRpb25zLnJlc29sdXRpb24sIG9wdGlvbnMuc2l6ZSwgc2NlbmUsIGZhbHNlLCBfTWVzaGVz
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWVzaCJdLkJBQ0tTSURFKTsKKyAg
ICAgICAgLy8gY29uZmlndXJlIG1hdGVyaWFsCisgICAgICAgIG1hdGVyaWFsLm9wYWNpdHlGcmVz
bmVsID0gZmFsc2U7CisgICAgICAgIG1hdGVyaWFsLnVzZUVxdWlyZWN0YW5ndWxhckZPViA9IHRy
dWU7CisgICAgICAgIG1hdGVyaWFsLmZvdk11bHRpcGxpZXIgPSAxLjA7CisgICAgICAgIF90aGlz
LnBob3RvVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siVGV4dHVyZSJdKHVybE9mUGhvdG8sIHNjZW5lLCB0cnVlLCAh
X3RoaXMuX3VzZURpcmVjdE1hcHBpbmcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAo
bWVzc2FnZSwgZXhjZXB0aW9uKSB7CisgICAgICAgICAgICBfdGhpcy5vbkxvYWRFcnJvck9ic2Vy
dmFibGUubm90aWZ5T2JzZXJ2ZXJzKG1lc3NhZ2UgfHwgIlVua25vd24gZXJyb3Igb2NjdXJlZCIp
OworICAgICAgICAgICAgaWYgKG9uRXJyb3IpIHsKKyAgICAgICAgICAgICAgICBvbkVycm9yKG1l
c3NhZ2UsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBf
dGhpcy5waG90b1RleHR1cmUub25Mb2FkT2JzZXJ2YWJsZS5hZGRPbmNlKGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIF90aGlzLl9zZXRSZWFkeSh0cnVlKTsKKyAgICAgICAgfSk7CisgICAgICAg
IC8vIGNvbmZpZ3VyZSBtZXNoCisgICAgICAgIF90aGlzLl9tZXNoLm1hdGVyaWFsID0gbWF0ZXJp
YWw7CisgICAgICAgIF90aGlzLl9tZXNoLnBhcmVudCA9IF90aGlzOworICAgICAgICAvLyBJbml0
aWFsIHJvdGF0aW9uCisgICAgICAgIGlmIChvcHRpb25zLmZhY2VGb3J3YXJkICYmIHNjZW5lLmFj
dGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHNjZW5lLmFjdGl2ZUNhbWVy
YTsKKyAgICAgICAgICAgIHZhciBmb3J3YXJkID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIlZlY3RvcjMiXS5Gb3J3YXJkKCk7CisgICAgICAgICAgICB2
YXIgZGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwoZm9yd2FyZCwgY2FtZXJhLmdldFZpZXdN
YXRyaXgoKSk7CisgICAgICAgICAgICBkaXJlY3Rpb24ubm9ybWFsaXplKCk7CisgICAgICAgICAg
ICBfdGhpcy5yb3RhdGlvbi55ID0gTWF0aC5hY29zKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZWN0b3IzIl0uRG90KGZvcndhcmQsIGRpcmVjdGlvbikp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFBob3RvRG9tZS5wcm90b3R5cGUsICJwaG90b1RleHR1cmUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHRleHR1cmUgYmVpbmcgZGlzcGxh
eWVkIG9uIHRoZSBzcGhlcmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bob3RvVGV4dHVyZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9waG90
b1RleHR1cmUgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fcGhvdG9UZXh0dXJlID0gdmFsdWU7CisgICAgICAgICAg
ICBpZiAodGhpcy5fdXNlRGlyZWN0TWFwcGluZykgeworICAgICAgICAgICAgICAgIHRoaXMuX3Bo
b3RvVGV4dHVyZS53cmFwVSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAg
ICAgICAgICAgdGhpcy5fcGhvdG9UZXh0dXJlLndyYXBWID0gX01hdGVyaWFsc19UZXh0dXJlc190
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXS5DTEFNUF9BRERS
RVNTTU9ERTsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXRlcmlhbC5kaWZmdXNlVGV4dHVyZSA9
IHRoaXMuX3Bob3RvVGV4dHVyZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIHRoaXMuX3Bob3RvVGV4dHVyZS5jb29yZGluYXRlc01vZGUgPSBfTWF0
ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGV4
dHVyZSJdLkZJWEVEX0VRVUlSRUNUQU5HVUxBUl9NSVJST1JFRF9NT0RFOyAvLyBtYXRjaGVzIG9y
aWVudGF0aW9uCisgICAgICAgICAgICAgICAgdGhpcy5fcGhvdG9UZXh0dXJlLndyYXBWID0gX01h
dGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRl
eHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXRlcmlh
bC5yZWZsZWN0aW9uVGV4dHVyZSA9IHRoaXMuX3Bob3RvVGV4dHVyZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBob3RvRG9tZS5w
cm90b3R5cGUsICJmb3ZNdWx0aXBsaWVyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhl
IGN1cnJlbnQgZm92KGZpZWxkIG9mIHZpZXcpIG11bHRpcGxpZXIsIDAuMCAtIDIuMC4gRGVmYXVs
dHMgdG8gMS4wLiBMb3dlciB2YWx1ZXMgInpvb20gaW4iIGFuZCBoaWdoZXIgdmFsdWVzICJ6b29t
IG91dCIuCisgICAgICAgICAqIEFsc28gc2VlIHRoZSBvcHRpb25zLnJlc29sdXRpb24gcHJvcGVy
dHkuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9tYXRlcmlhbC5mb3ZNdWx0aXBsaWVyOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbWF0ZXJpYWwuZm92
TXVsdGlwbGllciA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoUGhvdG9Eb21lLnByb3RvdHlwZSwgImltYWdlTW9kZSIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgb3Igc2V0IHRoZSBjdXJyZW50IHZpZGVvIG1vZGUgZm9yIHRoZSB2
aWRlby4gSXQgY2FuIGJlOgorICAgICAgICAgKiAqIFBob3RvRG9tZS5NT0RFX01PTk9TQ09QSUMg
OiBEZWZpbmUgdGhlIGltYWdlIGFzIGEgTW9ub3Njb3BpYyBwYW5vcmFtaWMgMzYwIGltYWdlLgor
ICAgICAgICAgKiAqIFBob3RvRG9tZS5NT0RFX1RPUEJPVFRPTSAgOiBEZWZpbmUgdGhlIGltYWdl
IGFzIGEgU3RlcmVvc2NvcGljIFRvcEJvdHRvbS9PdmVyVW5kZXIgcGFub3JhbWljIDM2MCBpbWFn
ZS4KKyAgICAgICAgICogKiBQaG90b0RvbWUuTU9ERV9TSURFQllTSURFIDogRGVmaW5lIHRoZSBp
bWFnZSBhcyBhIFN0ZXJlb3Njb3BpYyBTaWRlIGJ5IFNpZGUgcGFub3JhbWljIDM2MCBpbWFnZS4K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2ltYWdlTW9kZTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pbWFnZU1vZGUgPT09IHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
Y2hhbmdlSW1hZ2VNb2RlKHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgUGhvdG9Eb21l
LnByb3RvdHlwZS5fY2hhbmdlSW1hZ2VNb2RlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMuX3NjZW5lLm9uQmVmb3JlQ2FtZXJhUmVu
ZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZlcik7
CisgICAgICAgIHRoaXMuX2ltYWdlTW9kZSA9IHZhbHVlOworICAgICAgICAvLyBEZWZhdWx0IFNl
dHVwIGFuZCBSZXNldC4KKyAgICAgICAgdGhpcy5fcGhvdG9UZXh0dXJlLnVTY2FsZSA9IDE7Cisg
ICAgICAgIHRoaXMuX3Bob3RvVGV4dHVyZS52U2NhbGUgPSAxOworICAgICAgICB0aGlzLl9waG90
b1RleHR1cmUudU9mZnNldCA9IDA7CisgICAgICAgIHRoaXMuX3Bob3RvVGV4dHVyZS52T2Zmc2V0
ID0gMDsKKyAgICAgICAgc3dpdGNoICh2YWx1ZSkgeworICAgICAgICAgICAgY2FzZSBQaG90b0Rv
bWUuTU9ERV9TSURFQllTSURFOgorICAgICAgICAgICAgICAgIHRoaXMuX3Bob3RvVGV4dHVyZS51
U2NhbGUgPSAwLjU7CisgICAgICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVDYW1lcmFSZW5kZXJP
YnNlcnZlciA9IHRoaXMuX3NjZW5lLm9uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5hZGQo
ZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcGhvdG9UZXh0
dXJlLnVPZmZzZXQgPSBjYW1lcmEuaXNSaWdodENhbWVyYSA/IDAuNSA6IDAuMDsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUGhv
dG9Eb21lLk1PREVfVE9QQk9UVE9NOgorICAgICAgICAgICAgICAgIHRoaXMuX3Bob3RvVGV4dHVy
ZS52U2NhbGUgPSAwLjU7CisgICAgICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVDYW1lcmFSZW5k
ZXJPYnNlcnZlciA9IHRoaXMuX3NjZW5lLm9uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5h
ZGQoZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcGhvdG9U
ZXh0dXJlLnZPZmZzZXQgPSBjYW1lcmEuaXNSaWdodENhbWVyYSA/IDAuNSA6IDAuMDsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogUmVsZWFzZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlz
IG5vZGUuCisgICAgICogQHBhcmFtIGRvTm90UmVjdXJzZSBTZXQgdG8gdHJ1ZSB0byBub3QgcmVj
dXJzZSBpbnRvIGVhY2ggY2hpbGRyZW4gKHJlY3Vyc2UgaW50byBlYWNoIGNoaWxkcmVuIGJ5IGRl
ZmF1bHQpCisgICAgICogQHBhcmFtIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzIFNldCB0byB0
cnVlIHRvIGFsc28gZGlzcG9zZSByZWZlcmVuY2VkIG1hdGVyaWFscyBhbmQgdGV4dHVyZXMgKGZh
bHNlIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgUGhvdG9Eb21lLnByb3RvdHlwZS5kaXNwb3Nl
ID0gZnVuY3Rpb24gKGRvTm90UmVjdXJzZSwgZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMpIHsK
KyAgICAgICAgaWYgKGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzID09PSB2b2lkIDApIHsgZGlz
cG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMgPSBmYWxzZTsgfQorICAgICAgICB0aGlzLl9waG90b1Rl
eHR1cmUuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9tZXNoLmRpc3Bvc2UoKTsKKyAgICAgICAg
dGhpcy5fbWF0ZXJpYWwuZGlzcG9zZSgpOworICAgICAgICB0aGlzLm9uTG9hZEVycm9yT2JzZXJ2
YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLl9zY2VuZS5vbkJlZm9yZUNhbWVyYVJlbmRlck9i
c2VydmFibGUucmVtb3ZlKHRoaXMuX29uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIpOworICAg
ICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzLCBkb05vdFJlY3Vyc2UsIGRp
c3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmlu
ZSB0aGUgaW1hZ2UgYXMgYSBNb25vc2NvcGljIHBhbm9yYW1pYyAzNjAgaW1hZ2UuCisgICAgICov
CisgICAgUGhvdG9Eb21lLk1PREVfTU9OT1NDT1BJQyA9IDA7CisgICAgLyoqCisgICAgICogRGVm
aW5lIHRoZSBpbWFnZSBhcyBhIFN0ZXJlb3Njb3BpYyBUb3BCb3R0b20vT3ZlclVuZGVyIHBhbm9y
YW1pYyAzNjAgaW1hZ2UuCisgICAgICovCisgICAgUGhvdG9Eb21lLk1PREVfVE9QQk9UVE9NID0g
MTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmUgdGhlIGltYWdlIGFzIGEgU3RlcmVvc2NvcGljIFNp
ZGUgYnkgU2lkZSBwYW5vcmFtaWMgMzYwIGltYWdlLgorICAgICAqLworICAgIFBob3RvRG9tZS5N
T0RFX1NJREVCWVNJREUgPSAyOworICAgIHJldHVybiBQaG90b0RvbWU7Cit9KF9NZXNoZXNfdHJh
bnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUcmFuc2Zvcm1Ob2RlIl0p
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9IZWxwZXJzL3NjZW5lSGVscGVycy50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0hlbHBl
cnMvc2NlbmVIZWxwZXJzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBfZm9yY2VTY2VuZUhlbHBlcnNUb0J1bmRsZSAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfZm9yY2VTY2VuZUhlbHBlcnNU
b0J1bmRsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZvcmNlU2NlbmVIZWxwZXJzVG9CdW5kbGU7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIg
Ki8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2gg
Ki8gIi4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJp
YWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01h
dGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbCAq
LyAiLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRlcmlhbHNfUEJSX3Bick1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvUEJSL3Bick1hdGVy
aWFsICovICIuL01hdGVyaWFscy9QQlIvcGJyTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTGlnaHRzX2hlbWlzcGhlcmljTGlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0xpZ2h0cy9oZW1pc3BoZXJpY0xp
Z2h0ICovICIuL0xpZ2h0cy9oZW1pc3BoZXJpY0xpZ2h0LnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2Vudmlyb25tZW50SGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Vudmlyb25tZW50SGVscGVyICovICIuL0hlbHBl
cnMvZW52aXJvbm1lbnRIZWxwZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2Ft
ZXJhc19mcmVlQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL2ZyZWVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9mcmVlQ2Ft
ZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfYXJjUm90YXRlQ2Ft
ZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1l
cmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19WUl92ckV4cGVyaWVu
Y2VIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9DYW1lcmFzL1ZSL3ZyRXhwZXJpZW5jZUhlbHBlciAqLyAiLi9DYW1lcmFzL1ZS
L3ZyRXhwZXJpZW5jZUhlbHBlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfVGV4dHVyZXNfTG9hZGVyc19kZHNUZXh0dXJlTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1
cmVzL0xvYWRlcnMvZGRzVGV4dHVyZUxvYWRlciAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvTG9h
ZGVycy9kZHNUZXh0dXJlTG9hZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19UZXh0dXJlc19Mb2FkZXJzX2VudlRleHR1cmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4
dHVyZXMvTG9hZGVycy9lbnZUZXh0dXJlTG9hZGVyICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9M
b2FkZXJzL2VudlRleHR1cmVMb2FkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX1RleHR1cmVzX0xvYWRlcnNfa3R4VGV4dHVyZUxvYWRlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9U
ZXh0dXJlcy9Mb2FkZXJzL2t0eFRleHR1cmVMb2FkZXIgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVz
L0xvYWRlcnMva3R4VGV4dHVyZUxvYWRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NZXNoZXNfQnVpbGRlcnNfYm94QnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9CdWlsZGVycy9ib3hCdWlsZGVy
ICovICIuL01lc2hlcy9CdWlsZGVycy9ib3hCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0NhbWVyYXNfWFJfd2ViWFJEZWZhdWx0RXhwZXJpZW5jZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NhbWVyYXMvWFIv
d2ViWFJEZWZhdWx0RXhwZXJpZW5jZSAqLyAiLi9DYW1lcmFzL1hSL3dlYlhSRGVmYXVsdEV4cGVy
aWVuY2UudHMiKTsKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisvKiogQGhpZGRl
biAqLwordmFyIF9mb3JjZVNjZW5lSGVscGVyc1RvQnVuZGxlID0gdHJ1ZTsKK19zY2VuZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2VuZSJdLnByb3RvdHlwZS5jcmVhdGVEZWZhdWx0
TGlnaHQgPSBmdW5jdGlvbiAocmVwbGFjZSkgeworICAgIGlmIChyZXBsYWNlID09PSB2b2lkIDAp
IHsgcmVwbGFjZSA9IGZhbHNlOyB9CisgICAgLy8gRGlzcG9zZSBleGlzdGluZyBsaWdodCBpbiBy
ZXBsYWNlIG1vZGUuCisgICAgaWYgKHJlcGxhY2UpIHsKKyAgICAgICAgaWYgKHRoaXMubGlnaHRz
KSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlnaHRzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5saWdodHNbaV0uZGlzcG9zZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8vIExpZ2h0CisgICAgaWYgKHRoaXMubGln
aHRzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICBuZXcgX0xpZ2h0c19oZW1pc3BoZXJpY0xpZ2h0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkhlbWlzcGhlcmljTGlnaHQiXSgiZGVmYXVs
dCBsaWdodCIsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJWZWN0b3IzIl0uVXAoKSwgdGhpcyk7CisgICAgfQorfTsKK19zY2VuZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJTY2VuZSJdLnByb3RvdHlwZS5jcmVhdGVEZWZhdWx0Q2FtZXJhID0g
ZnVuY3Rpb24gKGNyZWF0ZUFyY1JvdGF0ZUNhbWVyYSwgcmVwbGFjZSwgYXR0YWNoQ2FtZXJhQ29u
dHJvbHMpIHsKKyAgICBpZiAoY3JlYXRlQXJjUm90YXRlQ2FtZXJhID09PSB2b2lkIDApIHsgY3Jl
YXRlQXJjUm90YXRlQ2FtZXJhID0gZmFsc2U7IH0KKyAgICBpZiAocmVwbGFjZSA9PT0gdm9pZCAw
KSB7IHJlcGxhY2UgPSBmYWxzZTsgfQorICAgIGlmIChhdHRhY2hDYW1lcmFDb250cm9scyA9PT0g
dm9pZCAwKSB7IGF0dGFjaENhbWVyYUNvbnRyb2xzID0gZmFsc2U7IH0KKyAgICAvLyBEaXNwb3Nl
IGV4aXN0aW5nIGNhbWVyYSBpbiByZXBsYWNlIG1vZGUuCisgICAgaWYgKHJlcGxhY2UpIHsKKyAg
ICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICB0aGlzLmFjdGl2ZUNh
bWVyYS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYSA9IG51bGw7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgLy8gQ2FtZXJhCisgICAgaWYgKCF0aGlzLmFjdGl2ZUNhbWVy
YSkgeworICAgICAgICB2YXIgd29ybGRFeHRlbmRzID0gdGhpcy5nZXRXb3JsZEV4dGVuZHMoKTsK
KyAgICAgICAgdmFyIHdvcmxkU2l6ZSA9IHdvcmxkRXh0ZW5kcy5tYXguc3VidHJhY3Qod29ybGRF
eHRlbmRzLm1pbik7CisgICAgICAgIHZhciB3b3JsZENlbnRlciA9IHdvcmxkRXh0ZW5kcy5taW4u
YWRkKHdvcmxkU2l6ZS5zY2FsZSgwLjUpKTsKKyAgICAgICAgdmFyIGNhbWVyYTsKKyAgICAgICAg
dmFyIHJhZGl1cyA9IHdvcmxkU2l6ZS5sZW5ndGgoKSAqIDEuNTsKKyAgICAgICAgLy8gZW1wdHkg
c2NlbmUgc2NlbmFyaW8hCisgICAgICAgIGlmICghaXNGaW5pdGUocmFkaXVzKSkgeworICAgICAg
ICAgICAgcmFkaXVzID0gMTsKKyAgICAgICAgICAgIHdvcmxkQ2VudGVyLmNvcHlGcm9tRmxvYXRz
KDAsIDAsIDApOworICAgICAgICB9CisgICAgICAgIGlmIChjcmVhdGVBcmNSb3RhdGVDYW1lcmEp
IHsKKyAgICAgICAgICAgIHZhciBhcmNSb3RhdGVDYW1lcmEgPSBuZXcgX0NhbWVyYXNfYXJjUm90
YXRlQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJBcmNSb3RhdGVDYW1lcmEi
XSgiZGVmYXVsdCBjYW1lcmEiLCAtKE1hdGguUEkgLyAyKSwgTWF0aC5QSSAvIDIsIHJhZGl1cywg
d29ybGRDZW50ZXIsIHRoaXMpOworICAgICAgICAgICAgYXJjUm90YXRlQ2FtZXJhLmxvd2VyUmFk
aXVzTGltaXQgPSByYWRpdXMgKiAwLjAxOworICAgICAgICAgICAgYXJjUm90YXRlQ2FtZXJhLndo
ZWVsUHJlY2lzaW9uID0gMTAwIC8gcmFkaXVzOworICAgICAgICAgICAgY2FtZXJhID0gYXJjUm90
YXRlQ2FtZXJhOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGZy
ZWVDYW1lcmEgPSBuZXcgX0NhbWVyYXNfZnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJGcmVlQ2FtZXJhIl0oImRlZmF1bHQgY2FtZXJhIiwgbmV3IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0od29ybGRDZW50ZXIu
eCwgd29ybGRDZW50ZXIueSwgLXJhZGl1cyksIHRoaXMpOworICAgICAgICAgICAgZnJlZUNhbWVy
YS5zZXRUYXJnZXQod29ybGRDZW50ZXIpOworICAgICAgICAgICAgY2FtZXJhID0gZnJlZUNhbWVy
YTsKKyAgICAgICAgfQorICAgICAgICBjYW1lcmEubWluWiA9IHJhZGl1cyAqIDAuMDE7CisgICAg
ICAgIGNhbWVyYS5tYXhaID0gcmFkaXVzICogMTAwMDsKKyAgICAgICAgY2FtZXJhLnNwZWVkID0g
cmFkaXVzICogMC4yOworICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYSA9IGNhbWVyYTsKKyAgICAg
ICAgdmFyIGNhbnZhcyA9IHRoaXMuZ2V0RW5naW5lKCkuZ2V0UmVuZGVyaW5nQ2FudmFzKCk7Cisg
ICAgICAgIGlmIChhdHRhY2hDYW1lcmFDb250cm9scyAmJiBjYW52YXMpIHsKKyAgICAgICAgICAg
IGNhbWVyYS5hdHRhY2hDb250cm9sKGNhbnZhcyk7CisgICAgICAgIH0KKyAgICB9Cit9OworX3Nj
ZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lIl0ucHJvdG90eXBlLmNyZWF0
ZURlZmF1bHRDYW1lcmFPckxpZ2h0ID0gZnVuY3Rpb24gKGNyZWF0ZUFyY1JvdGF0ZUNhbWVyYSwg
cmVwbGFjZSwgYXR0YWNoQ2FtZXJhQ29udHJvbHMpIHsKKyAgICBpZiAoY3JlYXRlQXJjUm90YXRl
Q2FtZXJhID09PSB2b2lkIDApIHsgY3JlYXRlQXJjUm90YXRlQ2FtZXJhID0gZmFsc2U7IH0KKyAg
ICBpZiAocmVwbGFjZSA9PT0gdm9pZCAwKSB7IHJlcGxhY2UgPSBmYWxzZTsgfQorICAgIGlmIChh
dHRhY2hDYW1lcmFDb250cm9scyA9PT0gdm9pZCAwKSB7IGF0dGFjaENhbWVyYUNvbnRyb2xzID0g
ZmFsc2U7IH0KKyAgICB0aGlzLmNyZWF0ZURlZmF1bHRMaWdodChyZXBsYWNlKTsKKyAgICB0aGlz
LmNyZWF0ZURlZmF1bHRDYW1lcmEoY3JlYXRlQXJjUm90YXRlQ2FtZXJhLCByZXBsYWNlLCBhdHRh
Y2hDYW1lcmFDb250cm9scyk7Cit9OworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlNjZW5lIl0ucHJvdG90eXBlLmNyZWF0ZURlZmF1bHRTa3lib3ggPSBmdW5jdGlvbiAoZW52
aXJvbm1lbnRUZXh0dXJlLCBwYnIsIHNjYWxlLCBibHVyLCBzZXRHbG9iYWxFbnZUZXh0dXJlKSB7
CisgICAgaWYgKHBiciA9PT0gdm9pZCAwKSB7IHBiciA9IGZhbHNlOyB9CisgICAgaWYgKHNjYWxl
ID09PSB2b2lkIDApIHsgc2NhbGUgPSAxMDAwOyB9CisgICAgaWYgKGJsdXIgPT09IHZvaWQgMCkg
eyBibHVyID0gMDsgfQorICAgIGlmIChzZXRHbG9iYWxFbnZUZXh0dXJlID09PSB2b2lkIDApIHsg
c2V0R2xvYmFsRW52VGV4dHVyZSA9IHRydWU7IH0KKyAgICBpZiAoIWVudmlyb25tZW50VGV4dHVy
ZSkgeworICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
TG9nZ2VyIl0uV2FybigiQ2FuIG5vdCBjcmVhdGUgZGVmYXVsdCBza3lib3ggd2l0aG91dCBlbnZp
cm9ubWVudCB0ZXh0dXJlLiIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgaWYg
KHNldEdsb2JhbEVudlRleHR1cmUpIHsKKyAgICAgICAgaWYgKGVudmlyb25tZW50VGV4dHVyZSkg
eworICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudFRleHR1cmUgPSBlbnZpcm9ubWVudFRleHR1
cmU7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gU2t5Ym94CisgICAgdmFyIGhkclNreWJveCA9
IF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNZXNoIl0uQ3JlYXRl
Qm94KCJoZHJTa3lCb3giLCBzY2FsZSwgdGhpcyk7CisgICAgaWYgKHBicikgeworICAgICAgICB2
YXIgaGRyU2t5Ym94TWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFsc19QQlJfcGJyTWF0ZXJpYWxfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUEJSTWF0ZXJpYWwiXSgic2t5Qm94IiwgdGhpcyk7
CisgICAgICAgIGhkclNreWJveE1hdGVyaWFsLmJhY2tGYWNlQ3VsbGluZyA9IGZhbHNlOworICAg
ICAgICBoZHJTa3lib3hNYXRlcmlhbC5yZWZsZWN0aW9uVGV4dHVyZSA9IGVudmlyb25tZW50VGV4
dHVyZS5jbG9uZSgpOworICAgICAgICBpZiAoaGRyU2t5Ym94TWF0ZXJpYWwucmVmbGVjdGlvblRl
eHR1cmUpIHsKKyAgICAgICAgICAgIGhkclNreWJveE1hdGVyaWFsLnJlZmxlY3Rpb25UZXh0dXJl
LmNvb3JkaW5hdGVzTW9kZSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uU0tZQk9YX01PREU7CisgICAgICAgIH0KKyAg
ICAgICAgaGRyU2t5Ym94TWF0ZXJpYWwubWljcm9TdXJmYWNlID0gMS4wIC0gYmx1cjsKKyAgICAg
ICAgaGRyU2t5Ym94TWF0ZXJpYWwuZGlzYWJsZUxpZ2h0aW5nID0gdHJ1ZTsKKyAgICAgICAgaGRy
U2t5Ym94TWF0ZXJpYWwudHdvU2lkZWRMaWdodGluZyA9IHRydWU7CisgICAgICAgIGhkclNreWJv
eC5pbmZpbml0ZURpc3RhbmNlID0gdHJ1ZTsKKyAgICAgICAgaGRyU2t5Ym94Lm1hdGVyaWFsID0g
aGRyU2t5Ym94TWF0ZXJpYWw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB2YXIgc2t5Ym94
TWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIlN0YW5kYXJkTWF0ZXJpYWwiXSgic2t5Qm94IiwgdGhpcyk7CisgICAg
ICAgIHNreWJveE1hdGVyaWFsLmJhY2tGYWNlQ3VsbGluZyA9IGZhbHNlOworICAgICAgICBza3li
b3hNYXRlcmlhbC5yZWZsZWN0aW9uVGV4dHVyZSA9IGVudmlyb25tZW50VGV4dHVyZS5jbG9uZSgp
OworICAgICAgICBpZiAoc2t5Ym94TWF0ZXJpYWwucmVmbGVjdGlvblRleHR1cmUpIHsKKyAgICAg
ICAgICAgIHNreWJveE1hdGVyaWFsLnJlZmxlY3Rpb25UZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSA9
IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJUZXh0dXJlIl0uU0tZQk9YX01PREU7CisgICAgICAgIH0KKyAgICAgICAgc2t5Ym94TWF0ZXJp
YWwuZGlzYWJsZUxpZ2h0aW5nID0gdHJ1ZTsKKyAgICAgICAgaGRyU2t5Ym94LmluZmluaXRlRGlz
dGFuY2UgPSB0cnVlOworICAgICAgICBoZHJTa3lib3gubWF0ZXJpYWwgPSBza3lib3hNYXRlcmlh
bDsKKyAgICB9CisgICAgaGRyU2t5Ym94LmlzUGlja2FibGUgPSBmYWxzZTsKKyAgICByZXR1cm4g
aGRyU2t5Ym94OworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2Vu
ZSJdLnByb3RvdHlwZS5jcmVhdGVEZWZhdWx0RW52aXJvbm1lbnQgPSBmdW5jdGlvbiAob3B0aW9u
cykgeworICAgIGlmIChfZW52aXJvbm1lbnRIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siRW52aXJvbm1lbnRIZWxwZXIiXSkgeworICAgICAgICByZXR1cm4gbmV3IF9lbnZpcm9u
bWVudEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJFbnZpcm9ubWVudEhlbHBl
ciJdKG9wdGlvbnMsIHRoaXMpOworICAgIH0KKyAgICByZXR1cm4gbnVsbDsKK307Citfc2NlbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmUiXS5wcm90b3R5cGUuY3JlYXRlRGVm
YXVsdFZSRXhwZXJpZW5jZSA9IGZ1bmN0aW9uICh3ZWJWUk9wdGlvbnMpIHsKKyAgICBpZiAod2Vi
VlJPcHRpb25zID09PSB2b2lkIDApIHsgd2ViVlJPcHRpb25zID0ge307IH0KKyAgICByZXR1cm4g
bmV3IF9DYW1lcmFzX1ZSX3ZyRXhwZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfX1siVlJFeHBlcmllbmNlSGVscGVyIl0odGhpcywgd2ViVlJPcHRpb25zKTsKK307Citf
c2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmUiXS5wcm90b3R5cGUuY3Jl
YXRlRGVmYXVsdFhSRXhwZXJpZW5jZUFzeW5jID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICBy
ZXR1cm4gX0NhbWVyYXNfWFJfd2ViWFJEZWZhdWx0RXhwZXJpZW5jZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTZfX1siV2ViWFJEZWZhdWx0RXhwZXJpZW5jZSJdLkNyZWF0ZUFzeW5jKHRoaXMs
IG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKGhlbHBlcikgeworICAgICAgICByZXR1cm4gaGVscGVy
OworICAgIH0pOworfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vSGVscGVycy92aWRlb0Rv
bWUudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9I
ZWxwZXJzL3ZpZGVvRG9tZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogVmlkZW9Eb21lICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlZpZGVvRG9tZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVmlkZW9E
b21lOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVf
bW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWVzaGVzX3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy90cmFuc2Zvcm1Ob2RlICovICIuL01lc2hlcy90
cmFuc2Zvcm1Ob2RlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3Rl
eHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3ZpZGVvVGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxz
L1RleHR1cmVzL3ZpZGVvVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdmlkZW9UZXh0
dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19CYWNrZ3JvdW5k
X2JhY2tncm91bmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL0JhY2tncm91bmQvYmFja2dyb3VuZE1hdGVy
aWFsICovICIuL01hdGVyaWFscy9CYWNrZ3JvdW5kL2JhY2tncm91bmRNYXRlcmlhbC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfc3BoZXJlQnVpbGRlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWVzaGVzL0J1aWxkZXJzL3NwaGVyZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3NwaGVy
ZUJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGggKi8gIi4vTWF0aHMv
bWF0aC50cyIpOworCisKKworCisKKworCisKKworCisvKioKKyAqIERpc3BsYXkgYSAzNjAvMTgw
IGRlZ3JlZSB2aWRlbyBvbiBhbiBhcHByb3hpbWF0ZWx5IHNwaGVyaWNhbCBzdXJmYWNlLCB1c2Vm
dWwgZm9yIFZSIGFwcGxpY2F0aW9ucyBvciBza3lib3hlcy4KKyAqIEFzIGEgc3ViY2xhc3Mgb2Yg
VHJhbnNmb3JtTm9kZSwgdGhpcyBhbGxvdyBwYXJlbnRpbmcgdG8gdGhlIGNhbWVyYSBvciBtdWx0
aXBsZSB2aWRlb3Mgd2l0aCBkaWZmZXJlbnQgbG9jYXRpb25zIGluIHRoZSBzY2VuZS4KKyAqIFRo
aXMgY2xhc3MgYWNoaWV2ZXMgaXRzIGVmZmVjdCB3aXRoIGEgVmlkZW9UZXh0dXJlIGFuZCBhIGNv
cnJlY3RseSBjb25maWd1cmVkIEJhY2tncm91bmRNYXRlcmlhbCBvbiBhbiBpbnZlcnRlZCBzcGhl
cmUuCisgKiBQb3RlbnRpYWwgYWRkaXRpb25zIHRvIHRoaXMgaGVscGVyIGluY2x1ZGUgem9vbSBh
bmQgYW5kIG5vbi1pbmZpbml0ZSBkaXN0YW5jZSByZW5kZXJpbmcgZWZmZWN0cy4KKyAqLwordmFy
IFZpZGVvRG9tZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShWaWRlb0RvbWUsIF9z
dXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mg
YW5kIHBhc3MgdGhyb3VnaCB0aGUgcGFyYW1ldGVycyB0byB0aGUgcmVsZXZhbnQgY2xhc3Nlcywg
VmlkZW9UZXh0dXJlLCBTdGFuZGFyZE1hdGVyaWFsLCBhbmQgTWVzaC4KKyAgICAgKiBAcGFyYW0g
bmFtZSBFbGVtZW50J3MgbmFtZSwgY2hpbGQgZWxlbWVudHMgd2lsbCBhcHBlbmQgc3VmZml4ZXMg
Zm9yIHRoZWlyIG93biBuYW1lcy4KKyAgICAgKiBAcGFyYW0gdXJsc09yVmlkZW8gZGVmaW5lcyB0
aGUgdXJsKHMpIG9yIHRoZSB2aWRlbyBlbGVtZW50IHRvIHVzZQorICAgICAqIEBwYXJhbSBvcHRp
b25zIEFuIG9iamVjdCBjb250YWluaW5nIG9wdGlvbmFsIG9yIGV4cG9zZWQgc3ViIGVsZW1lbnQg
cHJvcGVydGllcworICAgICAqLworICAgIGZ1bmN0aW9uIFZpZGVvRG9tZShuYW1lLCB1cmxzT3JW
aWRlbywgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwo
dGhpcywgbmFtZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9oYWxmRG9tZSA9IGZh
bHNlOworICAgICAgICBfdGhpcy5fdXNlRGlyZWN0TWFwcGluZyA9IGZhbHNlOworICAgICAgICBf
dGhpcy5fdmlkZW9Nb2RlID0gVmlkZW9Eb21lLk1PREVfTU9OT1NDT1BJQzsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIE9iZXJzZXJ2ZXIgdXNlZCBpbiBTdGVyZW9zY29waWMgVlIgTW9kZS4KKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLl9vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2VydmVyID0g
bnVsbDsKKyAgICAgICAgc2NlbmUgPSBfdGhpcy5nZXRTY2VuZSgpOworICAgICAgICAvLyBzZXQg
ZGVmYXVsdHMgYW5kIG1hbmFnZSB2YWx1ZXMKKyAgICAgICAgbmFtZSA9IG5hbWUgfHwgInZpZGVv
RG9tZSI7CisgICAgICAgIG9wdGlvbnMucmVzb2x1dGlvbiA9IChNYXRoLmFicyhvcHRpb25zLnJl
c29sdXRpb24pIHwgMCkgfHwgMzI7CisgICAgICAgIG9wdGlvbnMuY2xpY2tUb1BsYXkgPSBCb29s
ZWFuKG9wdGlvbnMuY2xpY2tUb1BsYXkpOworICAgICAgICBvcHRpb25zLmF1dG9QbGF5ID0gb3B0
aW9ucy5hdXRvUGxheSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IEJvb2xlYW4ob3B0aW9ucy5hdXRv
UGxheSk7CisgICAgICAgIG9wdGlvbnMubG9vcCA9IG9wdGlvbnMubG9vcCA9PT0gdW5kZWZpbmVk
ID8gdHJ1ZSA6IEJvb2xlYW4ob3B0aW9ucy5sb29wKTsKKyAgICAgICAgb3B0aW9ucy5zaXplID0g
TWF0aC5hYnMob3B0aW9ucy5zaXplKSB8fCAoc2NlbmUuYWN0aXZlQ2FtZXJhID8gc2NlbmUuYWN0
aXZlQ2FtZXJhLm1heFogKiAwLjQ4IDogMTAwMCk7CisgICAgICAgIGlmIChvcHRpb25zLnVzZURp
cmVjdE1hcHBpbmcgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgX3RoaXMuX3VzZURpcmVj
dE1hcHBpbmcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
X3RoaXMuX3VzZURpcmVjdE1hcHBpbmcgPSBvcHRpb25zLnVzZURpcmVjdE1hcHBpbmc7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKG9wdGlvbnMuZmFjZUZvcndhcmQgPT09IHVuZGVmaW5lZCkgewor
ICAgICAgICAgICAgb3B0aW9ucy5mYWNlRm9yd2FyZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgX3RoaXMuX3NldFJlYWR5KGZhbHNlKTsKKyAgICAgICAgLy8gY3JlYXRlCisgICAgICAgIHZh
ciB0ZW1wT3B0aW9ucyA9IHsgbG9vcDogb3B0aW9ucy5sb29wLCBhdXRvUGxheTogb3B0aW9ucy5h
dXRvUGxheSwgYXV0b1VwZGF0ZVRleHR1cmU6IHRydWUsIHBvc3Rlcjogb3B0aW9ucy5wb3N0ZXIg
fTsKKyAgICAgICAgdmFyIG1hdGVyaWFsID0gX3RoaXMuX21hdGVyaWFsID0gbmV3IF9NYXRlcmlh
bHNfQmFja2dyb3VuZF9iYWNrZ3JvdW5kTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siQmFja2dyb3VuZE1hdGVyaWFsIl0obmFtZSArICJfbWF0ZXJpYWwiLCBzY2VuZSk7Cisg
ICAgICAgIHZhciB0ZXh0dXJlID0gX3RoaXMuX3ZpZGVvVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxz
X1RleHR1cmVzX3ZpZGVvVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWaWRl
b1RleHR1cmUiXShuYW1lICsgIl90ZXh0dXJlIiwgdXJsc09yVmlkZW8sIHNjZW5lLCBmYWxzZSwg
X3RoaXMuX3VzZURpcmVjdE1hcHBpbmcsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUZXh0dXJlIl0uVFJJTElORUFSX1NBTVBMSU5HTU9E
RSwgdGVtcE9wdGlvbnMpOworICAgICAgICBfdGhpcy5fbWVzaCA9IF9NZXNoZXNfbWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uQ3JlYXRlU3BoZXJlKG5hbWUgKyAiX21l
c2giLCBvcHRpb25zLnJlc29sdXRpb24sIG9wdGlvbnMuc2l6ZSwgc2NlbmUsIGZhbHNlLCBfTWVz
aGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdLkJBQ0tTSURFKTsK
KyAgICAgICAgdGV4dHVyZS5vbkxvYWRPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgX3RoaXMuX3NldFJlYWR5KHRydWUpOworICAgICAgICB9KTsKKyAgICAgICAg
Ly8gY29uZmlndXJlIG1hdGVyaWFsCisgICAgICAgIG1hdGVyaWFsLnVzZUVxdWlyZWN0YW5ndWxh
ckZPViA9IHRydWU7CisgICAgICAgIG1hdGVyaWFsLmZvdk11bHRpcGxpZXIgPSAxLjA7CisgICAg
ICAgIG1hdGVyaWFsLm9wYWNpdHlGcmVzbmVsID0gZmFsc2U7CisgICAgICAgIGlmIChfdGhpcy5f
dXNlRGlyZWN0TWFwcGluZykgeworICAgICAgICAgICAgdGV4dHVyZS53cmFwVSA9IF9NYXRlcmlh
bHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUZXh0dXJl
Il0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgICAgICB0ZXh0dXJlLndyYXBWID0gX01hdGVy
aWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRleHR1
cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgICAgIG1hdGVyaWFsLmRpZmZ1c2VUZXh0
dXJlID0gdGV4dHVyZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRl
eHR1cmUuY29vcmRpbmF0ZXNNb2RlID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRleHR1cmUiXS5GSVhFRF9FUVVJUkVDVEFOR1VMQVJf
TUlSUk9SRURfTU9ERTsgLy8gbWF0Y2hlcyBvcmllbnRhdGlvbgorICAgICAgICAgICAgdGV4dHVy
ZS53cmFwViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgICAgICBtYXRl
cmlhbC5yZWZsZWN0aW9uVGV4dHVyZSA9IHRleHR1cmU7CisgICAgICAgIH0KKyAgICAgICAgLy8g
Y29uZmlndXJlIG1lc2gKKyAgICAgICAgX3RoaXMuX21lc2gubWF0ZXJpYWwgPSBtYXRlcmlhbDsK
KyAgICAgICAgX3RoaXMuX21lc2gucGFyZW50ID0gX3RoaXM7CisgICAgICAgIC8vIGNyZWF0ZSBh
IChkaXNhYmxlZCB1bnRpbCBuZWVkZWQpIG1hc2sgdG8gY292ZXIgdW5uZWVkZWQgc2VnbWVudHMg
b2YgMTgwIHZpZGVvcy4KKyAgICAgICAgX3RoaXMuX2hhbGZEb21lTWFzayA9IF9NZXNoZXNfQnVp
bGRlcnNfc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTcGhlcmVC
dWlsZGVyIl0uQ3JlYXRlU3BoZXJlKCIiLCB7IHNsaWNlOiAwLjUsIGRpYW1ldGVyOiBvcHRpb25z
LnNpemUgKiAwLjk5LCBzZWdtZW50czogb3B0aW9ucy5yZXNvbHV0aW9uLCBzaWRlT3JpZW50YXRp
b246IF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uQkFD
S1NJREUgfSwgc2NlbmUpOworICAgICAgICBfdGhpcy5faGFsZkRvbWVNYXNrLnJvdGF0ZShfTWF0
aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJBeGlzIl0uWCwgLU1hdGguUEkg
LyAyKTsKKyAgICAgICAgLy8gc2V0IHRoZSBwYXJlbnQsIHNvIGl0IHdpbGwgYWx3YXlzIGJlIHBv
c2l0aW9uZWQgY29ycmVjdGx5IEFORCB3aWxsIGJlIGRpc3Bvc2VkIHdoZW4gdGhlIG1haW4gc3Bo
ZXJlIGlzIGRpc3Bvc2VkCisgICAgICAgIF90aGlzLl9oYWxmRG9tZU1hc2sucGFyZW50ID0gX3Ro
aXMuX21lc2g7CisgICAgICAgIF90aGlzLl9oYWxmRG9tZSA9ICEhb3B0aW9ucy5oYWxmRG9tZU1v
ZGU7CisgICAgICAgIC8vIGVuYWJsZSBvciBkaXNhYmxlIGFjY29yZGluZyB0byB0aGUgc2V0dGlu
Z3MKKyAgICAgICAgX3RoaXMuX2hhbGZEb21lTWFzay5zZXRFbmFibGVkKF90aGlzLl9oYWxmRG9t
ZSk7CisgICAgICAgIC8vIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgaWYgKG9wdGlv
bnMuY2xpY2tUb1BsYXkpIHsKKyAgICAgICAgICAgIHNjZW5lLm9uUG9pbnRlclVwID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLl92aWRlb1RleHR1cmUudmlkZW8ucGxheSgp
OworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbml0aWFsIHJvdGF0aW9u
CisgICAgICAgIGlmIChvcHRpb25zLmZhY2VGb3J3YXJkICYmIHNjZW5lLmFjdGl2ZUNhbWVyYSkg
eworICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHNjZW5lLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAg
ICAgIHZhciBmb3J3YXJkID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIlZlY3RvcjMiXS5Gb3J3YXJkKCk7CisgICAgICAgICAgICB2YXIgZGlyZWN0aW9u
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlY3Rv
cjMiXS5UcmFuc2Zvcm1Ob3JtYWwoZm9yd2FyZCwgY2FtZXJhLmdldFZpZXdNYXRyaXgoKSk7Cisg
ICAgICAgICAgICBkaXJlY3Rpb24ubm9ybWFsaXplKCk7CisgICAgICAgICAgICBfdGhpcy5yb3Rh
dGlvbi55ID0gTWF0aC5hY29zKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fWyJWZWN0b3IzIl0uRG90KGZvcndhcmQsIGRpcmVjdGlvbikpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFZpZGVvRG9tZS5wcm90b3R5cGUsICJ2aWRlb1RleHR1cmUiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSB2aWRlbyB0ZXh0dXJlIGJlaW5nIGRpc3BsYXllZCBvbiB0aGUgc3Bo
ZXJlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl92aWRlb1RleHR1cmU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShWaWRlb0RvbWUucHJvdG90eXBlLCAiZm92TXVsdGlwbGllciIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjdXJyZW50IGZvdihmaWVsZCBvZiB2aWV3KSBt
dWx0aXBsaWVyLCAwLjAgLSAyLjAuIERlZmF1bHRzIHRvIDEuMC4gTG93ZXIgdmFsdWVzICJ6b29t
IGluIiBhbmQgaGlnaGVyIHZhbHVlcyAiem9vbSBvdXQiLgorICAgICAgICAgKiBBbHNvIHNlZSB0
aGUgb3B0aW9ucy5yZXNvbHV0aW9uIHByb3BlcnR5LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF0ZXJpYWwuZm92TXVs
dGlwbGllcjsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX21hdGVyaWFsLmZvdk11bHRpcGxpZXIgPSB2YWx1ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZpZGVvRG9tZS5wcm90b3R5cGUs
ICJ2aWRlb01vZGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldCB0aGUg
Y3VycmVudCB2aWRlbyBtb2RlIGZvciB0aGUgdmlkZW8uIEl0IGNhbiBiZToKKyAgICAgICAgICog
KiBWaWRlb0RvbWUuTU9ERV9NT05PU0NPUElDIDogRGVmaW5lIHRoZSB2aWRlbyBzb3VyY2UgYXMg
YSBNb25vc2NvcGljIHBhbm9yYW1pYyAzNjAgdmlkZW8uCisgICAgICAgICAqICogVmlkZW9Eb21l
Lk1PREVfVE9QQk9UVE9NICA6IERlZmluZSB0aGUgdmlkZW8gc291cmNlIGFzIGEgU3RlcmVvc2Nv
cGljIFRvcEJvdHRvbS9PdmVyVW5kZXIgcGFub3JhbWljIDM2MCB2aWRlby4KKyAgICAgICAgICog
KiBWaWRlb0RvbWUuTU9ERV9TSURFQllTSURFIDogRGVmaW5lIHRoZSB2aWRlbyBzb3VyY2UgYXMg
YSBTdGVyZW9zY29waWMgU2lkZSBieSBTaWRlIHBhbm9yYW1pYyAzNjAgdmlkZW8uCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll92aWRlb01vZGU7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fdmlkZW9Nb2RlID09PSB2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2NoYW5nZVZp
ZGVvTW9kZSh2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShWaWRlb0RvbWUucHJvdG90eXBlLCAiaGFsZkRvbWUiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBJcyB0aGUgdmlkZW8gYSAxODAgZGVncmVlcyB2aWRlbyAoaGFsZiBkb21lKSBvciAz
NjAgdmlkZW8gKGZ1bGwgZG9tZSkKKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhbGZEb21lOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0IHRoZSBoYWxmRG9tZSBtb2RlLiBJ
ZiBzZXQsIG9ubHkgdGhlIGZyb250ICgxODAgZGVncmVlcykgd2lsbCBiZSBkaXNwbGF5ZWQgYW5k
IHRoZSBiYWNrIHdpbGwgYmUgYmxhY2tlZCBvdXQuCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uIChlbmFibGVkKSB7CisgICAgICAgICAgICB0aGlzLl9oYWxmRG9tZSA9IGVuYWJs
ZWQ7CisgICAgICAgICAgICB0aGlzLl9oYWxmRG9tZU1hc2suc2V0RW5hYmxlZChlbmFibGVkKTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgVmlkZW9Eb21lLnByb3RvdHlwZS5fY2hhbmdlVmlkZW9N
b2RlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIHRoaXMuX3NjZW5lLm9uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhp
cy5fb25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZlcik7CisgICAgICAgIHRoaXMuX3ZpZGVvTW9k
ZSA9IHZhbHVlOworICAgICAgICAvLyBEZWZhdWx0IFNldHVwIGFuZCBSZXNldC4KKyAgICAgICAg
dGhpcy5fdmlkZW9UZXh0dXJlLnVTY2FsZSA9IDE7CisgICAgICAgIHRoaXMuX3ZpZGVvVGV4dHVy
ZS52U2NhbGUgPSAxOworICAgICAgICB0aGlzLl92aWRlb1RleHR1cmUudU9mZnNldCA9IDA7Cisg
ICAgICAgIHRoaXMuX3ZpZGVvVGV4dHVyZS52T2Zmc2V0ID0gMDsKKyAgICAgICAgc3dpdGNoICh2
YWx1ZSkgeworICAgICAgICAgICAgY2FzZSBWaWRlb0RvbWUuTU9ERV9TSURFQllTSURFOgorICAg
ICAgICAgICAgICAgIC8vIGluIGhhbGYtZG9tZSBtb2RlIHRoZSB1U2NhbGUgc2hvdWxkIGJlIGRv
dWJsZSBvZiAzNjAgdmlkZW9zCisgICAgICAgICAgICAgICAgLy8gVXNlIDAuOTk5OTkgdG8gYm9v
c3QgcGVyZiBieSBub3Qgc3dpdGNoaW5nIHByb2dyYW0KKyAgICAgICAgICAgICAgICB0aGlzLl92
aWRlb1RleHR1cmUudVNjYWxlID0gdGhpcy5faGFsZkRvbWUgPyAwLjk5OTk5IDogMC41OworICAg
ICAgICAgICAgICAgIHZhciByaWdodE9mZnNldF8xID0gdGhpcy5faGFsZkRvbWUgPyAwLjAgOiAw
LjU7CisgICAgICAgICAgICAgICAgdmFyIGxlZnRPZmZzZXRfMSA9IHRoaXMuX2hhbGZEb21lID8g
MC41IDogMC4wOworICAgICAgICAgICAgICAgIHRoaXMuX29uQmVmb3JlQ2FtZXJhUmVuZGVyT2Jz
ZXJ2ZXIgPSB0aGlzLl9zY2VuZS5vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2VydmFibGUuYWRkKGZ1
bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ZpZGVvVGV4dHVy
ZS51T2Zmc2V0ID0gY2FtZXJhLmlzUmlnaHRDYW1lcmEgPyByaWdodE9mZnNldF8xIDogbGVmdE9m
ZnNldF8xOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBWaWRlb0RvbWUuTU9ERV9UT1BCT1RUT006CisgICAgICAgICAgICAgICAg
Ly8gaW4gaGFsZi1kb21lIG1vZGUgdGhlIHZTY2FsZSBzaG91bGQgYmUgZG91YmxlIG9mIDM2MCB2
aWRlb3MKKyAgICAgICAgICAgICAgICAvLyBVc2UgMC45OTk5OSB0byBib29zdCBwZXJmIGJ5IG5v
dCBzd2l0Y2hpbmcgcHJvZ3JhbQorICAgICAgICAgICAgICAgIHRoaXMuX3ZpZGVvVGV4dHVyZS52
U2NhbGUgPSB0aGlzLl9oYWxmRG9tZSA/IDAuOTk5OTkgOiAwLjU7CisgICAgICAgICAgICAgICAg
dGhpcy5fb25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZlciA9IHRoaXMuX3NjZW5lLm9uQmVmb3Jl
Q2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5fdmlkZW9UZXh0dXJlLnZPZmZzZXQgPSBjYW1lcmEuaXNSaWdodENh
bWVyYSA/IDAuNSA6IDAuMDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZXMgcmVzb3Vy
Y2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5vZGUuCisgICAgICogQHBhcmFtIGRvTm90UmVjdXJz
ZSBTZXQgdG8gdHJ1ZSB0byBub3QgcmVjdXJzZSBpbnRvIGVhY2ggY2hpbGRyZW4gKHJlY3Vyc2Ug
aW50byBlYWNoIGNoaWxkcmVuIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGRpc3Bvc2VNYXRl
cmlhbEFuZFRleHR1cmVzIFNldCB0byB0cnVlIHRvIGFsc28gZGlzcG9zZSByZWZlcmVuY2VkIG1h
dGVyaWFscyBhbmQgdGV4dHVyZXMgKGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgVmlk
ZW9Eb21lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGRvTm90UmVjdXJzZSwgZGlzcG9z
ZU1hdGVyaWFsQW5kVGV4dHVyZXMpIHsKKyAgICAgICAgaWYgKGRpc3Bvc2VNYXRlcmlhbEFuZFRl
eHR1cmVzID09PSB2b2lkIDApIHsgZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMgPSBmYWxzZTsg
fQorICAgICAgICB0aGlzLl92aWRlb1RleHR1cmUuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9t
ZXNoLmRpc3Bvc2UoKTsKKyAgICAgICAgdGhpcy5fbWF0ZXJpYWwuZGlzcG9zZSgpOworICAgICAg
ICB0aGlzLl9zY2VuZS5vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMu
X29uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIpOworICAgICAgICBfc3VwZXIucHJvdG90eXBl
LmRpc3Bvc2UuY2FsbCh0aGlzLCBkb05vdFJlY3Vyc2UsIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1
cmVzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmluZSB0aGUgdmlkZW8gc291cmNlIGFz
IGEgTW9ub3Njb3BpYyBwYW5vcmFtaWMgMzYwIHZpZGVvLgorICAgICAqLworICAgIFZpZGVvRG9t
ZS5NT0RFX01PTk9TQ09QSUMgPSAwOworICAgIC8qKgorICAgICAqIERlZmluZSB0aGUgdmlkZW8g
c291cmNlIGFzIGEgU3RlcmVvc2NvcGljIFRvcEJvdHRvbS9PdmVyVW5kZXIgcGFub3JhbWljIDM2
MCB2aWRlby4KKyAgICAgKi8KKyAgICBWaWRlb0RvbWUuTU9ERV9UT1BCT1RUT00gPSAxOworICAg
IC8qKgorICAgICAqIERlZmluZSB0aGUgdmlkZW8gc291cmNlIGFzIGEgU3RlcmVvc2NvcGljIFNp
ZGUgYnkgU2lkZSBwYW5vcmFtaWMgMzYwIHZpZGVvLgorICAgICAqLworICAgIFZpZGVvRG9tZS5N
T0RFX1NJREVCWVNJREUgPSAyOworICAgIHJldHVybiBWaWRlb0RvbWU7Cit9KF9NZXNoZXNfdHJh
bnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUcmFuc2Zvcm1Ob2RlIl0p
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9JbnB1dHMvc2NlbmUuaW5wdXRNYW5hZ2Vy
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9JbnB1dHMvc2NlbmUuaW5wdXRNYW5hZ2VyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IElucHV0TWFu
YWdlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbnB1dE1hbmFnZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIElucHV0TWFuYWdlcjsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FdmVudHMvcG9pbnRlckV2ZW50cyAqLyAi
Li9FdmVudHMvcG9pbnRlckV2ZW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9B
Y3Rpb25zX2Fic3RyYWN0QWN0aW9uTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQWN0aW9ucy9hYnN0cmFjdEFjdGlvbk1hbmFn
ZXIgKi8gIi4vQWN0aW9ucy9hYnN0cmFjdEFjdGlvbk1hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIu
L01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9BY3Rpb25zX2FjdGlvbkV2ZW50X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9BY3Rp
b25zL2FjdGlvbkV2ZW50ICovICIuL0FjdGlvbnMvYWN0aW9uRXZlbnQudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0V2ZW50c19rZXlib2FyZEV2ZW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
RXZlbnRzL2tleWJvYXJkRXZlbnRzICovICIuL0V2ZW50cy9rZXlib2FyZEV2ZW50cy50cyIpOwor
CisKKworCisKKworCisvKiogQGhpZGRlbiAqLwordmFyIF9DbGlja0luZm8gPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gX0NsaWNrSW5mbygpIHsKKyAgICAgICAg
dGhpcy5fc2luZ2xlQ2xpY2sgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZG91YmxlQ2xpY2sgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5faGFzU3dpcGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2ln
bm9yZSA9IGZhbHNlOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX0NsaWNrSW5m
by5wcm90b3R5cGUsICJzaW5nbGVDbGljayIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2luZ2xlQ2xpY2s7CisgICAgICAgIH0sCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAgIHRoaXMuX3NpbmdsZUNsaWNrID0g
YjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9DbGlja0lu
Zm8ucHJvdG90eXBlLCAiZG91YmxlQ2xpY2siLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RvdWJsZUNsaWNrOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uIChiKSB7CisgICAgICAgICAgICB0aGlzLl9kb3VibGVDbGljayA9
IGI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfQ2xpY2tJ
bmZvLnByb3RvdHlwZSwgImhhc1N3aXBlZCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzU3dpcGVkOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uIChiKSB7CisgICAgICAgICAgICB0aGlzLl9oYXNTd2lwZWQgPSBiOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX0NsaWNrSW5mby5w
cm90b3R5cGUsICJpZ25vcmUiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2lnbm9yZTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAoYikgeworICAgICAgICAgICAgdGhpcy5faWdub3JlID0gYjsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgcmV0dXJuIF9DbGlja0luZm87Cit9KCkpOworLyoqCisgKiBDbGFzcyB1c2VkIHRv
IG1hbmFnZSBhbGwgaW5wdXRzIGZvciB0aGUgc2NlbmUuCisgKi8KK3ZhciBJbnB1dE1hbmFnZXIg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBh
IG5ldyBJbnB1dE1hbmFnZXIKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGlu
ZyBzY2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIElucHV0TWFuYWdlcihzY2VuZSkgeworICAg
ICAgICAvLyBQb2ludGVycworICAgICAgICB0aGlzLl93aGVlbEV2ZW50TmFtZSA9ICIiOworICAg
ICAgICB0aGlzLl9tZXNoUGlja1Byb2NlZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY3VycmVu
dFBpY2tSZXN1bHQgPSBudWxsOworICAgICAgICB0aGlzLl9wcmV2aW91c1BpY2tSZXN1bHQgPSBu
dWxsOworICAgICAgICB0aGlzLl90b3RhbFBvaW50ZXJzUHJlc3NlZCA9IDA7CisgICAgICAgIHRo
aXMuX2RvdWJsZUNsaWNrT2NjdXJlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9wb2ludGVyWCA9
IDA7CisgICAgICAgIHRoaXMuX3BvaW50ZXJZID0gMDsKKyAgICAgICAgdGhpcy5fc3RhcnRpbmdQ
b2ludGVyUG9zaXRpb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlZlY3RvcjIiXSgwLCAwKTsKKyAgICAgICAgdGhpcy5fcHJldmlvdXNTdGFy
dGluZ1BvaW50ZXJQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVjdG9yMiJdKDAsIDApOworICAgICAgICB0aGlzLl9zdGFydGlu
Z1BvaW50ZXJUaW1lID0gMDsKKyAgICAgICAgdGhpcy5fcHJldmlvdXNTdGFydGluZ1BvaW50ZXJU
aW1lID0gMDsKKyAgICAgICAgdGhpcy5fcG9pbnRlckNhcHR1cmVzID0ge307CisgICAgICAgIHRo
aXMuX3NjZW5lID0gc2NlbmU7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnB1
dE1hbmFnZXIucHJvdG90eXBlLCAibWVzaFVuZGVyUG9pbnRlciIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICogR2V0cyB0aGUgbWVzaCB0aGF0IGlzIGN1cnJlbnRseSB1bmRlciB0aGUgcG9pbnRl
cgorICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9wb2ludGVyT3Zlck1lc2g7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShJbnB1dE1hbmFnZXIucHJvdG90eXBlLCAidW5UcmFuc2xhdGVkUG9p
bnRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBvaW50ZXIgY29vcmRp
bmF0ZXMgaW4gMkQgd2l0aG91dCBhbnkgdHJhbnNsYXRpb24gKGllLiBzdHJhaWdodCBvdXQgb2Yg
dGhlIHBvaW50ZXIgZXZlbnQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjIiXSh0aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWCwg
dGhpcy5fdW5UcmFuc2xhdGVkUG9pbnRlclkpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoSW5wdXRNYW5hZ2VyLnByb3RvdHlwZSwgInBvaW50ZXJYIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBjdXJyZW50IG9uLXNjcmVl
biBYIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb2ludGVyWDsKKyAgICAgICAg
fSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3Bv
aW50ZXJYID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShJbnB1dE1hbmFnZXIucHJvdG90eXBlLCAicG9pbnRlclkiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGN1cnJlbnQgb24tc2NyZWVuIFkgcG9zaXRpb24g
b2YgdGhlIHBvaW50ZXIKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BvaW50ZXJZOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fcG9pbnRlclkgPSB2YWx1
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5fdXBkYXRl
UG9pbnRlclBvc2l0aW9uID0gZnVuY3Rpb24gKGV2dCkgeworICAgICAgICB2YXIgY2FudmFzUmVj
dCA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldFJlbmRlcmluZ0NhbnZhc0NsaWVudFJlY3Qo
KTsKKyAgICAgICAgaWYgKCFjYW52YXNSZWN0KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fcG9pbnRlclggPSBldnQuY2xpZW50WCAtIGNhbnZhc1JlY3Qu
bGVmdDsKKyAgICAgICAgdGhpcy5fcG9pbnRlclkgPSBldnQuY2xpZW50WSAtIGNhbnZhc1JlY3Qu
dG9wOworICAgICAgICB0aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWCA9IHRoaXMuX3BvaW50ZXJY
OworICAgICAgICB0aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWSA9IHRoaXMuX3BvaW50ZXJZOwor
ICAgIH07CisgICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5fcHJvY2Vzc1BvaW50ZXJNb3ZlID0g
ZnVuY3Rpb24gKHBpY2tSZXN1bHQsIGV2dCkgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9z
Y2VuZTsKKyAgICAgICAgdmFyIGNhbnZhcyA9IHNjZW5lLmdldEVuZ2luZSgpLmdldFJlbmRlcmlu
Z0NhbnZhcygpOworICAgICAgICBpZiAoIWNhbnZhcykgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGNhbnZhcy50YWJJbmRleCA9IDE7CisgICAgICAgIC8vIFJlc3Rv
cmUgcG9pbnRlcgorICAgICAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gc2NlbmUuZGVmYXVsdEN1
cnNvcjsKKyAgICAgICAgdmFyIGlzTWVzaFBpY2tlZCA9IChwaWNrUmVzdWx0ICYmIHBpY2tSZXN1
bHQuaGl0ICYmIHBpY2tSZXN1bHQucGlja2VkTWVzaCkgPyB0cnVlIDogZmFsc2U7CisgICAgICAg
IGlmIChpc01lc2hQaWNrZWQpIHsKKyAgICAgICAgICAgIHNjZW5lLnNldFBvaW50ZXJPdmVyTWVz
aChwaWNrUmVzdWx0LnBpY2tlZE1lc2gpOworICAgICAgICAgICAgaWYgKHRoaXMuX3BvaW50ZXJP
dmVyTWVzaCAmJiB0aGlzLl9wb2ludGVyT3Zlck1lc2guYWN0aW9uTWFuYWdlciAmJiB0aGlzLl9w
b2ludGVyT3Zlck1lc2guYWN0aW9uTWFuYWdlci5oYXNQb2ludGVyVHJpZ2dlcnMpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fcG9pbnRlck92ZXJNZXNoLmFjdGlvbk1hbmFnZXIuaG92ZXJD
dXJzb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IHRoaXMu
X3BvaW50ZXJPdmVyTWVzaC5hY3Rpb25NYW5hZ2VyLmhvdmVyQ3Vyc29yOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FudmFz
LnN0eWxlLmN1cnNvciA9IHNjZW5lLmhvdmVyQ3Vyc29yOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNjZW5l
LnNldFBvaW50ZXJPdmVyTWVzaChudWxsKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBf
aSA9IDAsIF9hID0gc2NlbmUuX3BvaW50ZXJNb3ZlU3RhZ2U7IF9pIDwgX2EubGVuZ3RoOyBfaSsr
KSB7CisgICAgICAgICAgICB2YXIgc3RlcCA9IF9hW19pXTsKKyAgICAgICAgICAgIHBpY2tSZXN1
bHQgPSBzdGVwLmFjdGlvbih0aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWCwgdGhpcy5fdW5UcmFu
c2xhdGVkUG9pbnRlclksIHBpY2tSZXN1bHQsIGlzTWVzaFBpY2tlZCwgY2FudmFzKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocGlja1Jlc3VsdCkgeworICAgICAgICAgICAgdmFyIHR5cGUgPSBl
dnQudHlwZSA9PT0gdGhpcy5fd2hlZWxFdmVudE5hbWUgPyBfRXZlbnRzX3BvaW50ZXJFdmVudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVS
V0hFRUwgOiBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRTsKKyAgICAgICAgICAgIGlmIChzY2Vu
ZS5vblBvaW50ZXJNb3ZlKSB7CisgICAgICAgICAgICAgICAgc2NlbmUub25Qb2ludGVyTW92ZShl
dnQsIHBpY2tSZXN1bHQsIHR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNj
ZW5lLm9uUG9pbnRlck9ic2VydmFibGUuaGFzT2JzZXJ2ZXJzKCkpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcGkgPSBuZXcgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlBvaW50ZXJJbmZvIl0odHlwZSwgZXZ0LCBwaWNrUmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9zZXRSYXlPblBvaW50ZXJJbmZvKHBpKTsKKyAgICAgICAgICAgICAgICBz
Y2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhwaSwgdHlwZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8vIFBvaW50ZXJzIGhhbmRsaW5nCisg
ICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5fc2V0UmF5T25Qb2ludGVySW5mbyA9IGZ1bmN0aW9u
IChwb2ludGVySW5mbykgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTsKKyAgICAg
ICAgaWYgKHBvaW50ZXJJbmZvLnBpY2tJbmZvICYmICFwb2ludGVySW5mby5waWNrSW5mby5fcGlj
a2luZ1VuYXZhaWxhYmxlKSB7CisgICAgICAgICAgICBpZiAoIXBvaW50ZXJJbmZvLnBpY2tJbmZv
LnJheSkgeworICAgICAgICAgICAgICAgIHBvaW50ZXJJbmZvLnBpY2tJbmZvLnJheSA9IHNjZW5l
LmNyZWF0ZVBpY2tpbmdSYXkocG9pbnRlckluZm8uZXZlbnQub2Zmc2V0WCwgcG9pbnRlckluZm8u
ZXZlbnQub2Zmc2V0WSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIk1hdHJpeCJdLklkZW50aXR5KCksIHNjZW5lLmFjdGl2ZUNhbWVyYSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIElucHV0TWFuYWdlci5wcm90b3R5cGUuX2No
ZWNrUHJlUG9pbnRlck9ic2VydmFibGUgPSBmdW5jdGlvbiAocGlja1Jlc3VsdCwgZXZ0LCB0eXBl
KSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3NjZW5lOworICAgICAgICB2YXIgcGkgPSBu
ZXcgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBv
aW50ZXJJbmZvUHJlIl0odHlwZSwgZXZ0LCB0aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWCwgdGhp
cy5fdW5UcmFuc2xhdGVkUG9pbnRlclkpOworICAgICAgICBpZiAocGlja1Jlc3VsdCkgeworICAg
ICAgICAgICAgcGkucmF5ID0gcGlja1Jlc3VsdC5yYXk7CisgICAgICAgIH0KKyAgICAgICAgc2Nl
bmUub25QcmVQb2ludGVyT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMocGksIHR5cGUpOworICAg
ICAgICBpZiAocGkuc2tpcE9uUG9pbnRlck9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVc2UgdGhpcyBtZXRob2Qg
dG8gc2ltdWxhdGUgYSBwb2ludGVyIG1vdmUgb24gYSBtZXNoCisgICAgICogVGhlIHBpY2tSZXN1
bHQgcGFyYW1ldGVyIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGEgc2NlbmUucGljayBvciBzY2VuZS5w
aWNrV2l0aFJheQorICAgICAqIEBwYXJhbSBwaWNrUmVzdWx0IHBpY2tpbmdJbmZvIG9mIHRoZSBv
YmplY3Qgd2lzaGVkIHRvIHNpbXVsYXRlIHBvaW50ZXIgZXZlbnQgb24KKyAgICAgKiBAcGFyYW0g
cG9pbnRlckV2ZW50SW5pdCBwb2ludGVyIGV2ZW50IHN0YXRlIHRvIGJlIHVzZWQgd2hlbiBzaW11
bGF0aW5nIHRoZSBwb2ludGVyIGV2ZW50IChlZy4gcG9pbnRlciBpZCBmb3IgbXVsdGl0b3VjaCkK
KyAgICAgKi8KKyAgICBJbnB1dE1hbmFnZXIucHJvdG90eXBlLnNpbXVsYXRlUG9pbnRlck1vdmUg
PSBmdW5jdGlvbiAocGlja1Jlc3VsdCwgcG9pbnRlckV2ZW50SW5pdCkgeworICAgICAgICB2YXIg
ZXZ0ID0gbmV3IFBvaW50ZXJFdmVudCgicG9pbnRlcm1vdmUiLCBwb2ludGVyRXZlbnRJbml0KTsK
KyAgICAgICAgaWYgKHRoaXMuX2NoZWNrUHJlUG9pbnRlck9ic2VydmFibGUocGlja1Jlc3VsdCwg
ZXZ0LCBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
UG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRSkpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9wcm9jZXNzUG9pbnRlck1vdmUocGlja1Jlc3VsdCwg
ZXZ0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVzZSB0aGlzIG1ldGhvZCB0byBzaW11bGF0
ZSBhIHBvaW50ZXIgZG93biBvbiBhIG1lc2gKKyAgICAgKiBUaGUgcGlja1Jlc3VsdCBwYXJhbWV0
ZXIgY2FuIGJlIG9idGFpbmVkIGZyb20gYSBzY2VuZS5waWNrIG9yIHNjZW5lLnBpY2tXaXRoUmF5
CisgICAgICogQHBhcmFtIHBpY2tSZXN1bHQgcGlja2luZ0luZm8gb2YgdGhlIG9iamVjdCB3aXNo
ZWQgdG8gc2ltdWxhdGUgcG9pbnRlciBldmVudCBvbgorICAgICAqIEBwYXJhbSBwb2ludGVyRXZl
bnRJbml0IHBvaW50ZXIgZXZlbnQgc3RhdGUgdG8gYmUgdXNlZCB3aGVuIHNpbXVsYXRpbmcgdGhl
IHBvaW50ZXIgZXZlbnQgKGVnLiBwb2ludGVyIGlkIGZvciBtdWx0aXRvdWNoKQorICAgICAqLwor
ICAgIElucHV0TWFuYWdlci5wcm90b3R5cGUuc2ltdWxhdGVQb2ludGVyRG93biA9IGZ1bmN0aW9u
IChwaWNrUmVzdWx0LCBwb2ludGVyRXZlbnRJbml0KSB7CisgICAgICAgIHZhciBldnQgPSBuZXcg
UG9pbnRlckV2ZW50KCJwb2ludGVyZG93biIsIHBvaW50ZXJFdmVudEluaXQpOworICAgICAgICBp
ZiAodGhpcy5fY2hlY2tQcmVQb2ludGVyT2JzZXJ2YWJsZShwaWNrUmVzdWx0LCBldnQsIF9FdmVu
dHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVyRXZl
bnRUeXBlcyJdLlBPSU5URVJET1dOKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX3Byb2Nlc3NQb2ludGVyRG93bihwaWNrUmVzdWx0LCBldnQpOworICAg
IH07CisgICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5fcHJvY2Vzc1BvaW50ZXJEb3duID0gZnVu
Y3Rpb24gKHBpY2tSZXN1bHQsIGV2dCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTsKKyAgICAgICAgaWYgKHBpY2tSZXN1bHQgJiYg
cGlja1Jlc3VsdC5oaXQgJiYgcGlja1Jlc3VsdC5waWNrZWRNZXNoKSB7CisgICAgICAgICAgICB0
aGlzLl9waWNrZWREb3duTWVzaCA9IHBpY2tSZXN1bHQucGlja2VkTWVzaDsKKyAgICAgICAgICAg
IHZhciBhY3Rpb25NYW5hZ2VyID0gcGlja1Jlc3VsdC5waWNrZWRNZXNoLl9nZXRBY3Rpb25NYW5h
Z2VyRm9yVHJpZ2dlcigpOworICAgICAgICAgICAgaWYgKGFjdGlvbk1hbmFnZXIpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYWN0aW9uTWFuYWdlci5oYXNQaWNrVHJpZ2dlcnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYWN0aW9uTWFuYWdlci5wcm9jZXNzVHJpZ2dlcihfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uUGlj
a0Rvd25UcmlnZ2VyLCBfQWN0aW9uc19hY3Rpb25FdmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJBY3Rpb25FdmVudCJdLkNyZWF0ZU5ldyhwaWNrUmVzdWx0LnBpY2tlZE1lc2gsIGV2
dCkpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2dC5idXR0b24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rp
b25NYW5hZ2VyLnByb2Nlc3NUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5BQ1RJT05fT25MZWZ0UGlja1RyaWdnZXIsIF9B
Y3Rpb25zX2FjdGlvbkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFjdGlvbkV2
ZW50Il0uQ3JlYXRlTmV3KHBpY2tSZXN1bHQucGlja2VkTWVzaCwgZXZ0KSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uTWFuYWdlci5wcm9jZXNzVHJpZ2dl
cihfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3Rh
bnRzIl0uQUNUSU9OX09uQ2VudGVyUGlja1RyaWdnZXIsIF9BY3Rpb25zX2FjdGlvbkV2ZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFjdGlvbkV2ZW50Il0uQ3JlYXRlTmV3KHBpY2tS
ZXN1bHQucGlja2VkTWVzaCwgZXZ0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWN0aW9uTWFuYWdlci5wcm9jZXNzVHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uUmlnaHRQ
aWNrVHJpZ2dlciwgX0FjdGlvbnNfYWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siQWN0aW9uRXZlbnQiXS5DcmVhdGVOZXcocGlja1Jlc3VsdC5waWNrZWRNZXNoLCBldnQp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYWN0aW9uTWFuYWdl
ci5oYXNTcGVjaWZpY1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkNvbnN0YW50cyJdLkFDVElPTl9PbkxvbmdQcmVzc1RyaWdnZXIpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBwaWNrUmVzdWx0ID0gc2NlbmUucGljayhfdGhpcy5fdW5U
cmFuc2xhdGVkUG9pbnRlclgsIF90aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWSwgZnVuY3Rpb24g
KG1lc2gpIHsgcmV0dXJuIChtZXNoLmlzUGlja2FibGUgJiYgbWVzaC5pc1Zpc2libGUgJiYgbWVz
aC5pc1JlYWR5KCkgJiYgbWVzaC5hY3Rpb25NYW5hZ2VyICYmIG1lc2guYWN0aW9uTWFuYWdlci5o
YXNTcGVjaWZpY1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIkNvbnN0YW50cyJdLkFDVElPTl9PbkxvbmdQcmVzc1RyaWdnZXIpICYmIG1lc2gg
PT0gX3RoaXMuX3BpY2tlZERvd25NZXNoKTsgfSwgZmFsc2UsIHNjZW5lLmNhbWVyYVRvVXNlRm9y
UG9pbnRlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQgJiYgcGlj
a1Jlc3VsdC5oaXQgJiYgcGlja1Jlc3VsdC5waWNrZWRNZXNoICYmIGFjdGlvbk1hbmFnZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX3RvdGFsUG9pbnRlcnNQcmVz
c2VkICE9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRGF0ZS5ub3co
KSAtIF90aGlzLl9zdGFydGluZ1BvaW50ZXJUaW1lKSA+IElucHV0TWFuYWdlci5Mb25nUHJlc3NE
ZWxheSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIV90aGlzLl9pc1BvaW50
ZXJTd2lwaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N0
YXJ0aW5nUG9pbnRlclRpbWUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
Y3Rpb25NYW5hZ2VyLnByb2Nlc3NUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5BQ1RJT05fT25Mb25nUHJlc3NUcmlnZ2Vy
LCBfQWN0aW9uc19hY3Rpb25FdmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBY3Rp
b25FdmVudCJdLkNyZWF0ZU5ldyhwaWNrUmVzdWx0LnBpY2tlZE1lc2gsIGV2dCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfSwgSW5wdXRNYW5hZ2VyLkxvbmdQcmVzc0RlbGF5KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gc2NlbmUuX3BvaW50ZXJEb3duU3RhZ2U7IF9p
IDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBfYVtfaV07
CisgICAgICAgICAgICAgICAgcGlja1Jlc3VsdCA9IHN0ZXAuYWN0aW9uKHRoaXMuX3VuVHJhbnNs
YXRlZFBvaW50ZXJYLCB0aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWSwgcGlja1Jlc3VsdCwgZXZ0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGlja1Jlc3VsdCkgewor
ICAgICAgICAgICAgdmFyIHR5cGUgPSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9XTjsKKyAgICAg
ICAgICAgIGlmIChzY2VuZS5vblBvaW50ZXJEb3duKSB7CisgICAgICAgICAgICAgICAgc2NlbmUu
b25Qb2ludGVyRG93bihldnQsIHBpY2tSZXN1bHQsIHR5cGUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHNjZW5lLm9uUG9pbnRlck9ic2VydmFibGUuaGFzT2JzZXJ2ZXJzKCkpIHsK
KyAgICAgICAgICAgICAgICB2YXIgcGkgPSBuZXcgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJJbmZvIl0odHlwZSwgZXZ0LCBwaWNrUmVz
dWx0KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zZXRSYXlPblBvaW50ZXJJbmZvKHBpKTsKKyAg
ICAgICAgICAgICAgICBzY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhw
aSwgdHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlk
ZGVuICovCisgICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5faXNQb2ludGVyU3dpcGluZyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuX3N0YXJ0aW5nUG9pbnRl
clBvc2l0aW9uLnggLSB0aGlzLl9wb2ludGVyWCkgPiBJbnB1dE1hbmFnZXIuRHJhZ01vdmVtZW50
VGhyZXNob2xkIHx8CisgICAgICAgICAgICBNYXRoLmFicyh0aGlzLl9zdGFydGluZ1BvaW50ZXJQ
b3NpdGlvbi55IC0gdGhpcy5fcG9pbnRlclkpID4gSW5wdXRNYW5hZ2VyLkRyYWdNb3ZlbWVudFRo
cmVzaG9sZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVzZSB0aGlzIG1ldGhvZCB0byBzaW11
bGF0ZSBhIHBvaW50ZXIgdXAgb24gYSBtZXNoCisgICAgICogVGhlIHBpY2tSZXN1bHQgcGFyYW1l
dGVyIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGEgc2NlbmUucGljayBvciBzY2VuZS5waWNrV2l0aFJh
eQorICAgICAqIEBwYXJhbSBwaWNrUmVzdWx0IHBpY2tpbmdJbmZvIG9mIHRoZSBvYmplY3Qgd2lz
aGVkIHRvIHNpbXVsYXRlIHBvaW50ZXIgZXZlbnQgb24KKyAgICAgKiBAcGFyYW0gcG9pbnRlckV2
ZW50SW5pdCBwb2ludGVyIGV2ZW50IHN0YXRlIHRvIGJlIHVzZWQgd2hlbiBzaW11bGF0aW5nIHRo
ZSBwb2ludGVyIGV2ZW50IChlZy4gcG9pbnRlciBpZCBmb3IgbXVsdGl0b3VjaCkKKyAgICAgKiBA
cGFyYW0gZG91YmxlVGFwIGluZGljYXRlcyB0aGF0IHRoZSBwb2ludGVyIHVwIGV2ZW50IHNob3Vs
ZCBiZSBjb25zaWRlcmVkIGFzIHBhcnQgb2YgYSBkb3VibGUgY2xpY2sgKGZhbHNlIGJ5IGRlZmF1
bHQpCisgICAgICovCisgICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5zaW11bGF0ZVBvaW50ZXJV
cCA9IGZ1bmN0aW9uIChwaWNrUmVzdWx0LCBwb2ludGVyRXZlbnRJbml0LCBkb3VibGVUYXApIHsK
KyAgICAgICAgdmFyIGV2dCA9IG5ldyBQb2ludGVyRXZlbnQoInBvaW50ZXJ1cCIsIHBvaW50ZXJF
dmVudEluaXQpOworICAgICAgICB2YXIgY2xpY2tJbmZvID0gbmV3IF9DbGlja0luZm8oKTsKKyAg
ICAgICAgaWYgKGRvdWJsZVRhcCkgeworICAgICAgICAgICAgY2xpY2tJbmZvLmRvdWJsZUNsaWNr
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNsaWNrSW5m
by5zaW5nbGVDbGljayA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2NoZWNr
UHJlUG9pbnRlck9ic2VydmFibGUocGlja1Jlc3VsdCwgZXZ0LCBfRXZlbnRzX3BvaW50ZXJFdmVu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lO
VEVSVVApKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
cHJvY2Vzc1BvaW50ZXJVcChwaWNrUmVzdWx0LCBldnQsIGNsaWNrSW5mbyk7CisgICAgfTsKKyAg
ICBJbnB1dE1hbmFnZXIucHJvdG90eXBlLl9wcm9jZXNzUG9pbnRlclVwID0gZnVuY3Rpb24gKHBp
Y2tSZXN1bHQsIGV2dCwgY2xpY2tJbmZvKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3Nj
ZW5lOworICAgICAgICBpZiAocGlja1Jlc3VsdCAmJiBwaWNrUmVzdWx0ICYmIHBpY2tSZXN1bHQu
cGlja2VkTWVzaCkgeworICAgICAgICAgICAgdGhpcy5fcGlja2VkVXBNZXNoID0gcGlja1Jlc3Vs
dC5waWNrZWRNZXNoOworICAgICAgICAgICAgaWYgKHRoaXMuX3BpY2tlZERvd25NZXNoID09PSB0
aGlzLl9waWNrZWRVcE1lc2gpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2NlbmUub25Qb2ludGVy
UGljaykgeworICAgICAgICAgICAgICAgICAgICBzY2VuZS5vblBvaW50ZXJQaWNrKGV2dCwgcGlj
a1Jlc3VsdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjbGlja0lu
Zm8uc2luZ2xlQ2xpY2sgJiYgIWNsaWNrSW5mby5pZ25vcmUgJiYgc2NlbmUub25Qb2ludGVyT2Jz
ZXJ2YWJsZS5oYXNPYnNlcnZlcnMoKSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZV8x
ID0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBv
aW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUlBJQ0s7CisgICAgICAgICAgICAgICAgICAgIHZhciBw
aSA9IG5ldyBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUG9pbnRlckluZm8iXSh0eXBlXzEsIGV2dCwgcGlja1Jlc3VsdCk7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX3NldFJheU9uUG9pbnRlckluZm8ocGkpOworICAgICAgICAgICAgICAgICAg
ICBzY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhwaSwgdHlwZV8xKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYWN0aW9u
TWFuYWdlciA9IHBpY2tSZXN1bHQucGlja2VkTWVzaC5fZ2V0QWN0aW9uTWFuYWdlckZvclRyaWdn
ZXIoKTsKKyAgICAgICAgICAgIGlmIChhY3Rpb25NYW5hZ2VyICYmICFjbGlja0luZm8uaWdub3Jl
KSB7CisgICAgICAgICAgICAgICAgYWN0aW9uTWFuYWdlci5wcm9jZXNzVHJpZ2dlcihfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNU
SU9OX09uUGlja1VwVHJpZ2dlciwgX0FjdGlvbnNfYWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siQWN0aW9uRXZlbnQiXS5DcmVhdGVOZXcocGlja1Jlc3VsdC5waWNrZWRN
ZXNoLCBldnQpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNsaWNrSW5mby5oYXNTd2lwZWQgJiYg
Y2xpY2tJbmZvLnNpbmdsZUNsaWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdGlvbk1hbmFn
ZXIucHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBpY2tUcmlnZ2VyLCBfQWN0aW9uc19hY3Rp
b25FdmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBY3Rpb25FdmVudCJdLkNyZWF0
ZU5ldyhwaWNrUmVzdWx0LnBpY2tlZE1lc2gsIGV2dCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB2YXIgZG91YmxlQ2xpY2tBY3Rpb25NYW5hZ2VyID0gcGlja1Jlc3VsdC5w
aWNrZWRNZXNoLl9nZXRBY3Rpb25NYW5hZ2VyRm9yVHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uRG91Ymxl
UGlja1RyaWdnZXIpOworICAgICAgICAgICAgICAgIGlmIChjbGlja0luZm8uZG91YmxlQ2xpY2sg
JiYgZG91YmxlQ2xpY2tBY3Rpb25NYW5hZ2VyKSB7CisgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZUNsaWNrQWN0aW9uTWFuYWdlci5wcm9jZXNzVHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uRG91YmxlUGlj
a1RyaWdnZXIsIF9BY3Rpb25zX2FjdGlvbkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIkFjdGlvbkV2ZW50Il0uQ3JlYXRlTmV3KHBpY2tSZXN1bHQucGlja2VkTWVzaCwgZXZ0KSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgaWYgKCFjbGlja0luZm8uaWdub3JlKSB7CisgICAgICAgICAgICAg
ICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHNjZW5lLl9wb2ludGVyVXBTdGFnZTsgX2kgPCBfYS5s
ZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBfYVtfaV07Cisg
ICAgICAgICAgICAgICAgICAgIHBpY2tSZXN1bHQgPSBzdGVwLmFjdGlvbih0aGlzLl91blRyYW5z
bGF0ZWRQb2ludGVyWCwgdGhpcy5fdW5UcmFuc2xhdGVkUG9pbnRlclksIHBpY2tSZXN1bHQsIGV2
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9waWNrZWREb3duTWVzaCAmJiB0aGlzLl9waWNrZWREb3duTWVzaCAhPT0gdGhp
cy5fcGlja2VkVXBNZXNoKSB7CisgICAgICAgICAgICB2YXIgcGlja2VkRG93bkFjdGlvbk1hbmFn
ZXIgPSB0aGlzLl9waWNrZWREb3duTWVzaC5fZ2V0QWN0aW9uTWFuYWdlckZvclRyaWdnZXIoX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJd
LkFDVElPTl9PblBpY2tPdXRUcmlnZ2VyKTsKKyAgICAgICAgICAgIGlmIChwaWNrZWREb3duQWN0
aW9uTWFuYWdlcikgeworICAgICAgICAgICAgICAgIHBpY2tlZERvd25BY3Rpb25NYW5hZ2VyLnBy
b2Nlc3NUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJDb25zdGFudHMiXS5BQ1RJT05fT25QaWNrT3V0VHJpZ2dlciwgX0FjdGlvbnNfYWN0aW9u
RXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQWN0aW9uRXZlbnQiXS5DcmVhdGVO
ZXcodGhpcy5fcGlja2VkRG93bk1lc2gsIGV2dCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHZhciB0eXBlID0gMDsKKyAgICAgICAgaWYgKHNjZW5lLm9uUG9pbnRlck9ic2Vy
dmFibGUuaGFzT2JzZXJ2ZXJzKCkpIHsKKyAgICAgICAgICAgIGlmICghY2xpY2tJbmZvLmlnbm9y
ZSAmJiAhY2xpY2tJbmZvLmhhc1N3aXBlZCkgeworICAgICAgICAgICAgICAgIGlmIChjbGlja0lu
Zm8uc2luZ2xlQ2xpY2sgJiYgc2NlbmUub25Qb2ludGVyT2JzZXJ2YWJsZS5oYXNTcGVjaWZpY01h
c2soX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBv
aW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUlRBUCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQ
b2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJUQVA7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGNsaWNrSW5mby5kb3VibGVDbGljayAmJiBzY2VuZS5vblBvaW50
ZXJPYnNlcnZhYmxlLmhhc1NwZWNpZmljTWFzayhfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9VQkxF
VEFQKSkgeworICAgICAgICAgICAgICAgICAgICB0eXBlID0gX0V2ZW50c19wb2ludGVyRXZlbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRF
UkRPVUJMRVRBUDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHR5cGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBpID0gbmV3IF9FdmVudHNfcG9pbnRlckV2ZW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVySW5mbyJdKHR5cGUsIGV2dCwg
cGlja1Jlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFJheU9uUG9pbnRlcklu
Zm8ocGkpOworICAgICAgICAgICAgICAgICAgICBzY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLm5v
dGlmeU9ic2VydmVycyhwaSwgdHlwZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCFjbGlja0luZm8uaWdub3JlKSB7CisgICAgICAgICAgICAgICAg
dHlwZSA9IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJVUDsKKyAgICAgICAgICAgICAgICB2YXIgcGkg
PSBuZXcgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlBvaW50ZXJJbmZvIl0odHlwZSwgZXZ0LCBwaWNrUmVzdWx0KTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9zZXRSYXlPblBvaW50ZXJJbmZvKHBpKTsKKyAgICAgICAgICAgICAgICBzY2VuZS5vblBv
aW50ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhwaSwgdHlwZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjZW5lLm9uUG9pbnRlclVwICYmICFjbGlja0luZm8u
aWdub3JlKSB7CisgICAgICAgICAgICBzY2VuZS5vblBvaW50ZXJVcChldnQsIHBpY2tSZXN1bHQs
IHR5cGUpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVh
biBpbmRpY2F0aW5nIGlmIHRoZSBjdXJyZW50IHBvaW50ZXIgZXZlbnQgaXMgY2FwdHVyZWQgKG1l
YW5pbmcgdGhhdCB0aGUgc2NlbmUgaGFzIGFscmVhZHkgaGFuZGxlZCB0aGUgcG9pbnRlciBkb3du
KQorICAgICAqIEBwYXJhbSBwb2ludGVySWQgZGVmaW5lcyB0aGUgcG9pbnRlciBpZCB0byB1c2Ug
aW4gYSBtdWx0aS10b3VjaCBzY2VuYXJpbyAoMCBieSBkZWZhdWx0KQorICAgICAqIEByZXR1cm5z
IHRydWUgaWYgdGhlIHBvaW50ZXIgd2FzIGNhcHR1cmVkCisgICAgICovCisgICAgSW5wdXRNYW5h
Z2VyLnByb3RvdHlwZS5pc1BvaW50ZXJDYXB0dXJlZCA9IGZ1bmN0aW9uIChwb2ludGVySWQpIHsK
KyAgICAgICAgaWYgKHBvaW50ZXJJZCA9PT0gdm9pZCAwKSB7IHBvaW50ZXJJZCA9IDA7IH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3BvaW50ZXJDYXB0dXJlc1twb2ludGVySWRdOworICAgIH07Cisg
ICAgLyoqCisgICAgKiBBdHRhY2ggZXZlbnRzIHRvIHRoZSBjYW52YXMgKFRvIGhhbmRsZSBhY3Rp
b25NYW5hZ2VycyB0cmlnZ2VycyBhbmQgcmFpc2Ugb25Qb2ludGVyTW92ZSwgb25Qb2ludGVyRG93
biBhbmQgb25Qb2ludGVyVXAKKyAgICAqIEBwYXJhbSBhdHRhY2hVcCBkZWZpbmVzIGlmIHlvdSB3
YW50IHRvIGF0dGFjaCBldmVudHMgdG8gcG9pbnRlcnVwCisgICAgKiBAcGFyYW0gYXR0YWNoRG93
biBkZWZpbmVzIGlmIHlvdSB3YW50IHRvIGF0dGFjaCBldmVudHMgdG8gcG9pbnRlcmRvd24KKyAg
ICAqIEBwYXJhbSBhdHRhY2hNb3ZlIGRlZmluZXMgaWYgeW91IHdhbnQgdG8gYXR0YWNoIGV2ZW50
cyB0byBwb2ludGVybW92ZQorICAgICovCisgICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5hdHRh
Y2hDb250cm9sID0gZnVuY3Rpb24gKGF0dGFjaFVwLCBhdHRhY2hEb3duLCBhdHRhY2hNb3ZlKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChhdHRhY2hVcCA9PT0gdm9p
ZCAwKSB7IGF0dGFjaFVwID0gdHJ1ZTsgfQorICAgICAgICBpZiAoYXR0YWNoRG93biA9PT0gdm9p
ZCAwKSB7IGF0dGFjaERvd24gPSB0cnVlOyB9CisgICAgICAgIGlmIChhdHRhY2hNb3ZlID09PSB2
b2lkIDApIHsgYXR0YWNoTW92ZSA9IHRydWU7IH0KKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5f
c2NlbmU7CisgICAgICAgIHZhciBjYW52YXMgPSBzY2VuZS5nZXRFbmdpbmUoKS5nZXRSZW5kZXJp
bmdDYW52YXMoKTsKKyAgICAgICAgaWYgKCFjYW52YXMpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAg
ICAgIHRoaXMuX2luaXRBY3Rpb25NYW5hZ2VyID0gZnVuY3Rpb24gKGFjdCwgY2xpY2tJbmZvKSB7
CisgICAgICAgICAgICBpZiAoIV90aGlzLl9tZXNoUGlja1Byb2NlZWQpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgcGlja1Jlc3VsdCA9IHNjZW5lLnBpY2soX3RoaXMuX3VuVHJhbnNsYXRlZFBvaW50
ZXJYLCBfdGhpcy5fdW5UcmFuc2xhdGVkUG9pbnRlclksIHNjZW5lLnBvaW50ZXJEb3duUHJlZGlj
YXRlLCBmYWxzZSwgc2NlbmUuY2FtZXJhVG9Vc2VGb3JQb2ludGVycyk7CisgICAgICAgICAgICAg
ICAgX3RoaXMuX2N1cnJlbnRQaWNrUmVzdWx0ID0gcGlja1Jlc3VsdDsKKyAgICAgICAgICAgICAg
ICBpZiAocGlja1Jlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBhY3QgPSAocGlja1Jlc3Vs
dC5oaXQgJiYgcGlja1Jlc3VsdC5waWNrZWRNZXNoKSA/IHBpY2tSZXN1bHQucGlja2VkTWVzaC5f
Z2V0QWN0aW9uTWFuYWdlckZvclRyaWdnZXIoKSA6IG51bGw7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIF90aGlzLl9tZXNoUGlja1Byb2NlZWQgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGFjdDsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5f
ZGVsYXllZFNpbXBsZUNsaWNrID0gZnVuY3Rpb24gKGJ0biwgY2xpY2tJbmZvLCBjYikgeworICAg
ICAgICAgICAgLy8gZG91YmxlIGNsaWNrIGRlbGF5IGlzIG92ZXIgYW5kIHRoYXQgbm8gZG91Ymxl
IGNsaWNrIGhhcyBiZWVuIHJhaXNlZCBzaW5jZSwgb3IgdGhlIDIgY29uc2VjdXRpdmUga2V5cyBw
cmVzc2VkIGFyZSBkaWZmZXJlbnQKKyAgICAgICAgICAgIGlmICgoRGF0ZS5ub3coKSAtIF90aGlz
Ll9wcmV2aW91c1N0YXJ0aW5nUG9pbnRlclRpbWUgPiBJbnB1dE1hbmFnZXIuRG91YmxlQ2xpY2tE
ZWxheSAmJiAhX3RoaXMuX2RvdWJsZUNsaWNrT2NjdXJlZCkgfHwKKyAgICAgICAgICAgICAgICBi
dG4gIT09IF90aGlzLl9wcmV2aW91c0J1dHRvblByZXNzZWQpIHsKKyAgICAgICAgICAgICAgICBf
dGhpcy5fZG91YmxlQ2xpY2tPY2N1cmVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY2xpY2tJ
bmZvLnNpbmdsZUNsaWNrID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjbGlja0luZm8uaWdub3Jl
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY2IoY2xpY2tJbmZvLCBfdGhpcy5fY3VycmVudFBp
Y2tSZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB0aGlzLl9pbml0
Q2xpY2tFdmVudCA9IGZ1bmN0aW9uIChvYnMxLCBvYnMyLCBldnQsIGNiKSB7CisgICAgICAgICAg
ICB2YXIgY2xpY2tJbmZvID0gbmV3IF9DbGlja0luZm8oKTsKKyAgICAgICAgICAgIF90aGlzLl9j
dXJyZW50UGlja1Jlc3VsdCA9IG51bGw7CisgICAgICAgICAgICB2YXIgYWN0ID0gbnVsbDsKKyAg
ICAgICAgICAgIHZhciBjaGVja1BpY2tpbmcgPSBvYnMxLmhhc1NwZWNpZmljTWFzayhfRXZlbnRz
X3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50
VHlwZXMiXS5QT0lOVEVSUElDSykgfHwgb2JzMi5oYXNTcGVjaWZpY01hc2soX0V2ZW50c19wb2lu
dGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJFdmVudFR5cGVz
Il0uUE9JTlRFUlBJQ0spCisgICAgICAgICAgICAgICAgfHwgb2JzMS5oYXNTcGVjaWZpY01hc2so
X0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50
ZXJFdmVudFR5cGVzIl0uUE9JTlRFUlRBUCkgfHwgb2JzMi5oYXNTcGVjaWZpY01hc2soX0V2ZW50
c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJFdmVu
dFR5cGVzIl0uUE9JTlRFUlRBUCkKKyAgICAgICAgICAgICAgICB8fCBvYnMxLmhhc1NwZWNpZmlj
TWFzayhfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
UG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9VQkxFVEFQKSB8fCBvYnMyLmhhc1NwZWNpZmlj
TWFzayhfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
UG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9VQkxFVEFQKTsKKyAgICAgICAgICAgIGlmICgh
Y2hlY2tQaWNraW5nICYmIF9BY3Rpb25zX2Fic3RyYWN0QWN0aW9uTWFuYWdlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdEFjdGlvbk1hbmFnZXIiXSkgeworICAgICAgICAg
ICAgICAgIGFjdCA9IF90aGlzLl9pbml0QWN0aW9uTWFuYWdlcihhY3QsIGNsaWNrSW5mbyk7Cisg
ICAgICAgICAgICAgICAgaWYgKGFjdCkgeworICAgICAgICAgICAgICAgICAgICBjaGVja1BpY2tp
bmcgPSBhY3QuaGFzUGlja1RyaWdnZXJzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBuZWVkVG9JZ25vcmVOZXh0ID0gZmFsc2U7CisgICAgICAgICAg
ICBpZiAoY2hlY2tQaWNraW5nKSB7CisgICAgICAgICAgICAgICAgdmFyIGJ0biA9IGV2dC5idXR0
b247CisgICAgICAgICAgICAgICAgY2xpY2tJbmZvLmhhc1N3aXBlZCA9IF90aGlzLl9pc1BvaW50
ZXJTd2lwaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFjbGlja0luZm8uaGFzU3dpcGVkKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja1NpbmdsZUNsaWNrSW1tZWRpYXRlbHkgPSAh
SW5wdXRNYW5hZ2VyLkV4Y2x1c2l2ZURvdWJsZUNsaWNrTW9kZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjaGVja1NpbmdsZUNsaWNrSW1tZWRpYXRlbHkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNoZWNrU2luZ2xlQ2xpY2tJbW1lZGlhdGVseSA9ICFvYnMxLmhhc1NwZWNpZmljTWFz
ayhfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9p
bnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9VQkxFVEFQKSAmJgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICFvYnMyLmhhc1NwZWNpZmljTWFzayhfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9V
QkxFVEFQKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja1NpbmdsZUNsaWNrSW1t
ZWRpYXRlbHkgJiYgIV9BY3Rpb25zX2Fic3RyYWN0QWN0aW9uTWFuYWdlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdEFjdGlvbk1hbmFnZXIiXS5IYXNTcGVjaWZpY1RyaWdn
ZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0
YW50cyJdLkFDVElPTl9PbkRvdWJsZVBpY2tUcmlnZ2VyKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFjdCA9IF90aGlzLl9pbml0QWN0aW9uTWFuYWdlcihhY3QsIGNsaWNrSW5mbyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGVja1NpbmdsZUNsaWNrSW1tZWRpYXRlbHkgPSAhYWN0Lmhhc1Nw
ZWNpZmljVHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uRG91YmxlUGlja1RyaWdnZXIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tTaW5nbGVDbGlja0lt
bWVkaWF0ZWx5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5nbGUgY2xpY2sgZGV0
ZWN0ZWQgaWYgZG91YmxlIGNsaWNrIGRlbGF5IGlzIG92ZXIgb3IgdHdvIGRpZmZlcmVudCBzdWNj
ZXNzaXZlIGtleXMgcHJlc3NlZCB3aXRob3V0IGV4Y2x1c2l2ZSBkb3VibGUgY2xpY2sgb3Igbm8g
ZG91YmxlIGNsaWNrIHJlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZS5u
b3coKSAtIF90aGlzLl9wcmV2aW91c1N0YXJ0aW5nUG9pbnRlclRpbWUgPiBJbnB1dE1hbmFnZXIu
RG91YmxlQ2xpY2tEZWxheSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0biAhPT0g
X3RoaXMuX3ByZXZpb3VzQnV0dG9uUHJlc3NlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsaWNrSW5mby5zaW5nbGVDbGljayA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2IoY2xpY2tJbmZvLCBfdGhpcy5fY3VycmVudFBpY2tSZXN1bHQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5lZWRUb0lnbm9yZU5leHQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIGF0IGxlYXN0IG9uZSBkb3VibGUgY2xpY2sgaXMgcmVxdWlyZWQgdG8gYmUgY2hlY2sgYW5k
IGV4Y2x1c2l2ZSBkb3VibGUgY2xpY2sgaXMgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdGhhdCBubyBkb3VibGUgY2xp
Y2sgaGFzIGJlZW4gcmFpc2VkIGR1cmluZyB0aGUgZG91YmxlIGNsaWNrIGRlbGF5CisgICAgICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5fcHJldmlvdXNEZWxheWVkU2ltcGxlQ2xpY2tUaW1lb3V0
ID0gX3RoaXMuX2RlbGF5ZWRTaW1wbGVDbGlja1RpbWVvdXQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICBfdGhpcy5fZGVsYXllZFNpbXBsZUNsaWNrVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0
KF90aGlzLl9kZWxheWVkU2ltcGxlQ2xpY2suYmluZChfdGhpcywgYnRuLCBjbGlja0luZm8sIGNi
KSwgSW5wdXRNYW5hZ2VyLkRvdWJsZUNsaWNrRGVsYXkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja0RvdWJsZUNsaWNrID0gb2JzMS5oYXNTcGVj
aWZpY01hc2soX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPVUJMRVRBUCkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG9iczIuaGFzU3BlY2lmaWNNYXNrKF9FdmVudHNfcG9pbnRlckV2ZW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJE
T1VCTEVUQVApOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrRG91YmxlQ2xpY2sgJiYg
X0FjdGlvbnNfYWJzdHJhY3RBY3Rpb25NYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkFic3RyYWN0QWN0aW9uTWFuYWdlciJdLkhhc1NwZWNpZmljVHJpZ2dlcihfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNUSU9O
X09uRG91YmxlUGlja1RyaWdnZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhY3QgPSBf
dGhpcy5faW5pdEFjdGlvbk1hbmFnZXIoYWN0LCBjbGlja0luZm8pOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFjdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRG91
YmxlQ2xpY2sgPSBhY3QuaGFzU3BlY2lmaWNUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5BQ1RJT05fT25Eb3VibGVQaWNr
VHJpZ2dlcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrRG91YmxlQ2xpY2spIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHR3byBzdWNjZXNzaXZlIGtleXMgcHJlc3NlZCBhcmUgZXF1YWws
IGRvdWJsZSBjbGljayBkZWxheSBpcyBub3Qgb3ZlciBhbmQgZG91YmxlIGNsaWNrIGhhcyBub3Qg
anVzdCBvY2N1cnJlZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ0biA9PT0gX3RoaXMu
X3ByZXZpb3VzQnV0dG9uUHJlc3NlZCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERh
dGUubm93KCkgLSBfdGhpcy5fcHJldmlvdXNTdGFydGluZ1BvaW50ZXJUaW1lIDwgSW5wdXRNYW5h
Z2VyLkRvdWJsZUNsaWNrRGVsYXkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhX3Ro
aXMuX2RvdWJsZUNsaWNrT2NjdXJlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHBvaW50ZXIgaGFzIG5vdCBtb3ZlZCBmb3IgMiBjbGlja3MsIGl0J3MgYSBkb3VibGUgY2xpY2sK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsaWNrSW5mby5oYXNTd2lwZWQgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIV90aGlzLl9pc1BvaW50ZXJTd2lwaW5n
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ByZXZpb3VzU3Rh
cnRpbmdQb2ludGVyVGltZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90
aGlzLl9kb3VibGVDbGlja09jY3VyZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGlja0luZm8uZG91YmxlQ2xpY2sgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGlja0luZm8uaWdub3JlID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChJbnB1dE1hbmFnZXIuRXhjbHVzaXZlRG91YmxlQ2xpY2tNb2Rl
ICYmIF90aGlzLl9wcmV2aW91c0RlbGF5ZWRTaW1wbGVDbGlja1RpbWVvdXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChfdGhpcy5fcHJldmlvdXNE
ZWxheWVkU2ltcGxlQ2xpY2tUaW1lb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcHJldmlvdXNEZWxh
eWVkU2ltcGxlQ2xpY2tUaW1lb3V0ID0gX3RoaXMuX2RlbGF5ZWRTaW1wbGVDbGlja1RpbWVvdXQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiKGNsaWNrSW5mbywgX3RoaXMuX2N1
cnJlbnRQaWNrUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHR3byBzdWNjZXNzaXZlIGNsaWNrcyBhcmUg
dG9vIGZhciwgaXQncyBqdXN0IHR3byBzaW1wbGUgY2xpY2tzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9k
b3VibGVDbGlja09jY3VyZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX3RoaXMuX3ByZXZpb3VzU3RhcnRpbmdQb2ludGVyVGltZSA9IF90aGlzLl9zdGFydGluZ1Bv
aW50ZXJUaW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcHJldmlv
dXNTdGFydGluZ1BvaW50ZXJQb3NpdGlvbi54ID0gX3RoaXMuX3N0YXJ0aW5nUG9pbnRlclBvc2l0
aW9uLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wcmV2aW91c1N0
YXJ0aW5nUG9pbnRlclBvc2l0aW9uLnkgPSBfdGhpcy5fc3RhcnRpbmdQb2ludGVyUG9zaXRpb24u
eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ByZXZpb3VzQnV0dG9u
UHJlc3NlZCA9IGJ0bjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElucHV0
TWFuYWdlci5FeGNsdXNpdmVEb3VibGVDbGlja01vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fcHJldmlvdXNEZWxheWVkU2ltcGxlQ2xpY2tUaW1l
b3V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1l
b3V0KF90aGlzLl9wcmV2aW91c0RlbGF5ZWRTaW1wbGVDbGlja1RpbWVvdXQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX3ByZXZpb3VzRGVsYXllZFNpbXBsZUNsaWNrVGltZW91dCA9IF90aGlz
Ll9kZWxheWVkU2ltcGxlQ2xpY2tUaW1lb3V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2IoY2xpY2tJbmZvLCBfdGhpcy5fcHJldmlvdXNQaWNrUmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiKGNsaWNr
SW5mbywgX3RoaXMuX2N1cnJlbnRQaWNrUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZWVkVG9JZ25vcmVOZXh0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgdGhlIGZpcnN0IGNsaWNr
IG9mIHRoZSBkb3VibGUgaGFzIGJlZW4gcmFpc2VkCisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZG91YmxlQ2xpY2tPY2N1
cmVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ByZXZpb3Vz
U3RhcnRpbmdQb2ludGVyVGltZSA9IF90aGlzLl9zdGFydGluZ1BvaW50ZXJUaW1lOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wcmV2aW91c1N0YXJ0aW5nUG9pbnRlclBvc2l0
aW9uLnggPSBfdGhpcy5fc3RhcnRpbmdQb2ludGVyUG9zaXRpb24ueDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5fcHJldmlvdXNTdGFydGluZ1BvaW50ZXJQb3NpdGlvbi55ID0g
X3RoaXMuX3N0YXJ0aW5nUG9pbnRlclBvc2l0aW9uLnk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMuX3ByZXZpb3VzQnV0dG9uUHJlc3NlZCA9IGJ0bjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbmVlZFRvSWdub3JlTmV4dCkgeworICAgICAg
ICAgICAgICAgIGNiKGNsaWNrSW5mbywgX3RoaXMuX2N1cnJlbnRQaWNrUmVzdWx0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fb25Qb2ludGVyTW92ZSA9IGZ1bmN0
aW9uIChldnQpIHsKKyAgICAgICAgICAgIF90aGlzLl91cGRhdGVQb2ludGVyUG9zaXRpb24oZXZ0
KTsKKyAgICAgICAgICAgIC8vIFByZU9ic2VydmFibGUgc3VwcG9ydAorICAgICAgICAgICAgaWYg
KF90aGlzLl9jaGVja1ByZVBvaW50ZXJPYnNlcnZhYmxlKG51bGwsIGV2dCwgZXZ0LnR5cGUgPT09
IF90aGlzLl93aGVlbEV2ZW50TmFtZSA/IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJXSEVFTCA6IF9F
dmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVy
RXZlbnRUeXBlcyJdLlBPSU5URVJNT1ZFKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc2NlbmUuY2FtZXJhVG9Vc2VGb3JQb2ludGVy
cyAmJiAhc2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzY2VuZS5wb2ludGVyTW92ZVByZWRpY2F0ZSkg
eworICAgICAgICAgICAgICAgIHNjZW5lLnBvaW50ZXJNb3ZlUHJlZGljYXRlID0gZnVuY3Rpb24g
KG1lc2gpIHsgcmV0dXJuIChtZXNoLmlzUGlja2FibGUgJiYgbWVzaC5pc1Zpc2libGUgJiYgbWVz
aC5pc1JlYWR5KCkgJiYgbWVzaC5pc0VuYWJsZWQoKSAmJiAobWVzaC5lbmFibGVQb2ludGVyTW92
ZUV2ZW50cyB8fCBzY2VuZS5jb25zdGFudGx5VXBkYXRlTWVzaFVuZGVyUG9pbnRlciB8fCAobWVz
aC5fZ2V0QWN0aW9uTWFuYWdlckZvclRyaWdnZXIoKSAhPSBudWxsKSkgJiYgKCFzY2VuZS5jYW1l
cmFUb1VzZUZvclBvaW50ZXJzIHx8IChzY2VuZS5jYW1lcmFUb1VzZUZvclBvaW50ZXJzLmxheWVy
TWFzayAmIG1lc2gubGF5ZXJNYXNrKSAhPT0gMCkpOyB9OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gTWVzaGVzCisgICAgICAgICAgICB2YXIgcGlja1Jlc3VsdCA9IHNjZW5lLnBpY2so
X3RoaXMuX3VuVHJhbnNsYXRlZFBvaW50ZXJYLCBfdGhpcy5fdW5UcmFuc2xhdGVkUG9pbnRlclks
IHNjZW5lLnBvaW50ZXJNb3ZlUHJlZGljYXRlLCBmYWxzZSwgc2NlbmUuY2FtZXJhVG9Vc2VGb3JQ
b2ludGVycyk7CisgICAgICAgICAgICBfdGhpcy5fcHJvY2Vzc1BvaW50ZXJNb3ZlKHBpY2tSZXN1
bHQsIGV2dCk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMuX29uUG9pbnRlckRvd24gPSBmdW5j
dGlvbiAoZXZ0KSB7CisgICAgICAgICAgICBfdGhpcy5fdG90YWxQb2ludGVyc1ByZXNzZWQrKzsK
KyAgICAgICAgICAgIF90aGlzLl9waWNrZWREb3duTWVzaCA9IG51bGw7CisgICAgICAgICAgICBf
dGhpcy5fbWVzaFBpY2tQcm9jZWVkID0gZmFsc2U7CisgICAgICAgICAgICBfdGhpcy5fdXBkYXRl
UG9pbnRlclBvc2l0aW9uKGV2dCk7CisgICAgICAgICAgICBpZiAoc2NlbmUucHJldmVudERlZmF1
bHRPblBvaW50ZXJEb3duICYmIGNhbnZhcykgeworICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50
RGVmYXVsdCgpOworICAgICAgICAgICAgICAgIGNhbnZhcy5mb2N1cygpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgX3RoaXMuX3N0YXJ0aW5nUG9pbnRlclBvc2l0aW9uLnggPSBfdGhpcy5f
cG9pbnRlclg7CisgICAgICAgICAgICBfdGhpcy5fc3RhcnRpbmdQb2ludGVyUG9zaXRpb24ueSA9
IF90aGlzLl9wb2ludGVyWTsKKyAgICAgICAgICAgIF90aGlzLl9zdGFydGluZ1BvaW50ZXJUaW1l
ID0gRGF0ZS5ub3coKTsKKyAgICAgICAgICAgIC8vIFByZU9ic2VydmFibGUgc3VwcG9ydAorICAg
ICAgICAgICAgaWYgKF90aGlzLl9jaGVja1ByZVBvaW50ZXJPYnNlcnZhYmxlKG51bGwsIGV2dCwg
X0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50
ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzY2VuZS5jYW1lcmFUb1VzZUZvclBvaW50
ZXJzICYmICFzY2VuZS5hY3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBfdGhpcy5fcG9pbnRlckNhcHR1cmVzW2V2dC5wb2lu
dGVySWRdID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICghc2NlbmUucG9pbnRlckRvd25QcmVkaWNh
dGUpIHsKKyAgICAgICAgICAgICAgICBzY2VuZS5wb2ludGVyRG93blByZWRpY2F0ZSA9IGZ1bmN0
aW9uIChtZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNoLmlzUGlja2FibGUg
JiYgbWVzaC5pc1Zpc2libGUgJiYgbWVzaC5pc1JlYWR5KCkgJiYgbWVzaC5pc0VuYWJsZWQoKSAm
JiAoIXNjZW5lLmNhbWVyYVRvVXNlRm9yUG9pbnRlcnMgfHwgKHNjZW5lLmNhbWVyYVRvVXNlRm9y
UG9pbnRlcnMubGF5ZXJNYXNrICYgbWVzaC5sYXllck1hc2spICE9PSAwKTsKKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gTWVzaGVzCisgICAgICAgICAg
ICBfdGhpcy5fcGlja2VkRG93bk1lc2ggPSBudWxsOworICAgICAgICAgICAgdmFyIHBpY2tSZXN1
bHQgPSBzY2VuZS5waWNrKF90aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWCwgX3RoaXMuX3VuVHJh
bnNsYXRlZFBvaW50ZXJZLCBzY2VuZS5wb2ludGVyRG93blByZWRpY2F0ZSwgZmFsc2UsIHNjZW5l
LmNhbWVyYVRvVXNlRm9yUG9pbnRlcnMpOworICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NQb2lu
dGVyRG93bihwaWNrUmVzdWx0LCBldnQpOworICAgICAgICB9OworICAgICAgICB0aGlzLl9vblBv
aW50ZXJVcCA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fdG90YWxQ
b2ludGVyc1ByZXNzZWQgPT09IDApIHsgLy8gV2UgYXJlIGF0dGFjaGluZyB0aGUgcG9pbnRlciB1
cCB0byB3aW5kb3dzIGJlY2F1c2Ugb2YgYSBidWcgaW4gRkYKKyAgICAgICAgICAgICAgICByZXR1
cm47IC8vIFNvIHdlIG5lZWQgdG8gdGVzdCBpdCB0aGUgcG9pbnRlciBkb3duIHdhcyBwcmVzc2Vk
IGJlZm9yZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl90b3RhbFBvaW50ZXJz
UHJlc3NlZC0tOworICAgICAgICAgICAgX3RoaXMuX3BpY2tlZFVwTWVzaCA9IG51bGw7CisgICAg
ICAgICAgICBfdGhpcy5fbWVzaFBpY2tQcm9jZWVkID0gZmFsc2U7CisgICAgICAgICAgICBfdGhp
cy5fdXBkYXRlUG9pbnRlclBvc2l0aW9uKGV2dCk7CisgICAgICAgICAgICBpZiAoc2NlbmUucHJl
dmVudERlZmF1bHRPblBvaW50ZXJVcCAmJiBjYW52YXMpIHsKKyAgICAgICAgICAgICAgICBldnQu
cHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICBjYW52YXMuZm9jdXMoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl9pbml0Q2xpY2tFdmVudChzY2VuZS5vblByZVBv
aW50ZXJPYnNlcnZhYmxlLCBzY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLCBldnQsIGZ1bmN0aW9u
IChjbGlja0luZm8sIHBpY2tSZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAvLyBQcmVPYnNlcnZh
YmxlIHN1cHBvcnQKKyAgICAgICAgICAgICAgICBpZiAoc2NlbmUub25QcmVQb2ludGVyT2JzZXJ2
YWJsZS5oYXNPYnNlcnZlcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNsaWNrSW5m
by5pZ25vcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2xpY2tJbmZvLmhhc1N3
aXBlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGlja0luZm8uc2luZ2xl
Q2xpY2sgJiYgc2NlbmUub25QcmVQb2ludGVyT2JzZXJ2YWJsZS5oYXNTcGVjaWZpY01hc2soX0V2
ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJF
dmVudFR5cGVzIl0uUE9JTlRFUlRBUCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKF90aGlzLl9jaGVja1ByZVBvaW50ZXJPYnNlcnZhYmxlKG51bGwsIGV2dCwgX0V2ZW50
c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJFdmVu
dFR5cGVzIl0uUE9JTlRFUlRBUCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xp
Y2tJbmZvLmRvdWJsZUNsaWNrICYmIHNjZW5lLm9uUHJlUG9pbnRlck9ic2VydmFibGUuaGFzU3Bl
Y2lmaWNNYXNrKF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJET1VCTEVUQVApKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fY2hlY2tQcmVQb2ludGVyT2JzZXJ2YWJs
ZShudWxsLCBldnQsIF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJET1VCTEVUQVApKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2NoZWNr
UHJlUG9pbnRlck9ic2VydmFibGUobnVsbCwgZXZ0LCBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSVVAp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICghX3RoaXMuX3BvaW50ZXJDYXB0dXJlc1tldnQucG9pbnRlcklkXSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIF90aGlzLl9wb2ludGVyQ2FwdHVyZXNbZXZ0LnBvaW50ZXJJZF0gPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBpZiAoIXNjZW5lLmNhbWVyYVRvVXNlRm9yUG9pbnRlcnMgJiYgIXNj
ZW5lLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghc2NlbmUucG9pbnRlclVwUHJlZGljYXRl
KSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLnBvaW50ZXJVcFByZWRpY2F0ZSA9IGZ1bmN0
aW9uIChtZXNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzaC5pc1BpY2th
YmxlICYmIG1lc2guaXNWaXNpYmxlICYmIG1lc2guaXNSZWFkeSgpICYmIG1lc2guaXNFbmFibGVk
KCkgJiYgKCFzY2VuZS5jYW1lcmFUb1VzZUZvclBvaW50ZXJzIHx8IChzY2VuZS5jYW1lcmFUb1Vz
ZUZvclBvaW50ZXJzLmxheWVyTWFzayAmIG1lc2gubGF5ZXJNYXNrKSAhPT0gMCk7CisgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE1l
c2hlcworICAgICAgICAgICAgICAgIGlmICghX3RoaXMuX21lc2hQaWNrUHJvY2VlZCAmJiAoX0Fj
dGlvbnNfYWJzdHJhY3RBY3Rpb25NYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkFic3RyYWN0QWN0aW9uTWFuYWdlciJdICYmIF9BY3Rpb25zX2Fic3RyYWN0QWN0aW9uTWFuYWdl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdEFjdGlvbk1hbmFnZXIiXS5I
YXNUcmlnZ2VycyB8fCBzY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLmhhc09ic2VydmVycygpKSkg
eworICAgICAgICAgICAgICAgICAgICBfdGhpcy5faW5pdEFjdGlvbk1hbmFnZXIobnVsbCwgY2xp
Y2tJbmZvKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFwaWNrUmVz
dWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHBpY2tSZXN1bHQgPSBfdGhpcy5fY3VycmVudFBp
Y2tSZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF90aGlzLl9wcm9j
ZXNzUG9pbnRlclVwKHBpY2tSZXN1bHQsIGV2dCwgY2xpY2tJbmZvKTsKKyAgICAgICAgICAgICAg
ICBfdGhpcy5fcHJldmlvdXNQaWNrUmVzdWx0ID0gX3RoaXMuX2N1cnJlbnRQaWNrUmVzdWx0Owor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMuX29uS2V5RG93biA9IGZ1
bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgIHZhciB0eXBlID0gX0V2ZW50c19rZXlib2FyZEV2
ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJLZXlib2FyZEV2ZW50VHlwZXMiXS5L
RVlET1dOOworICAgICAgICAgICAgaWYgKHNjZW5lLm9uUHJlS2V5Ym9hcmRPYnNlcnZhYmxlLmhh
c09ic2VydmVycygpKSB7CisgICAgICAgICAgICAgICAgdmFyIHBpID0gbmV3IF9FdmVudHNfa2V5
Ym9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siS2V5Ym9hcmRJbmZvUHJl
Il0odHlwZSwgZXZ0KTsKKyAgICAgICAgICAgICAgICBzY2VuZS5vblByZUtleWJvYXJkT2JzZXJ2
YWJsZS5ub3RpZnlPYnNlcnZlcnMocGksIHR5cGUpOworICAgICAgICAgICAgICAgIGlmIChwaS5z
a2lwT25Qb2ludGVyT2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjZW5lLm9u
S2V5Ym9hcmRPYnNlcnZhYmxlLmhhc09ic2VydmVycygpKSB7CisgICAgICAgICAgICAgICAgdmFy
IHBpID0gbmV3IF9FdmVudHNfa2V5Ym9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfX1siS2V5Ym9hcmRJbmZvIl0odHlwZSwgZXZ0KTsKKyAgICAgICAgICAgICAgICBzY2VuZS5v
bktleWJvYXJkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMocGksIHR5cGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHNjZW5lLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAg
ICAgICBzY2VuZS5hY3Rpb25NYW5hZ2VyLnByb2Nlc3NUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5BQ1RJT05fT25LZXlE
b3duVHJpZ2dlciwgX0FjdGlvbnNfYWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siQWN0aW9uRXZlbnQiXS5DcmVhdGVOZXdGcm9tU2NlbmUoc2NlbmUsIGV2dCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB0aGlzLl9vbktleVVwID0gZnVuY3Rpb24g
KGV2dCkgeworICAgICAgICAgICAgdmFyIHR5cGUgPSBfRXZlbnRzX2tleWJvYXJkRXZlbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIktleWJvYXJkRXZlbnRUeXBlcyJdLktFWVVQOwor
ICAgICAgICAgICAgaWYgKHNjZW5lLm9uUHJlS2V5Ym9hcmRPYnNlcnZhYmxlLmhhc09ic2VydmVy
cygpKSB7CisgICAgICAgICAgICAgICAgdmFyIHBpID0gbmV3IF9FdmVudHNfa2V5Ym9hcmRFdmVu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siS2V5Ym9hcmRJbmZvUHJlIl0odHlwZSwg
ZXZ0KTsKKyAgICAgICAgICAgICAgICBzY2VuZS5vblByZUtleWJvYXJkT2JzZXJ2YWJsZS5ub3Rp
ZnlPYnNlcnZlcnMocGksIHR5cGUpOworICAgICAgICAgICAgICAgIGlmIChwaS5za2lwT25Qb2lu
dGVyT2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjZW5lLm9uS2V5Ym9hcmRP
YnNlcnZhYmxlLmhhc09ic2VydmVycygpKSB7CisgICAgICAgICAgICAgICAgdmFyIHBpID0gbmV3
IF9FdmVudHNfa2V5Ym9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siS2V5
Ym9hcmRJbmZvIl0odHlwZSwgZXZ0KTsKKyAgICAgICAgICAgICAgICBzY2VuZS5vbktleWJvYXJk
T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMocGksIHR5cGUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHNjZW5lLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAgICAgICBzY2Vu
ZS5hY3Rpb25NYW5hZ2VyLnByb2Nlc3NUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5BQ1RJT05fT25LZXlVcFRyaWdnZXIs
IF9BY3Rpb25zX2FjdGlvbkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFjdGlv
bkV2ZW50Il0uQ3JlYXRlTmV3RnJvbVNjZW5lKHNjZW5lLCBldnQpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICAgICAgLy8gS2V5Ym9hcmQgZXZlbnRzCisgICAgICAgIHRoaXMuX29u
Q2FudmFzRm9jdXNPYnNlcnZlciA9IGVuZ2luZS5vbkNhbnZhc0ZvY3VzT2JzZXJ2YWJsZS5hZGQo
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWNhbnZhcykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVy
KCJrZXlkb3duIiwgX3RoaXMuX29uS2V5RG93biwgZmFsc2UpOworICAgICAgICAgICAgICAgIGNh
bnZhcy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIF90aGlzLl9vbktleVVwLCBmYWxzZSk7Cisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09
IGNhbnZhcykgeworICAgICAgICAgICAgICAgIGZuKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gZm47CisgICAgICAgIH0pKCkpOworICAgICAgICB0aGlzLl9vbkNhbnZhc0Js
dXJPYnNlcnZlciA9IGVuZ2luZS5vbkNhbnZhc0JsdXJPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBpZiAoIWNhbnZhcykgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJr
ZXlkb3duIiwgX3RoaXMuX29uS2V5RG93bik7CisgICAgICAgICAgICBjYW52YXMucmVtb3ZlRXZl
bnRMaXN0ZW5lcigia2V5dXAiLCBfdGhpcy5fb25LZXlVcCk7CisgICAgICAgIH0pOworICAgICAg
ICAvLyBQb2ludGVyIGV2ZW50cworICAgICAgICB2YXIgZXZlbnRQcmVmaXggPSBfTWlzY190b29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLkdldFBvaW50ZXJQcmVmaXgo
KTsKKyAgICAgICAgaWYgKGF0dGFjaE1vdmUpIHsKKyAgICAgICAgICAgIGNhbnZhcy5hZGRFdmVu
dExpc3RlbmVyKGV2ZW50UHJlZml4ICsgIm1vdmUiLCB0aGlzLl9vblBvaW50ZXJNb3ZlLCBmYWxz
ZSk7CisgICAgICAgICAgICAvLyBXaGVlbAorICAgICAgICAgICAgdGhpcy5fd2hlZWxFdmVudE5h
bWUgPSAib253aGVlbCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikgPyAid2hlZWwi
IDogLy8gTW9kZXJuIGJyb3dzZXJzIHN1cHBvcnQgIndoZWVsIgorICAgICAgICAgICAgICAgIGRv
Y3VtZW50Lm9ubW91c2V3aGVlbCAhPT0gdW5kZWZpbmVkID8gIm1vdXNld2hlZWwiIDogLy8gV2Vi
a2l0IGFuZCBJRSBzdXBwb3J0IGF0IGxlYXN0ICJtb3VzZXdoZWVsIgorICAgICAgICAgICAgICAg
ICAgICAiRE9NTW91c2VTY3JvbGwiOyAvLyBsZXQncyBhc3N1bWUgdGhhdCByZW1haW5pbmcgYnJv
d3NlcnMgYXJlIG9sZGVyIEZpcmVmb3gKKyAgICAgICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3Rl
bmVyKHRoaXMuX3doZWVsRXZlbnROYW1lLCB0aGlzLl9vblBvaW50ZXJNb3ZlLCBmYWxzZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGF0dGFjaERvd24pIHsKKyAgICAgICAgICAgIGNhbnZhcy5h
ZGRFdmVudExpc3RlbmVyKGV2ZW50UHJlZml4ICsgImRvd24iLCB0aGlzLl9vblBvaW50ZXJEb3du
LCBmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGF0dGFjaFVwKSB7CisgICAgICAgICAg
ICB2YXIgaG9zdFdpbmRvdyA9IHNjZW5lLmdldEVuZ2luZSgpLmdldEhvc3RXaW5kb3coKTsKKyAg
ICAgICAgICAgIGhvc3RXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihldmVudFByZWZpeCArICJ1cCIs
IHRoaXMuX29uUG9pbnRlclVwLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIERldGFjaGVzIGFsbCBldmVudCBoYW5kbGVycworICAgICAqLworICAgIElucHV0TWFu
YWdlci5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IGV2ZW50UHJlZml4ID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
VG9vbHMiXS5HZXRQb2ludGVyUHJlZml4KCk7CisgICAgICAgIHZhciBjYW52YXMgPSB0aGlzLl9z
Y2VuZS5nZXRFbmdpbmUoKS5nZXRSZW5kZXJpbmdDYW52YXMoKTsKKyAgICAgICAgdmFyIGVuZ2lu
ZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAoIWNhbnZhcykgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFBvaW50ZXIKKyAgICAgICAg
Y2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRQcmVmaXggKyAibW92ZSIsIHRoaXMuX29u
UG9pbnRlck1vdmUpOworICAgICAgICBjYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl93
aGVlbEV2ZW50TmFtZSwgdGhpcy5fb25Qb2ludGVyTW92ZSk7CisgICAgICAgIGNhbnZhcy5yZW1v
dmVFdmVudExpc3RlbmVyKGV2ZW50UHJlZml4ICsgImRvd24iLCB0aGlzLl9vblBvaW50ZXJEb3du
KTsKKyAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRQcmVmaXggKyAidXAi
LCB0aGlzLl9vblBvaW50ZXJVcCk7CisgICAgICAgIC8vIEJsdXIgLyBGb2N1cworICAgICAgICBp
ZiAodGhpcy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIGVuZ2luZS5vbkNh
bnZhc0JsdXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29uQ2FudmFzRm9jdXNPYnNlcnZlcikgeworICAg
ICAgICAgICAgZW5naW5lLm9uQ2FudmFzRm9jdXNPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkNh
bnZhc0ZvY3VzT2JzZXJ2ZXIpOworICAgICAgICB9CisgICAgICAgIC8vIEtleWJvYXJkCisgICAg
ICAgIGNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fb25LZXlEb3du
KTsKKyAgICAgICAgY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIiwgdGhpcy5fb25L
ZXlVcCk7CisgICAgICAgIC8vIEN1cnNvcgorICAgICAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0g
dGhpcy5fc2NlbmUuZGVmYXVsdEN1cnNvcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEZvcmNl
IHRoZSB2YWx1ZSBvZiBtZXNoVW5kZXJQb2ludGVyCisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5l
cyB0aGUgbWVzaCB0byB1c2UKKyAgICAgKi8KKyAgICBJbnB1dE1hbmFnZXIucHJvdG90eXBlLnNl
dFBvaW50ZXJPdmVyTWVzaCA9IGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgIGlmICh0aGlzLl9w
b2ludGVyT3Zlck1lc2ggPT09IG1lc2gpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB2YXIgYWN0aW9uTWFuYWdlcjsKKyAgICAgICAgaWYgKHRoaXMuX3BvaW50ZXJP
dmVyTWVzaCkgeworICAgICAgICAgICAgYWN0aW9uTWFuYWdlciA9IHRoaXMuX3BvaW50ZXJPdmVy
TWVzaC5fZ2V0QWN0aW9uTWFuYWdlckZvclRyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBvaW50ZXJPdXRU
cmlnZ2VyKTsKKyAgICAgICAgICAgIGlmIChhY3Rpb25NYW5hZ2VyKSB7CisgICAgICAgICAgICAg
ICAgYWN0aW9uTWFuYWdlci5wcm9jZXNzVHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uUG9pbnRlck91dFRy
aWdnZXIsIF9BY3Rpb25zX2FjdGlvbkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkFjdGlvbkV2ZW50Il0uQ3JlYXRlTmV3KHRoaXMuX3BvaW50ZXJPdmVyTWVzaCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3BvaW50ZXJPdmVyTWVzaCA9IG1lc2g7
CisgICAgICAgIGlmICh0aGlzLl9wb2ludGVyT3Zlck1lc2gpIHsKKyAgICAgICAgICAgIGFjdGlv
bk1hbmFnZXIgPSB0aGlzLl9wb2ludGVyT3Zlck1lc2guX2dldEFjdGlvbk1hbmFnZXJGb3JUcmln
Z2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25z
dGFudHMiXS5BQ1RJT05fT25Qb2ludGVyT3ZlclRyaWdnZXIpOworICAgICAgICAgICAgaWYgKGFj
dGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAgICAgICBhY3Rpb25NYW5hZ2VyLnByb2Nlc3NUcmln
Z2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25z
dGFudHMiXS5BQ1RJT05fT25Qb2ludGVyT3ZlclRyaWdnZXIsIF9BY3Rpb25zX2FjdGlvbkV2ZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFjdGlvbkV2ZW50Il0uQ3JlYXRlTmV3KHRo
aXMuX3BvaW50ZXJPdmVyTWVzaCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBtZXNoIHVuZGVyIHRoZSBwb2ludGVyCisgICAgICog
QHJldHVybnMgYSBNZXNoIG9yIG51bGwgaWYgbm8gbWVzaCBpcyB1bmRlciB0aGUgcG9pbnRlcgor
ICAgICAqLworICAgIElucHV0TWFuYWdlci5wcm90b3R5cGUuZ2V0UG9pbnRlck92ZXJNZXNoID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fcG9pbnRlck92ZXJNZXNoOworICAg
IH07CisgICAgLyoqIFRoZSBkaXN0YW5jZSBpbiBwaXhlbCB0aGF0IHlvdSBoYXZlIHRvIG1vdmUg
dG8gcHJldmVudCBzb21lIGV2ZW50cyAqLworICAgIElucHV0TWFuYWdlci5EcmFnTW92ZW1lbnRU
aHJlc2hvbGQgPSAxMDsgLy8gaW4gcGl4ZWxzCisgICAgLyoqIFRpbWUgaW4gbWlsbGlzZWNvbmRz
IHRvIHdhaXQgdG8gcmFpc2UgbG9uZyBwcmVzcyBldmVudHMgaWYgYnV0dG9uIGlzIHN0aWxsIHBy
ZXNzZWQgKi8KKyAgICBJbnB1dE1hbmFnZXIuTG9uZ1ByZXNzRGVsYXkgPSA1MDA7IC8vIGluIG1p
bGxpc2Vjb25kcworICAgIC8qKiBUaW1lIGluIG1pbGxpc2Vjb25kcyB3aXRoIHR3byBjb25zZWN1
dGl2ZSBjbGlja3Mgd2lsbCBiZSBjb25zaWRlcmVkIGFzIGEgZG91YmxlIGNsaWNrICovCisgICAg
SW5wdXRNYW5hZ2VyLkRvdWJsZUNsaWNrRGVsYXkgPSAzMDA7IC8vIGluIG1pbGxpc2Vjb25kcwor
ICAgIC8qKiBJZiB5b3UgbmVlZCB0byBjaGVjayBkb3VibGUgY2xpY2sgd2l0aG91dCByYWlzaW5n
IGEgc2luZ2xlIGNsaWNrIGF0IGZpcnN0IGNsaWNrLCBlbmFibGUgdGhpcyBmbGFnICovCisgICAg
SW5wdXRNYW5hZ2VyLkV4Y2x1c2l2ZURvdWJsZUNsaWNrTW9kZSA9IGZhbHNlOworICAgIHJldHVy
biBJbnB1dE1hbmFnZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0luc3Ry
dW1lbnRhdGlvbi9lbmdpbmVJbnN0cnVtZW50YXRpb24udHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0luc3RydW1l
bnRhdGlvbi9lbmdpbmVJbnN0cnVtZW50YXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogRW5naW5lSW5zdHJ1bWVudGF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkVuZ2luZUluc3RydW1lbnRhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRW5naW5l
SW5zdHJ1bWVudGF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19wZXJm
Q291bnRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWlzYy9wZXJmQ291bnRlciAqLyAiLi9NaXNjL3BlcmZDb3VudGVyLnRzIik7CisK
Ky8qKgorICogVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBnZXQgaW5zdHJ1bWVudGF0aW9uIGRh
dGEgZnJvbSBhIEJhYnlsb24gZW5naW5lCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNv
bS9ob3dfdG8vb3B0aW1pemluZ195b3VyX3NjZW5lI2VuZ2luZWluc3RydW1lbnRhdGlvbgorICov
Cit2YXIgRW5naW5lSW5zdHJ1bWVudGF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBlbmdpbmUgaW5zdHJ1bWVudGF0
aW9uLgorICAgICAqIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gZ2V0IGluc3RydW1lbnRhdGlv
biBkYXRhIGZyb20gYSBCYWJ5bG9uIGVuZ2luZQorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9vcHRpbWl6aW5nX3lvdXJfc2NlbmUjZW5naW5laW5zdHJ1bWVudGF0
aW9uCisgICAgICogQHBhcmFtIGVuZ2luZSBEZWZpbmVzIHRoZSBlbmdpbmUgdG8gaW5zdHJ1bWVu
dAorICAgICAqLworICAgIGZ1bmN0aW9uIEVuZ2luZUluc3RydW1lbnRhdGlvbigKKyAgICAvKioK
KyAgICAgKiBEZWZpbmUgdGhlIGluc3RydW1lbnRlZCBlbmdpbmUuCisgICAgICovCisgICAgZW5n
aW5lKSB7CisgICAgICAgIHRoaXMuZW5naW5lID0gZW5naW5lOworICAgICAgICB0aGlzLl9jYXB0
dXJlR1BVRnJhbWVUaW1lID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2dwdUZyYW1lVGltZSA9IG5l
dyBfTWlzY19wZXJmQ291bnRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQZXJmQ291
bnRlciJdKCk7CisgICAgICAgIHRoaXMuX2NhcHR1cmVTaGFkZXJDb21waWxhdGlvblRpbWUgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5fc2hhZGVyQ29tcGlsYXRpb25UaW1lID0gbmV3IF9NaXNjX3Bl
cmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBlcmZDb3VudGVyIl0oKTsK
KyAgICAgICAgLy8gT2JzZXJ2ZXJzCisgICAgICAgIHRoaXMuX29uQmVnaW5GcmFtZU9ic2VydmVy
ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fb25FbmRGcmFtZU9ic2VydmVyID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fb25CZWZvcmVTaGFkZXJDb21waWxhdGlvbk9ic2VydmVyID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fb25BZnRlclNoYWRlckNvbXBpbGF0aW9uT2JzZXJ2ZXIgPSBudWxsOworICAgIH0K
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lSW5zdHJ1bWVudGF0aW9uLnByb3RvdHlw
ZSwgImdwdUZyYW1lVGltZUNvdW50ZXIiLCB7CisgICAgICAgIC8vIFByb3BlcnRpZXMKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmYgY291bnRlciB1c2VkIGZvciBHUFUgZnJh
bWUgdGltZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fZ3B1RnJhbWVUaW1lOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lSW5zdHJ1bWVudGF0aW9uLnByb3RvdHlwZSwgImNh
cHR1cmVHUFVGcmFtZVRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBH
UFUgZnJhbWUgdGltZSBjYXB0dXJlIHN0YXR1cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FwdHVyZUdQVUZyYW1lVGlt
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuYWJsZSBvciBkaXNhYmxl
IHRoZSBHUFUgZnJhbWUgdGltZSBjYXB0dXJlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fY2FwdHVyZUdQVUZyYW1lVGltZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2NhcHR1cmVH
UFVGcmFtZVRpbWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHRoaXMuX29uQmVnaW5GcmFtZU9ic2VydmVyID0gdGhpcy5lbmdpbmUub25CZWdpbkZy
YW1lT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IV90aGlzLl9ncHVGcmFtZVRpbWVUb2tlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuX2dwdUZyYW1lVGltZVRva2VuID0gX3RoaXMuZW5naW5lLnN0YXJ0VGltZVF1ZXJ5KCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9vbkVuZEZyYW1lT2JzZXJ2ZXIgPSB0aGlzLmVuZ2luZS5vbkVuZEZyYW1lT2JzZXJ2
YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLl9n
cHVGcmFtZVRpbWVUb2tlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhciB0aW1lID0gX3RoaXMu
ZW5naW5lLmVuZFRpbWVRdWVyeShfdGhpcy5fZ3B1RnJhbWVUaW1lVG9rZW4pOworICAgICAgICAg
ICAgICAgICAgICBpZiAodGltZSA+IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fZ3B1RnJhbWVUaW1lVG9rZW4gPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuX2dwdUZyYW1lVGltZS5mZXRjaE5ld0ZyYW1lKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5fZ3B1RnJhbWVUaW1lLmFkZENvdW50KHRpbWUsIHRydWUpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS5vbkJlZ2luRnJhbWVPYnNlcnZh
YmxlLnJlbW92ZSh0aGlzLl9vbkJlZ2luRnJhbWVPYnNlcnZlcik7CisgICAgICAgICAgICAgICAg
dGhpcy5fb25CZWdpbkZyYW1lT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAgICAgICAgIHRoaXMu
ZW5naW5lLm9uRW5kRnJhbWVPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkVuZEZyYW1lT2JzZXJ2
ZXIpOworICAgICAgICAgICAgICAgIHRoaXMuX29uRW5kRnJhbWVPYnNlcnZlciA9IG51bGw7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShFbmdpbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAic2hhZGVyQ29tcGlsYXRpb25UaW1l
Q291bnRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmYgY291bnRl
ciB1c2VkIGZvciBzaGFkZXIgY29tcGlsYXRpb24gdGltZQorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZGVyQ29tcGls
YXRpb25UaW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
RW5naW5lSW5zdHJ1bWVudGF0aW9uLnByb3RvdHlwZSwgImNhcHR1cmVTaGFkZXJDb21waWxhdGlv
blRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBzaGFkZXIgY29tcGls
YXRpb24gdGltZSBjYXB0dXJlIHN0YXR1cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FwdHVyZVNoYWRlckNvbXBpbGF0
aW9uVGltZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuYWJsZSBvciBk
aXNhYmxlIHRoZSBzaGFkZXIgY29tcGlsYXRpb24gdGltZSBjYXB0dXJlCisgICAgICAgICAqLwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fY2FwdHVyZVNoYWRlckNvbXBp
bGF0aW9uVGltZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX2NhcHR1cmVTaGFkZXJDb21waWxhdGlvblRpbWUgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX29uQmVmb3JlU2hh
ZGVyQ29tcGlsYXRpb25PYnNlcnZlciA9IHRoaXMuZW5naW5lLm9uQmVmb3JlU2hhZGVyQ29tcGls
YXRpb25PYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIF90
aGlzLl9zaGFkZXJDb21waWxhdGlvblRpbWUuZmV0Y2hOZXdGcmFtZSgpOworICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5fc2hhZGVyQ29tcGlsYXRpb25UaW1lLmJlZ2luTW9uaXRvcmluZygpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJTaGFkZXJD
b21waWxhdGlvbk9ic2VydmVyID0gdGhpcy5lbmdpbmUub25BZnRlclNoYWRlckNvbXBpbGF0aW9u
T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5f
c2hhZGVyQ29tcGlsYXRpb25UaW1lLmVuZE1vbml0b3JpbmcoKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRo
aXMuZW5naW5lLm9uQmVmb3JlU2hhZGVyQ29tcGlsYXRpb25PYnNlcnZhYmxlLnJlbW92ZSh0aGlz
Ll9vbkJlZm9yZVNoYWRlckNvbXBpbGF0aW9uT2JzZXJ2ZXIpOworICAgICAgICAgICAgICAgIHRo
aXMuX29uQmVmb3JlU2hhZGVyQ29tcGlsYXRpb25PYnNlcnZlciA9IG51bGw7CisgICAgICAgICAg
ICAgICAgdGhpcy5lbmdpbmUub25BZnRlclNoYWRlckNvbXBpbGF0aW9uT2JzZXJ2YWJsZS5yZW1v
dmUodGhpcy5fb25BZnRlclNoYWRlckNvbXBpbGF0aW9uT2JzZXJ2ZXIpOworICAgICAgICAgICAg
ICAgIHRoaXMuX29uQWZ0ZXJTaGFkZXJDb21waWxhdGlvbk9ic2VydmVyID0gbnVsbDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRGlzcG9zZSBhbmQg
cmVsZWFzZSBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAgICAgKi8KKyAgICBFbmdpbmVJbnN0cnVt
ZW50YXRpb24ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMu
ZW5naW5lLm9uQmVnaW5GcmFtZU9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQmVnaW5GcmFtZU9i
c2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25CZWdpbkZyYW1lT2JzZXJ2ZXIgPSBudWxsOworICAg
ICAgICB0aGlzLmVuZ2luZS5vbkVuZEZyYW1lT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25FbmRG
cmFtZU9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25FbmRGcmFtZU9ic2VydmVyID0gbnVsbDsK
KyAgICAgICAgdGhpcy5lbmdpbmUub25CZWZvcmVTaGFkZXJDb21waWxhdGlvbk9ic2VydmFibGUu
cmVtb3ZlKHRoaXMuX29uQmVmb3JlU2hhZGVyQ29tcGlsYXRpb25PYnNlcnZlcik7CisgICAgICAg
IHRoaXMuX29uQmVmb3JlU2hhZGVyQ29tcGlsYXRpb25PYnNlcnZlciA9IG51bGw7CisgICAgICAg
IHRoaXMuZW5naW5lLm9uQWZ0ZXJTaGFkZXJDb21waWxhdGlvbk9ic2VydmFibGUucmVtb3ZlKHRo
aXMuX29uQWZ0ZXJTaGFkZXJDb21waWxhdGlvbk9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25B
ZnRlclNoYWRlckNvbXBpbGF0aW9uT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLmVuZ2lu
ZSA9IG51bGw7CisgICAgfTsKKyAgICByZXR1cm4gRW5naW5lSW5zdHJ1bWVudGF0aW9uOworfSgp
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9JbnN0cnVtZW50YXRpb24vaW5kZXgudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vSW5z
dHJ1bWVudGF0aW9uL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRW5naW5lSW5zdHJ1bWVudGF0aW9uLCBT
Y2VuZUluc3RydW1lbnRhdGlvbiwgX1RpbWVUb2tlbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2VuZ2luZUluc3RydW1lbnRhdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lbmdpbmVJbnN0cnVt
ZW50YXRpb24gKi8gIi4vSW5zdHJ1bWVudGF0aW9uL2VuZ2luZUluc3RydW1lbnRhdGlvbi50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJFbmdpbmVJbnN0cnVtZW50YXRpb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9lbmdpbmVJbnN0cnVtZW50YXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRW5naW5lSW5zdHJ1bWVudGF0aW9uIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3NjZW5lSW5zdHJ1bWVudGF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NjZW5lSW5zdHJ1bWVudGF0aW9uICovICIuL0luc3Ry
dW1lbnRhdGlvbi9zY2VuZUluc3RydW1lbnRhdGlvbi50cyIpOworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJT
Y2VuZUluc3RydW1lbnRhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lSW5zdHJ1bWVu
dGF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lSW5zdHJ1bWVudGF0aW9u
Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RpbWVUb2tlbl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90aW1lVG9rZW4g
Ki8gIi4vSW5zdHJ1bWVudGF0aW9uL3RpbWVUb2tlbi50cyIpOworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJf
VGltZVRva2VuIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdGltZVRva2VuX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIl9UaW1lVG9rZW4iXTsgfSk7CisKKworCisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vSW5zdHJ1bWVudGF0aW9uL3NjZW5lSW5zdHJ1bWVudGF0aW9uLnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL0luc3RydW1lbnRhdGlvbi9zY2VuZUluc3RydW1lbnRhdGlvbi50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IFNjZW5lSW5zdHJ1bWVudGF0aW9uICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lSW5zdHJ1bWVudGF0aW9uIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBTY2VuZUluc3RydW1lbnRhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX3BlcmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3BlcmZDb3VudGVyICovICIu
L01pc2MvcGVyZkNvdW50ZXIudHMiKTsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgY2FuIGJlIHVz
ZWQgdG8gZ2V0IGluc3RydW1lbnRhdGlvbiBkYXRhIGZyb20gYSBCYWJ5bG9uIGVuZ2luZQorICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL29wdGltaXppbmdfeW91cl9zY2Vu
ZSNzY2VuZWluc3RydW1lbnRhdGlvbgorICovCit2YXIgU2NlbmVJbnN0cnVtZW50YXRpb24gPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVz
IGEgbmV3IHNjZW5lIGluc3RydW1lbnRhdGlvbi4KKyAgICAgKiBUaGlzIGNsYXNzIGNhbiBiZSB1
c2VkIHRvIGdldCBpbnN0cnVtZW50YXRpb24gZGF0YSBmcm9tIGEgQmFieWxvbiBlbmdpbmUKKyAg
ICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vb3B0aW1pemluZ195b3Vy
X3NjZW5lI3NjZW5laW5zdHJ1bWVudGF0aW9uCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMg
dGhlIHNjZW5lIHRvIGluc3RydW1lbnQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTY2VuZUluc3Ry
dW1lbnRhdGlvbigKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBzY2VuZSB0byBpbnN0cnVt
ZW50CisgICAgICovCisgICAgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAg
ICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9jYXB0dXJlQWN0aXZlTWVz
aGVzRXZhbHVhdGlvblRpbWUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fYWN0aXZlTWVzaGVzRXZh
bHVhdGlvblRpbWUgPSBuZXcgX01pc2NfcGVyZkNvdW50ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siUGVyZkNvdW50ZXIiXSgpOworICAgICAgICB0aGlzLl9jYXB0dXJlUmVuZGVyVGFy
Z2V0c1JlbmRlclRpbWUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcmVuZGVyVGFyZ2V0c1JlbmRl
clRpbWUgPSBuZXcgX01pc2NfcGVyZkNvdW50ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siUGVyZkNvdW50ZXIiXSgpOworICAgICAgICB0aGlzLl9jYXB0dXJlRnJhbWVUaW1lID0gZmFs
c2U7CisgICAgICAgIHRoaXMuX2ZyYW1lVGltZSA9IG5ldyBfTWlzY19wZXJmQ291bnRlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQZXJmQ291bnRlciJdKCk7CisgICAgICAgIHRoaXMu
X2NhcHR1cmVSZW5kZXJUaW1lID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3JlbmRlclRpbWUgPSBu
ZXcgX01pc2NfcGVyZkNvdW50ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUGVyZkNv
dW50ZXIiXSgpOworICAgICAgICB0aGlzLl9jYXB0dXJlSW50ZXJGcmFtZVRpbWUgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5faW50ZXJGcmFtZVRpbWUgPSBuZXcgX01pc2NfcGVyZkNvdW50ZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUGVyZkNvdW50ZXIiXSgpOworICAgICAgICB0aGlz
Ll9jYXB0dXJlUGFydGljbGVzUmVuZGVyVGltZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9wYXJ0
aWNsZXNSZW5kZXJUaW1lID0gbmV3IF9NaXNjX3BlcmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlBlcmZDb3VudGVyIl0oKTsKKyAgICAgICAgdGhpcy5fY2FwdHVyZVNwcml0
ZXNSZW5kZXJUaW1lID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3Nwcml0ZXNSZW5kZXJUaW1lID0g
bmV3IF9NaXNjX3BlcmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBlcmZD
b3VudGVyIl0oKTsKKyAgICAgICAgdGhpcy5fY2FwdHVyZVBoeXNpY3NUaW1lID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMuX3BoeXNpY3NUaW1lID0gbmV3IF9NaXNjX3BlcmZDb3VudGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlBlcmZDb3VudGVyIl0oKTsKKyAgICAgICAgdGhpcy5fY2Fw
dHVyZUFuaW1hdGlvbnNUaW1lID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2FuaW1hdGlvbnNUaW1l
ID0gbmV3IF9NaXNjX3BlcmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBl
cmZDb3VudGVyIl0oKTsKKyAgICAgICAgdGhpcy5fY2FwdHVyZUNhbWVyYVJlbmRlclRpbWUgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5fY2FtZXJhUmVuZGVyVGltZSA9IG5ldyBfTWlzY19wZXJmQ291
bnRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQZXJmQ291bnRlciJdKCk7CisgICAg
ICAgIC8vIE9ic2VydmVycworICAgICAgICB0aGlzLl9vbkJlZm9yZUFjdGl2ZU1lc2hlc0V2YWx1
YXRpb25PYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuX29uQWZ0ZXJBY3RpdmVNZXNoZXNF
dmFsdWF0aW9uT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vbkJlZm9yZVJlbmRlclRh
cmdldHNSZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuX29uQWZ0ZXJSZW5kZXJU
YXJnZXRzUmVuZGVyT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vbkFmdGVyUmVuZGVy
T2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vbkJlZm9yZURyYXdQaGFzZU9ic2VydmVy
ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fb25BZnRlckRyYXdQaGFzZU9ic2VydmVyID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fb25CZWZvcmVBbmltYXRpb25zT2JzZXJ2ZXIgPSBudWxsOworICAgICAg
ICB0aGlzLl9vbkJlZm9yZVBhcnRpY2xlc1JlbmRlcmluZ09ic2VydmVyID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fb25BZnRlclBhcnRpY2xlc1JlbmRlcmluZ09ic2VydmVyID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fb25CZWZvcmVTcHJpdGVzUmVuZGVyaW5nT2JzZXJ2ZXIgPSBudWxsOworICAgICAg
ICB0aGlzLl9vbkFmdGVyU3ByaXRlc1JlbmRlcmluZ09ic2VydmVyID0gbnVsbDsKKyAgICAgICAg
dGhpcy5fb25CZWZvcmVQaHlzaWNzT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vbkFm
dGVyUGh5c2ljc09ic2VydmVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5fb25BZnRlckFuaW1hdGlv
bnNPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuX29uQmVmb3JlQ2FtZXJhUmVuZGVyT2Jz
ZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vbkFmdGVyQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIg
PSBudWxsOworICAgICAgICAvLyBCZWZvcmUgcmVuZGVyCisgICAgICAgIHRoaXMuX29uQmVmb3Jl
QW5pbWF0aW9uc09ic2VydmVyID0gc2NlbmUub25CZWZvcmVBbmltYXRpb25zT2JzZXJ2YWJsZS5h
ZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKF90aGlzLl9jYXB0dXJlQWN0aXZlTWVz
aGVzRXZhbHVhdGlvblRpbWUpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fYWN0aXZlTWVzaGVz
RXZhbHVhdGlvblRpbWUuZmV0Y2hOZXdGcmFtZSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKF90aGlzLl9jYXB0dXJlUmVuZGVyVGFyZ2V0c1JlbmRlclRpbWUpIHsKKyAgICAgICAg
ICAgICAgICBfdGhpcy5fcmVuZGVyVGFyZ2V0c1JlbmRlclRpbWUuZmV0Y2hOZXdGcmFtZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF90aGlzLl9jYXB0dXJlRnJhbWVUaW1lKSB7
CisgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVG9vbHMiXS5TdGFydFBlcmZvcm1hbmNlQ291bnRlcigiU2NlbmUgcmVuZGVyaW5nIik7Cisg
ICAgICAgICAgICAgICAgX3RoaXMuX2ZyYW1lVGltZS5iZWdpbk1vbml0b3JpbmcoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfdGhpcy5fY2FwdHVyZUludGVyRnJhbWVUaW1lKSB7
CisgICAgICAgICAgICAgICAgX3RoaXMuX2ludGVyRnJhbWVUaW1lLmVuZE1vbml0b3JpbmcoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfdGhpcy5fY2FwdHVyZVBhcnRpY2xlc1Jl
bmRlclRpbWUpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fcGFydGljbGVzUmVuZGVyVGltZS5m
ZXRjaE5ld0ZyYW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX3RoaXMuX2Nh
cHR1cmVTcHJpdGVzUmVuZGVyVGltZSkgeworICAgICAgICAgICAgICAgIF90aGlzLl9zcHJpdGVz
UmVuZGVyVGltZS5mZXRjaE5ld0ZyYW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoX3RoaXMuX2NhcHR1cmVBbmltYXRpb25zVGltZSkgeworICAgICAgICAgICAgICAgIF90aGlz
Ll9hbmltYXRpb25zVGltZS5iZWdpbk1vbml0b3JpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIF90aGlzLnNjZW5lLmdldEVuZ2luZSgpLl9kcmF3Q2FsbHMuZmV0Y2hOZXdGcmFtZSgp
OworICAgICAgICB9KTsKKyAgICAgICAgLy8gQWZ0ZXIgcmVuZGVyCisgICAgICAgIHRoaXMuX29u
QWZ0ZXJSZW5kZXJPYnNlcnZlciA9IHNjZW5lLm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLmFkZChm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuX2NhcHR1cmVGcmFtZVRpbWUpIHsK
KyAgICAgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJUb29scyJdLkVuZFBlcmZvcm1hbmNlQ291bnRlcigiU2NlbmUgcmVuZGVyaW5nIik7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX2ZyYW1lVGltZS5lbmRNb25pdG9yaW5nKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoX3RoaXMuX2NhcHR1cmVSZW5kZXJUaW1lKSB7CisgICAgICAg
ICAgICAgICAgX3RoaXMuX3JlbmRlclRpbWUuZW5kTW9uaXRvcmluZyhmYWxzZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoX3RoaXMuX2NhcHR1cmVJbnRlckZyYW1lVGltZSkgewor
ICAgICAgICAgICAgICAgIF90aGlzLl9pbnRlckZyYW1lVGltZS5iZWdpbk1vbml0b3JpbmcoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJhY3RpdmVNZXNoZXNFdmFsdWF0
aW9uVGltZUNvdW50ZXIiLCB7CisgICAgICAgIC8vIFByb3BlcnRpZXMKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIHBlcmYgY291bnRlciB1c2VkIGZvciBhY3RpdmUgbWVzaGVzIGV2
YWx1YXRpb24gdGltZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlTWVzaGVzRXZhbHVhdGlvblRpbWU7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZUluc3RydW1lbnRh
dGlvbi5wcm90b3R5cGUsICJjYXB0dXJlQWN0aXZlTWVzaGVzRXZhbHVhdGlvblRpbWUiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBhY3RpdmUgbWVzaGVzIGV2YWx1YXRpb24g
dGltZSBjYXB0dXJlIHN0YXR1cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FwdHVyZUFjdGl2ZU1lc2hlc0V2YWx1YXRp
b25UaW1lOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogRW5hYmxlIG9yIGRp
c2FibGUgdGhlIGFjdGl2ZSBtZXNoZXMgZXZhbHVhdGlvbiB0aW1lIGNhcHR1cmUKKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9jYXB0dXJlQWN0aXZl
TWVzaGVzRXZhbHVhdGlvblRpbWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl9jYXB0dXJlQWN0aXZlTWVzaGVzRXZhbHVhdGlvblRp
bWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX29uQmVmb3JlQWN0aXZlTWVzaGVzRXZhbHVhdGlvbk9ic2VydmVyID0gdGhpcy5zY2VuZS5v
bkJlZm9yZUFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlRvb2xzIl0uU3RhcnRQZXJmb3JtYW5jZUNvdW50ZXIoIkFjdGl2ZSBtZXNoZXMgZXZh
bHVhdGlvbiIpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYWN0aXZlTWVzaGVzRXZhbHVh
dGlvblRpbWUuYmVnaW5Nb25pdG9yaW5nKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgdGhpcy5fb25BZnRlckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZlciA9IHRo
aXMuc2NlbmUub25BZnRlckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZhYmxlLmFkZChmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlRvb2xzIl0uRW5kUGVyZm9ybWFuY2VDb3VudGVyKCJBY3RpdmUgbWVz
aGVzIGV2YWx1YXRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FjdGl2ZU1lc2hl
c0V2YWx1YXRpb25UaW1lLmVuZE1vbml0b3JpbmcoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuc2Nl
bmUub25CZWZvcmVBY3RpdmVNZXNoZXNFdmFsdWF0aW9uT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5f
b25CZWZvcmVBY3RpdmVNZXNoZXNFdmFsdWF0aW9uT2JzZXJ2ZXIpOworICAgICAgICAgICAgICAg
IHRoaXMuX29uQmVmb3JlQWN0aXZlTWVzaGVzRXZhbHVhdGlvbk9ic2VydmVyID0gbnVsbDsKKyAg
ICAgICAgICAgICAgICB0aGlzLnNjZW5lLm9uQWZ0ZXJBY3RpdmVNZXNoZXNFdmFsdWF0aW9uT2Jz
ZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25BZnRlckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZl
cik7CisgICAgICAgICAgICAgICAgdGhpcy5fb25BZnRlckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25P
YnNlcnZlciA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJyZW5k
ZXJUYXJnZXRzUmVuZGVyVGltZUNvdW50ZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHRoZSBwZXJmIGNvdW50ZXIgdXNlZCBmb3IgcmVuZGVyIHRhcmdldHMgcmVuZGVyIHRpbWUK
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3JlbmRlclRhcmdldHNSZW5kZXJUaW1lOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAi
Y2FwdHVyZVJlbmRlclRhcmdldHNSZW5kZXJUaW1lIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgcmVuZGVyIHRhcmdldHMgcmVuZGVyIHRpbWUgY2FwdHVyZSBzdGF0dXMKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2NhcHR1cmVSZW5kZXJUYXJnZXRzUmVuZGVyVGltZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSByZW5kZXIgdGFyZ2V0cyBy
ZW5kZXIgdGltZSBjYXB0dXJlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgICAgIGlmICh2
YWx1ZSA9PT0gdGhpcy5fY2FwdHVyZVJlbmRlclRhcmdldHNSZW5kZXJUaW1lKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY2FwdHVy
ZVJlbmRlclRhcmdldHNSZW5kZXJUaW1lID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodmFsdWUp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkJlZm9yZVJlbmRlclRhcmdldHNSZW5kZXJPYnNl
cnZlciA9IHRoaXMuc2NlbmUub25CZWZvcmVSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2YWJsZS5h
ZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLlN0YXJ0UGVyZm9ybWFuY2VDb3VudGVyKCJS
ZW5kZXIgdGFyZ2V0cyByZW5kZXJpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Jl
bmRlclRhcmdldHNSZW5kZXJUaW1lLmJlZ2luTW9uaXRvcmluZygpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJSZW5kZXJUYXJnZXRzUmVuZGVyT2Jz
ZXJ2ZXIgPSB0aGlzLnNjZW5lLm9uQWZ0ZXJSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2YWJsZS5h
ZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLkVuZFBlcmZvcm1hbmNlQ291bnRlcigiUmVu
ZGVyIHRhcmdldHMgcmVuZGVyaW5nIik7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yZW5k
ZXJUYXJnZXRzUmVuZGVyVGltZS5lbmRNb25pdG9yaW5nKGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHRoaXMuc2NlbmUub25CZWZvcmVSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUo
dGhpcy5fb25CZWZvcmVSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2ZXIpOworICAgICAgICAgICAg
ICAgIHRoaXMuX29uQmVmb3JlUmVuZGVyVGFyZ2V0c1JlbmRlck9ic2VydmVyID0gbnVsbDsKKyAg
ICAgICAgICAgICAgICB0aGlzLnNjZW5lLm9uQWZ0ZXJSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2
YWJsZS5yZW1vdmUodGhpcy5fb25BZnRlclJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZlcik7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fb25BZnRlclJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZlciA9
IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJwYXJ0aWNsZXNSZW5k
ZXJUaW1lQ291bnRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmYg
Y291bnRlciB1c2VkIGZvciBwYXJ0aWNsZXMgcmVuZGVyIHRpbWUKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpY2xl
c1JlbmRlclRpbWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJjYXB0dXJlUGFydGljbGVzUmVuZGVy
VGltZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBhcnRpY2xlcyByZW5k
ZXIgdGltZSBjYXB0dXJlIHN0YXR1cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FwdHVyZVBhcnRpY2xlc1JlbmRlclRp
bWU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJs
ZSB0aGUgcGFydGljbGVzIHJlbmRlciB0aW1lIGNhcHR1cmUKKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9jYXB0dXJlUGFydGljbGVzUmVuZGVyVGlt
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX2NhcHR1cmVQYXJ0aWNsZXNSZW5kZXJUaW1lID0gdmFsdWU7CisgICAgICAgICAgICBp
ZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkJlZm9yZVBhcnRpY2xlc1JlbmRl
cmluZ09ic2VydmVyID0gdGhpcy5zY2VuZS5vbkJlZm9yZVBhcnRpY2xlc1JlbmRlcmluZ09ic2Vy
dmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5TdGFydFBlcmZvcm1hbmNlQ291
bnRlcigiUGFydGljbGVzIik7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wYXJ0aWNsZXNS
ZW5kZXJUaW1lLmJlZ2luTW9uaXRvcmluZygpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIHRoaXMuX29uQWZ0ZXJQYXJ0aWNsZXNSZW5kZXJpbmdPYnNlcnZlciA9IHRoaXMu
c2NlbmUub25BZnRlclBhcnRpY2xlc1JlbmRlcmluZ09ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVG9vbHMiXS5FbmRQZXJmb3JtYW5jZUNvdW50ZXIoIlBhcnRpY2xlcyIpOworICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5fcGFydGljbGVzUmVuZGVyVGltZS5lbmRNb25pdG9yaW5n
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUub25CZWZvcmVQYXJ0aWNsZXNSZW5k
ZXJpbmdPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkJlZm9yZVBhcnRpY2xlc1JlbmRlcmluZ09i
c2VydmVyKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkJlZm9yZVBhcnRpY2xlc1JlbmRlcmlu
Z09ic2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLm9uQWZ0ZXJQYXJ0
aWNsZXNSZW5kZXJpbmdPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFmdGVyUGFydGljbGVzUmVu
ZGVyaW5nT2JzZXJ2ZXIpOworICAgICAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJQYXJ0aWNsZXNS
ZW5kZXJpbmdPYnNlcnZlciA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5
cGUsICJzcHJpdGVzUmVuZGVyVGltZUNvdW50ZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBwZXJmIGNvdW50ZXIgdXNlZCBmb3Igc3ByaXRlcyByZW5kZXIgdGltZQorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fc3ByaXRlc1JlbmRlclRpbWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJjYXB0dXJlU3By
aXRlc1JlbmRlclRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBzcHJp
dGVzIHJlbmRlciB0aW1lIGNhcHR1cmUgc3RhdHVzCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXB0dXJlU3ByaXRlc1Jl
bmRlclRpbWU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3Ig
ZGlzYWJsZSB0aGUgc3ByaXRlcyByZW5kZXIgdGltZSBjYXB0dXJlCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIF90aGlzID0gdGhp
czsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fY2FwdHVyZVNwcml0ZXNSZW5kZXJU
aW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fY2FwdHVyZVNwcml0ZXNSZW5kZXJUaW1lID0gdmFsdWU7CisgICAgICAgICAgICBp
ZiAoIXRoaXMuc2NlbmUuc3ByaXRlTWFuYWdlcnMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9vbkJlZm9yZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZlciA9IHRoaXMuc2NlbmUub25C
ZWZvcmVTcHJpdGVzUmVuZGVyaW5nT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJU
b29scyJdLlN0YXJ0UGVyZm9ybWFuY2VDb3VudGVyKCJTcHJpdGVzIik7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl9zcHJpdGVzUmVuZGVyVGltZS5iZWdpbk1vbml0b3JpbmcoKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkFmdGVyU3ByaXRlc1JlbmRl
cmluZ09ic2VydmVyID0gdGhpcy5zY2VuZS5vbkFmdGVyU3ByaXRlc1JlbmRlcmluZ09ic2VydmFi
bGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5FbmRQZXJmb3JtYW5jZUNvdW50ZXIo
IlNwcml0ZXMiKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Nwcml0ZXNSZW5kZXJUaW1l
LmVuZE1vbml0b3JpbmcoZmFsc2UpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5vbkJlZm9y
ZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkJlZm9yZVNwcml0ZXNS
ZW5kZXJpbmdPYnNlcnZlcik7CisgICAgICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVTcHJpdGVz
UmVuZGVyaW5nT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUub25B
ZnRlclNwcml0ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFmdGVyU3ByaXRl
c1JlbmRlcmluZ09ic2VydmVyKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkFmdGVyU3ByaXRl
c1JlbmRlcmluZ09ic2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lSW5zdHJ1bWVudGF0aW9uLnByb3Rv
dHlwZSwgInBoeXNpY3NUaW1lQ291bnRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIHBlcmYgY291bnRlciB1c2VkIGZvciBwaHlzaWNzIHRpbWUKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BoeXNp
Y3NUaW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2Nl
bmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAiY2FwdHVyZVBoeXNpY3NUaW1lIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgcGh5c2ljcyB0aW1lIGNhcHR1cmUgc3RhdHVz
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9jYXB0dXJlUGh5c2ljc1RpbWU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgor
ICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgcGh5c2ljcyB0aW1lIGNhcHR1cmUKKyAg
ICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2
YXIgX3RoaXMgPSB0aGlzOworICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9jYXB0dXJl
UGh5c2ljc1RpbWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIXRoaXMuc2NlbmUub25CZWZvcmVQaHlzaWNzT2JzZXJ2YWJsZSkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X2NhcHR1cmVQaHlzaWNzVGltZSA9IHZhbHVlOworICAgICAgICAgICAgaWYgKHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVQaHlzaWNzT2JzZXJ2ZXIgPSB0aGlzLnNjZW5l
Lm9uQmVmb3JlUGh5c2ljc09ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMi
XS5TdGFydFBlcmZvcm1hbmNlQ291bnRlcigiUGh5c2ljcyIpOworICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5fcGh5c2ljc1RpbWUuYmVnaW5Nb25pdG9yaW5nKCk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgdGhpcy5fb25BZnRlclBoeXNpY3NPYnNlcnZlciA9IHRoaXMu
c2NlbmUub25BZnRlclBoeXNpY3NPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRv
b2xzIl0uRW5kUGVyZm9ybWFuY2VDb3VudGVyKCJQaHlzaWNzIik7CisgICAgICAgICAgICAgICAg
ICAgIF90aGlzLl9waHlzaWNzVGltZS5lbmRNb25pdG9yaW5nKCk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0
aGlzLnNjZW5lLm9uQmVmb3JlUGh5c2ljc09ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQmVmb3Jl
UGh5c2ljc09ic2VydmVyKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkJlZm9yZVBoeXNpY3NP
YnNlcnZlciA9IG51bGw7CisgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5vbkFmdGVyUGh5c2lj
c09ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJQaHlzaWNzT2JzZXJ2ZXIpOworICAgICAg
ICAgICAgICAgIHRoaXMuX29uQWZ0ZXJQaHlzaWNzT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAg
ICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmVJ
bnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAiYW5pbWF0aW9uc1RpbWVDb3VudGVyIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgcGVyZiBjb3VudGVyIHVzZWQgZm9yIGFuaW1h
dGlvbnMgdGltZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fYW5pbWF0aW9uc1RpbWU7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUs
ICJjYXB0dXJlQW5pbWF0aW9uc1RpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSBhbmltYXRpb25zIHRpbWUgY2FwdHVyZSBzdGF0dXMKKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHR1cmVBbmlt
YXRpb25zVGltZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuYWJsZSBv
ciBkaXNhYmxlIHRoZSBhbmltYXRpb25zIHRpbWUgY2FwdHVyZQorICAgICAgICAgKi8KKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX2NhcHR1cmVBbmltYXRpb25zVGltZSkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX2NhcHR1cmVBbmltYXRpb25zVGltZSA9IHZhbHVlOworICAgICAgICAgICAgaWYgKHZhbHVl
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fb25BZnRlckFuaW1hdGlvbnNPYnNlcnZlciA9IHRo
aXMuc2NlbmUub25BZnRlckFuaW1hdGlvbnNPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl9hbmltYXRpb25zVGltZS5lbmRNb25pdG9yaW5nKCk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLm9uQWZ0ZXJBbmltYXRpb25zT2JzZXJ2YWJsZS5y
ZW1vdmUodGhpcy5fb25BZnRlckFuaW1hdGlvbnNPYnNlcnZlcik7CisgICAgICAgICAgICAgICAg
dGhpcy5fb25BZnRlckFuaW1hdGlvbnNPYnNlcnZlciA9IG51bGw7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZUluc3RydW1l
bnRhdGlvbi5wcm90b3R5cGUsICJmcmFtZVRpbWVDb3VudGVyIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgcGVyZiBjb3VudGVyIHVzZWQgZm9yIGZyYW1lIHRpbWUgY2FwdHVy
ZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fZnJhbWVUaW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoU2NlbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAiY2FwdHVyZUZyYW1l
VGltZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGZyYW1lIHRpbWUgY2Fw
dHVyZSBzdGF0dXMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHR1cmVGcmFtZVRpbWU7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgZnJhbWUgdGltZSBjYXB0
dXJlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgdGhpcy5fY2FwdHVyZUZyYW1lVGltZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBl
LCAiaW50ZXJGcmFtZVRpbWVDb3VudGVyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgcGVyZiBjb3VudGVyIHVzZWQgZm9yIGludGVyLWZyYW1lcyB0aW1lIGNhcHR1cmUKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2ludGVyRnJhbWVUaW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoU2NlbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAiY2FwdHVyZUludGVy
RnJhbWVUaW1lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgaW50ZXItZnJh
bWVzIHRpbWUgY2FwdHVyZSBzdGF0dXMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHR1cmVJbnRlckZyYW1lVGltZTsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHRo
ZSBpbnRlci1mcmFtZXMgdGltZSBjYXB0dXJlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fY2FwdHVyZUludGVyRnJhbWVUaW1l
ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShT
Y2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJyZW5kZXJUaW1lQ291bnRlciIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmYgY291bnRlciB1c2VkIGZvciByZW5k
ZXIgdGltZSBjYXB0dXJlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJUaW1lOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBl
LCAiY2FwdHVyZVJlbmRlclRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSByZW5kZXIgdGltZSBjYXB0dXJlIHN0YXR1cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FwdHVyZVJlbmRlclRpbWU7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0
aGUgcmVuZGVyIHRpbWUgY2FwdHVyZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgICAgICBp
ZiAodmFsdWUgPT09IHRoaXMuX2NhcHR1cmVSZW5kZXJUaW1lKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY2FwdHVyZVJlbmRlclRp
bWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX29uQmVmb3JlRHJhd1BoYXNlT2JzZXJ2ZXIgPSB0aGlzLnNjZW5lLm9uQmVmb3JlRHJhd1Bo
YXNlT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fcmVuZGVyVGltZS5iZWdpbk1vbml0b3JpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgX01p
c2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5TdGFydFBlcmZv
cm1hbmNlQ291bnRlcigiTWFpbiByZW5kZXIiKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9vbkFmdGVyRHJhd1BoYXNlT2JzZXJ2ZXIgPSB0aGlzLnNjZW5lLm9u
QWZ0ZXJEcmF3UGhhc2VPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl9yZW5kZXJUaW1lLmVuZE1vbml0b3JpbmcoZmFsc2UpOworICAgICAgICAg
ICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29s
cyJdLkVuZFBlcmZvcm1hbmNlQ291bnRlcigiTWFpbiByZW5kZXIiKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHRoaXMuc2NlbmUub25CZWZvcmVEcmF3UGhhc2VPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkJl
Zm9yZURyYXdQaGFzZU9ic2VydmVyKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkJlZm9yZURy
YXdQaGFzZU9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLm9uQWZ0
ZXJEcmF3UGhhc2VPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFmdGVyRHJhd1BoYXNlT2JzZXJ2
ZXIpOworICAgICAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJEcmF3UGhhc2VPYnNlcnZlciA9IG51
bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJjYW1lcmFSZW5kZXJUaW1l
Q291bnRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmYgY291bnRl
ciB1c2VkIGZvciBjYW1lcmEgcmVuZGVyIHRpbWUgY2FwdHVyZQorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhUmVu
ZGVyVGltZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNj
ZW5lSW5zdHJ1bWVudGF0aW9uLnByb3RvdHlwZSwgImNhcHR1cmVDYW1lcmFSZW5kZXJUaW1lIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgY2FtZXJhIHJlbmRlciB0aW1lIGNh
cHR1cmUgc3RhdHVzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9jYXB0dXJlQ2FtZXJhUmVuZGVyVGltZTsKKyAgICAgICAg
fSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBjYW1lcmEg
cmVuZGVyIHRpbWUgY2FwdHVyZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgICAgICBpZiAo
dmFsdWUgPT09IHRoaXMuX2NhcHR1cmVDYW1lcmFSZW5kZXJUaW1lKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY2FwdHVyZUNhbWVy
YVJlbmRlclRpbWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHRoaXMuX29uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIgPSB0aGlzLnNjZW5lLm9u
QmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGNhbWVyYSkgeworICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5fY2FtZXJhUmVuZGVyVGltZS5iZWdpbk1vbml0b3Jpbmco
KTsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVG9vbHMiXS5TdGFydFBlcmZvcm1hbmNlQ291bnRlcigiUmVuZGVyaW5nIGNhbWVy
YSAiICsgY2FtZXJhLm5hbWUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IHRoaXMuX29uQWZ0ZXJDYW1lcmFSZW5kZXJPYnNlcnZlciA9IHRoaXMuc2NlbmUub25BZnRlckNh
bWVyYVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX2NhbWVyYVJlbmRlclRpbWUuZW5kTW9uaXRvcmluZyhmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlRvb2xzIl0uRW5kUGVyZm9ybWFuY2VDb3VudGVyKCJSZW5kZXJpbmcgY2FtZXJhICIgKyBj
YW1lcmEubmFtZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLm9uQmVmb3JlQ2FtZXJhUmVu
ZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZlcik7
CisgICAgICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZlciA9IG51
bGw7CisgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5vbkFmdGVyQ2FtZXJhUmVuZGVyT2JzZXJ2
YWJsZS5yZW1vdmUodGhpcy5fb25BZnRlckNhbWVyYVJlbmRlck9ic2VydmVyKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9vbkFmdGVyQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIgPSBudWxsOworICAgICAg
ICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2Nl
bmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAiZHJhd0NhbGxzQ291bnRlciIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmYgY291bnRlciB1c2VkIGZvciBkcmF3IGNh
bGxzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLnNjZW5lLmdldEVuZ2luZSgpLl9kcmF3Q2FsbHM7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8qKgorICAgICAqIERpc3Bvc2UgYW5kIHJlbGVhc2UgYXNzb2NpYXRlZCByZXNv
dXJjZXMuCisgICAgICovCisgICAgU2NlbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLmRpc3Bv
c2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuc2NlbmUub25BZnRlclJlbmRlck9ic2Vy
dmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJSZW5kZXJPYnNlcnZlcik7CisgICAgICAgIHRoaXMu
X29uQWZ0ZXJSZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2NlbmUub25CZWZv
cmVBY3RpdmVNZXNoZXNFdmFsdWF0aW9uT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25CZWZvcmVB
Y3RpdmVNZXNoZXNFdmFsdWF0aW9uT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLl9vbkJlZm9yZUFj
dGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2NlbmUu
b25BZnRlckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFm
dGVyQWN0aXZlTWVzaGVzRXZhbHVhdGlvbk9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25BZnRl
ckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2Nl
bmUub25CZWZvcmVSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25C
ZWZvcmVSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLl9vbkJlZm9y
ZVJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2NlbmUu
b25BZnRlclJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFmdGVy
UmVuZGVyVGFyZ2V0c1JlbmRlck9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25BZnRlclJlbmRl
clRhcmdldHNSZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2NlbmUub25CZWZv
cmVBbmltYXRpb25zT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25CZWZvcmVBbmltYXRpb25zT2Jz
ZXJ2ZXIpOworICAgICAgICB0aGlzLl9vbkJlZm9yZUFuaW1hdGlvbnNPYnNlcnZlciA9IG51bGw7
CisgICAgICAgIHRoaXMuc2NlbmUub25CZWZvcmVQYXJ0aWNsZXNSZW5kZXJpbmdPYnNlcnZhYmxl
LnJlbW92ZSh0aGlzLl9vbkJlZm9yZVBhcnRpY2xlc1JlbmRlcmluZ09ic2VydmVyKTsKKyAgICAg
ICAgdGhpcy5fb25CZWZvcmVQYXJ0aWNsZXNSZW5kZXJpbmdPYnNlcnZlciA9IG51bGw7CisgICAg
ICAgIHRoaXMuc2NlbmUub25BZnRlclBhcnRpY2xlc1JlbmRlcmluZ09ic2VydmFibGUucmVtb3Zl
KHRoaXMuX29uQWZ0ZXJQYXJ0aWNsZXNSZW5kZXJpbmdPYnNlcnZlcik7CisgICAgICAgIHRoaXMu
X29uQWZ0ZXJQYXJ0aWNsZXNSZW5kZXJpbmdPYnNlcnZlciA9IG51bGw7CisgICAgICAgIGlmICh0
aGlzLl9vbkJlZm9yZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZlcikgeworICAgICAgICAgICAgdGhp
cy5zY2VuZS5vbkJlZm9yZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9v
bkJlZm9yZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZlcik7CisgICAgICAgICAgICB0aGlzLl9vbkJl
Zm9yZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZlciA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX29uQWZ0ZXJTcHJpdGVzUmVuZGVyaW5nT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAg
IHRoaXMuc2NlbmUub25BZnRlclNwcml0ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLnJlbW92ZSh0aGlz
Ll9vbkFmdGVyU3ByaXRlc1JlbmRlcmluZ09ic2VydmVyKTsKKyAgICAgICAgICAgIHRoaXMuX29u
QWZ0ZXJTcHJpdGVzUmVuZGVyaW5nT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAg
IHRoaXMuc2NlbmUub25CZWZvcmVEcmF3UGhhc2VPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkJl
Zm9yZURyYXdQaGFzZU9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25CZWZvcmVEcmF3UGhhc2VP
YnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2NlbmUub25BZnRlckRyYXdQaGFzZU9ic2Vy
dmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJEcmF3UGhhc2VPYnNlcnZlcik7CisgICAgICAgIHRo
aXMuX29uQWZ0ZXJEcmF3UGhhc2VPYnNlcnZlciA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLl9v
bkJlZm9yZVBoeXNpY3NPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5zY2VuZS5vbkJlZm9y
ZVBoeXNpY3NPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkJlZm9yZVBoeXNpY3NPYnNlcnZlcik7
CisgICAgICAgICAgICB0aGlzLl9vbkJlZm9yZVBoeXNpY3NPYnNlcnZlciA9IG51bGw7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29uQWZ0ZXJQaHlzaWNzT2JzZXJ2ZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMuc2NlbmUub25BZnRlclBoeXNpY3NPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9v
bkFmdGVyUGh5c2ljc09ic2VydmVyKTsKKyAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJQaHlzaWNz
T2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuc2NlbmUub25BZnRlckFu
aW1hdGlvbnNPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFmdGVyQW5pbWF0aW9uc09ic2VydmVy
KTsKKyAgICAgICAgdGhpcy5fb25BZnRlckFuaW1hdGlvbnNPYnNlcnZlciA9IG51bGw7CisgICAg
ICAgIHRoaXMuc2NlbmUub25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlz
Ll9vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25CZWZvcmVD
YW1lcmFSZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2NlbmUub25BZnRlckNh
bWVyYVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJDYW1lcmFSZW5kZXJPYnNl
cnZlcik7CisgICAgICAgIHRoaXMuX29uQWZ0ZXJDYW1lcmFSZW5kZXJPYnNlcnZlciA9IG51bGw7
CisgICAgICAgIHRoaXMuc2NlbmUgPSBudWxsOworICAgIH07CisgICAgcmV0dXJuIFNjZW5lSW5z
dHJ1bWVudGF0aW9uOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9JbnN0cnVt
ZW50YXRpb24vdGltZVRva2VuLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9JbnN0cnVtZW50YXRpb24vdGltZVRva2VuLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IF9UaW1lVG9rZW4gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiX1RpbWVUb2tlbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1RpbWVUb2tlbjsgfSk7CisvKioK
KyAqIEBoaWRkZW4KKyAqKi8KK3ZhciBfVGltZVRva2VuID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgeworICAgIGZ1bmN0aW9uIF9UaW1lVG9rZW4oKSB7CisgICAgICAgIHRoaXMuX3RpbWVF
bGFwc2VkUXVlcnlFbmRlZCA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gX1RpbWVUb2tlbjsK
K30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTGF5ZXJzL2VmZmVjdExheWVyLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0xheWVy
cy9lZmZlY3RMYXllci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEVmZmVjdExheWVyICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdExheWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFZmZl
Y3RMYXllcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9u
b2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9y
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3Rvb2xz
ICovICIuL01pc2MvdG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29s
b3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5l
cy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVz
L2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVy
ZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1Rl
eHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJU
YXJnZXRUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRl
cmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL21hdGVyaWFsICovICIu
L01hdGVyaWFscy9tYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIgKi8gIi4vTWF0
ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFu
dHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19nbG93TWFwR2VuZXJh
dGlvbl9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZ2xvd01hcEdlbmVyYXRpb24uZnJhZ21lbnQgKi8gIi4v
U2hhZGVycy9nbG93TWFwR2VuZXJhdGlvbi5mcmFnbWVudC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9TaGFkZXJzX2dsb3dNYXBHZW5lcmF0aW9uX3ZlcnRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZ2xv
d01hcEdlbmVyYXRpb24udmVydGV4ICovICIuL1NoYWRlcnMvZ2xvd01hcEdlbmVyYXRpb24udmVy
dGV4LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGV2VG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNj
L2RldlRvb2xzICovICIuL01pc2MvZGV2VG9vbHMudHMiKTsKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisvKioKKyAqIFRoZSBlZmZlY3QgbGF5ZXIgSGVscHMgYWRkaW5nIHBvc3Qg
cHJvY2VzcyBlZmZlY3QgYmxlbmRlZCB3aXRoIHRoZSBtYWluIHBhc3MuCisgKgorICogVGhpcyBj
YW4gYmUgZm9yIGluc3RhbmNlIHVzZSB0byBnZW5lcmF0ZSBnbG93IG9yIGhpZ2xpZ2h0IGVmZmVj
dHMgb24gdGhlIHNjZW5lLgorICoKKyAqIFRoZSBlZmZlY3QgbGF5ZXIgY2xhc3MgY2FuIG5vdCBi
ZSB1c2VkIGRpcmVjdGx5IGFuZCBpcyBpbnRlbnRlZCB0byBpbmhlcml0ZWQgZnJvbSB0byBiZQor
ICogY3VzdG9taXplZCBwZXIgZWZmZWN0cy4KKyAqLwordmFyIEVmZmVjdExheWVyID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5l
dyBlZmZlY3QgTGF5ZXIgYW5kIHJlZmVyZW5jZXMgaXQgaW4gdGhlIHNjZW5lLgorICAgICAqIEBw
YXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBsYXllcgorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUg
c2NlbmUgdG8gdXNlIHRoZSBsYXllciBpbgorICAgICAqLworICAgIGZ1bmN0aW9uIEVmZmVjdExh
eWVyKAorICAgIC8qKiBUaGUgRnJpZW5kbHkgb2YgdGhlIGVmZmVjdCBpbiB0aGUgc2NlbmUgKi8K
KyAgICBuYW1lLCBzY2VuZSkgeworICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzID0ge307Cisg
ICAgICAgIHRoaXMuX21heFNpemUgPSAwOworICAgICAgICB0aGlzLl9tYWluVGV4dHVyZURlc2ly
ZWRTaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07CisgICAgICAgIHRoaXMuX3Nob3VsZFJl
bmRlciA9IHRydWU7CisgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzZXMgPSBbXTsKKyAgICAgICAg
dGhpcy5fdGV4dHVyZXMgPSBbXTsKKyAgICAgICAgdGhpcy5fZW1pc3NpdmVUZXh0dXJlQW5kQ29s
b3IgPSB7IHRleHR1cmU6IG51bGwsIGNvbG9yOiBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29sb3I0Il0oKSB9OworICAgICAgICAvKioKKyAgICAg
ICAgICogVGhlIGNsZWFyIGNvbG9yIG9mIHRoZSB0ZXh0dXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhl
IGdsb3cgbWFwLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5uZXV0cmFsQ29sb3IgPSBuZXcg
X01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29sb3I0Il0o
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyB3ZXRoZXIgdGhlIGhpZ2hsaWdo
dCBsYXllciBpcyBlbmFibGVkIG9yIG5vdC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaXNF
bmFibGVkID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJl
ZCB3aGVuIHRoZSBlZmZlY3QgbGF5ZXIgaGFzIGJlZW4gZGlzcG9zZWQuCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBlZmZlY3QgbGF5ZXIgaXMg
YWJvdXQgcmVuZGVyaW5nIHRoZSBtYWluIHRleHR1cmUgd2l0aCB0aGUgZ2xvd3kgcGFydHMuCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLm9uQmVmb3JlUmVuZGVyTWFpblRleHR1cmVPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBbiBldmVudCB0cmlnZ2Vy
ZWQgd2hlbiB0aGUgZ2VuZXJhdGVkIHRleHR1cmUgaXMgYmVpbmcgbWVyZ2VkIGluIHRoZSBzY2Vu
ZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25CZWZvcmVDb21wb3NlT2JzZXJ2YWJsZSA9
IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2Vy
dmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdo
ZW4gdGhlIGdlbmVyYXRlZCB0ZXh0dXJlIGhhcyBiZWVuIG1lcmdlZCBpbiB0aGUgc2NlbmUuCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLm9uQWZ0ZXJDb21wb3NlT2JzZXJ2YWJsZSA9IG5ldyBf
TWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUi
XSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhl
IGVmZmZlY3QgbGF5ZXIgY2hhbmdlcyBpdHMgc2l6ZS4KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMub25TaXplQ2hhbmdlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgdGhpcy5uYW1l
ID0gbmFtZTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8fCBfRW5naW5lc19lbmdpbmVT
dG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVh
dGVkU2NlbmU7CisgICAgICAgIEVmZmVjdExheWVyLl9TY2VuZUNvbXBvbmVudEluaXRpYWxpemF0
aW9uKHRoaXMuX3NjZW5lKTsKKyAgICAgICAgdGhpcy5fZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0
RW5naW5lKCk7CisgICAgICAgIHRoaXMuX21heFNpemUgPSB0aGlzLl9lbmdpbmUuZ2V0Q2Fwcygp
Lm1heFRleHR1cmVTaXplOworICAgICAgICB0aGlzLl9zY2VuZS5lZmZlY3RMYXllcnMucHVzaCh0
aGlzKTsKKyAgICAgICAgLy8gR2VuZXJhdGUgQnVmZmVycworICAgICAgICB0aGlzLl9nZW5lcmF0
ZUluZGV4QnVmZmVyKCk7CisgICAgICAgIHRoaXMuX2dlbmVyYXRlVmVydGV4QnVmZmVyKCk7Cisg
ICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFZmZlY3RMYXllci5wcm90b3R5cGUsICJj
YW1lcmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjYW1lcmEgYXR0YWNo
ZWQgdG8gdGhlIGxheWVyLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZWZmZWN0TGF5ZXJPcHRpb25zLmNhbWVyYTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVmZmVjdExheWVyLnBy
b3RvdHlwZSwgInJlbmRlcmluZ0dyb3VwSWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHRoZSByZW5kZXJpbmcgZ3JvdXAgaWQgdGhlIGxheWVyIHNob3VsZCByZW5kZXIgaW4uCisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9lZmZlY3RMYXllck9wdGlvbnMucmVuZGVyaW5nR3JvdXBJZDsKKyAgICAgICAgfSwK
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAocmVuZGVyaW5nR3JvdXBJZCkgeworICAgICAgICAgICAg
dGhpcy5fZWZmZWN0TGF5ZXJPcHRpb25zLnJlbmRlcmluZ0dyb3VwSWQgPSByZW5kZXJpbmdHcm91
cElkOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUg
ZWZmZWN0IGxheWVyIHdpdGggdGhlIHJlcXVpcmVkIG9wdGlvbnMuCisgICAgICogQHBhcmFtIG9w
dGlvbnMgU2V0cyBvZiBub25lIG1hbmRhdG9yeSBvcHRpb25zIHRvIHVzZSB3aXRoIHRoZSBsYXll
ciAoc2VlIElFZmZlY3RMYXllck9wdGlvbnMgZm9yIG1vcmUgaW5mb3JtYXRpb24pCisgICAgICov
CisgICAgRWZmZWN0TGF5ZXIucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsK
KyAgICAgICAgLy8gQWRhcHQgb3B0aW9ucworICAgICAgICB0aGlzLl9lZmZlY3RMYXllck9wdGlv
bnMgPSB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fzc2lnbiJdKHsgbWFp
blRleHR1cmVSYXRpbzogMC41LCBhbHBoYUJsZW5kaW5nTW9kZTogX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJDb25zdGFudHMiXS5BTFBIQV9DT01CSU5F
LCBjYW1lcmE6IG51bGwsIHJlbmRlcmluZ0dyb3VwSWQ6IC0xIH0sIG9wdGlvbnMpOworICAgICAg
ICB0aGlzLl9zZXRNYWluVGV4dHVyZVNpemUoKTsKKyAgICAgICAgdGhpcy5fY3JlYXRlTWFpblRl
eHR1cmUoKTsKKyAgICAgICAgdGhpcy5fY3JlYXRlVGV4dHVyZUFuZFBvc3RQcm9jZXNzZXMoKTsK
KyAgICAgICAgdGhpcy5fbWVyZ2VFZmZlY3QgPSB0aGlzLl9jcmVhdGVNZXJnZUVmZmVjdCgpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogR2VuZXJhdGVzIHRoZSBpbmRleCBidWZmZXIgb2YgdGhl
IGZ1bGwgc2NyZWVuIHF1YWQgYmxlbmRpbmcgdG8gdGhlIG1haW4gY2FudmFzLgorICAgICAqLwor
ICAgIEVmZmVjdExheWVyLnByb3RvdHlwZS5fZ2VuZXJhdGVJbmRleEJ1ZmZlciA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgLy8gSW5kaWNlcworICAgICAgICB2YXIgaW5kaWNlcyA9IFtdOworICAg
ICAgICBpbmRpY2VzLnB1c2goMCk7CisgICAgICAgIGluZGljZXMucHVzaCgxKTsKKyAgICAgICAg
aW5kaWNlcy5wdXNoKDIpOworICAgICAgICBpbmRpY2VzLnB1c2goMCk7CisgICAgICAgIGluZGlj
ZXMucHVzaCgyKTsKKyAgICAgICAgaW5kaWNlcy5wdXNoKDMpOworICAgICAgICB0aGlzLl9pbmRl
eEJ1ZmZlciA9IHRoaXMuX2VuZ2luZS5jcmVhdGVJbmRleEJ1ZmZlcihpbmRpY2VzKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdlbmVyYXRlcyB0aGUgdmVydGV4IGJ1ZmZlciBvZiB0aGUgZnVs
bCBzY3JlZW4gcXVhZCBibGVuZGluZyB0byB0aGUgbWFpbiBjYW52YXMuCisgICAgICovCisgICAg
RWZmZWN0TGF5ZXIucHJvdG90eXBlLl9nZW5lcmF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgLy8gVkJPCisgICAgICAgIHZhciB2ZXJ0aWNlcyA9IFtdOworICAgICAgICB2
ZXJ0aWNlcy5wdXNoKDEsIDEpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKC0xLCAxKTsKKyAgICAg
ICAgdmVydGljZXMucHVzaCgtMSwgLTEpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKDEsIC0xKTsK
KyAgICAgICAgdmFyIHZlcnRleEJ1ZmZlciA9IG5ldyBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJWZXJ0ZXhCdWZmZXIiXSh0aGlzLl9lbmdpbmUsIHZlcnRpY2Vz
LCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZXJ0ZXhCdWZm
ZXIiXS5Qb3NpdGlvbktpbmQsIGZhbHNlLCBmYWxzZSwgMik7CisgICAgICAgIHRoaXMuX3ZlcnRl
eEJ1ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVy
dGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXSA9IHZlcnRleEJ1ZmZlcjsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFNldHMgdGhlIG1haW4gdGV4dHVyZSBkZXNpcmVkIHNpemUgd2hpY2ggaXMgdGhl
IGNsb3Nlc3QgcG93ZXIgb2YgdHdvCisgICAgICogb2YgdGhlIGVuZ2luZSBjYW52YXMgc2l6ZS4K
KyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuX3NldE1haW5UZXh0dXJlU2l6ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2VmZmVjdExheWVyT3B0aW9ucy5tYWlu
VGV4dHVyZUZpeGVkU2l6ZSkgeworICAgICAgICAgICAgdGhpcy5fbWFpblRleHR1cmVEZXNpcmVk
U2l6ZS53aWR0aCA9IHRoaXMuX2VmZmVjdExheWVyT3B0aW9ucy5tYWluVGV4dHVyZUZpeGVkU2l6
ZTsKKyAgICAgICAgICAgIHRoaXMuX21haW5UZXh0dXJlRGVzaXJlZFNpemUuaGVpZ2h0ID0gdGhp
cy5fZWZmZWN0TGF5ZXJPcHRpb25zLm1haW5UZXh0dXJlRml4ZWRTaXplOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fbWFpblRleHR1cmVEZXNpcmVkU2l6ZS53
aWR0aCA9IHRoaXMuX2VuZ2luZS5nZXRSZW5kZXJXaWR0aCgpICogdGhpcy5fZWZmZWN0TGF5ZXJP
cHRpb25zLm1haW5UZXh0dXJlUmF0aW87CisgICAgICAgICAgICB0aGlzLl9tYWluVGV4dHVyZURl
c2lyZWRTaXplLmhlaWdodCA9IHRoaXMuX2VuZ2luZS5nZXRSZW5kZXJIZWlnaHQoKSAqIHRoaXMu
X2VmZmVjdExheWVyT3B0aW9ucy5tYWluVGV4dHVyZVJhdGlvOworICAgICAgICAgICAgdGhpcy5f
bWFpblRleHR1cmVEZXNpcmVkU2l6ZS53aWR0aCA9IHRoaXMuX2VuZ2luZS5uZWVkUE9UVGV4dHVy
ZXMgPyBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRW5naW5l
Il0uR2V0RXhwb25lbnRPZlR3byh0aGlzLl9tYWluVGV4dHVyZURlc2lyZWRTaXplLndpZHRoLCB0
aGlzLl9tYXhTaXplKSA6IHRoaXMuX21haW5UZXh0dXJlRGVzaXJlZFNpemUud2lkdGg7CisgICAg
ICAgICAgICB0aGlzLl9tYWluVGV4dHVyZURlc2lyZWRTaXplLmhlaWdodCA9IHRoaXMuX2VuZ2lu
ZS5uZWVkUE9UVGV4dHVyZXMgPyBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siRW5naW5lIl0uR2V0RXhwb25lbnRPZlR3byh0aGlzLl9tYWluVGV4dHVyZURlc2ly
ZWRTaXplLmhlaWdodCwgdGhpcy5fbWF4U2l6ZSkgOiB0aGlzLl9tYWluVGV4dHVyZURlc2lyZWRT
aXplLmhlaWdodDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9tYWluVGV4dHVyZURlc2lyZWRT
aXplLndpZHRoID0gTWF0aC5mbG9vcih0aGlzLl9tYWluVGV4dHVyZURlc2lyZWRTaXplLndpZHRo
KTsKKyAgICAgICAgdGhpcy5fbWFpblRleHR1cmVEZXNpcmVkU2l6ZS5oZWlnaHQgPSBNYXRoLmZs
b29yKHRoaXMuX21haW5UZXh0dXJlRGVzaXJlZFNpemUuaGVpZ2h0KTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgdGhlIG1haW4gdGV4dHVyZSBmb3IgdGhlIGVmZmVjdCBsYXllci4K
KyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuX2NyZWF0ZU1haW5UZXh0dXJlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl9t
YWluVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdKCJIaWdo
bGlnaHRMYXllck1haW5SVFQiLCB7CisgICAgICAgICAgICB3aWR0aDogdGhpcy5fbWFpblRleHR1
cmVEZXNpcmVkU2l6ZS53aWR0aCwKKyAgICAgICAgICAgIGhlaWdodDogdGhpcy5fbWFpblRleHR1
cmVEZXNpcmVkU2l6ZS5oZWlnaHQKKyAgICAgICAgfSwgdGhpcy5fc2NlbmUsIGZhbHNlLCB0cnVl
LCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkNvbnN0
YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCk7CisgICAgICAgIHRoaXMuX21haW5UZXh0
dXJlLmFjdGl2ZUNhbWVyYSA9IHRoaXMuX2VmZmVjdExheWVyT3B0aW9ucy5jYW1lcmE7CisgICAg
ICAgIHRoaXMuX21haW5UZXh0dXJlLndyYXBVID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNTTU9E
RTsKKyAgICAgICAgdGhpcy5fbWFpblRleHR1cmUud3JhcFYgPSBfTWF0ZXJpYWxzX1RleHR1cmVz
X3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVGV4dHVyZSJdLkNMQU1QX0FE
RFJFU1NNT0RFOworICAgICAgICB0aGlzLl9tYWluVGV4dHVyZS5hbmlzb3Ryb3BpY0ZpbHRlcmlu
Z0xldmVsID0gMTsKKyAgICAgICAgdGhpcy5fbWFpblRleHR1cmUudXBkYXRlU2FtcGxpbmdNb2Rl
KF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
WyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFKTsKKyAgICAgICAgdGhpcy5fbWFpblRl
eHR1cmUucmVuZGVyUGFydGljbGVzID0gZmFsc2U7CisgICAgICAgIHRoaXMuX21haW5UZXh0dXJl
LnJlbmRlckxpc3QgPSBudWxsOworICAgICAgICB0aGlzLl9tYWluVGV4dHVyZS5pZ25vcmVDYW1l
cmFWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIC8vIEN1c3RvbSByZW5kZXIgZnVuY3Rpb24KKyAg
ICAgICAgdGhpcy5fbWFpblRleHR1cmUuY3VzdG9tUmVuZGVyRnVuY3Rpb24gPSBmdW5jdGlvbiAo
b3BhcXVlU3ViTWVzaGVzLCBhbHBoYVRlc3RTdWJNZXNoZXMsIHRyYW5zcGFyZW50U3ViTWVzaGVz
LCBkZXB0aE9ubHlTdWJNZXNoZXMpIHsKKyAgICAgICAgICAgIF90aGlzLm9uQmVmb3JlUmVuZGVy
TWFpblRleHR1cmVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhfdGhpcyk7CisgICAgICAgICAg
ICB2YXIgaW5kZXg7CisgICAgICAgICAgICB2YXIgZW5naW5lID0gX3RoaXMuX3NjZW5lLmdldEVu
Z2luZSgpOworICAgICAgICAgICAgaWYgKGRlcHRoT25seVN1Yk1lc2hlcy5sZW5ndGgpIHsKKyAg
ICAgICAgICAgICAgICBlbmdpbmUuc2V0Q29sb3JXcml0ZShmYWxzZSk7CisgICAgICAgICAgICAg
ICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZGVwdGhPbmx5U3ViTWVzaGVzLmxlbmd0aDsgaW5k
ZXgrKykgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcmVuZGVyU3ViTWVzaChkZXB0aE9u
bHlTdWJNZXNoZXMuZGF0YVtpbmRleF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbmdpbmUuc2V0Q29sb3JXcml0ZSh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG9wYXF1ZVN1Yk1lc2hlcy5sZW5ndGg7IGluZGV4
KyspIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fcmVuZGVyU3ViTWVzaChvcGFxdWVTdWJNZXNo
ZXMuZGF0YVtpbmRleF0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbmRleCA9
IDA7IGluZGV4IDwgYWxwaGFUZXN0U3ViTWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgICAgIF90aGlzLl9yZW5kZXJTdWJNZXNoKGFscGhhVGVzdFN1Yk1lc2hlcy5kYXRhW2lu
ZGV4XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcHJldmlvdXNBbHBoYU1vZGUg
PSBlbmdpbmUuZ2V0QWxwaGFNb2RlKCk7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5k
ZXggPCB0cmFuc3BhcmVudFN1Yk1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAg
ICAgICBfdGhpcy5fcmVuZGVyU3ViTWVzaCh0cmFuc3BhcmVudFN1Yk1lc2hlcy5kYXRhW2luZGV4
XSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbmdpbmUuc2V0QWxwaGFNb2Rl
KHByZXZpb3VzQWxwaGFNb2RlKTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fbWFpblRleHR1
cmUub25DbGVhck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlbmdpbmUpIHsKKyAgICAgICAgICAg
IGVuZ2luZS5jbGVhcihfdGhpcy5uZXV0cmFsQ29sb3IsIHRydWUsIHRydWUsIHRydWUpOworICAg
ICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgc3BlY2lmaWMgZWZmZWN0cyBk
ZWZpbmVzLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIFRoZSBkZWZpbmVzIHRvIGFkZCBzcGVjaWZp
Y3MgdG8uCisgICAgICovCisgICAgRWZmZWN0TGF5ZXIucHJvdG90eXBlLl9hZGRDdXN0b21FZmZl
Y3REZWZpbmVzID0gZnVuY3Rpb24gKGRlZmluZXMpIHsKKyAgICAgICAgLy8gTm90aGluZyB0byBh
ZGQgYnkgZGVmYXVsdC4KKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyBmb3IgdGhlIHJl
YWRpbmVzcyBvZiB0aGUgZWxlbWVudCBjb21wb3NpbmcgdGhlIGxheWVyLgorICAgICAqIEBwYXJh
bSBzdWJNZXNoIHRoZSBtZXNoIHRvIGNoZWNrIGZvcgorICAgICAqIEBwYXJhbSB1c2VJbnN0YW5j
ZXMgc3BlY2lmeSB3ZXRoZXIgb3Igbm90IHRvIHVzZSBpbnN0YW5jZXMgdG8gcmVuZGVyIHRoZSBt
ZXNoCisgICAgICogQHBhcmFtIGVtaXNzaXZlVGV4dHVyZSB0aGUgYXNzb2NpYXRlZCBlbWlzc2l2
ZSB0ZXh0dXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGdsb3cKKyAgICAgKiBAcmV0dXJuIHRydWUg
aWYgcmVhZHkgb3RoZXJ3aXNlLCBmYWxzZQorICAgICAqLworICAgIEVmZmVjdExheWVyLnByb3Rv
dHlwZS5faXNSZWFkeSA9IGZ1bmN0aW9uIChzdWJNZXNoLCB1c2VJbnN0YW5jZXMsIGVtaXNzaXZl
VGV4dHVyZSkgeworICAgICAgICB2YXIgbWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7
CisgICAgICAgIGlmICghbWF0ZXJpYWwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIW1hdGVyaWFsLmlzUmVhZHlGb3JTdWJNZXNoKHN1Yk1lc2gu
Z2V0TWVzaCgpLCBzdWJNZXNoLCB1c2VJbnN0YW5jZXMpKSB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRlZmluZXMgPSBbXTsKKyAgICAgICAgdmFy
IGF0dHJpYnMgPSBbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
VmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgdmFyIG1lc2ggPSBzdWJNZXNo
LmdldE1lc2goKTsKKyAgICAgICAgdmFyIHV2MSA9IGZhbHNlOworICAgICAgICB2YXIgdXYyID0g
ZmFsc2U7CisgICAgICAgIC8vIERpZmZ1c2UKKyAgICAgICAgaWYgKG1hdGVyaWFsKSB7CisgICAg
ICAgICAgICB2YXIgbmVlZEFscGhhVGVzdCA9IG1hdGVyaWFsLm5lZWRBbHBoYVRlc3RpbmcoKTsK
KyAgICAgICAgICAgIHZhciBkaWZmdXNlVGV4dHVyZSA9IG1hdGVyaWFsLmdldEFscGhhVGVzdFRl
eHR1cmUoKTsKKyAgICAgICAgICAgIHZhciBuZWVkQWxwaGFCbGVuZEZyb21EaWZmdXNlID0gZGlm
ZnVzZVRleHR1cmUgJiYgZGlmZnVzZVRleHR1cmUuaGFzQWxwaGEgJiYKKyAgICAgICAgICAgICAg
ICAobWF0ZXJpYWwudXNlQWxwaGFGcm9tRGlmZnVzZVRleHR1cmUgfHwgbWF0ZXJpYWwuX3VzZUFs
cGhhRnJvbUFsYmVkb1RleHR1cmUpOworICAgICAgICAgICAgaWYgKGRpZmZ1c2VUZXh0dXJlICYm
IChuZWVkQWxwaGFUZXN0IHx8IG5lZWRBbHBoYUJsZW5kRnJvbURpZmZ1c2UpKSB7CisgICAgICAg
ICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIERJRkZVU0UiKTsKKyAgICAgICAgICAgICAg
ICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4QnVmZmVyIl0uVVYyS2luZCkgJiYKKyAgICAgICAg
ICAgICAgICAgICAgZGlmZnVzZVRleHR1cmUuY29vcmRpbmF0ZXNJbmRleCA9PT0gMSkgeworICAg
ICAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgRElGRlVTRVVWMiIpOworICAg
ICAgICAgICAgICAgICAgICB1djIgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChtZXNoLmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpKSB7
CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBESUZGVVNFVVYxIik7
CisgICAgICAgICAgICAgICAgICAgIHV2MSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChuZWVkQWxwaGFUZXN0KSB7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmluZXMucHVzaCgiI2RlZmluZSBBTFBIQVRFU1QiKTsKKyAgICAgICAgICAgICAgICAgICAgZGVm
aW5lcy5wdXNoKCIjZGVmaW5lIEFMUEhBVEVTVFZBTFVFIDAuNCIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBvcGFjaXR5VGV4dHVyZSA9IG1hdGVy
aWFsLm9wYWNpdHlUZXh0dXJlOworICAgICAgICAgICAgaWYgKG9wYWNpdHlUZXh0dXJlKSB7Cisg
ICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIE9QQUNJVFkiKTsKKyAgICAgICAg
ICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4QnVmZmVyIl0uVVYyS2luZCkgJiYKKyAg
ICAgICAgICAgICAgICAgICAgb3BhY2l0eVRleHR1cmUuY29vcmRpbmF0ZXNJbmRleCA9PT0gMSkg
eworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgT1BBQ0lUWVVWMiIp
OworICAgICAgICAgICAgICAgICAgICB1djIgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChtZXNoLmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktp
bmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBPUEFDSVRZ
VVYxIik7CisgICAgICAgICAgICAgICAgICAgIHV2MSA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEVtaXNzaXZlCisgICAgICAg
IGlmIChlbWlzc2l2ZVRleHR1cmUpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmlu
ZSBFTUlTU0lWRSIpOworICAgICAgICAgICAgaWYgKG1lc2guaXNWZXJ0aWNlc0RhdGFQcmVzZW50
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1ZmZl
ciJdLlVWMktpbmQpICYmCisgICAgICAgICAgICAgICAgZW1pc3NpdmVUZXh0dXJlLmNvb3JkaW5h
dGVzSW5kZXggPT09IDEpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUg
RU1JU1NJVkVVVjIiKTsKKyAgICAgICAgICAgICAgICB1djIgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4QnVmZmVyIl0uVVZL
aW5kKSkgeworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBFTUlTU0lWRVVW
MSIpOworICAgICAgICAgICAgICAgIHV2MSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgLy8gVmVydGV4CisgICAgICAgIGlmIChtZXNoLmlzVmVydGljZXNEYXRhUHJl
c2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZXJ0ZXhC
dWZmZXIiXS5Db2xvcktpbmQpICYmIG1lc2guaGFzVmVydGV4QWxwaGEpIHsKKyAgICAgICAgICAg
IGF0dHJpYnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQpOworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIj
ZGVmaW5lIFZFUlRFWEFMUEhBIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHV2MSkgeworICAg
ICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCk7CisgICAgICAgICAgICBkZWZpbmVzLnB1
c2goIiNkZWZpbmUgVVYxIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHV2MikgeworICAgICAg
ICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIlZlcnRleEJ1ZmZlciJdLlVWMktpbmQpOworICAgICAgICAgICAgZGVmaW5lcy5wdXNo
KCIjZGVmaW5lIFVWMiIpOworICAgICAgICB9CisgICAgICAgIC8vIEJvbmVzCisgICAgICAgIHZh
ciBmYWxsYmFja3MgPSBuZXcgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEwX19bIkVmZmVjdEZhbGxiYWNrcyJdKCk7CisgICAgICAgIGlmIChtZXNoLnVzZUJvbmVz
ICYmIG1lc2guY29tcHV0ZUJvbmVzVXNpbmdTaGFkZXJzKSB7CisgICAgICAgICAgICBhdHRyaWJz
LnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4
QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCk7CisgICAgICAgICAgICBhdHRyaWJzLnB1c2go
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4QnVmZmVy
Il0uTWF0cmljZXNXZWlnaHRzS2luZCk7CisgICAgICAgICAgICBpZiAobWVzaC5udW1Cb25lSW5m
bHVlbmNlcnMgPiA0KSB7CisgICAgICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2Vz
SW5kaWNlc0V4dHJhS2luZCk7CisgICAgICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLk1hdHJp
Y2VzV2VpZ2h0c0V4dHJhS2luZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZpbmVz
LnB1c2goIiNkZWZpbmUgTlVNX0JPTkVfSU5GTFVFTkNFUlMgIiArIG1lc2gubnVtQm9uZUluZmx1
ZW5jZXJzKTsKKyAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IG1lc2guc2tlbGV0b247CisgICAg
ICAgICAgICBpZiAoc2tlbGV0b24gJiYgc2tlbGV0b24uaXNVc2luZ1RleHR1cmVGb3JNYXRyaWNl
cykgeworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBCT05FVEVYVFVSRSIp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZGVm
aW5lcy5wdXNoKCIjZGVmaW5lIEJvbmVzUGVyTWVzaCAiICsgKHNrZWxldG9uID8gKHNrZWxldG9u
LmJvbmVzLmxlbmd0aCArIDEpIDogMCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KG1lc2gubnVtQm9uZUluZmx1ZW5jZXJzID4gMCkgeworICAgICAgICAgICAgICAgIGZhbGxiYWNr
cy5hZGRDUFVTa2lubmluZ0ZhbGxiYWNrKDAsIG1lc2gpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIE5V
TV9CT05FX0lORkxVRU5DRVJTIDAiKTsKKyAgICAgICAgfQorICAgICAgICAvLyBNb3JwaCB0YXJn
ZXRzCisgICAgICAgIHZhciBtYW5hZ2VyID0gbWVzaC5tb3JwaFRhcmdldE1hbmFnZXI7CisgICAg
ICAgIHZhciBtb3JwaEluZmx1ZW5jZXJzID0gMDsKKyAgICAgICAgaWYgKG1hbmFnZXIpIHsKKyAg
ICAgICAgICAgIGlmIChtYW5hZ2VyLm51bUluZmx1ZW5jZXJzID4gMCkgeworICAgICAgICAgICAg
ICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBNT1JQSFRBUkdFVFMiKTsKKyAgICAgICAgICAgICAg
ICBtb3JwaEluZmx1ZW5jZXJzID0gbWFuYWdlci5udW1JbmZsdWVuY2VyczsKKyAgICAgICAgICAg
ICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgTlVNX01PUlBIX0lORkxVRU5DRVJTICIgKyBtb3Jw
aEluZmx1ZW5jZXJzKTsKKyAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVB
dHRyaWJ1dGVzRm9yTW9ycGhUYXJnZXRzSW5mbHVlbmNlcnMoYXR0cmlicywgbWVzaCwgbW9ycGhJ
bmZsdWVuY2Vycyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5zdGFu
Y2VzCisgICAgICAgIGlmICh1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVz
aCgiI2RlZmluZSBJTlNUQU5DRVMiKTsKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxI
ZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIk1hdGVyaWFsSGVscGVyIl0uUHVz
aEF0dHJpYnV0ZXNGb3JJbnN0YW5jZXMoYXR0cmlicyk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fYWRkQ3VzdG9tRWZmZWN0RGVmaW5lcyhkZWZpbmVzKTsKKyAgICAgICAgLy8gR2V0IGNvcnJl
Y3QgZWZmZWN0CisgICAgICAgIHZhciBqb2luID0gZGVmaW5lcy5qb2luKCJcbiIpOworICAgICAg
ICBpZiAodGhpcy5fY2FjaGVkRGVmaW5lcyAhPT0gam9pbikgeworICAgICAgICAgICAgdGhpcy5f
Y2FjaGVkRGVmaW5lcyA9IGpvaW47CisgICAgICAgICAgICB0aGlzLl9lZmZlY3RMYXllck1hcEdl
bmVyYXRpb25FZmZlY3QgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5jcmVhdGVFZmZlY3QoImds
b3dNYXBHZW5lcmF0aW9uIiwgYXR0cmlicywgWyJ3b3JsZCIsICJtQm9uZXMiLCAidmlld1Byb2pl
Y3Rpb24iLAorICAgICAgICAgICAgICAgICJnbG93Q29sb3IiLCAibW9ycGhUYXJnZXRJbmZsdWVu
Y2VzIiwgImJvbmVUZXh0dXJlV2lkdGgiLAorICAgICAgICAgICAgICAgICJkaWZmdXNlTWF0cml4
IiwgImVtaXNzaXZlTWF0cml4IiwgIm9wYWNpdHlNYXRyaXgiLCAib3BhY2l0eUludGVuc2l0eSJd
LCBbImRpZmZ1c2VTYW1wbGVyIiwgImVtaXNzaXZlU2FtcGxlciIsICJvcGFjaXR5U2FtcGxlciIs
ICJib25lU2FtcGxlciJdLCBqb2luLCBmYWxsYmFja3MsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7
IG1heFNpbXVsdGFuZW91c01vcnBoVGFyZ2V0czogbW9ycGhJbmZsdWVuY2VycyB9KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fZWZmZWN0TGF5ZXJNYXBHZW5lcmF0aW9uRWZmZWN0
LmlzUmVhZHkoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbmRlcnMgdGhlIGdsb3dpbmcg
cGFydCBvZiB0aGUgc2NlbmUgYnkgYmxlbmRpbmcgdGhlIGJsdXJyZWQgZ2xvd2luZyBtZXNoZXMg
b24gdG9wIG9mIHRoZSByZW5kZXJlZCBzY2VuZS4KKyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5w
cm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgY3VycmVudEVmZmVj
dCA9IHRoaXMuX21lcmdlRWZmZWN0OworICAgICAgICAvLyBDaGVjaworICAgICAgICBpZiAoIWN1
cnJlbnRFZmZlY3QuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wb3N0UHJvY2Vzc2VzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3Bvc3RQcm9jZXNzZXNbaV0uaXNSZWFkeSgp
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgdGhp
cy5vbkJlZm9yZUNvbXBvc2VPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAg
ICAgLy8gUmVuZGVyCisgICAgICAgIGVuZ2luZS5lbmFibGVFZmZlY3QoY3VycmVudEVmZmVjdCk7
CisgICAgICAgIGVuZ2luZS5zZXRTdGF0ZShmYWxzZSk7CisgICAgICAgIC8vIFZCT3MKKyAgICAg
ICAgZW5naW5lLmJpbmRCdWZmZXJzKHRoaXMuX3ZlcnRleEJ1ZmZlcnMsIHRoaXMuX2luZGV4QnVm
ZmVyLCBjdXJyZW50RWZmZWN0KTsKKyAgICAgICAgLy8gQ2FjaGUKKyAgICAgICAgdmFyIHByZXZp
b3VzQWxwaGFNb2RlID0gZW5naW5lLmdldEFscGhhTW9kZSgpOworICAgICAgICAvLyBHbyBCbGVu
ZC4KKyAgICAgICAgZW5naW5lLnNldEFscGhhTW9kZSh0aGlzLl9lZmZlY3RMYXllck9wdGlvbnMu
YWxwaGFCbGVuZGluZ01vZGUpOworICAgICAgICAvLyBCbGVuZHMgdGhlIG1hcCBvbiB0aGUgbWFp
biBjYW52YXMuCisgICAgICAgIHRoaXMuX2ludGVybmFsUmVuZGVyKGN1cnJlbnRFZmZlY3QpOwor
ICAgICAgICAvLyBSZXN0b3JlIEFscGhhCisgICAgICAgIGVuZ2luZS5zZXRBbHBoYU1vZGUocHJl
dmlvdXNBbHBoYU1vZGUpOworICAgICAgICB0aGlzLm9uQWZ0ZXJDb21wb3NlT2JzZXJ2YWJsZS5u
b3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIC8vIEhhbmRsZSBzaXplIGNoYW5nZXMuCisg
ICAgICAgIHZhciBzaXplID0gdGhpcy5fbWFpblRleHR1cmUuZ2V0U2l6ZSgpOworICAgICAgICB0
aGlzLl9zZXRNYWluVGV4dHVyZVNpemUoKTsKKyAgICAgICAgaWYgKHNpemUud2lkdGggIT09IHRo
aXMuX21haW5UZXh0dXJlRGVzaXJlZFNpemUud2lkdGggfHwgc2l6ZS5oZWlnaHQgIT09IHRoaXMu
X21haW5UZXh0dXJlRGVzaXJlZFNpemUuaGVpZ2h0KSB7CisgICAgICAgICAgICAvLyBSZWNyZWF0
ZSBSVFQgYW5kIHBvc3QgcHJvY2Vzc2VzIG9uIHNpemUgY2hhbmdlLgorICAgICAgICAgICAgdGhp
cy5vblNpemVDaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAg
ICAgICB0aGlzLl9kaXNwb3NlVGV4dHVyZUFuZFBvc3RQcm9jZXNzZXMoKTsKKyAgICAgICAgICAg
IHRoaXMuX2NyZWF0ZU1haW5UZXh0dXJlKCk7CisgICAgICAgICAgICB0aGlzLl9jcmVhdGVUZXh0
dXJlQW5kUG9zdFByb2Nlc3NlcygpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBEZXRlcm1pbmUgaWYgYSBnaXZlbiBtZXNoIHdpbGwgYmUgdXNlZCBpbiB0aGUgY3VycmVudCBl
ZmZlY3QuCisgICAgICogQHBhcmFtIG1lc2ggbWVzaCB0byB0ZXN0CisgICAgICogQHJldHVybnMg
dHJ1ZSBpZiB0aGUgbWVzaCB3aWxsIGJlIHVzZWQKKyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5w
cm90b3R5cGUuaGFzTWVzaCA9IGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgIGlmICh0aGlzLnJl
bmRlcmluZ0dyb3VwSWQgPT09IC0xIHx8IG1lc2gucmVuZGVyaW5nR3JvdXBJZCA9PT0gdGhpcy5y
ZW5kZXJpbmdHcm91cElkKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRy
dWUgaWYgdGhlIGxheWVyIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRvIGRpc3BsYXksIG90aGVyd2lz
ZSBmYWxzZS4KKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBnbG93IGxheWVyIHNob3VsZCBi
ZSByZW5kZXJlZAorICAgICAqLworICAgIEVmZmVjdExheWVyLnByb3RvdHlwZS5zaG91bGRSZW5k
ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmlzRW5hYmxlZCAmJiB0aGlz
Ll9zaG91bGRSZW5kZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYg
dGhlIG1lc2ggc2hvdWxkIHJlbmRlciwgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSBt
ZXNoIFRoZSBtZXNoIHRvIHJlbmRlcgorICAgICAqIEByZXR1cm5zIHRydWUgaWYgaXQgc2hvdWxk
IHJlbmRlciBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5
cGUuX3Nob3VsZFJlbmRlck1lc2ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWVzaCBj
YW4gYmUgcmVuZGVyZWQsIG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUg
bWVzaCB0byByZW5kZXIKKyAgICAgKiBAcGFyYW0gbWF0ZXJpYWwgVGhlIG1hdGVyaWFsIHVzZWQg
b24gdGhlIG1lc2gKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGl0IGNhbiBiZSByZW5kZXJlZCBv
dGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuX2NhblJl
bmRlck1lc2ggPSBmdW5jdGlvbiAobWVzaCwgbWF0ZXJpYWwpIHsKKyAgICAgICAgcmV0dXJuICFt
YXRlcmlhbC5uZWVkQWxwaGFCbGVuZGluZ0Zvck1lc2gobWVzaCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggc2hvdWxkIHJlbmRlciwgb3RoZXJ3aXNl
IGZhbHNlLgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRvIHJlbmRlcgorICAgICAqIEBy
ZXR1cm5zIHRydWUgaWYgaXQgc2hvdWxkIHJlbmRlciBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8K
KyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuX3Nob3VsZFJlbmRlckVtaXNzaXZlVGV4dHVyZUZv
ck1lc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAg
LyoqCisgICAgICogUmVuZGVycyB0aGUgc3VibWVzaCBwYXNzZWQgaW4gcGFyYW1ldGVyIHRvIHRo
ZSBnZW5lcmF0aW9uIG1hcC4KKyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuX3Jl
bmRlclN1Yk1lc2ggPSBmdW5jdGlvbiAoc3ViTWVzaCwgZW5hYmxlQWxwaGFNb2RlKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChlbmFibGVBbHBoYU1vZGUgPT09IHZv
aWQgMCkgeyBlbmFibGVBbHBoYU1vZGUgPSBmYWxzZTsgfQorICAgICAgICBpZiAoIXRoaXMuc2hv
dWxkUmVuZGVyKCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2
YXIgbWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7CisgICAgICAgIHZhciBtZXNoID0g
c3ViTWVzaC5nZXRSZW5kZXJpbmdNZXNoKCk7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3Nj
ZW5lOworICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIG1l
c2guX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2lzQWN0aXZlSW50ZXJtZWRpYXRlID0g
ZmFsc2U7CisgICAgICAgIGlmICghbWF0ZXJpYWwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAvLyBEbyBub3QgYmxvY2sgaW4gYmxlbmQgbW9kZS4KKyAgICAgICAg
aWYgKCF0aGlzLl9jYW5SZW5kZXJNZXNoKG1lc2gsIG1hdGVyaWFsKSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEN1bGxpbmcKKyAgICAgICAgZW5naW5lLnNl
dFN0YXRlKG1hdGVyaWFsLmJhY2tGYWNlQ3VsbGluZyk7CisgICAgICAgIC8vIE1hbmFnaW5nIGlu
c3RhbmNlcworICAgICAgICB2YXIgYmF0Y2ggPSBtZXNoLl9nZXRJbnN0YW5jZXNSZW5kZXJMaXN0
KHN1Yk1lc2guX2lkKTsKKyAgICAgICAgaWYgKGJhdGNoLm11c3RSZXR1cm4pIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBFYXJseSBFeGl0IHBlciBtZXNoCisg
ICAgICAgIGlmICghdGhpcy5fc2hvdWxkUmVuZGVyTWVzaChtZXNoKSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmlu
ZyA9IGJhdGNoLmhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nW3N1Yk1lc2guX2lkXTsKKyAgICAg
ICAgdGhpcy5fc2V0RW1pc3NpdmVUZXh0dXJlQW5kQ29sb3IobWVzaCwgc3ViTWVzaCwgbWF0ZXJp
YWwpOworICAgICAgICBpZiAodGhpcy5faXNSZWFkeShzdWJNZXNoLCBoYXJkd2FyZUluc3RhbmNl
ZFJlbmRlcmluZywgdGhpcy5fZW1pc3NpdmVUZXh0dXJlQW5kQ29sb3IudGV4dHVyZSkpIHsKKyAg
ICAgICAgICAgIGVuZ2luZS5lbmFibGVFZmZlY3QodGhpcy5fZWZmZWN0TGF5ZXJNYXBHZW5lcmF0
aW9uRWZmZWN0KTsKKyAgICAgICAgICAgIG1lc2guX2JpbmQoc3ViTWVzaCwgdGhpcy5fZWZmZWN0
TGF5ZXJNYXBHZW5lcmF0aW9uRWZmZWN0LCBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbCJdLlRyaWFuZ2xlRmlsbE1vZGUpOworICAgICAg
ICAgICAgdGhpcy5fZWZmZWN0TGF5ZXJNYXBHZW5lcmF0aW9uRWZmZWN0LnNldE1hdHJpeCgidmll
d1Byb2plY3Rpb24iLCBzY2VuZS5nZXRUcmFuc2Zvcm1NYXRyaXgoKSk7CisgICAgICAgICAgICB0
aGlzLl9lZmZlY3RMYXllck1hcEdlbmVyYXRpb25FZmZlY3Quc2V0RmxvYXQ0KCJnbG93Q29sb3Ii
LCB0aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci5jb2xvci5yLCB0aGlzLl9lbWlzc2l2ZVRl
eHR1cmVBbmRDb2xvci5jb2xvci5nLCB0aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci5jb2xv
ci5iLCB0aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci5jb2xvci5hKTsKKyAgICAgICAgICAg
IHZhciBuZWVkQWxwaGFUZXN0ID0gbWF0ZXJpYWwubmVlZEFscGhhVGVzdGluZygpOworICAgICAg
ICAgICAgdmFyIGRpZmZ1c2VUZXh0dXJlID0gbWF0ZXJpYWwuZ2V0QWxwaGFUZXN0VGV4dHVyZSgp
OworICAgICAgICAgICAgdmFyIG5lZWRBbHBoYUJsZW5kRnJvbURpZmZ1c2UgPSBkaWZmdXNlVGV4
dHVyZSAmJiBkaWZmdXNlVGV4dHVyZS5oYXNBbHBoYSAmJgorICAgICAgICAgICAgICAgIChtYXRl
cmlhbC51c2VBbHBoYUZyb21EaWZmdXNlVGV4dHVyZSB8fCBtYXRlcmlhbC5fdXNlQWxwaGFGcm9t
QWxiZWRvVGV4dHVyZSk7CisgICAgICAgICAgICBpZiAoZGlmZnVzZVRleHR1cmUgJiYgKG5lZWRB
bHBoYVRlc3QgfHwgbmVlZEFscGhhQmxlbmRGcm9tRGlmZnVzZSkpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9lZmZlY3RMYXllck1hcEdlbmVyYXRpb25FZmZlY3Quc2V0VGV4dHVyZSgiZGlmZnVz
ZVNhbXBsZXIiLCBkaWZmdXNlVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgdmFyIHRleHR1cmVN
YXRyaXggPSBkaWZmdXNlVGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KCk7CisgICAgICAgICAgICAg
ICAgaWYgKHRleHR1cmVNYXRyaXgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0
TGF5ZXJNYXBHZW5lcmF0aW9uRWZmZWN0LnNldE1hdHJpeCgiZGlmZnVzZU1hdHJpeCIsIHRleHR1
cmVNYXRyaXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciBvcGFjaXR5VGV4dHVyZSA9IG1hdGVyaWFsLm9wYWNpdHlUZXh0dXJlOworICAgICAgICAg
ICAgaWYgKG9wYWNpdHlUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0TGF5
ZXJNYXBHZW5lcmF0aW9uRWZmZWN0LnNldFRleHR1cmUoIm9wYWNpdHlTYW1wbGVyIiwgb3BhY2l0
eVRleHR1cmUpOworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdExheWVyTWFwR2VuZXJhdGlv
bkVmZmVjdC5zZXRGbG9hdCgib3BhY2l0eUludGVuc2l0eSIsIG9wYWNpdHlUZXh0dXJlLmxldmVs
KTsKKyAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZU1hdHJpeCA9IG9wYWNpdHlUZXh0dXJlLmdl
dFRleHR1cmVNYXRyaXgoKTsKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZU1hdHJpeCkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3RMYXllck1hcEdlbmVyYXRpb25FZmZlY3Qu
c2V0TWF0cml4KCJvcGFjaXR5TWF0cml4IiwgdGV4dHVyZU1hdHJpeCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gR2xvdyBlbWlzc2l2ZSBvbmx5Cisg
ICAgICAgICAgICBpZiAodGhpcy5fZW1pc3NpdmVUZXh0dXJlQW5kQ29sb3IudGV4dHVyZSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdExheWVyTWFwR2VuZXJhdGlvbkVmZmVjdC5zZXRU
ZXh0dXJlKCJlbWlzc2l2ZVNhbXBsZXIiLCB0aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci50
ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3RMYXllck1hcEdlbmVyYXRpb25F
ZmZlY3Quc2V0TWF0cml4KCJlbWlzc2l2ZU1hdHJpeCIsIHRoaXMuX2VtaXNzaXZlVGV4dHVyZUFu
ZENvbG9yLnRleHR1cmUuZ2V0VGV4dHVyZU1hdHJpeCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIEJvbmVzCisgICAgICAgICAgICBpZiAobWVzaC51c2VCb25lcyAmJiBtZXNoLmNv
bXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBtZXNoLnNrZWxldG9uKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHNrZWxldG9uID0gbWVzaC5za2VsZXRvbjsKKyAgICAgICAgICAgICAgICBpZiAoc2tl
bGV0b24uaXNVc2luZ1RleHR1cmVGb3JNYXRyaWNlcykgeworICAgICAgICAgICAgICAgICAgICB2
YXIgYm9uZVRleHR1cmUgPSBza2VsZXRvbi5nZXRUcmFuc2Zvcm1NYXRyaXhUZXh0dXJlKG1lc2gp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWJvbmVUZXh0dXJlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fZWZmZWN0TGF5ZXJNYXBHZW5lcmF0aW9uRWZmZWN0LnNldFRleHR1cmUoImJv
bmVTYW1wbGVyIiwgYm9uZVRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZmZl
Y3RMYXllck1hcEdlbmVyYXRpb25FZmZlY3Quc2V0RmxvYXQoImJvbmVUZXh0dXJlV2lkdGgiLCA0
LjAgKiAoc2tlbGV0b24uYm9uZXMubGVuZ3RoICsgMSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0TGF5
ZXJNYXBHZW5lcmF0aW9uRWZmZWN0LnNldE1hdHJpY2VzKCJtQm9uZXMiLCBza2VsZXRvbi5nZXRU
cmFuc2Zvcm1NYXRyaWNlcygobWVzaCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBNb3JwaCB0YXJnZXRzCisgICAgICAgICAgICBfTWF0ZXJpYWxz
X21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJNYXRlcmlhbEhl
bHBlciJdLkJpbmRNb3JwaFRhcmdldFBhcmFtZXRlcnMobWVzaCwgdGhpcy5fZWZmZWN0TGF5ZXJN
YXBHZW5lcmF0aW9uRWZmZWN0KTsKKyAgICAgICAgICAgIC8vIEFscGhhIG1vZGUKKyAgICAgICAg
ICAgIGlmIChlbmFibGVBbHBoYU1vZGUpIHsKKyAgICAgICAgICAgICAgICBlbmdpbmUuc2V0QWxw
aGFNb2RlKG1hdGVyaWFsLmFscGhhTW9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBEcmF3CisgICAgICAgICAgICBtZXNoLl9wcm9jZXNzUmVuZGVyaW5nKHN1Yk1lc2gsIHRoaXMu
X2VmZmVjdExheWVyTWFwR2VuZXJhdGlvbkVmZmVjdCwgX01hdGVyaWFsc19tYXRlcmlhbF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0ZXJpYWwiXS5UcmlhbmdsZUZpbGxNb2RlLCBi
YXRjaCwgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcsIGZ1bmN0aW9uIChpc0luc3RhbmNlLCB3
b3JsZCkgeyByZXR1cm4gX3RoaXMuX2VmZmVjdExheWVyTWFwR2VuZXJhdGlvbkVmZmVjdC5zZXRN
YXRyaXgoIndvcmxkIiwgd29ybGQpOyB9KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIE5lZWQgdG8gcmVzZXQgcmVmcmVzaCByYXRlIG9mIHRoZSBtYWluIG1hcAor
ICAgICAgICAgICAgdGhpcy5fbWFpblRleHR1cmUucmVzZXRSZWZyZXNoQ291bnRlcigpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWJ1aWxkIHRoZSByZXF1aXJlZCBidWZm
ZXJzLgorICAgICAqIEBoaWRkZW4gSW50ZXJuYWwgdXNlIG9ubHkuCisgICAgICovCisgICAgRWZm
ZWN0TGF5ZXIucHJvdG90eXBlLl9yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIg
dmIgPSB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAgIGlmICh2
YikgeworICAgICAgICAgICAgdmIuX3JlYnVpbGQoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9nZW5lcmF0ZUluZGV4QnVmZmVyKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3Nl
IG9ubHkgdGhlIHJlbmRlciB0YXJnZXQgdGV4dHVyZXMgYW5kIHBvc3QgcHJvY2Vzcy4KKyAgICAg
Ki8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuX2Rpc3Bvc2VUZXh0dXJlQW5kUG9zdFByb2Nl
c3NlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fbWFpblRleHR1cmUuZGlzcG9zZSgp
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Bvc3RQcm9jZXNzZXMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9wb3N0UHJvY2Vzc2VzW2ldKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3Nlc1tpXS5kaXNwb3NlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3NlcyA9IFtdOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHR1cmVzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5fdGV4dHVyZXNbaV0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90
ZXh0dXJlc1tpXS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fdGV4dHVyZXMgPSBbXTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2UgdGhl
IGhpZ2hsaWdodCBsYXllciBhbmQgZnJlZSByZXNvdXJjZXMuCisgICAgICovCisgICAgRWZmZWN0
TGF5ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB2ZXJ0
ZXhCdWZmZXIgPSB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAg
IGlmICh2ZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5kaXNwb3NlKCk7
CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0gPSBudWxs
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pbmRleEJ1ZmZlcikgeworICAgICAgICAg
ICAgdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuX3JlbGVhc2VCdWZmZXIodGhpcy5faW5kZXhCdWZm
ZXIpOworICAgICAgICAgICAgdGhpcy5faW5kZXhCdWZmZXIgPSBudWxsOworICAgICAgICB9Cisg
ICAgICAgIC8vIENsZWFuIHRleHR1cmVzIGFuZCBwb3N0IHByb2Nlc3NlcworICAgICAgICB0aGlz
Ll9kaXNwb3NlVGV4dHVyZUFuZFBvc3RQcm9jZXNzZXMoKTsKKyAgICAgICAgLy8gUmVtb3ZlIGZy
b20gc2NlbmUKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2NlbmUuZWZmZWN0TGF5ZXJzLmlu
ZGV4T2YodGhpcywgMCk7CisgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgICAgICB0
aGlzLl9zY2VuZS5lZmZlY3RMYXllcnMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBDYWxsYmFjaworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUubm90aWZ5
T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUuY2xlYXIo
KTsKKyAgICAgICAgdGhpcy5vbkJlZm9yZVJlbmRlck1haW5UZXh0dXJlT2JzZXJ2YWJsZS5jbGVh
cigpOworICAgICAgICB0aGlzLm9uQmVmb3JlQ29tcG9zZU9ic2VydmFibGUuY2xlYXIoKTsKKyAg
ICAgICAgdGhpcy5vbkFmdGVyQ29tcG9zZU9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhp
cy5vblNpemVDaGFuZ2VkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgIH07CisgICAgLyoqCisgICAg
ICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVmZmVjdCBsYXllcgorICAgICAgKiBAcmV0
dXJucyB0aGUgc3RyaW5nIHdpdGggdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVmZmVjdCBsYXllcgor
ICAgICAgKi8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gIkVmZmVjdExheWVyIjsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgYW4gZWZmZWN0IGxheWVyIGZyb20gcGFyc2VkIGVmZmVjdCBsYXllciBk
YXRhCisgICAgICogQHBhcmFtIHBhcnNlZEVmZmVjdExheWVyIGRlZmluZXMgZWZmZWN0IGxheWVy
IGRhdGEKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgY3VycmVudCBzY2VuZQorICAg
ICAqIEBwYXJhbSByb290VXJsIGRlZmluZXMgdGhlIHJvb3QgVVJMIGNvbnRhaW5pbmcgdGhlIGVm
ZmVjdCBsYXllciBpbmZvcm1hdGlvbgorICAgICAqIEByZXR1cm5zIGEgcGFyc2VkIGVmZmVjdCBM
YXllcgorICAgICAqLworICAgIEVmZmVjdExheWVyLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZEVm
ZmVjdExheWVyLCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICB2YXIgZWZmZWN0TGF5ZXJUeXBl
ID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5JbnN0
YW50aWF0ZShwYXJzZWRFZmZlY3RMYXllci5jdXN0b21UeXBlKTsKKyAgICAgICAgcmV0dXJuIGVm
ZmVjdExheWVyVHlwZS5QYXJzZShwYXJzZWRFZmZlY3RMYXllciwgc2NlbmUsIHJvb3RVcmwpOwor
ICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBFZmZlY3RMYXllci5fU2NlbmVDb21wb25l
bnRJbml0aWFsaXphdGlvbiA9IGZ1bmN0aW9uIChfKSB7CisgICAgICAgIHRocm93IF9NaXNjX2Rl
dlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1w
b3J0KCJFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50Iik7CisgICAgfTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIEVmZmVjdExheWVyLnByb3RvdHlwZSwgIm5hbWUiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZUFzQ29sb3I0Il0pKCkKKyAgICBdLCBFZmZlY3RMYXllci5wcm90b3R5cGUsICJu
ZXV0cmFsQ29sb3IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRWZmZWN0
TGF5ZXIucHJvdG90eXBlLCAiaXNFbmFibGVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0Nh
bWVyYVJlZmVyZW5jZSJdKSgpCisgICAgXSwgRWZmZWN0TGF5ZXIucHJvdG90eXBlLCAiY2FtZXJh
IiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBFZmZlY3RMYXllci5wcm90b3R5
cGUsICJyZW5kZXJpbmdHcm91cElkIiwgbnVsbCk7CisgICAgcmV0dXJuIEVmZmVjdExheWVyOwor
fSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9MYXllcnMvZWZmZWN0TGF5ZXJTY2Vu
ZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL0xheWVycy9lZmZlY3RMYXllclNjZW5lQ29tcG9uZW50LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50ICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdExheWVyU2NlbmVDb21wb25lbnQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIEVmZmVjdExheWVyU2NlbmVDb21wb25lbnQ7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ2FtZXJhcy9jYW1lcmEgKi8g
Ii4vQ2FtZXJhcy9jYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVD
b21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2VmZmVjdExheWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VmZmVjdExheWVyICovICIuL0xheWVy
cy9lZmZlY3RMYXllci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hYnN0cmFjdFNj
ZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9hYnN0cmFjdFNjZW5lICovICIuL2Fic3RyYWN0U2NlbmUudHMiKTsKKworCisKKworLy8g
QWRkcyB0aGUgcGFyc2VyIHRvIHRoZSBzY2VuZSBwYXJzZXJzLgorX2Fic3RyYWN0U2NlbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWJzdHJhY3RTY2VuZSJdLkFkZFBhcnNlcihfc2Nl
bmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRD
b25zdGFudHMiXS5OQU1FX0VGRkVDVExBWUVSLCBmdW5jdGlvbiAocGFyc2VkRGF0YSwgc2NlbmUs
IGNvbnRhaW5lciwgcm9vdFVybCkgeworICAgIGlmIChwYXJzZWREYXRhLmVmZmVjdExheWVycykg
eworICAgICAgICBpZiAoIWNvbnRhaW5lci5lZmZlY3RMYXllcnMpIHsKKyAgICAgICAgICAgIGNv
bnRhaW5lci5lZmZlY3RMYXllcnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgfQorICAgICAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcGFyc2VkRGF0YS5lZmZlY3RMYXllcnMubGVuZ3Ro
OyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgZWZmZWN0TGF5ZXIgPSBfZWZmZWN0TGF5ZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRWZmZWN0TGF5ZXIiXS5QYXJzZShwYXJzZWRE
YXRhLmVmZmVjdExheWVyc1tpbmRleF0sIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgICAgIGNv
bnRhaW5lci5lZmZlY3RMYXllcnMucHVzaChlZmZlY3RMYXllcik7CisgICAgICAgIH0KKyAgICB9
Cit9KTsKK19hYnN0cmFjdFNjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFic3Ry
YWN0U2NlbmUiXS5wcm90b3R5cGUucmVtb3ZlRWZmZWN0TGF5ZXIgPSBmdW5jdGlvbiAodG9SZW1v
dmUpIHsKKyAgICB2YXIgaW5kZXggPSB0aGlzLmVmZmVjdExheWVycy5pbmRleE9mKHRvUmVtb3Zl
KTsKKyAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgIHRoaXMuZWZmZWN0TGF5ZXJzLnNw
bGljZShpbmRleCwgMSk7CisgICAgfQorICAgIHJldHVybiBpbmRleDsKK307CitfYWJzdHJhY3RT
Y2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJBYnN0cmFjdFNjZW5lIl0ucHJvdG90
eXBlLmFkZEVmZmVjdExheWVyID0gZnVuY3Rpb24gKG5ld0VmZmVjdExheWVyKSB7CisgICAgdGhp
cy5lZmZlY3RMYXllcnMucHVzaChuZXdFZmZlY3RMYXllcik7Cit9OworLyoqCisgKiBEZWZpbmVz
IHRoZSBsYXllciBzY2VuZSBjb21wb25lbnQgcmVzcG9uc2libGUgdG8gbWFuYWdlIGFueSBlZmZl
Y3QgbGF5ZXJzCisgKiBpbiBhIGdpdmVuIHNjZW5lLgorICovCit2YXIgRWZmZWN0TGF5ZXJTY2Vu
ZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgZm9yIHRoZSBnaXZlbiBz
Y2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0byByZWdpc3RlciB0
aGUgY29tcG9uZW50IGluCisgICAgICovCisgICAgZnVuY3Rpb24gRWZmZWN0TGF5ZXJTY2VuZUNv
bXBvbmVudChzY2VuZSkgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbXBvbmVudCBu
YW1lIGhlbHBmdWxsIHRvIGlkZW50aWZ5IHRoZSBjb21wb25lbnQgaW4gdGhlIGxpc3Qgb2Ygc2Nl
bmUgY29tcG9uZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubmFtZSA9IF9zY2VuZUNv
bXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2VuZUNvbXBvbmVudENvbnN0
YW50cyJdLk5BTUVfRUZGRUNUTEFZRVI7CisgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdHMgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5fbmVlZFN0ZW5jaWwgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5f
cHJldmlvdXNTdGVuY2lsU3RhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5l
OworICAgICAgICB0aGlzLl9lbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgc2Nl
bmUuZWZmZWN0TGF5ZXJzID0gbmV3IEFycmF5KCk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJl
Z2lzdGVycyB0aGUgY29tcG9uZW50IGluIGEgZ2l2ZW4gc2NlbmUKKyAgICAgKi8KKyAgICBFZmZl
Y3RMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGhpcy5zY2VuZS5faXNSZWFkeUZvck1lc2hTdGFnZS5yZWdpc3RlclN0ZXAoX3Nj
ZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lQ29tcG9uZW50
Q29uc3RhbnRzIl0uU1RFUF9JU1JFQURZRk9STUVTSF9FRkZFQ1RMQVlFUiwgdGhpcywgdGhpcy5f
aXNSZWFkeUZvck1lc2gpOworICAgICAgICB0aGlzLnNjZW5lLl9jYW1lcmFEcmF3UmVuZGVyVGFy
Z2V0U3RhZ2UucmVnaXN0ZXJTdGVwKF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLlNURVBfQ0FNRVJBRFJBV1JFTkRF
UlRBUkdFVF9FRkZFQ1RMQVlFUiwgdGhpcywgdGhpcy5fcmVuZGVyTWFpblRleHR1cmUpOworICAg
ICAgICB0aGlzLnNjZW5lLl9iZWZvcmVDYW1lcmFEcmF3U3RhZ2UucmVnaXN0ZXJTdGVwKF9zY2Vu
ZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2VuZUNvbXBvbmVudENv
bnN0YW50cyJdLlNURVBfQkVGT1JFQ0FNRVJBRFJBV19FRkZFQ1RMQVlFUiwgdGhpcywgdGhpcy5f
c2V0U3RlbmNpbCk7CisgICAgICAgIHRoaXMuc2NlbmUuX2FmdGVyUmVuZGVyaW5nR3JvdXBEcmF3
U3RhZ2UucmVnaXN0ZXJTdGVwKF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLlNURVBfQUZURVJSRU5ERVJJTkdHUk9V
UERSQVdfRUZGRUNUTEFZRVJfRFJBVywgdGhpcywgdGhpcy5fZHJhd1JlbmRlcmluZ0dyb3VwKTsK
KyAgICAgICAgdGhpcy5zY2VuZS5fYWZ0ZXJDYW1lcmFEcmF3U3RhZ2UucmVnaXN0ZXJTdGVwKF9z
Y2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2VuZUNvbXBvbmVu
dENvbnN0YW50cyJdLlNURVBfQUZURVJDQU1FUkFEUkFXX0VGRkVDVExBWUVSLCB0aGlzLCB0aGlz
Ll9zZXRTdGVuY2lsQmFjayk7CisgICAgICAgIHRoaXMuc2NlbmUuX2FmdGVyQ2FtZXJhRHJhd1N0
YWdlLnJlZ2lzdGVyU3RlcChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5TVEVQX0FGVEVSQ0FNRVJBRFJBV19FRkZF
Q1RMQVlFUl9EUkFXLCB0aGlzLCB0aGlzLl9kcmF3Q2FtZXJhKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJlYnVpbGRzIHRoZSBlbGVtZW50cyByZWxhdGVkIHRvIHRoaXMgY29tcG9uZW50IGlu
IGNhc2Ugb2YKKyAgICAgKiBjb250ZXh0IGxvc3QgZm9yIGluc3RhbmNlLgorICAgICAqLworICAg
IEVmZmVjdExheWVyU2NlbmVDb21wb25lbnQucHJvdG90eXBlLnJlYnVpbGQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBsYXllcnMgPSB0aGlzLnNjZW5lLmVmZmVjdExheWVyczsKKyAgICAg
ICAgZm9yICh2YXIgX2kgPSAwLCBsYXllcnNfMSA9IGxheWVyczsgX2kgPCBsYXllcnNfMS5sZW5n
dGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBlZmZlY3RMYXllciA9IGxheWVyc18xW19pXTsK
KyAgICAgICAgICAgIGVmZmVjdExheWVyLl9yZWJ1aWxkKCk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGNvbXBvbmVudCBkYXRhIHRvIHRoZSBzcGVj
aWZpZWQganNvbiBvYmplY3QKKyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlvbk9iamVjdCBUaGUg
b2JqZWN0IHRvIHNlcmlhbGl6ZSB0bworICAgICAqLworICAgIEVmZmVjdExheWVyU2NlbmVDb21w
b25lbnQucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0
KSB7CisgICAgICAgIC8vIEVmZmVjdCBsYXllcnMKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC5lZmZlY3RMYXllcnMgPSBbXTsKKyAgICAgICAgdmFyIGxheWVycyA9IHRoaXMuc2NlbmUuZWZm
ZWN0TGF5ZXJzOworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGxheWVyc18yID0gbGF5ZXJzOyBf
aSA8IGxheWVyc18yLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGVmZmVjdExheWVy
ID0gbGF5ZXJzXzJbX2ldOworICAgICAgICAgICAgaWYgKGVmZmVjdExheWVyLnNlcmlhbGl6ZSkg
eworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZWZmZWN0TGF5ZXJzLnB1c2go
ZWZmZWN0TGF5ZXIuc2VyaWFsaXplKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUgY29udGFp
bmVyIHRvIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBjb250YWluZXIgdGhlIGNvbnRhaW5lciBo
b2xkaW5nIHRoZSBlbGVtZW50cworICAgICAqLworICAgIEVmZmVjdExheWVyU2NlbmVDb21wb25l
bnQucHJvdG90eXBlLmFkZEZyb21Db250YWluZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmICghY29udGFpbmVyLmVmZmVjdExh
eWVycykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNvbnRhaW5l
ci5lZmZlY3RMYXllcnMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAgICAgICAgICAgX3RoaXMu
c2NlbmUuYWRkRWZmZWN0TGF5ZXIobyk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmVtb3ZlcyBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBjb250YWluZXIgZnJvbSB0aGUg
c2NlbmUKKyAgICAgKiBAcGFyYW0gY29udGFpbmVyIGNvbnRhaW5zIHRoZSBlbGVtZW50cyB0byBy
ZW1vdmUKKyAgICAgKiBAcGFyYW0gZGlzcG9zZSBpZiB0aGUgcmVtb3ZlZCBlbGVtZW50IHNob3Vs
ZCBiZSBkaXNwb3NlZCAoZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgRWZmZWN0TGF5ZXJT
Y2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVtb3ZlRnJvbUNvbnRhaW5lciA9IGZ1bmN0aW9uIChj
b250YWluZXIsIGRpc3Bvc2UpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
aWYgKCFjb250YWluZXIuZWZmZWN0TGF5ZXJzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY29udGFpbmVyLmVmZmVjdExheWVycy5mb3JFYWNoKGZ1bmN0aW9uIChv
KSB7CisgICAgICAgICAgICBfdGhpcy5zY2VuZS5yZW1vdmVFZmZlY3RMYXllcihvKTsKKyAgICAg
ICAgICAgIGlmIChkaXNwb3NlKSB7CisgICAgICAgICAgICAgICAgby5kaXNwb3NlKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMg
dGhlIGNvbXBvbmVudCBhbmQgdGhlIGFzc29jaWF0ZWQgcmVzc291cmNlcy4KKyAgICAgKi8KKyAg
ICBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24g
KCkgeworICAgICAgICB2YXIgbGF5ZXJzID0gdGhpcy5zY2VuZS5lZmZlY3RMYXllcnM7CisgICAg
ICAgIHdoaWxlIChsYXllcnMubGVuZ3RoKSB7CisgICAgICAgICAgICBsYXllcnNbMF0uZGlzcG9z
ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50LnBy
b3RvdHlwZS5faXNSZWFkeUZvck1lc2ggPSBmdW5jdGlvbiAobWVzaCwgaGFyZHdhcmVJbnN0YW5j
ZWRSZW5kZXJpbmcpIHsKKyAgICAgICAgdmFyIGxheWVycyA9IHRoaXMuc2NlbmUuZWZmZWN0TGF5
ZXJzOworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGxheWVyc18zID0gbGF5ZXJzOyBfaSA8IGxh
eWVyc18zLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGxheWVyID0gbGF5ZXJzXzNb
X2ldOworICAgICAgICAgICAgaWYgKCFsYXllci5oYXNNZXNoKG1lc2gpKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBfYSA9
IDAsIF9iID0gbWVzaC5zdWJNZXNoZXM7IF9hIDwgX2IubGVuZ3RoOyBfYSsrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHN1Yk1lc2ggPSBfYltfYV07CisgICAgICAgICAgICAgICAgaWYgKCFsYXll
ci5pc1JlYWR5KHN1Yk1lc2gsIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nKSkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgRWZmZWN0
TGF5ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX3JlbmRlck1haW5UZXh0dXJlID0gZnVuY3Rp
b24gKGNhbWVyYSkgeworICAgICAgICB0aGlzLl9yZW5kZXJFZmZlY3RzID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX25lZWRTdGVuY2lsID0gZmFsc2U7CisgICAgICAgIHZhciBuZWVkUmViaW5kID0g
ZmFsc2U7CisgICAgICAgIHZhciBsYXllcnMgPSB0aGlzLnNjZW5lLmVmZmVjdExheWVyczsKKyAg
ICAgICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdGhp
cy5fcHJldmlvdXNTdGVuY2lsU3RhdGUgPSB0aGlzLl9lbmdpbmUuZ2V0U3RlbmNpbEJ1ZmZlcigp
OworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBsYXllcnNfNCA9IGxheWVyczsgX2kgPCBs
YXllcnNfNC5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgZWZmZWN0TGF5ZXIg
PSBsYXllcnNfNFtfaV07CisgICAgICAgICAgICAgICAgaWYgKGVmZmVjdExheWVyLnNob3VsZFJl
bmRlcigpICYmCisgICAgICAgICAgICAgICAgICAgICghZWZmZWN0TGF5ZXIuY2FtZXJhIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAoZWZmZWN0TGF5ZXIuY2FtZXJhLmNhbWVyYVJpZ01vZGUg
PT09IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDYW1lcmEi
XS5SSUdfTU9ERV9OT05FICYmIGNhbWVyYSA9PT0gZWZmZWN0TGF5ZXIuY2FtZXJhKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgKGVmZmVjdExheWVyLmNhbWVyYS5jYW1lcmFSaWdNb2RlICE9
PSBfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ2FtZXJhIl0u
UklHX01PREVfTk9ORSAmJiBlZmZlY3RMYXllci5jYW1lcmEuX3JpZ0NhbWVyYXMuaW5kZXhPZihj
YW1lcmEpID4gLTEpKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJFZmZlY3Rz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmVlZFN0ZW5jaWwgPSB0aGlzLl9u
ZWVkU3RlbmNpbCB8fCBlZmZlY3RMYXllci5uZWVkU3RlbmNpbCgpOworICAgICAgICAgICAgICAg
ICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gZWZmZWN0TGF5ZXIuX21haW5UZXh0dXJlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocmVuZGVyVGFyZ2V0Ll9zaG91bGRSZW5kZXIoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5pbmNyZW1lbnRSZW5kZXJJZCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LnJlbmRlcihmYWxzZSwgZmFsc2UpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbmVlZFJlYmluZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
LnNjZW5lLmluY3JlbWVudFJlbmRlcklkKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5l
ZWRSZWJpbmQ7CisgICAgfTsKKyAgICBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlw
ZS5fc2V0U3RlbmNpbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gQWN0aXZhdGUgZWZmZWN0
IExheWVyIHN0ZW5jaWwKKyAgICAgICAgaWYgKHRoaXMuX25lZWRTdGVuY2lsKSB7CisgICAgICAg
ICAgICB0aGlzLl9lbmdpbmUuc2V0U3RlbmNpbEJ1ZmZlcih0cnVlKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgRWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX3NldFN0ZW5jaWxC
YWNrID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBSZXN0b3JlIGVmZmVjdCBMYXllciBzdGVu
Y2lsCisgICAgICAgIGlmICh0aGlzLl9uZWVkU3RlbmNpbCkgeworICAgICAgICAgICAgdGhpcy5f
ZW5naW5lLnNldFN0ZW5jaWxCdWZmZXIodGhpcy5fcHJldmlvdXNTdGVuY2lsU3RhdGUpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5f
ZHJhdyA9IGZ1bmN0aW9uIChyZW5kZXJpbmdHcm91cElkKSB7CisgICAgICAgIGlmICh0aGlzLl9y
ZW5kZXJFZmZlY3RzKSB7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0RGVwdGhCdWZmZXIo
ZmFsc2UpOworICAgICAgICAgICAgdmFyIGxheWVycyA9IHRoaXMuc2NlbmUuZWZmZWN0TGF5ZXJz
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICB2YXIgZWZmZWN0TGF5ZXIgPSBsYXllcnNbaV07CisgICAgICAgICAg
ICAgICAgaWYgKGVmZmVjdExheWVyLnJlbmRlcmluZ0dyb3VwSWQgPT09IHJlbmRlcmluZ0dyb3Vw
SWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVmZmVjdExheWVyLnNob3VsZFJlbmRlcigp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RMYXllci5yZW5kZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX2VuZ2luZS5zZXREZXB0aEJ1ZmZlcih0cnVlKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgRWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX2RyYXdDYW1lcmEg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9yZW5kZXJFZmZlY3RzKSB7CisgICAg
ICAgICAgICB0aGlzLl9kcmF3KC0xKTsKKyAgICAgICAgfQorICAgIH07CisgICAgRWZmZWN0TGF5
ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX2RyYXdSZW5kZXJpbmdHcm91cCA9IGZ1bmN0aW9u
IChpbmRleCkgeworICAgICAgICBpZiAoIXRoaXMuc2NlbmUuX2lzSW5JbnRlcm1lZGlhdGVSZW5k
ZXJpbmcoKSAmJiB0aGlzLl9yZW5kZXJFZmZlY3RzKSB7CisgICAgICAgICAgICB0aGlzLl9kcmF3
KGluZGV4KTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIEVmZmVjdExheWVyU2NlbmVD
b21wb25lbnQ7Cit9KCkpOworCitfZWZmZWN0TGF5ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siRWZmZWN0TGF5ZXIiXS5fU2NlbmVDb21wb25lbnRJbml0aWFsaXphdGlvbiA9IGZ1bmN0
aW9uIChzY2VuZSkgeworICAgIHZhciBjb21wb25lbnQgPSBzY2VuZS5fZ2V0Q29tcG9uZW50KF9z
Y2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2VuZUNvbXBvbmVu
dENvbnN0YW50cyJdLk5BTUVfRUZGRUNUTEFZRVIpOworICAgIGlmICghY29tcG9uZW50KSB7Cisg
ICAgICAgIGNvbXBvbmVudCA9IG5ldyBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50KHNjZW5lKTsK
KyAgICAgICAgc2NlbmUuX2FkZENvbXBvbmVudChjb21wb25lbnQpOworICAgIH0KK307CisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0xheWVycy9nbG93TGF5ZXIudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0xheWVycy9nbG93TGF5ZXIudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogR2xvd0xheWVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdsb3dM
YXllciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gR2xvd0xheWVyOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2Rl
Y29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJl
cy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJnZXRUZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMv
VGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlh
bHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nl
c19ibHVyUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL1Bvc3RQcm9jZXNzZXMvYmx1clBvc3RQcm9jZXNzICovICIuL1Bv
c3RQcm9jZXNzZXMvYmx1clBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2VmZmVjdExheWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL2VmZmVjdExheWVyICovICIuL0xheWVycy9lZmZlY3RMYXllci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hYnN0cmFjdFNjZW5lX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9hYnN0cmFjdFNjZW5l
ICovICIuL2Fic3RyYWN0U2NlbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mv
dHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdp
bmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9TaGFkZXJzX2dsb3dNYXBNZXJnZV9mcmFnbWVudF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZ2xv
d01hcE1lcmdlLmZyYWdtZW50ICovICIuL1NoYWRlcnMvZ2xvd01hcE1lcmdlLmZyYWdtZW50LnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfZ2xvd01hcE1lcmdlX3ZlcnRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL1NoYWRlcnMvZ2xvd01hcE1lcmdlLnZlcnRleCAqLyAiLi9TaGFkZXJzL2dsb3dNYXBNZXJn
ZS52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTGF5ZXJzX2VmZmVjdExh
eWVyU2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9MYXllcnMvZWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudCAqLyAi
Li9MYXllcnMvZWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudC50cyIpOworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKK19hYnN0cmFjdFNjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIkFic3RyYWN0U2NlbmUiXS5wcm90b3R5cGUuZ2V0R2xvd0xheWVyQnlOYW1lID0gZnVu
Y3Rpb24gKG5hbWUpIHsKKyAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5lZmZl
Y3RMYXllcnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgIGlmICh0aGlzLmVmZmVjdExheWVy
c1tpbmRleF0ubmFtZSA9PT0gbmFtZSAmJiB0aGlzLmVmZmVjdExheWVyc1tpbmRleF0uZ2V0RWZm
ZWN0TmFtZSgpID09PSBHbG93TGF5ZXIuRWZmZWN0TmFtZSkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZWZmZWN0TGF5ZXJzW2luZGV4XTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
bnVsbDsKK307CisvKioKKyAqIFRoZSBnbG93IGxheWVyIEhlbHBzIGFkZGluZyBhIGdsb3cgZWZm
ZWN0IGFyb3VuZCB0aGUgZW1pc3NpdmUgcGFydHMgb2YgYSBtZXNoLgorICoKKyAqIE9uY2UgaW5z
dGFudGlhdGVkIGluIGEgc2NlbmUsIHNpbXBseSB1c2UgdGhlIHB1c2hNZXNoIG9yIHJlbW92ZU1l
c2ggbWV0aG9kIHRvIGFkZCBvciByZW1vdmUKKyAqIGdsb3d5IG1lc2hlcyB0byB5b3VyIHNjZW5l
LgorICoKKyAqIERvY3VtZW50YXRpb246IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3Rv
L2dsb3dfbGF5ZXIKKyAqLwordmFyIEdsb3dMYXllciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShHbG93TGF5ZXIsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVz
IGEgbmV3IGdsb3cgTGF5ZXIgYW5kIHJlZmVyZW5jZXMgaXQgdG8gdGhlIHNjZW5lLgorICAgICAq
IEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBsYXllcgorICAgICAqIEBwYXJhbSBzY2VuZSBU
aGUgc2NlbmUgdG8gdXNlIHRoZSBsYXllciBpbgorICAgICAqIEBwYXJhbSBvcHRpb25zIFNldHMg
b2Ygbm9uZSBtYW5kYXRvcnkgb3B0aW9ucyB0byB1c2Ugd2l0aCB0aGUgbGF5ZXIgKHNlZSBJR2xv
d0xheWVyT3B0aW9ucyBmb3IgbW9yZSBpbmZvcm1hdGlvbikKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBHbG93TGF5ZXIobmFtZSwgc2NlbmUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
X3N1cGVyLmNhbGwodGhpcywgbmFtZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9p
bnRlbnNpdHkgPSAxLjA7CisgICAgICAgIF90aGlzLl9pbmNsdWRlZE9ubHlNZXNoZXMgPSBbXTsK
KyAgICAgICAgX3RoaXMuX2V4Y2x1ZGVkTWVzaGVzID0gW107CisgICAgICAgIF90aGlzLm5ldXRy
YWxDb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTNfX1siQ29sb3I0Il0oMCwgMCwgMCwgMSk7CisgICAgICAgIC8vIEFkYXB0IG9wdGlvbnMKKyAg
ICAgICAgX3RoaXMuX29wdGlvbnMgPSB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2Fzc2lnbiJdKHsgbWFpblRleHR1cmVSYXRpbzogR2xvd0xheWVyLkRlZmF1bHRUZXh0dXJl
UmF0aW8sIGJsdXJLZXJuZWxTaXplOiAzMiwgbWFpblRleHR1cmVGaXhlZFNpemU6IHVuZGVmaW5l
ZCwgY2FtZXJhOiBudWxsLCBtYWluVGV4dHVyZVNhbXBsZXM6IDEsIHJlbmRlcmluZ0dyb3VwSWQ6
IC0xIH0sIG9wdGlvbnMpOworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBsYXllcgorICAgICAg
ICBfdGhpcy5faW5pdCh7CisgICAgICAgICAgICBhbHBoYUJsZW5kaW5nTW9kZTogX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJDb25zdGFudHMiXS5BTFBI
QV9BREQsCisgICAgICAgICAgICBjYW1lcmE6IF90aGlzLl9vcHRpb25zLmNhbWVyYSwKKyAgICAg
ICAgICAgIG1haW5UZXh0dXJlRml4ZWRTaXplOiBfdGhpcy5fb3B0aW9ucy5tYWluVGV4dHVyZUZp
eGVkU2l6ZSwKKyAgICAgICAgICAgIG1haW5UZXh0dXJlUmF0aW86IF90aGlzLl9vcHRpb25zLm1h
aW5UZXh0dXJlUmF0aW8sCisgICAgICAgICAgICByZW5kZXJpbmdHcm91cElkOiBfdGhpcy5fb3B0
aW9ucy5yZW5kZXJpbmdHcm91cElkCisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX3RoaXM7
CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG93TGF5ZXIucHJvdG90eXBlLCAi
Ymx1cktlcm5lbFNpemUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBrZXJu
ZWwgc2l6ZSBvZiB0aGUgYmx1ci4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hvcml6b250YWxCbHVyUG9zdHByb2Nlc3Mx
Lmtlcm5lbDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGtl
cm5lbCBzaXplIG9mIHRoZSBibHVyLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2hvcml6b250YWxCbHVyUG9zdHByb2Nlc3Mx
Lmtlcm5lbCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdmVydGljYWxCbHVyUG9zdHByb2Nl
c3MxLmtlcm5lbCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0
cHJvY2VzczIua2VybmVsID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl92ZXJ0aWNhbEJsdXJQ
b3N0cHJvY2VzczIua2VybmVsID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShHbG93TGF5ZXIucHJvdG90eXBlLCAiaW50ZW5zaXR5IiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZ2xvdyBpbnRlbnNpdHkuCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9p
bnRlbnNpdHk7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBn
bG93IGludGVuc2l0eS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9pbnRlbnNpdHkgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgLyoqCisgICAgICogR2V0IHRoZSBlZmZlY3QgbmFtZSBvZiB0aGUgbGF5ZXIuCisg
ICAgICogQHJldHVybiBUaGUgZWZmZWN0IG5hbWUKKyAgICAgKi8KKyAgICBHbG93TGF5ZXIucHJv
dG90eXBlLmdldEVmZmVjdE5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBHbG93
TGF5ZXIuRWZmZWN0TmFtZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZSB0aGUgbWVy
Z2UgZWZmZWN0LiBUaGlzIGlzIHRoZSBzaGFkZXIgdXNlIHRvIGJsaXQgdGhlIGluZm9ybWF0aW9u
IGJhY2sKKyAgICAgKiB0byB0aGUgbWFpbiBjYW52YXMgYXQgdGhlIGVuZCBvZiB0aGUgc2NlbmUg
cmVuZGVyaW5nLgorICAgICAqLworICAgIEdsb3dMYXllci5wcm90b3R5cGUuX2NyZWF0ZU1lcmdl
RWZmZWN0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBFZmZlY3QKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2VuZ2luZS5jcmVhdGVFZmZlY3QoImdsb3dNYXBNZXJnZSIsIFtfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktp
bmRdLCBbIm9mZnNldCJdLCBbInRleHR1cmVTYW1wbGVyIiwgInRleHR1cmVTYW1wbGVyMiJdLCAi
I2RlZmluZSBFTUlTU0lWRSBcbiIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0
aGUgcmVuZGVyIHRhcmdldCB0ZXh0dXJlcyBhbmQgcG9zdCBwcm9jZXNzZXMgdXNlZCBpbiB0aGUg
Z2xvdyBsYXllci4KKyAgICAgKi8KKyAgICBHbG93TGF5ZXIucHJvdG90eXBlLl9jcmVhdGVUZXh0
dXJlQW5kUG9zdFByb2Nlc3NlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgdmFyIGJsdXJUZXh0dXJlV2lkdGggPSB0aGlzLl9tYWluVGV4dHVyZURl
c2lyZWRTaXplLndpZHRoOworICAgICAgICB2YXIgYmx1clRleHR1cmVIZWlnaHQgPSB0aGlzLl9t
YWluVGV4dHVyZURlc2lyZWRTaXplLmhlaWdodDsKKyAgICAgICAgYmx1clRleHR1cmVXaWR0aCA9
IHRoaXMuX2VuZ2luZS5uZWVkUE9UVGV4dHVyZXMgPyBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzEyX19bIkVuZ2luZSJdLkdldEV4cG9uZW50T2ZUd28oYmx1clRleHR1
cmVXaWR0aCwgdGhpcy5fbWF4U2l6ZSkgOiBibHVyVGV4dHVyZVdpZHRoOworICAgICAgICBibHVy
VGV4dHVyZUhlaWdodCA9IHRoaXMuX2VuZ2luZS5uZWVkUE9UVGV4dHVyZXMgPyBfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIkVuZ2luZSJdLkdldEV4cG9uZW50
T2ZUd28oYmx1clRleHR1cmVIZWlnaHQsIHRoaXMuX21heFNpemUpIDogYmx1clRleHR1cmVIZWln
aHQ7CisgICAgICAgIHZhciB0ZXh0dXJlVHlwZSA9IDA7CisgICAgICAgIGlmICh0aGlzLl9lbmdp
bmUuZ2V0Q2FwcygpLnRleHR1cmVIYWxmRmxvYXRSZW5kZXIpIHsKKyAgICAgICAgICAgIHRleHR1
cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9f
WyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lH
TkVEX0lOVDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9ibHVyVGV4dHVyZTEgPSBuZXcgX01h
dGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlJlbmRlclRhcmdldFRleHR1cmUiXSgiR2xvd0xheWVyQmx1clJUVCIsIHsKKyAg
ICAgICAgICAgIHdpZHRoOiBibHVyVGV4dHVyZVdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBi
bHVyVGV4dHVyZUhlaWdodAorICAgICAgICB9LCB0aGlzLl9zY2VuZSwgZmFsc2UsIHRydWUsIHRl
eHR1cmVUeXBlKTsKKyAgICAgICAgdGhpcy5fYmx1clRleHR1cmUxLndyYXBVID0gX01hdGVyaWFs
c19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUi
XS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgdGhpcy5fYmx1clRleHR1cmUxLndyYXBWID0g
X01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlRleHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgdGhpcy5fYmx1clRleHR1cmUx
LnVwZGF0ZVNhbXBsaW5nTW9kZShfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSk7Cisg
ICAgICAgIHRoaXMuX2JsdXJUZXh0dXJlMS5yZW5kZXJQYXJ0aWNsZXMgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5fYmx1clRleHR1cmUxLmlnbm9yZUNhbWVyYVZpZXdwb3J0ID0gdHJ1ZTsKKyAgICAg
ICAgdmFyIGJsdXJUZXh0dXJlV2lkdGgyID0gTWF0aC5mbG9vcihibHVyVGV4dHVyZVdpZHRoIC8g
Mik7CisgICAgICAgIHZhciBibHVyVGV4dHVyZUhlaWdodDIgPSBNYXRoLmZsb29yKGJsdXJUZXh0
dXJlSGVpZ2h0IC8gMik7CisgICAgICAgIHRoaXMuX2JsdXJUZXh0dXJlMiA9IG5ldyBfTWF0ZXJp
YWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdKCJHbG93TGF5ZXJCbHVyUlRUMiIsIHsKKyAgICAg
ICAgICAgIHdpZHRoOiBibHVyVGV4dHVyZVdpZHRoMiwKKyAgICAgICAgICAgIGhlaWdodDogYmx1
clRleHR1cmVIZWlnaHQyCisgICAgICAgIH0sIHRoaXMuX3NjZW5lLCBmYWxzZSwgdHJ1ZSwgdGV4
dHVyZVR5cGUpOworICAgICAgICB0aGlzLl9ibHVyVGV4dHVyZTIud3JhcFUgPSBfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGV4dHVyZSJd
LkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICB0aGlzLl9ibHVyVGV4dHVyZTIud3JhcFYgPSBf
TWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
VGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICB0aGlzLl9ibHVyVGV4dHVyZTIu
dXBkYXRlU2FtcGxpbmdNb2RlKF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFKTsKKyAg
ICAgICAgdGhpcy5fYmx1clRleHR1cmUyLnJlbmRlclBhcnRpY2xlcyA9IGZhbHNlOworICAgICAg
ICB0aGlzLl9ibHVyVGV4dHVyZTIuaWdub3JlQ2FtZXJhVmlld3BvcnQgPSB0cnVlOworICAgICAg
ICB0aGlzLl90ZXh0dXJlcyA9IFt0aGlzLl9ibHVyVGV4dHVyZTEsIHRoaXMuX2JsdXJUZXh0dXJl
Ml07CisgICAgICAgIHRoaXMuX2hvcml6b250YWxCbHVyUG9zdHByb2Nlc3MxID0gbmV3IF9Qb3N0
UHJvY2Vzc2VzX2JsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJC
bHVyUG9zdFByb2Nlc3MiXSgiR2xvd0xheWVySEJQMSIsIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMiJdKDEuMCwgMCksIHRoaXMuX29w
dGlvbnMuYmx1cktlcm5lbFNpemUgLyAyLCB7CisgICAgICAgICAgICB3aWR0aDogYmx1clRleHR1
cmVXaWR0aCwKKyAgICAgICAgICAgIGhlaWdodDogYmx1clRleHR1cmVIZWlnaHQKKyAgICAgICAg
fSwgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHRoaXMuX3NjZW5lLmdl
dEVuZ2luZSgpLCBmYWxzZSwgdGV4dHVyZVR5cGUpOworICAgICAgICB0aGlzLl9ob3Jpem9udGFs
Qmx1clBvc3Rwcm9jZXNzMS53aWR0aCA9IGJsdXJUZXh0dXJlV2lkdGg7CisgICAgICAgIHRoaXMu
X2hvcml6b250YWxCbHVyUG9zdHByb2Nlc3MxLmhlaWdodCA9IGJsdXJUZXh0dXJlSGVpZ2h0Owor
ICAgICAgICB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9jZXNzMS5vbkFwcGx5T2JzZXJ2YWJs
ZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUo
InRleHR1cmVTYW1wbGVyIiwgX3RoaXMuX21haW5UZXh0dXJlKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHRoaXMuX3ZlcnRpY2FsQmx1clBvc3Rwcm9jZXNzMSA9IG5ldyBfUG9zdFByb2Nlc3Nlc19i
bHVyUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQmx1clBvc3RQcm9j
ZXNzIl0oIkdsb3dMYXllclZCUDEiLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjIiXSgwLCAxLjApLCB0aGlzLl9vcHRpb25zLmJsdXJL
ZXJuZWxTaXplIC8gMiwgeworICAgICAgICAgICAgd2lkdGg6IGJsdXJUZXh0dXJlV2lkdGgsCisg
ICAgICAgICAgICBoZWlnaHQ6IGJsdXJUZXh0dXJlSGVpZ2h0CisgICAgICAgIH0sIG51bGwsIF9N
YXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJU
ZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwg
ZmFsc2UsIHRleHR1cmVUeXBlKTsKKyAgICAgICAgdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJv
Y2VzczIgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIkJsdXJQb3N0UHJvY2VzcyJdKCJHbG93TGF5ZXJIQlAyIiwgbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IyIl0o
MS4wLCAwKSwgdGhpcy5fb3B0aW9ucy5ibHVyS2VybmVsU2l6ZSAvIDIsIHsKKyAgICAgICAgICAg
IHdpZHRoOiBibHVyVGV4dHVyZVdpZHRoMiwKKyAgICAgICAgICAgIGhlaWdodDogYmx1clRleHR1
cmVIZWlnaHQyCisgICAgICAgIH0sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdN
T0RFLCB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsIHRleHR1cmVUeXBlKTsKKyAgICAg
ICAgdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJvY2VzczIud2lkdGggPSBibHVyVGV4dHVyZVdp
ZHRoMjsKKyAgICAgICAgdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJvY2VzczIuaGVpZ2h0ID0g
Ymx1clRleHR1cmVIZWlnaHQyOworICAgICAgICB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9j
ZXNzMi5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAg
ICAgZWZmZWN0LnNldFRleHR1cmUoInRleHR1cmVTYW1wbGVyIiwgX3RoaXMuX2JsdXJUZXh0dXJl
MSk7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl92ZXJ0aWNhbEJsdXJQb3N0cHJvY2VzczIg
PSBuZXcgX1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkJsdXJQb3N0UHJvY2VzcyJdKCJHbG93TGF5ZXJWQlAyIiwgbmV3IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IyIl0oMCwgMS4w
KSwgdGhpcy5fb3B0aW9ucy5ibHVyS2VybmVsU2l6ZSAvIDIsIHsKKyAgICAgICAgICAgIHdpZHRo
OiBibHVyVGV4dHVyZVdpZHRoMiwKKyAgICAgICAgICAgIGhlaWdodDogYmx1clRleHR1cmVIZWln
aHQyCisgICAgICAgIH0sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0
aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsIHRleHR1cmVUeXBlKTsKKyAgICAgICAgdGhp
cy5fcG9zdFByb2Nlc3NlcyA9IFt0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9jZXNzMSwgdGhp
cy5fdmVydGljYWxCbHVyUG9zdHByb2Nlc3MxLCB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9j
ZXNzMiwgdGhpcy5fdmVydGljYWxCbHVyUG9zdHByb2Nlc3MyXTsKKyAgICAgICAgdGhpcy5fcG9z
dFByb2Nlc3NlczEgPSBbdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJvY2VzczEsIHRoaXMuX3Zl
cnRpY2FsQmx1clBvc3Rwcm9jZXNzMV07CisgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzZXMyID0g
W3RoaXMuX2hvcml6b250YWxCbHVyUG9zdHByb2Nlc3MyLCB0aGlzLl92ZXJ0aWNhbEJsdXJQb3N0
cHJvY2VzczJdOworICAgICAgICB0aGlzLl9tYWluVGV4dHVyZS5zYW1wbGVzID0gdGhpcy5fb3B0
aW9ucy5tYWluVGV4dHVyZVNhbXBsZXM7CisgICAgICAgIHRoaXMuX21haW5UZXh0dXJlLm9uQWZ0
ZXJVbmJpbmRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgaW50
ZXJuYWxUZXh0dXJlID0gX3RoaXMuX2JsdXJUZXh0dXJlMS5nZXRJbnRlcm5hbFRleHR1cmUoKTsK
KyAgICAgICAgICAgIGlmIChpbnRlcm5hbFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBfdGhp
cy5fc2NlbmUucG9zdFByb2Nlc3NNYW5hZ2VyLmRpcmVjdFJlbmRlcihfdGhpcy5fcG9zdFByb2Nl
c3NlczEsIGludGVybmFsVGV4dHVyZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgaW50ZXJuYWxU
ZXh0dXJlID0gX3RoaXMuX2JsdXJUZXh0dXJlMi5nZXRJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW50ZXJuYWxUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIF90
aGlzLl9zY2VuZS5wb3N0UHJvY2Vzc01hbmFnZXIuZGlyZWN0UmVuZGVyKF90aGlzLl9wb3N0UHJv
Y2Vzc2VzMiwgaW50ZXJuYWxUZXh0dXJlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAvLyBQcmV2ZW50IGF1dG9DbGVhci4KKyAg
ICAgICAgdGhpcy5fcG9zdFByb2Nlc3Nlcy5tYXAoZnVuY3Rpb24gKHBwKSB7IHBwLmF1dG9DbGVh
ciA9IGZhbHNlOyB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyBmb3IgdGhlIHJl
YWRpbmVzcyBvZiB0aGUgZWxlbWVudCBjb21wb3NpbmcgdGhlIGxheWVyLgorICAgICAqIEBwYXJh
bSBzdWJNZXNoIHRoZSBtZXNoIHRvIGNoZWNrIGZvcgorICAgICAqIEBwYXJhbSB1c2VJbnN0YW5j
ZXMgc3BlY2lmeSB3ZXRoZXIgb3Igbm90IHRvIHVzZSBpbnN0YW5jZXMgdG8gcmVuZGVyIHRoZSBt
ZXNoCisgICAgICogQHBhcmFtIGVtaXNzaXZlVGV4dHVyZSB0aGUgYXNzb2NpYXRlZCBlbWlzc2l2
ZSB0ZXh0dXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGdsb3cKKyAgICAgKiBAcmV0dXJuIHRydWUg
aWYgcmVhZHkgb3RoZXJ3aXNlLCBmYWxzZQorICAgICAqLworICAgIEdsb3dMYXllci5wcm90b3R5
cGUuaXNSZWFkeSA9IGZ1bmN0aW9uIChzdWJNZXNoLCB1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAg
dmFyIG1hdGVyaWFsID0gc3ViTWVzaC5nZXRNYXRlcmlhbCgpOworICAgICAgICB2YXIgbWVzaCA9
IHN1Yk1lc2guZ2V0UmVuZGVyaW5nTWVzaCgpOworICAgICAgICBpZiAoIW1hdGVyaWFsIHx8ICFt
ZXNoKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IGVtaXNzaXZlVGV4dHVyZSA9IG1hdGVyaWFsLmVtaXNzaXZlVGV4dHVyZTsKKyAgICAgICAgcmV0
dXJuIF9zdXBlci5wcm90b3R5cGUuX2lzUmVhZHkuY2FsbCh0aGlzLCBzdWJNZXNoLCB1c2VJbnN0
YW5jZXMsIGVtaXNzaXZlVGV4dHVyZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IHdldGhlciBvciBub29kIHRoZSBsYXllciBuZWVkcyBzdGVuY2lsIGVuYWJsZWQgZHVyaW5nIHRo
ZSBtZXNoIHJlbmRlcmluZy4KKyAgICAgKi8KKyAgICBHbG93TGF5ZXIucHJvdG90eXBlLm5lZWRT
dGVuY2lsID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggY2FuIGJlIHJlbmRlcmVkLCBv
dGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gcmVuZGVyCisg
ICAgICogQHBhcmFtIG1hdGVyaWFsIFRoZSBtYXRlcmlhbCB1c2VkIG9uIHRoZSBtZXNoCisgICAg
ICogQHJldHVybnMgdHJ1ZSBpZiBpdCBjYW4gYmUgcmVuZGVyZWQgb3RoZXJ3aXNlIGZhbHNlCisg
ICAgICovCisgICAgR2xvd0xheWVyLnByb3RvdHlwZS5fY2FuUmVuZGVyTWVzaCA9IGZ1bmN0aW9u
IChtZXNoLCBtYXRlcmlhbCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIG9mIHJlbmRlcmluZyB0aGUgZ2VuZXJh
dGluZyBlZmZlY3Qgb24gdGhlIG1haW4gY2FudmFzLgorICAgICAqIEBwYXJhbSBlZmZlY3QgVGhl
IGVmZmVjdCB1c2VkIHRvIHJlbmRlciB0aHJvdWdoCisgICAgICovCisgICAgR2xvd0xheWVyLnBy
b3RvdHlwZS5faW50ZXJuYWxSZW5kZXIgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgIC8v
IFRleHR1cmUKKyAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInRleHR1cmVTYW1wbGVyIiwgdGhp
cy5fYmx1clRleHR1cmUxKTsKKyAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInRleHR1cmVTYW1w
bGVyMiIsIHRoaXMuX2JsdXJUZXh0dXJlMik7CisgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgib2Zm
c2V0IiwgdGhpcy5faW50ZW5zaXR5KTsKKyAgICAgICAgLy8gQ2FjaGUKKyAgICAgICAgdmFyIGVu
Z2luZSA9IHRoaXMuX2VuZ2luZTsKKyAgICAgICAgdmFyIHByZXZpb3VzU3RlbmNpbEJ1ZmZlciA9
IGVuZ2luZS5nZXRTdGVuY2lsQnVmZmVyKCk7CisgICAgICAgIC8vIERyYXcgb3JkZXIKKyAgICAg
ICAgZW5naW5lLnNldFN0ZW5jaWxCdWZmZXIoZmFsc2UpOworICAgICAgICBlbmdpbmUuZHJhd0Vs
ZW1lbnRzVHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82
X19bIk1hdGVyaWFsIl0uVHJpYW5nbGVGaWxsTW9kZSwgMCwgNik7CisgICAgICAgIC8vIERyYXcg
b3JkZXIKKyAgICAgICAgZW5naW5lLnNldFN0ZW5jaWxCdWZmZXIocHJldmlvdXNTdGVuY2lsQnVm
ZmVyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHJlcXVpcmVkIHZhbHVlcyBm
b3IgYm90aCB0aGUgZW1pc3NpdmUgdGV4dHVyZSBhbmQgYW5kIHRoZSBtYWluIGNvbG9yLgorICAg
ICAqLworICAgIEdsb3dMYXllci5wcm90b3R5cGUuX3NldEVtaXNzaXZlVGV4dHVyZUFuZENvbG9y
ID0gZnVuY3Rpb24gKG1lc2gsIHN1Yk1lc2gsIG1hdGVyaWFsKSB7CisgICAgICAgIHZhciB0ZXh0
dXJlTGV2ZWwgPSAxLjA7CisgICAgICAgIGlmICh0aGlzLmN1c3RvbUVtaXNzaXZlVGV4dHVyZVNl
bGVjdG9yKSB7CisgICAgICAgICAgICB0aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci50ZXh0
dXJlID0gdGhpcy5jdXN0b21FbWlzc2l2ZVRleHR1cmVTZWxlY3RvcihtZXNoLCBzdWJNZXNoLCBt
YXRlcmlhbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAobWF0
ZXJpYWwpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci50
ZXh0dXJlID0gbWF0ZXJpYWwuZW1pc3NpdmVUZXh0dXJlOworICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci50ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVMZXZlbCA9IHRoaXMuX2VtaXNzaXZlVGV4dHVyZUFuZENvbG9yLnRleHR1cmUu
bGV2ZWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZW1pc3NpdmVUZXh0dXJlQW5kQ29sb3IudGV4dHVy
ZSA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuY3Vz
dG9tRW1pc3NpdmVDb2xvclNlbGVjdG9yKSB7CisgICAgICAgICAgICB0aGlzLmN1c3RvbUVtaXNz
aXZlQ29sb3JTZWxlY3RvcihtZXNoLCBzdWJNZXNoLCBtYXRlcmlhbCwgdGhpcy5fZW1pc3NpdmVU
ZXh0dXJlQW5kQ29sb3IuY29sb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgaWYgKG1hdGVyaWFsLmVtaXNzaXZlQ29sb3IpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci5jb2xvci5zZXQobWF0ZXJpYWwuZW1pc3NpdmVDb2xv
ci5yICogdGV4dHVyZUxldmVsLCBtYXRlcmlhbC5lbWlzc2l2ZUNvbG9yLmcgKiB0ZXh0dXJlTGV2
ZWwsIG1hdGVyaWFsLmVtaXNzaXZlQ29sb3IuYiAqIHRleHR1cmVMZXZlbCwgbWF0ZXJpYWwuYWxw
aGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fZW1pc3NpdmVUZXh0dXJlQW5kQ29sb3IuY29sb3Iuc2V0KHRoaXMubmV1dHJhbENvbG9y
LnIsIHRoaXMubmV1dHJhbENvbG9yLmcsIHRoaXMubmV1dHJhbENvbG9yLmIsIHRoaXMubmV1dHJh
bENvbG9yLmEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggc2hvdWxkIHJlbmRlciwgb3RoZXJ3aXNlIGZh
bHNlLgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRvIHJlbmRlcgorICAgICAqIEByZXR1
cm5zIHRydWUgaWYgaXQgc2hvdWxkIHJlbmRlciBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAg
ICBHbG93TGF5ZXIucHJvdG90eXBlLl9zaG91bGRSZW5kZXJNZXNoID0gZnVuY3Rpb24gKG1lc2gp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuaGFzTWVzaChtZXNoKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFkZHMgc3BlY2lmaWMgZWZmZWN0cyBkZWZpbmVzLgorICAgICAqIEBwYXJhbSBkZWZp
bmVzIFRoZSBkZWZpbmVzIHRvIGFkZCBzcGVjaWZpY3MgdG8uCisgICAgICovCisgICAgR2xvd0xh
eWVyLnByb3RvdHlwZS5fYWRkQ3VzdG9tRWZmZWN0RGVmaW5lcyA9IGZ1bmN0aW9uIChkZWZpbmVz
KSB7CisgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBHTE9XIik7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBZGQgYSBtZXNoIGluIHRoZSBleGNsdXNpb24gbGlzdCB0byBwcmV2ZW50IGl0
IHRvIGltcGFjdCBvciBiZWluZyBpbXBhY3RlZCBieSB0aGUgZ2xvdyBsYXllci4KKyAgICAgKiBA
cGFyYW0gbWVzaCBUaGUgbWVzaCB0byBleGNsdWRlIGZyb20gdGhlIGdsb3cgbGF5ZXIKKyAgICAg
Ki8KKyAgICBHbG93TGF5ZXIucHJvdG90eXBlLmFkZEV4Y2x1ZGVkTWVzaCA9IGZ1bmN0aW9uICht
ZXNoKSB7CisgICAgICAgIGlmICh0aGlzLl9leGNsdWRlZE1lc2hlcy5pbmRleE9mKG1lc2gudW5p
cXVlSWQpID09PSAtMSkgeworICAgICAgICAgICAgdGhpcy5fZXhjbHVkZWRNZXNoZXMucHVzaCht
ZXNoLnVuaXF1ZUlkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICAqIFJlbW92
ZSBhIG1lc2ggZnJvbSB0aGUgZXhjbHVzaW9uIGxpc3QgdG8gbGV0IGl0IGltcGFjdCBvciBiZWlu
ZyBpbXBhY3RlZCBieSB0aGUgZ2xvdyBsYXllci4KKyAgICAgICogQHBhcmFtIG1lc2ggVGhlIG1l
c2ggdG8gcmVtb3ZlCisgICAgICAqLworICAgIEdsb3dMYXllci5wcm90b3R5cGUucmVtb3ZlRXhj
bHVkZWRNZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5f
ZXhjbHVkZWRNZXNoZXMuaW5kZXhPZihtZXNoLnVuaXF1ZUlkKTsKKyAgICAgICAgaWYgKGluZGV4
ICE9PSAtMSkgeworICAgICAgICAgICAgdGhpcy5fZXhjbHVkZWRNZXNoZXMuc3BsaWNlKGluZGV4
LCAxKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGEgbWVzaCBpbiB0
aGUgaW5jbHVzaW9uIGxpc3QgdG8gaW1wYWN0IG9yIGJlaW5nIGltcGFjdGVkIGJ5IHRoZSBnbG93
IGxheWVyLgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRvIGluY2x1ZGUgaW4gdGhlIGds
b3cgbGF5ZXIKKyAgICAgKi8KKyAgICBHbG93TGF5ZXIucHJvdG90eXBlLmFkZEluY2x1ZGVkT25s
eU1lc2ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICBpZiAodGhpcy5faW5jbHVkZWRPbmx5
TWVzaGVzLmluZGV4T2YobWVzaC51bmlxdWVJZCkgPT09IC0xKSB7CisgICAgICAgICAgICB0aGlz
Ll9pbmNsdWRlZE9ubHlNZXNoZXMucHVzaChtZXNoLnVuaXF1ZUlkKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICAqIFJlbW92ZSBhIG1lc2ggZnJvbSB0aGUgSW5jbHVzaW9uIGxp
c3QgdG8gcHJldmVudCBpdCB0byBpbXBhY3Qgb3IgYmVpbmcgaW1wYWN0ZWQgYnkgdGhlIGdsb3cg
bGF5ZXIuCisgICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRvIHJlbW92ZQorICAgICAgKi8K
KyAgICBHbG93TGF5ZXIucHJvdG90eXBlLnJlbW92ZUluY2x1ZGVkT25seU1lc2ggPSBmdW5jdGlv
biAobWVzaCkgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pbmNsdWRlZE9ubHlNZXNoZXMu
aW5kZXhPZihtZXNoLnVuaXF1ZUlkKTsKKyAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAg
ICAgICAgICAgdGhpcy5faW5jbHVkZWRPbmx5TWVzaGVzLnNwbGljZShpbmRleCwgMSk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERldGVybWluZSBpZiBhIGdpdmVuIG1lc2gg
d2lsbCBiZSB1c2VkIGluIHRoZSBnbG93IGxheWVyCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1l
c2ggdG8gdGVzdAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggd2lsbCBiZSBoaWdo
bGlnaHRlZCBieSB0aGUgY3VycmVudCBnbG93IGxheWVyCisgICAgICovCisgICAgR2xvd0xheWVy
LnByb3RvdHlwZS5oYXNNZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKCFfc3Vw
ZXIucHJvdG90eXBlLmhhc01lc2guY2FsbCh0aGlzLCBtZXNoKSkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIEluY2x1ZGVkIE1lc2gKKyAgICAgICAg
aWYgKHRoaXMuX2luY2x1ZGVkT25seU1lc2hlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9pbmNsdWRlZE9ubHlNZXNoZXMuaW5kZXhPZihtZXNoLnVuaXF1ZUlkKSAhPT0gLTE7
CisgICAgICAgIH0KKyAgICAgICAgLy8gRXhjbHVkZWQgTWVzaAorICAgICAgICBpZiAodGhpcy5f
ZXhjbHVkZWRNZXNoZXMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhjbHVk
ZWRNZXNoZXMuaW5kZXhPZihtZXNoLnVuaXF1ZUlkKSA9PT0gLTE7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGcmVlIGFueSByZXNvdXJj
ZXMgYW5kIHJlZmVyZW5jZXMgYXNzb2NpYXRlZCB0byBhIG1lc2guCisgICAgICogSW50ZXJuYWwg
dXNlCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gZnJlZS4KKyAgICAgKiBAaGlkZGVu
CisgICAgICovCisgICAgR2xvd0xheWVyLnByb3RvdHlwZS5fZGlzcG9zZU1lc2ggPSBmdW5jdGlv
biAobWVzaCkgeworICAgICAgICB0aGlzLnJlbW92ZUluY2x1ZGVkT25seU1lc2gobWVzaCk7Cisg
ICAgICAgIHRoaXMucmVtb3ZlRXhjbHVkZWRNZXNoKG1lc2gpOworICAgIH07CisgICAgLyoqCisg
ICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVmZmVjdCBsYXllcgorICAgICAgKiBA
cmV0dXJucyB0aGUgc3RyaW5nIHdpdGggdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVmZmVjdCBsYXll
cgorICAgICAgKi8KKyAgICBHbG93TGF5ZXIucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJHbG93TGF5ZXIiOworICAgIH07CisgICAgLyoqCisg
ICAgICogU2VyaWFsaXplcyB0aGlzIGdsb3cgbGF5ZXIKKyAgICAgKiBAcmV0dXJucyBhIHNlcmlh
bGl6ZWQgZ2xvdyBsYXllciBvYmplY3QKKyAgICAgKi8KKyAgICBHbG93TGF5ZXIucHJvdG90eXBl
LnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmpl
Y3QgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlh
bGl6YXRpb25IZWxwZXIiXS5TZXJpYWxpemUodGhpcyk7CisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QuY3VzdG9tVHlwZSA9ICJCQUJZTE9OLkdsb3dMYXllciI7CisgICAgICAgIHZhciBpbmRl
eDsKKyAgICAgICAgLy8gSW5jbHVkZWQgbWVzaGVzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QuaW5jbHVkZWRNZXNoZXMgPSBbXTsKKyAgICAgICAgaWYgKHRoaXMuX2luY2x1ZGVkT25seU1l
c2hlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRoaXMu
X2luY2x1ZGVkT25seU1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2
YXIgbWVzaCA9IHRoaXMuX3NjZW5lLmdldE1lc2hCeVVuaXF1ZUlEKHRoaXMuX2luY2x1ZGVkT25s
eU1lc2hlc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGlmIChtZXNoKSB7CisgICAgICAgICAg
ICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaW5jbHVkZWRNZXNoZXMucHVzaChtZXNoLmlk
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
Ly8gRXhjbHVkZWQgbWVzaGVzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZXhjbHVkZWRN
ZXNoZXMgPSBbXTsKKyAgICAgICAgaWYgKHRoaXMuX2V4Y2x1ZGVkTWVzaGVzLmxlbmd0aCkgewor
ICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZXhjbHVkZWRNZXNoZXMu
bGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLl9zY2Vu
ZS5nZXRNZXNoQnlVbmlxdWVJRCh0aGlzLl9leGNsdWRlZE1lc2hlc1tpbmRleF0pOworICAgICAg
ICAgICAgICAgIGlmIChtZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QuZXhjbHVkZWRNZXNoZXMucHVzaChtZXNoLmlkKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmpl
Y3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgR2xvdyBMYXllciBmcm9tIHBh
cnNlZCBnbG93IGxheWVyIGRhdGEKKyAgICAgKiBAcGFyYW0gcGFyc2VkR2xvd0xheWVyIGRlZmlu
ZXMgZ2xvdyBsYXllciBkYXRhCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGN1cnJl
bnQgc2NlbmUKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSByb290IFVSTCBjb250
YWluaW5nIHRoZSBnbG93IGxheWVyIGluZm9ybWF0aW9uCisgICAgICogQHJldHVybnMgYSBwYXJz
ZWQgR2xvdyBMYXllcgorICAgICAqLworICAgIEdsb3dMYXllci5QYXJzZSA9IGZ1bmN0aW9uIChw
YXJzZWRHbG93TGF5ZXIsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIHZhciBnbCA9IF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhl
bHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBHbG93TGF5ZXIocGFyc2VkR2xv
d0xheWVyLm5hbWUsIHNjZW5lLCBwYXJzZWRHbG93TGF5ZXIub3B0aW9ucyk7IH0sIHBhcnNlZEds
b3dMYXllciwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIC8v
IEV4Y2x1ZGVkIG1lc2hlcworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJzZWRH
bG93TGF5ZXIuZXhjbHVkZWRNZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2
YXIgbWVzaCA9IHNjZW5lLmdldE1lc2hCeUlEKHBhcnNlZEdsb3dMYXllci5leGNsdWRlZE1lc2hl
c1tpbmRleF0pOworICAgICAgICAgICAgaWYgKG1lc2gpIHsKKyAgICAgICAgICAgICAgICBnbC5h
ZGRFeGNsdWRlZE1lc2gobWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
Ly8gSW5jbHVkZWQgbWVzaGVzCisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBhcnNl
ZEdsb3dMYXllci5pbmNsdWRlZE1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAg
IHZhciBtZXNoID0gc2NlbmUuZ2V0TWVzaEJ5SUQocGFyc2VkR2xvd0xheWVyLmluY2x1ZGVkTWVz
aGVzW2luZGV4XSk7CisgICAgICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgICAgIGds
LmFkZEluY2x1ZGVkT25seU1lc2gobWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGdsOworICAgIH07CisgICAgLyoqCisgICAgICogRWZmZWN0IE5hbWUgb2Yg
dGhlIGxheWVyLgorICAgICAqLworICAgIEdsb3dMYXllci5FZmZlY3ROYW1lID0gIkdsb3dMYXll
ciI7CisgICAgLyoqCisgICAgICogVGhlIGRlZmF1bHQgYmx1ciBrZXJuZWwgc2l6ZSB1c2VkIGZv
ciB0aGUgZ2xvdy4KKyAgICAgKi8KKyAgICBHbG93TGF5ZXIuRGVmYXVsdEJsdXJLZXJuZWxTaXpl
ID0gMzI7CisgICAgLyoqCisgICAgICogVGhlIGRlZmF1bHQgdGV4dHVyZSBzaXplIHJhdGlvIHVz
ZWQgZm9yIHRoZSBnbG93LgorICAgICAqLworICAgIEdsb3dMYXllci5EZWZhdWx0VGV4dHVyZVJh
dGlvID0gMC41OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVj
b3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgR2xvd0xheWVyLnByb3RvdHlw
ZSwgImJsdXJLZXJuZWxTaXplIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBH
bG93TGF5ZXIucHJvdG90eXBlLCAiaW50ZW5zaXR5IiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCJvcHRpb25zIikKKyAgICBdLCBHbG93TGF5ZXIucHJvdG90eXBlLCAiX29wdGlvbnMiLCB2b2lk
IDApOworICAgIHJldHVybiBHbG93TGF5ZXI7Cit9KF9lZmZlY3RMYXllcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJFZmZlY3RMYXllciJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1si
QkFCWUxPTi5HbG93TGF5ZXIiXSA9IEdsb3dMYXllcjsKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vTGF5ZXJzL2hpZ2hsaWdodExheWVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL0xheWVycy9oaWdobGlnaHRMYXllci50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IEhpZ2hsaWdodExheWVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkhpZ2hsaWdodExheWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBIaWdobGlnaHRMYXllcjsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAq
LyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9y
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVz
L2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlh
bHMvbWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVy
ZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRlclRhcmdldFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxz
L1RleHR1cmVzL3JlbmRlclRhcmdldFRleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2Vz
cyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfcGFzc1Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUG9zdFByb2Nlc3Nlcy9w
YXNzUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wYXNzUG9zdFByb2Nlc3MudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19ibHVyUG9zdFByb2Nlc3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9Qb3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL2JsdXJQ
b3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lZmZlY3RMYXllcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
ZWZmZWN0TGF5ZXIgKi8gIi4vTGF5ZXJzL2VmZmVjdExheWVyLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9hYnN0cmFjdFNjZW5lICovICIuL2Fic3RyYWN0
U2NlbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2Mv
bG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0
aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2ds
b3dNYXBNZXJnZV9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZ2xvd01hcE1lcmdlLmZyYWdtZW50ICovICIu
L1NoYWRlcnMvZ2xvd01hcE1lcmdlLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1NoYWRlcnNfZ2xvd01hcE1lcmdlX3ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZ2xvd01hcE1lcmdl
LnZlcnRleCAqLyAiLi9TaGFkZXJzL2dsb3dNYXBNZXJnZS52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19nbG93Qmx1clBvc3RQcm9jZXNzX2ZyYWdtZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
U2hhZGVycy9nbG93Qmx1clBvc3RQcm9jZXNzLmZyYWdtZW50ICovICIuL1NoYWRlcnMvZ2xvd0Js
dXJQb3N0UHJvY2Vzcy5mcmFnbWVudC50cyIpOworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEz
X19bIkFic3RyYWN0U2NlbmUiXS5wcm90b3R5cGUuZ2V0SGlnaGxpZ2h0TGF5ZXJCeU5hbWUgPSBm
dW5jdGlvbiAobmFtZSkgeworICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmVm
ZmVjdExheWVycy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgaWYgKHRoaXMuZWZmZWN0TGF5
ZXJzW2luZGV4XS5uYW1lID09PSBuYW1lICYmIHRoaXMuZWZmZWN0TGF5ZXJzW2luZGV4XS5nZXRF
ZmZlY3ROYW1lKCkgPT09IEhpZ2hsaWdodExheWVyLkVmZmVjdE5hbWUpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLmVmZmVjdExheWVyc1tpbmRleF07CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIG51bGw7Cit9OworLyoqCisgKiBTcGVjaWFsIEdsb3cgQmx1ciBwb3N0IHByb2Nlc3Mg
b25seSBibHVycmluZyB0aGUgYWxwaGEgY2hhbm5lbAorICogSXQgZW5mb3JjZXMga2VlcGluZyB0
aGUgbW9zdCBsdW1pbm91cyBjb2xvciBpbiB0aGUgY29sb3IgY2hhbm5lbC4KKyAqLwordmFyIEds
b3dCbHVyUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oR2xvd0Js
dXJQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBHbG93Qmx1clBvc3RQcm9jZXNz
KG5hbWUsIGRpcmVjdGlvbiwga2VybmVsLCBvcHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwg
ZW5naW5lLCByZXVzYWJsZSkgeworICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lkIDAp
IHsgc2FtcGxpbmdNb2RlID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREU7IH0KKyAg
ICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgImdsb3dCbHVyUG9zdFBy
b2Nlc3MiLCBbInNjcmVlblNpemUiLCAiZGlyZWN0aW9uIiwgImJsdXJXaWR0aCJdLCBudWxsLCBv
cHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSkgfHwgdGhpczsK
KyAgICAgICAgX3RoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uOworICAgICAgICBfdGhpcy5rZXJu
ZWwgPSBrZXJuZWw7CisgICAgICAgIF90aGlzLm9uQXBwbHlPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCJzY3JlZW5TaXplIiwg
X3RoaXMud2lkdGgsIF90aGlzLmhlaWdodCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0VmVjdG9y
MigiZGlyZWN0aW9uIiwgX3RoaXMuZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRG
bG9hdCgiYmx1cldpZHRoIiwgX3RoaXMua2VybmVsKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiBfdGhpczsKKyAgICB9CisgICAgcmV0dXJuIEdsb3dCbHVyUG9zdFByb2Nlc3M7Cit9KF9Q
b3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlBv
c3RQcm9jZXNzIl0pKTsKKy8qKgorICogVGhlIGhpZ2hsaWdodCBsYXllciBIZWxwcyBhZGRpbmcg
YSBnbG93IGVmZmVjdCBhcm91bmQgYSBtZXNoLgorICoKKyAqIE9uY2UgaW5zdGFudGlhdGVkIGlu
IGEgc2NlbmUsIHNpbXBseSB1c2UgdGhlIHB1c2hNZXNoIG9yIHJlbW92ZU1lc2ggbWV0aG9kIHRv
IGFkZCBvciByZW1vdmUKKyAqIGdsb3d5IG1lc2hlcyB0byB5b3VyIHNjZW5lLgorICoKKyAqICEh
ISBUSElTIFJFUVVJUkVTIEFOIEFDVElWRSBTVEVOQ0lMIEJVRkZFUiBPTiBUSEUgQ0FOVkFTICEh
IQorICovCit2YXIgSGlnaGxpZ2h0TGF5ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1
cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRz
Il0oSGlnaGxpZ2h0TGF5ZXIsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVz
IGEgbmV3IGhpZ2hsaWdodCBMYXllciBhbmQgcmVmZXJlbmNlcyBpdCB0byB0aGUgc2NlbmUuLgor
ICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBsYXllcgorICAgICAqIEBwYXJhbSBz
Y2VuZSBUaGUgc2NlbmUgdG8gdXNlIHRoZSBsYXllciBpbgorICAgICAqIEBwYXJhbSBvcHRpb25z
IFNldHMgb2Ygbm9uZSBtYW5kYXRvcnkgb3B0aW9ucyB0byB1c2Ugd2l0aCB0aGUgbGF5ZXIgKHNl
ZSBJSGlnaGxpZ2h0TGF5ZXJPcHRpb25zIGZvciBtb3JlIGluZm9ybWF0aW9uKQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIEhpZ2hsaWdodExheWVyKG5hbWUsIHNjZW5lLCBvcHRpb25zKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0aGlzOwor
ICAgICAgICBfdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNp
ZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgaW5uZXIgZ2xvdyBpcyBBQ1RJVkUgaW4gdGhlIGxheWVy
LgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaW5uZXJHbG93ID0gdHJ1ZTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgb3V0ZXIgZ2xvdyBp
cyBBQ1RJVkUgaW4gdGhlIGxheWVyLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub3V0ZXJH
bG93ID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3
aGVuIHRoZSBoaWdobGlnaHQgbGF5ZXIgaXMgYmVpbmcgYmx1cnJlZC4KKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLm9uQmVmb3JlQmx1ck9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJs
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBoaWdobGlnaHQgbGF5
ZXIgaGFzIGJlZW4gYmx1cnJlZC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uQWZ0ZXJC
bHVyT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhpcy5faW5zdGFuY2VHbG93aW5n
TWVzaFN0ZW5jaWxSZWZlcmVuY2UgPSBIaWdobGlnaHRMYXllci5HbG93aW5nTWVzaFN0ZW5jaWxS
ZWZlcmVuY2UrKzsKKyAgICAgICAgX3RoaXMuX21lc2hlcyA9IHt9OworICAgICAgICBfdGhpcy5f
ZXhjbHVkZWRNZXNoZXMgPSB7fTsKKyAgICAgICAgX3RoaXMubmV1dHJhbENvbG9yID0gSGlnaGxp
Z2h0TGF5ZXIuTmV1dHJhbENvbG9yOworICAgICAgICAvLyBXYXJuIG9uIHN0ZW5jaWwKKyAgICAg
ICAgaWYgKCFfdGhpcy5fZW5naW5lLmlzU3RlbmNpbEVuYWJsZSkgeworICAgICAgICAgICAgX01p
c2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJMb2dnZXIiXS5XYXJuKCJS
ZW5kZXJpbmcgdGhlIEhpZ2hsaWdodCBMYXllciByZXF1aXJlcyB0aGUgc3RlbmNpbCB0byBiZSBh
Y3RpdmUgb24gdGhlIGNhbnZhcy4gdmFyIGVuZ2luZSA9IG5ldyBFbmdpbmUoY2FudmFzLCBhbnRp
YWxpYXMsIHsgc3RlbmNpbDogdHJ1ZSB9Iik7CisgICAgICAgIH0KKyAgICAgICAgLy8gQWRhcHQg
b3B0aW9ucworICAgICAgICBfdGhpcy5fb3B0aW9ucyA9IHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fYXNzaWduIl0oeyBtYWluVGV4dHVyZVJhdGlvOiAwLjUsIGJsdXJUZXh0
dXJlU2l6ZVJhdGlvOiAwLjUsIGJsdXJIb3Jpem9udGFsU2l6ZTogMS4wLCBibHVyVmVydGljYWxT
aXplOiAxLjAsIGFscGhhQmxlbmRpbmdNb2RlOiBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE0X19bIkNvbnN0YW50cyJdLkFMUEhBX0NPTUJJTkUsIGNhbWVyYTog
bnVsbCwgcmVuZGVyaW5nR3JvdXBJZDogLTEgfSwgb3B0aW9ucyk7CisgICAgICAgIC8vIEluaXRp
YWxpemUgdGhlIGxheWVyCisgICAgICAgIF90aGlzLl9pbml0KHsKKyAgICAgICAgICAgIGFscGhh
QmxlbmRpbmdNb2RlOiBfdGhpcy5fb3B0aW9ucy5hbHBoYUJsZW5kaW5nTW9kZSwKKyAgICAgICAg
ICAgIGNhbWVyYTogX3RoaXMuX29wdGlvbnMuY2FtZXJhLAorICAgICAgICAgICAgbWFpblRleHR1
cmVGaXhlZFNpemU6IF90aGlzLl9vcHRpb25zLm1haW5UZXh0dXJlRml4ZWRTaXplLAorICAgICAg
ICAgICAgbWFpblRleHR1cmVSYXRpbzogX3RoaXMuX29wdGlvbnMubWFpblRleHR1cmVSYXRpbywK
KyAgICAgICAgICAgIHJlbmRlcmluZ0dyb3VwSWQ6IF90aGlzLl9vcHRpb25zLnJlbmRlcmluZ0dy
b3VwSWQKKyAgICAgICAgfSk7CisgICAgICAgIC8vIERvIG5vdCByZW5kZXIgYXMgbG9uZyBhcyBu
byBtZXNoZXMgaGF2ZSBiZWVuIGFkZGVkCisgICAgICAgIF90aGlzLl9zaG91bGRSZW5kZXIgPSBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoSGlnaGxpZ2h0TGF5ZXIucHJvdG90eXBlLCAiYmx1ckhvcml6b250YWxTaXplIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgaG9yaXpvbnRhbCBzaXplIG9mIHRoZSBi
bHVyLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJvY2Vzcy5rZXJuZWw7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGhvcml6b250YWwgc2l6
ZSBvZiB0aGUgYmx1ci4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9jZXNzLmtlcm5lbCA9
IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSGln
aGxpZ2h0TGF5ZXIucHJvdG90eXBlLCAiYmx1clZlcnRpY2FsU2l6ZSIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIHZlcnRpY2FsIHNpemUgb2YgdGhlIGJsdXIuCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll92ZXJ0aWNhbEJsdXJQb3N0cHJvY2Vzcy5rZXJuZWw7CisgICAgICAgIH0sCisgICAgICAgIC8q
KgorICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHZlcnRpY2FsIHNpemUgb2YgdGhlIGJsdXIuCisg
ICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAg
dGhpcy5fdmVydGljYWxCbHVyUG9zdHByb2Nlc3Mua2VybmVsID0gdmFsdWU7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIC8qKgorICAgICAqIEdldCB0aGUgZWZmZWN0IG5hbWUgb2YgdGhlIGxheWVy
LgorICAgICAqIEByZXR1cm4gVGhlIGVmZmVjdCBuYW1lCisgICAgICovCisgICAgSGlnaGxpZ2h0
TGF5ZXIucHJvdG90eXBlLmdldEVmZmVjdE5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiBIaWdobGlnaHRMYXllci5FZmZlY3ROYW1lOworICAgIH07CisgICAgLyoqCisgICAgICog
Q3JlYXRlIHRoZSBtZXJnZSBlZmZlY3QuIFRoaXMgaXMgdGhlIHNoYWRlciB1c2UgdG8gYmxpdCB0
aGUgaW5mb3JtYXRpb24gYmFjaworICAgICAqIHRvIHRoZSBtYWluIGNhbnZhcyBhdCB0aGUgZW5k
IG9mIHRoZSBzY2VuZSByZW5kZXJpbmcuCisgICAgICovCisgICAgSGlnaGxpZ2h0TGF5ZXIucHJv
dG90eXBlLl9jcmVhdGVNZXJnZUVmZmVjdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gRWZm
ZWN0CisgICAgICAgIHJldHVybiB0aGlzLl9lbmdpbmUuY3JlYXRlRWZmZWN0KCJnbG93TWFwTWVy
Z2UiLCBbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4
QnVmZmVyIl0uUG9zaXRpb25LaW5kXSwgWyJvZmZzZXQiXSwgWyJ0ZXh0dXJlU2FtcGxlciJdLCB0
aGlzLl9vcHRpb25zLmlzU3Ryb2tlID8gIiNkZWZpbmUgU1RST0tFIFxuIiA6IHVuZGVmaW5lZCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSByZW5kZXIgdGFyZ2V0IHRleHR1
cmVzIGFuZCBwb3N0IHByb2Nlc3NlcyB1c2VkIGluIHRoZSBoaWdobGlnaHQgbGF5ZXIuCisgICAg
ICovCisgICAgSGlnaGxpZ2h0TGF5ZXIucHJvdG90eXBlLl9jcmVhdGVUZXh0dXJlQW5kUG9zdFBy
b2Nlc3NlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgdmFyIGJsdXJUZXh0dXJlV2lkdGggPSB0aGlzLl9tYWluVGV4dHVyZURlc2lyZWRTaXplLndp
ZHRoICogdGhpcy5fb3B0aW9ucy5ibHVyVGV4dHVyZVNpemVSYXRpbzsKKyAgICAgICAgdmFyIGJs
dXJUZXh0dXJlSGVpZ2h0ID0gdGhpcy5fbWFpblRleHR1cmVEZXNpcmVkU2l6ZS5oZWlnaHQgKiB0
aGlzLl9vcHRpb25zLmJsdXJUZXh0dXJlU2l6ZVJhdGlvOworICAgICAgICBibHVyVGV4dHVyZVdp
ZHRoID0gdGhpcy5fZW5naW5lLm5lZWRQT1RUZXh0dXJlcyA/IF9FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5HZXRFeHBvbmVudE9mVHdvKGJsdXJU
ZXh0dXJlV2lkdGgsIHRoaXMuX21heFNpemUpIDogYmx1clRleHR1cmVXaWR0aDsKKyAgICAgICAg
Ymx1clRleHR1cmVIZWlnaHQgPSB0aGlzLl9lbmdpbmUubmVlZFBPVFRleHR1cmVzID8gX0VuZ2lu
ZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdLkdldEV4cG9u
ZW50T2ZUd28oYmx1clRleHR1cmVIZWlnaHQsIHRoaXMuX21heFNpemUpIDogYmx1clRleHR1cmVI
ZWlnaHQ7CisgICAgICAgIHZhciB0ZXh0dXJlVHlwZSA9IDA7CisgICAgICAgIGlmICh0aGlzLl9l
bmdpbmUuZ2V0Q2FwcygpLnRleHR1cmVIYWxmRmxvYXRSZW5kZXIpIHsKKyAgICAgICAgICAgIHRl
eHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
NF9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VO
U0lHTkVEX0lOVDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9ibHVyVGV4dHVyZSA9IG5ldyBf
TWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzhfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdKCJIaWdobGlnaHRMYXllckJsdXJSVFQi
LCB7CisgICAgICAgICAgICB3aWR0aDogYmx1clRleHR1cmVXaWR0aCwKKyAgICAgICAgICAgIGhl
aWdodDogYmx1clRleHR1cmVIZWlnaHQKKyAgICAgICAgfSwgdGhpcy5fc2NlbmUsIGZhbHNlLCB0
cnVlLCB0ZXh0dXJlVHlwZSk7CisgICAgICAgIHRoaXMuX2JsdXJUZXh0dXJlLndyYXBVID0gX01h
dGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlRl
eHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgdGhpcy5fYmx1clRleHR1cmUud3Jh
cFYgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzdfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICB0aGlzLl9ibHVyVGV4
dHVyZS5hbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsID0gMTY7CisgICAgICAgIHRoaXMuX2JsdXJU
ZXh0dXJlLnVwZGF0ZVNhbXBsaW5nTW9kZShfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVGV4dHVyZSJdLlRSSUxJTkVBUl9TQU1QTElOR01P
REUpOworICAgICAgICB0aGlzLl9ibHVyVGV4dHVyZS5yZW5kZXJQYXJ0aWNsZXMgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fYmx1clRleHR1cmUuaWdub3JlQ2FtZXJhVmlld3BvcnQgPSB0cnVlOwor
ICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFt0aGlzLl9ibHVyVGV4dHVyZV07CisgICAgICAgIGlm
ICh0aGlzLl9vcHRpb25zLmFscGhhQmxlbmRpbmdNb2RlID09PSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkNvbnN0YW50cyJdLkFMUEhBX0NPTUJJTkUp
IHsKKyAgICAgICAgICAgIHRoaXMuX2Rvd25TYW1wbGVQb3N0cHJvY2VzcyA9IG5ldyBfUG9zdFBy
b2Nlc3Nlc19wYXNzUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlBh
c3NQb3N0UHJvY2VzcyJdKCJIaWdobGlnaHRMYXllclBQUCIsIHRoaXMuX29wdGlvbnMuYmx1clRl
eHR1cmVTaXplUmF0aW8sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0
aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSk7CisgICAgICAgICAgICB0aGlzLl9kb3duU2FtcGxlUG9z
dHByb2Nlc3Mub25BcHBseU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAg
ICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgidGV4dHVyZVNhbXBsZXIiLCBfdGhpcy5fbWFp
blRleHR1cmUpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFs
Qmx1clBvc3Rwcm9jZXNzID0gbmV3IEdsb3dCbHVyUG9zdFByb2Nlc3MoIkhpZ2hsaWdodExheWVy
SEJQIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJWZWN0b3IyIl0oMS4wLCAwKSwgdGhpcy5fb3B0aW9ucy5ibHVySG9yaXpvbnRhbFNpemUsIDEs
IG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0aGlzLl9zY2VuZS5nZXRF
bmdpbmUoKSk7CisgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9jZXNzLm9u
QXBwbHlPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICAgICAg
ZWZmZWN0LnNldEZsb2F0Migic2NyZWVuU2l6ZSIsIGJsdXJUZXh0dXJlV2lkdGgsIGJsdXJUZXh0
dXJlSGVpZ2h0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5fdmVydGljYWxC
bHVyUG9zdHByb2Nlc3MgPSBuZXcgR2xvd0JsdXJQb3N0UHJvY2VzcygiSGlnaGxpZ2h0TGF5ZXJW
QlAiLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjIiXSgwLCAxLjApLCB0aGlzLl9vcHRpb25zLmJsdXJWZXJ0aWNhbFNpemUsIDEsIG51
bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0aGlzLl9zY2VuZS5nZXRFbmdp
bmUoKSk7CisgICAgICAgICAgICB0aGlzLl92ZXJ0aWNhbEJsdXJQb3N0cHJvY2Vzcy5vbkFwcGx5
T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAgICAgIGVmZmVj
dC5zZXRGbG9hdDIoInNjcmVlblNpemUiLCBibHVyVGV4dHVyZVdpZHRoLCBibHVyVGV4dHVyZUhl
aWdodCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzZXMg
PSBbdGhpcy5fZG93blNhbXBsZVBvc3Rwcm9jZXNzLCB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rw
cm9jZXNzLCB0aGlzLl92ZXJ0aWNhbEJsdXJQb3N0cHJvY2Vzc107CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9jZXNzID0g
bmV3IF9Qb3N0UHJvY2Vzc2VzX2JsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfX1siQmx1clBvc3RQcm9jZXNzIl0oIkhpZ2hsaWdodExheWVySEJQIiwgbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IyIl0oMS4w
LCAwKSwgdGhpcy5fb3B0aW9ucy5ibHVySG9yaXpvbnRhbFNpemUgLyAyLCB7CisgICAgICAgICAg
ICAgICAgd2lkdGg6IGJsdXJUZXh0dXJlV2lkdGgsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiBi
bHVyVGV4dHVyZUhlaWdodAorICAgICAgICAgICAgfSwgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJl
c190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlRleHR1cmUiXS5CSUxJTkVB
Ul9TQU1QTElOR01PREUsIHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgdGV4dHVyZVR5
cGUpOworICAgICAgICAgICAgdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJvY2Vzcy53aWR0aCA9
IGJsdXJUZXh0dXJlV2lkdGg7CisgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rw
cm9jZXNzLmhlaWdodCA9IGJsdXJUZXh0dXJlSGVpZ2h0OworICAgICAgICAgICAgdGhpcy5faG9y
aXpvbnRhbEJsdXJQb3N0cHJvY2Vzcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVm
ZmVjdCkgeworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJ0ZXh0dXJlU2FtcGxl
ciIsIF90aGlzLl9tYWluVGV4dHVyZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRo
aXMuX3ZlcnRpY2FsQmx1clBvc3Rwcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX2JsdXJQb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQmx1clBvc3RQcm9jZXNzIl0o
IkhpZ2hsaWdodExheWVyVkJQIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZWN0b3IyIl0oMCwgMS4wKSwgdGhpcy5fb3B0aW9ucy5ibHVyVmVy
dGljYWxTaXplIC8gMiwgeworICAgICAgICAgICAgICAgIHdpZHRoOiBibHVyVGV4dHVyZVdpZHRo
LAorICAgICAgICAgICAgICAgIGhlaWdodDogYmx1clRleHR1cmVIZWlnaHQKKyAgICAgICAgICAg
IH0sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0aGlzLl9zY2VuZS5n
ZXRFbmdpbmUoKSwgZmFsc2UsIHRleHR1cmVUeXBlKTsKKyAgICAgICAgICAgIHRoaXMuX3Bvc3RQ
cm9jZXNzZXMgPSBbdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJvY2VzcywgdGhpcy5fdmVydGlj
YWxCbHVyUG9zdHByb2Nlc3NdOworICAgICAgICB9CisgICAgICAgIHRoaXMuX21haW5UZXh0dXJl
Lm9uQWZ0ZXJVbmJpbmRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBf
dGhpcy5vbkJlZm9yZUJsdXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhfdGhpcyk7CisgICAg
ICAgICAgICB2YXIgaW50ZXJuYWxUZXh0dXJlID0gX3RoaXMuX2JsdXJUZXh0dXJlLmdldEludGVy
bmFsVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKGludGVybmFsVGV4dHVyZSkgeworICAgICAg
ICAgICAgICAgIF90aGlzLl9zY2VuZS5wb3N0UHJvY2Vzc01hbmFnZXIuZGlyZWN0UmVuZGVyKF90
aGlzLl9wb3N0UHJvY2Vzc2VzLCBpbnRlcm5hbFRleHR1cmUsIHRydWUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgX3RoaXMub25BZnRlckJsdXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyhfdGhpcyk7CisgICAgICAgIH0pOworICAgICAgICAvLyBQcmV2ZW50IGF1dG9DbGVhci4KKyAg
ICAgICAgdGhpcy5fcG9zdFByb2Nlc3Nlcy5tYXAoZnVuY3Rpb24gKHBwKSB7IHBwLmF1dG9DbGVh
ciA9IGZhbHNlOyB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgd2V0aGVyIG9y
IG5vb2QgdGhlIGxheWVyIG5lZWRzIHN0ZW5jaWwgZW5hYmxlZCBkdXJpbmcgdGhlIG1lc2ggcmVu
ZGVyaW5nLgorICAgICAqLworICAgIEhpZ2hsaWdodExheWVyLnByb3RvdHlwZS5uZWVkU3RlbmNp
bCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBDaGVja3MgZm9yIHRoZSByZWFkaW5lc3Mgb2YgdGhlIGVsZW1lbnQgY29tcG9zaW5n
IHRoZSBsYXllci4KKyAgICAgKiBAcGFyYW0gc3ViTWVzaCB0aGUgbWVzaCB0byBjaGVjayBmb3IK
KyAgICAgKiBAcGFyYW0gdXNlSW5zdGFuY2VzIHNwZWNpZnkgd2V0aGVyIG9yIG5vdCB0byB1c2Ug
aW5zdGFuY2VzIHRvIHJlbmRlciB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBlbWlzc2l2ZVRleHR1
cmUgdGhlIGFzc29jaWF0ZWQgZW1pc3NpdmUgdGV4dHVyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBn
bG93CisgICAgICogQHJldHVybiB0cnVlIGlmIHJlYWR5IG90aGVyd2lzZSwgZmFsc2UKKyAgICAg
Ki8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uIChzdWJN
ZXNoLCB1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgdmFyIG1hdGVyaWFsID0gc3ViTWVzaC5nZXRN
YXRlcmlhbCgpOworICAgICAgICB2YXIgbWVzaCA9IHN1Yk1lc2guZ2V0UmVuZGVyaW5nTWVzaCgp
OworICAgICAgICBpZiAoIW1hdGVyaWFsIHx8ICFtZXNoIHx8ICF0aGlzLl9tZXNoZXMpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZW1pc3NpdmVU
ZXh0dXJlID0gbnVsbDsKKyAgICAgICAgdmFyIGhpZ2hsaWdodExheWVyTWVzaCA9IHRoaXMuX21l
c2hlc1ttZXNoLnVuaXF1ZUlkXTsKKyAgICAgICAgaWYgKGhpZ2hsaWdodExheWVyTWVzaCAmJiBo
aWdobGlnaHRMYXllck1lc2guZ2xvd0VtaXNzaXZlT25seSAmJiBtYXRlcmlhbCkgeworICAgICAg
ICAgICAgZW1pc3NpdmVUZXh0dXJlID0gbWF0ZXJpYWwuZW1pc3NpdmVUZXh0dXJlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl9pc1JlYWR5LmNhbGwodGhpcywg
c3ViTWVzaCwgdXNlSW5zdGFuY2VzLCBlbWlzc2l2ZVRleHR1cmUpOworICAgIH07CisgICAgLyoq
CisgICAgICogSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgb2YgcmVuZGVyaW5nIHRoZSBnZW5lcmF0
aW5nIGVmZmVjdCBvbiB0aGUgbWFpbiBjYW52YXMuCisgICAgICogQHBhcmFtIGVmZmVjdCBUaGUg
ZWZmZWN0IHVzZWQgdG8gcmVuZGVyIHRocm91Z2gKKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXll
ci5wcm90b3R5cGUuX2ludGVybmFsUmVuZGVyID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAg
ICAvLyBUZXh0dXJlCisgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJ0ZXh0dXJlU2FtcGxlciIs
IHRoaXMuX2JsdXJUZXh0dXJlKTsKKyAgICAgICAgLy8gQ2FjaGUKKyAgICAgICAgdmFyIGVuZ2lu
ZSA9IHRoaXMuX2VuZ2luZTsKKyAgICAgICAgZW5naW5lLmNhY2hlU3RlbmNpbFN0YXRlKCk7Cisg
ICAgICAgIC8vIFN0ZW5jaWwgb3BlcmF0aW9ucworICAgICAgICBlbmdpbmUuc2V0U3RlbmNpbE9w
ZXJhdGlvblBhc3MoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
NF9fWyJDb25zdGFudHMiXS5SRVBMQUNFKTsKKyAgICAgICAgZW5naW5lLnNldFN0ZW5jaWxPcGVy
YXRpb25GYWlsKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRf
X1siQ29uc3RhbnRzIl0uS0VFUCk7CisgICAgICAgIGVuZ2luZS5zZXRTdGVuY2lsT3BlcmF0aW9u
RGVwdGhGYWlsKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRf
X1siQ29uc3RhbnRzIl0uS0VFUCk7CisgICAgICAgIC8vIERyYXcgb3JkZXIKKyAgICAgICAgZW5n
aW5lLnNldFN0ZW5jaWxNYXNrKDB4MDApOworICAgICAgICBlbmdpbmUuc2V0U3RlbmNpbEJ1ZmZl
cih0cnVlKTsKKyAgICAgICAgZW5naW5lLnNldFN0ZW5jaWxGdW5jdGlvblJlZmVyZW5jZSh0aGlz
Ll9pbnN0YW5jZUdsb3dpbmdNZXNoU3RlbmNpbFJlZmVyZW5jZSk7CisgICAgICAgIC8vIDIgcGFz
c2VzIGlubmVyIG91dGVyCisgICAgICAgIGlmICh0aGlzLm91dGVyR2xvdykgeworICAgICAgICAg
ICAgZWZmZWN0LnNldEZsb2F0KCJvZmZzZXQiLCAwKTsKKyAgICAgICAgICAgIGVuZ2luZS5zZXRT
dGVuY2lsRnVuY3Rpb24oX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xNF9fWyJDb25zdGFudHMiXS5OT1RFUVVBTCk7CisgICAgICAgICAgICBlbmdpbmUuZHJhd0Vs
ZW1lbnRzVHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82
X19bIk1hdGVyaWFsIl0uVHJpYW5nbGVGaWxsTW9kZSwgMCwgNik7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuaW5uZXJHbG93KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoIm9m
ZnNldCIsIDEpOworICAgICAgICAgICAgZW5naW5lLnNldFN0ZW5jaWxGdW5jdGlvbihfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkNvbnN0YW50cyJdLkVR
VUFMKTsKKyAgICAgICAgICAgIGVuZ2luZS5kcmF3RWxlbWVudHNUeXBlKF9NYXRlcmlhbHNfbWF0
ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siTWF0ZXJpYWwiXS5UcmlhbmdsZUZp
bGxNb2RlLCAwLCA2KTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXN0b3JlIENhY2hlCisgICAg
ICAgIGVuZ2luZS5yZXN0b3JlU3RlbmNpbFN0YXRlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIHRydWUgaWYgdGhlIGxheWVyIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRvIGRpc3Bs
YXksIG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5
cGUuc2hvdWxkUmVuZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoX3N1cGVyLnByb3Rv
dHlwZS5zaG91bGRSZW5kZXIuY2FsbCh0aGlzKSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X21lc2hlcyA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggc2hvdWxk
IHJlbmRlciwgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRv
IHJlbmRlcgorICAgICAqIEByZXR1cm5zIHRydWUgaWYgaXQgc2hvdWxkIHJlbmRlciBvdGhlcndp
c2UgZmFsc2UKKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5cGUuX3Nob3VsZFJl
bmRlck1lc2ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICAvLyBFeGNsdWRlZCBNZXNoCisg
ICAgICAgIGlmICh0aGlzLl9leGNsdWRlZE1lc2hlcyAmJiB0aGlzLl9leGNsdWRlZE1lc2hlc1tt
ZXNoLnVuaXF1ZUlkXSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGlmICghX3N1cGVyLnByb3RvdHlwZS5oYXNNZXNoLmNhbGwodGhpcywgbWVzaCkpIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHJlcXVpcmVkIHZhbHVlcyBmb3Ig
Ym90aCB0aGUgZW1pc3NpdmUgdGV4dHVyZSBhbmQgYW5kIHRoZSBtYWluIGNvbG9yLgorICAgICAq
LworICAgIEhpZ2hsaWdodExheWVyLnByb3RvdHlwZS5fc2V0RW1pc3NpdmVUZXh0dXJlQW5kQ29s
b3IgPSBmdW5jdGlvbiAobWVzaCwgc3ViTWVzaCwgbWF0ZXJpYWwpIHsKKyAgICAgICAgdmFyIGhp
Z2hsaWdodExheWVyTWVzaCA9IHRoaXMuX21lc2hlc1ttZXNoLnVuaXF1ZUlkXTsKKyAgICAgICAg
aWYgKGhpZ2hsaWdodExheWVyTWVzaCkgeworICAgICAgICAgICAgdGhpcy5fZW1pc3NpdmVUZXh0
dXJlQW5kQ29sb3IuY29sb3Iuc2V0KGhpZ2hsaWdodExheWVyTWVzaC5jb2xvci5yLCBoaWdobGln
aHRMYXllck1lc2guY29sb3IuZywgaGlnaGxpZ2h0TGF5ZXJNZXNoLmNvbG9yLmIsIDEuMCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9lbWlzc2l2ZVRleHR1
cmVBbmRDb2xvci5jb2xvci5zZXQodGhpcy5uZXV0cmFsQ29sb3IuciwgdGhpcy5uZXV0cmFsQ29s
b3IuZywgdGhpcy5uZXV0cmFsQ29sb3IuYiwgdGhpcy5uZXV0cmFsQ29sb3IuYSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGhpZ2hsaWdodExheWVyTWVzaCAmJiBoaWdobGlnaHRMYXllck1lc2gu
Z2xvd0VtaXNzaXZlT25seSAmJiBtYXRlcmlhbCkgeworICAgICAgICAgICAgdGhpcy5fZW1pc3Np
dmVUZXh0dXJlQW5kQ29sb3IudGV4dHVyZSA9IG1hdGVyaWFsLmVtaXNzaXZlVGV4dHVyZTsKKyAg
ICAgICAgICAgIHRoaXMuX2VtaXNzaXZlVGV4dHVyZUFuZENvbG9yLmNvbG9yLnNldCgxLjAsIDEu
MCwgMS4wLCAxLjApOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhp
cy5fZW1pc3NpdmVUZXh0dXJlQW5kQ29sb3IudGV4dHVyZSA9IG51bGw7CisgICAgICAgIH0KKyAg
ICB9OworICAgIC8qKgorICAgICAqIEFkZCBhIG1lc2ggaW4gdGhlIGV4Y2x1c2lvbiBsaXN0IHRv
IHByZXZlbnQgaXQgdG8gaW1wYWN0IG9yIGJlaW5nIGltcGFjdGVkIGJ5IHRoZSBoaWdobGlnaHQg
bGF5ZXIuCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gZXhjbHVkZSBmcm9tIHRoZSBo
aWdobGlnaHQgbGF5ZXIKKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5cGUuYWRk
RXhjbHVkZWRNZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leGNs
dWRlZE1lc2hlcykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZh
ciBtZXNoRXhjbHVkZWQgPSB0aGlzLl9leGNsdWRlZE1lc2hlc1ttZXNoLnVuaXF1ZUlkXTsKKyAg
ICAgICAgaWYgKCFtZXNoRXhjbHVkZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4Y2x1ZGVkTWVz
aGVzW21lc2gudW5pcXVlSWRdID0geworICAgICAgICAgICAgICAgIG1lc2g6IG1lc2gsCisgICAg
ICAgICAgICAgICAgYmVmb3JlQmluZDogbWVzaC5vbkJlZm9yZUJpbmRPYnNlcnZhYmxlLmFkZChm
dW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgICAgICAgICBtZXNoLmdldEVuZ2luZSgpLnNl
dFN0ZW5jaWxCdWZmZXIoZmFsc2UpOworICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAg
ICAgIGFmdGVyUmVuZGVyOiBtZXNoLm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAobWVzaCkgeworICAgICAgICAgICAgICAgICAgICBtZXNoLmdldEVuZ2luZSgpLnNldFN0ZW5j
aWxCdWZmZXIodHJ1ZSk7CisgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICB9OworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgICogUmVtb3ZlIGEgbWVzaCBmcm9tIHRoZSBl
eGNsdXNpb24gbGlzdCB0byBsZXQgaXQgaW1wYWN0IG9yIGJlaW5nIGltcGFjdGVkIGJ5IHRoZSBo
aWdobGlnaHQgbGF5ZXIuCisgICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRvIGhpZ2hsaWdo
dAorICAgICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5cGUucmVtb3ZlRXhjbHVkZWRN
ZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leGNsdWRlZE1lc2hl
cykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBtZXNoRXhj
bHVkZWQgPSB0aGlzLl9leGNsdWRlZE1lc2hlc1ttZXNoLnVuaXF1ZUlkXTsKKyAgICAgICAgaWYg
KG1lc2hFeGNsdWRlZCkgeworICAgICAgICAgICAgaWYgKG1lc2hFeGNsdWRlZC5iZWZvcmVCaW5k
KSB7CisgICAgICAgICAgICAgICAgbWVzaC5vbkJlZm9yZUJpbmRPYnNlcnZhYmxlLnJlbW92ZSht
ZXNoRXhjbHVkZWQuYmVmb3JlQmluZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bWVzaEV4Y2x1ZGVkLmFmdGVyUmVuZGVyKSB7CisgICAgICAgICAgICAgICAgbWVzaC5vbkFmdGVy
UmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUobWVzaEV4Y2x1ZGVkLmFmdGVyUmVuZGVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9leGNsdWRlZE1lc2hlc1ttZXNoLnVu
aXF1ZUlkXSA9IG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmUgaWYgYSBn
aXZlbiBtZXNoIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgYnkgdGhlIGN1cnJlbnQgSGlnaGxpZ2h0TGF5
ZXIKKyAgICAgKiBAcGFyYW0gbWVzaCBtZXNoIHRvIHRlc3QKKyAgICAgKiBAcmV0dXJucyB0cnVl
IGlmIHRoZSBtZXNoIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgYnkgdGhlIGN1cnJlbnQgSGlnaGxpZ2h0
TGF5ZXIKKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5cGUuaGFzTWVzaCA9IGZ1
bmN0aW9uIChtZXNoKSB7CisgICAgICAgIGlmICghdGhpcy5fbWVzaGVzKSB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFfc3VwZXIucHJvdG90eXBl
Lmhhc01lc2guY2FsbCh0aGlzLCBtZXNoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9tZXNoZXNbbWVzaC51bmlxdWVJZF0gIT09
IHVuZGVmaW5lZCAmJiB0aGlzLl9tZXNoZXNbbWVzaC51bmlxdWVJZF0gIT09IG51bGw7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBZGQgYSBtZXNoIGluIHRoZSBoaWdobGlnaHQgbGF5ZXIgaW4g
b3JkZXIgdG8gbWFrZSBpdCBnbG93IHdpdGggdGhlIGNob3NlbiBjb2xvci4KKyAgICAgKiBAcGFy
YW0gbWVzaCBUaGUgbWVzaCB0byBoaWdobGlnaHQKKyAgICAgKiBAcGFyYW0gY29sb3IgVGhlIGNv
bG9yIG9mIHRoZSBoaWdobGlnaHQKKyAgICAgKiBAcGFyYW0gZ2xvd0VtaXNzaXZlT25seSBFeHRy
YWN0IHRoZSBnbG93IGZyb20gdGhlIGVtaXNzaXZlIHRleHR1cmUKKyAgICAgKi8KKyAgICBIaWdo
bGlnaHRMYXllci5wcm90b3R5cGUuYWRkTWVzaCA9IGZ1bmN0aW9uIChtZXNoLCBjb2xvciwgZ2xv
d0VtaXNzaXZlT25seSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAo
Z2xvd0VtaXNzaXZlT25seSA9PT0gdm9pZCAwKSB7IGdsb3dFbWlzc2l2ZU9ubHkgPSBmYWxzZTsg
fQorICAgICAgICBpZiAoIXRoaXMuX21lc2hlcykgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHZhciBtZXNoSGlnaGxpZ2h0ID0gdGhpcy5fbWVzaGVzW21lc2gudW5p
cXVlSWRdOworICAgICAgICBpZiAobWVzaEhpZ2hsaWdodCkgeworICAgICAgICAgICAgbWVzaEhp
Z2hsaWdodC5jb2xvciA9IGNvbG9yOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdGhpcy5fbWVzaGVzW21lc2gudW5pcXVlSWRdID0geworICAgICAgICAgICAgICAgIG1l
c2g6IG1lc2gsCisgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9yLAorICAgICAgICAgICAgICAg
IC8vIExhbWJkYSByZXF1aXJlZCBmb3IgY2FwdHVyZSBkdWUgdG8gT2JzZXJ2YWJsZSB0aGlzIGNv
bnRleHQKKyAgICAgICAgICAgICAgICBvYnNlcnZlckhpZ2hsaWdodDogbWVzaC5vbkJlZm9yZUJp
bmRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoX3RoaXMuaXNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMu
X2V4Y2x1ZGVkTWVzaGVzICYmIF90aGlzLl9leGNsdWRlZE1lc2hlc1ttZXNoLnVuaXF1ZUlkXSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9kZWZhdWx0U3RlbmNpbFJlZmVy
ZW5jZShtZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2guZ2V0U2NlbmUo
KS5nZXRFbmdpbmUoKS5zZXRTdGVuY2lsRnVuY3Rpb25SZWZlcmVuY2UoX3RoaXMuX2luc3RhbmNl
R2xvd2luZ01lc2hTdGVuY2lsUmVmZXJlbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAg
ICAgIG9ic2VydmVyRGVmYXVsdDogbWVzaC5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVu
Y3Rpb24gKG1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmlzRW5hYmxlZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2RlZmF1bHRTdGVuY2lsUmVmZXJlbmNl
KG1lc2gpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSksCisgICAg
ICAgICAgICAgICAgZ2xvd0VtaXNzaXZlT25seTogZ2xvd0VtaXNzaXZlT25seQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIG1lc2gub25EaXNwb3NlT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9kaXNwb3NlTWVzaChtZXNoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Nob3VsZFJlbmRlciA9IHRydWU7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBtZXNoIGZyb20gdGhlIGhpZ2hsaWdodCBs
YXllciBpbiBvcmRlciB0byBtYWtlIGl0IHN0b3AgZ2xvd2luZy4KKyAgICAgKiBAcGFyYW0gbWVz
aCBUaGUgbWVzaCB0byBoaWdobGlnaHQKKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90
b3R5cGUucmVtb3ZlTWVzaCA9IGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgIGlmICghdGhpcy5f
bWVzaGVzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIG1l
c2hIaWdobGlnaHQgPSB0aGlzLl9tZXNoZXNbbWVzaC51bmlxdWVJZF07CisgICAgICAgIGlmICht
ZXNoSGlnaGxpZ2h0KSB7CisgICAgICAgICAgICBpZiAobWVzaEhpZ2hsaWdodC5vYnNlcnZlckhp
Z2hsaWdodCkgeworICAgICAgICAgICAgICAgIG1lc2gub25CZWZvcmVCaW5kT2JzZXJ2YWJsZS5y
ZW1vdmUobWVzaEhpZ2hsaWdodC5vYnNlcnZlckhpZ2hsaWdodCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobWVzaEhpZ2hsaWdodC5vYnNlcnZlckRlZmF1bHQpIHsKKyAgICAgICAg
ICAgICAgICBtZXNoLm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZShtZXNoSGlnaGxpZ2h0
Lm9ic2VydmVyRGVmYXVsdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxldGUgdGhp
cy5fbWVzaGVzW21lc2gudW5pcXVlSWRdOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Nob3Vs
ZFJlbmRlciA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBtZXNoSGlnaGxpZ2h0VG9DaGVjayBp
biB0aGlzLl9tZXNoZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9tZXNoZXNbbWVzaEhpZ2hs
aWdodFRvQ2hlY2tdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2hvdWxkUmVuZGVyID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogRm9yY2UgdGhlIHN0ZW5jaWwgdG8gdGhlIG5vcm1hbCBleHBl
Y3RlZCB2YWx1ZSBmb3Igbm9uZSBnbG93aW5nIHBhcnRzCisgICAgICovCisgICAgSGlnaGxpZ2h0
TGF5ZXIucHJvdG90eXBlLl9kZWZhdWx0U3RlbmNpbFJlZmVyZW5jZSA9IGZ1bmN0aW9uIChtZXNo
KSB7CisgICAgICAgIG1lc2guZ2V0U2NlbmUoKS5nZXRFbmdpbmUoKS5zZXRTdGVuY2lsRnVuY3Rp
b25SZWZlcmVuY2UoSGlnaGxpZ2h0TGF5ZXIuTm9ybWFsTWVzaFN0ZW5jaWxSZWZlcmVuY2UpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogRnJlZSBhbnkgcmVzb3VyY2VzIGFuZCByZWZlcmVuY2Vz
IGFzc29jaWF0ZWQgdG8gYSBtZXNoLgorICAgICAqIEludGVybmFsIHVzZQorICAgICAqIEBwYXJh
bSBtZXNoIFRoZSBtZXNoIHRvIGZyZWUuCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIEhp
Z2hsaWdodExheWVyLnByb3RvdHlwZS5fZGlzcG9zZU1lc2ggPSBmdW5jdGlvbiAobWVzaCkgewor
ICAgICAgICB0aGlzLnJlbW92ZU1lc2gobWVzaCk7CisgICAgICAgIHRoaXMucmVtb3ZlRXhjbHVk
ZWRNZXNoKG1lc2gpOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZSB0aGUgaGlnaGxp
Z2h0IGxheWVyIGFuZCBmcmVlIHJlc291cmNlcy4KKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXll
ci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX21l
c2hlcykgeworICAgICAgICAgICAgLy8gQ2xlYW4gbWVzaCByZWZlcmVuY2VzCisgICAgICAgICAg
ICBmb3IgKHZhciBpZCBpbiB0aGlzLl9tZXNoZXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWVz
aEhpZ2hsaWdodCA9IHRoaXMuX21lc2hlc1tpZF07CisgICAgICAgICAgICAgICAgaWYgKG1lc2hI
aWdobGlnaHQgJiYgbWVzaEhpZ2hsaWdodC5tZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChtZXNoSGlnaGxpZ2h0Lm9ic2VydmVySGlnaGxpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtZXNoSGlnaGxpZ2h0Lm1lc2gub25CZWZvcmVCaW5kT2JzZXJ2YWJsZS5yZW1vdmUobWVz
aEhpZ2hsaWdodC5vYnNlcnZlckhpZ2hsaWdodCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1lc2hIaWdobGlnaHQub2JzZXJ2ZXJEZWZhdWx0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtZXNoSGlnaGxpZ2h0Lm1lc2gub25BZnRlclJlbmRlck9i
c2VydmFibGUucmVtb3ZlKG1lc2hIaWdobGlnaHQub2JzZXJ2ZXJEZWZhdWx0KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX21lc2hlcyA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2V4
Y2x1ZGVkTWVzaGVzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9leGNsdWRl
ZE1lc2hlcykgeworICAgICAgICAgICAgICAgIHZhciBtZXNoSGlnaGxpZ2h0ID0gdGhpcy5fZXhj
bHVkZWRNZXNoZXNbaWRdOworICAgICAgICAgICAgICAgIGlmIChtZXNoSGlnaGxpZ2h0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtZXNoSGlnaGxpZ2h0LmJlZm9yZUJpbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1lc2hIaWdobGlnaHQubWVzaC5vbkJlZm9yZUJpbmRPYnNlcnZh
YmxlLnJlbW92ZShtZXNoSGlnaGxpZ2h0LmJlZm9yZUJpbmQpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNoSGlnaGxpZ2h0LmFmdGVyUmVuZGVyKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNoSGlnaGxpZ2h0Lm1lc2gub25BZnRlclJlbmRl
ck9ic2VydmFibGUucmVtb3ZlKG1lc2hIaWdobGlnaHQuYWZ0ZXJSZW5kZXIpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fZXhjbHVkZWRNZXNoZXMgPSBudWxsOworICAgICAgICB9CisgICAgICAgIF9zdXBl
ci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICAq
IEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVmZmVjdCBsYXllcgorICAgICAgKiBAcmV0dXJu
cyB0aGUgc3RyaW5nIHdpdGggdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVmZmVjdCBsYXllcgorICAg
ICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gIkhpZ2hsaWdodExheWVyIjsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFNlcmlhbGl6ZXMgdGhpcyBIaWdobGlnaHQgbGF5ZXIKKyAgICAgKiBAcmV0dXJu
cyBhIHNlcmlhbGl6ZWQgSGlnaGxpZ2h0IGxheWVyIG9iamVjdAorICAgICAqLworICAgIEhpZ2hs
aWdodExheWVyLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh
ciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXplKHRoaXMpOworICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmN1c3RvbVR5cGUgPSAiQkFCWUxPTi5IaWdobGlnaHRM
YXllciI7CisgICAgICAgIC8vIEhpZ2hsaWdodGVkIG1lc2hlcworICAgICAgICBzZXJpYWxpemF0
aW9uT2JqZWN0Lm1lc2hlcyA9IFtdOworICAgICAgICBpZiAodGhpcy5fbWVzaGVzKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBtIGluIHRoaXMuX21lc2hlcykgeworICAgICAgICAgICAgICAgIHZh
ciBtZXNoID0gdGhpcy5fbWVzaGVzW21dOworICAgICAgICAgICAgICAgIGlmIChtZXNoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWVzaGVzLnB1c2goeworICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xvd0VtaXNzaXZlT25seTogbWVzaC5nbG93RW1pc3NpdmVP
bmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IG1lc2guY29sb3IuYXNBcnJheSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgbWVzaElkOiBtZXNoLm1lc2guaWQKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIC8vIEV4Y2x1ZGVkIG1lc2hlcworICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LmV4Y2x1ZGVkTWVzaGVzID0gW107CisgICAgICAgIGlmICh0aGlzLl9leGNsdWRlZE1lc2hl
cykgeworICAgICAgICAgICAgZm9yICh2YXIgZSBpbiB0aGlzLl9leGNsdWRlZE1lc2hlcykgewor
ICAgICAgICAgICAgICAgIHZhciBleGNsdWRlZE1lc2ggPSB0aGlzLl9leGNsdWRlZE1lc2hlc1tl
XTsKKyAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZWRNZXNoKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZXhjbHVkZWRNZXNoZXMucHVzaChleGNsdWRlZE1lc2gu
bWVzaC5pZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIEhpZ2hsaWdodCBsYXllciBmcm9tIHBhcnNlZCBIaWdobGlnaHQgbGF5ZXIg
ZGF0YQorICAgICAqIEBwYXJhbSBwYXJzZWRIaWdodGxpZ2h0TGF5ZXIgZGVmaW5lcyB0aGUgSGln
aGxpZ2h0IGxheWVyIGRhdGEKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgY3VycmVu
dCBzY2VuZQorICAgICAqIEBwYXJhbSByb290VXJsIGRlZmluZXMgdGhlIHJvb3QgVVJMIGNvbnRh
aW5pbmcgdGhlIEhpZ2hsaWdodCBsYXllciBpbmZvcm1hdGlvbgorICAgICAqIEByZXR1cm5zIGEg
cGFyc2VkIEhpZ2hsaWdodCBsYXllcgorICAgICAqLworICAgIEhpZ2hsaWdodExheWVyLlBhcnNl
ID0gZnVuY3Rpb24gKHBhcnNlZEhpZ2h0bGlnaHRMYXllciwgc2NlbmUsIHJvb3RVcmwpIHsKKyAg
ICAgICAgdmFyIGhsID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3
IEhpZ2hsaWdodExheWVyKHBhcnNlZEhpZ2h0bGlnaHRMYXllci5uYW1lLCBzY2VuZSwgcGFyc2Vk
SGlnaHRsaWdodExheWVyLm9wdGlvbnMpOyB9LCBwYXJzZWRIaWdodGxpZ2h0TGF5ZXIsIHNjZW5l
LCByb290VXJsKTsKKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICAvLyBFeGNsdWRlZCBtZXNo
ZXMKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGFyc2VkSGlnaHRsaWdodExheWVy
LmV4Y2x1ZGVkTWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIG1lc2gg
PSBzY2VuZS5nZXRNZXNoQnlJRChwYXJzZWRIaWdodGxpZ2h0TGF5ZXIuZXhjbHVkZWRNZXNoZXNb
aW5kZXhdKTsKKyAgICAgICAgICAgIGlmIChtZXNoKSB7CisgICAgICAgICAgICAgICAgaGwuYWRk
RXhjbHVkZWRNZXNoKG1lc2gpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IEluY2x1ZGVkIG1lc2hlcworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJzZWRI
aWdodGxpZ2h0TGF5ZXIubWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFy
IGhpZ2hsaWdodGVkTWVzaCA9IHBhcnNlZEhpZ2h0bGlnaHRMYXllci5tZXNoZXNbaW5kZXhdOwor
ICAgICAgICAgICAgdmFyIG1lc2ggPSBzY2VuZS5nZXRNZXNoQnlJRChoaWdobGlnaHRlZE1lc2gu
bWVzaElkKTsKKyAgICAgICAgICAgIGlmIChtZXNoKSB7CisgICAgICAgICAgICAgICAgaGwuYWRk
TWVzaChtZXNoLCBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdf
X1siQ29sb3IzIl0uRnJvbUFycmF5KGhpZ2hsaWdodGVkTWVzaC5jb2xvciksIGhpZ2hsaWdodGVk
TWVzaC5nbG93RW1pc3NpdmVPbmx5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gaGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFZmZlY3QgTmFtZSBvZiB0aGUg
aGlnaGxpZ2h0IGxheWVyLgorICAgICAqLworICAgIEhpZ2hsaWdodExheWVyLkVmZmVjdE5hbWUg
PSAiSGlnaGxpZ2h0TGF5ZXIiOworICAgIC8qKgorICAgICAqIFRoZSBuZXV0cmFsIGNvbG9yIHVz
ZWQgZHVyaW5nIHRoZSBwcmVwYXJhdGlvbiBvZiB0aGUgZ2xvdyBlZmZlY3QuCisgICAgICogVGhp
cyBpcyBibGFjayBieSBkZWZhdWx0IGFzIHRoZSBibGVuZCBvcGVyYXRpb24gaXMgYSBibGVuZCBv
cGVyYXRpb24uCisgICAgICovCisgICAgSGlnaGxpZ2h0TGF5ZXIuTmV1dHJhbENvbG9yID0gbmV3
IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJDb2xvcjQi
XSgwLCAwLCAwLCAwKTsKKyAgICAvKioKKyAgICAgKiBTdGVuY2lsIHZhbHVlIHVzZWQgZm9yIGds
b3dpbmcgbWVzaGVzLgorICAgICAqLworICAgIEhpZ2hsaWdodExheWVyLkdsb3dpbmdNZXNoU3Rl
bmNpbFJlZmVyZW5jZSA9IDB4MDI7CisgICAgLyoqCisgICAgICogU3RlbmNpbCB2YWx1ZSB1c2Vk
IGZvciB0aGUgb3RoZXIgbWVzaGVzIGluIHRoZSBzY2VuZS4KKyAgICAgKi8KKyAgICBIaWdobGln
aHRMYXllci5Ob3JtYWxNZXNoU3RlbmNpbFJlZmVyZW5jZSA9IDB4MDE7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBIaWdobGlnaHRMYXllci5wcm90b3R5cGUsICJpbm5lckdsb3ciLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgSGlnaGxpZ2h0TGF5ZXIucHJvdG90eXBl
LCAib3V0ZXJHbG93Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEhpZ2hs
aWdodExheWVyLnByb3RvdHlwZSwgImJsdXJIb3Jpem9udGFsU2l6ZSIsIG51bGwpOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgSGlnaGxpZ2h0TGF5ZXIucHJvdG90eXBlLCAiYmx1clZlcnRp
Y2FsU2l6ZSIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgib3B0aW9ucyIpCisgICAgXSwgSGln
aGxpZ2h0TGF5ZXIucHJvdG90eXBlLCAiX29wdGlvbnMiLCB2b2lkIDApOworICAgIHJldHVybiBI
aWdobGlnaHRMYXllcjsKK30oX2VmZmVjdExheWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
Ml9fWyJFZmZlY3RMYXllciJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTZfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5IaWdo
bGlnaHRMYXllciJdID0gSGlnaGxpZ2h0TGF5ZXI7CisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L0xheWVycy9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9MYXllcnMvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBFZmZlY3RMYXllciwgRWZmZWN0TGF5ZXJTY2VuZUNvbXBv
bmVudCwgR2xvd0xheWVyLCBIaWdobGlnaHRMYXllciwgTGF5ZXIsIExheWVyU2NlbmVDb21wb25l
bnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lZmZlY3RM
YXllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9lZmZlY3RMYXllciAqLyAiLi9MYXllcnMvZWZmZWN0TGF5ZXIudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiRWZmZWN0TGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lZmZlY3RMYXllcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3RMYXllciJdOyB9KTsKKworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9lZmZlY3RMYXllclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VmZmVjdExheWVy
U2NlbmVDb21wb25lbnQgKi8gIi4vTGF5ZXJzL2VmZmVjdExheWVyU2NlbmVDb21wb25lbnQudHMi
KTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2VmZmVjdExheWVyU2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siRWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9nbG93TGF5ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZ2xvd0xheWVyICovICIuL0xheWVycy9nbG93TGF5
ZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2xvd0xheWVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfZ2xvd0xheWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdsb3dMYXllciJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oaWdobGlnaHRMYXllcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oaWdobGlnaHRM
YXllciAqLyAiLi9MYXllcnMvaGlnaGxpZ2h0TGF5ZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
SGlnaGxpZ2h0TGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9oaWdobGlnaHRMYXllcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJIaWdobGlnaHRMYXllciJdOyB9KTsKKworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9sYXllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sYXllciAqLyAiLi9MYXllcnMvbGF5ZXIudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9sYXllcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJMYXllciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9sYXllclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xheWVyU2NlbmVDb21wb25lbnQgKi8gIi4v
TGF5ZXJzL2xheWVyU2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGF5ZXJT
Y2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xheWVyU2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTGF5ZXJTY2VuZUNvbXBvbmVudCJdOyB9KTsK
KworCisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9MYXllcnMvbGF5ZXIudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTGF5ZXJzL2xheWVy
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogTGF5ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGF5ZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIExheWVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRo
cy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01h
dGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19l
bmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3Jl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9i
dWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMv
bWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1
cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9U
ZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lQ29t
cG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9zY2VuZUNvbXBvbmVudCAqLyAiLi9zY2VuZUNvbXBvbmVudC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9sYXllclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xheWVyU2NlbmVDb21wb25l
bnQgKi8gIi4vTGF5ZXJzL2xheWVyU2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0Vu
Z2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNf
bGF5ZXJfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2xheWVyLmZyYWdtZW50ICovICIuL1NoYWRlcnMvbGF5
ZXIuZnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19sYXll
cl92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9TaGFkZXJzL2xheWVyLnZlcnRleCAqLyAiLi9TaGFkZXJzL2xheWVyLnZlcnRl
eC50cyIpOworCisKKworCisKKworCisKKworCisKKworLyoqCisgKiBUaGlzIHJlcHJlc2VudHMg
YSBmdWxsIHNjcmVlbiAyZCBsYXllci4KKyAqIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBkaXNwbGF5
IGEgcGljdHVyZSBpbiB0aGUgIGJhY2tncm91bmQgb2YgeW91ciBzY2VuZSBmb3IgaW5zdGFuY2Uu
CisgKiBAc2VlIGh0dHBzOi8vd3d3LmJhYnlsb25qcy1wbGF5Z3JvdW5kLmNvbS8jMDhBMkJTIzEK
KyAqLwordmFyIExheWVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgor
ICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBsYXllci4KKyAgICAgKiBUaGlzIHJlcHJlc2VudHMg
YSBmdWxsIHNjcmVlbiAyZCBsYXllci4KKyAgICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gZGlz
cGxheSBhIHBpY3R1cmUgaW4gdGhlICBiYWNrZ3JvdW5kIG9mIHlvdXIgc2NlbmUgZm9yIGluc3Rh
bmNlLgorICAgICAqIEBzZWUgaHR0cHM6Ly93d3cuYmFieWxvbmpzLXBsYXlncm91bmQuY29tLyMw
OEEyQlMjMQorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIg
aW4gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIGltZ1VybCBEZWZpbmUgdGhlIHVybCBvZiB0aGUg
dGV4dHVyZSB0byBkaXNwbGF5IGluIHRoZSBsYXllcgorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZp
bmUgdGhlIHNjZW5lIHRoZSBsYXllciBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGlzQmFja2dy
b3VuZCBEZWZpbmVzIHdoZXRoZXIgdGhlIGxheWVyIGlzIGRpc3BsYXllZCBpbiBmcm9udCBvciBi
ZWhpbmQgdGhlIHNjZW5lCisgICAgICogQHBhcmFtIGNvbG9yIERlZmluZXMgYSBjb2xvciBmb3Ig
dGhlIGxheWVyCisgICAgICovCisgICAgZnVuY3Rpb24gTGF5ZXIoCisgICAgLyoqCisgICAgICog
RGVmaW5lIHRoZSBuYW1lIG9mIHRoZSBsYXllci4KKyAgICAgKi8KKyAgICBuYW1lLCBpbWdVcmws
IHNjZW5lLCBpc0JhY2tncm91bmQsIGNvbG9yKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIHNjYWxlIG9mIHRoZSBsYXllciBp
biBvcmRlciB0byB6b29tIGluIG91dCBvZiB0aGUgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMuc2NhbGUgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlZlY3RvcjIiXSgxLCAxKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZSBhbiBvZmZzZXQgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBzaGlmdCB0aGUgdGV4dHVy
ZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0oMCwgMCk7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGFscGhhIGJsZW5kaW5nIG1vZGUgdXNlZCBp
biB0aGUgbGF5ZXIgaW4gY2FzZSB0aGUgdGV4dHVyZSBvciBjb2xvciBoYXMgYW4gYWxwaGEuCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmFscGhhQmxlbmRpbmdNb2RlID0gX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNvbnN0YW50cyJdLkFMUEhBX0NP
TUJJTkU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgYSBtYXNrIHRvIHJlc3RyaWN0
IHRoZSBsYXllciB0byBvbmx5IHNvbWUgb2YgdGhlIHNjZW5lIGNhbWVyYXMuCisgICAgICAgICAq
LworICAgICAgICB0aGlzLmxheWVyTWFzayA9IDB4MEZGRkZGRkY7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBEZWZpbmUgdGhlIGxpc3Qgb2YgcmVuZGVyIHRhcmdldCB0aGUgbGF5ZXIgaXMgdmlz
aWJsZSBpbnRvLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZW5kZXJUYXJnZXRUZXh0dXJl
cyA9IFtdOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGlmIHRoZSBsYXllciBpcyBv
bmx5IHVzZWQgaW4gcmVuZGVyVGFyZ2V0IG9yIGlmIGl0IGFsc28KKyAgICAgICAgICogcmVuZGVy
cyBpbiB0aGUgbWFpbiBmcmFtZSBidWZmZXIgb2YgdGhlIGNhbnZhcy4KKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMucmVuZGVyT25seUluUmVuZGVyVGFyZ2V0VGV4dHVyZXMgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5fdmVydGV4QnVmZmVycyA9IHt9OworICAgICAgICAvKioKKyAgICAgICAgICog
QW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIGxheWVyIGlzIGRpc3Bvc2VkLgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFi
bGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAg
IC8qKgorICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCBiZWZvcmUgcmVuZGVyaW5nIHRoZSBz
Y2VuZQorICAgICAgICAqLworICAgICAgICB0aGlzLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZSA9
IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk9ic2Vy
dmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgYWZ0
ZXIgcmVuZGVyaW5nIHRoZSBzY2VuZQorICAgICAgICAqLworICAgICAgICB0aGlzLm9uQWZ0ZXJS
ZW5kZXJPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIHRoaXMudGV4dHVyZSA9IGltZ1Vy
bCA/IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzZfX1siVGV4dHVyZSJdKGltZ1VybCwgc2NlbmUsIHRydWUpIDogbnVsbDsKKyAgICAgICAg
dGhpcy5pc0JhY2tncm91bmQgPSBpc0JhY2tncm91bmQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBp
c0JhY2tncm91bmQ7CisgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvciA9PT0gdW5kZWZpbmVkID8g
bmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9y
NCJdKDEsIDEsIDEsIDEpIDogY29sb3I7CisgICAgICAgIHRoaXMuX3NjZW5lID0gKHNjZW5lIHx8
IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2lu
ZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZSk7CisgICAgICAgIHZhciBsYXllckNvbXBvbmVudCA9
IHRoaXMuX3NjZW5lLl9nZXRDb21wb25lbnQoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uTkFNRV9MQVlFUik7Cisg
ICAgICAgIGlmICghbGF5ZXJDb21wb25lbnQpIHsKKyAgICAgICAgICAgIGxheWVyQ29tcG9uZW50
ID0gbmV3IF9sYXllclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IkxheWVyU2NlbmVDb21wb25lbnQiXSh0aGlzLl9zY2VuZSk7CisgICAgICAgICAgICB0aGlzLl9z
Y2VuZS5fYWRkQ29tcG9uZW50KGxheWVyQ29tcG9uZW50KTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9zY2VuZS5sYXllcnMucHVzaCh0aGlzKTsKKyAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMu
X3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICAvLyBWQk8KKyAgICAgICAgdmFyIHZlcnRpY2Vz
ID0gW107CisgICAgICAgIHZlcnRpY2VzLnB1c2goMSwgMSk7CisgICAgICAgIHZlcnRpY2VzLnB1
c2goLTEsIDEpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKC0xLCAtMSk7CisgICAgICAgIHZlcnRp
Y2VzLnB1c2goMSwgLTEpOworICAgICAgICB2YXIgdmVydGV4QnVmZmVyID0gbmV3IF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1ZmZlciJdKGVuZ2lu
ZSwgdmVydGljZXMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgZmFsc2UsIGZhbHNlLCAyKTsKKyAgICAgICAg
dGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdID0gdmVydGV4QnVmZmVyOworICAg
ICAgICB0aGlzLl9jcmVhdGVJbmRleEJ1ZmZlcigpOworICAgICAgICAvLyBFZmZlY3RzCisgICAg
ICAgIHRoaXMuX2VmZmVjdCA9IGVuZ2luZS5jcmVhdGVFZmZlY3QoImxheWVyIiwgW19NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0
aW9uS2luZF0sIFsidGV4dHVyZU1hdHJpeCIsICJjb2xvciIsICJzY2FsZSIsICJvZmZzZXQiXSwg
WyJ0ZXh0dXJlU2FtcGxlciJdLCAiIik7CisgICAgICAgIHRoaXMuX2FscGhhVGVzdEVmZmVjdCA9
IGVuZ2luZS5jcmVhdGVFZmZlY3QoImxheWVyIiwgW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0sIFsidGV4dHVy
ZU1hdHJpeCIsICJjb2xvciIsICJzY2FsZSIsICJvZmZzZXQiXSwgWyJ0ZXh0dXJlU2FtcGxlciJd
LCAiI2RlZmluZSBBTFBIQVRFU1QiKTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KExheWVyLnByb3RvdHlwZSwgIm9uRGlzcG9zZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEJhY2sgY29tcGF0aWJpbGl0eSB3aXRoIGNhbGxiYWNrIGJlZm9yZSB0aGUgb25EaXNwb3NlT2Jz
ZXJ2YWJsZSBleGlzdGVkLgorICAgICAgICAgKiBUaGUgc2V0IGNhbGxiYWNrIHdpbGwgYmUgdHJp
Z2dlcmVkIHdoZW4gdGhlIGxheWVyIGhhcyBiZWVuIGRpc3Bvc2VkLgorICAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9v
bkRpc3Bvc2VPYnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMub25EaXNwb3NlT2JzZXJ2
YWJsZS5yZW1vdmUodGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIgPSB0aGlzLm9uRGlzcG9zZU9ic2VydmFi
bGUuYWRkKGNhbGxiYWNrKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KExheWVyLnByb3RvdHlwZSwgIm9uQmVmb3JlUmVuZGVyIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogQmFjayBjb21wYXRpYmlsaXR5IHdpdGggY2FsbGJhY2sgYmVmb3JlIHRoZSBv
bkJlZm9yZVJlbmRlck9ic2VydmFibGUgZXhpc3RlZC4KKyAgICAgICAgICogVGhlIHNldCBjYWxs
YmFjayB3aWxsIGJlIHRyaWdnZXJlZCBqdXN0IGJlZm9yZSByZW5kZXJpbmcgdGhlIGxheWVyLgor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9vbkJlZm9yZVJlbmRlck9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQmVmb3JlUmVuZGVy
T2JzZXJ2ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVSZW5k
ZXJPYnNlcnZlciA9IHRoaXMub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMYXllci5wcm90
b3R5cGUsICJvbkFmdGVyUmVuZGVyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQmFjayBj
b21wYXRpYmlsaXR5IHdpdGggY2FsbGJhY2sgYmVmb3JlIHRoZSBvbkFmdGVyUmVuZGVyT2JzZXJ2
YWJsZSBleGlzdGVkLgorICAgICAgICAgKiBUaGUgc2V0IGNhbGxiYWNrIHdpbGwgYmUgdHJpZ2dl
cmVkIGp1c3QgYWZ0ZXIgcmVuZGVyaW5nIHRoZSBsYXllci4KKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb25BZnRl
clJlbmRlck9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyT2Jz
ZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25BZnRlclJlbmRlck9ic2VydmVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJSZW5kZXJPYnNlcnZlciA9IHRoaXMub25BZnRl
clJlbmRlck9ic2VydmFibGUuYWRkKGNhbGxiYWNrKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
TGF5ZXIucHJvdG90eXBlLl9jcmVhdGVJbmRleEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIGVuZ2luZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICAvLyBJbmRp
Y2VzCisgICAgICAgIHZhciBpbmRpY2VzID0gW107CisgICAgICAgIGluZGljZXMucHVzaCgwKTsK
KyAgICAgICAgaW5kaWNlcy5wdXNoKDEpOworICAgICAgICBpbmRpY2VzLnB1c2goMik7CisgICAg
ICAgIGluZGljZXMucHVzaCgwKTsKKyAgICAgICAgaW5kaWNlcy5wdXNoKDIpOworICAgICAgICBp
bmRpY2VzLnB1c2goMyk7CisgICAgICAgIHRoaXMuX2luZGV4QnVmZmVyID0gZW5naW5lLmNyZWF0
ZUluZGV4QnVmZmVyKGluZGljZXMpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBM
YXllci5wcm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB2YiA9
IHRoaXMuX3ZlcnRleEJ1ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgaWYgKHZiKSB7
CisgICAgICAgICAgICB2Yi5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Ny
ZWF0ZUluZGV4QnVmZmVyKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIHRoZSBs
YXllciBpbiB0aGUgc2NlbmUuCisgICAgICovCisgICAgTGF5ZXIucHJvdG90eXBlLnJlbmRlciA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGN1cnJlbnRFZmZlY3QgPSB0aGlzLmFscGhhVGVz
dCA/IHRoaXMuX2FscGhhVGVzdEVmZmVjdCA6IHRoaXMuX2VmZmVjdDsKKyAgICAgICAgLy8gQ2hl
Y2sKKyAgICAgICAgaWYgKCFjdXJyZW50RWZmZWN0LmlzUmVhZHkoKSB8fCAhdGhpcy50ZXh0dXJl
IHx8ICF0aGlzLnRleHR1cmUuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAg
ICAgICB0aGlzLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7
CisgICAgICAgIC8vIFJlbmRlcgorICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KGN1cnJlbnRF
ZmZlY3QpOworICAgICAgICBlbmdpbmUuc2V0U3RhdGUoZmFsc2UpOworICAgICAgICAvLyBUZXh0
dXJlCisgICAgICAgIGN1cnJlbnRFZmZlY3Quc2V0VGV4dHVyZSgidGV4dHVyZVNhbXBsZXIiLCB0
aGlzLnRleHR1cmUpOworICAgICAgICBjdXJyZW50RWZmZWN0LnNldE1hdHJpeCgidGV4dHVyZU1h
dHJpeCIsIHRoaXMudGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KCkpOworICAgICAgICAvLyBDb2xv
cgorICAgICAgICBjdXJyZW50RWZmZWN0LnNldEZsb2F0NCgiY29sb3IiLCB0aGlzLmNvbG9yLnIs
IHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iLCB0aGlzLmNvbG9yLmEpOworICAgICAgICAvLyBT
Y2FsZSAvIG9mZnNldAorICAgICAgICBjdXJyZW50RWZmZWN0LnNldFZlY3RvcjIoIm9mZnNldCIs
IHRoaXMub2Zmc2V0KTsKKyAgICAgICAgY3VycmVudEVmZmVjdC5zZXRWZWN0b3IyKCJzY2FsZSIs
IHRoaXMuc2NhbGUpOworICAgICAgICAvLyBWQk9zCisgICAgICAgIGVuZ2luZS5iaW5kQnVmZmVy
cyh0aGlzLl92ZXJ0ZXhCdWZmZXJzLCB0aGlzLl9pbmRleEJ1ZmZlciwgY3VycmVudEVmZmVjdCk7
CisgICAgICAgIC8vIERyYXcgb3JkZXIKKyAgICAgICAgaWYgKCF0aGlzLmFscGhhVGVzdCkgewor
ICAgICAgICAgICAgZW5naW5lLnNldEFscGhhTW9kZSh0aGlzLmFscGhhQmxlbmRpbmdNb2RlKTsK
KyAgICAgICAgICAgIGVuZ2luZS5kcmF3RWxlbWVudHNUeXBlKF9NYXRlcmlhbHNfbWF0ZXJpYWxf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWwiXS5UcmlhbmdsZUZpbGxNb2Rl
LCAwLCA2KTsKKyAgICAgICAgICAgIGVuZ2luZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNvbnN0YW50cyJdLkFMUEhBX0RJU0FC
TEUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW5naW5lLmRyYXdF
bGVtZW50c1R5cGUoX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fWyJNYXRlcmlhbCJdLlRyaWFuZ2xlRmlsbE1vZGUsIDAsIDYpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMub25BZnRlclJlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgYW5kIHJlbGVhc2VzIHRoZSBhc3NvY2lh
dGVkIHJlc3NvdXJjZXMuCisgICAgICovCisgICAgTGF5ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB0aGlzLl92ZXJ0ZXhCdWZm
ZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1
ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXIpIHsKKyAgICAg
ICAgICAgIHZlcnRleEJ1ZmZlci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhC
dWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRl
eEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0gPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLl9pbmRleEJ1ZmZlcikgeworICAgICAgICAgICAgdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCku
X3JlbGVhc2VCdWZmZXIodGhpcy5faW5kZXhCdWZmZXIpOworICAgICAgICAgICAgdGhpcy5faW5k
ZXhCdWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnRleHR1cmUpIHsK
KyAgICAgICAgICAgIHRoaXMudGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLnRl
eHR1cmUgPSBudWxsOworICAgICAgICB9CisgICAgICAgIC8vIENsZWFuIFJUVCBsaXN0CisgICAg
ICAgIHRoaXMucmVuZGVyVGFyZ2V0VGV4dHVyZXMgPSBbXTsKKyAgICAgICAgLy8gUmVtb3ZlIGZy
b20gc2NlbmUKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2NlbmUubGF5ZXJzLmluZGV4T2Yo
dGhpcyk7CisgICAgICAgIHRoaXMuX3NjZW5lLmxheWVycy5zcGxpY2UoaW5kZXgsIDEpOworICAg
ICAgICAvLyBDYWxsYmFjaworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUubm90aWZ5
T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUuY2xlYXIo
KTsKKyAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAg
ICB0aGlzLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgIH07CisgICAgcmV0
dXJuIExheWVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9MYXllcnMvbGF5
ZXJTY2VuZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL0xheWVycy9sYXllclNjZW5lQ29tcG9uZW50LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBMYXllclNjZW5lQ29tcG9uZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkxheWVyU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIExh
eWVyU2NlbmVDb21wb25lbnQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZUNv
bXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vc2NlbmVDb21wb25lbnQgKi8gIi4vc2NlbmVDb21wb25lbnQudHMiKTsKKworLyoq
CisgKiBEZWZpbmVzIHRoZSBsYXllciBzY2VuZSBjb21wb25lbnQgcmVzcG9uc2libGUgdG8gbWFu
YWdlIGFueSBsYXllcnMKKyAqIGluIGEgZ2l2ZW4gc2NlbmUuCisgKi8KK3ZhciBMYXllclNjZW5l
Q29tcG9uZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBmb3IgdGhlIGdpdmVuIHNj
ZW5lCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRvIHJlZ2lzdGVyIHRo
ZSBjb21wb25lbnQgaW4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBMYXllclNjZW5lQ29tcG9uZW50
KHNjZW5lKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY29tcG9uZW50IG5hbWUgaGVs
cGZ1bGwgdG8gaWRlbnRpZnkgdGhlIGNvbXBvbmVudCBpbiB0aGUgbGlzdCBvZiBzY2VuZSBjb21w
b25lbnRzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5uYW1lID0gX3NjZW5lQ29tcG9uZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0u
TkFNRV9MQVlFUjsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9l
bmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgc2NlbmUubGF5ZXJzID0gbmV3IEFy
cmF5KCk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyB0aGUgY29tcG9uZW50IGlu
IGEgZ2l2ZW4gc2NlbmUKKyAgICAgKi8KKyAgICBMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlw
ZS5yZWdpc3RlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2VuZS5fYmVmb3JlQ2Ft
ZXJhRHJhd1N0YWdlLnJlZ2lzdGVyU3RlcChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5TVEVQX0JFRk9SRUNBTUVS
QURSQVdfTEFZRVIsIHRoaXMsIHRoaXMuX2RyYXdDYW1lcmFCYWNrZ3JvdW5kKTsKKyAgICAgICAg
dGhpcy5zY2VuZS5fYWZ0ZXJDYW1lcmFEcmF3U3RhZ2UucmVnaXN0ZXJTdGVwKF9zY2VuZUNvbXBv
bmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50
cyJdLlNURVBfQUZURVJDQU1FUkFEUkFXX0xBWUVSLCB0aGlzLCB0aGlzLl9kcmF3Q2FtZXJhRm9y
ZWdyb3VuZCk7CisgICAgICAgIHRoaXMuc2NlbmUuX2JlZm9yZVJlbmRlclRhcmdldERyYXdTdGFn
ZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9CRUZPUkVSRU5ERVJUQVJHRVREUkFX
X0xBWUVSLCB0aGlzLCB0aGlzLl9kcmF3UmVuZGVyVGFyZ2V0QmFja2dyb3VuZCk7CisgICAgICAg
IHRoaXMuc2NlbmUuX2FmdGVyUmVuZGVyVGFyZ2V0RHJhd1N0YWdlLnJlZ2lzdGVyU3RlcChfc2Nl
bmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NlbmVDb21wb25lbnRD
b25zdGFudHMiXS5TVEVQX0FGVEVSUkVOREVSVEFSR0VURFJBV19MQVlFUiwgdGhpcywgdGhpcy5f
ZHJhd1JlbmRlclRhcmdldEZvcmVncm91bmQpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVi
dWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4gY2FzZSBvZgor
ICAgICAqIGNvbnRleHQgbG9zdCBmb3IgaW5zdGFuY2UuCisgICAgICovCisgICAgTGF5ZXJTY2Vu
ZUNvbXBvbmVudC5wcm90b3R5cGUucmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IGxheWVycyA9IHRoaXMuc2NlbmUubGF5ZXJzOworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGxh
eWVyc18xID0gbGF5ZXJzOyBfaSA8IGxheWVyc18xLmxlbmd0aDsgX2krKykgeworICAgICAgICAg
ICAgdmFyIGxheWVyID0gbGF5ZXJzXzFbX2ldOworICAgICAgICAgICAgbGF5ZXIuX3JlYnVpbGQo
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhlIGNvbXBv
bmVudCBhbmQgdGhlIGFzc29jaWF0ZWQgcmVzc291cmNlcy4KKyAgICAgKi8KKyAgICBMYXllclNj
ZW5lQ29tcG9uZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2
YXIgbGF5ZXJzID0gdGhpcy5zY2VuZS5sYXllcnM7CisgICAgICAgIHdoaWxlIChsYXllcnMubGVu
Z3RoKSB7CisgICAgICAgICAgICBsYXllcnNbMF0uZGlzcG9zZSgpOworICAgICAgICB9CisgICAg
fTsKKyAgICBMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5fZHJhdyA9IGZ1bmN0aW9uIChw
cmVkaWNhdGUpIHsKKyAgICAgICAgdmFyIGxheWVycyA9IHRoaXMuc2NlbmUubGF5ZXJzOworICAg
ICAgICBpZiAobGF5ZXJzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5fZW5naW5lLnNldERl
cHRoQnVmZmVyKGZhbHNlKTsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgbGF5ZXJzXzIg
PSBsYXllcnM7IF9pIDwgbGF5ZXJzXzIubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAg
dmFyIGxheWVyID0gbGF5ZXJzXzJbX2ldOworICAgICAgICAgICAgICAgIGlmIChwcmVkaWNhdGUo
bGF5ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGxheWVyLnJlbmRlcigpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5zZXREZXB0
aEJ1ZmZlcih0cnVlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgTGF5ZXJTY2VuZUNvbXBvbmVu
dC5wcm90b3R5cGUuX2RyYXdDYW1lcmFQcmVkaWNhdGUgPSBmdW5jdGlvbiAobGF5ZXIsIGlzQmFj
a2dyb3VuZCwgY2FtZXJhTGF5ZXJNYXNrKSB7CisgICAgICAgIHJldHVybiAhbGF5ZXIucmVuZGVy
T25seUluUmVuZGVyVGFyZ2V0VGV4dHVyZXMgJiYKKyAgICAgICAgICAgIGxheWVyLmlzQmFja2dy
b3VuZCA9PT0gaXNCYWNrZ3JvdW5kICYmCisgICAgICAgICAgICAoKGxheWVyLmxheWVyTWFzayAm
IGNhbWVyYUxheWVyTWFzaykgIT09IDApOworICAgIH07CisgICAgTGF5ZXJTY2VuZUNvbXBvbmVu
dC5wcm90b3R5cGUuX2RyYXdDYW1lcmFCYWNrZ3JvdW5kID0gZnVuY3Rpb24gKGNhbWVyYSkgewor
ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl9kcmF3KGZ1bmN0aW9uIChs
YXllcikgeworICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9kcmF3Q2FtZXJhUHJlZGljYXRlKGxh
eWVyLCB0cnVlLCBjYW1lcmEubGF5ZXJNYXNrKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBM
YXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5fZHJhd0NhbWVyYUZvcmVncm91bmQgPSBmdW5j
dGlvbiAoY2FtZXJhKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMu
X2RyYXcoZnVuY3Rpb24gKGxheWVyKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2RyYXdD
YW1lcmFQcmVkaWNhdGUobGF5ZXIsIGZhbHNlLCBjYW1lcmEubGF5ZXJNYXNrKTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICBMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5fZHJhd1JlbmRl
clRhcmdldFByZWRpY2F0ZSA9IGZ1bmN0aW9uIChsYXllciwgaXNCYWNrZ3JvdW5kLCBjYW1lcmFM
YXllck1hc2ssIHJlbmRlclRhcmdldFRleHR1cmUpIHsKKyAgICAgICAgcmV0dXJuIChsYXllci5y
ZW5kZXJUYXJnZXRUZXh0dXJlcy5sZW5ndGggPiAwKSAmJgorICAgICAgICAgICAgbGF5ZXIuaXNC
YWNrZ3JvdW5kID09PSBpc0JhY2tncm91bmQgJiYKKyAgICAgICAgICAgIChsYXllci5yZW5kZXJU
YXJnZXRUZXh0dXJlcy5pbmRleE9mKHJlbmRlclRhcmdldFRleHR1cmUpID4gLTEpICYmCisgICAg
ICAgICAgICAoKGxheWVyLmxheWVyTWFzayAmIGNhbWVyYUxheWVyTWFzaykgIT09IDApOworICAg
IH07CisgICAgTGF5ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX2RyYXdSZW5kZXJUYXJnZXRC
YWNrZ3JvdW5kID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkgeworICAgICAgICB2YXIgX3RoaXMg
PSB0aGlzOworICAgICAgICB0aGlzLl9kcmF3KGZ1bmN0aW9uIChsYXllcikgeworICAgICAgICAg
ICAgcmV0dXJuIF90aGlzLl9kcmF3UmVuZGVyVGFyZ2V0UHJlZGljYXRlKGxheWVyLCB0cnVlLCBf
dGhpcy5zY2VuZS5hY3RpdmVDYW1lcmEubGF5ZXJNYXNrLCByZW5kZXJUYXJnZXQpOworICAgICAg
ICB9KTsKKyAgICB9OworICAgIExheWVyU2NlbmVDb21wb25lbnQucHJvdG90eXBlLl9kcmF3UmVu
ZGVyVGFyZ2V0Rm9yZWdyb3VuZCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpIHsKKyAgICAgICAg
dmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5fZHJhdyhmdW5jdGlvbiAobGF5ZXIpIHsK
KyAgICAgICAgICAgIHJldHVybiBfdGhpcy5fZHJhd1JlbmRlclRhcmdldFByZWRpY2F0ZShsYXll
ciwgZmFsc2UsIF90aGlzLnNjZW5lLmFjdGl2ZUNhbWVyYS5sYXllck1hc2ssIHJlbmRlclRhcmdl
dCk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhbGwgdGhlIGVs
ZW1lbnRzIGZyb20gdGhlIGNvbnRhaW5lciB0byB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gY29u
dGFpbmVyIHRoZSBjb250YWluZXIgaG9sZGluZyB0aGUgZWxlbWVudHMKKyAgICAgKi8KKyAgICBM
YXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5hZGRGcm9tQ29udGFpbmVyID0gZnVuY3Rpb24g
KGNvbnRhaW5lcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoIWNv
bnRhaW5lci5sYXllcnMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBjb250YWluZXIubGF5ZXJzLmZvckVhY2goZnVuY3Rpb24gKGxheWVyKSB7CisgICAgICAgICAg
ICBfdGhpcy5zY2VuZS5sYXllcnMucHVzaChsYXllcik7CisgICAgICAgIH0pOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmVtb3ZlcyBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBjb250YWluZXIg
ZnJvbSB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gY29udGFpbmVyIGNvbnRhaW5zIHRoZSBlbGVt
ZW50cyB0byByZW1vdmUKKyAgICAgKiBAcGFyYW0gZGlzcG9zZSBpZiB0aGUgcmVtb3ZlZCBlbGVt
ZW50IHNob3VsZCBiZSBkaXNwb3NlZCAoZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgTGF5
ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVtb3ZlRnJvbUNvbnRhaW5lciA9IGZ1bmN0aW9u
IChjb250YWluZXIsIGRpc3Bvc2UpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkgeyBkaXNwb3NlID0gZmFsc2U7IH0KKyAgICAgICAg
aWYgKCFjb250YWluZXIubGF5ZXJzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgY29udGFpbmVyLmxheWVycy5mb3JFYWNoKGZ1bmN0aW9uIChsYXllcikgeworICAg
ICAgICAgICAgdmFyIGluZGV4ID0gX3RoaXMuc2NlbmUubGF5ZXJzLmluZGV4T2YobGF5ZXIpOwor
ICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgICAgIF90aGlzLnNj
ZW5lLmxheWVycy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGRpc3Bvc2UpIHsKKyAgICAgICAgICAgICAgICBsYXllci5kaXNwb3NlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgcmV0dXJuIExheWVyU2NlbmVDb21wb25l
bnQ7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0xlZ2FjeS9sZWdhY3kudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0xlZ2FjeS9sZWdh
Y3kudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogRGVidWcsIEFic3RyYWN0U2NlbmUsIEtlZXBBc3NldHMsIEFzc2V0Q29udGFpbmVy
LCBOb2RlLCBTY2VuZSwgU2NlbmVDb21wb25lbnRDb25zdGFudHMsIFN0YWdlLCBBYnN0cmFjdEFj
dGlvbk1hbmFnZXIsIEFjdGlvbiwgQWN0aW9uRXZlbnQsIEFjdGlvbk1hbmFnZXIsIENvbmRpdGlv
biwgVmFsdWVDb25kaXRpb24sIFByZWRpY2F0ZUNvbmRpdGlvbiwgU3RhdGVDb25kaXRpb24sIFN3
aXRjaEJvb2xlYW5BY3Rpb24sIFNldFN0YXRlQWN0aW9uLCBTZXRWYWx1ZUFjdGlvbiwgSW5jcmVt
ZW50VmFsdWVBY3Rpb24sIFBsYXlBbmltYXRpb25BY3Rpb24sIFN0b3BBbmltYXRpb25BY3Rpb24s
IERvTm90aGluZ0FjdGlvbiwgQ29tYmluZUFjdGlvbiwgRXhlY3V0ZUNvZGVBY3Rpb24sIFNldFBh
cmVudEFjdGlvbiwgUGxheVNvdW5kQWN0aW9uLCBTdG9wU291bmRBY3Rpb24sIEludGVycG9sYXRl
VmFsdWVBY3Rpb24sIEFuaW1hdGFibGUsIF9JQW5pbWF0aW9uU3RhdGUsIEFuaW1hdGlvbiwgVGFy
Z2V0ZWRBbmltYXRpb24sIEFuaW1hdGlvbkdyb3VwLCBBbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJp
ZGUsIEVhc2luZ0Z1bmN0aW9uLCBDaXJjbGVFYXNlLCBCYWNrRWFzZSwgQm91bmNlRWFzZSwgQ3Vi
aWNFYXNlLCBFbGFzdGljRWFzZSwgRXhwb25lbnRpYWxFYXNlLCBQb3dlckVhc2UsIFF1YWRyYXRp
Y0Vhc2UsIFF1YXJ0aWNFYXNlLCBRdWludGljRWFzZSwgU2luZUVhc2UsIEJlemllckN1cnZlRWFz
ZSwgUnVudGltZUFuaW1hdGlvbiwgQW5pbWF0aW9uRXZlbnQsIEFuaW1hdGlvbktleUludGVycG9s
YXRpb24sIEFuaW1hdGlvblJhbmdlLCBBbmFseXNlciwgQXVkaW9FbmdpbmUsIEF1ZGlvU2NlbmVD
b21wb25lbnQsIFNvdW5kLCBTb3VuZFRyYWNrLCBXZWlnaHRlZFNvdW5kLCBCb25lLCBCb25lSUtD
b250cm9sbGVyLCBCb25lTG9va0NvbnRyb2xsZXIsIFNrZWxldG9uLCBDYW1lcmFJbnB1dFR5cGVz
LCBDYW1lcmFJbnB1dHNNYW5hZ2VyLCBDYW1lcmEsIFRhcmdldENhbWVyYSwgRnJlZUNhbWVyYSwg
RnJlZUNhbWVyYUlucHV0c01hbmFnZXIsIFRvdWNoQ2FtZXJhLCBBcmNSb3RhdGVDYW1lcmEsIEFy
Y1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIsIERldmljZU9yaWVudGF0aW9uQ2FtZXJhLCBGbHlD
YW1lcmEsIEZseUNhbWVyYUlucHV0c01hbmFnZXIsIEZvbGxvd0NhbWVyYSwgQXJjRm9sbG93Q2Ft
ZXJhLCBGb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyLCBHYW1lcGFkQ2FtZXJhLCBVbml2ZXJzYWxD
YW1lcmEsIFZpcnR1YWxKb3lzdGlja3NDYW1lcmEsIENvbGxpZGVyLCBEZWZhdWx0Q29sbGlzaW9u
Q29vcmRpbmF0b3IsIFBpY2tpbmdJbmZvLCBJbnRlcnNlY3Rpb25JbmZvLCBfTWVzaENvbGxpc2lv
bkRhdGEsIEJvdW5kaW5nQm94LCBCb3VuZGluZ0luZm8sIEJvdW5kaW5nU3BoZXJlLCBSYXksIEF4
ZXNWaWV3ZXIsIEJvbmVBeGVzVmlld2VyLCBEZWJ1Z0xheWVyLCBQaHlzaWNzVmlld2VyLCBSYXlI
ZWxwZXIsIFNrZWxldG9uVmlld2VyLCBDb25zdGFudHMsIEluc3RhbmNpbmdBdHRyaWJ1dGVJbmZv
LCBEZXB0aFRleHR1cmVDcmVhdGlvbk9wdGlvbnMsIEVuZ2luZUNhcGFiaWxpdGllcywgRW5naW5l
LCBFbmdpbmVTdG9yZSwgTnVsbEVuZ2luZU9wdGlvbnMsIE51bGxFbmdpbmUsIFdlYkdMUGlwZWxp
bmVDb250ZXh0LCBXZWJHUFVDb25zdGFudHMsIFdlYkdQVUVuZ2luZSwgV2ViR0wyU2hhZGVyUHJv
Y2Vzc29yLCBOYXRpdmVFbmdpbmUsIEtleWJvYXJkRXZlbnRUeXBlcywgS2V5Ym9hcmRJbmZvLCBL
ZXlib2FyZEluZm9QcmUsIFBvaW50ZXJFdmVudFR5cGVzLCBQb2ludGVySW5mb0Jhc2UsIFBvaW50
ZXJJbmZvUHJlLCBQb2ludGVySW5mbywgQ2xpcGJvYXJkRXZlbnRUeXBlcywgQ2xpcGJvYXJkSW5m
bywgU3RpY2tWYWx1ZXMsIEdhbWVwYWQsIEdlbmVyaWNQYWQsIEdhbWVwYWRNYW5hZ2VyLCBHYW1l
cGFkU3lzdGVtU2NlbmVDb21wb25lbnQsIFhib3gzNjBCdXR0b24sIFhib3gzNjBEcGFkLCBYYm94
MzYwUGFkLCBEdWFsU2hvY2tCdXR0b24sIER1YWxTaG9ja0RwYWQsIER1YWxTaG9ja1BhZCwgQXhp
c0RyYWdHaXptbywgQXhpc1NjYWxlR2l6bW8sIEJvdW5kaW5nQm94R2l6bW8sIEdpem1vLCBHaXpt
b01hbmFnZXIsIFBsYW5lUm90YXRpb25HaXptbywgUG9zaXRpb25HaXptbywgUm90YXRpb25HaXpt
bywgU2NhbGVHaXptbywgTGlnaHRHaXptbywgUGxhbmVEcmFnR2l6bW8sIEVudmlyb25tZW50SGVs
cGVyLCBQaG90b0RvbWUsIF9mb3JjZVNjZW5lSGVscGVyc1RvQnVuZGxlLCBWaWRlb0RvbWUsIEVu
Z2luZUluc3RydW1lbnRhdGlvbiwgU2NlbmVJbnN0cnVtZW50YXRpb24sIF9UaW1lVG9rZW4sIEVm
ZmVjdExheWVyLCBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50LCBHbG93TGF5ZXIsIEhpZ2hsaWdo
dExheWVyLCBMYXllciwgTGF5ZXJTY2VuZUNvbXBvbmVudCwgTGVuc0ZsYXJlLCBMZW5zRmxhcmVT
eXN0ZW0sIExlbnNGbGFyZVN5c3RlbVNjZW5lQ29tcG9uZW50LCBMaWdodCwgU2hhZG93TGlnaHQs
IERpcmVjdGlvbmFsTGlnaHQsIEhlbWlzcGhlcmljTGlnaHQsIFBvaW50TGlnaHQsIFNwb3RMaWdo
dCwgRGVmYXVsdExvYWRpbmdTY3JlZW4sIFNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudCwgU2NlbmVM
b2FkZXIsIFNjZW5lTG9hZGVyRmxhZ3MsIENvbG9yQ3VydmVzLCBFZmZlY3RGYWxsYmFja3MsIEVm
ZmVjdENyZWF0aW9uT3B0aW9ucywgRWZmZWN0LCBGcmVzbmVsUGFyYW1ldGVycywgSW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMsIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24s
IE1hdGVyaWFsLCBNYXRlcmlhbERlZmluZXMsIE1hdGVyaWFsSGVscGVyLCBNdWx0aU1hdGVyaWFs
LCBQdXNoTWF0ZXJpYWwsIFNoYWRlck1hdGVyaWFsLCBTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcywg
U3RhbmRhcmRNYXRlcmlhbCwgQmFzZVRleHR1cmUsIEN1YmVUZXh0dXJlLCBEeW5hbWljVGV4dHVy
ZSwgRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUsIEhEUkN1YmVUZXh0dXJlLCBJbnRlcm5hbFRl
eHR1cmUsIE1pcnJvclRleHR1cmUsIE11bHRpUmVuZGVyVGFyZ2V0LCBSYXdUZXh0dXJlLCBSZW5k
ZXJUYXJnZXRUZXh0dXJlLCBUZXh0dXJlLCBVbmlmb3JtQnVmZmVyLCBNYXRlcmlhbEZsYWdzLCBF
ZmZlY3RSZW5kZXJlciwgRWZmZWN0V3JhcHBlciwgU2NhbGFyLCBTcGFjZSwgQXhpcywgQ29sb3Iz
LCBDb2xvcjQsIFRtcENvbG9ycywgVG9HYW1tYVNwYWNlLCBUb0xpbmVhclNwYWNlLCBFcHNpbG9u
LCBGcnVzdHVtLCBQbGFuZSwgU2l6ZSwgVmVjdG9yMiwgVmVjdG9yMywgVmVjdG9yNCwgUXVhdGVy
bmlvbiwgTWF0cml4LCBUbXBWZWN0b3JzLCBWaWV3cG9ydCwgU3BoZXJpY2FsSGFybW9uaWNzLCBT
cGhlcmljYWxQb2x5bm9taWFsLCBBYnN0cmFjdE1lc2gsIEJ1ZmZlciwgVmVydGV4QnVmZmVyLCBD
U0csIEdlb21ldHJ5LCBHcm91bmRNZXNoLCBUcmFpbE1lc2gsIEluc3RhbmNlZE1lc2gsIExpbmVz
TWVzaCwgSW5zdGFuY2VkTGluZXNNZXNoLCBfQ3JlYXRpb25EYXRhU3RvcmFnZSwgX0luc3RhbmNl
c0JhdGNoLCBNZXNoLCBWZXJ0ZXhEYXRhLCBNZXNoQnVpbGRlciwgU2ltcGxpZmljYXRpb25TZXR0
aW5ncywgU2ltcGxpZmljYXRpb25RdWV1ZSwgU2ltcGxpZmljYXRpb25UeXBlLCBTaW1wbGljYXRp
b25RdWV1ZVNjZW5lQ29tcG9uZW50LCBQb2x5Z29uLCBQb2x5Z29uTWVzaEJ1aWxkZXIsIEJhc2VT
dWJNZXNoLCBTdWJNZXNoLCBNZXNoTE9ETGV2ZWwsIFRyYW5zZm9ybU5vZGUsIEJveEJ1aWxkZXIs
IFNwaGVyZUJ1aWxkZXIsIEN5bGluZGVyQnVpbGRlciwgVG9ydXNCdWlsZGVyLCBMaW5lc0J1aWxk
ZXIsIFBsYW5lQnVpbGRlciwgR3JvdW5kQnVpbGRlciwgRGF0YUJ1ZmZlciwgV2ViR0xEYXRhQnVm
ZmVyLCBXZWJHUFVEYXRhQnVmZmVyLCBNb3JwaFRhcmdldCwgTW9ycGhUYXJnZXRNYW5hZ2VyLCBE
YXRhYmFzZSwgQmFzZVBhcnRpY2xlU3lzdGVtLCBHUFVQYXJ0aWNsZVN5c3RlbSwgUGFydGljbGUs
IFBhcnRpY2xlSGVscGVyLCBQYXJ0aWNsZVN5c3RlbSwgX0lEb05lZWRUb0JlSW5UaGVCdWlsZCwg
UGFydGljbGVTeXN0ZW1TZXQsIFNvbGlkUGFydGljbGUsIE1vZGVsU2hhcGUsIERlcHRoU29ydGVk
UGFydGljbGUsIFNvbGlkUGFydGljbGVTeXN0ZW0sIFN1YkVtaXR0ZXJUeXBlLCBTdWJFbWl0dGVy
LCBQaHlzaWNzRW5naW5lLCBQaHlzaWNzRW5naW5lU2NlbmVDb21wb25lbnQsIFBoeXNpY3NIZWxw
ZXIsIFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnMsIFBoeXNpY3NVcGRyYWZ0RXZl
bnRPcHRpb25zLCBQaHlzaWNzVm9ydGV4RXZlbnRPcHRpb25zLCBQaHlzaWNzUmFkaWFsSW1wdWxz
ZUZhbGxvZmYsIFBoeXNpY3NVcGRyYWZ0TW9kZSwgUGh5c2ljc0ltcG9zdG9yLCBQaHlzaWNzSm9p
bnQsIERpc3RhbmNlSm9pbnQsIE1vdG9yRW5hYmxlZEpvaW50LCBIaW5nZUpvaW50LCBIaW5nZTJK
b2ludCwgQW5hZ2x5cGhQb3N0UHJvY2VzcywgQmxhY2tBbmRXaGl0ZVBvc3RQcm9jZXNzLCBCbG9v
bUVmZmVjdCwgQmxvb21NZXJnZVBvc3RQcm9jZXNzLCBCbHVyUG9zdFByb2Nlc3MsIENocm9tYXRp
Y0FiZXJyYXRpb25Qb3N0UHJvY2VzcywgQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJvY2VzcywgQ29s
b3JDb3JyZWN0aW9uUG9zdFByb2Nlc3MsIENvbnZvbHV0aW9uUG9zdFByb2Nlc3MsIERlcHRoT2ZG
aWVsZEJsdXJQb3N0UHJvY2VzcywgRGVwdGhPZkZpZWxkRWZmZWN0Qmx1ckxldmVsLCBEZXB0aE9m
RmllbGRFZmZlY3QsIERlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3NPcHRpb25zLCBEZXB0aE9m
RmllbGRNZXJnZVBvc3RQcm9jZXNzLCBEaXNwbGF5UGFzc1Bvc3RQcm9jZXNzLCBFeHRyYWN0SGln
aGxpZ2h0c1Bvc3RQcm9jZXNzLCBGaWx0ZXJQb3N0UHJvY2VzcywgRnhhYVBvc3RQcm9jZXNzLCBH
cmFpblBvc3RQcm9jZXNzLCBIaWdobGlnaHRzUG9zdFByb2Nlc3MsIEltYWdlUHJvY2Vzc2luZ1Bv
c3RQcm9jZXNzLCBNb3Rpb25CbHVyUG9zdFByb2Nlc3MsIFBhc3NQb3N0UHJvY2VzcywgUGFzc0N1
YmVQb3N0UHJvY2VzcywgUG9zdFByb2Nlc3MsIFBvc3RQcm9jZXNzTWFuYWdlciwgUmVmcmFjdGlv
blBvc3RQcm9jZXNzLCBTaGFycGVuUG9zdFByb2Nlc3MsIFN0ZXJlb3Njb3BpY0ludGVybGFjZVBv
c3RQcm9jZXNzLCBUb25lbWFwcGluZ09wZXJhdG9yLCBUb25lbWFwUG9zdFByb2Nlc3MsIFZvbHVt
ZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzcywgVlJEaXN0b3J0aW9uQ29ycmVjdGlvblBv
c3RQcm9jZXNzLCBWUk11bHRpdmlld1RvU2luZ2xldmlld1Bvc3RQcm9jZXNzLCBSZWZsZWN0aW9u
UHJvYmUsIEJvdW5kaW5nQm94UmVuZGVyZXIsIERlcHRoUmVuZGVyZXIsIERlcHRoUmVuZGVyZXJT
Y2VuZUNvbXBvbmVudCwgRWRnZXNSZW5kZXJlciwgTGluZUVkZ2VzUmVuZGVyZXIsIEdlb21ldHJ5
QnVmZmVyUmVuZGVyZXIsIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudCwgT3V0
bGluZVJlbmRlcmVyLCBSZW5kZXJpbmdHcm91cCwgUmVuZGVyaW5nR3JvdXBJbmZvLCBSZW5kZXJp
bmdNYW5hZ2VyLCBVdGlsaXR5TGF5ZXJSZW5kZXJlciwgU3ByaXRlLCBTcHJpdGVNYW5hZ2VyLCBT
cHJpdGVQYWNrZWRNYW5hZ2VyLCBTcHJpdGVTY2VuZUNvbXBvbmVudCwgX0FscGhhU3RhdGUsIF9E
ZXB0aEN1bGxpbmdTdGF0ZSwgX1N0ZW5jaWxTdGF0ZSwgQW5kT3JOb3RFdmFsdWF0b3IsIEFzc2V0
VGFza1N0YXRlLCBBYnN0cmFjdEFzc2V0VGFzaywgQXNzZXRzUHJvZ3Jlc3NFdmVudCwgTWVzaEFz
c2V0VGFzaywgVGV4dEZpbGVBc3NldFRhc2ssIEJpbmFyeUZpbGVBc3NldFRhc2ssIEltYWdlQXNz
ZXRUYXNrLCBUZXh0dXJlQXNzZXRUYXNrLCBDdWJlVGV4dHVyZUFzc2V0VGFzaywgSERSQ3ViZVRl
eHR1cmVBc3NldFRhc2ssIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNzZXRUYXNrLCBBc3Nl
dHNNYW5hZ2VyLCBERFNUb29scywgZXhwYW5kVG9Qcm9wZXJ0eSwgc2VyaWFsaXplLCBzZXJpYWxp
emVBc1RleHR1cmUsIHNlcmlhbGl6ZUFzQ29sb3IzLCBzZXJpYWxpemVBc0ZyZXNuZWxQYXJhbWV0
ZXJzLCBzZXJpYWxpemVBc1ZlY3RvcjIsIHNlcmlhbGl6ZUFzVmVjdG9yMywgc2VyaWFsaXplQXNN
ZXNoUmVmZXJlbmNlLCBzZXJpYWxpemVBc0NvbG9yQ3VydmVzLCBzZXJpYWxpemVBc0NvbG9yNCwg
c2VyaWFsaXplQXNJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLCBzZXJpYWxpemVBc1F1YXRl
cm5pb24sIHNlcmlhbGl6ZUFzTWF0cml4LCBzZXJpYWxpemVBc0NhbWVyYVJlZmVyZW5jZSwgU2Vy
aWFsaXphdGlvbkhlbHBlciwgRGVmZXJyZWQsIEVudmlyb25tZW50VGV4dHVyZVRvb2xzLCBNZXNo
RXhwbG9kZXIsIEZpbGVzSW5wdXQsIEN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29scywg
S2hyb25vc1RleHR1cmVDb250YWluZXIsIEV2ZW50U3RhdGUsIE9ic2VydmVyLCBNdWx0aU9ic2Vy
dmVyLCBPYnNlcnZhYmxlLCBQZXJmb3JtYW5jZU1vbml0b3IsIFJvbGxpbmdBdmVyYWdlLCBQcm9t
aXNlUG9seWZpbGwsIFNjZW5lT3B0aW1pemF0aW9uLCBUZXh0dXJlT3B0aW1pemF0aW9uLCBIYXJk
d2FyZVNjYWxpbmdPcHRpbWl6YXRpb24sIFNoYWRvd3NPcHRpbWl6YXRpb24sIFBvc3RQcm9jZXNz
ZXNPcHRpbWl6YXRpb24sIExlbnNGbGFyZXNPcHRpbWl6YXRpb24sIEN1c3RvbU9wdGltaXphdGlv
biwgUGFydGljbGVzT3B0aW1pemF0aW9uLCBSZW5kZXJUYXJnZXRzT3B0aW1pemF0aW9uLCBNZXJn
ZU1lc2hlc09wdGltaXphdGlvbiwgU2NlbmVPcHRpbWl6ZXJPcHRpb25zLCBTY2VuZU9wdGltaXpl
ciwgU2NlbmVTZXJpYWxpemVyLCBTbWFydEFycmF5LCBTbWFydEFycmF5Tm9EdXBsaWNhdGUsIFN0
cmluZ0RpY3Rpb25hcnksIFRhZ3MsIFRleHR1cmVUb29scywgVEdBVG9vbHMsIFRvb2xzLCBjbGFz
c05hbWUsIEFzeW5jTG9vcCwgVmlkZW9SZWNvcmRlciwgSm95c3RpY2tBeGlzLCBWaXJ0dWFsSm95
c3RpY2ssIFdvcmtlclBvb2wsIExvZ2dlciwgX1R5cGVTdG9yZSwgRmlsZXNJbnB1dFN0b3JlLCBE
ZWVwQ29waWVyLCBQaXZvdFRvb2xzLCBQcmVjaXNpb25EYXRlLCBTY3JlZW5zaG90VG9vbHMsIFdl
YlJlcXVlc3QsIEluc3BlY3RhYmxlVHlwZSwgQlJERlRleHR1cmVUb29scywgUkdCRFRleHR1cmVU
b29scywgQ29sb3JHcmFkaWVudCwgQ29sb3IzR3JhZGllbnQsIEZhY3RvckdyYWRpZW50LCBHcmFk
aWVudEhlbHBlciwgUGVyZkNvdW50ZXIsIFJldHJ5U3RyYXRlZ3ksIExvYWRGaWxlRXJyb3IsIEF1
dG9Sb3RhdGlvbkJlaGF2aW9yLCBCb3VuY2luZ0JlaGF2aW9yLCBGcmFtaW5nQmVoYXZpb3IsIEF0
dGFjaFRvQm94QmVoYXZpb3IsIEZhZGVJbk91dEJlaGF2aW9yLCBNdWx0aVBvaW50ZXJTY2FsZUJl
aGF2aW9yLCBQb2ludGVyRHJhZ0JlaGF2aW9yLCBTaXhEb2ZEcmFnQmVoYXZpb3IsIEFyY1JvdGF0
ZUNhbWVyYUdhbWVwYWRJbnB1dCwgQXJjUm90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQsIEFy
Y1JvdGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dCwgQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1
dCwgQXJjUm90YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0LCBGbHlDYW1lcmFLZXli
b2FyZElucHV0LCBGbHlDYW1lcmFNb3VzZUlucHV0LCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dCwgRm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0LCBGb2xsb3dDYW1lcmFQb2ludGVyc0lu
cHV0LCBGcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dCwgRnJlZUNhbWVyYUdhbWVwYWRJ
bnB1dCwgRnJlZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0LCBGcmVlQ2FtZXJhTW91c2VJbnB1dCwg
RnJlZUNhbWVyYVRvdWNoSW5wdXQsIEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dCwgQW5h
Z2x5cGhBcmNSb3RhdGVDYW1lcmEsIEFuYWdseXBoRnJlZUNhbWVyYSwgQW5hZ2x5cGhHYW1lcGFk
Q2FtZXJhLCBBbmFnbHlwaFVuaXZlcnNhbENhbWVyYSwgU3RlcmVvc2NvcGljQXJjUm90YXRlQ2Ft
ZXJhLCBTdGVyZW9zY29waWNGcmVlQ2FtZXJhLCBTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhLCBT
dGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEsIFZSQ2FtZXJhTWV0cmljcywgVlJEZXZpY2VPcmll
bnRhdGlvbkFyY1JvdGF0ZUNhbWVyYSwgVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEsIFZS
RGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhLCBPbkFmdGVyRW50ZXJpbmdWUk9ic2VydmFi
bGVFdmVudCwgVlJFeHBlcmllbmNlSGVscGVyLCBXZWJWUkZyZWVDYW1lcmEsIFdlYlhSQ2FtZXJh
LCBXZWJYUkVudGVyRXhpdFVJQnV0dG9uLCBXZWJYUkVudGVyRXhpdFVJT3B0aW9ucywgV2ViWFJF
bnRlckV4aXRVSSwgV2ViWFJTdGF0ZSwgV2ViWFJFeHBlcmllbmNlSGVscGVyLCBXZWJYUklucHV0
LCBXZWJYUkNvbnRyb2xsZXJUZWxlcG9ydGF0aW9uLCBXZWJYUkNvbnRyb2xsZXJQb2ludGVyU2Vs
ZWN0aW9uLCBXZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciwgV2ViWFJDb250cm9sbGVyLCBXZWJY
Uk1hbmFnZWRPdXRwdXRDYW52YXMsIFdlYlhSU2Vzc2lvbk1hbmFnZXIsIE9jdHJlZSwgT2N0cmVl
QmxvY2ssIE9jdHJlZVNjZW5lQ29tcG9uZW50LCBfT2NjbHVzaW9uRGF0YVN0b3JhZ2UsIF9mb3Jj
ZVRyYW5zZm9ybUZlZWRiYWNrVG9CdW5kbGUsIERheWRyZWFtQ29udHJvbGxlciwgR2VhclZSQ29u
dHJvbGxlciwgR2VuZXJpY0NvbnRyb2xsZXIsIE9jdWx1c1RvdWNoQ29udHJvbGxlciwgUG9zZUVu
YWJsZWRDb250cm9sbGVyVHlwZSwgUG9zZUVuYWJsZWRDb250cm9sbGVySGVscGVyLCBQb3NlRW5h
YmxlZENvbnRyb2xsZXIsIFZpdmVDb250cm9sbGVyLCBXZWJWUkNvbnRyb2xsZXIsIFdpbmRvd3NN
b3Rpb25Db250cm9sbGVyLCBTaGFkb3dHZW5lcmF0b3IsIFNoYWRvd0dlbmVyYXRvclNjZW5lQ29t
cG9uZW50LCBfQmFieWxvbkxvYWRlclJlZ2lzdGVyZWQsIEJhY2tncm91bmRNYXRlcmlhbCwgUEJS
TWF0ZXJpYWxEZWZpbmVzLCBQQlJCYXNlTWF0ZXJpYWwsIFBCUkJhc2VTaW1wbGVNYXRlcmlhbCwg
UEJSTWF0ZXJpYWwsIFBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwsIFBCUlNwZWN1bGFyR2xv
c3NpbmVzc01hdGVyaWFsLCBDb2xvckdyYWRpbmdUZXh0dXJlLCBSYXdDdWJlVGV4dHVyZSwgUmF3
VGV4dHVyZTNELCBSZWZyYWN0aW9uVGV4dHVyZSwgVmlkZW9UZXh0dXJlLCBIdG1sRWxlbWVudFRl
eHR1cmUsIE5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cywgTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcywgTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50LCBOb2RlTWF0ZXJpYWxC
bG9jaywgTm9kZU1hdGVyaWFsRGVmaW5lcywgTm9kZU1hdGVyaWFsLCBOb2RlTWF0ZXJpYWxTeXN0
ZW1WYWx1ZXMsIE9yaWVudGF0aW9uLCBCZXppZXJDdXJ2ZSwgQW5nbGUsIEFyYzIsIFBhdGgyLCBQ
YXRoM0QsIEN1cnZlMywgUG9zaXRpb25Ob3JtYWxWZXJ0ZXgsIFBvc2l0aW9uTm9ybWFsVGV4dHVy
ZVZlcnRleCwgRHJhY29Db21wcmVzc2lvbiwgVGlsZWRCb3hCdWlsZGVyLCBEaXNjQnVpbGRlciwg
UmliYm9uQnVpbGRlciwgSGVtaXNwaGVyZUJ1aWxkZXIsIFRvcnVzS25vdEJ1aWxkZXIsIFBvbHln
b25CdWlsZGVyLCBTaGFwZUJ1aWxkZXIsIExhdGhlQnVpbGRlciwgVGlsZWRQbGFuZUJ1aWxkZXIs
IFR1YmVCdWlsZGVyLCBQb2x5aGVkcm9uQnVpbGRlciwgSWNvU3BoZXJlQnVpbGRlciwgRGVjYWxC
dWlsZGVyLCBSZWNhc3RKU1BsdWdpbiwgUmVjYXN0SlNDcm93ZCwgQm94UGFydGljbGVFbWl0dGVy
LCBDb25lUGFydGljbGVFbWl0dGVyLCBDeWxpbmRlclBhcnRpY2xlRW1pdHRlciwgQ3lsaW5kZXJE
aXJlY3RlZFBhcnRpY2xlRW1pdHRlciwgSGVtaXNwaGVyaWNQYXJ0aWNsZUVtaXR0ZXIsIFBvaW50
UGFydGljbGVFbWl0dGVyLCBTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIsIFNwaGVyZURpcmVjdGVkUGFy
dGljbGVFbWl0dGVyLCBDYW5ub25KU1BsdWdpbiwgQW1tb0pTUGx1Z2luLCBPaW1vSlNQbHVnaW4s
IFBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0LCBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLCBQb3N0
UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlciwgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1h
bmFnZXJTY2VuZUNvbXBvbmVudCwgSERSVG9vbHMsIFBhbm9yYW1hVG9DdWJlTWFwVG9vbHMsIF9E
RFNUZXh0dXJlTG9hZGVyLCBfRU5WVGV4dHVyZUxvYWRlciwgX0tUWFRleHR1cmVMb2FkZXIsIF9U
R0FUZXh0dXJlTG9hZGVyLCBfQmFzaXNUZXh0dXJlTG9hZGVyLCBDdXN0b21Qcm9jZWR1cmFsVGV4
dHVyZSwgTm9pc2VQcm9jZWR1cmFsVGV4dHVyZSwgUHJvY2VkdXJhbFRleHR1cmUsIFByb2NlZHVy
YWxUZXh0dXJlU2NlbmVDb21wb25lbnQsIE11bHRpcGx5QmxvY2ssIEFkZEJsb2NrLCBTY2FsZUJs
b2NrLCBDbGFtcEJsb2NrLCBDcm9zc0Jsb2NrLCBEb3RCbG9jaywgVHJhbnNmb3JtQmxvY2ssIFJl
bWFwQmxvY2ssIE5vcm1hbGl6ZUJsb2NrLCBUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnMsIFRy
aWdvbm9tZXRyeUJsb2NrLCBDb2xvck1lcmdlckJsb2NrLCBWZWN0b3JNZXJnZXJCbG9jaywgQ29s
b3JTcGxpdHRlckJsb2NrLCBWZWN0b3JTcGxpdHRlckJsb2NrLCBMZXJwQmxvY2ssIERpdmlkZUJs
b2NrLCBTdWJ0cmFjdEJsb2NrLCBTdGVwQmxvY2ssIE9wcG9zaXRlQmxvY2ssIFZpZXdEaXJlY3Rp
b25CbG9jaywgRnJlc25lbEJsb2NrLCBNYXhCbG9jaywgTWluQmxvY2ssIE5vZGVNYXRlcmlhbE9w
dGltaXplciwgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLCBMZW5zUmVuZGVyaW5nUGlwZWxpbmUs
IFNTQU8yUmVuZGVyaW5nUGlwZWxpbmUsIFNTQU9SZW5kZXJpbmdQaXBlbGluZSwgU3RhbmRhcmRS
ZW5kZXJpbmdQaXBlbGluZSwgVmVydGV4T3V0cHV0QmxvY2ssIEJvbmVzQmxvY2ssIEluc3RhbmNl
c0Jsb2NrLCBNb3JwaFRhcmdldHNCbG9jaywgTGlnaHRJbmZvcm1hdGlvbkJsb2NrLCBGcmFnbWVu
dE91dHB1dEJsb2NrLCBBbHBoYVRlc3RCbG9jaywgSW1hZ2VQcm9jZXNzaW5nQmxvY2ssIFBlcnR1
cmJOb3JtYWxCbG9jaywgRm9nQmxvY2ssIExpZ2h0QmxvY2ssIFRleHR1cmVCbG9jaywgUmVmbGVj
dGlvblRleHR1cmVCbG9jaywgSW5wdXRCbG9jaywgQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGds
b2JhbCkgey8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlYnVnIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEZWJ1
ZzsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbmRleCAqLyAiLi9pbmRl
eC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9EZWJ1Z19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRGVidWcvaW5k
ZXggKi8gIi4vRGVidWcvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWJzdHJhY3RTY2Vu
ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkFic3RyYWN0U2NlbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiS2VlcEFzc2V0cyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IktlZXBBc3NldHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXNzZXRDb250YWluZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJB
c3NldENvbnRhaW5lciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZSJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTY2VuZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RhZ2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdGFnZSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJBYnN0cmFjdEFjdGlvbk1hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBYnN0cmFjdEFjdGlvbk1hbmFnZXIi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQWN0aW9uIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkFjdGlvbkV2ZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQWN0aW9uRXZlbnQiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQWN0aW9uTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFjdGlvbk1hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siQ29uZGl0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlZhbHVlQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmFsdWVDb25kaXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUHJlZGljYXRlQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siUHJlZGljYXRlQ29uZGl0aW9uIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlN0YXRlQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3RhdGVDb25kaXRpb24iXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiU3dpdGNoQm9vbGVhbkFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlN3aXRjaEJvb2xlYW5BY3Rpb24i
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2V0U3RhdGVBY3Rpb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTZXRTdGF0ZUFjdGlv
biJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTZXRWYWx1ZUFjdGlvbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNldFZhbHVlQWN0
aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkluY3JlbWVudFZhbHVlQWN0aW9uIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSW5j
cmVtZW50VmFsdWVBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxheUFuaW1hdGlv
bkFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlBsYXlBbmltYXRpb25BY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U3RvcEFuaW1hdGlvbkFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlN0b3BBbmltYXRpb25BY3Rpb24iXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiRG9Ob3RoaW5nQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRG9Ob3RoaW5nQWN0aW9uIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkNvbWJpbmVBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb21iaW5lQWN0aW9uIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkV4ZWN1dGVDb2RlQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRXhlY3V0ZUNvZGVBY3Rpb24iXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2V0UGFyZW50QWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2V0UGFyZW50QWN0aW9u
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBsYXlTb3VuZEFjdGlvbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBsYXlTb3VuZEFj
dGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdG9wU291bmRBY3Rpb24iLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdG9wU291
bmRBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW50ZXJwb2xhdGVWYWx1ZUFjdGlv
biIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkludGVycG9sYXRlVmFsdWVBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5p
bWF0YWJsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkFuaW1hdGFibGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0lBbmltYXRp
b25TdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9JQW5pbWF0aW9uU3RhdGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5p
bWF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQW5pbWF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRhcmdldGVkQW5p
bWF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVGFyZ2V0ZWRBbmltYXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5p
bWF0aW9uR3JvdXAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJBbmltYXRpb25Hcm91cCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJB
bmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRWFzaW5nRnVuY3Rpb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFYXNpbmdGdW5jdGlv
biJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDaXJjbGVFYXNlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ2lyY2xlRWFzZSJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJCYWNrRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhY2tFYXNlIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkJvdW5jZUVhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCb3VuY2VFYXNlIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkN1YmljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkN1YmljRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJF
bGFzdGljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkVsYXN0aWNFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkV4cG9u
ZW50aWFsRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkV4cG9uZW50aWFsRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQ
b3dlckVhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJQb3dlckVhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVhZHJhdGlj
RWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlF1YWRyYXRpY0Vhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVhcnRpY0Vh
c2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJRdWFydGljRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJRdWludGljRWFzZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlF1aW50aWNFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbmVFYXNlIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2luZUVh
c2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmV6aWVyQ3VydmVFYXNlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmV6aWVyQ3Vy
dmVFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJ1bnRpbWVBbmltYXRpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJSdW50
aW1lQW5pbWF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGlvbkV2ZW50Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
QW5pbWF0aW9uRXZlbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5pbWF0aW9uS2V5SW50
ZXJwb2xhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkFuaW1hdGlvbktleUludGVycG9sYXRpb24iXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQW5pbWF0aW9uUmFuZ2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBbmltYXRpb25SYW5nZSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJBbmFseXNlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkFuYWx5c2VyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkF1ZGlvRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siQXVkaW9FbmdpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXVk
aW9TY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkF1ZGlvU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU291bmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJTb3VuZCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTb3VuZFRy
YWNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siU291bmRUcmFjayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWlnaHRlZFNvdW5k
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siV2VpZ2h0ZWRTb3VuZCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb25lIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQm9uZSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb25lSUtDb250cm9sbGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQm9uZUlLQ29udHJv
bGxlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb25lTG9va0NvbnRyb2xsZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCb25l
TG9va0NvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2tlbGV0b24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTa2Vs
ZXRvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDYW1lcmFJbnB1dFR5cGVzIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ2FtZXJh
SW5wdXRUeXBlcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDYW1lcmFJbnB1dHNNYW5hZ2Vy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQ2FtZXJhSW5wdXRzTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDYW1lcmEi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGFyZ2V0Q2FtZXJhIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVGFyZ2V0
Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJGcmVlQ2FtZXJh
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRnJl
ZUNhbWVyYUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG91Y2hDYW1l
cmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJUb3VjaENhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmNSb3RhdGVDYW1l
cmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJBcmNSb3RhdGVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRl
Q2FtZXJhSW5wdXRzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkFyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRGV2aWNlT3JpZW50YXRpb25DYW1lcmEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEZXZpY2VPcmll
bnRhdGlvbkNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGbHlDYW1lcmEiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJGbHlD
YW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmx5Q2FtZXJhSW5wdXRzTWFuYWdlciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkZseUNhbWVyYUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRm9sbG93
Q2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRm9sbG93Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY0ZvbGxv
d0NhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkFyY0ZvbGxvd0NhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGb2xs
b3dDYW1lcmFJbnB1dHNNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlciJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJHYW1lcGFkQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siR2FtZXBhZENhbWVyYSJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJVbml2ZXJzYWxDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJVbml2ZXJzYWxDYW1lcmEiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlydHVhbEpveXN0aWNrc0NhbWVyYSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZpcnR1YWxK
b3lzdGlja3NDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sbGlkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb2xs
aWRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWZhdWx0Q29sbGlzaW9uQ29vcmRpbmF0
b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJEZWZhdWx0Q29sbGlzaW9uQ29vcmRpbmF0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUGlja2luZ0luZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJQaWNraW5nSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJ
bnRlcnNlY3Rpb25JbmZvIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siSW50ZXJzZWN0aW9uSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJfTWVzaENvbGxpc2lvbkRhdGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfTWVzaENvbGxpc2lvbkRhdGEiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQm91bmRpbmdCb3giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCb3VuZGluZ0JveCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJCb3VuZGluZ0luZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCb3VuZGluZ0luZm8iXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQm91bmRpbmdTcGhlcmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCb3VuZGluZ1NwaGVyZSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJSYXkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJSYXkiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXhlc1ZpZXdl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkF4ZXNWaWV3ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm9uZUF4ZXNWaWV3ZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJCb25lQXhlc1ZpZXdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWJ1Z0xheWVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RGVidWdMYXllciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzVmlld2VyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGh5
c2ljc1ZpZXdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSYXlIZWxwZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJSYXlIZWxw
ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2tlbGV0b25WaWV3ZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTa2VsZXRvblZp
ZXdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb25zdGFudHMiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb25zdGFudHMiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zdGFuY2luZ0F0dHJpYnV0ZUluZm8iLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJJbnN0YW5j
aW5nQXR0cmlidXRlSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aFRleHR1cmVD
cmVhdGlvbk9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJEZXB0aFRleHR1cmVDcmVhdGlvbk9wdGlvbnMiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRW5naW5lQ2FwYWJpbGl0aWVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lQ2FwYWJpbGl0aWVzIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJFbmdpbmVTdG9yZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZVN0b3JlIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIk51bGxFbmdpbmVPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTnVsbEVuZ2luZU9wdGlvbnMiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTnVsbEVuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk51bGxFbmdpbmUiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiV2ViR0xQaXBlbGluZUNvbnRleHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXZWJHTFBpcGVsaW5lQ29udGV4dCJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJXZWJHUFVDb25zdGFudHMiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXZWJHUFVDb25zdGFudHMi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViR1BVRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siV2ViR1BVRW5naW5lIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkdMMlNoYWRlclByb2Nlc3NvciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldlYkdMMlNo
YWRlclByb2Nlc3NvciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOYXRpdmVFbmdpbmUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJO
YXRpdmVFbmdpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiS2V5Ym9hcmRFdmVudFR5cGVz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siS2V5Ym9hcmRFdmVudFR5cGVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktleWJvYXJk
SW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIktleWJvYXJkSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJLZXlib2FyZElu
Zm9QcmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJLZXlib2FyZEluZm9QcmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRl
ckV2ZW50VHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJQb2ludGVyRXZlbnRUeXBlcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJQb2ludGVySW5mb0Jhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVySW5mb0Jhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiUG9pbnRlckluZm9QcmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVySW5mb1ByZSJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQb2ludGVySW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJJbmZvIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkNsaXBib2FyZEV2ZW50VHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDbGlwYm9hcmRFdmVudFR5cGVzIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkNsaXBib2FyZEluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDbGlwYm9hcmRJbmZvIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlN0aWNrVmFsdWVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3RpY2tWYWx1ZXMiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiR2FtZXBhZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkdhbWVwYWQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
R2VuZXJpY1BhZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkdlbmVyaWNQYWQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2FtZXBh
ZE1hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJHYW1lcGFkTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHYW1l
cGFkU3lzdGVtU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHYW1lcGFkU3lzdGVtU2NlbmVDb21wb25lbnQiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiWGJveDM2MEJ1dHRvbiIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlhib3gzNjBCdXR0b24iXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiWGJveDM2MERwYWQiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJYYm94MzYwRHBhZCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJYYm94MzYwUGFkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siWGJveDM2MFBhZCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJEdWFsU2hvY2tCdXR0b24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEdWFsU2hvY2tCdXR0b24iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRHVhbFNob2NrRHBhZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkR1YWxTaG9ja0RwYWQiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRHVhbFNob2NrUGFkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRHVhbFNob2NrUGFkIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkF4aXNEcmFnR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBeGlzRHJhZ0dpem1vIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkF4aXNTY2FsZUdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXhpc1NjYWxlR2l6bW8iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQm91bmRpbmdCb3hHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJvdW5kaW5nQm94R2l6bW8iXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHaXptbyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJHaXptb01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHaXptb01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiUGxhbmVSb3RhdGlvbkdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGxhbmVSb3RhdGlvbkdpem1vIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBvc2l0aW9uR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb3NpdGlvbkdpem1vIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlJvdGF0aW9uR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJSb3RhdGlvbkdpem1vIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlNjYWxlR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsZUdpem1vIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkxpZ2h0R2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMaWdodEdpem1vIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBsYW5lRHJhZ0dpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siUGxhbmVEcmFnR2l6bW8iXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRW52aXJvbm1lbnRIZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbnZpcm9ubWVudEhlbHBlciJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJQaG90b0RvbWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQaG90b0RvbWUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiX2ZvcmNlU2NlbmVIZWxwZXJzVG9CdW5kbGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfZm9yY2VTY2VuZUhlbHBlcnNUb0J1
bmRsZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWaWRlb0RvbWUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWaWRlb0RvbWUiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRW5naW5lSW5zdHJ1bWVudGF0aW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lSW5z
dHJ1bWVudGF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lSW5zdHJ1bWVudGF0
aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siU2NlbmVJbnN0cnVtZW50YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX1Rp
bWVUb2tlbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9UaW1lVG9rZW4iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRWZmZWN0TGF5
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJFZmZlY3RMYXllciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFZmZlY3RMYXllclNj
ZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siRWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJHbG93TGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHbG93TGF5ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiSGlnaGxpZ2h0TGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJIaWdobGlnaHRMYXllciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJMYXllciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkxheWVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxheWVyU2NlbmVD
b21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJMYXllclNjZW5lQ29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkxlbnNGbGFyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkxlbnNGbGFyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zRmxh
cmVTeXN0ZW0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJMZW5zRmxhcmVTeXN0ZW0iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVu
c0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVu
dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxpZ2h0Il07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlNoYWRvd0xpZ2h0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2hhZG93TGlnaHQiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiRGlyZWN0aW9uYWxMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRpcmVjdGlvbmFsTGlnaHQiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiSGVtaXNwaGVyaWNMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkhlbWlzcGhlcmljTGlnaHQiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50TGlnaHQiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiU3BvdExpZ2h0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3BvdExpZ2h0Il07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkRlZmF1bHRMb2FkaW5nU2NyZWVuIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRGVmYXVsdExvYWRpbmdTY3JlZW4iXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVMb2FkZXJQcm9ncmVzc0V2ZW50IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NlbmVMb2Fk
ZXJQcm9ncmVzc0V2ZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lTG9hZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
U2NlbmVMb2FkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVMb2FkZXJGbGFncyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlNjZW5lTG9hZGVyRmxhZ3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3JDdXJ2ZXMi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJDb2xvckN1cnZlcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFZmZlY3RGYWxsYmFja3Mi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJFZmZlY3RGYWxsYmFja3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRWZmZWN0Q3JlYXRp
b25PcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRWZmZWN0Q3JlYXRpb25PcHRpb25zIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkVmZmVjdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkVmZmVjdCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVzbmVsUGFy
YW1ldGVycyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkZyZXNuZWxQYXJhbWV0ZXJzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIklt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25EZWZpbmVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbkRlZmluZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRlcmlhbCJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJNYXRlcmlhbERlZmluZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRlcmlhbERlZmluZXMiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiTWF0ZXJpYWxIZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRlcmlhbEhlbHBlciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNdWx0aU1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTXVsdGlNYXRlcmlhbCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJQdXNoTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQdXNoTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU2hhZGVyTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTaGFkZXJNYXRlcmlhbCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlN0YW5kYXJkTWF0ZXJpYWxEZWZp
bmVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkTWF0ZXJpYWwiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdGFuZGFy
ZE1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VUZXh0dXJlIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZVRl
eHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3ViZVRleHR1cmUiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDdWJlVGV4dHVy
ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEeW5hbWljVGV4dHVyZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkR5bmFtaWNUZXh0
dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJl
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
SERSQ3ViZVRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJIRFJDdWJlVGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJJbnRlcm5hbFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJJbnRlcm5hbFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTWlycm9yVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIk1pcnJvclRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTXVsdGlSZW5kZXJUYXJnZXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNdWx0aVJlbmRlclRhcmdldCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJSYXdUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUmF3VGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJSZW5kZXJUYXJnZXRUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJVbmlmb3JtQnVmZmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVW5pZm9ybUJ1ZmZlciJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJNYXRlcmlhbEZsYWdzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWF0ZXJpYWxGbGFncyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJFZmZlY3RSZW5kZXJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdFJlbmRlcmVyIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkVmZmVjdFdyYXBwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3RXcmFwcGVyIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlNjYWxhciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlNjYWxhciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGFj
ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlNwYWNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkF4aXMiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBeGlzIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yMyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbG9yMyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJDb2xvcjQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJDb2xvcjQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG1wQ29sb3Jz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVG1wQ29sb3JzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvR2FtbWFTcGFjZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRv
R2FtbWFTcGFjZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUb0xpbmVhclNwYWNlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9M
aW5lYXJTcGFjZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFcHNpbG9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRXBzaWxvbiJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcnVzdHVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRnJ1c3R1bSJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJQbGFuZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlBsYW5lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNp
emUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJTaXplIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3RvcjIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IyIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3RvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlZlY3RvcjQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3I0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlF1YXRlcm5pb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJRdWF0ZXJuaW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1hdHJp
eCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIk1hdHJpeCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUbXBWZWN0b3JzIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVj
dG9ycyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWaWV3cG9ydCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZpZXdwb3J0Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlNwaGVyaWNhbEhhcm1vbmljcyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNwaGVyaWNhbEhhcm1v
bmljcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGhlcmljYWxQb2x5bm9taWFsIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3Bo
ZXJpY2FsUG9seW5vbWlhbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBYnN0cmFjdE1lc2gi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJBYnN0cmFjdE1lc2giXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQnVmZmVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQnVmZmVy
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlcnRleEJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlcnRleEJ1ZmZlciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJDU0ciLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDU0ciXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiR2VvbWV0cnkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJHZW9tZXRyeSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHcm91
bmRNZXNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siR3JvdW5kTWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmFpbE1lc2gi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJUcmFpbE1lc2giXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zdGFuY2VkTWVzaCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIklu
c3RhbmNlZE1lc2giXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGluZXNNZXNoIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTGluZXNN
ZXNoIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkluc3RhbmNlZExpbmVzTWVzaCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkluc3Rh
bmNlZExpbmVzTWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfQ3JlYXRpb25EYXRhU3Rv
cmFnZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9DcmVhdGlvbkRhdGFTdG9yYWdlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9J
bnN0YW5jZXNCYXRjaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9JbnN0YW5jZXNCYXRjaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJNZXNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWZXJ0ZXhEYXRhIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVy
dGV4RGF0YSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNZXNoQnVpbGRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2hCdWls
ZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbXBsaWZpY2F0aW9uU2V0dGluZ3MiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJT
aW1wbGlmaWNhdGlvblNldHRpbmdzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbXBsaWZp
Y2F0aW9uUXVldWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJTaW1wbGlmaWNhdGlvblF1ZXVlIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlNpbXBsaWZpY2F0aW9uVHlwZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNpbXBsaWZpY2F0aW9uVHlwZSJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTaW1wbGljYXRpb25RdWV1ZVNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2ltcGxpY2F0
aW9uUXVldWVTY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2x5Z29u
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUG9seWdvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2x5Z29uTWVzaEJ1aWxkZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQb2x5Z29uTWVzaEJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzZVN1Yk1l
c2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJCYXNlU3ViTWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdWJNZXNoIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3Vi
TWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNZXNoTE9ETGV2ZWwiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoTE9ETGV2
ZWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJhbnNmb3JtTm9kZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRyYW5zZm9ybU5v
ZGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm94QnVpbGRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJveEJ1aWxkZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3BoZXJlQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNwaGVyZUJ1aWxkZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ3lsaW5kZXJCdWlsZGVy
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvcnVzQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRvcnVzQnVpbGRlciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaW5lc0J1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMaW5lc0J1aWxkZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxhbmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGxhbmVCdWlsZGVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkdyb3VuZEJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHcm91bmRCdWlsZGVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkRhdGFCdWZmZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEYXRhQnVmZmVyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIldlYkdMRGF0YUJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldlYkdMRGF0YUJ1ZmZlciJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJXZWJHUFVEYXRhQnVmZmVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siV2ViR1BVRGF0YUJ1ZmZlciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJNb3JwaFRhcmdldCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1vcnBoVGFyZ2V0Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk1vcnBoVGFyZ2V0TWFuYWdlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1vcnBoVGFyZ2V0TWFu
YWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEYXRhYmFzZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRhdGFiYXNlIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2VQYXJ0aWNsZVN5
c3RlbSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHUFVQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkdQVVBh
cnRpY2xlU3lzdGVtIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhcnRpY2xlIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGFydGlj
bGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFydGljbGVIZWxwZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQYXJ0aWNsZUhl
bHBlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBhcnRpY2xl
U3lzdGVtIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9JRG9OZWVkVG9CZUluVGhlQnVpbGQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfSURvTmVlZFRvQmVJblRoZUJ1aWxkIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhcnRp
Y2xlU3lzdGVtU2V0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siUGFydGljbGVTeXN0ZW1TZXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiU29saWRQYXJ0aWNsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlNvbGlkUGFydGljbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiTW9kZWxTaGFwZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIk1vZGVsU2hhcGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVw
dGhTb3J0ZWRQYXJ0aWNsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkRlcHRoU29ydGVkUGFydGljbGUiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU29saWRQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNvbGlkUGFydGljbGVTeXN0ZW0iXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU3ViRW1pdHRlclR5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdWJFbWl0dGVyVHlwZSJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTdWJFbWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3ViRW1pdHRlciJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQaHlzaWNzRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGh5c2ljc0VuZ2luZSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQaHlzaWNzRW5naW5lU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQaHlzaWNzRW5n
aW5lU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc0hlbHBl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlBoeXNpY3NIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1JhZGlh
bEV4cGxvc2lvbkV2ZW50T3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlv
bnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1VwZHJhZnRFdmVudE9wdGlvbnMi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQaHlzaWNzVXBkcmFmdEV2ZW50T3B0aW9ucyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQ
aHlzaWNzVm9ydGV4RXZlbnRPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGh5c2ljc1ZvcnRleEV2ZW50T3B0aW9ucyJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzUmFkaWFsSW1wdWxzZUZhbGxvZmYiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQaHlz
aWNzUmFkaWFsSW1wdWxzZUZhbGxvZmYiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2lj
c1VwZHJhZnRNb2RlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siUGh5c2ljc1VwZHJhZnRNb2RlIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBoeXNpY3NJbXBvc3RvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlBoeXNpY3NJbXBvc3RvciJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQaHlzaWNzSm9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQaHlzaWNzSm9pbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRGlzdGFuY2VKb2ludCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkRpc3RhbmNlSm9pbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTW90b3JFbmFibGVkSm9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNb3RvckVuYWJsZWRKb2ludCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJIaW5nZUpvaW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSGluZ2VKb2ludCJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJIaW5nZTJKb2ludCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkhpbmdlMkpvaW50Il07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkFuYWdseXBoUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBbmFnbHlwaFBvc3RQcm9jZXNzIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkJsYWNrQW5kV2hpdGVQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJsYWNrQW5kV2hpdGVQ
b3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCbG9vbUVmZmVjdCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJsb29t
RWZmZWN0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJsb29tTWVyZ2VQb3N0UHJvY2VzcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkJsb29tTWVyZ2VQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCbHVyUG9z
dFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJCbHVyUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2hy
b21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9j
ZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nl
c3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJDaXJjbGVPZkNvbmZ1c2lvblBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkNvbG9yQ29ycmVjdGlvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29sb3JDb3JyZWN0aW9uUG9zdFByb2Nl
c3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29udm9sdXRpb25Qb3N0UHJvY2VzcyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNv
bnZvbHV0aW9uUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhPZkZp
ZWxkQmx1clBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoT2ZGaWVsZEVmZmVjdEJsdXJMZXZlbCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRlcHRoT2ZG
aWVsZEVmZmVjdEJsdXJMZXZlbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aE9mRmll
bGRFZmZlY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJEZXB0aE9mRmllbGRFZmZlY3QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
RGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2Vzc09wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEZXB0aE9mRmllbGRNZXJnZVBv
c3RQcm9jZXNzT3B0aW9ucyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aE9mRmllbGRN
ZXJnZVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2VzcyJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJEaXNwbGF5UGFzc1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRGlzcGxheVBhc3NQb3N0
UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFeHRyYWN0SGlnaGxpZ2h0c1Bvc3RQ
cm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRXh0cmFjdEhpZ2hsaWdodHNQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJGaWx0ZXJQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZpbHRlclBvc3RQcm9jZXNzIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkZ4YWFQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZ4YWFQb3N0UHJvY2VzcyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJHcmFpblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siR3JhaW5Qb3N0UHJvY2VzcyJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJIaWdobGlnaHRzUG9zdFByb2Nlc3MiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJIaWdobGln
aHRzUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5n
UG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNb3Rpb25CbHVyUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNb3Rpb25CbHVyUG9zdFByb2Nlc3Mi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFzc1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGFzc1Bvc3RQcm9j
ZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhc3NDdWJlUG9zdFByb2Nlc3MiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQYXNz
Q3ViZVBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
UG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3NNYW5hZ2Vy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUG9zdFByb2Nlc3NNYW5hZ2VyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlZnJhY3Rp
b25Qb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlJlZnJhY3Rpb25Qb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJTaGFycGVuUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTaGFycGVuUG9zdFByb2Nlc3MiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiU3RlcmVvc2NvcGljSW50ZXJsYWNlUG9zdFByb2Nlc3MiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdGVy
ZW9zY29waWNJbnRlcmxhY2VQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJU
b25lbWFwcGluZ09wZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVG9uZW1hcHBpbmdPcGVyYXRvciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJUb25lbWFwUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb25lbWFwUG9zdFByb2Nlc3MiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlZSRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZSRGlzdG9ydGlv
bkNvcnJlY3Rpb25Qb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWUk11bHRp
dmlld1RvU2luZ2xldmlld1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVlJNdWx0aXZpZXdUb1NpbmdsZXZpZXdQb3N0
UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZsZWN0aW9uUHJvYmUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJSZWZs
ZWN0aW9uUHJvYmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmRpbmdCb3hSZW5kZXJl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkJvdW5kaW5nQm94UmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhS
ZW5kZXJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkRlcHRoUmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhS
ZW5kZXJlclNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRGVwdGhSZW5kZXJlclNjZW5lQ29tcG9uZW50Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkVkZ2VzUmVuZGVyZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZGdlc1JlbmRlcmVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkxpbmVFZGdlc1JlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTGluZUVkZ2VzUmVuZGVy
ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2VvbWV0cnlCdWZmZXJSZW5kZXJlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkdl
b21ldHJ5QnVmZmVyUmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2VvbWV0cnlC
dWZmZXJSZW5kZXJlclNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siR2VvbWV0cnlCdWZmZXJSZW5kZXJlclNjZW5l
Q29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk91dGxpbmVSZW5kZXJlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk91
dGxpbmVSZW5kZXJlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJpbmdHcm91cCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlJlbmRlcmluZ0dyb3VwIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbmRlcmluZ0dyb3Vw
SW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlJlbmRlcmluZ0dyb3VwSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5k
ZXJpbmdNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siUmVuZGVyaW5nTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJVdGlsaXR5TGF5ZXJSZW5kZXJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlV0aWxpdHlMYXllclJlbmRlcmVyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlNwcml0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNwcml0ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTcHJpdGVNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siU3ByaXRlTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTcHJpdGVQYWNrZWRNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3ByaXRlUGFja2VkTWFuYWdlciJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTcHJpdGVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNwcml0ZVNjZW5lQ29tcG9uZW50
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9BbHBoYVN0YXRlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX0FscGhhU3RhdGUiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0RlcHRoQ3VsbGluZ1N0YXRlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX0RlcHRoQ3VsbGlu
Z1N0YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9TdGVuY2lsU3RhdGUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfU3RlbmNp
bFN0YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuZE9yTm90RXZhbHVhdG9yIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQW5k
T3JOb3RFdmFsdWF0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXNzZXRUYXNrU3RhdGUi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJBc3NldFRhc2tTdGF0ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBYnN0cmFjdEFzc2V0
VGFzayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkFic3RyYWN0QXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFzc2V0
c1Byb2dyZXNzRXZlbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJBc3NldHNQcm9ncmVzc0V2ZW50Il07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIk1lc2hBc3NldFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlRleHRGaWxlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVGV4dEZpbGVBc3NldFRhc2siXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQmluYXJ5RmlsZUFzc2V0VGFzayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJpbmFyeUZpbGVBc3NldFRhc2si
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VBc3NldFRhc2siLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJJbWFnZUFzc2V0VGFz
ayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUZXh0dXJlQXNzZXRUYXNrIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVGV4dHVyZUFz
c2V0VGFzayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDdWJlVGV4dHVyZUFzc2V0VGFzayIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkN1YmVUZXh0dXJlQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhEUkN1YmVU
ZXh0dXJlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siSERSQ3ViZVRleHR1cmVBc3NldFRhc2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmVBc3NldFRhc2siLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFcXVpUmVj
dGFuZ3VsYXJDdWJlVGV4dHVyZUFzc2V0VGFzayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJB
c3NldHNNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siQXNzZXRzTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJE
RFNUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkREU1Rvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImV4cGFuZFRvUHJv
cGVydHkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJleHBhbmRUb1Byb3BlcnR5Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNlcmlh
bGl6ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bInNlcmlhbGl6ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1Rl
eHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJzZXJpYWxpemVBc1RleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2Vy
aWFsaXplQXNDb2xvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJzZXJpYWxpemVBc0NvbG9yMyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJzZXJpYWxpemVBc0ZyZXNuZWxQYXJhbWV0ZXJzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sic2VyaWFsaXplQXNGcmVzbmVsUGFy
YW1ldGVycyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1ZlY3RvcjIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJz
ZXJpYWxpemVBc1ZlY3RvcjIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2VyaWFsaXplQXNW
ZWN0b3IzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1sic2VyaWFsaXplQXNWZWN0b3IzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNl
cmlhbGl6ZUFzTWVzaFJlZmVyZW5jZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bInNlcmlhbGl6ZUFzTWVzaFJlZmVyZW5jZSJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0NvbG9yQ3VydmVzIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sic2VyaWFsaXplQXND
b2xvckN1cnZlcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0NvbG9yNCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
InNlcmlhbGl6ZUFzQ29sb3I0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNlcmlhbGl6ZUFz
SW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bInNlcmlhbGl6ZUFzSW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1F1YXRl
cm5pb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJzZXJpYWxpemVBc1F1YXRlcm5pb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
c2VyaWFsaXplQXNNYXRyaXgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJzZXJpYWxpemVBc01hdHJpeCJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJzZXJpYWxpemVBc0NhbWVyYVJlZmVyZW5jZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bInNlcmlhbGl6ZUFzQ2FtZXJhUmVm
ZXJlbmNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNlcmlhbGl6YXRpb25IZWxwZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJT
ZXJpYWxpemF0aW9uSGVscGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlZmVycmVkIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RGVmZXJyZWQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRW52aXJvbm1lbnRUZXh0dXJlVG9v
bHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJFbnZpcm9ubWVudFRleHR1cmVUb29scyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJN
ZXNoRXhwbG9kZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJNZXNoRXhwbG9kZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmls
ZXNJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkZpbGVzSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3ViZU1hcFRv
U3BoZXJpY2FsUG9seW5vbWlhbFRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbFRv
b2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktocm9ub3NUZXh0dXJlQ29udGFpbmVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
S2hyb25vc1RleHR1cmVDb250YWluZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRXZlbnRT
dGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkV2ZW50U3RhdGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT2JzZXJ2ZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJP
YnNlcnZlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNdWx0aU9ic2VydmVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTXVsdGlP
YnNlcnZlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPYnNlcnZhYmxlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJs
ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQZXJmb3JtYW5jZU1vbml0b3IiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQZXJmb3Jt
YW5jZU1vbml0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUm9sbGluZ0F2ZXJhZ2UiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJS
b2xsaW5nQXZlcmFnZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQcm9taXNlUG9seWZpbGwi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQcm9taXNlUG9seWZpbGwiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVPcHRpbWl6
YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJTY2VuZU9wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUZXh0
dXJlT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVGV4dHVyZU9wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJIYXJkd2FyZVNjYWxpbmdPcHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJIYXJkd2FyZVNjYWxpbmdPcHRp
bWl6YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hhZG93c09wdGltaXphdGlvbiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlNoYWRvd3NPcHRpbWl6YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nl
c3Nlc09wdGltaXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlBvc3RQcm9jZXNzZXNPcHRpbWl6YXRpb24iXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTGVuc0ZsYXJlc09wdGltaXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxlbnNGbGFyZXNPcHRpbWl6
YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3VzdG9tT3B0aW1pemF0aW9uIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ3Vz
dG9tT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhcnRpY2xlc09wdGlt
aXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlBhcnRpY2xlc09wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJSZW5kZXJUYXJnZXRzT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUmVuZGVyVGFyZ2V0c09wdGltaXphdGlvbiJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJNZXJnZU1lc2hlc09wdGltaXphdGlvbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lcmdl
TWVzaGVzT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lT3B0aW1p
emVyT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlNjZW5lT3B0aW1pemVyT3B0aW9ucyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTY2VuZU9wdGltaXplciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lT3B0aW1pemVyIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlNjZW5lU2VyaWFsaXplciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lU2VyaWFsaXplciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTbWFydEFycmF5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siU21hcnRBcnJheSJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTbWFydEFycmF5Tm9EdXBsaWNhdGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTbWFydEFycmF5Tm9EdXBsaWNhdGUiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU3RyaW5nRGljdGlvbmFyeSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlN0cmluZ0RpY3Rpb25hcnki
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGFncyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRhZ3MiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVGV4dHVyZVRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVGV4dHVyZVRvb2xzIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlRHQVRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVEdBVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG9v
bHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJUb29scyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjbGFzc05hbWUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJjbGFzc05h
bWUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXN5bmNMb29wIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXN5bmNMb29wIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlZpZGVvUmVjb3JkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWaWRlb1JlY29yZGVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkpveXN0aWNrQXhpcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkpveXN0aWNrQXhpcyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJWaXJ0dWFsSm95c3RpY2siLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWaXJ0dWFsSm95c3RpY2siXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV29ya2VyUG9vbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldvcmtlclBvb2wiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTG9nZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTG9nZ2VyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIl9UeXBlU3RvcmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfVHlwZVN0b3JlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZp
bGVzSW5wdXRTdG9yZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkZpbGVzSW5wdXRTdG9yZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJEZWVwQ29waWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siRGVlcENvcGllciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaXZv
dFRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siUGl2b3RUb29scyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQcmVjaXNpb25E
YXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siUHJlY2lzaW9uRGF0ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY3JlZW5zaG90
VG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJTY3JlZW5zaG90VG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViUmVx
dWVzdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIldlYlJlcXVlc3QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zcGVjdGFibGVU
eXBlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siSW5zcGVjdGFibGVUeXBlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJSREZUZXh0
dXJlVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJCUkRGVGV4dHVyZVRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJH
QkRUZXh0dXJlVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJSR0JEVGV4dHVyZVRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkNvbG9yR3JhZGllbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJDb2xvckdyYWRpZW50Il07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkNvbG9yM0dyYWRpZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siQ29sb3IzR3JhZGllbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRmFjdG9yR3JhZGllbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJGYWN0b3JHcmFkaWVudCJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJHcmFkaWVudEhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkdyYWRpZW50SGVscGVyIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlBlcmZDb3VudGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGVyZkNvdW50ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiUmV0cnlTdHJhdGVneSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlJldHJ5U3RyYXRlZ3kiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTG9hZEZpbGVFcnJvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkxvYWRGaWxlRXJyb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiQXV0b1JvdGF0aW9uQmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBdXRvUm90YXRpb25CZWhhdmlvciJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJCb3VuY2luZ0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQm91bmNpbmdCZWhhdmlvciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmFtaW5nQmVoYXZpb3IiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJGcmFtaW5nQmVoYXZp
b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXR0YWNoVG9Cb3hCZWhhdmlvciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkF0dGFj
aFRvQm94QmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmFkZUluT3V0QmVoYXZp
b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJGYWRlSW5PdXRCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNdWx0aVBv
aW50ZXJTY2FsZUJlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvciJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQb2ludGVyRHJhZ0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckRyYWdCZWhhdmlv
ciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaXhEb2ZEcmFnQmVoYXZpb3IiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTaXhEb2ZE
cmFnQmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhR2Ft
ZXBhZElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0Il07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJjUm90YXRlQ2Ft
ZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRl
Q2FtZXJhTW91c2VXaGVlbElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0Il07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJB
cmNSb3RhdGVDYW1lcmFQb2ludGVyc0lucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFy
Y1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3JpZW50YXRpb25JbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFyY1JvdGF0ZUNhbWVyYVZS
RGV2aWNlT3JpZW50YXRpb25JbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGbHlDYW1l
cmFLZXlib2FyZElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJGbHlDYW1lcmFNb3VzZUlucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRmx5Q2FtZXJhTW91c2VJbnB1dCJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZv
bGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZv
bGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZvbGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRm9s
bG93Q2FtZXJhUG9pbnRlcnNJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVlQ2Ft
ZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklu
cHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmFHYW1lcGFkSW5wdXQiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJG
cmVlQ2FtZXJhR2FtZXBhZElucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1l
cmFLZXlib2FyZE1vdmVJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJGcmVlQ2FtZXJhTW91c2VJbnB1dCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZyZWVDYW1lcmFNb3Vz
ZUlucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmFUb3VjaElucHV0Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RnJlZUNhbWVyYVRvdWNoSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVy
YVZpcnR1YWxKb3lzdGlja0lucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0Il07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuYWdseXBoQXJjUm90YXRlQ2FtZXJhIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQW5hZ2x5
cGhBcmNSb3RhdGVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5hZ2x5cGhGcmVl
Q2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQW5hZ2x5cGhGcmVlQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFu
YWdseXBoR2FtZXBhZENhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkFuYWdseXBoR2FtZXBhZENhbWVyYSJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJBbmFnbHlwaFVuaXZlcnNhbENhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFuYWdseXBoVW5pdmVyc2Fs
Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Njb3BpY0FyY1JvdGF0ZUNh
bWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlN0ZXJlb3Njb3BpY0FyY1JvdGF0ZUNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTdGVyZW9zY29waWNGcmVlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3RlcmVvc2NvcGljRnJlZUNhbWVyYSJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3RlcmVv
c2NvcGljR2FtZXBhZENhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGVyZW9zY29w
aWNVbml2ZXJzYWxDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJTdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiVlJDYW1lcmFNZXRyaWNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVlJDYW1lcmFNZXRyaWNzIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGV2aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmEi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVlJEZXZpY2VPcmllbnRhdGlv
bkZyZWVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVlJEZXZpY2VPcmllbnRhdGlv
bkdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWUkRldmljZU9yaWVudGF0aW9uR2FtZXBhZENhbWVyYSJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJPbkFmdGVyRW50ZXJpbmdWUk9ic2VydmFibGVFdmVudCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk9u
QWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJsZUV2ZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlZSRXhwZXJpZW5jZUhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZSRXhwZXJpZW5jZUhlbHBlciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJXZWJWUkZyZWVDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXZWJWUkZyZWVDYW1lcmEiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiV2ViWFJDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXZWJYUkNhbWVyYSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJXZWJYUkVudGVyRXhpdFVJQnV0dG9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siV2ViWFJFbnRlckV4aXRVSUJ1dHRv
biJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkVudGVyRXhpdFVJT3B0aW9ucyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldl
YlhSRW50ZXJFeGl0VUlPcHRpb25zIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSRW50
ZXJFeGl0VUkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJXZWJYUkVudGVyRXhpdFVJIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldl
YlhSU3RhdGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJXZWJYUlN0YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSRXhw
ZXJpZW5jZUhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIldlYlhSRXhwZXJpZW5jZUhlbHBlciJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJXZWJYUklucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siV2ViWFJJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJXZWJYUkNvbnRyb2xsZXJUZWxlcG9ydGF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siV2ViWFJDb250cm9sbGVyVGVsZXBvcnRh
dGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkNvbnRyb2xsZXJQb2ludGVyU2Vs
ZWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siV2ViWFJDb250cm9sbGVyUG9pbnRlclNlbGVjdGlvbiJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJXZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldlYlhSQ29udHJvbGxlck1v
ZGVsTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSQ29udHJvbGxlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldl
YlhSQ29udHJvbGxlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUk1hbmFnZWRPdXRw
dXRDYW52YXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJXZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiV2ViWFJTZXNzaW9uTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldlYlhSU2Vzc2lvbk1hbmFnZXIiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiT2N0cmVlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2N0cmVlIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk9jdHJlZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siT2N0cmVlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
T2N0cmVlU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJPY3RyZWVTY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJfT2NjbHVzaW9uRGF0YVN0b3JhZ2UiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfT2NjbHVzaW9uRGF0YVN0b3Jh
Z2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX2ZvcmNlVHJhbnNmb3JtRmVlZGJhY2tUb0J1
bmRsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9mb3JjZVRyYW5zZm9ybUZlZWRiYWNrVG9CdW5kbGUiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiRGF5ZHJlYW1Db250cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRGF5ZHJlYW1Db250cm9sbGVyIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkdlYXJWUkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHZWFyVlJDb250cm9sbGVyIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdlbmVyaWNDb250cm9sbGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siR2VuZXJpY0NvbnRy
b2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT2N1bHVzVG91Y2hDb250cm9sbGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
T2N1bHVzVG91Y2hDb250cm9sbGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc2VFbmFi
bGVkQ29udHJvbGxlclR5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXJUeXBlIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvc2VFbmFibGVk
Q29udHJvbGxlckhlbHBlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NlRW5hYmxlZENv
bnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiVml2ZUNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWaXZlQ29udHJvbGxlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJXZWJWUkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXZWJWUkNvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiV2luZG93c01vdGlvbkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXaW5kb3dzTW90aW9uQ29udHJvbGxl
ciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaGFkb3dHZW5lcmF0b3IiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTaGFkb3dHZW5l
cmF0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hhZG93R2VuZXJhdG9yU2NlbmVDb21w
b25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJTaGFkb3dHZW5lcmF0b3JTY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJfQmFieWxvbkxvYWRlclJlZ2lzdGVyZWQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfQmFieWxvbkxvYWRlclJlZ2lzdGVy
ZWQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFja2dyb3VuZE1hdGVyaWFsIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFja2dy
b3VuZE1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUk1hdGVyaWFsRGVmaW5l
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlBCUk1hdGVyaWFsRGVmaW5lcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQQlJCYXNl
TWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJQQlJCYXNlTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUEJS
QmFzZVNpbXBsZU1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siUEJSQmFzZVNpbXBsZU1hdGVyaWFsIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlBCUk1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUEJSTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiUEJSTWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBCUk1ldGFsbGljUm91Z2hu
ZXNzTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUEJSU3BlY3VsYXJHbG9zc2lu
ZXNzTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJDb2xvckdyYWRpbmdUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29sb3JHcmFkaW5nVGV4dHVyZSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSYXdDdWJlVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJhd0N1YmVUZXh0dXJl
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJhd1RleHR1cmUzRCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJhd1RleHR1cmUzRCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZyYWN0aW9uVGV4dHVyZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJlZnJhY3Rpb25U
ZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpZGVvVGV4dHVyZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZpZGVvVGV4
dHVyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJIdG1sRWxlbWVudFRleHR1cmUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJIdG1s
RWxlbWVudFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJOb2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5v
ZGVNYXRlcmlhbENvbm5lY3Rpb25Qb2ludCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk5vZGVNYXRlcmlhbENvbm5lY3Rpb25Qb2ludCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWxCbG9jayIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk5vZGVNYXRlcmlh
bEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbERlZmluZXMiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJO
b2RlTWF0ZXJpYWxEZWZpbmVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlh
bCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIk5vZGVNYXRlcmlhbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWxT
eXN0ZW1WYWx1ZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiT3JpZW50YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJPcmllbnRhdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJCZXppZXJDdXJ2ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkJlemllckN1cnZlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkFuZ2xlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQW5nbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjMiIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFyYzIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGF0aDIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQYXRoMiJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQYXRoM0QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJQYXRoM0QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3VydmUz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQ3VydmUzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc2l0aW9uTm9ybWFsVmVydGV4
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUG9zaXRpb25Ob3JtYWxWZXJ0ZXgiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zaXRp
b25Ob3JtYWxUZXh0dXJlVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9zaXRpb25Ob3JtYWxUZXh0dXJlVmVydGV4Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkRyYWNvQ29tcHJlc3Npb24iLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEcmFjb0NvbXByZXNzaW9u
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRpbGVkQm94QnVpbGRlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRpbGVkQm94QnVp
bGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEaXNjQnVpbGRlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRpc2NCdWlsZGVy
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJpYmJvbkJ1aWxkZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJSaWJib25CdWlsZGVy
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhlbWlzcGhlcmVCdWlsZGVyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSGVtaXNwaGVy
ZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG9ydXNLbm90QnVpbGRlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRv
cnVzS25vdEJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWdvbkJ1aWxkZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQb2x5Z29uQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaGFwZUJ1aWxkZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJTaGFwZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGF0aGVCdWlsZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
TGF0aGVCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRpbGVkUGxhbmVCdWlsZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVGlsZWRQbGFuZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHViZUJ1aWxk
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJUdWJlQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2x5aGVkcm9uQnVp
bGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlBvbHloZWRyb25CdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkljb1Nw
aGVyZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJJY29TcGhlcmVCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkRlY2FsQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkRlY2FsQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJS
ZWNhc3RKU1BsdWdpbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlJlY2FzdEpTUGx1Z2luIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlJlY2FzdEpTQ3Jvd2QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJSZWNhc3RKU0Nyb3dkIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkJveFBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkJveFBhcnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJDb25lUGFydGljbGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29uZVBhcnRpY2xlRW1pdHRlciJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJDeWxpbmRlclBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkN5bGluZGVy
UGFydGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN5bGluZGVyRGlyZWN0
ZWRQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkhlbWlzcGhlcmljUGFydGljbGVFbWl0dGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSGVtaXNw
aGVyaWNQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRQYXJ0
aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJQb2ludFBhcnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTcGhl
cmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDYW5u
b25KU1BsdWdpbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkNhbm5vbkpTUGx1Z2luIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFt
bW9KU1BsdWdpbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkFtbW9KU1BsdWdpbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPaW1v
SlNQbHVnaW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJPaW1vSlNQbHVnaW4iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFBy
b2Nlc3NSZW5kZXJFZmZlY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9zdFByb2Nlc3NSZW5k
ZXJQaXBlbGluZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3N0UHJvY2Vzc1JlbmRlclBp
cGVsaW5lTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVD
b21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhEUlRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSERSVG9vbHMiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUGFub3JhbWFUb0N1YmVNYXBUb29scyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBhbm9yYW1hVG9DdWJl
TWFwVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0REU1RleHR1cmVMb2FkZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
RERTVGV4dHVyZUxvYWRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfRU5WVGV4dHVyZUxv
YWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9FTlZUZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9LVFhU
ZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX0tUWFRleHR1cmVMb2FkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiX1RHQVRleHR1cmVMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfVEdBVGV4dHVyZUxvYWRlciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJfQmFzaXNUZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX0Jhc2lzVGV4dHVyZUxvYWRlciJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkN1c3RvbVBy
b2NlZHVyYWxUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vaXNlUHJvY2VkdXJh
bFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJOb2lzZVByb2NlZHVyYWxUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlByb2NlZHVyYWxUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siUHJvY2VkdXJhbFRleHR1cmUiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiUHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlByb2NlZHVyYWxU
ZXh0dXJlU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTXVsdGlwbHlC
bG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIk11bHRpcGx5QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWRkQmxvY2si
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJBZGRCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY2FsZUJsb2NrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGVC
bG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDbGFtcEJsb2NrIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ2xhbXBCbG9jayJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJDcm9zc0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ3Jvc3NCbG9jayJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJEb3RCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRvdEJsb2NrIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlRyYW5zZm9ybUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVHJhbnNmb3JtQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiUmVtYXBCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJlbWFwQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTm9ybWFsaXplQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJOb3JtYWxpemVCbG9jayJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUcmlnb25vbWV0cnlCbG9ja09w
ZXJhdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJpZ29ub21ldHJ5QmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJU
cmlnb25vbWV0cnlCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvck1lcmdlckJs
b2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siQ29sb3JNZXJnZXJCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWZWN0b3JN
ZXJnZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3Rvck1lcmdlckJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkNvbG9yU3BsaXR0ZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbG9yU3BsaXR0ZXJCbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJWZWN0b3JTcGxpdHRlckJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yU3BsaXR0ZXJCbG9jayJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJMZXJwQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMZXJwQmxvY2siXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRGl2aWRlQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEaXZpZGVCbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTdWJ0cmFjdEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3VidHJhY3RCbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTdGVwQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdGVwQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiT3Bwb3NpdGVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIk9wcG9zaXRlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiVmlld0RpcmVjdGlvbkJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmlld0RpcmVjdGlvbkJsb2NrIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkZyZXNuZWxCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZyZXNuZWxCbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNYXhCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIk1heEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
Ik1pbkJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siTWluQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVy
aWFsT3B0aW1pemVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsT3B0aW1pemVyIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkRlZmF1bHRSZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRlZmF1bHRSZW5kZXJpbmdQaXBlbGlu
ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMZW5z
UmVuZGVyaW5nUGlwZWxpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU1NBTzJSZW5kZXJp
bmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlNTQU8yUmVuZGVyaW5nUGlwZWxpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiU1NBT1JlbmRlcmluZ1BpcGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU1NBT1JlbmRlcmluZ1BpcGVsaW5lIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdGFuZGFy
ZFJlbmRlcmluZ1BpcGVsaW5lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlcnRleE91dHB1
dEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVmVydGV4T3V0cHV0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm9u
ZXNCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkJvbmVzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zdGFuY2Vz
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJJbnN0YW5jZXNCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNb3JwaFRh
cmdldHNCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIk1vcnBoVGFyZ2V0c0Jsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkxpZ2h0SW5mb3JtYXRpb25CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxpZ2h0SW5mb3JtYXRpb25CbG9jayJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJGcmFnbWVudE91dHB1dEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRnJhZ21lbnRPdXRwdXRCbG9j
ayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbHBoYVRlc3RCbG9jayIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFscGhhVGVzdEJs
b2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkltYWdlUHJvY2Vzc2luZ0Jsb2NrIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSW1h
Z2VQcm9jZXNzaW5nQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGVydHVyYk5vcm1h
bEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siUGVydHVyYk5vcm1hbEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZv
Z0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRm9nQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGlnaHRCbG9jayIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkxpZ2h0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGV4dHVyZUJsb2NrIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVGV4
dHVyZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlZmxlY3Rpb25UZXh0dXJlQmxv
Y2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJSZWZsZWN0aW9uVGV4dHVyZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIklu
cHV0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJJbnB1dEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGVk
SW5wdXRCbG9ja1R5cGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMiXTsgfSk7CisKKworCisv
KioKKyAqIExlZ2FjeSBzdXBwb3J0LCBkZWZpbmluZyB3aW5kb3cuQkFCWUxPTiAoZ2xvYmFsIHZh
cmlhYmxlKS4KKyAqCisgKiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIFVNRCBtb2R1
bGUuCisgKiBUaGUgZW50cnkgcG9pbnQgZm9yIGEgZnV0dXJlIEVTTSBwYWNrYWdlIHNob3VsZCBi
ZSBpbmRleC50cworICovCit2YXIgZ2xvYmFsT2JqZWN0ID0gKHR5cGVvZiBnbG9iYWwgIT09ICd1
bmRlZmluZWQnKSA/IGdsb2JhbCA6ICgodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpID8g
d2luZG93IDogdW5kZWZpbmVkKTsKK2lmICh0eXBlb2YgZ2xvYmFsT2JqZWN0ICE9PSAidW5kZWZp
bmVkIikgeworICAgIGdsb2JhbE9iamVjdC5CQUJZTE9OID0gQkFCWUxPTjsKKyAgICBnbG9iYWxP
YmplY3QuQkFCWUxPTiA9IGdsb2JhbE9iamVjdC5CQUJZTE9OIHx8IHt9OworICAgIHZhciBCQUJZ
TE9OID0gZ2xvYmFsT2JqZWN0LkJBQllMT047CisgICAgQkFCWUxPTi5EZWJ1ZyA9IEJBQllMT04u
RGVidWcgfHwge307CisgICAgdmFyIGtleXMgPSBbXTsKKyAgICBmb3IgKHZhciBrZXkgaW4gX0Rl
YnVnX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pIHsKKyAgICAgICAgQkFCWUxP
Ti5EZWJ1Z1trZXldID0gX0RlYnVnX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
a2V5XTsKKyAgICAgICAga2V5cy5wdXNoKGtleSk7CisgICAgfQorICAgIGZvciAodmFyIGtleSBp
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXykgeworICAgICAgICBCQUJZTE9O
W2tleV0gPSBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1trZXldOworICAgIH0K
K30KKwordmFyIERlYnVnID0geworICAgIEF4ZXNWaWV3ZXI6IF9EZWJ1Z19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBeGVzVmlld2VyIl0sCisgICAgQm9uZUF4ZXNWaWV3ZXI6
IF9EZWJ1Z19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJCb25lQXhlc1ZpZXdl
ciJdLAorICAgIFBoeXNpY3NWaWV3ZXI6IF9EZWJ1Z19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJQaHlzaWNzVmlld2VyIl0sCisgICAgU2tlbGV0b25WaWV3ZXI6IF9EZWJ1Z19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTa2VsZXRvblZpZXdlciJdLAorfTsK
KworLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKHRoaXMsIF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vLi4vLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMg
Ki8gIi4uL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIikpKQorCisvKioq
LyB9KSwKKworLyoqKi8gIi4vTGVuc0ZsYXJlcy9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTGVuc0ZsYXJlcy9pbmRleC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBM
ZW5zRmxhcmUsIExlbnNGbGFyZVN5c3RlbSwgTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQg
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sZW5zRmxhcmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
bGVuc0ZsYXJlICovICIuL0xlbnNGbGFyZXMvbGVuc0ZsYXJlLnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkxlbnNGbGFyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xlbnNGbGFyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJMZW5zRmxhcmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbGVuc0ZsYXJlU3lzdGVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xlbnNGbGFyZVN5c3RlbSAqLyAiLi9MZW5zRmxhcmVz
L2xlbnNGbGFyZVN5c3RlbS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zRmxhcmVTeXN0ZW0i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9sZW5zRmxhcmVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTGVuc0ZsYXJlU3lzdGVtIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2xlbnNGbGFyZVN5c3RlbVNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xlbnNGbGFyZVN5c3RlbVNjZW5l
Q29tcG9uZW50ICovICIuL0xlbnNGbGFyZXMvbGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9sZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudCJdOyB9
KTsKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9MZW5zRmxhcmVzL2xlbnNGbGFy
ZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L0xlbnNGbGFyZXMvbGVuc0ZsYXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBMZW5zRmxhcmUgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVuc0ZsYXJlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBMZW5zRmxhcmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFs
cy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2Nv
bnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworCisKKworLyoqCisgKiBUaGlz
IHJlcHJlc2VudHMgb25lIG9mIHRoZSBsZW5zIGVmZmVjdCBpbiBhIGBsZW5zRmxhcmVTeXN0ZW1g
LgorICogSXQgY29udHJvbHMgb25lIG9mIHRoZSBpbmRpdml1YWwgdGV4dHVyZSB1c2VkIGluIHRo
ZSBlZmZlY3QuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3Rv
X3VzZV9sZW5zX2ZsYXJlcworICovCit2YXIgTGVuc0ZsYXJlID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBMZW5zIEZsYXJl
LgorICAgICAqIFRoaXMgcmVwcmVzZW50cyBvbmUgb2YgdGhlIGxlbnMgZWZmZWN0IGluIGEgYGxl
bnNGbGFyZVN5c3RlbWAuCisgICAgICogSXQgY29udHJvbHMgb25lIG9mIHRoZSBpbmRpdml1YWwg
dGV4dHVyZSB1c2VkIGluIHRoZSBlZmZlY3QuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnls
b25qcy5jb20vaG93X3RvL2hvd190b191c2VfbGVuc19mbGFyZXMKKyAgICAgKiBAcGFyYW0gc2l6
ZSBEZWZpbmUgdGhlIHNpemUgb2YgdGhlIGxlbnMgZmxhcmUgaW4gdGhlIHN5c3RlbSAoYSBmbG9h
dGluZyB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEpCisgICAgICogQHBhcmFtIHBvc2l0aW9uIERlZmlu
ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGxlbnMgZmxhcmUgaW4gdGhlIHN5c3RlbS4gKGEgZmxvYXRp
bmcgdmFsdWUgYmV0d2VlbiAtMSBhbmQgMSkuIEEgdmFsdWUgb2YgMCBpcyBsb2NhdGVkIG9uIHRo
ZSBlbWl0dGVyLiBBIHZhbHVlIGdyZWF0ZXIgdGhhbiAwIGlzIGJleW9uZCB0aGUgZW1pdHRlciBh
bmQgYSB2YWx1ZSBsZXNzZXIgdGhhbiAwIGlzIGJlaGluZC4KKyAgICAgKiBAcGFyYW0gY29sb3Ig
RGVmaW5lIHRoZSBsZW5zIGNvbG9yCisgICAgICogQHBhcmFtIGltZ1VybCBEZWZpbmUgdGhlIGxl
bnMgdGV4dHVyZSB1cmwKKyAgICAgKiBAcGFyYW0gc3lzdGVtIERlZmluZSB0aGUgYGxlbnNGbGFy
ZVN5c3RlbWAgdGhpcyBmbGFyZSBpcyBwYXJ0IG9mCisgICAgICovCisgICAgZnVuY3Rpb24gTGVu
c0ZsYXJlKAorICAgIC8qKgorICAgICAqIERlZmluZSB0aGUgc2l6ZSBvZiB0aGUgbGVucyBmbGFy
ZSBpbiB0aGUgc3lzdGVtIChhIGZsb2F0aW5nIHZhbHVlIGJldHdlZW4gMCBhbmQgMSkKKyAgICAg
Ki8KKyAgICBzaXplLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmUgdGhlIHBvc2l0aW9uIG9mIHRo
ZSBsZW5zIGZsYXJlIGluIHRoZSBzeXN0ZW0uIChhIGZsb2F0aW5nIHZhbHVlIGJldHdlZW4gLTEg
YW5kIDEpLiBBIHZhbHVlIG9mIDAgaXMgbG9jYXRlZCBvbiB0aGUgZW1pdHRlci4gQSB2YWx1ZSBn
cmVhdGVyIHRoYW4gMCBpcyBiZXlvbmQgdGhlIGVtaXR0ZXIgYW5kIGEgdmFsdWUgbGVzc2VyIHRo
YW4gMCBpcyBiZWhpbmQuCisgICAgICovCisgICAgcG9zaXRpb24sIGNvbG9yLCBpbWdVcmwsIHN5
c3RlbSkgeworICAgICAgICB0aGlzLnNpemUgPSBzaXplOworICAgICAgICB0aGlzLnBvc2l0aW9u
ID0gcG9zaXRpb247CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGFscGhhIG1v
ZGUgdG8gcmVuZGVyIHRoaXMgcGFydGljdWxhciBsZW5zLgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5hbHBoYU1vZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siQ29uc3RhbnRzIl0uQUxQSEFfT05FT05FOworICAgICAgICB0aGlzLmNvbG9yID0g
Y29sb3IgfHwgbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkNvbG9yMyJdKDEsIDEsIDEpOworICAgICAgICB0aGlzLnRleHR1cmUgPSBpbWdVcmwgPyBu
ZXcgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlRleHR1cmUiXShpbWdVcmwsIHN5c3RlbS5nZXRTY2VuZSgpLCB0cnVlKSA6IG51bGw7Cisg
ICAgICAgIHRoaXMuX3N5c3RlbSA9IHN5c3RlbTsKKyAgICAgICAgc3lzdGVtLmxlbnNGbGFyZXMu
cHVzaCh0aGlzKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBMZW5zIEZs
YXJlLgorICAgICAqIFRoaXMgcmVwcmVzZW50cyBvbmUgb2YgdGhlIGxlbnMgZWZmZWN0IGluIGEg
YGxlbnNGbGFyZVN5c3RlbWAuCisgICAgICogSXQgY29udHJvbHMgb25lIG9mIHRoZSBpbmRpdml1
YWwgdGV4dHVyZSB1c2VkIGluIHRoZSBlZmZlY3QuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfbGVuc19mbGFyZXMKKyAgICAgKiBAcGFyYW0g
c2l6ZSBEZWZpbmUgdGhlIHNpemUgb2YgdGhlIGxlbnMgZmxhcmUgKGEgZmxvYXRpbmcgdmFsdWUg
YmV0d2VlbiAwIGFuZCAxKQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBEZWZpbmUgdGhlIHBvc2l0
aW9uIG9mIHRoZSBsZW5zIGZsYXJlIGluIHRoZSBzeXN0ZW0uIChhIGZsb2F0aW5nIHZhbHVlIGJl
dHdlZW4gLTEgYW5kIDEpLiBBIHZhbHVlIG9mIDAgaXMgbG9jYXRlZCBvbiB0aGUgZW1pdHRlci4g
QSB2YWx1ZSBncmVhdGVyIHRoYW4gMCBpcyBiZXlvbmQgdGhlIGVtaXR0ZXIgYW5kIGEgdmFsdWUg
bGVzc2VyIHRoYW4gMCBpcyBiZWhpbmQuCisgICAgICogQHBhcmFtIGNvbG9yIERlZmluZSB0aGUg
bGVucyBjb2xvcgorICAgICAqIEBwYXJhbSBpbWdVcmwgRGVmaW5lIHRoZSBsZW5zIHRleHR1cmUg
dXJsCisgICAgICogQHBhcmFtIHN5c3RlbSBEZWZpbmUgdGhlIGBsZW5zRmxhcmVTeXN0ZW1gIHRo
aXMgZmxhcmUgaXMgcGFydCBvZgorICAgICAqIEByZXR1cm5zIFRoZSBuZXdseSBjcmVhdGVkIExl
bnMgRmxhcmUKKyAgICAgKi8KKyAgICBMZW5zRmxhcmUuQWRkRmxhcmUgPSBmdW5jdGlvbiAoc2l6
ZSwgcG9zaXRpb24sIGNvbG9yLCBpbWdVcmwsIHN5c3RlbSkgeworICAgICAgICByZXR1cm4gbmV3
IExlbnNGbGFyZShzaXplLCBwb3NpdGlvbiwgY29sb3IsIGltZ1VybCwgc3lzdGVtKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIERpc3Bvc2UgYW5kIHJlbGVhc2UgdGhlIGxlbnMgZmxhcmUgd2l0
aCBpdHMgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgICAgICovCisgICAgTGVuc0ZsYXJlLnByb3Rv
dHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy50ZXh0dXJlKSB7
CisgICAgICAgICAgICB0aGlzLnRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAg
IC8vIFJlbW92ZSBmcm9tIHNjZW5lCisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3N5c3RlbS5s
ZW5zRmxhcmVzLmluZGV4T2YodGhpcyk7CisgICAgICAgIHRoaXMuX3N5c3RlbS5sZW5zRmxhcmVz
LnNwbGljZShpbmRleCwgMSk7CisgICAgfTsKKyAgICByZXR1cm4gTGVuc0ZsYXJlOworfSgpKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9MZW5zRmxhcmVzL2xlbnNGbGFyZVN5c3RlbS50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL0xlbnNGbGFyZXMvbGVuc0ZsYXJlU3lzdGVtLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBMZW5zRmxh
cmVTeXN0ZW0gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVuc0ZsYXJl
U3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBMZW5zRmxhcmVTeXN0ZW07IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3Rvb2xzICovICIuL01pc2MvdG9v
bHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnNjYWxhciAqLyAi
Li9NYXRocy9tYXRoLnNjYWxhci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5l
U3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVz
aGVzL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9DdWxsaW5nL3JheSAqLyAiLi9DdWxsaW5nL3JheS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9t
YXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbGVuc0ZsYXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2xlbnNGbGFyZSAqLyAiLi9MZW5zRmxhcmVzL2xlbnNGbGFyZS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5l
cy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfU2hhZGVyc19sZW5zRmxhcmVfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvbGVuc0ZsYXJl
LmZyYWdtZW50ICovICIuL1NoYWRlcnMvbGVuc0ZsYXJlLmZyYWdtZW50LnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfbGVuc0ZsYXJlX3ZlcnRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvbGVu
c0ZsYXJlLnZlcnRleCAqLyAiLi9TaGFkZXJzL2xlbnNGbGFyZS52ZXJ0ZXgudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGV2VG9vbHMgKi8gIi4v
TWlzYy9kZXZUb29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisK
KworCisKKworCisKKworCisKKworCisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIGEgTGVucyBG
bGFyZSBTeXN0ZW0gb3IgdGhlIHNoaW55IGVmZmVjdCBjcmVhdGVkIGJ5IHRoZSBsaWdodCByZWZs
ZWN0aW9uIG9uIHRoZSAgY2FtZXJhIGxlbnNlcy4KKyAqIEl0IGlzIHVzdWFsbHkgY29tcG9zZWQg
b2Ygc2V2ZXJhbCBgbGVuc0ZsYXJlYC4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9ob3dfdG9fdXNlX2xlbnNfZmxhcmVzCisgKi8KK3ZhciBMZW5zRmxhcmVTeXN0ZW0g
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlh
dGVzIGEgbGVucyBmbGFyZSBzeXN0ZW0uCisgICAgICogVGhpcyByZXByZXNlbnRzIGEgTGVucyBG
bGFyZSBTeXN0ZW0gb3IgdGhlIHNoaW55IGVmZmVjdCBjcmVhdGVkIGJ5IHRoZSBsaWdodCByZWZs
ZWN0aW9uIG9uIHRoZSAgY2FtZXJhIGxlbnNlcy4KKyAgICAgKiBJdCBpcyB1c3VhbGx5IGNvbXBv
c2VkIG9mIHNldmVyYWwgYGxlbnNGbGFyZWAuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnls
b25qcy5jb20vaG93X3RvL2hvd190b191c2VfbGVuc19mbGFyZXMKKyAgICAgKiBAcGFyYW0gbmFt
ZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGxlbnMgZmxhcmUgc3lzdGVtIGluIHRoZSBzY2VuZQor
ICAgICAqIEBwYXJhbSBlbWl0dGVyIERlZmluZSB0aGUgc291cmNlICh0aGUgZW1pdHRlcikgb2Yg
dGhlIGxlbnMgZmxhcmVzIChpdCBjYW4gYmUgYSBjYW1lcmEsIGEgbGlnaHQgb3IgYSBtZXNoKS4K
KyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgbGVucyBmbGFyZSBzeXN0
ZW0gYmVsb25ncyB0bworICAgICAqLworICAgIGZ1bmN0aW9uIExlbnNGbGFyZVN5c3RlbSgKKyAg
ICAvKioKKyAgICAgKiBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGxlbnMgZmxhcmUgc3lzdGVtCisg
ICAgICovCisgICAgbmFtZSwgZW1pdHRlciwgc2NlbmUpIHsKKyAgICAgICAgdGhpcy5uYW1lID0g
bmFtZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExpc3Qgb2YgbGVucyBmbGFyZXMgdXNlZCBp
biB0aGlzIHN5c3RlbS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubGVuc0ZsYXJlcyA9IG5l
dyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGEgbGltaXQgZnJvbSB0
aGUgYm9yZGVyIHRoZSBsZW5zIGZsYXJlIGNhbiBiZSB2aXNpYmxlLgorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5ib3JkZXJMaW1pdCA9IDMwMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZSBhIHZpZXdwb3J0IGJvcmRlciB3ZSBkbyBub3Qgd2FudCB0byBzZWUgdGhlIGxlbnMgZmxh
cmUgaW4uCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZpZXdwb3J0Qm9yZGVyID0gMDsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFJlc3RyaWN0cyB0aGUgcmVuZGVyaW5nIG9mIHRoZSBlZmZl
Y3QgdG8gb25seSB0aGUgY2FtZXJhIHJlbmRlcmluZyB0aGlzIGxheWVyIG1hc2suCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmxheWVyTWFzayA9IDB4MEZGRkZGRkY7CisgICAgICAgIHRoaXMu
X3ZlcnRleEJ1ZmZlcnMgPSB7fTsKKyAgICAgICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTsKKyAg
ICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8fCBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7Cisg
ICAgICAgIExlbnNGbGFyZVN5c3RlbS5fU2NlbmVDb21wb25lbnRJbml0aWFsaXphdGlvbih0aGlz
Ll9zY2VuZSk7CisgICAgICAgIHRoaXMuX2VtaXR0ZXIgPSBlbWl0dGVyOworICAgICAgICB0aGlz
LmlkID0gbmFtZTsKKyAgICAgICAgc2NlbmUubGVuc0ZsYXJlU3lzdGVtcy5wdXNoKHRoaXMpOwor
ICAgICAgICB0aGlzLm1lc2hlc1NlbGVjdGlvblByZWRpY2F0ZSA9IGZ1bmN0aW9uIChtKSB7IHJl
dHVybiAoc2NlbmUuYWN0aXZlQ2FtZXJhICYmIG0ubWF0ZXJpYWwgJiYgbS5pc1Zpc2libGUgJiYg
bS5pc0VuYWJsZWQoKSAmJiBtLmlzQmxvY2tlciAmJiAoKG0ubGF5ZXJNYXNrICYgc2NlbmUuYWN0
aXZlQ2FtZXJhLmxheWVyTWFzaykgIT0gMCkpOyB9OworICAgICAgICB2YXIgZW5naW5lID0gc2Nl
bmUuZ2V0RW5naW5lKCk7CisgICAgICAgIC8vIFZCTworICAgICAgICB2YXIgdmVydGljZXMgPSBb
XTsKKyAgICAgICAgdmVydGljZXMucHVzaCgxLCAxKTsKKyAgICAgICAgdmVydGljZXMucHVzaCgt
MSwgMSk7CisgICAgICAgIHZlcnRpY2VzLnB1c2goLTEsIC0xKTsKKyAgICAgICAgdmVydGljZXMu
cHVzaCgxLCAtMSk7CisgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZlcnNbX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5k
XSA9IG5ldyBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0
ZXhCdWZmZXIiXShlbmdpbmUsIHZlcnRpY2VzLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIGZhbHNlLCBmYWxz
ZSwgMik7CisgICAgICAgIC8vIEluZGljZXMKKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAg
ICAgICAgaW5kaWNlcy5wdXNoKDApOworICAgICAgICBpbmRpY2VzLnB1c2goMSk7CisgICAgICAg
IGluZGljZXMucHVzaCgyKTsKKyAgICAgICAgaW5kaWNlcy5wdXNoKDApOworICAgICAgICBpbmRp
Y2VzLnB1c2goMik7CisgICAgICAgIGluZGljZXMucHVzaCgzKTsKKyAgICAgICAgdGhpcy5faW5k
ZXhCdWZmZXIgPSBlbmdpbmUuY3JlYXRlSW5kZXhCdWZmZXIoaW5kaWNlcyk7CisgICAgICAgIC8v
IEVmZmVjdHMKKyAgICAgICAgdGhpcy5fZWZmZWN0ID0gZW5naW5lLmNyZWF0ZUVmZmVjdCgibGVu
c0ZsYXJlIiwgW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZl
cnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0sIFsiY29sb3IiLCAidmlld3BvcnRNYXRyaXgiXSwg
WyJ0ZXh0dXJlU2FtcGxlciJdLCAiIik7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShMZW5zRmxhcmVTeXN0ZW0ucHJvdG90eXBlLCAiaXNFbmFibGVkIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogRGVmaW5lIGlmIHRoZSBsZW5zIGZsYXJlIHN5c3RlbSBpcyBlbmFibGVkLgor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5faXNFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faXNFbmFibGVkID0gdmFsdWU7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIC8qKgorICAgICAqIEdldCB0aGUgc2NlbmUgdGhlIGVmZmVjdHMgYmVsb25n
cyB0by4KKyAgICAgKiBAcmV0dXJucyB0aGUgc2NlbmUgaG9sZGluZyB0aGUgbGVucyBmbGFyZSBz
eXN0ZW0KKyAgICAgKi8KKyAgICBMZW5zRmxhcmVTeXN0ZW0ucHJvdG90eXBlLmdldFNjZW5lID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fc2NlbmU7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXQgdGhlIGVtaXR0ZXIgb2YgdGhlIGxlbnMgZmxhcmUgc3lzdGVtLgorICAg
ICAqIEl0IGRlZmluZXMgdGhlIHNvdXJjZSBvZiB0aGUgbGVucyBmbGFyZXMgKGl0IGNhbiBiZSBh
IGNhbWVyYSwgYSBsaWdodCBvciBhIG1lc2gpLgorICAgICAqIEByZXR1cm5zIHRoZSBlbWl0dGVy
IG9mIHRoZSBsZW5zIGZsYXJlIHN5c3RlbQorICAgICAqLworICAgIExlbnNGbGFyZVN5c3RlbS5w
cm90b3R5cGUuZ2V0RW1pdHRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2VtaXR0ZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGVtaXR0ZXIgb2YgdGhl
IGxlbnMgZmxhcmUgc3lzdGVtLgorICAgICAqIEl0IGRlZmluZXMgdGhlIHNvdXJjZSBvZiB0aGUg
bGVucyBmbGFyZXMgKGl0IGNhbiBiZSBhIGNhbWVyYSwgYSBsaWdodCBvciBhIG1lc2gpLgorICAg
ICAqIEBwYXJhbSBuZXdFbWl0dGVyIERlZmluZSB0aGUgbmV3IGVtaXR0ZXIgb2YgdGhlIHN5c3Rl
bQorICAgICAqLworICAgIExlbnNGbGFyZVN5c3RlbS5wcm90b3R5cGUuc2V0RW1pdHRlciA9IGZ1
bmN0aW9uIChuZXdFbWl0dGVyKSB7CisgICAgICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXdFbWl0dGVy
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBsZW5zIGZsYXJlIHN5c3RlbSBlbWl0
dGVyIHBvc2l0aW9uLgorICAgICAqIFRoZSBlbWl0dGVyIGRlZmluZXMgdGhlIHNvdXJjZSBvZiB0
aGUgbGVucyBmbGFyZXMgKGl0IGNhbiBiZSBhIGNhbWVyYSwgYSBsaWdodCBvciBhIG1lc2gpLgor
ICAgICAqIEByZXR1cm5zIHRoZSBwb3NpdGlvbgorICAgICAqLworICAgIExlbnNGbGFyZVN5c3Rl
bS5wcm90b3R5cGUuZ2V0RW1pdHRlclBvc2l0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fZW1pdHRlci5nZXRBYnNvbHV0ZVBvc2l0aW9uID8gdGhpcy5fZW1pdHRlci5n
ZXRBYnNvbHV0ZVBvc2l0aW9uKCkgOiB0aGlzLl9lbWl0dGVyLnBvc2l0aW9uOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIExlbnNGbGFyZVN5c3RlbS5wcm90
b3R5cGUuY29tcHV0ZUVmZmVjdGl2ZVBvc2l0aW9uID0gZnVuY3Rpb24gKGdsb2JhbFZpZXdwb3J0
KSB7CisgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0RW1pdHRlclBvc2l0aW9uKCk7Cisg
ICAgICAgIHBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlZlY3RvcjMiXS5Qcm9qZWN0KHBvc2l0aW9uLCBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uSWRlbnRpdHkoKSwgdGhpcy5f
c2NlbmUuZ2V0VHJhbnNmb3JtTWF0cml4KCksIGdsb2JhbFZpZXdwb3J0KTsKKyAgICAgICAgdGhp
cy5fcG9zaXRpb25YID0gcG9zaXRpb24ueDsKKyAgICAgICAgdGhpcy5fcG9zaXRpb25ZID0gcG9z
aXRpb24ueTsKKyAgICAgICAgcG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzKHRoaXMu
Z2V0RW1pdHRlclBvc2l0aW9uKCksIHRoaXMuX3NjZW5lLmdldFZpZXdNYXRyaXgoKSk7CisgICAg
ICAgIGlmICh0aGlzLnZpZXdwb3J0Qm9yZGVyID4gMCkgeworICAgICAgICAgICAgZ2xvYmFsVmll
d3BvcnQueCAtPSB0aGlzLnZpZXdwb3J0Qm9yZGVyOworICAgICAgICAgICAgZ2xvYmFsVmlld3Bv
cnQueSAtPSB0aGlzLnZpZXdwb3J0Qm9yZGVyOworICAgICAgICAgICAgZ2xvYmFsVmlld3BvcnQu
d2lkdGggKz0gdGhpcy52aWV3cG9ydEJvcmRlciAqIDI7CisgICAgICAgICAgICBnbG9iYWxWaWV3
cG9ydC5oZWlnaHQgKz0gdGhpcy52aWV3cG9ydEJvcmRlciAqIDI7CisgICAgICAgICAgICBwb3Np
dGlvbi54ICs9IHRoaXMudmlld3BvcnRCb3JkZXI7CisgICAgICAgICAgICBwb3NpdGlvbi55ICs9
IHRoaXMudmlld3BvcnRCb3JkZXI7CisgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblggKz0gdGhp
cy52aWV3cG9ydEJvcmRlcjsKKyAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWSArPSB0aGlzLnZp
ZXdwb3J0Qm9yZGVyOworICAgICAgICB9CisgICAgICAgIGlmIChwb3NpdGlvbi56ID4gMCkgewor
ICAgICAgICAgICAgaWYgKCh0aGlzLl9wb3NpdGlvblggPiBnbG9iYWxWaWV3cG9ydC54KSAmJiAo
dGhpcy5fcG9zaXRpb25YIDwgZ2xvYmFsVmlld3BvcnQueCArIGdsb2JhbFZpZXdwb3J0LndpZHRo
KSkgeworICAgICAgICAgICAgICAgIGlmICgodGhpcy5fcG9zaXRpb25ZID4gZ2xvYmFsVmlld3Bv
cnQueSkgJiYgKHRoaXMuX3Bvc2l0aW9uWSA8IGdsb2JhbFZpZXdwb3J0LnkgKyBnbG9iYWxWaWV3
cG9ydC5oZWlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICov
CisgICAgTGVuc0ZsYXJlU3lzdGVtLnByb3RvdHlwZS5faXNWaXNpYmxlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCB8fCAhdGhpcy5fc2NlbmUuYWN0aXZlQ2Ft
ZXJhKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IGVtaXR0ZXJQb3NpdGlvbiA9IHRoaXMuZ2V0RW1pdHRlclBvc2l0aW9uKCk7CisgICAgICAgIHZh
ciBkaXJlY3Rpb24gPSBlbWl0dGVyUG9zaXRpb24uc3VidHJhY3QodGhpcy5fc2NlbmUuYWN0aXZl
Q2FtZXJhLmdsb2JhbFBvc2l0aW9uKTsKKyAgICAgICAgdmFyIGRpc3RhbmNlID0gZGlyZWN0aW9u
Lmxlbmd0aCgpOworICAgICAgICBkaXJlY3Rpb24ubm9ybWFsaXplKCk7CisgICAgICAgIHZhciBy
YXkgPSBuZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlJheSJd
KHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5nbG9iYWxQb3NpdGlvbiwgZGlyZWN0aW9uKTsKKyAg
ICAgICAgdmFyIHBpY2tJbmZvID0gdGhpcy5fc2NlbmUucGlja1dpdGhSYXkocmF5LCB0aGlzLm1l
c2hlc1NlbGVjdGlvblByZWRpY2F0ZSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiAhcGlja0luZm8g
fHwgIXBpY2tJbmZvLmhpdCB8fCBwaWNrSW5mby5kaXN0YW5jZSA+IGRpc3RhbmNlOworICAgIH07
CisgICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIExlbnNGbGFyZVN5c3RlbS5w
cm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX2VmZmVj
dC5pc1JlYWR5KCkgfHwgIXRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2Vu
ZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgdmFyIHZpZXdwb3J0ID0gdGhpcy5fc2NlbmUuYWN0aXZl
Q2FtZXJhLnZpZXdwb3J0OworICAgICAgICB2YXIgZ2xvYmFsVmlld3BvcnQgPSB2aWV3cG9ydC50
b0dsb2JhbChlbmdpbmUuZ2V0UmVuZGVyV2lkdGgodHJ1ZSksIGVuZ2luZS5nZXRSZW5kZXJIZWln
aHQodHJ1ZSkpOworICAgICAgICAvLyBQb3NpdGlvbgorICAgICAgICBpZiAoIXRoaXMuY29tcHV0
ZUVmZmVjdGl2ZVBvc2l0aW9uKGdsb2JhbFZpZXdwb3J0KSkgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIFZpc2liaWxpdHkKKyAgICAgICAgaWYgKCF0
aGlzLl9pc1Zpc2libGUoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIC8vIEludGVuc2l0eQorICAgICAgICB2YXIgYXdheVg7CisgICAgICAgIHZhciBh
d2F5WTsKKyAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9uWCA8IHRoaXMuYm9yZGVyTGltaXQgKyBn
bG9iYWxWaWV3cG9ydC54KSB7CisgICAgICAgICAgICBhd2F5WCA9IHRoaXMuYm9yZGVyTGltaXQg
KyBnbG9iYWxWaWV3cG9ydC54IC0gdGhpcy5fcG9zaXRpb25YOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHRoaXMuX3Bvc2l0aW9uWCA+IGdsb2JhbFZpZXdwb3J0LnggKyBnbG9iYWxWaWV3
cG9ydC53aWR0aCAtIHRoaXMuYm9yZGVyTGltaXQpIHsKKyAgICAgICAgICAgIGF3YXlYID0gdGhp
cy5fcG9zaXRpb25YIC0gZ2xvYmFsVmlld3BvcnQueCAtIGdsb2JhbFZpZXdwb3J0LndpZHRoICsg
dGhpcy5ib3JkZXJMaW1pdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGF3YXlYID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcG9zaXRpb25ZIDwgdGhp
cy5ib3JkZXJMaW1pdCArIGdsb2JhbFZpZXdwb3J0LnkpIHsKKyAgICAgICAgICAgIGF3YXlZID0g
dGhpcy5ib3JkZXJMaW1pdCArIGdsb2JhbFZpZXdwb3J0LnkgLSB0aGlzLl9wb3NpdGlvblk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5fcG9zaXRpb25ZID4gZ2xvYmFsVmlld3Bv
cnQueSArIGdsb2JhbFZpZXdwb3J0LmhlaWdodCAtIHRoaXMuYm9yZGVyTGltaXQpIHsKKyAgICAg
ICAgICAgIGF3YXlZID0gdGhpcy5fcG9zaXRpb25ZIC0gZ2xvYmFsVmlld3BvcnQueSAtIGdsb2Jh
bFZpZXdwb3J0LmhlaWdodCArIHRoaXMuYm9yZGVyTGltaXQ7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBhd2F5WSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGF3
YXkgPSAoYXdheVggPiBhd2F5WSkgPyBhd2F5WCA6IGF3YXlZOworICAgICAgICBhd2F5IC09IHRo
aXMudmlld3BvcnRCb3JkZXI7CisgICAgICAgIGlmIChhd2F5ID4gdGhpcy5ib3JkZXJMaW1pdCkg
eworICAgICAgICAgICAgYXdheSA9IHRoaXMuYm9yZGVyTGltaXQ7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIGludGVuc2l0eSA9IDEuMCAtIF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5DbGFtcChhd2F5IC8gdGhpcy5ib3JkZXJMaW1pdCwg
MCwgMSk7CisgICAgICAgIGlmIChpbnRlbnNpdHkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGludGVuc2l0eSA+IDEuMCkgeworICAgICAg
ICAgICAgaW50ZW5zaXR5ID0gMS4wOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnZpZXdw
b3J0Qm9yZGVyID4gMCkgeworICAgICAgICAgICAgZ2xvYmFsVmlld3BvcnQueCArPSB0aGlzLnZp
ZXdwb3J0Qm9yZGVyOworICAgICAgICAgICAgZ2xvYmFsVmlld3BvcnQueSArPSB0aGlzLnZpZXdw
b3J0Qm9yZGVyOworICAgICAgICAgICAgZ2xvYmFsVmlld3BvcnQud2lkdGggLT0gdGhpcy52aWV3
cG9ydEJvcmRlciAqIDI7CisgICAgICAgICAgICBnbG9iYWxWaWV3cG9ydC5oZWlnaHQgLT0gdGhp
cy52aWV3cG9ydEJvcmRlciAqIDI7CisgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblggLT0gdGhp
cy52aWV3cG9ydEJvcmRlcjsKKyAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWSAtPSB0aGlzLnZp
ZXdwb3J0Qm9yZGVyOworICAgICAgICB9CisgICAgICAgIC8vIFBvc2l0aW9uCisgICAgICAgIHZh
ciBjZW50ZXJYID0gZ2xvYmFsVmlld3BvcnQueCArIGdsb2JhbFZpZXdwb3J0LndpZHRoIC8gMjsK
KyAgICAgICAgdmFyIGNlbnRlclkgPSBnbG9iYWxWaWV3cG9ydC55ICsgZ2xvYmFsVmlld3BvcnQu
aGVpZ2h0IC8gMjsKKyAgICAgICAgdmFyIGRpc3RYID0gY2VudGVyWCAtIHRoaXMuX3Bvc2l0aW9u
WDsKKyAgICAgICAgdmFyIGRpc3RZID0gY2VudGVyWSAtIHRoaXMuX3Bvc2l0aW9uWTsKKyAgICAg
ICAgLy8gRWZmZWN0cworICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KHRoaXMuX2VmZmVjdCk7
CisgICAgICAgIGVuZ2luZS5zZXRTdGF0ZShmYWxzZSk7CisgICAgICAgIGVuZ2luZS5zZXREZXB0
aEJ1ZmZlcihmYWxzZSk7CisgICAgICAgIC8vIFZCT3MKKyAgICAgICAgZW5naW5lLmJpbmRCdWZm
ZXJzKHRoaXMuX3ZlcnRleEJ1ZmZlcnMsIHRoaXMuX2luZGV4QnVmZmVyLCB0aGlzLl9lZmZlY3Qp
OworICAgICAgICAvLyBGbGFyZXMKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IHRoaXMubGVuc0ZsYXJlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBmbGFy
ZSA9IHRoaXMubGVuc0ZsYXJlc1tpbmRleF07CisgICAgICAgICAgICBpZiAoZmxhcmUudGV4dHVy
ZSAmJiAhZmxhcmUudGV4dHVyZS5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZ2luZS5zZXRBbHBoYU1vZGUoZmxhcmUu
YWxwaGFNb2RlKTsKKyAgICAgICAgICAgIHZhciB4ID0gY2VudGVyWCAtIChkaXN0WCAqIGZsYXJl
LnBvc2l0aW9uKTsKKyAgICAgICAgICAgIHZhciB5ID0gY2VudGVyWSAtIChkaXN0WSAqIGZsYXJl
LnBvc2l0aW9uKTsKKyAgICAgICAgICAgIHZhciBjdyA9IGZsYXJlLnNpemU7CisgICAgICAgICAg
ICB2YXIgY2ggPSBmbGFyZS5zaXplICogZW5naW5lLmdldEFzcGVjdFJhdGlvKHRoaXMuX3NjZW5l
LmFjdGl2ZUNhbWVyYSwgdHJ1ZSk7CisgICAgICAgICAgICB2YXIgY3ggPSAyICogKHggLyAoZ2xv
YmFsVmlld3BvcnQud2lkdGggKyBnbG9iYWxWaWV3cG9ydC54ICogMikpIC0gMS4wOworICAgICAg
ICAgICAgdmFyIGN5ID0gMS4wIC0gMiAqICh5IC8gKGdsb2JhbFZpZXdwb3J0LmhlaWdodCArIGds
b2JhbFZpZXdwb3J0LnkgKiAyKSk7CisgICAgICAgICAgICB2YXIgdmlld3BvcnRNYXRyaXggPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0u
RnJvbVZhbHVlcyhjdyAvIDIsIDAsIDAsIDAsIDAsIGNoIC8gMiwgMCwgMCwgMCwgMCwgMSwgMCwg
Y3gsIGN5LCAwLCAxKTsKKyAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRNYXRyaXgoInZpZXdw
b3J0TWF0cml4Iiwgdmlld3BvcnRNYXRyaXgpOworICAgICAgICAgICAgLy8gVGV4dHVyZQorICAg
ICAgICAgICAgdGhpcy5fZWZmZWN0LnNldFRleHR1cmUoInRleHR1cmVTYW1wbGVyIiwgZmxhcmUu
dGV4dHVyZSk7CisgICAgICAgICAgICAvLyBDb2xvcgorICAgICAgICAgICAgdGhpcy5fZWZmZWN0
LnNldEZsb2F0NCgiY29sb3IiLCBmbGFyZS5jb2xvci5yICogaW50ZW5zaXR5LCBmbGFyZS5jb2xv
ci5nICogaW50ZW5zaXR5LCBmbGFyZS5jb2xvci5iICogaW50ZW5zaXR5LCAxLjApOworICAgICAg
ICAgICAgLy8gRHJhdyBvcmRlcgorICAgICAgICAgICAgZW5naW5lLmRyYXdFbGVtZW50c1R5cGUo
X01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJNYXRlcmlh
bCJdLlRyaWFuZ2xlRmlsbE1vZGUsIDAsIDYpOworICAgICAgICB9CisgICAgICAgIGVuZ2luZS5z
ZXREZXB0aEJ1ZmZlcih0cnVlKTsKKyAgICAgICAgZW5naW5lLnNldEFscGhhTW9kZShfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uQUxQ
SEFfRElTQUJMRSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoqCisgICAg
ICogRGlzcG9zZSBhbmQgcmVsZWFzZSB0aGUgbGVucyBmbGFyZSB3aXRoIGl0cyBhc3NvY2lhdGVk
IHJlc291cmNlcy4KKyAgICAgKi8KKyAgICBMZW5zRmxhcmVTeXN0ZW0ucHJvdG90eXBlLmRpc3Bv
c2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB0aGlzLl92ZXJ0
ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZl
cnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXIpIHsK
KyAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl92
ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0gPSBudWxsOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9pbmRleEJ1ZmZlcikgeworICAgICAgICAgICAgdGhpcy5fc2NlbmUuZ2V0RW5n
aW5lKCkuX3JlbGVhc2VCdWZmZXIodGhpcy5faW5kZXhCdWZmZXIpOworICAgICAgICAgICAgdGhp
cy5faW5kZXhCdWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHdoaWxlICh0aGlzLmxl
bnNGbGFyZXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGlzLmxlbnNGbGFyZXNbMF0uZGlzcG9z
ZSgpOworICAgICAgICB9CisgICAgICAgIC8vIFJlbW92ZSBmcm9tIHNjZW5lCisgICAgICAgIHZh
ciBpbmRleCA9IHRoaXMuX3NjZW5lLmxlbnNGbGFyZVN5c3RlbXMuaW5kZXhPZih0aGlzKTsKKyAg
ICAgICAgdGhpcy5fc2NlbmUubGVuc0ZsYXJlU3lzdGVtcy5zcGxpY2UoaW5kZXgsIDEpOworICAg
IH07CisgICAgLyoqCisgICAgICogUGFyc2UgYSBsZW5zIGZsYXJlIHN5c3RlbSBmcm9tIGEgSlNP
TiByZXByZXNzZW50YXRpb24KKyAgICAgKiBAcGFyYW0gcGFyc2VkTGVuc0ZsYXJlU3lzdGVtIERl
ZmluZSB0aGUgSlNPTiB0byBwYXJzZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNj
ZW5lIHRoZSBwYXJzZWQgc3lzdGVtIHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgaW4KKyAgICAgKiBA
cGFyYW0gcm9vdFVybCBEZWZpbmUgdGhlIHJvb3RVcmwgb2YgdGhlIGxvYWQgc2VxdWVuY2UgdG8g
ZWFzaWx5IGZpbmQgYSBsb2FkIHJlbGF0aXZlIGRlcGVuZGVuY2llcyBzdWNoIGFzIHRleHR1cmVz
CisgICAgICogQHJldHVybnMgdGhlIHBhcnNlZCBzeXN0ZW0KKyAgICAgKi8KKyAgICBMZW5zRmxh
cmVTeXN0ZW0uUGFyc2UgPSBmdW5jdGlvbiAocGFyc2VkTGVuc0ZsYXJlU3lzdGVtLCBzY2VuZSwg
cm9vdFVybCkgeworICAgICAgICB2YXIgZW1pdHRlciA9IHNjZW5lLmdldExhc3RFbnRyeUJ5SUQo
cGFyc2VkTGVuc0ZsYXJlU3lzdGVtLmVtaXR0ZXJJZCk7CisgICAgICAgIHZhciBuYW1lID0gcGFy
c2VkTGVuc0ZsYXJlU3lzdGVtLm5hbWUgfHwgImxlbnNGbGFyZVN5c3RlbSMiICsgcGFyc2VkTGVu
c0ZsYXJlU3lzdGVtLmVtaXR0ZXJJZDsKKyAgICAgICAgdmFyIGxlbnNGbGFyZVN5c3RlbSA9IG5l
dyBMZW5zRmxhcmVTeXN0ZW0obmFtZSwgZW1pdHRlciwgc2NlbmUpOworICAgICAgICBsZW5zRmxh
cmVTeXN0ZW0uaWQgPSBwYXJzZWRMZW5zRmxhcmVTeXN0ZW0uaWQgfHwgbmFtZTsKKyAgICAgICAg
bGVuc0ZsYXJlU3lzdGVtLmJvcmRlckxpbWl0ID0gcGFyc2VkTGVuc0ZsYXJlU3lzdGVtLmJvcmRl
ckxpbWl0OworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcGFyc2VkTGVuc0Zs
YXJlU3lzdGVtLmZsYXJlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBwYXJz
ZWRGbGFyZSA9IHBhcnNlZExlbnNGbGFyZVN5c3RlbS5mbGFyZXNbaW5kZXhdOworICAgICAgICAg
ICAgX2xlbnNGbGFyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJMZW5zRmxhcmUiXS5B
ZGRGbGFyZShwYXJzZWRGbGFyZS5zaXplLCBwYXJzZWRGbGFyZS5wb3NpdGlvbiwgX01hdGhzX21h
dGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIkNvbG9yMyJdLkZyb21BcnJh
eShwYXJzZWRGbGFyZS5jb2xvciksIHBhcnNlZEZsYXJlLnRleHR1cmVOYW1lID8gcm9vdFVybCAr
IHBhcnNlZEZsYXJlLnRleHR1cmVOYW1lIDogIiIsIGxlbnNGbGFyZVN5c3RlbSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGxlbnNGbGFyZVN5c3RlbTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNlcmlhbGl6ZSB0aGUgY3VycmVudCBMZW5zIEZsYXJlIFN5c3RlbSBpbnRvIGEgSlNPTiBy
ZXByZXNlbnRhdGlvbi4KKyAgICAgKiBAcmV0dXJucyB0aGUgc2VyaWFsaXplZCBKU09OCisgICAg
ICovCisgICAgTGVuc0ZsYXJlU3lzdGVtLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3QuaWQgPSB0aGlzLmlkOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
Lm5hbWUgPSB0aGlzLm5hbWU7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZW1pdHRlcklk
ID0gdGhpcy5nZXRFbWl0dGVyKCkuaWQ7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYm9y
ZGVyTGltaXQgPSB0aGlzLmJvcmRlckxpbWl0OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
LmZsYXJlcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5s
ZW5zRmxhcmVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGZsYXJlID0gdGhp
cy5sZW5zRmxhcmVzW2luZGV4XTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZmxh
cmVzLnB1c2goeworICAgICAgICAgICAgICAgIHNpemU6IGZsYXJlLnNpemUsCisgICAgICAgICAg
ICAgICAgcG9zaXRpb246IGZsYXJlLnBvc2l0aW9uLAorICAgICAgICAgICAgICAgIGNvbG9yOiBm
bGFyZS5jb2xvci5hc0FycmF5KCksCisgICAgICAgICAgICAgICAgdGV4dHVyZU5hbWU6IF9NaXNj
X3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRvb2xzIl0uR2V0RmlsZW5hbWUo
ZmxhcmUudGV4dHVyZSA/IGZsYXJlLnRleHR1cmUubmFtZSA6ICIiKQorICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIExlbnNGbGFyZVN5c3RlbS5fU2NlbmVDb21wb25lbnRJ
bml0aWFsaXphdGlvbiA9IGZ1bmN0aW9uIChfKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0
KCJMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudCIpOworICAgIH07CisgICAgcmV0dXJuIExl
bnNGbGFyZVN5c3RlbTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTGVuc0Zs
YXJlcy9sZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTGVu
c0ZsYXJlcy9sZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudC50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudCAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQ7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3Rvb2xzICovICIuL01p
c2MvdG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2Fic3RyYWN0U2NlbmUgKi8gIi4vYWJzdHJhY3RT
Y2VuZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sZW5zRmxhcmVTeXN0ZW1fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbGVu
c0ZsYXJlU3lzdGVtICovICIuL0xlbnNGbGFyZXMvbGVuc0ZsYXJlU3lzdGVtLnRzIik7CisKKwor
CisKKy8vIEFkZHMgdGhlIHBhcnNlciB0byB0aGUgc2NlbmUgcGFyc2Vycy4KK19hYnN0cmFjdFNj
ZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFic3RyYWN0U2NlbmUiXS5BZGRQYXJz
ZXIoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lQ29t
cG9uZW50Q29uc3RhbnRzIl0uTkFNRV9MRU5TRkxBUkVTWVNURU0sIGZ1bmN0aW9uIChwYXJzZWRE
YXRhLCBzY2VuZSwgY29udGFpbmVyLCByb290VXJsKSB7CisgICAgLy8gTGVucyBmbGFyZXMKKyAg
ICBpZiAocGFyc2VkRGF0YS5sZW5zRmxhcmVTeXN0ZW1zICE9PSB1bmRlZmluZWQgJiYgcGFyc2Vk
RGF0YS5sZW5zRmxhcmVTeXN0ZW1zICE9PSBudWxsKSB7CisgICAgICAgIGlmICghY29udGFpbmVy
LmxlbnNGbGFyZVN5c3RlbXMpIHsKKyAgICAgICAgICAgIGNvbnRhaW5lci5sZW5zRmxhcmVTeXN0
ZW1zID0gbmV3IEFycmF5KCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAw
LCBjYWNoZSA9IHBhcnNlZERhdGEubGVuc0ZsYXJlU3lzdGVtcy5sZW5ndGg7IGluZGV4IDwgY2Fj
aGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBwYXJzZWRMZW5zRmxhcmVTeXN0ZW0gPSBw
YXJzZWREYXRhLmxlbnNGbGFyZVN5c3RlbXNbaW5kZXhdOworICAgICAgICAgICAgdmFyIGxmID0g
X2xlbnNGbGFyZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJMZW5zRmxhcmVT
eXN0ZW0iXS5QYXJzZShwYXJzZWRMZW5zRmxhcmVTeXN0ZW0sIHNjZW5lLCByb290VXJsKTsKKyAg
ICAgICAgICAgIGNvbnRhaW5lci5sZW5zRmxhcmVTeXN0ZW1zLnB1c2gobGYpOworICAgICAgICB9
CisgICAgfQorfSk7CitfYWJzdHJhY3RTY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJBYnN0cmFjdFNjZW5lIl0ucHJvdG90eXBlLmdldExlbnNGbGFyZVN5c3RlbUJ5TmFtZSA9IGZ1
bmN0aW9uIChuYW1lKSB7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGVu
c0ZsYXJlU3lzdGVtcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgaWYgKHRoaXMubGVuc0Zs
YXJlU3lzdGVtc1tpbmRleF0ubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMubGVuc0ZsYXJlU3lzdGVtc1tpbmRleF07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IG51bGw7Cit9OworX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
QWJzdHJhY3RTY2VuZSJdLnByb3RvdHlwZS5nZXRMZW5zRmxhcmVTeXN0ZW1CeUlEID0gZnVuY3Rp
b24gKGlkKSB7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGVuc0ZsYXJl
U3lzdGVtcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgaWYgKHRoaXMubGVuc0ZsYXJlU3lz
dGVtc1tpbmRleF0uaWQgPT09IGlkKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5zRmxh
cmVTeXN0ZW1zW2luZGV4XTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbDsKK307
CitfYWJzdHJhY3RTY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBYnN0cmFjdFNj
ZW5lIl0ucHJvdG90eXBlLnJlbW92ZUxlbnNGbGFyZVN5c3RlbSA9IGZ1bmN0aW9uICh0b1JlbW92
ZSkgeworICAgIHZhciBpbmRleCA9IHRoaXMubGVuc0ZsYXJlU3lzdGVtcy5pbmRleE9mKHRvUmVt
b3ZlKTsKKyAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgIHRoaXMubGVuc0ZsYXJlU3lz
dGVtcy5zcGxpY2UoaW5kZXgsIDEpOworICAgIH0KKyAgICByZXR1cm4gaW5kZXg7Cit9OworX2Fi
c3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQWJzdHJhY3RTY2VuZSJd
LnByb3RvdHlwZS5hZGRMZW5zRmxhcmVTeXN0ZW0gPSBmdW5jdGlvbiAobmV3TGVuc0ZsYXJlU3lz
dGVtKSB7CisgICAgdGhpcy5sZW5zRmxhcmVTeXN0ZW1zLnB1c2gobmV3TGVuc0ZsYXJlU3lzdGVt
KTsKK307CisvKioKKyAqIERlZmluZXMgdGhlIGxlbnMgZmxhcmUgc2NlbmUgY29tcG9uZW50IHJl
c3BvbnNpYmxlIHRvIG1hbmFnZSBhbnkgbGVucyBmbGFyZXMKKyAqIGluIGEgZ2l2ZW4gc2NlbmUu
CisgKi8KK3ZhciBMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9m
IHRoZSBjb21wb25lbnQgZm9yIHRoZSBnaXZlbiBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBE
ZWZpbmVzIHRoZSBzY2VuZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IGluCisgICAgICovCisg
ICAgZnVuY3Rpb24gTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQoc2NlbmUpIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFRoZSBjb21wb25lbnQgbmFtZSBoZWxwZnVsbCB0byBpZGVudGlm
eSB0aGUgY29tcG9uZW50IGluIHRoZSBsaXN0IG9mIHNjZW5lIGNvbXBvbmVudHMuCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLm5hbWUgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX0xFTlNGTEFSRVNZ
U1RFTTsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICBzY2VuZS5sZW5zRmxh
cmVTeXN0ZW1zID0gbmV3IEFycmF5KCk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJlZ2lzdGVy
cyB0aGUgY29tcG9uZW50IGluIGEgZ2l2ZW4gc2NlbmUKKyAgICAgKi8KKyAgICBMZW5zRmxhcmVT
eXN0ZW1TY2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuc2NlbmUuX2FmdGVyQ2FtZXJhRHJhd1N0YWdlLnJlZ2lzdGVyU3RlcChfc2Nl
bmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRD
b25zdGFudHMiXS5TVEVQX0FGVEVSQ0FNRVJBRFJBV19MRU5TRkxBUkVTWVNURU0sIHRoaXMsIHRo
aXMuX2RyYXcpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVidWlsZHMgdGhlIGVsZW1lbnRz
IHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4gY2FzZSBvZgorICAgICAqIGNvbnRleHQgbG9z
dCBmb3IgaW5zdGFuY2UuCisgICAgICovCisgICAgTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25l
bnQucHJvdG90eXBlLnJlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE5vdGhpbmcg
dG8gZG8gZm9yIGxlbnMgZmxhcmUKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgYWxsIHRo
ZSBlbGVtZW50cyBmcm9tIHRoZSBjb250YWluZXIgdG8gdGhlIHNjZW5lCisgICAgICogQHBhcmFt
IGNvbnRhaW5lciB0aGUgY29udGFpbmVyIGhvbGRpbmcgdGhlIGVsZW1lbnRzCisgICAgICovCisg
ICAgTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQucHJvdG90eXBlLmFkZEZyb21Db250YWlu
ZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIGlmICghY29udGFpbmVyLmxlbnNGbGFyZVN5c3RlbXMpIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBjb250YWluZXIubGVuc0ZsYXJlU3lzdGVtcy5mb3JF
YWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAgICAgICBfdGhpcy5zY2VuZS5hZGRMZW5zRmxhcmVT
eXN0ZW0obyk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyBh
bGwgdGhlIGVsZW1lbnRzIGluIHRoZSBjb250YWluZXIgZnJvbSB0aGUgc2NlbmUKKyAgICAgKiBA
cGFyYW0gY29udGFpbmVyIGNvbnRhaW5zIHRoZSBlbGVtZW50cyB0byByZW1vdmUKKyAgICAgKiBA
cGFyYW0gZGlzcG9zZSBpZiB0aGUgcmVtb3ZlZCBlbGVtZW50IHNob3VsZCBiZSBkaXNwb3NlZCAo
ZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25l
bnQucHJvdG90eXBlLnJlbW92ZUZyb21Db250YWluZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBk
aXNwb3NlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmICghY29udGFp
bmVyLmxlbnNGbGFyZVN5c3RlbXMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBjb250YWluZXIubGVuc0ZsYXJlU3lzdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7
CisgICAgICAgICAgICBfdGhpcy5zY2VuZS5yZW1vdmVMZW5zRmxhcmVTeXN0ZW0obyk7CisgICAg
ICAgICAgICBpZiAoZGlzcG9zZSkgeworICAgICAgICAgICAgICAgIG8uZGlzcG9zZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6
ZXMgdGhlIGNvbXBvbmVudCBkYXRhIHRvIHRoZSBzcGVjaWZpZWQganNvbiBvYmplY3QKKyAgICAg
KiBAcGFyYW0gc2VyaWFsaXphdGlvbk9iamVjdCBUaGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSB0bwor
ICAgICAqLworICAgIExlbnNGbGFyZVN5c3RlbVNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5zZXJp
YWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlvbk9iamVjdCkgeworICAgICAgICAvLyBMZW5z
IGZsYXJlcworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmxlbnNGbGFyZVN5c3RlbXMgPSBb
XTsKKyAgICAgICAgdmFyIGxlbnNGbGFyZVN5c3RlbXMgPSB0aGlzLnNjZW5lLmxlbnNGbGFyZVN5
c3RlbXM7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgbGVuc0ZsYXJlU3lzdGVtc18xID0gbGVu
c0ZsYXJlU3lzdGVtczsgX2kgPCBsZW5zRmxhcmVTeXN0ZW1zXzEubGVuZ3RoOyBfaSsrKSB7Cisg
ICAgICAgICAgICB2YXIgbGVuc0ZsYXJlU3lzdGVtID0gbGVuc0ZsYXJlU3lzdGVtc18xW19pXTsK
KyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubGVuc0ZsYXJlU3lzdGVtcy5wdXNoKGxl
bnNGbGFyZVN5c3RlbS5zZXJpYWxpemUoKSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIERpc3Bvc2VzIHRoZSBjb21wb25lbnQgYW5kIHRoZSBhc3NvY2lhdGVkIHJlc3NvdXJj
ZXMuCisgICAgICovCisgICAgTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQucHJvdG90eXBl
LmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBsZW5zRmxhcmVTeXN0ZW1zID0g
dGhpcy5zY2VuZS5sZW5zRmxhcmVTeXN0ZW1zOworICAgICAgICB3aGlsZSAobGVuc0ZsYXJlU3lz
dGVtcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGxlbnNGbGFyZVN5c3RlbXNbMF0uZGlzcG9zZSgp
OworICAgICAgICB9CisgICAgfTsKKyAgICBMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudC5w
cm90b3R5cGUuX2RyYXcgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAgICAgIC8vIExlbnMgZmxh
cmVzCisgICAgICAgIGlmICh0aGlzLnNjZW5lLmxlbnNGbGFyZXNFbmFibGVkKSB7CisgICAgICAg
ICAgICB2YXIgbGVuc0ZsYXJlU3lzdGVtcyA9IHRoaXMuc2NlbmUubGVuc0ZsYXJlU3lzdGVtczsK
KyAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRv
b2xzIl0uU3RhcnRQZXJmb3JtYW5jZUNvdW50ZXIoIkxlbnMgZmxhcmVzIiwgbGVuc0ZsYXJlU3lz
dGVtcy5sZW5ndGggPiAwKTsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgbGVuc0ZsYXJl
U3lzdGVtc18yID0gbGVuc0ZsYXJlU3lzdGVtczsgX2kgPCBsZW5zRmxhcmVTeXN0ZW1zXzIubGVu
Z3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGxlbnNGbGFyZVN5c3RlbSA9IGxlbnNG
bGFyZVN5c3RlbXNfMltfaV07CisgICAgICAgICAgICAgICAgaWYgKChjYW1lcmEubGF5ZXJNYXNr
ICYgbGVuc0ZsYXJlU3lzdGVtLmxheWVyTWFzaykgIT09IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgbGVuc0ZsYXJlU3lzdGVtLnJlbmRlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlRvb2xzIl0uRW5kUGVyZm9ybWFuY2VDb3VudGVyKCJMZW5zIGZsYXJlcyIsIGxlbnNGbGFy
ZVN5c3RlbXMubGVuZ3RoID4gMCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBMZW5z
RmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudDsKK30oKSk7CisKK19sZW5zRmxhcmVTeXN0ZW1fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTGVuc0ZsYXJlU3lzdGVtIl0uX1NjZW5lQ29tcG9u
ZW50SW5pdGlhbGl6YXRpb24gPSBmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICB2YXIgY29tcG9uZW50
ID0gc2NlbmUuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX0xFTlNGTEFSRVNZU1RF
TSk7CisgICAgaWYgKCFjb21wb25lbnQpIHsKKyAgICAgICAgY29tcG9uZW50ID0gbmV3IExlbnNG
bGFyZVN5c3RlbVNjZW5lQ29tcG9uZW50KHNjZW5lKTsKKyAgICAgICAgc2NlbmUuX2FkZENvbXBv
bmVudChjb21wb25lbnQpOworICAgIH0KK307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0xp
Z2h0cy9TaGFkb3dzL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vTGlnaHRzL1NoYWRvd3MvaW5kZXgudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNoYWRv
d0dlbmVyYXRvciwgU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zaGFkb3dHZW5lcmF0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2hhZG93R2Vu
ZXJhdG9yICovICIuL0xpZ2h0cy9TaGFkb3dzL3NoYWRvd0dlbmVyYXRvci50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTaGFkb3dHZW5lcmF0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zaGFkb3dH
ZW5lcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2hhZG93R2VuZXJhdG9yIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NoYWRvd0dlbmVyYXRvclNjZW5lQ29t
cG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL3NoYWRvd0dlbmVyYXRvclNjZW5lQ29tcG9uZW50ICovICIuL0xpZ2h0cy9TaGFkb3dz
L3NoYWRvd0dlbmVyYXRvclNjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNo
YWRvd0dlbmVyYXRvclNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2hhZG93
R2VuZXJhdG9yU2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2hh
ZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL0xpZ2h0cy9TaGFkb3dzL3NoYWRvd0dlbmVyYXRvci50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9MaWdodHMv
U2hhZG93cy9zaGFkb3dHZW5lcmF0b3IudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTaGFkb3dHZW5l
cmF0b3IgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hhZG93R2VuZXJh
dG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTaGFkb3dHZW5lcmF0b3I7IH0pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGli
LmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5jb2xv
ciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9MaWdodHNfbGlnaHRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0xpZ2h0cy9saWdo
dCAqLyAiLi9MaWdodHMvbGlnaHQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvbWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL21h
dGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlh
bEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyICovICIuL01hdGVyaWFscy9tYXRl
cmlhbEhlbHBlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yZW5k
ZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVy
ZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vUG9z
dFByb2Nlc3Nlcy9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vUG9zdFByb2Nlc3Nlcy9ibHVyUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nl
cy9ibHVyUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX3NoYWRvd01hcF9mcmFn
bWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL1NoYWRlcnMvc2hhZG93TWFwLmZyYWdtZW50ICovICIuL1NoYWRlcnMvc2hhZG93
TWFwLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfc2hh
ZG93TWFwX3ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL1NoYWRlcnMvc2hhZG93TWFwLnZlcnRleCAqLyAiLi9TaGFkZXJz
L3NoYWRvd01hcC52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVy
c19kZXB0aEJveEJsdXJfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9TaGFkZXJzL2RlcHRoQm94Qmx1ci5mcmFnbWVu
dCAqLyAiLi9TaGFkZXJzL2RlcHRoQm94Qmx1ci5mcmFnbWVudC50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4v
TWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGV2
VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NaXNjL2RldlRvb2xzICovICIuL01pc2MvZGV2VG9vbHMudHMiKTsKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKy8qKgorICogRGVmYXVsdCBpbXBsZW1lbnRh
dGlvbiBJU2hhZG93R2VuZXJhdG9yLgorICogVGhpcyBpcyB0aGUgbWFpbiBvYmplY3QgcmVzcG9u
c2libGUgb2YgZ2VuZXJhdGluZyBzaGFkb3dzIGluIHRoZSBmcmFtZXdvcmsuCisgKiBEb2N1bWVu
dGF0aW9uOiBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvc2hhZG93cworICov
Cit2YXIgU2hhZG93R2VuZXJhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAg
IC8qKgorICAgICAqIENyZWF0ZXMgYSBTaGFkb3dHZW5lcmF0b3Igb2JqZWN0LgorICAgICAqIEEg
U2hhZG93R2VuZXJhdG9yIGlzIHRoZSByZXF1aXJlZCB0b29sIHRvIHVzZSB0aGUgc2hhZG93cy4K
KyAgICAgKiBFYWNoIGxpZ2h0IGNhc3Rpbmcgc2hhZG93cyBuZWVkcyB0byB1c2UgaXRzIG93biBT
aGFkb3dHZW5lcmF0b3IuCisgICAgICogRG9jdW1lbnRhdGlvbiA6IGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vYmFieWxvbjEwMS9zaGFkb3dzCisgICAgICogQHBhcmFtIG1hcFNpemUgVGhlIHNp
emUgb2YgdGhlIHRleHR1cmUgd2hhdCBzdG9yZXMgdGhlIHNoYWRvd3MuIEV4YW1wbGUgOiAxMDI0
LgorICAgICAqIEBwYXJhbSBsaWdodCBUaGUgbGlnaHQgb2JqZWN0IGdlbmVyYXRpbmcgdGhlIHNo
YWRvd3MuCisgICAgICogQHBhcmFtIHVzZWZ1bEZsb2F0Rmlyc3QgQnkgZGVmYXVsdCB0aGUgZ2Vu
ZXJhdG9yIHdpbGwgdHJ5IHRvIHVzZSBoYWxmIGZsb2F0IHRleHR1cmVzIGJ1dCBpZiB5b3UgbmVl
ZCBwcmVjaXNpb24gKGZvciBzZWxmIHNoYWRvd2luZyBmb3IgaW5zdGFuY2UpLCB5b3UgY2FuIHVz
ZSB0aGlzIG9wdGlvbiB0byBlbmZvcmNlIGZ1bGwgZmxvYXQgdGV4dHVyZS4KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBTaGFkb3dHZW5lcmF0b3IobWFwU2l6ZSwgbGlnaHQsIHVzZWZ1bEZsb2F0Rmly
c3QpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgdHJpZ2dlcmVkIGJlZm9y
ZSB0aGUgc2hhZG93IGlzIHJlbmRlcmVkLiBDYW4gYmUgdXNlZCB0byB1cGRhdGUgaW50ZXJuYWwg
ZWZmZWN0IHN0YXRlCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uQmVmb3JlU2hhZG93TWFw
UmVuZGVyT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xNl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9i
c2VydmFibGUgdHJpZ2dlcmVkIGFmdGVyIHRoZSBzaGFkb3cgaXMgcmVuZGVyZWQuIENhbiBiZSB1
c2VkIHRvIHJlc3RvcmUgaW50ZXJuYWwgZWZmZWN0IHN0YXRlCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLm9uQWZ0ZXJTaGFkb3dNYXBSZW5kZXJPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2Vy
dmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIk9ic2VydmFibGUiXSgpOworICAg
ICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSB0cmlnZ2VyZWQgYmVmb3JlIGEgbWVzaCBp
cyByZW5kZXJlZCBpbiB0aGUgc2hhZG93IG1hcC4KKyAgICAgICAgICogQ2FuIGJlIHVzZWQgdG8g
dXBkYXRlIGludGVybmFsIGVmZmVjdCBzdGF0ZSAodGhhdCB5b3UgY2FuIGdldCBmcm9tIHRoZSBv
bkJlZm9yZVNoYWRvd01hcFJlbmRlck9ic2VydmFibGUpCisgICAgICAgICAqLworICAgICAgICB0
aGlzLm9uQmVmb3JlU2hhZG93TWFwUmVuZGVyTWVzaE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siT2JzZXJ2YWJsZSJdKCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxlIHRyaWdnZXJlZCBhZnRlciBhIG1lc2gg
aXMgcmVuZGVyZWQgaW4gdGhlIHNoYWRvdyBtYXAuCisgICAgICAgICAqIENhbiBiZSB1c2VkIHRv
IHVwZGF0ZSBpbnRlcm5hbCBlZmZlY3Qgc3RhdGUgKHRoYXQgeW91IGNhbiBnZXQgZnJvbSB0aGUg
b25BZnRlclNoYWRvd01hcFJlbmRlck9ic2VydmFibGUpCisgICAgICAgICAqLworICAgICAgICB0
aGlzLm9uQWZ0ZXJTaGFkb3dNYXBSZW5kZXJNZXNoT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNl
cnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAg
ICAgICAgdGhpcy5fYmlhcyA9IDAuMDAwMDU7CisgICAgICAgIHRoaXMuX25vcm1hbEJpYXMgPSAw
OworICAgICAgICB0aGlzLl9ibHVyQm94T2Zmc2V0ID0gMTsKKyAgICAgICAgdGhpcy5fYmx1clNj
YWxlID0gMjsKKyAgICAgICAgdGhpcy5fYmx1cktlcm5lbCA9IDE7CisgICAgICAgIHRoaXMuX3Vz
ZUtlcm5lbEJsdXIgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZmlsdGVyID0gU2hhZG93R2VuZXJh
dG9yLkZJTFRFUl9OT05FOworICAgICAgICB0aGlzLl9maWx0ZXJpbmdRdWFsaXR5ID0gU2hhZG93
R2VuZXJhdG9yLlFVQUxJVFlfSElHSDsKKyAgICAgICAgdGhpcy5fY29udGFjdEhhcmRlbmluZ0xp
Z2h0U2l6ZVVWUmF0aW8gPSAwLjE7CisgICAgICAgIHRoaXMuX2RhcmtuZXNzID0gMDsKKyAgICAg
ICAgdGhpcy5fdHJhbnNwYXJlbmN5U2hhZG93ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBDb250cm9scyB0aGUgZXh0ZW50IHRvIHdoaWNoIHRoZSBzaGFkb3dzIGZhZGUgb3V0IGF0
IHRoZSBlZGdlIG9mIHRoZSBmcnVzdHVtCisgICAgICAgICAqIFVzZWQgb25seSBieSBkaXJlY3Rp
b25hbHMgYW5kIHNwb3RzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmZydXN0dW1FZGdlRmFs
bG9mZiA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0cnVlIHRoZSBzaGFkb3cgbWFw
IGlzIGdlbmVyYXRlZCBieSByZW5kZXJpbmcgdGhlIGJhY2sgZmFjZSBvZiB0aGUgbWVzaCBpbnN0
ZWFkIG9mIHRoZSBmcm9udCBmYWNlLgorICAgICAgICAgKiBUaGlzIGNhbiBoZWxwIHdpdGggc2Vs
Zi1zaGFkb3dpbmcgYXMgdGhlIGdlb21ldHJ5IG1ha2luZyB1cCB0aGUgYmFjayBvZiBvYmplY3Rz
IGlzIHNsaWdodGx5IG9mZnNldC4KKyAgICAgICAgICogSXQgbWlnaHQgb24gdGhlIG90aGVyIGhh
bmQgaW50cm9kdWNlIHBldGVyIHBhbm5pbmcuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmZv
cmNlQmFja0ZhY2VzT25seSA9IGZhbHNlOworICAgICAgICB0aGlzLl9saWdodERpcmVjdGlvbiA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3Iz
Il0uWmVybygpOworICAgICAgICB0aGlzLl92aWV3TWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLlplcm8oKTsKKyAgICAgICAg
dGhpcy5fcHJvamVjdGlvbk1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX3RyYW5zZm9y
bU1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2NhY2hlZFBvc2l0aW9uID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0o
TnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVyLk1BWF9WQUxVRSk7Cisg
ICAgICAgIHRoaXMuX2NhY2hlZERpcmVjdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKE51bWJlci5NQVhfVkFMVUUsIE51
bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUUpOworICAgICAgICB0aGlzLl9jdXJyZW50
RmFjZUluZGV4ID0gMDsKKyAgICAgICAgdGhpcy5fY3VycmVudEZhY2VJbmRleENhY2hlID0gMDsK
KyAgICAgICAgdGhpcy5fZGVmYXVsdFRleHR1cmVNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAg
ICAgdGhpcy5fbWFwU2l6ZSA9IG1hcFNpemU7CisgICAgICAgIHRoaXMuX2xpZ2h0ID0gbGlnaHQ7
CisgICAgICAgIHRoaXMuX3NjZW5lID0gbGlnaHQuZ2V0U2NlbmUoKTsKKyAgICAgICAgbGlnaHQu
X3NoYWRvd0dlbmVyYXRvciA9IHRoaXM7CisgICAgICAgIFNoYWRvd0dlbmVyYXRvci5fU2NlbmVD
b21wb25lbnRJbml0aWFsaXphdGlvbih0aGlzLl9zY2VuZSk7CisgICAgICAgIC8vIFRleHR1cmUg
dHlwZSBmYWxsYmFjayBmcm9tIGZsb2F0IHRvIGludCBpZiBub3Qgc3VwcG9ydGVkLgorICAgICAg
ICB2YXIgY2FwcyA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldENhcHMoKTsKKyAgICAgICAg
aWYgKCF1c2VmdWxGbG9hdEZpcnN0KSB7CisgICAgICAgICAgICBpZiAoY2Fwcy50ZXh0dXJlSGFs
ZkZsb2F0UmVuZGVyICYmIGNhcHMudGV4dHVyZUhhbGZGbG9hdExpbmVhckZpbHRlcmluZykgewor
ICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9IQUxG
X0ZMT0FUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY2Fwcy50ZXh0dXJl
RmxvYXRSZW5kZXIgJiYgY2Fwcy50ZXh0dXJlRmxvYXRMaW5lYXJGaWx0ZXJpbmcpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl90ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfRkxPQVQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90
ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGNhcHMudGV4dHVy
ZUZsb2F0UmVuZGVyICYmIGNhcHMudGV4dHVyZUZsb2F0TGluZWFyRmlsdGVyaW5nKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEyX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY2Fwcy50ZXh0dXJlSGFsZkZsb2F0
UmVuZGVyICYmIGNhcHMudGV4dHVyZUhhbGZGbG9hdExpbmVhckZpbHRlcmluZykgeworICAgICAg
ICAgICAgICAgIHRoaXMuX3RleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FU
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEyX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pbml0aWFsaXplR2VuZXJhdG9yKCk7Cisg
ICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyVmFsdWVzKCk7CisgICAgfQorICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAiYmlhcyIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIGJpYXM6IG9mZnNldCBhcHBsaWVkIG9uIHRoZSBkZXB0
aCBwcmV2ZW50aW5nIGFjbmVhIChpbiBsaWdodCBkaXJlY3Rpb24pLgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmlhczsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGJpYXM6IG9mZnNl
dCBhcHBsaWVkIG9uIHRoZSBkZXB0aCBwcmV2ZW50aW5nIGFjbmVhIChpbiBsaWdodCBkaXJlY3Rp
b24pLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoYmlhcykgeworICAgICAg
ICAgICAgdGhpcy5fYmlhcyA9IGJpYXM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAibm9ybWFsQmlhcyIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG5vcm1hbEJpYXM6IG9mZnNldCBhcHBs
aWVkIG9uIHRoZSBkZXB0aCBwcmV2ZW50aW5nIGFjbmVhIChhbG9uZyBzaWRlIHRoZSBub3JtYWwg
ZGlyZWN0aW9uIGFuZCBwcm9wb3J0aW5hbCB0byB0aGUgbGlnaHQvbm9ybWFsIGFuZ2xlKS4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX25vcm1hbEJpYXM7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBT
ZXRzIHRoZSBub3JtYWxCaWFzOiBvZmZzZXQgYXBwbGllZCBvbiB0aGUgZGVwdGggcHJldmVudGlu
ZyBhY25lYSAoYWxvbmcgc2lkZSB0aGUgbm9ybWFsIGRpcmVjdGlvbiBhbmQgcHJvcG9ydGluYWwg
dG8gdGhlIGxpZ2h0L25vcm1hbCBhbmdsZSkuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uIChub3JtYWxCaWFzKSB7CisgICAgICAgICAgICB0aGlzLl9ub3JtYWxCaWFzID0gbm9y
bWFsQmlhczsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNo
YWRvd0dlbmVyYXRvci5wcm90b3R5cGUsICJibHVyQm94T2Zmc2V0IiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyB0aGUgYmx1ciBib3ggb2Zmc2V0OiBvZmZzZXQgYXBwbGllZCBkdXJp
bmcgdGhlIGJsdXIgcGFzcy4KKyAgICAgICAgICogT25seSB1c2VmdWwgaWYgdXNlS2VybmVsQmx1
ciA9IGZhbHNlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9ibHVyQm94T2Zmc2V0OworICAgICAgICB9LAorICAgICAgICAv
KioKKyAgICAgICAgICogU2V0cyB0aGUgYmx1ciBib3ggb2Zmc2V0OiBvZmZzZXQgYXBwbGllZCBk
dXJpbmcgdGhlIGJsdXIgcGFzcy4KKyAgICAgICAgICogT25seSB1c2VmdWwgaWYgdXNlS2VybmVs
Qmx1ciA9IGZhbHNlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgaWYgKHRoaXMuX2JsdXJCb3hPZmZzZXQgPT09IHZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYmx1
ckJveE9mZnNldCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fZGlzcG9zZUJsdXJQb3N0UHJv
Y2Vzc2VzKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShT
aGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAiYmx1clNjYWxlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgYmx1ciBzY2FsZTogc2NhbGUgb2YgdGhlIGJsdXJyZWQgdGV4dHVy
ZSBjb21wYXJlZCB0byB0aGUgbWFpbiBzaGFkb3cgbWFwLgorICAgICAgICAgKiAyIG1lYW5zIGhh
bGYgb2YgdGhlIHNpemUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9ibHVyU2NhbGU7CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBibHVyIHNjYWxlOiBzY2FsZSBvZiB0aGUgYmx1cnJl
ZCB0ZXh0dXJlIGNvbXBhcmVkIHRvIHRoZSBtYWluIHNoYWRvdyBtYXAuCisgICAgICAgICAqIDIg
bWVhbnMgaGFsZiBvZiB0aGUgc2l6ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fYmx1clNjYWxlID09PSB2YWx1ZSkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX2JsdXJTY2FsZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fZGlzcG9zZUJsdXJQb3N0
UHJvY2Vzc2VzKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAiYmx1cktlcm5lbCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIGJsdXIga2VybmVsOiBrZXJuZWwgc2l6ZSBvZiB0aGUgYmx1
ciBwYXNzLgorICAgICAgICAgKiBPbmx5IHVzZWZ1bCBpZiB1c2VLZXJuZWxCbHVyID0gdHJ1ZQor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fYmx1cktlcm5lbDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFNldHMgdGhlIGJsdXIga2VybmVsOiBrZXJuZWwgc2l6ZSBvZiB0aGUgYmx1ciBwYXNzLgorICAg
ICAgICAgKiBPbmx5IHVzZWZ1bCBpZiB1c2VLZXJuZWxCbHVyID0gdHJ1ZQorICAgICAgICAgKi8K
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9i
bHVyS2VybmVsID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2JsdXJLZXJuZWwgPSB2YWx1ZTsKKyAgICAgICAgICAg
IHRoaXMuX2Rpc3Bvc2VCbHVyUG9zdFByb2Nlc3NlcygpOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZSwgInVzZUtl
cm5lbEJsdXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGJs
dXIgcGFzcyBpcyBhIGtlcm5lbCBibHVyIChpZiB0cnVlKSBvciBib3ggYmx1ci4KKyAgICAgICAg
ICogT25seSB1c2VmdWwgaW4gZmlsdGVyZWQgbW9kZSAodXNlQmx1ckV4cG9uZW50aWFsU2hhZG93
TWFwLi4uKQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fdXNlS2VybmVsQmx1cjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFNldHMgd2hldGhlciB0aGUgYmx1ciBwYXNzIGlzIGEga2VybmVsIGJsdXIg
KGlmIHRydWUpIG9yIGJveCBibHVyLgorICAgICAgICAgKiBPbmx5IHVzZWZ1bCBpbiBmaWx0ZXJl
ZCBtb2RlICh1c2VCbHVyRXhwb25lbnRpYWxTaGFkb3dNYXAuLi4pCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3VzZUtl
cm5lbEJsdXIgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fdXNlS2VybmVsQmx1ciA9IHZhbHVlOworICAgICAgICAg
ICAgdGhpcy5fZGlzcG9zZUJsdXJQb3N0UHJvY2Vzc2VzKCk7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAiZGVw
dGhTY2FsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGRlcHRoIHNjYWxl
IHVzZWQgaW4gRVNNIG1vZGUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXB0aFNjYWxlICE9PSB1bmRlZmluZWQgPyB0
aGlzLl9kZXB0aFNjYWxlIDogdGhpcy5fbGlnaHQuZ2V0RGVwdGhTY2FsZSgpOworICAgICAgICB9
LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgZGVwdGggc2NhbGUgdXNlZCBpbiBF
U00gbW9kZS4KKyAgICAgICAgICogVGhpcyBjYW4gb3ZlcnJpZGUgdGhlIHNjYWxlIHN0b3JlZCBv
biB0aGUgbGlnaHQuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgdGhpcy5fZGVwdGhTY2FsZSA9IHZhbHVlOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZSwg
ImZpbHRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGN1cnJlbnQgbW9k
ZSBvZiB0aGUgc2hhZG93IGdlbmVyYXRvciAobm9ybWFsLCBQQ0YsIEVTTS4uLikuCisgICAgICAg
ICAqIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhIG51bWJlciBlcXVhbCB0byBvbmUgb2YgdGhlIGF2
YWlsYWJsZSBtb2RlIGRlZmluZWQgaW4gU2hhZG93TWFwLkZJTFRFUl94IGxpa2UgX0ZJTFRFUl9O
T05FCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9maWx0ZXI7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAg
KiBTZXRzIHRoZSBjdXJyZW50IG1vZGUgb2YgdGhlIHNoYWRvdyBnZW5lcmF0b3IgKG5vcm1hbCwg
UENGLCBFU00uLi4pLgorICAgICAgICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYSBudW1iZXIg
ZXF1YWwgdG8gb25lIG9mIHRoZSBhdmFpbGFibGUgbW9kZSBkZWZpbmVkIGluIFNoYWRvd01hcC5G
SUxURVJfeCBsaWtlIF9GSUxURVJfTk9ORQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIC8vIEJsdXJyaW5nIHRoZSBjdWJlbWFwIGlzIGdv
aW5nIHRvIGJlIHRvbyBleHBlbnNpdmUuIFJldmVydGluZyB0byB1bmJsdXJyZWQgdmVyc2lvbgor
ICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0Lm5lZWRDdWJlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodmFsdWUgPT09IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfQkxVUkVYUE9ORU5USUFMU0hB
RE9XTUFQKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlRXhwb25lbnRpYWxTaGFkb3dN
YXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBTaGFkb3dHZW5lcmF0b3IuRklM
VEVSX0JMVVJDTE9TRUVYUE9ORU5USUFMU0hBRE9XTUFQKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMudXNlQ2xvc2VFeHBvbmVudGlhbFNoYWRvd01hcCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gUENG
IG9uIGN1YmVtYXAgd291bGQgYWxzbyBiZSBleHBlbnNpdmUKKyAgICAgICAgICAgICAgICBlbHNl
IGlmICh2YWx1ZSA9PT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9QQ0YgfHwgdmFsdWUgPT09IFNo
YWRvd0dlbmVyYXRvci5GSUxURVJfUENTUykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnVz
ZVBvaXNzb25TYW1wbGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBXZWJsZzEgZmFs
bGJhY2sgZm9yIFBDRi4KKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gU2hhZG93R2VuZXJhdG9y
LkZJTFRFUl9QQ0YgfHwgdmFsdWUgPT09IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfUENTUykgewor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS53ZWJHTFZlcnNpb24g
PT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VQb2lzc29uU2FtcGxpbmcgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbHRlciA9PT0gdmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9m
aWx0ZXIgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2VCbHVyUG9zdFByb2Nlc3Nl
cygpOworICAgICAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXJWYWx1ZXMoKTsKKyAgICAgICAgICAg
IHRoaXMuX2xpZ2h0Ll9tYXJrTWVzaGVzQXNMaWdodERpcnR5KCk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAi
dXNlUG9pc3NvblNhbXBsaW5nIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBpZiB0
aGUgY3VycmVudCBmaWx0ZXIgaXMgc2V0IHRvIFBvaXNzb24gU2FtcGxpbmcuCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZp
bHRlciA9PT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9QT0lTU09OU0FNUExJTkc7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGZpbHRlciB0byBQ
b2lzc29uIFNhbXBsaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdGhpcy5maWx0ZXIgIT09IFNoYWRvd0dl
bmVyYXRvci5GSUxURVJfUE9JU1NPTlNBTVBMSU5HKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSAodmFsdWUgPyBTaGFk
b3dHZW5lcmF0b3IuRklMVEVSX1BPSVNTT05TQU1QTElORyA6IFNoYWRvd0dlbmVyYXRvci5GSUxU
RVJfTk9ORSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShT
aGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAidXNlRXhwb25lbnRpYWxTaGFkb3dNYXAiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGlmIHRoZSBjdXJyZW50IGZpbHRlciBpcyBzZXQg
dG8gRVNNLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5maWx0ZXIgPT09IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfRVhQT05F
TlRJQUxTSEFET1dNQVA7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRz
IHRoZSBjdXJyZW50IGZpbHRlciBpcyB0byBFU00uCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKCF2YWx1ZSAmJiB0aGlzLmZpbHRl
ciAhPT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9FWFBPTkVOVElBTFNIQURPV01BUCkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZmls
dGVyID0gKHZhbHVlID8gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9FWFBPTkVOVElBTFNIQURPV01B
UCA6IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfTk9ORSk7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAidXNlQmx1
ckV4cG9uZW50aWFsU2hhZG93TWFwIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBp
ZiB0aGUgY3VycmVudCBmaWx0ZXIgaXMgc2V0IHRvIGZpbHRlcmVkIEVTTS4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmls
dGVyID09PSBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX0JMVVJFWFBPTkVOVElBTFNIQURPV01BUDsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgaWYgdGhlIGN1cnJlbnQg
ZmlsdGVyIGlzIHNldCB0byBmaWx0ZXJlZCAgRVNNLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdGhpcy5maWx0
ZXIgIT09IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfQkxVUkVYUE9ORU5USUFMU0hBRE9XTUFQKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5maWx0ZXIgPSAodmFsdWUgPyBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX0JMVVJFWFBPTkVOVElB
TFNIQURPV01BUCA6IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfTk9ORSk7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBl
LCAidXNlQ2xvc2VFeHBvbmVudGlhbFNoYWRvd01hcCIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgaWYgdGhlIGN1cnJlbnQgZmlsdGVyIGlzIHNldCB0byAiY2xvc2UgRVNNIiAodXNp
bmcgdGhlIGludmVyc2Ugb2YgdGhlCisgICAgICAgICAqIGV4cG9uZW50aWFsIHRvIHByZXZlbnQg
c3RlZXAgZmFsbG9mZiBhcnRpZmFjdHMpLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIgPT09IFNoYWRvd0dlbmVy
YXRvci5GSUxURVJfQ0xPU0VFWFBPTkVOVElBTFNIQURPV01BUDsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGN1cnJlbnQgZmlsdGVyIHRvICJjbG9zZSBFU00i
ICh1c2luZyB0aGUgaW52ZXJzZSBvZiB0aGUKKyAgICAgICAgICogZXhwb25lbnRpYWwgdG8gcHJl
dmVudCBzdGVlcCBmYWxsb2ZmIGFydGlmYWN0cykuCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKCF2YWx1ZSAmJiB0aGlzLmZpbHRl
ciAhPT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9DTE9TRUVYUE9ORU5USUFMU0hBRE9XTUFQKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5maWx0ZXIgPSAodmFsdWUgPyBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX0NMT1NFRVhQT05FTlRJ
QUxTSEFET1dNQVAgOiBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX05PTkUpOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZG93R2VuZXJhdG9yLnByb3RvdHlw
ZSwgInVzZUJsdXJDbG9zZUV4cG9uZW50aWFsU2hhZG93TWFwIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBpZiB0aGUgY3VycmVudCBmaWx0ZXIgaXMgc2V0IHRvIGZpbHRlcmVkICJj
bG9zZSBFU00iICh1c2luZyB0aGUgaW52ZXJzZSBvZiB0aGUKKyAgICAgICAgICogZXhwb25lbnRp
YWwgdG8gcHJldmVudCBzdGVlcCBmYWxsb2ZmIGFydGlmYWN0cykuCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlciA9
PT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9CTFVSQ0xPU0VFWFBPTkVOVElBTFNIQURPV01BUDsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGN1cnJlbnQgZmls
dGVyIHRvIGZpbHRlcmVkICJjbG9zZSBFU00iICh1c2luZyB0aGUgaW52ZXJzZSBvZiB0aGUKKyAg
ICAgICAgICogZXhwb25lbnRpYWwgdG8gcHJldmVudCBzdGVlcCBmYWxsb2ZmIGFydGlmYWN0cyku
CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAg
ICAgaWYgKCF2YWx1ZSAmJiB0aGlzLmZpbHRlciAhPT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9C
TFVSQ0xPU0VFWFBPTkVOVElBTFNIQURPV01BUCkgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZmlsdGVyID0gKHZhbHVlID8gU2hhZG93
R2VuZXJhdG9yLkZJTFRFUl9CTFVSQ0xPU0VFWFBPTkVOVElBTFNIQURPV01BUCA6IFNoYWRvd0dl
bmVyYXRvci5GSUxURVJfTk9ORSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAidXNlUGVyY2VudGFnZUNsb3Nl
ckZpbHRlcmluZyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgaWYgdGhlIGN1cnJl
bnQgZmlsdGVyIGlzIHNldCB0byAiUENGIiAocGVyY2VudGFnZSBjbG9zZXIgZmlsdGVyaW5nKS4K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmlsdGVyID09PSBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX1BDRjsKKyAgICAgICAg
fSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGN1cnJlbnQgZmlsdGVyIHRvICJQ
Q0YiIChwZXJjZW50YWdlIGNsb3NlciBmaWx0ZXJpbmcpLgorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdGhpcy5m
aWx0ZXIgIT09IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfUENGKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSAodmFsdWUg
PyBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX1BDRiA6IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfTk9O
RSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dH
ZW5lcmF0b3IucHJvdG90eXBlLCAiZmlsdGVyaW5nUXVhbGl0eSIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIFBDRiBvciBQQ1NTIFF1YWxpdHkuCisgICAgICAgICAqIE9ubHkg
dmFsaWQgaWYgdXNlUGVyY2VudGFnZUNsb3NlckZpbHRlcmluZyBvciB1c2VQZXJjZW50YWdlQ2xv
c2VyRmlsdGVyaW5nIGlzIHRydWUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJpbmdRdWFsaXR5OworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgUENGIG9yIFBDU1MgUXVhbGl0
eS4KKyAgICAgICAgICogT25seSB2YWxpZCBpZiB1c2VQZXJjZW50YWdlQ2xvc2VyRmlsdGVyaW5n
IG9yIHVzZVBlcmNlbnRhZ2VDbG9zZXJGaWx0ZXJpbmcgaXMgdHJ1ZS4KKyAgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKGZpbHRlcmluZ1F1YWxpdHkpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9maWx0ZXJpbmdRdWFsaXR5ID09PSBmaWx0ZXJpbmdRdWFsaXR5KSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZmlsdGVy
aW5nUXVhbGl0eSA9IGZpbHRlcmluZ1F1YWxpdHk7CisgICAgICAgICAgICB0aGlzLl9kaXNwb3Nl
Qmx1clBvc3RQcm9jZXNzZXMoKTsKKyAgICAgICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyVmFsdWVz
KCk7CisgICAgICAgICAgICB0aGlzLl9saWdodC5fbWFya01lc2hlc0FzTGlnaHREaXJ0eSgpOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZG93R2VuZXJh
dG9yLnByb3RvdHlwZSwgInVzZUNvbnRhY3RIYXJkZW5pbmdTaGFkb3ciLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIGlmIHRoZSBjdXJyZW50IGZpbHRlciBpcyBzZXQgdG8gIlBDU1Mi
IChjb250YWN0IGhhcmRlbmluZykuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlciA9PT0gU2hhZG93R2VuZXJhdG9y
LkZJTFRFUl9QQ1NTOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0
aGUgY3VycmVudCBmaWx0ZXIgdG8gIlBDU1MiIChjb250YWN0IGhhcmRlbmluZykuCisgICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKCF2
YWx1ZSAmJiB0aGlzLmZpbHRlciAhPT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9QQ1NTKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5m
aWx0ZXIgPSAodmFsdWUgPyBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX1BDU1MgOiBTaGFkb3dHZW5l
cmF0b3IuRklMVEVSX05PTkUpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZSwgImNvbnRhY3RIYXJkZW5pbmdMaWdo
dFNpemVVVlJhdGlvIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgTGlnaHQg
U2l6ZSAoaW4gc2hhZG93IG1hcCB1diB1bml0KSB1c2VkIGluIFBDU1MgdG8gZGV0ZXJtaW5lIHRo
ZSBibG9ja2VyIHNlYXJjaCBhcmVhIGFuZCB0aGUgcGVudW1icmEgc2l6ZS4KKyAgICAgICAgICog
VXNpbmcgYSByYXRpbyBoZWxwcyBrZWVwaW5nIHNoYXBlIHN0YWJpbGl0eSBpbmRlcGVuZGVudGx5
IG9mIHRoZSBtYXAgc2l6ZS4KKyAgICAgICAgICoKKyAgICAgICAgICogSXQgZG9lcyBub3QgYWNj
b3VudCBmb3IgdGhlIGxpZ2h0IHByb2plY3Rpb24gYXMgaXQgd2FzIGhhdmluZyB0b28gbXVjaAor
ICAgICAgICAgKiBpbnN0YWJpbGl0eSBkdXJpbmcgdGhlIGxpZ2h0IHNldHVwIG9yIGR1cmluZyBs
aWdodCBwb3NpdGlvbiBjaGFuZ2VzLgorICAgICAgICAgKgorICAgICAgICAgKiBPbmx5IHZhbGlk
IGlmIHVzZUNvbnRhY3RIYXJkZW5pbmdTaGFkb3cgaXMgdHJ1ZS4KKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhY3RI
YXJkZW5pbmdMaWdodFNpemVVVlJhdGlvOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAg
ICAgICogU2V0cyB0aGUgTGlnaHQgU2l6ZSAoaW4gc2hhZG93IG1hcCB1diB1bml0KSB1c2VkIGlu
IFBDU1MgdG8gZGV0ZXJtaW5lIHRoZSBibG9ja2VyIHNlYXJjaCBhcmVhIGFuZCB0aGUgcGVudW1i
cmEgc2l6ZS4KKyAgICAgICAgICogVXNpbmcgYSByYXRpbyBoZWxwcyBrZWVwaW5nIHNoYXBlIHN0
YWJpbGl0eSBpbmRlcGVuZGVudGx5IG9mIHRoZSBtYXAgc2l6ZS4KKyAgICAgICAgICoKKyAgICAg
ICAgICogSXQgZG9lcyBub3QgYWNjb3VudCBmb3IgdGhlIGxpZ2h0IHByb2plY3Rpb24gYXMgaXQg
d2FzIGhhdmluZyB0b28gbXVjaAorICAgICAgICAgKiBpbnN0YWJpbGl0eSBkdXJpbmcgdGhlIGxp
Z2h0IHNldHVwIG9yIGR1cmluZyBsaWdodCBwb3NpdGlvbiBjaGFuZ2VzLgorICAgICAgICAgKgor
ICAgICAgICAgKiBPbmx5IHZhbGlkIGlmIHVzZUNvbnRhY3RIYXJkZW5pbmdTaGFkb3cgaXMgdHJ1
ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKGNvbnRhY3RIYXJkZW5pbmdM
aWdodFNpemVVVlJhdGlvKSB7CisgICAgICAgICAgICB0aGlzLl9jb250YWN0SGFyZGVuaW5nTGln
aHRTaXplVVZSYXRpbyA9IGNvbnRhY3RIYXJkZW5pbmdMaWdodFNpemVVVlJhdGlvOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZG93R2VuZXJhdG9yLnBy
b3RvdHlwZSwgImRhcmtuZXNzIiwgeworICAgICAgICAvKiogR2V0cyBvciBzZXRzIHRoZSBhY3R1
YWwgZGFya25lc3Mgb2YgYSBzaGFkb3cgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZGFya25lc3M7CisgICAgICAgIH0sCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLnNldERhcmtuZXNzKHZhbHVl
KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZGFya25l
c3MgdmFsdWUgKGZsb2F0KS4gVGhpcyBjYW4gb25seSBkZWNyZWFzZSB0aGUgYWN0dWFsIGRhcmtu
ZXNzIG9mIGEgc2hhZG93LgorICAgICAqIDAgbWVhbnMgc3Ryb25nZXN0IGFuZCAxIHdvdWxkIG1l
YW5zIG5vIHNoYWRvdy4KKyAgICAgKiBAcmV0dXJucyB0aGUgZGFya25lc3MuCisgICAgICovCisg
ICAgU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZS5nZXREYXJrbmVzcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2RhcmtuZXNzOworICAgIH07CisgICAgLyoqCisgICAgICog
U2V0cyB0aGUgZGFya25lc3MgdmFsdWUgKGZsb2F0KS4gVGhpcyBjYW4gb25seSBkZWNyZWFzZSB0
aGUgYWN0dWFsIGRhcmtuZXNzIG9mIGEgc2hhZG93LgorICAgICAqIEBwYXJhbSBkYXJrbmVzcyBU
aGUgZGFya25lc3MgdmFsdWUgMCBtZWFucyBzdHJvbmdlc3QgYW5kIDEgd291bGQgbWVhbnMgbm8g
c2hhZG93LgorICAgICAqIEByZXR1cm5zIHRoZSBzaGFkb3cgZ2VuZXJhdG9yIGFsbG93aW5nIGZs
dWVudCBjb2RpbmcuCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZS5zZXRE
YXJrbmVzcyA9IGZ1bmN0aW9uIChkYXJrbmVzcykgeworICAgICAgICBpZiAoZGFya25lc3MgPj0g
MS4wKSB7CisgICAgICAgICAgICB0aGlzLl9kYXJrbmVzcyA9IDEuMDsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChkYXJrbmVzcyA8PSAwLjApIHsKKyAgICAgICAgICAgIHRoaXMuX2Rhcmtu
ZXNzID0gMC4wOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5f
ZGFya25lc3MgPSBkYXJrbmVzczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBl
LCAidHJhbnNwYXJlbmN5U2hhZG93IiwgeworICAgICAgICAvKiogR2V0cyBvciBzZXRzIHRoZSBh
YmlsaXR5IHRvIGhhdmUgdHJhbnNwYXJlbnQgc2hhZG93ICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BhcmVuY3lTaGFkb3c7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0
aGlzLnNldFRyYW5zcGFyZW5jeVNoYWRvdyh2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IC8qKgorICAgICAqIFNldHMgdGhlIGFiaWxpdHkgdG8gaGF2ZSB0cmFuc3BhcmVudCBzaGFkb3cg
KGJvb2xlYW4pLgorICAgICAqIEBwYXJhbSB0cmFuc3BhcmVudCBUcnVlIGlmIHRyYW5zcGFyZW50
IGVsc2UgRmFsc2UKKyAgICAgKiBAcmV0dXJucyB0aGUgc2hhZG93IGdlbmVyYXRvciBhbGxvd2lu
ZyBmbHVlbnQgY29kaW5nCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZS5z
ZXRUcmFuc3BhcmVuY3lTaGFkb3cgPSBmdW5jdGlvbiAodHJhbnNwYXJlbnQpIHsKKyAgICAgICAg
dGhpcy5fdHJhbnNwYXJlbmN5U2hhZG93ID0gdHJhbnNwYXJlbnQ7CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbWFpbiBSVFQgY29udGFpbmlu
ZyB0aGUgc2hhZG93IG1hcCAodXN1YWxseSBzdG9yaW5nIGRlcHRoIGZyb20gdGhlIGxpZ2h0IHBv
aW50IG9mIHZpZXcpLgorICAgICAqIEByZXR1cm5zIFRoZSByZW5kZXIgdGFyZ2V0IHRleHR1cmUg
aWYgcHJlc2VudCBvdGhlcndpc2UsIG51bGwKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3Iu
cHJvdG90eXBlLmdldFNoYWRvd01hcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX3NoYWRvd01hcDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIFJUVCB1c2Vk
IGR1cmluZyByZW5kZXJpbmcgKGNhbiBiZSBhIGJsdXJyZWQgdmVyc2lvbiBvZiB0aGUgc2hhZG93
IG1hcCBvciB0aGUgc2hhZG93IG1hcCBpdHNlbGYpLgorICAgICAqIEByZXR1cm5zIFRoZSByZW5k
ZXIgdGFyZ2V0IHRleHR1cmUgaWYgdGhlIHNoYWRvdyBtYXAgaXMgcHJlc2VudCBvdGhlcndpc2Us
IG51bGwKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLmdldFNoYWRvd01h
cEZvclJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3NoYWRvd01h
cDIpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFkb3dNYXAyOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLl9zaGFkb3dNYXA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoYXQgb2JqZWN0CisgICAgICogQHJldHVybnMgIlNoYWRv
d0dlbmVyYXRvciIKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLmdldENs
YXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJTaGFkb3dHZW5lcmF0b3Ii
OworICAgIH07CisgICAgLyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGFkZCBhIG1lc2gg
YW5kIGl0cyBkZXNjZW5kYW50cyB0byB0aGUgbGlzdCBvZiBzaGFkb3cgY2FzdGVycy4KKyAgICAg
KiBAcGFyYW0gbWVzaCBNZXNoIHRvIGFkZAorICAgICAqIEBwYXJhbSBpbmNsdWRlRGVzY2VuZGFu
dHMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBkZXNjZW5kYW50cyBzaG91bGQgYmUgYWRkZWQu
IERlZmF1bHQgdG8gdHJ1ZQorICAgICAqIEByZXR1cm5zIHRoZSBTaGFkb3cgR2VuZXJhdG9yIGl0
c2VsZgorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUuYWRkU2hhZG93Q2Fz
dGVyID0gZnVuY3Rpb24gKG1lc2gsIGluY2x1ZGVEZXNjZW5kYW50cykgeworICAgICAgICB2YXIg
X2E7CisgICAgICAgIGlmIChpbmNsdWRlRGVzY2VuZGFudHMgPT09IHZvaWQgMCkgeyBpbmNsdWRl
RGVzY2VuZGFudHMgPSB0cnVlOyB9CisgICAgICAgIGlmICghdGhpcy5fc2hhZG93TWFwKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX3No
YWRvd01hcC5yZW5kZXJMaXN0KSB7CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dNYXAucmVuZGVy
TGlzdCA9IFtdOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NoYWRvd01hcC5yZW5kZXJMaXN0
LnB1c2gobWVzaCk7CisgICAgICAgIGlmIChpbmNsdWRlRGVzY2VuZGFudHMpIHsKKyAgICAgICAg
ICAgIChfYSA9IHRoaXMuX3NoYWRvd01hcC5yZW5kZXJMaXN0KS5wdXNoLmFwcGx5KF9hLCBtZXNo
LmdldENoaWxkTWVzaGVzKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlbW92ZSBhIG1lc2ggYW5k
IGl0cyBkZXNjZW5kYW50cyBmcm9tIHRoZSBsaXN0IG9mIHNoYWRvdyBjYXN0ZXJzCisgICAgICog
QHBhcmFtIG1lc2ggTWVzaCB0byByZW1vdmUKKyAgICAgKiBAcGFyYW0gaW5jbHVkZURlc2NlbmRh
bnRzIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgZGVzY2VuZGFudHMgc2hvdWxkIGJlIHJlbW92
ZWQuIERlZmF1bHQgdG8gdHJ1ZQorICAgICAqIEByZXR1cm5zIHRoZSBTaGFkb3cgR2VuZXJhdG9y
IGl0c2VsZgorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUucmVtb3ZlU2hh
ZG93Q2FzdGVyID0gZnVuY3Rpb24gKG1lc2gsIGluY2x1ZGVEZXNjZW5kYW50cykgeworICAgICAg
ICBpZiAoaW5jbHVkZURlc2NlbmRhbnRzID09PSB2b2lkIDApIHsgaW5jbHVkZURlc2NlbmRhbnRz
ID0gdHJ1ZTsgfQorICAgICAgICBpZiAoIXRoaXMuX3NoYWRvd01hcCB8fCAhdGhpcy5fc2hhZG93
TWFwLnJlbmRlckxpc3QpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9Cisg
ICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NoYWRvd01hcC5yZW5kZXJMaXN0LmluZGV4T2YobWVz
aCk7CisgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuX3NoYWRv
d01hcC5yZW5kZXJMaXN0LnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGluY2x1ZGVEZXNjZW5kYW50cykgeworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9
IG1lc2guZ2V0Q2hpbGRyZW4oKTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAg
ICAgICB2YXIgY2hpbGQgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTaGFk
b3dDYXN0ZXIoY2hpbGQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYXNzb2NpYXRlZCBs
aWdodCBvYmplY3QuCisgICAgICogQHJldHVybnMgdGhlIGxpZ2h0IGdlbmVyYXRpbmcgdGhlIHNo
YWRvdworICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUuZ2V0TGlnaHQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9saWdodDsKKyAgICB9OworICAgIFNo
YWRvd0dlbmVyYXRvci5wcm90b3R5cGUuX2luaXRpYWxpemVHZW5lcmF0b3IgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRoaXMuX2xpZ2h0Ll9tYXJrTWVzaGVzQXNMaWdodERpcnR5KCk7CisgICAg
ICAgIHRoaXMuX2luaXRpYWxpemVTaGFkb3dNYXAoKTsKKyAgICB9OworICAgIFNoYWRvd0dlbmVy
YXRvci5wcm90b3R5cGUuX2luaXRpYWxpemVTaGFkb3dNYXAgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIC8vIFJlbmRlciB0YXJnZXQKKyAgICAgICAg
dmFyIGVuZ2luZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAoZW5naW5l
LndlYkdMVmVyc2lvbiA+IDEpIHsKKyAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcCA9IG5ldyBf
TWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdKHRoaXMuX2xpZ2h0Lm5hbWUgKyAiX3No
YWRvd01hcCIsIHRoaXMuX21hcFNpemUsIHRoaXMuX3NjZW5lLCBmYWxzZSwgdHJ1ZSwgdGhpcy5f
dGV4dHVyZVR5cGUsIHRoaXMuX2xpZ2h0Lm5lZWRDdWJlKCksIHVuZGVmaW5lZCwgZmFsc2UsIGZh
bHNlKTsKKyAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcC5jcmVhdGVEZXB0aFN0ZW5jaWxUZXh0
dXJlKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siQ29u
c3RhbnRzIl0uTEVTUywgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLl9zaGFkb3dNYXAgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJn
ZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlJlbmRlclRhcmdldFRleHR1
cmUiXSh0aGlzLl9saWdodC5uYW1lICsgIl9zaGFkb3dNYXAiLCB0aGlzLl9tYXBTaXplLCB0aGlz
Ll9zY2VuZSwgZmFsc2UsIHRydWUsIHRoaXMuX3RleHR1cmVUeXBlLCB0aGlzLl9saWdodC5uZWVk
Q3ViZSgpKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zaGFkb3dNYXAud3JhcFUgPSBfTWF0
ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVGV4
dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICB0aGlzLl9zaGFkb3dNYXAud3JhcFYg
PSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
X1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICB0aGlzLl9zaGFkb3dNYXAu
YW5pc290cm9waWNGaWx0ZXJpbmdMZXZlbCA9IDE7CisgICAgICAgIHRoaXMuX3NoYWRvd01hcC51
cGRhdGVTYW1wbGluZ01vZGUoX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV84X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUpOworICAg
ICAgICB0aGlzLl9zaGFkb3dNYXAucmVuZGVyUGFydGljbGVzID0gZmFsc2U7CisgICAgICAgIHRo
aXMuX3NoYWRvd01hcC5pZ25vcmVDYW1lcmFWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIC8vIFJl
Y29yZCBGYWNlIEluZGV4IGJlZm9yZSByZW5kZXIuCisgICAgICAgIHRoaXMuX3NoYWRvd01hcC5v
bkJlZm9yZVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChmYWNlSW5kZXgpIHsKKyAgICAg
ICAgICAgIF90aGlzLl9jdXJyZW50RmFjZUluZGV4ID0gZmFjZUluZGV4OworICAgICAgICAgICAg
aWYgKF90aGlzLl9maWx0ZXIgPT09IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfUENGKSB7CisgICAg
ICAgICAgICAgICAgZW5naW5lLnNldENvbG9yV3JpdGUoZmFsc2UpOworICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICAgICAgLy8gQ3VzdG9tIHJlbmRlciBmdW5jdGlvbi4KKyAgICAgICAg
dGhpcy5fc2hhZG93TWFwLmN1c3RvbVJlbmRlckZ1bmN0aW9uID0gdGhpcy5fcmVuZGVyRm9yU2hh
ZG93TWFwLmJpbmQodGhpcyk7CisgICAgICAgIC8vIEJsdXIgaWYgcmVxdWlyZWQgYWZlciByZW5k
ZXIuCisgICAgICAgIHRoaXMuX3NoYWRvd01hcC5vbkFmdGVyVW5iaW5kT2JzZXJ2YWJsZS5hZGQo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKF90aGlzLl9maWx0ZXIgPT09IFNoYWRvd0dl
bmVyYXRvci5GSUxURVJfUENGKSB7CisgICAgICAgICAgICAgICAgZW5naW5lLnNldENvbG9yV3Jp
dGUodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIV90aGlzLnVzZUJsdXJF
eHBvbmVudGlhbFNoYWRvd01hcCAmJiAhX3RoaXMudXNlQmx1ckNsb3NlRXhwb25lbnRpYWxTaGFk
b3dNYXApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgc2hhZG93TWFwID0gX3RoaXMuZ2V0U2hhZG93TWFwRm9yUmVuZGVyaW5nKCk7Cisg
ICAgICAgICAgICBpZiAoc2hhZG93TWFwKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3NjZW5l
LnBvc3RQcm9jZXNzTWFuYWdlci5kaXJlY3RSZW5kZXIoX3RoaXMuX2JsdXJQb3N0UHJvY2Vzc2Vz
LCBzaGFkb3dNYXAuZ2V0SW50ZXJuYWxUZXh0dXJlKCksIHRydWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICAgICAgLy8gQ2xlYXIgYWNjb3JkaW5nIHRvIHRoZSBjaG9zZW4gZmls
dGVyLgorICAgICAgICB2YXIgY2xlYXJaZXJvID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9yNCJdKDAsIDAsIDAsIDApOworICAgICAgICB2
YXIgY2xlYXJPbmUgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siQ29sb3I0Il0oMS4wLCAxLjAsIDEuMCwgMS4wKTsKKyAgICAgICAgdGhpcy5fc2hh
ZG93TWFwLm9uQ2xlYXJPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZW5naW5lKSB7CisgICAgICAg
ICAgICBpZiAoX3RoaXMuX2ZpbHRlciA9PT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9QQ0YpIHsK
KyAgICAgICAgICAgICAgICBlbmdpbmUuY2xlYXIoY2xlYXJPbmUsIGZhbHNlLCB0cnVlLCBmYWxz
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy51c2VFeHBvbmVu
dGlhbFNoYWRvd01hcCB8fCBfdGhpcy51c2VCbHVyRXhwb25lbnRpYWxTaGFkb3dNYXApIHsKKyAg
ICAgICAgICAgICAgICBlbmdpbmUuY2xlYXIoY2xlYXJaZXJvLCB0cnVlLCB0cnVlLCBmYWxzZSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbmdp
bmUuY2xlYXIoY2xlYXJPbmUsIHRydWUsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CisgICAgICAgIHRoaXMuX3NoYWRvd01hcC5vblJlc2l6ZU9ic2VydmFibGUuYWRk
KGZ1bmN0aW9uIChSVFQpIHsKKyAgICAgICAgICAgIF90aGlzLl9tYXBTaXplID0gUlRULmdldFJl
bmRlclNpemUoKTsKKyAgICAgICAgICAgIF90aGlzLl9saWdodC5fbWFya01lc2hlc0FzTGlnaHRE
aXJ0eSgpOworICAgICAgICAgICAgX3RoaXMucmVjcmVhdGVTaGFkb3dNYXAoKTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICBTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLl9pbml0aWFsaXplQmx1
clJUVEFuZFBvc3RQcm9jZXNzZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKTsKKyAg
ICAgICAgdmFyIHRhcmdldFNpemUgPSB0aGlzLl9tYXBTaXplIC8gdGhpcy5ibHVyU2NhbGU7Cisg
ICAgICAgIGlmICghdGhpcy51c2VLZXJuZWxCbHVyIHx8IHRoaXMuYmx1clNjYWxlICE9PSAxLjAp
IHsKKyAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcDIgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJl
c19yZW5kZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlJlbmRl
clRhcmdldFRleHR1cmUiXSh0aGlzLl9saWdodC5uYW1lICsgIl9zaGFkb3dNYXAyIiwgdGFyZ2V0
U2l6ZSwgdGhpcy5fc2NlbmUsIGZhbHNlLCB0cnVlLCB0aGlzLl90ZXh0dXJlVHlwZSk7CisgICAg
ICAgICAgICB0aGlzLl9zaGFkb3dNYXAyLndyYXBVID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0
dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNT
TU9ERTsKKyAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcDIud3JhcFYgPSBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVGV4dHVyZSJdLkNM
QU1QX0FERFJFU1NNT0RFOworICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwMi51cGRhdGVTYW1w
bGluZ01vZGUoX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLnVzZUtlcm5lbEJsdXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2tlcm5l
bEJsdXJYUG9zdHByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJCbHVyUG9zdFByb2Nlc3MiXSh0aGlzLl9saWdo
dC5uYW1lICsgIktlcm5lbEJsdXJYIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0oMSwgMCksIHRoaXMuYmx1cktlcm5lbCwgMS4w
LCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgZW5naW5lLCBmYWxzZSwg
dGhpcy5fdGV4dHVyZVR5cGUpOworICAgICAgICAgICAgdGhpcy5fa2VybmVsQmx1clhQb3N0cHJv
Y2Vzcy53aWR0aCA9IHRhcmdldFNpemU7CisgICAgICAgICAgICB0aGlzLl9rZXJuZWxCbHVyWFBv
c3Rwcm9jZXNzLmhlaWdodCA9IHRhcmdldFNpemU7CisgICAgICAgICAgICB0aGlzLl9rZXJuZWxC
bHVyWFBvc3Rwcm9jZXNzLm9uQXBwbHlPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZWZmZWN0KSB7
CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInRleHR1cmVTYW1wbGVyIiwgX3Ro
aXMuX3NoYWRvd01hcCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMuX2tlcm5l
bEJsdXJZUG9zdHByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJCbHVyUG9zdFByb2Nlc3MiXSh0aGlzLl9saWdo
dC5uYW1lICsgIktlcm5lbEJsdXJZIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0oMCwgMSksIHRoaXMuYmx1cktlcm5lbCwgMS4w
LCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgZW5naW5lLCBmYWxzZSwg
dGhpcy5fdGV4dHVyZVR5cGUpOworICAgICAgICAgICAgdGhpcy5fa2VybmVsQmx1clhQb3N0cHJv
Y2Vzcy5hdXRvQ2xlYXIgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2tlcm5lbEJsdXJZUG9z
dHByb2Nlc3MuYXV0b0NsZWFyID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVy
ZVR5cGUgPT09IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJf
X1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fa2VybmVsQmx1clhQb3N0cHJvY2Vzcy5wYWNrZWRGbG9hdCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgdGhpcy5fa2VybmVsQmx1cllQb3N0cHJvY2Vzcy5wYWNrZWRGbG9hdCA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9ibHVyUG9zdFByb2Nlc3NlcyA9
IFt0aGlzLl9rZXJuZWxCbHVyWFBvc3Rwcm9jZXNzLCB0aGlzLl9rZXJuZWxCbHVyWVBvc3Rwcm9j
ZXNzXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2JveEJs
dXJQb3N0cHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTBfX1siUG9zdFByb2Nlc3MiXSh0aGlzLl9saWdodC5uYW1lICsgIkRl
cHRoQm94Qmx1ciIsICJkZXB0aEJveEJsdXIiLCBbInNjcmVlblNpemUiLCAiYm94T2Zmc2V0Il0s
IFtdLCAxLjAsIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBlbmdpbmUs
IGZhbHNlLCAiI2RlZmluZSBPRkZTRVQgIiArIHRoaXMuX2JsdXJCb3hPZmZzZXQsIHRoaXMuX3Rl
eHR1cmVUeXBlKTsKKyAgICAgICAgICAgIHRoaXMuX2JveEJsdXJQb3N0cHJvY2Vzcy5vbkFwcGx5
T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAgICAgIGVmZmVj
dC5zZXRGbG9hdDIoInNjcmVlblNpemUiLCB0YXJnZXRTaXplLCB0YXJnZXRTaXplKTsKKyAgICAg
ICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgidGV4dHVyZVNhbXBsZXIiLCBfdGhpcy5fc2hh
ZG93TWFwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5fYm94Qmx1clBvc3Rw
cm9jZXNzLmF1dG9DbGVhciA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fYmx1clBvc3RQcm9j
ZXNzZXMgPSBbdGhpcy5fYm94Qmx1clBvc3Rwcm9jZXNzXTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZS5fcmVuZGVyRm9yU2hhZG93TWFwID0gZnVuY3Rp
b24gKG9wYXF1ZVN1Yk1lc2hlcywgYWxwaGFUZXN0U3ViTWVzaGVzLCB0cmFuc3BhcmVudFN1Yk1l
c2hlcywgZGVwdGhPbmx5U3ViTWVzaGVzKSB7CisgICAgICAgIHZhciBpbmRleDsKKyAgICAgICAg
dmFyIGVuZ2luZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAoZGVwdGhP
bmx5U3ViTWVzaGVzLmxlbmd0aCkgeworICAgICAgICAgICAgZW5naW5lLnNldENvbG9yV3JpdGUo
ZmFsc2UpOworICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZGVwdGhPbmx5U3Vi
TWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlclN1
Yk1lc2hGb3JTaGFkb3dNYXAoZGVwdGhPbmx5U3ViTWVzaGVzLmRhdGFbaW5kZXhdKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVuZ2luZS5zZXRDb2xvcldyaXRlKHRydWUpOworICAgICAg
ICB9CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG9wYXF1ZVN1Yk1lc2hlcy5sZW5n
dGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlclN1Yk1lc2hGb3JTaGFkb3dN
YXAob3BhcXVlU3ViTWVzaGVzLmRhdGFbaW5kZXhdKTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KGluZGV4ID0gMDsgaW5kZXggPCBhbHBoYVRlc3RTdWJNZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7
CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJTdWJNZXNoRm9yU2hhZG93TWFwKGFscGhhVGVzdFN1
Yk1lc2hlcy5kYXRhW2luZGV4XSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3RyYW5z
cGFyZW5jeVNoYWRvdykgeworICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdHJh
bnNwYXJlbnRTdWJNZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fcmVuZGVyU3ViTWVzaEZvclNoYWRvd01hcCh0cmFuc3BhcmVudFN1Yk1lc2hlcy5kYXRhW2lu
ZGV4XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIFNoYWRvd0dlbmVy
YXRvci5wcm90b3R5cGUuX3JlbmRlclN1Yk1lc2hGb3JTaGFkb3dNYXAgPSBmdW5jdGlvbiAoc3Vi
TWVzaCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgbWVzaCA9IHN1
Yk1lc2guZ2V0UmVuZGVyaW5nTWVzaCgpOworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2Vu
ZTsKKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICB2YXIg
bWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7CisgICAgICAgIG1lc2guX2ludGVybmFs
QWJzdHJhY3RNZXNoRGF0YUluZm8uX2lzQWN0aXZlSW50ZXJtZWRpYXRlID0gZmFsc2U7CisgICAg
ICAgIGlmICghbWF0ZXJpYWwgfHwgc3ViTWVzaC52ZXJ0aWNlc0NvdW50ID09PSAwKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gQ3VsbGluZworICAgICAgICBl
bmdpbmUuc2V0U3RhdGUobWF0ZXJpYWwuYmFja0ZhY2VDdWxsaW5nKTsKKyAgICAgICAgLy8gTWFu
YWdpbmcgaW5zdGFuY2VzCisgICAgICAgIHZhciBiYXRjaCA9IG1lc2guX2dldEluc3RhbmNlc1Jl
bmRlckxpc3Qoc3ViTWVzaC5faWQpOworICAgICAgICBpZiAoYmF0Y2gubXVzdFJldHVybikgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBoYXJkd2FyZUluc3Rh
bmNlZFJlbmRlcmluZyA9IChlbmdpbmUuZ2V0Q2FwcygpLmluc3RhbmNlZEFycmF5cykgJiYgKGJh
dGNoLnZpc2libGVJbnN0YW5jZXNbc3ViTWVzaC5faWRdICE9PSBudWxsKSAmJiAoYmF0Y2gudmlz
aWJsZUluc3RhbmNlc1tzdWJNZXNoLl9pZF0gIT09IHVuZGVmaW5lZCk7CisgICAgICAgIGlmICh0
aGlzLmlzUmVhZHkoc3ViTWVzaCwgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcpKSB7CisgICAg
ICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KHRoaXMuX2VmZmVjdCk7CisgICAgICAgICAgICBt
ZXNoLl9iaW5kKHN1Yk1lc2gsIHRoaXMuX2VmZmVjdCwgX01hdGVyaWFsc19tYXRlcmlhbF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlhbCJdLlRyaWFuZ2xlRmlsbE1vZGUpOwor
ICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldEZsb2F0MygiYmlhc0FuZFNjYWxlIiwgdGhpcy5i
aWFzLCB0aGlzLm5vcm1hbEJpYXMsIHRoaXMuZGVwdGhTY2FsZSk7CisgICAgICAgICAgICB0aGlz
Ll9lZmZlY3Quc2V0TWF0cml4KCJ2aWV3UHJvamVjdGlvbiIsIHRoaXMuZ2V0VHJhbnNmb3JtTWF0
cml4KCkpOworICAgICAgICAgICAgaWYgKHRoaXMuZ2V0TGlnaHQoKS5nZXRUeXBlSUQoKSA9PT0g
X0xpZ2h0c19saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJMaWdodCJdLkxJR0hU
VFlQRUlEX0RJUkVDVElPTkFMTElHSFQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3Qu
c2V0VmVjdG9yMygibGlnaHREYXRhIiwgdGhpcy5fY2FjaGVkRGlyZWN0aW9uKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5z
ZXRWZWN0b3IzKCJsaWdodERhdGEiLCB0aGlzLl9jYWNoZWRQb3NpdGlvbik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoc2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fZWZmZWN0LnNldEZsb2F0MigiZGVwdGhWYWx1ZXMiLCB0aGlzLmdldExpZ2h0KCku
Z2V0RGVwdGhNaW5aKHNjZW5lLmFjdGl2ZUNhbWVyYSksIHRoaXMuZ2V0TGlnaHQoKS5nZXREZXB0
aE1pblooc2NlbmUuYWN0aXZlQ2FtZXJhKSArIHRoaXMuZ2V0TGlnaHQoKS5nZXREZXB0aE1heFoo
c2NlbmUuYWN0aXZlQ2FtZXJhKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBBbHBo
YSB0ZXN0CisgICAgICAgICAgICBpZiAobWF0ZXJpYWwgJiYgbWF0ZXJpYWwubmVlZEFscGhhVGVz
dGluZygpKSB7CisgICAgICAgICAgICAgICAgdmFyIGFscGhhVGV4dHVyZSA9IG1hdGVyaWFsLmdl
dEFscGhhVGVzdFRleHR1cmUoKTsKKyAgICAgICAgICAgICAgICBpZiAoYWxwaGFUZXh0dXJlKSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRUZXh0dXJlKCJkaWZmdXNlU2Ft
cGxlciIsIGFscGhhVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5z
ZXRNYXRyaXgoImRpZmZ1c2VNYXRyaXgiLCBhbHBoYVRleHR1cmUuZ2V0VGV4dHVyZU1hdHJpeCgp
IHx8IHRoaXMuX2RlZmF1bHRUZXh0dXJlTWF0cml4KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBCb25lcworICAgICAgICAgICAgaWYgKG1lc2gudXNl
Qm9uZXMgJiYgbWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgJiYgbWVzaC5za2VsZXRvbikg
eworICAgICAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IG1lc2guc2tlbGV0b247CisgICAgICAg
ICAgICAgICAgaWYgKHNrZWxldG9uLmlzVXNpbmdUZXh0dXJlRm9yTWF0cmljZXMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGJvbmVUZXh0dXJlID0gc2tlbGV0b24uZ2V0VHJhbnNmb3JtTWF0
cml4VGV4dHVyZShtZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFib25lVGV4dHVyZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRUZXh0dXJlKCJib25lU2FtcGxl
ciIsIGJvbmVUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldEZs
b2F0KCJib25lVGV4dHVyZVdpZHRoIiwgNC4wICogKHNrZWxldG9uLmJvbmVzLmxlbmd0aCArIDEp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRNYXRyaWNlcygibUJvbmVzIiwgc2tlbGV0b24uZ2V0
VHJhbnNmb3JtTWF0cmljZXMoKG1lc2gpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gTW9ycGggdGFyZ2V0cworICAgICAgICAgICAgX01hdGVyaWFs
c19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJNYXRlcmlhbEhl
bHBlciJdLkJpbmRNb3JwaFRhcmdldFBhcmFtZXRlcnMobWVzaCwgdGhpcy5fZWZmZWN0KTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmZvcmNlQmFja0ZhY2VzT25seSkgeworICAgICAgICAgICAgICAg
IGVuZ2luZS5zZXRTdGF0ZSh0cnVlLCAwLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBPYnNlcnZhYmxlcworICAgICAgICAgICAgdGhpcy5vbkJlZm9yZVNoYWRv
d01hcFJlbmRlck1lc2hPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhtZXNoKTsKKyAgICAgICAg
ICAgIHRoaXMub25CZWZvcmVTaGFkb3dNYXBSZW5kZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyh0aGlzLl9lZmZlY3QpOworICAgICAgICAgICAgLy8gRHJhdworICAgICAgICAgICAgbWVzaC5f
cHJvY2Vzc1JlbmRlcmluZyhzdWJNZXNoLCB0aGlzLl9lZmZlY3QsIF9NYXRlcmlhbHNfbWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWwiXS5UcmlhbmdsZUZpbGxN
b2RlLCBiYXRjaCwgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcsIGZ1bmN0aW9uIChpc0luc3Rh
bmNlLCB3b3JsZCkgeyByZXR1cm4gX3RoaXMuX2VmZmVjdC5zZXRNYXRyaXgoIndvcmxkIiwgd29y
bGQpOyB9KTsKKyAgICAgICAgICAgIGlmICh0aGlzLmZvcmNlQmFja0ZhY2VzT25seSkgeworICAg
ICAgICAgICAgICAgIGVuZ2luZS5zZXRTdGF0ZSh0cnVlLCAwLCBmYWxzZSwgZmFsc2UpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gT2JzZXJ2YWJsZXMKKyAgICAgICAgICAgIHRoaXMu
b25BZnRlclNoYWRvd01hcFJlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMuX2Vm
ZmVjdCk7CisgICAgICAgICAgICB0aGlzLm9uQWZ0ZXJTaGFkb3dNYXBSZW5kZXJNZXNoT2JzZXJ2
YWJsZS5ub3RpZnlPYnNlcnZlcnMobWVzaCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAvLyBOZWVkIHRvIHJlc2V0IHJlZnJlc2ggcmF0ZSBvZiB0aGUgc2hhZG93TWFw
CisgICAgICAgICAgICBpZiAodGhpcy5fc2hhZG93TWFwKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fc2hhZG93TWFwLnJlc2V0UmVmcmVzaENvdW50ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH07CisgICAgU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZS5fYXBwbHlGaWx0ZXJW
YWx1ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fc2hhZG93TWFwKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuZmlsdGVyID09
PSBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX05PTkUgfHwgdGhpcy5maWx0ZXIgPT09IFNoYWRvd0dl
bmVyYXRvci5GSUxURVJfUENTUykgeworICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwLnVwZGF0
ZVNhbXBsaW5nTW9kZShfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfX1siVGV4dHVyZSJdLk5FQVJFU1RfU0FNUExJTkdNT0RFKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcC51cGRhdGVTYW1w
bGluZ01vZGUoX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZXMgYWxsIHRoZSBhdHRhY2hlZCBlZmZlY3QgdG8g
Y29tcGlsZSB0byBlbmFibGUgcmVuZGVyaW5nIG9ubHkgb25jZSByZWFkeSB2cy4gbGF6eWx5IGNv
bXBpbGluZyBlZmZlY3RzLgorICAgICAqIEBwYXJhbSBvbkNvbXBpbGVkIENhbGxiYWNrIHRyaWdn
ZXJlZCBhdCB0aGUgYW5kIG9mIHRoZSBlZmZlY3RzIGNvbXBpbGF0aW9uCisgICAgICogQHBhcmFt
IG9wdGlvbnMgU2V0cyBvZiBvcHRpb25hbCBvcHRpb25zIGZvcmNpbmcgdGhlIGNvbXBpbGF0aW9u
IHdpdGggZGlmZmVyZW50IG1vZGVzCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yLnByb3Rv
dHlwZS5mb3JjZUNvbXBpbGF0aW9uID0gZnVuY3Rpb24gKG9uQ29tcGlsZWQsIG9wdGlvbnMpIHsK
KyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIGxvY2FsT3B0aW9ucyA9IHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXNzaWduIl0oeyB1c2VJbnN0YW5j
ZXM6IGZhbHNlIH0sIG9wdGlvbnMpOworICAgICAgICB2YXIgc2hhZG93TWFwID0gdGhpcy5nZXRT
aGFkb3dNYXAoKTsKKyAgICAgICAgaWYgKCFzaGFkb3dNYXApIHsKKyAgICAgICAgICAgIGlmIChv
bkNvbXBpbGVkKSB7CisgICAgICAgICAgICAgICAgb25Db21waWxlZCh0aGlzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgcmVuZGVy
TGlzdCA9IHNoYWRvd01hcC5yZW5kZXJMaXN0OworICAgICAgICBpZiAoIXJlbmRlckxpc3QpIHsK
KyAgICAgICAgICAgIGlmIChvbkNvbXBpbGVkKSB7CisgICAgICAgICAgICAgICAgb25Db21waWxl
ZCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgc3ViTWVzaGVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIGZvciAodmFyIF9p
ID0gMCwgcmVuZGVyTGlzdF8xID0gcmVuZGVyTGlzdDsgX2kgPCByZW5kZXJMaXN0XzEubGVuZ3Ro
OyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IHJlbmRlckxpc3RfMVtfaV07CisgICAg
ICAgICAgICBzdWJNZXNoZXMucHVzaC5hcHBseShzdWJNZXNoZXMsIG1lc2guc3ViTWVzaGVzKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoc3ViTWVzaGVzLmxlbmd0aCA9PT0gMCkgeworICAgICAg
ICAgICAgaWYgKG9uQ29tcGlsZWQpIHsKKyAgICAgICAgICAgICAgICBvbkNvbXBpbGVkKHRoaXMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHZhciBjdXJyZW50SW5kZXggPSAwOworICAgICAgICB2YXIgY2hlY2tSZWFkeSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIGlmICghX3RoaXMuX3NjZW5lIHx8ICFfdGhpcy5fc2NlbmUuZ2V0
RW5naW5lKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB3aGlsZSAoX3RoaXMuaXNSZWFkeShzdWJNZXNoZXNbY3VycmVudEluZGV4XSwgbG9j
YWxPcHRpb25zLnVzZUluc3RhbmNlcykpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXgr
KzsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID49IHN1Yk1lc2hlcy5sZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9uQ29tcGlsZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9uQ29tcGlsZWQoX3RoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrUmVhZHksIDE2KTsKKyAgICAgICAgfTsKKyAg
ICAgICAgY2hlY2tSZWFkeSgpOworICAgIH07CisgICAgLyoqCisgICAgICogRm9yY2VzIGFsbCB0
aGUgYXR0YWNoZWQgZWZmZWN0IHRvIGNvbXBpbGUgdG8gZW5hYmxlIHJlbmRlcmluZyBvbmx5IG9u
Y2UgcmVhZHkgdnMuIGxhenlseSBjb21waWxpbmcgZWZmZWN0cy4KKyAgICAgKiBAcGFyYW0gb3B0
aW9ucyBTZXRzIG9mIG9wdGlvbmFsIG9wdGlvbnMgZm9yY2luZyB0aGUgY29tcGlsYXRpb24gd2l0
aCBkaWZmZXJlbnQgbW9kZXMKKyAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZl
cyB3aGVuIHRoZSBjb21waWxhdGlvbiBjb21wbGV0ZXMKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5l
cmF0b3IucHJvdG90eXBlLmZvcmNlQ29tcGlsYXRpb25Bc3luYyA9IGZ1bmN0aW9uIChvcHRpb25z
KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlz
ZShmdW5jdGlvbiAocmVzb2x2ZSkgeworICAgICAgICAgICAgX3RoaXMuZm9yY2VDb21waWxhdGlv
bihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAg
fSwgb3B0aW9ucyk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0ZXJt
aW5lIHdoZXRlciB0aGUgc2hhZG93IGdlbmVyYXRvciBpcyByZWFkeSBvciBub3QgKG1haW5seSBh
bGwgZWZmZWN0cyBhbmQgcmVsYXRlZCBwb3N0IHByb2Nlc3NlcyBuZWVkcyB0byBiZSByZWFkeSku
CisgICAgICogQHBhcmFtIHN1Yk1lc2ggVGhlIHN1Ym1lc2ggd2Ugd2FudCB0byByZW5kZXIgaW4g
dGhlIHNoYWRvdyBtYXAKKyAgICAgKiBAcGFyYW0gdXNlSW5zdGFuY2VzIERlZmluZXMgd2V0aGVy
IHdpbGwgZHJhdyBpbiB0aGUgbWFwIHVzaW5nIGluc3RhbmNlcworICAgICAqIEByZXR1cm5zIHRy
dWUgaWYgcmVhZHkgb3RoZXJ3aXNlLCBmYWxzZQorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRv
ci5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uIChzdWJNZXNoLCB1c2VJbnN0YW5jZXMpIHsK
KyAgICAgICAgdmFyIGRlZmluZXMgPSBbXTsKKyAgICAgICAgaWYgKHRoaXMuX3RleHR1cmVUeXBl
ICE9PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIkNv
bnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCkgeworICAgICAgICAgICAgZGVmaW5l
cy5wdXNoKCIjZGVmaW5lIEZMT0FUIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudXNl
RXhwb25lbnRpYWxTaGFkb3dNYXAgfHwgdGhpcy51c2VCbHVyRXhwb25lbnRpYWxTaGFkb3dNYXAp
IHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBFU00iKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmICh0aGlzLnVzZVBlcmNlbnRhZ2VDbG9zZXJGaWx0ZXJpbmcgfHwgdGhp
cy51c2VDb250YWN0SGFyZGVuaW5nU2hhZG93KSB7CisgICAgICAgICAgICBkZWZpbmVzLnB1c2go
IiNkZWZpbmUgREVQVEhURVhUVVJFIik7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGF0dHJpYnMg
PSBbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVm
ZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgdmFyIG1lc2ggPSBzdWJNZXNoLmdldE1lc2go
KTsKKyAgICAgICAgdmFyIG1hdGVyaWFsID0gc3ViTWVzaC5nZXRNYXRlcmlhbCgpOworICAgICAg
ICAvLyBOb3JtYWwgYmlhcy4KKyAgICAgICAgaWYgKHRoaXMubm9ybWFsQmlhcyAmJiBtZXNoLmlz
VmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKSkgeworICAgICAgICAgICAgYXR0cmli
cy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eEJ1ZmZlciJdLk5vcm1hbEtpbmQpOworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5l
IE5PUk1BTCIpOworICAgICAgICAgICAgaWYgKG1lc2gubm9uVW5pZm9ybVNjYWxpbmcpIHsKKyAg
ICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgTk9OVU5JRk9STVNDQUxJTkciKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLmdldExpZ2h0KCkuZ2V0VHlwZUlE
KCkgPT09IF9MaWdodHNfbGlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTGlnaHQi
XS5MSUdIVFRZUEVJRF9ESVJFQ1RJT05BTExJR0hUKSB7CisgICAgICAgICAgICAgICAgZGVmaW5l
cy5wdXNoKCIjZGVmaW5lIERJUkVDVElPTklOTElHSFREQVRBIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gQWxwaGEgdGVzdAorICAgICAgICBpZiAobWF0ZXJpYWwgJiYg
bWF0ZXJpYWwubmVlZEFscGhhVGVzdGluZygpKSB7CisgICAgICAgICAgICB2YXIgYWxwaGFUZXh0
dXJlID0gbWF0ZXJpYWwuZ2V0QWxwaGFUZXN0VGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKGFs
cGhhVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBBTFBI
QVRFU1QiKTsKKyAgICAgICAgICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQo
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVy
Il0uVVZLaW5kKSkgeworICAgICAgICAgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIFVWMSIpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVBy
ZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
QnVmZmVyIl0uVVYyS2luZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhVGV4dHVy
ZS5jb29yZGluYXRlc0luZGV4ID09PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
aWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVy
dGV4QnVmZmVyIl0uVVYyS2luZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLnB1
c2goIiNkZWZpbmUgVVYyIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQm9uZXMKKyAgICAgICAg
dmFyIGZhbGxiYWNrcyA9IG5ldyBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fWyJFZmZlY3RGYWxsYmFja3MiXSgpOworICAgICAgICBpZiAobWVzaC51c2VCb25l
cyAmJiBtZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBtZXNoLnNrZWxldG9uKSB7Cisg
ICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCk7CisgICAgICAg
ICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCk7CisgICAgICAgICAgICBp
ZiAobWVzaC5udW1Cb25lSW5mbHVlbmNlcnMgPiA0KSB7CisgICAgICAgICAgICAgICAgYXR0cmli
cy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZCk7CisgICAgICAgICAgICAgICAgYXR0
cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
cnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0V4dHJhS2luZCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBtZXNoLnNrZWxldG9uOworICAgICAgICAgICAgZGVm
aW5lcy5wdXNoKCIjZGVmaW5lIE5VTV9CT05FX0lORkxVRU5DRVJTICIgKyBtZXNoLm51bUJvbmVJ
bmZsdWVuY2Vycyk7CisgICAgICAgICAgICBpZiAobWVzaC5udW1Cb25lSW5mbHVlbmNlcnMgPiAw
KSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZENQVVNraW5uaW5nRmFsbGJhY2soMCwg
bWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2tlbGV0b24uaXNVc2luZ1Rl
eHR1cmVGb3JNYXRyaWNlcykgeworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmlu
ZSBCT05FVEVYVFVSRSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEJvbmVzUGVyTWVzaCAiICsgKHNrZWxl
dG9uLmJvbmVzLmxlbmd0aCArIDEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBOVU1fQk9ORV9JTkZM
VUVOQ0VSUyAwIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gTW9ycGggdGFyZ2V0cworICAgICAg
ICB2YXIgbWFuYWdlciA9IG1lc2gubW9ycGhUYXJnZXRNYW5hZ2VyOworICAgICAgICB2YXIgbW9y
cGhJbmZsdWVuY2VycyA9IDA7CisgICAgICAgIGlmIChtYW5hZ2VyKSB7CisgICAgICAgICAgICBp
ZiAobWFuYWdlci5udW1JbmZsdWVuY2VycyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVz
LnB1c2goIiNkZWZpbmUgTU9SUEhUQVJHRVRTIik7CisgICAgICAgICAgICAgICAgbW9ycGhJbmZs
dWVuY2VycyA9IG1hbmFnZXIubnVtSW5mbHVlbmNlcnM7CisgICAgICAgICAgICAgICAgZGVmaW5l
cy5wdXNoKCIjZGVmaW5lIE5VTV9NT1JQSF9JTkZMVUVOQ0VSUyAiICsgbW9ycGhJbmZsdWVuY2Vy
cyk7CisgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVBdHRyaWJ1dGVzRm9y
TW9ycGhUYXJnZXRzSW5mbHVlbmNlcnMoYXR0cmlicywgbWVzaCwgbW9ycGhJbmZsdWVuY2Vycyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5zdGFuY2VzCisgICAgICAg
IGlmICh1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBJ
TlNUQU5DRVMiKTsKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siTWF0ZXJpYWxIZWxwZXIiXS5QdXNoQXR0cmlidXRlc0Zv
ckluc3RhbmNlcyhhdHRyaWJzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5jdXN0b21T
aGFkZXJPcHRpb25zKSB7CisgICAgICAgICAgICBpZiAodGhpcy5jdXN0b21TaGFkZXJPcHRpb25z
LmRlZmluZXMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5j
dXN0b21TaGFkZXJPcHRpb25zLmRlZmluZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBkZWZpbmUgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgICAg
IGlmIChkZWZpbmVzLmluZGV4T2YoZGVmaW5lKSA9PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMucHVzaChkZWZpbmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEdldCBj
b3JyZWN0IGVmZmVjdAorICAgICAgICB2YXIgam9pbiA9IGRlZmluZXMuam9pbigiXG4iKTsKKyAg
ICAgICAgaWYgKHRoaXMuX2NhY2hlZERlZmluZXMgIT09IGpvaW4pIHsKKyAgICAgICAgICAgIHRo
aXMuX2NhY2hlZERlZmluZXMgPSBqb2luOworICAgICAgICAgICAgdmFyIHNoYWRlck5hbWUgPSAi
c2hhZG93TWFwIjsKKyAgICAgICAgICAgIHZhciB1bmlmb3JtcyA9IFsid29ybGQiLCAibUJvbmVz
IiwgInZpZXdQcm9qZWN0aW9uIiwgImRpZmZ1c2VNYXRyaXgiLCAibGlnaHREYXRhIiwgImRlcHRo
VmFsdWVzIiwgImJpYXNBbmRTY2FsZSIsICJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLCAiYm9uZVRl
eHR1cmVXaWR0aCJdOworICAgICAgICAgICAgdmFyIHNhbXBsZXJzID0gWyJkaWZmdXNlU2FtcGxl
ciIsICJib25lU2FtcGxlciJdOworICAgICAgICAgICAgLy8gQ3VzdG9tIHNoYWRlcj8KKyAgICAg
ICAgICAgIGlmICh0aGlzLmN1c3RvbVNoYWRlck9wdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBz
aGFkZXJOYW1lID0gdGhpcy5jdXN0b21TaGFkZXJPcHRpb25zLnNoYWRlck5hbWU7CisgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2hhZGVyT3B0aW9ucy5hdHRyaWJ1dGVzKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gMCwgX2MgPSB0aGlzLmN1c3RvbVNoYWRlck9w
dGlvbnMuYXR0cmlidXRlczsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBhdHRyaWIgPSBfY1tfYl07CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYXR0cmlicy5pbmRleE9mKGF0dHJpYikgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXR0cmlicy5wdXNoKGF0dHJpYik7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHRoaXMuY3VzdG9tU2hhZGVyT3B0aW9ucy51bmlmb3JtcykgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHZhciBfZCA9IDAsIF9lID0gdGhpcy5jdXN0b21TaGFkZXJPcHRpb25zLnVu
aWZvcm1zOyBfZCA8IF9lLmxlbmd0aDsgX2QrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHVuaWZvcm0gPSBfZVtfZF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pZm9y
bXMuaW5kZXhPZih1bmlmb3JtKSA9PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bmlmb3Jtcy5wdXNoKHVuaWZvcm0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICh0aGlzLmN1c3RvbVNoYWRlck9wdGlvbnMuc2FtcGxlcnMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgX2YgPSAwLCBfZyA9IHRoaXMuY3VzdG9tU2hhZGVyT3B0aW9ucy5zYW1wbGVy
czsgX2YgPCBfZy5sZW5ndGg7IF9mKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBz
YW1wbGVyID0gX2dbX2ZdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJzLmlu
ZGV4T2Yoc2FtcGxlcikgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ft
cGxlcnMucHVzaChzYW1wbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX2VmZmVjdCA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZUVmZmVjdChz
aGFkZXJOYW1lLCBhdHRyaWJzLCB1bmlmb3Jtcywgc2FtcGxlcnMsIGpvaW4sIGZhbGxiYWNrcywg
dW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgbWF4U2ltdWx0YW5lb3VzTW9ycGhUYXJnZXRzOiBtb3Jw
aEluZmx1ZW5jZXJzIH0pOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fZWZmZWN0Lmlz
UmVhZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLnVzZUJsdXJFeHBvbmVudGlhbFNoYWRvd01hcCB8fCB0aGlzLnVzZUJsdXJDbG9z
ZUV4cG9uZW50aWFsU2hhZG93TWFwKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2JsdXJQb3N0
UHJvY2Vzc2VzIHx8ICF0aGlzLl9ibHVyUG9zdFByb2Nlc3Nlcy5sZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9pbml0aWFsaXplQmx1clJUVEFuZFBvc3RQcm9jZXNzZXMoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fa2VybmVsQmx1clhQb3N0cHJv
Y2VzcyAmJiAhdGhpcy5fa2VybmVsQmx1clhQb3N0cHJvY2Vzcy5pc1JlYWR5KCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fa2VybmVs
Qmx1cllQb3N0cHJvY2VzcyAmJiAhdGhpcy5fa2VybmVsQmx1cllQb3N0cHJvY2Vzcy5pc1JlYWR5
KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fYm94Qmx1clBvc3Rwcm9jZXNzICYmICF0aGlzLl9ib3hCbHVyUG9zdHByb2Nlc3MuaXNS
ZWFkeSgpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlIGFsbCB0aGUgZGVm
aW5lcyBpbiBhIG1hdGVyaWFsIHJlbHlpbmcgb24gYSBzaGFkb3cgbWFwIGF0IHRoZSBzcGVjaWZp
ZWQgbGlnaHQgaW5kZXguCisgICAgICogQHBhcmFtIGRlZmluZXMgRGVmaW5lcyBvZiB0aGUgbWF0
ZXJpYWwgd2Ugd2FudCB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gbGlnaHRJbmRleCBJbmRleCBv
ZiB0aGUgbGlnaHQgaW4gdGhlIGVuYWJsZWQgbGlnaHQgbGlzdCBvZiB0aGUgbWF0ZXJpYWwKKyAg
ICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLnByZXBhcmVEZWZpbmVzID0gZnVu
Y3Rpb24gKGRlZmluZXMsIGxpZ2h0SW5kZXgpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5f
c2NlbmU7CisgICAgICAgIHZhciBsaWdodCA9IHRoaXMuX2xpZ2h0OworICAgICAgICBpZiAoIXNj
ZW5lLnNoYWRvd3NFbmFibGVkIHx8ICFsaWdodC5zaGFkb3dFbmFibGVkKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGVmaW5lc1siU0hBRE9XIiArIGxpZ2h0SW5k
ZXhdID0gdHJ1ZTsKKyAgICAgICAgaWYgKHRoaXMudXNlQ29udGFjdEhhcmRlbmluZ1NoYWRvdykg
eworICAgICAgICAgICAgZGVmaW5lc1siU0hBRE9XUENTUyIgKyBsaWdodEluZGV4XSA9IHRydWU7
CisgICAgICAgICAgICBpZiAodGhpcy5fZmlsdGVyaW5nUXVhbGl0eSA9PT0gU2hhZG93R2VuZXJh
dG9yLlFVQUxJVFlfTE9XKSB7CisgICAgICAgICAgICAgICAgZGVmaW5lc1siU0hBRE9XTE9XUVVB
TElUWSIgKyBsaWdodEluZGV4XSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIGlmICh0aGlzLl9maWx0ZXJpbmdRdWFsaXR5ID09PSBTaGFkb3dHZW5lcmF0b3IuUVVBTElU
WV9NRURJVU0pIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzWyJTSEFET1dNRURJVU1RVUFMSVRZ
IiArIGxpZ2h0SW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGVs
c2UgZGVmYXVsdCB0byBoaWdoLgorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnVzZVBlcmNl
bnRhZ2VDbG9zZXJGaWx0ZXJpbmcpIHsKKyAgICAgICAgICAgIGRlZmluZXNbIlNIQURPV1BDRiIg
KyBsaWdodEluZGV4XSA9IHRydWU7CisgICAgICAgICAgICBpZiAodGhpcy5fZmlsdGVyaW5nUXVh
bGl0eSA9PT0gU2hhZG93R2VuZXJhdG9yLlFVQUxJVFlfTE9XKSB7CisgICAgICAgICAgICAgICAg
ZGVmaW5lc1siU0hBRE9XTE9XUVVBTElUWSIgKyBsaWdodEluZGV4XSA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9maWx0ZXJpbmdRdWFsaXR5ID09PSBT
aGFkb3dHZW5lcmF0b3IuUVVBTElUWV9NRURJVU0pIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVz
WyJTSEFET1dNRURJVU1RVUFMSVRZIiArIGxpZ2h0SW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIGVsc2UgZGVmYXVsdCB0byBoaWdoLgorICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHRoaXMudXNlUG9pc3NvblNhbXBsaW5nKSB7CisgICAgICAgICAgICBkZWZp
bmVzWyJTSEFET1dQT0lTU09OIiArIGxpZ2h0SW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmICh0aGlzLnVzZUV4cG9uZW50aWFsU2hhZG93TWFwIHx8IHRoaXMudXNlQmx1
ckV4cG9uZW50aWFsU2hhZG93TWFwKSB7CisgICAgICAgICAgICBkZWZpbmVzWyJTSEFET1dFU00i
ICsgbGlnaHRJbmRleF0gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMu
dXNlQ2xvc2VFeHBvbmVudGlhbFNoYWRvd01hcCB8fCB0aGlzLnVzZUJsdXJDbG9zZUV4cG9uZW50
aWFsU2hhZG93TWFwKSB7CisgICAgICAgICAgICBkZWZpbmVzWyJTSEFET1dDTE9TRUVTTSIgKyBs
aWdodEluZGV4XSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxpZ2h0Lm5lZWRDdWJl
KCkpIHsKKyAgICAgICAgICAgIGRlZmluZXNbIlNIQURPV0NVQkUiICsgbGlnaHRJbmRleF0gPSB0
cnVlOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgc2hhZG93
IHJlbGF0ZWQgaW5mb3JtYXRpb24gaW5zaWRlIG9mIGFuIGVmZmVjdCAoaW5mb3JtYXRpb24gbGlr
ZSBuZWFyLCBmYXIsIGRhcmtuZXNzLi4uCisgICAgICogZGVmaW5lZCBpbiB0aGUgZ2VuZXJhdG9y
IGJ1dCBpbXBhY3RpbmcgdGhlIGVmZmVjdCkuCisgICAgICogQHBhcmFtIGxpZ2h0SW5kZXggSW5k
ZXggb2YgdGhlIGxpZ2h0IGluIHRoZSBlbmFibGVkIGxpZ2h0IGxpc3Qgb2YgdGhlIG1hdGVyaWFs
IG93bmluZyB0aGUgZWZmZWN0CisgICAgICogQHBhcmFtIGVmZmVjdCBUaGUgZWZmZWN0IHdlIGFy
ZSBiaW5maW5nIHRoZSBpbmZvcm1hdGlvbiBmb3IKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0
b3IucHJvdG90eXBlLmJpbmRTaGFkb3dMaWdodCA9IGZ1bmN0aW9uIChsaWdodEluZGV4LCBlZmZl
Y3QpIHsKKyAgICAgICAgdmFyIGxpZ2h0ID0gdGhpcy5fbGlnaHQ7CisgICAgICAgIHZhciBzY2Vu
ZSA9IHRoaXMuX3NjZW5lOworICAgICAgICBpZiAoIXNjZW5lLnNoYWRvd3NFbmFibGVkIHx8ICFs
aWdodC5zaGFkb3dFbmFibGVkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGNhbWVyYSA9IHNjZW5lLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAgaWYgKCFjYW1l
cmEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2hhZG93
TWFwID0gdGhpcy5nZXRTaGFkb3dNYXAoKTsKKyAgICAgICAgaWYgKCFzaGFkb3dNYXApIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxpZ2h0Lm5lZWRDdWJl
KCkpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRNYXRyaXgoImxpZ2h0TWF0cml4IiArIGxpZ2h0
SW5kZXgsIHRoaXMuZ2V0VHJhbnNmb3JtTWF0cml4KCkpOworICAgICAgICB9CisgICAgICAgIC8v
IE9ubHkgUENGIHVzZXMgZGVwdGggc3RlbmNpbCB0ZXh0dXJlLgorICAgICAgICBpZiAodGhpcy5f
ZmlsdGVyID09PSBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX1BDRikgeworICAgICAgICAgICAgZWZm
ZWN0LnNldERlcHRoU3RlbmNpbFRleHR1cmUoInNoYWRvd1NhbXBsZXIiICsgbGlnaHRJbmRleCwg
dGhpcy5nZXRTaGFkb3dNYXBGb3JSZW5kZXJpbmcoKSk7CisgICAgICAgICAgICBsaWdodC5fdW5p
Zm9ybUJ1ZmZlci51cGRhdGVGbG9hdDQoInNoYWRvd3NJbmZvIiwgdGhpcy5nZXREYXJrbmVzcygp
LCBzaGFkb3dNYXAuZ2V0U2l6ZSgpLndpZHRoLCAxIC8gc2hhZG93TWFwLmdldFNpemUoKS53aWR0
aCwgdGhpcy5mcnVzdHVtRWRnZUZhbGxvZmYsIGxpZ2h0SW5kZXgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHRoaXMuX2ZpbHRlciA9PT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9QQ1NT
KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgic2hhZG93U2Ft
cGxlciIgKyBsaWdodEluZGV4LCB0aGlzLmdldFNoYWRvd01hcEZvclJlbmRlcmluZygpKTsKKyAg
ICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJkZXB0aFNhbXBsZXIiICsgbGlnaHRJbmRleCwg
dGhpcy5nZXRTaGFkb3dNYXBGb3JSZW5kZXJpbmcoKSk7CisgICAgICAgICAgICBsaWdodC5fdW5p
Zm9ybUJ1ZmZlci51cGRhdGVGbG9hdDQoInNoYWRvd3NJbmZvIiwgdGhpcy5nZXREYXJrbmVzcygp
LCAxIC8gc2hhZG93TWFwLmdldFNpemUoKS53aWR0aCwgdGhpcy5fY29udGFjdEhhcmRlbmluZ0xp
Z2h0U2l6ZVVWUmF0aW8gKiBzaGFkb3dNYXAuZ2V0U2l6ZSgpLndpZHRoLCB0aGlzLmZydXN0dW1F
ZGdlRmFsbG9mZiwgbGlnaHRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgic2hhZG93U2FtcGxlciIgKyBsaWdodEluZGV4LCB0
aGlzLmdldFNoYWRvd01hcEZvclJlbmRlcmluZygpKTsKKyAgICAgICAgICAgIGxpZ2h0Ll91bmlm
b3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgic2hhZG93c0luZm8iLCB0aGlzLmdldERhcmtuZXNzKCks
IHRoaXMuYmx1clNjYWxlIC8gc2hhZG93TWFwLmdldFNpemUoKS53aWR0aCwgdGhpcy5kZXB0aFNj
YWxlLCB0aGlzLmZydXN0dW1FZGdlRmFsbG9mZiwgbGlnaHRJbmRleCk7CisgICAgICAgIH0KKyAg
ICAgICAgbGlnaHQuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQyKCJkZXB0aFZhbHVlcyIsIHRo
aXMuZ2V0TGlnaHQoKS5nZXREZXB0aE1pblooY2FtZXJhKSwgdGhpcy5nZXRMaWdodCgpLmdldERl
cHRoTWluWihjYW1lcmEpICsgdGhpcy5nZXRMaWdodCgpLmdldERlcHRoTWF4WihjYW1lcmEpLCBs
aWdodEluZGV4KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCB1c2VkIHRvIHByb2plY3QgdGhlIG1lc2hlcyBpbnRvIHRoZSBtYXAgZnJvbSB0
aGUgbGlnaHQgcG9pbnQgb2Ygdmlldy4KKyAgICAgKiAoZXEgdG8gc2hhZG93IHByamVjdGlvbiBt
YXRyaXggKiBsaWdodCB0cmFuc2Zvcm0gbWF0cml4KQorICAgICAqIEByZXR1cm5zIFRoZSB0cmFu
c2Zvcm0gbWF0cml4IHVzZWQgdG8gY3JlYXRlIHRoZSBzaGFkb3cgbWFwCisgICAgICovCisgICAg
U2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1NYXRyaXggPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3NjZW5lOworICAgICAgICBpZiAodGhpcy5f
Y3VycmVudFJlbmRlcklEID09PSBzY2VuZS5nZXRSZW5kZXJJZCgpICYmIHRoaXMuX2N1cnJlbnRG
YWNlSW5kZXhDYWNoZSA9PT0gdGhpcy5fY3VycmVudEZhY2VJbmRleCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3RyYW5zZm9ybU1hdHJpeDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9j
dXJyZW50UmVuZGVySUQgPSBzY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICB0aGlzLl9jdXJy
ZW50RmFjZUluZGV4Q2FjaGUgPSB0aGlzLl9jdXJyZW50RmFjZUluZGV4OworICAgICAgICB2YXIg
bGlnaHRQb3NpdGlvbiA9IHRoaXMuX2xpZ2h0LnBvc2l0aW9uOworICAgICAgICBpZiAodGhpcy5f
bGlnaHQuY29tcHV0ZVRyYW5zZm9ybWVkSW5mb3JtYXRpb24oKSkgeworICAgICAgICAgICAgbGln
aHRQb3NpdGlvbiA9IHRoaXMuX2xpZ2h0LnRyYW5zZm9ybWVkUG9zaXRpb247CisgICAgICAgIH0K
KyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlY3RvcjMiXS5Ob3JtYWxpemVUb1JlZih0aGlzLl9saWdodC5nZXRTaGFkb3dEaXJlY3Rpb24o
dGhpcy5fY3VycmVudEZhY2VJbmRleCksIHRoaXMuX2xpZ2h0RGlyZWN0aW9uKTsKKyAgICAgICAg
aWYgKE1hdGguYWJzKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJWZWN0b3IzIl0uRG90KHRoaXMuX2xpZ2h0RGlyZWN0aW9uLCBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlVwKCkpKSA9PT0gMS4w
KSB7CisgICAgICAgICAgICB0aGlzLl9saWdodERpcmVjdGlvbi56ID0gMC4wMDAwMDAwMDAwMDAx
OyAvLyBSZXF1aXJlZCB0byBhdm9pZCBwZXJmZWN0bHkgcGVycGVuZGljdWxhciBsaWdodAorICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLl9saWdodC5uZWVkUHJvamVjdGlvbk1hdHJpeENvbXB1
dGUoKSB8fCAhdGhpcy5fY2FjaGVkUG9zaXRpb24gfHwgIXRoaXMuX2NhY2hlZERpcmVjdGlvbiB8
fCAhbGlnaHRQb3NpdGlvbi5lcXVhbHModGhpcy5fY2FjaGVkUG9zaXRpb24pIHx8ICF0aGlzLl9s
aWdodERpcmVjdGlvbi5lcXVhbHModGhpcy5fY2FjaGVkRGlyZWN0aW9uKSkgeworICAgICAgICAg
ICAgdGhpcy5fY2FjaGVkUG9zaXRpb24uY29weUZyb20obGlnaHRQb3NpdGlvbik7CisgICAgICAg
ICAgICB0aGlzLl9jYWNoZWREaXJlY3Rpb24uY29weUZyb20odGhpcy5fbGlnaHREaXJlY3Rpb24p
OworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIk1hdHJpeCJdLkxvb2tBdExIVG9SZWYobGlnaHRQb3NpdGlvbiwgbGlnaHRQb3NpdGlv
bi5hZGQodGhpcy5fbGlnaHREaXJlY3Rpb24pLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlVwKCksIHRoaXMuX3ZpZXdNYXRyaXgpOwor
ICAgICAgICAgICAgdmFyIHNoYWRvd01hcCA9IHRoaXMuZ2V0U2hhZG93TWFwKCk7CisgICAgICAg
ICAgICBpZiAoc2hhZG93TWFwKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlbmRlckxpc3QgPSBz
aGFkb3dNYXAucmVuZGVyTGlzdDsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyTGlzdCkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9saWdodC5zZXRTaGFkb3dQcm9qZWN0aW9uTWF0cml4
KHRoaXMuX3Byb2plY3Rpb25NYXRyaXgsIHRoaXMuX3ZpZXdNYXRyaXgsIHJlbmRlckxpc3QpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3ZpZXdN
YXRyaXgubXVsdGlwbHlUb1JlZih0aGlzLl9wcm9qZWN0aW9uTWF0cml4LCB0aGlzLl90cmFuc2Zv
cm1NYXRyaXgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1NYXRy
aXg7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWNyZWF0ZXMgdGhlIHNoYWRvdyBtYXAgZGVw
ZW5kZW5jaWVzIGxpa2UgUlRUIGFuZCBwb3N0IHByb2Nlc3Nlcy4gVGhpcyBjYW4gYmUgdXNlZCBk
dXJpbmcgdGhlIHN3aXRjaCBiZXR3ZWVuCisgICAgICogQ3ViZSBhbmQgMkQgdGV4dHVyZXMgZm9y
IGluc3RhbmNlLgorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUucmVjcmVh
dGVTaGFkb3dNYXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzaGFkb3dNYXAgPSB0aGlz
Ll9zaGFkb3dNYXA7CisgICAgICAgIGlmICghc2hhZG93TWFwKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gVHJhY2sgcmVuZGVyIGxpc3QuCisgICAgICAgIHZh
ciByZW5kZXJMaXN0ID0gc2hhZG93TWFwLnJlbmRlckxpc3Q7CisgICAgICAgIC8vIENsZWFuIHVw
IGV4aXN0aW5nIGRhdGEuCisgICAgICAgIHRoaXMuX2Rpc3Bvc2VSVFRhbmRQb3N0UHJvY2Vzc2Vz
KCk7CisgICAgICAgIC8vIFJlaW5pdGlhbGl6ZXMuCisgICAgICAgIHRoaXMuX2luaXRpYWxpemVH
ZW5lcmF0b3IoKTsKKyAgICAgICAgLy8gUmVhZmZlY3QgdGhlIGZpbHRlciB0byBlbnN1cmUgYSBj
b3JyZWN0IGZhbGxiYWNrIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgdGhpcy5maWx0ZXIgPSB0aGlz
LmZpbHRlcjsKKyAgICAgICAgLy8gUmVhZmZlY3QgdGhlIGZpbHRlci4KKyAgICAgICAgdGhpcy5f
YXBwbHlGaWx0ZXJWYWx1ZXMoKTsKKyAgICAgICAgLy8gUmVhZmZlY3QgUmVuZGVyIExpc3QuCisg
ICAgICAgIHRoaXMuX3NoYWRvd01hcC5yZW5kZXJMaXN0ID0gcmVuZGVyTGlzdDsKKyAgICB9Owor
ICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUuX2Rpc3Bvc2VCbHVyUG9zdFByb2Nlc3NlcyA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3NoYWRvd01hcDIpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3NoYWRvd01hcDIuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fc2hhZG93
TWFwMiA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2JveEJsdXJQb3N0cHJv
Y2VzcykgeworICAgICAgICAgICAgdGhpcy5fYm94Qmx1clBvc3Rwcm9jZXNzLmRpc3Bvc2UoKTsK
KyAgICAgICAgICAgIHRoaXMuX2JveEJsdXJQb3N0cHJvY2VzcyA9IG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuX2tlcm5lbEJsdXJYUG9zdHByb2Nlc3MpIHsKKyAgICAgICAgICAg
IHRoaXMuX2tlcm5lbEJsdXJYUG9zdHByb2Nlc3MuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhp
cy5fa2VybmVsQmx1clhQb3N0cHJvY2VzcyA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX2tlcm5lbEJsdXJZUG9zdHByb2Nlc3MpIHsKKyAgICAgICAgICAgIHRoaXMuX2tlcm5l
bEJsdXJZUG9zdHByb2Nlc3MuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fa2VybmVsQmx1
cllQb3N0cHJvY2VzcyA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYmx1clBvc3RQ
cm9jZXNzZXMgPSBbXTsKKyAgICB9OworICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUuX2Rp
c3Bvc2VSVFRhbmRQb3N0UHJvY2Vzc2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhp
cy5fc2hhZG93TWFwKSB7CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dNYXAuZGlzcG9zZSgpOwor
ICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9kaXNwb3NlQmx1clBvc3RQcm9jZXNzZXMoKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IERpc3Bvc2VzIHRoZSBTaGFkb3dHZW5lcmF0b3IuCisgICAgICogUmV0dXJucyBub3RoaW5nLgor
ICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5fZGlzcG9zZVJUVGFuZFBvc3RQcm9jZXNzZXMoKTsKKyAgICAg
ICAgaWYgKHRoaXMuX2xpZ2h0KSB7CisgICAgICAgICAgICB0aGlzLl9saWdodC5fc2hhZG93R2Vu
ZXJhdG9yID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX2xpZ2h0Ll9tYXJrTWVzaGVzQXNMaWdo
dERpcnR5KCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vbkJlZm9yZVNoYWRvd01hcFJlbmRl
ck1lc2hPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25CZWZvcmVTaGFkb3dNYXBS
ZW5kZXJPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25BZnRlclNoYWRvd01hcFJl
bmRlck1lc2hPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25BZnRlclNoYWRvd01h
cFJlbmRlck9ic2VydmFibGUuY2xlYXIoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlh
bGl6ZXMgdGhlIHNoYWRvdyBnZW5lcmF0b3Igc2V0dXAgdG8gYSBqc29uIG9iamVjdC4KKyAgICAg
KiBAcmV0dXJucyBUaGUgc2VyaWFsaXplZCBKU09OIG9iamVjdAorICAgICAqLworICAgIFNoYWRv
d0dlbmVyYXRvci5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2
YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IHt9OworICAgICAgICB2YXIgc2hhZG93TWFwID0gdGhp
cy5nZXRTaGFkb3dNYXAoKTsKKyAgICAgICAgaWYgKCFzaGFkb3dNYXApIHsKKyAgICAgICAgICAg
IHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgICAgICB9CisgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QubGlnaHRJZCA9IHRoaXMuX2xpZ2h0LmlkOworICAgICAgICBzZXJpYWxpemF0
aW9uT2JqZWN0Lm1hcFNpemUgPSBzaGFkb3dNYXAuZ2V0UmVuZGVyU2l6ZSgpOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LnVzZUV4cG9uZW50aWFsU2hhZG93TWFwID0gdGhpcy51c2VFeHBv
bmVudGlhbFNoYWRvd01hcDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51c2VCbHVyRXhw
b25lbnRpYWxTaGFkb3dNYXAgPSB0aGlzLnVzZUJsdXJFeHBvbmVudGlhbFNoYWRvd01hcDsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51c2VDbG9zZUV4cG9uZW50aWFsU2hhZG93TWFwID0g
dGhpcy51c2VCbHVyRXhwb25lbnRpYWxTaGFkb3dNYXA7CisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QudXNlQmx1ckNsb3NlRXhwb25lbnRpYWxTaGFkb3dNYXAgPSB0aGlzLnVzZUJsdXJFeHBv
bmVudGlhbFNoYWRvd01hcDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51c2VQb2lzc29u
U2FtcGxpbmcgPSB0aGlzLnVzZVBvaXNzb25TYW1wbGluZzsKKyAgICAgICAgc2VyaWFsaXphdGlv
bk9iamVjdC5mb3JjZUJhY2tGYWNlc09ubHkgPSB0aGlzLmZvcmNlQmFja0ZhY2VzT25seTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5kZXB0aFNjYWxlID0gdGhpcy5kZXB0aFNjYWxlOwor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmRhcmtuZXNzID0gdGhpcy5nZXREYXJrbmVzcygp
OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmJsdXJCb3hPZmZzZXQgPSB0aGlzLmJsdXJC
b3hPZmZzZXQ7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYmx1cktlcm5lbCA9IHRoaXMu
Ymx1cktlcm5lbDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5ibHVyU2NhbGUgPSB0aGlz
LmJsdXJTY2FsZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51c2VLZXJuZWxCbHVyID0g
dGhpcy51c2VLZXJuZWxCbHVyOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRyYW5zcGFy
ZW5jeVNoYWRvdyA9IHRoaXMuX3RyYW5zcGFyZW5jeVNoYWRvdzsKKyAgICAgICAgc2VyaWFsaXph
dGlvbk9iamVjdC5mcnVzdHVtRWRnZUZhbGxvZmYgPSB0aGlzLmZydXN0dW1FZGdlRmFsbG9mZjsK
KyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5iaWFzID0gdGhpcy5iaWFzOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0Lm5vcm1hbEJpYXMgPSB0aGlzLm5vcm1hbEJpYXM7CisgICAgICAg
IHNlcmlhbGl6YXRpb25PYmplY3QudXNlUGVyY2VudGFnZUNsb3NlckZpbHRlcmluZyA9IHRoaXMu
dXNlUGVyY2VudGFnZUNsb3NlckZpbHRlcmluZzsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC51c2VDb250YWN0SGFyZGVuaW5nU2hhZG93ID0gdGhpcy51c2VDb250YWN0SGFyZGVuaW5nU2hh
ZG93OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmZpbHRlcmluZ1F1YWxpdHkgPSB0aGlz
LmZpbHRlcmluZ1F1YWxpdHk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29udGFjdEhh
cmRlbmluZ0xpZ2h0U2l6ZVVWUmF0aW8gPSB0aGlzLmNvbnRhY3RIYXJkZW5pbmdMaWdodFNpemVV
VlJhdGlvOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJlbmRlckxpc3QgPSBbXTsKKyAg
ICAgICAgaWYgKHNoYWRvd01hcC5yZW5kZXJMaXN0KSB7CisgICAgICAgICAgICBmb3IgKHZhciBt
ZXNoSW5kZXggPSAwOyBtZXNoSW5kZXggPCBzaGFkb3dNYXAucmVuZGVyTGlzdC5sZW5ndGg7IG1l
c2hJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBzaGFkb3dNYXAucmVuZGVy
TGlzdFttZXNoSW5kZXhdOworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmVu
ZGVyTGlzdC5wdXNoKG1lc2guaWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogUGFy
c2VzIGEgc2VyaWFsaXplZCBTaGFkb3dHZW5lcmF0b3IgYW5kIHJldHVybnMgYSBuZXcgU2hhZG93
R2VuZXJhdG9yLgorICAgICAqIEBwYXJhbSBwYXJzZWRTaGFkb3dHZW5lcmF0b3IgVGhlIEpTT04g
b2JqZWN0IHRvIHBhcnNlCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0byBjcmVhdGUg
dGhlIHNoYWRvdyBtYXAgZm9yCisgICAgICogQHJldHVybnMgVGhlIHBhcnNlZCBzaGFkb3cgZ2Vu
ZXJhdG9yCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yLlBhcnNlID0gZnVuY3Rpb24gKHBh
cnNlZFNoYWRvd0dlbmVyYXRvciwgc2NlbmUpIHsKKyAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUu
Z2V0TGlnaHRCeUlEKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5saWdodElkKTsKKyAgICAgICAgdmFy
IHNoYWRvd0dlbmVyYXRvciA9IG5ldyBTaGFkb3dHZW5lcmF0b3IocGFyc2VkU2hhZG93R2VuZXJh
dG9yLm1hcFNpemUsIGxpZ2h0KTsKKyAgICAgICAgdmFyIHNoYWRvd01hcCA9IHNoYWRvd0dlbmVy
YXRvci5nZXRTaGFkb3dNYXAoKTsKKyAgICAgICAgZm9yICh2YXIgbWVzaEluZGV4ID0gMDsgbWVz
aEluZGV4IDwgcGFyc2VkU2hhZG93R2VuZXJhdG9yLnJlbmRlckxpc3QubGVuZ3RoOyBtZXNoSW5k
ZXgrKykgeworICAgICAgICAgICAgdmFyIG1lc2hlcyA9IHNjZW5lLmdldE1lc2hlc0J5SUQocGFy
c2VkU2hhZG93R2VuZXJhdG9yLnJlbmRlckxpc3RbbWVzaEluZGV4XSk7CisgICAgICAgICAgICBt
ZXNoZXMuZm9yRWFjaChmdW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgICAgIGlmICghc2hh
ZG93TWFwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCFzaGFkb3dNYXAucmVuZGVyTGlzdCkgeworICAgICAgICAg
ICAgICAgICAgICBzaGFkb3dNYXAucmVuZGVyTGlzdCA9IFtdOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBzaGFkb3dNYXAucmVuZGVyTGlzdC5wdXNoKG1lc2gpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci51
c2VQb2lzc29uU2FtcGxpbmcpIHsKKyAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci51c2VQb2lz
c29uU2FtcGxpbmcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZFNo
YWRvd0dlbmVyYXRvci51c2VFeHBvbmVudGlhbFNoYWRvd01hcCkgeworICAgICAgICAgICAgc2hh
ZG93R2VuZXJhdG9yLnVzZUV4cG9uZW50aWFsU2hhZG93TWFwID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChwYXJzZWRTaGFkb3dHZW5lcmF0b3IudXNlQmx1ckV4cG9uZW50aWFs
U2hhZG93TWFwKSB7CisgICAgICAgICAgICBzaGFkb3dHZW5lcmF0b3IudXNlQmx1ckV4cG9uZW50
aWFsU2hhZG93TWFwID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwYXJzZWRT
aGFkb3dHZW5lcmF0b3IudXNlQ2xvc2VFeHBvbmVudGlhbFNoYWRvd01hcCkgeworICAgICAgICAg
ICAgc2hhZG93R2VuZXJhdG9yLnVzZUNsb3NlRXhwb25lbnRpYWxTaGFkb3dNYXAgPSB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci51c2VCbHVy
Q2xvc2VFeHBvbmVudGlhbFNoYWRvd01hcCkgeworICAgICAgICAgICAgc2hhZG93R2VuZXJhdG9y
LnVzZUJsdXJDbG9zZUV4cG9uZW50aWFsU2hhZG93TWFwID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChwYXJzZWRTaGFkb3dHZW5lcmF0b3IudXNlUGVyY2VudGFnZUNsb3NlckZp
bHRlcmluZykgeworICAgICAgICAgICAgc2hhZG93R2VuZXJhdG9yLnVzZVBlcmNlbnRhZ2VDbG9z
ZXJGaWx0ZXJpbmcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZFNo
YWRvd0dlbmVyYXRvci51c2VDb250YWN0SGFyZGVuaW5nU2hhZG93KSB7CisgICAgICAgICAgICBz
aGFkb3dHZW5lcmF0b3IudXNlQ29udGFjdEhhcmRlbmluZ1NoYWRvdyA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5maWx0ZXJpbmdRdWFsaXR5KSB7
CisgICAgICAgICAgICBzaGFkb3dHZW5lcmF0b3IuZmlsdGVyaW5nUXVhbGl0eSA9IHBhcnNlZFNo
YWRvd0dlbmVyYXRvci5maWx0ZXJpbmdRdWFsaXR5OworICAgICAgICB9CisgICAgICAgIGlmIChw
YXJzZWRTaGFkb3dHZW5lcmF0b3IuY29udGFjdEhhcmRlbmluZ0xpZ2h0U2l6ZVVWUmF0aW8pIHsK
KyAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci5jb250YWN0SGFyZGVuaW5nTGlnaHRTaXplVVZS
YXRpbyA9IHBhcnNlZFNoYWRvd0dlbmVyYXRvci5jb250YWN0SGFyZGVuaW5nTGlnaHRTaXplVVZS
YXRpbzsKKyAgICAgICAgfQorICAgICAgICAvLyBCYWNrd2FyZCBjb21wYXQKKyAgICAgICAgZWxz
ZSBpZiAocGFyc2VkU2hhZG93R2VuZXJhdG9yLnVzZVZhcmlhbmNlU2hhZG93TWFwKSB7CisgICAg
ICAgICAgICBzaGFkb3dHZW5lcmF0b3IudXNlRXhwb25lbnRpYWxTaGFkb3dNYXAgPSB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci51c2VCbHVy
VmFyaWFuY2VTaGFkb3dNYXApIHsKKyAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci51c2VCbHVy
RXhwb25lbnRpYWxTaGFkb3dNYXAgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJz
ZWRTaGFkb3dHZW5lcmF0b3IuZGVwdGhTY2FsZSkgeworICAgICAgICAgICAgc2hhZG93R2VuZXJh
dG9yLmRlcHRoU2NhbGUgPSBwYXJzZWRTaGFkb3dHZW5lcmF0b3IuZGVwdGhTY2FsZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocGFyc2VkU2hhZG93R2VuZXJhdG9yLmJsdXJTY2FsZSkgeworICAg
ICAgICAgICAgc2hhZG93R2VuZXJhdG9yLmJsdXJTY2FsZSA9IHBhcnNlZFNoYWRvd0dlbmVyYXRv
ci5ibHVyU2NhbGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRv
ci5ibHVyQm94T2Zmc2V0KSB7CisgICAgICAgICAgICBzaGFkb3dHZW5lcmF0b3IuYmx1ckJveE9m
ZnNldCA9IHBhcnNlZFNoYWRvd0dlbmVyYXRvci5ibHVyQm94T2Zmc2V0OworICAgICAgICB9Cisg
ICAgICAgIGlmIChwYXJzZWRTaGFkb3dHZW5lcmF0b3IudXNlS2VybmVsQmx1cikgeworICAgICAg
ICAgICAgc2hhZG93R2VuZXJhdG9yLnVzZUtlcm5lbEJsdXIgPSBwYXJzZWRTaGFkb3dHZW5lcmF0
b3IudXNlS2VybmVsQmx1cjsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkU2hhZG93R2Vu
ZXJhdG9yLmJsdXJLZXJuZWwpIHsKKyAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci5ibHVyS2Vy
bmVsID0gcGFyc2VkU2hhZG93R2VuZXJhdG9yLmJsdXJLZXJuZWw7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5iaWFzICE9PSB1bmRlZmluZWQpIHsKKyAgICAg
ICAgICAgIHNoYWRvd0dlbmVyYXRvci5iaWFzID0gcGFyc2VkU2hhZG93R2VuZXJhdG9yLmJpYXM7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5ub3JtYWxCaWFz
ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci5ub3JtYWxCaWFz
ID0gcGFyc2VkU2hhZG93R2VuZXJhdG9yLm5vcm1hbEJpYXM7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5mcnVzdHVtRWRnZUZhbGxvZmYgIT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgc2hhZG93R2VuZXJhdG9yLmZydXN0dW1FZGdlRmFsbG9mZiA9IHBh
cnNlZFNoYWRvd0dlbmVyYXRvci5mcnVzdHVtRWRnZUZhbGxvZmY7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5kYXJrbmVzcykgeworICAgICAgICAgICAgc2hh
ZG93R2VuZXJhdG9yLnNldERhcmtuZXNzKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5kYXJrbmVzcyk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci50cmFuc3BhcmVu
Y3lTaGFkb3cpIHsKKyAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci5zZXRUcmFuc3BhcmVuY3lT
aGFkb3codHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgc2hhZG93R2VuZXJhdG9yLmZvcmNlQmFj
a0ZhY2VzT25seSA9IHBhcnNlZFNoYWRvd0dlbmVyYXRvci5mb3JjZUJhY2tGYWNlc09ubHk7Cisg
ICAgICAgIHJldHVybiBzaGFkb3dHZW5lcmF0b3I7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
aGFkb3cgZ2VuZXJhdG9yIG1vZGUgTm9uZTogbm8gZmlsdGVyaW5nIGFwcGxpZWQuCisgICAgICov
CisgICAgU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9OT05FID0gMDsKKyAgICAvKioKKyAgICAgKiBT
aGFkb3cgZ2VuZXJhdG9yIG1vZGUgRVNNOiBFeHBvbmVudGlhbCBTaGFkb3cgTWFwcGluZy4KKyAg
ICAgKiAoaHR0cDovL2RldmVsb3Blci5kb3dubG9hZC5udmlkaWEuY29tL3ByZXNlbnRhdGlvbnMv
MjAwOC9HREMvR0RDMDhfU29mdFNoYWRvd01hcHBpbmcucGRmKQorICAgICAqLworICAgIFNoYWRv
d0dlbmVyYXRvci5GSUxURVJfRVhQT05FTlRJQUxTSEFET1dNQVAgPSAxOworICAgIC8qKgorICAg
ICAqIFNoYWRvdyBnZW5lcmF0b3IgbW9kZSBQb2lzc29uIFNhbXBsaW5nOiBQZXJjZW50YWdlIENs
b3NlciBGaWx0ZXJpbmcuCisgICAgICogKE11bHRpcGxlIFRhcCBhcm91bmQgZXZlbmx5IGRpc3Ry
aWJ1dGVkIGFyb3VuZCB0aGUgcGl4ZWwgYXJlIHVzZWQgdG8gZXZhbHVhdGUgdGhlIHNoYWRvdyBz
dHJlbmd0aCkKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX1BPSVNTT05TQU1Q
TElORyA9IDI7CisgICAgLyoqCisgICAgICogU2hhZG93IGdlbmVyYXRvciBtb2RlIEVTTTogQmx1
cnJlZCBFeHBvbmVudGlhbCBTaGFkb3cgTWFwcGluZy4KKyAgICAgKiAoaHR0cDovL2RldmVsb3Bl
ci5kb3dubG9hZC5udmlkaWEuY29tL3ByZXNlbnRhdGlvbnMvMjAwOC9HREMvR0RDMDhfU29mdFNo
YWRvd01hcHBpbmcucGRmKQorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5GSUxURVJfQkxV
UkVYUE9ORU5USUFMU0hBRE9XTUFQID0gMzsKKyAgICAvKioKKyAgICAgKiBTaGFkb3cgZ2VuZXJh
dG9yIG1vZGUgRVNNOiBFeHBvbmVudGlhbCBTaGFkb3cgTWFwcGluZyB1c2luZyB0aGUgaW52ZXJz
ZSBvZiB0aGUgZXhwb25lbnRpYWwgcHJldmVudGluZworICAgICAqIGVkZ2UgYXJ0aWZhY3RzIG9u
IHN0ZWVwIGZhbGxvZmYuCisgICAgICogKGh0dHA6Ly9kZXZlbG9wZXIuZG93bmxvYWQubnZpZGlh
LmNvbS9wcmVzZW50YXRpb25zLzIwMDgvR0RDL0dEQzA4X1NvZnRTaGFkb3dNYXBwaW5nLnBkZikK
KyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX0NMT1NFRVhQT05FTlRJQUxTSEFE
T1dNQVAgPSA0OworICAgIC8qKgorICAgICAqIFNoYWRvdyBnZW5lcmF0b3IgbW9kZSBFU006IEJs
dXJyZWQgRXhwb25lbnRpYWwgU2hhZG93IE1hcHBpbmcgdXNpbmcgdGhlIGludmVyc2Ugb2YgdGhl
IGV4cG9uZW50aWFsIHByZXZlbnRpbmcKKyAgICAgKiBlZGdlIGFydGlmYWN0cyBvbiBzdGVlcCBm
YWxsb2ZmLgorICAgICAqIChodHRwOi8vZGV2ZWxvcGVyLmRvd25sb2FkLm52aWRpYS5jb20vcHJl
c2VudGF0aW9ucy8yMDA4L0dEQy9HREMwOF9Tb2Z0U2hhZG93TWFwcGluZy5wZGYpCisgICAgICov
CisgICAgU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9CTFVSQ0xPU0VFWFBPTkVOVElBTFNIQURPV01B
UCA9IDU7CisgICAgLyoqCisgICAgICogU2hhZG93IGdlbmVyYXRvciBtb2RlIFBDRjogUGVyY2Vu
dGFnZSBDbG9zZXIgRmlsdGVyaW5nCisgICAgICogYmVuZWZpdHMgZnJvbSBXZWJnbCAyIHNoYWRv
dyBzYW1wbGVycy4gRmFsbGJhY2sgdG8gUG9pc3NvbiBTYW1wbGluZyBpbiBXZWJnbCAxCisgICAg
ICogKGh0dHBzOi8vZGV2ZWxvcGVyLm52aWRpYS5jb20vZ3B1Z2Vtcy9HUFVHZW1zL2dwdWdlbXNf
Y2gxMS5odG1sKQorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5GSUxURVJfUENGID0gNjsK
KyAgICAvKioKKyAgICAgKiBTaGFkb3cgZ2VuZXJhdG9yIG1vZGUgUENTUzogUGVyY2VudGFnZSBD
bG9zZXJpbmcgU29mdCBTaGFkb3cuCisgICAgICogYmVuZWZpdHMgZnJvbSBXZWJnbCAyIHNoYWRv
dyBzYW1wbGVycy4gRmFsbGJhY2sgdG8gUG9pc3NvbiBTYW1wbGluZyBpbiBXZWJnbCAxCisgICAg
ICogQ29udGFjdCBIYXJkZW5pbmcKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3IuRklMVEVS
X1BDU1MgPSA3OworICAgIC8qKgorICAgICAqIFJlc2VydmVkIGZvciBQQ0YgYW5kIFBDU1MKKyAg
ICAgKiBIaWdoZXN0IFF1YWxpdHkuCisgICAgICoKKyAgICAgKiBFeGVjdXRlIFBDRiBvbiBhIDUq
NSBrZXJuZWwgaW1wcm92aW5nIGEgbG90IHRoZSBzaGFkb3cgYWxpYXNpbmcgYXJ0aWZhY3RzLgor
ICAgICAqCisgICAgICogRXhlY3V0ZSBQQ1NTIHdpdGggMzIgdGFwcyBibG9ja2VyIHNlYXJjaCBh
bmQgNjQgdGFwcyBQQ0YuCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yLlFVQUxJVFlfSElH
SCA9IDA7CisgICAgLyoqCisgICAgICogUmVzZXJ2ZWQgZm9yIFBDRiBhbmQgUENTUworICAgICAq
IEdvb2QgdHJhZGVvZmYgZm9yIHF1YWxpdHkvcGVyZiBjcm9zcyBkZXZpY2VzCisgICAgICoKKyAg
ICAgKiBFeGVjdXRlIFBDRiBvbiBhIDMqMyBrZXJuZWwuCisgICAgICoKKyAgICAgKiBFeGVjdXRl
IFBDU1Mgd2l0aCAxNiB0YXBzIGJsb2NrZXIgc2VhcmNoIGFuZCAzMiB0YXBzIFBDRi4KKyAgICAg
Ki8KKyAgICBTaGFkb3dHZW5lcmF0b3IuUVVBTElUWV9NRURJVU0gPSAxOworICAgIC8qKgorICAg
ICAqIFJlc2VydmVkIGZvciBQQ0YgYW5kIFBDU1MKKyAgICAgKiBUaGUgbG93ZXN0IHF1YWxpdHkg
YnV0IHRoZSBmYXN0ZXN0LgorICAgICAqCisgICAgICogRXhlY3V0ZSBQQ0Ygb24gYSAxKjEga2Vy
bmVsLgorICAgICAqCisgICAgICogRXhlY3V0ZSBQQ1NTIHdpdGggMTYgdGFwcyBibG9ja2VyIHNl
YXJjaCBhbmQgMTYgdGFwcyBQQ0YuCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yLlFVQUxJ
VFlfTE9XID0gMjsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFNoYWRvd0dlbmVyYXRvci5fU2Nl
bmVDb21wb25lbnRJbml0aWFsaXphdGlvbiA9IGZ1bmN0aW9uIChfKSB7CisgICAgICAgIHRocm93
IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJfRGV2VG9vbHMi
XS5XYXJuSW1wb3J0KCJTaGFkb3dHZW5lcmF0b3JTY2VuZUNvbXBvbmVudCIpOworICAgIH07Cisg
ICAgcmV0dXJuIFNoYWRvd0dlbmVyYXRvcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTGlnaHRzL1NoYWRvd3Mvc2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9MaWdodHMvU2hhZG93cy9zaGFkb3dHZW5lcmF0b3JTY2VuZUNvbXBv
bmVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2hhZG93R2VuZXJhdG9y
U2NlbmVDb21wb25lbnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hh
ZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNoYWRvd0dl
bmVyYXRvclNjZW5lQ29tcG9uZW50OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2hh
ZG93R2VuZXJhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3NoYWRvd0dlbmVyYXRvciAqLyAiLi9MaWdodHMvU2hhZG93cy9zaGFkb3dH
ZW5lcmF0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2Fic3RyYWN0U2NlbmUgKi8gIi4vYWJz
dHJhY3RTY2VuZS50cyIpOworCisKKworLy8gQWRkcyB0aGUgcGFyc2VyIHRvIHRoZSBzY2VuZSBw
YXJzZXJzLgorX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQWJz
dHJhY3RTY2VuZSJdLkFkZFBhcnNlcihfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX1NIQURPV0dFTkVSQVRP
UiwgZnVuY3Rpb24gKHBhcnNlZERhdGEsIHNjZW5lKSB7CisgICAgLy8gU2hhZG93cworICAgIGlm
IChwYXJzZWREYXRhLnNoYWRvd0dlbmVyYXRvcnMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRh
LnNoYWRvd0dlbmVyYXRvcnMgIT09IG51bGwpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAw
LCBjYWNoZSA9IHBhcnNlZERhdGEuc2hhZG93R2VuZXJhdG9ycy5sZW5ndGg7IGluZGV4IDwgY2Fj
aGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBwYXJzZWRTaGFkb3dHZW5lcmF0b3IgPSBw
YXJzZWREYXRhLnNoYWRvd0dlbmVyYXRvcnNbaW5kZXhdOworICAgICAgICAgICAgX3NoYWRvd0dl
bmVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTaGFkb3dHZW5lcmF0b3IiXS5Q
YXJzZShwYXJzZWRTaGFkb3dHZW5lcmF0b3IsIHNjZW5lKTsKKyAgICAgICAgICAgIC8vIFNHIHdv
dWxkIGJlIGF2YWlsYWJsZSBvbiB0aGVpciBhc3NvY2lhdGVkIGxpZ2h0cworICAgICAgICB9Cisg
ICAgfQorfSk7CisvKioKKyAqIERlZmluZXMgdGhlIHNoYWRvdyBnZW5lcmF0b3IgY29tcG9uZW50
IHJlc3BvbnNpYmxlIHRvIG1hbmFnZSBhbnkgc2hhZG93IGdlbmVyYXRvcnMKKyAqIGluIGEgZ2l2
ZW4gc2NlbmUuCisgKi8KK3ZhciBTaGFkb3dHZW5lcmF0b3JTY2VuZUNvbXBvbmVudCA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGlu
c3RhbmNlIG9mIHRoZSBjb21wb25lbnQgZm9yIHRoZSBnaXZlbiBzY2VuZQorICAgICAqIEBwYXJh
bSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IGluCisg
ICAgICovCisgICAgZnVuY3Rpb24gU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQoc2NlbmUp
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjb21wb25lbnQgbmFtZSBoZWxwZnVsbCB0
byBpZGVudGlmeSB0aGUgY29tcG9uZW50IGluIHRoZSBsaXN0IG9mIHNjZW5lIGNvbXBvbmVudHMu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLm5hbWUgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX1NI
QURPV0dFTkVSQVRPUjsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgIH0KKyAgICAv
KioKKyAgICAgKiBSZWdpc3RlcnMgdGhlIGNvbXBvbmVudCBpbiBhIGdpdmVuIHNjZW5lCisgICAg
ICovCisgICAgU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQucHJvdG90eXBlLnJlZ2lzdGVy
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLnNjZW5lLl9nYXRoZXJSZW5kZXJUYXJnZXRz
U3RhZ2UucmVnaXN0ZXJTdGVwKF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLlNURVBfR0FUSEVSUkVOREVSVEFSR0VU
U19TSEFET1dHRU5FUkFUT1IsIHRoaXMsIHRoaXMuX2dhdGhlclJlbmRlclRhcmdldHMpOworICAg
IH07CisgICAgLyoqCisgICAgICogUmVidWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhp
cyBjb21wb25lbnQgaW4gY2FzZSBvZgorICAgICAqIGNvbnRleHQgbG9zdCBmb3IgaW5zdGFuY2Uu
CisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQucHJvdG90eXBlLnJl
YnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE5vdGhpbmcgVG8gRG8gSGVyZS4KKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGNvbXBvbmVudCBkYXRhIHRvIHRo
ZSBzcGVjaWZpZWQganNvbiBvYmplY3QKKyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlvbk9iamVj
dCBUaGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSB0bworICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRv
clNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXph
dGlvbk9iamVjdCkgeworICAgICAgICAvLyBTaGFkb3dzCisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3Quc2hhZG93R2VuZXJhdG9ycyA9IFtdOworICAgICAgICB2YXIgbGlnaHRzID0gdGhpcy5z
Y2VuZS5saWdodHM7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgbGlnaHRzXzEgPSBsaWdodHM7
IF9pIDwgbGlnaHRzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbGlnaHQgPSBs
aWdodHNfMVtfaV07CisgICAgICAgICAgICB2YXIgc2hhZG93R2VuZXJhdG9yID0gbGlnaHQuZ2V0
U2hhZG93R2VuZXJhdG9yKCk7CisgICAgICAgICAgICBpZiAoc2hhZG93R2VuZXJhdG9yKSB7Cisg
ICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5zaGFkb3dHZW5lcmF0b3JzLnB1c2go
c2hhZG93R2VuZXJhdG9yLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIGNv
bnRhaW5lciB0byB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gY29udGFpbmVyIHRoZSBjb250YWlu
ZXIgaG9sZGluZyB0aGUgZWxlbWVudHMKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3JTY2Vu
ZUNvbXBvbmVudC5wcm90b3R5cGUuYWRkRnJvbUNvbnRhaW5lciA9IGZ1bmN0aW9uIChjb250YWlu
ZXIpIHsKKyAgICAgICAgLy8gTm90aGluZyBUbyBEbyBIZXJlLiAoZGlyZWN0bHkgYXR0YWNoZWQg
dG8gYSBsaWdodCkKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMgYWxsIHRoZSBlbGVt
ZW50cyBpbiB0aGUgY29udGFpbmVyIGZyb20gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIGNvbnRh
aW5lciBjb250YWlucyB0aGUgZWxlbWVudHMgdG8gcmVtb3ZlCisgICAgICogQHBhcmFtIGRpc3Bv
c2UgaWYgdGhlIHJlbW92ZWQgZWxlbWVudCBzaG91bGQgYmUgZGlzcG9zZWQgKGRlZmF1bHQ6IGZh
bHNlKQorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvclNjZW5lQ29tcG9uZW50LnByb3RvdHlw
ZS5yZW1vdmVGcm9tQ29udGFpbmVyID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgZGlzcG9zZSkgewor
ICAgICAgICAvLyBOb3RoaW5nIFRvIERvIEhlcmUuIChkaXJlY3RseSBhdHRhY2hlZCB0byBhIGxp
Z2h0KQorICAgIH07CisgICAgLyoqCisgICAgICogUmVidWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0
ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4gY2FzZSBvZgorICAgICAqIGNvbnRleHQgbG9zdCBmb3Ig
aW5zdGFuY2UuCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQucHJv
dG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE5vdGhpbmcgVG8gRG8g
SGVyZS4KKyAgICB9OworICAgIFNoYWRvd0dlbmVyYXRvclNjZW5lQ29tcG9uZW50LnByb3RvdHlw
ZS5fZ2F0aGVyUmVuZGVyVGFyZ2V0cyA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXRzKSB7CisgICAg
ICAgIC8vIFNoYWRvd3MKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTsKKyAgICAgICAg
aWYgKHRoaXMuc2NlbmUuc2hhZG93c0VuYWJsZWQpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGxp
Z2h0SW5kZXggPSAwOyBsaWdodEluZGV4IDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgbGlnaHRJbmRl
eCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2xpZ2h0SW5k
ZXhdOworICAgICAgICAgICAgICAgIHZhciBzaGFkb3dHZW5lcmF0b3IgPSBsaWdodC5nZXRTaGFk
b3dHZW5lcmF0b3IoKTsKKyAgICAgICAgICAgICAgICBpZiAobGlnaHQuaXNFbmFibGVkKCkgJiYg
bGlnaHQuc2hhZG93RW5hYmxlZCAmJiBzaGFkb3dHZW5lcmF0b3IpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHNoYWRvd01hcCA9IChzaGFkb3dHZW5lcmF0b3IuZ2V0U2hhZG93TWFwKCkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoc2NlbmUudGV4dHVyZXMuaW5kZXhPZihzaGFkb3dNYXAp
ICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0cy5wdXNoKHNo
YWRvd01hcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBTaGFkb3dHZW5lcmF0b3JT
Y2VuZUNvbXBvbmVudDsKK30oKSk7CisKK19zaGFkb3dHZW5lcmF0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siU2hhZG93R2VuZXJhdG9yIl0uX1NjZW5lQ29tcG9uZW50SW5pdGlhbGl6
YXRpb24gPSBmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICB2YXIgY29tcG9uZW50ID0gc2NlbmUuX2dl
dENvbXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
U2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX1NIQURPV0dFTkVSQVRPUik7CisgICAgaWYg
KCFjb21wb25lbnQpIHsKKyAgICAgICAgY29tcG9uZW50ID0gbmV3IFNoYWRvd0dlbmVyYXRvclNj
ZW5lQ29tcG9uZW50KHNjZW5lKTsKKyAgICAgICAgc2NlbmUuX2FkZENvbXBvbmVudChjb21wb25l
bnQpOworICAgIH0KK307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0xpZ2h0cy9kaXJlY3Rp
b25hbExpZ2h0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vTGlnaHRzL2RpcmVjdGlvbmFsTGlnaHQudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IERpcmVj
dGlvbmFsTGlnaHQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGlyZWN0
aW9uYWxMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGlyZWN0aW9uYWxMaWdodDsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3Ig
Ki8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vbm9kZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xp
Z2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL2xpZ2h0ICovICIuL0xpZ2h0cy9saWdodC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9zaGFkb3dMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9zaGFkb3dMaWdodCAqLyAiLi9MaWdodHMvc2hhZG93TGlnaHQudHMi
KTsKKworCisKKworCisKK19ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGUi
XS5BZGROb2RlQ29uc3RydWN0b3IoIkxpZ2h0X1R5cGVfMSIsIGZ1bmN0aW9uIChuYW1lLCBzY2Vu
ZSkgeworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgRGlyZWN0aW9uYWxMaWdo
dChuYW1lLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
VmVjdG9yMyJdLlplcm8oKSwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIEEgZGlyZWN0aW9uYWwg
bGlnaHQgaXMgZGVmaW5lZCBieSBhIGRpcmVjdGlvbiAod2hhdCBhIHN1cnByaXNlISkuCisgKiBU
aGUgbGlnaHQgaXMgZW1pdHRlZCBmcm9tIGV2ZXJ5d2hlcmUgaW4gdGhlIHNwZWNpZmllZCBkaXJl
Y3Rpb24sIGFuZCBoYXMgYW4gaW5maW5pdGUgcmFuZ2UuCisgKiBBbiBleGFtcGxlIG9mIGEgZGly
ZWN0aW9uYWwgbGlnaHQgaXMgd2hlbiBhIGRpc3RhbmNlIHBsYW5ldCBpcyBsaXQgYnkgdGhlIGFw
cGFyZW50bHkgcGFyYWxsZWwgbGluZXMgb2YgbGlnaHQgZnJvbSBpdHMgc3VuLiBMaWdodCBpbiBh
IGRvd253YXJkIGRpcmVjdGlvbiB3aWxsIGxpZ2h0IHRoZSB0b3Agb2YgYW4gb2JqZWN0LgorICog
RG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2xpZ2h0
cworICovCit2YXIgRGlyZWN0aW9uYWxMaWdodCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChf
c3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVu
ZHMiXShEaXJlY3Rpb25hbExpZ2h0LCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBEaXJlY3Rpb25hbExpZ2h0IG9iamVjdCBpbiB0aGUgc2NlbmUsIG9yaWVudGVkIHRvd2FyZHMg
dGhlIHBhc3NlZCBkaXJlY3Rpb24gKFZlY3RvcjMpLgorICAgICAqIFRoZSBkaXJlY3Rpb25hbCBs
aWdodCBpcyBlbWl0dGVkIGZyb20gZXZlcnl3aGVyZSBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgor
ICAgICAqIEl0IGNhbiBjYXN0IHNoYWRvd3MuCisgICAgICogRG9jdW1lbnRhdGlvbiA6IGh0dHBz
Oi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9saWdodHMKKyAgICAgKiBAcGFyYW0gbmFt
ZSBUaGUgZnJpZW5kbHkgbmFtZSBvZiB0aGUgbGlnaHQKKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9u
IFRoZSBkaXJlY3Rpb24gb2YgdGhlIGxpZ2h0CisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2Vu
ZSB0aGUgbGlnaHQgYmVsb25ncyB0bworICAgICAqLworICAgIGZ1bmN0aW9uIERpcmVjdGlvbmFs
TGlnaHQobmFtZSwgZGlyZWN0aW9uLCBzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3Vw
ZXIuY2FsbCh0aGlzLCBuYW1lLCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuX3NoYWRv
d0ZydXN0dW1TaXplID0gMDsKKyAgICAgICAgX3RoaXMuX3NoYWRvd09ydGhvU2NhbGUgPSAwLjE7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBBdXRvbWF0aWNhbGx5IGNvbXB1dGUgdGhlIHByb2pl
Y3Rpb24gbWF0cml4IHRvIGJlc3QgZml0IChpbmNsdWRpbmcgYWxsIHRoZSBjYXN0ZXJzKQorICAg
ICAgICAgKiBvbiBlYWNoIGZyYW1lLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXV0b1Vw
ZGF0ZUV4dGVuZHMgPSB0cnVlOworICAgICAgICAvLyBDYWNoZQorICAgICAgICBfdGhpcy5fb3J0
aG9MZWZ0ID0gTnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAgX3RoaXMuX29ydGhvUmlnaHQgPSBO
dW1iZXIuTUlOX1ZBTFVFOworICAgICAgICBfdGhpcy5fb3J0aG9Ub3AgPSBOdW1iZXIuTUlOX1ZB
TFVFOworICAgICAgICBfdGhpcy5fb3J0aG9Cb3R0b20gPSBOdW1iZXIuTUFYX1ZBTFVFOworICAg
ICAgICBfdGhpcy5wb3NpdGlvbiA9IGRpcmVjdGlvbi5zY2FsZSgtMS4wKTsKKyAgICAgICAgX3Ro
aXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEaXJlY3Rpb25hbExpZ2h0LnByb3RvdHlwZSwgInNo
YWRvd0ZydXN0dW1TaXplIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRml4IGZydXN0dW0g
c2l6ZSBmb3IgdGhlIHNoYWRvdyBnZW5lcmF0aW9uLiBUaGlzIGlzIGRpc2FibGVkIGlmIHRoZSB2
YWx1ZSBpcyAwLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fc2hhZG93RnJ1c3R1bVNpemU7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgYSBmaXggZnJ1c3R1bSBzaXplIGZvciB0aGUg
c2hhZG93IGdlbmVyYXRpb24uCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fc2hhZG93RnJ1c3R1bVNpemUgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHRoaXMuZm9yY2VQcm9qZWN0aW9uTWF0cml4Q29tcHV0ZSgpOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGlyZWN0aW9uYWxMaWdodC5wcm90
b3R5cGUsICJzaGFkb3dPcnRob1NjYWxlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgc2hhZG93IHByb2plY3Rpb24gc2NhbGUgYWdhaW5zdCB0aGUgb3B0aW1hbCBjb21wdXRl
ZCBvbmUuCisgICAgICAgICAqIDAuMSBieSBkZWZhdWx0IHdoaWNoIG1lYW5zIHRoYXQgdGhlIHBy
b2plY3Rpb24gd2luZG93IGlzIGluY3JlYXNlIGJ5IDEwJSBmcm9tIHRoZSBvcHRpbWFsIHNpemUu
CisgICAgICAgICAqIFRoaXMgZG9lcyBub3QgaW1wYWN0IGluIGZpeGVkIGZydXN0dW0gc2l6ZSAo
c2hhZG93RnJ1c3R1bVNpemUgYmVpbmcgc2V0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZG93T3J0aG9TY2FsZTsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHNoYWRvdyBwcm9q
ZWN0aW9uIHNjYWxlIGFnYWluc3QgdGhlIG9wdGltYWwgY29tcHV0ZWQgb25lLgorICAgICAgICAg
KiAwLjEgYnkgZGVmYXVsdCB3aGljaCBtZWFucyB0aGF0IHRoZSBwcm9qZWN0aW9uIHdpbmRvdyBp
cyBpbmNyZWFzZSBieSAxMCUgZnJvbSB0aGUgb3B0aW1hbCBzaXplLgorICAgICAgICAgKiBUaGlz
IGRvZXMgbm90IGltcGFjdCBpbiBmaXhlZCBmcnVzdHVtIHNpemUgKHNoYWRvd0ZydXN0dW1TaXpl
IGJlaW5nIHNldCkKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dPcnRob1NjYWxlID0gdmFsdWU7CisgICAgICAgICAg
ICB0aGlzLmZvcmNlUHJvamVjdGlvbk1hdHJpeENvbXB1dGUoKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3RyaW5nICJEaXJlY3Rpb25hbExpZ2h0Ii4K
KyAgICAgKiBAcmV0dXJuIFRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgRGlyZWN0aW9uYWxM
aWdodC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gIkRpcmVjdGlvbmFsTGlnaHQiOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0
aGUgaW50ZWdlciAxLgorICAgICAqIEByZXR1cm4gVGhlIGxpZ2h0IFR5cGUgaWQgYXMgYSBjb25z
dGFudCBkZWZpbmVzIGluIExpZ2h0LkxJR0hUVFlQRUlEX3gKKyAgICAgKi8KKyAgICBEaXJlY3Rp
b25hbExpZ2h0LnByb3RvdHlwZS5nZXRUeXBlSUQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiBfbGlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTGlnaHQiXS5MSUdIVFRZ
UEVJRF9ESVJFQ1RJT05BTExJR0hUOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUg
cGFzc2VkIG1hdHJpeCAibWF0cml4IiBhcyBwcm9qZWN0aW9uIG1hdHJpeCBmb3IgdGhlIHNoYWRv
d3MgY2FzdCBieSB0aGUgbGlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgdmlldyBtYXRyaXgu
CisgICAgICogUmV0dXJucyB0aGUgRGlyZWN0aW9uYWxMaWdodCBTaGFkb3cgcHJvamVjdGlvbiBt
YXRyaXguCisgICAgICovCisgICAgRGlyZWN0aW9uYWxMaWdodC5wcm90b3R5cGUuX3NldERlZmF1
bHRTaGFkb3dQcm9qZWN0aW9uTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgdmlld01hdHJpeCwg
cmVuZGVyTGlzdCkgeworICAgICAgICBpZiAodGhpcy5zaGFkb3dGcnVzdHVtU2l6ZSA+IDApIHsK
KyAgICAgICAgICAgIHRoaXMuX3NldERlZmF1bHRGaXhlZEZydXN0dW1TaGFkb3dQcm9qZWN0aW9u
TWF0cml4KG1hdHJpeCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0
aGlzLl9zZXREZWZhdWx0QXV0b0V4dGVuZFNoYWRvd1Byb2plY3Rpb25NYXRyaXgobWF0cml4LCB2
aWV3TWF0cml4LCByZW5kZXJMaXN0KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0cyB0aGUgcGFzc2VkIG1hdHJpeCAibWF0cml4IiBhcyBmaXhlZCBmcnVzdHVtIHByb2pl
Y3Rpb24gbWF0cml4IGZvciB0aGUgc2hhZG93cyBjYXN0IGJ5IHRoZSBsaWdodCBhY2NvcmRpbmcg
dG8gdGhlIHBhc3NlZCB2aWV3IG1hdHJpeC4KKyAgICAgKiBSZXR1cm5zIHRoZSBEaXJlY3Rpb25h
bExpZ2h0IFNoYWRvdyBwcm9qZWN0aW9uIG1hdHJpeC4KKyAgICAgKi8KKyAgICBEaXJlY3Rpb25h
bExpZ2h0LnByb3RvdHlwZS5fc2V0RGVmYXVsdEZpeGVkRnJ1c3R1bVNoYWRvd1Byb2plY3Rpb25N
YXRyaXggPSBmdW5jdGlvbiAobWF0cml4KSB7CisgICAgICAgIHZhciBhY3RpdmVDYW1lcmEgPSB0
aGlzLmdldFNjZW5lKCkuYWN0aXZlQ2FtZXJhOworICAgICAgICBpZiAoIWFjdGl2ZUNhbWVyYSkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNYXRyaXgiXS5PcnRob0xIVG9SZWYo
dGhpcy5zaGFkb3dGcnVzdHVtU2l6ZSwgdGhpcy5zaGFkb3dGcnVzdHVtU2l6ZSwgdGhpcy5zaGFk
b3dNaW5aICE9PSB1bmRlZmluZWQgPyB0aGlzLnNoYWRvd01pblogOiBhY3RpdmVDYW1lcmEubWlu
WiwgdGhpcy5zaGFkb3dNYXhaICE9PSB1bmRlZmluZWQgPyB0aGlzLnNoYWRvd01heFogOiBhY3Rp
dmVDYW1lcmEubWF4WiwgbWF0cml4KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IHBhc3NlZCBtYXRyaXggIm1hdHJpeCIgYXMgYXV0byBleHRlbmQgcHJvamVjdGlvbiBtYXRyaXgg
Zm9yIHRoZSBzaGFkb3dzIGNhc3QgYnkgdGhlIGxpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2Vk
IHZpZXcgbWF0cml4LgorICAgICAqIFJldHVybnMgdGhlIERpcmVjdGlvbmFsTGlnaHQgU2hhZG93
IHByb2plY3Rpb24gbWF0cml4LgorICAgICAqLworICAgIERpcmVjdGlvbmFsTGlnaHQucHJvdG90
eXBlLl9zZXREZWZhdWx0QXV0b0V4dGVuZFNoYWRvd1Byb2plY3Rpb25NYXRyaXggPSBmdW5jdGlv
biAobWF0cml4LCB2aWV3TWF0cml4LCByZW5kZXJMaXN0KSB7CisgICAgICAgIHZhciBhY3RpdmVD
YW1lcmEgPSB0aGlzLmdldFNjZW5lKCkuYWN0aXZlQ2FtZXJhOworICAgICAgICBpZiAoIWFjdGl2
ZUNhbWVyYSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIENo
ZWNrIGV4dGVuZHMKKyAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZUV4dGVuZHMgfHwgdGhpcy5f
b3J0aG9MZWZ0ID09PSBOdW1iZXIuTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICB2YXIgdGVtcFZl
Y3RvcjMgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
VmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgICAgIHRoaXMuX29ydGhvTGVmdCA9IE51bWJlci5N
QVhfVkFMVUU7CisgICAgICAgICAgICB0aGlzLl9vcnRob1JpZ2h0ID0gTnVtYmVyLk1JTl9WQUxV
RTsKKyAgICAgICAgICAgIHRoaXMuX29ydGhvVG9wID0gTnVtYmVyLk1JTl9WQUxVRTsKKyAgICAg
ICAgICAgIHRoaXMuX29ydGhvQm90dG9tID0gTnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAgICAg
IGZvciAodmFyIG1lc2hJbmRleCA9IDA7IG1lc2hJbmRleCA8IHJlbmRlckxpc3QubGVuZ3RoOyBt
ZXNoSW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBtZXNoID0gcmVuZGVyTGlzdFttZXNo
SW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbWVzaCkgeworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGJvdW5k
aW5nSW5mbyA9IG1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICAgICAgdmFyIGJv
dW5kaW5nQm94ID0gYm91bmRpbmdJbmZvLmJvdW5kaW5nQm94OworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBib3VuZGluZ0JveC52ZWN0b3JzV29ybGQubGVuZ3Ro
OyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNU
b1JlZihib3VuZGluZ0JveC52ZWN0b3JzV29ybGRbaW5kZXhdLCB2aWV3TWF0cml4LCB0ZW1wVmVj
dG9yMyk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wVmVjdG9yMy54IDwgdGhpcy5fb3J0
aG9MZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcnRob0xlZnQgPSB0ZW1w
VmVjdG9yMy54OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
ICh0ZW1wVmVjdG9yMy55IDwgdGhpcy5fb3J0aG9Cb3R0b20pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX29ydGhvQm90dG9tID0gdGVtcFZlY3RvcjMueTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGVtcFZlY3RvcjMueCA+IHRoaXMuX29y
dGhvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29ydGhvUmlnaHQgPSB0
ZW1wVmVjdG9yMy54OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmICh0ZW1wVmVjdG9yMy55ID4gdGhpcy5fb3J0aG9Ub3ApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX29ydGhvVG9wID0gdGVtcFZlY3RvcjMueTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB2YXIgeE9mZnNldCA9IHRoaXMuX29ydGhvUmlnaHQgLSB0aGlzLl9vcnRob0xlZnQ7CisgICAg
ICAgIHZhciB5T2Zmc2V0ID0gdGhpcy5fb3J0aG9Ub3AgLSB0aGlzLl9vcnRob0JvdHRvbTsKKyAg
ICAgICAgaWYgKHRoaXMuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgeworICAgICAg
ICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1h
dHJpeCJdLk9ydGhvT2ZmQ2VudGVyUkhUb1JlZih0aGlzLl9vcnRob0xlZnQgLSB4T2Zmc2V0ICog
dGhpcy5zaGFkb3dPcnRob1NjYWxlLCB0aGlzLl9vcnRob1JpZ2h0ICsgeE9mZnNldCAqIHRoaXMu
c2hhZG93T3J0aG9TY2FsZSwgdGhpcy5fb3J0aG9Cb3R0b20gLSB5T2Zmc2V0ICogdGhpcy5zaGFk
b3dPcnRob1NjYWxlLCB0aGlzLl9vcnRob1RvcCArIHlPZmZzZXQgKiB0aGlzLnNoYWRvd09ydGhv
U2NhbGUsIHRoaXMuc2hhZG93TWluWiAhPT0gdW5kZWZpbmVkID8gdGhpcy5zaGFkb3dNaW5aIDog
YWN0aXZlQ2FtZXJhLm1pblosIHRoaXMuc2hhZG93TWF4WiAhPT0gdW5kZWZpbmVkID8gdGhpcy5z
aGFkb3dNYXhaIDogYWN0aXZlQ2FtZXJhLm1heFosIG1hdHJpeCk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTWF0cml4Il0uT3J0aG9PZmZDZW50ZXJMSFRvUmVmKHRoaXMuX29ydGhv
TGVmdCAtIHhPZmZzZXQgKiB0aGlzLnNoYWRvd09ydGhvU2NhbGUsIHRoaXMuX29ydGhvUmlnaHQg
KyB4T2Zmc2V0ICogdGhpcy5zaGFkb3dPcnRob1NjYWxlLCB0aGlzLl9vcnRob0JvdHRvbSAtIHlP
ZmZzZXQgKiB0aGlzLnNoYWRvd09ydGhvU2NhbGUsIHRoaXMuX29ydGhvVG9wICsgeU9mZnNldCAq
IHRoaXMuc2hhZG93T3J0aG9TY2FsZSwgdGhpcy5zaGFkb3dNaW5aICE9PSB1bmRlZmluZWQgPyB0
aGlzLnNoYWRvd01pblogOiBhY3RpdmVDYW1lcmEubWluWiwgdGhpcy5zaGFkb3dNYXhaICE9PSB1
bmRlZmluZWQgPyB0aGlzLnNoYWRvd01heFogOiBhY3RpdmVDYW1lcmEubWF4WiwgbWF0cml4KTsK
KyAgICAgICAgfQorICAgIH07CisgICAgRGlyZWN0aW9uYWxMaWdodC5wcm90b3R5cGUuX2J1aWxk
VW5pZm9ybUxheW91dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZl
ci5hZGRVbmlmb3JtKCJ2TGlnaHREYXRhIiwgNCk7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZm
ZXIuYWRkVW5pZm9ybSgidkxpZ2h0RGlmZnVzZSIsIDQpOworICAgICAgICB0aGlzLl91bmlmb3Jt
QnVmZmVyLmFkZFVuaWZvcm0oInZMaWdodFNwZWN1bGFyIiwgMyk7CisgICAgICAgIHRoaXMuX3Vu
aWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgic2hhZG93c0luZm8iLCAzKTsKKyAgICAgICAgdGhpcy5f
dW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJkZXB0aFZhbHVlcyIsIDIpOworICAgICAgICB0aGlz
Ll91bmlmb3JtQnVmZmVyLmNyZWF0ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0
aGUgcGFzc2VkIEVmZmVjdCBvYmplY3Qgd2l0aCB0aGUgRGlyZWN0aW9uYWxMaWdodCB0cmFuc2Zv
cm1lZCBwb3NpdGlvbiAob3IgcG9zaXRpb24gaWYgbm90IHBhcmVudGVkKSBhbmQgdGhlIHBhc3Nl
ZCBuYW1lLgorICAgICAqIEBwYXJhbSBlZmZlY3QgVGhlIGVmZmVjdCB0byB1cGRhdGUKKyAgICAg
KiBAcGFyYW0gbGlnaHRJbmRleCBUaGUgaW5kZXggb2YgdGhlIGxpZ2h0IGluIHRoZSBlZmZlY3Qg
dG8gdXBkYXRlCisgICAgICogQHJldHVybnMgVGhlIGRpcmVjdGlvbmFsIGxpZ2h0CisgICAgICov
CisgICAgRGlyZWN0aW9uYWxMaWdodC5wcm90b3R5cGUudHJhbnNmZXJUb0VmZmVjdCA9IGZ1bmN0
aW9uIChlZmZlY3QsIGxpZ2h0SW5kZXgpIHsKKyAgICAgICAgaWYgKHRoaXMuY29tcHV0ZVRyYW5z
Zm9ybWVkSW5mb3JtYXRpb24oKSkgeworICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U2NlbmUoKS51
c2VSaWdodEhhbmRlZFN5c3RlbSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZm
ZXIudXBkYXRlRmxvYXQ0KCJ2TGlnaHREYXRhIiwgLXRoaXMudHJhbnNmb3JtZWREaXJlY3Rpb24u
eCwgLXRoaXMudHJhbnNmb3JtZWREaXJlY3Rpb24ueSwgLXRoaXMudHJhbnNmb3JtZWREaXJlY3Rp
b24ueiwgMSwgbGlnaHRJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgidkxpZ2h0
RGF0YSIsIHRoaXMudHJhbnNmb3JtZWREaXJlY3Rpb24ueCwgdGhpcy50cmFuc2Zvcm1lZERpcmVj
dGlvbi55LCB0aGlzLnRyYW5zZm9ybWVkRGlyZWN0aW9uLnosIDEsIGxpZ2h0SW5kZXgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgeworICAgICAgICAgICAg
dGhpcy5fdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDQoInZMaWdodERhdGEiLCAtdGhpcy5kaXJl
Y3Rpb24ueCwgLXRoaXMuZGlyZWN0aW9uLnksIC10aGlzLmRpcmVjdGlvbi56LCAxLCBsaWdodElu
ZGV4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3VuaWZv
cm1CdWZmZXIudXBkYXRlRmxvYXQ0KCJ2TGlnaHREYXRhIiwgdGhpcy5kaXJlY3Rpb24ueCwgdGhp
cy5kaXJlY3Rpb24ueSwgdGhpcy5kaXJlY3Rpb24ueiwgMSwgbGlnaHRJbmRleCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBEaXJlY3Rpb25hbExpZ2h0LnBy
b3RvdHlwZS50cmFuc2ZlclRvTm9kZU1hdGVyaWFsRWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCwg
bGlnaHREYXRhVW5pZm9ybU5hbWUpIHsKKyAgICAgICAgaWYgKHRoaXMuY29tcHV0ZVRyYW5zZm9y
bWVkSW5mb3JtYXRpb24oKSkgeworICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U2NlbmUoKS51c2VS
aWdodEhhbmRlZFN5c3RlbSkgeworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDMobGln
aHREYXRhVW5pZm9ybU5hbWUsIC10aGlzLnRyYW5zZm9ybWVkRGlyZWN0aW9uLngsIC10aGlzLnRy
YW5zZm9ybWVkRGlyZWN0aW9uLnksIC10aGlzLnRyYW5zZm9ybWVkRGlyZWN0aW9uLnopOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNl
dEZsb2F0MyhsaWdodERhdGFVbmlmb3JtTmFtZSwgdGhpcy50cmFuc2Zvcm1lZERpcmVjdGlvbi54
LCB0aGlzLnRyYW5zZm9ybWVkRGlyZWN0aW9uLnksIHRoaXMudHJhbnNmb3JtZWREaXJlY3Rpb24u
eik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVtKSB7CisgICAg
ICAgICAgICBlZmZlY3Quc2V0RmxvYXQzKGxpZ2h0RGF0YVVuaWZvcm1OYW1lLCAtdGhpcy5kaXJl
Y3Rpb24ueCwgLXRoaXMuZGlyZWN0aW9uLnksIC10aGlzLmRpcmVjdGlvbi56KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDMobGlnaHREYXRh
VW5pZm9ybU5hbWUsIHRoaXMuZGlyZWN0aW9uLngsIHRoaXMuZGlyZWN0aW9uLnksIHRoaXMuZGly
ZWN0aW9uLnopOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
LyoqCisgICAgICogR2V0cyB0aGUgbWluWiB1c2VkIGZvciBzaGFkb3cgYWNjb3JkaW5nIHRvIGJv
dGggdGhlIHNjZW5lIGFuZCB0aGUgbGlnaHQuCisgICAgICoKKyAgICAgKiBWYWx1ZXMgYXJlIGZp
eGVkIG9uIGRpcmVjdGlvbmFsIGxpZ2h0cyBhcyBpdCByZWxpZXMgb24gYW4gb3J0aG8gcHJvamVj
dGlvbiBoZW5jZSB0aGUgbmVlZCB0byBjb252ZXJ0IGJlaW5nCisgICAgICogLTEgYW5kIDEgdG8g
MCBhbmQgMSBkb2luZyAoZGVwdGggKyBtaW4pIC8gKG1pbiArIG1heCkgLT4gKGRlcHRoICsgMSkg
LyAoMSArIDEpIC0+IChkZXB0aCAqIDAuNSkgKyAwLjUuCisgICAgICogQHBhcmFtIGFjdGl2ZUNh
bWVyYSBUaGUgY2FtZXJhIHdlIGFyZSByZXR1cm5pbmcgdGhlIG1pbiBmb3IKKyAgICAgKiBAcmV0
dXJucyB0aGUgZGVwdGggbWluIHoKKyAgICAgKi8KKyAgICBEaXJlY3Rpb25hbExpZ2h0LnByb3Rv
dHlwZS5nZXREZXB0aE1pblogPSBmdW5jdGlvbiAoYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgIHJl
dHVybiAxOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbWF4WiB1c2VkIGZvciBz
aGFkb3cgYWNjb3JkaW5nIHRvIGJvdGggdGhlIHNjZW5lIGFuZCB0aGUgbGlnaHQuCisgICAgICoK
KyAgICAgKiBWYWx1ZXMgYXJlIGZpeGVkIG9uIGRpcmVjdGlvbmFsIGxpZ2h0cyBhcyBpdCByZWxp
ZXMgb24gYW4gb3J0aG8gcHJvamVjdGlvbiBoZW5jZSB0aGUgbmVlZCB0byBjb252ZXJ0IGJlaW5n
CisgICAgICogLTEgYW5kIDEgdG8gMCBhbmQgMSBkb2luZyAoZGVwdGggKyBtaW4pIC8gKG1pbiAr
IG1heCkgLT4gKGRlcHRoICsgMSkgLyAoMSArIDEpIC0+IChkZXB0aCAqIDAuNSkgKyAwLjUuCisg
ICAgICogQHBhcmFtIGFjdGl2ZUNhbWVyYSBUaGUgY2FtZXJhIHdlIGFyZSByZXR1cm5pbmcgdGhl
IG1heCBmb3IKKyAgICAgKiBAcmV0dXJucyB0aGUgZGVwdGggbWF4IHoKKyAgICAgKi8KKyAgICBE
aXJlY3Rpb25hbExpZ2h0LnByb3RvdHlwZS5nZXREZXB0aE1heFogPSBmdW5jdGlvbiAoYWN0aXZl
Q2FtZXJhKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH07CisgICAgLyoqCisgICAgICogUHJl
cGFyZXMgdGhlIGxpc3Qgb2YgZGVmaW5lcyBzcGVjaWZpYyB0byB0aGUgbGlnaHQgdHlwZS4KKyAg
ICAgKiBAcGFyYW0gZGVmaW5lcyB0aGUgbGlzdCBvZiBkZWZpbmVzCisgICAgICogQHBhcmFtIGxp
Z2h0SW5kZXggZGVmaW5lcyB0aGUgaW5kZXggb2YgdGhlIGxpZ2h0IGZvciB0aGUgZWZmZWN0Cisg
ICAgICovCisgICAgRGlyZWN0aW9uYWxMaWdodC5wcm90b3R5cGUucHJlcGFyZUxpZ2h0U3BlY2lm
aWNEZWZpbmVzID0gZnVuY3Rpb24gKGRlZmluZXMsIGxpZ2h0SW5kZXgpIHsKKyAgICAgICAgZGVm
aW5lc1siRElSTElHSFQiICsgbGlnaHRJbmRleF0gPSB0cnVlOworICAgIH07CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBEaXJlY3Rpb25hbExpZ2h0LnByb3RvdHlwZSwgInNoYWRvd0ZydXN0
dW1TaXplIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBEaXJlY3Rpb25hbExp
Z2h0LnByb3RvdHlwZSwgInNoYWRvd09ydGhvU2NhbGUiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIERpcmVjdGlvbmFsTGlnaHQucHJvdG90eXBlLCAiYXV0b1VwZGF0ZUV4dGVu
ZHMiLCB2b2lkIDApOworICAgIHJldHVybiBEaXJlY3Rpb25hbExpZ2h0OworfShfc2hhZG93TGln
aHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2hhZG93TGlnaHQiXSkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0xpZ2h0cy9oZW1pc3BoZXJpY0xpZ2h0LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTGlnaHRzL2hl
bWlzcGhlcmljTGlnaHQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEhlbWlzcGhlcmljTGlnaHQgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSGVtaXNwaGVyaWNMaWdodCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gSGVtaXNwaGVyaWNMaWdodDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3Jz
ICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9saWdodCAqLyAiLi9MaWdodHMvbGlnaHQudHMiKTsKKworCisKKwor
CisKK19ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGUiXS5BZGROb2RlQ29u
c3RydWN0b3IoIkxpZ2h0X1R5cGVfMyIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSkgeworICAgIHJl
dHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSGVtaXNwaGVyaWNMaWdodChuYW1lLCBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlpl
cm8oKSwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIFRoZSBIZW1pc3BoZXJpY0xpZ2h0IHNpbXVs
YXRlcyB0aGUgYW1iaWVudCBlbnZpcm9ubWVudCBsaWdodCwKKyAqIHNvIHRoZSBwYXNzZWQgZGly
ZWN0aW9uIGlzIHRoZSBsaWdodCByZWZsZWN0aW9uIGRpcmVjdGlvbiwgbm90IHRoZSBpbmNvbWlu
ZyBkaXJlY3Rpb24uCisgKi8KK3ZhciBIZW1pc3BoZXJpY0xpZ2h0ID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZXh0ZW5kcyJdKEhlbWlzcGhlcmljTGlnaHQsIF9zdXBlcik7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIEhlbWlzcGhlcmljTGlnaHQgb2JqZWN0IGluIHRoZSBzY2VuZSBhY2NvcmRp
bmcgdG8gdGhlIHBhc3NlZCBkaXJlY3Rpb24gKFZlY3RvcjMpLgorICAgICAqIFRoZSBIZW1pc3Bo
ZXJpY0xpZ2h0IHNpbXVsYXRlcyB0aGUgYW1iaWVudCBlbnZpcm9ubWVudCBsaWdodCwgc28gdGhl
IHBhc3NlZCBkaXJlY3Rpb24gaXMgdGhlIGxpZ2h0IHJlZmxlY3Rpb24gZGlyZWN0aW9uLCBub3Qg
dGhlIGluY29taW5nIGRpcmVjdGlvbi4KKyAgICAgKiBUaGUgSGVtaXNwaGVyaWNMaWdodCBjYW4n
dCBjYXN0IHNoYWRvd3MuCisgICAgICogRG9jdW1lbnRhdGlvbiA6IGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vYmFieWxvbjEwMS9saWdodHMKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgZnJpZW5k
bHkgbmFtZSBvZiB0aGUgbGlnaHQKKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uIFRoZSBkaXJlY3Rp
b24gb2YgdGhlIGxpZ2h0IHJlZmxlY3Rpb24KKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5l
IHRoZSBsaWdodCBiZWxvbmdzIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gSGVtaXNwaGVyaWNM
aWdodChuYW1lLCBkaXJlY3Rpb24sIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAg
ICogVGhlIGdyb3VuZENvbG9yIGlzIHRoZSBsaWdodCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9u
IHRvIHRoZSBvbmUgc3BlY2lmaWVkIGR1cmluZyBjcmVhdGlvbi4KKyAgICAgICAgICogWW91IGNh
biB0aGluayBvZiB0aGUgZGlmZnVzZSBhbmQgc3BlY3VsYXIgbGlnaHQgYXMgY29taW5nIGZyb20g
dGhlIGNlbnRyZSBvZiB0aGUgb2JqZWN0IGluIHRoZSBnaXZlbiBkaXJlY3Rpb24gYW5kIHRoZSBn
cm91bmRDb2xvciBsaWdodCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLgorICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMuZ3JvdW5kQ29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29sb3IzIl0oMC4wLCAwLjAsIDAuMCk7CisgICAgICAg
IF90aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlVwKCk7CisgICAgICAgIHJldHVybiBf
dGhpczsKKyAgICB9CisgICAgSGVtaXNwaGVyaWNMaWdodC5wcm90b3R5cGUuX2J1aWxkVW5pZm9y
bUxheW91dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRV
bmlmb3JtKCJ2TGlnaHREYXRhIiwgNCk7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRk
VW5pZm9ybSgidkxpZ2h0RGlmZnVzZSIsIDQpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVy
LmFkZFVuaWZvcm0oInZMaWdodFNwZWN1bGFyIiwgMyk7CisgICAgICAgIHRoaXMuX3VuaWZvcm1C
dWZmZXIuYWRkVW5pZm9ybSgidkxpZ2h0R3JvdW5kIiwgMyk7CisgICAgICAgIHRoaXMuX3VuaWZv
cm1CdWZmZXIuYWRkVW5pZm9ybSgic2hhZG93c0luZm8iLCAzKTsKKyAgICAgICAgdGhpcy5fdW5p
Zm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJkZXB0aFZhbHVlcyIsIDIpOworICAgICAgICB0aGlzLl91
bmlmb3JtQnVmZmVyLmNyZWF0ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0
aGUgc3RyaW5nICJIZW1pc3BoZXJpY0xpZ2h0Ii4KKyAgICAgKiBAcmV0dXJuIFRoZSBjbGFzcyBu
YW1lCisgICAgICovCisgICAgSGVtaXNwaGVyaWNMaWdodC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkhlbWlzcGhlcmljTGlnaHQiOworICAg
IH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgSGVtaXNwaGVyaWNMaWdodCBkaXJlY3Rpb24g
dG93YXJkcyB0aGUgcGFzc2VkIHRhcmdldCAoVmVjdG9yMykuCisgICAgICogUmV0dXJucyB0aGUg
dXBkYXRlZCBkaXJlY3Rpb24uCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHRoZSBk
aXJlY3Rpb24gc2hvdWxkIHBvaW50IHRvCisgICAgICogQHJldHVybiBUaGUgY29tcHV0ZWQgZGly
ZWN0aW9uCisgICAgICovCisgICAgSGVtaXNwaGVyaWNMaWdodC5wcm90b3R5cGUuc2V0RGlyZWN0
aW9uVG9UYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7CisgICAgICAgIHRoaXMuZGlyZWN0aW9u
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3Rv
cjMiXS5Ob3JtYWxpemUodGFyZ2V0LnN1YnRyYWN0KF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpKSk7CisgICAgICAgIHJldHVy
biB0aGlzLmRpcmVjdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNo
YWRvdyBnZW5lcmF0b3IgYXNzb2NpYXRlZCB0byB0aGUgbGlnaHQuCisgICAgICogQHJldHVybnMg
QWx3YXlzIG51bGwgZm9yIGhlbWlzcGhlcmljIGxpZ2h0cyBiZWNhdXNlIGl0IGRvZXMgbm90IHN1
cHBvcnQgc2hhZG93cy4KKyAgICAgKi8KKyAgICBIZW1pc3BoZXJpY0xpZ2h0LnByb3RvdHlwZS5n
ZXRTaGFkb3dHZW5lcmF0b3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBudWxsOwor
ICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgcGFzc2VkIEVmZmVjdCBvYmplY3Qgd2l0
aCB0aGUgSGVtaXNwaGVyaWNMaWdodCBub3JtYWxpemVkIGRpcmVjdGlvbiBhbmQgY29sb3IgYW5k
IHRoZSBwYXNzZWQgbmFtZSAoc3RyaW5nKS4KKyAgICAgKiBAcGFyYW0gZWZmZWN0IFRoZSBlZmZl
Y3QgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIGxpZ2h0SW5kZXggVGhlIGluZGV4IG9mIHRoZSBs
aWdodCBpbiB0aGUgZWZmZWN0IHRvIHVwZGF0ZQorICAgICAqIEByZXR1cm5zIFRoZSBoZW1pc3Bo
ZXJpYyBsaWdodAorICAgICAqLworICAgIEhlbWlzcGhlcmljTGlnaHQucHJvdG90eXBlLnRyYW5z
ZmVyVG9FZmZlY3QgPSBmdW5jdGlvbiAoZWZmZWN0LCBsaWdodEluZGV4KSB7CisgICAgICAgIHZh
ciBub3JtYWxpemVEaXJlY3Rpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLk5vcm1hbGl6ZSh0aGlzLmRpcmVjdGlvbik7CisgICAg
ICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQ0KCJ2TGlnaHREYXRhIiwgbm9ybWFs
aXplRGlyZWN0aW9uLngsIG5vcm1hbGl6ZURpcmVjdGlvbi55LCBub3JtYWxpemVEaXJlY3Rpb24u
eiwgMC4wLCBsaWdodEluZGV4KTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci51cGRhdGVD
b2xvcjMoInZMaWdodEdyb3VuZCIsIHRoaXMuZ3JvdW5kQ29sb3Iuc2NhbGUodGhpcy5pbnRlbnNp
dHkpLCBsaWdodEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBIZW1p
c3BoZXJpY0xpZ2h0LnByb3RvdHlwZS50cmFuc2ZlclRvTm9kZU1hdGVyaWFsRWZmZWN0ID0gZnVu
Y3Rpb24gKGVmZmVjdCwgbGlnaHREYXRhVW5pZm9ybU5hbWUpIHsKKyAgICAgICAgdmFyIG5vcm1h
bGl6ZURpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJWZWN0b3IzIl0uTm9ybWFsaXplKHRoaXMuZGlyZWN0aW9uKTsKKyAgICAgICAgZWZm
ZWN0LnNldEZsb2F0MyhsaWdodERhdGFVbmlmb3JtTmFtZSwgbm9ybWFsaXplRGlyZWN0aW9uLngs
IG5vcm1hbGl6ZURpcmVjdGlvbi55LCBub3JtYWxpemVEaXJlY3Rpb24ueik7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ29tcHV0ZXMgdGhlIHdvcmxkIG1h
dHJpeCBvZiB0aGUgbm9kZQorICAgICAqIEBwYXJhbSBmb3JjZSBkZWZpbmVzIGlmIHRoZSBjYWNo
ZSB2ZXJzaW9uIHNob3VsZCBiZSBpbnZhbGlkYXRlZCBmb3JjaW5nIHRoZSB3b3JsZCBtYXRyaXgg
dG8gYmUgY3JlYXRlZCBmcm9tIHNjcmF0Y2gKKyAgICAgKiBAcGFyYW0gdXNlV2FzVXBkYXRlZEZs
YWcgZGVmaW5lcyBhIHJlc2VydmVkIHByb3BlcnR5CisgICAgICogQHJldHVybnMgdGhlIHdvcmxk
IG1hdHJpeAorICAgICAqLworICAgIEhlbWlzcGhlcmljTGlnaHQucHJvdG90eXBlLmNvbXB1dGVX
b3JsZE1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl93b3JsZE1hdHJp
eCkgeworICAgICAgICAgICAgdGhpcy5fd29ybGRNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRNYXRyaXg7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIDMuCisgICAgICogQHJldHVybiBUaGUgbGlnaHQg
VHlwZSBpZCBhcyBhIGNvbnN0YW50IGRlZmluZXMgaW4gTGlnaHQuTElHSFRUWVBFSURfeAorICAg
ICAqLworICAgIEhlbWlzcGhlcmljTGlnaHQucHJvdG90eXBlLmdldFR5cGVJRCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuIF9saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJMaWdodCJdLkxJR0hUVFlQRUlEX0hFTUlTUEhFUklDTElHSFQ7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBQcmVwYXJlcyB0aGUgbGlzdCBvZiBkZWZpbmVzIHNwZWNpZmljIHRvIHRoZSBsaWdo
dCB0eXBlLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0IG9mIGRlZmluZXMKKyAgICAg
KiBAcGFyYW0gbGlnaHRJbmRleCBkZWZpbmVzIHRoZSBpbmRleCBvZiB0aGUgbGlnaHQgZm9yIHRo
ZSBlZmZlY3QKKyAgICAgKi8KKyAgICBIZW1pc3BoZXJpY0xpZ2h0LnByb3RvdHlwZS5wcmVwYXJl
TGlnaHRTcGVjaWZpY0RlZmluZXMgPSBmdW5jdGlvbiAoZGVmaW5lcywgbGlnaHRJbmRleCkgewor
ICAgICAgICBkZWZpbmVzWyJIRU1JTElHSFQiICsgbGlnaHRJbmRleF0gPSB0cnVlOworICAgIH07
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplQXNDb2xvcjMiXSkoKQorICAgIF0sIEhlbWlzcGhlcmljTGlnaHQucHJv
dG90eXBlLCAiZ3JvdW5kQ29sb3IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVmVjdG9yMyJd
KSgpCisgICAgXSwgSGVtaXNwaGVyaWNMaWdodC5wcm90b3R5cGUsICJkaXJlY3Rpb24iLCB2b2lk
IDApOworICAgIHJldHVybiBIZW1pc3BoZXJpY0xpZ2h0OworfShfbGlnaHRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siTGlnaHQiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L0xpZ2h0cy9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9MaWdodHMvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBMaWdodCwgU2hhZG93TGlnaHQsIERpcmVjdGlvbmFsTGln
aHQsIEhlbWlzcGhlcmljTGlnaHQsIFBvaW50TGlnaHQsIFNwb3RMaWdodCwgU2hhZG93R2VuZXJh
dG9yLCBTaGFkb3dHZW5lcmF0b3JTY2VuZUNvbXBvbmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpZ2h0ICovICIuL0xpZ2h0cy9saWdodC50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xpZ2h0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxpZ2h0Il07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3NoYWRvd0xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NoYWRvd0xpZ2h0ICovICIuL0xpZ2h0cy9zaGFk
b3dMaWdodC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaGFkb3dMaWdodCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX3NoYWRvd0xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNoYWRv
d0xpZ2h0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRvd3NfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
U2hhZG93cy9pbmRleCAqLyAiLi9MaWdodHMvU2hhZG93cy9pbmRleC50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJTaGFkb3dHZW5lcmF0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9TaGFkb3dzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNoYWRvd0dlbmVyYXRvciJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTaGFkb3dHZW5lcmF0b3JTY2VuZUNvbXBvbmVudCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX1NoYWRvd3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfZGlyZWN0aW9uYWxMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kaXJlY3Rpb25hbExpZ2h0ICovICIuL0xpZ2h0
cy9kaXJlY3Rpb25hbExpZ2h0LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRpcmVjdGlvbmFsTGln
aHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kaXJlY3Rpb25hbExpZ2h0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIkRpcmVjdGlvbmFsTGlnaHQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfaGVtaXNwaGVyaWNMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZW1pc3BoZXJpY0xpZ2h0ICovICIuL0xpZ2h0
cy9oZW1pc3BoZXJpY0xpZ2h0LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhlbWlzcGhlcmljTGln
aHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9oZW1pc3BoZXJpY0xpZ2h0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIkhlbWlzcGhlcmljTGlnaHQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfcG9pbnRMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb2ludExpZ2h0ICovICIuL0xpZ2h0cy9wb2ludExpZ2h0
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvaW50TGlnaHQiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9wb2ludExpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlBvaW50TGlnaHQiXTsg
fSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BvdExpZ2h0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Nwb3RMaWdodCAqLyAi
Li9MaWdodHMvc3BvdExpZ2h0LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNwb3RMaWdodCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3Nwb3RMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9f
WyJTcG90TGlnaHQiXTsgfSk7CisKKworCisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9MaWdodHMvbGlnaHQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vTGlnaHRzL2xpZ2h0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTGlnaHQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTGlnaHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIExpZ2h0OyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xp
Yi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAq
LyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3Iu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZSAqLyAiLi9ub2RlLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc191bmlmb3JtQnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRlcmlhbHMvdW5pZm9ybUJ1ZmZlciAqLyAiLi9NYXRlcmlhbHMvdW5pZm9ybUJ1ZmZlci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90eXBlU3Rv
cmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisKKworLyoqCisgKiBCYXNl
IGNsYXNzIG9mIGFsbCB0aGUgbGlnaHRzIGluIEJhYnlsb24uIEl0IGdyb3VwcyBhbGwgdGhlIGdl
bmVyaWMgaW5mb3JtYXRpb24gYWJvdXQgbGlnaHRzLgorICogTGlnaHRzIGFyZSB1c2VkLCBhcyB5
b3Ugd291bGQgZXhwZWN0LCB0byBhZmZlY3QgaG93IG1lc2hlcyBhcmUgc2VlbiwgaW4gdGVybXMg
b2YgYm90aCBpbGx1bWluYXRpb24gYW5kIGNvbG91ci4KKyAqIEFsbCBtZXNoZXMgYWxsb3cgbGln
aHQgdG8gcGFzcyB0aHJvdWdoIHRoZW0gdW5sZXNzIHNoYWRvdyBnZW5lcmF0aW9uIGlzIGFjdGl2
YXRlZC4gVGhlIGRlZmF1bHQgbnVtYmVyIG9mIGxpZ2h0cyBhbGxvd2VkIGlzIGZvdXIgYnV0IHRo
aXMgY2FuIGJlIGluY3JlYXNlZC4KKyAqLwordmFyIExpZ2h0ID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKExpZ2h0LCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBM
aWdodCBvYmplY3QgaW4gdGhlIHNjZW5lLgorICAgICAqIERvY3VtZW50YXRpb24gOiBodHRwczov
L2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvbGlnaHRzCisgICAgICogQHBhcmFtIG5hbWUg
VGhlIGZpcmVuZGx5IG5hbWUgb2YgdGhlIGxpZ2h0CisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBz
Y2VuZSB0aGUgbGlnaHQgYmVsb25ncyB0b28KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBMaWdodChu
YW1lLCBzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1l
LCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERpZmZ1c2UgZ2l2ZXMg
dGhlIGJhc2ljIGNvbG9yIHRvIGFuIG9iamVjdC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LmRpZmZ1c2UgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siQ29sb3IzIl0oMS4wLCAxLjAsIDEuMCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBT
cGVjdWxhciBwcm9kdWNlcyBhIGhpZ2hsaWdodCBjb2xvciBvbiBhbiBvYmplY3QuCisgICAgICAg
ICAqIE5vdGU6IFRoaXMgaXMgbm90ZSBhZmZlY3RpbmcgUEJSIG1hdGVyaWFscy4KKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLnNwZWN1bGFyID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbG9yMyJdKDEuMCwgMS4wLCAxLjApOworICAgICAg
ICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgZmFsbG9mZiB0eXBlIGZvciB0aGlzIGxpZ2h0
LiBUaGlzIGxldHMgb3ZlcnJyaWRpbmcgaG93IHB1bmN0dWFsIGxpZ2h0IGFyZQorICAgICAgICAg
KiBmYWxsaW5nIG9mZiBiYXNlIG9uIHJhbmdlIG9yIGFuZ2xlLgorICAgICAgICAgKiBUaGlzIGNh
biBiZSBzZXQgdG8gYW55IHZhbHVlcyBpbiBMaWdodC5GQUxMT0ZGX3guCisgICAgICAgICAqCisg
ICAgICAgICAqIE5vdGU6IFRoaXMgaXMgb25seSB1c2VmdWwgZm9yIFBCUiBNYXRlcmlhbHMgYXQg
dGhlIG1vbWVudC4gVGhpcyBjb3VsZCBiZSBleHRlbmRlZCBpZiByZXF1aXJlZCB0bworICAgICAg
ICAgKiBvdGhlciB0eXBlcyBvZiBtYXRlcmlhbHMuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5mYWxsb2ZmVHlwZSA9IExpZ2h0LkZBTExPRkZfREVGQVVMVDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFN0cmVuZ3RoIG9mIHRoZSBsaWdodC4KKyAgICAgICAgICogTm90ZTogQnkgZGVmYXVs
dCBpdCBpcyBkZWZpbmUgaW4gdGhlIGZyYW1ld29yayBvd24gdW5pdC4KKyAgICAgICAgICogTm90
ZTogSW4gUEJSIG1hdGVyaWFscyB0aGUgaW50ZW5zaXR5TW9kZSBjYW4gYmUgdXNlIHRvIGNob3Nl
IHdoYXQgdW5pdCB0aGUgaW50ZW5zaXR5IGlzIGRlZmluZWQgaW4uCisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5pbnRlbnNpdHkgPSAxLjA7CisgICAgICAgIF90aGlzLl9yYW5nZSA9IE51bWJl
ci5NQVhfVkFMVUU7CisgICAgICAgIF90aGlzLl9pbnZlcnNlU3F1YXJlZFJhbmdlID0gMDsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIENhY2hlZCBwaG90b21ldHJpYyBzY2FsZSBkZWZhdWx0IHRv
IDEuMCBhcyB0aGUgYXV0b21hdGljIGludGVuc2l0eSBtb2RlIGRlZmF1bHRzIHRvIDEuMCBmb3Ig
ZXZlcnkgdHlwZQorICAgICAgICAgKiBvZiBsaWdodC4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLl9waG90b21ldHJpY1NjYWxlID0gMS4wOworICAgICAgICBfdGhpcy5faW50ZW5zaXR5TW9k
ZSA9IExpZ2h0LklOVEVOU0lUWU1PREVfQVVUT01BVElDOworICAgICAgICBfdGhpcy5fcmFkaXVz
ID0gMC4wMDAwMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhlIHJlbmRlcmlu
ZyBwcmlvcml0eSBvZiB0aGUgbGlnaHRzLiBJdCBjYW4gaGVscCBpbiBjYXNlIG9mIGZhbGxiYWNr
IG9yIG51bWJlciBvZiBsaWdodHMKKyAgICAgICAgICogZXhjZWVkaW5nIHRoZSBudW1iZXIgYWxs
b3dlZCBvZiB0aGUgbWF0ZXJpYWxzLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucmVuZGVy
UHJpb3JpdHkgPSAwOworICAgICAgICBfdGhpcy5fc2hhZG93RW5hYmxlZCA9IHRydWU7CisgICAg
ICAgIF90aGlzLl9leGNsdWRlV2l0aExheWVyTWFzayA9IDA7CisgICAgICAgIF90aGlzLl9pbmNs
dWRlT25seVdpdGhMYXllck1hc2sgPSAwOworICAgICAgICBfdGhpcy5fbGlnaHRtYXBNb2RlID0g
MDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4gSW50ZXJuYWwgdXNlIG9ubHkuCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5fZXhjbHVkZWRNZXNoZXNJZHMgPSBuZXcgQXJyYXko
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4gSW50ZXJuYWwgdXNlIG9ubHkuCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5faW5jbHVkZWRPbmx5TWVzaGVzSWRzID0gbmV3IEFy
cmF5KCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9pc0xpZ2h0ID0g
dHJ1ZTsKKyAgICAgICAgX3RoaXMuZ2V0U2NlbmUoKS5hZGRMaWdodChfdGhpcyk7CisgICAgICAg
IF90aGlzLl91bmlmb3JtQnVmZmVyID0gbmV3IF9NYXRlcmlhbHNfdW5pZm9ybUJ1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJVbmlmb3JtQnVmZmVyIl0oX3RoaXMuZ2V0U2NlbmUo
KS5nZXRFbmdpbmUoKSk7CisgICAgICAgIF90aGlzLl9idWlsZFVuaWZvcm1MYXlvdXQoKTsKKyAg
ICAgICAgX3RoaXMuaW5jbHVkZWRPbmx5TWVzaGVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIF90
aGlzLmV4Y2x1ZGVkTWVzaGVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIF90aGlzLl9yZXN5bmNN
ZXNoZXMoKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoTGlnaHQucHJvdG90eXBlLCAicmFuZ2UiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBEZWZpbmVzIGhvdyBmYXIgZnJvbSB0aGUgc291cmNlIHRoZSBsaWdodCBpcyBpbXBhY3Rp
bmcgaW4gc2NlbmUgdW5pdHMuCisgICAgICAgICAqIE5vdGU6IFVudXNlZCBpbiBQQlIgbWF0ZXJp
YWwgYXMgdGhlIGRpc3RhbmNlIGxpZ2h0IGZhbGxvZmYgaXMgZGVmaW5lZCBmb2xsb3dpbmcgdGhl
IGludmVyc2Ugc3F1YXJlZCBmYWxsb2ZmLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmFuZ2U7CisgICAgICAgIH0sCisg
ICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIGhvdyBmYXIgZnJvbSB0aGUgc291cmNlIHRo
ZSBsaWdodCBpcyBpbXBhY3RpbmcgaW4gc2NlbmUgdW5pdHMuCisgICAgICAgICAqIE5vdGU6IFVu
dXNlZCBpbiBQQlIgbWF0ZXJpYWwgYXMgdGhlIGRpc3RhbmNlIGxpZ2h0IGZhbGxvZmYgaXMgZGVm
aW5lZCBmb2xsb3dpbmcgdGhlIGludmVyc2Ugc3F1YXJlZCBmYWxsb2ZmLgorICAgICAgICAgKi8K
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3Jhbmdl
ID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9pbnZlcnNlU3F1YXJlZFJhbmdlID0gMS4wIC8g
KHRoaXMucmFuZ2UgKiB0aGlzLnJhbmdlKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KExpZ2h0LnByb3RvdHlwZSwgImludGVuc2l0eU1vZGUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBwaG90b21ldHJpYyBzY2FsZSB1c2VkIHRvIGlu
dGVycHJldCB0aGUgaW50ZW5zaXR5LgorICAgICAgICAgKiBUaGlzIGlzIG9ubHkgcmVsZXZhbnQg
d2l0aCBQQlIgTWF0ZXJpYWxzIHdoZXJlIHRoZSBsaWdodCBpbnRlbnNpdHkgY2FuIGJlIGRlZmlu
ZWQgaW4gYSBwaHlzaWNhbCB3YXkuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlbnNpdHlNb2RlOworICAgICAgICB9
LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgcGhvdG9tZXRyaWMgc2NhbGUgdXNl
ZCB0byBpbnRlcnByZXQgdGhlIGludGVuc2l0eS4KKyAgICAgICAgICogVGhpcyBpcyBvbmx5IHJl
bGV2YW50IHdpdGggUEJSIE1hdGVyaWFscyB3aGVyZSB0aGUgbGlnaHQgaW50ZW5zaXR5IGNhbiBi
ZSBkZWZpbmVkIGluIGEgcGh5c2ljYWwgd2F5LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2ludGVuc2l0eU1vZGUgPSB2YWx1
ZTsKKyAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVQaG90b21ldHJpY1NjYWxlKCk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaWdodC5wcm90b3R5cGUsICJy
YWRpdXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBsaWdodCByYWRpdXMg
dXNlZCBieSBQQlIgTWF0ZXJpYWxzIHRvIHNpbXVsYXRlIHNvZnQgYXJlYSBsaWdodHMuCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9yYWRpdXM7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBzZXRzIHRo
ZSBsaWdodCByYWRpdXMgdXNlZCBieSBQQlIgTWF0ZXJpYWxzIHRvIHNpbXVsYXRlIHNvZnQgYXJl
YSBsaWdodHMuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgdGhpcy5fcmFkaXVzID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9jb21w
dXRlUGhvdG9tZXRyaWNTY2FsZSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoTGlnaHQucHJvdG90eXBlLCAic2hhZG93RW5hYmxlZCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgd2V0aGVyIG9yIG5vdCB0aGUgc2hhZG93cyBhcmUgZW5hYmxl
ZCBmb3IgdGhpcyBsaWdodC4gVGhpcyBjYW4gaGVscCB0dXJuaW5nIG9mZi9vbiBzaGFkb3cgd2l0
aG91dCBkZXRhY2hpbmcKKyAgICAgICAgICogdGhlIGN1cnJlbnQgc2hhZG93IGdlbmVyYXRvci4K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3NoYWRvd0VuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBTZXRzIHdldGhlciBvciBub3QgdGhlIHNoYWRvd3MgYXJlIGVuYWJsZWQgZm9yIHRoaXMg
bGlnaHQuIFRoaXMgY2FuIGhlbHAgdHVybmluZyBvZmYvb24gc2hhZG93IHdpdGhvdXQgZGV0YWNo
aW5nCisgICAgICAgICAqIHRoZSBjdXJyZW50IHNoYWRvdyBnZW5lcmF0b3IuCisgICAgICAgICAq
LworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMu
X3NoYWRvd0VuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2hhZG93RW5hYmxlZCA9IHZhbHVlOworICAg
ICAgICAgICAgdGhpcy5fbWFya01lc2hlc0FzTGlnaHREaXJ0eSgpOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHQucHJvdG90eXBlLCAiaW5jbHVkZWRP
bmx5TWVzaGVzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb25seSBtZXNo
ZXMgaW1wYWN0ZWQgYnkgdGhpcyBsaWdodC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVkT25seU1lc2hlczsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIG9ubHkgbWVzaGVz
IGltcGFjdGVkIGJ5IHRoaXMgbGlnaHQuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faW5jbHVkZWRPbmx5TWVzaGVzID0gdmFs
dWU7CisgICAgICAgICAgICB0aGlzLl9ob29rQXJyYXlGb3JJbmNsdWRlZE9ubHkodmFsdWUpOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHQucHJvdG90
eXBlLCAiZXhjbHVkZWRNZXNoZXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBtZXNoZXMgbm90IGltcGFjdGVkIGJ5IHRoaXMgbGlnaHQuCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9leGNsdWRlZE1l
c2hlczsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIG1lc2hl
cyBub3QgaW1wYWN0ZWQgYnkgdGhpcyBsaWdodC4KKyAgICAgICAgICovCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9leGNsdWRlZE1lc2hlcyA9IHZh
bHVlOworICAgICAgICAgICAgdGhpcy5faG9va0FycmF5Rm9yRXhjbHVkZWQodmFsdWUpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHQucHJvdG90eXBl
LCAiZXhjbHVkZVdpdGhMYXllck1hc2siLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSBsYXllciBpZCB1c2UgdG8gZmluZCB3aGF0IG1lc2hlcyBhcmUgbm90IGltcGFjdGVkIGJ5
IHRoZSBsaWdodC4KKyAgICAgICAgICogSW5hY3RpdmUgaWYgMAorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhjbHVkZVdp
dGhMYXllck1hc2s7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRo
ZSBsYXllciBpZCB1c2UgdG8gZmluZCB3aGF0IG1lc2hlcyBhcmUgbm90IGltcGFjdGVkIGJ5IHRo
ZSBsaWdodC4KKyAgICAgICAgICogSW5hY3RpdmUgaWYgMAorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4Y2x1ZGVXaXRoTGF5
ZXJNYXNrID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9yZXN5bmNNZXNoZXMoKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExpZ2h0LnByb3RvdHlwZSwg
ImluY2x1ZGVPbmx5V2l0aExheWVyTWFzayIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIGxheWVyIGlkIHVzZSB0byBmaW5kIHdoYXQgbWVzaGVzIGFyZSBpbXBhY3RlZCBieSB0
aGUgbGlnaHQuCisgICAgICAgICAqIEluYWN0aXZlIGlmIDAKKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVPbmx5
V2l0aExheWVyTWFzazsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMg
dGhlIGxheWVyIGlkIHVzZSB0byBmaW5kIHdoYXQgbWVzaGVzIGFyZSBpbXBhY3RlZCBieSB0aGUg
bGlnaHQuCisgICAgICAgICAqIEluYWN0aXZlIGlmIDAKKyAgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pbmNsdWRlT25seVdpdGhM
YXllck1hc2sgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX3Jlc3luY01lc2hlcygpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHQucHJvdG90eXBl
LCAibGlnaHRtYXBNb2RlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGln
aHRtYXAgbW9kZSBvZiB0aGlzIGxpZ2h0IChzaG91bGQgYmUgb25lIG9mIHRoZSBjb25zdGFudHMg
ZGVmaW5lZCBieSBMaWdodC5MSUdIVE1BUF94KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGlnaHRtYXBNb2RlOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgbGlnaHRtYXAgbW9kZSBv
ZiB0aGlzIGxpZ2h0IChzaG91bGQgYmUgb25lIG9mIHRoZSBjb25zdGFudHMgZGVmaW5lZCBieSBM
aWdodC5MSUdIVE1BUF94KQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9saWdodG1hcE1vZGUgPT09IHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
bGlnaHRtYXBNb2RlID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9tYXJrTWVzaGVzQXNMaWdo
dERpcnR5KCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhl
IHN0cmluZyAiTGlnaHQiLgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICov
CisgICAgTGlnaHQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICJMaWdodCI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGUg
bGlnaHQgaW5mb3JtYXRpb24gdG8gYSByZWFkYWJsZSBzdHJpbmcgZm9yIGRlYnVnIHB1cnBvc2Uu
CisgICAgICogQHBhcmFtIGZ1bGxEZXRhaWxzIFN1cHBvcnRzIGZvciBtdWx0aXBsZSBsZXZlbHMg
b2YgbG9nZ2luZyB3aXRoaW4gc2NlbmUgbG9hZGluZworICAgICAqIEByZXR1cm5zIHRoZSBodW1h
biByZWFkYWJsZSBsaWdodCBpbmZvCisgICAgICovCisgICAgTGlnaHQucHJvdG90eXBlLnRvU3Ry
aW5nID0gZnVuY3Rpb24gKGZ1bGxEZXRhaWxzKSB7CisgICAgICAgIHZhciByZXQgPSAiTmFtZTog
IiArIHRoaXMubmFtZTsKKyAgICAgICAgcmV0ICs9ICIsIHR5cGU6ICIgKyAoWyJQb2ludCIsICJE
aXJlY3Rpb25hbCIsICJTcG90IiwgIkhlbWlzcGhlcmljIl0pW3RoaXMuZ2V0VHlwZUlEKCldOwor
ICAgICAgICBpZiAodGhpcy5hbmltYXRpb25zKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHJl
dCArPSAiLCBhbmltYXRpb25bMF06ICIgKyB0aGlzLmFuaW1hdGlvbnNbaV0udG9TdHJpbmcoZnVs
bERldGFpbHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmdWxsRGV0
YWlscykgeworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIExpZ2h0LnByb3RvdHlwZS5fc3luY1BhcmVudEVuYWJsZWRTdGF0ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fc3luY1BhcmVudEVuYWJs
ZWRTdGF0ZS5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl9yZXN5bmNNZXNoZXMoKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldCB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGlzIG5vZGUuCisg
ICAgICogQHBhcmFtIHZhbHVlIC0gdGhlIG5ldyBlbmFibGVkIHN0YXRlCisgICAgICovCisgICAg
TGlnaHQucHJvdG90eXBlLnNldEVuYWJsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
X3N1cGVyLnByb3RvdHlwZS5zZXRFbmFibGVkLmNhbGwodGhpcywgdmFsdWUpOworICAgICAgICB0
aGlzLl9yZXN5bmNNZXNoZXMoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhl
IExpZ2h0IGFzc29jaWF0ZWQgc2hhZG93IGdlbmVyYXRvciBpZiBhbnkuCisgICAgICogQHJldHVy
biB0aGUgYXNzb2NpYXRlZCBzaGFkb3cgZ2VuZXJhdG9yLgorICAgICAqLworICAgIExpZ2h0LnBy
b3RvdHlwZS5nZXRTaGFkb3dHZW5lcmF0b3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biB0aGlzLl9zaGFkb3dHZW5lcmF0b3I7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IGEgVmVjdG9yMywgdGhlIGFic29sdXRlIGxpZ2h0IHBvc2l0aW9uIGluIHRoZSBXb3JsZC4KKyAg
ICAgKiBAcmV0dXJucyB0aGUgd29ybGQgc3BhY2UgcG9zaXRpb24gb2YgdGhlIGxpZ2h0CisgICAg
ICovCisgICAgTGlnaHQucHJvdG90eXBlLmdldEFic29sdXRlUG9zaXRpb24gPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNw
ZWNpZmllcyBpZiB0aGUgbGlnaHQgd2lsbCBhZmZlY3QgdGhlIHBhc3NlZCBtZXNoLgorICAgICAq
IEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRvIHRlc3QgYWdhaW5zdCB0aGUgbGlnaHQKKyAgICAgKiBA
cmV0dXJuIHRydWUgdGhlIG1lc2ggaXMgYWZmZWN0ZWQgb3RoZXJ3aXNlLCBmYWxzZS4KKyAgICAg
Ki8KKyAgICBMaWdodC5wcm90b3R5cGUuY2FuQWZmZWN0TWVzaCA9IGZ1bmN0aW9uIChtZXNoKSB7
CisgICAgICAgIGlmICghbWVzaCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuaW5jbHVkZWRPbmx5TWVzaGVzICYmIHRoaXMuaW5jbHVkZWRP
bmx5TWVzaGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5pbmNsdWRlZE9ubHlNZXNoZXMuaW5kZXhPZiht
ZXNoKSA9PT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodGhpcy5leGNsdWRlZE1lc2hlcyAmJiB0aGlzLmV4Y2x1ZGVkTWVzaGVzLmxlbmd0
aCA+IDAgJiYgdGhpcy5leGNsdWRlZE1lc2hlcy5pbmRleE9mKG1lc2gpICE9PSAtMSkgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmluY2x1
ZGVPbmx5V2l0aExheWVyTWFzayAhPT0gMCAmJiAodGhpcy5pbmNsdWRlT25seVdpdGhMYXllck1h
c2sgJiBtZXNoLmxheWVyTWFzaykgPT09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5leGNsdWRlV2l0aExheWVyTWFzayAhPT0gMCAm
JiB0aGlzLmV4Y2x1ZGVXaXRoTGF5ZXJNYXNrICYgbWVzaC5sYXllck1hc2spIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNvcnQgZnVuY3Rpb24gdG8gb3JkZXIgbGlnaHRzIGZvciByZW5k
ZXJpbmcuCisgICAgICogQHBhcmFtIGEgRmlyc3QgTGlnaHQgb2JqZWN0IHRvIGNvbXBhcmUgdG8g
c2Vjb25kLgorICAgICAqIEBwYXJhbSBiIFNlY29uZCBMaWdodCBvYmplY3QgdG8gY29tcGFyZSBm
aXJzdC4KKyAgICAgKiBAcmV0dXJuIC0xIHRvIHJlZHVjZSdzIGEncyBpbmRleCByZWxhdGl2ZSB0
byBiZSwgMCBmb3Igbm8gY2hhbmdlLCAxIHRvIGluY3JlYXNlIGEncyBpbmRleCByZWxhdGl2ZSB0
byBiLgorICAgICAqLworICAgIExpZ2h0LkNvbXBhcmVMaWdodHNQcmlvcml0eSA9IGZ1bmN0aW9u
IChhLCBiKSB7CisgICAgICAgIC8vc2hhZG93LWNhc3RpbmcgbGlnaHRzIGhhdmUgcHJpb3JpdHkg
b3ZlciBub24tc2hhZG93LWNhc3RpbmcgbGlnaHRzCisgICAgICAgIC8vdGhlIHJlbmRlclByaW9p
cnR5IGlzIGEgc2Vjb25kYXJ5IHNvcnQgY3JpdGVyaW9uCisgICAgICAgIGlmIChhLnNoYWRvd0Vu
YWJsZWQgIT09IGIuc2hhZG93RW5hYmxlZCkgeworICAgICAgICAgICAgcmV0dXJuIChiLnNoYWRv
d0VuYWJsZWQgPyAxIDogMCkgLSAoYS5zaGFkb3dFbmFibGVkID8gMSA6IDApOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBiLnJlbmRlclByaW9yaXR5IC0gYS5yZW5kZXJQcmlvcml0eTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJlbGVhc2VzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBub2RlLgorICAgICAqIEBwYXJhbSBkb05vdFJlY3Vyc2UgU2V0IHRvIHRydWUgdG8gbm90
IHJlY3Vyc2UgaW50byBlYWNoIGNoaWxkcmVuIChyZWN1cnNlIGludG8gZWFjaCBjaGlsZHJlbiBi
eSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBkaXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcyBTZXQg
dG8gdHJ1ZSB0byBhbHNvIGRpc3Bvc2UgcmVmZXJlbmNlZCBtYXRlcmlhbHMgYW5kIHRleHR1cmVz
IChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqLworICAgIExpZ2h0LnByb3RvdHlwZS5kaXNwb3Nl
ID0gZnVuY3Rpb24gKGRvTm90UmVjdXJzZSwgZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMpIHsK
KyAgICAgICAgaWYgKGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzID09PSB2b2lkIDApIHsgZGlz
cG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMgPSBmYWxzZTsgfQorICAgICAgICBpZiAodGhpcy5fc2hh
ZG93R2VuZXJhdG9yKSB7CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dHZW5lcmF0b3IuZGlzcG9z
ZSgpOworICAgICAgICAgICAgdGhpcy5fc2hhZG93R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5zdG9wQW5p
bWF0aW9uKHRoaXMpOworICAgICAgICAvLyBSZW1vdmUgZnJvbSBtZXNoZXMKKyAgICAgICAgZm9y
ICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuZ2V0U2NlbmUoKS5tZXNoZXM7IF9pIDwgX2EubGVuZ3Ro
OyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IF9hW19pXTsKKyAgICAgICAgICAgIG1l
c2guX3JlbW92ZUxpZ2h0U291cmNlKHRoaXMsIHRydWUpOworICAgICAgICB9CisgICAgICAgIHRo
aXMuX3VuaWZvcm1CdWZmZXIuZGlzcG9zZSgpOworICAgICAgICAvLyBSZW1vdmUgZnJvbSBzY2Vu
ZQorICAgICAgICB0aGlzLmdldFNjZW5lKCkucmVtb3ZlTGlnaHQodGhpcyk7CisgICAgICAgIF9z
dXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMsIGRvTm90UmVjdXJzZSwgZGlzcG9zZU1h
dGVyaWFsQW5kVGV4dHVyZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUg
bGlnaHQgdHlwZSBJRCAoaW50ZWdlcikuCisgICAgICogQHJldHVybnMgVGhlIGxpZ2h0IFR5cGUg
aWQgYXMgYSBjb25zdGFudCBkZWZpbmVzIGluIExpZ2h0LkxJR0hUVFlQRUlEX3gKKyAgICAgKi8K
KyAgICBMaWdodC5wcm90b3R5cGUuZ2V0VHlwZUlEID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGludGVuc2l0eSBz
Y2FsZWQgYnkgdGhlIFBob3RvbWV0cmljIFNjYWxlIGFjY29yZGluZyB0byB0aGUgbGlnaHQgdHlw
ZSBhbmQgaW50ZW5zaXR5IG1vZGUuCisgICAgICogQHJldHVybnMgdGhlIHNjYWxlZCBpbnRlbnNp
dHkgaW4gaW50ZW5zaXR5IG1vZGUgdW5pdAorICAgICAqLworICAgIExpZ2h0LnByb3RvdHlwZS5n
ZXRTY2FsZWRJbnRlbnNpdHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9w
aG90b21ldHJpY1NjYWxlICogdGhpcy5pbnRlbnNpdHk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIGEgbmV3IExpZ2h0IG9iamVjdCwgbmFtZWQgIm5hbWUiLCBmcm9tIHRoZSBjdXJy
ZW50IG9uZS4KKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY2xvbmVkIGxpZ2h0
CisgICAgICogQHJldHVybnMgdGhlIG5ldyBjcmVhdGVkIGxpZ2h0CisgICAgICovCisgICAgTGln
aHQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgdmFyIGNvbnN0
cnVjdG9yID0gTGlnaHQuR2V0Q29uc3RydWN0b3JGcm9tTmFtZSh0aGlzLmdldFR5cGVJRCgpLCBu
YW1lLCB0aGlzLmdldFNjZW5lKCkpOworICAgICAgICBpZiAoIWNvbnN0cnVjdG9yKSB7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVy
Il0uQ2xvbmUoY29uc3RydWN0b3IsIHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogU2Vy
aWFsaXplcyB0aGUgY3VycmVudCBsaWdodCBpbnRvIGEgU2VyaWFsaXphdGlvbiBvYmplY3QuCisg
ICAgICogQHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgb2JqZWN0LgorICAgICAqLworICAgIExpZ2h0
LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxp
emF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXplKHRoaXMpOworICAgICAgICAvLyBU
eXBlCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudHlwZSA9IHRoaXMuZ2V0VHlwZUlEKCk7
CisgICAgICAgIC8vIFBhcmVudAorICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHsKKyAgICAgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QucGFyZW50SWQgPSB0aGlzLnBhcmVudC5pZDsKKyAgICAg
ICAgfQorICAgICAgICAvLyBJbmNsdXNpb24gLyBleGNsdXNpb25zCisgICAgICAgIGlmICh0aGlz
LmV4Y2x1ZGVkTWVzaGVzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QuZXhjbHVkZWRNZXNoZXNJZHMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuZXhjbHVkZWRN
ZXNoZXMuZm9yRWFjaChmdW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QuZXhjbHVkZWRNZXNoZXNJZHMucHVzaChtZXNoLmlkKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmluY2x1ZGVkT25seU1lc2hlcy5sZW5n
dGggPiAwKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmluY2x1ZGVkT25seU1l
c2hlc0lkcyA9IFtdOworICAgICAgICAgICAgdGhpcy5pbmNsdWRlZE9ubHlNZXNoZXMuZm9yRWFj
aChmdW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
aW5jbHVkZWRPbmx5TWVzaGVzSWRzLnB1c2gobWVzaC5pZCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkFwcGVu
ZFNlcmlhbGl6ZWRBbmltYXRpb25zKHRoaXMsIHNlcmlhbGl6YXRpb25PYmplY3QpOworICAgICAg
ICBzZXJpYWxpemF0aW9uT2JqZWN0LnJhbmdlcyA9IHRoaXMuc2VyaWFsaXplQW5pbWF0aW9uUmFu
Z2VzKCk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyB0eXBlZCBsaWdodCBmcm9tIHRoZSBwYXNzZWQgdHlw
ZSAoaW50ZWdlcikgOiBwb2ludCBsaWdodCA9IDAsIGRpcmVjdGlvbmFsIGxpZ2h0ID0gMSwgc3Bv
dCBsaWdodCA9IDIsIGhlbWlzcGhlcmljIGxpZ2h0ID0gMy4KKyAgICAgKiBUaGlzIG5ldyBsaWdo
dCBpcyBuYW1lZCAibmFtZSIgYW5kIGFkZGVkIHRvIHRoZSBwYXNzZWQgc2NlbmUuCisgICAgICog
QHBhcmFtIHR5cGUgVHlwZSBhY2NvcmRpbmcgdG8gdGhlIHR5cGVzIGF2YWlsYWJsZSBpbiBMaWdo
dC5MSUdIVFRZUEVJRF94CisgICAgICogQHBhcmFtIG5hbWUgVGhlIGZyaWVuZGx5IG5hbWUgb2Yg
dGhlIGxpZ2h0CisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0aGUgbmV3IGxpZ2h0IHdp
bGwgYmVsb25nIHRvCisgICAgICogQHJldHVybnMgdGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uCisg
ICAgICovCisgICAgTGlnaHQuR2V0Q29uc3RydWN0b3JGcm9tTmFtZSA9IGZ1bmN0aW9uICh0eXBl
LCBuYW1lLCBzY2VuZSkgeworICAgICAgICB2YXIgY29uc3RydWN0b3JGdW5jID0gX25vZGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZSJdLkNvbnN0cnVjdCgiTGlnaHRfVHlwZV8i
ICsgdHlwZSwgbmFtZSwgc2NlbmUpOworICAgICAgICBpZiAoY29uc3RydWN0b3JGdW5jKSB7Cisg
ICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3JGdW5jOworICAgICAgICB9CisgICAgICAgIC8v
IERlZmF1bHQgdG8gbm8gbGlnaHQgZm9yIG5vbmUgcHJlc2VudCBvbmNlLgorICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlcyB0aGUgcGFzc2VkICJwYXJz
ZWRMaWdodCIgYW5kIHJldHVybnMgYSBuZXcgaW5zdGFuY2VkIExpZ2h0IGZyb20gdGhpcyBwYXJz
aW5nLgorICAgICAqIEBwYXJhbSBwYXJzZWRMaWdodCBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBv
ZiB0aGUgbGlnaHQKKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRvIGNyZWF0ZSB0aGUg
cGFyc2VkIGxpZ2h0IGluCisgICAgICogQHJldHVybnMgdGhlIGNyZWF0ZWQgbGlnaHQgYWZ0ZXIg
cGFyc2luZworICAgICAqLworICAgIExpZ2h0LlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZExpZ2h0
LCBzY2VuZSkgeworICAgICAgICB2YXIgY29uc3RydWN0b3IgPSBMaWdodC5HZXRDb25zdHJ1Y3Rv
ckZyb21OYW1lKHBhcnNlZExpZ2h0LnR5cGUsIHBhcnNlZExpZ2h0Lm5hbWUsIHNjZW5lKTsKKyAg
ICAgICAgaWYgKCFjb25zdHJ1Y3RvcikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGxpZ2h0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoY29uc3RydWN0b3Is
IHBhcnNlZExpZ2h0LCBzY2VuZSk7CisgICAgICAgIC8vIEluY2x1c2lvbiAvIGV4Y2x1c2lvbnMK
KyAgICAgICAgaWYgKHBhcnNlZExpZ2h0LmV4Y2x1ZGVkTWVzaGVzSWRzKSB7CisgICAgICAgICAg
ICBsaWdodC5fZXhjbHVkZWRNZXNoZXNJZHMgPSBwYXJzZWRMaWdodC5leGNsdWRlZE1lc2hlc0lk
czsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkTGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVz
SWRzKSB7CisgICAgICAgICAgICBsaWdodC5faW5jbHVkZWRPbmx5TWVzaGVzSWRzID0gcGFyc2Vk
TGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVzSWRzOworICAgICAgICB9CisgICAgICAgIC8vIFBhcmVu
dAorICAgICAgICBpZiAocGFyc2VkTGlnaHQucGFyZW50SWQpIHsKKyAgICAgICAgICAgIGxpZ2h0
Ll93YWl0aW5nUGFyZW50SWQgPSBwYXJzZWRMaWdodC5wYXJlbnRJZDsKKyAgICAgICAgfQorICAg
ICAgICAvLyBGYWxsb2ZmCisgICAgICAgIGlmIChwYXJzZWRMaWdodC5mYWxsb2ZmVHlwZSAhPT0g
dW5kZWZpbmVkKSB7CisgICAgICAgICAgICBsaWdodC5mYWxsb2ZmVHlwZSA9IHBhcnNlZExpZ2h0
LmZhbGxvZmZUeXBlOworICAgICAgICB9CisgICAgICAgIC8vIExpZ2h0bWFwcworICAgICAgICBp
ZiAocGFyc2VkTGlnaHQubGlnaHRtYXBNb2RlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
IGxpZ2h0LmxpZ2h0bWFwTW9kZSA9IHBhcnNlZExpZ2h0LmxpZ2h0bWFwTW9kZTsKKyAgICAgICAg
fQorICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIGlmIChwYXJzZWRMaWdodC5hbmltYXRp
b25zKSB7CisgICAgICAgICAgICBmb3IgKHZhciBhbmltYXRpb25JbmRleCA9IDA7IGFuaW1hdGlv
bkluZGV4IDwgcGFyc2VkTGlnaHQuYW5pbWF0aW9ucy5sZW5ndGg7IGFuaW1hdGlvbkluZGV4Kysp
IHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkQW5pbWF0aW9uID0gcGFyc2VkTGlnaHQuYW5p
bWF0aW9uc1thbmltYXRpb25JbmRleF07CisgICAgICAgICAgICAgICAgdmFyIGludGVybmFsQ2xh
c3MgPSBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siX1R5cGVT
dG9yZSJdLkdldENsYXNzKCJCQUJZTE9OLkFuaW1hdGlvbiIpOworICAgICAgICAgICAgICAgIGlm
IChpbnRlcm5hbENsYXNzKSB7CisgICAgICAgICAgICAgICAgICAgIGxpZ2h0LmFuaW1hdGlvbnMu
cHVzaChpbnRlcm5hbENsYXNzLlBhcnNlKHBhcnNlZEFuaW1hdGlvbikpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9ub2RlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIk5vZGUiXS5QYXJzZUFuaW1hdGlvblJhbmdlcyhsaWdodCwgcGFyc2VkTGln
aHQsIHNjZW5lKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkTGlnaHQuYXV0b0FuaW1h
dGUpIHsKKyAgICAgICAgICAgIHNjZW5lLmJlZ2luQW5pbWF0aW9uKGxpZ2h0LCBwYXJzZWRMaWdo
dC5hdXRvQW5pbWF0ZUZyb20sIHBhcnNlZExpZ2h0LmF1dG9BbmltYXRlVG8sIHBhcnNlZExpZ2h0
LmF1dG9BbmltYXRlTG9vcCwgcGFyc2VkTGlnaHQuYXV0b0FuaW1hdGVTcGVlZCB8fCAxLjApOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBsaWdodDsKKyAgICB9OworICAgIExpZ2h0LnByb3Rv
dHlwZS5faG9va0FycmF5Rm9yRXhjbHVkZWQgPSBmdW5jdGlvbiAoYXJyYXkpIHsKKyAgICAgICAg
dmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIG9sZFB1c2ggPSBhcnJheS5wdXNoOworICAg
ICAgICBhcnJheS5wdXNoID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGl0ZW1zID0g
W107CisgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsg
X2krKykgeworICAgICAgICAgICAgICAgIGl0ZW1zW19pXSA9IGFyZ3VtZW50c1tfaV07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2xkUHVzaC5hcHBseShhcnJheSwg
aXRlbXMpOworICAgICAgICAgICAgZm9yICh2YXIgX2EgPSAwLCBpdGVtc18xID0gaXRlbXM7IF9h
IDwgaXRlbXNfMS5sZW5ndGg7IF9hKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGl0
ZW1zXzFbX2FdOworICAgICAgICAgICAgICAgIGl0ZW0uX3Jlc3luY0xpZ2hTb3VyY2UoX3RoaXMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsK
KyAgICAgICAgdmFyIG9sZFNwbGljZSA9IGFycmF5LnNwbGljZTsKKyAgICAgICAgYXJyYXkuc3Bs
aWNlID0gZnVuY3Rpb24gKGluZGV4LCBkZWxldGVDb3VudCkgeworICAgICAgICAgICAgdmFyIGRl
bGV0ZWQgPSBvbGRTcGxpY2UuYXBwbHkoYXJyYXksIFtpbmRleCwgZGVsZXRlQ291bnRdKTsKKyAg
ICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgZGVsZXRlZF8xID0gZGVsZXRlZDsgX2kgPCBkZWxl
dGVkXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBkZWxldGVk
XzFbX2ldOworICAgICAgICAgICAgICAgIGl0ZW0uX3Jlc3luY0xpZ2hTb3VyY2UoX3RoaXMpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZWQ7CisgICAgICAgIH07Cisg
ICAgICAgIGZvciAodmFyIF9pID0gMCwgYXJyYXlfMSA9IGFycmF5OyBfaSA8IGFycmF5XzEubGVu
Z3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgaXRlbSA9IGFycmF5XzFbX2ldOworICAgICAg
ICAgICAgaXRlbS5fcmVzeW5jTGlnaFNvdXJjZSh0aGlzKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgTGlnaHQucHJvdG90eXBlLl9ob29rQXJyYXlGb3JJbmNsdWRlZE9ubHkgPSBmdW5jdGlvbiAo
YXJyYXkpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIG9sZFB1c2gg
PSBhcnJheS5wdXNoOworICAgICAgICBhcnJheS5wdXNoID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgdmFyIGl0ZW1zID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwg
YXJndW1lbnRzLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIGl0ZW1zW19pXSA9IGFy
Z3VtZW50c1tfaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2xk
UHVzaC5hcHBseShhcnJheSwgaXRlbXMpOworICAgICAgICAgICAgX3RoaXMuX3Jlc3luY01lc2hl
cygpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgICAgdmFy
IG9sZFNwbGljZSA9IGFycmF5LnNwbGljZTsKKyAgICAgICAgYXJyYXkuc3BsaWNlID0gZnVuY3Rp
b24gKGluZGV4LCBkZWxldGVDb3VudCkgeworICAgICAgICAgICAgdmFyIGRlbGV0ZWQgPSBvbGRT
cGxpY2UuYXBwbHkoYXJyYXksIFtpbmRleCwgZGVsZXRlQ291bnRdKTsKKyAgICAgICAgICAgIF90
aGlzLl9yZXN5bmNNZXNoZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxldGVkOworICAgICAg
ICB9OworICAgICAgICB0aGlzLl9yZXN5bmNNZXNoZXMoKTsKKyAgICB9OworICAgIExpZ2h0LnBy
b3RvdHlwZS5fcmVzeW5jTWVzaGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBf
aSA9IDAsIF9hID0gdGhpcy5nZXRTY2VuZSgpLm1lc2hlczsgX2kgPCBfYS5sZW5ndGg7IF9pKysp
IHsKKyAgICAgICAgICAgIHZhciBtZXNoID0gX2FbX2ldOworICAgICAgICAgICAgbWVzaC5fcmVz
eW5jTGlnaFNvdXJjZSh0aGlzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
Rm9yY2VzIHRoZSBtZXNoZXMgdG8gdXBkYXRlIHRoZWlyIGxpZ2h0IHJlbGF0ZWQgaW5mb3JtYXRp
b24gaW4gdGhlaXIgcmVuZGVyaW5nIHVzZWQgZWZmZWN0cworICAgICAqIEBoaWRkZW4gSW50ZXJu
YWwgVXNlIE9ubHkKKyAgICAgKi8KKyAgICBMaWdodC5wcm90b3R5cGUuX21hcmtNZXNoZXNBc0xp
Z2h0RGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0
aGlzLmdldFNjZW5lKCkubWVzaGVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAg
ICAgdmFyIG1lc2ggPSBfYVtfaV07CisgICAgICAgICAgICBpZiAobWVzaC5saWdodFNvdXJjZXMu
aW5kZXhPZih0aGlzKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBtZXNoLl9tYXJrU3ViTWVz
aGVzQXNMaWdodERpcnR5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIFJlY29tcHV0ZXMgdGhlIGNhY2hlZCBwaG90b21ldHJpYyBzY2FsZSBpZiBu
ZWVkZWQuCisgICAgICovCisgICAgTGlnaHQucHJvdG90eXBlLl9jb21wdXRlUGhvdG9tZXRyaWNT
Y2FsZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fcGhvdG9tZXRyaWNTY2FsZSA9IHRo
aXMuX2dldFBob3RvbWV0cmljU2NhbGUoKTsKKyAgICAgICAgdGhpcy5nZXRTY2VuZSgpLnJlc2V0
Q2FjaGVkTWF0ZXJpYWwoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIFBo
b3RvbWV0cmljIFNjYWxlIGFjY29yZGluZyB0byB0aGUgbGlnaHQgdHlwZSBhbmQgaW50ZW5zaXR5
IG1vZGUuCisgICAgICovCisgICAgTGlnaHQucHJvdG90eXBlLl9nZXRQaG90b21ldHJpY1NjYWxl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcGhvdG9tZXRyaWNTY2FsZSA9IDAuMDsKKyAg
ICAgICAgdmFyIGxpZ2h0VHlwZUlEID0gdGhpcy5nZXRUeXBlSUQoKTsKKyAgICAgICAgLy9nZXQg
cGhvdG9tZXRyaWMgbW9kZQorICAgICAgICB2YXIgcGhvdG9tZXRyaWNNb2RlID0gdGhpcy5pbnRl
bnNpdHlNb2RlOworICAgICAgICBpZiAocGhvdG9tZXRyaWNNb2RlID09PSBMaWdodC5JTlRFTlNJ
VFlNT0RFX0FVVE9NQVRJQykgeworICAgICAgICAgICAgaWYgKGxpZ2h0VHlwZUlEID09PSBMaWdo
dC5MSUdIVFRZUEVJRF9ESVJFQ1RJT05BTExJR0hUKSB7CisgICAgICAgICAgICAgICAgcGhvdG9t
ZXRyaWNNb2RlID0gTGlnaHQuSU5URU5TSVRZTU9ERV9JTExVTUlOQU5DRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBob3RvbWV0cmljTW9kZSA9
IExpZ2h0LklOVEVOU0lUWU1PREVfTFVNSU5PVVNJTlRFTlNJVFk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgLy9jb21wdXRlIHBob3RvbWV0cmljIHNjYWxlCisgICAgICAgIHN3
aXRjaCAobGlnaHRUeXBlSUQpIHsKKyAgICAgICAgICAgIGNhc2UgTGlnaHQuTElHSFRUWVBFSURf
UE9JTlRMSUdIVDoKKyAgICAgICAgICAgIGNhc2UgTGlnaHQuTElHSFRUWVBFSURfU1BPVExJR0hU
OgorICAgICAgICAgICAgICAgIHN3aXRjaCAocGhvdG9tZXRyaWNNb2RlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgTGlnaHQuSU5URU5TSVRZTU9ERV9MVU1JTk9VU1BPV0VSOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcGhvdG9tZXRyaWNTY2FsZSA9IDEuMCAvICg0LjAgKiBNYXRoLlBJ
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIExpZ2h0LklOVEVOU0lUWU1PREVfTFVNSU5PVVNJTlRFTlNJVFk6CisgICAgICAgICAgICAg
ICAgICAgICAgICBwaG90b21ldHJpY1NjYWxlID0gMS4wOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTGlnaHQuSU5URU5TSVRZTU9ERV9M
VU1JTkFOQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICBwaG90b21ldHJpY1NjYWxlID0gdGhp
cy5yYWRpdXMgKiB0aGlzLnJhZGl1czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgTGlnaHQuTElHSFRUWVBFSURfRElSRUNUSU9OQUxMSUdIVDoKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKHBob3RvbWV0cmljTW9kZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIExpZ2h0
LklOVEVOU0lUWU1PREVfSUxMVU1JTkFOQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICBwaG90
b21ldHJpY1NjYWxlID0gMS4wOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgTGlnaHQuSU5URU5TSVRZTU9ERV9MVU1JTkFOQ0U6CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHJhZGl1cyAoYW5kIHRoZXJlZm9yZSBzb2xpZCBh
bmdsZSkgaXMgbm9uLXplcm8gYSBkaXJlY3Rpb25hbCBsaWdodHMgYnJpZ2h0bmVzcyBjYW4gYmUg
c3BlY2lmaWVkIHZpYSBjZW50cmFsIChwZWFrKSBsdW1pbmFuY2UuCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGb3IgYSBkaXJlY3Rpb25hbCBsaWdodCB0aGUgJ3JhZGl1cycgZGVmaW5lcyB0
aGUgYW5ndWxhciByYWRpdXMgKGluIHJhZGlhbnMpIHJhdGhlciB0aGFuIHdvcmxkLXNwYWNlIHJh
ZGl1cyAoZS5nLiBpbiBtZXRyZXMpLgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFwZXhB
bmdsZVJhZGlhbnMgPSB0aGlzLnJhZGl1czsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElt
cG9zZSBhIG1pbmltdW0gbGlnaHQgYW5ndWxhciBzaXplIHRvIGF2b2lkIHRoZSBsaWdodCBiZWNv
bWluZyBhbiBpbmZpbml0ZWx5IHNtYWxsIGFuZ3VsYXIgbGlnaHQgc291cmNlIChpLmUuIGEgZGly
YWMgZGVsdGEgZnVuY3Rpb24pLgorICAgICAgICAgICAgICAgICAgICAgICAgYXBleEFuZ2xlUmFk
aWFucyA9IE1hdGgubWF4KGFwZXhBbmdsZVJhZGlhbnMsIDAuMDAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBzb2xpZEFuZ2xlID0gMi4wICogTWF0aC5QSSAqICgxLjAgLSBNYXRoLmNv
cyhhcGV4QW5nbGVSYWRpYW5zKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwaG90b21ldHJp
Y1NjYWxlID0gc29saWRBbmdsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
TGlnaHQuTElHSFRUWVBFSURfSEVNSVNQSEVSSUNMSUdIVDoKKyAgICAgICAgICAgICAgICAvLyBO
byBmYWxsIG9mZiBpbiBoZW1pc3BlcmljIGxpZ2h0LgorICAgICAgICAgICAgICAgIHBob3RvbWV0
cmljU2NhbGUgPSAxLjA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHBob3RvbWV0cmljU2NhbGU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW9y
ZGVyIHRoZSBsaWdodCBpbiB0aGUgc2NlbmUgYWNjb3JkaW5nIHRvIHRoZWlyIGRlZmluZWQgcHJp
b3JpdHkuCisgICAgICogQGhpZGRlbiBJbnRlcm5hbCBVc2UgT25seQorICAgICAqLworICAgIExp
Z2h0LnByb3RvdHlwZS5fcmVvcmRlckxpZ2h0c0luU2NlbmUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRl
clByaW9yaXR5ICE9IDApIHsKKyAgICAgICAgICAgIHNjZW5lLnJlcXVpcmVMaWdodFNvcnRpbmcg
PSB0cnVlOworICAgICAgICB9CisgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5zb3J0TGlnaHRzQnlQ
cmlvcml0eSgpOworICAgIH07CisgICAgLyoqCisgICAgICogRmFsbG9mZiBEZWZhdWx0OiBsaWdo
dCBpcyBmYWxsaW5nIG9mZiBmb2xsb3dpbmcgdGhlIG1hdGVyaWFsIHNwZWNpZmljYXRpb246Cisg
ICAgICogc3RhbmRhcmQgbWF0ZXJpYWwgaXMgdXNpbmcgc3RhbmRhcmQgZmFsbG9mZiB3aGVyZWFz
IHBiciBtYXRlcmlhbCBjYW4gcmVxdWVzdCBzcGVjaWFsIGZhbGxvZmYgcGVyIG1hdGVyaWFscy4K
KyAgICAgKi8KKyAgICBMaWdodC5GQUxMT0ZGX0RFRkFVTFQgPSAwOworICAgIC8qKgorICAgICAq
IEZhbGxvZmYgUGh5c2ljYWw6IGxpZ2h0IGlzIGZhbGxpbmcgb2ZmIGZvbGxvd2luZyB0aGUgaW52
ZXJzZSBzcXVhcmVkIGRpc3RhbmNlIGxhdy4KKyAgICAgKi8KKyAgICBMaWdodC5GQUxMT0ZGX1BI
WVNJQ0FMID0gMTsKKyAgICAvKioKKyAgICAgKiBGYWxsb2ZmIGdsdGY6IGxpZ2h0IGlzIGZhbGxp
bmcgb2ZmIGFzIGRlc2NyaWJlZCBpbiB0aGUgZ2x0ZiBtb3ZpbmcgdG8gUEJSIGRvY3VtZW50Cisg
ICAgICogdG8gZW5oYW5jZSBpbnRlcm9wZXJhYmlsaXR5IHdpdGggb3RoZXIgZW5naW5lcy4KKyAg
ICAgKi8KKyAgICBMaWdodC5GQUxMT0ZGX0dMVEYgPSAyOworICAgIC8qKgorICAgICAqIEZhbGxv
ZmYgU3RhbmRhcmQ6IGxpZ2h0IGlzIGZhbGxpbmcgb2ZmIGxpa2UgaW4gdGhlIHN0YW5kYXJkIG1h
dGVyaWFsCisgICAgICogdG8gZW5oYW5jZSBpbnRlcm9wZXJhYmlsaXR5IHdpdGggb3RoZXIgbWF0
ZXJpYWxzLgorICAgICAqLworICAgIExpZ2h0LkZBTExPRkZfU1RBTkRBUkQgPSAzOworICAgIC8v
bGlnaHRtYXBNb2RlIENvbnN0cworICAgIC8qKgorICAgICAqIElmIGV2ZXJ5IGxpZ2h0IGFmZmVj
dGluZyB0aGUgbWF0ZXJpYWwgaXMgaW4gdGhpcyBsaWdodG1hcE1vZGUsCisgICAgICogbWF0ZXJp
YWwubGlnaHRtYXBUZXh0dXJlIGFkZHMgb3IgbXVsdGlwbGllcworICAgICAqIChkZXBlbmRzIG9u
IG1hdGVyaWFsLnVzZUxpZ2h0bWFwQXNTaGFkb3dtYXApCisgICAgICogYWZ0ZXIgZXZlcnkgb3Ro
ZXIgbGlnaHQgY2FsY3VsYXRpb25zLgorICAgICAqLworICAgIExpZ2h0LkxJR0hUTUFQX0RFRkFV
TFQgPSAwOworICAgIC8qKgorICAgICAqIG1hdGVyaWFsLmxpZ2h0bWFwVGV4dHVyZSBhcyBvbmx5
IGRpZmZ1c2UgbGlnaHRpbmcgZnJvbSB0aGlzIGxpZ2h0CisgICAgICogYWRkcyBvbmx5IHNwZWN1
bGFyIGxpZ2h0aW5nIGZyb20gdGhpcyBsaWdodAorICAgICAqIGFkZHMgZHluYW1pYyBzaGFkb3dz
CisgICAgICovCisgICAgTGlnaHQuTElHSFRNQVBfU1BFQ1VMQVIgPSAxOworICAgIC8qKgorICAg
ICAqIG1hdGVyaWFsLmxpZ2h0bWFwVGV4dHVyZSBhcyBvbmx5IGxpZ2h0aW5nCisgICAgICogbm8g
bGlnaHQgY2FsY3VsYXRpb24gZnJvbSB0aGlzIGxpZ2h0CisgICAgICogb25seSBhZGRzIGR5bmFt
aWMgc2hhZG93cyBmcm9tIHRoaXMgbGlnaHQKKyAgICAgKi8KKyAgICBMaWdodC5MSUdIVE1BUF9T
SEFET1dTT05MWSA9IDI7CisgICAgLy8gSW50ZW5zaXR5IE1vZGUgQ29uc3RzCisgICAgLyoqCisg
ICAgICogRWFjaCBsaWdodCB0eXBlIHVzZXMgdGhlIGRlZmF1bHQgcXVhbnRpdHkgYWNjb3JkaW5n
IHRvIGl0cyB0eXBlOgorICAgICAqICAgICAgcG9pbnQvc3BvdCBsaWdodHMgdXNlIGx1bWlub3Vz
IGludGVuc2l0eQorICAgICAqICAgICAgZGlyZWN0aW9uYWwgbGlnaHRzIHVzZSBpbGx1bWluYW5j
ZQorICAgICAqLworICAgIExpZ2h0LklOVEVOU0lUWU1PREVfQVVUT01BVElDID0gMDsKKyAgICAv
KioKKyAgICAgKiBsdW1lbiAobG0pCisgICAgICovCisgICAgTGlnaHQuSU5URU5TSVRZTU9ERV9M
VU1JTk9VU1BPV0VSID0gMTsKKyAgICAvKioKKyAgICAgKiBjYW5kZWxhIChsbS9zcikKKyAgICAg
Ki8KKyAgICBMaWdodC5JTlRFTlNJVFlNT0RFX0xVTUlOT1VTSU5URU5TSVRZID0gMjsKKyAgICAv
KioKKyAgICAgKiBsdXggKGxtL21eMikKKyAgICAgKi8KKyAgICBMaWdodC5JTlRFTlNJVFlNT0RF
X0lMTFVNSU5BTkNFID0gMzsKKyAgICAvKioKKyAgICAgKiBuaXQgKGNkL21eMikKKyAgICAgKi8K
KyAgICBMaWdodC5JTlRFTlNJVFlNT0RFX0xVTUlOQU5DRSA9IDQ7CisgICAgLy8gTGlnaHQgdHlw
ZXMgaWRzIGNvbnN0LgorICAgIC8qKgorICAgICAqIExpZ2h0IHR5cGUgY29uc3QgaWQgb2YgdGhl
IHBvaW50IGxpZ2h0LgorICAgICAqLworICAgIExpZ2h0LkxJR0hUVFlQRUlEX1BPSU5UTElHSFQg
PSAwOworICAgIC8qKgorICAgICAqIExpZ2h0IHR5cGUgY29uc3QgaWQgb2YgdGhlIGRpcmVjdGlv
bmFsIGxpZ2h0LgorICAgICAqLworICAgIExpZ2h0LkxJR0hUVFlQRUlEX0RJUkVDVElPTkFMTElH
SFQgPSAxOworICAgIC8qKgorICAgICAqIExpZ2h0IHR5cGUgY29uc3QgaWQgb2YgdGhlIHNwb3Qg
bGlnaHQuCisgICAgICovCisgICAgTGlnaHQuTElHSFRUWVBFSURfU1BPVExJR0hUID0gMjsKKyAg
ICAvKioKKyAgICAgKiBMaWdodCB0eXBlIGNvbnN0IGlkIG9mIHRoZSBoZW1pc3BoZXJpYyBsaWdo
dC4KKyAgICAgKi8KKyAgICBMaWdodC5MSUdIVFRZUEVJRF9IRU1JU1BIRVJJQ0xJR0hUID0gMzsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemVBc0NvbG9yMyJdKSgpCisgICAgXSwgTGlnaHQucHJvdG90eXBlLCAiZGlm
ZnVzZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNDb2xvcjMiXSkoKQorICAgIF0sIExpZ2h0
LnByb3RvdHlwZSwgInNwZWN1bGFyIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIExpZ2h0LnByb3RvdHlwZSwgImZhbGxvZmZUeXBlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoKQorICAgIF0sIExpZ2h0LnByb3RvdHlwZSwgImludGVuc2l0eSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBMaWdodC5wcm90b3R5cGUsICJyYW5nZSIsIG51bGwp
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTGlnaHQucHJvdG90eXBlLCAiaW50ZW5zaXR5
TW9kZSIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTGlnaHQucHJvdG90eXBl
LCAicmFkaXVzIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBMaWdodC5wcm90
b3R5cGUsICJfcmVuZGVyUHJpb3JpdHkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHki
XSkoIl9yZW9yZGVyTGlnaHRzSW5TY2VuZSIpCisgICAgXSwgTGlnaHQucHJvdG90eXBlLCAicmVu
ZGVyUHJpb3JpdHkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgic2hhZG93RW5hYmxlZCIp
CisgICAgXSwgTGlnaHQucHJvdG90eXBlLCAiX3NoYWRvd0VuYWJsZWQiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgiZXhjbHVkZVdpdGhMYXllck1hc2siKQorICAgIF0sIExpZ2h0LnByb3Rv
dHlwZSwgIl9leGNsdWRlV2l0aExheWVyTWFzayIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCJpbmNsdWRlT25seVdpdGhMYXllck1hc2siKQorICAgIF0sIExpZ2h0LnByb3RvdHlwZSwgIl9p
bmNsdWRlT25seVdpdGhMYXllck1hc2siLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgibGln
aHRtYXBNb2RlIikKKyAgICBdLCBMaWdodC5wcm90b3R5cGUsICJfbGlnaHRtYXBNb2RlIiwgdm9p
ZCAwKTsKKyAgICByZXR1cm4gTGlnaHQ7Cit9KF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIk5vZGUiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0xpZ2h0cy9wb2lu
dExpZ2h0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTGlnaHRzL3BvaW50TGlnaHQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBvaW50TGlnaHQgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
UG9pbnRMaWdodDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIu
Li9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3Jh
dG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpZ2h0ICovICIuL0xpZ2h0cy9saWdodC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zaGFkb3dMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zaGFkb3dMaWdodCAqLyAiLi9MaWdo
dHMvc2hhZG93TGlnaHQudHMiKTsKKworCisKKworCisKK19ub2RlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIk5vZGUiXS5BZGROb2RlQ29uc3RydWN0b3IoIkxpZ2h0X1R5cGVfMCIsIGZ1
bmN0aW9uIChuYW1lLCBzY2VuZSkgeworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBu
ZXcgUG9pbnRMaWdodChuYW1lLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8oKSwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIEEg
cG9pbnQgbGlnaHQgaXMgYSBsaWdodCBkZWZpbmVkIGJ5IGFuIHVuaXF1ZSBwb2ludCBpbiB3b3Js
ZCBzcGFjZS4KKyAqIFRoZSBsaWdodCBpcyBlbWl0dGVkIGluIGV2ZXJ5IGRpcmVjdGlvbiBmcm9t
IHRoaXMgcG9pbnQuCisgKiBBIGdvb2QgZXhhbXBsZSBvZiBhIHBvaW50IGxpZ2h0IGlzIGEgc3Rh
bmRhcmQgbGlnaHQgYnVsYi4KKyAqIERvY3VtZW50YXRpb246IGh0dHBzOi8vZG9jLmJhYnlsb25q
cy5jb20vYmFieWxvbjEwMS9saWdodHMKKyAqLwordmFyIFBvaW50TGlnaHQgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19leHRlbmRzIl0oUG9pbnRMaWdodCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgUG9pbnRMaWdodCBvYmplY3QgZnJvbSB0aGUgcGFzc2VkIG5hbWUgYW5kIHBv
c2l0aW9uIChWZWN0b3IzKSBhbmQgYWRkcyBpdCBpbiB0aGUgc2NlbmUuCisgICAgICogQSBQb2lu
dExpZ2h0IGVtaXRzIHRoZSBsaWdodCBpbiBldmVyeSBkaXJlY3Rpb24uCisgICAgICogSXQgY2Fu
IGNhc3Qgc2hhZG93cy4KKyAgICAgKiBJZiB0aGUgc2NlbmUgY2FtZXJhIGlzIGFscmVhZHkgZGVm
aW5lZCBhbmQgeW91IHdhbnQgdG8gc2V0IHlvdXIgUG9pbnRMaWdodCBhdCB0aGUgY2FtZXJhIHBv
c2l0aW9uLCBqdXN0IHNldCBpdCA6CisgICAgICogYGBgamF2YXNjcmlwdAorICAgICAqIHZhciBw
b2ludExpZ2h0ID0gbmV3IFBvaW50TGlnaHQoInBsIiwgY2FtZXJhLnBvc2l0aW9uLCBzY2VuZSk7
CisgICAgICogYGBgCisgICAgICogRG9jdW1lbnRhdGlvbiA6IGh0dHBzOi8vZG9jLmJhYnlsb25q
cy5jb20vYmFieWxvbjEwMS9saWdodHMKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbGlnaHQgZnJp
ZW5kbHkgbmFtZQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgcG9zaXRpb24gb2YgdGhlIHBv
aW50IGxpZ2h0IGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhl
IGxpZ2h0cyBiZWxvbmdzIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gUG9pbnRMaWdodChuYW1l
LCBwb3NpdGlvbiwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgbmFtZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9zaGFkb3dBbmdsZSA9IE1h
dGguUEkgLyAyOworICAgICAgICBfdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb2ludExpZ2h0
LnByb3RvdHlwZSwgInNoYWRvd0FuZ2xlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
dGVyOiBJbiBjYXNlIG9mIGRpcmVjdGlvbiBwcm92aWRlZCwgdGhlIHNoYWRvdyB3aWxsIG5vdCB1
c2UgYSBjdWJlIHRleHR1cmUgYnV0IHNpbXVsYXRlIGEgc3BvdCBzaGFkb3cgYXMgYSBmYWxsYmFj
aworICAgICAgICAgKiBUaGlzIHNwZWNpZmllcyB3aGF0IGFuZ2xlIHRoZSBzaGFkb3cgd2lsbCB1
c2UgdG8gYmUgY3JlYXRlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogSXQgZGVmYXVsdCB0byA5
MCBkZWdyZWVzIHRvIHdvcmsgbmljZWx5IHdpdGggdGhlIGN1YmUgdGV4dHVyZSBnZW5lcmF0aW9u
IGZvciBwb2ludCBsaWdodHMgc2hhZG93IG1hcHMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFkb3dBbmdsZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHRlcjogSW4gY2FzZSBvZiBkaXJl
Y3Rpb24gcHJvdmlkZWQsIHRoZSBzaGFkb3cgd2lsbCBub3QgdXNlIGEgY3ViZSB0ZXh0dXJlIGJ1
dCBzaW11bGF0ZSBhIHNwb3Qgc2hhZG93IGFzIGEgZmFsbGJhY2sKKyAgICAgICAgICogVGhpcyBz
cGVjaWZpZXMgd2hhdCBhbmdsZSB0aGUgc2hhZG93IHdpbGwgdXNlIHRvIGJlIGNyZWF0ZWQuCisg
ICAgICAgICAqCisgICAgICAgICAqIEl0IGRlZmF1bHQgdG8gOTAgZGVncmVlcyB0byB3b3JrIG5p
Y2VseSB3aXRoIHRoZSBjdWJlIHRleHR1cmUgZ2VuZXJhdGlvbiBmb3IgcG9pbnQgbGlnaHRzIHNo
YWRvdyBtYXBzLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHRoaXMuX3NoYWRvd0FuZ2xlID0gdmFsdWU7CisgICAgICAgICAgICB0aGlz
LmZvcmNlUHJvamVjdGlvbk1hdHJpeENvbXB1dGUoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFBvaW50TGlnaHQucHJvdG90eXBlLCAiZGlyZWN0aW9uIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZGlyZWN0aW9uIGlmIGl0IGhhcyBi
ZWVuIHNldC4KKyAgICAgICAgICogSW4gY2FzZSBvZiBkaXJlY3Rpb24gcHJvdmlkZWQsIHRoZSBz
aGFkb3cgd2lsbCBub3QgdXNlIGEgY3ViZSB0ZXh0dXJlIGJ1dCBzaW11bGF0ZSBhIHNwb3Qgc2hh
ZG93IGFzIGEgZmFsbGJhY2sKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RpcmVjdGlvbjsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEluIGNhc2Ugb2YgZGlyZWN0aW9uIHByb3ZpZGVkLCB0aGUgc2hh
ZG93IHdpbGwgbm90IHVzZSBhIGN1YmUgdGV4dHVyZSBidXQgc2ltdWxhdGUgYSBzcG90IHNoYWRv
dyBhcyBhIGZhbGxiYWNrCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdmFyIHByZXZpb3VzTmVlZEN1YmUgPSB0aGlzLm5lZWRDdWJlKCk7
CisgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh0
aGlzLm5lZWRDdWJlKCkgIT09IHByZXZpb3VzTmVlZEN1YmUgJiYgdGhpcy5fc2hhZG93R2VuZXJh
dG9yKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2hhZG93R2VuZXJhdG9yLnJlY3JlYXRlU2hh
ZG93TWFwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAg
ICAqIFJldHVybnMgdGhlIHN0cmluZyAiUG9pbnRMaWdodCIKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y2xhc3MgbmFtZQorICAgICAqLworICAgIFBvaW50TGlnaHQucHJvdG90eXBlLmdldENsYXNzTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJQb2ludExpZ2h0IjsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGludGVnZXIgMC4KKyAgICAgKiBAcmV0dXJucyBU
aGUgbGlnaHQgVHlwZSBpZCBhcyBhIGNvbnN0YW50IGRlZmluZXMgaW4gTGlnaHQuTElHSFRUWVBF
SURfeAorICAgICAqLworICAgIFBvaW50TGlnaHQucHJvdG90eXBlLmdldFR5cGVJRCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIF9saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJMaWdodCJdLkxJR0hUVFlQRUlEX1BPSU5UTElHSFQ7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTcGVjaWZpZXMgd2V0aGVyIG9yIG5vdCB0aGUgc2hhZG93bWFwIHNob3VsZCBiZSBhIGN1
YmUgdGV4dHVyZS4KKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkb3dtYXAgbmVlZHMg
dG8gYmUgYSBjdWJlIHRleHR1cmUuCisgICAgICovCisgICAgUG9pbnRMaWdodC5wcm90b3R5cGUu
bmVlZEN1YmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAhdGhpcy5kaXJlY3Rpb247
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgYWxpZ25lZCB3
aXRoIHRoZSBQb2ludExpZ2h0IGN1YmUgc3lzdGVtIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIGN1
YmUgZmFjZSBpbmRleCAoaW50ZWdlcikuCisgICAgICogQHBhcmFtIGZhY2VJbmRleCBUaGUgaW5k
ZXggb2YgdGhlIGZhY2Ugd2UgYXJlIGNvbXB1dGVkIHRoZSBkaXJlY3Rpb24gdG8gZ2VuZXJhdGUg
c2hhZG93CisgICAgICogQHJldHVybnMgVGhlIHNldCBkaXJlY3Rpb24gaW4gMmQgbW9kZSBvdGhl
cndpc2UgdGhlIGRpcmVjdGlvbiB0byB0aGUgY3ViZW1hcCBmYWNlIGlmIG5lZWRDdWJlKCkgaXMg
dHJ1ZQorICAgICAqLworICAgIFBvaW50TGlnaHQucHJvdG90eXBlLmdldFNoYWRvd0RpcmVjdGlv
biA9IGZ1bmN0aW9uIChmYWNlSW5kZXgpIHsKKyAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uKSB7
CisgICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5nZXRTaGFkb3dEaXJlY3Rpb24u
Y2FsbCh0aGlzLCBmYWNlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgc3dpdGNoIChmYWNlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgxLjAsIDAuMCwgMC4wKTsKKyAgICAgICAgICAg
ICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgtMS4wLCAwLjAs
IDAuMCk7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJW
ZWN0b3IzIl0oMC4wLCAtMS4wLCAwLjApOworICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKDAuMCwgMS4wLCAwLjApOworICAgICAgICAgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKDAuMCwgMC4wLCAx
LjApOworICAgICAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVj
dG9yMyJdKDAuMCwgMC4wLCAtMS4wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBwYXNz
ZWQgbWF0cml4ICJtYXRyaXgiIGFzIGEgbGVmdC1oYW5kZWQgcGVyc3BlY3RpdmUgcHJvamVjdGlv
biBtYXRyaXggd2l0aCB0aGUgZm9sbG93aW5nIHNldHRpbmdzIDoKKyAgICAgKiAtIGZvdiA9IFBJ
IC8gMgorICAgICAqIC0gYXNwZWN0IHJhdGlvIDogMS4wCisgICAgICogLSB6LW5lYXIgYW5kIGZh
ciBlcXVhbCB0byB0aGUgYWN0aXZlIGNhbWVyYSBtaW5aIGFuZCBtYXhaLgorICAgICAqIFJldHVy
bnMgdGhlIFBvaW50TGlnaHQuCisgICAgICovCisgICAgUG9pbnRMaWdodC5wcm90b3R5cGUuX3Nl
dERlZmF1bHRTaGFkb3dQcm9qZWN0aW9uTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgdmlld01h
dHJpeCwgcmVuZGVyTGlzdCkgeworICAgICAgICB2YXIgYWN0aXZlQ2FtZXJhID0gdGhpcy5nZXRT
Y2VuZSgpLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAgaWYgKCFhY3RpdmVDYW1lcmEpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWF0cml4Il0uUGVyc3BlY3RpdmVGb3ZMSFRvUmVm
KHRoaXMuc2hhZG93QW5nbGUsIDEuMCwgdGhpcy5nZXREZXB0aE1pblooYWN0aXZlQ2FtZXJhKSwg
dGhpcy5nZXREZXB0aE1heFooYWN0aXZlQ2FtZXJhKSwgbWF0cml4KTsKKyAgICB9OworICAgIFBv
aW50TGlnaHQucHJvdG90eXBlLl9idWlsZFVuaWZvcm1MYXlvdXQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidkxpZ2h0RGF0YSIsIDQpOwor
ICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZMaWdodERpZmZ1c2UiLCA0
KTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2TGlnaHRTcGVjdWxh
ciIsIDMpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZMaWdodEZh
bGxvZmYiLCA0KTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJzaGFk
b3dzSW5mbyIsIDMpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oImRl
cHRoVmFsdWVzIiwgMik7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuY3JlYXRlKCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBwYXNzZWQgRWZmZWN0ICJlZmZlY3QiIHdp
dGggdGhlIFBvaW50TGlnaHQgdHJhbnNmb3JtZWQgcG9zaXRpb24gKG9yIHBvc2l0aW9uLCBpZiBu
b25lKSBhbmQgcGFzc2VkIG5hbWUgKHN0cmluZykuCisgICAgICogQHBhcmFtIGVmZmVjdCBUaGUg
ZWZmZWN0IHRvIHVwZGF0ZQorICAgICAqIEBwYXJhbSBsaWdodEluZGV4IFRoZSBpbmRleCBvZiB0
aGUgbGlnaHQgaW4gdGhlIGVmZmVjdCB0byB1cGRhdGUKKyAgICAgKiBAcmV0dXJucyBUaGUgcG9p
bnQgbGlnaHQKKyAgICAgKi8KKyAgICBQb2ludExpZ2h0LnByb3RvdHlwZS50cmFuc2ZlclRvRWZm
ZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCwgbGlnaHRJbmRleCkgeworICAgICAgICBpZiAodGhpcy5j
b21wdXRlVHJhbnNmb3JtZWRJbmZvcm1hdGlvbigpKSB7CisgICAgICAgICAgICB0aGlzLl91bmlm
b3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgidkxpZ2h0RGF0YSIsIHRoaXMudHJhbnNmb3JtZWRQb3Np
dGlvbi54LCB0aGlzLnRyYW5zZm9ybWVkUG9zaXRpb24ueSwgdGhpcy50cmFuc2Zvcm1lZFBvc2l0
aW9uLnosIDAuMCwgbGlnaHRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgidkxpZ2h0RGF0YSIsIHRo
aXMucG9zaXRpb24ueCwgdGhpcy5wb3NpdGlvbi55LCB0aGlzLnBvc2l0aW9uLnosIDAsIGxpZ2h0
SW5kZXgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxv
YXQ0KCJ2TGlnaHRGYWxsb2ZmIiwgdGhpcy5yYW5nZSwgdGhpcy5faW52ZXJzZVNxdWFyZWRSYW5n
ZSwgMCwgMCwgbGlnaHRJbmRleCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
UG9pbnRMaWdodC5wcm90b3R5cGUudHJhbnNmZXJUb05vZGVNYXRlcmlhbEVmZmVjdCA9IGZ1bmN0
aW9uIChlZmZlY3QsIGxpZ2h0RGF0YVVuaWZvcm1OYW1lKSB7CisgICAgICAgIGlmICh0aGlzLmNv
bXB1dGVUcmFuc2Zvcm1lZEluZm9ybWF0aW9uKCkpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRG
bG9hdDMobGlnaHREYXRhVW5pZm9ybU5hbWUsIHRoaXMudHJhbnNmb3JtZWRQb3NpdGlvbi54LCB0
aGlzLnRyYW5zZm9ybWVkUG9zaXRpb24ueSwgdGhpcy50cmFuc2Zvcm1lZFBvc2l0aW9uLnopOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0Myhs
aWdodERhdGFVbmlmb3JtTmFtZSwgdGhpcy5wb3NpdGlvbi54LCB0aGlzLnBvc2l0aW9uLnksIHRo
aXMucG9zaXRpb24ueik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyB0aGUgbGlzdCBvZiBkZWZpbmVzIHNwZWNpZmljIHRv
IHRoZSBsaWdodCB0eXBlLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0IG9mIGRlZmlu
ZXMKKyAgICAgKiBAcGFyYW0gbGlnaHRJbmRleCBkZWZpbmVzIHRoZSBpbmRleCBvZiB0aGUgbGln
aHQgZm9yIHRoZSBlZmZlY3QKKyAgICAgKi8KKyAgICBQb2ludExpZ2h0LnByb3RvdHlwZS5wcmVw
YXJlTGlnaHRTcGVjaWZpY0RlZmluZXMgPSBmdW5jdGlvbiAoZGVmaW5lcywgbGlnaHRJbmRleCkg
eworICAgICAgICBkZWZpbmVzWyJQT0lOVExJR0hUIiArIGxpZ2h0SW5kZXhdID0gdHJ1ZTsKKyAg
ICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgUG9pbnRMaWdodC5wcm90b3R5cGUsICJz
aGFkb3dBbmdsZSIsIG51bGwpOworICAgIHJldHVybiBQb2ludExpZ2h0OworfShfc2hhZG93TGln
aHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2hhZG93TGlnaHQiXSkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0xpZ2h0cy9zaGFkb3dMaWdodC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9MaWdodHMvc2hhZG93TGlnaHQu
dHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBTaGFkb3dMaWdodCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTaGFkb3dMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2hhZG93TGlnaHQ7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3Rz
bGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL2xpZ2h0ICovICIuL0xpZ2h0cy9saWdodC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguYXhpcyAqLyAiLi9NYXRocy9tYXRo
LmF4aXMudHMiKTsKKworCisKKworCisvKioKKyAqIEJhc2UgaW1wbGVtZW50YXRpb24gSVNoYWRv
d0xpZ2h0CisgKiBJdCBncm91cHMgYWxsIHRoZSBjb21tb24gYmVoYXZpb3VyIGluIG9yZGVyIHRv
IHJlZHVjZSBkdXBwbGljYXRpb24gYW5kIGJldHRlciBmb2xsb3cgdGhlIERSWSBwYXR0ZXJuLgor
ICovCit2YXIgU2hhZG93TGlnaHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU2hh
ZG93TGlnaHQsIF9zdXBlcik7CisgICAgZnVuY3Rpb24gU2hhZG93TGlnaHQoKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1l
bnRzKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fbmVlZFByb2plY3Rpb25NYXRyaXhDb21wdXRl
ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBTaGFkb3dMaWdodC5w
cm90b3R5cGUuX3NldFBvc2l0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHRoaXMu
X3Bvc2l0aW9uID0gdmFsdWU7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hh
ZG93TGlnaHQucHJvdG90eXBlLCAicG9zaXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBTZXRzIHRoZSBwb3NpdGlvbiB0aGUgc2hhZG93IHdpbGwgYmUgY2FzdGVkIGZyb20uIEFsc28g
dXNlIGFzIHRoZSBsaWdodCBwb3NpdGlvbiBmb3IgYm90aAorICAgICAgICAgKiBwb2ludCBhbmQg
c3BvdCBsaWdodHMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFNldHMgdGhlIHBvc2l0aW9uIHRoZSBzaGFkb3cgd2lsbCBiZSBjYXN0ZWQg
ZnJvbS4gQWxzbyB1c2UgYXMgdGhlIGxpZ2h0IHBvc2l0aW9uIGZvciBib3RoCisgICAgICAgICAq
IHBvaW50IGFuZCBzcG90IGxpZ2h0cy4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9zZXRQb3NpdGlvbih2YWx1ZSk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIFNoYWRvd0xpZ2h0LnByb3RvdHlwZS5fc2V0RGlyZWN0aW9uID0g
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IHZhbHVlOworICAg
IH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRvd0xpZ2h0LnByb3RvdHlwZSwgImRp
cmVjdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEluIDJkIG1vZGUgKG5lZWRDdWJl
IGJlaW5nIGZhbHNlKSwgZ2V0cyB0aGUgZGlyZWN0aW9uIHVzZWQgdG8gY2FzdCB0aGUgc2hhZG93
LgorICAgICAgICAgKiBBbHNvIHVzZSBhcyB0aGUgbGlnaHQgZGlyZWN0aW9uIG9uIHNwb3QgYW5k
IGRpcmVjdGlvbmFsIGxpZ2h0cy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RpcmVjdGlvbjsKKyAgICAgICAgfSwKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEluIDJkIG1vZGUgKG5lZWRDdWJlIGJlaW5nIGZhbHNlKSwg
c2V0cyB0aGUgZGlyZWN0aW9uIHVzZWQgdG8gY2FzdCB0aGUgc2hhZG93LgorICAgICAgICAgKiBB
bHNvIHVzZSBhcyB0aGUgbGlnaHQgZGlyZWN0aW9uIG9uIHNwb3QgYW5kIGRpcmVjdGlvbmFsIGxp
Z2h0cy4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICB0aGlzLl9zZXREaXJlY3Rpb24odmFsdWUpOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZG93TGlnaHQucHJvdG90eXBlLCAic2hhZG93TWlu
WiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHNoYWRvdyBwcm9qZWN0aW9u
IGNsaXBwaW5nIG1pbmltdW0geiB2YWx1ZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRvd01pblo7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBzaGFkb3cgcHJvamVjdGlvbiBj
bGlwcGluZyBtaW5pbXVtIHogdmFsdWUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fc2hhZG93TWluWiA9IHZhbHVlOworICAg
ICAgICAgICAgdGhpcy5mb3JjZVByb2plY3Rpb25NYXRyaXhDb21wdXRlKCk7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dMaWdodC5wcm90b3R5cGUs
ICJzaGFkb3dNYXhaIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgc2hhZG93
IHByb2plY3Rpb24gY2xpcHBpbmcgbWF4aW11bSB6IHZhbHVlLgorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZG93TWF4
WjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHNoYWRvdyBw
cm9qZWN0aW9uIGNsaXBwaW5nIG1heGltdW0geiB2YWx1ZS4KKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dNYXhaID0g
dmFsdWU7CisgICAgICAgICAgICB0aGlzLmZvcmNlUHJvamVjdGlvbk1hdHJpeENvbXB1dGUoKTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQ29tcHV0ZXMgdGhlIHRyYW5zZm9y
bWVkIGluZm9ybWF0aW9uICh0cmFuc2Zvcm1lZFBvc2l0aW9uIGFuZCB0cmFuc2Zvcm1lZERpcmVj
dGlvbiBpbiBXb3JsZCBzcGFjZSkgb2YgdGhlIGN1cnJlbnQgbGlnaHQKKyAgICAgKiBAcmV0dXJu
cyB0cnVlIGlmIHRoZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBjb21wdXRlZCwgZmFsc2UgaWYgaXQg
ZG9lcyBub3QgbmVlZCB0byAobm8gcGFyZW50aW5nKQorICAgICAqLworICAgIFNoYWRvd0xpZ2h0
LnByb3RvdHlwZS5jb21wdXRlVHJhbnNmb3JtZWRJbmZvcm1hdGlvbiA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LmdldFdvcmxkTWF0cml4KSB7
CisgICAgICAgICAgICBpZiAoIXRoaXMudHJhbnNmb3JtZWRQb3NpdGlvbikgeworICAgICAgICAg
ICAgICAgIHRoaXMudHJhbnNmb3JtZWRQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHRoaXMucG9zaXRpb24s
IHRoaXMucGFyZW50LmdldFdvcmxkTWF0cml4KCksIHRoaXMudHJhbnNmb3JtZWRQb3NpdGlvbik7
CisgICAgICAgICAgICAvLyBJbiBjYXNlIHRoZSBkaXJlY3Rpb24gaXMgcHJlc2VudC4KKyAgICAg
ICAgICAgIGlmICh0aGlzLmRpcmVjdGlvbikgeworICAgICAgICAgICAgICAgIGlmICghdGhpcy50
cmFuc2Zvcm1lZERpcmVjdGlvbikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9y
bWVkRGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0
b3IzIl0uVHJhbnNmb3JtTm9ybWFsVG9SZWYodGhpcy5kaXJlY3Rpb24sIHRoaXMucGFyZW50Lmdl
dFdvcmxkTWF0cml4KCksIHRoaXMudHJhbnNmb3JtZWREaXJlY3Rpb24pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBkZXB0aCBzY2FsZSB1c2Vk
IGZvciB0aGUgc2hhZG93IG1hcC4KKyAgICAgKiBAcmV0dXJucyB0aGUgZGVwdGggc2NhbGUuCisg
ICAgICovCisgICAgU2hhZG93TGlnaHQucHJvdG90eXBlLmdldERlcHRoU2NhbGUgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiA1MC4wOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0
IHRoZSBkaXJlY3Rpb24gdG8gdXNlIHRvIHJlbmRlciB0aGUgc2hhZG93IG1hcC4gSW4gY2FzZSBv
ZiBjdWJlIHRleHR1cmUsIHRoZSBmYWNlIGluZGV4IGNhbiBiZSBwYXNzZWQuCisgICAgICogQHBh
cmFtIGZhY2VJbmRleCBUaGUgaW5kZXggb2YgdGhlIGZhY2Ugd2UgYXJlIGNvbXB1dGVkIHRoZSBk
aXJlY3Rpb24gdG8gZ2VuZXJhdGUgc2hhZG93CisgICAgICogQHJldHVybnMgVGhlIHNldCBkaXJl
Y3Rpb24gaW4gMmQgbW9kZSBvdGhlcndpc2UgdGhlIGRpcmVjdGlvbiB0byB0aGUgY3ViZW1hcCBm
YWNlIGlmIG5lZWRDdWJlKCkgaXMgdHJ1ZQorICAgICAqLworICAgIFNoYWRvd0xpZ2h0LnByb3Rv
dHlwZS5nZXRTaGFkb3dEaXJlY3Rpb24gPSBmdW5jdGlvbiAoZmFjZUluZGV4KSB7CisgICAgICAg
IHJldHVybiB0aGlzLnRyYW5zZm9ybWVkRGlyZWN0aW9uID8gdGhpcy50cmFuc2Zvcm1lZERpcmVj
dGlvbiA6IHRoaXMuZGlyZWN0aW9uOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0
aGUgU2hhZG93TGlnaHQgYWJzb2x1dGUgcG9zaXRpb24gaW4gdGhlIFdvcmxkLgorICAgICAqIEBy
ZXR1cm5zIHRoZSBwb3NpdGlvbiB2ZWN0b3IgaW4gd29ybGQgc3BhY2UKKyAgICAgKi8KKyAgICBT
aGFkb3dMaWdodC5wcm90b3R5cGUuZ2V0QWJzb2x1dGVQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtZWRQb3NpdGlvbiA/IHRoaXMudHJhbnNmb3Jt
ZWRQb3NpdGlvbiA6IHRoaXMucG9zaXRpb247CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRz
IHRoZSBTaGFkb3dMaWdodCBkaXJlY3Rpb24gdG93YXJkIHRoZSBwYXNzZWQgdGFyZ2V0LgorICAg
ICAqIEBwYXJhbSB0YXJnZXQgVGhlIHBvaW50IHRvIHRhcmdldCBpbiBsb2NhbCBzcGFjZQorICAg
ICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIFNoYWRvd0xpZ2h0IGRpcmVjdGlvbgorICAgICAqLwor
ICAgIFNoYWRvd0xpZ2h0LnByb3RvdHlwZS5zZXREaXJlY3Rpb25Ub1RhcmdldCA9IGZ1bmN0aW9u
ICh0YXJnZXQpIHsKKyAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLk5vcm1hbGl6ZSh0YXJnZXQu
c3VidHJhY3QodGhpcy5wb3NpdGlvbikpOworICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb247
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsaWdodCByb3RhdGlvbiBpbiBl
dWxlciBkZWZpbml0aW9uLgorICAgICAqIEByZXR1cm5zIHRoZSB4IHkgeiByb3RhdGlvbiBpbiBs
b2NhbCBzcGFjZS4KKyAgICAgKi8KKyAgICBTaGFkb3dMaWdodC5wcm90b3R5cGUuZ2V0Um90YXRp
b24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpOwor
ICAgICAgICB2YXIgeGF4aXMgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siVmVjdG9yMyJdLkNyb3NzKHRoaXMuZGlyZWN0aW9uLCBfTWF0aHNfbWF0aF9h
eGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkF4aXMiXS5ZKTsKKyAgICAgICAgdmFy
IHlheGlzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlY3RvcjMiXS5Dcm9zcyh4YXhpcywgdGhpcy5kaXJlY3Rpb24pOworICAgICAgICByZXR1cm4g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMi
XS5Sb3RhdGlvbkZyb21BeGlzKHhheGlzLCB5YXhpcywgdGhpcy5kaXJlY3Rpb24pOworICAgIH07
CisgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhZG93IGdlbmVy
YXRpb24gcmVxdWlyZSBhIGN1YmUgdGV4dHVyZSBvciBhIDJkIHRleHR1cmUuCisgICAgICogQHJl
dHVybnMgdHJ1ZSBpZiBhIGN1YmUgdGV4dHVyZSBuZWVkcyB0byBiZSB1c2UKKyAgICAgKi8KKyAg
ICBTaGFkb3dMaWdodC5wcm90b3R5cGUubmVlZEN1YmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGVjdHMgaWYgdGhlIHBy
b2plY3Rpb24gbWF0cml4IHJlcXVpcmVzIHRvIGJlIHJlY29tcHV0ZWQgdGhpcyBmcmFtZS4KKyAg
ICAgKiBAcmV0dXJucyB0cnVlIGlmIGl0IHJlcXVpcmVzIHRvIGJlIHJlY29tcHV0ZWQgb3RoZXJ3
aXNlLCBmYWxzZS4KKyAgICAgKi8KKyAgICBTaGFkb3dMaWdodC5wcm90b3R5cGUubmVlZFByb2pl
Y3Rpb25NYXRyaXhDb21wdXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5f
bmVlZFByb2plY3Rpb25NYXRyaXhDb21wdXRlOworICAgIH07CisgICAgLyoqCisgICAgICogRm9y
Y2VzIHRoZSBzaGFkb3cgZ2VuZXJhdG9yIHRvIHJlY29tcHV0ZSB0aGUgcHJvamVjdGlvbiBtYXRy
aXggZXZlbiBpZiBwb3NpdGlvbiBhbmQgZGlyZWN0aW9uIGRpZCBub3QgY2hhbmdlZC4KKyAgICAg
Ki8KKyAgICBTaGFkb3dMaWdodC5wcm90b3R5cGUuZm9yY2VQcm9qZWN0aW9uTWF0cml4Q29tcHV0
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fbmVlZFByb2plY3Rpb25NYXRyaXhDb21w
dXRlID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgU2hhZG93TGlnaHQu
cHJvdG90eXBlLl9pbml0Q2FjaGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90
b3R5cGUuX2luaXRDYWNoZS5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl9jYWNoZS5wb3NpdGlv
biA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0
b3IzIl0uWmVybygpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTaGFkb3dMaWdo
dC5wcm90b3R5cGUuX2lzU3luY2hyb25pemVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
IXRoaXMuX2NhY2hlLnBvc2l0aW9uLmVxdWFscyh0aGlzLnBvc2l0aW9uKSkgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07
CisgICAgLyoqCisgICAgICogQ29tcHV0ZXMgdGhlIHdvcmxkIG1hdHJpeCBvZiB0aGUgbm9kZQor
ICAgICAqIEBwYXJhbSBmb3JjZSBkZWZpbmVzIGlmIHRoZSBjYWNoZSB2ZXJzaW9uIHNob3VsZCBi
ZSBpbnZhbGlkYXRlZCBmb3JjaW5nIHRoZSB3b3JsZCBtYXRyaXggdG8gYmUgY3JlYXRlZCBmcm9t
IHNjcmF0Y2gKKyAgICAgKiBAcmV0dXJucyB0aGUgd29ybGQgbWF0cml4CisgICAgICovCisgICAg
U2hhZG93TGlnaHQucHJvdG90eXBlLmNvbXB1dGVXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uIChmb3Jj
ZSkgeworICAgICAgICBpZiAoIWZvcmNlICYmIHRoaXMuaXNTeW5jaHJvbml6ZWQoKSkgeworICAg
ICAgICAgICAgdGhpcy5fY3VycmVudFJlbmRlcklkID0gdGhpcy5nZXRTY2VuZSgpLmdldFJlbmRl
cklkKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRNYXRyaXg7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fdXBkYXRlQ2FjaGUoKTsKKyAgICAgICAgdGhpcy5fY2FjaGUucG9zaXRp
b24uY29weUZyb20odGhpcy5wb3NpdGlvbik7CisgICAgICAgIGlmICghdGhpcy5fd29ybGRNYXRy
aXgpIHsKKyAgICAgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAg
ICAgIH0KKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIk1hdHJpeCJdLlRyYW5zbGF0aW9uVG9SZWYodGhpcy5wb3NpdGlvbi54LCB0aGlzLnBv
c2l0aW9uLnksIHRoaXMucG9zaXRpb24ueiwgdGhpcy5fd29ybGRNYXRyaXgpOworICAgICAgICBp
ZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuZ2V0V29ybGRNYXRyaXgpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3dvcmxkTWF0cml4Lm11bHRpcGx5VG9SZWYodGhpcy5wYXJlbnQuZ2V0V29ybGRN
YXRyaXgoKSwgdGhpcy5fd29ybGRNYXRyaXgpOworICAgICAgICAgICAgdGhpcy5fbWFya1N5bmNl
ZFdpdGhQYXJlbnQoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDYWNoZSB0aGUgZGV0ZXJtaW5h
bnQKKyAgICAgICAgdGhpcy5fd29ybGRNYXRyaXhEZXRlcm1pbmFudElzRGlydHkgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRNYXRyaXg7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBHZXRzIHRoZSBtaW5aIHVzZWQgZm9yIHNoYWRvdyBhY2NvcmRpbmcgdG8gYm90aCB0aGUgc2Nl
bmUgYW5kIHRoZSBsaWdodC4KKyAgICAgKiBAcGFyYW0gYWN0aXZlQ2FtZXJhIFRoZSBjYW1lcmEg
d2UgYXJlIHJldHVybmluZyB0aGUgbWluIGZvcgorICAgICAqIEByZXR1cm5zIHRoZSBkZXB0aCBt
aW4gegorICAgICAqLworICAgIFNoYWRvd0xpZ2h0LnByb3RvdHlwZS5nZXREZXB0aE1pblogPSBm
dW5jdGlvbiAoYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNoYWRvd01pblog
IT09IHVuZGVmaW5lZCA/IHRoaXMuc2hhZG93TWluWiA6IGFjdGl2ZUNhbWVyYS5taW5aOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbWF4WiB1c2VkIGZvciBzaGFkb3cgYWNjb3Jk
aW5nIHRvIGJvdGggdGhlIHNjZW5lIGFuZCB0aGUgbGlnaHQuCisgICAgICogQHBhcmFtIGFjdGl2
ZUNhbWVyYSBUaGUgY2FtZXJhIHdlIGFyZSByZXR1cm5pbmcgdGhlIG1heCBmb3IKKyAgICAgKiBA
cmV0dXJucyB0aGUgZGVwdGggbWF4IHoKKyAgICAgKi8KKyAgICBTaGFkb3dMaWdodC5wcm90b3R5
cGUuZ2V0RGVwdGhNYXhaID0gZnVuY3Rpb24gKGFjdGl2ZUNhbWVyYSkgeworICAgICAgICByZXR1
cm4gdGhpcy5zaGFkb3dNYXhaICE9PSB1bmRlZmluZWQgPyB0aGlzLnNoYWRvd01heFogOiBhY3Rp
dmVDYW1lcmEubWF4WjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHNoYWRvdyBw
cm9qZWN0aW9uIG1hdHJpeCBpbiBwYXJhbWV0ZXIgdG8gdGhlIGdlbmVyYXRlZCBwcm9qZWN0aW9u
IG1hdHJpeC4KKyAgICAgKiBAcGFyYW0gbWF0cml4IFRoZSBtYXRlcml4IHRvIHVwZGF0ZWQgd2l0
aCB0aGUgcHJvamVjdGlvbiBpbmZvcm1hdGlvbgorICAgICAqIEBwYXJhbSB2aWV3TWF0cml4IFRo
ZSB0cmFuc2Zvcm0gbWF0cml4IG9mIHRoZSBsaWdodAorICAgICAqIEBwYXJhbSByZW5kZXJMaXN0
IFRoZSBsaXN0IG9mIG1lc2ggdG8gcmVuZGVyIGluIHRoZSBtYXAKKyAgICAgKiBAcmV0dXJucyBU
aGUgY3VycmVudCBsaWdodAorICAgICAqLworICAgIFNoYWRvd0xpZ2h0LnByb3RvdHlwZS5zZXRT
aGFkb3dQcm9qZWN0aW9uTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgdmlld01hdHJpeCwgcmVu
ZGVyTGlzdCkgeworICAgICAgICBpZiAodGhpcy5jdXN0b21Qcm9qZWN0aW9uTWF0cml4QnVpbGRl
cikgeworICAgICAgICAgICAgdGhpcy5jdXN0b21Qcm9qZWN0aW9uTWF0cml4QnVpbGRlcih2aWV3
TWF0cml4LCByZW5kZXJMaXN0LCBtYXRyaXgpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgdGhpcy5fc2V0RGVmYXVsdFNoYWRvd1Byb2plY3Rpb25NYXRyaXgobWF0cml4
LCB2aWV3TWF0cml4LCByZW5kZXJMaXN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVj
b3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVmVjdG9yMyJdKSgpCisgICAgXSwgU2hhZG93TGln
aHQucHJvdG90eXBlLCAicG9zaXRpb24iLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1ZlY3RvcjMi
XSkoKQorICAgIF0sIFNoYWRvd0xpZ2h0LnByb3RvdHlwZSwgImRpcmVjdGlvbiIsIG51bGwpOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU2hhZG93TGlnaHQucHJvdG90eXBlLCAic2hhZG93
TWluWiIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU2hhZG93TGlnaHQucHJv
dG90eXBlLCAic2hhZG93TWF4WiIsIG51bGwpOworICAgIHJldHVybiBTaGFkb3dMaWdodDsKK30o
X2xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxpZ2h0Il0pKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9MaWdodHMvc3BvdExpZ2h0LnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9MaWdodHMvc3BvdExpZ2h0LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IFNwb3RMaWdodCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcG90TGln
aHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNwb3RMaWdodDsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lmpz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNv
cmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0
aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZSAqLyAi
Li9ub2RlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xpZ2h0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpZ2h0ICovICIu
L0xpZ2h0cy9saWdodC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zaGFkb3dMaWdo
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9zaGFkb3dMaWdodCAqLyAiLi9MaWdodHMvc2hhZG93TGlnaHQudHMiKTsKKworCisKKworCisK
K19ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGUiXS5BZGROb2RlQ29uc3Ry
dWN0b3IoIkxpZ2h0X1R5cGVfMiIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSkgeworICAgIHJldHVy
biBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3BvdExpZ2h0KG5hbWUsIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpLCBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlpl
cm8oKSwgMCwgMCwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIEEgc3BvdCBsaWdodCBpcyBkZWZp
bmVkIGJ5IGEgcG9zaXRpb24sIGEgZGlyZWN0aW9uLCBhbiBhbmdsZSwgYW5kIGFuIGV4cG9uZW50
LgorICogVGhlc2UgdmFsdWVzIGRlZmluZSBhIGNvbmUgb2YgbGlnaHQgc3RhcnRpbmcgZnJvbSB0
aGUgcG9zaXRpb24sIGVtaXR0aW5nIHRvd2FyZCB0aGUgZGlyZWN0aW9uLgorICogVGhlIGFuZ2xl
LCBpbiByYWRpYW5zLCBkZWZpbmVzIHRoZSBzaXplIChmaWVsZCBvZiBpbGx1bWluYXRpb24pIG9m
IHRoZSBzcG90bGlnaHQncyBjb25pY2FsIGJlYW0sCisgKiBhbmQgdGhlIGV4cG9uZW50IGRlZmlu
ZXMgdGhlIHNwZWVkIG9mIHRoZSBkZWNheSBvZiB0aGUgbGlnaHQgd2l0aCBkaXN0YW5jZSAocmVh
Y2gpLgorICogRG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9u
MTAxL2xpZ2h0cworICovCit2YXIgU3BvdExpZ2h0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0
ZW5kcyJdKFNwb3RMaWdodCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgU3Bv
dExpZ2h0IG9iamVjdCBpbiB0aGUgc2NlbmUuIEEgc3BvdCBsaWdodCBpcyBhIHNpbXBseSBsaWdo
dCBvcmllbnRlZCBjb25lLgorICAgICAqIEl0IGNhbiBjYXN0IHNoYWRvd3MuCisgICAgICogRG9j
dW1lbnRhdGlvbiA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9saWdodHMK
KyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbGlnaHQgZnJpZW5kbHkgbmFtZQorICAgICAqIEBwYXJh
bSBwb3NpdGlvbiBUaGUgcG9zaXRpb24gb2YgdGhlIHNwb3QgbGlnaHQgaW4gdGhlIHNjZW5lCisg
ICAgICogQHBhcmFtIGRpcmVjdGlvbiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBsaWdodCBpbiB0aGUg
c2NlbmUKKyAgICAgKiBAcGFyYW0gYW5nbGUgVGhlIGNvbmUgYW5nbGUgb2YgdGhlIGxpZ2h0IGlu
IFJhZGlhbnMKKyAgICAgKiBAcGFyYW0gZXhwb25lbnQgVGhlIGxpZ2h0IGRlY2F5IHNwZWVkIHdp
dGggdGhlIGRpc3RhbmNlIGZyb20gdGhlIGVtaXNzaW9uIHNwb3QKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgVGhlIHNjZW5lIHRoZSBsaWdodHMgYmVsb25ncyB0bworICAgICAqLworICAgIGZ1bmN0aW9u
IFNwb3RMaWdodChuYW1lLCBwb3NpdGlvbiwgZGlyZWN0aW9uLCBhbmdsZSwgZXhwb25lbnQsIHNj
ZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5l
KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5faW5uZXJBbmdsZSA9IDA7CisgICAgICAgIF90aGlz
Ll9wcm9qZWN0aW9uVGV4dHVyZU1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9wcm9q
ZWN0aW9uVGV4dHVyZUxpZ2h0TmVhciA9IDFlLTY7CisgICAgICAgIF90aGlzLl9wcm9qZWN0aW9u
VGV4dHVyZUxpZ2h0RmFyID0gMTAwMC4wOworICAgICAgICBfdGhpcy5fcHJvamVjdGlvblRleHR1
cmVVcERpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJWZWN0b3IzIl0uVXAoKTsKKyAgICAgICAgX3RoaXMuX3Byb2plY3Rpb25UZXh0dXJl
Vmlld0xpZ2h0RGlydHkgPSB0cnVlOworICAgICAgICBfdGhpcy5fcHJvamVjdGlvblRleHR1cmVQ
cm9qZWN0aW9uTGlnaHREaXJ0eSA9IHRydWU7CisgICAgICAgIF90aGlzLl9wcm9qZWN0aW9uVGV4
dHVyZURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX3Byb2plY3Rpb25UZXh0dXJlVmlld1Rh
cmdldFZlY3RvciA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBfdGhpcy5fcHJvamVjdGlvblRleHR1cmVW
aWV3TGlnaHRNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTWF0cml4Il0uWmVybygpOworICAgICAgICBfdGhpcy5fcHJvamVjdGlvblRleHR1
cmVQcm9qZWN0aW9uTGlnaHRNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTWF0cml4Il0uWmVybygpOworICAgICAgICBfdGhpcy5fcHJvamVj
dGlvblRleHR1cmVTY2FsaW5nTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLkZyb21WYWx1ZXMoMC41LCAwLjAsIDAuMCwgMC4w
LCAwLjAsIDAuNSwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjUsIDAuMCwgMC41LCAwLjUsIDAuNSwg
MS4wKTsKKyAgICAgICAgX3RoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgX3RoaXMu
ZGlyZWN0aW9uID0gZGlyZWN0aW9uOworICAgICAgICBfdGhpcy5hbmdsZSA9IGFuZ2xlOworICAg
ICAgICBfdGhpcy5leHBvbmVudCA9IGV4cG9uZW50OworICAgICAgICByZXR1cm4gX3RoaXM7Cisg
ICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTcG90TGlnaHQucHJvdG90eXBlLCAiYW5n
bGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjb25lIGFuZ2xlIG9mIHRo
ZSBzcG90IGxpZ2h0IGluIFJhZGlhbnMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmdsZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGNvbmUgYW5nbGUgb2YgdGhlIHNwb3QgbGln
aHQgaW4gUmFkaWFucy4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9hbmdsZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5f
Y29zSGFsZkFuZ2xlID0gTWF0aC5jb3ModmFsdWUgKiAwLjUpOworICAgICAgICAgICAgdGhpcy5f
cHJvamVjdGlvblRleHR1cmVQcm9qZWN0aW9uTGlnaHREaXJ0eSA9IHRydWU7CisgICAgICAgICAg
ICB0aGlzLmZvcmNlUHJvamVjdGlvbk1hdHJpeENvbXB1dGUoKTsKKyAgICAgICAgICAgIHRoaXMu
X2NvbXB1dGVBbmdsZVZhbHVlcygpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoU3BvdExpZ2h0LnByb3RvdHlwZSwgImlubmVyQW5nbGUiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBPbmx5IHVzZWQgaW4gZ2x0ZiBmYWxsb2ZmIG1vZGUsIHRoaXMgZGVm
aW5lcyB0aGUgYW5nbGUgd2hlcmUKKyAgICAgICAgICogdGhlIGRpcmVjdGlvbmFsIGZhbGxvZmYg
d2lsbCBzdGFydCBiZWZvcmUgY3V0dGluZyBhdCBhbmdsZSB3aGljaCBjb3VsZCBiZSBzZWVuCisg
ICAgICAgICAqIGFzIG91dGVyIGFuZ2xlLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJBbmdsZTsKKyAgICAgICAg
fSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ubHkgdXNlZCBpbiBnbHRmIGZhbGxvZmYgbW9k
ZSwgdGhpcyBkZWZpbmVzIHRoZSBhbmdsZSB3aGVyZQorICAgICAgICAgKiB0aGUgZGlyZWN0aW9u
YWwgZmFsbG9mZiB3aWxsIHN0YXJ0IGJlZm9yZSBjdXR0aW5nIGF0IGFuZ2xlIHdoaWNoIGNvdWxk
IGJlIHNlZW4KKyAgICAgICAgICogYXMgb3V0ZXIgYW5nbGUuCisgICAgICAgICAqLworICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faW5uZXJBbmdsZSA9
IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fY29tcHV0ZUFuZ2xlVmFsdWVzKCk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTcG90TGlnaHQucHJvdG90eXBl
LCAic2hhZG93QW5nbGVTY2FsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFsbG93cyBz
Y2FsaW5nIHRoZSBhbmdsZSBvZiB0aGUgbGlnaHQgZm9yIHNoYWRvdyBnZW5lcmF0aW9uIG9ubHku
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9zaGFkb3dBbmdsZVNjYWxlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAg
ICAgICAgICogQWxsb3dzIHNjYWxpbmcgdGhlIGFuZ2xlIG9mIHRoZSBsaWdodCBmb3Igc2hhZG93
IGdlbmVyYXRpb24gb25seS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dBbmdsZVNjYWxlID0gdmFsdWU7CisgICAg
ICAgICAgICB0aGlzLmZvcmNlUHJvamVjdGlvbk1hdHJpeENvbXB1dGUoKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNwb3RMaWdodC5wcm90b3R5cGUsICJw
cm9qZWN0aW9uVGV4dHVyZU1hdHJpeCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICogQWxsb3dz
IHJlYWRpbmcgdGhlIHByb2plY3RvbiB0ZXh0dXJlCisgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb25UZXh0dXJl
TWF0cml4OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3Bv
dExpZ2h0LnByb3RvdHlwZSwgInByb2plY3Rpb25UZXh0dXJlTGlnaHROZWFyIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbmVhciBjbGlwIG9mIHRoZSBTcG90bGlnaHQgZm9y
IHRleHR1cmUgcHJvamVjdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb25UZXh0dXJlTGlnaHROZWFy
OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgbmVhciBjbGlw
IG9mIHRoZSBTcG90bGlnaHQgZm9yIHRleHR1cmUgcHJvamVjdGlvbi4KKyAgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9wcm9qZWN0
aW9uVGV4dHVyZUxpZ2h0TmVhciA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlv
blRleHR1cmVQcm9qZWN0aW9uTGlnaHREaXJ0eSA9IHRydWU7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTcG90TGlnaHQucHJvdG90eXBlLCAicHJvamVjdGlv
blRleHR1cmVMaWdodEZhciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGZh
ciBjbGlwIG9mIHRoZSBTcG90bGlnaHQgZm9yIHRleHR1cmUgcHJvamVjdGlvbi4KKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3Byb2plY3Rpb25UZXh0dXJlTGlnaHRGYXI7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTZXRzIHRoZSBmYXIgY2xpcCBvZiB0aGUgU3BvdGxpZ2h0IGZvciB0ZXh0dXJlIHBy
b2plY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvblRleHR1cmVMaWdodEZhciA9IHZhbHVlOworICAg
ICAgICAgICAgdGhpcy5fcHJvamVjdGlvblRleHR1cmVQcm9qZWN0aW9uTGlnaHREaXJ0eSA9IHRy
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTcG90TGln
aHQucHJvdG90eXBlLCAicHJvamVjdGlvblRleHR1cmVVcERpcmVjdGlvbiIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIFVwIHZlY3RvciBvZiB0aGUgU3BvdGxpZ2h0IGZvciB0
ZXh0dXJlIHByb2plY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVVwRGlyZWN0aW9u
OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgVXAgdmVjdG9y
IG9mIHRoZSBTcG90bGlnaHQgZm9yIHRleHR1cmUgcHJvamVjdGlvbi4KKyAgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9wcm9qZWN0
aW9uVGV4dHVyZVVwRGlyZWN0aW9uID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9wcm9qZWN0
aW9uVGV4dHVyZVByb2plY3Rpb25MaWdodERpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNwb3RMaWdodC5wcm90b3R5cGUsICJwcm9qZWN0
aW9uVGV4dHVyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHByb2plY3Rp
b24gdGV4dHVyZSBvZiB0aGUgbGlnaHQuCisgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb25UZXh0dXJlOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgKiBTZXRzIHRoZSBwcm9qZWN0aW9uIHRleHR1
cmUgb2YgdGhlIGxpZ2h0LgorICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9wcm9qZWN0aW9uVGV4dHVyZSA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZSA9IHZh
bHVlOworICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvblRleHR1cmVEaXJ0eSA9IHRydWU7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fcHJvamVjdGlvblRleHR1cmUgJiYgIXRoaXMuX3Byb2plY3Rp
b25UZXh0dXJlLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhp
cy5fcHJvamVjdGlvblRleHR1cmU7CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUub25Mb2Fk
T2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLm9uTG9hZE9ic2VydmFi
bGUuYWRkT25jZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5f
bWFya01lc2hlc0FzTGlnaHREaXJ0eSgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgor
ICAgICAqIFJldHVybnMgdGhlIHN0cmluZyAiU3BvdExpZ2h0Ii4KKyAgICAgKiBAcmV0dXJucyB0
aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFNwb3RMaWdodC5wcm90b3R5cGUuZ2V0Q2xhc3NO
YW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlNwb3RMaWdodCI7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIDIuCisgICAgICogQHJldHVybnMg
VGhlIGxpZ2h0IFR5cGUgaWQgYXMgYSBjb25zdGFudCBkZWZpbmVzIGluIExpZ2h0LkxJR0hUVFlQ
RUlEX3gKKyAgICAgKi8KKyAgICBTcG90TGlnaHQucHJvdG90eXBlLmdldFR5cGVJRCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIF9saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJMaWdodCJdLkxJR0hUVFlQRUlEX1NQT1RMSUdIVDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIE92ZXJyaWRlcyB0aGUgZGlyZWN0aW9uIHNldHRlciB0byByZWNvbXB1dGUgdGhlIHByb2pl
Y3Rpb24gdGV4dHVyZSB2aWV3IGxpZ2h0IE1hdHJpeC4KKyAgICAgKi8KKyAgICBTcG90TGlnaHQu
cHJvdG90eXBlLl9zZXREaXJlY3Rpb24gPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgX3N1
cGVyLnByb3RvdHlwZS5fc2V0RGlyZWN0aW9uLmNhbGwodGhpcywgdmFsdWUpOworICAgICAgICB0
aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVZpZXdMaWdodERpcnR5ID0gdHJ1ZTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIE92ZXJyaWRlcyB0aGUgcG9zaXRpb24gc2V0dGVyIHRvIHJlY29tcHV0ZSB0
aGUgcHJvamVjdGlvbiB0ZXh0dXJlIHZpZXcgbGlnaHQgTWF0cml4LgorICAgICAqLworICAgIFNw
b3RMaWdodC5wcm90b3R5cGUuX3NldFBvc2l0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgIF9zdXBlci5wcm90b3R5cGUuX3NldFBvc2l0aW9uLmNhbGwodGhpcywgdmFsdWUpOworICAg
ICAgICB0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVZpZXdMaWdodERpcnR5ID0gdHJ1ZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHBhc3NlZCBtYXRyaXggIm1hdHJpeCIgYXMgcGVy
c3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggZm9yIHRoZSBzaGFkb3dzIGFuZCB0aGUgcGFzc2Vk
IHZpZXcgbWF0cml4IHdpdGggdGhlIGZvdiBlcXVhbCB0byB0aGUgU3BvdExpZ2h0IGFuZ2xlIGFu
ZCBhbmQgYXNwZWN0IHJhdGlvIG9mIDEuMC4KKyAgICAgKiBSZXR1cm5zIHRoZSBTcG90TGlnaHQu
CisgICAgICovCisgICAgU3BvdExpZ2h0LnByb3RvdHlwZS5fc2V0RGVmYXVsdFNoYWRvd1Byb2pl
Y3Rpb25NYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCB2aWV3TWF0cml4LCByZW5kZXJMaXN0KSB7
CisgICAgICAgIHZhciBhY3RpdmVDYW1lcmEgPSB0aGlzLmdldFNjZW5lKCkuYWN0aXZlQ2FtZXJh
OworICAgICAgICBpZiAoIWFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX3NoYWRvd0FuZ2xlU2NhbGUgPSB0aGlzLl9zaGFkb3dBbmds
ZVNjYWxlIHx8IDE7CisgICAgICAgIHZhciBhbmdsZSA9IHRoaXMuX3NoYWRvd0FuZ2xlU2NhbGUg
KiB0aGlzLl9hbmdsZTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLlBlcnNwZWN0aXZlRm92TEhUb1JlZihhbmdsZSwgMS4w
LCB0aGlzLmdldERlcHRoTWluWihhY3RpdmVDYW1lcmEpLCB0aGlzLmdldERlcHRoTWF4WihhY3Rp
dmVDYW1lcmEpLCBtYXRyaXgpOworICAgIH07CisgICAgU3BvdExpZ2h0LnByb3RvdHlwZS5fY29t
cHV0ZVByb2plY3Rpb25UZXh0dXJlVmlld0xpZ2h0TWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVZpZXdMaWdodERpcnR5ID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX3Byb2plY3Rpb25UZXh0dXJlRGlydHkgPSB0cnVlOworICAgICAgICB0aGlzLnBv
c2l0aW9uLmFkZFRvUmVmKHRoaXMuZGlyZWN0aW9uLCB0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVZp
ZXdUYXJnZXRWZWN0b3IpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTWF0cml4Il0uTG9va0F0TEhUb1JlZih0aGlzLnBvc2l0aW9uLCB0
aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVZpZXdUYXJnZXRWZWN0b3IsIHRoaXMuX3Byb2plY3Rpb25U
ZXh0dXJlVXBEaXJlY3Rpb24sIHRoaXMuX3Byb2plY3Rpb25UZXh0dXJlVmlld0xpZ2h0TWF0cml4
KTsKKyAgICB9OworICAgIFNwb3RMaWdodC5wcm90b3R5cGUuX2NvbXB1dGVQcm9qZWN0aW9uVGV4
dHVyZVByb2plY3Rpb25MaWdodE1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5f
cHJvamVjdGlvblRleHR1cmVQcm9qZWN0aW9uTGlnaHREaXJ0eSA9IGZhbHNlOworICAgICAgICB0
aGlzLl9wcm9qZWN0aW9uVGV4dHVyZURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgdmFyIGxpZ2h0X2Zh
ciA9IHRoaXMucHJvamVjdGlvblRleHR1cmVMaWdodEZhcjsKKyAgICAgICAgdmFyIGxpZ2h0X25l
YXIgPSB0aGlzLnByb2plY3Rpb25UZXh0dXJlTGlnaHROZWFyOworICAgICAgICB2YXIgUCA9IGxp
Z2h0X2ZhciAvIChsaWdodF9mYXIgLSBsaWdodF9uZWFyKTsKKyAgICAgICAgdmFyIFEgPSAtUCAq
IGxpZ2h0X25lYXI7CisgICAgICAgIHZhciBTID0gMS4wIC8gTWF0aC50YW4odGhpcy5fYW5nbGUg
LyAyLjApOworICAgICAgICB2YXIgQSA9IDEuMDsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLkZyb21WYWx1ZXNUb1JlZihT
IC8gQSwgMC4wLCAwLjAsIDAuMCwgMC4wLCBTLCAwLjAsIDAuMCwgMC4wLCAwLjAsIFAsIDEuMCwg
MC4wLCAwLjAsIFEsIDAuMCwgdGhpcy5fcHJvamVjdGlvblRleHR1cmVQcm9qZWN0aW9uTGlnaHRN
YXRyaXgpOworICAgIH07CisgICAgLyoqCisgICAgICogTWFpbiBmdW5jdGlvbiBmb3IgbGlnaHQg
dGV4dHVyZSBwcm9qZWN0aW9uIG1hdHJpeCBjb21wdXRpbmcuCisgICAgICovCisgICAgU3BvdExp
Z2h0LnByb3RvdHlwZS5fY29tcHV0ZVByb2plY3Rpb25UZXh0dXJlTWF0cml4ID0gZnVuY3Rpb24g
KCkgeworICAgICAgICB0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZURpcnR5ID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX3Byb2plY3Rpb25UZXh0dXJlVmlld0xpZ2h0TWF0cml4Lm11bHRpcGx5VG9SZWYo
dGhpcy5fcHJvamVjdGlvblRleHR1cmVQcm9qZWN0aW9uTGlnaHRNYXRyaXgsIHRoaXMuX3Byb2pl
Y3Rpb25UZXh0dXJlTWF0cml4KTsKKyAgICAgICAgdGhpcy5fcHJvamVjdGlvblRleHR1cmVNYXRy
aXgubXVsdGlwbHlUb1JlZih0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVNjYWxpbmdNYXRyaXgsIHRo
aXMuX3Byb2plY3Rpb25UZXh0dXJlTWF0cml4KTsKKyAgICB9OworICAgIFNwb3RMaWdodC5wcm90
b3R5cGUuX2J1aWxkVW5pZm9ybUxheW91dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5f
dW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2TGlnaHREYXRhIiwgNCk7CisgICAgICAgIHRoaXMu
X3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidkxpZ2h0RGlmZnVzZSIsIDQpOworICAgICAgICB0
aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZMaWdodFNwZWN1bGFyIiwgMyk7CisgICAg
ICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidkxpZ2h0RGlyZWN0aW9uIiwgMyk7
CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidkxpZ2h0RmFsbG9mZiIs
IDQpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInNoYWRvd3NJbmZv
IiwgMyk7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgiZGVwdGhWYWx1
ZXMiLCAyKTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5jcmVhdGUoKTsKKyAgICB9Owor
ICAgIFNwb3RMaWdodC5wcm90b3R5cGUuX2NvbXB1dGVBbmdsZVZhbHVlcyA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdGhpcy5fbGlnaHRBbmdsZVNjYWxlID0gMS4wIC8gTWF0aC5tYXgoMC4wMDEs
IChNYXRoLmNvcyh0aGlzLl9pbm5lckFuZ2xlICogMC41KSAtIHRoaXMuX2Nvc0hhbGZBbmdsZSkp
OworICAgICAgICB0aGlzLl9saWdodEFuZ2xlT2Zmc2V0ID0gLXRoaXMuX2Nvc0hhbGZBbmdsZSAq
IHRoaXMuX2xpZ2h0QW5nbGVTY2FsZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IHBhc3NlZCBFZmZlY3Qgb2JqZWN0IHdpdGggdGhlIFNwb3RMaWdodCB0cmFuc2ZvbWVkIHBvc2l0
aW9uIChvciBwb3NpdGlvbiBpZiBub3QgcGFyZW50ZWQpIGFuZCBub3JtYWxpemVkIGRpcmVjdGlv
bi4KKyAgICAgKiBAcGFyYW0gZWZmZWN0IFRoZSBlZmZlY3QgdG8gdXBkYXRlCisgICAgICogQHBh
cmFtIGxpZ2h0SW5kZXggVGhlIGluZGV4IG9mIHRoZSBsaWdodCBpbiB0aGUgZWZmZWN0IHRvIHVw
ZGF0ZQorICAgICAqIEByZXR1cm5zIFRoZSBzcG90IGxpZ2h0CisgICAgICovCisgICAgU3BvdExp
Z2h0LnByb3RvdHlwZS50cmFuc2ZlclRvRWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCwgbGlnaHRJ
bmRleCkgeworICAgICAgICB2YXIgbm9ybWFsaXplRGlyZWN0aW9uOworICAgICAgICBpZiAodGhp
cy5jb21wdXRlVHJhbnNmb3JtZWRJbmZvcm1hdGlvbigpKSB7CisgICAgICAgICAgICB0aGlzLl91
bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgidkxpZ2h0RGF0YSIsIHRoaXMudHJhbnNmb3JtZWRQ
b3NpdGlvbi54LCB0aGlzLnRyYW5zZm9ybWVkUG9zaXRpb24ueSwgdGhpcy50cmFuc2Zvcm1lZFBv
c2l0aW9uLnosIHRoaXMuZXhwb25lbnQsIGxpZ2h0SW5kZXgpOworICAgICAgICAgICAgbm9ybWFs
aXplRGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlZlY3RvcjMiXS5Ob3JtYWxpemUodGhpcy50cmFuc2Zvcm1lZERpcmVjdGlvbik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVy
LnVwZGF0ZUZsb2F0NCgidkxpZ2h0RGF0YSIsIHRoaXMucG9zaXRpb24ueCwgdGhpcy5wb3NpdGlv
bi55LCB0aGlzLnBvc2l0aW9uLnosIHRoaXMuZXhwb25lbnQsIGxpZ2h0SW5kZXgpOworICAgICAg
ICAgICAgbm9ybWFsaXplRGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5Ob3JtYWxpemUodGhpcy5kaXJlY3Rpb24pOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmdldFNjZW5lKCkudXNlUmlnaHRIYW5kZWRTeXN0
ZW0pIHsKKyAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQ0KCJ2TGln
aHREaXJlY3Rpb24iLCAtbm9ybWFsaXplRGlyZWN0aW9uLngsIC1ub3JtYWxpemVEaXJlY3Rpb24u
eSwgLW5vcm1hbGl6ZURpcmVjdGlvbi56LCB0aGlzLl9jb3NIYWxmQW5nbGUsIGxpZ2h0SW5kZXgp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1
ZmZlci51cGRhdGVGbG9hdDQoInZMaWdodERpcmVjdGlvbiIsIG5vcm1hbGl6ZURpcmVjdGlvbi54
LCBub3JtYWxpemVEaXJlY3Rpb24ueSwgbm9ybWFsaXplRGlyZWN0aW9uLnosIHRoaXMuX2Nvc0hh
bGZBbmdsZSwgbGlnaHRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1
ZmZlci51cGRhdGVGbG9hdDQoInZMaWdodEZhbGxvZmYiLCB0aGlzLnJhbmdlLCB0aGlzLl9pbnZl
cnNlU3F1YXJlZFJhbmdlLCB0aGlzLl9saWdodEFuZ2xlU2NhbGUsIHRoaXMuX2xpZ2h0QW5nbGVP
ZmZzZXQsIGxpZ2h0SW5kZXgpOworICAgICAgICBpZiAodGhpcy5wcm9qZWN0aW9uVGV4dHVyZSAm
JiB0aGlzLnByb2plY3Rpb25UZXh0dXJlLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuX3Byb2plY3Rpb25UZXh0dXJlVmlld0xpZ2h0RGlydHkpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9jb21wdXRlUHJvamVjdGlvblRleHR1cmVWaWV3TGlnaHRNYXRyaXgoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVByb2plY3Rpb25M
aWdodERpcnR5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY29tcHV0ZVByb2plY3Rpb25UZXh0
dXJlUHJvamVjdGlvbkxpZ2h0TWF0cml4KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodGhpcy5fcHJvamVjdGlvblRleHR1cmVEaXJ0eSkgeworICAgICAgICAgICAgICAgIHRoaXMu
X2NvbXB1dGVQcm9qZWN0aW9uVGV4dHVyZU1hdHJpeCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWZmZWN0LnNldE1hdHJpeCgidGV4dHVyZVByb2plY3Rpb25NYXRyaXgiICsgbGlnaHRJ
bmRleCwgdGhpcy5fcHJvamVjdGlvblRleHR1cmVNYXRyaXgpOworICAgICAgICAgICAgZWZmZWN0
LnNldFRleHR1cmUoInByb2plY3Rpb25MaWdodFNhbXBsZXIiICsgbGlnaHRJbmRleCwgdGhpcy5w
cm9qZWN0aW9uVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICBTcG90TGlnaHQucHJvdG90eXBlLnRyYW5zZmVyVG9Ob2RlTWF0ZXJpYWxFZmZlY3Qg
PSBmdW5jdGlvbiAoZWZmZWN0LCBsaWdodERhdGFVbmlmb3JtTmFtZSkgeworICAgICAgICB2YXIg
bm9ybWFsaXplRGlyZWN0aW9uOworICAgICAgICBpZiAodGhpcy5jb21wdXRlVHJhbnNmb3JtZWRJ
bmZvcm1hdGlvbigpKSB7CisgICAgICAgICAgICBub3JtYWxpemVEaXJlY3Rpb24gPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLk5vcm1h
bGl6ZSh0aGlzLnRyYW5zZm9ybWVkRGlyZWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIG5vcm1hbGl6ZURpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uTm9ybWFsaXplKHRoaXMuZGly
ZWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5nZXRTY2VuZSgpLnVzZVJpZ2h0
SGFuZGVkU3lzdGVtKSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQzKGxpZ2h0RGF0YVVu
aWZvcm1OYW1lLCAtbm9ybWFsaXplRGlyZWN0aW9uLngsIC1ub3JtYWxpemVEaXJlY3Rpb24ueSwg
LW5vcm1hbGl6ZURpcmVjdGlvbi56KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGVmZmVjdC5zZXRGbG9hdDMobGlnaHREYXRhVW5pZm9ybU5hbWUsIG5vcm1hbGl6ZURp
cmVjdGlvbi54LCBub3JtYWxpemVEaXJlY3Rpb24ueSwgbm9ybWFsaXplRGlyZWN0aW9uLnopOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICog
RGlzcG9zZXMgdGhlIGxpZ2h0IGFuZCB0aGUgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgICAgICov
CisgICAgU3BvdExpZ2h0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMu
X3Byb2plY3Rpb25UZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uVGV4dHVy
ZS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFByZXBhcmVz
IHRoZSBsaXN0IG9mIGRlZmluZXMgc3BlY2lmaWMgdG8gdGhlIGxpZ2h0IHR5cGUuCisgICAgICog
QHBhcmFtIGRlZmluZXMgdGhlIGxpc3Qgb2YgZGVmaW5lcworICAgICAqIEBwYXJhbSBsaWdodElu
ZGV4IGRlZmluZXMgdGhlIGluZGV4IG9mIHRoZSBsaWdodCBmb3IgdGhlIGVmZmVjdAorICAgICAq
LworICAgIFNwb3RMaWdodC5wcm90b3R5cGUucHJlcGFyZUxpZ2h0U3BlY2lmaWNEZWZpbmVzID0g
ZnVuY3Rpb24gKGRlZmluZXMsIGxpZ2h0SW5kZXgpIHsKKyAgICAgICAgZGVmaW5lc1siU1BPVExJ
R0hUIiArIGxpZ2h0SW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgZGVmaW5lc1siUFJPSkVDVEVETElH
SFRURVhUVVJFIiArIGxpZ2h0SW5kZXhdID0gdGhpcy5wcm9qZWN0aW9uVGV4dHVyZSAmJiB0aGlz
LnByb2plY3Rpb25UZXh0dXJlLmlzUmVhZHkoKSA/IHRydWUgOiBmYWxzZTsKKyAgICB9OworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3BvdExpZ2h0LnByb3RvdHlwZSwgImFuZ2xlIiwgbnVs
bCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTcG90TGlnaHQucHJvdG90eXBlLCAiaW5u
ZXJBbmdsZSIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3BvdExpZ2h0LnBy
b3RvdHlwZSwgInNoYWRvd0FuZ2xlU2NhbGUiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIFNwb3RMaWdodC5wcm90b3R5cGUsICJleHBvbmVudCIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplIl0pKCkKKyAgICBdLCBTcG90TGlnaHQucHJvdG90eXBlLCAicHJvamVjdGlvblRleHR1
cmVMaWdodE5lYXIiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFNwb3RMaWdo
dC5wcm90b3R5cGUsICJwcm9qZWN0aW9uVGV4dHVyZUxpZ2h0RmFyIiwgbnVsbCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplIl0pKCkKKyAgICBdLCBTcG90TGlnaHQucHJvdG90eXBlLCAicHJvamVjdGlvblRleHR1
cmVVcERpcmVjdGlvbiIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgicHJvamVj
dGVkTGlnaHRUZXh0dXJlIikKKyAgICBdLCBTcG90TGlnaHQucHJvdG90eXBlLCAiX3Byb2plY3Rp
b25UZXh0dXJlIiwgdm9pZCAwKTsKKyAgICByZXR1cm4gU3BvdExpZ2h0OworfShfc2hhZG93TGln
aHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2hhZG93TGlnaHQiXSkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0xvYWRpbmcvUGx1Z2lucy9iYWJ5bG9uRmlsZUxvYWRlci50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9Mb2FkaW5nL1BsdWdpbnMvYmFieWxvbkZpbGVMb2FkZXIudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBfQmFieWxvbkxvYWRlclJlZ2lzdGVyZWQgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiX0JhYnlsb25Mb2FkZXJSZWdpc3RlcmVkIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfQmFieWxvbkxvYWRlclJlZ2lzdGVyZWQ7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVy
YXMvY2FtZXJhICovICIuL0NhbWVyYXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9tZXNoICov
ICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19n
ZW9tZXRyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vTWVzaGVzL2dlb21ldHJ5ICovICIuL01lc2hlcy9nZW9tZXRyeS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVz
L3RyYW5zZm9ybU5vZGUgKi8gIi4vTWVzaGVzL3RyYW5zZm9ybU5vZGUudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvbWF0ZXJp
YWwgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19tdWx0aU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvbXVsdGlNYXRlcmlhbCAq
LyAiLi9NYXRlcmlhbHMvbXVsdGlNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfY3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9UZXh0dXJl
cy9jdWJlVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvY3ViZVRleHR1cmUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2hkckN1YmVUZXh0
dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2hkckN1YmVUZXh0dXJlICovICIuL01hdGVyaWFs
cy9UZXh0dXJlcy9oZHJDdWJlVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9BbmltYXRpb25zX2FuaW1hdGlvbkdyb3VwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQW5pbWF0aW9ucy9hbmltYXRpb25Hcm91
cCAqLyAiLi9BbmltYXRpb25zL2FuaW1hdGlvbkdyb3VwLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0xpZ2h0c19saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0xpZ2h0cy9saWdodCAqLyAiLi9MaWdodHMvbGln
aHQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9z
Y2VuZUNvbXBvbmVudCAqLyAiLi9zY2VuZUNvbXBvbmVudC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTG9hZGluZy9zY2VuZUxvYWRlciAq
LyAiLi9Mb2FkaW5nL3NjZW5lTG9hZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9hYnN0cmFjdFNjZW5lICovICIuL2Fic3RyYWN0U2NlbmUudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXNzZXRDb250YWluZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9hc3NldENv
bnRhaW5lciAqLyAiLi9hc3NldENvbnRhaW5lci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9BY3Rpb25zX2FjdGlvbk1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9BY3Rpb25zL2FjdGlvbk1hbmFnZXIgKi8g
Ii4vQWN0aW9ucy9hY3Rpb25NYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0JvbmVzX3NrZWxldG9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vQm9uZXMvc2tlbGV0b24gKi8gIi4vQm9uZXMvc2tlbGV0b24u
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTW9ycGhfbW9ycGhUYXJnZXRNYW5hZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTW9ycGgvbW9ycGhUYXJnZXRNYW5hZ2VyICovICIuL01vcnBoL21vcnBoVGFyZ2V0TWFu
YWdlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9QaHlzaWNzX1BsdWdpbnNfY2Fu
bm9uSlNQbHVnaW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9QaHlzaWNzL1BsdWdpbnMvY2Fubm9uSlNQbHVnaW4gKi8gIi4vUGh5
c2ljcy9QbHVnaW5zL2Nhbm5vbkpTUGx1Z2luLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1BoeXNpY3NfUGx1Z2luc19vaW1vSlNQbHVnaW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9QaHlzaWNzL1BsdWdpbnMvb2lt
b0pTUGx1Z2luICovICIuL1BoeXNpY3MvUGx1Z2lucy9vaW1vSlNQbHVnaW4udHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfUGh5c2ljc19QbHVnaW5zX2FtbW9KU1BsdWdpbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL1Bo
eXNpY3MvUGx1Z2lucy9hbW1vSlNQbHVnaW4gKi8gIi4vUGh5c2ljcy9QbHVnaW5zL2FtbW9KU1Bs
dWdpbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qcm9iZXNfcmVmbGVjdGlvblBy
b2JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vUHJvYmVzL3JlZmxlY3Rpb25Qcm9iZSAqLyAiLi9Qcm9iZXMvcmVmbGVjdGlvblBy
b2JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3N0cmluZ1Rvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlz
Yy9zdHJpbmdUb29scyAqLyAiLi9NaXNjL3N0cmluZ1Rvb2xzLnRzIik7CisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisvKiogQGhpZGRlbiAqLwor
dmFyIF9CYWJ5bG9uTG9hZGVyUmVnaXN0ZXJlZCA9IHRydWU7Cit2YXIgcGFyc2VNYXRlcmlhbEJ5
SWQgPSBmdW5jdGlvbiAoaWQsIHBhcnNlZERhdGEsIHNjZW5lLCByb290VXJsKSB7CisgICAgZm9y
ICh2YXIgaW5kZXggPSAwLCBjYWNoZSA9IHBhcnNlZERhdGEubWF0ZXJpYWxzLmxlbmd0aDsgaW5k
ZXggPCBjYWNoZTsgaW5kZXgrKykgeworICAgICAgICB2YXIgcGFyc2VkTWF0ZXJpYWwgPSBwYXJz
ZWREYXRhLm1hdGVyaWFsc1tpbmRleF07CisgICAgICAgIGlmIChwYXJzZWRNYXRlcmlhbC5pZCA9
PT0gaWQpIHsKKyAgICAgICAgICAgIHJldHVybiBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsIl0uUGFyc2UocGFyc2VkTWF0ZXJpYWwsIHNj
ZW5lLCByb290VXJsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbDsKK307Cit2
YXIgaXNEZXNjZW5kYW50T2YgPSBmdW5jdGlvbiAobWVzaCwgbmFtZXMsIGhpZXJhcmNoeUlkcykg
eworICAgIGZvciAodmFyIGkgaW4gbmFtZXMpIHsKKyAgICAgICAgaWYgKG1lc2gubmFtZSA9PT0g
bmFtZXNbaV0pIHsKKyAgICAgICAgICAgIGhpZXJhcmNoeUlkcy5wdXNoKG1lc2guaWQpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1lc2gucGFy
ZW50SWQgJiYgaGllcmFyY2h5SWRzLmluZGV4T2YobWVzaC5wYXJlbnRJZCkgIT09IC0xKSB7Cisg
ICAgICAgIGhpZXJhcmNoeUlkcy5wdXNoKG1lc2guaWQpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfTsKK3ZhciBsb2dPcGVyYXRpb24gPSBmdW5jdGlv
biAob3BlcmF0aW9uLCBwcm9kdWNlcikgeworICAgIHJldHVybiBvcGVyYXRpb24gKyAiIG9mICIg
KyAocHJvZHVjZXIgPyBwcm9kdWNlci5maWxlICsgIiBmcm9tICIgKyBwcm9kdWNlci5uYW1lICsg
IiB2ZXJzaW9uOiAiICsgcHJvZHVjZXIudmVyc2lvbiArICIsIGV4cG9ydGVyIHZlcnNpb246ICIg
KyBwcm9kdWNlci5leHBvcnRlcl92ZXJzaW9uIDogInVua25vd24iKTsKK307Cit2YXIgbG9hZERl
dGFpbExldmVscyA9IGZ1bmN0aW9uIChzY2VuZSwgbWVzaCkgeworICAgIHZhciBtYXN0ZXJtZXNo
ID0gbWVzaDsKKyAgICAvLyBFdmVyeSB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIGlkcyBhcnJheSBv
ZiB0aGUgbG9kIGRhdGEgcG9pbnRzIHRvIGFub3RoZXIgbWVzaCB3aGljaCBzaG91bGQgYmUgdXNl
ZCBhcyB0aGUgbG93ZXIgTE9EIGxldmVsLgorICAgIC8vIFRoZSBkaXN0YW5jZXMgKG9yIGNvdmVy
YWdlcykgYXJyYXkgdmFsdWVzIHNwZWNpZmllZCBhcmUgdXNlZCBhbG9uZyB3aXRoIHRoZSBsb2Qg
bWVzaCBpZHMgYXMgYSBoaW50IHRvIGRldGVybWluZSB0aGUgc3dpdGNoaW5nIHRocmVzaG9sZCBm
b3IgdGhlIHZhcmlvdXMgTE9Ecy4KKyAgICBpZiAobWVzaC5fd2FpdGluZ0RhdGEubG9kcykgewor
ICAgICAgICBpZiAobWVzaC5fd2FpdGluZ0RhdGEubG9kcy5pZHMgJiYgbWVzaC5fd2FpdGluZ0Rh
dGEubG9kcy5pZHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdmFyIGxvZG1lc2hlcyA9IG1l
c2guX3dhaXRpbmdEYXRhLmxvZHMuaWRzOworICAgICAgICAgICAgdmFyIHdhc2VuYWJsZWQgPSBt
YXN0ZXJtZXNoLmlzRW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICBpZiAobWVzaC5fd2FpdGlu
Z0RhdGEubG9kcy5kaXN0YW5jZXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2VzID0g
bWVzaC5fd2FpdGluZ0RhdGEubG9kcy5kaXN0YW5jZXM7CisgICAgICAgICAgICAgICAgaWYgKGRp
c3RhbmNlcy5sZW5ndGggPj0gbG9kbWVzaGVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgY3VsbGluZyA9IChkaXN0YW5jZXMubGVuZ3RoID4gbG9kbWVzaGVzLmxlbmd0aCkgPyBk
aXN0YW5jZXNbZGlzdGFuY2VzLmxlbmd0aCAtIDFdIDogMDsKKyAgICAgICAgICAgICAgICAgICAg
bWFzdGVybWVzaC5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IGxvZG1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBsb2RpZCA9IGxvZG1lc2hlc1tpbmRleF07CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgbG9kbWVzaCA9IHNjZW5lLmdldE1lc2hCeUlEKGxvZGlkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2RtZXNoICE9IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXN0ZXJtZXNoLmFkZExPRExldmVsKGRpc3RhbmNlc1tpbmRl
eF0sIGxvZG1lc2gpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChjdWxsaW5nID4gMCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbWFzdGVybWVzaC5hZGRMT0RMZXZlbChjdWxsaW5nLCBudWxsKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAod2FzZW5hYmxlZCA9
PT0gdHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVybWVzaC5zZXRFbmFibGVk
KHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjVfX1siVG9vbHMiXS5XYXJuKCJJbnZhbGlkIGxldmVsIG9mIGRl
dGFpbCBkaXN0YW5jZXMgZm9yICIgKyBtZXNoLm5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtZXNoLl93YWl0aW5nRGF0YS5sb2RzID0g
bnVsbDsKKyAgICB9Cit9OwordmFyIGxvYWRBc3NldENvbnRhaW5lciA9IGZ1bmN0aW9uIChzY2Vu
ZSwgZGF0YSwgcm9vdFVybCwgb25FcnJvciwgYWRkVG9TY2VuZSkgeworICAgIGlmIChhZGRUb1Nj
ZW5lID09PSB2b2lkIDApIHsgYWRkVG9TY2VuZSA9IGZhbHNlOyB9CisgICAgdmFyIGNvbnRhaW5l
ciA9IG5ldyBfYXNzZXRDb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkFz
c2V0Q29udGFpbmVyIl0oc2NlbmUpOworICAgIC8vIEVudGlyZSBtZXRob2QgcnVubmluZyBpbiB0
cnkgYmxvY2ssIHNvIEFMV0FZUyBsb2dzIGFzIGZhciBhcyBpdCBnb3QsIG9ubHkgYWN0dWFsbHkg
d3JpdGVzIGRldGFpbHMKKyAgICAvLyB3aGVuIFNjZW5lTG9hZGVyLmRlYnVnTG9nZ2luZyA9IHRy
dWUgKGRlZmF1bHQpLCBvciBleGNlcHRpb24gZW5jb3VudGVyZWQuCisgICAgLy8gRXZlcnl0aGlu
ZyBzdG9yZWQgaW4gdmFyIGxvZyBpbnN0ZWFkIG9mIHdyaXRpbmcgc2VwYXJhdGUgbGluZXMgdG8g
c3VwcG9ydCBvbmx5IHdyaXRpbmcgaW4gZXhjZXB0aW9uLAorICAgIC8vIGFuZCBhdm9pZCBwcm9i
bGVtcyB3aXRoIG11bHRpcGxlIGNvbmN1cnJlbnQgLmJhYnlsb24gbG9hZHMuCisgICAgdmFyIGxv
ZyA9ICJpbXBvcnRTY2VuZSBoYXMgZmFpbGVkIEpTT04gcGFyc2UiOworICAgIHRyeSB7CisgICAg
ICAgIHZhciBwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKKyAgICAgICAgbG9nID0gIiI7
CisgICAgICAgIHZhciBmdWxsRGV0YWlscyA9IF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xNF9fWyJTY2VuZUxvYWRlciJdLmxvZ2dpbmdMZXZlbCA9PT0gX0xv
YWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlNjZW5lTG9h
ZGVyIl0uREVUQUlMRURfTE9HR0lORzsKKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICB2YXIg
Y2FjaGU7CisgICAgICAgIC8vIEVudmlyb25tZW50IHRleHR1cmUKKyAgICAgICAgaWYgKHBhcnNl
ZERhdGEuZW52aXJvbm1lbnRUZXh0dXJlICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkRGF0YS5lbnZp
cm9ubWVudFRleHR1cmUgIT09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFBCUiBuZWVkZWQgZm9y
IGJvdGggSERSIHRleHR1cmUgKGdhbW1hIHNwYWNlKSAmIGEgc2t5IGJveAorICAgICAgICAgICAg
dmFyIGlzUEJSID0gcGFyc2VkRGF0YS5pc1BCUiAhPT0gdW5kZWZpbmVkID8gcGFyc2VkRGF0YS5p
c1BCUiA6IHRydWU7CisgICAgICAgICAgICBpZiAocGFyc2VkRGF0YS5lbnZpcm9ubWVudFRleHR1
cmVUeXBlICYmIHBhcnNlZERhdGEuZW52aXJvbm1lbnRUZXh0dXJlVHlwZSA9PT0gIkJBQllMT04u
SERSQ3ViZVRleHR1cmUiKSB7CisgICAgICAgICAgICAgICAgdmFyIGhkclNpemUgPSAocGFyc2Vk
RGF0YS5lbnZpcm9ubWVudFRleHR1cmVTaXplKSA/IHBhcnNlZERhdGEuZW52aXJvbm1lbnRUZXh0
dXJlU2l6ZSA6IDEyODsKKyAgICAgICAgICAgICAgICB2YXIgaGRyVGV4dHVyZSA9IG5ldyBfTWF0
ZXJpYWxzX1RleHR1cmVzX2hkckN1YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fWyJIRFJDdWJlVGV4dHVyZSJdKChwYXJzZWREYXRhLmVudmlyb25tZW50VGV4dHVyZS5tYXRj
aCgvaHR0cHM/OlwvXC8vZykgPyAiIiA6IHJvb3RVcmwpICsgcGFyc2VkRGF0YS5lbnZpcm9ubWVu
dFRleHR1cmUsIHNjZW5lLCBoZHJTaXplLCB0cnVlLCAhaXNQQlIpOworICAgICAgICAgICAgICAg
IGlmIChwYXJzZWREYXRhLmVudmlyb25tZW50VGV4dHVyZVJvdGF0aW9uWSkgeworICAgICAgICAg
ICAgICAgICAgICBoZHJUZXh0dXJlLnJvdGF0aW9uWSA9IHBhcnNlZERhdGEuZW52aXJvbm1lbnRU
ZXh0dXJlUm90YXRpb25ZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzY2Vu
ZS5lbnZpcm9ubWVudFRleHR1cmUgPSBoZHJUZXh0dXJlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKF9NaXNjX3N0cmluZ1Rvb2xzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fWyJTdHJpbmdUb29scyJdLkVuZHNXaXRoKHBhcnNlZERh
dGEuZW52aXJvbm1lbnRUZXh0dXJlLCAiLmVudiIpKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBjb21wcmVzc2VkVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2N1YmVUZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkN1YmVUZXh0dXJlIl0oKHBhcnNlZERhdGEu
ZW52aXJvbm1lbnRUZXh0dXJlLm1hdGNoKC9odHRwcz86XC9cLy9nKSA/ICIiIDogcm9vdFVybCkg
KyBwYXJzZWREYXRhLmVudmlyb25tZW50VGV4dHVyZSwgc2NlbmUpOworICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyc2VkRGF0YS5lbnZpcm9ubWVudFRleHR1cmVSb3RhdGlvblkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWRUZXh0dXJlLnJvdGF0aW9uWSA9IHBhcnNlZERh
dGEuZW52aXJvbm1lbnRUZXh0dXJlUm90YXRpb25ZOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHNjZW5lLmVudmlyb25tZW50VGV4dHVyZSA9IGNvbXByZXNzZWRU
ZXh0dXJlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGN1YmVUZXh0dXJlID0gX01hdGVyaWFsc19UZXh0dXJlc19jdWJl
VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJDdWJlVGV4dHVyZSJdLkNyZWF0
ZUZyb21QcmVmaWx0ZXJlZERhdGEoKHBhcnNlZERhdGEuZW52aXJvbm1lbnRUZXh0dXJlLm1hdGNo
KC9odHRwcz86XC9cLy9nKSA/ICIiIDogcm9vdFVybCkgKyBwYXJzZWREYXRhLmVudmlyb25tZW50
VGV4dHVyZSwgc2NlbmUpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkRGF0YS5lbnZp
cm9ubWVudFRleHR1cmVSb3RhdGlvblkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1YmVU
ZXh0dXJlLnJvdGF0aW9uWSA9IHBhcnNlZERhdGEuZW52aXJvbm1lbnRUZXh0dXJlUm90YXRpb25Z
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLmVudmly
b25tZW50VGV4dHVyZSA9IGN1YmVUZXh0dXJlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWREYXRhLmNyZWF0ZURlZmF1bHRTa3lib3ggPT09
IHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgc2t5Ym94U2NhbGUgPSAoc2NlbmUuYWN0aXZl
Q2FtZXJhICE9PSB1bmRlZmluZWQgJiYgc2NlbmUuYWN0aXZlQ2FtZXJhICE9PSBudWxsKSA/IChz
Y2VuZS5hY3RpdmVDYW1lcmEubWF4WiAtIHNjZW5lLmFjdGl2ZUNhbWVyYS5taW5aKSAvIDIgOiAx
MDAwOworICAgICAgICAgICAgICAgIHZhciBza3lib3hCbHVyTGV2ZWwgPSBwYXJzZWREYXRhLnNr
eWJveEJsdXJMZXZlbCB8fCAwOworICAgICAgICAgICAgICAgIHNjZW5lLmNyZWF0ZURlZmF1bHRT
a3lib3goc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlLCBpc1BCUiwgc2t5Ym94U2NhbGUsIHNreWJv
eEJsdXJMZXZlbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250YWluZXIuZW52aXJv
bm1lbnRUZXh0dXJlID0gc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlOworICAgICAgICB9CisgICAg
ICAgIC8vIEVudmlyb25tZW50IEludGVuc2l0eQorICAgICAgICBpZiAocGFyc2VkRGF0YS5lbnZp
cm9ubWVudEludGVuc2l0eSAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEuZW52aXJvbm1lbnRJ
bnRlbnNpdHkgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHNjZW5lLmVudmlyb25tZW50SW50ZW5z
aXR5ID0gcGFyc2VkRGF0YS5lbnZpcm9ubWVudEludGVuc2l0eTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBMaWdodHMKKyAgICAgICAgaWYgKHBhcnNlZERhdGEubGlnaHRzICE9PSB1bmRlZmluZWQg
JiYgcGFyc2VkRGF0YS5saWdodHMgIT09IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXgg
PSAwLCBjYWNoZSA9IHBhcnNlZERhdGEubGlnaHRzLmxlbmd0aDsgaW5kZXggPCBjYWNoZTsgaW5k
ZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBwYXJzZWRMaWdodCA9IHBhcnNlZERhdGEubGln
aHRzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgbGlnaHQgPSBfTGlnaHRzX2xpZ2h0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJMaWdodCJdLlBhcnNlKHBhcnNlZExpZ2h0LCBz
Y2VuZSk7CisgICAgICAgICAgICAgICAgaWYgKGxpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRhaW5lci5saWdodHMucHVzaChsaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGxvZyAr
PSAoaW5kZXggPT09IDAgPyAiXG5cdExpZ2h0czoiIDogIiIpOworICAgICAgICAgICAgICAgICAg
ICBsb2cgKz0gIlxuXHRcdCIgKyBsaWdodC50b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFJlZmxlY3Rp
b24gcHJvYmVzCisgICAgICAgIGlmIChwYXJzZWREYXRhLnJlZmxlY3Rpb25Qcm9iZXMgIT09IHVu
ZGVmaW5lZCAmJiBwYXJzZWREYXRhLnJlZmxlY3Rpb25Qcm9iZXMgIT09IG51bGwpIHsKKyAgICAg
ICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHBhcnNlZERhdGEucmVmbGVjdGlvblByb2Jl
cy5sZW5ndGg7IGluZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
cGFyc2VkUmVmbGVjdGlvblByb2JlID0gcGFyc2VkRGF0YS5yZWZsZWN0aW9uUHJvYmVzW2luZGV4
XTsKKyAgICAgICAgICAgICAgICB2YXIgcmVmbGVjdGlvblByb2JlID0gX1Byb2Jlc19yZWZsZWN0
aW9uUHJvYmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19bIlJlZmxlY3Rpb25Qcm9iZSJd
LlBhcnNlKHBhcnNlZFJlZmxlY3Rpb25Qcm9iZSwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICAg
ICAgICAgIGlmIChyZWZsZWN0aW9uUHJvYmUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGFp
bmVyLnJlZmxlY3Rpb25Qcm9iZXMucHVzaChyZWZsZWN0aW9uUHJvYmUpOworICAgICAgICAgICAg
ICAgICAgICBsb2cgKz0gKGluZGV4ID09PSAwID8gIlxuXHRSZWZsZWN0aW9uIFByb2JlczoiIDog
IiIpOworICAgICAgICAgICAgICAgICAgICBsb2cgKz0gIlxuXHRcdCIgKyByZWZsZWN0aW9uUHJv
YmUudG9TdHJpbmcoZnVsbERldGFpbHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIGlmIChwYXJzZWRE
YXRhLmFuaW1hdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLmFuaW1hdGlvbnMgIT09
IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHBhcnNlZERhdGEu
YW5pbWF0aW9ucy5sZW5ndGg7IGluZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAgICAgICAgICAg
ICAgICB2YXIgcGFyc2VkQW5pbWF0aW9uID0gcGFyc2VkRGF0YS5hbmltYXRpb25zW2luZGV4XTsK
KyAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxDbGFzcyA9IF9NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX1siX1R5cGVTdG9yZSJdLkdldENsYXNzKCJCQUJZTE9O
LkFuaW1hdGlvbiIpOworICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbENsYXNzKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSBpbnRlcm5hbENsYXNzLlBhcnNlKHBhcnNl
ZEFuaW1hdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLmFuaW1hdGlvbnMucHVzaChh
bmltYXRpb24pOworICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYW5pbWF0aW9ucy5wdXNo
KGFuaW1hdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGxvZyArPSAoaW5kZXggPT09IDAgPyAi
XG5cdEFuaW1hdGlvbnM6IiA6ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgbG9nICs9ICJcblx0
XHQiICsgYW5pbWF0aW9uLnRvU3RyaW5nKGZ1bGxEZXRhaWxzKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gTWF0ZXJpYWxzCisgICAgICAg
IGlmIChwYXJzZWREYXRhLm1hdGVyaWFscyAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEubWF0
ZXJpYWxzICE9PSBudWxsKSB7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMCwgY2FjaGUgPSBw
YXJzZWREYXRhLm1hdGVyaWFscy5sZW5ndGg7IGluZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgICAgICB2YXIgcGFyc2VkTWF0ZXJpYWwgPSBwYXJzZWREYXRhLm1hdGVyaWFsc1tp
bmRleF07CisgICAgICAgICAgICAgICAgdmFyIG1hdCA9IF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTWF0ZXJpYWwiXS5QYXJzZShwYXJzZWRNYXRlcmlh
bCwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICAgICAgICAgIGlmIChtYXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGFpbmVyLm1hdGVyaWFscy5wdXNoKG1hdCk7CisgICAgICAgICAgICAg
ICAgICAgIGxvZyArPSAoaW5kZXggPT09IDAgPyAiXG5cdE1hdGVyaWFsczoiIDogIiIpOworICAg
ICAgICAgICAgICAgICAgICBsb2cgKz0gIlxuXHRcdCIgKyBtYXQudG9TdHJpbmcoZnVsbERldGFp
bHMpOworICAgICAgICAgICAgICAgICAgICAvLyBUZXh0dXJlcworICAgICAgICAgICAgICAgICAg
ICB2YXIgdGV4dHVyZXMgPSBtYXQuZ2V0QWN0aXZlVGV4dHVyZXMoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZXMuZm9yRWFjaChmdW5jdGlvbiAodCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbnRhaW5lci50ZXh0dXJlcy5pbmRleE9mKHQpID09IC0xKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnRleHR1cmVzLnB1c2godCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkRGF0YS5t
dWx0aU1hdGVyaWFscyAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEubXVsdGlNYXRlcmlhbHMg
IT09IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHBhcnNlZERh
dGEubXVsdGlNYXRlcmlhbHMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHBhcnNlZE11bHRpTWF0ZXJpYWwgPSBwYXJzZWREYXRhLm11bHRpTWF0
ZXJpYWxzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgbW1hdCA9IF9NYXRlcmlhbHNfbXVs
dGlNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJNdWx0aU1hdGVyaWFsIl0u
UGFyc2VNdWx0aU1hdGVyaWFsKHBhcnNlZE11bHRpTWF0ZXJpYWwsIHNjZW5lKTsKKyAgICAgICAg
ICAgICAgICBjb250YWluZXIubXVsdGlNYXRlcmlhbHMucHVzaChtbWF0KTsKKyAgICAgICAgICAg
ICAgICBsb2cgKz0gKGluZGV4ID09PSAwID8gIlxuXHRNdWx0aU1hdGVyaWFsczoiIDogIiIpOwor
ICAgICAgICAgICAgICAgIGxvZyArPSAiXG5cdFx0IiArIG1tYXQudG9TdHJpbmcoZnVsbERldGFp
bHMpOworICAgICAgICAgICAgICAgIC8vIFRleHR1cmVzCisgICAgICAgICAgICAgICAgdmFyIHRl
eHR1cmVzID0gbW1hdC5nZXRBY3RpdmVUZXh0dXJlcygpOworICAgICAgICAgICAgICAgIHRleHR1
cmVzLmZvckVhY2goZnVuY3Rpb24gKHQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRh
aW5lci50ZXh0dXJlcy5pbmRleE9mKHQpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250YWluZXIudGV4dHVyZXMucHVzaCh0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE1v
cnBoIHRhcmdldHMKKyAgICAgICAgaWYgKHBhcnNlZERhdGEubW9ycGhUYXJnZXRNYW5hZ2VycyAh
PT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEubW9ycGhUYXJnZXRNYW5hZ2VycyAhPT0gbnVsbCkg
eworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHBhcnNlZERhdGEubW9ycGhUYXJn
ZXRNYW5hZ2VyczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
bWFuYWdlckRhdGEgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgY29udGFpbmVyLm1vcnBoVGFy
Z2V0TWFuYWdlcnMucHVzaChfTW9ycGhfbW9ycGhUYXJnZXRNYW5hZ2VyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOV9fWyJNb3JwaFRhcmdldE1hbmFnZXIiXS5QYXJzZShtYW5hZ2VyRGF0YSwg
c2NlbmUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBTa2VsZXRvbnMK
KyAgICAgICAgaWYgKHBhcnNlZERhdGEuc2tlbGV0b25zICE9PSB1bmRlZmluZWQgJiYgcGFyc2Vk
RGF0YS5za2VsZXRvbnMgIT09IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAwLCBj
YWNoZSA9IHBhcnNlZERhdGEuc2tlbGV0b25zLmxlbmd0aDsgaW5kZXggPCBjYWNoZTsgaW5kZXgr
KykgeworICAgICAgICAgICAgICAgIHZhciBwYXJzZWRTa2VsZXRvbiA9IHBhcnNlZERhdGEuc2tl
bGV0b25zW2luZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBfQm9uZXNfc2tl
bGV0b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIlNrZWxldG9uIl0uUGFyc2UocGFy
c2VkU2tlbGV0b24sIHNjZW5lKTsKKyAgICAgICAgICAgICAgICBjb250YWluZXIuc2tlbGV0b25z
LnB1c2goc2tlbGV0b24pOworICAgICAgICAgICAgICAgIGxvZyArPSAoaW5kZXggPT09IDAgPyAi
XG5cdFNrZWxldG9uczoiIDogIiIpOworICAgICAgICAgICAgICAgIGxvZyArPSAiXG5cdFx0IiAr
IHNrZWxldG9uLnRvU3RyaW5nKGZ1bGxEZXRhaWxzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAvLyBHZW9tZXRyaWVzCisgICAgICAgIHZhciBnZW9tZXRyaWVzID0gcGFyc2Vk
RGF0YS5nZW9tZXRyaWVzOworICAgICAgICBpZiAoZ2VvbWV0cmllcyAhPT0gdW5kZWZpbmVkICYm
IGdlb21ldHJpZXMgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBhZGRlZEdlb21ldHJ5ID0g
bmV3IEFycmF5KCk7CisgICAgICAgICAgICAvLyBWZXJ0ZXhEYXRhCisgICAgICAgICAgICB2YXIg
dmVydGV4RGF0YSA9IGdlb21ldHJpZXMudmVydGV4RGF0YTsKKyAgICAgICAgICAgIGlmICh2ZXJ0
ZXhEYXRhICE9PSB1bmRlZmluZWQgJiYgdmVydGV4RGF0YSAhPT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHZlcnRleERhdGEubGVuZ3RoOyBpbmRleCA8
IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZWRWZXJ0ZXhE
YXRhID0gdmVydGV4RGF0YVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgIGFkZGVkR2VvbWV0
cnkucHVzaChfTWVzaGVzX2dlb21ldHJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkdl
b21ldHJ5Il0uUGFyc2UocGFyc2VkVmVydGV4RGF0YSwgc2NlbmUsIHJvb3RVcmwpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRlZEdlb21ldHJ5LmZv
ckVhY2goZnVuY3Rpb24gKGcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZykgeworICAgICAgICAg
ICAgICAgICAgICBjb250YWluZXIuZ2VvbWV0cmllcy5wdXNoKGcpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIC8vIFRyYW5zZm9ybSBub2Rl
cworICAgICAgICBpZiAocGFyc2VkRGF0YS50cmFuc2Zvcm1Ob2RlcyAhPT0gdW5kZWZpbmVkICYm
IHBhcnNlZERhdGEudHJhbnNmb3JtTm9kZXMgIT09IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAo
aW5kZXggPSAwLCBjYWNoZSA9IHBhcnNlZERhdGEudHJhbnNmb3JtTm9kZXMubGVuZ3RoOyBpbmRl
eCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcnNlZFRyYW5zZm9y
bU5vZGUgPSBwYXJzZWREYXRhLnRyYW5zZm9ybU5vZGVzW2luZGV4XTsKKyAgICAgICAgICAgICAg
ICB2YXIgbm9kZSA9IF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fWyJUcmFuc2Zvcm1Ob2RlIl0uUGFyc2UocGFyc2VkVHJhbnNmb3JtTm9kZSwgc2NlbmUs
IHJvb3RVcmwpOworICAgICAgICAgICAgICAgIGNvbnRhaW5lci50cmFuc2Zvcm1Ob2Rlcy5wdXNo
KG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE1lc2hlcworICAg
ICAgICBpZiAocGFyc2VkRGF0YS5tZXNoZXMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLm1l
c2hlcyAhPT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGNhY2hlID0gcGFy
c2VkRGF0YS5tZXNoZXMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHBhcnNlZE1lc2ggPSBwYXJzZWREYXRhLm1lc2hlc1tpbmRleF07CisgICAg
ICAgICAgICAgICAgdmFyIG1lc2ggPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siTWVzaCJdLlBhcnNlKHBhcnNlZE1lc2gsIHNjZW5lLCByb290VXJsKTsKKyAgICAg
ICAgICAgICAgICBjb250YWluZXIubWVzaGVzLnB1c2gobWVzaCk7CisgICAgICAgICAgICAgICAg
bG9nICs9IChpbmRleCA9PT0gMCA/ICJcblx0TWVzaGVzOiIgOiAiIik7CisgICAgICAgICAgICAg
ICAgbG9nICs9ICJcblx0XHQiICsgbWVzaC50b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2FtZXJhcworICAgICAgICBpZiAocGFyc2Vk
RGF0YS5jYW1lcmFzICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkRGF0YS5jYW1lcmFzICE9PSBudWxs
KSB7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMCwgY2FjaGUgPSBwYXJzZWREYXRhLmNhbWVy
YXMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFy
IHBhcnNlZENhbWVyYSA9IHBhcnNlZERhdGEuY2FtZXJhc1tpbmRleF07CisgICAgICAgICAgICAg
ICAgdmFyIGNhbWVyYSA9IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJDYW1lcmEiXS5QYXJzZShwYXJzZWRDYW1lcmEsIHNjZW5lKTsKKyAgICAgICAgICAgICAg
ICBjb250YWluZXIuY2FtZXJhcy5wdXNoKGNhbWVyYSk7CisgICAgICAgICAgICAgICAgbG9nICs9
IChpbmRleCA9PT0gMCA/ICJcblx0Q2FtZXJhczoiIDogIiIpOworICAgICAgICAgICAgICAgIGxv
ZyArPSAiXG5cdFx0IiArIGNhbWVyYS50b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQW5pbWF0aW9uIEdyb3VwcworICAgICAgICBpZiAo
cGFyc2VkRGF0YS5hbmltYXRpb25Hcm91cHMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLmFu
aW1hdGlvbkdyb3VwcyAhPT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGNh
Y2hlID0gcGFyc2VkRGF0YS5hbmltYXRpb25Hcm91cHMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBp
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcnNlZEFuaW1hdGlvbkdyb3VwID0gcGFy
c2VkRGF0YS5hbmltYXRpb25Hcm91cHNbaW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBhbmlt
YXRpb25Hcm91cCA9IF9BbmltYXRpb25zX2FuaW1hdGlvbkdyb3VwX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMV9fWyJBbmltYXRpb25Hcm91cCJdLlBhcnNlKHBhcnNlZEFuaW1hdGlvbkdyb3Vw
LCBzY2VuZSk7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLmFuaW1hdGlvbkdyb3Vwcy5wdXNo
KGFuaW1hdGlvbkdyb3VwKTsKKyAgICAgICAgICAgICAgICBsb2cgKz0gKGluZGV4ID09PSAwID8g
IlxuXHRBbmltYXRpb25Hcm91cHM6IiA6ICIiKTsKKyAgICAgICAgICAgICAgICBsb2cgKz0gIlxu
XHRcdCIgKyBhbmltYXRpb25Hcm91cC50b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQnJvd3NpbmcgYWxsIHRoZSBncmFwaCB0byBjb25u
ZWN0IHRoZSBkb3RzCisgICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHNjZW5lLmNhbWVy
YXMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgY2Ft
ZXJhID0gc2NlbmUuY2FtZXJhc1tpbmRleF07CisgICAgICAgICAgICBpZiAoY2FtZXJhLl93YWl0
aW5nUGFyZW50SWQpIHsKKyAgICAgICAgICAgICAgICBjYW1lcmEucGFyZW50ID0gc2NlbmUuZ2V0
TGFzdEVudHJ5QnlJRChjYW1lcmEuX3dhaXRpbmdQYXJlbnRJZCk7CisgICAgICAgICAgICAgICAg
Y2FtZXJhLl93YWl0aW5nUGFyZW50SWQgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGlu
ZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBsaWdodF8xID0gc2NlbmUu
bGlnaHRzW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChsaWdodF8xICYmIGxpZ2h0XzEuX3dhaXRp
bmdQYXJlbnRJZCkgeworICAgICAgICAgICAgICAgIGxpZ2h0XzEucGFyZW50ID0gc2NlbmUuZ2V0
TGFzdEVudHJ5QnlJRChsaWdodF8xLl93YWl0aW5nUGFyZW50SWQpOworICAgICAgICAgICAgICAg
IGxpZ2h0XzEuX3dhaXRpbmdQYXJlbnRJZCA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgLy8gQ29ubmVjdCBwYXJlbnRzICYgY2hpbGRyZW4gYW5kIHBhcnNlIGFjdGlv
bnMgYW5kIGxvZHMKKyAgICAgICAgZm9yIChpbmRleCA9IDAsIGNhY2hlID0gc2NlbmUudHJhbnNm
b3JtTm9kZXMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2
YXIgdHJhbnNmb3JtTm9kZSA9IHNjZW5lLnRyYW5zZm9ybU5vZGVzW2luZGV4XTsKKyAgICAgICAg
ICAgIGlmICh0cmFuc2Zvcm1Ob2RlLl93YWl0aW5nUGFyZW50SWQpIHsKKyAgICAgICAgICAgICAg
ICB0cmFuc2Zvcm1Ob2RlLnBhcmVudCA9IHNjZW5lLmdldExhc3RFbnRyeUJ5SUQodHJhbnNmb3Jt
Tm9kZS5fd2FpdGluZ1BhcmVudElkKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ob2RlLl93
YWl0aW5nUGFyZW50SWQgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHNjZW5lLm1lc2hlcy5sZW5ndGg7IGluZGV4IDwgY2Fj
aGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBtZXNoID0gc2NlbmUubWVzaGVzW2luZGV4
XTsKKyAgICAgICAgICAgIGlmIChtZXNoLl93YWl0aW5nUGFyZW50SWQpIHsKKyAgICAgICAgICAg
ICAgICBtZXNoLnBhcmVudCA9IHNjZW5lLmdldExhc3RFbnRyeUJ5SUQobWVzaC5fd2FpdGluZ1Bh
cmVudElkKTsKKyAgICAgICAgICAgICAgICBtZXNoLl93YWl0aW5nUGFyZW50SWQgPSBudWxsOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1lc2guX3dhaXRpbmdEYXRhLmxvZHMpIHsK
KyAgICAgICAgICAgICAgICBsb2FkRGV0YWlsTGV2ZWxzKHNjZW5lLCBtZXNoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBsaW5rIHNrZWxldG9uIHRyYW5zZm9ybSBub2Rl
cworICAgICAgICBmb3IgKGluZGV4ID0gMCwgY2FjaGUgPSBzY2VuZS5za2VsZXRvbnMubGVuZ3Ro
OyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBz
Y2VuZS5za2VsZXRvbnNbaW5kZXhdOworICAgICAgICAgICAgaWYgKHNrZWxldG9uLl9oYXNXYWl0
aW5nRGF0YSkgeworICAgICAgICAgICAgICAgIGlmIChza2VsZXRvbi5ib25lcyAhPSBudWxsKSB7
CisgICAgICAgICAgICAgICAgICAgIHNrZWxldG9uLmJvbmVzLmZvckVhY2goZnVuY3Rpb24gKGJv
bmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib25lLl93YWl0aW5nVHJhbnNmb3Jt
Tm9kZUlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmtUcmFuc2Zvcm1O
b2RlID0gc2NlbmUuZ2V0TGFzdEVudHJ5QnlJRChib25lLl93YWl0aW5nVHJhbnNmb3JtTm9kZUlk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlua1RyYW5zZm9ybU5vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9uZS5saW5rVHJhbnNmb3JtTm9kZShs
aW5rVHJhbnNmb3JtTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvbmUuX3dhaXRpbmdUcmFuc2Zvcm1Ob2RlSWQgPSBudWxs
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2tlbGV0b24uX2hhc1dhaXRpbmdEYXRh
ID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBmcmVlemUgd29y
bGQgbWF0cml4IGFwcGxpY2F0aW9uCisgICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHNj
ZW5lLm1lc2hlcy5sZW5ndGg7IGluZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAgICAgICAgICAg
IHZhciBjdXJyZW50TWVzaCA9IHNjZW5lLm1lc2hlc1tpbmRleF07CisgICAgICAgICAgICBpZiAo
Y3VycmVudE1lc2guX3dhaXRpbmdEYXRhLmZyZWV6ZVdvcmxkTWF0cml4KSB7CisgICAgICAgICAg
ICAgICAgY3VycmVudE1lc2guZnJlZXplV29ybGRNYXRyaXgoKTsKKyAgICAgICAgICAgICAgICBj
dXJyZW50TWVzaC5fd2FpdGluZ0RhdGEuZnJlZXplV29ybGRNYXRyaXggPSBudWxsOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY3VycmVudE1lc2gu
Y29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIC8vIExpZ2h0cyBleGNsdXNpb25zIC8gaW5jbHVzaW9ucworICAgICAgICBmb3IgKGluZGV4
ID0gMCwgY2FjaGUgPSBzY2VuZS5saWdodHMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsr
KSB7CisgICAgICAgICAgICB2YXIgbGlnaHRfMiA9IHNjZW5lLmxpZ2h0c1tpbmRleF07CisgICAg
ICAgICAgICAvLyBFeGNsdWRlZCBjaGVjaworICAgICAgICAgICAgaWYgKGxpZ2h0XzIuX2V4Y2x1
ZGVkTWVzaGVzSWRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBleGNs
dWRlZEluZGV4ID0gMDsgZXhjbHVkZWRJbmRleCA8IGxpZ2h0XzIuX2V4Y2x1ZGVkTWVzaGVzSWRz
Lmxlbmd0aDsgZXhjbHVkZWRJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBleGNs
dWRlZE1lc2ggPSBzY2VuZS5nZXRNZXNoQnlJRChsaWdodF8yLl9leGNsdWRlZE1lc2hlc0lkc1tl
eGNsdWRlZEluZGV4XSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChleGNsdWRlZE1lc2gpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0XzIuZXhjbHVkZWRNZXNoZXMucHVzaChleGNs
dWRlZE1lc2gpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGxpZ2h0XzIuX2V4Y2x1ZGVkTWVzaGVzSWRzID0gW107CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBJbmNsdWRlZCBjaGVjaworICAgICAgICAgICAgaWYgKGxpZ2h0
XzIuX2luY2x1ZGVkT25seU1lc2hlc0lkcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaW5jbHVkZWRPbmx5SW5kZXggPSAwOyBpbmNsdWRlZE9ubHlJbmRleCA8IGxpZ2h0
XzIuX2luY2x1ZGVkT25seU1lc2hlc0lkcy5sZW5ndGg7IGluY2x1ZGVkT25seUluZGV4KyspIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGluY2x1ZGVkT25seU1lc2ggPSBzY2VuZS5nZXRNZXNo
QnlJRChsaWdodF8yLl9pbmNsdWRlZE9ubHlNZXNoZXNJZHNbaW5jbHVkZWRPbmx5SW5kZXhdKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVkT25seU1lc2gpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxpZ2h0XzIuaW5jbHVkZWRPbmx5TWVzaGVzLnB1c2goaW5jbHVkZWRPbmx5
TWVzaCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbGlnaHRfMi5faW5jbHVkZWRPbmx5TWVzaGVzSWRzID0gW107CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE1X19bIkFic3RyYWN0U2NlbmUiXS5QYXJzZShwYXJzZWREYXRhLCBzY2VuZSwgY29u
dGFpbmVyLCByb290VXJsKTsKKyAgICAgICAgLy8gQWN0aW9ucyAoc2NlbmUpIERvbmUgbGFzdCBh
cyBpdCBjYW4gYWNjZXNzIG90aGVyIG9iamVjdHMuCisgICAgICAgIGZvciAoaW5kZXggPSAwLCBj
YWNoZSA9IHNjZW5lLm1lc2hlcy5sZW5ndGg7IGluZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgIHZhciBtZXNoID0gc2NlbmUubWVzaGVzW2luZGV4XTsKKyAgICAgICAgICAgIGlm
IChtZXNoLl93YWl0aW5nRGF0YS5hY3Rpb25zKSB7CisgICAgICAgICAgICAgICAgX0FjdGlvbnNf
YWN0aW9uTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siQWN0aW9uTWFuYWdl
ciJdLlBhcnNlKG1lc2guX3dhaXRpbmdEYXRhLmFjdGlvbnMsIG1lc2gsIHNjZW5lKTsKKyAgICAg
ICAgICAgICAgICBtZXNoLl93YWl0aW5nRGF0YS5hY3Rpb25zID0gbnVsbDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkRGF0YS5hY3Rpb25zICE9PSB1bmRlZmlu
ZWQgJiYgcGFyc2VkRGF0YS5hY3Rpb25zICE9PSBudWxsKSB7CisgICAgICAgICAgICBfQWN0aW9u
c19hY3Rpb25NYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJBY3Rpb25NYW5h
Z2VyIl0uUGFyc2UocGFyc2VkRGF0YS5hY3Rpb25zLCBudWxsLCBzY2VuZSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFhZGRUb1NjZW5lKSB7CisgICAgICAgICAgICBjb250YWluZXIucmVtb3Zl
QWxsRnJvbVNjZW5lKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2ggKGVycikgeworICAg
ICAgICB2YXIgbXNnID0gbG9nT3BlcmF0aW9uKCJsb2FkQXNzZXRzIiwgcGFyc2VkRGF0YSA/IHBh
cnNlZERhdGEucHJvZHVjZXIgOiAiVW5rbm93biIpICsgbG9nOworICAgICAgICBpZiAob25FcnJv
cikgeworICAgICAgICAgICAgb25FcnJvcihtc2csIGVycik7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTG9nZ2VyIl0uTG9nKG1zZyk7CisgICAgICAgICAgICB0aHJvdyBlcnI7CisgICAgICAg
IH0KKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICAgIGlmIChsb2cgIT09IG51bGwgJiYgX0xv
YWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlNjZW5lTG9h
ZGVyIl0ubG9nZ2luZ0xldmVsICE9PSBfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfX1siU2NlbmVMb2FkZXIiXS5OT19MT0dHSU5HKSB7CisgICAgICAgICAg
ICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTG9nZ2VyIl0uTG9n
KGxvZ09wZXJhdGlvbigibG9hZEFzc2V0cyIsIHBhcnNlZERhdGEgPyBwYXJzZWREYXRhLnByb2R1
Y2VyIDogIlVua25vd24iKSArIChfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTRfX1siU2NlbmVMb2FkZXIiXS5sb2dnaW5nTGV2ZWwgIT09IF9Mb2FkaW5nX3Nj
ZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJTY2VuZUxvYWRlciJdLk1J
TklNQUxfTE9HR0lORyA/IGxvZyA6ICIiKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGNvbnRhaW5lcjsKK307CitfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTRfX1siU2NlbmVMb2FkZXIiXS5SZWdpc3RlclBsdWdpbih7CisgICAgbmFtZTogImJh
Ynlsb24uanMiLAorICAgIGV4dGVuc2lvbnM6ICIuYmFieWxvbiIsCisgICAgY2FuRGlyZWN0TG9h
ZDogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgaWYgKGRhdGEuaW5kZXhPZigiYmFieWxvbiIp
ICE9PSAtMSkgeyAvLyBXZSBjb25zaWRlciB0aGF0IHRoZSBwcm9kdWNlciBzdHJpbmcgaXMgZmls
bGVkCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfSwKKyAgICBpbXBvcnRNZXNoOiBmdW5jdGlvbiAobWVzaGVzTmFtZXMsIHNj
ZW5lLCBkYXRhLCByb290VXJsLCBtZXNoZXMsIHBhcnRpY2xlU3lzdGVtcywgc2tlbGV0b25zLCBv
bkVycm9yKSB7CisgICAgICAgIC8vIEVudGlyZSBtZXRob2QgcnVubmluZyBpbiB0cnkgYmxvY2ss
IHNvIEFMV0FZUyBsb2dzIGFzIGZhciBhcyBpdCBnb3QsIG9ubHkgYWN0dWFsbHkgd3JpdGVzIGRl
dGFpbHMKKyAgICAgICAgLy8gd2hlbiBTY2VuZUxvYWRlci5kZWJ1Z0xvZ2dpbmcgPSB0cnVlIChk
ZWZhdWx0KSwgb3IgZXhjZXB0aW9uIGVuY291bnRlcmVkLgorICAgICAgICAvLyBFdmVyeXRoaW5n
IHN0b3JlZCBpbiB2YXIgbG9nIGluc3RlYWQgb2Ygd3JpdGluZyBzZXBhcmF0ZSBsaW5lcyB0byBz
dXBwb3J0IG9ubHkgd3JpdGluZyBpbiBleGNlcHRpb24sCisgICAgICAgIC8vIGFuZCBhdm9pZCBw
cm9ibGVtcyB3aXRoIG11bHRpcGxlIGNvbmN1cnJlbnQgLmJhYnlsb24gbG9hZHMuCisgICAgICAg
IHZhciBsb2cgPSAiaW1wb3J0TWVzaCBoYXMgZmFpbGVkIEpTT04gcGFyc2UiOworICAgICAgICB0
cnkgeworICAgICAgICAgICAgdmFyIHBhcnNlZERhdGEgPSBKU09OLnBhcnNlKGRhdGEpOworICAg
ICAgICAgICAgbG9nID0gIiI7CisgICAgICAgICAgICB2YXIgZnVsbERldGFpbHMgPSBfTG9hZGlu
Z19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siU2NlbmVMb2FkZXIi
XS5sb2dnaW5nTGV2ZWwgPT09IF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xNF9fWyJTY2VuZUxvYWRlciJdLkRFVEFJTEVEX0xPR0dJTkc7CisgICAgICAgICAg
ICBpZiAoIW1lc2hlc05hbWVzKSB7CisgICAgICAgICAgICAgICAgbWVzaGVzTmFtZXMgPSBudWxs
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVz
aGVzTmFtZXMpKSB7CisgICAgICAgICAgICAgICAgbWVzaGVzTmFtZXMgPSBbbWVzaGVzTmFtZXNd
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGhpZXJhcmNoeUlkcyA9IG5ldyBBcnJh
eSgpOworICAgICAgICAgICAgaWYgKHBhcnNlZERhdGEubWVzaGVzICE9PSB1bmRlZmluZWQgJiYg
cGFyc2VkRGF0YS5tZXNoZXMgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB2YXIgbG9hZGVk
U2tlbGV0b25zSWRzID0gW107CisgICAgICAgICAgICAgICAgdmFyIGxvYWRlZE1hdGVyaWFsc0lk
cyA9IFtdOworICAgICAgICAgICAgICAgIHZhciBpbmRleDsKKyAgICAgICAgICAgICAgICB2YXIg
Y2FjaGU7CisgICAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGNhY2hlID0gcGFyc2VkRGF0
YS5tZXNoZXMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBwYXJzZWRNZXNoID0gcGFyc2VkRGF0YS5tZXNoZXNbaW5kZXhdOworICAgICAg
ICAgICAgICAgICAgICBpZiAobWVzaGVzTmFtZXMgPT09IG51bGwgfHwgaXNEZXNjZW5kYW50T2Yo
cGFyc2VkTWVzaCwgbWVzaGVzTmFtZXMsIGhpZXJhcmNoeUlkcykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChtZXNoZXNOYW1lcyAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlbW92ZSBmb3VuZCBtZXNoIG5hbWUgZnJvbSBsaXN0LgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtZXNoZXNOYW1lc1ttZXNoZXNOYW1lcy5pbmRleE9m
KHBhcnNlZE1lc2gubmFtZSldOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy9HZW9tZXRyeT8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
YXJzZWRNZXNoLmdlb21ldHJ5SWQgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWRNZXNoLmdlb21ldHJ5
SWQgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2RvZXMgdGhlIGZp
bGUgY29udGFpbiBnZW9tZXRyaWVzPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
YXJzZWREYXRhLmdlb21ldHJpZXMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLmdlb21ldHJp
ZXMgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9maW5kIHRo
ZSBjb3JyZWN0IGdlb21ldHJ5IGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbImJveGVzIiwgInNwaGVyZXMiLCAiY3lsaW5kZXJzIiwgInRvcnVzZXMi
LCAiZ3JvdW5kcyIsICJwbGFuZXMiLCAidG9ydXNLbm90cyIsICJ2ZXJ0ZXhEYXRhIl0uZm9yRWFj
aChmdW5jdGlvbiAoZ2VvbWV0cnlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZm91bmQgPT09IHRydWUgfHwgIXBhcnNlZERhdGEuZ2VvbWV0cmllc1tnZW9t
ZXRyeVR5cGVdIHx8ICEoQXJyYXkuaXNBcnJheShwYXJzZWREYXRhLmdlb21ldHJpZXNbZ2VvbWV0
cnlUeXBlXSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VkRGF0YS5nZW9tZXRyaWVzW2dlb21ldHJ5VHlwZV0uZm9yRWFj
aChmdW5jdGlvbiAocGFyc2VkR2VvbWV0cnlEYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWRHZW9tZXRyeURhdGEuaWQgPT09IHBhcnNl
ZE1lc2guZ2VvbWV0cnlJZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChnZW9tZXRyeVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ2ZXJ0ZXhEYXRhIjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01lc2hl
c19nZW9tZXRyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJHZW9tZXRyeSJdLlBhcnNl
KHBhcnNlZEdlb21ldHJ5RGF0YSwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kID09PSBmYWxzZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkxvZ2dlciJdLldhcm4oIkdlb21ldHJ5IG5vdCBmb3VuZCBmb3IgbWVzaCAiICsgcGFy
c2VkTWVzaC5pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBNYXRlcmlhbCA/CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyc2VkTWVzaC5tYXRlcmlhbElkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG1hdGVyaWFsRm91bmQgPSAobG9hZGVkTWF0ZXJpYWxzSWRzLmluZGV4T2YocGFyc2VkTWVz
aC5tYXRlcmlhbElkKSAhPT0gLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
YXRlcmlhbEZvdW5kID09PSBmYWxzZSAmJiBwYXJzZWREYXRhLm11bHRpTWF0ZXJpYWxzICE9PSB1
bmRlZmluZWQgJiYgcGFyc2VkRGF0YS5tdWx0aU1hdGVyaWFscyAhPT0gbnVsbCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBtdWx0aW1hdEluZGV4ID0gMCwgbXVs
dGltYXRDYWNoZSA9IHBhcnNlZERhdGEubXVsdGlNYXRlcmlhbHMubGVuZ3RoOyBtdWx0aW1hdElu
ZGV4IDwgbXVsdGltYXRDYWNoZTsgbXVsdGltYXRJbmRleCsrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VkTXVsdGlNYXRlcmlhbCA9IHBhcnNlZERhdGEu
bXVsdGlNYXRlcmlhbHNbbXVsdGltYXRJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocGFyc2VkTXVsdGlNYXRlcmlhbC5pZCA9PT0gcGFyc2VkTWVzaC5tYXRl
cmlhbElkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgbWF0SW5kZXggPSAwLCBtYXRDYWNoZSA9IHBhcnNlZE11bHRpTWF0ZXJpYWwubWF0ZXJpYWxz
Lmxlbmd0aDsgbWF0SW5kZXggPCBtYXRDYWNoZTsgbWF0SW5kZXgrKykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViTWF0SWQgPSBwYXJzZWRNdWx0
aU1hdGVyaWFsLm1hdGVyaWFsc1ttYXRJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvYWRlZE1hdGVyaWFsc0lkcy5wdXNoKHN1Yk1hdElkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdCA9IHBhcnNl
TWF0ZXJpYWxCeUlkKHN1Yk1hdElkLCBwYXJzZWREYXRhLCBzY2VuZSwgcm9vdFVybCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyArPSAiXG5cdE1h
dGVyaWFsICIgKyBtYXQudG9TdHJpbmcoZnVsbERldGFpbHMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
YWRlZE1hdGVyaWFsc0lkcy5wdXNoKHBhcnNlZE11bHRpTWF0ZXJpYWwuaWQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtbWF0ID0gX01hdGVyaWFsc19tdWx0
aU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIk11bHRpTWF0ZXJpYWwiXS5Q
YXJzZU11bHRpTWF0ZXJpYWwocGFyc2VkTXVsdGlNYXRlcmlhbCwgc2NlbmUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtbWF0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsRm91bmQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cgKz0gIlxuXHRNdWx0
aS1NYXRlcmlhbCAiICsgbW1hdC50b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbEZvdW5k
ID09PSBmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRNYXRl
cmlhbHNJZHMucHVzaChwYXJzZWRNZXNoLm1hdGVyaWFsSWQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgbWF0ID0gcGFyc2VNYXRlcmlhbEJ5SWQocGFyc2VkTWVzaC5tYXRl
cmlhbElkLCBwYXJzZWREYXRhLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghbWF0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTG9nZ2VyIl0u
V2FybigiTWF0ZXJpYWwgbm90IGZvdW5kIGZvciBtZXNoICIgKyBwYXJzZWRNZXNoLmlkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyAr
PSAiXG5cdE1hdGVyaWFsICIgKyBtYXQudG9TdHJpbmcoZnVsbERldGFpbHMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2tl
bGV0b24gPworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZE1lc2guc2tlbGV0b25J
ZCA+IC0xICYmIHBhcnNlZERhdGEuc2tlbGV0b25zICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkRGF0
YS5za2VsZXRvbnMgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
c2tlbGV0b25BbHJlYWR5TG9hZGVkID0gKGxvYWRlZFNrZWxldG9uc0lkcy5pbmRleE9mKHBhcnNl
ZE1lc2guc2tlbGV0b25JZCkgPiAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHNrZWxldG9uQWxyZWFkeUxvYWRlZCA9PT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh2YXIgc2tlbGV0b25JbmRleCA9IDAsIHNrZWxldG9uQ2FjaGUgPSBw
YXJzZWREYXRhLnNrZWxldG9ucy5sZW5ndGg7IHNrZWxldG9uSW5kZXggPCBza2VsZXRvbkNhY2hl
OyBza2VsZXRvbkluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBwYXJzZWRTa2VsZXRvbiA9IHBhcnNlZERhdGEuc2tlbGV0b25zW3NrZWxldG9uSW5kZXhd
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFNrZWxldG9u
LmlkID09PSBwYXJzZWRNZXNoLnNrZWxldG9uSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBfQm9uZXNfc2tlbGV0b25fX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE4X19bIlNrZWxldG9uIl0uUGFyc2UocGFyc2VkU2tlbGV0b24sIHNj
ZW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2VsZXRvbnMu
cHVzaChza2VsZXRvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9hZGVkU2tlbGV0b25zSWRzLnB1c2gocGFyc2VkU2tlbGV0b24uaWQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyArPSAiXG5cdFNrZWxldG9uICIgKyBza2Vs
ZXRvbi50b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBNb3JwaCB0YXJnZXRzID8KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYXJzZWREYXRhLm1vcnBoVGFyZ2V0TWFuYWdlcnMgIT09IHVuZGVmaW5lZCAmJiBwYXJz
ZWREYXRhLm1vcnBoVGFyZ2V0TWFuYWdlcnMgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gcGFyc2VkRGF0YS5tb3JwaFRhcmdldE1h
bmFnZXJzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgbWFuYWdlckRhdGEgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Nb3JwaF9tb3JwaFRhcmdldE1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE5X19bIk1vcnBoVGFyZ2V0TWFuYWdlciJdLlBhcnNlKG1hbmFnZXJEYXRhLCBzY2VuZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBfTWVzaGVzX21lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWVzaCJdLlBhcnNlKHBhcnNlZE1lc2gsIHNjZW5lLCBy
b290VXJsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc2hlcy5wdXNoKG1lc2gpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbG9nICs9ICJcblx0TWVzaCAiICsgbWVzaC50b1N0cmluZyhm
dWxsRGV0YWlscyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgLy8gQ29ubmVjdGluZyBwYXJlbnRzIGFuZCBsb2RzCisgICAgICAgICAg
ICAgICAgdmFyIGN1cnJlbnRNZXNoOworICAgICAgICAgICAgICAgIGZvciAoaW5kZXggPSAwLCBj
YWNoZSA9IHNjZW5lLm1lc2hlcy5sZW5ndGg7IGluZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgY3VycmVudE1lc2ggPSBzY2VuZS5tZXNoZXNbaW5kZXhdOworICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE1lc2guX3dhaXRpbmdQYXJlbnRJZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudE1lc2gucGFyZW50ID0gc2NlbmUuZ2V0TGFzdEVu
dHJ5QnlJRChjdXJyZW50TWVzaC5fd2FpdGluZ1BhcmVudElkKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRNZXNoLl93YWl0aW5nUGFyZW50SWQgPSBudWxsOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TWVzaC5fd2FpdGluZ0Rh
dGEubG9kcykgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9hZERldGFpbExldmVscyhzY2Vu
ZSwgY3VycmVudE1lc2gpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIC8vIGxpbmsgc2tlbGV0b24gdHJhbnNmb3JtIG5vZGVzCisgICAg
ICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGNhY2hlID0gc2NlbmUuc2tlbGV0b25zLmxlbmd0
aDsgaW5kZXggPCBjYWNoZTsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgc2tl
bGV0b24gPSBzY2VuZS5za2VsZXRvbnNbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAo
c2tlbGV0b24uX2hhc1dhaXRpbmdEYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c2tlbGV0b24uYm9uZXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNr
ZWxldG9uLmJvbmVzLmZvckVhY2goZnVuY3Rpb24gKGJvbmUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGJvbmUuX3dhaXRpbmdUcmFuc2Zvcm1Ob2RlSWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rVHJhbnNmb3JtTm9kZSA9IHNj
ZW5lLmdldExhc3RFbnRyeUJ5SUQoYm9uZS5fd2FpdGluZ1RyYW5zZm9ybU5vZGVJZCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlua1RyYW5zZm9ybU5vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib25lLmxpbmtUcmFuc2Zv
cm1Ob2RlKGxpbmtUcmFuc2Zvcm1Ob2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvbmUuX3dhaXRp
bmdUcmFuc2Zvcm1Ob2RlSWQgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBza2VsZXRvbi5faGFzV2FpdGluZ0RhdGEg
PSBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIC8vIGZyZWV6ZSBhbmQgY29tcHV0ZSB3b3JsZCBtYXRyaXggYXBwbGljYXRpb24K
KyAgICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMCwgY2FjaGUgPSBzY2VuZS5tZXNoZXMubGVu
Z3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRNZXNoID0gc2NlbmUubWVzaGVzW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnRNZXNoLl93YWl0aW5nRGF0YS5mcmVlemVXb3JsZE1hdHJpeCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudE1lc2guZnJlZXplV29ybGRNYXRyaXgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRNZXNoLl93YWl0aW5nRGF0YS5mcmVlemVXb3JsZE1hdHJpeCA9
IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWVzaC5jb21wdXRlV29ybGRNYXRyaXgo
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBQYXJ0aWNsZXMKKyAgICAgICAgICAgIGlmIChwYXJzZWRE
YXRhLnBhcnRpY2xlU3lzdGVtcyAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEucGFydGljbGVT
eXN0ZW1zICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IF9hYnN0cmFj
dFNjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJBYnN0cmFjdFNjZW5lIl0uR2V0
SW5kaXZpZHVhbFBhcnNlcihfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzEzX19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uTkFNRV9QQVJUSUNMRVNZU1RFTSk7Cisg
ICAgICAgICAgICAgICAgaWYgKHBhcnNlcikgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
ZGV4ID0gMCwgY2FjaGUgPSBwYXJzZWREYXRhLnBhcnRpY2xlU3lzdGVtcy5sZW5ndGg7IGluZGV4
IDwgY2FjaGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZWRQ
YXJ0aWNsZVN5c3RlbSA9IHBhcnNlZERhdGEucGFydGljbGVTeXN0ZW1zW2luZGV4XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChoaWVyYXJjaHlJZHMuaW5kZXhPZihwYXJzZWRQYXJ0aWNs
ZVN5c3RlbS5lbWl0dGVySWQpICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcnRpY2xlU3lzdGVtcy5wdXNoKHBhcnNlcihwYXJzZWRQYXJ0aWNsZVN5c3RlbSwgc2NlbmUs
IHJvb3RVcmwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAgIHZh
ciBtc2cgPSBsb2dPcGVyYXRpb24oImltcG9ydE1lc2giLCBwYXJzZWREYXRhID8gcGFyc2VkRGF0
YS5wcm9kdWNlciA6ICJVbmtub3duIikgKyBsb2c7CisgICAgICAgICAgICBpZiAob25FcnJvcikg
eworICAgICAgICAgICAgICAgIG9uRXJyb3IobXNnLCBlcnIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLkxvZyhtc2cpOworICAgICAgICAgICAgICAgIHRo
cm93IGVycjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAg
ICAgICAgICAgIGlmIChsb2cgIT09IG51bGwgJiYgX0xvYWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlNjZW5lTG9hZGVyIl0ubG9nZ2luZ0xldmVsICE9PSBf
TG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siU2NlbmVM
b2FkZXIiXS5OT19MT0dHSU5HKSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLkxvZyhsb2dPcGVyYXRpb24oImltcG9y
dE1lc2giLCBwYXJzZWREYXRhID8gcGFyc2VkRGF0YS5wcm9kdWNlciA6ICJVbmtub3duIikgKyAo
X0xvYWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlNjZW5l
TG9hZGVyIl0ubG9nZ2luZ0xldmVsICE9PSBfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTRfX1siU2NlbmVMb2FkZXIiXS5NSU5JTUFMX0xPR0dJTkcgPyBsb2cg
OiAiIikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9LAorICAgIGxvYWQ6IGZ1bmN0aW9uIChzY2VuZSwgZGF0YSwgcm9vdFVybCwgb25FcnJv
cikgeworICAgICAgICAvLyBFbnRpcmUgbWV0aG9kIHJ1bm5pbmcgaW4gdHJ5IGJsb2NrLCBzbyBB
TFdBWVMgbG9ncyBhcyBmYXIgYXMgaXQgZ290LCBvbmx5IGFjdHVhbGx5IHdyaXRlcyBkZXRhaWxz
CisgICAgICAgIC8vIHdoZW4gU2NlbmVMb2FkZXIuZGVidWdMb2dnaW5nID0gdHJ1ZSAoZGVmYXVs
dCksIG9yIGV4Y2VwdGlvbiBlbmNvdW50ZXJlZC4KKyAgICAgICAgLy8gRXZlcnl0aGluZyBzdG9y
ZWQgaW4gdmFyIGxvZyBpbnN0ZWFkIG9mIHdyaXRpbmcgc2VwYXJhdGUgbGluZXMgdG8gc3VwcG9y
dCBvbmx5IHdyaXRpbmcgaW4gZXhjZXB0aW9uLAorICAgICAgICAvLyBhbmQgYXZvaWQgcHJvYmxl
bXMgd2l0aCBtdWx0aXBsZSBjb25jdXJyZW50IC5iYWJ5bG9uIGxvYWRzLgorICAgICAgICB2YXIg
bG9nID0gImltcG9ydFNjZW5lIGhhcyBmYWlsZWQgSlNPTiBwYXJzZSI7CisgICAgICAgIHRyeSB7
CisgICAgICAgICAgICB2YXIgcGFyc2VkRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7CisgICAgICAg
ICAgICBsb2cgPSAiIjsKKyAgICAgICAgICAgIC8vIFNjZW5lCisgICAgICAgICAgICBpZiAocGFy
c2VkRGF0YS51c2VEZWxheWVkVGV4dHVyZUxvYWRpbmcgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWRE
YXRhLnVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZyAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAg
IHNjZW5lLnVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZyA9IHBhcnNlZERhdGEudXNlRGVsYXllZFRl
eHR1cmVMb2FkaW5nICYmICFfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTRfX1siU2NlbmVMb2FkZXIiXS5Gb3JjZUZ1bGxTY2VuZUxvYWRpbmdGb3JJbmNyZW1l
bnRhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWREYXRhLmF1dG9DbGVh
ciAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEuYXV0b0NsZWFyICE9PSBudWxsKSB7CisgICAg
ICAgICAgICAgICAgc2NlbmUuYXV0b0NsZWFyID0gcGFyc2VkRGF0YS5hdXRvQ2xlYXI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFyc2VkRGF0YS5jbGVhckNvbG9yICE9PSB1bmRl
ZmluZWQgJiYgcGFyc2VkRGF0YS5jbGVhckNvbG9yICE9PSBudWxsKSB7CisgICAgICAgICAgICAg
ICAgc2NlbmUuY2xlYXJDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkNvbG9yNCJdLkZyb21BcnJheShwYXJzZWREYXRhLmNsZWFyQ29sb3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZERhdGEuYW1iaWVudENvbG9yICE9
PSB1bmRlZmluZWQgJiYgcGFyc2VkRGF0YS5hbWJpZW50Q29sb3IgIT09IG51bGwpIHsKKyAgICAg
ICAgICAgICAgICBzY2VuZS5hbWJpZW50Q29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb2xvcjMiXS5Gcm9tQXJyYXkocGFyc2VkRGF0YS5hbWJp
ZW50Q29sb3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZERhdGEuZ3Jh
dml0eSAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEuZ3Jhdml0eSAhPT0gbnVsbCkgeworICAg
ICAgICAgICAgICAgIHNjZW5lLmdyYXZpdHkgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLkZyb21BcnJheShwYXJzZWREYXRhLmdyYXZp
dHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRm9nCisgICAgICAgICAgICBpZiAo
cGFyc2VkRGF0YS5mb2dNb2RlICYmIHBhcnNlZERhdGEuZm9nTW9kZSAhPT0gMCkgeworICAgICAg
ICAgICAgICAgIHNjZW5lLmZvZ01vZGUgPSBwYXJzZWREYXRhLmZvZ01vZGU7CisgICAgICAgICAg
ICAgICAgc2NlbmUuZm9nQ29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJDb2xvcjMiXS5Gcm9tQXJyYXkocGFyc2VkRGF0YS5mb2dDb2xvcik7Cisg
ICAgICAgICAgICAgICAgc2NlbmUuZm9nU3RhcnQgPSBwYXJzZWREYXRhLmZvZ1N0YXJ0OworICAg
ICAgICAgICAgICAgIHNjZW5lLmZvZ0VuZCA9IHBhcnNlZERhdGEuZm9nRW5kOworICAgICAgICAg
ICAgICAgIHNjZW5lLmZvZ0RlbnNpdHkgPSBwYXJzZWREYXRhLmZvZ0RlbnNpdHk7CisgICAgICAg
ICAgICAgICAgbG9nICs9ICJcdEZvZyBtb2RlIGZvciBzY2VuZTogICI7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChzY2VuZS5mb2dNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGdldHRl
cnMgbm90IGNvbXBpbGluZywgc28gdXNpbmcgaGFyZGNvZGVkCisgICAgICAgICAgICAgICAgICAg
IGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZyArPSAiZXhwXG4iOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvZyArPSAiZXhwMlxuIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAg
ICAgICAgICAgICBsb2cgKz0gImxpbmVhclxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vUGh5
c2ljcworICAgICAgICAgICAgaWYgKHBhcnNlZERhdGEucGh5c2ljc0VuYWJsZWQpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgcGh5c2ljc1BsdWdpbjsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2Vk
RGF0YS5waHlzaWNzRW5naW5lID09PSAiY2Fubm9uIikgeworICAgICAgICAgICAgICAgICAgICBw
aHlzaWNzUGx1Z2luID0gbmV3IF9QaHlzaWNzX1BsdWdpbnNfY2Fubm9uSlNQbHVnaW5fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkNhbm5vbkpTUGx1Z2luIl0oKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyc2VkRGF0YS5waHlzaWNzRW5naW5l
ID09PSAib2ltbyIpIHsKKyAgICAgICAgICAgICAgICAgICAgcGh5c2ljc1BsdWdpbiA9IG5ldyBf
UGh5c2ljc19QbHVnaW5zX29pbW9KU1BsdWdpbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFf
X1siT2ltb0pTUGx1Z2luIl0oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAocGFyc2VkRGF0YS5waHlzaWNzRW5naW5lID09PSAiYW1tbyIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcGh5c2ljc1BsdWdpbiA9IG5ldyBfUGh5c2ljc19QbHVnaW5zX2FtbW9KU1Bs
dWdpbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQW1tb0pTUGx1Z2luIl0oKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbG9nID0gIlx0UGh5c2ljcyBlbmdpbmUg
IiArIChwYXJzZWREYXRhLnBoeXNpY3NFbmdpbmUgPyBwYXJzZWREYXRhLnBoeXNpY3NFbmdpbmUg
OiAib2ltbyIpICsgIiBlbmFibGVkXG4iOworICAgICAgICAgICAgICAgIC8vZWxzZSAtIGRlZmF1
bHQgZW5naW5lLCB3aGljaCBpcyBjdXJyZW50bHkgb2ltbworICAgICAgICAgICAgICAgIHZhciBw
aHlzaWNzR3Jhdml0eSA9IHBhcnNlZERhdGEucGh5c2ljc0dyYXZpdHkgPyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLkZyb21BcnJheShw
YXJzZWREYXRhLnBoeXNpY3NHcmF2aXR5KSA6IG51bGw7CisgICAgICAgICAgICAgICAgc2NlbmUu
ZW5hYmxlUGh5c2ljcyhwaHlzaWNzR3Jhdml0eSwgcGh5c2ljc1BsdWdpbik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBNZXRhZGF0YQorICAgICAgICAgICAgaWYgKHBhcnNlZERhdGEu
bWV0YWRhdGEgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLm1ldGFkYXRhICE9PSBudWxsKSB7
CisgICAgICAgICAgICAgICAgc2NlbmUubWV0YWRhdGEgPSBwYXJzZWREYXRhLm1ldGFkYXRhOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy9jb2xsaXNpb25zLCBpZiBkZWZpbmVkLiBvdGhl
cndpc2UsIGRlZmF1bHQgaXMgdHJ1ZQorICAgICAgICAgICAgaWYgKHBhcnNlZERhdGEuY29sbGlz
aW9uc0VuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLmNvbGxpc2lvbnNFbmFibGVk
ICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2NlbmUuY29sbGlzaW9uc0VuYWJsZWQgPSBw
YXJzZWREYXRhLmNvbGxpc2lvbnNFbmFibGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIGNvbnRhaW5lciA9IGxvYWRBc3NldENvbnRhaW5lcihzY2VuZSwgZGF0YSwgcm9vdFVybCwg
b25FcnJvciwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoIWNvbnRhaW5lcikgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJz
ZWREYXRhLmF1dG9BbmltYXRlKSB7CisgICAgICAgICAgICAgICAgc2NlbmUuYmVnaW5BbmltYXRp
b24oc2NlbmUsIHBhcnNlZERhdGEuYXV0b0FuaW1hdGVGcm9tLCBwYXJzZWREYXRhLmF1dG9Bbmlt
YXRlVG8sIHBhcnNlZERhdGEuYXV0b0FuaW1hdGVMb29wLCBwYXJzZWREYXRhLmF1dG9BbmltYXRl
U3BlZWQgfHwgMS4wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWREYXRh
LmFjdGl2ZUNhbWVyYUlEICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkRGF0YS5hY3RpdmVDYW1lcmFJ
RCAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNjZW5lLnNldEFjdGl2ZUNhbWVyYUJ5SUQo
cGFyc2VkRGF0YS5hY3RpdmVDYW1lcmFJRCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBFbnZpcm9ubWVudCB0ZXh0dXJlCisgICAgICAgICAgICBpZiAocGFyc2VkRGF0YS5lbnZpcm9u
bWVudFRleHR1cmUgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLmVudmlyb25tZW50VGV4dHVy
ZSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFBCUiBuZWVkZWQgZm9yIGJvdGggSERS
IHRleHR1cmUgKGdhbW1hIHNwYWNlKSAmIGEgc2t5IGJveAorICAgICAgICAgICAgICAgIHZhciBp
c1BCUiA9IHBhcnNlZERhdGEuaXNQQlIgIT09IHVuZGVmaW5lZCA/IHBhcnNlZERhdGEuaXNQQlIg
OiB0cnVlOworICAgICAgICAgICAgICAgIGlmIChwYXJzZWREYXRhLmVudmlyb25tZW50VGV4dHVy
ZVR5cGUgJiYgcGFyc2VkRGF0YS5lbnZpcm9ubWVudFRleHR1cmVUeXBlID09PSAiQkFCWUxPTi5I
RFJDdWJlVGV4dHVyZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGhkclNpemUgPSAocGFy
c2VkRGF0YS5lbnZpcm9ubWVudFRleHR1cmVTaXplKSA/IHBhcnNlZERhdGEuZW52aXJvbm1lbnRU
ZXh0dXJlU2l6ZSA6IDEyODsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGhkclRleHR1cmUgPSBu
ZXcgX01hdGVyaWFsc19UZXh0dXJlc19oZHJDdWJlVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTBfX1siSERSQ3ViZVRleHR1cmUiXShyb290VXJsICsgcGFyc2VkRGF0YS5lbnZpcm9u
bWVudFRleHR1cmUsIHNjZW5lLCBoZHJTaXplLCB0cnVlLCAhaXNQQlIpOworICAgICAgICAgICAg
ICAgICAgICBpZiAocGFyc2VkRGF0YS5lbnZpcm9ubWVudFRleHR1cmVSb3RhdGlvblkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhkclRleHR1cmUucm90YXRpb25ZID0gcGFyc2VkRGF0YS5l
bnZpcm9ubWVudFRleHR1cmVSb3RhdGlvblk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlID0gaGRyVGV4dHVyZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChfTWlzY19zdHJpbmdUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX1si
U3RyaW5nVG9vbHMiXS5FbmRzV2l0aChwYXJzZWREYXRhLmVudmlyb25tZW50VGV4dHVyZSwgIi5l
bnYiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXByZXNzZWRUZXh0dXJlID0g
bmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfY3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siQ3ViZVRleHR1cmUiXShyb290VXJsICsgcGFyc2VkRGF0YS5lbnZpcm9ubWVudFRl
eHR1cmUsIHNjZW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWREYXRhLmVu
dmlyb25tZW50VGV4dHVyZVJvdGF0aW9uWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbXByZXNzZWRUZXh0dXJlLnJvdGF0aW9uWSA9IHBhcnNlZERhdGEuZW52aXJvbm1lbnRUZXh0
dXJlUm90YXRpb25ZOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlID0gY29tcHJlc3NlZFRleHR1cmU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgY3ViZVRleHR1cmUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX2N1
YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkN1YmVUZXh0dXJlIl0uQ3Jl
YXRlRnJvbVByZWZpbHRlcmVkRGF0YShyb290VXJsICsgcGFyc2VkRGF0YS5lbnZpcm9ubWVudFRl
eHR1cmUsIHNjZW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWREYXRhLmVu
dmlyb25tZW50VGV4dHVyZVJvdGF0aW9uWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGN1YmVUZXh0dXJlLnJvdGF0aW9uWSA9IHBhcnNlZERhdGEuZW52aXJvbm1lbnRUZXh0dXJlUm90
YXRpb25ZOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlID0gY3ViZVRleHR1cmU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZERh
dGEuY3JlYXRlRGVmYXVsdFNreWJveCA9PT0gdHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgc2t5Ym94U2NhbGUgPSAoc2NlbmUuYWN0aXZlQ2FtZXJhICE9PSB1bmRlZmluZWQgJiYgc2Nl
bmUuYWN0aXZlQ2FtZXJhICE9PSBudWxsKSA/IChzY2VuZS5hY3RpdmVDYW1lcmEubWF4WiAtIHNj
ZW5lLmFjdGl2ZUNhbWVyYS5taW5aKSAvIDIgOiAxMDAwOworICAgICAgICAgICAgICAgICAgICB2
YXIgc2t5Ym94Qmx1ckxldmVsID0gcGFyc2VkRGF0YS5za3lib3hCbHVyTGV2ZWwgfHwgMDsKKyAg
ICAgICAgICAgICAgICAgICAgc2NlbmUuY3JlYXRlRGVmYXVsdFNreWJveChzY2VuZS5lbnZpcm9u
bWVudFRleHR1cmUsIGlzUEJSLCBza3lib3hTY2FsZSwgc2t5Ym94Qmx1ckxldmVsKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGaW5pc2gKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChlcnIpIHsKKyAg
ICAgICAgICAgIHZhciBtc2cgPSBsb2dPcGVyYXRpb24oImltcG9ydFNjZW5lIiwgcGFyc2VkRGF0
YSA/IHBhcnNlZERhdGEucHJvZHVjZXIgOiAiVW5rbm93biIpICsgbG9nOworICAgICAgICAgICAg
aWYgKG9uRXJyb3IpIHsKKyAgICAgICAgICAgICAgICBvbkVycm9yKG1zZywgZXJyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMb2dnZXIiXS5Mb2cobXNnKTsKKyAgICAg
ICAgICAgICAgICB0aHJvdyBlcnI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZmluYWxseSB7CisgICAgICAgICAgICBpZiAobG9nICE9PSBudWxsICYmIF9Mb2FkaW5nX3NjZW5l
TG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJTY2VuZUxvYWRlciJdLmxvZ2dp
bmdMZXZlbCAhPT0gX0xvYWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE0X19bIlNjZW5lTG9hZGVyIl0uTk9fTE9HR0lORykgeworICAgICAgICAgICAgICAgIF9NaXNj
X2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMb2dnZXIiXS5Mb2cobG9nT3Bl
cmF0aW9uKCJpbXBvcnRTY2VuZSIsIHBhcnNlZERhdGEgPyBwYXJzZWREYXRhLnByb2R1Y2VyIDog
IlVua25vd24iKSArIChfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTRfX1siU2NlbmVMb2FkZXIiXS5sb2dnaW5nTGV2ZWwgIT09IF9Mb2FkaW5nX3NjZW5lTG9h
ZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJTY2VuZUxvYWRlciJdLk1JTklNQUxf
TE9HR0lORyA/IGxvZyA6ICIiKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0sCisgICAgbG9hZEFzc2V0Q29udGFpbmVyOiBmdW5jdGlvbiAo
c2NlbmUsIGRhdGEsIHJvb3RVcmwsIG9uRXJyb3IpIHsKKyAgICAgICAgdmFyIGNvbnRhaW5lciA9
IGxvYWRBc3NldENvbnRhaW5lcihzY2VuZSwgZGF0YSwgcm9vdFVybCwgb25FcnJvcik7CisgICAg
ICAgIHJldHVybiBjb250YWluZXI7CisgICAgfQorfSk7CisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL0xvYWRpbmcvUGx1Z2lucy9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9Mb2FkaW5nL1BsdWdpbnMvaW5kZXgudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBfQmFieWxvbkxvYWRlclJlZ2lzdGVyZWQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJ5bG9uRmlsZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYWJ5bG9uRmlsZUxvYWRlciAq
LyAiLi9Mb2FkaW5nL1BsdWdpbnMvYmFieWxvbkZpbGVMb2FkZXIudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiX0JhYnlsb25Mb2FkZXJSZWdpc3RlcmVkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYmFi
eWxvbkZpbGVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX0JhYnlsb25Mb2Fk
ZXJSZWdpc3RlcmVkIl07IH0pOworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTG9hZGlu
Zy9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TG9hZGluZy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBEZWZhdWx0TG9hZGluZ1NjcmVlbiwgU2NlbmVMb2FkZXJQcm9n
cmVzc0V2ZW50LCBTY2VuZUxvYWRlciwgU2NlbmVMb2FkZXJGbGFncywgX0JhYnlsb25Mb2FkZXJS
ZWdpc3RlcmVkICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bG9hZGluZ1NjcmVlbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9sb2FkaW5nU2NyZWVuICovICIuL0xvYWRpbmcvbG9hZGluZ1NjcmVlbi50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJEZWZhdWx0TG9hZGluZ1NjcmVlbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2xvYWRpbmdTY3JlZW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRGVm
YXVsdExvYWRpbmdTY3JlZW4iXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUGx1
Z2luc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9QbHVnaW5zL2luZGV4ICovICIuL0xvYWRpbmcvUGx1Z2lucy9pbmRleC50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJfQmFieWxvbkxvYWRlclJlZ2lzdGVyZWQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9QbHVnaW5zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIl9C
YWJ5bG9uTG9hZGVyUmVnaXN0ZXJlZCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9zY2VuZUxvYWRlciAqLyAiLi9Mb2FkaW5nL3NjZW5lTG9hZGVyLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNjZW5l
TG9hZGVyUHJvZ3Jlc3NFdmVudCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY2VuZUxvYWRl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlNjZW5lTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vc2NlbmVMb2FkZXJGbGFncyAqLyAiLi9Mb2FkaW5nL3NjZW5lTG9h
ZGVyRmxhZ3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVMb2FkZXJGbGFncyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siU2NlbmVMb2FkZXJGbGFncyJdOyB9KTsKKworCisKKworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL0xvYWRpbmcvbG9hZGluZ1NjcmVlbi50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Mb2FkaW5nL2xvYWRpbmdTY3JlZW4udHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBEZWZhdWx0TG9hZGluZ1NjcmVlbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJEZWZhdWx0TG9hZGluZ1NjcmVlbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
RGVmYXVsdExvYWRpbmdTY3JlZW47IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMiKTsKKwor
LyoqCisgKiBDbGFzcyB1c2VkIGZvciB0aGUgZGVmYXVsdCBsb2FkaW5nIHNjcmVlbgorICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2NyZWF0aW5nX2FfY3VzdG9tX2xvYWRp
bmdfc2NyZWVuCisgKi8KK3ZhciBEZWZhdWx0TG9hZGluZ1NjcmVlbiA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGRlZmF1bHQgbG9h
ZGluZyBzY3JlZW4KKyAgICAgKiBAcGFyYW0gX3JlbmRlcmluZ0NhbnZhcyBkZWZpbmVzIHRoZSBj
YW52YXMgdXNlZCB0byByZW5kZXIgdGhlIHNjZW5lCisgICAgICogQHBhcmFtIF9sb2FkaW5nVGV4
dCBkZWZpbmVzIHRoZSBkZWZhdWx0IHRleHQgdG8gZGlzcGxheQorICAgICAqIEBwYXJhbSBfbG9h
ZGluZ0RpdkJhY2tncm91bmRDb2xvciBkZWZpbmVzIHRoZSBkZWZhdWx0IGJhY2tncm91bmQgY29s
b3IKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBEZWZhdWx0TG9hZGluZ1NjcmVlbihfcmVuZGVyaW5n
Q2FudmFzLCBfbG9hZGluZ1RleHQsIF9sb2FkaW5nRGl2QmFja2dyb3VuZENvbG9yKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChfbG9hZGluZ1RleHQgPT09IHZvaWQg
MCkgeyBfbG9hZGluZ1RleHQgPSAiIjsgfQorICAgICAgICBpZiAoX2xvYWRpbmdEaXZCYWNrZ3Jv
dW5kQ29sb3IgPT09IHZvaWQgMCkgeyBfbG9hZGluZ0RpdkJhY2tncm91bmRDb2xvciA9ICJibGFj
ayI7IH0KKyAgICAgICAgdGhpcy5fcmVuZGVyaW5nQ2FudmFzID0gX3JlbmRlcmluZ0NhbnZhczsK
KyAgICAgICAgdGhpcy5fbG9hZGluZ1RleHQgPSBfbG9hZGluZ1RleHQ7CisgICAgICAgIHRoaXMu
X2xvYWRpbmdEaXZCYWNrZ3JvdW5kQ29sb3IgPSBfbG9hZGluZ0RpdkJhY2tncm91bmRDb2xvcjsK
KyAgICAgICAgLy8gUmVzaXplCisgICAgICAgIHRoaXMuX3Jlc2l6ZUxvYWRpbmdVSSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBjYW52YXNSZWN0ID0gX3RoaXMuX3JlbmRlcmluZ0Nh
bnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgICAgIHZhciBjYW52YXNQb3Np
dGlvbmluZyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKF90aGlzLl9yZW5kZXJpbmdDYW52YXMp
LnBvc2l0aW9uOworICAgICAgICAgICAgaWYgKCFfdGhpcy5fbG9hZGluZ0RpdikgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl9sb2Fk
aW5nRGl2LnN0eWxlLnBvc2l0aW9uID0gKGNhbnZhc1Bvc2l0aW9uaW5nID09PSAiZml4ZWQiKSA/
ICJmaXhlZCIgOiAiYWJzb2x1dGUiOworICAgICAgICAgICAgX3RoaXMuX2xvYWRpbmdEaXYuc3R5
bGUubGVmdCA9IGNhbnZhc1JlY3QubGVmdCArICJweCI7CisgICAgICAgICAgICBfdGhpcy5fbG9h
ZGluZ0Rpdi5zdHlsZS50b3AgPSBjYW52YXNSZWN0LnRvcCArICJweCI7CisgICAgICAgICAgICBf
dGhpcy5fbG9hZGluZ0Rpdi5zdHlsZS53aWR0aCA9IGNhbnZhc1JlY3Qud2lkdGggKyAicHgiOwor
ICAgICAgICAgICAgX3RoaXMuX2xvYWRpbmdEaXYuc3R5bGUuaGVpZ2h0ID0gY2FudmFzUmVjdC5o
ZWlnaHQgKyAicHgiOworICAgICAgICB9OworICAgIH0KKyAgICAvKioKKyAgICAgKiBGdW5jdGlv
biBjYWxsZWQgdG8gZGlzcGxheSB0aGUgbG9hZGluZyBzY3JlZW4KKyAgICAgKi8KKyAgICBEZWZh
dWx0TG9hZGluZ1NjcmVlbi5wcm90b3R5cGUuZGlzcGxheUxvYWRpbmdVSSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdEaXYpIHsKKyAgICAgICAgICAgIC8vIERvIG5v
dCBhZGQgYSBsb2FkaW5nIHNjcmVlbiBpZiB0aGVyZSBpcyBhbHJlYWR5IG9uZQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2xvYWRpbmdEaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGhpcy5fbG9hZGluZ0Rpdi5pZCA9ICJi
YWJ5bG9uanNMb2FkaW5nRGl2IjsKKyAgICAgICAgdGhpcy5fbG9hZGluZ0Rpdi5zdHlsZS5vcGFj
aXR5ID0gIjAiOworICAgICAgICB0aGlzLl9sb2FkaW5nRGl2LnN0eWxlLnRyYW5zaXRpb24gPSAi
b3BhY2l0eSAxLjVzIGVhc2UiOworICAgICAgICB0aGlzLl9sb2FkaW5nRGl2LnN0eWxlLnBvaW50
ZXJFdmVudHMgPSAibm9uZSI7CisgICAgICAgIC8vIExvYWRpbmcgdGV4dAorICAgICAgICB0aGlz
Ll9sb2FkaW5nVGV4dERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAg
ICB0aGlzLl9sb2FkaW5nVGV4dERpdi5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CisgICAg
ICAgIHRoaXMuX2xvYWRpbmdUZXh0RGl2LnN0eWxlLmxlZnQgPSAiMCI7CisgICAgICAgIHRoaXMu
X2xvYWRpbmdUZXh0RGl2LnN0eWxlLnRvcCA9ICI1MCUiOworICAgICAgICB0aGlzLl9sb2FkaW5n
VGV4dERpdi5zdHlsZS5tYXJnaW5Ub3AgPSAiODBweCI7CisgICAgICAgIHRoaXMuX2xvYWRpbmdU
ZXh0RGl2LnN0eWxlLndpZHRoID0gIjEwMCUiOworICAgICAgICB0aGlzLl9sb2FkaW5nVGV4dERp
di5zdHlsZS5oZWlnaHQgPSAiMjBweCI7CisgICAgICAgIHRoaXMuX2xvYWRpbmdUZXh0RGl2LnN0
eWxlLmZvbnRGYW1pbHkgPSAiQXJpYWwiOworICAgICAgICB0aGlzLl9sb2FkaW5nVGV4dERpdi5z
dHlsZS5mb250U2l6ZSA9ICIxNHB4IjsKKyAgICAgICAgdGhpcy5fbG9hZGluZ1RleHREaXYuc3R5
bGUuY29sb3IgPSAid2hpdGUiOworICAgICAgICB0aGlzLl9sb2FkaW5nVGV4dERpdi5zdHlsZS50
ZXh0QWxpZ24gPSAiY2VudGVyIjsKKyAgICAgICAgdGhpcy5fbG9hZGluZ1RleHREaXYuaW5uZXJI
VE1MID0gIkxvYWRpbmciOworICAgICAgICB0aGlzLl9sb2FkaW5nRGl2LmFwcGVuZENoaWxkKHRo
aXMuX2xvYWRpbmdUZXh0RGl2KTsKKyAgICAgICAgLy9zZXQgdGhlIHByZWRlZmluZWQgdGV4dAor
ICAgICAgICB0aGlzLl9sb2FkaW5nVGV4dERpdi5pbm5lckhUTUwgPSB0aGlzLl9sb2FkaW5nVGV4
dDsKKyAgICAgICAgLy8gR2VuZXJhdGluZyBrZXlmcmFtZXMKKyAgICAgICAgdmFyIHN0eWxlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKKyAgICAgICAgc3R5bGUudHlwZSA9ICd0
ZXh0L2Nzcyc7CisgICAgICAgIHZhciBrZXlGcmFtZXMgPSAiQC13ZWJraXQta2V5ZnJhbWVzIHNw
aW4xIHsgICAgICAgICAgICAgICAgICAgIDAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgw
ZGVnKTt9XG4gICAgICAgICAgICAgICAgICAgIDEwMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90
YXRlKDM2MGRlZyk7fVxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgQGtleWZyYW1l
cyBzcGluMSB7ICAgICAgICAgICAgICAgICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcp
O31cbiAgICAgICAgICAgICAgICAgICAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7
fVxuICAgICAgICAgICAgICAgIH0iOworICAgICAgICBzdHlsZS5pbm5lckhUTUwgPSBrZXlGcmFt
ZXM7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBw
ZW5kQ2hpbGQoc3R5bGUpOworICAgICAgICAvLyBMb2FkaW5nIGltZworICAgICAgICB2YXIgaW1n
QmFjayA9IG5ldyBJbWFnZSgpOworICAgICAgICBpZiAoIURlZmF1bHRMb2FkaW5nU2NyZWVuLkRl
ZmF1bHRMb2dvVXJsKSB7CisgICAgICAgICAgICBpbWdCYWNrLnNyYyA9ICJkYXRhOmltYWdlL3N2
Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3
TUM5emRtY2lJSFpwWlhkQ2IzZzlJakFnTUNBeE9EQXVNVGNnTWpBNExqQTBJajQ4WkdWbWN6NDhj
M1I1YkdVK0xtTnNjeTB4ZTJacGJHdzZJMlptWmp0OUxtTnNjeTB5ZTJacGJHdzZJMlV3TmpnMFlq
dDlMbU5zY3kwemUyWnBiR3c2STJKaU5EWTBZanQ5TG1Oc2N5MDBlMlpwYkd3NkkyVXdaR1ZrT0R0
OUxtTnNjeTAxZTJacGJHdzZJMlExWkRKallUdDlQQzl6ZEhsc1pUNDhMMlJsWm5NK1BIUnBkR3hs
UGtKaFlubHNiMjVNYjJkdlBDOTBhWFJzWlQ0OFp5QnBaRDBpVEdGNVpYSmZNaUlnWkdGMFlTMXVZ
VzFsUFNKTVlYbGxjaUF5SWo0OFp5QnBaRDBpVUdGblpWOUZiR1Z0Wlc1MGN5SWdaR0YwWVMxdVlX
MWxQU0pRWVdkbElFVnNaVzFsYm5SeklqNDhjR0YwYUNCamJHRnpjejBpWTJ4ekxURWlJR1E5SWsw
NU1DNHdPU3d3TERBc05USldNVFUyYkRrd0xqQTVMRFV5TERrd0xqQTRMVFV5VmpVeVdpSXZQanh3
YjJ4NVoyOXVJR05zWVhOelBTSmpiSE10TWlJZ2NHOXBiblJ6UFNJeE9EQXVNVGNnTlRJdU1ERWdN
VFV4TGprM0lETTFMamN6SURFeU5DNDROU0ExTVM0ek9TQXhOVE11TURVZ05qY3VOamNnTVRnd0xq
RTNJRFV5TGpBeElpOCtQSEJ2YkhsbmIyNGdZMnhoYzNNOUltTnNjeTB5SWlCd2IybHVkSE05SWpJ
M0xqRXlJRFkzTGpZM0lERXhOeTR5TVNBeE5TNDJOaUE1TUM0d09DQXdJREFnTlRJdU1ERWdNamN1
TVRJZ05qY3VOamNpTHo0OGNHOXNlV2R2YmlCamJHRnpjejBpWTJ4ekxUSWlJSEJ2YVc1MGN6MGlO
akV1T0RrZ01USXdMak1nT1RBdU1EZ2dNVE0yTGpVNElERXhPQzR5T0NBeE1qQXVNeUE1TUM0d09D
QXhNRFF1TURJZ05qRXVPRGtnTVRJd0xqTWlMejQ4Y0c5c2VXZHZiaUJqYkdGemN6MGlZMnh6TFRN
aUlIQnZhVzUwY3owaU1UVXpMakExSURZM0xqWTNJREUxTXk0d05TQXhOREF1TXpjZ09UQXVNRGdn
TVRjMkxqY3lJREkzTGpFeUlERTBNQzR6TnlBeU55NHhNaUEyTnk0Mk55QXdJRFV5TGpBeElEQWdN
VFUyTGpBeklEa3dMakE0SURJd09DNHdOQ0F4T0RBdU1UY2dNVFUyTGpBeklERTRNQzR4TnlBMU1p
NHdNU0F4TlRNdU1EVWdOamN1TmpjaUx6NDhjRzlzZVdkdmJpQmpiR0Z6Y3owaVkyeHpMVE1pSUhC
dmFXNTBjejBpT1RBdU1EZ2dOekV1TkRZZ05qRXVPRGtnT0RjdU56UWdOakV1T0RrZ01USXdMak1n
T1RBdU1EZ2dNVEEwTGpBeUlERXhPQzR5T0NBeE1qQXVNeUF4TVRndU1qZ2dPRGN1TnpRZ09UQXVN
RGdnTnpFdU5EWWlMejQ4Y0c5c2VXZHZiaUJqYkdGemN6MGlZMnh6TFRRaUlIQnZhVzUwY3owaU1U
VXpMakExSURZM0xqWTNJREV4T0M0eU9DQTROeTQzTkNBeE1UZ3VNamdnTVRJd0xqTWdPVEF1TURn
Z01UTTJMalU0SURrd0xqQTRJREUzTmk0M01pQXhOVE11TURVZ01UUXdMak0zSURFMU15NHdOU0Ey
Tnk0Mk55SXZQanh3YjJ4NVoyOXVJR05zWVhOelBTSmpiSE10TlNJZ2NHOXBiblJ6UFNJeU55NHhN
aUEyTnk0Mk55QTJNUzQ0T1NBNE55NDNOQ0EyTVM0NE9TQXhNakF1TXlBNU1DNHdPQ0F4TXpZdU5U
Z2dPVEF1TURnZ01UYzJMamN5SURJM0xqRXlJREUwTUM0ek55QXlOeTR4TWlBMk55NDJOeUl2UGp3
dlp6NDhMMmMrUEM5emRtYysiOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaW1nQmFjay5zcmMgPSBEZWZhdWx0TG9hZGluZ1NjcmVlbi5EZWZhdWx0TG9nb1VybDsKKyAg
ICAgICAgfQorICAgICAgICBpbWdCYWNrLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKKyAg
ICAgICAgaW1nQmFjay5zdHlsZS5sZWZ0ID0gIjQwJSI7CisgICAgICAgIGltZ0JhY2suc3R5bGUu
dG9wID0gIjQwJSI7CisgICAgICAgIGltZ0JhY2suc3R5bGUud2lkdGggPSAiMjAlIjsKKyAgICAg
ICAgaW1nQmFjay5zdHlsZS5oZWlnaHQgPSAiMjAlIjsKKyAgICAgICAgLy8gTG9hZGluZyBzcGlu
bmVyCisgICAgICAgIHZhciBpbWdTcGlubmVyID0gbmV3IEltYWdlKCk7CisgICAgICAgIGlmICgh
RGVmYXVsdExvYWRpbmdTY3JlZW4uRGVmYXVsdFNwaW5uZXJVcmwpIHsKKyAgICAgICAgICAgIGlt
Z1NwaW5uZXIuc3JjID0gImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3ow
aWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIWnBaWGRDYjNnOUlqQWdNQ0F6
T1RJZ016a3lJajQ4WkdWbWN6NDhjM1I1YkdVK0xtTnNjeTB4ZTJacGJHdzZJMlV3TmpnMFlqdDlM
bU5zY3kweWUyWnBiR3c2Ym05dVpUdDlQQzl6ZEhsc1pUNDhMMlJsWm5NK1BIUnBkR3hsUGxOd2FX
NXVaWEpKWTI5dVBDOTBhWFJzWlQ0OFp5QnBaRDBpVEdGNVpYSmZNaUlnWkdGMFlTMXVZVzFsUFNK
TVlYbGxjaUF5SWo0OFp5QnBaRDBpVTNCcGJtNWxjaUkrUEhCaGRHZ2dZMnhoYzNNOUltTnNjeTB4
SWlCa1BTSk5OREF1TWpFc01USTJMalF6WXpNdU55MDNMak14TERjdU5qY3RNVFF1TkRRc01USXRN
akV1TXpKc015NHpOaTAxTGpFc015NDFNaTAxWXpFdU1qTXRNUzQyTXl3eUxqUXhMVE11TWprc015
NDJOUzAwTGpreGN6SXVOVE10TXk0eU1Td3pMamd5TFRRdU56bEJNVGcxTGpJc01UZzFMaklzTUN3
d0xERXNPRE11TkN3Mk55NDBNMkV5TURnc01qQTRMREFzTUN3eExERTVMVEUxTGpZMll6TXVNelV0
TWk0ME1TdzJMamMwTFRRdU56Z3NNVEF1TWpVdE4zTTNMakV4TFRRdU1qZ3NNVEF1TnpVdE5pNHpN
bU0zTGpJNUxUUXNNVFF1TnpNdE9Dd3lNaTQxTXkweE1TNDBPU3d6TGprdE1TNDNNaXczTGpnNExU
TXVNeXd4TWkwMExqWTBZVEV3TkM0eU1pd3hNRFF1TWpJc01Dd3dMREVzTVRJdU5EUXRNeTR5TXl3
Mk1pNDBOQ3cyTWk0ME5Dd3dMREFzTVN3eE1pNDNPQzB4TGpNNVFUSTFMamt5TERJMUxqa3lMREFz
TUN3eExERTVOaXd5TVM0ME5HRTJMalUxTERZdU5UVXNNQ3d3TERFc01pNHdOU3c1TERZdU5qWXNO
aTQyTml3d0xEQXNNUzB4TGpZMExERXVOemhzTFM0ME1TNHlPV0V5TWk0d055d3lNaTR3Tnl3d0xE
QXNNUzAxTGpjNExETXNNekF1TkRJc016QXVORElzTUN3d0xERXROUzQyTnl3eExqWXlMRE0zTGpn
eUxETTNMamd5TERBc01Dd3hMVFV1TmprdU56RmpMVEVzTUMweExqa3VNVGd0TWk0NE5TNHlObXd0
TWk0NE5TNHlOSEV0TlM0M01pNDFNUzB4TVM0ME9Dd3hMakZqTFRNdU9EUXVOQzAzTGpjeExqZ3lM
VEV4TGpVNExERXVOR0V4TVRJdU16UXNNVEV5TGpNMExEQXNNQ3d3TFRJeUxqazBMRFV1TmpGakxU
TXVOeklzTVM0ek5TMDNMak0wTERNdE1UQXVPVFFzTkM0Mk5ITXROeTR4TkN3ekxqVXhMVEV3TGpZ
c05TNDFNVUV4TlRFdU5pd3hOVEV1Tml3d0xEQXNNQ3cyT0M0MU5pdzROME0yTnk0eU15dzRPQzQw
T0N3Mk5pdzVNQ3cyTkM0Mk5DdzVNUzQxTm5NdE1pNDFNU3d6TGpFMUxUTXVOelVzTkM0M00yd3RN
eTQxTkN3MExqbGpMVEV1TVRNc01TNDJOaTB5TGpJekxETXVNelV0TXk0ek15dzFZVEV5Tnl3eE1q
Y3NNQ3d3TERBdE1UQXVPVE1zTWpFdU5Ea3NNUzQxT0N3eExqVTRMREFzTVN3eExUTXRNUzR4TlZN
ME1DNHhPU3d4TWpZdU5EY3NOREF1TWpFc01USTJMalF6V2lJdlBqeHlaV04wSUdOc1lYTnpQU0pq
YkhNdE1pSWdkMmxrZEdnOUlqTTVNaUlnYUdWcFoyaDBQU0l6T1RJaUx6NDhMMmMrUEM5blBqd3Zj
M1puUGc9PSI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbWdTcGlu
bmVyLnNyYyA9IERlZmF1bHRMb2FkaW5nU2NyZWVuLkRlZmF1bHRTcGlubmVyVXJsOworICAgICAg
ICB9CisgICAgICAgIGltZ1NwaW5uZXIuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICAg
ICAgICBpbWdTcGlubmVyLnN0eWxlLmxlZnQgPSAiMzAlIjsKKyAgICAgICAgaW1nU3Bpbm5lci5z
dHlsZS50b3AgPSAiMzAlIjsKKyAgICAgICAgaW1nU3Bpbm5lci5zdHlsZS53aWR0aCA9ICI0MCUi
OworICAgICAgICBpbWdTcGlubmVyLnN0eWxlLmhlaWdodCA9ICI0MCUiOworICAgICAgICBpbWdT
cGlubmVyLnN0eWxlLmFuaW1hdGlvbiA9ICJzcGluMSAwLjc1cyBpbmZpbml0ZSBsaW5lYXIiOwor
ICAgICAgICBpbWdTcGlubmVyLnN0eWxlLndlYmtpdEFuaW1hdGlvbiA9ICJzcGluMSAwLjc1cyBp
bmZpbml0ZSBsaW5lYXIiOworICAgICAgICBpbWdTcGlubmVyLnN0eWxlLnRyYW5zZm9ybU9yaWdp
biA9ICI1MCUgNTAlIjsKKyAgICAgICAgaW1nU3Bpbm5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm1P
cmlnaW4gPSAiNTAlIDUwJSI7CisgICAgICAgIHRoaXMuX2xvYWRpbmdEaXYuYXBwZW5kQ2hpbGQo
aW1nQmFjayk7CisgICAgICAgIHRoaXMuX2xvYWRpbmdEaXYuYXBwZW5kQ2hpbGQoaW1nU3Bpbm5l
cik7CisgICAgICAgIHRoaXMuX3Jlc2l6ZUxvYWRpbmdVSSgpOworICAgICAgICB3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5fcmVzaXplTG9hZGluZ1VJKTsKKyAgICAgICAg
dGhpcy5fbG9hZGluZ0Rpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLl9sb2FkaW5nRGl2
QmFja2dyb3VuZENvbG9yOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMu
X2xvYWRpbmdEaXYpOworICAgICAgICB0aGlzLl9sb2FkaW5nRGl2LnN0eWxlLm9wYWNpdHkgPSAi
MSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiBjYWxsZWQgdG8gaGlkZSB0aGUg
bG9hZGluZyBzY3JlZW4KKyAgICAgKi8KKyAgICBEZWZhdWx0TG9hZGluZ1NjcmVlbi5wcm90b3R5
cGUuaGlkZUxvYWRpbmdVSSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhp
czsKKyAgICAgICAgaWYgKCF0aGlzLl9sb2FkaW5nRGl2KSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9uVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGlmICghX3RoaXMuX2xvYWRpbmdEaXYpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX3RoaXMuX2xvYWRpbmdEaXYu
cGFyZW50RWxlbWVudCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9sb2FkaW5nRGl2LnBhcmVu
dEVsZW1lbnQucmVtb3ZlQ2hpbGQoX3RoaXMuX2xvYWRpbmdEaXYpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIF90aGlzLl9y
ZXNpemVMb2FkaW5nVUkpOworICAgICAgICAgICAgX3RoaXMuX2xvYWRpbmdEaXYgPSBudWxsOwor
ICAgICAgICB9OworICAgICAgICB0aGlzLl9sb2FkaW5nRGl2LnN0eWxlLm9wYWNpdHkgPSAiMCI7
CisgICAgICAgIHRoaXMuX2xvYWRpbmdEaXYuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVu
ZCIsIG9uVHJhbnNpdGlvbkVuZCk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
RGVmYXVsdExvYWRpbmdTY3JlZW4ucHJvdG90eXBlLCAibG9hZGluZ1VJVGV4dCIsIHsKKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ1Rl
eHQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhl
IHRleHQgdG8gZGlzcGxheSB3aGlsZSBsb2FkaW5nCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh0ZXh0KSB7CisgICAgICAgICAgICB0aGlzLl9sb2FkaW5nVGV4dCA9IHRleHQ7
CisgICAgICAgICAgICBpZiAodGhpcy5fbG9hZGluZ1RleHREaXYpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9sb2FkaW5nVGV4dERpdi5pbm5lckhUTUwgPSB0aGlzLl9sb2FkaW5nVGV4dDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KERlZmF1bHRMb2FkaW5nU2NyZWVuLnByb3RvdHlwZSwgImxvYWRpbmdVSUJhY2tncm91bmRDb2xv
ciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY29sb3IgdG8g
dXNlIGZvciB0aGUgYmFja2dyb3VuZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ0RpdkJhY2tncm91bmRDb2xv
cjsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY29sb3IpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2xvYWRpbmdEaXZCYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgICAg
IGlmICghdGhpcy5fbG9hZGluZ0RpdikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdEaXYuc3R5bGUuYmFja2dyb3VuZENv
bG9yID0gdGhpcy5fbG9hZGluZ0RpdkJhY2tncm91bmRDb2xvcjsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgLyoqIEdldHMgb3Igc2V0cyB0aGUgbG9nbyB1cmwgdG8gdXNlIGZvciB0aGUgZGVmYXVs
dCBsb2FkaW5nIHNjcmVlbiAqLworICAgIERlZmF1bHRMb2FkaW5nU2NyZWVuLkRlZmF1bHRMb2dv
VXJsID0gIiI7CisgICAgLyoqIEdldHMgb3Igc2V0cyB0aGUgc3Bpbm5lciB1cmwgdG8gdXNlIGZv
ciB0aGUgZGVmYXVsdCBsb2FkaW5nIHNjcmVlbiAqLworICAgIERlZmF1bHRMb2FkaW5nU2NyZWVu
LkRlZmF1bHRTcGlubmVyVXJsID0gIiI7CisgICAgcmV0dXJuIERlZmF1bHRMb2FkaW5nU2NyZWVu
OworfSgpKTsKKworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkVuZ2luZSJdLkRlZmF1bHRMb2FkaW5nU2NyZWVuRmFjdG9yeSA9IGZ1bmN0aW9uIChjYW52YXMp
IHsgcmV0dXJuIG5ldyBEZWZhdWx0TG9hZGluZ1NjcmVlbihjYW52YXMpOyB9OworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9Mb2FkaW5nL3NjZW5lTG9hZGVyLnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Mb2FkaW5nL3NjZW5lTG9hZGVyLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IFNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudCwgU2NlbmVMb2FkZXIgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVMb2FkZXJQcm9ncmVzc0V2ZW50Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBTY2VuZUxvYWRlclByb2dyZXNzRXZlbnQ7IH0pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiU2NlbmVMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNjZW5lTG9hZGVy
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAq
LyAiLi9NaXNjL3Rvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2ZpbGVzSW5wdXRTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9maWxlc0lu
cHV0U3RvcmUgKi8gIi4vTWlzYy9maWxlc0lucHV0U3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVz
L2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZVN0
b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5lU3RvcmUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIu
L01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZUxvYWRlckZsYWdzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NjZW5lTG9hZGVyRmxh
Z3MgKi8gIi4vTG9hZGluZy9zY2VuZUxvYWRlckZsYWdzLnRzIik7CisKKworCisKKworCisKKwor
CisvKioKKyAqIENsYXNzIHVzZWQgdG8gcmVwcmVzZW50IGRhdGEgbG9hZGluZyBwcm9ncmVzc2lv
bgorICovCit2YXIgU2NlbmVMb2FkZXJQcm9ncmVzc0V2ZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBwcm9ncmVzcyBldmVudAor
ICAgICAqIEBwYXJhbSBsZW5ndGhDb21wdXRhYmxlIGRlZmluZXMgaWYgZGF0YSBsZW5ndGggdG8g
bG9hZCBjYW4gYmUgZXZhbHVhdGVkCisgICAgICogQHBhcmFtIGxvYWRlZCBkZWZpbmVzIHRoZSBs
b2FkZWQgZGF0YSBsZW5ndGgKKyAgICAgKiBAcGFyYW0gdG90YWwgZGVmaW5lcyB0aGUgZGF0YSBs
ZW5ndGggdG8gbG9hZAorICAgICAqLworICAgIGZ1bmN0aW9uIFNjZW5lTG9hZGVyUHJvZ3Jlc3NF
dmVudCgKKyAgICAvKiogZGVmaW5lcyBpZiBkYXRhIGxlbmd0aCB0byBsb2FkIGNhbiBiZSBldmFs
dWF0ZWQgKi8KKyAgICBsZW5ndGhDb21wdXRhYmxlLCAKKyAgICAvKiogZGVmaW5lcyB0aGUgbG9h
ZGVkIGRhdGEgbGVuZ3RoICovCisgICAgbG9hZGVkLCAKKyAgICAvKiogZGVmaW5lcyB0aGUgZGF0
YSBsZW5ndGggdG8gbG9hZCAqLworICAgIHRvdGFsKSB7CisgICAgICAgIHRoaXMubGVuZ3RoQ29t
cHV0YWJsZSA9IGxlbmd0aENvbXB1dGFibGU7CisgICAgICAgIHRoaXMubG9hZGVkID0gbG9hZGVk
OworICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7CisgICAgfQorICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBuZXcgU2NlbmVMb2FkZXJQcm9ncmVzc0V2ZW50IGZyb20gYSBQcm9ncmVzc0V2ZW50
CisgICAgICogQHBhcmFtIGV2ZW50IGRlZmluZXMgdGhlIHNvdXJjZSBldmVudAorICAgICAqIEBy
ZXR1cm5zIGEgbmV3IFNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudAorICAgICAqLworICAgIFNjZW5l
TG9hZGVyUHJvZ3Jlc3NFdmVudC5Gcm9tUHJvZ3Jlc3NFdmVudCA9IGZ1bmN0aW9uIChldmVudCkg
eworICAgICAgICByZXR1cm4gbmV3IFNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudChldmVudC5sZW5n
dGhDb21wdXRhYmxlLCBldmVudC5sb2FkZWQsIGV2ZW50LnRvdGFsKTsKKyAgICB9OworICAgIHJl
dHVybiBTY2VuZUxvYWRlclByb2dyZXNzRXZlbnQ7Cit9KCkpOworCisvKioKKyAqIENsYXNzIHVz
ZWQgdG8gbG9hZCBzY2VuZSBmcm9tIHZhcmlvdXMgZmlsZSBmb3JtYXRzIHVzaW5nIHJlZ2lzdGVy
ZWQgcGx1Z2lucworICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2xvYWRf
ZnJvbV9hbnlfZmlsZV90eXBlCisgKi8KK3ZhciBTY2VuZUxvYWRlciA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBTY2VuZUxvYWRlcigpIHsKKyAgICB9CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lTG9hZGVyLCAiRm9yY2VGdWxsU2NlbmVMb2FkaW5n
Rm9ySW5jcmVtZW50YWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMg
YSBib29sZWFuIGluZGljYXRpbmcgaWYgZW50aXJlIHNjZW5lIG11c3QgYmUgbG9hZGVkIGV2ZW4g
aWYgc2NlbmUgY29udGFpbnMgaW5jcmVtZW50YWwgZGF0YQorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX3NjZW5lTG9hZGVyRmxhZ3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2NlbmVMb2FkZXJGbGFncyJdLkZvcmNlRnVs
bFNjZW5lTG9hZGluZ0ZvckluY3JlbWVudGFsOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgX3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfX1siU2NlbmVMb2FkZXJGbGFncyJdLkZvcmNlRnVsbFNjZW5lTG9h
ZGluZ0ZvckluY3JlbWVudGFsID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShTY2VuZUxvYWRlciwgIlNob3dMb2FkaW5nU2NyZWVuIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlm
IGxvYWRpbmcgc2NyZWVuIG11c3QgYmUgZGlzcGxheWVkIHdoaWxlIGxvYWRpbmcgYSBzY2VuZQor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gX3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2NlbmVM
b2FkZXJGbGFncyJdLlNob3dMb2FkaW5nU2NyZWVuOworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgX3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2NlbmVMb2FkZXJGbGFncyJdLlNob3dMb2FkaW5nU2Ny
ZWVuID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTY2VuZUxvYWRlciwgImxvZ2dpbmdMZXZlbCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZXMgdGhlIGN1cnJlbnQgbG9nZ2luZyBsZXZlbCAod2hpbGUgbG9hZGluZyB0aGUgc2Nl
bmUpCisgICAgICAgICAqIEBpZ25vcmVuYW1pbmcKKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9zY2VuZUxvYWRlckZsYWdzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlNjZW5lTG9hZGVyRmxhZ3MiXS5sb2dnaW5nTGV2ZWw7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICBfc2NlbmVMb2FkZXJGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJTY2VuZUxv
YWRlckZsYWdzIl0ubG9nZ2luZ0xldmVsID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZUxvYWRlciwgIkNsZWFuQm9uZU1hdHJpeFdlaWdo
dHMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldCBhIGJvb2xlYW4gaW5k
aWNhdGluZyBpZiBtYXRyaXggd2VpZ2h0cyBtdXN0IGJlIGNsZWFuZWQgdXBvbiBsb2FkaW5nCisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biBfc2NlbmVMb2FkZXJGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJTY2VuZUxv
YWRlckZsYWdzIl0uQ2xlYW5Cb25lTWF0cml4V2VpZ2h0czsKKyAgICAgICAgfSwKKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIF9zY2VuZUxvYWRlckZsYWdzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlNjZW5lTG9hZGVyRmxhZ3MiXS5DbGVhbkJvbmVN
YXRyaXhXZWlnaHRzID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIFNjZW5lTG9hZGVy
Ll9nZXREZWZhdWx0UGx1Z2luID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gU2NlbmVM
b2FkZXIuX3JlZ2lzdGVyZWRQbHVnaW5zWyIuYmFieWxvbiJdOworICAgIH07CisgICAgU2NlbmVM
b2FkZXIuX2dldFBsdWdpbkZvckV4dGVuc2lvbiA9IGZ1bmN0aW9uIChleHRlbnNpb24pIHsKKyAg
ICAgICAgdmFyIHJlZ2lzdGVyZWRQbHVnaW4gPSBTY2VuZUxvYWRlci5fcmVnaXN0ZXJlZFBsdWdp
bnNbZXh0ZW5zaW9uXTsKKyAgICAgICAgaWYgKHJlZ2lzdGVyZWRQbHVnaW4pIHsKKyAgICAgICAg
ICAgIHJldHVybiByZWdpc3RlcmVkUGx1Z2luOworICAgICAgICB9CisgICAgICAgIF9NaXNjX2xv
Z2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJMb2dnZXIiXS5XYXJuKCJVbmFibGUg
dG8gZmluZCBhIHBsdWdpbiB0byBsb2FkICIgKyBleHRlbnNpb24gKyAiIGZpbGVzLiBUcnlpbmcg
dG8gdXNlIC5iYWJ5bG9uIGRlZmF1bHQgcGx1Z2luLiBUbyBsb2FkIGZyb20gYSBzcGVjaWZpYyBm
aWxldHlwZSAoZWcuIGdsdGYpIHNlZTogaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9s
b2FkX2Zyb21fYW55X2ZpbGVfdHlwZSIpOworICAgICAgICByZXR1cm4gU2NlbmVMb2FkZXIuX2dl
dERlZmF1bHRQbHVnaW4oKTsKKyAgICB9OworICAgIFNjZW5lTG9hZGVyLl9nZXRQbHVnaW5Gb3JE
aXJlY3RMb2FkID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgZm9yICh2YXIgZXh0ZW5zaW9u
IGluIFNjZW5lTG9hZGVyLl9yZWdpc3RlcmVkUGx1Z2lucykgeworICAgICAgICAgICAgdmFyIHBs
dWdpbiA9IFNjZW5lTG9hZGVyLl9yZWdpc3RlcmVkUGx1Z2luc1tleHRlbnNpb25dLnBsdWdpbjsK
KyAgICAgICAgICAgIGlmIChwbHVnaW4uY2FuRGlyZWN0TG9hZCAmJiBwbHVnaW4uY2FuRGlyZWN0
TG9hZChkYXRhKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBTY2VuZUxvYWRlci5fcmVnaXN0
ZXJlZFBsdWdpbnNbZXh0ZW5zaW9uXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gU2NlbmVMb2FkZXIuX2dldERlZmF1bHRQbHVnaW4oKTsKKyAgICB9OworICAgIFNj
ZW5lTG9hZGVyLl9nZXRQbHVnaW5Gb3JGaWxlbmFtZSA9IGZ1bmN0aW9uIChzY2VuZUZpbGVuYW1l
KSB7CisgICAgICAgIHZhciBxdWVyeVN0cmluZ1Bvc2l0aW9uID0gc2NlbmVGaWxlbmFtZS5pbmRl
eE9mKCI/Iik7CisgICAgICAgIGlmIChxdWVyeVN0cmluZ1Bvc2l0aW9uICE9PSAtMSkgeworICAg
ICAgICAgICAgc2NlbmVGaWxlbmFtZSA9IHNjZW5lRmlsZW5hbWUuc3Vic3RyaW5nKDAsIHF1ZXJ5
U3RyaW5nUG9zaXRpb24pOworICAgICAgICB9CisgICAgICAgIHZhciBkb3RQb3NpdGlvbiA9IHNj
ZW5lRmlsZW5hbWUubGFzdEluZGV4T2YoIi4iKTsKKyAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHNj
ZW5lRmlsZW5hbWUuc3Vic3RyaW5nKGRvdFBvc2l0aW9uLCBzY2VuZUZpbGVuYW1lLmxlbmd0aCku
dG9Mb3dlckNhc2UoKTsKKyAgICAgICAgcmV0dXJuIFNjZW5lTG9hZGVyLl9nZXRQbHVnaW5Gb3JF
eHRlbnNpb24oZXh0ZW5zaW9uKTsKKyAgICB9OworICAgIC8vIHVzZSBiYWJ5bG9uIGZpbGUgbG9h
ZGVyIGRpcmVjdGx5IGlmIHNjZW5lRmlsZW5hbWUgaXMgcHJlZml4ZWQgd2l0aCAiZGF0YToiCisg
ICAgU2NlbmVMb2FkZXIuX2dldERpcmVjdExvYWQgPSBmdW5jdGlvbiAoc2NlbmVGaWxlbmFtZSkg
eworICAgICAgICBpZiAoc2NlbmVGaWxlbmFtZS5zdWJzdHIoMCwgNSkgPT09ICJkYXRhOiIpIHsK
KyAgICAgICAgICAgIHJldHVybiBzY2VuZUZpbGVuYW1lLnN1YnN0cig1KTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIFNjZW5lTG9hZGVyLl9sb2FkRGF0YSA9
IGZ1bmN0aW9uIChmaWxlSW5mbywgc2NlbmUsIG9uU3VjY2Vzcywgb25Qcm9ncmVzcywgb25FcnJv
ciwgb25EaXNwb3NlLCBwbHVnaW5FeHRlbnNpb24pIHsKKyAgICAgICAgdmFyIGRpcmVjdExvYWQg
PSBTY2VuZUxvYWRlci5fZ2V0RGlyZWN0TG9hZChmaWxlSW5mby5uYW1lKTsKKyAgICAgICAgdmFy
IHJlZ2lzdGVyZWRQbHVnaW4gPSBwbHVnaW5FeHRlbnNpb24gPyBTY2VuZUxvYWRlci5fZ2V0UGx1
Z2luRm9yRXh0ZW5zaW9uKHBsdWdpbkV4dGVuc2lvbikgOiAoZGlyZWN0TG9hZCA/IFNjZW5lTG9h
ZGVyLl9nZXRQbHVnaW5Gb3JEaXJlY3RMb2FkKGZpbGVJbmZvLm5hbWUpIDogU2NlbmVMb2FkZXIu
X2dldFBsdWdpbkZvckZpbGVuYW1lKGZpbGVJbmZvLm5hbWUpKTsKKyAgICAgICAgdmFyIHBsdWdp
bjsKKyAgICAgICAgaWYgKHJlZ2lzdGVyZWRQbHVnaW4ucGx1Z2luLmNyZWF0ZVBsdWdpbikgewor
ICAgICAgICAgICAgcGx1Z2luID0gcmVnaXN0ZXJlZFBsdWdpbi5wbHVnaW4uY3JlYXRlUGx1Z2lu
KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwbHVnaW4gPSByZWdp
c3RlcmVkUGx1Z2luLnBsdWdpbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBsdWdpbikgewor
ICAgICAgICAgICAgdGhyb3cgIlRoZSBsb2FkZXIgcGx1Z2luIGNvcnJlc3BvbmRpbmcgdG8gdGhl
IGZpbGUgdHlwZSB5b3UgYXJlIHRyeWluZyB0byBsb2FkIGhhcyBub3QgYmVlbiBmb3VuZC4gSWYg
dXNpbmcgZXM2LCBwbGVhc2UgaW1wb3J0IHRoZSBwbHVnaW4geW91IHdpc2ggdG8gdXNlIGJlZm9y
ZS4iOworICAgICAgICB9CisgICAgICAgIHZhciB1c2VBcnJheUJ1ZmZlciA9IHJlZ2lzdGVyZWRQ
bHVnaW4uaXNCaW5hcnk7CisgICAgICAgIHZhciBvZmZsaW5lUHJvdmlkZXI7CisgICAgICAgIFNj
ZW5lTG9hZGVyLk9uUGx1Z2luQWN0aXZhdGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMocGx1
Z2luKTsKKyAgICAgICAgdmFyIGRhdGFDYWxsYmFjayA9IGZ1bmN0aW9uIChkYXRhLCByZXNwb25z
ZVVSTCkgeworICAgICAgICAgICAgaWYgKHNjZW5lLmlzRGlzcG9zZWQpIHsKKyAgICAgICAgICAg
ICAgICBvbkVycm9yKCJTY2VuZSBoYXMgYmVlbiBkaXNwb3NlZCIpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNjZW5lLm9mZmxpbmVQcm92aWRl
ciA9IG9mZmxpbmVQcm92aWRlcjsKKyAgICAgICAgICAgIG9uU3VjY2VzcyhwbHVnaW4sIGRhdGEs
IHJlc3BvbnNlVVJMKTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSBudWxsOwor
ICAgICAgICB2YXIgcGx1Z2luRGlzcG9zZWQgPSBmYWxzZTsKKyAgICAgICAgdmFyIG9uRGlzcG9z
ZU9ic2VydmFibGUgPSBwbHVnaW4ub25EaXNwb3NlT2JzZXJ2YWJsZTsKKyAgICAgICAgaWYgKG9u
RGlzcG9zZU9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIG9uRGlzcG9zZU9ic2VydmFibGUuYWRk
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBwbHVnaW5EaXNwb3NlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dC5hYm9ydCgpOworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gbnVsbDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgb25EaXNwb3NlKCk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgbWFuaWZlc3RDaGVja2VkID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgaWYgKHBsdWdpbkRpc3Bvc2VkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVxdWVzdCA9IF9NaXNjX3Rvb2xzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRvb2xzIl0uTG9hZEZpbGUoZmlsZUluZm8udXJsLCBk
YXRhQ2FsbGJhY2ssIG9uUHJvZ3Jlc3MgPyBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAg
ICAgICBvblByb2dyZXNzKFNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudC5Gcm9tUHJvZ3Jlc3NFdmVu
dChldmVudCkpOworICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCwgb2ZmbGluZVByb3ZpZGVyLCB1
c2VBcnJheUJ1ZmZlciwgZnVuY3Rpb24gKHJlcXVlc3QsIGV4Y2VwdGlvbikgeworICAgICAgICAg
ICAgICAgIG9uRXJyb3IoIkZhaWxlZCB0byBsb2FkIHNjZW5lLiIgKyAoZXhjZXB0aW9uID8gIiAi
ICsgZXhjZXB0aW9uLm1lc3NhZ2UgOiAiIiksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfTsKKyAgICAgICAgaWYgKGRpcmVjdExvYWQpIHsKKyAgICAgICAgICAgIGRhdGFD
YWxsYmFjayhkaXJlY3RMb2FkKTsKKyAgICAgICAgICAgIHJldHVybiBwbHVnaW47CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGZpbGUgPSBmaWxlSW5mby5maWxlIHx8IF9NaXNjX2ZpbGVzSW5wdXRT
dG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJGaWxlc0lucHV0U3RvcmUiXS5GaWxl
c1RvTG9hZFtmaWxlSW5mby5uYW1lLnRvTG93ZXJDYXNlKCldOworICAgICAgICBpZiAoZmlsZUlu
Zm8ucm9vdFVybC5pbmRleE9mKCJmaWxlOiIpID09PSAtMSB8fCAoZmlsZUluZm8ucm9vdFVybC5p
bmRleE9mKCJmaWxlOiIpICE9PSAtMSAmJiAhZmlsZSkpIHsKKyAgICAgICAgICAgIHZhciBlbmdp
bmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgICAgIHZhciBjYW5Vc2VPZmZsaW5lU3Vw
cG9ydCA9IGVuZ2luZS5lbmFibGVPZmZsaW5lU3VwcG9ydDsKKyAgICAgICAgICAgIGlmIChjYW5V
c2VPZmZsaW5lU3VwcG9ydCkgeworICAgICAgICAgICAgICAgIC8vIEFsc28gY2hlY2sgZm9yIGV4
Y2VwdGlvbnMKKyAgICAgICAgICAgICAgICB2YXIgZXhjZXB0aW9uRm91bmQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gc2NlbmUuZGlzYWJsZU9mZmxpbmVT
dXBwb3J0RXhjZXB0aW9uUnVsZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhciByZWdleCA9IF9hW19pXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJl
Z2V4LnRlc3QoZmlsZUluZm8udXJsKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9uRm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FuVXNl
T2ZmbGluZVN1cHBvcnQgPSAhZXhjZXB0aW9uRm91bmQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoY2FuVXNlT2ZmbGluZVN1cHBvcnQgJiYgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdLk9mZmxpbmVQcm92aWRlckZhY3RvcnkpIHsK
KyAgICAgICAgICAgICAgICAvLyBDaGVja2luZyBpZiBhIG1hbmlmZXN0IGZpbGUgaGFzIGJlZW4g
c2V0IGZvciB0aGlzIHNjZW5lIGFuZCBpZiBvZmZsaW5lIG1vZGUgaGFzIGJlZW4gcmVxdWVzdGVk
CisgICAgICAgICAgICAgICAgb2ZmbGluZVByb3ZpZGVyID0gX0VuZ2luZXNfZW5naW5lX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdLk9mZmxpbmVQcm92aWRlckZhY3Rvcnko
ZmlsZUluZm8udXJsLCBtYW5pZmVzdENoZWNrZWQsIGVuZ2luZS5kaXNhYmxlTWFuaWZlc3RDaGVj
ayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBt
YW5pZmVzdENoZWNrZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBM
b2FkaW5nIGZpbGUgZnJvbSBkaXNrIHZpYSBpbnB1dCBmaWxlIG9yIGRyYWcnbidkcm9wCisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGZpbGUpIHsKKyAgICAgICAgICAgICAgICByZXF1
ZXN0ID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5S
ZWFkRmlsZShmaWxlLCBkYXRhQ2FsbGJhY2ssIG9uUHJvZ3Jlc3MsIHVzZUFycmF5QnVmZmVyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG9uRXJy
b3IoIlVuYWJsZSB0byBmaW5kIGZpbGUgbmFtZWQgIiArIGZpbGVJbmZvLm5hbWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwbHVnaW47CisgICAgfTsKKyAgICBT
Y2VuZUxvYWRlci5fZ2V0RmlsZUluZm8gPSBmdW5jdGlvbiAocm9vdFVybCwgc2NlbmVGaWxlbmFt
ZSkgeworICAgICAgICB2YXIgdXJsOworICAgICAgICB2YXIgbmFtZTsKKyAgICAgICAgdmFyIGZp
bGUgPSBudWxsOworICAgICAgICBpZiAoIXNjZW5lRmlsZW5hbWUpIHsKKyAgICAgICAgICAgIHVy
bCA9IHJvb3RVcmw7CisgICAgICAgICAgICBuYW1lID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5HZXRGaWxlbmFtZShyb290VXJsKTsKKyAgICAgICAg
ICAgIHJvb3RVcmwgPSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJU
b29scyJdLkdldEZvbGRlclBhdGgocm9vdFVybCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoc2NlbmVGaWxlbmFtZS5uYW1lKSB7CisgICAgICAgICAgICB2YXIgc2NlbmVGaWxlID0gc2Nl
bmVGaWxlbmFtZTsKKyAgICAgICAgICAgIHVybCA9IHJvb3RVcmwgKyBzY2VuZUZpbGUubmFtZTsK
KyAgICAgICAgICAgIG5hbWUgPSBzY2VuZUZpbGUubmFtZTsKKyAgICAgICAgICAgIGZpbGUgPSBz
Y2VuZUZpbGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgZmls
ZW5hbWUgPSBzY2VuZUZpbGVuYW1lOworICAgICAgICAgICAgaWYgKGZpbGVuYW1lLnN1YnN0cigw
LCAxKSA9PT0gIi8iKSB7CisgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5FcnJvcigiV3Jvbmcgc2NlbmVGaWxlbmFtZSBwYXJh
bWV0ZXIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHVybCA9IHJvb3RVcmwgKyBmaWxlbmFtZTsKKyAgICAgICAgICAgIG5hbWUgPSBm
aWxlbmFtZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdXJsOiB1
cmwsCisgICAgICAgICAgICByb290VXJsOiByb290VXJsLAorICAgICAgICAgICAgbmFtZTogbmFt
ZSwKKyAgICAgICAgICAgIGZpbGU6IGZpbGUKKyAgICAgICAgfTsKKyAgICB9OworICAgIC8vIFB1
YmxpYyBmdW5jdGlvbnMKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgcGx1Z2luIHRoYXQgY2FuIGxv
YWQgdGhlIGdpdmVuIGV4dGVuc2lvbgorICAgICAqIEBwYXJhbSBleHRlbnNpb24gZGVmaW5lcyB0
aGUgZXh0ZW5zaW9uIHRvIGxvYWQKKyAgICAgKiBAcmV0dXJucyBhIHBsdWdpbiBvciBudWxsIGlm
IG5vbmUgd29ya3MKKyAgICAgKi8KKyAgICBTY2VuZUxvYWRlci5HZXRQbHVnaW5Gb3JFeHRlbnNp
b24gPSBmdW5jdGlvbiAoZXh0ZW5zaW9uKSB7CisgICAgICAgIHJldHVybiBTY2VuZUxvYWRlci5f
Z2V0UGx1Z2luRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbikucGx1Z2luOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBnaXZlbiBleHRlbnNp
b24gY2FuIGJlIGxvYWRlZAorICAgICAqIEBwYXJhbSBleHRlbnNpb24gZGVmaW5lcyB0aGUgZXh0
ZW5zaW9uIHRvIGxvYWQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBleHRlbnNpb24gaXMg
c3VwcG9ydGVkCisgICAgICovCisgICAgU2NlbmVMb2FkZXIuSXNQbHVnaW5Gb3JFeHRlbnNpb25B
dmFpbGFibGUgPSBmdW5jdGlvbiAoZXh0ZW5zaW9uKSB7CisgICAgICAgIHJldHVybiAhIVNjZW5l
TG9hZGVyLl9yZWdpc3RlcmVkUGx1Z2luc1tleHRlbnNpb25dOworICAgIH07CisgICAgLyoqCisg
ICAgICogQWRkcyBhIG5ldyBwbHVnaW4gdG8gdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBwbHVnaW5z
CisgICAgICogQHBhcmFtIHBsdWdpbiBkZWZpbmVzIHRoZSBwbHVnaW4gdG8gYWRkCisgICAgICov
CisgICAgU2NlbmVMb2FkZXIuUmVnaXN0ZXJQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luKSB7Cisg
ICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLmV4dGVuc2lvbnMgPT09ICJzdHJpbmciKSB7CisgICAg
ICAgICAgICB2YXIgZXh0ZW5zaW9uID0gcGx1Z2luLmV4dGVuc2lvbnM7CisgICAgICAgICAgICBT
Y2VuZUxvYWRlci5fcmVnaXN0ZXJlZFBsdWdpbnNbZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCldID0g
eworICAgICAgICAgICAgICAgIHBsdWdpbjogcGx1Z2luLAorICAgICAgICAgICAgICAgIGlzQmlu
YXJ5OiBmYWxzZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHZhciBleHRlbnNpb25zID0gcGx1Z2luLmV4dGVuc2lvbnM7CisgICAgICAgICAg
ICBPYmplY3Qua2V5cyhleHRlbnNpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChleHRlbnNpb24pIHsK
KyAgICAgICAgICAgICAgICBTY2VuZUxvYWRlci5fcmVnaXN0ZXJlZFBsdWdpbnNbZXh0ZW5zaW9u
LnRvTG93ZXJDYXNlKCldID0geworICAgICAgICAgICAgICAgICAgICBwbHVnaW46IHBsdWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgaXNCaW5hcnk6IGV4dGVuc2lvbnNbZXh0ZW5zaW9uXS5pc0Jp
bmFyeQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogSW1wb3J0IG1lc2hlcyBpbnRvIGEgc2NlbmUKKyAgICAgKiBA
cGFyYW0gbWVzaE5hbWVzIGFuIGFycmF5IG9mIG1lc2ggbmFtZXMsIGEgc2luZ2xlIG1lc2ggbmFt
ZSwgb3IgZW1wdHkgc3RyaW5nIGZvciBhbGwgbWVzaGVzIHRoYXQgZmlsdGVyIHdoYXQgbWVzaGVz
IGFyZSBpbXBvcnRlZAorICAgICAqIEBwYXJhbSByb290VXJsIGEgc3RyaW5nIHRoYXQgZGVmaW5l
cyB0aGUgcm9vdCB1cmwgZm9yIHRoZSBzY2VuZSBhbmQgcmVzb3VyY2VzIG9yIHRoZSBjb25jYXRl
bmF0aW9uIG9mIHJvb3RVUkwgYW5kIGZpbGVuYW1lIChlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbS90
ZXN0LmdsYikKKyAgICAgKiBAcGFyYW0gc2NlbmVGaWxlbmFtZSBhIHN0cmluZyB0aGF0IGRlZmlu
ZXMgdGhlIG5hbWUgb2YgdGhlIHNjZW5lIGZpbGUgb3Igc3RhcnRzIHdpdGggImRhdGE6IiBmb2xs
b3dpbmcgYnkgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHNjZW5lIG9yIGEgRmlsZSBv
YmplY3QgKGRlZmF1bHQ6IGVtcHR5IHN0cmluZykKKyAgICAgKiBAcGFyYW0gc2NlbmUgdGhlIGlu
c3RhbmNlIG9mIEJBQllMT04uU2NlbmUgdG8gYXBwZW5kIHRvCisgICAgICogQHBhcmFtIG9uU3Vj
Y2VzcyBhIGNhbGxiYWNrIHdpdGggYSBsaXN0IG9mIGltcG9ydGVkIG1lc2hlcywgcGFydGljbGVT
eXN0ZW1zLCBhbmQgc2tlbGV0b25zIHdoZW4gaW1wb3J0IHN1Y2NlZWRzCisgICAgICogQHBhcmFt
IG9uUHJvZ3Jlc3MgYSBjYWxsYmFjayB3aXRoIGEgcHJvZ3Jlc3MgZXZlbnQgZm9yIGVhY2ggZmls
ZSBiZWluZyBsb2FkZWQKKyAgICAgKiBAcGFyYW0gb25FcnJvciBhIGNhbGxiYWNrIHdpdGggdGhl
IHNjZW5lLCBhIG1lc3NhZ2UsIGFuZCBwb3NzaWJseSBhbiBleGNlcHRpb24gd2hlbiBpbXBvcnQg
ZmFpbHMKKyAgICAgKiBAcGFyYW0gcGx1Z2luRXh0ZW5zaW9uIHRoZSBleHRlbnNpb24gdXNlZCB0
byBkZXRlcm1pbmUgdGhlIHBsdWdpbgorICAgICAqIEByZXR1cm5zIFRoZSBsb2FkZWQgcGx1Z2lu
CisgICAgICovCisgICAgU2NlbmVMb2FkZXIuSW1wb3J0TWVzaCA9IGZ1bmN0aW9uIChtZXNoTmFt
ZXMsIHJvb3RVcmwsIHNjZW5lRmlsZW5hbWUsIHNjZW5lLCBvblN1Y2Nlc3MsIG9uUHJvZ3Jlc3Ms
IG9uRXJyb3IsIHBsdWdpbkV4dGVuc2lvbikgeworICAgICAgICBpZiAoc2NlbmVGaWxlbmFtZSA9
PT0gdm9pZCAwKSB7IHNjZW5lRmlsZW5hbWUgPSAiIjsgfQorICAgICAgICBpZiAoc2NlbmUgPT09
IHZvaWQgMCkgeyBzY2VuZSA9IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIkVuZ2luZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZTsgfQorICAgICAgICBp
ZiAob25TdWNjZXNzID09PSB2b2lkIDApIHsgb25TdWNjZXNzID0gbnVsbDsgfQorICAgICAgICBp
ZiAob25Qcm9ncmVzcyA9PT0gdm9pZCAwKSB7IG9uUHJvZ3Jlc3MgPSBudWxsOyB9CisgICAgICAg
IGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG51bGw7IH0KKyAgICAgICAgaWYg
KHBsdWdpbkV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IHBsdWdpbkV4dGVuc2lvbiA9IG51bGw7IH0K
KyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X19bIkxvZ2dlciJdLkVycm9yKCJObyBzY2VuZSBhdmFpbGFibGUg
dG8gaW1wb3J0IG1lc2ggdG8iKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9
CisgICAgICAgIHZhciBmaWxlSW5mbyA9IFNjZW5lTG9hZGVyLl9nZXRGaWxlSW5mbyhyb290VXJs
LCBzY2VuZUZpbGVuYW1lKTsKKyAgICAgICAgaWYgKCFmaWxlSW5mbykgeworICAgICAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGxvYWRpbmdUb2tlbiA9IHt9Owor
ICAgICAgICBzY2VuZS5fYWRkUGVuZGluZ0RhdGEobG9hZGluZ1Rva2VuKTsKKyAgICAgICAgdmFy
IGRpc3Bvc2VIYW5kbGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgc2NlbmUuX3JlbW92
ZVBlbmRpbmdEYXRhKGxvYWRpbmdUb2tlbik7CisgICAgICAgIH07CisgICAgICAgIHZhciBlcnJv
ckhhbmRsZXIgPSBmdW5jdGlvbiAobWVzc2FnZSwgZXhjZXB0aW9uKSB7CisgICAgICAgICAgICB2
YXIgZXJyb3JNZXNzYWdlID0gIlVuYWJsZSB0byBpbXBvcnQgbWVzaGVzIGZyb20gIiArIGZpbGVJ
bmZvLnVybCArICI6ICIgKyBtZXNzYWdlOworICAgICAgICAgICAgaWYgKG9uRXJyb3IpIHsKKyAg
ICAgICAgICAgICAgICBvbkVycm9yKHNjZW5lLCBlcnJvck1lc3NhZ2UsIGV4Y2VwdGlvbik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfTWlzY19s
b2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siTG9nZ2VyIl0uRXJyb3IoZXJyb3JN
ZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAvLyBzaG91bGQgdGhlIGV4Y2VwdGlvbiBiZSB0aHJv
d24/CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkaXNwb3NlSGFuZGxlcigpOworICAgICAg
ICB9OworICAgICAgICB2YXIgcHJvZ3Jlc3NIYW5kbGVyID0gb25Qcm9ncmVzcyA/IGZ1bmN0aW9u
IChldmVudCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBvblByb2dyZXNz
KGV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChlKSB7CisgICAgICAg
ICAgICAgICAgZXJyb3JIYW5kbGVyKCJFcnJvciBpbiBvblByb2dyZXNzIGNhbGxiYWNrOiAiICsg
ZSwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gOiB1bmRlZmluZWQ7CisgICAgICAgIHZh
ciBzdWNjZXNzSGFuZGxlciA9IGZ1bmN0aW9uIChtZXNoZXMsIHBhcnRpY2xlU3lzdGVtcywgc2tl
bGV0b25zLCBhbmltYXRpb25Hcm91cHMpIHsKKyAgICAgICAgICAgIHNjZW5lLmltcG9ydGVkTWVz
aGVzRmlsZXMucHVzaChmaWxlSW5mby51cmwpOworICAgICAgICAgICAgaWYgKG9uU3VjY2Vzcykg
eworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG9uU3VjY2Vzcyht
ZXNoZXMsIHBhcnRpY2xlU3lzdGVtcywgc2tlbGV0b25zLCBhbmltYXRpb25Hcm91cHMpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAg
ICAgICAgICBlcnJvckhhbmRsZXIoIkVycm9yIGluIG9uU3VjY2VzcyBjYWxsYmFjazogIiArIGUs
IGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNjZW5l
Ll9yZW1vdmVQZW5kaW5nRGF0YShsb2FkaW5nVG9rZW4pOworICAgICAgICB9OworICAgICAgICBy
ZXR1cm4gU2NlbmVMb2FkZXIuX2xvYWREYXRhKGZpbGVJbmZvLCBzY2VuZSwgZnVuY3Rpb24gKHBs
dWdpbiwgZGF0YSwgcmVzcG9uc2VVUkwpIHsKKyAgICAgICAgICAgIGlmIChwbHVnaW4ucmV3cml0
ZVJvb3RVUkwpIHsKKyAgICAgICAgICAgICAgICBmaWxlSW5mby5yb290VXJsID0gcGx1Z2luLnJl
d3JpdGVSb290VVJMKGZpbGVJbmZvLnJvb3RVcmwsIHJlc3BvbnNlVVJMKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChwbHVnaW4uaW1wb3J0TWVzaCkgeworICAgICAgICAgICAgICAg
IHZhciBzeW5jZWRQbHVnaW4gPSBwbHVnaW47CisgICAgICAgICAgICAgICAgdmFyIG1lc2hlcyA9
IG5ldyBBcnJheSgpOworICAgICAgICAgICAgICAgIHZhciBwYXJ0aWNsZVN5c3RlbXMgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b25zID0gbmV3IEFycmF5KCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFzeW5jZWRQbHVnaW4uaW1wb3J0TWVzaChtZXNoTmFtZXMsIHNj
ZW5lLCBkYXRhLCBmaWxlSW5mby5yb290VXJsLCBtZXNoZXMsIHBhcnRpY2xlU3lzdGVtcywgc2tl
bGV0b25zLCBlcnJvckhhbmRsZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2NlbmUubG9hZGluZ1BsdWdpbk5hbWUg
PSBwbHVnaW4ubmFtZTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzSGFuZGxlcihtZXNoZXMsIHBh
cnRpY2xlU3lzdGVtcywgc2tlbGV0b25zLCBbXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgYXN5bmNlZFBsdWdpbiA9IHBsdWdpbjsKKyAg
ICAgICAgICAgICAgICBhc3luY2VkUGx1Z2luLmltcG9ydE1lc2hBc3luYyhtZXNoTmFtZXMsIHNj
ZW5lLCBkYXRhLCBmaWxlSW5mby5yb290VXJsLCBwcm9ncmVzc0hhbmRsZXIsIGZpbGVJbmZvLm5h
bWUpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBzY2VuZS5s
b2FkaW5nUGx1Z2luTmFtZSA9IHBsdWdpbi5uYW1lOworICAgICAgICAgICAgICAgICAgICBzdWNj
ZXNzSGFuZGxlcihyZXN1bHQubWVzaGVzLCByZXN1bHQucGFydGljbGVTeXN0ZW1zLCByZXN1bHQu
c2tlbGV0b25zLCByZXN1bHQuYW5pbWF0aW9uR3JvdXBzKTsKKyAgICAgICAgICAgICAgICB9KS5j
YXRjaChmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVy
KGVycm9yLm1lc3NhZ2UsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwgcHJvZ3Jlc3NIYW5kbGVyLCBlcnJvckhhbmRsZXIsIGRpc3Bvc2VIYW5k
bGVyLCBwbHVnaW5FeHRlbnNpb24pOworICAgIH07CisgICAgLyoqCisgICAgICogSW1wb3J0IG1l
c2hlcyBpbnRvIGEgc2NlbmUKKyAgICAgKiBAcGFyYW0gbWVzaE5hbWVzIGFuIGFycmF5IG9mIG1l
c2ggbmFtZXMsIGEgc2luZ2xlIG1lc2ggbmFtZSwgb3IgZW1wdHkgc3RyaW5nIGZvciBhbGwgbWVz
aGVzIHRoYXQgZmlsdGVyIHdoYXQgbWVzaGVzIGFyZSBpbXBvcnRlZAorICAgICAqIEBwYXJhbSBy
b290VXJsIGEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgcm9vdCB1cmwgZm9yIHRoZSBzY2VuZSBh
bmQgcmVzb3VyY2VzIG9yIHRoZSBjb25jYXRlbmF0aW9uIG9mIHJvb3RVUkwgYW5kIGZpbGVuYW1l
IChlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbS90ZXN0LmdsYikKKyAgICAgKiBAcGFyYW0gc2NlbmVG
aWxlbmFtZSBhIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHNjZW5lIGZpbGUg
b3Igc3RhcnRzIHdpdGggImRhdGE6IiBmb2xsb3dpbmcgYnkgdGhlIHN0cmluZ2lmaWVkIHZlcnNp
b24gb2YgdGhlIHNjZW5lIG9yIGEgRmlsZSBvYmplY3QgKGRlZmF1bHQ6IGVtcHR5IHN0cmluZykK
KyAgICAgKiBAcGFyYW0gc2NlbmUgdGhlIGluc3RhbmNlIG9mIEJBQllMT04uU2NlbmUgdG8gYXBw
ZW5kIHRvCisgICAgICogQHBhcmFtIG9uUHJvZ3Jlc3MgYSBjYWxsYmFjayB3aXRoIGEgcHJvZ3Jl
c3MgZXZlbnQgZm9yIGVhY2ggZmlsZSBiZWluZyBsb2FkZWQKKyAgICAgKiBAcGFyYW0gcGx1Z2lu
RXh0ZW5zaW9uIHRoZSBleHRlbnNpb24gdXNlZCB0byBkZXRlcm1pbmUgdGhlIHBsdWdpbgorICAg
ICAqIEByZXR1cm5zIFRoZSBsb2FkZWQgbGlzdCBvZiBpbXBvcnRlZCBtZXNoZXMsIHBhcnRpY2xl
IHN5c3RlbXMsIHNrZWxldG9ucywgYW5kIGFuaW1hdGlvbiBncm91cHMKKyAgICAgKi8KKyAgICBT
Y2VuZUxvYWRlci5JbXBvcnRNZXNoQXN5bmMgPSBmdW5jdGlvbiAobWVzaE5hbWVzLCByb290VXJs
LCBzY2VuZUZpbGVuYW1lLCBzY2VuZSwgb25Qcm9ncmVzcywgcGx1Z2luRXh0ZW5zaW9uKSB7Cisg
ICAgICAgIGlmIChzY2VuZUZpbGVuYW1lID09PSB2b2lkIDApIHsgc2NlbmVGaWxlbmFtZSA9ICIi
OyB9CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gX0VuZ2luZXNfZW5n
aW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRW5naW5lU3RvcmUiXS5MYXN0
Q3JlYXRlZFNjZW5lOyB9CisgICAgICAgIGlmIChvblByb2dyZXNzID09PSB2b2lkIDApIHsgb25Q
cm9ncmVzcyA9IG51bGw7IH0KKyAgICAgICAgaWYgKHBsdWdpbkV4dGVuc2lvbiA9PT0gdm9pZCAw
KSB7IHBsdWdpbkV4dGVuc2lvbiA9IG51bGw7IH0KKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNl
KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIFNjZW5lTG9hZGVyLklt
cG9ydE1lc2gobWVzaE5hbWVzLCByb290VXJsLCBzY2VuZUZpbGVuYW1lLCBzY2VuZSwgZnVuY3Rp
b24gKG1lc2hlcywgcGFydGljbGVTeXN0ZW1zLCBza2VsZXRvbnMsIGFuaW1hdGlvbkdyb3Vwcykg
eworICAgICAgICAgICAgICAgIHJlc29sdmUoeworICAgICAgICAgICAgICAgICAgICBtZXNoZXM6
IG1lc2hlcywKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGVTeXN0ZW1zOiBwYXJ0aWNsZVN5
c3RlbXMsCisgICAgICAgICAgICAgICAgICAgIHNrZWxldG9uczogc2tlbGV0b25zLAorICAgICAg
ICAgICAgICAgICAgICBhbmltYXRpb25Hcm91cHM6IGFuaW1hdGlvbkdyb3VwcworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSwgb25Qcm9ncmVzcywgZnVuY3Rpb24gKHNjZW5lLCBt
ZXNzYWdlLCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgICAgICByZWplY3QoZXhjZXB0aW9uIHx8
IG5ldyBFcnJvcihtZXNzYWdlKSk7CisgICAgICAgICAgICB9LCBwbHVnaW5FeHRlbnNpb24pOwor
ICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIExvYWQgYSBzY2VuZQorICAgICAq
IEBwYXJhbSByb290VXJsIGEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgcm9vdCB1cmwgZm9yIHRo
ZSBzY2VuZSBhbmQgcmVzb3VyY2VzIG9yIHRoZSBjb25jYXRlbmF0aW9uIG9mIHJvb3RVUkwgYW5k
IGZpbGVuYW1lIChlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbS90ZXN0LmdsYikKKyAgICAgKiBAcGFy
YW0gc2NlbmVGaWxlbmFtZSBhIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHNj
ZW5lIGZpbGUgb3Igc3RhcnRzIHdpdGggImRhdGE6IiBmb2xsb3dpbmcgYnkgdGhlIHN0cmluZ2lm
aWVkIHZlcnNpb24gb2YgdGhlIHNjZW5lIG9yIGEgRmlsZSBvYmplY3QgKGRlZmF1bHQ6IGVtcHR5
IHN0cmluZykKKyAgICAgKiBAcGFyYW0gZW5naW5lIGlzIHRoZSBpbnN0YW5jZSBvZiBCQUJZTE9O
LkVuZ2luZSB0byB1c2UgdG8gY3JlYXRlIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBvblN1Y2Nl
c3MgYSBjYWxsYmFjayB3aXRoIHRoZSBzY2VuZSB3aGVuIGltcG9ydCBzdWNjZWVkcworICAgICAq
IEBwYXJhbSBvblByb2dyZXNzIGEgY2FsbGJhY2sgd2l0aCBhIHByb2dyZXNzIGV2ZW50IGZvciBl
YWNoIGZpbGUgYmVpbmcgbG9hZGVkCisgICAgICogQHBhcmFtIG9uRXJyb3IgYSBjYWxsYmFjayB3
aXRoIHRoZSBzY2VuZSwgYSBtZXNzYWdlLCBhbmQgcG9zc2libHkgYW4gZXhjZXB0aW9uIHdoZW4g
aW1wb3J0IGZhaWxzCisgICAgICogQHBhcmFtIHBsdWdpbkV4dGVuc2lvbiB0aGUgZXh0ZW5zaW9u
IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBwbHVnaW4KKyAgICAgKiBAcmV0dXJucyBUaGUgbG9hZGVk
IHBsdWdpbgorICAgICAqLworICAgIFNjZW5lTG9hZGVyLkxvYWQgPSBmdW5jdGlvbiAocm9vdFVy
bCwgc2NlbmVGaWxlbmFtZSwgZW5naW5lLCBvblN1Y2Nlc3MsIG9uUHJvZ3Jlc3MsIG9uRXJyb3Is
IHBsdWdpbkV4dGVuc2lvbikgeworICAgICAgICBpZiAoc2NlbmVGaWxlbmFtZSA9PT0gdm9pZCAw
KSB7IHNjZW5lRmlsZW5hbWUgPSAiIjsgfQorICAgICAgICBpZiAoZW5naW5lID09PSB2b2lkIDAp
IHsgZW5naW5lID0gX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZEVuZ2luZTsgfQorICAgICAgICBpZiAob25T
dWNjZXNzID09PSB2b2lkIDApIHsgb25TdWNjZXNzID0gbnVsbDsgfQorICAgICAgICBpZiAob25Q
cm9ncmVzcyA9PT0gdm9pZCAwKSB7IG9uUHJvZ3Jlc3MgPSBudWxsOyB9CisgICAgICAgIGlmIChv
bkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG51bGw7IH0KKyAgICAgICAgaWYgKHBsdWdp
bkV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IHBsdWdpbkV4dGVuc2lvbiA9IG51bGw7IH0KKyAgICAg
ICAgaWYgKCFlbmdpbmUpIHsKKyAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlRvb2xzIl0uRXJyb3IoIk5vIGVuZ2luZSBhdmFpbGFibGUiKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTY2VuZUxv
YWRlci5BcHBlbmQocm9vdFVybCwgc2NlbmVGaWxlbmFtZSwgbmV3IF9zY2VuZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZSJdKGVuZ2luZSksIG9uU3VjY2Vzcywgb25Qcm9ncmVz
cywgb25FcnJvciwgcGx1Z2luRXh0ZW5zaW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIExv
YWQgYSBzY2VuZQorICAgICAqIEBwYXJhbSByb290VXJsIGEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0
aGUgcm9vdCB1cmwgZm9yIHRoZSBzY2VuZSBhbmQgcmVzb3VyY2VzIG9yIHRoZSBjb25jYXRlbmF0
aW9uIG9mIHJvb3RVUkwgYW5kIGZpbGVuYW1lIChlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbS90ZXN0
LmdsYikKKyAgICAgKiBAcGFyYW0gc2NlbmVGaWxlbmFtZSBhIHN0cmluZyB0aGF0IGRlZmluZXMg
dGhlIG5hbWUgb2YgdGhlIHNjZW5lIGZpbGUgb3Igc3RhcnRzIHdpdGggImRhdGE6IiBmb2xsb3dp
bmcgYnkgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHNjZW5lIG9yIGEgRmlsZSBvYmpl
Y3QgKGRlZmF1bHQ6IGVtcHR5IHN0cmluZykKKyAgICAgKiBAcGFyYW0gZW5naW5lIGlzIHRoZSBp
bnN0YW5jZSBvZiBCQUJZTE9OLkVuZ2luZSB0byB1c2UgdG8gY3JlYXRlIHRoZSBzY2VuZQorICAg
ICAqIEBwYXJhbSBvblByb2dyZXNzIGEgY2FsbGJhY2sgd2l0aCBhIHByb2dyZXNzIGV2ZW50IGZv
ciBlYWNoIGZpbGUgYmVpbmcgbG9hZGVkCisgICAgICogQHBhcmFtIHBsdWdpbkV4dGVuc2lvbiB0
aGUgZXh0ZW5zaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBwbHVnaW4KKyAgICAgKiBAcmV0dXJu
cyBUaGUgbG9hZGVkIHNjZW5lCisgICAgICovCisgICAgU2NlbmVMb2FkZXIuTG9hZEFzeW5jID0g
ZnVuY3Rpb24gKHJvb3RVcmwsIHNjZW5lRmlsZW5hbWUsIGVuZ2luZSwgb25Qcm9ncmVzcywgcGx1
Z2luRXh0ZW5zaW9uKSB7CisgICAgICAgIGlmIChzY2VuZUZpbGVuYW1lID09PSB2b2lkIDApIHsg
c2NlbmVGaWxlbmFtZSA9ICIiOyB9CisgICAgICAgIGlmIChlbmdpbmUgPT09IHZvaWQgMCkgeyBl
bmdpbmUgPSBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkRW5naW5lOyB9CisgICAgICAgIGlmIChvblByb2dy
ZXNzID09PSB2b2lkIDApIHsgb25Qcm9ncmVzcyA9IG51bGw7IH0KKyAgICAgICAgaWYgKHBsdWdp
bkV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IHBsdWdpbkV4dGVuc2lvbiA9IG51bGw7IH0KKyAgICAg
ICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAg
ICAgICAgIFNjZW5lTG9hZGVyLkxvYWQocm9vdFVybCwgc2NlbmVGaWxlbmFtZSwgZW5naW5lLCBm
dW5jdGlvbiAoc2NlbmUpIHsKKyAgICAgICAgICAgICAgICByZXNvbHZlKHNjZW5lKTsKKyAgICAg
ICAgICAgIH0sIG9uUHJvZ3Jlc3MsIGZ1bmN0aW9uIChzY2VuZSwgbWVzc2FnZSwgZXhjZXB0aW9u
KSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4Y2VwdGlvbiB8fCBuZXcgRXJyb3IobWVzc2Fn
ZSkpOworICAgICAgICAgICAgfSwgcGx1Z2luRXh0ZW5zaW9uKTsKKyAgICAgICAgfSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBcHBlbmQgYSBzY2VuZQorICAgICAqIEBwYXJhbSByb290VXJs
IGEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgcm9vdCB1cmwgZm9yIHRoZSBzY2VuZSBhbmQgcmVz
b3VyY2VzIG9yIHRoZSBjb25jYXRlbmF0aW9uIG9mIHJvb3RVUkwgYW5kIGZpbGVuYW1lIChlLmcu
IGh0dHA6Ly9leGFtcGxlLmNvbS90ZXN0LmdsYikKKyAgICAgKiBAcGFyYW0gc2NlbmVGaWxlbmFt
ZSBhIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHNjZW5lIGZpbGUgb3Igc3Rh
cnRzIHdpdGggImRhdGE6IiBmb2xsb3dpbmcgYnkgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb24gb2Yg
dGhlIHNjZW5lIG9yIGEgRmlsZSBvYmplY3QgKGRlZmF1bHQ6IGVtcHR5IHN0cmluZykKKyAgICAg
KiBAcGFyYW0gc2NlbmUgaXMgdGhlIGluc3RhbmNlIG9mIEJBQllMT04uU2NlbmUgdG8gYXBwZW5k
IHRvCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBhIGNhbGxiYWNrIHdpdGggdGhlIHNjZW5lIHdo
ZW4gaW1wb3J0IHN1Y2NlZWRzCisgICAgICogQHBhcmFtIG9uUHJvZ3Jlc3MgYSBjYWxsYmFjayB3
aXRoIGEgcHJvZ3Jlc3MgZXZlbnQgZm9yIGVhY2ggZmlsZSBiZWluZyBsb2FkZWQKKyAgICAgKiBA
cGFyYW0gb25FcnJvciBhIGNhbGxiYWNrIHdpdGggdGhlIHNjZW5lLCBhIG1lc3NhZ2UsIGFuZCBw
b3NzaWJseSBhbiBleGNlcHRpb24gd2hlbiBpbXBvcnQgZmFpbHMKKyAgICAgKiBAcGFyYW0gcGx1
Z2luRXh0ZW5zaW9uIHRoZSBleHRlbnNpb24gdXNlZCB0byBkZXRlcm1pbmUgdGhlIHBsdWdpbgor
ICAgICAqIEByZXR1cm5zIFRoZSBsb2FkZWQgcGx1Z2luCisgICAgICovCisgICAgU2NlbmVMb2Fk
ZXIuQXBwZW5kID0gZnVuY3Rpb24gKHJvb3RVcmwsIHNjZW5lRmlsZW5hbWUsIHNjZW5lLCBvblN1
Y2Nlc3MsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IsIHBsdWdpbkV4dGVuc2lvbikgeworICAgICAgICBp
ZiAoc2NlbmVGaWxlbmFtZSA9PT0gdm9pZCAwKSB7IHNjZW5lRmlsZW5hbWUgPSAiIjsgfQorICAg
ICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IF9FbmdpbmVzX2VuZ2luZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkVuZ2luZVN0b3JlIl0uTGFzdENyZWF0ZWRT
Y2VuZTsgfQorICAgICAgICBpZiAob25TdWNjZXNzID09PSB2b2lkIDApIHsgb25TdWNjZXNzID0g
bnVsbDsgfQorICAgICAgICBpZiAob25Qcm9ncmVzcyA9PT0gdm9pZCAwKSB7IG9uUHJvZ3Jlc3Mg
PSBudWxsOyB9CisgICAgICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG51
bGw7IH0KKyAgICAgICAgaWYgKHBsdWdpbkV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IHBsdWdpbkV4
dGVuc2lvbiA9IG51bGw7IH0KKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgX01p
c2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkxvZ2dlciJdLkVycm9yKCJO
byBzY2VuZSBhdmFpbGFibGUgdG8gYXBwZW5kIHRvIik7CisgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgfQorICAgICAgICB2YXIgZmlsZUluZm8gPSBTY2VuZUxvYWRlci5fZ2V0Rmls
ZUluZm8ocm9vdFVybCwgc2NlbmVGaWxlbmFtZSk7CisgICAgICAgIGlmICghZmlsZUluZm8pIHsK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGlmIChTY2VuZUxv
YWRlci5TaG93TG9hZGluZ1NjcmVlbikgeworICAgICAgICAgICAgc2NlbmUuZ2V0RW5naW5lKCku
ZGlzcGxheUxvYWRpbmdVSSgpOworICAgICAgICB9CisgICAgICAgIHZhciBsb2FkaW5nVG9rZW4g
PSB7fTsKKyAgICAgICAgc2NlbmUuX2FkZFBlbmRpbmdEYXRhKGxvYWRpbmdUb2tlbik7CisgICAg
ICAgIHZhciBkaXNwb3NlSGFuZGxlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNjZW5l
Ll9yZW1vdmVQZW5kaW5nRGF0YShsb2FkaW5nVG9rZW4pOworICAgICAgICAgICAgc2NlbmUuZ2V0
RW5naW5lKCkuaGlkZUxvYWRpbmdVSSgpOworICAgICAgICB9OworICAgICAgICB2YXIgZXJyb3JI
YW5kbGVyID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGV4Y2VwdGlvbikgeworICAgICAgICAgICAgdmFy
IGVycm9yTWVzc2FnZSA9ICJVbmFibGUgdG8gbG9hZCBmcm9tICIgKyBmaWxlSW5mby51cmwgKyAo
bWVzc2FnZSA/ICI6ICIgKyBtZXNzYWdlIDogIiIpOworICAgICAgICAgICAgaWYgKG9uRXJyb3Ip
IHsKKyAgICAgICAgICAgICAgICBvbkVycm9yKHNjZW5lLCBlcnJvck1lc3NhZ2UsIGV4Y2VwdGlv
bik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBf
TWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siTG9nZ2VyIl0uRXJyb3Io
ZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAvLyBzaG91bGQgdGhlIGV4Y2VwdGlvbiBi
ZSB0aHJvd24/CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkaXNwb3NlSGFuZGxlcigpOwor
ICAgICAgICB9OworICAgICAgICB2YXIgcHJvZ3Jlc3NIYW5kbGVyID0gb25Qcm9ncmVzcyA/IGZ1
bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBvblBy
b2dyZXNzKGV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChlKSB7Cisg
ICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyKCJFcnJvciBpbiBvblByb2dyZXNzIGNhbGxiYWNr
IiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gOiB1bmRlZmluZWQ7CisgICAgICAgIHZh
ciBzdWNjZXNzSGFuZGxlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChvblN1Y2Nl
c3MpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBvblN1Y2Nl
c3Moc2NlbmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoZSkg
eworICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIoIkVycm9yIGluIG9uU3VjY2VzcyBj
YWxsYmFjayIsIGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHNjZW5lLl9yZW1vdmVQZW5kaW5nRGF0YShsb2FkaW5nVG9rZW4pOworICAgICAgICB9Owor
ICAgICAgICByZXR1cm4gU2NlbmVMb2FkZXIuX2xvYWREYXRhKGZpbGVJbmZvLCBzY2VuZSwgZnVu
Y3Rpb24gKHBsdWdpbiwgZGF0YSkgeworICAgICAgICAgICAgaWYgKHBsdWdpbi5sb2FkKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHN5bmNlZFBsdWdpbiA9IHBsdWdpbjsKKyAgICAgICAgICAgICAg
ICBpZiAoIXN5bmNlZFBsdWdpbi5sb2FkKHNjZW5lLCBkYXRhLCBmaWxlSW5mby5yb290VXJsLCBl
cnJvckhhbmRsZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgc2NlbmUubG9hZGluZ1BsdWdpbk5hbWUgPSBwbHVnaW4u
bmFtZTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzSGFuZGxlcigpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGFzeW5jZWRQbHVnaW4gPSBw
bHVnaW47CisgICAgICAgICAgICAgICAgYXN5bmNlZFBsdWdpbi5sb2FkQXN5bmMoc2NlbmUsIGRh
dGEsIGZpbGVJbmZvLnJvb3RVcmwsIHByb2dyZXNzSGFuZGxlciwgZmlsZUluZm8ubmFtZSkudGhl
bihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLmxvYWRpbmdQbHVnaW5O
YW1lID0gcGx1Z2luLm5hbWU7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NIYW5kbGVyKCk7
CisgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAgICAg
ICAgICAgICAgIGVycm9ySGFuZGxlcihlcnJvci5tZXNzYWdlLCBlcnJvcik7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoU2NlbmVMb2FkZXIuU2hv
d0xvYWRpbmdTY3JlZW4pIHsKKyAgICAgICAgICAgICAgICBzY2VuZS5leGVjdXRlV2hlblJlYWR5
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgc2NlbmUuZ2V0RW5naW5lKCkuaGlk
ZUxvYWRpbmdVSSgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9LCBwcm9ncmVzc0hhbmRsZXIsIGVycm9ySGFuZGxlciwgZGlzcG9zZUhhbmRsZXIsIHBsdWdp
bkV4dGVuc2lvbik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBcHBlbmQgYSBzY2VuZQorICAg
ICAqIEBwYXJhbSByb290VXJsIGEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgcm9vdCB1cmwgZm9y
IHRoZSBzY2VuZSBhbmQgcmVzb3VyY2VzIG9yIHRoZSBjb25jYXRlbmF0aW9uIG9mIHJvb3RVUkwg
YW5kIGZpbGVuYW1lIChlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbS90ZXN0LmdsYikKKyAgICAgKiBA
cGFyYW0gc2NlbmVGaWxlbmFtZSBhIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhl
IHNjZW5lIGZpbGUgb3Igc3RhcnRzIHdpdGggImRhdGE6IiBmb2xsb3dpbmcgYnkgdGhlIHN0cmlu
Z2lmaWVkIHZlcnNpb24gb2YgdGhlIHNjZW5lIG9yIGEgRmlsZSBvYmplY3QgKGRlZmF1bHQ6IGVt
cHR5IHN0cmluZykKKyAgICAgKiBAcGFyYW0gc2NlbmUgaXMgdGhlIGluc3RhbmNlIG9mIEJBQllM
T04uU2NlbmUgdG8gYXBwZW5kIHRvCisgICAgICogQHBhcmFtIG9uUHJvZ3Jlc3MgYSBjYWxsYmFj
ayB3aXRoIGEgcHJvZ3Jlc3MgZXZlbnQgZm9yIGVhY2ggZmlsZSBiZWluZyBsb2FkZWQKKyAgICAg
KiBAcGFyYW0gcGx1Z2luRXh0ZW5zaW9uIHRoZSBleHRlbnNpb24gdXNlZCB0byBkZXRlcm1pbmUg
dGhlIHBsdWdpbgorICAgICAqIEByZXR1cm5zIFRoZSBnaXZlbiBzY2VuZQorICAgICAqLworICAg
IFNjZW5lTG9hZGVyLkFwcGVuZEFzeW5jID0gZnVuY3Rpb24gKHJvb3RVcmwsIHNjZW5lRmlsZW5h
bWUsIHNjZW5lLCBvblByb2dyZXNzLCBwbHVnaW5FeHRlbnNpb24pIHsKKyAgICAgICAgaWYgKHNj
ZW5lRmlsZW5hbWUgPT09IHZvaWQgMCkgeyBzY2VuZUZpbGVuYW1lID0gIiI7IH0KKyAgICAgICAg
aWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7
IH0KKyAgICAgICAgaWYgKG9uUHJvZ3Jlc3MgPT09IHZvaWQgMCkgeyBvblByb2dyZXNzID0gbnVs
bDsgfQorICAgICAgICBpZiAocGx1Z2luRXh0ZW5zaW9uID09PSB2b2lkIDApIHsgcGx1Z2luRXh0
ZW5zaW9uID0gbnVsbDsgfQorICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJl
c29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgU2NlbmVMb2FkZXIuQXBwZW5kKHJvb3RVcmws
IHNjZW5lRmlsZW5hbWUsIHNjZW5lLCBmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICAgICAgICAgICAg
ICByZXNvbHZlKHNjZW5lKTsKKyAgICAgICAgICAgIH0sIG9uUHJvZ3Jlc3MsIGZ1bmN0aW9uIChz
Y2VuZSwgbWVzc2FnZSwgZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4Y2Vw
dGlvbiB8fCBuZXcgRXJyb3IobWVzc2FnZSkpOworICAgICAgICAgICAgfSwgcGx1Z2luRXh0ZW5z
aW9uKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBMb2FkIGEgc2NlbmUg
aW50byBhbiBhc3NldCBjb250YWluZXIKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBhIHN0cmluZyB0
aGF0IGRlZmluZXMgdGhlIHJvb3QgdXJsIGZvciB0aGUgc2NlbmUgYW5kIHJlc291cmNlcyBvciB0
aGUgY29uY2F0ZW5hdGlvbiBvZiByb290VVJMIGFuZCBmaWxlbmFtZSAoZS5nLiBodHRwOi8vZXhh
bXBsZS5jb20vdGVzdC5nbGIpCisgICAgICogQHBhcmFtIHNjZW5lRmlsZW5hbWUgYSBzdHJpbmcg
dGhhdCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBzY2VuZSBmaWxlIG9yIHN0YXJ0cyB3aXRoICJk
YXRhOiIgZm9sbG93aW5nIGJ5IHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSBzY2VuZSBv
ciBhIEZpbGUgb2JqZWN0IChkZWZhdWx0OiBlbXB0eSBzdHJpbmcpCisgICAgICogQHBhcmFtIHNj
ZW5lIGlzIHRoZSBpbnN0YW5jZSBvZiBCQUJZTE9OLlNjZW5lIHRvIGFwcGVuZCB0byAoZGVmYXVs
dDogbGFzdCBjcmVhdGVkIHNjZW5lKQorICAgICAqIEBwYXJhbSBvblN1Y2Nlc3MgYSBjYWxsYmFj
ayB3aXRoIHRoZSBzY2VuZSB3aGVuIGltcG9ydCBzdWNjZWVkcworICAgICAqIEBwYXJhbSBvblBy
b2dyZXNzIGEgY2FsbGJhY2sgd2l0aCBhIHByb2dyZXNzIGV2ZW50IGZvciBlYWNoIGZpbGUgYmVp
bmcgbG9hZGVkCisgICAgICogQHBhcmFtIG9uRXJyb3IgYSBjYWxsYmFjayB3aXRoIHRoZSBzY2Vu
ZSwgYSBtZXNzYWdlLCBhbmQgcG9zc2libHkgYW4gZXhjZXB0aW9uIHdoZW4gaW1wb3J0IGZhaWxz
CisgICAgICogQHBhcmFtIHBsdWdpbkV4dGVuc2lvbiB0aGUgZXh0ZW5zaW9uIHVzZWQgdG8gZGV0
ZXJtaW5lIHRoZSBwbHVnaW4KKyAgICAgKiBAcmV0dXJucyBUaGUgbG9hZGVkIHBsdWdpbgorICAg
ICAqLworICAgIFNjZW5lTG9hZGVyLkxvYWRBc3NldENvbnRhaW5lciA9IGZ1bmN0aW9uIChyb290
VXJsLCBzY2VuZUZpbGVuYW1lLCBzY2VuZSwgb25TdWNjZXNzLCBvblByb2dyZXNzLCBvbkVycm9y
LCBwbHVnaW5FeHRlbnNpb24pIHsKKyAgICAgICAgaWYgKHNjZW5lRmlsZW5hbWUgPT09IHZvaWQg
MCkgeyBzY2VuZUZpbGVuYW1lID0gIiI7IH0KKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDAp
IHsgc2NlbmUgPSBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7IH0KKyAgICAgICAgaWYgKG9uU3Vj
Y2VzcyA9PT0gdm9pZCAwKSB7IG9uU3VjY2VzcyA9IG51bGw7IH0KKyAgICAgICAgaWYgKG9uUHJv
Z3Jlc3MgPT09IHZvaWQgMCkgeyBvblByb2dyZXNzID0gbnVsbDsgfQorICAgICAgICBpZiAob25F
cnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBudWxsOyB9CisgICAgICAgIGlmIChwbHVnaW5F
eHRlbnNpb24gPT09IHZvaWQgMCkgeyBwbHVnaW5FeHRlbnNpb24gPSBudWxsOyB9CisgICAgICAg
IGlmICghc2NlbmUpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fWyJMb2dnZXIiXS5FcnJvcigiTm8gc2NlbmUgYXZhaWxhYmxlIHRvIGxvYWQg
YXNzZXQgY29udGFpbmVyIHRvIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICB2YXIgZmlsZUluZm8gPSBTY2VuZUxvYWRlci5fZ2V0RmlsZUluZm8ocm9vdFVy
bCwgc2NlbmVGaWxlbmFtZSk7CisgICAgICAgIGlmICghZmlsZUluZm8pIHsKKyAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBsb2FkaW5nVG9rZW4gPSB7fTsK
KyAgICAgICAgc2NlbmUuX2FkZFBlbmRpbmdEYXRhKGxvYWRpbmdUb2tlbik7CisgICAgICAgIHZh
ciBkaXNwb3NlSGFuZGxlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNjZW5lLl9yZW1v
dmVQZW5kaW5nRGF0YShsb2FkaW5nVG9rZW4pOworICAgICAgICB9OworICAgICAgICB2YXIgZXJy
b3JIYW5kbGVyID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGV4Y2VwdGlvbikgeworICAgICAgICAgICAg
dmFyIGVycm9yTWVzc2FnZSA9ICJVbmFibGUgdG8gbG9hZCBhc3NldHMgZnJvbSAiICsgZmlsZUlu
Zm8udXJsICsgKG1lc3NhZ2UgPyAiOiAiICsgbWVzc2FnZSA6ICIiKTsKKyAgICAgICAgICAgIGlm
IChvbkVycm9yKSB7CisgICAgICAgICAgICAgICAgb25FcnJvcihzY2VuZSwgZXJyb3JNZXNzYWdl
LCBleGNlcHRpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkxvZ2dl
ciJdLkVycm9yKGVycm9yTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgLy8gc2hvdWxkIHRoZSBl
eGNlcHRpb24gYmUgdGhyb3duPworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlzcG9zZUhh
bmRsZXIoKTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHByb2dyZXNzSGFuZGxlciA9IG9uUHJv
Z3Jlc3MgPyBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgb25Qcm9ncmVzcyhldmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRj
aCAoZSkgeworICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcigiRXJyb3IgaW4gb25Qcm9ncmVz
cyBjYWxsYmFjayIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IDogdW5kZWZpbmVkOwor
ICAgICAgICB2YXIgc3VjY2Vzc0hhbmRsZXIgPSBmdW5jdGlvbiAoYXNzZXRzKSB7CisgICAgICAg
ICAgICBpZiAob25TdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICAgICAgb25TdWNjZXNzKGFzc2V0cyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcigiRXJy
b3IgaW4gb25TdWNjZXNzIGNhbGxiYWNrIiwgZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKGxvYWRpbmdUb2tl
bik7CisgICAgICAgIH07CisgICAgICAgIHJldHVybiBTY2VuZUxvYWRlci5fbG9hZERhdGEoZmls
ZUluZm8sIHNjZW5lLCBmdW5jdGlvbiAocGx1Z2luLCBkYXRhKSB7CisgICAgICAgICAgICBpZiAo
cGx1Z2luLmxvYWRBc3NldENvbnRhaW5lcikgeworICAgICAgICAgICAgICAgIHZhciBzeW5jZWRQ
bHVnaW4gPSBwbHVnaW47CisgICAgICAgICAgICAgICAgdmFyIGFzc2V0Q29udGFpbmVyID0gc3lu
Y2VkUGx1Z2luLmxvYWRBc3NldENvbnRhaW5lcihzY2VuZSwgZGF0YSwgZmlsZUluZm8ucm9vdFVy
bCwgZXJyb3JIYW5kbGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFzc2V0Q29udGFpbmVyKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgc2NlbmUubG9hZGluZ1BsdWdpbk5hbWUgPSBwbHVnaW4ubmFtZTsKKyAgICAgICAg
ICAgICAgICBzdWNjZXNzSGFuZGxlcihhc3NldENvbnRhaW5lcik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIGlmIChwbHVnaW4ubG9hZEFzc2V0Q29udGFpbmVyQXN5bmMpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgYXN5bmNlZFBsdWdpbiA9IHBsdWdpbjsKKyAgICAgICAgICAgICAg
ICBhc3luY2VkUGx1Z2luLmxvYWRBc3NldENvbnRhaW5lckFzeW5jKHNjZW5lLCBkYXRhLCBmaWxl
SW5mby5yb290VXJsLCBwcm9ncmVzc0hhbmRsZXIsIGZpbGVJbmZvLm5hbWUpLnRoZW4oZnVuY3Rp
b24gKGFzc2V0Q29udGFpbmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLmxvYWRpbmdQ
bHVnaW5OYW1lID0gcGx1Z2luLm5hbWU7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NIYW5k
bGVyKGFzc2V0Q29udGFpbmVyKTsKKyAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAo
ZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyKGVycm9yLm1lc3NhZ2Us
IGVycm9yKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcigiTG9hZEFzc2V0Q29udGFpbmVy
IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwbHVnaW4uIFBsdWdpbiBkaWQgbm90IHByb3ZpZGUg
YSBsb2FkQXNzZXRDb250YWluZXIgb3IgbG9hZEFzc2V0Q29udGFpbmVyQXN5bmMgbWV0aG9kLiIp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFNjZW5lTG9hZGVyLlNob3dMb2FkaW5n
U2NyZWVuKSB7CisgICAgICAgICAgICAgICAgc2NlbmUuZXhlY3V0ZVdoZW5SZWFkeShmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLmdldEVuZ2luZSgpLmhpZGVMb2FkaW5n
VUkoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgcHJv
Z3Jlc3NIYW5kbGVyLCBlcnJvckhhbmRsZXIsIGRpc3Bvc2VIYW5kbGVyLCBwbHVnaW5FeHRlbnNp
b24pOworICAgIH07CisgICAgLyoqCisgICAgICogTG9hZCBhIHNjZW5lIGludG8gYW4gYXNzZXQg
Y29udGFpbmVyCisgICAgICogQHBhcmFtIHJvb3RVcmwgYSBzdHJpbmcgdGhhdCBkZWZpbmVzIHRo
ZSByb290IHVybCBmb3IgdGhlIHNjZW5lIGFuZCByZXNvdXJjZXMgb3IgdGhlIGNvbmNhdGVuYXRp
b24gb2Ygcm9vdFVSTCBhbmQgZmlsZW5hbWUgKGUuZy4gaHR0cDovL2V4YW1wbGUuY29tL3Rlc3Qu
Z2xiKQorICAgICAqIEBwYXJhbSBzY2VuZUZpbGVuYW1lIGEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0
aGUgbmFtZSBvZiB0aGUgc2NlbmUgZmlsZSBvciBzdGFydHMgd2l0aCAiZGF0YToiIGZvbGxvd2lu
ZyBieSB0aGUgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgc2NlbmUgKGRlZmF1bHQ6IGVtcHR5
IHN0cmluZykKKyAgICAgKiBAcGFyYW0gc2NlbmUgaXMgdGhlIGluc3RhbmNlIG9mIFNjZW5lIHRv
IGFwcGVuZCB0bworICAgICAqIEBwYXJhbSBvblByb2dyZXNzIGEgY2FsbGJhY2sgd2l0aCBhIHBy
b2dyZXNzIGV2ZW50IGZvciBlYWNoIGZpbGUgYmVpbmcgbG9hZGVkCisgICAgICogQHBhcmFtIHBs
dWdpbkV4dGVuc2lvbiB0aGUgZXh0ZW5zaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBwbHVnaW4K
KyAgICAgKiBAcmV0dXJucyBUaGUgbG9hZGVkIGFzc2V0IGNvbnRhaW5lcgorICAgICAqLworICAg
IFNjZW5lTG9hZGVyLkxvYWRBc3NldENvbnRhaW5lckFzeW5jID0gZnVuY3Rpb24gKHJvb3RVcmws
IHNjZW5lRmlsZW5hbWUsIHNjZW5lLCBvblByb2dyZXNzLCBwbHVnaW5FeHRlbnNpb24pIHsKKyAg
ICAgICAgaWYgKHNjZW5lRmlsZW5hbWUgPT09IHZvaWQgMCkgeyBzY2VuZUZpbGVuYW1lID0gIiI7
IH0KKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBfRW5naW5lc19lbmdp
bmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFbmdpbmVTdG9yZSJdLkxhc3RD
cmVhdGVkU2NlbmU7IH0KKyAgICAgICAgaWYgKG9uUHJvZ3Jlc3MgPT09IHZvaWQgMCkgeyBvblBy
b2dyZXNzID0gbnVsbDsgfQorICAgICAgICBpZiAocGx1Z2luRXh0ZW5zaW9uID09PSB2b2lkIDAp
IHsgcGx1Z2luRXh0ZW5zaW9uID0gbnVsbDsgfQorICAgICAgICByZXR1cm4gbmV3IFByb21pc2Uo
ZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgU2NlbmVMb2FkZXIuTG9h
ZEFzc2V0Q29udGFpbmVyKHJvb3RVcmwsIHNjZW5lRmlsZW5hbWUsIHNjZW5lLCBmdW5jdGlvbiAo
YXNzZXRDb250YWluZXIpIHsKKyAgICAgICAgICAgICAgICByZXNvbHZlKGFzc2V0Q29udGFpbmVy
KTsKKyAgICAgICAgICAgIH0sIG9uUHJvZ3Jlc3MsIGZ1bmN0aW9uIChzY2VuZSwgbWVzc2FnZSwg
ZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4Y2VwdGlvbiB8fCBuZXcgRXJy
b3IobWVzc2FnZSkpOworICAgICAgICAgICAgfSwgcGx1Z2luRXh0ZW5zaW9uKTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBObyBsb2dnaW5nIHdoaWxlIGxvYWRpbmcKKyAg
ICAgKi8KKyAgICBTY2VuZUxvYWRlci5OT19MT0dHSU5HID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlNDRU5FTE9BREVSX05PX0xP
R0dJTkc7CisgICAgLyoqCisgICAgICogTWluaW1hbCBsb2dnaW5nIHdoaWxlIGxvYWRpbmcKKyAg
ICAgKi8KKyAgICBTY2VuZUxvYWRlci5NSU5JTUFMX0xPR0dJTkcgPSBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uU0NFTkVMT0FERVJf
TUlOSU1BTF9MT0dHSU5HOworICAgIC8qKgorICAgICAqIFN1bW1hcnkgbG9nZ2luZyB3aGlsZSBs
b2FkaW5nCisgICAgICovCisgICAgU2NlbmVMb2FkZXIuU1VNTUFSWV9MT0dHSU5HID0gX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlND
RU5FTE9BREVSX1NVTU1BUllfTE9HR0lORzsKKyAgICAvKioKKyAgICAgKiBEZXRhaWxsZWQgbG9n
Z2luZyB3aGlsZSBsb2FkaW5nCisgICAgICovCisgICAgU2NlbmVMb2FkZXIuREVUQUlMRURfTE9H
R0lORyA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJD
b25zdGFudHMiXS5TQ0VORUxPQURFUl9ERVRBSUxFRF9MT0dHSU5HOworICAgIC8vIE1lbWJlcnMK
KyAgICAvKioKKyAgICAgKiBFdmVudCByYWlzZWQgd2hlbiBhIHBsdWdpbiBpcyB1c2VkIHRvIGxv
YWQgYSBzY2VuZQorICAgICAqLworICAgIFNjZW5lTG9hZGVyLk9uUGx1Z2luQWN0aXZhdGVkT2Jz
ZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIk9ic2VydmFibGUiXSgpOworICAgIFNjZW5lTG9hZGVyLl9yZWdpc3RlcmVkUGx1Z2lucyA9
IHt9OworICAgIHJldHVybiBTY2VuZUxvYWRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTG9hZGluZy9zY2VuZUxvYWRlckZsYWdzLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0xvYWRpbmcvc2NlbmVMb2FkZXJG
bGFncy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNjZW5lTG9hZGVyRmxhZ3MgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVMb2FkZXJGbGFncyIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gU2NlbmVMb2FkZXJGbGFnczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50
cyIpOworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gcmVwcmVzZW50IGRhdGEgbG9hZGluZyBwcm9n
cmVzc2lvbgorICovCit2YXIgU2NlbmVMb2FkZXJGbGFncyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uICgpIHsKKyAgICBmdW5jdGlvbiBTY2VuZUxvYWRlckZsYWdzKCkgeworICAgIH0KKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmVMb2FkZXJGbGFncywgIkZvcmNlRnVsbFNjZW5lTG9h
ZGluZ0ZvckluY3JlbWVudGFsIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBz
ZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGVudGlyZSBzY2VuZSBtdXN0IGJlIGxvYWRlZCBl
dmVuIGlmIHNjZW5lIGNvbnRhaW5zIGluY3JlbWVudGFsIGRhdGEKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFNjZW5lTG9hZGVyRmxh
Z3MuX0ZvcmNlRnVsbFNjZW5lTG9hZGluZ0ZvckluY3JlbWVudGFsOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgU2NlbmVMb2FkZXJGbGFn
cy5fRm9yY2VGdWxsU2NlbmVMb2FkaW5nRm9ySW5jcmVtZW50YWwgPSB2YWx1ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lTG9hZGVyRmxhZ3MsICJT
aG93TG9hZGluZ1NjcmVlbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0
cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBsb2FkaW5nIHNjcmVlbiBtdXN0IGJlIGRpc3BsYXll
ZCB3aGlsZSBsb2FkaW5nIGEgc2NlbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFNjZW5lTG9hZGVyRmxhZ3MuX1Nob3dMb2FkaW5n
U2NyZWVuOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgU2NlbmVMb2FkZXJGbGFncy5fU2hvd0xvYWRpbmdTY3JlZW4gPSB2YWx1ZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lTG9hZGVyRmxh
Z3MsICJsb2dnaW5nTGV2ZWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRo
ZSBjdXJyZW50IGxvZ2dpbmcgbGV2ZWwgKHdoaWxlIGxvYWRpbmcgdGhlIHNjZW5lKQorICAgICAg
ICAgKiBAaWdub3JlbmFtaW5nCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiBTY2VuZUxvYWRlckZsYWdzLl9sb2dnaW5nTGV2ZWw7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBT
Y2VuZUxvYWRlckZsYWdzLl9sb2dnaW5nTGV2ZWwgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lTG9hZGVyRmxhZ3MsICJDbGVhbkJvbmVN
YXRyaXhXZWlnaHRzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXQgYSBi
b29sZWFuIGluZGljYXRpbmcgaWYgbWF0cml4IHdlaWdodHMgbXVzdCBiZSBjbGVhbmVkIHVwb24g
bG9hZGluZworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gU2NlbmVMb2FkZXJGbGFncy5fQ2xlYW5Cb25lTWF0cml4V2VpZ2h0czsKKyAg
ICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIFNj
ZW5lTG9hZGVyRmxhZ3MuX0NsZWFuQm9uZU1hdHJpeFdlaWdodHMgPSB2YWx1ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgLy8gRmxhZ3MKKyAgICBTY2VuZUxvYWRlckZsYWdzLl9Gb3JjZUZ1bGxT
Y2VuZUxvYWRpbmdGb3JJbmNyZW1lbnRhbCA9IGZhbHNlOworICAgIFNjZW5lTG9hZGVyRmxhZ3Mu
X1Nob3dMb2FkaW5nU2NyZWVuID0gdHJ1ZTsKKyAgICBTY2VuZUxvYWRlckZsYWdzLl9DbGVhbkJv
bmVNYXRyaXhXZWlnaHRzID0gZmFsc2U7CisgICAgU2NlbmVMb2FkZXJGbGFncy5fbG9nZ2luZ0xl
dmVsID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNv
bnN0YW50cyJdLlNDRU5FTE9BREVSX05PX0xPR0dJTkc7CisgICAgcmV0dXJuIFNjZW5lTG9hZGVy
RmxhZ3M7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9CYWNr
Z3JvdW5kL2JhY2tncm91bmRNYXRlcmlhbC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvQmFj
a2dyb3VuZC9iYWNrZ3JvdW5kTWF0ZXJpYWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBCYWNrZ3JvdW5kTWF0ZXJpYWwgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQmFja2dyb3VuZE1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCYWNrZ3JvdW5kTWF0
ZXJpYWw7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9k
ZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRv
cnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19zbWFydEFycmF5X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9N
aXNjL3NtYXJ0QXJyYXkgKi8gIi4vTWlzYy9zbWFydEFycmF5LnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dl
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVzL2J1ZmZlciAqLyAiLi9N
ZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGVyaWFscy9tYXRlcmlhbEhlbHBlciAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsRGVmaW5lc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWF0ZXJpYWxzL21hdGVyaWFsRGVmaW5lcyAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWxEZWZp
bmVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19wdXNoTWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9wdXNoTWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL3B1c2hNYXRlcmlh
bC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfaW1hZ2VQcm9jZXNz
aW5nQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0
aW9uICovICIuL01hdGVyaWFscy9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1
cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvdHlwZVN0b3JlICov
ICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGVy
aWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9tYXRlcmlhbEZsYWdzICovICIuL01hdGVyaWFscy9tYXRlcmlhbEZsYWdzLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRo
cy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfU2hhZGVyc19iYWNrZ3JvdW5kX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vU2hhZGVycy9iYWNr
Z3JvdW5kLmZyYWdtZW50ICovICIuL1NoYWRlcnMvYmFja2dyb3VuZC5mcmFnbWVudC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2JhY2tncm91bmRfdmVydGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
U2hhZGVycy9iYWNrZ3JvdW5kLnZlcnRleCAqLyAiLi9TaGFkZXJzL2JhY2tncm91bmQudmVydGV4
LnRzIik7CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisvKioKKyAqIEJhY2tn
cm91bmQgbWF0ZXJpYWwgZGVmaW5lcyBkZWZpbml0aW9uLgorICogQGhpZGRlbiBNYWlubHkgaW50
ZXJuYWwgVXNlCisgKi8KK3ZhciBCYWNrZ3JvdW5kTWF0ZXJpYWxEZWZpbmVzID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKEJhY2tncm91bmRNYXRlcmlhbERlZmluZXMsIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3Igb2YgdGhlIGRlZmluZXMuCisgICAgICovCisg
ICAgZnVuY3Rpb24gQmFja2dyb3VuZE1hdGVyaWFsRGVmaW5lcygpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFRydWUgaWYgdGhlIGRpZmZ1c2UgdGV4dHVyZSBpcyBpbiB1c2UuCisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5ESUZGVVNFID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
ZGlyZWN0IFVWIGNoYW5uZWwgdG8gdXNlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuRElG
RlVTRURJUkVDVFVWID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRydWUgaWYgdGhlIGRp
ZmZ1c2UgdGV4dHVyZSBpcyBpbiBnYW1tYSBzcGFjZS4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLkdBTU1BRElGRlVTRSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogVHJ1ZSBp
ZiB0aGUgZGlmZnVzZSB0ZXh0dXJlIGhhcyBvcGFjaXR5IGluIHRoZSBhbHBoYSBjaGFubmVsLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuRElGRlVTRUhBU0FMUEhBID0gZmFsc2U7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBUcnVlIGlmIHlvdSB3YW50IHRoZSBtYXRlcmlhbCB0byBmYWRl
IHRvIHRyYW5zcGFyZW50IGF0IGdyYXppbmcgYW5nbGUuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5PUEFDSVRZRlJFU05FTCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogVHJ1
ZSBpZiBhbiBleHRyYSBibHVyIG5lZWRzIHRvIGJlIGFkZGVkIGluIHRoZSByZWZsZWN0aW9uLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTkJMVVIgPSBmYWxzZTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFRydWUgaWYgeW91IHdhbnQgdGhlIG1hdGVyaWFsIHRvIGZhZGUg
dG8gcmVmbGVjdGlvbiBhdCBncmF6aW5nIGFuZ2xlLgorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMuUkVGTEVDVElPTkZSRVNORUwgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRy
dWUgaWYgeW91IHdhbnQgdGhlIG1hdGVyaWFsIHRvIGZhbGxvZmYgYXMgZmFyIGFzIHlvdSBtb3Zl
IGF3YXkgZnJvbSB0aGUgc2NlbmUgY2VudGVyLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
UkVGTEVDVElPTkZBTExPRkYgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZhbHNl
IGlmIHRoZSBjdXJyZW50IFdlYmdsIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgdGhl
IHRleHR1cmUgbG9kIGV4dGVuc2lvbi4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLlRFWFRV
UkVMT0RTVVBQT1JUID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUcnVlIHRvIGVu
c3VyZSB0aGUgZGF0YSBhcmUgcHJlbXVsdGlwbGllZC4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLlBSRU1VTFRJUExZQUxQSEEgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRy
dWUgaWYgdGhlIHRleHR1cmUgY29udGFpbnMgY29va2VkIFJHQiB2YWx1ZXMgYW5kIG5vdCBncmF5
IHNjYWxlZCBtdWx0aXBsaWVycy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLlVTRVJHQkNP
TE9SID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUcnVlIGlmIGhpZ2hsaWdodCBh
bmQgc2hhZG93IGxldmVscyBoYXZlIGJlZW4gc3BlY2lmaWVkLiBJdCBjYW4gaGVscCBlbnN1cmlu
ZyB0aGUgbWFpbiBwZXJjZWl2ZWQgY29sb3IKKyAgICAgICAgICogc3RheXMgYWxpZ25lZCB3aXRo
IHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5V
U0VISUdITElHSFRBTkRTSEFET1dDT0xPUlMgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFRydWUgdG8gYWRkIG5vaXNlIGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgYmFuZGluZyBlZmZl
Y3QuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5OT0lTRSA9IGZhbHNlOworICAgICAgICAv
KioKKyAgICAgICAgICogaXMgdGhlIHJlZmxlY3Rpb24gdGV4dHVyZSBpbiBCR1IgY29sb3Igc2No
ZW1lPworICAgICAgICAgKiBNYWlubHkgdXNlZCB0byBzb2x2ZSBhIGJ1ZyBpbiBpb3MxMCB2aWRl
byB0YWcKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05CR1IgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuSU1BR0VQUk9DRVNTSU5HID0gZmFsc2U7CisgICAgICAgIF90aGlzLlZJ
R05FVFRFID0gZmFsc2U7CisgICAgICAgIF90aGlzLlZJR05FVFRFQkxFTkRNT0RFTVVMVElQTFkg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVklHTkVUVEVCTEVORE1PREVPUEFRVUUgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuVE9ORU1BUFBJTkcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVE9ORU1B
UFBJTkdfQUNFUyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DT05UUkFTVCA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5DT0xPUkNVUlZFUyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DT0xPUkdSQURJ
TkcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ09MT1JHUkFESU5HM0QgPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuU0FNUExFUjNER1JFRU5ERVBUSCA9IGZhbHNlOworICAgICAgICBfdGhpcy5TQU1Q
TEVSM0RCR1JNQVAgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuSU1BR0VQUk9DRVNTSU5HUE9TVFBS
T0NFU1MgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuRVhQT1NVUkUgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuTVVMVElWSUVXID0gZmFsc2U7CisgICAgICAgIC8vIFJlZmxlY3Rpb24uCisgICAgICAg
IF90aGlzLlJFRkxFQ1RJT04gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF8z
RCA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX1NQSEVSSUNBTCA9IGZhbHNl
OworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX1BMQU5BUiA9IGZhbHNlOworICAgICAgICBf
dGhpcy5SRUZMRUNUSU9OTUFQX0NVQklDID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJ
T05NQVBfUFJPSkVDVElPTiA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX1NL
WUJPWCA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX1NLWUJPWF9UUkFOU0ZP
Uk1FRCA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX0VYUExJQ0lUID0gZmFs
c2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSID0gZmFsc2U7
CisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSX0ZJWEVEID0gZmFs
c2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05NQVBfTUlSUk9SRURFUVVJUkVDVEFOR1VMQVJf
RklYRUQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuSU5WRVJUQ1VCSUNNQVAgPSBmYWxzZTsKKyAg
ICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF9PUFBPU0lURVogPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuTE9ESU5SRUZMRUNUSU9OQUxQSEEgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuR0FNTUFSRUZM
RUNUSU9OID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJHQkRSRUZMRUNUSU9OID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLkVRVUlSRUNUQU5HVUxBUl9SRUxGRUNUSU9OX0ZPViA9IGZhbHNlOworICAg
ICAgICAvLyBEZWZhdWx0IEJKUy4KKyAgICAgICAgX3RoaXMuTUFJTlVWMSA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5NQUlOVVYyID0gZmFsc2U7CisgICAgICAgIF90aGlzLlVWMSA9IGZhbHNlOwor
ICAgICAgICBfdGhpcy5VVjIgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ0xJUFBMQU5FID0gZmFs
c2U7CisgICAgICAgIF90aGlzLkNMSVBQTEFORTIgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ0xJ
UFBMQU5FMyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DTElQUExBTkU0ID0gZmFsc2U7CisgICAg
ICAgIF90aGlzLlBPSU5UU0laRSA9IGZhbHNlOworICAgICAgICBfdGhpcy5GT0cgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuTk9STUFMID0gZmFsc2U7CisgICAgICAgIF90aGlzLk5VTV9CT05FX0lO
RkxVRU5DRVJTID0gMDsKKyAgICAgICAgX3RoaXMuQm9uZXNQZXJNZXNoID0gMDsKKyAgICAgICAg
X3RoaXMuSU5TVEFOQ0VTID0gZmFsc2U7CisgICAgICAgIF90aGlzLlNIQURPV0ZMT0FUID0gZmFs
c2U7CisgICAgICAgIF90aGlzLnJlYnVpbGQoKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAg
IH0KKyAgICByZXR1cm4gQmFja2dyb3VuZE1hdGVyaWFsRGVmaW5lczsKK30oX01hdGVyaWFsc19t
YXRlcmlhbERlZmluZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTWF0ZXJpYWxEZWZp
bmVzIl0pKTsKKy8qKgorICogQmFja2dyb3VuZCBtYXRlcmlhbCB1c2VkIHRvIGNyZWF0ZSBhbiBl
ZmZpY2llbnQgZW52aXJvbmVtZW50IGFyb3VuZCB5b3VyIHNjZW5lLgorICovCit2YXIgQmFja2dy
b3VuZE1hdGVyaWFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEJhY2tncm91bmRN
YXRlcmlhbCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBCYWNrZ3Jv
dW5kIE1hdGVyaWFsIGluIHRoZSBnaXZlbiBzY2VuZQorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBm
cmllbmRseSBuYW1lIG9mIHRoZSBtYXRlcmlhbAorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2Nl
bmUgdG8gYWRkIHRoZSBtYXRlcmlhbCB0bworICAgICAqLworICAgIGZ1bmN0aW9uIEJhY2tncm91
bmRNYXRlcmlhbChuYW1lLCBzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2Fs
bCh0aGlzLCBuYW1lLCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEtl
eSBsaWdodCBDb2xvciAobXVsdGlwbHkgYWdhaW5zdCB0aGUgZW52aXJvbmVtZW50IHRleHR1cmUp
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5wcmltYXJ5Q29sb3IgPSBfTWF0aHNfbWF0aF9j
b2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siQ29sb3IzIl0uV2hpdGUoKTsKKyAg
ICAgICAgX3RoaXMuX3ByaW1hcnlDb2xvclNoYWRvd0xldmVsID0gMDsKKyAgICAgICAgX3RoaXMu
X3ByaW1hcnlDb2xvckhpZ2hsaWdodExldmVsID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFJlZmxlY3Rpb24gVGV4dHVyZSB1c2VkIGluIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICogU2hv
dWxkIGJlIGF1dGhvciBpbiBhIHNwZWNpZmljIHdheSBmb3IgdGhlIGJlc3QgcmVzdWx0IChyZWZl
ciB0byB0aGUgZG9jdW1lbnRhdGlvbikuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5yZWZs
ZWN0aW9uVGV4dHVyZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZWZsZWN0aW9u
IFRleHR1cmUgbGV2ZWwgb2YgYmx1ci4KKyAgICAgICAgICoKKyAgICAgICAgICogQ2FuIGJlIHVz
ZSB0byByZXVzZSBhbiBleGlzdGluZyBIRFIgVGV4dHVyZSBhbmQgdGFyZ2V0IGEgc3BlY2lmaWMg
TE9EIHRvIHByZXZlbnQgYXV0aG9yaW5nIHRoZQorICAgICAgICAgKiB0ZXh0dXJlIHR3aWNlLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucmVmbGVjdGlvbkJsdXIgPSAwOworICAgICAgICAv
KioKKyAgICAgICAgICogRGlmZnVzZSBUZXh0dXJlIHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAg
ICAgICAgKiBTaG91bGQgYmUgYXV0aG9yIGluIGEgc3BlY2lmaWMgd2F5IGZvciB0aGUgYmVzdCBy
ZXN1bHQgKHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uKS4KKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLmRpZmZ1c2VUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX3NoYWRvd0xpZ2h0
cyA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZ5IHRoZSBsaXN0IG9mIGxp
Z2h0cyBjYXN0aW5nIHNoYWRvdyBvbiB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqIEFsbCBzY2Vu
ZSBzaGFkb3cgbGlnaHRzIHdpbGwgYmUgaW5jbHVkZWQgaWYgbnVsbC4KKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLnNoYWRvd0xpZ2h0cyA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBIZWxwcyBhZGp1c3RpbmcgdGhlIHNoYWRvdyB0byBhIHNvZnRlciBsZXZlbCBpZiByZXF1aXJl
ZC4KKyAgICAgICAgICogMCBtZWFucyBibGFjayBzaGFkb3dzIGFuZCAxIG1lYW5zIG5vIHNoYWRv
d3MuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5zaGFkb3dMZXZlbCA9IDA7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBJbiBjYXNlIG9mIG9wYWNpdHkgRnJlc25lbCBvciByZWZsZWN0aW9u
IGZhbGxvZmYsIHRoaXMgaXMgdXNlIGFzIGEgc2NlbmUgY2VudGVyLgorICAgICAgICAgKiBJdCBp
cyB1c3VhbGx5IHplcm8gYnV0IG1pZ2h0IGJlIGludGVyZXN0aW5nIHRvIG1vZGlmeSBhY2NvcmRp
bmcgdG8geW91ciBzZXR1cC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnNjZW5lQ2VudGVy
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3Rv
cjMiXS5aZXJvKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIGhlbHBzIHNwZWNpZnlp
bmcgdGhhdCB0aGUgbWF0ZXJpYWwgaXMgZmFsbGluZyBvZmYgdG8gdGhlIHNreSBib3ggYXQgZ3Jh
emluZyBhbmdsZS4KKyAgICAgICAgICogVGhpcyBoZWxwcyBlbnN1cmluZyBhIG5pY2UgdHJhbnNp
dGlvbiB3aGVuIHRoZSBjYW1lcmEgZ29lcyB1bmRlciB0aGUgZ3JvdW5kLgorICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMub3BhY2l0eUZyZXNuZWwgPSB0cnVlOworICAgICAgICAvKioKKyAgICAg
ICAgICogVGhpcyBoZWxwcyBzcGVjaWZ5aW5nIHRoYXQgdGhlIG1hdGVyaWFsIGlzIGZhbGxpbmcg
b2ZmIGZyb20gZGlmZnVzZSB0byB0aGUgcmVmbGVjdGlvbiB0ZXh0dXJlIGF0IGdyYXppbmcgYW5n
bGUuCisgICAgICAgICAqIFRoaXMgaGVscHMgYWRkaW5nIGEgbWlycm9yIHRleHR1cmUgb24gdGhl
IGdyb3VuZC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnJlZmxlY3Rpb25GcmVzbmVsID0g
ZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIGhlbHBzIHNwZWNpZnlpbmcgdGhl
IGZhbGxvZmYgcmFkaXVzIG9mZiB0aGUgcmVmbGVjdGlvbiB0ZXh0dXJlIGZyb20gdGhlIHNjZW5l
Q2VudGVyLgorICAgICAgICAgKiBUaGlzIGhlbHBzIGFkZGluZyBhIG5pY2UgZmFsbG9mZiBlZmZl
Y3QgdG8gdGhlIHJlZmxlY3Rpb24gaWYgdXNlZCBhcyBhIG1pcnJvciBmb3IgaW5zdGFuY2UuCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5yZWZsZWN0aW9uRmFsbG9mZkRpc3RhbmNlID0gMC4w
OworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBzcGVjaWZpZXMgdGhlIHdlaWdodCBvZiB0
aGUgcmVmbGVjdGlvbiBhZ2FpbnN0IHRoZSBiYWNrZ3JvdW5kIGluIGNhc2Ugb2YgcmVmbGVjdGlv
biBGcmVzbmVsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucmVmbGVjdGlvbkFtb3VudCA9
IDEuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgc3BlY2lmaWVzIHRoZSB3ZWlnaHQg
b2YgdGhlIHJlZmxlY3Rpb24gYXQgZ3JhemluZyBhbmdsZS4KKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLnJlZmxlY3Rpb25SZWZsZWN0YW5jZTAgPSAwLjA1OworICAgICAgICAvKioKKyAgICAg
ICAgICogVGhpcyBzcGVjaWZpZXMgdGhlIHdlaWdodCBvZiB0aGUgcmVmbGVjdGlvbiBhdCBhIHBl
cnBlbmRpY3VsYXIgcG9pbnQgb2Ygdmlldy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnJl
ZmxlY3Rpb25SZWZsZWN0YW5jZTkwID0gMC41OworICAgICAgICAvKioKKyAgICAgICAgICogSGVs
cHMgdG8gZGlyZWN0bHkgdXNlIHRoZSBtYXBzIGNoYW5uZWxzIGluc3RlYWQgb2YgdGhlaXIgbGV2
ZWwuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy51c2VSR0JDb2xvciA9IHRydWU7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBUaGlzIGhlbHBzIHJlZHVjaW5nIHRoZSBiYW5kaW5nIGVmZmVj
dCB0aGF0IGNvdWxkIG9jY3VyIG9uIHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuZW5hYmxlTm9pc2UgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2Zvdk11bHRpcGxp
ZXIgPSAxLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgdGhlIEZPViBhZGp1c3Rt
ZW50IGZlYXR1cmUgY29udHJvbGxlZCBieSBmb3ZNdWx0aXBsaWVyLgorICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMudXNlRXF1aXJlY3Rhbmd1bGFyRk9WID0gZmFsc2U7CisgICAgICAgIF90aGlz
Ll9tYXhTaW11bHRhbmVvdXNMaWdodHMgPSA0OworICAgICAgICAvKioKKyAgICAgICAgICogTnVt
YmVyIG9mIFNpbXVsdGFuZW91cyBsaWdodHMgYWxsb3dlZCBvbiB0aGUgbWF0ZXJpYWwuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5tYXhTaW11bHRhbmVvdXNMaWdodHMgPSA0OworICAgICAg
ICAvKioKKyAgICAgICAgICogS2VlcCB0cmFjayBvZiB0aGUgaW1hZ2UgcHJvY2Vzc2luZyBvYnNl
cnZlciB0byBhbGxvdyBkaXNwb3NlIGFuZCByZXBsYWNlLgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuX2ltYWdlUHJvY2Vzc2luZ09ic2VydmVyID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIER1ZSB0byBhIGJ1ZyBpbiBpT1MxMCwgdmlkZW8gdGFncyAod2hpY2ggYXJlIHVzaW5n
IHRoZSBiYWNrZ3JvdW5kIG1hdGVyaWFsKSBhcmUgaW4gQkdSIGFuZCBub3QgUkdCLgorICAgICAg
ICAgKiBTZXR0aW5nIHRoaXMgZmxhZyB0byB0cnVlIChub3QgZG9uZSBhdXRvbWF0aWNhbGx5ISkg
d2lsbCBjb252ZXJ0IGl0IGJhY2sgdG8gUkdCLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
c3dpdGNoVG9CR1IgPSBmYWxzZTsKKyAgICAgICAgLy8gVGVtcCB2YWx1ZXMga2VwdCBhcyBjYWNo
ZSBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRzID0gbmV3IF9N
aXNjX3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU21hcnRBcnJheSJd
KDE2KTsKKyAgICAgICAgX3RoaXMuX3JlZmxlY3Rpb25Db250cm9scyA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZWN0b3I0Il0uWmVybygpOworICAg
ICAgICBfdGhpcy5fd2hpdGUgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTVfX1siQ29sb3IzIl0uV2hpdGUoKTsKKyAgICAgICAgX3RoaXMuX3ByaW1hcnlTaGFk
b3dDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9f
WyJDb2xvcjMiXS5CbGFjaygpOworICAgICAgICBfdGhpcy5fcHJpbWFyeUhpZ2hsaWdodENvbG9y
ID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIkNvbG9y
MyJdLkJsYWNrKCk7CisgICAgICAgIC8vIFNldHVwIHRoZSBkZWZhdWx0IHByb2Nlc3NpbmcgY29u
ZmlndXJhdGlvbiB0byB0aGUgc2NlbmUuCisgICAgICAgIF90aGlzLl9hdHRhY2hJbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uKG51bGwpOworICAgICAgICBfdGhpcy5nZXRSZW5kZXJUYXJnZXRU
ZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRz
LnJlc2V0KCk7CisgICAgICAgICAgICBpZiAoX3RoaXMuX2RpZmZ1c2VUZXh0dXJlICYmIF90aGlz
Ll9kaWZmdXNlVGV4dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIF90aGlz
Ll9yZW5kZXJUYXJnZXRzLnB1c2goX3RoaXMuX2RpZmZ1c2VUZXh0dXJlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChfdGhpcy5fcmVmbGVjdGlvblRleHR1cmUgJiYgX3RoaXMuX3Jl
ZmxlY3Rpb25UZXh0dXJlLmlzUmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgX3RoaXMu
X3JlbmRlclRhcmdldHMucHVzaChfdGhpcy5fcmVmbGVjdGlvblRleHR1cmUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9yZW5kZXJUYXJnZXRzOworICAgICAgICB9
OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiX3BlcmNlcHR1YWxDb2xvciIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEV4cGVyaW1lbnRhbCBJbnRlcm5hbCBVc2UgT25seS4KKyAg
ICAgICAgICoKKyAgICAgICAgICogS2V5IGxpZ2h0IENvbG9yIGluICJwZXJjZXB0dWFsIHZhbHVl
IiBtZWFuaW5nIHRoZSBjb2xvciB5b3Ugd291bGQgbGlrZSB0byBzZWUgb24gc2NyZWVuLgorICAg
ICAgICAgKiBUaGlzIGFjdHMgYXMgYSBoZWxwZXIgdG8gc2V0IHRoZSBwcmltYXJ5IGNvbG9yIHRv
IGEgbW9yZSAiaHVtYW4gZnJpZW5kbHkiIHZhbHVlLgorICAgICAgICAgKiBDb252ZXJzaW9uIHRv
IGxpbmVhciBzcGFjZSBhcyB3ZWxsIGFzIGV4cG9zdXJlIGFuZCB0b25lIG1hcHBpbmcgY29ycmVj
dGlvbiB3aWxsIGJlIGFwcGxpZWQgdG8ga2VlcCB0aGUKKyAgICAgICAgICogb3V0cHV0IGNvbG9y
IGFzIGNsb3NlIGFzIHBvc3NpYmxlIGZyb20gdGhlIGNob3NlbiB2YWx1ZS4KKyAgICAgICAgICog
KFRoaXMgZG9lcyBub3QgYWNjb3VudCBmb3IgY29udHJhc3QgY29sb3IgZ3JhZGluZyBhbmQgY29s
b3IgY3VydmVzIGFzIHRoZXkgYXJlIGNvbnNpZGVyZWQgcG9zdCBlZmZlY3QgYW5kIG5vdCBkaXJl
Y3RseQorICAgICAgICAgKiBwYXJ0IG9mIGxpZ2h0aW5nIHNldHVwLikKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19wZXJj
ZXB0dWFsQ29sb3I7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICB0aGlzLl9fcGVyY2VwdHVhbENvbG9yID0gdmFsdWU7CisgICAgICAgICAg
ICB0aGlzLl9jb21wdXRlUHJpbWFyeUNvbG9yRnJvbVBlcmNlcHR1YWxDb2xvcigpOworICAgICAg
ICAgICAgdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzTGlnaHRzRGlydHkoKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhY2tncm91bmRNYXRlcmlhbC5wcm90
b3R5cGUsICJwcmltYXJ5Q29sb3JTaGFkb3dMZXZlbCIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERlZmluZXMgdGhlIGxldmVsIG9mIHRoZSBzaGFkb3dzIChkYXJrIGFyZWEgb2YgdGhlIHJl
ZmxlY3Rpb24gbWFwKSBpbiBvcmRlciB0byBoZWxwIHNjYWxpbmcgdGhlIGNvbG9ycy4KKyAgICAg
ICAgICogVGhlIGNvbG9yIG9wcG9zaXRlIHRvIHRoZSBwcmltYXJ5IGNvbG9yIGlzIHVzZWQgYXQg
dGhlIGxldmVsIGNob3NlbiB0byBkZWZpbmUgd2hhdCB0aGUgYmxhY2sgYXJlYSB3b3VsZCBsb29r
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fcHJpbWFyeUNvbG9yU2hhZG93TGV2ZWw7CisgICAgICAgIH0sCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9wcmltYXJ5Q29sb3JT
aGFkb3dMZXZlbCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fY29tcHV0ZVByaW1hcnlDb2xv
cnMoKTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0xpZ2h0c0RpcnR5KCk7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYWNrZ3JvdW5k
TWF0ZXJpYWwucHJvdG90eXBlLCAicHJpbWFyeUNvbG9ySGlnaGxpZ2h0TGV2ZWwiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBsZXZlbCBvZiB0aGUgaGlnaGxpaWdodHMg
KGhpZ2hsaWdodCBhcmVhIG9mIHRoZSByZWZsZWN0aW9uIG1hcCkgaW4gb3JkZXIgdG8gaGVscCBz
Y2FsaW5nIHRoZSBjb2xvcnMuCisgICAgICAgICAqIFRoZSBwcmltYXJ5IGNvbG9yIGlzIHVzZWQg
YXQgdGhlIGxldmVsIGNob3NlbiB0byBkZWZpbmUgd2hhdCB0aGUgd2hpdGUgYXJlYSB3b3VsZCBs
b29rLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fcHJpbWFyeUNvbG9ySGlnaGxpZ2h0TGV2ZWw7CisgICAgICAgIH0sCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9wcmltYXJ5
Q29sb3JIaWdobGlnaHRMZXZlbCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fY29tcHV0ZVBy
aW1hcnlDb2xvcnMoKTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0xpZ2h0
c0RpcnR5KCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShC
YWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAicmVmbGVjdGlvblN0YW5kYXJkRnJlc25lbFdl
aWdodCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHJlZmxlY3Rpb24gcmVm
bGVjdGFuY2UgZnJlc25lbCB2YWx1ZXMgYWNjb3JkaW5nIHRvIHRoZSBkZWZhdWx0IHN0YW5kYXJk
CisgICAgICAgICAqIGVtcGlyaWNhbGx5IGtub3cgdG8gd29yayB3ZWxsIDotKQorICAgICAgICAg
Ki8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciByZWZs
ZWN0aW9uV2VpZ2h0ID0gdmFsdWU7CisgICAgICAgICAgICBpZiAocmVmbGVjdGlvbldlaWdodCA8
IDAuNSkgeworICAgICAgICAgICAgICAgIHJlZmxlY3Rpb25XZWlnaHQgPSByZWZsZWN0aW9uV2Vp
Z2h0ICogMi4wOworICAgICAgICAgICAgICAgIHRoaXMucmVmbGVjdGlvblJlZmxlY3RhbmNlMCA9
IEJhY2tncm91bmRNYXRlcmlhbC5TdGFuZGFyZFJlZmxlY3RhbmNlMCAqIHJlZmxlY3Rpb25XZWln
aHQ7CisgICAgICAgICAgICAgICAgdGhpcy5yZWZsZWN0aW9uUmVmbGVjdGFuY2U5MCA9IEJhY2tn
cm91bmRNYXRlcmlhbC5TdGFuZGFyZFJlZmxlY3RhbmNlOTAgKiByZWZsZWN0aW9uV2VpZ2h0Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVmbGVj
dGlvbldlaWdodCA9IHJlZmxlY3Rpb25XZWlnaHQgKiAyLjAgLSAxLjA7CisgICAgICAgICAgICAg
ICAgdGhpcy5yZWZsZWN0aW9uUmVmbGVjdGFuY2UwID0gQmFja2dyb3VuZE1hdGVyaWFsLlN0YW5k
YXJkUmVmbGVjdGFuY2UwICsgKDEuMCAtIEJhY2tncm91bmRNYXRlcmlhbC5TdGFuZGFyZFJlZmxl
Y3RhbmNlMCkgKiByZWZsZWN0aW9uV2VpZ2h0OworICAgICAgICAgICAgICAgIHRoaXMucmVmbGVj
dGlvblJlZmxlY3RhbmNlOTAgPSBCYWNrZ3JvdW5kTWF0ZXJpYWwuU3RhbmRhcmRSZWZsZWN0YW5j
ZTkwICsgKDEuMCAtIEJhY2tncm91bmRNYXRlcmlhbC5TdGFuZGFyZFJlZmxlY3RhbmNlOTApICog
cmVmbGVjdGlvbldlaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJmb3ZN
dWx0aXBsaWVyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGN1cnJlbnQgZm92KGZp
ZWxkIG9mIHZpZXcpIG11bHRpcGxpZXIsIDAuMCAtIDIuMC4gRGVmYXVsdHMgdG8gMS4wLiBMb3dl
ciB2YWx1ZXMgInpvb20gaW4iIGFuZCBoaWdoZXIgdmFsdWVzICJ6b29tIG91dCIuCisgICAgICAg
ICAqIEJlc3QgdXNlZCB3aGVuIHRyeWluZyB0byBpbXBsZW1lbnQgdmlzdWFsIHpvb20gZWZmZWN0
cyBsaWtlIGZpc2gtZXllIG9yIGJpbm9jdWxhcnMgd2hpbGUgbm90IGFkanVzdGluZyBjYW1lcmEg
Zm92LgorICAgICAgICAgKiBSZWNvbW1lbmRlZCB0byBiZSBrZWVwIGF0IDEuMCBleGNlcHQgZm9y
IHNwZWNpYWwgY2FzZXMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3ZNdWx0aXBsaWVyOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVl
KSkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gMS4wOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGhpcy5fZm92TXVsdGlwbGllciA9IE1hdGgubWF4KDAuMCwgTWF0aC5taW4oMi4wLCB2
YWx1ZSkpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyBhIG5l
dyBpbWFnZSBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24gdG8gdGhlIFBCUiBNYXRlcmlhbC4KKyAg
ICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiAoaWYgbnVsbCB0aGUgc2NlbmUgY29uZmlndXJhdGlv
biB3aWxsIGJlIHVzZSkKKyAgICAgKi8KKyAgICBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBl
Ll9hdHRhY2hJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKGNvbmZpZ3Vy
YXRpb24gPT09IHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBEZXRhY2hlcyBvYnNlcnZlci4KKyAg
ICAgICAgaWYgKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gJiYgdGhpcy5faW1h
Z2VQcm9jZXNzaW5nT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24ub25VcGRhdGVQYXJhbWV0ZXJzLnJlbW92ZSh0aGlzLl9pbWFnZVByb2Nl
c3NpbmdPYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgLy8gUGljayB0aGUgc2NlbmUgY29u
ZmlndXJhdGlvbiBpZiBuZWVkZWQuCisgICAgICAgIGlmICghY29uZmlndXJhdGlvbikgeworICAg
ICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiA9IHRoaXMuZ2V0U2Nl
bmUoKS5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiA9IGNv
bmZpZ3VyYXRpb247CisgICAgICAgIH0KKyAgICAgICAgLy8gQXR0YWNoZXMgb2JzZXJ2ZXIuCisg
ICAgICAgIGlmICh0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKSB7CisgICAgICAg
ICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdPYnNlcnZlciA9IHRoaXMuX2ltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24ub25VcGRhdGVQYXJhbWV0ZXJzLmFkZChmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX2NvbXB1dGVQcmltYXJ5Q29sb3JGcm9tUGVyY2VwdHVhbENvbG9y
KCk7CisgICAgICAgICAgICAgICAgX3RoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0ltYWdlUHJvY2Vz
c2luZ0RpcnR5KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJpbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgaW1hZ2UgcHJvY2Vzc2luZyBjb25maWd1cmF0aW9uIHVzZWQgZWl0aGVyIGluIHRoaXMgbWF0
ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uOworICAgICAgICB9
LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgRGVmYXVsdCBpbWFnZSBwcm9jZXNz
aW5nIGNvbmZpZ3VyYXRpb24gdXNlZCBlaXRoZXIgaW4gdGhlIHRoaXMgbWF0ZXJpYWwuCisgICAg
ICAgICAqCisgICAgICAgICAqIElmIHNldHMgdG8gbnVsbCwgdGhlIHNjZW5lIG9uZSBpcyBpbiB1
c2UuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgdGhpcy5fYXR0YWNoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbih2YWx1ZSk7Cisg
ICAgICAgICAgICAvLyBFbnN1cmUgdGhlIGVmZmVjdCB3aWxsIGJlIHJlYnVpbHQuCisgICAgICAg
ICAgICB0aGlzLl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5KCk7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYWNrZ3JvdW5kTWF0ZXJpYWwucHJv
dG90eXBlLCAiY2FtZXJhQ29sb3JDdXJ2ZXNFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGN1cnZlcyBlZmZlY3QgaXMgZW5hYmxlZC4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckN1cnZlc0VuYWJsZWQ7Cisg
ICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHdldGhlciB0aGUgY29sb3Ig
Y3VydmVzIGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbi5jb2xvckN1cnZlc0VuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1l
cmFDb2xvckdyYWRpbmdFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB3
ZXRoZXIgdGhlIGNvbG9yIGdyYWRpbmcgZWZmZWN0IGlzIGVuYWJsZWQuCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uY29sb3JHcmFkaW5nRW5hYmxlZDsKKyAgICAgICAgfSwK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0aGVyIHRoZSBjb2xvciBncmFkaW5nIGVm
ZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xv
ckdyYWRpbmdFbmFibGVkID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiY2FtZXJhVG9uZU1h
cHBpbmdFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB3ZXRoZXIgdG9u
ZW1hcHBpbmcgaXMgZW5hYmxlZCBvciBub3QuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25m
aWd1cmF0aW9uLnRvbmVNYXBwaW5nRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNldHMgd2V0aGVyIHRvbmVtYXBwaW5nIGlzIGVuYWJsZWQgb3Igbm90CisgICAg
ICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhp
cy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi50b25lTWFwcGluZ0VuYWJsZWQgPSB2YWx1
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhY2tncm91
bmRNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1lcmFFeHBvc3VyZSIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFRoZSBjYW1lcmEgZXhwb3N1cmUgdXNlZCBvbiB0aGlzIG1hdGVyaWFsLgorICAg
ICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGhlcmUgYW5kIG5vdCBpbiB0aGUgY2FtZXJhIHRvIGFs
bG93IGNvbnRyb2xsaW5nIGV4cG9zdXJlIHdpdGhvdXQgZnVsbCBzY3JlZW4gcG9zdCBwcm9jZXNz
LgorICAgICAgICAgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIGEgcGhvdG9ncmFwaGljIGV4cG9zdXJl
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5leHBvc3VyZTsKKyAgICAg
ICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjYW1lcmEgZXhwb3N1cmUgdXNlZCBv
biB0aGlzIG1hdGVyaWFsLgorICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGhlcmUgYW5kIG5v
dCBpbiB0aGUgY2FtZXJhIHRvIGFsbG93IGNvbnRyb2xsaW5nIGV4cG9zdXJlIHdpdGhvdXQgZnVs
bCBzY3JlZW4gcG9zdCBwcm9jZXNzLgorICAgICAgICAgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIGEg
cGhvdG9ncmFwaGljIGV4cG9zdXJlLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRp
b24uZXhwb3N1cmUgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1lcmFDb250cmFzdCIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgVGhlIGNhbWVyYSBjb250cmFzdCB1c2Vk
IG9uIHRoaXMgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
LmNvbnRyYXN0OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyBUaGUg
Y2FtZXJhIGNvbnRyYXN0IHVzZWQgb24gdGhpcyBtYXRlcmlhbC4KKyAgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uLmNvbnRyYXN0ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAi
Y2FtZXJhQ29sb3JHcmFkaW5nVGV4dHVyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIENvbG9yIEdyYWRpbmcgMkQgTG9va3VwIFRleHR1cmUuCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yR3JhZGluZ1RleHR1cmU7CisgICAgICAgIH0sCisg
ICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBDb2xvciBHcmFkaW5nIDJEIExvb2t1cCBU
ZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckdyYWRpbmdU
ZXh0dXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiY2FtZXJhQ29sb3JDdXJ2ZXMiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY29sb3IgZ3JhZGluZyBjdXJ2ZXMgcHJvdmlk
ZSBhZGRpdGlvbmFsIGNvbG9yIGFkanVzdG1uZW50IHRoYXQgaXMgYXBwbGllZCBhZnRlciBhbnkg
Y29sb3IgZ3JhZGluZyB0cmFuc2Zvcm0gKDNEIExVVCkuCisgICAgICAgICAqIFRoZXkgYWxsb3cg
YmFzaWMgYWRqdXN0bWVudCBvZiBzYXR1cmF0aW9uIGFuZCBzbWFsbCBleHBvc3VyZSBhZGp1c3Rt
ZW50cywgYWxvbmcgd2l0aCBjb2xvciBmaWx0ZXIgdGludGluZyB0byBwcm92aWRlIHdoaXRlIGJh
bGFuY2UgYWRqdXN0bWVudCBvciBtb3JlIHN0eWxpc3RpYyBlZmZlY3RzLgorICAgICAgICAgKiBU
aGVzZSBhcmUgc2ltaWxhciB0byBjb250cm9scyBmb3VuZCBpbiBtYW55IHByb2Zlc3Npb25hbCBp
bWFnaW5nIG9yIGNvbG9yaXN0IHNvZnR3YXJlLiBUaGUgZ2xvYmFsIGNvbnRyb2xzIGFyZSBhcHBs
aWVkIHRvIHRoZSBlbnRpcmUgaW1hZ2UuIEZvciBhZHZhbmNlZCB0dW5pbmcsIGV4dHJhIGNvbnRy
b2xzIGFyZSBwcm92aWRlZCB0byBhZGp1c3QgdGhlIHNoYWRvdywgbWlkdG9uZSBhbmQgaGlnaGxp
Z2h0IGFyZWFzIG9mIHRoZSBpbWFnZTsKKyAgICAgICAgICogY29ycmVzcG9uZGluZyB0byBsb3cg
bHVtaW5hbmNlLCBtZWRpdW0gbHVtaW5hbmNlLCBhbmQgaGlnaCBsdW1pbmFuY2UgYXJlYXMgcmVz
cGVjdGl2ZWx5LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yQ3Vy
dmVzOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIGdyYWRp
bmcgY3VydmVzIHByb3ZpZGUgYWRkaXRpb25hbCBjb2xvciBhZGp1c3RtbmVudCB0aGF0IGlzIGFw
cGxpZWQgYWZ0ZXIgYW55IGNvbG9yIGdyYWRpbmcgdHJhbnNmb3JtICgzRCBMVVQpLgorICAgICAg
ICAgKiBUaGV5IGFsbG93IGJhc2ljIGFkanVzdG1lbnQgb2Ygc2F0dXJhdGlvbiBhbmQgc21hbGwg
ZXhwb3N1cmUgYWRqdXN0bWVudHMsIGFsb25nIHdpdGggY29sb3IgZmlsdGVyIHRpbnRpbmcgdG8g
cHJvdmlkZSB3aGl0ZSBiYWxhbmNlIGFkanVzdG1lbnQgb3IgbW9yZSBzdHlsaXN0aWMgZWZmZWN0
cy4KKyAgICAgICAgICogVGhlc2UgYXJlIHNpbWlsYXIgdG8gY29udHJvbHMgZm91bmQgaW4gbWFu
eSBwcm9mZXNzaW9uYWwgaW1hZ2luZyBvciBjb2xvcmlzdCBzb2Z0d2FyZS4gVGhlIGdsb2JhbCBj
b250cm9scyBhcmUgYXBwbGllZCB0byB0aGUgZW50aXJlIGltYWdlLiBGb3IgYWR2YW5jZWQgdHVu
aW5nLCBleHRyYSBjb250cm9scyBhcmUgcHJvdmlkZWQgdG8gYWRqdXN0IHRoZSBzaGFkb3csIG1p
ZHRvbmUgYW5kIGhpZ2hsaWdodCBhcmVhcyBvZiB0aGUgaW1hZ2U7CisgICAgICAgICAqIGNvcnJl
c3BvbmRpbmcgdG8gbG93IGx1bWluYW5jZSwgbWVkaXVtIGx1bWluYW5jZSwgYW5kIGhpZ2ggbHVt
aW5hbmNlIGFyZWFzIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24uY29sb3JDdXJ2ZXMgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJoYXNSZW5kZXJU
YXJnZXRUZXh0dXJlcyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFu
IGluZGljYXRpbmcgdGhhdCBjdXJyZW50IG1hdGVyaWFsIG5lZWRzIHRvIHJlZ2lzdGVyIFJUVAor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fZGlmZnVzZVRleHR1cmUgJiYgdGhpcy5fZGlmZnVzZVRleHR1cmUuaXNSZW5kZXJUYXJn
ZXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSAmJiB0aGlzLl9yZWZsZWN0aW9uVGV4
dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvKioKKyAgICAgKiBUaGUgZW50aXJlIG1hdGVyaWFsIGhhcyBiZWVuIGNyZWF0ZWQgaW4g
b3JkZXIgdG8gcHJldmVudCBvdmVyZHJhdy4KKyAgICAgKiBAcmV0dXJucyBmYWxzZQorICAgICAq
LworICAgIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhhVGVzdGluZyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBUaGUgZW50aXJlIG1hdGVyaWFsIGhhcyBiZWVuIGNyZWF0ZWQgaW4gb3JkZXIgdG8gcHJldmVu
dCBvdmVyZHJhdy4KKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGJsZW5kaW5nIGlzIGVuYWJsZQor
ICAgICAqLworICAgIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhhQmxlbmRp
bmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAoKHRoaXMuYWxwaGEgPCAwKSB8fCAo
dGhpcy5fZGlmZnVzZVRleHR1cmUgIT0gbnVsbCAmJiB0aGlzLl9kaWZmdXNlVGV4dHVyZS5oYXNB
bHBoYSkpOworICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2tzIHdldGhlciB0aGUgbWF0ZXJp
YWwgaXMgcmVhZHkgdG8gYmUgcmVuZGVyZWQgZm9yIGEgZ2l2ZW4gbWVzaC4KKyAgICAgKiBAcGFy
YW0gbWVzaCBUaGUgbWVzaCB0byByZW5kZXIKKyAgICAgKiBAcGFyYW0gc3ViTWVzaCBUaGUgc3Vi
bWVzaCB0byBjaGVjayBhZ2FpbnN0CisgICAgICogQHBhcmFtIHVzZUluc3RhbmNlcyBTcGVjaWZ5
IHdldGhlciBvciBub3QgdGhlIG1hdGVyaWFsIGlzIHVzZWQgd2l0aCBpbnN0YW5jZXMKKyAgICAg
KiBAcmV0dXJucyB0cnVlIGlmIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFyZSByZWFkeSAoVGV4dHVy
ZXMsIEVmZmVjdHMuLi4pCisgICAgICovCisgICAgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlw
ZS5pc1JlYWR5Rm9yU3ViTWVzaCA9IGZ1bmN0aW9uIChtZXNoLCBzdWJNZXNoLCB1c2VJbnN0YW5j
ZXMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHVzZUluc3RhbmNl
cyA9PT0gdm9pZCAwKSB7IHVzZUluc3RhbmNlcyA9IGZhbHNlOyB9CisgICAgICAgIGlmIChzdWJN
ZXNoLmVmZmVjdCAmJiB0aGlzLmlzRnJvemVuKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fd2Fz
UHJldmlvdXNseVJlYWR5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdWJNZXNoLl9tYXRlcmlhbERlZmluZXMp
IHsKKyAgICAgICAgICAgIHN1Yk1lc2guX21hdGVyaWFsRGVmaW5lcyA9IG5ldyBCYWNrZ3JvdW5k
TWF0ZXJpYWxEZWZpbmVzKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5n
ZXRTY2VuZSgpOworICAgICAgICB2YXIgZGVmaW5lcyA9IHN1Yk1lc2guX21hdGVyaWFsRGVmaW5l
czsKKyAgICAgICAgaWYgKCF0aGlzLmNoZWNrUmVhZHlPbkV2ZXJ5Q2FsbCAmJiBzdWJNZXNoLmVm
ZmVjdCkgeworICAgICAgICAgICAgaWYgKGRlZmluZXMuX3JlbmRlcklkID09PSBzY2VuZS5nZXRS
ZW5kZXJJZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOworICAg
ICAgICAvLyBMaWdodHMKKyAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9y
TGlnaHRzKHNjZW5lLCBtZXNoLCBkZWZpbmVzLCBmYWxzZSwgdGhpcy5fbWF4U2ltdWx0YW5lb3Vz
TGlnaHRzKTsKKyAgICAgICAgZGVmaW5lcy5fbmVlZE5vcm1hbHMgPSB0cnVlOworICAgICAgICAv
LyBNdWx0aXZpZXcKKyAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yTXVs
dGl2aWV3KHNjZW5lLCBkZWZpbmVzKTsKKyAgICAgICAgLy8gVGV4dHVyZXMKKyAgICAgICAgaWYg
KGRlZmluZXMuX2FyZVRleHR1cmVzRGlydHkpIHsKKyAgICAgICAgICAgIGRlZmluZXMuX25lZWRV
VnMgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc2NlbmUuZ2V0RW5naW5lKCkuZ2V0Q2FwcygpLnRleHR1cmVMT0Qp
IHsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5URVhUVVJFTE9EU1VQUE9SVCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4
dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0
ZXJpYWxGbGFncyJdLkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIXRoaXMuX2RpZmZ1c2VUZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JN
ZXJnZWRVVih0aGlzLl9kaWZmdXNlVGV4dHVyZSwgZGVmaW5lcywgIkRJRkZVU0UiKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmaW5lcy5ESUZGVVNFSEFTQUxQSEEgPSB0aGlzLl9kaWZmdXNlVGV4
dHVyZS5oYXNBbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5HQU1NQURJRkZVU0Ug
PSB0aGlzLl9kaWZmdXNlVGV4dHVyZS5nYW1tYVNwYWNlOworICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLk9QQUNJVFlGUkVTTkVMID0gdGhpcy5fb3BhY2l0eUZyZXNuZWw7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWZp
bmVzLkRJRkZVU0UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5ESUZGVVNF
SEFTQUxQSEEgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5HQU1NQURJRkZV
U0UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5PUEFDSVRZRlJFU05FTCA9
IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgcmVmbGVjdGlv
blRleHR1cmUgPSB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZTsKKyAgICAgICAgICAgICAgICBpZiAo
cmVmbGVjdGlvblRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE0X19bIk1hdGVyaWFsRmxhZ3MiXS5SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFyZWZsZWN0aW9uVGV4dHVyZS5pc1JlYWR5T3JOb3RCbG9j
a2luZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5HQU1NQVJFRkxFQ1RJT04gPSByZWZs
ZWN0aW9uVGV4dHVyZS5nYW1tYVNwYWNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJH
QkRSRUZMRUNUSU9OID0gcmVmbGVjdGlvblRleHR1cmUuaXNSR0JEOworICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLlJFRkxFQ1RJT05CTFVSID0gdGhpcy5fcmVmbGVjdGlvbkJsdXIgPiAwOwor
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfT1BQT1NJVEVaID0gdGhp
cy5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVtID8gIXJlZmxlY3Rpb25UZXh0dXJlLmlu
dmVydFogOiByZWZsZWN0aW9uVGV4dHVyZS5pbnZlcnRaOworICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLkxPRElOUkVGTEVDVElPTkFMUEhBID0gcmVmbGVjdGlvblRleHR1cmUubG9kTGV2ZWxJ
bkFscGhhOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkVRVUlSRUNUQU5HVUxBUl9SRUxG
RUNUSU9OX0ZPViA9IHRoaXMudXNlRXF1aXJlY3Rhbmd1bGFyRk9WOworICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLlJFRkxFQ1RJT05CR1IgPSB0aGlzLnN3aXRjaFRvQkdSOworICAgICAgICAg
ICAgICAgICAgICBpZiAocmVmbGVjdGlvblRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfTWF0
ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIlRl
eHR1cmUiXS5JTlZDVUJJQ19NT0RFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVz
LklOVkVSVENVQklDTUFQID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfM0QgPSByZWZsZWN0aW9uVGV4dHVyZS5p
c0N1YmU7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVmbGVjdGlvblRleHR1cmUuY29v
cmRpbmF0ZXNNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNf
VGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siVGV4dHVyZSJd
LkVYUExJQ0lUX01PREU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZM
RUNUSU9OTUFQX0VYUExJQ0lUID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJUZXh0dXJlIl0uUExBTkFSX01P
REU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1BM
QU5BUiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTFfX1siVGV4dHVyZSJdLlBST0pFQ1RJT05fTU9ERToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfUFJPSkVDVElPTiA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTFfX1siVGV4dHVyZSJdLlNLWUJPWF9NT0RFOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9TS1lCT1ggPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9TS1lCT1hfVFJBTlNG
T1JNRUQgPSAhcmVmbGVjdGlvblRleHR1cmUuZ2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXgoKS5p
c0lkZW50aXR5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTFfX1siVGV4dHVyZSJdLlNQSEVSSUNBTF9NT0RFOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9TUEhFUklDQUwgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzExX19bIlRleHR1cmUiXS5FUVVJUkVDVEFOR1VMQVJfTU9ERToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFS
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMV9fWyJUZXh0dXJlIl0uRklYRURfRVFVSVJFQ1RBTkdVTEFSX01PREU6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX0VRVUlS
RUNUQU5HVUxBUl9GSVhFRCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siVGV4dHVyZSJdLkZJWEVEX0VRVUlS
RUNUQU5HVUxBUl9NSVJST1JFRF9NT0RFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmluZXMuUkVGTEVDVElPTk1BUF9NSVJST1JFREVRVUlSRUNUQU5HVUxBUl9GSVhFRCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siVGV4dHVyZSJdLkNVQklDX01PREU6CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfX1siVGV4dHVyZSJdLklOVkNVQklDX01PREU6CisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElP
Tk1BUF9DVUJJQyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVmbGVj
dGlvbkZyZXNuZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElP
TkZSRVNORUwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNU
SU9ORkFMTE9GRiA9IHRoaXMucmVmbGVjdGlvbkZhbGxvZmZEaXN0YW5jZSA+IDA7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9yZWZsZWN0aW9uQ29udHJvbHMueCA9IHRoaXMucmVmbGVj
dGlvbkFtb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZmxlY3Rpb25Db250
cm9scy55ID0gdGhpcy5yZWZsZWN0aW9uUmVmbGVjdGFuY2UwOworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fcmVmbGVjdGlvbkNvbnRyb2xzLnogPSB0aGlzLnJlZmxlY3Rpb25SZWZsZWN0
YW5jZTkwOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVmbGVjdGlvbkNvbnRyb2xz
LncgPSAxIC8gdGhpcy5yZWZsZWN0aW9uRmFsbG9mZkRpc3RhbmNlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lcy5SRUZMRUNUSU9ORlJFU05FTCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lcy5SRUZMRUNUSU9ORkFMTE9GRiA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT04gPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lcy5SRUZMRUNUSU9ORlJFU05FTCA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLlJFRkxFQ1RJT05GQUxMT0ZGID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmluZXMuUkVGTEVDVElPTkJMVVIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lcy5SRUZMRUNUSU9OTUFQXzNEID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmluZXMuUkVGTEVDVElPTk1BUF9TUEhFUklDQUwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1BMQU5BUiA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfQ1VCSUMgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1BST0pFQ1RJT04gPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1NLWUJPWCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfU0tZQk9YX1RSQU5TRk9STUVEID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9FWFBMSUNJ
VCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfRVFV
SVJFQ1RBTkdVTEFSID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVD
VElPTk1BUF9FUVVJUkVDVEFOR1VMQVJfRklYRUQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX01JUlJPUkVERVFVSVJFQ1RBTkdVTEFSX0ZJWEVEID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuSU5WRVJUQ1VCSUNNQVAgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX09QUE9TSVRFWiA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkxPRElOUkVGTEVDVElPTkFMUEhB
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuR0FNTUFSRUZMRUNUSU9OID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkdCRFJFRkxFQ1RJT04gPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZpbmVz
LlBSRU1VTFRJUExZQUxQSEEgPSAodGhpcy5hbHBoYU1vZGUgPT09IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siQ29uc3RhbnRzIl0uQUxQSEFfUFJFTVVM
VElQTElFRCB8fCB0aGlzLmFscGhhTW9kZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMl9fWyJDb25zdGFudHMiXS5BTFBIQV9QUkVNVUxUSVBMSUVEX1BP
UlRFUkRVRkYpOworICAgICAgICAgICAgZGVmaW5lcy5VU0VSR0JDT0xPUiA9IHRoaXMuX3VzZVJH
QkNvbG9yOworICAgICAgICAgICAgZGVmaW5lcy5OT0lTRSA9IHRoaXMuX2VuYWJsZU5vaXNlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLl9hcmVMaWdodHNEaXJ0eSkgeworICAgICAg
ICAgICAgZGVmaW5lcy5VU0VISUdITElHSFRBTkRTSEFET1dDT0xPUlMgPSAhdGhpcy5fdXNlUkdC
Q29sb3IgJiYgKHRoaXMuX3ByaW1hcnlDb2xvclNoYWRvd0xldmVsICE9PSAwIHx8IHRoaXMuX3By
aW1hcnlDb2xvckhpZ2hsaWdodExldmVsICE9PSAwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ZGVmaW5lcy5fYXJlSW1hZ2VQcm9jZXNzaW5nRGlydHkgJiYgdGhpcy5faW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9pbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24ucHJlcGFyZURlZmluZXMoZGVmaW5lcyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTWlz
Yy4KKyAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yTWlzYyhtZXNoLCBz
Y2VuZSwgZmFsc2UsIHRoaXMucG9pbnRzQ2xvdWQsIHRoaXMuZm9nRW5hYmxlZCwgdGhpcy5fc2hv
dWxkVHVybkFscGhhVGVzdE9uKG1lc2gpLCBkZWZpbmVzKTsKKyAgICAgICAgLy8gVmFsdWVzIHRo
YXQgbmVlZCB0byBiZSBldmFsdWF0ZWQgb24gZXZlcnkgZnJhbWUKKyAgICAgICAgX01hdGVyaWFs
c19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJNYXRlcmlhbEhl
bHBlciJdLlByZXBhcmVEZWZpbmVzRm9yRnJhbWVCb3VuZFZhbHVlcyhzY2VuZSwgZW5naW5lLCBk
ZWZpbmVzLCB1c2VJbnN0YW5jZXMpOworICAgICAgICAvLyBBdHRyaWJzCisgICAgICAgIGlmIChf
TWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1h
dGVyaWFsSGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JBdHRyaWJ1dGVzKG1lc2gsIGRlZmluZXMs
IGZhbHNlLCB0cnVlLCBmYWxzZSkpIHsKKyAgICAgICAgICAgIGlmIChtZXNoKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFzY2VuZS5nZXRFbmdpbmUoKS5nZXRDYXBzKCkuc3RhbmRhcmREZXJpdmF0
aXZlcyAmJiAhbWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWVzaC5jcmVhdGVOb3JtYWxzKHRydWUpOworICAgICAgICAgICAg
ICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTG9nZ2Vy
Il0uV2FybigiQmFja2dyb3VuZE1hdGVyaWFsOiBOb3JtYWxzIGhhdmUgYmVlbiBjcmVhdGVkIGZv
ciB0aGUgbWVzaDogIiArIG1lc2gubmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEdldCBjb3JyZWN0IGVmZmVjdAorICAgICAgICBp
ZiAoZGVmaW5lcy5pc0RpcnR5KSB7CisgICAgICAgICAgICBkZWZpbmVzLm1hcmtBc1Byb2Nlc3Nl
ZCgpOworICAgICAgICAgICAgc2NlbmUucmVzZXRDYWNoZWRNYXRlcmlhbCgpOworICAgICAgICAg
ICAgLy8gRmFsbGJhY2tzCisgICAgICAgICAgICB2YXIgZmFsbGJhY2tzID0gbmV3IF9NYXRlcmlh
bHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkVmZmVjdEZhbGxiYWNrcyJd
KCk7CisgICAgICAgICAgICBpZiAoZGVmaW5lcy5GT0cpIHsKKyAgICAgICAgICAgICAgICBmYWxs
YmFja3MuYWRkRmFsbGJhY2soMCwgIkZPRyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGRlZmluZXMuUE9JTlRTSVpFKSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZh
bGxiYWNrKDEsICJQT0lOVFNJWkUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChk
ZWZpbmVzLk1VTFRJVklFVykgeworICAgICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFj
aygwLCAiTVVMVElWSUVXIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfTWF0ZXJpYWxz
X21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVs
cGVyIl0uSGFuZGxlRmFsbGJhY2tzRm9yU2hhZG93cyhkZWZpbmVzLCBmYWxsYmFja3MsIHRoaXMu
X21heFNpbXVsdGFuZW91c0xpZ2h0cyk7CisgICAgICAgICAgICAvL0F0dHJpYnV0ZXMKKyAgICAg
ICAgICAgIHZhciBhdHRyaWJzID0gW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAgICAgICBpZiAo
ZGVmaW5lcy5OT1JNQUwpIHsKKyAgICAgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFs
S2luZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVmaW5lcy5VVjEpIHsKKyAg
ICAgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChkZWZpbmVzLlVWMikgeworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVz
aChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZm
ZXIiXS5VVjJLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0
ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTWF0ZXJpYWxIZWxwZXIi
XS5QcmVwYXJlQXR0cmlidXRlc0ZvckJvbmVzKGF0dHJpYnMsIG1lc2gsIGRlZmluZXMsIGZhbGxi
YWNrcyk7CisgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZUF0dHJpYnV0ZXNGb3JJ
bnN0YW5jZXMoYXR0cmlicywgZGVmaW5lcyk7CisgICAgICAgICAgICB2YXIgdW5pZm9ybXMgPSBb
IndvcmxkIiwgInZpZXciLCAidmlld1Byb2plY3Rpb24iLCAidkV5ZVBvc2l0aW9uIiwgInZMaWdo
dHNUeXBlIiwKKyAgICAgICAgICAgICAgICAidkZvZ0luZm9zIiwgInZGb2dDb2xvciIsICJwb2lu
dFNpemUiLAorICAgICAgICAgICAgICAgICJ2Q2xpcFBsYW5lIiwgInZDbGlwUGxhbmUyIiwgInZD
bGlwUGxhbmUzIiwgInZDbGlwUGxhbmU0IiwgIm1Cb25lcyIsCisgICAgICAgICAgICAgICAgInZQ
cmltYXJ5Q29sb3IiLCAidlByaW1hcnlDb2xvclNoYWRvdyIsCisgICAgICAgICAgICAgICAgInZS
ZWZsZWN0aW9uSW5mb3MiLCAicmVmbGVjdGlvbk1hdHJpeCIsICJ2UmVmbGVjdGlvbk1pY3Jvc3Vy
ZmFjZUluZm9zIiwgImZGb3ZNdWx0aXBsaWVyIiwKKyAgICAgICAgICAgICAgICAic2hhZG93TGV2
ZWwiLCAiYWxwaGEiLAorICAgICAgICAgICAgICAgICJ2QmFja2dyb3VuZENlbnRlciIsICJ2UmVm
bGVjdGlvbkNvbnRyb2wiLAorICAgICAgICAgICAgICAgICJ2RGlmZnVzZUluZm9zIiwgImRpZmZ1
c2VNYXRyaXgiLAorICAgICAgICAgICAgXTsKKyAgICAgICAgICAgIHZhciBzYW1wbGVycyA9IFsi
ZGlmZnVzZVNhbXBsZXIiLCAicmVmbGVjdGlvblNhbXBsZXIiLCAicmVmbGVjdGlvblNhbXBsZXJM
b3ciLCAicmVmbGVjdGlvblNhbXBsZXJIaWdoIl07CisgICAgICAgICAgICB2YXIgdW5pZm9ybUJ1
ZmZlcnMgPSBbIk1hdGVyaWFsIiwgIlNjZW5lIl07CisgICAgICAgICAgICBpZiAoX01hdGVyaWFs
c19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fWyJJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIl0pIHsKKyAgICAgICAgICAgICAgICBf
TWF0ZXJpYWxzX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEwX19bIkltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iXS5QcmVwYXJlVW5pZm9y
bXModW5pZm9ybXMsIGRlZmluZXMpOworICAgICAgICAgICAgICAgIF9NYXRlcmlhbHNfaW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siSW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiJdLlByZXBhcmVTYW1wbGVycyhzYW1wbGVycywgZGVm
aW5lcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVs
cGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFy
ZVVuaWZvcm1zQW5kU2FtcGxlcnNMaXN0KHsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtc05hbWVz
OiB1bmlmb3JtcywKKyAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyc05hbWVzOiB1bmlmb3Jt
QnVmZmVycywKKyAgICAgICAgICAgICAgICBzYW1wbGVyczogc2FtcGxlcnMsCisgICAgICAgICAg
ICAgICAgZGVmaW5lczogZGVmaW5lcywKKyAgICAgICAgICAgICAgICBtYXhTaW11bHRhbmVvdXNM
aWdodHM6IHRoaXMuX21heFNpbXVsdGFuZW91c0xpZ2h0cworICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB2YXIgb25Db21waWxlZCA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoX3RoaXMub25Db21waWxlZCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5v
bkNvbXBpbGVkKGVmZmVjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF90
aGlzLmJpbmRTY2VuZVVuaWZvcm1CdWZmZXIoZWZmZWN0LCBzY2VuZS5nZXRTY2VuZVVuaWZvcm1C
dWZmZXIoKSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIGpvaW4gPSBkZWZpbmVz
LnRvU3RyaW5nKCk7CisgICAgICAgICAgICBzdWJNZXNoLnNldEVmZmVjdChzY2VuZS5nZXRFbmdp
bmUoKS5jcmVhdGVFZmZlY3QoImJhY2tncm91bmQiLCB7CisgICAgICAgICAgICAgICAgYXR0cmli
dXRlczogYXR0cmlicywKKyAgICAgICAgICAgICAgICB1bmlmb3Jtc05hbWVzOiB1bmlmb3JtcywK
KyAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyc05hbWVzOiB1bmlmb3JtQnVmZmVycywKKyAg
ICAgICAgICAgICAgICBzYW1wbGVyczogc2FtcGxlcnMsCisgICAgICAgICAgICAgICAgZGVmaW5l
czogam9pbiwKKyAgICAgICAgICAgICAgICBmYWxsYmFja3M6IGZhbGxiYWNrcywKKyAgICAgICAg
ICAgICAgICBvbkNvbXBpbGVkOiBvbkNvbXBpbGVkLAorICAgICAgICAgICAgICAgIG9uRXJyb3I6
IHRoaXMub25FcnJvciwKKyAgICAgICAgICAgICAgICBpbmRleFBhcmFtZXRlcnM6IHsgbWF4U2lt
dWx0YW5lb3VzTGlnaHRzOiB0aGlzLl9tYXhTaW11bHRhbmVvdXNMaWdodHMgfQorICAgICAgICAg
ICAgfSwgZW5naW5lKSwgZGVmaW5lcyk7CisgICAgICAgICAgICB0aGlzLmJ1aWxkVW5pZm9ybUxh
eW91dCgpOworICAgICAgICB9CisgICAgICAgIGlmICghc3ViTWVzaC5lZmZlY3QgfHwgIXN1Yk1l
c2guZWZmZWN0LmlzUmVhZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGRlZmluZXMuX3JlbmRlcklkID0gc2NlbmUuZ2V0UmVuZGVySWQoKTsKKyAg
ICAgICAgdGhpcy5fd2FzUHJldmlvdXNseVJlYWR5ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb21wdXRlIHRoZSBwcmltYXJ5IGNvbG9yIGFj
Y29yZGluZyB0byB0aGUgY2hvc2VuIHBlcmNlcHR1YWwgY29sb3IuCisgICAgICovCisgICAgQmFj
a2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZS5fY29tcHV0ZVByaW1hcnlDb2xvckZyb21QZXJjZXB0
dWFsQ29sb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fX3BlcmNlcHR1YWxD
b2xvcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3By
aW1hcnlDb2xvci5jb3B5RnJvbSh0aGlzLl9fcGVyY2VwdHVhbENvbG9yKTsKKyAgICAgICAgLy8g
UmV2ZXJ0IGdhbW1hIHNwYWNlLgorICAgICAgICB0aGlzLl9wcmltYXJ5Q29sb3IudG9MaW5lYXJT
cGFjZVRvUmVmKHRoaXMuX3ByaW1hcnlDb2xvcik7CisgICAgICAgIC8vIFJldmVydCBpbWFnZSBw
cm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIGlmICh0aGlzLl9pbWFnZVByb2Nlc3Np
bmdDb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICAvLyBSZXZlcnQgRXhwb3N1cmUuCisgICAg
ICAgICAgICB0aGlzLl9wcmltYXJ5Q29sb3Iuc2NhbGVUb1JlZigxIC8gdGhpcy5faW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbi5leHBvc3VyZSwgdGhpcy5fcHJpbWFyeUNvbG9yKTsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9jb21wdXRlUHJpbWFyeUNvbG9ycygpOworICAgIH07CisgICAg
LyoqCisgICAgICogQ29tcHV0ZSB0aGUgaGlnaGxpZ2h0cyBhbmQgc2hhZG93IGNvbG9ycyBhY2Nv
cmRpbmcgdG8gdGhlaXIgY2hvc2VuIGxldmVscy4KKyAgICAgKi8KKyAgICBCYWNrZ3JvdW5kTWF0
ZXJpYWwucHJvdG90eXBlLl9jb21wdXRlUHJpbWFyeUNvbG9ycyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKHRoaXMuX3ByaW1hcnlDb2xvclNoYWRvd0xldmVsID09PSAwICYmIHRoaXMuX3By
aW1hcnlDb2xvckhpZ2hsaWdodExldmVsID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gRmluZCB0aGUgaGlnaGxpZ2h0IGNvbG9yIGJhc2VkIG9uIHRo
ZSBjb25maWd1cmF0aW9uLgorICAgICAgICB0aGlzLl9wcmltYXJ5Q29sb3Iuc2NhbGVUb1JlZih0
aGlzLl9wcmltYXJ5Q29sb3JTaGFkb3dMZXZlbCwgdGhpcy5fcHJpbWFyeVNoYWRvd0NvbG9yKTsK
KyAgICAgICAgdGhpcy5fcHJpbWFyeUNvbG9yLnN1YnRyYWN0VG9SZWYodGhpcy5fcHJpbWFyeVNo
YWRvd0NvbG9yLCB0aGlzLl9wcmltYXJ5U2hhZG93Q29sb3IpOworICAgICAgICAvLyBGaW5kIHRo
ZSBzaGFkb3cgY29sb3IgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIHRoaXMu
X3doaXRlLnN1YnRyYWN0VG9SZWYodGhpcy5fcHJpbWFyeUNvbG9yLCB0aGlzLl9wcmltYXJ5SGln
aGxpZ2h0Q29sb3IpOworICAgICAgICB0aGlzLl9wcmltYXJ5SGlnaGxpZ2h0Q29sb3Iuc2NhbGVU
b1JlZih0aGlzLl9wcmltYXJ5Q29sb3JIaWdobGlnaHRMZXZlbCwgdGhpcy5fcHJpbWFyeUhpZ2hs
aWdodENvbG9yKTsKKyAgICAgICAgdGhpcy5fcHJpbWFyeUNvbG9yLmFkZFRvUmVmKHRoaXMuX3By
aW1hcnlIaWdobGlnaHRDb2xvciwgdGhpcy5fcHJpbWFyeUhpZ2hsaWdodENvbG9yKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEJ1aWxkIHRoZSB1bmlmb3JtIGJ1ZmZlciB1c2VkIGluIHRoZSBt
YXRlcmlhbC4KKyAgICAgKi8KKyAgICBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLmJ1aWxk
VW5pZm9ybUxheW91dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gT3JkZXIgaXMgaW1wb3J0
YW50ICEKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2UHJpbWFyeUNv
bG9yIiwgNCk7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidlByaW1h
cnlDb2xvclNoYWRvdyIsIDQpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZv
cm0oInZEaWZmdXNlSW5mb3MiLCAyKTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRV
bmlmb3JtKCJ2UmVmbGVjdGlvbkluZm9zIiwgMik7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZm
ZXIuYWRkVW5pZm9ybSgiZGlmZnVzZU1hdHJpeCIsIDE2KTsKKyAgICAgICAgdGhpcy5fdW5pZm9y
bUJ1ZmZlci5hZGRVbmlmb3JtKCJyZWZsZWN0aW9uTWF0cml4IiwgMTYpOworICAgICAgICB0aGlz
Ll91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3Mi
LCAzKTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJmRm92TXVsdGlw
bGllciIsIDEpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInBvaW50
U2l6ZSIsIDEpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInNoYWRv
d0xldmVsIiwgMSk7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgiYWxw
aGEiLCAxKTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2QmFja2dy
b3VuZENlbnRlciIsIDMpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0o
InZSZWZsZWN0aW9uQ29udHJvbCIsIDQpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmNy
ZWF0ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogVW5iaW5kIHRoZSBtYXRlcmlhbC4KKyAg
ICAgKi8KKyAgICBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2RpZmZ1c2VUZXh0dXJlICYmIHRoaXMuX2RpZmZ1c2VU
ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVy
LnNldFRleHR1cmUoImRpZmZ1c2VTYW1wbGVyIiwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlICYmIHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlLmlz
UmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnNldFRleHR1
cmUoInJlZmxlY3Rpb25TYW1wbGVyIiwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgX3N1cGVy
LnByb3RvdHlwZS51bmJpbmQuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJp
bmQgb25seSB0aGUgd29ybGQgbWF0cml4IHRvIHRoZSBtYXRlcmlhbC4KKyAgICAgKiBAcGFyYW0g
d29ybGQgVGhlIHdvcmxkIG1hdHJpeCB0byBiaW5kLgorICAgICAqLworICAgIEJhY2tncm91bmRN
YXRlcmlhbC5wcm90b3R5cGUuYmluZE9ubHlXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uICh3b3JsZCkg
eworICAgICAgICB0aGlzLl9hY3RpdmVFZmZlY3Quc2V0TWF0cml4KCJ3b3JsZCIsIHdvcmxkKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmQgdGhlIG1hdGVyaWFsIGZvciBhIGRlZGljYXRl
ZCBzdWJtZWggKGV2ZXJ5IHVzZWQgbWVzaGVzIHdpbGwgYmUgY29uc2lkZXJlZCBvcGFxdWUpLgor
ICAgICAqIEBwYXJhbSB3b3JsZCBUaGUgd29ybGQgbWF0cml4IHRvIGJpbmQuCisgICAgICogQHBh
cmFtIHN1Yk1lc2ggVGhlIHN1Ym1lc2ggdG8gYmluZCBmb3IuCisgICAgICovCisgICAgQmFja2dy
b3VuZE1hdGVyaWFsLnByb3RvdHlwZS5iaW5kRm9yU3ViTWVzaCA9IGZ1bmN0aW9uICh3b3JsZCwg
bWVzaCwgc3ViTWVzaCkgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7Cisg
ICAgICAgIHZhciBkZWZpbmVzID0gc3ViTWVzaC5fbWF0ZXJpYWxEZWZpbmVzOworICAgICAgICBp
ZiAoIWRlZmluZXMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2
YXIgZWZmZWN0ID0gc3ViTWVzaC5lZmZlY3Q7CisgICAgICAgIGlmICghZWZmZWN0KSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWN0aXZlRWZmZWN0ID0g
ZWZmZWN0OworICAgICAgICAvLyBNYXRyaWNlcworICAgICAgICB0aGlzLmJpbmRPbmx5V29ybGRN
YXRyaXgod29ybGQpOworICAgICAgICAvLyBCb25lcworICAgICAgICBfTWF0ZXJpYWxzX21hdGVy
aWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVscGVyIl0u
QmluZEJvbmVzUGFyYW1ldGVycyhtZXNoLCB0aGlzLl9hY3RpdmVFZmZlY3QpOworICAgICAgICB2
YXIgbXVzdFJlYmluZCA9IHRoaXMuX211c3RSZWJpbmQoc2NlbmUsIGVmZmVjdCwgbWVzaC52aXNp
YmlsaXR5KTsKKyAgICAgICAgaWYgKG11c3RSZWJpbmQpIHsKKyAgICAgICAgICAgIHRoaXMuX3Vu
aWZvcm1CdWZmZXIuYmluZFRvRWZmZWN0KGVmZmVjdCwgIk1hdGVyaWFsIik7CisgICAgICAgICAg
ICB0aGlzLmJpbmRWaWV3UHJvamVjdGlvbihlZmZlY3QpOworICAgICAgICAgICAgdmFyIHJlZmxl
Y3Rpb25UZXh0dXJlID0gdGhpcy5fcmVmbGVjdGlvblRleHR1cmU7CisgICAgICAgICAgICBpZiAo
IXRoaXMuX3VuaWZvcm1CdWZmZXIudXNlVWJvIHx8ICF0aGlzLmlzRnJvemVuIHx8ICF0aGlzLl91
bmlmb3JtQnVmZmVyLmlzU3luYykgeworICAgICAgICAgICAgICAgIC8vIFRleHR1cmUgdW5pZm9y
bXMKKyAgICAgICAgICAgICAgICBpZiAoc2NlbmUudGV4dHVyZXNFbmFibGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkRpZmZ1c2VUZXh0
dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZl
ci51cGRhdGVGbG9hdDIoInZEaWZmdXNlSW5mb3MiLCB0aGlzLl9kaWZmdXNlVGV4dHVyZS5jb29y
ZGluYXRlc0luZGV4LCB0aGlzLl9kaWZmdXNlVGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIk1hdGVyaWFsSGVscGVyIl0uQmluZFRleHR1cmVNYXRyaXgodGhpcy5fZGlmZnVz
ZVRleHR1cmUsIHRoaXMuX3VuaWZvcm1CdWZmZXIsICJkaWZmdXNlIik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmxlY3Rpb25UZXh0dXJlICYmIF9t
YXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbEZsYWdz
Il0uUmVmbGVjdGlvblRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl91bmlmb3JtQnVmZmVyLnVwZGF0ZU1hdHJpeCgicmVmbGVjdGlvbk1hdHJpeCIsIHJlZmxl
Y3Rpb25UZXh0dXJlLmdldFJlZmxlY3Rpb25UZXh0dXJlTWF0cml4KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIoInZSZWZsZWN0aW9u
SW5mb3MiLCByZWZsZWN0aW9uVGV4dHVyZS5sZXZlbCwgdGhpcy5fcmVmbGVjdGlvbkJsdXIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDMo
InZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MiLCByZWZsZWN0aW9uVGV4dHVyZS5nZXRTaXpl
KCkud2lkdGgsIHJlZmxlY3Rpb25UZXh0dXJlLmxvZEdlbmVyYXRpb25TY2FsZSwgcmVmbGVjdGlv
blRleHR1cmUubG9kR2VuZXJhdGlvbk9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhZG93TGV2ZWwgPiAw
KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQo
InNoYWRvd0xldmVsIiwgdGhpcy5zaGFkb3dMZXZlbCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQoImFscGhhIiwgdGhp
cy5hbHBoYSk7CisgICAgICAgICAgICAgICAgLy8gUG9pbnQgc2l6ZQorICAgICAgICAgICAgICAg
IGlmICh0aGlzLnBvaW50c0Nsb3VkKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuaWZv
cm1CdWZmZXIudXBkYXRlRmxvYXQoInBvaW50U2l6ZSIsIHRoaXMucG9pbnRTaXplKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRlZmluZXMuVVNFSElHSExJR0hUQU5E
U0hBRE9XQ09MT1JTKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIu
dXBkYXRlQ29sb3I0KCJ2UHJpbWFyeUNvbG9yIiwgdGhpcy5fcHJpbWFyeUhpZ2hsaWdodENvbG9y
LCAxLjApOworICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnVwZGF0ZUNv
bG9yNCgidlByaW1hcnlDb2xvclNoYWRvdyIsIHRoaXMuX3ByaW1hcnlTaGFkb3dDb2xvciwgMS4w
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlQ29sb3I0KCJ2UHJpbWFyeUNvbG9y
IiwgdGhpcy5fcHJpbWFyeUNvbG9yLCAxLjApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQoImZGb3ZN
dWx0aXBsaWVyIiwgdGhpcy5fZm92TXVsdGlwbGllcik7CisgICAgICAgICAgICAvLyBUZXh0dXJl
cworICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAg
ICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkRpZmZ1c2VUZXh0dXJlRW5hYmxl
ZCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnNldFRleHR1cmUo
ImRpZmZ1c2VTYW1wbGVyIiwgdGhpcy5fZGlmZnVzZVRleHR1cmUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAocmVmbGVjdGlvblRleHR1cmUgJiYgX21hdGVyaWFsRmxh
Z3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVyaWFsRmxhZ3MiXS5SZWZsZWN0
aW9uVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmluZXMuUkVG
TEVDVElPTkJMVVIgJiYgZGVmaW5lcy5URVhUVVJFTE9EU1VQUE9SVCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJlKCJyZWZsZWN0aW9uU2Ft
cGxlciIsIHJlZmxlY3Rpb25UZXh0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmICghZGVmaW5lcy5SRUZMRUNUSU9OQkxVUikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJlKCJyZWZsZWN0
aW9uU2FtcGxlciIsIHJlZmxlY3Rpb25UZXh0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
X3VuaWZvcm1CdWZmZXIuc2V0VGV4dHVyZSgicmVmbGVjdGlvblNhbXBsZXIiLCByZWZsZWN0aW9u
VGV4dHVyZS5fbG9kVGV4dHVyZU1pZCB8fCByZWZsZWN0aW9uVGV4dHVyZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnNldFRleHR1cmUoInJlZmxlY3Rpb25T
YW1wbGVyTG93IiwgcmVmbGVjdGlvblRleHR1cmUuX2xvZFRleHR1cmVMb3cgfHwgcmVmbGVjdGlv
blRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5z
ZXRUZXh0dXJlKCJyZWZsZWN0aW9uU2FtcGxlckhpZ2giLCByZWZsZWN0aW9uVGV4dHVyZS5fbG9k
VGV4dHVyZUhpZ2ggfHwgcmVmbGVjdGlvblRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzLlJFRkxFQ1RJT05GUkVTTkVMKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0Mygi
dkJhY2tncm91bmRDZW50ZXIiLCB0aGlzLnNjZW5lQ2VudGVyLngsIHRoaXMuc2NlbmVDZW50ZXIu
eSwgdGhpcy5zY2VuZUNlbnRlci56KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vu
aWZvcm1CdWZmZXIudXBkYXRlRmxvYXQ0KCJ2UmVmbGVjdGlvbkNvbnRyb2wiLCB0aGlzLl9yZWZs
ZWN0aW9uQ29udHJvbHMueCwgdGhpcy5fcmVmbGVjdGlvbkNvbnRyb2xzLnksIHRoaXMuX3JlZmxl
Y3Rpb25Db250cm9scy56LCB0aGlzLl9yZWZsZWN0aW9uQ29udHJvbHMudyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBDbGlwIHBsYW5lCisgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVscGVyIl0uQmluZENsaXBQbGFu
ZSh0aGlzLl9hY3RpdmVFZmZlY3QsIHNjZW5lKTsKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0
ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTWF0ZXJpYWxIZWxwZXIi
XS5CaW5kRXllUG9zaXRpb24oZWZmZWN0LCBzY2VuZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG11c3RSZWJpbmQgfHwgIXRoaXMuaXNGcm96ZW4pIHsKKyAgICAgICAgICAgIGlmIChzY2VuZS5s
aWdodHNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRMaWdo
dHMoc2NlbmUsIG1lc2gsIHRoaXMuX2FjdGl2ZUVmZmVjdCwgZGVmaW5lcywgdGhpcy5fbWF4U2lt
dWx0YW5lb3VzTGlnaHRzLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBW
aWV3CisgICAgICAgICAgICB0aGlzLmJpbmRWaWV3KGVmZmVjdCk7CisgICAgICAgICAgICAvLyBG
b2cKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzdfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kRm9nUGFyYW1ldGVycyhzY2VuZSwg
bWVzaCwgdGhpcy5fYWN0aXZlRWZmZWN0LCB0cnVlKTsKKyAgICAgICAgICAgIC8vIGltYWdlIHBy
b2Nlc3NpbmcKKyAgICAgICAgICAgIGlmICh0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0
aW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bi5iaW5kKHRoaXMuX2FjdGl2ZUVmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci51cGRhdGUoKTsKKyAgICAgICAgdGhpcy5fYWZ0ZXJC
aW5kKG1lc2gsIHRoaXMuX2FjdGl2ZUVmZmVjdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
aGVja3MgdG8gc2VlIGlmIGEgdGV4dHVyZSBpcyB1c2VkIGluIHRoZSBtYXRlcmlhbC4KKyAgICAg
KiBAcGFyYW0gdGV4dHVyZSAtIEJhc2UgdGV4dHVyZSB0byB1c2UuCisgICAgICogQHJldHVybnMg
LSBCb29sZWFuIHNwZWNpZnlpbmcgaWYgYSB0ZXh0dXJlIGlzIHVzZWQgaW4gdGhlIG1hdGVyaWFs
LgorICAgICAqLworICAgIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUuaGFzVGV4dHVyZSA9
IGZ1bmN0aW9uICh0ZXh0dXJlKSB7CisgICAgICAgIGlmIChfc3VwZXIucHJvdG90eXBlLmhhc1Rl
eHR1cmUuY2FsbCh0aGlzLCB0ZXh0dXJlKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlID09PSB0ZXh0dXJl
KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy5fZGlmZnVzZVRleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIERpc3Bvc2UgdGhlIG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBmb3JjZURpc3Bvc2VFZmZl
Y3QgRm9yY2UgZGlzcG9zYWwgb2YgdGhlIGFzc29jaWF0ZWQgZWZmZWN0LgorICAgICAqIEBwYXJh
bSBmb3JjZURpc3Bvc2VUZXh0dXJlcyBGb3JjZSBkaXNwb3NhbCBvZiB0aGUgYXNzb2NpYXRlZCB0
ZXh0dXJlcy4KKyAgICAgKi8KKyAgICBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLmRpc3Bv
c2UgPSBmdW5jdGlvbiAoZm9yY2VEaXNwb3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcykg
eworICAgICAgICBpZiAoZm9yY2VEaXNwb3NlRWZmZWN0ID09PSB2b2lkIDApIHsgZm9yY2VEaXNw
b3NlRWZmZWN0ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGZvcmNlRGlzcG9zZVRleHR1cmVzID09
PSB2b2lkIDApIHsgZm9yY2VEaXNwb3NlVGV4dHVyZXMgPSBmYWxzZTsgfQorICAgICAgICBpZiAo
Zm9yY2VEaXNwb3NlVGV4dHVyZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmRpZmZ1c2VUZXh0
dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5kaWZmdXNlVGV4dHVyZS5kaXNwb3NlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5yZWZsZWN0aW9uVGV4dHVyZSkgewor
ICAgICAgICAgICAgICAgIHRoaXMucmVmbGVjdGlvblRleHR1cmUuZGlzcG9zZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3JlbmRlclRhcmdldHMuZGlzcG9zZSgp
OworICAgICAgICBpZiAodGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiB0aGlz
Ll9pbWFnZVByb2Nlc3NpbmdPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbi5vblVwZGF0ZVBhcmFtZXRlcnMucmVtb3ZlKHRoaXMuX2ltYWdl
UHJvY2Vzc2luZ09ic2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICBfc3VwZXIucHJvdG90eXBl
LmRpc3Bvc2UuY2FsbCh0aGlzLCBmb3JjZURpc3Bvc2VFZmZlY3QpOworICAgIH07CisgICAgLyoq
CisgICAgICogQ2xvbmVzIHRoZSBtYXRlcmlhbC4KKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgY2xv
bmVkIG5hbWUuCisgICAgICogQHJldHVybnMgVGhlIGNsb25lZCBtYXRlcmlhbC4KKyAgICAgKi8K
KyAgICBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJd
LkNsb25lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBCYWNrZ3JvdW5kTWF0ZXJpYWwobmFtZSwg
X3RoaXMuZ2V0U2NlbmUoKSk7IH0sIHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogU2Vy
aWFsaXplcyB0aGUgY3VycmVudCBtYXRlcmlhbCB0byBpdHMgSlNPTiByZXByZXNlbnRhdGlvbi4K
KyAgICAgKiBAcmV0dXJucyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbi4KKyAgICAgKi8KKyAgICBC
YWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5TZXJpYWxpemUodGhp
cyk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY3VzdG9tVHlwZSA9ICJCQUJZTE9OLkJh
Y2tncm91bmRNYXRlcmlhbCI7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0Owor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgbWF0ZXJp
YWwKKyAgICAgKiBAcmV0dXJucyAiQmFja2dyb3VuZE1hdGVyaWFsIgorICAgICAqLworICAgIEJh
Y2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gIkJhY2tncm91bmRNYXRlcmlhbCI7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBQYXJzZSBhIEpTT04gaW5wdXQgdG8gY3JlYXRlIGJhY2sgYSBiYWNrZ3JvdW5kIG1hdGVy
aWFsLgorICAgICAqIEBwYXJhbSBzb3VyY2UgVGhlIEpTT04gZGF0YSB0byBwYXJzZQorICAgICAq
IEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdG8gY3JlYXRlIHRoZSBwYXJzZWQgbWF0ZXJpYWwgaW4K
KyAgICAgKiBAcGFyYW0gcm9vdFVybCBUaGUgcm9vdCB1cmwgb2YgdGhlIGFzc2V0cyB0aGUgbWF0
ZXJpYWwgZGVwZW5kcyB1cG9uCisgICAgICogQHJldHVybnMgdGhlIGluc3RhbnRpYXRlZCBCYWNr
Z3JvdW5kTWF0ZXJpYWwuCisgICAgICovCisgICAgQmFja2dyb3VuZE1hdGVyaWFsLlBhcnNlID0g
ZnVuY3Rpb24gKHNvdXJjZSwgc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhl
bHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBCYWNrZ3JvdW5kTWF0ZXJpYWwo
c291cmNlLm5hbWUsIHNjZW5lKTsgfSwgc291cmNlLCBzY2VuZSwgcm9vdFVybCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTdGFuZGFyZCByZWZsZWN0YW5jZSB2YWx1ZSBhdCBwYXJhbGxlbCB2
aWV3IGFuZ2xlLgorICAgICAqLworICAgIEJhY2tncm91bmRNYXRlcmlhbC5TdGFuZGFyZFJlZmxl
Y3RhbmNlMCA9IDAuMDU7CisgICAgLyoqCisgICAgICogU3RhbmRhcmQgcmVmbGVjdGFuY2UgdmFs
dWUgYXQgZ3JhemluZyBhbmdsZS4KKyAgICAgKi8KKyAgICBCYWNrZ3JvdW5kTWF0ZXJpYWwuU3Rh
bmRhcmRSZWZsZWN0YW5jZTkwID0gMC41OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzQ29sb3IzIl0pKCkKKyAg
ICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiX3ByaW1hcnlDb2xvciIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc0xpZ2h0c0Rp
cnR5IikKKyAgICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAicHJpbWFyeUNvbG9y
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0NvbG9yMyJdKSgpCisgICAgXSwgQmFja2dyb3Vu
ZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9fcGVyY2VwdHVhbENvbG9yIiwgdm9pZCAwKTsKKyAgICB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAg
ICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJz
ZXJpYWxpemUiXSkoKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJfcHJp
bWFyeUNvbG9yU2hhZG93TGV2ZWwiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9wcmltYXJ5Q29sb3JIaWdobGlnaHRM
ZXZlbCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNo
ZXNBc0xpZ2h0c0RpcnR5IikKKyAgICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAi
cHJpbWFyeUNvbG9ySGlnaGxpZ2h0TGV2ZWwiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1
cmUiXSkoKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJfcmVmbGVjdGlv
blRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3Vi
TWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90
eXBlLCAicmVmbGVjdGlvblRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisg
ICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9yZWZsZWN0aW9uQmx1ciIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1
cmVzRGlydHkiKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJyZWZsZWN0
aW9uQmx1ciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCkKKyAgICBdLCBC
YWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiX2RpZmZ1c2VUZXh0dXJlIiwgdm9pZCAwKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0
eSIpCisgICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgImRpZmZ1c2VUZXh0dXJl
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0Fz
VGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgInNo
YWRvd0xpZ2h0cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBCYWNrZ3Jv
dW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiX3NoYWRvd0xldmVsIiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBh
bmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAg
XSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgInNoYWRvd0xldmVsIiwgdm9pZCAwKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemVBc1ZlY3RvcjMiXSkoKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5w
cm90b3R5cGUsICJfc2NlbmVDZW50ZXIiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHki
XSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBCYWNrZ3JvdW5k
TWF0ZXJpYWwucHJvdG90eXBlLCAic2NlbmVDZW50ZXIiLCB2b2lkIDApOworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6
ZSJdKSgpCisgICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9vcGFjaXR5RnJl
c25lbCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNo
ZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUs
ICJvcGFjaXR5RnJlc25lbCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBC
YWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiX3JlZmxlY3Rpb25GcmVzbmVsIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNE
aXJ0eSIpCisgICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgInJlZmxlY3Rpb25G
cmVzbmVsIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJhY2tncm91bmRN
YXRlcmlhbC5wcm90b3R5cGUsICJfcmVmbGVjdGlvbkZhbGxvZmZEaXN0YW5jZSIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGly
dHkiKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJyZWZsZWN0aW9uRmFs
bG9mZkRpc3RhbmNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJhY2tn
cm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJfcmVmbGVjdGlvbkFtb3VudCIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHki
KQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJyZWZsZWN0aW9uQW1vdW50
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlh
bC5wcm90b3R5cGUsICJfcmVmbGVjdGlvblJlZmxlY3RhbmNlMCIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhw
YW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAg
IF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJyZWZsZWN0aW9uUmVmbGVjdGFuY2Uw
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlh
bC5wcm90b3R5cGUsICJfcmVmbGVjdGlvblJlZmxlY3RhbmNlOTAiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4
cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAg
ICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAicmVmbGVjdGlvblJlZmxlY3RhbmNl
OTAiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQmFja2dyb3VuZE1hdGVy
aWFsLnByb3RvdHlwZSwgIl91c2VSR0JDb2xvciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9w
ZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIEJhY2tn
cm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VSR0JDb2xvciIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplIl0pKCkKKyAgICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiX2VuYWJs
ZU5vaXNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1l
c2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlw
ZSwgImVuYWJsZU5vaXNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJh
Y2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJfbWF4U2ltdWx0YW5lb3VzTGlnaHRzIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVy
ZXNEaXJ0eSIpCisgICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgIm1heFNpbXVs
dGFuZW91c0xpZ2h0cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNJbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uIl0pKCkKKyAgICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAi
X2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iLCB2b2lkIDApOworICAgIHJldHVybiBCYWNr
Z3JvdW5kTWF0ZXJpYWw7Cit9KF9NYXRlcmlhbHNfcHVzaE1hdGVyaWFsX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X19bIlB1c2hNYXRlcmlhbCJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1si
QkFCWUxPTi5CYWNrZ3JvdW5kTWF0ZXJpYWwiXSA9IEJhY2tncm91bmRNYXRlcmlhbDsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL0JhY2tncm91bmQvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRl
cmlhbHMvQmFja2dyb3VuZC9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQmFja2dyb3VuZE1hdGVy
aWFsICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFja2dy
b3VuZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2JhY2tncm91bmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvQmFja2dyb3Vu
ZC9iYWNrZ3JvdW5kTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFja2dyb3VuZE1h
dGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYmFja2dyb3VuZE1hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkJhY2tncm91bmRNYXRlcmlhbCJdOyB9KTsKKworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9EdWFsL2ZvZ0Jsb2Nr
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL0R1YWwvZm9nQmxvY2sudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZvZ0Jsb2NrICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkZvZ0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGb2dCbG9jazsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRl
cmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2Rl
TWF0ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVy
aWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMgKi8gIi4vTWF0ZXJp
YWxzL05vZGUvbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vbWF0ZXJp
YWxIZWxwZXIgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0lucHV0L2lucHV0QmxvY2sgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvQmxvY2tzL0lucHV0L2lucHV0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICov
ICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKworCisKKworLyoqCisgKiBCbG9jayB1
c2VkIHRvIGFkZCBzdXBwb3J0IGZvciBzY2VuZSBmb2cKKyAqLwordmFyIEZvZ0Jsb2NrID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEZvZ0Jsb2NrLCBfc3VwZXIpOworICAgIC8qKgor
ICAgICAqIENyZWF0ZSBhIG5ldyBGb2dCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMg
dGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBGb2dCbG9jayhuYW1lKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzIl0uVmVydGV4QW5kRnJhZ21lbnQsIHRydWUpIHx8IHRoaXM7CisgICAgICAgIC8v
IFZlcnRleAorICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ3b3JsZFBvc2l0aW9uIiwgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQs
IGZhbHNlLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleCk7CisgICAgICAgIF90aGlz
LnJlZ2lzdGVySW5wdXQoInZpZXciLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzIl0uTWF0cml4LCBmYWxzZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMi
XS5WZXJ0ZXgpOworICAgICAgICAvLyBGcmFnbWVudAorICAgICAgICBfdGhpcy5yZWdpc3Rlcklu
cHV0KCJpbnB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXMiXS5Db2xvcjMsIGZhbHNlLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50
KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgiZm9nQ29sb3IiLCBfbm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJO
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3IzLCBmYWxzZSwgX25v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2Rl
TWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVy
T3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzIl0uQ29sb3IzLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KTsK
KyAgICAgICAgX3RoaXMuaW5wdXQuYWNjZXB0ZWRDb25uZWN0aW9uUG9pbnRUeXBlcy5wdXNoKF9u
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5Db2xvcjQp
OworICAgICAgICBfdGhpcy5mb2dDb2xvci5hY2NlcHRlZENvbm5lY3Rpb25Qb2ludFR5cGVzLnB1
c2goX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNv
bG9yNCk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0
cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUK
KyAgICAgKi8KKyAgICBGb2dCbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gIkZvZ0Jsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShGb2dCbG9jay5wcm90b3R5cGUsICJ3b3JsZFBvc2l0aW9uIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQgcG9zaXRpb24gaW5wdXQgY29tcG9uZW50
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShGb2dCbG9jay5wcm90b3R5cGUsICJ2aWV3IiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgdmlldyBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sx
XTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZvZ0Jsb2Nr
LnByb3RvdHlwZSwgImlucHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUg
Y29sb3IgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMl07CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb2dCbG9jay5wcm90b3R5cGUsICJmb2dD
b2xvciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGZvZyBjb2xvciBpbnB1
dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1szXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KEZvZ0Jsb2NrLnByb3RvdHlwZSwgIm91dHB1dCIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG91dHB1dCBjb21wb25lbnQKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X291dHB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIEZvZ0Jsb2NrLnByb3RvdHlwZS5h
dXRvQ29uZmlndXJlID0gZnVuY3Rpb24gKG1hdGVyaWFsKSB7CisgICAgICAgIGlmICghdGhpcy52
aWV3LmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgdmlld0lucHV0ID0gbWF0ZXJpYWwu
Z2V0SW5wdXRCbG9ja0J5UHJlZGljYXRlKGZ1bmN0aW9uIChiKSB7IHJldHVybiBiLnN5c3RlbVZh
bHVlID09PSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLlZpZXc7IH0pOworICAgICAgICAgICAg
aWYgKCF2aWV3SW5wdXQpIHsKKyAgICAgICAgICAgICAgICB2aWV3SW5wdXQgPSBuZXcgX0lucHV0
X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5wdXRCbG9jayJdKCJ2
aWV3Iik7CisgICAgICAgICAgICAgICAgdmlld0lucHV0LnNldEFzU3lzdGVtVmFsdWUoX25vZGVN
YXRlcmlhbFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0
ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5WaWV3KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZp
ZXdJbnB1dC5vdXRwdXQuY29ubmVjdFRvKHRoaXMudmlldyk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCF0aGlzLmZvZ0NvbG9yLmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgZm9nQ29s
b3JJbnB1dCA9IG1hdGVyaWFsLmdldElucHV0QmxvY2tCeVByZWRpY2F0ZShmdW5jdGlvbiAoYikg
eyByZXR1cm4gYi5zeXN0ZW1WYWx1ZSA9PT0gX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5Gb2dD
b2xvcjsgfSk7CisgICAgICAgICAgICBpZiAoIWZvZ0NvbG9ySW5wdXQpIHsKKyAgICAgICAgICAg
ICAgICBmb2dDb2xvcklucHV0ID0gbmV3IF9JbnB1dF9pbnB1dEJsb2NrX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIklucHV0QmxvY2siXSgiZm9nQ29sb3IiLCB1bmRlZmluZWQsIF9ub2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5Db2xvcjMpOwor
ICAgICAgICAgICAgICAgIGZvZ0NvbG9ySW5wdXQuc2V0QXNTeXN0ZW1WYWx1ZShfbm9kZU1hdGVy
aWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlh
bFN5c3RlbVZhbHVlcyJdLkZvZ0NvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
Z0NvbG9ySW5wdXQub3V0cHV0LmNvbm5lY3RUbyh0aGlzLmZvZ0NvbG9yKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgRm9nQmxvY2sucHJvdG90eXBlLnByZXBhcmVEZWZpbmVzID0gZnVuY3Rpb24g
KG1lc2gsIG5vZGVNYXRlcmlhbCwgZGVmaW5lcykgeworICAgICAgICB2YXIgc2NlbmUgPSBtZXNo
LmdldFNjZW5lKCk7CisgICAgICAgIGRlZmluZXMuc2V0VmFsdWUoIkZPRyIsIG5vZGVNYXRlcmlh
bC5mb2dFbmFibGVkICYmIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fWyJNYXRlcmlhbEhlbHBlciJdLkdldEZvZ1N0YXRlKG1lc2gsIHNjZW5lKSk7CisgICAgfTsK
KyAgICBGb2dCbG9jay5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChlZmZlY3QsIG5vZGVNYXRl
cmlhbCwgbWVzaCkgeworICAgICAgICBpZiAoIW1lc2gpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB2YXIgc2NlbmUgPSBtZXNoLmdldFNjZW5lKCk7CisgICAgICAg
IGVmZmVjdC5zZXRGbG9hdDQodGhpcy5fZm9nUGFyYW1ldGVycywgc2NlbmUuZm9nTW9kZSwgc2Nl
bmUuZm9nU3RhcnQsIHNjZW5lLmZvZ0VuZCwgc2NlbmUuZm9nRGVuc2l0eSk7CisgICAgfTsKKyAg
ICBGb2dCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAg
ICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAg
ICAgICAgaWYgKHN0YXRlLnRhcmdldCA9PT0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFn
bWVudCkgeworICAgICAgICAgICAgc3RhdGUuc2hhcmVkRGF0YS5ibG9ja3NXaXRoRGVmaW5lcy5w
dXNoKHRoaXMpOworICAgICAgICAgICAgc3RhdGUuc2hhcmVkRGF0YS5iaW5kYWJsZUJsb2Nrcy5w
dXNoKHRoaXMpOworICAgICAgICAgICAgc3RhdGUuX2VtaXRGdW5jdGlvbkZyb21JbmNsdWRlKCJm
b2dGcmFnbWVudERlY2xhcmF0aW9uIiwgIi8vIiArIHRoaXMubmFtZSwgeworICAgICAgICAgICAg
ICAgIHJlbW92ZVVuaWZvcm1zOiB0cnVlLAorICAgICAgICAgICAgICAgIHJlbW92ZVZhcnlpbmdz
OiB0cnVlLAorICAgICAgICAgICAgICAgIHJlbW92ZUlmRGVmOiBmYWxzZSwKKyAgICAgICAgICAg
ICAgICByZXBsYWNlU3RyaW5nczogW3sgc2VhcmNoOiAvZmxvYXQgQ2FsY0ZvZ0ZhY3RvclwoXCkv
LCByZXBsYWNlOiAiZmxvYXQgQ2FsY0ZvZ0ZhY3Rvcih2ZWMzIHZGb2dEaXN0YW5jZSwgdmVjNCB2
Rm9nSW5mb3MpIiB9XQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB2YXIgdGVtcEZvZ1Zh
cmlhYmxlbmFtZSA9IHN0YXRlLl9nZXRGcmVlVmFyaWFibGVOYW1lKCJmb2ciKTsKKyAgICAgICAg
ICAgIHZhciBjb2xvciA9IHRoaXMuaW5wdXQ7CisgICAgICAgICAgICB2YXIgZm9nQ29sb3IgPSB0
aGlzLmZvZ0NvbG9yOworICAgICAgICAgICAgdGhpcy5fZm9nUGFyYW1ldGVycyA9IHN0YXRlLl9n
ZXRGcmVlVmFyaWFibGVOYW1lKCJmb2dQYXJhbWV0ZXJzIik7CisgICAgICAgICAgICB2YXIgb3V0
cHV0ID0gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgICAgIHN0YXRlLl9lbWl0VW5pZm9ybUZy
b21TdHJpbmcodGhpcy5fZm9nUGFyYW1ldGVycywgInZlYzQiKTsKKyAgICAgICAgICAgIHN0YXRl
LmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjaWZkZWYgRk9HXHJcbiI7CisgICAgICAgICAgICBzdGF0
ZS5jb21waWxhdGlvblN0cmluZyArPSAiZmxvYXQgIiArIHRlbXBGb2dWYXJpYWJsZW5hbWUgKyAi
ID0gQ2FsY0ZvZ0ZhY3RvcigiICsgdGhpcy5fZm9nRGlzdGFuY2VOYW1lICsgIiwgIiArIHRoaXMu
X2ZvZ1BhcmFtZXRlcnMgKyAiKTtcclxuIjsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9u
U3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIgKyB0
ZW1wRm9nVmFyaWFibGVuYW1lICsgIiAqICIgKyBjb2xvci5hc3NvY2lhdGVkVmFyaWFibGVOYW1l
ICsgIi5yZ2IgKyAoMS4wIC0gIiArIHRlbXBGb2dWYXJpYWJsZW5hbWUgKyAiKSAqICIgKyBmb2dD
b2xvci5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi5yZ2I7XHJcbiIpOworICAgICAgICAgICAg
c3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNlbHNlXHJcbiIgKyB0aGlzLl9kZWNsYXJlT3V0
cHV0KG91dHB1dCwgc3RhdGUpICsgIiA9ICAiICsgY29sb3IuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICIucmdiO1xyXG4iOworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0g
IiNlbmRpZlxyXG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFy
IHdvcmxkUG9zID0gdGhpcy53b3JsZFBvc2l0aW9uOworICAgICAgICAgICAgdmFyIHZpZXcgPSB0
aGlzLnZpZXc7CisgICAgICAgICAgICB0aGlzLl9mb2dEaXN0YW5jZU5hbWUgPSBzdGF0ZS5fZ2V0
RnJlZVZhcmlhYmxlTmFtZSgidkZvZ0Rpc3RhbmNlIik7CisgICAgICAgICAgICBzdGF0ZS5fZW1p
dFZhcnlpbmdGcm9tU3RyaW5nKHRoaXMuX2ZvZ0Rpc3RhbmNlTmFtZSwgInZlYzMiKTsKKyAgICAg
ICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2ZvZ0Rpc3RhbmNlTmFtZSAr
ICIgPSAoIiArIHZpZXcuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIgKiAiICsgd29ybGRQb3Mu
YXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIpLnh5ejtcclxuIjsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBGb2dCbG9jazsKK30oX25vZGVNYXRl
cmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2Nr
Il0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIl9U
eXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uRm9nQmxvY2siXSA9IEZvZ0Jsb2Nr
OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvRHVhbC9p
bmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9EdWFsL2luZGV4LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBGb2dCbG9jaywgTGlnaHRCbG9jaywgVGV4dHVyZUJsb2NrLCBSZWZs
ZWN0aW9uVGV4dHVyZUJsb2NrICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfZm9nQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vZm9nQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL0R1
YWwvZm9nQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRm9nQmxvY2siLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9mb2dCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJGb2dCbG9j
ayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saWdodEJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpZ2h0Qmxv
Y2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL0R1YWwvbGlnaHRCbG9jay50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJMaWdodEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbGlnaHRCbG9j
a19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMaWdodEJsb2NrIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3RleHR1cmVCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90ZXh0dXJlQmxvY2sgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvQmxvY2tzL0R1YWwvdGV4dHVyZUJsb2NrLnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlRleHR1cmVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3RleHR1cmVCbG9ja19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0dXJlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfcmVmbGVjdGlvblRleHR1cmVCbG9ja19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yZWZsZWN0aW9uVGV4dHVy
ZUJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9EdWFsL3JlZmxlY3Rpb25UZXh0dXJl
QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVmbGVjdGlvblRleHR1cmVCbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3JlZmxlY3Rpb25UZXh0dXJlQmxvY2tfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siUmVmbGVjdGlvblRleHR1cmVCbG9jayJdOyB9KTsKKworCisKKworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9EdWFsL2xpZ2h0
QmxvY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9EdWFsL2xpZ2h0Qmxv
Y2sudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTGlnaHRCbG9jayAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaWdodEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBMaWdodEJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8g
Ii4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01h
dGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01h
dGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL21hdGVyaWFs
SGVscGVyICovICIuL01hdGVyaWFscy9tYXRlcmlhbEhlbHBlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbFN5
c3RlbVZhbHVlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfSW5wdXRfaW5wdXRCbG9ja19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vSW5wdXQv
aW5wdXRCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvSW5wdXQvaW5wdXRCbG9jay50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4v
TWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisKKwor
CisvKioKKyAqIEJsb2NrIHVzZWQgdG8gYWRkIGxpZ2h0IGluIHRoZSBmcmFnbWVudCBzaGFkZXIK
KyAqLwordmFyIExpZ2h0QmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTGln
aHRCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgTGlnaHRCbG9j
aworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBMaWdodEJsb2NrKG5hbWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXhBbmRGcmFn
bWVudCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgid29ybGRQb3NpdGlv
biIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5W
ZWN0b3I0LCBmYWxzZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXgpOworICAgICAg
ICBfdGhpcy5yZWdpc3RlcklucHV0KCJ3b3JsZE5vcm1hbCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0LCBmYWxzZSwgX25vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQo
ImNhbWVyYVBvc2l0aW9uIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlcyJdLlZlY3RvcjMsIGZhbHNlLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZy
YWdtZW50KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoImRpZmZ1c2VPdXRwdXQiLCBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3Iz
LCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ik5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KTsKKyAgICAgICAgX3RoaXMucmVn
aXN0ZXJPdXRwdXQoInNwZWN1bGFyT3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yMywgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMi
XS5GcmFnbWVudCk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAg
ICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNz
IG5hbWUKKyAgICAgKi8KKyAgICBMaWdodEJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiTGlnaHRCbG9jayI7CisgICAgfTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHRCbG9jay5wcm90b3R5cGUsICJ3b3JsZFBvc2l0aW9u
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQgcG9zaXRpb24gaW5w
dXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaWdodEJsb2NrLnByb3RvdHlwZSwgIndvcmxkTm9ybWFs
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQgbm9ybWFsIGlucHV0
IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzFdOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHRCbG9jay5wcm90b3R5cGUsICJjYW1lcmFQb3NpdGlv
biIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0cyB0aGUgY2FtZXJhIChvciBleWUpIHBv
c2l0aW9uIGNvbXBvbmVudAorICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMl07CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaWdodEJsb2NrLnByb3RvdHlwZSwgImRpZmZ1c2VP
dXRwdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBkaWZmdXNlIG91dHB1
dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaWdodEJsb2NrLnByb3RvdHlwZSwgInNwZWN1bGFyT3V0
cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgc3BlY3VsYXIgb3V0cHV0
IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
TGlnaHRCbG9jay5wcm90b3R5cGUuYXV0b0NvbmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCkg
eworICAgICAgICBpZiAoIXRoaXMuY2FtZXJhUG9zaXRpb24uaXNDb25uZWN0ZWQpIHsKKyAgICAg
ICAgICAgIHZhciBjYW1lcmFQb3NpdGlvbklucHV0ID0gbWF0ZXJpYWwuZ2V0SW5wdXRCbG9ja0J5
UHJlZGljYXRlKGZ1bmN0aW9uIChiKSB7IHJldHVybiBiLnN5c3RlbVZhbHVlID09PSBfbm9kZU1h
dGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk5vZGVNYXRl
cmlhbFN5c3RlbVZhbHVlcyJdLkNhbWVyYVBvc2l0aW9uOyB9KTsKKyAgICAgICAgICAgIGlmICgh
Y2FtZXJhUG9zaXRpb25JbnB1dCkgeworICAgICAgICAgICAgICAgIGNhbWVyYVBvc2l0aW9uSW5w
dXQgPSBuZXcgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
SW5wdXRCbG9jayJdKCJjYW1lcmFQb3NpdGlvbiIpOworICAgICAgICAgICAgICAgIGNhbWVyYVBv
c2l0aW9uSW5wdXQuc2V0QXNTeXN0ZW1WYWx1ZShfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLkNh
bWVyYVBvc2l0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbWVyYVBvc2l0aW9u
SW5wdXQub3V0cHV0LmNvbm5lY3RUbyh0aGlzLmNhbWVyYVBvc2l0aW9uKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgTGlnaHRCbG9jay5wcm90b3R5cGUucHJlcGFyZURlZmluZXMgPSBmdW5jdGlv
biAobWVzaCwgbm9kZU1hdGVyaWFsLCBkZWZpbmVzKSB7CisgICAgICAgIGlmICghZGVmaW5lcy5f
YXJlTGlnaHRzRGlydHkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgc2NlbmUgPSBtZXNoLmdldFNjZW5lKCk7CisgICAgICAgIGlmICghdGhpcy5saWdodCkg
eworICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JMaWdodHMoc2NlbmUsIG1lc2gs
IGRlZmluZXMsIHRydWUsIG5vZGVNYXRlcmlhbC5tYXhTaW11bHRhbmVvdXNMaWdodHMpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIHN0YXRlID0geworICAgICAg
ICAgICAgICAgIG5lZWROb3JtYWxzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBuZWVkUmVidWls
ZDogZmFsc2UsCisgICAgICAgICAgICAgICAgbGlnaHRtYXBNb2RlOiBmYWxzZSwKKyAgICAgICAg
ICAgICAgICBzaGFkb3dFbmFibGVkOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBzcGVjdWxhckVu
YWJsZWQ6IGZhbHNlCisgICAgICAgICAgICB9OworICAgICAgICAgICAgX21hdGVyaWFsSGVscGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZURl
ZmluZXNGb3JMaWdodChzY2VuZSwgbWVzaCwgdGhpcy5saWdodCwgdGhpcy5fbGlnaHRJZCwgZGVm
aW5lcywgdHJ1ZSwgc3RhdGUpOworICAgICAgICAgICAgaWYgKHN0YXRlLm5lZWRSZWJ1aWxkKSB7
CisgICAgICAgICAgICAgICAgZGVmaW5lcy5yZWJ1aWxkKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9OworICAgIExpZ2h0QmxvY2sucHJvdG90eXBlLnVwZGF0ZVVuaWZvcm1zQW5k
U2FtcGxlcyA9IGZ1bmN0aW9uIChzdGF0ZSwgbm9kZU1hdGVyaWFsLCBkZWZpbmVzKSB7CisgICAg
ICAgIGZvciAodmFyIGxpZ2h0SW5kZXggPSAwOyBsaWdodEluZGV4IDwgbm9kZU1hdGVyaWFsLm1h
eFNpbXVsdGFuZW91c0xpZ2h0czsgbGlnaHRJbmRleCsrKSB7CisgICAgICAgICAgICBpZiAoIWRl
ZmluZXNbIkxJR0hUIiArIGxpZ2h0SW5kZXhdKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlVW5pZm9ybXNBbmRTYW1wbGVy
c0ZvckxpZ2h0KGxpZ2h0SW5kZXgsIHN0YXRlLnVuaWZvcm1zLCBzdGF0ZS5zYW1wbGVycywgZmFs
c2UsIHN0YXRlLnVuaWZvcm1CdWZmZXJzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgTGlnaHRC
bG9jay5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChlZmZlY3QsIG5vZGVNYXRlcmlhbCwgbWVz
aCkgeworICAgICAgICBpZiAoIW1lc2gpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB2YXIgc2NlbmUgPSBtZXNoLmdldFNjZW5lKCk7CisgICAgICAgIGlmICghdGhp
cy5saWdodCkgeworICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIk1hdGVyaWFsSGVscGVyIl0uQmluZExpZ2h0cyhzY2VuZSwgbWVzaCwgZWZm
ZWN0LCB0cnVlLCBub2RlTWF0ZXJpYWwubWF4U2ltdWx0YW5lb3VzTGlnaHRzLCBmYWxzZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kTGlnaHQodGhp
cy5saWdodCwgdGhpcy5fbGlnaHRJZCwgc2NlbmUsIG1lc2gsIGVmZmVjdCwgdHJ1ZSwgZmFsc2Up
OworICAgICAgICB9CisgICAgfTsKKyAgICBMaWdodEJsb2NrLnByb3RvdHlwZS5faW5qZWN0VmVy
dGV4Q29kZSA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICB2YXIgd29ybGRQb3MgPSB0aGlz
LndvcmxkUG9zaXRpb247CisgICAgICAgIHZhciBjb21tZW50cyA9ICIvLyIgKyB0aGlzLm5hbWU7
CisgICAgICAgIC8vIERlY2xhcmF0aW9uCisgICAgICAgIGlmICghdGhpcy5saWdodCkgeyAvLyBF
bWl0IGZvciBhbGwgbGlnaHRzCisgICAgICAgICAgICBzdGF0ZS5fZW1pdEZ1bmN0aW9uRnJvbUlu
Y2x1ZGUoc3RhdGUuc3VwcG9ydFVuaWZvcm1CdWZmZXJzID8gImxpZ2h0VWJvRGVjbGFyYXRpb24i
IDogImxpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbiIsIGNvbW1lbnRzLCB7CisgICAgICAgICAgICAg
ICAgcmVwZWF0S2V5OiAibWF4U2ltdWx0YW5lb3VzTGlnaHRzIgorICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB0aGlzLl9saWdodElkID0gMDsKKyAgICAgICAgICAgIHN0YXRlLnNoYXJlZERh
dGEuZHluYW1pY1VuaWZvcm1CbG9ja3MucHVzaCh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2xpZ2h0SWQgPSAoc3RhdGUuY291bnRlcnNbImxpZ2h0
Q291bnRlciJdICE9PSB1bmRlZmluZWQgPyBzdGF0ZS5jb3VudGVyc1sibGlnaHRDb3VudGVyIl0g
OiAtMSkgKyAxOworICAgICAgICAgICAgc3RhdGUuY291bnRlcnNbImxpZ2h0Q291bnRlciJdID0g
dGhpcy5fbGlnaHRJZDsKKyAgICAgICAgICAgIHN0YXRlLl9lbWl0RnVuY3Rpb25Gcm9tSW5jbHVk
ZShzdGF0ZS5zdXBwb3J0VW5pZm9ybUJ1ZmZlcnMgPyAibGlnaHRVYm9EZWNsYXJhdGlvbiIgOiAi
bGlnaHRGcmFnbWVudERlY2xhcmF0aW9uIiwgY29tbWVudHMsIHsKKyAgICAgICAgICAgICAgICBy
ZXBsYWNlU3RyaW5nczogW3sgc2VhcmNoOiAve1h9L2csIHJlcGxhY2U6IHRoaXMuX2xpZ2h0SWQu
dG9TdHJpbmcoKSB9XQorICAgICAgICAgICAgfSwgdGhpcy5fbGlnaHRJZC50b1N0cmluZygpKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBJbmplY3QgY29kZSBpbiB2ZXJ0ZXgKKyAgICAgICAgdmFy
IHdvcmxkUG9zVmFyeWluZ05hbWUgPSAidl8iICsgd29ybGRQb3MuYXNzb2NpYXRlZFZhcmlhYmxl
TmFtZTsKKyAgICAgICAgaWYgKHN0YXRlLl9lbWl0VmFyeWluZ0Zyb21TdHJpbmcod29ybGRQb3NW
YXJ5aW5nTmFtZSwgInZlYzQiKSkgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJp
bmcgKz0gd29ybGRQb3NWYXJ5aW5nTmFtZSArICIgPSAiICsgd29ybGRQb3MuYXNzb2NpYXRlZFZh
cmlhYmxlTmFtZSArICI7XHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubGlnaHQp
IHsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHN0YXRlLl9lbWl0Q29k
ZUZyb21JbmNsdWRlKCJzaGFkb3dzVmVydGV4IiwgY29tbWVudHMsIHsKKyAgICAgICAgICAgICAg
ICByZXBsYWNlU3RyaW5nczogWworICAgICAgICAgICAgICAgICAgICB7IHNlYXJjaDogL3tYfS9n
LCByZXBsYWNlOiB0aGlzLl9saWdodElkLnRvU3RyaW5nKCkgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeyBzZWFyY2g6IC93b3JsZFBvcy9nLCByZXBsYWNlOiB3b3JsZFBvcy5hc3NvY2lhdGVkVmFy
aWFibGVOYW1lIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9
ICJ2ZWM0IHdvcmxkUG9zID0gIiArIHdvcmxkUG9zLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAi
O1xyXG4iOworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gc3RhdGUuX2Vt
aXRDb2RlRnJvbUluY2x1ZGUoInNoYWRvd3NWZXJ0ZXgiLCBjb21tZW50cywgeworICAgICAgICAg
ICAgICAgIHJlcGVhdEtleTogIm1heFNpbXVsdGFuZW91c0xpZ2h0cyIKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9CisgICAgfTsKKyAgICBMaWdodEJsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9j
ayA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJs
b2NrLmNhbGwodGhpcywgc3RhdGUpOworICAgICAgICBpZiAoc3RhdGUudGFyZ2V0ICE9PSBfbm9k
ZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KSB7CisgICAgICAgICAgICAvLyBWZXJ0ZXgK
KyAgICAgICAgICAgIHRoaXMuX2luamVjdFZlcnRleENvZGUoc3RhdGUpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZyYWdtZW50CisgICAgICAgIHN0YXRlLnNo
YXJlZERhdGEuYmluZGFibGVCbG9ja3MucHVzaCh0aGlzKTsKKyAgICAgICAgc3RhdGUuc2hhcmVk
RGF0YS5ibG9ja3NXaXRoRGVmaW5lcy5wdXNoKHRoaXMpOworICAgICAgICB2YXIgY29tbWVudHMg
PSAiLy8iICsgdGhpcy5uYW1lOworICAgICAgICB2YXIgd29ybGRQb3MgPSB0aGlzLndvcmxkUG9z
aXRpb247CisgICAgICAgIHN0YXRlLl9lbWl0RnVuY3Rpb25Gcm9tSW5jbHVkZSgiaGVscGVyRnVu
Y3Rpb25zIiwgY29tbWVudHMpOworICAgICAgICBzdGF0ZS5fZW1pdEZ1bmN0aW9uRnJvbUluY2x1
ZGUoImxpZ2h0c0ZyYWdtZW50RnVuY3Rpb25zIiwgY29tbWVudHMsIHsKKyAgICAgICAgICAgIHJl
cGxhY2VTdHJpbmdzOiBbCisgICAgICAgICAgICAgICAgeyBzZWFyY2g6IC92UG9zaXRpb25XL2cs
IHJlcGxhY2U6ICJ2XyIgKyB3b3JsZFBvcy5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi54eXoi
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSk7CisgICAgICAgIHN0YXRlLl9lbWl0RnVuY3Rp
b25Gcm9tSW5jbHVkZSgic2hhZG93c0ZyYWdtZW50RnVuY3Rpb25zIiwgY29tbWVudHMsIHsKKyAg
ICAgICAgICAgIHJlcGxhY2VTdHJpbmdzOiBbCisgICAgICAgICAgICAgICAgeyBzZWFyY2g6IC92
UG9zaXRpb25XL2csIHJlcGxhY2U6ICJ2XyIgKyB3b3JsZFBvcy5hc3NvY2lhdGVkVmFyaWFibGVO
YW1lICsgIi54eXoiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSk7CisgICAgICAgIGlmICgh
dGhpcy5saWdodCkgeyAvLyBFbWl0IGZvciBhbGwgbGlnaHRzCisgICAgICAgICAgICBzdGF0ZS5f
ZW1pdEZ1bmN0aW9uRnJvbUluY2x1ZGUoc3RhdGUuc3VwcG9ydFVuaWZvcm1CdWZmZXJzID8gImxp
Z2h0VWJvRGVjbGFyYXRpb24iIDogImxpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbiIsIGNvbW1lbnRz
LCB7CisgICAgICAgICAgICAgICAgcmVwZWF0S2V5OiAibWF4U2ltdWx0YW5lb3VzTGlnaHRzIgor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBz
dGF0ZS5fZW1pdEZ1bmN0aW9uRnJvbUluY2x1ZGUoc3RhdGUuc3VwcG9ydFVuaWZvcm1CdWZmZXJz
ID8gImxpZ2h0VWJvRGVjbGFyYXRpb24iIDogImxpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbiIsIGNv
bW1lbnRzLCB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVN0cmluZ3M6IFt7IHNlYXJjaDogL3tY
fS9nLCByZXBsYWNlOiB0aGlzLl9saWdodElkLnRvU3RyaW5nKCkgfV0KKyAgICAgICAgICAgIH0s
IHRoaXMuX2xpZ2h0SWQudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAvLyBVbmlmb3JtcyBhbmQg
c2FtcGxlcnMKKyAgICAgICAgICAgIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVVbmlmb3Jtc0FuZFNhbXBsZXJzRm9y
TGlnaHQodGhpcy5fbGlnaHRJZCwgc3RhdGUudW5pZm9ybXMsIHN0YXRlLnNhbXBsZXJzLCB1bmRl
ZmluZWQsIHN0YXRlLnVuaWZvcm1CdWZmZXJzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb2Rl
CisgICAgICAgIGlmICh0aGlzLl9saWdodElkID09PSAwKSB7CisgICAgICAgICAgICBpZiAoc3Rh
dGUuX3JlZ2lzdGVyVGVtcFZhcmlhYmxlKCJ2aWV3RGlyZWN0aW9uVyIpKSB7CisgICAgICAgICAg
ICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gInZlYzMgdmlld0RpcmVjdGlvblcgPSBu
b3JtYWxpemUoIiArIHRoaXMuY2FtZXJhUG9zaXRpb24uYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSAr
ICIgLSAiICsgKCJ2XyIgKyB3b3JsZFBvcy5hc3NvY2lhdGVkVmFyaWFibGVOYW1lKSArICIueHl6
KTtcclxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3Ry
aW5nICs9ICJsaWdodGluZ0luZm8gaW5mbztcclxuIjsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBp
bGF0aW9uU3RyaW5nICs9ICJmbG9hdCBzaGFkb3cgPSAxLjtcclxuIjsKKyAgICAgICAgICAgIHN0
YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICJmbG9hdCBnbG9zc2luZXNzID0gMC47XHJcbiI7Cisg
ICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAidmVjMyBkaWZmdXNlQmFzZSA9
IHZlYzMoMC4sIDAuLCAwLik7XHJcbiI7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0
cmluZyArPSAidmVjMyBzcGVjdWxhckJhc2UgPSB2ZWMzKDAuLCAwLiwgMC4pO1xyXG4iOworICAg
ICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gInZlYzMgbm9ybWFsVyA9ICIgKyB0
aGlzLndvcmxkTm9ybWFsLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLnh5ejtcclxuIjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5saWdodCkgeworICAgICAgICAgICAgc3RhdGUuY29t
cGlsYXRpb25TdHJpbmcgKz0gc3RhdGUuX2VtaXRDb2RlRnJvbUluY2x1ZGUoImxpZ2h0RnJhZ21l
bnQiLCBjb21tZW50cywgeworICAgICAgICAgICAgICAgIHJlcGxhY2VTdHJpbmdzOiBbCisgICAg
ICAgICAgICAgICAgICAgIHsgc2VhcmNoOiAve1h9L2csIHJlcGxhY2U6IHRoaXMuX2xpZ2h0SWQu
dG9TdHJpbmcoKSB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyAr
PSBzdGF0ZS5fZW1pdENvZGVGcm9tSW5jbHVkZSgibGlnaHRGcmFnbWVudCIsIGNvbW1lbnRzLCB7
CisgICAgICAgICAgICAgICAgcmVwZWF0S2V5OiAibWF4U2ltdWx0YW5lb3VzTGlnaHRzIgorICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRpZmZ1c2VPdXRwdXQgPSB0aGlz
LmRpZmZ1c2VPdXRwdXQ7CisgICAgICAgIHZhciBzcGVjdWxhck91dHB1dCA9IHRoaXMuc3BlY3Vs
YXJPdXRwdXQ7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xh
cmVPdXRwdXQoZGlmZnVzZU91dHB1dCwgc3RhdGUpICsgIiA9IGRpZmZ1c2VCYXNlO1xyXG4iOwor
ICAgICAgICBpZiAoc3BlY3VsYXJPdXRwdXQuaGFzRW5kcG9pbnRzKSB7CisgICAgICAgICAgICBz
dGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KHNwZWN1bGFyT3V0
cHV0LCBzdGF0ZSkgKyAiID0gc3BlY3VsYXJCYXNlO1xyXG4iOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0aGlzOworICAgIH07CisgICAgTGlnaHRCbG9jay5wcm90b3R5cGUuc2VyaWFsaXpl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9zdXBl
ci5wcm90b3R5cGUuc2VyaWFsaXplLmNhbGwodGhpcyk7CisgICAgICAgIGlmICh0aGlzLmxpZ2h0
KSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmxpZ2h0SWQgPSB0aGlzLmxpZ2h0
LmlkOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAg
IH07CisgICAgTGlnaHRCbG9jay5wcm90b3R5cGUuX2Rlc2VyaWFsaXplID0gZnVuY3Rpb24gKHNl
cmlhbGl6YXRpb25PYmplY3QsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIF9zdXBlci5wcm90
b3R5cGUuX2Rlc2VyaWFsaXplLmNhbGwodGhpcywgc2VyaWFsaXphdGlvbk9iamVjdCwgc2NlbmUs
IHJvb3RVcmwpOworICAgICAgICBpZiAoc2VyaWFsaXphdGlvbk9iamVjdC5saWdodElkKSB7Cisg
ICAgICAgICAgICB0aGlzLmxpZ2h0ID0gc2NlbmUuZ2V0TGlnaHRCeUlEKHNlcmlhbGl6YXRpb25P
YmplY3QubGlnaHRJZCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBMaWdodEJsb2Nr
OworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9k
ZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5MaWdodEJs
b2NrIl0gPSBMaWdodEJsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9CbG9ja3MvRHVhbC9yZWZsZWN0aW9uVGV4dHVyZUJsb2NrLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvRHVhbC9yZWZsZWN0aW9uVGV4dHVyZUJs
b2NrLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJlZmxlY3Rpb25U
ZXh0dXJlQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVmbGVj
dGlvblRleHR1cmVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmVmbGVjdGlvblRleHR1cmVC
bG9jazsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2Rl
X21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9u
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9NaXNjL3R5cGVTdG9y
ZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9U
ZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi8uLi9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9U
ZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0lucHV0X2lu
cHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL0lucHV0L2lucHV0QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL0lu
cHV0L2lucHV0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVy
aWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMgKi8gIi4vTWF0ZXJp
YWxzL05vZGUvbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9FbmdpbmVzL2NvbnN0YW50cyAq
LyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworCisKKworCisKKworCisKKworLyoqCisgKiBC
bG9jayB1c2VkIHRvIHJlYWQgYSByZWZsZWN0aW9uIHRleHR1cmUgZnJvbSBhIHNhbXBsZXIKKyAq
LwordmFyIFJlZmxlY3Rpb25UZXh0dXJlQmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
X3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRl
bmRzIl0oUmVmbGVjdGlvblRleHR1cmVCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGUgYSBuZXcgVGV4dHVyZUJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
YmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIFJlZmxlY3Rpb25UZXh0dXJlQmxvY2so
bmFtZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9k
ZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleEFuZEZyYWdtZW50KSB8fCB0aGlzOworICAgICAg
ICBfdGhpcy5yZWdpc3RlcklucHV0KCJwb3NpdGlvbiIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IzLCBmYWxzZSwgX25vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiXS5WZXJ0ZXgpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ3b3Js
ZFBvc2l0aW9uIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlcyJdLlZlY3RvcjQsIGZhbHNlLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleCk7
CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoIndvcmxkTm9ybWFsIiwgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQsIGZhbHNlLCBf
bm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVy
SW5wdXQoIndvcmxkIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlcyJdLk1hdHJpeCwgZmFsc2UsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4
KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgiY2FtZXJhUG9zaXRpb24iLCBfbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yMywgZmFs
c2UsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uRnJhZ21lbnQpOworICAgICAgICBfdGhpcy5y
ZWdpc3RlcklucHV0KCJ2aWV3IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcyJdLk1hdHJpeCwgZmFsc2UsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0u
RnJhZ21lbnQpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgicmdiIiwgX25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yMywgX25vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0
ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0
cHV0KCJyIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLkZsb2F0LCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KTsKKyAgICAgICAg
X3RoaXMucmVnaXN0ZXJPdXRwdXQoImciLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uRnJh
Z21lbnQpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgiYiIsIF9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCwgX25vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiXS5GcmFnbWVudCk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVy
bnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBSZWZsZWN0aW9uVGV4dHVyZUJsb2NrLnBy
b3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiUmVm
bGVjdGlvblRleHR1cmVCbG9jayI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
UmVmbGVjdGlvblRleHR1cmVCbG9jay5wcm90b3R5cGUsICJwb3NpdGlvbiIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIHdvcmxkIHBvc2l0aW9uIGlucHV0IGNvbXBvbmVudAor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoUmVmbGVjdGlvblRleHR1cmVCbG9jay5wcm90b3R5cGUsICJ3b3JsZFBvc2l0aW9u
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQgcG9zaXRpb24gaW5w
dXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWZsZWN0aW9uVGV4dHVyZUJsb2NrLnByb3RvdHlwZSwg
IndvcmxkTm9ybWFsIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQg
bm9ybWFsIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzJdOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdGlvblRleHR1cmVCbG9jay5w
cm90b3R5cGUsICJ3b3JsZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHdv
cmxkIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzNdOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdGlvblRleHR1cmVCbG9jay5wcm90
b3R5cGUsICJjYW1lcmFQb3NpdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0cyB0
aGUgY2FtZXJhIChvciBleWUpIHBvc2l0aW9uIGNvbXBvbmVudAorICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbNF07
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWZsZWN0aW9u
VGV4dHVyZUJsb2NrLnByb3RvdHlwZSwgInZpZXciLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSB2aWV3IGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzVdOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdGlvblRleHR1
cmVCbG9jay5wcm90b3R5cGUsICJyZ2IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSByZ2Igb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3Rpb25UZXh0dXJlQmxv
Y2sucHJvdG90eXBlLCAiciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHIg
b3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3Rpb25UZXh0dXJlQmxvY2sucHJvdG90
eXBlLCAiZyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGcgb3V0cHV0IGNv
bXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1syXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3Rpb25UZXh0dXJlQmxvY2sucHJvdG90eXBlLCAiYiIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGIgb3V0cHV0IGNvbXBvbmVudAor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fb3V0cHV0c1szXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgUmVmbGVjdGlvblRl
eHR1cmVCbG9jay5wcm90b3R5cGUuYXV0b0NvbmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCkg
eworICAgICAgICBpZiAoIXRoaXMucG9zaXRpb24uaXNDb25uZWN0ZWQpIHsKKyAgICAgICAgICAg
IHZhciBwb3NpdGlvbklucHV0ID0gbWF0ZXJpYWwuZ2V0SW5wdXRCbG9ja0J5UHJlZGljYXRlKGZ1
bmN0aW9uIChiKSB7IHJldHVybiBiLmlzQXR0cmlidXRlICYmIGIubmFtZSA9PT0gInBvc2l0aW9u
IjsgfSk7CisgICAgICAgICAgICBpZiAoIXBvc2l0aW9uSW5wdXQpIHsKKyAgICAgICAgICAgICAg
ICBwb3NpdGlvbklucHV0ID0gbmV3IF9JbnB1dF9pbnB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X19bIklucHV0QmxvY2siXSgicG9zaXRpb24iKTsKKyAgICAgICAgICAgICAgICBw
b3NpdGlvbklucHV0LnNldEFzQXR0cmlidXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBwb3NpdGlvbklucHV0Lm91dHB1dC5jb25uZWN0VG8odGhpcy5wb3NpdGlvbik7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCF0aGlzLndvcmxkLmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2
YXIgd29ybGRJbnB1dCA9IG1hdGVyaWFsLmdldElucHV0QmxvY2tCeVByZWRpY2F0ZShmdW5jdGlv
biAoYikgeyByZXR1cm4gYi5zeXN0ZW1WYWx1ZSA9PT0gX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVl
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMi
XS5Xb3JsZDsgfSk7CisgICAgICAgICAgICBpZiAoIXdvcmxkSW5wdXQpIHsKKyAgICAgICAgICAg
ICAgICB3b3JsZElucHV0ID0gbmV3IF9JbnB1dF9pbnB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X19bIklucHV0QmxvY2siXSgid29ybGQiKTsKKyAgICAgICAgICAgICAgICB3b3Js
ZElucHV0LnNldEFzU3lzdGVtVmFsdWUoX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5Xb3JsZCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JsZElucHV0Lm91dHB1dC5jb25uZWN0VG8o
dGhpcy53b3JsZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLmNhbWVyYVBvc2l0aW9u
LmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgY2FtZXJhUG9zaXRpb25JbnB1dCA9IG1h
dGVyaWFsLmdldElucHV0QmxvY2tCeVByZWRpY2F0ZShmdW5jdGlvbiAoYikgeyByZXR1cm4gYi5z
eXN0ZW1WYWx1ZSA9PT0gX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5DYW1lcmFQb3NpdGlvbjsg
fSk7CisgICAgICAgICAgICBpZiAoIWNhbWVyYVBvc2l0aW9uSW5wdXQpIHsKKyAgICAgICAgICAg
ICAgICBjYW1lcmFQb3NpdGlvbklucHV0ID0gbmV3IF9JbnB1dF9pbnB1dEJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X19bIklucHV0QmxvY2siXSgiY2FtZXJhUG9zaXRpb24iKTsKKyAg
ICAgICAgICAgICAgICBjYW1lcmFQb3NpdGlvbklucHV0LnNldEFzU3lzdGVtVmFsdWUoX25vZGVN
YXRlcmlhbFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJOb2RlTWF0
ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5DYW1lcmFQb3NpdGlvbik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYW1lcmFQb3NpdGlvbklucHV0Lm91dHB1dC5jb25uZWN0VG8odGhpcy5jYW1lcmFQ
b3NpdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnZpZXcuaXNDb25uZWN0ZWQp
IHsKKyAgICAgICAgICAgIHZhciB2aWV3SW5wdXQgPSBtYXRlcmlhbC5nZXRJbnB1dEJsb2NrQnlQ
cmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuc3lzdGVtVmFsdWUgPT09IF9ub2RlTWF0
ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTm9kZU1hdGVy
aWFsU3lzdGVtVmFsdWVzIl0uVmlldzsgfSk7CisgICAgICAgICAgICBpZiAoIXZpZXdJbnB1dCkg
eworICAgICAgICAgICAgICAgIHZpZXdJbnB1dCA9IG5ldyBfSW5wdXRfaW5wdXRCbG9ja19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJJbnB1dEJsb2NrIl0oInZpZXciKTsKKyAgICAgICAg
ICAgICAgICB2aWV3SW5wdXQuc2V0QXNTeXN0ZW1WYWx1ZShfbm9kZU1hdGVyaWFsU3lzdGVtVmFs
dWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVl
cyJdLlZpZXcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmlld0lucHV0Lm91dHB1dC5j
b25uZWN0VG8odGhpcy52aWV3KTsKKyAgICAgICAgfQorICAgIH07CisgICAgUmVmbGVjdGlvblRl
eHR1cmVCbG9jay5wcm90b3R5cGUucHJlcGFyZURlZmluZXMgPSBmdW5jdGlvbiAobWVzaCwgbm9k
ZU1hdGVyaWFsLCBkZWZpbmVzKSB7CisgICAgICAgIGlmICghZGVmaW5lcy5fYXJlVGV4dHVyZXNE
aXJ0eSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghdGhp
cy50ZXh0dXJlIHx8ICF0aGlzLnRleHR1cmUuZ2V0VGV4dHVyZU1hdHJpeCkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRlZmluZXMuc2V0VmFsdWUodGhpcy5fZGVm
aW5lM0ROYW1lLCB0aGlzLnRleHR1cmUuaXNDdWJlKTsKKyAgICAgICAgZGVmaW5lcy5zZXRWYWx1
ZSh0aGlzLl9kZWZpbmVMb2NhbEN1YmljTmFtZSwgdGhpcy50ZXh0dXJlLmJvdW5kaW5nQm94U2l6
ZSA/IHRydWUgOiBmYWxzZSk7CisgICAgICAgIGRlZmluZXMuc2V0VmFsdWUodGhpcy5fZGVmaW5l
RXhwbGljaXROYW1lLCB0aGlzLnRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RV9FWFBMSUNJVF9NT0RFKTsKKyAgICAgICAgZGVmaW5lcy5zZXRWYWx1ZSh0aGlzLl9kZWZpbmVT
a3lib3hOYW1lLCB0aGlzLnRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9T
S1lCT1hfTU9ERSk7CisgICAgICAgIGRlZmluZXMuc2V0VmFsdWUodGhpcy5fZGVmaW5lQ3ViaWNO
YW1lLCB0aGlzLnRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9DVUJJQ19N
T0RFKTsKKyAgICAgICAgZGVmaW5lcy5zZXRWYWx1ZSh0aGlzLl9kZWZpbmVTcGhlcmljYWxOYW1l
LCB0aGlzLnRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9TUEhFUklDQUxf
TU9ERSk7CisgICAgICAgIGRlZmluZXMuc2V0VmFsdWUodGhpcy5fZGVmaW5lUGxhbmFyTmFtZSwg
dGhpcy50ZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfUExBTkFSX01PREUp
OworICAgICAgICBkZWZpbmVzLnNldFZhbHVlKHRoaXMuX2RlZmluZVByb2plY3Rpb25OYW1lLCB0
aGlzLnRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9QUk9KRUNUSU9OX01P
REUpOworICAgICAgICBkZWZpbmVzLnNldFZhbHVlKHRoaXMuX2RlZmluZUVxdWlyZWN0YW5ndWxh
ck5hbWUsIHRoaXMudGV4dHVyZS5jb29yZGluYXRlc01vZGUgPT09IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5URVhUVVJFX0VRVUlS
RUNUQU5HVUxBUl9NT0RFKTsKKyAgICAgICAgZGVmaW5lcy5zZXRWYWx1ZSh0aGlzLl9kZWZpbmVF
cXVpcmVjdGFuZ3VsYXJGaXhlZE5hbWUsIHRoaXMudGV4dHVyZS5jb29yZGluYXRlc01vZGUgPT09
IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFu
dHMiXS5URVhUVVJFX0ZJWEVEX0VRVUlSRUNUQU5HVUxBUl9NT0RFKTsKKyAgICAgICAgZGVmaW5l
cy5zZXRWYWx1ZSh0aGlzLl9kZWZpbmVNaXJyb3JlZEVxdWlyZWN0YW5ndWxhckZpeGVkTmFtZSwg
dGhpcy50ZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfRklYRURfRVFVSVJF
Q1RBTkdVTEFSX01JUlJPUkVEX01PREUpOworICAgIH07CisgICAgUmVmbGVjdGlvblRleHR1cmVC
bG9jay5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMu
dGV4dHVyZSAmJiAhdGhpcy50ZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9OworICAgIFJlZmxlY3Rpb25UZXh0dXJlQmxvY2sucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlv
biAoZWZmZWN0LCBub2RlTWF0ZXJpYWwsIG1lc2gpIHsKKyAgICAgICAgaWYgKCFtZXNoIHx8ICF0
aGlzLnRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBl
ZmZlY3Quc2V0TWF0cml4KHRoaXMuX3JlZmxlY3Rpb25NYXRyaXhOYW1lLCB0aGlzLnRleHR1cmUu
Z2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXgoKSk7CisgICAgICAgIGlmICh0aGlzLnRleHR1cmUu
aXNDdWJlKSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSh0aGlzLl9jdWJlU2FtcGxl
ck5hbWUsIHRoaXMudGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBlZmZlY3Quc2V0VGV4dHVyZSh0aGlzLl8yRFNhbXBsZXJOYW1lLCB0aGlzLnRleHR1cmUp
OworICAgICAgICB9CisgICAgfTsKKyAgICBSZWZsZWN0aW9uVGV4dHVyZUJsb2NrLnByb3RvdHlw
ZS5faW5qZWN0VmVydGV4Q29kZSA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICB2YXIgd29y
bGRQb3NWYXJ5aW5nTmFtZSA9ICJ2XyIgKyB0aGlzLndvcmxkUG9zaXRpb24uYXNzb2NpYXRlZFZh
cmlhYmxlTmFtZTsKKyAgICAgICAgaWYgKHN0YXRlLl9lbWl0VmFyeWluZ0Zyb21TdHJpbmcod29y
bGRQb3NWYXJ5aW5nTmFtZSwgInZlYzQiKSkgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gd29ybGRQb3NWYXJ5aW5nTmFtZSArICIgPSAiICsgdGhpcy53b3JsZFBvc2l0
aW9uLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiO1xyXG4iOworICAgICAgICB9CisgICAgICAg
IHZhciB3b3JsZE5vcm1hbFZhcnlpbmdOYW1lID0gInZfIiArIHRoaXMud29ybGROb3JtYWwuYXNz
b2NpYXRlZFZhcmlhYmxlTmFtZTsKKyAgICAgICAgaWYgKHN0YXRlLl9lbWl0VmFyeWluZ0Zyb21T
dHJpbmcod29ybGROb3JtYWxWYXJ5aW5nTmFtZSwgInZlYzQiKSkgeworICAgICAgICAgICAgc3Rh
dGUuY29tcGlsYXRpb25TdHJpbmcgKz0gd29ybGROb3JtYWxWYXJ5aW5nTmFtZSArICIgPSAiICsg
dGhpcy53b3JsZE5vcm1hbC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIjtcclxuIjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9wb3NpdGlvblVWV05hbWUgPSBzdGF0ZS5fZ2V0RnJlZVZhcmlh
YmxlTmFtZSgicG9zaXRpb25VVlciKTsKKyAgICAgICAgdGhpcy5fZGlyZWN0aW9uV05hbWUgPSBz
dGF0ZS5fZ2V0RnJlZVZhcmlhYmxlTmFtZSgiZGlyZWN0aW9uVyIpOworICAgICAgICBpZiAoc3Rh
dGUuX2VtaXRWYXJ5aW5nRnJvbVN0cmluZyh0aGlzLl9wb3NpdGlvblVWV05hbWUsICJ2ZWMzIiwg
dGhpcy5fZGVmaW5lU2t5Ym94TmFtZSkpIHsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9u
U3RyaW5nICs9ICIjaWZkZWYgIiArIHRoaXMuX2RlZmluZVNreWJveE5hbWUgKyAiXHJcbiI7Cisg
ICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9wb3NpdGlvblVWV05h
bWUgKyAiID0gIiArIHRoaXMucG9zaXRpb24uYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJc
biI7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2VuZGlmXHJcbiI7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRlLl9lbWl0VmFyeWluZ0Zyb21TdHJpbmcodGhp
cy5fZGlyZWN0aW9uV05hbWUsICJ2ZWMzIiwgImRlZmluZWQoIiArIHRoaXMuX2RlZmluZUVxdWly
ZWN0YW5ndWxhckZpeGVkTmFtZSArICIpIHx8IGRlZmluZWQoIiArIHRoaXMuX2RlZmluZU1pcnJv
cmVkRXF1aXJlY3Rhbmd1bGFyRml4ZWROYW1lICsgIikiKSkgeworICAgICAgICAgICAgc3RhdGUu
Y29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZiBkZWZpbmVkKCIgKyB0aGlzLl9kZWZpbmVFcXVpcmVj
dGFuZ3VsYXJGaXhlZE5hbWUgKyAiKSB8fCBkZWZpbmVkKCIgKyB0aGlzLl9kZWZpbmVNaXJyb3Jl
ZEVxdWlyZWN0YW5ndWxhckZpeGVkTmFtZSArICIpXHJcbiI7CisgICAgICAgICAgICBzdGF0ZS5j
b21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kaXJlY3Rpb25XTmFtZSArICIgPSBub3JtYWxpemUo
dmVjMygiICsgdGhpcy53b3JsZC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiAqIHZlYzQoIiAr
IHRoaXMucG9zaXRpb24uYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIsIDAuMCkpKTtcclxuIjsK
KyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxuIjsKKyAg
ICAgICAgfQorICAgIH07CisgICAgUmVmbGVjdGlvblRleHR1cmVCbG9jay5wcm90b3R5cGUuX3dy
aXRlT3V0cHV0ID0gZnVuY3Rpb24gKHN0YXRlLCBvdXRwdXQsIHN3aXp6bGUpIHsKKyAgICAgICAg
c3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0
YXRlKSArICIgPSAiICsgdGhpcy5fcmVmbGVjdGlvbkNvbG9yTmFtZSArICIuIiArIHN3aXp6bGUg
KyAiO1xyXG4iOworICAgIH07CisgICAgUmVmbGVjdGlvblRleHR1cmVCbG9jay5wcm90b3R5cGUu
X2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlw
ZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLnRhcmdl
dCAhPT0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCkgeworICAgICAgICAgICAg
dGhpcy5fZGVmaW5lM0ROYW1lID0gc3RhdGUuX2dldEZyZWVEZWZpbmVOYW1lKCJSRUZMRUNUSU9O
TUFQXzNEIik7CisgICAgICAgICAgICB0aGlzLl9kZWZpbmVDdWJpY05hbWUgPSBzdGF0ZS5fZ2V0
RnJlZURlZmluZU5hbWUoIlJFRkxFQ1RJT05NQVBfQ1VCSUMiKTsKKyAgICAgICAgICAgIHRoaXMu
X2RlZmluZVNwaGVyaWNhbE5hbWUgPSBzdGF0ZS5fZ2V0RnJlZURlZmluZU5hbWUoIlJFRkxFQ1RJ
T05NQVBfU1BIRVJJQ0FMIik7CisgICAgICAgICAgICB0aGlzLl9kZWZpbmVQbGFuYXJOYW1lID0g
c3RhdGUuX2dldEZyZWVEZWZpbmVOYW1lKCJSRUZMRUNUSU9OTUFQX1BMQU5BUiIpOworICAgICAg
ICAgICAgdGhpcy5fZGVmaW5lUHJvamVjdGlvbk5hbWUgPSBzdGF0ZS5fZ2V0RnJlZURlZmluZU5h
bWUoIlJFRkxFQ1RJT05NQVBfUFJPSkVDVElPTiIpOworICAgICAgICAgICAgdGhpcy5fZGVmaW5l
RXhwbGljaXROYW1lID0gc3RhdGUuX2dldEZyZWVEZWZpbmVOYW1lKCJSRUZMRUNUSU9OTUFQX0VY
UExJQ0lUIik7CisgICAgICAgICAgICB0aGlzLl9kZWZpbmVFcXVpcmVjdGFuZ3VsYXJOYW1lID0g
c3RhdGUuX2dldEZyZWVEZWZpbmVOYW1lKCJSRUZMRUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxBUiIp
OworICAgICAgICAgICAgdGhpcy5fZGVmaW5lTG9jYWxDdWJpY05hbWUgPSBzdGF0ZS5fZ2V0RnJl
ZURlZmluZU5hbWUoIlVTRV9MT0NBTF9SRUZMRUNUSU9OTUFQX0NVQklDIik7CisgICAgICAgICAg
ICB0aGlzLl9kZWZpbmVNaXJyb3JlZEVxdWlyZWN0YW5ndWxhckZpeGVkTmFtZSA9IHN0YXRlLl9n
ZXRGcmVlRGVmaW5lTmFtZSgiUkVGTEVDVElPTk1BUF9NSVJST1JFREVRVUlSRUNUQU5HVUxBUl9G
SVhFRCIpOworICAgICAgICAgICAgdGhpcy5fZGVmaW5lRXF1aXJlY3Rhbmd1bGFyRml4ZWROYW1l
ID0gc3RhdGUuX2dldEZyZWVEZWZpbmVOYW1lKCJSRUZMRUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxB
Ul9GSVhFRCIpOworICAgICAgICAgICAgdGhpcy5fZGVmaW5lU2t5Ym94TmFtZSA9IHN0YXRlLl9n
ZXRGcmVlRGVmaW5lTmFtZSgiUkVGTEVDVElPTk1BUF9TS1lCT1giKTsKKyAgICAgICAgICAgIC8v
IFZlcnRleAorICAgICAgICAgICAgdGhpcy5faW5qZWN0VmVydGV4Q29kZShzdGF0ZSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc2hhcmVkRGF0YS5ibG9j
a2luZ0Jsb2Nrcy5wdXNoKHRoaXMpOworICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLnRleHR1cmVC
bG9ja3MucHVzaCh0aGlzKTsKKyAgICAgICAgLy8gU2FtcGxlcnMKKyAgICAgICAgdGhpcy5fY3Vi
ZVNhbXBsZXJOYW1lID0gc3RhdGUuX2dldEZyZWVWYXJpYWJsZU5hbWUodGhpcy5uYW1lICsgIkN1
YmVTYW1wbGVyIik7CisgICAgICAgIHN0YXRlLnNhbXBsZXJzLnB1c2godGhpcy5fY3ViZVNhbXBs
ZXJOYW1lKTsKKyAgICAgICAgdGhpcy5fMkRTYW1wbGVyTmFtZSA9IHN0YXRlLl9nZXRGcmVlVmFy
aWFibGVOYW1lKHRoaXMubmFtZSArICIyRFNhbXBsZXIiKTsKKyAgICAgICAgc3RhdGUuc2FtcGxl
cnMucHVzaCh0aGlzLl8yRFNhbXBsZXJOYW1lKTsKKyAgICAgICAgc3RhdGUuX3NhbXBsZXJEZWNs
YXJhdGlvbiArPSAiI2lmZGVmICIgKyB0aGlzLl9kZWZpbmUzRE5hbWUgKyAiXHJcbiI7CisgICAg
ICAgIHN0YXRlLl9zYW1wbGVyRGVjbGFyYXRpb24gKz0gInVuaWZvcm0gc2FtcGxlckN1YmUgIiAr
IHRoaXMuX2N1YmVTYW1wbGVyTmFtZSArICI7XHJcbiI7CisgICAgICAgIHN0YXRlLl9zYW1wbGVy
RGVjbGFyYXRpb24gKz0gIiNlbHNlXHJcbiI7CisgICAgICAgIHN0YXRlLl9zYW1wbGVyRGVjbGFy
YXRpb24gKz0gInVuaWZvcm0gc2FtcGxlcjJEICIgKyB0aGlzLl8yRFNhbXBsZXJOYW1lICsgIjtc
clxuIjsKKyAgICAgICAgc3RhdGUuX3NhbXBsZXJEZWNsYXJhdGlvbiArPSAiI2VuZGlmXHJcbiI7
CisgICAgICAgIC8vIEZyYWdtZW50CisgICAgICAgIHN0YXRlLnNoYXJlZERhdGEuYmxvY2tzV2l0
aERlZmluZXMucHVzaCh0aGlzKTsKKyAgICAgICAgc3RhdGUuc2hhcmVkRGF0YS5iaW5kYWJsZUJs
b2Nrcy5wdXNoKHRoaXMpOworICAgICAgICB2YXIgY29tbWVudHMgPSAiLy8iICsgdGhpcy5uYW1l
OworICAgICAgICBzdGF0ZS5fZW1pdEZ1bmN0aW9uKCJSZWNpcHJvY2FsUEkiLCAiI2RlZmluZSBS
RUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0IiwgIiIpOworICAgICAgICBzdGF0ZS5fZW1pdEZ1bmN0
aW9uRnJvbUluY2x1ZGUoInJlZmxlY3Rpb25GdW5jdGlvbiIsIGNvbW1lbnRzKTsKKyAgICAgICAg
dGhpcy5fcmVmbGVjdGlvbkNvbG9yTmFtZSA9IHN0YXRlLl9nZXRGcmVlVmFyaWFibGVOYW1lKCJy
ZWZsZWN0aW9uQ29sb3IiKTsKKyAgICAgICAgdGhpcy5fcmVmbGVjdGlvbkNvb3Jkc05hbWUgPSBz
dGF0ZS5fZ2V0RnJlZVZhcmlhYmxlTmFtZSgicmVmbGVjdGlvblVWVyIpOworICAgICAgICB0aGlz
Ll9yZWZsZWN0aW9uMkRDb29yZHNOYW1lID0gc3RhdGUuX2dldEZyZWVWYXJpYWJsZU5hbWUoInJl
ZmxlY3Rpb25VViIpOworICAgICAgICB0aGlzLl9yZWZsZWN0aW9uTWF0cml4TmFtZSA9IHN0YXRl
Ll9nZXRGcmVlVmFyaWFibGVOYW1lKCJyZWZsZWN0aW9uTWF0cml4Iik7CisgICAgICAgIHN0YXRl
Ll9lbWl0VW5pZm9ybUZyb21TdHJpbmcodGhpcy5fcmVmbGVjdGlvbk1hdHJpeE5hbWUsICJtYXQ0
Iik7CisgICAgICAgIC8vIENvZGUKKyAgICAgICAgdmFyIHdvcmxkUG9zID0gInZfIiArIHRoaXMu
d29ybGRQb3NpdGlvbi5hc3NvY2lhdGVkVmFyaWFibGVOYW1lOworICAgICAgICB2YXIgd29ybGRO
b3JtYWwgPSAidl8iICsgdGhpcy53b3JsZE5vcm1hbC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsg
Ii54eXoiOworICAgICAgICB2YXIgcmVmbGVjdGlvbk1hdHJpeCA9IHRoaXMuX3JlZmxlY3Rpb25N
YXRyaXhOYW1lOworICAgICAgICB2YXIgZGlyZWN0aW9uID0gIm5vcm1hbGl6ZSgiICsgdGhpcy5f
ZGlyZWN0aW9uV05hbWUgKyAiKSI7CisgICAgICAgIHZhciBwb3NpdGlvblVWVyA9ICIiICsgdGhp
cy5fcG9zaXRpb25VVldOYW1lOworICAgICAgICB2YXIgdkV5ZVBvc2l0aW9uID0gIiIgKyB0aGlz
LmNhbWVyYVBvc2l0aW9uLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWU7CisgICAgICAgIHZhciB2aWV3
ID0gIiIgKyB0aGlzLnZpZXcuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZTsKKyAgICAgICAgc3RhdGUu
Y29tcGlsYXRpb25TdHJpbmcgKz0gInZlYzMgIiArIHRoaXMuX3JlZmxlY3Rpb25Db2xvck5hbWUg
KyAiO1xyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2lmZGVmICIg
KyB0aGlzLl9kZWZpbmUzRE5hbWUgKyAiXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9u
U3RyaW5nICs9ICIjaWZkZWYgIiArIHRoaXMuX2RlZmluZU1pcnJvcmVkRXF1aXJlY3Rhbmd1bGFy
Rml4ZWROYW1lICsgIlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAi
ICAgIHZlYzMgIiArIHRoaXMuX3JlZmxlY3Rpb25Db29yZHNOYW1lICsgIiA9IGNvbXB1dGVNaXJy
b3JlZEZpeGVkRXF1aXJlY3Rhbmd1bGFyQ29vcmRzKCIgKyB3b3JsZFBvcyArICIsICIgKyB3b3Js
ZE5vcm1hbCArICIsICIgKyBkaXJlY3Rpb24gKyAiKTtcclxuIjsKKyAgICAgICAgc3RhdGUuY29t
cGlsYXRpb25TdHJpbmcgKz0gIiNlbmRpZlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlv
blN0cmluZyArPSAiI2lmZGVmICIgKyB0aGlzLl9kZWZpbmVFcXVpcmVjdGFuZ3VsYXJGaXhlZE5h
bWUgKyAiXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIgICAgdmVj
MyAiICsgdGhpcy5fcmVmbGVjdGlvbkNvb3Jkc05hbWUgKyAiID0gY29tcHV0ZUZpeGVkRXF1aXJl
Y3Rhbmd1bGFyQ29vcmRzKCIgKyB3b3JsZFBvcyArICIsICIgKyB3b3JsZE5vcm1hbCArICIsICIg
KyBkaXJlY3Rpb24gKyAiKTtcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcg
Kz0gIiNlbmRpZlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2lm
ZGVmICIgKyB0aGlzLl9kZWZpbmVFcXVpcmVjdGFuZ3VsYXJOYW1lICsgIlxyXG4iOworICAgICAg
ICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiICAgIHZlYzMgIiArIHRoaXMuX3JlZmxlY3Rp
b25Db29yZHNOYW1lICsgIiA9IGNvbXB1dGVFcXVpcmVjdGFuZ3VsYXJDb29yZHMoIiArIHdvcmxk
UG9zICsgIiwgIiArIHdvcmxkTm9ybWFsICsgIiwgIiArIHZFeWVQb3NpdGlvbiArICIueHl6LCAi
ICsgcmVmbGVjdGlvbk1hdHJpeCArICIpO1xyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlv
blN0cmluZyArPSAiICNlbmRpZlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmlu
ZyArPSAiI2lmZGVmICIgKyB0aGlzLl9kZWZpbmVTcGhlcmljYWxOYW1lICsgIlxyXG4iOworICAg
ICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiICAgIHZlYzMgIiArIHRoaXMuX3JlZmxl
Y3Rpb25Db29yZHNOYW1lICsgIiA9IGNvbXB1dGVTcGhlcmljYWxDb29yZHMoIiArIHdvcmxkUG9z
ICsgIiwgIiArIHdvcmxkTm9ybWFsICsgIiwgIiArIHZpZXcgKyAiLCAiICsgcmVmbGVjdGlvbk1h
dHJpeCArICIpO1xyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2Vu
ZGlmXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjaWZkZWYgIiAr
IHRoaXMuX2RlZmluZVBsYW5hck5hbWUgKyAiXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0
aW9uU3RyaW5nICs9ICIgICAgdmVjMyAiICsgdGhpcy5fcmVmbGVjdGlvbkNvb3Jkc05hbWUgKyAi
ID0gY29tcHV0ZVBsYW5hckNvb3JkcygiICsgd29ybGRQb3MgKyAiLCAiICsgd29ybGROb3JtYWwg
KyAiLCAiICsgdkV5ZVBvc2l0aW9uICsgIi54eXosICIgKyByZWZsZWN0aW9uTWF0cml4ICsgIik7
XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxuIjsK
KyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZmRlZiAiICsgdGhpcy5fZGVm
aW5lQ3ViaWNOYW1lICsgIlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyAr
PSAiICAgICNpZmRlZiAiICsgdGhpcy5fZGVmaW5lTG9jYWxDdWJpY05hbWUgKyAiXHJcbiI7Cisg
ICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIgICAgICAgIHZlYzMgIiArIHRoaXMu
X3JlZmxlY3Rpb25Db29yZHNOYW1lICsgIiA9IGNvbXB1dGVDdWJpY0xvY2FsQ29vcmRzKCIgKyB3
b3JsZFBvcyArICIsICIgKyB3b3JsZE5vcm1hbCArICIsICIgKyB2RXllUG9zaXRpb24gKyAiLnh5
eiwgIiArIHJlZmxlY3Rpb25NYXRyaXggKyAiLCB2UmVmbGVjdGlvblNpemUsIHZSZWZsZWN0aW9u
UG9zaXRpb24pO1xyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiICAg
ICNlbHNlXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIgICAgICAg
dmVjMyAiICsgdGhpcy5fcmVmbGVjdGlvbkNvb3Jkc05hbWUgKyAiID0gY29tcHV0ZUN1YmljQ29v
cmRzKCIgKyB3b3JsZFBvcyArICIsICIgKyB3b3JsZE5vcm1hbCArICIsICIgKyB2RXllUG9zaXRp
b24gKyAiLnh5eiwgIiArIHJlZmxlY3Rpb25NYXRyaXggKyAiKTtcclxuIjsKKyAgICAgICAgc3Rh
dGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiAgICAjZW5kaWZcclxuIjsKKyAgICAgICAgc3RhdGUu
Y29tcGlsYXRpb25TdHJpbmcgKz0gIiNlbmRpZlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxh
dGlvblN0cmluZyArPSAiI2lmZGVmICIgKyB0aGlzLl9kZWZpbmVQcm9qZWN0aW9uTmFtZSArICJc
clxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiAgICB2ZWMzICIgKyB0
aGlzLl9yZWZsZWN0aW9uQ29vcmRzTmFtZSArICIgPSBjb21wdXRlUHJvamVjdGlvbkNvb3Jkcygi
ICsgd29ybGRQb3MgKyAiLCAiICsgdmlldyArICIsICIgKyByZWZsZWN0aW9uTWF0cml4ICsgIik7
XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxuIjsK
KyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZmRlZiAiICsgdGhpcy5fZGVm
aW5lU2t5Ym94TmFtZSArICJcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcg
Kz0gIiAgICB2ZWMzICIgKyB0aGlzLl9yZWZsZWN0aW9uQ29vcmRzTmFtZSArICIgPSBjb21wdXRl
U2t5Qm94Q29vcmRzKCIgKyBwb3NpdGlvblVWVyArICIsICIgKyByZWZsZWN0aW9uTWF0cml4ICsg
Iik7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxu
IjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZmRlZiAiICsgdGhpcy5f
ZGVmaW5lRXhwbGljaXROYW1lICsgIlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0
cmluZyArPSAiICAgIHZlYzMgIiArIHRoaXMuX3JlZmxlY3Rpb25Db29yZHNOYW1lICsgIiA9IHZl
YzMoMCwgMCwgMCk7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIj
ZW5kaWZcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fcmVm
bGVjdGlvbkNvbG9yTmFtZSArICIgPSB0ZXh0dXJlQ3ViZSgiICsgdGhpcy5fY3ViZVNhbXBsZXJO
YW1lICsgIiwgIiArIHRoaXMuX3JlZmxlY3Rpb25Db29yZHNOYW1lICsgIikucmdiO1xyXG4iOwor
ICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2Vsc2VcclxuIjsKKyAgICAgICAg
c3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gInZlYzIgIiArIHRoaXMuX3JlZmxlY3Rpb24yRENv
b3Jkc05hbWUgKyAiID0gIiArIHRoaXMuX3JlZmxlY3Rpb25Db29yZHNOYW1lICsgIi54eTtcclxu
IjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZmRlZiAiICsgdGhpcy5f
ZGVmaW5lUHJvamVjdGlvbk5hbWUgKyAiXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9u
U3RyaW5nICs9IHRoaXMuX3JlZmxlY3Rpb24yRENvb3Jkc05hbWUgKyAiIC89ICIgKyB0aGlzLl9y
ZWZsZWN0aW9uQ29vcmRzTmFtZSArICIuejtcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gIiNlbmRpZlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmlu
ZyArPSB0aGlzLl9yZWZsZWN0aW9uMkRDb29yZHNOYW1lICsgIi55ID0gMS4wIC0gIiArIHRoaXMu
X3JlZmxlY3Rpb24yRENvb3Jkc05hbWUgKyAiLnk7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBp
bGF0aW9uU3RyaW5nICs9IHRoaXMuX3JlZmxlY3Rpb25Db2xvck5hbWUgKyAiID0gdGV4dHVyZTJE
KCIgKyB0aGlzLl8yRFNhbXBsZXJOYW1lICsgIiwgIiArIHRoaXMuX3JlZmxlY3Rpb24yRENvb3Jk
c05hbWUgKyAiKS5yZ2I7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9
ICIjZW5kaWZcclxuIjsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX291dHB1
dHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgb3V0cHV0ID0gX2Fb
X2ldOworICAgICAgICAgICAgaWYgKG91dHB1dC5oYXNFbmRwb2ludHMpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl93cml0ZU91dHB1dChzdGF0ZSwgb3V0cHV0LCBvdXRwdXQubmFtZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBS
ZWZsZWN0aW9uVGV4dHVyZUJsb2NrLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX3N1cGVyLnByb3RvdHlwZS5zZXJp
YWxpemUuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMudGV4dHVyZSkgeworICAgICAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC50ZXh0dXJlID0gdGhpcy50ZXh0dXJlLnNlcmlhbGl6ZSgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07
CisgICAgUmVmbGVjdGlvblRleHR1cmVCbG9jay5wcm90b3R5cGUuX2Rlc2VyaWFsaXplID0gZnVu
Y3Rpb24gKHNlcmlhbGl6YXRpb25PYmplY3QsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIF9z
dXBlci5wcm90b3R5cGUuX2Rlc2VyaWFsaXplLmNhbGwodGhpcywgc2VyaWFsaXphdGlvbk9iamVj
dCwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICBpZiAoc2VyaWFsaXphdGlvbk9iamVjdC50ZXh0
dXJlKSB7CisgICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0uUGFyc2Uoc2VyaWFsaXphdGlvbk9i
amVjdC50ZXh0dXJlLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJl
dHVybiBSZWZsZWN0aW9uVGV4dHVyZUJsb2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190
eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lz
dGVyZWRUeXBlc1siQkFCWUxPTi5SZWZsZWN0aW9uVGV4dHVyZUJsb2NrIl0gPSBSZWZsZWN0aW9u
VGV4dHVyZUJsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9C
bG9ja3MvRHVhbC90ZXh0dXJlQmxvY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUv
QmxvY2tzL0R1YWwvdGV4dHVyZUJsb2NrLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
VGV4dHVyZUJsb2NrICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRleHR1
cmVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVGV4dHVyZUJsb2NrOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xp
Yi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJs
b2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9u
b2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
SW5wdXRfaW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vSW5wdXQvaW5wdXRCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9C
bG9ja3MvSW5wdXQvaW5wdXRCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
aXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3Rv
cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
Li4vVGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIp
OworCisKKworCisKKworCisvKioKKyAqIEJsb2NrIHVzZWQgdG8gcmVhZCBhIHRleHR1cmUgZnJv
bSBhIHNhbXBsZXIKKyAqLwordmFyIFRleHR1cmVCbG9jayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShUZXh0dXJlQmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRl
IGEgbmV3IFRleHR1cmVCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2Nr
IG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBUZXh0dXJlQmxvY2sobmFtZSkgeworICAgICAg
ICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cyJdLlZlcnRleEFuZEZyYWdtZW50KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdpc3Rl
cklucHV0KCJ1diIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXMiXS5WZWN0b3IyLCBmYWxzZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXhB
bmRGcmFnbWVudCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJyZ2JhIiwgX25vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNCwgX25v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2Rl
TWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVy
T3V0cHV0KCJyZ2IiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzIl0uQ29sb3IzLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KTsKKyAg
ICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoInIiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQsIF9ub2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRz
Il0uRnJhZ21lbnQpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgiZyIsIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCwgX25vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0
ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0
cHV0KCJiIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLkZsb2F0LCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KTsKKyAgICAgICAg
X3RoaXMucmVnaXN0ZXJPdXRwdXQoImEiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uRnJh
Z21lbnQpOworICAgICAgICBfdGhpcy5faW5wdXRzWzBdLmFjY2VwdGVkQ29ubmVjdGlvblBvaW50
VHlwZXMucHVzaChfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzIl0uVmVjdG9yMyk7CisgICAgICAgIF90aGlzLl9pbnB1dHNbMF0uYWNjZXB0ZWRDb25uZWN0
aW9uUG9pbnRUeXBlcy5wdXNoKF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXMiXS5WZWN0b3I0KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAg
ICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJu
cyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFRleHR1cmVCbG9jay5wcm90b3R5cGUuZ2V0
Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlRleHR1cmVCbG9jayI7
CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUJsb2NrLnByb3RvdHlw
ZSwgInV2IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdXYgaW5wdXQgY29t
cG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShUZXh0dXJlQmxvY2sucHJvdG90eXBlLCAicmdiYSIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHJnYmEgb3V0cHV0IGNvbXBvbmVudAorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFRleHR1cmVCbG9jay5wcm90b3R5cGUsICJyZ2IiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSByZ2Igb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1sxXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVCbG9j
ay5wcm90b3R5cGUsICJyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgciBv
dXRwdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzJdOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUJsb2NrLnByb3RvdHlwZSwgImciLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBnIG91dHB1dCBjb21wb25lbnQKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX291dHB1dHNbM107CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShUZXh0dXJlQmxvY2sucHJvdG90eXBlLCAiYiIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgdGhlIGIgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1s0XTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVCbG9j
ay5wcm90b3R5cGUsICJhIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgYSBv
dXRwdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzVdOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUJsb2NrLnByb3RvdHlwZSwgInRhcmdl
dCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyBUZXh0dXJl
QmxvY2sgaGFzIGEgc3BlY2lhbCBvcHRpbWl6YXRpb25zIGZvciB1dnMgdGhhdCBjb21lIGZyb20g
dGhlIHZlcnRleCBzaGFkZXJzIGFzIHRoZXkgY2FuIGJlIHBhY2tlZCBpbnRvIGEgc2luZ2xlIHZh
cnlpbmdzLgorICAgICAgICAgICAgLy8gQnV0IHdlIG5lZWQgdG8gZGV0ZWN0IHV2cyBjb21pbmcg
ZnJvbSBmcmFnbWVudCB0aGVuCisgICAgICAgICAgICBpZiAoIXRoaXMudXYuaXNDb25uZWN0ZWQp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0
ZXhBbmRGcmFnbWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLnV2LnNv
dXJjZUJsb2NrLmlzSW5wdXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX25vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiXS5WZXJ0ZXhBbmRGcmFnbWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciBwYXJlbnQgPSB0aGlzLnV2LmNvbm5lY3RlZFBvaW50OworICAgICAgICAgICAgd2hp
bGUgKHBhcmVudCkgeworICAgICAgICAgICAgICAgIGlmIChwYXJlbnQudGFyZ2V0ID09PSBfbm9k
ZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAocGFyZW50LnRhcmdldCA9PT0gX25vZGVNYXRlcmlhbEJs
b2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHMiXS5WZXJ0ZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9ub2RlTWF0
ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4QW5kRnJhZ21lbnQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChwYXJlbnQudGFyZ2V0ID09PSBfbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cyJdLk5ldXRyYWwgfHwgcGFyZW50LnRhcmdldCA9PT0gX25vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHMiXS5WZXJ0ZXhBbmRGcmFnbWVudCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50
QmxvY2sgPSBwYXJlbnQub3duZXJCbG9jazsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0g
bnVsbDsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHBhcmVudEJs
b2NrLmlucHV0czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBpbnB1dCA9IF9hW19pXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1
dC5jb25uZWN0ZWRQb2ludCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9
IGlucHV0LmNvbm5lY3RlZFBvaW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIF9ub2RlTWF0
ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4QW5kRnJhZ21lbnQ7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIFRleHR1cmVCbG9jay5wcm90b3R5cGUuYXV0b0NvbmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRl
cmlhbCkgeworICAgICAgICBpZiAoIXRoaXMudXYuaXNDb25uZWN0ZWQpIHsKKyAgICAgICAgICAg
IHZhciB1dklucHV0ID0gbWF0ZXJpYWwuZ2V0SW5wdXRCbG9ja0J5UHJlZGljYXRlKGZ1bmN0aW9u
IChiKSB7IHJldHVybiBiLmlzQXR0cmlidXRlICYmIGIubmFtZSA9PT0gInV2IjsgfSk7CisgICAg
ICAgICAgICBpZiAoIXV2SW5wdXQpIHsKKyAgICAgICAgICAgICAgICB1dklucHV0ID0gbmV3IF9J
bnB1dF9pbnB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIklucHV0QmxvY2si
XSgidXYiKTsKKyAgICAgICAgICAgICAgICB1dklucHV0LnNldEFzQXR0cmlidXRlKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB1dklucHV0Lm91dHB1dC5jb25uZWN0VG8odGhpcy51dik7
CisgICAgICAgIH0KKyAgICB9OworICAgIFRleHR1cmVCbG9jay5wcm90b3R5cGUuaW5pdGlhbGl6
ZURlZmluZXMgPSBmdW5jdGlvbiAobWVzaCwgbm9kZU1hdGVyaWFsLCBkZWZpbmVzLCB1c2VJbnN0
YW5jZXMpIHsKKyAgICAgICAgaWYgKHVzZUluc3RhbmNlcyA9PT0gdm9pZCAwKSB7IHVzZUluc3Rh
bmNlcyA9IGZhbHNlOyB9CisgICAgICAgIGlmICghZGVmaW5lcy5fYXJlVGV4dHVyZXNEaXJ0eSkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRlZmluZXMuc2V0VmFs
dWUodGhpcy5fbWFpblVWRGVmaW5lTmFtZSwgZmFsc2UpOworICAgIH07CisgICAgVGV4dHVyZUJs
b2NrLnByb3RvdHlwZS5wcmVwYXJlRGVmaW5lcyA9IGZ1bmN0aW9uIChtZXNoLCBub2RlTWF0ZXJp
YWwsIGRlZmluZXMpIHsKKyAgICAgICAgaWYgKCFkZWZpbmVzLl9hcmVUZXh0dXJlc0RpcnR5KSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnRleHR1
cmUgfHwgIXRoaXMudGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnRleHR1cmUuZ2V0VGV4dHVyZU1hdHJp
eCgpLmlzSWRlbnRpdHlBczN4MigpKSB7CisgICAgICAgICAgICBkZWZpbmVzLnNldFZhbHVlKHRo
aXMuX2RlZmluZU5hbWUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgZGVmaW5lcy5zZXRWYWx1ZSh0aGlzLl9kZWZpbmVOYW1lLCBmYWxzZSk7CisgICAgICAg
ICAgICBkZWZpbmVzLnNldFZhbHVlKHRoaXMuX21haW5VVkRlZmluZU5hbWUsIHRydWUpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBUZXh0dXJlQmxvY2sucHJvdG90eXBlLmlzUmVhZHkgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnRleHR1cmUgJiYgIXRoaXMudGV4dHVyZS5pc1Jl
YWR5T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICBUZXh0dXJlQmxvY2sucHJvdG90
eXBlLmJpbmQgPSBmdW5jdGlvbiAoZWZmZWN0LCBub2RlTWF0ZXJpYWwsIG1lc2gpIHsKKyAgICAg
ICAgaWYgKCFtZXNoIHx8ICF0aGlzLnRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5faXNNaXhlZCkgeworICAgICAgICAgICAgZWZmZWN0
LnNldEZsb2F0KHRoaXMuX3RleHR1cmVJbmZvTmFtZSwgdGhpcy50ZXh0dXJlLmxldmVsKTsKKyAg
ICAgICAgICAgIGVmZmVjdC5zZXRNYXRyaXgodGhpcy5fdGV4dHVyZVRyYW5zZm9ybU5hbWUsIHRo
aXMudGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KCkpOworICAgICAgICB9CisgICAgICAgIGVmZmVj
dC5zZXRUZXh0dXJlKHRoaXMuX3NhbXBsZXJOYW1lLCB0aGlzLnRleHR1cmUpOworICAgIH07Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVCbG9jay5wcm90b3R5cGUsICJfaXNNaXhl
ZCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy50YXJnZXQgIT09IF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uRnJhZ21lbnQ7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIFRleHR1cmVCbG9jay5wcm90b3R5cGUuX2luamVjdFZlcnRleENvZGUg
PSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgdmFyIHV2SW5wdXQgPSB0aGlzLnV2OworICAg
ICAgICAvLyBJbmplY3QgY29kZSBpbiB2ZXJ0ZXgKKyAgICAgICAgdGhpcy5fZGVmaW5lTmFtZSA9
IHN0YXRlLl9nZXRGcmVlRGVmaW5lTmFtZSgiVVZUUkFOU0ZPUk0iKTsKKyAgICAgICAgdGhpcy5f
bWFpblVWRGVmaW5lTmFtZSA9IHN0YXRlLl9nZXRGcmVlRGVmaW5lTmFtZSgidk1haW4iICsgdXZJ
bnB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lKTsKKyAgICAgICAgaWYgKHV2SW5wdXQuY29ubmVj
dGVkUG9pbnQub3duZXJCbG9jay5pc0lucHV0KSB7CisgICAgICAgICAgICB2YXIgdXZJbnB1dE93
bmVyQmxvY2sgPSB1dklucHV0LmNvbm5lY3RlZFBvaW50Lm93bmVyQmxvY2s7CisgICAgICAgICAg
ICBpZiAoIXV2SW5wdXRPd25lckJsb2NrLmlzQXR0cmlidXRlKSB7CisgICAgICAgICAgICAgICAg
c3RhdGUuX2VtaXRVbmlmb3JtRnJvbVN0cmluZyh1dklucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5h
bWUsICJ2ZWMyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbWFp
blVWTmFtZSA9ICJ2TWFpbiIgKyB1dklucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWU7CisgICAg
ICAgIHRoaXMuX3RyYW5zZm9ybWVkVVZOYW1lID0gc3RhdGUuX2dldEZyZWVWYXJpYWJsZU5hbWUo
InRyYW5zZm9ybWVkVVYiKTsKKyAgICAgICAgdGhpcy5fdGV4dHVyZVRyYW5zZm9ybU5hbWUgPSBz
dGF0ZS5fZ2V0RnJlZVZhcmlhYmxlTmFtZSgidGV4dHVyZVRyYW5zZm9ybSIpOworICAgICAgICB0
aGlzLl90ZXh0dXJlSW5mb05hbWUgPSBzdGF0ZS5fZ2V0RnJlZVZhcmlhYmxlTmFtZSgidGV4dHVy
ZUluZm9OYW1lIik7CisgICAgICAgIHN0YXRlLl9lbWl0VmFyeWluZ0Zyb21TdHJpbmcodGhpcy5f
dHJhbnNmb3JtZWRVVk5hbWUsICJ2ZWMyIiwgdGhpcy5fZGVmaW5lTmFtZSk7CisgICAgICAgIHN0
YXRlLl9lbWl0VmFyeWluZ0Zyb21TdHJpbmcodGhpcy5fbWFpblVWTmFtZSwgInZlYzIiLCB0aGlz
Ll9tYWluVVZEZWZpbmVOYW1lKTsKKyAgICAgICAgc3RhdGUuX2VtaXRVbmlmb3JtRnJvbVN0cmlu
Zyh0aGlzLl90ZXh0dXJlVHJhbnNmb3JtTmFtZSwgIm1hdDQiLCB0aGlzLl9kZWZpbmVOYW1lKTsK
KyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZmRlZiAiICsgdGhpcy5fZGVm
aW5lTmFtZSArICJcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhp
cy5fdHJhbnNmb3JtZWRVVk5hbWUgKyAiID0gdmVjMigiICsgdGhpcy5fdGV4dHVyZVRyYW5zZm9y
bU5hbWUgKyAiICogdmVjNCgiICsgdXZJbnB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi54
eSwgMS4wLCAwLjApKTtcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0g
IiNlbHNlXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX21h
aW5VVk5hbWUgKyAiID0gIiArIHV2SW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIueHk7
XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxuIjsK
KyAgICB9OworICAgIFRleHR1cmVCbG9jay5wcm90b3R5cGUuX3dyaXRlT3V0cHV0ID0gZnVuY3Rp
b24gKHN0YXRlLCBvdXRwdXQsIHN3aXp6bGUpIHsKKyAgICAgICAgdmFyIHV2SW5wdXQgPSB0aGlz
LnV2OworICAgICAgICBpZiAodGhpcy51di5vd25lckJsb2NrLnRhcmdldCA9PT0gX25vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCkgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0YXRlKSArICIgPSB0ZXh0
dXJlMkQoIiArIHRoaXMuX3NhbXBsZXJOYW1lICsgIiwgIiArIHV2SW5wdXQuYXNzb2NpYXRlZFZh
cmlhYmxlTmFtZSArICIpLiIgKyBzd2l6emxlICsgIjtcclxuIjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICB2YXIgY29tcGxlbWVudCA9ICIgKiAiICsgdGhpcy5fdGV4
dHVyZUluZm9OYW1lOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2lmZGVm
ICIgKyB0aGlzLl9kZWZpbmVOYW1lICsgIlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlv
blN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgIiA9IHRleHR1
cmUyRCgiICsgdGhpcy5fc2FtcGxlck5hbWUgKyAiLCAiICsgdGhpcy5fdHJhbnNmb3JtZWRVVk5h
bWUgKyAiKS4iICsgc3dpenpsZSArIGNvbXBsZW1lbnQgKyAiO1xyXG4iOworICAgICAgICBzdGF0
ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2Vsc2VcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGls
YXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0YXRlKSArICIgPSB0
ZXh0dXJlMkQoIiArIHRoaXMuX3NhbXBsZXJOYW1lICsgIiwgIiArICgidk1haW4iICsgdXZJbnB1
dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lKSArICIpLiIgKyBzd2l6emxlICsgY29tcGxlbWVudCAr
ICI7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxu
IjsKKyAgICB9OworICAgIFRleHR1cmVCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5j
dGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxs
KHRoaXMsIHN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLnRhcmdldCAhPT0gX25vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiXS5GcmFnbWVudCkgeworICAgICAgICAgICAgLy8gVmVydGV4CisgICAgICAg
ICAgICB0aGlzLl9pbmplY3RWZXJ0ZXhDb2RlKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmJsb2NraW5nQmxvY2tzLnB1c2go
dGhpcyk7CisgICAgICAgIHN0YXRlLnNoYXJlZERhdGEudGV4dHVyZUJsb2Nrcy5wdXNoKHRoaXMp
OworICAgICAgICB0aGlzLl9zYW1wbGVyTmFtZSA9IHN0YXRlLl9nZXRGcmVlVmFyaWFibGVOYW1l
KHRoaXMubmFtZSArICJTYW1wbGVyIik7CisgICAgICAgIHN0YXRlLnNhbXBsZXJzLnB1c2godGhp
cy5fc2FtcGxlck5hbWUpOworICAgICAgICBzdGF0ZS5fc2FtcGxlckRlY2xhcmF0aW9uICs9ICJ1
bmlmb3JtIHNhbXBsZXIyRCAiICsgdGhpcy5fc2FtcGxlck5hbWUgKyAiO1xyXG4iOworICAgICAg
ICAvLyBGcmFnbWVudAorICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmJpbmRhYmxlQmxvY2tzLnB1
c2godGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9pc01peGVkKSB7CisgICAgICAgICAgICBzdGF0
ZS5zaGFyZWREYXRhLmJsb2Nrc1dpdGhEZWZpbmVzLnB1c2godGhpcyk7CisgICAgICAgICAgICBz
dGF0ZS5fZW1pdFVuaWZvcm1Gcm9tU3RyaW5nKHRoaXMuX3RleHR1cmVJbmZvTmFtZSwgImZsb2F0
Iik7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX291dHB1
dHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgb3V0cHV0ID0gX2Fb
X2ldOworICAgICAgICAgICAgaWYgKG91dHB1dC5oYXNFbmRwb2ludHMpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl93cml0ZU91dHB1dChzdGF0ZSwgb3V0cHV0LCBvdXRwdXQubmFtZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBU
ZXh0dXJlQmxvY2sucHJvdG90eXBlLl9kdW1wUHJvcGVydGllc0NvZGUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gIiI7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGNvZGVTdHJpbmcgPSB0aGlzLl9jb2RlVmFyaWFibGVOYW1l
ICsgIi50ZXh0dXJlID0gbmV3IEJBQllMT04uVGV4dHVyZShcIiIgKyB0aGlzLnRleHR1cmUubmFt
ZSArICJcIik7XHJcbiI7CisgICAgICAgIHJldHVybiBjb2RlU3RyaW5nOworICAgIH07CisgICAg
VGV4dHVyZUJsb2NrLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX3N1cGVyLnByb3RvdHlwZS5zZXJpYWxpemUuY2Fs
bCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMudGV4dHVyZSkgeworICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC50ZXh0dXJlID0gdGhpcy50ZXh0dXJlLnNlcmlhbGl6ZSgpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgVGV4
dHVyZUJsb2NrLnByb3RvdHlwZS5fZGVzZXJpYWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlv
bk9iamVjdCwgc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fZGVz
ZXJpYWxpemUuY2FsbCh0aGlzLCBzZXJpYWxpemF0aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCk7
CisgICAgICAgIGlmIChzZXJpYWxpemF0aW9uT2JqZWN0LnRleHR1cmUpIHsKKyAgICAgICAgICAg
IHRoaXMudGV4dHVyZSA9IF9UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIlRleHR1cmUiXS5QYXJzZShzZXJpYWxpemF0aW9uT2JqZWN0LnRleHR1cmUsIHNjZW5l
LCByb290VXJsKTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIFRleHR1cmVCbG9jazsK
K30oX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVN
YXRlcmlhbEJsb2NrIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uVGV4dHVyZUJs
b2NrIl0gPSBUZXh0dXJlQmxvY2s7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFs
cy9Ob2RlL0Jsb2Nrcy9GcmFnbWVudC9hbHBoYVRlc3RCbG9jay50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvRnJhZ21lbnQvYWxwaGFUZXN0QmxvY2sudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBbHBoYVRlc3RCbG9jayAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbHBoYVRlc3RCbG9jayIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gQWxwaGFUZXN0QmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxv
Y2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
Li4vLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKwor
CisvKioKKyAqIEJsb2NrIHVzZWQgdG8gYWRkIGFuIGFscGhhIHRlc3QgaW4gdGhlIGZyYWdtZW50
IHNoYWRlcgorICovCit2YXIgQWxwaGFUZXN0QmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19l
eHRlbmRzIl0oQWxwaGFUZXN0QmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRl
IGEgbmV3IEFscGhhVGVzdEJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgYmxv
Y2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIEFscGhhVGVzdEJsb2NrKG5hbWUpIHsKKyAg
ICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlhbEJs
b2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHMiXS5GcmFnbWVudCkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgb3Igc2V0cyB0aGUgYWxwaGEgdmFsdWUgd2hlcmUgYWxwaGEgdGVzdGluZyBoYXBwZW5zCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5hbHBoYUN1dE9mZiA9IDAuNDsKKyAgICAgICAgX3Ro
aXMucmVnaXN0ZXJJbnB1dCgiY29sb3IiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3I0LCB0cnVlKTsKKyAgICAgICAgX3RoaXMucmVnaXN0
ZXJJbnB1dCgiYWxwaGEiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzIl0uRmxvYXQsIHRydWUpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQor
ICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEByZXR1
cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgQWxwaGFUZXN0QmxvY2sucHJvdG90eXBl
LmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJBbHBoYVRlc3RC
bG9jayI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWxwaGFUZXN0QmxvY2su
cHJvdG90eXBlLCAiY29sb3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBj
b2xvciBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1swXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFscGhhVGVzdEJsb2NrLnByb3RvdHlwZSwg
ImFscGhhIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgYWxwaGEgaW5wdXQg
Y29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIEFs
cGhhVGVzdEJsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9jayA9IGZ1bmN0aW9uIChzdGF0ZSkgewor
ICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJsb2NrLmNhbGwodGhpcywgc3RhdGUpOwor
ICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmhpbnRzLm5lZWRBbHBoYVRlc3RpbmcgPSB0cnVlOwor
ICAgICAgICBpZiAodGhpcy5jb2xvci5jb25uZWN0ZWRQb2ludCkgeworICAgICAgICAgICAgc3Rh
dGUuY29tcGlsYXRpb25TdHJpbmcgKz0gImlmICgiICsgdGhpcy5jb2xvci5hc3NvY2lhdGVkVmFy
aWFibGVOYW1lICsgIi5hIDwgIiArIHRoaXMuYWxwaGFDdXRPZmYgKyAiKSBkaXNjYXJkO1xyXG4i
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gImlmICgiICsgdGhpcy5hbHBoYS5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsg
IiA8ICIgKyB0aGlzLmFscGhhQ3V0T2ZmICsgIikgZGlzY2FyZDtcclxuIjsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIEFscGhhVGVzdEJsb2NrLnByb3RvdHlw
ZS5fZHVtcFByb3BlcnRpZXNDb2RlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgY29kZVN0
cmluZyA9IHRoaXMuX2NvZGVWYXJpYWJsZU5hbWUgKyAiLmFscGhhQ3V0T2ZmID0gIiArIHRoaXMu
YWxwaGFDdXRPZmYgKyAiO1xyXG4iOworICAgICAgICByZXR1cm4gY29kZVN0cmluZzsKKyAgICB9
OworICAgIEFscGhhVGVzdEJsb2NrLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX3N1cGVyLnByb3RvdHlwZS5zZXJp
YWxpemUuY2FsbCh0aGlzKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hbHBoYUN1dE9m
ZiA9IHRoaXMuYWxwaGFDdXRPZmY7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0
OworICAgIH07CisgICAgQWxwaGFUZXN0QmxvY2sucHJvdG90eXBlLl9kZXNlcmlhbGl6ZSA9IGZ1
bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICBf
c3VwZXIucHJvdG90eXBlLl9kZXNlcmlhbGl6ZS5jYWxsKHRoaXMsIHNlcmlhbGl6YXRpb25PYmpl
Y3QsIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgdGhpcy5hbHBoYUN1dE9mZiA9IHNlcmlhbGl6
YXRpb25PYmplY3QuYWxwaGFDdXRPZmY7CisgICAgfTsKKyAgICByZXR1cm4gQWxwaGFUZXN0Qmxv
Y2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJO
b2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLkFscGhh
VGVzdEJsb2NrIl0gPSBBbHBoYVRlc3RCbG9jazsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWF0ZXJpYWxzL05vZGUvQmxvY2tzL0ZyYWdtZW50L2ZyYWdtZW50T3V0cHV0QmxvY2sudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvRnJhZ21lbnQvZnJh
Z21lbnRPdXRwdXRCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogRnJhZ21lbnRPdXRwdXRCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJGcmFnbWVudE91dHB1dEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGcmFnbWVudE91
dHB1dEJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4u
L25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVy
aWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL01pc2MvdHlw
ZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKworLyoqCisgKiBCbG9j
ayB1c2VkIHRvIG91dHB1dCB0aGUgZmluYWwgY29sb3IKKyAqLwordmFyIEZyYWdtZW50T3V0cHV0
QmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oRnJhZ21lbnRPdXRwdXRCbG9j
aywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgRnJhZ21lbnRPdXRwdXRC
bG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBGcmFnbWVudE91dHB1dEJsb2NrKG5hbWUpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5G
cmFnbWVudCwgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgicmdi
YSIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5D
b2xvcjQsIHRydWUpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJyZ2IiLCBfbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3IzLCB0cnVl
KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgiYSIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCwgdHJ1ZSk7CisgICAgICAgIHJl
dHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFz
cyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBGcmFn
bWVudE91dHB1dEJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiAiRnJhZ21lbnRPdXRwdXRCbG9jayI7CisgICAgfTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoRnJhZ21lbnRPdXRwdXRCbG9jay5wcm90b3R5cGUsICJyZ2JhIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgcmdiYSBpbnB1dCBjb21wb25lbnQKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2lucHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEZyYWdtZW50T3V0cHV0QmxvY2sucHJvdG90eXBlLCAicmdiIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyB0aGUgcmdiIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5w
dXRzWzFdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnJh
Z21lbnRPdXRwdXRCbG9jay5wcm90b3R5cGUsICJhIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgYSBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1syXTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgRnJhZ21lbnRPdXRwdXRCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxv
Y2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRC
bG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgdmFyIHJnYmEgPSB0aGlzLnJnYmE7Cisg
ICAgICAgIHZhciByZ2IgPSB0aGlzLnJnYjsKKyAgICAgICAgdmFyIGEgPSB0aGlzLmE7CisgICAg
ICAgIHN0YXRlLnNoYXJlZERhdGEuaGludHMubmVlZEFscGhhQmxlbmRpbmcgPSByZ2JhLmlzQ29u
bmVjdGVkIHx8IGEuaXNDb25uZWN0ZWQ7CisgICAgICAgIGlmIChyZ2JhLmNvbm5lY3RlZFBvaW50
KSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiZ2xfRnJhZ0NvbG9y
ID0gIiArIHJnYmEuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiI7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAocmdiLmNvbm5lY3RlZFBvaW50KSB7CisgICAgICAgICAgICBpZiAo
YS5jb25uZWN0ZWRQb2ludCkgeworICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3Ry
aW5nICs9ICJnbF9GcmFnQ29sb3IgPSB2ZWM0KCIgKyByZ2IuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICIsICIgKyBhLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiKTtcclxuIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0
aW9uU3RyaW5nICs9ICJnbF9GcmFnQ29sb3IgPSB2ZWM0KCIgKyByZ2IuYXNzb2NpYXRlZFZhcmlh
YmxlTmFtZSArICIsIDEuMCk7XHJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmNoZWNrcy5ub3RDb25uZWN0
ZWROb25PcHRpb25hbElucHV0cy5wdXNoKHJnYmEpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgcmV0dXJuIEZyYWdtZW50T3V0cHV0QmxvY2s7Cit9KF9ub2Rl
TWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxC
bG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLkZyYWdtZW50T3V0cHV0Qmxv
Y2siXSA9IEZyYWdtZW50T3V0cHV0QmxvY2s7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01h
dGVyaWFscy9Ob2RlL0Jsb2Nrcy9GcmFnbWVudC9pbWFnZVByb2Nlc3NpbmdCbG9jay50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvRnJhZ21lbnQvaW1h
Z2VQcm9jZXNzaW5nQmxvY2sudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBJbWFnZVByb2Nlc3NpbmdCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJJbWFnZVByb2Nlc3NpbmdCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSW1hZ2VQ
cm9jZXNzaW5nQmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vTWlz
Yy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisvKioKKyAq
IEJsb2NrIHVzZWQgdG8gYWRkIGltYWdlIHByb2Nlc3Npbmcgc3VwcG9ydCB0byBmcmFnbWVudCBz
aGFkZXIKKyAqLwordmFyIEltYWdlUHJvY2Vzc2luZ0Jsb2NrID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKEltYWdlUHJvY2Vzc2luZ0Jsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIENyZWF0ZSBhIG5ldyBJbWFnZVByb2Nlc3NpbmdCbG9jaworICAgICAqIEBwYXJhbSBuYW1l
IGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBJbWFnZVByb2Nl
c3NpbmdCbG9jayhuYW1lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMs
IG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uRnJhZ21lbnQpIHx8IHRoaXM7CisgICAg
ICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoImNvbG9yIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNCk7CisgICAgICAgIF90aGlzLnJlZ2lz
dGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzIl0uQ29sb3I0KTsKKyAgICAgICAgX3RoaXMuX2lucHV0c1swXS5hY2NlcHRl
ZENvbm5lY3Rpb25Qb2ludFR5cGVzLnB1c2goX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yMyk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAg
ICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICog
QHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBJbWFnZVByb2Nlc3NpbmdCbG9j
ay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
IkltYWdlUHJvY2Vzc2luZ0Jsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShJbWFnZVByb2Nlc3NpbmdCbG9jay5wcm90b3R5cGUsICJjb2xvciIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIGNvbG9yIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5w
dXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1h
Z2VQcm9jZXNzaW5nQmxvY2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZSB0aGUgYmxvY2sg
YW5kIHByZXBhcmUgdGhlIGNvbnRleHQgZm9yIGJ1aWxkCisgICAgICogQHBhcmFtIHN0YXRlIGRl
ZmluZXMgdGhlIHN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgYnVpbGQKKyAgICAgKi8K
KyAgICBJbWFnZVByb2Nlc3NpbmdCbG9jay5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9u
IChzdGF0ZSkgeworICAgICAgICBzdGF0ZS5fZXhjbHVkZVZhcmlhYmxlTmFtZSgiZXhwb3N1cmVM
aW5lYXIiKTsKKyAgICAgICAgc3RhdGUuX2V4Y2x1ZGVWYXJpYWJsZU5hbWUoImNvbnRyYXN0Iik7
CisgICAgICAgIHN0YXRlLl9leGNsdWRlVmFyaWFibGVOYW1lKCJ2SW52ZXJzZVNjcmVlblNpemUi
KTsKKyAgICAgICAgc3RhdGUuX2V4Y2x1ZGVWYXJpYWJsZU5hbWUoInZpZ25ldHRlU2V0dGluZ3Mx
Iik7CisgICAgICAgIHN0YXRlLl9leGNsdWRlVmFyaWFibGVOYW1lKCJ2aWduZXR0ZVNldHRpbmdz
MiIpOworICAgICAgICBzdGF0ZS5fZXhjbHVkZVZhcmlhYmxlTmFtZSgidkNhbWVyYUNvbG9yQ3Vy
dmVOZWdhdGl2ZSIpOworICAgICAgICBzdGF0ZS5fZXhjbHVkZVZhcmlhYmxlTmFtZSgidkNhbWVy
YUNvbG9yQ3VydmVOZXV0cmFsIik7CisgICAgICAgIHN0YXRlLl9leGNsdWRlVmFyaWFibGVOYW1l
KCJ2Q2FtZXJhQ29sb3JDdXJ2ZVBvc2l0aXZlIik7CisgICAgICAgIHN0YXRlLl9leGNsdWRlVmFy
aWFibGVOYW1lKCJ0eENvbG9yVHJhbnNmb3JtIik7CisgICAgICAgIHN0YXRlLl9leGNsdWRlVmFy
aWFibGVOYW1lKCJjb2xvclRyYW5zZm9ybVNldHRpbmdzIik7CisgICAgfTsKKyAgICBJbWFnZVBy
b2Nlc3NpbmdCbG9jay5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uIChtZXNoLCBub2RlTWF0
ZXJpYWwsIGRlZmluZXMpIHsKKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZUltYWdlUHJvY2Vzc2lu
Z0RpcnR5ICYmIG5vZGVNYXRlcmlhbC5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKSB7Cisg
ICAgICAgICAgICBpZiAoIW5vZGVNYXRlcmlhbC5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
LmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIEltYWdlUHJv
Y2Vzc2luZ0Jsb2NrLnByb3RvdHlwZS5wcmVwYXJlRGVmaW5lcyA9IGZ1bmN0aW9uIChtZXNoLCBu
b2RlTWF0ZXJpYWwsIGRlZmluZXMpIHsKKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZUltYWdlUHJv
Y2Vzc2luZ0RpcnR5ICYmIG5vZGVNYXRlcmlhbC5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
KSB7CisgICAgICAgICAgICBub2RlTWF0ZXJpYWwuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bi5wcmVwYXJlRGVmaW5lcyhkZWZpbmVzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgSW1hZ2VQ
cm9jZXNzaW5nQmxvY2sucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZWZmZWN0LCBub2RlTWF0
ZXJpYWwsIG1lc2gpIHsKKyAgICAgICAgaWYgKCFtZXNoKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFub2RlTWF0ZXJpYWwuaW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG5v
ZGVNYXRlcmlhbC5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmJpbmQoZWZmZWN0KTsKKyAg
ICB9OworICAgIEltYWdlUHJvY2Vzc2luZ0Jsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9jayA9IGZ1
bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJsb2NrLmNh
bGwodGhpcywgc3RhdGUpOworICAgICAgICAvLyBSZWdpc3RlciBmb3IgZGVmaW5lcworICAgICAg
ICBzdGF0ZS5zaGFyZWREYXRhLmJsb2Nrc1dpdGhEZWZpbmVzLnB1c2godGhpcyk7CisgICAgICAg
IC8vIFJlZ2lzdGVyIGZvciBibG9ja2luZworICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmJsb2Nr
aW5nQmxvY2tzLnB1c2godGhpcyk7CisgICAgICAgIC8vIFJlZ2lzdGVyIGZvciBiaW5kaW5nCisg
ICAgICAgIHN0YXRlLnNoYXJlZERhdGEuYmluZGFibGVCbG9ja3MucHVzaCh0aGlzKTsKKyAgICAg
ICAgLy8gVW5pZm9ybXMKKyAgICAgICAgc3RhdGUudW5pZm9ybXMucHVzaCgiZXhwb3N1cmVMaW5l
YXIiKTsKKyAgICAgICAgc3RhdGUudW5pZm9ybXMucHVzaCgiY29udHJhc3QiKTsKKyAgICAgICAg
c3RhdGUudW5pZm9ybXMucHVzaCgidkludmVyc2VTY3JlZW5TaXplIik7CisgICAgICAgIHN0YXRl
LnVuaWZvcm1zLnB1c2goInZpZ25ldHRlU2V0dGluZ3MxIik7CisgICAgICAgIHN0YXRlLnVuaWZv
cm1zLnB1c2goInZpZ25ldHRlU2V0dGluZ3MyIik7CisgICAgICAgIHN0YXRlLnVuaWZvcm1zLnB1
c2goInZDYW1lcmFDb2xvckN1cnZlTmVnYXRpdmUiKTsKKyAgICAgICAgc3RhdGUudW5pZm9ybXMu
cHVzaCgidkNhbWVyYUNvbG9yQ3VydmVOZXV0cmFsIik7CisgICAgICAgIHN0YXRlLnVuaWZvcm1z
LnB1c2goInZDYW1lcmFDb2xvckN1cnZlUG9zaXRpdmUiKTsKKyAgICAgICAgc3RhdGUudW5pZm9y
bXMucHVzaCgidHhDb2xvclRyYW5zZm9ybSIpOworICAgICAgICBzdGF0ZS51bmlmb3Jtcy5wdXNo
KCJjb2xvclRyYW5zZm9ybVNldHRpbmdzIik7CisgICAgICAgIC8vIEVtaXQgY29kZQorICAgICAg
ICB2YXIgY29sb3IgPSB0aGlzLmNvbG9yOworICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fb3V0
cHV0c1swXTsKKyAgICAgICAgdmFyIGNvbW1lbnRzID0gIi8vIiArIHRoaXMubmFtZTsKKyAgICAg
ICAgc3RhdGUuX2VtaXRGdW5jdGlvbkZyb21JbmNsdWRlKCJoZWxwZXJGdW5jdGlvbnMiLCBjb21t
ZW50cyk7CisgICAgICAgIHN0YXRlLl9lbWl0RnVuY3Rpb25Gcm9tSW5jbHVkZSgiaW1hZ2VQcm9j
ZXNzaW5nRGVjbGFyYXRpb24iLCBjb21tZW50cyk7CisgICAgICAgIHN0YXRlLl9lbWl0RnVuY3Rp
b25Gcm9tSW5jbHVkZSgiaW1hZ2VQcm9jZXNzaW5nRnVuY3Rpb25zIiwgY29tbWVudHMpOworICAg
ICAgICBpZiAoY29sb3IuY29ubmVjdGVkUG9pbnQudHlwZSA9PT0gX25vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNCkgeworICAgICAgICAgICAg
c3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0
YXRlKSArICIgPSAiICsgY29sb3IuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiI7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0
cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgIiA9IHZlYzQoIiAr
IGNvbG9yLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLCAxLjApO1xyXG4iOworICAgICAgICB9
CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjaWZkZWYgSU1BR0VQUk9DRVNT
SU5HUE9TVFBST0NFU1NcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0g
b3V0cHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLnJnYiA9IHRvTGluZWFyU3BhY2UoIiAr
IGNvbG9yLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLnJnYik7XHJcbiI7CisgICAgICAgIHN0
YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZWxzZVxyXG4iOworICAgICAgICBzdGF0ZS5jb21w
aWxhdGlvblN0cmluZyArPSAiI2lmZGVmIElNQUdFUFJPQ0VTU0lOR1xyXG4iOworICAgICAgICBz
dGF0ZS5jb21waWxhdGlvblN0cmluZyArPSBvdXRwdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSAr
ICIucmdiID0gdG9MaW5lYXJTcGFjZSgiICsgY29sb3IuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSAr
ICIucmdiKTtcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gb3V0cHV0
LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiID0gYXBwbHlJbWFnZVByb2Nlc3NpbmcoIiArIG91
dHB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIik7XHJcbiI7CisgICAgICAgIHN0YXRlLmNv
bXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gIiNlbmRpZlxyXG4iOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Owor
ICAgIHJldHVybiBJbWFnZVByb2Nlc3NpbmdCbG9jazsKK30oX25vZGVNYXRlcmlhbEJsb2NrX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2NrIl0pKTsKKworX01p
c2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIl9UeXBlU3RvcmUiXS5S
ZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uSW1hZ2VQcm9jZXNzaW5nQmxvY2siXSA9IEltYWdlUHJv
Y2Vzc2luZ0Jsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9C
bG9ja3MvRnJhZ21lbnQvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tz
L0ZyYWdtZW50L2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRnJhZ21lbnRPdXRw
dXRCbG9jaywgQWxwaGFUZXN0QmxvY2ssIEltYWdlUHJvY2Vzc2luZ0Jsb2NrLCBQZXJ0dXJiTm9y
bWFsQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9m
cmFnbWVudE91dHB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2ZyYWdtZW50T3V0cHV0QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05v
ZGUvQmxvY2tzL0ZyYWdtZW50L2ZyYWdtZW50T3V0cHV0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRnJhZ21lbnRPdXRwdXRCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZyYWdtZW50
T3V0cHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRnJhZ21lbnRPdXRwdXRC
bG9jayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hbHBoYVRlc3RCbG9ja19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9h
bHBoYVRlc3RCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvRnJhZ21lbnQvYWxwaGFU
ZXN0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWxwaGFUZXN0QmxvY2siLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9hbHBoYVRlc3RCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJBbHBoYVRlc3RCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pbWFn
ZVByb2Nlc3NpbmdCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9pbWFnZVByb2Nlc3NpbmdCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9k
ZS9CbG9ja3MvRnJhZ21lbnQvaW1hZ2VQcm9jZXNzaW5nQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiSW1hZ2VQcm9jZXNzaW5nQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbWFnZVBy
b2Nlc3NpbmdCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbWFnZVByb2Nlc3Np
bmdCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wZXJ0dXJiTm9ybWFs
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vcGVydHVyYk5vcm1hbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9GcmFn
bWVudC9wZXJ0dXJiTm9ybWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGVydHVyYk5v
cm1hbEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGVydHVyYk5vcm1hbEJsb2NrX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBlcnR1cmJOb3JtYWxCbG9jayJdOyB9KTsKKworCisK
KworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9GcmFn
bWVudC9wZXJ0dXJiTm9ybWFsQmxvY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVy
aWFscy9Ob2RlL0Jsb2Nrcy9GcmFnbWVudC9wZXJ0dXJiTm9ybWFsQmxvY2sudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUGVydHVyYk5vcm1hbEJsb2NrICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBlcnR1cmJOb3JtYWxCbG9jayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gUGVydHVyYk5vcm1hbEJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVN
YXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBl
U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0lucHV0L2lucHV0
QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL0lucHV0L2lucHV0QmxvY2sudHMiKTsK
KworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBwZXJ0dWIgbm9ybWFscyBiYXNlZCBv
biBhIG5vcm1hbCBtYXAKKyAqLwordmFyIFBlcnR1cmJOb3JtYWxCbG9jayA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2V4dGVuZHMiXShQZXJ0dXJiTm9ybWFsQmxvY2ssIF9zdXBlcik7CisgICAgLyoq
CisgICAgICogQ3JlYXRlIGEgbmV3IFBlcnR1cmJOb3JtYWxCbG9jaworICAgICAqIEBwYXJhbSBu
YW1lIGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQZXJ0dXJi
Tm9ybWFsQmxvY2sobmFtZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlz
LCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLk5ldXRyYWwpIHx8IHRoaXM7CisgICAg
ICAgIC8vIFZlcnRleAorICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ3b3JsZFBvc2l0aW9u
IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZl
Y3RvcjQsIGZhbHNlKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgid29ybGROb3JtYWwi
LCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVj
dG9yNCwgZmFsc2UpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ1diIsIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IyLCBmYWxz
ZSk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoIm5vcm1hbE1hcENvbG9yIiwgX25vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yMywgZmFs
c2UpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJzdHJlbmd0aCIsIF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCwgZmFsc2UpOwor
ICAgICAgICAvLyBGcmFnbWVudAorICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgib3V0cHV0
IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZl
Y3RvcjQpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdl
dHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1l
CisgICAgICovCisgICAgUGVydHVyYk5vcm1hbEJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiUGVydHVyYk5vcm1hbEJsb2NrIjsKKyAg
ICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQZXJ0dXJiTm9ybWFsQmxvY2sucHJvdG90
eXBlLCAid29ybGRQb3NpdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhl
IHdvcmxkIHBvc2l0aW9uIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGVydHVyYk5vcm1hbEJs
b2NrLnByb3RvdHlwZSwgIndvcmxkTm9ybWFsIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgd29ybGQgbm9ybWFsIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzFd
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGVydHVyYk5v
cm1hbEJsb2NrLnByb3RvdHlwZSwgInV2IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgdXYgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMl07CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQZXJ0dXJiTm9ybWFsQmxvY2sucHJv
dG90eXBlLCAibm9ybWFsTWFwQ29sb3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMg
dGhlIG5vcm1hbCBtYXAgY29sb3IgaW5wdXQgY29tcG9uZW50CisgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1szXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBlcnR1cmJOb3Jt
YWxCbG9jay5wcm90b3R5cGUsICJzdHJlbmd0aCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICog
R2V0cyB0aGUgc3RyZW5ndGggaW5wdXQgY29tcG9uZW50CisgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1s0XTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBlcnR1cmJOb3JtYWxC
bG9jay5wcm90b3R5cGUsICJvdXRwdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSBvdXRwdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBQZXJ0dXJiTm9ybWFsQmxvY2sucHJvdG90eXBlLnByZXBhcmVEZWZpbmVzID0g
ZnVuY3Rpb24gKG1lc2gsIG5vZGVNYXRlcmlhbCwgZGVmaW5lcykgeworICAgICAgICBkZWZpbmVz
LnNldFZhbHVlKCJCVU1QIiwgdHJ1ZSk7CisgICAgfTsKKyAgICBQZXJ0dXJiTm9ybWFsQmxvY2su
cHJvdG90eXBlLmF1dG9Db25maWd1cmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwpIHsKKyAgICAgICAg
aWYgKCF0aGlzLnV2LmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgdXZJbnB1dCA9IG1h
dGVyaWFsLmdldElucHV0QmxvY2tCeVByZWRpY2F0ZShmdW5jdGlvbiAoYikgeyByZXR1cm4gYi5p
c0F0dHJpYnV0ZSAmJiBiLm5hbWUgPT09ICJ1diI7IH0pOworICAgICAgICAgICAgaWYgKCF1dklu
cHV0KSB7CisgICAgICAgICAgICAgICAgdXZJbnB1dCA9IG5ldyBfSW5wdXRfaW5wdXRCbG9ja19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJJbnB1dEJsb2NrIl0oInV2Iik7CisgICAgICAg
ICAgICAgICAgdXZJbnB1dC5zZXRBc0F0dHJpYnV0ZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdXZJbnB1dC5vdXRwdXQuY29ubmVjdFRvKHRoaXMudXYpOworICAgICAgICB9CisgICAg
ICAgIGlmICghdGhpcy5zdHJlbmd0aC5pc0Nvbm5lY3RlZCkgeworICAgICAgICAgICAgdmFyIHN0
cmVuZ3RoSW5wdXQgPSBuZXcgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siSW5wdXRCbG9jayJdKCJzdHJlbmd0aCIpOworICAgICAgICAgICAgc3RyZW5ndGhJ
bnB1dC52YWx1ZSA9IDEuMDsKKyAgICAgICAgICAgIHN0cmVuZ3RoSW5wdXQub3V0cHV0LmNvbm5l
Y3RUbyh0aGlzLnN0cmVuZ3RoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgUGVydHVyYk5vcm1h
bEJsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9jayA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJsb2NrLmNhbGwodGhpcywgc3RhdGUpOworICAgICAg
ICB2YXIgY29tbWVudHMgPSAiLy8iICsgdGhpcy5uYW1lOworICAgICAgICB2YXIgdXYgPSB0aGlz
LnV2OworICAgICAgICB2YXIgd29ybGRQb3NpdGlvbiA9IHRoaXMud29ybGRQb3NpdGlvbjsKKyAg
ICAgICAgdmFyIHdvcmxkTm9ybWFsID0gdGhpcy53b3JsZE5vcm1hbDsKKyAgICAgICAgc3RhdGUu
c2hhcmVkRGF0YS5ibG9ja3NXaXRoRGVmaW5lcy5wdXNoKHRoaXMpOworICAgICAgICBzdGF0ZS5f
ZW1pdEV4dGVuc2lvbigiYnVtcCIsICIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyA6IGVuYWJsZSIpOworICAgICAgICBzdGF0ZS5fZW1pdEZ1bmN0aW9uRnJvbUluY2x1ZGUo
ImJ1bXBGcmFnbWVudEZ1bmN0aW9ucyIsIGNvbW1lbnRzLCB7CisgICAgICAgICAgICByZXBsYWNl
U3RyaW5nczogWworICAgICAgICAgICAgICAgIHsgc2VhcmNoOiAvdkJ1bXBJbmZvcy55L2csIHJl
cGxhY2U6ICIxLjAgLyAiICsgdGhpcy5zdHJlbmd0aC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lIH0s
CisgICAgICAgICAgICAgICAgeyBzZWFyY2g6IC92VGFuZ2VudFNwYWNlUGFyYW1zL2csIHJlcGxh
Y2U6ICJ2ZWMyKDEuMCwgMS4wKSIgfSwKKyAgICAgICAgICAgICAgICB7IHNlYXJjaDogL3ZQb3Np
dGlvblcvZywgcmVwbGFjZTogd29ybGRQb3NpdGlvbi5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsg
Ii54eXoiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSk7CisgICAgICAgIHN0YXRlLmNvbXBp
bGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQodGhpcy5vdXRwdXQsIHN0YXRlKSAr
ICIgPSB2ZWM0KDAuKTtcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0g
c3RhdGUuX2VtaXRDb2RlRnJvbUluY2x1ZGUoImJ1bXBGcmFnbWVudCIsIGNvbW1lbnRzLCB7Cisg
ICAgICAgICAgICByZXBsYWNlU3RyaW5nczogWworICAgICAgICAgICAgICAgIHsgc2VhcmNoOiAv
cGVydHVyYk5vcm1hbFwoVEJOLHZCdW1wVVZcK3V2T2Zmc2V0XCkvZywgcmVwbGFjZTogInBlcnR1
cmJOb3JtYWwoVEJOLCAiICsgdGhpcy5ub3JtYWxNYXBDb2xvci5hc3NvY2lhdGVkVmFyaWFibGVO
YW1lICsgIikiIH0sCisgICAgICAgICAgICAgICAgeyBzZWFyY2g6IC92QnVtcEluZm9zLnkvZywg
cmVwbGFjZTogIjEuMCAvICIgKyB0aGlzLnN0cmVuZ3RoLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUg
fSwKKyAgICAgICAgICAgICAgICB7IHNlYXJjaDogL3ZCdW1wVVYvZywgcmVwbGFjZTogdXYuYXNz
b2NpYXRlZFZhcmlhYmxlTmFtZSB9LAorICAgICAgICAgICAgICAgIHsgc2VhcmNoOiAvdlBvc2l0
aW9uVy9nLCByZXBsYWNlOiB3b3JsZFBvc2l0aW9uLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAi
Lnh5eiIgfSwKKyAgICAgICAgICAgICAgICB7IHNlYXJjaDogL25vcm1hbFc9L2csIHJlcGxhY2U6
IHRoaXMub3V0cHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLnh5eiA9ICIgfSwKKyAgICAg
ICAgICAgICAgICB7IHNlYXJjaDogL25vcm1hbFcvZywgcmVwbGFjZTogd29ybGROb3JtYWwuYXNz
b2NpYXRlZFZhcmlhYmxlTmFtZSArICIueHl6IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBQZXJ0dXJiTm9ybWFs
QmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLlBl
cnR1cmJOb3JtYWxCbG9jayJdID0gUGVydHVyYk5vcm1hbEJsb2NrOworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvSW5wdXQvYW5pbWF0ZWRJbnB1dEJsb2Nr
VHlwZXMudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tz
L0lucHV0L2FuaW1hdGVkSW5wdXRCbG9ja1R5cGVzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzOyB9KTsKKy8qKgorICogRW51bSBk
ZWZpbmluZyB0aGUgdHlwZSBvZiBhbmltYXRpb25zIHN1cHBvcnRlZCBieSBJbnB1dEJsb2NrCisg
Ki8KK3ZhciBBbmltYXRlZElucHV0QmxvY2tUeXBlczsKKyhmdW5jdGlvbiAoQW5pbWF0ZWRJbnB1
dEJsb2NrVHlwZXMpIHsKKyAgICAvKiogTm8gYW5pbWF0aW9uICovCisgICAgQW5pbWF0ZWRJbnB1
dEJsb2NrVHlwZXNbQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXNbIk5vbmUiXSA9IDBdID0gIk5vbmUi
OworICAgIC8qKiBUaW1lIGJhc2VkIGFuaW1hdGlvbi4gV2lsbCBvbmx5IHdvcmsgZm9yIGZsb2F0
cyAqLworICAgIEFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzW0FuaW1hdGVkSW5wdXRCbG9ja1R5cGVz
WyJUaW1lIl0gPSAxXSA9ICJUaW1lIjsKK30pKEFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzIHx8IChB
bmltYXRlZElucHV0QmxvY2tUeXBlcyA9IHt9KSk7CisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9JbnB1dC9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMv
Tm9kZS9CbG9ja3MvSW5wdXQvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBJbnB1dEJs
b2NrLCBBbmltYXRlZElucHV0QmxvY2tUeXBlcyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaW5wdXRCbG9jayAqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9CbG9ja3MvSW5wdXQvaW5wdXRCbG9jay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbnB1
dEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJJbnB1dEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2FuaW1hdGVkSW5wdXRCbG9ja1R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FuaW1hdGVkSW5wdXRCbG9ja1R5cGVzICovICIu
L01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9JbnB1dC9hbmltYXRlZElucHV0QmxvY2tUeXBlcy50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJBbmltYXRlZElucHV0QmxvY2tUeXBlcyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2FuaW1hdGVkSW5wdXRCbG9ja1R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzIl07IH0pOworCisKKworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvSW5wdXQvaW5wdXRCbG9jay50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9JbnB1dC9pbnB1dEJsb2NrLnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBJbnB1dEJsb2NrICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIklucHV0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIElucHV0
QmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9k
ZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4vTWF0ZXJpYWxz
L05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X05vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRNb2RlICovICIuL01hdGVyaWFscy9Ob2RlL05vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50TW9kZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9u
b2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyAqLyAi
Li9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL01hdGhzL21hdGgu
dmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vTWlzYy90
eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vTWF0aHMvbWF0aCAqLyAiLi9NYXRocy9tYXRoLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FuaW1hdGVkSW5wdXRCbG9ja1R5cGVzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Fu
aW1hdGVkSW5wdXRCbG9ja1R5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9JbnB1dC9h
bmltYXRlZElucHV0QmxvY2tUeXBlcy50cyIpOworCisKKworCisKKworCisKKworCisvKioKKyAq
IEJsb2NrIHVzZWQgdG8gZXhwb3NlIGFuIGlucHV0IHZhbHVlCisgKi8KK3ZhciBJbnB1dEJsb2Nr
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKElucHV0QmxvY2ssIF9zdXBlcik7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBJbnB1dEJsb2NrCisgICAgICogQHBhcmFtIG5h
bWUgZGVmaW5lcyB0aGUgYmxvY2sgbmFtZQorICAgICAqIEBwYXJhbSB0YXJnZXQgZGVmaW5lcyB0
aGUgdGFyZ2V0IG9mIHRoYXQgYmxvY2sgKFZlcnRleCBieSBkZWZhdWx0KQorICAgICAqIEBwYXJh
bSB0eXBlIGRlZmluZXMgdGhlIHR5cGUgb2YgdGhlIGlucHV0IChjYW4gYmUgc2V0IHRvIE5vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMuQXV0b0RldGVjdCkKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBJbnB1dEJsb2NrKG5hbWUsIHRhcmdldCwgdHlwZSkgeworICAgICAgICBpZiAo
dGFyZ2V0ID09PSB2b2lkIDApIHsgdGFyZ2V0ID0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5W
ZXJ0ZXg7IH0KKyAgICAgICAgaWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0eXBlID0gX25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRlY3Q7IH0K
KyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgdGFyZ2V0LCBmYWxz
ZSwgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuX21vZGUgPSBfTm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSJdLlVuZGVmaW5lZDsKKyAgICAgICAgX3Ro
aXMuX2FuaW1hdGlvblR5cGUgPSBfYW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMiXS5Ob25lOworICAgICAg
ICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhpcy5fc3lzdGVtVmFsdWUgPSBudWxsOworICAg
ICAgICAvKiogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBpbnB1
dCBjYW4gYmUgZWRpdGVkIGluIHRoZSBJbnNwZWN0b3IgKGZhbHNlIGJ5IGRlZmF1bHQpICovCisg
ICAgICAgIF90aGlzLnZpc2libGVJbkluc3BlY3RvciA9IGZhbHNlOworICAgICAgICBfdGhpcy5f
dHlwZSA9IHR5cGU7CisgICAgICAgIF90aGlzLnNldERlZmF1bHRWYWx1ZSgpOworICAgICAgICBf
dGhpcy5yZWdpc3Rlck91dHB1dCgib3V0cHV0IiwgdHlwZSk7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KElucHV0QmxvY2sucHJvdG90eXBl
LCAidHlwZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY29u
bmVjdGlvbiBwb2ludCB0eXBlIChkZWZhdWx0IGlzIGZsb2F0KQorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRl
Y3QpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1VuaWZvcm0gJiYgdGhpcy52YWx1ZSAh
PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4odGhpcy52YWx1ZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBfbm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudmFsdWUuZ2V0Q2xhc3NOYW1lKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgIlZlY3RvcjIiOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX3R5cGUgPSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzIl0uVmVjdG9yMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIlZlY3RvcjMiOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBfbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yMzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgIlZlY3RvcjQiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5
cGUgPSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0u
VmVjdG9yNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIkNvbG9yMyI6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50VHlwZXMiXS5Db2xvcjM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJDb2xvcjQi
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBfbm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJO
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3I0OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQXR0cmli
dXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5uYW1lKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICJwb3NpdGlvbiI6CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICJub3JtYWwiOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidGFuZ2VudCI6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IF9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IzOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlOworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAidXYiOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidXYyIjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90eXBlID0gX25vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICJtYXRyaWNlc0luZGljZXMiOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAi
bWF0cmljZXNXZWlnaHRzIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIndvcmxkMCI6
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ3b3JsZDEiOgorICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAid29ybGQyIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIndv
cmxkMyI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAiY29sb3IiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3R5cGUgPSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzIl0uQ29sb3I0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90
eXBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICh0aGlzLmlzU3lzdGVtVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dp
dGNoICh0aGlzLl9zeXN0ZW1WYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBf
bm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5v
ZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkOgorICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkVmlldzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5Xb3JsZFZpZXdQcm9qZWN0
aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFs
dWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVl
cyJdLlZpZXc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxTeXN0
ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsU3lzdGVt
VmFsdWVzIl0uVmlld1Byb2plY3Rpb246CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9u
b2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9k
ZU1hdGVyaWFsU3lzdGVtVmFsdWVzIl0uUHJvamVjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLl90eXBlID0gX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcyJdLk1hdHJpeDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlh
bFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxT
eXN0ZW1WYWx1ZXMiXS5DYW1lcmFQb3NpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLl90eXBlID0gX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlcyJdLlZlY3RvcjM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxTeXN0
ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsU3lzdGVt
VmFsdWVzIl0uRm9nQ29sb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlw
ZSA9IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5D
b2xvcjM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KElucHV0QmxvY2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
b3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogU2V0IHRoZSBz
b3VyY2Ugb2YgdGhpcyBjb25uZWN0aW9uIHBvaW50IHRvIGEgdmVydGV4IGF0dHJpYnV0ZQorICAg
ICAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lIGRlZmluZXMgdGhlIGF0dHJpYnV0ZSBuYW1lIChwb3Np
dGlvbiwgdXYsIG5vcm1hbCwgZXRjLi4uKS4gSWYgbm90IHNwZWNpZmllZCBpdCB3aWxsIHRha2Ug
dGhlIGNvbm5lY3Rpb24gcG9pbnQgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IGNv
bm5lY3Rpb24gcG9pbnQKKyAgICAgKi8KKyAgICBJbnB1dEJsb2NrLnByb3RvdHlwZS5zZXRBc0F0
dHJpYnV0ZSA9IGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7CisgICAgICAgIGlmIChhdHRyaWJ1
dGVOYW1lKSB7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVOYW1lOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX21vZGUgPSBfTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50TW9kZSJdLkF0dHJpYnV0ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHNvdXJjZSBvZiB0aGlzIGNvbm5lY3Rpb24gcG9p
bnQgdG8gYSBzeXN0ZW0gdmFsdWUKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5lIHRoZSBzeXN0
ZW0gdmFsdWUgdG8gdXNlICh3b3JsZCwgdmlldywgZXRjLi4uKSBvciBudWxsIHRvIHN3aXRjaCB0
byBtYW51YWwgdmFsdWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBjb25uZWN0aW9uIHBv
aW50CisgICAgICovCisgICAgSW5wdXRCbG9jay5wcm90b3R5cGUuc2V0QXNTeXN0ZW1WYWx1ZSA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB0aGlzLnN5c3RlbVZhbHVlID0gdmFsdWU7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KElu
cHV0QmxvY2sucHJvdG90eXBlLCAidmFsdWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIG9yIHNldHMgdGhlIHZhbHVlIG9mIHRoYXQgcG9pbnQuCisgICAgICAgICAqIFBsZWFzZSBu
b3RlIHRoYXQgdGhpcyB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQgaWYgdmFsdWVDYWxsYmFjayBpcyBk
ZWZpbmVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9zdG9yZWRWYWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3N0b3JlZFZhbHVlID0gdmFsdWU7
CisgICAgICAgICAgICB0aGlzLl9tb2RlID0gX05vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50TW9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludE1vZGUiXS5Vbmlmb3JtOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoSW5wdXRCbG9jay5wcm90b3R5cGUsICJ2YWx1ZUNhbGxiYWNrIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgY2FsbGJhY2sgdXNlZCB0
byBnZXQgdGhlIHZhbHVlIG9mIHRoYXQgcG9pbnQuCisgICAgICAgICAqIFBsZWFzZSBub3RlIHRo
YXQgc2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgZm9yY2UgdGhlIGNvbm5lY3Rpb24gcG9pbnQgdG8g
aWdub3JlIHRoZSB2YWx1ZSBwcm9wZXJ0eQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVDYWxsYmFjazsKKyAgICAg
ICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMu
X3ZhbHVlQ2FsbGJhY2sgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX21vZGUgPSBfTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSJdLlVuaWZvcm07CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnB1dEJsb2NrLnByb3Rv
dHlwZSwgImFzc29jaWF0ZWRWYXJpYWJsZU5hbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIG9yIHNldHMgdGhlIGFzc29jaWF0ZWQgdmFyaWFibGUgbmFtZSBpbiB0aGUgc2hhZGVy
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9hc3NvY2lhdGVkVmFyaWFibGVOYW1lOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYXNzb2NpYXRlZFZhcmlh
YmxlTmFtZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoSW5wdXRCbG9jay5wcm90b3R5cGUsICJhbmltYXRpb25UeXBlIiwgeworICAgICAgICAv
KiogR2V0cyBvciBzZXRzIHRoZSB0eXBlIG9mIGFuaW1hdGlvbiBhcHBsaWVkIHRvIHRoZSBpbnB1
dCAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9hbmltYXRpb25UeXBlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uVHlwZSA9IHZhbHVlOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5wdXRCbG9jay5wcm90b3R5cGUs
ICJpc1VuZGVmaW5lZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFu
IGluZGljYXRpbmcgdGhhdCB0aGlzIGNvbm5lY3Rpb24gcG9pbnQgbm90IGRlZmluZWQgeWV0Cisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9tb2RlID09PSBfTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50TW9kZSJdLlVuZGVmaW5lZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KElucHV0QmxvY2sucHJvdG90eXBlLCAiaXNVbmlmb3JtIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhp
cyBjb25uZWN0aW9uIHBvaW50IGlzIGNvbWluZyBmcm9tIGFuIHVuaWZvcm0uCisgICAgICAgICAq
IEluIHRoaXMgY2FzZSB0aGUgY29ubmVjdGlvbiBwb2ludCBuYW1lIG11c3QgYmUgdGhlIG5hbWUg
b2YgdGhlIHVuaWZvcm0gdG8gdXNlLgorICAgICAgICAgKiBDYW4gb25seSBiZSBzZXQgb24gaW5w
dXRzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9tb2RlID09PSBfTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRN
b2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50TW9kZSJdLlVuaWZvcm07CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9tb2RlID0gdmFsdWUgPyBfTm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSJdLlVuaWZvcm0gOiBfTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSJdLlVuZGVmaW5lZDsKKyAg
ICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSA9ICIiOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5wdXRCbG9jay5wcm90b3R5cGUsICJp
c0F0dHJpYnV0ZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJv
b2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoaXMgY29ubmVjdGlvbiBwb2ludCBpcyBjb21pbmcgZnJv
bSBhbiBhdHRyaWJ1dGUuCisgICAgICAgICAqIEluIHRoaXMgY2FzZSB0aGUgY29ubmVjdGlvbiBw
b2ludCBuYW1lIG11c3QgYmUgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byB1c2UKKyAgICAg
ICAgICogQ2FuIG9ubHkgYmUgc2V0IG9uIGlucHV0cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kZSA9PT0gX05vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludE1vZGUiXS5BdHRyaWJ1dGU7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0
aGlzLl9tb2RlID0gdmFsdWUgPyBfTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2Rl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50TW9kZSJdLkF0dHJpYnV0ZSA6IF9Ob2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dE1vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRNb2RlIl0uVW5kZWZpbmVkOworICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVk
VmFyaWFibGVOYW1lID0gIiI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShJbnB1dEJsb2NrLnByb3RvdHlwZSwgImlzVmFyeWluZyIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoaXMg
Y29ubmVjdGlvbiBwb2ludCBpcyBnZW5lcmF0aW5nIGEgdmFyeWluZyB2YXJpYWJsZS4KKyAgICAg
ICAgICogQ2FuIG9ubHkgYmUgc2V0IG9uIGV4aXQgcG9pbnRzCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RlID09PSBf
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSJdLlZhcnlpbmc7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLl9tb2RlID0gdmFsdWUgPyBfTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRN
b2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50TW9kZSJdLlZhcnlpbmcgOiBfTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50TW9kZSJdLlVuZGVmaW5lZDsKKyAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRl
ZFZhcmlhYmxlTmFtZSA9ICIiOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoSW5wdXRCbG9jay5wcm90b3R5cGUsICJpc1N5c3RlbVZhbHVlIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBjdXJy
ZW50IGNvbm5lY3Rpb24gcG9pbnQgaXMgYSBzeXN0ZW0gdmFsdWUKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N5c3RlbVZh
bHVlICE9IG51bGw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShJbnB1dEJsb2NrLnByb3RvdHlwZSwgInN5c3RlbVZhbHVlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBjdXJyZW50IHdlbGwga25vd24gdmFsdWUgb3IgbnVs
bCBpZiBub3QgZGVmaW5lZCBhcyBhIHN5c3RlbSB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3lzdGVtVmFsdWU7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLl9tb2RlID0gX05vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dE1vZGUiXS5Vbmlmb3JtOworICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVmFyaWFibGVOYW1l
ID0gIiI7CisgICAgICAgICAgICB0aGlzLl9zeXN0ZW1WYWx1ZSA9IHZhbHVlOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5hbWUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIElucHV0QmxvY2sucHJv
dG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJJbnB1
dEJsb2NrIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFuaW1hdGUgdGhlIGlucHV0IGlmIGFu
aW1hdGlvblR5cGUgIT09IE5vbmUKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgcmVu
ZGVyaW5nIHNjZW5lCisgICAgICovCisgICAgSW5wdXRCbG9jay5wcm90b3R5cGUuYW5pbWF0ZSA9
IGZ1bmN0aW9uIChzY2VuZSkgeworICAgICAgICBzd2l0Y2ggKHRoaXMuX2FuaW1hdGlvblR5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgX2FuaW1hdGVkSW5wdXRCbG9ja1R5cGVzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIkFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzIl0uVGltZTogeworICAg
ICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCkgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLnZhbHVlICs9IHNjZW5lLmdldEFuaW1hdGlvblJhdGlvKCkgKiAwLjAxOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgSW5wdXRCbG9jay5wcm90b3R5cGUuX2VtaXREZWZpbmUgPSBmdW5jdGlv
biAoZGVmaW5lKSB7CisgICAgICAgIGlmIChkZWZpbmVbMF0gPT09ICIhIikgeworICAgICAgICAg
ICAgcmV0dXJuICIjaWZuZGVmICIgKyBkZWZpbmUuc3Vic3RyaW5nKDEpICsgIlxyXG4iOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiAiI2lmZGVmICIgKyBkZWZpbmUgKyAiXHJcbiI7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGlucHV0IGJsb2NrIHRvIGl0cyBkZWZhdWx0IHZh
bHVlIChiYXNlZCBvbiBpdHMgdHlwZSkKKyAgICAgKi8KKyAgICBJbnB1dEJsb2NrLnByb3RvdHlw
ZS5zZXREZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHN3aXRjaCAodGhpcy50
eXBlKSB7CisgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdDoKKyAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0g
MDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjI6CisgICAgICAg
ICAgICAgICAgdGhpcy52YWx1ZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJWZWN0b3IyIl0uWmVybygpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzIl0uVmVjdG9yMzoKKyAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0OgorICAgICAg
ICAgICAgICAgIHRoaXMudmFsdWUgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siVmVjdG9yNCJdLlplcm8oKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlcyJdLkNvbG9yMzoKKyAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gX01hdGhz
X21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29sb3IzIl0uV2hpdGUoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNDoKKyAgICAgICAgICAgICAg
ICB0aGlzLnZhbHVlID0gbmV3IF9NYXRoc19tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIkNvbG9yNCJdKDEsIDEsIDEsIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzIl0uTWF0cml4OgorICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH07CisgICAgSW5wdXRCbG9j
ay5wcm90b3R5cGUuX2R1bXBQcm9wZXJ0aWVzQ29kZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKHRoaXMuaXNBdHRyaWJ1dGUpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb2RlVmFy
aWFibGVOYW1lICsgIi5zZXRBc0F0dHJpYnV0ZShcIiIgKyB0aGlzLm5hbWUgKyAiXCIpO1xyXG4i
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmlzU3lzdGVtVmFsdWUpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9jb2RlVmFyaWFibGVOYW1lICsgIi5zZXRBc1N5c3RlbVZhbHVlKEJB
QllMT04uTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzLiIgKyBfbm9kZU1hdGVyaWFsU3lzdGVtVmFs
dWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVl
cyJdW3RoaXMuX3N5c3RlbVZhbHVlXSArICIpO1xyXG4iOworICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLmlzVW5pZm9ybSkgeworICAgICAgICAgICAgdmFyIHZhbHVlU3RyaW5nID0gIiI7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0Ogor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yMjoKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSAibmV3IEJBQllMT04uVmVjdG9yMigiICsg
dGhpcy52YWx1ZS54ICsgIiwgIiArIHRoaXMudmFsdWUueSArICIpIjsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yMzoKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWVTdHJpbmcgPSAibmV3IEJBQllMT04uVmVjdG9yMygiICsgdGhpcy52YWx1ZS54ICsg
IiwgIiArIHRoaXMudmFsdWUueSArICIsICIgKyB0aGlzLnZhbHVlLnogKyAiKSI7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQ6CisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlU3RyaW5nID0gIm5ldyBCQUJZTE9OLlZlY3RvcjQoIiArIHRoaXMudmFs
dWUueCArICIsICIgKyB0aGlzLnZhbHVlLnkgKyAiLCAiICsgdGhpcy52YWx1ZS56ICsgIiwgIiAr
IHRoaXMudmFsdWUudyArICIpIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzIl0uQ29sb3IzOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9ICJuZXcg
QkFCWUxPTi5Db2xvcjMoIiArIHRoaXMudmFsdWUuciArICIsICIgKyB0aGlzLnZhbHVlLmcgKyAi
LCAiICsgdGhpcy52YWx1ZS5iICsgIikiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXMiXS5Db2xvcjQ6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0g
Im5ldyBCQUJZTE9OLkNvbG9yNCgiICsgdGhpcy52YWx1ZS5yICsgIiwgIiArIHRoaXMudmFsdWUu
ZyArICIsICIgKyB0aGlzLnZhbHVlLmIgKyAiLCAiICsgdGhpcy52YWx1ZS5hICsgIikiOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9jb2RlVmFyaWFibGVOYW1lICsgIi52YWx1ZSA9ICIgKyB2YWx1ZVN0cmluZyArICI7
XHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIiOworICAgIH07CisgICAgSW5wdXRC
bG9jay5wcm90b3R5cGUuX2VtaXQgPSBmdW5jdGlvbiAoc3RhdGUsIGRlZmluZSkgeworICAgICAg
ICAvLyBVbmlmb3JtcworICAgICAgICBpZiAodGhpcy5pc1VuaWZvcm0pIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy5hc3NvY2lhdGVkVmFyaWFibGVOYW1lKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5hc3NvY2lhdGVkVmFyaWFibGVOYW1lID0gc3RhdGUuX2dldEZyZWVWYXJpYWJsZU5hbWUoInVf
IiArIHRoaXMubmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RhdGUudW5p
Zm9ybXMuaW5kZXhPZih0aGlzLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUpICE9PSAtMSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLnVu
aWZvcm1zLnB1c2godGhpcy5hc3NvY2lhdGVkVmFyaWFibGVOYW1lKTsKKyAgICAgICAgICAgIGlm
IChkZWZpbmUpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5fdW5pZm9ybURlY2xhcmF0aW9uICs9
IHRoaXMuX2VtaXREZWZpbmUoZGVmaW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0
YXRlLl91bmlmb3JtRGVjbGFyYXRpb24gKz0gInVuaWZvcm0gIiArIHN0YXRlLl9nZXRHTFR5cGUo
dGhpcy50eXBlKSArICIgIiArIHRoaXMuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiI7
CisgICAgICAgICAgICBpZiAoZGVmaW5lKSB7CisgICAgICAgICAgICAgICAgc3RhdGUuX3VuaWZv
cm1EZWNsYXJhdGlvbiArPSAiI2VuZGlmXHJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyB3ZWxsIGtub3duCisgICAgICAgICAgICB2YXIgaGludHMgPSBzdGF0ZS5zaGFyZWREYXRh
LmhpbnRzOworICAgICAgICAgICAgaWYgKHRoaXMuX3N5c3RlbVZhbHVlICE9PSBudWxsICYmIHRo
aXMuX3N5c3RlbVZhbHVlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KHRoaXMuX3N5c3RlbVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgX25vZGVNYXRl
cmlhbFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJp
YWxTeXN0ZW1WYWx1ZXMiXS5Xb3JsZFZpZXc6CisgICAgICAgICAgICAgICAgICAgICAgICBoaW50
cy5uZWVkV29ybGRWaWV3TWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIl0u
V29ybGRWaWV3UHJvamVjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLm5lZWRX
b3JsZFZpZXdQcm9qZWN0aW9uTWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hbmltYXRpb25UeXBlICE9PSBfYW5pbWF0
ZWRJbnB1dEJsb2NrVHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQW5pbWF0ZWRJ
bnB1dEJsb2NrVHlwZXMiXS5Ob25lKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNoYXJl
ZERhdGEuYW5pbWF0ZWRJbnB1dHMucHVzaCh0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gQXR0
cmlidXRlCisgICAgICAgIGlmICh0aGlzLmlzQXR0cmlidXRlKSB7CisgICAgICAgICAgICB0aGlz
LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgPSB0aGlzLm5hbWU7CisgICAgICAgICAgICBpZiAodGhp
cy50YXJnZXQgPT09IF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4ICYmIHN0YXRlLl92
ZXJ0ZXhTdGF0ZSkgeyAvLyBBdHRyaWJ1dGUgZm9yIGZyYWdtZW50IG5lZWQgdG8gYmUgY2Fycmll
ZCBvdmVyIGJ5IHZhcnlpbmdzCisgICAgICAgICAgICAgICAgdGhpcy5fZW1pdChzdGF0ZS5fdmVy
dGV4U3RhdGUsIGRlZmluZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHN0YXRlLmF0dHJpYnV0ZXMuaW5kZXhPZih0aGlzLmFzc29jaWF0
ZWRWYXJpYWJsZU5hbWUpICE9PSAtMSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLmF0dHJpYnV0ZXMucHVzaCh0aGlzLmFzc29jaWF0
ZWRWYXJpYWJsZU5hbWUpOworICAgICAgICAgICAgaWYgKGRlZmluZSkgeworICAgICAgICAgICAg
ICAgIHN0YXRlLl9hdHRyaWJ1dGVEZWNsYXJhdGlvbiArPSB0aGlzLl9lbWl0RGVmaW5lKGRlZmlu
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZS5fYXR0cmlidXRlRGVjbGFyYXRp
b24gKz0gImF0dHJpYnV0ZSAiICsgc3RhdGUuX2dldEdMVHlwZSh0aGlzLnR5cGUpICsgIiAiICsg
dGhpcy5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIjtcclxuIjsKKyAgICAgICAgICAgIGlmIChk
ZWZpbmUpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5fYXR0cmlidXRlRGVjbGFyYXRpb24gKz0g
IiNlbmRpZlxyXG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIElucHV0QmxvY2sucHJvdG90eXBlLl90cmFuc21pdFdvcmxkID0gZnVu
Y3Rpb24gKGVmZmVjdCwgd29ybGQsIHdvcmxkVmlldywgd29ybGRWaWV3UHJvamVjdGlvbikgewor
ICAgICAgICBpZiAoIXRoaXMuX3N5c3RlbVZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHZhcmlhYmxlTmFtZSA9IHRoaXMuYXNzb2NpYXRlZFZhcmlh
YmxlTmFtZTsKKyAgICAgICAgc3dpdGNoICh0aGlzLl9zeXN0ZW1WYWx1ZSkgeworICAgICAgICAg
ICAgY2FzZSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkOgorICAgICAgICAgICAgICAg
IGVmZmVjdC5zZXRNYXRyaXgodmFyaWFibGVOYW1lLCB3b3JsZCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIl0uV29ybGRW
aWV3OgorICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRNYXRyaXgodmFyaWFibGVOYW1lLCB3b3Js
ZFZpZXcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfbm9kZU1h
dGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRl
cmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkVmlld1Byb2plY3Rpb246CisgICAgICAgICAgICAgICAg
ZWZmZWN0LnNldE1hdHJpeCh2YXJpYWJsZU5hbWUsIHdvcmxkVmlld1Byb2plY3Rpb24pOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIElucHV0QmxvY2sucHJvdG90eXBlLl90cmFuc21pdCA9IGZ1bmN0aW9uIChlZmZlY3Qs
IHNjZW5lKSB7CisgICAgICAgIGlmICh0aGlzLmlzQXR0cmlidXRlKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHZhcmlhYmxlTmFtZSA9IHRoaXMuYXNzb2Np
YXRlZFZhcmlhYmxlTmFtZTsKKyAgICAgICAgaWYgKHRoaXMuX3N5c3RlbVZhbHVlKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKHRoaXMuX3N5c3RlbVZhbHVlKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
Ik5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkOgorICAgICAgICAgICAgICAgIGNhc2Ug
X25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJO
b2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5Xb3JsZFZpZXc6CisgICAgICAgICAgICAgICAgY2Fz
ZSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
Ik5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkVmlld1Byb2plY3Rpb246CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxT
eXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsU3lz
dGVtVmFsdWVzIl0uVmlldzoKKyAgICAgICAgICAgICAgICAgICAgZWZmZWN0LnNldE1hdHJpeCh2
YXJpYWJsZU5hbWUsIHNjZW5lLmdldFZpZXdNYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5Q
cm9qZWN0aW9uOgorICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0TWF0cml4KHZhcmlhYmxl
TmFtZSwgc2NlbmUuZ2V0UHJvamVjdGlvbk1hdHJpeCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLlZp
ZXdQcm9qZWN0aW9uOgorICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0TWF0cml4KHZhcmlh
YmxlTmFtZSwgc2NlbmUuZ2V0VHJhbnNmb3JtTWF0cml4KCkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIl0u
Q2FtZXJhUG9zaXRpb246CisgICAgICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRWZWN0b3IzKHZh
cmlhYmxlTmFtZSwgc2NlbmUuYWN0aXZlQ2FtZXJhLmdsb2JhbFBvc2l0aW9uKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsU3lz
dGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRlcmlhbFN5c3Rl
bVZhbHVlcyJdLkZvZ0NvbG9yOgorICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0Q29sb3Iz
KHZhcmlhYmxlTmFtZSwgc2NlbmUuZm9nQ29sb3IpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgdmFsdWUgPSB0aGlzLl92YWx1ZUNhbGxiYWNrID8gdGhpcy5fdmFsdWVDYWxsYmFjaygp
IDogdGhpcy5fc3RvcmVkVmFsdWU7CisgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7
CisgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXMiXS5GbG9hdDoKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQodmFy
aWFibGVOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5J
bnQ6CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldEludCh2YXJpYWJsZU5hbWUsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yMzoKKyAgICAgICAgICAg
ICAgICBlZmZlY3Quc2V0Q29sb3IzKHZhcmlhYmxlTmFtZSwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3I0OgorICAgICAgICAgICAgICAgIGVmZmVjdC5z
ZXREaXJlY3RDb2xvcjQodmFyaWFibGVOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMiXS5WZWN0b3IyOgorICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRWZWN0
b3IyKHZhcmlhYmxlTmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzIl0uVmVjdG9yMzoKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0VmVjdG9yMyh2YXJpYWJs
ZU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
X25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3Rv
cjQ6CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldFZlY3RvcjQodmFyaWFibGVOYW1lLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5NYXRyaXg6CisgICAgICAg
ICAgICAgICAgZWZmZWN0LnNldE1hdHJpeCh2YXJpYWJsZU5hbWUsIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH07CisgICAgSW5wdXRCbG9jay5wcm90b3R5
cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3Rv
dHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgaWYgKHRoaXMuaXNV
bmlmb3JtIHx8IHRoaXMuaXNTeXN0ZW1WYWx1ZSkgeworICAgICAgICAgICAgc3RhdGUuc2hhcmVk
RGF0YS5pbnB1dEJsb2Nrcy5wdXNoKHRoaXMpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Vt
aXQoc3RhdGUpOworICAgIH07CisgICAgSW5wdXRCbG9jay5wcm90b3R5cGUuc2VyaWFsaXplID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9zdXBlci5w
cm90b3R5cGUuc2VyaWFsaXplLmNhbGwodGhpcyk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QudHlwZSA9IHRoaXMudHlwZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tb2RlID0g
dGhpcy5fbW9kZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5zeXN0ZW1WYWx1ZSA9IHRo
aXMuX3N5c3RlbVZhbHVlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmFuaW1hdGlvblR5
cGUgPSB0aGlzLl9hbmltYXRpb25UeXBlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnZp
c2libGVJbkluc3BlY3RvciA9IHRoaXMudmlzaWJsZUluSW5zcGVjdG9yOworICAgICAgICBpZiAo
dGhpcy5fc3RvcmVkVmFsdWUgIT0gbnVsbCAmJiB0aGlzLl9tb2RlID09PSBfTm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSJdLlVuaWZvcm0pIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9zdG9yZWRWYWx1ZS5hc0FycmF5KSB7CisgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC52YWx1ZVR5cGUgPSAiQkFCWUxPTi4iICsgdGhpcy5fc3RvcmVkVmFs
dWUuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC52
YWx1ZSA9IHRoaXMuX3N0b3JlZFZhbHVlLmFzQXJyYXkoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudmFsdWVU
eXBlID0gIm51bWJlciI7CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC52YWx1
ZSA9IHRoaXMuX3N0b3JlZFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgSW5wdXRCbG9jay5wcm90
b3R5cGUuX2Rlc2VyaWFsaXplID0gZnVuY3Rpb24gKHNlcmlhbGl6YXRpb25PYmplY3QsIHNjZW5l
LCByb290VXJsKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2Rlc2VyaWFsaXplLmNhbGwo
dGhpcywgc2VyaWFsaXphdGlvbk9iamVjdCwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICB0aGlz
Ll90eXBlID0gc2VyaWFsaXphdGlvbk9iamVjdC50eXBlOworICAgICAgICB0aGlzLl9tb2RlID0g
c2VyaWFsaXphdGlvbk9iamVjdC5tb2RlOworICAgICAgICB0aGlzLl9zeXN0ZW1WYWx1ZSA9IHNl
cmlhbGl6YXRpb25PYmplY3Quc3lzdGVtVmFsdWUgfHwgc2VyaWFsaXphdGlvbk9iamVjdC53ZWxs
S25vd25WYWx1ZTsKKyAgICAgICAgdGhpcy5fYW5pbWF0aW9uVHlwZSA9IHNlcmlhbGl6YXRpb25P
YmplY3QuYW5pbWF0aW9uVHlwZTsKKyAgICAgICAgdGhpcy52aXNpYmxlSW5JbnNwZWN0b3IgPSBz
ZXJpYWxpemF0aW9uT2JqZWN0LnZpc2libGVJbkluc3BlY3RvcjsKKyAgICAgICAgaWYgKCFzZXJp
YWxpemF0aW9uT2JqZWN0LnZhbHVlVHlwZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGlmIChzZXJpYWxpemF0aW9uT2JqZWN0LnZhbHVlVHlwZSA9PT0gIm51bWJl
ciIpIHsKKyAgICAgICAgICAgIHRoaXMuX3N0b3JlZFZhbHVlID0gc2VyaWFsaXphdGlvbk9iamVj
dC52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciB2YWx1
ZVR5cGUgPSBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siX1R5
cGVTdG9yZSJdLkdldENsYXNzKHNlcmlhbGl6YXRpb25PYmplY3QudmFsdWVUeXBlKTsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZVR5cGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZWRWYWx1
ZSA9IHZhbHVlVHlwZS5Gcm9tQXJyYXkoc2VyaWFsaXphdGlvbk9iamVjdC52YWx1ZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBJbnB1dEJsb2NrOworfShf
bm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVy
aWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzdfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5JbnB1dEJsb2NrIl0g
PSBJbnB1dEJsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9C
bG9ja3MvVmVydGV4L2JvbmVzQmxvY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUv
QmxvY2tzL1ZlcnRleC9ib25lc0Jsb2NrLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
Qm9uZXNCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb25lc0Js
b2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCb25lc0Jsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25v
ZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0
ZXJpYWxTeXN0ZW1WYWx1ZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1h
dGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9tYXRlcmlhbEhlbHBlciAqLyAiLi9N
YXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
SW5wdXRfaW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vSW5wdXQvaW5wdXRCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9C
bG9ja3MvSW5wdXQvaW5wdXRCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
aXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3Rv
cmUudHMiKTsKKworCisKKworCisKKworCisvKioKKyAqIEJsb2NrIHVzZWQgdG8gYWRkIHN1cHBv
cnQgZm9yIHZlcnRleCBza2lubmluZyAoYm9uZXMpCisgKi8KK3ZhciBCb25lc0Jsb2NrID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEJvbmVzQmxvY2ssIF9zdXBlcik7CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIG5ldyBCb25lc0Jsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVm
aW5lcyB0aGUgYmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIEJvbmVzQmxvY2sobmFt
ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1h
dGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0
ZXJJbnB1dCgibWF0cmljZXNJbmRpY2VzIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQpOworICAgICAgICBfdGhpcy5yZWdpc3Rlcklu
cHV0KCJtYXRyaWNlc1dlaWdodHMiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yNCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQo
Im1hdHJpY2VzSW5kaWNlc0V4dHJhIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQsIHRydWUpOworICAgICAgICBfdGhpcy5yZWdpc3Rl
cklucHV0KCJtYXRyaWNlc1dlaWdodHNFeHRyYSIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0LCB0cnVlKTsKKyAgICAgICAgX3RoaXMu
cmVnaXN0ZXJJbnB1dCgid29ybGQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzIl0uTWF0cml4KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQo
Im91dHB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXMiXS5NYXRyaXgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAg
ICAqIEluaXRpYWxpemUgdGhlIGJsb2NrIGFuZCBwcmVwYXJlIHRoZSBjb250ZXh0IGZvciBidWls
ZAorICAgICAqIEBwYXJhbSBzdGF0ZSBkZWZpbmVzIHRoZSBzdGF0ZSB0aGF0IHdpbGwgYmUgdXNl
ZCBmb3IgdGhlIGJ1aWxkCisgICAgICovCisgICAgQm9uZXNCbG9jay5wcm90b3R5cGUuaW5pdGlh
bGl6ZSA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBzdGF0ZS5fZXhjbHVkZVZhcmlhYmxl
TmFtZSgiYm9uZVNhbXBsZXIiKTsKKyAgICAgICAgc3RhdGUuX2V4Y2x1ZGVWYXJpYWJsZU5hbWUo
ImJvbmVUZXh0dXJlV2lkdGgiKTsKKyAgICAgICAgc3RhdGUuX2V4Y2x1ZGVWYXJpYWJsZU5hbWUo
Im1Cb25lcyIpOworICAgICAgICBzdGF0ZS5fZXhjbHVkZVZhcmlhYmxlTmFtZSgiQm9uZXNQZXJN
ZXNoIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5h
bWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIEJvbmVzQmxv
Y2sucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
ICJCb25lc0Jsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCb25lc0Js
b2NrLnByb3RvdHlwZSwgIm1hdHJpY2VzSW5kaWNlcyIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgdGhlIG1hdHJpeCBpbmRpY2VzIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5w
dXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm9u
ZXNCbG9jay5wcm90b3R5cGUsICJtYXRyaWNlc1dlaWdodHMiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSBtYXRyaXggd2VpZ2h0cyBpbnB1dCBjb21wb25lbnQKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2lucHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEJvbmVzQmxvY2sucHJvdG90eXBlLCAibWF0cmljZXNJbmRpY2VzRXh0cmEiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBleHRyYSBtYXRyaXggaW5kaWNlcyBpbnB1dCBjb21w
b25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2lucHV0c1syXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEJvbmVzQmxvY2sucHJvdG90eXBlLCAibWF0cmljZXNXZWlnaHRzRXh0
cmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBleHRyYSBtYXRyaXggd2Vp
Z2h0cyBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1szXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJvbmVzQmxvY2sucHJvdG90eXBlLCAid29y
bGQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB3b3JsZCBpbnB1dCBjb21w
b25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2lucHV0c1s0XTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEJvbmVzQmxvY2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0
cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgQm9uZXNCbG9jay5wcm90b3R5cGUuYXV0
b0NvbmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCkgeworICAgICAgICBpZiAoIXRoaXMubWF0
cmljZXNJbmRpY2VzLmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgbWF0cmljZXNJbmRp
Y2VzSW5wdXQgPSBtYXRlcmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIp
IHsgcmV0dXJuIGIuaXNBdHRyaWJ1dGUgJiYgYi5uYW1lID09PSAibWF0cmljZXNJbmRpY2VzIjsg
fSk7CisgICAgICAgICAgICBpZiAoIW1hdHJpY2VzSW5kaWNlc0lucHV0KSB7CisgICAgICAgICAg
ICAgICAgbWF0cmljZXNJbmRpY2VzSW5wdXQgPSBuZXcgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5wdXRCbG9jayJdKCJtYXRyaWNlc0luZGljZXMiKTsK
KyAgICAgICAgICAgICAgICBtYXRyaWNlc0luZGljZXNJbnB1dC5zZXRBc0F0dHJpYnV0ZSgibWF0
cmljZXNJbmRpY2VzIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRyaWNlc0luZGlj
ZXNJbnB1dC5vdXRwdXQuY29ubmVjdFRvKHRoaXMubWF0cmljZXNJbmRpY2VzKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXRoaXMubWF0cmljZXNXZWlnaHRzLmlzQ29ubmVjdGVkKSB7CisgICAg
ICAgICAgICB2YXIgbWF0cmljZXNXZWlnaHRzSW5wdXQgPSBtYXRlcmlhbC5nZXRJbnB1dEJsb2Nr
QnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuaXNBdHRyaWJ1dGUgJiYgYi5uYW1l
ID09PSAibWF0cmljZXNXZWlnaHRzIjsgfSk7CisgICAgICAgICAgICBpZiAoIW1hdHJpY2VzV2Vp
Z2h0c0lucHV0KSB7CisgICAgICAgICAgICAgICAgbWF0cmljZXNXZWlnaHRzSW5wdXQgPSBuZXcg
X0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5wdXRCbG9j
ayJdKCJtYXRyaWNlc1dlaWdodHMiKTsKKyAgICAgICAgICAgICAgICBtYXRyaWNlc1dlaWdodHNJ
bnB1dC5zZXRBc0F0dHJpYnV0ZSgibWF0cmljZXNXZWlnaHRzIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtYXRyaWNlc1dlaWdodHNJbnB1dC5vdXRwdXQuY29ubmVjdFRvKHRoaXMubWF0
cmljZXNXZWlnaHRzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMud29ybGQuaXNDb25u
ZWN0ZWQpIHsKKyAgICAgICAgICAgIHZhciB3b3JsZElucHV0ID0gbWF0ZXJpYWwuZ2V0SW5wdXRC
bG9ja0J5UHJlZGljYXRlKGZ1bmN0aW9uIChiKSB7IHJldHVybiBiLnN5c3RlbVZhbHVlID09PSBf
bm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5v
ZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkOyB9KTsKKyAgICAgICAgICAgIGlmICghd29y
bGRJbnB1dCkgeworICAgICAgICAgICAgICAgIHdvcmxkSW5wdXQgPSBuZXcgX0lucHV0X2lucHV0
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5wdXRCbG9jayJdKCJ3b3JsZCIp
OworICAgICAgICAgICAgICAgIHdvcmxkSW5wdXQuc2V0QXNTeXN0ZW1WYWx1ZShfbm9kZU1hdGVy
aWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlh
bFN5c3RlbVZhbHVlcyJdLldvcmxkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdvcmxk
SW5wdXQub3V0cHV0LmNvbm5lY3RUbyh0aGlzLndvcmxkKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgQm9uZXNCbG9jay5wcm90b3R5cGUucHJvdmlkZUZhbGxiYWNrcyA9IGZ1bmN0aW9uIChtZXNo
LCBmYWxsYmFja3MpIHsKKyAgICAgICAgaWYgKG1lc2ggJiYgbWVzaC51c2VCb25lcyAmJiBtZXNo
LmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBtZXNoLnNrZWxldG9uKSB7CisgICAgICAgICAg
ICBmYWxsYmFja3MuYWRkQ1BVU2tpbm5pbmdGYWxsYmFjaygwLCBtZXNoKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgQm9uZXNCbG9jay5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChlZmZlY3Qs
IG5vZGVNYXRlcmlhbCwgbWVzaCkgeworICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kQm9uZXNQYXJhbWV0ZXJz
KG1lc2gsIGVmZmVjdCk7CisgICAgfTsKKyAgICBCb25lc0Jsb2NrLnByb3RvdHlwZS5wcmVwYXJl
RGVmaW5lcyA9IGZ1bmN0aW9uIChtZXNoLCBub2RlTWF0ZXJpYWwsIGRlZmluZXMpIHsKKyAgICAg
ICAgaWYgKCFkZWZpbmVzLl9hcmVBdHRyaWJ1dGVzRGlydHkpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0ZvckJvbmVzKG1lc2gs
IGRlZmluZXMpOworICAgIH07CisgICAgQm9uZXNCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sg
PSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9j
ay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIGNvbXBpbGF0aW9u
IGZhbGxiYWNrcworICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmJsb2Nrc1dpdGhGYWxsYmFja3Mu
cHVzaCh0aGlzKTsKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIGJpbmRpbmcKKyAgICAgICAgc3Rh
dGUuc2hhcmVkRGF0YS5iaW5kYWJsZUJsb2Nrcy5wdXNoKHRoaXMpOworICAgICAgICAvLyBSZWdp
c3RlciBmb3IgZGVmaW5lcworICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmJsb2Nrc1dpdGhEZWZp
bmVzLnB1c2godGhpcyk7CisgICAgICAgIC8vIFJlZ2lzdGVyIGludGVybmFsIHVuaWZvcm1zIGFu
ZCBzYW1wbGVycworICAgICAgICBzdGF0ZS51bmlmb3Jtcy5wdXNoKCJib25lVGV4dHVyZVdpZHRo
Iik7CisgICAgICAgIHN0YXRlLnVuaWZvcm1zLnB1c2goIm1Cb25lcyIpOworICAgICAgICBzdGF0
ZS5zYW1wbGVycy5wdXNoKCJib25lU2FtcGxlciIpOworICAgICAgICAvLyBFbWl0IGNvZGUKKyAg
ICAgICAgdmFyIGNvbW1lbnRzID0gIi8vIiArIHRoaXMubmFtZTsKKyAgICAgICAgc3RhdGUuX2Vt
aXRGdW5jdGlvbkZyb21JbmNsdWRlKCJib25lc0RlY2xhcmF0aW9uIiwgY29tbWVudHMsIHsKKyAg
ICAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZXM6IHRydWUsCisgICAgICAgICAgICByZW1vdmVVbmlm
b3JtczogZmFsc2UsCisgICAgICAgICAgICByZW1vdmVWYXJ5aW5nczogdHJ1ZSwKKyAgICAgICAg
ICAgIHJlbW92ZUlmRGVmOiBmYWxzZQorICAgICAgICB9KTsKKyAgICAgICAgdmFyIGluZmx1ZW5j
ZVZhcmlhYmxlbmFtZSA9IHN0YXRlLl9nZXRGcmVlVmFyaWFibGVOYW1lKCJpbmZsdWVuY2UiKTsK
KyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gc3RhdGUuX2VtaXRDb2RlRnJvbUlu
Y2x1ZGUoImJvbmVzVmVydGV4IiwgY29tbWVudHMsIHsKKyAgICAgICAgICAgIHJlcGxhY2VTdHJp
bmdzOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzZWFyY2g6IC9m
aW5hbFdvcmxkPWZpbmFsV29ybGRcKmluZmx1ZW5jZTsvLAorICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlOiAiIgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBzZWFyY2g6IC9pbmZsdWVuY2UvZ20sCisgICAgICAgICAgICAgICAgICAg
IHJlcGxhY2U6IGluZmx1ZW5jZVZhcmlhYmxlbmFtZQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfSk7CisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRz
WzBdOworICAgICAgICB2YXIgd29ybGRJbnB1dCA9IHRoaXMud29ybGQ7CisgICAgICAgIHN0YXRl
LmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjaWYgTlVNX0JPTkVfSU5GTFVFTkNFUlM+MFxyXG4iOwor
ICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91
dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgd29ybGRJbnB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1l
ICsgIiAqICIgKyBpbmZsdWVuY2VWYXJpYWJsZW5hbWUgKyAiO1xyXG4iKTsKKyAgICAgICAgc3Rh
dGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNlbHNlXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBp
bGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9
ICIgKyB3b3JsZElucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiO1xyXG4iKTsKKyAgICAg
ICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNlbmRpZlxyXG4iOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBCb25lc0Jsb2NrOworfShfbm9kZU1hdGVyaWFs
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkp
OworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siX1R5cGVT
dG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5Cb25lc0Jsb2NrIl0gPSBCb25lc0Jsb2Nr
OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvVmVydGV4
L2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvVmVydGV4L2luZGV4LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFZlcnRleE91dHB1dEJsb2NrLCBCb25lc0Jsb2NrLCBJ
bnN0YW5jZXNCbG9jaywgTW9ycGhUYXJnZXRzQmxvY2ssIExpZ2h0SW5mb3JtYXRpb25CbG9jayAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZlcnRleE91dHB1
dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL3ZlcnRleE91dHB1dEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9WZXJ0
ZXgvdmVydGV4T3V0cHV0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmVydGV4T3V0cHV0
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92ZXJ0ZXhPdXRwdXRCbG9ja19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZXJ0ZXhPdXRwdXRCbG9jayJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9ib25lc0Jsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2JvbmVzQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05v
ZGUvQmxvY2tzL1ZlcnRleC9ib25lc0Jsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvbmVz
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ib25lc0Jsb2NrX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkJvbmVzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfaW5zdGFuY2VzQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vaW5zdGFuY2VzQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxv
Y2tzL1ZlcnRleC9pbnN0YW5jZXNCbG9jay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbnN0YW5j
ZXNCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luc3RhbmNlc0Jsb2NrX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIkluc3RhbmNlc0Jsb2NrIl07IH0pOworCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX21vcnBoVGFyZ2V0c0Jsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21vcnBoVGFyZ2V0c0Jsb2NrICovICIuL01h
dGVyaWFscy9Ob2RlL0Jsb2Nrcy9WZXJ0ZXgvbW9ycGhUYXJnZXRzQmxvY2sudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTW9ycGhUYXJnZXRzQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tb3Jw
aFRhcmdldHNCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNb3JwaFRhcmdldHNC
bG9jayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saWdodEluZm9ybWF0aW9u
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vbGlnaHRJbmZvcm1hdGlvbkJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9W
ZXJ0ZXgvbGlnaHRJbmZvcm1hdGlvbkJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxpZ2h0
SW5mb3JtYXRpb25CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xpZ2h0SW5mb3JtYXRpb25C
bG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJMaWdodEluZm9ybWF0aW9uQmxvY2si
XTsgfSk7CisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9O
b2RlL0Jsb2Nrcy9WZXJ0ZXgvaW5zdGFuY2VzQmxvY2sudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01h
dGVyaWFscy9Ob2RlL0Jsb2Nrcy9WZXJ0ZXgvaW5zdGFuY2VzQmxvY2sudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogSW5zdGFuY2VzQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiSW5zdGFuY2VzQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIElu
c3RhbmNlc0Jsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8g
Ii4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01h
dGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01h
dGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9u
b2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFs
U3lzdGVtVmFsdWVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0lucHV0X2lucHV0
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL0lucHV0L2lucHV0QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL0lucHV0
L2lucHV0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3Rv
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisK
KworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBhZGQgc3VwcG9ydCBmb3IgaW5zdGFu
Y2VzCisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vf
aW5zdGFuY2VzCisgKi8KK3ZhciBJbnN0YW5jZXNCbG9jayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShJbnN0YW5jZXNCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IEluc3RhbmNlc0Jsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
YmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIEluc3RhbmNlc0Jsb2NrKG5hbWUpIHsK
KyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiXS5WZXJ0ZXgpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5w
dXQoIndvcmxkMCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXMiXS5WZWN0b3I0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgid29ybGQxIiwg
X25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3Rv
cjQpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ3b3JsZDIiLCBfbm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJO
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yNCk7CisgICAgICAg
IF90aGlzLnJlZ2lzdGVySW5wdXQoIndvcmxkMyIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0
ZXJJbnB1dCgid29ybGQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzIl0uTWF0cml4LCB0cnVlKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQo
Im91dHB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXMiXS5NYXRyaXgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBjbGFz
cyBuYW1lCisgICAgICovCisgICAgSW5zdGFuY2VzQmxvY2sucHJvdG90eXBlLmdldENsYXNzTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJJbnN0YW5jZXNCbG9jayI7CisgICAg
fTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5zdGFuY2VzQmxvY2sucHJvdG90eXBlLCAi
d29ybGQwIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZmlyc3Qgd29ybGQg
cm93IGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5zdGFuY2VzQmxvY2sucHJvdG90eXBlLCAi
d29ybGQxIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgc2Vjb25kIHdvcmxk
IHJvdyBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEluc3RhbmNlc0Jsb2NrLnByb3RvdHlwZSwg
IndvcmxkMiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHRoaXJkIHdvcmxk
IHJvdyBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1syXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEluc3RhbmNlc0Jsb2NrLnByb3RvdHlwZSwg
IndvcmxkMyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGZvcnRoIHdvcmxk
IHJvdyBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1szXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEluc3RhbmNlc0Jsb2NrLnByb3RvdHlwZSwg
IndvcmxkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQgaW5wdXQg
Y29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbNF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShJbnN0YW5jZXNCbG9jay5wcm90b3R5cGUsICJvdXRwdXQiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBvdXRwdXQgY29tcG9uZW50CisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBJbnN0YW5jZXNCbG9jay5w
cm90b3R5cGUuYXV0b0NvbmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCkgeworICAgICAgICBp
ZiAoIXRoaXMud29ybGQwLmNvbm5lY3RlZFBvaW50KSB7CisgICAgICAgICAgICB2YXIgd29ybGQw
SW5wdXQgPSBtYXRlcmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsg
cmV0dXJuIGIuaXNBdHRyaWJ1dGUgJiYgYi5uYW1lID09PSAid29ybGQwIjsgfSk7CisgICAgICAg
ICAgICBpZiAoIXdvcmxkMElucHV0KSB7CisgICAgICAgICAgICAgICAgd29ybGQwSW5wdXQgPSBu
ZXcgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW5wdXRC
bG9jayJdKCJ3b3JsZDAiKTsKKyAgICAgICAgICAgICAgICB3b3JsZDBJbnB1dC5zZXRBc0F0dHJp
YnV0ZSgid29ybGQwIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JsZDBJbnB1dC5v
dXRwdXQuY29ubmVjdFRvKHRoaXMud29ybGQwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRo
aXMud29ybGQxLmNvbm5lY3RlZFBvaW50KSB7CisgICAgICAgICAgICB2YXIgd29ybGQxSW5wdXQg
PSBtYXRlcmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJu
IGIuaXNBdHRyaWJ1dGUgJiYgYi5uYW1lID09PSAid29ybGQxIjsgfSk7CisgICAgICAgICAgICBp
ZiAoIXdvcmxkMUlucHV0KSB7CisgICAgICAgICAgICAgICAgd29ybGQxSW5wdXQgPSBuZXcgX0lu
cHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW5wdXRCbG9jayJd
KCJ3b3JsZDEiKTsKKyAgICAgICAgICAgICAgICB3b3JsZDFJbnB1dC5zZXRBc0F0dHJpYnV0ZSgi
d29ybGQxIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JsZDFJbnB1dC5vdXRwdXQu
Y29ubmVjdFRvKHRoaXMud29ybGQxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMud29y
bGQyLmNvbm5lY3RlZFBvaW50KSB7CisgICAgICAgICAgICB2YXIgd29ybGQySW5wdXQgPSBtYXRl
cmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuaXNB
dHRyaWJ1dGUgJiYgYi5uYW1lID09PSAid29ybGQyIjsgfSk7CisgICAgICAgICAgICBpZiAoIXdv
cmxkMklucHV0KSB7CisgICAgICAgICAgICAgICAgd29ybGQySW5wdXQgPSBuZXcgX0lucHV0X2lu
cHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW5wdXRCbG9jayJdKCJ3b3Js
ZDIiKTsKKyAgICAgICAgICAgICAgICB3b3JsZDJJbnB1dC5zZXRBc0F0dHJpYnV0ZSgid29ybGQy
Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JsZDJJbnB1dC5vdXRwdXQuY29ubmVj
dFRvKHRoaXMud29ybGQyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMud29ybGQzLmNv
bm5lY3RlZFBvaW50KSB7CisgICAgICAgICAgICB2YXIgd29ybGQzSW5wdXQgPSBtYXRlcmlhbC5n
ZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuaXNBdHRyaWJ1
dGUgJiYgYi5uYW1lID09PSAid29ybGQzIjsgfSk7CisgICAgICAgICAgICBpZiAoIXdvcmxkM0lu
cHV0KSB7CisgICAgICAgICAgICAgICAgd29ybGQzSW5wdXQgPSBuZXcgX0lucHV0X2lucHV0Qmxv
Y2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW5wdXRCbG9jayJdKCJ3b3JsZDMiKTsK
KyAgICAgICAgICAgICAgICB3b3JsZDNJbnB1dC5zZXRBc0F0dHJpYnV0ZSgid29ybGQzIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JsZDNJbnB1dC5vdXRwdXQuY29ubmVjdFRvKHRo
aXMud29ybGQzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMud29ybGQuY29ubmVjdGVk
UG9pbnQpIHsKKyAgICAgICAgICAgIHZhciB3b3JsZElucHV0ID0gbWF0ZXJpYWwuZ2V0SW5wdXRC
bG9ja0J5UHJlZGljYXRlKGZ1bmN0aW9uIChiKSB7IHJldHVybiBiLmlzQXR0cmlidXRlICYmIGIu
bmFtZSA9PT0gIndvcmxkIjsgfSk7CisgICAgICAgICAgICBpZiAoIXdvcmxkSW5wdXQpIHsKKyAg
ICAgICAgICAgICAgICB3b3JsZElucHV0ID0gbmV3IF9JbnB1dF9pbnB1dEJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIklucHV0QmxvY2siXSgid29ybGQiKTsKKyAgICAgICAgICAg
ICAgICB3b3JsZElucHV0LnNldEFzU3lzdGVtVmFsdWUoX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVl
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMi
XS5Xb3JsZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JsZElucHV0Lm91dHB1dC5j
b25uZWN0VG8odGhpcy53b3JsZCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy53b3JsZC5kZWZp
bmUgPSAiIUlOU1RBTkNFUyI7CisgICAgfTsKKyAgICBJbnN0YW5jZXNCbG9jay5wcm90b3R5cGUu
cHJlcGFyZURlZmluZXMgPSBmdW5jdGlvbiAobWVzaCwgbm9kZU1hdGVyaWFsLCBkZWZpbmVzLCB1
c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgaWYgKHVzZUluc3RhbmNlcyA9PT0gdm9pZCAwKSB7IHVz
ZUluc3RhbmNlcyA9IGZhbHNlOyB9CisgICAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGlmIChkZWZpbmVzWyJJTlNUQU5DRVMiXSAhPT0gdXNlSW5zdGFuY2VzKSB7CisgICAgICAg
ICAgICBkZWZpbmVzLnNldFZhbHVlKCJJTlNUQU5DRVMiLCB1c2VJbnN0YW5jZXMpOworICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoYW5nZWQpIHsK
KyAgICAgICAgICAgIGRlZmluZXMubWFya0FzVW5wcm9jZXNzZWQoKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgSW5zdGFuY2VzQmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24g
KHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlz
LCBzdGF0ZSk7CisgICAgICAgIC8vIFJlZ2lzdGVyIGZvciBkZWZpbmVzCisgICAgICAgIHN0YXRl
LnNoYXJlZERhdGEuYmxvY2tzV2l0aERlZmluZXMucHVzaCh0aGlzKTsKKyAgICAgICAgLy8gRW1p
dCBjb2RlCisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB2
YXIgd29ybGQwID0gdGhpcy53b3JsZDA7CisgICAgICAgIHZhciB3b3JsZDEgPSB0aGlzLndvcmxk
MTsKKyAgICAgICAgdmFyIHdvcmxkMiA9IHRoaXMud29ybGQyOworICAgICAgICB2YXIgd29ybGQz
ID0gdGhpcy53b3JsZDM7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjaWZk
ZWYgSU5TVEFOQ0VTXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRo
aXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9IG1hdDQoIiArIHdvcmxkMC5h
c3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiwgIiArIHdvcmxkMS5hc3NvY2lhdGVkVmFyaWFibGVO
YW1lICsgIiwgIiArIHdvcmxkMi5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiwgIiArIHdvcmxk
My5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIik7XHJcbiIpOworICAgICAgICBzdGF0ZS5jb21w
aWxhdGlvblN0cmluZyArPSAiI2Vsc2VcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25T
dHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0YXRlKSArICgiID0gIiArIHRo
aXMud29ybGQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiIpOworICAgICAgICBzdGF0
ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2VuZGlmXHJcbiI7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgcmV0dXJuIEluc3RhbmNlc0Jsb2NrOworfShfbm9kZU1hdGVyaWFsQmxv
Y2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkpOwor
CitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siX1R5cGVTdG9y
ZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5JbnN0YW5jZXNCbG9jayJdID0gSW5zdGFuY2Vz
QmxvY2s7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9W
ZXJ0ZXgvbGlnaHRJbmZvcm1hdGlvbkJsb2NrLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWF0ZXJpYWxzL05vZGUvQmxvY2tzL1ZlcnRleC9saWdodEluZm9ybWF0aW9uQmxvY2sudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IExpZ2h0SW5mb3JtYXRpb25CbG9j
ayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaWdodEluZm9ybWF0aW9u
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIExpZ2h0SW5mb3JtYXRpb25CbG9jazsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlh
bEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0
ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFs
QmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxz
L05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNj
L3R5cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9MaWdodHNfcG9pbnRM
aWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vLi4vLi4vTGlnaHRzL3BvaW50TGlnaHQgKi8gIi4vTGlnaHRzL3BvaW50TGlnaHQu
dHMiKTsKKworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBnZXQgZGF0YSBpbmZvcm1h
dGlvbiBmcm9tIGEgbGlnaHQKKyAqLwordmFyIExpZ2h0SW5mb3JtYXRpb25CbG9jayA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShMaWdodEluZm9ybWF0aW9uQmxvY2ssIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBMaWdodEluZm9ybWF0aW9uQmxvY2sKKyAg
ICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBibG9jayBuYW1lCisgICAgICovCisgICAgZnVu
Y3Rpb24gTGlnaHRJbmZvcm1hdGlvbkJsb2NrKG5hbWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
X3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXgp
IHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoIndvcmxkUG9zaXRpb24iLCBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9y
NCwgZmFsc2UsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4KTsKKyAgICAgICAgX3Ro
aXMucmVnaXN0ZXJPdXRwdXQoImRpcmVjdGlvbiIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IzKTsKKyAgICAgICAgX3RoaXMucmVnaXN0
ZXJPdXRwdXQoImNvbG9yIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlcyJdLkNvbG9yMyk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAg
LyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMg
dGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBMaWdodEluZm9ybWF0aW9uQmxvY2sucHJvdG90
eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJMaWdodElu
Zm9ybWF0aW9uQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExpZ2h0
SW5mb3JtYXRpb25CbG9jay5wcm90b3R5cGUsICJ3b3JsZFBvc2l0aW9uIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQgcG9zaXRpb24gaW5wdXQgY29tcG9uZW50Cisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShMaWdodEluZm9ybWF0aW9uQmxvY2sucHJvdG90eXBlLCAiZGlyZWN0aW9uIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZGlyZWN0aW9uIG91dHB1dCBjb21wb25l
bnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShMaWdodEluZm9ybWF0aW9uQmxvY2sucHJvdG90eXBlLCAiY29sb3IiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBkaXJlY3Rpb24gb3V0cHV0IGNvbXBv
bmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fb3V0cHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgTGlnaHRJ
bmZvcm1hdGlvbkJsb2NrLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGVmZmVjdCwgbm9kZU1h
dGVyaWFsLCBtZXNoKSB7CisgICAgICAgIGlmICghbWVzaCkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5saWdodCB8fCAhdGhpcy5saWdodC5pc0Vu
YWJsZWQpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDModGhpcy5fbGlnaHREYXRhRGVm
aW5lTmFtZSwgMCwgMCwgMCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQzKHRoaXMuX2xp
Z2h0Q29sb3JEZWZpbmVOYW1lLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLmxpZ2h0LnRyYW5zZmVyVG9Ob2RlTWF0ZXJpYWxFZmZlY3QoZWZm
ZWN0LCB0aGlzLl9saWdodERhdGFEZWZpbmVOYW1lKTsKKyAgICAgICAgZWZmZWN0LnNldENvbG9y
Myh0aGlzLl9saWdodENvbG9yRGVmaW5lTmFtZSwgdGhpcy5saWdodC5kaWZmdXNlKTsKKyAgICB9
OworICAgIExpZ2h0SW5mb3JtYXRpb25CbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5j
dGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxs
KHRoaXMsIHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc2hhcmVkRGF0YS5iaW5kYWJsZUJsb2Nrcy5w
dXNoKHRoaXMpOworICAgICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5kaXJlY3Rpb247CisgICAg
ICAgIHZhciBjb2xvciA9IHRoaXMuY29sb3I7CisgICAgICAgIGlmICghdGhpcy5saWdodCkgewor
ICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1
dChkaXJlY3Rpb24sIHN0YXRlKSArICIgPSB2ZWMzKDAuKTtcclxuIjsKKyAgICAgICAgICAgIHN0
YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQoY29sb3IsIHN0YXRl
KSArICIgPSB2ZWMzKDAuKTtcclxuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHRoaXMuX2xpZ2h0RGF0YURlZmluZU5hbWUgPSBzdGF0ZS5fZ2V0RnJlZURlZmluZU5h
bWUoImxpZ2h0RGF0YSIpOworICAgICAgICAgICAgc3RhdGUuX2VtaXRVbmlmb3JtRnJvbVN0cmlu
Zyh0aGlzLl9saWdodERhdGFEZWZpbmVOYW1lLCAidmVjMyIpOworICAgICAgICAgICAgdGhpcy5f
bGlnaHRDb2xvckRlZmluZU5hbWUgPSBzdGF0ZS5fZ2V0RnJlZURlZmluZU5hbWUoImxpZ2h0Q29s
b3IiKTsKKyAgICAgICAgICAgIHN0YXRlLl9lbWl0VW5pZm9ybUZyb21TdHJpbmcodGhpcy5fbGln
aHRDb2xvckRlZmluZU5hbWUsICJ2ZWMzIik7CisgICAgICAgICAgICBpZiAodGhpcy5saWdodCBp
bnN0YW5jZW9mIF9MaWdodHNfcG9pbnRMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJQb2ludExpZ2h0Il0pIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmlu
ZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KGRpcmVjdGlvbiwgc3RhdGUpICsgKCIgPSBub3JtYWxp
emUoIiArIHRoaXMuX2xpZ2h0RGF0YURlZmluZU5hbWUgKyAiIC0gIiArIHRoaXMud29ybGRQb3Np
dGlvbi5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi54eXopO1xyXG4iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9u
U3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQoZGlyZWN0aW9uLCBzdGF0ZSkgKyAoIiA9ICIg
KyB0aGlzLl9saWdodERhdGFEZWZpbmVOYW1lICsgIjtcclxuIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0
KGNvbG9yLCBzdGF0ZSkgKyAoIiA9ICIgKyB0aGlzLl9saWdodENvbG9yRGVmaW5lTmFtZSArICI7
XHJcbiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgTGln
aHRJbmZvcm1hdGlvbkJsb2NrLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX3N1cGVyLnByb3RvdHlwZS5zZXJpYWxp
emUuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMubGlnaHQpIHsKKyAgICAgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QubGlnaHRJZCA9IHRoaXMubGlnaHQuaWQ7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICBMaWdodEluZm9y
bWF0aW9uQmxvY2sucHJvdG90eXBlLl9kZXNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0
aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9k
ZXNlcmlhbGl6ZS5jYWxsKHRoaXMsIHNlcmlhbGl6YXRpb25PYmplY3QsIHNjZW5lLCByb290VXJs
KTsKKyAgICAgICAgaWYgKHNlcmlhbGl6YXRpb25PYmplY3QubGlnaHRJZCkgeworICAgICAgICAg
ICAgdGhpcy5saWdodCA9IHNjZW5lLmdldExpZ2h0QnlJRChzZXJpYWxpemF0aW9uT2JqZWN0Lmxp
Z2h0SWQpOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gTGlnaHRJbmZvcm1hdGlvbkJs
b2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
Tm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5MaWdo
dEluZm9ybWF0aW9uQmxvY2siXSA9IExpZ2h0SW5mb3JtYXRpb25CbG9jazsKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL1ZlcnRleC9tb3JwaFRhcmdldHNC
bG9jay50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL1ZlcnRl
eC9tb3JwaFRhcmdldHNCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBNb3JwaFRhcmdldHNCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJNb3JwaFRhcmdldHNCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTW9ycGhUYXJnZXRzQmxv
Y2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9u
b2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05v
ZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzICovICIu
L01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vbWF0ZXJpYWxIZWxwZXIgKi8g
Ii4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1
ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9JbnB1dF9pbnB1dEJsb2NrX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9J
bnB1dC9pbnB1dEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9JbnB1dC9pbnB1dEJs
b2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8u
Li8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisK
KworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBhZGQgbW9ycGggdGFyZ2V0cyBzdXBwb3J0IHRv
IHZlcnRleCBzaGFkZXIKKyAqLwordmFyIE1vcnBoVGFyZ2V0c0Jsb2NrID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZXh0ZW5kcyJdKE1vcnBoVGFyZ2V0c0Jsb2NrLCBfc3VwZXIpOworICAgIC8qKgor
ICAgICAqIENyZWF0ZSBhIG5ldyBNb3JwaFRhcmdldHNCbG9jaworICAgICAqIEBwYXJhbSBuYW1l
IGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBNb3JwaFRhcmdl
dHNCbG9jayhuYW1lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5h
bWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4KSB8fCB0aGlzOworICAgICAgICBf
dGhpcy5fcmVwZWF0ZWJsZUNvbnRlbnRHZW5lcmF0ZWQgPSAwOworICAgICAgICBfdGhpcy5yZWdp
c3RlcklucHV0KCJwb3NpdGlvbiIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMiXS5WZWN0b3IzKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgi
bm9ybWFsIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLlZlY3RvcjMpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ0YW5nZW50IiwgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjMp
OworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ1diIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IyKTsKKyAgICAgICAgX3RoaXMu
cmVnaXN0ZXJPdXRwdXQoInBvc2l0aW9uT3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjMpOworICAgICAgICBfdGhpcy5yZWdp
c3Rlck91dHB1dCgibm9ybWFsT3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjMpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91
dHB1dCgidGFuZ2VudE91dHB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMiXS5WZWN0b3IzKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQo
InV2T3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlcyJdLlZlY3RvcjIpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgor
ICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBj
bGFzcyBuYW1lCisgICAgICovCisgICAgTW9ycGhUYXJnZXRzQmxvY2sucHJvdG90eXBlLmdldENs
YXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJNb3JwaFRhcmdldHNCbG9j
ayI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRzQmxvY2su
cHJvdG90eXBlLCAicG9zaXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBwb3NpdGlvbiBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1swXTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vcnBoVGFyZ2V0c0Jsb2NrLnBy
b3RvdHlwZSwgIm5vcm1hbCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG5v
cm1hbCBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vcnBoVGFyZ2V0c0Jsb2NrLnByb3RvdHlw
ZSwgInRhbmdlbnQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB0YW5nZW50
IGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzJdOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRzQmxvY2sucHJvdG90eXBlLCAi
dXYiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB0YW5nZW50IGlucHV0IGNv
bXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzNdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRzQmxvY2sucHJvdG90eXBlLCAicG9zaXRpb25P
dXRwdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBwb3NpdGlvbiBvdXRw
dXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRzQmxvY2sucHJvdG90eXBlLCAibm9y
bWFsT3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbm9ybWFsIG91
dHB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3JwaFRhcmdldHNCbG9jay5wcm90b3R5cGUsICJ0
YW5nZW50T3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdGFuZ2Vu
dCBvdXRwdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzJdOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRzQmxvY2sucHJvdG90eXBl
LCAidXZPdXRwdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB0YW5nZW50
IG91dHB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbM107CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE1vcnBoVGFyZ2V0c0Jsb2NrLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24g
KHN0YXRlKSB7CisgICAgICAgIHN0YXRlLl9leGNsdWRlVmFyaWFibGVOYW1lKCJtb3JwaFRhcmdl
dEluZmx1ZW5jZXMiKTsKKyAgICB9OworICAgIE1vcnBoVGFyZ2V0c0Jsb2NrLnByb3RvdHlwZS5h
dXRvQ29uZmlndXJlID0gZnVuY3Rpb24gKG1hdGVyaWFsKSB7CisgICAgICAgIGlmICghdGhpcy5w
b3NpdGlvbi5pc0Nvbm5lY3RlZCkgeworICAgICAgICAgICAgdmFyIHBvc2l0aW9uSW5wdXQgPSBt
YXRlcmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIu
aXNBdHRyaWJ1dGUgJiYgYi5uYW1lID09PSAicG9zaXRpb24iOyB9KTsKKyAgICAgICAgICAgIGlm
ICghcG9zaXRpb25JbnB1dCkgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5wdXQgPSBuZXcg
X0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5wdXRCbG9j
ayJdKCJwb3NpdGlvbiIpOworICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5wdXQuc2V0QXNBdHRy
aWJ1dGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvc2l0aW9uSW5wdXQub3V0cHV0
LmNvbm5lY3RUbyh0aGlzLnBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMu
bm9ybWFsLmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgbm9ybWFsSW5wdXQgPSBtYXRl
cmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuaXNB
dHRyaWJ1dGUgJiYgYi5uYW1lID09PSAibm9ybWFsIjsgfSk7CisgICAgICAgICAgICBpZiAoIW5v
cm1hbElucHV0KSB7CisgICAgICAgICAgICAgICAgbm9ybWFsSW5wdXQgPSBuZXcgX0lucHV0X2lu
cHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5wdXRCbG9jayJdKCJub3Jt
YWwiKTsKKyAgICAgICAgICAgICAgICBub3JtYWxJbnB1dC5zZXRBc0F0dHJpYnV0ZSgibm9ybWFs
Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub3JtYWxJbnB1dC5vdXRwdXQuY29ubmVj
dFRvKHRoaXMubm9ybWFsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMudGFuZ2VudC5p
c0Nvbm5lY3RlZCkgeworICAgICAgICAgICAgdmFyIHRhbmdlbnRJbnB1dCA9IG1hdGVyaWFsLmdl
dElucHV0QmxvY2tCeVByZWRpY2F0ZShmdW5jdGlvbiAoYikgeyByZXR1cm4gYi5pc0F0dHJpYnV0
ZSAmJiBiLm5hbWUgPT09ICJ0YW5nZW50IjsgfSk7CisgICAgICAgICAgICBpZiAoIXRhbmdlbnRJ
bnB1dCkgeworICAgICAgICAgICAgICAgIHRhbmdlbnRJbnB1dCA9IG5ldyBfSW5wdXRfaW5wdXRC
bG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJJbnB1dEJsb2NrIl0oInRhbmdlbnQi
KTsKKyAgICAgICAgICAgICAgICB0YW5nZW50SW5wdXQuc2V0QXNBdHRyaWJ1dGUoInRhbmdlbnQi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhbmdlbnRJbnB1dC5vdXRwdXQuY29ubmVj
dFRvKHRoaXMudGFuZ2VudCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnV2LmlzQ29u
bmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgdXZJbnB1dCA9IG1hdGVyaWFsLmdldElucHV0Qmxv
Y2tCeVByZWRpY2F0ZShmdW5jdGlvbiAoYikgeyByZXR1cm4gYi5pc0F0dHJpYnV0ZSAmJiBiLm5h
bWUgPT09ICJ1diI7IH0pOworICAgICAgICAgICAgaWYgKCF1dklucHV0KSB7CisgICAgICAgICAg
ICAgICAgdXZJbnB1dCA9IG5ldyBfSW5wdXRfaW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJJbnB1dEJsb2NrIl0oInV2Iik7CisgICAgICAgICAgICAgICAgdXZJbnB1dC5z
ZXRBc0F0dHJpYnV0ZSgidXYiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHV2SW5wdXQu
b3V0cHV0LmNvbm5lY3RUbyh0aGlzLnV2KTsKKyAgICAgICAgfQorICAgIH07CisgICAgTW9ycGhU
YXJnZXRzQmxvY2sucHJvdG90eXBlLnByZXBhcmVEZWZpbmVzID0gZnVuY3Rpb24gKG1lc2gsIG5v
ZGVNYXRlcmlhbCwgZGVmaW5lcykgeworICAgICAgICBpZiAoIWRlZmluZXMuX2FyZUF0dHJpYnV0
ZXNEaXJ0eSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIF9tYXRl
cmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRlcmlhbEhlbHBlciJd
LlByZXBhcmVEZWZpbmVzRm9yTW9ycGhUYXJnZXRzKG1lc2gsIGRlZmluZXMpOworICAgIH07Cisg
ICAgTW9ycGhUYXJnZXRzQmxvY2sucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZWZmZWN0LCBu
b2RlTWF0ZXJpYWwsIG1lc2gpIHsKKyAgICAgICAgaWYgKG1lc2ggJiYgdGhpcy5fcmVwZWF0ZWJs
ZUNvbnRlbnRHZW5lcmF0ZWQpIHsKKyAgICAgICAgICAgIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRNb3JwaFRhcmdldFBh
cmFtZXRlcnMobWVzaCwgZWZmZWN0KTsKKyAgICAgICAgfQorICAgIH07CisgICAgTW9ycGhUYXJn
ZXRzQmxvY2sucHJvdG90eXBlLnJlcGxhY2VSZXBlYXRhYmxlQ29udGVudCA9IGZ1bmN0aW9uICh2
ZXJ0ZXhTaGFkZXJTdGF0ZSwgZnJhZ21lbnRTaGFkZXJTdGF0ZSwgbWVzaCwgZGVmaW5lcykgewor
ICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uOworICAgICAgICB2YXIgbm9ybWFs
ID0gdGhpcy5ub3JtYWw7CisgICAgICAgIHZhciB0YW5nZW50ID0gdGhpcy50YW5nZW50OworICAg
ICAgICB2YXIgdXYgPSB0aGlzLnV2OworICAgICAgICB2YXIgcG9zaXRpb25PdXRwdXQgPSB0aGlz
LnBvc2l0aW9uT3V0cHV0OworICAgICAgICB2YXIgbm9ybWFsT3V0cHV0ID0gdGhpcy5ub3JtYWxP
dXRwdXQ7CisgICAgICAgIHZhciB0YW5nZW50T3V0cHV0ID0gdGhpcy50YW5nZW50T3V0cHV0Owor
ICAgICAgICB2YXIgdXZPdXRwdXQgPSB0aGlzLnV2T3V0cHV0OworICAgICAgICB2YXIgc3RhdGUg
PSB2ZXJ0ZXhTaGFkZXJTdGF0ZTsKKyAgICAgICAgdmFyIHJlcGVhdENvdW50ID0gZGVmaW5lcy5O
VU1fTU9SUEhfSU5GTFVFTkNFUlM7CisgICAgICAgIHRoaXMuX3JlcGVhdGVibGVDb250ZW50R2Vu
ZXJhdGVkID0gcmVwZWF0Q291bnQ7CisgICAgICAgIHZhciBtYW5hZ2VyID0gbWVzaC5tb3JwaFRh
cmdldE1hbmFnZXI7CisgICAgICAgIHZhciBoYXNOb3JtYWxzID0gbWFuYWdlciAmJiBtYW5hZ2Vy
LnN1cHBvcnRzTm9ybWFscyAmJiBkZWZpbmVzWyJOT1JNQUwiXTsKKyAgICAgICAgdmFyIGhhc1Rh
bmdlbnRzID0gbWFuYWdlciAmJiBtYW5hZ2VyLnN1cHBvcnRzVGFuZ2VudHMgJiYgZGVmaW5lc1si
VEFOR0VOVCJdOworICAgICAgICB2YXIgaGFzVVZzID0gbWFuYWdlciAmJiBtYW5hZ2VyLnN1cHBv
cnRzVVZzICYmIGRlZmluZXNbIlVWMSJdOworICAgICAgICB2YXIgaW5qZWN0aW9uQ29kZSA9ICIi
OworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcmVwZWF0Q291bnQ7IGluZGV4
KyspIHsKKyAgICAgICAgICAgIGluamVjdGlvbkNvZGUgKz0gIiNpZmRlZiBNT1JQSFRBUkdFVFNc
clxuIjsKKyAgICAgICAgICAgIGluamVjdGlvbkNvZGUgKz0gcG9zaXRpb25PdXRwdXQuYXNzb2Np
YXRlZFZhcmlhYmxlTmFtZSArICIgKz0gKHBvc2l0aW9uIiArIGluZGV4ICsgIiAtICIgKyBwb3Np
dGlvbi5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIikgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNb
IiArIGluZGV4ICsgIl07XHJcbiI7CisgICAgICAgICAgICBpZiAoaGFzTm9ybWFscykgeworICAg
ICAgICAgICAgICAgIGluamVjdGlvbkNvZGUgKz0gIiNpZmRlZiBNT1JQSFRBUkdFVFNfTk9STUFM
XHJcbiI7CisgICAgICAgICAgICAgICAgaW5qZWN0aW9uQ29kZSArPSBub3JtYWxPdXRwdXQuYXNz
b2NpYXRlZFZhcmlhYmxlTmFtZSArICIgKz0gKG5vcm1hbCIgKyBpbmRleCArICIgLSAiICsgbm9y
bWFsLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1si
ICsgaW5kZXggKyAiXTtcclxuIjsKKyAgICAgICAgICAgICAgICBpbmplY3Rpb25Db2RlICs9ICIj
ZW5kaWZcclxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoYXNUYW5nZW50cykg
eworICAgICAgICAgICAgICAgIGluamVjdGlvbkNvZGUgKz0gIiNpZmRlZiBNT1JQSFRBUkdFVFNf
VEFOR0VOVFxyXG4iOworICAgICAgICAgICAgICAgIGluamVjdGlvbkNvZGUgKz0gdGFuZ2VudE91
dHB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi54eXogKz0gKHRhbmdlbnQiICsgaW5kZXgg
KyAiIC0gIiArIHRhbmdlbnQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIueHl6KSAqIG1vcnBo
VGFyZ2V0SW5mbHVlbmNlc1siICsgaW5kZXggKyAiXTtcclxuIjsKKyAgICAgICAgICAgICAgICBp
bmplY3Rpb25Db2RlICs9ICIjZW5kaWZcclxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChoYXNVVnMpIHsKKyAgICAgICAgICAgICAgICBpbmplY3Rpb25Db2RlICs9ICIjaWZkZWYg
TU9SUEhUQVJHRVRTX1VWXHJcbiI7CisgICAgICAgICAgICAgICAgaW5qZWN0aW9uQ29kZSArPSB1
dk91dHB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi54eXogKz0gKHV2XyIgKyBpbmRleCAr
ICIgLSAiICsgdXYuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIueHl6KSAqIG1vcnBoVGFyZ2V0
SW5mbHVlbmNlc1siICsgaW5kZXggKyAiXTtcclxuIjsKKyAgICAgICAgICAgICAgICBpbmplY3Rp
b25Db2RlICs9ICIjZW5kaWZcclxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluamVj
dGlvbkNvZGUgKz0gIiNlbmRpZlxyXG4iOworICAgICAgICB9CisgICAgICAgIHN0YXRlLmNvbXBp
bGF0aW9uU3RyaW5nID0gc3RhdGUuY29tcGlsYXRpb25TdHJpbmcucmVwbGFjZSh0aGlzLl9yZXBl
YXRhYmxlQ29udGVudEFuY2hvciwgaW5qZWN0aW9uQ29kZSk7CisgICAgICAgIGlmIChyZXBlYXRD
b3VudCA+IDApIHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCByZXBl
YXRDb3VudDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHN0YXRlLmF0dHJpYnV0ZXMucHVz
aChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZm
ZXIiXS5Qb3NpdGlvbktpbmQgKyBpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGhhc05vcm1h
bHMpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuYXR0cmlidXRlcy5wdXNoKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlcnRleEJ1ZmZlciJdLk5vcm1h
bEtpbmQgKyBpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICho
YXNUYW5nZW50cykgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hdHRyaWJ1dGVzLnB1c2go
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVy
Il0uVGFuZ2VudEtpbmQgKyBpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKyAgICBNb3JwaFRhcmdldHNCbG9jay5wcm90b3R5cGUuX2J1
aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5f
YnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIGRl
ZmluZXMKKyAgICAgICAgc3RhdGUuc2hhcmVkRGF0YS5ibG9ja3NXaXRoRGVmaW5lcy5wdXNoKHRo
aXMpOworICAgICAgICAvLyBSZWdpc3RlciBmb3IgYmluZGluZworICAgICAgICBzdGF0ZS5zaGFy
ZWREYXRhLmJpbmRhYmxlQmxvY2tzLnB1c2godGhpcyk7CisgICAgICAgIC8vIFJlZ2lzdGVyIGZv
ciByZXBlYXRhYmxlIGNvbnRlbnQgZ2VuZXJhdGlvbgorICAgICAgICBzdGF0ZS5zaGFyZWREYXRh
LnJlcGVhdGFibGVDb250ZW50QmxvY2tzLnB1c2godGhpcyk7CisgICAgICAgIC8vIEVtaXQgY29k
ZQorICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uOworICAgICAgICB2YXIgbm9y
bWFsID0gdGhpcy5ub3JtYWw7CisgICAgICAgIHZhciB0YW5nZW50ID0gdGhpcy50YW5nZW50Owor
ICAgICAgICB2YXIgdXYgPSB0aGlzLnV2OworICAgICAgICB2YXIgcG9zaXRpb25PdXRwdXQgPSB0
aGlzLnBvc2l0aW9uT3V0cHV0OworICAgICAgICB2YXIgbm9ybWFsT3V0cHV0ID0gdGhpcy5ub3Jt
YWxPdXRwdXQ7CisgICAgICAgIHZhciB0YW5nZW50T3V0cHV0ID0gdGhpcy50YW5nZW50T3V0cHV0
OworICAgICAgICB2YXIgdXZPdXRwdXQgPSB0aGlzLnV2T3V0cHV0OworICAgICAgICB2YXIgY29t
bWVudHMgPSAiLy8iICsgdGhpcy5uYW1lOworICAgICAgICBzdGF0ZS51bmlmb3Jtcy5wdXNoKCJt
b3JwaFRhcmdldEluZmx1ZW5jZXMiKTsKKyAgICAgICAgc3RhdGUuX2VtaXRGdW5jdGlvbkZyb21J
bmNsdWRlKCJtb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbiIsIGNvbW1lbnRzKTsK
KyAgICAgICAgc3RhdGUuX2VtaXRGdW5jdGlvbkZyb21JbmNsdWRlKCJtb3JwaFRhcmdldHNWZXJ0
ZXhEZWNsYXJhdGlvbiIsIGNvbW1lbnRzLCB7CisgICAgICAgICAgICByZXBlYXRLZXk6ICJtYXhT
aW11bHRhbmVvdXNNb3JwaFRhcmdldHMiCisgICAgICAgIH0pOworICAgICAgICBzdGF0ZS5jb21w
aWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KHBvc2l0aW9uT3V0cHV0LCBzdGF0
ZSkgKyAiID0gIiArIHBvc2l0aW9uLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiO1xyXG4iOwor
ICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2lmZGVmIE5PUk1BTFxyXG4iOwor
ICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG5v
cm1hbE91dHB1dCwgc3RhdGUpICsgIiA9ICIgKyBub3JtYWwuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICI7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZc
clxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZmRlZiBUQU5HRU5U
XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVP
dXRwdXQodGFuZ2VudE91dHB1dCwgc3RhdGUpICsgIiA9ICIgKyB0YW5nZW50LmFzc29jaWF0ZWRW
YXJpYWJsZU5hbWUgKyAiO1xyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyAr
PSAiI2VuZGlmXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjaWZk
ZWYgVVYxXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2Rl
Y2xhcmVPdXRwdXQodXZPdXRwdXQsIHN0YXRlKSArICIgPSAiICsgdXYuYXNzb2NpYXRlZFZhcmlh
YmxlTmFtZSArICI7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIj
ZW5kaWZcclxuIjsKKyAgICAgICAgLy8gUmVwZWF0YWJsZSBjb250ZW50CisgICAgICAgIHRoaXMu
X3JlcGVhdGFibGVDb250ZW50QW5jaG9yID0gc3RhdGUuX3JlcGVhdGFibGVDb250ZW50QW5jaG9y
OworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9yZXBlYXRhYmxlQ29u
dGVudEFuY2hvcjsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4gTW9y
cGhUYXJnZXRzQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJC
QUJZTE9OLk1vcnBoVGFyZ2V0c0Jsb2NrIl0gPSBNb3JwaFRhcmdldHNCbG9jazsKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL1ZlcnRleC92ZXJ0ZXhPdXRw
dXRCbG9jay50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL1Zl
cnRleC92ZXJ0ZXhPdXRwdXRCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBWZXJ0ZXhPdXRwdXRCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJWZXJ0ZXhPdXRwdXRCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVmVydGV4T3V0cHV0
QmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9k
ZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4vTWF0ZXJpYWxz
L05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzICov
ICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vTWlzYy90eXBlU3Rv
cmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisvKioKKyAqIEJsb2NrIHVz
ZWQgdG8gb3V0cHV0IHRoZSB2ZXJ0ZXggcG9zaXRpb24KKyAqLwordmFyIFZlcnRleE91dHB1dEJs
b2NrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFZlcnRleE91dHB1dEJsb2NrLCBf
c3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgVmVydGV4T3V0cHV0QmxvY2sK
KyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBibG9jayBuYW1lCisgICAgICovCisgICAg
ZnVuY3Rpb24gVmVydGV4T3V0cHV0QmxvY2sobmFtZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBf
c3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleCwg
dHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgidmVjdG9yIiwgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQp
OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgdGhl
IGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAg
ICovCisgICAgVmVydGV4T3V0cHV0QmxvY2sucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJWZXJ0ZXhPdXRwdXRCbG9jayI7CisgICAgfTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVydGV4T3V0cHV0QmxvY2sucHJvdG90eXBlLCAidmVj
dG9yIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdmVjdG9yIGlucHV0IGNv
bXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBWZXJ0
ZXhPdXRwdXRCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsK
KyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsK
KyAgICAgICAgdmFyIGlucHV0ID0gdGhpcy52ZWN0b3I7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0
aW9uU3RyaW5nICs9ICJnbF9Qb3NpdGlvbiA9ICIgKyBpbnB1dC5hc3NvY2lhdGVkVmFyaWFibGVO
YW1lICsgIjtcclxuIjsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4g
VmVydGV4T3V0cHV0QmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVz
WyJCQUJZTE9OLlZlcnRleE91dHB1dEJsb2NrIl0gPSBWZXJ0ZXhPdXRwdXRCbG9jazsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2FkZEJsb2NrLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9hZGRCbG9jay50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IEFkZEJsb2NrICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFkZEJsb2Nr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBBZGRCbG9jazsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJp
YWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01hdGVyaWFs
cy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8u
Li9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisKKy8q
KgorICogQmxvY2sgdXNlZCB0byBhZGQgMiB2ZWN0b3JzCisgKi8KK3ZhciBBZGRCbG9jayA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShBZGRCbG9jaywgX3N1cGVyKTsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgbmV3IEFkZEJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5l
cyB0aGUgYmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIEFkZEJsb2NrKG5hbWUpIHsK
KyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiXS5OZXV0cmFsKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdpc3Rlcklu
cHV0KCJsZWZ0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlcyJdLkF1dG9EZXRlY3QpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJyaWdodCIs
IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5BdXRv
RGV0ZWN0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoIm91dHB1dCIsIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5CYXNlZE9uSW5wdXQp
OworICAgICAgICBfdGhpcy5fb3V0cHV0c1swXS5fdHlwZUNvbm5lY3Rpb25Tb3VyY2UgPSBfdGhp
cy5faW5wdXRzWzBdOworICAgICAgICBfdGhpcy5fbGlua0Nvbm5lY3Rpb25UeXBlcygwLCAxKTsK
KyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBj
dXJyZW50IGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAq
LworICAgIEFkZEJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiAiQWRkQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KEFkZEJsb2NrLnByb3RvdHlwZSwgImxlZnQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBsZWZ0IG9wZXJhbmQgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNb
MF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBZGRCbG9j
ay5wcm90b3R5cGUsICJyaWdodCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhl
IHJpZ2h0IG9wZXJhbmQgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMV07CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBZGRCbG9jay5wcm90b3R5
cGUsICJvdXRwdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBvdXRwdXQg
Y29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBB
ZGRCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAg
ICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAg
ICAgdmFyIG91dHB1dCA9IHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIHN0YXRlLmNvbXBpbGF0
aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIg
KyB0aGlzLmxlZnQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIgKyAiICsgdGhpcy5yaWdodC5h
c3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIjtcclxuIik7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgcmV0dXJuIEFkZEJsb2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190
eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lz
dGVyZWRUeXBlc1siQkFCWUxPTi5BZGRCbG9jayJdID0gQWRkQmxvY2s7CisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9jbGFtcEJsb2NrLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWF0ZXJpYWxzL05vZGUvQmxvY2tzL2NsYW1wQmxvY2sudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IENsYW1wQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2xhbXBC
bG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ2xhbXBCbG9jazsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2
LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2Rl
TWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01h
dGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2Rl
TWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKwor
CisKKy8qKgorICogQmxvY2sgdXNlZCB0byBjbGFtcCBhIGZsb2F0CisgKi8KK3ZhciBDbGFtcEJs
b2NrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKENsYW1wQmxvY2ssIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBDbGFtcEJsb2NrCisgICAgICogQHBhcmFt
IG5hbWUgZGVmaW5lcyB0aGUgYmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIENsYW1w
QmxvY2sobmFtZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1l
LCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
Ik5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLk5ldXRyYWwpIHx8IHRoaXM7CisgICAgICAgIC8q
KiBHZXRzIG9yIHNldHMgdGhlIG1pbmltdW0gcmFuZ2UgKi8KKyAgICAgICAgX3RoaXMubWluaW11
bSA9IDAuMDsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyB0aGUgbWF4aW11bSByYW5nZSAqLwor
ICAgICAgICBfdGhpcy5tYXhpbXVtID0gMS4wOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0
KCJ2YWx1ZSIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXMiXS5GbG9hdCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQpOwor
ICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1
cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICov
CisgICAgQ2xhbXBCbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gIkNsYW1wQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KENsYW1wQmxvY2sucHJvdG90eXBlLCAidmFsdWUiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sw
XTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENsYW1wQmxv
Y2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgQ2xhbXBCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3Rh
dGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0
YXRlKTsKKyAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIHN0
YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0
ZSkgKyAoIiA9IGNsYW1wKCIgKyB0aGlzLnZhbHVlLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAi
LCAiICsgdGhpcy5fd3JpdGVGbG9hdCh0aGlzLm1pbmltdW0pICsgIiwgIiArIHRoaXMuX3dyaXRl
RmxvYXQodGhpcy5tYXhpbXVtKSArICIpO1xyXG4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICBDbGFtcEJsb2NrLnByb3RvdHlwZS5fZHVtcFByb3BlcnRpZXNDb2RlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgY29kZVN0cmluZyA9IHRoaXMuX2NvZGVWYXJpYWJsZU5h
bWUgKyAiLm1pbmltdW0gPSAiICsgdGhpcy5taW5pbXVtICsgIjtcclxuIjsKKyAgICAgICAgY29k
ZVN0cmluZyArPSB0aGlzLl9jb2RlVmFyaWFibGVOYW1lICsgIi5tYXhpbXVtID0gIiArIHRoaXMu
bWF4aW11bSArICI7XHJcbiI7CisgICAgICAgIHJldHVybiBjb2RlU3RyaW5nOworICAgIH07Cisg
ICAgQ2xhbXBCbG9jay5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9zdXBlci5wcm90b3R5cGUuc2VyaWFsaXplLmNh
bGwodGhpcyk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWluaW11bSA9IHRoaXMubWlu
aW11bTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXhpbXVtID0gdGhpcy5tYXhpbXVt
OworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIENsYW1w
QmxvY2sucHJvdG90eXBlLl9kZXNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2Jq
ZWN0LCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9kZXNlcmlh
bGl6ZS5jYWxsKHRoaXMsIHNlcmlhbGl6YXRpb25PYmplY3QsIHNjZW5lLCByb290VXJsKTsKKyAg
ICAgICAgdGhpcy5taW5pbXVtID0gc2VyaWFsaXphdGlvbk9iamVjdC5taW5pbXVtOworICAgICAg
ICB0aGlzLm1heGltdW0gPSBzZXJpYWxpemF0aW9uT2JqZWN0Lm1heGltdW07CisgICAgfTsKKyAg
ICByZXR1cm4gQ2xhbXBCbG9jazsKK30oX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2NrIl0pKTsKKworX01pc2NfdHlwZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlw
ZXNbIkJBQllMT04uQ2xhbXBCbG9jayJdID0gQ2xhbXBCbG9jazsKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2NvbG9yTWVyZ2VyQmxvY2sudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvY29sb3JNZXJnZXJCbG9jay50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogQ29sb3JNZXJnZXJCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJDb2xvck1lcmdlckJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBDb2xvck1lcmdlckJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNs
aWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrICovICIu
L01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdHlwZVN0
b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKworLyoqCisgKiBCbG9jayB1
c2VkIHRvIGNyZWF0ZSBhIENvbG9yMy80IG91dCBvZiBpbmRpdmlkdWFsIGlucHV0cyAob25lIGZv
ciBlYWNoIGNvbXBvbmVudCkKKyAqLwordmFyIENvbG9yTWVyZ2VyQmxvY2sgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19leHRlbmRzIl0oQ29sb3JNZXJnZXJCbG9jaywgX3N1cGVyKTsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGUgYSBuZXcgQ29sb3JNZXJnZXJCbG9jaworICAgICAqIEBwYXJhbSBuYW1l
IGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDb2xvck1lcmdl
ckJsb2NrKG5hbWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFt
ZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCkgfHwgdGhpczsKKyAgICAgICAg
X3RoaXMucmVnaXN0ZXJJbnB1dCgiciIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCwgdHJ1ZSk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVy
SW5wdXQoImciLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzIl0uRmxvYXQsIHRydWUpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJiIiwgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0LCB0
cnVlKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgiYSIsIF9ub2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCwgdHJ1ZSk7CisgICAgICAg
IF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJyZ2JhIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVy
T3V0cHV0KCJyZ2IiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzIl0uQ29sb3IzKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioK
KyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y2xhc3MgbmFtZQorICAgICAqLworICAgIENvbG9yTWVyZ2VyQmxvY2sucHJvdG90eXBlLmdldENs
YXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJDb2xvck1lcmdlckJsb2Nr
IjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvck1lcmdlckJsb2NrLnBy
b3RvdHlwZSwgInIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByIGNvbXBv
bmVudCAoaW5wdXQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvck1lcmdlckJsb2NrLnByb3RvdHlwZSwgImciLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBnIGNvbXBvbmVudCAoaW5wdXQpCisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9pbnB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShDb2xvck1lcmdlckJsb2NrLnByb3RvdHlwZSwgImIiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHRoZSBiIGNvbXBvbmVudCAoaW5wdXQpCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNb
Ml07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvck1l
cmdlckJsb2NrLnByb3RvdHlwZSwgImEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSBhIGNvbXBvbmVudCAoaW5wdXQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbM107CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvck1lcmdlckJsb2NrLnByb3Rv
dHlwZSwgInJnYmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByZ2JhIGNv
bXBvbmVudCAob3V0cHV0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yTWVyZ2VyQmxvY2sucHJvdG90eXBlLCAi
cmdiIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgcmdiIGNvbXBvbmVudCAo
b3V0cHV0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgQ29s
b3JNZXJnZXJCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsK
KyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsK
KyAgICAgICAgdmFyIHJJbnB1dCA9IHRoaXMucjsKKyAgICAgICAgdmFyIGdJbnB1dCA9IHRoaXMu
ZzsKKyAgICAgICAgdmFyIGJJbnB1dCA9IHRoaXMuYjsKKyAgICAgICAgdmFyIGFJbnB1dCA9IHRo
aXMuYTsKKyAgICAgICAgdmFyIGNvbG9yNE91dHB1dCA9IHRoaXMuX291dHB1dHNbMF07CisgICAg
ICAgIHZhciBjb2xvcjNPdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzFdOworICAgICAgICBpZiAoY29s
b3I0T3V0cHV0Lmhhc0VuZHBvaW50cykgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25T
dHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChjb2xvcjRPdXRwdXQsIHN0YXRlKSArICgiID0g
dmVjNCgiICsgKHJJbnB1dC5pc0Nvbm5lY3RlZCA/IHRoaXMuX3dyaXRlVmFyaWFibGUocklucHV0
KSA6ICIwLjAiKSArICIsICIgKyAoZ0lucHV0LmlzQ29ubmVjdGVkID8gdGhpcy5fd3JpdGVWYXJp
YWJsZShnSW5wdXQpIDogIjAuMCIpICsgIiwgIiArIChiSW5wdXQuaXNDb25uZWN0ZWQgPyB0aGlz
Ll93cml0ZVZhcmlhYmxlKGJJbnB1dCkgOiAiMC4wIikgKyAiLCAiICsgKGFJbnB1dC5pc0Nvbm5l
Y3RlZCA/IHRoaXMuX3dyaXRlVmFyaWFibGUoYUlucHV0KSA6ICIwLjAiKSArICIpO1xyXG4iKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb2xvcjNPdXRwdXQuaGFzRW5kcG9pbnRzKSB7
CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0
cHV0KGNvbG9yM091dHB1dCwgc3RhdGUpICsgKCIgPSB2ZWMzKCIgKyAocklucHV0LmlzQ29ubmVj
dGVkID8gdGhpcy5fd3JpdGVWYXJpYWJsZShySW5wdXQpIDogIjAuMCIpICsgIiwgIiArIChnSW5w
dXQuaXNDb25uZWN0ZWQgPyB0aGlzLl93cml0ZVZhcmlhYmxlKGdJbnB1dCkgOiAiMC4wIikgKyAi
LCAiICsgKGJJbnB1dC5pc0Nvbm5lY3RlZCA/IHRoaXMuX3dyaXRlVmFyaWFibGUoYklucHV0KSA6
ICIwLjAiKSArICIpO1xyXG4iKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9OworICAgIHJldHVybiBDb2xvck1lcmdlckJsb2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitf
TWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJd
LlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5Db2xvck1lcmdlckJsb2NrIl0gPSBDb2xvck1lcmdl
ckJsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3Mv
Y29sb3JTcGxpdHRlckJsb2NrLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9j
a3MvY29sb3JTcGxpdHRlckJsb2NrLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENv
bG9yU3BsaXR0ZXJCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJD
b2xvclNwbGl0dGVyQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvbG9yU3BsaXR0ZXJCbG9j
azsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25v
ZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9u
b2RlTWF0ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxz
L05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5
cGVTdG9yZS50cyIpOworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBleHBhbmQgYSBD
b2xvcjMvNCBpbnRvIDQgb3V0cHV0cyAob25lIGZvciBlYWNoIGNvbXBvbmVudCkKKyAqLwordmFy
IENvbG9yU3BsaXR0ZXJCbG9jayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShDb2xv
clNwbGl0dGVyQmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IENv
bG9yU3BsaXR0ZXJCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5h
bWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDb2xvclNwbGl0dGVyQmxvY2sobmFtZSkgeworICAg
ICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2Nr
VGFyZ2V0cyJdLkZyYWdtZW50KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0
KCJyZ2JhIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLkNvbG9yNCwgdHJ1ZSk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoInJnYiAiLCBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3Iz
LCB0cnVlKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoInJnYiIsIF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5Db2xvcjMpOworICAgICAg
ICBfdGhpcy5yZWdpc3Rlck91dHB1dCgiciIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0
cHV0KCJnIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLkZsb2F0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoImIiLCBfbm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQpOworICAgICAg
ICBfdGhpcy5yZWdpc3Rlck91dHB1dCgiYSIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAg
ICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICog
QHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBDb2xvclNwbGl0dGVyQmxvY2su
cHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJD
b2xvclNwbGl0dGVyQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENv
bG9yU3BsaXR0ZXJCbG9jay5wcm90b3R5cGUsICJyZ2JhIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyB0aGUgcmdiYSBjb21wb25lbnQgKGlucHV0KQorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBd
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JTcGxp
dHRlckJsb2NrLnByb3RvdHlwZSwgInJnYkluIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgcmdiIGNvbXBvbmVudCAoaW5wdXQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMV07CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclNwbGl0dGVyQmxv
Y2sucHJvdG90eXBlLCAicmdiT3V0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgcmdiIGNvbXBvbmVudCAob3V0cHV0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yU3BsaXR0ZXJCbG9jay5w
cm90b3R5cGUsICJyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgciBjb21w
b25lbnQgKG91dHB1dCkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclNwbGl0dGVyQmxvY2sucHJvdG90eXBlLCAi
ZyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGcgY29tcG9uZW50IChvdXRw
dXQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9vdXRwdXRzWzJdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoQ29sb3JTcGxpdHRlckJsb2NrLnByb3RvdHlwZSwgImIiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBiIGNvbXBvbmVudCAob3V0cHV0KQorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fb3V0cHV0c1szXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KENvbG9yU3BsaXR0ZXJCbG9jay5wcm90b3R5cGUsICJhIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgYSBjb21wb25lbnQgKG91dHB1dCkKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNb
NF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIENvbG9yU3BsaXR0ZXJCbG9jay5wcm90b3R5cGUu
X2lucHV0UmVuYW1lID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgaWYgKG5hbWUgPT09ICJy
Z2IgIikgeworICAgICAgICAgICAgcmV0dXJuICJyZ2JJbiI7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG5hbWU7CisgICAgfTsKKyAgICBDb2xvclNwbGl0dGVyQmxvY2sucHJvdG90eXBlLl9v
dXRwdXRSZW5hbWUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICBpZiAobmFtZSA9PT0gInJn
YiIpIHsKKyAgICAgICAgICAgIHJldHVybiAicmdiT3V0IjsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbmFtZTsKKyAgICB9OworICAgIENvbG9yU3BsaXR0ZXJCbG9jay5wcm90b3R5cGUuX2J1
aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5f
YnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5y
Z2JhLmlzQ29ubmVjdGVkID8gdGhpcy5yZ2JhIDogdGhpcy5yZ2JJbjsKKyAgICAgICAgaWYgKCFp
bnB1dC5pc0Nvbm5lY3RlZCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHZhciByZ2JPdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB2YXIgck91dHB1
dCA9IHRoaXMuX291dHB1dHNbMV07CisgICAgICAgIHZhciBnT3V0cHV0ID0gdGhpcy5fb3V0cHV0
c1syXTsKKyAgICAgICAgdmFyIGJPdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzNdOworICAgICAgICB2
YXIgYU91dHB1dCA9IHRoaXMuX291dHB1dHNbNF07CisgICAgICAgIGlmIChyZ2JPdXRwdXQuaGFz
RW5kcG9pbnRzKSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlz
Ll9kZWNsYXJlT3V0cHV0KHJnYk91dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgaW5wdXQuYXNzb2Np
YXRlZFZhcmlhYmxlTmFtZSArICIucmdiO1xyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ck91dHB1dC5oYXNFbmRwb2ludHMpIHsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3Ry
aW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQock91dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgaW5w
dXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIucjtcclxuIik7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGdPdXRwdXQuaGFzRW5kcG9pbnRzKSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxh
dGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KGdPdXRwdXQsIHN0YXRlKSArICgiID0g
IiArIGlucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLmc7XHJcbiIpOworICAgICAgICB9
CisgICAgICAgIGlmIChiT3V0cHV0Lmhhc0VuZHBvaW50cykgeworICAgICAgICAgICAgc3RhdGUu
Y29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChiT3V0cHV0LCBzdGF0ZSkg
KyAoIiA9ICIgKyBpbnB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi5iO1xyXG4iKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoYU91dHB1dC5oYXNFbmRwb2ludHMpIHsKKyAgICAgICAgICAg
IHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQoYU91dHB1dCwg
c3RhdGUpICsgKCIgPSAiICsgaW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIuYTtcclxu
Iik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4g
Q29sb3JTcGxpdHRlckJsb2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBl
c1siQkFCWUxPTi5Db2xvclNwbGl0dGVyQmxvY2siXSA9IENvbG9yU3BsaXR0ZXJCbG9jazsKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2Nyb3NzQmxvY2su
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvY3Jvc3NCbG9jay50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogQ3Jvc3NCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJDcm9zc0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDcm9zc0Jsb2NrOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xp
Yi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFs
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlh
bEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2Rl
TWF0ZXJpYWxCbG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlz
Y190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRz
Iik7CisKKworCisKKworLyoqCisgKiBCbG9jayB1c2VkIHRvIGFwcGx5IGEgY3Jvc3MgcHJvZHVj
dCBiZXR3ZWVuIDIgdmVjdG9ycworICovCit2YXIgQ3Jvc3NCbG9jayA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShDcm9zc0Jsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBuZXcgQ3Jvc3NCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJs
b2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDcm9zc0Jsb2NrKG5hbWUpIHsKKyAgICAg
ICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlhbEJsb2Nr
VGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHMiXS5OZXV0cmFsKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJs
ZWZ0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJd
LkF1dG9EZXRlY3QpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJyaWdodCIsIF9ub2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5BdXRvRGV0ZWN0
KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoIm91dHB1dCIsIF9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5CYXNlZE9uSW5wdXQpOworICAg
ICAgICBfdGhpcy5fb3V0cHV0c1swXS5fdHlwZUNvbm5lY3Rpb25Tb3VyY2UgPSBfdGhpcy5faW5w
dXRzWzBdOworICAgICAgICBfdGhpcy5fbGlua0Nvbm5lY3Rpb25UeXBlcygwLCAxKTsKKyAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50
IGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAg
IENyb3NzQmxvY2sucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICJDcm9zc0Jsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShDcm9zc0Jsb2NrLnByb3RvdHlwZSwgImxlZnQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBsZWZ0IG9wZXJhbmQgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNb
MF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDcm9zc0Js
b2NrLnByb3RvdHlwZSwgInJpZ2h0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgcmlnaHQgb3BlcmFuZCBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENyb3NzQmxvY2sucHJv
dG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0
cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgQ3Jvc3NCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsK
KyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsK
KyAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIHN0YXRlLmNv
bXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAo
IiA9IGNyb3NzKCIgKyB0aGlzLmxlZnQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIsICIgKyB0
aGlzLnJpZ2h0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiKTtcclxuIik7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgcmV0dXJuIENyb3NzQmxvY2s7Cit9KF9ub2RlTWF0ZXJp
YWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJd
KSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlw
ZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLkNyb3NzQmxvY2siXSA9IENyb3NzQmxv
Y2s7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9kaXZp
ZGVCbG9jay50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvZGl2aWRlQmxvY2sudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBEaXZpZGVCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJEaXZpZGVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGl2aWRl
QmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9k
ZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05v
ZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzICovICIuL01hdGVy
aWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlz
Yy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisvKioKKyAqIEJsb2NrIHVzZWQgdG8gZGl2aWRl
IDIgdmVjdG9ycworICovCit2YXIgRGl2aWRlQmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19l
eHRlbmRzIl0oRGl2aWRlQmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBh
IG5ldyBEaXZpZGVCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5h
bWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBEaXZpZGVCbG9jayhuYW1lKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRz
Il0uTmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgibGVmdCIs
IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5BdXRv
RGV0ZWN0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgicmlnaHQiLCBfbm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQXV0b0RldGVjdCk7Cisg
ICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklucHV0KTsKKyAgICAgICAg
X3RoaXMuX291dHB1dHNbMF0uX3R5cGVDb25uZWN0aW9uU291cmNlID0gX3RoaXMuX2lucHV0c1sw
XTsKKyAgICAgICAgX3RoaXMuX2xpbmtDb25uZWN0aW9uVHlwZXMoMCwgMSk7CisgICAgICAgIHJl
dHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFz
cyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBEaXZp
ZGVCbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gIkRpdmlkZUJsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShE
aXZpZGVCbG9jay5wcm90b3R5cGUsICJsZWZ0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgbGVmdCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBd
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGl2aWRlQmxv
Y2sucHJvdG90eXBlLCAicmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSByaWdodCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzFdOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGl2aWRlQmxvY2sucHJv
dG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0
cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgRGl2aWRlQmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7
CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7
CisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBzdGF0ZS5j
b21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsg
KCIgPSAiICsgdGhpcy5sZWZ0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiIC8gIiArIHRoaXMu
cmlnaHQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiIpOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIHJldHVybiBEaXZpZGVCbG9jazsKK30oX25vZGVNYXRlcmlhbEJs
b2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2NrIl0pKTsK
KworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIl9UeXBlU3Rv
cmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uRGl2aWRlQmxvY2siXSA9IERpdmlkZUJsb2Nr
OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvZG90Qmxv
Y2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2RvdEJsb2NrLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogRG90QmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
RG90QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIERvdEJsb2NrOyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5l
czYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25v
ZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3Rv
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKwor
CisKKworLyoqCisgKiBCbG9jayB1c2VkIHRvIGFwcGx5IGEgZG90IHByb2R1Y3QgYmV0d2VlbiAy
IHZlY3RvcnMKKyAqLwordmFyIERvdEJsb2NrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9z
dXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5k
cyJdKERvdEJsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgRG90
QmxvY2sKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBibG9jayBuYW1lCisgICAgICov
CisgICAgZnVuY3Rpb24gRG90QmxvY2sobmFtZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3Vw
ZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLk5ldXRyYWwpIHx8
IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoImxlZnQiLCBfbm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJO
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQXV0b0RldGVjdCk7CisgICAg
ICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoInJpZ2h0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRlY3QpOworICAgICAgICBfdGhpcy5y
ZWdpc3Rlck91dHB1dCgib3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0KTsKKyAgICAgICAgX3RoaXMuX2xpbmtDb25uZWN0aW9u
VHlwZXMoMCwgMSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAg
ICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNz
IG5hbWUKKyAgICAgKi8KKyAgICBEb3RCbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkRvdEJsb2NrIjsKKyAgICB9OworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShEb3RCbG9jay5wcm90b3R5cGUsICJsZWZ0IiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyB0aGUgbGVmdCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5faW5wdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoRG90QmxvY2sucHJvdG90eXBlLCAicmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSByaWdodCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5w
dXRzWzFdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRG90
QmxvY2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgRG90QmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0
YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBz
dGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBz
dGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3Rh
dGUpICsgKCIgPSBkb3QoIiArIHRoaXMubGVmdC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiwg
IiArIHRoaXMucmlnaHQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIpO1xyXG4iKTsKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4gRG90QmxvY2s7Cit9KF9ub2RlTWF0
ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9j
ayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJf
VHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLkRvdEJsb2NrIl0gPSBEb3RCbG9j
azsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2ZyZXNu
ZWxCbG9jay50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2ZyZXNuZWxCbG9jay50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBGcmVzbmVsQmxvY2sgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlc25lbEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBG
cmVzbmVsQmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAi
Li4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4vTWF0ZXJp
YWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4vTWF0ZXJpYWxzL05v
ZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy90eXBlU3RvcmUgKi8g
Ii4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfSW5wdXRf
aW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9JbnB1dC9pbnB1dEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9J
bnB1dC9pbnB1dEJsb2NrLnRzIik7CisKKworCisKKworCisvKioKKyAqIEJsb2NrIHVzZWQgdG8g
Y29tcHV0ZSBmcmVzbmVsIHZhbHVlCisgKi8KK3ZhciBGcmVzbmVsQmxvY2sgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19leHRlbmRzIl0oRnJlc25lbEJsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIENyZWF0ZSBhIG5ldyBGcmVzbmVsQmxvY2sKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVz
IHRoZSBibG9jayBuYW1lCisgICAgICovCisgICAgZnVuY3Rpb24gRnJlc25lbEJsb2NrKG5hbWUp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMiXS5OZXV0cmFsKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdpc3Rl
cklucHV0KCJ3b3JsZE5vcm1hbCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMiXS5WZWN0b3I0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgi
dmlld0RpcmVjdGlvbiIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXMiXS5WZWN0b3IzKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgiYmlhcyIs
IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9h
dCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoInBvd2VyIiwgX25vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0KTsKKyAgICAgICAgX3Ro
aXMucmVnaXN0ZXJPdXRwdXQoImZyZXNuZWwiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQpOworICAgICAgICByZXR1cm4gX3RoaXM7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAq
IEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgRnJlc25lbEJsb2NrLnByb3Rv
dHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiRnJlc25l
bEJsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGcmVzbmVsQmxvY2su
cHJvdG90eXBlLCAid29ybGROb3JtYWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSB3b3JsZCBub3JtYWwgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMF07Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGcmVzbmVsQmxvY2su
cHJvdG90eXBlLCAidmlld0RpcmVjdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0
cyB0aGUgdmlldyBkaXJlY3Rpb24gaW5wdXQgY29tcG9uZW50CisgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZyZXNuZWxCbG9j
ay5wcm90b3R5cGUsICJiaWFzIiwgeworICAgICAgICAvKioKKyAgICAgICAgKiBHZXRzIHRoZSBi
aWFzIGlucHV0IGNvbXBvbmVudAorICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMl07CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGcmVzbmVsQmxvY2sucHJvdG90eXBlLCAicG93
ZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgdGhlIGNhbWVyYSAob3IgZXllKSBw
b3NpdGlvbiBjb21wb25lbnQKKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzNdOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnJlc25lbEJsb2NrLnByb3RvdHlwZSwgImZyZXNu
ZWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBmcmVzbmVsIG91dHB1dCBj
b21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIEZy
ZXNuZWxCbG9jay5wcm90b3R5cGUuYXV0b0NvbmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCkg
eworICAgICAgICBpZiAoIXRoaXMuYmlhcy5pc0Nvbm5lY3RlZCkgeworICAgICAgICAgICAgdmFy
IGJpYXNJbnB1dCA9IG5ldyBfSW5wdXRfaW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJJbnB1dEJsb2NrIl0oImJpYXMiKTsKKyAgICAgICAgICAgIGJpYXNJbnB1dC52YWx1
ZSA9IDA7CisgICAgICAgICAgICBiaWFzSW5wdXQub3V0cHV0LmNvbm5lY3RUbyh0aGlzLmJpYXMp
OworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5wb3dlci5pc0Nvbm5lY3RlZCkgeworICAg
ICAgICAgICAgdmFyIHBvd2VySW5wdXQgPSBuZXcgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siSW5wdXRCbG9jayJdKCJwb3dlciIpOworICAgICAgICAgICAg
cG93ZXJJbnB1dC52YWx1ZSA9IDE7CisgICAgICAgICAgICBwb3dlcklucHV0Lm91dHB1dC5jb25u
ZWN0VG8odGhpcy5wb3dlcik7CisgICAgICAgIH0KKyAgICB9OworICAgIEZyZXNuZWxCbG9jay5w
cm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVy
LnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgdmFyIGNv
bW1lbnRzID0gIi8vIiArIHRoaXMubmFtZTsKKyAgICAgICAgc3RhdGUuX2VtaXRGdW5jdGlvbkZy
b21JbmNsdWRlKCJmcmVzbmVsRnVuY3Rpb24iLCBjb21tZW50cywgeyByZW1vdmVJZkRlZjogdHJ1
ZSB9KTsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91
dHB1dCh0aGlzLmZyZXNuZWwsIHN0YXRlKSArICgiID0gY29tcHV0ZUZyZXNuZWxUZXJtKCIgKyB0
aGlzLnZpZXdEaXJlY3Rpb24uYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIsICIgKyB0aGlzLndv
cmxkTm9ybWFsLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLCAiICsgdGhpcy5iaWFzLmFzc29j
aWF0ZWRWYXJpYWJsZU5hbWUgKyAiLCAiICsgdGhpcy5wb3dlci5hc3NvY2lhdGVkVmFyaWFibGVO
YW1lICsgIik7XHJcbiIpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVy
biBGcmVzbmVsQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJC
QUJZTE9OLkZyZXNuZWxCbG9jayJdID0gRnJlc25lbEJsb2NrOworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvaW5kZXgudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUv
QmxvY2tzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTXVsdGlwbHlCbG9jaywgQWRkQmxvY2ss
IFNjYWxlQmxvY2ssIENsYW1wQmxvY2ssIENyb3NzQmxvY2ssIERvdEJsb2NrLCBUcmFuc2Zvcm1C
bG9jaywgUmVtYXBCbG9jaywgTm9ybWFsaXplQmxvY2ssIFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0
aW9ucywgVHJpZ29ub21ldHJ5QmxvY2ssIENvbG9yTWVyZ2VyQmxvY2ssIFZlY3Rvck1lcmdlckJs
b2NrLCBDb2xvclNwbGl0dGVyQmxvY2ssIFZlY3RvclNwbGl0dGVyQmxvY2ssIExlcnBCbG9jaywg
RGl2aWRlQmxvY2ssIFN1YnRyYWN0QmxvY2ssIFN0ZXBCbG9jaywgT3Bwb3NpdGVCbG9jaywgVmll
d0RpcmVjdGlvbkJsb2NrLCBGcmVzbmVsQmxvY2ssIE1heEJsb2NrLCBNaW5CbG9jaywgVmVydGV4
T3V0cHV0QmxvY2ssIEJvbmVzQmxvY2ssIEluc3RhbmNlc0Jsb2NrLCBNb3JwaFRhcmdldHNCbG9j
aywgTGlnaHRJbmZvcm1hdGlvbkJsb2NrLCBGcmFnbWVudE91dHB1dEJsb2NrLCBBbHBoYVRlc3RC
bG9jaywgSW1hZ2VQcm9jZXNzaW5nQmxvY2ssIFBlcnR1cmJOb3JtYWxCbG9jaywgRm9nQmxvY2ss
IExpZ2h0QmxvY2ssIFRleHR1cmVCbG9jaywgUmVmbGVjdGlvblRleHR1cmVCbG9jaywgSW5wdXRC
bG9jaywgQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9WZXJ0ZXhfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vVmVydGV4L2luZGV4ICovICIuL01hdGVy
aWFscy9Ob2RlL0Jsb2Nrcy9WZXJ0ZXgvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmVy
dGV4T3V0cHV0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9WZXJ0ZXhfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVydGV4T3V0cHV0QmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQm9uZXNCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1ZlcnRleF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCb25lc0Jsb2NrIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkluc3RhbmNlc0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVmVydGV4
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkluc3RhbmNlc0Jsb2NrIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk1vcnBoVGFyZ2V0c0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfVmVydGV4X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1vcnBoVGFy
Z2V0c0Jsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxpZ2h0SW5mb3JtYXRpb25CbG9j
ayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1ZlcnRleF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJMaWdodEluZm9ybWF0aW9uQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfRnJhZ21lbnRfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vRnJhZ21lbnQvaW5kZXggKi8gIi4vTWF0ZXJpYWxz
L05vZGUvQmxvY2tzL0ZyYWdtZW50L2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyYWdt
ZW50T3V0cHV0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9GcmFnbWVudF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJGcmFnbWVudE91dHB1dEJsb2NrIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkFscGhhVGVzdEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRnJh
Z21lbnRfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWxwaGFUZXN0QmxvY2si
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5nQmxvY2siLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9GcmFnbWVudF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJJbWFnZVByb2Nlc3NpbmdCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQZXJ0dXJi
Tm9ybWFsQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9GcmFnbWVudF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQZXJ0dXJiTm9ybWFsQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfRHVhbF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9EdWFsL2luZGV4ICovICIuL01hdGVyaWFs
cy9Ob2RlL0Jsb2Nrcy9EdWFsL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZvZ0Jsb2Nr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRHVhbF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJGb2dCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaWdodEJsb2NrIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfRHVhbF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJMaWdodEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRleHR1cmVCbG9jayIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0R1YWxfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVGV4dHVyZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlZmxlY3Rpb25U
ZXh0dXJlQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9EdWFsX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlJlZmxlY3Rpb25UZXh0dXJlQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfSW5wdXRfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vSW5wdXQvaW5kZXggKi8gIi4vTWF0ZXJp
YWxzL05vZGUvQmxvY2tzL0lucHV0L2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIklucHV0
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1dF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJJbnB1dEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1h
dGVkSW5wdXRCbG9ja1R5cGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSW5wdXRfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMiXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbXVsdGlwbHlCbG9ja19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tdWx0aXBseUJsb2Nr
ICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9tdWx0aXBseUJsb2NrLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIk11bHRpcGx5QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tdWx0aXBseUJs
b2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk11bHRpcGx5QmxvY2siXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWRkQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWRkQmxvY2sgKi8gIi4vTWF0ZXJp
YWxzL05vZGUvQmxvY2tzL2FkZEJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFkZEJsb2Nr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWRkQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siQWRkQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NhbGVC
bG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9zY2FsZUJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9zY2FsZUJsb2NrLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlNjYWxlQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9z
Y2FsZUJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNjYWxlQmxvY2siXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2xhbXBCbG9ja19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jbGFtcEJsb2NrICovICIu
L01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9jbGFtcEJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkNsYW1wQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jbGFtcEJsb2NrX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIkNsYW1wQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfY3Jvc3NCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9jcm9zc0Jsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nr
cy9jcm9zc0Jsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNyb3NzQmxvY2siLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9jcm9zc0Jsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNy
b3NzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZG90QmxvY2tfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZG90
QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2RvdEJsb2NrLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkRvdEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZG90QmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfX1siRG90QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfdHJhbnNmb3JtQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RyYW5zZm9ybUJsb2NrICovICIuL01hdGVyaWFs
cy9Ob2RlL0Jsb2Nrcy90cmFuc2Zvcm1CbG9jay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmFu
c2Zvcm1CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3RyYW5zZm9ybUJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMF9fWyJUcmFuc2Zvcm1CbG9jayJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9yZW1hcEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yZW1hcEJsb2NrICovICIuL01hdGVyaWFscy9O
b2RlL0Jsb2Nrcy9yZW1hcEJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbWFwQmxvY2si
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9yZW1hcEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMV9fWyJSZW1hcEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25v
cm1hbGl6ZUJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9ub3JtYWxpemVCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3Mv
bm9ybWFsaXplQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9ybWFsaXplQmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9ub3JtYWxpemVCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTJfX1siTm9ybWFsaXplQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfdHJpZ29ub21ldHJ5QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3RyaWdvbm9tZXRyeUJsb2NrICovICIuL01hdGVyaWFscy9O
b2RlL0Jsb2Nrcy90cmlnb25vbWV0cnlCbG9jay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmln
b25vbWV0cnlCbG9ja09wZXJhdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90cmlnb25vbWV0
cnlCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siVHJpZ29ub21ldHJ5QmxvY2tP
cGVyYXRpb25zIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRyaWdvbm9tZXRyeUJsb2NrIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfdHJpZ29ub21ldHJ5QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEzX19bIlRyaWdvbm9tZXRyeUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2NvbG9yTWVyZ2VyQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbG9yTWVyZ2VyQmxvY2sgKi8gIi4vTWF0ZXJp
YWxzL05vZGUvQmxvY2tzL2NvbG9yTWVyZ2VyQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Q29sb3JNZXJnZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbG9yTWVyZ2VyQmxvY2tf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkNvbG9yTWVyZ2VyQmxvY2siXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdmVjdG9yTWVyZ2VyQmxvY2tfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZlY3Rvck1lcmdl
ckJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy92ZWN0b3JNZXJnZXJCbG9jay50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJWZWN0b3JNZXJnZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX3ZlY3Rvck1lcmdlckJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJWZWN0
b3JNZXJnZXJCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb2xvclNw
bGl0dGVyQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2NvbG9yU3BsaXR0ZXJCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9j
a3MvY29sb3JTcGxpdHRlckJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yU3BsaXR0
ZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbG9yU3BsaXR0ZXJCbG9ja19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTZfX1siQ29sb3JTcGxpdHRlckJsb2NrIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3ZlY3RvclNwbGl0dGVyQmxvY2tfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZlY3RvclNwbGl0dGVy
QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL3ZlY3RvclNwbGl0dGVyQmxvY2sudHMi
KTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVmVjdG9yU3BsaXR0ZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX3ZlY3RvclNwbGl0dGVyQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19b
IlZlY3RvclNwbGl0dGVyQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bGVycEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9sZXJwQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2xlcnBCbG9j
ay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZXJwQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9sZXJwQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIkxlcnBCbG9jayJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kaXZpZGVCbG9ja19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGl2aWRlQmxvY2sg
Ki8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2RpdmlkZUJsb2NrLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkRpdmlkZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGl2aWRlQmxvY2tfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIkRpdmlkZUJsb2NrIl07IH0pOworCisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3N1YnRyYWN0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1YnRyYWN0QmxvY2sgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvQmxvY2tzL3N1YnRyYWN0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U3VidHJhY3RCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N1YnRyYWN0QmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzIwX19bIlN1YnRyYWN0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfc3RlcEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdGVwQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05v
ZGUvQmxvY2tzL3N0ZXBCbG9jay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGVwQmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9zdGVwQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIx
X19bIlN0ZXBCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9vcHBvc2l0
ZUJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9vcHBvc2l0ZUJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9vcHBvc2l0
ZUJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9wcG9zaXRlQmxvY2siLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9vcHBvc2l0ZUJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJP
cHBvc2l0ZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZpZXdEaXJl
Y3Rpb25CbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vdmlld0RpcmVjdGlvbkJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nr
cy92aWV3RGlyZWN0aW9uQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlld0RpcmVjdGlv
bkJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdmlld0RpcmVjdGlvbkJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yM19fWyJWaWV3RGlyZWN0aW9uQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfZnJlc25lbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mcmVzbmVsQmxvY2sgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvQmxvY2tzL2ZyZXNuZWxCbG9jay50cyIpOworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJG
cmVzbmVsQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mcmVzbmVsQmxvY2tfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzI0X19bIkZyZXNuZWxCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9tYXhCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vbWF4QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxv
Y2tzL21heEJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1heEJsb2NrIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfbWF4QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19bIk1heEJs
b2NrIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21pbkJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9taW5CbG9j
ayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvbWluQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTWluQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9taW5CbG9ja19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjZfX1siTWluQmxvY2siXTsgfSk7CisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2xlcnBCbG9jay50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxz
L05vZGUvQmxvY2tzL2xlcnBCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBMZXJwQmxvY2sg
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVycEJsb2NrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBMZXJwQmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2sg
Ki8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9u
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy90
eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisvKioKKyAqIEJs
b2NrIHVzZWQgdG8gbGVycCAyIHZhbHVlcworICovCit2YXIgTGVycEJsb2NrID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKExlcnBCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgbmV3IExlcnBCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhl
IGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBMZXJwQmxvY2sobmFtZSkgeworICAg
ICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2Nr
VGFyZ2V0cyJdLk5ldXRyYWwpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQo
ImxlZnQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
Il0uQXV0b0RldGVjdCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoInJpZ2h0IiwgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRl
Y3QpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJncmFkaWVudCIsIF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCk7CisgICAgICAg
IF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklucHV0KTsKKyAgICAgICAgX3RoaXMu
X291dHB1dHNbMF0uX3R5cGVDb25uZWN0aW9uU291cmNlID0gX3RoaXMuX2lucHV0c1swXTsKKyAg
ICAgICAgX3RoaXMuX2xpbmtDb25uZWN0aW9uVHlwZXMoMCwgMSk7CisgICAgICAgIHJldHVybiBf
dGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1l
CisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBMZXJwQmxvY2su
cHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJM
ZXJwQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlcnBCbG9jay5w
cm90b3R5cGUsICJsZWZ0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGVm
dCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGVycEJsb2NrLnByb3RvdHlwZSwg
InJpZ2h0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgcmlnaHQgb3BlcmFu
ZCBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlcnBCbG9jay5wcm90b3R5cGUsICJncmFkaWVu
dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGdyYWRpZW50IG9wZXJhbmQg
aW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMl07CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXJwQmxvY2sucHJvdG90eXBlLCAib3V0cHV0Iiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgTGVycEJsb2NrLnByb3Rv
dHlwZS5fYnVpbGRCbG9jayA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJv
dG90eXBlLl9idWlsZEJsb2NrLmNhbGwodGhpcywgc3RhdGUpOworICAgICAgICB2YXIgb3V0cHV0
ID0gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0g
dGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0YXRlKSArICgiID0gbWl4KCIgKyB0aGlzLmxl
ZnQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIgLCAiICsgdGhpcy5yaWdodC5hc3NvY2lhdGVk
VmFyaWFibGVOYW1lICsgIiwgIiArIHRoaXMuZ3JhZGllbnQuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICIpO1xyXG4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4g
TGVycEJsb2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxP
Ti5MZXJwQmxvY2siXSA9IExlcnBCbG9jazsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0
ZXJpYWxzL05vZGUvQmxvY2tzL21heEJsb2NrLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nr
cy9tYXhCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE1heEJsb2NrICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1heEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBN
YXhCbG9jazsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9u
b2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9u
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9k
ZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9N
aXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBnZXQg
dGhlIG1heCBvZiAyIHZhbHVlcworICovCit2YXIgTWF4QmxvY2sgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19leHRlbmRzIl0oTWF4QmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRl
cyBhIG5ldyBNYXhCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5h
bWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBNYXhCbG9jayhuYW1lKSB7CisgICAgICAgIHZhciBf
dGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0u
TmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgibGVmdCIsIF9u
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5BdXRvRGV0
ZWN0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgicmlnaHQiLCBfbm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJO
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQXV0b0RldGVjdCk7CisgICAg
ICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklucHV0KTsKKyAgICAgICAgX3Ro
aXMuX291dHB1dHNbMF0uX3R5cGVDb25uZWN0aW9uU291cmNlID0gX3RoaXMuX2lucHV0c1swXTsK
KyAgICAgICAgX3RoaXMuX2xpbmtDb25uZWN0aW9uVHlwZXMoMCwgMSk7CisgICAgICAgIHJldHVy
biBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBu
YW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBNYXhCbG9j
ay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
Ik1heEJsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXhCbG9jay5w
cm90b3R5cGUsICJsZWZ0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGVm
dCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF4QmxvY2sucHJvdG90eXBlLCAi
cmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByaWdodCBvcGVyYW5k
IGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzFdOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF4QmxvY2sucHJvdG90eXBlLCAib3V0cHV0Iiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgTWF4QmxvY2sucHJvdG90
eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90
b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQg
PSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0
aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgKCIgPSBtYXgoIiArIHRoaXMubGVm
dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiwgIiArIHRoaXMucmlnaHQuYXNzb2NpYXRlZFZh
cmlhYmxlTmFtZSArICIpO1xyXG4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICByZXR1cm4gTWF4QmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVz
WyJCQUJZTE9OLk1heEJsb2NrIl0gPSBNYXhCbG9jazsKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL21pbkJsb2NrLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2Rl
L0Jsb2Nrcy9taW5CbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE1pbkJsb2NrICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1pbkJsb2NrIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBNaW5CbG9jazsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRl
cmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAq
LyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0
byBnZXQgdGhlIG1pbiBvZiAyIHZhbHVlcworICovCit2YXIgTWluQmxvY2sgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19leHRlbmRzIl0oTWluQmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIG5ldyBNaW5CbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJs
b2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBNaW5CbG9jayhuYW1lKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzIl0uTmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgibGVm
dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5B
dXRvRGV0ZWN0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgicmlnaHQiLCBfbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQXV0b0RldGVjdCk7
CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklucHV0KTsKKyAgICAg
ICAgX3RoaXMuX291dHB1dHNbMF0uX3R5cGVDb25uZWN0aW9uU291cmNlID0gX3RoaXMuX2lucHV0
c1swXTsKKyAgICAgICAgX3RoaXMuX2xpbmtDb25uZWN0aW9uVHlwZXMoMCwgMSk7CisgICAgICAg
IHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBj
bGFzcyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBN
aW5CbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gIk1pbkJsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNaW5C
bG9jay5wcm90b3R5cGUsICJsZWZ0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgbGVmdCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWluQmxvY2sucHJvdG90
eXBlLCAicmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByaWdodCBv
cGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzFdOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWluQmxvY2sucHJvdG90eXBlLCAib3V0
cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVu
dAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgTWluQmxvY2su
cHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBl
ci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBv
dXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmlu
ZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgKCIgPSBtaW4oIiArIHRo
aXMubGVmdC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiwgIiArIHRoaXMucmlnaHQuYXNzb2Np
YXRlZFZhcmlhYmxlTmFtZSArICIpO1xyXG4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICByZXR1cm4gTWluQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVT
dG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJl
ZFR5cGVzWyJCQUJZTE9OLk1pbkJsb2NrIl0gPSBNaW5CbG9jazsKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL211bHRpcGx5QmxvY2sudHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvbXVsdGlwbHlCbG9jay50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogTXVsdGlwbHlCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJNdWx0aXBseUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNdWx0aXBseUJsb2NrOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxl
cy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1h
dGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVN
YXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9k
ZS9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0
b3JlLnRzIik7CisKKworCisKKworLyoqCisgKiBCbG9jayB1c2VkIHRvIG11bHRpcGx5IDIgdmFs
dWVzCisgKi8KK3ZhciBNdWx0aXBseUJsb2NrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9z
dXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5k
cyJdKE11bHRpcGx5QmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5l
dyBNdWx0aXBseUJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgYmxvY2sgbmFt
ZQorICAgICAqLworICAgIGZ1bmN0aW9uIE11bHRpcGx5QmxvY2sobmFtZSkgeworICAgICAgICB2
YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
cyJdLk5ldXRyYWwpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoImxlZnQi
LCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQXV0
b0RldGVjdCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoInJpZ2h0IiwgX25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRlY3QpOwor
ICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgib3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkJhc2VkT25JbnB1dCk7CisgICAgICAg
IF90aGlzLl9vdXRwdXRzWzBdLl90eXBlQ29ubmVjdGlvblNvdXJjZSA9IF90aGlzLl9pbnB1dHNb
MF07CisgICAgICAgIF90aGlzLl9saW5rQ29ubmVjdGlvblR5cGVzKDAsIDEpOworICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xh
c3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgTXVs
dGlwbHlCbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gIk11bHRpcGx5QmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KE11bHRpcGx5QmxvY2sucHJvdG90eXBlLCAibGVmdCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgdGhlIGxlZnQgb3BlcmFuZCBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lu
cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11
bHRpcGx5QmxvY2sucHJvdG90eXBlLCAicmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSByaWdodCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRz
WzFdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVsdGlw
bHlCbG9jay5wcm90b3R5cGUsICJvdXRwdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHRoZSBvdXRwdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBNdWx0aXBseUJsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9jayA9IGZ1bmN0
aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJsb2NrLmNhbGwo
dGhpcywgc3RhdGUpOworICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fb3V0cHV0c1swXTsKKyAg
ICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRw
dXQsIHN0YXRlKSArICgiID0gIiArIHRoaXMubGVmdC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsg
IiAqICIgKyB0aGlzLnJpZ2h0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiO1xyXG4iKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4gTXVsdGlwbHlCbG9jazsKK30o
X25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRl
cmlhbEJsb2NrIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uTXVsdGlwbHlCbG9j
ayJdID0gTXVsdGlwbHlCbG9jazsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxz
L05vZGUvQmxvY2tzL25vcm1hbGl6ZUJsb2NrLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2Rl
L0Jsb2Nrcy9ub3JtYWxpemVCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE5vcm1h
bGl6ZUJsb2NrICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vcm1hbGl6
ZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBOb3JtYWxpemVCbG9jazsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNs
aWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2Nr
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9j
ay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICov
ICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlw
ZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOwor
CisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBub3JtYWxpemUgYSB2ZWN0b3IKKyAqLwor
dmFyIE5vcm1hbGl6ZUJsb2NrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgewor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKE5vcm1h
bGl6ZUJsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgTm9ybWFs
aXplQmxvY2sKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBibG9jayBuYW1lCisgICAg
ICovCisgICAgZnVuY3Rpb24gTm9ybWFsaXplQmxvY2sobmFtZSkgeworICAgICAgICB2YXIgX3Ro
aXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLk5l
dXRyYWwpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoImlucHV0IiwgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRl
Y3QpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgib3V0cHV0IiwgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkJhc2VkT25JbnB1dCk7Cisg
ICAgICAgIF90aGlzLl9vdXRwdXRzWzBdLl90eXBlQ29ubmVjdGlvblNvdXJjZSA9IF90aGlzLl9p
bnB1dHNbMF07CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICog
R2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5h
bWUKKyAgICAgKi8KKyAgICBOb3JtYWxpemVCbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIk5vcm1hbGl6ZUJsb2NrIjsKKyAgICB9Owor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb3JtYWxpemVCbG9jay5wcm90b3R5cGUsICJpbnB1
dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGlucHV0IGNvbXBvbmVudAor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoTm9ybWFsaXplQmxvY2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0
c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgTm9ybWFsaXplQmxvY2sucHJvdG90eXBlLl9i
dWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUu
X2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlz
Ll9vdXRwdXRzWzBdOworICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLl9pbnB1dHNbMF07CisgICAg
ICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0
LCBzdGF0ZSkgKyAoIiA9IG5vcm1hbGl6ZSgiICsgaW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICIpO1xyXG4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4g
Tm9ybWFsaXplQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJC
QUJZTE9OLk5vcm1hbGl6ZUJsb2NrIl0gPSBOb3JtYWxpemVCbG9jazsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL29wcG9zaXRlQmxvY2sudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3Mvb3Bwb3NpdGVCbG9jay50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogT3Bwb3NpdGVCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJPcHBvc2l0ZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBPcHBvc2l0ZUJsb2Nr
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9k
dWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9k
ZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25v
ZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlw
ZVN0b3JlLnRzIik7CisKKworCisKKworLyoqCisgKiBCbG9jayB1c2VkIHRvIGdldCB0aGUgb3Bw
b3NpdGUgb2YgYSB2YWx1ZQorICovCit2YXIgT3Bwb3NpdGVCbG9jayA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShPcHBvc2l0ZUJsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgT3Bwb3NpdGVCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMg
dGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBPcHBvc2l0ZUJsb2NrKG5hbWUp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMiXS5OZXV0cmFsKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdpc3Rl
cklucHV0KCJpbnB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXMiXS5BdXRvRGV0ZWN0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoIm91
dHB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMi
XS5CYXNlZE9uSW5wdXQpOworICAgICAgICBfdGhpcy5fb3V0cHV0c1swXS5fdHlwZUNvbm5lY3Rp
b25Tb3VyY2UgPSBfdGhpcy5faW5wdXRzWzBdOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAg
fQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEBy
ZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgT3Bwb3NpdGVCbG9jay5wcm90b3R5
cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIk9wcG9zaXRl
QmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9wcG9zaXRlQmxvY2su
cHJvdG90eXBlLCAiaW5wdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBp
bnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9wcG9zaXRlQmxvY2sucHJvdG90eXBlLCAib3V0cHV0
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT3Bwb3NpdGVCbG9j
ay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1
cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgdmFy
IG91dHB1dCA9IHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3Ry
aW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9IDEuIC0gIiAr
IHRoaXMuaW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiIpOworICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBPcHBvc2l0ZUJsb2NrOworfShfbm9kZU1h
dGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxv
Y2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
X1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5PcHBvc2l0ZUJsb2NrIl0gPSBP
cHBvc2l0ZUJsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9C
bG9ja3MvcmVtYXBCbG9jay50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9yZW1hcEJs
b2NrLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBSZW1hcEJsb2NrICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbWFwQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJl
bWFwQmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4vTWF0ZXJpYWxz
L05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzICovICIuL01h
dGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4v
TWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uLy4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9y
LnRzIik7CisKKworCisKKworCisvKioKKyAqIEJsb2NrIHVzZWQgdG8gcmVtYXAgYSBmbG9hdCBm
cm9tIGEgcmFuZ2UgdG8gYSBuZXcgb25lCisgKi8KK3ZhciBSZW1hcEJsb2NrID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKFJlbWFwQmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIG5ldyBSZW1hcEJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0
aGUgYmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIFJlbWFwQmxvY2sobmFtZSkgewor
ICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFs
QmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJs
b2NrVGFyZ2V0cyJdLk5ldXRyYWwpIHx8IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIG9yIHNldHMgdGhlIHNvdXJjZSByYW5nZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
c291cmNlUmFuZ2UgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlZlY3RvcjIiXSgtMSwgMSk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IG9yIHNldHMgdGhlIHRhcmdldCByYW5nZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudGFy
Z2V0UmFuZ2UgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X19bIlZlY3RvcjIiXSgwLCAxKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgiaW5w
dXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0u
QXV0b0RldGVjdCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklu
cHV0KTsKKyAgICAgICAgX3RoaXMuX291dHB1dHNbMF0uX3R5cGVDb25uZWN0aW9uU291cmNlID0g
X3RoaXMuX2lucHV0c1swXTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioK
KyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y2xhc3MgbmFtZQorICAgICAqLworICAgIFJlbWFwQmxvY2sucHJvdG90eXBlLmdldENsYXNzTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJSZW1hcEJsb2NrIjsKKyAgICB9Owor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZW1hcEJsb2NrLnByb3RvdHlwZSwgImlucHV0Iiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgaW5wdXQgY29tcG9uZW50CisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShSZW1hcEJsb2NrLnByb3RvdHlwZSwgIm91dHB1dCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgdGhlIG91dHB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMF07Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIFJlbWFwQmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0g
ZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2su
Y2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBd
OworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0
KG91dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgdGhpcy5fd3JpdGVGbG9hdCh0aGlzLnRhcmdldFJh
bmdlLngpICsgIiArICgiICsgdGhpcy5faW5wdXRzWzBdLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUg
KyAiIC0gIiArIHRoaXMuX3dyaXRlRmxvYXQodGhpcy5zb3VyY2VSYW5nZS54KSArICIpICogKCIg
KyB0aGlzLl93cml0ZUZsb2F0KHRoaXMudGFyZ2V0UmFuZ2UueSkgKyAiIC0gIiArIHRoaXMuX3dy
aXRlRmxvYXQodGhpcy50YXJnZXRSYW5nZS54KSArICIpIC8gKCIgKyB0aGlzLl93cml0ZUZsb2F0
KHRoaXMuc291cmNlUmFuZ2UueSkgKyAiIC0gIiArIHRoaXMuX3dyaXRlRmxvYXQodGhpcy5zb3Vy
Y2VSYW5nZS54KSArICIpO1xyXG4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICBSZW1hcEJsb2NrLnByb3RvdHlwZS5fZHVtcFByb3BlcnRpZXNDb2RlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgY29kZVN0cmluZyA9IHRoaXMuX2NvZGVWYXJpYWJsZU5hbWUgKyAiLnNv
dXJjZVJhbmdlID0gbmV3IEJBQllMT04uVmVjdG9yMigiICsgdGhpcy5zb3VyY2VSYW5nZS54ICsg
IiwgIiArIHRoaXMuc291cmNlUmFuZ2UueSArICIpO1xyXG4iOworICAgICAgICBjb2RlU3RyaW5n
ICs9IHRoaXMuX2NvZGVWYXJpYWJsZU5hbWUgKyAiLnRhcmdldFJhbmdlID0gbmV3IEJBQllMT04u
VmVjdG9yMigiICsgdGhpcy50YXJnZXRSYW5nZS54ICsgIiwgIiArIHRoaXMudGFyZ2V0UmFuZ2Uu
eSArICIpO1xyXG4iOworICAgICAgICByZXR1cm4gY29kZVN0cmluZzsKKyAgICB9OworICAgIFJl
bWFwQmxvY2sucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IHNlcmlhbGl6YXRpb25PYmplY3QgPSBfc3VwZXIucHJvdG90eXBlLnNlcmlhbGl6ZS5jYWxsKHRo
aXMpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNvdXJjZVJhbmdlID0gdGhpcy5zb3Vy
Y2VSYW5nZS5hc0FycmF5KCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudGFyZ2V0UmFu
Z2UgPSB0aGlzLnRhcmdldFJhbmdlLmFzQXJyYXkoKTsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6
YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICBSZW1hcEJsb2NrLnByb3RvdHlwZS5fZGVzZXJpYWxp
emUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlvbk9iamVjdCwgc2NlbmUsIHJvb3RVcmwpIHsKKyAg
ICAgICAgX3N1cGVyLnByb3RvdHlwZS5fZGVzZXJpYWxpemUuY2FsbCh0aGlzLCBzZXJpYWxpemF0
aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIHRoaXMuc291cmNlUmFuZ2UgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMiJd
LkZyb21BcnJheShzZXJpYWxpemF0aW9uT2JqZWN0LnNvdXJjZVJhbmdlKTsKKyAgICAgICAgdGhp
cy50YXJnZXRSYW5nZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJWZWN0b3IyIl0uRnJvbUFycmF5KHNlcmlhbGl6YXRpb25PYmplY3QudGFyZ2V0UmFu
Z2UpOworICAgIH07CisgICAgcmV0dXJuIFJlbWFwQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9j
a19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisK
K19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3Jl
Il0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLlJlbWFwQmxvY2siXSA9IFJlbWFwQmxvY2s7CisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9zY2FsZUJsb2Nr
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL3NjYWxlQmxvY2sudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFNjYWxlQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiU2NhbGVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2NhbGVCbG9jazsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlh
bEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJp
YWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9k
ZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50
cyIpOworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBzY2FsZSBhIHZlY3RvciBieSBh
IGZsb2F0CisgKi8KK3ZhciBTY2FsZUJsb2NrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9z
dXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5k
cyJdKFNjYWxlQmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBT
Y2FsZUJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgYmxvY2sgbmFtZQorICAg
ICAqLworICAgIGZ1bmN0aW9uIFNjYWxlQmxvY2sobmFtZSkgeworICAgICAgICB2YXIgX3RoaXMg
PSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLk5ldXRy
YWwpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoImlucHV0IiwgX25vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRlY3Qp
OworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJmYWN0b3IiLCBfbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQpOworICAgICAgICBfdGhp
cy5yZWdpc3Rlck91dHB1dCgib3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyJdLkJhc2VkT25JbnB1dCk7CisgICAgICAgIF90aGlzLl9vdXRw
dXRzWzBdLl90eXBlQ29ubmVjdGlvblNvdXJjZSA9IF90aGlzLl9pbnB1dHNbMF07CisgICAgICAg
IHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBj
bGFzcyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBT
Y2FsZUJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiAiU2NhbGVCbG9jayI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
U2NhbGVCbG9jay5wcm90b3R5cGUsICJpbnB1dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NhbGVCbG9jay5wcm90b3R5cGUs
ICJmYWN0b3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBmYWN0b3IgaW5w
dXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2FsZUJsb2NrLnByb3RvdHlwZSwgIm91dHB1dCIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG91dHB1dCBjb21wb25lbnQKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX291dHB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIFNjYWxlQmxvY2sucHJvdG90
eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90
b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQg
PSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0
aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgdGhpcy5pbnB1dC5h
c3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiAqICIgKyB0aGlzLmZhY3Rvci5hc3NvY2lhdGVkVmFy
aWFibGVOYW1lICsgIjtcclxuIik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
cmV0dXJuIFNjYWxlQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVz
WyJCQUJZTE9OLlNjYWxlQmxvY2siXSA9IFNjYWxlQmxvY2s7CisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9zdGVwQmxvY2sudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFs
cy9Ob2RlL0Jsb2Nrcy9zdGVwQmxvY2sudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU3RlcEJsb2Nr
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXBCbG9jayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gU3RlcEJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2Nr
ICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUv
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2Nr
VGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2Mv
dHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKworLyoqCisgKiBC
bG9jayB1c2VkIHRvIHN0ZXAgYSB2YWx1ZQorICovCit2YXIgU3RlcEJsb2NrID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKFN0ZXBCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgbmV3IEFkZEJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
YmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIFN0ZXBCbG9jayhuYW1lKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzIl0uTmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgi
dmFsdWUiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
Il0uRmxvYXQpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJlZGdlIiwgX25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0KTsKKyAgICAg
ICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoIm91dHB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCk7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisg
ICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBTdGVwQmxvY2sucHJv
dG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJTdGVw
QmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0ZXBCbG9jay5wcm90
b3R5cGUsICJ2YWx1ZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHZhbHVl
IG9wZXJhbmQgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGVwQmxvY2sucHJvdG90eXBlLCAi
ZWRnZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGVkZ2Ugb3BlcmFuZCBp
bnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0ZXBCbG9jay5wcm90b3R5cGUsICJvdXRwdXQiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBvdXRwdXQgY29tcG9uZW50CisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBTdGVwQmxvY2sucHJvdG90
eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90
b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQg
PSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0
aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgKCIgPSBzdGVwKCIgKyB0aGlzLmVk
Z2UuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIsICIgKyB0aGlzLnZhbHVlLmFzc29jaWF0ZWRW
YXJpYWJsZU5hbWUgKyAiKTtcclxuIik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgcmV0dXJuIFN0ZXBCbG9jazsKK30oX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2NrIl0pKTsKKworX01pc2NfdHlwZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlw
ZXNbIkJBQllMT04uU3RlcEJsb2NrIl0gPSBTdGVwQmxvY2s7CisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9zdWJ0cmFjdEJsb2NrLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWF0ZXJpYWxzL05vZGUvQmxvY2tzL3N1YnRyYWN0QmxvY2sudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IFN1YnRyYWN0QmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiU3VidHJhY3RCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VidHJhY3RCbG9jazsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRl
cmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0
ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUv
bm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9y
ZS50cyIpOworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBzdWJ0cmFjdCAyIHZlY3Rv
cnMKKyAqLwordmFyIFN1YnRyYWN0QmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1
cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRz
Il0oU3VidHJhY3RCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3
IFN1YnRyYWN0QmxvY2sKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBibG9jayBuYW1l
CisgICAgICovCisgICAgZnVuY3Rpb24gU3VidHJhY3RCbG9jayhuYW1lKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRz
Il0uTmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgibGVmdCIs
IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5BdXRv
RGV0ZWN0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgicmlnaHQiLCBfbm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQXV0b0RldGVjdCk7Cisg
ICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklucHV0KTsKKyAgICAgICAg
X3RoaXMuX291dHB1dHNbMF0uX3R5cGVDb25uZWN0aW9uU291cmNlID0gX3RoaXMuX2lucHV0c1sw
XTsKKyAgICAgICAgX3RoaXMuX2xpbmtDb25uZWN0aW9uVHlwZXMoMCwgMSk7CisgICAgICAgIHJl
dHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFz
cyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBTdWJ0
cmFjdEJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiAiU3VidHJhY3RCbG9jayI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoU3VidHJhY3RCbG9jay5wcm90b3R5cGUsICJsZWZ0IiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyB0aGUgbGVmdCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5w
dXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3Vi
dHJhY3RCbG9jay5wcm90b3R5cGUsICJyaWdodCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIHJpZ2h0IG9wZXJhbmQgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNb
MV07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJ0cmFj
dEJsb2NrLnByb3RvdHlwZSwgIm91dHB1dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIG91dHB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIFN1YnRyYWN0QmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rp
b24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0
aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAg
ICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1
dCwgc3RhdGUpICsgKCIgPSAiICsgdGhpcy5sZWZ0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAi
IC0gIiArIHRoaXMucmlnaHQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiIpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBTdWJ0cmFjdEJsb2NrOworfShf
bm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVy
aWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5TdWJ0cmFjdEJsb2Nr
Il0gPSBTdWJ0cmFjdEJsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9CbG9ja3MvdHJhbnNmb3JtQmxvY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUv
QmxvY2tzL3RyYW5zZm9ybUJsb2NrLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogVHJhbnNm
b3JtQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJhbnNmb3Jt
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRyYW5zZm9ybUJsb2NrOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xp
Yi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L25vZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2Nr
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBl
U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisK
KworCisKKworLyoqCisgKiBCbG9jayB1c2VkIHRvIHRyYW5zZm9ybSBhIHZlY3RvciAoMiwgMyBv
ciA0KSB3aXRoIGEgbWF0cml4LiBJdCB3aWxsIGdlbmVyYXRlIGEgVmVjdG9yNAorICovCit2YXIg
VHJhbnNmb3JtQmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVHJhbnNmb3Jt
QmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBUcmFuc2Zvcm1C
bG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBUcmFuc2Zvcm1CbG9jayhuYW1lKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4
KSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgdmFsdWUgdG8g
dXNlIHRvIGNvbXBsZW1lbnQgVyB2YWx1ZSB0byB0cmFuc2Zvcm0gaXQgdG8gYSBWZWN0b3I0Cisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5jb21wbGVtZW50VyA9IDE7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBEZWZpbmVzIHRoZSB2YWx1ZSB0byB1c2UgdG8gY29tcGxlbWVudCB6IHZhbHVl
IHRvIHRyYW5zZm9ybSBpdCB0byBhIFZlY3RvcjQKKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LmNvbXBsZW1lbnRaID0gMDsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgidmVjdG9yIiwg
X25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9E
ZXRlY3QpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ0cmFuc2Zvcm0iLCBfbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uTWF0cml4KTsKKyAg
ICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoIm91dHB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0KTsKKyAgICAgICAgcmV0dXJu
IF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5h
bWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFRyYW5zZm9y
bUJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAiVHJhbnNmb3JtQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFRyYW5zZm9ybUJsb2NrLnByb3RvdHlwZSwgInZlY3RvciIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgdGhlIHZlY3RvciBpbnB1dAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtQmxvY2sucHJv
dG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0
cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybUJsb2NrLnByb3RvdHlwZSwgInRyYW5z
Zm9ybSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG1hdHJpeCB0cmFuc2Zv
cm0gaW5wdXQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgVHJh
bnNmb3JtQmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7Cisg
ICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7Cisg
ICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB2YXIgdmVjdG9y
ID0gdGhpcy52ZWN0b3I7CisgICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybTsK
KyAgICAgICAgaWYgKHZlY3Rvci5jb25uZWN0ZWRQb2ludCkgeworICAgICAgICAgICAgc3dpdGNo
ICh2ZWN0b3IuY29ubmVjdGVkUG9pbnQudHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjI6
CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2Rl
Y2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIgKyB0cmFuc2Zvcm0uYXNzb2NpYXRl
ZFZhcmlhYmxlTmFtZSArICIgKiB2ZWM0KCIgKyB2ZWN0b3IuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICIsICIgKyB0aGlzLl93cml0ZUZsb2F0KHRoaXMuY29tcGxlbWVudFopICsgIiwgIiArIHRo
aXMuX3dyaXRlRmxvYXQodGhpcy5jb21wbGVtZW50VykgKyAiKTtcclxuIik7CisgICAgICAgICAg
ICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzIl0uVmVjdG9yMzoKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJp
bmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0YXRlKSArICgiID0gIiArIHRyYW5z
Zm9ybS5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiAqIHZlYzQoIiArIHZlY3Rvci5hc3NvY2lh
dGVkVmFyaWFibGVOYW1lICsgIiwgIiArIHRoaXMuX3dyaXRlRmxvYXQodGhpcy5jb21wbGVtZW50
VykgKyAiKTtcclxuIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5n
ICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIgKyB0cmFuc2Zv
cm0uYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIgKiAiICsgdmVjdG9yLmFzc29jaWF0ZWRWYXJp
YWJsZU5hbWUgKyAiO1xyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBUcmFu
c2Zvcm1CbG9jay5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2
YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9zdXBlci5wcm90b3R5cGUuc2VyaWFsaXplLmNhbGwo
dGhpcyk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29tcGxlbWVudFogPSB0aGlzLmNv
bXBsZW1lbnRaOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvbXBsZW1lbnRXID0gdGhp
cy5jb21wbGVtZW50VzsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAg
fTsKKyAgICBUcmFuc2Zvcm1CbG9jay5wcm90b3R5cGUuX2Rlc2VyaWFsaXplID0gZnVuY3Rpb24g
KHNlcmlhbGl6YXRpb25PYmplY3QsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIF9zdXBlci5w
cm90b3R5cGUuX2Rlc2VyaWFsaXplLmNhbGwodGhpcywgc2VyaWFsaXphdGlvbk9iamVjdCwgc2Nl
bmUsIHJvb3RVcmwpOworICAgICAgICB0aGlzLmNvbXBsZW1lbnRaID0gc2VyaWFsaXphdGlvbk9i
amVjdC5jb21wbGVtZW50WiAhPT0gdW5kZWZpbmVkID8gc2VyaWFsaXphdGlvbk9iamVjdC5jb21w
bGVtZW50WiA6IDAuMDsKKyAgICAgICAgdGhpcy5jb21wbGVtZW50VyA9IHNlcmlhbGl6YXRpb25P
YmplY3QuY29tcGxlbWVudFcgIT09IHVuZGVmaW5lZCA/IHNlcmlhbGl6YXRpb25PYmplY3QuY29t
cGxlbWVudFcgOiAxLjA7CisgICAgfTsKKyAgICBUcmFuc2Zvcm1CbG9jay5wcm90b3R5cGUuX2R1
bXBQcm9wZXJ0aWVzQ29kZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGNvZGVTdHJpbmcg
PSB0aGlzLl9jb2RlVmFyaWFibGVOYW1lICsgIi5jb21wbGVtZW50WiA9ICIgKyB0aGlzLmNvbXBs
ZW1lbnRaICsgIjtcclxuIjsKKyAgICAgICAgY29kZVN0cmluZyArPSB0aGlzLl9jb2RlVmFyaWFi
bGVOYW1lICsgIi5jb21wbGVtZW50VyA9ICIgKyB0aGlzLmNvbXBsZW1lbnRXICsgIjtcclxuIjsK
KyAgICAgICAgcmV0dXJuIGNvZGVTdHJpbmc7CisgICAgfTsKKyAgICByZXR1cm4gVHJhbnNmb3Jt
QmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLlRy
YW5zZm9ybUJsb2NrIl0gPSBUcmFuc2Zvcm1CbG9jazsKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL3RyaWdvbm9tZXRyeUJsb2NrLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy90cmlnb25vbWV0cnlCbG9jay50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9ucywgVHJpZ29ub21l
dHJ5QmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJpZ29ub21l
dHJ5QmxvY2tPcGVyYXRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUcmlnb25vbWV0cnlCbG9j
a09wZXJhdGlvbnM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJpZ29ub21ldHJ5QmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIFRyaWdvbm9tZXRyeUJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVN
YXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisK
KworLyoqCisgKiBPcGVyYXRpb25zIHN1cHBvcnRlZCBieSB0aGUgVHJpZ29ub21ldHJ5IGJsb2Nr
CisgKi8KK3ZhciBUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnM7CisoZnVuY3Rpb24gKFRyaWdv
bm9tZXRyeUJsb2NrT3BlcmF0aW9ucykgeworICAgIC8qKiBDb3MgKi8KKyAgICBUcmlnb25vbWV0
cnlCbG9ja09wZXJhdGlvbnNbVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zWyJDb3MiXSA9IDBd
ID0gIkNvcyI7CisgICAgLyoqIFNpbiAqLworICAgIFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9u
c1tUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnNbIlNpbiJdID0gMV0gPSAiU2luIjsKKyAgICAv
KiogQWJzICovCisgICAgVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zW1RyaWdvbm9tZXRyeUJs
b2NrT3BlcmF0aW9uc1siQWJzIl0gPSAyXSA9ICJBYnMiOworICAgIC8qKiBFeHAgKi8KKyAgICBU
cmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnNbVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zWyJF
eHAiXSA9IDNdID0gIkV4cCI7CisgICAgLyoqIEV4cDIgKi8KKyAgICBUcmlnb25vbWV0cnlCbG9j
a09wZXJhdGlvbnNbVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zWyJFeHAyIl0gPSA0XSA9ICJF
eHAyIjsKKyAgICAvKiogUm91bmQgKi8KKyAgICBUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnNb
VHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zWyJSb3VuZCJdID0gNV0gPSAiUm91bmQiOworICAg
IC8qKiBGbG9vciAqLworICAgIFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9uc1tUcmlnb25vbWV0
cnlCbG9ja09wZXJhdGlvbnNbIkZsb29yIl0gPSA2XSA9ICJGbG9vciI7CisgICAgLyoqIENlaWxp
bmcgKi8KKyAgICBUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnNbVHJpZ29ub21ldHJ5QmxvY2tP
cGVyYXRpb25zWyJDZWlsaW5nIl0gPSA3XSA9ICJDZWlsaW5nIjsKK30pKFRyaWdvbm9tZXRyeUJs
b2NrT3BlcmF0aW9ucyB8fCAoVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zID0ge30pKTsKKy8q
KgorICogQmxvY2sgdXNlZCB0byBhcHBseSB0cmlnb25vbWV0cnkgb3BlcmF0aW9uIHRvIGZsb2F0
cworICovCit2YXIgVHJpZ29ub21ldHJ5QmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
X3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRl
bmRzIl0oVHJpZ29ub21ldHJ5QmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRl
cyBhIG5ldyBUcmlnb25vbWV0cnlCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhl
IGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBUcmlnb25vbWV0cnlCbG9jayhuYW1l
KSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0
ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzIl0uTmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3Igc2V0cyB0aGUgb3BlcmF0aW9uIGFwcGxpZWQgYnkgdGhlIGJsb2NrCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5vcGVyYXRpb24gPSBUcmlnb25vbWV0cnlCbG9ja09wZXJh
dGlvbnMuQ29zOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJpbnB1dCIsIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCk7CisgICAg
ICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQpOworICAgICAgICByZXR1cm4gX3Ro
aXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQor
ICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgVHJpZ29ub21ldHJ5
QmxvY2sucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuICJUcmlnb25vbWV0cnlCbG9jayI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoVHJpZ29ub21ldHJ5QmxvY2sucHJvdG90eXBlLCAiaW5wdXQiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHRoZSBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1swXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyaWdvbm9tZXRy
eUJsb2NrLnByb3RvdHlwZSwgIm91dHB1dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIG91dHB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIFRyaWdvbm9tZXRyeUJsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9jayA9IGZ1
bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJsb2NrLmNh
bGwodGhpcywgc3RhdGUpOworICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fb3V0cHV0c1swXTsK
KyAgICAgICAgdmFyIG9wZXJhdGlvbiA9ICIiOworICAgICAgICBzd2l0Y2ggKHRoaXMub3BlcmF0
aW9uKSB7CisgICAgICAgICAgICBjYXNlIFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9ucy5Db3M6
IHsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSAiY29zIjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJpZ29ub21ldHJ5QmxvY2tP
cGVyYXRpb25zLlNpbjogeworICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9ICJzaW4iOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBUcmln
b25vbWV0cnlCbG9ja09wZXJhdGlvbnMuQWJzOiB7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9u
ID0gImFicyI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9ucy5FeHA6IHsKKyAgICAgICAgICAg
ICAgICBvcGVyYXRpb24gPSAiZXhwIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zLkV4cDI6
IHsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSAiZXhwMiI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRyaWdvbm9tZXRyeUJsb2Nr
T3BlcmF0aW9ucy5Sb3VuZDogeworICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9ICJyb3VuZCI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNl
IFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9ucy5GbG9vcjogeworICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbiA9ICJmbG9vciI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9ucy5DZWlsaW5nOiB7
CisgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gImNlaWwiOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9u
U3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIgKyBv
cGVyYXRpb24gKyAiKCIgKyB0aGlzLmlucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiKTtc
clxuIik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgVHJpZ29ub21ldHJ5Qmxv
Y2sucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlh
bGl6YXRpb25PYmplY3QgPSBfc3VwZXIucHJvdG90eXBlLnNlcmlhbGl6ZS5jYWxsKHRoaXMpOwor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm9wZXJhdGlvbiA9IHRoaXMub3BlcmF0aW9uOwor
ICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIFRyaWdvbm9t
ZXRyeUJsb2NrLnByb3RvdHlwZS5fZGVzZXJpYWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlv
bk9iamVjdCwgc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fZGVz
ZXJpYWxpemUuY2FsbCh0aGlzLCBzZXJpYWxpemF0aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCk7
CisgICAgICAgIHRoaXMub3BlcmF0aW9uID0gc2VyaWFsaXphdGlvbk9iamVjdC5vcGVyYXRpb247
CisgICAgfTsKKyAgICByZXR1cm4gVHJpZ29ub21ldHJ5QmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxC
bG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7
CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0
b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLlRyaWdvbm9tZXRyeUJsb2NrIl0gPSBUcmln
b25vbWV0cnlCbG9jazsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUv
QmxvY2tzL3ZlY3Rvck1lcmdlckJsb2NrLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2Rl
L0Jsb2Nrcy92ZWN0b3JNZXJnZXJCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IFZlY3Rvck1lcmdlckJsb2NrICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlZlY3Rvck1lcmdlckJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBWZWN0b3JNZXJnZXJCbG9j
azsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25v
ZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9u
b2RlTWF0ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxz
L05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5
cGVTdG9yZS50cyIpOworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBjcmVhdGUgYSBW
ZWN0b3IyLzMvNCBvdXQgb2YgaW5kaXZpZHVhbCBpbnB1dHMgKG9uZSBmb3IgZWFjaCBjb21wb25l
bnQpCisgKi8KK3ZhciBWZWN0b3JNZXJnZXJCbG9jayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShWZWN0b3JNZXJnZXJCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGUgYSBuZXcgVmVjdG9yTWVyZ2VyQmxvY2sKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRo
ZSBibG9jayBuYW1lCisgICAgICovCisgICAgZnVuY3Rpb24gVmVjdG9yTWVyZ2VyQmxvY2sobmFt
ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1h
dGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdp
c3RlcklucHV0KCJ4IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlcyJdLkZsb2F0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgieSIsIF9ub2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCk7Cisg
ICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoInoiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQsIHRydWUpOworICAgICAgICBfdGhpcy5y
ZWdpc3RlcklucHV0KCJ3IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlcyJdLkZsb2F0LCB0cnVlKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQo
Inh5enciLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
Il0uVmVjdG9yNCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJ4eXoiLCBfbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yMyk7Cisg
ICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJ4eSIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IyKTsKKyAgICAgICAgcmV0dXJuIF90
aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5hbWUK
KyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFZlY3Rvck1lcmdl
ckJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAiVmVjdG9yTWVyZ2VyQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFZlY3Rvck1lcmdlckJsb2NrLnByb3RvdHlwZSwgIngiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSB4IGNvbXBvbmVudCAoaW5wdXQpCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMF07
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWZWN0b3JNZXJn
ZXJCbG9jay5wcm90b3R5cGUsICJ5IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgeSBjb21wb25lbnQgKGlucHV0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzFdOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVjdG9yTWVyZ2VyQmxvY2sucHJvdG90
eXBlLCAieiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHogY29tcG9uZW50
IChpbnB1dCkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1syXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFZlY3Rvck1lcmdlckJsb2NrLnByb3RvdHlwZSwgInciLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB3IGNvbXBvbmVudCAoaW5wdXQpCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9pbnB1dHNbM107CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShWZWN0b3JNZXJnZXJCbG9jay5wcm90b3R5cGUsICJ4eXp3IiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyB0aGUgeHl6dyBjb21wb25lbnQgKG91dHB1dCkKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291
dHB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShW
ZWN0b3JNZXJnZXJCbG9jay5wcm90b3R5cGUsICJ4eXoiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSB4eXogY29tcG9uZW50IChvdXRwdXQpCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzFd
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVjdG9yTWVy
Z2VyQmxvY2sucHJvdG90eXBlLCAieHkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSB4eSBjb21wb25lbnQgKG91dHB1dCkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMl07CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIFZlY3Rvck1lcmdlckJsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9jayA9
IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJsb2Nr
LmNhbGwodGhpcywgc3RhdGUpOworICAgICAgICB2YXIgeElucHV0ID0gdGhpcy54OworICAgICAg
ICB2YXIgeUlucHV0ID0gdGhpcy55OworICAgICAgICB2YXIgeklucHV0ID0gdGhpcy56OworICAg
ICAgICB2YXIgd0lucHV0ID0gdGhpcy53OworICAgICAgICB2YXIgdjRPdXRwdXQgPSB0aGlzLl9v
dXRwdXRzWzBdOworICAgICAgICB2YXIgdjNPdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzFdOworICAg
ICAgICB2YXIgdjJPdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzJdOworICAgICAgICBpZiAodjRPdXRw
dXQuaGFzRW5kcG9pbnRzKSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyAr
PSB0aGlzLl9kZWNsYXJlT3V0cHV0KHY0T3V0cHV0LCBzdGF0ZSkgKyAoIiA9IHZlYzQoIiArIHRo
aXMuX3dyaXRlVmFyaWFibGUoeElucHV0KSArICIsICIgKyB0aGlzLl93cml0ZVZhcmlhYmxlKHlJ
bnB1dCkgKyAiLCAiICsgKHpJbnB1dC5pc0Nvbm5lY3RlZCA/IHRoaXMuX3dyaXRlVmFyaWFibGUo
eklucHV0KSA6ICIwLjAiKSArICIsICIgKyAoeklucHV0LmlzQ29ubmVjdGVkID8gdGhpcy5fd3Jp
dGVWYXJpYWJsZSh3SW5wdXQpIDogIjAuMCIpICsgIik7XHJcbiIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHYzT3V0cHV0Lmhhc0VuZHBvaW50cykgeworICAgICAgICAgICAgc3RhdGUu
Y29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dCh2M091dHB1dCwgc3RhdGUp
ICsgKCIgPSB2ZWMzKCIgKyB0aGlzLl93cml0ZVZhcmlhYmxlKHhJbnB1dCkgKyAiLCAiICsgdGhp
cy5fd3JpdGVWYXJpYWJsZSh5SW5wdXQpICsgIiwgIiArICh6SW5wdXQuaXNDb25uZWN0ZWQgPyB0
aGlzLl93cml0ZVZhcmlhYmxlKHpJbnB1dCkgOiAiMC4wIikgKyAiKTtcclxuIik7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAodjJPdXRwdXQuaGFzRW5kcG9pbnRzKSB7CisgICAgICAgICAg
ICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KHYyT3V0cHV0
LCBzdGF0ZSkgKyAoIiA9IHZlYzIoIiArIHRoaXMuX3dyaXRlVmFyaWFibGUoeElucHV0KSArICIs
ICIgKyB0aGlzLl93cml0ZVZhcmlhYmxlKHlJbnB1dCkgKyAiKTtcclxuIik7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4gVmVjdG9yTWVyZ2VyQmxv
Y2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJO
b2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLlZlY3Rv
ck1lcmdlckJsb2NrIl0gPSBWZWN0b3JNZXJnZXJCbG9jazsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL3ZlY3RvclNwbGl0dGVyQmxvY2sudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvdmVjdG9yU3BsaXR0ZXJCbG9jay50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogVmVjdG9yU3BsaXR0ZXJCbG9jayAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWZWN0b3JTcGxpdHRlckJsb2NrIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBWZWN0b3JTcGxpdHRlckJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVN
YXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisK
KworLyoqCisgKiBCbG9jayB1c2VkIHRvIGV4cGFuZCBhIFZlY3RvcjMvNCBpbnRvIDQgb3V0cHV0
cyAob25lIGZvciBlYWNoIGNvbXBvbmVudCkKKyAqLwordmFyIFZlY3RvclNwbGl0dGVyQmxvY2sg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVmVjdG9yU3BsaXR0ZXJCbG9jaywgX3N1
cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgVmVjdG9yU3BsaXR0ZXJCbG9jawor
ICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBWZWN0b3JTcGxpdHRlckJsb2NrKG5hbWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
X3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVu
dCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgieHl6dyIsIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0LCB0cnVl
KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgieHl6ICIsIF9ub2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IzLCB0cnVlKTsKKyAgICAg
ICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgieHkgIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjIsIHRydWUpOworICAgICAgICBfdGhpcy5y
ZWdpc3Rlck91dHB1dCgieHl6IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjMpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgi
eHkiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0u
VmVjdG9yMik7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJ4IiwgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0KTsKKyAgICAgICAg
X3RoaXMucmVnaXN0ZXJPdXRwdXQoInkiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1
dCgieiIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMi
XS5GbG9hdCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJ3IiwgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0KTsKKyAgICAgICAg
cmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNs
YXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFZl
Y3RvclNwbGl0dGVyQmxvY2sucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuICJWZWN0b3JTcGxpdHRlckJsb2NrIjsKKyAgICB9OworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShWZWN0b3JTcGxpdHRlckJsb2NrLnByb3RvdHlwZSwgInh5enciLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB4eXp3IGNvbXBvbmVudCAoaW5wdXQp
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShWZWN0b3JTcGxpdHRlckJsb2NrLnByb3RvdHlwZSwgInh5ekluIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgeHl6IGNvbXBvbmVudCAoaW5wdXQpCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9pbnB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShWZWN0b3JTcGxpdHRlckJsb2NrLnByb3RvdHlwZSwgInh5SW4iLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIHRoZSB4eSBjb21wb25lbnQgKGlucHV0KQorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5w
dXRzWzJdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVj
dG9yU3BsaXR0ZXJCbG9jay5wcm90b3R5cGUsICJ4eXpPdXQiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSB4eXogY29tcG9uZW50IChvdXRwdXQpCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRz
WzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVjdG9y
U3BsaXR0ZXJCbG9jay5wcm90b3R5cGUsICJ4eU91dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgdGhlIHh5IGNvbXBvbmVudCAob3V0cHV0KQorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1sxXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZlY3RvclNwbGl0
dGVyQmxvY2sucHJvdG90eXBlLCAieCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
dGhlIHggY29tcG9uZW50IChvdXRwdXQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzJdOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVjdG9yU3BsaXR0ZXJCbG9jay5w
cm90b3R5cGUsICJ5IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgeSBjb21w
b25lbnQgKG91dHB1dCkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbM107CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWZWN0b3JTcGxpdHRlckJsb2NrLnByb3RvdHlwZSwg
InoiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB6IGNvbXBvbmVudCAob3V0
cHV0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fb3V0cHV0c1s0XTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFZlY3RvclNwbGl0dGVyQmxvY2sucHJvdG90eXBlLCAidyIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHcgY29tcG9uZW50IChvdXRwdXQpCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9vdXRwdXRzWzVdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBWZWN0b3JTcGxpdHRlckJs
b2NrLnByb3RvdHlwZS5faW5wdXRSZW5hbWUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICBz
d2l0Y2ggKG5hbWUpIHsKKyAgICAgICAgICAgIGNhc2UgInh5ICI6CisgICAgICAgICAgICAgICAg
cmV0dXJuICJ4eUluIjsKKyAgICAgICAgICAgIGNhc2UgInh5eiAiOgorICAgICAgICAgICAgICAg
IHJldHVybiAieHl6SW4iOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbmFtZTsKKyAgICAgICAgfQorICAgIH07CisgICAgVmVjdG9yU3BsaXR0ZXJCbG9jay5w
cm90b3R5cGUuX291dHB1dFJlbmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHN3aXRj
aCAobmFtZSkgeworICAgICAgICAgICAgY2FzZSAieHkiOgorICAgICAgICAgICAgICAgIHJldHVy
biAieHlPdXQiOworICAgICAgICAgICAgY2FzZSAieHl6IjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gInh5ek91dCI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBuYW1lOworICAgICAgICB9CisgICAgfTsKKyAgICBWZWN0b3JTcGxpdHRlckJsb2NrLnByb3Rv
dHlwZS5fYnVpbGRCbG9jayA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJv
dG90eXBlLl9idWlsZEJsb2NrLmNhbGwodGhpcywgc3RhdGUpOworICAgICAgICB2YXIgaW5wdXQg
PSB0aGlzLnh5encuaXNDb25uZWN0ZWQgPyB0aGlzLnh5encgOiB0aGlzLnh5ekluLmlzQ29ubmVj
dGVkID8gdGhpcy54eXpJbiA6IHRoaXMueHlJbjsKKyAgICAgICAgdmFyIHh5ek91dHB1dCA9IHRo
aXMuX291dHB1dHNbMF07CisgICAgICAgIHZhciB4eU91dHB1dCA9IHRoaXMuX291dHB1dHNbMV07
CisgICAgICAgIHZhciB4T3V0cHV0ID0gdGhpcy5fb3V0cHV0c1syXTsKKyAgICAgICAgdmFyIHlP
dXRwdXQgPSB0aGlzLl9vdXRwdXRzWzNdOworICAgICAgICB2YXIgek91dHB1dCA9IHRoaXMuX291
dHB1dHNbNF07CisgICAgICAgIHZhciB3T3V0cHV0ID0gdGhpcy5fb3V0cHV0c1s1XTsKKyAgICAg
ICAgaWYgKHh5ek91dHB1dC5oYXNFbmRwb2ludHMpIHsKKyAgICAgICAgICAgIGlmIChpbnB1dCA9
PT0gdGhpcy54eUluKSB7CisgICAgICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcg
Kz0gdGhpcy5fZGVjbGFyZU91dHB1dCh4eXpPdXRwdXQsIHN0YXRlKSArICgiID0gdmVjMygiICsg
aW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIsIDAuMCk7XHJcbiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dCh4eXpPdXRwdXQsIHN0YXRlKSArICgiID0g
IiArIGlucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLnh5ejtcclxuIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHh5T3V0cHV0Lmhhc0VuZHBvaW50cykgewor
ICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1
dCh4eU91dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgaW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICIueHk7XHJcbiIpOworICAgICAgICB9CisgICAgICAgIGlmICh4T3V0cHV0Lmhhc0VuZHBv
aW50cykgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVj
bGFyZU91dHB1dCh4T3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIgKyBpbnB1dC5hc3NvY2lhdGVkVmFy
aWFibGVOYW1lICsgIi54O1xyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeU91dHB1dC5o
YXNFbmRwb2ludHMpIHsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRo
aXMuX2RlY2xhcmVPdXRwdXQoeU91dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgaW5wdXQuYXNzb2Np
YXRlZFZhcmlhYmxlTmFtZSArICIueTtcclxuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHpP
dXRwdXQuaGFzRW5kcG9pbnRzKSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmlu
ZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KHpPdXRwdXQsIHN0YXRlKSArICgiID0gIiArIGlucHV0
LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLno7XHJcbiIpOworICAgICAgICB9CisgICAgICAg
IGlmICh3T3V0cHV0Lmhhc0VuZHBvaW50cykgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dCh3T3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIg
KyBpbnB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi53O1xyXG4iKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBWZWN0b3JTcGxpdHRlckJs
b2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
Tm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5WZWN0
b3JTcGxpdHRlckJsb2NrIl0gPSBWZWN0b3JTcGxpdHRlckJsb2NrOworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3Mvdmlld0RpcmVjdGlvbkJsb2NrLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3Mvdmlld0RpcmVjdGlvbkJsb2NrLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFZpZXdEaXJlY3Rpb25CbG9jayAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWaWV3RGlyZWN0aW9uQmxvY2siLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFZpZXdEaXJlY3Rpb25CbG9jazsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lmpz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0
ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01hdGVy
aWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0
ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbFN5
c3RlbVZhbHVlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfSW5wdXRfaW5wdXRCbG9ja19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9JbnB1dC9p
bnB1dEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9JbnB1dC9pbnB1dEJsb2NrLnRz
Iik7CisKKworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBnZXQgdGhlIHZpZXcgZGly
ZWN0aW9uCisgKi8KK3ZhciBWaWV3RGlyZWN0aW9uQmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oVmlld0RpcmVjdGlvbkJsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgVmlld0RpcmVjdGlvbkJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVm
aW5lcyB0aGUgYmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIFZpZXdEaXJlY3Rpb25C
bG9jayhuYW1lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUs
IF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
Tm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uTmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgX3Ro
aXMucmVnaXN0ZXJJbnB1dCgid29ybGRQb3NpdGlvbiIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0KTsKKyAgICAgICAgX3RoaXMucmVn
aXN0ZXJJbnB1dCgiY2FtZXJhUG9zaXRpb24iLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yMyk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVy
T3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzIl0uVmVjdG9yMyk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAg
LyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMg
dGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBWaWV3RGlyZWN0aW9uQmxvY2sucHJvdG90eXBl
LmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJWaWV3RGlyZWN0
aW9uQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZpZXdEaXJlY3Rp
b25CbG9jay5wcm90b3R5cGUsICJ3b3JsZFBvc2l0aW9uIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyB0aGUgd29ybGQgcG9zaXRpb24gY29tcG9uZW50CisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNb
MF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWaWV3RGly
ZWN0aW9uQmxvY2sucHJvdG90eXBlLCAiY2FtZXJhUG9zaXRpb24iLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHRoZSBjYW1lcmEgcG9zaXRpb24gY29tcG9uZW50CisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9p
bnB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShW
aWV3RGlyZWN0aW9uQmxvY2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgVmlld0RpcmVjdGlvbkJsb2NrLnByb3RvdHlwZS5hdXRv
Q29uZmlndXJlID0gZnVuY3Rpb24gKG1hdGVyaWFsKSB7CisgICAgICAgIGlmICghdGhpcy5jYW1l
cmFQb3NpdGlvbi5pc0Nvbm5lY3RlZCkgeworICAgICAgICAgICAgdmFyIGNhbWVyYVBvc2l0aW9u
SW5wdXQgPSBtYXRlcmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsg
cmV0dXJuIGIuc3lzdGVtVmFsdWUgPT09IF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIl0uQ2FtZXJh
UG9zaXRpb247IH0pOworICAgICAgICAgICAgaWYgKCFjYW1lcmFQb3NpdGlvbklucHV0KSB7Cisg
ICAgICAgICAgICAgICAgY2FtZXJhUG9zaXRpb25JbnB1dCA9IG5ldyBfSW5wdXRfaW5wdXRCbG9j
a19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJJbnB1dEJsb2NrIl0oImNhbWVyYVBvc2l0
aW9uIik7CisgICAgICAgICAgICAgICAgY2FtZXJhUG9zaXRpb25JbnB1dC5zZXRBc1N5c3RlbVZh
bHVlKF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIl0uQ2FtZXJhUG9zaXRpb24pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FtZXJhUG9zaXRpb25JbnB1dC5vdXRwdXQuY29ubmVjdFRvKHRo
aXMuY2FtZXJhUG9zaXRpb24pOworICAgICAgICB9CisgICAgfTsKKyAgICBWaWV3RGlyZWN0aW9u
QmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAg
IF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAg
IHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBzdGF0ZS5jb21waWxhdGlv
blN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgKCIgPSBub3Jt
YWxpemUoIiArIHRoaXMuY2FtZXJhUG9zaXRpb24uYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIg
LSAiICsgdGhpcy53b3JsZFBvc2l0aW9uLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLnh5eik7
XHJcbiIpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBWaWV3RGly
ZWN0aW9uQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZ
TE9OLlZpZXdEaXJlY3Rpb25CbG9jayJdID0gVmlld0RpcmVjdGlvbkJsb2NrOworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9Ob2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludE1vZGUudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUv
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRN
b2RlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50TW9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlOyB9KTsKKy8qKgorICogRW51bSBkZWZpbmluZyB0aGUg
bW9kZSBvZiBhIE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50CisgKi8KK3ZhciBOb2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludE1vZGU7CisoZnVuY3Rpb24gKE5vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSkgeworICAgIC8qKiBWYWx1ZSBpcyBhbiB1bmlmb3Jt
ICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlW05vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZVsiVW5pZm9ybSJdID0gMF0gPSAiVW5pZm9ybSI7Cisg
ICAgLyoqIFZhbHVlIGlzIGEgbWVzaCBhdHRyaWJ1dGUgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludE1vZGVbTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2Rl
WyJBdHRyaWJ1dGUiXSA9IDFdID0gIkF0dHJpYnV0ZSI7CisgICAgLyoqIFZhbHVlIGlzIGEgdmFy
eWluZyBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyAqLworICAgIE5vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZVtOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludE1vZGVbIlZhcnlpbmciXSA9IDJdID0gIlZhcnlpbmciOworICAgIC8qKiBNb2RlIGlzIHVu
ZGVmaW5lZCAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZVtOb2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludE1vZGVbIlVuZGVmaW5lZCJdID0gM10gPSAiVW5k
ZWZpbmVkIjsKK30pKE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSB8fCAoTm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlID0ge30pKTsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvT3B0aW1pemVycy9pbmRleC50cyI6CisvKiEqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0
ZXJpYWxzL05vZGUvT3B0aW1pemVycy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBOb2Rl
TWF0ZXJpYWxPcHRpbWl6ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9ub2RlTWF0ZXJpYWxPcHRpbWl6ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9kZU1hdGVyaWFsT3B0aW1pemVyICovICIu
L01hdGVyaWFscy9Ob2RlL09wdGltaXplcnMvbm9kZU1hdGVyaWFsT3B0aW1pemVyLnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbE9wdGltaXplciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX25vZGVNYXRlcmlhbE9wdGltaXplcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJO
b2RlTWF0ZXJpYWxPcHRpbWl6ZXIiXTsgfSk7CisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9NYXRlcmlhbHMvTm9kZS9PcHRpbWl6ZXJzL25vZGVNYXRlcmlhbE9wdGltaXplci50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL09wdGltaXplcnMvbm9kZU1hdGVyaWFs
T3B0aW1pemVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBOb2RlTWF0
ZXJpYWxPcHRpbWl6ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9k
ZU1hdGVyaWFsT3B0aW1pemVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBOb2RlTWF0ZXJpYWxPcHRp
bWl6ZXI7IH0pOworLyoqCisgKiBSb290IGNsYXNzIGZvciBhbGwgbm9kZSBtYXRlcmlhbCBvcHRp
bWl6ZXJzCisgKi8KK3ZhciBOb2RlTWF0ZXJpYWxPcHRpbWl6ZXIgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gTm9kZU1hdGVyaWFsT3B0aW1pemVyKCkgeworICAg
IH0KKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIG9wdGltaXplIGEgTm9kZU1hdGVy
aWFsIGdyYXBoCisgICAgICogQHBhcmFtIHZlcnRleE91dHB1dE5vZGVzIGRlZmluZXMgdGhlIGxp
c3Qgb2Ygb3V0cHV0IG5vZGVzIGZvciB0aGUgdmVydGV4IHNoYWRlcgorICAgICAqIEBwYXJhbSBm
cmFnbWVudE91dHB1dE5vZGVzIGRlZmluZXMgdGhlIGxpc3Qgb2Ygb3V0cHV0IG5vZGVzIGZvciB0
aGUgZnJhZ21lbnQgc2hhZGVyCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsT3B0aW1pemVyLnBy
b3RvdHlwZS5vcHRpbWl6ZSA9IGZ1bmN0aW9uICh2ZXJ0ZXhPdXRwdXROb2RlcywgZnJhZ21lbnRP
dXRwdXROb2RlcykgeworICAgICAgICAvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQKKyAgICB9Owor
ICAgIHJldHVybiBOb2RlTWF0ZXJpYWxPcHRpbWl6ZXI7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvaW5kZXgudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IE5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cywgTm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlcywgTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50LCBOb2RlTWF0ZXJp
YWxCbG9jaywgTm9kZU1hdGVyaWFsRGVmaW5lcywgTm9kZU1hdGVyaWFsLCBOb2RlTWF0ZXJpYWxT
eXN0ZW1WYWx1ZXMsIE11bHRpcGx5QmxvY2ssIEFkZEJsb2NrLCBTY2FsZUJsb2NrLCBDbGFtcEJs
b2NrLCBDcm9zc0Jsb2NrLCBEb3RCbG9jaywgVHJhbnNmb3JtQmxvY2ssIFJlbWFwQmxvY2ssIE5v
cm1hbGl6ZUJsb2NrLCBUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnMsIFRyaWdvbm9tZXRyeUJs
b2NrLCBDb2xvck1lcmdlckJsb2NrLCBWZWN0b3JNZXJnZXJCbG9jaywgQ29sb3JTcGxpdHRlckJs
b2NrLCBWZWN0b3JTcGxpdHRlckJsb2NrLCBMZXJwQmxvY2ssIERpdmlkZUJsb2NrLCBTdWJ0cmFj
dEJsb2NrLCBTdGVwQmxvY2ssIE9wcG9zaXRlQmxvY2ssIFZpZXdEaXJlY3Rpb25CbG9jaywgRnJl
c25lbEJsb2NrLCBNYXhCbG9jaywgTWluQmxvY2ssIE5vZGVNYXRlcmlhbE9wdGltaXplciwgVmVy
dGV4T3V0cHV0QmxvY2ssIEJvbmVzQmxvY2ssIEluc3RhbmNlc0Jsb2NrLCBNb3JwaFRhcmdldHNC
bG9jaywgTGlnaHRJbmZvcm1hdGlvbkJsb2NrLCBGcmFnbWVudE91dHB1dEJsb2NrLCBBbHBoYVRl
c3RCbG9jaywgSW1hZ2VQcm9jZXNzaW5nQmxvY2ssIFBlcnR1cmJOb3JtYWxCbG9jaywgRm9nQmxv
Y2ssIExpZ2h0QmxvY2ssIFRleHR1cmVCbG9jaywgUmVmbGVjdGlvblRleHR1cmVCbG9jaywgSW5w
dXRCbG9jaywgQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cy50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnQgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnQudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50Il07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVNYXRlcmlhbEJsb2Nr
ICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIk5vZGVNYXRlcmlhbEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZU1hdGVy
aWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2si
XTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVNYXRl
cmlhbCAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTm9kZU1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVNYXRl
cmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxEZWZpbmVzIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX25vZGVNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJp
YWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsU3lzdGVt
VmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2Rl
TWF0ZXJpYWxTeXN0ZW1WYWx1ZXMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFs
U3lzdGVtVmFsdWVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZU1hdGVyaWFsU3lzdGVtVmFs
dWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVl
cyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9CbG9ja3NfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQmxvY2tz
L2luZGV4ICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9pbmRleC50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJNdWx0aXBseUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIk11bHRpcGx5QmxvY2siXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQWRkQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CbG9ja3NfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQWRkQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiU2NhbGVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTY2FsZUJsb2NrIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkNsYW1wQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CbG9ja3NfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ2xhbXBCbG9jayJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJDcm9zc0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNyb3NzQmxvY2siXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRG90QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CbG9ja3NfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRG90QmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiVHJhbnNmb3JtQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CbG9ja3Nf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVHJhbnNmb3JtQmxvY2siXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiUmVtYXBCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Js
b2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJSZW1hcEJsb2NrIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk5vcm1hbGl6ZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfQmxvY2tzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIk5vcm1hbGl6ZUJs
b2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9u
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVHJpZ29ub21ldHJ5QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CbG9ja3Nf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVHJpZ29ub21ldHJ5QmxvY2siXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3JNZXJnZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb2xvck1l
cmdlckJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3Rvck1lcmdlckJsb2NrIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIlZlY3Rvck1lcmdlckJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9y
U3BsaXR0ZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb2xvclNwbGl0dGVyQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiVmVjdG9yU3BsaXR0ZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Js
b2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJWZWN0b3JTcGxpdHRlckJs
b2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxlcnBCbG9jayIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJMZXJwQmxv
Y2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGl2aWRlQmxvY2siLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9CbG9ja3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRGl2aWRl
QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3VidHJhY3RCbG9jayIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJT
dWJ0cmFjdEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXBCbG9jayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9f
WyJTdGVwQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT3Bwb3NpdGVCbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fWyJPcHBvc2l0ZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpZXdEaXJlY3Rp
b25CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fWyJWaWV3RGlyZWN0aW9uQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRnJlc25lbEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkZyZXNuZWxCbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNYXhCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJNYXhCbG9jayJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJNaW5CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJNaW5CbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJWZXJ0ZXhPdXRwdXRCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJWZXJ0ZXhPdXRwdXRCbG9jayJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJCb25lc0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxv
Y2tzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkJvbmVzQmxvY2siXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zdGFuY2VzQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9CbG9ja3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5zdGFuY2VzQmxv
Y2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTW9ycGhUYXJnZXRzQmxvY2siLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9CbG9ja3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
TW9ycGhUYXJnZXRzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGlnaHRJbmZvcm1h
dGlvbkJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV82X19bIkxpZ2h0SW5mb3JtYXRpb25CbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJGcmFnbWVudE91dHB1dEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxv
Y2tzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkZyYWdtZW50T3V0cHV0Qmxv
Y2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWxwaGFUZXN0QmxvY2siLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9CbG9ja3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQWxw
aGFUZXN0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5nQmxv
Y2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CbG9ja3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siSW1hZ2VQcm9jZXNzaW5nQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUGVydHVyYk5vcm1hbEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBlcnR1cmJOb3JtYWxCbG9jayJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJGb2dCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nr
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJGb2dCbG9jayJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJMaWdodEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkxpZ2h0QmxvY2siXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiVGV4dHVyZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxv
Y2tzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRleHR1cmVCbG9jayJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJSZWZsZWN0aW9uVGV4dHVyZUJsb2NrIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfQmxvY2tzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlJl
ZmxlY3Rpb25UZXh0dXJlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5wdXRCbG9j
ayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJJbnB1dEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGVk
SW5wdXRCbG9ja1R5cGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzIl07IH0pOwor
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX09wdGltaXplcnNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vT3B0aW1pemVycy9p
bmRleCAqLyAiLi9NYXRlcmlhbHMvTm9kZS9PcHRpbWl6ZXJzL2luZGV4LnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIk5vZGVNYXRlcmlhbE9wdGltaXplciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX09w
dGltaXplcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTm9kZU1hdGVyaWFs
T3B0aW1pemVyIl07IH0pOworCisKKworCisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWwudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvbm9k
ZU1hdGVyaWFsLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTm9kZU1hdGVyaWFsRGVmaW5lcywgTm9kZU1h
dGVyaWFsICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlh
bERlZmluZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE5vZGVNYXRlcmlhbERlZmluZXM7IH0pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBOb2Rl
TWF0ZXJpYWw7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9wdXNoTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL3B1c2hNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvcHVzaE1hdGVy
aWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLmNvbG9y
ICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJ1aWxkU3RhdGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9k
ZU1hdGVyaWFsQnVpbGRTdGF0ZSAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCdWls
ZFN0YXRlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vZWZmZWN0ICov
ICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlz
Y19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9u
b2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFs
QmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlh
bEJ1aWxkU3RhdGVTaGFyZWREYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVNYXRlcmlhbEJ1aWxkU3RhdGVTaGFyZWREYXRhICov
ICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJ1aWxkU3RhdGVTaGFyZWREYXRhLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbERlZmluZXNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9NYXRlcmlhbHMvbWF0ZXJpYWxEZWZpbmVzICovICIuL01hdGVyaWFscy9tYXRlcmlhbERlZmlu
ZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01l
c2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xzLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0Jsb2Nrc190cmFuc2Zvcm1CbG9ja19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQmxvY2tz
L3RyYW5zZm9ybUJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy90cmFuc2Zvcm1CbG9j
ay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9CbG9ja3NfVmVydGV4X3ZlcnRleE91
dHB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9CbG9ja3MvVmVydGV4L3ZlcnRleE91dHB1dEJsb2NrICovICIuL01hdGVyaWFs
cy9Ob2RlL0Jsb2Nrcy9WZXJ0ZXgvdmVydGV4T3V0cHV0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfQmxvY2tzX0ZyYWdtZW50X2ZyYWdtZW50T3V0cHV0QmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0Jsb2Nr
cy9GcmFnbWVudC9mcmFnbWVudE91dHB1dEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nr
cy9GcmFnbWVudC9mcmFnbWVudE91dHB1dEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0Jsb2Nrc19JbnB1dF9pbnB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9CbG9ja3MvSW5wdXQvaW5wdXRCbG9jayAq
LyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvSW5wdXQvaW5wdXRCbG9jay50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvdHlwZVN0b3JlICov
ICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19maWxlVG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2Zp
bGVUb29scyAqLyAiLi9NaXNjL2ZpbGVUb29scy50cyIpOworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKy8qKiBAaGlkZGVuICovCit2YXIgTm9kZU1hdGVyaWFsRGVmaW5l
cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShOb2RlTWF0ZXJpYWxEZWZpbmVzLCBf
c3VwZXIpOworICAgIGZ1bmN0aW9uIE5vZGVNYXRlcmlhbERlZmluZXMoKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CisgICAgICAgIC8qKiBCT05FUyAq
LworICAgICAgICBfdGhpcy5OVU1fQk9ORV9JTkZMVUVOQ0VSUyA9IDA7CisgICAgICAgIF90aGlz
LkJvbmVzUGVyTWVzaCA9IDA7CisgICAgICAgIF90aGlzLkJPTkVURVhUVVJFID0gZmFsc2U7Cisg
ICAgICAgIC8qKiBNT1JQSCBUQVJHRVRTICovCisgICAgICAgIF90aGlzLk1PUlBIVEFSR0VUUyA9
IGZhbHNlOworICAgICAgICBfdGhpcy5NT1JQSFRBUkdFVFNfTk9STUFMID0gZmFsc2U7CisgICAg
ICAgIF90aGlzLk1PUlBIVEFSR0VUU19UQU5HRU5UID0gZmFsc2U7CisgICAgICAgIF90aGlzLk1P
UlBIVEFSR0VUU19VViA9IGZhbHNlOworICAgICAgICBfdGhpcy5OVU1fTU9SUEhfSU5GTFVFTkNF
UlMgPSAwOworICAgICAgICAvKiogSU1BR0UgUFJPQ0VTU0lORyAqLworICAgICAgICBfdGhpcy5J
TUFHRVBST0NFU1NJTkcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVklHTkVUVEUgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuVklHTkVUVEVCTEVORE1PREVNVUxUSVBMWSA9IGZhbHNlOworICAgICAg
ICBfdGhpcy5WSUdORVRURUJMRU5ETU9ERU9QQVFVRSA9IGZhbHNlOworICAgICAgICBfdGhpcy5U
T05FTUFQUElORyA9IGZhbHNlOworICAgICAgICBfdGhpcy5UT05FTUFQUElOR19BQ0VTID0gZmFs
c2U7CisgICAgICAgIF90aGlzLkNPTlRSQVNUID0gZmFsc2U7CisgICAgICAgIF90aGlzLkVYUE9T
VVJFID0gZmFsc2U7CisgICAgICAgIF90aGlzLkNPTE9SQ1VSVkVTID0gZmFsc2U7CisgICAgICAg
IF90aGlzLkNPTE9SR1JBRElORyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DT0xPUkdSQURJTkcz
RCA9IGZhbHNlOworICAgICAgICBfdGhpcy5TQU1QTEVSM0RHUkVFTkRFUFRIID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLlNBTVBMRVIzREJHUk1BUCA9IGZhbHNlOworICAgICAgICBfdGhpcy5JTUFH
RVBST0NFU1NJTkdQT1NUUFJPQ0VTUyA9IGZhbHNlOworICAgICAgICBfdGhpcy5yZWJ1aWxkKCk7
CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgTm9kZU1hdGVyaWFsRGVmaW5lcy5w
cm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgaWYg
KHRoaXNbbmFtZV0gPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdGhpcy5fa2V5cy5wdXNo
KG5hbWUpOworICAgICAgICB9CisgICAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZTsKKyAgICB9Owor
ICAgIHJldHVybiBOb2RlTWF0ZXJpYWxEZWZpbmVzOworfShfTWF0ZXJpYWxzX21hdGVyaWFsRGVm
aW5lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siTWF0ZXJpYWxEZWZpbmVzIl0pKTsK
KworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGNyZWF0ZSBhIG5vZGUgYmFzZWQgbWF0ZXJpYWwgYnVp
bHQgYnkgYXNzZW1ibGluZyBzaGFkZXIgYmxvY2tzCisgKi8KK3ZhciBOb2RlTWF0ZXJpYWwgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTm9kZU1hdGVyaWFsLCBfc3VwZXIpOworICAg
IC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBub2RlIGJhc2VkIG1hdGVyaWFsCisgICAgICogQHBh
cmFtIG5hbWUgZGVmaW5lcyB0aGUgbWF0ZXJpYWwgbmFtZQorICAgICAqIEBwYXJhbSBzY2VuZSBk
ZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyBj
cmVhdGlvbiBvcHRpb24KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBOb2RlTWF0ZXJpYWwobmFtZSwg
c2NlbmUsIG9wdGlvbnMpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRp
b25zID0ge307IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwg
c2NlbmUgfHwgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVu
Z2luZSJdLkxhc3RDcmVhdGVkU2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9idWlsZElk
ID0gTm9kZU1hdGVyaWFsLl9CdWlsZElkR2VuZXJhdG9yKys7CisgICAgICAgIF90aGlzLl9idWls
ZFdhc1N1Y2Nlc3NmdWwgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2NhY2hlZFdvcmxkVmlld01h
dHJpeCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTWF0cml4Il0oKTsKKyAgICAgICAgX3RoaXMuX2NhY2hlZFdvcmxkVmlld1Byb2plY3Rpb25N
YXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk1hdHJpeCJdKCk7CisgICAgICAgIF90aGlzLl9vcHRpbWl6ZXJzID0gbmV3IEFycmF5KCk7
CisgICAgICAgIF90aGlzLl9hbmltYXRpb25GcmFtZSA9IC0xOworICAgICAgICBfdGhpcy5CSlNO
T0RFTUFURVJJQUxFRElUT1IgPSBfdGhpcy5fZ2V0R2xvYmFsTm9kZU1hdGVyaWFsRWRpdG9yKCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRp
bmcgdGhhdCBhbHBoYSB2YWx1ZSBtdXN0IGJlIGlnbm9yZWQgKFRoaXMgd2lsbCB0dXJuIGFscGhh
IGJsZW5kaW5nIG9mZiBldmVuIGlmIGFuIGFscGhhIHZhbHVlIGlzIHByb2R1Y2VkIGJ5IHRoZSBt
YXRlcmlhbCkKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmlnbm9yZUFscGhhID0gZmFsc2U7
CisgICAgICAgIC8qKgorICAgICAgICAqIERlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxp
Z2h0cyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBtYXRlcmlhbAorICAgICAgICAqLworICAgICAg
ICBfdGhpcy5tYXhTaW11bHRhbmVvdXNMaWdodHMgPSA0OworICAgICAgICAvKioKKyAgICAgICAg
ICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiB0aGUgbWF0ZXJpYWwgaXMgYnVpbHQKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLm9uQnVpbGRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFi
bGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHJvb3Qgbm9kZXMgb2YgdGhlIG1hdGVy
aWFsIHZlcnRleCBzaGFkZXIKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl92ZXJ0ZXhPdXRw
dXROb2RlcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBz
ZXRzIHRoZSByb290IG5vZGVzIG9mIHRoZSBtYXRlcmlhbCBmcmFnbWVudCAocGl4ZWwpIHNoYWRl
cgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2ZyYWdtZW50T3V0cHV0Tm9kZXMgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYW4gYXJyYXkgb2YgYmxvY2tz
IHRoYXQgbmVlZHMgdG8gYmUgc2VyaWFsaXplZCBldmVuIGlmIHRoZXkgYXJlIG5vdCB5ZXQgY29u
bmVjdGVkCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5hdHRhY2hlZEJsb2NrcyA9IG5ldyBB
cnJheSgpOworICAgICAgICBfdGhpcy5fb3B0aW9ucyA9IHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fYXNzaWduIl0oeyBlbWl0Q29tbWVudHM6IGZhbHNlIH0sIG9wdGlvbnMp
OworICAgICAgICAvLyBTZXR1cCB0aGUgZGVmYXVsdCBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24g
dG8gdGhlIHNjZW5lLgorICAgICAgICBfdGhpcy5fYXR0YWNoSW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbihudWxsKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKiogR2V0
IHRoZSBpbnNwZWN0b3IgZnJvbSBidW5kbGUgb3IgZ2xvYmFsICovCisgICAgTm9kZU1hdGVyaWFs
LnByb3RvdHlwZS5fZ2V0R2xvYmFsTm9kZU1hdGVyaWFsRWRpdG9yID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAvLyBVTUQgR2xvYmFsIG5hbWUgZGV0ZWN0aW9uIGZyb20gV2VicGFjayBCdW5kbGUg
VU1EIE5hbWUuCisgICAgICAgIGlmICh0eXBlb2YgTk9ERUVESVRPUiAhPT0gJ3VuZGVmaW5lZCcp
IHsKKyAgICAgICAgICAgIHJldHVybiBOT0RFRURJVE9SOworICAgICAgICB9CisgICAgICAgIC8v
IEluIGNhc2Ugb2YgbW9kdWxlIGxldCdzIGNoZWNrIHRoZSBnbG9iYWwgZW1pdHRlZCBmcm9tIHRo
ZSBlZGl0b3IgZW50cnkgcG9pbnQuCisgICAgICAgIGlmICh0eXBlb2YgQkFCWUxPTiAhPT0gJ3Vu
ZGVmaW5lZCcgJiYgdHlwZW9mIEJBQllMT04uTm9kZUVkaXRvciAhPT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgICAgIHJldHVybiBCQUJZTE9OOworICAgICAgICB9CisgICAgICAgIHJldHVybiB1
bmRlZmluZWQ7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZU1hdGVyaWFs
LnByb3RvdHlwZSwgIm9wdGlvbnMiLCB7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgb3B0aW9u
cyB0byBjb250cm9sIHRoZSBub2RlIG1hdGVyaWFsIG92ZXJhbGwgYmVoYXZpb3IgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9uczsK
KyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICAg
ICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShOb2RlTWF0ZXJpYWwucHJvdG90eXBlLCAiaW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGltYWdl
IHByb2Nlc3NpbmcgY29uZmlndXJhdGlvbiB1c2VkIGVpdGhlciBpbiB0aGlzIG1hdGVyaWFsLgor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbjsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIERlZmF1bHQgaW1hZ2UgcHJvY2Vzc2luZyBjb25m
aWd1cmF0aW9uIHVzZWQgZWl0aGVyIGluIHRoZSB0aGlzIG1hdGVyaWFsLgorICAgICAgICAgKgor
ICAgICAgICAgKiBJZiBzZXRzIHRvIG51bGwsIHRoZSBzY2VuZSBvbmUgaXMgaW4gdXNlLgorICAg
ICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRo
aXMuX2F0dGFjaEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24odmFsdWUpOworICAgICAgICAg
ICAgLy8gRW5zdXJlIHRoZSBlZmZlY3Qgd2lsbCBiZSByZWJ1aWx0LgorICAgICAgICAgICAgdGhp
cy5fbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSgpOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5hbWUgb2YgdGhlIG1hdGVy
aWFsIGUuZy4gIk5vZGVNYXRlcmlhbCIKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQor
ICAgICAqLworICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gIk5vZGVNYXRlcmlhbCI7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBBdHRhY2hlcyBhIG5ldyBpbWFnZSBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24gdG8g
dGhlIFN0YW5kYXJkIE1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBjb25maWd1cmF0aW9uCisgICAg
ICovCisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5fYXR0YWNoSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbiA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09PSB0aGlzLl9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgLy8gRGV0YWNoZXMgb2JzZXJ2ZXIuCisgICAgICAgIGlmICh0aGlzLl9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uICYmIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ09ic2VydmVyKSB7Cisg
ICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLm9uVXBkYXRlUGFy
YW1ldGVycy5yZW1vdmUodGhpcy5faW1hZ2VQcm9jZXNzaW5nT2JzZXJ2ZXIpOworICAgICAgICB9
CisgICAgICAgIC8vIFBpY2sgdGhlIHNjZW5lIGNvbmZpZ3VyYXRpb24gaWYgbmVlZGVkLgorICAg
ICAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24gPSB0aGlzLmdldFNjZW5lKCkuaW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2lt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOworICAgICAgICB9Cisg
ICAgICAgIC8vIEF0dGFjaGVzIG9ic2VydmVyLgorICAgICAgICBpZiAodGhpcy5faW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5n
T2JzZXJ2ZXIgPSB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLm9uVXBkYXRlUGFy
YW1ldGVycy5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9tYXJrQWxs
U3ViTWVzaGVzQXNJbWFnZVByb2Nlc3NpbmdEaXJ0eSgpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCBhIGJsb2NrIGJ5IGl0cyBuYW1lCisg
ICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgYmxvY2sgdG8gcmV0cmll
dmUKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVxdWlyZWQgYmxvY2sgb3IgbnVsbCBpZiBub3QgZm91
bmQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLmdldEJsb2NrQnlOYW1lID0g
ZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuYXR0
YWNoZWRCbG9ja3M7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgYmxv
Y2sgPSBfYVtfaV07CisgICAgICAgICAgICBpZiAoYmxvY2submFtZSA9PT0gbmFtZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBibG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCBhIGJsb2NrIGJ5
IGl0cyBuYW1lCisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBkZWZpbmVzIHRoZSBwcmVkaWNhdGUg
dXNlZCB0byBmaW5kIHRoZSBnb29kIGNhbmRpZGF0ZQorICAgICAqIEByZXR1cm5zIHRoZSByZXF1
aXJlZCBibG9jayBvciBudWxsIGlmIG5vdCBmb3VuZAorICAgICAqLworICAgIE5vZGVNYXRlcmlh
bC5wcm90b3R5cGUuZ2V0QmxvY2tCeVByZWRpY2F0ZSA9IGZ1bmN0aW9uIChwcmVkaWNhdGUpIHsK
KyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuYXR0YWNoZWRCbG9ja3M7IF9pIDwg
X2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgYmxvY2sgPSBfYVtfaV07CisgICAg
ICAgICAgICBpZiAocHJlZGljYXRlKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBi
bG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldCBhbiBpbnB1dCBibG9jayBieSBpdHMgbmFtZQorICAg
ICAqIEBwYXJhbSBwcmVkaWNhdGUgZGVmaW5lcyB0aGUgcHJlZGljYXRlIHVzZWQgdG8gZmluZCB0
aGUgZ29vZCBjYW5kaWRhdGUKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVxdWlyZWQgaW5wdXQgYmxv
Y2sgb3IgbnVsbCBpZiBub3QgZm91bmQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90
eXBlLmdldElucHV0QmxvY2tCeVByZWRpY2F0ZSA9IGZ1bmN0aW9uIChwcmVkaWNhdGUpIHsKKyAg
ICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuYXR0YWNoZWRCbG9ja3M7IF9pIDwgX2Eu
bGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgYmxvY2sgPSBfYVtfaV07CisgICAgICAg
ICAgICBpZiAoYmxvY2suaXNJbnB1dCAmJiBwcmVkaWNhdGUoYmxvY2spKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGlzdCBvZiBpbnB1
dCBibG9ja3MgYXR0YWNoZWQgdG8gdGhpcyBtYXRlcmlhbAorICAgICAqIEByZXR1cm5zIGFuIGFy
cmF5IG9mIElucHV0QmxvY2tzCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5n
ZXRJbnB1dEJsb2NrcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGJsb2NrcyA9IFtdOwor
ICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5hdHRhY2hlZEJsb2NrczsgX2kgPCBf
YS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBibG9jayA9IF9hW19pXTsKKyAgICAg
ICAgICAgIGlmIChibG9jay5pc0lucHV0KSB7CisgICAgICAgICAgICAgICAgYmxvY2tzLnB1c2go
YmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBibG9ja3M7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgbmV3IG9wdGltaXplciB0byB0aGUgbGlz
dCBvZiBvcHRpbWl6ZXJzCisgICAgICogQHBhcmFtIG9wdGltaXplciBkZWZpbmVzIHRoZSBvcHRp
bWl6ZXJzIHRvIGFkZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1hdGVyaWFsCisgICAg
ICovCisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5yZWdpc3Rlck9wdGltaXplciA9IGZ1bmN0
aW9uIChvcHRpbWl6ZXIpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fb3B0aW1pemVycy5p
bmRleE9mKG9wdGltaXplcik7CisgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fb3B0aW1pemVycy5wdXNoKG9wdGlt
aXplcik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmVt
b3ZlIGFuIG9wdGltaXplciBmcm9tIHRoZSBsaXN0IG9mIG9wdGltaXplcnMKKyAgICAgKiBAcGFy
YW0gb3B0aW1pemVyIGRlZmluZXMgdGhlIG9wdGltaXplcnMgdG8gcmVtb3ZlCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgbWF0ZXJpYWwKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwucHJv
dG90eXBlLnVucmVnaXN0ZXJPcHRpbWl6ZXIgPSBmdW5jdGlvbiAob3B0aW1pemVyKSB7CisgICAg
ICAgIHZhciBpbmRleCA9IHRoaXMuX29wdGltaXplcnMuaW5kZXhPZihvcHRpbWl6ZXIpOworICAg
ICAgICBpZiAoaW5kZXggPT09IC0xKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fb3B0aW1pemVycy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBhIG5ldyBibG9jayB0byB0aGUg
bGlzdCBvZiBvdXRwdXQgbm9kZXMKKyAgICAgKiBAcGFyYW0gbm9kZSBkZWZpbmVzIHRoZSBub2Rl
IHRvIGFkZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1hdGVyaWFsCisgICAgICovCisg
ICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5hZGRPdXRwdXROb2RlID0gZnVuY3Rpb24gKG5vZGUp
IHsKKyAgICAgICAgaWYgKG5vZGUudGFyZ2V0ID09PSBudWxsKSB7CisgICAgICAgICAgICB0aHJv
dyAiVGhpcyBub2RlIGlzIG5vdCBtZWFudCB0byBiZSBhbiBvdXRwdXQgbm9kZS4gWW91IG1heSB3
YW50IHRvIGV4cGxpY2l0bHkgc2V0IGl0cyB0YXJnZXQgdmFsdWUuIjsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoKG5vZGUudGFyZ2V0ICYgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXgp
ICE9PSAwKSB7CisgICAgICAgICAgICB0aGlzLl9hZGRWZXJ0ZXhPdXRwdXROb2RlKG5vZGUpOwor
ICAgICAgICB9CisgICAgICAgIGlmICgobm9kZS50YXJnZXQgJiBfbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cyJdLkZyYWdtZW50KSAhPT0gMCkgeworICAgICAgICAgICAgdGhpcy5fYWRkRnJhZ21lbnRP
dXRwdXROb2RlKG5vZGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogUmVtb3ZlIGEgYmxvY2sgZnJvbSB0aGUgbGlzdCBvZiByb290IG5v
ZGVzCisgICAgICogQHBhcmFtIG5vZGUgZGVmaW5lcyB0aGUgbm9kZSB0byByZW1vdmUKKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCBtYXRlcmlhbAorICAgICAqLworICAgIE5vZGVNYXRlcmlh
bC5wcm90b3R5cGUucmVtb3ZlT3V0cHV0Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAg
IGlmIChub2RlLnRhcmdldCA9PT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKChub2RlLnRhcmdldCAmIF9ub2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzIl0uVmVydGV4KSAhPT0gMCkgeworICAgICAgICAgICAgdGhpcy5fcmVtb3ZlVmVydGV4T3V0
cHV0Tm9kZShub2RlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG5vZGUudGFyZ2V0ICYgX25v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJOb2Rl
TWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCkgIT09IDApIHsKKyAgICAgICAgICAgIHRo
aXMuX3JlbW92ZUZyYWdtZW50T3V0cHV0Tm9kZShub2RlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUuX2FkZFZlcnRl
eE91dHB1dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICBpZiAodGhpcy5fdmVydGV4
T3V0cHV0Tm9kZXMuaW5kZXhPZihub2RlKSAhPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBub2RlLnRhcmdldCA9IF9ub2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRz
Il0uVmVydGV4OworICAgICAgICB0aGlzLl92ZXJ0ZXhPdXRwdXROb2Rlcy5wdXNoKG5vZGUpOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUu
X3JlbW92ZVZlcnRleE91dHB1dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICB2YXIg
aW5kZXggPSB0aGlzLl92ZXJ0ZXhPdXRwdXROb2Rlcy5pbmRleE9mKG5vZGUpOworICAgICAgICBp
ZiAoaW5kZXggPT09IC0xKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fdmVydGV4T3V0cHV0Tm9kZXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLl9hZGRGcmFnbWVu
dE91dHB1dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICBpZiAodGhpcy5fZnJhZ21l
bnRPdXRwdXROb2Rlcy5pbmRleE9mKG5vZGUpICE9PSAtMSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIG5vZGUudGFyZ2V0ID0gX25vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJOb2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHMiXS5GcmFnbWVudDsKKyAgICAgICAgdGhpcy5fZnJhZ21lbnRPdXRwdXROb2Rlcy5wdXNoKG5v
ZGUpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbC5wcm90
b3R5cGUuX3JlbW92ZUZyYWdtZW50T3V0cHV0Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAg
ICAgIHZhciBpbmRleCA9IHRoaXMuX2ZyYWdtZW50T3V0cHV0Tm9kZXMuaW5kZXhPZihub2RlKTsK
KyAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX2ZyYWdtZW50T3V0cHV0Tm9kZXMuc3BsaWNlKGluZGV4LCAxKTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMg
aWYgdGhlIG1hdGVyaWFsIHdpbGwgcmVxdWlyZSBhbHBoYSBibGVuZGluZworICAgICAqIEByZXR1
cm5zIGEgYm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGFscGhhIGJsZW5kaW5nIGlzIG5lZWRlZAorICAg
ICAqLworICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhhQmxlbmRpbmcgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLmlnbm9yZUFscGhhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICh0aGlzLmFscGhhIDwgMS4w
KSB8fCAodGhpcy5fc2hhcmVkRGF0YSAmJiB0aGlzLl9zaGFyZWREYXRhLmhpbnRzLm5lZWRBbHBo
YUJsZW5kaW5nKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyBpZiB0aGlzIG1h
dGVyaWFsIHNob3VsZCBiZSByZW5kZXJlZCBpbiBhbHBoYSB0ZXN0IG1vZGUKKyAgICAgKiBAcmV0
dXJucyBhIGJvb2xlYW4gc3BlY2lmeWluZyBpZiBhbiBhbHBoYSB0ZXN0IGlzIG5lZWRlZC4KKyAg
ICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLm5lZWRBbHBoYVRlc3RpbmcgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9zaGFyZWREYXRhICYmIHRoaXMuX3NoYXJl
ZERhdGEuaGludHMubmVlZEFscGhhVGVzdGluZzsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbC5w
cm90b3R5cGUuX2luaXRpYWxpemVCbG9jayA9IGZ1bmN0aW9uIChub2RlLCBzdGF0ZSwgbm9kZXNU
b1Byb2Nlc3NGb3JPdGhlckJ1aWxkU3RhdGUpIHsKKyAgICAgICAgbm9kZS5pbml0aWFsaXplKHN0
YXRlKTsKKyAgICAgICAgbm9kZS5hdXRvQ29uZmlndXJlKHRoaXMpOworICAgICAgICBub2RlLl9w
cmVwYXJhdGlvbklkID0gdGhpcy5fYnVpbGRJZDsKKyAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRC
bG9ja3MuaW5kZXhPZihub2RlKSA9PT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRC
bG9ja3MucHVzaChub2RlKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9h
ID0gbm9kZS5pbnB1dHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIg
aW5wdXQgPSBfYVtfaV07CisgICAgICAgICAgICBpZiAoIW5vZGUuaXNJbnB1dCkgeworICAgICAg
ICAgICAgICAgIGlucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgPSAiIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBjb25uZWN0ZWRQb2ludCA9IGlucHV0LmNvbm5lY3RlZFBvaW50
OworICAgICAgICAgICAgaWYgKGNvbm5lY3RlZFBvaW50KSB7CisgICAgICAgICAgICAgICAgdmFy
IGJsb2NrID0gY29ubmVjdGVkUG9pbnQub3duZXJCbG9jazsKKyAgICAgICAgICAgICAgICBpZiAo
YmxvY2sgIT09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLnRhcmdldCA9
PT0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
WyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXhBbmRGcmFnbWVudCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZXNUb1Byb2Nlc3NGb3JPdGhlckJ1aWxkU3RhdGUucHVzaChi
bG9jayk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoc3RhdGUudGFyZ2V0ID09PSBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV84X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50Cisg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBibG9jay50YXJnZXQgPT09IF9ub2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzIl0uVmVydGV4CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBibG9jay5fcHJl
cGFyYXRpb25JZCAhPT0gdGhpcy5fYnVpbGRJZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZXNUb1Byb2Nlc3NGb3JPdGhlckJ1aWxkU3RhdGUucHVzaChibG9jayk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUJsb2NrKGJs
b2NrLCBzdGF0ZSwgbm9kZXNUb1Byb2Nlc3NGb3JPdGhlckJ1aWxkU3RhdGUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfYiA9
IDAsIF9jID0gbm9kZS5vdXRwdXRzOyBfYiA8IF9jLmxlbmd0aDsgX2IrKykgeworICAgICAgICAg
ICAgdmFyIG91dHB1dCA9IF9jW19iXTsKKyAgICAgICAgICAgIG91dHB1dC5hc3NvY2lhdGVkVmFy
aWFibGVOYW1lID0gIiI7CisgICAgICAgIH0KKyAgICB9OworICAgIE5vZGVNYXRlcmlhbC5wcm90
b3R5cGUuX3Jlc2V0RHVhbEJsb2NrcyA9IGZ1bmN0aW9uIChub2RlLCBpZCkgeworICAgICAgICBp
ZiAobm9kZS50YXJnZXQgPT09IF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzhfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4QW5kRnJh
Z21lbnQpIHsKKyAgICAgICAgICAgIG5vZGUuYnVpbGRJZCA9IGlkOworICAgICAgICB9CisgICAg
ICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBub2RlLmlucHV0czsgX2kgPCBfYS5sZW5ndGg7IF9p
KyspIHsKKyAgICAgICAgICAgIHZhciBpbnB1dHMgPSBfYVtfaV07CisgICAgICAgICAgICB2YXIg
Y29ubmVjdGVkUG9pbnQgPSBpbnB1dHMuY29ubmVjdGVkUG9pbnQ7CisgICAgICAgICAgICBpZiAo
Y29ubmVjdGVkUG9pbnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgYmxvY2sgPSBjb25uZWN0ZWRQ
b2ludC5vd25lckJsb2NrOworICAgICAgICAgICAgICAgIGlmIChibG9jayAhPT0gbm9kZSkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldER1YWxCbG9ja3MoYmxvY2ssIGlkKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIEJ1aWxkIHRoZSBtYXRlcmlhbCBhbmQgZ2VuZXJhdGVzIHRoZSBpbm5lciBlZmZl
Y3QKKyAgICAgKiBAcGFyYW0gdmVyYm9zZSBkZWZpbmVzIGlmIHRoZSBidWlsZCBzaG91bGQgbG9n
IGFjdGl2aXR5CisgICAgICovCisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5idWlsZCA9IGZ1
bmN0aW9uICh2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlID09PSB2b2lkIDApIHsgdmVy
Ym9zZSA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMuX2J1aWxkV2FzU3VjY2Vzc2Z1bCA9IGZhbHNl
OworICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRTY2VuZSgpLmdldEVuZ2luZSgpOworICAg
ICAgICBpZiAodGhpcy5fdmVydGV4T3V0cHV0Tm9kZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAg
ICAgICB0aHJvdyAiWW91IG11c3QgZGVmaW5lIGF0IGxlYXN0IG9uZSB2ZXJ0ZXhPdXRwdXROb2Rl
IjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZnJhZ21lbnRPdXRwdXROb2Rlcy5sZW5n
dGggPT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJZb3UgbXVzdCBkZWZpbmUgYXQgbGVhc3Qg
b25lIGZyYWdtZW50T3V0cHV0Tm9kZSI7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29tcGlsYXRp
b24gc3RhdGUKKyAgICAgICAgdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0ZSA9IG5ldyBfbm9k
ZU1hdGVyaWFsQnVpbGRTdGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJOb2RlTWF0
ZXJpYWxCdWlsZFN0YXRlIl0oKTsKKyAgICAgICAgdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0
ZS5zdXBwb3J0VW5pZm9ybUJ1ZmZlcnMgPSBlbmdpbmUuc3VwcG9ydHNVbmlmb3JtQnVmZmVyczsK
KyAgICAgICAgdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0ZS50YXJnZXQgPSBfbm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIk5vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0cyJdLlZlcnRleDsKKyAgICAgICAgdGhpcy5fZnJhZ21lbnRDb21waWxhdGlv
blN0YXRlID0gbmV3IF9ub2RlTWF0ZXJpYWxCdWlsZFN0YXRlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIk5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUiXSgpOworICAgICAgICB0aGlzLl9mcmFn
bWVudENvbXBpbGF0aW9uU3RhdGUuc3VwcG9ydFVuaWZvcm1CdWZmZXJzID0gZW5naW5lLnN1cHBv
cnRzVW5pZm9ybUJ1ZmZlcnM7CisgICAgICAgIHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0
ZS50YXJnZXQgPSBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50OworICAgICAgICAv
LyBTaGFyZWQgZGF0YQorICAgICAgICB0aGlzLl9zaGFyZWREYXRhID0gbmV3IF9ub2RlTWF0ZXJp
YWxCdWlsZFN0YXRlU2hhcmVkRGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJOb2Rl
TWF0ZXJpYWxCdWlsZFN0YXRlU2hhcmVkRGF0YSJdKCk7CisgICAgICAgIHRoaXMuX3ZlcnRleENv
bXBpbGF0aW9uU3RhdGUuc2hhcmVkRGF0YSA9IHRoaXMuX3NoYXJlZERhdGE7CisgICAgICAgIHRo
aXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0ZS5zaGFyZWREYXRhID0gdGhpcy5fc2hhcmVkRGF0
YTsKKyAgICAgICAgdGhpcy5fc2hhcmVkRGF0YS5idWlsZElkID0gdGhpcy5fYnVpbGRJZDsKKyAg
ICAgICAgdGhpcy5fc2hhcmVkRGF0YS5lbWl0Q29tbWVudHMgPSB0aGlzLl9vcHRpb25zLmVtaXRD
b21tZW50czsKKyAgICAgICAgdGhpcy5fc2hhcmVkRGF0YS52ZXJib3NlID0gdmVyYm9zZTsKKyAg
ICAgICAgLy8gSW5pdGlhbGl6ZSBibG9ja3MKKyAgICAgICAgdmFyIHZlcnRleE5vZGVzID0gW107
CisgICAgICAgIHZhciBmcmFnbWVudE5vZGVzID0gW107CisgICAgICAgIGZvciAodmFyIF9pID0g
MCwgX2EgPSB0aGlzLl92ZXJ0ZXhPdXRwdXROb2RlczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsK
KyAgICAgICAgICAgIHZhciB2ZXJ0ZXhPdXRwdXROb2RlID0gX2FbX2ldOworICAgICAgICAgICAg
dmVydGV4Tm9kZXMucHVzaCh2ZXJ0ZXhPdXRwdXROb2RlKTsKKyAgICAgICAgICAgIHRoaXMuX2lu
aXRpYWxpemVCbG9jayh2ZXJ0ZXhPdXRwdXROb2RlLCB0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0
YXRlLCBmcmFnbWVudE5vZGVzKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfYiA9IDAs
IF9jID0gdGhpcy5fZnJhZ21lbnRPdXRwdXROb2RlczsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHsK
KyAgICAgICAgICAgIHZhciBmcmFnbWVudE91dHB1dE5vZGUgPSBfY1tfYl07CisgICAgICAgICAg
ICBmcmFnbWVudE5vZGVzLnB1c2goZnJhZ21lbnRPdXRwdXROb2RlKTsKKyAgICAgICAgICAgIHRo
aXMuX2luaXRpYWxpemVCbG9jayhmcmFnbWVudE91dHB1dE5vZGUsIHRoaXMuX2ZyYWdtZW50Q29t
cGlsYXRpb25TdGF0ZSwgdmVydGV4Tm9kZXMpOworICAgICAgICB9CisgICAgICAgIC8vIE9wdGlt
aXplCisgICAgICAgIHRoaXMub3B0aW1pemUoKTsKKyAgICAgICAgLy8gVmVydGV4CisgICAgICAg
IGZvciAodmFyIF9kID0gMCwgdmVydGV4Tm9kZXNfMSA9IHZlcnRleE5vZGVzOyBfZCA8IHZlcnRl
eE5vZGVzXzEubGVuZ3RoOyBfZCsrKSB7CisgICAgICAgICAgICB2YXIgdmVydGV4T3V0cHV0Tm9k
ZSA9IHZlcnRleE5vZGVzXzFbX2RdOworICAgICAgICAgICAgdmVydGV4T3V0cHV0Tm9kZS5idWls
ZCh0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlLCB2ZXJ0ZXhOb2Rlcyk7CisgICAgICAgIH0K
KyAgICAgICAgLy8gRnJhZ21lbnQKKyAgICAgICAgdGhpcy5fZnJhZ21lbnRDb21waWxhdGlvblN0
YXRlLnVuaWZvcm1zID0gdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0ZS51bmlmb3Jtcy5zbGlj
ZSgwKTsKKyAgICAgICAgdGhpcy5fZnJhZ21lbnRDb21waWxhdGlvblN0YXRlLl91bmlmb3JtRGVj
bGFyYXRpb24gPSB0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlLl91bmlmb3JtRGVjbGFyYXRp
b247CisgICAgICAgIHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0ZS5fdmVydGV4U3RhdGUg
PSB0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlOworICAgICAgICBmb3IgKHZhciBfZSA9IDAs
IGZyYWdtZW50Tm9kZXNfMSA9IGZyYWdtZW50Tm9kZXM7IF9lIDwgZnJhZ21lbnROb2Rlc18xLmxl
bmd0aDsgX2UrKykgeworICAgICAgICAgICAgdmFyIGZyYWdtZW50T3V0cHV0Tm9kZSA9IGZyYWdt
ZW50Tm9kZXNfMVtfZV07CisgICAgICAgICAgICB0aGlzLl9yZXNldER1YWxCbG9ja3MoZnJhZ21l
bnRPdXRwdXROb2RlLCB0aGlzLl9idWlsZElkIC0gMSk7CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh2YXIgX2YgPSAwLCBmcmFnbWVudE5vZGVzXzIgPSBmcmFnbWVudE5vZGVzOyBfZiA8IGZyYWdt
ZW50Tm9kZXNfMi5sZW5ndGg7IF9mKyspIHsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudE91dHB1
dE5vZGUgPSBmcmFnbWVudE5vZGVzXzJbX2ZdOworICAgICAgICAgICAgZnJhZ21lbnRPdXRwdXRO
b2RlLmJ1aWxkKHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0ZSwgZnJhZ21lbnROb2Rlcyk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gRmluYWxpemUKKyAgICAgICAgdGhpcy5fdmVydGV4Q29t
cGlsYXRpb25TdGF0ZS5maW5hbGl6ZSh0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlKTsKKyAg
ICAgICAgdGhpcy5fZnJhZ21lbnRDb21waWxhdGlvblN0YXRlLmZpbmFsaXplKHRoaXMuX2ZyYWdt
ZW50Q29tcGlsYXRpb25TdGF0ZSk7CisgICAgICAgIHRoaXMuX2J1aWxkSWQgPSBOb2RlTWF0ZXJp
YWwuX0J1aWxkSWRHZW5lcmF0b3IrKzsKKyAgICAgICAgLy8gRXJyb3JzCisgICAgICAgIHRoaXMu
X3NoYXJlZERhdGEuZW1pdEVycm9ycygpOworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAg
ICAgICAgY29uc29sZS5sb2coIlZlcnRleCBzaGFkZXI6Iik7CisgICAgICAgICAgICBjb25zb2xl
LmxvZyh0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nKTsKKyAg
ICAgICAgICAgIGNvbnNvbGUubG9nKCJGcmFnbWVudCBzaGFkZXI6Iik7CisgICAgICAgICAgICBj
b25zb2xlLmxvZyh0aGlzLl9mcmFnbWVudENvbXBpbGF0aW9uU3RhdGUuY29tcGlsYXRpb25TdHJp
bmcpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2J1aWxkV2FzU3VjY2Vzc2Z1bCA9IHRydWU7
CisgICAgICAgIHRoaXMub25CdWlsZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOwor
ICAgICAgICAvLyBXaXBlIGRlZmluZXMKKyAgICAgICAgdmFyIG1lc2hlcyA9IHRoaXMuZ2V0U2Nl
bmUoKS5tZXNoZXM7CisgICAgICAgIGZvciAodmFyIF9nID0gMCwgbWVzaGVzXzEgPSBtZXNoZXM7
IF9nIDwgbWVzaGVzXzEubGVuZ3RoOyBfZysrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IG1l
c2hlc18xW19nXTsKKyAgICAgICAgICAgIGlmICghbWVzaC5zdWJNZXNoZXMpIHsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIF9o
ID0gMCwgX2ogPSBtZXNoLnN1Yk1lc2hlczsgX2ggPCBfai5sZW5ndGg7IF9oKyspIHsKKyAgICAg
ICAgICAgICAgICB2YXIgc3ViTWVzaCA9IF9qW19oXTsKKyAgICAgICAgICAgICAgICBpZiAoc3Vi
TWVzaC5nZXRNYXRlcmlhbCgpICE9PSB0aGlzKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXN1Yk1lc2guX21h
dGVyaWFsRGVmaW5lcykgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGRlZmluZXMgPSBzdWJNZXNoLl9tYXRlcmlh
bERlZmluZXM7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5tYXJrQWxsQXNEaXJ0eSgpOworICAg
ICAgICAgICAgICAgIGRlZmluZXMucmVzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqCisgICAgICogUnVucyBhbiBvdHBpbWl6YXRpb24gcGhhc2UgdG8gdHJ5
IHRvIGltcHJvdmUgdGhlIHNoYWRlciBjb2RlCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsLnBy
b3RvdHlwZS5vcHRpbWl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAw
LCBfYSA9IHRoaXMuX29wdGltaXplcnM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAg
ICAgICB2YXIgb3B0aW1pemVyID0gX2FbX2ldOworICAgICAgICAgICAgb3B0aW1pemVyLm9wdGlt
aXplKHRoaXMuX3ZlcnRleE91dHB1dE5vZGVzLCB0aGlzLl9mcmFnbWVudE91dHB1dE5vZGVzKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5fcHJlcGFyZURl
ZmluZXNGb3JBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKG1lc2gsIGRlZmluZXMpIHsKKyAgICAgICAg
aWYgKCFkZWZpbmVzLl9hcmVBdHRyaWJ1dGVzRGlydHkpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBkZWZpbmVzWyJOT1JNQUwiXSA9IG1lc2guaXNWZXJ0aWNlc0Rh
dGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJW
ZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKTsKKyAgICAgICAgZGVmaW5lc1siVEFOR0VOVCJdID0g
bWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzExX19bIlZlcnRleEJ1ZmZlciJdLlRhbmdlbnRLaW5kKTsKKyAgICAgICAgZGVm
aW5lc1siVVYxIl0gPSBtZXNoLmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAgKiBHZXQgaWYgdGhlIHN1Ym1lc2ggaXMgcmVhZHkgdG8gYmUg
dXNlZCBhbmQgYWxsIGl0cyBpbmZvcm1hdGlvbiBhdmFpbGFibGUuCisgICAgICAqIENoaWxkIGNs
YXNzZXMgY2FuIHVzZSBpdCB0byB1cGRhdGUgc2hhZGVycworICAgICAgKiBAcGFyYW0gbWVzaCBk
ZWZpbmVzIHRoZSBtZXNoIHRvIGNoZWNrCisgICAgICAqIEBwYXJhbSBzdWJNZXNoIGRlZmluZXMg
d2hpY2ggc3VibWVzaCB0byBjaGVjaworICAgICAgKiBAcGFyYW0gdXNlSW5zdGFuY2VzIHNwZWNp
ZmllcyB0aGF0IGluc3RhbmNlcyBzaG91bGQgYmUgdXNlZAorICAgICAgKiBAcmV0dXJucyBhIGJv
b2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJlYWR5IG9yIG5vdAorICAgICAg
Ki8KKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLmlzUmVhZHlGb3JTdWJNZXNoID0gZnVuY3Rp
b24gKG1lc2gsIHN1Yk1lc2gsIHVzZUluc3RhbmNlcykgeworICAgICAgICB2YXIgX3RoaXMgPSB0
aGlzOworICAgICAgICBpZiAodXNlSW5zdGFuY2VzID09PSB2b2lkIDApIHsgdXNlSW5zdGFuY2Vz
ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCF0aGlzLl9idWlsZFdhc1N1Y2Nlc3NmdWwpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2NlbmUgPSB0
aGlzLmdldFNjZW5lKCk7CisgICAgICAgIGlmICh0aGlzLl9zaGFyZWREYXRhLmFuaW1hdGVkSW5w
dXRzKSB7CisgICAgICAgICAgICB2YXIgZnJhbWVJZCA9IHNjZW5lLmdldEZyYW1lSWQoKTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9hbmltYXRpb25GcmFtZSAhPT0gZnJhbWVJZCkgeworICAgICAg
ICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9zaGFyZWREYXRhLmFuaW1hdGVk
SW5wdXRzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgICAgICB2YXIg
aW5wdXQgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgICAgIGlucHV0LmFuaW1hdGUoc2NlbmUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl9hbmltYXRpb25GcmFt
ZSA9IGZyYW1lSWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1Yk1l
c2guZWZmZWN0ICYmIHRoaXMuaXNGcm96ZW4pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl93YXNQ
cmV2aW91c2x5UmVhZHkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXN1Yk1lc2guX21hdGVyaWFsRGVmaW5lcykg
eworICAgICAgICAgICAgc3ViTWVzaC5fbWF0ZXJpYWxEZWZpbmVzID0gbmV3IE5vZGVNYXRlcmlh
bERlZmluZXMoKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZGVmaW5lcyA9IHN1Yk1lc2guX21h
dGVyaWFsRGVmaW5lczsKKyAgICAgICAgaWYgKCF0aGlzLmNoZWNrUmVhZHlPbkV2ZXJ5Q2FsbCAm
JiBzdWJNZXNoLmVmZmVjdCkgeworICAgICAgICAgICAgaWYgKGRlZmluZXMuX3JlbmRlcklkID09
PSBzY2VuZS5nZXRSZW5kZXJJZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVu
Z2luZSgpOworICAgICAgICB0aGlzLl9wcmVwYXJlRGVmaW5lc0ZvckF0dHJpYnV0ZXMobWVzaCwg
ZGVmaW5lcyk7CisgICAgICAgIC8vIENoZWNrIGlmIGJsb2NrcyBhcmUgcmVhZHkKKyAgICAgICAg
aWYgKHRoaXMuX3NoYXJlZERhdGEuYmxvY2tpbmdCbG9ja3Muc29tZShmdW5jdGlvbiAoYikgeyBy
ZXR1cm4gIWIuaXNSZWFkeShtZXNoLCBfdGhpcywgZGVmaW5lcywgdXNlSW5zdGFuY2VzKTsgfSkp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAvLyBTaGFy
ZWQgZGVmaW5lcworICAgICAgICB0aGlzLl9zaGFyZWREYXRhLmJsb2Nrc1dpdGhEZWZpbmVzLmZv
ckVhY2goZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAgIGIuaW5pdGlhbGl6ZURlZmluZXMobWVz
aCwgX3RoaXMsIGRlZmluZXMsIHVzZUluc3RhbmNlcyk7CisgICAgICAgIH0pOworICAgICAgICB0
aGlzLl9zaGFyZWREYXRhLmJsb2Nrc1dpdGhEZWZpbmVzLmZvckVhY2goZnVuY3Rpb24gKGIpIHsK
KyAgICAgICAgICAgIGIucHJlcGFyZURlZmluZXMobWVzaCwgX3RoaXMsIGRlZmluZXMsIHVzZUlu
c3RhbmNlcyk7CisgICAgICAgIH0pOworICAgICAgICAvLyBOZWVkIHRvIHJlY29tcGlsZT8KKyAg
ICAgICAgaWYgKGRlZmluZXMuaXNEaXJ0eSkgeworICAgICAgICAgICAgZGVmaW5lcy5tYXJrQXNQ
cm9jZXNzZWQoKTsKKyAgICAgICAgICAgIC8vIFJlcGVhdGFibGUgY29udGVudCBnZW5lcmF0b3Jz
CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlLmNvbXBpbGF0aW9uU3Ry
aW5nID0gdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0ZS5fYnVpbHRDb21waWxhdGlvblN0cmlu
ZzsKKyAgICAgICAgICAgIHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0ZS5jb21waWxhdGlv
blN0cmluZyA9IHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0ZS5fYnVpbHRDb21waWxhdGlv
blN0cmluZzsKKyAgICAgICAgICAgIHRoaXMuX3NoYXJlZERhdGEucmVwZWF0YWJsZUNvbnRlbnRC
bG9ja3MuZm9yRWFjaChmdW5jdGlvbiAoYikgeworICAgICAgICAgICAgICAgIGIucmVwbGFjZVJl
cGVhdGFibGVDb250ZW50KF90aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlLCBfdGhpcy5fZnJh
Z21lbnRDb21waWxhdGlvblN0YXRlLCBtZXNoLCBkZWZpbmVzKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgLy8gVW5pZm9ybXMKKyAgICAgICAgICAgIHRoaXMuX3NoYXJlZERhdGEuZHlu
YW1pY1VuaWZvcm1CbG9ja3MuZm9yRWFjaChmdW5jdGlvbiAoYikgeworICAgICAgICAgICAgICAg
IGIudXBkYXRlVW5pZm9ybXNBbmRTYW1wbGVzKF90aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRl
LCBfdGhpcywgZGVmaW5lcyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHZhciBtZXJn
ZWRVbmlmb3Jtc18xID0gdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0ZS51bmlmb3JtczsKKyAg
ICAgICAgICAgIHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0ZS51bmlmb3Jtcy5mb3JFYWNo
KGZ1bmN0aW9uICh1KSB7CisgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gbWVyZ2VkVW5pZm9y
bXNfMS5pbmRleE9mKHUpOworICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWVyZ2VkVW5pZm9ybXNfMS5wdXNoKHUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgLy8gVW5pZm9ybSBidWZmZXJzCisg
ICAgICAgICAgICB2YXIgbWVyZ2VkVW5pZm9ybUJ1ZmZlcnNfMSA9IHRoaXMuX3ZlcnRleENvbXBp
bGF0aW9uU3RhdGUudW5pZm9ybUJ1ZmZlcnM7CisgICAgICAgICAgICB0aGlzLl9mcmFnbWVudENv
bXBpbGF0aW9uU3RhdGUudW5pZm9ybUJ1ZmZlcnMuZm9yRWFjaChmdW5jdGlvbiAodSkgeworICAg
ICAgICAgICAgICAgIHZhciBpbmRleCA9IG1lcmdlZFVuaWZvcm1CdWZmZXJzXzEuaW5kZXhPZih1
KTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1lcmdlZFVuaWZvcm1CdWZmZXJzXzEucHVzaCh1KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIFNhbXBsZXJzCisgICAgICAgICAgICB2YXIg
bWVyZ2VkU2FtcGxlcnNfMSA9IHRoaXMuX3ZlcnRleENvbXBpbGF0aW9uU3RhdGUuc2FtcGxlcnM7
CisgICAgICAgICAgICB0aGlzLl9mcmFnbWVudENvbXBpbGF0aW9uU3RhdGUuc2FtcGxlcnMuZm9y
RWFjaChmdW5jdGlvbiAocykgeworICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IG1lcmdlZFNh
bXBsZXJzXzEuaW5kZXhPZihzKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7
CisgICAgICAgICAgICAgICAgICAgIG1lcmdlZFNhbXBsZXJzXzEucHVzaChzKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHZhciBmYWxsYmFja3MgPSBu
ZXcgX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJFZmZlY3RGYWxsYmFja3Mi
XSgpOworICAgICAgICAgICAgdGhpcy5fc2hhcmVkRGF0YS5ibG9ja3NXaXRoRmFsbGJhY2tzLmZv
ckVhY2goZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAgICAgICBiLnByb3ZpZGVGYWxsYmFja3Mo
bWVzaCwgZmFsbGJhY2tzKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdmFyIHByZXZp
b3VzRWZmZWN0ID0gc3ViTWVzaC5lZmZlY3Q7CisgICAgICAgICAgICAvLyBDb21waWxhdGlvbgor
ICAgICAgICAgICAgdmFyIGpvaW4gPSBkZWZpbmVzLnRvU3RyaW5nKCk7CisgICAgICAgICAgICB2
YXIgZWZmZWN0ID0gZW5naW5lLmNyZWF0ZUVmZmVjdCh7CisgICAgICAgICAgICAgICAgdmVydGV4
OiAibm9kZU1hdGVyaWFsIiArIHRoaXMuX2J1aWxkSWQsCisgICAgICAgICAgICAgICAgZnJhZ21l
bnQ6ICJub2RlTWF0ZXJpYWwiICsgdGhpcy5fYnVpbGRJZCwKKyAgICAgICAgICAgICAgICB2ZXJ0
ZXhTb3VyY2U6IHRoaXMuX3ZlcnRleENvbXBpbGF0aW9uU3RhdGUuY29tcGlsYXRpb25TdHJpbmcs
CisgICAgICAgICAgICAgICAgZnJhZ21lbnRTb3VyY2U6IHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRp
b25TdGF0ZS5jb21waWxhdGlvblN0cmluZworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZXM6IHRoaXMuX3ZlcnRleENvbXBpbGF0aW9uU3RhdGUuYXR0cmlidXRlcywK
KyAgICAgICAgICAgICAgICB1bmlmb3Jtc05hbWVzOiBtZXJnZWRVbmlmb3Jtc18xLAorICAgICAg
ICAgICAgICAgIHVuaWZvcm1CdWZmZXJzTmFtZXM6IG1lcmdlZFVuaWZvcm1CdWZmZXJzXzEsCisg
ICAgICAgICAgICAgICAgc2FtcGxlcnM6IG1lcmdlZFNhbXBsZXJzXzEsCisgICAgICAgICAgICAg
ICAgZGVmaW5lczogam9pbiwKKyAgICAgICAgICAgICAgICBmYWxsYmFja3M6IGZhbGxiYWNrcywK
KyAgICAgICAgICAgICAgICBvbkNvbXBpbGVkOiB0aGlzLm9uQ29tcGlsZWQsCisgICAgICAgICAg
ICAgICAgb25FcnJvcjogdGhpcy5vbkVycm9yLAorICAgICAgICAgICAgICAgIGluZGV4UGFyYW1l
dGVyczogeyBtYXhTaW11bHRhbmVvdXNMaWdodHM6IHRoaXMubWF4U2ltdWx0YW5lb3VzTGlnaHRz
LCBtYXhTaW11bHRhbmVvdXNNb3JwaFRhcmdldHM6IGRlZmluZXMuTlVNX01PUlBIX0lORkxVRU5D
RVJTIH0KKyAgICAgICAgICAgIH0sIGVuZ2luZSk7CisgICAgICAgICAgICBpZiAoZWZmZWN0KSB7
CisgICAgICAgICAgICAgICAgLy8gVXNlIHByZXZpb3VzIGVmZmVjdCB3aGlsZSBuZXcgb25lIGlz
IGNvbXBpbGluZworICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsbG93U2hhZGVySG90U3dhcHBp
bmcgJiYgcHJldmlvdXNFZmZlY3QgJiYgIWVmZmVjdC5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZWZmZWN0ID0gcHJldmlvdXNFZmZlY3Q7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmluZXMubWFya0FzVW5wcm9jZXNzZWQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLnJlc2V0Q2FjaGVkTWF0ZXJp
YWwoKTsKKyAgICAgICAgICAgICAgICAgICAgc3ViTWVzaC5zZXRFZmZlY3QoZWZmZWN0LCBkZWZp
bmVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFzdWJNZXNoLmVmZmVjdCB8fCAhc3ViTWVzaC5lZmZlY3QuaXNSZWFkeSgpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZGVmaW5lcy5fcmVu
ZGVySWQgPSBzY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICB0aGlzLl93YXNQcmV2aW91c2x5
UmVhZHkgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShOb2RlTWF0ZXJpYWwucHJvdG90eXBlLCAiY29tcGlsZWRTaGFkZXJzIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUg
c2hhZGVycyBidWlsdCBieSB0aGUgY3VycmVudCBub2RlIGdyYXBoCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAiLy8gVmVydGV4IHNo
YWRlclxyXG4iICsgdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0ZS5jb21waWxhdGlvblN0cmlu
ZyArICJcclxuXHJcbi8vIEZyYWdtZW50IHNoYWRlclxyXG4iICsgdGhpcy5fZnJhZ21lbnRDb21w
aWxhdGlvblN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAv
KioKKyAgICAgKiBCaW5kcyB0aGUgd29ybGQgbWF0cml4IHRvIHRoZSBtYXRlcmlhbAorICAgICAq
IEBwYXJhbSB3b3JsZCBkZWZpbmVzIHRoZSB3b3JsZCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKKyAg
ICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLmJpbmRPbmx5V29ybGRNYXRyaXggPSBm
dW5jdGlvbiAod29ybGQpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOwor
ICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZUVmZmVjdCkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHZhciBoaW50cyA9IHRoaXMuX3NoYXJlZERhdGEuaGludHM7Cisg
ICAgICAgIGlmIChoaW50cy5uZWVkV29ybGRWaWV3TWF0cml4KSB7CisgICAgICAgICAgICB3b3Js
ZC5tdWx0aXBseVRvUmVmKHNjZW5lLmdldFZpZXdNYXRyaXgoKSwgdGhpcy5fY2FjaGVkV29ybGRW
aWV3TWF0cml4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGludHMubmVlZFdvcmxkVmlld1By
b2plY3Rpb25NYXRyaXgpIHsKKyAgICAgICAgICAgIHdvcmxkLm11bHRpcGx5VG9SZWYoc2NlbmUu
Z2V0VHJhbnNmb3JtTWF0cml4KCksIHRoaXMuX2NhY2hlZFdvcmxkVmlld1Byb2plY3Rpb25NYXRy
aXgpOworICAgICAgICB9CisgICAgICAgIC8vIENvbm5lY3Rpb24gcG9pbnRzCisgICAgICAgIGZv
ciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9zaGFyZWREYXRhLmlucHV0QmxvY2tzOyBfaSA8IF9h
Lmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGlucHV0QmxvY2sgPSBfYVtfaV07Cisg
ICAgICAgICAgICBpbnB1dEJsb2NrLl90cmFuc21pdFdvcmxkKHRoaXMuX2FjdGl2ZUVmZmVjdCwg
d29ybGQsIHRoaXMuX2NhY2hlZFdvcmxkVmlld01hdHJpeCwgdGhpcy5fY2FjaGVkV29ybGRWaWV3
UHJvamVjdGlvbk1hdHJpeCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEJp
bmRzIHRoZSBzdWJtZXNoIHRvIHRoaXMgbWF0ZXJpYWwgYnkgcHJlcGFyaW5nIHRoZSBlZmZlY3Qg
YW5kIHNoYWRlciB0byBkcmF3CisgICAgICogQHBhcmFtIHdvcmxkIGRlZmluZXMgdGhlIHdvcmxk
IHRyYW5zZm9ybWF0aW9uIG1hdHJpeAorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIG1l
c2ggY29udGFpbmluZyB0aGUgc3VibWVzaAorICAgICAqIEBwYXJhbSBzdWJNZXNoIGRlZmluZXMg
dGhlIHN1Ym1lc2ggdG8gYmluZCB0aGUgbWF0ZXJpYWwgdG8KKyAgICAgKi8KKyAgICBOb2RlTWF0
ZXJpYWwucHJvdG90eXBlLmJpbmRGb3JTdWJNZXNoID0gZnVuY3Rpb24gKHdvcmxkLCBtZXNoLCBz
dWJNZXNoKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAg
dmFyIGVmZmVjdCA9IHN1Yk1lc2guZWZmZWN0OworICAgICAgICBpZiAoIWVmZmVjdCkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2FjdGl2ZUVmZmVjdCA9
IGVmZmVjdDsKKyAgICAgICAgLy8gTWF0cmljZXMKKyAgICAgICAgdGhpcy5iaW5kT25seVdvcmxk
TWF0cml4KHdvcmxkKTsKKyAgICAgICAgdmFyIG11c3RSZWJpbmQgPSB0aGlzLl9tdXN0UmViaW5k
KHNjZW5lLCBlZmZlY3QsIG1lc2gudmlzaWJpbGl0eSk7CisgICAgICAgIGlmIChtdXN0UmViaW5k
KSB7CisgICAgICAgICAgICB2YXIgc2hhcmVkRGF0YSA9IHRoaXMuX3NoYXJlZERhdGE7CisgICAg
ICAgICAgICBpZiAoZWZmZWN0ICYmIHNjZW5lLmdldENhY2hlZE1hdGVyaWFsKCkgIT09IHRoaXMp
IHsKKyAgICAgICAgICAgICAgICAvLyBCaW5kYWJsZSBibG9ja3MKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBfaSA9IDAsIF9hID0gc2hhcmVkRGF0YS5iaW5kYWJsZUJsb2NrczsgX2kgPCBfYS5s
ZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gX2FbX2ldOwor
ICAgICAgICAgICAgICAgICAgICBibG9jay5iaW5kKGVmZmVjdCwgdGhpcywgbWVzaCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIENvbm5lY3Rpb24gcG9pbnRzCisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBfYyA9IHNoYXJlZERhdGEuaW5wdXRCbG9ja3M7
IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dEJs
b2NrID0gX2NbX2JdOworICAgICAgICAgICAgICAgICAgICBpbnB1dEJsb2NrLl90cmFuc21pdChl
ZmZlY3QsIHNjZW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fYWZ0ZXJCaW5kKG1lc2gsIHRoaXMuX2FjdGl2ZUVmZmVjdCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBhY3RpdmUgdGV4dHVyZXMgZnJvbSB0aGUg
bWF0ZXJpYWwKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB0ZXh0dXJlcworICAgICAqLwor
ICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUuZ2V0QWN0aXZlVGV4dHVyZXMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBhY3RpdmVUZXh0dXJlcyA9IF9zdXBlci5wcm90b3R5cGUuZ2V0QWN0
aXZlVGV4dHVyZXMuY2FsbCh0aGlzKTsKKyAgICAgICAgYWN0aXZlVGV4dHVyZXMucHVzaC5hcHBs
eShhY3RpdmVUZXh0dXJlcywgdGhpcy5fc2hhcmVkRGF0YS50ZXh0dXJlQmxvY2tzLmZpbHRlcihm
dW5jdGlvbiAodGIpIHsgcmV0dXJuIHRiLnRleHR1cmU7IH0pLm1hcChmdW5jdGlvbiAodGIpIHsg
cmV0dXJuIHRiLnRleHR1cmU7IH0pKTsKKyAgICAgICAgcmV0dXJuIGFjdGl2ZVRleHR1cmVzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGlzdCBvZiB0ZXh0dXJlIGJsb2Nrcwor
ICAgICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIHRleHR1cmUgYmxvY2tzCisgICAgICovCisgICAg
Tm9kZU1hdGVyaWFsLnByb3RvdHlwZS5nZXRUZXh0dXJlQmxvY2tzID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICBpZiAoIXRoaXMuX3NoYXJlZERhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBbXTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fc2hhcmVkRGF0YS50ZXh0dXJlQmxvY2tz
LmZpbHRlcihmdW5jdGlvbiAodGIpIHsgcmV0dXJuIHRiLnRleHR1cmU7IH0pOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU3BlY2lmaWVzIGlmIHRoZSBtYXRlcmlhbCB1c2VzIGEgdGV4dHVyZQor
ICAgICAqIEBwYXJhbSB0ZXh0dXJlIGRlZmluZXMgdGhlIHRleHR1cmUgdG8gY2hlY2sgYWdhaW5z
dCB0aGUgbWF0ZXJpYWwKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gc3BlY2lmeWluZyBpZiB0
aGUgbWF0ZXJpYWwgdXNlcyB0aGUgdGV4dHVyZQorICAgICAqLworICAgIE5vZGVNYXRlcmlhbC5w
cm90b3R5cGUuaGFzVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlKSB7CisgICAgICAgIGlmIChf
c3VwZXIucHJvdG90eXBlLmhhc1RleHR1cmUuY2FsbCh0aGlzLCB0ZXh0dXJlKSkgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9zaGFyZWRE
YXRhKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3NoYXJlZERhdGEudGV4dHVyZUJsb2NrczsgX2kgPCBf
YS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciB0ID0gX2FbX2ldOworICAgICAgICAg
ICAgaWYgKHQudGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBtYXRlcmlhbAorICAgICAqIEBwYXJh
bSBmb3JjZURpc3Bvc2VFZmZlY3Qgc3BlY2lmaWVzIGlmIGVmZmVjdHMgc2hvdWxkIGJlIGZvcmNl
ZnVsbHkgZGlzcG9zZWQKKyAgICAgKiBAcGFyYW0gZm9yY2VEaXNwb3NlVGV4dHVyZXMgc3BlY2lm
aWVzIGlmIHRleHR1cmVzIHNob3VsZCBiZSBmb3JjZWZ1bGx5IGRpc3Bvc2VkCisgICAgICogQHBh
cmFtIG5vdEJvdW5kVG9NZXNoIHNwZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwgdGhhdCBpcyBiZWlu
ZyBkaXNwb3NlZCBpcyBrbm93biB0byBiZSBub3QgYm91bmQgdG8gYW55IG1lc2gKKyAgICAgKi8K
KyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZm9yY2VEaXNw
b3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcywgbm90Qm91bmRUb01lc2gpIHsKKyAgICAg
ICAgaWYgKGZvcmNlRGlzcG9zZVRleHR1cmVzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBfaSA9
IDAsIF9hID0gdGhpcy5fc2hhcmVkRGF0YS50ZXh0dXJlQmxvY2tzLmZpbHRlcihmdW5jdGlvbiAo
dGIpIHsgcmV0dXJuIHRiLnRleHR1cmU7IH0pLm1hcChmdW5jdGlvbiAodGIpIHsgcmV0dXJuIHRi
LnRleHR1cmU7IH0pOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZh
ciB0ZXh0dXJlID0gX2FbX2ldOworICAgICAgICAgICAgICAgIHRleHR1cmUuZGlzcG9zZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMub25CdWlsZE9ic2VydmFibGUu
Y2xlYXIoKTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcywgZm9y
Y2VEaXNwb3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcywgbm90Qm91bmRUb01lc2gpOwor
ICAgIH07CisgICAgLyoqIENyZWF0ZXMgdGhlIG5vZGUgZWRpdG9yIHdpbmRvdy4gKi8KKyAgICBO
b2RlTWF0ZXJpYWwucHJvdG90eXBlLl9jcmVhdGVOb2RlRWRpdG9yID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB0aGlzLkJKU05PREVNQVRFUklBTEVESVRPUiA9IHRoaXMuQkpTTk9ERU1BVEVSSUFM
RURJVE9SIHx8IHRoaXMuX2dldEdsb2JhbE5vZGVNYXRlcmlhbEVkaXRvcigpOworICAgICAgICB0
aGlzLkJKU05PREVNQVRFUklBTEVESVRPUi5Ob2RlRWRpdG9yLlNob3coeworICAgICAgICAgICAg
bm9kZU1hdGVyaWFsOiB0aGlzCisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICog
TGF1bmNoIHRoZSBub2RlIG1hdGVyaWFsIGVkaXRvcgorICAgICAqIEBwYXJhbSBjb25maWcgRGVm
aW5lIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBlZGl0b3IKKyAgICAgKiBAcmV0dXJuIGEgcHJv
bWlzZSBmdWxmaWxsZWQgd2hlbiB0aGUgbm9kZSBlZGl0b3IgaXMgdmlzaWJsZQorICAgICAqLwor
ICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUuZWRpdCA9IGZ1bmN0aW9uIChjb25maWcpIHsKKyAg
ICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMuQkpT
Tk9ERU1BVEVSSUFMRURJVE9SID09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgdmFy
IGVkaXRvclVybCA9IGNvbmZpZyAmJiBjb25maWcuZWRpdG9yVVJMID8gY29uZmlnLmVkaXRvclVS
TCA6IE5vZGVNYXRlcmlhbC5FZGl0b3JVUkw7CisgICAgICAgICAgICAgICAgLy8gTG9hZCBlZGl0
b3IgYW5kIGFkZCBpdCB0byB0aGUgRE9NCisgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlRvb2xzIl0uTG9hZFNjcmlwdChlZGl0b3JVcmws
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2NyZWF0ZU5vZGVFZGl0
b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlIGNyZWF0ZXMgdGhlIGVkaXRvcgorICAgICAgICAgICAgICAgIF90aGlzLl9jcmVh
dGVOb2RlRWRpdG9yKCk7CisgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsZWFyIHRoZSBjdXJyZW50
IG1hdGVyaWFsCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5jbGVhciA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fdmVydGV4T3V0cHV0Tm9kZXMgPSBbXTsKKyAgICAg
ICAgdGhpcy5fZnJhZ21lbnRPdXRwdXROb2RlcyA9IFtdOworICAgICAgICB0aGlzLmF0dGFjaGVk
QmxvY2tzID0gW107CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbGVhciB0aGUgY3VycmVudCBt
YXRlcmlhbCBhbmQgc2V0IGl0IHRvIGEgZGVmYXVsdCBzdGF0ZQorICAgICAqLworICAgIE5vZGVN
YXRlcmlhbC5wcm90b3R5cGUuc2V0VG9EZWZhdWx0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0
aGlzLmNsZWFyKCk7CisgICAgICAgIHZhciBwb3NpdGlvbklucHV0ID0gbmV3IF9CbG9ja3NfSW5w
dXRfaW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siSW5wdXRCbG9jayJd
KCJwb3NpdGlvbiIpOworICAgICAgICBwb3NpdGlvbklucHV0LnNldEFzQXR0cmlidXRlKCJwb3Np
dGlvbiIpOworICAgICAgICB2YXIgd29ybGRJbnB1dCA9IG5ldyBfQmxvY2tzX0lucHV0X2lucHV0
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIklucHV0QmxvY2siXSgid29ybGQi
KTsKKyAgICAgICAgd29ybGRJbnB1dC5zZXRBc1N5c3RlbVZhbHVlKEJBQllMT04uTm9kZU1hdGVy
aWFsU3lzdGVtVmFsdWVzLldvcmxkKTsKKyAgICAgICAgdmFyIHdvcmxkUG9zID0gbmV3IF9CbG9j
a3NfdHJhbnNmb3JtQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlRyYW5zZm9y
bUJsb2NrIl0oIndvcmxkUG9zIik7CisgICAgICAgIHBvc2l0aW9uSW5wdXQuY29ubmVjdFRvKHdv
cmxkUG9zKTsKKyAgICAgICAgd29ybGRJbnB1dC5jb25uZWN0VG8od29ybGRQb3MpOworICAgICAg
ICB2YXIgdmlld1Byb2plY3Rpb25JbnB1dCA9IG5ldyBfQmxvY2tzX0lucHV0X2lucHV0QmxvY2tf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIklucHV0QmxvY2siXSgidmlld1Byb2plY3Rp
b24iKTsKKyAgICAgICAgdmlld1Byb2plY3Rpb25JbnB1dC5zZXRBc1N5c3RlbVZhbHVlKEJBQllM
T04uTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzLlZpZXdQcm9qZWN0aW9uKTsKKyAgICAgICAgdmFy
IHdvcmxkUG9zZE11bHRpcGxpZWRCeVZpZXdQcm9qZWN0aW9uID0gbmV3IF9CbG9ja3NfdHJhbnNm
b3JtQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlRyYW5zZm9ybUJsb2NrIl0o
IndvcmxkUG9zICogdmlld1Byb2plY3Rpb25UcmFuc2Zvcm0iKTsKKyAgICAgICAgd29ybGRQb3Mu
Y29ubmVjdFRvKHdvcmxkUG9zZE11bHRpcGxpZWRCeVZpZXdQcm9qZWN0aW9uKTsKKyAgICAgICAg
dmlld1Byb2plY3Rpb25JbnB1dC5jb25uZWN0VG8od29ybGRQb3NkTXVsdGlwbGllZEJ5Vmlld1By
b2plY3Rpb24pOworICAgICAgICB2YXIgdmVydGV4T3V0cHV0ID0gbmV3IF9CbG9ja3NfVmVydGV4
X3ZlcnRleE91dHB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJWZXJ0ZXhP
dXRwdXRCbG9jayJdKCJ2ZXJ0ZXhPdXRwdXQiKTsKKyAgICAgICAgd29ybGRQb3NkTXVsdGlwbGll
ZEJ5Vmlld1Byb2plY3Rpb24uY29ubmVjdFRvKHZlcnRleE91dHB1dCk7CisgICAgICAgIC8vIFBp
eGVsCisgICAgICAgIHZhciBwaXhlbENvbG9yID0gbmV3IF9CbG9ja3NfSW5wdXRfaW5wdXRCbG9j
a19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siSW5wdXRCbG9jayJdKCJjb2xvciIpOwor
ICAgICAgICBwaXhlbENvbG9yLnZhbHVlID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbG9yNCJdKDAuOCwgMC44LCAwLjgsIDEpOworICAgICAg
ICB2YXIgZnJhZ21lbnRPdXRwdXQgPSBuZXcgX0Jsb2Nrc19GcmFnbWVudF9mcmFnbWVudE91dHB1
dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJGcmFnbWVudE91dHB1dEJsb2Nr
Il0oImZyYWdtZW50T3V0cHV0Iik7CisgICAgICAgIHBpeGVsQ29sb3IuY29ubmVjdFRvKGZyYWdt
ZW50T3V0cHV0KTsKKyAgICAgICAgLy8gQWRkIHRvIG5vZGVzCisgICAgICAgIHRoaXMuYWRkT3V0
cHV0Tm9kZSh2ZXJ0ZXhPdXRwdXQpOworICAgICAgICB0aGlzLmFkZE91dHB1dE5vZGUoZnJhZ21l
bnRPdXRwdXQpOworICAgIH07CisgICAgLyoqCisgICAgICogTG9hZHMgdGhlIGN1cnJlbnQgTm9k
ZSBNYXRlcmlhbCBmcm9tIGEgdXJsIHBvaW50aW5nIHRvIGEgZmlsZSBzYXZlIGJ5IHRoZSBOb2Rl
IE1hdGVyaWFsIEVkaXRvcgorICAgICAqIEBwYXJhbSB1cmwgZGVmaW5lcyB0aGUgdXJsIHRvIGxv
YWQgZnJvbQorICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdpbGwgZnVsbGZpbCB3aGVu
IHRoZSBtYXRlcmlhbCBpcyBmdWxseSBsb2FkZWQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwu
cHJvdG90eXBlLmxvYWRBc3luYyA9IGZ1bmN0aW9uICh1cmwpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCBy
ZWplY3QpIHsKKyAgICAgICAgICAgIF9NaXNjX2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTlfX1siRmlsZVRvb2xzIl0uTG9hZEZpbGUodXJsLCBmdW5jdGlvbiAoZGF0YSkgewor
ICAgICAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gSlNPTi5wYXJzZShkYXRh
KTsKKyAgICAgICAgICAgICAgICBfdGhpcy5sb2FkRnJvbVNlcmlhbGl6YXRpb24oc2VyaWFsaXph
dGlvbk9iamVjdCwgIiIpOworICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAg
IH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZSwgZnVuY3Rpb24gKHJlcXVlc3QsIGV4Y2Vw
dGlvbikgeworICAgICAgICAgICAgICAgIHJlamVjdChleGNlcHRpb24ubWVzc2FnZSk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90
eXBlLl9nYXRoZXJCbG9ja3MgPSBmdW5jdGlvbiAocm9vdE5vZGUsIGxpc3QpIHsKKyAgICAgICAg
aWYgKGxpc3QuaW5kZXhPZihyb290Tm9kZSkgIT09IC0xKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgbGlzdC5wdXNoKHJvb3ROb2RlKTsKKyAgICAgICAgZm9yICh2
YXIgX2kgPSAwLCBfYSA9IHJvb3ROb2RlLmlucHV0czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsK
KyAgICAgICAgICAgIHZhciBpbnB1dCA9IF9hW19pXTsKKyAgICAgICAgICAgIHZhciBjb25uZWN0
ZWRQb2ludCA9IGlucHV0LmNvbm5lY3RlZFBvaW50OworICAgICAgICAgICAgaWYgKGNvbm5lY3Rl
ZFBvaW50KSB7CisgICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gY29ubmVjdGVkUG9pbnQub3du
ZXJCbG9jazsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2sgIT09IHJvb3ROb2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2dhdGhlckJsb2NrcyhibG9jaywgbGlzdCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZW5lcmF0ZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb2RlIGRlY2xhcmF0aW9uIHJl
cXVpcmVkIHRvIGNyZWF0ZSBhbiBlcXVpdmFsZW50IG9mIHRoaXMgbWF0ZXJpYWwKKyAgICAgKiBA
cmV0dXJucyBhIHN0cmluZworICAgICAqLworICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUuZ2Vu
ZXJhdGVDb2RlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgYWxyZWFkeUR1bXBlZCA9IFtd
OworICAgICAgICB2YXIgdmVydGV4QmxvY2tzID0gW107CisgICAgICAgIHZhciB1bmlxdWVOYW1l
cyA9IFtdOworICAgICAgICAvLyBHZXRzIGFjdGl2ZSBibG9ja3MKKyAgICAgICAgZm9yICh2YXIg
X2kgPSAwLCBfYSA9IHRoaXMuX3ZlcnRleE91dHB1dE5vZGVzOyBfaSA8IF9hLmxlbmd0aDsgX2kr
KykgeworICAgICAgICAgICAgdmFyIG91dHB1dE5vZGUgPSBfYVtfaV07CisgICAgICAgICAgICB0
aGlzLl9nYXRoZXJCbG9ja3Mob3V0cHV0Tm9kZSwgdmVydGV4QmxvY2tzKTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgZnJhZ21lbnRCbG9ja3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgX2IgPSAw
LCBfYyA9IHRoaXMuX2ZyYWdtZW50T3V0cHV0Tm9kZXM7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7
CisgICAgICAgICAgICB2YXIgb3V0cHV0Tm9kZSA9IF9jW19iXTsKKyAgICAgICAgICAgIHRoaXMu
X2dhdGhlckJsb2NrcyhvdXRwdXROb2RlLCBmcmFnbWVudEJsb2Nrcyk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gR2VuZXJhdGUgdmVydGV4IHNoYWRlcgorICAgICAgICB2YXIgY29kZVN0cmluZyA9
ICJ2YXIgbm9kZU1hdGVyaWFsID0gbmV3IEJBQllMT04uTm9kZU1hdGVyaWFsKGBub2RlIG1hdGVy
aWFsYCk7XHJcbiI7CisgICAgICAgIGZvciAodmFyIF9kID0gMCwgdmVydGV4QmxvY2tzXzEgPSB2
ZXJ0ZXhCbG9ja3M7IF9kIDwgdmVydGV4QmxvY2tzXzEubGVuZ3RoOyBfZCsrKSB7CisgICAgICAg
ICAgICB2YXIgbm9kZSA9IHZlcnRleEJsb2Nrc18xW19kXTsKKyAgICAgICAgICAgIGlmIChub2Rl
LmlzSW5wdXQgJiYgYWxyZWFkeUR1bXBlZC5pbmRleE9mKG5vZGUpID09PSAtMSkgeworICAgICAg
ICAgICAgICAgIGNvZGVTdHJpbmcgKz0gbm9kZS5fZHVtcENvZGUodW5pcXVlTmFtZXMsIGFscmVh
ZHlEdW1wZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEdlbmVyYXRl
IGZyYWdtZW50IHNoYWRlcgorICAgICAgICBmb3IgKHZhciBfZSA9IDAsIGZyYWdtZW50QmxvY2tz
XzEgPSBmcmFnbWVudEJsb2NrczsgX2UgPCBmcmFnbWVudEJsb2Nrc18xLmxlbmd0aDsgX2UrKykg
eworICAgICAgICAgICAgdmFyIG5vZGUgPSBmcmFnbWVudEJsb2Nrc18xW19lXTsKKyAgICAgICAg
ICAgIGlmIChub2RlLmlzSW5wdXQgJiYgYWxyZWFkeUR1bXBlZC5pbmRleE9mKG5vZGUpID09PSAt
MSkgeworICAgICAgICAgICAgICAgIGNvZGVTdHJpbmcgKz0gbm9kZS5fZHVtcENvZGUodW5pcXVl
TmFtZXMsIGFscmVhZHlEdW1wZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGZvciAodmFyIF9mID0gMCwgX2cgPSB0aGlzLl92ZXJ0ZXhPdXRwdXROb2RlczsgX2YgPCBfZy5s
ZW5ndGg7IF9mKyspIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gX2dbX2ZdOworICAgICAgICAg
ICAgY29kZVN0cmluZyArPSAibm9kZU1hdGVyaWFsLmFkZE91dHB1dE5vZGUoIiArIG5vZGUuX2Nv
ZGVWYXJpYWJsZU5hbWUgKyAiKTtcclxuIjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBf
aCA9IDAsIF9qID0gdGhpcy5fZnJhZ21lbnRPdXRwdXROb2RlczsgX2ggPCBfai5sZW5ndGg7IF9o
KyspIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gX2pbX2hdOworICAgICAgICAgICAgY29kZVN0
cmluZyArPSAibm9kZU1hdGVyaWFsLmFkZE91dHB1dE5vZGUoIiArIG5vZGUuX2NvZGVWYXJpYWJs
ZU5hbWUgKyAiKTtcclxuIjsKKyAgICAgICAgfQorICAgICAgICBjb2RlU3RyaW5nICs9ICJub2Rl
TWF0ZXJpYWwuYnVpbGQoKTtcclxuIjsKKyAgICAgICAgcmV0dXJuIGNvZGVTdHJpbmc7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoaXMgbWF0ZXJpYWwgaW4gYSBKU09OIHJl
cHJlc2VudGF0aW9uCisgICAgICogQHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgbWF0ZXJpYWwgb2Jq
ZWN0CisgICAgICovCisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siU2VyaWFsaXphdGlvbkhlbHBlciJd
LlNlcmlhbGl6ZSh0aGlzKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21UeXBl
ID0gIkJBQllMT04uTm9kZU1hdGVyaWFsIjsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5v
dXRwdXROb2RlcyA9IFtdOworICAgICAgICB2YXIgYmxvY2tzID0gW107CisgICAgICAgIC8vIE91
dHB1dHMKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3ZlcnRleE91dHB1dE5v
ZGVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIG91dHB1dE5vZGUg
PSBfYVtfaV07CisgICAgICAgICAgICB0aGlzLl9nYXRoZXJCbG9ja3Mob3V0cHV0Tm9kZSwgYmxv
Y2tzKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qub3V0cHV0Tm9kZXMucHVzaChv
dXRwdXROb2RlLnVuaXF1ZUlkKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfYiA9IDAs
IF9jID0gdGhpcy5fZnJhZ21lbnRPdXRwdXROb2RlczsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHsK
KyAgICAgICAgICAgIHZhciBvdXRwdXROb2RlID0gX2NbX2JdOworICAgICAgICAgICAgdGhpcy5f
Z2F0aGVyQmxvY2tzKG91dHB1dE5vZGUsIGJsb2Nrcyk7CisgICAgICAgICAgICBpZiAoc2VyaWFs
aXphdGlvbk9iamVjdC5vdXRwdXROb2Rlcy5pbmRleE9mKG91dHB1dE5vZGUudW5pcXVlSWQpID09
PSAtMSkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qub3V0cHV0Tm9kZXMu
cHVzaChvdXRwdXROb2RlLnVuaXF1ZUlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAvLyBCbG9ja3MKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5ibG9ja3MgPSBbXTsK
KyAgICAgICAgZm9yICh2YXIgX2QgPSAwLCBibG9ja3NfMSA9IGJsb2NrczsgX2QgPCBibG9ja3Nf
MS5sZW5ndGg7IF9kKyspIHsKKyAgICAgICAgICAgIHZhciBibG9jayA9IGJsb2Nrc18xW19kXTsK
KyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYmxvY2tzLnB1c2goYmxvY2suc2VyaWFs
aXplKCkpOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIF9lID0gMCwgX2YgPSB0aGlzLmF0
dGFjaGVkQmxvY2tzOyBfZSA8IF9mLmxlbmd0aDsgX2UrKykgeworICAgICAgICAgICAgdmFyIGJs
b2NrID0gX2ZbX2VdOworICAgICAgICAgICAgaWYgKGJsb2Nrcy5pbmRleE9mKGJsb2NrKSAhPT0g
LTEpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYmxvY2tzLnB1c2goYmxvY2suc2VyaWFsaXplKCkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07Cisg
ICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5fcmVzdG9yZUNvbm5lY3Rpb25zID0gZnVuY3Rpb24g
KGJsb2NrLCBzb3VyY2UsIG1hcCkgeworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gYmxv
Y2sub3V0cHV0czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBvdXRw
dXRQb2ludCA9IF9hW19pXTsKKyAgICAgICAgICAgIGZvciAodmFyIF9iID0gMCwgX2MgPSBzb3Vy
Y2UuYmxvY2tzOyBfYiA8IF9jLmxlbmd0aDsgX2IrKykgeworICAgICAgICAgICAgICAgIHZhciBj
YW5kaWRhdGUgPSBfY1tfYl07CisgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IG1hcFtjYW5k
aWRhdGUuaWRdOworICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gMCwgX2UgPSBjYW5kaWRh
dGUuaW5wdXRzOyBfZCA8IF9lLmxlbmd0aDsgX2QrKykgeworICAgICAgICAgICAgICAgICAgICB2
YXIgaW5wdXQgPSBfZVtfZF07CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXBbaW5wdXQudGFy
Z2V0QmxvY2tJZF0gPT09IGJsb2NrICYmIGlucHV0LnRhcmdldENvbm5lY3Rpb25OYW1lID09PSBv
dXRwdXRQb2ludC5uYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRQb2lu
dCA9IHRhcmdldC5nZXRJbnB1dEJ5TmFtZShpbnB1dC5pbnB1dE5hbWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpbnB1dFBvaW50IHx8IGlucHV0UG9pbnQuaXNDb25uZWN0ZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFBvaW50LmNvbm5lY3RUbyhp
bnB1dFBvaW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc3RvcmVD
b25uZWN0aW9ucyh0YXJnZXQsIHNvdXJjZSwgbWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbGVhciB0aGUg
Y3VycmVudCBncmFwaCBhbmQgbG9hZCBhIG5ldyBvbmUgZnJvbSBhIHNlcmlhbGl6YXRpb24gb2Jq
ZWN0CisgICAgICogQHBhcmFtIHNvdXJjZSBkZWZpbmVzIHRoZSBKU09OIHJlcHJlc2VudGF0aW9u
IG9mIHRoZSBtYXRlcmlhbAorICAgICAqIEBwYXJhbSByb290VXJsIGRlZmluZXMgdGhlIHJvb3Qg
VVJMIHRvIHVzZSB0byBsb2FkIHRleHR1cmVzIGFuZCByZWxhdGl2ZSBkZXBlbmRlbmNpZXMKKyAg
ICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLmxvYWRGcm9tU2VyaWFsaXphdGlvbiA9
IGZ1bmN0aW9uIChzb3VyY2UsIHJvb3RVcmwpIHsKKyAgICAgICAgaWYgKHJvb3RVcmwgPT09IHZv
aWQgMCkgeyByb290VXJsID0gIiI7IH0KKyAgICAgICAgdGhpcy5jbGVhcigpOworICAgICAgICB2
YXIgbWFwID0ge307CisgICAgICAgIC8vIENyZWF0ZSBibG9ja3MKKyAgICAgICAgZm9yICh2YXIg
X2kgPSAwLCBfYSA9IHNvdXJjZS5ibG9ja3M7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAg
ICAgICAgICB2YXIgcGFyc2VkQmxvY2sgPSBfYVtfaV07CisgICAgICAgICAgICB2YXIgYmxvY2tU
eXBlID0gX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJfVHlw
ZVN0b3JlIl0uR2V0Q2xhc3MocGFyc2VkQmxvY2suY3VzdG9tVHlwZSk7CisgICAgICAgICAgICBp
ZiAoYmxvY2tUeXBlKSB7CisgICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gbmV3IGJsb2NrVHlw
ZSgpOworICAgICAgICAgICAgICAgIGJsb2NrLl9kZXNlcmlhbGl6ZShwYXJzZWRCbG9jaywgdGhp
cy5nZXRTY2VuZSgpLCByb290VXJsKTsKKyAgICAgICAgICAgICAgICBtYXBbcGFyc2VkQmxvY2su
aWRdID0gYmxvY2s7CisgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hlZEJsb2Nrcy5wdXNoKGJs
b2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBDb25uZWN0aW9ucwor
ICAgICAgICAvLyBTdGFydHMgd2l0aCBpbnB1dCBibG9ja3Mgb25seQorICAgICAgICBmb3IgKHZh
ciBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHNvdXJjZS5ibG9ja3MubGVuZ3RoOyBibG9j
a0luZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBwYXJzZWRCbG9ja18xID0gc291cmNlLmJsb2Nr
c1tibG9ja0luZGV4XTsKKyAgICAgICAgICAgIHZhciBibG9jayA9IG1hcFtwYXJzZWRCbG9ja18x
LmlkXTsKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNJbnB1dCkgeworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fcmVzdG9yZUNvbm5l
Y3Rpb25zKGJsb2NrLCBzb3VyY2UsIG1hcCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gT3V0cHV0
cworICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gc291cmNlLm91dHB1dE5vZGVzOyBfYiA8
IF9jLmxlbmd0aDsgX2IrKykgeworICAgICAgICAgICAgdmFyIG91dHB1dE5vZGVJZCA9IF9jW19i
XTsKKyAgICAgICAgICAgIHRoaXMuYWRkT3V0cHV0Tm9kZShtYXBbb3V0cHV0Tm9kZUlkXSk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gU3RvcmUgbWFwIGZvciBleHRlcm5hbCB1c2VzCisgICAgICAg
IHNvdXJjZS5tYXAgPSB7fTsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIG1hcCkgeworICAgICAg
ICAgICAgc291cmNlLm1hcFtrZXldID0gbWFwW2tleV0udW5pcXVlSWQ7CisgICAgICAgIH0KKyAg
ICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBub2RlIG1hdGVyaWFsIGZyb20gcGFyc2Vk
IG1hdGVyaWFsIGRhdGEKKyAgICAgKiBAcGFyYW0gc291cmNlIGRlZmluZXMgdGhlIEpTT04gcmVw
cmVzZW50YXRpb24gb2YgdGhlIG1hdGVyaWFsCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMg
dGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSByb290
IFVSTCB0byB1c2UgdG8gbG9hZCB0ZXh0dXJlcyBhbmQgcmVsYXRpdmUgZGVwZW5kZW5jaWVzCisg
ICAgICogQHJldHVybnMgYSBuZXcgbm9kZSBtYXRlcmlhbAorICAgICAqLworICAgIE5vZGVNYXRl
cmlhbC5QYXJzZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAg
IGlmIChyb290VXJsID09PSB2b2lkIDApIHsgcm9vdFVybCA9ICIiOyB9CisgICAgICAgIHZhciBu
b2RlTWF0ZXJpYWwgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
OF9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3
IE5vZGVNYXRlcmlhbChzb3VyY2UubmFtZSwgc2NlbmUpOyB9LCBzb3VyY2UsIHNjZW5lLCByb290
VXJsKTsKKyAgICAgICAgbm9kZU1hdGVyaWFsLmxvYWRGcm9tU2VyaWFsaXphdGlvbihzb3VyY2Us
IHJvb3RVcmwpOworICAgICAgICByZXR1cm4gbm9kZU1hdGVyaWFsOworICAgIH07CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIG5ldyBub2RlIG1hdGVyaWFsIHNldCB0byBkZWZhdWx0IGJhc2lj
IGNvbmZpZ3VyYXRpb24KKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRo
ZSBtYXRlcmlhbAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5l
CisgICAgICogQHJldHVybnMgYSBuZXcgTm9kZU1hdGVyaWFsCisgICAgICovCisgICAgTm9kZU1h
dGVyaWFsLkNyZWF0ZURlZmF1bHQgPSBmdW5jdGlvbiAobmFtZSwgc2NlbmUpIHsKKyAgICAgICAg
dmFyIG5ld01hdGVyaWFsID0gbmV3IE5vZGVNYXRlcmlhbChuYW1lLCBzY2VuZSk7CisgICAgICAg
IG5ld01hdGVyaWFsLnNldFRvRGVmYXVsdCgpOworICAgICAgICBuZXdNYXRlcmlhbC5idWlsZCgp
OworICAgICAgICByZXR1cm4gbmV3TWF0ZXJpYWw7CisgICAgfTsKKyAgICBOb2RlTWF0ZXJpYWwu
X0J1aWxkSWRHZW5lcmF0b3IgPSAwOworICAgIC8qKiBEZWZpbmUgdGhlIFVSbCB0byBsb2FkIG5v
ZGUgZWRpdG9yIHNjcmlwdCAqLworICAgIE5vZGVNYXRlcmlhbC5FZGl0b3JVUkwgPSAiaHR0cHM6
Ly91bnBrZy5jb20vYmFieWxvbmpzLW5vZGUtZWRpdG9yQCIgKyBfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uVmVyc2lvbiArICIvYmFieWxvbi5u
b2RlRWRpdG9yLmpzIjsKKyAgICByZXR1cm4gTm9kZU1hdGVyaWFsOworfShfcHVzaE1hdGVyaWFs
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlB1c2hNYXRlcmlhbCJdKSk7CisKK19NaXNj
X3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siX1R5cGVTdG9yZSJdLlJl
Z2lzdGVyZWRUeXBlc1siQkFCWUxPTi5Ob2RlTWF0ZXJpYWwiXSA9IE5vZGVNYXRlcmlhbDsKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2su
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogTm9kZU1hdGVyaWFsQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIE5vZGVN
YXRlcmlhbEJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnQgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnQudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY191bmlxdWVJZEdlbmVy
YXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vTWlzYy91bmlxdWVJZEdlbmVyYXRvciAqLyAiLi9NaXNjL3VuaXF1ZUlkR2VuZXJh
dG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9N
aXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisKKy8qKgor
ICogRGVmaW5lcyBhIGJsb2NrIHRoYXQgY2FuIGJlIHVzZWQgaW5zaWRlIGEgbm9kZSBiYXNlZCBt
YXRlcmlhbAorICovCit2YXIgTm9kZU1hdGVyaWFsQmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBOb2RlTWF0ZXJpYWxCbG9j
aworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKiBAcGFy
YW0gdGFyZ2V0IGRlZmluZXMgdGhlIHRhcmdldCBvZiB0aGF0IGJsb2NrIChWZXJ0ZXggYnkgZGVm
YXVsdCkKKyAgICAgKiBAcGFyYW0gaXNGaW5hbE1lcmdlciBkZWZpbmVzIGEgYm9vbGVhbiBpbmRp
Y2F0aW5nIHRoYXQgdGhpcyBibG9jayBpcyBhbiBlbmQgYmxvY2sgKGUuZy4gaXQgaXMgZ2VuZXJh
dGluZyBhIHN5c3RlbSB2YWx1ZSkuIERlZmF1bHQgaXMgZmFsc2UKKyAgICAgKiBAcGFyYW0gaXNJ
bnB1dCBkZWZpbmVzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBibG9jayBpcyBhbiBp
bnB1dCAoZS5nLiBpdCBzZW5kcyBkYXRhIHRvIHRoZSBzaGFkZXIpLiBEZWZhdWx0IGlzIGZhbHNl
CisgICAgICovCisgICAgZnVuY3Rpb24gTm9kZU1hdGVyaWFsQmxvY2sobmFtZSwgdGFyZ2V0LCBp
c0ZpbmFsTWVyZ2VyLCBpc0lucHV0KSB7CisgICAgICAgIGlmICh0YXJnZXQgPT09IHZvaWQgMCkg
eyB0YXJnZXQgPSBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleDsgfQorICAgICAgICBp
ZiAoaXNGaW5hbE1lcmdlciA9PT0gdm9pZCAwKSB7IGlzRmluYWxNZXJnZXIgPSBmYWxzZTsgfQor
ICAgICAgICBpZiAoaXNJbnB1dCA9PT0gdm9pZCAwKSB7IGlzSW5wdXQgPSBmYWxzZTsgfQorICAg
ICAgICB0aGlzLl9pc0ZpbmFsTWVyZ2VyID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lzSW5wdXQg
PSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fY29kZVZhcmlh
YmxlTmFtZSA9ICIiOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9pbnB1
dHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5f
b3V0cHV0cyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAg
ICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7CisgICAgICAgIHRoaXMuX2lzRmluYWxNZXJnZXIgPSBp
c0ZpbmFsTWVyZ2VyOworICAgICAgICB0aGlzLl9pc0lucHV0ID0gaXNJbnB1dDsKKyAgICAgICAg
dGhpcy51bmlxdWVJZCA9IF9NaXNjX3VuaXF1ZUlkR2VuZXJhdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlVuaXF1ZUlkR2VuZXJhdG9yIl0uVW5pcXVlSWQ7CisgICAgfQorICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUsICJpc0ZpbmFs
TWVyZ2VyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNh
dGluZyB0aGF0IHRoaXMgYmxvY2sgaXMgYW4gZW5kIGJsb2NrIChlLmcuIGl0IGlzIGdlbmVyYXRp
bmcgYSBzeXN0ZW0gdmFsdWUpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0ZpbmFsTWVyZ2VyOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZU1hdGVyaWFsQmxvY2sucHJvdG90
eXBlLCAiaXNJbnB1dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFu
IGluZGljYXRpbmcgdGhhdCB0aGlzIGJsb2NrIGlzIGFuIGlucHV0IChlLmcuIGl0IHNlbmRzIGRh
dGEgdG8gdGhlIHNoYWRlcikKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW5wdXQ7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUsICJi
dWlsZElkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBidWls
ZCBJZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fYnVpbGRJZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkSWQgPSB2YWx1ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGVNYXRlcmlhbEJsb2NrLnBy
b3RvdHlwZSwgInRhcmdldCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0
cyB0aGUgdGFyZ2V0IG9mIHRoZSBibG9jaworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0OworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKCh0aGlzLl90
YXJnZXQgJiB2YWx1ZSkgIT09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl90YXJnZXQgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlw
ZSwgImlucHV0cyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2Yg
aW5wdXQgcG9pbnRzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUsICJvdXRwdXRz
IiwgeworICAgICAgICAvKiogR2V0cyB0aGUgbGlzdCBvZiBvdXRwdXQgcG9pbnRzICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHM7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEZpbmQgYW4gaW5wdXQgYnkgaXRz
IG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCB0
byBsb29rIGZvcgorICAgICAqIEByZXR1cm5zIHRoZSBpbnB1dCBvciBudWxsIGlmIG5vdCBmb3Vu
ZAorICAgICAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlwZS5nZXRJbnB1dEJ5TmFt
ZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLl9pbnB1dHMu
ZmlsdGVyKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLm5hbWUgPT09IG5hbWU7IH0pOworICAgICAg
ICBpZiAoZmlsdGVyLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIGZpbHRlclswXTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEZp
bmQgYW4gb3V0cHV0IGJ5IGl0cyBuYW1lCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
bmFtZSBvZiB0aGUgb3V0cHV0dG8gbG9vayBmb3IKKyAgICAgKiBAcmV0dXJucyB0aGUgb3V0cHV0
IG9yIG51bGwgaWYgbm90IGZvdW5kCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2sucHJv
dG90eXBlLmdldE91dHB1dEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHZhciBm
aWx0ZXIgPSB0aGlzLl9vdXRwdXRzLmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5uYW1l
ID09PSBuYW1lOyB9KTsKKyAgICAgICAgaWYgKGZpbHRlci5sZW5ndGgpIHsKKyAgICAgICAgICAg
IHJldHVybiBmaWx0ZXJbMF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplIHRoZSBibG9jayBhbmQgcHJlcGFyZSB0aGUg
Y29udGV4dCBmb3IgYnVpbGQKKyAgICAgKiBAcGFyYW0gc3RhdGUgZGVmaW5lcyB0aGUgc3RhdGUg
dGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBidWlsZAorICAgICAqLworICAgIE5vZGVNYXRlcmlh
bEJsb2NrLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAg
IC8vIERvIG5vdGhpbmcKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmQgZGF0YSB0byBlZmZl
Y3QuIFdpbGwgb25seSBiZSBjYWxsZWQgZm9yIGJsb2NrcyB3aXRoIGlzQmluZGFibGUgPT09IHRy
dWUKKyAgICAgKiBAcGFyYW0gZWZmZWN0IGRlZmluZXMgdGhlIGVmZmVjdCB0byBiaW5kIGRhdGEg
dG8KKyAgICAgKiBAcGFyYW0gbm9kZU1hdGVyaWFsIGRlZmluZXMgdGhlIGhvc3RpbmcgTm9kZU1h
dGVyaWFsCisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0aGF0IHdpbGwgYmUg
cmVuZGVyZWQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuYmluZCA9
IGZ1bmN0aW9uIChlZmZlY3QsIG5vZGVNYXRlcmlhbCwgbWVzaCkgeworICAgICAgICAvLyBEbyBu
b3RoaW5nCisgICAgfTsKKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuX2RlY2xhcmVP
dXRwdXQgPSBmdW5jdGlvbiAob3V0cHV0LCBzdGF0ZSkgeworICAgICAgICByZXR1cm4gc3RhdGUu
X2dldEdMVHlwZShvdXRwdXQudHlwZSkgKyAiICIgKyBvdXRwdXQuYXNzb2NpYXRlZFZhcmlhYmxl
TmFtZTsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlwZS5fd3JpdGVWYXJp
YWJsZSA9IGZ1bmN0aW9uIChjdXJyZW50UG9pbnQpIHsKKyAgICAgICAgdmFyIGNvbm5lY3Rpb25Q
b2ludCA9IGN1cnJlbnRQb2ludC5jb25uZWN0ZWRQb2ludDsKKyAgICAgICAgaWYgKGNvbm5lY3Rp
b25Qb2ludCkgeworICAgICAgICAgICAgcmV0dXJuICIiICsgY3VycmVudFBvaW50LmFzc29jaWF0
ZWRWYXJpYWJsZU5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIwLiI7CisgICAgfTsK
KyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuX3dyaXRlRmxvYXQgPSBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgdmFyIHN0cmluZ1ZlcnNpb24gPSB2YWx1ZS50b1N0cmluZygpOwor
ICAgICAgICBpZiAoc3RyaW5nVmVyc2lvbi5pbmRleE9mKCIuIikgPT09IC0xKSB7CisgICAgICAg
ICAgICBzdHJpbmdWZXJzaW9uICs9ICIuMCI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIi
ICsgc3RyaW5nVmVyc2lvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJl
bnQgY2xhc3MgbmFtZSBlLmcuICJOb2RlTWF0ZXJpYWxCbG9jayIKKyAgICAgKiBAcmV0dXJucyB0
aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlwZS5n
ZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiTm9kZU1hdGVyaWFs
QmxvY2siOworICAgIH07CisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgYSBuZXcgaW5wdXQuIE11
c3QgYmUgY2FsbGVkIGluc2lkZSBhIGJsb2NrIGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFtIG5h
bWUgZGVmaW5lcyB0aGUgY29ubmVjdGlvbiBwb2ludCBuYW1lCisgICAgICogQHBhcmFtIHR5cGUg
ZGVmaW5lcyB0aGUgY29ubmVjdGlvbiBwb2ludCB0eXBlCisgICAgICogQHBhcmFtIGlzT3B0aW9u
YWwgZGVmaW5lcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoaXMgaW5wdXQgY2FuIGJlIG9t
aXR0ZWQKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgdGhlIHRhcmdldCB0byB1c2UgdG8g
bGltaXQgdGhlIGNvbm5lY3Rpb24gcG9pbnQgKHdpbGwgYmUgVmVydGV4QW5kRnJhZ21lbnQgYnkg
ZGVmYXVsdCkKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBibG9jaworICAgICAqLworICAg
IE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlwZS5yZWdpc3RlcklucHV0ID0gZnVuY3Rpb24gKG5h
bWUsIHR5cGUsIGlzT3B0aW9uYWwsIHRhcmdldCkgeworICAgICAgICBpZiAoaXNPcHRpb25hbCA9
PT0gdm9pZCAwKSB7IGlzT3B0aW9uYWwgPSBmYWxzZTsgfQorICAgICAgICB2YXIgcG9pbnQgPSBu
ZXcgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk5vZGVNYXRlcmlhbENvbm5lY3Rpb25Qb2ludCJdKG5hbWUsIHRoaXMpOworICAg
ICAgICBwb2ludC50eXBlID0gdHlwZTsKKyAgICAgICAgcG9pbnQuaXNPcHRpb25hbCA9IGlzT3B0
aW9uYWw7CisgICAgICAgIGlmICh0YXJnZXQpIHsKKyAgICAgICAgICAgIHBvaW50LnRhcmdldCA9
IHRhcmdldDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pbnB1dHMucHVzaChwb2ludCk7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgYSBu
ZXcgb3V0cHV0LiBNdXN0IGJlIGNhbGxlZCBpbnNpZGUgYSBibG9jayBjb25zdHJ1Y3RvcgorICAg
ICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGNvbm5lY3Rpb24gcG9pbnQgbmFtZQorICAgICAq
IEBwYXJhbSB0eXBlIGRlZmluZXMgdGhlIGNvbm5lY3Rpb24gcG9pbnQgdHlwZQorICAgICAqIEBw
YXJhbSB0YXJnZXQgZGVmaW5lcyB0aGUgdGFyZ2V0IHRvIHVzZSB0byBsaW1pdCB0aGUgY29ubmVj
dGlvbiBwb2ludCAod2lsbCBiZSBWZXJ0ZXhBbmRGcmFnbWVudCBieSBkZWZhdWx0KQorICAgICAq
IEByZXR1cm5zIHRoZSBjdXJyZW50IGJsb2NrCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsQmxv
Y2sucHJvdG90eXBlLnJlZ2lzdGVyT3V0cHV0ID0gZnVuY3Rpb24gKG5hbWUsIHR5cGUsIHRhcmdl
dCkgeworICAgICAgICB2YXIgcG9pbnQgPSBuZXcgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbENvbm5lY3Rp
b25Qb2ludCJdKG5hbWUsIHRoaXMpOworICAgICAgICBwb2ludC50eXBlID0gdHlwZTsKKyAgICAg
ICAgaWYgKHRhcmdldCkgeworICAgICAgICAgICAgcG9pbnQudGFyZ2V0ID0gdGFyZ2V0OworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX291dHB1dHMucHVzaChwb2ludCk7CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogV2lsbCByZXR1cm4gdGhlIGZpcnN0IGF2
YWlsYWJsZSBpbnB1dCBlLmcuIHRoZSBmaXJzdCBvbmUgd2hpY2ggaXMgbm90IGFuIHVuaWZvcm0g
b3IgYW4gYXR0cmlidXRlCisgICAgICogQHBhcmFtIGZvck91dHB1dCBkZWZpbmVzIGFuIG9wdGlv
bmFsIGNvbm5lY3Rpb24gcG9pbnQgdG8gY2hlY2sgY29tcGF0aWJpbGl0eSB3aXRoCisgICAgICog
QHJldHVybnMgdGhlIGZpcnN0IGF2YWlsYWJsZSBpbnB1dCBvciBudWxsCisgICAgICovCisgICAg
Tm9kZU1hdGVyaWFsQmxvY2sucHJvdG90eXBlLmdldEZpcnN0QXZhaWxhYmxlSW5wdXQgPSBmdW5j
dGlvbiAoZm9yT3V0cHV0KSB7CisgICAgICAgIGlmIChmb3JPdXRwdXQgPT09IHZvaWQgMCkgeyBm
b3JPdXRwdXQgPSBudWxsOyB9CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9p
bnB1dHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgaW5wdXQgPSBf
YVtfaV07CisgICAgICAgICAgICBpZiAoIWlucHV0LmNvbm5lY3RlZFBvaW50KSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFmb3JPdXRwdXQgfHwgKGZvck91dHB1dC50eXBlID09PSBpbnB1dC50eXBl
KSB8fCAoaW5wdXQudHlwZSA9PT0gX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRlY3QpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBpbnB1dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBXaWxsIHJldHVybiB0
aGUgZmlyc3QgYXZhaWxhYmxlIG91dHB1dCBlLmcuIHRoZSBmaXJzdCBvbmUgd2hpY2ggaXMgbm90
IHlldCBjb25uZWN0ZWQgYW5kIG5vdCBhIHZhcnlpbmcKKyAgICAgKiBAcGFyYW0gZm9yQmxvY2sg
ZGVmaW5lcyBhbiBvcHRpb25hbCBibG9jayB0byBjaGVjayBjb21wYXRpYmlsaXR5IHdpdGgKKyAg
ICAgKiBAcmV0dXJucyB0aGUgZmlyc3QgYXZhaWxhYmxlIGlucHV0IG9yIG51bGwKKyAgICAgKi8K
KyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuZ2V0Rmlyc3RBdmFpbGFibGVPdXRwdXQg
PSBmdW5jdGlvbiAoZm9yQmxvY2spIHsKKyAgICAgICAgaWYgKGZvckJsb2NrID09PSB2b2lkIDAp
IHsgZm9yQmxvY2sgPSBudWxsOyB9CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlz
Ll9vdXRwdXRzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIG91dHB1
dCA9IF9hW19pXTsKKyAgICAgICAgICAgIGlmICghZm9yQmxvY2sgfHwgIWZvckJsb2NrLnRhcmdl
dCB8fCBmb3JCbG9jay50YXJnZXQgPT09IF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uTmV1dHJh
bCB8fCAoZm9yQmxvY2sudGFyZ2V0ICYgb3V0cHV0LnRhcmdldCkgIT09IDApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3V0cHV0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc2libGluZyBv
ZiB0aGUgZ2l2ZW4gb3V0cHV0CisgICAgICogQHBhcmFtIGN1cnJlbnQgZGVmaW5lcyB0aGUgY3Vy
cmVudCBvdXRwdXQKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV4dCBvdXRwdXQgaW4gdGhlIGxpc3Qg
b3IgbnVsbAorICAgICAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlwZS5nZXRTaWJs
aW5nT3V0cHV0ID0gZnVuY3Rpb24gKGN1cnJlbnQpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhp
cy5fb3V0cHV0cy5pbmRleE9mKGN1cnJlbnQpOworICAgICAgICBpZiAoaW5kZXggPT09IC0xIHx8
IGluZGV4ID49IHRoaXMuX291dHB1dHMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1tpbmRleCArIDFdOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ29ubmVjdCBjdXJyZW50IGJsb2NrIHdpdGggYW5vdGhl
ciBibG9jaworICAgICAqIEBwYXJhbSBvdGhlciBkZWZpbmVzIHRoZSBibG9jayB0byBjb25uZWN0
IHdpdGgKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmUgdGhlIHZhcmlvdXMgb3B0aW9ucyB0
byBoZWxwIHBpY2sgdGhlIHJpZ2h0IGNvbm5lY3Rpb25zCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgYmxvY2sKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuY29u
bmVjdFRvID0gZnVuY3Rpb24gKG90aGVyLCBvcHRpb25zKSB7CisgICAgICAgIGlmICh0aGlzLl9v
dXRwdXRzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHZhciBvdXRwdXQgPSBvcHRpb25zICYmIG9wdGlvbnMub3V0cHV0ID8gdGhpcy5nZXRP
dXRwdXRCeU5hbWUob3B0aW9ucy5vdXRwdXQpIDogdGhpcy5nZXRGaXJzdEF2YWlsYWJsZU91dHB1
dChvdGhlcik7CisgICAgICAgIHZhciBub3RGb3VuZCA9IHRydWU7CisgICAgICAgIHdoaWxlIChu
b3RGb3VuZCkgeworICAgICAgICAgICAgdmFyIGlucHV0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmlu
cHV0ID8gb3RoZXIuZ2V0SW5wdXRCeU5hbWUob3B0aW9ucy5pbnB1dCkgOiBvdGhlci5nZXRGaXJz
dEF2YWlsYWJsZUlucHV0KG91dHB1dCk7CisgICAgICAgICAgICBpZiAob3V0cHV0ICYmIGlucHV0
ICYmIG91dHB1dC5jYW5Db25uZWN0VG8oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgb3V0cHV0
LmNvbm5lY3RUbyhpbnB1dCk7CisgICAgICAgICAgICAgICAgbm90Rm91bmQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFvdXRwdXQpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvdyAiVW5hYmxlIHRvIGZpbmQgYSBjb21wYXRpYmxlIG1hdGNoIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMu
Z2V0U2libGluZ091dHB1dChvdXRwdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgTm9kZU1hdGVyaWFsQmxvY2sucHJvdG90eXBl
Ll9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIC8vIEVtcHR5LiBNdXN0
IGJlIGRlZmluZWQgYnkgY2hpbGQgbm9kZXMKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCB1
bmlmb3Jtcywgc2FtcGxlcnMgYW5kIHVuaWZvcm0gYnVmZmVycyBhdCBjb21waWxhdGlvbiB0aW1l
CisgICAgICogQHBhcmFtIHN0YXRlIGRlZmluZXMgdGhlIHN0YXRlIHRvIHVwZGF0ZQorICAgICAq
IEBwYXJhbSBub2RlTWF0ZXJpYWwgZGVmaW5lcyB0aGUgbm9kZSBtYXRlcmlhbCByZXF1ZXN0aW5n
IHRoZSB1cGRhdGUKKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBtYXRlcmlhbCBk
ZWZpbmVzIHRvIHVwZGF0ZQorICAgICAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlw
ZS51cGRhdGVVbmlmb3Jtc0FuZFNhbXBsZXMgPSBmdW5jdGlvbiAoc3RhdGUsIG5vZGVNYXRlcmlh
bCwgZGVmaW5lcykgeworICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGQgcG90ZW50aWFsIGZhbGxiYWNrcyBpZiBzaGFkZXIgY29tcGlsYXRpb24gZmFpbHMK
KyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRvIGJlIHJlbmRlcmVkCisgICAg
ICogQHBhcmFtIGZhbGxiYWNrcyBkZWZpbmVzIHRoZSBjdXJyZW50IHByaW9yaXRpemVkIGxpc3Qg
b2YgZmFsbGJhY2tzCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2sucHJvdG90eXBlLnBy
b3ZpZGVGYWxsYmFja3MgPSBmdW5jdGlvbiAobWVzaCwgZmFsbGJhY2tzKSB7CisgICAgICAgIC8v
IERvIG5vdGhpbmcKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZSBkZWZpbmVzIGZvciBz
aGFkZXIgY29tcGlsYXRpb24KKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRv
IGJlIHJlbmRlcmVkCisgICAgICogQHBhcmFtIG5vZGVNYXRlcmlhbCBkZWZpbmVzIHRoZSBub2Rl
IG1hdGVyaWFsIHJlcXVlc3RpbmcgdGhlIHVwZGF0ZQorICAgICAqIEBwYXJhbSBkZWZpbmVzIGRl
ZmluZXMgdGhlIG1hdGVyaWFsIGRlZmluZXMgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIHVzZUlu
c3RhbmNlcyBzcGVjaWZpZXMgdGhhdCBpbnN0YW5jZXMgc2hvdWxkIGJlIHVzZWQKKyAgICAgKi8K
KyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUucHJlcGFyZURlZmluZXMgPSBmdW5jdGlv
biAobWVzaCwgbm9kZU1hdGVyaWFsLCBkZWZpbmVzLCB1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAg
aWYgKHVzZUluc3RhbmNlcyA9PT0gdm9pZCAwKSB7IHVzZUluc3RhbmNlcyA9IGZhbHNlOyB9Cisg
ICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICB9OworICAgIC8qKgorICAgICAqIEluaXRpYWxpemUg
ZGVmaW5lcyBmb3Igc2hhZGVyIGNvbXBpbGF0aW9uCisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5l
cyB0aGUgbWVzaCB0byBiZSByZW5kZXJlZAorICAgICAqIEBwYXJhbSBub2RlTWF0ZXJpYWwgZGVm
aW5lcyB0aGUgbm9kZSBtYXRlcmlhbCByZXF1ZXN0aW5nIHRoZSB1cGRhdGUKKyAgICAgKiBAcGFy
YW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBtYXRlcmlhbCBkZWZpbmVzIHRvIGJlIHByZXBhcmVkCisg
ICAgICogQHBhcmFtIHVzZUluc3RhbmNlcyBzcGVjaWZpZXMgdGhhdCBpbnN0YW5jZXMgc2hvdWxk
IGJlIHVzZWQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuaW5pdGlh
bGl6ZURlZmluZXMgPSBmdW5jdGlvbiAobWVzaCwgbm9kZU1hdGVyaWFsLCBkZWZpbmVzLCB1c2VJ
bnN0YW5jZXMpIHsKKyAgICAgICAgaWYgKHVzZUluc3RhbmNlcyA9PT0gdm9pZCAwKSB7IHVzZUlu
c3RhbmNlcyA9IGZhbHNlOyB9CisgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICB9OworICAgIC8q
KgorICAgICAqIExldHMgdGhlIGJsb2NrIHRyeSB0byBjb25uZWN0IHNvbWUgaW5wdXRzIGF1dG9t
YXRpY2FsbHkKKyAgICAgKiBAcGFyYW0gbWF0ZXJpYWwgZGVmaW5lcyB0aGUgaG9zdGluZyBOb2Rl
TWF0ZXJpYWwKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuYXV0b0Nv
bmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCkgeworICAgICAgICAvLyBEbyBub3RoaW5nCisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiBhIGJsb2NrIGlzIGRl
Y2xhcmVkIGFzIHJlcGVhdGFibGUgY29udGVudCBnZW5lcmF0b3IKKyAgICAgKiBAcGFyYW0gdmVy
dGV4U2hhZGVyU3RhdGUgZGVmaW5lcyB0aGUgY3VycmVudCBjb21waWxhdGlvbiBzdGF0ZSBmb3Ig
dGhlIHZlcnRleCBzaGFkZXIKKyAgICAgKiBAcGFyYW0gZnJhZ21lbnRTaGFkZXJTdGF0ZSBkZWZp
bmVzIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHN0YXRlIGZvciB0aGUgZnJhZ21lbnQgc2hhZGVy
CisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0byBiZSByZW5kZXJlZAorICAg
ICAqIEBwYXJhbSBkZWZpbmVzIGRlZmluZXMgdGhlIG1hdGVyaWFsIGRlZmluZXMgdG8gdXBkYXRl
CisgICAgICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2sucHJvdG90eXBlLnJlcGxhY2VSZXBlYXRh
YmxlQ29udGVudCA9IGZ1bmN0aW9uICh2ZXJ0ZXhTaGFkZXJTdGF0ZSwgZnJhZ21lbnRTaGFkZXJT
dGF0ZSwgbWVzaCwgZGVmaW5lcykgeworICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIGJsb2NrIGlzIHJlYWR5CisgICAgICogQHBhcmFt
IG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0byBiZSByZW5kZXJlZAorICAgICAqIEBwYXJhbSBub2Rl
TWF0ZXJpYWwgZGVmaW5lcyB0aGUgbm9kZSBtYXRlcmlhbCByZXF1ZXN0aW5nIHRoZSB1cGRhdGUK
KyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBtYXRlcmlhbCBkZWZpbmVzIHRvIHVw
ZGF0ZQorICAgICAqIEBwYXJhbSB1c2VJbnN0YW5jZXMgc3BlY2lmaWVzIHRoYXQgaW5zdGFuY2Vz
IHNob3VsZCBiZSB1c2VkCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgYmxvY2sgaXMgcmVh
ZHkKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1
bmN0aW9uIChtZXNoLCBub2RlTWF0ZXJpYWwsIGRlZmluZXMsIHVzZUluc3RhbmNlcykgeworICAg
ICAgICBpZiAodXNlSW5zdGFuY2VzID09PSB2b2lkIDApIHsgdXNlSW5zdGFuY2VzID0gZmFsc2U7
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5w
cm90b3R5cGUuX2xpbmtDb25uZWN0aW9uVHlwZXMgPSBmdW5jdGlvbiAoaW5wdXRJbmRleDAsIGlu
cHV0SW5kZXgxKSB7CisgICAgICAgIHRoaXMuX2lucHV0c1tpbnB1dEluZGV4MF0uX2xpbmtlZENv
bm5lY3Rpb25Tb3VyY2UgPSB0aGlzLl9pbnB1dHNbaW5wdXRJbmRleDFdOworICAgICAgICB0aGlz
Ll9pbnB1dHNbaW5wdXRJbmRleDFdLl9saW5rZWRDb25uZWN0aW9uU291cmNlID0gdGhpcy5faW5w
dXRzW2lucHV0SW5kZXgwXTsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlw
ZS5fcHJvY2Vzc0J1aWxkID0gZnVuY3Rpb24gKGJsb2NrLCBzdGF0ZSwgaW5wdXQsIGFjdGl2ZUJs
b2NrcykgeworICAgICAgICBibG9jay5idWlsZChzdGF0ZSwgYWN0aXZlQmxvY2tzKTsKKyAgICAg
ICAgdmFyIGxvY2FsQmxvY2tJc0ZyYWdtZW50ID0gKHN0YXRlLl92ZXJ0ZXhTdGF0ZSAhPSBudWxs
KTsKKyAgICAgICAgdmFyIG90aGVyQmxvY2tXYXNHZW5lcmF0ZWRJblZlcnRleFNoYWRlciA9IGJs
b2NrLl9idWlsZFRhcmdldCA9PT0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXggJiYg
YmxvY2sudGFyZ2V0ICE9PSBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleEFuZEZyYWdt
ZW50OworICAgICAgICBpZiAobG9jYWxCbG9ja0lzRnJhZ21lbnQgJiYgKCgoYmxvY2sudGFyZ2V0
ICYgaW5wdXQudGFyZ2V0KSA9PT0gMCkgfHwKKyAgICAgICAgICAgICh0aGlzLnRhcmdldCAhPT0g
X25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJO
b2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXhBbmRGcmFnbWVudCAmJiBvdGhlckJsb2Nr
V2FzR2VuZXJhdGVkSW5WZXJ0ZXhTaGFkZXIpKSkgeyAvLyBjb250ZXh0IHN3aXRjaCEgV2UgbmVl
ZCBhIHZhcnlpbmcKKyAgICAgICAgICAgIGlmICgoIWJsb2NrLmlzSW5wdXQgJiYgc3RhdGUudGFy
Z2V0ICE9PSBibG9jay5fYnVpbGRUYXJnZXQpIC8vIGJsb2NrIHdhcyBhbHJlYWR5IGVtaXR0ZWQg
YnkgdmVydGV4IHNoYWRlcgorICAgICAgICAgICAgICAgIHx8IChibG9jay5pc0lucHV0ICYmIGJs
b2NrLmlzQXR0cmlidXRlKSAvLyBibG9jayBpcyBhbiBhdHRyaWJ1dGUKKyAgICAgICAgICAgICkg
eworICAgICAgICAgICAgICAgIHZhciBjb25uZWN0ZWRQb2ludCA9IGlucHV0LmNvbm5lY3RlZFBv
aW50OworICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5fdmVydGV4U3RhdGUuX2VtaXRWYXJ5aW5n
RnJvbVN0cmluZygidl8iICsgY29ubmVjdGVkUG9pbnQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSwg
c3RhdGUuX2dldEdMVHlwZShjb25uZWN0ZWRQb2ludC50eXBlKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuX3ZlcnRleFN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICJ2XyIgKyBjb25u
ZWN0ZWRQb2ludC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiA9ICIgKyBjb25uZWN0ZWRQb2lu
dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIjtcclxuIjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSA9ICJ2XyIgKyBjb25u
ZWN0ZWRQb2ludC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lOworICAgICAgICAgICAgICAgIGlucHV0
Ll9lbmZvcmNlQXNzb2NpYXRlZFZhcmlhYmxlTmFtZSA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXBpbGUgdGhlIGN1cnJlbnQgbm9k
ZSBhbmQgZ2VuZXJhdGUgdGhlIHNoYWRlciBjb2RlCisgICAgICogQHBhcmFtIHN0YXRlIGRlZmlu
ZXMgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gc3RhdGUgKHVuaWZvcm1zLCBzYW1wbGVycywgY3Vy
cmVudCBzdHJpbmcpCisgICAgICogQHBhcmFtIGFjdGl2ZUJsb2NrcyBkZWZpbmVzIHRoZSBsaXN0
IG9mIGFjdGl2ZSBibG9ja3MgKGkuZS4gYmxvY2tzIHRvIGNvbXBpbGUpCisgICAgICogQHJldHVy
bnMgdHJ1ZSBpZiBhbHJlYWR5IGJ1aWx0CisgICAgICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2su
cHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24gKHN0YXRlLCBhY3RpdmVCbG9ja3MpIHsKKyAgICAg
ICAgaWYgKHRoaXMuX2J1aWxkSWQgPT09IHN0YXRlLnNoYXJlZERhdGEuYnVpbGRJZCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgaWYgInBh
cmVudCIgYmxvY2tzIGFyZSBjb21waWxlZAorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0g
dGhpcy5faW5wdXRzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGlu
cHV0ID0gX2FbX2ldOworICAgICAgICAgICAgaWYgKCFpbnB1dC5jb25uZWN0ZWRQb2ludCkgewor
ICAgICAgICAgICAgICAgIGlmICghaW5wdXQuaXNPcHRpb25hbCkgeyAvLyBFbWl0IGEgd2Fybmlu
ZworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmNoZWNrcy5ub3RDb25uZWN0
ZWROb25PcHRpb25hbElucHV0cy5wdXNoKGlucHV0KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhp
cy50YXJnZXQgIT09IF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uTmV1dHJhbCkgeworICAgICAg
ICAgICAgICAgIGlmICgoaW5wdXQudGFyZ2V0ICYgdGhpcy50YXJnZXQpID09PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoKGlucHV0LnRhcmdldCAmIHN0YXRlLnRhcmdldCkgPT09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFyIGJsb2NrID0gaW5wdXQuY29ubmVjdGVkUG9pbnQub3duZXJCbG9jazsK
KyAgICAgICAgICAgIGlmIChibG9jayAmJiBibG9jayAhPT0gdGhpcykgeworICAgICAgICAgICAg
ICAgIHRoaXMuX3Byb2Nlc3NCdWlsZChibG9jaywgc3RhdGUsIGlucHV0LCBhY3RpdmVCbG9ja3Mp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9idWlsZElkID09
PSBzdGF0ZS5zaGFyZWREYXRhLmJ1aWxkSWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAv
LyBOZWVkIHRvIGNoZWNrIGFnYWluIGFzIGlucHV0cyBjYW4gYmUgY29ubmVjdGVkIG11bHRpcGxl
IHRpbWUgdG8gdGhpcyBlbmRwb2ludAorICAgICAgICB9CisgICAgICAgIC8vIExvZ3MKKyAgICAg
ICAgaWYgKHN0YXRlLnNoYXJlZERhdGEudmVyYm9zZSkgeworICAgICAgICAgICAgY29uc29sZS5s
b2coKHN0YXRlLnRhcmdldCA9PT0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXggPyAi
VmVydGV4IHNoYWRlciIgOiAiRnJhZ21lbnQgc2hhZGVyIikgKyAiOiBCdWlsZGluZyAiICsgdGhp
cy5uYW1lICsgIiBbIiArIHRoaXMuZ2V0Q2xhc3NOYW1lKCkgKyAiXSIpOworICAgICAgICB9Cisg
ICAgICAgIGlmICghdGhpcy5pc0lucHV0KSB7CisgICAgICAgICAgICAvKiogUHJlcGFyZSBvdXRw
dXRzICovCisgICAgICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gdGhpcy5fb3V0cHV0czsg
X2IgPCBfYy5sZW5ndGg7IF9iKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgb3V0cHV0ID0gX2Nb
X2JdOworICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldCAhPT0gX25vZGVNYXRlcmlhbEJs
b2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHMiXS5OZXV0cmFsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgob3V0cHV0LnRh
cmdldCAmIHRoaXMudGFyZ2V0KSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKChv
dXRwdXQudGFyZ2V0ICYgc3RhdGUudGFyZ2V0KSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCFvdXRwdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSkgewor
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSA9IHN0YXRl
Ll9nZXRGcmVlVmFyaWFibGVOYW1lKG91dHB1dC5uYW1lKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2tzIGZpbmFsIG91dHB1dHMK
KyAgICAgICAgaWYgKHRoaXMuaXNGaW5hbE1lcmdlcikgeworICAgICAgICAgICAgc3dpdGNoIChz
dGF0ZS50YXJnZXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzIl0uVmVydGV4OgorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmNoZWNr
cy5lbWl0VmVydGV4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50OgorICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmNoZWNrcy5lbWl0RnJhZ21lbnQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBpZiAoIXRoaXMuaXNJbnB1dCAmJiBzdGF0ZS5zaGFyZWREYXRhLmVtaXRDb21tZW50
cykgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIlxyXG4vLyIgKyB0
aGlzLm5hbWUgKyAiXHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYnVpbGRCbG9jayhz
dGF0ZSk7CisgICAgICAgIHRoaXMuX2J1aWxkSWQgPSBzdGF0ZS5zaGFyZWREYXRhLmJ1aWxkSWQ7
CisgICAgICAgIHRoaXMuX2J1aWxkVGFyZ2V0ID0gc3RhdGUudGFyZ2V0OworICAgICAgICAvLyBD
b21waWxlIGNvbm5lY3RlZCBibG9ja3MKKyAgICAgICAgZm9yICh2YXIgX2QgPSAwLCBfZSA9IHRo
aXMuX291dHB1dHM7IF9kIDwgX2UubGVuZ3RoOyBfZCsrKSB7CisgICAgICAgICAgICB2YXIgb3V0
cHV0ID0gX2VbX2RdOworICAgICAgICAgICAgaWYgKChvdXRwdXQudGFyZ2V0ICYgc3RhdGUudGFy
Z2V0KSA9PT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZm9yICh2YXIgX2YgPSAwLCBfZyA9IG91dHB1dC5lbmRwb2ludHM7IF9mIDwg
X2cubGVuZ3RoOyBfZisrKSB7CisgICAgICAgICAgICAgICAgdmFyIGVuZHBvaW50ID0gX2dbX2Zd
OworICAgICAgICAgICAgICAgIHZhciBibG9jayA9IGVuZHBvaW50Lm93bmVyQmxvY2s7CisgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrICYmIChibG9jay50YXJnZXQgJiBzdGF0ZS50YXJnZXQpICE9
PSAwICYmIGFjdGl2ZUJsb2Nrcy5pbmRleE9mKGJsb2NrKSAhPT0gLTEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fcHJvY2Vzc0J1aWxkKGJsb2NrLCBzdGF0ZSwgZW5kcG9pbnQsIGFjdGl2
ZUJsb2Nrcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3Rv
dHlwZS5faW5wdXRSZW5hbWUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICByZXR1cm4gbmFt
ZTsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlwZS5fb3V0cHV0UmVuYW1l
ID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfTsKKyAgICBO
b2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuX2R1bXBQcm9wZXJ0aWVzQ29kZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuX2R1bXBDb2RlID0gZnVuY3Rpb24gKHVuaXF1
ZU5hbWVzLCBhbHJlYWR5RHVtcGVkKSB7CisgICAgICAgIGFscmVhZHlEdW1wZWQucHVzaCh0aGlz
KTsKKyAgICAgICAgdmFyIGNvZGVTdHJpbmc7CisgICAgICAgIC8vIEdldCB1bmlxdWUgbmFtZQor
ICAgICAgICB2YXIgbmFtZUFzVmFyaWFibGVOYW1lID0gdGhpcy5uYW1lLnJlcGxhY2UoL1teQS1a
YS16X10rL2csICIiKTsKKyAgICAgICAgdGhpcy5fY29kZVZhcmlhYmxlTmFtZSA9IG5hbWVBc1Zh
cmlhYmxlTmFtZTsKKyAgICAgICAgaWYgKHVuaXF1ZU5hbWVzLmluZGV4T2YodGhpcy5fY29kZVZh
cmlhYmxlTmFtZSkgIT09IC0xKSB7CisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAg
ICAgICAgZG8geworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICAgICAgdGhp
cy5fY29kZVZhcmlhYmxlTmFtZSA9IG5hbWVBc1ZhcmlhYmxlTmFtZSArIGluZGV4OworICAgICAg
ICAgICAgfSB3aGlsZSAodW5pcXVlTmFtZXMuaW5kZXhPZih0aGlzLl9jb2RlVmFyaWFibGVOYW1l
KSAhPT0gLTEpOworICAgICAgICB9CisgICAgICAgIHVuaXF1ZU5hbWVzLnB1c2godGhpcy5fY29k
ZVZhcmlhYmxlTmFtZSk7CisgICAgICAgIC8vIERlY2xhcmF0aW9uCisgICAgICAgIGNvZGVTdHJp
bmcgPSAiXHJcbnZhciAiICsgdGhpcy5fY29kZVZhcmlhYmxlTmFtZSArICIgPSBuZXcgQkFCWUxP
Ti4iICsgdGhpcy5nZXRDbGFzc05hbWUoKSArICIoXCIiICsgdGhpcy5uYW1lICsgIlwiKTtcclxu
IjsKKyAgICAgICAgLy8gUHJvcGVydGllcworICAgICAgICBjb2RlU3RyaW5nICs9IHRoaXMuX2R1
bXBQcm9wZXJ0aWVzQ29kZSgpOworICAgICAgICAvLyBJbnB1dHMKKyAgICAgICAgZm9yICh2YXIg
X2kgPSAwLCBfYSA9IHRoaXMuaW5wdXRzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAg
ICAgICAgdmFyIGlucHV0ID0gX2FbX2ldOworICAgICAgICAgICAgaWYgKCFpbnB1dC5pc0Nvbm5l
Y3RlZCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFyIGNvbm5lY3RlZE91dHB1dCA9IGlucHV0LmNvbm5lY3RlZFBvaW50OworICAgICAg
ICAgICAgdmFyIGNvbm5lY3RlZEJsb2NrID0gY29ubmVjdGVkT3V0cHV0Lm93bmVyQmxvY2s7Cisg
ICAgICAgICAgICBpZiAoYWxyZWFkeUR1bXBlZC5pbmRleE9mKGNvbm5lY3RlZEJsb2NrKSA9PT0g
LTEpIHsKKyAgICAgICAgICAgICAgICBjb2RlU3RyaW5nICs9IGNvbm5lY3RlZEJsb2NrLl9kdW1w
Q29kZSh1bmlxdWVOYW1lcywgYWxyZWFkeUR1bXBlZCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjb2RlU3RyaW5nICs9IGNvbm5lY3RlZEJsb2NrLl9jb2RlVmFyaWFibGVOYW1lICsgIi4i
ICsgY29ubmVjdGVkQmxvY2suX291dHB1dFJlbmFtZShjb25uZWN0ZWRPdXRwdXQubmFtZSkgKyAi
LmNvbm5lY3RUbygiICsgdGhpcy5fY29kZVZhcmlhYmxlTmFtZSArICIuIiArIHRoaXMuX2lucHV0
UmVuYW1lKGlucHV0Lm5hbWUpICsgIik7XHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgLy8gT3V0
cHV0cworICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gdGhpcy5vdXRwdXRzOyBfYiA8IF9j
Lmxlbmd0aDsgX2IrKykgeworICAgICAgICAgICAgdmFyIG91dHB1dCA9IF9jW19iXTsKKyAgICAg
ICAgICAgIGlmICghb3V0cHV0Lmhhc0VuZHBvaW50cykgeworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgX2QgPSAwLCBfZSA9IG91
dHB1dC5lbmRwb2ludHM7IF9kIDwgX2UubGVuZ3RoOyBfZCsrKSB7CisgICAgICAgICAgICAgICAg
dmFyIGVuZHBvaW50ID0gX2VbX2RdOworICAgICAgICAgICAgICAgIHZhciBjb25uZWN0ZWRCbG9j
ayA9IGVuZHBvaW50Lm93bmVyQmxvY2s7CisgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RlZEJs
b2NrICYmIGFscmVhZHlEdW1wZWQuaW5kZXhPZihjb25uZWN0ZWRCbG9jaykgPT09IC0xKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvZGVTdHJpbmcgKz0gY29ubmVjdGVkQmxvY2suX2R1bXBDb2Rl
KHVuaXF1ZU5hbWVzLCBhbHJlYWR5RHVtcGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvZGVTdHJpbmc7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDbG9uZSB0aGUgY3VycmVudCBibG9jayB0byBhIG5ldyBpZGVudGljYWwg
YmxvY2sKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAg
ICAqIEBwYXJhbSByb290VXJsIGRlZmluZXMgdGhlIHJvb3QgVVJMIHRvIHVzZSB0byBsb2FkIHRl
eHR1cmVzIGFuZCByZWxhdGl2ZSBkZXBlbmRlbmNpZXMKKyAgICAgKiBAcmV0dXJucyBhIGNvcHkg
b2YgdGhlIGN1cnJlbnQgYmxvY2sKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90
b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgaWYgKHJv
b3RVcmwgPT09IHZvaWQgMCkgeyByb290VXJsID0gIiI7IH0KKyAgICAgICAgdmFyIHNlcmlhbGl6
YXRpb25PYmplY3QgPSB0aGlzLnNlcmlhbGl6ZSgpOworICAgICAgICB2YXIgYmxvY2tUeXBlID0g
X01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIl9UeXBlU3RvcmUi
XS5HZXRDbGFzcyhzZXJpYWxpemF0aW9uT2JqZWN0LmN1c3RvbVR5cGUpOworICAgICAgICBpZiAo
YmxvY2tUeXBlKSB7CisgICAgICAgICAgICB2YXIgYmxvY2sgPSBuZXcgYmxvY2tUeXBlKCk7Cisg
ICAgICAgICAgICBibG9jay5fZGVzZXJpYWxpemUoc2VyaWFsaXphdGlvbk9iamVjdCwgc2NlbmUs
IHJvb3RVcmwpOworICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGlzIGJs
b2NrIGluIGEgSlNPTiByZXByZXNlbnRhdGlvbgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxp
emVkIGJsb2NrIG9iamVjdAorICAgICAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlw
ZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2Jq
ZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY3VzdG9tVHlwZSA9ICJCQUJZ
TE9OLiIgKyB0aGlzLmdldENsYXNzTmFtZSgpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
LmlkID0gdGhpcy51bmlxdWVJZDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5uYW1lID0g
dGhpcy5uYW1lOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmlucHV0cyA9IFtdOworICAg
ICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5pbnB1dHM7IF9pIDwgX2EubGVuZ3RoOyBf
aSsrKSB7CisgICAgICAgICAgICB2YXIgaW5wdXQgPSBfYVtfaV07CisgICAgICAgICAgICBzZXJp
YWxpemF0aW9uT2JqZWN0LmlucHV0cy5wdXNoKGlucHV0LnNlcmlhbGl6ZSgpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8qKiBA
aGlkZGVuICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2sucHJvdG90eXBlLl9kZXNlcmlhbGl6ZSA9
IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCkgeworICAgICAg
ICB0aGlzLm5hbWUgPSBzZXJpYWxpemF0aW9uT2JqZWN0Lm5hbWU7CisgICAgfTsKKyAgICByZXR1
cm4gTm9kZU1hdGVyaWFsQmxvY2s7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50LnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE5vZGVNYXRl
cmlhbENvbm5lY3Rpb25Qb2ludCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE5vZGVN
YXRlcmlhbENvbm5lY3Rpb25Qb2ludDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJp
YWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisKKworLyoqCisgKiBEZWZp
bmVzIGEgY29ubmVjdGlvbiBwb2ludCBmb3IgYSBibG9jaworICovCit2YXIgTm9kZU1hdGVyaWFs
Q29ubmVjdGlvblBvaW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBwb2ludAorICAgICAqIEBwYXJhbSBuYW1l
IGRlZmluZXMgdGhlIGNvbm5lY3Rpb24gcG9pbnQgbmFtZQorICAgICAqIEBwYXJhbSBvd25lckJs
b2NrIGRlZmluZXMgdGhlIGJsb2NrIGhvc3RpbmcgdGhpcyBjb25uZWN0aW9uIHBvaW50CisgICAg
ICovCisgICAgZnVuY3Rpb24gTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50KG5hbWUsIG93bmVy
QmxvY2spIHsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fY29ubmVjdGVk
UG9pbnQgPSBudWxsOworICAgICAgICB0aGlzLl9lbmRwb2ludHMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fdHlwZUNvbm5lY3Rpb25Tb3VyY2Ug
PSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9saW5rZWRDb25u
ZWN0aW9uU291cmNlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdHlwZSA9IF9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk5v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdDsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fZW5mb3JjZUFzc29jaWF0ZWRWYXJpYWJsZU5hbWUg
PSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgYWRkaXRp
b25hbCB0eXBlcyBzdXBwb3J0ZWQgYnl0IHRoaXMgY29ubmVjdGlvbiBwb2ludAorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5hY2NlcHRlZENvbm5lY3Rpb25Qb2ludFR5cGVzID0gbmV3IEFycmF5
KCk7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIHRhcmdldCBvZiB0aGF0IGNvbm5lY3Rp
b24gcG9pbnQgKi8KKyAgICAgICAgdGhpcy50YXJnZXQgPSBfbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
cyJdLlZlcnRleEFuZEZyYWdtZW50OworICAgICAgICB0aGlzLl9vd25lckJsb2NrID0gb3duZXJC
bG9jazsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KE5vZGVNYXRlcmlhbENvbm5lY3Rpb25Qb2ludC5wcm90b3R5cGUsICJhc3NvY2lh
dGVkVmFyaWFibGVOYW1lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRz
IHRoZSBhc3NvY2lhdGVkIHZhcmlhYmxlIG5hbWUgaW4gdGhlIHNoYWRlcgorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJC
bG9jay5pc0lucHV0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX293bmVyQmxvY2su
YXNzb2NpYXRlZFZhcmlhYmxlTmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgo
IXRoaXMuX2VuZm9yY2VBc3NvY2lhdGVkVmFyaWFibGVOYW1lIHx8ICF0aGlzLl9hc3NvY2lhdGVk
VmFyaWFibGVOYW1lKSAmJiB0aGlzLl9jb25uZWN0ZWRQb2ludCkgeworICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLl9jb25uZWN0ZWRQb2ludC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Fzc29jaWF0ZWRWYXJpYWJsZU5h
bWU7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICB0aGlzLl9hc3NvY2lhdGVkVmFyaWFibGVOYW1lID0gdmFsdWU7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9p
bnQucHJvdG90eXBlLCAidHlwZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Ig
c2V0cyB0aGUgY29ubmVjdGlvbiBwb2ludCB0eXBlIChkZWZhdWx0IGlzIGZsb2F0KQorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5f
dHlwZSA9PT0gX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLkF1dG9EZXRlY3QpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJCbG9jay5p
c0lucHV0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vd25lckJsb2NrLnR5
cGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb25uZWN0
ZWRQb2ludCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGVkUG9p
bnQudHlwZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xp
bmtlZENvbm5lY3Rpb25Tb3VyY2UgJiYgdGhpcy5fbGlua2VkQ29ubmVjdGlvblNvdXJjZS5pc0Nv
bm5lY3RlZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGlua2VkQ29ubmVj
dGlvblNvdXJjZS50eXBlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh0aGlzLl90eXBlID09PSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklucHV0ICYmIHRoaXMuX3R5cGVDb25uZWN0aW9u
U291cmNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGVDb25uZWN0aW9uU291
cmNlLnR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsK
KyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IHRoaXMuX3R5cGUgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KE5vZGVNYXRlcmlhbENvbm5lY3Rpb25Qb2ludC5wcm90b3R5cGUsICJpc0Nvbm5l
Y3RlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRp
bmcgdGhhdCB0aGUgY3VycmVudCBwb2ludCBpcyBjb25uZWN0ZWQKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGVk
UG9pbnQgIT09IG51bGw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQucHJvdG90eXBlLCAiaXNDb25uZWN0ZWRU
b0lucHV0QmxvY2siLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGEgYm9vbGVhbiBp
bmRpY2F0aW5nIHRoYXQgdGhlIGN1cnJlbnQgcG9pbnQgaXMgY29ubmVjdGVkIHRvIGFuIGlucHV0
IGJsb2NrCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLmNvbm5lY3RlZFBvaW50ICE9PSBudWxsICYmIHRoaXMuY29ubmVjdGVk
UG9pbnQub3duZXJCbG9jay5pc0lucHV0OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50LnByb3RvdHlwZSwgImNv
bm5lY3RJbnB1dEJsb2NrIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIHRoZSBj
b25uZWN0ZWQgaW5wdXQgYmxvY2sgKGlmIGFueSkKKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkVG9JbnB1dEJs
b2NrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWRQb2ludC5vd25lckJsb2NrOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZU1hdGVyaWFsQ29ubmVjdGlv
blBvaW50LnByb3RvdHlwZSwgImNvbm5lY3RlZFBvaW50IiwgeworICAgICAgICAvKiogR2V0IHRo
ZSBvdGhlciBzaWRlIG9mIHRoZSBjb25uZWN0aW9uIChpZiBhbnkpICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3RlZFBvaW50Owor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZU1hdGVyaWFs
Q29ubmVjdGlvblBvaW50LnByb3RvdHlwZSwgIm93bmVyQmxvY2siLCB7CisgICAgICAgIC8qKiBH
ZXQgdGhlIGJsb2NrIHRoYXQgb3ducyB0aGlzIGNvbm5lY3Rpb24gcG9pbnQgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3duZXJCbG9jazsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGVNYXRlcmlh
bENvbm5lY3Rpb25Qb2ludC5wcm90b3R5cGUsICJzb3VyY2VCbG9jayIsIHsKKyAgICAgICAgLyoq
IEdldCB0aGUgYmxvY2sgY29ubmVjdGVkIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoaXMgY29ubmVj
dGlvbiAoaWYgYW55KSAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy5fY29ubmVjdGVkUG9pbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25uZWN0ZWRQb2lu
dC5vd25lckJsb2NrOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50LnByb3RvdHlwZSwgImNvbm5lY3RlZEJsb2Nr
cyIsIHsKKyAgICAgICAgLyoqIEdldCB0aGUgYmxvY2sgY29ubmVjdGVkIG9uIHRoZSBlbmRwb2lu
dHMgb2YgdGhpcyBjb25uZWN0aW9uIChpZiBhbnkpICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2VuZHBvaW50cy5sZW5ndGggPT09IDApIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fZW5kcG9pbnRzLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5vd25lckJsb2Nr
OyB9KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGVN
YXRlcmlhbENvbm5lY3Rpb25Qb2ludC5wcm90b3R5cGUsICJlbmRwb2ludHMiLCB7CisgICAgICAg
IC8qKiBHZXRzIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBlbmRwb2ludHMgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5kcG9pbnRzOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZU1hdGVyaWFsQ29u
bmVjdGlvblBvaW50LnByb3RvdHlwZSwgImhhc0VuZHBvaW50cyIsIHsKKyAgICAgICAgLyoqIEdl
dHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhhdCBvdXRwdXQgcG9pbnQgaXMgY29ubmVjdGVk
IHRvIGF0IGxlYXN0IG9uZSBpbnB1dCAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9lbmRwb2ludHMgJiYgdGhpcy5fZW5kcG9pbnRzLmxlbmd0
aCA+IDA7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJl
bnQgY2xhc3MgbmFtZSBlLmcuICJOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQiCisgICAgICog
QHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxDb25uZWN0
aW9uUG9pbnQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuICJOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQiOworICAgIH07CisgICAgLyoqCisg
ICAgICogR2V0cyBhbiBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGN1cnJlbnQgcG9pbnQgY2Fu
IGJlIGNvbm5lY3RlZCB0byBhbm90aGVyIHBvaW50CisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25Q
b2ludCBkZWZpbmVzIHRoZSBvdGhlciBjb25uZWN0aW9uIHBvaW50CisgICAgICogQHJldHVybnMg
dHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBpcyBwb3NzaWJsZQorICAgICAqLworICAgIE5vZGVNYXRl
cmlhbENvbm5lY3Rpb25Qb2ludC5wcm90b3R5cGUuY2FuQ29ubmVjdFRvID0gZnVuY3Rpb24gKGNv
bm5lY3Rpb25Qb2ludCkgeworICAgICAgICBpZiAodGhpcy50eXBlICE9PSBjb25uZWN0aW9uUG9p
bnQudHlwZSAmJiBjb25uZWN0aW9uUG9pbnQudHlwZSAhPT0gX25vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRlY3QpIHsKKyAgICAgICAgICAg
IC8vIEVxdWl2YWxlbnRzCisgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlcyJdLlZlY3RvcjM6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25Q
b2ludC50eXBlID09PSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzIl0uQ29sb3IzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYXNlIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMi
XS5WZWN0b3I0OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9pbnQudHlw
ZSA9PT0gX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJd
LkNvbG9yNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3Iz
OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9pbnQudHlwZSA9PT0gX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgX25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNDogeworICAg
ICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvblBvaW50LnR5cGUgPT09IF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEFjY2VwdGVk
IHR5cGVzCisgICAgICAgICAgICByZXR1cm4gKGNvbm5lY3Rpb25Qb2ludC5hY2NlcHRlZENvbm5l
Y3Rpb25Qb2ludFR5cGVzICYmIGNvbm5lY3Rpb25Qb2ludC5hY2NlcHRlZENvbm5lY3Rpb25Qb2lu
dFR5cGVzLmluZGV4T2YodGhpcy50eXBlKSAhPT0gLTEpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogQ29ubmVjdCB0aGlzIHBvaW50IHRv
IGFub3RoZXIgY29ubmVjdGlvbiBwb2ludAorICAgICAqIEBwYXJhbSBjb25uZWN0aW9uUG9pbnQg
ZGVmaW5lcyB0aGUgb3RoZXIgY29ubmVjdGlvbiBwb2ludAorICAgICAqIEBwYXJhbSBpZ25vcmVD
b25zdHJhaW50cyBkZWZpbmVzIGlmIHRoZSBzeXN0ZW0gd2lsbCBpZ25vcmUgY29ubmVjdGlvbiB0
eXBlIGNvbnN0cmFpbnRzIChkZWZhdWx0IGlzIGZhbHNlKQorICAgICAqIEByZXR1cm5zIHRoZSBj
dXJyZW50IGNvbm5lY3Rpb24gcG9pbnQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxDb25uZWN0
aW9uUG9pbnQucHJvdG90eXBlLmNvbm5lY3RUbyA9IGZ1bmN0aW9uIChjb25uZWN0aW9uUG9pbnQs
IGlnbm9yZUNvbnN0cmFpbnRzKSB7CisgICAgICAgIGlmIChpZ25vcmVDb25zdHJhaW50cyA9PT0g
dm9pZCAwKSB7IGlnbm9yZUNvbnN0cmFpbnRzID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCFpZ25v
cmVDb25zdHJhaW50cyAmJiAhdGhpcy5jYW5Db25uZWN0VG8oY29ubmVjdGlvblBvaW50KSkgewor
ICAgICAgICAgICAgdGhyb3cgIkNhbm5vdCBjb25uZWN0IHR3byBkaWZmZXJlbnQgY29ubmVjdGlv
biB0eXBlcy4iOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VuZHBvaW50cy5wdXNoKGNvbm5l
Y3Rpb25Qb2ludCk7CisgICAgICAgIGNvbm5lY3Rpb25Qb2ludC5fY29ubmVjdGVkUG9pbnQgPSB0
aGlzOworICAgICAgICB0aGlzLl9lbmZvcmNlQXNzb2NpYXRlZFZhcmlhYmxlTmFtZSA9IGZhbHNl
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc2Nvbm5l
Y3QgdGhpcyBwb2ludCBmcm9tIG9uZSBvZiBoaXMgZW5kcG9pbnQKKyAgICAgKiBAcGFyYW0gZW5k
cG9pbnQgZGVmaW5lcyB0aGUgb3RoZXIgY29ubmVjdGlvbiBwb2ludAorICAgICAqIEByZXR1cm5z
IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gcG9pbnQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxD
b25uZWN0aW9uUG9pbnQucHJvdG90eXBlLmRpc2Nvbm5lY3RGcm9tID0gZnVuY3Rpb24gKGVuZHBv
aW50KSB7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2VuZHBvaW50cy5pbmRleE9mKGVuZHBv
aW50KTsKKyAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZW5kcG9pbnRzLnNwbGljZShpbmRleCwgMSk7
CisgICAgICAgIGVuZHBvaW50Ll9jb25uZWN0ZWRQb2ludCA9IG51bGw7CisgICAgICAgIHRoaXMu
X2VuZm9yY2VBc3NvY2lhdGVkVmFyaWFibGVOYW1lID0gZmFsc2U7CisgICAgICAgIGVuZHBvaW50
Ll9lbmZvcmNlQXNzb2NpYXRlZFZhcmlhYmxlTmFtZSA9IGZhbHNlOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhpcyBwb2ludCBpbiBh
IEpTT04gcmVwcmVzZW50YXRpb24KKyAgICAgKiBAcmV0dXJucyB0aGUgc2VyaWFsaXplZCBwb2lu
dCBvYmplY3QKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQucHJvdG90
eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25P
YmplY3QgPSB7fTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5uYW1lID0gdGhpcy5uYW1l
OworICAgICAgICBpZiAodGhpcy5jb25uZWN0ZWRQb2ludCkgeworICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5pbnB1dE5hbWUgPSB0aGlzLm5hbWU7CisgICAgICAgICAgICBzZXJpYWxp
emF0aW9uT2JqZWN0LnRhcmdldEJsb2NrSWQgPSB0aGlzLmNvbm5lY3RlZFBvaW50Lm93bmVyQmxv
Y2sudW5pcXVlSWQ7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRhcmdldENvbm5l
Y3Rpb25OYW1lID0gdGhpcy5jb25uZWN0ZWRQb2ludC5uYW1lOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgcmV0dXJuIE5vZGVNYXRl
cmlhbENvbm5lY3Rpb25Qb2ludDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXM7IH0pOworLyoqCisgKiBEZWZpbmVzIHRoZSBraW5kIG9mIGNvbm5lY3Rp
b24gcG9pbnQgZm9yIG5vZGUgYmFzZWQgbWF0ZXJpYWwKKyAqLwordmFyIE5vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXM7CisoZnVuY3Rpb24gKE5vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50VHlwZXMpIHsKKyAgICAvKiogRmxvYXQgKi8KKyAgICBOb2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzW05vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXNbIkZsb2F0Il0gPSAxXSA9ICJGbG9hdCI7CisgICAgLyoqIEludCAqLworICAgIE5vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNbTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlc1siSW50Il0gPSAyXSA9ICJJbnQiOworICAgIC8qKiBWZWN0b3IyICovCisg
ICAgTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc1tOb2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzWyJWZWN0b3IyIl0gPSA0XSA9ICJWZWN0b3IyIjsKKyAgICAv
KiogVmVjdG9yMyAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNb
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc1siVmVjdG9yMyJdID0gOF0gPSAi
VmVjdG9yMyI7CisgICAgLyoqIFZlY3RvcjQgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzW05vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNbIlZl
Y3RvcjQiXSA9IDE2XSA9ICJWZWN0b3I0IjsKKyAgICAvKiogQ29sb3IzICovCisgICAgTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc1tOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzWyJDb2xvcjMiXSA9IDMyXSA9ICJDb2xvcjMiOworICAgIC8qKiBDb2xvcjQg
Ki8KKyAgICBOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzW05vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNbIkNvbG9yNCJdID0gNjRdID0gIkNvbG9yNCI7Cisg
ICAgLyoqIE1hdHJpeCAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNbTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc1siTWF0cml4Il0gPSAxMjhd
ID0gIk1hdHJpeCI7CisgICAgLyoqIERldGVjdCB0eXBlIGJhc2VkIG9uIGNvbm5lY3Rpb24gKi8K
KyAgICBOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzW05vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXNbIkF1dG9EZXRlY3QiXSA9IDEwMjRdID0gIkF1dG9EZXRl
Y3QiOworICAgIC8qKiBPdXRwdXQgdHlwZSB0aGF0IHdpbGwgYmUgZGVmaW5lZCBieSBpbnB1dCB0
eXBlICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc1tOb2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzWyJCYXNlZE9uSW5wdXQiXSA9IDIwNDhdID0g
IkJhc2VkT25JbnB1dCI7Cit9KShOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
IHx8IChOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzID0ge30pKTsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE5vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
czsgfSk7CisvKioKKyAqIEVudW0gdXNlZCB0byBkZWZpbmUgdGhlIHRhcmdldCBvZiBhIGJsb2Nr
CisgKi8KK3ZhciBOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHM7CisoZnVuY3Rpb24gKE5vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0cykgeworICAgIC8qKiBWZXJ0ZXggc2hhZGVyICovCisgICAgTm9kZU1h
dGVyaWFsQmxvY2tUYXJnZXRzW05vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c1siVmVydGV4Il0gPSAx
XSA9ICJWZXJ0ZXgiOworICAgIC8qKiBGcmFnbWVudCBzaGFkZXIgKi8KKyAgICBOb2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHNbTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzWyJGcmFnbWVudCJdID0gMl0g
PSAiRnJhZ21lbnQiOworICAgIC8qKiBOZXV0cmFsICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzW05vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c1siTmV1dHJhbCJdID0gNF0gPSAiTmV1dHJh
bCI7CisgICAgLyoqIFZlcnRleCBhbmQgRnJhZ21lbnQgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHNbTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzWyJWZXJ0ZXhBbmRGcmFnbWVudCJdID0g
M10gPSAiVmVydGV4QW5kRnJhZ21lbnQiOworfSkoTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIHx8
IChOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgPSB7fSkpOworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCdWlsZFN0YXRlLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCdWlsZFN0YXRlLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19zdHJpbmdUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9z
dHJpbmdUb29scyAqLyAiLi9NaXNjL3N0cmluZ1Rvb2xzLnRzIik7CisKKworCisKKy8qKgorICog
Q2xhc3MgdXNlZCB0byBzdG9yZSBub2RlIGJhc2VkIG1hdGVyaWFsIGJ1aWxkIHN0YXRlCisgKi8K
K3ZhciBOb2RlTWF0ZXJpYWxCdWlsZFN0YXRlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIGZ1bmN0aW9uIE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUoKSB7CisgICAgICAgIC8qKiBH
ZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGN1cnJlbnQgc3RhdGUgY2Fu
IGVtaXQgdW5pZm9ybSBidWZmZXJzICovCisgICAgICAgIHRoaXMuc3VwcG9ydFVuaWZvcm1CdWZm
ZXJzID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGVt
aXR0ZWQgYXR0cmlidXRlcworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0g
bmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGVt
aXR0ZWQgdW5pZm9ybXMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudW5pZm9ybXMgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgZW1pdHRl
ZCB1bmlmb3JtIGJ1ZmZlcnMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZl
cnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qg
b2YgZW1pdHRlZCBzYW1wbGVycworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zYW1wbGVycyA9
IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBl
bWl0dGVkIGZ1bmN0aW9ucworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5mdW5jdGlvbnMgPSB7
fTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgZW1pdHRlZCBleHRl
bnNpb25zCisgICAgICAgICAqLworICAgICAgICB0aGlzLmV4dGVuc2lvbnMgPSB7fTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgZW1pdHRlZCBjb3VudGVycworICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5jb3VudGVycyA9IHt9OworICAgICAgICAvKiogQGhpZGRl
biAqLworICAgICAgICB0aGlzLl9hdHRyaWJ1dGVEZWNsYXJhdGlvbiA9ICIiOworICAgICAgICAv
KiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl91bmlmb3JtRGVjbGFyYXRpb24gPSAiIjsKKyAg
ICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fc2FtcGxlckRlY2xhcmF0aW9uID0g
IiI7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX3ZhcnlpbmdUcmFuc2Zl
ciA9ICIiOworICAgICAgICB0aGlzLl9yZXBlYXRhYmxlQ29udGVudEFuY2hvckluZGV4ID0gMDsK
KyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fYnVpbHRDb21waWxhdGlvblN0
cmluZyA9ICIiOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZW1pdHRlZCBjb21w
aWxhdGlvbiBzdHJpbmdzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNvbXBpbGF0aW9uU3Ry
aW5nID0gIiI7CisgICAgfQorICAgIC8qKgorICAgICAqIEZpbmFsaXplIHRoZSBjb21waWxhdGlv
biBzdHJpbmdzCisgICAgICogQHBhcmFtIHN0YXRlIGRlZmluZXMgdGhlIGN1cnJlbnQgY29tcGls
YXRpb24gc3RhdGUKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCdWlsZFN0YXRlLnByb3RvdHlw
ZS5maW5hbGl6ZSA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICB2YXIgZW1pdENvbW1lbnRz
ID0gc3RhdGUuc2hhcmVkRGF0YS5lbWl0Q29tbWVudHM7CisgICAgICAgIHZhciBpc0ZyYWdtZW50
TW9kZSA9ICh0aGlzLnRhcmdldCA9PT0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVu
dCk7CisgICAgICAgIHRoaXMuY29tcGlsYXRpb25TdHJpbmcgPSAiXHJcbiIgKyAoZW1pdENvbW1l
bnRzID8gIi8vRW50cnkgcG9pbnRcclxuIiA6ICIiKSArICJ2b2lkIG1haW4odm9pZCkge1xyXG4i
ICsgdGhpcy5jb21waWxhdGlvblN0cmluZzsKKyAgICAgICAgdmFyIGZ1bmN0aW9uQ29kZSA9ICIi
OworICAgICAgICBmb3IgKHZhciBmdW5jdGlvbk5hbWUgaW4gdGhpcy5mdW5jdGlvbnMpIHsKKyAg
ICAgICAgICAgIGZ1bmN0aW9uQ29kZSArPSB0aGlzLmZ1bmN0aW9uc1tmdW5jdGlvbk5hbWVdICsg
IlxyXG4iOworICAgICAgICB9CisgICAgICAgIHRoaXMuY29tcGlsYXRpb25TdHJpbmcgPSAiXHJc
biIgKyBmdW5jdGlvbkNvZGUgKyAiXHJcbiIgKyB0aGlzLmNvbXBpbGF0aW9uU3RyaW5nOworICAg
ICAgICBpZiAoIWlzRnJhZ21lbnRNb2RlICYmIHRoaXMuX3ZhcnlpbmdUcmFuc2ZlcikgeworICAg
ICAgICAgICAgdGhpcy5jb21waWxhdGlvblN0cmluZyA9IHRoaXMuY29tcGlsYXRpb25TdHJpbmcg
KyAiXHJcbiIgKyB0aGlzLl92YXJ5aW5nVHJhbnNmZXI7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5jb21waWxhdGlvblN0cmluZyA9IHRoaXMuY29tcGlsYXRpb25TdHJpbmcgKyAiXHJcbn0iOwor
ICAgICAgICBpZiAodGhpcy5zaGFyZWREYXRhLnZhcnlpbmdEZWNsYXJhdGlvbikgeworICAgICAg
ICAgICAgdGhpcy5jb21waWxhdGlvblN0cmluZyA9ICJcclxuIiArIChlbWl0Q29tbWVudHMgPyAi
Ly9WYXJ5aW5nc1xyXG4iIDogIiIpICsgdGhpcy5zaGFyZWREYXRhLnZhcnlpbmdEZWNsYXJhdGlv
biArICJcclxuIiArIHRoaXMuY29tcGlsYXRpb25TdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX3NhbXBsZXJEZWNsYXJhdGlvbikgeworICAgICAgICAgICAgdGhpcy5jb21waWxh
dGlvblN0cmluZyA9ICJcclxuIiArIChlbWl0Q29tbWVudHMgPyAiLy9TYW1wbGVyc1xyXG4iIDog
IiIpICsgdGhpcy5fc2FtcGxlckRlY2xhcmF0aW9uICsgIlxyXG4iICsgdGhpcy5jb21waWxhdGlv
blN0cmluZzsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fdW5pZm9ybURlY2xhcmF0aW9u
KSB7CisgICAgICAgICAgICB0aGlzLmNvbXBpbGF0aW9uU3RyaW5nID0gIlxyXG4iICsgKGVtaXRD
b21tZW50cyA/ICIvL1VuaWZvcm1zXHJcbiIgOiAiIikgKyB0aGlzLl91bmlmb3JtRGVjbGFyYXRp
b24gKyAiXHJcbiIgKyB0aGlzLmNvbXBpbGF0aW9uU3RyaW5nOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9hdHRyaWJ1dGVEZWNsYXJhdGlvbiAmJiAhaXNGcmFnbWVudE1vZGUpIHsKKyAg
ICAgICAgICAgIHRoaXMuY29tcGlsYXRpb25TdHJpbmcgPSAiXHJcbiIgKyAoZW1pdENvbW1lbnRz
ID8gIi8vQXR0cmlidXRlc1xyXG4iIDogIiIpICsgdGhpcy5fYXR0cmlidXRlRGVjbGFyYXRpb24g
KyAiXHJcbiIgKyB0aGlzLmNvbXBpbGF0aW9uU3RyaW5nOworICAgICAgICB9CisgICAgICAgIGZv
ciAodmFyIGV4dGVuc2lvbk5hbWUgaW4gdGhpcy5leHRlbnNpb25zKSB7CisgICAgICAgICAgICB2
YXIgZXh0ZW5zaW9uID0gdGhpcy5leHRlbnNpb25zW2V4dGVuc2lvbk5hbWVdOworICAgICAgICAg
ICAgdGhpcy5jb21waWxhdGlvblN0cmluZyA9IGV4dGVuc2lvbiArICJcclxuIiArIHRoaXMuY29t
cGlsYXRpb25TdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYnVpbHRDb21waWxhdGlv
blN0cmluZyA9IHRoaXMuY29tcGlsYXRpb25TdHJpbmc7CisgICAgfTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZS5wcm90b3R5cGUsICJfcmVwZWF0YWJs
ZUNvbnRlbnRBbmNob3IiLCB7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuICIjIyNfX19BTkNIT1IiICsgdGhpcy5f
cmVwZWF0YWJsZUNvbnRlbnRBbmNob3JJbmRleCsrICsgIl9fXyMjIyI7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8qKiBAaGlkZGVuICovCisgICAgTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZS5wcm90
b3R5cGUuX2dldEZyZWVWYXJpYWJsZU5hbWUgPSBmdW5jdGlvbiAocHJlZml4KSB7CisgICAgICAg
IHByZWZpeCA9IHByZWZpeC5yZXBsYWNlKC9bXmEtekEtWl9dKy9nLCAiIik7CisgICAgICAgIGlm
ICh0aGlzLnNoYXJlZERhdGEudmFyaWFibGVOYW1lc1twcmVmaXhdID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIHRoaXMuc2hhcmVkRGF0YS52YXJpYWJsZU5hbWVzW3ByZWZpeF0gPSAwOwor
ICAgICAgICAgICAgLy8gQ2hlY2sgcmVzZXJ2ZWQgd29yZHMKKyAgICAgICAgICAgIGlmIChwcmVm
aXggPT09ICJvdXRwdXQiIHx8IHByZWZpeCA9PT0gInRleHR1cmUiKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHByZWZpeCArIHRoaXMuc2hhcmVkRGF0YS52YXJpYWJsZU5hbWVzW3ByZWZpeF07
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHJlZml4OworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5zaGFyZWREYXRhLnZhcmlhYmxlTmFtZXNb
cHJlZml4XSsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwcmVmaXggKyB0aGlzLnNoYXJl
ZERhdGEudmFyaWFibGVOYW1lc1twcmVmaXhdOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBOb2RlTWF0ZXJpYWxCdWlsZFN0YXRlLnByb3RvdHlwZS5fZ2V0RnJlZURlZmluZU5hbWUg
PSBmdW5jdGlvbiAocHJlZml4KSB7CisgICAgICAgIGlmICh0aGlzLnNoYXJlZERhdGEuZGVmaW5l
TmFtZXNbcHJlZml4XSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICB0aGlzLnNoYXJlZERh
dGEuZGVmaW5lTmFtZXNbcHJlZml4XSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICB0aGlzLnNoYXJlZERhdGEuZGVmaW5lTmFtZXNbcHJlZml4XSsrOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBwcmVmaXggKyB0aGlzLnNoYXJlZERhdGEuZGVmaW5lTmFtZXNb
cHJlZml4XTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTm9kZU1hdGVyaWFsQnVp
bGRTdGF0ZS5wcm90b3R5cGUuX2V4Y2x1ZGVWYXJpYWJsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSkg
eworICAgICAgICB0aGlzLnNoYXJlZERhdGEudmFyaWFibGVOYW1lc1tuYW1lXSA9IDA7CisgICAg
fTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUucHJvdG90
eXBlLl9nZXRHTFR5cGUgPSBmdW5jdGlvbiAodHlwZSkgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcyJdLkZsb2F0OgorICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOwor
ICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzIl0uSW50OgorICAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsKKyAgICAgICAg
ICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLlZlY3RvcjI6CisgICAgICAgICAgICAgICAgcmV0dXJuICJ2ZWMyIjsKKyAgICAgICAgICAg
IGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJd
LkNvbG9yMzoKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjM6CisgICAgICAgICAgICAgICAgcmV0dXJuICJ2
ZWMzIjsKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNDoKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJ2ZWM0IjsKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLk1hdHJpeDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIm1hdDQiOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZS5wcm90b3R5
cGUuX2VtaXRFeHRlbnNpb24gPSBmdW5jdGlvbiAobmFtZSwgZXh0ZW5zaW9uKSB7CisgICAgICAg
IGlmICh0aGlzLmV4dGVuc2lvbnNbbmFtZV0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLmV4dGVuc2lvbnNbbmFtZV0gPSBleHRlbnNpb247CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUucHJvdG90eXBl
Ll9lbWl0RnVuY3Rpb24gPSBmdW5jdGlvbiAobmFtZSwgY29kZSwgY29tbWVudHMpIHsKKyAgICAg
ICAgaWYgKHRoaXMuZnVuY3Rpb25zW25hbWVdKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuc2hhcmVkRGF0YS5lbWl0Q29tbWVudHMpIHsKKyAgICAg
ICAgICAgIGNvZGUgPSBjb21tZW50cyArICJcclxuIiArIGNvZGU7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5mdW5jdGlvbnNbbmFtZV0gPSBjb2RlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4g
Ki8KKyAgICBOb2RlTWF0ZXJpYWxCdWlsZFN0YXRlLnByb3RvdHlwZS5fZW1pdENvZGVGcm9tSW5j
bHVkZSA9IGZ1bmN0aW9uIChpbmNsdWRlTmFtZSwgY29tbWVudHMsIG9wdGlvbnMpIHsKKyAgICAg
ICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBlYXRLZXkpIHsKKyAgICAgICAgICAgIHJldHVy
biAiI2luY2x1ZGU8IiArIGluY2x1ZGVOYW1lICsgIj5bMC4uIiArIG9wdGlvbnMucmVwZWF0S2V5
ICsgIl1cclxuIjsKKyAgICAgICAgfQorICAgICAgICB2YXIgY29kZSA9IF9lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbaW5j
bHVkZU5hbWVdICsgIlxyXG4iOworICAgICAgICBpZiAodGhpcy5zaGFyZWREYXRhLmVtaXRDb21t
ZW50cykgeworICAgICAgICAgICAgY29kZSA9IGNvbW1lbnRzICsgIlxyXG4iICsgY29kZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIW9wdGlvbnMpIHsKKyAgICAgICAgICAgIHJldHVybiBjb2Rl
OworICAgICAgICB9CisgICAgICAgIGlmIChvcHRpb25zLnJlcGxhY2VTdHJpbmdzKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgb3B0aW9ucy5yZXBsYWNlU3RyaW5n
cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZVN0cmluZyA9
IG9wdGlvbnMucmVwbGFjZVN0cmluZ3NbaW5kZXhdOworICAgICAgICAgICAgICAgIGNvZGUgPSBj
b2RlLnJlcGxhY2UocmVwbGFjZVN0cmluZy5zZWFyY2gsIHJlcGxhY2VTdHJpbmcucmVwbGFjZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUucHJvdG90eXBl
Ll9lbWl0RnVuY3Rpb25Gcm9tSW5jbHVkZSA9IGZ1bmN0aW9uIChpbmNsdWRlTmFtZSwgY29tbWVu
dHMsIG9wdGlvbnMsIHN0b3JlS2V5KSB7CisgICAgICAgIGlmIChzdG9yZUtleSA9PT0gdm9pZCAw
KSB7IHN0b3JlS2V5ID0gIiI7IH0KKyAgICAgICAgdmFyIGtleSA9IGluY2x1ZGVOYW1lICsgc3Rv
cmVLZXk7CisgICAgICAgIGlmICh0aGlzLmZ1bmN0aW9uc1trZXldKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFvcHRpb25zIHx8ICghb3B0aW9ucy5yZW1v
dmVBdHRyaWJ1dGVzICYmICFvcHRpb25zLnJlbW92ZVVuaWZvcm1zICYmICFvcHRpb25zLnJlbW92
ZVZhcnlpbmdzICYmICFvcHRpb25zLnJlbW92ZUlmRGVmICYmICFvcHRpb25zLnJlcGxhY2VTdHJp
bmdzKSkgeworICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBlYXRLZXkpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLmZ1bmN0aW9uc1trZXldID0gIiNpbmNsdWRlPCIgKyBpbmNs
dWRlTmFtZSArICI+WzAuLiIgKyBvcHRpb25zLnJlcGVhdEtleSArICJdXHJcbiI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmZ1bmN0aW9u
c1trZXldID0gIiNpbmNsdWRlPCIgKyBpbmNsdWRlTmFtZSArICI+XHJcbiI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWREYXRhLmVtaXRDb21tZW50cykgeworICAg
ICAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zW2tleV0gPSBjb21tZW50cyArICJcclxuIiArIHRo
aXMuZnVuY3Rpb25zW2tleV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5mdW5jdGlvbnNba2V5XSA9IF9lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbaW5jbHVk
ZU5hbWVdOworICAgICAgICBpZiAodGhpcy5zaGFyZWREYXRhLmVtaXRDb21tZW50cykgeworICAg
ICAgICAgICAgdGhpcy5mdW5jdGlvbnNba2V5XSA9IGNvbW1lbnRzICsgIlxyXG4iICsgdGhpcy5m
dW5jdGlvbnNba2V5XTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3B0aW9ucy5yZW1vdmVJZkRl
ZikgeworICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnNba2V5XSA9IHRoaXMuZnVuY3Rpb25zW2tl
eV0ucmVwbGFjZSgvXlxzKj8jaWZkZWYuKyQvZ20sICIiKTsKKyAgICAgICAgICAgIHRoaXMuZnVu
Y3Rpb25zW2tleV0gPSB0aGlzLmZ1bmN0aW9uc1trZXldLnJlcGxhY2UoL15ccyo/I2VuZGlmLiok
L2dtLCAiIik7CisgICAgICAgICAgICB0aGlzLmZ1bmN0aW9uc1trZXldID0gdGhpcy5mdW5jdGlv
bnNba2V5XS5yZXBsYWNlKC9eXHMqPyNlbHNlLiokL2dtLCAiIik7CisgICAgICAgICAgICB0aGlz
LmZ1bmN0aW9uc1trZXldID0gdGhpcy5mdW5jdGlvbnNba2V5XS5yZXBsYWNlKC9eXHMqPyNlbGlm
LiokL2dtLCAiIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdGlvbnMucmVtb3ZlQXR0cmli
dXRlcykgeworICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnNba2V5XSA9IHRoaXMuZnVuY3Rpb25z
W2tleV0ucmVwbGFjZSgvXlxzKj9hdHRyaWJ1dGUuKyQvZ20sICIiKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAob3B0aW9ucy5yZW1vdmVVbmlmb3JtcykgeworICAgICAgICAgICAgdGhpcy5mdW5j
dGlvbnNba2V5XSA9IHRoaXMuZnVuY3Rpb25zW2tleV0ucmVwbGFjZSgvXlxzKj91bmlmb3JtLisk
L2dtLCAiIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdGlvbnMucmVtb3ZlVmFyeWluZ3Mp
IHsKKyAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zW2tleV0gPSB0aGlzLmZ1bmN0aW9uc1trZXld
LnJlcGxhY2UoL15ccyo/dmFyeWluZy4rJC9nbSwgIiIpOworICAgICAgICB9CisgICAgICAgIGlm
IChvcHRpb25zLnJlcGxhY2VTdHJpbmdzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9
IDA7IGluZGV4IDwgb3B0aW9ucy5yZXBsYWNlU3RyaW5ncy5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgICAgICB2YXIgcmVwbGFjZVN0cmluZyA9IG9wdGlvbnMucmVwbGFjZVN0cmluZ3Nb
aW5kZXhdOworICAgICAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zW2tleV0gPSB0aGlzLmZ1bmN0
aW9uc1trZXldLnJlcGxhY2UocmVwbGFjZVN0cmluZy5zZWFyY2gsIHJlcGxhY2VTdHJpbmcucmVw
bGFjZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVu
ICovCisgICAgTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZS5wcm90b3R5cGUuX3JlZ2lzdGVyVGVtcFZh
cmlhYmxlID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgaWYgKHRoaXMuc2hhcmVkRGF0YS50
ZW1wcy5pbmRleE9mKG5hbWUpICE9PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuc2hhcmVkRGF0YS50ZW1wcy5wdXNoKG5hbWUpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTm9kZU1h
dGVyaWFsQnVpbGRTdGF0ZS5wcm90b3R5cGUuX2VtaXRWYXJ5aW5nRnJvbVN0cmluZyA9IGZ1bmN0
aW9uIChuYW1lLCB0eXBlLCBkZWZpbmUsIG5vdERlZmluZSkgeworICAgICAgICBpZiAoZGVmaW5l
ID09PSB2b2lkIDApIHsgZGVmaW5lID0gIiI7IH0KKyAgICAgICAgaWYgKG5vdERlZmluZSA9PT0g
dm9pZCAwKSB7IG5vdERlZmluZSA9IGZhbHNlOyB9CisgICAgICAgIGlmICh0aGlzLnNoYXJlZERh
dGEudmFyeWluZ3MuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNoYXJlZERhdGEudmFyeWluZ3MucHVzaChu
YW1lKTsKKyAgICAgICAgaWYgKGRlZmluZSkgeworICAgICAgICAgICAgaWYgKF9NaXNjX3N0cmlu
Z1Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlN0cmluZ1Rvb2xzIl0uU3RhcnRz
V2l0aChkZWZpbmUsICJkZWZpbmVkKCIpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRE
YXRhLnZhcnlpbmdEZWNsYXJhdGlvbiArPSAiI2lmICIgKyBkZWZpbmUgKyAiXHJcbiI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNoYXJl
ZERhdGEudmFyeWluZ0RlY2xhcmF0aW9uICs9IChub3REZWZpbmUgPyAiI2lmbmRlZiIgOiAiI2lm
ZGVmIikgKyAiICIgKyBkZWZpbmUgKyAiXHJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5zaGFyZWREYXRhLnZhcnlpbmdEZWNsYXJhdGlvbiArPSAidmFyeWluZyAi
ICsgdHlwZSArICIgIiArIG5hbWUgKyAiO1xyXG4iOworICAgICAgICBpZiAoZGVmaW5lKSB7Cisg
ICAgICAgICAgICB0aGlzLnNoYXJlZERhdGEudmFyeWluZ0RlY2xhcmF0aW9uICs9ICIjZW5kaWZc
clxuIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBA
aGlkZGVuICovCisgICAgTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZS5wcm90b3R5cGUuX2VtaXRVbmlm
b3JtRnJvbVN0cmluZyA9IGZ1bmN0aW9uIChuYW1lLCB0eXBlLCBkZWZpbmUsIG5vdERlZmluZSkg
eworICAgICAgICBpZiAoZGVmaW5lID09PSB2b2lkIDApIHsgZGVmaW5lID0gIiI7IH0KKyAgICAg
ICAgaWYgKG5vdERlZmluZSA9PT0gdm9pZCAwKSB7IG5vdERlZmluZSA9IGZhbHNlOyB9CisgICAg
ICAgIGlmICh0aGlzLnVuaWZvcm1zLmluZGV4T2YobmFtZSkgIT09IC0xKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy51bmlmb3Jtcy5wdXNoKG5hbWUpOwor
ICAgICAgICBpZiAoZGVmaW5lKSB7CisgICAgICAgICAgICB0aGlzLl91bmlmb3JtRGVjbGFyYXRp
b24gKz0gKG5vdERlZmluZSA/ICIjaWZuZGVmIiA6ICIjaWZkZWYiKSArICIgIiArIGRlZmluZSAr
ICJcclxuIjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl91bmlmb3JtRGVjbGFyYXRpb24gKz0g
InVuaWZvcm0gIiArIHR5cGUgKyAiICIgKyBuYW1lICsgIjtcclxuIjsKKyAgICAgICAgaWYgKGRl
ZmluZSkgeworICAgICAgICAgICAgdGhpcy5fdW5pZm9ybURlY2xhcmF0aW9uICs9ICIjZW5kaWZc
clxuIjsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIE5vZGVNYXRlcmlhbEJ1aWxkU3Rh
dGU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL25v
ZGVNYXRlcmlhbEJ1aWxkU3RhdGVTaGFyZWREYXRhLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQnVpbGRTdGF0ZVNoYXJlZERhdGEudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGVTaGFy
ZWREYXRhICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlh
bEJ1aWxkU3RhdGVTaGFyZWREYXRhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBOb2RlTWF0ZXJpYWxC
dWlsZFN0YXRlU2hhcmVkRGF0YTsgfSk7CisvKioKKyAqIENsYXNzIHVzZWQgdG8gc3RvcmUgc2hh
cmVkIGRhdGEgYmV0d2VlbiAyIE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUKKyAqLwordmFyIE5vZGVN
YXRlcmlhbEJ1aWxkU3RhdGVTaGFyZWREYXRhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIC8qKiBDcmVhdGVzIGEgbmV3IHNoYXJlZCBkYXRhICovCisgICAgZnVuY3Rpb24gTm9k
ZU1hdGVyaWFsQnVpbGRTdGF0ZVNoYXJlZERhdGEoKSB7CisgICAgICAgIC8qKgorICAgICAgICAq
IEdldHMgdGhlIGxpc3Qgb2YgZW1pdHRlZCB2YXJ5aW5ncworICAgICAgICAqLworICAgICAgICB0
aGlzLnRlbXBzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBsaXN0IG9mIGVtaXR0ZWQgdmFyeWluZ3MKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudmFy
eWluZ3MgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHZh
cnlpbmcgZGVjbGFyYXRpb24gc3RyaW5nCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZhcnlp
bmdEZWNsYXJhdGlvbiA9ICIiOworICAgICAgICAvKioKKyAgICAgICAgICogSW5wdXQgYmxvY2tz
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmlucHV0QmxvY2tzID0gbmV3IEFycmF5KCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBJbnB1dCBibG9ja3MKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMudGV4dHVyZUJsb2NrcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAg
ICogQmluZGFibGUgYmxvY2tzIChCbG9ja3MgdGhhdCBuZWVkIHRvIHNldCBkYXRhIHRvIHRoZSBl
ZmZlY3QpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmJpbmRhYmxlQmxvY2tzID0gbmV3IEFy
cmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBMaXN0IG9mIGJsb2NrcyB0aGF0IGNhbiBw
cm92aWRlIGEgY29tcGlsYXRpb24gZmFsbGJhY2sKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
YmxvY2tzV2l0aEZhbGxiYWNrcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAg
ICogTGlzdCBvZiBibG9ja3MgdGhhdCBjYW4gcHJvdmlkZSBhIGRlZmluZSB1cGRhdGUKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuYmxvY2tzV2l0aERlZmluZXMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICogTGlzdCBvZiBibG9ja3MgdGhhdCBjYW4gcHJvdmlkZSBhIHJl
cGVhdGFibGUgY29udGVudAorICAgICAgICAqLworICAgICAgICB0aGlzLnJlcGVhdGFibGVDb250
ZW50QmxvY2tzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAqIExpc3Qgb2Yg
YmxvY2tzIHRoYXQgY2FuIHByb3ZpZGUgYSBkeW5hbWljIGxpc3Qgb2YgdW5pZm9ybXMKKyAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5keW5hbWljVW5pZm9ybUJsb2NrcyA9IG5ldyBBcnJheSgpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogTGlzdCBvZiBibG9ja3MgdGhhdCBjYW4gYmxvY2sgdGhl
IGlzUmVhZHkgZnVuY3Rpb24gZm9yIHRoZSBtYXRlcmlhbAorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5ibG9ja2luZ0Jsb2NrcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgbGlzdCBvZiBhbmltYXRlZCBpbnB1dHMKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuYW5pbWF0ZWRJbnB1dHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqIExpc3Qgb2Yg
ZW1pdHRlZCB2YXJpYWJsZXMgKi8KKyAgICAgICAgdGhpcy52YXJpYWJsZU5hbWVzID0ge307Cisg
ICAgICAgIC8qKiBMaXN0IG9mIGVtaXR0ZWQgZGVmaW5lcyAqLworICAgICAgICB0aGlzLmRlZmlu
ZU5hbWVzID0ge307CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjb21waWxhdGlv
biBoaW50cyBlbWl0dGVkIGF0IGNvbXBpbGF0aW9uIHRpbWUKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuaGludHMgPSB7CisgICAgICAgICAgICBuZWVkV29ybGRWaWV3TWF0cml4OiBmYWxzZSwK
KyAgICAgICAgICAgIG5lZWRXb3JsZFZpZXdQcm9qZWN0aW9uTWF0cml4OiBmYWxzZSwKKyAgICAg
ICAgICAgIG5lZWRBbHBoYUJsZW5kaW5nOiBmYWxzZSwKKyAgICAgICAgICAgIG5lZWRBbHBoYVRl
c3Rpbmc6IGZhbHNlCisgICAgICAgIH07CisgICAgICAgIC8qKgorICAgICAgICAgKiBMaXN0IG9m
IGNvbXBpbGF0aW9uIGNoZWNrcworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5jaGVja3MgPSB7
CisgICAgICAgICAgICBlbWl0VmVydGV4OiBmYWxzZSwKKyAgICAgICAgICAgIGVtaXRGcmFnbWVu
dDogZmFsc2UsCisgICAgICAgICAgICBub3RDb25uZWN0ZWROb25PcHRpb25hbElucHV0czogbmV3
IEFycmF5KCkKKyAgICAgICAgfTsKKyAgICAgICAgLy8gRXhjbHVkZSB1c3VhbCBhdHRyaWJ1dGVz
IGZyb20gZnJlZSB2YXJpYWJsZSBuYW1lcworICAgICAgICB0aGlzLnZhcmlhYmxlTmFtZXNbInBv
c2l0aW9uIl0gPSAwOworICAgICAgICB0aGlzLnZhcmlhYmxlTmFtZXNbIm5vcm1hbCJdID0gMDsK
KyAgICAgICAgdGhpcy52YXJpYWJsZU5hbWVzWyJ0YW5nZW50Il0gPSAwOworICAgICAgICB0aGlz
LnZhcmlhYmxlTmFtZXNbInV2Il0gPSAwOworICAgICAgICB0aGlzLnZhcmlhYmxlTmFtZXNbInV2
MiJdID0gMDsKKyAgICAgICAgdGhpcy52YXJpYWJsZU5hbWVzWyJ1djMiXSA9IDA7CisgICAgICAg
IHRoaXMudmFyaWFibGVOYW1lc1sidXY0Il0gPSAwOworICAgICAgICB0aGlzLnZhcmlhYmxlTmFt
ZXNbInV2NCJdID0gMDsKKyAgICAgICAgdGhpcy52YXJpYWJsZU5hbWVzWyJ1djUiXSA9IDA7Cisg
ICAgICAgIHRoaXMudmFyaWFibGVOYW1lc1sidXY2Il0gPSAwOworICAgICAgICB0aGlzLnZhcmlh
YmxlTmFtZXNbImNvbG9yIl0gPSAwOworICAgICAgICB0aGlzLnZhcmlhYmxlTmFtZXNbIm1hdHJp
Y2VzSW5kaWNlcyJdID0gMDsKKyAgICAgICAgdGhpcy52YXJpYWJsZU5hbWVzWyJtYXRyaWNlc1dl
aWdodHMiXSA9IDA7CisgICAgICAgIHRoaXMudmFyaWFibGVOYW1lc1sibWF0cmljZXNJbmRpY2Vz
RXh0cmEiXSA9IDA7CisgICAgICAgIHRoaXMudmFyaWFibGVOYW1lc1sibWF0cmljZXNXZWlnaHRz
RXh0cmEiXSA9IDA7CisgICAgICAgIHRoaXMudmFyaWFibGVOYW1lc1siZGlmZnVzZUJhc2UiXSA9
IDA7CisgICAgICAgIHRoaXMudmFyaWFibGVOYW1lc1sic3BlY3VsYXJCYXNlIl0gPSAwOworICAg
ICAgICB0aGlzLnZhcmlhYmxlTmFtZXNbIndvcmxkUG9zIl0gPSAwOworICAgICAgICAvLyBFeGNs
dWRlIGtub3duIHZhcnlpbmdzCisgICAgICAgIHRoaXMudmFyaWFibGVOYW1lc1sidlRCTiJdID0g
MDsKKyAgICAgICAgLy8gRXhjbHVkZSBkZWZpbmVzCisgICAgICAgIHRoaXMuZGVmaW5lTmFtZXNb
Ik1BSU5VVjAiXSA9IDA7CisgICAgICAgIHRoaXMuZGVmaW5lTmFtZXNbIk1BSU5VVjEiXSA9IDA7
CisgICAgICAgIHRoaXMuZGVmaW5lTmFtZXNbIk1BSU5VVjIiXSA9IDA7CisgICAgICAgIHRoaXMu
ZGVmaW5lTmFtZXNbIk1BSU5VVjMiXSA9IDA7CisgICAgICAgIHRoaXMuZGVmaW5lTmFtZXNbIk1B
SU5VVjQiXSA9IDA7CisgICAgICAgIHRoaXMuZGVmaW5lTmFtZXNbIk1BSU5VVjUiXSA9IDA7Cisg
ICAgICAgIHRoaXMuZGVmaW5lTmFtZXNbIk1BSU5VVjYiXSA9IDA7CisgICAgICAgIHRoaXMuZGVm
aW5lTmFtZXNbIk1BSU5VVjciXSA9IDA7CisgICAgfQorICAgIC8qKgorICAgICAqIEVtaXRzIGNv
bnNvbGUgZXJyb3JzIGFuZCBleGNlcHRpb25zIGlmIHRoZXJlIGlzIGEgZmFpbGluZyBjaGVjawor
ICAgICAqLworICAgIE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGVTaGFyZWREYXRhLnByb3RvdHlwZS5l
bWl0RXJyb3JzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gIiI7
CisgICAgICAgIGlmICghdGhpcy5jaGVja3MuZW1pdFZlcnRleCkgeworICAgICAgICAgICAgZXJy
b3JNZXNzYWdlICs9ICJOb2RlTWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIHZlcnRleCBvdXRwdXQu
IFlvdSBuZWVkIHRvIGF0IGxlYXN0IGFkZCBhIGJsb2NrIHRoYXQgZ2VuZXJhdGVzIGEgZ2xQb3Np
dGlvbiB2YWx1ZS5cclxuIjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuY2hlY2tzLmVt
aXRGcmFnbWVudCkgeworICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9ICJOb2RlTWF0ZXJpYWwg
ZG9lcyBub3QgaGF2ZSBhIGZyYWdtZW50IG91dHB1dC4gWW91IG5lZWQgdG8gYXQgbGVhc3QgYWRk
IGEgYmxvY2sgdGhhdCBnZW5lcmF0ZXMgYSBnbEZyYWdDb2xvciB2YWx1ZS5cclxuIjsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5jaGVja3Mubm90Q29ubmVj
dGVkTm9uT3B0aW9uYWxJbnB1dHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAg
ICB2YXIgbm90Q29ubmVjdGVkSW5wdXQgPSBfYVtfaV07CisgICAgICAgICAgICBlcnJvck1lc3Nh
Z2UgKz0gImlucHV0ICIgKyBub3RDb25uZWN0ZWRJbnB1dC5uYW1lICsgIiBmcm9tIGJsb2NrICIg
KyBub3RDb25uZWN0ZWRJbnB1dC5vd25lckJsb2NrLm5hbWUgKyAiWyIgKyBub3RDb25uZWN0ZWRJ
bnB1dC5vd25lckJsb2NrLmdldENsYXNzTmFtZSgpICsgIl0gaXMgbm90IGNvbm5lY3RlZCBhbmQg
aXMgbm90IG9wdGlvbmFsLlxyXG4iOworICAgICAgICB9CisgICAgICAgIGlmIChlcnJvck1lc3Nh
Z2UpIHsKKyAgICAgICAgICAgIHRocm93ICJCdWlsZCBvZiBOb2RlTWF0ZXJpYWwgZmFpbGVkOlxy
XG4iICsgZXJyb3JNZXNzYWdlOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gTm9kZU1h
dGVyaWFsQnVpbGRTdGF0ZVNoYXJlZERhdGE7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcy50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXM7IH0pOworLyoqCisg
KiBFbnVtIHVzZWQgdG8gZGVmaW5lIHN5c3RlbSB2YWx1ZXMgZS5nLiB2YWx1ZXMgYXV0b21hdGlj
YWxseSBwcm92aWRlZCBieSB0aGUgc3lzdGVtCisgKi8KK3ZhciBOb2RlTWF0ZXJpYWxTeXN0ZW1W
YWx1ZXM7CisoZnVuY3Rpb24gKE5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcykgeworICAgIC8qKiBX
b3JsZCAqLworICAgIE5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc1tOb2RlTWF0ZXJpYWxTeXN0ZW1W
YWx1ZXNbIldvcmxkIl0gPSAxXSA9ICJXb3JsZCI7CisgICAgLyoqIFZpZXcgKi8KKyAgICBOb2Rl
TWF0ZXJpYWxTeXN0ZW1WYWx1ZXNbTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzWyJWaWV3Il0gPSAy
XSA9ICJWaWV3IjsKKyAgICAvKiogUHJvamVjdGlvbiAqLworICAgIE5vZGVNYXRlcmlhbFN5c3Rl
bVZhbHVlc1tOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNbIlByb2plY3Rpb24iXSA9IDNdID0gIlBy
b2plY3Rpb24iOworICAgIC8qKiBWaWV3UHJvamVjdGlvbiAqLworICAgIE5vZGVNYXRlcmlhbFN5
c3RlbVZhbHVlc1tOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNbIlZpZXdQcm9qZWN0aW9uIl0gPSA0
XSA9ICJWaWV3UHJvamVjdGlvbiI7CisgICAgLyoqIFdvcmxkVmlldyAqLworICAgIE5vZGVNYXRl
cmlhbFN5c3RlbVZhbHVlc1tOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNbIldvcmxkVmlldyJdID0g
NV0gPSAiV29ybGRWaWV3IjsKKyAgICAvKiogV29ybGRWaWV3UHJvamVjdGlvbiAqLworICAgIE5v
ZGVNYXRlcmlhbFN5c3RlbVZhbHVlc1tOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNbIldvcmxkVmll
d1Byb2plY3Rpb24iXSA9IDZdID0gIldvcmxkVmlld1Byb2plY3Rpb24iOworICAgIC8qKiBDYW1l
cmFQb3NpdGlvbiAqLworICAgIE5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc1tOb2RlTWF0ZXJpYWxT
eXN0ZW1WYWx1ZXNbIkNhbWVyYVBvc2l0aW9uIl0gPSA3XSA9ICJDYW1lcmFQb3NpdGlvbiI7Cisg
ICAgLyoqIEZvZyBDb2xvciAqLworICAgIE5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc1tOb2RlTWF0
ZXJpYWxTeXN0ZW1WYWx1ZXNbIkZvZ0NvbG9yIl0gPSA4XSA9ICJGb2dDb2xvciI7Cit9KShOb2Rl
TWF0ZXJpYWxTeXN0ZW1WYWx1ZXMgfHwgKE5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyA9IHt9KSk7
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9QQlIvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Q
QlIvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogUEJSTWF0ZXJpYWxEZWZpbmVzLCBQQlJCYXNlTWF0ZXJpYWws
IFBCUkJhc2VTaW1wbGVNYXRlcmlhbCwgUEJSTWF0ZXJpYWwsIFBCUk1ldGFsbGljUm91Z2huZXNz
TWF0ZXJpYWwsIFBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGJyQmFzZU1hdGVyaWFsX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BickJhc2VNYXRl
cmlhbCAqLyAiLi9NYXRlcmlhbHMvUEJSL3BickJhc2VNYXRlcmlhbC50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQQlJNYXRlcmlhbERlZmluZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYnJCYXNl
TWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUEJSTWF0ZXJpYWxEZWZpbmVz
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUkJhc2VNYXRlcmlhbCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX3BickJhc2VNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQ
QlJCYXNlTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGJyQmFz
ZVNpbXBsZU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL3BickJhc2VTaW1wbGVNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvUEJS
L3BickJhc2VTaW1wbGVNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQQlJCYXNlU2lt
cGxlTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYnJCYXNlU2ltcGxlTWF0ZXJpYWxf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUEJSQmFzZVNpbXBsZU1hdGVyaWFsIl07IH0p
OworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bick1hdGVyaWFsX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bick1hdGVyaWFsICov
ICIuL01hdGVyaWFscy9QQlIvcGJyTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUEJS
TWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYnJNYXRlcmlhbF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJQQlJNYXRlcmlhbCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9wYnJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bick1ldGFsbGljUm91Z2huZXNz
TWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL1BCUi9wYnJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFs
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9wYnJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwiXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGJyU3BlY3VsYXJHbG9zc2luZXNzTWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vcGJyU3BlY3VsYXJHbG9zc2luZXNzTWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL1BCUi9wYnJT
cGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQQlJTcGVj
dWxhckdsb3NzaW5lc3NNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BiclNwZWN1bGFy
R2xvc3NpbmVzc01hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBCUlNwZWN1
bGFyR2xvc3NpbmVzc01hdGVyaWFsIl07IH0pOworCisKKworCisKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NYXRlcmlhbHMvUEJSL3BickFuaXNvdHJvcGljQ29uZmlndXJhdGlvbi50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9QQlIvcGJyQW5pc290cm9waWNDb25maWd1cmF0aW9u
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3Vy
YXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUEJSQW5pc290cm9w
aWNDb25maWd1cmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQQlJBbmlzb3Ryb3BpY0NvbmZp
Z3VyYXRpb247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29y
YXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWVzaGVzL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9N
YXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlh
bHNfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL21hdGVyaWFsRmxhZ3MgKi8gIi4vTWF0ZXJp
YWxzL21hdGVyaWFsRmxhZ3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJp
YWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIgKi8gIi4vTWF0
ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisKKworCisKKworCisvKioKKyAqIERlZmluZSB0
aGUgY29kZSByZWxhdGVkIHRvIHRoZSBhbmlzb3Ryb3BpYyBwYXJhbWV0ZXJzIG9mIHRoZSBwYnIg
bWF0ZXJpYWwuCisgKi8KK3ZhciBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24gPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGUgYSBuZXcg
aXN0YW5jZSBvZiBhbmlzb3Ryb3B5IGNvbmZpZ3VyYXRpb24uCisgICAgICogQHBhcmFtIG1hcmtB
bGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkgQ2FsbGJhY2sgdG8gZmxhZyB0aGUgbWF0ZXJpYWwg
dG8gZGlydHkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRp
b24obWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSkgeworICAgICAgICB0aGlzLl9pc0Vu
YWJsZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaWYgdGhlIGFu
aXNvdHJvcHkgaXMgZW5hYmxlZCBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmlzRW5hYmxlZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5l
cyB0aGUgYW5pc290cm9weSBzdHJlbmd0aCAoYmV0d2VlbiAwIGFuZCAxKSBpdCBkZWZhdWx0cyB0
byAxLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pbnRlbnNpdHkgPSAxOworICAgICAgICAv
KioKKyAgICAgICAgICogRGVmaW5lcyBpZiB0aGUgZWZmZWN0IGlzIGFsb25nIHRoZSB0YW5nZW50
cywgYml0YW5nZW50cyBvciBpbiBiZXR3ZWVuLgorICAgICAgICAgKiBCeSBkZWZhdWx0LCB0aGUg
ZWZmZWN0IGlzICJzdHJlY3RjaGluZyIgdGhlIGhpZ2hsaWdodHMgYWxvbmcgdGhlIHRhbmdlbnRz
LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjIiXSgxLCAwKTsKKyAg
ICAgICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTdG9y
ZXMgdGhlIGFuaXNvdHJvcHkgdmFsdWVzIGluIGEgdGV4dHVyZS4KKyAgICAgICAgICogcmcgaXMg
ZGlyZWN0aW9uIChsaWtlIG5vcm1hbCBmcm9tIC0xIHRvIDEpCisgICAgICAgICAqIGIgaXMgYSBp
bnRlbnNpdHkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudGV4dHVyZSA9IG51bGw7CisgICAg
ICAgIHRoaXMuX2ludGVybmFsTWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSA9IG1hcmtB
bGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHk7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisg
ICAgUEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uLnByb3RvdHlwZS5fbWFya0FsbFN1Yk1lc2hl
c0FzVGV4dHVyZXNEaXJ0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxN
YXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTcGVjaWZpZXMgdGhhdCB0aGUgc3VibWVzaCBpcyByZWFkeSB0byBiZSB1c2VkLgorICAgICAq
IEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0IG9mICJkZWZpbmVzIiB0byB1cGRhdGUuCisgICAgICog
QHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIHNjZW5lIHRoZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgor
ICAgICAqIEByZXR1cm5zIC0gYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhlIHN1Ym1lc2ggaXMg
cmVhZHkgb3Igbm90LgorICAgICAqLworICAgIFBCUkFuaXNvdHJvcGljQ29uZmlndXJhdGlvbi5w
cm90b3R5cGUuaXNSZWFkeUZvclN1Yk1lc2ggPSBmdW5jdGlvbiAoZGVmaW5lcywgc2NlbmUpIHsK
KyAgICAgICAgaWYgKGRlZmluZXMuX2FyZVRleHR1cmVzRGlydHkpIHsKKyAgICAgICAgICAgIGlm
IChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGV4
dHVyZSAmJiBfTWF0ZXJpYWxzX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siTWF0ZXJpYWxGbGFncyJdLkFuaXNvdHJvcGljVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyB0byBzZWUg
aWYgYSB0ZXh0dXJlIGlzIHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBkZWZp
bmVzIHRoZSBsaXN0IG9mICJkZWZpbmVzIiB0byB1cGRhdGUuCisgICAgICogQHBhcmFtIG1lc2gg
dGhlIG1lc2ggd2UgYXJlIHByZXBhcmluZyB0aGUgZGVmaW5lcyBmb3IuCisgICAgICogQHBhcmFt
IHNjZW5lIGRlZmluZXMgdGhlIHNjZW5lIHRoZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgorICAgICAq
LworICAgIFBCUkFuaXNvdHJvcGljQ29uZmlndXJhdGlvbi5wcm90b3R5cGUucHJlcGFyZURlZmlu
ZXMgPSBmdW5jdGlvbiAoZGVmaW5lcywgbWVzaCwgc2NlbmUpIHsKKyAgICAgICAgaWYgKHRoaXMu
X2lzRW5hYmxlZCkgeworICAgICAgICAgICAgZGVmaW5lcy5BTklTT1RST1BJQyA9IHRoaXMuX2lz
RW5hYmxlZDsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc0VuYWJsZWQgJiYgIW1lc2guaXNWZXJ0
aWNlc0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlcnRleEJ1ZmZlciJdLlRhbmdlbnRLaW5kKSkgeworICAgICAgICAgICAgICAgIGRlZmlu
ZXMuX25lZWRVVnMgPSB0cnVlOworICAgICAgICAgICAgICAgIGRlZmluZXMuTUFJTlVWMSA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVmaW5lcy5fYXJlVGV4dHVyZXNE
aXJ0eSkgeworICAgICAgICAgICAgICAgIGlmIChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgJiYgX01hdGVyaWFsc19tYXRlcmlh
bEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdGVyaWFsRmxhZ3MiXS5Bbmlz
b3Ryb3BpY1RleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0ZXJp
YWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1hdGVyaWFs
SGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JNZXJnZWRVVih0aGlzLl90ZXh0dXJlLCBkZWZpbmVz
LCAiQU5JU09UUk9QSUNfVEVYVFVSRSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5BTklT
T1RST1BJQ19URVhUVVJFID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBkZWZpbmVzLkFOSVNPVFJPUElDID0gZmFsc2U7CisgICAgICAgICAgICBkZWZpbmVz
LkFOSVNPVFJPUElDX1RFWFRVUkUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogQmluZHMgdGhlIG1hdGVyaWFsIGRhdGEuCisgICAgICogQHBhcmFtIHVuaWZvcm1C
dWZmZXIgZGVmaW5lcyB0aGUgVW5pZm9ybSBidWZmZXIgdG8gZmlsbCBpbi4KKyAgICAgKiBAcGFy
YW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgdGhlIG1hdGVyaWFsIGJlbG9uZ3MgdG8uCisgICAg
ICogQHBhcmFtIGlzRnJvemVuIGRlZmluZXMgd2V0aGVyIHRoZSBtYXRlcmlhbCBpcyBmcm96ZW4g
b3Igbm90LgorICAgICAqLworICAgIFBCUkFuaXNvdHJvcGljQ29uZmlndXJhdGlvbi5wcm90b3R5
cGUuYmluZEZvclN1Yk1lc2ggPSBmdW5jdGlvbiAodW5pZm9ybUJ1ZmZlciwgc2NlbmUsIGlzRnJv
emVuKSB7CisgICAgICAgIGlmICghdW5pZm9ybUJ1ZmZlci51c2VVYm8gfHwgIWlzRnJvemVuIHx8
ICF1bmlmb3JtQnVmZmVyLmlzU3luYykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUg
JiYgX01hdGVyaWFsc19tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
Ik1hdGVyaWFsRmxhZ3MiXS5Bbmlzb3Ryb3BpY1RleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAg
ICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIoInZBbmlzb3Ryb3B5SW5mb3MiLCB0aGlz
Ll90ZXh0dXJlLmNvb3JkaW5hdGVzSW5kZXgsIHRoaXMuX3RleHR1cmUubGV2ZWwpOworICAgICAg
ICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kVGV4dHVyZU1hdHJpeCh0aGlzLl90ZXh0dXJl
LCB1bmlmb3JtQnVmZmVyLCAiYW5pc290cm9weSIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gQW5pc290cm9weQorICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDMo
InZBbmlzb3Ryb3B5IiwgdGhpcy5kaXJlY3Rpb24ueCwgdGhpcy5kaXJlY3Rpb24ueSwgdGhpcy5p
bnRlbnNpdHkpOworICAgICAgICB9CisgICAgICAgIC8vIFRleHR1cmVzCisgICAgICAgIGlmIChz
Y2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlICYm
IF9NYXRlcmlhbHNfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJN
YXRlcmlhbEZsYWdzIl0uQW5pc290cm9waWNUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAg
ICAgIHVuaWZvcm1CdWZmZXIuc2V0VGV4dHVyZSgiYW5pc290cm9weVNhbXBsZXIiLCB0aGlzLl90
ZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogQ2hlY2tzIHRvIHNlZSBpZiBhIHRleHR1cmUgaXMgdXNlZCBpbiB0aGUgbWF0ZXJpYWwuCisg
ICAgICogQHBhcmFtIHRleHR1cmUgLSBCYXNlIHRleHR1cmUgdG8gdXNlLgorICAgICAqIEByZXR1
cm5zIC0gQm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGEgdGV4dHVyZSBpcyB1c2VkIGluIHRoZSBtYXRl
cmlhbC4KKyAgICAgKi8KKyAgICBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24ucHJvdG90eXBl
Lmhhc1RleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgICAgICBpZiAodGhpcy5fdGV4
dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBh
biBhcnJheSBvZiB0aGUgYWN0aXZlbHkgdXNlZCB0ZXh0dXJlcy4KKyAgICAgKiBAcGFyYW0gYWN0
aXZlVGV4dHVyZXMgQXJyYXkgb2YgQmFzZVRleHR1cmVzCisgICAgICovCisgICAgUEJSQW5pc290
cm9waWNDb25maWd1cmF0aW9uLnByb3RvdHlwZS5nZXRBY3RpdmVUZXh0dXJlcyA9IGZ1bmN0aW9u
IChhY3RpdmVUZXh0dXJlcykgeworICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAg
ICAgICAgYWN0aXZlVGV4dHVyZXMucHVzaCh0aGlzLl90ZXh0dXJlKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAg
ICAgKiBAcGFyYW0gYW5pbWF0YWJsZXMgQXJyYXkgb2YgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAg
ICAgKi8KKyAgICBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldEFuaW1h
dGFibGVzID0gZnVuY3Rpb24gKGFuaW1hdGFibGVzKSB7CisgICAgICAgIGlmICh0aGlzLl90ZXh0
dXJlICYmIHRoaXMuX3RleHR1cmUuYW5pbWF0aW9ucyAmJiB0aGlzLl90ZXh0dXJlLmFuaW1hdGlv
bnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgYW5pbWF0YWJsZXMucHVzaCh0aGlzLl90ZXh0
dXJlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhlIHJl
c291cmNlcyBvZiB0aGUgbWF0ZXJpYWwuCisgICAgICogQHBhcmFtIGZvcmNlRGlzcG9zZVRleHR1
cmVzIC0gRm9yY2VzIHRoZSBkaXNwb3NhbCBvZiBhbGwgdGV4dHVyZXMuCisgICAgICovCisgICAg
UEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24g
KGZvcmNlRGlzcG9zZVRleHR1cmVzKSB7CisgICAgICAgIGlmIChmb3JjZURpc3Bvc2VUZXh0dXJl
cykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl90ZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgKiBHZXQgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZSBvZiB0aGUgdGV4dHVy
ZSB1c2VmdWwgZm9yIHNlcmlhbGl6YXRpb24gb3IgZHluYW1pYyBjb2RpbmcuCisgICAgKiBAcmV0
dXJucyAiUEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uIgorICAgICovCisgICAgUEJSQW5pc290
cm9waWNDb25maWd1cmF0aW9uLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiAiUEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uIjsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIEFkZCBmYWxsYmFja3MgdG8gdGhlIGVmZmVjdCBmYWxsYmFja3MgbGlz
dC4KKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBCYXNlIHRleHR1cmUgdG8gdXNl
LgorICAgICAqIEBwYXJhbSBmYWxsYmFja3MgZGVmaW5lcyB0aGUgY3VycmVudCBmYWxsYmFjayBs
aXN0LgorICAgICAqIEBwYXJhbSBjdXJyZW50UmFuayBkZWZpbmVzIHRoZSBjdXJyZW50IGZhbGxi
YWNrIHJhbmsuCisgICAgICogQHJldHVybnMgdGhlIG5ldyBmYWxsYmFjayByYW5rLgorICAgICAq
LworICAgIFBCUkFuaXNvdHJvcGljQ29uZmlndXJhdGlvbi5BZGRGYWxsYmFja3MgPSBmdW5jdGlv
biAoZGVmaW5lcywgZmFsbGJhY2tzLCBjdXJyZW50UmFuaykgeworICAgICAgICBpZiAoZGVmaW5l
cy5BTklTT1RST1BJQykgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGN1cnJl
bnRSYW5rKyssICJBTklTT1RST1BJQyIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjdXJy
ZW50UmFuazsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCB0aGUgcmVxdWlyZWQgdW5pZm9y
bXMgdG8gdGhlIGN1cnJlbnQgbGlzdC4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybXMgZGVmaW5lcyB0
aGUgY3VycmVudCB1bmlmb3JtIGxpc3QuCisgICAgICovCisgICAgUEJSQW5pc290cm9waWNDb25m
aWd1cmF0aW9uLkFkZFVuaWZvcm1zID0gZnVuY3Rpb24gKHVuaWZvcm1zKSB7CisgICAgICAgIHVu
aWZvcm1zLnB1c2goInZBbmlzb3Ryb3B5IiwgInZBbmlzb3Ryb3B5SW5mb3MiLCAiYW5pc290cm9w
eU1hdHJpeCIpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkIHRoZSByZXF1aXJlZCB1bmlm
b3JtcyB0byB0aGUgY3VycmVudCBidWZmZXIuCisgICAgICogQHBhcmFtIHVuaWZvcm1CdWZmZXIg
ZGVmaW5lcyB0aGUgY3VycmVudCB1bmlmb3JtIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBQQlJBbmlz
b3Ryb3BpY0NvbmZpZ3VyYXRpb24uUHJlcGFyZVVuaWZvcm1CdWZmZXIgPSBmdW5jdGlvbiAodW5p
Zm9ybUJ1ZmZlcikgeworICAgICAgICB1bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZBbmlzb3Ry
b3B5IiwgMyk7CisgICAgICAgIHVuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidkFuaXNvdHJvcHlJ
bmZvcyIsIDIpOworICAgICAgICB1bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oImFuaXNvdHJvcHlN
YXRyaXgiLCAxNik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgdGhlIHJlcXVpcmVkIHNh
bXBsZXJzIHRvIHRoZSBjdXJyZW50IGxpc3QuCisgICAgICogQHBhcmFtIHNhbXBsZXJzIGRlZmlu
ZXMgdGhlIGN1cnJlbnQgc2FtcGxlciBsaXN0LgorICAgICAqLworICAgIFBCUkFuaXNvdHJvcGlj
Q29uZmlndXJhdGlvbi5BZGRTYW1wbGVycyA9IGZ1bmN0aW9uIChzYW1wbGVycykgeworICAgICAg
ICBzYW1wbGVycy5wdXNoKCJhbmlzb3Ryb3B5U2FtcGxlciIpOworICAgIH07CisgICAgLyoqCisg
ICAgICogTWFrZXMgYSBkdXBsaWNhdGUgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpbnRv
IGFub3RoZXIgb25lLgorICAgICAqIEBwYXJhbSBhbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24gZGVm
aW5lIHRoZSBjb25maWcgd2hlcmUgdG8gY29weSB0aGUgaW5mbworICAgICAqLworICAgIFBCUkFu
aXNvdHJvcGljQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuY29weVRvID0gZnVuY3Rpb24gKGFuaXNv
dHJvcGljQ29uZmlndXJhdGlvbikgeworICAgICAgICBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5DbG9uZShmdW5jdGlv
biAoKSB7IHJldHVybiBhbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb247IH0sIHRoaXMpOworICAgIH07
CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGlzIGFuaXNvdHJvcHkgY29uZmlndXJhdGlv
bi4KKyAgICAgKiBAcmV0dXJucyAtIEFuIG9iamVjdCB3aXRoIHRoZSBzZXJpYWxpemVkIGNvbmZp
Zy4KKyAgICAgKi8KKyAgICBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnNl
cmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlNlcmlh
bGl6ZSh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlcyBhIGFuaXNvdHJvcHkg
Q29uZmlndXJhdGlvbiBmcm9tIGEgc2VyaWFsaXplZCBvYmplY3QuCisgICAgICogQHBhcmFtIHNv
dXJjZSAtIFNlcmlhbGl6ZWQgb2JqZWN0LgorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRo
ZSBzY2VuZSB3ZSBhcmUgcGFyc2luZyBmb3IKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBEZWZpbmVz
IHRoZSByb290VXJsIHRvIGxvYWQgZnJvbQorICAgICAqLworICAgIFBCUkFuaXNvdHJvcGljQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoc291cmNlLCBzY2VuZSwgcm9v
dFVybCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5Q
YXJzZShmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpczsgfSwgc291cmNlLCBzY2VuZSwgcm9vdFVy
bCk7CisgICAgfTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJd
KSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUkFuaXNvdHJv
cGljQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJpc0VuYWJsZWQiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgUEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uLnByb3RvdHlw
ZSwgImludGVuc2l0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNWZWN0b3IyIl0pKCkKKyAg
ICBdLCBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiZGlyZWN0aW9uIiwg
dm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29y
YXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9w
ZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUkFu
aXNvdHJvcGljQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ0ZXh0dXJlIiwgdm9pZCAwKTsKKyAg
ICByZXR1cm4gUEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvUEJSL3BickJSREZDb25maWd1cmF0aW9uLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9NYXRlcmlhbHMvUEJSL3BickJSREZDb25maWd1cmF0aW9uLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFBCUkJSREZDb25maWd1cmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBCUkJSREZDb25maWd1cmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBQQlJCUkRGQ29uZmlndXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0b3JzICov
ICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworCisKKy8qKgorICogRGVmaW5lIHRoZSBjb2RlIHJl
bGF0ZWQgdG8gdGhlIEJSREYgcGFyYW1ldGVycyBvZiB0aGUgcGJyIG1hdGVyaWFsLgorICovCit2
YXIgUEJSQlJERkNvbmZpZ3VyYXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgLyoqCisgICAgICogSW5zdGFudGlhdGUgYSBuZXcgaXN0YW5jZSBvZiBjbGVhciBjb2F0IGNv
bmZpZ3VyYXRpb24uCisgICAgICogQHBhcmFtIG1hcmtBbGxTdWJNZXNoZXNBc01pc2NEaXJ0eSBD
YWxsYmFjayB0byBmbGFnIHRoZSBtYXRlcmlhbCB0byBkaXJ0eQorICAgICAqLworICAgIGZ1bmN0
aW9uIFBCUkJSREZDb25maWd1cmF0aW9uKG1hcmtBbGxTdWJNZXNoZXNBc01pc2NEaXJ0eSkgewor
ICAgICAgICB0aGlzLl91c2VFbmVyZ3lDb25zZXJ2YXRpb24gPSBQQlJCUkRGQ29uZmlndXJhdGlv
bi5ERUZBVUxUX1VTRV9FTkVSR1lfQ09OU0VSVkFUSU9OOworICAgICAgICAvKioKKyAgICAgICAg
ICogRGVmaW5lcyBpZiB0aGUgbWF0ZXJpYWwgdXNlcyBlbmVyZ3kgY29uc2VydmF0aW9uLgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy51c2VFbmVyZ3lDb25zZXJ2YXRpb24gPSBQQlJCUkRGQ29u
ZmlndXJhdGlvbi5ERUZBVUxUX1VTRV9FTkVSR1lfQ09OU0VSVkFUSU9OOworICAgICAgICB0aGlz
Ll91c2VTbWl0aFZpc2liaWxpdHlIZWlnaHRDb3JyZWxhdGVkID0gUEJSQlJERkNvbmZpZ3VyYXRp
b24uREVGQVVMVF9VU0VfU01JVEhfVklTSUJJTElUWV9IRUlHSFRfQ09SUkVMQVRFRDsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIExFR0FDWSBNb2RlIHNldCB0byBmYWxzZQorICAgICAgICAgKiBE
ZWZpbmVzIGlmIHRoZSBtYXRlcmlhbCB1c2VzIGhlaWdodCBzbWl0aCBjb3JyZWxhdGVkIHZpc2li
aWxpdHkgdGVybS4KKyAgICAgICAgICogSWYgeW91IGludGVudCB0byBub3QgdXNlIG91ciBkZWZh
dWx0IEJSREYsIHlvdSBuZWVkIHRvIGxvYWQgYSBzZXBhcmF0ZSBCUkRGIFRleHR1cmUgZm9yIHRo
ZSBQQlIKKyAgICAgICAgICogWW91IGNhbiBlaXRoZXIgbG9hZCBodHRwczovL2Fzc2V0cy5iYWJ5
bG9uanMuY29tL2Vudmlyb25tZW50cy91bmNvcnJlbGF0ZWRCUkRGLnBuZworICAgICAgICAgKiBv
ciBodHRwczovL2Fzc2V0cy5iYWJ5bG9uanMuY29tL2Vudmlyb25tZW50cy91bmNvcnJlbGF0ZWRC
UkRGLmRkcyB0byBoYXZlIG1vcmUgcHJlY2lzaW9uCisgICAgICAgICAqIE5vdCByZWx5aW5nIG9u
IGhlaWdodCBjb3JyZWxhdGVkIHdpbGwgYWxzbyBkaXNhYmxlIGVuZXJneSBjb25zZXJ2YXRpb24u
CisgICAgICAgICAqLworICAgICAgICB0aGlzLnVzZVNtaXRoVmlzaWJpbGl0eUhlaWdodENvcnJl
bGF0ZWQgPSBQQlJCUkRGQ29uZmlndXJhdGlvbi5ERUZBVUxUX1VTRV9TTUlUSF9WSVNJQklMSVRZ
X0hFSUdIVF9DT1JSRUxBVEVEOworICAgICAgICB0aGlzLl91c2VTcGhlcmljYWxIYXJtb25pY3Mg
PSBQQlJCUkRGQ29uZmlndXJhdGlvbi5ERUZBVUxUX1VTRV9TUEhFUklDQUxfSEFSTU9OSUNTOwor
ICAgICAgICAvKioKKyAgICAgICAgICogTEVHQUNZIE1vZGUgc2V0IHRvIGZhbHNlCisgICAgICAg
ICAqIERlZmluZXMgaWYgdGhlIG1hdGVyaWFsIHVzZXMgc3BoZXJpY2FsIGhhcm1vbmljcyB2cyBz
cGhlcmljYWwgcG9seW5vbWlhbHMgZm9yIHRoZQorICAgICAgICAgKiBkaWZmdXNlIHBhcnQgb2Yg
dGhlIElCTC4KKyAgICAgICAgICogVGhlIGhhcm1vbmljcyBkZXNwaXRlIGEgdGlueSBiaWdnZXIg
Y29zdCBoYXMgYmVlbiBwcm92ZW4gdG8gcHJvdmlkZSBjbG9zZXIgcmVzdWx0cworICAgICAgICAg
KiB0byB0aGUgZ3JvdW5kIHRydXRoLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy51c2VTcGhl
cmljYWxIYXJtb25pY3MgPSBQQlJCUkRGQ29uZmlndXJhdGlvbi5ERUZBVUxUX1VTRV9TUEhFUklD
QUxfSEFSTU9OSUNTOworICAgICAgICB0aGlzLl9pbnRlcm5hbE1hcmtBbGxTdWJNZXNoZXNBc01p
c2NEaXJ0eSA9IG1hcmtBbGxTdWJNZXNoZXNBc01pc2NEaXJ0eTsKKyAgICB9CisgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICBQQlJCUkRGQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuX21hcmtBbGxTdWJN
ZXNoZXNBc01pc2NEaXJ0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxN
YXJrQWxsU3ViTWVzaGVzQXNNaXNjRGlydHkoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENo
ZWNrcyB0byBzZWUgaWYgYSB0ZXh0dXJlIGlzIHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAgICAq
IEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0IG9mICJkZWZpbmVzIiB0byB1cGRhdGUuCisgICAgICov
CisgICAgUEJSQlJERkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnByZXBhcmVEZWZpbmVzID0gZnVu
Y3Rpb24gKGRlZmluZXMpIHsKKyAgICAgICAgZGVmaW5lcy5CUkRGX1ZfSEVJR0hUX0NPUlJFTEFU
RUQgPSB0aGlzLl91c2VTbWl0aFZpc2liaWxpdHlIZWlnaHRDb3JyZWxhdGVkOworICAgICAgICBk
ZWZpbmVzLk1TX0JSREZfRU5FUkdZX0NPTlNFUlZBVElPTiA9IHRoaXMuX3VzZUVuZXJneUNvbnNl
cnZhdGlvbiAmJiB0aGlzLl91c2VTbWl0aFZpc2liaWxpdHlIZWlnaHRDb3JyZWxhdGVkOworICAg
ICAgICBkZWZpbmVzLlNQSEVSSUNBTF9IQVJNT05JQ1MgPSB0aGlzLl91c2VTcGhlcmljYWxIYXJt
b25pY3M7CisgICAgfTsKKyAgICAvKioKKyAgICAqIEdldCB0aGUgY3VycmVudCBjbGFzcyBuYW1l
IG9mIHRoZSB0ZXh0dXJlIHVzZWZ1bCBmb3Igc2VyaWFsaXphdGlvbiBvciBkeW5hbWljIGNvZGlu
Zy4KKyAgICAqIEByZXR1cm5zICJQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uIgorICAgICovCisg
ICAgUEJSQlJERkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuICJQQlJCUkRGQ29uZmlndXJhdGlvbiI7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBNYWtlcyBhIGR1cGxpY2F0ZSBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0
aW9uIGludG8gYW5vdGhlciBvbmUuCisgICAgICogQHBhcmFtIGJyZGZDb25maWd1cmF0aW9uIGRl
ZmluZSB0aGUgY29uZmlnIHdoZXJlIHRvIGNvcHkgdGhlIGluZm8KKyAgICAgKi8KKyAgICBQQlJC
UkRGQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuY29weVRvID0gZnVuY3Rpb24gKGJyZGZDb25maWd1
cmF0aW9uKSB7CisgICAgICAgIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkNsb25lKGZ1bmN0aW9uICgpIHsgcmV0dXJu
IGJyZGZDb25maWd1cmF0aW9uOyB9LCB0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
cmlhbGl6ZXMgdGhpcyBCUkRGIGNvbmZpZ3VyYXRpb24uCisgICAgICogQHJldHVybnMgLSBBbiBv
YmplY3Qgd2l0aCB0aGUgc2VyaWFsaXplZCBjb25maWcuCisgICAgICovCisgICAgUEJSQlJERkNv
bmZpZ3VyYXRpb24ucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2Vy
aWFsaXphdGlvbkhlbHBlciJdLlNlcmlhbGl6ZSh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFBhcnNlcyBhIGFuaXNvdHJvcHkgQ29uZmlndXJhdGlvbiBmcm9tIGEgc2VyaWFsaXplZCBv
YmplY3QuCisgICAgICogQHBhcmFtIHNvdXJjZSAtIFNlcmlhbGl6ZWQgb2JqZWN0LgorICAgICAq
IEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB3ZSBhcmUgcGFyc2luZyBmb3IKKyAgICAg
KiBAcGFyYW0gcm9vdFVybCBEZWZpbmVzIHRoZSByb290VXJsIHRvIGxvYWQgZnJvbQorICAgICAq
LworICAgIFBCUkJSREZDb25maWd1cmF0aW9uLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChz
b3VyY2UsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFs
aXphdGlvbkhlbHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzOyB9LCBzb3Vy
Y2UsIHNjZW5lLCByb290VXJsKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmF1bHQgdmFs
dWUgdXNlZCBmb3IgdGhlIGVuZXJneSBjb25zZXJ2YXRpb24uCisgICAgICogVGhpcyBzaG91bGQg
b25seSBiZSBjaGFuZ2VkIHRvIGFkYXB0IHRvIHRoZSB0eXBlIG9mIHRleHR1cmUgaW4gc2NlbmUu
ZW52aXJvbm1lbnRCUkRGVGV4dHVyZS4KKyAgICAgKi8KKyAgICBQQlJCUkRGQ29uZmlndXJhdGlv
bi5ERUZBVUxUX1VTRV9FTkVSR1lfQ09OU0VSVkFUSU9OID0gdHJ1ZTsKKyAgICAvKioKKyAgICAg
KiBEZWZhdWx0IHZhbHVlIHVzZWQgZm9yIHRoZSBTbWl0aCBWaXNpYmlsaXR5IEhlaWdodCBDb3Jy
ZWxhdGVkIG1vZGUuCisgICAgICogVGhpcyBzaG91bGQgb25seSBiZSBjaGFuZ2VkIHRvIGFkYXB0
IHRvIHRoZSB0eXBlIG9mIHRleHR1cmUgaW4gc2NlbmUuZW52aXJvbm1lbnRCUkRGVGV4dHVyZS4K
KyAgICAgKi8KKyAgICBQQlJCUkRGQ29uZmlndXJhdGlvbi5ERUZBVUxUX1VTRV9TTUlUSF9WSVNJ
QklMSVRZX0hFSUdIVF9DT1JSRUxBVEVEID0gdHJ1ZTsKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0
IHZhbHVlIHVzZWQgZm9yIHRoZSBJQkwgZGlmZnVzZSBwYXJ0LgorICAgICAqIFRoaXMgY2FuIGhl
bHAgc3dpdGNoaW5nIGJhY2sgdG8gdGhlIHBvbHlub21pYWxzIG1vZGUgZ2xvYmFsbHkgd2hpY2gg
aXMgYSB0aW55IGJpdAorICAgICAqIGxlc3MgR1BVIGludGVuc2l2ZSBhdCB0aGUgZHJhd2JhY2sg
b2YgYSBsb3dlciBxdWFsaXR5LgorICAgICAqLworICAgIFBCUkJSREZDb25maWd1cmF0aW9uLkRF
RkFVTFRfVVNFX1NQSEVSSUNBTF9IQVJNT05JQ1MgPSB0cnVlOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgp
LAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzTWlzY0RpcnR5
IikKKyAgICBdLCBQQlJCUkRGQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ1c2VFbmVyZ3lDb25z
ZXJ2YXRpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1By
b3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzTWlzY0RpcnR5IikKKyAgICBdLCBQQlJCUkRG
Q29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ1c2VTbWl0aFZpc2liaWxpdHlIZWlnaHRDb3JyZWxh
dGVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0
eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc01pc2NEaXJ0eSIpCisgICAgXSwgUEJSQlJERkNvbmZp
Z3VyYXRpb24ucHJvdG90eXBlLCAidXNlU3BoZXJpY2FsSGFybW9uaWNzIiwgdm9pZCAwKTsKKyAg
ICByZXR1cm4gUEJSQlJERkNvbmZpZ3VyYXRpb247Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL01hdGVyaWFscy9QQlIvcGJyQmFzZU1hdGVyaWFsLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxz
L1BCUi9wYnJCYXNlTWF0ZXJpYWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBCUk1hdGVyaWFsRGVm
aW5lcywgUEJSQmFzZU1hdGVyaWFsICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBCUk1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUEJSTWF0ZXJpYWxE
ZWZpbmVzOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUkJhc2VNYXRlcmlhbCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gUEJSQmFzZU1hdGVyaWFsOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2RlY29yYXRv
cnMgKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvc21hcnRBcnJh
eSAqLyAiLi9NaXNjL3NtYXJ0QXJyYXkudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWlzY19icmRmVGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2JyZGZUZXh0dXJlVG9vbHMgKi8gIi4vTWlz
Yy9icmRmVGV4dHVyZVRvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52
ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWVzaGVzL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3BickNsZWFyQ29hdENvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGJyQ2xlYXJDb2F0Q29uZmlndXJh
dGlvbiAqLyAiLi9NYXRlcmlhbHMvUEJSL3BickNsZWFyQ29hdENvbmZpZ3VyYXRpb24udHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGJyQW5pc290cm9waWNDb25maWd1cmF0aW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bi
ckFuaXNvdHJvcGljQ29uZmlndXJhdGlvbiAqLyAiLi9NYXRlcmlhbHMvUEJSL3BickFuaXNvdHJv
cGljQ29uZmlndXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYnJCUkRG
Q29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vcGJyQlJERkNvbmZpZ3VyYXRpb24gKi8gIi4vTWF0ZXJpYWxzL1BCUi9w
YnJCUkRGQ29uZmlndXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYnJT
aGVlbkNvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL3BiclNoZWVuQ29uZmlndXJhdGlvbiAqLyAiLi9NYXRlcmlhbHMv
UEJSL3BiclNoZWVuQ29uZmlndXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9wYnJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGJyU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24g
Ki8gIi4vTWF0ZXJpYWxzL1BCUi9wYnJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5j
b2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxz
L2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gKi8gIi4vTWF0ZXJpYWxzL2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJp
YWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxEZWZpbmVz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTWF0ZXJpYWxzL21hdGVyaWFsRGVmaW5lcyAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWxE
ZWZpbmVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19wdXNoTWF0
ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NYXRlcmlhbHMvcHVzaE1hdGVyaWFsICovICIuL01hdGVyaWFscy9wdXNoTWF0
ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFs
SGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyICovICIuL01hdGVyaWFscy9tYXRl
cmlhbEhlbHBlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVy
aWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21h
dGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9tYXRlcmlhbEZsYWdzICovICIuL01hdGVyaWFscy9tYXRlcmlhbEZsYWdz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
RW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19wYnJfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9TaGFkZXJzL3Bici5m
cmFnbWVudCAqLyAiLi9TaGFkZXJzL3Bici5mcmFnbWVudC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9TaGFkZXJzX3Bicl92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIz
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9TaGFkZXJzL3Bici52ZXJ0ZXggKi8g
Ii4vU2hhZGVycy9wYnIudmVydGV4LnRzIik7CisKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisKKworCisvKioKKyAqIE1hbmFnZXMgdGhlIGRlZmluZXMgZm9yIHRoZSBQ
QlIgTWF0ZXJpYWwuCisgKiBAaGlkZGVuCisgKi8KK3ZhciBQQlJNYXRlcmlhbERlZmluZXMgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUEJSTWF0ZXJpYWxEZWZpbmVzLCBfc3VwZXIp
OworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBQQlIgTWF0ZXJpYWwgZGVmaW5lcy4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBQQlJNYXRlcmlhbERlZmluZXMoKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLlBCUiA9
IHRydWU7CisgICAgICAgIF90aGlzLk1BSU5VVjEgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuTUFJ
TlVWMiA9IGZhbHNlOworICAgICAgICBfdGhpcy5VVjEgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMu
VVYyID0gZmFsc2U7CisgICAgICAgIF90aGlzLkFMQkVETyA9IGZhbHNlOworICAgICAgICBfdGhp
cy5BTEJFRE9ESVJFQ1RVViA9IDA7CisgICAgICAgIF90aGlzLlZFUlRFWENPTE9SID0gZmFsc2U7
CisgICAgICAgIF90aGlzLkFNQklFTlQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQU1CSUVOVERJ
UkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuQU1CSUVOVElOR1JBWVNDQUxFID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLk9QQUNJVFkgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVkVSVEVYQUxQSEEg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuT1BBQ0lUWURJUkVDVFVWID0gMDsKKyAgICAgICAgX3Ro
aXMuT1BBQ0lUWVJHQiA9IGZhbHNlOworICAgICAgICBfdGhpcy5BTFBIQVRFU1QgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuREVQVEhQUkVQQVNTID0gZmFsc2U7CisgICAgICAgIF90aGlzLkFMUEhB
QkxFTkQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQUxQSEFGUk9NQUxCRURPID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLkFMUEhBVEVTVFZBTFVFID0gIjAuNSI7CisgICAgICAgIF90aGlzLlNQRUNV
TEFST1ZFUkFMUEhBID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJBRElBTkNFT1ZFUkFMUEhBID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLkFMUEhBRlJFU05FTCA9IGZhbHNlOworICAgICAgICBfdGhp
cy5MSU5FQVJBTFBIQUZSRVNORUwgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUFJFTVVMVElQTFlB
TFBIQSA9IGZhbHNlOworICAgICAgICBfdGhpcy5FTUlTU0lWRSA9IGZhbHNlOworICAgICAgICBf
dGhpcy5FTUlTU0lWRURJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElWSVRZID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJVklUWURJUkVDVFVWID0gMDsKKyAgICAgICAg
X3RoaXMuU1BFQ1VMQVJURVJNID0gZmFsc2U7CisgICAgICAgIF90aGlzLk1JQ1JPU1VSRkFDRUZS
T01SRUZMRUNUSVZJVFlNQVAgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuTUlDUk9TVVJGQUNFQVVU
T01BVElDID0gZmFsc2U7CisgICAgICAgIF90aGlzLkxPREJBU0VETUlDUk9TRlVSQUNFID0gZmFs
c2U7CisgICAgICAgIF90aGlzLk1JQ1JPU1VSRkFDRU1BUCA9IGZhbHNlOworICAgICAgICBfdGhp
cy5NSUNST1NVUkZBQ0VNQVBESVJFQ1RVViA9IDA7CisgICAgICAgIF90aGlzLk1FVEFMTElDV09S
S0ZMT1cgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUk9VR0hORVNTU1RPUkVJTk1FVEFMTUFQQUxQ
SEEgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUk9VR0hORVNTU1RPUkVJTk1FVEFMTUFQR1JFRU4g
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuTUVUQUxMTkVTU1NUT1JFSU5NRVRBTE1BUEJMVUUgPSBm
YWxzZTsKKyAgICAgICAgX3RoaXMuQU9TVE9SRUlOTUVUQUxNQVBSRUQgPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuRU5WSVJPTk1FTlRCUkRGID0gZmFsc2U7CisgICAgICAgIF90aGlzLkVOVklST05N
RU5UQlJERl9SR0JEID0gZmFsc2U7CisgICAgICAgIF90aGlzLk5PUk1BTCA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5UQU5HRU5UID0gZmFsc2U7CisgICAgICAgIF90aGlzLkJVTVAgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuQlVNUERJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuT0JKRUNUU1BB
Q0VfTk9STUFMTUFQID0gZmFsc2U7CisgICAgICAgIF90aGlzLlBBUkFMTEFYID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLlBBUkFMTEFYT0NDTFVTSU9OID0gZmFsc2U7CisgICAgICAgIF90aGlzLk5P
Uk1BTFhZU0NBTEUgPSB0cnVlOworICAgICAgICBfdGhpcy5MSUdIVE1BUCA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5MSUdIVE1BUERJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuVVNFTElHSFRN
QVBBU1NIQURPV01BUCA9IGZhbHNlOworICAgICAgICBfdGhpcy5HQU1NQUxJR0hUTUFQID0gZmFs
c2U7CisgICAgICAgIF90aGlzLlJHQkRMSUdIVE1BUCA9IGZhbHNlOworICAgICAgICBfdGhpcy5S
RUZMRUNUSU9OID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05NQVBfM0QgPSBmYWxz
ZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF9TUEhFUklDQUwgPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuUkVGTEVDVElPTk1BUF9QTEFOQVIgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVG
TEVDVElPTk1BUF9DVUJJQyA9IGZhbHNlOworICAgICAgICBfdGhpcy5VU0VfTE9DQUxfUkVGTEVD
VElPTk1BUF9DVUJJQyA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX1BST0pF
Q1RJT04gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF9TS1lCT1ggPSBmYWxz
ZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF9TS1lCT1hfVFJBTlNGT1JNRUQgPSBmYWxz
ZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF9FWFBMSUNJVCA9IGZhbHNlOworICAgICAg
ICBfdGhpcy5SRUZMRUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxBUiA9IGZhbHNlOworICAgICAgICBf
dGhpcy5SRUZMRUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxBUl9GSVhFRCA9IGZhbHNlOworICAgICAg
ICBfdGhpcy5SRUZMRUNUSU9OTUFQX01JUlJPUkVERVFVSVJFQ1RBTkdVTEFSX0ZJWEVEID0gZmFs
c2U7CisgICAgICAgIF90aGlzLklOVkVSVENVQklDTUFQID0gZmFsc2U7CisgICAgICAgIF90aGlz
LlVTRVNQSEVSSUNBTEZST01SRUZMRUNUSU9OTUFQID0gZmFsc2U7CisgICAgICAgIF90aGlzLlVT
RUlSUkFESUFOQ0VNQVAgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuU1BIRVJJQ0FMX0hBUk1PTklD
UyA9IGZhbHNlOworICAgICAgICBfdGhpcy5VU0VTUEhFUklDQUxJTlZFUlRFWCA9IGZhbHNlOwor
ICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX09QUE9TSVRFWiA9IGZhbHNlOworICAgICAgICBf
dGhpcy5MT0RJTlJFRkxFQ1RJT05BTFBIQSA9IGZhbHNlOworICAgICAgICBfdGhpcy5HQU1NQVJF
RkxFQ1RJT04gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkdCRFJFRkxFQ1RJT04gPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuTElORUFSU1BFQ1VMQVJSRUZMRUNUSU9OID0gZmFsc2U7CisgICAgICAg
IF90aGlzLlJBRElBTkNFT0NDTFVTSU9OID0gZmFsc2U7CisgICAgICAgIF90aGlzLkhPUklaT05P
Q0NMVVNJT04gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuSU5TVEFOQ0VTID0gZmFsc2U7CisgICAg
ICAgIF90aGlzLk5VTV9CT05FX0lORkxVRU5DRVJTID0gMDsKKyAgICAgICAgX3RoaXMuQm9uZXNQ
ZXJNZXNoID0gMDsKKyAgICAgICAgX3RoaXMuQk9ORVRFWFRVUkUgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuTk9OVU5JRk9STVNDQUxJTkcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuTU9SUEhUQVJH
RVRTID0gZmFsc2U7CisgICAgICAgIF90aGlzLk1PUlBIVEFSR0VUU19OT1JNQUwgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuTU9SUEhUQVJHRVRTX1RBTkdFTlQgPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuTU9SUEhUQVJHRVRTX1VWID0gZmFsc2U7CisgICAgICAgIF90aGlzLk5VTV9NT1JQSF9JTkZM
VUVOQ0VSUyA9IDA7CisgICAgICAgIF90aGlzLklNQUdFUFJPQ0VTU0lORyA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5WSUdORVRURSA9IGZhbHNlOworICAgICAgICBfdGhpcy5WSUdORVRURUJMRU5E
TU9ERU1VTFRJUExZID0gZmFsc2U7CisgICAgICAgIF90aGlzLlZJR05FVFRFQkxFTkRNT0RFT1BB
UVVFID0gZmFsc2U7CisgICAgICAgIF90aGlzLlRPTkVNQVBQSU5HID0gZmFsc2U7CisgICAgICAg
IF90aGlzLlRPTkVNQVBQSU5HX0FDRVMgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ09OVFJBU1Qg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ09MT1JDVVJWRVMgPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuQ09MT1JHUkFESU5HID0gZmFsc2U7CisgICAgICAgIF90aGlzLkNPTE9SR1JBRElORzNEID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLlNBTVBMRVIzREdSRUVOREVQVEggPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuU0FNUExFUjNEQkdSTUFQID0gZmFsc2U7CisgICAgICAgIF90aGlzLklNQUdFUFJP
Q0VTU0lOR1BPU1RQUk9DRVNTID0gZmFsc2U7CisgICAgICAgIF90aGlzLkVYUE9TVVJFID0gZmFs
c2U7CisgICAgICAgIF90aGlzLk1VTFRJVklFVyA9IGZhbHNlOworICAgICAgICBfdGhpcy5VU0VQ
SFlTSUNBTExJR0hURkFMTE9GRiA9IGZhbHNlOworICAgICAgICBfdGhpcy5VU0VHTFRGTElHSFRG
QUxMT0ZGID0gZmFsc2U7CisgICAgICAgIF90aGlzLlRXT1NJREVETElHSFRJTkcgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuU0hBRE9XRkxPQVQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ0xJUFBM
QU5FID0gZmFsc2U7CisgICAgICAgIF90aGlzLkNMSVBQTEFORTIgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuQ0xJUFBMQU5FMyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DTElQUExBTkU0ID0gZmFs
c2U7CisgICAgICAgIF90aGlzLlBPSU5UU0laRSA9IGZhbHNlOworICAgICAgICBfdGhpcy5GT0cg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuTE9HQVJJVEhNSUNERVBUSCA9IGZhbHNlOworICAgICAg
ICBfdGhpcy5GT1JDRU5PUk1BTEZPUldBUkQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuU1BFQ1VM
QVJBQSA9IGZhbHNlOworICAgICAgICBfdGhpcy5DTEVBUkNPQVQgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuQ0xFQVJDT0FUX0RFRkFVTFRJT1IgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ0xFQVJD
T0FUX1RFWFRVUkUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ0xFQVJDT0FUX1RFWFRVUkVESVJF
Q1RVViA9IDA7CisgICAgICAgIF90aGlzLkNMRUFSQ09BVF9CVU1QID0gZmFsc2U7CisgICAgICAg
IF90aGlzLkNMRUFSQ09BVF9CVU1QRElSRUNUVVYgPSAwOworICAgICAgICBfdGhpcy5DTEVBUkNP
QVRfVElOVCA9IGZhbHNlOworICAgICAgICBfdGhpcy5DTEVBUkNPQVRfVElOVF9URVhUVVJFID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLkNMRUFSQ09BVF9USU5UX1RFWFRVUkVESVJFQ1RVViA9IDA7
CisgICAgICAgIF90aGlzLkFOSVNPVFJPUElDID0gZmFsc2U7CisgICAgICAgIF90aGlzLkFOSVNP
VFJPUElDX1RFWFRVUkUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQU5JU09UUk9QSUNfVEVYVFVS
RURJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuQlJERl9WX0hFSUdIVF9DT1JSRUxBVEVEID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLk1TX0JSREZfRU5FUkdZX0NPTlNFUlZBVElPTiA9IGZhbHNl
OworICAgICAgICBfdGhpcy5TSEVFTiA9IGZhbHNlOworICAgICAgICBfdGhpcy5TSEVFTl9URVhU
VVJFID0gZmFsc2U7CisgICAgICAgIF90aGlzLlNIRUVOX1RFWFRVUkVESVJFQ1RVViA9IDA7Cisg
ICAgICAgIF90aGlzLlNIRUVOX0xJTktXSVRIQUxCRURPID0gZmFsc2U7CisgICAgICAgIF90aGlz
LlNVQlNVUkZBQ0UgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuU1NfUkVGUkFDVElPTiA9IGZhbHNl
OworICAgICAgICBfdGhpcy5TU19UUkFOU0xVQ0VOQ1kgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMu
U1NfU0NBVEVSUklORyA9IGZhbHNlOworICAgICAgICBfdGhpcy5TU19USElDS05FU1NBTkRNQVNL
X1RFWFRVUkUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuU1NfVEhJQ0tORVNTQU5ETUFTS19URVhU
VVJFRElSRUNUVVYgPSAwOworICAgICAgICBfdGhpcy5TU19SRUZSQUNUSU9OTUFQXzNEID0gZmFs
c2U7CisgICAgICAgIF90aGlzLlNTX1JFRlJBQ1RJT05NQVBfT1BQT1NJVEVaID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLlNTX0xPRElOUkVGUkFDVElPTkFMUEhBID0gZmFsc2U7CisgICAgICAgIF90
aGlzLlNTX0dBTU1BUkVGUkFDVElPTiA9IGZhbHNlOworICAgICAgICBfdGhpcy5TU19SR0JEUkVG
UkFDVElPTiA9IGZhbHNlOworICAgICAgICBfdGhpcy5TU19MSU5FQVJTUEVDVUxBUlJFRlJBQ1RJ
T04gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuU1NfTElOS1JFRlJBQ1RJT05UT1RSQU5TUEFSRU5D
WSA9IGZhbHNlOworICAgICAgICBfdGhpcy5TU19NQVNLX0ZST01fVEhJQ0tORVNTX1RFWFRVUkUg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVU5MSVQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuREVC
VUdNT0RFID0gMDsKKyAgICAgICAgX3RoaXMucmVidWlsZCgpOworICAgICAgICByZXR1cm4gX3Ro
aXM7CisgICAgfQorICAgIC8qKgorICAgICAqIFJlc2V0cyB0aGUgUEJSIE1hdGVyaWFsIGRlZmlu
ZXMuCisgICAgICovCisgICAgUEJSTWF0ZXJpYWxEZWZpbmVzLnByb3RvdHlwZS5yZXNldCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpOwor
ICAgICAgICB0aGlzLkFMUEhBVEVTVFZBTFVFID0gIjAuNSI7CisgICAgICAgIHRoaXMuUEJSID0g
dHJ1ZTsKKyAgICB9OworICAgIHJldHVybiBQQlJNYXRlcmlhbERlZmluZXM7Cit9KF9NYXRlcmlh
bHNfbWF0ZXJpYWxEZWZpbmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJNYXRlcmlh
bERlZmluZXMiXSkpOworCisvKioKKyAqIFRoZSBQaHlzaWNhbGx5IGJhc2VkIG1hdGVyaWFsIGJh
c2UgY2xhc3Mgb2YgQkpTLgorICoKKyAqIFRoaXMgb2ZmZXJzIHRoZSBtYWluIGZlYXR1cmVzIG9m
IGEgc3RhbmRhcmQgUEJSIG1hdGVyaWFsLgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFz
ZSByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiA6CisgKiBodHRwczovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9waHlzaWNhbGx5X2Jhc2VkX3JlbmRlcmluZworICovCit2YXIgUEJSQmFzZU1h
dGVyaWFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFBCUkJhc2VNYXRlcmlhbCwg
X3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgUEJSTWF0ZXJpYWwg
aW5zdGFuY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbWF0ZXJpYWwgbmFtZQor
ICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhlIG1hdGVyaWFsIHdpbGwgYmUgdXNlIGlu
LgorICAgICAqLworICAgIGZ1bmN0aW9uIFBCUkJhc2VNYXRlcmlhbChuYW1lLCBzY2VuZSkgewor
ICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBzY2VuZSkgfHwgdGhp
czsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVuc2l0eSBvZiB0aGUgZGlyZWN0IGxpZ2h0
cyBlLmcuIHRoZSBmb3VyIGxpZ2h0cyBhdmFpbGFibGUgaW4geW91ciBzY2VuZS4KKyAgICAgICAg
ICogVGhpcyBpbXBhY3RzIGJvdGggdGhlIGRpcmVjdCBkaWZmdXNlIGFuZCBzcGVjdWxhciBoaWdo
bGlnaHRzLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2RpcmVjdEludGVuc2l0eSA9IDEu
MDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVuc2l0eSBvZiB0aGUgZW1pc3NpdmUgcGFy
dCBvZiB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqIFRoaXMgaGVscHMgY29udHJvbGxpbmcgdGhl
IGVtaXNzaXZlIGVmZmVjdCB3aXRob3V0IG1vZGlmeWluZyB0aGUgZW1pc3NpdmUgY29sb3IuCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5fZW1pc3NpdmVJbnRlbnNpdHkgPSAxLjA7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBJbnRlbnNpdHkgb2YgdGhlIGVudmlyb25tZW50IGUuZy4gaG93
IG11Y2ggdGhlIGVudmlyb25tZW50IHdpbGwgbGlnaHQgdGhlIG9iamVjdAorICAgICAgICAgKiBl
aXRoZXIgdGhyb3VnaCBoYXJtb25pY3MgZm9yIHJvdWdoIG1hdGVyaWFsIG9yIHRocm91Z2ggdGhl
IHJlZmVsY3Rpb24gZm9yIHNoaW55IG9uZXMuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5f
ZW52aXJvbm1lbnRJbnRlbnNpdHkgPSAxLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlz
IGlzIGEgc3BlY2lhbCBjb250cm9sIGFsbG93aW5nIHRoZSByZWR1Y3Rpb24gb2YgdGhlIHNwZWN1
bGFyIGhpZ2hsaWdodHMgY29taW5nIGZyb20gdGhlCisgICAgICAgICAqIGZvdXIgbGlnaHRzIG9m
IHRoZSBzY2VuZS4gVGhvc2UgaGlnaGxpZ2h0cyBtYXkgbm90IGJlIG5lZWRlZCBpbiBmdWxsIGVu
dmlyb25tZW50IGxpZ2h0aW5nLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3NwZWN1bGFy
SW50ZW5zaXR5ID0gMS4wOworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBzdG9yZXMgdGhl
IGRpcmVjdCwgZW1pc3NpdmUsIGVudmlyb25tZW50LCBhbmQgc3BlY3VsYXIgbGlnaHQgaW50ZW5z
aXRpZXMgaW50byBhIFZlY3RvcjQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fbGlnaHRp
bmdJbmZvcyA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfX1siVmVjdG9yNCJdKF90aGlzLl9kaXJlY3RJbnRlbnNpdHksIF90aGlzLl9lbWlzc2l2ZUlu
dGVuc2l0eSwgX3RoaXMuX2Vudmlyb25tZW50SW50ZW5zaXR5LCBfdGhpcy5fc3BlY3VsYXJJbnRl
bnNpdHkpOworICAgICAgICAvKioKKyAgICAgICAgICogRGVidWcgQ29udHJvbCBhbGxvd2luZyBk
aXNhYmxpbmcgdGhlIGJ1bXAgbWFwIG9uIHRoaXMgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5fZGlzYWJsZUJ1bXBNYXAgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEFLQSBEaWZmdXNlIFRleHR1cmUgaW4gc3RhbmRhcmQgbm9tZW5jbGF0dXJlLgorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMuX2FsYmVkb1RleHR1cmUgPSBudWxsOworICAgICAgICAvKioK
KyAgICAgICAgICogQUtBIE9jY2x1c2lvbiBUZXh0dXJlIGluIG90aGVyIG5vbWVuY2xhdHVyZS4K
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9hbWJpZW50VGV4dHVyZSA9IG51bGw7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBBS0EgT2NjbHVzaW9uIFRleHR1cmUgSW50ZW5zaXR5IGluIG90
aGVyIG5vbWVuY2xhdHVyZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9hbWJpZW50VGV4
dHVyZVN0cmVuZ3RoID0gMS4wOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBob3cg
bXVjaCB0aGUgQU8gbWFwIGlzIG9jY2x1ZGluZyB0aGUgYW5hbHl0aWNhbCBsaWdodHMgKHBvaW50
IHNwb3QuLi4pLgorICAgICAgICAgKiAxIG1lYW5zIGl0IGNvbXBsZXRlbHkgb2NjbHVkZXMgaXQK
KyAgICAgICAgICogMCBtZWFuIGl0IGhhcyBubyBpbXBhY3QKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLl9hbWJpZW50VGV4dHVyZUltcGFjdE9uQW5hbHl0aWNhbExpZ2h0cyA9IFBCUkJhc2VN
YXRlcmlhbC5ERUZBVUxUX0FPX09OX0FOQUxZVElDQUxfTElHSFRTOworICAgICAgICAvKioKKyAg
ICAgICAgICogU3RvcmVzIHRoZSBhbHBoYSB2YWx1ZXMgaW4gYSB0ZXh0dXJlLgorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuX29wYWNpdHlUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFN0b3JlcyB0aGUgcmVmbGVjdGlvbiB2YWx1ZXMgaW4gYSB0ZXh0dXJlLgorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3JlZmxlY3Rpb25UZXh0dXJlID0gbnVsbDsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgZW1pc3NpdmUgdmFsdWVzIGluIGEgdGV4dHVy
ZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9lbWlzc2l2ZVRleHR1cmUgPSBudWxsOwor
ICAgICAgICAvKioKKyAgICAgICAgICogQUtBIFNwZWN1bGFyIHRleHR1cmUgaW4gb3RoZXIgbm9t
ZW5jbGF0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3JlZmxlY3Rpdml0eVRleHR1
cmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogVXNlZCB0byBzd2l0Y2ggZnJvbSBz
cGVjdWxhci9nbG9zc2luZXNzIHRvIG1ldGFsbGljL3JvdWdobmVzcyB3b3JrZmxvdy4KKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLl9tZXRhbGxpY1RleHR1cmUgPSBudWxsOworICAgICAgICAv
KioKKyAgICAgICAgICogU3BlY2lmaWVzIHRoZSBtZXRhbGxpYyBzY2FsYXIgb2YgdGhlIG1ldGFs
bGljL3JvdWdobmVzcyB3b3JrZmxvdy4KKyAgICAgICAgICogQ2FuIGFsc28gYmUgdXNlZCB0byBz
Y2FsZSB0aGUgbWV0YWxuZXNzIHZhbHVlcyBvZiB0aGUgbWV0YWxsaWMgdGV4dHVyZS4KKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLl9tZXRhbGxpYyA9IG51bGw7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTcGVjaWZpZXMgdGhlIHJvdWdobmVzcyBzY2FsYXIgb2YgdGhlIG1ldGFsbGljL3Jv
dWdobmVzcyB3b3JrZmxvdy4KKyAgICAgICAgICogQ2FuIGFsc28gYmUgdXNlZCB0byBzY2FsZSB0
aGUgcm91Z2huZXNzIHZhbHVlcyBvZiB0aGUgbWV0YWxsaWMgdGV4dHVyZS4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLl9yb3VnaG5lc3MgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAg
ICogVXNlZCB0byBlbmFibGUgcm91Z2huZXNzL2dsb3NzaW5lc3MgZmV0Y2ggZnJvbSBhIHNlcGFy
YXRlIGNoYW5uZWwgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IG1vZGUuCisgICAgICAgICAqIEdy
YXkgU2NhbGUgcmVwcmVzZW50cyByb3VnaG5lc3MgaW4gbWV0YWxsaWMgbW9kZSBhbmQgZ2xvc3Np
bmVzcyBpbiBzcGVjdWxhciBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX21pY3Jv
U3VyZmFjZVRleHR1cmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHN1
cmZhY2Ugbm9ybWFsIGRhdGEgdXNlZCB0byBkaXNwbGFjZSBhIG1lc2ggaW4gYSB0ZXh0dXJlLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2J1bXBUZXh0dXJlID0gbnVsbDsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgcHJlLWNhbGN1bGF0ZWQgbGlnaHQgaW5mb3JtYXRp
b24gb2YgYSBtZXNoIGluIGEgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9s
aWdodG1hcFRleHR1cmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9y
IG9mIGEgbWF0ZXJpYWwgaW4gYW1iaWVudCBsaWdodGluZy4KKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLl9hbWJpZW50Q29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEzX19bIkNvbG9yMyJdKDAsIDAsIDApOworICAgICAgICAvKioKKyAgICAg
ICAgICogQUtBIERpZmZ1c2UgQ29sb3IgaW4gb3RoZXIgbm9tZW5jbGF0dXJlLgorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuX2FsYmVkb0NvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJDb2xvcjMiXSgxLCAxLCAxKTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEFLQSBTcGVjdWxhciBDb2xvciBpbiBvdGhlciBub21lbmNsYXR1cmUu
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fcmVmbGVjdGl2aXR5Q29sb3IgPSBuZXcgX01h
dGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkNvbG9yMyJdKDEs
IDEsIDEpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIGFwcGxpZWQgd2hlbiBs
aWdodCBpcyByZWZsZWN0ZWQgZnJvbSBhIG1hdGVyaWFsLgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuX3JlZmxlY3Rpb25Db2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTNfX1siQ29sb3IzIl0oMSwgMSwgMSk7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBUaGUgY29sb3IgYXBwbGllZCB3aGVuIGxpZ2h0IGlzIGVtaXR0ZWQgZnJvbSBhIG1h
dGVyaWFsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2VtaXNzaXZlQ29sb3IgPSBuZXcg
X01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkNvbG9yMyJd
KDAsIDAsIDApOworICAgICAgICAvKioKKyAgICAgICAgICogQUtBIEdsb3NzaW5lc3MgaW4gb3Ro
ZXIgbm9tZW5jbGF0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX21pY3JvU3VyZmFj
ZSA9IDAuOTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBtYXRl
cmlhbCB3aWxsIHVzZSB0aGUgbGlnaHQgbWFwIGFzIGEgc2hvdyBtYXAuCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5fdXNlTGlnaHRtYXBBc1NoYWRvd21hcCA9IGZhbHNlOworICAgICAgICAv
KioKKyAgICAgICAgICogVGhpcyBwYXJhbWV0ZXJzIHdpbGwgZW5hYmxlL2Rpc2FibGUgSG9yaXpv
biBvY2NsdXNpb24gdG8gcHJldmVudCBub3JtYWwgbWFwcyB0byBsb29rIHNoaW55IHdoZW4gdGhl
IG5vcm1hbAorICAgICAgICAgKiBtYWtlcyB0aGUgcmVmbGVjdCB2ZWN0b3IgZmFjZSB0aGUgbW9k
ZWwgKHVuZGVyIGhvcml6b24pLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3VzZUhvcml6
b25PY2NsdXNpb24gPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBwYXJhbWV0
ZXJzIHdpbGwgZW5hYmxlL2Rpc2FibGUgcmFkaWFuY2Ugb2NjbHVzaW9uIGJ5IHByZXZlbnRpbmcg
dGhlIHJhZGlhbmNlIHRvIGxpdAorICAgICAgICAgKiB0b28gbXVjaCB0aGUgYXJlYSByZWx5aW5n
IG9uIGFtYmllbnQgdGV4dHVyZSB0byBkZWZpbmUgdGhlaXIgYW1iaWVudCBvY2NsdXNpb24uCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5fdXNlUmFkaWFuY2VPY2NsdXNpb24gPSB0cnVlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGFscGhhIGlzIGNvbWlu
ZyBmb3JtIHRoZSBhbGJlZG8gY2hhbm5lbCBhbHBoYSBjaGFubmVsIGZvciBhbHBoYSBibGVuZGlu
Zy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl91c2VBbHBoYUZyb21BbGJlZG9UZXh0dXJl
ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgbWF0
ZXJpYWwgd2lsbCBrZWVwcyB0aGUgc3BlY3VsYXIgaGlnaGxpZ2h0cyBvdmVyIGEgdHJhbnNwYXJl
bnQgc3VyZmFjZSAob25seSB0aGUgbW9zdCBsaW11bm91cyBvbmVzKS4KKyAgICAgICAgICogQSBj
YXIgZ2xhc3MgaXMgYSBnb29kIGV4ZW1wbGUgb2YgdGhhdC4gV2hlbiBzdW4gcmVmbGVjdHMgb24g
aXQgeW91IGNhbiBub3Qgc2VlIHdoYXQgaXMgYmVoaW5kLgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuX3VzZVNwZWN1bGFyT3ZlckFscGhhID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFNwZWNpZmllcyBpZiB0aGUgcmVmbGVjdGl2aXR5IHRleHR1cmUgY29udGFpbnMgdGhlIGds
b3NzaW5lc3MgaW5mb3JtYXRpb24gaW4gaXRzIGFscGhhIGNoYW5uZWwuCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5fdXNlTWljcm9TdXJmYWNlRnJvbVJlZmxlY3Rpdml0eU1hcEFscGhhID0g
ZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIG1ldGFsbGlj
IHRleHR1cmUgY29udGFpbnMgdGhlIHJvdWdobmVzcyBpbmZvcm1hdGlvbiBpbiBpdHMgYWxwaGEg
Y2hhbm5lbC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl91c2VSb3VnaG5lc3NGcm9tTWV0
YWxsaWNUZXh0dXJlQWxwaGEgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lm
aWVzIGlmIHRoZSBtZXRhbGxpYyB0ZXh0dXJlIGNvbnRhaW5zIHRoZSByb3VnaG5lc3MgaW5mb3Jt
YXRpb24gaW4gaXRzIGdyZWVuIGNoYW5uZWwuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5f
dXNlUm91Z2huZXNzRnJvbU1ldGFsbGljVGV4dHVyZUdyZWVuID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIG1ldGFsbGljIHRleHR1cmUgY29udGFpbnMg
dGhlIG1ldGFsbG5lc3MgaW5mb3JtYXRpb24gaW4gaXRzIGJsdWUgY2hhbm5lbC4KKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLl91c2VNZXRhbGxuZXNzRnJvbU1ldGFsbGljVGV4dHVyZUJsdWUg
PSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbWV0YWxs
aWMgdGV4dHVyZSBjb250YWlucyB0aGUgYW1iaWVudCBvY2NsdXNpb24gaW5mb3JtYXRpb24gaW4g
aXRzIHJlZCBjaGFubmVsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3VzZUFtYmllbnRP
Y2NsdXNpb25Gcm9tTWV0YWxsaWNUZXh0dXJlUmVkID0gZmFsc2U7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGFtYmllbnQgdGV4dHVyZSBjb250YWlucyB0aGUgYW1i
aWVudCBvY2NsdXNpb24gaW5mb3JtYXRpb24gaW4gaXRzIHJlZCBjaGFubmVsIG9ubHkuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5fdXNlQW1iaWVudEluR3JheVNjYWxlID0gZmFsc2U7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBJbiBjYXNlIHRoZSByZWZsZWN0aXZpdHkgbWFwIGRvZXMg
bm90IGNvbnRhaW4gdGhlIG1pY3Jvc3VyZmFjZSBpbmZvcm1hdGlvbiBpbiBpdHMgYWxwaGEgY2hh
bm5lbCwKKyAgICAgICAgICogVGhlIG1hdGVyaWFsIHdpbGwgdHJ5IHRvIGluZmVyIHdoYXQgZ2xv
c3NpbmVzcyBlYWNoIHBpeGVsIHNob3VsZCBiZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlz
Ll91c2VBdXRvTWljcm9TdXJmYWNlRnJvbVJlZmxlY3Rpdml0eU1hcCA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgIGZhbGxvZmYgdHlwZSB1c2VkIGluIHRoaXMg
bWF0ZXJpYWwuCisgICAgICAgICAqIEl0IGJ5IGRlZmF1bHQgaXMgUGh5c2ljYWwuCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5fbGlnaHRGYWxsb2ZmID0gUEJSQmFzZU1hdGVyaWFsLkxJR0hU
RkFMTE9GRl9QSFlTSUNBTDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyB0aGF0
IHRoZSBtYXRlcmlhbCB3aWxsIGtlZXBzIHRoZSByZWZsZWN0aW9uIGhpZ2hsaWdodHMgb3ZlciBh
IHRyYW5zcGFyZW50IHN1cmZhY2UgKG9ubHkgdGhlIG1vc3QgbGltdW5vdXMgb25lcykuCisgICAg
ICAgICAqIEEgY2FyIGdsYXNzIGlzIGEgZ29vZCBleGVtcGxlIG9mIHRoYXQuIFdoZW4gdGhlIHN0
cmVldCBsaWdodHMgcmVmbGVjdHMgb24gaXQgeW91IGNhbiBub3Qgc2VlIHdoYXQgaXMgYmVoaW5k
LgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3VzZVJhZGlhbmNlT3ZlckFscGhhID0gdHJ1
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFsbG93cyB1c2luZyBhbiBvYmplY3Qgc3BhY2Ug
bm9ybWFsIG1hcCAoaW5zdGVhZCBvZiB0YW5nZW50IHNwYWNlKS4KKyAgICAgICAgICovCisgICAg
ICAgIF90aGlzLl91c2VPYmplY3RTcGFjZU5vcm1hbE1hcCA9IGZhbHNlOworICAgICAgICAvKioK
KyAgICAgICAgICogQWxsb3dzIHVzaW5nIHRoZSBidW1wIG1hcCBpbiBwYXJhbGxheCBtb2RlLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3VzZVBhcmFsbGF4ID0gZmFsc2U7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBBbGxvd3MgdXNpbmcgdGhlIGJ1bXAgbWFwIGluIHBhcmFsbGF4IG9j
Y2x1c2lvbiBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3VzZVBhcmFsbGF4T2Nj
bHVzaW9uID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBDb250cm9scyB0aGUgc2Nh
bGUgYmlhcyBvZiB0aGUgcGFyYWxsYXggbW9kZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlz
Ll9wYXJhbGxheFNjYWxlQmlhcyA9IDAuMDU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBz
ZXRzIHRvIHRydWUsIGRpc2FibGVzIGFsbCB0aGUgbGlnaHRzIGFmZmVjdGluZyB0aGUgbWF0ZXJp
YWwuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fZGlzYWJsZUxpZ2h0aW5nID0gZmFsc2U7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBOdW1iZXIgb2YgU2ltdWx0YW5lb3VzIGxpZ2h0cyBh
bGxvd2VkIG9uIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9tYXhT
aW11bHRhbmVvdXNMaWdodHMgPSA0OworICAgICAgICAvKioKKyAgICAgICAgICogSWYgc2V0cyB0
byB0cnVlLCB4IGNvbXBvbmVudCBvZiBub3JtYWwgbWFwIHZhbHVlIHdpbGwgYmUgaW52ZXJ0ZWQg
KHggPSAxLjAgLSB4KS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9pbnZlcnROb3JtYWxN
YXBYID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBzZXRzIHRvIHRydWUsIHkg
Y29tcG9uZW50IG9mIG5vcm1hbCBtYXAgdmFsdWUgd2lsbCBiZSBpbnZlcnRlZCAoeSA9IDEuMCAt
IHkpLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2ludmVydE5vcm1hbE1hcFkgPSBmYWxz
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHNldHMgdG8gdHJ1ZSBhbmQgYmFja2ZhY2VD
dWxsaW5nIGlzIGZhbHNlLCBub3JtYWxzIHdpbGwgYmUgZmxpcHBlZCBvbiB0aGUgYmFja3NpZGUu
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fdHdvU2lkZWRMaWdodGluZyA9IGZhbHNlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgYWxwaGEgbGltaXRzIGluIGFscGhh
IHRlc3QgbW9kZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9hbHBoYUN1dE9mZiA9IDAu
NDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuZm9yY2VzIGFscGhhIHRlc3QgaW4gb3BhcXVl
IG9yIGJsZW5kIG1vZGUgaW4gb3JkZXIgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2VzIG9mIHNv
bWUgc2l0dWF0aW9ucy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9mb3JjZUFscGhhVGVz
dCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogQSBmcmVzbmVsIGlzIGFwcGxpZWQg
dG8gdGhlIGFscGhhIG9mIHRoZSBtb2RlbCB0byBlbnN1cmUgZ3JhemluZyBhbmdsZXMgZWRnZXMg
YXJlIG5vdCBhbHBoYSB0ZXN0ZWQuCisgICAgICAgICAqIEFuZC9PciBvY2NsdWRlIHRoZSBibGVu
ZGVkIHBhcnQuIChhbHBoYSBpcyBjb252ZXJ0ZWQgdG8gZ2FtbWEgdG8gY29tcHV0ZSB0aGUgZnJl
c25lbCkKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl91c2VBbHBoYUZyZXNuZWwgPSBmYWxz
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgZnJlc25lbCBpcyBhcHBsaWVkIHRvIHRoZSBh
bHBoYSBvZiB0aGUgbW9kZWwgdG8gZW5zdXJlIGdyYXppbmcgYW5nbGVzIGVkZ2VzIGFyZSBub3Qg
YWxwaGEgdGVzdGVkLgorICAgICAgICAgKiBBbmQvT3Igb2NjbHVkZSB0aGUgYmxlbmRlZCBwYXJ0
LiAoYWxwaGEgc3RheXMgbGluZWFyIHRvIGNvbXB1dGUgdGhlIGZyZXNuZWwpCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5fdXNlTGluZWFyQWxwaGFGcmVzbmVsID0gZmFsc2U7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBUaGUgdHJhbnNwYXJlbmN5IG1vZGUgb2YgdGhlIG1hdGVyaWFsLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3RyYW5zcGFyZW5jeU1vZGUgPSBudWxsOworICAg
ICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIHRoZSBlbnZpcm9ubWVudCBCUkRGIHRleHR1
cmUgdXNlZCB0byBjb21wdXQgdGhlIHNjYWxlIGFuZCBvZmZzZXQgcm91Z2huZXNzIHZhbHVlcwor
ICAgICAgICAgKiBmcm9tIGNvcyB0aGV0YXYgYW5kIHJvdWdobmVzczoKKyAgICAgICAgICogaHR0
cDovL2Jsb2cuc2VsZnNoYWRvdy5jb20vcHVibGljYXRpb25zL3MyMDEzLXNoYWRpbmctY291cnNl
L2thcmlzL3MyMDEzX3Bic19lcGljX25vdGVzX3YyLnBkZgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuX2Vudmlyb25tZW50QlJERlRleHR1cmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAg
ICAgICogRm9yY2UgdGhlIHNoYWRlciB0byBjb21wdXRlIGlycmFkaWFuY2UgaW4gdGhlIGZyYWdt
ZW50IHNoYWRlciBpbiBvcmRlciB0byB0YWtlIGJ1bXAgaW4gYWNjb3VudC4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLl9mb3JjZUlycmFkaWFuY2VJbkZyYWdtZW50ID0gZmFsc2U7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBGb3JjZSBub3JtYWwgdG8gZmFjZSBhd2F5IGZyb20gZmFjZS4K
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9mb3JjZU5vcm1hbEZvcndhcmQgPSBmYWxzZTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEVuYWJsZXMgc3BlY3VsYXIgYW50aSBhbGlhc2luZyBp
biB0aGUgUEJSIHNoYWRlci4KKyAgICAgICAgICogSXQgd2lsbCBib3RoIGludGVyYWN0cyBvbiB0
aGUgR2VvbWV0cnkgZm9yIGFuYWx5dGljYWwgYW5kIElCTCBsaWdodGluZy4KKyAgICAgICAgICog
SXQgYWxzbyBwcmVmaWx0ZXIgdGhlIHJvdWdobmVzcyBtYXAgYmFzZWQgb24gdGhlIGJ1bXAgdmFs
dWVzLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2VuYWJsZVNwZWN1bGFyQW50aUFsaWFz
aW5nID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBLZWVwIHRyYWNrIG9mIHRoZSBp
bWFnZSBwcm9jZXNzaW5nIG9ic2VydmVyIHRvIGFsbG93IGRpc3Bvc2UgYW5kIHJlcGxhY2UuCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5faW1hZ2VQcm9jZXNzaW5nT2JzZXJ2ZXIgPSBudWxs
OworICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHRoZSBhdmFpbGFibGUgcmVuZGVyIHRh
cmdldHMuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fcmVuZGVyVGFyZ2V0cyA9IG5ldyBf
TWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlNtYXJ0QXJyYXki
XSgxNik7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBnbG9iYWwgYW1iaWVudCBj
b2xvciBmb3IgdGhlIG1hdGVyaWFsIHVzZWQgaW4gbGlnaHRpbmcgY2FsY3VsYXRpb25zLgorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2dsb2JhbEFtYmllbnRDb2xvciA9IG5ldyBfTWF0aHNf
bWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siQ29sb3IzIl0oMCwgMCwg
MCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGVzIHRoZSB1c2Ugb2YgbG9nYXJpdGht
aWMgZGVwdGggYnVmZmVycywgd2hpY2ggaXMgZ29vZCBmb3Igd2lkZSBkZXB0aCBidWZmZXJzLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3VzZUxvZ2FyaXRobWljRGVwdGggPSBmYWxzZTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHNldCB0byB0cnVlLCBubyBsaWdodGluZyBjYWxj
dWxhdGlvbnMgd2lsbCBiZSBhcHBsaWVkLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3Vu
bGl0ID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9kZWJ1Z01vZGUgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKiBUaGlzIGlzIHJlc2VydmVkIGZvciB0aGUg
aW5zcGVjdG9yLgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBtYXRlcmlhbCBkZWJ1ZyBtb2RlLgor
ICAgICAgICAgKiBJdCBoZWxwcyBzZWVpbmcgb25seSBzb21lIGNvbXBvbmVudHMgb2YgdGhlIG1h
dGVyaWFsIHdoaWxlIHRyb3VibGVzaG9vdGluZy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LmRlYnVnTW9kZSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAg
ICAqIFRoaXMgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBpbnNwZWN0b3IuCisgICAgICAgICAqIFNwZWNp
ZnkgZnJvbSB3aGVyZSBvbiBzY3JlZW4gdGhlIGRlYnVnIG1vZGUgc2hvdWxkIHN0YXJ0LgorICAg
ICAgICAgKiBUaGUgdmFsdWUgZ29lcyBmcm9tIC0xIChmdWxsIHNjcmVlbikgdG8gMSAobm90IHZp
c2libGUpCisgICAgICAgICAqIEl0IGhlbHBzIHdpdGggc2lkZSBieSBzaWRlIGNvbXBhcmlzb24g
YWdhaW5zdCB0aGUgZmluYWwgcmVuZGVyCisgICAgICAgICAqIFRoaXMgZGVmYXVsdHMgdG8gLTEK
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLmRlYnVnTGltaXQgPSAtMTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogVGhpcyBpcyByZXNlcnZlZCBmb3IgdGhl
IGluc3BlY3Rvci4KKyAgICAgICAgICogQXMgdGhlIGRlZmF1bHQgdmlld2luZyByYW5nZSBtaWdo
dCBub3QgYmUgZW5vdWdoIChpZiB0aGUgYW1iaWVudCBpcyByZWFsbHkgc21hbGwgZm9yIGluc3Rh
bmNlKQorICAgICAgICAgKiBZb3UgY2FuIHVzZSB0aGUgZmFjdG9yIHRvIGJldHRlciBtdWx0aXBs
eSB0aGUgZmluYWwgdmFsdWUuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5kZWJ1Z0ZhY3Rv
ciA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBjbGVhciBjb2F0IGxh
eWVyIHBhcmFtZXRlcnMgZm9yIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLmNsZWFyQ29hdCA9IG5ldyBfcGJyQ2xlYXJDb2F0Q29uZmlndXJhdGlvbl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fWyJQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uIl0oX3RoaXMuX21h
cmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkuYmluZChfdGhpcykpOworICAgICAgICAvKioK
KyAgICAgICAgICogRGVmaW5lcyB0aGUgYW5pc290cm9waWMgcGFyYW1ldGVycyBmb3IgdGhlIG1h
dGVyaWFsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYW5pc290cm9weSA9IG5ldyBfcGJy
QW5pc290cm9waWNDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlBC
UkFuaXNvdHJvcGljQ29uZmlndXJhdGlvbiJdKF90aGlzLl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0
dXJlc0RpcnR5LmJpbmQoX3RoaXMpKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMg
dGhlIEJSREYgcGFyYW1ldGVycyBmb3IgdGhlIG1hdGVyaWFsLgorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuYnJkZiA9IG5ldyBfcGJyQlJERkNvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzEwX19bIlBCUkJSREZDb25maWd1cmF0aW9uIl0oX3RoaXMuX21hcmtBbGxTdWJN
ZXNoZXNBc01pc2NEaXJ0eS5iaW5kKF90aGlzKSk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
ZWZpbmVzIHRoZSBTaGVlbiBwYXJhbWV0ZXJzIGZvciB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5zaGVlbiA9IG5ldyBfcGJyU2hlZW5Db25maWd1cmF0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJQQlJTaGVlbkNvbmZpZ3VyYXRpb24iXShfdGhpcy5f
bWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eS5iaW5kKF90aGlzKSk7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBTdWJTdXJmYWNlIHBhcmFtZXRlcnMgZm9yIHRoZSBt
YXRlcmlhbC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnN1YlN1cmZhY2UgPSBuZXcgX3Bi
clN1YlN1cmZhY2VDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJQ
QlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbiJdKF90aGlzLl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0
dXJlc0RpcnR5LmJpbmQoX3RoaXMpKTsKKyAgICAgICAgX3RoaXMuX3JlYnVpbGRJblBhcmFsbGVs
ID0gZmFsc2U7CisgICAgICAgIC8vIFNldHVwIHRoZSBkZWZhdWx0IHByb2Nlc3NpbmcgY29uZmln
dXJhdGlvbiB0byB0aGUgc2NlbmUuCisgICAgICAgIF90aGlzLl9hdHRhY2hJbWFnZVByb2Nlc3Np
bmdDb25maWd1cmF0aW9uKG51bGwpOworICAgICAgICBfdGhpcy5nZXRSZW5kZXJUYXJnZXRUZXh0
dXJlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRzLnJl
c2V0KCk7CisgICAgICAgICAgICBpZiAoX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQgJiYg
X3RoaXMuX3JlZmxlY3Rpb25UZXh0dXJlICYmIF90aGlzLl9yZWZsZWN0aW9uVGV4dHVyZS5pc1Jl
bmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRzLnB1c2go
X3RoaXMuX3JlZmxlY3Rpb25UZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90
aGlzLnN1YlN1cmZhY2UuZmlsbFJlbmRlclRhcmdldFRleHR1cmVzKF90aGlzLl9yZW5kZXJUYXJn
ZXRzKTsKKyAgICAgICAgICAgIHJldHVybiBfdGhpcy5fcmVuZGVyVGFyZ2V0czsKKyAgICAgICAg
fTsKKyAgICAgICAgX3RoaXMuX2Vudmlyb25tZW50QlJERlRleHR1cmUgPSBfTWlzY19icmRmVGV4
dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkJSREZUZXh0dXJlVG9vbHMi
XS5HZXRFbnZpcm9ubWVudEJSREZUZXh0dXJlKHNjZW5lKTsKKyAgICAgICAgcmV0dXJuIF90aGlz
OworICAgIH0KKyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyBhIG5ldyBpbWFnZSBwcm9jZXNzaW5n
IGNvbmZpZ3VyYXRpb24gdG8gdGhlIFBCUiBNYXRlcmlhbC4KKyAgICAgKiBAcGFyYW0gY29uZmln
dXJhdGlvbgorICAgICAqLworICAgIFBCUkJhc2VNYXRlcmlhbC5wcm90b3R5cGUuX2F0dGFjaElt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0g
dGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIC8vIERldGFjaGVzIG9ic2VydmVyLgorICAgICAgICBpZiAo
dGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiB0aGlzLl9pbWFnZVByb2Nlc3Np
bmdPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbi5vblVwZGF0ZVBhcmFtZXRlcnMucmVtb3ZlKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ09ic2Vy
dmVyKTsKKyAgICAgICAgfQorICAgICAgICAvLyBQaWNrIHRoZSBzY2VuZSBjb25maWd1cmF0aW9u
IGlmIG5lZWRlZC4KKyAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICB0
aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uID0gdGhpcy5nZXRTY2VuZSgpLmltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb247CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlv
bjsKKyAgICAgICAgfQorICAgICAgICAvLyBBdHRhY2hlcyBvYnNlcnZlci4KKyAgICAgICAgaWYg
KHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMu
X2ltYWdlUHJvY2Vzc2luZ09ic2VydmVyID0gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbi5vblVwZGF0ZVBhcmFtZXRlcnMuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICBfdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzSW1hZ2VQcm9jZXNzaW5nRGlydHkoKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
UEJSQmFzZU1hdGVyaWFsLnByb3RvdHlwZSwgImhhc1JlbmRlclRhcmdldFRleHR1cmVzIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGN1
cnJlbnQgbWF0ZXJpYWwgbmVlZHMgdG8gcmVnaXN0ZXIgUlRUCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChfbWF0ZXJpYWxGbGFnc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLlJlZmxlY3Rpb25UZXh0
dXJlRW5hYmxlZCAmJiB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSAmJiB0aGlzLl9yZWZsZWN0aW9u
VGV4dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViU3VyZmFjZS5oYXNSZW5k
ZXJUYXJnZXRUZXh0dXJlcygpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIHRoZSBuYW1lIG9mIHRoZSBtYXRlcmlhbCBjbGFzcy4KKyAgICAgKi8KKyAgICBQQlJCYXNl
TWF0ZXJpYWwucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuICJQQlJCYXNlTWF0ZXJpYWwiOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFBCUkJhc2VNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VMb2dhcml0aG1pY0RlcHRoIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogRW5hYmxlZCB0aGUgdXNlIG9mIGxvZ2FyaXRobWljIGRl
cHRoIGJ1ZmZlcnMsIHdoaWNoIGlzIGdvb2QgZm9yIHdpZGUgZGVwdGggYnVmZmVycy4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3VzZUxvZ2FyaXRobWljRGVwdGg7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBFbmFibGVkIHRoZSB1c2Ugb2YgbG9nYXJpdGhtaWMgZGVwdGggYnVmZmVycywgd2hpY2gg
aXMgZ29vZCBmb3Igd2lkZSBkZXB0aCBidWZmZXJzLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3VzZUxvZ2FyaXRobWljRGVw
dGggPSB2YWx1ZSAmJiB0aGlzLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuZ2V0Q2FwcygpLmZyYWdt
ZW50RGVwdGhTdXBwb3J0ZWQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShQQlJCYXNlTWF0ZXJpYWwucHJvdG90eXBlLCAidHJhbnNwYXJlbmN5TW9kZSIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGN1cnJlbnQgdHJhbnNwYXJlbmN5IG1v
ZGUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl90cmFuc3BhcmVuY3lNb2RlOworICAgICAgICB9LAorICAgICAgICAvKioK
KyAgICAgICAgICogU2V0cyB0aGUgdHJhbnNwYXJlbmN5IG1vZGUgb2YgdGhlIG1hdGVyaWFsLgor
ICAgICAgICAgKgorICAgICAgICAgKiB8IFZhbHVlIHwgVHlwZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiB8CisgICAgICAgICAqIHwgLS0tLS0gfCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHwKKyAgICAgICAgICog
fCAwICAgICB8IE9QQVFVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgfAorICAgICAgICAgKiB8IDEgICAgIHwgQUxQSEFURVNUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAgICAqIHwgMiAgICAgfCBBTFBIQUJMRU5EICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgICogfCAzICAg
ICB8IEFMUEhBVEVTVEFOREJMRU5EICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfAor
ICAgICAgICAgKgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl90cmFuc3BhcmVuY3lNb2RlID09PSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3Ry
YW5zcGFyZW5jeU1vZGUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2ZvcmNlQWxwaGFUZXN0
ID0gKHZhbHVlID09PSBQQlJCYXNlTWF0ZXJpYWwuUEJSTUFURVJJQUxfQUxQSEFURVNUQU5EQkxF
TkQpOworICAgICAgICAgICAgdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNBbmRNaXNj
RGlydHkoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBC
UkJhc2VNYXRlcmlhbC5wcm90b3R5cGUsICJfZGlzYWJsZUFscGhhQmxlbmRpbmciLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgYWxwaGEgYmxlbmRpbmcgc2hvdWxk
IGJlIGRpc2FibGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gKHRoaXMuc3ViU3VyZmFjZS5kaXNhYmxlQWxwaGFCbGVuZGluZyB8
fAorICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zcGFyZW5jeU1vZGUgPT09IFBCUkJhc2VNYXRl
cmlhbC5QQlJNQVRFUklBTF9PUEFRVUUgfHwKKyAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3Bh
cmVuY3lNb2RlID09PSBQQlJCYXNlTWF0ZXJpYWwuUEJSTUFURVJJQUxfQUxQSEFURVNUKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90
IHRoaXMgbWF0ZXJpYWwgc2hvdWxkIGJlIHJlbmRlcmVkIGluIGFscGhhIGJsZW5kIG1vZGUuCisg
ICAgICovCisgICAgUEJSQmFzZU1hdGVyaWFsLnByb3RvdHlwZS5uZWVkQWxwaGFCbGVuZGluZyA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVBbHBoYUJsZW5kaW5nKSB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICh0
aGlzLmFscGhhIDwgMS4wKSB8fCAodGhpcy5fb3BhY2l0eVRleHR1cmUgIT0gbnVsbCkgfHwgdGhp
cy5fc2hvdWxkVXNlQWxwaGFGcm9tQWxiZWRvVGV4dHVyZSgpOworICAgIH07CisgICAgLyoqCisg
ICAgICogU3BlY2lmaWVzIGlmIHRoZSBtZXNoIHdpbGwgcmVxdWlyZSBhbHBoYSBibGVuZGluZy4K
KyAgICAgKiBAcGFyYW0gbWVzaCAtIEJKUyBtZXNoLgorICAgICAqLworICAgIFBCUkJhc2VNYXRl
cmlhbC5wcm90b3R5cGUubmVlZEFscGhhQmxlbmRpbmdGb3JNZXNoID0gZnVuY3Rpb24gKG1lc2gp
IHsKKyAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVBbHBoYUJsZW5kaW5nICYmIG1lc2gudmlzaWJp
bGl0eSA+PSAxLjApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5uZWVkQWxwaGFCbGVuZGluZ0Zvck1lc2guY2Fs
bCh0aGlzLCBtZXNoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB3aGV0aGVy
IG9yIG5vdCB0aGlzIG1hdGVyaWFsIHNob3VsZCBiZSByZW5kZXJlZCBpbiBhbHBoYSB0ZXN0IG1v
ZGUuCisgICAgICovCisgICAgUEJSQmFzZU1hdGVyaWFsLnByb3RvdHlwZS5uZWVkQWxwaGFUZXN0
aW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fZm9yY2VBbHBoYVRlc3QpIHsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnN1
YlN1cmZhY2UuZGlzYWJsZUFscGhhQmxlbmRpbmcpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fYWxiZWRvVGV4dHVyZSAhPSBudWxs
ICYmIHRoaXMuX2FsYmVkb1RleHR1cmUuaGFzQWxwaGEgJiYgKHRoaXMuX3RyYW5zcGFyZW5jeU1v
ZGUgPT0gbnVsbCB8fCB0aGlzLl90cmFuc3BhcmVuY3lNb2RlID09PSBQQlJCYXNlTWF0ZXJpYWwu
UEJSTUFURVJJQUxfQUxQSEFURVNUKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNpZmll
cyB3aGV0aGVyIG9yIG5vdCB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGFsYmVkbyB0ZXh0dXJlIHNo
b3VsZCBiZSB1c2VkIGZvciBhbHBoYSBibGVuZGluZy4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0
ZXJpYWwucHJvdG90eXBlLl9zaG91bGRVc2VBbHBoYUZyb21BbGJlZG9UZXh0dXJlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYWxiZWRvVGV4dHVyZSAhPSBudWxsICYmIHRo
aXMuX2FsYmVkb1RleHR1cmUuaGFzQWxwaGEgJiYgdGhpcy5fdXNlQWxwaGFGcm9tQWxiZWRvVGV4
dHVyZSAmJiB0aGlzLl90cmFuc3BhcmVuY3lNb2RlICE9PSBQQlJCYXNlTWF0ZXJpYWwuUEJSTUFU
RVJJQUxfT1BBUVVFOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdGV4dHVyZSB1
c2VkIGZvciB0aGUgYWxwaGEgdGVzdC4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwucHJv
dG90eXBlLmdldEFscGhhVGVzdFRleHR1cmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biB0aGlzLl9hbGJlZG9UZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lmaWVz
IHRoYXQgdGhlIHN1Ym1lc2ggaXMgcmVhZHkgdG8gYmUgdXNlZC4KKyAgICAgKiBAcGFyYW0gbWVz
aCAtIEJKUyBtZXNoLgorICAgICAqIEBwYXJhbSBzdWJNZXNoIC0gQSBzdWJtZXNoIG9mIHRoZSBC
SlMgbWVzaC4gIFVzZWQgdG8gY2hlY2sgaWYgaXQgaXMgcmVhZHkuCisgICAgICogQHBhcmFtIHVz
ZUluc3RhbmNlcyAtIFNwZWNpZmllcyB0aGF0IGluc3RhbmNlcyBzaG91bGQgYmUgdXNlZC4KKyAg
ICAgKiBAcmV0dXJucyAtIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJl
YWR5IG9yIG5vdC4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwucHJvdG90eXBlLmlzUmVh
ZHlGb3JTdWJNZXNoID0gZnVuY3Rpb24gKG1lc2gsIHN1Yk1lc2gsIHVzZUluc3RhbmNlcykgewor
ICAgICAgICBpZiAoc3ViTWVzaC5lZmZlY3QgJiYgdGhpcy5pc0Zyb3plbikgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX3dhc1ByZXZpb3VzbHlSZWFkeSkgeworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghc3ViTWVzaC5f
bWF0ZXJpYWxEZWZpbmVzKSB7CisgICAgICAgICAgICBzdWJNZXNoLl9tYXRlcmlhbERlZmluZXMg
PSBuZXcgUEJSTWF0ZXJpYWxEZWZpbmVzKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRlZmlu
ZXMgPSBzdWJNZXNoLl9tYXRlcmlhbERlZmluZXM7CisgICAgICAgIGlmICghdGhpcy5jaGVja1Jl
YWR5T25FdmVyeUNhbGwgJiYgc3ViTWVzaC5lZmZlY3QpIHsKKyAgICAgICAgICAgIGlmIChkZWZp
bmVzLl9yZW5kZXJJZCA9PT0gdGhpcy5nZXRTY2VuZSgpLmdldFJlbmRlcklkKCkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7CisgICAgICAgIHZhciBlbmdpbmUgPSBzY2Vu
ZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZVRleHR1cmVzRGlydHkpIHsK
KyAgICAgICAgICAgIGlmIChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fYWxiZWRvVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2FsYmVkb1RleHR1cmUuaXNSZWFkeU9y
Tm90QmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9hbWJpZW50VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkFtYmllbnRUZXh0dXJlRW5hYmxlZCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2FtYmllbnRUZXh0dXJlLmlzUmVhZHlP
ck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fb3BhY2l0eVRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5PcGFjaXR5VGV4dHVyZUVuYWJsZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9vcGFjaXR5VGV4dHVyZS5pc1JlYWR5
T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdmFyIHJlZmxlY3Rpb25UZXh0dXJlID0gdGhpcy5fZ2V0UmVmbGVjdGlvblRleHR1cmUoKTsK
KyAgICAgICAgICAgICAgICBpZiAocmVmbGVjdGlvblRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5SZWZsZWN0aW9u
VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWZsZWN0aW9uVGV4
dHVyZS5pc1JlYWR5T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJlZmxlY3Rpb25UZXh0dXJlLmlycmFkaWFuY2VUZXh0dXJlICYmICFyZWZsZWN0aW9uVGV4
dHVyZS5pcnJhZGlhbmNlVGV4dHVyZS5pc1JlYWR5T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0bWFwVGV4dHVy
ZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJp
YWxGbGFncyJdLkxpZ2h0bWFwVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCF0aGlzLl9saWdodG1hcFRleHR1cmUuaXNSZWFkeU9yTm90QmxvY2tpbmcoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRl
eHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1h
dGVyaWFsRmxhZ3MiXS5FbWlzc2l2ZVRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghdGhpcy5fZW1pc3NpdmVUZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoX21hdGVyaWFsRmxh
Z3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5TcGVjdWxh
clRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhbGxp
Y1RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbWV0YWxsaWNU
ZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fcmVmbGVjdGl2
aXR5VGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWZsZWN0
aXZpdHlUZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21pY3JvU3Vy
ZmFjZVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbWljcm9T
dXJmYWNlVGV4dHVyZS5pc1JlYWR5T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChlbmdpbmUuZ2V0Q2FwcygpLnN0YW5kYXJkRGVyaXZhdGl2ZXMgJiYgdGhpcy5fYnVtcFRleHR1
cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVy
aWFsRmxhZ3MiXS5CdW1wVGV4dHVyZUVuYWJsZWQgJiYgIXRoaXMuX2Rpc2FibGVCdW1wTWFwKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEJ1bXAgdGV4dHVyZSBjYW5ub3QgYmUgbm90IGJsb2Nr
aW5nLgorICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2J1bXBUZXh0dXJlLmlzUmVhZHko
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9l
bnZpcm9ubWVudEJSREZUZXh0dXJlICYmIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yMF9fWyJNYXRlcmlhbEZsYWdzIl0uUmVmbGVjdGlvblRleHR1cmVFbmFibGVkKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYmxvY2tpbmcuCisgICAgICAgICAgICAg
ICAgICAgIGlmICghdGhpcy5fZW52aXJvbm1lbnRCUkRGVGV4dHVyZS5pc1JlYWR5KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXRoaXMuc3ViU3VyZmFjZS5pc1JlYWR5Rm9yU3ViTWVzaChkZWZpbmVzLCBzY2VuZSkgfHwK
KyAgICAgICAgICAgICF0aGlzLmNsZWFyQ29hdC5pc1JlYWR5Rm9yU3ViTWVzaChkZWZpbmVzLCBz
Y2VuZSwgZW5naW5lLCB0aGlzLl9kaXNhYmxlQnVtcE1hcCkgfHwKKyAgICAgICAgICAgICF0aGlz
LnNoZWVuLmlzUmVhZHlGb3JTdWJNZXNoKGRlZmluZXMsIHNjZW5lKSB8fAorICAgICAgICAgICAg
IXRoaXMuYW5pc290cm9weS5pc1JlYWR5Rm9yU3ViTWVzaChkZWZpbmVzLCBzY2VuZSkpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5f
YXJlSW1hZ2VQcm9jZXNzaW5nRGlydHkgJiYgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbikgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0
aW9uLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWVuZ2luZS5nZXRDYXBzKCkuc3RhbmRhcmRE
ZXJpdmF0aXZlcyAmJiAhbWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCkp
IHsKKyAgICAgICAgICAgIG1lc2guY3JlYXRlTm9ybWFscyh0cnVlKTsKKyAgICAgICAgICAgIF9N
aXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5XYXJuKCJQ
QlJNYXRlcmlhbDogTm9ybWFscyBoYXZlIGJlZW4gY3JlYXRlZCBmb3IgdGhlIG1lc2g6ICIgKyBt
ZXNoLm5hbWUpOworICAgICAgICB9CisgICAgICAgIHZhciBwcmV2aW91c0VmZmVjdCA9IHN1Yk1l
c2guZWZmZWN0OworICAgICAgICB2YXIgbGlnaHREaXNwb3NlZCA9IGRlZmluZXMuX2FyZUxpZ2h0
c0Rpc3Bvc2VkOworICAgICAgICB2YXIgZWZmZWN0ID0gdGhpcy5fcHJlcGFyZUVmZmVjdChtZXNo
LCBkZWZpbmVzLCB0aGlzLm9uQ29tcGlsZWQsIHRoaXMub25FcnJvciwgdXNlSW5zdGFuY2VzKTsK
KyAgICAgICAgaWYgKGVmZmVjdCkgeworICAgICAgICAgICAgLy8gVXNlIHByZXZpb3VzIGVmZmVj
dCB3aGlsZSBuZXcgb25lIGlzIGNvbXBpbGluZworICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dT
aGFkZXJIb3RTd2FwcGluZyAmJiBwcmV2aW91c0VmZmVjdCAmJiAhZWZmZWN0LmlzUmVhZHkoKSkg
eworICAgICAgICAgICAgICAgIGVmZmVjdCA9IHByZXZpb3VzRWZmZWN0OworICAgICAgICAgICAg
ICAgIHRoaXMuX3JlYnVpbGRJblBhcmFsbGVsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWZp
bmVzLm1hcmtBc1VucHJvY2Vzc2VkKCk7CisgICAgICAgICAgICAgICAgaWYgKGxpZ2h0RGlzcG9z
ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmUgcmVnaXN0ZXIgaW4gY2FzZSBpdCB0YWtl
cyBtb3JlIHRoYW4gb25lIGZyYW1lLgorICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLl9hcmVM
aWdodHNEaXNwb3NlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9yZWJ1aWxkSW5QYXJhbGxlbCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIHNjZW5lLnJlc2V0Q2FjaGVkTWF0ZXJpYWwoKTsKKyAgICAgICAgICAgICAgICBzdWJN
ZXNoLnNldEVmZmVjdChlZmZlY3QsIGRlZmluZXMpOworICAgICAgICAgICAgICAgIHRoaXMuYnVp
bGRVbmlmb3JtTGF5b3V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFzdWJNZXNoLmVmZmVjdCB8fCAhc3ViTWVzaC5lZmZlY3QuaXNSZWFkeSgpKSB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZGVmaW5lcy5fcmVuZGVySWQg
PSBzY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICB0aGlzLl93YXNQcmV2aW91c2x5UmVhZHkg
PSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNw
ZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwgdXNlcyBtZXRhbGxpYyByb3VnaG5lc3Mgd29ya2Zsb3cu
CisgICAgICogQHJldHVybnMgYm9vbGVhbiBzcGVjaWZpeWluZyBpZiB0aGUgbWF0ZXJpYWwgdXNl
cyBtZXRhbGxpYyByb3VnaG5lc3Mgd29ya2Zsb3cuCisgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJp
YWwucHJvdG90eXBlLmlzTWV0YWxsaWNXb3JrZmxvdyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKHRoaXMuX21ldGFsbGljICE9IG51bGwgfHwgdGhpcy5fcm91Z2huZXNzICE9IG51bGwgfHwg
dGhpcy5fbWV0YWxsaWNUZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICBQQlJCYXNlTWF0ZXJpYWwu
cHJvdG90eXBlLl9wcmVwYXJlRWZmZWN0ID0gZnVuY3Rpb24gKG1lc2gsIGRlZmluZXMsIG9uQ29t
cGlsZWQsIG9uRXJyb3IsIHVzZUluc3RhbmNlcywgdXNlQ2xpcFBsYW5lKSB7CisgICAgICAgIGlm
IChvbkNvbXBpbGVkID09PSB2b2lkIDApIHsgb25Db21waWxlZCA9IG51bGw7IH0KKyAgICAgICAg
aWYgKG9uRXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbnVsbDsgfQorICAgICAgICBpZiAo
dXNlSW5zdGFuY2VzID09PSB2b2lkIDApIHsgdXNlSW5zdGFuY2VzID0gbnVsbDsgfQorICAgICAg
ICBpZiAodXNlQ2xpcFBsYW5lID09PSB2b2lkIDApIHsgdXNlQ2xpcFBsYW5lID0gbnVsbDsgfQor
ICAgICAgICB0aGlzLl9wcmVwYXJlRGVmaW5lcyhtZXNoLCBkZWZpbmVzLCB1c2VJbnN0YW5jZXMs
IHVzZUNsaXBQbGFuZSk7CisgICAgICAgIGlmICghZGVmaW5lcy5pc0RpcnR5KSB7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBkZWZpbmVzLm1hcmtBc1Byb2Nl
c3NlZCgpOworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7CisgICAgICAgIHZh
ciBlbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgLy8gRmFsbGJhY2tzCisgICAg
ICAgIHZhciBmYWxsYmFja3MgPSBuZXcgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE1X19bIkVmZmVjdEZhbGxiYWNrcyJdKCk7CisgICAgICAgIHZhciBmYWxsYmFj
a1JhbmsgPSAwOworICAgICAgICBpZiAoZGVmaW5lcy5VU0VTUEhFUklDQUxJTlZFUlRFWCkgewor
ICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGZhbGxiYWNrUmFuaysrLCAiVVNFU1BI
RVJJQ0FMSU5WRVJURVgiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5GT0cpIHsK
KyAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjayhmYWxsYmFja1JhbmssICJGT0ciKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5TUEVDVUxBUkFBKSB7CisgICAgICAgICAg
ICBmYWxsYmFja3MuYWRkRmFsbGJhY2soZmFsbGJhY2tSYW5rLCAiU1BFQ1VMQVJBQSIpOworICAg
ICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLlBPSU5UU0laRSkgeworICAgICAgICAgICAgZmFs
bGJhY2tzLmFkZEZhbGxiYWNrKGZhbGxiYWNrUmFuaywgIlBPSU5UU0laRSIpOworICAgICAgICB9
CisgICAgICAgIGlmIChkZWZpbmVzLkxPR0FSSVRITUlDREVQVEgpIHsKKyAgICAgICAgICAgIGZh
bGxiYWNrcy5hZGRGYWxsYmFjayhmYWxsYmFja1JhbmssICJMT0dBUklUSE1JQ0RFUFRIIik7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGRlZmluZXMuUEFSQUxMQVgpIHsKKyAgICAgICAgICAgIGZh
bGxiYWNrcy5hZGRGYWxsYmFjayhmYWxsYmFja1JhbmssICJQQVJBTExBWCIpOworICAgICAgICB9
CisgICAgICAgIGlmIChkZWZpbmVzLlBBUkFMTEFYT0NDTFVTSU9OKSB7CisgICAgICAgICAgICBm
YWxsYmFja3MuYWRkRmFsbGJhY2soZmFsbGJhY2tSYW5rKyssICJQQVJBTExBWE9DQ0xVU0lPTiIp
OworICAgICAgICB9CisgICAgICAgIGZhbGxiYWNrUmFuayA9IF9wYnJBbmlzb3Ryb3BpY0NvbmZp
Z3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUEJSQW5pc290cm9waWNDb25m
aWd1cmF0aW9uIl0uQWRkRmFsbGJhY2tzKGRlZmluZXMsIGZhbGxiYWNrcywgZmFsbGJhY2tSYW5r
KTsKKyAgICAgICAgZmFsbGJhY2tSYW5rID0gX3BickFuaXNvdHJvcGljQ29uZmlndXJhdGlvbl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24i
XS5BZGRGYWxsYmFja3MoZGVmaW5lcywgZmFsbGJhY2tzLCBmYWxsYmFja1JhbmspOworICAgICAg
ICBmYWxsYmFja1JhbmsgPSBfcGJyU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEyX19bIlBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uIl0uQWRkRmFsbGJh
Y2tzKGRlZmluZXMsIGZhbGxiYWNrcywgZmFsbGJhY2tSYW5rKTsKKyAgICAgICAgZmFsbGJhY2tS
YW5rID0gX3BiclNoZWVuQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFf
X1siUEJSU2hlZW5Db25maWd1cmF0aW9uIl0uQWRkRmFsbGJhY2tzKGRlZmluZXMsIGZhbGxiYWNr
cywgZmFsbGJhY2tSYW5rKTsKKyAgICAgICAgaWYgKGRlZmluZXMuRU5WSVJPTk1FTlRCUkRGKSB7
CisgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJhY2soZmFsbGJhY2tSYW5rKyssICJFTlZJ
Uk9OTUVOVEJSREYiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5UQU5HRU5UKSB7
CisgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJhY2soZmFsbGJhY2tSYW5rKyssICJUQU5H
RU5UIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlZmluZXMuQlVNUCkgeworICAgICAgICAg
ICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGZhbGxiYWNrUmFuaysrLCAiQlVNUCIpOworICAgICAg
ICB9CisgICAgICAgIGZhbGxiYWNrUmFuayA9IF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIk1hdGVyaWFsSGVscGVyIl0uSGFuZGxlRmFsbGJh
Y2tzRm9yU2hhZG93cyhkZWZpbmVzLCBmYWxsYmFja3MsIHRoaXMuX21heFNpbXVsdGFuZW91c0xp
Z2h0cywgZmFsbGJhY2tSYW5rKyspOworICAgICAgICBpZiAoZGVmaW5lcy5TUEVDVUxBUlRFUk0p
IHsKKyAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjayhmYWxsYmFja1JhbmsrKywgIlNQ
RUNVTEFSVEVSTSIpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLlVTRVNQSEVSSUNB
TEZST01SRUZMRUNUSU9OTUFQKSB7CisgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJhY2so
ZmFsbGJhY2tSYW5rKyssICJVU0VTUEhFUklDQUxGUk9NUkVGTEVDVElPTk1BUCIpOworICAgICAg
ICB9CisgICAgICAgIGlmIChkZWZpbmVzLlVTRUlSUkFESUFOQ0VNQVApIHsKKyAgICAgICAgICAg
IGZhbGxiYWNrcy5hZGRGYWxsYmFjayhmYWxsYmFja1JhbmsrKywgIlVTRUlSUkFESUFOQ0VNQVAi
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5MSUdIVE1BUCkgeworICAgICAgICAg
ICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGZhbGxiYWNrUmFuaysrLCAiTElHSFRNQVAiKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5OT1JNQUwpIHsKKyAgICAgICAgICAgIGZhbGxi
YWNrcy5hZGRGYWxsYmFjayhmYWxsYmFja1JhbmsrKywgIk5PUk1BTCIpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChkZWZpbmVzLkFNQklFTlQpIHsKKyAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRG
YWxsYmFjayhmYWxsYmFja1JhbmsrKywgIkFNQklFTlQiKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZGVmaW5lcy5FTUlTU0lWRSkgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNr
KGZhbGxiYWNrUmFuaysrLCAiRU1JU1NJVkUiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVm
aW5lcy5WRVJURVhDT0xPUikgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGZh
bGxiYWNrUmFuaysrLCAiVkVSVEVYQ09MT1IiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVm
aW5lcy5NT1JQSFRBUkdFVFMpIHsKKyAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjayhm
YWxsYmFja1JhbmsrKywgIk1PUlBIVEFSR0VUUyIpOworICAgICAgICB9CisgICAgICAgIGlmIChk
ZWZpbmVzLk1VTFRJVklFVykgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKDAs
ICJNVUxUSVZJRVciKTsKKyAgICAgICAgfQorICAgICAgICAvL0F0dHJpYnV0ZXMKKyAgICAgICAg
dmFyIGF0dHJpYnMgPSBbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
X1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgaWYgKGRlZmluZXMuTk9S
TUFMKSB7CisgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGRlZmluZXMuVEFOR0VOVCkgeworICAgICAgICAgICAgYXR0cmlicy5w
dXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1
ZmZlciJdLlRhbmdlbnRLaW5kKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5VVjEp
IHsKKyAgICAgICAgICAgIGF0dHJpYnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfN19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICB9CisgICAg
ICAgIGlmIChkZWZpbmVzLlVWMikgeworICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLlVWMktp
bmQpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLlZFUlRFWENPTE9SKSB7CisgICAg
ICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAgICAgfQorICAgICAgICBf
TWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJN
YXRlcmlhbEhlbHBlciJdLlByZXBhcmVBdHRyaWJ1dGVzRm9yQm9uZXMoYXR0cmlicywgbWVzaCwg
ZGVmaW5lcywgZmFsbGJhY2tzKTsKKyAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlQXR0
cmlidXRlc0Zvckluc3RhbmNlcyhhdHRyaWJzLCBkZWZpbmVzKTsKKyAgICAgICAgX01hdGVyaWFs
c19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxI
ZWxwZXIiXS5QcmVwYXJlQXR0cmlidXRlc0Zvck1vcnBoVGFyZ2V0cyhhdHRyaWJzLCBtZXNoLCBk
ZWZpbmVzKTsKKyAgICAgICAgdmFyIHNoYWRlck5hbWUgPSAicGJyIjsKKyAgICAgICAgdmFyIHVu
aWZvcm1zID0gWyJ3b3JsZCIsICJ2aWV3IiwgInZpZXdQcm9qZWN0aW9uIiwgInZFeWVQb3NpdGlv
biIsICJ2TGlnaHRzVHlwZSIsICJ2QW1iaWVudENvbG9yIiwgInZBbGJlZG9Db2xvciIsICJ2UmVm
bGVjdGl2aXR5Q29sb3IiLCAidkVtaXNzaXZlQ29sb3IiLCAidmlzaWJpbGl0eSIsICJ2UmVmbGVj
dGlvbkNvbG9yIiwKKyAgICAgICAgICAgICJ2Rm9nSW5mb3MiLCAidkZvZ0NvbG9yIiwgInBvaW50
U2l6ZSIsCisgICAgICAgICAgICAidkFsYmVkb0luZm9zIiwgInZBbWJpZW50SW5mb3MiLCAidk9w
YWNpdHlJbmZvcyIsICJ2UmVmbGVjdGlvbkluZm9zIiwgInZSZWZsZWN0aW9uUG9zaXRpb24iLCAi
dlJlZmxlY3Rpb25TaXplIiwgInZFbWlzc2l2ZUluZm9zIiwgInZSZWZsZWN0aXZpdHlJbmZvcyIs
CisgICAgICAgICAgICAidk1pY3JvU3VyZmFjZVNhbXBsZXJJbmZvcyIsICJ2QnVtcEluZm9zIiwg
InZMaWdodG1hcEluZm9zIiwKKyAgICAgICAgICAgICJtQm9uZXMiLAorICAgICAgICAgICAgInZD
bGlwUGxhbmUiLCAidkNsaXBQbGFuZTIiLCAidkNsaXBQbGFuZTMiLCAidkNsaXBQbGFuZTQiLCAi
YWxiZWRvTWF0cml4IiwgImFtYmllbnRNYXRyaXgiLCAib3BhY2l0eU1hdHJpeCIsICJyZWZsZWN0
aW9uTWF0cml4IiwgImVtaXNzaXZlTWF0cml4IiwgInJlZmxlY3Rpdml0eU1hdHJpeCIsICJub3Jt
YWxNYXRyaXgiLCAibWljcm9TdXJmYWNlU2FtcGxlck1hdHJpeCIsICJidW1wTWF0cml4IiwgImxp
Z2h0bWFwTWF0cml4IiwKKyAgICAgICAgICAgICJ2TGlnaHRpbmdJbnRlbnNpdHkiLAorICAgICAg
ICAgICAgImxvZ2FyaXRobWljRGVwdGhDb25zdGFudCIsCisgICAgICAgICAgICAidlNwaGVyaWNh
bFgiLCAidlNwaGVyaWNhbFkiLCAidlNwaGVyaWNhbFoiLAorICAgICAgICAgICAgInZTcGhlcmlj
YWxYWF9aWiIsICJ2U3BoZXJpY2FsWVlfWloiLCAidlNwaGVyaWNhbFpaIiwKKyAgICAgICAgICAg
ICJ2U3BoZXJpY2FsWFkiLCAidlNwaGVyaWNhbFlaIiwgInZTcGhlcmljYWxaWCIsCisgICAgICAg
ICAgICAidlNwaGVyaWNhbEwwMCIsCisgICAgICAgICAgICAidlNwaGVyaWNhbEwxXzEiLCAidlNw
aGVyaWNhbEwxMCIsICJ2U3BoZXJpY2FsTDExIiwKKyAgICAgICAgICAgICJ2U3BoZXJpY2FsTDJf
MiIsICJ2U3BoZXJpY2FsTDJfMSIsICJ2U3BoZXJpY2FsTDIwIiwgInZTcGhlcmljYWxMMjEiLCAi
dlNwaGVyaWNhbEwyMiIsCisgICAgICAgICAgICAidlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZv
cyIsCisgICAgICAgICAgICAidlRhbmdlbnRTcGFjZVBhcmFtcyIsICJib25lVGV4dHVyZVdpZHRo
IiwKKyAgICAgICAgICAgICJ2RGVidWdNb2RlIgorICAgICAgICBdOworICAgICAgICB2YXIgc2Ft
cGxlcnMgPSBbImFsYmVkb1NhbXBsZXIiLCAicmVmbGVjdGl2aXR5U2FtcGxlciIsICJhbWJpZW50
U2FtcGxlciIsICJlbWlzc2l2ZVNhbXBsZXIiLAorICAgICAgICAgICAgImJ1bXBTYW1wbGVyIiwg
ImxpZ2h0bWFwU2FtcGxlciIsICJvcGFjaXR5U2FtcGxlciIsCisgICAgICAgICAgICAicmVmbGVj
dGlvblNhbXBsZXIiLCAicmVmbGVjdGlvblNhbXBsZXJMb3ciLCAicmVmbGVjdGlvblNhbXBsZXJI
aWdoIiwgImlycmFkaWFuY2VTYW1wbGVyIiwKKyAgICAgICAgICAgICJtaWNyb1N1cmZhY2VTYW1w
bGVyIiwgImVudmlyb25tZW50QnJkZlNhbXBsZXIiLCAiYm9uZVNhbXBsZXIiXTsKKyAgICAgICAg
dmFyIHVuaWZvcm1CdWZmZXJzID0gWyJNYXRlcmlhbCIsICJTY2VuZSIsICJNZXNoIl07CisgICAg
ICAgIF9wYnJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTJfX1siUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24iXS5BZGRVbmlmb3Jtcyh1bmlmb3Jtcyk7
CisgICAgICAgIF9wYnJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTJfX1siUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24iXS5BZGRTYW1wbGVycyhzYW1w
bGVycyk7CisgICAgICAgIF9wYnJDbGVhckNvYXRDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV84X19bIlBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24iXS5BZGRVbmlmb3Jtcyh1
bmlmb3Jtcyk7CisgICAgICAgIF9wYnJDbGVhckNvYXRDb25maWd1cmF0aW9uX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV84X19bIlBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24iXS5BZGRTYW1wbGVy
cyhzYW1wbGVycyk7CisgICAgICAgIF9wYnJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb25fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfX1siUEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uIl0uQWRk
VW5pZm9ybXModW5pZm9ybXMpOworICAgICAgICBfcGJyQW5pc290cm9waWNDb25maWd1cmF0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlBCUkFuaXNvdHJvcGljQ29uZmlndXJhdGlv
biJdLkFkZFNhbXBsZXJzKHNhbXBsZXJzKTsKKyAgICAgICAgX3BiclNoZWVuQ29uZmlndXJhdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siUEJSU2hlZW5Db25maWd1cmF0aW9uIl0u
QWRkVW5pZm9ybXModW5pZm9ybXMpOworICAgICAgICBfcGJyU2hlZW5Db25maWd1cmF0aW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJQQlJTaGVlbkNvbmZpZ3VyYXRpb24iXS5BZGRT
YW1wbGVycyhzYW1wbGVycyk7CisgICAgICAgIGlmIChfTWF0ZXJpYWxzX2ltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24iXSkgeworICAgICAgICAgICAgX01hdGVyaWFsc19pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJJbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uIl0uUHJlcGFyZVVuaWZvcm1zKHVuaWZvcm1zLCBkZWZpbmVz
KTsKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
biJdLlByZXBhcmVTYW1wbGVycyhzYW1wbGVycywgZGVmaW5lcyk7CisgICAgICAgIH0KKyAgICAg
ICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThf
X1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlVW5pZm9ybXNBbmRTYW1wbGVyc0xpc3QoeworICAg
ICAgICAgICAgdW5pZm9ybXNOYW1lczogdW5pZm9ybXMsCisgICAgICAgICAgICB1bmlmb3JtQnVm
ZmVyc05hbWVzOiB1bmlmb3JtQnVmZmVycywKKyAgICAgICAgICAgIHNhbXBsZXJzOiBzYW1wbGVy
cywKKyAgICAgICAgICAgIGRlZmluZXM6IGRlZmluZXMsCisgICAgICAgICAgICBtYXhTaW11bHRh
bmVvdXNMaWdodHM6IHRoaXMuX21heFNpbXVsdGFuZW91c0xpZ2h0cworICAgICAgICB9KTsKKyAg
ICAgICAgaWYgKHRoaXMuY3VzdG9tU2hhZGVyTmFtZVJlc29sdmUpIHsKKyAgICAgICAgICAgIHNo
YWRlck5hbWUgPSB0aGlzLmN1c3RvbVNoYWRlck5hbWVSZXNvbHZlKHNoYWRlck5hbWUsIHVuaWZv
cm1zLCB1bmlmb3JtQnVmZmVycywgc2FtcGxlcnMsIGRlZmluZXMpOworICAgICAgICB9CisgICAg
ICAgIHZhciBqb2luID0gZGVmaW5lcy50b1N0cmluZygpOworICAgICAgICByZXR1cm4gZW5naW5l
LmNyZWF0ZUVmZmVjdChzaGFkZXJOYW1lLCB7CisgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhdHRy
aWJzLAorICAgICAgICAgICAgdW5pZm9ybXNOYW1lczogdW5pZm9ybXMsCisgICAgICAgICAgICB1
bmlmb3JtQnVmZmVyc05hbWVzOiB1bmlmb3JtQnVmZmVycywKKyAgICAgICAgICAgIHNhbXBsZXJz
OiBzYW1wbGVycywKKyAgICAgICAgICAgIGRlZmluZXM6IGpvaW4sCisgICAgICAgICAgICBmYWxs
YmFja3M6IGZhbGxiYWNrcywKKyAgICAgICAgICAgIG9uQ29tcGlsZWQ6IG9uQ29tcGlsZWQsCisg
ICAgICAgICAgICBvbkVycm9yOiBvbkVycm9yLAorICAgICAgICAgICAgaW5kZXhQYXJhbWV0ZXJz
OiB7IG1heFNpbXVsdGFuZW91c0xpZ2h0czogdGhpcy5fbWF4U2ltdWx0YW5lb3VzTGlnaHRzLCBt
YXhTaW11bHRhbmVvdXNNb3JwaFRhcmdldHM6IGRlZmluZXMuTlVNX01PUlBIX0lORkxVRU5DRVJT
IH0KKyAgICAgICAgfSwgZW5naW5lKTsKKyAgICB9OworICAgIFBCUkJhc2VNYXRlcmlhbC5wcm90
b3R5cGUuX3ByZXBhcmVEZWZpbmVzID0gZnVuY3Rpb24gKG1lc2gsIGRlZmluZXMsIHVzZUluc3Rh
bmNlcywgdXNlQ2xpcFBsYW5lKSB7CisgICAgICAgIGlmICh1c2VJbnN0YW5jZXMgPT09IHZvaWQg
MCkgeyB1c2VJbnN0YW5jZXMgPSBudWxsOyB9CisgICAgICAgIGlmICh1c2VDbGlwUGxhbmUgPT09
IHZvaWQgMCkgeyB1c2VDbGlwUGxhbmUgPSBudWxsOyB9CisgICAgICAgIHZhciBzY2VuZSA9IHRo
aXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOwor
ICAgICAgICAvLyBMaWdodHMKKyAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5l
c0ZvckxpZ2h0cyhzY2VuZSwgbWVzaCwgZGVmaW5lcywgdHJ1ZSwgdGhpcy5fbWF4U2ltdWx0YW5l
b3VzTGlnaHRzLCB0aGlzLl9kaXNhYmxlTGlnaHRpbmcpOworICAgICAgICBkZWZpbmVzLl9uZWVk
Tm9ybWFscyA9IHRydWU7CisgICAgICAgIC8vIE11bHRpdmlldworICAgICAgICBfTWF0ZXJpYWxz
X21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRlcmlhbEhl
bHBlciJdLlByZXBhcmVEZWZpbmVzRm9yTXVsdGl2aWV3KHNjZW5lLCBkZWZpbmVzKTsKKyAgICAg
ICAgLy8gVGV4dHVyZXMKKyAgICAgICAgZGVmaW5lcy5NRVRBTExJQ1dPUktGTE9XID0gdGhpcy5p
c01ldGFsbGljV29ya2Zsb3coKTsKKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZVRleHR1cmVzRGly
dHkpIHsKKyAgICAgICAgICAgIGRlZmluZXMuX25lZWRVVnMgPSBmYWxzZTsKKyAgICAgICAgICAg
IGlmIChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2NlbmUu
Z2V0RW5naW5lKCkuZ2V0Q2FwcygpLnRleHR1cmVMT0QpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lcy5MT0RCQVNFRE1JQ1JPU0ZVUkFDRSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hbGJlZG9UZXh0dXJlICYmIF9tYXRlcmlhbEZsYWdz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJNYXRlcmlhbEZsYWdzIl0uRGlmZnVzZVRl
eHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxI
ZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIk1hdGVyaWFsSGVscGVyIl0uUHJl
cGFyZURlZmluZXNGb3JNZXJnZWRVVih0aGlzLl9hbGJlZG9UZXh0dXJlLCBkZWZpbmVzLCAiQUxC
RURPIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBkZWZpbmVzLkFMQkVETyA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAodGhpcy5fYW1iaWVudFRleHR1cmUgJiYgX21hdGVyaWFsRmxh
Z3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5BbWJpZW50
VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlh
bEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5Q
cmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX2FtYmllbnRUZXh0dXJlLCBkZWZpbmVzLCAi
QU1CSUVOVCIpOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkFNQklFTlRJTkdSQVlTQ0FM
RSA9IHRoaXMuX3VzZUFtYmllbnRJbkdyYXlTY2FsZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuQU1CSUVOVCA9
IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3Bh
Y2l0eVRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIw
X19bIk1hdGVyaWFsRmxhZ3MiXS5PcGFjaXR5VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMu
X29wYWNpdHlUZXh0dXJlLCBkZWZpbmVzLCAiT1BBQ0lUWSIpOworICAgICAgICAgICAgICAgICAg
ICBkZWZpbmVzLk9QQUNJVFlSR0IgPSB0aGlzLl9vcGFjaXR5VGV4dHVyZS5nZXRBbHBoYUZyb21S
R0I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBkZWZpbmVzLk9QQUNJVFkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdmFyIHJlZmxlY3Rpb25UZXh0dXJlID0gdGhpcy5fZ2V0UmVmbGVjdGlv
blRleHR1cmUoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVmbGVjdGlvblRleHR1cmUgJiYgX21h
dGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3Mi
XS5SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5l
cy5SRUZMRUNUSU9OID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5HQU1NQVJF
RkxFQ1RJT04gPSByZWZsZWN0aW9uVGV4dHVyZS5nYW1tYVNwYWNlOworICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLlJHQkRSRUZMRUNUSU9OID0gcmVmbGVjdGlvblRleHR1cmUuaXNSR0JEOwor
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfT1BQT1NJVEVaID0gdGhp
cy5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVtID8gIXJlZmxlY3Rpb25UZXh0dXJlLmlu
dmVydFogOiByZWZsZWN0aW9uVGV4dHVyZS5pbnZlcnRaOworICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLkxPRElOUkVGTEVDVElPTkFMUEhBID0gcmVmbGVjdGlvblRleHR1cmUubG9kTGV2ZWxJ
bkFscGhhOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkxJTkVBUlNQRUNVTEFSUkVGTEVD
VElPTiA9IHJlZmxlY3Rpb25UZXh0dXJlLmxpbmVhclNwZWN1bGFyTE9EOworICAgICAgICAgICAg
ICAgICAgICBpZiAocmVmbGVjdGlvblRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfTWF0ZXJp
YWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlRleHR1
cmUiXS5JTlZDVUJJQ19NT0RFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLklO
VkVSVENVQklDTUFQID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfM0QgPSByZWZsZWN0aW9uVGV4dHVyZS5pc0N1
YmU7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9DVUJJQyA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfRVhQTElDSVQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1BMQU5B
UiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfUFJP
SkVDVElPTiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05N
QVBfU0tZQk9YID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElP
Tk1BUF9TUEhFUklDQUwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZM
RUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxBUiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLlJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSX0ZJWEVEID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9NSVJST1JFREVRVUlSRUNUQU5H
VUxBUl9GSVhFRCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJ
T05NQVBfU0tZQk9YX1RSQU5TRk9STUVEID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAocmVmbGVjdGlvblRleHR1cmUuY29vcmRpbmF0ZXNNb2RlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTlfX1siVGV4dHVyZSJdLkVYUExJQ0lUX01PREU6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX0VYUExJQ0lUID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xOV9fWyJUZXh0dXJlIl0uUExBTkFSX01PREU6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1BMQU5BUiA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlh
bHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siVGV4dHVy
ZSJdLlBST0pFQ1RJT05fTU9ERToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVz
LlJFRkxFQ1RJT05NQVBfUFJPSkVDVElPTiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siVGV4dHVyZSJdLlNL
WUJPWF9NT0RFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElP
Tk1BUF9TS1lCT1ggPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlRleHR1cmUiXS5TUEhFUklDQUxfTU9ERToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfU1BIRVJJ
Q0FMID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xOV9fWyJUZXh0dXJlIl0uRVFVSVJFQ1RBTkdVTEFSX01PREU6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX0VRVUlSRUNU
QU5HVUxBUiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siVGV4dHVyZSJdLkZJWEVEX0VRVUlSRUNUQU5HVUxB
Ul9NT0RFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1B
UF9FUVVJUkVDVEFOR1VMQVJfRklYRUQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfTWF0ZXJpYWxzX1RleHR1
cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlRleHR1cmUiXS5GSVhF
RF9FUVVJUkVDVEFOR1VMQVJfTUlSUk9SRURfTU9ERToKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfTUlSUk9SRURFUVVJUkVDVEFOR1VMQVJfRklYRUQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE5X19bIlRleHR1cmUiXS5DVUJJQ19NT0RFOgorICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE5X19bIlRleHR1cmUiXS5JTlZDVUJJQ19NT0RFOgorICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJF
RkxFQ1RJT05NQVBfQ1VCSUMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmluZXMuVVNFX0xPQ0FMX1JFRkxFQ1RJT05NQVBfQ1VCSUMgPSByZWZsZWN0aW9uVGV4dHVyZS5i
b3VuZGluZ0JveFNpemUgPyB0cnVlIDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KHJlZmxlY3Rpb25UZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSAhPT0gX01hdGVyaWFsc19UZXh0dXJl
c190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJUZXh0dXJlIl0uU0tZQk9Y
X01PREUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZsZWN0aW9uVGV4dHVyZS5p
cnJhZGlhbmNlVGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMu
VVNFSVJSQURJQU5DRU1BUCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
aW5lcy5VU0VTUEhFUklDQUxGUk9NUkVGTEVDVElPTk1BUCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmbGVjdGlv
blRleHR1cmUuc3BoZXJpY2FsUG9seW5vbWlhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmluZXMuVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05NQVAgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuVVNFSVJSQURJQU5DRU1BUCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mb3JjZUlycmFkaWFuY2VJbkZy
YWdtZW50IHx8IHNjZW5lLmdldEVuZ2luZSgpLmdldENhcHMoKS5tYXhWYXJ5aW5nVmVjdG9ycyA8
PSA4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuVVNFU1BIRVJJ
Q0FMSU5WRVJURVggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuVVNFU1BIRVJJQ0FMSU5WRVJURVggPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9TS1lCT1hfVFJBTlNGT1JNRUQgPSAhcmVmbGVj
dGlvblRleHR1cmUuZ2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXgoKS5pc0lkZW50aXR5KCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTiA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfM0QgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1NQSEVSSUNBTCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfUExBTkFSID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9DVUJJQyA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlVTRV9MT0NBTF9SRUZMRUNUSU9OTUFQ
X0NVQklDID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1B
UF9QUk9KRUNUSU9OID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVD
VElPTk1BUF9TS1lCT1ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZM
RUNUSU9OTUFQX1NLWUJPWF9UUkFOU0ZPUk1FRCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfRVhQTElDSVQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxBUiA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSX0ZJ
WEVEID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9N
SVJST1JFREVRVUlSRUNUQU5HVUxBUl9GSVhFRCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBkZWZpbmVzLklOVkVSVENVQklDTUFQID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmluZXMuVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05NQVAgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lcy5VU0VJUlJBRElBTkNFTUFQID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuVVNFU1BIRVJJQ0FMSU5WRVJURVggPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX09QUE9TSVRFWiA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBkZWZpbmVzLkxPRElOUkVGTEVDVElPTkFMUEhBID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmluZXMuR0FNTUFSRUZMRUNUSU9OID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmluZXMuUkdCRFJFRkxFQ1RJT04gPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lcy5MSU5FQVJTUEVDVUxBUlJFRkxFQ1RJT04gPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSAm
JiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxG
bGFncyJdLkxpZ2h0bWFwVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgX01h
dGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0
ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX2xpZ2h0bWFwVGV4
dHVyZSwgZGVmaW5lcywgIkxJR0hUTUFQIik7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMu
VVNFTElHSFRNQVBBU1NIQURPV01BUCA9IHRoaXMuX3VzZUxpZ2h0bWFwQXNTaGFkb3dtYXA7Cisg
ICAgICAgICAgICAgICAgICAgIGRlZmluZXMuR0FNTUFMSUdIVE1BUCA9IHRoaXMuX2xpZ2h0bWFw
VGV4dHVyZS5nYW1tYVNwYWNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJHQkRMSUdI
VE1BUCA9IHRoaXMuX2xpZ2h0bWFwVGV4dHVyZS5pc1JHQkQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkxJR0hU
TUFQID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlz
Ll9lbWlzc2l2ZVRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5FbWlzc2l2ZVRleHR1cmVFbmFibGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE4X19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JNZXJnZWRV
Vih0aGlzLl9lbWlzc2l2ZVRleHR1cmUsIGRlZmluZXMsICJFTUlTU0lWRSIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVm
aW5lcy5FTUlTU0lWRSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVy
aWFsRmxhZ3MiXS5TcGVjdWxhclRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9tZXRhbGxpY1RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9N
YXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIk1h
dGVyaWFsSGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JNZXJnZWRVVih0aGlzLl9tZXRhbGxpY1Rl
eHR1cmUsIGRlZmluZXMsICJSRUZMRUNUSVZJVFkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmluZXMuUk9VR0hORVNTU1RPUkVJTk1FVEFMTUFQQUxQSEEgPSB0aGlzLl91c2VSb3VnaG5l
c3NGcm9tTWV0YWxsaWNUZXh0dXJlQWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZp
bmVzLlJPVUdITkVTU1NUT1JFSU5NRVRBTE1BUEdSRUVOID0gIXRoaXMuX3VzZVJvdWdobmVzc0Zy
b21NZXRhbGxpY1RleHR1cmVBbHBoYSAmJiB0aGlzLl91c2VSb3VnaG5lc3NGcm9tTWV0YWxsaWNU
ZXh0dXJlR3JlZW47CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLk1FVEFMTE5FU1NT
VE9SRUlOTUVUQUxNQVBCTFVFID0gdGhpcy5fdXNlTWV0YWxsbmVzc0Zyb21NZXRhbGxpY1RleHR1
cmVCbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5BT1NUT1JFSU5NRVRBTE1B
UFJFRCA9IHRoaXMuX3VzZUFtYmllbnRPY2NsdXNpb25Gcm9tTWV0YWxsaWNUZXh0dXJlUmVkOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMu
X3JlZmxlY3Rpdml0eVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9NYXRlcmlh
bHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIk1hdGVyaWFs
SGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JNZXJnZWRVVih0aGlzLl9yZWZsZWN0aXZpdHlUZXh0
dXJlLCBkZWZpbmVzLCAiUkVGTEVDVElWSVRZIik7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLk1JQ1JPU1VSRkFDRUZST01SRUZMRUNUSVZJVFlNQVAgPSB0aGlzLl91c2VNaWNyb1N1
cmZhY2VGcm9tUmVmbGVjdGl2aXR5TWFwQWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLk1JQ1JPU1VSRkFDRUFVVE9NQVRJQyA9IHRoaXMuX3VzZUF1dG9NaWNyb1N1cmZhY2VG
cm9tUmVmbGVjdGl2aXR5TWFwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSVZJ
VFkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fbWljcm9TdXJmYWNlVGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
X01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1si
TWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX21pY3JvU3Vy
ZmFjZVRleHR1cmUsIGRlZmluZXMsICJNSUNST1NVUkZBQ0VNQVAiKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmluZXMuTUlDUk9TVVJGQUNFTUFQID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElWSVRZID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmluZXMuTUlDUk9TVVJGQUNFTUFQID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChzY2VuZS5nZXRFbmdpbmUoKS5nZXRDYXBzKCkuc3RhbmRhcmRE
ZXJpdmF0aXZlcyAmJiB0aGlzLl9idW1wVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkJ1bXBUZXh0dXJlRW5hYmxl
ZCAmJiAhdGhpcy5fZGlzYWJsZUJ1bXBNYXApIHsKKyAgICAgICAgICAgICAgICAgICAgX01hdGVy
aWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJp
YWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX2J1bXBUZXh0dXJlLCBk
ZWZpbmVzLCAiQlVNUCIpOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdXNlUGFyYWxs
YXggJiYgdGhpcy5fYWxiZWRvVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5QQVJBTExBWCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlBBUkFMTEFYT0NDTFVTSU9OID0gISF0aGlzLl91
c2VQYXJhbGxheE9jY2x1c2lvbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUEFSQUxMQVgg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZWZp
bmVzLk9CSkVDVFNQQUNFX05PUk1BTE1BUCA9IHRoaXMuX3VzZU9iamVjdFNwYWNlTm9ybWFsTWFw
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lcy5CVU1QID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9lbnZpcm9ubWVudEJSREZUZXh0dXJlICYmIF9tYXRlcmlhbEZs
YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJNYXRlcmlhbEZsYWdzIl0uUmVmbGVj
dGlvblRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuRU5WSVJP
Tk1FTlRCUkRGID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5FTlZJUk9OTUVO
VEJSREZfUkdCRCA9IHRoaXMuX2Vudmlyb25tZW50QlJERlRleHR1cmUuaXNSR0JEOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lcy5FTlZJUk9OTUVOVEJSREYgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVm
aW5lcy5FTlZJUk9OTUVOVEJSREZfUkdCRCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkVXNlQWxwaGFGcm9tQWxiZWRvVGV4dHVyZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuQUxQSEFGUk9NQUxCRURPID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuQUxQSEFGUk9NQUxCRURPID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmaW5lcy5TUEVDVUxBUk9WRVJBTFBIQSA9
IHRoaXMuX3VzZVNwZWN1bGFyT3ZlckFscGhhOworICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0
RmFsbG9mZiA9PT0gUEJSQmFzZU1hdGVyaWFsLkxJR0hURkFMTE9GRl9TVEFOREFSRCkgeworICAg
ICAgICAgICAgICAgIGRlZmluZXMuVVNFUEhZU0lDQUxMSUdIVEZBTExPRkYgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBkZWZpbmVzLlVTRUdMVEZMSUdIVEZBTExPRkYgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2xpZ2h0RmFsbG9mZiA9PT0gUEJS
QmFzZU1hdGVyaWFsLkxJR0hURkFMTE9GRl9HTFRGKSB7CisgICAgICAgICAgICAgICAgZGVmaW5l
cy5VU0VQSFlTSUNBTExJR0hURkFMTE9GRiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmlu
ZXMuVVNFR0xURkxJR0hURkFMTE9GRiA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLlVTRVBIWVNJQ0FMTElHSFRGQUxMT0ZG
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLlVTRUdMVEZMSUdIVEZBTExPRkYgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmluZXMuUkFESUFOQ0VPVkVSQUxQ
SEEgPSB0aGlzLl91c2VSYWRpYW5jZU92ZXJBbHBoYTsKKyAgICAgICAgICAgIGlmICghdGhpcy5i
YWNrRmFjZUN1bGxpbmcgJiYgdGhpcy5fdHdvU2lkZWRMaWdodGluZykgeworICAgICAgICAgICAg
ICAgIGRlZmluZXMuVFdPU0lERURMSUdIVElORyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLlRXT1NJREVETElHSFRJTkcg
PSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmluZXMuU1BFQ1VMQVJBQSA9
IHNjZW5lLmdldEVuZ2luZSgpLmdldENhcHMoKS5zdGFuZGFyZERlcml2YXRpdmVzICYmIHRoaXMu
X2VuYWJsZVNwZWN1bGFyQW50aUFsaWFzaW5nOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZp
bmVzLl9hcmVUZXh0dXJlc0RpcnR5IHx8IGRlZmluZXMuX2FyZU1pc2NEaXJ0eSkgeworICAgICAg
ICAgICAgZGVmaW5lcy5BTFBIQVRFU1RWQUxVRSA9ICIiICsgdGhpcy5fYWxwaGFDdXRPZmYgKyAo
dGhpcy5fYWxwaGFDdXRPZmYgJSAxID09PSAwID8gIi4iIDogIiIpOworICAgICAgICAgICAgZGVm
aW5lcy5QUkVNVUxUSVBMWUFMUEhBID0gKHRoaXMuYWxwaGFNb2RlID09PSBfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIkNvbnN0YW50cyJdLkFMUEhBX1BS
RU1VTFRJUExJRUQgfHwgdGhpcy5hbHBoYU1vZGUgPT09IF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siQ29uc3RhbnRzIl0uQUxQSEFfUFJFTVVMVElQTElF
RF9QT1JURVJEVUZGKTsKKyAgICAgICAgICAgIGRlZmluZXMuQUxQSEFCTEVORCA9IHRoaXMubmVl
ZEFscGhhQmxlbmRpbmdGb3JNZXNoKG1lc2gpOworICAgICAgICAgICAgZGVmaW5lcy5BTFBIQUZS
RVNORUwgPSB0aGlzLl91c2VBbHBoYUZyZXNuZWwgfHwgdGhpcy5fdXNlTGluZWFyQWxwaGFGcmVz
bmVsOworICAgICAgICAgICAgZGVmaW5lcy5MSU5FQVJBTFBIQUZSRVNORUwgPSB0aGlzLl91c2VM
aW5lYXJBbHBoYUZyZXNuZWw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZUlt
YWdlUHJvY2Vzc2luZ0RpcnR5ICYmIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJlcGFy
ZURlZmluZXMoZGVmaW5lcyk7CisgICAgICAgIH0KKyAgICAgICAgZGVmaW5lcy5GT1JDRU5PUk1B
TEZPUldBUkQgPSB0aGlzLl9mb3JjZU5vcm1hbEZvcndhcmQ7CisgICAgICAgIGRlZmluZXMuUkFE
SUFOQ0VPQ0NMVVNJT04gPSB0aGlzLl91c2VSYWRpYW5jZU9jY2x1c2lvbjsKKyAgICAgICAgZGVm
aW5lcy5IT1JJWk9OT0NDTFVTSU9OID0gdGhpcy5fdXNlSG9yaXpvbk9jY2x1c2lvbjsKKyAgICAg
ICAgLy8gTWlzYy4KKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZU1pc2NEaXJ0eSkgeworICAgICAg
ICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MThfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1pc2MobWVzaCwgc2NlbmUs
IHRoaXMuX3VzZUxvZ2FyaXRobWljRGVwdGgsIHRoaXMucG9pbnRzQ2xvdWQsIHRoaXMuZm9nRW5h
YmxlZCwgdGhpcy5fc2hvdWxkVHVybkFscGhhVGVzdE9uKG1lc2gpIHx8IHRoaXMuX2ZvcmNlQWxw
aGFUZXN0LCBkZWZpbmVzKTsKKyAgICAgICAgICAgIGRlZmluZXMuVU5MSVQgPSB0aGlzLl91bmxp
dCB8fCAoKHRoaXMucG9pbnRzQ2xvdWQgfHwgdGhpcy53aXJlZnJhbWUpICYmICFtZXNoLmlzVmVy
dGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKSk7CisgICAgICAgICAgICBkZWZpbmVzLkRF
QlVHTU9ERSA9IHRoaXMuX2RlYnVnTW9kZTsKKyAgICAgICAgfQorICAgICAgICAvLyBFeHRlcm5h
bCBjb25maWcKKyAgICAgICAgdGhpcy5zdWJTdXJmYWNlLnByZXBhcmVEZWZpbmVzKGRlZmluZXMs
IHNjZW5lKTsKKyAgICAgICAgdGhpcy5jbGVhckNvYXQucHJlcGFyZURlZmluZXMoZGVmaW5lcywg
c2NlbmUpOworICAgICAgICB0aGlzLmFuaXNvdHJvcHkucHJlcGFyZURlZmluZXMoZGVmaW5lcywg
bWVzaCwgc2NlbmUpOworICAgICAgICB0aGlzLmJyZGYucHJlcGFyZURlZmluZXMoZGVmaW5lcyk7
CisgICAgICAgIHRoaXMuc2hlZW4ucHJlcGFyZURlZmluZXMoZGVmaW5lcywgc2NlbmUpOworICAg
ICAgICAvLyBWYWx1ZXMgdGhhdCBuZWVkIHRvIGJlIGV2YWx1YXRlZCBvbiBldmVyeSBmcmFtZQor
ICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yRnJhbWVCb3VuZFZhbHVl
cyhzY2VuZSwgZW5naW5lLCBkZWZpbmVzLCB1c2VJbnN0YW5jZXMgPyB0cnVlIDogZmFsc2UsIHVz
ZUNsaXBQbGFuZSk7CisgICAgICAgIC8vIEF0dHJpYnMKKyAgICAgICAgX01hdGVyaWFsc19tYXRl
cmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIi
XS5QcmVwYXJlRGVmaW5lc0ZvckF0dHJpYnV0ZXMobWVzaCwgZGVmaW5lcywgdHJ1ZSwgdHJ1ZSwg
dHJ1ZSwgdGhpcy5fdHJhbnNwYXJlbmN5TW9kZSAhPT0gUEJSQmFzZU1hdGVyaWFsLlBCUk1BVEVS
SUFMX09QQVFVRSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSBzaGFkZXIgY29tcGls
YXRpb24KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwucHJvdG90eXBlLmZvcmNlQ29tcGls
YXRpb24gPSBmdW5jdGlvbiAobWVzaCwgb25Db21waWxlZCwgb3B0aW9ucykgeworICAgICAgICB2
YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgbG9jYWxPcHRpb25zID0gdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19hc3NpZ24iXSh7IGNsaXBQbGFuZTogZmFsc2UgfSwg
b3B0aW9ucyk7CisgICAgICAgIHZhciBkZWZpbmVzID0gbmV3IFBCUk1hdGVyaWFsRGVmaW5lcygp
OworICAgICAgICB2YXIgZWZmZWN0ID0gdGhpcy5fcHJlcGFyZUVmZmVjdChtZXNoLCBkZWZpbmVz
LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBsb2NhbE9wdGlvbnMuY2xpcFBsYW5l
KTsKKyAgICAgICAgaWYgKGVmZmVjdC5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgIGlmIChvbkNv
bXBpbGVkKSB7CisgICAgICAgICAgICAgICAgb25Db21waWxlZCh0aGlzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVmZmVjdC5vbkNvbXBp
bGVPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaWYgKG9uQ29t
cGlsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgb25Db21waWxlZChfdGhpcyk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIEluaXRpYWxpemVzIHRoZSB1bmlmb3JtIGJ1ZmZlciBsYXlvdXQgZm9yIHRoZSBzaGFk
ZXIuCisgICAgICovCisgICAgUEJSQmFzZU1hdGVyaWFsLnByb3RvdHlwZS5idWlsZFVuaWZvcm1M
YXlvdXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE9yZGVyIGlzIGltcG9ydGFudCAhCisg
ICAgICAgIHZhciB1Ym8gPSB0aGlzLl91bmlmb3JtQnVmZmVyOworICAgICAgICB1Ym8uYWRkVW5p
Zm9ybSgidkFsYmVkb0luZm9zIiwgMik7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2QW1iaWVu
dEluZm9zIiwgNCk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2T3BhY2l0eUluZm9zIiwgMik7
CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2RW1pc3NpdmVJbmZvcyIsIDIpOworICAgICAgICB1
Ym8uYWRkVW5pZm9ybSgidkxpZ2h0bWFwSW5mb3MiLCAyKTsKKyAgICAgICAgdWJvLmFkZFVuaWZv
cm0oInZSZWZsZWN0aXZpdHlJbmZvcyIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidk1p
Y3JvU3VyZmFjZVNhbXBsZXJJbmZvcyIsIDIpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlJl
ZmxlY3Rpb25JbmZvcyIsIDIpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlJlZmxlY3Rpb25Q
b3NpdGlvbiIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlJlZmxlY3Rpb25TaXplIiwg
Myk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2QnVtcEluZm9zIiwgMyk7CisgICAgICAgIHVi
by5hZGRVbmlmb3JtKCJhbGJlZG9NYXRyaXgiLCAxNik7CisgICAgICAgIHViby5hZGRVbmlmb3Jt
KCJhbWJpZW50TWF0cml4IiwgMTYpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgib3BhY2l0eU1h
dHJpeCIsIDE2KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oImVtaXNzaXZlTWF0cml4IiwgMTYp
OworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgibGlnaHRtYXBNYXRyaXgiLCAxNik7CisgICAgICAg
IHViby5hZGRVbmlmb3JtKCJyZWZsZWN0aXZpdHlNYXRyaXgiLCAxNik7CisgICAgICAgIHViby5h
ZGRVbmlmb3JtKCJtaWNyb1N1cmZhY2VTYW1wbGVyTWF0cml4IiwgMTYpOworICAgICAgICB1Ym8u
YWRkVW5pZm9ybSgiYnVtcE1hdHJpeCIsIDE2KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZU
YW5nZW50U3BhY2VQYXJhbXMiLCAyKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInJlZmxlY3Rp
b25NYXRyaXgiLCAxNik7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2UmVmbGVjdGlvbkNvbG9y
IiwgMyk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2QWxiZWRvQ29sb3IiLCA0KTsKKyAgICAg
ICAgdWJvLmFkZFVuaWZvcm0oInZMaWdodGluZ0ludGVuc2l0eSIsIDQpOworICAgICAgICB1Ym8u
YWRkVW5pZm9ybSgidlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcyIsIDQpOworICAgICAgICB1
Ym8uYWRkVW5pZm9ybSgicG9pbnRTaXplIiwgMSk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2
UmVmbGVjdGl2aXR5Q29sb3IiLCA0KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZFbWlzc2l2
ZUNvbG9yIiwgMyk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2RXllUG9zaXRpb24iLCA0KTsK
KyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZBbWJpZW50Q29sb3IiLCAzKTsKKyAgICAgICAgdWJv
LmFkZFVuaWZvcm0oInZEZWJ1Z01vZGUiLCAyKTsKKyAgICAgICAgX3BickNsZWFyQ29hdENvbmZp
Z3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUEJSQ2xlYXJDb2F0Q29uZmln
dXJhdGlvbiJdLlByZXBhcmVVbmlmb3JtQnVmZmVyKHVibyk7CisgICAgICAgIF9wYnJBbmlzb3Ry
b3BpY0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUEJSQW5pc290
cm9waWNDb25maWd1cmF0aW9uIl0uUHJlcGFyZVVuaWZvcm1CdWZmZXIodWJvKTsKKyAgICAgICAg
X3BiclNoZWVuQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siUEJS
U2hlZW5Db25maWd1cmF0aW9uIl0uUHJlcGFyZVVuaWZvcm1CdWZmZXIodWJvKTsKKyAgICAgICAg
X3BiclN1YlN1cmZhY2VDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9f
WyJQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbiJdLlByZXBhcmVVbmlmb3JtQnVmZmVyKHVibyk7
CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2U3BoZXJpY2FsTDAwIiwgMyk7CisgICAgICAgIHVi
by5hZGRVbmlmb3JtKCJ2U3BoZXJpY2FsTDFfMSIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9y
bSgidlNwaGVyaWNhbEwxMCIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlNwaGVyaWNh
bEwxMSIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlNwaGVyaWNhbEwyXzIiLCAzKTsK
KyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZTcGhlcmljYWxMMl8xIiwgMyk7CisgICAgICAgIHVi
by5hZGRVbmlmb3JtKCJ2U3BoZXJpY2FsTDIwIiwgMyk7CisgICAgICAgIHViby5hZGRVbmlmb3Jt
KCJ2U3BoZXJpY2FsTDIxIiwgMyk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2U3BoZXJpY2Fs
TDIyIiwgMyk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2U3BoZXJpY2FsWCIsIDMpOworICAg
ICAgICB1Ym8uYWRkVW5pZm9ybSgidlNwaGVyaWNhbFkiLCAzKTsKKyAgICAgICAgdWJvLmFkZFVu
aWZvcm0oInZTcGhlcmljYWxaIiwgMyk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2U3BoZXJp
Y2FsWFhfWloiLCAzKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZTcGhlcmljYWxZWV9aWiIs
IDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlNwaGVyaWNhbFpaIiwgMyk7CisgICAgICAg
IHViby5hZGRVbmlmb3JtKCJ2U3BoZXJpY2FsWFkiLCAzKTsKKyAgICAgICAgdWJvLmFkZFVuaWZv
cm0oInZTcGhlcmljYWxZWiIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlNwaGVyaWNh
bFpYIiwgMyk7CisgICAgICAgIHViby5fdW5pZm9ybUxvY2F0aW9ucyA9IHt2QWxiZWRvSW5mb3M6
IDAsCisgICAgICAgIHZBbWJpZW50SW5mb3M6IDQsCisgICAgICAgIHZPcGFjaXR5SW5mb3M6IDgs
CisgICAgICAgIHZFbWlzc2l2ZUluZm9zOiAxMCwKKyAgICAgICAgdkxpZ2h0bWFwSW5mb3M6IDEy
LAorICAgICAgICB2UmVmbGVjdGl2aXR5SW5mb3M6IDE2LAorICAgICAgICB2TWljcm9TdXJmYWNl
U2FtcGxlckluZm9zOiAyMCwKKyAgICAgICAgdlJlZmxlY3Rpb25JbmZvczogMjIsCisgICAgICAg
IHZSZWZsZWN0aW9uUG9zaXRpb246IDI0LAorICAgICAgICB2UmVmbGVjdGlvblNpemU6IDI4LAor
ICAgICAgICB2QnVtcEluZm9zOiAzMiwKKyAgICAgICAgYWxiZWRvTWF0cml4OiAzNiwKKyAgICAg
ICAgYW1iaWVudE1hdHJpeDogNTIsCisgICAgICAgIG9wYWNpdHlNYXRyaXg6IDY4LAorICAgICAg
ICBlbWlzc2l2ZU1hdHJpeDogODQsCisgICAgICAgIGxpZ2h0bWFwTWF0cml4OiAxMDAsCisgICAg
ICAgIHJlZmxlY3Rpdml0eU1hdHJpeDogMTE2LAorICAgICAgICBtaWNyb1N1cmZhY2VTYW1wbGVy
TWF0cml4OiAxMzIsCisgICAgICAgIGJ1bXBNYXRyaXg6IDE0OCwKKyAgICAgICAgdlRhbmdlbnRT
cGFjZVBhcmFtczogMTY0LAorICAgICAgICByZWZsZWN0aW9uTWF0cml4OiAxNjYsCisgICAgICAg
IHZSZWZsZWN0aW9uQ29sb3I6IDE4NCwKKyAgICAgICAgdkFsYmVkb0NvbG9yOiAxODgsCisgICAg
ICAgIHZMaWdodGluZ0ludGVuc2l0eTogMTkyLAorICAgICAgICB2UmVmbGVjdGlvbk1pY3Jvc3Vy
ZmFjZUluZm9zOiAxOTYsCisgICAgICAgIHBvaW50U2l6ZTogMjAwLAorICAgICAgICB2UmVmbGVj
dGl2aXR5Q29sb3I6IDIwNCwKKyAgICAgICAgdkVtaXNzaXZlQ29sb3I6IDIwOCwKKyAgICAgICAg
dkV5ZVBvc2l0aW9uOiAyMTIsCisgICAgICAgIHZBbWJpZW50Q29sb3I6IDIxNiwKKyAgICAgICAg
dkRlYnVnTW9kZTogMjIwLAorICAgICAgICB2Q2xlYXJDb2F0UGFyYW1zOiAyMjIsCisgICAgICAg
IHZDbGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zOiAyMjQsCisgICAgICAgIHZDbGVhckNvYXRJbmZv
czogMjI4LAorICAgICAgICBjbGVhckNvYXRNYXRyaXg6IDIzMCwKKyAgICAgICAgdkNsZWFyQ29h
dEJ1bXBJbmZvczogMjQ2LAorICAgICAgICB2Q2xlYXJDb2F0VGFuZ2VudFNwYWNlUGFyYW1zOiAy
NDgsCisgICAgICAgIGNsZWFyQ29hdEJ1bXBNYXRyaXg6IDI1MCwKKyAgICAgICAgdkNsZWFyQ29h
dFRpbnRQYXJhbXM6IDI2OCwKKyAgICAgICAgY2xlYXJDb2F0Q29sb3JBdERpc3RhbmNlOiAyNzIs
CisgICAgICAgIHZDbGVhckNvYXRUaW50SW5mb3M6IDI3NCwKKyAgICAgICAgY2xlYXJDb2F0VGlu
dE1hdHJpeDogMjc2LAorICAgICAgICB2QW5pc290cm9weTogMjkyLAorICAgICAgICB2QW5pc290
cm9weUluZm9zOiAyOTYsCisgICAgICAgIGFuaXNvdHJvcHlNYXRyaXg6IDI5OCwKKyAgICAgICAg
dlNoZWVuQ29sb3I6IDMxNiwKKyAgICAgICAgdlNoZWVuSW5mb3M6IDMyMCwKKyAgICAgICAgc2hl
ZW5NYXRyaXg6IDMyMiwKKyAgICAgICAgdlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvczogMzQw
LAorICAgICAgICB2UmVmcmFjdGlvbkluZm9zOiAzNDQsCisgICAgICAgIHJlZnJhY3Rpb25NYXRy
aXg6IDM0OCwKKyAgICAgICAgdlRoaWNrbmVzc0luZm9zOiAzNjQsCisgICAgICAgIHRoaWNrbmVz
c01hdHJpeDogMzY2LAorICAgICAgICB2VGhpY2tuZXNzUGFyYW06IDM4MiwKKyAgICAgICAgdkRp
ZmZ1c2lvbkRpc3RhbmNlOiAzODQsCisgICAgICAgIHZUaW50Q29sb3I6IDM4OCwKKyAgICAgICAg
dlN1YlN1cmZhY2VJbnRlbnNpdHk6IDM5MiwKKyAgICAgICAgdlNwaGVyaWNhbEwwMDogMzk2LAor
ICAgICAgICB2U3BoZXJpY2FsTDFfMTogNDAwLAorICAgICAgICB2U3BoZXJpY2FsTDEwOiA0MDQs
CisgICAgICAgIHZTcGhlcmljYWxMMTE6IDQwOCwKKyAgICAgICAgdlNwaGVyaWNhbEwyXzI6IDQx
MiwKKyAgICAgICAgdlNwaGVyaWNhbEwyXzE6IDQxNiwKKyAgICAgICAgdlNwaGVyaWNhbEwyMDog
NDIwLAorICAgICAgICB2U3BoZXJpY2FsTDIxOiA0MjQsCisgICAgICAgIHZTcGhlcmljYWxMMjI6
IDQyOCwKKyAgICAgICAgdlNwaGVyaWNhbFg6IDQzMiwKKyAgICAgICAgdlNwaGVyaWNhbFk6IDQz
NiwKKyAgICAgICAgdlNwaGVyaWNhbFo6IDQ0MCwKKyAgICAgICAgdlNwaGVyaWNhbFhYX1paOiA0
NDQsCisgICAgICAgIHZTcGhlcmljYWxZWV9aWjogNDQ4LAorICAgICAgICB2U3BoZXJpY2FsWlo6
IDQ1MiwKKyAgICAgICAgdlNwaGVyaWNhbFhZOiA0NTYsCisgICAgICAgIHZTcGhlcmljYWxZWjog
NDYwLAorICAgICAgICB2U3BoZXJpY2FsWlg6IDQ2NH07CisgICAgICAgIHViby5fZGF0YSA9IEFy
cmF5KDQ2OCkuZmlsbCgwKTsKKyAgICAgICAgdWJvLmNyZWF0ZSgpOworICAgIH07CisgICAgLyoq
CisgICAgICogVW5iaW5kcyB0aGUgbWF0ZXJpYWwgZnJvbSB0aGUgbWVzaAorICAgICAqLworICAg
IFBCUkJhc2VNYXRlcmlhbC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAodGhpcy5fYWN0aXZlRWZmZWN0KSB7CisgICAgICAgICAgICB2YXIgbmVlZEZsYWcgPSBm
YWxzZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSAmJiB0aGlzLl9y
ZWZsZWN0aW9uVGV4dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIHRoaXMu
X2FjdGl2ZUVmZmVjdC5zZXRUZXh0dXJlKCJyZWZsZWN0aW9uMkRTYW1wbGVyIiwgbnVsbCk7Cisg
ICAgICAgICAgICAgICAgbmVlZEZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHRoaXMuc3ViU3VyZmFjZS51bmJpbmQodGhpcy5fYWN0aXZlRWZmZWN0KSkgeworICAg
ICAgICAgICAgICAgIG5lZWRGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChuZWVkRmxhZykgeworICAgICAgICAgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNB
c1RleHR1cmVzRGlydHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBfc3Vw
ZXIucHJvdG90eXBlLnVuYmluZC5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICog
QmluZHMgdGhlIHN1Ym1lc2ggZGF0YS4KKyAgICAgKiBAcGFyYW0gd29ybGQgLSBUaGUgd29ybGQg
bWF0cml4LgorICAgICAqIEBwYXJhbSBtZXNoIC0gVGhlIEJKUyBtZXNoLgorICAgICAqIEBwYXJh
bSBzdWJNZXNoIC0gQSBzdWJtZXNoIG9mIHRoZSBCSlMgbWVzaC4KKyAgICAgKi8KKyAgICBQQlJC
YXNlTWF0ZXJpYWwucHJvdG90eXBlLmJpbmRGb3JTdWJNZXNoID0gZnVuY3Rpb24gKHdvcmxkLCBt
ZXNoLCBzdWJNZXNoKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAg
ICAgICAgdmFyIGRlZmluZXMgPSBzdWJNZXNoLl9tYXRlcmlhbERlZmluZXM7CisgICAgICAgIGlm
ICghZGVmaW5lcykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZh
ciBlZmZlY3QgPSBzdWJNZXNoLmVmZmVjdDsKKyAgICAgICAgaWYgKCFlZmZlY3QpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hY3RpdmVFZmZlY3QgPSBl
ZmZlY3Q7CisgICAgICAgIC8vIE1hdHJpY2VzIE1lc2guCisgICAgICAgIG1lc2guZ2V0TWVzaFVu
aWZvcm1CdWZmZXIoKS5iaW5kVG9FZmZlY3QoZWZmZWN0LCAiTWVzaCIpOworICAgICAgICBtZXNo
LnRyYW5zZmVyVG9FZmZlY3Qod29ybGQpOworICAgICAgICAvLyBNYXRyaWNlcworICAgICAgICBp
ZiAoIWRlZmluZXMuSU5TVEFOQ0VTKSB7CisgICAgICAgICAgICB0aGlzLmJpbmRPbmx5V29ybGRN
YXRyaXgod29ybGQpOworICAgICAgICB9CisgICAgICAgIC8vIE5vcm1hbCBNYXRyaXgKKyAgICAg
ICAgaWYgKGRlZmluZXMuT0JKRUNUU1BBQ0VfTk9STUFMTUFQKSB7CisgICAgICAgICAgICB3b3Js
ZC50b05vcm1hbE1hdHJpeCh0aGlzLl9ub3JtYWxNYXRyaXgpOworICAgICAgICAgICAgdGhpcy5i
aW5kT25seU5vcm1hbE1hdHJpeCh0aGlzLl9ub3JtYWxNYXRyaXgpOworICAgICAgICB9CisgICAg
ICAgIHZhciBtdXN0UmViaW5kID0gdGhpcy5fbXVzdFJlYmluZChzY2VuZSwgZWZmZWN0LCBtZXNo
LnZpc2liaWxpdHkpOworICAgICAgICAvLyBCb25lcworICAgICAgICBfTWF0ZXJpYWxzX21hdGVy
aWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRlcmlhbEhlbHBlciJd
LkJpbmRCb25lc1BhcmFtZXRlcnMobWVzaCwgdGhpcy5fYWN0aXZlRWZmZWN0KTsKKyAgICAgICAg
dmFyIHJlZmxlY3Rpb25UZXh0dXJlID0gbnVsbDsKKyAgICAgICAgdmFyIHVibyA9IHRoaXMuX3Vu
aWZvcm1CdWZmZXI7CisgICAgICAgIGlmIChtdXN0UmViaW5kKSB7CisgICAgICAgICAgICB2YXIg
ZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgICAgICB1Ym8uYmluZFRvRWZmZWN0
KGVmZmVjdCwgIk1hdGVyaWFsIik7CisgICAgICAgICAgICB0aGlzLmJpbmRWaWV3UHJvamVjdGlv
bihlZmZlY3QpOworICAgICAgICAgICAgcmVmbGVjdGlvblRleHR1cmUgPSB0aGlzLl9nZXRSZWZs
ZWN0aW9uVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCF1Ym8udXNlVWJvIHx8ICF0aGlzLmlz
RnJvemVuIHx8ICF1Ym8uaXNTeW5jKSB7CisgICAgICAgICAgICAgICAgLy8gVGV4dHVyZSB1bmlm
b3JtcworICAgICAgICAgICAgICAgIGlmIChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuX2FsYmVkb1RleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5EaWZmdXNlVGV4
dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDIo
InZBbGJlZG9JbmZvcyIsIHRoaXMuX2FsYmVkb1RleHR1cmUuY29vcmRpbmF0ZXNJbmRleCwgdGhp
cy5fYWxiZWRvVGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0ZXJp
YWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRlcmlh
bEhlbHBlciJdLkJpbmRUZXh0dXJlTWF0cml4KHRoaXMuX2FsYmVkb1RleHR1cmUsIHVibywgImFs
YmVkbyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9hbWJpZW50VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkFtYmllbnRUZXh0dXJlRW5hYmxlZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUZsb2F0NCgidkFtYmllbnRJbmZvcyIsIHRo
aXMuX2FtYmllbnRUZXh0dXJlLmNvb3JkaW5hdGVzSW5kZXgsIHRoaXMuX2FtYmllbnRUZXh0dXJl
LmxldmVsLCB0aGlzLl9hbWJpZW50VGV4dHVyZVN0cmVuZ3RoLCB0aGlzLl9hbWJpZW50VGV4dHVy
ZUltcGFjdE9uQW5hbHl0aWNhbExpZ2h0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0
ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRl
cmlhbEhlbHBlciJdLkJpbmRUZXh0dXJlTWF0cml4KHRoaXMuX2FtYmllbnRUZXh0dXJlLCB1Ym8s
ICJhbWJpZW50Iik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX29wYWNpdHlUZXh0dXJlICYmIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMF9fWyJNYXRlcmlhbEZsYWdzIl0uT3BhY2l0eVRleHR1cmVFbmFibGVkKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlRmxvYXQyKCJ2T3BhY2l0eUluZm9z
IiwgdGhpcy5fb3BhY2l0eVRleHR1cmUuY29vcmRpbmF0ZXNJbmRleCwgdGhpcy5fb3BhY2l0eVRl
eHR1cmUubGV2ZWwpOworICAgICAgICAgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlh
bEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5C
aW5kVGV4dHVyZU1hdHJpeCh0aGlzLl9vcGFjaXR5VGV4dHVyZSwgdWJvLCAib3BhY2l0eSIpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWZsZWN0aW9u
VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1si
TWF0ZXJpYWxGbGFncyJdLlJlZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdWJvLnVwZGF0ZU1hdHJpeCgicmVmbGVjdGlvbk1hdHJpeCIsIHJlZmxlY3Rp
b25UZXh0dXJlLmdldFJlZmxlY3Rpb25UZXh0dXJlTWF0cml4KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdWJvLnVwZGF0ZUZsb2F0MigidlJlZmxlY3Rpb25JbmZvcyIsIHJlZmxlY3Rpb25U
ZXh0dXJlLmxldmVsLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZsZWN0aW9u
VGV4dHVyZS5ib3VuZGluZ0JveFNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgY3ViZVRleHR1cmUgPSByZWZsZWN0aW9uVGV4dHVyZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1Ym8udXBkYXRlVmVjdG9yMygidlJlZmxlY3Rpb25Qb3NpdGlvbiIsIGN1YmVUZXh0
dXJlLmJvdW5kaW5nQm94UG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVi
by51cGRhdGVWZWN0b3IzKCJ2UmVmbGVjdGlvblNpemUiLCBjdWJlVGV4dHVyZS5ib3VuZGluZ0Jv
eFNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFkZWZpbmVzLlVTRUlSUkFESUFOQ0VNQVApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcG9seW5vbWlhbHMgPSByZWZsZWN0aW9uVGV4dHVyZS5zcGhlcmljYWxQb2x5
bm9taWFsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzLlVTRVNQSEVS
SUNBTEZST01SRUZMRUNUSU9OTUFQICYmIHBvbHlub21pYWxzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzLlNQSEVSSUNBTF9IQVJNT05JQ1MpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVTY2FsZWRIYXJtb25pY3MgPSBw
b2x5bm9taWFscy5wcmVTY2FsZWRIYXJtb25pY3M7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1Ym8udXBkYXRlVmVjdG9yMygidlNwaGVyaWNhbEwwMCIsIHByZVNjYWxlZEhh
cm1vbmljcy5sMDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnVw
ZGF0ZVZlY3RvcjMoInZTcGhlcmljYWxMMV8xIiwgcHJlU2NhbGVkSGFybW9uaWNzLmwxXzEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZVZlY3RvcjMoInZT
cGhlcmljYWxMMTAiLCBwcmVTY2FsZWRIYXJtb25pY3MubDEwKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVWZWN0b3IzKCJ2U3BoZXJpY2FsTDExIiwgcHJl
U2NhbGVkSGFybW9uaWNzLmwxMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1Ym8udXBkYXRlVmVjdG9yMygidlNwaGVyaWNhbEwyXzIiLCBwcmVTY2FsZWRIYXJtb25pY3Mu
bDJfMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlVmVj
dG9yMygidlNwaGVyaWNhbEwyXzEiLCBwcmVTY2FsZWRIYXJtb25pY3MubDJfMSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlVmVjdG9yMygidlNwaGVyaWNh
bEwyMCIsIHByZVNjYWxlZEhhcm1vbmljcy5sMjApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWJvLnVwZGF0ZVZlY3RvcjMoInZTcGhlcmljYWxMMjEiLCBwcmVTY2FsZWRI
YXJtb25pY3MubDIxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHViby51
cGRhdGVWZWN0b3IzKCJ2U3BoZXJpY2FsTDIyIiwgcHJlU2NhbGVkSGFybW9uaWNzLmwyMik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Ym8u
dXBkYXRlRmxvYXQzKCJ2U3BoZXJpY2FsWCIsIHBvbHlub21pYWxzLngueCwgcG9seW5vbWlhbHMu
eC55LCBwb2x5bm9taWFscy54LnopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWJvLnVwZGF0ZUZsb2F0MygidlNwaGVyaWNhbFkiLCBwb2x5bm9taWFscy55LngsIHBvbHlu
b21pYWxzLnkueSwgcG9seW5vbWlhbHMueS56KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHViby51cGRhdGVGbG9hdDMoInZTcGhlcmljYWxaIiwgcG9seW5vbWlhbHMuei54
LCBwb2x5bm9taWFscy56LnksIHBvbHlub21pYWxzLnoueik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlRmxvYXQzKCJ2U3BoZXJpY2FsWFhfWloiLCBwb2x5
bm9taWFscy54eC54IC0gcG9seW5vbWlhbHMuenoueCwgcG9seW5vbWlhbHMueHgueSAtIHBvbHlu
b21pYWxzLnp6LnksIHBvbHlub21pYWxzLnh4LnogLSBwb2x5bm9taWFscy56ei56KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDMoInZTcGhlcmlj
YWxZWV9aWiIsIHBvbHlub21pYWxzLnl5LnggLSBwb2x5bm9taWFscy56ei54LCBwb2x5bm9taWFs
cy55eS55IC0gcG9seW5vbWlhbHMuenoueSwgcG9seW5vbWlhbHMueXkueiAtIHBvbHlub21pYWxz
Lnp6LnopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUZs
b2F0MygidlNwaGVyaWNhbFpaIiwgcG9seW5vbWlhbHMuenoueCwgcG9seW5vbWlhbHMuenoueSwg
cG9seW5vbWlhbHMuenoueik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
Ym8udXBkYXRlRmxvYXQzKCJ2U3BoZXJpY2FsWFkiLCBwb2x5bm9taWFscy54eS54LCBwb2x5bm9t
aWFscy54eS55LCBwb2x5bm9taWFscy54eS56KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHViby51cGRhdGVGbG9hdDMoInZTcGhlcmljYWxZWiIsIHBvbHlub21pYWxzLnl6
LngsIHBvbHlub21pYWxzLnl6LnksIHBvbHlub21pYWxzLnl6LnopOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUZsb2F0MygidlNwaGVyaWNhbFpYIiwgcG9s
eW5vbWlhbHMuengueCwgcG9seW5vbWlhbHMuengueSwgcG9seW5vbWlhbHMuengueik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB1
Ym8udXBkYXRlRmxvYXQzKCJ2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zIiwgcmVmbGVjdGlv
blRleHR1cmUuZ2V0U2l6ZSgpLndpZHRoLCByZWZsZWN0aW9uVGV4dHVyZS5sb2RHZW5lcmF0aW9u
U2NhbGUsIHJlZmxlY3Rpb25UZXh0dXJlLmxvZEdlbmVyYXRpb25PZmZzZXQpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRleHR1
cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVy
aWFsRmxhZ3MiXS5FbWlzc2l2ZVRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB1Ym8udXBkYXRlRmxvYXQyKCJ2RW1pc3NpdmVJbmZvcyIsIHRoaXMuX2VtaXNzaXZlVGV4
dHVyZS5jb29yZGluYXRlc0luZGV4LCB0aGlzLl9lbWlzc2l2ZVRleHR1cmUubGV2ZWwpOworICAg
ICAgICAgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kVGV4dHVyZU1hdHJpeCh0
aGlzLl9lbWlzc2l2ZVRleHR1cmUsIHVibywgImVtaXNzaXZlIik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSAmJiBf
bWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFn
cyJdLkxpZ2h0bWFwVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVi
by51cGRhdGVGbG9hdDIoInZMaWdodG1hcEluZm9zIiwgdGhpcy5fbGlnaHRtYXBUZXh0dXJlLmNv
b3JkaW5hdGVzSW5kZXgsIHRoaXMuX2xpZ2h0bWFwVGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRUZXh0dXJlTWF0cml4KHRoaXMuX2xp
Z2h0bWFwVGV4dHVyZSwgdWJvLCAibGlnaHRtYXAiKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAoX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5TcGVjdWxhclRleHR1cmVFbmFibGVkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWxsaWNUZXh0dXJlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUZsb2F0MygidlJlZmxlY3Rpdml0eUlu
Zm9zIiwgdGhpcy5fbWV0YWxsaWNUZXh0dXJlLmNvb3JkaW5hdGVzSW5kZXgsIHRoaXMuX21ldGFs
bGljVGV4dHVyZS5sZXZlbCwgdGhpcy5fYW1iaWVudFRleHR1cmVTdHJlbmd0aCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kVGV4dHVyZU1hdHJpeCh0
aGlzLl9tZXRhbGxpY1RleHR1cmUsIHVibywgInJlZmxlY3Rpdml0eSIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fcmVm
bGVjdGl2aXR5VGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRh
dGVGbG9hdDMoInZSZWZsZWN0aXZpdHlJbmZvcyIsIHRoaXMuX3JlZmxlY3Rpdml0eVRleHR1cmUu
Y29vcmRpbmF0ZXNJbmRleCwgdGhpcy5fcmVmbGVjdGl2aXR5VGV4dHVyZS5sZXZlbCwgMS4wKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRUZXh0dXJl
TWF0cml4KHRoaXMuX3JlZmxlY3Rpdml0eVRleHR1cmUsIHVibywgInJlZmxlY3Rpdml0eSIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX21pY3JvU3VyZmFjZVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
Ym8udXBkYXRlRmxvYXQyKCJ2TWljcm9TdXJmYWNlU2FtcGxlckluZm9zIiwgdGhpcy5fbWljcm9T
dXJmYWNlVGV4dHVyZS5jb29yZGluYXRlc0luZGV4LCB0aGlzLl9taWNyb1N1cmZhY2VUZXh0dXJl
LmxldmVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFs
SGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLkJp
bmRUZXh0dXJlTWF0cml4KHRoaXMuX21pY3JvU3VyZmFjZVRleHR1cmUsIHVibywgIm1pY3JvU3Vy
ZmFjZVNhbXBsZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYnVtcFRleHR1cmUgJiYgZW5n
aW5lLmdldENhcHMoKS5zdGFuZGFyZERlcml2YXRpdmVzICYmIF9tYXRlcmlhbEZsYWdzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJNYXRlcmlhbEZsYWdzIl0uQnVtcFRleHR1cmVFbmFi
bGVkICYmICF0aGlzLl9kaXNhYmxlQnVtcE1hcCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dWJvLnVwZGF0ZUZsb2F0MygidkJ1bXBJbmZvcyIsIHRoaXMuX2J1bXBUZXh0dXJlLmNvb3JkaW5h
dGVzSW5kZXgsIHRoaXMuX2J1bXBUZXh0dXJlLmxldmVsLCB0aGlzLl9wYXJhbGxheFNjYWxlQmlh
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRUZXh0dXJl
TWF0cml4KHRoaXMuX2J1bXBUZXh0dXJlLCB1Ym8sICJidW1wIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc2NlbmUuX21pcnJvcmVkQ2FtZXJhUG9zaXRpb24pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlRmxvYXQyKCJ2VGFuZ2VudFNwYWNlUGFyYW1zIiwg
dGhpcy5faW52ZXJ0Tm9ybWFsTWFwWCA/IDEuMCA6IC0xLjAsIHRoaXMuX2ludmVydE5vcm1hbE1h
cFkgPyAxLjAgOiAtMS4wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRh
dGVGbG9hdDIoInZUYW5nZW50U3BhY2VQYXJhbXMiLCB0aGlzLl9pbnZlcnROb3JtYWxNYXBYID8g
LTEuMCA6IDEuMCwgdGhpcy5faW52ZXJ0Tm9ybWFsTWFwWSA/IC0xLjAgOiAxLjApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vIFBvaW50IHNpemUKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5wb2ludHNDbG91ZCkgeworICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlRmxvYXQo
InBvaW50U2l6ZSIsIHRoaXMucG9pbnRTaXplKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgLy8gQ29sb3JzCisgICAgICAgICAgICAgICAgaWYgKGRlZmluZXMuTUVUQUxMSUNX
T1JLRkxPVykgeworICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTNfX1siVG1wQ29sb3JzIl0uQ29sb3IzWzBdLnIgPSAodGhpcy5f
bWV0YWxsaWMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9tZXRhbGxpYyA9PT0gbnVsbCkgPyAxIDog
dGhpcy5fbWV0YWxsaWM7CisgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX2NvbG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJUbXBDb2xvcnMiXS5Db2xvcjNbMF0uZyA9ICh0
aGlzLl9yb3VnaG5lc3MgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9yb3VnaG5lc3MgPT09IG51bGwp
ID8gMSA6IHRoaXMuX3JvdWdobmVzczsKKyAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUNv
bG9yNCgidlJlZmxlY3Rpdml0eUNvbG9yIiwgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEzX19bIlRtcENvbG9ycyJdLkNvbG9yM1swXSwgMCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1Ym8u
dXBkYXRlQ29sb3I0KCJ2UmVmbGVjdGl2aXR5Q29sb3IiLCB0aGlzLl9yZWZsZWN0aXZpdHlDb2xv
ciwgdGhpcy5fbWljcm9TdXJmYWNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdWJvLnVwZGF0ZUNvbG9yMygidkVtaXNzaXZlQ29sb3IiLCBfbWF0ZXJpYWxGbGFnc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkVtaXNzaXZlVGV4dHVy
ZUVuYWJsZWQgPyB0aGlzLl9lbWlzc2l2ZUNvbG9yIDogX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkNvbG9yMyJdLkJsYWNrUmVhZE9ubHkpOworICAgICAg
ICAgICAgICAgIHViby51cGRhdGVDb2xvcjMoInZSZWZsZWN0aW9uQ29sb3IiLCB0aGlzLl9yZWZs
ZWN0aW9uQ29sb3IpOworICAgICAgICAgICAgICAgIGlmICghZGVmaW5lcy5TU19SRUZSQUNUSU9O
ICYmIHRoaXMuc3ViU3VyZmFjZS5saW5rUmVmcmFjdGlvbldpdGhUcmFuc3BhcmVuY3kpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUNvbG9yNCgidkFsYmVkb0NvbG9yIiwgdGhpcy5f
YWxiZWRvQ29sb3IsIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUNvbG9yNCgidkFsYmVkb0NvbG9yIiwg
dGhpcy5fYWxiZWRvQ29sb3IsIHRoaXMuYWxwaGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAvLyBNaXNjCisgICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRpbmdJbmZvcy54
ID0gdGhpcy5fZGlyZWN0SW50ZW5zaXR5OworICAgICAgICAgICAgICAgIHRoaXMuX2xpZ2h0aW5n
SW5mb3MueSA9IHRoaXMuX2VtaXNzaXZlSW50ZW5zaXR5OworICAgICAgICAgICAgICAgIHRoaXMu
X2xpZ2h0aW5nSW5mb3MueiA9IHRoaXMuX2Vudmlyb25tZW50SW50ZW5zaXR5ICogc2NlbmUuZW52
aXJvbm1lbnRJbnRlbnNpdHk7CisgICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRpbmdJbmZvcy53
ID0gdGhpcy5fc3BlY3VsYXJJbnRlbnNpdHk7CisgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZVZl
Y3RvcjQoInZMaWdodGluZ0ludGVuc2l0eSIsIHRoaXMuX2xpZ2h0aW5nSW5mb3MpOworICAgICAg
ICAgICAgICAgIC8vIENvbG9ycworICAgICAgICAgICAgICAgIHNjZW5lLmFtYmllbnRDb2xvci5t
dWx0aXBseVRvUmVmKHRoaXMuX2FtYmllbnRDb2xvciwgdGhpcy5fZ2xvYmFsQW1iaWVudENvbG9y
KTsKKyAgICAgICAgICAgICAgICB2YXIgZXllUG9zaXRpb24gPSBzY2VuZS5fZm9yY2VkVmlld1Bv
c2l0aW9uID8gc2NlbmUuX2ZvcmNlZFZpZXdQb3NpdGlvbiA6IChzY2VuZS5fbWlycm9yZWRDYW1l
cmFQb3NpdGlvbiA/IHNjZW5lLl9taXJyb3JlZENhbWVyYVBvc2l0aW9uIDogc2NlbmUuYWN0aXZl
Q2FtZXJhLmdsb2JhbFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICB2YXIgaW52ZXJ0Tm9ybWFs
ID0gKHNjZW5lLnVzZVJpZ2h0SGFuZGVkU3lzdGVtID09PSAoc2NlbmUuX21pcnJvcmVkQ2FtZXJh
UG9zaXRpb24gIT0gbnVsbCkpOworICAgICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDQoInZF
eWVQb3NpdGlvbiIsIGV5ZVBvc2l0aW9uLngsIGV5ZVBvc2l0aW9uLnksIGV5ZVBvc2l0aW9uLnos
IGludmVydE5vcm1hbCA/IC0xIDogMSk7CisgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUNvbG9y
MygidkFtYmllbnRDb2xvciIsIHRoaXMuX2dsb2JhbEFtYmllbnRDb2xvcik7CisgICAgICAgICAg
ICAgICAgdWJvLnVwZGF0ZUZsb2F0MigidkRlYnVnTW9kZSIsIHRoaXMuZGVidWdMaW1pdCwgdGhp
cy5kZWJ1Z0ZhY3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUZXh0dXJlcwor
ICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9hbGJlZG9UZXh0dXJlICYmIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMF9fWyJNYXRlcmlhbEZsYWdzIl0uRGlmZnVzZVRleHR1cmVFbmFibGVkKSB7
CisgICAgICAgICAgICAgICAgICAgIHViby5zZXRUZXh0dXJlKCJhbGJlZG9TYW1wbGVyIiwgdGhp
cy5fYWxiZWRvVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICh0aGlzLl9hbWJpZW50VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkFtYmllbnRUZXh0dXJlRW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgICAgICB1Ym8uc2V0VGV4dHVyZSgiYW1iaWVudFNhbXBsZXIiLCB0aGlz
Ll9hbWJpZW50VGV4dHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICh0aGlzLl9vcGFjaXR5VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLk9wYWNpdHlUZXh0dXJlRW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgICAgICB1Ym8uc2V0VGV4dHVyZSgib3BhY2l0eVNhbXBsZXIiLCB0aGlz
Ll9vcGFjaXR5VGV4dHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChyZWZsZWN0aW9uVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLlJlZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoZGVmaW5lcy5MT0RCQVNFRE1JQ1JPU0ZVUkFDRSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnNldFRleHR1cmUoInJlZmxlY3Rpb25TYW1wbGVy
IiwgcmVmbGVjdGlvblRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnNldFRleHR1cmUo
InJlZmxlY3Rpb25TYW1wbGVyIiwgcmVmbGVjdGlvblRleHR1cmUuX2xvZFRleHR1cmVNaWQgfHwg
cmVmbGVjdGlvblRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnNldFRleHR1
cmUoInJlZmxlY3Rpb25TYW1wbGVyTG93IiwgcmVmbGVjdGlvblRleHR1cmUuX2xvZFRleHR1cmVM
b3cgfHwgcmVmbGVjdGlvblRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnNl
dFRleHR1cmUoInJlZmxlY3Rpb25TYW1wbGVySGlnaCIsIHJlZmxlY3Rpb25UZXh0dXJlLl9sb2RU
ZXh0dXJlSGlnaCB8fCByZWZsZWN0aW9uVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmluZXMuVVNFSVJSQURJQU5DRU1BUCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdWJvLnNldFRleHR1cmUoImlycmFkaWFuY2VTYW1wbGVyIiwg
cmVmbGVjdGlvblRleHR1cmUuaXJyYWRpYW5jZVRleHR1cmUpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzLkVOVklS
T05NRU5UQlJERikgeworICAgICAgICAgICAgICAgICAgICB1Ym8uc2V0VGV4dHVyZSgiZW52aXJv
bm1lbnRCcmRmU2FtcGxlciIsIHRoaXMuX2Vudmlyb25tZW50QlJERlRleHR1cmUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fZW1pc3NpdmVUZXh0dXJlICYm
IF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJNYXRlcmlhbEZs
YWdzIl0uRW1pc3NpdmVUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICB1Ym8u
c2V0VGV4dHVyZSgiZW1pc3NpdmVTYW1wbGVyIiwgdGhpcy5fZW1pc3NpdmVUZXh0dXJlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0bWFwVGV4dHVy
ZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJp
YWxGbGFncyJdLkxpZ2h0bWFwVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
dWJvLnNldFRleHR1cmUoImxpZ2h0bWFwU2FtcGxlciIsIHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChfbWF0ZXJpYWxGbGFnc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLlNwZWN1bGFyVGV4
dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFsbGljVGV4
dHVyZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnNldFRleHR1cmUoInJlZmxlY3Rp
dml0eVNhbXBsZXIiLCB0aGlzLl9tZXRhbGxpY1RleHR1cmUpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3JlZmxlY3Rpdml0eVRleHR1
cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHViby5zZXRUZXh0dXJlKCJyZWZsZWN0aXZp
dHlTYW1wbGVyIiwgdGhpcy5fcmVmbGVjdGl2aXR5VGV4dHVyZSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21pY3JvU3VyZmFjZVRleHR1cmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHViby5zZXRUZXh0dXJlKCJtaWNyb1N1cmZhY2VT
YW1wbGVyIiwgdGhpcy5fbWljcm9TdXJmYWNlVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2J1bXBUZXh0
dXJlICYmIGVuZ2luZS5nZXRDYXBzKCkuc3RhbmRhcmREZXJpdmF0aXZlcyAmJiBfbWF0ZXJpYWxG
bGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkJ1bXBU
ZXh0dXJlRW5hYmxlZCAmJiAhdGhpcy5fZGlzYWJsZUJ1bXBNYXApIHsKKyAgICAgICAgICAgICAg
ICAgICAgdWJvLnNldFRleHR1cmUoImJ1bXBTYW1wbGVyIiwgdGhpcy5fYnVtcFRleHR1cmUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc3ViU3Vy
ZmFjZS5iaW5kRm9yU3ViTWVzaCh1Ym8sIHNjZW5lLCBlbmdpbmUsIHRoaXMuaXNGcm96ZW4sIGRl
ZmluZXMuTE9EQkFTRURNSUNST1NGVVJBQ0UpOworICAgICAgICAgICAgdGhpcy5jbGVhckNvYXQu
YmluZEZvclN1Yk1lc2godWJvLCBzY2VuZSwgZW5naW5lLCB0aGlzLl9kaXNhYmxlQnVtcE1hcCwg
dGhpcy5pc0Zyb3plbiwgdGhpcy5faW52ZXJ0Tm9ybWFsTWFwWCwgdGhpcy5faW52ZXJ0Tm9ybWFs
TWFwWSk7CisgICAgICAgICAgICB0aGlzLmFuaXNvdHJvcHkuYmluZEZvclN1Yk1lc2godWJvLCBz
Y2VuZSwgdGhpcy5pc0Zyb3plbik7CisgICAgICAgICAgICB0aGlzLnNoZWVuLmJpbmRGb3JTdWJN
ZXNoKHVibywgc2NlbmUsIHRoaXMuaXNGcm96ZW4pOworICAgICAgICAgICAgLy8gQ2xpcCBwbGFu
ZQorICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kQ2xpcFBsYW5lKHRoaXMuX2FjdGl2
ZUVmZmVjdCwgc2NlbmUpOworICAgICAgICB9CisgICAgICAgIGlmIChtdXN0UmViaW5kIHx8ICF0
aGlzLmlzRnJvemVuKSB7CisgICAgICAgICAgICAvLyBMaWdodHMKKyAgICAgICAgICAgIGlmIChz
Y2VuZS5saWdodHNFbmFibGVkICYmICF0aGlzLl9kaXNhYmxlTGlnaHRpbmcpIHsKKyAgICAgICAg
ICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRMaWdodHMoc2NlbmUsIG1lc2gsIHRoaXMuX2Fj
dGl2ZUVmZmVjdCwgZGVmaW5lcywgdGhpcy5fbWF4U2ltdWx0YW5lb3VzTGlnaHRzLCB0aGlzLl9s
aWdodEZhbGxvZmYgIT09IFBCUkJhc2VNYXRlcmlhbC5MSUdIVEZBTExPRkZfU1RBTkRBUkQsIHRo
aXMuX3JlYnVpbGRJblBhcmFsbGVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFZp
ZXcKKyAgICAgICAgICAgIGlmIChzY2VuZS5mb2dFbmFibGVkICYmIG1lc2guYXBwbHlGb2cgJiYg
c2NlbmUuZm9nTW9kZSAhPT0gX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNj
ZW5lIl0uRk9HTU9ERV9OT05FIHx8IHJlZmxlY3Rpb25UZXh0dXJlKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5iaW5kVmlldyhlZmZlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
Rm9nCisgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRGb2dQYXJhbWV0ZXJzKHNjZW5l
LCBtZXNoLCB0aGlzLl9hY3RpdmVFZmZlY3QsIHRydWUpOworICAgICAgICAgICAgLy8gTW9ycGgg
dGFyZ2V0cworICAgICAgICAgICAgaWYgKGRlZmluZXMuTlVNX01PUlBIX0lORkxVRU5DRVJTKSB7
CisgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kTW9ycGhUYXJnZXRQYXJhbWV0
ZXJzKG1lc2gsIHRoaXMuX2FjdGl2ZUVmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBpbWFnZSBwcm9jZXNzaW5nCisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uLmJpbmQodGhpcy5fYWN0aXZlRWZmZWN0KTsKKyAgICAgICAgICAgIC8vIExv
Zy4gZGVwdGgKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE4X19bIk1hdGVyaWFsSGVscGVyIl0uQmluZExvZ0RlcHRoKGRlZmlu
ZXMsIHRoaXMuX2FjdGl2ZUVmZmVjdCwgc2NlbmUpOworICAgICAgICB9CisgICAgICAgIHViby51
cGRhdGUoKTsKKyAgICAgICAgdGhpcy5fYWZ0ZXJCaW5kKG1lc2gsIHRoaXMuX2FjdGl2ZUVmZmVj
dCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhbmltYXRhYmxlIHRleHR1
cmVzLgorICAgICAqIEByZXR1cm5zIC0gQXJyYXkgb2YgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAg
ICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwucHJvdG90eXBlLmdldEFuaW1hdGFibGVzID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgcmVzdWx0cyA9IFtdOworICAgICAgICBpZiAodGhpcy5f
YWxiZWRvVGV4dHVyZSAmJiB0aGlzLl9hbGJlZG9UZXh0dXJlLmFuaW1hdGlvbnMgJiYgdGhpcy5f
YWxiZWRvVGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHJlc3Vs
dHMucHVzaCh0aGlzLl9hbGJlZG9UZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy5fYW1iaWVudFRleHR1cmUgJiYgdGhpcy5fYW1iaWVudFRleHR1cmUuYW5pbWF0aW9ucyAmJiB0
aGlzLl9hbWJpZW50VGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAg
IHJlc3VsdHMucHVzaCh0aGlzLl9hbWJpZW50VGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX29wYWNpdHlUZXh0dXJlICYmIHRoaXMuX29wYWNpdHlUZXh0dXJlLmFuaW1hdGlv
bnMgJiYgdGhpcy5fb3BhY2l0eVRleHR1cmUuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAg
ICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fb3BhY2l0eVRleHR1cmUpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSAmJiB0aGlzLl9yZWZsZWN0aW9uVGV4
dHVyZS5hbmltYXRpb25zICYmIHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlLmFuaW1hdGlvbnMubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMuX3JlZmxlY3Rpb25UZXh0
dXJlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZW1pc3NpdmVUZXh0dXJlICYmIHRo
aXMuX2VtaXNzaXZlVGV4dHVyZS5hbmltYXRpb25zICYmIHRoaXMuX2VtaXNzaXZlVGV4dHVyZS5h
bmltYXRpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9l
bWlzc2l2ZVRleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9tZXRhbGxpY1Rl
eHR1cmUgJiYgdGhpcy5fbWV0YWxsaWNUZXh0dXJlLmFuaW1hdGlvbnMgJiYgdGhpcy5fbWV0YWxs
aWNUZXh0dXJlLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgcmVzdWx0cy5w
dXNoKHRoaXMuX21ldGFsbGljVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
dGhpcy5fcmVmbGVjdGl2aXR5VGV4dHVyZSAmJiB0aGlzLl9yZWZsZWN0aXZpdHlUZXh0dXJlLmFu
aW1hdGlvbnMgJiYgdGhpcy5fcmVmbGVjdGl2aXR5VGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9yZWZsZWN0aXZpdHlUZXh0dXJl
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYnVtcFRleHR1cmUgJiYgdGhpcy5fYnVt
cFRleHR1cmUuYW5pbWF0aW9ucyAmJiB0aGlzLl9idW1wVGV4dHVyZS5hbmltYXRpb25zLmxlbmd0
aCA+IDApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9idW1wVGV4dHVyZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSAmJiB0aGlzLl9saWdo
dG1hcFRleHR1cmUuYW5pbWF0aW9ucyAmJiB0aGlzLl9saWdodG1hcFRleHR1cmUuYW5pbWF0aW9u
cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fbGlnaHRtYXBU
ZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnN1YlN1cmZhY2UuZ2V0QW5pbWF0YWJs
ZXMocmVzdWx0cyk7CisgICAgICAgIHRoaXMuY2xlYXJDb2F0LmdldEFuaW1hdGFibGVzKHJlc3Vs
dHMpOworICAgICAgICB0aGlzLnNoZWVuLmdldEFuaW1hdGFibGVzKHJlc3VsdHMpOworICAgICAg
ICB0aGlzLmFuaXNvdHJvcHkuZ2V0QW5pbWF0YWJsZXMocmVzdWx0cyk7CisgICAgICAgIHJldHVy
biByZXN1bHRzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdGV4dHVyZSB1
c2VkIGZvciByZWZsZWN0aW9ucy4KKyAgICAgKiBAcmV0dXJucyAtIFJlZmxlY3Rpb24gdGV4dHVy
ZSBpZiBwcmVzZW50LiAgT3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBlbnZpcm9ubWVudCB0ZXh0dXJl
LgorICAgICAqLworICAgIFBCUkJhc2VNYXRlcmlhbC5wcm90b3R5cGUuX2dldFJlZmxlY3Rpb25U
ZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fcmVmbGVjdGlvblRleHR1
cmUpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpcy5nZXRTY2VuZSgpLmVudmlyb25tZW50VGV4dHVyZTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdGhlIGFjdGl2ZWx5
IHVzZWQgdGV4dHVyZXMuCisgICAgICogQHJldHVybnMgLSBBcnJheSBvZiBCYXNlVGV4dHVyZXMK
KyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwucHJvdG90eXBlLmdldEFjdGl2ZVRleHR1cmVz
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgYWN0aXZlVGV4dHVyZXMgPSBfc3VwZXIucHJv
dG90eXBlLmdldEFjdGl2ZVRleHR1cmVzLmNhbGwodGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9h
bGJlZG9UZXh0dXJlKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMuX2Fs
YmVkb1RleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9hbWJpZW50VGV4dHVy
ZSkgeworICAgICAgICAgICAgYWN0aXZlVGV4dHVyZXMucHVzaCh0aGlzLl9hbWJpZW50VGV4dHVy
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29wYWNpdHlUZXh0dXJlKSB7CisgICAg
ICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMuX29wYWNpdHlUZXh0dXJlKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5fcmVmbGVjdGlvblRleHR1cmUpIHsKKyAgICAgICAgICAg
IGFjdGl2ZVRleHR1cmVzLnB1c2godGhpcy5fcmVmbGVjdGlvblRleHR1cmUpOworICAgICAgICB9
CisgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRleHR1cmUpIHsKKyAgICAgICAgICAgIGFjdGl2
ZVRleHR1cmVzLnB1c2godGhpcy5fZW1pc3NpdmVUZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAodGhpcy5fcmVmbGVjdGl2aXR5VGV4dHVyZSkgeworICAgICAgICAgICAgYWN0aXZlVGV4
dHVyZXMucHVzaCh0aGlzLl9yZWZsZWN0aXZpdHlUZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAodGhpcy5fbWV0YWxsaWNUZXh0dXJlKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJl
cy5wdXNoKHRoaXMuX21ldGFsbGljVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX21pY3JvU3VyZmFjZVRleHR1cmUpIHsKKyAgICAgICAgICAgIGFjdGl2ZVRleHR1cmVzLnB1
c2godGhpcy5fbWljcm9TdXJmYWNlVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX2J1bXBUZXh0dXJlKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMu
X2J1bXBUZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fbGlnaHRtYXBUZXh0
dXJlKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMuX2xpZ2h0bWFwVGV4
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zdWJTdXJmYWNlLmdldEFjdGl2ZVRleHR1
cmVzKGFjdGl2ZVRleHR1cmVzKTsKKyAgICAgICAgdGhpcy5jbGVhckNvYXQuZ2V0QWN0aXZlVGV4
dHVyZXMoYWN0aXZlVGV4dHVyZXMpOworICAgICAgICB0aGlzLnNoZWVuLmdldEFjdGl2ZVRleHR1
cmVzKGFjdGl2ZVRleHR1cmVzKTsKKyAgICAgICAgdGhpcy5hbmlzb3Ryb3B5LmdldEFjdGl2ZVRl
eHR1cmVzKGFjdGl2ZVRleHR1cmVzKTsKKyAgICAgICAgcmV0dXJuIGFjdGl2ZVRleHR1cmVzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2tzIHRvIHNlZSBpZiBhIHRleHR1cmUgaXMgdXNl
ZCBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICogQHBhcmFtIHRleHR1cmUgLSBCYXNlIHRleHR1cmUg
dG8gdXNlLgorICAgICAqIEByZXR1cm5zIC0gQm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGEgdGV4dHVy
ZSBpcyB1c2VkIGluIHRoZSBtYXRlcmlhbC4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwu
cHJvdG90eXBlLmhhc1RleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgICAgICBpZiAo
X3N1cGVyLnByb3RvdHlwZS5oYXNUZXh0dXJlLmNhbGwodGhpcywgdGV4dHVyZSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9hbGJlZG9U
ZXh0dXJlID09PSB0ZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5fYW1iaWVudFRleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9vcGFjaXR5
VGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlID09PSB0ZXh0dXJlKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmVm
bGVjdGl2aXR5VGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX21ldGFsbGljVGV4dHVyZSA9PT0gdGV4dHVy
ZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX21pY3JvU3VyZmFjZVRleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9idW1wVGV4dHVyZSA9PT0gdGV4
dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuc3ViU3VyZmFjZS5oYXNUZXh0
dXJlKHRleHR1cmUpIHx8CisgICAgICAgICAgICB0aGlzLmNsZWFyQ29hdC5oYXNUZXh0dXJlKHRl
eHR1cmUpIHx8CisgICAgICAgICAgICB0aGlzLnNoZWVuLmhhc1RleHR1cmUodGV4dHVyZSkgfHwK
KyAgICAgICAgICAgIHRoaXMuYW5pc290cm9weS5oYXNUZXh0dXJlKHRleHR1cmUpOworICAgIH07
CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhlIHJlc291cmNlcyBvZiB0aGUgbWF0ZXJpYWwu
CisgICAgICogQHBhcmFtIGZvcmNlRGlzcG9zZUVmZmVjdCAtIEZvcmNlcyB0aGUgZGlzcG9zYWwg
b2YgZWZmZWN0cy4KKyAgICAgKiBAcGFyYW0gZm9yY2VEaXNwb3NlVGV4dHVyZXMgLSBGb3JjZXMg
dGhlIGRpc3Bvc2FsIG9mIGFsbCB0ZXh0dXJlcy4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJp
YWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZm9yY2VEaXNwb3NlRWZmZWN0LCBmb3Jj
ZURpc3Bvc2VUZXh0dXJlcykgeworICAgICAgICBpZiAoZm9yY2VEaXNwb3NlVGV4dHVyZXMpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl9hbGJlZG9UZXh0dXJlKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fYWxiZWRvVGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodGhpcy5fYW1iaWVudFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbWJp
ZW50VGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhp
cy5fb3BhY2l0eVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9vcGFjaXR5VGV4dHVy
ZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fcmVmbGVj
dGlvblRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZS5k
aXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fZW52aXJvbm1l
bnRCUkRGVGV4dHVyZSAmJiB0aGlzLmdldFNjZW5lKCkuZW52aXJvbm1lbnRCUkRGVGV4dHVyZSAh
PT0gdGhpcy5fZW52aXJvbm1lbnRCUkRGVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMu
X2Vudmlyb25tZW50QlJERlRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHRoaXMuX2VtaXNzaXZlVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMu
X2VtaXNzaXZlVGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodGhpcy5fbWV0YWxsaWNUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fbWV0YWxs
aWNUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlz
Ll9yZWZsZWN0aXZpdHlUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVmbGVjdGl2
aXR5VGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhp
cy5fYnVtcFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9idW1wVGV4dHVyZS5kaXNw
b3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fbGlnaHRtYXBUZXh0
dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRtYXBUZXh0dXJlLmRpc3Bvc2UoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLnN1YlN1cmZhY2UuZGlzcG9z
ZShmb3JjZURpc3Bvc2VUZXh0dXJlcyk7CisgICAgICAgIHRoaXMuY2xlYXJDb2F0LmRpc3Bvc2Uo
Zm9yY2VEaXNwb3NlVGV4dHVyZXMpOworICAgICAgICB0aGlzLnNoZWVuLmRpc3Bvc2UoZm9yY2VE
aXNwb3NlVGV4dHVyZXMpOworICAgICAgICB0aGlzLmFuaXNvdHJvcHkuZGlzcG9zZShmb3JjZURp
c3Bvc2VUZXh0dXJlcyk7CisgICAgICAgIHRoaXMuX3JlbmRlclRhcmdldHMuZGlzcG9zZSgpOwor
ICAgICAgICBpZiAodGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiB0aGlzLl9p
bWFnZVByb2Nlc3NpbmdPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNz
aW5nQ29uZmlndXJhdGlvbi5vblVwZGF0ZVBhcmFtZXRlcnMucmVtb3ZlKHRoaXMuX2ltYWdlUHJv
Y2Vzc2luZ09ic2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRp
c3Bvc2UuY2FsbCh0aGlzLCBmb3JjZURpc3Bvc2VFZmZlY3QsIGZvcmNlRGlzcG9zZVRleHR1cmVz
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBCUk1hdGVyaWFsVHJhbnNwYXJlbmN5TW9kZTog
Tm8gdHJhbnNwYXJlbmN5IG1vZGUsIEFscGhhIGNoYW5uZWwgaXMgbm90IHVzZS4KKyAgICAgKi8K
KyAgICBQQlJCYXNlTWF0ZXJpYWwuUEJSTUFURVJJQUxfT1BBUVVFID0gMDsKKyAgICAvKioKKyAg
ICAgKiBQQlJNYXRlcmlhbFRyYW5zcGFyZW5jeU1vZGU6IEFscGhhIFRlc3QgbW9kZSwgcGl4ZWwg
YXJlIGRpc2NhcmRlZCBiZWxvdyBhIGNlcnRhaW4gdGhyZXNob2xkIGRlZmluZWQgYnkgdGhlIGFs
cGhhIGN1dG9mZiB2YWx1ZS4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwuUEJSTUFURVJJ
QUxfQUxQSEFURVNUID0gMTsKKyAgICAvKioKKyAgICAgKiBQQlJNYXRlcmlhbFRyYW5zcGFyZW5j
eU1vZGU6IFBpeGVscyBhcmUgYmxlbmRlZCAoYWNjb3JkaW5nIHRvIHRoZSBhbHBoYSBtb2RlKSB3
aXRoIHRoZSBhbHJlYWR5IGRyYXduIHBpeGVscyBpbiB0aGUgY3VycmVudCBmcmFtZSBidWZmZXIu
CisgICAgICovCisgICAgUEJSQmFzZU1hdGVyaWFsLlBCUk1BVEVSSUFMX0FMUEhBQkxFTkQgPSAy
OworICAgIC8qKgorICAgICAqIFBCUk1hdGVyaWFsVHJhbnNwYXJlbmN5TW9kZTogUGl4ZWxzIGFy
ZSBibGVuZGVkIChhY2NvcmRpbmcgdG8gdGhlIGFscGhhIG1vZGUpIHdpdGggdGhlIGFscmVhZHkg
ZHJhd24gcGl4ZWxzIGluIHRoZSBjdXJyZW50IGZyYW1lIGJ1ZmZlci4KKyAgICAgKiBUaGV5IGFy
ZSBhbHNvIGRpc2NhcmRlZCBiZWxvdyB0aGUgYWxwaGEgY3V0b2ZmIHRocmVzaG9sZCB0byBpbXBy
b3ZlIHBlcmZvcm1hbmNlcy4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwuUEJSTUFURVJJ
QUxfQUxQSEFURVNUQU5EQkxFTkQgPSAzOworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGRl
ZmF1bHQgdmFsdWUgb2YgaG93IG11Y2ggQU8gbWFwIGlzIG9jY2x1ZGluZyB0aGUgYW5hbHl0aWNh
bCBsaWdodHMKKyAgICAgKiAocG9pbnQgc3BvdC4uLikuCisgICAgICovCisgICAgUEJSQmFzZU1h
dGVyaWFsLkRFRkFVTFRfQU9fT05fQU5BTFlUSUNBTF9MSUdIVFMgPSAwOworICAgIC8qKgorICAg
ICAqIFBCUk1hdGVyaWFsTGlnaHRGYWxsb2ZmIFBoeXNpY2FsOiBsaWdodCBpcyBmYWxsaW5nIG9m
ZiBmb2xsb3dpbmcgdGhlIGludmVyc2Ugc3F1YXJlZCBkaXN0YW5jZSBsYXcuCisgICAgICovCisg
ICAgUEJSQmFzZU1hdGVyaWFsLkxJR0hURkFMTE9GRl9QSFlTSUNBTCA9IDA7CisgICAgLyoqCisg
ICAgICogUEJSTWF0ZXJpYWxMaWdodEZhbGxvZmYgZ2x0ZjogbGlnaHQgaXMgZmFsbGluZyBvZmYg
YXMgZGVzY3JpYmVkIGluIHRoZSBnbHRmIG1vdmluZyB0byBQQlIgZG9jdW1lbnQKKyAgICAgKiB0
byBlbmhhbmNlIGludGVyb3BlcmFiaWxpdHkgd2l0aCBvdGhlciBlbmdpbmVzLgorICAgICAqLwor
ICAgIFBCUkJhc2VNYXRlcmlhbC5MSUdIVEZBTExPRkZfR0xURiA9IDE7CisgICAgLyoqCisgICAg
ICogUEJSTWF0ZXJpYWxMaWdodEZhbGxvZmYgU3RhbmRhcmQ6IGxpZ2h0IGlzIGZhbGxpbmcgb2Zm
IGxpa2UgaW4gdGhlIHN0YW5kYXJkIG1hdGVyaWFsCisgICAgICogdG8gZW5oYW5jZSBpbnRlcm9w
ZXJhYmlsaXR5IHdpdGggb3RoZXIgbWF0ZXJpYWxzLgorICAgICAqLworICAgIFBCUkJhc2VNYXRl
cmlhbC5MSUdIVEZBTExPRkZfU1RBTkRBUkQgPSAyOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzSW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbiJdKSgpCisgICAgXSwgUEJSQmFzZU1hdGVyaWFsLnByb3RvdHlw
ZSwgIl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRU
b1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzTWlzY0RpcnR5IikKKyAgICBdLCBQQlJC
YXNlTWF0ZXJpYWwucHJvdG90eXBlLCAiZGVidWdNb2RlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoKQorICAgIF0sIFBCUkJhc2VNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VMb2dhcml0aG1p
Y0RlcHRoIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBQQlJCYXNlTWF0ZXJp
YWwucHJvdG90eXBlLCAidHJhbnNwYXJlbmN5TW9kZSIsIG51bGwpOworICAgIHJldHVybiBQQlJC
YXNlTWF0ZXJpYWw7Cit9KF9NYXRlcmlhbHNfcHVzaE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xN19fWyJQdXNoTWF0ZXJpYWwiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL01hdGVyaWFscy9QQlIvcGJyQmFzZVNpbXBsZU1hdGVyaWFsLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0
ZXJpYWxzL1BCUi9wYnJCYXNlU2ltcGxlTWF0ZXJpYWwudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IFBCUkJhc2VTaW1wbGVNYXRlcmlhbCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQQlJCYXNlU2ltcGxlTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBCUkJh
c2VTaW1wbGVNYXRlcmlhbDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGli
ICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01p
c2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGJyQmFzZU1hdGVyaWFsX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BickJhc2VNYXRlcmlh
bCAqLyAiLi9NYXRlcmlhbHMvUEJSL3BickJhc2VNYXRlcmlhbC50cyIpOworCisKKworCisvKioK
KyAqIFRoZSBQaHlzaWNhbGx5IGJhc2VkIHNpbXBsZSBiYXNlIG1hdGVyaWFsIG9mIEJKUy4KKyAq
CisgKiBUaGlzIGVuYWJsZXMgYmV0dGVyIG5hbWluZyBhbmQgY29udmVudGlvbiBlbmZvcmNlbWVu
dHMgb24gdG9wIG9mIHRoZSBwYnJNYXRlcmlhbC4KKyAqIEl0IGlzIHVzZWQgYXMgdGhlIGJhc2Ug
Y2xhc3MgZm9yIGJvdGggdGhlIHNwZWNHbG9zcyBhbmQgbWV0YWxSb3VnaCBjb252ZW50aW9ucy4K
KyAqLwordmFyIFBCUkJhc2VTaW1wbGVNYXRlcmlhbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShQQlJCYXNlU2ltcGxlTWF0ZXJpYWwsIF9zdXBlcik7CisgICAgLyoqCisgICAgICog
SW5zdGFudGlhdGVzIGEgbmV3IFBCUk1hdGVyaWFsIGluc3RhbmNlLgorICAgICAqCisgICAgICog
QHBhcmFtIG5hbWUgVGhlIG1hdGVyaWFsIG5hbWUKKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNj
ZW5lIHRoZSBtYXRlcmlhbCB3aWxsIGJlIHVzZSBpbi4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQ
QlJCYXNlU2ltcGxlTWF0ZXJpYWwobmFtZSwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
X3N1cGVyLmNhbGwodGhpcywgbmFtZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBOdW1iZXIgb2YgU2ltdWx0YW5lb3VzIGxpZ2h0cyBhbGxvd2VkIG9uIHRoZSBtYXRl
cmlhbC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm1heFNpbXVsdGFuZW91c0xpZ2h0cyA9
IDQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBzZXRzIHRvIHRydWUsIGRpc2FibGVzIGFs
bCB0aGUgbGlnaHRzIGFmZmVjdGluZyB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5kaXNhYmxlTGlnaHRpbmcgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IElmIHNldHMgdG8gdHJ1ZSwgeCBjb21wb25lbnQgb2Ygbm9ybWFsIG1hcCB2YWx1ZSB3aWxsIGlu
dmVydCAoeCA9IDEuMCAtIHgpLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaW52ZXJ0Tm9y
bWFsTWFwWCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgc2V0cyB0byB0cnVl
LCB5IGNvbXBvbmVudCBvZiBub3JtYWwgbWFwIHZhbHVlIHdpbGwgaW52ZXJ0ICh5ID0gMS4wIC0g
eSkuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5pbnZlcnROb3JtYWxNYXBZID0gZmFsc2U7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbWlzc2l2aWUgY29sb3IgdXNlZCB0byBzZWxmLWls
bHVtaW5hdGUgdGhlIG1vZGVsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZW1pc3NpdmVD
b2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJDb2xvcjMiXSgwLCAwLCAwKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9jY2x1c2lvbiBD
aGFubmVsIFN0cmVuZ2h0LgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub2NjbHVzaW9uU3Ry
ZW5ndGggPSAxLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0cnVlLCB0aGUgbGlnaHQg
bWFwIGNvbnRhaW5zIG9jY2x1c2lvbiBpbmZvcm1hdGlvbiBpbnN0ZWFkIG9mIGxpZ2h0aW5nIGlu
Zm8uCisgICAgICAgICAqLworICAgICAgICBfdGhpcy51c2VMaWdodG1hcEFzU2hhZG93bWFwID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLl91c2VBbHBoYUZyb21BbGJlZG9UZXh0dXJlID0gdHJ1ZTsK
KyAgICAgICAgX3RoaXMuX3VzZUFtYmllbnRJbkdyYXlTY2FsZSA9IHRydWU7CisgICAgICAgIHJl
dHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBCUkJhc2VTaW1w
bGVNYXRlcmlhbC5wcm90b3R5cGUsICJkb3VibGVTaWRlZCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgdGhlIGN1cnJlbnQgZG91YmxlIHNpZGVkIG1vZGUuCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90d29T
aWRlZExpZ2h0aW5nOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogSWYgc2V0
cyB0byB0cnVlIGFuZCBiYWNrZmFjZUN1bGxpbmcgaXMgZmFsc2UsIG5vcm1hbHMgd2lsbCBiZSBm
bGlwcGVkIG9uIHRoZSBiYWNrc2lkZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdHdvU2lkZWRMaWdodGluZyA9PT0g
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl90d29TaWRlZExpZ2h0aW5nID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLmJh
Y2tGYWNlQ3VsbGluZyA9ICF2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNo
ZXNBc1RleHR1cmVzRGlydHkoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgUEJSQmFzZVNpbXBs
ZU1hdGVyaWFsLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiAiUEJSQmFzZVNpbXBsZU1hdGVyaWFsIjsKKyAgICB9OworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJd
KSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzTGlnaHRz
RGlydHkiKQorICAgIF0sIFBCUkJhc2VTaW1wbGVNYXRlcmlhbC5wcm90b3R5cGUsICJtYXhTaW11
bHRhbmVvdXNMaWdodHMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBh
bmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzTGlnaHRzRGlydHkiKQorICAgIF0s
IFBCUkJhc2VTaW1wbGVNYXRlcmlhbC5wcm90b3R5cGUsICJkaXNhYmxlTGlnaHRpbmciLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5
Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIsICJfcmVmbGVjdGlvblRleHR1
cmUiKQorICAgIF0sIFBCUkJhc2VTaW1wbGVNYXRlcmlhbC5wcm90b3R5cGUsICJlbnZpcm9ubWVu
dFRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1By
b3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJS
QmFzZVNpbXBsZU1hdGVyaWFsLnByb3RvdHlwZSwgImludmVydE5vcm1hbE1hcFgiLCB2b2lkIDAp
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0Fs
bFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSQmFzZVNpbXBsZU1hdGVyaWFs
LnByb3RvdHlwZSwgImludmVydE5vcm1hbE1hcFkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFz
VGV4dHVyZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hl
c0FzVGV4dHVyZXNEaXJ0eSIsICJfYnVtcFRleHR1cmUiKQorICAgIF0sIFBCUkJhc2VTaW1wbGVN
YXRlcmlhbC5wcm90b3R5cGUsICJub3JtYWxUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emVBc0NvbG9yMyJdKSgiZW1pc3NpdmUiKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21h
cmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUkJhc2VTaW1wbGVNYXRl
cmlhbC5wcm90b3R5cGUsICJlbWlzc2l2ZUNvbG9yIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVB
c1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNo
ZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUkJhc2VTaW1wbGVNYXRlcmlhbC5wcm90b3R5
cGUsICJlbWlzc2l2ZVRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIs
ICJfYW1iaWVudFRleHR1cmVTdHJlbmd0aCIpCisgICAgXSwgUEJSQmFzZVNpbXBsZU1hdGVyaWFs
LnByb3RvdHlwZSwgIm9jY2x1c2lvblN0cmVuZ3RoIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVB
c1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNo
ZXNBc1RleHR1cmVzRGlydHkiLCAiX2FtYmllbnRUZXh0dXJlIikKKyAgICBdLCBQQlJCYXNlU2lt
cGxlTWF0ZXJpYWwucHJvdG90eXBlLCAib2NjbHVzaW9uVGV4dHVyZSIsIHZvaWQgMCk7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAg
ICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
c2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVz
aGVzQXNUZXh0dXJlc0RpcnR5IiwgIl9hbHBoYUN1dE9mZiIpCisgICAgXSwgUEJSQmFzZVNpbXBs
ZU1hdGVyaWFsLnByb3RvdHlwZSwgImFscGhhQ3V0T2ZmIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoKQorICAgIF0sIFBCUkJhc2VTaW1wbGVNYXRlcmlhbC5wcm90b3R5cGUsICJkb3VibGVT
aWRlZCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgpLAorICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRU
b1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIsIG51bGwpCisg
ICAgXSwgUEJSQmFzZVNpbXBsZU1hdGVyaWFsLnByb3RvdHlwZSwgImxpZ2h0bWFwVGV4dHVyZSIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSko
Il9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJCYXNlU2ltcGxl
TWF0ZXJpYWwucHJvdG90eXBlLCAidXNlTGlnaHRtYXBBc1NoYWRvd21hcCIsIHZvaWQgMCk7Cisg
ICAgcmV0dXJuIFBCUkJhc2VTaW1wbGVNYXRlcmlhbDsKK30oX3BickJhc2VNYXRlcmlhbF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQQlJCYXNlTWF0ZXJpYWwiXSkpOworCisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9QQlIvcGJyQ2xlYXJDb2F0Q29uZmlndXJhdGlv
bi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvUEJSL3BickNsZWFyQ29hdENvbmZpZ3VyYXRp
b24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQQlJDbGVhckNvYXRDb25maWd1cmF0
aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUkNsZWFyQ29hdENv
bmZpZ3VyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRp
b247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0
aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21hdGVyaWFsRmxhZ3MgKi8gIi4vTWF0ZXJpYWxz
L21hdGVyaWFsRmxhZ3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIgKi8gIi4vTWF0ZXJp
YWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisKKworCisKKworLyoqCisgKiBEZWZpbmUgdGhlIGNv
ZGUgcmVsYXRlZCB0byB0aGUgY2xlYXIgY29hdCBwYXJhbWV0ZXJzIG9mIHRoZSBwYnIgbWF0ZXJp
YWwuCisgKi8KK3ZhciBQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIGEgbmV3IGlzdGFuY2Ug
b2YgY2xlYXIgY29hdCBjb25maWd1cmF0aW9uLgorICAgICAqIEBwYXJhbSBtYXJrQWxsU3ViTWVz
aGVzQXNUZXh0dXJlc0RpcnR5IENhbGxiYWNrIHRvIGZsYWcgdGhlIG1hdGVyaWFsIHRvIGRpcnR5
CisgICAgICovCisgICAgZnVuY3Rpb24gUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbihtYXJrQWxs
U3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5KSB7CisgICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBpZiB0aGUgY2xlYXIgY29hdCBp
cyBlbmFibGVkIGluIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaXNF
bmFibGVkID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBjbGVh
ciBjb2F0IGxheWVyIHN0cmVuZ3RoIChiZXR3ZWVuIDAgYW5kIDEpIGl0IGRlZmF1bHRzIHRvIDEu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmludGVuc2l0eSA9IDE7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBEZWZpbmVzIHRoZSBjbGVhciBjb2F0IGxheWVyIHJvdWdobmVzcy4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMucm91Z2huZXNzID0gMDsKKyAgICAgICAgdGhpcy5faW5kZXhP
ZlJlZnJhY3Rpb24gPSBQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uLl9EZWZhdWx0SW5kZXhPZlJl
ZnJhY3Rpb247CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBpbmRleCBvZiBy
ZWZyYWN0aW9uIG9mIHRoZSBjbGVhciBjb2F0LgorICAgICAgICAgKiBUaGlzIGRlZmF1bHRzIHRv
IDEuNSBjb3JyZXNwb25kaW5nIHRvIGEgMC4wNCBmMCBvciBhIDQlIHJlZmxlY3RhbmNlIGF0IG5v
cm1hbCBpbmNpZGVuY2UKKyAgICAgICAgICogVGhlIGRlZmF1bHQgZml0cyB3aXRoIGEgcG9seXVy
ZXRoYW5lIG1hdGVyaWFsLgorICAgICAgICAgKiBDaGFuZ2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBp
cyBtb3JlIHBlcmZvcm1hbmNlIGludGVuc2l2ZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
aW5kZXhPZlJlZnJhY3Rpb24gPSBQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uLl9EZWZhdWx0SW5k
ZXhPZlJlZnJhY3Rpb247CisgICAgICAgIHRoaXMuX3RleHR1cmUgPSBudWxsOworICAgICAgICAv
KioKKyAgICAgICAgICogU3RvcmVzIHRoZSBjbGVhciBjb2F0IHZhbHVlcyBpbiBhIHRleHR1cmUu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLnRleHR1cmUgPSBudWxsOworICAgICAgICB0aGlz
Ll9idW1wVGV4dHVyZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhl
IGNsZWFyIGNvYXQgc3BlY2lmaWMgYnVtcCB0ZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5idW1wVGV4dHVyZSA9IG51bGw7CisgICAgICAgIHRoaXMuX2lzVGludEVuYWJsZWQgPSBm
YWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaWYgdGhlIGNsZWFyIGNvYXQg
dGludCBpcyBlbmFibGVkIGluIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuaXNUaW50RW5hYmxlZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5l
cyB0aGUgY2xlYXIgY29hdCB0aW50IG9mIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICogVGhpcyBp
cyBvbmx5IHVzZSBpZiB0aW50IGlzIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
dGludENvbG9yID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQ29sb3IzIl0uV2hpdGUoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhl
IGRpc3RhbmNlIGF0IHdoaWNoIHRoZSB0aW50IGNvbG9yIHNob3VsZCBiZSBmb3VuZCBpbiB0aGUK
KyAgICAgICAgICogY2xlYXIgY29hdCBtZWRpYS4KKyAgICAgICAgICogVGhpcyBpcyBvbmx5IHVz
ZSBpZiB0aW50IGlzIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudGludENvbG9y
QXREaXN0YW5jZSA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBjbGVh
ciBjb2F0IGxheWVyIHRoaWNrbmVzcy4KKyAgICAgICAgICogVGhpcyBpcyBvbmx5IHVzZSBpZiB0
aW50IGlzIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudGludFRoaWNrbmVzcyA9
IDE7CisgICAgICAgIHRoaXMuX3RpbnRUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFN0b3JlcyB0aGUgY2xlYXIgdGludCB2YWx1ZXMgaW4gYSB0ZXh0dXJlLgorICAgICAg
ICAgKiByZ2IgaXMgdGludAorICAgICAgICAgKiBhIGlzIGEgdGhpY2tuZXNzIGZhY3RvcgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy50aW50VGV4dHVyZSA9IG51bGw7CisgICAgICAgIHRoaXMu
X2ludGVybmFsTWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSA9IG1hcmtBbGxTdWJNZXNo
ZXNBc1RleHR1cmVzRGlydHk7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgUEJSQ2xl
YXJDb2F0Q29uZmlndXJhdGlvbi5wcm90b3R5cGUuX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVz
RGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2ludGVybmFsTWFya0FsbFN1Yk1l
c2hlc0FzVGV4dHVyZXNEaXJ0eSgpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB3ZWh0
ZXIgdGhlIHN1Ym1lc2ggaXMgcmVhZHkgdG8gYmUgdXNlZCBvciBub3QuCisgICAgICogQHBhcmFt
IGRlZmluZXMgdGhlIGxpc3Qgb2YgImRlZmluZXMiIHRvIHVwZGF0ZS4KKyAgICAgKiBAcGFyYW0g
c2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgdGhlIG1hdGVyaWFsIGJlbG9uZ3MgdG8uCisgICAgICog
QHBhcmFtIGVuZ2luZSBkZWZpbmVzIHRoZSBlbmdpbmUgdGhlIG1hdGVyaWFsIGJlbG9uZ3MgdG8u
CisgICAgICogQHBhcmFtIGRpc2FibGVCdW1wTWFwIGRlZmluZXMgd2V0aGVyIHRoZSBtYXRlcmlh
bCBkaXNhYmxlcyBidW1wIG9yIG5vdC4KKyAgICAgKiBAcmV0dXJucyAtIGJvb2xlYW4gaW5kaWNh
dGluZyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJlYWR5IG9yIG5vdC4KKyAgICAgKi8KKyAgICBQQlJD
bGVhckNvYXRDb25maWd1cmF0aW9uLnByb3RvdHlwZS5pc1JlYWR5Rm9yU3ViTWVzaCA9IGZ1bmN0
aW9uIChkZWZpbmVzLCBzY2VuZSwgZW5naW5lLCBkaXNhYmxlQnVtcE1hcCkgeworICAgICAgICBp
ZiAoZGVmaW5lcy5fYXJlVGV4dHVyZXNEaXJ0eSkgeworICAgICAgICAgICAgaWYgKHNjZW5lLnRl
eHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlICYmIF9t
YXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdGVyaWFsRmxhZ3Mi
XS5DbGVhckNvYXRUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRo
aXMuX3RleHR1cmUuaXNSZWFkeU9yTm90QmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChlbmdpbmUuZ2V0Q2FwcygpLnN0YW5kYXJkRGVyaXZh
dGl2ZXMgJiYgdGhpcy5fYnVtcFRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxGbGFncyJdLkNsZWFyQ29hdEJ1bXBUZXh0dXJlRW5h
YmxlZCAmJiAhZGlzYWJsZUJ1bXBNYXApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQnVtcCB0
ZXh0dXJlIGNhbm5vdCBiZSBub3QgYmxvY2tpbmcuCisgICAgICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5fYnVtcFRleHR1cmUuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzVGludEVuYWJsZWQgJiYgdGhpcy5fdGludFRleHR1
cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJp
YWxGbGFncyJdLkNsZWFyQ29hdFRpbnRUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMuX3RpbnRUZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyB0byBzZWUgaWYgYSB0
ZXh0dXJlIGlzIHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIHRo
ZSBsaXN0IG9mICJkZWZpbmVzIiB0byB1cGRhdGUuCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmlu
ZXMgdGhlIHNjZW5lIHRvIHRoZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgorICAgICAqLworICAgIFBC
UkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnByZXBhcmVEZWZpbmVzID0gZnVuY3Rp
b24gKGRlZmluZXMsIHNjZW5lKSB7CisgICAgICAgIGlmICh0aGlzLl9pc0VuYWJsZWQpIHsKKyAg
ICAgICAgICAgIGRlZmluZXMuQ0xFQVJDT0FUID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChkZWZp
bmVzLl9hcmVUZXh0dXJlc0RpcnR5KSB7CisgICAgICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1
cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSAmJiBf
bWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdz
Il0uQ2xlYXJDb2F0VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9N
YXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0
ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX3RleHR1cmUsIGRl
ZmluZXMsICJDTEVBUkNPQVRfVEVYVFVSRSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5D
TEVBUkNPQVRfVEVYVFVSRSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9idW1wVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0uQ2xlYXJDb2F0QnVtcFRl
eHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVy
aWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdGVyaWFsSGVscGVyIl0u
UHJlcGFyZURlZmluZXNGb3JNZXJnZWRVVih0aGlzLl9idW1wVGV4dHVyZSwgZGVmaW5lcywgIkNM
RUFSQ09BVF9CVU1QIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkNMRUFSQ09BVF9CVU1Q
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVm
aW5lcy5DTEVBUkNPQVRfREVGQVVMVElPUiA9IHRoaXMuX2luZGV4T2ZSZWZyYWN0aW9uID09PSBQ
QlJDbGVhckNvYXRDb25maWd1cmF0aW9uLl9EZWZhdWx0SW5kZXhPZlJlZnJhY3Rpb247CisgICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1RpbnRFbmFibGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZpbmVzLkNMRUFSQ09BVF9USU5UID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl90aW50VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0uQ2xlYXJDb2F0VGludFRleHR1
cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRl
cmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRlcmlhbEhlbHBlciJd
LlByZXBhcmVEZWZpbmVzRm9yTWVyZ2VkVVYodGhpcy5fdGludFRleHR1cmUsIGRlZmluZXMsICJD
TEVBUkNPQVRfVElOVF9URVhUVVJFIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLkNMRUFSQ09BVF9USU5UX1RFWFRVUkUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuQ0xFQVJDT0FUX1RJTlQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuQ0xFQVJDT0FUX1RJTlRfVEVYVFVS
RSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVmaW5l
cy5DTEVBUkNPQVQgPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuQ0xFQVJDT0FUX1RFWFRV
UkUgPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuQ0xFQVJDT0FUX0JVTVAgPSBmYWxzZTsK
KyAgICAgICAgICAgIGRlZmluZXMuQ0xFQVJDT0FUX1RJTlQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGRlZmluZXMuQ0xFQVJDT0FUX1RJTlRfVEVYVFVSRSA9IGZhbHNlOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgbWF0ZXJpYWwgZGF0YS4KKyAgICAgKiBAcGFy
YW0gdW5pZm9ybUJ1ZmZlciBkZWZpbmVzIHRoZSBVbmlmb3JtIGJ1ZmZlciB0byBmaWxsIGluLgor
ICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGUgbWF0ZXJpYWwgYmVsb25n
cyB0by4KKyAgICAgKiBAcGFyYW0gZW5naW5lIGRlZmluZXMgdGhlIGVuZ2luZSB0aGUgbWF0ZXJp
YWwgYmVsb25ncyB0by4KKyAgICAgKiBAcGFyYW0gZGlzYWJsZUJ1bXBNYXAgZGVmaW5lcyB3ZXRo
ZXIgdGhlIG1hdGVyaWFsIGRpc2FibGVzIGJ1bXAgb3Igbm90LgorICAgICAqIEBwYXJhbSBpc0Zy
b3plbiBkZWZpbmVzIHdldGhlciB0aGUgbWF0ZXJpYWwgaXMgZnJvemVuIG9yIG5vdC4KKyAgICAg
KiBAcGFyYW0gaW52ZXJ0Tm9ybWFsTWFwWCBJZiBzZXRzIHRvIHRydWUsIHggY29tcG9uZW50IG9m
IG5vcm1hbCBtYXAgdmFsdWUgd2lsbCBiZSBpbnZlcnRlZCAoeCA9IDEuMCAtIHgpLgorICAgICAq
IEBwYXJhbSBpbnZlcnROb3JtYWxNYXBZIElmIHNldHMgdG8gdHJ1ZSwgeSBjb21wb25lbnQgb2Yg
bm9ybWFsIG1hcCB2YWx1ZSB3aWxsIGJlIGludmVydGVkICh5ID0gMS4wIC0geSkuCisgICAgICov
CisgICAgUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbi5wcm90b3R5cGUuYmluZEZvclN1Yk1lc2gg
PSBmdW5jdGlvbiAodW5pZm9ybUJ1ZmZlciwgc2NlbmUsIGVuZ2luZSwgZGlzYWJsZUJ1bXBNYXAs
IGlzRnJvemVuLCBpbnZlcnROb3JtYWxNYXBYLCBpbnZlcnROb3JtYWxNYXBZKSB7CisgICAgICAg
IGlmICghdW5pZm9ybUJ1ZmZlci51c2VVYm8gfHwgIWlzRnJvemVuIHx8ICF1bmlmb3JtQnVmZmVy
LmlzU3luYykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgJiYgX21hdGVyaWFsRmxh
Z3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxGbGFncyJdLkNsZWFyQ29h
dFRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVG
bG9hdDIoInZDbGVhckNvYXRJbmZvcyIsIHRoaXMuX3RleHR1cmUuY29vcmRpbmF0ZXNJbmRleCwg
dGhpcy5fdGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlh
bEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRlcmlhbEhlbHBlciJdLkJp
bmRUZXh0dXJlTWF0cml4KHRoaXMuX3RleHR1cmUsIHVuaWZvcm1CdWZmZXIsICJjbGVhckNvYXQi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9idW1wVGV4dHVyZSAmJiBl
bmdpbmUuZ2V0Q2FwcygpLnN0YW5kYXJkRGVyaXZhdGl2ZXMgJiYgX21hdGVyaWFsRmxhZ3NfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxGbGFncyJdLkNsZWFyQ29hdFRleHR1
cmVFbmFibGVkICYmICFkaXNhYmxlQnVtcE1hcCkgeworICAgICAgICAgICAgICAgIHVuaWZvcm1C
dWZmZXIudXBkYXRlRmxvYXQyKCJ2Q2xlYXJDb2F0QnVtcEluZm9zIiwgdGhpcy5fYnVtcFRleHR1
cmUuY29vcmRpbmF0ZXNJbmRleCwgdGhpcy5fYnVtcFRleHR1cmUubGV2ZWwpOworICAgICAgICAg
ICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kVGV4dHVyZU1hdHJpeCh0aGlzLl9idW1wVGV4dHVy
ZSwgdW5pZm9ybUJ1ZmZlciwgImNsZWFyQ29hdEJ1bXAiKTsKKyAgICAgICAgICAgICAgICBpZiAo
c2NlbmUuX21pcnJvcmVkQ2FtZXJhUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgdW5p
Zm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIoInZDbGVhckNvYXRUYW5nZW50U3BhY2VQYXJhbXMiLCBp
bnZlcnROb3JtYWxNYXBYID8gMS4wIDogLTEuMCwgaW52ZXJ0Tm9ybWFsTWFwWSA/IDEuMCA6IC0x
LjApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIoInZDbGVhckNvYXRUYW5nZW50
U3BhY2VQYXJhbXMiLCBpbnZlcnROb3JtYWxNYXBYID8gLTEuMCA6IDEuMCwgaW52ZXJ0Tm9ybWFs
TWFwWSA/IC0xLjAgOiAxLjApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0aGlzLl90aW50VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0uQ2xlYXJDb2F0VGludFRleHR1
cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIo
InZDbGVhckNvYXRUaW50SW5mb3MiLCB0aGlzLl90aW50VGV4dHVyZS5jb29yZGluYXRlc0luZGV4
LCB0aGlzLl90aW50VGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAgICAgICAgX01hdGVyaWFsc19t
YXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRlcmlhbEhlbHBl
ciJdLkJpbmRUZXh0dXJlTWF0cml4KHRoaXMuX3RpbnRUZXh0dXJlLCB1bmlmb3JtQnVmZmVyLCAi
Y2xlYXJDb2F0VGludCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ2xlYXIgQ29h
dCBHZW5lcmFsIHBhcmFtcworICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIo
InZDbGVhckNvYXRQYXJhbXMiLCB0aGlzLmludGVuc2l0eSwgdGhpcy5yb3VnaG5lc3MpOworICAg
ICAgICAgICAgLy8gQ2xlYXIgQ29hdCBSZWZyYWN0aW9uIHBhcmFtcworICAgICAgICAgICAgdmFy
IGEgPSAxIC0gdGhpcy5faW5kZXhPZlJlZnJhY3Rpb247CisgICAgICAgICAgICB2YXIgYiA9IDEg
KyB0aGlzLl9pbmRleE9mUmVmcmFjdGlvbjsKKyAgICAgICAgICAgIHZhciBmMCA9IE1hdGgucG93
KCgtYSAvIGIpLCAyKTsgLy8gU2NobGlja3MgYXBwcm94OiAoaW9yMSAtIGlvcjIpIC8gKGlvcjEg
KyBpb3IyKSB3aGVyZSBpb3IyIGZvciBhaXIgaXMgY2xvc2UgdG8gdmFjdXVtID0gMS4KKyAgICAg
ICAgICAgIHZhciBldGEgPSAxIC8gdGhpcy5faW5kZXhPZlJlZnJhY3Rpb247CisgICAgICAgICAg
ICB1bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgidkNsZWFyQ29hdFJlZnJhY3Rpb25QYXJhbXMi
LCBmMCwgZXRhLCBhLCBiKTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc1RpbnRFbmFibGVkKSB7
CisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDQoInZDbGVhckNvYXRU
aW50UGFyYW1zIiwgdGhpcy50aW50Q29sb3IuciwgdGhpcy50aW50Q29sb3IuZywgdGhpcy50aW50
Q29sb3IuYiwgTWF0aC5tYXgoMC4wMDAwMSwgdGhpcy50aW50VGhpY2tuZXNzKSk7CisgICAgICAg
ICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdCgiY2xlYXJDb2F0Q29sb3JBdERpc3Rh
bmNlIiwgTWF0aC5tYXgoMC4wMDAwMSwgdGhpcy50aW50Q29sb3JBdERpc3RhbmNlKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVGV4dHVyZXMKKyAgICAgICAgaWYgKHNj
ZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgJiYg
X21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxGbGFn
cyJdLkNsZWFyQ29hdFRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1
ZmZlci5zZXRUZXh0dXJlKCJjbGVhckNvYXRTYW1wbGVyIiwgdGhpcy5fdGV4dHVyZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fYnVtcFRleHR1cmUgJiYgZW5naW5lLmdl
dENhcHMoKS5zdGFuZGFyZERlcml2YXRpdmVzICYmIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIk1hdGVyaWFsRmxhZ3MiXS5DbGVhckNvYXRCdW1wVGV4dHVyZUVu
YWJsZWQgJiYgIWRpc2FibGVCdW1wTWFwKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZl
ci5zZXRUZXh0dXJlKCJjbGVhckNvYXRCdW1wU2FtcGxlciIsIHRoaXMuX2J1bXBUZXh0dXJlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9pc1RpbnRFbmFibGVkICYmIHRo
aXMuX3RpbnRUZXh0dXJlICYmIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIk1hdGVyaWFsRmxhZ3MiXS5DbGVhckNvYXRUaW50VGV4dHVyZUVuYWJsZWQpIHsKKyAg
ICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyLnNldFRleHR1cmUoImNsZWFyQ29hdFRpbnRTYW1w
bGVyIiwgdGhpcy5fdGludFRleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdG8gc2VlIGlmIGEgdGV4dHVyZSBpcyB1c2VkIGlu
IHRoZSBtYXRlcmlhbC4KKyAgICAgKiBAcGFyYW0gdGV4dHVyZSAtIEJhc2UgdGV4dHVyZSB0byB1
c2UuCisgICAgICogQHJldHVybnMgLSBCb29sZWFuIHNwZWNpZnlpbmcgaWYgYSB0ZXh0dXJlIGlz
IHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAgICAqLworICAgIFBCUkNsZWFyQ29hdENvbmZpZ3Vy
YXRpb24ucHJvdG90eXBlLmhhc1RleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgICAg
ICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2J1bXBUZXh0dXJlID09PSB0ZXh0dXJl
KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy5fdGludFRleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJldHVybnMgYW4gYXJyYXkgb2YgdGhlIGFjdGl2ZWx5IHVzZWQgdGV4dHVyZXMuCisgICAgICog
QHBhcmFtIGFjdGl2ZVRleHR1cmVzIEFycmF5IG9mIEJhc2VUZXh0dXJlcworICAgICAqLworICAg
IFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldEFjdGl2ZVRleHR1cmVzID0g
ZnVuY3Rpb24gKGFjdGl2ZVRleHR1cmVzKSB7CisgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlKSB7
CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMuX3RleHR1cmUpOworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl9idW1wVGV4dHVyZSkgeworICAgICAgICAgICAgYWN0aXZl
VGV4dHVyZXMucHVzaCh0aGlzLl9idW1wVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX3RpbnRUZXh0dXJlKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRo
aXMuX3RpbnRUZXh0dXJlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmV0
dXJucyB0aGUgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAgICAgKiBAcGFyYW0gYW5pbWF0YWJsZXMg
QXJyYXkgb2YgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAgICAgKi8KKyAgICBQQlJDbGVhckNvYXRD
b25maWd1cmF0aW9uLnByb3RvdHlwZS5nZXRBbmltYXRhYmxlcyA9IGZ1bmN0aW9uIChhbmltYXRh
YmxlcykgeworICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSAmJiB0aGlzLl90ZXh0dXJlLmFuaW1h
dGlvbnMgJiYgdGhpcy5fdGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAg
ICAgIGFuaW1hdGFibGVzLnB1c2godGhpcy5fdGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX2J1bXBUZXh0dXJlICYmIHRoaXMuX2J1bXBUZXh0dXJlLmFuaW1hdGlvbnMgJiYg
dGhpcy5fYnVtcFRleHR1cmUuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBh
bmltYXRhYmxlcy5wdXNoKHRoaXMuX2J1bXBUZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5fdGludFRleHR1cmUgJiYgdGhpcy5fdGludFRleHR1cmUuYW5pbWF0aW9ucyAmJiB0
aGlzLl90aW50VGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIGFu
aW1hdGFibGVzLnB1c2godGhpcy5fdGludFRleHR1cmUpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgcmVzb3VyY2VzIG9mIHRoZSBtYXRlcmlhbC4KKyAg
ICAgKiBAcGFyYW0gZm9yY2VEaXNwb3NlVGV4dHVyZXMgLSBGb3JjZXMgdGhlIGRpc3Bvc2FsIG9m
IGFsbCB0ZXh0dXJlcy4KKyAgICAgKi8KKyAgICBQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uLnBy
b3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGZvcmNlRGlzcG9zZVRleHR1cmVzKSB7CisgICAg
ICAgIGlmIChmb3JjZURpc3Bvc2VUZXh0dXJlcykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3Rl
eHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9idW1wVGV4dHVyZSkgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2J1bXBUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh0aGlzLl90aW50VGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3Rp
bnRUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgKiBHZXQgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZSBvZiB0aGUgdGV4dHVyZSB1
c2VmdWwgZm9yIHNlcmlhbGl6YXRpb24gb3IgZHluYW1pYyBjb2RpbmcuCisgICAgKiBAcmV0dXJu
cyAiUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbiIKKyAgICAqLworICAgIFBCUkNsZWFyQ29hdENv
bmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICJQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uIjsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFkZCBmYWxsYmFja3MgdG8gdGhlIGVmZmVjdCBmYWxsYmFja3MgbGlzdC4KKyAgICAg
KiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBCYXNlIHRleHR1cmUgdG8gdXNlLgorICAgICAq
IEBwYXJhbSBmYWxsYmFja3MgZGVmaW5lcyB0aGUgY3VycmVudCBmYWxsYmFjayBsaXN0LgorICAg
ICAqIEBwYXJhbSBjdXJyZW50UmFuayBkZWZpbmVzIHRoZSBjdXJyZW50IGZhbGxiYWNrIHJhbmsu
CisgICAgICogQHJldHVybnMgdGhlIG5ldyBmYWxsYmFjayByYW5rLgorICAgICAqLworICAgIFBC
UkNsZWFyQ29hdENvbmZpZ3VyYXRpb24uQWRkRmFsbGJhY2tzID0gZnVuY3Rpb24gKGRlZmluZXMs
IGZhbGxiYWNrcywgY3VycmVudFJhbmspIHsKKyAgICAgICAgaWYgKGRlZmluZXMuQ0xFQVJDT0FU
X0JVTVApIHsKKyAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjayhjdXJyZW50UmFuaysr
LCAiQ0xFQVJDT0FUX0JVTVAiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5DTEVB
UkNPQVRfVElOVCkgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGN1cnJlbnRS
YW5rKyssICJDTEVBUkNPQVRfVElOVCIpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVz
LkNMRUFSQ09BVCkgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGN1cnJlbnRS
YW5rKyssICJDTEVBUkNPQVQiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY3VycmVudFJh
bms7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgdGhlIHJlcXVpcmVkIHVuaWZvcm1zIHRv
IHRoZSBjdXJyZW50IGxpc3QuCisgICAgICogQHBhcmFtIHVuaWZvcm1zIGRlZmluZXMgdGhlIGN1
cnJlbnQgdW5pZm9ybSBsaXN0LgorICAgICAqLworICAgIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRp
b24uQWRkVW5pZm9ybXMgPSBmdW5jdGlvbiAodW5pZm9ybXMpIHsKKyAgICAgICAgdW5pZm9ybXMu
cHVzaCgidkNsZWFyQ29hdFRhbmdlbnRTcGFjZVBhcmFtcyIsICJ2Q2xlYXJDb2F0UGFyYW1zIiwg
InZDbGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zIiwgInZDbGVhckNvYXRUaW50UGFyYW1zIiwgImNs
ZWFyQ29hdENvbG9yQXREaXN0YW5jZSIsICJjbGVhckNvYXRNYXRyaXgiLCAiY2xlYXJDb2F0QnVt
cE1hdHJpeCIsICJjbGVhckNvYXRUaW50TWF0cml4IiwgInZDbGVhckNvYXRJbmZvcyIsICJ2Q2xl
YXJDb2F0QnVtcEluZm9zIiwgInZDbGVhckNvYXRUaW50SW5mb3MiKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEFkZCB0aGUgcmVxdWlyZWQgc2FtcGxlcnMgdG8gdGhlIGN1cnJlbnQgbGlzdC4K
KyAgICAgKiBAcGFyYW0gc2FtcGxlcnMgZGVmaW5lcyB0aGUgY3VycmVudCBzYW1wbGVyIGxpc3Qu
CisgICAgICovCisgICAgUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbi5BZGRTYW1wbGVycyA9IGZ1
bmN0aW9uIChzYW1wbGVycykgeworICAgICAgICBzYW1wbGVycy5wdXNoKCJjbGVhckNvYXRTYW1w
bGVyIiwgImNsZWFyQ29hdEJ1bXBTYW1wbGVyIiwgImNsZWFyQ29hdFRpbnRTYW1wbGVyIik7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgdGhlIHJlcXVpcmVkIHVuaWZvcm1zIHRvIHRoZSBj
dXJyZW50IGJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybUJ1ZmZlciBkZWZpbmVzIHRoZSBj
dXJyZW50IHVuaWZvcm0gYnVmZmVyLgorICAgICAqLworICAgIFBCUkNsZWFyQ29hdENvbmZpZ3Vy
YXRpb24uUHJlcGFyZVVuaWZvcm1CdWZmZXIgPSBmdW5jdGlvbiAodW5pZm9ybUJ1ZmZlcikgewor
ICAgICAgICB1bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZDbGVhckNvYXRQYXJhbXMiLCAyKTsK
KyAgICAgICAgdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2Q2xlYXJDb2F0UmVmcmFjdGlvblBh
cmFtcyIsIDQpOworICAgICAgICB1bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZDbGVhckNvYXRJ
bmZvcyIsIDIpOworICAgICAgICB1bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oImNsZWFyQ29hdE1h
dHJpeCIsIDE2KTsKKyAgICAgICAgdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2Q2xlYXJDb2F0
QnVtcEluZm9zIiwgMik7CisgICAgICAgIHVuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidkNsZWFy
Q29hdFRhbmdlbnRTcGFjZVBhcmFtcyIsIDIpOworICAgICAgICB1bmlmb3JtQnVmZmVyLmFkZFVu
aWZvcm0oImNsZWFyQ29hdEJ1bXBNYXRyaXgiLCAxNik7CisgICAgICAgIHVuaWZvcm1CdWZmZXIu
YWRkVW5pZm9ybSgidkNsZWFyQ29hdFRpbnRQYXJhbXMiLCA0KTsKKyAgICAgICAgdW5pZm9ybUJ1
ZmZlci5hZGRVbmlmb3JtKCJjbGVhckNvYXRDb2xvckF0RGlzdGFuY2UiLCAxKTsKKyAgICAgICAg
dW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2Q2xlYXJDb2F0VGludEluZm9zIiwgMik7CisgICAg
ICAgIHVuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgiY2xlYXJDb2F0VGludE1hdHJpeCIsIDE2KTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIE1ha2VzIGEgZHVwbGljYXRlIG9mIHRoZSBjdXJyZW50
IGNvbmZpZ3VyYXRpb24gaW50byBhbm90aGVyIG9uZS4KKyAgICAgKiBAcGFyYW0gY2xlYXJDb2F0
Q29uZmlndXJhdGlvbiBkZWZpbmUgdGhlIGNvbmZpZyB3aGVyZSB0byBjb3B5IHRoZSBpbmZvCisg
ICAgICovCisgICAgUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbi5wcm90b3R5cGUuY29weVRvID0g
ZnVuY3Rpb24gKGNsZWFyQ29hdENvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0u
Q2xvbmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xlYXJDb2F0Q29uZmlndXJhdGlvbjsgfSwgdGhp
cyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoaXMgY2xlYXIgY29hdCBj
b25maWd1cmF0aW9uLgorICAgICAqIEByZXR1cm5zIC0gQW4gb2JqZWN0IHdpdGggdGhlIHNlcmlh
bGl6ZWQgY29uZmlnLgorICAgICAqLworICAgIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJv
dG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBl
ciJdLlNlcmlhbGl6ZSh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlcyBhIGFu
aXNvdHJvcHkgQ29uZmlndXJhdGlvbiBmcm9tIGEgc2VyaWFsaXplZCBvYmplY3QuCisgICAgICog
QHBhcmFtIHNvdXJjZSAtIFNlcmlhbGl6ZWQgb2JqZWN0LgorICAgICAqIEBwYXJhbSBzY2VuZSBE
ZWZpbmVzIHRoZSBzY2VuZSB3ZSBhcmUgcGFyc2luZyBmb3IKKyAgICAgKiBAcGFyYW0gcm9vdFVy
bCBEZWZpbmVzIHRoZSByb290VXJsIHRvIGxvYWQgZnJvbQorICAgICAqLworICAgIFBCUkNsZWFy
Q29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKHNvdXJjZSwgc2Nl
bmUsIHJvb3RVcmwpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVs
cGVyIl0uUGFyc2UoZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXM7IH0sIHNvdXJjZSwgc2NlbmUs
IHJvb3RVcmwpOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBkZWZhdWx0cyB0byAxLjUg
Y29ycmVzcG9uZGluZyB0byBhIDAuMDQgZjAgb3IgYSA0JSByZWZsZWN0YW5jZSBhdCBub3JtYWwg
aW5jaWRlbmNlCisgICAgICogVGhlIGRlZmF1bHQgZml0cyB3aXRoIGEgcG9seXVyZXRoYW5lIG1h
dGVyaWFsLgorICAgICAqLworICAgIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24uX0RlZmF1bHRJ
bmRleE9mUmVmcmFjdGlvbiA9IDEuNTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5k
VG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0s
IFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiaXNFbmFibGVkIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24u
cHJvdG90eXBlLCAiaW50ZW5zaXR5Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAicm91Z2huZXNzIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21h
cmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUkNsZWFyQ29hdENvbmZp
Z3VyYXRpb24ucHJvdG90eXBlLCAiaW5kZXhPZlJlZnJhY3Rpb24iLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZUFzVGV4dHVyZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0Fs
bFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSQ2xlYXJDb2F0Q29uZmlndXJh
dGlvbi5wcm90b3R5cGUsICJ0ZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1
cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1Rl
eHR1cmVzRGlydHkiKQorICAgIF0sIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBl
LCAiYnVtcFRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBh
bmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAg
XSwgUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJpc1RpbnRFbmFibGVkIiwg
dm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29y
YXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0NvbG9yMyJdKSgpCisgICAgXSwgUEJSQ2xlYXJDb2F0
Q29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ0aW50Q29sb3IiLCB2b2lkIDApOworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZSJdKSgpCisgICAgXSwgUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ0
aW50Q29sb3JBdERpc3RhbmNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAidGludFRoaWNrbmVzcyIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCksCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVy
dHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJDbGVh
ckNvYXRDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgInRpbnRUZXh0dXJlIiwgdm9pZCAwKTsKKyAg
ICByZXR1cm4gUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbjsKK30oKSk7CisKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL1BCUi9wYnJNYXRlcmlhbC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL1BC
Ui9wYnJNYXRlcmlhbC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQQlJNYXRlcmlhbCAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJQQlJNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gUEJSTWF0ZXJpYWw7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNj
L2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19icmRmVGV4
dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9NaXNjL2JyZGZUZXh0dXJlVG9vbHMgKi8gIi4vTWlzYy9icmRmVGV4dHVy
ZVRvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9wYnJCYXNlTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGJyQmFzZU1hdGVyaWFsICovICIu
L01hdGVyaWFscy9QQlIvcGJyQmFzZU1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVT
dG9yZS50cyIpOworCisKKworCisKKworLyoqCisgKiBUaGUgUGh5c2ljYWxseSBiYXNlZCBtYXRl
cmlhbCBvZiBCSlMuCisgKgorICogVGhpcyBvZmZlcnMgdGhlIG1haW4gZmVhdHVyZXMgb2YgYSBz
dGFuZGFyZCBQQlIgbWF0ZXJpYWwuCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJl
ZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIDoKKyAqIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL3BoeXNpY2FsbHlfYmFzZWRfcmVuZGVyaW5nCisgKi8KK3ZhciBQQlJNYXRlcmlhbCA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShQQlJNYXRlcmlhbCwgX3N1cGVyKTsKKyAg
ICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgUEJSTWF0ZXJpYWwgaW5zdGFuY2UuCisg
ICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbWF0ZXJpYWwgbmFtZQorICAgICAqIEBwYXJh
bSBzY2VuZSBUaGUgc2NlbmUgdGhlIG1hdGVyaWFsIHdpbGwgYmUgdXNlIGluLgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIFBCUk1hdGVyaWFsKG5hbWUsIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICAvKioK
KyAgICAgICAgICogSW50ZW5zaXR5IG9mIHRoZSBkaXJlY3QgbGlnaHRzIGUuZy4gdGhlIGZvdXIg
bGlnaHRzIGF2YWlsYWJsZSBpbiB5b3VyIHNjZW5lLgorICAgICAgICAgKiBUaGlzIGltcGFjdHMg
Ym90aCB0aGUgZGlyZWN0IGRpZmZ1c2UgYW5kIHNwZWN1bGFyIGhpZ2hsaWdodHMuCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5kaXJlY3RJbnRlbnNpdHkgPSAxLjA7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBJbnRlbnNpdHkgb2YgdGhlIGVtaXNzaXZlIHBhcnQgb2YgdGhlIG1hdGVyaWFs
LgorICAgICAgICAgKiBUaGlzIGhlbHBzIGNvbnRyb2xsaW5nIHRoZSBlbWlzc2l2ZSBlZmZlY3Qg
d2l0aG91dCBtb2RpZnlpbmcgdGhlIGVtaXNzaXZlIGNvbG9yLgorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSAxLjA7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBJbnRlbnNpdHkgb2YgdGhlIGVudmlyb25tZW50IGUuZy4gaG93IG11Y2ggdGhlIGVudmlyb25t
ZW50IHdpbGwgbGlnaHQgdGhlIG9iamVjdAorICAgICAgICAgKiBlaXRoZXIgdGhyb3VnaCBoYXJt
b25pY3MgZm9yIHJvdWdoIG1hdGVyaWFsIG9yIHRocm91Z2ggdGhlIHJlZmVsY3Rpb24gZm9yIHNo
aW55IG9uZXMuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5lbnZpcm9ubWVudEludGVuc2l0
eSA9IDEuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgaXMgYSBzcGVjaWFsIGNvbnRy
b2wgYWxsb3dpbmcgdGhlIHJlZHVjdGlvbiBvZiB0aGUgc3BlY3VsYXIgaGlnaGxpZ2h0cyBjb21p
bmcgZnJvbSB0aGUKKyAgICAgICAgICogZm91ciBsaWdodHMgb2YgdGhlIHNjZW5lLiBUaG9zZSBo
aWdobGlnaHRzIG1heSBub3QgYmUgbmVlZGVkIGluIGZ1bGwgZW52aXJvbm1lbnQgbGlnaHRpbmcu
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5zcGVjdWxhckludGVuc2l0eSA9IDEuMDsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIERlYnVnIENvbnRyb2wgYWxsb3dpbmcgZGlzYWJsaW5nIHRo
ZSBidW1wIG1hcCBvbiB0aGlzIG1hdGVyaWFsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
ZGlzYWJsZUJ1bXBNYXAgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFLQSBPY2Ns
dXNpb24gVGV4dHVyZSBJbnRlbnNpdHkgaW4gb3RoZXIgbm9tZW5jbGF0dXJlLgorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuYW1iaWVudFRleHR1cmVTdHJlbmd0aCA9IDEuMDsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIERlZmluZXMgaG93IG11Y2ggdGhlIEFPIG1hcCBpcyBvY2NsdWRpbmcg
dGhlIGFuYWx5dGljYWwgbGlnaHRzIChwb2ludCBzcG90Li4uKS4KKyAgICAgICAgICogMSBtZWFu
cyBpdCBjb21wbGV0ZWx5IG9jY2x1ZGVzIGl0CisgICAgICAgICAqIDAgbWVhbiBpdCBoYXMgbm8g
aW1wYWN0CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5hbWJpZW50VGV4dHVyZUltcGFjdE9u
QW5hbHl0aWNhbExpZ2h0cyA9IFBCUk1hdGVyaWFsLkRFRkFVTFRfQU9fT05fQU5BTFlUSUNBTF9M
SUdIVFM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY29sb3Igb2YgYSBtYXRlcmlhbCBp
biBhbWJpZW50IGxpZ2h0aW5nLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYW1iaWVudENv
bG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkNvbG9yMyJdKDAsIDAsIDApOworICAgICAgICAvKioKKyAgICAgICAgICogQUtBIERpZmZ1c2Ug
Q29sb3IgaW4gb3RoZXIgbm9tZW5jbGF0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
YWxiZWRvQ29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siQ29sb3IzIl0oMSwgMSwgMSk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBS0Eg
U3BlY3VsYXIgQ29sb3IgaW4gb3RoZXIgbm9tZW5jbGF0dXJlLgorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMucmVmbGVjdGl2aXR5Q29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29sb3IzIl0oMSwgMSwgMSk7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaGUgY29sb3IgcmVmbGVjdGVkIGZyb20gdGhlIG1hdGVyaWFsLgorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMucmVmbGVjdGlvbkNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbG9yMyJdKDEuMCwgMS4wLCAxLjAp
OworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIGVtaXR0ZWQgZnJvbSB0aGUgbWF0
ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5lbWlzc2l2ZUNvbG9yID0gbmV3IF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbG9yMyJdKDAs
IDAsIDApOworICAgICAgICAvKioKKyAgICAgICAgICogQUtBIEdsb3NzaW5lc3MgaW4gb3RoZXIg
bm9tZW5jbGF0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubWljcm9TdXJmYWNlID0g
MS4wOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgdHJ1ZSwgdGhlIGxpZ2h0IG1hcCBjb250
YWlucyBvY2NsdXNpb24gaW5mb3JtYXRpb24gaW5zdGVhZCBvZiBsaWdodGluZyBpbmZvLgorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMudXNlTGlnaHRtYXBBc1NoYWRvd21hcCA9IGZhbHNlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGFscGhhIGlzIGNvbWlu
ZyBmb3JtIHRoZSBhbGJlZG8gY2hhbm5lbCBhbHBoYSBjaGFubmVsIGZvciBhbHBoYSBibGVuZGlu
Zy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnVzZUFscGhhRnJvbUFsYmVkb1RleHR1cmUg
PSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuZm9yY2VzIGFscGhhIHRlc3QgaW4g
b3BhcXVlIG9yIGJsZW5kIG1vZGUgaW4gb3JkZXIgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Vz
IG9mIHNvbWUgc2l0dWF0aW9ucy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmZvcmNlQWxw
aGFUZXN0ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBhbHBo
YSBsaW1pdHMgaW4gYWxwaGEgdGVzdCBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
YWxwaGFDdXRPZmYgPSAwLjQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgdGhh
dCB0aGUgbWF0ZXJpYWwgd2lsbCBrZWVwIHRoZSBzcGVjdWxhciBoaWdobGlnaHRzIG92ZXIgYSB0
cmFuc3BhcmVudCBzdXJmYWNlIChvbmx5IHRoZSBtb3N0IGxpbXVub3VzIG9uZXMpLgorICAgICAg
ICAgKiBBIGNhciBnbGFzcyBpcyBhIGdvb2QgZXhlbXBsZSBvZiB0aGF0LiBXaGVuIHN1biByZWZs
ZWN0cyBvbiBpdCB5b3UgY2FuIG5vdCBzZWUgd2hhdCBpcyBiZWhpbmQuCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy51c2VTcGVjdWxhck92ZXJBbHBoYSA9IHRydWU7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIHJlZmxlY3Rpdml0eSB0ZXh0dXJlIGNvbnRhaW5z
IHRoZSBnbG9zc2luZXNzIGluZm9ybWF0aW9uIGluIGl0cyBhbHBoYSBjaGFubmVsLgorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMudXNlTWljcm9TdXJmYWNlRnJvbVJlZmxlY3Rpdml0eU1hcEFs
cGhhID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIG1l
dGFsbGljIHRleHR1cmUgY29udGFpbnMgdGhlIHJvdWdobmVzcyBpbmZvcm1hdGlvbiBpbiBpdHMg
YWxwaGEgY2hhbm5lbC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnVzZVJvdWdobmVzc0Zy
b21NZXRhbGxpY1RleHR1cmVBbHBoYSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBT
cGVjaWZpZXMgaWYgdGhlIG1ldGFsbGljIHRleHR1cmUgY29udGFpbnMgdGhlIHJvdWdobmVzcyBp
bmZvcm1hdGlvbiBpbiBpdHMgZ3JlZW4gY2hhbm5lbC4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLnVzZVJvdWdobmVzc0Zyb21NZXRhbGxpY1RleHR1cmVHcmVlbiA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBtZXRhbGxpYyB0ZXh0dXJlIGNvbnRh
aW5zIHRoZSBtZXRhbGxuZXNzIGluZm9ybWF0aW9uIGluIGl0cyBibHVlIGNoYW5uZWwuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy51c2VNZXRhbGxuZXNzRnJvbU1ldGFsbGljVGV4dHVyZUJs
dWUgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbWV0
YWxsaWMgdGV4dHVyZSBjb250YWlucyB0aGUgYW1iaWVudCBvY2NsdXNpb24gaW5mb3JtYXRpb24g
aW4gaXRzIHJlZCBjaGFubmVsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudXNlQW1iaWVu
dE9jY2x1c2lvbkZyb21NZXRhbGxpY1RleHR1cmVSZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgYW1iaWVudCB0ZXh0dXJlIGNvbnRhaW5zIHRoZSBh
bWJpZW50IG9jY2x1c2lvbiBpbmZvcm1hdGlvbiBpbiBpdHMgcmVkIGNoYW5uZWwgb25seS4KKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLnVzZUFtYmllbnRJbkdyYXlTY2FsZSA9IGZhbHNlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogSW4gY2FzZSB0aGUgcmVmbGVjdGl2aXR5IG1hcCBkb2Vz
IG5vdCBjb250YWluIHRoZSBtaWNyb3N1cmZhY2UgaW5mb3JtYXRpb24gaW4gaXRzIGFscGhhIGNo
YW5uZWwsCisgICAgICAgICAqIFRoZSBtYXRlcmlhbCB3aWxsIHRyeSB0byBpbmZlciB3aGF0IGds
b3NzaW5lc3MgZWFjaCBwaXhlbCBzaG91bGQgYmUuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy51c2VBdXRvTWljcm9TdXJmYWNlRnJvbVJlZmxlY3Rpdml0eU1hcCA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIG1hdGVyaWFsIHdpbGwga2VlcHMg
dGhlIHJlZmxlY3Rpb24gaGlnaGxpZ2h0cyBvdmVyIGEgdHJhbnNwYXJlbnQgc3VyZmFjZSAob25s
eSB0aGUgbW9zdCBsaW11bm91cyBvbmVzKS4KKyAgICAgICAgICogQSBjYXIgZ2xhc3MgaXMgYSBn
b29kIGV4ZW1wbGUgb2YgdGhhdC4gV2hlbiB0aGUgc3RyZWV0IGxpZ2h0cyByZWZsZWN0cyBvbiBp
dCB5b3UgY2FuIG5vdCBzZWUgd2hhdCBpcyBiZWhpbmQuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy51c2VSYWRpYW5jZU92ZXJBbHBoYSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBBbGxvd3MgdXNpbmcgYW4gb2JqZWN0IHNwYWNlIG5vcm1hbCBtYXAgKGluc3RlYWQgb2YgdGFu
Z2VudCBzcGFjZSkuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy51c2VPYmplY3RTcGFjZU5v
cm1hbE1hcCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogQWxsb3dzIHVzaW5nIHRo
ZSBidW1wIG1hcCBpbiBwYXJhbGxheCBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
dXNlUGFyYWxsYXggPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFsbG93cyB1c2lu
ZyB0aGUgYnVtcCBtYXAgaW4gcGFyYWxsYXggb2NjbHVzaW9uIG1vZGUuCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy51c2VQYXJhbGxheE9jY2x1c2lvbiA9IGZhbHNlOworICAgICAgICAvKioK
KyAgICAgICAgICogQ29udHJvbHMgdGhlIHNjYWxlIGJpYXMgb2YgdGhlIHBhcmFsbGF4IG1vZGUu
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5wYXJhbGxheFNjYWxlQmlhcyA9IDAuMDU7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBJZiBzZXRzIHRvIHRydWUsIGRpc2FibGVzIGFsbCB0aGUg
bGlnaHRzIGFmZmVjdGluZyB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5kaXNhYmxlTGlnaHRpbmcgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZvcmNl
IHRoZSBzaGFkZXIgdG8gY29tcHV0ZSBpcnJhZGlhbmNlIGluIHRoZSBmcmFnbWVudCBzaGFkZXIg
aW4gb3JkZXIgdG8gdGFrZSBidW1wIGluIGFjY291bnQuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5mb3JjZUlycmFkaWFuY2VJbkZyYWdtZW50ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBOdW1iZXIgb2YgU2ltdWx0YW5lb3VzIGxpZ2h0cyBhbGxvd2VkIG9uIHRoZSBtYXRl
cmlhbC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm1heFNpbXVsdGFuZW91c0xpZ2h0cyA9
IDQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBzZXRzIHRvIHRydWUsIHggY29tcG9uZW50
IG9mIG5vcm1hbCBtYXAgdmFsdWUgd2lsbCBpbnZlcnQgKHggPSAxLjAgLSB4KS4KKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLmludmVydE5vcm1hbE1hcFggPSBmYWxzZTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIElmIHNldHMgdG8gdHJ1ZSwgeSBjb21wb25lbnQgb2Ygbm9ybWFsIG1hcCB2
YWx1ZSB3aWxsIGludmVydCAoeSA9IDEuMCAtIHkpLgorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMuaW52ZXJ0Tm9ybWFsTWFwWSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogSWYg
c2V0cyB0byB0cnVlIGFuZCBiYWNrZmFjZUN1bGxpbmcgaXMgZmFsc2UsIG5vcm1hbHMgd2lsbCBi
ZSBmbGlwcGVkIG9uIHRoZSBiYWNrc2lkZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnR3
b1NpZGVkTGlnaHRpbmcgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgZnJlc25l
bCBpcyBhcHBsaWVkIHRvIHRoZSBhbHBoYSBvZiB0aGUgbW9kZWwgdG8gZW5zdXJlIGdyYXppbmcg
YW5nbGVzIGVkZ2VzIGFyZSBub3QgYWxwaGEgdGVzdGVkLgorICAgICAgICAgKiBBbmQvT3Igb2Nj
bHVkZSB0aGUgYmxlbmRlZCBwYXJ0LiAoYWxwaGEgaXMgY29udmVydGVkIHRvIGdhbW1hIHRvIGNv
bXB1dGUgdGhlIGZyZXNuZWwpCisgICAgICAgICAqLworICAgICAgICBfdGhpcy51c2VBbHBoYUZy
ZXNuZWwgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgZnJlc25lbCBpcyBhcHBs
aWVkIHRvIHRoZSBhbHBoYSBvZiB0aGUgbW9kZWwgdG8gZW5zdXJlIGdyYXppbmcgYW5nbGVzIGVk
Z2VzIGFyZSBub3QgYWxwaGEgdGVzdGVkLgorICAgICAgICAgKiBBbmQvT3Igb2NjbHVkZSB0aGUg
YmxlbmRlZCBwYXJ0LiAoYWxwaGEgc3RheXMgbGluZWFyIHRvIGNvbXB1dGUgdGhlIGZyZXNuZWwp
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy51c2VMaW5lYXJBbHBoYUZyZXNuZWwgPSBmYWxz
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExldCB1c2VyIGRlZmluZXMgdGhlIGJyZGYgbG9v
a3VwIHRleHR1cmUgdXNlZCBmb3IgSUJMLgorICAgICAgICAgKiBBIGRlZmF1bHQgOGJpdCB2ZXJz
aW9uIGlzIGVtYmVkZGVkIGJ1dCB5b3UgY291bGQgcG9pbnQgYXQgOgorICAgICAgICAgKiAqIERl
ZmF1bHQgdGV4dHVyZTogaHR0cHM6Ly9hc3NldHMuYmFieWxvbmpzLmNvbS9lbnZpcm9ubWVudHMv
Y29ycmVsYXRlZE1TQlJERl9SR0JELnBuZworICAgICAgICAgKiAqIERlZmF1bHQgMTZiaXQgcGl4
ZWwgZGVwdGggdGV4dHVyZTogaHR0cHM6Ly9hc3NldHMuYmFieWxvbmpzLmNvbS9lbnZpcm9ubWVu
dHMvY29ycmVsYXRlZE1TQlJERi5kZHMKKyAgICAgICAgICogKiBMRUdBQ1kgRGVmYXVsdCBOb25l
IGNvcnJlbGF0ZWQgaHR0cHM6Ly9hc3NldHMuYmFieWxvbmpzLmNvbS9lbnZpcm9ubWVudHMvdW5j
b3JyZWxhdGVkQlJERl9SR0JELnBuZworICAgICAgICAgKiAqIExFR0FDWSBEZWZhdWx0IE5vbmUg
Y29ycmVsYXRlZCAxNmJpdCBwaXhlbCBkZXB0aCBodHRwczovL2Fzc2V0cy5iYWJ5bG9uanMuY29t
L2Vudmlyb25tZW50cy91bmNvcnJlbGF0ZWRCUkRGLmRkcworICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuZW52aXJvbm1lbnRCUkRGVGV4dHVyZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBGb3JjZSBub3JtYWwgdG8gZmFjZSBhd2F5IGZyb20gZmFjZS4KKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLmZvcmNlTm9ybWFsRm9yd2FyZCA9IGZhbHNlOworICAgICAgICAvKioKKyAg
ICAgICAgICogRW5hYmxlcyBzcGVjdWxhciBhbnRpIGFsaWFzaW5nIGluIHRoZSBQQlIgc2hhZGVy
LgorICAgICAgICAgKiBJdCB3aWxsIGJvdGggaW50ZXJhY3RzIG9uIHRoZSBHZW9tZXRyeSBmb3Ig
YW5hbHl0aWNhbCBhbmQgSUJMIGxpZ2h0aW5nLgorICAgICAgICAgKiBJdCBhbHNvIHByZWZpbHRl
ciB0aGUgcm91Z2huZXNzIG1hcCBiYXNlZCBvbiB0aGUgYnVtcCB2YWx1ZXMuCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5lbmFibGVTcGVjdWxhckFudGlBbGlhc2luZyA9IGZhbHNlOworICAg
ICAgICAvKioKKyAgICAgICAgICogVGhpcyBwYXJhbWV0ZXJzIHdpbGwgZW5hYmxlL2Rpc2FibGUg
SG9yaXpvbiBvY2NsdXNpb24gdG8gcHJldmVudCBub3JtYWwgbWFwcyB0byBsb29rIHNoaW55IHdo
ZW4gdGhlIG5vcm1hbAorICAgICAgICAgKiBtYWtlcyB0aGUgcmVmbGVjdCB2ZWN0b3IgZmFjZSB0
aGUgbW9kZWwgKHVuZGVyIGhvcml6b24pLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudXNl
SG9yaXpvbk9jY2x1c2lvbiA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIHBh
cmFtZXRlcnMgd2lsbCBlbmFibGUvZGlzYWJsZSByYWRpYW5jZSBvY2NsdXNpb24gYnkgcHJldmVu
dGluZyB0aGUgcmFkaWFuY2UgdG8gbGl0CisgICAgICAgICAqIHRvbyBtdWNoIHRoZSBhcmVhIHJl
bHlpbmcgb24gYW1iaWVudCB0ZXh0dXJlIHRvIGRlZmluZSB0aGVpciBhbWJpZW50IG9jY2x1c2lv
bi4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnVzZVJhZGlhbmNlT2NjbHVzaW9uID0gdHJ1
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHNldCB0byB0cnVlLCBubyBsaWdodGluZyBj
YWxjdWxhdGlvbnMgd2lsbCBiZSBhcHBsaWVkLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
dW5saXQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2Vudmlyb25tZW50QlJERlRleHR1cmUgPSBf
TWlzY19icmRmVGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkJSREZU
ZXh0dXJlVG9vbHMiXS5HZXRFbnZpcm9ubWVudEJSREZUZXh0dXJlKHNjZW5lKTsKKyAgICAgICAg
cmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUEJSTWF0ZXJp
YWwucHJvdG90eXBlLCAicmVmcmFjdGlvblRleHR1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBTdG9yZXMgdGhlIHJlZnJhY3RlZCBsaWdodCBpbmZvcm1hdGlvbiBpbiBhIHRleHR1cmUu
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLnN1YlN1cmZhY2UucmVmcmFjdGlvblRleHR1cmU7CisgICAgICAgIH0sCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLnN1YlN1cmZhY2Uu
cmVmcmFjdGlvblRleHR1cmUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIHRoaXMuc3ViU3VyZmFjZS5pc1JlZnJhY3Rpb25FbmFibGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnN1YlN1cmZhY2UubGlu
a1JlZnJhY3Rpb25XaXRoVHJhbnNwYXJlbmN5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5zdWJT
dXJmYWNlLmlzUmVmcmFjdGlvbkVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBCUk1hdGVyaWFsLnByb3Rv
dHlwZSwgImluZGV4T2ZSZWZyYWN0aW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogc291
cmNlIG1hdGVyaWFsIGluZGV4IG9mIHJlZnJhY3Rpb24gKElPUiknIC8gJ2Rlc3RpbmF0aW9uIG1h
dGVyaWFsIElPUi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIDEgLyB0aGlzLnN1YlN1cmZhY2UuaW5kZXhPZlJlZnJhY3Rpb247Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0
aGlzLnN1YlN1cmZhY2UuaW5kZXhPZlJlZnJhY3Rpb24gPSAxIC8gdmFsdWU7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQQlJNYXRlcmlhbC5wcm90b3R5cGUs
ICJpbnZlcnRSZWZyYWN0aW9uWSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnRyb2xz
IGlmIHJlZnJhY3Rpb24gbmVlZHMgdG8gYmUgaW52ZXJ0ZWQgb24gWS4gVGhpcyBjb3VsZCBiZSB1
c2VmdWwgZm9yIHByb2NlZHVyYWwgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViU3VyZmFjZS5pbnZlcnRS
ZWZyYWN0aW9uWTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHRoaXMuc3ViU3VyZmFjZS5pbnZlcnRSZWZyYWN0aW9uWSA9IHZhbHVlOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUEJSTWF0ZXJpYWwu
cHJvdG90eXBlLCAibGlua1JlZnJhY3Rpb25XaXRoVHJhbnNwYXJlbmN5IiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogVGhpcyBwYXJhbWV0ZXJzIHdpbGwgbWFrZSB0aGUgbWF0ZXJpYWwgdXNl
ZCBpdHMgb3BhY2l0eSB0byBjb250cm9sIGhvdyBtdWNoIGl0IGlzIHJlZnJhY3RpbmcgYWdpbnN0
IG5vdC4KKyAgICAgICAgICogTWF0ZXJpYWxzIGhhbGYgb3BhcXVlIGZvciBpbnN0YW5jZSB1c2lu
ZyByZWZyYWN0aW9uIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGlzIGNvbnRyb2wuCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnN1
YlN1cmZhY2UubGlua1JlZnJhY3Rpb25XaXRoVHJhbnNwYXJlbmN5OworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5zdWJTdXJmYWNl
LmxpbmtSZWZyYWN0aW9uV2l0aFRyYW5zcGFyZW5jeSA9IHZhbHVlOworICAgICAgICAgICAgaWYg
KHZhbHVlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zdWJTdXJmYWNlLmlzUmVmcmFjdGlvbkVu
YWJsZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidXNlUGh5c2ljYWxMaWdo
dEZhbGxvZmYiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBCSlMgaXMgdXNpbmcgYW4gaGFy
Y29kZWQgbGlnaHQgZmFsbG9mZiBiYXNlZCBvbiBhIG1hbnVhbGx5IHNldHMgdXAgcmFuZ2UuCisg
ICAgICAgICAqIEluIFBCUiwgb25lIHdheSB0byByZXByZXNlbnRzIHRoZSBmYWxsb2YgaXMgdG8g
dXNlIHRoZSBpbnZlcnNlIHNxdWFyZWQgcm9vdCBhbGdvcnl0aG0uCisgICAgICAgICAqIFRoaXMg
cGFyYW1ldGVyIGNhbiBoZWxwIHlvdSBzd2l0Y2ggYmFjayB0byB0aGUgQkpTIG1vZGUgaW4gb3Jk
ZXIgdG8gY3JlYXRlIHNjZW5lcyB1c2luZyBib3RoIG1hdGVyaWFscy4KKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0
RmFsbG9mZiA9PT0gX3BickJhc2VNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJQQlJCYXNlTWF0ZXJpYWwiXS5MSUdIVEZBTExPRkZfUEhZU0lDQUw7CisgICAgICAgIH0sCisg
ICAgICAgIC8qKgorICAgICAgICAgKiBCSlMgaXMgdXNpbmcgYW4gaGFyY29kZWQgbGlnaHQgZmFs
bG9mZiBiYXNlZCBvbiBhIG1hbnVhbGx5IHNldHMgdXAgcmFuZ2UuCisgICAgICAgICAqIEluIFBC
Uiwgb25lIHdheSB0byByZXByZXNlbnRzIHRoZSBmYWxsb2YgaXMgdG8gdXNlIHRoZSBpbnZlcnNl
IHNxdWFyZWQgcm9vdCBhbGdvcnl0aG0uCisgICAgICAgICAqIFRoaXMgcGFyYW1ldGVyIGNhbiBo
ZWxwIHlvdSBzd2l0Y2ggYmFjayB0byB0aGUgQkpTIG1vZGUgaW4gb3JkZXIgdG8gY3JlYXRlIHNj
ZW5lcyB1c2luZyBib3RoIG1hdGVyaWFscy4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMudXNlUGh5c2lj
YWxMaWdodEZhbGxvZmYpIHsKKyAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIGVmZmVjdCB3
aWxsIGJlIHJlYnVpbHQuCisgICAgICAgICAgICAgICAgdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0Fz
VGV4dHVyZXNEaXJ0eSgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9saWdodEZhbGxvZmYgPSBfcGJyQmFzZU1hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlBCUkJhc2VNYXRlcmlhbCJdLkxJR0hURkFMTE9GRl9QSFlT
SUNBTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX2xpZ2h0RmFsbG9mZiA9IF9wYnJCYXNlTWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siUEJSQmFzZU1hdGVyaWFsIl0uTElHSFRGQUxMT0ZGX1NU
QU5EQVJEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgInVz
ZUdMVEZMaWdodEZhbGxvZmYiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJbiBvcmRlciB0
byBzdXBwb3J0IHRoZSBmYWxsb2ZmIGNvbXBhdGliaWxpdHkgd2l0aCBnbHRmLCBhIHNwZWNpYWwg
bW9kZSBoYXMgYmVlbiBhZGRlZAorICAgICAgICAgKiB0byByZXByb2R1Y2UgdGhlIGdsdGYgbGln
aHQgZmFsbG9mZi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0RmFsbG9mZiA9PT0gX3BickJhc2VNYXRlcmlhbF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQQlJCYXNlTWF0ZXJpYWwiXS5MSUdIVEZBTExP
RkZfR0xURjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEluIG9yZGVyIHRv
IHN1cHBvcnQgdGhlIGZhbGxvZmYgY29tcGF0aWJpbGl0eSB3aXRoIGdsdGYsIGEgc3BlY2lhbCBt
b2RlIGhhcyBiZWVuIGFkZGVkCisgICAgICAgICAqIHRvIHJlcHJvZHVjZSB0aGUgZ2x0ZiBsaWdo
dCBmYWxsb2ZmLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy51c2VHTFRGTGlnaHRGYWxsb2ZmKSB7Cisg
ICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBlZmZlY3Qgd2lsbCBiZSByZWJ1aWx0LgorICAg
ICAgICAgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkoKTsKKyAg
ICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGln
aHRGYWxsb2ZmID0gX3BickJhc2VNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJQQlJCYXNlTWF0ZXJpYWwiXS5MSUdIVEZBTExPRkZfR0xURjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpZ2h0
RmFsbG9mZiA9IF9wYnJCYXNlTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
UEJSQmFzZU1hdGVyaWFsIl0uTElHSFRGQUxMT0ZGX1NUQU5EQVJEOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRp
b24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBpbWFnZSBwcm9jZXNzaW5n
IGNvbmZpZ3VyYXRpb24gdXNlZCBlaXRoZXIgaW4gdGhpcyBtYXRlcmlhbC4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb247CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTZXRzIHRoZSBEZWZhdWx0IGltYWdlIHByb2Nlc3NpbmcgY29uZmlndXJhdGlvbiB1
c2VkIGVpdGhlciBpbiB0aGUgdGhpcyBtYXRlcmlhbC4KKyAgICAgICAgICoKKyAgICAgICAgICog
SWYgc2V0cyB0byBudWxsLCB0aGUgc2NlbmUgb25lIGlzIGluIHVzZS4KKyAgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9hdHRhY2hJ
bWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKHZhbHVlKTsKKyAgICAgICAgICAgIC8vIEVuc3Vy
ZSB0aGUgZWZmZWN0IHdpbGwgYmUgcmVidWlsdC4KKyAgICAgICAgICAgIHRoaXMuX21hcmtBbGxT
dWJNZXNoZXNBc1RleHR1cmVzRGlydHkoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImNhbWVyYUNvbG9yQ3VydmVz
RW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0aGVyIHRoZSBjb2xv
ciBjdXJ2ZXMgZWZmZWN0IGlzIGVuYWJsZWQuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZp
Z3VyYXRpb24uY29sb3JDdXJ2ZXNFbmFibGVkOworICAgICAgICB9LAorICAgICAgICAvKioKKyAg
ICAgICAgICogU2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGN1cnZlcyBlZmZlY3QgaXMgZW5hYmxlZC4K
KyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uY29sb3JDdXJ2ZXNFbmFibGVkID0g
dmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQQlJN
YXRlcmlhbC5wcm90b3R5cGUsICJjYW1lcmFDb2xvckdyYWRpbmdFbmFibGVkIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGdyYWRpbmcgZWZmZWN0IGlz
IGVuYWJsZWQuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uY29sb3JHcmFk
aW5nRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0
aGVyIHRoZSBjb2xvciBncmFkaW5nIGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckdyYWRpbmdFbmFibGVkID0gdmFsdWU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQQlJNYXRlcmlhbC5wcm90b3R5
cGUsICJjYW1lcmFUb25lTWFwcGluZ0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHdldGhlciB0b25lbWFwcGluZyBpcyBlbmFibGVkIG9yIG5vdC4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udG9uZU1hcHBpbmdFbmFibGVkOworICAgICAgICB9
LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3ZXRoZXIgdG9uZW1hcHBpbmcgaXMgZW5h
YmxlZCBvciBub3QKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnRvbmVNYXBw
aW5nRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAiY2FtZXJhRXhwb3N1cmUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBUaGUgY2FtZXJhIGV4cG9zdXJlIHVzZWQgb24gdGhpcyBtYXRl
cmlhbC4KKyAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyBoZXJlIGFuZCBub3QgaW4gdGhlIGNh
bWVyYSB0byBhbGxvdyBjb250cm9sbGluZyBleHBvc3VyZSB3aXRob3V0IGZ1bGwgc2NyZWVuIHBv
c3QgcHJvY2Vzcy4KKyAgICAgICAgICogVGhpcyBjb3JyZXNwb25kcyB0byBhIHBob3RvZ3JhcGhp
YyBleHBvc3VyZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uZXhwb3N1
cmU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY2FtZXJhIGV4cG9z
dXJlIHVzZWQgb24gdGhpcyBtYXRlcmlhbC4KKyAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyBo
ZXJlIGFuZCBub3QgaW4gdGhlIGNhbWVyYSB0byBhbGxvdyBjb250cm9sbGluZyBleHBvc3VyZSB3
aXRob3V0IGZ1bGwgc2NyZWVuIHBvc3QgcHJvY2Vzcy4KKyAgICAgICAgICogVGhpcyBjb3JyZXNw
b25kcyB0byBhIHBob3RvZ3JhcGhpYyBleHBvc3VyZS4KKyAgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uLmV4cG9zdXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1lcmFDb250cmFz
dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgVGhlIGNhbWVyYSBjb250cmFzdCB1
c2VkIG9uIHRoaXMgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0
aW9uLmNvbnRyYXN0OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyBU
aGUgY2FtZXJhIGNvbnRyYXN0IHVzZWQgb24gdGhpcyBtYXRlcmlhbC4KKyAgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbnRyYXN0ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1l
cmFDb2xvckdyYWRpbmdUZXh0dXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgQ29sb3IgR3JhZGluZyAyRCBMb29rdXAgVGV4dHVyZS4KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24uY29sb3JHcmFkaW5nVGV4dHVyZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIENvbG9yIEdyYWRpbmcgMkQgTG9va3VwIFRleHR1
cmUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckdyYWRpbmdUZXh0
dXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1lcmFDb2xvckN1cnZlcyIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFRoZSBjb2xvciBncmFkaW5nIGN1cnZlcyBwcm92aWRlIGFkZGl0aW9u
YWwgY29sb3IgYWRqdXN0bW5lbnQgdGhhdCBpcyBhcHBsaWVkIGFmdGVyIGFueSBjb2xvciBncmFk
aW5nIHRyYW5zZm9ybSAoM0QgTFVUKS4KKyAgICAgICAgICogVGhleSBhbGxvdyBiYXNpYyBhZGp1
c3RtZW50IG9mIHNhdHVyYXRpb24gYW5kIHNtYWxsIGV4cG9zdXJlIGFkanVzdG1lbnRzLCBhbG9u
ZyB3aXRoIGNvbG9yIGZpbHRlciB0aW50aW5nIHRvIHByb3ZpZGUgd2hpdGUgYmFsYW5jZSBhZGp1
c3RtZW50IG9yIG1vcmUgc3R5bGlzdGljIGVmZmVjdHMuCisgICAgICAgICAqIFRoZXNlIGFyZSBz
aW1pbGFyIHRvIGNvbnRyb2xzIGZvdW5kIGluIG1hbnkgcHJvZmVzc2lvbmFsIGltYWdpbmcgb3Ig
Y29sb3Jpc3Qgc29mdHdhcmUuIFRoZSBnbG9iYWwgY29udHJvbHMgYXJlIGFwcGxpZWQgdG8gdGhl
IGVudGlyZSBpbWFnZS4gRm9yIGFkdmFuY2VkIHR1bmluZywgZXh0cmEgY29udHJvbHMgYXJlIHBy
b3ZpZGVkIHRvIGFkanVzdCB0aGUgc2hhZG93LCBtaWR0b25lIGFuZCBoaWdobGlnaHQgYXJlYXMg
b2YgdGhlIGltYWdlOworICAgICAgICAgKiBjb3JyZXNwb25kaW5nIHRvIGxvdyBsdW1pbmFuY2Us
IG1lZGl1bSBsdW1pbmFuY2UsIGFuZCBoaWdoIGx1bWluYW5jZSBhcmVhcyByZXNwZWN0aXZlbHku
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yQ3VydmVzOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIGdyYWRpbmcgY3VydmVz
IHByb3ZpZGUgYWRkaXRpb25hbCBjb2xvciBhZGp1c3RtbmVudCB0aGF0IGlzIGFwcGxpZWQgYWZ0
ZXIgYW55IGNvbG9yIGdyYWRpbmcgdHJhbnNmb3JtICgzRCBMVVQpLgorICAgICAgICAgKiBUaGV5
IGFsbG93IGJhc2ljIGFkanVzdG1lbnQgb2Ygc2F0dXJhdGlvbiBhbmQgc21hbGwgZXhwb3N1cmUg
YWRqdXN0bWVudHMsIGFsb25nIHdpdGggY29sb3IgZmlsdGVyIHRpbnRpbmcgdG8gcHJvdmlkZSB3
aGl0ZSBiYWxhbmNlIGFkanVzdG1lbnQgb3IgbW9yZSBzdHlsaXN0aWMgZWZmZWN0cy4KKyAgICAg
ICAgICogVGhlc2UgYXJlIHNpbWlsYXIgdG8gY29udHJvbHMgZm91bmQgaW4gbWFueSBwcm9mZXNz
aW9uYWwgaW1hZ2luZyBvciBjb2xvcmlzdCBzb2Z0d2FyZS4gVGhlIGdsb2JhbCBjb250cm9scyBh
cmUgYXBwbGllZCB0byB0aGUgZW50aXJlIGltYWdlLiBGb3IgYWR2YW5jZWQgdHVuaW5nLCBleHRy
YSBjb250cm9scyBhcmUgcHJvdmlkZWQgdG8gYWRqdXN0IHRoZSBzaGFkb3csIG1pZHRvbmUgYW5k
IGhpZ2hsaWdodCBhcmVhcyBvZiB0aGUgaW1hZ2U7CisgICAgICAgICAqIGNvcnJlc3BvbmRpbmcg
dG8gbG93IGx1bWluYW5jZSwgbWVkaXVtIGx1bWluYW5jZSwgYW5kIGhpZ2ggbHVtaW5hbmNlIGFy
ZWFzIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNv
bG9yQ3VydmVzID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFJl
dHVybnMgdGhlIG5hbWUgb2YgdGhpcyBtYXRlcmlhbCBjbGFzcy4KKyAgICAgKi8KKyAgICBQQlJN
YXRlcmlhbC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gIlBCUk1hdGVyaWFsIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1ha2VzIGEgZHVw
bGljYXRlIG9mIHRoZSBjdXJyZW50IG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBuYW1lIC0gbmFt
ZSB0byB1c2UgZm9yIHRoZSBuZXcgbWF0ZXJpYWwuCisgICAgICovCisgICAgUEJSTWF0ZXJpYWwu
cHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgdmFyIGNsb25lID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uQ2xvbmUoZnVuY3Rpb24gKCkg
eyByZXR1cm4gbmV3IFBCUk1hdGVyaWFsKG5hbWUsIF90aGlzLmdldFNjZW5lKCkpOyB9LCB0aGlz
KTsKKyAgICAgICAgY2xvbmUuaWQgPSBuYW1lOworICAgICAgICBjbG9uZS5uYW1lID0gbmFtZTsK
KyAgICAgICAgdGhpcy5jbGVhckNvYXQuY29weVRvKGNsb25lLmNsZWFyQ29hdCk7CisgICAgICAg
IHRoaXMuYW5pc290cm9weS5jb3B5VG8oY2xvbmUuYW5pc290cm9weSk7CisgICAgICAgIHRoaXMu
YnJkZi5jb3B5VG8oY2xvbmUuYnJkZik7CisgICAgICAgIHRoaXMuc2hlZW4uY29weVRvKGNsb25l
LnNoZWVuKTsKKyAgICAgICAgcmV0dXJuIGNsb25lOworICAgIH07CisgICAgLyoqCisgICAgICog
U2VyaWFsaXplcyB0aGlzIFBCUiBNYXRlcmlhbC4KKyAgICAgKiBAcmV0dXJucyAtIEFuIG9iamVj
dCB3aXRoIHRoZSBzZXJpYWxpemVkIG1hdGVyaWFsLgorICAgICAqLworICAgIFBCUk1hdGVyaWFs
LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxp
emF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXplKHRoaXMpOworICAgICAgICBzZXJp
YWxpemF0aW9uT2JqZWN0LmN1c3RvbVR5cGUgPSAiQkFCWUxPTi5QQlJNYXRlcmlhbCI7CisgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY2xlYXJDb2F0ID0gdGhpcy5jbGVhckNvYXQuc2VyaWFs
aXplKCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYW5pc290cm9weSA9IHRoaXMuYW5p
c290cm9weS5zZXJpYWxpemUoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5icmRmID0g
dGhpcy5icmRmLnNlcmlhbGl6ZSgpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNoZWVu
ID0gdGhpcy5zaGVlbi5zZXJpYWxpemUoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5z
dWJTdXJmYWNlID0gdGhpcy5zdWJTdXJmYWNlLnNlcmlhbGl6ZSgpOworICAgICAgICByZXR1cm4g
c2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAg
ICAgKiBQYXJzZXMgYSBQQlIgTWF0ZXJpYWwgZnJvbSBhIHNlcmlhbGl6ZWQgb2JqZWN0LgorICAg
ICAqIEBwYXJhbSBzb3VyY2UgLSBTZXJpYWxpemVkIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gc2Nl
bmUgLSBCSlMgc2NlbmUgaW5zdGFuY2UuCisgICAgICogQHBhcmFtIHJvb3RVcmwgLSB1cmwgZm9y
IHRoZSBzY2VuZSBvYmplY3QKKyAgICAgKiBAcmV0dXJucyAtIFBCUk1hdGVyaWFsCisgICAgICov
CisgICAgUEJSTWF0ZXJpYWwuUGFyc2UgPSBmdW5jdGlvbiAoc291cmNlLCBzY2VuZSwgcm9vdFVy
bCkgeworICAgICAgICB2YXIgbWF0ZXJpYWwgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5QYXJzZShmdW5jdGlvbiAo
KSB7IHJldHVybiBuZXcgUEJSTWF0ZXJpYWwoc291cmNlLm5hbWUsIHNjZW5lKTsgfSwgc291cmNl
LCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIGlmIChzb3VyY2UuY2xlYXJDb2F0KSB7CisgICAg
ICAgICAgICBtYXRlcmlhbC5jbGVhckNvYXQucGFyc2Uoc291cmNlLmNsZWFyQ29hdCwgc2NlbmUs
IHJvb3RVcmwpOworICAgICAgICB9CisgICAgICAgIGlmIChzb3VyY2UuYW5pc290cm9weSkgewor
ICAgICAgICAgICAgbWF0ZXJpYWwuYW5pc290cm9weS5wYXJzZShzb3VyY2UuYW5pc290cm9weSwg
c2NlbmUsIHJvb3RVcmwpOworICAgICAgICB9CisgICAgICAgIGlmIChzb3VyY2UuYnJkZikgewor
ICAgICAgICAgICAgbWF0ZXJpYWwuYnJkZi5wYXJzZShzb3VyY2UuYnJkZiwgc2NlbmUsIHJvb3RV
cmwpOworICAgICAgICB9CisgICAgICAgIGlmIChzb3VyY2Uuc2hlZW4pIHsKKyAgICAgICAgICAg
IG1hdGVyaWFsLnNoZWVuLnBhcnNlKHNvdXJjZS5zaGVlbiwgc2NlbmUsIHJvb3RVcmwpOworICAg
ICAgICB9CisgICAgICAgIGlmIChzb3VyY2Uuc3ViU3VyZmFjZSkgeworICAgICAgICAgICAgbWF0
ZXJpYWwuc3ViU3VyZmFjZS5wYXJzZShzb3VyY2Uuc3ViU3VyZmFjZSwgc2NlbmUsIHJvb3RVcmwp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYXRlcmlhbDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFBCUk1hdGVyaWFsVHJhbnNwYXJlbmN5TW9kZTogTm8gdHJhbnNwYXJlbmN5IG1vZGUs
IEFscGhhIGNoYW5uZWwgaXMgbm90IHVzZS4KKyAgICAgKi8KKyAgICBQQlJNYXRlcmlhbC5QQlJN
QVRFUklBTF9PUEFRVUUgPSBfcGJyQmFzZU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIlBCUkJhc2VNYXRlcmlhbCJdLlBCUk1BVEVSSUFMX09QQVFVRTsKKyAgICAvKioKKyAg
ICAgKiBQQlJNYXRlcmlhbFRyYW5zcGFyZW5jeU1vZGU6IEFscGhhIFRlc3QgbW9kZSwgcGl4ZWwg
YXJlIGRpc2NhcmRlZCBiZWxvdyBhIGNlcnRhaW4gdGhyZXNob2xkIGRlZmluZWQgYnkgdGhlIGFs
cGhhIGN1dG9mZiB2YWx1ZS4KKyAgICAgKi8KKyAgICBQQlJNYXRlcmlhbC5QQlJNQVRFUklBTF9B
TFBIQVRFU1QgPSBfcGJyQmFzZU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlBCUkJhc2VNYXRlcmlhbCJdLlBCUk1BVEVSSUFMX0FMUEhBVEVTVDsKKyAgICAvKioKKyAgICAg
KiBQQlJNYXRlcmlhbFRyYW5zcGFyZW5jeU1vZGU6IFBpeGVscyBhcmUgYmxlbmRlZCAoYWNjb3Jk
aW5nIHRvIHRoZSBhbHBoYSBtb2RlKSB3aXRoIHRoZSBhbHJlYWR5IGRyYXduIHBpeGVscyBpbiB0
aGUgY3VycmVudCBmcmFtZSBidWZmZXIuCisgICAgICovCisgICAgUEJSTWF0ZXJpYWwuUEJSTUFU
RVJJQUxfQUxQSEFCTEVORCA9IF9wYnJCYXNlTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siUEJSQmFzZU1hdGVyaWFsIl0uUEJSTUFURVJJQUxfQUxQSEFCTEVORDsKKyAgICAv
KioKKyAgICAgKiBQQlJNYXRlcmlhbFRyYW5zcGFyZW5jeU1vZGU6IFBpeGVscyBhcmUgYmxlbmRl
ZCAoYWNjb3JkaW5nIHRvIHRoZSBhbHBoYSBtb2RlKSB3aXRoIHRoZSBhbHJlYWR5IGRyYXduIHBp
eGVscyBpbiB0aGUgY3VycmVudCBmcmFtZSBidWZmZXIuCisgICAgICogVGhleSBhcmUgYWxzbyBk
aXNjYXJkZWQgYmVsb3cgdGhlIGFscGhhIGN1dG9mZiB0aHJlc2hvbGQgdG8gaW1wcm92ZSBwZXJm
b3JtYW5jZXMuCisgICAgICovCisgICAgUEJSTWF0ZXJpYWwuUEJSTUFURVJJQUxfQUxQSEFURVNU
QU5EQkxFTkQgPSBfcGJyQmFzZU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlBCUkJhc2VNYXRlcmlhbCJdLlBCUk1BVEVSSUFMX0FMUEhBVEVTVEFOREJMRU5EOworICAgIC8q
KgorICAgICAqIERlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgaG93IG11Y2ggQU8gbWFwIGlz
IG9jY2x1ZGluZyB0aGUgYW5hbHl0aWNhbCBsaWdodHMKKyAgICAgKiAocG9pbnQgc3BvdC4uLiku
CisgICAgICovCisgICAgUEJSTWF0ZXJpYWwuREVGQVVMVF9BT19PTl9BTkFMWVRJQ0FMX0xJR0hU
UyA9IF9wYnJCYXNlTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUEJSQmFz
ZU1hdGVyaWFsIl0uREVGQVVMVF9BT19PTl9BTkFMWVRJQ0FMX0xJR0hUUzsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1Rl
eHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImRpcmVjdEludGVu
c2l0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVy
dHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRl
cmlhbC5wcm90b3R5cGUsICJlbWlzc2l2ZUludGVuc2l0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJlbnZpcm9ubWVu
dEludGVuc2l0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRv
UHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQ
QlJNYXRlcmlhbC5wcm90b3R5cGUsICJzcGVjdWxhckludGVuc2l0eSIsIHZvaWQgMCk7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAg
ICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
c2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVz
aGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJkaXNh
YmxlQnVtcE1hcCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCksCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
ImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikK
KyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJhbGJlZG9UZXh0dXJlIiwgdm9pZCAwKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgi
X21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnBy
b3RvdHlwZSwgImFtYmllbnRUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGly
dHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImFtYmllbnRUZXh0dXJlU3RyZW5n
dGgiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5
Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJp
YWwucHJvdG90eXBlLCAiYW1iaWVudFRleHR1cmVJbXBhY3RPbkFuYWx5dGljYWxMaWdodHMiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgpLAorICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3Bl
cnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNBbmRNaXNjRGlydHkiKQorICAgIF0s
IFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgIm9wYWNpdHlUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAg
ICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJz
ZXJpYWxpemVBc1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtB
bGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3RvdHlw
ZSwgInJlZmxlY3Rpb25UZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUi
XSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1
cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImVtaXNzaXZlVGV4dHVy
ZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCksCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRv
UHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQ
QlJNYXRlcmlhbC5wcm90b3R5cGUsICJyZWZsZWN0aXZpdHlUZXh0dXJlIiwgdm9pZCAwKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJzZXJpYWxpemVBc1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21h
cmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3Rv
dHlwZSwgIm1ldGFsbGljVGV4dHVyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5
IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJtZXRhbGxpYyIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3Vi
TWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJy
b3VnaG5lc3MiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgpLAorICAgICAg
ICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJl
eHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisg
ICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAibWljcm9TdXJmYWNlVGV4dHVyZSIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHki
XSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlh
bC5wcm90b3R5cGUsICJidW1wVGV4dHVyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0
dXJlIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0RpcnR5IiwgbnVsbCkKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJsaWdo
dG1hcFRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzQ29sb3IzIl0pKCJhbWJpZW50
IiksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJl
c0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJhbWJpZW50Q29sb3IiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZUFzQ29sb3IzIl0pKCJhbGJlZG8iKSwKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5k
VG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0s
IFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImFsYmVkb0NvbG9yIiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemVBc0NvbG9yMyJdKSgicmVmbGVjdGl2aXR5IiksCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHki
XSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlh
bC5wcm90b3R5cGUsICJyZWZsZWN0aXZpdHlDb2xvciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
QXNDb2xvcjMiXSkoInJlZmxlY3Rpb24iKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21h
cmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3Rv
dHlwZSwgInJlZmxlY3Rpb25Db2xvciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNDb2xvcjMi
XSkoImVtaXNzaXZlIiksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVz
aGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJlbWlz
c2l2ZUNvbG9yIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Q
cm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBC
Uk1hdGVyaWFsLnByb3RvdHlwZSwgIm1pY3JvU3VyZmFjZSIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VMaWdodG1h
cEFzU2hhZG93bWFwIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5k
VG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzQW5kTWlzY0RpcnR5IikK
KyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VBbHBoYUZyb21BbGJlZG9UZXh0dXJl
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJd
KSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzQW5kTWlzY0RpcnR5IikKKyAgICBdLCBQQlJN
YXRlcmlhbC5wcm90b3R5cGUsICJmb3JjZUFscGhhVGVzdCIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0FuZE1pc2NEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAiYWxw
aGFDdXRPZmYiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1By
b3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJS
TWF0ZXJpYWwucHJvdG90eXBlLCAidXNlU3BlY3VsYXJPdmVyQWxwaGEiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1l
c2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidXNl
TWljcm9TdXJmYWNlRnJvbVJlZmxlY3Rpdml0eU1hcEFscGhhIiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNB
c1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgInVzZVJvdWdo
bmVzc0Zyb21NZXRhbGxpY1RleHR1cmVBbHBoYSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJl
c0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VSb3VnaG5lc3NGcm9t
TWV0YWxsaWNUZXh0dXJlR3JlZW4iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIp
CisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidXNlTWV0YWxsbmVzc0Zyb21NZXRhbGxp
Y1RleHR1cmVCbHVlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5k
VG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0s
IFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgInVzZUFtYmllbnRPY2NsdXNpb25Gcm9tTWV0YWxsaWNU
ZXh0dXJlUmVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Q
cm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBC
Uk1hdGVyaWFsLnByb3RvdHlwZSwgInVzZUFtYmllbnRJbkdyYXlTY2FsZSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3Vi
TWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJ1
c2VBdXRvTWljcm9TdXJmYWNlRnJvbVJlZmxlY3Rpdml0eU1hcCIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplIl0pKCkKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VQaHlzaWNhbExp
Z2h0RmFsbG9mZiIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgUEJSTWF0ZXJp
YWwucHJvdG90eXBlLCAidXNlR0xURkxpZ2h0RmFsbG9mZiIsIG51bGwpOworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6
ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4
dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidXNlUmFkaWFuY2VP
dmVyQWxwaGEiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1By
b3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJS
TWF0ZXJpYWwucHJvdG90eXBlLCAidXNlT2JqZWN0U3BhY2VOb3JtYWxNYXAiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1
Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAi
dXNlUGFyYWxsYXgiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRU
b1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwg
UEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidXNlUGFyYWxsYXhPY2NsdXNpb24iLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1
Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAi
cGFyYWxsYXhTY2FsZUJpYXMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAg
ICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJl
eHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzTGlnaHRzRGlydHkiKQorICAg
IF0sIFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImRpc2FibGVMaWdodGluZyIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3Vi
TWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJm
b3JjZUlycmFkaWFuY2VJbkZyYWdtZW50Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc0xpZ2h0c0RpcnR5
IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJtYXhTaW11bHRhbmVvdXNMaWdodHMi
LCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVj
b3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0p
KCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwu
cHJvdG90eXBlLCAiaW52ZXJ0Tm9ybWFsTWFwWCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJl
c0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJpbnZlcnROb3JtYWxNYXBZ
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJd
KSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFs
LnByb3RvdHlwZSwgInR3b1NpZGVkTGlnaHRpbmciLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJd
KSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVy
ZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidXNlQWxwaGFGcmVzbmVs
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJd
KSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFs
LnByb3RvdHlwZSwgInVzZUxpbmVhckFscGhhRnJlc25lbCIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplQXNUZXh0dXJlIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3Vi
TWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJl
bnZpcm9ubWVudEJSREZUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHki
KQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImZvcmNlTm9ybWFsRm9yd2FyZCIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9t
YXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90
b3R5cGUsICJlbmFibGVTcGVjdWxhckFudGlBbGlhc2luZyIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VIb3Jpem9u
T2NjbHVzaW9uIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Q
cm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBC
Uk1hdGVyaWFsLnByb3RvdHlwZSwgInVzZVJhZGlhbmNlT2NjbHVzaW9uIiwgdm9pZCAwKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJN
ZXNoZXNBc01pc2NEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidW5saXQi
LCB2b2lkIDApOworICAgIHJldHVybiBQQlJNYXRlcmlhbDsKK30oX3BickJhc2VNYXRlcmlhbF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQQlJCYXNlTWF0ZXJpYWwiXSkpOworCitfTWlz
Y190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siX1R5cGVTdG9yZSJdLlJl
Z2lzdGVyZWRUeXBlc1siQkFCWUxPTi5QQlJNYXRlcmlhbCJdID0gUEJSTWF0ZXJpYWw7CisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9QQlIvcGJyTWV0YWxsaWNSb3VnaG5lc3NN
YXRlcmlhbC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvUEJSL3Bick1ldGFsbGljUm91
Z2huZXNzTWF0ZXJpYWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQQlJNZXRh
bGxpY1JvdWdobmVzc01hdGVyaWFsICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBC
Uk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWw7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9y
cyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cGJyQmFzZVNpbXBsZU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3BickJhc2VTaW1wbGVNYXRlcmlhbCAqLyAiLi9NYXRlcmlh
bHMvUEJSL3BickJhc2VTaW1wbGVNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3Rv
cmUudHMiKTsKKworCisKKworLyoqCisgKiBUaGUgUEJSIG1hdGVyaWFsIG9mIEJKUyBmb2xsb3dp
bmcgdGhlIG1ldGFsIHJvdWdobmVzcyBjb252ZW50aW9uLgorICoKKyAqIFRoaXMgZml0cyB0byB0
aGUgUEJSIGNvbnZlbnRpb24gaW4gdGhlIEdMVEYgZGVmaW5pdGlvbjoKKyAqIGh0dHBzOi8vZ2l0
aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi90cmVlLzIuMC9zcGVjaWZpY2F0aW9uLzIuMAorICov
Cit2YXIgUEJSTWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShQQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsLCBfc3VwZXIpOworICAgIC8q
KgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBQQlJNZXRhbFJvdWdobmVzc01hdGVyaWFsIGlu
c3RhbmNlLgorICAgICAqCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG1hdGVyaWFsIG5hbWUKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRoZSBtYXRlcmlhbCB3aWxsIGJlIHVzZSBpbi4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBQQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsKG5hbWUs
IHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNj
ZW5lKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fdXNlUm91Z2huZXNzRnJvbU1ldGFsbGljVGV4
dHVyZUFscGhhID0gZmFsc2U7CisgICAgICAgIF90aGlzLl91c2VSb3VnaG5lc3NGcm9tTWV0YWxs
aWNUZXh0dXJlR3JlZW4gPSB0cnVlOworICAgICAgICBfdGhpcy5fdXNlTWV0YWxsbmVzc0Zyb21N
ZXRhbGxpY1RleHR1cmVCbHVlID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMubWV0YWxsaWMgPSAxLjA7
CisgICAgICAgIF90aGlzLnJvdWdobmVzcyA9IDEuMDsKKyAgICAgICAgcmV0dXJuIF90aGlzOwor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGN1cnJyZW50IGNsYXNzIG5hbWUgb2Yg
dGhlIG1hdGVyaWFsLgorICAgICAqLworICAgIFBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwu
cHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJQ
QlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1h
a2VzIGEgZHVwbGljYXRlIG9mIHRoZSBjdXJyZW50IG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBu
YW1lIC0gbmFtZSB0byB1c2UgZm9yIHRoZSBuZXcgbWF0ZXJpYWwuCisgICAgICovCisgICAgUEJS
TWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAobmFt
ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgY2xvbmUgPSBfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25I
ZWxwZXIiXS5DbG9uZShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUEJSTWV0YWxsaWNSb3VnaG5l
c3NNYXRlcmlhbChuYW1lLCBfdGhpcy5nZXRTY2VuZSgpKTsgfSwgdGhpcyk7CisgICAgICAgIGNs
b25lLmlkID0gbmFtZTsKKyAgICAgICAgY2xvbmUubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMu
Y2xlYXJDb2F0LmNvcHlUbyhjbG9uZS5jbGVhckNvYXQpOworICAgICAgICB0aGlzLmFuaXNvdHJv
cHkuY29weVRvKGNsb25lLmFuaXNvdHJvcHkpOworICAgICAgICB0aGlzLmJyZGYuY29weVRvKGNs
b25lLmJyZGYpOworICAgICAgICB0aGlzLnNoZWVuLmNvcHlUbyhjbG9uZS5zaGVlbik7CisgICAg
ICAgIHJldHVybiBjbG9uZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUg
bWF0ZXJpYWwgdG8gYSBwYXJzYWJsZSBKU09OIG9iamVjdC4KKyAgICAgKi8KKyAgICBQQlJNZXRh
bGxpY1JvdWdobmVzc01hdGVyaWFsLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXpl
KHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmN1c3RvbVR5cGUgPSAiQkFCWUxP
Ti5QQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsIjsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5jbGVhckNvYXQgPSB0aGlzLmNsZWFyQ29hdC5zZXJpYWxpemUoKTsKKyAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5hbmlzb3Ryb3B5ID0gdGhpcy5hbmlzb3Ryb3B5LnNlcmlhbGl6ZSgp
OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmJyZGYgPSB0aGlzLmJyZGYuc2VyaWFsaXpl
KCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc2hlZW4gPSB0aGlzLnNoZWVuLnNlcmlh
bGl6ZSgpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnN1YlN1cmZhY2UgPSB0aGlzLnN1
YlN1cmZhY2Uuc2VyaWFsaXplKCk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0
OworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2VzIGEgSlNPTiBvYmplY3QgY29ycmVwb25k
aW5nIHRvIHRoZSBzZXJpYWxpemUgZnVuY3Rpb24uCisgICAgICovCisgICAgUEJSTWV0YWxsaWNS
b3VnaG5lc3NNYXRlcmlhbC5QYXJzZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHNjZW5lLCByb290VXJs
KSB7CisgICAgICAgIHZhciBtYXRlcmlhbCA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlBhcnNlKGZ1bmN0aW9uICgp
IHsgcmV0dXJuIG5ldyBQQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsKHNvdXJjZS5uYW1lLCBz
Y2VuZSk7IH0sIHNvdXJjZSwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICBpZiAoc291cmNlLmNs
ZWFyQ29hdCkgeworICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJDb2F0LnBhcnNlKHNvdXJjZS5j
bGVhckNvYXQsIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc291cmNl
LmFuaXNvdHJvcHkpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLmFuaXNvdHJvcHkucGFyc2Uoc291
cmNlLmFuaXNvdHJvcHksIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
c291cmNlLmJyZGYpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLmJyZGYucGFyc2Uoc291cmNlLmJy
ZGYsIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc291cmNlLnNoZWVu
KSB7CisgICAgICAgICAgICBtYXRlcmlhbC5zaGVlbi5wYXJzZShzb3VyY2Uuc2hlZW4sIHNjZW5l
LCByb290VXJsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc291cmNlLnN1YlN1cmZhY2UpIHsK
KyAgICAgICAgICAgIG1hdGVyaWFsLnN1YlN1cmZhY2UucGFyc2Uoc291cmNlLnN1YlN1cmZhY2Us
IHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWF0ZXJpYWw7Cisg
ICAgfTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemVBc0NvbG9yMyJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5
Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIsICJfYWxiZWRvQ29sb3IiKQor
ICAgIF0sIFBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwucHJvdG90eXBlLCAiYmFzZUNvbG9y
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Q
cm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiLCAiX2FsYmVkb1Rl
eHR1cmUiKQorICAgIF0sIFBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwucHJvdG90eXBlLCAi
YmFzZVRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRU
b1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwg
UEJSTWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbC5wcm90b3R5cGUsICJtZXRhbGxpYyIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJr
QWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNZXRhbGxpY1JvdWdobmVz
c01hdGVyaWFsLnByb3RvdHlwZSwgInJvdWdobmVzcyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
QXNUZXh0dXJlIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVz
aGVzQXNUZXh0dXJlc0RpcnR5IiwgIl9tZXRhbGxpY1RleHR1cmUiKQorICAgIF0sIFBCUk1ldGFs
bGljUm91Z2huZXNzTWF0ZXJpYWwucHJvdG90eXBlLCAibWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJl
Iiwgdm9pZCAwKTsKKyAgICByZXR1cm4gUEJSTWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbDsKK30o
X3BickJhc2VTaW1wbGVNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQQlJC
YXNlU2ltcGxlTWF0ZXJpYWwiXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5QQlJN
ZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsIl0gPSBQQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFs
OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvUEJSL3BiclNoZWVuQ29uZmln
dXJhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9QQlIvcGJyU2hlZW5Db25maWd1cmF0aW9u
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQQlJTaGVlbkNvbmZpZ3VyYXRpb24gKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUEJSU2hlZW5Db25maWd1cmF0aW9uIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBQQlJTaGVlbkNvbmZpZ3VyYXRpb247IH0pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGli
LmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAi
Li9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVy
aWFsc19tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvbWF0ZXJpYWxGbGFncyAqLyAiLi9NYXRl
cmlhbHMvbWF0ZXJpYWxGbGFncy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9tYXRlcmlhbEhlbHBlciAqLyAiLi9N
YXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIudHMiKTsKKworCisKKworCisvKioKKyAqIERlZmluZSB0
aGUgY29kZSByZWxhdGVkIHRvIHRoZSBTaGVlbiBwYXJhbWV0ZXJzIG9mIHRoZSBwYnIgbWF0ZXJp
YWwuCisgKi8KK3ZhciBQQlJTaGVlbkNvbmZpZ3VyYXRpb24gPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGUgYSBuZXcgaXN0YW5jZSBvZiBj
bGVhciBjb2F0IGNvbmZpZ3VyYXRpb24uCisgICAgICogQHBhcmFtIG1hcmtBbGxTdWJNZXNoZXNB
c1RleHR1cmVzRGlydHkgQ2FsbGJhY2sgdG8gZmxhZyB0aGUgbWF0ZXJpYWwgdG8gZGlydHkKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBQQlJTaGVlbkNvbmZpZ3VyYXRpb24obWFya0FsbFN1Yk1lc2hl
c0FzVGV4dHVyZXNEaXJ0eSkgeworICAgICAgICB0aGlzLl9pc0VuYWJsZWQgPSBmYWxzZTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaWYgdGhlIG1hdGVyaWFsIHVzZXMgc2hlZW4u
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmlzRW5hYmxlZCA9IGZhbHNlOworICAgICAgICB0
aGlzLl9saW5rU2hlZW5XaXRoQWxiZWRvID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIGlmIHRoZSBzaGVlbiBpcyBsaW5rZWQgdG8gdGhlIHNoZWVuIGNvbG9yLgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5saW5rU2hlZW5XaXRoQWxiZWRvID0gZmFsc2U7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBzaGVlbiBpbnRlbnNpdHkuCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmludGVuc2l0eSA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIHRoZSBzaGVlbiBjb2xvci4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuY29s
b3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb2xv
cjMiXS5XaGl0ZSgpOworICAgICAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFN0b3JlcyB0aGUgc2hlZW4gdGludCB2YWx1ZXMgaW4gYSB0ZXh0dXJlLgor
ICAgICAgICAgKiByZ2IgaXMgdGludAorICAgICAgICAgKiBhIGlzIGEgaW50ZW5zaXR5CisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnRleHR1cmUgPSBudWxsOworICAgICAgICB0aGlzLl9pbnRl
cm5hbE1hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkgPSBtYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0RpcnR5OworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBCUlNoZWVuQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUuX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2ludGVybmFsTWFya0FsbFN1Yk1lc2hlc0FzVGV4
dHVyZXNEaXJ0eSgpOworICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHRoYXQgdGhl
IHN1Ym1lc2ggaXMgcmVhZHkgdG8gYmUgdXNlZC4KKyAgICAgKiBAcGFyYW0gZGVmaW5lcyB0aGUg
bGlzdCBvZiAiZGVmaW5lcyIgdG8gdXBkYXRlLgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVz
IHRoZSBzY2VuZSB0aGUgbWF0ZXJpYWwgYmVsb25ncyB0by4KKyAgICAgKiBAcmV0dXJucyAtIGJv
b2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJlYWR5IG9yIG5vdC4KKyAgICAg
Ki8KKyAgICBQQlJTaGVlbkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmlzUmVhZHlGb3JTdWJNZXNo
ID0gZnVuY3Rpb24gKGRlZmluZXMsIHNjZW5lKSB7CisgICAgICAgIGlmIChkZWZpbmVzLl9hcmVU
ZXh0dXJlc0RpcnR5KSB7CisgICAgICAgICAgICBpZiAoc2NlbmUudGV4dHVyZXNFbmFibGVkKSB7
CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgJiYgX01hdGVyaWFsc19tYXRlcmlh
bEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdGVyaWFsRmxhZ3MiXS5TaGVl
blRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGV4dHVy
ZS5pc1JlYWR5T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDaGVja3MgdG8gc2VlIGlmIGEgdGV4dHVyZSBpcyB1c2VkIGluIHRoZSBtYXRl
cmlhbC4KKyAgICAgKiBAcGFyYW0gZGVmaW5lcyB0aGUgbGlzdCBvZiAiZGVmaW5lcyIgdG8gdXBk
YXRlLgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGUgbWF0ZXJpYWwg
YmVsb25ncyB0by4KKyAgICAgKi8KKyAgICBQQlJTaGVlbkNvbmZpZ3VyYXRpb24ucHJvdG90eXBl
LnByZXBhcmVEZWZpbmVzID0gZnVuY3Rpb24gKGRlZmluZXMsIHNjZW5lKSB7CisgICAgICAgIGlm
ICh0aGlzLl9pc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIGRlZmluZXMuU0hFRU4gPSB0aGlzLl9p
c0VuYWJsZWQ7CisgICAgICAgICAgICBkZWZpbmVzLlNIRUVOX0xJTktXSVRIQUxCRURPID0gdGhp
cy5fbGlua1NoZWVuV2l0aEFsYmVkbzsKKyAgICAgICAgICAgIGlmIChkZWZpbmVzLl9hcmVUZXh0
dXJlc0RpcnR5KSB7CisgICAgICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSAmJiBfTWF0ZXJpYWxzX21h
dGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxGbGFncyJd
LlNoZWVuVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9NYXRlcmlh
bHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0ZXJpYWxI
ZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX3RleHR1cmUsIGRlZmluZXMs
ICJTSEVFTl9URVhUVVJFIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlNIRUVOX1RFWFRV
UkUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlZmlu
ZXMuU0hFRU4gPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuU0hFRU5fVEVYVFVSRSA9IGZh
bHNlOworICAgICAgICAgICAgZGVmaW5lcy5TSEVFTl9MSU5LV0lUSEFMQkVETyA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgbWF0ZXJpYWwgZGF0
YS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybUJ1ZmZlciBkZWZpbmVzIHRoZSBVbmlmb3JtIGJ1ZmZl
ciB0byBmaWxsIGluLgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGUg
bWF0ZXJpYWwgYmVsb25ncyB0by4KKyAgICAgKiBAcGFyYW0gaXNGcm96ZW4gZGVmaW5lcyB3ZXRo
ZXIgdGhlIG1hdGVyaWFsIGlzIGZyb3plbiBvciBub3QuCisgICAgICovCisgICAgUEJSU2hlZW5D
b25maWd1cmF0aW9uLnByb3RvdHlwZS5iaW5kRm9yU3ViTWVzaCA9IGZ1bmN0aW9uICh1bmlmb3Jt
QnVmZmVyLCBzY2VuZSwgaXNGcm96ZW4pIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtQnVmZmVyLnVz
ZVVibyB8fCAhaXNGcm96ZW4gfHwgIXVuaWZvcm1CdWZmZXIuaXNTeW5jKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5fdGV4dHVyZSAmJiBfTWF0ZXJpYWxzX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxGbGFncyJdLlNoZWVuVGV4dHVyZUVuYWJsZWQp
IHsKKyAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0MigidlNoZWVuSW5m
b3MiLCB0aGlzLl90ZXh0dXJlLmNvb3JkaW5hdGVzSW5kZXgsIHRoaXMuX3RleHR1cmUubGV2ZWwp
OworICAgICAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kVGV4dHVyZU1hdHJpeCh0aGlz
Ll90ZXh0dXJlLCB1bmlmb3JtQnVmZmVyLCAic2hlZW4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIFNoZWVuCisgICAgICAgICAgICB1bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgi
dlNoZWVuQ29sb3IiLCB0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iLCB0
aGlzLmludGVuc2l0eSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGV4dHVyZXMKKyAgICAgICAg
aWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1
cmUgJiYgX01hdGVyaWFsc19tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk1hdGVyaWFsRmxhZ3MiXS5TaGVlblRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAg
ICAgdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJlKCJzaGVlblNhbXBsZXIiLCB0aGlzLl90ZXh0dXJl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ2hl
Y2tzIHRvIHNlZSBpZiBhIHRleHR1cmUgaXMgdXNlZCBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICog
QHBhcmFtIHRleHR1cmUgLSBCYXNlIHRleHR1cmUgdG8gdXNlLgorICAgICAqIEByZXR1cm5zIC0g
Qm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGEgdGV4dHVyZSBpcyB1c2VkIGluIHRoZSBtYXRlcmlhbC4K
KyAgICAgKi8KKyAgICBQQlJTaGVlbkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmhhc1RleHR1cmUg
PSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdGV4
dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB0
aGUgYWN0aXZlbHkgdXNlZCB0ZXh0dXJlcy4KKyAgICAgKiBAcGFyYW0gYWN0aXZlVGV4dHVyZXMg
QXJyYXkgb2YgQmFzZVRleHR1cmVzCisgICAgICovCisgICAgUEJSU2hlZW5Db25maWd1cmF0aW9u
LnByb3RvdHlwZS5nZXRBY3RpdmVUZXh0dXJlcyA9IGZ1bmN0aW9uIChhY3RpdmVUZXh0dXJlcykg
eworICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgYWN0aXZlVGV4dHVy
ZXMucHVzaCh0aGlzLl90ZXh0dXJlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogUmV0dXJucyB0aGUgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAgICAgKiBAcGFyYW0gYW5pbWF0
YWJsZXMgQXJyYXkgb2YgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAgICAgKi8KKyAgICBQQlJTaGVl
bkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldEFuaW1hdGFibGVzID0gZnVuY3Rpb24gKGFuaW1h
dGFibGVzKSB7CisgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlICYmIHRoaXMuX3RleHR1cmUuYW5p
bWF0aW9ucyAmJiB0aGlzLl90ZXh0dXJlLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAg
ICAgICAgYW5pbWF0YWJsZXMucHVzaCh0aGlzLl90ZXh0dXJlKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhlIHJlc291cmNlcyBvZiB0aGUgbWF0ZXJpYWwu
CisgICAgICogQHBhcmFtIGZvcmNlRGlzcG9zZVRleHR1cmVzIC0gRm9yY2VzIHRoZSBkaXNwb3Nh
bCBvZiBhbGwgdGV4dHVyZXMuCisgICAgICovCisgICAgUEJSU2hlZW5Db25maWd1cmF0aW9uLnBy
b3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGZvcmNlRGlzcG9zZVRleHR1cmVzKSB7CisgICAg
ICAgIGlmIChmb3JjZURpc3Bvc2VUZXh0dXJlcykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3Rl
eHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgKiBHZXQgdGhlIGN1cnJl
bnQgY2xhc3MgbmFtZSBvZiB0aGUgdGV4dHVyZSB1c2VmdWwgZm9yIHNlcmlhbGl6YXRpb24gb3Ig
ZHluYW1pYyBjb2RpbmcuCisgICAgKiBAcmV0dXJucyAiUEJSU2hlZW5Db25maWd1cmF0aW9uIgor
ICAgICovCisgICAgUEJSU2hlZW5Db25maWd1cmF0aW9uLnByb3RvdHlwZS5nZXRDbGFzc05hbWUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiUEJSU2hlZW5Db25maWd1cmF0aW9uIjsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBmYWxsYmFja3MgdG8gdGhlIGVmZmVjdCBmYWxs
YmFja3MgbGlzdC4KKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBCYXNlIHRleHR1
cmUgdG8gdXNlLgorICAgICAqIEBwYXJhbSBmYWxsYmFja3MgZGVmaW5lcyB0aGUgY3VycmVudCBm
YWxsYmFjayBsaXN0LgorICAgICAqIEBwYXJhbSBjdXJyZW50UmFuayBkZWZpbmVzIHRoZSBjdXJy
ZW50IGZhbGxiYWNrIHJhbmsuCisgICAgICogQHJldHVybnMgdGhlIG5ldyBmYWxsYmFjayByYW5r
LgorICAgICAqLworICAgIFBCUlNoZWVuQ29uZmlndXJhdGlvbi5BZGRGYWxsYmFja3MgPSBmdW5j
dGlvbiAoZGVmaW5lcywgZmFsbGJhY2tzLCBjdXJyZW50UmFuaykgeworICAgICAgICBpZiAoZGVm
aW5lcy5TSEVFTikgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGN1cnJlbnRS
YW5rKyssICJTSEVFTiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjdXJyZW50UmFuazsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCB0aGUgcmVxdWlyZWQgdW5pZm9ybXMgdG8gdGhl
IGN1cnJlbnQgbGlzdC4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybXMgZGVmaW5lcyB0aGUgY3VycmVu
dCB1bmlmb3JtIGxpc3QuCisgICAgICovCisgICAgUEJSU2hlZW5Db25maWd1cmF0aW9uLkFkZFVu
aWZvcm1zID0gZnVuY3Rpb24gKHVuaWZvcm1zKSB7CisgICAgICAgIHVuaWZvcm1zLnB1c2goInZT
aGVlbkNvbG9yIiwgInZTaGVlbkluZm9zIiwgInNoZWVuTWF0cml4Iik7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBZGQgdGhlIHJlcXVpcmVkIHVuaWZvcm1zIHRvIHRoZSBjdXJyZW50IGJ1ZmZl
ci4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybUJ1ZmZlciBkZWZpbmVzIHRoZSBjdXJyZW50IHVuaWZv
cm0gYnVmZmVyLgorICAgICAqLworICAgIFBCUlNoZWVuQ29uZmlndXJhdGlvbi5QcmVwYXJlVW5p
Zm9ybUJ1ZmZlciA9IGZ1bmN0aW9uICh1bmlmb3JtQnVmZmVyKSB7CisgICAgICAgIHVuaWZvcm1C
dWZmZXIuYWRkVW5pZm9ybSgidlNoZWVuQ29sb3IiLCA0KTsKKyAgICAgICAgdW5pZm9ybUJ1ZmZl
ci5hZGRVbmlmb3JtKCJ2U2hlZW5JbmZvcyIsIDIpOworICAgICAgICB1bmlmb3JtQnVmZmVyLmFk
ZFVuaWZvcm0oInNoZWVuTWF0cml4IiwgMTYpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRk
IHRoZSByZXF1aXJlZCBzYW1wbGVycyB0byB0aGUgY3VycmVudCBsaXN0LgorICAgICAqIEBwYXJh
bSBzYW1wbGVycyBkZWZpbmVzIHRoZSBjdXJyZW50IHNhbXBsZXIgbGlzdC4KKyAgICAgKi8KKyAg
ICBQQlJTaGVlbkNvbmZpZ3VyYXRpb24uQWRkU2FtcGxlcnMgPSBmdW5jdGlvbiAoc2FtcGxlcnMp
IHsKKyAgICAgICAgc2FtcGxlcnMucHVzaCgic2hlZW5TYW1wbGVyIik7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBNYWtlcyBhIGR1cGxpY2F0ZSBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9u
IGludG8gYW5vdGhlciBvbmUuCisgICAgICogQHBhcmFtIHNoZWVuQ29uZmlndXJhdGlvbiBkZWZp
bmUgdGhlIGNvbmZpZyB3aGVyZSB0byBjb3B5IHRoZSBpbmZvCisgICAgICovCisgICAgUEJSU2hl
ZW5Db25maWd1cmF0aW9uLnByb3RvdHlwZS5jb3B5VG8gPSBmdW5jdGlvbiAoc2hlZW5Db25maWd1
cmF0aW9uKSB7CisgICAgICAgIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkNsb25lKGZ1bmN0aW9uICgpIHsgcmV0dXJu
IHNoZWVuQ29uZmlndXJhdGlvbjsgfSwgdGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXJpYWxpemVzIHRoaXMgQlJERiBjb25maWd1cmF0aW9uLgorICAgICAqIEByZXR1cm5zIC0gQW4g
b2JqZWN0IHdpdGggdGhlIHNlcmlhbGl6ZWQgY29uZmlnLgorICAgICAqLworICAgIFBCUlNoZWVu
Q29uZmlndXJhdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
ZXJpYWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXplKHRoaXMpOworICAgIH07CisgICAgLyoqCisg
ICAgICogUGFyc2VzIGEgYW5pc290cm9weSBDb25maWd1cmF0aW9uIGZyb20gYSBzZXJpYWxpemVk
IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gc291cmNlIC0gU2VyaWFsaXplZCBvYmplY3QuCisgICAg
ICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHdlIGFyZSBwYXJzaW5nIGZvcgorICAg
ICAqIEBwYXJhbSByb290VXJsIERlZmluZXMgdGhlIHJvb3RVcmwgdG8gbG9hZCBmcm9tCisgICAg
ICovCisgICAgUEJSU2hlZW5Db25maWd1cmF0aW9uLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9u
IChzb3VyY2UsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2Vy
aWFsaXphdGlvbkhlbHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzOyB9LCBz
b3VyY2UsIHNjZW5lLCByb290VXJsKTsKKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIp
CisgICAgXSwgUEJSU2hlZW5Db25maWd1cmF0aW9uLnByb3RvdHlwZSwgImlzRW5hYmxlZCIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9t
YXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJTaGVlbkNvbmZpZ3Vy
YXRpb24ucHJvdG90eXBlLCAibGlua1NoZWVuV2l0aEFsYmVkbyIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplIl0pKCkKKyAgICBdLCBQQlJTaGVlbkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiaW50
ZW5zaXR5Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0NvbG9yMyJdKSgpCisgICAgXSwgUEJS
U2hlZW5Db25maWd1cmF0aW9uLnByb3RvdHlwZSwgImNvbG9yIiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemVBc1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxT
dWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUlNoZWVuQ29uZmlndXJhdGlvbi5w
cm90b3R5cGUsICJ0ZXh0dXJlIiwgdm9pZCAwKTsKKyAgICByZXR1cm4gUEJSU2hlZW5Db25maWd1
cmF0aW9uOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvUEJS
L3BiclNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRl
cmlhbHMvUEJSL3BiclNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVy
aWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbDsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVs
ZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYnJCYXNlU2ltcGxlTWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGJyQmFz
ZVNpbXBsZU1hdGVyaWFsICovICIuL01hdGVyaWFscy9QQlIvcGJyQmFzZVNpbXBsZU1hdGVyaWFs
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNj
L3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisvKioKKyAqIFRo
ZSBQQlIgbWF0ZXJpYWwgb2YgQkpTIGZvbGxvd2luZyB0aGUgc3BlY3VsYXIgZ2xvc3NpbmVzcyBj
b252ZW50aW9uLgorICoKKyAqIFRoaXMgZml0cyB0byB0aGUgUEJSIGNvbnZlbnRpb24gaW4gdGhl
IEdMVEYgZGVmaW5pdGlvbjoKKyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xU
Ri90cmVlLzIuMC9leHRlbnNpb25zL0tocm9ub3MvS0hSX21hdGVyaWFsc19wYnJTcGVjdWxhckds
b3NzaW5lc3MKKyAqLwordmFyIFBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsLCBf
c3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBQQlJTcGVjdWxhckds
b3NzaW5lc3NNYXRlcmlhbCBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lIFRo
ZSBtYXRlcmlhbCBuYW1lCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0aGUgbWF0ZXJp
YWwgd2lsbCBiZSB1c2UgaW4uCisgICAgICovCisgICAgZnVuY3Rpb24gUEJSU3BlY3VsYXJHbG9z
c2luZXNzTWF0ZXJpYWwobmFtZSwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl91c2VNaWNy
b1N1cmZhY2VGcm9tUmVmbGVjdGl2aXR5TWFwQWxwaGEgPSB0cnVlOworICAgICAgICByZXR1cm4g
X3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgY3VycnJlbnQgY2xhc3Mg
bmFtZSBvZiB0aGUgbWF0ZXJpYWwuCisgICAgICovCisgICAgUEJSU3BlY3VsYXJHbG9zc2luZXNz
TWF0ZXJpYWwucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuICJQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbCI7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBNYWtlcyBhIGR1cGxpY2F0ZSBvZiB0aGUgY3VycmVudCBtYXRlcmlhbC4KKyAgICAg
KiBAcGFyYW0gbmFtZSAtIG5hbWUgdG8gdXNlIGZvciB0aGUgbmV3IG1hdGVyaWFsLgorICAgICAq
LworICAgIFBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsLnByb3RvdHlwZS5jbG9uZSA9IGZ1
bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBj
bG9uZSA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2Vy
aWFsaXphdGlvbkhlbHBlciJdLkNsb25lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBQQlJTcGVj
dWxhckdsb3NzaW5lc3NNYXRlcmlhbChuYW1lLCBfdGhpcy5nZXRTY2VuZSgpKTsgfSwgdGhpcyk7
CisgICAgICAgIGNsb25lLmlkID0gbmFtZTsKKyAgICAgICAgY2xvbmUubmFtZSA9IG5hbWU7Cisg
ICAgICAgIHRoaXMuY2xlYXJDb2F0LmNvcHlUbyhjbG9uZS5jbGVhckNvYXQpOworICAgICAgICB0
aGlzLmFuaXNvdHJvcHkuY29weVRvKGNsb25lLmFuaXNvdHJvcHkpOworICAgICAgICB0aGlzLmJy
ZGYuY29weVRvKGNsb25lLmJyZGYpOworICAgICAgICB0aGlzLnNoZWVuLmNvcHlUbyhjbG9uZS5z
aGVlbik7CisgICAgICAgIHJldHVybiBjbG9uZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
cmlhbGl6ZSB0aGUgbWF0ZXJpYWwgdG8gYSBwYXJzYWJsZSBKU09OIG9iamVjdC4KKyAgICAgKi8K
KyAgICBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbC5wcm90b3R5cGUuc2VyaWFsaXplID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBl
ciJdLlNlcmlhbGl6ZSh0aGlzKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21U
eXBlID0gIkJBQllMT04uUEJSU3BlY3VsYXJHbG9zc2luZXNzTWF0ZXJpYWwiOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LmNsZWFyQ29hdCA9IHRoaXMuY2xlYXJDb2F0LnNlcmlhbGl6ZSgp
OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmFuaXNvdHJvcHkgPSB0aGlzLmFuaXNvdHJv
cHkuc2VyaWFsaXplKCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYnJkZiA9IHRoaXMu
YnJkZi5zZXJpYWxpemUoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5zaGVlbiA9IHRo
aXMuc2hlZW4uc2VyaWFsaXplKCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc3ViU3Vy
ZmFjZSA9IHRoaXMuc3ViU3VyZmFjZS5zZXJpYWxpemUoKTsKKyAgICAgICAgcmV0dXJuIHNlcmlh
bGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgYSBKU09OIG9i
amVjdCBjb3JyZXBvbmRpbmcgdG8gdGhlIHNlcmlhbGl6ZSBmdW5jdGlvbi4KKyAgICAgKi8KKyAg
ICBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbC5QYXJzZSA9IGZ1bmN0aW9uIChzb3VyY2Us
IHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIHZhciBtYXRlcmlhbCA9IF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlBh
cnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlh
bChzb3VyY2UubmFtZSwgc2NlbmUpOyB9LCBzb3VyY2UsIHNjZW5lLCByb290VXJsKTsKKyAgICAg
ICAgaWYgKHNvdXJjZS5jbGVhckNvYXQpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyQ29h
dC5wYXJzZShzb3VyY2UuY2xlYXJDb2F0LCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHNvdXJjZS5hbmlzb3Ryb3B5KSB7CisgICAgICAgICAgICBtYXRlcmlhbC5hbmlz
b3Ryb3B5LnBhcnNlKHNvdXJjZS5hbmlzb3Ryb3B5LCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHNvdXJjZS5icmRmKSB7CisgICAgICAgICAgICBtYXRlcmlhbC5icmRm
LnBhcnNlKHNvdXJjZS5icmRmLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHNvdXJjZS5zaGVlbikgeworICAgICAgICAgICAgbWF0ZXJpYWwuc2hlZW4ucGFyc2Uoc291
cmNlLnNoZWVuLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNvdXJj
ZS5zdWJTdXJmYWNlKSB7CisgICAgICAgICAgICBtYXRlcmlhbC5zdWJTdXJmYWNlLnBhcnNlKHNv
dXJjZS5zdWJTdXJmYWNlLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG1hdGVyaWFsOworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNDb2xvcjMiXSkoImRpZmZ1c2Ui
KSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVz
RGlydHkiLCAiX2FsYmVkb0NvbG9yIikKKyAgICBdLCBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRl
cmlhbC5wcm90b3R5cGUsICJkaWZmdXNlQ29sb3IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFz
VGV4dHVyZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hl
c0FzVGV4dHVyZXNEaXJ0eSIsICJfYWxiZWRvVGV4dHVyZSIpCisgICAgXSwgUEJSU3BlY3VsYXJH
bG9zc2luZXNzTWF0ZXJpYWwucHJvdG90eXBlLCAiZGlmZnVzZVRleHR1cmUiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZUFzQ29sb3IzIl0pKCJzcGVjdWxhciIpLAorICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3Bl
cnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIsICJfcmVmbGVjdGl2aXR5
Q29sb3IiKQorICAgIF0sIFBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsLnByb3RvdHlwZSwg
InNwZWN1bGFyQ29sb3IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBh
bmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIsICJfbWlj
cm9TdXJmYWNlIikKKyAgICBdLCBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbC5wcm90b3R5
cGUsICJnbG9zc2luZXNzIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoKSwK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGly
dHkiLCAiX3JlZmxlY3Rpdml0eVRleHR1cmUiKQorICAgIF0sIFBCUlNwZWN1bGFyR2xvc3NpbmVz
c01hdGVyaWFsLnByb3RvdHlwZSwgInNwZWN1bGFyR2xvc3NpbmVzc1RleHR1cmUiLCB2b2lkIDAp
OworICAgIHJldHVybiBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbDsKK30oX3BickJhc2VT
aW1wbGVNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQQlJCYXNlU2ltcGxl
TWF0ZXJpYWwiXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5QQlJTcGVjdWxhckds
b3NzaW5lc3NNYXRlcmlhbCJdID0gUEJSU3BlY3VsYXJHbG9zc2luZXNzTWF0ZXJpYWw7CisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9QQlIvcGJyU3ViU3VyZmFjZUNvbmZpZ3Vy
YXRpb24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9QQlIvcGJyU3ViU3VyZmFjZUNvbmZp
Z3VyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUEJSU3ViU3VyZmFjZUNv
bmZpZ3VyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUEJSU3Vi
U3VyZmFjZUNvbmZpZ3VyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBCUlN1YlN1cmZhY2VD
b25maWd1cmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8g
Ii4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9k
ZWNvcmF0b3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tYXRlcmlhbEZsYWdzICovICIu
L01hdGVyaWFscy9tYXRlcmlhbEZsYWdzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyICov
ICIuL01hdGVyaWFscy9tYXRlcmlhbEhlbHBlci50cyIpOworCisKKworCisKKy8qKgorICogRGVm
aW5lIHRoZSBjb2RlIHJlbGF0ZWQgdG8gdGhlIHN1YiBzdXJmYWNlIHBhcmFtZXRlcnMgb2YgdGhl
IHBiciBtYXRlcmlhbC4KKyAqLwordmFyIFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIGEg
bmV3IGlzdGFuY2Ugb2Ygc3ViIHN1cmZhY2UgY29uZmlndXJhdGlvbi4KKyAgICAgKiBAcGFyYW0g
bWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSBDYWxsYmFjayB0byBmbGFnIHRoZSBtYXRl
cmlhbCB0byBkaXJ0eQorICAgICAqLworICAgIGZ1bmN0aW9uIFBCUlN1YlN1cmZhY2VDb25maWd1
cmF0aW9uKG1hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkpIHsKKyAgICAgICAgdGhpcy5f
aXNSZWZyYWN0aW9uRW5hYmxlZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVm
aW5lcyBpZiB0aGUgcmVmcmFjdGlvbiBpcyBlbmFibGVkIGluIHRoZSBtYXRlcmlhbC4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuaXNSZWZyYWN0aW9uRW5hYmxlZCA9IGZhbHNlOworICAgICAg
ICB0aGlzLl9pc1RyYW5zbHVjZW5jeUVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIERlZmluZXMgaWYgdGhlIHRyYW5zbHVjZW5jeSBpcyBlbmFibGVkIGluIHRoZSBtYXRl
cmlhbC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaXNUcmFuc2x1Y2VuY3lFbmFibGVkID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX2lzU2NhdHRlcmluZ0VuYWJsZWQgPSBmYWxzZTsKKyAgICAg
ICAgLy8gLyoqCisgICAgICAgIC8vICAqIERlZmluZXMgaWYgdGhlIHN1YiBzdXJmYWNlIHNjYXR0
ZXJpbmcgaXMgZW5hYmxlZCBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICAgIC8vICAqLworICAgICAg
ICAvLyBAc2VyaWFsaXplKCkKKyAgICAgICAgLy8gQGV4cGFuZFRvUHJvcGVydHkoIl9tYXJrQWxs
U3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICAgICAgLy8gcHVibGljIGlzU2NhdHRlcmlu
Z0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhlIHJl
ZnJhY3Rpb24gaW50ZW5zaXR5IG9mIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICogVGhlIHJlZnJh
Y3Rpb24gd2hlbiBlbmFibGVkIHJlcGxhY2VzIHRoZSBEaWZmdXNlIHBhcnQgb2YgdGhlIG1hdGVy
aWFsLgorICAgICAgICAgKiBUaGUgaW50ZW5zaXR5IGhlbHBzIHRyYW5zaXRpb25uaW5nIGJldHdl
ZW4gZGlmZnVzZSBhbmQgcmVmcmFjdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVm
cmFjdGlvbkludGVuc2l0eSA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRo
ZSB0cmFuc2x1Y2VuY3kgaW50ZW5zaXR5IG9mIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICogV2hl
biB0cmFuc2x1Y2VuY3kgaGFzIGJlZW4gZW5hYmxlZCwgdGhpcyBkZWZpbmVzIGhvdyBtdWNoIG9m
IHRoZSAidHJhbnNsdWNlbmN5IgorICAgICAgICAgKiBpcyBhZGRkZWQgdG8gdGhlIGRpZmZ1c2Ug
cGFydCBvZiB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnRyYW5zbHVj
ZW5jeUludGVuc2l0eSA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBz
Y2F0dGVyaW5nIGludGVuc2l0eSBvZiB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqIFdoZW4gc2Nh
dHRlcmluZyBoYXMgYmVlbiBlbmFibGVkLCB0aGlzIGRlZmluZXMgaG93IG11Y2ggb2YgdGhlICJz
Y2F0dGVyZWQgbGlnaHQiCisgICAgICAgICAqIGlzIGFkZGRlZCB0byB0aGUgZGlmZnVzZSBwYXJ0
IG9mIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc2NhdHRlcmluZ0lu
dGVuc2l0eSA9IDE7CisgICAgICAgIHRoaXMuX3RoaWNrbmVzc1RleHR1cmUgPSBudWxsOworICAg
ICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHRoZSBhdmVyYWdlIHRoaWNrbmVzcyBvZiBhIG1l
c2ggaW4gYSB0ZXh0dXJlIChUaGUgdGV4dHVyZSBpcyBob2xkaW5nIHRoZSB2YWx1ZXMgbGluZWFy
bHkpLgorICAgICAgICAgKiBUaGUgcmVkIGNoYW5uZWwgb2YgdGhlIHRleHR1cmUgc2hvdWxkIGNv
bnRhaW4gdGhlIHRoaWNrbmVzcyByZW1hcHBlZCBiZXR3ZWVuIDAgYW5kIDEuCisgICAgICAgICAq
IDAgd291bGQgbWVhbiBtaW5pbXVtVGhpY2tuZXNzCisgICAgICAgICAqIDEgd291bGQgbWVhbiBt
YXhpbXVtVGhpY2tuZXNzCisgICAgICAgICAqIFRoZSBvdGhlciBjaGFubmVscyBtaWdodCBiZSB1
c2UgYXMgYSBtYXNrIHRvIHZhcnkgdGhlIGRpZmZlcmVudCBlZmZlY3RzIGludGVuc2l0eS4KKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMudGhpY2tuZXNzVGV4dHVyZSA9IG51bGw7CisgICAgICAg
IHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZXMgdGhlIHRleHR1cmUgdG8gdXNlIGZvciByZWZyYWN0aW9uLgorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5yZWZyYWN0aW9uVGV4dHVyZSA9IG51bGw7CisgICAgICAgIHRoaXMuX2lu
ZGV4T2ZSZWZyYWN0aW9uID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhl
IGluZGV4IG9mIHJlZnJhY3Rpb24gdXNlZCBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqIGh0
dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfcmVmcmFjdGl2ZV9pbmRpY2VzCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmluZGV4T2ZSZWZyYWN0aW9uID0gMTsKKyAgICAgICAg
dGhpcy5faW52ZXJ0UmVmcmFjdGlvblkgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IENvbnRyb2xzIGlmIHJlZnJhY3Rpb24gbmVlZHMgdG8gYmUgaW52ZXJ0ZWQgb24gWS4gVGhpcyBj
b3VsZCBiZSB1c2VmdWwgZm9yIHByb2NlZHVyYWwgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMuaW52ZXJ0UmVmcmFjdGlvblkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbGlua1Jl
ZnJhY3Rpb25XaXRoVHJhbnNwYXJlbmN5ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBUaGlzIHBhcmFtZXRlcnMgd2lsbCBtYWtlIHRoZSBtYXRlcmlhbCB1c2VkIGl0cyBvcGFjaXR5
IHRvIGNvbnRyb2wgaG93IG11Y2ggaXQgaXMgcmVmcmFjdGluZyBhZ2luc3Qgbm90LgorICAgICAg
ICAgKiBNYXRlcmlhbHMgaGFsZiBvcGFxdWUgZm9yIGluc3RhbmNlIHVzaW5nIHJlZnJhY3Rpb24g
Y291bGQgYmVuZWZpdCBmcm9tIHRoaXMgY29udHJvbC4KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMubGlua1JlZnJhY3Rpb25XaXRoVHJhbnNwYXJlbmN5ID0gZmFsc2U7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBEZWZpbmVzIHRoZSBtaW5pbXVtIHRoaWNrbmVzcyBzdG9yZWQgaW4gdGhlIHRo
aWNrbmVzcyBtYXAuCisgICAgICAgICAqIElmIG5vIHRoaWNrbmVzcyBtYXAgaXMgZGVmaW5lZCwg
dGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gc2ltdWxhdGUgdGhpY2tuZXNzLgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5taW5pbXVtVGhpY2tuZXNzID0gMDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIERlZmluZXMgdGhlIG1heGltdW0gdGhpY2tuZXNzIHN0b3JlZCBpbiB0aGUgdGhpY2tu
ZXNzIG1hcC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubWF4aW11bVRoaWNrbmVzcyA9IDE7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSB2b2x1bWUgdGludCBvZiB0aGUg
bWF0ZXJpYWwuCisgICAgICAgICAqIFRoaXMgaXMgdXNlZCBmb3IgYm90aCB0cmFuc2x1Y2VuY3kg
YW5kIHNjYXR0ZXJpbmcuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnRpbnRDb2xvciA9IF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9yMyJdLldo
aXRlKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBkaXN0YW5jZSBhdCB3
aGljaCB0aGUgdGludCBjb2xvciBzaG91bGQgYmUgZm91bmQgaW4gdGhlIG1lZGlhLgorICAgICAg
ICAgKiBUaGlzIGlzIHVzZWQgZm9yIHJlZnJhY3Rpb24gb25seS4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMudGludENvbG9yQXREaXN0YW5jZSA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIGhvdyBmYXIgZWFjaCBjaGFubmVsIHRyYW5zbWl0IHRocm91Z2ggdGhlIG1lZGlh
LgorICAgICAgICAgKiBJdCBpcyBkZWZpbmVkIGFzIGEgY29sb3IgdG8gc2ltcGxpZnkgaXQgc2Vs
ZWN0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaWZmdXNpb25EaXN0YW5jZSA9IF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9yMyJdLldo
aXRlKCk7CisgICAgICAgIHRoaXMuX3VzZU1hc2tGcm9tVGhpY2tuZXNzVGV4dHVyZSA9IGZhbHNl
OworICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHRoZSBpbnRlbnNpdHkgb2YgdGhlIGRp
ZmZlcmVudCBzdWJzdXJmYWNlIGVmZmVjdHMgaW4gdGhlIHRoaWNrbmVzcyB0ZXh0dXJlLgorICAg
ICAgICAgKiAqIHRoZSBncmVlbiBjaGFubmVsIGlzIHRoZSB0cmFuc2x1Y2VuY3kgaW50ZW5zaXR5
LgorICAgICAgICAgKiAqIHRoZSBibHVlIGNoYW5uZWwgaXMgdGhlIHNjYXR0ZXJpbmcgaW50ZW5z
aXR5LgorICAgICAgICAgKiAqIHRoZSBhbHBoYSBjaGFubmVsIGlzIHRoZSByZWZyYWN0aW9uIGlu
dGVuc2l0eS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMudXNlTWFza0Zyb21UaGlja25lc3NU
ZXh0dXJlID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2ludGVybmFsTWFya0FsbFN1Yk1lc2hlc0Fz
VGV4dHVyZXNEaXJ0eSA9IG1hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHk7CisgICAgfQor
ICAgIC8qKiBAaGlkZGVuICovCisgICAgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90
eXBlLl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB0aGlzLl9pbnRlcm5hbE1hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkoKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgd2VodGVyIHRoZSBzdWJtZXNoIGlzIHJlYWR5IHRv
IGJlIHVzZWQgb3Igbm90LgorICAgICAqIEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0IG9mICJkZWZp
bmVzIiB0byB1cGRhdGUuCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIHNjZW5lIHRo
ZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgorICAgICAqIEByZXR1cm5zIC0gYm9vbGVhbiBpbmRpY2F0
aW5nIHRoYXQgdGhlIHN1Ym1lc2ggaXMgcmVhZHkgb3Igbm90LgorICAgICAqLworICAgIFBCUlN1
YlN1cmZhY2VDb25maWd1cmF0aW9uLnByb3RvdHlwZS5pc1JlYWR5Rm9yU3ViTWVzaCA9IGZ1bmN0
aW9uIChkZWZpbmVzLCBzY2VuZSkgeworICAgICAgICBpZiAoZGVmaW5lcy5fYXJlVGV4dHVyZXNE
aXJ0eSkgeworICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl90aGlja25lc3NUZXh0dXJlICYmIF9tYXRlcmlhbEZsYWdzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdGVyaWFsRmxhZ3MiXS5UaGlja25lc3NUZXh0
dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RoaWNrbmVzc1Rl
eHR1cmUuaXNSZWFkeU9yTm90QmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHZhciByZWZyYWN0aW9uVGV4dHVyZSA9IHRoaXMuX2dldFJlZnJhY3Rp
b25UZXh0dXJlKHNjZW5lKTsKKyAgICAgICAgICAgICAgICBpZiAocmVmcmFjdGlvblRleHR1cmUg
JiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxG
bGFncyJdLlJlZnJhY3Rpb25UZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXJlZnJhY3Rpb25UZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyB0byBzZWUgaWYgYSB0ZXh0dXJl
IGlzIHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0
IG9mICJkZWZpbmVzIiB0byB1cGRhdGUuCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhl
IHNjZW5lIHRvIHRoZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgorICAgICAqLworICAgIFBCUlN1YlN1
cmZhY2VDb25maWd1cmF0aW9uLnByb3RvdHlwZS5wcmVwYXJlRGVmaW5lcyA9IGZ1bmN0aW9uIChk
ZWZpbmVzLCBzY2VuZSkgeworICAgICAgICBpZiAoZGVmaW5lcy5fYXJlVGV4dHVyZXNEaXJ0eSkg
eworICAgICAgICAgICAgZGVmaW5lcy5TVUJTVVJGQUNFID0gZmFsc2U7CisgICAgICAgICAgICBk
ZWZpbmVzLlNTX1RSQU5TTFVDRU5DWSA9IHRoaXMuX2lzVHJhbnNsdWNlbmN5RW5hYmxlZDsKKyAg
ICAgICAgICAgIGRlZmluZXMuU1NfU0NBVEVSUklORyA9IHRoaXMuX2lzU2NhdHRlcmluZ0VuYWJs
ZWQ7CisgICAgICAgICAgICBkZWZpbmVzLlNTX1RISUNLTkVTU0FORE1BU0tfVEVYVFVSRSA9IGZh
bHNlOworICAgICAgICAgICAgZGVmaW5lcy5TU19NQVNLX0ZST01fVEhJQ0tORVNTX1RFWFRVUkUg
PSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuU1NfUkVGUkFDVElPTiA9IGZhbHNlOworICAg
ICAgICAgICAgZGVmaW5lcy5TU19SRUZSQUNUSU9OTUFQXzNEID0gZmFsc2U7CisgICAgICAgICAg
ICBkZWZpbmVzLlNTX0dBTU1BUkVGUkFDVElPTiA9IGZhbHNlOworICAgICAgICAgICAgZGVmaW5l
cy5TU19SR0JEUkVGUkFDVElPTiA9IGZhbHNlOworICAgICAgICAgICAgZGVmaW5lcy5TU19MSU5F
QVJTUEVDVUxBUlJFRlJBQ1RJT04gPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuU1NfUkVG
UkFDVElPTk1BUF9PUFBPU0lURVogPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuU1NfTE9E
SU5SRUZSQUNUSU9OQUxQSEEgPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuU1NfTElOS1JF
RlJBQ1RJT05UT1RSQU5TUEFSRU5DWSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKHRoaXMuX2lz
UmVmcmFjdGlvbkVuYWJsZWQgfHwgdGhpcy5faXNUcmFuc2x1Y2VuY3lFbmFibGVkIHx8IHRoaXMu
X2lzU2NhdHRlcmluZ0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLlNVQlNVUkZB
Q0UgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzLl9hcmVUZXh0dXJlc0RpcnR5
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aGlja25lc3NUZXh0dXJlICYmIF9tYXRl
cmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdGVyaWFsRmxhZ3MiXS5U
aGlja25lc3NUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N
YXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0
ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX3RoaWNrbmVzc1Rl
eHR1cmUsIGRlZmluZXMsICJTU19USElDS05FU1NBTkRNQVNLX1RFWFRVUkUiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBkZWZpbmVzLlNTX01BU0tfRlJPTV9USElDS05FU1NfVEVYVFVS
RSA9IHRoaXMuX3VzZU1hc2tGcm9tVGhpY2tuZXNzVGV4dHVyZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0aGlzLl9pc1JlZnJhY3Rpb25FbmFibGVkKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
cmVmcmFjdGlvblRleHR1cmUgPSB0aGlzLl9nZXRSZWZyYWN0aW9uVGV4dHVyZShzY2VuZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChyZWZyYWN0aW9uVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFn
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0uUmVmcmFjdGlv
blRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlNTX1JF
RlJBQ1RJT04gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5TU19SRUZS
QUNUSU9OTUFQXzNEID0gcmVmcmFjdGlvblRleHR1cmUuaXNDdWJlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lcy5TU19HQU1NQVJFRlJBQ1RJT04gPSByZWZyYWN0aW9uVGV4dHVyZS5n
YW1tYVNwYWNlOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5TU19SR0JEUkVGUkFD
VElPTiA9IHJlZnJhY3Rpb25UZXh0dXJlLmlzUkdCRDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmluZXMuU1NfTElORUFSU1BFQ1VMQVJSRUZSQUNUSU9OID0gcmVmcmFjdGlvblRleHR1cmUu
bGluZWFyU3BlY3VsYXJMT0Q7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlNTX1JF
RlJBQ1RJT05NQVBfT1BQT1NJVEVaID0gcmVmcmFjdGlvblRleHR1cmUuaW52ZXJ0WjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmluZXMuU1NfTE9ESU5SRUZSQUNUSU9OQUxQSEEgPSByZWZy
YWN0aW9uVGV4dHVyZS5sb2RMZXZlbEluQWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLlNTX0xJTktSRUZSQUNUSU9OVE9UUkFOU1BBUkVOQ1kgPSB0aGlzLl9saW5rUmVmcmFj
dGlvbldpdGhUcmFuc3BhcmVuY3k7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAq
IEJpbmRzIHRoZSBtYXRlcmlhbCBkYXRhLgorICAgICAqIEBwYXJhbSB1bmlmb3JtQnVmZmVyIGRl
ZmluZXMgdGhlIFVuaWZvcm0gYnVmZmVyIHRvIGZpbGwgaW4uCisgICAgICogQHBhcmFtIHNjZW5l
IGRlZmluZXMgdGhlIHNjZW5lIHRoZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgorICAgICAqIEBwYXJh
bSBlbmdpbmUgZGVmaW5lcyB0aGUgZW5naW5lIHRoZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgorICAg
ICAqIEBwYXJhbSBpc0Zyb3plbiBkZWZpbmVzIHdldGhlciB0aGUgbWF0ZXJpYWwgaXMgZnJvemVu
IG9yIG5vdC4KKyAgICAgKiBAcGFyYW0gbG9kQmFzZWRNaWNyb3N1cmZhY2UgZGVmaW5lcyB3ZXRo
ZXIgdGhlIG1hdGVyaWFsIHJlbGllcyBvbiBsb2QgYmFzZWQgbWljcm9zdXJmYWNlIG9yIG5vdC4K
KyAgICAgKi8KKyAgICBQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuYmluZEZv
clN1Yk1lc2ggPSBmdW5jdGlvbiAodW5pZm9ybUJ1ZmZlciwgc2NlbmUsIGVuZ2luZSwgaXNGcm96
ZW4sIGxvZEJhc2VkTWljcm9zdXJmYWNlKSB7CisgICAgICAgIHZhciByZWZyYWN0aW9uVGV4dHVy
ZSA9IHRoaXMuX2dldFJlZnJhY3Rpb25UZXh0dXJlKHNjZW5lKTsKKyAgICAgICAgaWYgKCF1bmlm
b3JtQnVmZmVyLnVzZVVibyB8fCAhaXNGcm96ZW4gfHwgIXVuaWZvcm1CdWZmZXIuaXNTeW5jKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fdGhpY2tuZXNzVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFn
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0uVGhpY2tuZXNz
VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyLnVwZGF0ZUZs
b2F0MigidlRoaWNrbmVzc0luZm9zIiwgdGhpcy5fdGhpY2tuZXNzVGV4dHVyZS5jb29yZGluYXRl
c0luZGV4LCB0aGlzLl90aGlja25lc3NUZXh0dXJlLmxldmVsKTsKKyAgICAgICAgICAgICAgICBf
TWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1h
dGVyaWFsSGVscGVyIl0uQmluZFRleHR1cmVNYXRyaXgodGhpcy5fdGhpY2tuZXNzVGV4dHVyZSwg
dW5pZm9ybUJ1ZmZlciwgInRoaWNrbmVzcyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIoInZUaGlja25lc3NQYXJhbSIsIHRoaXMubWluaW11
bVRoaWNrbmVzcywgdGhpcy5tYXhpbXVtVGhpY2tuZXNzIC0gdGhpcy5taW5pbXVtVGhpY2tuZXNz
KTsKKyAgICAgICAgICAgIGlmIChyZWZyYWN0aW9uVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0uUmVmcmFjdGlvblRl
eHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVNYXRy
aXgoInJlZnJhY3Rpb25NYXRyaXgiLCByZWZyYWN0aW9uVGV4dHVyZS5nZXRSZWZsZWN0aW9uVGV4
dHVyZU1hdHJpeCgpKTsKKyAgICAgICAgICAgICAgICB2YXIgZGVwdGggPSAxLjA7CisgICAgICAg
ICAgICAgICAgaWYgKCFyZWZyYWN0aW9uVGV4dHVyZS5pc0N1YmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlZnJhY3Rpb25UZXh0dXJlLmRlcHRoKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkZXB0aCA9IHJlZnJhY3Rpb25UZXh0dXJlLmRlcHRoOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVuaWZvcm1CdWZmZXIudXBk
YXRlRmxvYXQ0KCJ2UmVmcmFjdGlvbkluZm9zIiwgcmVmcmFjdGlvblRleHR1cmUubGV2ZWwsIDEg
LyB0aGlzLl9pbmRleE9mUmVmcmFjdGlvbiwgZGVwdGgsIHRoaXMuX2ludmVydFJlZnJhY3Rpb25Z
ID8gLTEgOiAxKTsKKyAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0Mygi
dlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvcyIsIHJlZnJhY3Rpb25UZXh0dXJlLmdldFNpemUo
KS53aWR0aCwgcmVmcmFjdGlvblRleHR1cmUubG9kR2VuZXJhdGlvblNjYWxlLCByZWZyYWN0aW9u
VGV4dHVyZS5sb2RHZW5lcmF0aW9uT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHVuaWZvcm1CdWZmZXIudXBkYXRlQ29sb3IzKCJ2RGlmZnVzaW9uRGlzdGFuY2UiLCB0aGlzLmRp
ZmZ1c2lvbkRpc3RhbmNlKTsKKyAgICAgICAgICAgIHVuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQ0
KCJ2VGludENvbG9yIiwgdGhpcy50aW50Q29sb3IuciwgdGhpcy50aW50Q29sb3IuZywgdGhpcy50
aW50Q29sb3IuYiwgdGhpcy50aW50Q29sb3JBdERpc3RhbmNlKTsKKyAgICAgICAgICAgIHVuaWZv
cm1CdWZmZXIudXBkYXRlRmxvYXQzKCJ2U3ViU3VyZmFjZUludGVuc2l0eSIsIHRoaXMucmVmcmFj
dGlvbkludGVuc2l0eSwgdGhpcy50cmFuc2x1Y2VuY3lJbnRlbnNpdHksIHRoaXMuc2NhdHRlcmlu
Z0ludGVuc2l0eSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGV4dHVyZXMKKyAgICAgICAgaWYg
KHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RoaWNrbmVz
c1RleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
TWF0ZXJpYWxGbGFncyJdLlRoaWNrbmVzc1RleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAg
ICAgdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJlKCJ0aGlja25lc3NTYW1wbGVyIiwgdGhpcy5fdGhp
Y2tuZXNzVGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVmcmFjdGlv
blRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
TWF0ZXJpYWxGbGFncyJdLlJlZnJhY3Rpb25UZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAg
ICAgIGlmIChsb2RCYXNlZE1pY3Jvc3VyZmFjZSkgeworICAgICAgICAgICAgICAgICAgICB1bmlm
b3JtQnVmZmVyLnNldFRleHR1cmUoInJlZnJhY3Rpb25TYW1wbGVyIiwgcmVmcmFjdGlvblRleHR1
cmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJlKCJyZWZyYWN0aW9uU2FtcGxlciIs
IHJlZnJhY3Rpb25UZXh0dXJlLl9sb2RUZXh0dXJlTWlkIHx8IHJlZnJhY3Rpb25UZXh0dXJlKTsK
KyAgICAgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJlKCJyZWZyYWN0aW9u
U2FtcGxlckxvdyIsIHJlZnJhY3Rpb25UZXh0dXJlLl9sb2RUZXh0dXJlTG93IHx8IHJlZnJhY3Rp
b25UZXh0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJl
KCJyZWZyYWN0aW9uU2FtcGxlckhpZ2giLCByZWZyYWN0aW9uVGV4dHVyZS5fbG9kVGV4dHVyZUhp
Z2ggfHwgcmVmcmFjdGlvblRleHR1cmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogVW5iaW5kcyB0aGUgbWF0ZXJp
YWwgZnJvbSB0aGUgbWVzaC4KKyAgICAgKiBAcGFyYW0gYWN0aXZlRWZmZWN0IGRlZmluZXMgdGhl
IGVmZmVjdCB0aGF0IHNob3VsZCBiZSB1bmJvdW5kIGZyb20uCisgICAgICogQHJldHVybnMgdHJ1
ZSBpZiB1bmJvdW5kLCBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAgICBQQlJTdWJTdXJmYWNl
Q29uZmlndXJhdGlvbi5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gKGFjdGl2ZUVmZmVjdCkg
eworICAgICAgICBpZiAodGhpcy5fcmVmcmFjdGlvblRleHR1cmUgJiYgdGhpcy5fcmVmcmFjdGlv
blRleHR1cmUuaXNSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIGFjdGl2ZUVmZmVjdC5zZXRU
ZXh0dXJlKCJyZWZyYWN0aW9uU2FtcGxlciIsIG51bGwpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmV0dXJucyB0aGUgdGV4dHVyZSB1c2VkIGZvciByZWZyYWN0aW9uIG9yIG51bGwgaWYg
bm9uZSBpcyB1c2VkLgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGUg
bWF0ZXJpYWwgYmVsb25ncyB0by4KKyAgICAgKiBAcmV0dXJucyAtIFJlZnJhY3Rpb24gdGV4dHVy
ZSBpZiBwcmVzZW50LiAgSWYgbm8gcmVmcmFjdGlvbiB0ZXh0dXJlIGFuZCByZWZyYWN0aW9uCisg
ICAgICogaXMgbGlua2VkIHdpdGggdHJhbnNwYXJlbmN5LCByZXR1cm5zIGVudmlyb25tZW50IHRl
eHR1cmUuICBPdGhlcndpc2UsIHJldHVybnMgbnVsbC4KKyAgICAgKi8KKyAgICBQQlJTdWJTdXJm
YWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuX2dldFJlZnJhY3Rpb25UZXh0dXJlID0gZnVuY3Rp
b24gKHNjZW5lKSB7CisgICAgICAgIGlmICh0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZSkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlOworICAgICAgICB9CisgICAg
ICAgIGlmICh0aGlzLl9pc1JlZnJhY3Rpb25FbmFibGVkKSB7CisgICAgICAgICAgICByZXR1cm4g
c2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxs
OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBCUlN1YlN1cmZhY2VDb25maWd1
cmF0aW9uLnByb3RvdHlwZSwgImRpc2FibGVBbHBoYUJsZW5kaW5nIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogUmV0dXJucyB0cnVlIGlmIGFscGhhIGJsZW5kaW5nIHNob3VsZCBiZSBkaXNh
YmxlZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuaXNSZWZyYWN0aW9uRW5hYmxlZCAmJiB0aGlzLl9saW5rUmVmcmFjdGlv
bldpdGhUcmFuc3BhcmVuY3k7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEZp
bGxzIHRoZSBsaXN0IG9mIHJlbmRlciB0YXJnZXQgdGV4dHVyZXMuCisgICAgICogQHBhcmFtIHJl
bmRlclRhcmdldHMgdGhlIGxpc3Qgb2YgcmVuZGVyIHRhcmdldHMgdG8gdXBkYXRlCisgICAgICov
CisgICAgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmZpbGxSZW5kZXJUYXJn
ZXRUZXh0dXJlcyA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXRzKSB7CisgICAgICAgIGlmIChfbWF0
ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0u
UmVmcmFjdGlvblRleHR1cmVFbmFibGVkICYmIHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlICYmIHRo
aXMuX3JlZnJhY3Rpb25UZXh0dXJlLmlzUmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICByZW5k
ZXJUYXJnZXRzLnB1c2godGhpcy5fcmVmcmFjdGlvblRleHR1cmUpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdG8gc2VlIGlmIGEgdGV4dHVyZSBpcyB1c2VkIGlu
IHRoZSBtYXRlcmlhbC4KKyAgICAgKiBAcGFyYW0gdGV4dHVyZSAtIEJhc2UgdGV4dHVyZSB0byB1
c2UuCisgICAgICogQHJldHVybnMgLSBCb29sZWFuIHNwZWNpZnlpbmcgaWYgYSB0ZXh0dXJlIGlz
IHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAgICAqLworICAgIFBCUlN1YlN1cmZhY2VDb25maWd1
cmF0aW9uLnByb3RvdHlwZS5oYXNUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAgICAg
ICAgaWYgKHRoaXMuX3RoaWNrbmVzc1RleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9yZWZyYWN0aW9uVGV4
dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGJv
b2xlYW4gaW5kaWNhdGluZyB0aGF0IGN1cnJlbnQgbWF0ZXJpYWwgbmVlZHMgdG8gcmVnaXN0ZXIg
UlRUCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGlzIHVzZXMgYSByZW5kZXIgdGFyZ2V0IG90
aGVyd2lzZSBmYWxzZS4KKyAgICAgKi8KKyAgICBQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi5w
cm90b3R5cGUuaGFzUmVuZGVyVGFyZ2V0VGV4dHVyZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmIChfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlh
bEZsYWdzIl0uUmVmcmFjdGlvblRleHR1cmVFbmFibGVkICYmIHRoaXMuX3JlZnJhY3Rpb25UZXh0
dXJlICYmIHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlLmlzUmVuZGVyVGFyZ2V0KSB7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBhY3RpdmVseSB1c2Vk
IHRleHR1cmVzLgorICAgICAqIEBwYXJhbSBhY3RpdmVUZXh0dXJlcyBBcnJheSBvZiBCYXNlVGV4
dHVyZXMKKyAgICAgKi8KKyAgICBQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUu
Z2V0QWN0aXZlVGV4dHVyZXMgPSBmdW5jdGlvbiAoYWN0aXZlVGV4dHVyZXMpIHsKKyAgICAgICAg
aWYgKHRoaXMuX3RoaWNrbmVzc1RleHR1cmUpIHsKKyAgICAgICAgICAgIGFjdGl2ZVRleHR1cmVz
LnB1c2godGhpcy5fdGhpY2tuZXNzVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX3JlZnJhY3Rpb25UZXh0dXJlKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNo
KHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogUmV0dXJucyB0aGUgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAgICAgKiBAcGFyYW0gYW5p
bWF0YWJsZXMgQXJyYXkgb2YgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAgICAgKi8KKyAgICBQQlJT
dWJTdXJmYWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuZ2V0QW5pbWF0YWJsZXMgPSBmdW5jdGlv
biAoYW5pbWF0YWJsZXMpIHsKKyAgICAgICAgaWYgKHRoaXMuX3RoaWNrbmVzc1RleHR1cmUgJiYg
dGhpcy5fdGhpY2tuZXNzVGV4dHVyZS5hbmltYXRpb25zICYmIHRoaXMuX3RoaWNrbmVzc1RleHR1
cmUuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBhbmltYXRhYmxlcy5wdXNo
KHRoaXMuX3RoaWNrbmVzc1RleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9y
ZWZyYWN0aW9uVGV4dHVyZSAmJiB0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZS5hbmltYXRpb25zICYm
IHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAg
ICAgICAgYW5pbWF0YWJsZXMucHVzaCh0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZSk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSByZXNvdXJjZXMgb2YgdGhl
IG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBmb3JjZURpc3Bvc2VUZXh0dXJlcyAtIEZvcmNlcyB0
aGUgZGlzcG9zYWwgb2YgYWxsIHRleHR1cmVzLgorICAgICAqLworICAgIFBCUlN1YlN1cmZhY2VD
b25maWd1cmF0aW9uLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGZvcmNlRGlzcG9zZVRl
eHR1cmVzKSB7CisgICAgICAgIGlmIChmb3JjZURpc3Bvc2VUZXh0dXJlcykgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX3RoaWNrbmVzc1RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90
aGlja25lc3NUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICh0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJh
Y3Rpb25UZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgKiBHZXQgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZSBvZiB0aGUgdGV4dHVy
ZSB1c2VmdWwgZm9yIHNlcmlhbGl6YXRpb24gb3IgZHluYW1pYyBjb2RpbmcuCisgICAgKiBAcmV0
dXJucyAiUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24iCisgICAgKi8KKyAgICBQQlJTdWJTdXJm
YWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gIlBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uIjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEFkZCBmYWxsYmFja3MgdG8gdGhlIGVmZmVjdCBmYWxsYmFja3MgbGlzdC4K
KyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBCYXNlIHRleHR1cmUgdG8gdXNlLgor
ICAgICAqIEBwYXJhbSBmYWxsYmFja3MgZGVmaW5lcyB0aGUgY3VycmVudCBmYWxsYmFjayBsaXN0
LgorICAgICAqIEBwYXJhbSBjdXJyZW50UmFuayBkZWZpbmVzIHRoZSBjdXJyZW50IGZhbGxiYWNr
IHJhbmsuCisgICAgICogQHJldHVybnMgdGhlIG5ldyBmYWxsYmFjayByYW5rLgorICAgICAqLwor
ICAgIFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLkFkZEZhbGxiYWNrcyA9IGZ1bmN0aW9uIChk
ZWZpbmVzLCBmYWxsYmFja3MsIGN1cnJlbnRSYW5rKSB7CisgICAgICAgIGlmIChkZWZpbmVzLlNT
X1NDQVRFUlJJTkcpIHsKKyAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjayhjdXJyZW50
UmFuaysrLCAiU1NfU0NBVEVSUklORyIpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVz
LlNTX1RSQU5TTFVDRU5DWSkgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGN1
cnJlbnRSYW5rKyssICJTU19UUkFOU0xVQ0VOQ1kiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gY3VycmVudFJhbms7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgdGhlIHJlcXVpcmVk
IHVuaWZvcm1zIHRvIHRoZSBjdXJyZW50IGxpc3QuCisgICAgICogQHBhcmFtIHVuaWZvcm1zIGRl
ZmluZXMgdGhlIGN1cnJlbnQgdW5pZm9ybSBsaXN0LgorICAgICAqLworICAgIFBCUlN1YlN1cmZh
Y2VDb25maWd1cmF0aW9uLkFkZFVuaWZvcm1zID0gZnVuY3Rpb24gKHVuaWZvcm1zKSB7CisgICAg
ICAgIHVuaWZvcm1zLnB1c2goInZEaWZmdXNpb25EaXN0YW5jZSIsICJ2VGludENvbG9yIiwgInZT
dWJTdXJmYWNlSW50ZW5zaXR5IiwgInZSZWZyYWN0aW9uTWljcm9zdXJmYWNlSW5mb3MiLCAidlJl
ZnJhY3Rpb25JbmZvcyIsICJ2VGhpY2tuZXNzSW5mb3MiLCAidlRoaWNrbmVzc1BhcmFtIiwgInJl
ZnJhY3Rpb25NYXRyaXgiLCAidGhpY2tuZXNzTWF0cml4Iik7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGQgdGhlIHJlcXVpcmVkIHNhbXBsZXJzIHRvIHRoZSBjdXJyZW50IGxpc3QuCisgICAg
ICogQHBhcmFtIHNhbXBsZXJzIGRlZmluZXMgdGhlIGN1cnJlbnQgc2FtcGxlciBsaXN0LgorICAg
ICAqLworICAgIFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLkFkZFNhbXBsZXJzID0gZnVuY3Rp
b24gKHNhbXBsZXJzKSB7CisgICAgICAgIHNhbXBsZXJzLnB1c2goInRoaWNrbmVzc1NhbXBsZXIi
LCAicmVmcmFjdGlvblNhbXBsZXIiLCAicmVmcmFjdGlvblNhbXBsZXJMb3ciLCAicmVmcmFjdGlv
blNhbXBsZXJIaWdoIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgdGhlIHJlcXVpcmVk
IHVuaWZvcm1zIHRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybUJ1
ZmZlciBkZWZpbmVzIHRoZSBjdXJyZW50IHVuaWZvcm0gYnVmZmVyLgorICAgICAqLworICAgIFBC
UlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLlByZXBhcmVVbmlmb3JtQnVmZmVyID0gZnVuY3Rpb24g
KHVuaWZvcm1CdWZmZXIpIHsKKyAgICAgICAgdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2UmVm
cmFjdGlvbk1pY3Jvc3VyZmFjZUluZm9zIiwgMyk7CisgICAgICAgIHVuaWZvcm1CdWZmZXIuYWRk
VW5pZm9ybSgidlJlZnJhY3Rpb25JbmZvcyIsIDQpOworICAgICAgICB1bmlmb3JtQnVmZmVyLmFk
ZFVuaWZvcm0oInJlZnJhY3Rpb25NYXRyaXgiLCAxNik7CisgICAgICAgIHVuaWZvcm1CdWZmZXIu
YWRkVW5pZm9ybSgidlRoaWNrbmVzc0luZm9zIiwgMik7CisgICAgICAgIHVuaWZvcm1CdWZmZXIu
YWRkVW5pZm9ybSgidGhpY2tuZXNzTWF0cml4IiwgMTYpOworICAgICAgICB1bmlmb3JtQnVmZmVy
LmFkZFVuaWZvcm0oInZUaGlja25lc3NQYXJhbSIsIDIpOworICAgICAgICB1bmlmb3JtQnVmZmVy
LmFkZFVuaWZvcm0oInZEaWZmdXNpb25EaXN0YW5jZSIsIDMpOworICAgICAgICB1bmlmb3JtQnVm
ZmVyLmFkZFVuaWZvcm0oInZUaW50Q29sb3IiLCA0KTsKKyAgICAgICAgdW5pZm9ybUJ1ZmZlci5h
ZGRVbmlmb3JtKCJ2U3ViU3VyZmFjZUludGVuc2l0eSIsIDMpOworICAgIH07CisgICAgLyoqCisg
ICAgICogTWFrZXMgYSBkdXBsaWNhdGUgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpbnRv
IGFub3RoZXIgb25lLgorICAgICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIGRlZmluZSB0aGUgY29u
ZmlnIHdoZXJlIHRvIGNvcHkgdGhlIGluZm8KKyAgICAgKi8KKyAgICBQQlJTdWJTdXJmYWNlQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUuY29weVRvID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgICAgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
ZXJpYWxpemF0aW9uSGVscGVyIl0uQ2xvbmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlndXJh
dGlvbjsgfSwgdGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoaXMg
U3ViIFN1cmZhY2UgY29uZmlndXJhdGlvbi4KKyAgICAgKiBAcmV0dXJucyAtIEFuIG9iamVjdCB3
aXRoIHRoZSBzZXJpYWxpemVkIGNvbmZpZy4KKyAgICAgKi8KKyAgICBQQlJTdWJTdXJmYWNlQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJp
YWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXplKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAg
ICogUGFyc2VzIGEgYW5pc290cm9weSBDb25maWd1cmF0aW9uIGZyb20gYSBzZXJpYWxpemVkIG9i
amVjdC4KKyAgICAgKiBAcGFyYW0gc291cmNlIC0gU2VyaWFsaXplZCBvYmplY3QuCisgICAgICog
QHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHdlIGFyZSBwYXJzaW5nIGZvcgorICAgICAq
IEBwYXJhbSByb290VXJsIERlZmluZXMgdGhlIHJvb3RVcmwgdG8gbG9hZCBmcm9tCisgICAgICov
CisgICAgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rp
b24gKHNvdXJjZSwgc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
ZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXM7IH0s
IHNvdXJjZSwgc2NlbmUsIHJvb3RVcmwpOworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5
IikKKyAgICBdLCBQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJpc1JlZnJh
Y3Rpb25FbmFibGVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5k
VG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0s
IFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgImlzVHJhbnNsdWNlbmN5RW5h
YmxlZCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBQQlJTdWJTdXJmYWNl
Q29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJyZWZyYWN0aW9uSW50ZW5zaXR5Iiwgdm9pZCAwKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLnBy
b3RvdHlwZSwgInRyYW5zbHVjZW5jeUludGVuc2l0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJzY2F0
dGVyaW5nSW50ZW5zaXR5Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoKSwK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGly
dHkiKQorICAgIF0sIFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgInRoaWNr
bmVzc1RleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgpLAorICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIp
CisgICAgXSwgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAicmVmcmFjdGlv
blRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1By
b3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJS
U3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiaW5kZXhPZlJlZnJhY3Rpb24iLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJf
bWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSU3ViU3VyZmFjZUNv
bmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiaW52ZXJ0UmVmcmFjdGlvblkiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1l
c2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24u
cHJvdG90eXBlLCAibGlua1JlZnJhY3Rpb25XaXRoVHJhbnNwYXJlbmN5Iiwgdm9pZCAwKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLnByb3Rv
dHlwZSwgIm1pbmltdW1UaGlja25lc3MiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisg
ICAgXSwgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAibWF4aW11bVRoaWNr
bmVzcyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNDb2xvcjMiXSkoKQorICAgIF0sIFBCUlN1
YlN1cmZhY2VDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgInRpbnRDb2xvciIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi5wcm90
b3R5cGUsICJ0aW50Q29sb3JBdERpc3RhbmNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0Nv
bG9yMyJdKSgpCisgICAgXSwgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAi
ZGlmZnVzaW9uRGlzdGFuY2UiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAg
ICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJl
eHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisg
ICAgXSwgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAidXNlTWFza0Zyb21U
aGlja25lc3NUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICByZXR1cm4gUEJSU3ViU3VyZmFjZUNvbmZp
Z3VyYXRpb247Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9U
ZXh0dXJlcy9Mb2FkZXJzL2Jhc2lzVGV4dHVyZUxvYWRlci50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NYXRlcmlhbHMvVGV4dHVyZXMvTG9hZGVycy9iYXNpc1RleHR1cmVMb2FkZXIudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBfQmFzaXNUZXh0dXJlTG9hZGVyICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9CYXNpc1RleHR1cmVMb2FkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9CYXNpc1RleHR1cmVMb2FkZXI7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5n
aW5lcy9lbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19iYXNpc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vLi4vTWlzYy9iYXNpcyAqLyAiLi9NaXNjL2Jhc2lzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50
cyIpOworCisKKworLyoqCisgKiBMb2FkZXIgZm9yIC5iYXNpcyBmaWxlIGZvcm1hdAorICovCit2
YXIgX0Jhc2lzVGV4dHVyZUxvYWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICBmdW5jdGlvbiBfQmFzaXNUZXh0dXJlTG9hZGVyKCkgeworICAgICAgICAvKioKKyAgICAgICAg
ICogRGVmaW5lcyB3aGV0aGVyIHRoZSBsb2FkZXIgc3VwcG9ydHMgY2FzY2FkZSBsb2FkaW5nIHRo
ZSBkaWZmZXJlbnQgZmFjZXMuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnN1cHBvcnRDYXNj
YWRlcyA9IHRydWU7CisgICAgfQorICAgIC8qKgorICAgICAqIFRoaXMgcmV0dXJucyBpZiB0aGUg
bG9hZGVyIHN1cHBvcnQgdGhlIGN1cnJlbnQgZmlsZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFy
YW0gZXh0ZW5zaW9uIGRlZmluZXMgdGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlIGJlaW5n
IGxvYWRlZAorICAgICAqIEBwYXJhbSB0ZXh0dXJlRm9ybWF0SW5Vc2UgZGVmaW5lcyB0aGUgY3Vy
cmVudCBjb21wcmVzc2VkIGZvcm1hdCBpbiB1c2UgaXVuIHRoZSBlbmdpbmUKKyAgICAgKiBAcGFy
YW0gZmFsbGJhY2sgZGVmaW5lcyB0aGUgZmFsbGJhY2sgaW50ZXJuYWwgdGV4dHVyZSBpZiBhbnkK
KyAgICAgKiBAcGFyYW0gaXNCYXNlNjQgZGVmaW5lcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIGlzIGVu
Y29kZWQgYXMgYSBiYXNlNjQKKyAgICAgKiBAcGFyYW0gaXNCdWZmZXIgZGVmaW5lcyB3aGV0aGVy
IHRoZSB0ZXh0dXJlIGRhdGEgYXJlIHN0b3JlZCBhcyBhIGJ1ZmZlcgorICAgICAqIEByZXR1cm5z
IHRydWUgaWYgdGhlIGxvYWRlciBjYW4gbG9hZCB0aGUgc3BlY2lmaWVkIGZpbGUKKyAgICAgKi8K
KyAgICBfQmFzaXNUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS5jYW5Mb2FkID0gZnVuY3Rpb24gKGV4
dGVuc2lvbiwgdGV4dHVyZUZvcm1hdEluVXNlLCBmYWxsYmFjaywgaXNCYXNlNjQsIGlzQnVmZmVy
KSB7CisgICAgICAgIHJldHVybiBleHRlbnNpb24uaW5kZXhPZigiLmJhc2lzIikgPT09IDA7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBUcmFuc2Zvcm0gdGhlIHVybCBiZWZvcmUgbG9hZGluZyBp
ZiByZXF1aXJlZC4KKyAgICAgKiBAcGFyYW0gcm9vdFVybCB0aGUgdXJsIG9mIHRoZSB0ZXh0dXJl
CisgICAgICogQHBhcmFtIHRleHR1cmVGb3JtYXRJblVzZSBkZWZpbmVzIHRoZSBjdXJyZW50IGNv
bXByZXNzZWQgZm9ybWF0IGluIHVzZSBpdW4gdGhlIGVuZ2luZQorICAgICAqIEByZXR1cm5zIHRo
ZSB0cmFuc2Zvcm1lZCB0ZXh0dXJlCisgICAgICovCisgICAgX0Jhc2lzVGV4dHVyZUxvYWRlci5w
cm90b3R5cGUudHJhbnNmb3JtVXJsID0gZnVuY3Rpb24gKHJvb3RVcmwsIHRleHR1cmVGb3JtYXRJ
blVzZSkgeworICAgICAgICByZXR1cm4gcm9vdFVybDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEdldHMgdGhlIGZhbGxiYWNrIHVybCBpbiBjYXNlIHRoZSBsb2FkIGZhaWwuIFRoaXMgY2FuIHJl
dHVybiBudWxsIHRvIGFsbG93IHRoZSBkZWZhdWx0IGZhbGxiYWNrIG1lY2FuaXNtIHRvIHdvcmsK
KyAgICAgKiBAcGFyYW0gcm9vdFVybCB0aGUgdXJsIG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBh
cmFtIHRleHR1cmVGb3JtYXRJblVzZSBkZWZpbmVzIHRoZSBjdXJyZW50IGNvbXByZXNzZWQgZm9y
bWF0IGluIHVzZSBpdW4gdGhlIGVuZ2luZQorICAgICAqIEByZXR1cm5zIHRoZSBmYWxsYmFjayB0
ZXh0dXJlCisgICAgICovCisgICAgX0Jhc2lzVGV4dHVyZUxvYWRlci5wcm90b3R5cGUuZ2V0RmFs
bGJhY2tUZXh0dXJlVXJsID0gZnVuY3Rpb24gKHJvb3RVcmwsIHRleHR1cmVGb3JtYXRJblVzZSkg
eworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwbG9hZHMg
dGhlIGN1YmUgdGV4dHVyZSBkYXRhIHRvIHRoZSBXZWJHbCBUZXh0dXJlLiBJdCBoYXMgYWxyZWFk
eSBiZWVuIGJvdW5kLgorICAgICAqIEBwYXJhbSBkYXRhIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGRh
dGEKKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBkZWZpbmVzIHRoZSBCYWJ5bG9uSlMgaW50ZXJuYWwg
dGV4dHVyZQorICAgICAqIEBwYXJhbSBjcmVhdGVQb2x5bm9taWFscyB3aWxsIGJlIHRydWUgaWYg
cG9seW5vbWlhbHMgaGF2ZSBiZWVuIHJlcXVlc3RlZAorICAgICAqIEBwYXJhbSBvbkxvYWQgZGVm
aW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJpZ2dlciBvbmNlIHRoZSB0ZXh0dXJlIGlzIHJlYWR5Cisg
ICAgICogQHBhcmFtIG9uRXJyb3IgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJpZ2dlciBpbiBj
YXNlIG9mIGVycm9yCisgICAgICovCisgICAgX0Jhc2lzVGV4dHVyZUxvYWRlci5wcm90b3R5cGUu
bG9hZEN1YmVEYXRhID0gZnVuY3Rpb24gKGRhdGEsIHRleHR1cmUsIGNyZWF0ZVBvbHlub21pYWxz
LCBvbkxvYWQsIG9uRXJyb3IpIHsKKyAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgY2FwcyA9IHRleHR1
cmUuZ2V0RW5naW5lKCkuZ2V0Q2FwcygpOworICAgICAgICB2YXIgdHJhbnNjb2RlQ29uZmlnID0g
eworICAgICAgICAgICAgc3VwcG9ydGVkQ29tcHJlc3Npb25Gb3JtYXRzOiB7CisgICAgICAgICAg
ICAgICAgZXRjMTogY2Fwcy5ldGMxID8gdHJ1ZSA6IGZhbHNlLAorICAgICAgICAgICAgICAgIHMz
dGM6IGNhcHMuczN0YyA/IHRydWUgOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBwdnJ0YzogY2Fw
cy5wdnJ0YyA/IHRydWUgOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBldGMyOiBjYXBzLmV0YzIg
PyB0cnVlIDogZmFsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgX01pc2Nf
YmFzaXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQmFzaXNUb29scyJdLlRyYW5zY29k
ZUFzeW5jKGRhdGEsIHRyYW5zY29kZUNvbmZpZykudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7Cisg
ICAgICAgICAgICB2YXIgaGFzTWlwbWFwID0gcmVzdWx0LmZpbGVJbmZvLmltYWdlc1swXS5sZXZl
bHMubGVuZ3RoID4gMSAmJiB0ZXh0dXJlLmdlbmVyYXRlTWlwTWFwczsKKyAgICAgICAgICAgIF9N
aXNjX2Jhc2lzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkJhc2lzVG9vbHMiXS5Mb2Fk
VGV4dHVyZUZyb21UcmFuc2NvZGVSZXN1bHQodGV4dHVyZSwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHRleHR1cmUuZ2V0RW5naW5lKCkuX3NldEN1YmVNYXBUZXh0dXJlUGFyYW1zKGhhc01pcG1hcCk7
CisgICAgICAgICAgICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAgICAgICB9KS5jYXRjaChm
dW5jdGlvbiAoZXJyKSB7CisgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJUb29scyJdLldhcm4oIkZhaWxlZCB0byB0cmFuc2NvZGUgQmFzaXMgZmls
ZSwgdHJhbnNjb2RpbmcgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UiKTsKKyAg
ICAgICAgICAgIHRleHR1cmUuaXNSZWFkeSA9IHRydWU7CisgICAgICAgIH0pOworICAgIH07Cisg
ICAgLyoqCisgICAgICogVXBsb2FkcyB0aGUgMkQgdGV4dHVyZSBkYXRhIHRvIHRoZSBXZWJHbCBU
ZXh0dXJlLiBJdCBoYXMgYWxyZWRheSBiZWVuIGJvdW5kIG9uY2UgaW4gdGhlIGNhbGxiYWNrLgor
ICAgICAqIEBwYXJhbSBkYXRhIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFy
YW0gdGV4dHVyZSBkZWZpbmVzIHRoZSBCYWJ5bG9uSlMgaW50ZXJuYWwgdGV4dHVyZQorICAgICAq
IEBwYXJhbSBjYWxsYmFjayBkZWZpbmVzIHRoZSBtZXRob2QgdG8gY2FsbCBvbmNlIHJlYWR5IHRv
IHVwbG9hZAorICAgICAqLworICAgIF9CYXNpc1RleHR1cmVMb2FkZXIucHJvdG90eXBlLmxvYWRE
YXRhID0gZnVuY3Rpb24gKGRhdGEsIHRleHR1cmUsIGNhbGxiYWNrKSB7CisgICAgICAgIHZhciBj
YXBzID0gdGV4dHVyZS5nZXRFbmdpbmUoKS5nZXRDYXBzKCk7CisgICAgICAgIHZhciB0cmFuc2Nv
ZGVDb25maWcgPSB7CisgICAgICAgICAgICBzdXBwb3J0ZWRDb21wcmVzc2lvbkZvcm1hdHM6IHsK
KyAgICAgICAgICAgICAgICBldGMxOiBjYXBzLmV0YzEgPyB0cnVlIDogZmFsc2UsCisgICAgICAg
ICAgICAgICAgczN0YzogY2Fwcy5zM3RjID8gdHJ1ZSA6IGZhbHNlLAorICAgICAgICAgICAgICAg
IHB2cnRjOiBjYXBzLnB2cnRjID8gdHJ1ZSA6IGZhbHNlLAorICAgICAgICAgICAgICAgIGV0YzI6
IGNhcHMuZXRjMiA/IHRydWUgOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAg
ICAgICBfTWlzY19iYXNpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJCYXNpc1Rvb2xz
Il0uVHJhbnNjb2RlQXN5bmMoZGF0YSwgdHJhbnNjb2RlQ29uZmlnKS50aGVuKGZ1bmN0aW9uIChy
ZXN1bHQpIHsKKyAgICAgICAgICAgIHZhciByb290SW1hZ2UgPSByZXN1bHQuZmlsZUluZm8uaW1h
Z2VzWzBdLmxldmVsc1swXTsKKyAgICAgICAgICAgIHZhciBoYXNNaXBtYXAgPSByZXN1bHQuZmls
ZUluZm8uaW1hZ2VzWzBdLmxldmVscy5sZW5ndGggPiAxICYmIHRleHR1cmUuZ2VuZXJhdGVNaXBN
YXBzOworICAgICAgICAgICAgY2FsbGJhY2socm9vdEltYWdlLndpZHRoLCByb290SW1hZ2UuaGVp
Z2h0LCBoYXNNaXBtYXAsIHJlc3VsdC5mb3JtYXQgIT09IC0xLCBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgX01pc2NfYmFzaXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQmFz
aXNUb29scyJdLkxvYWRUZXh0dXJlRnJvbVRyYW5zY29kZVJlc3VsdCh0ZXh0dXJlLCByZXN1bHQp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKKyAg
ICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRvb2xz
Il0uV2FybigiRmFpbGVkIHRvIHRyYW5zY29kZSBCYXNpcyBmaWxlLCB0cmFuc2NvZGluZyBtYXkg
bm90IGJlIHN1cHBvcnRlZCBvbiB0aGlzIGRldmljZSIpOworICAgICAgICAgICAgY2FsbGJhY2so
MCwgMCwgZmFsc2UsIGZhbHNlLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICByZXR1cm4gX0Jhc2lzVGV4dHVyZUxvYWRlcjsKK30oKSk7CisK
Ky8vIFJlZ2lzdGVyIHRoZSBsb2FkZXIuCitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siRW5naW5lIl0uX1RleHR1cmVMb2FkZXJzLnB1c2gobmV3IF9CYXNpc1Rl
eHR1cmVMb2FkZXIoKSk7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0
dXJlcy9Mb2FkZXJzL2Rkc1RleHR1cmVMb2FkZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVy
aWFscy9UZXh0dXJlcy9Mb2FkZXJzL2Rkc1RleHR1cmVMb2FkZXIudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogX0REU1RleHR1cmVMb2FkZXIgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiX0REU1RleHR1cmVMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9ERFNUZXh0dXJlTG9hZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
c3BoZXJpY2FsUG9seW5vbWlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWF0aHMvc3BoZXJpY2FsUG9seW5vbWlhbCAqLyAi
Li9NYXRocy9zcGhlcmljYWxQb2x5bm9taWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2Vu
Z2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2Rkc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlz
Yy9kZHMgKi8gIi4vTWlzYy9kZHMudHMiKTsKKworCisKKy8qKgorICogSW1wbGVtZW50YXRpb24g
b2YgdGhlIEREUyBUZXh0dXJlIExvYWRlci4KKyAqIEBoaWRkZW4KKyAqLwordmFyIF9ERFNUZXh0
dXJlTG9hZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIF9E
RFNUZXh0dXJlTG9hZGVyKCkgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB3ZXRo
ZXIgdGhlIGxvYWRlciBzdXBwb3J0cyBjYXNjYWRlIGxvYWRpbmcgdGhlIGRpZmZlcmVudCBmYWNl
cy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc3VwcG9ydENhc2NhZGVzID0gdHJ1ZTsKKyAg
ICB9CisgICAgLyoqCisgICAgICogVGhpcyByZXR1cm5zIGlmIHRoZSBsb2FkZXIgc3VwcG9ydCB0
aGUgY3VycmVudCBmaWxlIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbSBleHRlbnNpb24gZGVm
aW5lcyB0aGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgYmVpbmcgbG9hZGVkCisgICAgICog
QHBhcmFtIHRleHR1cmVGb3JtYXRJblVzZSBkZWZpbmVzIHRoZSBjdXJyZW50IGNvbXByZXNzZWQg
Zm9ybWF0IGluIHVzZSBpdW4gdGhlIGVuZ2luZQorICAgICAqIEBwYXJhbSBmYWxsYmFjayBkZWZp
bmVzIHRoZSBmYWxsYmFjayBpbnRlcm5hbCB0ZXh0dXJlIGlmIGFueQorICAgICAqIEBwYXJhbSBp
c0Jhc2U2NCBkZWZpbmVzIHdoZXRoZXIgdGhlIHRleHR1cmUgaXMgZW5jb2RlZCBhcyBhIGJhc2U2
NAorICAgICAqIEBwYXJhbSBpc0J1ZmZlciBkZWZpbmVzIHdoZXRoZXIgdGhlIHRleHR1cmUgZGF0
YSBhcmUgc3RvcmVkIGFzIGEgYnVmZmVyCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgbG9h
ZGVyIGNhbiBsb2FkIHRoZSBzcGVjaWZpZWQgZmlsZQorICAgICAqLworICAgIF9ERFNUZXh0dXJl
TG9hZGVyLnByb3RvdHlwZS5jYW5Mb2FkID0gZnVuY3Rpb24gKGV4dGVuc2lvbiwgdGV4dHVyZUZv
cm1hdEluVXNlLCBmYWxsYmFjaywgaXNCYXNlNjQsIGlzQnVmZmVyKSB7CisgICAgICAgIHJldHVy
biBleHRlbnNpb24uaW5kZXhPZigiLmRkcyIpID09PSAwOworICAgIH07CisgICAgLyoqCisgICAg
ICogVHJhbnNmb3JtIHRoZSB1cmwgYmVmb3JlIGxvYWRpbmcgaWYgcmVxdWlyZWQuCisgICAgICog
QHBhcmFtIHJvb3RVcmwgdGhlIHVybCBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSB0ZXh0
dXJlRm9ybWF0SW5Vc2UgZGVmaW5lcyB0aGUgY3VycmVudCBjb21wcmVzc2VkIGZvcm1hdCBpbiB1
c2UgaXVuIHRoZSBlbmdpbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgdHJhbnNmb3JtZWQgdGV4dHVy
ZQorICAgICAqLworICAgIF9ERFNUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS50cmFuc2Zvcm1Vcmwg
PSBmdW5jdGlvbiAocm9vdFVybCwgdGV4dHVyZUZvcm1hdEluVXNlKSB7CisgICAgICAgIHJldHVy
biByb290VXJsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZmFsbGJhY2sgdXJs
IGluIGNhc2UgdGhlIGxvYWQgZmFpbC4gVGhpcyBjYW4gcmV0dXJuIG51bGwgdG8gYWxsb3cgdGhl
IGRlZmF1bHQgZmFsbGJhY2sgbWVjYW5pc20gdG8gd29yaworICAgICAqIEBwYXJhbSByb290VXJs
IHRoZSB1cmwgb2YgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gdGV4dHVyZUZvcm1hdEluVXNl
IGRlZmluZXMgdGhlIGN1cnJlbnQgY29tcHJlc3NlZCBmb3JtYXQgaW4gdXNlIGl1biB0aGUgZW5n
aW5lCisgICAgICogQHJldHVybnMgdGhlIGZhbGxiYWNrIHRleHR1cmUKKyAgICAgKi8KKyAgICBf
RERTVGV4dHVyZUxvYWRlci5wcm90b3R5cGUuZ2V0RmFsbGJhY2tUZXh0dXJlVXJsID0gZnVuY3Rp
b24gKHJvb3RVcmwsIHRleHR1cmVGb3JtYXRJblVzZSkgeworICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFVwbG9hZHMgdGhlIGN1YmUgdGV4dHVyZSBkYXRhIHRv
IHRoZSBXZWJHbCBUZXh0dXJlLiBJdCBoYXMgYWxyZWRheSBiZWVuIGJvdW5kLgorICAgICAqIEBw
YXJhbSBkYXRhIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFyYW0gdGV4dHVy
ZSBkZWZpbmVzIHRoZSBCYWJ5bG9uSlMgaW50ZXJuYWwgdGV4dHVyZQorICAgICAqIEBwYXJhbSBj
cmVhdGVQb2x5bm9taWFscyB3aWxsIGJlIHRydWUgaWYgcG9seW5vbWlhbHMgaGF2ZSBiZWVuIHJl
cXVlc3RlZAorICAgICAqIEBwYXJhbSBvbkxvYWQgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJp
Z2dlciBvbmNlIHRoZSB0ZXh0dXJlIGlzIHJlYWR5CisgICAgICogQHBhcmFtIG9uRXJyb3IgZGVm
aW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJpZ2dlciBpbiBjYXNlIG9mIGVycm9yCisgICAgICovCisg
ICAgX0REU1RleHR1cmVMb2FkZXIucHJvdG90eXBlLmxvYWRDdWJlRGF0YSA9IGZ1bmN0aW9uIChp
bWdzLCB0ZXh0dXJlLCBjcmVhdGVQb2x5bm9taWFscywgb25Mb2FkLCBvbkVycm9yKSB7CisgICAg
ICAgIHZhciBlbmdpbmUgPSB0ZXh0dXJlLmdldEVuZ2luZSgpOworICAgICAgICB2YXIgaW5mbzsK
KyAgICAgICAgdmFyIGxvYWRNaXBtYXAgPSBmYWxzZTsKKyAgICAgICAgaWYgKEFycmF5LmlzQXJy
YXkoaW1ncykpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBpbWdz
Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBkYXRhXzEgPSBpbWdzW2lu
ZGV4XTsKKyAgICAgICAgICAgICAgICBpbmZvID0gX01pc2NfZGRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkREU1Rvb2xzIl0uR2V0RERTSW5mbyhkYXRhXzEpOworICAgICAgICAgICAg
ICAgIHRleHR1cmUud2lkdGggPSBpbmZvLndpZHRoOworICAgICAgICAgICAgICAgIHRleHR1cmUu
aGVpZ2h0ID0gaW5mby5oZWlnaHQ7CisgICAgICAgICAgICAgICAgbG9hZE1pcG1hcCA9IChpbmZv
LmlzUkdCIHx8IGluZm8uaXNMdW1pbmFuY2UgfHwgaW5mby5taXBtYXBDb3VudCA+IDEpICYmIHRl
eHR1cmUuZ2VuZXJhdGVNaXBNYXBzOworICAgICAgICAgICAgICAgIGVuZ2luZS5fdW5wYWNrRmxp
cFkoaW5mby5pc0NvbXByZXNzZWQpOworICAgICAgICAgICAgICAgIF9NaXNjX2Rkc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJERFNUb29scyJdLlVwbG9hZEREU0xldmVscyhlbmdpbmUs
IHRleHR1cmUsIGRhdGFfMSwgaW5mbywgbG9hZE1pcG1hcCwgNiwgLTEsIGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWluZm8uaXNGb3VyQ0MgJiYgaW5mby5taXBtYXBDb3VudCA9PT0gMSkg
eworICAgICAgICAgICAgICAgICAgICBlbmdpbmUuZ2VuZXJhdGVNaXBNYXBzRm9yQ3ViZW1hcCh0
ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgZGF0YSA9IGltZ3M7CisgICAgICAgICAgICBp
bmZvID0gX01pc2NfZGRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkREU1Rvb2xzIl0u
R2V0RERTSW5mbyhkYXRhKTsKKyAgICAgICAgICAgIHRleHR1cmUud2lkdGggPSBpbmZvLndpZHRo
OworICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBpbmZvLmhlaWdodDsKKyAgICAgICAgICAg
IGlmIChjcmVhdGVQb2x5bm9taWFscykgeworICAgICAgICAgICAgICAgIGluZm8uc3BoZXJpY2Fs
UG9seW5vbWlhbCA9IG5ldyBfTWF0aHNfc3BoZXJpY2FsUG9seW5vbWlhbF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJTcGhlcmljYWxQb2x5bm9taWFsIl0oKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGxvYWRNaXBtYXAgPSAoaW5mby5pc1JHQiB8fCBpbmZvLmlzTHVtaW5hbmNl
IHx8IGluZm8ubWlwbWFwQ291bnQgPiAxKSAmJiB0ZXh0dXJlLmdlbmVyYXRlTWlwTWFwczsKKyAg
ICAgICAgICAgIGVuZ2luZS5fdW5wYWNrRmxpcFkoaW5mby5pc0NvbXByZXNzZWQpOworICAgICAg
ICAgICAgX01pc2NfZGRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkREU1Rvb2xzIl0u
VXBsb2FkRERTTGV2ZWxzKGVuZ2luZSwgdGV4dHVyZSwgZGF0YSwgaW5mbywgbG9hZE1pcG1hcCwg
Nik7CisgICAgICAgICAgICBpZiAoIWluZm8uaXNGb3VyQ0MgJiYgaW5mby5taXBtYXBDb3VudCA9
PT0gMSkgeworICAgICAgICAgICAgICAgIGVuZ2luZS5nZW5lcmF0ZU1pcE1hcHNGb3JDdWJlbWFw
KHRleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVuZ2luZS5fc2V0
Q3ViZU1hcFRleHR1cmVQYXJhbXMobG9hZE1pcG1hcCk7CisgICAgICAgIHRleHR1cmUuaXNSZWFk
eSA9IHRydWU7CisgICAgICAgIGlmIChvbkxvYWQpIHsKKyAgICAgICAgICAgIG9uTG9hZCh7IGlz
RERTOiB0cnVlLCB3aWR0aDogdGV4dHVyZS53aWR0aCwgaW5mbzogaW5mbywgZGF0YTogaW1ncywg
dGV4dHVyZTogdGV4dHVyZSB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
VXBsb2FkcyB0aGUgMkQgdGV4dHVyZSBkYXRhIHRvIHRoZSBXZWJHbCBUZXh0dXJlLiBJdCBoYXMg
YWxyZWRheSBiZWVuIGJvdW5kIG9uY2UgaW4gdGhlIGNhbGxiYWNrLgorICAgICAqIEBwYXJhbSBk
YXRhIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBkZWZp
bmVzIHRoZSBCYWJ5bG9uSlMgaW50ZXJuYWwgdGV4dHVyZQorICAgICAqIEBwYXJhbSBjYWxsYmFj
ayBkZWZpbmVzIHRoZSBtZXRob2QgdG8gY2FsbCBvbmNlIHJlYWR5IHRvIHVwbG9hZAorICAgICAq
LworICAgIF9ERFNUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS5sb2FkRGF0YSA9IGZ1bmN0aW9uIChk
YXRhLCB0ZXh0dXJlLCBjYWxsYmFjaykgeworICAgICAgICB2YXIgaW5mbyA9IF9NaXNjX2Rkc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJERFNUb29scyJdLkdldEREU0luZm8oZGF0YSk7
CisgICAgICAgIHZhciBsb2FkTWlwbWFwID0gKGluZm8uaXNSR0IgfHwgaW5mby5pc0x1bWluYW5j
ZSB8fCBpbmZvLm1pcG1hcENvdW50ID4gMSkgJiYgdGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMgJiYg
KChpbmZvLndpZHRoID4+IChpbmZvLm1pcG1hcENvdW50IC0gMSkpID09PSAxKTsKKyAgICAgICAg
Y2FsbGJhY2soaW5mby53aWR0aCwgaW5mby5oZWlnaHQsIGxvYWRNaXBtYXAsIGluZm8uaXNGb3Vy
Q0MsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF9NaXNjX2Rkc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJERFNUb29scyJdLlVwbG9hZEREU0xldmVscyh0ZXh0dXJlLmdldEVuZ2lu
ZSgpLCB0ZXh0dXJlLCBkYXRhLCBpbmZvLCBsb2FkTWlwbWFwLCAxKTsKKyAgICAgICAgfSk7Cisg
ICAgfTsKKyAgICByZXR1cm4gX0REU1RleHR1cmVMb2FkZXI7Cit9KCkpOworCisvLyBSZWdpc3Rl
ciB0aGUgbG9hZGVyLgorX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkVuZ2luZSJdLl9UZXh0dXJlTG9hZGVycy5wdXNoKG5ldyBfRERTVGV4dHVyZUxvYWRlcigp
KTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL0xvYWRlcnMv
ZW52VGV4dHVyZUxvYWRlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL1RleHR1cmVz
L0xvYWRlcnMvZW52VGV4dHVyZUxvYWRlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBfRU5WVGV4dHVyZUxvYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJfRU5WVGV4dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0VOVlRleHR1cmVM
b2FkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2Vudmlyb25tZW50VGV4
dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi8uLi9NaXNjL2Vudmlyb25tZW50VGV4dHVyZVRvb2xzICovICIuL01pc2Mv
ZW52aXJvbm1lbnRUZXh0dXJlVG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uLy4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5l
LnRzIik7CisKKworLyoqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRU5WIFRleHR1cmUgTG9h
ZGVyLgorICogQGhpZGRlbgorICovCit2YXIgX0VOVlRleHR1cmVMb2FkZXIgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gX0VOVlRleHR1cmVMb2FkZXIoKSB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHdldGhlciB0aGUgbG9hZGVyIHN1cHBvcnRz
IGNhc2NhZGUgbG9hZGluZyB0aGUgZGlmZmVyZW50IGZhY2VzLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5zdXBwb3J0Q2FzY2FkZXMgPSBmYWxzZTsKKyAgICB9CisgICAgLyoqCisgICAgICog
VGhpcyByZXR1cm5zIGlmIHRoZSBsb2FkZXIgc3VwcG9ydCB0aGUgY3VycmVudCBmaWxlIGluZm9y
bWF0aW9uLgorICAgICAqIEBwYXJhbSBleHRlbnNpb24gZGVmaW5lcyB0aGUgZmlsZSBleHRlbnNp
b24gb2YgdGhlIGZpbGUgYmVpbmcgbG9hZGVkCisgICAgICogQHBhcmFtIHRleHR1cmVGb3JtYXRJ
blVzZSBkZWZpbmVzIHRoZSBjdXJyZW50IGNvbXByZXNzZWQgZm9ybWF0IGluIHVzZSBpdW4gdGhl
IGVuZ2luZQorICAgICAqIEBwYXJhbSBmYWxsYmFjayBkZWZpbmVzIHRoZSBmYWxsYmFjayBpbnRl
cm5hbCB0ZXh0dXJlIGlmIGFueQorICAgICAqIEBwYXJhbSBpc0Jhc2U2NCBkZWZpbmVzIHdoZXRo
ZXIgdGhlIHRleHR1cmUgaXMgZW5jb2RlZCBhcyBhIGJhc2U2NAorICAgICAqIEBwYXJhbSBpc0J1
ZmZlciBkZWZpbmVzIHdoZXRoZXIgdGhlIHRleHR1cmUgZGF0YSBhcmUgc3RvcmVkIGFzIGEgYnVm
ZmVyCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgbG9hZGVyIGNhbiBsb2FkIHRoZSBzcGVj
aWZpZWQgZmlsZQorICAgICAqLworICAgIF9FTlZUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS5jYW5M
b2FkID0gZnVuY3Rpb24gKGV4dGVuc2lvbiwgdGV4dHVyZUZvcm1hdEluVXNlLCBmYWxsYmFjaywg
aXNCYXNlNjQsIGlzQnVmZmVyKSB7CisgICAgICAgIHJldHVybiBleHRlbnNpb24uaW5kZXhPZigi
LmVudiIpID09PSAwOworICAgIH07CisgICAgLyoqCisgICAgICogVHJhbnNmb3JtIHRoZSB1cmwg
YmVmb3JlIGxvYWRpbmcgaWYgcmVxdWlyZWQuCisgICAgICogQHBhcmFtIHJvb3RVcmwgdGhlIHVy
bCBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSB0ZXh0dXJlRm9ybWF0SW5Vc2UgZGVmaW5l
cyB0aGUgY3VycmVudCBjb21wcmVzc2VkIGZvcm1hdCBpbiB1c2UgaXVuIHRoZSBlbmdpbmUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgdHJhbnNmb3JtZWQgdGV4dHVyZQorICAgICAqLworICAgIF9FTlZU
ZXh0dXJlTG9hZGVyLnByb3RvdHlwZS50cmFuc2Zvcm1VcmwgPSBmdW5jdGlvbiAocm9vdFVybCwg
dGV4dHVyZUZvcm1hdEluVXNlKSB7CisgICAgICAgIHJldHVybiByb290VXJsOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgZmFsbGJhY2sgdXJsIGluIGNhc2UgdGhlIGxvYWQgZmFp
bC4gVGhpcyBjYW4gcmV0dXJuIG51bGwgdG8gYWxsb3cgdGhlIGRlZmF1bHQgZmFsbGJhY2sgbWVj
YW5pc20gdG8gd29yaworICAgICAqIEBwYXJhbSByb290VXJsIHRoZSB1cmwgb2YgdGhlIHRleHR1
cmUKKyAgICAgKiBAcGFyYW0gdGV4dHVyZUZvcm1hdEluVXNlIGRlZmluZXMgdGhlIGN1cnJlbnQg
Y29tcHJlc3NlZCBmb3JtYXQgaW4gdXNlIGl1biB0aGUgZW5naW5lCisgICAgICogQHJldHVybnMg
dGhlIGZhbGxiYWNrIHRleHR1cmUKKyAgICAgKi8KKyAgICBfRU5WVGV4dHVyZUxvYWRlci5wcm90
b3R5cGUuZ2V0RmFsbGJhY2tUZXh0dXJlVXJsID0gZnVuY3Rpb24gKHJvb3RVcmwsIHRleHR1cmVG
b3JtYXRJblVzZSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFVwbG9hZHMgdGhlIGN1YmUgdGV4dHVyZSBkYXRhIHRvIHRoZSBXZWJHbCBUZXh0dXJlLiBJ
dCBoYXMgYWxyZWRheSBiZWVuIGJvdW5kLgorICAgICAqIEBwYXJhbSBkYXRhIGNvbnRhaW5zIHRo
ZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBkZWZpbmVzIHRoZSBCYWJ5bG9u
SlMgaW50ZXJuYWwgdGV4dHVyZQorICAgICAqIEBwYXJhbSBjcmVhdGVQb2x5bm9taWFscyB3aWxs
IGJlIHRydWUgaWYgcG9seW5vbWlhbHMgaGF2ZSBiZWVuIHJlcXVlc3RlZAorICAgICAqIEBwYXJh
bSBvbkxvYWQgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJpZ2dlciBvbmNlIHRoZSB0ZXh0dXJl
IGlzIHJlYWR5CisgICAgICogQHBhcmFtIG9uRXJyb3IgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8g
dHJpZ2dlciBpbiBjYXNlIG9mIGVycm9yCisgICAgICovCisgICAgX0VOVlRleHR1cmVMb2FkZXIu
cHJvdG90eXBlLmxvYWRDdWJlRGF0YSA9IGZ1bmN0aW9uIChkYXRhLCB0ZXh0dXJlLCBjcmVhdGVQ
b2x5bm9taWFscywgb25Mb2FkLCBvbkVycm9yKSB7CisgICAgICAgIGlmIChBcnJheS5pc0FycmF5
KGRhdGEpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGF0YSA9
IGRhdGE7CisgICAgICAgIHZhciBpbmZvID0gX01pc2NfZW52aXJvbm1lbnRUZXh0dXJlVG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMiXS5H
ZXRFbnZJbmZvKGRhdGEpOworICAgICAgICBpZiAoaW5mbykgeworICAgICAgICAgICAgdGV4dHVy
ZS53aWR0aCA9IGluZm8ud2lkdGg7CisgICAgICAgICAgICB0ZXh0dXJlLmhlaWdodCA9IGluZm8u
d2lkdGg7CisgICAgICAgICAgICBfTWlzY19lbnZpcm9ubWVudFRleHR1cmVUb29sc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbnZpcm9ubWVudFRleHR1cmVUb29scyJdLlVwbG9hZEVu
dlNwaGVyaWNhbCh0ZXh0dXJlLCBpbmZvKTsKKyAgICAgICAgICAgIF9NaXNjX2Vudmlyb25tZW50
VGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVudmlyb25tZW50VGV4
dHVyZVRvb2xzIl0uVXBsb2FkRW52TGV2ZWxzQXN5bmModGV4dHVyZSwgZGF0YSwgaW5mbykudGhl
bihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBpZiAob25Mb2FkKSB7CisgICAgICAgICAgICAgICAgICAgIG9uTG9h
ZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKG9uRXJyb3IpIHsKKyAgICAgICAgICAgIG9uRXJyb3IoIkNhbiBub3QgcGFy
c2UgdGhlIGVudmlyb25tZW50IGZpbGUiLCBudWxsKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqCisgICAgICogVXBsb2FkcyB0aGUgMkQgdGV4dHVyZSBkYXRhIHRvIHRoZSBXZWJHbCBUZXh0
dXJlLiBJdCBoYXMgYWxyZWRheSBiZWVuIGJvdW5kIG9uY2UgaW4gdGhlIGNhbGxiYWNrLgorICAg
ICAqIEBwYXJhbSBkYXRhIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFyYW0g
dGV4dHVyZSBkZWZpbmVzIHRoZSBCYWJ5bG9uSlMgaW50ZXJuYWwgdGV4dHVyZQorICAgICAqIEBw
YXJhbSBjYWxsYmFjayBkZWZpbmVzIHRoZSBtZXRob2QgdG8gY2FsbCBvbmNlIHJlYWR5IHRvIHVw
bG9hZAorICAgICAqLworICAgIF9FTlZUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS5sb2FkRGF0YSA9
IGZ1bmN0aW9uIChkYXRhLCB0ZXh0dXJlLCBjYWxsYmFjaykgeworICAgICAgICB0aHJvdyAiLmVu
diBub3Qgc3VwcG9ydGVkIGluIDJkLiI7CisgICAgfTsKKyAgICByZXR1cm4gX0VOVlRleHR1cmVM
b2FkZXI7Cit9KCkpOworCisvLyBSZWdpc3RlciB0aGUgbG9hZGVyLgorX0VuZ2luZXNfZW5naW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2luZSJdLl9UZXh0dXJlTG9hZGVycy5w
dXNoKG5ldyBfRU5WVGV4dHVyZUxvYWRlcigpKTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWF0ZXJpYWxzL1RleHR1cmVzL0xvYWRlcnMvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvVGV4
dHVyZXMvTG9hZGVycy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogX0REU1RleHR1cmVM
b2FkZXIsIF9FTlZUZXh0dXJlTG9hZGVyLCBfS1RYVGV4dHVyZUxvYWRlciwgX1RHQVRleHR1cmVM
b2FkZXIsIF9CYXNpc1RleHR1cmVMb2FkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9kZHNUZXh0dXJlTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Rkc1RleHR1cmVMb2FkZXIgKi8gIi4v
TWF0ZXJpYWxzL1RleHR1cmVzL0xvYWRlcnMvZGRzVGV4dHVyZUxvYWRlci50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJfRERTVGV4dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Rkc1Rl
eHR1cmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX0REU1RleHR1cmVMb2Fk
ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZW52VGV4dHVyZUxvYWRlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9l
bnZUZXh0dXJlTG9hZGVyICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9Mb2FkZXJzL2VudlRleHR1
cmVMb2FkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0VOVlRleHR1cmVMb2FkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9lbnZUZXh0dXJlTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIl9FTlZUZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2t0eFRleHR1cmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4va3R4VGV4dHVyZUxvYWRlciAqLyAiLi9NYXRlcmlhbHMvVGV4
dHVyZXMvTG9hZGVycy9rdHhUZXh0dXJlTG9hZGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9L
VFhUZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfa3R4VGV4dHVyZUxvYWRlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfS1RYVGV4dHVyZUxvYWRlciJdOyB9KTsKKwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90Z2FUZXh0dXJlTG9hZGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RnYVRleHR1cmVMb2Fk
ZXIgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL0xvYWRlcnMvdGdhVGV4dHVyZUxvYWRlci50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJfVEdBVGV4dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX3RnYVRleHR1cmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siX1RHQVRl
eHR1cmVMb2FkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzaXNUZXh0
dXJlTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2Jhc2lzVGV4dHVyZUxvYWRlciAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvTG9h
ZGVycy9iYXNpc1RleHR1cmVMb2FkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0Jhc2lzVGV4
dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Jhc2lzVGV4dHVyZUxvYWRlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfQmFzaXNUZXh0dXJlTG9hZGVyIl07IH0pOworCisK
KworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvTG9h
ZGVycy9rdHhUZXh0dXJlTG9hZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvVGV4
dHVyZXMvTG9hZGVycy9rdHhUZXh0dXJlTG9hZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IF9LVFhUZXh0dXJlTG9hZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIl9LVFhUZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfS1RYVGV4
dHVyZUxvYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfa2hyb25vc1Rl
eHR1cmVDb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2Mva2hyb25vc1RleHR1cmVDb250YWluZXIgKi8gIi4v
TWlzYy9raHJvbm9zVGV4dHVyZUNvbnRhaW5lci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9l
bmdpbmUudHMiKTsKKworCisvKioKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBLVFggVGV4dHVy
ZSBMb2FkZXIuCisgKiBAaGlkZGVuCisgKi8KK3ZhciBfS1RYVGV4dHVyZUxvYWRlciA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBfS1RYVGV4dHVyZUxvYWRlcigp
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgd2V0aGVyIHRoZSBsb2FkZXIgc3Vw
cG9ydHMgY2FzY2FkZSBsb2FkaW5nIHRoZSBkaWZmZXJlbnQgZmFjZXMuCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLnN1cHBvcnRDYXNjYWRlcyA9IGZhbHNlOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBUaGlzIHJldHVybnMgaWYgdGhlIGxvYWRlciBzdXBwb3J0IHRoZSBjdXJyZW50IGZpbGUg
aW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtIGV4dGVuc2lvbiBkZWZpbmVzIHRoZSBmaWxlIGV4
dGVuc2lvbiBvZiB0aGUgZmlsZSBiZWluZyBsb2FkZWQKKyAgICAgKiBAcGFyYW0gdGV4dHVyZUZv
cm1hdEluVXNlIGRlZmluZXMgdGhlIGN1cnJlbnQgY29tcHJlc3NlZCBmb3JtYXQgaW4gdXNlIGl1
biB0aGUgZW5naW5lCisgICAgICogQHBhcmFtIGZhbGxiYWNrIGRlZmluZXMgdGhlIGZhbGxiYWNr
IGludGVybmFsIHRleHR1cmUgaWYgYW55CisgICAgICogQHBhcmFtIGlzQmFzZTY0IGRlZmluZXMg
d2hldGhlciB0aGUgdGV4dHVyZSBpcyBlbmNvZGVkIGFzIGEgYmFzZTY0CisgICAgICogQHBhcmFt
IGlzQnVmZmVyIGRlZmluZXMgd2hldGhlciB0aGUgdGV4dHVyZSBkYXRhIGFyZSBzdG9yZWQgYXMg
YSBidWZmZXIKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBsb2FkZXIgY2FuIGxvYWQgdGhl
IHNwZWNpZmllZCBmaWxlCisgICAgICovCisgICAgX0tUWFRleHR1cmVMb2FkZXIucHJvdG90eXBl
LmNhbkxvYWQgPSBmdW5jdGlvbiAoZXh0ZW5zaW9uLCB0ZXh0dXJlRm9ybWF0SW5Vc2UsIGZhbGxi
YWNrLCBpc0Jhc2U2NCwgaXNCdWZmZXIpIHsKKyAgICAgICAgaWYgKHRleHR1cmVGb3JtYXRJblVz
ZSAmJiAhaXNCYXNlNjQgJiYgIWZhbGxiYWNrICYmICFpc0J1ZmZlcikgeworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07Cisg
ICAgLyoqCisgICAgICogVHJhbnNmb3JtIHRoZSB1cmwgYmVmb3JlIGxvYWRpbmcgaWYgcmVxdWly
ZWQuCisgICAgICogQHBhcmFtIHJvb3RVcmwgdGhlIHVybCBvZiB0aGUgdGV4dHVyZQorICAgICAq
IEBwYXJhbSB0ZXh0dXJlRm9ybWF0SW5Vc2UgZGVmaW5lcyB0aGUgY3VycmVudCBjb21wcmVzc2Vk
IGZvcm1hdCBpbiB1c2UgaXVuIHRoZSBlbmdpbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgdHJhbnNm
b3JtZWQgdGV4dHVyZQorICAgICAqLworICAgIF9LVFhUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS50
cmFuc2Zvcm1VcmwgPSBmdW5jdGlvbiAocm9vdFVybCwgdGV4dHVyZUZvcm1hdEluVXNlKSB7Cisg
ICAgICAgIHZhciBsYXN0RG90ID0gcm9vdFVybC5sYXN0SW5kZXhPZignLicpOworICAgICAgICBp
ZiAobGFzdERvdCAhPSAtMSAmJiByb290VXJsLnN1YnN0cmluZyhsYXN0RG90ICsgMSkgPT0gImt0
eCIpIHsKKyAgICAgICAgICAgIC8vIEFscmVhZHkgdHJhbnNmb3JtZWQKKyAgICAgICAgICAgIHJl
dHVybiByb290VXJsOworICAgICAgICB9CisgICAgICAgIHJldHVybiAobGFzdERvdCA+IC0xID8g
cm9vdFVybC5zdWJzdHJpbmcoMCwgbGFzdERvdCkgOiByb290VXJsKSArIHRleHR1cmVGb3JtYXRJ
blVzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGZhbGxiYWNrIHVybCBpbiBj
YXNlIHRoZSBsb2FkIGZhaWwuIFRoaXMgY2FuIHJldHVybiBudWxsIHRvIGFsbG93IHRoZSBkZWZh
dWx0IGZhbGxiYWNrIG1lY2FuaXNtIHRvIHdvcmsKKyAgICAgKiBAcGFyYW0gcm9vdFVybCB0aGUg
dXJsIG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIHRleHR1cmVGb3JtYXRJblVzZSBkZWZp
bmVzIHRoZSBjdXJyZW50IGNvbXByZXNzZWQgZm9ybWF0IGluIHVzZSBpdW4gdGhlIGVuZ2luZQor
ICAgICAqIEByZXR1cm5zIHRoZSBmYWxsYmFjayB0ZXh0dXJlCisgICAgICovCisgICAgX0tUWFRl
eHR1cmVMb2FkZXIucHJvdG90eXBlLmdldEZhbGxiYWNrVGV4dHVyZVVybCA9IGZ1bmN0aW9uIChy
b290VXJsLCB0ZXh0dXJlRm9ybWF0SW5Vc2UpIHsKKyAgICAgICAgLy8gcmVtb3ZlIHRoZSBmb3Jt
YXQgYXBwZW5kZWQgdG8gdGhlIHJvb3RVcmwgaW4gdGhlIG9yaWdpbmFsIGNyZWF0ZUN1YmVUZXh0
dXJlIGNhbGwuCisgICAgICAgIHZhciBleHAgPSBuZXcgUmVnRXhwKCIiICsgdGV4dHVyZUZvcm1h
dEluVXNlICsgIiQiKTsKKyAgICAgICAgcmV0dXJuIHJvb3RVcmwucmVwbGFjZShleHAsICIiKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFVwbG9hZHMgdGhlIGN1YmUgdGV4dHVyZSBkYXRhIHRv
IHRoZSBXZWJHbCBUZXh0dXJlLiBJdCBoYXMgYWxyZWRheSBiZWVuIGJvdW5kLgorICAgICAqIEBw
YXJhbSBkYXRhIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFyYW0gdGV4dHVy
ZSBkZWZpbmVzIHRoZSBCYWJ5bG9uSlMgaW50ZXJuYWwgdGV4dHVyZQorICAgICAqIEBwYXJhbSBj
cmVhdGVQb2x5bm9taWFscyB3aWxsIGJlIHRydWUgaWYgcG9seW5vbWlhbHMgaGF2ZSBiZWVuIHJl
cXVlc3RlZAorICAgICAqIEBwYXJhbSBvbkxvYWQgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJp
Z2dlciBvbmNlIHRoZSB0ZXh0dXJlIGlzIHJlYWR5CisgICAgICogQHBhcmFtIG9uRXJyb3IgZGVm
aW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJpZ2dlciBpbiBjYXNlIG9mIGVycm9yCisgICAgICovCisg
ICAgX0tUWFRleHR1cmVMb2FkZXIucHJvdG90eXBlLmxvYWRDdWJlRGF0YSA9IGZ1bmN0aW9uIChk
YXRhLCB0ZXh0dXJlLCBjcmVhdGVQb2x5bm9taWFscywgb25Mb2FkLCBvbkVycm9yKSB7CisgICAg
ICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgLy8gTmVlZCB0byBpbnZlcnQgdlNjYWxlIGFzIGludmVydFkgdmlhIFVO
UEFDS19GTElQX1lfV0VCR0wgaXMgbm90IHN1cHBvcnRlZCBieSBjb21wcmVzc2VkIHRleHR1cmUK
KyAgICAgICAgdGV4dHVyZS5faW52ZXJ0VlNjYWxlID0gIXRleHR1cmUuaW52ZXJ0WTsKKyAgICAg
ICAgdmFyIGVuZ2luZSA9IHRleHR1cmUuZ2V0RW5naW5lKCk7CisgICAgICAgIHZhciBrdHggPSBu
ZXcgX01pc2Nfa2hyb25vc1RleHR1cmVDb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siS2hyb25vc1RleHR1cmVDb250YWluZXIiXShkYXRhLCA2KTsKKyAgICAgICAgdmFyIGxv
YWRNaXBtYXAgPSBrdHgubnVtYmVyT2ZNaXBtYXBMZXZlbHMgPiAxICYmIHRleHR1cmUuZ2VuZXJh
dGVNaXBNYXBzOworICAgICAgICBlbmdpbmUuX3VucGFja0ZsaXBZKHRydWUpOworICAgICAgICBr
dHgudXBsb2FkTGV2ZWxzKHRleHR1cmUsIHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzKTsKKyAgICAg
ICAgdGV4dHVyZS53aWR0aCA9IGt0eC5waXhlbFdpZHRoOworICAgICAgICB0ZXh0dXJlLmhlaWdo
dCA9IGt0eC5waXhlbEhlaWdodDsKKyAgICAgICAgZW5naW5lLl9zZXRDdWJlTWFwVGV4dHVyZVBh
cmFtcyhsb2FkTWlwbWFwKTsKKyAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFVwbG9hZHMgdGhlIDJEIHRleHR1cmUgZGF0YSB0byB0aGUgV2Vi
R2wgVGV4dHVyZS4gSXQgaGFzIGFscmVkYXkgYmVlbiBib3VuZCBvbmNlIGluIHRoZSBjYWxsYmFj
ay4KKyAgICAgKiBAcGFyYW0gZGF0YSBjb250YWlucyB0aGUgdGV4dHVyZSBkYXRhCisgICAgICog
QHBhcmFtIHRleHR1cmUgZGVmaW5lcyB0aGUgQmFieWxvbkpTIGludGVybmFsIHRleHR1cmUKKyAg
ICAgKiBAcGFyYW0gY2FsbGJhY2sgZGVmaW5lcyB0aGUgbWV0aG9kIHRvIGNhbGwgb25jZSByZWFk
eSB0byB1cGxvYWQKKyAgICAgKi8KKyAgICBfS1RYVGV4dHVyZUxvYWRlci5wcm90b3R5cGUubG9h
ZERhdGEgPSBmdW5jdGlvbiAoZGF0YSwgdGV4dHVyZSwgY2FsbGJhY2spIHsKKyAgICAgICAgLy8g
TmVlZCB0byBpbnZlcnQgdlNjYWxlIGFzIGludmVydFkgdmlhIFVOUEFDS19GTElQX1lfV0VCR0wg
aXMgbm90IHN1cHBvcnRlZCBieSBjb21wcmVzc2VkIHRleHR1cmUKKyAgICAgICAgdGV4dHVyZS5f
aW52ZXJ0VlNjYWxlID0gIXRleHR1cmUuaW52ZXJ0WTsKKyAgICAgICAgdmFyIGt0eCA9IG5ldyBf
TWlzY19raHJvbm9zVGV4dHVyZUNvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJLaHJvbm9zVGV4dHVyZUNvbnRhaW5lciJdKGRhdGEsIDEpOworICAgICAgICBjYWxsYmFjayhr
dHgucGl4ZWxXaWR0aCwga3R4LnBpeGVsSGVpZ2h0LCBmYWxzZSwgdHJ1ZSwgZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAga3R4LnVwbG9hZExldmVscyh0ZXh0dXJlLCB0ZXh0dXJlLmdlbmVyYXRl
TWlwTWFwcyk7CisgICAgICAgIH0sIGt0eC5pc0ludmFsaWQpOworICAgIH07CisgICAgcmV0dXJu
IF9LVFhUZXh0dXJlTG9hZGVyOworfSgpKTsKKworLy8gUmVnaXN0ZXIgdGhlIGxvYWRlci4KK19F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5fVGV4
dHVyZUxvYWRlcnMudW5zaGlmdChuZXcgX0tUWFRleHR1cmVMb2FkZXIoKSk7CisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0dXJlcy9Mb2FkZXJzL3RnYVRleHR1cmVMb2Fk
ZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy9Mb2FkZXJzL3RnYVRl
eHR1cmVMb2FkZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogX1RHQVRleHR1
cmVMb2FkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX1RHQVRleHR1
cmVMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UR0FUZXh0dXJlTG9hZGVyOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190Z2FfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdGdhICovICIuL01p
c2MvdGdhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li8uLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworCisKKy8qKgor
ICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFRHQSBUZXh0dXJlIExvYWRlci4KKyAqIEBoaWRkZW4K
KyAqLwordmFyIF9UR0FUZXh0dXJlTG9hZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIGZ1bmN0aW9uIF9UR0FUZXh0dXJlTG9hZGVyKCkgeworICAgICAgICAvKioKKyAgICAg
ICAgICogRGVmaW5lcyB3ZXRoZXIgdGhlIGxvYWRlciBzdXBwb3J0cyBjYXNjYWRlIGxvYWRpbmcg
dGhlIGRpZmZlcmVudCBmYWNlcy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc3VwcG9ydENh
c2NhZGVzID0gZmFsc2U7CisgICAgfQorICAgIC8qKgorICAgICAqIFRoaXMgcmV0dXJucyBpZiB0
aGUgbG9hZGVyIHN1cHBvcnQgdGhlIGN1cnJlbnQgZmlsZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBA
cGFyYW0gZXh0ZW5zaW9uIGRlZmluZXMgdGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlIGJl
aW5nIGxvYWRlZAorICAgICAqIEBwYXJhbSB0ZXh0dXJlRm9ybWF0SW5Vc2UgZGVmaW5lcyB0aGUg
Y3VycmVudCBjb21wcmVzc2VkIGZvcm1hdCBpbiB1c2UgaXVuIHRoZSBlbmdpbmUKKyAgICAgKiBA
cGFyYW0gZmFsbGJhY2sgZGVmaW5lcyB0aGUgZmFsbGJhY2sgaW50ZXJuYWwgdGV4dHVyZSBpZiBh
bnkKKyAgICAgKiBAcGFyYW0gaXNCYXNlNjQgZGVmaW5lcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIGlz
IGVuY29kZWQgYXMgYSBiYXNlNjQKKyAgICAgKiBAcGFyYW0gaXNCdWZmZXIgZGVmaW5lcyB3aGV0
aGVyIHRoZSB0ZXh0dXJlIGRhdGEgYXJlIHN0b3JlZCBhcyBhIGJ1ZmZlcgorICAgICAqIEByZXR1
cm5zIHRydWUgaWYgdGhlIGxvYWRlciBjYW4gbG9hZCB0aGUgc3BlY2lmaWVkIGZpbGUKKyAgICAg
Ki8KKyAgICBfVEdBVGV4dHVyZUxvYWRlci5wcm90b3R5cGUuY2FuTG9hZCA9IGZ1bmN0aW9uIChl
eHRlbnNpb24sIHRleHR1cmVGb3JtYXRJblVzZSwgZmFsbGJhY2ssIGlzQmFzZTY0LCBpc0J1ZmZl
cikgeworICAgICAgICByZXR1cm4gZXh0ZW5zaW9uLmluZGV4T2YoIi50Z2EiKSA9PT0gMDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFRyYW5zZm9ybSB0aGUgdXJsIGJlZm9yZSBsb2FkaW5nIGlm
IHJlcXVpcmVkLgorICAgICAqIEBwYXJhbSByb290VXJsIHRoZSB1cmwgb2YgdGhlIHRleHR1cmUK
KyAgICAgKiBAcGFyYW0gdGV4dHVyZUZvcm1hdEluVXNlIGRlZmluZXMgdGhlIGN1cnJlbnQgY29t
cHJlc3NlZCBmb3JtYXQgaW4gdXNlIGl1biB0aGUgZW5naW5lCisgICAgICogQHJldHVybnMgdGhl
IHRyYW5zZm9ybWVkIHRleHR1cmUKKyAgICAgKi8KKyAgICBfVEdBVGV4dHVyZUxvYWRlci5wcm90
b3R5cGUudHJhbnNmb3JtVXJsID0gZnVuY3Rpb24gKHJvb3RVcmwsIHRleHR1cmVGb3JtYXRJblVz
ZSkgeworICAgICAgICByZXR1cm4gcm9vdFVybDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdl
dHMgdGhlIGZhbGxiYWNrIHVybCBpbiBjYXNlIHRoZSBsb2FkIGZhaWwuIFRoaXMgY2FuIHJldHVy
biBudWxsIHRvIGFsbG93IHRoZSBkZWZhdWx0IGZhbGxiYWNrIG1lY2FuaXNtIHRvIHdvcmsKKyAg
ICAgKiBAcGFyYW0gcm9vdFVybCB0aGUgdXJsIG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFt
IHRleHR1cmVGb3JtYXRJblVzZSBkZWZpbmVzIHRoZSBjdXJyZW50IGNvbXByZXNzZWQgZm9ybWF0
IGluIHVzZSBpdW4gdGhlIGVuZ2luZQorICAgICAqIEByZXR1cm5zIHRoZSBmYWxsYmFjayB0ZXh0
dXJlCisgICAgICovCisgICAgX1RHQVRleHR1cmVMb2FkZXIucHJvdG90eXBlLmdldEZhbGxiYWNr
VGV4dHVyZVVybCA9IGZ1bmN0aW9uIChyb290VXJsLCB0ZXh0dXJlRm9ybWF0SW5Vc2UpIHsKKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGxvYWRzIHRoZSBj
dWJlIHRleHR1cmUgZGF0YSB0byB0aGUgV2ViR2wgVGV4dHVyZS4gSXQgaGFzIGFscmVkYXkgYmVl
biBib3VuZC4KKyAgICAgKiBAcGFyYW0gZGF0YSBjb250YWlucyB0aGUgdGV4dHVyZSBkYXRhCisg
ICAgICogQHBhcmFtIHRleHR1cmUgZGVmaW5lcyB0aGUgQmFieWxvbkpTIGludGVybmFsIHRleHR1
cmUKKyAgICAgKiBAcGFyYW0gY3JlYXRlUG9seW5vbWlhbHMgd2lsbCBiZSB0cnVlIGlmIHBvbHlu
b21pYWxzIGhhdmUgYmVlbiByZXF1ZXN0ZWQKKyAgICAgKiBAcGFyYW0gb25Mb2FkIGRlZmluZXMg
dGhlIGNhbGxiYWNrIHRvIHRyaWdnZXIgb25jZSB0aGUgdGV4dHVyZSBpcyByZWFkeQorICAgICAq
IEBwYXJhbSBvbkVycm9yIGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIHRyaWdnZXIgaW4gY2FzZSBv
ZiBlcnJvcgorICAgICAqLworICAgIF9UR0FUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS5sb2FkQ3Vi
ZURhdGEgPSBmdW5jdGlvbiAoZGF0YSwgdGV4dHVyZSwgY3JlYXRlUG9seW5vbWlhbHMsIG9uTG9h
ZCwgb25FcnJvcikgeworICAgICAgICB0aHJvdyAiLmVudiBub3Qgc3VwcG9ydGVkIGluIEN1YmUu
IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwbG9hZHMgdGhlIDJEIHRleHR1cmUgZGF0YSB0
byB0aGUgV2ViR2wgVGV4dHVyZS4gSXQgaGFzIGFscmVkYXkgYmVlbiBib3VuZCBvbmNlIGluIHRo
ZSBjYWxsYmFjay4KKyAgICAgKiBAcGFyYW0gZGF0YSBjb250YWlucyB0aGUgdGV4dHVyZSBkYXRh
CisgICAgICogQHBhcmFtIHRleHR1cmUgZGVmaW5lcyB0aGUgQmFieWxvbkpTIGludGVybmFsIHRl
eHR1cmUKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgZGVmaW5lcyB0aGUgbWV0aG9kIHRvIGNhbGwg
b25jZSByZWFkeSB0byB1cGxvYWQKKyAgICAgKi8KKyAgICBfVEdBVGV4dHVyZUxvYWRlci5wcm90
b3R5cGUubG9hZERhdGEgPSBmdW5jdGlvbiAoZGF0YSwgdGV4dHVyZSwgY2FsbGJhY2spIHsKKyAg
ICAgICAgdmFyIHVpbnREYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7CisgICAgICAgIHZhciBo
ZWFkZXIgPSBfTWlzY190Z2FfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVEdBVG9vbHMi
XS5HZXRUR0FIZWFkZXIodWludERhdGEpOworICAgICAgICBjYWxsYmFjayhoZWFkZXIud2lkdGgs
IGhlYWRlci5oZWlnaHQsIHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzLCBmYWxzZSwgZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgX01pc2NfdGdhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlRHQVRvb2xzIl0uVXBsb2FkQ29udGVudCh0ZXh0dXJlLCB1aW50RGF0YSk7CisgICAgICAgIH0p
OworICAgIH07CisgICAgcmV0dXJuIF9UR0FUZXh0dXJlTG9hZGVyOworfSgpKTsKKworLy8gUmVn
aXN0ZXIgdGhlIGxvYWRlci4KK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJFbmdpbmUiXS5fVGV4dHVyZUxvYWRlcnMucHVzaChuZXcgX1RHQVRleHR1cmVMb2Fk
ZXIoKSk7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0dXJlcy9NdWx0
aXZpZXdSZW5kZXJUYXJnZXQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy9N
dWx0aXZpZXdSZW5kZXJUYXJnZXQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTXVs
dGl2aWV3UmVuZGVyVGFyZ2V0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
Ik11bHRpdmlld1JlbmRlclRhcmdldCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTXVsdGl2aWV3UmVu
ZGVyVGFyZ2V0OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4u
L25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vVGV4dHVyZXMvcmVuZGVyVGFyZ2V0
VGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1Rl
eHR1cmVzL2ludGVybmFsVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJuYWxU
ZXh0dXJlLnRzIik7CisKKworCisvKioKKyAqIFJlbmRlcnMgdG8gbXVsdGlwbGUgdmlld3Mgd2l0
aCBhIHNpbmdsZSBkcmF3IGNhbGwKKyAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVn
aXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9XRUJHTF9tdWx0aXZpZXcvCisgKi8KK3ZhciBNdWx0aXZp
ZXdSZW5kZXJUYXJnZXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTXVsdGl2aWV3
UmVuZGVyVGFyZ2V0LCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBtdWx0aXZp
ZXcgcmVuZGVyIHRhcmdldAorICAgICAqIEBwYXJhbSBzY2VuZSBzY2VuZSB1c2VkIHdpdGggdGhl
IHJlbmRlciB0YXJnZXQKKyAgICAgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgcmVuZGVy
IHRhcmdldCAodXNlZCBmb3IgZWFjaCB2aWV3KQorICAgICAqLworICAgIGZ1bmN0aW9uIE11bHRp
dmlld1JlbmRlclRhcmdldChzY2VuZSwgc2l6ZSkgeworICAgICAgICBpZiAoc2l6ZSA9PT0gdm9p
ZCAwKSB7IHNpemUgPSA1MTI7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgIm11bHRpdmlldyBydHQiLCBzaXplLCBzY2VuZSwgZmFsc2UsIHRydWUsIF9UZXh0dXJlc19p
bnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siSW50ZXJuYWxUZXh0
dXJlIl0uREFUQVNPVVJDRV9VTktOT1dOLCBmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZSwgZmFsc2Us
IHRydWUsIHVuZGVmaW5lZCwgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgdmFyIGludGVybmFsVGV4
dHVyZSA9IHNjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZU11bHRpdmlld1JlbmRlclRhcmdldFRleHR1
cmUoX3RoaXMuZ2V0UmVuZGVyV2lkdGgoKSwgX3RoaXMuZ2V0UmVuZGVySGVpZ2h0KCkpOworICAg
ICAgICBpbnRlcm5hbFRleHR1cmUuaXNNdWx0aXZpZXcgPSB0cnVlOworICAgICAgICBfdGhpcy5f
dGV4dHVyZSA9IGludGVybmFsVGV4dHVyZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0K
KyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICogQHBhcmFtIGZhY2VJbmRleCB0aGUgZmFj
ZSBpbmRleCwgaWYgaXRzIGEgY3ViZSB0ZXh0dXJlCisgICAgICovCisgICAgTXVsdGl2aWV3UmVu
ZGVyVGFyZ2V0LnByb3RvdHlwZS5fYmluZEZyYW1lQnVmZmVyID0gZnVuY3Rpb24gKGZhY2VJbmRl
eCkgeworICAgICAgICBpZiAoZmFjZUluZGV4ID09PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsg
fQorICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuYmluZE11bHRpdmll
d0ZyYW1lYnVmZmVyKHRoaXMuX3RleHR1cmUpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0
cyB0aGUgbnVtYmVyIG9mIHZpZXdzIHRoZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB0ZXh0dXJlIChl
Zy4gYSBNdWx0aXZpZXdSZW5kZXJUYXJnZXQgd2lsbCBoYXZlID4gMSkKKyAgICAgKiBAcmV0dXJu
cyB0aGUgdmlldyBjb3VudAorICAgICAqLworICAgIE11bHRpdmlld1JlbmRlclRhcmdldC5wcm90
b3R5cGUuZ2V0Vmlld0NvdW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gMjsKKyAg
ICB9OworICAgIHJldHVybiBNdWx0aXZpZXdSZW5kZXJUYXJnZXQ7Cit9KF9UZXh0dXJlc19yZW5k
ZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlJlbmRlclRhcmdl
dFRleHR1cmUiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0
dXJlcy9Qcm9jZWR1cmFscy9jdXN0b21Qcm9jZWR1cmFsVGV4dHVyZS50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvVGV4dHVyZXMvUHJvY2VkdXJhbHMvY3VzdG9tUHJv
Y2VkdXJhbFRleHR1cmUudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
Q3VzdG9tUHJvY2VkdXJhbFRleHR1cmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy9sb2dnZXIgKi8gIi4v
TWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01h
dGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWF0ZXJpYWxz
L1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJvY2VkdXJhbFRleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcHJvY2VkdXJhbFRl
eHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL1Byb2NlZHVyYWxzL3Byb2NlZHVyYWxUZXh0
dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfd2ViUmVxdWVzdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
Li4vTWlzYy93ZWJSZXF1ZXN0ICovICIuL01pc2Mvd2ViUmVxdWVzdC50cyIpOworCisKKworCisK
KworCisvKioKKyAqIFByb2NlZHVyYWwgdGV4dHVyaW5nIGlzIGEgd2F5IHRvIHByb2dyYW1tYXRp
Y2FsbHkgY3JlYXRlIGEgdGV4dHVyZS4gVGhlcmUgYXJlIDIgdHlwZXMgb2YgcHJvY2VkdXJhbCB0
ZXh0dXJlczogY29kZS1vbmx5LCBhbmQgY29kZSB0aGF0IHJlZmVyZW5jZXMgc29tZSBjbGFzc2lj
IDJEIGltYWdlcywgc29tZXRpbWVzIGNhbGxlZCAncmVmTWFwcycgb3IgJ3NhbXBsZXInIGltYWdl
cy4KKyAqIEN1c3RvbSBQcm9jZWR1cmFsIHRleHR1cmVzIGFyZSB0aGUgZWFzaWVzdCB3YXkgdG8g
Y3JlYXRlIHlvdXIgb3duIHByb2NlZHVyYWwgaW4geW91ciBhcHBsaWNhdGlvbi4KKyAqIEBzZWUg
aHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3Byb2NlZHVyYWxfdGV4
dHVyZXMjY3JlYXRpbmctY3VzdG9tLXByb2NlZHVyYWwtdGV4dHVyZXMKKyAqLwordmFyIEN1c3Rv
bVByb2NlZHVyYWxUZXh0dXJlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgewor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEN1c3Rv
bVByb2NlZHVyYWxUZXh0dXJlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRl
cyBhIG5ldyBDdXN0b20gUHJvY2VkdXJhbCBUZXh0dXJlLgorICAgICAqIFByb2NlZHVyYWwgdGV4
dHVyaW5nIGlzIGEgd2F5IHRvIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRlIGEgdGV4dHVyZS4gVGhl
cmUgYXJlIDIgdHlwZXMgb2YgcHJvY2VkdXJhbCB0ZXh0dXJlczogY29kZS1vbmx5LCBhbmQgY29k
ZSB0aGF0IHJlZmVyZW5jZXMgc29tZSBjbGFzc2ljIDJEIGltYWdlcywgc29tZXRpbWVzIGNhbGxl
ZCAncmVmTWFwcycgb3IgJ3NhbXBsZXInIGltYWdlcy4KKyAgICAgKiBDdXN0b20gUHJvY2VkdXJh
bCB0ZXh0dXJlcyBhcmUgdGhlIGVhc2llc3Qgd2F5IHRvIGNyZWF0ZSB5b3VyIG93biBwcm9jZWR1
cmFsIGluIHlvdXIgYXBwbGljYXRpb24uCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25q
cy5jb20vaG93X3RvL2hvd190b191c2VfcHJvY2VkdXJhbF90ZXh0dXJlcyNjcmVhdGluZy1jdXN0
b20tcHJvY2VkdXJhbC10ZXh0dXJlcworICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFt
ZSBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSB0ZXh0dXJlUGF0aCBEZWZpbmUgdGhlIGZv
bGRlciBwYXRoIGNvbnRhaW5pbmcgYWxsIHRoZSBjdXRvbSB0ZXh0dXJlIHJlbGF0ZWQgZmlsZXMg
KGNvbmZpZywgc2hhZGVycy4uLikKKyAgICAgKiBAcGFyYW0gc2l6ZSBEZWZpbmUgdGhlIHNpemUg
b2YgdGhlIHRleHR1cmUgdG8gY3JlYXRlCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZSB0aGUg
c2NlbmUgdGhlIHRleHR1cmUgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBmYWxsYmFja1RleHR1
cmUgRGVmaW5lIGEgZmFsbGJhY2sgdGV4dHVyZSBpbiBjYXNlIHRoZXJlIHdlcmUgaXNzdWVzIHRv
IGNyZWF0ZSB0aGUgY3VzdG9tIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVNaXBNYXBz
IERlZmluZSBpZiB0aGUgdGV4dHVyZSBzaG91bGQgY3JlYXRlcyBtaXAgbWFwcyBvciBub3QKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZShuYW1lLCB0ZXh0dXJl
UGF0aCwgc2l6ZSwgc2NlbmUsIGZhbGxiYWNrVGV4dHVyZSwgZ2VuZXJhdGVNaXBNYXBzKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNpemUsIG51bGwsIHNj
ZW5lLCBmYWxsYmFja1RleHR1cmUsIGdlbmVyYXRlTWlwTWFwcykgfHwgdGhpczsKKyAgICAgICAg
X3RoaXMuX2FuaW1hdGUgPSB0cnVlOworICAgICAgICBfdGhpcy5fdGltZSA9IDA7CisgICAgICAg
IF90aGlzLl90ZXh0dXJlUGF0aCA9IHRleHR1cmVQYXRoOworICAgICAgICAvL1RyeSB0byBsb2Fk
IGpzb24KKyAgICAgICAgX3RoaXMuX2xvYWRKc29uKHRleHR1cmVQYXRoKTsKKyAgICAgICAgX3Ro
aXMucmVmcmVzaFJhdGUgPSAxOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIEN1
c3RvbVByb2NlZHVyYWxUZXh0dXJlLnByb3RvdHlwZS5fbG9hZEpzb24gPSBmdW5jdGlvbiAoanNv
blVybCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgbm9Db25maWdG
aWxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkxvZygiTm8gY29uZmlnIGZpbGUgZm91bmQgaW4g
IiArIGpzb25VcmwgKyAiIHRyeWluZyB0byB1c2UgU2hhZGVyc1N0b3JlIG9yIERPTSBlbGVtZW50
Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIF90aGlzLnNldEZyYWdtZW50
KF90aGlzLl90ZXh0dXJlUGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAo
ZXgpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siTG9nZ2VyIl0uRXJyb3IoIk5vIGpzb24gb3IgU2hhZGVyU3RvcmUgb3IgRE9NIGVs
ZW1lbnQgZm91bmQgZm9yIEN1c3RvbVByb2NlZHVyYWxUZXh0dXJlIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgICAgIHZhciBjb25maWdGaWxlVXJsID0ganNvblVybCArICIvY29u
ZmlnLmpzb24iOworICAgICAgICB2YXIgeGhyID0gbmV3IF9NaXNjX3dlYlJlcXVlc3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siV2ViUmVxdWVzdCJdKCk7CisgICAgICAgIHhoci5vcGVu
KCJHRVQiLCBjb25maWdGaWxlVXJsKTsKKyAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoImxv
YWQiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwIHx8
ICh4aHIucmVzcG9uc2VUZXh0ICYmIHhoci5yZXNwb25zZVRleHQubGVuZ3RoID4gMCkpIHsKKyAg
ICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY29uZmlnID0g
SlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy51cGRh
dGVTaGFkZXJVbmlmb3JtcygpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy51cGRhdGVUZXh0
dXJlcygpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZXRGcmFnbWVudChfdGhpcy5fdGV4
dHVyZVBhdGggKyAiL2N1c3RvbSIpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYW5pbWF0
ZSA9IF90aGlzLl9jb25maWcuYW5pbWF0ZTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVm
cmVzaFJhdGUgPSBfdGhpcy5fY29uZmlnLnJlZnJlc2hyYXRlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9Db25m
aWdGaWxlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgbm9Db25maWdGaWxlKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sIGZhbHNlKTsKKyAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwg
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgbm9Db25maWdGaWxlKCk7CisgICAgICAgIH0sIGZh
bHNlKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHhoci5zZW5kKCk7CisgICAgICAgIH0K
KyAgICAgICAgY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uRXJyb3IoIkN1c3RvbVByb2NlZHVyYWxUZXh0
dXJlOiBFcnJvciBvbiBYSFIgc2VuZCByZXF1ZXN0LiIpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBJcyB0aGUgdGV4dHVyZSByZWFkeSB0byBiZSB1c2VkID8gKHJlbmRlcmVk
IGF0IGxlYXN0IG9uY2UpCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiByZWFkeSwgb3RoZXJ3aXNl
LCBmYWxzZS4KKyAgICAgKi8KKyAgICBDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUu
aXNSZWFkeSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCFfc3VwZXIucHJvdG90eXBlLmlz
UmVhZHkuY2FsbCh0aGlzKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdGV4dHVyZXMpIHsKKyAgICAgICAgICAg
IHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbbmFtZV07CisgICAgICAgICAgICBpZiAoIXRl
eHR1cmUuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoq
CisgICAgICogUmVuZGVyIHRoZSB0ZXh0dXJlIHRvIGl0cyBhc3NvY2lhdGVkIHJlbmRlciB0YXJn
ZXQuCisgICAgICogQHBhcmFtIHVzZUNhbWVyYVBvc3RQcm9jZXNzIERlZmluZSBpZiBjYW1lcmEg
cG9zdCBwcm9jZXNzIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSB0ZXh0dXJlCisgICAgICovCisg
ICAgQ3VzdG9tUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICh1
c2VDYW1lcmFQb3N0UHJvY2VzcykgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5l
KCk7CisgICAgICAgIGlmICh0aGlzLl9hbmltYXRlICYmIHNjZW5lKSB7CisgICAgICAgICAgICB0
aGlzLl90aW1lICs9IHNjZW5lLmdldEFuaW1hdGlvblJhdGlvKCkgKiAwLjAzOworICAgICAgICAg
ICAgdGhpcy51cGRhdGVTaGFkZXJVbmlmb3JtcygpOworICAgICAgICB9CisgICAgICAgIF9zdXBl
ci5wcm90b3R5cGUucmVuZGVyLmNhbGwodGhpcywgdXNlQ2FtZXJhUG9zdFByb2Nlc3MpOworICAg
IH07CisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBsaXN0IG9mIGRlcGVuZGFudCB0ZXh0dXJl
cyBzYW1wbGVycyBpbiB0aGUgc2hhZGVyLgorICAgICAqLworICAgIEN1c3RvbVByb2NlZHVyYWxU
ZXh0dXJlLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jb25maWcuc2FtcGxlcjJEcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgdGhpcy5zZXRUZXh0dXJlKHRoaXMuX2NvbmZpZy5zYW1wbGVyMkRzW2ld
LnNhbXBsZTJEbmFtZSwgbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0odGhpcy5fdGV4dHVyZVBhdGggKyAiLyIgKyB0
aGlzLl9jb25maWcuc2FtcGxlcjJEc1tpXS50ZXh0dXJlUmVsYXRpdmVVcmwsIHRoaXMuZ2V0U2Nl
bmUoKSkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIHVu
aWZvcm0gdmFsdWVzIG9mIHRoZSBwcm9jZWR1cmFsIHRleHR1cmUgaW4gdGhlIHNoYWRlci4KKyAg
ICAgKi8KKyAgICBDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlU2hhZGVy
VW5pZm9ybXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9jb25maWcpIHsKKyAg
ICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fY29uZmlnLnVuaWZvcm1zLmxlbmd0
aDsgaisrKSB7CisgICAgICAgICAgICAgICAgdmFyIHVuaWZvcm0gPSB0aGlzLl9jb25maWcudW5p
Zm9ybXNbal07CisgICAgICAgICAgICAgICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAiZmxvYXQiOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5zZXRGbG9hdCh1bmlmb3JtLm5hbWUsIHVuaWZvcm0udmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgImNvbG9yMyI6CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENvbG9yMyh1bmlmb3JtLm5hbWUsIG5ldyBfTWF0
aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb2xvcjMiXSh1bmlm
b3JtLnIsIHVuaWZvcm0uZywgdW5pZm9ybS5iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiY29sb3I0IjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuc2V0Q29sb3I0KHVuaWZvcm0ubmFtZSwgbmV3IF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbG9yNCJdKHVuaWZvcm0uciwgdW5p
Zm9ybS5nLCB1bmlmb3JtLmIsIHVuaWZvcm0uYSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgInZlY3RvcjIiOgorICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5zZXRWZWN0b3IyKHVuaWZvcm0ubmFtZSwgbmV3IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IyIl0odW5pZm9ybS54
LCB1bmlmb3JtLnkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlICJ2ZWN0b3IzIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
c2V0VmVjdG9yMyh1bmlmb3JtLm5hbWUsIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKHVuaWZvcm0ueCwgdW5pZm9ybS55LCB1bmlm
b3JtLnopKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLnNldEZsb2F0KCJ0aW1l
IiwgdGhpcy5fdGltZSk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3VzdG9t
UHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLCAiYW5pbWF0ZSIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIERlZmluZSBpZiB0aGUgdGV4dHVyZSBhbmltYXRlcyBvciBub3QuCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9hbmltYXRlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgdGhpcy5fYW5pbWF0ZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICByZXR1cm4gQ3VzdG9tUHJvY2VkdXJhbFRleHR1cmU7Cit9KF9wcm9jZWR1cmFsVGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJQcm9jZWR1cmFsVGV4dHVyZSJdKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL1Byb2NlZHVyYWxzL2lu
ZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1cmFscy9pbmRleC50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEN1c3RvbVByb2NlZHVyYWxUZXh0dXJlLCBOb2lz
ZVByb2NlZHVyYWxUZXh0dXJlLCBQcm9jZWR1cmFsVGV4dHVyZSwgUHJvY2VkdXJhbFRleHR1cmVT
Y2VuZUNvbXBvbmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2N1c3RvbVByb2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2N1c3RvbVByb2NlZHVyYWxUZXh0dXJlICovICIu
L01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1cmFscy9jdXN0b21Qcm9jZWR1cmFsVGV4dHVyZS50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2N1c3RvbVByb2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkN1c3RvbVByb2NlZHVyYWxUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX25vaXNlUHJvY2VkdXJhbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9pc2VQcm9jZWR1cmFsVGV4dHVy
ZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvUHJvY2VkdXJhbHMvbm9pc2VQcm9jZWR1cmFsVGV4
dHVyZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2lzZVByb2NlZHVyYWxUZXh0dXJlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfbm9pc2VQcm9jZWR1cmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJOb2lzZVByb2NlZHVyYWxUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3Byb2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Byb2NlZHVyYWxUZXh0dXJlICovICIu
L01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1cmFscy9wcm9jZWR1cmFsVGV4dHVyZS50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X3Byb2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlByb2NlZHVy
YWxUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2NlZHVyYWxU
ZXh0dXJlU2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vcHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudCAqLyAi
Li9NYXRlcmlhbHMvVGV4dHVyZXMvUHJvY2VkdXJhbHMvcHJvY2VkdXJhbFRleHR1cmVTY2VuZUNv
bXBvbmVudC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29t
cG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBv
bmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQcm9jZWR1cmFsVGV4dHVyZVNjZW5l
Q29tcG9uZW50Il07IH0pOworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0
ZXJpYWxzL1RleHR1cmVzL1Byb2NlZHVyYWxzL25vaXNlUHJvY2VkdXJhbFRleHR1cmUudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvVGV4dHVyZXMvUHJvY2VkdXJhbHMv
bm9pc2VQcm9jZWR1cmFsVGV4dHVyZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogTm9pc2VQcm9jZWR1cmFsVGV4dHVyZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJOb2lzZVByb2NlZHVyYWxUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBOb2lzZVByb2NlZHVyYWxUZXh0dXJlOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vRW5naW5l
cy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3Byb2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Byb2NlZHVyYWxUZXh0dXJlICovICIu
L01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1cmFscy9wcm9jZWR1cmFsVGV4dHVyZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy90eXBl
U3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfU2hhZGVyc19ub2lzZV9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vU2hhZGVycy9ub2lzZS5mcmFnbWVudCAq
LyAiLi9TaGFkZXJzL25vaXNlLmZyYWdtZW50LnRzIik7CisKKworCisKKworLyoqCisgKiBDbGFz
cyB1c2VkIHRvIGdlbmVyYXRlIG5vaXNlIHByb2NlZHVyYWwgdGV4dHVyZXMKKyAqLwordmFyIE5v
aXNlUHJvY2VkdXJhbFRleHR1cmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTm9p
c2VQcm9jZWR1cmFsVGV4dHVyZSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEg
bmV3IE5vaXNlUHJvY2VkdXJhbFRleHR1cmUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRo
ZSBuYW1lIGZvIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIHNpemUgZGVmaW5lcyB0aGUgc2l6
ZSBvZiB0aGUgdGV4dHVyZSAoZGVmYXVsdCBpcyAyNTYpCisgICAgICogQHBhcmFtIHNjZW5lIGRl
ZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gZmFsbGJhY2tUZXh0dXJlIGRl
ZmluZXMgdGhlIHRleHR1cmUgdG8gdXNlIGlmIHRoZSBOb2lzZVByb2NlZHVyYWxUZXh0dXJlIGNh
bid0IGJlIGNyZWF0ZWQKKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVNaXBNYXBzIGRlZmluZXMgaWYg
bWlwbWFwcyBtdXN0IGJlIGdlbmVyYXRlZCAodHJ1ZSBieSBkZWZhdWx0KQorICAgICAqLworICAg
IGZ1bmN0aW9uIE5vaXNlUHJvY2VkdXJhbFRleHR1cmUobmFtZSwgc2l6ZSwgc2NlbmUsIGZhbGxi
YWNrVGV4dHVyZSwgZ2VuZXJhdGVNaXBNYXBzKSB7CisgICAgICAgIGlmIChzaXplID09PSB2b2lk
IDApIHsgc2l6ZSA9IDI1NjsgfQorICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2Vu
ZSA9IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVu
Z2luZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3Vw
ZXIuY2FsbCh0aGlzLCBuYW1lLCBzaXplLCAibm9pc2UiLCBzY2VuZSwgZmFsbGJhY2tUZXh0dXJl
LCBnZW5lcmF0ZU1pcE1hcHMpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl90aW1lID0gMDsKKyAg
ICAgICAgLyoqIEdldHMgb3Igc2V0cyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5n
IHRoZSBvdmVyYWxsIGJyaWdodG5lc3Mgb2YgdGhlIHRleHR1cmUgKGRlZmF1bHQgaXMgMC4yKSAq
LworICAgICAgICBfdGhpcy5icmlnaHRuZXNzID0gMC4yOworICAgICAgICAvKiogRGVmaW5lcyB0
aGUgbnVtYmVyIG9mIG9jdGF2ZXMgdG8gcHJvY2VzcyAqLworICAgICAgICBfdGhpcy5vY3RhdmVz
ID0gMzsKKyAgICAgICAgLyoqIERlZmluZXMgdGhlIGxldmVsIG9mIHBlcnNpc3RlbmNlICgwLjgg
YnkgZGVmYXVsdCkgKi8KKyAgICAgICAgX3RoaXMucGVyc2lzdGVuY2UgPSAwLjg7CisgICAgICAg
IC8qKiBHZXRzIG9yIHNldHMgYW5pbWF0aW9uIHNwZWVkIGZhY3RvciAoZGVmYXVsdCBpcyAxKSAq
LworICAgICAgICBfdGhpcy5hbmltYXRpb25TcGVlZEZhY3RvciA9IDE7CisgICAgICAgIF90aGlz
LmF1dG9DbGVhciA9IGZhbHNlOworICAgICAgICBfdGhpcy5fdXBkYXRlU2hhZGVyVW5pZm9ybXMo
KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBOb2lzZVByb2NlZHVyYWxUZXh0
dXJlLnByb3RvdHlwZS5fdXBkYXRlU2hhZGVyVW5pZm9ybXMgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgaWYgKCFzY2VuZSkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3RpbWUgKz0gc2Nl
bmUuZ2V0QW5pbWF0aW9uUmF0aW8oKSAqIHRoaXMuYW5pbWF0aW9uU3BlZWRGYWN0b3IgKiAwLjAx
OworICAgICAgICB0aGlzLnNldEZsb2F0KCJicmlnaHRuZXNzIiwgdGhpcy5icmlnaHRuZXNzKTsK
KyAgICAgICAgdGhpcy5zZXRGbG9hdCgicGVyc2lzdGVuY2UiLCB0aGlzLnBlcnNpc3RlbmNlKTsK
KyAgICAgICAgdGhpcy5zZXRGbG9hdCgidGltZVNjYWxlIiwgdGhpcy5fdGltZSk7CisgICAgfTsK
KyAgICBOb2lzZVByb2NlZHVyYWxUZXh0dXJlLnByb3RvdHlwZS5fZ2V0RGVmaW5lcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICIjZGVmaW5lIE9DVEFWRVMgIiArICh0aGlzLm9jdGF2
ZXMgfCAwKTsKKyAgICB9OworICAgIC8qKiBHZW5lcmF0ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0
aGUgcHJvY2VkdXJhbCB0ZXh0dXJlICovCisgICAgTm9pc2VQcm9jZWR1cmFsVGV4dHVyZS5wcm90
b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHVzZUNhbWVyYVBvc3RQcm9jZXNzKSB7CisgICAgICAg
IHRoaXMuX3VwZGF0ZVNoYWRlclVuaWZvcm1zKCk7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUu
cmVuZGVyLmNhbGwodGhpcywgdXNlQ2FtZXJhUG9zdFByb2Nlc3MpOworICAgIH07CisgICAgLyoq
CisgICAgICogU2VyaWFsaXplcyB0aGlzIG5vaXNlIHByb2NlZHVyYWwgdGV4dHVyZQorICAgICAq
IEByZXR1cm5zIGEgc2VyaWFsaXplZCBub2lzZSBwcm9jZWR1cmFsIHRleHR1cmUgb2JqZWN0Cisg
ICAgICovCisgICAgTm9pc2VQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUuc2VyaWFsaXplID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IHt9OworICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmN1c3RvbVR5cGUgPSAiQkFCWUxPTi5Ob2lzZVByb2Nl
ZHVyYWxUZXh0dXJlIjsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5icmlnaHRuZXNzID0g
dGhpcy5icmlnaHRuZXNzOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm9jdGF2ZXMgPSB0
aGlzLm9jdGF2ZXM7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucGVyc2lzdGVuY2UgPSB0
aGlzLnBlcnNpc3RlbmNlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmFuaW1hdGlvblNw
ZWVkRmFjdG9yID0gdGhpcy5hbmltYXRpb25TcGVlZEZhY3RvcjsKKyAgICAgICAgc2VyaWFsaXph
dGlvbk9iamVjdC5zaXplID0gdGhpcy5nZXRTaXplKCkud2lkdGg7CisgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QuZ2VuZXJhdGVNaXBNYXBzID0gdGhpcy5fZ2VuZXJhdGVNaXBNYXBzOworICAg
ICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBOb2lzZVByb2NlZHVyYWxUZXh0dXJlIGZyb20gcGFyc2VkIG5vaXNlIHByb2Nl
ZHVyYWwgdGV4dHVyZSBkYXRhCisgICAgICogQHBhcmFtIHBhcnNlZFRleHR1cmUgZGVmaW5lcyBw
YXJzZWQgdGV4dHVyZSBkYXRhCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGN1cnJl
bnQgc2NlbmUKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSByb290IFVSTCBjb250
YWluaW5nIG5vaXNlIHByb2NlZHVyYWwgdGV4dHVyZSBpbmZvcm1hdGlvbgorICAgICAqIEByZXR1
cm5zIGEgcGFyc2VkIE5vaXNlUHJvY2VkdXJhbFRleHR1cmUKKyAgICAgKi8KKyAgICBOb2lzZVBy
b2NlZHVyYWxUZXh0dXJlLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZFRleHR1cmUsIHNjZW5lKSB7
CisgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IE5vaXNlUHJvY2VkdXJhbFRleHR1cmUocGFyc2Vk
VGV4dHVyZS5uYW1lLCBwYXJzZWRUZXh0dXJlLnNpemUsIHNjZW5lLCB1bmRlZmluZWQsIHBhcnNl
ZFRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzKTsKKyAgICAgICAgdGV4dHVyZS5icmlnaHRuZXNzID0g
cGFyc2VkVGV4dHVyZS5icmlnaHRuZXNzOworICAgICAgICB0ZXh0dXJlLm9jdGF2ZXMgPSBwYXJz
ZWRUZXh0dXJlLm9jdGF2ZXM7CisgICAgICAgIHRleHR1cmUucGVyc2lzdGVuY2UgPSBwYXJzZWRU
ZXh0dXJlLnBlcnNpc3RlbmNlOworICAgICAgICB0ZXh0dXJlLmFuaW1hdGlvblNwZWVkRmFjdG9y
ID0gcGFyc2VkVGV4dHVyZS5hbmltYXRpb25TcGVlZEZhY3RvcjsKKyAgICAgICAgcmV0dXJuIHRl
eHR1cmU7CisgICAgfTsKKyAgICByZXR1cm4gTm9pc2VQcm9jZWR1cmFsVGV4dHVyZTsKK30oX3By
b2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlByb2NlZHVyYWxU
ZXh0dXJlIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uTm9pc2VQcm9jZWR1cmFs
VGV4dHVyZSJdID0gTm9pc2VQcm9jZWR1cmFsVGV4dHVyZTsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL1Byb2NlZHVyYWxzL3Byb2NlZHVyYWxUZXh0dXJlLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1cmFscy9w
cm9jZWR1cmFsVGV4dHVyZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IFByb2NlZHVyYWxUZXh0dXJlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlByb2NlZHVyYWxUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQcm9jZWR1cmFsVGV4dHVy
ZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9y
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4u
L01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWVzaGVzL2J1ZmZlciAqLyAiLi9N
ZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lQ29tcG9u
ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi8uLi9zY2VuZUNvbXBvbmVudCAqLyAiLi9zY2VuZUNvbXBvbmVudC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGVyaWFs
cy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGVyaWFscy9U
ZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJnZXRU
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZSAqLyAi
Li9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9wcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29tcG9uZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Byb2NlZHVy
YWxUZXh0dXJlU2NlbmVDb21wb25lbnQgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL1Byb2NlZHVy
YWxzL3Byb2NlZHVyYWxUZXh0dXJlU2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfRW5naW5lc19FeHRlbnNpb25zX2VuZ2luZV9yZW5kZXJUYXJnZXRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4u
L0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUucmVuZGVyVGFyZ2V0ICovICIuL0VuZ2luZXMvRXh0
ZW5zaW9ucy9lbmdpbmUucmVuZGVyVGFyZ2V0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNfcHJvY2VkdXJhbF92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEw
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9TaGFkZXJzL3Byb2NlZHVyYWwu
dmVydGV4ICovICIuL1NoYWRlcnMvcHJvY2VkdXJhbC52ZXJ0ZXgudHMiKTsKKworCisKKworCisK
KworCisKKworCisvKioKKyAqIFByb2NlZHVyYWwgdGV4dHVyaW5nIGlzIGEgd2F5IHRvIHByb2dy
YW1tYXRpY2FsbHkgY3JlYXRlIGEgdGV4dHVyZS4gVGhlcmUgYXJlIDIgdHlwZXMgb2YgcHJvY2Vk
dXJhbCB0ZXh0dXJlczogY29kZS1vbmx5LCBhbmQgY29kZSB0aGF0IHJlZmVyZW5jZXMgc29tZSBj
bGFzc2ljIDJEIGltYWdlcywgc29tZXRpbWVzIGNhbG1wbGVyJyBpbWFnZXMuCisgKiBUaGlzIGlz
IHRoZSBiYXNlIGNsYXNzIG9mIGFueSBQcm9jZWR1cmFsIHRleHR1cmUgYW5kIGNvbnRhaW5zIG1v
c3Qgb2YgdGhlIHNoYXJlYWJsZSBjb2RlLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL2hvd190b191c2VfcHJvY2VkdXJhbF90ZXh0dXJlcworICovCit2YXIgUHJvY2Vk
dXJhbFRleHR1cmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUHJvY2VkdXJhbFRl
eHR1cmUsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgbmV3IHByb2Nl
ZHVyYWwgdGV4dHVyZS4KKyAgICAgKiBQcm9jZWR1cmFsIHRleHR1cmluZyBpcyBhIHdheSB0byBw
cm9ncmFtbWF0aWNhbGx5IGNyZWF0ZSBhIHRleHR1cmUuIFRoZXJlIGFyZSAyIHR5cGVzIG9mIHBy
b2NlZHVyYWwgdGV4dHVyZXM6IGNvZGUtb25seSwgYW5kIGNvZGUgdGhhdCByZWZlcmVuY2VzIHNv
bWUgY2xhc3NpYyAyRCBpbWFnZXMsIHNvbWV0aW1lcyBjYWxsZWQgJ3JlZk1hcHMnIG9yICdzYW1w
bGVyJyBpbWFnZXMuCisgICAgICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbnkgUHJvY2Vk
dXJhbCB0ZXh0dXJlIGFuZCBjb250YWlucyBtb3N0IG9mIHRoZSBzaGFyZWFibGUgY29kZS4KKyAg
ICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9wcm9j
ZWR1cmFsX3RleHR1cmVzCisgICAgICogQHBhcmFtIG5hbWUgIERlZmluZSB0aGUgbmFtZSBvZiB0
aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSBzaXplIERlZmluZSB0aGUgc2l6ZSBvZiB0aGUgdGV4
dHVyZSB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0gZnJhZ21lbnQgRGVmaW5lIHRoZSBmcmFnbWVu
dCBzaGFkZXIgdG8gdXNlIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlIG9yIG51bGwgaWYgaXQgaXMg
ZGVmaW5lZCBsYXRlcgorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSB0
ZXh0dXJlIGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gZmFsbGJhY2tUZXh0dXJlIERlZmluZSBh
IGZhbGxiYWNrIHRleHR1cmUgaW4gY2FzZSB0aGVyZSB3ZXJlIGlzc3VlcyB0byBjcmVhdGUgdGhl
IGN1c3RvbSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGdlbmVyYXRlTWlwTWFwcyBEZWZpbmUgaWYg
dGhlIHRleHR1cmUgc2hvdWxkIGNyZWF0ZXMgbWlwIG1hcHMgb3Igbm90CisgICAgICogQHBhcmFt
IGlzQ3ViZSBEZWZpbmUgaWYgdGhlIHRleHR1cmUgaXMgYSBjdWJlIHRleHR1cmUgb3Igbm90ICh0
aGlzIHdpbGwgcmVuZGVyIGVhY2ggZmFjZXMgb2YgdGhlIGN1YmUpCisgICAgICovCisgICAgZnVu
Y3Rpb24gUHJvY2VkdXJhbFRleHR1cmUobmFtZSwgc2l6ZSwgZnJhZ21lbnQsIHNjZW5lLCBmYWxs
YmFja1RleHR1cmUsIGdlbmVyYXRlTWlwTWFwcywgaXNDdWJlKSB7CisgICAgICAgIGlmIChmYWxs
YmFja1RleHR1cmUgPT09IHZvaWQgMCkgeyBmYWxsYmFja1RleHR1cmUgPSBudWxsOyB9CisgICAg
ICAgIGlmIChnZW5lcmF0ZU1pcE1hcHMgPT09IHZvaWQgMCkgeyBnZW5lcmF0ZU1pcE1hcHMgPSB0
cnVlOyB9CisgICAgICAgIGlmIChpc0N1YmUgPT09IHZvaWQgMCkgeyBpc0N1YmUgPSBmYWxzZTsg
fQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBudWxsLCBzY2VuZSwgIWdl
bmVyYXRlTWlwTWFwcykgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuaXNDdWJlID0gaXNDdWJlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGlmIHRoZSB0ZXh0dXJlIGlzIGVuYWJsZWQg
b3Igbm90IChkaXNhYmxlZCB0ZXh0dXJlIHdpbGwgbm90IHJlbmRlcikKKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLmlzRW5hYmxlZCA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
ZWZpbmUgaWYgdGhlIHRleHR1cmUgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZW5kZXJpbmcgKGRl
ZmF1bHQgaXMgdHJ1ZSkKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmF1dG9DbGVhciA9IHRy
dWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFdmVudCByYWlzZWQgd2hlbiB0aGUgdGV4dHVy
ZSBpcyBnZW5lcmF0ZWQKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uR2VuZXJhdGVkT2Jz
ZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhp
cy5fdGV4dHVyZXMgPSB7fTsKKyAgICAgICAgX3RoaXMuX2N1cnJlbnRSZWZyZXNoSWQgPSAtMTsK
KyAgICAgICAgX3RoaXMuX3JlZnJlc2hSYXRlID0gMTsKKyAgICAgICAgX3RoaXMuX3ZlcnRleEJ1
ZmZlcnMgPSB7fTsKKyAgICAgICAgX3RoaXMuX3VuaWZvcm1zID0gbmV3IEFycmF5KCk7CisgICAg
ICAgIF90aGlzLl9zYW1wbGVycyA9IG5ldyBBcnJheSgpOworICAgICAgICBfdGhpcy5fZmxvYXRz
ID0ge307CisgICAgICAgIF90aGlzLl9pbnRzID0ge307CisgICAgICAgIF90aGlzLl9mbG9hdHNB
cnJheXMgPSB7fTsKKyAgICAgICAgX3RoaXMuX2NvbG9yczMgPSB7fTsKKyAgICAgICAgX3RoaXMu
X2NvbG9yczQgPSB7fTsKKyAgICAgICAgX3RoaXMuX3ZlY3RvcnMyID0ge307CisgICAgICAgIF90
aGlzLl92ZWN0b3JzMyA9IHt9OworICAgICAgICBfdGhpcy5fbWF0cmljZXMgPSB7fTsKKyAgICAg
ICAgX3RoaXMuX2ZhbGxiYWNrVGV4dHVyZVVzZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2Nh
Y2hlZERlZmluZXMgPSAiIjsKKyAgICAgICAgX3RoaXMuX2NvbnRlbnRVcGRhdGVJZCA9IC0xOwor
ICAgICAgICBzY2VuZSA9IF90aGlzLmdldFNjZW5lKCk7CisgICAgICAgIHZhciBjb21wb25lbnQg
PSBzY2VuZS5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfUFJPQ0VEVVJBTFRFWFRV
UkUpOworICAgICAgICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICAgICAgY29tcG9uZW50ID0g
bmV3IF9wcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIlByb2NlZHVyYWxUZXh0dXJlU2NlbmVDb21wb25lbnQiXShzY2VuZSk7CisgICAg
ICAgICAgICBzY2VuZS5fYWRkQ29tcG9uZW50KGNvbXBvbmVudCk7CisgICAgICAgIH0KKyAgICAg
ICAgc2NlbmUucHJvY2VkdXJhbFRleHR1cmVzLnB1c2goX3RoaXMpOworICAgICAgICBfdGhpcy5f
ZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIF90aGlzLm5hbWUgPSBuYW1lOwor
ICAgICAgICBfdGhpcy5pc1JlbmRlclRhcmdldCA9IHRydWU7CisgICAgICAgIF90aGlzLl9zaXpl
ID0gc2l6ZTsKKyAgICAgICAgX3RoaXMuX2dlbmVyYXRlTWlwTWFwcyA9IGdlbmVyYXRlTWlwTWFw
czsKKyAgICAgICAgX3RoaXMuc2V0RnJhZ21lbnQoZnJhZ21lbnQpOworICAgICAgICBfdGhpcy5f
ZmFsbGJhY2tUZXh0dXJlID0gZmFsbGJhY2tUZXh0dXJlOworICAgICAgICBpZiAoaXNDdWJlKSB7
CisgICAgICAgICAgICBfdGhpcy5fdGV4dHVyZSA9IF90aGlzLl9lbmdpbmUuY3JlYXRlUmVuZGVy
VGFyZ2V0Q3ViZVRleHR1cmUoc2l6ZSwgeyBnZW5lcmF0ZU1pcE1hcHM6IGdlbmVyYXRlTWlwTWFw
cywgZ2VuZXJhdGVEZXB0aEJ1ZmZlcjogZmFsc2UsIGdlbmVyYXRlU3RlbmNpbEJ1ZmZlcjogZmFs
c2UgfSk7CisgICAgICAgICAgICBfdGhpcy5zZXRGbG9hdCgiZmFjZSIsIDApOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX3RoaXMuX3RleHR1cmUgPSBfdGhpcy5fZW5n
aW5lLmNyZWF0ZVJlbmRlclRhcmdldFRleHR1cmUoc2l6ZSwgeyBnZW5lcmF0ZU1pcE1hcHM6IGdl
bmVyYXRlTWlwTWFwcywgZ2VuZXJhdGVEZXB0aEJ1ZmZlcjogZmFsc2UsIGdlbmVyYXRlU3RlbmNp
bEJ1ZmZlcjogZmFsc2UgfSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVkJPCisgICAgICAgIHZh
ciB2ZXJ0aWNlcyA9IFtdOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKDEsIDEpOworICAgICAgICB2
ZXJ0aWNlcy5wdXNoKC0xLCAxKTsKKyAgICAgICAgdmVydGljZXMucHVzaCgtMSwgLTEpOworICAg
ICAgICB2ZXJ0aWNlcy5wdXNoKDEsIC0xKTsKKyAgICAgICAgX3RoaXMuX3ZlcnRleEJ1ZmZlcnNb
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVy
Il0uUG9zaXRpb25LaW5kXSA9IG5ldyBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXShfdGhpcy5fZW5naW5lLCB2ZXJ0aWNlcywgX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uUG9z
aXRpb25LaW5kLCBmYWxzZSwgZmFsc2UsIDIpOworICAgICAgICBfdGhpcy5fY3JlYXRlSW5kZXhC
dWZmZXIoKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBU
aGUgZWZmZWN0IHRoYXQgaXMgY3JlYXRlZCB3aGVuIGluaXRpYWxpemluZyB0aGUgcG9zdCBwcm9j
ZXNzLgorICAgICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGVmZmVjdCBjb3JyZXNwb25kaW5nIHRo
ZSB0aGUgcG9zdHByb2Nlc3MuCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90
eXBlLmdldEVmZmVjdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VmZmVj
dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGV4dHVyZSBjb250ZW50IChVc2UgdGhp
cyBmdW5jdGlvbiB3aXNlbHkgYXMgcmVhZGluZyBmcm9tIGEgdGV4dHVyZSBjYW4gYmUgc2xvdykK
KyAgICAgKiBAcmV0dXJucyBhbiBBcnJheUJ1ZmZlclZpZXcgKFVpbnQ4QXJyYXkgb3IgRmxvYXQz
MkFycmF5KQorICAgICAqLworICAgIFByb2NlZHVyYWxUZXh0dXJlLnByb3RvdHlwZS5nZXRDb250
ZW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fY29udGVudERhdGEgJiYgdGhp
cy5fY3VycmVudFJlZnJlc2hJZCA9PSB0aGlzLl9jb250ZW50VXBkYXRlSWQpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9jb250ZW50RGF0YTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9j
b250ZW50RGF0YSA9IHRoaXMucmVhZFBpeGVscygwLCAwLCB0aGlzLl9jb250ZW50RGF0YSk7Cisg
ICAgICAgIHRoaXMuX2NvbnRlbnRVcGRhdGVJZCA9IHRoaXMuX2N1cnJlbnRSZWZyZXNoSWQ7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50RGF0YTsKKyAgICB9OworICAgIFByb2NlZHVyYWxU
ZXh0dXJlLnByb3RvdHlwZS5fY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBlbmdpbmUgPSB0aGlzLl9lbmdpbmU7CisgICAgICAgIC8vIEluZGljZXMKKyAgICAg
ICAgdmFyIGluZGljZXMgPSBbXTsKKyAgICAgICAgaW5kaWNlcy5wdXNoKDApOworICAgICAgICBp
bmRpY2VzLnB1c2goMSk7CisgICAgICAgIGluZGljZXMucHVzaCgyKTsKKyAgICAgICAgaW5kaWNl
cy5wdXNoKDApOworICAgICAgICBpbmRpY2VzLnB1c2goMik7CisgICAgICAgIGluZGljZXMucHVz
aCgzKTsKKyAgICAgICAgdGhpcy5faW5kZXhCdWZmZXIgPSBlbmdpbmUuY3JlYXRlSW5kZXhCdWZm
ZXIoaW5kaWNlcyk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFByb2NlZHVyYWxU
ZXh0dXJlLnByb3RvdHlwZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHZi
ID0gdGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdOworICAgICAgICBpZiAodmIp
IHsKKyAgICAgICAgICAgIHZiLl9yZWJ1aWxkKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
Y3JlYXRlSW5kZXhCdWZmZXIoKTsKKyAgICAgICAgaWYgKHRoaXMucmVmcmVzaFJhdGUgPT09IF9N
YXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fWyJSZW5kZXJUYXJnZXRUZXh0dXJlIl0uUkVGUkVTSFJBVEVfUkVOREVSX09OQ0Up
IHsKKyAgICAgICAgICAgIHRoaXMucmVmcmVzaFJhdGUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3Jl
bmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUmVuZGVyVGFy
Z2V0VGV4dHVyZSJdLlJFRlJFU0hSQVRFX1JFTkRFUl9PTkNFOworICAgICAgICB9CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXNldHMgdGhlIHRleHR1cmUgaW4gb3JkZXIgdG8gcmVjcmVhdGUg
aXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICAgICAqIFRoaXMgY2FuIGJlIGNhbGxlZCBpbiBj
YXNlIG9mIGNvbnRleHQgbG9zcworICAgICAqLworICAgIFByb2NlZHVyYWxUZXh0dXJlLnByb3Rv
dHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2VmZmVjdCA9PT0g
dW5kZWZpbmVkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZWZmZWN0LmRpc3Bvc2UoKTsKKyAgICB9OworICAgIFByb2NlZHVyYWxUZXh0dXJlLnByb3Rv
dHlwZS5fZ2V0RGVmaW5lcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICIiOworICAg
IH07CisgICAgLyoqCisgICAgICogSXMgdGhlIHRleHR1cmUgcmVhZHkgdG8gYmUgdXNlZCA/IChy
ZW5kZXJlZCBhdCBsZWFzdCBvbmNlKQorICAgICAqIEByZXR1cm5zIHRydWUgaWYgcmVhZHksIG90
aGVyd2lzZSwgZmFsc2UuCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBl
LmlzUmVhZHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIHZhciBlbmdpbmUgPSB0aGlzLl9lbmdpbmU7CisgICAgICAgIHZhciBzaGFkZXJzOworICAg
ICAgICBpZiAoIXRoaXMuX2ZyYWdtZW50KSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2ZhbGxiYWNrVGV4dHVyZVVzZWQpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHZhciBkZWZpbmVzID0gdGhp
cy5fZ2V0RGVmaW5lcygpOworICAgICAgICBpZiAodGhpcy5fZWZmZWN0ICYmIGRlZmluZXMgPT09
IHRoaXMuX2NhY2hlZERlZmluZXMgJiYgdGhpcy5fZWZmZWN0LmlzUmVhZHkoKSkgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2ZyYWdtZW50
LmZyYWdtZW50RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBzaGFkZXJzID0g
eyB2ZXJ0ZXg6ICJwcm9jZWR1cmFsIiwgZnJhZ21lbnRFbGVtZW50OiB0aGlzLl9mcmFnbWVudC5m
cmFnbWVudEVsZW1lbnQgfTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHNoYWRlcnMgPSB7IHZlcnRleDogInByb2NlZHVyYWwiLCBmcmFnbWVudDogdGhpcy5fZnJhZ21l
bnQgfTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYWNoZWREZWZpbmVzID0gZGVmaW5lczsK
KyAgICAgICAgdGhpcy5fZWZmZWN0ID0gZW5naW5lLmNyZWF0ZUVmZmVjdChzaGFkZXJzLCBbX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0u
UG9zaXRpb25LaW5kXSwgdGhpcy5fdW5pZm9ybXMsIHRoaXMuX3NhbXBsZXJzLCBkZWZpbmVzLCB1
bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMucmVs
ZWFzZUludGVybmFsVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKF90aGlzLl9mYWxsYmFja1Rl
eHR1cmUpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdGV4dHVyZSA9IF90aGlzLl9mYWxsYmFj
a1RleHR1cmUuX3RleHR1cmU7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl90ZXh0dXJlKSB7
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlLmluY3JlbWVudFJlZmVyZW5jZXMo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfdGhpcy5f
ZmFsbGJhY2tUZXh0dXJlVXNlZCA9IHRydWU7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
dGhpcy5fZWZmZWN0LmlzUmVhZHkoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlc2V0cyB0
aGUgcmVmcmVzaCBjb3VudGVyIG9mIHRoZSB0ZXh0dXJlIGFuZCBzdGFydCBiYWsgZnJvbSBzY3Jh
dGNoLgorICAgICAqIENvdWxkIGJlIHVzZWZ1bCB0byByZWdlbmVyYXRlIHRoZSB0ZXh0dXJlIGlm
IGl0IGlzIHNldHVwIHRvIHJlbmRlciBvbmx5IG9uY2UuCisgICAgICovCisgICAgUHJvY2VkdXJh
bFRleHR1cmUucHJvdG90eXBlLnJlc2V0UmVmcmVzaENvdW50ZXIgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnRSZWZyZXNoSWQgPSAtMTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldCB0aGUgZnJhZ21lbnQgc2hhZGVyIHRvIHVzZSBpbiBvcmRlciB0byByZW5kZXIgdGhl
IHRleHR1cmUuCisgICAgICogQHBhcmFtIGZyYWdtZW50IFRoaXMgY2FuIGJlIHNldCB0byBhIHBh
dGggKGludG8gdGhlIHNoYWRlciBzdG9yZSkgb3IgdG8gYSBqc29uIG9iamVjdCBjb250YWluaW5n
IGEgZnJhZ21lbnRFbGVtZW50IHByb3BlcnR5LgorICAgICAqLworICAgIFByb2NlZHVyYWxUZXh0
dXJlLnByb3RvdHlwZS5zZXRGcmFnbWVudCA9IGZ1bmN0aW9uIChmcmFnbWVudCkgeworICAgICAg
ICB0aGlzLl9mcmFnbWVudCA9IGZyYWdtZW50OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFByb2NlZHVyYWxUZXh0dXJlLnByb3RvdHlwZSwgInJlZnJlc2hSYXRlIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSByZWZyZXNoIHJhdGUgb2YgdGhlIHRleHR1
cmUgb3IgdGhlIHJlbmRlcmluZyBmcmVxdWVuY3kuCisgICAgICAgICAqIFVzZSAwIHRvIHJlbmRl
ciBqdXN0IG9uY2UsIDEgdG8gcmVuZGVyIG9uIGV2ZXJ5IGZyYW1lLCAyIHRvIHJlbmRlciBldmVy
eSB0d28gZnJhbWVzIGFuZCBzbyBvbi4uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVmcmVzaFJhdGU7CisgICAgICAg
IH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9y
ZWZyZXNoUmF0ZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5yZXNldFJlZnJlc2hDb3VudGVy
KCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKiBAaGlkZGVuICovCisgICAgUHJvY2VkdXJh
bFRleHR1cmUucHJvdG90eXBlLl9zaG91bGRSZW5kZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICghdGhpcy5pc0VuYWJsZWQgfHwgIXRoaXMuaXNSZWFkeSgpIHx8ICF0aGlzLl90ZXh0dXJl
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX3RleHR1cmUuaXNSZWFkeSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9mYWxsYmFja1RleHR1
cmVVc2VkKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX2N1cnJlbnRSZWZyZXNoSWQgPT09IC0xKSB7IC8vIEF0IGxlYXN0IHJlbmRlciBv
bmNlCisgICAgICAgICAgICB0aGlzLl9jdXJyZW50UmVmcmVzaElkID0gMTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnJlZnJlc2hSYXRlID09
PSB0aGlzLl9jdXJyZW50UmVmcmVzaElkKSB7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50UmVm
cmVzaElkID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX2N1cnJlbnRSZWZyZXNoSWQrKzsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07
CisgICAgLyoqCisgICAgICogR2V0IHRoZSBzaXplIHRoZSB0ZXh0dXJlIGlzIHJlbmRlcmluZyBh
dC4KKyAgICAgKiBAcmV0dXJucyB0aGUgc2l6ZSAodGV4dHVyZSBpcyBhbHdheXMgc3F1YXJlZCkK
KyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUuZ2V0UmVuZGVyU2l6ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBSZXNpemUgdGhlIHRleHR1cmUgdG8gbmV3IHZhbHVlLgorICAgICAqIEBwYXJh
bSBzaXplIERlZmluZSB0aGUgbmV3IHNpemUgdGhlIHRleHR1cmUgc2hvdWxkIGhhdmUKKyAgICAg
KiBAcGFyYW0gZ2VuZXJhdGVNaXBNYXBzIERlZmluZSB3aGV0aGVyIHRoZSBuZXcgdGV4dHVyZSBz
aG91bGQgY3JlYXRlIG1pcCBtYXBzCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUucHJv
dG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uIChzaXplLCBnZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAg
ICAgaWYgKHRoaXMuX2ZhbGxiYWNrVGV4dHVyZVVzZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLnJlbGVhc2VJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAg
ICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX2VuZ2luZS5jcmVhdGVSZW5kZXJUYXJnZXRUZXh0dXJl
KHNpemUsIGdlbmVyYXRlTWlwTWFwcyk7CisgICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzCisg
ICAgICAgIHRoaXMuX3NpemUgPSBzaXplOworICAgICAgICB0aGlzLl9nZW5lcmF0ZU1pcE1hcHMg
PSBnZW5lcmF0ZU1pcE1hcHM7CisgICAgfTsKKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5
cGUuX2NoZWNrVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSkgeworICAgICAgICBpZiAo
dGhpcy5fdW5pZm9ybXMuaW5kZXhPZih1bmlmb3JtTmFtZSkgPT09IC0xKSB7CisgICAgICAgICAg
ICB0aGlzLl91bmlmb3Jtcy5wdXNoKHVuaWZvcm1OYW1lKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogU2V0IGEgdGV4dHVyZSBpbiB0aGUgc2hhZGVyIHByb2dyYW0gdXNlZCB0
byByZW5kZXIuCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB1bmlm
b3JtIHNhbXBsZXJzIGFzIGRlZmluZWQgaW4gdGhlIHNoYWRlcgorICAgICAqIEBwYXJhbSB0ZXh0
dXJlIERlZmluZSB0aGUgdGV4dHVyZSB0byBiaW5kIHRvIHRoaXMgc2FtcGxlcgorICAgICAqIEBy
ZXR1cm4gdGhlIHRleHR1cmUgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQiIGxpa2UgdW5pZm9ybSB1
cGRhdGVzCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLnNldFRleHR1
cmUgPSBmdW5jdGlvbiAobmFtZSwgdGV4dHVyZSkgeworICAgICAgICBpZiAodGhpcy5fc2FtcGxl
cnMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuX3NhbXBsZXJzLnB1
c2gobmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdGV4dHVyZXNbbmFtZV0gPSB0ZXh0
dXJlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBh
IGZsb2F0IGluIHRoZSBzaGFkZXIuCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1l
IG9mIHRoZSB1bmlmb3JtIGFzIGRlZmluZWQgaW4gdGhlIHNoYWRlcgorICAgICAqIEBwYXJhbSB2
YWx1ZSBEZWZpbmUgdGhlIHZhbHVlIHRvIGdpdmUgdG8gdGhlIHVuaWZvcm0KKyAgICAgKiBAcmV0
dXJuIHRoZSB0ZXh0dXJlIGl0c2VsZiBhbGxvd2luZyAiZmx1ZW50IiBsaWtlIHVuaWZvcm0gdXBk
YXRlcworICAgICAqLworICAgIFByb2NlZHVyYWxUZXh0dXJlLnByb3RvdHlwZS5zZXRGbG9hdCA9
IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkgeworICAgICAgICB0aGlzLl9jaGVja1VuaWZvcm0obmFt
ZSk7CisgICAgICAgIHRoaXMuX2Zsb2F0c1tuYW1lXSA9IHZhbHVlOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIGludCBpbiB0aGUgc2hhZGVyLgor
ICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZp
bmVkIGluIHRoZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0
byBnaXZlIHRvIHRoZSB1bmlmb3JtCisgICAgICogQHJldHVybiB0aGUgdGV4dHVyZSBpdHNlbGYg
YWxsb3dpbmcgImZsdWVudCIgbGlrZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBQcm9j
ZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUuc2V0SW50ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7
CisgICAgICAgIHRoaXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5faW50c1tu
YW1lXSA9IHZhbHVlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldCBhbiBhcnJheSBvZiBmbG9hdHMgaW4gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0g
bmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hh
ZGVyCisgICAgICogQHBhcmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUg
dW5pZm9ybQorICAgICAqIEByZXR1cm4gdGhlIHRleHR1cmUgaXRzZWxmIGFsbG93aW5nICJmbHVl
bnQiIGxpa2UgdW5pZm9ybSB1cGRhdGVzCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUu
cHJvdG90eXBlLnNldEZsb2F0cyA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkgeworICAgICAgICB0
aGlzLl9jaGVja1VuaWZvcm0obmFtZSk7CisgICAgICAgIHRoaXMuX2Zsb2F0c0FycmF5c1tuYW1l
XSA9IHZhbHVlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFNldCBhIHZlYzMgaW4gdGhlIHNoYWRlciBmcm9tIGEgQ29sb3IzLgorICAgICAqIEBwYXJhbSBu
YW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFk
ZXIKKyAgICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1
bmlmb3JtCisgICAgICogQHJldHVybiB0aGUgdGV4dHVyZSBpdHNlbGYgYWxsb3dpbmcgImZsdWVu
dCIgbGlrZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5w
cm90b3R5cGUuc2V0Q29sb3IzID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRo
aXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fY29sb3JzM1tuYW1lXSA9IHZh
bHVlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBh
IHZlYzQgaW4gdGhlIHNoYWRlciBmcm9tIGEgQ29sb3I0LgorICAgICAqIEBwYXJhbSBuYW1lIERl
ZmluZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFkZXIKKyAg
ICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1bmlmb3Jt
CisgICAgICogQHJldHVybiB0aGUgdGV4dHVyZSBpdHNlbGYgYWxsb3dpbmcgImZsdWVudCIgbGlr
ZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5
cGUuc2V0Q29sb3I0ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2No
ZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fY29sb3JzNFtuYW1lXSA9IHZhbHVlOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIHZlYzIg
aW4gdGhlIHNoYWRlciBmcm9tIGEgVmVjdG9yMi4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUg
dGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisgICAgICog
QHBhcmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUgdW5pZm9ybQorICAg
ICAqIEByZXR1cm4gdGhlIHRleHR1cmUgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQiIGxpa2UgdW5p
Zm9ybSB1cGRhdGVzCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLnNl
dFZlY3RvcjIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5fY2hlY2tV
bmlmb3JtKG5hbWUpOworICAgICAgICB0aGlzLl92ZWN0b3JzMltuYW1lXSA9IHZhbHVlOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIHZlYzMgaW4g
dGhlIHNoYWRlciBmcm9tIGEgVmVjdG9yMy4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhl
IG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisgICAgICogQHBh
cmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUgdW5pZm9ybQorICAgICAq
IEByZXR1cm4gdGhlIHRleHR1cmUgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQiIGxpa2UgdW5pZm9y
bSB1cGRhdGVzCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLnNldFZl
Y3RvcjMgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5fY2hlY2tVbmlm
b3JtKG5hbWUpOworICAgICAgICB0aGlzLl92ZWN0b3JzM1tuYW1lXSA9IHZhbHVlOworICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIG1hdDQgaW4gdGhl
IHNoYWRlciBmcm9tIGEgTUF0cml4LgorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFt
ZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0g
dmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1bmlmb3JtCisgICAgICogQHJl
dHVybiB0aGUgdGV4dHVyZSBpdHNlbGYgYWxsb3dpbmcgImZsdWVudCIgbGlrZSB1bmlmb3JtIHVw
ZGF0ZXMKKyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUuc2V0TWF0cml4
ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2NoZWNrVW5pZm9ybShu
YW1lKTsKKyAgICAgICAgdGhpcy5fbWF0cmljZXNbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXIgdGhlIHRleHR1cmUgdG8g
aXRzIGFzc29jaWF0ZWQgcmVuZGVyIHRhcmdldC4KKyAgICAgKiBAcGFyYW0gdXNlQ2FtZXJhUG9z
dFByb2Nlc3MgRGVmaW5lIGlmIGNhbWVyYSBwb3N0IHByb2Nlc3Mgc2hvdWxkIGJlIGFwcGxpZWQg
dG8gdGhlIHRleHR1cmUKKyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUu
cmVuZGVyID0gZnVuY3Rpb24gKHVzZUNhbWVyYVBvc3RQcm9jZXNzKSB7CisgICAgICAgIHZhciBz
Y2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9lbmdpbmU7
CisgICAgICAgIC8vIFJlbmRlcgorICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KHRoaXMuX2Vm
ZmVjdCk7CisgICAgICAgIGVuZ2luZS5zZXRTdGF0ZShmYWxzZSk7CisgICAgICAgIC8vIFRleHR1
cmUKKyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykgeworICAgICAgICAg
ICAgdGhpcy5fZWZmZWN0LnNldFRleHR1cmUobmFtZSwgdGhpcy5fdGV4dHVyZXNbbmFtZV0pOwor
ICAgICAgICB9CisgICAgICAgIC8vIEZsb2F0CisgICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl9p
bnRzKSB7CisgICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0SW50KG5hbWUsIHRoaXMuX2ludHNb
bmFtZV0pOworICAgICAgICB9CisgICAgICAgIC8vIEZsb2F0CisgICAgICAgIGZvciAobmFtZSBp
biB0aGlzLl9mbG9hdHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRGbG9hdChuYW1l
LCB0aGlzLl9mbG9hdHNbbmFtZV0pOworICAgICAgICB9CisgICAgICAgIC8vIEZsb2F0cworICAg
ICAgICBmb3IgKG5hbWUgaW4gdGhpcy5fZmxvYXRzQXJyYXlzKSB7CisgICAgICAgICAgICB0aGlz
Ll9lZmZlY3Quc2V0QXJyYXkobmFtZSwgdGhpcy5fZmxvYXRzQXJyYXlzW25hbWVdKTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBDb2xvcjMKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX2NvbG9y
czMpIHsKKyAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRDb2xvcjMobmFtZSwgdGhpcy5fY29s
b3JzM1tuYW1lXSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29sb3I0CisgICAgICAgIGZvciAo
bmFtZSBpbiB0aGlzLl9jb2xvcnM0KSB7CisgICAgICAgICAgICB2YXIgY29sb3IgPSB0aGlzLl9j
b2xvcnM0W25hbWVdOworICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldEZsb2F0NChuYW1lLCBj
b2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBWZWN0b3IyCisgICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl92ZWN0b3JzMikgeworICAgICAg
ICAgICAgdGhpcy5fZWZmZWN0LnNldFZlY3RvcjIobmFtZSwgdGhpcy5fdmVjdG9yczJbbmFtZV0p
OworICAgICAgICB9CisgICAgICAgIC8vIFZlY3RvcjMKKyAgICAgICAgZm9yIChuYW1lIGluIHRo
aXMuX3ZlY3RvcnMzKSB7CisgICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0VmVjdG9yMyhuYW1l
LCB0aGlzLl92ZWN0b3JzM1tuYW1lXSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTWF0cml4Cisg
ICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl9tYXRyaWNlcykgeworICAgICAgICAgICAgdGhpcy5f
ZWZmZWN0LnNldE1hdHJpeChuYW1lLCB0aGlzLl9tYXRyaWNlc1tuYW1lXSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuaXNDdWJlKSB7CisgICAgICAgICAgICBmb3IgKHZhciBm
YWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykgeworICAgICAgICAgICAgICAgIGVuZ2luZS5iaW5k
RnJhbWVidWZmZXIodGhpcy5fdGV4dHVyZSwgZmFjZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRy
dWUpOworICAgICAgICAgICAgICAgIC8vIFZCT3MKKyAgICAgICAgICAgICAgICBlbmdpbmUuYmlu
ZEJ1ZmZlcnModGhpcy5fdmVydGV4QnVmZmVycywgdGhpcy5faW5kZXhCdWZmZXIsIHRoaXMuX2Vm
ZmVjdCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldEZsb2F0KCJmYWNlIiwgZmFj
ZSk7CisgICAgICAgICAgICAgICAgLy8gQ2xlYXIKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5h
dXRvQ2xlYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZW5naW5lLmNsZWFyKHNjZW5lLmNsZWFy
Q29sb3IsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIERyYXcgb3JkZXIKKyAgICAgICAgICAgICAgICBlbmdpbmUuZHJhd0VsZW1lbnRz
VHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1h
dGVyaWFsIl0uVHJpYW5nbGVGaWxsTW9kZSwgMCwgNik7CisgICAgICAgICAgICAgICAgLy8gTWlw
bWFwcworICAgICAgICAgICAgICAgIGlmIChmYWNlID09PSA1KSB7CisgICAgICAgICAgICAgICAg
ICAgIGVuZ2luZS5nZW5lcmF0ZU1pcE1hcHNGb3JDdWJlbWFwKHRoaXMuX3RleHR1cmUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGVuZ2luZS5iaW5kRnJhbWVidWZmZXIodGhpcy5fdGV4dHVyZSwgMCwgdW5k
ZWZpbmVkLCB1bmRlZmluZWQsIHRydWUpOworICAgICAgICAgICAgLy8gVkJPcworICAgICAgICAg
ICAgZW5naW5lLmJpbmRCdWZmZXJzKHRoaXMuX3ZlcnRleEJ1ZmZlcnMsIHRoaXMuX2luZGV4QnVm
ZmVyLCB0aGlzLl9lZmZlY3QpOworICAgICAgICAgICAgLy8gQ2xlYXIKKyAgICAgICAgICAgIGlm
ICh0aGlzLmF1dG9DbGVhcikgeworICAgICAgICAgICAgICAgIGVuZ2luZS5jbGVhcihzY2VuZS5j
bGVhckNvbG9yLCB0cnVlLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gRHJhdyBvcmRlcgorICAgICAgICAgICAgZW5naW5lLmRyYXdFbGVtZW50c1R5cGUoX01h
dGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlhbCJd
LlRyaWFuZ2xlRmlsbE1vZGUsIDAsIDYpOworICAgICAgICB9CisgICAgICAgIC8vIFVuYmluZAor
ICAgICAgICBlbmdpbmUudW5CaW5kRnJhbWVidWZmZXIodGhpcy5fdGV4dHVyZSwgdGhpcy5pc0N1
YmUpOworICAgICAgICBpZiAodGhpcy5vbkdlbmVyYXRlZCkgeworICAgICAgICAgICAgdGhpcy5v
bkdlbmVyYXRlZCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMub25HZW5lcmF0ZWRPYnNlcnZh
YmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25l
IHRoZSB0ZXh0dXJlLgorICAgICAqIEByZXR1cm5zIHRoZSBjbG9uZWQgdGV4dHVyZQorICAgICAq
LworICAgIFByb2NlZHVyYWxUZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdmFyIHRleHR1cmVTaXplID0gdGhpcy5nZXRTaXplKCk7CisgICAgICAgIHZhciBu
ZXdUZXh0dXJlID0gbmV3IFByb2NlZHVyYWxUZXh0dXJlKHRoaXMubmFtZSwgdGV4dHVyZVNpemUu
d2lkdGgsIHRoaXMuX2ZyYWdtZW50LCB0aGlzLmdldFNjZW5lKCksIHRoaXMuX2ZhbGxiYWNrVGV4
dHVyZSwgdGhpcy5fZ2VuZXJhdGVNaXBNYXBzKTsKKyAgICAgICAgLy8gQmFzZSB0ZXh0dXJlCisg
ICAgICAgIG5ld1RleHR1cmUuaGFzQWxwaGEgPSB0aGlzLmhhc0FscGhhOworICAgICAgICBuZXdU
ZXh0dXJlLmxldmVsID0gdGhpcy5sZXZlbDsKKyAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IFRleHR1
cmUKKyAgICAgICAgbmV3VGV4dHVyZS5jb29yZGluYXRlc01vZGUgPSB0aGlzLmNvb3JkaW5hdGVz
TW9kZTsKKyAgICAgICAgcmV0dXJuIG5ld1RleHR1cmU7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBEaXNwb3NlIHRoZSB0ZXh0dXJlIGFuZCByZWxlYXNlIGl0cyBhc29vY2lhdGVkIHJlc291cmNl
cy4KKyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAg
ICBpZiAoIXNjZW5lKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGluZGV4ID0gc2NlbmUucHJvY2VkdXJhbFRleHR1cmVzLmluZGV4T2YodGhpcyk7CisgICAg
ICAgIGlmIChpbmRleCA+PSAwKSB7CisgICAgICAgICAgICBzY2VuZS5wcm9jZWR1cmFsVGV4dHVy
ZXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgdmVydGV4QnVmZmVy
ID0gdGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdOworICAgICAgICBpZiAodmVy
dGV4QnVmZmVyKSB7CisgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXIuZGlzcG9zZSgpOworICAgICAg
ICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdID0gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5faW5kZXhCdWZmZXIgJiYgdGhpcy5fZW5naW5lLl9yZWxl
YXNlQnVmZmVyKHRoaXMuX2luZGV4QnVmZmVyKSkgeworICAgICAgICAgICAgdGhpcy5faW5kZXhC
dWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9z
ZS5jYWxsKHRoaXMpOworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBQcm9jZWR1
cmFsVGV4dHVyZS5wcm90b3R5cGUsICJpc0VuYWJsZWQiLCB2b2lkIDApOworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6
ZSJdKSgpCisgICAgXSwgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLCAiYXV0b0NsZWFyIiwg
dm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29y
YXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFByb2NlZHVyYWxUZXh0dXJlLnBy
b3RvdHlwZSwgIl9nZW5lcmF0ZU1pcE1hcHMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgp
CisgICAgXSwgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLCAiX3NpemUiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLCAi
cmVmcmVzaFJhdGUiLCBudWxsKTsKKyAgICByZXR1cm4gUHJvY2VkdXJhbFRleHR1cmU7Cit9KF9N
YXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJU
ZXh0dXJlIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVy
ZXMvUHJvY2VkdXJhbHMvcHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1
cmFscy9wcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29tcG9uZW50LnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQcm9jZWR1cmFsVGV4dHVyZVNjZW5l
Q29tcG9uZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlByb2NlZHVy
YWxUZXh0dXJlU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFByb2NlZHVyYWxU
ZXh0dXJlU2NlbmVDb21wb25lbnQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNj
X3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9NaXNjL3Rvb2xzICovICIuL01pc2MvdG9vbHMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL3NjZW5lQ29tcG9uZW50ICov
ICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisKKworLyoqCisgKiBEZWZpbmVzIHRoZSBQcm9jZWR1
cmFsIFRleHR1cmUgc2NlbmUgY29tcG9uZW50IHJlc3BvbnNpYmxlIHRvIG1hbmFnZSBhbnkgUHJv
Y2VkdXJhbCBUZXh0dXJlCisgKiBpbiBhIGdpdmVuIHNjZW5lLgorICovCit2YXIgUHJvY2VkdXJh
bFRleHR1cmVTY2VuZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgZm9y
IHRoZSBnaXZlbiBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0
byByZWdpc3RlciB0aGUgY29tcG9uZW50IGluCisgICAgICovCisgICAgZnVuY3Rpb24gUHJvY2Vk
dXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudChzY2VuZSkgeworICAgICAgICAvKioKKyAgICAgICAg
ICogVGhlIGNvbXBvbmVudCBuYW1lIGhlbHBmdWxsIHRvIGlkZW50aWZ5IHRoZSBjb21wb25lbnQg
aW4gdGhlIGxpc3Qgb2Ygc2NlbmUgY29tcG9uZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMubmFtZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
Y2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfUFJPQ0VEVVJBTFRFWFRVUkU7CisgICAgICAg
IHRoaXMuc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgdGhpcy5zY2VuZS5wcm9jZWR1cmFsVGV4dHVy
ZXMgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBj
b21wb25lbnQgaW4gYSBnaXZlbiBzY2VuZQorICAgICAqLworICAgIFByb2NlZHVyYWxUZXh0dXJl
U2NlbmVDb21wb25lbnQucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB0aGlzLnNjZW5lLl9iZWZvcmVDbGVhclN0YWdlLnJlZ2lzdGVyU3RlcChfc2NlbmVDb21wb25l
bnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMi
XS5TVEVQX0JFRk9SRUNMRUFSX1BST0NFRFVSQUxURVhUVVJFLCB0aGlzLCB0aGlzLl9iZWZvcmVD
bGVhcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWJ1aWxkcyB0aGUgZWxlbWVudHMgcmVs
YXRlZCB0byB0aGlzIGNvbXBvbmVudCBpbiBjYXNlIG9mCisgICAgICogY29udGV4dCBsb3N0IGZv
ciBpbnN0YW5jZS4KKyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29tcG9uZW50
LnByb3RvdHlwZS5yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBOb3RoaW5nIHRv
IGRvIGhlcmUuCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgY29tcG9uZW50
IGFuZCB0aGUgYXNzb2NpYXRlZCByZXNzb3VyY2VzLgorICAgICAqLworICAgIFByb2NlZHVyYWxU
ZXh0dXJlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICB9OworICAgIFByb2NlZHVyYWxUZXh0
dXJlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLl9iZWZvcmVDbGVhciA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMuc2NlbmUucHJvY2VkdXJhbFRleHR1cmVzRW5hYmxlZCkgeworICAg
ICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMi
XS5TdGFydFBlcmZvcm1hbmNlQ291bnRlcigiUHJvY2VkdXJhbCB0ZXh0dXJlcyIsIHRoaXMuc2Nl
bmUucHJvY2VkdXJhbFRleHR1cmVzLmxlbmd0aCA+IDApOworICAgICAgICAgICAgZm9yICh2YXIg
cHJvY2VkdXJhbEluZGV4ID0gMDsgcHJvY2VkdXJhbEluZGV4IDwgdGhpcy5zY2VuZS5wcm9jZWR1
cmFsVGV4dHVyZXMubGVuZ3RoOyBwcm9jZWR1cmFsSW5kZXgrKykgeworICAgICAgICAgICAgICAg
IHZhciBwcm9jZWR1cmFsVGV4dHVyZSA9IHRoaXMuc2NlbmUucHJvY2VkdXJhbFRleHR1cmVzW3By
b2NlZHVyYWxJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKHByb2NlZHVyYWxUZXh0dXJlLl9z
aG91bGRSZW5kZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBwcm9jZWR1cmFsVGV4dHVyZS5y
ZW5kZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBf
TWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLkVuZFBlcmZv
cm1hbmNlQ291bnRlcigiUHJvY2VkdXJhbCB0ZXh0dXJlcyIsIHRoaXMuc2NlbmUucHJvY2VkdXJh
bFRleHR1cmVzLmxlbmd0aCA+IDApOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gUHJv
Y2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2Jhc2VUZXh0dXJlLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFs
cy9UZXh0dXJlcy9iYXNlVGV4dHVyZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJhc2VUZXh0dXJl
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VUZXh0dXJlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBCYXNlVGV4dHVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0
b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFi
bGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19IaWdoRHluYW1pY1Jhbmdl
X2N1YmVtYXBUb1NwaGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvSGlnaER5bmFtaWNSYW5nZS9j
dWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsICovICIuL01pc2MvSGlnaER5bmFtaWNSYW5nZS9j
dWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2lu
ZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5lU3RvcmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0Vu
Z2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01pc2NfZ3VpZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9ndWlkICovICIuL01pc2MvZ3VpZC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3NpemVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhz
L21hdGguc2l6ZSAqLyAiLi9NYXRocy9tYXRoLnNpemUudHMiKTsKKworCisKKworCisKKworCisK
Ky8qKgorICogQmFzZSBjbGFzcyBvZiBhbGwgdGhlIHRleHR1cmVzIGluIGJhYnlsb24uCisgKiBJ
dCBncm91cHMgYWxsIHRoZSBjb21tb24gcHJvcGVydGllcyB0aGUgbWF0ZXJpYWxzLCBwb3N0IHBy
b2Nlc3MsIGxpZ2h0cy4uLiBtaWdodCBuZWVkCisgKiBpbiBvcmRlciB0byBtYWtlIGEgY29ycmVj
dCB1c2Ugb2YgdGhlIHRleHR1cmUuCisgKi8KK3ZhciBCYXNlVGV4dHVyZSA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgQmFz
ZVRleHR1cmUuCisgICAgICogQmFzZSBjbGFzcyBvZiBhbGwgdGhlIHRleHR1cmVzIGluIGJhYnls
b24uCisgICAgICogSXQgZ3JvdXBzIGFsbCB0aGUgY29tbW9uIHByb3BlcnRpZXMgdGhlIG1hdGVy
aWFscywgcG9zdCBwcm9jZXNzLCBsaWdodHMuLi4gbWlnaHQgbmVlZAorICAgICAqIGluIG9yZGVy
IHRvIG1ha2UgYSBjb3JyZWN0IHVzZSBvZiB0aGUgdGV4dHVyZS4KKyAgICAgKiBAcGFyYW0gc2Nl
bmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBibG9uZ3MgdG8KKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBCYXNlVGV4dHVyZShzY2VuZSkgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBvciBzZXRzIGFuIG9iamVjdCB1c2VkIHRvIHN0b3JlIHVzZXIgZGVmaW5lZCBpbmZvcm1hdGlv
bi4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubWV0YWRhdGEgPSBudWxsOworICAgICAgICAv
KioKKyAgICAgICAgICogRm9yIGludGVybmFsIHVzZSBvbmx5LiBQbGVhc2UgZG8gbm90IHVzZS4K
KyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVzZXJ2ZWREYXRhU3RvcmUgPSBudWxsOworICAg
ICAgICB0aGlzLl9oYXNBbHBoYSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVm
aW5lcyBpZiB0aGUgYWxwaGEgdmFsdWUgc2hvdWxkIGJlIGRldGVybWluZWQgdmlhIHRoZSByZ2Ig
dmFsdWVzLgorICAgICAgICAgKiBJZiB0cnVlIHRoZSBsdW1pbmFuY2Ugb2YgdGhlIHBpeGVsIG1p
Z2h0IGJlIHVzZWQgdG8gZmluZCB0aGUgY29ycmVzcG9uZGluZyBhbHBoYSB2YWx1ZS4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuZ2V0QWxwaGFGcm9tUkdCID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBJbnRlbnNpdHkgb3Igc3RyZW5ndGggb2YgdGhlIHRleHR1cmUuCisgICAg
ICAgICAqIEl0IGlzIGNvbW1vbmx5IHVzZWQgYnkgbWF0ZXJpYWxzIHRvIGZpbmUgdHVuZSB0aGUg
aW50ZW5zaXR5IG9mIHRoZSB0ZXh0dXJlCisgICAgICAgICAqLworICAgICAgICB0aGlzLmxldmVs
ID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0aGUgVVYgY2hhbmVsIHRvIHVz
ZSBzdGFydGluZyBmcm9tIDAgYW5kIGRlZmF1bHRpbmcgdG8gMC4KKyAgICAgICAgICogVGhpcyBp
cyBwYXJ0IG9mIHRoZSB0ZXh0dXJlIGFzIHRleHR1cmVzIHVzdWFsbHkgbWFwcyB0byBvbmUgdXYg
c2V0LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5jb29yZGluYXRlc0luZGV4ID0gMDsKKyAg
ICAgICAgdGhpcy5fY29vcmRpbmF0ZXNNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfRVhQTElDSVRfTU9ERTsK
KyAgICAgICAgLyoqCisgICAgICAgICogfCBWYWx1ZSB8IFR5cGUgICAgICAgICAgICAgICB8IERl
c2NyaXB0aW9uIHwKKyAgICAgICAgKiB8IC0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0t
LS0tLS0tLS0gfAorICAgICAgICAqIHwgMCAgICAgfCBDTEFNUF9BRERSRVNTTU9ERSAgfCAgICAg
ICAgICAgICB8CisgICAgICAgICogfCAxICAgICB8IFdSQVBfQUREUkVTU01PREUgICB8ICAgICAg
ICAgICAgIHwKKyAgICAgICAgKiB8IDIgICAgIHwgTUlSUk9SX0FERFJFU1NNT0RFIHwgICAgICAg
ICAgICAgfAorICAgICAgICAqLworICAgICAgICB0aGlzLndyYXBVID0gX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfV1JB
UF9BRERSRVNTTU9ERTsKKyAgICAgICAgLyoqCisgICAgICAgICogfCBWYWx1ZSB8IFR5cGUgICAg
ICAgICAgICAgICB8IERlc2NyaXB0aW9uIHwKKyAgICAgICAgKiB8IC0tLS0tIHwgLS0tLS0tLS0t
LS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfAorICAgICAgICAqIHwgMCAgICAgfCBDTEFNUF9BRERS
RVNTTU9ERSAgfCAgICAgICAgICAgICB8CisgICAgICAgICogfCAxICAgICB8IFdSQVBfQUREUkVT
U01PREUgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgKiB8IDIgICAgIHwgTUlSUk9SX0FERFJF
U1NNT0RFIHwgICAgICAgICAgICAgfAorICAgICAgICAqLworICAgICAgICB0aGlzLndyYXBWID0g
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50
cyJdLlRFWFRVUkVfV1JBUF9BRERSRVNTTU9ERTsKKyAgICAgICAgLyoqCisgICAgICAgICogfCBW
YWx1ZSB8IFR5cGUgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uIHwKKyAgICAgICAgKiB8IC0t
LS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfAorICAgICAgICAqIHwgMCAg
ICAgfCBDTEFNUF9BRERSRVNTTU9ERSAgfCAgICAgICAgICAgICB8CisgICAgICAgICogfCAxICAg
ICB8IFdSQVBfQUREUkVTU01PREUgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgKiB8IDIgICAg
IHwgTUlSUk9SX0FERFJFU1NNT0RFIHwgICAgICAgICAgICAgfAorICAgICAgICAqLworICAgICAg
ICB0aGlzLndyYXBSID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfV1JBUF9BRERSRVNTTU9ERTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFdpdGggY29tcGxpYW50IGhhcmR3YXJlIGFuZCBicm93c2VyIChzdXBwb3J0
aW5nIGFuaXNvdHJvcGljIGZpbHRlcmluZykKKyAgICAgICAgICogdGhpcyBkZWZpbmVzIHRoZSBs
ZXZlbCBvZiBhbmlzb3Ryb3BpYyBmaWx0ZXJpbmcgaW4gdGhlIHRleHR1cmUuCisgICAgICAgICAq
IFRoZSBoaWdoZXIgdGhlIGJldHRlciBidXQgdGhlIHNsb3dlci4gVGhpcyBkZWZhdWx0cyB0byA0
IGFzIGl0IHNlZW1zIHRvIGJlIHRoZSBiZXN0IHRyYWRlb2ZmLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5hbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsID0gQmFzZVRleHR1cmUuREVGQVVMVF9B
TklTT1RST1BJQ19GSUxURVJJTkdfTEVWRUw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZp
bmUgaWYgdGhlIHRleHR1cmUgY29udGFpbnMgZGF0YSBpbiBnYW1tYSBzcGFjZSAobW9zdCBvZiB0
aGUgcG5nL2pwZyBhc2lkZSBidW1wKS4KKyAgICAgICAgICogSERSIHRleHR1cmUgYXJlIHVzdWFs
bHkgc3RvcmVkIGluIGxpbmVhciBzcGFjZS4KKyAgICAgICAgICogVGhpcyBvbmx5IGltcGFjdHMg
dGhlIFBCUiBhbmQgQmFja2dyb3VuZCBtYXRlcmlhbHMKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuZ2FtbWFTcGFjZSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJcyBaIGludmVy
dGVkIGluIHRoZSB0ZXh0dXJlICh1c2VmdWwgaW4gYSBjdWJlIHRleHR1cmUpLgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5pbnZlcnRaID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBAaGlkZGVuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmxvZExldmVsSW5BbHBoYSA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGlmIHRoZSB0ZXh0dXJlIGlzIGEg
cmVuZGVyIHRhcmdldC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaXNSZW5kZXJUYXJnZXQg
PSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0aGUgbGlzdCBvZiBhbmlt
YXRpb24gYXR0YWNoZWQgdG8gdGhlIHRleHR1cmUuCisgICAgICAgICAqLworICAgICAgICB0aGlz
LmFuaW1hdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZl
bnQgdHJpZ2dlcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgZGlzcG9zZWQuCisgICAgICAgICovCisg
ICAgICAgIHRoaXMub25EaXNwb3NlT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0aGlz
Ll9vbkRpc3Bvc2VPYnNlcnZlciA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZp
bmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGxvYWRpbmcgc2VxdWVuY2Ugd2hlbiBpbiBkZWxh
eWVkIGxvYWQgbW9kZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGVsYXlMb2FkU3RhdGUg
PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3Rh
bnRzIl0uREVMQVlMT0FEU1RBVEVfTk9ORTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBudWxsOwor
ICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5fdWlkID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2FjaGVkU2l6ZSA9IF9NYXRo
c19tYXRoX3NpemVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2l6ZSJdLlplcm8oKTsK
KyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8fCBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7
CisgICAgICAgIGlmICh0aGlzLl9zY2VuZSkgeworICAgICAgICAgICAgdGhpcy51bmlxdWVJZCA9
IHRoaXMuX3NjZW5lLmdldFVuaXF1ZUlkKCk7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5hZGRU
ZXh0dXJlKHRoaXMpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VpZCA9IG51bGw7CisgICAg
fQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90b3R5cGUsICJoYXNB
bHBoYSIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5faGFzQWxwaGE7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZp
bmUgaWYgdGhlIHRleHR1cmUgaXMgaGF2aW5nIGEgdXNhYmxlIGFscGhhIHZhbHVlIChjYW4gYmUg
dXNlIGZvciB0cmFuc3BhcmVuY3kgb3IgZ2xvc3NpbmVzcyBmb3IgaW5zdGFuY2UpLgorICAgICAg
ICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9oYXNBbHBoYSA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9oYXNBbHBoYSA9IHZhbHVlOworICAgICAgICAg
ICAgaWYgKHRoaXMuX3NjZW5lKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUubWFya0Fs
bE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV82X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RleHR1cmVEaXJ0eUZsYWcgfCBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uTUFU
RVJJQUxfTWlzY0RpcnR5RmxhZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90b3R5cGUsICJjb29yZGlu
YXRlc01vZGUiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2Nvb3JkaW5hdGVzTW9kZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAg
ICAgICogSG93IGEgdGV4dHVyZSBpcyBtYXBwZWQuCisgICAgICAgICoKKyAgICAgICAgKiB8IFZh
bHVlIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiB8
CisgICAgICAgICogfCAtLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IHwgLS0tLS0tLS0tLS0gfAorICAgICAgICAqIHwgMCAgICAgfCBFWFBMSUNJVF9NT0RFICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgKiB8IDEgICAgIHwgU1BI
RVJJQ0FMX01PREUgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAg
ICogfCAyICAgICB8IFBMQU5BUl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg
ICAgICAgfAorICAgICAgICAqIHwgMyAgICAgfCBDVUJJQ19NT0RFICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgKiB8IDQgICAgIHwgUFJPSkVDVElPTl9N
T0RFICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAgICogfCA1ICAg
ICB8IFNLWUJPWF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfAor
ICAgICAgICAqIHwgNiAgICAgfCBJTlZDVUJJQ19NT0RFICAgICAgICAgICAgICAgICAgICAgICB8
ICAgICAgICAgICAgIHwKKyAgICAgICAgKiB8IDcgICAgIHwgRVFVSVJFQ1RBTkdVTEFSX01PREUg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAgICogfCA4ICAgICB8IEZJWEVE
X0VRVUlSRUNUQU5HVUxBUl9NT0RFICAgICAgICAgIHwgICAgICAgICAgICAgfAorICAgICAgICAq
IHwgOSAgICAgfCBGSVhFRF9FUVVJUkVDVEFOR1VMQVJfTUlSUk9SRURfTU9ERSB8ICAgICAgICAg
ICAgIHwKKyAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg
ICAgICAgIGlmICh0aGlzLl9jb29yZGluYXRlc01vZGUgPT09IHZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY29vcmRpbmF0
ZXNNb2RlID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9zY2VuZS5tYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxf
VGV4dHVyZURpcnR5RmxhZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90b3R5cGUsICJpc0N1YmUiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgaWYgdGhlIHRleHR1cmUgaXMgYSBjdWJl
IHRleHR1cmUgb3IgaWYgZmFsc2UgYSAyZCB0ZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmUpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fdGV4dHVyZS5pc0N1YmU7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmUpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl90ZXh0
dXJlLmlzQ3ViZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoQmFzZVRleHR1cmUucHJvdG90eXBlLCAiaXMzRCIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIERlZmluZSBpZiB0aGUgdGV4dHVyZSBpcyBhIDNkIHRleHR1cmUgKHdlYmdsIDIp
IG9yIGlmIGZhbHNlIGEgMmQgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3RleHR1cmUuaXMzRDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3RleHR1cmUuaXMzRCA9
IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFz
ZVRleHR1cmUucHJvdG90eXBlLCAiaXNSR0JEIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyBvciBzZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGNvbnRhaW5zIFJHQkQgZGF0
YS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3RleHR1cmUgIT0gbnVsbCAmJiB0aGlzLl90ZXh0dXJlLl9pc1JHQkQ7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmUuX2lzUkdC
RCA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoQmFzZVRleHR1cmUucHJvdG90eXBlLCAibm9NaXBtYXAiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBBcmUgbWlwIG1hcHMgZ2VuZXJhdGVkIGZvciB0aGlzIHRleHR1
cmUgb3Igbm90LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90b3R5cGUsICJsb2RHZW5lcmF0aW9uT2Zmc2V0Iiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogV2l0aCBwcmVmaWx0ZXJlZCB0ZXh0dXJlLCBkZWZp
bmVkIHRoZSBvZmZzZXQgdXNlZCBkdXJpbmcgdGhlIHByZWZpbHRlcmluZyBzdGVwcy4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRoaXMu
X3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZS5fbG9kR2Vu
ZXJhdGlvbk9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwLjA7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmUuX2xvZEdl
bmVyYXRpb25PZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgImxvZEdl
bmVyYXRpb25TY2FsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFdpdGggcHJlZmlsdGVy
ZWQgdGV4dHVyZSwgZGVmaW5lZCB0aGUgc2NhbGUgdXNlZCBkdXJpbmcgdGhlIHByZWZpbHRlcmlu
ZyBzdGVwcy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
dGV4dHVyZS5fbG9kR2VuZXJhdGlvblNjYWxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIDAuMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
dGV4dHVyZS5fbG9kR2VuZXJhdGlvblNjYWxlID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90
b3R5cGUsICJsaW5lYXJTcGVjdWxhckxPRCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFdp
dGggcHJlZmlsdGVyZWQgdGV4dHVyZSwgZGVmaW5lZCBpZiB0aGUgc3BlY3VsYXIgZ2VuZXJhdGlv
biBpcyBiYXNlZCBvbiBhIGxpbmVhciByYW1wLgorICAgICAgICAgKiBCeSBkZWZhdWx0IHdlIGFy
ZSB1c2luZyBhIGxvZzIgb2YgdGhlIGxpbmVhciByb3VnaG5lc3MgaGVscGluZyB0byBrZWVwIGEg
YmV0dGVyIHJlc29sdXRpb24gZm9yCisgICAgICAgICAqIGF2ZXJhZ2Ugcm91Z2huZXNzIHZhbHVl
cy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVy
ZS5fbGluZWFyU3BlY3VsYXJMT0Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1
cmUuX2xpbmVhclNwZWN1bGFyTE9EID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90b3R5cGUs
ICJpcnJhZGlhbmNlVGV4dHVyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEluIGNhc2Ug
YSBiZXR0ZXIgZGVmaW5pdGlvbiB0aGFuIHNwaGVyaWNhbCBoYXJtb25pY3MgaXMgcmVxdWlyZWQg
Zm9yIHRoZSBkaWZmdXNlIHBhcnQgb2YgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgKiBZb3Ug
Y2FuIHNldCB0aGUgaXJyYWRpYW5jZSB0ZXh0dXJlIHRvIHJlbHkgb24gYSB0ZXh0dXJlIGluc3Rl
YWQgb2YgdGhlIHNwaGVyaWNhbCBhcHByb2FjaC4KKyAgICAgICAgICogVGhpcyB0ZXh0dXJlIG5l
ZWQgdG8gaGF2ZSB0aGUgc2FtZSBjaGFyYWN0ZXJpc3RpY3MgdGhhbiBpdHMgcGFyZW50IChDdWJl
IHZzIDJkLCBjb29yZGluYXRlcyBtb2RlLCBHYW1tYS9MaW5lYXIsIFJHQkQpLgorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdGV4
dHVyZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlLl9pcnJhZGlhbmNl
VGV4dHVyZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlLl9pcnJhZGlhbmNl
VGV4dHVyZSA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZVRleHR1cmUucHJvdG90eXBlLCAidWlkIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSB1bmlxdWUgaWQgb2YgdGhlIHRleHR1cmUg
aW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBpZiAoIXRoaXMuX3VpZCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3VpZCA9
IF9NaXNjX2d1aWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siR1VJRCJdLlJhbmRvbUlk
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdWlkOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRp
b24gb2YgdGhlIHRleHR1cmUuCisgICAgICogQHJldHVybnMgdGhlIHRleHR1cmUgYXMgYSBzdHJp
bmcKKyAgICAgKi8KKyAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLm5hbWU7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBHZXQgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIHRleHR1cmUuCisgICAgICogQHJldHVybnMgIkJh
c2VUZXh0dXJlIgorICAgICAqLworICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5nZXRDbGFzc05h
bWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQmFzZVRleHR1cmUiOworICAgIH07
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgIm9uRGlz
cG9zZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxiYWNrIHRyaWdnZXJlZCB3aGVu
IHRoZSB0ZXh0dXJlIGhhcyBiZWVuIGRpc3Bvc2VkLgorICAgICAgICAgKiBLZXB0IGZvciBiYWNr
IGNvbXBhdGliaWxpdHksIHlvdSBjYW4gdXNlIHRoZSBvbkRpc3Bvc2VPYnNlcnZhYmxlIGluc3Rl
YWQuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX29uRGlzcG9zZU9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkRpc3Bvc2VPYnNlcnZlcik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vbkRpc3Bvc2VPYnNlcnZlciA9IHRo
aXMub25EaXNwb3NlT2JzZXJ2YWJsZS5hZGQoY2FsbGJhY2spOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZVRleHR1cmUucHJvdG90eXBlLCAiaXNCbG9j
a2luZyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSBpZiB0aGUgdGV4dHVyZSBp
cyBwcmV2ZW50aW5nYSBtYXRlcmlhbCB0byByZW5kZXIgb3Igbm90LgorICAgICAgICAgKiBJZiBu
b3QgYW5kIHRoZSB0ZXh0dXJlIGlzIG5vdCByZWFkeSwgdGhlIGVuZ2luZSB3aWxsIHVzZSBhIGRl
ZmF1bHQgYmxhY2sgdGV4dHVyZSBpbnN0ZWFkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgLyoqCisgICAgICogR2V0IHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBiZWxvbmdzIHRvLgor
ICAgICAqIEByZXR1cm5zIHRoZSBzY2VuZSBvciBudWxsIGlmIHVuZGVmaW5lZAorICAgICAqLwor
ICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5nZXRTY2VuZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX3NjZW5lOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSB0
ZXh0dXJlIHRyYW5zZm9ybSBtYXRyaXggdXNlZCB0byBvZmZzZXQgdGlsZSB0aGUgdGV4dHVyZSBm
b3IgaXN0YW5jZS4KKyAgICAgKiBAcmV0dXJucyB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4Cisg
ICAgICovCisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmdldFRleHR1cmVNYXRyaXggPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siTWF0cml4Il0uSWRlbnRpdHlSZWFkT25seTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldCB0aGUgdGV4dHVyZSByZWZsZWN0aW9uIG1hdHJpeCB1c2VkIHRvIHJv
dGF0ZS90cmFuc2Zvcm0gdGhlIHJlZmxlY3Rpb24uCisgICAgICogQHJldHVybnMgdGhlIHJlZmxl
Y3Rpb24gbWF0cml4CisgICAgICovCisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmdldFJlZmxl
Y3Rpb25UZXh0dXJlTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdHJpeCJdLklkZW50
aXR5UmVhZE9ubHk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHVuZGVybHlpbmcg
bG93ZXIgbGV2ZWwgdGV4dHVyZSBmcm9tIEJhYnlsb24uCisgICAgICogQHJldHVybnMgdGhlIGlu
c3Rlcm5hbCB0ZXh0dXJlCisgICAgICovCisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmdldElu
dGVybmFsVGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1
cmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgaWYgdGhlIHRleHR1cmUgaXMgcmVhZHkg
dG8gYmUgY29uc3VtZWQgKGVpdGhlciBpdCBpcyByZWFkeSBvciBpdCBpcyBub3QgYmxvY2tpbmcp
CisgICAgICogQHJldHVybnMgdHJ1ZSBpZiByZWFkeSBvciBub3QgYmxvY2tpbmcKKyAgICAgKi8K
KyAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuaXNSZWFkeU9yTm90QmxvY2tpbmcgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiAhdGhpcy5pc0Jsb2NraW5nIHx8IHRoaXMuaXNSZWFkeSgp
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGlmIHRoZSB0ZXh0dXJlIGlzIHJlYWR5IHRv
IGJlIHVzZWQgKGRvd25sb2FkZWQsIGNvbnZlcnRlZCwgbWlwIG1hcHBlZC4uLikuCisgICAgICog
QHJldHVybnMgdHJ1ZSBpZiBmdWxseSByZWFkeQorICAgICAqLworICAgIEJhc2VUZXh0dXJlLnBy
b3RvdHlwZS5pc1JlYWR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5kZWxheUxv
YWRTdGF0ZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82
X19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNUQVRFX05PVExPQURFRCkgeworICAgICAgICAgICAg
dGhpcy5kZWxheUxvYWQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Rl
eHR1cmUuaXNSZWFkeTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHNpemUgb2YgdGhlIHRleHR1cmUuCisgICAgICogQHJl
dHVybnMgdGhlIHRleHR1cmUgc2l6ZS4KKyAgICAgKi8KKyAgICBCYXNlVGV4dHVyZS5wcm90b3R5
cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlLndpZHRoKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fY2FjaGVkU2l6ZS53aWR0aCA9IHRoaXMuX3RleHR1cmUud2lkdGg7CisgICAgICAgICAg
ICAgICAgdGhpcy5fY2FjaGVkU2l6ZS5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmhlaWdodDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkU2l6ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlLl9zaXplKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fY2FjaGVkU2l6ZS53aWR0aCA9IHRoaXMuX3RleHR1cmUuX3NpemU7CisgICAgICAgICAgICAg
ICAgdGhpcy5fY2FjaGVkU2l6ZS5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9zaXplOworICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRTaXplOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRTaXplOworICAgIH07CisgICAgLyoqCisg
ICAgICogR2V0IHRoZSBiYXNlIHNpemUgb2YgdGhlIHRleHR1cmUuCisgICAgICogSXQgY2FuIGJl
IGRpZmZlcmVudCBmcm9tIHRoZSBzaXplIGlmIHRoZSB0ZXh0dXJlIGhhcyBiZWVuIHJlc2l6ZWQg
Zm9yIFBPVCBmb3IgaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJucyB0aGUgYmFzZSBzaXplCisgICAg
ICovCisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmdldEJhc2VTaXplID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSgpIHx8ICF0aGlzLl90ZXh0dXJlKSB7CisgICAg
ICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfc2l6ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJTaXplIl0uWmVybygpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl90ZXh0dXJl
Ll9zaXplKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IF9NYXRoc19tYXRoX3NpemVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2l6ZSJdKHRoaXMuX3RleHR1cmUuX3NpemUsIHRoaXMu
X3RleHR1cmUuX3NpemUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgX01hdGhzX21h
dGhfc2l6ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJTaXplIl0odGhpcy5fdGV4dHVy
ZS5iYXNlV2lkdGgsIHRoaXMuX3RleHR1cmUuYmFzZUhlaWdodCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgICAgICAgKiBVcGRhdGUgdGhlIHNhbXBsaW5nIG1vZGUgb2YgdGhlIHRleHR1cmUuCisg
ICAgICAgICAgICogRGVmYXVsdCBpcyBUcmlsaW5lYXIgbW9kZS4KKyAgICAgICAgICAgKgorICAg
ICAgICAgICAqIHwgVmFsdWUgfCBUeXBlICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiB8Cisg
ICAgICAgICAgICogfCAtLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHwK
KyAgICAgICAgICAgKiB8IDEgICAgIHwgTkVBUkVTVF9TQU1QTElOR01PREUgb3IgTkVBUkVTVF9O
RUFSRVNUX01JUExJTkVBUiAgfCBOZWFyZXN0IGlzOiBtYWcgPSBuZWFyZXN0LCBtaW4gPSBuZWFy
ZXN0LCBtaXAgPSBsaW5lYXIgfAorICAgICAgICAgICAqIHwgMiAgICAgfCBCSUxJTkVBUl9TQU1Q
TElOR01PREUgb3IgTElORUFSX0xJTkVBUl9NSVBORUFSRVNUIHwgQmlsaW5lYXIgaXM6IG1hZyA9
IGxpbmVhciwgbWluID0gbGluZWFyLCBtaXAgPSBuZWFyZXN0IHwKKyAgICAgICAgICAgKiB8IDMg
ICAgIHwgVFJJTElORUFSX1NBTVBMSU5HTU9ERSBvciBMSU5FQVJfTElORUFSX01JUExJTkVBUiB8
IFRyaWxpbmVhciBpczogbWFnID0gbGluZWFyLCBtaW4gPSBsaW5lYXIsIG1pcCA9IGxpbmVhciB8
CisgICAgICAgICAgICogfCA0ICAgICB8IE5FQVJFU1RfTkVBUkVTVF9NSVBORUFSRVNUIHwgICAg
ICAgICAgICAgfAorICAgICAgICAgICAqIHwgNSAgICB8IE5FQVJFU1RfTElORUFSX01JUE5FQVJF
U1QgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICogfCA2ICAgIHwgTkVBUkVTVF9MSU5FQVJf
TUlQTElORUFSIHwgICAgICAgICAgICAgfAorICAgICAgICAgICAqIHwgNyAgICB8IE5FQVJFU1Rf
TElORUFSIHwgICAgICAgICAgICAgfAorICAgICAgICAgICAqIHwgOCAgICB8IE5FQVJFU1RfTkVB
UkVTVCB8ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgKiB8IDkgICB8IExJTkVBUl9ORUFSRVNU
X01JUE5FQVJFU1QgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICogfCAxMCAgIHwgTElORUFS
X05FQVJFU1RfTUlQTElORUFSIHwgICAgICAgICAgICAgfAorICAgICAgICAgICAqIHwgMTEgICB8
IExJTkVBUl9MSU5FQVIgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICogfCAxMiAgIHwgTElO
RUFSX05FQVJFU1QgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICoKKyAgICAgICAgICAgKiAg
ICA+IF9tYWdfOiBtYWduaWZpY2F0aW9uIGZpbHRlciAoY2xvc2UgdG8gdGhlIHZpZXdlcikKKyAg
ICAgICAgICAgKiAgICA+IF9taW5fOiBtaW5pZmljYXRpb24gZmlsdGVyIChmYXIgZnJvbSB0aGUg
dmlld2VyKQorICAgICAgICAgICAqICAgID4gX21pcF86IGZpbHRlciB1c2VkIGJldHdlZW4gbWlw
IG1hcCBsZXZlbHMKKyAgICAgICAgICAgKkBwYXJhbSBzYW1wbGluZ01vZGUgRGVmaW5lIHRoZSBu
ZXcgc2FtcGxpbmcgbW9kZSBvZiB0aGUgdGV4dHVyZQorICAgICAgICAgICAqLworICAgIEJhc2VU
ZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTYW1wbGluZ01vZGUgPSBmdW5jdGlvbiAoc2FtcGxpbmdN
b2RlKSB7CisgICAgICAgIGlmICghdGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAg
ICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHNjZW5lLmdldEVuZ2luZSgpLnVwZGF0ZVRleHR1cmVTYW1wbGluZ01vZGUoc2FtcGxpbmdNb2Rl
LCB0aGlzLl90ZXh0dXJlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNjYWxlcyB0aGUgdGV4
dHVyZSBpZiBpcyBgY2FuUmVzY2FsZSgpYAorICAgICAqIEBwYXJhbSByYXRpbyB0aGUgcmVzaXpl
IGZhY3RvciB3ZSB3YW50IHRvIHVzZSB0byByZXNjYWxlCisgICAgICovCisgICAgQmFzZVRleHR1
cmUucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHJhdGlvKSB7CisgICAgfTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQmFzZVRleHR1cmUucHJvdG90eXBlLCAiY2FuUmVzY2FsZSIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCBpZiB0aGUgdGV4dHVyZSBjYW4gcmVzY2FsZS4K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEJh
c2VUZXh0dXJlLnByb3RvdHlwZS5fZ2V0RnJvbUNhY2hlID0gZnVuY3Rpb24gKHVybCwgbm9NaXBt
YXAsIHNhbXBsaW5nLCBpbnZlcnRZKSB7CisgICAgICAgIGlmICghdGhpcy5fc2NlbmUpIHsKKyAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciB0ZXh0dXJlc0Nh
Y2hlID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZ2V0TG9hZGVkVGV4dHVyZXNDYWNoZSgpOwor
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGV4dHVyZXNDYWNoZS5sZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlc0NhY2hlRW50cnkgPSB0ZXh0dXJl
c0NhY2hlW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChpbnZlcnRZID09PSB1bmRlZmluZWQgfHwg
aW52ZXJ0WSA9PT0gdGV4dHVyZXNDYWNoZUVudHJ5LmludmVydFkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZXNDYWNoZUVudHJ5LnVybCA9PT0gdXJsICYmIHRleHR1cmVzQ2FjaGVFbnRy
eS5nZW5lcmF0ZU1pcE1hcHMgPT09ICFub01pcG1hcCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXNhbXBsaW5nIHx8IHNhbXBsaW5nID09PSB0ZXh0dXJlc0NhY2hlRW50cnkuc2FtcGxpbmdN
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlc0NhY2hlRW50cnkuaW5jcmVt
ZW50UmVmZXJlbmNlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVz
Q2FjaGVFbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAg
IC8qKiBAaGlkZGVuICovCisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLl9yZWJ1aWxkID0gZnVu
Y3Rpb24gKCkgeworICAgIH07CisgICAgLyoqCisgICAgICogVHJpZ2dlcnMgdGhlIGxvYWQgc2Vx
dWVuY2UgaW4gZGVsYXllZCBsb2FkIG1vZGUuCisgICAgICovCisgICAgQmFzZVRleHR1cmUucHJv
dG90eXBlLmRlbGF5TG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENsb25lcyB0aGUgdGV4dHVyZS4KKyAgICAgKiBAcmV0dXJucyB0aGUgY2xvbmVkIHRleHR1cmUK
KyAgICAgKi8KKyAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgInRleHR1cmVUeXBlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0IHRoZSB0ZXh0dXJlIHVuZGVybHlpbmcgdHlwZSAoSU5ULCBGTE9BVC4uLikK
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYg
KCF0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQ
RV9VTlNJR05FRF9JTlQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gKHRoaXMu
X3RleHR1cmUudHlwZSAhPT0gdW5kZWZpbmVkKSA/IHRoaXMuX3RleHR1cmUudHlwZSA6IF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5U
RVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90b3R5cGUsICJ0ZXh0dXJlRm9ybWF0Iiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSB0ZXh0dXJlIHVuZGVybHlpbmcgZm9ybWF0
IChSR0IsIFJHQkEuLi4pCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGlmICghdGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3Rh
bnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuICh0aGlzLl90ZXh0dXJlLmZvcm1hdCAhPT0gdW5kZWZpbmVkKSA/IHRoaXMuX3RleHR1cmUu
Zm9ybWF0IDogX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19b
IkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCQTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqCisgICAgICogUmVhZHMgdGhlIHBpeGVscyBzdG9yZWQgaW4gdGhlIHdlYmdsIHRleHR1cmUg
YW5kIHJldHVybnMgdGhlbSBhcyBhbiBBcnJheUJ1ZmZlci4KKyAgICAgKiBUaGlzIHdpbGwgcmV0
dXJucyBhbiBSR0JBIGFycmF5IGJ1ZmZlciBjb250YWluaW5nIGVpdGhlciBpbiB2YWx1ZXMgKDAt
MjU1KSBvcgorICAgICAqIGZsb2F0IHZhbHVlcyAoMC0xKSBkZXBlbmRpbmcgb2YgdGhlIHVuZGVy
bHlpbmcgYnVmZmVyIHR5cGUuCisgICAgICogQHBhcmFtIGZhY2VJbmRleCBkZWZpbmVzIHRoZSBm
YWNlIG9mIHRoZSB0ZXh0dXJlIHRvIHJlYWQgKGluIGNhc2Ugb2YgY3ViZSB0ZXh0dXJlKQorICAg
ICAqIEBwYXJhbSBsZXZlbCBkZWZpbmVzIHRoZSBMT0QgbGV2ZWwgb2YgdGhlIHRleHR1cmUgdG8g
cmVhZCAoaW4gY2FzZSBvZiBNaXAgTWFwcykKKyAgICAgKiBAcGFyYW0gYnVmZmVyIGRlZmluZXMg
YSB1c2VyIGRlZmluZWQgYnVmZmVyIHRvIGZpbGwgd2l0aCBkYXRhIChjYW4gYmUgbnVsbCkKKyAg
ICAgKiBAcmV0dXJucyBUaGUgQXJyYXkgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHBpeGVscyBkYXRh
LgorICAgICAqLworICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5yZWFkUGl4ZWxzID0gZnVuY3Rp
b24gKGZhY2VJbmRleCwgbGV2ZWwsIGJ1ZmZlcikgeworICAgICAgICBpZiAoZmFjZUluZGV4ID09
PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAgICAgICBpZiAobGV2ZWwgPT09IHZvaWQg
MCkgeyBsZXZlbCA9IDA7IH0KKyAgICAgICAgaWYgKGJ1ZmZlciA9PT0gdm9pZCAwKSB7IGJ1ZmZl
ciA9IG51bGw7IH0KKyAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgp
OworICAgICAgICB2YXIgd2lkdGggPSBzaXplLndpZHRoOworICAgICAgICB2YXIgaGVpZ2h0ID0g
c2l6ZS5oZWlnaHQ7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAg
ICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAobGV2ZWwg
IT0gMCkgeworICAgICAgICAgICAgd2lkdGggPSB3aWR0aCAvIE1hdGgucG93KDIsIGxldmVsKTsK
KyAgICAgICAgICAgIGhlaWdodCA9IGhlaWdodCAvIE1hdGgucG93KDIsIGxldmVsKTsKKyAgICAg
ICAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCk7CisgICAgICAgICAgICBoZWlnaHQgPSBN
YXRoLnJvdW5kKGhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUu
aXNDdWJlKSB7CisgICAgICAgICAgICByZXR1cm4gZW5naW5lLl9yZWFkVGV4dHVyZVBpeGVscyh0
aGlzLl90ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0LCBmYWNlSW5kZXgsIGxldmVsLCBidWZmZXIpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBlbmdpbmUuX3JlYWRUZXh0dXJlUGl4ZWxzKHRoaXMu
X3RleHR1cmUsIHdpZHRoLCBoZWlnaHQsIC0xLCBsZXZlbCwgYnVmZmVyKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFJlbGVhc2UgYW5kIGRlc3Ryb3kgdGhlIHVuZGVybHlpbmcgbG93ZXIgbGV2
ZWwgdGV4dHVyZSBha2EgaW50ZXJuYWxUZXh0dXJlLgorICAgICAqLworICAgIEJhc2VUZXh0dXJl
LnByb3RvdHlwZS5yZWxlYXNlSW50ZXJuYWxUZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5fdGV4dHVyZS5kaXNwb3Nl
KCk7CisgICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgIH07
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgInNwaGVy
aWNhbFBvbHlub21pYWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgdGhlIHBvbHlu
b21pYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRleHR1cmUgZGF0YS4KKyAgICAgICAgICogVGhp
cyBpcyBtYWlubHkgdXNlIGFzIGEgZmFzdCB3YXkgdG8gcmVjb3ZlciBJQkwgRGlmZnVzZSBpcnJh
ZGlhbmNlIGRhdGEuCisgICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWFybm9wZW5nbC5jb20vUEJS
L0lCTC9EaWZmdXNlLWlycmFkaWFuY2UKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlIHx8ICFfTWlzY19IaWdoRHlu
YW1pY1JhbmdlX2N1YmVtYXBUb1NwaGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbFRvb2xzIl0gfHwgIXRoaXMu
aXNSZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmUuX3NwaGVyaWNhbFBvbHlub21pYWwpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlLl9zcGhlcmljYWxQb2x5bm9taWFsID0KKyAg
ICAgICAgICAgICAgICAgICAgX01pc2NfSGlnaER5bmFtaWNSYW5nZV9jdWJlbWFwVG9TcGhlcmlj
YWxQb2x5bm9taWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkN1YmVNYXBUb1NwaGVy
aWNhbFBvbHlub21pYWxUb29scyJdLkNvbnZlcnRDdWJlTWFwVGV4dHVyZVRvU3BoZXJpY2FsUG9s
eW5vbWlhbCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90
ZXh0dXJlLl9zcGhlcmljYWxQb2x5bm9taWFsOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl90ZXh0dXJlLl9zcGhlcmljYWxQb2x5bm9taWFsID0gdmFsdWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShCYXNlVGV4dHVyZS5wcm90b3R5cGUsICJfbG9kVGV4dHVyZUhpZ2giLCB7CisgICAgICAgIC8q
KiBAaGlkZGVuICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYg
KHRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZS5f
bG9kVGV4dHVyZUhpZ2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VUZXh0dXJl
LnByb3RvdHlwZSwgIl9sb2RUZXh0dXJlTWlkIiwgeworICAgICAgICAvKiogQGhpZGRlbiAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJl
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmUuX2xvZFRleHR1cmVNaWQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgIl9s
b2RUZXh0dXJlTG93IiwgeworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmUuX2xvZFRleHR1cmVMb3c7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisg
ICAgICogRGlzcG9zZSB0aGUgdGV4dHVyZSBhbmQgcmVsZWFzZSBpdHMgYXNzb2NpYXRlZCByZXNv
dXJjZXMuCisgICAgICovCisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIGlmICh0aGlzLl9z
Y2VuZS5zdG9wQW5pbWF0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5zdG9wQW5pbWF0
aW9uKHRoaXMpOworICAgICAgICB9CisgICAgICAgIC8vIFJlbW92ZSBmcm9tIHNjZW5lCisgICAg
ICAgIHRoaXMuX3NjZW5lLl9yZW1vdmVQZW5kaW5nRGF0YSh0aGlzKTsKKyAgICAgICAgdmFyIGlu
ZGV4ID0gdGhpcy5fc2NlbmUudGV4dHVyZXMuaW5kZXhPZih0aGlzKTsKKyAgICAgICAgaWYgKGlu
ZGV4ID49IDApIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLnRleHR1cmVzLnNwbGljZShpbmRl
eCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc2NlbmUub25UZXh0dXJlUmVtb3ZlZE9i
c2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICBpZiAodGhpcy5fdGV4dHVy
ZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgLy8gUmVsZWFzZQorICAgICAgICB0aGlzLnJlbGVhc2VJbnRlcm5hbFRleHR1cmUoKTsKKyAg
ICAgICAgLy8gQ2FsbGJhY2sKKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlLm5vdGlm
eU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlLmNsZWFy
KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgdGhlIHRleHR1cmUgaW50byBh
IEpTT04gcmVwcmVzZW50YXRpb24gdGhhdCBjYW4gYmUgcGFyc2VkIGxhdGVyIG9uLgorICAgICAq
IEByZXR1cm5zIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0dXJlCisgICAgICov
CisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLm5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICB9CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uU2VyaWFs
aXplKHRoaXMpOworICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkFw
cGVuZFNlcmlhbGl6ZWRBbmltYXRpb25zKHRoaXMsIHNlcmlhbGl6YXRpb25PYmplY3QpOworICAg
ICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEhlbHBlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYmFjayBvbmNlIGEgbGlzdCBvZiB0ZXh0dXJl
IGNvbnRhaW5zIG9ubHkgcmVhZHkgdGV4dHVyZXMuCisgICAgICogQHBhcmFtIHRleHR1cmVzIERl
ZmluZSB0aGUgbGlzdCBvZiB0ZXh0dXJlcyB0byB3YWl0IGZvcgorICAgICAqIEBwYXJhbSBjYWxs
YmFjayBEZWZpbmUgdGhlIGNhbGxiYWNrIHRyaWdnZXJlZCBvbmNlIHRoZSBlbnRpcmUgbGlzdCB3
aWxsIGJlIHJlYWR5CisgICAgICovCisgICAgQmFzZVRleHR1cmUuV2hlbkFsbFJlYWR5ID0gZnVu
Y3Rpb24gKHRleHR1cmVzLCBjYWxsYmFjaykgeworICAgICAgICB2YXIgbnVtUmVtYWluaW5nID0g
dGV4dHVyZXMubGVuZ3RoOworICAgICAgICBpZiAobnVtUmVtYWluaW5nID09PSAwKSB7CisgICAg
ICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGV4dHVyZSA9IHRl
eHR1cmVzW2ldOworICAgICAgICAgICAgaWYgKHRleHR1cmUuaXNSZWFkeSgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKC0tbnVtUmVtYWluaW5nID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgb25Mb2FkT2JzZXJ2YWJsZSA9IHRleHR1cmUub25M
b2FkT2JzZXJ2YWJsZTsKKyAgICAgICAgICAgICAgICB2YXIgb25Mb2FkQ2FsbGJhY2tfMSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgb25Mb2FkT2JzZXJ2YWJsZS5yZW1vdmVD
YWxsYmFjayhvbkxvYWRDYWxsYmFja18xKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKC0tbnVt
UmVtYWluaW5nID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICBvbkxvYWRPYnNlcnZhYmxlLmFkZChvbkxvYWRDYWxsYmFja18xKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICAgICAgdmFyIHRleHR1cmUsIG9uTG9hZE9ic2VydmFibGU7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dHVyZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIF9sb29wXzEoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGVmYXVs
dCBhbmlzb3Ryb3BpYyBmaWx0ZXJpbmcgbGV2ZWwgZm9yIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAg
KiBJdCBpcyBzZXQgdG8gNCBhcyBhIGdvb2QgdHJhZGVvZmYgYmV0d2VlbiBwZXJmIGFuZCBxdWFs
aXR5LgorICAgICAqLworICAgIEJhc2VUZXh0dXJlLkRFRkFVTFRfQU5JU09UUk9QSUNfRklMVEVS
SU5HX0xFVkVMID0gNDsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJhc2VUZXh0dXJlLnBy
b3RvdHlwZSwgInVuaXF1ZUlkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgIm5hbWUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJd
KSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAibWV0YWRhdGEiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgiaGFzQWxwaGEiKQorICAgIF0sIEJhc2VUZXh0dXJlLnByb3RvdHlw
ZSwgIl9oYXNBbHBoYSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBCYXNl
VGV4dHVyZS5wcm90b3R5cGUsICJnZXRBbHBoYUZyb21SR0IiLCB2b2lkIDApOworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAibGV2ZWwiLCB2b2lkIDAp
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAiY29v
cmRpbmF0ZXNJbmRleCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCJjb29yZGluYXRlc01v
ZGUiKQorICAgIF0sIEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgIl9jb29yZGluYXRlc01vZGUiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBl
LCAid3JhcFUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1
cmUucHJvdG90eXBlLCAid3JhcFYiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAid3JhcFIiLCB2b2lkIDApOworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6
ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAiYW5pc290cm9waWNGaWx0ZXJp
bmdMZXZlbCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBCYXNlVGV4dHVy
ZS5wcm90b3R5cGUsICJpc0N1YmUiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgImlzM0QiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgImdhbW1hU3BhY2UiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAiaW52ZXJ0
WiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBCYXNlVGV4dHVyZS5wcm90
b3R5cGUsICJsb2RMZXZlbEluQWxwaGEiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisg
ICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAibG9kR2VuZXJhdGlvbk9mZnNldCIsIG51bGwp
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAibG9k
R2VuZXJhdGlvblNjYWxlIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBCYXNl
VGV4dHVyZS5wcm90b3R5cGUsICJsaW5lYXJTcGVjdWxhckxPRCIsIG51bGwpOworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZUFzVGV4dHVyZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAiaXJyYWRp
YW5jZVRleHR1cmUiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJhc2VUZXh0
dXJlLnByb3RvdHlwZSwgImlzUmVuZGVyVGFyZ2V0Iiwgdm9pZCAwKTsKKyAgICByZXR1cm4gQmFz
ZVRleHR1cmU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9U
ZXh0dXJlcy9jb2xvckdyYWRpbmdUZXh0dXJlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL1Rl
eHR1cmVzL2NvbG9yR3JhZGluZ1RleHR1cmUudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IENvbG9yR3JhZGluZ1RleHR1cmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQ29sb3JHcmFkaW5nVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29sb3JHcmFkaW5n
VGV4dHVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9u
b2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4
dHVyZXNfYmFzZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9UZXh0dXJlcy9iYXNlVGV4dHVyZSAqLyAi
Li9NYXRlcmlhbHMvVGV4dHVyZXMvYmFzZVRleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0Vu
Z2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlw
ZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisK
KworCisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIGEgY29sb3IgZ3JhZGluZyB0ZXh0dXJlLiBU
aGlzIGFjdHMgYXMgYSBsb29rdXAgdGFibGUgTFVULCB1c2VmdWwgZHVyaW5nIHBvc3QgcHJvY2Vz
cworICogSXQgY2FuIGhlbHAgY29udmVydGluZyBhbnkgaW5wdXQgY29sb3IgaW4gYSBkZXNpcmVk
IG91dHB1dCBvbmUuIFRoaXMgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgZWZmZWN0cworICog
ZnJvbSBzZXBpYSwgYmxhY2sgYW5kIHdoaXRlIHRvIHNpeHRpZXMgb3IgZnV0dXJpc3RpYyByZW5k
ZXJpbmcuLi4KKyAqCisgKiBUaGUgb25seSBzdXBwb3J0ZWQgZm9ybWF0IGlzIGN1cnJlbnRseSAz
ZGwuCisgKiBNb3JlIGluZm9ybWF0aW9uIG9uIExVVDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3Jn
L3dpa2kvM0RfbG9va3VwX3RhYmxlCisgKi8KK3ZhciBDb2xvckdyYWRpbmdUZXh0dXJlID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKENvbG9yR3JhZGluZ1RleHR1cmUsIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgQ29sb3JHcmFkaW5nVGV4dHVyZSBmcm9t
IHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1cmwgVGhl
IGxvY2F0aW9uIG9mIHRoZSBjb2xvciBncmFkaW5kIGRhdGEgKGN1cnJlbnRseSBvbmx5IHN1cHBv
cnRpbmcgM2RsKQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhlIHRleHR1cmUgd2ls
bCBiZSB1c2VkIGluCisgICAgICovCisgICAgZnVuY3Rpb24gQ29sb3JHcmFkaW5nVGV4dHVyZSh1
cmwsIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjZW5l
KSB8fCB0aGlzOworICAgICAgICBpZiAoIXVybCkgeworICAgICAgICAgICAgcmV0dXJuIF90aGlz
OworICAgICAgICB9CisgICAgICAgIF90aGlzLl9lbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsK
KyAgICAgICAgX3RoaXMuX3RleHR1cmVNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgX3Ro
aXMubmFtZSA9IHVybDsKKyAgICAgICAgX3RoaXMudXJsID0gdXJsOworICAgICAgICBfdGhpcy5o
YXNBbHBoYSA9IGZhbHNlOworICAgICAgICBfdGhpcy5pc0N1YmUgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuaXMzRCA9IF90aGlzLl9lbmdpbmUud2ViR0xWZXJzaW9uID4gMTsKKyAgICAgICAgX3Ro
aXMud3JhcFUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siQ29uc3RhbnRzIl0uVEVYVFVSRV9DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgX3RoaXMu
d3JhcFYgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
Q29uc3RhbnRzIl0uVEVYVFVSRV9DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgX3RoaXMud3Jh
cFIgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRV9DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgX3RoaXMuYW5pc290
cm9waWNGaWx0ZXJpbmdMZXZlbCA9IDE7CisgICAgICAgIF90aGlzLl90ZXh0dXJlID0gX3RoaXMu
X2dldEZyb21DYWNoZSh1cmwsIHRydWUpOworICAgICAgICBpZiAoIV90aGlzLl90ZXh0dXJlKSB7
CisgICAgICAgICAgICBpZiAoIXNjZW5lLnVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZykgeworICAg
ICAgICAgICAgICAgIF90aGlzLmxvYWRUZXh0dXJlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5E
RUxBWUxPQURTVEFURV9OT1RMT0FERUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB0ZXh0
dXJlIG1hdHJpeCB1c2VkIGluIG1vc3Qgb2YgdGhlIG1hdGVyaWFsLgorICAgICAqIFRoaXMgaXMg
bm90IHVzZWQgaW4gY29sb3IgZ3JhZGluZyBidXQga2VlcCBmb3IgdHJvdWJsZXNob290aW5nIHB1
cnBvc2UgKGVhc2lseSBzd2FwIGRpZmZ1c2UgYnkgY29sb3JncmFkaW5nIHRvIGxvb2sgaW4pLgor
ICAgICAqLworICAgIENvbG9yR3JhZGluZ1RleHR1cmUucHJvdG90eXBlLmdldFRleHR1cmVNYXRy
aXggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlTWF0cml4Owor
ICAgIH07CisgICAgLyoqCisgICAgICogT2NjdXJzIHdoZW4gdGhlIGZpbGUgYmVpbmcgbG9hZGVk
IGlzIGEgLjNkbCBMVVQgZmlsZS4KKyAgICAgKi8KKyAgICBDb2xvckdyYWRpbmdUZXh0dXJlLnBy
b3RvdHlwZS5sb2FkM2RsVGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGVuZ2lu
ZSA9IHRoaXMuX2VuZ2luZTsKKyAgICAgICAgdmFyIHRleHR1cmU7CisgICAgICAgIGlmIChlbmdp
bmUud2ViR0xWZXJzaW9uID09PSAxKSB7CisgICAgICAgICAgICB0ZXh0dXJlID0gZW5naW5lLmNy
ZWF0ZVJhd1RleHR1cmUobnVsbCwgMSwgMSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCQSwgZmFsc2Us
IGZhbHNlLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
Q29uc3RhbnRzIl0uVEVYVFVSRV9CSUxJTkVBUl9TQU1QTElOR01PREUpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGV4dHVyZSA9IGVuZ2luZS5jcmVhdGVSYXdUZXh0
dXJlM0QobnVsbCwgMSwgMSwgMSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCQSwgZmFsc2UsIGZhbHNl
LCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3Rh
bnRzIl0uVEVYVFVSRV9CSUxJTkVBUl9TQU1QTElOR01PREUpOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX3RleHR1cmUgPSB0ZXh0dXJlOworICAgICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlv
biAodGV4dCkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAic3RyaW5nIikgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBk
YXRhID0gbnVsbDsKKyAgICAgICAgICAgIHZhciB0ZW1wRGF0YSA9IG51bGw7CisgICAgICAgICAg
ICB2YXIgbGluZTsKKyAgICAgICAgICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJyk7Cisg
ICAgICAgICAgICB2YXIgc2l6ZSA9IDAsIHBpeGVsSW5kZXhXID0gMCwgcGl4ZWxJbmRleEggPSAw
LCBwaXhlbEluZGV4U2xpY2UgPSAwOworICAgICAgICAgICAgdmFyIG1heENvbG9yID0gMDsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBsaW5lID0gbGluZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKCFDb2xvckdy
YWRpbmdUZXh0dXJlLl9ub25lRW1wdHlMaW5lUmVnZXgudGVzdChsaW5lKSkgeworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKGxpbmUuaW5kZXhPZignIycpID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgd29yZHMgPSBsaW5l
LnNwbGl0KCIgIik7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPT09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTnVtYmVyIG9mIHNwYWNlICsgb25lCisgICAgICAgICAgICAgICAgICAg
IHNpemUgPSB3b3Jkcy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgVWlu
dDhBcnJheShzaXplICogc2l6ZSAqIHNpemUgKiA0KTsgLy8gdm9sdW1lIHRleHR1cmUgb2Ygc2lk
ZSBzaXplIGFuZCByZ2IgOAorICAgICAgICAgICAgICAgICAgICB0ZW1wRGF0YSA9IG5ldyBGbG9h
dDMyQXJyYXkoc2l6ZSAqIHNpemUgKiBzaXplICogNCk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2l6ZSAhPSAw
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciByID0gTWF0aC5tYXgocGFyc2VJbnQod29yZHNb
MF0pLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGcgPSBNYXRoLm1heChwYXJzZUludCh3
b3Jkc1sxXSksIDApOworICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IE1hdGgubWF4KHBhcnNl
SW50KHdvcmRzWzJdKSwgMCk7CisgICAgICAgICAgICAgICAgICAgIG1heENvbG9yID0gTWF0aC5t
YXgociwgbWF4Q29sb3IpOworICAgICAgICAgICAgICAgICAgICBtYXhDb2xvciA9IE1hdGgubWF4
KGcsIG1heENvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgbWF4Q29sb3IgPSBNYXRoLm1heChi
LCBtYXhDb2xvcik7CisgICAgICAgICAgICAgICAgICAgIHZhciBwaXhlbFN0b3JhZ2VJbmRleCA9
IChwaXhlbEluZGV4VyArIHBpeGVsSW5kZXhTbGljZSAqIHNpemUgKyBwaXhlbEluZGV4SCAqIHNp
emUgKiBzaXplKSAqIDQ7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wRGF0YSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGVtcERhdGFbcGl4ZWxTdG9yYWdlSW5kZXggKyAwXSA9IHI7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRGF0YVtwaXhlbFN0b3JhZ2VJbmRleCArIDFd
ID0gZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhW3BpeGVsU3RvcmFnZUluZGV4
ICsgMl0gPSBiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8v
IEtlZXAgZm9yIHJlZmVyZW5jZSBpbiBjYXNlIG9mIGJhY2sgY29tcGF0IHByb2JsZW1zLgorICAg
ICAgICAgICAgICAgICAgICAvLyBwaXhlbEluZGV4U2xpY2UrKzsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gaWYgKHBpeGVsSW5kZXhTbGljZSAlIHNpemUgPT0gMCkgeworICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgcGl4ZWxJbmRleEgrKzsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIHBp
eGVsSW5kZXhTbGljZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIC8vICAgICBpZiAocGl4ZWxJ
bmRleEggJSBzaXplID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBwaXhl
bEluZGV4VysrOworICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHBpeGVsSW5kZXhIID0g
MDsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8g
fQorICAgICAgICAgICAgICAgICAgICBwaXhlbEluZGV4SCsrOworICAgICAgICAgICAgICAgICAg
ICBpZiAocGl4ZWxJbmRleEggJSBzaXplID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBpeGVsSW5kZXhTbGljZSsrOworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxJbmRleEgg
PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpeGVsSW5kZXhTbGljZSAlIHNpemUg
PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSW5kZXhXKys7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxJbmRleFNsaWNlID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0ZW1wRGF0YSAmJiBkYXRhKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZW1wRGF0YS5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgKGkgKyAxKSAlIDQgPT09IDApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSAyNTU7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdmFsdWUgPSB0ZW1wRGF0YVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0g
PSAodmFsdWUgLyBtYXhDb2xvciAqIDI1NSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGV4dHVyZS5pczNE
KSB7CisgICAgICAgICAgICAgICAgdGV4dHVyZS51cGRhdGVTaXplKHNpemUsIHNpemUsIHNpemUp
OworICAgICAgICAgICAgICAgIGVuZ2luZS51cGRhdGVSYXdUZXh0dXJlM0QodGV4dHVyZSwgZGF0
YSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0
YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCQSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGV4dHVyZS51cGRhdGVTaXplKHNpemUgKiBz
aXplLCBzaXplKTsKKyAgICAgICAgICAgICAgICBlbmdpbmUudXBkYXRlUmF3VGV4dHVyZSh0ZXh0
dXJlLCBkYXRhLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBLCBmYWxzZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAg
ICAgaWYgKHNjZW5lKSB7CisgICAgICAgICAgICBzY2VuZS5fbG9hZEZpbGUodGhpcy51cmwsIGNh
bGxiYWNrKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2Vu
Z2luZS5fbG9hZEZpbGUodGhpcy51cmwsIGNhbGxiYWNrKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5fdGV4dHVyZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFN0YXJ0cyB0aGUg
bG9hZGluZyBwcm9jZXNzIG9mIHRoZSB0ZXh0dXJlLgorICAgICAqLworICAgIENvbG9yR3JhZGlu
Z1RleHR1cmUucHJvdG90eXBlLmxvYWRUZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAodGhpcy51cmwgJiYgdGhpcy51cmwudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmRleE9mKCIuM2Rs
IikgPT0gKHRoaXMudXJsLmxlbmd0aCAtIDQpKSB7CisgICAgICAgICAgICB0aGlzLmxvYWQzZGxU
ZXh0dXJlKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lcyB0aGUg
Y29sb3IgZ3JhZGluZCB0ZXh0dXJlLgorICAgICAqLworICAgIENvbG9yR3JhZGluZ1RleHR1cmUu
cHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbmV3VGV4dHVyZSA9
IG5ldyBDb2xvckdyYWRpbmdUZXh0dXJlKHRoaXMudXJsLCB0aGlzLmdldFNjZW5lKCkpOworICAg
ICAgICAvLyBCYXNlIHRleHR1cmUKKyAgICAgICAgbmV3VGV4dHVyZS5sZXZlbCA9IHRoaXMubGV2
ZWw7CisgICAgICAgIHJldHVybiBuZXdUZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICog
Q2FsbGVkIGR1cmluZyBkZWxheWVkIGxvYWQgZm9yIHRleHR1cmVzLgorICAgICAqLworICAgIENv
bG9yR3JhZGluZ1RleHR1cmUucHJvdG90eXBlLmRlbGF5TG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKHRoaXMuZGVsYXlMb2FkU3RhdGUgIT09IF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9OT1RM
T0FERUQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmRl
bGF5TG9hZFN0YXRlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNUQVRFX0xPQURFRDsKKyAgICAgICAgdGhpcy5f
dGV4dHVyZSA9IHRoaXMuX2dldEZyb21DYWNoZSh0aGlzLnVybCwgdHJ1ZSk7CisgICAgICAgIGlm
ICghdGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5sb2FkVGV4dHVyZSgpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgYSBjb2xvciBncmFkaW5nIHRl
eHR1cmUgc2VyaWFsaXplZCBieSBCYWJ5bG9uLgorICAgICAqIEBwYXJhbSBwYXJzZWRUZXh0dXJl
IFRoZSB0ZXh0dXJlIGluZm9ybWF0aW9uIGJlaW5nIHBhcnNlZFRleHR1cmUKKyAgICAgKiBAcGFy
YW0gc2NlbmUgVGhlIHNjZW5lIHRvIGxvYWQgdGhlIHRleHR1cmUgaW4KKyAgICAgKiBAcGFyYW0g
cm9vdFVybCBUaGUgcm9vdCB1cmwgb2YgdGhlIGRhdGEgYXNzZXRzIHRvIGxvYWQKKyAgICAgKiBA
cmV0dXJuIEEgY29sb3IgZ3JhZGluZCB0ZXh0dXJlCisgICAgICovCisgICAgQ29sb3JHcmFkaW5n
VGV4dHVyZS5QYXJzZSA9IGZ1bmN0aW9uIChwYXJzZWRUZXh0dXJlLCBzY2VuZSkgeworICAgICAg
ICB2YXIgdGV4dHVyZSA9IG51bGw7CisgICAgICAgIGlmIChwYXJzZWRUZXh0dXJlLm5hbWUgJiYg
IXBhcnNlZFRleHR1cmUuaXNSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHRleHR1cmUgPSBu
ZXcgQ29sb3JHcmFkaW5nVGV4dHVyZShwYXJzZWRUZXh0dXJlLm5hbWUsIHNjZW5lKTsKKyAgICAg
ICAgICAgIHRleHR1cmUubmFtZSA9IHBhcnNlZFRleHR1cmUubmFtZTsKKyAgICAgICAgICAgIHRl
eHR1cmUubGV2ZWwgPSBwYXJzZWRUZXh0dXJlLmxldmVsOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0ZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgTFVU
IHRleHR1cmUgdG8ganNvbiBmb3JtYXQuCisgICAgICovCisgICAgQ29sb3JHcmFkaW5nVGV4dHVy
ZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMu
bmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5u
YW1lID0gdGhpcy5uYW1lOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmxldmVsID0gdGhp
cy5sZXZlbDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21UeXBlID0gIkJBQllM
T04uQ29sb3JHcmFkaW5nVGV4dHVyZSI7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2Jq
ZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogRW1wdHkgbGluZSByZWdleCBzdG9yZWQgZm9y
IEdDLgorICAgICAqLworICAgIENvbG9yR3JhZGluZ1RleHR1cmUuX25vbmVFbXB0eUxpbmVSZWdl
eCA9IC9cUysvOworICAgIHJldHVybiBDb2xvckdyYWRpbmdUZXh0dXJlOworfShfTWF0ZXJpYWxz
X1RleHR1cmVzX2Jhc2VUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkJhc2VU
ZXh0dXJlIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uQ29sb3JHcmFkaW5nVGV4
dHVyZSJdID0gQ29sb3JHcmFkaW5nVGV4dHVyZTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWF0ZXJpYWxzL1RleHR1cmVzL2N1YmVUZXh0dXJlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJl
cy9jdWJlVGV4dHVyZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEN1YmVUZXh0dXJlICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN1YmVUZXh0dXJlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBDdWJlVGV4dHVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRz
bGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIu
L01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NaXNjL3Rvb2xzICovICIuL01pc2MvdG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIu
L01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVy
aWFsc19UZXh0dXJlc19iYXNlVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2Jhc2VUZXh0
dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9iYXNlVGV4dHVyZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxz
L1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMv
Y29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5
cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX0V4dGVuc2lv
bnNfZW5naW5lX2N1YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLmN1YmVU
ZXh0dXJlICovICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUuY3ViZVRleHR1cmUudHMiKTsK
KworCisKKworCisKKworCisKKy8qKgorICogQ2xhc3MgZm9yIGNyZWF0aW5nIGEgY3ViZSB0ZXh0
dXJlCisgKi8KK3ZhciBDdWJlVGV4dHVyZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3Vw
ZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMi
XShDdWJlVGV4dHVyZSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgY3ViZSB0
ZXh0dXJlIHRvIHVzZSB3aXRoIHJlZmxlY3Rpb24gZm9yIGluc3RhbmNlLiBJdCBjYW4gYmUgYmFz
ZWQgdXBvbiBkZHMgb3Igc2l4IGltYWdlcyBhcyB3ZWxsCisgICAgICogYXMgcHJlZmlsdGVyZWQg
ZGF0YS4KKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSB1cmwgb2YgdGhlIHRleHR1
cmUgb3IgdGhlIHJvb3QgbmFtZSBvZiB0aGUgc2l4IGltYWdlcworICAgICAqIEBwYXJhbSBzY2Vu
ZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBpcyBhdHRhY2hlZCB0bworICAgICAqIEBw
YXJhbSBleHRlbnNpb25zIGRlZmluZXMgdGhlIHN1ZmZpeGVzIGFkZCB0byB0aGUgcGljdHVyZSBu
YW1lIGluIGNhc2Ugc2l4IGltYWdlcyBhcmUgaW4gdXNlIGxpa2UgX3B4LmpwZy4uLgorICAgICAq
IEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlmIG1pcG1hcHMgc2hvdWxkIGJlIGNyZWF0ZWQgb3Ig
bm90CisgICAgICogQHBhcmFtIGZpbGVzIGRlZmluZXMgdGhlIHNpeCBmaWxlcyB0byBsb2FkIGZv
ciB0aGUgZGlmZmVyZW50IGZhY2VzIGluIHRoYXQgb3JkZXI6IHB4LCBweSwgcHosIG54LCBueSwg
bnoKKyAgICAgKiBAcGFyYW0gb25Mb2FkIGRlZmluZXMgYSBjYWxsYmFjayB0cmlnZ2VyZWQgYXQg
dGhlIGVuZCBvZiB0aGUgZmlsZSBsb2FkIGlmIG5vIGVycm9ycyBvY2N1cmVkCisgICAgICogQHBh
cmFtIG9uRXJyb3IgZGVmaW5lcyBhIGNhbGxiYWNrIHRyaWdnZXJlZCBpbiBjYXNlIG9mIGVycm9y
IGR1cmluZyBsb2FkCisgICAgICogQHBhcmFtIGZvcm1hdCBkZWZpbmVzIHRoZSBpbnRlcm5hbCBm
b3JtYXQgdG8gdXNlIGZvciB0aGUgdGV4dHVyZSBvbmNlIGxvYWRlZAorICAgICAqIEBwYXJhbSBw
cmVmaWx0ZXJlZCBkZWZpbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGNyZWF0ZWQg
ZnJvbSBwcmVmaWx0ZXJlZCBkYXRhCisgICAgICogQHBhcmFtIGZvcmNlZEV4dGVuc2lvbiBkZWZp
bmVzIHRoZSBleHRlbnNpb25zIHRvIHVzZSAoZm9yY2UgYSBzcGVjaWFsIHR5cGUgb2YgZmlsZSB0
byBsb2FkKSBpbiBjYXNlIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBmaWxlIG5hbWUKKyAgICAg
KiBAcGFyYW0gY3JlYXRlUG9seW5vbWlhbHMgZGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBjcmVh
dGUgcG9seW5vbWlhbCBoYXJtb25pY3MgZnJvbSB0aGUgdGV4dHVyZSBkYXRhIGlmIG5lY2Vzc2Fy
eQorICAgICAqIEBwYXJhbSBsb2RTY2FsZSBkZWZpbmVzIHRoZSBzY2FsZSBhcHBsaWVkIHRvIGVu
dmlyb25tZW50IHRleHR1cmUuIFRoaXMgbWFuYWdlcyB0aGUgcmFuZ2Ugb2YgTE9EIGxldmVsIHVz
ZWQgZm9yIElCTCBhY2NvcmRpbmcgdG8gdGhlIHJvdWdobmVzcworICAgICAqIEBwYXJhbSBsb2RP
ZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGFwcGxpZWQgdG8gZW52aXJvbm1lbnQgdGV4dHVyZS4g
VGhpcyBtYW5hZ2VzIGZpcnN0IExPRCBsZXZlbCB1c2VkIGZvciBJQkwgYWNjb3JkaW5nIHRvIHRo
ZSByb3VnaG5lc3MKKyAgICAgKiBAcmV0dXJuIHRoZSBjdWJlIHRleHR1cmUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBDdWJlVGV4dHVyZShyb290VXJsLCBzY2VuZSwgZXh0ZW5zaW9ucywgbm9NaXBt
YXAsIGZpbGVzLCBvbkxvYWQsIG9uRXJyb3IsIGZvcm1hdCwgcHJlZmlsdGVyZWQsIGZvcmNlZEV4
dGVuc2lvbiwgY3JlYXRlUG9seW5vbWlhbHMsIGxvZFNjYWxlLCBsb2RPZmZzZXQpIHsKKyAgICAg
ICAgaWYgKGV4dGVuc2lvbnMgPT09IHZvaWQgMCkgeyBleHRlbnNpb25zID0gbnVsbDsgfQorICAg
ICAgICBpZiAobm9NaXBtYXAgPT09IHZvaWQgMCkgeyBub01pcG1hcCA9IGZhbHNlOyB9CisgICAg
ICAgIGlmIChmaWxlcyA9PT0gdm9pZCAwKSB7IGZpbGVzID0gbnVsbDsgfQorICAgICAgICBpZiAo
b25Mb2FkID09PSB2b2lkIDApIHsgb25Mb2FkID0gbnVsbDsgfQorICAgICAgICBpZiAob25FcnJv
ciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBudWxsOyB9CisgICAgICAgIGlmIChmb3JtYXQgPT09
IHZvaWQgMCkgeyBmb3JtYXQgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBOyB9CisgICAgICAgIGlm
IChwcmVmaWx0ZXJlZCA9PT0gdm9pZCAwKSB7IHByZWZpbHRlcmVkID0gZmFsc2U7IH0KKyAgICAg
ICAgaWYgKGZvcmNlZEV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IGZvcmNlZEV4dGVuc2lvbiA9IG51
bGw7IH0KKyAgICAgICAgaWYgKGNyZWF0ZVBvbHlub21pYWxzID09PSB2b2lkIDApIHsgY3JlYXRl
UG9seW5vbWlhbHMgPSBmYWxzZTsgfQorICAgICAgICBpZiAobG9kU2NhbGUgPT09IHZvaWQgMCkg
eyBsb2RTY2FsZSA9IDAuODsgfQorICAgICAgICBpZiAobG9kT2Zmc2V0ID09PSB2b2lkIDApIHsg
bG9kT2Zmc2V0ID0gMDsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBz
Y2VuZSkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUg
Y2VudGVyIG9mIHRoZSBib3VuZGluZyBib3ggYXNzb2NpYXRlZCB3aXRoIHRoZSBjdWJlIHRleHR1
cmUuCisgICAgICAgICAqIEl0IG11c3QgZGVmaW5lIHdoZXJlIHRoZSBjYW1lcmEgdXNlZCB0byBy
ZW5kZXIgdGhlIHRleHR1cmUgd2FzIHNldAorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vcmVmbGVjdCN1c2luZy1sb2NhbC1jdWJlbWFwLW1vZGUKKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLmJvdW5kaW5nQm94UG9zaXRpb24gPSBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAg
ICAgICAgX3RoaXMuX3JvdGF0aW9uWSA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAg
ICAgIF90aGlzLl9wcmVmaWx0ZXJlZCA9IGZhbHNlOworICAgICAgICBfdGhpcy5uYW1lID0gcm9v
dFVybDsKKyAgICAgICAgX3RoaXMudXJsID0gcm9vdFVybDsKKyAgICAgICAgX3RoaXMuX25vTWlw
bWFwID0gbm9NaXBtYXA7CisgICAgICAgIF90aGlzLmhhc0FscGhhID0gZmFsc2U7CisgICAgICAg
IF90aGlzLl9mb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIF90aGlzLmlzQ3ViZSA9IHRydWU7Cisg
ICAgICAgIF90aGlzLl90ZXh0dXJlTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgICAgIF90aGlz
Ll9jcmVhdGVQb2x5bm9taWFscyA9IGNyZWF0ZVBvbHlub21pYWxzOworICAgICAgICBfdGhpcy5j
b29yZGluYXRlc01vZGUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siVGV4dHVyZSJdLkNVQklDX01PREU7CisgICAgICAgIGlmICghcm9v
dFVybCAmJiAhZmlsZXMpIHsKKyAgICAgICAgICAgIHJldHVybiBfdGhpczsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgbGFzdERvdCA9IHJvb3RVcmwubGFzdEluZGV4T2YoIi4iKTsKKyAgICAgICAg
dmFyIGV4dGVuc2lvbiA9IGZvcmNlZEV4dGVuc2lvbiA/IGZvcmNlZEV4dGVuc2lvbiA6IChsYXN0
RG90ID4gLTEgPyByb290VXJsLnN1YnN0cmluZyhsYXN0RG90KS50b0xvd2VyQ2FzZSgpIDogIiIp
OworICAgICAgICB2YXIgaXNERFMgPSAoZXh0ZW5zaW9uID09PSAiLmRkcyIpOworICAgICAgICB2
YXIgaXNFbnYgPSAoZXh0ZW5zaW9uID09PSAiLmVudiIpOworICAgICAgICBpZiAoaXNFbnYpIHsK
KyAgICAgICAgICAgIF90aGlzLmdhbW1hU3BhY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIF90aGlz
Ll9wcmVmaWx0ZXJlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgX3RoaXMuX3ByZWZpbHRlcmVkID0gcHJlZmlsdGVyZWQ7CisgICAgICAgICAgICBpZiAo
cHJlZmlsdGVyZWQpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5nYW1tYVNwYWNlID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgX3RoaXMuX3RleHR1cmUgPSBfdGhp
cy5fZ2V0RnJvbUNhY2hlKHJvb3RVcmwsIG5vTWlwbWFwKTsKKyAgICAgICAgaWYgKCFmaWxlcykg
eworICAgICAgICAgICAgaWYgKCFpc0VudiAmJiAhaXNERFMgJiYgIWV4dGVuc2lvbnMpIHsKKyAg
ICAgICAgICAgICAgICBleHRlbnNpb25zID0gWyJfcHguanBnIiwgIl9weS5qcGciLCAiX3B6Lmpw
ZyIsICJfbnguanBnIiwgIl9ueS5qcGciLCAiX256LmpwZyJdOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZmlsZXMgPSBbXTsKKyAgICAgICAgICAgIGlmIChleHRlbnNpb25zKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGV4dGVuc2lvbnMubGVuZ3Ro
OyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbGVzLnB1c2gocm9vdFVybCArIGV4
dGVuc2lvbnNbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgX3RoaXMuX2ZpbGVzID0gZmlsZXM7CisgICAgICAgIGlmICghX3RoaXMu
X3RleHR1cmUpIHsKKyAgICAgICAgICAgIGlmICghc2NlbmUudXNlRGVsYXllZFRleHR1cmVMb2Fk
aW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWZpbHRlcmVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl90ZXh0dXJlID0gc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlUHJlZmlsdGVy
ZWRDdWJlVGV4dHVyZShyb290VXJsLCBzY2VuZSwgbG9kU2NhbGUsIGxvZE9mZnNldCwgb25Mb2Fk
LCBvbkVycm9yLCBmb3JtYXQsIGZvcmNlZEV4dGVuc2lvbiwgX3RoaXMuX2NyZWF0ZVBvbHlub21p
YWxzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlID0gc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlQ3Vi
ZVRleHR1cmUocm9vdFVybCwgc2NlbmUsIGZpbGVzLCBub01pcG1hcCwgb25Mb2FkLCBvbkVycm9y
LCBfdGhpcy5fZm9ybWF0LCBmb3JjZWRFeHRlbnNpb24sIGZhbHNlLCBsb2RTY2FsZSwgbG9kT2Zm
c2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBfdGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5ERUxBWUxPQURT
VEFURV9OT1RMT0FERUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAob25Mb2FkKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuX3RleHR1cmUuaXNSZWFkeSkgewor
ICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlRvb2xzIl0uU2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uTG9hZCgpOyB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIF90aGlz
Ll90ZXh0dXJlLm9uTG9hZGVkT2JzZXJ2YWJsZS5hZGQob25Mb2FkKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShDdWJlVGV4dHVyZS5wcm90b3R5cGUsICJib3VuZGluZ0JveFNpemUiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBib3VuZGluZyBib3ggc2l6ZQorICAg
ICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcmVmbGVjdCN1c2lu
Zy1sb2NhbC1jdWJlbWFwLW1vZGUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kaW5nQm94U2l6ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgc2l6ZSBvZiB0aGUg
Ym91bmRpbmcgYm94IGFzc29jaWF0ZWQgd2l0aCB0aGUgY3ViZSB0ZXh0dXJlCisgICAgICAgICAq
IFdoZW4gZGVmaW5lZCwgdGhlIGN1YmVtYXAgd2lsbCBzd2l0Y2ggdG8gbG9jYWwgbW9kZQorICAg
ICAgICAgKiBAc2VlIGh0dHBzOi8vY29tbXVuaXR5LmFybS5jb20vZ3JhcGhpY3MvYi9ibG9nL3Bv
c3RzL3JlZmxlY3Rpb25zLWJhc2VkLW9uLWxvY2FsLWN1YmVtYXBzLWluLXVuaXR5CisgICAgICAg
ICAqIEBleGFtcGxlIGh0dHBzOi8vd3d3LmJhYnlsb25qcy1wbGF5Z3JvdW5kLmNvbS8jUk5BU01M
CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX2JvdW5kaW5nQm94U2l6ZSAmJiB0aGlzLl9ib3VuZGluZ0JveFNpemUuZXF1
YWxzKHZhbHVlKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX2JvdW5kaW5nQm94U2l6ZSA9IHZhbHVlOworICAgICAgICAgICAgdmFy
IHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICAgICAgaWYgKHNjZW5lKSB7CisgICAg
ICAgICAgICAgICAgc2NlbmUubWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1Rl
eHR1cmVEaXJ0eUZsYWcpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQ3ViZVRleHR1cmUucHJvdG90eXBlLCAicm90YXRpb25ZIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0ZXh0dXJlIG1hdHJpeCByb3RhdGlvbiBh
bmdsZSBhcm91bmQgWSBheGlzIHJhZGlhbnMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvblk7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRleHR1cmUgbWF0cml4IHJvdGF0aW9u
IGFuZ2xlIGFyb3VuZCBZIGF4aXMgaW4gcmFkaWFucy4KKyAgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9yb3RhdGlvblkgPSB2YWx1
ZTsKKyAgICAgICAgICAgIHRoaXMuc2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXgoX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLlJvdGF0aW9u
WSh0aGlzLl9yb3RhdGlvblkpKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEN1YmVUZXh0dXJlLnByb3RvdHlwZSwgIm5vTWlwbWFwIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogQXJlIG1pcCBtYXBzIGdlbmVyYXRlZCBmb3IgdGhpcyB0ZXh0dXJlIG9y
IG5vdC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX25vTWlwbWFwOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgY3ViZSB0ZXh0dXJlIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgdXJscwor
ICAgICAqIEBwYXJhbSBmaWxlcyBkZWZpbmVzIGFuIGFycmF5IG9mIGltYWdlIHVybHMKKyAgICAg
KiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSBu
b01pcG1hcCBzcGVjaWZpZXMgaWYgbWlwIG1hcHMgYXJlIG5vdCB1c2VkCisgICAgICogQHJldHVy
bnMgYSBjdWJlIHRleHR1cmUKKyAgICAgKi8KKyAgICBDdWJlVGV4dHVyZS5DcmVhdGVGcm9tSW1h
Z2VzID0gZnVuY3Rpb24gKGZpbGVzLCBzY2VuZSwgbm9NaXBtYXApIHsKKyAgICAgICAgdmFyIHJv
b3RVcmxLZXkgPSAiIjsKKyAgICAgICAgZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAodXJsKSB7IHJl
dHVybiByb290VXJsS2V5ICs9IHVybDsgfSk7CisgICAgICAgIHJldHVybiBuZXcgQ3ViZVRleHR1
cmUocm9vdFVybEtleSwgc2NlbmUsIG51bGwsIG5vTWlwbWFwLCBmaWxlcyk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGFuZCByZXR1cm4gYSB0ZXh0dXJlIGNyZWF0ZWQgZnJvbSBw
cmVmaWx0ZXJkIGRhdGEgYnkgdG9vbHMgbGlrZSBJQkwgQmFrZXIgb3IgTHlzLgorICAgICAqIEBw
YXJhbSB1cmwgZGVmaW5lcyB0aGUgdXJsIG9mIHRoZSBwcmVmaWx0ZXJlZCB0ZXh0dXJlCisgICAg
ICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIHNjZW5lIHRoZSB0ZXh0dXJlIGlzIGF0dGFjaGVk
IHRvCisgICAgICogQHBhcmFtIGZvcmNlZEV4dGVuc2lvbiBkZWZpbmVzIHRoZSBleHRlbnNpb24g
b2YgdGhlIGZpbGUgaWYgZGlmZmVyZW50IGZyb20gdGhlIHVybAorICAgICAqIEBwYXJhbSBjcmVh
dGVQb2x5bm9taWFscyBkZWZpbmVzIHdoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSBwb2x5bm9taWFs
IGhhcm1vbmljcyBmcm9tIHRoZSB0ZXh0dXJlIGRhdGEgaWYgbmVjZXNzYXJ5CisgICAgICogQHJl
dHVybiB0aGUgcHJlZmlsdGVyZWQgdGV4dHVyZQorICAgICAqLworICAgIEN1YmVUZXh0dXJlLkNy
ZWF0ZUZyb21QcmVmaWx0ZXJlZERhdGEgPSBmdW5jdGlvbiAodXJsLCBzY2VuZSwgZm9yY2VkRXh0
ZW5zaW9uLCBjcmVhdGVQb2x5bm9taWFscykgeworICAgICAgICBpZiAoZm9yY2VkRXh0ZW5zaW9u
ID09PSB2b2lkIDApIHsgZm9yY2VkRXh0ZW5zaW9uID0gbnVsbDsgfQorICAgICAgICBpZiAoY3Jl
YXRlUG9seW5vbWlhbHMgPT09IHZvaWQgMCkgeyBjcmVhdGVQb2x5bm9taWFscyA9IHRydWU7IH0K
KyAgICAgICAgcmV0dXJuIG5ldyBDdWJlVGV4dHVyZSh1cmwsIHNjZW5lLCBudWxsLCBmYWxzZSwg
bnVsbCwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkLCB0cnVlLCBmb3JjZWRFeHRlbnNpb24sIGNyZWF0
ZVBvbHlub21pYWxzKTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdWJlVGV4
dHVyZS5wcm90b3R5cGUsICJpc1ByZWZpbHRlcmVkIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgY3ViZSB0ZXh0dXJlIGNvbnRhaW5z
IHByZWZpbHRlcmVkIG1pcHMgKHVzZWQgdG8gc2ltdWxhdGUgcm91Z2huZXNzIHdpdGggUEJSKQor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fcHJlZmlsdGVyZWQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAq
IEdldCB0aGUgY3VycmVudCBjbGFzcyBuYW1lIG9mIHRoZSB0ZXh0dXJlIHVzZWZ1bCBmb3Igc2Vy
aWFsaXphdGlvbiBvciBkeW5hbWljIGNvZGluZy4KKyAgICAgKiBAcmV0dXJucyAiQ3ViZVRleHR1
cmUiCisgICAgICovCisgICAgQ3ViZVRleHR1cmUucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJDdWJlVGV4dHVyZSI7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBVcGRhdGUgdGhlIHVybCAoYW5kIG9wdGlvbmFsIGJ1ZmZlcikgb2YgdGhpcyB0
ZXh0dXJlIGlmIHVybCB3YXMgbnVsbCBkdXJpbmcgY29uc3RydWN0aW9uLgorICAgICAqIEBwYXJh
bSB1cmwgdGhlIHVybCBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSBmb3JjZWRFeHRlbnNp
b24gZGVmaW5lcyB0aGUgZXh0ZW5zaW9uIHRvIHVzZQorICAgICAqIEBwYXJhbSBvbkxvYWQgY2Fs
bGJhY2sgY2FsbGVkIHdoZW4gdGhlIHRleHR1cmUgaXMgbG9hZGVkICAoZGVmYXVsdHMgdG8gbnVs
bCkKKyAgICAgKi8KKyAgICBDdWJlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlVVJMID0gZnVuY3Rp
b24gKHVybCwgZm9yY2VkRXh0ZW5zaW9uLCBvbkxvYWQpIHsKKyAgICAgICAgaWYgKHRoaXMudXJs
KSB7CisgICAgICAgICAgICB0aGlzLnJlbGVhc2VJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAgICAg
ICAgIHRoaXMuZ2V0U2NlbmUoKS5tYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxf
VGV4dHVyZURpcnR5RmxhZyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5uYW1lID0gdXJsOwor
ICAgICAgICB0aGlzLnVybCA9IHVybDsKKyAgICAgICAgdGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMi
XS5ERUxBWUxPQURTVEFURV9OT1RMT0FERUQ7CisgICAgICAgIHRoaXMuX3ByZWZpbHRlcmVkID0g
ZmFsc2U7CisgICAgICAgIGlmIChvbkxvYWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2RlbGF5ZWRP
bkxvYWQgPSBvbkxvYWQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5kZWxheUxvYWQoZm9yY2Vk
RXh0ZW5zaW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlbGF5cyBsb2FkaW5nIG9mIHRo
ZSBjdWJlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gZm9yY2VkRXh0ZW5zaW9uIGRlZmluZXMgdGhl
IGV4dGVuc2lvbiB0byB1c2UKKyAgICAgKi8KKyAgICBDdWJlVGV4dHVyZS5wcm90b3R5cGUuZGVs
YXlMb2FkID0gZnVuY3Rpb24gKGZvcmNlZEV4dGVuc2lvbikgeworICAgICAgICBpZiAodGhpcy5k
ZWxheUxvYWRTdGF0ZSAhPT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV82X19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNUQVRFX05PVExPQURFRCkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2Nl
bmUoKTsKKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuZGVsYXlMb2FkU3RhdGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uREVMQVlMT0FEU1RBVEVfTE9B
REVEOworICAgICAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fZ2V0RnJvbUNhY2hlKHRoaXMudXJs
LCB0aGlzLl9ub01pcG1hcCk7CisgICAgICAgIGlmICghdGhpcy5fdGV4dHVyZSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX3ByZWZpbHRlcmVkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4
dHVyZSA9IHNjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZVByZWZpbHRlcmVkQ3ViZVRleHR1cmUodGhp
cy51cmwsIHNjZW5lLCB0aGlzLmxvZEdlbmVyYXRpb25TY2FsZSwgdGhpcy5sb2RHZW5lcmF0aW9u
T2Zmc2V0LCB0aGlzLl9kZWxheWVkT25Mb2FkLCB1bmRlZmluZWQsIHRoaXMuX2Zvcm1hdCwgdW5k
ZWZpbmVkLCB0aGlzLl9jcmVhdGVQb2x5bm9taWFscyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gc2NlbmUuZ2V0RW5n
aW5lKCkuY3JlYXRlQ3ViZVRleHR1cmUodGhpcy51cmwsIHNjZW5lLCB0aGlzLl9maWxlcywgdGhp
cy5fbm9NaXBtYXAsIHRoaXMuX2RlbGF5ZWRPbkxvYWQsIG51bGwsIHRoaXMuX2Zvcm1hdCwgZm9y
Y2VkRXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogUmV0dXJucyB0aGUgcmVmbGVjdGlvbiB0ZXh0dXJlIG1hdHJpeAorICAgICAqIEBy
ZXR1cm5zIHRoZSByZWZsZWN0aW9uIHRleHR1cmUgbWF0cml4CisgICAgICovCisgICAgQ3ViZVRl
eHR1cmUucHJvdG90eXBlLmdldFJlZmxlY3Rpb25UZXh0dXJlTWF0cml4ID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZU1hdHJpeDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldHMgdGhlIHJlZmxlY3Rpb24gdGV4dHVyZSBtYXRyaXgKKyAgICAgKiBAcGFyYW0g
dmFsdWUgUmVmbGVjdGlvbiB0ZXh0dXJlIG1hdHJpeAorICAgICAqLworICAgIEN1YmVUZXh0dXJl
LnByb3RvdHlwZS5zZXRSZWZsZWN0aW9uVGV4dHVyZU1hdHJpeCA9IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodmFsdWUudXBkYXRlRmxh
ZyA9PT0gdGhpcy5fdGV4dHVyZU1hdHJpeC51cGRhdGVGbGFnKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLmlzSWRlbnRpdHkoKSAhPT0gdGhpcy5f
dGV4dHVyZU1hdHJpeC5pc0lkZW50aXR5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuZ2V0U2NlbmUo
KS5tYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZywg
ZnVuY3Rpb24gKG1hdCkgeyByZXR1cm4gbWF0LmdldEFjdGl2ZVRleHR1cmVzKCkuaW5kZXhPZihf
dGhpcykgIT09IC0xOyB9KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl90ZXh0dXJlTWF0cml4
ID0gdmFsdWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgdGV4dCB0byBjcmVhdGUg
YSBjdWJlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gcGFyc2VkVGV4dHVyZSBkZWZpbmUgdGhlIHNl
cmlhbGl6ZWQgdGV4dCB0byByZWFkIGZyb20KKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0
aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSByb290VXJsIGRlZmluZXMgdGhlIHJvb3Qg
dXJsIG9mIHRoZSBjdWJlIHRleHR1cmUKKyAgICAgKiBAcmV0dXJucyBhIGN1YmUgdGV4dHVyZQor
ICAgICAqLworICAgIEN1YmVUZXh0dXJlLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZFRleHR1cmUs
IHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIHZhciB0ZXh0dXJlID0gX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uUGFy
c2UoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHByZWZpbHRlcmVkID0gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAocGFyc2VkVGV4dHVyZS5wcmVmaWx0ZXJlZCkgeworICAgICAgICAgICAg
ICAgIHByZWZpbHRlcmVkID0gcGFyc2VkVGV4dHVyZS5wcmVmaWx0ZXJlZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBuZXcgQ3ViZVRleHR1cmUocm9vdFVybCArIHBhcnNlZFRl
eHR1cmUubmFtZSwgc2NlbmUsIHBhcnNlZFRleHR1cmUuZXh0ZW5zaW9ucywgZmFsc2UsIHBhcnNl
ZFRleHR1cmUuZmlsZXMgfHwgbnVsbCwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkLCBwcmVmaWx0ZXJl
ZCk7CisgICAgICAgIH0sIHBhcnNlZFRleHR1cmUsIHNjZW5lKTsKKyAgICAgICAgLy8gTG9jYWwg
Q3ViZW1hcHMKKyAgICAgICAgaWYgKHBhcnNlZFRleHR1cmUuYm91bmRpbmdCb3hQb3NpdGlvbikg
eworICAgICAgICAgICAgdGV4dHVyZS5ib3VuZGluZ0JveFBvc2l0aW9uID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXko
cGFyc2VkVGV4dHVyZS5ib3VuZGluZ0JveFBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocGFyc2VkVGV4dHVyZS5ib3VuZGluZ0JveFNpemUpIHsKKyAgICAgICAgICAgIHRleHR1cmUu
Ym91bmRpbmdCb3hTaXplID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocGFyc2VkVGV4dHVyZS5ib3VuZGluZ0JveFNp
emUpOworICAgICAgICB9CisgICAgICAgIC8vIEFuaW1hdGlvbnMKKyAgICAgICAgaWYgKHBhcnNl
ZFRleHR1cmUuYW5pbWF0aW9ucykgeworICAgICAgICAgICAgZm9yICh2YXIgYW5pbWF0aW9uSW5k
ZXggPSAwOyBhbmltYXRpb25JbmRleCA8IHBhcnNlZFRleHR1cmUuYW5pbWF0aW9ucy5sZW5ndGg7
IGFuaW1hdGlvbkluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkQW5pbWF0aW9u
ID0gcGFyc2VkVGV4dHVyZS5hbmltYXRpb25zW2FuaW1hdGlvbkluZGV4XTsKKyAgICAgICAgICAg
ICAgICB2YXIgaW50ZXJuYWxDbGFzcyA9IF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJfVHlwZVN0b3JlIl0uR2V0Q2xhc3MoIkJBQllMT04uQW5pbWF0aW9uIik7
CisgICAgICAgICAgICAgICAgaWYgKGludGVybmFsQ2xhc3MpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS5hbmltYXRpb25zLnB1c2goaW50ZXJuYWxDbGFzcy5QYXJzZShwYXJzZWRBbmlt
YXRpb24pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNYWtlcyBhIGNs
b25lLCBvciBkZWVwIGNvcHksIG9mIHRoZSBjdWJlIHRleHR1cmUKKyAgICAgKiBAcmV0dXJucyBh
IG5ldyBjdWJlIHRleHR1cmUKKyAgICAgKi8KKyAgICBDdWJlVGV4dHVyZS5wcm90b3R5cGUuY2xv
bmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZh
ciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgdmFyIHVuaXF1ZUlkID0gMDsKKyAg
ICAgICAgdmFyIG5ld0N1YmVUZXh0dXJlID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uQ2xvbmUoZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjdWJlVGV4dHVyZSA9IG5ldyBDdWJl
VGV4dHVyZShfdGhpcy51cmwsIHNjZW5lLCBfdGhpcy5fZXh0ZW5zaW9ucywgX3RoaXMuX25vTWlw
bWFwLCBfdGhpcy5fZmlsZXMpOworICAgICAgICAgICAgdW5pcXVlSWQgPSBjdWJlVGV4dHVyZS51
bmlxdWVJZDsKKyAgICAgICAgICAgIHJldHVybiBjdWJlVGV4dHVyZTsKKyAgICAgICAgfSwgdGhp
cyk7CisgICAgICAgIG5ld0N1YmVUZXh0dXJlLnVuaXF1ZUlkID0gdW5pcXVlSWQ7CisgICAgICAg
IHJldHVybiBuZXdDdWJlVGV4dHVyZTsKKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgicm90YXRp
b25ZIikKKyAgICBdLCBDdWJlVGV4dHVyZS5wcm90b3R5cGUsICJyb3RhdGlvblkiLCBudWxsKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemUiXSkoImZpbGVzIikKKyAgICBdLCBDdWJlVGV4dHVyZS5wcm90b3R5cGUs
ICJfZmlsZXMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzTWF0cml4Il0pKCJ0ZXh0dXJlTWF0
cml4IikKKyAgICBdLCBDdWJlVGV4dHVyZS5wcm90b3R5cGUsICJfdGV4dHVyZU1hdHJpeCIsIHZv
aWQgMCk7CisgICAgcmV0dXJuIEN1YmVUZXh0dXJlOworfShfTWF0ZXJpYWxzX1RleHR1cmVzX2Jh
c2VUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkJhc2VUZXh0dXJlIl0pKTsK
KworX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIlRleHR1cmUiXS5fQ3ViZVRleHR1cmVQYXJzZXIgPSBDdWJlVGV4dHVyZS5QYXJzZTsKKy8v
IFNvbWUgZXhwb3J0ZXJzIHJlbGllcyBvbiBUb29scy5JbnN0YW50aWF0ZQorX01pc2NfdHlwZVN0
b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVk
VHlwZXNbIkJBQllMT04uQ3ViZVRleHR1cmUiXSA9IEN1YmVUZXh0dXJlOworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvZHluYW1pY1RleHR1cmUudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTWF0ZXJpYWxzL1RleHR1cmVzL2R5bmFtaWNUZXh0dXJlLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogRHluYW1pY1RleHR1cmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiRHluYW1pY1RleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIER5bmFtaWNUZXh0dXJlOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxl
cy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19s
b2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMv
VGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKworCisKKworLyoqCisgKiBB
IGNsYXNzIGV4dGVuZGluZyBUZXh0dXJlIGFsbG93aW5nIGRyYXdpbmcgb24gYSB0ZXh0dXJlCisg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vZHluYW1pY3RleHR1cmUKKyAq
LwordmFyIER5bmFtaWNUZXh0dXJlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikg
eworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKER5
bmFtaWNUZXh0dXJlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBEeW5hbWlj
VGV4dHVyZQorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHRleHR1
cmUKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBwcm92aWRlcyAzIGFsdGVybmF0aXZlcyBmb3Igd2lk
dGggYW5kIGhlaWdodCBvZiB0ZXh0dXJlLCBhIGNhbnZhcywgb2JqZWN0IHdpdGggd2lkdGggYW5k
IGhlaWdodCBwcm9wZXJ0aWVzLCBudW1iZXIgZm9yIGJvdGggd2lkdGggYW5kIGhlaWdodAorICAg
ICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB3aGVyZSB5b3Ugd2FudCB0aGUgdGV4
dHVyZQorICAgICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMgZGVmaW5lcyB0aGUgdXNlIG9mIE1p
bk1hcHMgb3Igbm90IChkZWZhdWx0IGlzIGZhbHNlKQorICAgICAqIEBwYXJhbSBzYW1wbGluZ01v
ZGUgZGVmaW5lcyB0aGUgc2FtcGxpbmcgbW9kZSB0byB1c2UgKGRlZmF1bHQgaXMgVGV4dHVyZS5U
UklMSU5FQVJfU0FNUExJTkdNT0RFKQorICAgICAqIEBwYXJhbSBmb3JtYXQgZGVmaW5lcyB0aGUg
dGV4dHVyZSBmb3JtYXQgdG8gdXNlIChkZWZhdWx0IGlzIEVuZ2luZS5URVhUVVJFRk9STUFUX1JH
QkEpCisgICAgICovCisgICAgZnVuY3Rpb24gRHluYW1pY1RleHR1cmUobmFtZSwgb3B0aW9ucywg
c2NlbmUsIGdlbmVyYXRlTWlwTWFwcywgc2FtcGxpbmdNb2RlLCBmb3JtYXQpIHsKKyAgICAgICAg
aWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIGlmIChzYW1w
bGluZ01vZGUgPT09IHZvaWQgMCkgeyBzYW1wbGluZ01vZGUgPSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9UUklMSU5F
QVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIGlmIChmb3JtYXQgPT09IHZvaWQgMCkgeyBmb3Jt
YXQgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIG51bGwsIHNjZW5lLCAhZ2VuZXJhdGVNaXBNYXBzLCB1bmRlZmluZWQsIHNh
bXBsaW5nTW9kZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBm
b3JtYXQpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLm5hbWUgPSBuYW1lOworICAgICAgICBfdGhp
cy5fZW5naW5lID0gX3RoaXMuZ2V0U2NlbmUoKS5nZXRFbmdpbmUoKTsKKyAgICAgICAgX3RoaXMu
d3JhcFUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICBfdGhpcy53cmFw
ViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgIF90aGlzLl9nZW5lcmF0
ZU1pcE1hcHMgPSBnZW5lcmF0ZU1pcE1hcHM7CisgICAgICAgIGlmIChvcHRpb25zLmdldENvbnRl
eHQpIHsKKyAgICAgICAgICAgIF90aGlzLl9jYW52YXMgPSBvcHRpb25zOworICAgICAgICAgICAg
X3RoaXMuX3RleHR1cmUgPSBfdGhpcy5fZW5naW5lLmNyZWF0ZUR5bmFtaWNUZXh0dXJlKG9wdGlv
bnMud2lkdGgsIG9wdGlvbnMuaGVpZ2h0LCBnZW5lcmF0ZU1pcE1hcHMsIHNhbXBsaW5nTW9kZSk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfdGhpcy5fY2FudmFzID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgICAgICAgICBpZiAob3B0aW9u
cy53aWR0aCB8fCBvcHRpb25zLndpZHRoID09PSAwKSB7CisgICAgICAgICAgICAgICAgX3RoaXMu
X3RleHR1cmUgPSBfdGhpcy5fZW5naW5lLmNyZWF0ZUR5bmFtaWNUZXh0dXJlKG9wdGlvbnMud2lk
dGgsIG9wdGlvbnMuaGVpZ2h0LCBnZW5lcmF0ZU1pcE1hcHMsIHNhbXBsaW5nTW9kZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdGV4
dHVyZSA9IF90aGlzLl9lbmdpbmUuY3JlYXRlRHluYW1pY1RleHR1cmUob3B0aW9ucywgb3B0aW9u
cywgZ2VuZXJhdGVNaXBNYXBzLCBzYW1wbGluZ01vZGUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHZhciB0ZXh0dXJlU2l6ZSA9IF90aGlzLmdldFNpemUoKTsKKyAgICAgICAg
X3RoaXMuX2NhbnZhcy53aWR0aCA9IHRleHR1cmVTaXplLndpZHRoOworICAgICAgICBfdGhpcy5f
Y2FudmFzLmhlaWdodCA9IHRleHR1cmVTaXplLmhlaWdodDsKKyAgICAgICAgX3RoaXMuX2NvbnRl
eHQgPSBfdGhpcy5fY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXJyZW50IGNsYXNzIG5hbWUgb2Yg
dGhlIHRleHR1cmUgdXNlZnVsIGZvciBzZXJpYWxpemF0aW9uIG9yIGR5bmFtaWMgY29kaW5nLgor
ICAgICAqIEByZXR1cm5zICJEeW5hbWljVGV4dHVyZSIKKyAgICAgKi8KKyAgICBEeW5hbWljVGV4
dHVyZS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gIkR5bmFtaWNUZXh0dXJlIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShE
eW5hbWljVGV4dHVyZS5wcm90b3R5cGUsICJjYW5SZXNjYWxlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBjYW5SZXNjYWxlCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBEeW5hbWljVGV4dHVyZS5wcm90b3R5cGUuX3JlY3JlYXRl
ID0gZnVuY3Rpb24gKHRleHR1cmVTaXplKSB7CisgICAgICAgIHRoaXMuX2NhbnZhcy53aWR0aCA9
IHRleHR1cmVTaXplLndpZHRoOworICAgICAgICB0aGlzLl9jYW52YXMuaGVpZ2h0ID0gdGV4dHVy
ZVNpemUuaGVpZ2h0OworICAgICAgICB0aGlzLnJlbGVhc2VJbnRlcm5hbFRleHR1cmUoKTsKKyAg
ICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX2VuZ2luZS5jcmVhdGVEeW5hbWljVGV4dHVyZSh0
ZXh0dXJlU2l6ZS53aWR0aCwgdGV4dHVyZVNpemUuaGVpZ2h0LCB0aGlzLl9nZW5lcmF0ZU1pcE1h
cHMsIHRoaXMuc2FtcGxpbmdNb2RlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNjYWxlcyB0
aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSByYXRpbyB0aGUgc2NhbGUgZmFjdG9yIHRvIGFwcGx5
IHRvIGJvdGggd2lkdGggYW5kIGhlaWdodAorICAgICAqLworICAgIER5bmFtaWNUZXh0dXJlLnBy
b3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uIChyYXRpbykgeworICAgICAgICB2YXIgdGV4dHVyZVNp
emUgPSB0aGlzLmdldFNpemUoKTsKKyAgICAgICAgdGV4dHVyZVNpemUud2lkdGggKj0gcmF0aW87
CisgICAgICAgIHRleHR1cmVTaXplLmhlaWdodCAqPSByYXRpbzsKKyAgICAgICAgdGhpcy5fcmVj
cmVhdGUodGV4dHVyZVNpemUpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVzaXplcyB0aGUg
dGV4dHVyZQorICAgICAqIEBwYXJhbSB3aWR0aCB0aGUgbmV3IHdpZHRoCisgICAgICogQHBhcmFt
IGhlaWdodCB0aGUgbmV3IGhlaWdodAorICAgICAqLworICAgIER5bmFtaWNUZXh0dXJlLnByb3Rv
dHlwZS5zY2FsZVRvID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgdmFyIHRl
eHR1cmVTaXplID0gdGhpcy5nZXRTaXplKCk7CisgICAgICAgIHRleHR1cmVTaXplLndpZHRoID0g
d2lkdGg7CisgICAgICAgIHRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgdGhp
cy5fcmVjcmVhdGUodGV4dHVyZVNpemUpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0
aGUgY29udGV4dCBvZiB0aGUgY2FudmFzIHVzZWQgYnkgdGhlIHRleHR1cmUKKyAgICAgKiBAcmV0
dXJucyB0aGUgY2FudmFzIGNvbnRleHQgb2YgdGhlIGR5bmFtaWMgdGV4dHVyZQorICAgICAqLwor
ICAgIER5bmFtaWNUZXh0dXJlLnByb3RvdHlwZS5nZXRDb250ZXh0ID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENs
ZWFycyB0aGUgdGV4dHVyZQorICAgICAqLworICAgIER5bmFtaWNUZXh0dXJlLnByb3RvdHlwZS5j
bGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNpemUgPSB0aGlzLmdldFNpemUoKTsK
KyAgICAgICAgdGhpcy5fY29udGV4dC5maWxsUmVjdCgwLCAwLCBzaXplLndpZHRoLCBzaXplLmhl
aWdodCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSB0ZXh0dXJlCisgICAg
ICogQHBhcmFtIGludmVydFkgZGVmaW5lcyB0aGUgZGlyZWN0aW9uIGZvciB0aGUgWSBheGlzIChk
ZWZhdWx0IGlzIHRydWUgLSB5IGluY3JlYXNlcyBkb3dud2FyZHMpCisgICAgICogQHBhcmFtIHBy
ZW11bEFscGhhIGRlZmluZXMgaWYgYWxwaGEgaXMgc3RvcmVkIGFzIHByZW11bHRpcGxpZWQgKGRl
ZmF1bHQgaXMgZmFsc2UpCisgICAgICovCisgICAgRHluYW1pY1RleHR1cmUucHJvdG90eXBlLnVw
ZGF0ZSA9IGZ1bmN0aW9uIChpbnZlcnRZLCBwcmVtdWxBbHBoYSkgeworICAgICAgICBpZiAocHJl
bXVsQWxwaGEgPT09IHZvaWQgMCkgeyBwcmVtdWxBbHBoYSA9IGZhbHNlOyB9CisgICAgICAgIHRo
aXMuX2VuZ2luZS51cGRhdGVEeW5hbWljVGV4dHVyZSh0aGlzLl90ZXh0dXJlLCB0aGlzLl9jYW52
YXMsIGludmVydFkgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBpbnZlcnRZLCBwcmVtdWxBbHBoYSwg
dGhpcy5fZm9ybWF0IHx8IHVuZGVmaW5lZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEcmF3
cyB0ZXh0IG9udG8gdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gdGV4dCBkZWZpbmVzIHRoZSB0
ZXh0IHRvIGJlIGRyYXduCisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgcGxhY2VtZW50IG9m
IHRoZSB0ZXh0IGZyb20gdGhlIGxlZnQKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSBwbGFj
ZW1lbnQgb2YgdGhlIHRleHQgZnJvbSB0aGUgdG9wIHdoZW4gaW52ZXJ0WSBpcyB0cnVlIGFuZCBm
cm9tIHRoZSBib3R0b20gd2hlbiBmYWxzZQorICAgICAqIEBwYXJhbSBmb250IGRlZmluZXMgdGhl
IGZvbnQgdG8gYmUgdXNlZCB3aXRoIGZvbnQtc3R5bGUsIGZvbnQtc2l6ZSwgZm9udC1uYW1lCisg
ICAgICogQHBhcmFtIGNvbG9yIGRlZmluZXMgdGhlIGNvbG9yIHVzZWQgZm9yIHRoZSB0ZXh0Cisg
ICAgICogQHBhcmFtIGNsZWFyQ29sb3IgZGVmaW5lcyB0aGUgY29sb3IgZm9yIHRoZSBjYW52YXMs
IHVzZSBudWxsIHRvIG5vdCBvdmVyd3JpdGUgY2FudmFzCisgICAgICogQHBhcmFtIGludmVydFkg
ZGVmaW5lcyB0aGUgZGlyZWN0aW9uIGZvciB0aGUgWSBheGlzIChkZWZhdWx0IGlzIHRydWUgLSB5
IGluY3JlYXNlcyBkb3dud2FyZHMpCisgICAgICogQHBhcmFtIHVwZGF0ZSBkZWZpbmVzIHdoZXRo
ZXIgdGV4dHVyZSBpcyBpbW1lZGlhdGVseSB1cGRhdGUgKGRlZmF1bHQgaXMgdHJ1ZSkKKyAgICAg
Ki8KKyAgICBEeW5hbWljVGV4dHVyZS5wcm90b3R5cGUuZHJhd1RleHQgPSBmdW5jdGlvbiAodGV4
dCwgeCwgeSwgZm9udCwgY29sb3IsIGNsZWFyQ29sb3IsIGludmVydFksIHVwZGF0ZSkgeworICAg
ICAgICBpZiAodXBkYXRlID09PSB2b2lkIDApIHsgdXBkYXRlID0gdHJ1ZTsgfQorICAgICAgICB2
YXIgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpOworICAgICAgICBpZiAoY2xlYXJDb2xvcikgeworICAg
ICAgICAgICAgdGhpcy5fY29udGV4dC5maWxsU3R5bGUgPSBjbGVhckNvbG9yOworICAgICAgICAg
ICAgdGhpcy5fY29udGV4dC5maWxsUmVjdCgwLCAwLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY29udGV4dC5mb250ID0gZm9udDsKKyAgICAgICAg
aWYgKHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICB2YXIgdGV4
dFNpemUgPSB0aGlzLl9jb250ZXh0Lm1lYXN1cmVUZXh0KHRleHQpOworICAgICAgICAgICAgeCA9
IChzaXplLndpZHRoIC0gdGV4dFNpemUud2lkdGgpIC8gMjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoeSA9PT0gbnVsbCB8fCB5ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHZhciBmb250
U2l6ZSA9IHBhcnNlSW50KChmb250LnJlcGxhY2UoL1xEL2csICcnKSkpOworICAgICAgICAgICAg
eSA9IChzaXplLmhlaWdodCAvIDIpICsgKGZvbnRTaXplIC8gMy42NSk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fY29udGV4dC5maWxsU3R5bGUgPSBjb2xvcjsKKyAgICAgICAgdGhpcy5fY29u
dGV4dC5maWxsVGV4dCh0ZXh0LCB4LCB5KTsKKyAgICAgICAgaWYgKHVwZGF0ZSkgeworICAgICAg
ICAgICAgdGhpcy51cGRhdGUoaW52ZXJ0WSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIENsb25lcyB0aGUgdGV4dHVyZQorICAgICAqIEByZXR1cm5zIHRoZSBjbG9uZSBvZiB0
aGUgdGV4dHVyZS4KKyAgICAgKi8KKyAgICBEeW5hbWljVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAg
ICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIHRleHR1cmVTaXplID0gdGhpcy5nZXRTaXplKCk7CisgICAgICAgIHZhciBu
ZXdUZXh0dXJlID0gbmV3IER5bmFtaWNUZXh0dXJlKHRoaXMubmFtZSwgdGV4dHVyZVNpemUsIHNj
ZW5lLCB0aGlzLl9nZW5lcmF0ZU1pcE1hcHMpOworICAgICAgICAvLyBCYXNlIHRleHR1cmUKKyAg
ICAgICAgbmV3VGV4dHVyZS5oYXNBbHBoYSA9IHRoaXMuaGFzQWxwaGE7CisgICAgICAgIG5ld1Rl
eHR1cmUubGV2ZWwgPSB0aGlzLmxldmVsOworICAgICAgICAvLyBEeW5hbWljIFRleHR1cmUKKyAg
ICAgICAgbmV3VGV4dHVyZS53cmFwVSA9IHRoaXMud3JhcFU7CisgICAgICAgIG5ld1RleHR1cmUu
d3JhcFYgPSB0aGlzLndyYXBWOworICAgICAgICByZXR1cm4gbmV3VGV4dHVyZTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGR5bmFtaWMgdGV4dHVyZS4gIFRoZSBzY2Vu
ZSBzaG91bGQgYmUgcmVhZHkgYmVmb3JlIHRoZSBkeW5hbWljIHRleHR1cmUgaXMgc2VyaWFsaXpl
ZAorICAgICAqIEByZXR1cm5zIGEgc2VyaWFsaXplZCBkeW5hbWljIHRleHR1cmUgb2JqZWN0Cisg
ICAgICovCisgICAgRHluYW1pY1RleHR1cmUucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICBpZiAo
c2NlbmUgJiYgIXNjZW5lLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4oIlRoZSBzY2VuZSBtdXN0
IGJlIHJlYWR5IGJlZm9yZSBzZXJpYWxpemluZyB0aGUgZHluYW1pYyB0ZXh0dXJlIik7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSBfc3VwZXIucHJvdG90eXBl
LnNlcmlhbGl6ZS5jYWxsKHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmJhc2U2
NFN0cmluZyA9IHRoaXMuX2NhbnZhcy50b0RhdGFVUkwoKTsKKyAgICAgICAgc2VyaWFsaXphdGlv
bk9iamVjdC5pbnZlcnRZID0gdGhpcy5faW52ZXJ0WTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5zYW1wbGluZ01vZGUgPSB0aGlzLnNhbXBsaW5nTW9kZTsKKyAgICAgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIER5bmFt
aWNUZXh0dXJlLnByb3RvdHlwZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy51cGRhdGUoKTsKKyAgICB9OworICAgIHJldHVybiBEeW5hbWljVGV4dHVyZTsKK30oX01hdGVy
aWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1
cmUiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0dXJlcy9l
cXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlh
bHMvVGV4dHVyZXMvZXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZSAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmU7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGli
L3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX0hpZ2hEeW5h
bWljUmFuZ2VfcGFub3JhbWFUb0N1YmVtYXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvSGlnaER5bmFtaWNSYW5nZS9wYW5v
cmFtYVRvQ3ViZW1hcCAqLyAiLi9NaXNjL0hpZ2hEeW5hbWljUmFuZ2UvcGFub3JhbWFUb0N1YmVt
YXAudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0Vu
Z2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2Jhc2VUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2VUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJl
cy9iYXNlVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Rl
eHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfRXh0ZW5zaW9uc19lbmdp
bmVfcmF3VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9FeHRlbnNpb25zL2VuZ2luZS5yYXdUZXh0dXJlICov
ICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUucmF3VGV4dHVyZS50cyIpOworCisKKworCisK
KworCisvKioKKyAqIFRoaXMgcmVwcmVzZW50cyBhIHRleHR1cmUgY29taW5nIGZyb20gYW4gZXF1
aXJlY3Rhbmd1bGFyIGltYWdlIHN1cHBvcnRlZCBieSB0aGUgd2ViIGJyb3dzZXIgY2FudmFzLgor
ICovCit2YXIgRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUsIF9zdXBlcik7CisgICAgLyoq
CisgICAgICogSW5zdGFudGlhdGVzIGFuIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlIGZyb20g
dGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzLgorICAgICAqIEBwYXJhbSB1cmwgVGhlIGxvY2F0aW9u
IG9mIHRoZSBpbWFnZQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhlIHRleHR1cmUg
d2lsbCBiZSB1c2VkIGluCisgICAgICogQHBhcmFtIHNpemUgVGhlIGN1YmVtYXAgZGVzaXJlZCBz
aXplICh0aGUgbW9yZSBpdCBpbmNyZWFzZXMgdGhlIGxvbmdlciB0aGUgZ2VuZXJhdGlvbiB3aWxs
IGJlKQorICAgICAqIEBwYXJhbSBub01pcG1hcCBGb3JjZXMgdG8gbm90IGdlbmVyYXRlIHRoZSBt
aXBtYXAgaWYgdHJ1ZQorICAgICAqIEBwYXJhbSBnYW1tYVNwYWNlIFNwZWNpZmllcyBpZiB0aGUg
dGV4dHVyZSB3aWxsIGJlIHVzZWQgaW4gZ2FtbWEgb3IgbGluZWFyIHNwYWNlCisgICAgICogKHRo
ZSBQQlIgbWF0ZXJpYWwgcmVxdWlyZXMgdGhvc2UgdGV4dHVyZXMgaW4gbGluZWFyIHNwYWNlLCBi
dXQgdGhlIHN0YW5kYXJkIG1hdGVyaWFsIHdvdWxkIHJlcXVpcmUgdGhlbSBpbiBHYW1tYSBzcGFj
ZSkKKyAgICAgKiBAcGFyYW0gb25Mb2FkIOKAlCBkZWZpbmVzIGEgY2FsbGJhY2sgY2FsbGVkIHdo
ZW4gdGV4dHVyZSBpcyBsb2FkZWQKKyAgICAgKiBAcGFyYW0gb25FcnJvciDigJQgZGVmaW5lcyBh
IGNhbGxiYWNrIGNhbGxlZCBpZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAqLworICAgIGZ1bmN0
aW9uIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlKHVybCwgc2NlbmUsIHNpemUsIG5vTWlwbWFw
LCBnYW1tYVNwYWNlLCBvbkxvYWQsIG9uRXJyb3IpIHsKKyAgICAgICAgaWYgKG5vTWlwbWFwID09
PSB2b2lkIDApIHsgbm9NaXBtYXAgPSBmYWxzZTsgfQorICAgICAgICBpZiAoZ2FtbWFTcGFjZSA9
PT0gdm9pZCAwKSB7IGdhbW1hU3BhY2UgPSB0cnVlOyB9CisgICAgICAgIGlmIChvbkxvYWQgPT09
IHZvaWQgMCkgeyBvbkxvYWQgPSBudWxsOyB9CisgICAgICAgIGlmIChvbkVycm9yID09PSB2b2lk
IDApIHsgb25FcnJvciA9IG51bGw7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwo
dGhpcywgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9vbkxvYWQgPSBudWxsOworICAg
ICAgICBfdGhpcy5fb25FcnJvciA9IG51bGw7CisgICAgICAgIC8qKiBUaGUgdGV4dHVyZSBjb29y
ZGluYXRlcyBtb2RlLiBBcyB0aGlzIHRleHR1cmUgaXMgc3RvcmVkIGluIGEgY3ViZSBmb3JtYXQs
IHBsZWFzZSBtb2RpZnkgY2FyZWZ1bGx5LiAqLworICAgICAgICBfdGhpcy5jb29yZGluYXRlc01v
ZGUgPSBfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQ1VC
SUNfTU9ERTsKKyAgICAgICAgaWYgKCF1cmwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cignSW1hZ2UgdXJsIGlzIG5vdCBzZXQnKTsKKyAgICAgICAgfQorICAgICAgICBfdGhpcy5uYW1l
ID0gdXJsOworICAgICAgICBfdGhpcy51cmwgPSB1cmw7CisgICAgICAgIF90aGlzLl9zaXplID0g
c2l6ZTsKKyAgICAgICAgX3RoaXMuX25vTWlwbWFwID0gbm9NaXBtYXA7CisgICAgICAgIF90aGlz
LmdhbW1hU3BhY2UgPSBnYW1tYVNwYWNlOworICAgICAgICBfdGhpcy5fb25Mb2FkID0gb25Mb2Fk
OworICAgICAgICBfdGhpcy5fb25FcnJvciA9IG9uRXJyb3I7CisgICAgICAgIF90aGlzLmhhc0Fs
cGhhID0gZmFsc2U7CisgICAgICAgIF90aGlzLmlzQ3ViZSA9IHRydWU7CisgICAgICAgIF90aGlz
Ll90ZXh0dXJlID0gX3RoaXMuX2dldEZyb21DYWNoZSh1cmwsIF90aGlzLl9ub01pcG1hcCk7Cisg
ICAgICAgIGlmICghX3RoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgIGlmICghc2NlbmUudXNl
RGVsYXllZFRleHR1cmVMb2FkaW5nKSB7CisgICAgICAgICAgICAgICAgX3RoaXMubG9hZEltYWdl
KF90aGlzLmxvYWRUZXh0dXJlLmJpbmQoX3RoaXMpLCBfdGhpcy5fb25FcnJvcik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5kZWxheUxv
YWRTdGF0ZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJF
bmdpbmUiXS5ERUxBWUxPQURTVEFURV9OT1RMT0FERUQ7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAob25Mb2FkKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuX3Rl
eHR1cmUuaXNSZWFkeSkgeworICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bIlRvb2xzIl0uU2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHsgcmV0
dXJuIG9uTG9hZCgpOyB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlLm9uTG9hZGVkT2JzZXJ2YWJsZS5hZGQob25Mb2Fk
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3RoaXM7CisgICAg
fQorICAgIC8qKgorICAgICAqIExvYWQgdGhlIGltYWdlIGRhdGEsIGJ5IHB1dHRpbmcgdGhlIGlt
YWdlIG9uIGEgY2FudmFzIGFuZCBleHRyYWN0aW5nIGl0cyBidWZmZXIuCisgICAgICovCisgICAg
RXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUucHJvdG90eXBlLmxvYWRJbWFnZSA9IGZ1bmN0aW9u
IChsb2FkVGV4dHVyZUNhbGxiYWNrLCBvbkVycm9yKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRo
aXM7CisgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMn
KTsKKyAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7CisgICAgICAgIGltYWdlLmFkZEV2
ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5fd2lk
dGggPSBpbWFnZS53aWR0aDsKKyAgICAgICAgICAgIF90aGlzLl9oZWlnaHQgPSBpbWFnZS5oZWln
aHQ7CisgICAgICAgICAgICBjYW52YXMud2lkdGggPSBfdGhpcy5fd2lkdGg7CisgICAgICAgICAg
ICBjYW52YXMuaGVpZ2h0ID0gX3RoaXMuX2hlaWdodDsKKyAgICAgICAgICAgIHZhciBjdHggPSBj
YW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2Us
IDAsIDApOworICAgICAgICAgICAgdmFyIGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwg
MCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCk7CisgICAgICAgICAgICBfdGhpcy5fYnVmZmVy
ID0gaW1hZ2VEYXRhLmRhdGEuYnVmZmVyOworICAgICAgICAgICAgY2FudmFzLnJlbW92ZSgpOwor
ICAgICAgICAgICAgbG9hZFRleHR1cmVDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAgICAgICAg
aW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAg
ICAgICAgIGlmIChvbkVycm9yKSB7CisgICAgICAgICAgICAgICAgb25FcnJvcihfdGhpcy5nZXRD
bGFzc05hbWUoKSArICIgY291bGQgbm90IGJlIGxvYWRlZCIsIGVycm9yKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisgICAgICAgIGltYWdlLnNyYyA9IHRoaXMudXJsOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ29udmVydCB0aGUgaW1hZ2UgYnVmZmVyIGludG8gYSBjdWJlbWFwIGFu
ZCBjcmVhdGUgYSBDdWJlVGV4dHVyZS4KKyAgICAgKi8KKyAgICBFcXVpUmVjdGFuZ3VsYXJDdWJl
VGV4dHVyZS5wcm90b3R5cGUubG9hZFRleHR1cmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAg
ICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGltYWdl
RGF0YSA9IF90aGlzLmdldEZsb2F0MzJBcnJheUZyb21BcnJheUJ1ZmZlcihfdGhpcy5fYnVmZmVy
KTsKKyAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJhdyBsaW5lYXIgZGF0YS4KKyAgICAgICAg
ICAgIHZhciBkYXRhID0gX01pc2NfSGlnaER5bmFtaWNSYW5nZV9wYW5vcmFtYVRvQ3ViZW1hcF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQYW5vcmFtYVRvQ3ViZU1hcFRvb2xzIl0uQ29u
dmVydFBhbm9yYW1hVG9DdWJlbWFwKGltYWdlRGF0YSwgX3RoaXMuX3dpZHRoLCBfdGhpcy5faGVp
Z2h0LCBfdGhpcy5fc2l6ZSk7CisgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdOworICAgICAg
ICAgICAgLy8gUHVzaCBlYWNoIGZhY2VzLgorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCA2OyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgZGF0YUZhY2UgPSBkYXRhW0VxdWlSZWN0
YW5ndWxhckN1YmVUZXh0dXJlLl9GYWNlc01hcHBpbmdbaV1dOworICAgICAgICAgICAgICAgIHJl
c3VsdHMucHVzaChkYXRhRmFjZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0czsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3RleHR1cmUgPSBzY2VuZQorICAgICAg
ICAgICAgLmdldEVuZ2luZSgpCisgICAgICAgICAgICAuY3JlYXRlUmF3Q3ViZVRleHR1cmVGcm9t
VXJsKHRoaXMudXJsLCBzY2VuZSwgdGhpcy5fc2l6ZSwgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIkVuZ2luZSJdLlRFWFRVUkVGT1JNQVRfUkdCLCBzY2VuZS5n
ZXRFbmdpbmUoKS5nZXRDYXBzKCkudGV4dHVyZUZsb2F0CisgICAgICAgICAgICA/IF9FbmdpbmVz
X2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmUiXS5URVhUVVJFVFlQ
RV9GTE9BVAorICAgICAgICAgICAgOiBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5URUdFUiwgdGhpcy5f
bm9NaXBtYXAsIGNhbGxiYWNrLCBudWxsLCB0aGlzLl9vbkxvYWQsIHRoaXMuX29uRXJyb3IpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ29udmVydCB0aGUgQXJyYXlCdWZmZXIgaW50byBhIEZs
b2F0MzJBcnJheSBhbmQgZHJvcCB0aGUgdHJhbnNwYXJlbmN5IGNoYW5uZWwuCisgICAgICogQHBh
cmFtIGJ1ZmZlciBUaGUgQXJyYXlCdWZmZXIgdGhhdCBzaG91bGQgYmUgY29udmVydGVkLgorICAg
ICAqIEByZXR1cm5zIFRoZSBidWZmZXIgYXMgRmxvYXQzMkFycmF5LgorICAgICAqLworICAgIEVx
dWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlLnByb3RvdHlwZS5nZXRGbG9hdDMyQXJyYXlGcm9tQXJy
YXlCdWZmZXIgPSBmdW5jdGlvbiAoYnVmZmVyKSB7CisgICAgICAgIHZhciBkYXRhVmlldyA9IG5l
dyBEYXRhVmlldyhidWZmZXIpOworICAgICAgICB2YXIgZmxvYXRJbWFnZURhdGEgPSBuZXcgRmxv
YXQzMkFycmF5KChidWZmZXIuYnl0ZUxlbmd0aCAqIDMpIC8gNCk7CisgICAgICAgIHZhciBrID0g
MDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXIuYnl0ZUxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAvLyBXZSBkcm9wIHRoZSB0cmFuc3BhcmVuY3kgY2hhbm5lbCwgYmVjYXVz
ZSB3ZSBkbyBub3QgbmVlZC93YW50IGl0CisgICAgICAgICAgICBpZiAoKGkgKyAxKSAlIDQgIT09
IDApIHsKKyAgICAgICAgICAgICAgICBmbG9hdEltYWdlRGF0YVtrKytdID0gZGF0YVZpZXcuZ2V0
VWludDgoaSkgLyAyNTU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZsb2F0SW1hZ2VEYXRhOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXJyZW50
IGNsYXNzIG5hbWUgb2YgdGhlIHRleHR1cmUgdXNlZnVsIGZvciBzZXJpYWxpemF0aW9uIG9yIGR5
bmFtaWMgY29kaW5nLgorICAgICAqIEByZXR1cm5zICJFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVy
ZSIKKyAgICAgKi8KKyAgICBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZS5wcm90b3R5cGUuZ2V0
Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkVxdWlSZWN0YW5ndWxh
ckN1YmVUZXh0dXJlIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGNsb25lIG9m
IHRoZSBjdXJyZW50IEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlIGFuZCByZXR1cm4gaXQuCisg
ICAgICogQHJldHVybnMgQSBjbG9uZSBvZiB0aGUgY3VycmVudCBFcXVpUmVjdGFuZ3VsYXJDdWJl
VGV4dHVyZS4KKyAgICAgKi8KKyAgICBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZS5wcm90b3R5
cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2Nl
bmUoKTsKKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIG5ld1RleHR1cmUgPSBuZXcgRXF1aVJlY3Rhbmd1bGFyQ3Vi
ZVRleHR1cmUodGhpcy51cmwsIHNjZW5lLCB0aGlzLl9zaXplLCB0aGlzLl9ub01pcG1hcCwgdGhp
cy5nYW1tYVNwYWNlKTsKKyAgICAgICAgLy8gQmFzZSB0ZXh0dXJlCisgICAgICAgIG5ld1RleHR1
cmUubGV2ZWwgPSB0aGlzLmxldmVsOworICAgICAgICBuZXdUZXh0dXJlLndyYXBVID0gdGhpcy53
cmFwVTsKKyAgICAgICAgbmV3VGV4dHVyZS53cmFwViA9IHRoaXMud3JhcFY7CisgICAgICAgIG5l
d1RleHR1cmUuY29vcmRpbmF0ZXNJbmRleCA9IHRoaXMuY29vcmRpbmF0ZXNJbmRleDsKKyAgICAg
ICAgbmV3VGV4dHVyZS5jb29yZGluYXRlc01vZGUgPSB0aGlzLmNvb3JkaW5hdGVzTW9kZTsKKyAg
ICAgICAgcmV0dXJuIG5ld1RleHR1cmU7CisgICAgfTsKKyAgICAvKiogVGhlIHNpeCBmYWNlcyBv
ZiB0aGUgY3ViZS4gKi8KKyAgICBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZS5fRmFjZXNNYXBw
aW5nID0gWydyaWdodCcsICdsZWZ0JywgJ3VwJywgJ2Rvd24nLCAnZnJvbnQnLCAnYmFjayddOwor
ICAgIHJldHVybiBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZTsKK30oX2Jhc2VUZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkJhc2VUZXh0dXJlIl0pKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaGRyQ3ViZVRleHR1cmUudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vTWF0ZXJpYWxzL1RleHR1cmVzL2hkckN1YmVUZXh0dXJlLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogSERSQ3ViZVRleHR1cmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiSERSQ3ViZVRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEhEUkN1YmVUZXh0dXJl
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9k
dWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVj
dG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9F
bmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfYmFzZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9U
ZXh0dXJlcy9iYXNlVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvYmFzZVRleHR1cmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJl
cy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX0hpZ2hEeW5hbWljUmFuZ2VfaGRyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9N
aXNjL0hpZ2hEeW5hbWljUmFuZ2UvaGRyICovICIuL01pc2MvSGlnaER5bmFtaWNSYW5nZS9oZHIu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19IaWdoRHluYW1pY1JhbmdlX2N1
YmVtYXBUb1NwaGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvSGlnaER5bmFtaWNSYW5nZS9jdWJl
bWFwVG9TcGhlcmljYWxQb2x5bm9taWFsICovICIuL01pc2MvSGlnaER5bmFtaWNSYW5nZS9jdWJl
bWFwVG9TcGhlcmljYWxQb2x5bm9taWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3Rvb2xz
ICovICIuL01pc2MvdG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5l
c19FeHRlbnNpb25zX2VuZ2luZV9yYXdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9FeHRlbnNpb25zL2Vu
Z2luZS5yYXdUZXh0dXJlICovICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUucmF3VGV4dHVy
ZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01hdGhzL21hdGguY29uc3RhbnRzICovICIuL01hdGhzL21hdGguY29uc3RhbnRzLnRzIik7
CisKKworCisKKworCisKKworCisKKworCisvKioKKyAqIFRoaXMgcmVwcmVzZW50cyBhIHRleHR1
cmUgY29taW5nIGZyb20gYW4gSERSIGlucHV0LgorICoKKyAqIFRoZSBvbmx5IHN1cHBvcnRlZCBm
b3JtYXQgaXMgY3VycmVudGx5IHBhbm9yYW1hIHBpY3R1cmUgc3RvcmVkIGluIFJHQkUgZm9ybWF0
LgorICogRXhhbXBsZSBvZiBzdWNoIGZpbGVzIGNhbiBiZSBmb3VuZCBvbiBIRFJMaWI6IGh0dHA6
Ly9oZHJsaWIuY29tLworICovCit2YXIgSERSQ3ViZVRleHR1cmUgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19leHRlbmRzIl0oSERSQ3ViZVRleHR1cmUsIF9zdXBlcik7CisgICAgLyoqCisgICAgICog
SW5zdGFudGlhdGVzIGFuIEhEUlRleHR1cmUgZnJvbSB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMu
CisgICAgICoKKyAgICAgKiBAcGFyYW0gdXJsIFRoZSBsb2NhdGlvbiBvZiB0aGUgSERSIHJhdyBk
YXRhIChQYW5vcmFtYSBzdG9yZWQgaW4gUkdCRSBmb3JtYXQpCisgICAgICogQHBhcmFtIHNjZW5l
IFRoZSBzY2VuZSB0aGUgdGV4dHVyZSB3aWxsIGJlIHVzZWQgaW4KKyAgICAgKiBAcGFyYW0gc2l6
ZSBUaGUgY3ViZW1hcCBkZXNpcmVkIHNpemUgKHRoZSBtb3JlIGl0IGluY3JlYXNlcyB0aGUgbG9u
Z2VyIHRoZSBnZW5lcmF0aW9uIHdpbGwgYmUpCisgICAgICogQHBhcmFtIG5vTWlwbWFwIEZvcmNl
cyB0byBub3QgZ2VuZXJhdGUgdGhlIG1pcG1hcCBpZiB0cnVlCisgICAgICogQHBhcmFtIGdlbmVy
YXRlSGFybW9uaWNzIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvIGV4dHJhY3QgdGhlIHBv
bHlub21pYWwgaGFybW9uaWNzIGR1cmluZyB0aGUgZ2VuZXJhdGlvbiBwcm9jZXNzCisgICAgICog
QHBhcmFtIGdhbW1hU3BhY2UgU3BlY2lmaWVzIGlmIHRoZSB0ZXh0dXJlIHdpbGwgYmUgdXNlIGlu
IGdhbW1hIG9yIGxpbmVhciBzcGFjZSAodGhlIFBCUiBtYXRlcmlhbCByZXF1aXJlcyB0aG9zZSB0
ZXh0dXJlIGluIGxpbmVhciBzcGFjZSwgYnV0IHRoZSBzdGFuZGFyZCBtYXRlcmlhbCB3b3VsZCBy
ZXF1aXJlIHRoZW0gaW4gR2FtbWEgc3BhY2UpCisgICAgICogQHBhcmFtIHJlc2VydmVkIFJlc2Vy
dmVkIGZsYWcgZm9yIGludGVybmFsIHVzZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBIRFJDdWJl
VGV4dHVyZSh1cmwsIHNjZW5lLCBzaXplLCBub01pcG1hcCwgZ2VuZXJhdGVIYXJtb25pY3MsIGdh
bW1hU3BhY2UsIHJlc2VydmVkLCBvbkxvYWQsIG9uRXJyb3IpIHsKKyAgICAgICAgaWYgKG5vTWlw
bWFwID09PSB2b2lkIDApIHsgbm9NaXBtYXAgPSBmYWxzZTsgfQorICAgICAgICBpZiAoZ2VuZXJh
dGVIYXJtb25pY3MgPT09IHZvaWQgMCkgeyBnZW5lcmF0ZUhhcm1vbmljcyA9IHRydWU7IH0KKyAg
ICAgICAgaWYgKGdhbW1hU3BhY2UgPT09IHZvaWQgMCkgeyBnYW1tYVNwYWNlID0gZmFsc2U7IH0K
KyAgICAgICAgaWYgKHJlc2VydmVkID09PSB2b2lkIDApIHsgcmVzZXJ2ZWQgPSBmYWxzZTsgfQor
ICAgICAgICBpZiAob25Mb2FkID09PSB2b2lkIDApIHsgb25Mb2FkID0gbnVsbDsgfQorICAgICAg
ICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBudWxsOyB9CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICBfdGhp
cy5fZ2VuZXJhdGVIYXJtb25pY3MgPSB0cnVlOworICAgICAgICBfdGhpcy5fb25Mb2FkID0gbnVs
bDsKKyAgICAgICAgX3RoaXMuX29uRXJyb3IgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAg
ICogVGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgbW9kZS4gQXMgdGhpcyB0ZXh0dXJlIGlzIHN0b3Jl
ZCBpbiBhIGN1YmUgZm9ybWF0LCBwbGVhc2UgbW9kaWZ5IGNhcmVmdWxseS4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLmNvb3JkaW5hdGVzTW9kZSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQ1VCSUNfTU9ERTsK
KyAgICAgICAgX3RoaXMuX2lzQmxvY2tpbmcgPSB0cnVlOworICAgICAgICBfdGhpcy5fcm90YXRp
b25ZID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY2VudGVy
IG9mIHRoZSBib3VuZGluZyBib3ggYXNzb2NpYXRlZCB3aXRoIHRoZSBjdWJlIHRleHR1cmUKKyAg
ICAgICAgICogSXQgbXVzdCBkZWZpbmUgd2hlcmUgdGhlIGNhbWVyYSB1c2VkIHRvIHJlbmRlciB0
aGUgdGV4dHVyZSB3YXMgc2V0CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5ib3VuZGluZ0Jv
eFBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIGlmICghdXJsKSB7CisgICAgICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgICAgIH0KKyAgICAgICAgX3RoaXMubmFtZSA9IHVybDsKKyAgICAg
ICAgX3RoaXMudXJsID0gdXJsOworICAgICAgICBfdGhpcy5oYXNBbHBoYSA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5pc0N1YmUgPSB0cnVlOworICAgICAgICBfdGhpcy5fdGV4dHVyZU1hdHJpeCA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgi
XS5JZGVudGl0eSgpOworICAgICAgICBfdGhpcy5fb25Mb2FkID0gb25Mb2FkOworICAgICAgICBf
dGhpcy5fb25FcnJvciA9IG9uRXJyb3I7CisgICAgICAgIF90aGlzLmdhbW1hU3BhY2UgPSBnYW1t
YVNwYWNlOworICAgICAgICBfdGhpcy5fbm9NaXBtYXAgPSBub01pcG1hcDsKKyAgICAgICAgX3Ro
aXMuX3NpemUgPSBzaXplOworICAgICAgICBfdGhpcy5fdGV4dHVyZSA9IF90aGlzLl9nZXRGcm9t
Q2FjaGUodXJsLCBfdGhpcy5fbm9NaXBtYXApOworICAgICAgICBpZiAoIV90aGlzLl90ZXh0dXJl
KSB7CisgICAgICAgICAgICBpZiAoIXNjZW5lLnVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZykgewor
ICAgICAgICAgICAgICAgIF90aGlzLmxvYWRUZXh0dXJlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmUiXS5ERUxB
WUxPQURTVEFURV9OT1RMT0FERUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAob25Mb2FkKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuX3RleHR1cmUuaXNSZWFk
eSkgeworICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIlRvb2xzIl0uU2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uTG9hZCgp
OyB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IF90aGlzLl90ZXh0dXJlLm9uTG9hZGVkT2JzZXJ2YWJsZS5hZGQob25Mb2FkKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShIRFJDdWJlVGV4dHVyZS5wcm90b3R5cGUsICJpc0Jsb2NraW5nIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB3ZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJl
IGlzIGJsb2NraW5nIGR1cmluZyBsb2FkaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNCbG9ja2luZzsKKyAgICAg
ICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgd2V0aGVyIG9yIG5vdCB0aGUgdGV4
dHVyZSBpcyBibG9ja2luZyBkdXJpbmcgbG9hZGluZy4KKyAgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pc0Jsb2NraW5nID0gdmFs
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIRFJDdWJl
VGV4dHVyZS5wcm90b3R5cGUsICJyb3RhdGlvblkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRleHR1cmUgbWF0cml4IHJvdGF0aW9uIGFuZ2xlIGFyb3VuZCBZIGF4aXMgcmFkaWFu
cy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3JvdGF0aW9uWTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFNldHMgdGV4dHVyZSBtYXRyaXggcm90YXRpb24gYW5nbGUgYXJvdW5kIFkgYXhpcyBpbiBy
YWRpYW5zLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3JvdGF0aW9uWSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5zZXRS
ZWZsZWN0aW9uVGV4dHVyZU1hdHJpeChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siTWF0cml4Il0uUm90YXRpb25ZKHRoaXMuX3JvdGF0aW9uWSkpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSERSQ3ViZVRleHR1cmUu
cHJvdG90eXBlLCAiYm91bmRpbmdCb3hTaXplIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib3VuZGluZ0JveFNpemU7CisgICAgICAgIH0s
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHNpemUgb2YgdGhlIGJv
dW5kaW5nIGJveCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1YmUgdGV4dHVyZQorICAgICAgICAgKiBX
aGVuIGRlZmluZWQsIHRoZSBjdWJlbWFwIHdpbGwgc3dpdGNoIHRvIGxvY2FsIG1vZGUKKyAgICAg
ICAgICogQHNlZSBodHRwczovL2NvbW11bml0eS5hcm0uY29tL2dyYXBoaWNzL2IvYmxvZy9wb3N0
cy9yZWZsZWN0aW9ucy1iYXNlZC1vbi1sb2NhbC1jdWJlbWFwcy1pbi11bml0eQorICAgICAgICAg
KiBAZXhhbXBsZSBodHRwczovL3d3dy5iYWJ5bG9uanMtcGxheWdyb3VuZC5jb20vI1JOQVNNTAor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9ib3VuZGluZ0JveFNpemUgJiYgdGhpcy5fYm91bmRpbmdCb3hTaXplLmVxdWFs
cyh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9ib3VuZGluZ0JveFNpemUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHZhciBz
Y2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgICAgIGlmIChzY2VuZSkgeworICAgICAg
ICAgICAgICAgIHNjZW5lLm1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0
dXJlRGlydHlGbGFnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoq
CisgICAgICogR2V0IHRoZSBjdXJyZW50IGNsYXNzIG5hbWUgb2YgdGhlIHRleHR1cmUgdXNlZnVs
IGZvciBzZXJpYWxpemF0aW9uIG9yIGR5bmFtaWMgY29kaW5nLgorICAgICAqIEByZXR1cm5zICJI
RFJDdWJlVGV4dHVyZSIKKyAgICAgKi8KKyAgICBIRFJDdWJlVGV4dHVyZS5wcm90b3R5cGUuZ2V0
Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkhEUkN1YmVUZXh0dXJl
IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIE9jY3VycyB3aGVuIHRoZSBmaWxlIGlzIHJhdyAu
aGRyIGZpbGUuCisgICAgICovCisgICAgSERSQ3ViZVRleHR1cmUucHJvdG90eXBlLmxvYWRUZXh0
dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2
YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiAoYnVmZmVyKSB7CisgICAgICAgICAgICBfdGhpcy5sb2RH
ZW5lcmF0aW9uT2Zmc2V0ID0gMC4wOworICAgICAgICAgICAgX3RoaXMubG9kR2VuZXJhdGlvblNj
YWxlID0gMC44OworICAgICAgICAgICAgdmFyIHNjZW5lID0gX3RoaXMuZ2V0U2NlbmUoKTsKKyAg
ICAgICAgICAgIGlmICghc2NlbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJhdyBsaW5lYXIgZGF0YS4K
KyAgICAgICAgICAgIHZhciBkYXRhID0gX01pc2NfSGlnaER5bmFtaWNSYW5nZV9oZHJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siSERSVG9vbHMiXS5HZXRDdWJlTWFwVGV4dHVyZURhdGEo
YnVmZmVyLCBfdGhpcy5fc2l6ZSk7CisgICAgICAgICAgICAvLyBHZW5lcmF0ZSBoYXJtb25pY3Mg
aWYgbmVlZGVkLgorICAgICAgICAgICAgaWYgKF90aGlzLl9nZW5lcmF0ZUhhcm1vbmljcykgewor
ICAgICAgICAgICAgICAgIHZhciBzcGhlcmljYWxQb2x5bm9taWFsID0gX01pc2NfSGlnaER5bmFt
aWNSYW5nZV9jdWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29scyJdLkNvbnZlcnRDdWJl
TWFwVG9TcGhlcmljYWxQb2x5bm9taWFsKGRhdGEpOworICAgICAgICAgICAgICAgIF90aGlzLnNw
aGVyaWNhbFBvbHlub21pYWwgPSBzcGhlcmljYWxQb2x5bm9taWFsOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTsKKyAgICAgICAgICAgIHZhciBieXRlQXJyYXkg
PSBudWxsOworICAgICAgICAgICAgLy8gUHVzaCBlYWNoIGZhY2VzLgorICAgICAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCA2OyBqKyspIHsKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdWlu
dGFycmF5IGZhbGxiYWNrLgorICAgICAgICAgICAgICAgIGlmICghc2NlbmUuZ2V0RW5naW5lKCku
Z2V0Q2FwcygpLnRleHR1cmVGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICAvLyAzIGNoYW5u
ZWxzIG9mIDEgYnl0ZXMgcGVyIHBpeGVsIGluIGJ5dGVzLgorICAgICAgICAgICAgICAgICAgICB2
YXIgYnl0ZUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihfdGhpcy5fc2l6ZSAqIF90aGlzLl9zaXpl
ICogMyk7CisgICAgICAgICAgICAgICAgICAgIGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5
dGVCdWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgZGF0YUZh
Y2UgPSAoZGF0YVtIRFJDdWJlVGV4dHVyZS5fZmFjZXNNYXBwaW5nW2pdXSk7CisgICAgICAgICAg
ICAgICAgLy8gSWYgc3BlY2lhbCBjYXNlcy4KKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuZ2Ft
bWFTcGFjZSB8fCBieXRlQXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBfdGhpcy5fc2l6ZSAqIF90aGlzLl9zaXplOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFB1dCBpbiBnYW1tYSBzcGFjZSBpZiByZXF1ZXN0ZWQuCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoX3RoaXMuZ2FtbWFTcGFjZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFGYWNlWyhpICogMykgKyAwXSA9IE1hdGgucG93KGRhdGFGYWNlWyhpICog
MykgKyAwXSwgX01hdGhzX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MV9fWyJUb0dhbW1hU3BhY2UiXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUZh
Y2VbKGkgKiAzKSArIDFdID0gTWF0aC5wb3coZGF0YUZhY2VbKGkgKiAzKSArIDFdLCBfTWF0aHNf
bWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIlRvR2FtbWFTcGFj
ZSJdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhRmFjZVsoaSAqIDMpICsgMl0g
PSBNYXRoLnBvdyhkYXRhRmFjZVsoaSAqIDMpICsgMl0sIF9NYXRoc19tYXRoX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siVG9HYW1tYVNwYWNlIl0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0byBp
bnQgdGV4dHVyZSBmb3IgZmFsbGJhY2suCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0
ZUFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBNYXRoLm1heChk
YXRhRmFjZVsoaSAqIDMpICsgMF0gKiAyNTUsIDApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBnID0gTWF0aC5tYXgoZGF0YUZhY2VbKGkgKiAzKSArIDFdICogMjU1LCAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IE1hdGgubWF4KGRhdGFGYWNlWyhpICog
MykgKyAyXSAqIDI1NSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWF5IHVz
ZSBsdW1pbmFuY2UgaW5zdGVhZCBpZiB0aGUgcmVzdWx0IGlzIG5vdCBhY2N1cmF0ZS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gTWF0aC5tYXgoTWF0aC5tYXgociwgZyks
IGIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXggPiAyNTUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gMjU1IC8gbWF4OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByICo9IHNjYWxlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnICo9IHNjYWxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiICo9IHNjYWxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBieXRlQXJyYXlbKGkgKiAzKSArIDBdID0gcjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBieXRlQXJyYXlbKGkgKiAzKSArIDFdID0gZzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBieXRlQXJyYXlbKGkgKiAzKSArIDJdID0gYjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoYnl0ZUFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdHMucHVzaChieXRlQXJyYXkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGRhdGFGYWNlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
czsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAg
ICAgICBpZiAoc2NlbmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSBzY2VuZS5nZXRF
bmdpbmUoKS5jcmVhdGVSYXdDdWJlVGV4dHVyZUZyb21VcmwodGhpcy51cmwsIHNjZW5lLCB0aGlz
Ll9zaXplLCBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5n
aW5lIl0uVEVYVFVSRUZPUk1BVF9SR0IsIHNjZW5lLmdldEVuZ2luZSgpLmdldENhcHMoKS50ZXh0
dXJlRmxvYXQgPyBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
RW5naW5lIl0uVEVYVFVSRVRZUEVfRkxPQVQgOiBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5ULCB0aGlz
Ll9ub01pcG1hcCwgY2FsbGJhY2ssIG51bGwsIHRoaXMuX29uTG9hZCwgdGhpcy5fb25FcnJvcik7
CisgICAgICAgIH0KKyAgICB9OworICAgIEhEUkN1YmVUZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAg
ICAgICBpZiAoIXNjZW5lKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgbmV3VGV4dHVyZSA9IG5ldyBIRFJDdWJlVGV4dHVyZSh0aGlzLnVybCwgc2Nl
bmUsIHRoaXMuX3NpemUsIHRoaXMuX25vTWlwbWFwLCB0aGlzLl9nZW5lcmF0ZUhhcm1vbmljcywg
dGhpcy5nYW1tYVNwYWNlKTsKKyAgICAgICAgLy8gQmFzZSB0ZXh0dXJlCisgICAgICAgIG5ld1Rl
eHR1cmUubGV2ZWwgPSB0aGlzLmxldmVsOworICAgICAgICBuZXdUZXh0dXJlLndyYXBVID0gdGhp
cy53cmFwVTsKKyAgICAgICAgbmV3VGV4dHVyZS53cmFwViA9IHRoaXMud3JhcFY7CisgICAgICAg
IG5ld1RleHR1cmUuY29vcmRpbmF0ZXNJbmRleCA9IHRoaXMuY29vcmRpbmF0ZXNJbmRleDsKKyAg
ICAgICAgbmV3VGV4dHVyZS5jb29yZGluYXRlc01vZGUgPSB0aGlzLmNvb3JkaW5hdGVzTW9kZTsK
KyAgICAgICAgcmV0dXJuIG5ld1RleHR1cmU7CisgICAgfTsKKyAgICAvLyBNZXRob2RzCisgICAg
SERSQ3ViZVRleHR1cmUucHJvdG90eXBlLmRlbGF5TG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgaWYgKHRoaXMuZGVsYXlMb2FkU3RhdGUgIT09IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmUiXS5ERUxBWUxPQURTVEFURV9OT1RMT0FERUQpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmRlbGF5TG9hZFN0
YXRlID0gX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkVuZ2lu
ZSJdLkRFTEFZTE9BRFNUQVRFX0xPQURFRDsKKyAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMu
X2dldEZyb21DYWNoZSh0aGlzLnVybCwgdGhpcy5fbm9NaXBtYXApOworICAgICAgICBpZiAoIXRo
aXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMubG9hZFRleHR1cmUoKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSB0ZXh0dXJlIHJlZmxlY3Rpb24gbWF0
cml4IHVzZWQgdG8gcm90YXRlL3RyYW5zZm9ybSB0aGUgcmVmbGVjdGlvbi4KKyAgICAgKiBAcmV0
dXJucyB0aGUgcmVmbGVjdGlvbiBtYXRyaXgKKyAgICAgKi8KKyAgICBIRFJDdWJlVGV4dHVyZS5w
cm90b3R5cGUuZ2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXggPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLl90ZXh0dXJlTWF0cml4OworICAgIH07CisgICAgLyoqCisgICAgICog
U2V0IHRoZSB0ZXh0dXJlIHJlZmxlY3Rpb24gbWF0cml4IHVzZWQgdG8gcm90YXRlL3RyYW5zZm9y
bSB0aGUgcmVmbGVjdGlvbi4KKyAgICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSByZWZsZWN0
aW9uIG1hdHJpeCB0byBzZXQKKyAgICAgKi8KKyAgICBIRFJDdWJlVGV4dHVyZS5wcm90b3R5cGUu
c2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXggPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
dmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5fdGV4dHVyZU1hdHJpeCA9IHZhbHVlOwor
ICAgICAgICBpZiAodmFsdWUudXBkYXRlRmxhZyA9PT0gdGhpcy5fdGV4dHVyZU1hdHJpeC51cGRh
dGVGbGFnKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZh
bHVlLmlzSWRlbnRpdHkoKSAhPT0gdGhpcy5fdGV4dHVyZU1hdHJpeC5pc0lkZW50aXR5KCkpIHsK
KyAgICAgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5tYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0u
TUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZywgZnVuY3Rpb24gKG1hdCkgeyByZXR1cm4gbWF0Lmdl
dEFjdGl2ZVRleHR1cmVzKCkuaW5kZXhPZihfdGhpcykgIT09IC0xOyB9KTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2VzIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBh
biBIRFIgVGV4dHVyZSBpbiBvcmRlciB0byBjcmVhdGUgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFy
YW0gcGFyc2VkVGV4dHVyZSBEZWZpbmUgdGhlIEpTT04gcmVwcmVzZW50YXRpb24KKyAgICAgKiBA
cGFyYW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBzaG91bGQgYmUgY3JlYXRl
ZCBpbgorICAgICAqIEBwYXJhbSByb290VXJsIERlZmluZSB0aGUgcm9vdCB1cmwgaW4gY2FzZSB3
ZSBuZWVkIHRvIGxvYWQgcmVsYXRpdmUgZGVwZW5kZW5jaWVzCisgICAgICogQHJldHVybnMgdGhl
IG5ld2x5IGNyZWF0ZWQgdGV4dHVyZSBhZnRlciBwYXJzaW5nCisgICAgICovCisgICAgSERSQ3Vi
ZVRleHR1cmUuUGFyc2UgPSBmdW5jdGlvbiAocGFyc2VkVGV4dHVyZSwgc2NlbmUsIHJvb3RVcmwp
IHsKKyAgICAgICAgdmFyIHRleHR1cmUgPSBudWxsOworICAgICAgICBpZiAocGFyc2VkVGV4dHVy
ZS5uYW1lICYmICFwYXJzZWRUZXh0dXJlLmlzUmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICB0
ZXh0dXJlID0gbmV3IEhEUkN1YmVUZXh0dXJlKHJvb3RVcmwgKyBwYXJzZWRUZXh0dXJlLm5hbWUs
IHNjZW5lLCBwYXJzZWRUZXh0dXJlLnNpemUsIHBhcnNlZFRleHR1cmUubm9NaXBtYXAsIHBhcnNl
ZFRleHR1cmUuZ2VuZXJhdGVIYXJtb25pY3MsIHBhcnNlZFRleHR1cmUudXNlSW5HYW1tYVNwYWNl
KTsKKyAgICAgICAgICAgIHRleHR1cmUubmFtZSA9IHBhcnNlZFRleHR1cmUubmFtZTsKKyAgICAg
ICAgICAgIHRleHR1cmUuaGFzQWxwaGEgPSBwYXJzZWRUZXh0dXJlLmhhc0FscGhhOworICAgICAg
ICAgICAgdGV4dHVyZS5sZXZlbCA9IHBhcnNlZFRleHR1cmUubGV2ZWw7CisgICAgICAgICAgICB0
ZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSA9IHBhcnNlZFRleHR1cmUuY29vcmRpbmF0ZXNNb2RlOwor
ICAgICAgICAgICAgdGV4dHVyZS5pc0Jsb2NraW5nID0gcGFyc2VkVGV4dHVyZS5pc0Jsb2NraW5n
OworICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJlKSB7CisgICAgICAgICAgICBpZiAocGFy
c2VkVGV4dHVyZS5ib3VuZGluZ0JveFBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgdGV4dHVy
ZS5ib3VuZGluZ0JveFBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocGFyc2VkVGV4dHVyZS5ib3VuZGlu
Z0JveFBvc2l0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRUZXh0
dXJlLmJvdW5kaW5nQm94U2l6ZSkgeworICAgICAgICAgICAgICAgIHRleHR1cmUuYm91bmRpbmdC
b3hTaXplID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlY3RvcjMiXS5Gcm9tQXJyYXkocGFyc2VkVGV4dHVyZS5ib3VuZGluZ0JveFNpemUpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZFRleHR1cmUucm90YXRpb25ZKSB7Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZS5yb3RhdGlvblkgPSBwYXJzZWRUZXh0dXJlLnJvdGF0aW9u
WTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAg
ICB9OworICAgIEhEUkN1YmVUZXh0dXJlLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICghdGhpcy5uYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IHt9OworICAgICAg
ICBzZXJpYWxpemF0aW9uT2JqZWN0Lm5hbWUgPSB0aGlzLm5hbWU7CisgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QuaGFzQWxwaGEgPSB0aGlzLmhhc0FscGhhOworICAgICAgICBzZXJpYWxpemF0
aW9uT2JqZWN0LmlzQ3ViZSA9IHRydWU7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubGV2
ZWwgPSB0aGlzLmxldmVsOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNpemUgPSB0aGlz
Ll9zaXplOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvb3JkaW5hdGVzTW9kZSA9IHRo
aXMuY29vcmRpbmF0ZXNNb2RlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnVzZUluR2Ft
bWFTcGFjZSA9IHRoaXMuZ2FtbWFTcGFjZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5n
ZW5lcmF0ZUhhcm1vbmljcyA9IHRoaXMuX2dlbmVyYXRlSGFybW9uaWNzOworICAgICAgICBzZXJp
YWxpemF0aW9uT2JqZWN0LmN1c3RvbVR5cGUgPSAiQkFCWUxPTi5IRFJDdWJlVGV4dHVyZSI7Cisg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qubm9NaXBtYXAgPSB0aGlzLl9ub01pcG1hcDsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5pc0Jsb2NraW5nID0gdGhpcy5faXNCbG9ja2luZzsK
KyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5yb3RhdGlvblkgPSB0aGlzLl9yb3RhdGlvblk7
CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgSERSQ3Vi
ZVRleHR1cmUuX2ZhY2VzTWFwcGluZyA9IFsKKyAgICAgICAgInJpZ2h0IiwKKyAgICAgICAgImxl
ZnQiLAorICAgICAgICAidXAiLAorICAgICAgICAiZG93biIsCisgICAgICAgICJmcm9udCIsCisg
ICAgICAgICJiYWNrIgorICAgIF07CisgICAgcmV0dXJuIEhEUkN1YmVUZXh0dXJlOworfShfTWF0
ZXJpYWxzX1RleHR1cmVzX2Jhc2VUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkJhc2VUZXh0dXJlIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uSERSQ3ViZVRl
eHR1cmUiXSA9IEhEUkN1YmVUZXh0dXJlOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRl
cmlhbHMvVGV4dHVyZXMvaHRtbEVsZW1lbnRUZXh0dXJlLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlh
bHMvVGV4dHVyZXMvaHRtbEVsZW1lbnRUZXh0dXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IEh0bWxFbGVtZW50VGV4dHVyZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJIdG1sRWxlbWVudFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEh0bWxFbGVtZW50
VGV4dHVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9u
b2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19UZXh0dXJlc19iYXNlVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVz
L2Jhc2VUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9iYXNlVGV4dHVyZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01h
dGhzL21hdGgudmVjdG9yLnRzIik7CisKKworCisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIHRo
ZSBzbWFsbGVzdCB3b3JrbG9hZCB0byB1c2UgYW4gYWxyZWFkeSBleGlzdGluZyBlbGVtZW50IChD
YW52YXMgb3IgVmlkZW8pIGFzIGEgdGV4dHVyZS4KKyAqIFRvIGJlIGFzIGVmZmljaWVudCBhcyBw
b3NzaWJsZSBkZXBlbmRpbmcgb24geW91ciBjb25zdHJhaW50cyBub3RoaW5nIGFzaWRlIHRoZSBm
aXJzdCB1cGxvYWQKKyAqIGlzIGF1dG9tYXRpY2FsbHkgbWFuYWdlZC4KKyAqIEl0IGlzIGEgY2hl
YXAgVmlkZW9UZXh0dXJlIG9yIER5bmFtaWNUZXh0dXJlIGlmIHlvdSBwcmVmZXIgdG8ga2VlcCBm
dWxsIGNvbnRyb2wgb2YgdGhlIGVsZW1lbnRzCisgKiBpbiB5b3VyIGFwcGxpY2F0aW9uLgorICoK
KyAqIEFzIHRoZSB1cGRhdGUgaXMgbm90IGF1dG9tYXRpYywgeW91IG5lZWQgdG8gY2FsbCB0aGVt
IG1hbnVhbGx5LgorICovCit2YXIgSHRtbEVsZW1lbnRUZXh0dXJlID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZXh0ZW5kcyJdKEh0bWxFbGVtZW50VGV4dHVyZSwgX3N1cGVyKTsKKyAgICAvKioKKyAg
ICAgKiBJbnN0YW50aWF0ZXMgYSBIdG1sRWxlbWVudFRleHR1cmUgZnJvbSB0aGUgZm9sbG93aW5n
IHBhcmFtZXRlcnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmVzIHRoZSBuYW1l
IG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgdmlkZW8g
b3IgY2FudmFzIHRoZSB0ZXh0dXJlIGlzIGZpbGxlZCB3aXRoCisgICAgICogQHBhcmFtIG9wdGlv
bnMgRGVmaW5lcyB0aGUgb3RoZXIgbm9uZSBtYW5kYXRvcnkgdGV4dHVyZSBjcmVhdGlvbiBvcHRp
b25zCisgICAgICovCisgICAgZnVuY3Rpb24gSHRtbEVsZW1lbnRUZXh0dXJlKG5hbWUsIGVsZW1l
bnQsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgb3B0
aW9ucy5zY2VuZSkgfHwgdGhpczsKKyAgICAgICAgaWYgKCFlbGVtZW50IHx8ICghb3B0aW9ucy5l
bmdpbmUgJiYgIW9wdGlvbnMuc2NlbmUpKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXM7Cisg
ICAgICAgIH0KKyAgICAgICAgb3B0aW9ucyA9IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fYXNzaWduIl0oe30sIEh0bWxFbGVtZW50VGV4dHVyZS5EZWZhdWx0T3B0aW9ucywg
b3B0aW9ucyk7CisgICAgICAgIF90aGlzLl9lbmdpbmUgPSBvcHRpb25zLmVuZ2luZSB8fCBvcHRp
b25zLnNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBfdGhpcy5fZ2VuZXJhdGVNaXBNYXBzID0g
b3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHM7CisgICAgICAgIF90aGlzLl9zYW1wbGluZ01vZGUgPSBv
cHRpb25zLnNhbXBsaW5nTW9kZTsKKyAgICAgICAgX3RoaXMuX3RleHR1cmVNYXRyaXggPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uSWRl
bnRpdHkoKTsKKyAgICAgICAgX3RoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIF90aGlzLmVsZW1l
bnQgPSBlbGVtZW50OworICAgICAgICBfdGhpcy5faXNWaWRlbyA9IChlbGVtZW50IGluc3RhbmNl
b2YgSFRNTFZpZGVvRWxlbWVudCk7CisgICAgICAgIF90aGlzLmFuaXNvdHJvcGljRmlsdGVyaW5n
TGV2ZWwgPSAxOworICAgICAgICBfdGhpcy5fY3JlYXRlSW50ZXJuYWxUZXh0dXJlKCk7CisgICAg
ICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgSHRtbEVsZW1lbnRUZXh0dXJlLnByb3RvdHlw
ZS5fY3JlYXRlSW50ZXJuYWxUZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgd2lk
dGggPSAwOworICAgICAgICB2YXIgaGVpZ2h0ID0gMDsKKyAgICAgICAgaWYgKHRoaXMuX2lzVmlk
ZW8pIHsKKyAgICAgICAgICAgIHdpZHRoID0gdGhpcy5lbGVtZW50LnZpZGVvV2lkdGg7CisgICAg
ICAgICAgICBoZWlnaHQgPSB0aGlzLmVsZW1lbnQudmlkZW9IZWlnaHQ7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB3aWR0aCA9IHRoaXMuZWxlbWVudC53aWR0aDsKKyAg
ICAgICAgICAgIGhlaWdodCA9IHRoaXMuZWxlbWVudC5oZWlnaHQ7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX2VuZ2luZS5jcmVhdGVEeW5hbWljVGV4dHVyZSh3aWR0
aCwgaGVpZ2h0LCB0aGlzLl9nZW5lcmF0ZU1pcE1hcHMsIHRoaXMuX3NhbXBsaW5nTW9kZSk7Cisg
ICAgICAgIHRoaXMudXBkYXRlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSB0ZXh0dXJlIG1hdHJpeCB1c2VkIGluIG1vc3Qgb2YgdGhlIG1hdGVyaWFsLgorICAgICAqLwor
ICAgIEh0bWxFbGVtZW50VGV4dHVyZS5wcm90b3R5cGUuZ2V0VGV4dHVyZU1hdHJpeCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVNYXRyaXg7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBjb250ZW50IG9mIHRoZSB0ZXh0dXJlLgorICAgICAq
IEBwYXJhbSBpbnZlcnRZIERlZmluZXMgd2V0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSBpbnZl
cnRlZCBvbiBZIChmYWxzZSBieSBkZWZhdWx0IG9uIHZpZGVvIGFuZCB0cnVlIG9uIGNhbnZhcykK
KyAgICAgKi8KKyAgICBIdG1sRWxlbWVudFRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0
aW9uIChpbnZlcnRZKSB7CisgICAgICAgIGlmIChpbnZlcnRZID09PSB2b2lkIDApIHsgaW52ZXJ0
WSA9IG51bGw7IH0KKyAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT0gbnVsbCkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pc1ZpZGVvKSB7Cisg
ICAgICAgICAgICB2YXIgdmlkZW9FbGVtZW50ID0gdGhpcy5lbGVtZW50OworICAgICAgICAgICAg
aWYgKHZpZGVvRWxlbWVudC5yZWFkeVN0YXRlIDwgdmlkZW9FbGVtZW50LkhBVkVfQ1VSUkVOVF9E
QVRBKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fZW5naW5lLnVwZGF0ZVZpZGVvVGV4dHVyZSh0aGlzLl90ZXh0dXJlLCB2aWRlb0Vs
ZW1lbnQsIGludmVydFkgPT09IG51bGwgPyB0cnVlIDogaW52ZXJ0WSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgY2FudmFzRWxlbWVudCA9IHRoaXMuZWxlbWVu
dDsKKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS51cGRhdGVEeW5hbWljVGV4dHVyZSh0aGlzLl90
ZXh0dXJlLCBjYW52YXNFbGVtZW50LCBpbnZlcnRZID09PSBudWxsID8gdHJ1ZSA6IGludmVydFks
IGZhbHNlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgSHRtbEVsZW1lbnRUZXh0dXJlLkRlZmF1
bHRPcHRpb25zID0geworICAgICAgICBnZW5lcmF0ZU1pcE1hcHM6IGZhbHNlLAorICAgICAgICBz
YW1wbGluZ01vZGU6IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJDb25zdGFudHMiXS5URVhUVVJFX0JJTElORUFSX1NBTVBMSU5HTU9ERSwKKyAgICAgICAg
ZW5naW5lOiBudWxsLAorICAgICAgICBzY2VuZTogbnVsbAorICAgIH07CisgICAgcmV0dXJuIEh0
bWxFbGVtZW50VGV4dHVyZTsKK30oX01hdGVyaWFsc19UZXh0dXJlc19iYXNlVGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJCYXNlVGV4dHVyZSJdKSk7CisKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2luZGV4LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0
dXJlcy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJhc2VUZXh0dXJlLCBDdWJlVGV4dHVyZSwgRHlu
YW1pY1RleHR1cmUsIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlLCBIRFJDdWJlVGV4dHVyZSwg
SW50ZXJuYWxUZXh0dXJlLCBNaXJyb3JUZXh0dXJlLCBNdWx0aVJlbmRlclRhcmdldCwgUmF3VGV4
dHVyZSwgUmVuZGVyVGFyZ2V0VGV4dHVyZSwgVGV4dHVyZSwgQ29sb3JHcmFkaW5nVGV4dHVyZSwg
UmF3Q3ViZVRleHR1cmUsIFJhd1RleHR1cmUzRCwgUmVmcmFjdGlvblRleHR1cmUsIFZpZGVvVGV4
dHVyZSwgSHRtbEVsZW1lbnRUZXh0dXJlLCBfRERTVGV4dHVyZUxvYWRlciwgX0VOVlRleHR1cmVM
b2FkZXIsIF9LVFhUZXh0dXJlTG9hZGVyLCBfVEdBVGV4dHVyZUxvYWRlciwgX0Jhc2lzVGV4dHVy
ZUxvYWRlciwgQ3VzdG9tUHJvY2VkdXJhbFRleHR1cmUsIE5vaXNlUHJvY2VkdXJhbFRleHR1cmUs
IFByb2NlZHVyYWxUZXh0dXJlLCBQcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29tcG9uZW50ICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZVRleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFz
ZVRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2Jhc2VUZXh0dXJlLnRzIik7CisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkJhc2VUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYmFzZVRleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZVRleHR1cmUiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29sb3JHcmFkaW5nVGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb2xvckdyYWRpbmdU
ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9jb2xvckdyYWRpbmdUZXh0dXJlLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yR3JhZGluZ1RleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9jb2xvckdyYWRpbmdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNv
bG9yR3JhZGluZ1RleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY3Vi
ZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vY3ViZVRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2N1YmVUZXh0dXJl
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN1YmVUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfY3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ3ViZVRleHR1cmUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHluYW1pY1RleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZHluYW1p
Y1RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2R5bmFtaWNUZXh0dXJlLnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkR5bmFtaWNUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZHlu
YW1pY1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRHluYW1pY1RleHR1cmUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXF1aVJlY3Rhbmd1bGFyQ3ViZVRl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vZXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVz
L2VxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVxdWlS
ZWN0YW5ndWxhckN1YmVUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZXF1aVJlY3Rhbmd1
bGFyQ3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRXF1aVJlY3Rhbmd1
bGFyQ3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGRyQ3Vi
ZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vaGRyQ3ViZVRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2hkckN1YmVU
ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhEUkN1YmVUZXh0dXJlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaGRyQ3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
SERSQ3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaW50ZXJu
YWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2ludGVybmFsVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJu
YWxUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkludGVybmFsVGV4dHVyZSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fWyJJbnRlcm5hbFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TG9hZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9Mb2FkZXJzL2luZGV4ICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9Mb2Fk
ZXJzL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9ERFNUZXh0dXJlTG9hZGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTG9hZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJfRERTVGV4dHVyZUxvYWRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfRU5WVGV4
dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0xvYWRlcnNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siX0VOVlRleHR1cmVMb2FkZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiX0tUWFRleHR1cmVMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Mb2FkZXJz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIl9LVFhUZXh0dXJlTG9hZGVyIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9UR0FUZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfTG9hZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJfVEdB
VGV4dHVyZUxvYWRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfQmFzaXNUZXh0dXJlTG9h
ZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTG9hZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJfQmFzaXNUZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX21pcnJvclRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWlycm9yVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMv
VGV4dHVyZXMvbWlycm9yVGV4dHVyZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNaXJyb3JUZXh0
dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWlycm9yVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fWyJNaXJyb3JUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX211bHRpUmVuZGVyVGFyZ2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL211bHRpUmVuZGVyVGFyZ2V0ICovICIuL01hdGVyaWFs
cy9UZXh0dXJlcy9tdWx0aVJlbmRlclRhcmdldC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNdWx0
aVJlbmRlclRhcmdldCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX211bHRpUmVuZGVyVGFyZ2V0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIk11bHRpUmVuZGVyVGFyZ2V0Il07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Byb2NlZHVyYWxzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9Qcm9jZWR1cmFscy9p
bmRleCAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvUHJvY2VkdXJhbHMvaW5kZXgudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ3VzdG9tUHJvY2VkdXJhbFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9Qcm9jZWR1cmFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQ3Vz
dG9tUHJvY2VkdXJhbFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9pc2VQcm9j
ZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Byb2NlZHVyYWxzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJOb2lzZVByb2NlZHVyYWxUZXh0dXJlIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlByb2NlZHVyYWxUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfUHJvY2VkdXJhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlBy
b2NlZHVyYWxUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlByb2NlZHVyYWxUZXh0
dXJlU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qcm9jZWR1cmFsc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siUHJvY2VkdXJhbFRleHR1cmVTY2VuZUNv
bXBvbmVudCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yYXdDdWJlVGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vcmF3Q3ViZVRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3Jhd0N1YmVUZXh0dXJl
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJhd0N1YmVUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfcmF3Q3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIlJhd0N1
YmVUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Jhd1RleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L3Jhd1RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3Jhd1RleHR1cmUudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiUmF3VGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Jhd1RleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlJhd1RleHR1cmUiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmF3VGV4dHVyZTNEX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yYXdUZXh0dXJlM0QgKi8gIi4v
TWF0ZXJpYWxzL1RleHR1cmVzL3Jhd1RleHR1cmUzRC50cyIpOworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJS
YXdUZXh0dXJlM0QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9yYXdUZXh0dXJlM0RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzEzX19bIlJhd1RleHR1cmUzRCJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9yZWZyYWN0aW9uVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmVmcmFjdGlvblRleHR1cmUgKi8gIi4v
TWF0ZXJpYWxzL1RleHR1cmVzL3JlZnJhY3Rpb25UZXh0dXJlLnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlJlZnJhY3Rpb25UZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcmVmcmFjdGlvblRl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlJlZnJhY3Rpb25UZXh0dXJlIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JlbmRlclRhcmdldFRleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Jl
bmRlclRhcmdldFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRlclRhcmdldFRl
eHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVuZGVyVGFyZ2V0VGV4dHVyZSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE1X19bIlJlbmRlclRhcmdldFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVy
ZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
dGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siVGV4dHVyZSJdOyB9KTsKKwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92aWRlb1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZpZGVvVGV4dHVyZSAqLyAi
Li9NYXRlcmlhbHMvVGV4dHVyZXMvdmlkZW9UZXh0dXJlLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlZpZGVvVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3ZpZGVvVGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTdfX1siVmlkZW9UZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2h0bWxFbGVtZW50VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMThfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaHRtbEVsZW1lbnRUZXh0dXJlICov
ICIuL01hdGVyaWFscy9UZXh0dXJlcy9odG1sRWxlbWVudFRleHR1cmUudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiSHRtbEVsZW1lbnRUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaHRtbEVs
ZW1lbnRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJIdG1sRWxlbWVudFRl
eHR1cmUiXTsgfSk7CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJuYWxUZXh0dXJl
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJuYWxUZXh0dXJlLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IEludGVybmFsVGV4dHVyZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJJbnRlcm5hbFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIElu
dGVybmFsVGV4dHVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0Q3Jl
YXRpb25PcHRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0Q3JlYXRpb25P
cHRpb25zICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRDcmVhdGlvbk9wdGlv
bnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGV2VG9vbHMgKi8gIi4v
TWlzYy9kZXZUb29scy50cyIpOworCisKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gc3RvcmUg
ZGF0YSBhc3NvY2lhdGVkIHdpdGggV2ViR0wgdGV4dHVyZSBkYXRhIGZvciB0aGUgZW5naW5lCisg
KiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseQorICovCit2YXIgSW50ZXJu
YWxUZXh0dXJlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgSW50ZXJuYWxUZXh0dXJlCisgICAgICogQHBhcmFtIGVuZ2luZSBkZWZp
bmVzIHRoZSBlbmdpbmUgdG8gdXNlCisgICAgICogQHBhcmFtIGRhdGFTb3VyY2UgZGVmaW5lcyB0
aGUgdHlwZSBvZiBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkCisgICAgICogQHBhcmFtIGRlbGF5QWxs
b2NhdGlvbiBpZiB0aGUgdGV4dHVyZSBhbGxvY2F0aW9uIHNob3VsZCBiZSBkZWxheWVkIChkZWZh
dWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBJbnRlcm5hbFRleHR1cmUoZW5naW5l
LCBkYXRhU291cmNlLCBkZWxheUFsbG9jYXRpb24pIHsKKyAgICAgICAgaWYgKGRlbGF5QWxsb2Nh
dGlvbiA9PT0gdm9pZCAwKSB7IGRlbGF5QWxsb2NhdGlvbiA9IGZhbHNlOyB9CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIGlmIHRoZSB0ZXh0dXJlIGlzIHJlYWR5CisgICAgICAgICAq
LworICAgICAgICB0aGlzLmlzUmVhZHkgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZXMgaWYgdGhlIHRleHR1cmUgaXMgYSBjdWJlIHRleHR1cmUKKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuaXNDdWJlID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZp
bmVzIGlmIHRoZSB0ZXh0dXJlIGNvbnRhaW5zIDNEIGRhdGEKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuaXMzRCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBpZiB0
aGUgdGV4dHVyZSBjb250YWlucyBtdWx0aXZpZXcgZGF0YQorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5pc011bHRpdmlldyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgVVJMIHVzZWQgdG8gbG9hZCB0aGlzIHRleHR1cmUKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMudXJsID0gIiI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBzYW1wbGluZyBt
b2RlIG9mIHRoZSB0ZXh0dXJlCisgICAgICAgICAqLworICAgICAgICB0aGlzLnNhbXBsaW5nTW9k
ZSA9IC0xOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGlu
ZyBpZiB0aGUgdGV4dHVyZSBuZWVkcyBtaXBtYXBzIGdlbmVyYXRpb24KKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuZ2VuZXJhdGVNaXBNYXBzID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB1c2VkIGJ5IHRoZSB0ZXh0dXJlIChXZWJH
TDIrIG9ubHkpCisgICAgICAgICAqLworICAgICAgICB0aGlzLnNhbXBsZXMgPSAwOworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdHlwZSBvZiB0aGUgdGV4dHVyZSAoaW50LCBmbG9h
dC4uLikKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudHlwZSA9IC0xOworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyB0aGUgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlIChSR0IsIFJHQkEuLi4p
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmZvcm1hdCA9IC0xOworICAgICAgICAvKioKKyAg
ICAgICAgICogT2JzZXJ2YWJsZSBjYWxsZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyBsb2FkZWQKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMub25Mb2FkZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29i
c2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZQorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy53aWR0aCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuaGVpZ2h0ID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGRlcHRoIG9m
IHRoZSB0ZXh0dXJlCisgICAgICAgICAqLworICAgICAgICB0aGlzLmRlcHRoID0gMDsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGluaXRpYWwgd2lkdGggb2YgdGhlIHRleHR1cmUg
KEl0IGNvdWxkIGJlIHJlc2NhbGVkIGlmIHRoZSBjdXJyZW50IHN5c3RlbSBkb2VzIG5vdCBzdXBw
b3J0IG5vbiBwb3dlciBvZiB0d28gdGV4dHVyZXMpCisgICAgICAgICAqLworICAgICAgICB0aGlz
LmJhc2VXaWR0aCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBpbml0aWFs
IGhlaWdodCBvZiB0aGUgdGV4dHVyZSAoSXQgY291bGQgYmUgcmVzY2FsZWQgaWYgdGhlIGN1cnJl
bnQgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgbm9uIHBvd2VyIG9mIHR3byB0ZXh0dXJlcykKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuYmFzZUhlaWdodCA9IDA7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSBpbml0aWFsIGRlcHRoIG9mIHRoZSB0ZXh0dXJlIChJdCBjb3VsZCBi
ZSByZXNjYWxlZCBpZiB0aGUgY3VycmVudCBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBub24gcG93
ZXIgb2YgdHdvIHRleHR1cmVzKQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5iYXNlRGVwdGgg
PSAwOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBp
ZiB0aGUgdGV4dHVyZSBpcyBpbnZlcnRlZCBvbiBZIGF4aXMKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuaW52ZXJ0WSA9IGZhbHNlOworICAgICAgICAvLyBQcml2YXRlCisgICAgICAgIC8qKiBA
aGlkZGVuICovCisgICAgICAgIHRoaXMuX2ludmVydFZTY2FsZSA9IGZhbHNlOworICAgICAgICAv
KiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9hc3NvY2lhdGVkQ2hhbm5lbCA9IC0xOworICAg
ICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gSW50ZXJuYWxU
ZXh0dXJlLkRBVEFTT1VSQ0VfVU5LTk9XTjsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAg
ICAgdGhpcy5fYnVmZmVyID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAg
dGhpcy5fYnVmZmVyVmlldyA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAg
IHRoaXMuX2J1ZmZlclZpZXdBcnJheSA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisg
ICAgICAgIHRoaXMuX2J1ZmZlclZpZXdBcnJheUFycmF5ID0gbnVsbDsKKyAgICAgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICAgICAgdGhpcy5fc2l6ZSA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIHRoaXMuX2V4dGVuc2lvbiA9ICIiOworICAgICAgICAvKiogQGhpZGRlbiAqLwor
ICAgICAgICB0aGlzLl9maWxlcyA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAg
ICAgIHRoaXMuX3dvcmtpbmdDYW52YXMgPSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLwor
ICAgICAgICB0aGlzLl93b3JraW5nQ29udGV4dCA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVu
ICovCisgICAgICAgIHRoaXMuX2ZyYW1lYnVmZmVyID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICAgICAgdGhpcy5fZGVwdGhTdGVuY2lsQnVmZmVyID0gbnVsbDsKKyAgICAgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fTVNBQUZyYW1lYnVmZmVyID0gbnVsbDsKKyAg
ICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fTVNBQVJlbmRlckJ1ZmZlciA9IG51
bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2F0dGFjaG1lbnRzID0g
bnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fY2FjaGVkQ29vcmRp
bmF0ZXNNb2RlID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5f
Y2FjaGVkV3JhcFUgPSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlz
Ll9jYWNoZWRXcmFwViA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRo
aXMuX2NhY2hlZFdyYXBSID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAg
dGhpcy5fY2FjaGVkQW5pc290cm9waWNGaWx0ZXJpbmdMZXZlbCA9IG51bGw7CisgICAgICAgIC8q
KiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2lzRGlzYWJsZWQgPSBmYWxzZTsKKyAgICAgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fY29tcHJlc3Npb24gPSBudWxsOworICAgICAg
ICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9nZW5lcmF0ZVN0ZW5jaWxCdWZmZXIgPSBm
YWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fZ2VuZXJhdGVEZXB0
aEJ1ZmZlciA9IGZhbHNlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9j
b21wYXJpc29uRnVuY3Rpb24gPSAwOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0
aGlzLl9zcGhlcmljYWxQb2x5bm9taWFsID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICAgICAgdGhpcy5fbG9kR2VuZXJhdGlvblNjYWxlID0gMDsKKyAgICAgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICAgICAgdGhpcy5fbG9kR2VuZXJhdGlvbk9mZnNldCA9IDA7CisgICAgICAgIC8v
IE11bHRpdmlldworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jb2xvclRl
eHR1cmVBcnJheSA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMu
X2RlcHRoU3RlbmNpbFRleHR1cmVBcnJheSA9IG51bGw7CisgICAgICAgIC8vIFRoZSBmb2xsb3dp
bmcgdGhyZWUgZmllbGRzIGhlbHBzIHNoYXJpbmcgZ2VuZXJhdGVkIGZpeGVkIExPRHMgZm9yIHRl
eHR1cmUgZmlsdGVyaW5nCisgICAgICAgIC8vIEluIGVudmlyb25tZW50IG5vdCBzdXBwb3J0aW5n
IHRoZSB0ZXh0dXJlTE9EIGV4dGVuc2lvbiBsaWtlIEVER0UuIFRoZXkgYXJlIGZvciBpbnRlcm5h
bCB1c2Ugb25seS4KKyAgICAgICAgLy8gVGhleSBhcmUgYXQgdGhlIGxldmVsIG9mIHRoZSBnbCB0
ZXh0dXJlIHRvIGJlbmVmaXQgZnJvbSB0aGUgY2FjaGUuCisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIHRoaXMuX2xvZFRleHR1cmVIaWdoID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICAgICAgdGhpcy5fbG9kVGV4dHVyZU1pZCA9IG51bGw7CisgICAgICAgIC8qKiBA
aGlkZGVuICovCisgICAgICAgIHRoaXMuX2xvZFRleHR1cmVMb3cgPSBudWxsOworICAgICAgICAv
KiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9pc1JHQkQgPSBmYWxzZTsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fbGluZWFyU3BlY3VsYXJMT0QgPSBmYWxzZTsKKyAg
ICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5faXJyYWRpYW5jZVRleHR1cmUgPSBu
dWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl93ZWJHTFRleHR1cmUg
PSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl93ZWJHUFVUZXh0
dXJlID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fd2ViR1BV
U2FtcGxlciA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX3dl
YkdQVVRleHR1cmVWaWV3ID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAg
dGhpcy5fcmVmZXJlbmNlcyA9IDE7CisgICAgICAgIHRoaXMuX2VuZ2luZSA9IGVuZ2luZTsKKyAg
ICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7CisgICAgICAgIGlmICghZGVsYXlB
bGxvY2F0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl93ZWJHTFRleHR1cmUgPSBlbmdpbmUuX2Ny
ZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRo
ZSBFbmdpbmUgdGhlIHRleHR1cmUgYmVsb25ncyB0by4KKyAgICAgKiBAcmV0dXJucyBUaGUgYmFi
eWxvbiBlbmdpbmUKKyAgICAgKi8KKyAgICBJbnRlcm5hbFRleHR1cmUucHJvdG90eXBlLmdldEVu
Z2luZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuZ2luZTsKKyAgICB9
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFRleHR1cmUucHJvdG90eXBlLCAi
ZGF0YVNvdXJjZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGRhdGEgc291
cmNlIHR5cGUgb2YgdGhlIHRleHR1cmUgKGNhbiBiZSBvbmUgb2YgdGhlIEludGVybmFsVGV4dHVy
ZS5EQVRBU09VUkNFX1hYWFgpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICAvKioKKyAgICAgKiBJbmNyZW1lbnRzIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyAo
aWUuIHRoZSBudW1iZXIgb2YgVGV4dHVyZSB0aGF0IHBvaW50IHRvIGl0KQorICAgICAqLworICAg
IEludGVybmFsVGV4dHVyZS5wcm90b3R5cGUuaW5jcmVtZW50UmVmZXJlbmNlcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5fcmVmZXJlbmNlcysrOworICAgIH07CisgICAgLyoqCisgICAg
ICogQ2hhbmdlIHRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlIChub3QgdGhlIHNpemUgb2YgdGhlIGNv
bnRlbnQpCisgICAgICogQHBhcmFtIHdpZHRoIGRlZmluZXMgdGhlIG5ldyB3aWR0aAorICAgICAq
IEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgbmV3IGhlaWdodAorICAgICAqIEBwYXJhbSBkZXB0
aCBkZWZpbmVzIHRoZSBuZXcgZGVwdGggKDEgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBJbnRl
cm5hbFRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdo
dCwgZGVwdGgpIHsKKyAgICAgICAgaWYgKGRlcHRoID09PSB2b2lkIDApIHsgZGVwdGggPSAxOyB9
CisgICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKKyAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWln
aHQ7CisgICAgICAgIHRoaXMuZGVwdGggPSBkZXB0aDsKKyAgICAgICAgdGhpcy5iYXNlV2lkdGgg
PSB3aWR0aDsKKyAgICAgICAgdGhpcy5iYXNlSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICB0aGlz
LmJhc2VEZXB0aCA9IGRlcHRoOworICAgICAgICB0aGlzLl9zaXplID0gd2lkdGggKiBoZWlnaHQg
KiBkZXB0aDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgSW50ZXJuYWxUZXh0dXJl
LnByb3RvdHlwZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgdmFyIHByb3h5OworICAgICAgICB0aGlzLmlzUmVhZHkgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fY2FjaGVkQ29vcmRpbmF0ZXNNb2RlID0gbnVsbDsKKyAgICAgICAgdGhp
cy5fY2FjaGVkV3JhcFUgPSBudWxsOworICAgICAgICB0aGlzLl9jYWNoZWRXcmFwViA9IG51bGw7
CisgICAgICAgIHRoaXMuX2NhY2hlZEFuaXNvdHJvcGljRmlsdGVyaW5nTGV2ZWwgPSBudWxsOwor
ICAgICAgICBzd2l0Y2ggKHRoaXMuX2RhdGFTb3VyY2UpIHsKKyAgICAgICAgICAgIGNhc2UgSW50
ZXJuYWxUZXh0dXJlLkRBVEFTT1VSQ0VfVEVNUDoKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBjYXNlIEludGVybmFsVGV4dHVyZS5EQVRBU09VUkNFX1VSTDoKKyAgICAgICAg
ICAgICAgICBwcm94eSA9IHRoaXMuX2VuZ2luZS5jcmVhdGVUZXh0dXJlKHRoaXMudXJsLCAhdGhp
cy5nZW5lcmF0ZU1pcE1hcHMsIHRoaXMuaW52ZXJ0WSwgbnVsbCwgdGhpcy5zYW1wbGluZ01vZGUs
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJveHkuX3N3YXBBbmREaWUoX3Ro
aXMpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9LCBudWxsLCB0aGlzLl9idWZmZXIsIHVuZGVmaW5lZCwgdGhpcy5mb3JtYXQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgSW50ZXJuYWxUZXh0dXJl
LkRBVEFTT1VSQ0VfUkFXOgorICAgICAgICAgICAgICAgIHByb3h5ID0gdGhpcy5fZW5naW5lLmNy
ZWF0ZVJhd1RleHR1cmUodGhpcy5fYnVmZmVyVmlldywgdGhpcy5iYXNlV2lkdGgsIHRoaXMuYmFz
ZUhlaWdodCwgdGhpcy5mb3JtYXQsIHRoaXMuZ2VuZXJhdGVNaXBNYXBzLCB0aGlzLmludmVydFks
IHRoaXMuc2FtcGxpbmdNb2RlLCB0aGlzLl9jb21wcmVzc2lvbik7CisgICAgICAgICAgICAgICAg
cHJveHkuX3N3YXBBbmREaWUodGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5pc1JlYWR5ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjYXNlIEludGVybmFs
VGV4dHVyZS5EQVRBU09VUkNFX1JBVzNEOgorICAgICAgICAgICAgICAgIHByb3h5ID0gdGhpcy5f
ZW5naW5lLmNyZWF0ZVJhd1RleHR1cmUzRCh0aGlzLl9idWZmZXJWaWV3LCB0aGlzLmJhc2VXaWR0
aCwgdGhpcy5iYXNlSGVpZ2h0LCB0aGlzLmJhc2VEZXB0aCwgdGhpcy5mb3JtYXQsIHRoaXMuZ2Vu
ZXJhdGVNaXBNYXBzLCB0aGlzLmludmVydFksIHRoaXMuc2FtcGxpbmdNb2RlLCB0aGlzLl9jb21w
cmVzc2lvbik7CisgICAgICAgICAgICAgICAgcHJveHkuX3N3YXBBbmREaWUodGhpcyk7CisgICAg
ICAgICAgICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBjYXNlIEludGVybmFsVGV4dHVyZS5EQVRBU09VUkNFX0RZTkFNSUM6Cisg
ICAgICAgICAgICAgICAgcHJveHkgPSB0aGlzLl9lbmdpbmUuY3JlYXRlRHluYW1pY1RleHR1cmUo
dGhpcy5iYXNlV2lkdGgsIHRoaXMuYmFzZUhlaWdodCwgdGhpcy5nZW5lcmF0ZU1pcE1hcHMsIHRo
aXMuc2FtcGxpbmdNb2RlKTsKKyAgICAgICAgICAgICAgICBwcm94eS5fc3dhcEFuZERpZSh0aGlz
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUudXBkYXRlRHluYW1pY1RleHR1cmUodGhp
cywgdGhpcy5fZW5naW5lLmdldFJlbmRlcmluZ0NhbnZhcygpLCB0aGlzLmludmVydFksIHVuZGVm
aW5lZCwgdW5kZWZpbmVkLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAvLyBUaGUgZW5naW5lIHdp
bGwgbWFrZSBzdXJlIHRvIHVwZGF0ZSBjb250ZW50IHNvIG5vIG5lZWQgdG8gZmxhZyBpdCBhcyBp
c1JlYWR5ID0gdHJ1ZQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2Ug
SW50ZXJuYWxUZXh0dXJlLkRBVEFTT1VSQ0VfUkVOREVSVEFSR0VUOgorICAgICAgICAgICAgICAg
IHZhciBvcHRpb25zID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0Q3JlYXRp
b25PcHRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlJlbmRlclRhcmdldENyZWF0
aW9uT3B0aW9ucyJdKCk7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVm
ZmVyID0gdGhpcy5fZ2VuZXJhdGVEZXB0aEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBvcHRpb25z
LmdlbmVyYXRlTWlwTWFwcyA9IHRoaXMuZ2VuZXJhdGVNaXBNYXBzOworICAgICAgICAgICAgICAg
IG9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVmZmVyID0gdGhpcy5fZ2VuZXJhdGVTdGVuY2lsQnVm
ZmVyOworICAgICAgICAgICAgICAgIG9wdGlvbnMuc2FtcGxpbmdNb2RlID0gdGhpcy5zYW1wbGlu
Z01vZGU7CisgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gdGhpcy50eXBlOworICAgICAg
ICAgICAgICAgIGlmICh0aGlzLmlzQ3ViZSkgeworICAgICAgICAgICAgICAgICAgICBwcm94eSA9
IHRoaXMuX2VuZ2luZS5jcmVhdGVSZW5kZXJUYXJnZXRDdWJlVGV4dHVyZSh0aGlzLndpZHRoLCBv
cHRpb25zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBzaXplID0geworICAgICAgICAgICAgICAgICAgICAgICAgd2lk
dGg6IHRoaXMud2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVp
Z2h0CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHByb3h5ID0g
dGhpcy5fZW5naW5lLmNyZWF0ZVJlbmRlclRhcmdldFRleHR1cmUoc2l6ZSwgb3B0aW9ucyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByb3h5Ll9zd2FwQW5kRGllKHRoaXMp
OworICAgICAgICAgICAgICAgIHRoaXMuaXNSZWFkeSA9IHRydWU7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgY2FzZSBJbnRlcm5hbFRleHR1cmUuREFUQVNPVVJDRV9ERVBU
SFRFWFRVUkU6CisgICAgICAgICAgICAgICAgdmFyIGRlcHRoVGV4dHVyZU9wdGlvbnMgPSB7Cisg
ICAgICAgICAgICAgICAgICAgIGJpbGluZWFyRmlsdGVyaW5nOiB0aGlzLnNhbXBsaW5nTW9kZSAh
PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0
YW50cyJdLlRFWFRVUkVfQklMSU5FQVJfU0FNUExJTkdNT0RFLAorICAgICAgICAgICAgICAgICAg
ICBjb21wYXJpc29uRnVuY3Rpb246IHRoaXMuX2NvbXBhcmlzb25GdW5jdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgZ2VuZXJhdGVTdGVuY2lsOiB0aGlzLl9nZW5lcmF0ZVN0ZW5jaWxCdWZmZXIs
CisgICAgICAgICAgICAgICAgICAgIGlzQ3ViZTogdGhpcy5pc0N1YmUKKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgIHByb3h5ID0gdGhpcy5fZW5naW5lLmNyZWF0ZURlcHRoU3Rl
bmNpbFRleHR1cmUoeyB3aWR0aDogdGhpcy53aWR0aCwgaGVpZ2h0OiB0aGlzLmhlaWdodCB9LCBk
ZXB0aFRleHR1cmVPcHRpb25zKTsKKyAgICAgICAgICAgICAgICBwcm94eS5fc3dhcEFuZERpZSh0
aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLmlzUmVhZHkgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgSW50ZXJuYWxUZXh0dXJlLkRBVEFTT1VSQ0Vf
Q1VCRToKKyAgICAgICAgICAgICAgICBwcm94eSA9IHRoaXMuX2VuZ2luZS5jcmVhdGVDdWJlVGV4
dHVyZSh0aGlzLnVybCwgbnVsbCwgdGhpcy5fZmlsZXMsICF0aGlzLmdlbmVyYXRlTWlwTWFwcywg
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBwcm94eS5fc3dhcEFuZERpZShfdGhp
cyk7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmlzUmVhZHkgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0sIG51bGwsIHRoaXMuZm9ybWF0LCB0aGlzLl9leHRlbnNpb24pOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgSW50ZXJuYWxUZXh0dXJlLkRBVEFTT1VS
Q0VfQ1VCRVJBVzoKKyAgICAgICAgICAgICAgICBwcm94eSA9IHRoaXMuX2VuZ2luZS5jcmVhdGVS
YXdDdWJlVGV4dHVyZSh0aGlzLl9idWZmZXJWaWV3QXJyYXksIHRoaXMud2lkdGgsIHRoaXMuZm9y
bWF0LCB0aGlzLnR5cGUsIHRoaXMuZ2VuZXJhdGVNaXBNYXBzLCB0aGlzLmludmVydFksIHRoaXMu
c2FtcGxpbmdNb2RlLCB0aGlzLl9jb21wcmVzc2lvbik7CisgICAgICAgICAgICAgICAgcHJveHku
X3N3YXBBbmREaWUodGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjYXNlIEludGVybmFsVGV4dHVy
ZS5EQVRBU09VUkNFX0NVQkVSQVdfUkdCRDoKKyAgICAgICAgICAgICAgICBwcm94eSA9IHRoaXMu
X2VuZ2luZS5jcmVhdGVSYXdDdWJlVGV4dHVyZShudWxsLCB0aGlzLndpZHRoLCB0aGlzLmZvcm1h
dCwgdGhpcy50eXBlLCB0aGlzLmdlbmVyYXRlTWlwTWFwcywgdGhpcy5pbnZlcnRZLCB0aGlzLnNh
bXBsaW5nTW9kZSwgdGhpcy5fY29tcHJlc3Npb24pOworICAgICAgICAgICAgICAgIEludGVybmFs
VGV4dHVyZS5fVXBkYXRlUkdCREFzeW5jKHByb3h5LCB0aGlzLl9idWZmZXJWaWV3QXJyYXlBcnJh
eSwgdGhpcy5fc3BoZXJpY2FsUG9seW5vbWlhbCwgdGhpcy5fbG9kR2VuZXJhdGlvblNjYWxlLCB0
aGlzLl9sb2RHZW5lcmF0aW9uT2Zmc2V0KS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHJveHkuX3N3YXBBbmREaWUoX3RoaXMpOworICAgICAgICAgICAgICAgICAgICBf
dGhpcy5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBjYXNlIEludGVybmFsVGV4dHVyZS5EQVRBU09VUkNFX0NV
QkVQUkVGSUxURVJFRDoKKyAgICAgICAgICAgICAgICBwcm94eSA9IHRoaXMuX2VuZ2luZS5jcmVh
dGVQcmVmaWx0ZXJlZEN1YmVUZXh0dXJlKHRoaXMudXJsLCBudWxsLCB0aGlzLl9sb2RHZW5lcmF0
aW9uU2NhbGUsIHRoaXMuX2xvZEdlbmVyYXRpb25PZmZzZXQsIGZ1bmN0aW9uIChwcm94eSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAocHJveHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHByb3h5Ll9zd2FwQW5kRGllKF90aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9LCBu
dWxsLCB0aGlzLmZvcm1hdCwgdGhpcy5fZXh0ZW5zaW9uKTsKKyAgICAgICAgICAgICAgICBwcm94
eS5fc3BoZXJpY2FsUG9seW5vbWlhbCA9IHRoaXMuX3NwaGVyaWNhbFBvbHlub21pYWw7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIEludGVybmFsVGV4dHVyZS5wcm90b3R5cGUuX3N3YXBBbmREaWUgPSBmdW5jdGlvbiAo
dGFyZ2V0KSB7CisgICAgICAgIHRhcmdldC5fd2ViR0xUZXh0dXJlID0gdGhpcy5fd2ViR0xUZXh0
dXJlOworICAgICAgICB0YXJnZXQuX2lzUkdCRCA9IHRoaXMuX2lzUkdCRDsKKyAgICAgICAgaWYg
KHRoaXMuX2ZyYW1lYnVmZmVyKSB7CisgICAgICAgICAgICB0YXJnZXQuX2ZyYW1lYnVmZmVyID0g
dGhpcy5fZnJhbWVidWZmZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2RlcHRoU3Rl
bmNpbEJ1ZmZlcikgeworICAgICAgICAgICAgdGFyZ2V0Ll9kZXB0aFN0ZW5jaWxCdWZmZXIgPSB0
aGlzLl9kZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xv
ZFRleHR1cmVIaWdoKSB7CisgICAgICAgICAgICBpZiAodGFyZ2V0Ll9sb2RUZXh0dXJlSGlnaCkg
eworICAgICAgICAgICAgICAgIHRhcmdldC5fbG9kVGV4dHVyZUhpZ2guZGlzcG9zZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGFyZ2V0Ll9sb2RUZXh0dXJlSGlnaCA9IHRoaXMuX2xv
ZFRleHR1cmVIaWdoOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9sb2RUZXh0dXJlTWlk
KSB7CisgICAgICAgICAgICBpZiAodGFyZ2V0Ll9sb2RUZXh0dXJlTWlkKSB7CisgICAgICAgICAg
ICAgICAgdGFyZ2V0Ll9sb2RUZXh0dXJlTWlkLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRhcmdldC5fbG9kVGV4dHVyZU1pZCA9IHRoaXMuX2xvZFRleHR1cmVNaWQ7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xvZFRleHR1cmVMb3cpIHsKKyAgICAgICAgICAg
IGlmICh0YXJnZXQuX2xvZFRleHR1cmVMb3cpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXQuX2xv
ZFRleHR1cmVMb3cuZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGFyZ2V0
Ll9sb2RUZXh0dXJlTG93ID0gdGhpcy5fbG9kVGV4dHVyZUxvdzsKKyAgICAgICAgfQorICAgICAg
ICBpZiAodGhpcy5faXJyYWRpYW5jZVRleHR1cmUpIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQu
X2lycmFkaWFuY2VUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0Ll9pcnJhZGlhbmNl
VGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YXJnZXQuX2ly
cmFkaWFuY2VUZXh0dXJlID0gdGhpcy5faXJyYWRpYW5jZVRleHR1cmU7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGNhY2hlID0gdGhpcy5fZW5naW5lLmdldExvYWRlZFRleHR1cmVzQ2FjaGUoKTsK
KyAgICAgICAgdmFyIGluZGV4ID0gY2FjaGUuaW5kZXhPZih0aGlzKTsKKyAgICAgICAgaWYgKGlu
ZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgY2FjaGUuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgaW5kZXggPSBjYWNoZS5pbmRleE9mKHRhcmdldCk7CisgICAgICAg
IGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAgICAgIGNhY2hlLnB1c2godGFyZ2V0KTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZSB0aGUgY3VycmVudCBhbGxv
Y2F0ZWQgcmVzb3VyY2VzCisgICAgICovCisgICAgSW50ZXJuYWxUZXh0dXJlLnByb3RvdHlwZS5k
aXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX3dlYkdMVGV4dHVyZSkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3JlZmVyZW5j
ZXMtLTsKKyAgICAgICAgaWYgKHRoaXMuX3JlZmVyZW5jZXMgPT09IDApIHsKKyAgICAgICAgICAg
IHRoaXMuX2VuZ2luZS5fcmVsZWFzZVRleHR1cmUodGhpcyk7CisgICAgICAgICAgICB0aGlzLl93
ZWJHTFRleHR1cmUgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fd2ViR1BVVGV4dHVyZSA9IG51
bGw7CisgICAgICAgICAgICB0aGlzLl93ZWJHUFVTYW1wbGVyID0gbnVsbDsKKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBJbnRlcm5hbFRleHR1cmUuX1VwZGF0ZVJH
QkRBc3luYyA9IGZ1bmN0aW9uIChpbnRlcm5hbFRleHR1cmUsIGRhdGEsIHNwaGVyaWNhbFBvbHlu
b21pYWwsIGxvZFNjYWxlLCBsb2RPZmZzZXQpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9v
bHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgi
ZW52aXJvbm1lbnRUZXh0dXJlVG9vbHMiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoZSBz
b3VyY2Ugb2YgdGhlIHRleHR1cmUgZGF0YSBpcyB1bmtub3duCisgICAgICovCisgICAgSW50ZXJu
YWxUZXh0dXJlLkRBVEFTT1VSQ0VfVU5LTk9XTiA9IDA7CisgICAgLyoqCisgICAgICogVGV4dHVy
ZSBkYXRhIGNvbWVzIGZyb20gYW4gVVJMCisgICAgICovCisgICAgSW50ZXJuYWxUZXh0dXJlLkRB
VEFTT1VSQ0VfVVJMID0gMTsKKyAgICAvKioKKyAgICAgKiBUZXh0dXJlIGRhdGEgaXMgb25seSB1
c2VkIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZQorICAgICAqLworICAgIEludGVybmFsVGV4dHVyZS5E
QVRBU09VUkNFX1RFTVAgPSAyOworICAgIC8qKgorICAgICAqIFRleHR1cmUgZGF0YSBjb21lcyBm
cm9tIHJhdyBkYXRhIChBcnJheUJ1ZmZlcikKKyAgICAgKi8KKyAgICBJbnRlcm5hbFRleHR1cmUu
REFUQVNPVVJDRV9SQVcgPSAzOworICAgIC8qKgorICAgICAqIFRleHR1cmUgY29udGVudCBpcyBk
eW5hbWljICh2aWRlbyBvciBkeW5hbWljIHRleHR1cmUpCisgICAgICovCisgICAgSW50ZXJuYWxU
ZXh0dXJlLkRBVEFTT1VSQ0VfRFlOQU1JQyA9IDQ7CisgICAgLyoqCisgICAgICogVGV4dHVyZSBj
b250ZW50IGlzIGdlbmVyYXRlZCBieSByZW5kZXJpbmcgdG8gaXQKKyAgICAgKi8KKyAgICBJbnRl
cm5hbFRleHR1cmUuREFUQVNPVVJDRV9SRU5ERVJUQVJHRVQgPSA1OworICAgIC8qKgorICAgICAq
IFRleHR1cmUgY29udGVudCBpcyBwYXJ0IG9mIGEgbXVsdGkgcmVuZGVyIHRhcmdldCBwcm9jZXNz
CisgICAgICovCisgICAgSW50ZXJuYWxUZXh0dXJlLkRBVEFTT1VSQ0VfTVVMVElSRU5ERVJUQVJH
RVQgPSA2OworICAgIC8qKgorICAgICAqIFRleHR1cmUgZGF0YSBjb21lcyBmcm9tIGEgY3ViZSBk
YXRhIGZpbGUKKyAgICAgKi8KKyAgICBJbnRlcm5hbFRleHR1cmUuREFUQVNPVVJDRV9DVUJFID0g
NzsKKyAgICAvKioKKyAgICAgKiBUZXh0dXJlIGRhdGEgY29tZXMgZnJvbSBhIHJhdyBjdWJlIGRh
dGEKKyAgICAgKi8KKyAgICBJbnRlcm5hbFRleHR1cmUuREFUQVNPVVJDRV9DVUJFUkFXID0gODsK
KyAgICAvKioKKyAgICAgKiBUZXh0dXJlIGRhdGEgY29tZSBmcm9tIGEgcHJlZmlsdGVyZWQgY3Vi
ZSBkYXRhIGZpbGUKKyAgICAgKi8KKyAgICBJbnRlcm5hbFRleHR1cmUuREFUQVNPVVJDRV9DVUJF
UFJFRklMVEVSRUQgPSA5OworICAgIC8qKgorICAgICAqIFRleHR1cmUgY29udGVudCBpcyByYXcg
M0QgZGF0YQorICAgICAqLworICAgIEludGVybmFsVGV4dHVyZS5EQVRBU09VUkNFX1JBVzNEID0g
MTA7CisgICAgLyoqCisgICAgICogVGV4dHVyZSBjb250ZW50IGlzIGEgZGVwdGggdGV4dHVyZQor
ICAgICAqLworICAgIEludGVybmFsVGV4dHVyZS5EQVRBU09VUkNFX0RFUFRIVEVYVFVSRSA9IDEx
OworICAgIC8qKgorICAgICAqIFRleHR1cmUgZGF0YSBjb21lcyBmcm9tIGEgcmF3IGN1YmUgZGF0
YSBlbmNvZGVkIHdpdGggUkdCRAorICAgICAqLworICAgIEludGVybmFsVGV4dHVyZS5EQVRBU09V
UkNFX0NVQkVSQVdfUkdCRCA9IDEyOworICAgIHJldHVybiBJbnRlcm5hbFRleHR1cmU7Cit9KCkp
OworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0dXJlcy9taXJyb3JU
ZXh0dXJlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL1RleHR1cmVzL21pcnJvclRleHR1cmUudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IE1pcnJvclRleHR1cmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTWlycm9yVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWlycm9y
VGV4dHVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9u
b2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJp
YWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9UZXh0dXJl
cy9yZW5kZXJUYXJnZXRUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJn
ZXRUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNf
Ymx1clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9Qb3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2VzcyAqLyAiLi9Q
b3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5l
cy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9w
bGFuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vTWF0aHMvbWF0aC5wbGFuZSAqLyAiLi9NYXRocy9tYXRoLnBsYW5lLnRzIik7CisK
KworCisKKworCisKKy8qKgorICogTWlycm9yIHRleHR1cmUgY2FuIGJlIHVzZWQgdG8gc2ltdWxh
dGUgdGhlIHZpZXcgZnJvbSBhIG1pcnJvciBpbiBhIHNjZW5lLgorICogSXQgd2lsbCBkeW5hbWlj
YWxseSBiZSByZW5kZXJlZCBldmVyeSBmcmFtZSB0byBhZGFwdCB0byB0aGUgY2FtZXJhIHBvaW50
IG9mIHZpZXcuCisgKiBZb3UgY2FuIHRoZW4gZWFzaWx5IHVzZSBpdCBhcyBhIHJlZmxlY3Rpb25U
ZXh0dXJlIG9uIGEgZmxhdCBzdXJmYWNlLgorICogSW4gY2FzZSB0aGUgc3VyZmFjZSBpcyBub3Qg
YSBwbGFuZSwgcGxlYXNlIGNvbnNpZGVyIHJlbHlpbmcgb24gcmVmbGVjdGlvbiBwcm9iZXMuCisg
KiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3JlZmxlY3QjbWlycm9ycwor
ICovCit2YXIgTWlycm9yVGV4dHVyZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIp
IHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShN
aXJyb3JUZXh0dXJlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIE1p
cnJvciBUZXh0dXJlLgorICAgICAqIE1pcnJvciB0ZXh0dXJlIGNhbiBiZSB1c2VkIHRvIHNpbXVs
YXRlIHRoZSB2aWV3IGZyb20gYSBtaXJyb3IgaW4gYSBzY2VuZS4KKyAgICAgKiBJdCB3aWxsIGR5
bmFtaWNhbGx5IGJlIHJlbmRlcmVkIGV2ZXJ5IGZyYW1lIHRvIGFkYXB0IHRvIHRoZSBjYW1lcmEg
cG9pbnQgb2Ygdmlldy4KKyAgICAgKiBZb3UgY2FuIHRoZW4gZWFzaWx5IHVzZSBpdCBhcyBhIHJl
ZmxlY3Rpb25UZXh0dXJlIG9uIGEgZmxhdCBzdXJmYWNlLgorICAgICAqIEluIGNhc2UgdGhlIHN1
cmZhY2UgaXMgbm90IGEgcGxhbmUsIHBsZWFzZSBjb25zaWRlciByZWx5aW5nIG9uIHJlZmxlY3Rp
b24gcHJvYmVzLgorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
cmVmbGVjdCNtaXJyb3JzCisgICAgICogQHBhcmFtIG5hbWUKKyAgICAgKiBAcGFyYW0gc2l6ZQor
ICAgICAqIEBwYXJhbSBzY2VuZQorICAgICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMKKyAgICAg
KiBAcGFyYW0gdHlwZQorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUKKyAgICAgKiBAcGFyYW0g
Z2VuZXJhdGVEZXB0aEJ1ZmZlcgorICAgICAqLworICAgIGZ1bmN0aW9uIE1pcnJvclRleHR1cmUo
bmFtZSwgc2l6ZSwgc2NlbmUsIGdlbmVyYXRlTWlwTWFwcywgdHlwZSwgc2FtcGxpbmdNb2RlLCBn
ZW5lcmF0ZURlcHRoQnVmZmVyKSB7CisgICAgICAgIGlmICh0eXBlID09PSB2b2lkIDApIHsgdHlw
ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7IH0KKyAgICAgICAgaWYgKHNhbXBsaW5n
TW9kZSA9PT0gdm9pZCAwKSB7IHNhbXBsaW5nTW9kZSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FN
UExJTkdNT0RFOyB9CisgICAgICAgIGlmIChnZW5lcmF0ZURlcHRoQnVmZmVyID09PSB2b2lkIDAp
IHsgZ2VuZXJhdGVEZXB0aEJ1ZmZlciA9IHRydWU7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1
cGVyLmNhbGwodGhpcywgbmFtZSwgc2l6ZSwgc2NlbmUsIGdlbmVyYXRlTWlwTWFwcywgdHJ1ZSwg
dHlwZSwgZmFsc2UsIHNhbXBsaW5nTW9kZSwgZ2VuZXJhdGVEZXB0aEJ1ZmZlcikgfHwgdGhpczsK
KyAgICAgICAgX3RoaXMuc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZSB0aGUgcmVmbGVjdGlvbiBwbGFuZSB3ZSB3YW50IHRvIHVzZS4gVGhlIG1pcnJvclBsYW5l
IGlzIHVzdWFsbHkgc2V0IHRvIHRoZSBjb25zdHJ1Y3RlZCByZWZsZWN0b3IuCisgICAgICAgICAq
IEl0IGlzIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHNldCB0aGUgbWlycm9yUGxhbmUgYnkgZGlyZWN0
bHkgdXNpbmcgYSBQbGFuZShhLCBiLCBjLCBkKSB3aGVyZSBhLCBiIGFuZCBjIGdpdmUgdGhlIHBs
YW5lIG5vcm1hbCB2ZWN0b3IgKGEsIGIsIGMpIGFuZCBkIGlzIGEgc2NhbGFyIGRpc3BsYWNlbWVu
dCBmcm9tIHRoZSBtaXJyb3JQbGFuZSB0byB0aGUgb3JpZ2luLiBIb3dldmVyIGluIGFsbCBidXQg
dGhlIHZlcnkgc2ltcGxlc3Qgb2Ygc2l0dWF0aW9ucyBpdCBpcyBtb3JlIHN0cmFpZ2h0IGZvcndh
cmQgdG8gc2V0IGl0IHRvIHRoZSByZWZsZWN0b3IgYXMgc3RhdGVkIGluIHRoZSBkb2MuCisgICAg
ICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcmVmbGVjdCNtaXJy
b3JzCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5taXJyb3JQbGFuZSA9IG5ldyBfTWF0aHNf
bWF0aF9wbGFuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQbGFuZSJdKDAsIDEsIDAs
IDEpOworICAgICAgICBfdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLlplcm8oKTsKKyAgICAgICAg
X3RoaXMuX21pcnJvck1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9hZGFwdGl2ZUJs
dXJLZXJuZWwgPSAwOworICAgICAgICBfdGhpcy5fYmx1cktlcm5lbFggPSAwOworICAgICAgICBf
dGhpcy5fYmx1cktlcm5lbFkgPSAwOworICAgICAgICBfdGhpcy5fYmx1clJhdGlvID0gMS4wOwor
ICAgICAgICBfdGhpcy5pZ25vcmVDYW1lcmFWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIF90aGlz
Ll91cGRhdGVHYW1tYVNwYWNlKCk7CisgICAgICAgIF90aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25m
aWdDaGFuZ2VPYnNlcnZlciA9IHNjZW5lLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ub25V
cGRhdGVQYXJhbWV0ZXJzLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5fdXBk
YXRlR2FtbWFTcGFjZTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLm9uQmVmb3JlUmVuZGVy
T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLlJlZmxlY3Rpb25Ub1Jl
ZihfdGhpcy5taXJyb3JQbGFuZSwgX3RoaXMuX21pcnJvck1hdHJpeCk7CisgICAgICAgICAgICBf
dGhpcy5fc2F2ZWRWaWV3TWF0cml4ID0gc2NlbmUuZ2V0Vmlld01hdHJpeCgpOworICAgICAgICAg
ICAgX3RoaXMuX21pcnJvck1hdHJpeC5tdWx0aXBseVRvUmVmKF90aGlzLl9zYXZlZFZpZXdNYXRy
aXgsIF90aGlzLl90cmFuc2Zvcm1NYXRyaXgpOworICAgICAgICAgICAgc2NlbmUuc2V0VHJhbnNm
b3JtTWF0cml4KF90aGlzLl90cmFuc2Zvcm1NYXRyaXgsIHNjZW5lLmdldFByb2plY3Rpb25NYXRy
aXgoKSk7CisgICAgICAgICAgICBzY2VuZS5jbGlwUGxhbmUgPSBfdGhpcy5taXJyb3JQbGFuZTsK
KyAgICAgICAgICAgIHNjZW5lLmdldEVuZ2luZSgpLmN1bGxCYWNrRmFjZXMgPSBmYWxzZTsKKyAg
ICAgICAgICAgIHNjZW5lLl9taXJyb3JlZENhbWVyYVBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29y
ZGluYXRlcyhzY2VuZS5hY3RpdmVDYW1lcmEuZ2xvYmFsUG9zaXRpb24sIF90aGlzLl9taXJyb3JN
YXRyaXgpOworICAgICAgICB9KTsKKyAgICAgICAgX3RoaXMub25BZnRlclJlbmRlck9ic2VydmFi
bGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNjZW5lLnNldFRyYW5zZm9ybU1hdHJp
eChfdGhpcy5fc2F2ZWRWaWV3TWF0cml4LCBzY2VuZS5nZXRQcm9qZWN0aW9uTWF0cml4KCkpOwor
ICAgICAgICAgICAgc2NlbmUuZ2V0RW5naW5lKCkuY3VsbEJhY2tGYWNlcyA9IHRydWU7CisgICAg
ICAgICAgICBzY2VuZS5fbWlycm9yZWRDYW1lcmFQb3NpdGlvbiA9IG51bGw7CisgICAgICAgICAg
ICBzY2VuZS5jbGlwUGxhbmUgPSBudWxsOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIF90
aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWlycm9yVGV4dHVyZS5wcm90
b3R5cGUsICJibHVyUmF0aW8iLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2JsdXJSYXRpbzsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIERlZmluZSB0aGUgYmx1ciByYXRpbyB1c2VkIHRvIGJsdXIgdGhlIHJlZmxlY3Rp
b24gaWYgbmVlZGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9ibHVyUmF0aW8gPT09IHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYmx1clJh
dGlvID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9wcmVwYXJlUG9zdFByb2Nlc3NlcygpOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWlycm9yVGV4dHVy
ZS5wcm90b3R5cGUsICJhZGFwdGl2ZUJsdXJLZXJuZWwiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBEZWZpbmUgdGhlIGFkYXB0aXZlIGJsdXIga2VybmVsIHVzZWQgdG8gYmx1ciB0aGUgcmVm
bGVjdGlvbiBpZiBuZWVkZWQuCisgICAgICAgICAqIFRoaXMgd2lsbCBhdXRvY29tcHV0ZSB0aGUg
Y2xvc2VzdCBiZXN0IG1hdGNoIGZvciB0aGUgYGJsdXJLZXJuZWxgCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYWRhcHRpdmVC
bHVyS2VybmVsID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcHV0ZUJsdXJLZXJu
ZWwoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1pcnJv
clRleHR1cmUucHJvdG90eXBlLCAiYmx1cktlcm5lbCIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERlZmluZSB0aGUgYmx1ciBrZXJuZWwgdXNlZCB0byBibHVyIHRoZSByZWZsZWN0aW9uIGlm
IG5lZWRlZC4KKyAgICAgICAgICogUGxlYXNlIGNvbnNpZGVyIHVzaW5nIGBhZGFwdGl2ZUJsdXJL
ZXJuZWxgIGFzIGl0IGNvdWxkIGZpbmQgdGhlIGNsb3Nlc3QgYmVzdCB2YWx1ZSBmb3IgeW91Lgor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IHRoaXMuYmx1cktlcm5lbFggPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYmx1cktlcm5lbFkg
PSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1p
cnJvclRleHR1cmUucHJvdG90eXBlLCAiYmx1cktlcm5lbFgiLCB7CisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JsdXJLZXJuZWxYOworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBibHVyIGtlcm5lbCBvbiB0
aGUgWCBBeGlzIHVzZWQgdG8gYmx1ciB0aGUgcmVmbGVjdGlvbiBpZiBuZWVkZWQuCisgICAgICAg
ICAqIFBsZWFzZSBjb25zaWRlciB1c2luZyBgYWRhcHRpdmVCbHVyS2VybmVsYCBhcyBpdCBjb3Vs
ZCBmaW5kIHRoZSBjbG9zZXN0IGJlc3QgdmFsdWUgZm9yIHlvdS4KKyAgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fYmx1cktl
cm5lbFggPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5fYmx1cktlcm5lbFggPSB2YWx1ZTsKKyAgICAgICAgICAgIHRo
aXMuX3ByZXBhcmVQb3N0UHJvY2Vzc2VzKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShNaXJyb3JUZXh0dXJlLnByb3RvdHlwZSwgImJsdXJLZXJuZWxZIiwg
eworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9i
bHVyS2VybmVsWTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0
aGUgYmx1ciBrZXJuZWwgb24gdGhlIFkgQXhpcyB1c2VkIHRvIGJsdXIgdGhlIHJlZmxlY3Rpb24g
aWYgbmVlZGVkLgorICAgICAgICAgKiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgYGFkYXB0aXZlQmx1
cktlcm5lbGAgYXMgaXQgY291bGQgZmluZCB0aGUgY2xvc2VzdCBiZXN0IHZhbHVlIGZvciB5b3Uu
CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX2JsdXJLZXJuZWxZID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2JsdXJLZXJuZWxZID0gdmFs
dWU7CisgICAgICAgICAgICB0aGlzLl9wcmVwYXJlUG9zdFByb2Nlc3NlcygpOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBNaXJyb3JUZXh0dXJlLnByb3RvdHlwZS5fYXV0b0NvbXB1dGVCbHVyS2Vy
bmVsID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRTY2VuZSgp
LmdldEVuZ2luZSgpOworICAgICAgICB2YXIgZHcgPSB0aGlzLmdldFJlbmRlcldpZHRoKCkgLyBl
bmdpbmUuZ2V0UmVuZGVyV2lkdGgoKTsKKyAgICAgICAgdmFyIGRoID0gdGhpcy5nZXRSZW5kZXJI
ZWlnaHQoKSAvIGVuZ2luZS5nZXRSZW5kZXJIZWlnaHQoKTsKKyAgICAgICAgdGhpcy5ibHVyS2Vy
bmVsWCA9IHRoaXMuX2FkYXB0aXZlQmx1cktlcm5lbCAqIGR3OworICAgICAgICB0aGlzLmJsdXJL
ZXJuZWxZID0gdGhpcy5fYWRhcHRpdmVCbHVyS2VybmVsICogZGg7CisgICAgfTsKKyAgICBNaXJy
b3JUZXh0dXJlLnByb3RvdHlwZS5fb25SYXRpb1Jlc2NhbGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICh0aGlzLl9zaXplUmF0aW8pIHsKKyAgICAgICAgICAgIHRoaXMucmVzaXplKHRoaXMu
X2luaXRpYWxTaXplUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5fYWRhcHRpdmVC
bHVyS2VybmVsKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVBvc3RQcm9jZXNzZXMo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYWRhcHRpdmVC
bHVyS2VybmVsKSB7CisgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcHV0ZUJsdXJLZXJuZWwoKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgTWlycm9yVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZUdh
bW1hU3BhY2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuZ2FtbWFTcGFjZSA9ICF0aGlz
LnNjZW5lLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uaXNFbmFibGVkIHx8ICF0aGlzLnNj
ZW5lLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uYXBwbHlCeVBvc3RQcm9jZXNzOworICAg
IH07CisgICAgTWlycm9yVGV4dHVyZS5wcm90b3R5cGUuX3ByZXBhcmVQb3N0UHJvY2Vzc2VzID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmNsZWFyUG9zdFByb2Nlc3Nlcyh0cnVlKTsKKyAg
ICAgICAgaWYgKHRoaXMuX2JsdXJLZXJuZWxYICYmIHRoaXMuX2JsdXJLZXJuZWxZKSB7CisgICAg
ICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRTY2VuZSgpLmdldEVuZ2luZSgpOworICAgICAg
ICAgICAgdmFyIHRleHR1cmVUeXBlID0gZW5naW5lLmdldENhcHMoKS50ZXh0dXJlRmxvYXRSZW5k
ZXIgPyBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfRkxPQVQgOiBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfSEFMRl9GTE9BVDsK
KyAgICAgICAgICAgIHRoaXMuX2JsdXJYID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX2JsdXJQb3N0UHJv
Y2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJCbHVyUG9zdFByb2Nlc3MiXSgiaG9y
aXpvbnRhbCBibHVyIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IyIl0oMS4wLCAwKSwgdGhpcy5fYmx1cktlcm5lbFgsIHRoaXMuX2Js
dXJSYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIGVuZ2luZSwg
ZmFsc2UsIHRleHR1cmVUeXBlKTsKKyAgICAgICAgICAgIHRoaXMuX2JsdXJYLmF1dG9DbGVhciA9
IGZhbHNlOworICAgICAgICAgICAgaWYgKHRoaXMuX2JsdXJSYXRpbyA9PT0gMSAmJiB0aGlzLnNh
bXBsZXMgPCAyICYmIHRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ibHVy
WC5pbnB1dFRleHR1cmUgPSB0aGlzLl90ZXh0dXJlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYmx1clguYWx3YXlzRm9yY2VQT1QgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYmx1clkgPSBuZXcgX1Bvc3RQ
cm9jZXNzZXNfYmx1clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkJs
dXJQb3N0UHJvY2VzcyJdKCJ2ZXJ0aWNhbCBibHVyIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0oMCwgMS4wKSwgdGhpcy5fYmx1
cktlcm5lbFksIHRoaXMuX2JsdXJSYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0
dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1Q
TElOR01PREUsIGVuZ2luZSwgZmFsc2UsIHRleHR1cmVUeXBlKTsKKyAgICAgICAgICAgIHRoaXMu
X2JsdXJZLmF1dG9DbGVhciA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fYmx1clkuYWx3YXlz
Rm9yY2VQT1QgPSB0aGlzLl9ibHVyUmF0aW8gIT09IDE7CisgICAgICAgICAgICB0aGlzLmFkZFBv
c3RQcm9jZXNzKHRoaXMuX2JsdXJYKTsKKyAgICAgICAgICAgIHRoaXMuYWRkUG9zdFByb2Nlc3Mo
dGhpcy5fYmx1clkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYg
KHRoaXMuX2JsdXJZKSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQb3N0UHJvY2Vzcyh0
aGlzLl9ibHVyWSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYmx1clkuZGlzcG9zZSgpOworICAg
ICAgICAgICAgICAgIHRoaXMuX2JsdXJZID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh0aGlzLl9ibHVyWCkgeworICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlUG9zdFBy
b2Nlc3ModGhpcy5fYmx1clgpOworICAgICAgICAgICAgICAgIHRoaXMuX2JsdXJYLmRpc3Bvc2Uo
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9ibHVyWCA9IG51bGw7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lIHRoZSBtaXJyb3IgdGV4dHVy
ZS4KKyAgICAgKiBAcmV0dXJucyB0aGUgY2xvbmVkIHRleHR1cmUKKyAgICAgKi8KKyAgICBNaXJy
b3JUZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNj
ZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICBpZiAoIXNjZW5lKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB2YXIgdGV4dHVyZVNpemUgPSB0aGlz
LmdldFNpemUoKTsKKyAgICAgICAgdmFyIG5ld1RleHR1cmUgPSBuZXcgTWlycm9yVGV4dHVyZSh0
aGlzLm5hbWUsIHRleHR1cmVTaXplLndpZHRoLCBzY2VuZSwgdGhpcy5fcmVuZGVyVGFyZ2V0T3B0
aW9ucy5nZW5lcmF0ZU1pcE1hcHMsIHRoaXMuX3JlbmRlclRhcmdldE9wdGlvbnMudHlwZSwgdGhp
cy5fcmVuZGVyVGFyZ2V0T3B0aW9ucy5zYW1wbGluZ01vZGUsIHRoaXMuX3JlbmRlclRhcmdldE9w
dGlvbnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlcik7CisgICAgICAgIC8vIEJhc2UgdGV4dHVyZQorICAg
ICAgICBuZXdUZXh0dXJlLmhhc0FscGhhID0gdGhpcy5oYXNBbHBoYTsKKyAgICAgICAgbmV3VGV4
dHVyZS5sZXZlbCA9IHRoaXMubGV2ZWw7CisgICAgICAgIC8vIE1pcnJvciBUZXh0dXJlCisgICAg
ICAgIG5ld1RleHR1cmUubWlycm9yUGxhbmUgPSB0aGlzLm1pcnJvclBsYW5lLmNsb25lKCk7Cisg
ICAgICAgIGlmICh0aGlzLnJlbmRlckxpc3QpIHsKKyAgICAgICAgICAgIG5ld1RleHR1cmUucmVu
ZGVyTGlzdCA9IHRoaXMucmVuZGVyTGlzdC5zbGljZSgwKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbmV3VGV4dHVyZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUg
dGV4dHVyZSB0byBhIEpTT04gcmVwcmVzZW50YXRpb24geW91IGNvdWxkIHVzZSBpbiBQYXJzZSBs
YXRlciBvbgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxpemVkIEpTT04gcmVwcmVzZW50YXRp
b24KKyAgICAgKi8KKyAgICBNaXJyb3JUZXh0dXJlLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5uYW1lKSB7CisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9zdXBl
ci5wcm90b3R5cGUuc2VyaWFsaXplLmNhbGwodGhpcyk7CisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QubWlycm9yUGxhbmUgPSB0aGlzLm1pcnJvclBsYW5lLmFzQXJyYXkoKTsKKyAgICAgICAg
cmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNw
b3NlIHRoZSB0ZXh0dXJlIGFuZCByZWxlYXNlIGl0cyBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAg
ICAgKi8KKyAgICBNaXJyb3JUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAgICAgICAg
dGhpcy5zY2VuZS5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLm9uVXBkYXRlUGFyYW1ldGVy
cy5yZW1vdmUodGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlnQ2hhbmdlT2JzZXJ2ZXIpOworICAg
IH07CisgICAgcmV0dXJuIE1pcnJvclRleHR1cmU7Cit9KF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVu
ZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJSZW5kZXJUYXJn
ZXRUZXh0dXJlIl0pKTsKKworX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5fQ3JlYXRlTWlycm9yID0gZnVuY3Rpb24gKG5h
bWUsIHJlbmRlclRhcmdldFNpemUsIHNjZW5lLCBnZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICByZXR1
cm4gbmV3IE1pcnJvclRleHR1cmUobmFtZSwgcmVuZGVyVGFyZ2V0U2l6ZSwgc2NlbmUsIGdlbmVy
YXRlTWlwTWFwcyk7Cit9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4
dHVyZXMvbXVsdGlSZW5kZXJUYXJnZXQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL1RleHR1cmVz
L211bHRpUmVuZGVyVGFyZ2V0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTXVsdGlSZW5k
ZXJUYXJnZXQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTXVsdGlSZW5k
ZXJUYXJnZXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE11bHRpUmVuZGVyVGFyZ2V0OyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xp
Yi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVy
aWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVy
ZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFy
Z2V0VGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19FeHRlbnNpb25zX2VuZ2luZV9tdWx0
aVJlbmRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vRW5naW5lcy9FeHRlbnNpb25zL2VuZ2luZS5tdWx0aVJlbmRlciAqLyAiLi9F
bmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLm11bHRpUmVuZGVyLnRzIik7CisKKworCisKKworLyoq
CisgKiBBIG11bHRpIHJlbmRlciB0YXJnZXQsIGxpa2UgYSByZW5kZXIgdGFyZ2V0IHByb3ZpZGVz
IHRoZSBhYmlsaXR5IHRvIHJlbmRlciB0byBhIHRleHR1cmUuCisgKiBVbmxpa2UgdGhlIHJlbmRl
ciB0YXJnZXQsIGl0IGNhbiByZW5kZXIgdG8gc2V2ZXJhbCBkcmF3IGJ1ZmZlcnMgaW4gb25lIGRy
YXcuCisgKiBUaGlzIGlzIHNwZWNpYWxseSBpbnRlcmVzdGluZyBpbiBkZWZlcnJlZCByZW5kZXJp
bmcgb3IgZm9yIGFueSBlZmZlY3RzIHJlcXVpcmluZyBtb3JlIHRoYW4KKyAqIGp1c3Qgb25lIGNv
bG9yIGZyb20gYSBzaW5nbGUgcGFzcy4KKyAqLwordmFyIE11bHRpUmVuZGVyVGFyZ2V0ID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKE11bHRpUmVuZGVyVGFyZ2V0LCBfc3VwZXIpOwor
ICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIGEgbmV3IG11bHRpIHJlbmRlciB0YXJnZXQgdGV4
dHVyZS4KKyAgICAgKiBBIG11bHRpIHJlbmRlciB0YXJnZXQsIGxpa2UgYSByZW5kZXIgdGFyZ2V0
IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHJlbmRlciB0byBhIHRleHR1cmUuCisgICAgICogVW5s
aWtlIHRoZSByZW5kZXIgdGFyZ2V0LCBpdCBjYW4gcmVuZGVyIHRvIHNldmVyYWwgZHJhdyBidWZm
ZXJzIGluIG9uZSBkcmF3LgorICAgICAqIFRoaXMgaXMgc3BlY2lhbGx5IGludGVyZXN0aW5nIGlu
IGRlZmVycmVkIHJlbmRlcmluZyBvciBmb3IgYW55IGVmZmVjdHMgcmVxdWlyaW5nIG1vcmUgdGhh
bgorICAgICAqIGp1c3Qgb25lIGNvbG9yIGZyb20gYSBzaW5nbGUgcGFzcy4KKyAgICAgKiBAcGFy
YW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gc2l6
ZSBEZWZpbmUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcnMgdG8gcmVuZGVyIHRvCisgICAgICogQHBh
cmFtIGNvdW50IERlZmluZSB0aGUgbnVtYmVyIG9mIHRhcmdldCB3ZSBhcmUgcmVuZGVyaW5nIGlu
dG8KKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBiZWxv
bmdzIHRvCisgICAgICogQHBhcmFtIG9wdGlvbnMgRGVmaW5lIHRoZSBvcHRpb25zIHVzZWQgdG8g
Y3JlYXRlIHRoZSBtdWx0aSByZW5kZXIgdGFyZ2V0CisgICAgICovCisgICAgZnVuY3Rpb24gTXVs
dGlSZW5kZXJUYXJnZXQobmFtZSwgc2l6ZSwgY291bnQsIHNjZW5lLCBvcHRpb25zKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBnZW5lcmF0ZU1pcE1hcHMgPSBvcHRp
b25zICYmIG9wdGlvbnMuZ2VuZXJhdGVNaXBNYXBzID8gb3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHMg
OiBmYWxzZTsKKyAgICAgICAgdmFyIGdlbmVyYXRlRGVwdGhUZXh0dXJlID0gb3B0aW9ucyAmJiBv
cHRpb25zLmdlbmVyYXRlRGVwdGhUZXh0dXJlID8gb3B0aW9ucy5nZW5lcmF0ZURlcHRoVGV4dHVy
ZSA6IGZhbHNlOworICAgICAgICB2YXIgZG9Ob3RDaGFuZ2VBc3BlY3RSYXRpbyA9ICFvcHRpb25z
IHx8IG9wdGlvbnMuZG9Ob3RDaGFuZ2VBc3BlY3RSYXRpbyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6
IG9wdGlvbnMuZG9Ob3RDaGFuZ2VBc3BlY3RSYXRpbzsKKyAgICAgICAgX3RoaXMgPSBfc3VwZXIu
Y2FsbCh0aGlzLCBuYW1lLCBzaXplLCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzLCBkb05vdENoYW5n
ZUFzcGVjdFJhdGlvKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fZW5naW5lID0gc2NlbmUuZ2V0
RW5naW5lKCk7CisgICAgICAgIGlmICghX3RoaXMuaXNTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAg
IF90aGlzLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgdHlwZXMgPSBbXTsKKyAgICAgICAgdmFyIHNhbXBsaW5nTW9kZXMgPSBbXTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBpZiAob3B0
aW9ucyAmJiBvcHRpb25zLnR5cGVzICYmIG9wdGlvbnMudHlwZXNbaV0gIT09IHVuZGVmaW5lZCkg
eworICAgICAgICAgICAgICAgIHR5cGVzLnB1c2gob3B0aW9ucy50eXBlc1tpXSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKG9w
dGlvbnMgJiYgb3B0aW9ucy5kZWZhdWx0VHlwZSA/IG9wdGlvbnMuZGVmYXVsdFR5cGUgOiBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChvcHRpb25zICYmIG9wdGlvbnMuc2FtcGxpbmdNb2RlcyAmJiBvcHRpb25zLnNhbXBsaW5nTW9k
ZXNbaV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIHNhbXBsaW5nTW9kZXMucHVz
aChvcHRpb25zLnNhbXBsaW5nTW9kZXNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgc2FtcGxpbmdNb2Rlcy5wdXNoKF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0uQklM
SU5FQVJfU0FNUExJTkdNT0RFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2
YXIgZ2VuZXJhdGVEZXB0aEJ1ZmZlciA9ICFvcHRpb25zIHx8IG9wdGlvbnMuZ2VuZXJhdGVEZXB0
aEJ1ZmZlciA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuZ2VuZXJhdGVEZXB0aEJ1ZmZl
cjsKKyAgICAgICAgdmFyIGdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA9ICFvcHRpb25zIHx8IG9wdGlv
bnMuZ2VuZXJhdGVTdGVuY2lsQnVmZmVyID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG9wdGlvbnMu
Z2VuZXJhdGVTdGVuY2lsQnVmZmVyOworICAgICAgICBfdGhpcy5fc2l6ZSA9IHNpemU7CisgICAg
ICAgIF90aGlzLl9tdWx0aVJlbmRlclRhcmdldE9wdGlvbnMgPSB7CisgICAgICAgICAgICBzYW1w
bGluZ01vZGVzOiBzYW1wbGluZ01vZGVzLAorICAgICAgICAgICAgZ2VuZXJhdGVNaXBNYXBzOiBn
ZW5lcmF0ZU1pcE1hcHMsCisgICAgICAgICAgICBnZW5lcmF0ZURlcHRoQnVmZmVyOiBnZW5lcmF0
ZURlcHRoQnVmZmVyLAorICAgICAgICAgICAgZ2VuZXJhdGVTdGVuY2lsQnVmZmVyOiBnZW5lcmF0
ZVN0ZW5jaWxCdWZmZXIsCisgICAgICAgICAgICBnZW5lcmF0ZURlcHRoVGV4dHVyZTogZ2VuZXJh
dGVEZXB0aFRleHR1cmUsCisgICAgICAgICAgICB0eXBlczogdHlwZXMsCisgICAgICAgICAgICB0
ZXh0dXJlQ291bnQ6IGNvdW50CisgICAgICAgIH07CisgICAgICAgIF90aGlzLl9jcmVhdGVJbnRl
cm5hbFRleHR1cmVzKCk7CisgICAgICAgIF90aGlzLl9jcmVhdGVUZXh0dXJlcygpOworICAgICAg
ICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdWx0aVJl
bmRlclRhcmdldC5wcm90b3R5cGUsICJpc1N1cHBvcnRlZCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldCBpZiBkcmF3IGJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhl
IHVzZWQgaGFyZHdhcmUgYW5kIGJyb3dzZXIuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbmdpbmUud2ViR0xWZXJzaW9u
ID4gMSB8fCB0aGlzLl9lbmdpbmUuZ2V0Q2FwcygpLmRyYXdCdWZmZXJzRXh0ZW5zaW9uOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVsdGlSZW5kZXJUYXJn
ZXQucHJvdG90eXBlLCAidGV4dHVyZXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQg
dGhlIGxpc3Qgb2YgdGV4dHVyZXMgZ2VuZXJhdGVkIGJ5IHRoZSBtdWx0aSByZW5kZXIgdGFyZ2V0
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fdGV4dHVyZXM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShNdWx0aVJlbmRlclRhcmdldC5wcm90b3R5cGUsICJkZXB0aFRleHR1cmUiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgdGhlIGRlcHRoIHRleHR1cmUgZ2VuZXJhdGVk
IGJ5IHRoZSBtdWx0aSByZW5kZXIgdGFyZ2V0IGlmIG9wdGlvbnMuZ2VuZXJhdGVEZXB0aFRleHR1
cmUgaGFzIGJlZW4gc2V0CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlc1t0aGlzLl90ZXh0dXJlcy5sZW5ndGgg
LSAxXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRp
UmVuZGVyVGFyZ2V0LnByb3RvdHlwZSwgIndyYXBVIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogU2V0IHRoZSB3cmFwcGluZyBtb2RlIG9uIFUgb2YgYWxsIHRoZSB0ZXh0dXJlcyB3ZSBhcmUg
cmVuZGVyaW5nIHRvLgorICAgICAgICAgKiBDYW4gYmUgYW55IG9mIHRoZSBUZXh0dXJlLiAoQ0xB
TVBfQUREUkVTU01PREUsIE1JUlJPUl9BRERSRVNTTU9ERSBvciBXUkFQX0FERFJFU1NNT0RFKQor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAod3JhcCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX3RleHR1cmVzKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0aGlz
Ll90ZXh0dXJlc1tpXS53cmFwVSA9IHdyYXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVsdGlS
ZW5kZXJUYXJnZXQucHJvdG90eXBlLCAid3JhcFYiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBTZXQgdGhlIHdyYXBwaW5nIG1vZGUgb24gViBvZiBhbGwgdGhlIHRleHR1cmVzIHdlIGFyZSBy
ZW5kZXJpbmcgdG8uCisgICAgICAgICAqIENhbiBiZSBhbnkgb2YgdGhlIFRleHR1cmUuIChDTEFN
UF9BRERSRVNTTU9ERSwgTUlSUk9SX0FERFJFU1NNT0RFIG9yIFdSQVBfQUREUkVTU01PREUpCisg
ICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh3cmFwKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fdGV4dHVyZXMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX3RleHR1cmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X3RleHR1cmVzW2ldLndyYXBWID0gd3JhcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKiBAaGlkZGVuICovCisgICAgTXVsdGlSZW5k
ZXJUYXJnZXQucHJvdG90eXBlLl9yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlz
LnJlbGVhc2VJbnRlcm5hbFRleHR1cmVzKCk7CisgICAgICAgIHRoaXMuX2NyZWF0ZUludGVybmFs
VGV4dHVyZXMoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9pbnRlcm5hbFRl
eHR1cmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3Rl
eHR1cmVzW2ldOworICAgICAgICAgICAgdGV4dHVyZS5fdGV4dHVyZSA9IHRoaXMuX2ludGVybmFs
VGV4dHVyZXNbaV07CisgICAgICAgIH0KKyAgICAgICAgLy8gS2VlcHMgcmVmZXJlbmNlcyB0byBm
cmFtZSBidWZmZXIgYW5kIHN0ZW5jaWwvZGVwdGggYnVmZmVyCisgICAgICAgIHRoaXMuX3RleHR1
cmUgPSB0aGlzLl9pbnRlcm5hbFRleHR1cmVzWzBdOworICAgIH07CisgICAgTXVsdGlSZW5kZXJU
YXJnZXQucHJvdG90eXBlLl9jcmVhdGVJbnRlcm5hbFRleHR1cmVzID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB0aGlzLl9pbnRlcm5hbFRleHR1cmVzID0gdGhpcy5fZW5naW5lLmNyZWF0ZU11bHRp
cGxlUmVuZGVyVGFyZ2V0KHRoaXMuX3NpemUsIHRoaXMuX211bHRpUmVuZGVyVGFyZ2V0T3B0aW9u
cyk7CisgICAgfTsKKyAgICBNdWx0aVJlbmRlclRhcmdldC5wcm90b3R5cGUuX2NyZWF0ZVRleHR1
cmVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ludGVybmFsVGV4dHVyZXMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0obnVsbCwgdGhpcy5n
ZXRTY2VuZSgpKTsKKyAgICAgICAgICAgIHRleHR1cmUuX3RleHR1cmUgPSB0aGlzLl9pbnRlcm5h
bFRleHR1cmVzW2ldOworICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh0ZXh0dXJlKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBLZWVwcyByZWZlcmVuY2VzIHRvIGZyYW1lIGJ1ZmZlciBh
bmQgc3RlbmNpbC9kZXB0aCBidWZmZXIKKyAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX2lu
dGVybmFsVGV4dHVyZXNbMF07CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVs
dGlSZW5kZXJUYXJnZXQucHJvdG90eXBlLCAic2FtcGxlcyIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIERlZmluZSB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdXNlZCBpZiBNU0FBIGlzIGVuYWJs
ZWQuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9zYW1wbGVzOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3NhbXBsZXMgPT09IHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
c2FtcGxlcyA9IHRoaXMuX2VuZ2luZS51cGRhdGVNdWx0aXBsZVJlbmRlclRhcmdldFRleHR1cmVT
YW1wbGVDb3VudCh0aGlzLl9pbnRlcm5hbFRleHR1cmVzLCB2YWx1ZSk7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8qKgorICAgICAqIFJlc2l6ZSBhbGwgdGhlIHRleHR1cmVzIGluIHRoZSBtdWx0
aSByZW5kZXIgdGFyZ2V0LgorICAgICAqIEJlIGNhcnJlZnVsbCBhcyBpdCB3aWxsIHJlY3JlYXRl
IGFsbCB0aGUgZGF0YSBpbiB0aGUgbmV3IHRleHR1cmUuCisgICAgICogQHBhcmFtIHNpemUgRGVm
aW5lIHRoZSBuZXcgc2l6ZQorICAgICAqLworICAgIE11bHRpUmVuZGVyVGFyZ2V0LnByb3RvdHlw
ZS5yZXNpemUgPSBmdW5jdGlvbiAoc2l6ZSkgeworICAgICAgICB0aGlzLnJlbGVhc2VJbnRlcm5h
bFRleHR1cmVzKCk7CisgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dHVyZXMgPSB0aGlzLl9lbmdp
bmUuY3JlYXRlTXVsdGlwbGVSZW5kZXJUYXJnZXQoc2l6ZSwgdGhpcy5fbXVsdGlSZW5kZXJUYXJn
ZXRPcHRpb25zKTsKKyAgICAgICAgdGhpcy5fY3JlYXRlSW50ZXJuYWxUZXh0dXJlcygpOworICAg
IH07CisgICAgTXVsdGlSZW5kZXJUYXJnZXQucHJvdG90eXBlLnVuYmluZEZyYW1lQnVmZmVyID0g
ZnVuY3Rpb24gKGVuZ2luZSwgZmFjZUluZGV4KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGVuZ2luZS51bkJpbmRNdWx0aUNvbG9yQXR0YWNobWVudEZyYW1lYnVmZmVyKHRo
aXMuX2ludGVybmFsVGV4dHVyZXMsIHRoaXMuaXNDdWJlLCBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICBfdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoZmFjZUlu
ZGV4KTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlIHRoZSBy
ZW5kZXIgdGFyZ2V0cyBhbmQgdGhlaXIgYXNzb2NpYXRlZCByZXNvdXJjZXMKKyAgICAgKi8KKyAg
ICBNdWx0aVJlbmRlclRhcmdldC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5yZWxlYXNlSW50ZXJuYWxUZXh0dXJlcygpOworICAgICAgICBfc3VwZXIucHJv
dG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbGVh
c2UgYWxsIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgdXNlZCBhcyBkcmF3IGJ1ZmZlcnMuCisgICAg
ICovCisgICAgTXVsdGlSZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlbGVhc2VJbnRlcm5hbFRleHR1
cmVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX2ludGVybmFsVGV4dHVyZXMp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0g
dGhpcy5faW50ZXJuYWxUZXh0dXJlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX2ludGVybmFsVGV4dHVyZXNbaV0gIT09IHVuZGVmaW5lZCkgeworICAg
ICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dHVyZXNbaV0uZGlzcG9zZSgpOworICAgICAg
ICAgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dHVyZXMuc3BsaWNlKGksIDEpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gTXVsdGlSZW5kZXJUYXJnZXQ7Cit9
KF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJSZW5kZXJUYXJnZXRUZXh0dXJlIl0pKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmF3Q3ViZVRleHR1cmUudHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWF0ZXJpYWxzL1RleHR1cmVzL3Jhd0N1YmVUZXh0dXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogUmF3Q3ViZVRleHR1cmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
UmF3Q3ViZVRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJhd0N1YmVUZXh0dXJlOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90
c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZW52aXJvbm1lbnRUZXh0dXJlVG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01pc2MvZW52aXJvbm1lbnRUZXh0dXJlVG9vbHMgKi8gIi4vTWlzYy9lbnZpcm9ubWVudFRleHR1
cmVUb29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pbnRlcm5hbFRleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
aW50ZXJuYWxUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9pbnRlcm5hbFRleHR1cmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY3ViZVRleHR1cmUg
Ki8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2N1YmVUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAi
Li9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX0V4dGVuc2lvbnNfZW5naW5lX3Jhd1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvRXh0ZW5zaW9ucy9l
bmdpbmUucmF3VGV4dHVyZSAqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLnJhd1RleHR1
cmUudHMiKTsKKworCisKKworCisKKworLyoqCisgKiBSYXcgY3ViZSB0ZXh0dXJlIHdoZXJlIHRo
ZSByYXcgYnVmZmVycyBhcmUgcGFzc2VkIGluCisgKi8KK3ZhciBSYXdDdWJlVGV4dHVyZSA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShSYXdDdWJlVGV4dHVyZSwgX3N1cGVyKTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgY3ViZSB0ZXh0dXJlIHdoZXJlIHRoZSByYXcgYnVmZmVy
cyBhcmUgcGFzc2VkIGluLgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0
aGUgdGV4dHVyZSBpcyBhdHRhY2hlZCB0bworICAgICAqIEBwYXJhbSBkYXRhIGRlZmluZXMgdGhl
IGFycmF5IG9mIGRhdGEgdG8gdXNlIHRvIGNyZWF0ZSBlYWNoIGZhY2UKKyAgICAgKiBAcGFyYW0g
c2l6ZSBkZWZpbmVzIHRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlcworICAgICAqIEBwYXJhbSBmb3Jt
YXQgZGVmaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhCisgICAgICogQHBhcmFtIHR5cGUgZGVm
aW5lcyB0aGUgdHlwZSBvZiB0aGUgZGF0YSAobGlrZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdO
RURfSU5UKQorICAgICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMgIGRlZmluZXMgaWYgdGhlIGVu
Z2luZSBzaG91bGQgZ2VuZXJhdGUgdGhlIG1pcCBsZXZlbHMKKyAgICAgKiBAcGFyYW0gaW52ZXJ0
WSBkZWZpbmVzIGlmIGRhdGEgbXVzdCBiZSBzdG9yZWQgd2l0aCBZIGF4aXMgaW52ZXJ0ZWQKKyAg
ICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZXMgdGhlIHJlcXVpcmVkIHNhbXBsaW5nIG1v
ZGUgKGxpa2UgVGV4dHVyZS5ORUFSRVNUX1NBTVBMSU5HTU9ERSkKKyAgICAgKiBAcGFyYW0gY29t
cHJlc3Npb24gZGVmaW5lcyB0aGUgY29tcHJlc3Npb24gdXNlZCAobnVsbCBieSBkZWZhdWx0KQor
ICAgICAqLworICAgIGZ1bmN0aW9uIFJhd0N1YmVUZXh0dXJlKHNjZW5lLCBkYXRhLCBzaXplLCBm
b3JtYXQsIHR5cGUsIGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlLCBjb21w
cmVzc2lvbikgeworICAgICAgICBpZiAoZm9ybWF0ID09PSB2b2lkIDApIHsgZm9ybWF0ID0gX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJd
LlRFWFRVUkVGT1JNQVRfUkdCQTsgfQorICAgICAgICBpZiAodHlwZSA9PT0gdm9pZCAwKSB7IHR5
cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAgIGlmIChnZW5lcmF0
ZU1pcE1hcHMgPT09IHZvaWQgMCkgeyBnZW5lcmF0ZU1pcE1hcHMgPSBmYWxzZTsgfQorICAgICAg
ICBpZiAoaW52ZXJ0WSA9PT0gdm9pZCAwKSB7IGludmVydFkgPSBmYWxzZTsgfQorICAgICAgICBp
ZiAoc2FtcGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVf
VFJJTElORUFSX1NBTVBMSU5HTU9ERTsgfQorICAgICAgICBpZiAoY29tcHJlc3Npb24gPT09IHZv
aWQgMCkgeyBjb21wcmVzc2lvbiA9IG51bGw7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgIiIsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fdGV4dHVyZSA9
IHNjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZVJhd0N1YmVUZXh0dXJlKGRhdGEsIHNpemUsIGZvcm1h
dCwgdHlwZSwgZ2VuZXJhdGVNaXBNYXBzLCBpbnZlcnRZLCBzYW1wbGluZ01vZGUsIGNvbXByZXNz
aW9uKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBVcGRh
dGVzIHRoZSByYXcgY3ViZSB0ZXh0dXJlLgorICAgICAqIEBwYXJhbSBkYXRhIGRlZmluZXMgdGhl
IGRhdGEgdG8gc3RvcmUKKyAgICAgKiBAcGFyYW0gZm9ybWF0IGRlZmluZXMgdGhlIGRhdGEgZm9y
bWF0CisgICAgICogQHBhcmFtIHR5cGUgZGVmaW5lcyB0aGUgdHlwZSBmbyB0aGUgZGF0YSAoRW5n
aW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBp
bnZlcnRZIGRlZmluZXMgaWYgZGF0YSBtdXN0IGJlIHN0b3JlZCB3aXRoIFkgYXhpcyBpbnZlcnRl
ZAorICAgICAqIEBwYXJhbSBjb21wcmVzc2lvbiBkZWZpbmVzIHRoZSBjb21wcmVzc2lvbiB1c2Vk
IChudWxsIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGxldmVsIGRlZmluZXMgd2hpY2ggbGV2
ZWwgb2YgdGhlIHRleHR1cmUgdG8gdXBkYXRlCisgICAgICovCisgICAgUmF3Q3ViZVRleHR1cmUu
cHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBmb3JtYXQsIHR5cGUsIGludmVydFks
IGNvbXByZXNzaW9uKSB7CisgICAgICAgIGlmIChjb21wcmVzc2lvbiA9PT0gdm9pZCAwKSB7IGNv
bXByZXNzaW9uID0gbnVsbDsgfQorICAgICAgICB0aGlzLl90ZXh0dXJlLmdldEVuZ2luZSgpLnVw
ZGF0ZVJhd0N1YmVUZXh0dXJlKHRoaXMuX3RleHR1cmUsIGRhdGEsIGZvcm1hdCwgdHlwZSwgaW52
ZXJ0WSwgY29tcHJlc3Npb24pOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyBhIHJh
dyBjdWJlIHRleHR1cmUgd2l0aCBSR0JEIGVuY29kZWQgZGF0YS4KKyAgICAgKiBAcGFyYW0gZGF0
YSBkZWZpbmVzIHRoZSBhcnJheSBvZiBkYXRhIFttaXBtYXBdW2ZhY2VdIHRvIHVzZSB0byBjcmVh
dGUgZWFjaCBmYWNlCisgICAgICogQHBhcmFtIHNwaGVyaWNhbFBvbHlub21pYWwgZGVmaW5lcyB0
aGUgc3BoZXJpY2FsIHBvbHlub21pYWwgZm9yIGlycmFkaWFuY2UKKyAgICAgKiBAcGFyYW0gbG9k
U2NhbGUgZGVmaW5lcyB0aGUgc2NhbGUgYXBwbGllZCB0byBlbnZpcm9ubWVudCB0ZXh0dXJlLiBU
aGlzIG1hbmFnZXMgdGhlIHJhbmdlIG9mIExPRCBsZXZlbCB1c2VkIGZvciBJQkwgYWNjb3JkaW5n
IHRvIHRoZSByb3VnaG5lc3MKKyAgICAgKiBAcGFyYW0gbG9kT2Zmc2V0IGRlZmluZXMgdGhlIG9m
ZnNldCBhcHBsaWVkIHRvIGVudmlyb25tZW50IHRleHR1cmUuIFRoaXMgbWFuYWdlcyBmaXJzdCBM
T0QgbGV2ZWwgdXNlZCBmb3IgSUJMIGFjY29yZGluZyB0byB0aGUgcm91Z2huZXNzCisgICAgICog
QHJldHVybnMgYSBwcm9tc2llIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNv
bXBsZXRlCisgICAgICovCisgICAgUmF3Q3ViZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVJHQkRB
c3luYyA9IGZ1bmN0aW9uIChkYXRhLCBzcGhlcmljYWxQb2x5bm9taWFsLCBsb2RTY2FsZSwgbG9k
T2Zmc2V0KSB7CisgICAgICAgIGlmIChzcGhlcmljYWxQb2x5bm9taWFsID09PSB2b2lkIDApIHsg
c3BoZXJpY2FsUG9seW5vbWlhbCA9IG51bGw7IH0KKyAgICAgICAgaWYgKGxvZFNjYWxlID09PSB2
b2lkIDApIHsgbG9kU2NhbGUgPSAwLjg7IH0KKyAgICAgICAgaWYgKGxvZE9mZnNldCA9PT0gdm9p
ZCAwKSB7IGxvZE9mZnNldCA9IDA7IH0KKyAgICAgICAgcmV0dXJuIFJhd0N1YmVUZXh0dXJlLl9V
cGRhdGVSR0JEQXN5bmModGhpcy5fdGV4dHVyZSwgZGF0YSwgc3BoZXJpY2FsUG9seW5vbWlhbCwg
bG9kU2NhbGUsIGxvZE9mZnNldCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhl
IHJhdyBjdWJlIHRleHR1cmUuCisgICAgICogQHJldHVybiBhIG5ldyBjdWJlIHRleHR1cmUKKyAg
ICAgKi8KKyAgICBSYXdDdWJlVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHJldHVybiBfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5D
bG9uZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgc2NlbmUgPSBfdGhpcy5nZXRTY2Vu
ZSgpOworICAgICAgICAgICAgdmFyIGludGVybmFsVGV4dHVyZSA9IF90aGlzLl90ZXh0dXJlOwor
ICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgUmF3Q3ViZVRleHR1cmUoc2NlbmUsIGludGVy
bmFsVGV4dHVyZS5fYnVmZmVyVmlld0FycmF5LCBpbnRlcm5hbFRleHR1cmUud2lkdGgsIGludGVy
bmFsVGV4dHVyZS5mb3JtYXQsIGludGVybmFsVGV4dHVyZS50eXBlLCBpbnRlcm5hbFRleHR1cmUu
Z2VuZXJhdGVNaXBNYXBzLCBpbnRlcm5hbFRleHR1cmUuaW52ZXJ0WSwgaW50ZXJuYWxUZXh0dXJl
LnNhbXBsaW5nTW9kZSwgaW50ZXJuYWxUZXh0dXJlLl9jb21wcmVzc2lvbik7CisgICAgICAgICAg
ICBpZiAoaW50ZXJuYWxUZXh0dXJlLmRhdGFTb3VyY2UgPT09IF9pbnRlcm5hbFRleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9D
VUJFUkFXX1JHQkQpIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLnVwZGF0ZVJHQkRBc3luYyhp
bnRlcm5hbFRleHR1cmUuX2J1ZmZlclZpZXdBcnJheUFycmF5LCBpbnRlcm5hbFRleHR1cmUuX3Nw
aGVyaWNhbFBvbHlub21pYWwsIGludGVybmFsVGV4dHVyZS5fbG9kR2VuZXJhdGlvblNjYWxlLCBp
bnRlcm5hbFRleHR1cmUuX2xvZEdlbmVyYXRpb25PZmZzZXQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgICAgIH0sIHRoaXMpOworICAgIH07CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBSYXdDdWJlVGV4dHVyZS5fVXBkYXRlUkdCREFzeW5jID0gZnVu
Y3Rpb24gKGludGVybmFsVGV4dHVyZSwgZGF0YSwgc3BoZXJpY2FsUG9seW5vbWlhbCwgbG9kU2Nh
bGUsIGxvZE9mZnNldCkgeworICAgICAgICBpbnRlcm5hbFRleHR1cmUuX2RhdGFTb3VyY2UgPSBf
aW50ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkludGVybmFsVGV4
dHVyZSJdLkRBVEFTT1VSQ0VfQ1VCRVJBV19SR0JEOworICAgICAgICBpbnRlcm5hbFRleHR1cmUu
X2J1ZmZlclZpZXdBcnJheUFycmF5ID0gZGF0YTsKKyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLl9s
b2RHZW5lcmF0aW9uU2NhbGUgPSBsb2RTY2FsZTsKKyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLl9s
b2RHZW5lcmF0aW9uT2Zmc2V0ID0gbG9kT2Zmc2V0OworICAgICAgICBpbnRlcm5hbFRleHR1cmUu
X3NwaGVyaWNhbFBvbHlub21pYWwgPSBzcGhlcmljYWxQb2x5bm9taWFsOworICAgICAgICByZXR1
cm4gX01pc2NfZW52aXJvbm1lbnRUZXh0dXJlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMiXS5VcGxvYWRMZXZlbHNBc3luYyhpbnRlcm5h
bFRleHR1cmUsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaW50ZXJuYWxU
ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAgICAgICB9KTsKKyAgICB9OworICAgIHJldHVybiBS
YXdDdWJlVGV4dHVyZTsKK30oX2N1YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIkN1YmVUZXh0dXJlIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlh
bHMvVGV4dHVyZXMvcmF3VGV4dHVyZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy9yYXdUZXh0
dXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBSYXdUZXh0dXJlICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlJhd1RleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJhd1Rl
eHR1cmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9k
ZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF90ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMv
Y29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0VuZ2luZXNfRXh0ZW5zaW9uc19lbmdpbmVfcmF3VGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5l
cy9FeHRlbnNpb25zL2VuZ2luZS5yYXdUZXh0dXJlICovICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9l
bmdpbmUucmF3VGV4dHVyZS50cyIpOworCisKKworCisvKioKKyAqIFJhdyB0ZXh0dXJlIGNhbiBo
ZWxwIGNyZWF0aW5nIGEgdGV4dHVyZSBkaXJlY3RseSBmcm9tIGFuIGFycmF5IG9mIGRhdGEuCisg
KiBUaGlzIGNhbiBiZSBzdXBlciB1c2VmdWwgaWYgeW91IGVpdGhlciBnZXQgdGhlIGRhdGEgZnJv
bSBhbiB1bmNvbXByZXNzZWQgc291cmNlIG9yCisgKiBpZiB5b3Ugd2lzaCB0byBjcmVhdGUgeW91
ciB0ZXh0dXJlIHBpeGVsIGJ5IHBpeGVsLgorICovCit2YXIgUmF3VGV4dHVyZSA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2V4dGVuZHMiXShSYXdUZXh0dXJlLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIEluc3RhbnRpYXRlcyBhIG5ldyBSYXdUZXh0dXJlLgorICAgICAqIFJhdyB0ZXh0dXJlIGNh
biBoZWxwIGNyZWF0aW5nIGEgdGV4dHVyZSBkaXJlY3RseSBmcm9tIGFuIGFycmF5IG9mIGRhdGEu
CisgICAgICogVGhpcyBjYW4gYmUgc3VwZXIgdXNlZnVsIGlmIHlvdSBlaXRoZXIgZ2V0IHRoZSBk
YXRhIGZyb20gYW4gdW5jb21wcmVzc2VkIHNvdXJjZSBvcgorICAgICAqIGlmIHlvdSB3aXNoIHRv
IGNyZWF0ZSB5b3VyIHRleHR1cmUgcGl4ZWwgYnkgcGl4ZWwuCisgICAgICogQHBhcmFtIGRhdGEg
ZGVmaW5lIHRoZSBhcnJheSBvZiBkYXRhIHRvIHVzZSB0byBjcmVhdGUgdGhlIHRleHR1cmUKKyAg
ICAgKiBAcGFyYW0gd2lkdGggZGVmaW5lIHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZQorICAgICAq
IEBwYXJhbSBoZWlnaHQgZGVmaW5lIHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUKKyAgICAgKiBA
cGFyYW0gZm9ybWF0IGRlZmluZSB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhIChSR0IsIFJHQkEuLi4g
RW5naW5lLlRFWFRVUkVGT1JNQVRfeHh4KQorICAgICAqIEBwYXJhbSBzY2VuZSAgZGVmaW5lIHRo
ZSBzY2VuZSB0aGUgdGV4dHVyZSBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGdlbmVyYXRlTWlw
TWFwcyBkZWZpbmUgd2hldGhlciBtaXAgbWFwcyBzaG91bGQgYmUgZ2VuZXJhdGVkIG9yIG5vdAor
ICAgICAqIEBwYXJhbSBpbnZlcnRZIGRlZmluZSBpZiB0aGUgZGF0YSBzaG91bGQgYmUgZmxpcHBl
ZCBvbiBZIHdoZW4gdXBsb2FkZWQgdG8gdGhlIEdQVQorICAgICAqIEBwYXJhbSBzYW1wbGluZ01v
ZGUgZGVmaW5lIHRoZSB0ZXh0dXJlIHNhbXBsaW5nIG1vZGUgKFRleHR1cmUueHh4X1NBTVBMSU5H
TU9ERSkKKyAgICAgKiBAcGFyYW0gdHlwZSBkZWZpbmUgdGhlIGZvcm1hdCBvZiB0aGUgZGF0YSAo
aW50LCBmbG9hdC4uLiBFbmdpbmUuVEVYVFVSRVRZUEVfeHh4KQorICAgICAqLworICAgIGZ1bmN0
aW9uIFJhd1RleHR1cmUoZGF0YSwgd2lkdGgsIGhlaWdodCwgCisgICAgLyoqCisgICAgICogRGVm
aW5lIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgKFJHQiwgUkdCQS4uLiBFbmdpbmUuVEVYVFVSRUZP
Uk1BVF94eHgpCisgICAgICovCisgICAgZm9ybWF0LCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzLCBp
bnZlcnRZLCBzYW1wbGluZ01vZGUsIHR5cGUpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRlTWlwTWFw
cyA9PT0gdm9pZCAwKSB7IGdlbmVyYXRlTWlwTWFwcyA9IHRydWU7IH0KKyAgICAgICAgaWYgKGlu
dmVydFkgPT09IHZvaWQgMCkgeyBpbnZlcnRZID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHNhbXBs
aW5nTW9kZSA9PT0gdm9pZCAwKSB7IHNhbXBsaW5nTW9kZSA9IF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFX1RSSUxJTkVB
Ul9TQU1QTElOR01PREU7IH0KKyAgICAgICAgaWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0eXBlID0g
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50
cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3Vw
ZXIuY2FsbCh0aGlzLCBudWxsLCBzY2VuZSwgIWdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSkgfHwg
dGhpczsKKyAgICAgICAgX3RoaXMuZm9ybWF0ID0gZm9ybWF0OworICAgICAgICBfdGhpcy5fZW5n
aW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIF90aGlzLl90ZXh0dXJlID0gc2NlbmUu
Z2V0RW5naW5lKCkuY3JlYXRlUmF3VGV4dHVyZShkYXRhLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlLCBudWxsLCB0eXBlKTsKKyAg
ICAgICAgX3RoaXMud3JhcFUgPSBfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgIF90aGlzLndyYXBWID0gX3Rl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJF
U1NNT0RFOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIFVw
ZGF0ZXMgdGhlIHRleHR1cmUgdW5kZXJseWluZyBkYXRhLgorICAgICAqIEBwYXJhbSBkYXRhIERl
ZmluZSB0aGUgbmV3IGRhdGEgb2YgdGhlIHRleHR1cmUKKyAgICAgKi8KKyAgICBSYXdUZXh0dXJl
LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB0aGlzLl9lbmdp
bmUudXBkYXRlUmF3VGV4dHVyZSh0aGlzLl90ZXh0dXJlLCBkYXRhLCB0aGlzLl90ZXh0dXJlLmZv
cm1hdCwgdGhpcy5fdGV4dHVyZS5pbnZlcnRZLCBudWxsLCB0aGlzLl90ZXh0dXJlLnR5cGUpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGx1bWluYW5jZSB0ZXh0dXJlIGZyb20g
c29tZSBkYXRhLgorICAgICAqIEBwYXJhbSBkYXRhIERlZmluZSB0aGUgdGV4dHVyZSBkYXRhCisg
ICAgICogQHBhcmFtIHdpZHRoIERlZmluZSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUKKyAgICAg
KiBAcGFyYW0gaGVpZ2h0IERlZmluZSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlCisgICAgICog
QHBhcmFtIHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIHRleHR1cmUgYmVsb25ncyB0bworICAg
ICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMgRGVmaW5lIHdoZXRoZXIgb3Igbm90IHRvIGNyZWF0
ZSBtaXAgbWFwcyBmb3IgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmUg
aWYgdGhlIGRhdGEgc2hvdWxkIGJlIGZsaXBwZWQgb24gWSB3aGVuIHVwbG9hZGVkIHRvIHRoZSBH
UFUKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZSB0aGUgdGV4dHVyZSBzYW1wbGlu
ZyBtb2RlIChUZXh0dXJlLnh4eF9TQU1QTElOR01PREUpCisgICAgICogQHJldHVybnMgdGhlIGx1
bWluYW5jZSB0ZXh0dXJlCisgICAgICovCisgICAgUmF3VGV4dHVyZS5DcmVhdGVMdW1pbmFuY2VU
ZXh0dXJlID0gZnVuY3Rpb24gKGRhdGEsIHdpZHRoLCBoZWlnaHQsIHNjZW5lLCBnZW5lcmF0ZU1p
cE1hcHMsIGludmVydFksIHNhbXBsaW5nTW9kZSkgeworICAgICAgICBpZiAoZ2VuZXJhdGVNaXBN
YXBzID09PSB2b2lkIDApIHsgZ2VuZXJhdGVNaXBNYXBzID0gdHJ1ZTsgfQorICAgICAgICBpZiAo
aW52ZXJ0WSA9PT0gdm9pZCAwKSB7IGludmVydFkgPSBmYWxzZTsgfQorICAgICAgICBpZiAoc2Ft
cGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLlRFWFRVUkVfVFJJTElO
RUFSX1NBTVBMSU5HTU9ERTsgfQorICAgICAgICByZXR1cm4gbmV3IFJhd1RleHR1cmUoZGF0YSwg
d2lkdGgsIGhlaWdodCwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfTFVNSU5BTkNFLCBzY2VuZSwgZ2VuZXJh
dGVNaXBNYXBzLCBpbnZlcnRZLCBzYW1wbGluZ01vZGUpOworICAgIH07CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIGx1bWluYW5jZSBhbHBoYSB0ZXh0dXJlIGZyb20gc29tZSBkYXRhLgorICAg
ICAqIEBwYXJhbSBkYXRhIERlZmluZSB0aGUgdGV4dHVyZSBkYXRhCisgICAgICogQHBhcmFtIHdp
ZHRoIERlZmluZSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gaGVpZ2h0
IERlZmluZSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIHNjZW5lIERl
ZmluZSB0aGUgc2NlbmUgdGhlIHRleHR1cmUgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBnZW5l
cmF0ZU1pcE1hcHMgRGVmaW5lIHdoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSBtaXAgbWFwcyBmb3Ig
dGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmUgaWYgdGhlIGRhdGEgc2hv
dWxkIGJlIGZsaXBwZWQgb24gWSB3aGVuIHVwbG9hZGVkIHRvIHRoZSBHUFUKKyAgICAgKiBAcGFy
YW0gc2FtcGxpbmdNb2RlIGRlZmluZSB0aGUgdGV4dHVyZSBzYW1wbGluZyBtb2RlIChUZXh0dXJl
Lnh4eF9TQU1QTElOR01PREUpCisgICAgICogQHJldHVybnMgdGhlIGx1bWluYW5jZSBhbHBoYSB0
ZXh0dXJlCisgICAgICovCisgICAgUmF3VGV4dHVyZS5DcmVhdGVMdW1pbmFuY2VBbHBoYVRleHR1
cmUgPSBmdW5jdGlvbiAoZGF0YSwgd2lkdGgsIGhlaWdodCwgc2NlbmUsIGdlbmVyYXRlTWlwTWFw
cywgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlKSB7CisgICAgICAgIGlmIChnZW5lcmF0ZU1pcE1hcHMg
PT09IHZvaWQgMCkgeyBnZW5lcmF0ZU1pcE1hcHMgPSB0cnVlOyB9CisgICAgICAgIGlmIChpbnZl
cnRZID09PSB2b2lkIDApIHsgaW52ZXJ0WSA9IGZhbHNlOyB9CisgICAgICAgIGlmIChzYW1wbGlu
Z01vZGUgPT09IHZvaWQgMCkgeyBzYW1wbGluZ01vZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9UUklMSU5FQVJf
U0FNUExJTkdNT0RFOyB9CisgICAgICAgIHJldHVybiBuZXcgUmF3VGV4dHVyZShkYXRhLCB3aWR0
aCwgaGVpZ2h0LCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9MVU1JTkFOQ0VfQUxQSEEsIHNjZW5lLCBnZW5l
cmF0ZU1pcE1hcHMsIGludmVydFksIHNhbXBsaW5nTW9kZSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGFuIGFscGhhIHRleHR1cmUgZnJvbSBzb21lIGRhdGEuCisgICAgICogQHBh
cmFtIGRhdGEgRGVmaW5lIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFyYW0gd2lkdGggRGVm
aW5lIHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSBoZWlnaHQgRGVmaW5l
IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRo
ZSBzY2VuZSB0aGUgdGV4dHVyZSBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGdlbmVyYXRlTWlw
TWFwcyBEZWZpbmUgd2hldGhlciBvciBub3QgdG8gY3JlYXRlIG1pcCBtYXBzIGZvciB0aGUgdGV4
dHVyZQorICAgICAqIEBwYXJhbSBpbnZlcnRZIGRlZmluZSBpZiB0aGUgZGF0YSBzaG91bGQgYmUg
ZmxpcHBlZCBvbiBZIHdoZW4gdXBsb2FkZWQgdG8gdGhlIEdQVQorICAgICAqIEBwYXJhbSBzYW1w
bGluZ01vZGUgZGVmaW5lIHRoZSB0ZXh0dXJlIHNhbXBsaW5nIG1vZGUgKFRleHR1cmUueHh4X1NB
TVBMSU5HTU9ERSkKKyAgICAgKiBAcmV0dXJucyB0aGUgYWxwaGEgdGV4dHVyZQorICAgICAqLwor
ICAgIFJhd1RleHR1cmUuQ3JlYXRlQWxwaGFUZXh0dXJlID0gZnVuY3Rpb24gKGRhdGEsIHdpZHRo
LCBoZWlnaHQsIHNjZW5lLCBnZW5lcmF0ZU1pcE1hcHMsIGludmVydFksIHNhbXBsaW5nTW9kZSkg
eworICAgICAgICBpZiAoZ2VuZXJhdGVNaXBNYXBzID09PSB2b2lkIDApIHsgZ2VuZXJhdGVNaXBN
YXBzID0gdHJ1ZTsgfQorICAgICAgICBpZiAoaW52ZXJ0WSA9PT0gdm9pZCAwKSB7IGludmVydFkg
PSBmYWxzZTsgfQorICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxp
bmdNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IkNvbnN0YW50cyJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERTsgfQorICAgICAgICBy
ZXR1cm4gbmV3IFJhd1RleHR1cmUoZGF0YSwgd2lkdGgsIGhlaWdodCwgX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JN
QVRfQUxQSEEsIHNjZW5lLCBnZW5lcmF0ZU1pcE1hcHMsIGludmVydFksIHNhbXBsaW5nTW9kZSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgUkdCIHRleHR1cmUgZnJvbSBzb21l
IGRhdGEuCisgICAgICogQHBhcmFtIGRhdGEgRGVmaW5lIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAg
KiBAcGFyYW0gd2lkdGggRGVmaW5lIHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBw
YXJhbSBoZWlnaHQgRGVmaW5lIHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFy
YW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBiZWxvbmdzIHRvCisgICAgICog
QHBhcmFtIGdlbmVyYXRlTWlwTWFwcyBEZWZpbmUgd2hldGhlciBvciBub3QgdG8gY3JlYXRlIG1p
cCBtYXBzIGZvciB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSBpbnZlcnRZIGRlZmluZSBpZiB0
aGUgZGF0YSBzaG91bGQgYmUgZmxpcHBlZCBvbiBZIHdoZW4gdXBsb2FkZWQgdG8gdGhlIEdQVQor
ICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgZGVmaW5lIHRoZSB0ZXh0dXJlIHNhbXBsaW5nIG1v
ZGUgKFRleHR1cmUueHh4X1NBTVBMSU5HTU9ERSkKKyAgICAgKiBAcGFyYW0gdHlwZSBkZWZpbmUg
dGhlIGZvcm1hdCBvZiB0aGUgZGF0YSAoaW50LCBmbG9hdC4uLiBFbmdpbmUuVEVYVFVSRVRZUEVf
eHh4KQorICAgICAqIEByZXR1cm5zIHRoZSBSR0IgYWxwaGEgdGV4dHVyZQorICAgICAqLworICAg
IFJhd1RleHR1cmUuQ3JlYXRlUkdCVGV4dHVyZSA9IGZ1bmN0aW9uIChkYXRhLCB3aWR0aCwgaGVp
Z2h0LCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzLCBpbnZlcnRZLCBzYW1wbGluZ01vZGUsIHR5cGUp
IHsKKyAgICAgICAgaWYgKGdlbmVyYXRlTWlwTWFwcyA9PT0gdm9pZCAwKSB7IGdlbmVyYXRlTWlw
TWFwcyA9IHRydWU7IH0KKyAgICAgICAgaWYgKGludmVydFkgPT09IHZvaWQgMCkgeyBpbnZlcnRZ
ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHNhbXBsaW5nTW9kZSA9PT0gdm9pZCAwKSB7IHNhbXBs
aW5nTW9kZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJDb25zdGFudHMiXS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01PREU7IH0KKyAgICAgICAg
aWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0eXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lO
VDsgfQorICAgICAgICByZXR1cm4gbmV3IFJhd1RleHR1cmUoZGF0YSwgd2lkdGgsIGhlaWdodCwg
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50
cyJdLlRFWFRVUkVGT1JNQVRfUkdCLCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzLCBpbnZlcnRZLCBz
YW1wbGluZ01vZGUsIHR5cGUpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIFJH
QkEgdGV4dHVyZSBmcm9tIHNvbWUgZGF0YS4KKyAgICAgKiBAcGFyYW0gZGF0YSBEZWZpbmUgdGhl
IHRleHR1cmUgZGF0YQorICAgICAqIEBwYXJhbSB3aWR0aCBEZWZpbmUgdGhlIHdpZHRoIG9mIHRo
ZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGhlaWdodCBEZWZpbmUgdGhlIGhlaWdodCBvZiB0aGUg
dGV4dHVyZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSB0ZXh0dXJl
IGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVNaXBNYXBzIERlZmluZSB3aGV0aGVy
IG9yIG5vdCB0byBjcmVhdGUgbWlwIG1hcHMgZm9yIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFt
IGludmVydFkgZGVmaW5lIGlmIHRoZSBkYXRhIHNob3VsZCBiZSBmbGlwcGVkIG9uIFkgd2hlbiB1
cGxvYWRlZCB0byB0aGUgR1BVCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBkZWZpbmUgdGhl
IHRleHR1cmUgc2FtcGxpbmcgbW9kZSAoVGV4dHVyZS54eHhfU0FNUExJTkdNT0RFKQorICAgICAq
IEBwYXJhbSB0eXBlIGRlZmluZSB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhIChpbnQsIGZsb2F0Li4u
IEVuZ2luZS5URVhUVVJFVFlQRV94eHgpCisgICAgICogQHJldHVybnMgdGhlIFJHQkEgdGV4dHVy
ZQorICAgICAqLworICAgIFJhd1RleHR1cmUuQ3JlYXRlUkdCQVRleHR1cmUgPSBmdW5jdGlvbiAo
ZGF0YSwgd2lkdGgsIGhlaWdodCwgc2NlbmUsIGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2Ft
cGxpbmdNb2RlLCB0eXBlKSB7CisgICAgICAgIGlmIChnZW5lcmF0ZU1pcE1hcHMgPT09IHZvaWQg
MCkgeyBnZW5lcmF0ZU1pcE1hcHMgPSB0cnVlOyB9CisgICAgICAgIGlmIChpbnZlcnRZID09PSB2
b2lkIDApIHsgaW52ZXJ0WSA9IGZhbHNlOyB9CisgICAgICAgIGlmIChzYW1wbGluZ01vZGUgPT09
IHZvaWQgMCkgeyBzYW1wbGluZ01vZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9UUklMSU5FQVJfU0FNUExJTkdN
T0RFOyB9CisgICAgICAgIGlmICh0eXBlID09PSB2b2lkIDApIHsgdHlwZSA9IF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJF
VFlQRV9VTlNJR05FRF9JTlQ7IH0KKyAgICAgICAgcmV0dXJuIG5ldyBSYXdUZXh0dXJlKGRhdGEs
IHdpZHRoLCBoZWlnaHQsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFRk9STUFUX1JHQkEsIHNjZW5lLCBnZW5lcmF0ZU1p
cE1hcHMsIGludmVydFksIHNhbXBsaW5nTW9kZSwgdHlwZSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgUiB0ZXh0dXJlIGZyb20gc29tZSBkYXRhLgorICAgICAqIEBwYXJhbSBk
YXRhIERlZmluZSB0aGUgdGV4dHVyZSBkYXRhCisgICAgICogQHBhcmFtIHdpZHRoIERlZmluZSB0
aGUgd2lkdGggb2YgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gaGVpZ2h0IERlZmluZSB0aGUg
aGVpZ2h0IG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZSB0aGUgc2Nl
bmUgdGhlIHRleHR1cmUgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMg
RGVmaW5lIHdoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSBtaXAgbWFwcyBmb3IgdGhlIHRleHR1cmUK
KyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmUgaWYgdGhlIGRhdGEgc2hvdWxkIGJlIGZsaXBw
ZWQgb24gWSB3aGVuIHVwbG9hZGVkIHRvIHRoZSBHUFUKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdN
b2RlIGRlZmluZSB0aGUgdGV4dHVyZSBzYW1wbGluZyBtb2RlIChUZXh0dXJlLnh4eF9TQU1QTElO
R01PREUpCisgICAgICogQHBhcmFtIHR5cGUgZGVmaW5lIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEg
KGludCwgZmxvYXQuLi4gRW5naW5lLlRFWFRVUkVUWVBFX3h4eCkKKyAgICAgKiBAcmV0dXJucyB0
aGUgUiB0ZXh0dXJlCisgICAgICovCisgICAgUmF3VGV4dHVyZS5DcmVhdGVSVGV4dHVyZSA9IGZ1
bmN0aW9uIChkYXRhLCB3aWR0aCwgaGVpZ2h0LCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzLCBpbnZl
cnRZLCBzYW1wbGluZ01vZGUsIHR5cGUpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRlTWlwTWFwcyA9
PT0gdm9pZCAwKSB7IGdlbmVyYXRlTWlwTWFwcyA9IHRydWU7IH0KKyAgICAgICAgaWYgKGludmVy
dFkgPT09IHZvaWQgMCkgeyBpbnZlcnRZID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHNhbXBsaW5n
TW9kZSA9PT0gdm9pZCAwKSB7IHNhbXBsaW5nTW9kZSA9IF90ZXh0dXJlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAg
ICAgIGlmICh0eXBlID09PSB2b2lkIDApIHsgdHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9BVDsg
fQorICAgICAgICByZXR1cm4gbmV3IFJhd1RleHR1cmUoZGF0YSwgd2lkdGgsIGhlaWdodCwgX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJd
LlRFWFRVUkVGT1JNQVRfUiwgc2NlbmUsIGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2FtcGxp
bmdNb2RlLCB0eXBlKTsKKyAgICB9OworICAgIHJldHVybiBSYXdUZXh0dXJlOworfShfdGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0pKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmF3VGV4dHVyZTNELnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NYXRlcmlhbHMvVGV4dHVyZXMvcmF3VGV4dHVyZTNELnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IFJhd1RleHR1cmUzRCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSYXdU
ZXh0dXJlM0QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJhd1RleHR1cmUzRDsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNs
aWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGV4dHVyZSAq
LyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5n
aW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19F
eHRlbnNpb25zX2VuZ2luZV9yYXdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5l
LnJhd1RleHR1cmUgKi8gIi4vRW5naW5lcy9FeHRlbnNpb25zL2VuZ2luZS5yYXdUZXh0dXJlLnRz
Iik7CisKKworCisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBzdG9yZSAzRCB0ZXh0dXJlcyBjb250
YWluaW5nIHVzZXIgZGF0YQorICovCit2YXIgUmF3VGV4dHVyZTNEID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZXh0ZW5kcyJdKFJhd1RleHR1cmUzRCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGUgYSBuZXcgUmF3VGV4dHVyZTNECisgICAgICogQHBhcmFtIGRhdGEgZGVmaW5lcyB0aGUg
ZGF0YSBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSB3aWR0aCBkZWZpbmVzIHRoZSB3aWR0
aCBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgaGVpZ2h0
IG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGRlcHRoIGRlZmluZXMgdGhlIGRlcHRoIG9m
IHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGZvcm1hdCBkZWZpbmVzIHRoZSB0ZXh0dXJlIGZv
cm1hdCB0byB1c2UKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2Vu
ZQorICAgICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMgZGVmaW5lcyBhIGJvb2xlYW4gaW5kaWNh
dGluZyBpZiBtaXAgbGV2ZWxzIHNob3VsZCBiZSBnZW5lcmF0ZWQgKHRydWUgYnkgZGVmYXVsdCkK
KyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmVzIGlmIHRleHR1cmUgbXVzdCBiZSBzdG9yZWQg
d2l0aCBZIGF4aXMgaW52ZXJ0ZWQKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZXMg
dGhlIHNhbXBsaW5nIG1vZGUgdG8gdXNlIChUZXh0dXJlLlRSSUxJTkVBUl9TQU1QTElOR01PREUg
YnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gdGV4dHVyZVR5cGUgZGVmaW5lcyB0aGUgdGV4dHVy
ZSBUeXBlIChFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5ULCBFbmdpbmUuVEVYVFVSRVRZ
UEVfRkxPQVQuLi4pCisgICAgICovCisgICAgZnVuY3Rpb24gUmF3VGV4dHVyZTNEKGRhdGEsIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLCAKKyAgICAvKiogR2V0cyBvciBzZXRzIHRoZSB0ZXh0dXJlIGZv
cm1hdCB0byB1c2UgKi8KKyAgICBmb3JtYXQsIHNjZW5lLCBnZW5lcmF0ZU1pcE1hcHMsIGludmVy
dFksIHNhbXBsaW5nTW9kZSwgdGV4dHVyZVR5cGUpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRlTWlw
TWFwcyA9PT0gdm9pZCAwKSB7IGdlbmVyYXRlTWlwTWFwcyA9IHRydWU7IH0KKyAgICAgICAgaWYg
KGludmVydFkgPT09IHZvaWQgMCkgeyBpbnZlcnRZID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHNh
bXBsaW5nTW9kZSA9PT0gdm9pZCAwKSB7IHNhbXBsaW5nTW9kZSA9IF90ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9
CisgICAgICAgIGlmICh0ZXh0dXJlVHlwZSA9PT0gdm9pZCAwKSB7IHRleHR1cmVUeXBlID0gX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJd
LlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIu
Y2FsbCh0aGlzLCBudWxsLCBzY2VuZSwgIWdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSkgfHwgdGhp
czsKKyAgICAgICAgX3RoaXMuZm9ybWF0ID0gZm9ybWF0OworICAgICAgICBfdGhpcy5fZW5naW5l
ID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIF90aGlzLl90ZXh0dXJlID0gc2NlbmUuZ2V0
RW5naW5lKCkuY3JlYXRlUmF3VGV4dHVyZTNEKGRhdGEsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBm
b3JtYXQsIGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlLCB1bmRlZmluZWQs
IHRleHR1cmVUeXBlKTsKKyAgICAgICAgX3RoaXMuaXMzRCA9IHRydWU7CisgICAgICAgIHJldHVy
biBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSB0ZXh0dXJlIHdpdGgg
bmV3IGRhdGEKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHRvIHN0b3JlIGlu
IHRoZSB0ZXh0dXJlCisgICAgICovCisgICAgUmF3VGV4dHVyZTNELnByb3RvdHlwZS51cGRhdGUg
PSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmUpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9lbmdpbmUudXBkYXRlUmF3
VGV4dHVyZTNEKHRoaXMuX3RleHR1cmUsIGRhdGEsIHRoaXMuX3RleHR1cmUuZm9ybWF0LCB0aGlz
Ll90ZXh0dXJlLmludmVydFksIG51bGwsIHRoaXMuX3RleHR1cmUudHlwZSk7CisgICAgfTsKKyAg
ICByZXR1cm4gUmF3VGV4dHVyZTNEOworfShfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJUZXh0dXJlIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlh
bHMvVGV4dHVyZXMvcmVmcmFjdGlvblRleHR1cmUudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL1Rl
eHR1cmVzL3JlZnJhY3Rpb25UZXh0dXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUmVm
cmFjdGlvblRleHR1cmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVm
cmFjdGlvblRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJlZnJhY3Rpb25UZXh0dXJlOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxl
cy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
bWF0aF9wbGFuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5wbGFuZSAqLyAiLi9NYXRocy9tYXRoLnBsYW5lLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJU
YXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZSAq
LyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyIpOworCisKKwor
LyoqCisgKiBDcmVhdGVzIGEgcmVmcmFjdGlvbiB0ZXh0dXJlIHVzZWQgYnkgcmVmcmFjdGlvbiBj
aGFubmVsIG9mIHRoZSBzdGFuZGFyZCBtYXRlcmlhbC4KKyAqIEl0IGlzIGxpa2UgYSBtaXJyb3Ig
YnV0IHRvIHNlZSB0aHJvdWdoIGEgbWF0ZXJpYWwuCisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vaG93X3RvL3JlZmxlY3QjcmVmcmFjdGlvbgorICovCit2YXIgUmVmcmFjdGlvblRl
eHR1cmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUmVmcmFjdGlvblRleHR1cmUs
IF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHJlZnJhY3Rpb24gdGV4dHVyZSB1
c2VkIGJ5IHJlZnJhY3Rpb24gY2hhbm5lbCBvZiB0aGUgc3RhbmRhcmQgbWF0ZXJpYWwuCisgICAg
ICogSXQgaXMgbGlrZSBhIG1pcnJvciBidXQgdG8gc2VlIHRocm91Z2ggYSBtYXRlcmlhbC4KKyAg
ICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3JlZmxlY3QjcmVmcmFj
dGlvbgorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgdGV4dHVyZSBuYW1lCisgICAgICog
QHBhcmFtIHNpemUgRGVmaW5lIHRoZSBzaXplIG9mIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgcmVmcmFjdGlvbiBiZWxvbmdz
IHRvCisgICAgICogQHBhcmFtIGdlbmVyYXRlTWlwTWFwcyBEZWZpbmUgaWYgd2UgbmVlZCB0byBn
ZW5lcmF0ZSBtaXBzIGxldmVsIGZvciB0aGUgcmVmcmFjdGlvbgorICAgICAqLworICAgIGZ1bmN0
aW9uIFJlZnJhY3Rpb25UZXh0dXJlKG5hbWUsIHNpemUsIHNjZW5lLCBnZW5lcmF0ZU1pcE1hcHMp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgc2l6ZSwgc2Nl
bmUsIGdlbmVyYXRlTWlwTWFwcywgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERlZmluZSB0aGUgcmVmbGVjdGlvbiBwbGFuZSB3ZSB3YW50IHRvIHVzZS4gVGhlIHJlZnJh
Y3Rpb25QbGFuZSBpcyB1c3VhbGx5IHNldCB0byB0aGUgY29uc3RydWN0ZWQgcmVmcmFjdG9yLgor
ICAgICAgICAgKiBJdCBpcyBwb3NzaWJsZSB0byBkaXJlY3RseSBzZXQgdGhlIHJlZnJhY3Rpb25Q
bGFuZSBieSBkaXJlY3RseSB1c2luZyBhIFBsYW5lKGEsIGIsIGMsIGQpIHdoZXJlIGEsIGIgYW5k
IGMgZ2l2ZSB0aGUgcGxhbmUgbm9ybWFsIHZlY3RvciAoYSwgYiwgYykgYW5kIGQgaXMgYSBzY2Fs
YXIgZGlzcGxhY2VtZW50IGZyb20gdGhlIHJlZnJhY3Rpb25QbGFuZSB0byB0aGUgb3JpZ2luLiBI
b3dldmVyIGluIGFsbCBidXQgdGhlIHZlcnkgc2ltcGxlc3Qgb2Ygc2l0dWF0aW9ucyBpdCBpcyBt
b3JlIHN0cmFpZ2h0IGZvcndhcmQgdG8gc2V0IGl0IHRvIHRoZSByZWZyYWN0b3IgYXMgc3RhdGVk
IGluIHRoZSBkb2MuCisgICAgICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9o
b3dfdG8vcmVmbGVjdCNyZWZyYWN0aW9uCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5yZWZy
YWN0aW9uUGxhbmUgPSBuZXcgX01hdGhzX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siUGxhbmUiXSgwLCAxLCAwLCAxKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZSBob3cgZGVlcCB1bmRlciB0aGUgc3VyZmFjZSB3ZSBzaG91bGQgc2VlLgorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuZGVwdGggPSAyLjA7CisgICAgICAgIF90aGlzLm9uQmVmb3JlUmVu
ZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgc2NlbmUuY2xpcFBs
YW5lID0gX3RoaXMucmVmcmFjdGlvblBsYW5lOworICAgICAgICB9KTsKKyAgICAgICAgX3RoaXMu
b25BZnRlclJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNj
ZW5lLmNsaXBQbGFuZSA9IG51bGw7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX3RoaXM7
CisgICAgfQorICAgIC8qKgorICAgICAqIENsb25lIHRoZSByZWZyYWN0aW9uIHRleHR1cmUuCisg
ICAgICogQHJldHVybnMgdGhlIGNsb25lZCB0ZXh0dXJlCisgICAgICovCisgICAgUmVmcmFjdGlv
blRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2Nl
bmUgPSB0aGlzLmdldFNjZW5lKCk7CisgICAgICAgIGlmICghc2NlbmUpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZhciB0ZXh0dXJlU2l6ZSA9IHRoaXMu
Z2V0U2l6ZSgpOworICAgICAgICB2YXIgbmV3VGV4dHVyZSA9IG5ldyBSZWZyYWN0aW9uVGV4dHVy
ZSh0aGlzLm5hbWUsIHRleHR1cmVTaXplLndpZHRoLCBzY2VuZSwgdGhpcy5fZ2VuZXJhdGVNaXBN
YXBzKTsKKyAgICAgICAgLy8gQmFzZSB0ZXh0dXJlCisgICAgICAgIG5ld1RleHR1cmUuaGFzQWxw
aGEgPSB0aGlzLmhhc0FscGhhOworICAgICAgICBuZXdUZXh0dXJlLmxldmVsID0gdGhpcy5sZXZl
bDsKKyAgICAgICAgLy8gUmVmcmFjdGlvbiBUZXh0dXJlCisgICAgICAgIG5ld1RleHR1cmUucmVm
cmFjdGlvblBsYW5lID0gdGhpcy5yZWZyYWN0aW9uUGxhbmUuY2xvbmUoKTsKKyAgICAgICAgaWYg
KHRoaXMucmVuZGVyTGlzdCkgeworICAgICAgICAgICAgbmV3VGV4dHVyZS5yZW5kZXJMaXN0ID0g
dGhpcy5yZW5kZXJMaXN0LnNsaWNlKDApOworICAgICAgICB9CisgICAgICAgIG5ld1RleHR1cmUu
ZGVwdGggPSB0aGlzLmRlcHRoOworICAgICAgICByZXR1cm4gbmV3VGV4dHVyZTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUgdGV4dHVyZSB0byBhIEpTT04gcmVwcmVzZW50
YXRpb24geW91IGNvdWxkIHVzZSBpbiBQYXJzZSBsYXRlciBvbgorICAgICAqIEByZXR1cm5zIHRo
ZSBzZXJpYWxpemVkIEpTT04gcmVwcmVzZW50YXRpb24KKyAgICAgKi8KKyAgICBSZWZyYWN0aW9u
VGV4dHVyZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
IXRoaXMubmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSBfc3VwZXIucHJvdG90eXBlLnNlcmlhbGl6ZS5j
YWxsKHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1pcnJvclBsYW5lID0gdGhp
cy5yZWZyYWN0aW9uUGxhbmUuYXNBcnJheSgpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
LmRlcHRoID0gdGhpcy5kZXB0aDsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7
CisgICAgfTsKKyAgICByZXR1cm4gUmVmcmFjdGlvblRleHR1cmU7Cit9KF9NYXRlcmlhbHNfVGV4
dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJS
ZW5kZXJUYXJnZXRUZXh0dXJlIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRl
cmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25zLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25z
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJlbmRlclRhcmdldENyZWF0
aW9uT3B0aW9ucyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJU
YXJnZXRDcmVhdGlvbk9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJlbmRlclRhcmdldENy
ZWF0aW9uT3B0aW9uczsgfSk7CisvKioKKyAqIERlZmluZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRl
IGEgcmVuZGVyIHRhcmdldCB0ZXh0dXJlCisgKi8KK3ZhciBSZW5kZXJUYXJnZXRDcmVhdGlvbk9w
dGlvbnMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gUmVuZGVy
VGFyZ2V0Q3JlYXRpb25PcHRpb25zKCkgeworICAgIH0KKyAgICByZXR1cm4gUmVuZGVyVGFyZ2V0
Q3JlYXRpb25PcHRpb25zOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRl
cmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVy
aWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBSZW5kZXJUYXJnZXRUZXh0dXJlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlJlbmRlclRhcmdldFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJlbmRl
clRhcmdldFRleHR1cmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNj
L29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
VGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0
ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
UG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL1Bvc3RQcm9jZXNzZXMvcG9zdFBy
b2Nlc3NNYW5hZ2VyICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3NNYW5hZ2VyLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1JlbmRlcmluZ19yZW5kZXJpbmdNYW5hZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9SZW5kZXJpbmcvcmVuZGVyaW5nTWFuYWdlciAqLyAiLi9SZW5kZXJpbmcvcmVuZGVyaW5nTWFu
YWdlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19FeHRlbnNpb25zX2VuZ2luZV9yZW5kZXJUYXJn
ZXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUucmVuZGVyVGFyZ2V0ICovICIuL0VuZ2lu
ZXMvRXh0ZW5zaW9ucy9lbmdpbmUucmVuZGVyVGFyZ2V0LnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVz
L2VuZ2luZS50cyIpOworCisKKworCisKKworCisKKworCisvKioKKyAqIFRoaXMgSGVscHMgY3Jl
YXRpbmcgYSB0ZXh0dXJlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGZyb20gYSBjYW1lcmEgaW4geW91
ciBzY2VuZS4KKyAqIEl0IGlzIGJhc2ljYWxseSBhIGR5bmFtaWMgdGV4dHVyZSB0aGF0IGNvdWxk
IGJlIHVzZWQgdG8gY3JlYXRlIHNwZWNpYWwgZWZmZWN0cyBmb3IgaW5zdGFuY2UuCisgKiBBY3R1
YWxseSwgSXQgaXMgdGhlIGJhc2Ugb2YgbG90IG9mIGVmZmVjdHMgaW4gdGhlIGZyYW1ld29yayBs
aWtlIHBvc3QgcHJvY2Vzcywgc2hhZG93cywgZWZmZWN0IGxheWVycyBhbmQgcmVuZGVyaW5nIHBp
cGVsaW5lcy4uLgorICovCit2YXIgUmVuZGVyVGFyZ2V0VGV4dHVyZSA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShSZW5kZXJUYXJnZXRUZXh0dXJlLCBfc3VwZXIpOworICAgIC8qKgor
ICAgICAqIEluc3RhbnRpYXRlIGEgcmVuZGVyIHRhcmdldCB0ZXh0dXJlLiBUaGlzIGlzIG1haW5s
eSB1c2VkIHRvIHJlbmRlciBvZiBzY3JlZW4gdGhlIHNjZW5lIHRvIGZvciBpbnN0YW5jZSBhcHBs
eSBwb3N0IHByb2Nlc3NzZQorICAgICAqIG9yIHVzZWQgYSBzaGFkb3csIGRlcHRoIHRleHR1cmUu
Li4KKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgZnJpZW5kbHkgbmFtZSBvZiB0aGUgdGV4dHVyZQor
ICAgICAqIEBwYXJhbSBzaXplIFRoZSBzaXplIG9mIHRoZSBSVFQgKG51bWJlciBpZiBzcXVhcmUs
IG9yIHt3aWR0aDogbnVtYmVyLCBoZWlnaHQ6bnVtYmVyfSBvciB7cmF0aW86fSB0byBkZWZpbmUg
YSByYXRpbyBmcm9tIHRoZSBtYWluIHNjZW5lKQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2Nl
bmUgdGhlIFJUVCBiZWxvbmdzIHRvLiBUaGUgbGF0ZXN0IGNyZWF0ZWQgc2NlbmUgd2lsbCBiZSB1
c2VkIGlmIG5vdCBwcmVjaXNlZC4KKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVNaXBNYXBzIFRydWUg
aWYgbWlwIG1hcHMgbmVlZCB0byBiZSBnZW5lcmF0ZWQgYWZ0ZXIgcmVuZGVyLgorICAgICAqIEBw
YXJhbSBkb05vdENoYW5nZUFzcGVjdFJhdGlvIFRydWUgdG8gbm90IGNoYW5nZSB0aGUgYXNwZWN0
IHJhdGlvIG9mIHRoZSBzY2VuZSBpbiB0aGUgUlRUCisgICAgICogQHBhcmFtIHR5cGUgVGhlIHR5
cGUgb2YgdGhlIGJ1ZmZlciBpbiB0aGUgUlRUIChpbnQsIGhhbGYgZmxvYXQsIGZsb2F0Li4uKQor
ICAgICAqIEBwYXJhbSBpc0N1YmUgVHJ1ZSBpZiBhIGN1YmUgdGV4dHVyZSBuZWVkcyB0byBiZSBj
cmVhdGVkCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBi
ZSB1c2Vkd2l0aCB0aGUgcmVuZGVyIHRhcmdldCAoTGluZWFyLCBOZWFyZXN0Li4uKQorICAgICAq
IEBwYXJhbSBnZW5lcmF0ZURlcHRoQnVmZmVyIFRydWUgdG8gZ2VuZXJhdGUgYSBkZXB0aCBidWZm
ZXIKKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVTdGVuY2lsQnVmZmVyIFRydWUgdG8gZ2VuZXJhdGUg
YSBzdGVuY2lsIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBpc011bHRpIFRydWUgaWYgbXVsdGlwbGUg
dGV4dHVyZXMgbmVlZCB0byBiZSBjcmVhdGVkIChEcmF3IEJ1ZmZlcnMpCisgICAgICogQHBhcmFt
IGZvcm1hdCBUaGUgaW50ZXJuYWwgZm9ybWF0IG9mIHRoZSBidWZmZXIgaW4gdGhlIFJUVCAoUkVE
LCBSRywgUkdCLCBSR0JBLCBBTFBIQS4uLikKKyAgICAgKiBAcGFyYW0gZGVsYXlBbGxvY2F0aW9u
IGlmIHRoZSB0ZXh0dXJlIGFsbG9jYXRpb24gc2hvdWxkIGJlIGRlbGF5ZWQgKGRlZmF1bHQ6IGZh
bHNlKQorICAgICAqLworICAgIGZ1bmN0aW9uIFJlbmRlclRhcmdldFRleHR1cmUobmFtZSwgc2l6
ZSwgc2NlbmUsIGdlbmVyYXRlTWlwTWFwcywgZG9Ob3RDaGFuZ2VBc3BlY3RSYXRpbywgdHlwZSwg
aXNDdWJlLCBzYW1wbGluZ01vZGUsIGdlbmVyYXRlRGVwdGhCdWZmZXIsIGdlbmVyYXRlU3RlbmNp
bEJ1ZmZlciwgaXNNdWx0aSwgZm9ybWF0LCBkZWxheUFsbG9jYXRpb24pIHsKKyAgICAgICAgaWYg
KGRvTm90Q2hhbmdlQXNwZWN0UmF0aW8gPT09IHZvaWQgMCkgeyBkb05vdENoYW5nZUFzcGVjdFJh
dGlvID0gdHJ1ZTsgfQorICAgICAgICBpZiAodHlwZSA9PT0gdm9pZCAwKSB7IHR5cGUgPSBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAgIGlmIChpc0N1YmUgPT09IHZvaWQg
MCkgeyBpc0N1YmUgPSBmYWxzZTsgfQorICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lk
IDApIHsgc2FtcGxpbmdNb2RlID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9
CisgICAgICAgIGlmIChnZW5lcmF0ZURlcHRoQnVmZmVyID09PSB2b2lkIDApIHsgZ2VuZXJhdGVE
ZXB0aEJ1ZmZlciA9IHRydWU7IH0KKyAgICAgICAgaWYgKGdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA9
PT0gdm9pZCAwKSB7IGdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA9IGZhbHNlOyB9CisgICAgICAgIGlm
IChpc011bHRpID09PSB2b2lkIDApIHsgaXNNdWx0aSA9IGZhbHNlOyB9CisgICAgICAgIGlmIChm
b3JtYXQgPT09IHZvaWQgMCkgeyBmb3JtYXQgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBOyB9Cisg
ICAgICAgIGlmIChkZWxheUFsbG9jYXRpb24gPT09IHZvaWQgMCkgeyBkZWxheUFsbG9jYXRpb24g
PSBmYWxzZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBudWxsLCBz
Y2VuZSwgIWdlbmVyYXRlTWlwTWFwcykgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuaXNDdWJlID0g
aXNDdWJlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGlmIHBhcnRpY2xlcyBzaG91
bGQgYmUgcmVuZGVyZWQgaW4geW91ciB0ZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMucmVuZGVyUGFydGljbGVzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZSBpZiBzcHJpdGVzIHNob3VsZCBiZSByZW5kZXJlZCBpbiB5b3VyIHRleHR1cmUuCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5yZW5kZXJTcHJpdGVzID0gZmFsc2U7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBjb29yZGluYXRlcyBtb2RlIHRvIHByb2pl
Y3Rpb24gZm9yIFJUVCBhcyBpdCBpcyB0aGUgbW9zdCBjb21tb24gY2FzZSBmb3IgcmVuZGVyZWQg
dGV4dHVyZXMuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5jb29yZGluYXRlc01vZGUgPSBf
TWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
VGV4dHVyZSJdLlBST0pFQ1RJT05fTU9ERTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZSBpZiB0aGUgY2FtZXJhIHZpZXdwb3J0IHNob3VsZCBiZSByZXNwZWN0ZWQgd2hpbGUgcmVuZGVy
aW5nIHRoZSB0ZXh0dXJlIG9yIGlmIHRoZSByZW5kZXIgc2hvdWxkIGJlIGRvbmUgdG8gdGhlIGVu
dGlyZSB0ZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaWdub3JlQ2FtZXJhVmll
d3BvcnQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVk
IHdoZW4gdGhlIHRleHR1cmUgaXMgdW5iaW5kLgorICAgICAgICAqLworICAgICAgICBfdGhpcy5v
bkJlZm9yZUJpbmRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAq
IEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGlzIHVuYmluZC4KKyAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMub25BZnRlclVuYmluZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSByZW5kZXJpbmcg
dGhlIHRleHR1cmUKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25CZWZvcmVSZW5kZXJPYnNl
cnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2ZW50IHRyaWdn
ZXJlZCBhZnRlciByZW5kZXJpbmcgdGhlIHRleHR1cmUKKyAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMub25BZnRlclJlbmRlck9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAg
ICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGFmdGVyIHRoZSB0ZXh0dXJlIGNsZWFyCisgICAgICAg
ICovCisgICAgICAgIF90aGlzLm9uQ2xlYXJPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFi
bGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyBy
ZXNpemVkLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25SZXNpemVPYnNlcnZhYmxlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgICAgIF90aGlzLl9jdXJyZW50UmVmcmVzaElkID0gLTE7CisgICAgICAg
IF90aGlzLl9yZWZyZXNoUmF0ZSA9IDE7CisgICAgICAgIF90aGlzLl9zYW1wbGVzID0gMTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY2VudGVyIG9mIHRoZSBib3Vu
ZGluZyBib3ggYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXh0dXJlICh3aGVuIGluIGN1YmUgbW9kZSkK
KyAgICAgICAgICogSXQgbXVzdCBkZWZpbmUgd2hlcmUgdGhlIGNhbWVyYSB1c2VkIHRvIHJlbmRl
ciB0aGUgdGV4dHVyZSBpcyBzZXQKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmJvdW5kaW5n
Qm94UG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgc2NlbmUgPSBfdGhpcy5nZXRTY2VuZSgp
OworICAgICAgICBpZiAoIXNjZW5lKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXM7CisgICAg
ICAgIH0KKyAgICAgICAgX3RoaXMucmVuZGVyTGlzdCA9IG5ldyBBcnJheSgpOworICAgICAgICBf
dGhpcy5fZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIF90aGlzLm5hbWUgPSBu
YW1lOworICAgICAgICBfdGhpcy5pc1JlbmRlclRhcmdldCA9IHRydWU7CisgICAgICAgIF90aGlz
Ll9pbml0aWFsU2l6ZVBhcmFtZXRlciA9IHNpemU7CisgICAgICAgIF90aGlzLl9wcm9jZXNzU2l6
ZVBhcmFtZXRlcihzaXplKTsKKyAgICAgICAgX3RoaXMuX3Jlc2l6ZU9ic2VydmVyID0gX3RoaXMu
Z2V0U2NlbmUoKS5nZXRFbmdpbmUoKS5vblJlc2l6ZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLl9nZW5lcmF0ZU1pcE1hcHMgPSBnZW5lcmF0
ZU1pcE1hcHMgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIF90aGlzLl9kb05vdENoYW5nZUFzcGVj
dFJhdGlvID0gZG9Ob3RDaGFuZ2VBc3BlY3RSYXRpbzsKKyAgICAgICAgLy8gUmVuZGVyaW5nIGdy
b3VwcworICAgICAgICBfdGhpcy5fcmVuZGVyaW5nTWFuYWdlciA9IG5ldyBfUmVuZGVyaW5nX3Jl
bmRlcmluZ01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUmVuZGVyaW5nTWFu
YWdlciJdKHNjZW5lKTsKKyAgICAgICAgX3RoaXMuX3JlbmRlcmluZ01hbmFnZXIuX3VzZVNjZW5l
QXV0b0NsZWFyU2V0dXAgPSB0cnVlOworICAgICAgICBpZiAoaXNNdWx0aSkgeworICAgICAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgICAgICB9CisgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRP
cHRpb25zID0geworICAgICAgICAgICAgZ2VuZXJhdGVNaXBNYXBzOiBnZW5lcmF0ZU1pcE1hcHMs
CisgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgZm9ybWF0OiBmb3JtYXQsCisg
ICAgICAgICAgICBzYW1wbGluZ01vZGU6IHNhbXBsaW5nTW9kZSwKKyAgICAgICAgICAgIGdlbmVy
YXRlRGVwdGhCdWZmZXI6IGdlbmVyYXRlRGVwdGhCdWZmZXIsCisgICAgICAgICAgICBnZW5lcmF0
ZVN0ZW5jaWxCdWZmZXI6IGdlbmVyYXRlU3RlbmNpbEJ1ZmZlcgorICAgICAgICB9OworICAgICAg
ICBpZiAoc2FtcGxpbmdNb2RlID09PSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGV4dHVyZSJdLk5FQVJFU1RfU0FNUExJTkdNT0RFKSB7
CisgICAgICAgICAgICBfdGhpcy53cmFwVSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7
CisgICAgICAgICAgICBfdGhpcy53cmFwViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkZWxheUFsbG9jYXRpb24pIHsKKyAgICAgICAgICAg
IGlmIChpc0N1YmUpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdGV4dHVyZSA9IHNjZW5lLmdl
dEVuZ2luZSgpLmNyZWF0ZVJlbmRlclRhcmdldEN1YmVUZXh0dXJlKF90aGlzLmdldFJlbmRlclNp
emUoKSwgX3RoaXMuX3JlbmRlclRhcmdldE9wdGlvbnMpOworICAgICAgICAgICAgICAgIF90aGlz
LmNvb3JkaW5hdGVzTW9kZSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uSU5WQ1VCSUNfTU9ERTsKKyAgICAgICAgICAg
ICAgICBfdGhpcy5fdGV4dHVyZU1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5JZGVudGl0eSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3RleHR1cmUgPSBzY2Vu
ZS5nZXRFbmdpbmUoKS5jcmVhdGVSZW5kZXJUYXJnZXRUZXh0dXJlKF90aGlzLl9zaXplLCBfdGhp
cy5fcmVuZGVyVGFyZ2V0T3B0aW9ucyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVuZGVy
VGFyZ2V0VGV4dHVyZS5wcm90b3R5cGUsICJyZW5kZXJMaXN0IiwgeworICAgICAgICAvKioKKyAg
ICAgICAgKiBVc2UgdGhpcyBsaXN0IHRvIGRlZmluZSB0aGUgbGlzdCBvZiBtZXNoIHlvdSB3YW50
IHRvIHJlbmRlci4KKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGlzdDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlckxpc3QgPSB2YWx1
ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZW5kZXJMaXN0KSB7CisgICAgICAgICAgICAgICAg
dGhpcy5faG9va0FycmF5KHRoaXMuX3JlbmRlckxpc3QpOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBSZW5kZXJUYXJnZXRUZXh0dXJlLnByb3RvdHlwZS5faG9va0FycmF5
ID0gZnVuY3Rpb24gKGFycmF5KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAg
IHZhciBvbGRQdXNoID0gYXJyYXkucHVzaDsKKyAgICAgICAgYXJyYXkucHVzaCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIg
X2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICBp
dGVtc1tfaV0gPSBhcmd1bWVudHNbX2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFy
IHdhc0VtcHR5ID0gYXJyYXkubGVuZ3RoID09PSAwOworICAgICAgICAgICAgdmFyIHJlc3VsdCA9
IG9sZFB1c2guYXBwbHkoYXJyYXksIGl0ZW1zKTsKKyAgICAgICAgICAgIGlmICh3YXNFbXB0eSkg
eworICAgICAgICAgICAgICAgIF90aGlzLmdldFNjZW5lKCkubWVzaGVzLmZvckVhY2goZnVuY3Rp
b24gKG1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzaC5fbWFya1N1Yk1lc2hlc0FzTGln
aHREaXJ0eSgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIG9sZFNwbGljZSA9IGFy
cmF5LnNwbGljZTsKKyAgICAgICAgYXJyYXkuc3BsaWNlID0gZnVuY3Rpb24gKGluZGV4LCBkZWxl
dGVDb3VudCkgeworICAgICAgICAgICAgdmFyIGRlbGV0ZWQgPSBvbGRTcGxpY2UuYXBwbHkoYXJy
YXksIFtpbmRleCwgZGVsZXRlQ291bnRdKTsKKyAgICAgICAgICAgIGlmIChhcnJheS5sZW5ndGgg
PT09IDApIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5nZXRTY2VuZSgpLm1lc2hlcy5mb3JFYWNo
KGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIG1lc2guX21hcmtTdWJNZXNo
ZXNBc0xpZ2h0RGlydHkoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBkZWxldGVkOworICAgICAgICB9OworICAgIH07CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLCAib25BZnRlclVu
YmluZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldCBhIGFmdGVyIHVuYmluZCBjYWxs
YmFjayBpbiB0aGUgdGV4dHVyZS4KKyAgICAgICAgICogVGhpcyBoYXMgYmVlbiBrZXB0IGZvciBi
YWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB1c2Ugb2Ygb25BZnRlclVuYmluZE9ic2VydmFibGUg
aXMgcmVjb21tZW5kZWQuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjYWxs
YmFjaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX29uQWZ0ZXJVbmJpbmRPYnNlcnZlcikgewor
ICAgICAgICAgICAgICAgIHRoaXMub25BZnRlclVuYmluZE9ic2VydmFibGUucmVtb3ZlKHRoaXMu
X29uQWZ0ZXJVbmJpbmRPYnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9vbkFmdGVyVW5iaW5kT2JzZXJ2ZXIgPSB0aGlzLm9uQWZ0ZXJVbmJpbmRPYnNlcnZhYmxlLmFk
ZChjYWxsYmFjayk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShSZW5kZXJUYXJnZXRUZXh0dXJlLnByb3RvdHlwZSwgIm9uQmVmb3JlUmVuZGVyIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogU2V0IGEgYmVmb3JlIHJlbmRlciBjYWxsYmFjayBpbiB0aGUg
dGV4dHVyZS4KKyAgICAgICAgICogVGhpcyBoYXMgYmVlbiBrZXB0IGZvciBiYWNrd2FyZCBjb21w
YXRpYmlsaXR5IGFuZCB1c2Ugb2Ygb25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlIGlzIHJlY29tbWVu
ZGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9vbkJlZm9yZVJlbmRlck9ic2VydmVyKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQmVmb3Jl
UmVuZGVyT2JzZXJ2ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fb25CZWZv
cmVSZW5kZXJPYnNlcnZlciA9IHRoaXMub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLmFkZChjYWxs
YmFjayk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZW5k
ZXJUYXJnZXRUZXh0dXJlLnByb3RvdHlwZSwgIm9uQWZ0ZXJSZW5kZXIiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBTZXQgYSBhZnRlciByZW5kZXIgY2FsbGJhY2sgaW4gdGhlIHRleHR1cmUu
CisgICAgICAgICAqIFRoaXMgaGFzIGJlZW4ga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0
eSBhbmQgdXNlIG9mIG9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlIGlzIHJlY29tbWVuZGVkLgorICAg
ICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9vbkFmdGVyUmVuZGVyT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Lm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFmdGVyUmVuZGVyT2JzZXJ2
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fb25BZnRlclJlbmRlck9ic2Vy
dmVyID0gdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5hZGQoY2FsbGJhY2spOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVuZGVyVGFyZ2V0VGV4dHVy
ZS5wcm90b3R5cGUsICJvbkNsZWFyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogU2V0IGEg
Y2xlYXIgY2FsbGJhY2sgaW4gdGhlIHRleHR1cmUuCisgICAgICAgICAqIFRoaXMgaGFzIGJlZW4g
a2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgdXNlIG9mIG9uQ2xlYXJPYnNlcnZh
YmxlIGlzIHJlY29tbWVuZGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
Y2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbkNsZWFyT2JzZXJ2ZXIpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLm9uQ2xlYXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkNsZWFy
T2JzZXJ2ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fb25DbGVhck9ic2Vy
dmVyID0gdGhpcy5vbkNsZWFyT2JzZXJ2YWJsZS5hZGQoY2FsbGJhY2spOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVuZGVyVGFyZ2V0VGV4dHVyZS5wcm90
b3R5cGUsICJyZW5kZXJUYXJnZXRPcHRpb25zIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyByZW5kZXIgdGFyZ2V0IGNyZWF0aW9uIG9wdGlvbnMgdGhhdCB3ZXJlIHVzZWQuCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9yZW5kZXJUYXJnZXRPcHRpb25zOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBSZW5kZXJU
YXJnZXRUZXh0dXJlLnByb3RvdHlwZS5fb25SYXRpb1Jlc2NhbGUgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGlmICh0aGlzLl9zaXplUmF0aW8pIHsKKyAgICAgICAgICAgIHRoaXMucmVzaXplKHRo
aXMuX2luaXRpYWxTaXplUGFyYW1ldGVyKTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLCAiYm91bmRpbmdC
b3hTaXplIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9ib3VuZGluZ0JveFNpemU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIG9yIHNldHMgdGhlIHNpemUgb2YgdGhlIGJvdW5kaW5nIGJveCBhc3NvY2lhdGVk
IHdpdGggdGhlIHRleHR1cmUgKHdoZW4gaW4gY3ViZSBtb2RlKQorICAgICAgICAgKiBXaGVuIGRl
ZmluZWQsIHRoZSBjdWJlbWFwIHdpbGwgc3dpdGNoIHRvIGxvY2FsIG1vZGUKKyAgICAgICAgICog
QHNlZSBodHRwczovL2NvbW11bml0eS5hcm0uY29tL2dyYXBoaWNzL2IvYmxvZy9wb3N0cy9yZWZs
ZWN0aW9ucy1iYXNlZC1vbi1sb2NhbC1jdWJlbWFwcy1pbi11bml0eQorICAgICAgICAgKiBAZXhh
bXBsZSBodHRwczovL3d3dy5iYWJ5bG9uanMtcGxheWdyb3VuZC5jb20vI1JOQVNNTAorICAgICAg
ICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9ib3VuZGluZ0JveFNpemUgJiYgdGhpcy5fYm91bmRpbmdCb3hTaXplLmVxdWFscyh2YWx1
ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0aGlzLl9ib3VuZGluZ0JveFNpemUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHZhciBzY2VuZSA9
IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgICAgIGlmIChzY2VuZSkgeworICAgICAgICAgICAg
ICAgIHNjZW5lLm1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGly
dHlGbGFnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZS4KKyAgICAgKiBUaGlzIGlzIG9ubHkg
YXZhaWxhYmxlIGluIFdlYkdMIDIgb3Igd2l0aCB0aGUgZGVwdGggdGV4dHVyZSBleHRlbnNpb24g
YXZhaWxhYmxlLgorICAgICAqIEBwYXJhbSBjb21wYXJpc29uRnVuY3Rpb24gU3BlY2lmaWVzIHRo
ZSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIHNldCBvbiB0aGUgdGV4dHVyZS4gSWYgMCBvciB1bmRl
ZmluZWQsIHRoZSB0ZXh0dXJlIGlzIG5vdCBpbiBjb21wYXJpc29uIG1vZGUKKyAgICAgKiBAcGFy
YW0gYmlsaW5lYXJGaWx0ZXJpbmcgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGJpbGluZWFyIGZp
bHRlcmluZyBpcyBlbmFibGUgb24gdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVT
dGVuY2lsIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBhIHN0ZW5jaWwgc2hvdWxkIGJlIGFsbG9j
YXRlZCBpbiB0aGUgdGV4dHVyZQorICAgICAqLworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJv
dG90eXBlLmNyZWF0ZURlcHRoU3RlbmNpbFRleHR1cmUgPSBmdW5jdGlvbiAoY29tcGFyaXNvbkZ1
bmN0aW9uLCBiaWxpbmVhckZpbHRlcmluZywgZ2VuZXJhdGVTdGVuY2lsKSB7CisgICAgICAgIGlm
IChjb21wYXJpc29uRnVuY3Rpb24gPT09IHZvaWQgMCkgeyBjb21wYXJpc29uRnVuY3Rpb24gPSAw
OyB9CisgICAgICAgIGlmIChiaWxpbmVhckZpbHRlcmluZyA9PT0gdm9pZCAwKSB7IGJpbGluZWFy
RmlsdGVyaW5nID0gdHJ1ZTsgfQorICAgICAgICBpZiAoZ2VuZXJhdGVTdGVuY2lsID09PSB2b2lk
IDApIHsgZ2VuZXJhdGVTdGVuY2lsID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCF0aGlzLmdldFNj
ZW5lKCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgZW5n
aW5lID0gdGhpcy5nZXRTY2VuZSgpLmdldEVuZ2luZSgpOworICAgICAgICB0aGlzLmRlcHRoU3Rl
bmNpbFRleHR1cmUgPSBlbmdpbmUuY3JlYXRlRGVwdGhTdGVuY2lsVGV4dHVyZSh0aGlzLl9zaXpl
LCB7CisgICAgICAgICAgICBiaWxpbmVhckZpbHRlcmluZzogYmlsaW5lYXJGaWx0ZXJpbmcsCisg
ICAgICAgICAgICBjb21wYXJpc29uRnVuY3Rpb246IGNvbXBhcmlzb25GdW5jdGlvbiwKKyAgICAg
ICAgICAgIGdlbmVyYXRlU3RlbmNpbDogZ2VuZXJhdGVTdGVuY2lsLAorICAgICAgICAgICAgaXND
dWJlOiB0aGlzLmlzQ3ViZQorICAgICAgICB9KTsKKyAgICAgICAgZW5naW5lLnNldEZyYW1lQnVm
ZmVyRGVwdGhTdGVuY2lsVGV4dHVyZSh0aGlzKTsKKyAgICB9OworICAgIFJlbmRlclRhcmdldFRl
eHR1cmUucHJvdG90eXBlLl9wcm9jZXNzU2l6ZVBhcmFtZXRlciA9IGZ1bmN0aW9uIChzaXplKSB7
CisgICAgICAgIGlmIChzaXplLnJhdGlvKSB7CisgICAgICAgICAgICB0aGlzLl9zaXplUmF0aW8g
PSBzaXplLnJhdGlvOworICAgICAgICAgICAgdGhpcy5fc2l6ZSA9IHsKKyAgICAgICAgICAgICAg
ICB3aWR0aDogdGhpcy5fYmVzdFJlZmxlY3Rpb25SZW5kZXJUYXJnZXREaW1lbnNpb24odGhpcy5f
ZW5naW5lLmdldFJlbmRlcldpZHRoKCksIHRoaXMuX3NpemVSYXRpbyksCisgICAgICAgICAgICAg
ICAgaGVpZ2h0OiB0aGlzLl9iZXN0UmVmbGVjdGlvblJlbmRlclRhcmdldERpbWVuc2lvbih0aGlz
Ll9lbmdpbmUuZ2V0UmVuZGVySGVpZ2h0KCksIHRoaXMuX3NpemVSYXRpbykKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9zaXplID0g
c2l6ZTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlbmRl
clRhcmdldFRleHR1cmUucHJvdG90eXBlLCAic2FtcGxlcyIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIERlZmluZSB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gdXNlIGluIGNhc2Ugb2YgTVNB
QS4KKyAgICAgICAgICogSXQgZGVmYXVsdHMgdG8gb25lIG1lYW5pbmcgbm8gTVNBQSBoYXMgYmVl
biBlbmFibGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fc2FtcGxlczsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zYW1wbGVzID09PSB2YWx1
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgICAgIGlmICghc2NlbmUpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9zYW1wbGVzID0gc2NlbmUuZ2V0RW5naW5lKCkudXBkYXRlUmVuZGVyVGFyZ2V0VGV4dHVyZVNh
bXBsZUNvdW50KHRoaXMuX3RleHR1cmUsIHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqCisgICAgICogUmVzZXRzIHRoZSByZWZyZXNoIGNvdW50ZXIgb2YgdGhlIHRleHR1cmUgYW5k
IHN0YXJ0IGJhayBmcm9tIHNjcmF0Y2guCisgICAgICogQ291bGQgYmUgdXNlZnVsIHRvIHJlZ2Vu
ZXJhdGUgdGhlIHRleHR1cmUgaWYgaXQgaXMgc2V0dXAgdG8gcmVuZGVyIG9ubHkgb25jZS4KKyAg
ICAgKi8KKyAgICBSZW5kZXJUYXJnZXRUZXh0dXJlLnByb3RvdHlwZS5yZXNldFJlZnJlc2hDb3Vu
dGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jdXJyZW50UmVmcmVzaElkID0gLTE7
CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVuZGVyVGFyZ2V0VGV4dHVyZS5w
cm90b3R5cGUsICJyZWZyZXNoUmF0ZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZSB0aGUgcmVmcmVzaCByYXRlIG9mIHRoZSB0ZXh0dXJlIG9yIHRoZSByZW5kZXJpbmcgZnJlcXVl
bmN5LgorICAgICAgICAgKiBVc2UgMCB0byByZW5kZXIganVzdCBvbmNlLCAxIHRvIHJlbmRlciBv
biBldmVyeSBmcmFtZSwgMiB0byByZW5kZXIgZXZlcnkgdHdvIGZyYW1lcyBhbmQgc28gb24uLi4K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3JlZnJlc2hSYXRlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFJhdGUgPSB2YWx1ZTsKKyAgICAg
ICAgICAgIHRoaXMucmVzZXRSZWZyZXNoQ291bnRlcigpOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICAvKioKKyAgICAgKiBBZGRzIGEgcG9zdCBwcm9jZXNzIHRvIHRoZSByZW5kZXIgdGFyZ2V0IHJl
bmRlcmluZyBwYXNzZXMuCisgICAgICogQHBhcmFtIHBvc3RQcm9jZXNzIGRlZmluZSB0aGUgcG9z
dCBwcm9jZXNzIHRvIGFkZAorICAgICAqLworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90
eXBlLmFkZFBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHBvc3RQcm9jZXNzKSB7CisgICAgICAgIGlm
ICghdGhpcy5fcG9zdFByb2Nlc3NNYW5hZ2VyKSB7CisgICAgICAgICAgICB2YXIgc2NlbmUgPSB0
aGlzLmdldFNjZW5lKCk7CisgICAgICAgICAgICBpZiAoIXNjZW5lKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3NN
YW5hZ2VyID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzTWFuYWdlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJQb3N0UHJvY2Vzc01hbmFnZXIiXShzY2VuZSk7CisgICAgICAg
ICAgICB0aGlzLl9wb3N0UHJvY2Vzc2VzID0gbmV3IEFycmF5KCk7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fcG9zdFByb2Nlc3Nlcy5wdXNoKHBvc3RQcm9jZXNzKTsKKyAgICAgICAgdGhpcy5f
cG9zdFByb2Nlc3Nlc1swXS5hdXRvQ2xlYXIgPSBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENsZWFyIGFsbCB0aGUgcG9zdCBwcm9jZXNzZXMgYXR0YWNoZWQgdG8gdGhlIHJlbmRlciB0
YXJnZXQKKyAgICAgKiBAcGFyYW0gZGlzcG9zZSBkZWZpbmUgaWYgdGhlIGNsZWFyZWQgcG9zdCBw
cm9jZXNzZXNzaG91bGQgYWxzbyBiZSBkaXNwb3NlZCAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAg
Ki8KKyAgICBSZW5kZXJUYXJnZXRUZXh0dXJlLnByb3RvdHlwZS5jbGVhclBvc3RQcm9jZXNzZXMg
PSBmdW5jdGlvbiAoZGlzcG9zZSkgeworICAgICAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7
IGRpc3Bvc2UgPSBmYWxzZTsgfQorICAgICAgICBpZiAoIXRoaXMuX3Bvc3RQcm9jZXNzZXMpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGlzcG9zZSkgewor
ICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3Bvc3RQcm9jZXNzZXM7IF9p
IDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHBvc3RQcm9jZXNzID0g
X2FbX2ldOworICAgICAgICAgICAgICAgIHBvc3RQcm9jZXNzLmRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2VzID0gW107CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgb25lIG9mIHRoZSBwb3N0IHByb2Nlc3MgZnJvbSB0
aGUgbGlzdCBvZiBhdHRhY2hlZCBwb3N0IHByb2Nlc3NlcyB0byB0aGUgdGV4dHVyZQorICAgICAq
IEBwYXJhbSBwb3N0UHJvY2VzcyBkZWZpbmUgdGhlIHBvc3QgcHJvY2VzcyB0byByZW1vdmUgZnJv
bSB0aGUgbGlzdAorICAgICAqLworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLnJl
bW92ZVBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHBvc3RQcm9jZXNzKSB7CisgICAgICAgIGlmICgh
dGhpcy5fcG9zdFByb2Nlc3NlcykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3Bvc3RQcm9jZXNzZXMuaW5kZXhPZihwb3N0UHJvY2Vz
cyk7CisgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2VzLnNwbGljZShpbmRleCwgMSk7Cisg
ICAgICAgIGlmICh0aGlzLl9wb3N0UHJvY2Vzc2VzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAg
IHRoaXMuX3Bvc3RQcm9jZXNzZXNbMF0uYXV0b0NsZWFyID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgUmVuZGVyVGFyZ2V0VGV4dHVyZS5wcm90b3R5
cGUuX3Nob3VsZFJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2N1cnJl
bnRSZWZyZXNoSWQgPT09IC0xKSB7IC8vIEF0IGxlYXN0IHJlbmRlciBvbmNlCisgICAgICAgICAg
ICB0aGlzLl9jdXJyZW50UmVmcmVzaElkID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnJlZnJlc2hSYXRlID09PSB0aGlzLl9jdXJyZW50
UmVmcmVzaElkKSB7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50UmVmcmVzaElkID0gMTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2N1cnJlbnRS
ZWZyZXNoSWQrKzsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAg
ICogR2V0cyB0aGUgYWN0dWFsIHJlbmRlciBzaXplIG9mIHRoZSB0ZXh0dXJlLgorICAgICAqIEBy
ZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHNpemUKKyAgICAgKi8KKyAgICBSZW5kZXJU
YXJnZXRUZXh0dXJlLnByb3RvdHlwZS5nZXRSZW5kZXJTaXplID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJXaWR0aCgpOworICAgIH07CisgICAgLyoqCisgICAg
ICogR2V0cyB0aGUgYWN0dWFsIHJlbmRlciB3aWR0aCBvZiB0aGUgdGV4dHVyZS4KKyAgICAgKiBA
cmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIHJlbmRlciBzaXplCisgICAgICovCisgICAgUmVuZGVy
VGFyZ2V0VGV4dHVyZS5wcm90b3R5cGUuZ2V0UmVuZGVyV2lkdGggPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGlmICh0aGlzLl9zaXplLndpZHRoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
c2l6ZS53aWR0aDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGFjdHVhbCByZW5kZXIgaGVpZ2h0IG9mIHRoZSB0
ZXh0dXJlLgorICAgICAqIEByZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciBzaXplCisg
ICAgICovCisgICAgUmVuZGVyVGFyZ2V0VGV4dHVyZS5wcm90b3R5cGUuZ2V0UmVuZGVySGVpZ2h0
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fc2l6ZS53aWR0aCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3NpemUuaGVpZ2h0OworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzLl9zaXplOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlbmRlclRh
cmdldFRleHR1cmUucHJvdG90eXBlLCAiY2FuUmVzY2FsZSIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldCBpZiB0aGUgdGV4dHVyZSBjYW4gYmUgcmVzY2FsZWQgb3Igbm90LgorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmVzaXplIHRoZSB0ZXh0dXJl
IHVzaW5nIGEgcmF0aW8uCisgICAgICogQHBhcmFtIHJhdGlvIHRoZSByYXRpbyB0byBhcHBseSB0
byB0aGUgdGV4dHVyZSBzaXplIGluIG9yZGVyIHRvIGNvbXB1dGUgdGhlIG5ldyB0YXJnZXQgc2l6
ZQorICAgICAqLworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLnNjYWxlID0gZnVu
Y3Rpb24gKHJhdGlvKSB7CisgICAgICAgIHZhciBuZXdTaXplID0gdGhpcy5nZXRSZW5kZXJTaXpl
KCkgKiByYXRpbzsKKyAgICAgICAgdGhpcy5yZXNpemUobmV3U2l6ZSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXQgdGhlIHRleHR1cmUgcmVmbGVjdGlvbiBtYXRyaXggdXNlZCB0byByb3Rh
dGUvdHJhbnNmb3JtIHRoZSByZWZsZWN0aW9uLgorICAgICAqIEByZXR1cm5zIHRoZSByZWZsZWN0
aW9uIG1hdHJpeAorICAgICAqLworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLmdl
dFJlZmxlY3Rpb25UZXh0dXJlTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhp
cy5pc0N1YmUpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlTWF0cml4OworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldFJlZmxlY3Rpb25UZXh0
dXJlTWF0cml4LmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXNpemUgdGhl
IHRleHR1cmUgdG8gYSBuZXcgZGVzaXJlZCBzaXplLgorICAgICAqIEJlIGNhcnJlZnVsbCBhcyBp
dCB3aWxsIHJlY3JlYXRlIGFsbCB0aGUgZGF0YSBpbiB0aGUgbmV3IHRleHR1cmUuCisgICAgICog
QHBhcmFtIHNpemUgRGVmaW5lIHRoZSBuZXcgc2l6ZS4gSXQgY2FuIGJlOgorICAgICAqICAgLSBh
IG51bWJlciBmb3Igc3F1YXJlZCB0ZXh0dXJlLAorICAgICAqICAgLSBhbiBvYmplY3QgY29udGFp
bmluZyB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0KKyAgICAgKiAgIC0gb3IgYW4g
b2JqZWN0IGNvbnRhaW5pbmcgYSByYXRpbyB7IHJhdGlvOiBudW1iZXIgfQorICAgICAqLworICAg
IFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uIChzaXplKSB7
CisgICAgICAgIHZhciB3YXNDdWJlID0gdGhpcy5pc0N1YmU7CisgICAgICAgIHRoaXMucmVsZWFz
ZUludGVybmFsVGV4dHVyZSgpOworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7
CisgICAgICAgIGlmICghc2NlbmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9wcm9jZXNzU2l6ZVBhcmFtZXRlcihzaXplKTsKKyAgICAgICAgaWYgKHdh
c0N1YmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSBzY2VuZS5nZXRFbmdpbmUoKS5j
cmVhdGVSZW5kZXJUYXJnZXRDdWJlVGV4dHVyZSh0aGlzLmdldFJlbmRlclNpemUoKSwgdGhpcy5f
cmVuZGVyVGFyZ2V0T3B0aW9ucyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLl90ZXh0dXJlID0gc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlUmVuZGVyVGFyZ2V0
VGV4dHVyZSh0aGlzLl9zaXplLCB0aGlzLl9yZW5kZXJUYXJnZXRPcHRpb25zKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5vblJlc2l6ZU9ic2VydmFibGUuaGFzT2JzZXJ2ZXJzKCkpIHsK
KyAgICAgICAgICAgIHRoaXMub25SZXNpemVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlz
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVuZGVycyBhbGwgdGhlIG9i
amVjdHMgZnJvbSB0aGUgcmVuZGVyIGxpc3QgaW50byB0aGUgdGV4dHVyZS4KKyAgICAgKiBAcGFy
YW0gdXNlQ2FtZXJhUG9zdFByb2Nlc3MgRGVmaW5lIGlmIGNhbWVyYSBwb3N0IHByb2Nlc3NlcyBz
aG91bGQgYmUgdXNlZCBkdXJpbmcgdGhlIHJlbmRlcmluZworICAgICAqIEBwYXJhbSBkdW1wRm9y
RGVidWcgRGVmaW5lIGlmIHRoZSByZW5kZXJpbmcgcmVzdWx0IHNob3VsZCBiZSBkdW1wZWQgKGNv
cGllZCkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlCisgICAgICovCisgICAgUmVuZGVyVGFyZ2V0VGV4
dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHVzZUNhbWVyYVBvc3RQcm9jZXNzLCBk
dW1wRm9yRGVidWcpIHsKKyAgICAgICAgaWYgKHVzZUNhbWVyYVBvc3RQcm9jZXNzID09PSB2b2lk
IDApIHsgdXNlQ2FtZXJhUG9zdFByb2Nlc3MgPSBmYWxzZTsgfQorICAgICAgICBpZiAoZHVtcEZv
ckRlYnVnID09PSB2b2lkIDApIHsgZHVtcEZvckRlYnVnID0gZmFsc2U7IH0KKyAgICAgICAgdmFy
IHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICBpZiAoIXNjZW5lKSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVu
Z2luZSgpOworICAgICAgICBpZiAodGhpcy51c2VDYW1lcmFQb3N0UHJvY2Vzc2VzICE9PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgIHVzZUNhbWVyYVBvc3RQcm9jZXNzID0gdGhpcy51c2VDYW1l
cmFQb3N0UHJvY2Vzc2VzOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl93YWl0aW5nUmVu
ZGVyTGlzdCkgeworICAgICAgICAgICAgdGhpcy5yZW5kZXJMaXN0ID0gW107CisgICAgICAgICAg
ICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fd2FpdGluZ1JlbmRlckxpc3QubGVu
Z3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5fd2FpdGluZ1Jl
bmRlckxpc3RbaW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBtZXNoXzEgPSBzY2VuZS5nZXRN
ZXNoQnlJRChpZCk7CisgICAgICAgICAgICAgICAgaWYgKG1lc2hfMSkgeworICAgICAgICAgICAg
ICAgICAgICB0aGlzLnJlbmRlckxpc3QucHVzaChtZXNoXzEpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl93YWl0aW5nUmVuZGVyTGlz
dDsKKyAgICAgICAgfQorICAgICAgICAvLyBJcyBwcmVkaWNhdGUgZGVmaW5lZD8KKyAgICAgICAg
aWYgKHRoaXMucmVuZGVyTGlzdFByZWRpY2F0ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMucmVu
ZGVyTGlzdCkgeworICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyTGlzdC5sZW5ndGggPSAwOyAv
LyBDbGVhciBwcmV2aW91cyByZW5kZXJMaXN0CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckxpc3QgPSBbXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgICAg
IGlmICghc2NlbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgc2NlbmVNZXNoZXMgPSBzY2VuZS5tZXNoZXM7CisgICAgICAgICAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc2NlbmVNZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7
CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBzY2VuZU1lc2hlc1tpbmRleF07CisgICAgICAg
ICAgICAgICAgaWYgKHRoaXMucmVuZGVyTGlzdFByZWRpY2F0ZShtZXNoKSkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLnJlbmRlckxpc3QucHVzaChtZXNoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vbkJlZm9yZUJpbmRPYnNl
cnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgLy8gU2V0IGN1c3RvbSBwcm9q
ZWN0aW9uLgorICAgICAgICAvLyBOZWVkcyB0byBiZSBiZWZvcmUgYmluZGluZyB0byBwcmV2ZW50
IGNoYW5naW5nIHRoZSBhc3BlY3QgcmF0aW8uCisgICAgICAgIHZhciBjYW1lcmE7CisgICAgICAg
IGlmICh0aGlzLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgY2FtZXJhID0gdGhpcy5hY3Rp
dmVDYW1lcmE7CisgICAgICAgICAgICBlbmdpbmUuc2V0Vmlld3BvcnQodGhpcy5hY3RpdmVDYW1l
cmEudmlld3BvcnQsIHRoaXMuZ2V0UmVuZGVyV2lkdGgoKSwgdGhpcy5nZXRSZW5kZXJIZWlnaHQo
KSk7CisgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVDYW1lcmEgIT09IHNjZW5lLmFjdGl2ZUNh
bWVyYSkgeworICAgICAgICAgICAgICAgIHNjZW5lLnNldFRyYW5zZm9ybU1hdHJpeCh0aGlzLmFj
dGl2ZUNhbWVyYS5nZXRWaWV3TWF0cml4KCksIHRoaXMuYWN0aXZlQ2FtZXJhLmdldFByb2plY3Rp
b25NYXRyaXgodHJ1ZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgY2FtZXJhID0gc2NlbmUuYWN0aXZlQ2FtZXJhOworICAgICAgICAgICAg
aWYgKGNhbWVyYSkgeworICAgICAgICAgICAgICAgIGVuZ2luZS5zZXRWaWV3cG9ydChjYW1lcmEu
dmlld3BvcnQsIHRoaXMuZ2V0UmVuZGVyV2lkdGgoKSwgdGhpcy5nZXRSZW5kZXJIZWlnaHQoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gUHJlcGFyZSByZW5kZXJpbmdN
YW5hZ2VyCisgICAgICAgIHRoaXMuX3JlbmRlcmluZ01hbmFnZXIucmVzZXQoKTsKKyAgICAgICAg
dmFyIGN1cnJlbnRSZW5kZXJMaXN0ID0gdGhpcy5yZW5kZXJMaXN0ID8gdGhpcy5yZW5kZXJMaXN0
IDogc2NlbmUuZ2V0QWN0aXZlTWVzaGVzKCkuZGF0YTsKKyAgICAgICAgdmFyIGN1cnJlbnRSZW5k
ZXJMaXN0TGVuZ3RoID0gdGhpcy5yZW5kZXJMaXN0ID8gdGhpcy5yZW5kZXJMaXN0Lmxlbmd0aCA6
IHNjZW5lLmdldEFjdGl2ZU1lc2hlcygpLmxlbmd0aDsKKyAgICAgICAgdmFyIHNjZW5lUmVuZGVy
SWQgPSBzY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICBmb3IgKHZhciBtZXNoSW5kZXggPSAw
OyBtZXNoSW5kZXggPCBjdXJyZW50UmVuZGVyTGlzdExlbmd0aDsgbWVzaEluZGV4KyspIHsKKyAg
ICAgICAgICAgIHZhciBtZXNoID0gY3VycmVudFJlbmRlckxpc3RbbWVzaEluZGV4XTsKKyAgICAg
ICAgICAgIGlmIChtZXNoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtZXNoLmlzUmVhZHkodGhp
cy5yZWZyZXNoUmF0ZSA9PT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFJl
ZnJlc2hDb3VudGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBtZXNoLl9wcmVBY3RpdmF0ZUZvckludGVybWVkaWF0
ZVJlbmRlcmluZyhzY2VuZVJlbmRlcklkKTsKKyAgICAgICAgICAgICAgICB2YXIgaXNNYXNrZWQg
PSB2b2lkIDA7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlbmRlckxpc3QgJiYgY2FtZXJh
KSB7CisgICAgICAgICAgICAgICAgICAgIGlzTWFza2VkID0gKChtZXNoLmxheWVyTWFzayAmIGNh
bWVyYS5sYXllck1hc2spID09PSAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlzTWFza2VkID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtZXNoLmlzRW5hYmxlZCgpICYmIG1lc2gu
aXNWaXNpYmxlICYmIG1lc2guc3ViTWVzaGVzICYmICFpc01hc2tlZCkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAobWVzaC5fYWN0aXZhdGUoc2NlbmVSZW5kZXJJZCwgdHJ1ZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbWVzaC5pc0FuSW5zdGFuY2UpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZXNoLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9vbmx5
Rm9ySW5zdGFuY2VzSW50ZXJtZWRpYXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtZXNoID0gbWVzaC5zb3VyY2VNZXNoOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRh
SW5mby5faXNBY3RpdmVJbnRlcm1lZGlhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgc3ViSW5kZXggPSAwOyBzdWJJbmRleCA8IG1lc2guc3ViTWVzaGVzLmxlbmd0
aDsgc3ViSW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJNZXNo
ID0gbWVzaC5zdWJNZXNoZXNbc3ViSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNjZW5lLl9hY3RpdmVJbmRpY2VzLmFkZENvdW50KHN1Yk1lc2guaW5kZXhDb3VudCwgZmFsc2Up
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZ01hbmFnZXIuZGlz
cGF0Y2goc3ViTWVzaCwgbWVzaCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZm9yICh2YXIgcGFydGljbGVJbmRleCA9IDA7IHBhcnRpY2xlSW5kZXggPCBz
Y2VuZS5wYXJ0aWNsZVN5c3RlbXMubGVuZ3RoOyBwYXJ0aWNsZUluZGV4KyspIHsKKyAgICAgICAg
ICAgIHZhciBwYXJ0aWNsZVN5c3RlbSA9IHNjZW5lLnBhcnRpY2xlU3lzdGVtc1twYXJ0aWNsZUlu
ZGV4XTsKKyAgICAgICAgICAgIHZhciBlbWl0dGVyID0gcGFydGljbGVTeXN0ZW0uZW1pdHRlcjsK
KyAgICAgICAgICAgIGlmICghcGFydGljbGVTeXN0ZW0uaXNTdGFydGVkKCkgfHwgIWVtaXR0ZXIg
fHwgIWVtaXR0ZXIucG9zaXRpb24gfHwgIWVtaXR0ZXIuaXNFbmFibGVkKCkpIHsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdXJyZW50
UmVuZGVyTGlzdC5pbmRleE9mKGVtaXR0ZXIpID49IDApIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9yZW5kZXJpbmdNYW5hZ2VyLmRpc3BhdGNoUGFydGljbGVzKHBhcnRpY2xlU3lzdGVtKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5pc0N1YmUpIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5yZW5kZXJUb1RhcmdldChmYWNlLCBjdXJyZW50UmVuZGVyTGlzdCwgdXNlQ2Ft
ZXJhUG9zdFByb2Nlc3MsIGR1bXBGb3JEZWJ1Zyk7CisgICAgICAgICAgICAgICAgc2NlbmUuaW5j
cmVtZW50UmVuZGVySWQoKTsKKyAgICAgICAgICAgICAgICBzY2VuZS5yZXNldENhY2hlZE1hdGVy
aWFsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLnJlbmRlclRvVGFyZ2V0KDAsIGN1cnJlbnRSZW5kZXJMaXN0LCB1c2VDYW1lcmFQ
b3N0UHJvY2VzcywgZHVtcEZvckRlYnVnKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uQWZ0
ZXJVbmJpbmRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgaWYgKHNj
ZW5lLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgLy8gRG8gbm90IGF2b2lkIHNldHRpbmcg
dW5pZm9ybXMgd2hlbiBtdWx0aXBsZSBzY2VuZXMgYXJlIGFjdGl2ZSBhcyBhbm90aGVyIGNhbWVy
YSBtYXkgaGF2ZSBvdmVyd3JpdGUgdGhlc2UKKyAgICAgICAgICAgIGlmIChzY2VuZS5nZXRFbmdp
bmUoKS5zY2VuZXMubGVuZ3RoID4gMSB8fCAodGhpcy5hY3RpdmVDYW1lcmEgJiYgdGhpcy5hY3Rp
dmVDYW1lcmEgIT09IHNjZW5lLmFjdGl2ZUNhbWVyYSkpIHsKKyAgICAgICAgICAgICAgICBzY2Vu
ZS5zZXRUcmFuc2Zvcm1NYXRyaXgoc2NlbmUuYWN0aXZlQ2FtZXJhLmdldFZpZXdNYXRyaXgoKSwg
c2NlbmUuYWN0aXZlQ2FtZXJhLmdldFByb2plY3Rpb25NYXRyaXgodHJ1ZSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZW5naW5lLnNldFZpZXdwb3J0KHNjZW5lLmFjdGl2ZUNhbWVyYS52
aWV3cG9ydCk7CisgICAgICAgIH0KKyAgICAgICAgc2NlbmUucmVzZXRDYWNoZWRNYXRlcmlhbCgp
OworICAgIH07CisgICAgUmVuZGVyVGFyZ2V0VGV4dHVyZS5wcm90b3R5cGUuX2Jlc3RSZWZsZWN0
aW9uUmVuZGVyVGFyZ2V0RGltZW5zaW9uID0gZnVuY3Rpb24gKHJlbmRlckRpbWVuc2lvbiwgc2Nh
bGUpIHsKKyAgICAgICAgdmFyIG1pbmltdW0gPSAxMjg7CisgICAgICAgIHZhciB4ID0gcmVuZGVy
RGltZW5zaW9uICogc2NhbGU7CisgICAgICAgIHZhciBjdXJ2ZWQgPSBfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siRW5naW5lIl0uTmVhcmVzdFBPVCh4ICsgKG1p
bmltdW0gKiBtaW5pbXVtIC8gKG1pbmltdW0gKyB4KSkpOworICAgICAgICAvLyBFbnN1cmUgd2Ug
ZG9uJ3QgZXhjZWVkIHRoZSByZW5kZXIgZGltZW5zaW9uICh3aGlsZSBzdGF5aW5nIFBPVCkKKyAg
ICAgICAgcmV0dXJuIE1hdGgubWluKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOV9fWyJFbmdpbmUiXS5GbG9vclBPVChyZW5kZXJEaW1lbnNpb24pLCBjdXJ2ZWQpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqIEBwYXJhbSBmYWNlSW5kZXgg
ZmFjZSBpbmRleCB0byBiaW5kIHRvIGlmIHRoaXMgaXMgYSBjdWJldGV4dHVyZQorICAgICAqLwor
ICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLl9iaW5kRnJhbWVCdWZmZXIgPSBmdW5j
dGlvbiAoZmFjZUluZGV4KSB7CisgICAgICAgIGlmIChmYWNlSW5kZXggPT09IHZvaWQgMCkgeyBm
YWNlSW5kZXggPSAwOyB9CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAg
ICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHZhciBlbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgaWYgKHRoaXMuX3Rl
eHR1cmUpIHsKKyAgICAgICAgICAgIGVuZ2luZS5iaW5kRnJhbWVidWZmZXIodGhpcy5fdGV4dHVy
ZSwgdGhpcy5pc0N1YmUgPyBmYWNlSW5kZXggOiB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZp
bmVkLCB0aGlzLmlnbm9yZUNhbWVyYVZpZXdwb3J0LCB0aGlzLmRlcHRoU3RlbmNpbFRleHR1cmUg
PyB0aGlzLmRlcHRoU3RlbmNpbFRleHR1cmUgOiB1bmRlZmluZWQpOworICAgICAgICB9CisgICAg
fTsKKyAgICBSZW5kZXJUYXJnZXRUZXh0dXJlLnByb3RvdHlwZS51bmJpbmRGcmFtZUJ1ZmZlciA9
IGZ1bmN0aW9uIChlbmdpbmUsIGZhY2VJbmRleCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlz
OworICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBlbmdpbmUudW5CaW5kRnJhbWVidWZmZXIodGhpcy5fdGV4dHVyZSwg
dGhpcy5pc0N1YmUsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLm9uQWZ0ZXJSZW5k
ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhmYWNlSW5kZXgpOworICAgICAgICB9KTsKKyAg
ICB9OworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLnJlbmRlclRvVGFyZ2V0ID0g
ZnVuY3Rpb24gKGZhY2VJbmRleCwgY3VycmVudFJlbmRlckxpc3QsIHVzZUNhbWVyYVBvc3RQcm9j
ZXNzLCBkdW1wRm9yRGVidWcpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgp
OworICAgICAgICBpZiAoIXNjZW5lKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAoIXRo
aXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAv
LyBCaW5kCisgICAgICAgIGlmICh0aGlzLl9wb3N0UHJvY2Vzc01hbmFnZXIpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3Bvc3RQcm9jZXNzTWFuYWdlci5fcHJlcGFyZUZyYW1lKHRoaXMuX3RleHR1cmUs
IHRoaXMuX3Bvc3RQcm9jZXNzZXMpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCF1c2VD
YW1lcmFQb3N0UHJvY2VzcyB8fCAhc2NlbmUucG9zdFByb2Nlc3NNYW5hZ2VyLl9wcmVwYXJlRnJh
bWUodGhpcy5fdGV4dHVyZSkpIHsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRGcmFtZUJ1ZmZlcihm
YWNlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIHRoaXMub25CZWZvcmVSZW5kZXJPYnNlcnZh
YmxlLm5vdGlmeU9ic2VydmVycyhmYWNlSW5kZXgpOworICAgICAgICAvLyBDbGVhcgorICAgICAg
ICBpZiAodGhpcy5vbkNsZWFyT2JzZXJ2YWJsZS5oYXNPYnNlcnZlcnMoKSkgeworICAgICAgICAg
ICAgdGhpcy5vbkNsZWFyT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoZW5naW5lKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVuZ2luZS5jbGVhcih0aGlzLmNsZWFy
Q29sb3IgfHwgc2NlbmUuY2xlYXJDb2xvciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCF0aGlzLl9kb05vdENoYW5nZUFzcGVjdFJhdGlvKSB7CisgICAgICAgICAg
ICBzY2VuZS51cGRhdGVUcmFuc2Zvcm1NYXRyaXgodHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQmVmb3JlIENhbWVyYSBEcmF3CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBzY2Vu
ZS5fYmVmb3JlUmVuZGVyVGFyZ2V0RHJhd1N0YWdlOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewor
ICAgICAgICAgICAgdmFyIHN0ZXAgPSBfYVtfaV07CisgICAgICAgICAgICBzdGVwLmFjdGlvbih0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZW5kZXIKKyAgICAgICAgdGhpcy5fcmVuZGVy
aW5nTWFuYWdlci5yZW5kZXIodGhpcy5jdXN0b21SZW5kZXJGdW5jdGlvbiwgY3VycmVudFJlbmRl
ckxpc3QsIHRoaXMucmVuZGVyUGFydGljbGVzLCB0aGlzLnJlbmRlclNwcml0ZXMpOworICAgICAg
ICAvLyBBZnRlciBDYW1lcmEgRHJhdworICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gc2Nl
bmUuX2FmdGVyUmVuZGVyVGFyZ2V0RHJhd1N0YWdlOyBfYiA8IF9jLmxlbmd0aDsgX2IrKykgewor
ICAgICAgICAgICAgdmFyIHN0ZXAgPSBfY1tfYl07CisgICAgICAgICAgICBzdGVwLmFjdGlvbih0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcG9zdFByb2Nlc3NNYW5hZ2VyKSB7
CisgICAgICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc01hbmFnZXIuX2ZpbmFsaXplRnJhbWUoZmFs
c2UsIHRoaXMuX3RleHR1cmUsIGZhY2VJbmRleCwgdGhpcy5fcG9zdFByb2Nlc3NlcywgdGhpcy5p
Z25vcmVDYW1lcmFWaWV3cG9ydCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodXNlQ2Ft
ZXJhUG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgIHNjZW5lLnBvc3RQcm9jZXNzTWFuYWdlci5f
ZmluYWxpemVGcmFtZShmYWxzZSwgdGhpcy5fdGV4dHVyZSwgZmFjZUluZGV4KTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXRoaXMuX2RvTm90Q2hhbmdlQXNwZWN0UmF0aW8pIHsKKyAgICAgICAg
ICAgIHNjZW5lLnVwZGF0ZVRyYW5zZm9ybU1hdHJpeCh0cnVlKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBEdW1wID8KKyAgICAgICAgaWYgKGR1bXBGb3JEZWJ1ZykgeworICAgICAgICAgICAgX01p
c2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5EdW1wRnJhbWVi
dWZmZXIodGhpcy5nZXRSZW5kZXJXaWR0aCgpLCB0aGlzLmdldFJlbmRlckhlaWdodCgpLCBlbmdp
bmUpOworICAgICAgICB9CisgICAgICAgIC8vIFVuYmluZAorICAgICAgICBpZiAoIXRoaXMuaXND
dWJlIHx8IGZhY2VJbmRleCA9PT0gNSkgeworICAgICAgICAgICAgaWYgKHRoaXMuaXNDdWJlKSB7
CisgICAgICAgICAgICAgICAgaWYgKGZhY2VJbmRleCA9PT0gNSkgeworICAgICAgICAgICAgICAg
ICAgICBlbmdpbmUuZ2VuZXJhdGVNaXBNYXBzRm9yQ3ViZW1hcCh0aGlzLl90ZXh0dXJlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnVuYmluZEZy
YW1lQnVmZmVyKGVuZ2luZSwgZmFjZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHRoaXMub25BZnRlclJlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJz
KGZhY2VJbmRleCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIE92ZXJyaWRl
cyB0aGUgZGVmYXVsdCBzb3J0IGZ1bmN0aW9uIGFwcGxpZWQgaW4gdGhlIHJlbmRlcmdpbmcgZ3Jv
dXAgdG8gcHJlcGFyZSB0aGUgbWVzaGVzLgorICAgICAqIFRoaXMgYWxsb3dlZCBjb250cm9sIGZv
ciBmcm9udCB0byBiYWNrIHJlbmRlcmluZyBvciByZXZlcnNseSBkZXBlbmRpbmcgb2YgdGhlIHNw
ZWNpYWwgbmVlZHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVuZGVyaW5nR3JvdXBJZCBUaGUg
cmVuZGVyaW5nIGdyb3VwIGlkIGNvcnJlc3BvbmRpbmcgdG8gaXRzIGluZGV4CisgICAgICogQHBh
cmFtIG9wYXF1ZVNvcnRDb21wYXJlRm4gVGhlIG9wYXF1ZSBxdWV1ZSBjb21wYXJpc29uIGZ1bmN0
aW9uIHVzZSB0byBzb3J0LgorICAgICAqIEBwYXJhbSBhbHBoYVRlc3RTb3J0Q29tcGFyZUZuIFRo
ZSBhbHBoYSB0ZXN0IHF1ZXVlIGNvbXBhcmlzb24gZnVuY3Rpb24gdXNlIHRvIHNvcnQuCisgICAg
ICogQHBhcmFtIHRyYW5zcGFyZW50U29ydENvbXBhcmVGbiBUaGUgdHJhbnNwYXJlbnQgcXVldWUg
Y29tcGFyaXNvbiBmdW5jdGlvbiB1c2UgdG8gc29ydC4KKyAgICAgKi8KKyAgICBSZW5kZXJUYXJn
ZXRUZXh0dXJlLnByb3RvdHlwZS5zZXRSZW5kZXJpbmdPcmRlciA9IGZ1bmN0aW9uIChyZW5kZXJp
bmdHcm91cElkLCBvcGFxdWVTb3J0Q29tcGFyZUZuLCBhbHBoYVRlc3RTb3J0Q29tcGFyZUZuLCB0
cmFuc3BhcmVudFNvcnRDb21wYXJlRm4pIHsKKyAgICAgICAgaWYgKG9wYXF1ZVNvcnRDb21wYXJl
Rm4gPT09IHZvaWQgMCkgeyBvcGFxdWVTb3J0Q29tcGFyZUZuID0gbnVsbDsgfQorICAgICAgICBp
ZiAoYWxwaGFUZXN0U29ydENvbXBhcmVGbiA9PT0gdm9pZCAwKSB7IGFscGhhVGVzdFNvcnRDb21w
YXJlRm4gPSBudWxsOyB9CisgICAgICAgIGlmICh0cmFuc3BhcmVudFNvcnRDb21wYXJlRm4gPT09
IHZvaWQgMCkgeyB0cmFuc3BhcmVudFNvcnRDb21wYXJlRm4gPSBudWxsOyB9CisgICAgICAgIHRo
aXMuX3JlbmRlcmluZ01hbmFnZXIuc2V0UmVuZGVyaW5nT3JkZXIocmVuZGVyaW5nR3JvdXBJZCwg
b3BhcXVlU29ydENvbXBhcmVGbiwgYWxwaGFUZXN0U29ydENvbXBhcmVGbiwgdHJhbnNwYXJlbnRT
b3J0Q29tcGFyZUZuKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB3aGV0aGVy
IG9yIG5vdCB0aGUgc3RlbmNpbCBhbmQgZGVwdGggYnVmZmVyIGFyZSBjbGVhcmVkIGJldHdlZW4g
dHdvIHJlbmRlcmluZyBncm91cHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVuZGVyaW5nR3Jv
dXBJZCBUaGUgcmVuZGVyaW5nIGdyb3VwIGlkIGNvcnJlc3BvbmRpbmcgdG8gaXRzIGluZGV4Cisg
ICAgICogQHBhcmFtIGF1dG9DbGVhckRlcHRoU3RlbmNpbCBBdXRvbWF0aWNhbGx5IGNsZWFycyBk
ZXB0aCBhbmQgc3RlbmNpbCBiZXR3ZWVuIGdyb3VwcyBpZiB0cnVlLgorICAgICAqLworICAgIFJl
bmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLnNldFJlbmRlcmluZ0F1dG9DbGVhckRlcHRoU3Rl
bmNpbCA9IGZ1bmN0aW9uIChyZW5kZXJpbmdHcm91cElkLCBhdXRvQ2xlYXJEZXB0aFN0ZW5jaWwp
IHsKKyAgICAgICAgdGhpcy5fcmVuZGVyaW5nTWFuYWdlci5zZXRSZW5kZXJpbmdBdXRvQ2xlYXJE
ZXB0aFN0ZW5jaWwocmVuZGVyaW5nR3JvdXBJZCwgYXV0b0NsZWFyRGVwdGhTdGVuY2lsKTsKKyAg
ICAgICAgdGhpcy5fcmVuZGVyaW5nTWFuYWdlci5fdXNlU2NlbmVBdXRvQ2xlYXJTZXR1cCA9IGZh
bHNlOworICAgIH07CisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSB0ZXh0dXJlLgorICAgICAq
IEByZXR1cm5zIHRoZSBjbG9uZWQgdGV4dHVyZQorICAgICAqLworICAgIFJlbmRlclRhcmdldFRl
eHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgdGV4dHVy
ZVNpemUgPSB0aGlzLmdldFNpemUoKTsKKyAgICAgICAgdmFyIG5ld1RleHR1cmUgPSBuZXcgUmVu
ZGVyVGFyZ2V0VGV4dHVyZSh0aGlzLm5hbWUsIHRleHR1cmVTaXplLCB0aGlzLmdldFNjZW5lKCks
IHRoaXMuX3JlbmRlclRhcmdldE9wdGlvbnMuZ2VuZXJhdGVNaXBNYXBzLCB0aGlzLl9kb05vdENo
YW5nZUFzcGVjdFJhdGlvLCB0aGlzLl9yZW5kZXJUYXJnZXRPcHRpb25zLnR5cGUsIHRoaXMuaXND
dWJlLCB0aGlzLl9yZW5kZXJUYXJnZXRPcHRpb25zLnNhbXBsaW5nTW9kZSwgdGhpcy5fcmVuZGVy
VGFyZ2V0T3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyLCB0aGlzLl9yZW5kZXJUYXJnZXRPcHRp
b25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIC8vIEJhc2UgdGV4dHVyZQorICAg
ICAgICBuZXdUZXh0dXJlLmhhc0FscGhhID0gdGhpcy5oYXNBbHBoYTsKKyAgICAgICAgbmV3VGV4
dHVyZS5sZXZlbCA9IHRoaXMubGV2ZWw7CisgICAgICAgIC8vIFJlbmRlclRhcmdldCBUZXh0dXJl
CisgICAgICAgIG5ld1RleHR1cmUuY29vcmRpbmF0ZXNNb2RlID0gdGhpcy5jb29yZGluYXRlc01v
ZGU7CisgICAgICAgIGlmICh0aGlzLnJlbmRlckxpc3QpIHsKKyAgICAgICAgICAgIG5ld1RleHR1
cmUucmVuZGVyTGlzdCA9IHRoaXMucmVuZGVyTGlzdC5zbGljZSgwKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbmV3VGV4dHVyZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6
ZSB0aGUgdGV4dHVyZSB0byBhIEpTT04gcmVwcmVzZW50YXRpb24gd2UgY2FuIGVhc2lseSB1c2Ug
aW4gdGhlIHJlc2VwZWN0aXZlIFBhcnNlIGZ1bmN0aW9uLgorICAgICAqIEByZXR1cm5zIFRoZSBK
U09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0dXJlCisgICAgICovCisgICAgUmVuZGVyVGFy
Z2V0VGV4dHVyZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAoIXRoaXMubmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSBfc3VwZXIucHJvdG90eXBlLnNlcmlhbGl6
ZS5jYWxsKHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJlbmRlclRhcmdldFNp
emUgPSB0aGlzLmdldFJlbmRlclNpemUoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5y
ZW5kZXJMaXN0ID0gW107CisgICAgICAgIGlmICh0aGlzLnJlbmRlckxpc3QpIHsKKyAgICAgICAg
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnJlbmRlckxpc3QubGVuZ3RoOyBp
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5yZW5kZXJMaXN0
LnB1c2godGhpcy5yZW5kZXJMaXN0W2luZGV4XS5pZCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiAgVGhpcyB3aWxsIHJlbW92ZSB0aGUgYXR0YWNoZWQgZnJhbWVidWZmZXIgb2JqZWN0
cy4gVGhlIHRleHR1cmUgd2lsbCBub3QgYmUgYWJsZSB0byBiZSB1c2VkIGFzIHJlbmRlciB0YXJn
ZXQgYW55bW9yZQorICAgICAqLworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLmRp
c3Bvc2VGcmFtZWJ1ZmZlck9iamVjdHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBvYmpC
dWZmZXIgPSB0aGlzLmdldEludGVybmFsVGV4dHVyZSgpOworICAgICAgICB2YXIgc2NlbmUgPSB0
aGlzLmdldFNjZW5lKCk7CisgICAgICAgIGlmIChvYmpCdWZmZXIgJiYgc2NlbmUpIHsKKyAgICAg
ICAgICAgIHNjZW5lLmdldEVuZ2luZSgpLl9yZWxlYXNlRnJhbWVidWZmZXJPYmplY3RzKG9iakJ1
ZmZlcik7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2UgdGhlIHRl
eHR1cmUgYW5kIHJlbGVhc2UgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICAgICAqLworICAg
IFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMub25SZXNpemVPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25D
bGVhck9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2
YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQWZ0ZXJVbmJpbmRPYnNlcnZhYmxlLmNsZWFy
KCk7CisgICAgICAgIHRoaXMub25CZWZvcmVCaW5kT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAg
ICB0aGlzLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICBpZiAodGhp
cy5fcG9zdFByb2Nlc3NNYW5hZ2VyKSB7CisgICAgICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc01h
bmFnZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3NNYW5hZ2VyID0g
bnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmNsZWFyUG9zdFByb2Nlc3Nlcyh0cnVlKTsK
KyAgICAgICAgaWYgKHRoaXMuX3Jlc2l6ZU9ic2VydmVyKSB7CisgICAgICAgICAgICB0aGlzLmdl
dFNjZW5lKCkuZ2V0RW5naW5lKCkub25SZXNpemVPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9yZXNp
emVPYnNlcnZlcik7CisgICAgICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG51bGw7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5yZW5kZXJMaXN0ID0gbnVsbDsKKyAgICAgICAgLy8gUmVt
b3ZlIGZyb20gY3VzdG9tIHJlbmRlciB0YXJnZXRzCisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMu
Z2V0U2NlbmUoKTsKKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHZhciBpbmRleCA9IHNjZW5lLmN1c3RvbVJlbmRlclRhcmdldHMu
aW5kZXhPZih0aGlzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IDApIHsKKyAgICAgICAgICAgIHNj
ZW5lLmN1c3RvbVJlbmRlclRhcmdldHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAg
ICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gc2NlbmUuY2FtZXJhczsgX2kgPCBfYS5sZW5ndGg7
IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSBfYVtfaV07CisgICAgICAgICAgICBp
bmRleCA9IGNhbWVyYS5jdXN0b21SZW5kZXJUYXJnZXRzLmluZGV4T2YodGhpcyk7CisgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAgICAgICAgICAgIGNhbWVyYS5jdXN0b21SZW5k
ZXJUYXJnZXRzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuZGVwdGhTdGVuY2lsVGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5n
ZXRTY2VuZSgpLmdldEVuZ2luZSgpLl9yZWxlYXNlVGV4dHVyZSh0aGlzLmRlcHRoU3RlbmNpbFRl
eHR1cmUpOworICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxs
KHRoaXMpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBSZW5kZXJUYXJnZXRUZXh0
dXJlLnByb3RvdHlwZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMu
cmVmcmVzaFJhdGUgPT09IFJlbmRlclRhcmdldFRleHR1cmUuUkVGUkVTSFJBVEVfUkVOREVSX09O
Q0UpIHsKKyAgICAgICAgICAgIHRoaXMucmVmcmVzaFJhdGUgPSBSZW5kZXJUYXJnZXRUZXh0dXJl
LlJFRlJFU0hSQVRFX1JFTkRFUl9PTkNFOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9w
b3N0UHJvY2Vzc01hbmFnZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzTWFuYWdl
ci5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbGVhciB0
aGUgaW5mbyByZWxhdGVkIHRvIHJlbmRlcmluZyBncm91cHMgcHJldmVudGluZyByZXRlbnRpb24g
cG9pbnQgaW4gbWF0ZXJpYWwgZGlzcG9zZS4KKyAgICAgKi8KKyAgICBSZW5kZXJUYXJnZXRUZXh0
dXJlLnByb3RvdHlwZS5mcmVlUmVuZGVyaW5nR3JvdXBzID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAodGhpcy5fcmVuZGVyaW5nTWFuYWdlcikgeworICAgICAgICAgICAgdGhpcy5fcmVuZGVy
aW5nTWFuYWdlci5mcmVlUmVuZGVyaW5nR3JvdXBzKCk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldHMgdGhlIG51bWJlciBvZiB2aWV3cyB0aGUgY29ycmVzcG9uZGluZyB0
byB0aGUgdGV4dHVyZSAoZWcuIGEgTXVsdGl2aWV3UmVuZGVyVGFyZ2V0IHdpbGwgaGF2ZSA+IDEp
CisgICAgICogQHJldHVybnMgdGhlIHZpZXcgY291bnQKKyAgICAgKi8KKyAgICBSZW5kZXJUYXJn
ZXRUZXh0dXJlLnByb3RvdHlwZS5nZXRWaWV3Q291bnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiAxOworICAgIH07CisgICAgLyoqCisgICAgICogVGhlIHRleHR1cmUgd2lsbCBvbmx5
IGJlIHJlbmRlcmVkIG9uY2Ugd2hpY2ggY2FuIGJlIHVzZWZ1bCB0byBpbXByb3ZlIHBlcmZvcm1h
bmNlIGlmIGV2ZXJ5dGhpbmcgaW4geW91ciByZW5kZXIgaXMgc3RhdGljIGZvciBpbnN0YW5jZS4K
KyAgICAgKi8KKyAgICBSZW5kZXJUYXJnZXRUZXh0dXJlLlJFRlJFU0hSQVRFX1JFTkRFUl9PTkNF
ID0gMDsKKyAgICAvKioKKyAgICAgKiBUaGUgdGV4dHVyZSB3aWxsIG9ubHkgYmUgcmVuZGVyZWQg
cmVuZGVyZWQgZXZlcnkgZnJhbWUgYW5kIGlzIHJlY29tZW5kZWQgZm9yIGR5bmFtaWMgY29udGVu
dHMuCisgICAgICovCisgICAgUmVuZGVyVGFyZ2V0VGV4dHVyZS5SRUZSRVNIUkFURV9SRU5ERVJf
T05FVkVSWUZSQU1FID0gMTsKKyAgICAvKioKKyAgICAgKiBUaGUgdGV4dHVyZSB3aWxsIGJlIHJl
bmRlcmVkIGV2ZXJ5IDIgZnJhbWVzIHdoaWNoIGNvdWxkIGJlIGVub3VnaCBpZiB5b3VyIGR5bmFt
aWMgb2JqZWN0cyBhcmUgbm90CisgICAgICogdGhlIGNlbnRyYWwgcG9pbnQgb2YgeW91ciBlZmZl
Y3QgYW5kIGNhbiBzYXZlIGEgbG90IG9mIHBlcmZvcm1hbmNlcy4KKyAgICAgKi8KKyAgICBSZW5k
ZXJUYXJnZXRUZXh0dXJlLlJFRlJFU0hSQVRFX1JFTkRFUl9PTkVWRVJZVFdPRlJBTUVTID0gMjsK
KyAgICByZXR1cm4gUmVuZGVyVGFyZ2V0VGV4dHVyZTsKK30oX01hdGVyaWFsc19UZXh0dXJlc190
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXSkpOworCitfTWF0
ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGV4
dHVyZSJdLl9DcmVhdGVSZW5kZXJUYXJnZXRUZXh0dXJlID0gZnVuY3Rpb24gKG5hbWUsIHJlbmRl
clRhcmdldFNpemUsIHNjZW5lLCBnZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICByZXR1cm4gbmV3IFJl
bmRlclRhcmdldFRleHR1cmUobmFtZSwgcmVuZGVyVGFyZ2V0U2l6ZSwgc2NlbmUsIGdlbmVyYXRl
TWlwTWFwcyk7Cit9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVy
ZXMvdGV4dHVyZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBUZXh0dXJlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRleHR1
cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRleHR1cmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVj
b3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNl
cnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfYmFzZVRleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01hdGVyaWFscy9UZXh0dXJlcy9iYXNlVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMv
YmFzZVRleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3R5cGVT
dG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2RldlRvb2xzICovICIuL01pc2MvZGV2VG9vbHMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190aW1pbmdUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy90
aW1pbmdUb29scyAqLyAiLi9NaXNjL3RpbWluZ1Rvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfaW5zdGFudGlhdGlvblRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2luc3RhbnRpYXRpb25U
b29scyAqLyAiLi9NaXNjL2luc3RhbnRpYXRpb25Ub29scy50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRoc19tYXRoX3BsYW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5wbGFuZSAqLyAiLi9N
YXRocy9tYXRoLnBsYW5lLnRzIik7CisKKworCisKKworCisKKworCisKKworLyoqCisgKiBUaGlz
IHJlcHJlc2VudHMgYSB0ZXh0dXJlIGluIGJhYnlsb24uIEl0IGNhbiBiZSBlYXNpbHkgbG9hZGVk
IGZyb20gYSBuZXR3b3JrLCBiYXNlNjQgb3IgaHRtbCBpbnB1dC4KKyAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvbWF0ZXJpYWxzI3RleHR1cmUKKyAqLwordmFyIFRl
eHR1cmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVGV4dHVyZSwgX3N1cGVyKTsK
KyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgdGV4dHVyZS4KKyAgICAgKiBUaGlz
IHJlcHJlc2VudHMgYSB0ZXh0dXJlIGluIGJhYnlsb24uIEl0IGNhbiBiZSBlYXNpbHkgbG9hZGVk
IGZyb20gYSBuZXR3b3JrLCBiYXNlNjQgb3IgaHRtbCBpbnB1dC4KKyAgICAgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL21hdGVyaWFscyN0ZXh0dXJlCisgICAgICog
QHBhcmFtIHVybCBkZWZpbmUgdGhlIHVybCBvZiB0aGUgcGljdHVyZSB0byBsb2FkIGFzIGEgdGV4
dHVyZQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmUgdGhlIHNjZW5lIG9yIGVuZ2luZSB0aGUg
dGV4dHVyZSB3aWxsIGJlbG9uZyB0bworICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmUgaWYg
dGhlIHRleHR1cmUgd2lsbCByZXF1aXJlIG1pcCBtYXBzIG9yIG5vdAorICAgICAqIEBwYXJhbSBp
bnZlcnRZIGRlZmluZSBpZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSBpbnZlcnRlZCBvbiB0aGUg
eSBheGlzIGR1cmluZyBsb2FkaW5nCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBkZWZpbmUg
dGhlIHNhbXBsaW5nIG1vZGUgd2Ugd2FudCBmb3IgdGhlIHRleHR1cmUgd2hpbGUgZmVjdGNoaW5n
IGZyb20gaXQgKFRleHR1cmUuTkVBUkVTVF9TQU1QTElOR01PREUuLi4pCisgICAgICogQHBhcmFt
IG9uTG9hZCBkZWZpbmUgYSBjYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUgdGV4dHVyZSBoYXMg
YmVlbiBsb2FkZWQKKyAgICAgKiBAcGFyYW0gb25FcnJvciBkZWZpbmUgYSBjYWxsYmFjayB0cmln
Z2VyZWQgd2hlbiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIGxvYWRpbmcgc2Vzc2lvbgor
ICAgICAqIEBwYXJhbSBidWZmZXIgZGVmaW5lIHRoZSBidWZmZXIgdG8gbG9hZCB0aGUgdGV4dHVy
ZSBmcm9tIGluIGNhc2UgdGhlIHRleHR1cmUgaXMgbG9hZGVkIGZyb20gYSBidWZmZXIgcmVwcmVz
ZW50YXRpb24KKyAgICAgKiBAcGFyYW0gZGVsZXRlQnVmZmVyIGRlZmluZSBpZiB0aGUgYnVmZmVy
IHdlIGFyZSBsb2FkaW5nIHRoZSB0ZXh0dXJlIGZyb20gc2hvdWxkIGJlIGRlbGV0ZWQgYWZ0ZXIg
bG9hZAorICAgICAqIEBwYXJhbSBmb3JtYXQgZGVmaW5lIHRoZSBmb3JtYXQgb2YgdGhlIHRleHR1
cmUgd2UgYXJlIHRyeWluZyB0byBsb2FkIChFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBLi4uKQor
ICAgICAqLworICAgIGZ1bmN0aW9uIFRleHR1cmUodXJsLCBzY2VuZU9yRW5naW5lLCBub01pcG1h
cCwgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlLCBvbkxvYWQsIG9uRXJyb3IsIGJ1ZmZlciwgZGVsZXRl
QnVmZmVyLCBmb3JtYXQpIHsKKyAgICAgICAgaWYgKG5vTWlwbWFwID09PSB2b2lkIDApIHsgbm9N
aXBtYXAgPSBmYWxzZTsgfQorICAgICAgICBpZiAoaW52ZXJ0WSA9PT0gdm9pZCAwKSB7IGludmVy
dFkgPSB0cnVlOyB9CisgICAgICAgIGlmIChzYW1wbGluZ01vZGUgPT09IHZvaWQgMCkgeyBzYW1w
bGluZ01vZGUgPSBUZXh0dXJlLlRSSUxJTkVBUl9TQU1QTElOR01PREU7IH0KKyAgICAgICAgaWYg
KG9uTG9hZCA9PT0gdm9pZCAwKSB7IG9uTG9hZCA9IG51bGw7IH0KKyAgICAgICAgaWYgKG9uRXJy
b3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbnVsbDsgfQorICAgICAgICBpZiAoYnVmZmVyID09
PSB2b2lkIDApIHsgYnVmZmVyID0gbnVsbDsgfQorICAgICAgICBpZiAoZGVsZXRlQnVmZmVyID09
PSB2b2lkIDApIHsgZGVsZXRlQnVmZmVyID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0g
X3N1cGVyLmNhbGwodGhpcywgKHNjZW5lT3JFbmdpbmUgJiYgc2NlbmVPckVuZ2luZS5nZXRDbGFz
c05hbWUoKSA9PT0gIlNjZW5lIikgPyBzY2VuZU9yRW5naW5lIDogbnVsbCkgfHwgdGhpczsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0aGUgdXJsIG9mIHRoZSB0ZXh0dXJlLgorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMudXJsID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERlZmluZSBhbiBvZmZzZXQgb24gdGhlIHRleHR1cmUgdG8gb2Zmc2V0IHRoZSB1IGNvb3Jk
aW5hdGVzIG9mIHRoZSBVVnMKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL21vcmVfbWF0ZXJpYWxzI29mZnNldHRpbmcKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLnVPZmZzZXQgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGFuIG9m
ZnNldCBvbiB0aGUgdGV4dHVyZSB0byBvZmZzZXQgdGhlIHYgY29vcmRpbmF0ZXMgb2YgdGhlIFVW
cworICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vbW9yZV9t
YXRlcmlhbHMjb2Zmc2V0dGluZworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudk9mZnNldCA9
IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgYW4gb2Zmc2V0IG9uIHRoZSB0ZXh0
dXJlIHRvIHNjYWxlIHRoZSB1IGNvb3JkaW5hdGVzIG9mIHRoZSBVVnMKKyAgICAgICAgICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL21vcmVfbWF0ZXJpYWxzI3RpbGluZwor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudVNjYWxlID0gMS4wOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lIGFuIG9mZnNldCBvbiB0aGUgdGV4dHVyZSB0byBzY2FsZSB0aGUgdiBj
b29yZGluYXRlcyBvZiB0aGUgVVZzCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9tb3JlX21hdGVyaWFscyN0aWxpbmcKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLnZTY2FsZSA9IDEuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSBhbiBv
ZmZzZXQgb24gdGhlIHRleHR1cmUgdG8gcm90YXRlIGFyb3VuZCB0aGUgdSBjb29yZGluYXRlcyBv
ZiB0aGUgVVZzCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9tb3JlX21hdGVyaWFscworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudUFuZyA9IDA7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgYW4gb2Zmc2V0IG9uIHRoZSB0ZXh0dXJlIHRv
IHJvdGF0ZSBhcm91bmQgdGhlIHYgY29vcmRpbmF0ZXMgb2YgdGhlIFVWcworICAgICAgICAgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vbW9yZV9tYXRlcmlhbHMKKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLnZBbmcgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICog
RGVmaW5lIGFuIG9mZnNldCBvbiB0aGUgdGV4dHVyZSB0byByb3RhdGUgYXJvdW5kIHRoZSB3IGNv
b3JkaW5hdGVzIG9mIHRoZSBVVnMgKGluIGNhc2Ugb2YgM2QgdGV4dHVyZSkKKyAgICAgICAgICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL21vcmVfbWF0ZXJpYWxzCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy53QW5nID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZXMgdGhlIGNlbnRlciBvZiByb3RhdGlvbiAoVSkKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLnVSb3RhdGlvbkNlbnRlciA9IDAuNTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZXMgdGhlIGNlbnRlciBvZiByb3RhdGlvbiAoVikKKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLnZSb3RhdGlvbkNlbnRlciA9IDAuNTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZXMgdGhlIGNlbnRlciBvZiByb3RhdGlvbiAoVykKKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LndSb3RhdGlvbkNlbnRlciA9IDAuNTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExpc3Qgb2Yg
aW5zcGVjdGFibGUgY3VzdG9tIHByb3BlcnRpZXMgKHVzZWQgYnkgdGhlIEluc3BlY3RvcikKKyAg
ICAgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9kZWJ1Z19sYXll
ciNleHRlbnNpYmlsaXR5CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5pbnNwZWN0YWJsZUN1
c3RvbVByb3BlcnRpZXMgPSBudWxsOworICAgICAgICBfdGhpcy5fbm9NaXBtYXAgPSBmYWxzZTsK
KyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2ludmVydFkgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuX3Jvd0dlbmVyYXRpb25NYXRyaXggPSBudWxsOworICAgICAgICBfdGhp
cy5fY2FjaGVkVGV4dHVyZU1hdHJpeCA9IG51bGw7CisgICAgICAgIF90aGlzLl9wcm9qZWN0aW9u
TW9kZU1hdHJpeCA9IG51bGw7CisgICAgICAgIF90aGlzLl90MCA9IG51bGw7CisgICAgICAgIF90
aGlzLl90MSA9IG51bGw7CisgICAgICAgIF90aGlzLl90MiA9IG51bGw7CisgICAgICAgIF90aGlz
Ll9jYWNoZWRVT2Zmc2V0ID0gLTE7CisgICAgICAgIF90aGlzLl9jYWNoZWRWT2Zmc2V0ID0gLTE7
CisgICAgICAgIF90aGlzLl9jYWNoZWRVU2NhbGUgPSAwOworICAgICAgICBfdGhpcy5fY2FjaGVk
VlNjYWxlID0gMDsKKyAgICAgICAgX3RoaXMuX2NhY2hlZFVBbmcgPSAtMTsKKyAgICAgICAgX3Ro
aXMuX2NhY2hlZFZBbmcgPSAtMTsKKyAgICAgICAgX3RoaXMuX2NhY2hlZFdBbmcgPSAtMTsKKyAg
ICAgICAgX3RoaXMuX2NhY2hlZFByb2plY3Rpb25NYXRyaXhJZCA9IC0xOworICAgICAgICBfdGhp
cy5fY2FjaGVkQ29vcmRpbmF0ZXNNb2RlID0gLTE7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisg
ICAgICAgIF90aGlzLl9pbml0aWFsU2FtcGxpbmdNb2RlID0gVGV4dHVyZS5CSUxJTkVBUl9TQU1Q
TElOR01PREU7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9idWZmZXIg
PSBudWxsOworICAgICAgICBfdGhpcy5fZGVsZXRlQnVmZmVyID0gZmFsc2U7CisgICAgICAgIF90
aGlzLl9mb3JtYXQgPSBudWxsOworICAgICAgICBfdGhpcy5fZGVsYXllZE9uTG9hZCA9IG51bGw7
CisgICAgICAgIF90aGlzLl9kZWxheWVkT25FcnJvciA9IG51bGw7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBPYnNlcnZhYmxlIHRyaWdnZXJlZCBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBiZWVuIGxv
YWRlZC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uTG9hZE9ic2VydmFibGUgPSBuZXcg
X01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxl
Il0oKTsKKyAgICAgICAgX3RoaXMuX2lzQmxvY2tpbmcgPSB0cnVlOworICAgICAgICBfdGhpcy5u
YW1lID0gdXJsIHx8ICIiOworICAgICAgICBfdGhpcy51cmwgPSB1cmw7CisgICAgICAgIF90aGlz
Ll9ub01pcG1hcCA9IG5vTWlwbWFwOworICAgICAgICBfdGhpcy5faW52ZXJ0WSA9IGludmVydFk7
CisgICAgICAgIF90aGlzLl9pbml0aWFsU2FtcGxpbmdNb2RlID0gc2FtcGxpbmdNb2RlOworICAg
ICAgICBfdGhpcy5fYnVmZmVyID0gYnVmZmVyOworICAgICAgICBfdGhpcy5fZGVsZXRlQnVmZmVy
ID0gZGVsZXRlQnVmZmVyOworICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBfdGhp
cy5fZm9ybWF0ID0gZm9ybWF0OworICAgICAgICB9CisgICAgICAgIHZhciBzY2VuZSA9IF90aGlz
LmdldFNjZW5lKCk7CisgICAgICAgIHZhciBlbmdpbmUgPSAoc2NlbmVPckVuZ2luZSAmJiBzY2Vu
ZU9yRW5naW5lLmdldENhcHMpID8gc2NlbmVPckVuZ2luZSA6IChzY2VuZSA/IHNjZW5lLmdldEVu
Z2luZSgpIDogbnVsbCk7CisgICAgICAgIGlmICghZW5naW5lKSB7CisgICAgICAgICAgICByZXR1
cm4gX3RoaXM7CisgICAgICAgIH0KKyAgICAgICAgZW5naW5lLm9uQmVmb3JlVGV4dHVyZUluaXRP
YnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhfdGhpcyk7CisgICAgICAgIHZhciBsb2FkID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKF90aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAg
ICAgICAgaWYgKF90aGlzLl90ZXh0dXJlLl9pbnZlcnRWU2NhbGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgX3RoaXMudlNjYWxlICo9IC0xOworICAgICAgICAgICAgICAgICAgICBfdGhpcy52T2Zm
c2V0ICs9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0
ZXh1dHJlIHRvIG1hdGNoIGludGVybmFsIHRleHR1cmUncyB3cmFwcGluZworICAgICAgICAgICAg
ICAgIGlmIChfdGhpcy5fdGV4dHVyZS5fY2FjaGVkV3JhcFUgIT09IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgX3RoaXMud3JhcFUgPSBfdGhpcy5fdGV4dHVyZS5fY2FjaGVkV3JhcFU7Cisg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlLl9jYWNoZWRXcmFwVSA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fdGV4dHVyZS5fY2Fj
aGVkV3JhcFYgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMud3JhcFYgPSBf
dGhpcy5fdGV4dHVyZS5fY2FjaGVkV3JhcFY7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl90
ZXh0dXJlLl9jYWNoZWRXcmFwViA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChfdGhpcy5fdGV4dHVyZS5fY2FjaGVkV3JhcFIgIT09IG51bGwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgX3RoaXMud3JhcFIgPSBfdGhpcy5fdGV4dHVyZS5fY2FjaGVkV3JhcFI7
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlLl9jYWNoZWRXcmFwUiA9IG51bGw7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF90aGlz
Lm9uTG9hZE9ic2VydmFibGUuaGFzT2JzZXJ2ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICBfdGhp
cy5vbkxvYWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhfdGhpcyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAob25Mb2FkKSB7CisgICAgICAgICAgICAgICAgb25Mb2FkKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIV90aGlzLmlzQmxvY2tpbmcgJiYgc2NlbmUp
IHsKKyAgICAgICAgICAgICAgICBzY2VuZS5yZXNldENhY2hlZE1hdGVyaWFsKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisgICAgICAgIGlmICghX3RoaXMudXJsKSB7CisgICAgICAgICAg
ICBfdGhpcy5fZGVsYXllZE9uTG9hZCA9IGxvYWQ7CisgICAgICAgICAgICBfdGhpcy5fZGVsYXll
ZE9uRXJyb3IgPSBvbkVycm9yOworICAgICAgICAgICAgcmV0dXJuIF90aGlzOworICAgICAgICB9
CisgICAgICAgIF90aGlzLl90ZXh0dXJlID0gX3RoaXMuX2dldEZyb21DYWNoZShfdGhpcy51cmws
IG5vTWlwbWFwLCBzYW1wbGluZ01vZGUsIGludmVydFkpOworICAgICAgICBpZiAoIV90aGlzLl90
ZXh0dXJlKSB7CisgICAgICAgICAgICBpZiAoIXNjZW5lIHx8ICFzY2VuZS51c2VEZWxheWVkVGV4
dHVyZUxvYWRpbmcpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdGV4dHVyZSA9IGVuZ2luZS5j
cmVhdGVUZXh0dXJlKF90aGlzLnVybCwgbm9NaXBtYXAsIGludmVydFksIHNjZW5lLCBzYW1wbGlu
Z01vZGUsIGxvYWQsIG9uRXJyb3IsIF90aGlzLl9idWZmZXIsIHVuZGVmaW5lZCwgX3RoaXMuX2Zv
cm1hdCk7CisgICAgICAgICAgICAgICAgaWYgKGRlbGV0ZUJ1ZmZlcikgeworICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgX3RoaXMuX2J1ZmZlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5kZWxheUxv
YWRTdGF0ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9OT1RMT0FERUQ7CisgICAgICAgICAgICAgICAg
X3RoaXMuX2RlbGF5ZWRPbkxvYWQgPSBsb2FkOworICAgICAgICAgICAgICAgIF90aGlzLl9kZWxh
eWVkT25FcnJvciA9IG9uRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuX3RleHR1cmUuaXNSZWFkeSkgeworICAgICAg
ICAgICAgICAgIF9NaXNjX3RpbWluZ1Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IlRpbWluZ1Rvb2xzIl0uU2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvYWQoKTsg
fSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBf
dGhpcy5fdGV4dHVyZS5vbkxvYWRlZE9ic2VydmFibGUuYWRkKGxvYWQpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFRleHR1cmUucHJvdG90eXBlLCAibm9NaXBtYXAiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBBcmUgbWlwIG1hcHMgZ2VuZXJhdGVkIGZvciB0aGlzIHRleHR1cmUgb3Ig
bm90LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fbm9NaXBtYXA7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShUZXh0dXJlLnByb3RvdHlwZSwgImlzQmxvY2tpbmciLCB7CisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzQmxvY2tpbmc7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBJcyB0aGUgdGV4dHVyZSBwcmV2
ZW50aW5nIG1hdGVyaWFsIHRvIHJlbmRlciB3aGlsZSBsb2FkaW5nLgorICAgICAgICAgKiBJZiBm
YWxzZSwgYSBkZWZhdWx0IHRleHR1cmUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGxvYWRp
bmcgb25lIGR1cmluZyB0aGUgcHJlcGFyYXRpb24gc3RlcC4KKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pc0Jsb2NraW5nID0g
dmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0
dXJlLnByb3RvdHlwZSwgInNhbXBsaW5nTW9kZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldCB0aGUgY3VycmVudCBzYW1wbGluZyBtb2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGV4dHVy
ZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
aWYgKCF0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRp
YWxTYW1wbGluZ01vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
dGV4dHVyZS5zYW1wbGluZ01vZGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShUZXh0dXJlLnByb3RvdHlwZSwgImludmVydFkiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0ZXh0dXJlIG5lZWRz
IHRvIGJlIGludmVydGVkIG9uIHRoZSB5IGF4aXMgZHVyaW5nIGxvYWRpbmcKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lu
dmVydFk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgdXJs
IChhbmQgb3B0aW9uYWwgYnVmZmVyKSBvZiB0aGlzIHRleHR1cmUgaWYgdXJsIHdhcyBudWxsIGR1
cmluZyBjb25zdHJ1Y3Rpb24uCisgICAgICogQHBhcmFtIHVybCB0aGUgdXJsIG9mIHRoZSB0ZXh0
dXJlCisgICAgICogQHBhcmFtIGJ1ZmZlciB0aGUgYnVmZmVyIG9mIHRoZSB0ZXh0dXJlIChkZWZh
dWx0cyB0byBudWxsKQorICAgICAqIEBwYXJhbSBvbkxvYWQgY2FsbGJhY2sgY2FsbGVkIHdoZW4g
dGhlIHRleHR1cmUgaXMgbG9hZGVkICAoZGVmYXVsdHMgdG8gbnVsbCkKKyAgICAgKi8KKyAgICBU
ZXh0dXJlLnByb3RvdHlwZS51cGRhdGVVUkwgPSBmdW5jdGlvbiAodXJsLCBidWZmZXIsIG9uTG9h
ZCkgeworICAgICAgICBpZiAoYnVmZmVyID09PSB2b2lkIDApIHsgYnVmZmVyID0gbnVsbDsgfQor
ICAgICAgICBpZiAodGhpcy51cmwpIHsKKyAgICAgICAgICAgIHRoaXMucmVsZWFzZUludGVybmFs
VGV4dHVyZSgpOworICAgICAgICAgICAgdGhpcy5nZXRTY2VuZSgpLm1hcmtBbGxNYXRlcmlhbHNB
c0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJD
b25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGlydHlGbGFnKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLm5hbWUgPSB1cmw7CisgICAgICAgIHRoaXMudXJsID0gdXJsOworICAgICAgICB0aGlz
Ll9idWZmZXIgPSBidWZmZXI7CisgICAgICAgIHRoaXMuZGVsYXlMb2FkU3RhdGUgPSBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uREVM
QVlMT0FEU1RBVEVfTk9UTE9BREVEOworICAgICAgICBpZiAob25Mb2FkKSB7CisgICAgICAgICAg
ICB0aGlzLl9kZWxheWVkT25Mb2FkID0gb25Mb2FkOworICAgICAgICB9CisgICAgICAgIHRoaXMu
ZGVsYXlMb2FkKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGaW5pc2ggdGhlIGxvYWRpbmcg
c2VxdWVuY2Ugb2YgYSB0ZXh0dXJlIGZsYWdnZWQgYXMgZGVsYXllZCBsb2FkLgorICAgICAqIEBo
aWRkZW4KKyAgICAgKi8KKyAgICBUZXh0dXJlLnByb3RvdHlwZS5kZWxheUxvYWQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGlmICh0aGlzLmRlbGF5TG9hZFN0YXRlICE9PSBfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uREVMQVlMT0FE
U1RBVEVfTk9UTE9BREVEKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICBpZiAoIXNjZW5lKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5kZWxheUxvYWRTdGF0
ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25z
dGFudHMiXS5ERUxBWUxPQURTVEFURV9MT0FERUQ7CisgICAgICAgIHRoaXMuX3RleHR1cmUgPSB0
aGlzLl9nZXRGcm9tQ2FjaGUodGhpcy51cmwsIHRoaXMuX25vTWlwbWFwLCB0aGlzLnNhbXBsaW5n
TW9kZSwgdGhpcy5faW52ZXJ0WSk7CisgICAgICAgIGlmICghdGhpcy5fdGV4dHVyZSkgeworICAg
ICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHNjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZVRleHR1cmUo
dGhpcy51cmwsIHRoaXMuX25vTWlwbWFwLCB0aGlzLl9pbnZlcnRZLCBzY2VuZSwgdGhpcy5zYW1w
bGluZ01vZGUsIHRoaXMuX2RlbGF5ZWRPbkxvYWQsIHRoaXMuX2RlbGF5ZWRPbkVycm9yLCB0aGlz
Ll9idWZmZXIsIG51bGwsIHRoaXMuX2Zvcm1hdCk7CisgICAgICAgICAgICBpZiAodGhpcy5fZGVs
ZXRlQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2J1ZmZlcjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9kZWxheWVkT25Mb2FkKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUuaXNS
ZWFkeSkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY190aW1pbmdUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fWyJUaW1pbmdUb29scyJdLlNldEltbWVkaWF0ZSh0aGlzLl9kZWxh
eWVkT25Mb2FkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmUub25Mb2FkZWRPYnNlcnZhYmxlLmFkZCh0
aGlzLl9kZWxheWVkT25Mb2FkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGVsYXllZE9uTG9hZCA9IG51bGw7CisgICAgICAgIHRo
aXMuX2RlbGF5ZWRPbkVycm9yID0gbnVsbDsKKyAgICB9OworICAgIFRleHR1cmUucHJvdG90eXBl
Ll9wcmVwYXJlUm93Rm9yVGV4dHVyZUdlbmVyYXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeiwgdCkg
eworICAgICAgICB4ICo9IHRoaXMudVNjYWxlOworICAgICAgICB5ICo9IHRoaXMudlNjYWxlOwor
ICAgICAgICB4IC09IHRoaXMudVJvdGF0aW9uQ2VudGVyICogdGhpcy51U2NhbGU7CisgICAgICAg
IHkgLT0gdGhpcy52Um90YXRpb25DZW50ZXIgKiB0aGlzLnZTY2FsZTsKKyAgICAgICAgeiAtPSB0
aGlzLndSb3RhdGlvbkNlbnRlcjsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc0Zyb21G
bG9hdHNUb1JlZih4LCB5LCB6LCB0aGlzLl9yb3dHZW5lcmF0aW9uTWF0cml4LCB0KTsKKyAgICAg
ICAgdC54ICs9IHRoaXMudVJvdGF0aW9uQ2VudGVyICogdGhpcy51U2NhbGUgKyB0aGlzLnVPZmZz
ZXQ7CisgICAgICAgIHQueSArPSB0aGlzLnZSb3RhdGlvbkNlbnRlciAqIHRoaXMudlNjYWxlICsg
dGhpcy52T2Zmc2V0OworICAgICAgICB0LnogKz0gdGhpcy53Um90YXRpb25DZW50ZXI7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgdGV4dHVyZSBtYXRyaXggd2hpY2gg
aW5jbHVkZXMgdGhlIHJlcXVlc3RlZCBvZmZzZXR0aW5nLCB0aWxpbmcgYW5kIHJvdGF0aW9uIGNv
bXBvbmVudHMuCisgICAgICogQHJldHVybnMgdGhlIHRyYW5zZm9ybSBtYXRyaXggb2YgdGhlIHRl
eHR1cmUuCisgICAgICovCisgICAgVGV4dHVyZS5wcm90b3R5cGUuZ2V0VGV4dHVyZU1hdHJpeCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHRo
aXMudU9mZnNldCA9PT0gdGhpcy5fY2FjaGVkVU9mZnNldCAmJgorICAgICAgICAgICAgdGhpcy52
T2Zmc2V0ID09PSB0aGlzLl9jYWNoZWRWT2Zmc2V0ICYmCisgICAgICAgICAgICB0aGlzLnVTY2Fs
ZSA9PT0gdGhpcy5fY2FjaGVkVVNjYWxlICYmCisgICAgICAgICAgICB0aGlzLnZTY2FsZSA9PT0g
dGhpcy5fY2FjaGVkVlNjYWxlICYmCisgICAgICAgICAgICB0aGlzLnVBbmcgPT09IHRoaXMuX2Nh
Y2hlZFVBbmcgJiYKKyAgICAgICAgICAgIHRoaXMudkFuZyA9PT0gdGhpcy5fY2FjaGVkVkFuZyAm
JgorICAgICAgICAgICAgdGhpcy53QW5nID09PSB0aGlzLl9jYWNoZWRXQW5nKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fY2FjaGVkVGV4dHVyZU1hdHJpeDsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9jYWNoZWRVT2Zmc2V0ID0gdGhpcy51T2Zmc2V0OworICAgICAgICB0aGlzLl9jYWNo
ZWRWT2Zmc2V0ID0gdGhpcy52T2Zmc2V0OworICAgICAgICB0aGlzLl9jYWNoZWRVU2NhbGUgPSB0
aGlzLnVTY2FsZTsKKyAgICAgICAgdGhpcy5fY2FjaGVkVlNjYWxlID0gdGhpcy52U2NhbGU7Cisg
ICAgICAgIHRoaXMuX2NhY2hlZFVBbmcgPSB0aGlzLnVBbmc7CisgICAgICAgIHRoaXMuX2NhY2hl
ZFZBbmcgPSB0aGlzLnZBbmc7CisgICAgICAgIHRoaXMuX2NhY2hlZFdBbmcgPSB0aGlzLndBbmc7
CisgICAgICAgIGlmICghdGhpcy5fY2FjaGVkVGV4dHVyZU1hdHJpeCkgeworICAgICAgICAgICAg
dGhpcy5fY2FjaGVkVGV4dHVyZU1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgICAgICB0aGlzLl9y
b3dHZW5lcmF0aW9uTWF0cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXSgpOworICAgICAgICAgICAgdGhpcy5fdDAgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlpl
cm8oKTsKKyAgICAgICAgICAgIHRoaXMuX3QxID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICB0aGlz
Ll90MiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZWN0b3IzIl0uWmVybygpOworICAgICAgICB9CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5Sb3RhdGlvbllhd1BpdGNoUm9s
bFRvUmVmKHRoaXMudkFuZywgdGhpcy51QW5nLCB0aGlzLndBbmcsIHRoaXMuX3Jvd0dlbmVyYXRp
b25NYXRyaXgpOworICAgICAgICB0aGlzLl9wcmVwYXJlUm93Rm9yVGV4dHVyZUdlbmVyYXRpb24o
MCwgMCwgMCwgdGhpcy5fdDApOworICAgICAgICB0aGlzLl9wcmVwYXJlUm93Rm9yVGV4dHVyZUdl
bmVyYXRpb24oMS4wLCAwLCAwLCB0aGlzLl90MSk7CisgICAgICAgIHRoaXMuX3ByZXBhcmVSb3dG
b3JUZXh0dXJlR2VuZXJhdGlvbigwLCAxLjAsIDAsIHRoaXMuX3QyKTsKKyAgICAgICAgdGhpcy5f
dDEuc3VidHJhY3RJblBsYWNlKHRoaXMuX3QwKTsKKyAgICAgICAgdGhpcy5fdDIuc3VidHJhY3RJ
blBsYWNlKHRoaXMuX3QwKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLkZyb21WYWx1ZXNUb1JlZih0aGlzLl90MS54LCB0
aGlzLl90MS55LCB0aGlzLl90MS56LCAwLjAsIHRoaXMuX3QyLngsIHRoaXMuX3QyLnksIHRoaXMu
X3QyLnosIDAuMCwgdGhpcy5fdDAueCwgdGhpcy5fdDAueSwgdGhpcy5fdDAueiwgMC4wLCAwLjAs
IDAuMCwgMC4wLCAxLjAsIHRoaXMuX2NhY2hlZFRleHR1cmVNYXRyaXgpOworICAgICAgICB2YXIg
c2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7CisgICAgICAgIGlmICghc2NlbmUpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9jYWNoZWRUZXh0dXJlTWF0cml4OworICAgICAgICB9CisgICAgICAg
IHNjZW5lLm1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGlydHlG
bGFnLCBmdW5jdGlvbiAobWF0KSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Lmhhc1RleHR1cmUo
X3RoaXMpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFRleHR1cmVN
YXRyaXg7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgbWF0cml4IHVz
ZWQgdG8gYXBwbHkgcmVmbGVjdGlvbi4gVGhpcyBpcyB1c2VmdWwgdG8gcm90YXRlIGFuIGVudmly
b25tZW50IHRleHR1cmUgZm9yIGluc3RhbmNlLgorICAgICAqIEByZXR1cm5zIFRoZSByZWZsZWN0
aW9uIHRleHR1cmUgdHJhbnNmb3JtCisgICAgICovCisgICAgVGV4dHVyZS5wcm90b3R5cGUuZ2V0
UmVmbGVjdGlvblRleHR1cmVNYXRyaXggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAg
aWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFRleHR1cmVNYXRy
aXg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudU9mZnNldCA9PT0gdGhpcy5fY2FjaGVk
VU9mZnNldCAmJgorICAgICAgICAgICAgdGhpcy52T2Zmc2V0ID09PSB0aGlzLl9jYWNoZWRWT2Zm
c2V0ICYmCisgICAgICAgICAgICB0aGlzLnVTY2FsZSA9PT0gdGhpcy5fY2FjaGVkVVNjYWxlICYm
CisgICAgICAgICAgICB0aGlzLnZTY2FsZSA9PT0gdGhpcy5fY2FjaGVkVlNjYWxlICYmCisgICAg
ICAgICAgICB0aGlzLmNvb3JkaW5hdGVzTW9kZSA9PT0gdGhpcy5fY2FjaGVkQ29vcmRpbmF0ZXNN
b2RlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5jb29yZGluYXRlc01vZGUgPT09IFRleHR1cmUu
UFJPSkVDVElPTl9NT0RFKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFByb2pl
Y3Rpb25NYXRyaXhJZCA9PT0gc2NlbmUuZ2V0UHJvamVjdGlvbk1hdHJpeCgpLnVwZGF0ZUZsYWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFRleHR1cmVNYXRyaXg7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFRleHR1cmVNYXRyaXg7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRUZXh0dXJlTWF0cml4
KSB7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWRUZXh0dXJlTWF0cml4ID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLlplcm8oKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX3Byb2plY3Rpb25Nb2RlTWF0cml4KSB7CisgICAg
ICAgICAgICB0aGlzLl9wcm9qZWN0aW9uTW9kZU1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fY2FjaGVkVU9mZnNldCA9IHRoaXMudU9mZnNldDsKKyAgICAgICAgdGhp
cy5fY2FjaGVkVk9mZnNldCA9IHRoaXMudk9mZnNldDsKKyAgICAgICAgdGhpcy5fY2FjaGVkVVNj
YWxlID0gdGhpcy51U2NhbGU7CisgICAgICAgIHRoaXMuX2NhY2hlZFZTY2FsZSA9IHRoaXMudlNj
YWxlOworICAgICAgICB0aGlzLl9jYWNoZWRDb29yZGluYXRlc01vZGUgPSB0aGlzLmNvb3JkaW5h
dGVzTW9kZTsKKyAgICAgICAgc3dpdGNoICh0aGlzLmNvb3JkaW5hdGVzTW9kZSkgeworICAgICAg
ICAgICAgY2FzZSBUZXh0dXJlLlBMQU5BUl9NT0RFOgorICAgICAgICAgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5JZGVudGl0
eVRvUmVmKHRoaXMuX2NhY2hlZFRleHR1cmVNYXRyaXgpOworICAgICAgICAgICAgICAgIHRoaXMu
X2NhY2hlZFRleHR1cmVNYXRyaXhbMF0gPSB0aGlzLnVTY2FsZTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9jYWNoZWRUZXh0dXJlTWF0cml4WzVdID0gdGhpcy52U2NhbGU7CisgICAgICAgICAgICAg
ICAgdGhpcy5fY2FjaGVkVGV4dHVyZU1hdHJpeFsxMl0gPSB0aGlzLnVPZmZzZXQ7CisgICAgICAg
ICAgICAgICAgdGhpcy5fY2FjaGVkVGV4dHVyZU1hdHJpeFsxM10gPSB0aGlzLnZPZmZzZXQ7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRleHR1cmUuUFJPSkVDVElP
Tl9NT0RFOgorICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5Gcm9tVmFsdWVzVG9SZWYoMC41LCAwLjAsIDAuMCwg
MC4wLCAwLjAsIC0wLjUsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuNSwgMC41LCAx
LjAsIDEuMCwgdGhpcy5fcHJvamVjdGlvbk1vZGVNYXRyaXgpOworICAgICAgICAgICAgICAgIHZh
ciBwcm9qZWN0aW9uTWF0cml4ID0gc2NlbmUuZ2V0UHJvamVjdGlvbk1hdHJpeCgpOworICAgICAg
ICAgICAgICAgIHRoaXMuX2NhY2hlZFByb2plY3Rpb25NYXRyaXhJZCA9IHByb2plY3Rpb25NYXRy
aXgudXBkYXRlRmxhZzsKKyAgICAgICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5
VG9SZWYodGhpcy5fcHJvamVjdGlvbk1vZGVNYXRyaXgsIHRoaXMuX2NhY2hlZFRleHR1cmVNYXRy
aXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siTWF0cml4Il0uSWRlbnRpdHlUb1JlZih0aGlzLl9jYWNoZWRUZXh0dXJlTWF0cml4KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzY2VuZS5tYXJrQWxsTWF0
ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZywgZnVuY3Rpb24gKG1h
dCkgeworICAgICAgICAgICAgcmV0dXJuIChtYXQuZ2V0QWN0aXZlVGV4dHVyZXMoKS5pbmRleE9m
KF90aGlzKSAhPT0gLTEpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hl
ZFRleHR1cmVNYXRyaXg7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhlIHRleHR1
cmUuCisgICAgICogQHJldHVybnMgdGhlIGNsb25lZCB0ZXh0dXJlCisgICAgICovCisgICAgVGV4
dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIHJldHVybiBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5DbG9uZShmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoX3RoaXMuX3RleHR1cmUgPyBfdGhpcy5fdGV4
dHVyZS51cmwgOiBudWxsLCBfdGhpcy5nZXRTY2VuZSgpLCBfdGhpcy5fbm9NaXBtYXAsIF90aGlz
Ll9pbnZlcnRZLCBfdGhpcy5zYW1wbGluZ01vZGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBfdGhp
cy5fdGV4dHVyZSA/IF90aGlzLl90ZXh0dXJlLl9idWZmZXIgOiB1bmRlZmluZWQpOworICAgICAg
ICB9LCB0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUgdGV4dHVy
ZSB0byBhIEpTT04gcmVwcmVzZW50YXRpb24gd2UgY2FuIGVhc2lseSB1c2UgaW4gdGhlIHJlc2Vw
ZWN0aXZlIFBhcnNlIGZ1bmN0aW9uLgorICAgICAqIEByZXR1cm5zIFRoZSBKU09OIHJlcHJlc2Vu
dGF0aW9uIG9mIHRoZSB0ZXh0dXJlCisgICAgICovCisgICAgVGV4dHVyZS5wcm90b3R5cGUuc2Vy
aWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9
IF9zdXBlci5wcm90b3R5cGUuc2VyaWFsaXplLmNhbGwodGhpcyk7CisgICAgICAgIGlmICghc2Vy
aWFsaXphdGlvbk9iamVjdCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9idWZmZXIgPT09ICJzdHJpbmciICYmIHRoaXMuX2J1
ZmZlci5zdWJzdHIoMCwgNSkgPT09ICJkYXRhOiIpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QuYmFzZTY0U3RyaW5nID0gdGhpcy5fYnVmZmVyOworICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5uYW1lID0gc2VyaWFsaXphdGlvbk9iamVjdC5uYW1lLnJlcGxhY2UoImRh
dGE6IiwgIiIpOworICAgICAgICB9CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaW52ZXJ0
WSA9IHRoaXMuX2ludmVydFk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc2FtcGxpbmdN
b2RlID0gdGhpcy5zYW1wbGluZ01vZGU7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2Jq
ZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXJyZW50IGNsYXNzIG5hbWUg
b2YgdGhlIHRleHR1cmUgdXNlZnVsIGZvciBzZXJpYWxpemF0aW9uIG9yIGR5bmFtaWMgY29kaW5n
LgorICAgICAqIEByZXR1cm5zICJUZXh0dXJlIgorICAgICAqLworICAgIFRleHR1cmUucHJvdG90
eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJUZXh0dXJl
IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2UgdGhlIHRleHR1cmUgYW5kIHJlbGVh
c2UgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICAgICAqLworICAgIFRleHR1cmUucHJvdG90
eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlz
cG9zZS5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLm9uTG9hZE9ic2VydmFibGUuY2xlYXIoKTsK
KyAgICAgICAgdGhpcy5fZGVsYXllZE9uTG9hZCA9IG51bGw7CisgICAgICAgIHRoaXMuX2RlbGF5
ZWRPbkVycm9yID0gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlIHRoZSBKU09O
IHJlcHJlc2VudGF0aW9uIG9mIGEgdGV4dHVyZSBpbiBvcmRlciB0byByZWNyZWF0ZSB0aGUgdGV4
dHVyZSBpbiB0aGUgZ2l2ZW4gc2NlbmUuCisgICAgICogQHBhcmFtIHBhcnNlZFRleHR1cmUgRGVm
aW5lIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFt
IHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIHBhcnNlZCB0ZXh0dXJlIHNob3VsZCBiZSBpbnN0
YW50aWF0ZWQgaW4KKyAgICAgKiBAcGFyYW0gcm9vdFVybCBEZWZpbmUgdGhlIHJvb3QgdXJsIG9m
IHRoZSBwYXJzaW5nIHNlcXVlbmNlIGluIHRoZSBjYXNlIG9mIHJlbGF0aXZlIGRlcGVuZGVuY2ll
cworICAgICAqIEByZXR1cm5zIFRoZSBwYXJzZWQgdGV4dHVyZSBpZiBzdWNjZXNzZnVsCisgICAg
ICovCisgICAgVGV4dHVyZS5QYXJzZSA9IGZ1bmN0aW9uIChwYXJzZWRUZXh0dXJlLCBzY2VuZSwg
cm9vdFVybCkgeworICAgICAgICBpZiAocGFyc2VkVGV4dHVyZS5jdXN0b21UeXBlKSB7CisgICAg
ICAgICAgICB2YXIgY3VzdG9tVGV4dHVyZSA9IF9NaXNjX2luc3RhbnRpYXRpb25Ub29sc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJJbnN0YW50aWF0aW9uVG9vbHMiXS5JbnN0YW50aWF0
ZShwYXJzZWRUZXh0dXJlLmN1c3RvbVR5cGUpOworICAgICAgICAgICAgLy8gVXBkYXRlIFNhbXBs
aW5nIE1vZGUKKyAgICAgICAgICAgIHZhciBwYXJzZWRDdXN0b21UZXh0dXJlID0gY3VzdG9tVGV4
dHVyZS5QYXJzZShwYXJzZWRUZXh0dXJlLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgICAgICBp
ZiAocGFyc2VkVGV4dHVyZS5zYW1wbGluZ01vZGUgJiYgcGFyc2VkQ3VzdG9tVGV4dHVyZS51cGRh
dGVTYW1wbGluZ01vZGUgJiYgcGFyc2VkQ3VzdG9tVGV4dHVyZS5fc2FtcGxpbmdNb2RlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHBhcnNlZEN1c3RvbVRleHR1cmUuX3NhbXBsaW5nTW9kZSAhPT0g
cGFyc2VkVGV4dHVyZS5zYW1wbGluZ01vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2Vk
Q3VzdG9tVGV4dHVyZS51cGRhdGVTYW1wbGluZ01vZGUocGFyc2VkVGV4dHVyZS5zYW1wbGluZ01v
ZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBwYXJzZWRDdXN0b21UZXh0dXJlOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJzZWRUZXh0
dXJlLmlzQ3ViZSAmJiAhcGFyc2VkVGV4dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAg
ICAgcmV0dXJuIFRleHR1cmUuX0N1YmVUZXh0dXJlUGFyc2VyKHBhcnNlZFRleHR1cmUsIHNjZW5l
LCByb290VXJsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBhcnNlZFRleHR1cmUubmFtZSAm
JiAhcGFyc2VkVGV4dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRleHR1cmUgPSBfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5QYXJzZShm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgZ2VuZXJhdGVNaXBNYXBzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGlmIChwYXJzZWRUZXh0dXJlLm5vTWlwbWFwKSB7CisgICAgICAgICAgICAgICAg
Z2VuZXJhdGVNaXBNYXBzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
cGFyc2VkVGV4dHVyZS5taXJyb3JQbGFuZSkgeworICAgICAgICAgICAgICAgIHZhciBtaXJyb3JU
ZXh0dXJlID0gVGV4dHVyZS5fQ3JlYXRlTWlycm9yKHBhcnNlZFRleHR1cmUubmFtZSwgcGFyc2Vk
VGV4dHVyZS5yZW5kZXJUYXJnZXRTaXplLCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzKTsKKyAgICAg
ICAgICAgICAgICBtaXJyb3JUZXh0dXJlLl93YWl0aW5nUmVuZGVyTGlzdCA9IHBhcnNlZFRleHR1
cmUucmVuZGVyTGlzdDsKKyAgICAgICAgICAgICAgICBtaXJyb3JUZXh0dXJlLm1pcnJvclBsYW5l
ID0gX01hdGhzX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlBsYW5l
Il0uRnJvbUFycmF5KHBhcnNlZFRleHR1cmUubWlycm9yUGxhbmUpOworICAgICAgICAgICAgICAg
IHJldHVybiBtaXJyb3JUZXh0dXJlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAocGFyc2VkVGV4dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIHZhciBy
ZW5kZXJUYXJnZXRUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkVGV4
dHVyZS5pc0N1YmUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2VhcmNoIGZvciBhbiBleGlz
dGluZyByZWZsZWN0aW9uIHByb2JlICh3aGljaCBjb250YWlucyBhIGN1YmUgcmVuZGVyIHRhcmdl
dCB0ZXh0dXJlKQorICAgICAgICAgICAgICAgICAgICBpZiAoc2NlbmUucmVmbGVjdGlvblByb2Jl
cykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IHNjZW5lLnJlZmxlY3Rpb25Qcm9iZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHByb2JlID0gc2NlbmUucmVmbGVjdGlvblByb2Jlc1tpbmRleF07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2JlLm5hbWUgPT09IHBhcnNlZFRl
eHR1cmUubmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJv
YmUuY3ViZVRleHR1cmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJn
ZXRUZXh0dXJlID0gVGV4dHVyZS5fQ3JlYXRlUmVuZGVyVGFyZ2V0VGV4dHVyZShwYXJzZWRUZXh0
dXJlLm5hbWUsIHBhcnNlZFRleHR1cmUucmVuZGVyVGFyZ2V0U2l6ZSwgc2NlbmUsIGdlbmVyYXRl
TWlwTWFwcyk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldFRleHR1cmUuX3dhaXRp
bmdSZW5kZXJMaXN0ID0gcGFyc2VkVGV4dHVyZS5yZW5kZXJMaXN0OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0VGV4dHVyZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlOwor
ICAgICAgICAgICAgICAgIGlmIChwYXJzZWRUZXh0dXJlLmJhc2U2NFN0cmluZykgeworICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlID0gVGV4dHVyZS5DcmVhdGVGcm9tQmFzZTY0U3RyaW5nKHBh
cnNlZFRleHR1cmUuYmFzZTY0U3RyaW5nLCBwYXJzZWRUZXh0dXJlLm5hbWUsIHNjZW5lLCAhZ2Vu
ZXJhdGVNaXBNYXBzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSByb290VXJsICsgcGFyc2VkVGV4dHVyZS5u
YW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoVGV4dHVyZS5Vc2VTZXJpYWxpemVkVXJsSWZB
bnkgJiYgcGFyc2VkVGV4dHVyZS51cmwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9
IHBhcnNlZFRleHR1cmUudXJsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZSh1cmwsIHNjZW5lLCAhZ2VuZXJhdGVNaXBNYXBz
LCBwYXJzZWRUZXh0dXJlLmludmVydFkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGV4dHVyZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgcGFyc2VkVGV4
dHVyZSwgc2NlbmUpOworICAgICAgICAvLyBVcGRhdGUgU2FtcGxpbmcgTW9kZQorICAgICAgICBp
ZiAocGFyc2VkVGV4dHVyZS5zYW1wbGluZ01vZGUpIHsKKyAgICAgICAgICAgIHZhciBzYW1wbGlu
ZyA9IHBhcnNlZFRleHR1cmUuc2FtcGxpbmdNb2RlOworICAgICAgICAgICAgaWYgKHRleHR1cmUg
JiYgdGV4dHVyZS5zYW1wbGluZ01vZGUgIT09IHNhbXBsaW5nKSB7CisgICAgICAgICAgICAgICAg
dGV4dHVyZS51cGRhdGVTYW1wbGluZ01vZGUoc2FtcGxpbmcpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIC8vIEFuaW1hdGlvbnMKKyAgICAgICAgaWYgKHRleHR1cmUgJiYgcGFy
c2VkVGV4dHVyZS5hbmltYXRpb25zKSB7CisgICAgICAgICAgICBmb3IgKHZhciBhbmltYXRpb25J
bmRleCA9IDA7IGFuaW1hdGlvbkluZGV4IDwgcGFyc2VkVGV4dHVyZS5hbmltYXRpb25zLmxlbmd0
aDsgYW5pbWF0aW9uSW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBwYXJzZWRBbmltYXRp
b24gPSBwYXJzZWRUZXh0dXJlLmFuaW1hdGlvbnNbYW5pbWF0aW9uSW5kZXhdOworICAgICAgICAg
ICAgICAgIHZhciBpbnRlcm5hbENsYXNzID0gX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIl9UeXBlU3RvcmUiXS5HZXRDbGFzcygiQkFCWUxPTi5BbmltYXRpb24i
KTsKKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxDbGFzcykgeworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLmFuaW1hdGlvbnMucHVzaChpbnRlcm5hbENsYXNzLlBhcnNlKHBhcnNlZEFu
aW1hdGlvbikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSB0ZXh0dXJlIGZyb20gaXRzIGJhc2UgNjQgcmVwcmVzZW50YXRpb24uCisgICAgICogQHBhcmFt
IGRhdGEgRGVmaW5lIHRoZSBiYXNlNjQgcGF5bG9hZCB3aXRob3V0IHRoZSBkYXRhOiBwcmVmaXgK
KyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHRleHR1cmUgaW4gdGhl
IHNjZW5lIHVzZWZ1bCBmbyBjYWNoaW5nIHB1cnBvc2UgZm9yIGluc3RhbmNlCisgICAgICogQHBh
cmFtIHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIHRleHR1cmUgc2hvdWxkIGJlbG9uZyB0bwor
ICAgICAqIEBwYXJhbSBub01pcG1hcCBGb3JjZXMgdGhlIHRleHR1cmUgdG8gbm90IGNyZWF0ZSBt
aXAgbWFwIGluZm9ybWF0aW9uIGlmIHRydWUKKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmUg
aWYgdGhlIHRleHR1cmUgbmVlZHMgdG8gYmUgaW52ZXJ0ZWQgb24gdGhlIHkgYXhpcyBkdXJpbmcg
bG9hZGluZworICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgZGVmaW5lIHRoZSBzYW1wbGluZyBt
b2RlIHdlIHdhbnQgZm9yIHRoZSB0ZXh0dXJlIHdoaWxlIGZlY3RjaGluZyBmcm9tIGl0IChUZXh0
dXJlLk5FQVJFU1RfU0FNUExJTkdNT0RFLi4uKQorICAgICAqIEBwYXJhbSBvbkxvYWQgZGVmaW5l
IGEgY2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gdGhlIHRleHR1cmUgaGFzIGJlZW4gbG9hZGVkCisg
ICAgICogQHBhcmFtIG9uRXJyb3IgZGVmaW5lIGEgY2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gYW4g
ZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZSBsb2FkaW5nIHNlc3Npb24KKyAgICAgKiBAcGFyYW0g
Zm9ybWF0IGRlZmluZSB0aGUgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlIHdlIGFyZSB0cnlpbmcgdG8g
bG9hZCAoRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCQS4uLikKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y3JlYXRlZCB0ZXh0dXJlCisgICAgICovCisgICAgVGV4dHVyZS5DcmVhdGVGcm9tQmFzZTY0U3Ry
aW5nID0gZnVuY3Rpb24gKGRhdGEsIG5hbWUsIHNjZW5lLCBub01pcG1hcCwgaW52ZXJ0WSwgc2Ft
cGxpbmdNb2RlLCBvbkxvYWQsIG9uRXJyb3IsIGZvcm1hdCkgeworICAgICAgICBpZiAoc2FtcGxp
bmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gVGV4dHVyZS5UUklMSU5FQVJfU0FN
UExJTkdNT0RFOyB9CisgICAgICAgIGlmIChvbkxvYWQgPT09IHZvaWQgMCkgeyBvbkxvYWQgPSBu
dWxsOyB9CisgICAgICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG51bGw7
IH0KKyAgICAgICAgaWYgKGZvcm1hdCA9PT0gdm9pZCAwKSB7IGZvcm1hdCA9IF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJF
Rk9STUFUX1JHQkE7IH0KKyAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKCJkYXRhOiIgKyBuYW1l
LCBzY2VuZSwgbm9NaXBtYXAsIGludmVydFksIHNhbXBsaW5nTW9kZSwgb25Mb2FkLCBvbkVycm9y
LCBkYXRhLCBmYWxzZSwgZm9ybWF0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSB0ZXh0dXJlIGZyb20gaXRzIGRhdGE6IHJlcHJlc2VudGF0aW9uLiAoZGF0YTogd2lsbCBiZSBh
ZGRlZCBpbiBjYXNlIG9ubHkgdGhlIHBheWxvYWQgaGFzIGJlZW4gcGFzc2VkIGluKQorICAgICAq
IEBwYXJhbSBkYXRhIERlZmluZSB0aGUgYmFzZTY0IHBheWxvYWQgd2l0aG91dCB0aGUgZGF0YTog
cHJlZml4CisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB0ZXh0dXJl
IGluIHRoZSBzY2VuZSB1c2VmdWwgZm8gY2FjaGluZyBwdXJwb3NlIGZvciBpbnN0YW5jZQorICAg
ICAqIEBwYXJhbSBidWZmZXIgZGVmaW5lIHRoZSBidWZmZXIgdG8gbG9hZCB0aGUgdGV4dHVyZSBm
cm9tIGluIGNhc2UgdGhlIHRleHR1cmUgaXMgbG9hZGVkIGZyb20gYSBidWZmZXIgcmVwcmVzZW50
YXRpb24KKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBz
aG91bGQgYmVsb25nIHRvCisgICAgICogQHBhcmFtIGRlbGV0ZUJ1ZmZlciBkZWZpbmUgaWYgdGhl
IGJ1ZmZlciB3ZSBhcmUgbG9hZGluZyB0aGUgdGV4dHVyZSBmcm9tIHNob3VsZCBiZSBkZWxldGVk
IGFmdGVyIGxvYWQKKyAgICAgKiBAcGFyYW0gbm9NaXBtYXAgRm9yY2VzIHRoZSB0ZXh0dXJlIHRv
IG5vdCBjcmVhdGUgbWlwIG1hcCBpbmZvcm1hdGlvbiBpZiB0cnVlCisgICAgICogQHBhcmFtIGlu
dmVydFkgZGVmaW5lIGlmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIGludmVydGVkIG9uIHRoZSB5
IGF4aXMgZHVyaW5nIGxvYWRpbmcKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZSB0
aGUgc2FtcGxpbmcgbW9kZSB3ZSB3YW50IGZvciB0aGUgdGV4dHVyZSB3aGlsZSBmZWN0Y2hpbmcg
ZnJvbSBpdCAoVGV4dHVyZS5ORUFSRVNUX1NBTVBMSU5HTU9ERS4uLikKKyAgICAgKiBAcGFyYW0g
b25Mb2FkIGRlZmluZSBhIGNhbGxiYWNrIHRyaWdnZXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGhhcyBi
ZWVuIGxvYWRlZAorICAgICAqIEBwYXJhbSBvbkVycm9yIGRlZmluZSBhIGNhbGxiYWNrIHRyaWdn
ZXJlZCB3aGVuIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUgbG9hZGluZyBzZXNzaW9uCisg
ICAgICogQHBhcmFtIGZvcm1hdCBkZWZpbmUgdGhlIGZvcm1hdCBvZiB0aGUgdGV4dHVyZSB3ZSBh
cmUgdHJ5aW5nIHRvIGxvYWQgKEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQkEuLi4pCisgICAgICog
QHJldHVybnMgdGhlIGNyZWF0ZWQgdGV4dHVyZQorICAgICAqLworICAgIFRleHR1cmUuTG9hZEZy
b21EYXRhU3RyaW5nID0gZnVuY3Rpb24gKG5hbWUsIGJ1ZmZlciwgc2NlbmUsIGRlbGV0ZUJ1ZmZl
ciwgbm9NaXBtYXAsIGludmVydFksIHNhbXBsaW5nTW9kZSwgb25Mb2FkLCBvbkVycm9yLCBmb3Jt
YXQpIHsKKyAgICAgICAgaWYgKGRlbGV0ZUJ1ZmZlciA9PT0gdm9pZCAwKSB7IGRlbGV0ZUJ1ZmZl
ciA9IGZhbHNlOyB9CisgICAgICAgIGlmIChub01pcG1hcCA9PT0gdm9pZCAwKSB7IG5vTWlwbWFw
ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGludmVydFkgPT09IHZvaWQgMCkgeyBpbnZlcnRZID0g
dHJ1ZTsgfQorICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdN
b2RlID0gVGV4dHVyZS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIGlmIChvbkxv
YWQgPT09IHZvaWQgMCkgeyBvbkxvYWQgPSBudWxsOyB9CisgICAgICAgIGlmIChvbkVycm9yID09
PSB2b2lkIDApIHsgb25FcnJvciA9IG51bGw7IH0KKyAgICAgICAgaWYgKGZvcm1hdCA9PT0gdm9p
ZCAwKSB7IGZvcm1hdCA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFRk9STUFUX1JHQkE7IH0KKyAgICAgICAgaWYgKG5h
bWUuc3Vic3RyKDAsIDUpICE9PSAiZGF0YToiKSB7CisgICAgICAgICAgICBuYW1lID0gImRhdGE6
IiArIG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKG5hbWUsIHNj
ZW5lLCBub01pcG1hcCwgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlLCBvbkxvYWQsIG9uRXJyb3IsIGJ1
ZmZlciwgZGVsZXRlQnVmZmVyLCBmb3JtYXQpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBUZXh0dXJlLl9DdWJlVGV4dHVyZVBhcnNlciA9IGZ1bmN0aW9uIChqc29uVGV4dHVyZSwg
c2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiQ3ViZVRleHR1cmUi
KTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgVGV4dHVyZS5fQ3JlYXRlTWlycm9y
ID0gZnVuY3Rpb24gKG5hbWUsIHJlbmRlclRhcmdldFNpemUsIHNjZW5lLCBnZW5lcmF0ZU1pcE1h
cHMpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiTWlycm9yVGV4dHVyZSIpOworICAgIH07
CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUZXh0dXJlLl9DcmVhdGVSZW5kZXJUYXJnZXRUZXh0
dXJlID0gZnVuY3Rpb24gKG5hbWUsIHJlbmRlclRhcmdldFNpemUsIHNjZW5lLCBnZW5lcmF0ZU1p
cE1hcHMpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiUmVuZGVyVGFyZ2V0VGV4dHVyZSIp
OworICAgIH07CisgICAgLyoqIG5lYXJlc3QgaXMgbWFnID0gbmVhcmVzdCBhbmQgbWluID0gbmVh
cmVzdCBhbmQgbWlwID0gbGluZWFyICovCisgICAgVGV4dHVyZS5ORUFSRVNUX1NBTVBMSU5HTU9E
RSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25z
dGFudHMiXS5URVhUVVJFX05FQVJFU1RfU0FNUExJTkdNT0RFOworICAgIC8qKiBuZWFyZXN0IGlz
IG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1pcCA9IGxpbmVhciAqLworICAg
IFRleHR1cmUuTkVBUkVTVF9ORUFSRVNUX01JUExJTkVBUiA9IF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1Rf
TkVBUkVTVF9NSVBMSU5FQVI7IC8vIG5lYXJlc3QgaXMgbWFnID0gbmVhcmVzdCBhbmQgbWluID0g
bmVhcmVzdCBhbmQgbWlwID0gbGluZWFyCisgICAgLyoqIEJpbGluZWFyIGlzIG1hZyA9IGxpbmVh
ciBhbmQgbWluID0gbGluZWFyIGFuZCBtaXAgPSBuZWFyZXN0ICovCisgICAgVGV4dHVyZS5CSUxJ
TkVBUl9TQU1QTElOR01PREUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9CSUxJTkVBUl9TQU1QTElOR01PREU7Cisg
ICAgLyoqIEJpbGluZWFyIGlzIG1hZyA9IGxpbmVhciBhbmQgbWluID0gbGluZWFyIGFuZCBtaXAg
PSBuZWFyZXN0ICovCisgICAgVGV4dHVyZS5MSU5FQVJfTElORUFSX01JUE5FQVJFU1QgPSBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRV9MSU5FQVJfTElORUFSX01JUE5FQVJFU1Q7IC8vIEJpbGluZWFyIGlzIG1hZyA9IGxp
bmVhciBhbmQgbWluID0gbGluZWFyIGFuZCBtaXAgPSBuZWFyZXN0CisgICAgLyoqIFRyaWxpbmVh
ciBpcyBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IGxpbmVhciBhbmQgbWlwID0gbGluZWFyICovCisg
ICAgVGV4dHVyZS5UUklMSU5FQVJfU0FNUExJTkdNT0RFID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfVFJJTElORUFS
X1NBTVBMSU5HTU9ERTsKKyAgICAvKiogVHJpbGluZWFyIGlzIG1hZyA9IGxpbmVhciBhbmQgbWlu
ID0gbGluZWFyIGFuZCBtaXAgPSBsaW5lYXIgKi8KKyAgICBUZXh0dXJlLkxJTkVBUl9MSU5FQVJf
TUlQTElORUFSID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfTElORUFSX0xJTkVBUl9NSVBMSU5FQVI7IC8vIFRyaWxp
bmVhciBpcyBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IGxpbmVhciBhbmQgbWlwID0gbGluZWFyCisg
ICAgLyoqIG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1pcCA9IG5lYXJlc3Qg
Ki8KKyAgICBUZXh0dXJlLk5FQVJFU1RfTkVBUkVTVF9NSVBORUFSRVNUID0gX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVf
TkVBUkVTVF9ORUFSRVNUX01JUE5FQVJFU1Q7CisgICAgLyoqIG1hZyA9IG5lYXJlc3QgYW5kIG1p
biA9IGxpbmVhciBhbmQgbWlwID0gbmVhcmVzdCAqLworICAgIFRleHR1cmUuTkVBUkVTVF9MSU5F
QVJfTUlQTkVBUkVTVCA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1RfTElORUFSX01JUE5FQVJFU1Q7Cisg
ICAgLyoqIG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IGxpbmVhciBhbmQgbWlwID0gbGluZWFyICov
CisgICAgVGV4dHVyZS5ORUFSRVNUX0xJTkVBUl9NSVBMSU5FQVIgPSBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9ORUFS
RVNUX0xJTkVBUl9NSVBMSU5FQVI7CisgICAgLyoqIG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IGxp
bmVhciBhbmQgbWlwID0gbm9uZSAqLworICAgIFRleHR1cmUuTkVBUkVTVF9MSU5FQVIgPSBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRV9ORUFSRVNUX0xJTkVBUjsKKyAgICAvKiogbWFnID0gbmVhcmVzdCBhbmQgbWluID0g
bmVhcmVzdCBhbmQgbWlwID0gbm9uZSAqLworICAgIFRleHR1cmUuTkVBUkVTVF9ORUFSRVNUID0g
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50
cyJdLlRFWFRVUkVfTkVBUkVTVF9ORUFSRVNUOworICAgIC8qKiBtYWcgPSBsaW5lYXIgYW5kIG1p
biA9IG5lYXJlc3QgYW5kIG1pcCA9IG5lYXJlc3QgKi8KKyAgICBUZXh0dXJlLkxJTkVBUl9ORUFS
RVNUX01JUE5FQVJFU1QgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9MSU5FQVJfTkVBUkVTVF9NSVBORUFSRVNUOwor
ICAgIC8qKiBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1pcCA9IGxpbmVhciAq
LworICAgIFRleHR1cmUuTElORUFSX05FQVJFU1RfTUlQTElORUFSID0gX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfTElO
RUFSX05FQVJFU1RfTUlQTElORUFSOworICAgIC8qKiBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IGxp
bmVhciBhbmQgbWlwID0gbm9uZSAqLworICAgIFRleHR1cmUuTElORUFSX0xJTkVBUiA9IF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5U
RVhUVVJFX0xJTkVBUl9MSU5FQVI7CisgICAgLyoqIG1hZyA9IGxpbmVhciBhbmQgbWluID0gbmVh
cmVzdCBhbmQgbWlwID0gbm9uZSAqLworICAgIFRleHR1cmUuTElORUFSX05FQVJFU1QgPSBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRV9MSU5FQVJfTkVBUkVTVDsKKyAgICAvKiogRXhwbGljaXQgY29vcmRpbmF0ZXMgbW9k
ZSAqLworICAgIFRleHR1cmUuRVhQTElDSVRfTU9ERSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX0VYUExJQ0lUX01P
REU7CisgICAgLyoqIFNwaGVyaWNhbCBjb29yZGluYXRlcyBtb2RlICovCisgICAgVGV4dHVyZS5T
UEhFUklDQUxfTU9ERSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX1NQSEVSSUNBTF9NT0RFOworICAgIC8qKiBQbGFu
YXIgY29vcmRpbmF0ZXMgbW9kZSAqLworICAgIFRleHR1cmUuUExBTkFSX01PREUgPSBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uVEVY
VFVSRV9QTEFOQVJfTU9ERTsKKyAgICAvKiogQ3ViaWMgY29vcmRpbmF0ZXMgbW9kZSAqLworICAg
IFRleHR1cmUuQ1VCSUNfTU9ERSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX0NVQklDX01PREU7CisgICAgLyoqIFBy
b2plY3Rpb24gY29vcmRpbmF0ZXMgbW9kZSAqLworICAgIFRleHR1cmUuUFJPSkVDVElPTl9NT0RF
ID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0
YW50cyJdLlRFWFRVUkVfUFJPSkVDVElPTl9NT0RFOworICAgIC8qKiBJbnZlcnNlIEN1YmljIGNv
b3JkaW5hdGVzIG1vZGUgKi8KKyAgICBUZXh0dXJlLlNLWUJPWF9NT0RFID0gX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVf
U0tZQk9YX01PREU7CisgICAgLyoqIEludmVyc2UgQ3ViaWMgY29vcmRpbmF0ZXMgbW9kZSAqLwor
ICAgIFRleHR1cmUuSU5WQ1VCSUNfTU9ERSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX0lOVkNVQklDX01PREU7Cisg
ICAgLyoqIEVxdWlyZWN0YW5ndWxhciBjb29yZGluYXRlcyBtb2RlICovCisgICAgVGV4dHVyZS5F
UVVJUkVDVEFOR1VMQVJfTU9ERSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX0VRVUlSRUNUQU5HVUxBUl9NT0RFOwor
ICAgIC8qKiBFcXVpcmVjdGFuZ3VsYXIgRml4ZWQgY29vcmRpbmF0ZXMgbW9kZSAqLworICAgIFRl
eHR1cmUuRklYRURfRVFVSVJFQ1RBTkdVTEFSX01PREUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9GSVhFRF9FUVVJ
UkVDVEFOR1VMQVJfTU9ERTsKKyAgICAvKiogRXF1aXJlY3Rhbmd1bGFyIEZpeGVkIE1pcnJvcmVk
IGNvb3JkaW5hdGVzIG1vZGUgKi8KKyAgICBUZXh0dXJlLkZJWEVEX0VRVUlSRUNUQU5HVUxBUl9N
SVJST1JFRF9NT0RFID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfRklYRURfRVFVSVJFQ1RBTkdVTEFSX01JUlJPUkVE
X01PREU7CisgICAgLyoqIFRleHR1cmUgaXMgbm90IHJlcGVhdGluZyBvdXRzaWRlIG9mIDAuLjEg
VVZzICovCisgICAgVGV4dHVyZS5DTEFNUF9BRERSRVNTTU9ERSA9IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX0NMQU1Q
X0FERFJFU1NNT0RFOworICAgIC8qKiBUZXh0dXJlIGlzIHJlcGVhdGluZyBvdXRzaWRlIG9mIDAu
LjEgVVZzICovCisgICAgVGV4dHVyZS5XUkFQX0FERFJFU1NNT0RFID0gX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfV1JB
UF9BRERSRVNTTU9ERTsKKyAgICAvKiogVGV4dHVyZSBpcyByZXBlYXRpbmcgYW5kIG1pcnJvcmVk
ICovCisgICAgVGV4dHVyZS5NSVJST1JfQUREUkVTU01PREUgPSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9NSVJST1Jf
QUREUkVTU01PREU7CisgICAgLyoqCisgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiB3aGlj
aCBkZWZpbmVzIGlmIHRoZSB0ZXh0dXJlIHVybCBtdXN0IGJlIGJ1aWxkIGZyb20gdGhlIHNlcmlh
bGl6ZWQgVVJMIGluc3RlYWQgb2YganVzdCB1c2luZyB0aGUgbmFtZSBhbmQgbG9hZGluZyB0aGVt
IHNpZGUgYnkgc2lkZSB3aXRoIHRoZSBzY2VuZSBmaWxlCisgICAgICovCisgICAgVGV4dHVyZS5V
c2VTZXJpYWxpemVkVXJsSWZBbnkgPSBmYWxzZTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IFRleHR1cmUucHJvdG90eXBlLCAidXJsIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIFRleHR1cmUucHJvdG90eXBlLCAidU9mZnNldCIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBUZXh0dXJlLnByb3RvdHlwZSwgInZPZmZzZXQiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVGV4dHVyZS5wcm90b3R5cGUsICJ1U2NhbGUiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVGV4dHVyZS5wcm90b3R5cGUsICJ2
U2NhbGUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVGV4dHVyZS5wcm90
b3R5cGUsICJ1QW5nIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFRleHR1
cmUucHJvdG90eXBlLCAidkFuZyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBd
LCBUZXh0dXJlLnByb3RvdHlwZSwgIndBbmciLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgp
CisgICAgXSwgVGV4dHVyZS5wcm90b3R5cGUsICJ1Um90YXRpb25DZW50ZXIiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVGV4dHVyZS5wcm90b3R5cGUsICJ2Um90YXRpb25D
ZW50ZXIiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVGV4dHVyZS5wcm90
b3R5cGUsICJ3Um90YXRpb25DZW50ZXIiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisg
ICAgXSwgVGV4dHVyZS5wcm90b3R5cGUsICJpc0Jsb2NraW5nIiwgbnVsbCk7CisgICAgcmV0dXJu
IFRleHR1cmU7Cit9KF9NYXRlcmlhbHNfVGV4dHVyZXNfYmFzZVRleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siQmFzZVRleHR1cmUiXSkpOworCisvLyBSZWZlcmVuY2VzIHRoZSBk
ZXBlbmRlbmNpZXMuCitfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5fVGV4dHVyZVBhcnNlciA9IFRleHR1cmUuUGFyc2U7
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0dXJlcy92aWRlb1RleHR1
cmUudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy92aWRlb1RleHR1cmUudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogVmlkZW9UZXh0dXJlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlZpZGVvVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVmlkZW9UZXh0dXJlOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxl
cy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvdG9vbHMgKi8g
Ii4vTWlzYy90b29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9UZXh0
dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisKKwor
CisKKworLyoqCisgKiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IGEgdmlkZW8gaW4geW91ciBzY2Vu
ZSwgdGhpcyBpcyB0aGUgc3BlY2lhbCB0ZXh0dXJlIGZvciB0aGF0LgorICogVGhpcyBzcGVjaWFs
IHRleHR1cmUgd29ya3Mgc2ltaWxhciB0byBvdGhlciB0ZXh0dXJlcywgd2l0aCB0aGUgZXhjZXB0
aW9uIG9mIGEgZmV3IHBhcmFtZXRlcnMuCisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL3ZpZGVvX3RleHR1cmUKKyAqLwordmFyIFZpZGVvVGV4dHVyZSA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2V4dGVuZHMiXShWaWRlb1RleHR1cmUsIF9zdXBlcik7CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIHZpZGVvIHRleHR1cmUuCisgICAgICogSWYgeW91IHdhbnQgdG8gZGlz
cGxheSBhIHZpZGVvIGluIHlvdXIgc2NlbmUsIHRoaXMgaXMgdGhlIHNwZWNpYWwgdGV4dHVyZSBm
b3IgdGhhdC4KKyAgICAgKiBUaGlzIHNwZWNpYWwgdGV4dHVyZSB3b3JrcyBzaW1pbGFyIHRvIG90
aGVyIHRleHR1cmVzLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgYSBmZXcgcGFyYW1ldGVycy4KKyAg
ICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3ZpZGVvX3RleHR1cmUK
KyAgICAgKiBAcGFyYW0gbmFtZSBvcHRpb25hbCBuYW1lLCB3aWxsIGRldGVjdCBmcm9tIHZpZGVv
IHNvdXJjZSwgaWYgbm90IGRlZmluZWQKKyAgICAgKiBAcGFyYW0gc3JjIGNhbiBiZSB1c2VkIHRv
IHByb3ZpZGUgYW4gdXJsLCBhcnJheSBvZiB1cmxzIG9yIGFuIGFscmVhZHkgc2V0dXAgSFRNTCB2
aWRlbyBlbGVtZW50LgorICAgICAqIEBwYXJhbSBzY2VuZSBpcyBvYnZpb3VzbHkgdGhlIGN1cnJl
bnQgc2NlbmUuCisgICAgICogQHBhcmFtIGdlbmVyYXRlTWlwTWFwcyBjYW4gYmUgdXNlZCB0byB0
dXJuIG9uIG1pcG1hcHMgKENhbiBiZSBleHBlbnNpdmUgZm9yIHZpZGVvVGV4dHVyZXMgYmVjYXVz
ZSB0aGV5IGFyZSBvZnRlbiB1cGRhdGVkKS4KKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBpcyBmYWxz
ZSBieSBkZWZhdWx0IGJ1dCBjYW4gYmUgdXNlZCB0byBpbnZlcnQgdmlkZW8gb24gWSBheGlzCisg
ICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBjb250cm9scyB0aGUgc2FtcGxpbmcgbWV0aG9kIGFu
ZCBpcyBzZXQgdG8gVFJJTElORUFSX1NBTVBMSU5HTU9ERSBieSBkZWZhdWx0CisgICAgICogQHBh
cmFtIHNldHRpbmdzIGFsbG93cyBmaW5lciBjb250cm9sIG92ZXIgdmlkZW8gdXNhZ2UKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBWaWRlb1RleHR1cmUobmFtZSwgc3JjLCBzY2VuZSwgZ2VuZXJhdGVN
aXBNYXBzLCBpbnZlcnRZLCBzYW1wbGluZ01vZGUsIHNldHRpbmdzKSB7CisgICAgICAgIGlmIChn
ZW5lcmF0ZU1pcE1hcHMgPT09IHZvaWQgMCkgeyBnZW5lcmF0ZU1pcE1hcHMgPSBmYWxzZTsgfQor
ICAgICAgICBpZiAoaW52ZXJ0WSA9PT0gdm9pZCAwKSB7IGludmVydFkgPSBmYWxzZTsgfQorICAg
ICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gX01hdGVy
aWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1
cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIGlmIChzZXR0aW5ncyA9PT0g
dm9pZCAwKSB7IHNldHRpbmdzID0geworICAgICAgICAgICAgYXV0b1BsYXk6IHRydWUsCisgICAg
ICAgICAgICBsb29wOiB0cnVlLAorICAgICAgICAgICAgYXV0b1VwZGF0ZVRleHR1cmU6IHRydWUs
CisgICAgICAgIH07IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbnVs
bCwgc2NlbmUsICFnZW5lcmF0ZU1pcE1hcHMsIGludmVydFkpIHx8IHRoaXM7CisgICAgICAgIF90
aGlzLl9vblVzZXJBY3Rpb25SZXF1ZXN0ZWRPYnNlcnZhYmxlID0gbnVsbDsKKyAgICAgICAgX3Ro
aXMuX3N0aWxsSW1hZ2VDYXB0dXJlZCA9IGZhbHNlOworICAgICAgICBfdGhpcy5fZGlzcGxheWlu
Z1Bvc3RlclRleHR1cmUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2ZyYW1lSWQgPSAtMTsKKyAg
ICAgICAgX3RoaXMuX2NyZWF0ZUludGVybmFsVGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIGlmIChfdGhpcy5fdGV4dHVyZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYg
KF90aGlzLl9kaXNwbGF5aW5nUG9zdGVyVGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICBf
dGhpcy5fdGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9kaXNw
bGF5aW5nUG9zdGVyVGV4dHVyZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghX3RoaXMuX2VuZ2luZS5uZWVk
UE9UVGV4dHVyZXMgfHwKKyAgICAgICAgICAgICAgICAoX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5Jc0V4cG9uZW50T2ZUd28oX3RoaXMudmlkZW8udmlk
ZW9XaWR0aCkgJiYgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9v
bHMiXS5Jc0V4cG9uZW50T2ZUd28oX3RoaXMudmlkZW8udmlkZW9IZWlnaHQpKSkgeworICAgICAg
ICAgICAgICAgIF90aGlzLndyYXBVID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXS5XUkFQX0FERFJFU1NNT0RFOworICAg
ICAgICAgICAgICAgIF90aGlzLndyYXBWID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXS5XUkFQX0FERFJFU1NNT0RFOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgX3RoaXMu
d3JhcFUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICAgICAgICAgIF90
aGlzLndyYXBWID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgICAgICAg
ICBfdGhpcy5fZ2VuZXJhdGVNaXBNYXBzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBfdGhpcy5fdGV4dHVyZSA9IF90aGlzLl9lbmdpbmUuY3JlYXRlRHluYW1pY1RleHR1cmUo
X3RoaXMudmlkZW8udmlkZW9XaWR0aCwgX3RoaXMudmlkZW8udmlkZW9IZWlnaHQsIF90aGlzLl9n
ZW5lcmF0ZU1pcE1hcHMsIF90aGlzLnNhbXBsaW5nTW9kZSk7CisgICAgICAgICAgICBpZiAoIV90
aGlzLnZpZGVvLmF1dG9wbGF5ICYmICFfdGhpcy5fc2V0dGluZ3MucG9zdGVyKSB7CisgICAgICAg
ICAgICAgICAgdmFyIG9sZEhhbmRsZXJfMSA9IF90aGlzLnZpZGVvLm9ucGxheWluZzsKKyAgICAg
ICAgICAgICAgICB2YXIgZXJyb3JfMSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHZhciBvbGRN
dXRlZF8xID0gX3RoaXMudmlkZW8ubXV0ZWQ7CisgICAgICAgICAgICAgICAgX3RoaXMudmlkZW8u
bXV0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIF90aGlzLnZpZGVvLm9ucGxheWluZyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMudmlkZW8ubXV0ZWQgPSBvbGRN
dXRlZF8xOworICAgICAgICAgICAgICAgICAgICBfdGhpcy52aWRlby5vbnBsYXlpbmcgPSBvbGRI
YW5kbGVyXzE7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlLmlzUmVhZHkgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdXBkYXRlSW50ZXJuYWxUZXh0dXJlKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghZXJyb3JfMSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMudmlkZW8ucGF1c2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAoX3RoaXMub25Mb2FkT2JzZXJ2YWJsZS5oYXNPYnNlcnZlcnMoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub25Mb2FkT2JzZXJ2YWJsZS5ub3RpZnlP
YnNlcnZlcnMoX3RoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICB2YXIgcGxheWluZyA9IF90aGlzLnZpZGVvLnBsYXkoKTsKKyAg
ICAgICAgICAgICAgICBpZiAocGxheWluZykgeworICAgICAgICAgICAgICAgICAgICBwbGF5aW5n
LnRoZW4oZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZlcnl0aGlu
ZyBpcyBnb29kLgorICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICAg
ICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXzEg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gT24gQ2hyb21lIGZvciBpbnN0YW5j
ZSwgbmV3IHBvbGljaWVzIG1pZ2h0IHByZXZlbnQgcGxheWluZyB3aXRob3V0IHVzZXIgaW50ZXJh
Y3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX29uVXNlckFjdGlvblJl
cXVlc3RlZE9ic2VydmFibGUgJiYgX3RoaXMuX29uVXNlckFjdGlvblJlcXVlc3RlZE9ic2VydmFi
bGUuaGFzT2JzZXJ2ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5f
b25Vc2VyQWN0aW9uUmVxdWVzdGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoX3RoaXMpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLnZpZGVvLm9ucGxheWluZyA9IG9sZEhhbmRsZXJfMTsKKyAgICAgICAgICAgICAgICAg
ICAgX3RoaXMuX3RleHR1cmUuaXNSZWFkeSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIF90
aGlzLl91cGRhdGVJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90
aGlzLm9uTG9hZE9ic2VydmFibGUuaGFzT2JzZXJ2ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF90aGlzLm9uTG9hZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKF90aGlzKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlLmlzUmVhZHkg
PSB0cnVlOworICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVJbnRlcm5hbFRleHR1cmUoKTsK
KyAgICAgICAgICAgICAgICBpZiAoX3RoaXMub25Mb2FkT2JzZXJ2YWJsZS5oYXNPYnNlcnZlcnMo
KSkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5vbkxvYWRPYnNlcnZhYmxlLm5vdGlmeU9i
c2VydmVycyhfdGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9OworICAgICAgICBfdGhpcy5yZXNldCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlm
IChfdGhpcy5fdGV4dHVyZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFfdGhpcy5fZGlzcGxheWluZ1Bvc3RlclRleHR1
cmUpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAg
ICAgICAgICAgX3RoaXMuX3RleHR1cmUgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgICAgICBfdGhpcy5fdXBkYXRlSW50ZXJuYWxUZXh0dXJlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgaWYgKF90aGlzLl90ZXh0dXJlID09IG51bGwgfHwgIV90aGlzLl90ZXh0dXJl
LmlzUmVhZHkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoX3RoaXMudmlkZW8ucmVhZHlTdGF0ZSA8IF90aGlzLnZpZGVvLkhBVkVfQ1VS
UkVOVF9EQVRBKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKF90aGlzLl9kaXNwbGF5aW5nUG9zdGVyVGV4dHVyZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBmcmFtZUlkID0g
X3RoaXMuZ2V0U2NlbmUoKS5nZXRGcmFtZUlkKCk7CisgICAgICAgICAgICBpZiAoX3RoaXMuX2Zy
YW1lSWQgPT09IGZyYW1lSWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBfdGhpcy5fZnJhbWVJZCA9IGZyYW1lSWQ7CisgICAgICAgICAgICBf
dGhpcy5fZW5naW5lLnVwZGF0ZVZpZGVvVGV4dHVyZShfdGhpcy5fdGV4dHVyZSwgX3RoaXMudmlk
ZW8sIF90aGlzLl9pbnZlcnRZKTsKKyAgICAgICAgfTsKKyAgICAgICAgX3RoaXMuX2VuZ2luZSA9
IF90aGlzLmdldFNjZW5lKCkuZ2V0RW5naW5lKCk7CisgICAgICAgIF90aGlzLl9nZW5lcmF0ZU1p
cE1hcHMgPSBnZW5lcmF0ZU1pcE1hcHM7CisgICAgICAgIF90aGlzLl9pbml0aWFsU2FtcGxpbmdN
b2RlID0gc2FtcGxpbmdNb2RlOworICAgICAgICBfdGhpcy5hdXRvVXBkYXRlVGV4dHVyZSA9IHNl
dHRpbmdzLmF1dG9VcGRhdGVUZXh0dXJlOworICAgICAgICBfdGhpcy5uYW1lID0gbmFtZSB8fCBf
dGhpcy5fZ2V0TmFtZShzcmMpOworICAgICAgICBfdGhpcy52aWRlbyA9IF90aGlzLl9nZXRWaWRl
byhzcmMpOworICAgICAgICBfdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5nczsKKyAgICAgICAgaWYg
KHNldHRpbmdzLnBvc3RlcikgeworICAgICAgICAgICAgX3RoaXMudmlkZW8ucG9zdGVyID0gc2V0
dGluZ3MucG9zdGVyOworICAgICAgICB9CisgICAgICAgIGlmIChzZXR0aW5ncy5hdXRvUGxheSAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBfdGhpcy52aWRlby5hdXRvcGxheSA9IHNldHRp
bmdzLmF1dG9QbGF5OworICAgICAgICB9CisgICAgICAgIGlmIChzZXR0aW5ncy5sb29wICE9PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgICAgIF90aGlzLnZpZGVvLmxvb3AgPSBzZXR0aW5ncy5sb29w
OworICAgICAgICB9CisgICAgICAgIF90aGlzLnZpZGVvLnNldEF0dHJpYnV0ZSgicGxheXNpbmxp
bmUiLCAiIik7CisgICAgICAgIF90aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlZCIs
IF90aGlzLl91cGRhdGVJbnRlcm5hbFRleHR1cmUpOworICAgICAgICBfdGhpcy52aWRlby5hZGRF
dmVudExpc3RlbmVyKCJzZWVrZWQiLCBfdGhpcy5fdXBkYXRlSW50ZXJuYWxUZXh0dXJlKTsKKyAg
ICAgICAgX3RoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigiZW1wdGllZCIsIF90aGlzLnJlc2V0
KTsKKyAgICAgICAgX3RoaXMuX2NyZWF0ZUludGVybmFsVGV4dHVyZU9uRXZlbnQgPSAoc2V0dGlu
Z3MucG9zdGVyICYmICFzZXR0aW5ncy5hdXRvUGxheSkgPyAicGxheSIgOiAiY2FucGxheSI7Cisg
ICAgICAgIF90aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoX3RoaXMuX2NyZWF0ZUludGVybmFs
VGV4dHVyZU9uRXZlbnQsIF90aGlzLl9jcmVhdGVJbnRlcm5hbFRleHR1cmUpOworICAgICAgICB2
YXIgdmlkZW9IYXNFbm91Z2hEYXRhID0gKF90aGlzLnZpZGVvLnJlYWR5U3RhdGUgPj0gX3RoaXMu
dmlkZW8uSEFWRV9DVVJSRU5UX0RBVEEpOworICAgICAgICBpZiAoc2V0dGluZ3MucG9zdGVyICYm
CisgICAgICAgICAgICAoIXNldHRpbmdzLmF1dG9QbGF5IHx8ICF2aWRlb0hhc0Vub3VnaERhdGEp
KSB7CisgICAgICAgICAgICBfdGhpcy5fdGV4dHVyZSA9IF90aGlzLl9lbmdpbmUuY3JlYXRlVGV4
dHVyZShzZXR0aW5ncy5wb3N0ZXIsIGZhbHNlLCB0cnVlLCBzY2VuZSk7CisgICAgICAgICAgICBf
dGhpcy5fZGlzcGxheWluZ1Bvc3RlclRleHR1cmUgPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHZpZGVvSGFzRW5vdWdoRGF0YSkgeworICAgICAgICAgICAgX3RoaXMuX2NyZWF0
ZUludGVybmFsVGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBfdGhpczsKKyAg
ICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZpZGVvVGV4dHVyZS5wcm90b3R5cGUsICJv
blVzZXJBY3Rpb25SZXF1ZXN0ZWRPYnNlcnZhYmxlIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogRXZlbnQgdHJpZ2dlcmQgd2hlbiBhIGRvbSBhY3Rpb24gaXMgcmVxdWlyZWQgYnkgdGhlIHVz
ZXIgdG8gcGxheSB0aGUgdmlkZW8uCisgICAgICAgICAqIFRoaXMgaGFwcGVucyBkdWUgdG8gcmVj
ZW50IGNoYW5nZXMgaW4gYnJvd3NlciBwb2xpY2llcyBwcmV2ZW50aW5nIHZpZGVvIHRvIGF1dG8g
c3RhcnQuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIGlmICghdGhpcy5fb25Vc2VyQWN0aW9uUmVxdWVzdGVkT2JzZXJ2YWJsZSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuX29uVXNlckFjdGlvblJlcXVlc3RlZE9ic2VydmFibGUgPSBuZXcgX01p
c2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0o
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vblVzZXJBY3Rpb25S
ZXF1ZXN0ZWRPYnNlcnZhYmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBWaWRlb1RleHR1cmUu
cHJvdG90eXBlLl9nZXROYW1lID0gZnVuY3Rpb24gKHNyYykgeworICAgICAgICBpZiAoc3JjIGlu
c3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkgeworICAgICAgICAgICAgcmV0dXJuIHNyYy5jdXJy
ZW50U3JjOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2Ygc3JjID09PSAib2JqZWN0Iikg
eworICAgICAgICAgICAgcmV0dXJuIHNyYy50b1N0cmluZygpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBzcmM7CisgICAgfTsKKyAgICBWaWRlb1RleHR1cmUucHJvdG90eXBlLl9nZXRWaWRl
byA9IGZ1bmN0aW9uIChzcmMpIHsKKyAgICAgICAgaWYgKHNyYyBpbnN0YW5jZW9mIEhUTUxWaWRl
b0VsZW1lbnQpIHsKKyAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlRvb2xzIl0uU2V0Q29yc0JlaGF2aW9yKHNyYy5jdXJyZW50U3JjLCBzcmMpOwor
ICAgICAgICAgICAgcmV0dXJuIHNyYzsKKyAgICAgICAgfQorICAgICAgICB2YXIgdmlkZW8gPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpOworICAgICAgICBpZiAodHlwZW9mIHNyYyA9
PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlRvb2xzIl0uU2V0Q29yc0JlaGF2aW9yKHNyYywgdmlkZW8pOworICAgICAg
ICAgICAgdmlkZW8uc3JjID0gc3JjOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5T
ZXRDb3JzQmVoYXZpb3Ioc3JjWzBdLCB2aWRlbyk7CisgICAgICAgICAgICBzcmMuZm9yRWFjaChm
dW5jdGlvbiAodXJsKSB7CisgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNvdXJjZSIpOworICAgICAgICAgICAgICAgIHNvdXJjZS5zcmMgPSB1cmw7
CisgICAgICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoc291cmNlKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2aWRlbzsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEBoaWRkZW4gSW50ZXJuYWwgbWV0aG9kIHRvIGluaXRpYXRlIGB1cGRhdGVgLgorICAg
ICAqLworICAgIFZpZGVvVGV4dHVyZS5wcm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMudXBkYXRlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUg
VGV4dHVyZSBpbiB0aGUgYGF1dG9gIG1vZGUuIERvZXMgbm90IGRvIGFueXRoaW5nIGlmIGBzZXR0
aW5ncy5hdXRvVXBkYXRlVGV4dHVyZWAgaXMgZmFsc2UuCisgICAgICovCisgICAgVmlkZW9UZXh0
dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5h
dXRvVXBkYXRlVGV4dHVyZSkgeworICAgICAgICAgICAgLy8gRXhwZWN0aW5nIHVzZXIgdG8gY2Fs
bCBgdXBkYXRlVGV4dHVyZWAgbWFudWFsbHkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLnVwZGF0ZVRleHR1cmUodHJ1ZSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBVcGRhdGUgVGV4dHVyZSBpbiBgbWFudWFsYCBtb2RlLiBEb2VzIG5vdCBkbyBhbnl0aGlu
ZyBpZiBub3QgdmlzaWJsZSBvciBwYXVzZWQuCisgICAgICogQHBhcmFtIGlzVmlzaWJsZSBWaXNp
YmlsaXR5IHN0YXRlLCBkZXRlY3RlZCBieSB1c2VyIHVzaW5nIGBzY2VuZS5nZXRBY3RpdmVNZXNo
ZXMoKWAgb3Igb3RoZXJ2aXNlLgorICAgICAqLworICAgIFZpZGVvVGV4dHVyZS5wcm90b3R5cGUu
dXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChpc1Zpc2libGUpIHsKKyAgICAgICAgaWYgKCFpc1Zp
c2libGUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy52aWRlby5wYXVzZWQgJiYgdGhpcy5fc3RpbGxJbWFnZUNhcHR1cmVkKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc3RpbGxJbWFnZUNhcHR1cmVkID0g
dHJ1ZTsKKyAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJuYWxUZXh0dXJlKCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDaGFuZ2UgdmlkZW8gY29udGVudC4gQ2hhbmdpbmcgdmlkZW8gaW5zdGFu
Y2Ugb3Igc2V0dGluZyBtdWx0aXBsZSB1cmxzIChhcyBpbiBjb25zdHJ1Y3RvcikgaXMgbm90IHN1
cHBvcnRlZC4KKyAgICAgKiBAcGFyYW0gdXJsIE5ldyB1cmwuCisgICAgICovCisgICAgVmlkZW9U
ZXh0dXJlLnByb3RvdHlwZS51cGRhdGVVUkwgPSBmdW5jdGlvbiAodXJsKSB7CisgICAgICAgIHRo
aXMudmlkZW8uc3JjID0gdXJsOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZSB0aGUg
dGV4dHVyZSBhbmQgcmVsZWFzZSBpdHMgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgICAgICovCisg
ICAgVmlkZW9UZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMu
X29uVXNlckFjdGlvblJlcXVlc3RlZE9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIHRoaXMuX29u
VXNlckFjdGlvblJlcXVlc3RlZE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgICAgIHRoaXMu
X29uVXNlckFjdGlvblJlcXVlc3RlZE9ic2VydmFibGUgPSBudWxsOworICAgICAgICB9CisgICAg
ICAgIHRoaXMudmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl9jcmVhdGVJbnRlcm5hbFRl
eHR1cmVPbkV2ZW50LCB0aGlzLl9jcmVhdGVJbnRlcm5hbFRleHR1cmUpOworICAgICAgICB0aGlz
LnZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhdXNlZCIsIHRoaXMuX3VwZGF0ZUludGVybmFs
VGV4dHVyZSk7CisgICAgICAgIHRoaXMudmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vla2Vk
IiwgdGhpcy5fdXBkYXRlSW50ZXJuYWxUZXh0dXJlKTsKKyAgICAgICAgdGhpcy52aWRlby5yZW1v
dmVFdmVudExpc3RlbmVyKCJlbXB0aWVkIiwgdGhpcy5yZXNldCk7CisgICAgICAgIHRoaXMudmlk
ZW8ucGF1c2UoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSB2aWRlbyB0ZXh0
dXJlIHN0cmFpZ2h0IGZyb20gYSBzdHJlYW0uCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZSB0
aGUgc2NlbmUgdGhlIHRleHR1cmUgc2hvdWxkIGJlIGNyZWF0ZWQgaW4KKyAgICAgKiBAcGFyYW0g
c3RyZWFtIERlZmluZSB0aGUgc3RyZWFtIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSBjcmVhdGVkIGZy
b20KKyAgICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCB2aWRlbyB0ZXh0dXJlIGFzIGEgcHJvbWlz
ZQorICAgICAqLworICAgIFZpZGVvVGV4dHVyZS5DcmVhdGVGcm9tU3RyZWFtQXN5bmMgPSBmdW5j
dGlvbiAoc2NlbmUsIHN0cmVhbSkgeworICAgICAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJ2aWRlbyIpOworICAgICAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ2F1dG9wbGF5
JywgJycpOworICAgICAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ211dGVkJywgJ3RydWUnKTsKKyAg
ICAgICAgdmlkZW8uc2V0QXR0cmlidXRlKCdwbGF5c2lubGluZScsICcnKTsKKyAgICAgICAgdmlk
ZW8ubXV0ZWQgPSB0cnVlOworICAgICAgICBpZiAodmlkZW8ubW96U3JjT2JqZWN0ICE9PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgIC8vIGhhY2sgZm9yIEZpcmVmb3ggPCAxOQorICAgICAgICAg
ICAgdmlkZW8ubW96U3JjT2JqZWN0ID0gc3RyZWFtOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaWYgKHR5cGVvZiB2aWRlby5zcmNPYmplY3QgPT0gIm9iamVjdCIpIHsK
KyAgICAgICAgICAgICAgICB2aWRlby5zcmNPYmplY3QgPSBzdHJlYW07CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aW5kb3cuVVJMID0gd2luZG93
LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMIHx8IHdpbmRvdy5tb3pVUkwgfHwgd2luZG93Lm1zVVJM
OworICAgICAgICAgICAgICAgIHZpZGVvLnNyYyA9ICh3aW5kb3cuVVJMICYmIHdpbmRvdy5VUkwu
Y3JlYXRlT2JqZWN0VVJMKHN0cmVhbSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeworICAgICAgICAgICAg
dmFyIG9uUGxheWluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICByZXNvbHZlKG5l
dyBWaWRlb1RleHR1cmUoInZpZGVvIiwgdmlkZW8sIHNjZW5lLCB0cnVlLCB0cnVlKSk7CisgICAg
ICAgICAgICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGxheWluZyIsIG9uUGxheWlu
Zyk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigi
cGxheWluZyIsIG9uUGxheWluZyk7CisgICAgICAgICAgICB2aWRlby5wbGF5KCk7CisgICAgICAg
IH0pOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHZpZGVvIHRleHR1cmUgc3Ry
YWlnaHQgZnJvbSB5b3VyIFdlYkNhbSB2aWRlbyBmZWVkLgorICAgICAqIEBwYXJhbSBzY2VuZSBE
ZWZpbmUgdGhlIHNjZW5lIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSBjcmVhdGVkIGluCisgICAgICog
QHBhcmFtIGNvbnN0cmFpbnRzIERlZmluZSB0aGUgY29uc3RyYWludHMgdG8gdXNlIHRvIGNyZWF0
ZSB0aGUgd2ViIGNhbSBmZWVkIGZyb20gV2ViUlRDCisgICAgICogQHBhcmFtIGF1ZGlvQ29uc3Rh
aW50cyBEZWZpbmUgdGhlIGF1ZGlvIGNvbnN0cmFpbnRzIHRvIHVzZSB0byBjcmVhdGUgdGhlIHdl
YiBjYW0gZmVlZCBmcm9tIFdlYlJUQworICAgICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIHZpZGVv
IHRleHR1cmUgYXMgYSBwcm9taXNlCisgICAgICovCisgICAgVmlkZW9UZXh0dXJlLkNyZWF0ZUZy
b21XZWJDYW1Bc3luYyA9IGZ1bmN0aW9uIChzY2VuZSwgY29uc3RyYWludHMsIGF1ZGlvQ29uc3Rh
aW50cykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoYXVkaW9Db25z
dGFpbnRzID09PSB2b2lkIDApIHsgYXVkaW9Db25zdGFpbnRzID0gZmFsc2U7IH0KKyAgICAgICAg
dmFyIGNvbnN0cmFpbnRzRGV2aWNlSWQ7CisgICAgICAgIGlmIChjb25zdHJhaW50cyAmJiBjb25z
dHJhaW50cy5kZXZpY2VJZCkgeworICAgICAgICAgICAgY29uc3RyYWludHNEZXZpY2VJZCA9IHsK
KyAgICAgICAgICAgICAgICBleGFjdDogY29uc3RyYWludHMuZGV2aWNlSWQsCisgICAgICAgICAg
ICB9OworICAgICAgICB9CisgICAgICAgIGlmIChuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKSB7Cisg
ICAgICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoewor
ICAgICAgICAgICAgICAgIHZpZGVvOiBjb25zdHJhaW50cywKKyAgICAgICAgICAgICAgICBhdWRp
bzogYXVkaW9Db25zdGFpbnRzCisgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC50aGVu
KGZ1bmN0aW9uIChzdHJlYW0pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuQ3JlYXRl
RnJvbVN0cmVhbUFzeW5jKHNjZW5lLCBzdHJlYW0pOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBuYXZpZ2F0b3IuZ2V0VXNlck1lZGlhID0K
KyAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuZ2V0VXNlck1lZGlhIHx8CisgICAgICAgICAgICAg
ICAgICAgIG5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVkaWEgfHwKKyAgICAgICAgICAgICAgICAg
ICAgbmF2aWdhdG9yLm1vekdldFVzZXJNZWRpYSB8fAorICAgICAgICAgICAgICAgICAgICBuYXZp
Z2F0b3IubXNHZXRVc2VyTWVkaWE7CisgICAgICAgICAgICBpZiAobmF2aWdhdG9yLmdldFVzZXJN
ZWRpYSkgeworICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZXRVc2VyTWVkaWEoeworICAgICAg
ICAgICAgICAgICAgICB2aWRlbzogeworICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlSWQ6
IGNvbnN0cmFpbnRzRGV2aWNlSWQsCisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogKGNvbnN0cmFpbnRzICYmIGNvbnN0cmFp
bnRzLm1pbldpZHRoKSB8fCAyNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiAo
Y29uc3RyYWludHMgJiYgY29uc3RyYWludHMubWF4V2lkdGgpIHx8IDY0MCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtaW46IChjb25zdHJhaW50cyAmJiBjb25zdHJhaW50cy5t
aW5IZWlnaHQpIHx8IDI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IChjb25z
dHJhaW50cyAmJiBjb25zdHJhaW50cy5tYXhIZWlnaHQpIHx8IDQ4MCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg
IGF1ZGlvOiBhdWRpb0NvbnN0YWludHMKKyAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoc3Ry
ZWFtKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5DcmVhdGVGcm9tU3RyZWFt
QXN5bmMoc2NlbmUsIHN0cmVhbSk7CisgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIkxvZ2dlciJdLkVycm9yKGUubmFtZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJObyBz
dXBwb3J0IGZvciB1c2VyTWVkaWEgb24gdGhpcyBkZXZpY2UiKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgYSB2aWRlbyB0ZXh0dXJlIHN0cmFpZ2h0IGZyb20geW91ciBXZWJDYW0g
dmlkZW8gZmVlZC4KKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgdGV4
dHVyZSBzaG91bGQgYmUgY3JlYXRlZCBpbgorICAgICAqIEBwYXJhbSBvblJlYWR5IERlZmluZSBh
IGNhbGxiYWNrIHRvIHRyaWdnZXJlZCBvbmNlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgcmVhZHkKKyAg
ICAgKiBAcGFyYW0gY29uc3RyYWludHMgRGVmaW5lIHRoZSBjb25zdHJhaW50cyB0byB1c2UgdG8g
Y3JlYXRlIHRoZSB3ZWIgY2FtIGZlZWQgZnJvbSBXZWJSVEMKKyAgICAgKiBAcGFyYW0gYXVkaW9D
b25zdGFpbnRzIERlZmluZSB0aGUgYXVkaW8gY29uc3RyYWludHMgdG8gdXNlIHRvIGNyZWF0ZSB0
aGUgd2ViIGNhbSBmZWVkIGZyb20gV2ViUlRDCisgICAgICovCisgICAgVmlkZW9UZXh0dXJlLkNy
ZWF0ZUZyb21XZWJDYW0gPSBmdW5jdGlvbiAoc2NlbmUsIG9uUmVhZHksIGNvbnN0cmFpbnRzLCBh
dWRpb0NvbnN0YWludHMpIHsKKyAgICAgICAgaWYgKGF1ZGlvQ29uc3RhaW50cyA9PT0gdm9pZCAw
KSB7IGF1ZGlvQ29uc3RhaW50cyA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMuQ3JlYXRlRnJvbVdl
YkNhbUFzeW5jKHNjZW5lLCBjb25zdHJhaW50cywgYXVkaW9Db25zdGFpbnRzKQorICAgICAgICAg
ICAgLnRoZW4oZnVuY3Rpb24gKHZpZGVvVGV4dHVyZSkgeworICAgICAgICAgICAgaWYgKG9uUmVh
ZHkpIHsKKyAgICAgICAgICAgICAgICBvblJlYWR5KHZpZGVvVGV4dHVyZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0pCisgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikgeworICAg
ICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxvZ2dl
ciJdLkVycm9yKGVyci5uYW1lKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICByZXR1cm4gVmlk
ZW9UZXh0dXJlOworfShfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siVGV4dHVyZSJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWF0ZXJpYWxzL2NvbG9yQ3VydmVzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9jb2xvckN1cnZlcy50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IENvbG9yQ3VydmVzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9y
Q3VydmVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb2xvckN1cnZlczsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIu
ZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlz
Yy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhz
L21hdGguY29sb3IudHMiKTsKKworCisKKy8qKgorICogVGhlIGNvbG9yIGdyYWRpbmcgY3VydmVz
IHByb3ZpZGUgYWRkaXRpb25hbCBjb2xvciBhZGp1c3RtbmVudCB0aGF0IGlzIGFwcGxpZWQgYWZ0
ZXIgYW55IGNvbG9yIGdyYWRpbmcgdHJhbnNmb3JtICgzRCBMVVQpLgorICogVGhleSBhbGxvdyBi
YXNpYyBhZGp1c3RtZW50IG9mIHNhdHVyYXRpb24gYW5kIHNtYWxsIGV4cG9zdXJlIGFkanVzdG1l
bnRzLCBhbG9uZyB3aXRoIGNvbG9yIGZpbHRlciB0aW50aW5nIHRvIHByb3ZpZGUgd2hpdGUgYmFs
YW5jZSBhZGp1c3RtZW50IG9yIG1vcmUgc3R5bGlzdGljIGVmZmVjdHMuCisgKiBUaGVzZSBhcmUg
c2ltaWxhciB0byBjb250cm9scyBmb3VuZCBpbiBtYW55IHByb2Zlc3Npb25hbCBpbWFnaW5nIG9y
IGNvbG9yaXN0IHNvZnR3YXJlLiBUaGUgZ2xvYmFsIGNvbnRyb2xzIGFyZSBhcHBsaWVkIHRvIHRo
ZSBlbnRpcmUgaW1hZ2UuIEZvciBhZHZhbmNlZCB0dW5pbmcsIGV4dHJhIGNvbnRyb2xzIGFyZSBw
cm92aWRlZCB0byBhZGp1c3QgdGhlIHNoYWRvdywgbWlkdG9uZSBhbmQgaGlnaGxpZ2h0IGFyZWFz
IG9mIHRoZSBpbWFnZTsKKyAqIGNvcnJlc3BvbmRpbmcgdG8gbG93IGx1bWluYW5jZSwgbWVkaXVt
IGx1bWluYW5jZSwgYW5kIGhpZ2ggbHVtaW5hbmNlIGFyZWFzIHJlc3BlY3RpdmVseS4KKyAqLwor
dmFyIENvbG9yQ3VydmVzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0
aW9uIENvbG9yQ3VydmVzKCkgeworICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7CisgICAgICAg
IHRoaXMuX3RlbXBDb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJDb2xvcjQiXSgwLCAwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fZ2xvYmFs
Q3VydmUgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQ29sb3I0Il0oMCwgMCwgMCwgMCk7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodHNDdXJ2ZSA9
IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb2xv
cjQiXSgwLCAwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fbWlkdG9uZXNDdXJ2ZSA9IG5ldyBfTWF0
aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb2xvcjQiXSgwLCAw
LCAwLCAwKTsKKyAgICAgICAgdGhpcy5fc2hhZG93c0N1cnZlID0gbmV3IF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9yNCJdKDAsIDAsIDAsIDApOwor
ICAgICAgICB0aGlzLl9wb3NpdGl2ZUN1cnZlID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9yNCJdKDAsIDAsIDAsIDApOworICAgICAgICB0
aGlzLl9uZWdhdGl2ZUN1cnZlID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkNvbG9yNCJdKDAsIDAsIDAsIDApOworICAgICAgICB0aGlzLl9nbG9i
YWxIdWUgPSAzMDsKKyAgICAgICAgdGhpcy5fZ2xvYmFsRGVuc2l0eSA9IDA7CisgICAgICAgIHRo
aXMuX2dsb2JhbFNhdHVyYXRpb24gPSAwOworICAgICAgICB0aGlzLl9nbG9iYWxFeHBvc3VyZSA9
IDA7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodHNIdWUgPSAzMDsKKyAgICAgICAgdGhpcy5faGln
aGxpZ2h0c0RlbnNpdHkgPSAwOworICAgICAgICB0aGlzLl9oaWdobGlnaHRzU2F0dXJhdGlvbiA9
IDA7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodHNFeHBvc3VyZSA9IDA7CisgICAgICAgIHRoaXMu
X21pZHRvbmVzSHVlID0gMzA7CisgICAgICAgIHRoaXMuX21pZHRvbmVzRGVuc2l0eSA9IDA7Cisg
ICAgICAgIHRoaXMuX21pZHRvbmVzU2F0dXJhdGlvbiA9IDA7CisgICAgICAgIHRoaXMuX21pZHRv
bmVzRXhwb3N1cmUgPSAwOworICAgICAgICB0aGlzLl9zaGFkb3dzSHVlID0gMzA7CisgICAgICAg
IHRoaXMuX3NoYWRvd3NEZW5zaXR5ID0gMDsKKyAgICAgICAgdGhpcy5fc2hhZG93c1NhdHVyYXRp
b24gPSAwOworICAgICAgICB0aGlzLl9zaGFkb3dzRXhwb3N1cmUgPSAwOworICAgIH0KKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAiZ2xvYmFsSHVlIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZ2xvYmFsIEh1ZSB2YWx1ZS4KKyAg
ICAgICAgICogVGhlIGh1ZSB2YWx1ZSBpcyBhIHN0YW5kYXJkIEhTQiBodWUgaW4gdGhlIHJhbmdl
IFswLDM2MF0gd2hlcmUgMD1yZWQsIDEyMD1ncmVlbiBhbmQgMjQwPWJsdWUuIFRoZSBkZWZhdWx0
IHZhbHVlIGlzIDMwIGRlZ3JlZXMgKG9yYW5nZSkuCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbG9iYWxIdWU7CisgICAg
ICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBnbG9iYWwgSHVlIHZhbHVl
LgorICAgICAgICAgKiBUaGUgaHVlIHZhbHVlIGlzIGEgc3RhbmRhcmQgSFNCIGh1ZSBpbiB0aGUg
cmFuZ2UgWzAsMzYwXSB3aGVyZSAwPXJlZCwgMTIwPWdyZWVuIGFuZCAyNDA9Ymx1ZS4gVGhlIGRl
ZmF1bHQgdmFsdWUgaXMgMzAgZGVncmVlcyAob3JhbmdlKS4KKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9nbG9iYWxIdWUgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yQ3VydmVzLnByb3RvdHlwZSwgImdsb2Jh
bERlbnNpdHkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBnbG9iYWwgRGVu
c2l0eSB2YWx1ZS4KKyAgICAgICAgICogVGhlIGRlbnNpdHkgdmFsdWUgaXMgaW4gcmFuZ2UgWy0x
MDAsKzEwMF0gd2hlcmUgMCBtZWFucyB0aGUgY29sb3IgZmlsdGVyIGhhcyBubyBlZmZlY3QgYW5k
ICsxMDAgbWVhbnMgdGhlIGNvbG9yIGZpbHRlciBoYXMgbWF4aW11bSBlZmZlY3QuCisgICAgICAg
ICAqIFZhbHVlcyBsZXNzIHRoYW4gemVybyBwcm92aWRlIGEgZmlsdGVyIG9mIG9wcG9zaXRlIGh1
ZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2dsb2JhbERlbnNpdHk7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTZXRzIHRoZSBnbG9iYWwgRGVuc2l0eSB2YWx1ZS4KKyAgICAgICAgICogVGhlIGRl
bnNpdHkgdmFsdWUgaXMgaW4gcmFuZ2UgWy0xMDAsKzEwMF0gd2hlcmUgMCBtZWFucyB0aGUgY29s
b3IgZmlsdGVyIGhhcyBubyBlZmZlY3QgYW5kICsxMDAgbWVhbnMgdGhlIGNvbG9yIGZpbHRlciBo
YXMgbWF4aW11bSBlZmZlY3QuCisgICAgICAgICAqIFZhbHVlcyBsZXNzIHRoYW4gemVybyBwcm92
aWRlIGEgZmlsdGVyIG9mIG9wcG9zaXRlIGh1ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9nbG9iYWxEZW5zaXR5ID0gdmFs
dWU7CisgICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvckN1cnZlcy5wcm90b3R5cGUsICJnbG9iYWxT
YXR1cmF0aW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZ2xvYmFsIFNh
dHVyYXRpb24gdmFsdWUuCisgICAgICAgICAqIFRoaXMgaXMgYW4gYWRqdXN0bWVudCB2YWx1ZSBp
biB0aGUgcmFuZ2UgWy0xMDAsKzEwMF0sIHdoZXJlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDAuMCBt
YWtlcyBubyBhZGp1c3RtZW50LCBwb3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2Ugc2F0dXJhdGlvbiBh
bmQgbmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIHNhdHVyYXRpb24uCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbG9iYWxT
YXR1cmF0aW9uOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUg
Z2xvYmFsIFNhdHVyYXRpb24gdmFsdWUuCisgICAgICAgICAqIFRoaXMgaXMgYW4gYWRqdXN0bWVu
dCB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xMDAsKzEwMF0sIHdoZXJlIHRoZSBkZWZhdWx0IHZhbHVl
IG9mIDAuMCBtYWtlcyBubyBhZGp1c3RtZW50LCBwb3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2Ugc2F0
dXJhdGlvbiBhbmQgbmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIHNhdHVyYXRpb24uCisgICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5f
Z2xvYmFsU2F0dXJhdGlvbiA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVl
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JDdXJ2
ZXMucHJvdG90eXBlLCAiZ2xvYmFsRXhwb3N1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBnbG9iYWwgRXhwb3N1cmUgdmFsdWUuCisgICAgICAgICAqIFRoaXMgaXMgYW4g
YWRqdXN0bWVudCB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xMDAsKzEwMF0sIHdoZXJlIHRoZSBkZWZh
dWx0IHZhbHVlIG9mIDAuMCBtYWtlcyBubyBhZGp1c3RtZW50LCBwb3NpdGl2ZSB2YWx1ZXMgaW5j
cmVhc2UgZXhwb3N1cmUgYW5kIG5lZ2F0aXZlIHZhbHVlcyBkZWNyZWFzZSBleHBvc3VyZS4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2dsb2JhbEV4cG9zdXJlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAg
ICogU2V0cyB0aGUgZ2xvYmFsIEV4cG9zdXJlIHZhbHVlLgorICAgICAgICAgKiBUaGlzIGlzIGFu
IGFkanVzdG1lbnQgdmFsdWUgaW4gdGhlIHJhbmdlIFstMTAwLCsxMDBdLCB3aGVyZSB0aGUgZGVm
YXVsdCB2YWx1ZSBvZiAwLjAgbWFrZXMgbm8gYWRqdXN0bWVudCwgcG9zaXRpdmUgdmFsdWVzIGlu
Y3JlYXNlIGV4cG9zdXJlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgZGVjcmVhc2UgZXhwb3N1cmUuCisg
ICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAg
dGhpcy5fZ2xvYmFsRXhwb3N1cmUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0g
dHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9y
Q3VydmVzLnByb3RvdHlwZSwgImhpZ2hsaWdodHNIdWUiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSBoaWdobGlnaHRzIEh1ZSB2YWx1ZS4KKyAgICAgICAgICogVGhlIGh1ZSB2
YWx1ZSBpcyBhIHN0YW5kYXJkIEhTQiBodWUgaW4gdGhlIHJhbmdlIFswLDM2MF0gd2hlcmUgMD1y
ZWQsIDEyMD1ncmVlbiBhbmQgMjQwPWJsdWUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDMwIGRlZ3Jl
ZXMgKG9yYW5nZSkuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHRzSHVlOworICAgICAgICB9LAorICAgICAg
ICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgaGlnaGxpZ2h0cyBIdWUgdmFsdWUuCisgICAgICAg
ICAqIFRoZSBodWUgdmFsdWUgaXMgYSBzdGFuZGFyZCBIU0IgaHVlIGluIHRoZSByYW5nZSBbMCwz
NjBdIHdoZXJlIDA9cmVkLCAxMjA9Z3JlZW4gYW5kIDI0MD1ibHVlLiBUaGUgZGVmYXVsdCB2YWx1
ZSBpcyAzMCBkZWdyZWVzIChvcmFuZ2UpLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodHNIdWUgPSB2YWx1ZTsK
KyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yQ3VydmVzLnByb3RvdHlwZSwgImhpZ2hsaWdodHNE
ZW5zaXR5IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgaGlnaGxpZ2h0cyBE
ZW5zaXR5IHZhbHVlLgorICAgICAgICAgKiBUaGUgZGVuc2l0eSB2YWx1ZSBpcyBpbiByYW5nZSBb
LTEwMCwrMTAwXSB3aGVyZSAwIG1lYW5zIHRoZSBjb2xvciBmaWx0ZXIgaGFzIG5vIGVmZmVjdCBh
bmQgKzEwMCBtZWFucyB0aGUgY29sb3IgZmlsdGVyIGhhcyBtYXhpbXVtIGVmZmVjdC4KKyAgICAg
ICAgICogVmFsdWVzIGxlc3MgdGhhbiB6ZXJvIHByb3ZpZGUgYSBmaWx0ZXIgb2Ygb3Bwb3NpdGUg
aHVlLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0c0RlbnNpdHk7CisgICAgICAgIH0sCisgICAgICAgIC8q
KgorICAgICAgICAgKiBTZXRzIHRoZSBoaWdobGlnaHRzIERlbnNpdHkgdmFsdWUuCisgICAgICAg
ICAqIFRoZSBkZW5zaXR5IHZhbHVlIGlzIGluIHJhbmdlIFstMTAwLCsxMDBdIHdoZXJlIDAgbWVh
bnMgdGhlIGNvbG9yIGZpbHRlciBoYXMgbm8gZWZmZWN0IGFuZCArMTAwIG1lYW5zIHRoZSBjb2xv
ciBmaWx0ZXIgaGFzIG1heGltdW0gZWZmZWN0LgorICAgICAgICAgKiBWYWx1ZXMgbGVzcyB0aGFu
IHplcm8gcHJvdmlkZSBhIGZpbHRlciBvZiBvcHBvc2l0ZSBodWUuCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0
c0RlbnNpdHkgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yQ3VydmVzLnByb3Rv
dHlwZSwgImhpZ2hsaWdodHNTYXR1cmF0aW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgaGlnaGxpZ2h0cyBTYXR1cmF0aW9uIHZhbHVlLgorICAgICAgICAgKiBUaGlzIGlz
IGFuIGFkanVzdG1lbnQgdmFsdWUgaW4gdGhlIHJhbmdlIFstMTAwLCsxMDBdLCB3aGVyZSB0aGUg
ZGVmYXVsdCB2YWx1ZSBvZiAwLjAgbWFrZXMgbm8gYWRqdXN0bWVudCwgcG9zaXRpdmUgdmFsdWVz
IGluY3JlYXNlIHNhdHVyYXRpb24gYW5kIG5lZ2F0aXZlIHZhbHVlcyBkZWNyZWFzZSBzYXR1cmF0
aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0c1NhdHVyYXRpb247CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBoaWdobGlnaHRzIFNhdHVyYXRpb24gdmFsdWUuCisg
ICAgICAgICAqIFRoaXMgaXMgYW4gYWRqdXN0bWVudCB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xMDAs
KzEwMF0sIHdoZXJlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDAuMCBtYWtlcyBubyBhZGp1c3RtZW50
LCBwb3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2Ugc2F0dXJhdGlvbiBhbmQgbmVnYXRpdmUgdmFsdWVz
IGRlY3JlYXNlIHNhdHVyYXRpb24uCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0c1NhdHVyYXRpb24gPSB2YWx1
ZTsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yQ3VydmVzLnByb3RvdHlwZSwgImhpZ2hsaWdo
dHNFeHBvc3VyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGhpZ2hsaWdo
dHMgRXhwb3N1cmUgdmFsdWUuCisgICAgICAgICAqIFRoaXMgaXMgYW4gYWRqdXN0bWVudCB2YWx1
ZSBpbiB0aGUgcmFuZ2UgWy0xMDAsKzEwMF0sIHdoZXJlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDAu
MCBtYWtlcyBubyBhZGp1c3RtZW50LCBwb3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2UgZXhwb3N1cmUg
YW5kIG5lZ2F0aXZlIHZhbHVlcyBkZWNyZWFzZSBleHBvc3VyZS4KKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hpZ2hsaWdo
dHNFeHBvc3VyZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhl
IGhpZ2hsaWdodHMgRXhwb3N1cmUgdmFsdWUuCisgICAgICAgICAqIFRoaXMgaXMgYW4gYWRqdXN0
bWVudCB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xMDAsKzEwMF0sIHdoZXJlIHRoZSBkZWZhdWx0IHZh
bHVlIG9mIDAuMCBtYWtlcyBubyBhZGp1c3RtZW50LCBwb3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2Ug
ZXhwb3N1cmUgYW5kIG5lZ2F0aXZlIHZhbHVlcyBkZWNyZWFzZSBleHBvc3VyZS4KKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9o
aWdobGlnaHRzRXhwb3N1cmUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yQ3Vy
dmVzLnByb3RvdHlwZSwgIm1pZHRvbmVzSHVlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgbWlkdG9uZXMgSHVlIHZhbHVlLgorICAgICAgICAgKiBUaGUgaHVlIHZhbHVlIGlz
IGEgc3RhbmRhcmQgSFNCIGh1ZSBpbiB0aGUgcmFuZ2UgWzAsMzYwXSB3aGVyZSAwPXJlZCwgMTIw
PWdyZWVuIGFuZCAyNDA9Ymx1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzAgZGVncmVlcyAob3Jh
bmdlKS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX21pZHRvbmVzSHVlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAg
ICAgICAgICogU2V0cyB0aGUgbWlkdG9uZXMgSHVlIHZhbHVlLgorICAgICAgICAgKiBUaGUgaHVl
IHZhbHVlIGlzIGEgc3RhbmRhcmQgSFNCIGh1ZSBpbiB0aGUgcmFuZ2UgWzAsMzYwXSB3aGVyZSAw
PXJlZCwgMTIwPWdyZWVuIGFuZCAyNDA9Ymx1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzAgZGVn
cmVlcyAob3JhbmdlKS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9taWR0b25lc0h1ZSA9IHZhbHVlOworICAgICAgICAgICAg
dGhpcy5fZGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAibWlkdG9uZXNEZW5zaXR5IiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbWlkdG9uZXMgRGVuc2l0eSB2YWx1ZS4KKyAg
ICAgICAgICogVGhlIGRlbnNpdHkgdmFsdWUgaXMgaW4gcmFuZ2UgWy0xMDAsKzEwMF0gd2hlcmUg
MCBtZWFucyB0aGUgY29sb3IgZmlsdGVyIGhhcyBubyBlZmZlY3QgYW5kICsxMDAgbWVhbnMgdGhl
IGNvbG9yIGZpbHRlciBoYXMgbWF4aW11bSBlZmZlY3QuCisgICAgICAgICAqIFZhbHVlcyBsZXNz
IHRoYW4gemVybyBwcm92aWRlIGEgZmlsdGVyIG9mIG9wcG9zaXRlIGh1ZS4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21p
ZHRvbmVzRGVuc2l0eTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMg
dGhlIG1pZHRvbmVzIERlbnNpdHkgdmFsdWUuCisgICAgICAgICAqIFRoZSBkZW5zaXR5IHZhbHVl
IGlzIGluIHJhbmdlIFstMTAwLCsxMDBdIHdoZXJlIDAgbWVhbnMgdGhlIGNvbG9yIGZpbHRlciBo
YXMgbm8gZWZmZWN0IGFuZCArMTAwIG1lYW5zIHRoZSBjb2xvciBmaWx0ZXIgaGFzIG1heGltdW0g
ZWZmZWN0LgorICAgICAgICAgKiBWYWx1ZXMgbGVzcyB0aGFuIHplcm8gcHJvdmlkZSBhIGZpbHRl
ciBvZiBvcHBvc2l0ZSBodWUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbWlkdG9uZXNEZW5zaXR5ID0gdmFsdWU7CisgICAg
ICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShDb2xvckN1cnZlcy5wcm90b3R5cGUsICJtaWR0b25lc1NhdHVyYXRp
b24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBtaWR0b25lcyBTYXR1cmF0
aW9uIHZhbHVlLgorICAgICAgICAgKiBUaGlzIGlzIGFuIGFkanVzdG1lbnQgdmFsdWUgaW4gdGhl
IHJhbmdlIFstMTAwLCsxMDBdLCB3aGVyZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAwLjAgbWFrZXMg
bm8gYWRqdXN0bWVudCwgcG9zaXRpdmUgdmFsdWVzIGluY3JlYXNlIHNhdHVyYXRpb24gYW5kIG5l
Z2F0aXZlIHZhbHVlcyBkZWNyZWFzZSBzYXR1cmF0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWlkdG9uZXNTYXR1
cmF0aW9uOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgbWlk
dG9uZXMgU2F0dXJhdGlvbiB2YWx1ZS4KKyAgICAgICAgICogVGhpcyBpcyBhbiBhZGp1c3RtZW50
IHZhbHVlIGluIHRoZSByYW5nZSBbLTEwMCwrMTAwXSwgd2hlcmUgdGhlIGRlZmF1bHQgdmFsdWUg
b2YgMC4wIG1ha2VzIG5vIGFkanVzdG1lbnQsIHBvc2l0aXZlIHZhbHVlcyBpbmNyZWFzZSBzYXR1
cmF0aW9uIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgZGVjcmVhc2Ugc2F0dXJhdGlvbi4KKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9t
aWR0b25lc1NhdHVyYXRpb24gPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yQ3Vy
dmVzLnByb3RvdHlwZSwgIm1pZHRvbmVzRXhwb3N1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSBtaWR0b25lcyBFeHBvc3VyZSB2YWx1ZS4KKyAgICAgICAgICogVGhpcyBp
cyBhbiBhZGp1c3RtZW50IHZhbHVlIGluIHRoZSByYW5nZSBbLTEwMCwrMTAwXSwgd2hlcmUgdGhl
IGRlZmF1bHQgdmFsdWUgb2YgMC4wIG1ha2VzIG5vIGFkanVzdG1lbnQsIHBvc2l0aXZlIHZhbHVl
cyBpbmNyZWFzZSBleHBvc3VyZSBhbmQgbmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIGV4cG9zdXJl
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fbWlkdG9uZXNFeHBvc3VyZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNldHMgdGhlIG1pZHRvbmVzIEV4cG9zdXJlIHZhbHVlLgorICAgICAgICAgKiBU
aGlzIGlzIGFuIGFkanVzdG1lbnQgdmFsdWUgaW4gdGhlIHJhbmdlIFstMTAwLCsxMDBdLCB3aGVy
ZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAwLjAgbWFrZXMgbm8gYWRqdXN0bWVudCwgcG9zaXRpdmUg
dmFsdWVzIGluY3JlYXNlIGV4cG9zdXJlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgZGVjcmVhc2UgZXhw
b3N1cmUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgdGhpcy5fbWlkdG9uZXNFeHBvc3VyZSA9IHZhbHVlOworICAgICAgICAgICAgdGhp
cy5fZGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAic2hhZG93c0h1ZSIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIHNoYWRvd3MgSHVlIHZhbHVlLgorICAgICAgICAgKiBUaGUg
aHVlIHZhbHVlIGlzIGEgc3RhbmRhcmQgSFNCIGh1ZSBpbiB0aGUgcmFuZ2UgWzAsMzYwXSB3aGVy
ZSAwPXJlZCwgMTIwPWdyZWVuIGFuZCAyNDA9Ymx1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzAg
ZGVncmVlcyAob3JhbmdlKS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRvd3NIdWU7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBzaGFkb3dzIEh1ZSB2YWx1ZS4KKyAgICAgICAg
ICogVGhlIGh1ZSB2YWx1ZSBpcyBhIHN0YW5kYXJkIEhTQiBodWUgaW4gdGhlIHJhbmdlIFswLDM2
MF0gd2hlcmUgMD1yZWQsIDEyMD1ncmVlbiBhbmQgMjQwPWJsdWUuIFRoZSBkZWZhdWx0IHZhbHVl
IGlzIDMwIGRlZ3JlZXMgKG9yYW5nZSkuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fc2hhZG93c0h1ZSA9IHZhbHVlOworICAg
ICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAic2hhZG93c0RlbnNpdHki
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBzaGFkb3dzIERlbnNpdHkgdmFs
dWUuCisgICAgICAgICAqIFRoZSBkZW5zaXR5IHZhbHVlIGlzIGluIHJhbmdlIFstMTAwLCsxMDBd
IHdoZXJlIDAgbWVhbnMgdGhlIGNvbG9yIGZpbHRlciBoYXMgbm8gZWZmZWN0IGFuZCArMTAwIG1l
YW5zIHRoZSBjb2xvciBmaWx0ZXIgaGFzIG1heGltdW0gZWZmZWN0LgorICAgICAgICAgKiBWYWx1
ZXMgbGVzcyB0aGFuIHplcm8gcHJvdmlkZSBhIGZpbHRlciBvZiBvcHBvc2l0ZSBodWUuCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9zaGFkb3dzRGVuc2l0eTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFNldHMgdGhlIHNoYWRvd3MgRGVuc2l0eSB2YWx1ZS4KKyAgICAgICAgICogVGhlIGRlbnNpdHkg
dmFsdWUgaXMgaW4gcmFuZ2UgWy0xMDAsKzEwMF0gd2hlcmUgMCBtZWFucyB0aGUgY29sb3IgZmls
dGVyIGhhcyBubyBlZmZlY3QgYW5kICsxMDAgbWVhbnMgdGhlIGNvbG9yIGZpbHRlciBoYXMgbWF4
aW11bSBlZmZlY3QuCisgICAgICAgICAqIFZhbHVlcyBsZXNzIHRoYW4gemVybyBwcm92aWRlIGEg
ZmlsdGVyIG9mIG9wcG9zaXRlIGh1ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dzRGVuc2l0eSA9IHZhbHVlOwor
ICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAic2hhZG93c1NhdHVy
YXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBzaGFkb3dzIFNhdHVy
YXRpb24gdmFsdWUuCisgICAgICAgICAqIFRoaXMgaXMgYW4gYWRqdXN0bWVudCB2YWx1ZSBpbiB0
aGUgcmFuZ2UgWy0xMDAsKzEwMF0sIHdoZXJlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDAuMCBtYWtl
cyBubyBhZGp1c3RtZW50LCBwb3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2Ugc2F0dXJhdGlvbiBhbmQg
bmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIHNhdHVyYXRpb24uCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFkb3dzU2F0
dXJhdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHNo
YWRvd3MgU2F0dXJhdGlvbiB2YWx1ZS4KKyAgICAgICAgICogVGhpcyBpcyBhbiBhZGp1c3RtZW50
IHZhbHVlIGluIHRoZSByYW5nZSBbLTEwMCwrMTAwXSwgd2hlcmUgdGhlIGRlZmF1bHQgdmFsdWUg
b2YgMC4wIG1ha2VzIG5vIGFkanVzdG1lbnQsIHBvc2l0aXZlIHZhbHVlcyBpbmNyZWFzZSBzYXR1
cmF0aW9uIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgZGVjcmVhc2Ugc2F0dXJhdGlvbi4KKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9z
aGFkb3dzU2F0dXJhdGlvbiA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVl
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JDdXJ2
ZXMucHJvdG90eXBlLCAic2hhZG93c0V4cG9zdXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgc2hhZG93cyBFeHBvc3VyZSB2YWx1ZS4KKyAgICAgICAgICogVGhpcyBpcyBh
biBhZGp1c3RtZW50IHZhbHVlIGluIHRoZSByYW5nZSBbLTEwMCwrMTAwXSwgd2hlcmUgdGhlIGRl
ZmF1bHQgdmFsdWUgb2YgMC4wIG1ha2VzIG5vIGFkanVzdG1lbnQsIHBvc2l0aXZlIHZhbHVlcyBp
bmNyZWFzZSBleHBvc3VyZSBhbmQgbmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIGV4cG9zdXJlLgor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fc2hhZG93c0V4cG9zdXJlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAg
ICAgICogU2V0cyB0aGUgc2hhZG93cyBFeHBvc3VyZSB2YWx1ZS4KKyAgICAgICAgICogVGhpcyBp
cyBhbiBhZGp1c3RtZW50IHZhbHVlIGluIHRoZSByYW5nZSBbLTEwMCwrMTAwXSwgd2hlcmUgdGhl
IGRlZmF1bHQgdmFsdWUgb2YgMC4wIG1ha2VzIG5vIGFkanVzdG1lbnQsIHBvc2l0aXZlIHZhbHVl
cyBpbmNyZWFzZSBleHBvc3VyZSBhbmQgbmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIGV4cG9zdXJl
LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3NoYWRvd3NFeHBvc3VyZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fZGly
dHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgVGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAg
ICBDb2xvckN1cnZlcy5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIkNvbG9yQ3VydmVzIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRz
IHRoZSBjb2xvciBjdXJ2ZXMgdG8gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0gY29sb3JDdXJ2
ZXMgVGhlIGNvbG9yIGN1cnZlIHRvIGJpbmQKKyAgICAgKiBAcGFyYW0gZWZmZWN0IFRoZSBlZmZl
Y3QgdG8gYmluZCB0bworICAgICAqIEBwYXJhbSBwb3NpdGl2ZVVuaWZvcm0gVGhlIHBvc2l0aXZl
IHVuaWZvcm0gc2hhZGVyIHBhcmFtZXRlcgorICAgICAqIEBwYXJhbSBuZXV0cmFsVW5pZm9ybSBU
aGUgbmV1dHJhbCB1bmlmb3JtIHNoYWRlciBwYXJhbWV0ZXIKKyAgICAgKiBAcGFyYW0gbmVnYXRp
dmVVbmlmb3JtIFRoZSBuZWdhdGl2ZSB1bmlmb3JtIHNoYWRlciBwYXJhbWV0ZXIKKyAgICAgKi8K
KyAgICBDb2xvckN1cnZlcy5CaW5kID0gZnVuY3Rpb24gKGNvbG9yQ3VydmVzLCBlZmZlY3QsIHBv
c2l0aXZlVW5pZm9ybSwgbmV1dHJhbFVuaWZvcm0sIG5lZ2F0aXZlVW5pZm9ybSkgeworICAgICAg
ICBpZiAocG9zaXRpdmVVbmlmb3JtID09PSB2b2lkIDApIHsgcG9zaXRpdmVVbmlmb3JtID0gInZD
YW1lcmFDb2xvckN1cnZlUG9zaXRpdmUiOyB9CisgICAgICAgIGlmIChuZXV0cmFsVW5pZm9ybSA9
PT0gdm9pZCAwKSB7IG5ldXRyYWxVbmlmb3JtID0gInZDYW1lcmFDb2xvckN1cnZlTmV1dHJhbCI7
IH0KKyAgICAgICAgaWYgKG5lZ2F0aXZlVW5pZm9ybSA9PT0gdm9pZCAwKSB7IG5lZ2F0aXZlVW5p
Zm9ybSA9ICJ2Q2FtZXJhQ29sb3JDdXJ2ZU5lZ2F0aXZlIjsgfQorICAgICAgICBpZiAoY29sb3JD
dXJ2ZXMuX2RpcnR5KSB7CisgICAgICAgICAgICBjb2xvckN1cnZlcy5fZGlydHkgPSBmYWxzZTsK
KyAgICAgICAgICAgIC8vIEZpbGwgaW4gZ2xvYmFsIGluZm8uCisgICAgICAgICAgICBjb2xvckN1
cnZlcy5nZXRDb2xvckdyYWRpbmdEYXRhVG9SZWYoY29sb3JDdXJ2ZXMuX2dsb2JhbEh1ZSwgY29s
b3JDdXJ2ZXMuX2dsb2JhbERlbnNpdHksIGNvbG9yQ3VydmVzLl9nbG9iYWxTYXR1cmF0aW9uLCBj
b2xvckN1cnZlcy5fZ2xvYmFsRXhwb3N1cmUsIGNvbG9yQ3VydmVzLl9nbG9iYWxDdXJ2ZSk7Cisg
ICAgICAgICAgICAvLyBDb21wdXRlIGhpZ2hsaWdodHMgaW5mby4KKyAgICAgICAgICAgIGNvbG9y
Q3VydmVzLmdldENvbG9yR3JhZGluZ0RhdGFUb1JlZihjb2xvckN1cnZlcy5faGlnaGxpZ2h0c0h1
ZSwgY29sb3JDdXJ2ZXMuX2hpZ2hsaWdodHNEZW5zaXR5LCBjb2xvckN1cnZlcy5faGlnaGxpZ2h0
c1NhdHVyYXRpb24sIGNvbG9yQ3VydmVzLl9oaWdobGlnaHRzRXhwb3N1cmUsIGNvbG9yQ3VydmVz
Ll90ZW1wQ29sb3IpOworICAgICAgICAgICAgY29sb3JDdXJ2ZXMuX3RlbXBDb2xvci5tdWx0aXBs
eVRvUmVmKGNvbG9yQ3VydmVzLl9nbG9iYWxDdXJ2ZSwgY29sb3JDdXJ2ZXMuX2hpZ2hsaWdodHND
dXJ2ZSk7CisgICAgICAgICAgICAvLyBDb21wdXRlIG1pZHRvbmVzIGluZm8uCisgICAgICAgICAg
ICBjb2xvckN1cnZlcy5nZXRDb2xvckdyYWRpbmdEYXRhVG9SZWYoY29sb3JDdXJ2ZXMuX21pZHRv
bmVzSHVlLCBjb2xvckN1cnZlcy5fbWlkdG9uZXNEZW5zaXR5LCBjb2xvckN1cnZlcy5fbWlkdG9u
ZXNTYXR1cmF0aW9uLCBjb2xvckN1cnZlcy5fbWlkdG9uZXNFeHBvc3VyZSwgY29sb3JDdXJ2ZXMu
X3RlbXBDb2xvcik7CisgICAgICAgICAgICBjb2xvckN1cnZlcy5fdGVtcENvbG9yLm11bHRpcGx5
VG9SZWYoY29sb3JDdXJ2ZXMuX2dsb2JhbEN1cnZlLCBjb2xvckN1cnZlcy5fbWlkdG9uZXNDdXJ2
ZSk7CisgICAgICAgICAgICAvLyBDb21wdXRlIHNoYWRvd3MgaW5mby4KKyAgICAgICAgICAgIGNv
bG9yQ3VydmVzLmdldENvbG9yR3JhZGluZ0RhdGFUb1JlZihjb2xvckN1cnZlcy5fc2hhZG93c0h1
ZSwgY29sb3JDdXJ2ZXMuX3NoYWRvd3NEZW5zaXR5LCBjb2xvckN1cnZlcy5fc2hhZG93c1NhdHVy
YXRpb24sIGNvbG9yQ3VydmVzLl9zaGFkb3dzRXhwb3N1cmUsIGNvbG9yQ3VydmVzLl90ZW1wQ29s
b3IpOworICAgICAgICAgICAgY29sb3JDdXJ2ZXMuX3RlbXBDb2xvci5tdWx0aXBseVRvUmVmKGNv
bG9yQ3VydmVzLl9nbG9iYWxDdXJ2ZSwgY29sb3JDdXJ2ZXMuX3NoYWRvd3NDdXJ2ZSk7CisgICAg
ICAgICAgICAvLyBDb21wdXRlIGRlbHRhcyAobmV1dHJhbCBpcyBtaWR0b25lcykuCisgICAgICAg
ICAgICBjb2xvckN1cnZlcy5faGlnaGxpZ2h0c0N1cnZlLnN1YnRyYWN0VG9SZWYoY29sb3JDdXJ2
ZXMuX21pZHRvbmVzQ3VydmUsIGNvbG9yQ3VydmVzLl9wb3NpdGl2ZUN1cnZlKTsKKyAgICAgICAg
ICAgIGNvbG9yQ3VydmVzLl9taWR0b25lc0N1cnZlLnN1YnRyYWN0VG9SZWYoY29sb3JDdXJ2ZXMu
X3NoYWRvd3NDdXJ2ZSwgY29sb3JDdXJ2ZXMuX25lZ2F0aXZlQ3VydmUpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDQocG9zaXRp
dmVVbmlmb3JtLCBjb2xvckN1cnZlcy5fcG9zaXRpdmVDdXJ2ZS5yLCBjb2xvckN1cnZlcy5fcG9z
aXRpdmVDdXJ2ZS5nLCBjb2xvckN1cnZlcy5fcG9zaXRpdmVDdXJ2ZS5iLCBjb2xvckN1cnZlcy5f
cG9zaXRpdmVDdXJ2ZS5hKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDQobmV1dHJhbFVu
aWZvcm0sIGNvbG9yQ3VydmVzLl9taWR0b25lc0N1cnZlLnIsIGNvbG9yQ3VydmVzLl9taWR0b25l
c0N1cnZlLmcsIGNvbG9yQ3VydmVzLl9taWR0b25lc0N1cnZlLmIsIGNvbG9yQ3VydmVzLl9taWR0
b25lc0N1cnZlLmEpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0NChuZWdhdGl2ZVVuaWZv
cm0sIGNvbG9yQ3VydmVzLl9uZWdhdGl2ZUN1cnZlLnIsIGNvbG9yQ3VydmVzLl9uZWdhdGl2ZUN1
cnZlLmcsIGNvbG9yQ3VydmVzLl9uZWdhdGl2ZUN1cnZlLmIsIGNvbG9yQ3VydmVzLl9uZWdhdGl2
ZUN1cnZlLmEpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlIHRo
ZSBsaXN0IG9mIHVuaWZvcm1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ29sb3JDdXJ2ZXMgZWZmZWN0
cy4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybXNMaXN0IFRoZSBsaXN0IG9mIHVuaWZvcm1zIHVzZWQg
aW4gdGhlIGVmZmVjdAorICAgICAqLworICAgIENvbG9yQ3VydmVzLlByZXBhcmVVbmlmb3JtcyA9
IGZ1bmN0aW9uICh1bmlmb3Jtc0xpc3QpIHsKKyAgICAgICAgdW5pZm9ybXNMaXN0LnB1c2goInZD
YW1lcmFDb2xvckN1cnZlTmV1dHJhbCIsICJ2Q2FtZXJhQ29sb3JDdXJ2ZVBvc2l0aXZlIiwgInZD
YW1lcmFDb2xvckN1cnZlTmVnYXRpdmUiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVy
bnMgY29sb3IgZ3JhZGluZyBkYXRhIGJhc2VkIG9uIGEgaHVlLCBkZW5zaXR5LCBzYXR1cmF0aW9u
IGFuZCBleHBvc3VyZSB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gZmlsdGVySHVlIFRoZSBodWUgb2Yg
dGhlIGNvbG9yIGZpbHRlci4KKyAgICAgKiBAcGFyYW0gZmlsdGVyRGVuc2l0eSBUaGUgZGVuc2l0
eSBvZiB0aGUgY29sb3IgZmlsdGVyLgorICAgICAqIEBwYXJhbSBzYXR1cmF0aW9uIFRoZSBzYXR1
cmF0aW9uLgorICAgICAqIEBwYXJhbSBleHBvc3VyZSBUaGUgZXhwb3N1cmUuCisgICAgICogQHBh
cmFtIHJlc3VsdCBUaGUgcmVzdWx0IGRhdGEgY29udGFpbmVyLgorICAgICAqLworICAgIENvbG9y
Q3VydmVzLnByb3RvdHlwZS5nZXRDb2xvckdyYWRpbmdEYXRhVG9SZWYgPSBmdW5jdGlvbiAoaHVl
LCBkZW5zaXR5LCBzYXR1cmF0aW9uLCBleHBvc3VyZSwgcmVzdWx0KSB7CisgICAgICAgIGlmICho
dWUgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGh1
ZSA9IENvbG9yQ3VydmVzLmNsYW1wKGh1ZSwgMCwgMzYwKTsKKyAgICAgICAgZGVuc2l0eSA9IENv
bG9yQ3VydmVzLmNsYW1wKGRlbnNpdHksIC0xMDAsIDEwMCk7CisgICAgICAgIHNhdHVyYXRpb24g
PSBDb2xvckN1cnZlcy5jbGFtcChzYXR1cmF0aW9uLCAtMTAwLCAxMDApOworICAgICAgICBleHBv
c3VyZSA9IENvbG9yQ3VydmVzLmNsYW1wKGV4cG9zdXJlLCAtMTAwLCAxMDApOworICAgICAgICAv
LyBSZW1hcCB0aGUgc2xpZGVyL2NvbmZpZyBmaWx0ZXIgZGVuc2l0eSB3aXRoIG5vbi1saW5lYXIg
bWFwcGluZyBhbmQgYWxzbyBzY2FsZSBieSBoYWxmCisgICAgICAgIC8vIHNvIHRoYXQgdGhlIG1h
eGltdW0gZmlsdGVyIGRlbnNpdHkgaXMgb25seSA1MCUgY29udHJvbC4gVGhpcyBwcm92aWRlcyBm
aW5lIGNvbnRyb2wKKyAgICAgICAgLy8gZm9yIHNtYWxsIHZhbHVlcyBhbmQgcmVhc29uYWJsZSBy
YW5nZS4KKyAgICAgICAgZGVuc2l0eSA9IENvbG9yQ3VydmVzLmFwcGx5Q29sb3JHcmFkaW5nU2xp
ZGVyTm9ubGluZWFyKGRlbnNpdHkpOworICAgICAgICBkZW5zaXR5ICo9IDAuNTsKKyAgICAgICAg
ZXhwb3N1cmUgPSBDb2xvckN1cnZlcy5hcHBseUNvbG9yR3JhZGluZ1NsaWRlck5vbmxpbmVhcihl
eHBvc3VyZSk7CisgICAgICAgIGlmIChkZW5zaXR5IDwgMCkgeworICAgICAgICAgICAgZGVuc2l0
eSAqPSAtMTsKKyAgICAgICAgICAgIGh1ZSA9IChodWUgKyAxODApICUgMzYwOworICAgICAgICB9
CisgICAgICAgIENvbG9yQ3VydmVzLmZyb21IU0JUb1JlZihodWUsIGRlbnNpdHksIDUwICsgMC4y
NSAqIGV4cG9zdXJlLCByZXN1bHQpOworICAgICAgICByZXN1bHQuc2NhbGVUb1JlZigyLCByZXN1
bHQpOworICAgICAgICByZXN1bHQuYSA9IDEgKyAwLjAxICogc2F0dXJhdGlvbjsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFRha2VzIGFuIGlucHV0IHNsaWRlciB2YWx1ZSBhbmQgcmV0dXJucyBh
biBhZGp1c3RlZCB2YWx1ZSB0aGF0IHByb3ZpZGVzIGV4dHJhIGNvbnRyb2wgbmVhciB0aGUgY2Vu
dHJlLgorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgaW5wdXQgc2xpZGVyIHZhbHVlIGluIHJhbmdl
IFstMTAwLDEwMF0uCisgICAgICogQHJldHVybnMgQWRqdXN0ZWQgdmFsdWUuCisgICAgICovCisg
ICAgQ29sb3JDdXJ2ZXMuYXBwbHlDb2xvckdyYWRpbmdTbGlkZXJOb25saW5lYXIgPSBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgdmFsdWUgLz0gMTAwOworICAgICAgICB2YXIgeCA9IE1hdGgu
YWJzKHZhbHVlKTsKKyAgICAgICAgeCA9IE1hdGgucG93KHgsIDIpOworICAgICAgICBpZiAodmFs
dWUgPCAwKSB7CisgICAgICAgICAgICB4ICo9IC0xOworICAgICAgICB9CisgICAgICAgIHggKj0g
MTAwOworICAgICAgICByZXR1cm4geDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YW4gUkdCQSBDb2xvcjQgYmFzZWQgb24gSHVlLCBTYXR1cmF0aW9uIGFuZCBCcmlnaHRuZXNzIChh
bHNvIHJlZmVycmVkIHRvIGFzIHZhbHVlLCBIU1YpLgorICAgICAqIEBwYXJhbSBodWUgVGhlIGh1
ZSAoSCkgaW5wdXQuCisgICAgICogQHBhcmFtIHNhdHVyYXRpb24gVGhlIHNhdHVyYXRpb24gKFMp
IGlucHV0LgorICAgICAqIEBwYXJhbSBicmlnaHRuZXNzIFRoZSBicmlnaHRuZXNzIChCKSBpbnB1
dC4KKyAgICAgKiBAcmVzdWx0IEFuIFJHQkEgY29sb3IgcmVwcmVzZW50ZWQgYXMgVmVjdG9yNC4K
KyAgICAgKi8KKyAgICBDb2xvckN1cnZlcy5mcm9tSFNCVG9SZWYgPSBmdW5jdGlvbiAoaHVlLCBz
YXR1cmF0aW9uLCBicmlnaHRuZXNzLCByZXN1bHQpIHsKKyAgICAgICAgdmFyIGggPSBDb2xvckN1
cnZlcy5jbGFtcChodWUsIDAsIDM2MCk7CisgICAgICAgIHZhciBzID0gQ29sb3JDdXJ2ZXMuY2xh
bXAoc2F0dXJhdGlvbiAvIDEwMCwgMCwgMSk7CisgICAgICAgIHZhciB2ID0gQ29sb3JDdXJ2ZXMu
Y2xhbXAoYnJpZ2h0bmVzcyAvIDEwMCwgMCwgMSk7CisgICAgICAgIGlmIChzID09PSAwKSB7Cisg
ICAgICAgICAgICByZXN1bHQuciA9IHY7CisgICAgICAgICAgICByZXN1bHQuZyA9IHY7CisgICAg
ICAgICAgICByZXN1bHQuYiA9IHY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAvLyBzZWN0b3IgMCB0byA1CisgICAgICAgICAgICBoIC89IDYwOworICAgICAgICAgICAg
dmFyIGkgPSBNYXRoLmZsb29yKGgpOworICAgICAgICAgICAgLy8gZnJhY3Rpb25hbCBwYXJ0IG9m
IGgKKyAgICAgICAgICAgIHZhciBmID0gaCAtIGk7CisgICAgICAgICAgICB2YXIgcCA9IHYgKiAo
MSAtIHMpOworICAgICAgICAgICAgdmFyIHEgPSB2ICogKDEgLSBzICogZik7CisgICAgICAgICAg
ICB2YXIgdCA9IHYgKiAoMSAtIHMgKiAoMSAtIGYpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoaSkg
eworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnIg
PSB2OworICAgICAgICAgICAgICAgICAgICByZXN1bHQuZyA9IHQ7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5iID0gcDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuciA9IHE7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5nID0gdjsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmIg
PSBwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yID0gcDsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmcgPSB2OworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYiA9IHQ7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnIgPSBwOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuZyA9IHE7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5iID0gdjsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICByZXN1
bHQuciA9IHQ7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nID0gcDsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LmIgPSB2OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OiAvLyBjYXNlIDU6CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5yID0gdjsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmcgPSBwOworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuYiA9IHE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlc3VsdC5hID0gMTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFJldHVybnMgYSB2YWx1ZSBjbGFtcGVkIGJldHdlZW4gbWluIGFuZCBtYXgKKyAg
ICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsYW1wCisgICAgICogQHBhcmFtIG1pbiBU
aGUgbWluaW11bSBvZiB2YWx1ZQorICAgICAqIEBwYXJhbSBtYXggVGhlIG1heGltdW0gb2YgdmFs
dWUKKyAgICAgKiBAcmV0dXJucyBUaGUgY2xhbXBlZCB2YWx1ZS4KKyAgICAgKi8KKyAgICBDb2xv
ckN1cnZlcy5jbGFtcCA9IGZ1bmN0aW9uICh2YWx1ZSwgbWluLCBtYXgpIHsKKyAgICAgICAgcmV0
dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlLCBtaW4pLCBtYXgpOworICAgIH07CisgICAgLyoq
CisgICAgICogQ2xvbmVzIHRoZSBjdXJyZW50IGNvbG9yIGN1cnZlIGluc3RhbmNlLgorICAgICAq
IEByZXR1cm4gVGhlIGNsb25lZCBjdXJ2ZXMKKyAgICAgKi8KKyAgICBDb2xvckN1cnZlcy5wcm90
b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5D
bG9uZShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29sb3JDdXJ2ZXMoKTsgfSwgdGhpcyk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBjdXJyZW50IGNvbG9yIGN1cnZl
IGluc3RhbmNlIHRvIGEganNvbiByZXByZXNlbnRhdGlvbi4KKyAgICAgKiBAcmV0dXJuIGEgSlNP
TiByZXByZXNlbnRhdGlvbgorICAgICAqLworICAgIENvbG9yQ3VydmVzLnByb3RvdHlwZS5zZXJp
YWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5TZXJpYWxp
emUodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgdGhlIGNvbG9yIGN1cnZl
IGZyb20gYSBqc29uIHJlcHJlc2VudGF0aW9uLgorICAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIEpT
T04gc291cmNlIHRvIHBhcnNlCisgICAgICogQHJldHVybiBUaGUgcGFyc2VkIGN1cnZlcworICAg
ICAqLworICAgIENvbG9yQ3VydmVzLlBhcnNlID0gZnVuY3Rpb24gKHNvdXJjZSkgeworICAgICAg
ICByZXR1cm4gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
ZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IENvbG9y
Q3VydmVzKCk7IH0sIHNvdXJjZSwgbnVsbCwgbnVsbCk7CisgICAgfTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIENvbG9yQ3VydmVzLnByb3RvdHlwZSwgIl9nbG9iYWxIdWUiLCB2b2lkIDAp
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAiX2ds
b2JhbERlbnNpdHkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQ29sb3JD
dXJ2ZXMucHJvdG90eXBlLCAiX2dsb2JhbFNhdHVyYXRpb24iLCB2b2lkIDApOworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZSJdKSgpCisgICAgXSwgQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAiX2dsb2JhbEV4cG9zdXJl
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIENvbG9yQ3VydmVzLnByb3Rv
dHlwZSwgIl9oaWdobGlnaHRzSHVlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIENvbG9yQ3VydmVzLnByb3RvdHlwZSwgIl9oaWdobGlnaHRzRGVuc2l0eSIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBDb2xvckN1cnZlcy5wcm90b3R5cGUsICJfaGln
aGxpZ2h0c1NhdHVyYXRpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
Q29sb3JDdXJ2ZXMucHJvdG90eXBlLCAiX2hpZ2hsaWdodHNFeHBvc3VyZSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBDb2xvckN1cnZlcy5wcm90b3R5cGUsICJfbWlkdG9u
ZXNIdWUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQ29sb3JDdXJ2ZXMu
cHJvdG90eXBlLCAiX21pZHRvbmVzRGVuc2l0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBDb2xvckN1cnZlcy5wcm90b3R5cGUsICJfbWlkdG9uZXNTYXR1cmF0aW9uIiwg
dm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29y
YXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIENvbG9yQ3VydmVzLnByb3RvdHlw
ZSwgIl9taWR0b25lc0V4cG9zdXJlIiwgdm9pZCAwKTsKKyAgICByZXR1cm4gQ29sb3JDdXJ2ZXM7
Cit9KCkpOworCisvLyBSZWZlcmVuY2VzIHRoZSBkZXBlbmRlbmNpZXMuCitfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5f
Q29sb3JDdXJ2ZXNQYXJzZXIgPSBDb2xvckN1cnZlcy5QYXJzZTsKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL2VmZmVjdC50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBFZmZlY3RGYWxs
YmFja3MsIEVmZmVjdENyZWF0aW9uT3B0aW9ucywgRWZmZWN0ICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdEZhbGxiYWNrcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
RWZmZWN0RmFsbGJhY2tzOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdENyZWF0aW9uT3B0
aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRWZmZWN0Q3JlYXRpb25PcHRpb25zOyB9KTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkVmZmVjdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRWZmZWN0OyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL29ic2VydmFi
bGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0
YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RvbU1hbmFnZW1lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L01pc2MvZG9tTWFuYWdlbWVudCAqLyAiLi9NaXNjL2RvbU1hbmFnZW1lbnQudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2Mv
bG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfUHJvY2Vzc29y
c19zaGFkZXJQcm9jZXNzb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvUHJvY2Vzc29ycy9zaGFkZXJQcm9jZXNzb3IgKi8g
Ii4vRW5naW5lcy9Qcm9jZXNzb3JzL3NoYWRlclByb2Nlc3Nvci50cyIpOworCisKKworCisKKy8q
KgorICogRWZmZWN0RmFsbGJhY2tzIGNhbiBiZSB1c2VkIHRvIGFkZCBmYWxsYmFja3MgKHByb3Bl
cnRpZXMgdG8gZGlzYWJsZSkgdG8gY2VydGFpbiBwcm9wZXJ0aWVzIHdoZW4gZGVzaXJlZCB0byBp
bXByb3ZlIHBlcmZvcm1hbmNlLgorICogKEVnLiBTdGFydCBhdCBoaWdoIHF1YWxpdHkgd2l0aCBy
ZWZsZWN0aW9uIGFuZCBmb2csIGlmIGZwcyBpcyBsb3csIHJlbW92ZSByZWZsZWN0aW9uLCBpZiBz
dGlsbCBsb3cgcmVtb3ZlIGZvZykKKyAqLwordmFyIEVmZmVjdEZhbGxiYWNrcyA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBFZmZlY3RGYWxsYmFja3MoKSB7Cisg
ICAgICAgIHRoaXMuX2RlZmluZXMgPSB7fTsKKyAgICAgICAgdGhpcy5fY3VycmVudFJhbmsgPSAz
MjsKKyAgICAgICAgdGhpcy5fbWF4UmFuayA9IC0xOworICAgICAgICB0aGlzLl9tZXNoID0gbnVs
bDsKKyAgICB9CisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgZmFsbGJhY2sgZnJvbSB0aGUg
Ym91bmQgbWVzaC4KKyAgICAgKi8KKyAgICBFZmZlY3RGYWxsYmFja3MucHJvdG90eXBlLnVuQmlu
ZE1lc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX21lc2ggPSBudWxsOworICAgIH07
CisgICAgLyoqCisgICAgICogQWRkcyBhIGZhbGxiYWNrIG9uIHRoZSBzcGVjaWZpZWQgcHJvcGVy
dHkuCisgICAgICogQHBhcmFtIHJhbmsgVGhlIHJhbmsgb2YgdGhlIGZhbGxiYWNrIChMb3dlciBy
YW5rcyB3aWxsIGJlIGZhbGxiYWNrZWQgdG8gZmlyc3QpCisgICAgICogQHBhcmFtIGRlZmluZSBU
aGUgbmFtZSBvZiB0aGUgZGVmaW5lIGluIHRoZSBzaGFkZXIKKyAgICAgKi8KKyAgICBFZmZlY3RG
YWxsYmFja3MucHJvdG90eXBlLmFkZEZhbGxiYWNrID0gZnVuY3Rpb24gKHJhbmssIGRlZmluZSkg
eworICAgICAgICBpZiAoIXRoaXMuX2RlZmluZXNbcmFua10pIHsKKyAgICAgICAgICAgIGlmIChy
YW5rIDwgdGhpcy5fY3VycmVudFJhbmspIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
UmFuayA9IHJhbms7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmFuayA+IHRoaXMu
X21heFJhbmspIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXhSYW5rID0gcmFuazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2RlZmluZXNbcmFua10gPSBuZXcgQXJyYXkoKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9kZWZpbmVzW3JhbmtdLnB1c2goZGVmaW5lKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIG1lc2ggdG8gdXNlIENQVSBza2lubmluZyB3
aGVuIG5lZWRpbmcgdG8gZmFsbGJhY2suCisgICAgICogQHBhcmFtIHJhbmsgVGhlIHJhbmsgb2Yg
dGhlIGZhbGxiYWNrIChMb3dlciByYW5rcyB3aWxsIGJlIGZhbGxiYWNrZWQgdG8gZmlyc3QpCisg
ICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gdXNlIHRoZSBmYWxsYmFja3MuCisgICAgICov
CisgICAgRWZmZWN0RmFsbGJhY2tzLnByb3RvdHlwZS5hZGRDUFVTa2lubmluZ0ZhbGxiYWNrID0g
ZnVuY3Rpb24gKHJhbmssIG1lc2gpIHsKKyAgICAgICAgdGhpcy5fbWVzaCA9IG1lc2g7CisgICAg
ICAgIGlmIChyYW5rIDwgdGhpcy5fY3VycmVudFJhbmspIHsKKyAgICAgICAgICAgIHRoaXMuX2N1
cnJlbnRSYW5rID0gcmFuazsKKyAgICAgICAgfQorICAgICAgICBpZiAocmFuayA+IHRoaXMuX21h
eFJhbmspIHsKKyAgICAgICAgICAgIHRoaXMuX21heFJhbmsgPSByYW5rOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRWZmZWN0RmFsbGJhY2tzLnByb3RvdHlw
ZSwgImhhc01vcmVGYWxsYmFja3MiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBDaGVja3Mg
dG8gc2VlIGlmIG1vcmUgZmFsbGJhY2tzIGFyZSBzdGlsbCBhdmFpbGlibGUuCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9j
dXJyZW50UmFuayA8PSB0aGlzLl9tYXhSYW5rOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioK
KyAgICAgKiBSZW1vdmVzIHRoZSBkZWZpbmVzIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBm
YWxsaW5nIGJhY2suCisgICAgICogQHBhcmFtIGN1cnJlbnREZWZpbmVzIGRlZmluZXMgdGhlIGN1
cnJlbnQgZGVmaW5lIHN0YXRlbWVudHMgZm9yIHRoZSBzaGFkZXIuCisgICAgICogQHBhcmFtIGVm
ZmVjdCBkZWZpbmVzIHRoZSBjdXJyZW50IGVmZmVjdCB3ZSB0cnkgdG8gY29tcGlsZQorICAgICAq
IEByZXR1cm5zIFRoZSByZXN1bHRpbmcgZGVmaW5lcyB3aXRoIGRlZmluZXMgb2YgdGhlIGN1cnJl
bnQgcmFuayByZW1vdmVkLgorICAgICAqLworICAgIEVmZmVjdEZhbGxiYWNrcy5wcm90b3R5cGUu
cmVkdWNlID0gZnVuY3Rpb24gKGN1cnJlbnREZWZpbmVzLCBlZmZlY3QpIHsKKyAgICAgICAgLy8g
Rmlyc3Qgd2UgdHJ5IHRvIHN3aXRjaCB0byBDUFUgc2tpbm5pbmcKKyAgICAgICAgaWYgKHRoaXMu
X21lc2ggJiYgdGhpcy5fbWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgJiYgdGhpcy5fbWVz
aC5udW1Cb25lSW5mbHVlbmNlcnMgPiAwKSB7CisgICAgICAgICAgICB0aGlzLl9tZXNoLmNvbXB1
dGVCb25lc1VzaW5nU2hhZGVycyA9IGZhbHNlOworICAgICAgICAgICAgY3VycmVudERlZmluZXMg
PSBjdXJyZW50RGVmaW5lcy5yZXBsYWNlKCIjZGVmaW5lIE5VTV9CT05FX0lORkxVRU5DRVJTICIg
KyB0aGlzLl9tZXNoLm51bUJvbmVJbmZsdWVuY2VycywgIiNkZWZpbmUgTlVNX0JPTkVfSU5GTFVF
TkNFUlMgMCIpOworICAgICAgICAgICAgZWZmZWN0Ll9ib25lc0NvbXB1dGF0aW9uRm9yY2VkVG9D
UFUgPSB0cnVlOworICAgICAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fbWVzaC5nZXRTY2VuZSgp
OworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHNjZW5lLm1lc2hlcy5s
ZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgb3RoZXJNZXNoID0gc2NlbmUu
bWVzaGVzW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoIW90aGVyTWVzaC5tYXRlcmlhbCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21lc2gubWF0ZXJpYWwgJiYgb3RoZXJN
ZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBvdGhlck1lc2gubnVtQm9uZUluZmx1ZW5j
ZXJzID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJNZXNoLmNvbXB1dGVCb25l
c1VzaW5nU2hhZGVycyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoIW90aGVyTWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgfHwgb3RoZXJNZXNoLm51bUJv
bmVJbmZsdWVuY2VycyA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG90aGVyTWVzaC5tYXRlcmlhbC5n
ZXRFZmZlY3QoKSA9PT0gZWZmZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIG90aGVyTWVzaC5j
b21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAob3RoZXJNZXNoLnN1Yk1lc2hlcykgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gb3RoZXJNZXNoLnN1Yk1lc2hlczsgX2kgPCBf
YS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJNZXNoID0g
X2FbX2ldOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1Yk1lc2hFZmZlY3QgPSBzdWJN
ZXNoLmVmZmVjdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJNZXNoRWZmZWN0ID09
PSBlZmZlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlck1lc2guY29tcHV0
ZUJvbmVzVXNpbmdTaGFkZXJzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICB2YXIgY3VycmVudEZhbGxiYWNrcyA9IHRoaXMuX2RlZmluZXNbdGhp
cy5fY3VycmVudFJhbmtdOworICAgICAgICAgICAgaWYgKGN1cnJlbnRGYWxsYmFja3MpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgY3VycmVudEZhbGxiYWNr
cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudERlZmluZXMg
PSBjdXJyZW50RGVmaW5lcy5yZXBsYWNlKCIjZGVmaW5lICIgKyBjdXJyZW50RmFsbGJhY2tzW2lu
ZGV4XSwgIiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX2N1cnJlbnRSYW5rKys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGN1cnJlbnRE
ZWZpbmVzOworICAgIH07CisgICAgcmV0dXJuIEVmZmVjdEZhbGxiYWNrczsKK30oKSk7CisKKy8q
KgorICogT3B0aW9ucyB0byBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYW4gZWZmZWN0LgorICovCit2
YXIgRWZmZWN0Q3JlYXRpb25PcHRpb25zID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
ICAgIGZ1bmN0aW9uIEVmZmVjdENyZWF0aW9uT3B0aW9ucygpIHsKKyAgICB9CisgICAgcmV0dXJu
IEVmZmVjdENyZWF0aW9uT3B0aW9uczsKK30oKSk7CisKKy8qKgorICogRWZmZWN0IGNvbnRhaW5p
bmcgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXIgdGhhdCBjYW4gYmUgZXhlY3V0ZWQgb24gYW4g
b2JqZWN0LgorICovCit2YXIgRWZmZWN0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
ICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhbiBlZmZlY3QuCisgICAgICogQW4gZWZmZWN0
IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZS9tYW5hZ2UvZXhlY3V0ZSB2ZXJ0ZXggYW5kIGZyYWdtZW50
IHNoYWRlcnMuCisgICAgICogQHBhcmFtIGJhc2VOYW1lIE5hbWUgb2YgdGhlIGVmZmVjdC4KKyAg
ICAgKiBAcGFyYW0gYXR0cmlidXRlc05hbWVzT3JPcHRpb25zIExpc3Qgb2YgYXR0cmlidXRlIG5h
bWVzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHNoYWRlciBvciBzZXQgb2YgYWxsIG9wdGlv
bnMgdG8gY3JlYXRlIHRoZSBlZmZlY3QuCisgICAgICogQHBhcmFtIHVuaWZvcm1zTmFtZXNPckVu
Z2luZSBMaXN0IG9mIHVuaWZvcm0gdmFyaWFibGUgbmFtZXMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgc2hhZGVyIG9yIHRoZSBlbmdpbmUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIGVm
ZmVjdC4KKyAgICAgKiBAcGFyYW0gc2FtcGxlcnMgTGlzdCBvZiBzYW1wbGVyIHZhcmlhYmxlcyB0
aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzaGFkZXIuCisgICAgICogQHBhcmFtIGVuZ2luZSBF
bmdpbmUgdG8gYmUgdXNlZCB0byByZW5kZXIgdGhlIGVmZmVjdAorICAgICAqIEBwYXJhbSBkZWZp
bmVzIERlZmluZSBzdGF0ZW1lbnRzIHRvIGJlIGFkZGVkIHRvIHRoZSBzaGFkZXIuCisgICAgICog
QHBhcmFtIGZhbGxiYWNrcyBQb3NzaWJsZSBmYWxsYmFja3MgZm9yIHRoaXMgZWZmZWN0IHRvIGlt
cHJvdmUgcGVyZm9ybWFuY2Ugd2hlbiBuZWVkZWQuCisgICAgICogQHBhcmFtIG9uQ29tcGlsZWQg
Q2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzaGFkZXIgaXMgY29tcGlsZWQu
CisgICAgICogQHBhcmFtIG9uRXJyb3IgQ2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCBpZiBh
biBlcnJvciBvY2N1cnMgZHVyaW5nIHNoYWRlciBjb21waWxhdGlvbi4KKyAgICAgKiBAcGFyYW0g
aW5kZXhQYXJhbWV0ZXJzIFBhcmFtZXRlcnMgdG8gYmUgdXNlZCB3aXRoIEJhYnlsb25zIGluY2x1
ZGUgc3ludGF4IHRvIGl0ZXJhdGUgb3ZlciBhbiBhcnJheSAoZWcuIHtsaWdodHM6IDEwfSkKKyAg
ICAgKiBAcGFyYW0ga2V5IEVmZmVjdCBLZXkgaWRlbnRpZnlpbmcgdW5pcXVlbHkgY29tcGlsZWQg
c2hhZGVyIHZhcmlhbnRzCisgICAgICogQHBhcmFtIHNvdXJjZXMgQWxyZWFkeSBwcm9jZXNzZWQg
c291cmNlcyBmb3IgdGhlIGN1cnJlbnQga2V5LgorICAgICAqLworICAgIGZ1bmN0aW9uIEVmZmVj
dChiYXNlTmFtZSwgYXR0cmlidXRlc05hbWVzT3JPcHRpb25zLCB1bmlmb3Jtc05hbWVzT3JFbmdp
bmUsIHNhbXBsZXJzLCBlbmdpbmUsIGRlZmluZXMsIGZhbGxiYWNrcywgb25Db21waWxlZCwgb25F
cnJvciwgaW5kZXhQYXJhbWV0ZXJzLCBrZXksIHNvdXJjZXMpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgaWYgKHNhbXBsZXJzID09PSB2b2lkIDApIHsgc2FtcGxlcnMgPSBu
dWxsOyB9CisgICAgICAgIGlmIChkZWZpbmVzID09PSB2b2lkIDApIHsgZGVmaW5lcyA9IG51bGw7
IH0KKyAgICAgICAgaWYgKGZhbGxiYWNrcyA9PT0gdm9pZCAwKSB7IGZhbGxiYWNrcyA9IG51bGw7
IH0KKyAgICAgICAgaWYgKG9uQ29tcGlsZWQgPT09IHZvaWQgMCkgeyBvbkNvbXBpbGVkID0gbnVs
bDsgfQorICAgICAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBudWxsOyB9
CisgICAgICAgIGlmIChrZXkgPT09IHZvaWQgMCkgeyBrZXkgPSAiIjsgfQorICAgICAgICAvKioK
KyAgICAgICAgICogTmFtZSBvZiB0aGUgZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5uYW1lID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFN0cmluZyBjb250YWluZXIg
YWxsIHRoZSBkZWZpbmUgc3RhdGVtZW50cyB0aGF0IHNob3VsZCBiZSBzZXQgb24gdGhlIHNoYWRl
ci4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGVmaW5lcyA9ICIiOworICAgICAgICAvKioK
KyAgICAgICAgICogQ2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzaGFkZXIg
aXMgY29tcGlsZWQuCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uQ29tcGlsZWQgPSBudWxs
OworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCBp
ZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHNoYWRlciBjb21waWxhdGlvbi4KKyAgICAgICAgICov
CisgICAgICAgIHRoaXMub25FcnJvciA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBD
YWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gZWZmZWN0IGlzIGJvdW5kLgorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5vbkJpbmQgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAg
ICogVW5pcXVlIElEIG9mIHRoZSBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnVu
aXF1ZUlkID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgdGhhdCB3aWxs
IGJlIGNhbGxlZCB3aGVuIHRoZSBzaGFkZXIgaXMgY29tcGlsZWQuCisgICAgICAgICAqIEl0IGlz
IHJlY29tbWVuZGVkIHRvIHVzZSBleGVjdXRlV2hlbkNvbXBpbGUoKSBvciB0byBtYWtlIHN1cmUg
dGhhdCBzY2VuZS5pc1JlYWR5KCkgaXMgY2FsbGVkIHRvIGdldCB0aGlzIG9ic2VydmFibGUgcmFp
c2VkLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkNvbXBpbGVPYnNlcnZhYmxlID0gbmV3
IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJs
ZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxlIHRoYXQgd2lsbCBiZSBj
YWxsZWQgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBzaGFkZXIgY29tcGlsYXRpb24uCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLm9uRXJyb3JPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2Vy
dmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAg
ICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX29uQmluZE9ic2VydmFibGUgPSBudWxs
OworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9ib25lc0NvbXB1dGF0aW9u
Rm9yY2VkVG9DUFUgPSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhp
cy5fdW5pZm9ybUJ1ZmZlcnNOYW1lcyA9IHt9OworICAgICAgICB0aGlzLl9zYW1wbGVycyA9IHt9
OworICAgICAgICB0aGlzLl9pc1JlYWR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NvbXBpbGF0
aW9uRXJyb3IgPSAiIjsKKyAgICAgICAgdGhpcy5fdW5pZm9ybXMgPSB7fTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEtleSBmb3IgdGhlIGVmZmVjdC4KKyAgICAgICAgICogQGhpZGRlbgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5fa2V5ID0gIiI7CisgICAgICAgIHRoaXMuX2ZhbGxiYWNr
cyA9IG51bGw7CisgICAgICAgIHRoaXMuX3ZlcnRleFNvdXJjZUNvZGVPdmVycmlkZSA9ICIiOwor
ICAgICAgICB0aGlzLl9mcmFnbWVudFNvdXJjZUNvZGVPdmVycmlkZSA9ICIiOworICAgICAgICB0
aGlzLl90cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIENvbXBpbGVkIHNoYWRlciB0byB3ZWJHTCBwcm9ncmFtLgorICAgICAgICAgKiBAaGlk
ZGVuCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQgPSBudWxsOwor
ICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl92ZXJ0ZXhTb3VyY2VDb2RlID0g
IiI7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2ZyYWdtZW50U291cmNl
Q29kZSA9ICIiOworICAgICAgICB0aGlzLm5hbWUgPSBiYXNlTmFtZTsKKyAgICAgICAgdGhpcy5f
a2V5ID0ga2V5OworICAgICAgICBpZiAoYXR0cmlidXRlc05hbWVzT3JPcHRpb25zLmF0dHJpYnV0
ZXMpIHsKKyAgICAgICAgICAgIHZhciBvcHRpb25zID0gYXR0cmlidXRlc05hbWVzT3JPcHRpb25z
OworICAgICAgICAgICAgdGhpcy5fZW5naW5lID0gdW5pZm9ybXNOYW1lc09yRW5naW5lOworICAg
ICAgICAgICAgdGhpcy5fYXR0cmlidXRlc05hbWVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzOworICAg
ICAgICAgICAgdGhpcy5fdW5pZm9ybXNOYW1lcyA9IG9wdGlvbnMudW5pZm9ybXNOYW1lcy5jb25j
YXQob3B0aW9ucy5zYW1wbGVycyk7CisgICAgICAgICAgICB0aGlzLl9zYW1wbGVyTGlzdCA9IG9w
dGlvbnMuc2FtcGxlcnMuc2xpY2UoKTsKKyAgICAgICAgICAgIHRoaXMuZGVmaW5lcyA9IG9wdGlv
bnMuZGVmaW5lczsKKyAgICAgICAgICAgIHRoaXMub25FcnJvciA9IG9wdGlvbnMub25FcnJvcjsK
KyAgICAgICAgICAgIHRoaXMub25Db21waWxlZCA9IG9wdGlvbnMub25Db21waWxlZDsKKyAgICAg
ICAgICAgIHRoaXMuX2ZhbGxiYWNrcyA9IG9wdGlvbnMuZmFsbGJhY2tzOworICAgICAgICAgICAg
dGhpcy5faW5kZXhQYXJhbWV0ZXJzID0gb3B0aW9ucy5pbmRleFBhcmFtZXRlcnM7CisgICAgICAg
ICAgICB0aGlzLl90cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzID0gb3B0aW9ucy50cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzOworICAgICAgICAgICAgaWYgKG9wdGlvbnMudW5pZm9ybUJ1ZmZlcnNO
YW1lcykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy51bmlm
b3JtQnVmZmVyc05hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X3VuaWZvcm1CdWZmZXJzTmFtZXNbb3B0aW9ucy51bmlmb3JtQnVmZmVyc05hbWVzW2ldXSA9IGk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgdGhpcy5fZW5naW5lID0gZW5naW5lOworICAgICAgICAgICAgdGhp
cy5kZWZpbmVzID0gKGRlZmluZXMgPT0gbnVsbCA/ICIiIDogZGVmaW5lcyk7CisgICAgICAgICAg
ICB0aGlzLl91bmlmb3Jtc05hbWVzID0gdW5pZm9ybXNOYW1lc09yRW5naW5lLmNvbmNhdChzYW1w
bGVycyk7CisgICAgICAgICAgICB0aGlzLl9zYW1wbGVyTGlzdCA9IHNhbXBsZXJzID8gc2FtcGxl
cnMuc2xpY2UoKSA6IFtdOworICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlc05hbWVzID0gYXR0
cmlidXRlc05hbWVzT3JPcHRpb25zOworICAgICAgICAgICAgdGhpcy5vbkVycm9yID0gb25FcnJv
cjsKKyAgICAgICAgICAgIHRoaXMub25Db21waWxlZCA9IG9uQ29tcGlsZWQ7CisgICAgICAgICAg
ICB0aGlzLl9pbmRleFBhcmFtZXRlcnMgPSBpbmRleFBhcmFtZXRlcnM7CisgICAgICAgICAgICB0
aGlzLl9mYWxsYmFja3MgPSBmYWxsYmFja3M7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy51bmlx
dWVJZCA9IEVmZmVjdC5fdW5pcXVlSWRTZWVkKys7CisgICAgICAgIGlmIChzb3VyY2VzKSB7Cisg
ICAgICAgICAgICB0aGlzLl9mcmFnbWVudFNvdXJjZUNvZGUgPSBzb3VyY2VzLmZyYWdtZW50Owor
ICAgICAgICAgICAgdGhpcy5fdmVydGV4U291cmNlQ29kZSA9IHNvdXJjZXMudmVydGV4OworICAg
ICAgICAgICAgdGhpcy5fcHJlcGFyZUVmZmVjdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHZhciB2ZXJ0ZXhTb3VyY2U7CisgICAgICAgIHZhciBmcmFnbWVudFNv
dXJjZTsKKyAgICAgICAgaWYgKGJhc2VOYW1lLnZlcnRleFNvdXJjZSkgeworICAgICAgICAgICAg
dmVydGV4U291cmNlID0gInNvdXJjZToiICsgYmFzZU5hbWUudmVydGV4U291cmNlOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGJhc2VOYW1lLnZlcnRleEVsZW1lbnQpIHsKKyAgICAgICAg
ICAgIHZlcnRleFNvdXJjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJhc2VOYW1lLnZlcnRl
eEVsZW1lbnQpOworICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhTb3VyY2UpIHsKKyAgICAgICAgICAg
ICAgICB2ZXJ0ZXhTb3VyY2UgPSBiYXNlTmFtZS52ZXJ0ZXhFbGVtZW50OworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmVydGV4U291cmNlID0g
YmFzZU5hbWUudmVydGV4IHx8IGJhc2VOYW1lOworICAgICAgICB9CisgICAgICAgIGlmIChiYXNl
TmFtZS5mcmFnbWVudFNvdXJjZSkgeworICAgICAgICAgICAgZnJhZ21lbnRTb3VyY2UgPSAic291
cmNlOiIgKyBiYXNlTmFtZS5mcmFnbWVudFNvdXJjZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChiYXNlTmFtZS5mcmFnbWVudEVsZW1lbnQpIHsKKyAgICAgICAgICAgIGZyYWdtZW50U291
cmNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYmFzZU5hbWUuZnJhZ21lbnRFbGVtZW50KTsK
KyAgICAgICAgICAgIGlmICghZnJhZ21lbnRTb3VyY2UpIHsKKyAgICAgICAgICAgICAgICBmcmFn
bWVudFNvdXJjZSA9IGJhc2VOYW1lLmZyYWdtZW50RWxlbWVudDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZyYWdtZW50U291cmNlID0gYmFz
ZU5hbWUuZnJhZ21lbnQgfHwgYmFzZU5hbWU7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcHJv
Y2Vzc2luZ0NvbnRleHQgPSBlbmdpbmUuX2dldFNoYWRlclByb2Nlc3NpbmdDb250ZXh0KCk7Cisg
ICAgICAgIHZhciBwcm9jZXNzb3JPcHRpb25zID0geworICAgICAgICAgICAgZGVmaW5lczogdGhp
cy5kZWZpbmVzLnNwbGl0KCJcbiIpLAorICAgICAgICAgICAgaW5kZXhQYXJhbWV0ZXJzOiB0aGlz
Ll9pbmRleFBhcmFtZXRlcnMsCisgICAgICAgICAgICBpc0ZyYWdtZW50OiBmYWxzZSwKKyAgICAg
ICAgICAgIHNob3VsZFVzZUhpZ2hQcmVjaXNpb25TaGFkZXI6IHRoaXMuX2VuZ2luZS5fc2hvdWxk
VXNlSGlnaFByZWNpc2lvblNoYWRlciwKKyAgICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5fZW5n
aW5lLl9zaGFkZXJQcm9jZXNzb3IsCisgICAgICAgICAgICBzdXBwb3J0c1VuaWZvcm1CdWZmZXJz
OiB0aGlzLl9lbmdpbmUuc3VwcG9ydHNVbmlmb3JtQnVmZmVycywKKyAgICAgICAgICAgIHNoYWRl
cnNSZXBvc2l0b3J5OiBFZmZlY3QuU2hhZGVyc1JlcG9zaXRvcnksCisgICAgICAgICAgICBpbmNs
dWRlc1NoYWRlcnNTdG9yZTogRWZmZWN0LkluY2x1ZGVzU2hhZGVyc1N0b3JlLAorICAgICAgICAg
ICAgdmVyc2lvbjogKHRoaXMuX2VuZ2luZS53ZWJHTFZlcnNpb24gKiAxMDApLnRvU3RyaW5nKCks
CisgICAgICAgICAgICBwbGF0Zm9ybU5hbWU6IHRoaXMuX2VuZ2luZS5zaGFkZXJQbGF0Zm9ybU5h
bWUsCisgICAgICAgICAgICBwcm9jZXNzaW5nQ29udGV4dDogdGhpcy5fcHJvY2Vzc2luZ0NvbnRl
eHQKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fbG9hZFZlcnRleFNoYWRlcih2ZXJ0ZXhTb3Vy
Y2UsIGZ1bmN0aW9uICh2ZXJ0ZXhDb2RlKSB7CisgICAgICAgICAgICBfdGhpcy5fbG9hZEZyYWdt
ZW50U2hhZGVyKGZyYWdtZW50U291cmNlLCBmdW5jdGlvbiAoZnJhZ21lbnRDb2RlKSB7CisgICAg
ICAgICAgICAgICAgX0VuZ2luZXNfUHJvY2Vzc29yc19zaGFkZXJQcm9jZXNzb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siU2hhZGVyUHJvY2Vzc29yIl0uUHJvY2Vzcyh2ZXJ0ZXhDb2Rl
LCBwcm9jZXNzb3JPcHRpb25zLCBmdW5jdGlvbiAobWlncmF0ZWRWZXJ0ZXhDb2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3Nvck9wdGlvbnMuaXNGcmFnbWVudCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIF9FbmdpbmVzX1Byb2Nlc3NvcnNfc2hhZGVyUHJvY2Vzc29yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNoYWRlclByb2Nlc3NvciJdLlByb2Nlc3MoZnJhZ21l
bnRDb2RlLCBwcm9jZXNzb3JPcHRpb25zLCBmdW5jdGlvbiAobWlncmF0ZWRGcmFnbWVudENvZGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbFNoYWRlcnMgPSBfRW5naW5lc19Q
cm9jZXNzb3JzX3NoYWRlclByb2Nlc3Nvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJT
aGFkZXJQcm9jZXNzb3IiXS5GaW5hbGl6ZShtaWdyYXRlZFZlcnRleENvZGUsIG1pZ3JhdGVkRnJh
Z21lbnRDb2RlLCBwcm9jZXNzb3JPcHRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90
aGlzLl91c2VGaW5hbENvZGUoZmluYWxTaGFkZXJzLnZlcnRleENvZGUsIGZpbmFsU2hhZGVycy5m
cmFnbWVudENvZGUsIGJhc2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShFZmZlY3QucHJvdG90eXBlLCAib25CaW5kT2JzZXJ2YWJsZSIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgdGhhdCB3aWxsIGJlIGNhbGxl
ZCB3aGVuIGVmZmVjdCBpcyBib3VuZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9vbkJpbmRPYnNlcnZhYmxlKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fb25CaW5kT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29uQmluZE9ic2VydmFibGU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIEVmZmVjdC5wcm90b3R5cGUuX3VzZUZpbmFsQ29kZSA9IGZ1bmN0aW9u
IChtaWdyYXRlZFZlcnRleENvZGUsIG1pZ3JhdGVkRnJhZ21lbnRDb2RlLCBiYXNlTmFtZSkgewor
ICAgICAgICBpZiAoYmFzZU5hbWUpIHsKKyAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSBiYXNlTmFt
ZS52ZXJ0ZXhFbGVtZW50IHx8IGJhc2VOYW1lLnZlcnRleCB8fCBiYXNlTmFtZS5zcGVjdG9yTmFt
ZSB8fCBiYXNlTmFtZTsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGJhc2VOYW1lLmZyYWdt
ZW50RWxlbWVudCB8fCBiYXNlTmFtZS5mcmFnbWVudCB8fCBiYXNlTmFtZS5zcGVjdG9yTmFtZSB8
fCBiYXNlTmFtZTsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleFNvdXJjZUNvZGUgPSAiI2RlZmlu
ZSBTSEFERVJfTkFNRSB2ZXJ0ZXg6IiArIHZlcnRleCArICJcbiIgKyBtaWdyYXRlZFZlcnRleENv
ZGU7CisgICAgICAgICAgICB0aGlzLl9mcmFnbWVudFNvdXJjZUNvZGUgPSAiI2RlZmluZSBTSEFE
RVJfTkFNRSBmcmFnbWVudDoiICsgZnJhZ21lbnQgKyAiXG4iICsgbWlncmF0ZWRGcmFnbWVudENv
ZGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhT
b3VyY2VDb2RlID0gbWlncmF0ZWRWZXJ0ZXhDb2RlOworICAgICAgICAgICAgdGhpcy5fZnJhZ21l
bnRTb3VyY2VDb2RlID0gbWlncmF0ZWRGcmFnbWVudENvZGU7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fcHJlcGFyZUVmZmVjdCgpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEVmZmVjdC5wcm90b3R5cGUsICJrZXkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVbmlx
dWUga2V5IGZvciB0aGlzIGVmZmVjdAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fa2V5OworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvKioKKyAgICAgKiBJZiB0aGUgZWZmZWN0IGhhcyBiZWVuIGNvbXBpbGVkIGFuZCBwcmVw
YXJlZC4KKyAgICAgKiBAcmV0dXJucyBpZiB0aGUgZWZmZWN0IGlzIGNvbXBpbGVkIGFuZCBwcmVw
YXJlZC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLmlzUmVhZHkgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNSZWFkeUludGVy
bmFsKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKF9hKSB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworICAgIEVmZmVjdC5wcm90b3R5cGUuX2lzUmVh
ZHlJbnRlcm5hbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2lzUmVhZHkpIHsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9w
aXBlbGluZUNvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9waXBlbGluZUNvbnRl
eHQuaXNSZWFkeTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBUaGUgZW5naW5lIHRoZSBlZmZlY3Qgd2FzIGluaXRpYWxpemVkIHdpdGgu
CisgICAgICogQHJldHVybnMgdGhlIGVuZ2luZS4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90
eXBlLmdldEVuZ2luZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuZ2lu
ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoZSBwaXBlbGluZSBjb250ZXh0IGZvciB0aGlz
IGVmZmVjdAorICAgICAqIEByZXR1cm5zIHRoZSBhc3NvY2lhdGVkIHBpcGVsaW5lIGNvbnRleHQK
KyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLmdldFBpcGVsaW5lQ29udGV4dCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BpcGVsaW5lQ29udGV4dDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFRoZSBzZXQgb2YgbmFtZXMgb2YgYXR0cmlidXRlIHZhcmlhYmxlcyBm
b3IgdGhlIHNoYWRlci4KKyAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhdHRyaWJ1dGUgbmFt
ZXMuCisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVzTmFtZXMgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hdHRyaWJ1dGVzTmFtZXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhdHRyaWJ1dGUgYXQgdGhlIGdpdmVuIGlu
ZGV4LgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGF0dHJpYnV0ZS4KKyAg
ICAgKiBAcmV0dXJucyBUaGUgbG9jYXRpb24gb2YgdGhlIGF0dHJpYnV0ZS4KKyAgICAgKi8KKyAg
ICBFZmZlY3QucHJvdG90eXBlLmdldEF0dHJpYnV0ZUxvY2F0aW9uID0gZnVuY3Rpb24gKGluZGV4
KSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hdHRyaWJ1dGVzW2luZGV4XTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFJldHVybnMgdGhlIGF0dHJpYnV0ZSBiYXNlZCBvbiB0aGUgbmFtZSBvZiB0
aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBsb29r
IHVwLgorICAgICAqIEByZXR1cm5zIHRoZSBhdHRyaWJ1dGUgbG9jYXRpb24uCisgICAgICovCisg
ICAgRWZmZWN0LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVMb2NhdGlvbkJ5TmFtZSA9IGZ1bmN0aW9u
IChuYW1lKSB7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2F0dHJpYnV0ZXNOYW1lcy5pbmRl
eE9mKG5hbWUpOworICAgICAgICByZXR1cm4gdGhpcy5fYXR0cmlidXRlc1tpbmRleF07CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBUaGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMuCisgICAgICogQHJl
dHVybnMgdGhlIG51bW5iZXIgb2YgYXR0cmlidXRlcy4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJv
dG90eXBlLmdldEF0dHJpYnV0ZXNDb3VudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2F0dHJpYnV0ZXMubGVuZ3RoOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0
aGUgaW5kZXggb2YgYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFt
ZSBvZiB0aGUgdW5pZm9ybSB0byBsb29rIHVwLgorICAgICAqIEByZXR1cm5zIHRoZSBpbmRleC4K
KyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLmdldFVuaWZvcm1JbmRleCA9IGZ1bmN0aW9u
ICh1bmlmb3JtTmFtZSkgeworICAgICAgICByZXR1cm4gdGhpcy5fdW5pZm9ybXNOYW1lcy5pbmRl
eE9mKHVuaWZvcm1OYW1lKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGF0
dHJpYnV0ZSBiYXNlZCBvbiB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFt
IHVuaWZvcm1OYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2sgdXAuCisgICAgICogQHJldHVybnMg
dGhlIGxvY2F0aW9uIG9mIHRoZSB1bmlmb3JtLgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5
cGUuZ2V0VW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSkgeworICAgICAgICByZXR1cm4g
dGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0
dXJucyBhbiBhcnJheSBvZiBzYW1wbGVyIHZhcmlhYmxlIG5hbWVzCisgICAgICogQHJldHVybnMg
VGhlIGFycmF5IG9mIHNhbXBsZXIgdmFyaWFibGUgbmVhbWVzLgorICAgICAqLworICAgIEVmZmVj
dC5wcm90b3R5cGUuZ2V0U2FtcGxlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0
aGlzLl9zYW1wbGVyTGlzdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoZSBlcnJvciBmcm9t
IHRoZSBsYXN0IGNvbXBpbGF0aW9uLgorICAgICAqIEByZXR1cm5zIHRoZSBlcnJvciBzdHJpbmcu
CisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5nZXRDb21waWxhdGlvbkVycm9yID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fY29tcGlsYXRpb25FcnJvcjsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEFkZHMgYSBjYWxsYmFjayB0byB0aGUgb25Db21waWxlZCBvYnNl
cnZhYmxlIGFuZCBjYWxsIHRoZSBjYWxsYmFjayBpbWVkaWF0bHkgaWYgYWxyZWFkeSByZWFkeS4K
KyAgICAgKiBAcGFyYW0gZnVuYyBUaGUgY2FsbGJhY2sgdG8gYmUgdXNlZC4KKyAgICAgKi8KKyAg
ICBFZmZlY3QucHJvdG90eXBlLmV4ZWN1dGVXaGVuQ29tcGlsZWQgPSBmdW5jdGlvbiAoZnVuYykg
eworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkp
IHsKKyAgICAgICAgICAgIGZ1bmModGhpcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5vbkNvbXBpbGVPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZWZmZWN0
KSB7CisgICAgICAgICAgICBmdW5jKGVmZmVjdCk7CisgICAgICAgIH0pOworICAgICAgICBpZiAo
IXRoaXMuX3BpcGVsaW5lQ29udGV4dCB8fCB0aGlzLl9waXBlbGluZUNvbnRleHQuaXNBc3luYykg
eworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAg
X3RoaXMuX2NoZWNrSXNSZWFkeSgpOworICAgICAgICAgICAgfSwgMTYpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBFZmZlY3QucHJvdG90eXBlLl9jaGVja0lzUmVhZHkgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5faXNSZWFkeUludGVybmFsKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
IHRoaXMuX3Byb2Nlc3NDb21waWxhdGlvbkVycm9ycyhlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IF90aGlzLl9jaGVja0lzUmVhZHkoKTsKKyAgICAgICAgfSwgMTYpOworICAgIH07CisgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLl9sb2FkVmVydGV4U2hhZGVyID0gZnVu
Y3Rpb24gKHZlcnRleCwgY2FsbGJhY2spIHsKKyAgICAgICAgaWYgKHR5cGVvZiAoSFRNTEVsZW1l
bnQpICE9PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgLy8gRE9NIGVsZW1lbnQgPworICAg
ICAgICAgICAgaWYgKHZlcnRleCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7CisgICAgICAgICAg
ICAgICAgdmFyIHZlcnRleENvZGUgPSBfTWlzY19kb21NYW5hZ2VtZW50X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkRvbU1hbmFnZW1lbnQiXS5HZXRET01UZXh0Q29udGVudCh2ZXJ0ZXgp
OworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHZlcnRleENvZGUpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBEaXJlY3Qgc291
cmNlID8KKyAgICAgICAgaWYgKHZlcnRleC5zdWJzdHIoMCwgNykgPT09ICJzb3VyY2U6Iikgewor
ICAgICAgICAgICAgY2FsbGJhY2sodmVydGV4LnN1YnN0cig3KSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gQmFzZTY0IGVuY29kZWQgPworICAgICAgICBpZiAo
dmVydGV4LnN1YnN0cigwLCA3KSA9PT0gImJhc2U2NDoiKSB7CisgICAgICAgICAgICB2YXIgdmVy
dGV4QmluYXJ5ID0gd2luZG93LmF0b2IodmVydGV4LnN1YnN0cig3KSk7CisgICAgICAgICAgICBj
YWxsYmFjayh2ZXJ0ZXhCaW5hcnkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIC8vIElzIGluIGxvY2FsIHN0b3JlID8KKyAgICAgICAgaWYgKEVmZmVjdC5TaGFkZXJz
U3RvcmVbdmVydGV4ICsgIlZlcnRleFNoYWRlciJdKSB7CisgICAgICAgICAgICBjYWxsYmFjayhF
ZmZlY3QuU2hhZGVyc1N0b3JlW3ZlcnRleCArICJWZXJ0ZXhTaGFkZXIiXSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHZlcnRleFNoYWRlclVybDsKKyAgICAg
ICAgaWYgKHZlcnRleFswXSA9PT0gIi4iIHx8IHZlcnRleFswXSA9PT0gIi8iIHx8IHZlcnRleC5p
bmRleE9mKCJodHRwIikgPiAtMSkgeworICAgICAgICAgICAgdmVydGV4U2hhZGVyVXJsID0gdmVy
dGV4OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmVydGV4U2hhZGVy
VXJsID0gRWZmZWN0LlNoYWRlcnNSZXBvc2l0b3J5ICsgdmVydGV4OworICAgICAgICB9CisgICAg
ICAgIC8vIFZlcnRleCBzaGFkZXIKKyAgICAgICAgdGhpcy5fZW5naW5lLl9sb2FkRmlsZSh2ZXJ0
ZXhTaGFkZXJVcmwgKyAiLnZlcnRleC5meCIsIGNhbGxiYWNrKTsKKyAgICB9OworICAgIC8qKiBA
aGlkZGVuICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5fbG9hZEZyYWdtZW50U2hhZGVyID0gZnVu
Y3Rpb24gKGZyYWdtZW50LCBjYWxsYmFjaykgeworICAgICAgICBpZiAodHlwZW9mIChIVE1MRWxl
bWVudCkgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAvLyBET00gZWxlbWVudCA/Cisg
ICAgICAgICAgICBpZiAoZnJhZ21lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgeworICAgICAg
ICAgICAgICAgIHZhciBmcmFnbWVudENvZGUgPSBfTWlzY19kb21NYW5hZ2VtZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIkRvbU1hbmFnZW1lbnQiXS5HZXRET01UZXh0Q29udGVudChm
cmFnbWVudCk7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soZnJhZ21lbnRDb2RlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8g
RGlyZWN0IHNvdXJjZSA/CisgICAgICAgIGlmIChmcmFnbWVudC5zdWJzdHIoMCwgNykgPT09ICJz
b3VyY2U6IikgeworICAgICAgICAgICAgY2FsbGJhY2soZnJhZ21lbnQuc3Vic3RyKDcpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBCYXNlNjQgZW5jb2RlZCA/
CisgICAgICAgIGlmIChmcmFnbWVudC5zdWJzdHIoMCwgNykgPT09ICJiYXNlNjQ6IikgeworICAg
ICAgICAgICAgdmFyIGZyYWdtZW50QmluYXJ5ID0gd2luZG93LmF0b2IoZnJhZ21lbnQuc3Vic3Ry
KDcpKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGZyYWdtZW50QmluYXJ5KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBJcyBpbiBsb2NhbCBzdG9yZSA/CisgICAg
ICAgIGlmIChFZmZlY3QuU2hhZGVyc1N0b3JlW2ZyYWdtZW50ICsgIlBpeGVsU2hhZGVyIl0pIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrKEVmZmVjdC5TaGFkZXJzU3RvcmVbZnJhZ21lbnQgKyAiUGl4
ZWxTaGFkZXIiXSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KEVmZmVjdC5TaGFkZXJzU3RvcmVbZnJhZ21lbnQgKyAiRnJhZ21lbnRTaGFkZXIiXSkgeworICAg
ICAgICAgICAgY2FsbGJhY2soRWZmZWN0LlNoYWRlcnNTdG9yZVtmcmFnbWVudCArICJGcmFnbWVu
dFNoYWRlciJdKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIg
ZnJhZ21lbnRTaGFkZXJVcmw7CisgICAgICAgIGlmIChmcmFnbWVudFswXSA9PT0gIi4iIHx8IGZy
YWdtZW50WzBdID09PSAiLyIgfHwgZnJhZ21lbnQuaW5kZXhPZigiaHR0cCIpID4gLTEpIHsKKyAg
ICAgICAgICAgIGZyYWdtZW50U2hhZGVyVXJsID0gZnJhZ21lbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBmcmFnbWVudFNoYWRlclVybCA9IEVmZmVjdC5TaGFkZXJz
UmVwb3NpdG9yeSArIGZyYWdtZW50OworICAgICAgICB9CisgICAgICAgIC8vIEZyYWdtZW50IHNo
YWRlcgorICAgICAgICB0aGlzLl9lbmdpbmUuX2xvYWRGaWxlKGZyYWdtZW50U2hhZGVyVXJsICsg
Ii5mcmFnbWVudC5meCIsIGNhbGxiYWNrKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgRWZmZWN0LnByb3RvdHlwZS5fZHVtcFNoYWRlcnNTb3VyY2UgPSBmdW5jdGlvbiAodmVydGV4
Q29kZSwgZnJhZ21lbnRDb2RlLCBkZWZpbmVzKSB7CisgICAgICAgIC8vIFJlYnVpbGQgc2hhZGVy
cyBzb3VyY2UgY29kZQorICAgICAgICB2YXIgc2hhZGVyVmVyc2lvbiA9ICh0aGlzLl9lbmdpbmUu
d2ViR0xWZXJzaW9uID4gMSkgPyAiI3ZlcnNpb24gMzAwIGVzXG4jZGVmaW5lIFdFQkdMMiBcbiIg
OiAiIjsKKyAgICAgICAgdmFyIHByZWZpeCA9IHNoYWRlclZlcnNpb24gKyAoZGVmaW5lcyA/IGRl
ZmluZXMgKyAiXG4iIDogIiIpOworICAgICAgICB2ZXJ0ZXhDb2RlID0gcHJlZml4ICsgdmVydGV4
Q29kZTsKKyAgICAgICAgZnJhZ21lbnRDb2RlID0gcHJlZml4ICsgZnJhZ21lbnRDb2RlOworICAg
ICAgICAvLyBOdW1iZXIgbGluZXMgb2Ygc2hhZGVycyBzb3VyY2UgY29kZQorICAgICAgICB2YXIg
aSA9IDI7CisgICAgICAgIHZhciByZWdleCA9IC9cbi9nbTsKKyAgICAgICAgdmFyIGZvcm1hdHRl
ZFZlcnRleENvZGUgPSAiXG4xXHQiICsgdmVydGV4Q29kZS5yZXBsYWNlKHJlZ2V4LCBmdW5jdGlv
biAoKSB7IHJldHVybiAiXG4iICsgKGkrKykgKyAiXHQiOyB9KTsKKyAgICAgICAgaSA9IDI7Cisg
ICAgICAgIHZhciBmb3JtYXR0ZWRGcmFnbWVudENvZGUgPSAiXG4xXHQiICsgZnJhZ21lbnRDb2Rl
LnJlcGxhY2UocmVnZXgsIGZ1bmN0aW9uICgpIHsgcmV0dXJuICJcbiIgKyAoaSsrKSArICJcdCI7
IH0pOworICAgICAgICAvLyBEdW1wIHNoYWRlcnMgbmFtZSBhbmQgZm9ybWF0dGVkIHNvdXJjZSBj
b2RlCisgICAgICAgIGlmICh0aGlzLm5hbWUudmVydGV4RWxlbWVudCkgeworICAgICAgICAgICAg
X01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxvZ2dlciJdLkVycm9y
KCJWZXJ0ZXggc2hhZGVyOiAiICsgdGhpcy5uYW1lLnZlcnRleEVsZW1lbnQgKyBmb3JtYXR0ZWRW
ZXJ0ZXhDb2RlKTsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJMb2dnZXIiXS5FcnJvcigiRnJhZ21lbnQgc2hhZGVyOiAiICsgdGhpcy5uYW1l
LmZyYWdtZW50RWxlbWVudCArIGZvcm1hdHRlZEZyYWdtZW50Q29kZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAodGhpcy5uYW1lLnZlcnRleCkgeworICAgICAgICAgICAgX01pc2NfbG9n
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxvZ2dlciJdLkVycm9yKCJWZXJ0ZXgg
c2hhZGVyOiAiICsgdGhpcy5uYW1lLnZlcnRleCArIGZvcm1hdHRlZFZlcnRleENvZGUpOworICAg
ICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxvZ2dl
ciJdLkVycm9yKCJGcmFnbWVudCBzaGFkZXI6ICIgKyB0aGlzLm5hbWUuZnJhZ21lbnQgKyBmb3Jt
YXR0ZWRGcmFnbWVudENvZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxvZ2dlciJdLkVy
cm9yKCJWZXJ0ZXggc2hhZGVyOiAiICsgdGhpcy5uYW1lICsgZm9ybWF0dGVkVmVydGV4Q29kZSk7
CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
TG9nZ2VyIl0uRXJyb3IoIkZyYWdtZW50IHNoYWRlcjogIiArIHRoaXMubmFtZSArIGZvcm1hdHRl
ZEZyYWdtZW50Q29kZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlY29t
cGlsZXMgdGhlIHdlYkdMIHByb2dyYW0KKyAgICAgKiBAcGFyYW0gdmVydGV4U291cmNlQ29kZSBU
aGUgc291cmNlIGNvZGUgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyLgorICAgICAqIEBwYXJhbSBmcmFn
bWVudFNvdXJjZUNvZGUgVGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgZnJhZ21lbnQgc2hhZGVyLgor
ICAgICAqIEBwYXJhbSBvbkNvbXBpbGVkIENhbGxiYWNrIGNhbGxlZCB3aGVuIGNvbXBsZXRlZC4K
KyAgICAgKiBAcGFyYW0gb25FcnJvciBDYWxsYmFjayBjYWxsZWQgb24gZXJyb3IuCisgICAgICog
QGhpZGRlbgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuX3JlYnVpbGRQcm9ncmFtID0g
ZnVuY3Rpb24gKHZlcnRleFNvdXJjZUNvZGUsIGZyYWdtZW50U291cmNlQ29kZSwgb25Db21waWxl
ZCwgb25FcnJvcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl9p
c1JlYWR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3ZlcnRleFNvdXJjZUNvZGVPdmVycmlkZSA9
IHZlcnRleFNvdXJjZUNvZGU7CisgICAgICAgIHRoaXMuX2ZyYWdtZW50U291cmNlQ29kZU92ZXJy
aWRlID0gZnJhZ21lbnRTb3VyY2VDb2RlOworICAgICAgICB0aGlzLm9uRXJyb3IgPSBmdW5jdGlv
biAoZWZmZWN0LCBlcnJvcikgeworICAgICAgICAgICAgaWYgKG9uRXJyb3IpIHsKKyAgICAgICAg
ICAgICAgICBvbkVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAg
ICAgdGhpcy5vbkNvbXBpbGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHNjZW5l
cyA9IF90aGlzLmdldEVuZ2luZSgpLnNjZW5lczsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc2NlbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgc2NlbmVzW2ldLm1h
cmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9BbGxEaXJ0eUZsYWcpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgX3RoaXMuX3BpcGVsaW5lQ29udGV4dC5faGFuZGxlc1NwZWN0
b3JSZWJ1aWxkQ2FsbGJhY2sob25Db21waWxlZCk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMu
X2ZhbGxiYWNrcyA9IG51bGw7CisgICAgICAgIHRoaXMuX3ByZXBhcmVFZmZlY3QoKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFByZXBhcmVzIHRoZSBlZmZlY3QKKyAgICAgKiBAaGlkZGVuCisg
ICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5fcHJlcGFyZUVmZmVjdCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIGF0dHJpYnV0ZXNOYW1l
cyA9IHRoaXMuX2F0dHJpYnV0ZXNOYW1lczsKKyAgICAgICAgdmFyIGRlZmluZXMgPSB0aGlzLmRl
ZmluZXM7CisgICAgICAgIHZhciBwcmV2aW91c1BpcGVsaW5lQ29udGV4dCA9IHRoaXMuX3BpcGVs
aW5lQ29udGV4dDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhciBlbmdpbmUgPSB0aGlz
Ll9lbmdpbmU7CisgICAgICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQgPSBlbmdpbmUuY3Jl
YXRlUGlwZWxpbmVDb250ZXh0KHRoaXMuX3Byb2Nlc3NpbmdDb250ZXh0KTsKKyAgICAgICAgICAg
IHZhciByZWJ1aWxkUmViaW5kID0gdGhpcy5fcmVidWlsZFByb2dyYW0uYmluZCh0aGlzKTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl92ZXJ0ZXhTb3VyY2VDb2RlT3ZlcnJpZGUgJiYgdGhpcy5fZnJh
Z21lbnRTb3VyY2VDb2RlT3ZlcnJpZGUpIHsKKyAgICAgICAgICAgICAgICBlbmdpbmUuX3ByZXBh
cmVQaXBlbGluZUNvbnRleHQodGhpcy5fcGlwZWxpbmVDb250ZXh0LCB0aGlzLl92ZXJ0ZXhTb3Vy
Y2VDb2RlT3ZlcnJpZGUsIHRoaXMuX2ZyYWdtZW50U291cmNlQ29kZU92ZXJyaWRlLCB0cnVlLCBy
ZWJ1aWxkUmViaW5kLCBudWxsLCB0aGlzLl90cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCB0aGlz
Ll9rZXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgZW5naW5lLl9wcmVwYXJlUGlwZWxpbmVDb250ZXh0KHRoaXMuX3BpcGVsaW5lQ29udGV4dCwg
dGhpcy5fdmVydGV4U291cmNlQ29kZSwgdGhpcy5fZnJhZ21lbnRTb3VyY2VDb2RlLCBmYWxzZSwg
cmVidWlsZFJlYmluZCwgZGVmaW5lcywgdGhpcy5fdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywg
dGhpcy5fa2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZ2luZS5fZXhlY3V0ZVdo
ZW5SZW5kZXJpbmdTdGF0ZUlzQ29tcGlsZWQodGhpcy5fcGlwZWxpbmVDb250ZXh0LCBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2F0dHJpYnV0ZXMgPSBbXTsKKyAgICAgICAg
ICAgICAgICBfdGhpcy5fcGlwZWxpbmVDb250ZXh0Ll9maWxsRWZmZWN0SW5mb3JtYXRpb24oX3Ro
aXMsIF90aGlzLl91bmlmb3JtQnVmZmVyc05hbWVzLCBfdGhpcy5fdW5pZm9ybXNOYW1lcywgX3Ro
aXMuX3VuaWZvcm1zLCBfdGhpcy5fc2FtcGxlckxpc3QsIF90aGlzLl9zYW1wbGVycywgYXR0cmli
dXRlc05hbWVzLCBfdGhpcy5fYXR0cmlidXRlcyk7CisgICAgICAgICAgICAgICAgX3RoaXMuX2Nv
bXBpbGF0aW9uRXJyb3IgPSAiIjsKKyAgICAgICAgICAgICAgICBfdGhpcy5faXNSZWFkeSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLm9uQ29tcGlsZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMub25Db21waWxlZChfdGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIF90aGlzLm9uQ29tcGlsZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKF90
aGlzKTsKKyAgICAgICAgICAgICAgICBfdGhpcy5vbkNvbXBpbGVPYnNlcnZhYmxlLmNsZWFyKCk7
CisgICAgICAgICAgICAgICAgLy8gVW5iaW5kIG1lc2ggcmVmZXJlbmNlIGluIGZhbGxiYWNrcwor
ICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fZmFsbGJhY2tzKSB7CisgICAgICAgICAgICAgICAg
ICAgIF90aGlzLl9mYWxsYmFja3MudW5CaW5kTWVzaCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAocHJldmlvdXNQaXBlbGluZUNvbnRleHQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuZ2V0RW5naW5lKCkuX2RlbGV0ZVBpcGVsaW5lQ29udGV4dChwcmV2aW91
c1BpcGVsaW5lQ29udGV4dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fcGlwZWxpbmVDb250ZXh0LmlzQXN5bmMpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9jaGVja0lzUmVhZHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0NvbXBpbGF0aW9u
RXJyb3JzKGUsIHByZXZpb3VzUGlwZWxpbmVDb250ZXh0KTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgRWZmZWN0LnByb3RvdHlwZS5fcHJvY2Vzc0NvbXBpbGF0aW9uRXJyb3JzID0gZnVuY3Rpb24g
KGUsIHByZXZpb3VzUGlwZWxpbmVDb250ZXh0KSB7CisgICAgICAgIGlmIChwcmV2aW91c1BpcGVs
aW5lQ29udGV4dCA9PT0gdm9pZCAwKSB7IHByZXZpb3VzUGlwZWxpbmVDb250ZXh0ID0gbnVsbDsg
fQorICAgICAgICB0aGlzLl9jb21waWxhdGlvbkVycm9yID0gZS5tZXNzYWdlOworICAgICAgICB2
YXIgYXR0cmlidXRlc05hbWVzID0gdGhpcy5fYXR0cmlidXRlc05hbWVzOworICAgICAgICB2YXIg
ZmFsbGJhY2tzID0gdGhpcy5fZmFsbGJhY2tzOworICAgICAgICAvLyBMZXQncyBnbyB0aHJvdWdo
IGZhbGxiYWNrcyB0aGVuCisgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJMb2dnZXIiXS5FcnJvcigiVW5hYmxlIHRvIGNvbXBpbGUgZWZmZWN0OiIpOwor
ICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTG9nZ2Vy
Il0uRXJyb3IoIlVuaWZvcm1zOiAiICsgdGhpcy5fdW5pZm9ybXNOYW1lcy5tYXAoZnVuY3Rpb24g
KHVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybiAiICIgKyB1bmlmb3JtOworICAgICAgICB9
KSk7CisgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJM
b2dnZXIiXS5FcnJvcigiQXR0cmlidXRlczogIiArIGF0dHJpYnV0ZXNOYW1lcy5tYXAoZnVuY3Rp
b24gKGF0dHJpYnV0ZSkgeworICAgICAgICAgICAgcmV0dXJuICIgIiArIGF0dHJpYnV0ZTsKKyAg
ICAgICAgfSkpOworICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siTG9nZ2VyIl0uRXJyb3IoIkRlZmluZXM6XHJcbiIgKyB0aGlzLmRlZmluZXMpOworICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTG9nZ2VyIl0u
RXJyb3IoIkVycm9yOiAiICsgdGhpcy5fY29tcGlsYXRpb25FcnJvcik7CisgICAgICAgIGlmIChw
cmV2aW91c1BpcGVsaW5lQ29udGV4dCkgeworICAgICAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250
ZXh0ID0gcHJldmlvdXNQaXBlbGluZUNvbnRleHQ7CisgICAgICAgICAgICB0aGlzLl9pc1JlYWR5
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLm9uRXJyb3IodGhpcywgdGhpcy5fY29tcGlsYXRpb25FcnJvcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLm9uRXJyb3JPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmFsbGJhY2tzKSB7CisgICAgICAgICAgICB0
aGlzLl9waXBlbGluZUNvbnRleHQgPSBudWxsOworICAgICAgICAgICAgaWYgKGZhbGxiYWNrcy5o
YXNNb3JlRmFsbGJhY2tzKSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIkxvZ2dlciJdLkVycm9yKCJUcnlpbmcgbmV4dCBmYWxsYmFj
ay4iKTsKKyAgICAgICAgICAgICAgICB0aGlzLmRlZmluZXMgPSBmYWxsYmFja3MucmVkdWNlKHRo
aXMuZGVmaW5lcywgdGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZUVmZmVjdCgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7IC8vIFNvcnJ5IHdlIGRpZCBldmVy
eXRoaW5nIHdlIGNhbgorICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKHRoaXMsIHRoaXMuX2NvbXBpbGF0aW9uRXJyb3Ip
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3JPYnNlcnZh
YmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3JP
YnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgLy8gVW5iaW5kIG1lc2ggcmVmZXJl
bmNlIGluIGZhbGxiYWNrcworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mYWxsYmFja3MpIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmFsbGJhY2tzLnVuQmluZE1lc2goKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShFZmZlY3QucHJvdG90eXBlLCAiaXNTdXBwb3J0ZWQiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBDaGVja3MgaWYgdGhlIGVmZmVjdCBpcyBzdXBwb3J0ZWQuIChN
dXN0IGJlIGNhbGxlZCBhZnRlciBjb21waWxhdGlvbikKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBpbGF0aW9uRXJy
b3IgPT09ICIiOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyBhIHRl
eHR1cmUgdG8gdGhlIGVuZ2luZSB0byBiZSB1c2VkIGFzIG91dHB1dCBvZiB0aGUgc2hhZGVyLgor
ICAgICAqIEBwYXJhbSBjaGFubmVsIE5hbWUgb2YgdGhlIG91dHB1dCB2YXJpYWJsZS4KKyAgICAg
KiBAcGFyYW0gdGV4dHVyZSBUZXh0dXJlIHRvIGJpbmQuCisgICAgICogQGhpZGRlbgorICAgICAq
LworICAgIEVmZmVjdC5wcm90b3R5cGUuX2JpbmRUZXh0dXJlID0gZnVuY3Rpb24gKGNoYW5uZWws
IHRleHR1cmUpIHsKKyAgICAgICAgdGhpcy5fZW5naW5lLl9iaW5kVGV4dHVyZSh0aGlzLl9zYW1w
bGVyc1tjaGFubmVsXSwgdGV4dHVyZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEg
dGV4dHVyZSBvbiB0aGUgZW5naW5lIHRvIGJlIHVzZWQgaW4gdGhlIHNoYWRlci4KKyAgICAgKiBA
cGFyYW0gY2hhbm5lbCBOYW1lIG9mIHRoZSBzYW1wbGVyIHZhcmlhYmxlLgorICAgICAqIEBwYXJh
bSB0ZXh0dXJlIFRleHR1cmUgdG8gc2V0LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUu
c2V0VGV4dHVyZSA9IGZ1bmN0aW9uIChjaGFubmVsLCB0ZXh0dXJlKSB7CisgICAgICAgIHRoaXMu
X2VuZ2luZS5zZXRUZXh0dXJlKHRoaXMuX3NhbXBsZXJzW2NoYW5uZWxdLCB0aGlzLl91bmlmb3Jt
c1tjaGFubmVsXSwgdGV4dHVyZSwgY2hhbm5lbCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXRzIGEgZGVwdGggc3RlbmNpbCB0ZXh0dXJlIGZyb20gYSByZW5kZXIgdGFyZ2V0IG9uIHRoZSBl
bmdpbmUgdG8gYmUgdXNlZCBpbiB0aGUgc2hhZGVyLgorICAgICAqIEBwYXJhbSBjaGFubmVsIE5h
bWUgb2YgdGhlIHNhbXBsZXIgdmFyaWFibGUuCisgICAgICogQHBhcmFtIHRleHR1cmUgVGV4dHVy
ZSB0byBzZXQuCisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5zZXREZXB0aFN0ZW5jaWxU
ZXh0dXJlID0gZnVuY3Rpb24gKGNoYW5uZWwsIHRleHR1cmUpIHsKKyAgICAgICAgdGhpcy5fZW5n
aW5lLnNldERlcHRoU3RlbmNpbFRleHR1cmUodGhpcy5fc2FtcGxlcnNbY2hhbm5lbF0sIHRoaXMu
X3VuaWZvcm1zW2NoYW5uZWxdLCB0ZXh0dXJlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
dHMgYW4gYXJyYXkgb2YgdGV4dHVyZXMgb24gdGhlIGVuZ2luZSB0byBiZSB1c2VkIGluIHRoZSBz
aGFkZXIuCisgICAgICogQHBhcmFtIGNoYW5uZWwgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAg
ICogQHBhcmFtIHRleHR1cmVzIFRleHR1cmVzIHRvIHNldC4KKyAgICAgKi8KKyAgICBFZmZlY3Qu
cHJvdG90eXBlLnNldFRleHR1cmVBcnJheSA9IGZ1bmN0aW9uIChjaGFubmVsLCB0ZXh0dXJlcykg
eworICAgICAgICB2YXIgZXhOYW1lID0gY2hhbm5lbCArICJFeCI7CisgICAgICAgIGlmICh0aGlz
Ll9zYW1wbGVyTGlzdC5pbmRleE9mKGV4TmFtZSArICIwIikgPT09IC0xKSB7CisgICAgICAgICAg
ICB2YXIgaW5pdGlhbFBvcyA9IHRoaXMuX3NhbXBsZXJMaXN0LmluZGV4T2YoY2hhbm5lbCk7Cisg
ICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgdGV4dHVyZXMubGVuZ3RoOyBp
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRFeE5hbWUgPSBleE5hbWUgKyAo
aW5kZXggLSAxKS50b1N0cmluZygpOworICAgICAgICAgICAgICAgIHRoaXMuX3NhbXBsZXJMaXN0
LnNwbGljZShpbml0aWFsUG9zICsgaW5kZXgsIDAsIGN1cnJlbnRFeE5hbWUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gUmVzZXQgZXZlcnkgY2hhbm5lbHMKKyAgICAgICAgICAgIHZh
ciBjaGFubmVsSW5kZXggPSAwOworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRo
aXMuX3NhbXBsZXJMaXN0OyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAg
IHZhciBrZXkgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgdGhpcy5fc2FtcGxlcnNba2V5XSA9
IGNoYW5uZWxJbmRleDsKKyAgICAgICAgICAgICAgICBjaGFubmVsSW5kZXggKz0gMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9lbmdpbmUuc2V0VGV4dHVyZUFycmF5
KHRoaXMuX3NhbXBsZXJzW2NoYW5uZWxdLCB0aGlzLl91bmlmb3Jtc1tjaGFubmVsXSwgdGV4dHVy
ZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIHRleHR1cmUgdG8gYmUgdGhlIGlu
cHV0IG9mIHRoZSBzcGVjaWZpZWQgcG9zdCBwcm9jZXNzLiAoVG8gdXNlIHRoZSBvdXRwdXQsIHBh
c3MgaW4gdGhlIG5leHQgcG9zdCBwcm9jZXNzIGluIHRoZSBwaXBlbGluZSkKKyAgICAgKiBAcGFy
YW0gY2hhbm5lbCBOYW1lIG9mIHRoZSBzYW1wbGVyIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBw
b3N0UHJvY2VzcyBQb3N0IHByb2Nlc3MgdG8gZ2V0IHRoZSBpbnB1dCB0ZXh0dXJlIGZyb20uCisg
ICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5zZXRUZXh0dXJlRnJvbVBvc3RQcm9jZXNzID0g
ZnVuY3Rpb24gKGNoYW5uZWwsIHBvc3RQcm9jZXNzKSB7CisgICAgICAgIHRoaXMuX2VuZ2luZS5z
ZXRUZXh0dXJlRnJvbVBvc3RQcm9jZXNzKHRoaXMuX3NhbXBsZXJzW2NoYW5uZWxdLCBwb3N0UHJv
Y2Vzcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiAoV2FybmluZyEgc2V0VGV4dHVyZUZyb21Q
b3N0UHJvY2Vzc091dHB1dCBtYXkgYmUgZGVzaXJlZCBpbnN0ZWFkKQorICAgICAqIFNldHMgdGhl
IGlucHV0IHRleHR1cmUgb2YgdGhlIHBhc3NlZCBpbiBwb3N0IHByb2Nlc3MgdG8gYmUgaW5wdXQg
b2YgdGhpcyBlZmZlY3QuIChUbyB1c2UgdGhlIG91dHB1dCBvZiB0aGUgcGFzc2VkIGluIHBvc3Qg
cHJvY2VzcyB1c2Ugc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2Vzc091dHB1dCkKKyAgICAgKiBAcGFy
YW0gY2hhbm5lbCBOYW1lIG9mIHRoZSBzYW1wbGVyIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBw
b3N0UHJvY2VzcyBQb3N0IHByb2Nlc3MgdG8gZ2V0IHRoZSBvdXRwdXQgdGV4dHVyZSBmcm9tLgor
ICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2Vzc091
dHB1dCA9IGZ1bmN0aW9uIChjaGFubmVsLCBwb3N0UHJvY2VzcykgeworICAgICAgICB0aGlzLl9l
bmdpbmUuc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2Vzc091dHB1dCh0aGlzLl9zYW1wbGVyc1tjaGFu
bmVsXSwgcG9zdFByb2Nlc3MpOworICAgIH07CisgICAgLyoqCisgICAgICogQmluZHMgYSBidWZm
ZXIgdG8gYSB1bmlmb3JtLgorICAgICAqIEBwYXJhbSBidWZmZXIgQnVmZmVyIHRvIGJpbmQuCisg
ICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgdW5pZm9ybSB2YXJpYWJsZSB0byBiaW5kIHRv
LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuYmluZFVuaWZvcm1CdWZmZXIgPSBmdW5j
dGlvbiAoYnVmZmVyLCBuYW1lKSB7CisgICAgICAgIHZhciBidWZmZXJOYW1lID0gdGhpcy5fdW5p
Zm9ybUJ1ZmZlcnNOYW1lc1tuYW1lXTsKKyAgICAgICAgaWYgKGJ1ZmZlck5hbWUgPT09IHVuZGVm
aW5lZCB8fCBFZmZlY3QuX2Jhc2VDYWNoZVtidWZmZXJOYW1lXSA9PT0gYnVmZmVyKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgRWZmZWN0Ll9iYXNlQ2FjaGVbYnVm
ZmVyTmFtZV0gPSBidWZmZXI7CisgICAgICAgIHRoaXMuX2VuZ2luZS5iaW5kVW5pZm9ybUJ1ZmZl
ckJhc2UoYnVmZmVyLCBidWZmZXJOYW1lLCBuYW1lKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEJpbmRzIGJsb2NrIHRvIGEgdW5pZm9ybS4KKyAgICAgKiBAcGFyYW0gYmxvY2tOYW1lIE5hbWUg
b2YgdGhlIGJsb2NrIHRvIGJpbmQuCisgICAgICogQHBhcmFtIGluZGV4IEluZGV4IHRvIGJpbmQu
CisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5iaW5kVW5pZm9ybUJsb2NrID0gZnVuY3Rp
b24gKGJsb2NrTmFtZSwgaW5kZXgpIHsKKyAgICAgICAgdGhpcy5fZW5naW5lLmJpbmRVbmlmb3Jt
QmxvY2sodGhpcy5fcGlwZWxpbmVDb250ZXh0LCBibG9ja05hbWUsIGluZGV4KTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNldHMgYW4gaW50ZXJnZXIgdmFsdWUgb24gYSB1bmlmb3JtIHZhcmlh
YmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAg
ICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMg
ZWZmZWN0LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0SW50ID0gZnVuY3Rpb24g
KHVuaWZvcm1OYW1lLCB2YWx1ZSkgeworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQuc2V0
SW50KHVuaWZvcm1OYW1lLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU2V0cyBhbiBpbnQgYXJyYXkgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgor
ICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBA
cGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0
LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0SW50QXJyYXkgPSBmdW5jdGlvbiAo
dW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRJ
bnRBcnJheSh1bmlmb3JtTmFtZSwgYXJyYXkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgYW4gaW50IGFycmF5IDIgb24gYSB1bmlmb3JtIHZhcmlh
YmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDRdIHdp
bGwgcmVzdWx0IGluIFtbMSwyXSxbMyw0XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0g
dW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFy
cmF5IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAg
ICBFZmZlY3QucHJvdG90eXBlLnNldEludEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwg
YXJyYXkpIHsKKyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldEludEFycmF5Mih1bmlm
b3JtTmFtZSwgYXJyYXkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldHMgYW4gaW50IGFycmF5IDMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkg
aXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDQsNSw2XSB3aWxsIHJlc3Vs
dCBpbiBbWzEsMiwzXSxbNCw1LDZdXSBpbiB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlm
b3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkg
dG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIEVm
ZmVjdC5wcm90b3R5cGUuc2V0SW50QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJh
eSkgeworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQuc2V0SW50QXJyYXkzKHVuaWZvcm1O
YW1lLCBhcnJheSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0cyBhbiBpbnQgYXJyYXkgNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJheSBpcyBz
cGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNCw1LDYsNyw4XSB3aWxsIHJlc3Vs
dCBpbiBbWzEsMiwzLDRdLFs1LDYsNyw4XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0g
dW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFy
cmF5IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAg
ICBFZmZlY3QucHJvdG90eXBlLnNldEludEFycmF5NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwg
YXJyYXkpIHsKKyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldEludEFycmF5NCh1bmlm
b3JtTmFtZSwgYXJyYXkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldHMgYW4gZmxvYXQgYXJyYXkgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAq
IEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0g
YXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAg
ICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0RmxvYXRBcnJheSA9IGZ1bmN0aW9uICh1bmlm
b3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldEZsb2F0
QXJyYXkodW5pZm9ybU5hbWUsIGFycmF5KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGZsb2F0IGFycmF5IDIgb24gYSB1bmlmb3JtIHZhcmlh
YmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDRdIHdp
bGwgcmVzdWx0IGluIFtbMSwyXSxbMyw0XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0g
dW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFy
cmF5IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAg
ICBFZmZlY3QucHJvdG90eXBlLnNldEZsb2F0QXJyYXkyID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1l
LCBhcnJheSkgeworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQuc2V0RmxvYXRBcnJheTIo
dW5pZm9ybU5hbWUsIGFycmF5KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIGFuIGZsb2F0IGFycmF5IDMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAo
QXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDQsNSw2XSB3aWxs
IHJlc3VsdCBpbiBbWzEsMiwzXSxbNCw1LDZdXSBpbiB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJh
bSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkg
YXJyYXkgdG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLwor
ICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9ybU5h
bWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRGbG9hdEFycmF5
Myh1bmlmb3JtTmFtZSwgYXJyYXkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHMgYW4gZmxvYXQgYXJyYXkgNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUu
IChBcnJheSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNCw1LDYsNyw4
XSB3aWxsIHJlc3VsdCBpbiBbWzEsMiwzLDRdLFs1LDYsNyw4XV0gaW4gdGhlIHNoYWRlcikKKyAg
ICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBh
cmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4K
KyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldEZsb2F0QXJyYXk0ID0gZnVuY3Rpb24g
KHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQuc2V0
RmxvYXRBcnJheTQodW5pZm9ybU5hbWUsIGFycmF5KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGFycmF5IG9uIGEgdW5pZm9ybSB2YXJpYWJs
ZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAg
ICogQHBhcmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVm
ZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldEFycmF5ID0gZnVuY3Rpb24g
KHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQuc2V0
QXJyYXkodW5pZm9ybU5hbWUsIGFycmF5KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGFycmF5IDIgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAo
QXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDRdIHdpbGwgcmVz
dWx0IGluIFtbMSwyXSxbMyw0XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0gdW5pZm9y
bU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5IHRv
IGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAgICBFZmZl
Y3QucHJvdG90eXBlLnNldEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsK
KyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldEFycmF5Mih1bmlmb3JtTmFtZSwgYXJy
YXkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMg
YW4gYXJyYXkgMyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJheSBpcyBzcGVjaWZpZWQgYXMg
c2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNCw1LDZdIHdpbGwgcmVzdWx0IGluIFtbMSwyLDNdLFs0
LDUsNl1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2Yg
dGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAg
ICogQHJldHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5z
ZXRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMu
X3BpcGVsaW5lQ29udGV4dC5zZXRBcnJheTModW5pZm9ybU5hbWUsIGFycmF5KTsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGFycmF5IDQgb24g
YSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBl
Zy4gWzEsMiwzLDQsNSw2LDcsOF0gd2lsbCByZXN1bHQgaW4gW1sxLDIsMyw0XSxbNSw2LDcsOF1d
IGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZh
cmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAgICogQHJl
dHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5zZXRBcnJh
eTQgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMuX3BpcGVs
aW5lQ29udGV4dC5zZXRBcnJheTQodW5pZm9ybU5hbWUsIGFycmF5KTsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIG1hdHJpY2VzIG9uIGEgdW5pZm9y
bSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFi
bGUuCisgICAgICogQHBhcmFtIG1hdHJpY2VzIG1hdHJpY2VzIHRvIGJlIHNldC4KKyAgICAgKiBA
cmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldE1h
dHJpY2VzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBtYXRyaWNlcykgeworICAgICAgICB0aGlz
Ll9waXBlbGluZUNvbnRleHQuc2V0TWF0cmljZXModW5pZm9ybU5hbWUsIG1hdHJpY2VzKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIG1hdHJpeCBv
biBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2Yg
dGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBtYXRyaXggbWF0cml4IHRvIGJlIHNldC4KKyAg
ICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBl
LnNldE1hdHJpeCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgbWF0cml4KSB7CisgICAgICAgIHRo
aXMuX3BpcGVsaW5lQ29udGV4dC5zZXRNYXRyaXgodW5pZm9ybU5hbWUsIG1hdHJpeCk7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIDN4MyBtYXRy
aXggb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoU3BlaWNpZmllZCBhcyBbMSwyLDMsNCw1LDYsNyw4
LDldIHdpbGwgcmVzdWx0IGluIFsxLDIsM11bNCw1LDZdWzcsOCw5XSBtYXRyaXgpCisgICAgICog
QHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBt
YXRyaXggbWF0cml4IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAg
ICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldE1hdHJpeDN4MyA9IGZ1bmN0aW9uICh1bmlm
b3JtTmFtZSwgbWF0cml4KSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRNYXRy
aXgzeDModW5pZm9ybU5hbWUsIG1hdHJpeCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0cyBhIDJ4MiBtYXRyaXggb24gYSB1bmlmb3JtIHZhcmlhYmxl
LiAoU3BlaWNpZmllZCBhcyBbMSwyLDMsNF0gd2lsbCByZXN1bHQgaW4gWzEsMl1bMyw0XSBtYXRy
aXgpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAg
ICAqIEBwYXJhbSBtYXRyaXggbWF0cml4IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlz
IGVmZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldE1hdHJpeDJ4MiA9IGZ1
bmN0aW9uICh1bmlmb3JtTmFtZSwgbWF0cml4KSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5lQ29u
dGV4dC5zZXRNYXRyaXgyeDIodW5pZm9ybU5hbWUsIG1hdHJpeCk7CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIGZsb2F0IG9uIGEgdW5pZm9ybSB2
YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUu
CisgICAgICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0
aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldEZsb2F0ID0gZnVu
Y3Rpb24gKHVuaWZvcm1OYW1lLCB2YWx1ZSkgeworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRl
eHQuc2V0RmxvYXQodW5pZm9ybU5hbWUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgYm9vbGVhbiBvbiBhIHVuaWZvcm0gdmFyaWFi
bGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAg
ICAqIEBwYXJhbSBib29sIHZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVm
ZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldEJvb2wgPSBmdW5jdGlvbiAo
dW5pZm9ybU5hbWUsIGJvb2wpIHsKKyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldEJv
b2wodW5pZm9ybU5hbWUsIGJvb2wpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHMgYSBWZWN0b3IyIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAg
KiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFt
IHZlY3RvcjIgdmVjdG9yMiB0byBiZSBzZXQuCisgICAgICogQHJldHVybnMgdGhpcyBlZmZlY3Qu
CisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5zZXRWZWN0b3IyID0gZnVuY3Rpb24gKHVu
aWZvcm1OYW1lLCB2ZWN0b3IyKSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRW
ZWN0b3IyKHVuaWZvcm1OYW1lLCB2ZWN0b3IyKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgZmxvYXQyIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4K
KyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICog
QHBhcmFtIHggRmlyc3QgZmxvYXQgaW4gZmxvYXQyLgorICAgICAqIEBwYXJhbSB5IFNlY29uZCBm
bG9hdCBpbiBmbG9hdDIuCisgICAgICogQHJldHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisg
ICAgRWZmZWN0LnByb3RvdHlwZS5zZXRGbG9hdDIgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIHgs
IHkpIHsKKyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldEZsb2F0Mih1bmlmb3JtTmFt
ZSwgeCwgeSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICog
U2V0cyBhIFZlY3RvcjMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlm
b3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdmVjdG9yMyBWYWx1
ZSB0byBiZSBzZXQuCisgICAgICogQHJldHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisgICAg
RWZmZWN0LnByb3RvdHlwZS5zZXRWZWN0b3IzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB2ZWN0
b3IzKSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRWZWN0b3IzKHVuaWZvcm1O
YW1lLCB2ZWN0b3IzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXRzIGEgZmxvYXQzIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0g
dW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIHggRmlyc3Qg
ZmxvYXQgaW4gZmxvYXQzLgorICAgICAqIEBwYXJhbSB5IFNlY29uZCBmbG9hdCBpbiBmbG9hdDMu
CisgICAgICogQHBhcmFtIHogVGhpcmQgZmxvYXQgaW4gZmxvYXQzLgorICAgICAqIEByZXR1cm5z
IHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0RmxvYXQzID0g
ZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB4LCB5LCB6KSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5l
Q29udGV4dC5zZXRGbG9hdDModW5pZm9ybU5hbWUsIHgsIHksIHopOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYSBWZWN0b3I0IG9uIGEgdW5pZm9y
bSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFi
bGUuCisgICAgICogQHBhcmFtIHZlY3RvcjQgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEByZXR1
cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0VmVjdG9y
NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgdmVjdG9yNCkgeworICAgICAgICB0aGlzLl9waXBl
bGluZUNvbnRleHQuc2V0VmVjdG9yNCh1bmlmb3JtTmFtZSwgdmVjdG9yNCk7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIGZsb2F0NCBvbiBhIHVu
aWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZh
cmlhYmxlLgorICAgICAqIEBwYXJhbSB4IEZpcnN0IGZsb2F0IGluIGZsb2F0NC4KKyAgICAgKiBA
cGFyYW0geSBTZWNvbmQgZmxvYXQgaW4gZmxvYXQ0LgorICAgICAqIEBwYXJhbSB6IFRoaXJkIGZs
b2F0IGluIGZsb2F0NC4KKyAgICAgKiBAcGFyYW0gdyBGb3VydGggZmxvYXQgaW4gZmxvYXQ0Lgor
ICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5
cGUuc2V0RmxvYXQ0ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB4LCB5LCB6LCB3KSB7CisgICAg
ICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRGbG9hdDQodW5pZm9ybU5hbWUsIHgsIHksIHos
IHcpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMg
YSBDb2xvcjMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFt
ZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gY29sb3IzIFZhbHVlIHRvIGJl
IHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3Qu
cHJvdG90eXBlLnNldENvbG9yMyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgY29sb3IzKSB7Cisg
ICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRDb2xvcjModW5pZm9ybU5hbWUsIGNvbG9y
Myk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBh
IENvbG9yNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1l
IE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBjb2xvcjMgVmFsdWUgdG8gYmUg
c2V0LgorICAgICAqIEBwYXJhbSBhbHBoYSBBbHBoYSB2YWx1ZSB0byBiZSBzZXQuCisgICAgICog
QHJldHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5zZXRD
b2xvcjQgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGNvbG9yMywgYWxwaGEpIHsKKyAgICAgICAg
dGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldENvbG9yNCh1bmlmb3JtTmFtZSwgY29sb3IzLCBhbHBo
YSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBh
IENvbG9yNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUg
ZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUKKyAgICAgKiBAcGFyYW0gY29sb3I0IGRl
ZmluZXMgdGhlIHZhbHVlIHRvIGJlIHNldAorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0Lgor
ICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0RGlyZWN0Q29sb3I0ID0gZnVuY3Rpb24g
KHVuaWZvcm1OYW1lLCBjb2xvcjQpIHsKKyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNl
dERpcmVjdENvbG9yNCh1bmlmb3JtTmFtZSwgY29sb3I0KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIGFsbCBhc3NvY2lhdGVkIHJlc291cmNl
cy4KKyAgICAgKiovCisgICAgRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBpZiAodGhpcy5fcGlwZWxpbmVDb250ZXh0KSB7CisgICAgICAgICAgICB0aGlz
Ll9waXBlbGluZUNvbnRleHQuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Vu
Z2luZS5fcmVsZWFzZUVmZmVjdCh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoaXMg
ZnVuY3Rpb24gd2lsbCBhZGQgYSBuZXcgc2hhZGVyIHRvIHRoZSBzaGFkZXIgc3RvcmUKKyAgICAg
KiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgc2hhZGVyCisgICAgICogQHBhcmFtIHBpeGVs
U2hhZGVyIG9wdGlvbmFsIHBpeGVsIHNoYWRlciBjb250ZW50CisgICAgICogQHBhcmFtIHZlcnRl
eFNoYWRlciBvcHRpb25hbCB2ZXJ0ZXggc2hhZGVyIGNvbnRlbnQKKyAgICAgKi8KKyAgICBFZmZl
Y3QuUmVnaXN0ZXJTaGFkZXIgPSBmdW5jdGlvbiAobmFtZSwgcGl4ZWxTaGFkZXIsIHZlcnRleFNo
YWRlcikgeworICAgICAgICBpZiAocGl4ZWxTaGFkZXIpIHsKKyAgICAgICAgICAgIEVmZmVjdC5T
aGFkZXJzU3RvcmVbbmFtZSArICJQaXhlbFNoYWRlciJdID0gcGl4ZWxTaGFkZXI7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHZlcnRleFNoYWRlcikgeworICAgICAgICAgICAgRWZmZWN0LlNoYWRl
cnNTdG9yZVtuYW1lICsgIlZlcnRleFNoYWRlciJdID0gdmVydGV4U2hhZGVyOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXNldHMgdGhlIGNhY2hlIG9mIGVmZmVjdHMuCisg
ICAgICovCisgICAgRWZmZWN0LlJlc2V0Q2FjaGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIEVm
ZmVjdC5fYmFzZUNhY2hlID0ge307CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIG9yIHNl
dHMgdGhlIHJlbGF0aXZlIHVybCB1c2VkIHRvIGxvYWQgc2hhZGVycyBpZiB1c2luZyB0aGUgZW5n
aW5lIGluIG5vbi1taW5pZmllZCBtb2RlCisgICAgICovCisgICAgRWZmZWN0LlNoYWRlcnNSZXBv
c2l0b3J5ID0gInNyYy9TaGFkZXJzLyI7CisgICAgRWZmZWN0Ll91bmlxdWVJZFNlZWQgPSAwOwor
ICAgIEVmZmVjdC5fYmFzZUNhY2hlID0ge307CisgICAgLyoqCisgICAgICogU3RvcmUgb2YgZWFj
aCBzaGFkZXIgKFRoZSBjYW4gYmUgbG9va2VkIHVwIHVzaW5nIGVmZmVjdC5rZXkpCisgICAgICov
CisgICAgRWZmZWN0LlNoYWRlcnNTdG9yZSA9IHt9OworICAgIC8qKgorICAgICAqIFN0b3JlIG9m
IGVhY2ggaW5jbHVkZWQgZmlsZSBmb3IgYSBzaGFkZXIgKFRoZSBjYW4gYmUgbG9va2VkIHVwIHVz
aW5nIGVmZmVjdC5rZXkpCisgICAgICovCisgICAgRWZmZWN0LkluY2x1ZGVzU2hhZGVyc1N0b3Jl
ID0ge307CisgICAgcmV0dXJuIEVmZmVjdDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdFJlbmRlcmVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9lZmZlY3RSZW5kZXJl
ci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IEVmZmVjdFJlbmRlcmVyLCBFZmZlY3RXcmFwcGVyICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdFJlbmRlcmVyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBFZmZlY3RSZW5kZXJlcjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFZmZlY3RX
cmFwcGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFZmZlY3RXcmFwcGVyOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xp
Yi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVz
X3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0
dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZpZXdwb3J0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZpZXdwb3J0ICov
ICIuL01hdGhzL21hdGgudmlld3BvcnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3Rh
bnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlz
Yy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19wb3N0cHJvY2Vzc192ZXJ0ZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRl
cnMvcG9zdHByb2Nlc3MudmVydGV4ICovICIuL1NoYWRlcnMvcG9zdHByb2Nlc3MudmVydGV4LnRz
Iik7CisKKworCisKKworCisKKy8vIFByZXZlbnRzIEVTNiBDcmFzaCBpZiBub3QgaW1wb3J0ZWQu
CisKKy8qKgorICogSGVscGVyIGNsYXNzIHRvIHJlbmRlciBvbmUgb3IgbW9yZSBlZmZlY3RzCisg
Ki8KK3ZhciBFZmZlY3RSZW5kZXJlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIGVmZmVjdCByZW5kZXJlcgorICAgICAqIEBwYXJhbSBl
bmdpbmUgdGhlIGVuZ2luZSB0byB1c2UgZm9yIHJlbmRlcmluZworICAgICAqIEBwYXJhbSBvcHRp
b25zIGRlZmluZXMgdGhlIG9wdGlvbnMgb2YgdGhlIGVmZmVjdCByZW5kZXJlcgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIEVmZmVjdFJlbmRlcmVyKGVuZ2luZSwgb3B0aW9ucykgeworICAgICAgICB2
YXIgX2E7CisgICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IEVmZmVj
dFJlbmRlcmVyLl9EZWZhdWx0T3B0aW9uczsgfQorICAgICAgICB0aGlzLmVuZ2luZSA9IGVuZ2lu
ZTsKKyAgICAgICAgdGhpcy5fcmluZ0J1ZmZlckluZGV4ID0gMDsKKyAgICAgICAgdGhpcy5fcmlu
Z1NjcmVlbkJ1ZmZlciA9IG51bGw7CisgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5WaWV3cG9ydCA9
IG5ldyBfTWF0aHNfbWF0aF92aWV3cG9ydF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
aWV3cG9ydCJdKDAsIDAsIDEsIDEpOworICAgICAgICBvcHRpb25zID0gdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19hc3NpZ24iXSh7fSwgRWZmZWN0UmVuZGVyZXIuX0RlZmF1
bHRPcHRpb25zLCBvcHRpb25zKTsKKyAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVycyA9IChfYSA9
IHt9LAorICAgICAgICAgICAgX2FbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXSA9IG5ldyBfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXShlbmdpbmUsIG9w
dGlvbnMucG9zaXRpb25zLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIGZhbHNlLCBmYWxzZSwgMiksCisgICAg
ICAgICAgICBfYSk7CisgICAgICAgIHRoaXMuX2luZGV4QnVmZmVyID0gZW5naW5lLmNyZWF0ZUlu
ZGV4QnVmZmVyKG9wdGlvbnMuaW5kaWNlcyk7CisgICAgICAgIC8vIE5vIG5lZWQgaGVyZSBmb3Ig
ZnVsbCBzY3JlZW4gcmVuZGVyLgorICAgICAgICBlbmdpbmUuc2V0RGVwdGhCdWZmZXIoZmFsc2Up
OworICAgICAgICBlbmdpbmUuc2V0U3RlbmNpbEJ1ZmZlcihmYWxzZSk7CisgICAgfQorICAgIEVm
ZmVjdFJlbmRlcmVyLnByb3RvdHlwZS5fZ2V0TmV4dEZyYW1lQnVmZmVyID0gZnVuY3Rpb24gKGlu
Y3JlbWVudEluZGV4KSB7CisgICAgICAgIGlmIChpbmNyZW1lbnRJbmRleCA9PT0gdm9pZCAwKSB7
IGluY3JlbWVudEluZGV4ID0gdHJ1ZTsgfQorICAgICAgICBpZiAoIXRoaXMuX3JpbmdTY3JlZW5C
dWZmZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX3JpbmdTY3JlZW5CdWZmZXIgPSBbXTsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFy
IGludGVybmFsVGV4dHVyZSA9IHRoaXMuZW5naW5lLmNyZWF0ZVJlbmRlclRhcmdldFRleHR1cmUo
eworICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5lbmdpbmUuZ2V0UmVuZGVyV2lkdGgo
dHJ1ZSksCisgICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5lbmdpbmUuZ2V0UmVuZGVy
SGVpZ2h0KHRydWUpLAorICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAg
Z2VuZXJhdGVEZXB0aEJ1ZmZlcjogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRl
U3RlbmNpbEJ1ZmZlcjogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlTWlwTWFw
czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nTW9kZTogX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbnN0YW50cyJdLlRFWFRVUkVf
TkVBUkVTVF9ORUFSRVNULAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHZh
ciB0ZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0oIiIsIG51bGwpOworICAgICAgICAgICAgICAgIHRl
eHR1cmUuX3RleHR1cmUgPSBpbnRlcm5hbFRleHR1cmU7CisgICAgICAgICAgICAgICAgdGhpcy5f
cmluZ1NjcmVlbkJ1ZmZlci5wdXNoKHRleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHZhciByZXQgPSB0aGlzLl9yaW5nU2NyZWVuQnVmZmVyW3RoaXMuX3JpbmdCdWZm
ZXJJbmRleF07CisgICAgICAgIGlmIChpbmNyZW1lbnRJbmRleCkgeworICAgICAgICAgICAgdGhp
cy5fcmluZ0J1ZmZlckluZGV4ID0gKHRoaXMuX3JpbmdCdWZmZXJJbmRleCArIDEpICUgMjsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
cyB0aGUgY3VycmVudCB2aWV3cG9ydCBpbiBub3JtYWxpemVkIGNvb3JkaW5hdGVzIDAtMQorICAg
ICAqIEBwYXJhbSB2aWV3cG9ydCBEZWZpbmVzIHRoZSB2aWV3cG9ydCB0byBzZXQgKGRlZmF1bHRz
IHRvIDAgMCAxIDEpCisgICAgICovCisgICAgRWZmZWN0UmVuZGVyZXIucHJvdG90eXBlLnNldFZp
ZXdwb3J0ID0gZnVuY3Rpb24gKHZpZXdwb3J0KSB7CisgICAgICAgIGlmICh2aWV3cG9ydCA9PT0g
dm9pZCAwKSB7IHZpZXdwb3J0ID0gdGhpcy5fZnVsbHNjcmVlblZpZXdwb3J0OyB9CisgICAgICAg
IHRoaXMuZW5naW5lLnNldFZpZXdwb3J0KHZpZXdwb3J0KTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEJpbmRzIHRoZSBlbWJlZGRlZCBhdHRyaWJ1dGVzIGJ1ZmZlciB0byB0aGUgZWZmZWN0Lgor
ICAgICAqIEBwYXJhbSBlZmZlY3QgRGVmaW5lcyB0aGUgZWZmZWN0IHRvIGJpbmQgdGhlIGF0dHJp
YnV0ZXMgZm9yCisgICAgICovCisgICAgRWZmZWN0UmVuZGVyZXIucHJvdG90eXBlLmJpbmRCdWZm
ZXJzID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICB0aGlzLmVuZ2luZS5iaW5kQnVmZmVy
cyh0aGlzLl92ZXJ0ZXhCdWZmZXJzLCB0aGlzLl9pbmRleEJ1ZmZlciwgZWZmZWN0KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGN1cnJlbnQgZWZmZWN0IHdyYXBwZXIgdG8gdXNl
IGR1cmluZyBkcmF3LgorICAgICAqIFRoZSBlZmZlY3QgbmVlZHMgdG8gYmUgcmVhZHkgYmVmb3Jl
IGNhbGxpbmcgdGhpcyBhcGkuCisgICAgICogVGhpcyBhbHNvIHNldHMgdGhlIGRlZmF1bHQgZnVs
bCBzY3JlZW4gcG9zaXRpb24gYXR0cmlidXRlLgorICAgICAqIEBwYXJhbSBlZmZlY3RXcmFwcGVy
IERlZmluZXMgdGhlIGVmZmVjdCB0byBkcmF3IHdpdGgKKyAgICAgKi8KKyAgICBFZmZlY3RSZW5k
ZXJlci5wcm90b3R5cGUuYXBwbHlFZmZlY3RXcmFwcGVyID0gZnVuY3Rpb24gKGVmZmVjdFdyYXBw
ZXIpIHsKKyAgICAgICAgdGhpcy5lbmdpbmUuZW5hYmxlRWZmZWN0KGVmZmVjdFdyYXBwZXIuZWZm
ZWN0KTsKKyAgICAgICAgdGhpcy5iaW5kQnVmZmVycyhlZmZlY3RXcmFwcGVyLmVmZmVjdCk7Cisg
ICAgICAgIGVmZmVjdFdyYXBwZXIub25BcHBseU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHt9
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERyYXdzIGEgZnVsbCBzY3JlZW4gcXVhZC4KKyAg
ICAgKi8KKyAgICBFZmZlY3RSZW5kZXJlci5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGhpcy5lbmdpbmUuZHJhd0VsZW1lbnRzVHlwZShfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVHJpYW5n
bGVGaWxsTW9kZSwgMCwgNik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiByZW5kZXJzIG9uZSBv
ciBtb3JlIGVmZmVjdHMgdG8gYSBzcGVjaWZpZWQgdGV4dHVyZQorICAgICAqIEBwYXJhbSBlZmZl
Y3RXcmFwcGVycyBsaXN0IG9mIGVmZmVjdHMgdG8gcmVuZGVyZXIKKyAgICAgKiBAcGFyYW0gb3V0
cHV0VGV4dHVyZSB0ZXh0dXJlIHRvIGRyYXcgdG8sIGlmIG51bGwgaXQgd2lsbCByZW5kZXIgdG8g
dGhlIHNjcmVlbgorICAgICAqLworICAgIEVmZmVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIg
PSBmdW5jdGlvbiAoZWZmZWN0V3JhcHBlcnMsIG91dHB1dFRleHR1cmUpIHsKKyAgICAgICAgdmFy
IF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKG91dHB1dFRleHR1cmUgPT09IHZvaWQgMCkgeyBv
dXRwdXRUZXh0dXJlID0gbnVsbDsgfQorICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWZmZWN0
V3JhcHBlcnMpKSB7CisgICAgICAgICAgICBlZmZlY3RXcmFwcGVycyA9IFtlZmZlY3RXcmFwcGVy
c107CisgICAgICAgIH0KKyAgICAgICAgLy8gRW5zdXJlIGFsbCBlZmZlY3RzIGFyZSByZWFkeQor
ICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGVmZmVjdFdyYXBwZXJzXzEgPSBlZmZlY3RXcmFwcGVy
czsgX2kgPCBlZmZlY3RXcmFwcGVyc18xLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFy
IHdyYXBwZXIgPSBlZmZlY3RXcmFwcGVyc18xW19pXTsKKyAgICAgICAgICAgIGlmICghd3JhcHBl
ci5lZmZlY3QuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVmZmVjdFdyYXBwZXJzLmZvckVhY2goZnVuY3Rpb24g
KGVmZmVjdFdyYXBwZXIsIGkpIHsKKyAgICAgICAgICAgIHZhciByZW5kZXJUbyA9IG91dHB1dFRl
eHR1cmU7CisgICAgICAgICAgICAvLyBmb3IgYW55IG5leHQgZWZmZWN0IG1ha2UgaXQncyBpbnB1
dCB0aGUgb3V0cHV0IG9mIHRoZSBwcmV2aW91cyBlZmZlY3QKKyAgICAgICAgICAgIGlmIChpICE9
PSAwKSB7CisgICAgICAgICAgICAgICAgZWZmZWN0V3JhcHBlci5lZmZlY3Qub25CaW5kT2JzZXJ2
YWJsZS5hZGRPbmNlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgZWZmZWN0V3Jh
cHBlci5lZmZlY3Quc2V0VGV4dHVyZSgidGV4dHVyZVNhbXBsZXIiLCBfdGhpcy5fZ2V0TmV4dEZy
YW1lQnVmZmVyKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBTZXQgdGhlIG91dHB1dCB0byB0aGUgbmV4dCBzY3JlZW5idWZmZXIKKyAg
ICAgICAgICAgIGlmIChlZmZlY3RXcmFwcGVycy5sZW5ndGggPiAxICYmIGkgIT0gZWZmZWN0V3Jh
cHBlcnMubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgIHJlbmRlclRvID0gX3RoaXMuX2dl
dE5leHRGcmFtZUJ1ZmZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcmVuZGVyVG8gPSBvdXRwdXRUZXh0dXJlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gUmVzZXQgc3RhdGUKKyAgICAgICAgICAgIF90aGlzLnNldFZpZXdwb3J0
KCk7CisgICAgICAgICAgICBfdGhpcy5hcHBseUVmZmVjdFdyYXBwZXIoZWZmZWN0V3JhcHBlcik7
CisgICAgICAgICAgICBpZiAocmVuZGVyVG8pIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5lbmdp
bmUuYmluZEZyYW1lYnVmZmVyKHJlbmRlclRvLmdldEludGVybmFsVGV4dHVyZSgpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLmRyYXcoKTsKKyAgICAgICAgICAgIGlmIChyZW5k
ZXJUbykgeworICAgICAgICAgICAgICAgIF90aGlzLmVuZ2luZS51bkJpbmRGcmFtZWJ1ZmZlcihy
ZW5kZXJUby5nZXRJbnRlcm5hbFRleHR1cmUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIGVmZmVjdCByZW5kZXJl
cgorICAgICAqLworICAgIEVmZmVjdFJlbmRlcmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBpZiAodGhpcy5fcmluZ1NjcmVlbkJ1ZmZlcikgeworICAgICAgICAg
ICAgdGhpcy5fcmluZ1NjcmVlbkJ1ZmZlci5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7CisgICAgICAg
ICAgICAgICAgYi5kaXNwb3NlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMu
X3JpbmdTY3JlZW5CdWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciB2ZXJ0ZXhC
dWZmZXIgPSB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAgIGlm
ICh2ZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5kaXNwb3NlKCk7Cisg
ICAgICAgICAgICBkZWxldGUgdGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pbmRleEJ1ZmZlcikgeworICAgICAgICAgICAg
dGhpcy5lbmdpbmUuX3JlbGVhc2VCdWZmZXIodGhpcy5faW5kZXhCdWZmZXIpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvLyBGdWxsc2NyZWVuIHF1YWQgYnVmZmVycyBieSBkZWZhdWx0LgorICAg
IEVmZmVjdFJlbmRlcmVyLl9EZWZhdWx0T3B0aW9ucyA9IHsKKyAgICAgICAgcG9zaXRpb25zOiBb
MSwgMSwgLTEsIDEsIC0xLCAtMSwgMSwgLTFdLAorICAgICAgICBpbmRpY2VzOiBbMCwgMSwgMiwg
MCwgMiwgM10KKyAgICB9OworICAgIHJldHVybiBFZmZlY3RSZW5kZXJlcjsKK30oKSk7CisKKy8q
KgorICogV3JhcHMgYW4gZWZmZWN0IHRvIGJlIHVzZWQgZm9yIHJlbmRlcmluZworICovCit2YXIg
RWZmZWN0V3JhcHBlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGFuIGVmZmVjdCB0byBiZSByZW5kZXJlcgorICAgICAqIEBwYXJhbSBjcmVh
dGlvbk9wdGlvbnMgb3B0aW9ucyB0byBjcmVhdGUgdGhlIGVmZmVjdAorICAgICAqLworICAgIGZ1
bmN0aW9uIEVmZmVjdFdyYXBwZXIoY3JlYXRpb25PcHRpb25zKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFdmVudCB0aGF0IGlzIGZpcmVkIHJp
Z2h0IGJlZm9yZSB0aGUgZWZmZWN0IGlzIGRyYXduIChzaG91bGQgYmUgdXNlZCB0byB1cGRhdGUg
dW5pZm9ybXMpCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uQXBwbHlPYnNlcnZhYmxlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgICAgIHZhciBlZmZlY3RDcmVhdGlvbk9wdGlvbnM7CisgICAgICAgIHZh
ciB1bmlmb3JtTmFtZXMgPSBjcmVhdGlvbk9wdGlvbnMudW5pZm9ybU5hbWVzIHx8IFtdOworICAg
ICAgICBpZiAoY3JlYXRpb25PcHRpb25zLnZlcnRleFNoYWRlcikgeworICAgICAgICAgICAgZWZm
ZWN0Q3JlYXRpb25PcHRpb25zID0geworICAgICAgICAgICAgICAgIGZyYWdtZW50U291cmNlOiBj
cmVhdGlvbk9wdGlvbnMuZnJhZ21lbnRTaGFkZXIsCisgICAgICAgICAgICAgICAgdmVydGV4U291
cmNlOiBjcmVhdGlvbk9wdGlvbnMudmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgIHNwZWN0
b3JOYW1lOiBjcmVhdGlvbk9wdGlvbnMubmFtZSB8fCAiZWZmZWN0V3JhcHBlciIKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBEZWZhdWx0
IHNjYWxlIHRvIHVzZSBpbiBwb3N0IHByb2Nlc3MgdmVydGV4IHNoYWRlci4KKyAgICAgICAgICAg
IHVuaWZvcm1OYW1lcy5wdXNoKCJzY2FsZSIpOworICAgICAgICAgICAgZWZmZWN0Q3JlYXRpb25P
cHRpb25zID0geworICAgICAgICAgICAgICAgIGZyYWdtZW50U291cmNlOiBjcmVhdGlvbk9wdGlv
bnMuZnJhZ21lbnRTaGFkZXIsCisgICAgICAgICAgICAgICAgdmVydGV4OiAicG9zdHByb2Nlc3Mi
LAorICAgICAgICAgICAgICAgIHNwZWN0b3JOYW1lOiBjcmVhdGlvbk9wdGlvbnMubmFtZSB8fCAi
ZWZmZWN0V3JhcHBlciIKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAvLyBTZXRzIHRoZSBk
ZWZhdWx0IHNjYWxlIHRvIGlkZW50aXR5IGZvciB0aGUgcG9zdCBwcm9jZXNzIHZlcnRleCBzaGFk
ZXIuCisgICAgICAgICAgICB0aGlzLm9uQXBwbHlPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICAgICAgX3RoaXMuZWZmZWN0LnNldEZsb2F0Migic2NhbGUiLCAxLCAxKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHRoaXMuZWZmZWN0ID0gbmV3IF9l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRWZmZWN0Il0oZWZmZWN0Q3JlYXRp
b25PcHRpb25zLCBjcmVhdGlvbk9wdGlvbnMuYXR0cmlidXRlTmFtZXMgfHwgWyJwb3NpdGlvbiJd
LCB1bmlmb3JtTmFtZXMsIGNyZWF0aW9uT3B0aW9ucy5zYW1wbGVyTmFtZXMsIGNyZWF0aW9uT3B0
aW9ucy5lbmdpbmUpOworICAgIH0KKyAgICAvKioKKyAgICAqIERpc3Bvc2VzIG9mIHRoZSBlZmZl
Y3Qgd3JhcHBlcgorICAgICovCisgICAgRWZmZWN0V3JhcHBlci5wcm90b3R5cGUuZGlzcG9zZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5lZmZlY3QuZGlzcG9zZSgpOworICAgIH07Cisg
ICAgcmV0dXJuIEVmZmVjdFdyYXBwZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL01hdGVyaWFscy9mcmVzbmVsUGFyYW1ldGVycy50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvZnJlc25lbFBh
cmFtZXRlcnMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBGcmVzbmVsUGFyYW1ldGVycyAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVzbmVsUGFyYW1ldGVycyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gRnJlc25lbFBhcmFtZXRlcnM7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGVlcENvcGllciAqLyAiLi9NaXNjL2RlZXBDb3Bp
ZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVz
L2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIu
L0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisKKworCisKKworLyoqCisgKiBUaGlzIHJlcHJlc2Vu
dHMgYWxsIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiB0byBhZGQgYSBmcmVzbmVsIGVmZmVjdCBv
biBhIG1hdGVyaWFsOgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hv
d190b191c2VfZnJlc25lbHBhcmFtZXRlcnMKKyAqLwordmFyIEZyZXNuZWxQYXJhbWV0ZXJzID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEZyZXNuZWxQYXJhbWV0
ZXJzKCkgeworICAgICAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lIHRoZSBjb2xvciB1c2VkIG9uIGVkZ2VzIChncmF6aW5nIGFuZ2xlKQor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5sZWZ0Q29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjMiXS5XaGl0ZSgpOworICAgICAgICAv
KioKKyAgICAgICAgICogRGVmaW5lIHRoZSBjb2xvciB1c2VkIG9uIGNlbnRlcgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5yaWdodENvbG9yID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3IzIl0uQmxhY2soKTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIERlZmluZSBiaWFzIGFwcGxpZWQgdG8gY29tcHV0ZWQgZnJlc25lbCB0ZXJtCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLmJpYXMgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICog
RGVmaW5lZCB0aGUgcG93ZXIgZXhwb25lbnQgYXBwbGllZCB0byBmcmVzbmVsIHRlcm0KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMucG93ZXIgPSAxOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoRnJlc25lbFBhcmFtZXRlcnMucHJvdG90eXBlLCAiaXNFbmFibGVkIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGlmIHRoZSBmcmVzbmVsIGVmZmVjdCBpcyBlbmFi
bGUgb3Igbm90LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5faXNFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2lzRW5hYmxlZCA9PT0g
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl9pc0VuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmUiXS5NYXJrQWxsTWF0ZXJpYWxz
QXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
Q29uc3RhbnRzIl0uTUFURVJJQUxfRnJlc25lbERpcnR5RmxhZyB8IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9NaXNj
RGlydHlGbGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQ2xvbmVzIHRo
ZSBjdXJyZW50IGZyZXNuZWwgYW5kIGl0cyB2YWx1dWVzCisgICAgICogQHJldHVybnMgYSBjbG9u
ZSBmcmVzbmVsIGNvbmZpZ3VyYXRpb24KKyAgICAgKi8KKyAgICBGcmVzbmVsUGFyYW1ldGVycy5w
cm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBuZXdGcmVzbmVsUGFy
YW1ldGVycyA9IG5ldyBGcmVzbmVsUGFyYW1ldGVycygpOworICAgICAgICBfTWlzY19kZWVwQ29w
aWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRlZXBDb3BpZXIiXS5EZWVwQ29weSh0
aGlzLCBuZXdGcmVzbmVsUGFyYW1ldGVycyk7CisgICAgICAgIHJldHVybiBuZXdGcmVzbmVsUGFy
YW1ldGVyczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGN1cnJlbnQg
ZnJlc25lbCBwYXJhbWV0ZXJzIHRvIGEgSlNPTiByZXByZXNlbnRhdGlvbi4KKyAgICAgKiBAcmV0
dXJuIHRoZSBKU09OIHNlcmlhbGl6YXRpb24KKyAgICAgKi8KKyAgICBGcmVzbmVsUGFyYW1ldGVy
cy5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFs
aXphdGlvbk9iamVjdCA9IHt9OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmlzRW5hYmxl
ZCA9IHRoaXMuaXNFbmFibGVkOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmxlZnRDb2xv
ciA9IHRoaXMubGVmdENvbG9yLmFzQXJyYXkoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC5yaWdodENvbG9yID0gdGhpcy5yaWdodENvbG9yLmFzQXJyYXkoKTsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5iaWFzID0gdGhpcy5iaWFzOworICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LnBvd2VyID0gdGhpcy5wb3dlcjsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmpl
Y3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQYXJzZSBhIEpTT04gb2JqZWN0IGFuZCBkZXNl
cmlhbGl6ZSBpdCB0byBhIG5ldyBGcmVzbmVsIHBhcmFtZXRlciBvYmplY3QuCisgICAgICogQHBh
cmFtIHBhcnNlZEZyZXNuZWxQYXJhbWV0ZXJzIERlZmluZSB0aGUgSlNPTiByZXByZXNlbnRhdGlv
bgorICAgICAqIEByZXR1cm5zIHRoZSBwYXJzZWQgcGFyYW1ldGVycworICAgICAqLworICAgIEZy
ZXNuZWxQYXJhbWV0ZXJzLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZEZyZXNuZWxQYXJhbWV0ZXJz
KSB7CisgICAgICAgIHZhciBmcmVzbmVsUGFyYW1ldGVycyA9IG5ldyBGcmVzbmVsUGFyYW1ldGVy
cygpOworICAgICAgICBmcmVzbmVsUGFyYW1ldGVycy5pc0VuYWJsZWQgPSBwYXJzZWRGcmVzbmVs
UGFyYW1ldGVycy5pc0VuYWJsZWQ7CisgICAgICAgIGZyZXNuZWxQYXJhbWV0ZXJzLmxlZnRDb2xv
ciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9y
MyJdLkZyb21BcnJheShwYXJzZWRGcmVzbmVsUGFyYW1ldGVycy5sZWZ0Q29sb3IpOworICAgICAg
ICBmcmVzbmVsUGFyYW1ldGVycy5yaWdodENvbG9yID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3IzIl0uRnJvbUFycmF5KHBhcnNlZEZyZXNuZWxQ
YXJhbWV0ZXJzLnJpZ2h0Q29sb3IpOworICAgICAgICBmcmVzbmVsUGFyYW1ldGVycy5iaWFzID0g
cGFyc2VkRnJlc25lbFBhcmFtZXRlcnMuYmlhczsKKyAgICAgICAgZnJlc25lbFBhcmFtZXRlcnMu
cG93ZXIgPSBwYXJzZWRGcmVzbmVsUGFyYW1ldGVycy5wb3dlciB8fCAxLjA7CisgICAgICAgIHJl
dHVybiBmcmVzbmVsUGFyYW1ldGVyczsKKyAgICB9OworICAgIHJldHVybiBGcmVzbmVsUGFyYW1l
dGVyczsKK30oKSk7CisKKy8vIFJlZmVyZW5jZXMgdGhlIGRlcGVuZGVuY2llcy4KK19NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2VyaWFsaXphdGlvbkhlbHBl
ciJdLl9GcmVzbmVsUGFyYW1ldGVyc1BhcnNlciA9IEZyZXNuZWxQYXJhbWV0ZXJzLlBhcnNlOwor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvaW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9pbWFnZVByb2Nlc3NpbmdDb25maWd1
cmF0aW9uLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBJbWFnZVByb2Nlc3NpbmdDb25m
aWd1cmF0aW9uRGVmaW5lcywgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
RGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bkRlZmluZXM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbjsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVs
ZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJs
ZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xzLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4v
TWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlh
bHNfbWF0ZXJpYWxEZWZpbmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvbWF0ZXJpYWxEZWZpbmVzICovICIuL01hdGVy
aWFscy9tYXRlcmlhbERlZmluZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX2NvbG9yQ3VydmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvY29sb3JDdXJ2ZXMgKi8gIi4vTWF0ZXJpYWxz
L2NvbG9yQ3VydmVzLnRzIik7CisKKworCisKKworCisKKy8qKgorICogQGhpZGRlbgorICovCit2
YXIgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19leHRlbmRzIl0oSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMsIF9zdXBl
cik7CisgICAgZnVuY3Rpb24gSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMoKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CisgICAgICAg
IF90aGlzLklNQUdFUFJPQ0VTU0lORyA9IGZhbHNlOworICAgICAgICBfdGhpcy5WSUdORVRURSA9
IGZhbHNlOworICAgICAgICBfdGhpcy5WSUdORVRURUJMRU5ETU9ERU1VTFRJUExZID0gZmFsc2U7
CisgICAgICAgIF90aGlzLlZJR05FVFRFQkxFTkRNT0RFT1BBUVVFID0gZmFsc2U7CisgICAgICAg
IF90aGlzLlRPTkVNQVBQSU5HID0gZmFsc2U7CisgICAgICAgIF90aGlzLlRPTkVNQVBQSU5HX0FD
RVMgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ09OVFJBU1QgPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuQ09MT1JDVVJWRVMgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ09MT1JHUkFESU5HID0gZmFs
c2U7CisgICAgICAgIF90aGlzLkNPTE9SR1JBRElORzNEID0gZmFsc2U7CisgICAgICAgIF90aGlz
LlNBTVBMRVIzREdSRUVOREVQVEggPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuU0FNUExFUjNEQkdS
TUFQID0gZmFsc2U7CisgICAgICAgIF90aGlzLklNQUdFUFJPQ0VTU0lOR1BPU1RQUk9DRVNTID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLkVYUE9TVVJFID0gZmFsc2U7CisgICAgICAgIF90aGlzLnJl
YnVpbGQoKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICByZXR1cm4gSW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXM7Cit9KF9NYXRlcmlhbHNfbWF0ZXJpYWxEZWZp
bmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1hdGVyaWFsRGVmaW5lcyJdKSk7CisK
Ky8qKgorICogVGhpcyBncm91cHMgdG9nZXRoZXIgdGhlIGNvbW1vbiBwcm9wZXJ0aWVzIHVzZWQg
Zm9yIGltYWdlIHByb2Nlc3NpbmcgZWl0aGVyIGluIGRpcmVjdCBmb3J3YXJkIHBhc3MKKyAqIG9y
IHRocm91Z2ggcG9zdCBwcm9jZXNzaW5nIGVmZmVjdCBkZXBlbmRpbmcgb24gdGhlIHVzZSBvZiB0
aGUgaW1hZ2UgcHJvY2Vzc2luZyBwaXBlbGluZSBpbiB5b3VyIHNjZW5lCisgKiBvciBub3QuCisg
Ki8KK3ZhciBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24oKSB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBDb2xvciBjdXJ2ZXMgc2V0dXAgdXNlZCBpbiB0aGUg
ZWZmZWN0IGlmIGNvbG9yQ3VydmVzRW5hYmxlZCBpcyBzZXQgdG8gdHJ1ZQorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5jb2xvckN1cnZlcyA9IG5ldyBfTWF0ZXJpYWxzX2NvbG9yQ3VydmVzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbG9yQ3VydmVzIl0oKTsKKyAgICAgICAgdGhp
cy5fY29sb3JDdXJ2ZXNFbmFibGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NvbG9yR3JhZGlu
Z0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY29sb3JHcmFkaW5nV2l0aEdyZWVuRGVw
dGggPSB0cnVlOworICAgICAgICB0aGlzLl9jb2xvckdyYWRpbmdCR1IgPSB0cnVlOworICAgICAg
ICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9leHBvc3VyZSA9IDEuMDsKKyAgICAgICAg
dGhpcy5fdG9uZU1hcHBpbmdFbmFibGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3RvbmVNYXBw
aW5nVHlwZSA9IEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uVE9ORU1BUFBJTkdfU1RBTkRB
UkQ7CisgICAgICAgIHRoaXMuX2NvbnRyYXN0ID0gMS4wOworICAgICAgICAvKioKKyAgICAgICAg
ICogVmlnbmV0dGUgc3RyZXRjaCBzaXplLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy52aWdu
ZXR0ZVN0cmV0Y2ggPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogVmlnbmV0dGUgY2VudHJl
IFggT2Zmc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy52aWduZXR0ZUNlbnRyZVggPSAw
OworICAgICAgICAvKioKKyAgICAgICAgICogVmlnbmV0dGUgY2VudHJlIFkgT2Zmc2V0LgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy52aWduZXR0ZUNlbnRyZVkgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogVmlnbmV0dGUgd2VpZ2h0IG9yIGludGVuc2l0eSBvZiB0aGUgdmlnbmV0dGUg
ZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy52aWduZXR0ZVdlaWdodCA9IDEuNTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIENvbG9yIG9mIHRoZSB2aWduZXR0ZSBhcHBsaWVkIG9u
IHRoZSBzY3JlZW4gdGhyb3VnaCB0aGUgY2hvc2VuIGJsZW5kIG1vZGUgKHZpZ25ldHRlQmxlbmRN
b2RlKQorICAgICAgICAgKiBpZiB2aWduZXR0ZUVuYWJsZWQgaXMgc2V0IHRvIHRydWUuCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnZpZ25ldHRlQ29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29sb3I0Il0oMCwgMCwgMCwgMCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBDYW1lcmEgZmllbGQgb2YgdmlldyB1c2VkIGJ5IHRoZSBW
aWduZXR0ZSBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZpZ25ldHRlQ2FtZXJh
Rm92ID0gMC41OworICAgICAgICB0aGlzLl92aWduZXR0ZUJsZW5kTW9kZSA9IEltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24uVklHTkVUVEVNT0RFX01VTFRJUExZOworICAgICAgICB0aGlzLl92
aWduZXR0ZUVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fYXBwbHlCeVBvc3RQcm9jZXNz
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWU7CisgICAgICAgIC8qKgor
ICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGNoYW5n
ZXMgYW5kIHJlcXVpcmVzIFNoYWRlciB0byBVcGRhdGUgc29tZSBwYXJhbWV0ZXJzLgorICAgICAg
ICAqLworICAgICAgICB0aGlzLm9uVXBkYXRlUGFyYW1ldGVycyA9IG5ldyBfTWlzY19vYnNlcnZh
YmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgpOworICAgIH0K
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5w
cm90b3R5cGUsICJjb2xvckN1cnZlc0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHdldGhlciB0aGUgY29sb3IgY3VydmVzIGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fY29sb3JDdXJ2ZXNFbmFibGVkOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAg
ICogU2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGN1cnZlcyBlZmZlY3QgaXMgZW5hYmxlZC4KKyAgICAg
ICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fY29sb3JDdXJ2ZXNFbmFibGVkID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2NvbG9yQ3VydmVzRW5hYmxl
ZCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFyYW1ldGVycygpOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUsICJjb2xvckdyYWRpbmdUZXh0dXJlIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogQ29sb3IgZ3JhZGluZyBMVVQgdGV4dHVyZSB1c2VkIGluIHRoZSBlZmZl
Y3QgaWYgY29sb3JHcmFkaW5nRW5hYmxlZCBpcyBzZXQgdG8gdHJ1ZQorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29sb3JH
cmFkaW5nVGV4dHVyZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbG9y
IGdyYWRpbmcgTFVUIHRleHR1cmUgdXNlZCBpbiB0aGUgZWZmZWN0IGlmIGNvbG9yR3JhZGluZ0Vu
YWJsZWQgaXMgc2V0IHRvIHRydWUKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fY29sb3JHcmFkaW5nVGV4dHVyZSA9PT0g
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl9jb2xvckdyYWRpbmdUZXh0dXJlID0gdmFsdWU7CisgICAgICAgICAgICB0aGlz
Ll91cGRhdGVQYXJhbWV0ZXJzKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgImNvbG9y
R3JhZGluZ0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdldGhlciB0
aGUgY29sb3IgZ3JhZGluZyBlZmZlY3QgaXMgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yR3JhZGlu
Z0VuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHdldGhl
ciB0aGUgY29sb3IgZ3JhZGluZyBlZmZlY3QgaXMgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fY29sb3JH
cmFkaW5nRW5hYmxlZCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9jb2xvckdyYWRpbmdFbmFibGVkID0gdmFsdWU7
CisgICAgICAgICAgICB0aGlzLl91cGRhdGVQYXJhbWV0ZXJzKCk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
LnByb3RvdHlwZSwgImNvbG9yR3JhZGluZ1dpdGhHcmVlbkRlcHRoIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGdyYWRpbmcgZWZmZWN0IGlzIHVzaW5n
IGEgZ3JlZW4gZGVwdGggZm9yIHRoZSAzZCBUZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29sb3JHcmFkaW5n
V2l0aEdyZWVuRGVwdGg7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRz
IHdldGhlciB0aGUgY29sb3IgZ3JhZGluZyBlZmZlY3QgaXMgdXNpbmcgYSBncmVlbiBkZXB0aCBm
b3IgdGhlIDNkIFRleHR1cmUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2NvbG9yR3JhZGluZ1dpdGhHcmVlbkRlcHRo
ID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX2NvbG9yR3JhZGluZ1dpdGhHcmVlbkRlcHRoID0gdmFsdWU7CisgICAg
ICAgICAgICB0aGlzLl91cGRhdGVQYXJhbWV0ZXJzKCk7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3Rv
dHlwZSwgImNvbG9yR3JhZGluZ0JHUiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
d2V0aGVyIHRoZSBjb2xvciBncmFkaW5nIHRleHR1cmUgY29udGFpbnMgQkdSIHZhbHVlcy4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2NvbG9yR3JhZGluZ0JHUjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFNldHMgd2V0aGVyIHRoZSBjb2xvciBncmFkaW5nIHRleHR1cmUgY29udGFpbnMgQkdSIHZh
bHVlcy4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5fY29sb3JHcmFkaW5nQkdSID09PSB2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2NvbG9yR3Jh
ZGluZ0JHUiA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFyYW1ldGVycygpOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNz
aW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJleHBvc3VyZSIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIEV4cG9zdXJlIHVzZWQgaW4gdGhlIGVmZmVjdC4KKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2V4cG9zdXJlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUg
RXhwb3N1cmUgdXNlZCBpbiB0aGUgZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9leHBvc3VyZSA9PT0gdmFs
dWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0aGlzLl9leHBvc3VyZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFyYW1l
dGVycygpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ0b25lTWFwcGluZ0VuYWJsZWQi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdldGhlciB0aGUgdG9uZSBtYXBwaW5n
IGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9uZU1hcHBpbmdFbmFibGVkOworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3ZXRoZXIgdGhlIHRvbmUgbWFwcGlu
ZyBlZmZlY3QgaXMgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdG9uZU1hcHBpbmdFbmFibGVkID09PSB2
YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX3RvbmVNYXBwaW5nRW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5f
dXBkYXRlUGFyYW1ldGVycygpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ0b25lTWFw
cGluZ1R5cGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB0eXBlIG9mIHRv
bmUgbWFwcGluZyBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90b25lTWFwcGluZ1R5cGU7CisgICAgICAgIH0s
CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB0eXBlIG9mIHRvbmUgbWFwcGluZyBl
ZmZlY3QgdXNlZCBpbiBCYWJ5bG9uSlMuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RvbmVNYXBwaW5nVHlwZSA9PT0g
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl90b25lTWFwcGluZ1R5cGUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX3Vw
ZGF0ZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiY29udHJhc3Qi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjb250cmFzdCB1c2VkIGluIHRo
ZSBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9jb250cmFzdDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNldHMgdGhlIGNvbnRyYXN0IHVzZWQgaW4gdGhlIGVmZmVjdC4KKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhp
cy5fY29udHJhc3QgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY29udHJhc3QgPSB2YWx1ZTsKKyAgICAgICAgICAg
IHRoaXMuX3VwZGF0ZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAi
dmlnbmV0dGVCbGVuZE1vZGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2
aWduZXR0ZSBibGVuZCBtb2RlIGFsbG93aW5nIGRpZmZlcmVudCBraW5kIG9mIGVmZmVjdC4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3ZpZ25ldHRlQmxlbmRNb2RlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAg
ICAgICogU2V0cyB0aGUgdmlnbmV0dGUgYmxlbmQgbW9kZSBhbGxvd2luZyBkaWZmZXJlbnQga2lu
ZCBvZiBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgaWYgKHRoaXMuX3ZpZ25ldHRlQmxlbmRNb2RlID09PSB2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X3ZpZ25ldHRlQmxlbmRNb2RlID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVQYXJh
bWV0ZXJzKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJ
bWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgInZpZ25ldHRlRW5hYmxlZCIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0aGVyIHRoZSB2aWduZXR0ZSBlZmZl
Y3QgaXMgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZpZ25ldHRlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFNldHMgd2V0aGVyIHRoZSB2aWduZXR0ZSBlZmZlY3QgaXMg
ZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fdmlnbmV0dGVFbmFibGVkID09PSB2YWx1ZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3ZpZ25l
dHRlRW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFyYW1ldGVycygp
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJhcHBseUJ5UG9zdFByb2Nlc3MiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdldGhlciB0aGUgaW1hZ2UgcHJvY2Vzc2luZyBp
cyBhcHBsaWVkIHRocm91Z2ggYSBwb3N0IHByb2Nlc3Mgb3Igbm90LgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlC
eVBvc3RQcm9jZXNzOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3
ZXRoZXIgdGhlIGltYWdlIHByb2Nlc3NpbmcgaXMgYXBwbGllZCB0aHJvdWdoIGEgcG9zdCBwcm9j
ZXNzIG9yIG5vdC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fYXBwbHlCeVBvc3RQcm9jZXNzID09PSB2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X2FwcGx5QnlQb3N0UHJvY2VzcyA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFy
YW1ldGVycygpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
SW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJpc0VuYWJsZWQiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdldGhlciB0aGUgaW1hZ2UgcHJvY2Vzc2luZyBp
cyBlbmFibGVkIG9yIG5vdC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNldHMgd2V0aGVyIHRoZSBpbWFnZSBwcm9jZXNzaW5nIGlzIGVu
YWJsZWQgb3Igbm90LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc0VuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5faXNFbmFi
bGVkID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVQYXJhbWV0ZXJzKCk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIE1ldGhvZCBjYWxsZWQgZWFjaCB0aW1lIHRo
ZSBpbWFnZSBwcm9jZXNzaW5nIGluZm9ybWF0aW9uIGNoYW5nZXMgcmVxdWlyZXMgdG8gcmVjb21w
aWxlIHRoZSBlZmZlY3QuCisgICAgICovCisgICAgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bi5wcm90b3R5cGUuX3VwZGF0ZVBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMub25VcGRhdGVQYXJhbWV0ZXJzLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZS4KKyAgICAgKiBAcmV0dXJu
ICJJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIgorICAgICAqLworICAgIEltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuICJJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIjsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFByZXBhcmUgdGhlIGxpc3Qgb2YgdW5pZm9ybXMgYXNzb2NpYXRlZCB3
aXRoIHRoZSBJbWFnZSBQcm9jZXNzaW5nIGVmZmVjdHMuCisgICAgICogQHBhcmFtIHVuaWZvcm1z
IFRoZSBsaXN0IG9mIHVuaWZvcm1zIHVzZWQgaW4gdGhlIGVmZmVjdAorICAgICAqIEBwYXJhbSBk
ZWZpbmVzIHRoZSBsaXN0IG9mIGRlZmluZXMgY3VycmVudGx5IGluIHVzZQorICAgICAqLworICAg
IEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uUHJlcGFyZVVuaWZvcm1zID0gZnVuY3Rpb24g
KHVuaWZvcm1zLCBkZWZpbmVzKSB7CisgICAgICAgIGlmIChkZWZpbmVzLkVYUE9TVVJFKSB7Cisg
ICAgICAgICAgICB1bmlmb3Jtcy5wdXNoKCJleHBvc3VyZUxpbmVhciIpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChkZWZpbmVzLkNPTlRSQVNUKSB7CisgICAgICAgICAgICB1bmlmb3Jtcy5wdXNo
KCJjb250cmFzdCIpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLkNPTE9SR1JBRElO
RykgeworICAgICAgICAgICAgdW5pZm9ybXMucHVzaCgiY29sb3JUcmFuc2Zvcm1TZXR0aW5ncyIp
OworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLlZJR05FVFRFKSB7CisgICAgICAgICAg
ICB1bmlmb3Jtcy5wdXNoKCJ2SW52ZXJzZVNjcmVlblNpemUiKTsKKyAgICAgICAgICAgIHVuaWZv
cm1zLnB1c2goInZpZ25ldHRlU2V0dGluZ3MxIik7CisgICAgICAgICAgICB1bmlmb3Jtcy5wdXNo
KCJ2aWduZXR0ZVNldHRpbmdzMiIpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLkNP
TE9SQ1VSVkVTKSB7CisgICAgICAgICAgICBfTWF0ZXJpYWxzX2NvbG9yQ3VydmVzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X19bIkNvbG9yQ3VydmVzIl0uUHJlcGFyZVVuaWZvcm1zKHVuaWZv
cm1zKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUHJlcGFyZSB0aGUgbGlz
dCBvZiBzYW1wbGVycyBhc3NvY2lhdGVkIHdpdGggdGhlIEltYWdlIFByb2Nlc3NpbmcgZWZmZWN0
cy4KKyAgICAgKiBAcGFyYW0gc2FtcGxlcnNMaXN0IFRoZSBsaXN0IG9mIHVuaWZvcm1zIHVzZWQg
aW4gdGhlIGVmZmVjdAorICAgICAqIEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0IG9mIGRlZmluZXMg
Y3VycmVudGx5IGluIHVzZQorICAgICAqLworICAgIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRp
b24uUHJlcGFyZVNhbXBsZXJzID0gZnVuY3Rpb24gKHNhbXBsZXJzTGlzdCwgZGVmaW5lcykgewor
ICAgICAgICBpZiAoZGVmaW5lcy5DT0xPUkdSQURJTkcpIHsKKyAgICAgICAgICAgIHNhbXBsZXJz
TGlzdC5wdXNoKCJ0eENvbG9yVHJhbnNmb3JtIik7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIFByZXBhcmUgdGhlIGxpc3Qgb2YgZGVmaW5lcyBhc3NvY2lhdGVkIHRvIHRoZSBz
aGFkZXIuCisgICAgICogQHBhcmFtIGRlZmluZXMgdGhlIGxpc3Qgb2YgZGVmaW5lcyB0byBjb21w
bGV0ZQorICAgICAqIEBwYXJhbSBmb3JQb3N0UHJvY2VzcyBEZWZpbmUgaWYgd2UgYXJlIGN1cnJl
bnRseSBpbiBwb3N0IHByb2Nlc3MgbW9kZSBvciBub3QKKyAgICAgKi8KKyAgICBJbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZS5wcmVwYXJlRGVmaW5lcyA9IGZ1bmN0aW9uIChk
ZWZpbmVzLCBmb3JQb3N0UHJvY2VzcykgeworICAgICAgICBpZiAoZm9yUG9zdFByb2Nlc3MgPT09
IHZvaWQgMCkgeyBmb3JQb3N0UHJvY2VzcyA9IGZhbHNlOyB9CisgICAgICAgIGlmIChmb3JQb3N0
UHJvY2VzcyAhPT0gdGhpcy5hcHBseUJ5UG9zdFByb2Nlc3MgfHwgIXRoaXMuX2lzRW5hYmxlZCkg
eworICAgICAgICAgICAgZGVmaW5lcy5WSUdORVRURSA9IGZhbHNlOworICAgICAgICAgICAgZGVm
aW5lcy5UT05FTUFQUElORyA9IGZhbHNlOworICAgICAgICAgICAgZGVmaW5lcy5UT05FTUFQUElO
R19BQ0VTID0gZmFsc2U7CisgICAgICAgICAgICBkZWZpbmVzLkNPTlRSQVNUID0gZmFsc2U7Cisg
ICAgICAgICAgICBkZWZpbmVzLkVYUE9TVVJFID0gZmFsc2U7CisgICAgICAgICAgICBkZWZpbmVz
LkNPTE9SQ1VSVkVTID0gZmFsc2U7CisgICAgICAgICAgICBkZWZpbmVzLkNPTE9SR1JBRElORyA9
IGZhbHNlOworICAgICAgICAgICAgZGVmaW5lcy5DT0xPUkdSQURJTkczRCA9IGZhbHNlOworICAg
ICAgICAgICAgZGVmaW5lcy5JTUFHRVBST0NFU1NJTkcgPSBmYWxzZTsKKyAgICAgICAgICAgIGRl
ZmluZXMuSU1BR0VQUk9DRVNTSU5HUE9TVFBST0NFU1MgPSB0aGlzLmFwcGx5QnlQb3N0UHJvY2Vz
cyAmJiB0aGlzLl9pc0VuYWJsZWQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgZGVmaW5lcy5WSUdORVRURSA9IHRoaXMudmlnbmV0dGVFbmFibGVkOworICAgICAgICBk
ZWZpbmVzLlZJR05FVFRFQkxFTkRNT0RFTVVMVElQTFkgPSAodGhpcy52aWduZXR0ZUJsZW5kTW9k
ZSA9PT0gSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5fVklHTkVUVEVNT0RFX01VTFRJUExZ
KTsKKyAgICAgICAgZGVmaW5lcy5WSUdORVRURUJMRU5ETU9ERU9QQVFVRSA9ICFkZWZpbmVzLlZJ
R05FVFRFQkxFTkRNT0RFTVVMVElQTFk7CisgICAgICAgIGRlZmluZXMuVE9ORU1BUFBJTkcgPSB0
aGlzLnRvbmVNYXBwaW5nRW5hYmxlZDsKKyAgICAgICAgc3dpdGNoICh0aGlzLl90b25lTWFwcGlu
Z1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5U
T05FTUFQUElOR19BQ0VTOgorICAgICAgICAgICAgICAgIGRlZmluZXMuVE9ORU1BUFBJTkdfQUNF
UyA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIGRlZmluZXMuVE9ORU1BUFBJTkdfQUNFUyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmluZXMuQ09OVFJBU1QgPSAo
dGhpcy5jb250cmFzdCAhPT0gMS4wKTsKKyAgICAgICAgZGVmaW5lcy5FWFBPU1VSRSA9ICh0aGlz
LmV4cG9zdXJlICE9PSAxLjApOworICAgICAgICBkZWZpbmVzLkNPTE9SQ1VSVkVTID0gKHRoaXMu
Y29sb3JDdXJ2ZXNFbmFibGVkICYmICEhdGhpcy5jb2xvckN1cnZlcyk7CisgICAgICAgIGRlZmlu
ZXMuQ09MT1JHUkFESU5HID0gKHRoaXMuY29sb3JHcmFkaW5nRW5hYmxlZCAmJiAhIXRoaXMuY29s
b3JHcmFkaW5nVGV4dHVyZSk7CisgICAgICAgIGlmIChkZWZpbmVzLkNPTE9SR1JBRElORykgewor
ICAgICAgICAgICAgZGVmaW5lcy5DT0xPUkdSQURJTkczRCA9IHRoaXMuY29sb3JHcmFkaW5nVGV4
dHVyZS5pczNEOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVmaW5l
cy5DT0xPUkdSQURJTkczRCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRlZmluZXMuU0FN
UExFUjNER1JFRU5ERVBUSCA9IHRoaXMuY29sb3JHcmFkaW5nV2l0aEdyZWVuRGVwdGg7CisgICAg
ICAgIGRlZmluZXMuU0FNUExFUjNEQkdSTUFQID0gdGhpcy5jb2xvckdyYWRpbmdCR1I7CisgICAg
ICAgIGRlZmluZXMuSU1BR0VQUk9DRVNTSU5HUE9TVFBST0NFU1MgPSB0aGlzLmFwcGx5QnlQb3N0
UHJvY2VzczsKKyAgICAgICAgZGVmaW5lcy5JTUFHRVBST0NFU1NJTkcgPSBkZWZpbmVzLlZJR05F
VFRFIHx8IGRlZmluZXMuVE9ORU1BUFBJTkcgfHwgZGVmaW5lcy5DT05UUkFTVCB8fCBkZWZpbmVz
LkVYUE9TVVJFIHx8IGRlZmluZXMuQ09MT1JDVVJWRVMgfHwgZGVmaW5lcy5DT0xPUkdSQURJTkc7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgYWxsIHRoZSBpbWFnZSBw
cm9jZXNzaW5nIGluZm9ybWF0aW9uIGFyZSByZWFkeS4KKyAgICAgKiBAcmV0dXJucyBUcnVlIGlm
IHJlYWR5LCBvdGhlcndpc2UsIGZhbHNlCisgICAgICovCisgICAgSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8g
Q29sb3IgR3JhZGluZyB0ZXh1cmUgY2FuIG5vdCBiZSBub25lIGJsb2NraW5nLgorICAgICAgICBy
ZXR1cm4gIXRoaXMuY29sb3JHcmFkaW5nRW5hYmxlZCB8fCAhdGhpcy5jb2xvckdyYWRpbmdUZXh0
dXJlIHx8IHRoaXMuY29sb3JHcmFkaW5nVGV4dHVyZS5pc1JlYWR5KCk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBCaW5kcyB0aGUgaW1hZ2UgcHJvY2Vzc2luZyB0byB0aGUgc2hhZGVyLgorICAg
ICAqIEBwYXJhbSBlZmZlY3QgVGhlIGVmZmVjdCB0byBiaW5kIHRvCisgICAgICogQHBhcmFtIGFz
cGVjdFJhdGlvIERlZmluZSB0aGUgY3VycmVudCBhc3BlY3QgcmF0aW8gb2YgdGhlIGVmZmVjdAor
ICAgICAqLworICAgIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmJpbmQg
PSBmdW5jdGlvbiAoZWZmZWN0LCBhc3BlY3RSYXRpbykgeworICAgICAgICBpZiAoYXNwZWN0UmF0
aW8gPT09IHZvaWQgMCkgeyBhc3BlY3RSYXRpbyA9IDE7IH0KKyAgICAgICAgLy8gQ29sb3IgQ3Vy
dmVzCisgICAgICAgIGlmICh0aGlzLl9jb2xvckN1cnZlc0VuYWJsZWQgJiYgdGhpcy5jb2xvckN1
cnZlcykgeworICAgICAgICAgICAgX01hdGVyaWFsc19jb2xvckN1cnZlc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fWyJDb2xvckN1cnZlcyJdLkJpbmQodGhpcy5jb2xvckN1cnZlcywgZWZm
ZWN0KTsKKyAgICAgICAgfQorICAgICAgICAvLyBWaWduZXR0ZQorICAgICAgICBpZiAodGhpcy5f
dmlnbmV0dGVFbmFibGVkKSB7CisgICAgICAgICAgICB2YXIgaW52ZXJzZVdpZHRoID0gMSAvIGVm
ZmVjdC5nZXRFbmdpbmUoKS5nZXRSZW5kZXJXaWR0aCgpOworICAgICAgICAgICAgdmFyIGludmVy
c2VIZWlnaHQgPSAxIC8gZWZmZWN0LmdldEVuZ2luZSgpLmdldFJlbmRlckhlaWdodCgpOworICAg
ICAgICAgICAgZWZmZWN0LnNldEZsb2F0MigidkludmVyc2VTY3JlZW5TaXplIiwgaW52ZXJzZVdp
ZHRoLCBpbnZlcnNlSGVpZ2h0KTsKKyAgICAgICAgICAgIHZhciB2aWduZXR0ZVNjYWxlWSA9IE1h
dGgudGFuKHRoaXMudmlnbmV0dGVDYW1lcmFGb3YgKiAwLjUpOworICAgICAgICAgICAgdmFyIHZp
Z25ldHRlU2NhbGVYID0gdmlnbmV0dGVTY2FsZVkgKiBhc3BlY3RSYXRpbzsKKyAgICAgICAgICAg
IHZhciB2aWduZXR0ZVNjYWxlR2VvbWV0cmljTWVhbiA9IE1hdGguc3FydCh2aWduZXR0ZVNjYWxl
WCAqIHZpZ25ldHRlU2NhbGVZKTsKKyAgICAgICAgICAgIHZpZ25ldHRlU2NhbGVYID0gX01pc2Nf
dG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG9vbHMiXS5NaXgodmlnbmV0dGVT
Y2FsZVgsIHZpZ25ldHRlU2NhbGVHZW9tZXRyaWNNZWFuLCB0aGlzLnZpZ25ldHRlU3RyZXRjaCk7
CisgICAgICAgICAgICB2aWduZXR0ZVNjYWxlWSA9IF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlRvb2xzIl0uTWl4KHZpZ25ldHRlU2NhbGVZLCB2aWduZXR0ZVNjYWxl
R2VvbWV0cmljTWVhbiwgdGhpcy52aWduZXR0ZVN0cmV0Y2gpOworICAgICAgICAgICAgZWZmZWN0
LnNldEZsb2F0NCgidmlnbmV0dGVTZXR0aW5nczEiLCB2aWduZXR0ZVNjYWxlWCwgdmlnbmV0dGVT
Y2FsZVksIC12aWduZXR0ZVNjYWxlWCAqIHRoaXMudmlnbmV0dGVDZW50cmVYLCAtdmlnbmV0dGVT
Y2FsZVkgKiB0aGlzLnZpZ25ldHRlQ2VudHJlWSk7CisgICAgICAgICAgICB2YXIgdmlnbmV0dGVQ
b3dlciA9IC0yLjAgKiB0aGlzLnZpZ25ldHRlV2VpZ2h0OworICAgICAgICAgICAgZWZmZWN0LnNl
dEZsb2F0NCgidmlnbmV0dGVTZXR0aW5nczIiLCB0aGlzLnZpZ25ldHRlQ29sb3IuciwgdGhpcy52
aWduZXR0ZUNvbG9yLmcsIHRoaXMudmlnbmV0dGVDb2xvci5iLCB2aWduZXR0ZVBvd2VyKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBFeHBvc3VyZQorICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImV4
cG9zdXJlTGluZWFyIiwgdGhpcy5leHBvc3VyZSk7CisgICAgICAgIC8vIENvbnRyYXN0CisgICAg
ICAgIGVmZmVjdC5zZXRGbG9hdCgiY29udHJhc3QiLCB0aGlzLmNvbnRyYXN0KTsKKyAgICAgICAg
Ly8gQ29sb3IgdHJhbnNmb3JtIHNldHRpbmdzCisgICAgICAgIGlmICh0aGlzLmNvbG9yR3JhZGlu
Z1RleHR1cmUpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJ0eENvbG9yVHJhbnNm
b3JtIiwgdGhpcy5jb2xvckdyYWRpbmdUZXh0dXJlKTsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJl
U2l6ZSA9IHRoaXMuY29sb3JHcmFkaW5nVGV4dHVyZS5nZXRTaXplKCkuaGVpZ2h0OworICAgICAg
ICAgICAgZWZmZWN0LnNldEZsb2F0NCgiY29sb3JUcmFuc2Zvcm1TZXR0aW5ncyIsICh0ZXh0dXJl
U2l6ZSAtIDEpIC8gdGV4dHVyZVNpemUsIC8vIHRleHR1cmVTY2FsZQorICAgICAgICAgICAgMC41
IC8gdGV4dHVyZVNpemUsIC8vIHRleHR1cmVPZmZzZXQKKyAgICAgICAgICAgIHRleHR1cmVTaXpl
LCAvLyB0ZXh0dXJlU2l6ZQorICAgICAgICAgICAgdGhpcy5jb2xvckdyYWRpbmdUZXh0dXJlLmxl
dmVsIC8vIHdlaWdodAorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogQ2xvbmVzIHRoZSBjdXJyZW50IGltYWdlIHByb2Nlc3NpbmcgaW5zdGFuY2UuCisg
ICAgICogQHJldHVybiBUaGUgY2xvbmVkIGltYWdlIHByb2Nlc3NpbmcKKyAgICAgKi8KKyAgICBJ
bWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkNsb25lKGZ1bmN0aW9uICgpIHsgcmV0dXJu
IG5ldyBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKCk7IH0sIHRoaXMpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgY3VycmVudCBpbWFnZSBwcm9jZXNzaW5nIGlu
c3RhbmNlIHRvIGEganNvbiByZXByZXNlbnRhdGlvbi4KKyAgICAgKiBAcmV0dXJuIGEgSlNPTiBy
ZXByZXNlbnRhdGlvbgorICAgICAqLworICAgIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24u
cHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhl
bHBlciJdLlNlcmlhbGl6ZSh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlcyB0
aGUgaW1hZ2UgcHJvY2Vzc2luZyBmcm9tIGEganNvbiByZXByZXNlbnRhdGlvbi4KKyAgICAgKiBA
cGFyYW0gc291cmNlIHRoZSBKU09OIHNvdXJjZSB0byBwYXJzZQorICAgICAqIEByZXR1cm4gVGhl
IHBhcnNlZCBpbWFnZSBwcm9jZXNzaW5nCisgICAgICovCisgICAgSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbi5QYXJzZSA9IGZ1bmN0aW9uIChzb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlv
bkhlbHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uKCk7IH0sIHNvdXJjZSwgbnVsbCwgbnVsbCk7CisgICAgfTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiwgIlZJR05FVFRF
TU9ERV9NVUxUSVBMWSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzZWQgdG8gYXBwbHkg
dGhlIHZpZ25ldHRlIGFzIGEgbWl4IHdpdGggdGhlIHBpeGVsIGNvbG9yLgorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fVklH
TkVUVEVNT0RFX01VTFRJUExZOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiwgIlZJR05FVFRFTU9ERV9PUEFR
VUUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVc2VkIHRvIGFwcGx5IHRoZSB2aWduZXR0
ZSBhcyBhIHJlcGxhY2VtZW50IG9mIHRoZSBwaXhlbCBjb2xvci4KKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX1ZJR05FVFRF
TU9ERV9PUEFRVUU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIERlZmF1bHQg
dG9uZSBtYXBwaW5nIGFwcGxpZWQgaW4gQmFieWxvbkpTLgorICAgICAqLworICAgIEltYWdlUHJv
Y2Vzc2luZ0NvbmZpZ3VyYXRpb24uVE9ORU1BUFBJTkdfU1RBTkRBUkQgPSAwOworICAgIC8qKgor
ICAgICAqIEFDRVMgVG9uZSBtYXBwaW5nICh1c2VkIGJ5IGRlZmF1bHQgaW4gdW5yZWFsIGFuZCB1
bml0eSkuIFRoaXMgY2FuIGhlbHAgZ2V0dGluZyBjbG9zZXIKKyAgICAgKiB0byBvdGhlciBlbmdp
bmVzIHJlbmRlcmluZyB0byBpbmNyZWFzZSBwb3J0YWJpbGl0eS4KKyAgICAgKi8KKyAgICBJbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLlRPTkVNQVBQSU5HX0FDRVMgPSAxOworICAgIC8vIFN0
YXRpYyBjb25zdGFudHMgYXNzb2NpYXRlZCB0byB0aGUgaW1hZ2UgcHJvY2Vzc2luZy4KKyAgICBJ
bWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLl9WSUdORVRURU1PREVfTVVMVElQTFkgPSAwOwor
ICAgIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uX1ZJR05FVFRFTU9ERV9PUEFRVUUgPSAx
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZUFzQ29sb3JDdXJ2ZXMiXSkoKQorICAgIF0sIEltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiY29sb3JDdXJ2ZXMiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5
cGUsICJfY29sb3JDdXJ2ZXNFbmFibGVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1
cmUiXSkoImNvbG9yR3JhZGluZ1RleHR1cmUiKQorICAgIF0sIEltYWdlUHJvY2Vzc2luZ0NvbmZp
Z3VyYXRpb24ucHJvdG90eXBlLCAiX2NvbG9yR3JhZGluZ1RleHR1cmUiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90
b3R5cGUsICJfY29sb3JHcmFkaW5nRW5hYmxlZCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgIl9jb2xv
ckdyYWRpbmdXaXRoR3JlZW5EZXB0aCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAg
ICBdLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgIl9jb2xvckdyYWRp
bmdCR1IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNz
aW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJfZXhwb3N1cmUiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5
cGUsICJfdG9uZU1hcHBpbmdFbmFibGVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiX3RvbmVNYXBw
aW5nVHlwZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBJbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgIl9jb250cmFzdCIsIHZvaWQgMCk7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAg
ICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
c2VyaWFsaXplIl0pKCkKKyAgICBdLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3Rv
dHlwZSwgInZpZ25ldHRlU3RyZXRjaCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAg
ICBdLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgInZpZ25ldHRlQ2Vu
dHJlWCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBJbWFnZVByb2Nlc3Np
bmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgInZpZ25ldHRlQ2VudHJlWSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnBy
b3RvdHlwZSwgInZpZ25ldHRlV2VpZ2h0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0NvbG9y
NCJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ2
aWduZXR0ZUNvbG9yIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAidmlnbmV0dGVDYW1lcmFGb3YiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbi5wcm90b3R5cGUsICJfdmlnbmV0dGVCbGVuZE1vZGUiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5
cGUsICJfdmlnbmV0dGVFbmFibGVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiX2FwcGx5QnlQb3N0
UHJvY2VzcyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBJbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgIl9pc0VuYWJsZWQiLCB2b2lkIDApOworICAg
IHJldHVybiBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uOworfSgpKTsKKworLy8gUmVmZXJl
bmNlcyB0aGUgZGVwZW5kZW5jaWVzLgorX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uX0ltYWdlUHJvY2Vzc2luZ0NvbmZp
Z3VyYXRpb25QYXJzZXIgPSBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLlBhcnNlOworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvaW5kZXgudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL2luZGV4LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
Q29sb3JDdXJ2ZXMsIEVmZmVjdEZhbGxiYWNrcywgRWZmZWN0Q3JlYXRpb25PcHRpb25zLCBFZmZl
Y3QsIEZyZXNuZWxQYXJhbWV0ZXJzLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uRGVmaW5l
cywgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiwgTWF0ZXJpYWwsIE1hdGVyaWFsRGVmaW5l
cywgTWF0ZXJpYWxIZWxwZXIsIE11bHRpTWF0ZXJpYWwsIFB1c2hNYXRlcmlhbCwgU2hhZGVyTWF0
ZXJpYWwsIFN0YW5kYXJkTWF0ZXJpYWxEZWZpbmVzLCBTdGFuZGFyZE1hdGVyaWFsLCBCYXNlVGV4
dHVyZSwgQ3ViZVRleHR1cmUsIER5bmFtaWNUZXh0dXJlLCBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4
dHVyZSwgSERSQ3ViZVRleHR1cmUsIEludGVybmFsVGV4dHVyZSwgTWlycm9yVGV4dHVyZSwgTXVs
dGlSZW5kZXJUYXJnZXQsIFJhd1RleHR1cmUsIFJlbmRlclRhcmdldFRleHR1cmUsIFRleHR1cmUs
IFVuaWZvcm1CdWZmZXIsIE1hdGVyaWFsRmxhZ3MsIEVmZmVjdFJlbmRlcmVyLCBFZmZlY3RXcmFw
cGVyLCBCYWNrZ3JvdW5kTWF0ZXJpYWwsIFBCUk1hdGVyaWFsRGVmaW5lcywgUEJSQmFzZU1hdGVy
aWFsLCBQQlJCYXNlU2ltcGxlTWF0ZXJpYWwsIFBCUk1hdGVyaWFsLCBQQlJNZXRhbGxpY1JvdWdo
bmVzc01hdGVyaWFsLCBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbCwgQ29sb3JHcmFkaW5n
VGV4dHVyZSwgUmF3Q3ViZVRleHR1cmUsIFJhd1RleHR1cmUzRCwgUmVmcmFjdGlvblRleHR1cmUs
IFZpZGVvVGV4dHVyZSwgSHRtbEVsZW1lbnRUZXh0dXJlLCBOb2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHMsIE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMsIE5vZGVNYXRlcmlhbENv
bm5lY3Rpb25Qb2ludCwgTm9kZU1hdGVyaWFsQmxvY2ssIE5vZGVNYXRlcmlhbERlZmluZXMsIE5v
ZGVNYXRlcmlhbCwgTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzLCBfRERTVGV4dHVyZUxvYWRlciwg
X0VOVlRleHR1cmVMb2FkZXIsIF9LVFhUZXh0dXJlTG9hZGVyLCBfVEdBVGV4dHVyZUxvYWRlciwg
X0Jhc2lzVGV4dHVyZUxvYWRlciwgQ3VzdG9tUHJvY2VkdXJhbFRleHR1cmUsIE5vaXNlUHJvY2Vk
dXJhbFRleHR1cmUsIFByb2NlZHVyYWxUZXh0dXJlLCBQcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29t
cG9uZW50LCBNdWx0aXBseUJsb2NrLCBBZGRCbG9jaywgU2NhbGVCbG9jaywgQ2xhbXBCbG9jaywg
Q3Jvc3NCbG9jaywgRG90QmxvY2ssIFRyYW5zZm9ybUJsb2NrLCBSZW1hcEJsb2NrLCBOb3JtYWxp
emVCbG9jaywgVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zLCBUcmlnb25vbWV0cnlCbG9jaywg
Q29sb3JNZXJnZXJCbG9jaywgVmVjdG9yTWVyZ2VyQmxvY2ssIENvbG9yU3BsaXR0ZXJCbG9jaywg
VmVjdG9yU3BsaXR0ZXJCbG9jaywgTGVycEJsb2NrLCBEaXZpZGVCbG9jaywgU3VidHJhY3RCbG9j
aywgU3RlcEJsb2NrLCBPcHBvc2l0ZUJsb2NrLCBWaWV3RGlyZWN0aW9uQmxvY2ssIEZyZXNuZWxC
bG9jaywgTWF4QmxvY2ssIE1pbkJsb2NrLCBOb2RlTWF0ZXJpYWxPcHRpbWl6ZXIsIFZlcnRleE91
dHB1dEJsb2NrLCBCb25lc0Jsb2NrLCBJbnN0YW5jZXNCbG9jaywgTW9ycGhUYXJnZXRzQmxvY2ss
IExpZ2h0SW5mb3JtYXRpb25CbG9jaywgRnJhZ21lbnRPdXRwdXRCbG9jaywgQWxwaGFUZXN0Qmxv
Y2ssIEltYWdlUHJvY2Vzc2luZ0Jsb2NrLCBQZXJ0dXJiTm9ybWFsQmxvY2ssIEZvZ0Jsb2NrLCBM
aWdodEJsb2NrLCBUZXh0dXJlQmxvY2ssIFJlZmxlY3Rpb25UZXh0dXJlQmxvY2ssIElucHV0Qmxv
Y2ssIEFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfQmFja2dyb3VuZF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9CYWNrZ3JvdW5kL2luZGV4ICovICIu
L01hdGVyaWFscy9CYWNrZ3JvdW5kL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhY2tn
cm91bmRNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0JhY2tncm91bmRfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFja2dyb3VuZE1hdGVyaWFsIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbG9yQ3VydmVzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbG9yQ3VydmVzICovICIuL01h
dGVyaWFscy9jb2xvckN1cnZlcy50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvckN1cnZlcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbG9yQ3VydmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkNvbG9yQ3VydmVzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJFZmZlY3RGYWxsYmFja3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siRWZmZWN0RmFsbGJhY2tzIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkVmZmVjdENyZWF0aW9uT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFZmZlY3RDcmVhdGlvbk9wdGlvbnMiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRWZmZWN0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkVmZmVjdCJdOyB9KTsKKworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9mcmVzbmVsUGFyYW1ldGVyc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mcmVzbmVsUGFyYW1ldGVycyAq
LyAiLi9NYXRlcmlhbHMvZnJlc25lbFBhcmFtZXRlcnMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
RnJlc25lbFBhcmFtZXRlcnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mcmVzbmVsUGFyYW1ldGVy
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJGcmVzbmVsUGFyYW1ldGVycyJdOyB9KTsK
KworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gKi8gIi4vTWF0ZXJpYWxzL2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbkRlZmluZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbWFnZVByb2Nlc3Np
bmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb25EZWZpbmVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkltYWdlUHJv
Y2Vzc2luZ0NvbmZpZ3VyYXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vbWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIk1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfbWF0ZXJpYWxEZWZpbmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGVyaWFsRGVmaW5lcyAqLyAiLi9NYXRlcmlh
bHMvbWF0ZXJpYWxEZWZpbmVzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1hdGVyaWFsRGVmaW5l
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGVyaWFsRGVmaW5lc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fWyJNYXRlcmlhbERlZmluZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0ZXJpYWxIZWxwZXIgKi8gIi4vTWF0ZXJpYWxzL21h
dGVyaWFsSGVscGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1hdGVyaWFsSGVscGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzdfX1siTWF0ZXJpYWxIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bXVsdGlNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9tdWx0aU1hdGVyaWFsICovICIuL01hdGVyaWFscy9tdWx0aU1hdGVyaWFs
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk11bHRpTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9tdWx0aU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIk11bHRpTWF0
ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUEJSX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1BCUi9p
bmRleCAqLyAiLi9NYXRlcmlhbHMvUEJSL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBC
Uk1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BCUl9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJQQlJNYXRlcmlhbERlZmluZXMiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiUEJSQmFzZU1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUEJSX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlBCUkJhc2VNYXRlcmlhbCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQQlJCYXNlU2ltcGxlTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9QQlJfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUEJSQmFzZVNp
bXBsZU1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUk1hdGVyaWFsIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfUEJSX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IlBCUk1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUk1ldGFsbGljUm91Z2hu
ZXNzTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QQlJfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siUEJSTWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbCJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX1BCUl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJQQlJT
cGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9wdXNoTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL3B1c2hNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvcHVzaE1hdGVy
aWFsLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlB1c2hNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX3B1c2hNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siUHVzaE1h
dGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NoYWRlck1hdGVyaWFs
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9zaGFkZXJNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvc2hhZGVyTWF0ZXJpYWwudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiU2hhZGVyTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zaGFk
ZXJNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siU2hhZGVyTWF0ZXJpYWwi
XTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3RhbmRhcmRNYXRlcmlhbF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3Rh
bmRhcmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbC50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX3N0YW5kYXJkTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlN0YW5k
YXJkTWF0ZXJpYWxEZWZpbmVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkTWF0
ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMl9fWyJTdGFuZGFyZE1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX1RleHR1cmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9UZXh0dXJlcy9pbmRleCAqLyAiLi9NYXRl
cmlhbHMvVGV4dHVyZXMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzZVRleHR1cmUi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTNfX1siQmFzZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3ViZVRl
eHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTNfX1siQ3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
RHluYW1pY1RleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siRHluYW1pY1RleHR1cmUiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siRXF1aVJl
Y3Rhbmd1bGFyQ3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSERSQ3ViZVRl
eHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTNfX1siSERSQ3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiSW50ZXJuYWxUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkludGVybmFsVGV4dHVyZSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJNaXJyb3JUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4
dHVyZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIk1pcnJvclRleHR1cmUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTXVsdGlSZW5kZXJUYXJnZXQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1si
TXVsdGlSZW5kZXJUYXJnZXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmF3VGV4dHVyZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1RleHR1cmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xM19fWyJSYXdUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbmRlclRh
cmdldFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlRleHR1cmUiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQ29sb3JHcmFkaW5nVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Rl
eHR1cmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJDb2xvckdyYWRpbmdU
ZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJhd0N1YmVUZXh0dXJlIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEz
X19bIlJhd0N1YmVUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJhd1RleHR1cmUz
RCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1RleHR1cmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xM19fWyJSYXdUZXh0dXJlM0QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVm
cmFjdGlvblRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUmVmcmFjdGlvblRleHR1cmUiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiVmlkZW9UZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVy
ZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlZpZGVvVGV4dHVyZSJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJIdG1sRWxlbWVudFRleHR1cmUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siSHRt
bEVsZW1lbnRUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9ERFNUZXh0dXJlTG9h
ZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzEzX19bIl9ERFNUZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIl9FTlZUZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIl9FTlZUZXh0dXJlTG9hZGVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIl9LVFhUZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfVGV4dHVyZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIl9LVFhU
ZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9UR0FUZXh0dXJlTG9hZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEzX19bIl9UR0FUZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
Il9CYXNpc1RleHR1cmVMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siX0Jhc2lzVGV4dHVyZUxvYWRlciJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX1RleHR1cmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19f
WyJDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2lz
ZVByb2NlZHVyYWxUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIk5vaXNlUHJvY2VkdXJhbFRleHR1cmUiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUHJvY2VkdXJhbFRleHR1cmUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUHJv
Y2VkdXJhbFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUHJvY2VkdXJhbFRleHR1
cmVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1RleHR1cmVzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJQcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29tcG9u
ZW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3VuaWZvcm1CdWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Vu
aWZvcm1CdWZmZXIgKi8gIi4vTWF0ZXJpYWxzL3VuaWZvcm1CdWZmZXIudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVW5pZm9ybUJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3VuaWZvcm1CdWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlVuaWZvcm1CdWZmZXIiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0ZXJpYWxGbGFncyAq
LyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWxGbGFncy50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNYXRl
cmlhbEZsYWdzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTVfX1siTWF0ZXJpYWxGbGFncyJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9Ob2RlL2luZGV4ICovICIuL01hdGVyaWFscy9Ob2Rl
L2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE2X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siTm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJO
b2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJOb2RlTWF0ZXJpYWxDb25uZWN0aW9u
UG9pbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsQmxvY2siLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9f
WyJOb2RlTWF0ZXJpYWxCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJp
YWxEZWZpbmVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTZfX1siTm9kZU1hdGVyaWFsRGVmaW5lcyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJOb2RlTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJOb2RlTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siTm9kZU1hdGVyaWFs
U3lzdGVtVmFsdWVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk11bHRpcGx5QmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
Nl9fWyJNdWx0aXBseUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFkZEJsb2NrIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTZfX1siQWRkQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NhbGVCbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2
X19bIlNjYWxlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2xhbXBCbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2
X19bIkNsYW1wQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3Jvc3NCbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2
X19bIkNyb3NzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRG90QmxvY2siLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9f
WyJEb3RCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmFuc2Zvcm1CbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2
X19bIlRyYW5zZm9ybUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbWFwQmxvY2si
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xNl9fWyJSZW1hcEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vcm1hbGl6ZUJs
b2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTZfX1siTm9ybWFsaXplQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJp
Z29ub21ldHJ5QmxvY2tPcGVyYXRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRp
b25zIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRyaWdvbm9tZXRyeUJsb2NrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1si
VHJpZ29ub21ldHJ5QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3JNZXJnZXJC
bG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE2X19bIkNvbG9yTWVyZ2VyQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
VmVjdG9yTWVyZ2VyQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJWZWN0b3JNZXJnZXJCbG9jayJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJDb2xvclNwbGl0dGVyQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9O
b2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJDb2xvclNwbGl0dGVyQmxv
Y2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmVjdG9yU3BsaXR0ZXJCbG9jayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19b
IlZlY3RvclNwbGl0dGVyQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVycEJsb2Nr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTZfX1siTGVycEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRpdmlkZUJsb2Nr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTZfX1siRGl2aWRlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3VidHJhY3RC
bG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE2X19bIlN1YnRyYWN0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3Rl
cEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTZfX1siU3RlcEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9wcG9z
aXRlQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xNl9fWyJPcHBvc2l0ZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlZpZXdEaXJlY3Rpb25CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIlZpZXdEaXJlY3Rpb25CbG9jayJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJGcmVzbmVsQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2Rl
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJGcmVzbmVsQmxvY2siXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiTWF4QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2Rl
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJNYXhCbG9jayJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJNaW5CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIk1pbkJsb2NrIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbE9wdGltaXplciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIk5vZGVNYXRlcmlhbE9w
dGltaXplciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWZXJ0ZXhPdXRwdXRCbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2
X19bIlZlcnRleE91dHB1dEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvbmVzQmxv
Y2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNl9fWyJCb25lc0Jsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkluc3RhbmNl
c0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTZfX1siSW5zdGFuY2VzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
TW9ycGhUYXJnZXRzQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJNb3JwaFRhcmdldHNCbG9jayJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJMaWdodEluZm9ybWF0aW9uQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJMaWdodEluZm9ybWF0
aW9uQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJhZ21lbnRPdXRwdXRCbG9jayIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE2X19bIkZyYWdtZW50T3V0cHV0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWxw
aGFUZXN0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xNl9fWyJBbHBoYVRlc3RCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJJbWFnZVByb2Nlc3NpbmdCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkltYWdlUHJvY2Vzc2luZ0Jsb2NrIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBlcnR1cmJOb3JtYWxCbG9jayIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIlBlcnR1
cmJOb3JtYWxCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGb2dCbG9jayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19b
IkZvZ0Jsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxpZ2h0QmxvY2siLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJM
aWdodEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRleHR1cmVCbG9jayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19b
IlRleHR1cmVCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZsZWN0aW9uVGV4dHVy
ZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTZfX1siUmVmbGVjdGlvblRleHR1cmVCbG9jayJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJJbnB1dEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siSW5wdXRCbG9jayJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJBbmltYXRlZElucHV0QmxvY2tUeXBlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX05v
ZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkFuaW1hdGVkSW5wdXRCbG9j
a1R5cGVzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2VmZmVjdFJlbmRlcmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9lZmZlY3RSZW5kZXJlciAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0UmVuZGVyZXIudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRWZmZWN0UmVuZGVyZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lZmZl
Y3RSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siRWZmZWN0UmVuZGVyZXIi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRWZmZWN0V3JhcHBlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2VmZmVjdFJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJFZmZl
Y3RXcmFwcGVyIl07IH0pOworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9tYXRlcmlhbC50cyI6CisvKiEqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvbWF0ZXJp
YWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBNYXRlcmlhbCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWF0ZXJpYWw7IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3Rz
bGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xzLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNl
cnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2lu
ZXMvZW5naW5lU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX3N1
Yk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01lc2hlcy9zdWJNZXNoICovICIuL01lc2hlcy9zdWJNZXNoLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3VuaWZvcm1CdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdW5pZm9ybUJ1ZmZlciAqLyAiLi9NYXRl
cmlhbHMvdW5pZm9ybUJ1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2Vy
ICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGhzL21hdGgucGxhbmUgKi8gIi4vTWF0aHMvbWF0aC5wbGFuZS50cyIp
OworCisKKworCisKKworCisKKworCisvKioKKyAqIEJhc2UgY2xhc3MgZm9yIHRoZSBtYWluIGZl
YXR1cmVzIG9mIGEgbWF0ZXJpYWwgaW4gQmFieWxvbi5qcworICovCit2YXIgTWF0ZXJpYWwgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG1h
dGVyaWFsIGluc3RhbmNlCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0
aGUgbWF0ZXJpYWwKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgdG8gcmVm
ZXJlbmNlCisgICAgICogQHBhcmFtIGRvTm90QWRkIHNwZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwg
c2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBzY2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIE1hdGVy
aWFsKG5hbWUsIHNjZW5lLCBkb05vdEFkZCkgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBvciBzZXRzIHVzZXIgZGVmaW5lZCBtZXRhZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5tZXRhZGF0YSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGb3IgaW50ZXJuYWwg
dXNlIG9ubHkuIFBsZWFzZSBkbyBub3QgdXNlLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5y
ZXNlcnZlZERhdGFTdG9yZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZp
ZXMgaWYgdGhlIHJlYWR5IHN0YXRlIHNob3VsZCBiZSBjaGVja2VkIG9uIGVhY2ggY2FsbAorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5jaGVja1JlYWR5T25FdmVyeUNhbGwgPSBmYWxzZTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgcmVhZHkgc3RhdGUgc2hvdWxk
IGJlIGNoZWNrZWQgb25jZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5jaGVja1JlYWR5T25s
eU9uY2UgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBzdGF0ZSBvZiB0aGUg
bWF0ZXJpYWwKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc3RhdGUgPSAiIjsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgbWF0ZXJpYWwKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuX2FscGhhID0gMS4wOworICAgICAgICAvKioKKyAgICAgICAgICog
U3BlY2lmaWVzIGlmIGJhY2sgZmFjZSBjdWxsaW5nIGlzIGVuYWJsZWQKKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuX2JhY2tGYWNlQ3VsbGluZyA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBDYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUgbWF0ZXJpYWwgaXMgY29tcGlsZWQKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMub25Db21waWxlZCA9IG51bGw7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBDYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMub25FcnJvciA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBDYWxsYmFjayB0cmlnZ2VyZWQgdG8gZ2V0IHRoZSByZW5kZXIgdGFyZ2V0IHRleHR1cmVz
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmdldFJlbmRlclRhcmdldFRleHR1cmVzID0gbnVs
bDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwgc2hv
dWxkIGJlIHNlcmlhbGl6ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZG9Ob3RTZXJpYWxp
emUgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICov
CisgICAgICAgIHRoaXMuX3N0b3JlRWZmZWN0T25TdWJNZXNoZXMgPSBmYWxzZTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgYW5pbWF0aW9ucyBmb3IgdGhlIG1hdGVyaWFsCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmFuaW1hdGlvbnMgPSBudWxsOworICAgICAgICAvKioK
KyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgbWF0ZXJpYWwgaXMgZGlzcG9z
ZWQKKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlID0gbmV3IF9N
aXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJd
KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBbiBvYnNlcnZlciB3aGljaCB3YXRjaGVzIGZv
ciBkaXNwb3NlIGV2ZW50cworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fb25EaXNwb3NlT2Jz
ZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vblVuQmluZE9ic2VydmFibGUgPSBudWxsOwor
ICAgICAgICAvKioKKyAgICAgICAgICogQW4gb2JzZXJ2ZXIgd2hpY2ggd2F0Y2hlcyBmb3IgYmlu
ZCBldmVudHMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX29uQmluZE9ic2VydmVyID0gbnVs
bDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgdmFsdWUgb2YgdGhlIGFscGhh
IG1vZGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX2FscGhhTW9kZSA9IF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5BTFBIQV9D
T01CSU5FOworICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUg
bmVlZCBkZXB0aCBwcmUtcGFzcyB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fbmVl
ZERlcHRoUHJlUGFzcyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVz
IGlmIGRlcHRoIHdyaXRpbmcgc2hvdWxkIGJlIGRpc2FibGVkCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmRpc2FibGVEZXB0aFdyaXRlID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBTcGVjaWZpZXMgaWYgZGVwdGggd3JpdGluZyBzaG91bGQgYmUgZm9yY2VkCisgICAgICAgICAq
LworICAgICAgICB0aGlzLmZvcmNlRGVwdGhXcml0ZSA9IGZhbHNlOworICAgICAgICAvKioKKyAg
ICAgICAgICogU3BlY2lmaWVzIGlmIHRoZXJlIHNob3VsZCBiZSBhIHNlcGFyYXRlIHBhc3MgZm9y
IGN1bGxpbmcKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc2VwYXJhdGVDdWxsaW5nUGFzcyA9
IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHRoZSBzdGF0ZSBzcGVjaWZp
bmcgaWYgZm9nIHNob3VsZCBiZSBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9m
b2dFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgc2l6
ZSBvZiBwb2ludHMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMucG9pbnRTaXplID0gMS4wOwor
ICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHRoZSB6IG9mZnNldCB2YWx1ZQorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy56T2Zmc2V0ID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEBoaWRkZW4KKyAgICAgICAgICogU3RvcmVzIHRoZSBlZmZlY3RzIGZvciB0aGUgbWF0ZXJpYWwK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuX2VmZmVjdCA9IG51bGw7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwg
d2FzIHByZXZpb3VzbHkgcmVhZHkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX3dhc1ByZXZp
b3VzbHlSZWFkeSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIGlm
IHVuaWZvcm0gYnVmZmVycyBzaG91bGQgYmUgdXNlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5fdXNlVUJPID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTdG9yZXMgdGhlIGZp
bGwgbW9kZSBzdGF0ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fZmlsbE1vZGUgPSBNYXRl
cmlhbC5UcmlhbmdsZUZpbGxNb2RlOworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVz
IGlmIHRoZSBkZXB0aCB3cml0ZSBzdGF0ZSBzaG91bGQgYmUgY2FjaGVkCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLl9jYWNoZWREZXB0aFdyaXRlU3RhdGUgPSBmYWxzZTsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5faW5kZXhJblNjZW5lTWF0ZXJpYWxBcnJheSA9IC0x
OworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLm1lc2hNYXAgPSBudWxsOwor
ICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICB0aGlzLmlkID0gbmFtZSB8fCBfTWlz
Y190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUb29scyJdLlJhbmRvbUlkKCk7
CisgICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmUgfHwgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZFNjZW5l
OworICAgICAgICB0aGlzLnVuaXF1ZUlkID0gdGhpcy5fc2NlbmUuZ2V0VW5pcXVlSWQoKTsKKyAg
ICAgICAgaWYgKHRoaXMuX3NjZW5lLnVzZVJpZ2h0SGFuZGVkU3lzdGVtKSB7CisgICAgICAgICAg
ICB0aGlzLnNpZGVPcmllbnRhdGlvbiA9IE1hdGVyaWFsLkNsb2NrV2lzZVNpZGVPcmllbnRhdGlv
bjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuc2lkZU9yaWVu
dGF0aW9uID0gTWF0ZXJpYWwuQ291bnRlckNsb2NrV2lzZVNpZGVPcmllbnRhdGlvbjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyID0gbmV3IF91bmlmb3JtQnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlVuaWZvcm1CdWZmZXIiXSh0aGlzLl9zY2VuZS5n
ZXRFbmdpbmUoKSk7CisgICAgICAgIHRoaXMuX3VzZVVCTyA9IHRoaXMuZ2V0U2NlbmUoKS5nZXRF
bmdpbmUoKS5zdXBwb3J0c1VuaWZvcm1CdWZmZXJzOworICAgICAgICBpZiAoIWRvTm90QWRkKSB7
CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5hZGRNYXRlcmlhbCh0aGlzKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5fc2NlbmUudXNlTWF0ZXJpYWxNZXNoTWFwKSB7CisgICAgICAgICAg
ICB0aGlzLm1lc2hNYXAgPSB7fTsKKyAgICAgICAgfQorICAgIH0KKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoTWF0ZXJpYWwucHJvdG90eXBlLCAiYWxwaGEiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgbWF0ZXJpYWwKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Fs
cGhhOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgYWxwaGEg
dmFsdWUgb2YgdGhlIG1hdGVyaWFsCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2FscGhhID09PSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2Fs
cGhhID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KE1hdGVyaWFsLk1pc2NE
aXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
TWF0ZXJpYWwucHJvdG90eXBlLCAiYmFja0ZhY2VDdWxsaW5nIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgYmFjay1mYWNlIGN1bGxpbmcgc3RhdGUKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tG
YWNlQ3VsbGluZzsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhl
IGJhY2stZmFjZSBjdWxsaW5nIHN0YXRlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2JhY2tGYWNlQ3VsbGluZyA9PT0g
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl9iYWNrRmFjZUN1bGxpbmcgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMubWFy
a0FzRGlydHkoTWF0ZXJpYWwuVGV4dHVyZURpcnR5RmxhZyk7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbC5wcm90b3R5cGUsICJoYXNSZW5kZXJU
YXJnZXRUZXh0dXJlcyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFu
IGluZGljYXRpbmcgdGhhdCBjdXJyZW50IG1hdGVyaWFsIG5lZWRzIHRvIHJlZ2lzdGVyIFJUVAor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShN
YXRlcmlhbC5wcm90b3R5cGUsICJvbkRpc3Bvc2UiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBDYWxsZWQgZHVyaW5nIGEgZGlzcG9zZSBldmVudAorICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbkRpc3Bvc2VP
YnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMub25EaXNwb3NlT2JzZXJ2YWJsZS5yZW1v
dmUodGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIgPSB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUuYWRkKGNh
bGxiYWNrKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1h
dGVyaWFsLnByb3RvdHlwZSwgIm9uQmluZE9ic2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBtYXRlcmlhbCBpcyBib3VuZAorICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghdGhp
cy5fb25CaW5kT2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX29uQmluZE9ic2Vy
dmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9vbkJpbmRPYnNlcnZhYmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoTWF0ZXJpYWwucHJvdG90eXBlLCAib25CaW5kIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogQ2FsbGVkIGR1cmluZyBhIGJpbmQgZXZlbnQKKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb25CaW5k
T2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQmluZE9ic2VydmFibGUucmVtb3Zl
KHRoaXMuX29uQmluZE9ic2VydmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X29uQmluZE9ic2VydmVyID0gdGhpcy5vbkJpbmRPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbC5wcm90
b3R5cGUsICJvblVuQmluZE9ic2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIEFu
IGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBtYXRlcmlhbCBpcyB1bmJvdW5kCisgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9vblVu
QmluZE9ic2VydmFibGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9vblVuQmluZE9ic2VydmFi
bGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJP
YnNlcnZhYmxlIl0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9v
blVuQmluZE9ic2VydmFibGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShNYXRlcmlhbC5wcm90b3R5cGUsICJhbHBoYU1vZGUiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYWxwaGEgbW9kZQorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWxw
aGFNb2RlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgdmFs
dWUgb2YgdGhlIGFscGhhIG1vZGUuCisgICAgICAgICAqCisgICAgICAgICAqIHwgVmFsdWUgfCBU
eXBlIHwgRGVzY3JpcHRpb24gfAorICAgICAgICAgKiB8IC0tLSB8IC0tLSB8IC0tLSB8CisgICAg
ICAgICAqIHwgMCB8IEFMUEhBX0RJU0FCTEUgfCAgIHwKKyAgICAgICAgICogfCAxIHwgQUxQSEFf
QUREIHwgICB8CisgICAgICAgICAqIHwgMiB8IEFMUEhBX0NPTUJJTkUgfCAgIHwKKyAgICAgICAg
ICogfCAzIHwgQUxQSEFfU1VCVFJBQ1QgfCAgIHwKKyAgICAgICAgICogfCA0IHwgQUxQSEFfTVVM
VElQTFkgfCAgIHwKKyAgICAgICAgICogfCA1IHwgQUxQSEFfTUFYSU1JWkVEIHwgICB8CisgICAg
ICAgICAqIHwgNiB8IEFMUEhBX09ORU9ORSB8ICAgfAorICAgICAgICAgKiB8IDcgfCBBTFBIQV9Q
UkVNVUxUSVBMSUVEIHwgICB8CisgICAgICAgICAqIHwgOCB8IEFMUEhBX1BSRU1VTFRJUExJRURf
UE9SVEVSRFVGRiB8ICAgfAorICAgICAgICAgKiB8IDkgfCBBTFBIQV9JTlRFUlBPTEFURSB8ICAg
fAorICAgICAgICAgKiB8IDEwIHwgQUxQSEFfU0NSRUVOTU9ERSB8ICAgfAorICAgICAgICAgKgor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9hbHBoYU1vZGUgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYWxwaGFNb2RlID0gdmFsdWU7Cisg
ICAgICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KE1hdGVyaWFsLlRleHR1cmVEaXJ0eUZsYWcpOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0ZXJpYWwucHJv
dG90eXBlLCAibmVlZERlcHRoUHJlUGFzcyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIGRlcHRoIHByZS1wYXNzIHZhbHVlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9uZWVkRGVwdGhQcmVQYXNzOwor
ICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgbmVlZCBkZXB0aCBw
cmUtcGFzcyB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9uZWVkRGVwdGhQcmVQYXNzID09PSB2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X25lZWREZXB0aFByZVBhc3MgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9uZWVkRGVw
dGhQcmVQYXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5jaGVja1JlYWR5T25FdmVyeUNhbGwg
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoTWF0ZXJpYWwucHJvdG90eXBlLCAiZm9nRW5hYmxlZCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSBmb2cgZW5hYmxlZCBzdGF0ZQor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fZm9nRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFNldHMgdGhlIHN0YXRlIGZvciBlbmFibGluZyBmb2cKKyAgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fZm9nRW5hYmxlZCA9
PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9mb2dFbmFibGVkID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLm1hcmtB
c0RpcnR5KE1hdGVyaWFsLk1pc2NEaXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoTWF0ZXJpYWwucHJvdG90eXBlLCAid2lyZWZyYW1lIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIHZhbHVlIHNwZWNpZnlpbmcgaWYgd2lyZWZy
YW1lIG1vZGUgaXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX2ZpbGxNb2RlKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBNYXRlcmlhbC5XaXJlRnJhbWVGaWxsTW9kZToKKyAgICAgICAgICAgICAgICBjYXNl
IE1hdGVyaWFsLkxpbmVMaXN0RHJhd01vZGU6CisgICAgICAgICAgICAgICAgY2FzZSBNYXRlcmlh
bC5MaW5lTG9vcERyYXdNb2RlOgorICAgICAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWwuTGluZVN0
cmlwRHJhd01vZGU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lLmZvcmNlV2lyZWZyYW1lOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgc3RhdGUgb2Ygd2lyZWZy
YW1lIG1vZGUKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgICAgICB0aGlzLmZpbGxNb2RlID0gKHZhbHVlID8gTWF0ZXJpYWwuV2lyZUZyYW1lRmls
bE1vZGUgOiBNYXRlcmlhbC5UcmlhbmdsZUZpbGxNb2RlKTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdGVyaWFsLnByb3RvdHlwZSwgInBvaW50c0Nsb3Vk
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdmFsdWUgc3BlY2lmeWluZyBp
ZiBwb2ludCBjbG91ZHMgYXJlIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9maWxsTW9kZSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgTWF0ZXJpYWwuUG9pbnRGaWxsTW9kZToKKyAgICAgICAgICAgICAgICBj
YXNlIE1hdGVyaWFsLlBvaW50TGlzdERyYXdNb2RlOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZS5m
b3JjZVBvaW50c0Nsb3VkOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0
cyB0aGUgc3RhdGUgb2YgcG9pbnQgY2xvdWQgbW9kZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuZmlsbE1vZGUgPSAodmFsdWUg
PyBNYXRlcmlhbC5Qb2ludEZpbGxNb2RlIDogTWF0ZXJpYWwuVHJpYW5nbGVGaWxsTW9kZSk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbC5wcm90
b3R5cGUsICJmaWxsTW9kZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG1h
dGVyaWFsIGZpbGwgbW9kZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsbE1vZGU7CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBtYXRlcmlhbCBmaWxsIG1vZGUKKyAgICAgICAgICov
CisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5f
ZmlsbE1vZGUgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fZmlsbE1vZGUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRo
aXMubWFya0FzRGlydHkoTWF0ZXJpYWwuTWlzY0RpcnR5RmxhZyk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhl
IGN1cnJlbnQgbWF0ZXJpYWwKKyAgICAgKiBAcGFyYW0gZnVsbERldGFpbHMgZGVmaW5lcyBhIGJv
b2xlYW4gaW5kaWNhdGluZyB3aGljaCBsZXZlbHMgb2YgbG9nZ2luZyBpcyBkZXNpcmVkCisgICAg
ICogQHJldHVybnMgYSBzdHJpbmcgd2l0aCBtYXRlcmlhbCBpbmZvcm1hdGlvbgorICAgICAqLwor
ICAgIE1hdGVyaWFsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIChmdWxsRGV0YWlscykg
eworICAgICAgICB2YXIgcmV0ID0gIk5hbWU6ICIgKyB0aGlzLm5hbWU7CisgICAgICAgIGlmIChm
dWxsRGV0YWlscykgeworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBtYXRlcmlhbAorICAgICAq
IEByZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIGNsYXNzIG5hbWUgb2YgdGhlIG1hdGVyaWFsCisg
ICAgICovCisgICAgTWF0ZXJpYWwucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICJNYXRlcmlhbCI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoTWF0ZXJpYWwucHJvdG90eXBlLCAiaXNGcm96ZW4iLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdXBkYXRlcyBmb3IgdGhlIG1hdGVyaWFsIGJlZW4gbG9j
a2VkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLmNoZWNrUmVhZHlPbmx5T25jZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqCisgICAgICogTG9ja3MgdXBkYXRlcyBmb3IgdGhlIG1hdGVyaWFsCisgICAgICovCisgICAg
TWF0ZXJpYWwucHJvdG90eXBlLmZyZWV6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5j
aGVja1JlYWR5T25seU9uY2UgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogVW5sb2Nr
cyB1cGRhdGVzIGZvciB0aGUgbWF0ZXJpYWwKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5
cGUudW5mcmVlemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuY2hlY2tSZWFkeU9ubHlP
bmNlID0gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIG1h
dGVyaWFsIGlzIHJlYWR5IHRvIGJlIHVzZWQKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRo
ZSBtZXNoIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHVzZUluc3RhbmNlcyBzcGVjaWZpZXMgaWYg
aW5zdGFuY2VzIHNob3VsZCBiZSB1c2VkCisgICAgICogQHJldHVybnMgYSBib29sZWFuIGluZGlj
YXRpbmcgaWYgdGhlIG1hdGVyaWFsIGlzIHJlYWR5IHRvIGJlIHVzZWQKKyAgICAgKi8KKyAgICBN
YXRlcmlhbC5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uIChtZXNoLCB1c2VJbnN0YW5jZXMp
IHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTcGVjaWZp
ZXMgdGhhdCB0aGUgc3VibWVzaCBpcyByZWFkeSB0byBiZSB1c2VkCisgICAgICogQHBhcmFtIG1l
c2ggZGVmaW5lcyB0aGUgbWVzaCB0byBjaGVjaworICAgICAqIEBwYXJhbSBzdWJNZXNoIGRlZmlu
ZXMgd2hpY2ggc3VibWVzaCB0byBjaGVjaworICAgICAqIEBwYXJhbSB1c2VJbnN0YW5jZXMgc3Bl
Y2lmaWVzIHRoYXQgaW5zdGFuY2VzIHNob3VsZCBiZSB1c2VkCisgICAgICogQHJldHVybnMgYSBi
b29sZWFuIGluZGljYXRpbmcgdGhhdCB0aGUgc3VibWVzaCBpcyByZWFkeSBvciBub3QKKyAgICAg
Ki8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUuaXNSZWFkeUZvclN1Yk1lc2ggPSBmdW5jdGlvbiAo
bWVzaCwgc3ViTWVzaCwgdXNlSW5zdGFuY2VzKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG1hdGVyaWFsIGVmZmVjdAorICAgICAq
IEByZXR1cm5zIHRoZSBlZmZlY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXRlcmlhbAorICAgICAq
LworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5nZXRFZmZlY3QgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9lZmZlY3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IHRoZSBjdXJyZW50IHNjZW5lCisgICAgICogQHJldHVybnMgYSBTY2VuZQorICAgICAqLworICAg
IE1hdGVyaWFsLnByb3RvdHlwZS5nZXRTY2VuZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3NjZW5lOworICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIGlmIHRo
ZSBtYXRlcmlhbCB3aWxsIHJlcXVpcmUgYWxwaGEgYmxlbmRpbmcKKyAgICAgKiBAcmV0dXJucyBh
IGJvb2xlYW4gc3BlY2lmeWluZyBpZiBhbHBoYSBibGVuZGluZyBpcyBuZWVkZWQKKyAgICAgKi8K
KyAgICBNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhhQmxlbmRpbmcgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiAodGhpcy5hbHBoYSA8IDEuMCk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTcGVjaWZpZXMgaWYgdGhlIG1lc2ggd2lsbCByZXF1aXJlIGFscGhhIGJsZW5kaW5nCisg
ICAgICogQHBhcmFtIG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0byBjaGVjaworICAgICAqIEByZXR1
cm5zIGEgYm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGFscGhhIGJsZW5kaW5nIGlzIG5lZWRlZCBmb3Ig
dGhlIG1lc2gKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhhQmxlbmRp
bmdGb3JNZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubmVlZEFs
cGhhQmxlbmRpbmcoKSB8fCAobWVzaC52aXNpYmlsaXR5IDwgMS4wKSB8fCBtZXNoLmhhc1ZlcnRl
eEFscGhhOworICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIGlmIHRoaXMgbWF0ZXJp
YWwgc2hvdWxkIGJlIHJlbmRlcmVkIGluIGFscGhhIHRlc3QgbW9kZQorICAgICAqIEByZXR1cm5z
IGEgYm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGFuIGFscGhhIHRlc3QgaXMgbmVlZGVkLgorICAgICAq
LworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5uZWVkQWxwaGFUZXN0aW5nID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRo
ZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBhbHBoYSB0ZXN0CisgICAgICogQHJldHVybnMgdGhlIHRl
eHR1cmUgdG8gdXNlIGZvciBhbHBoYSB0ZXN0aW5nCisgICAgICovCisgICAgTWF0ZXJpYWwucHJv
dG90eXBlLmdldEFscGhhVGVzdFRleHR1cmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogTWFya3MgdGhlIG1hdGVyaWFsIHRvIGlu
ZGljYXRlIHRoYXQgaXQgbmVlZHMgdG8gYmUgcmUtY2FsY3VsYXRlZAorICAgICAqLworICAgIE1h
dGVyaWFsLnByb3RvdHlwZS5tYXJrRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMu
X3dhc1ByZXZpb3VzbHlSZWFkeSA9IGZhbHNlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBNYXRlcmlhbC5wcm90b3R5cGUuX3ByZUJpbmQgPSBmdW5jdGlvbiAoZWZmZWN0LCBvdmVy
cmlkZU9yaWVudGF0aW9uKSB7CisgICAgICAgIGlmIChvdmVycmlkZU9yaWVudGF0aW9uID09PSB2
b2lkIDApIHsgb3ZlcnJpZGVPcmllbnRhdGlvbiA9IG51bGw7IH0KKyAgICAgICAgdmFyIGVuZ2lu
ZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICB2YXIgb3JpZW50YXRpb24gPSAo
b3ZlcnJpZGVPcmllbnRhdGlvbiA9PSBudWxsKSA/IHRoaXMuc2lkZU9yaWVudGF0aW9uIDogb3Zl
cnJpZGVPcmllbnRhdGlvbjsKKyAgICAgICAgdmFyIHJldmVyc2UgPSBvcmllbnRhdGlvbiA9PT0g
TWF0ZXJpYWwuQ2xvY2tXaXNlU2lkZU9yaWVudGF0aW9uOworICAgICAgICBlbmdpbmUuZW5hYmxl
RWZmZWN0KGVmZmVjdCA/IGVmZmVjdCA6IHRoaXMuX2VmZmVjdCk7CisgICAgICAgIGVuZ2luZS5z
ZXRTdGF0ZSh0aGlzLmJhY2tGYWNlQ3VsbGluZywgdGhpcy56T2Zmc2V0LCBmYWxzZSwgcmV2ZXJz
ZSk7CisgICAgICAgIHJldHVybiByZXZlcnNlOworICAgIH07CisgICAgLyoqCisgICAgICogQmlu
ZHMgdGhlIG1hdGVyaWFsIHRvIHRoZSBtZXNoCisgICAgICogQHBhcmFtIHdvcmxkIGRlZmluZXMg
dGhlIHdvcmxkIHRyYW5zZm9ybWF0aW9uIG1hdHJpeAorICAgICAqIEBwYXJhbSBtZXNoIGRlZmlu
ZXMgdGhlIG1lc2ggdG8gYmluZCB0aGUgbWF0ZXJpYWwgdG8KKyAgICAgKi8KKyAgICBNYXRlcmlh
bC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICh3b3JsZCwgbWVzaCkgeworICAgIH07CisgICAg
LyoqCisgICAgICogQmluZHMgdGhlIHN1Ym1lc2ggdG8gdGhlIG1hdGVyaWFsCisgICAgICogQHBh
cmFtIHdvcmxkIGRlZmluZXMgdGhlIHdvcmxkIHRyYW5zZm9ybWF0aW9uIG1hdHJpeAorICAgICAq
IEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIG1lc2ggY29udGFpbmluZyB0aGUgc3VibWVzaAorICAg
ICAqIEBwYXJhbSBzdWJNZXNoIGRlZmluZXMgdGhlIHN1Ym1lc2ggdG8gYmluZCB0aGUgbWF0ZXJp
YWwgdG8KKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUuYmluZEZvclN1Yk1lc2ggPSBm
dW5jdGlvbiAod29ybGQsIG1lc2gsIHN1Yk1lc2gpIHsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEJpbmRzIHRoZSB3b3JsZCBtYXRyaXggdG8gdGhlIG1hdGVyaWFsCisgICAgICogQHBhcmFtIHdv
cmxkIGRlZmluZXMgdGhlIHdvcmxkIHRyYW5zZm9ybWF0aW9uIG1hdHJpeAorICAgICAqLworICAg
IE1hdGVyaWFsLnByb3RvdHlwZS5iaW5kT25seVdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKHdvcmxk
KSB7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgc2NlbmUncyB1bmlmb3JtIGJ1
ZmZlciB0byB0aGUgZWZmZWN0LgorICAgICAqIEBwYXJhbSBlZmZlY3QgZGVmaW5lcyB0aGUgZWZm
ZWN0IHRvIGJpbmQgdG8gdGhlIHNjZW5lIHVuaWZvcm0gYnVmZmVyCisgICAgICogQHBhcmFtIHNj
ZW5lVWJvIGRlZmluZXMgdGhlIHVuaWZvcm0gYnVmZmVyIHN0b3Jpbmcgc2NlbmUgZGF0YQorICAg
ICAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5iaW5kU2NlbmVVbmlmb3JtQnVmZmVyID0gZnVu
Y3Rpb24gKGVmZmVjdCwgc2NlbmVVYm8pIHsKKyAgICAgICAgc2NlbmVVYm8uYmluZFRvRWZmZWN0
KGVmZmVjdCwgIlNjZW5lIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgdmll
dyBtYXRyaXggdG8gdGhlIGVmZmVjdAorICAgICAqIEBwYXJhbSBlZmZlY3QgZGVmaW5lcyB0aGUg
ZWZmZWN0IHRvIGJpbmQgdGhlIHZpZXcgbWF0cml4IHRvCisgICAgICovCisgICAgTWF0ZXJpYWwu
cHJvdG90eXBlLmJpbmRWaWV3ID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICBpZiAoIXRo
aXMuX3VzZVVCTykgeworICAgICAgICAgICAgZWZmZWN0LnNldE1hdHJpeCgidmlldyIsIHRoaXMu
Z2V0U2NlbmUoKS5nZXRWaWV3TWF0cml4KCkpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgdGhpcy5iaW5kU2NlbmVVbmlmb3JtQnVmZmVyKGVmZmVjdCwgdGhpcy5nZXRT
Y2VuZSgpLmdldFNjZW5lVW5pZm9ybUJ1ZmZlcigpKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqCisgICAgICogQmluZHMgdGhlIHZpZXcgcHJvamVjdGlvbiBtYXRyaXggdG8gdGhlIGVmZmVj
dAorICAgICAqIEBwYXJhbSBlZmZlY3QgZGVmaW5lcyB0aGUgZWZmZWN0IHRvIGJpbmQgdGhlIHZp
ZXcgcHJvamVjdGlvbiBtYXRyaXggdG8KKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUu
YmluZFZpZXdQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICBpZiAoIXRo
aXMuX3VzZVVCTykgeworICAgICAgICAgICAgZWZmZWN0LnNldE1hdHJpeCgidmlld1Byb2plY3Rp
b24iLCB0aGlzLmdldFNjZW5lKCkuZ2V0VHJhbnNmb3JtTWF0cml4KCkpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5iaW5kU2NlbmVVbmlmb3JtQnVmZmVyKGVm
ZmVjdCwgdGhpcy5nZXRTY2VuZSgpLmdldFNjZW5lVW5pZm9ybUJ1ZmZlcigpKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIGlmIG1hdGVyaWFsIGFscGhhIHRl
c3Rpbmcgc2hvdWxkIGJlIHR1cm5lZCBvbiBmb3IgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gbWVz
aCBkZWZpbmVzIHRoZSBtZXNoIHRvIGNoZWNrCisgICAgICovCisgICAgTWF0ZXJpYWwucHJvdG90
eXBlLl9zaG91bGRUdXJuQWxwaGFUZXN0T24gPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICBy
ZXR1cm4gKCF0aGlzLm5lZWRBbHBoYUJsZW5kaW5nRm9yTWVzaChtZXNoKSAmJiB0aGlzLm5lZWRB
bHBoYVRlc3RpbmcoKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcm9jZXNzZXMgdG8gZXhl
Y3V0ZSBhZnRlciBiaW5kaW5nIHRoZSBtYXRlcmlhbCB0byBhIG1lc2gKKyAgICAgKiBAcGFyYW0g
bWVzaCBkZWZpbmVzIHRoZSByZW5kZXJlZCBtZXNoCisgICAgICovCisgICAgTWF0ZXJpYWwucHJv
dG90eXBlLl9hZnRlckJpbmQgPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICB0aGlzLl9zY2Vu
ZS5fY2FjaGVkTWF0ZXJpYWwgPSB0aGlzOworICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAg
ICAgdGhpcy5fc2NlbmUuX2NhY2hlZFZpc2liaWxpdHkgPSBtZXNoLnZpc2liaWxpdHk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5fY2FjaGVkVmlz
aWJpbGl0eSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29uQmluZE9ic2VydmFi
bGUgJiYgbWVzaCkgeworICAgICAgICAgICAgdGhpcy5fb25CaW5kT2JzZXJ2YWJsZS5ub3RpZnlP
YnNlcnZlcnMobWVzaCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuZGlzYWJsZURlcHRo
V3JpdGUpIHsKKyAgICAgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUo
KTsKKyAgICAgICAgICAgIHRoaXMuX2NhY2hlZERlcHRoV3JpdGVTdGF0ZSA9IGVuZ2luZS5nZXRE
ZXB0aFdyaXRlKCk7CisgICAgICAgICAgICBlbmdpbmUuc2V0RGVwdGhXcml0ZShmYWxzZSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFVuYmluZHMgdGhlIG1hdGVyaWFsIGZy
b20gdGhlIG1lc2gKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUudW5iaW5kID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fb25VbkJpbmRPYnNlcnZhYmxlKSB7CisgICAg
ICAgICAgICB0aGlzLl9vblVuQmluZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmRpc2FibGVEZXB0aFdyaXRlKSB7CisgICAgICAg
ICAgICB2YXIgZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgICAgICBl
bmdpbmUuc2V0RGVwdGhXcml0ZSh0aGlzLl9jYWNoZWREZXB0aFdyaXRlU3RhdGUpOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBhY3RpdmUgdGV4dHVyZXMgZnJv
bSB0aGUgbWF0ZXJpYWwKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB0ZXh0dXJlcworICAg
ICAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5nZXRBY3RpdmVUZXh0dXJlcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuIFtdOworICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lm
aWVzIGlmIHRoZSBtYXRlcmlhbCB1c2VzIGEgdGV4dHVyZQorICAgICAqIEBwYXJhbSB0ZXh0dXJl
IGRlZmluZXMgdGhlIHRleHR1cmUgdG8gY2hlY2sgYWdhaW5zdCB0aGUgbWF0ZXJpYWwKKyAgICAg
KiBAcmV0dXJucyBhIGJvb2xlYW4gc3BlY2lmeWluZyBpZiB0aGUgbWF0ZXJpYWwgdXNlcyB0aGUg
dGV4dHVyZQorICAgICAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5oYXNUZXh0dXJlID0gZnVu
Y3Rpb24gKHRleHR1cmUpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoq
CisgICAgICogTWFrZXMgYSBkdXBsaWNhdGUgb2YgdGhlIG1hdGVyaWFsLCBhbmQgZ2l2ZXMgaXQg
YSBuZXcgbmFtZQorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5ldyBuYW1lIGZvciB0
aGUgZHVwbGljYXRlZCBtYXRlcmlhbAorICAgICAqIEByZXR1cm5zIHRoZSBjbG9uZWQgbWF0ZXJp
YWwKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAobmFt
ZSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMg
dGhlIG1lc2hlcyBib3VuZCB0byB0aGUgbWF0ZXJpYWwKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJh
eSBvZiBtZXNoZXMgYm91bmQgdG8gdGhlIG1hdGVyaWFsCisgICAgICovCisgICAgTWF0ZXJpYWwu
cHJvdG90eXBlLmdldEJpbmRlZE1lc2hlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMubWVzaE1hcCkgeworICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IG5ldyBBcnJheSgpOworICAgICAgICAgICAgZm9yICh2YXIgbWVzaElkIGluIHRo
aXMubWVzaE1hcCkgeworICAgICAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5tZXNoTWFwW21l
c2hJZF07CisgICAgICAgICAgICAgICAgaWYgKG1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnB1c2gobWVzaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHZhciBtZXNoZXMgPSB0aGlzLl9zY2VuZS5tZXNoZXM7CisgICAgICAgICAgICByZXR1
cm4gbWVzaGVzLmZpbHRlcihmdW5jdGlvbiAobWVzaCkgeyByZXR1cm4gbWVzaC5tYXRlcmlhbCA9
PT0gX3RoaXM7IH0pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSBz
aGFkZXIgY29tcGlsYXRpb24KKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIGFz
c29jaWF0ZWQgd2l0aCB0aGlzIG1hdGVyaWFsCisgICAgICogQHBhcmFtIG9uQ29tcGlsZWQgZGVm
aW5lcyBhIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgbWF0ZXJpYWwgaXMgY29tcGlsZWQK
KyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0
aGUgY29tcGlsYXRpb24KKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUuZm9yY2VDb21w
aWxhdGlvbiA9IGZ1bmN0aW9uIChtZXNoLCBvbkNvbXBpbGVkLCBvcHRpb25zKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBsb2NhbE9wdGlvbnMgPSB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fzc2lnbiJdKHsgY2xpcFBsYW5lOiBmYWxzZSB9
LCBvcHRpb25zKTsKKyAgICAgICAgdmFyIHN1Yk1lc2ggPSBuZXcgX01lc2hlc19zdWJNZXNoX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkJhc2VTdWJNZXNoIl0oKTsKKyAgICAgICAgdmFy
IHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICB2YXIgY2hlY2tSZWFkeSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghX3RoaXMuX3NjZW5lIHx8ICFfdGhpcy5fc2NlbmUu
Z2V0RW5naW5lKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoc3ViTWVzaC5fbWF0ZXJpYWxEZWZpbmVzKSB7CisgICAgICAgICAgICAg
ICAgc3ViTWVzaC5fbWF0ZXJpYWxEZWZpbmVzLl9yZW5kZXJJZCA9IC0xOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFyIGNsaXBQbGFuZVN0YXRlID0gc2NlbmUuY2xpcFBsYW5lOworICAg
ICAgICAgICAgaWYgKGxvY2FsT3B0aW9ucy5jbGlwUGxhbmUpIHsKKyAgICAgICAgICAgICAgICBz
Y2VuZS5jbGlwUGxhbmUgPSBuZXcgX01hdGhzX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siUGxhbmUiXSgwLCAwLCAwLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChfdGhpcy5fc3RvcmVFZmZlY3RPblN1Yk1lc2hlcykgeworICAgICAgICAgICAgICAg
IGlmIChfdGhpcy5pc1JlYWR5Rm9yU3ViTWVzaChtZXNoLCBzdWJNZXNoKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAob25Db21waWxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgb25D
b21waWxlZChfdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQo
Y2hlY2tSZWFkeSwgMTYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5pc1JlYWR5KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG9uQ29tcGlsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9uQ29tcGlsZWQoX3RoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzZXRU
aW1lb3V0KGNoZWNrUmVhZHksIDE2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAobG9jYWxPcHRpb25zLmNsaXBQbGFuZSkgeworICAgICAgICAgICAg
ICAgIHNjZW5lLmNsaXBQbGFuZSA9IGNsaXBQbGFuZVN0YXRlOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworICAgICAgICBjaGVja1JlYWR5KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBG
b3JjZSBzaGFkZXIgY29tcGlsYXRpb24KKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBt
ZXNoIHRoYXQgd2lsbCB1c2UgdGhpcyBtYXRlcmlhbAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRl
ZmluZXMgYWRkaXRpb25hbCBvcHRpb25zIGZvciBjb21waWxpbmcgdGhlIHNoYWRlcnMKKyAgICAg
KiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21waWxhdGlvbiBj
b21wbGV0ZXMKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUuZm9yY2VDb21waWxhdGlv
bkFzeW5jID0gZnVuY3Rpb24gKG1lc2gsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7Cisg
ICAgICAgICAgICBfdGhpcy5mb3JjZUNvbXBpbGF0aW9uKG1lc2gsIGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICB9LCBvcHRpb25zKTsKKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNYXJrcyBhIGRlZmluZSBpbiB0aGUgbWF0
ZXJpYWwgdG8gaW5kaWNhdGUgdGhhdCBpdCBuZWVkcyB0byBiZSByZS1jb21wdXRlZAorICAgICAq
IEBwYXJhbSBmbGFnIGRlZmluZXMgYSBmbGFnIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhcnRz
IG9mIHRoZSBtYXRlcmlhbCBoYXZlIHRvIGJlIG1hcmtlZCBhcyBkaXJ0eQorICAgICAqLworICAg
IE1hdGVyaWFsLnByb3RvdHlwZS5tYXJrQXNEaXJ0eSA9IGZ1bmN0aW9uIChmbGFnKSB7CisgICAg
ICAgIGlmICh0aGlzLmdldFNjZW5lKCkuYmxvY2tNYXRlcmlhbERpcnR5TWVjaGFuaXNtKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgTWF0ZXJpYWwuX0RpcnR5Q2Fs
bGJhY2tBcnJheS5sZW5ndGggPSAwOworICAgICAgICBpZiAoZmxhZyAmIE1hdGVyaWFsLlRleHR1
cmVEaXJ0eUZsYWcpIHsKKyAgICAgICAgICAgIE1hdGVyaWFsLl9EaXJ0eUNhbGxiYWNrQXJyYXku
cHVzaChNYXRlcmlhbC5fVGV4dHVyZURpcnR5Q2FsbEJhY2spOworICAgICAgICB9CisgICAgICAg
IGlmIChmbGFnICYgTWF0ZXJpYWwuTGlnaHREaXJ0eUZsYWcpIHsKKyAgICAgICAgICAgIE1hdGVy
aWFsLl9EaXJ0eUNhbGxiYWNrQXJyYXkucHVzaChNYXRlcmlhbC5fTGlnaHRzRGlydHlDYWxsQmFj
ayk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZsYWcgJiBNYXRlcmlhbC5GcmVzbmVsRGlydHlG
bGFnKSB7CisgICAgICAgICAgICBNYXRlcmlhbC5fRGlydHlDYWxsYmFja0FycmF5LnB1c2goTWF0
ZXJpYWwuX0ZyZXNuZWxEaXJ0eUNhbGxCYWNrKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmxh
ZyAmIE1hdGVyaWFsLkF0dHJpYnV0ZXNEaXJ0eUZsYWcpIHsKKyAgICAgICAgICAgIE1hdGVyaWFs
Ll9EaXJ0eUNhbGxiYWNrQXJyYXkucHVzaChNYXRlcmlhbC5fQXR0cmlidXRlRGlydHlDYWxsQmFj
ayk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZsYWcgJiBNYXRlcmlhbC5NaXNjRGlydHlGbGFn
KSB7CisgICAgICAgICAgICBNYXRlcmlhbC5fRGlydHlDYWxsYmFja0FycmF5LnB1c2goTWF0ZXJp
YWwuX01pc2NEaXJ0eUNhbGxCYWNrKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoTWF0ZXJpYWwu
X0RpcnR5Q2FsbGJhY2tBcnJheS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuX21hcmtBbGxT
dWJNZXNoZXNBc0RpcnR5KE1hdGVyaWFsLl9SdW5EaXJ0eUNhbGxCYWNrcyk7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5nZXRTY2VuZSgpLnJlc2V0Q2FjaGVkTWF0ZXJpYWwoKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIE1hcmtzIGFsbCBzdWJtZXNoZXMgb2YgYSBtYXRlcmlhbCB0byBpbmRp
Y2F0ZSB0aGF0IHRoZWlyIG1hdGVyaWFsIGRlZmluZXMgbmVlZCB0byBiZSByZS1jYWxjdWxhdGVk
CisgICAgICogQHBhcmFtIGZ1bmMgZGVmaW5lcyBhIGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBtYXRl
cmlhbCBkZWZpbmVzIGFnYWluc3QgdGhlIHN1Ym1lc2hlcworICAgICAqLworICAgIE1hdGVyaWFs
LnByb3RvdHlwZS5fbWFya0FsbFN1Yk1lc2hlc0FzRGlydHkgPSBmdW5jdGlvbiAoZnVuYykgewor
ICAgICAgICBpZiAodGhpcy5nZXRTY2VuZSgpLmJsb2NrTWF0ZXJpYWxEaXJ0eU1lY2hhbmlzbSkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBtZXNoZXMgPSB0
aGlzLmdldFNjZW5lKCkubWVzaGVzOworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIG1lc2hlc18x
ID0gbWVzaGVzOyBfaSA8IG1lc2hlc18xLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFy
IG1lc2ggPSBtZXNoZXNfMVtfaV07CisgICAgICAgICAgICBpZiAoIW1lc2guc3ViTWVzaGVzKSB7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHZhciBfYSA9IDAsIF9iID0gbWVzaC5zdWJNZXNoZXM7IF9hIDwgX2IubGVuZ3RoOyBfYSsr
KSB7CisgICAgICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBfYltfYV07CisgICAgICAgICAgICAg
ICAgaWYgKHN1Yk1lc2guZ2V0TWF0ZXJpYWwoKSAhPT0gdGhpcykgeworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFz
dWJNZXNoLl9tYXRlcmlhbERlZmluZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZ1bmMoc3ViTWVzaC5fbWF0ZXJp
YWxEZWZpbmVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
KiBJbmRpY2F0ZXMgdGhhdCB3ZSBuZWVkIHRvIHJlLWNhbGN1bGF0ZWQgZm9yIGFsbCBzdWJtZXNo
ZXMKKyAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5fbWFya0FsbFN1Yk1lc2hlc0FzQWxsRGly
dHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0RpcnR5
KE1hdGVyaWFsLl9BbGxEaXJ0eUNhbGxCYWNrKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIElu
ZGljYXRlcyB0aGF0IGltYWdlIHByb2Nlc3NpbmcgbmVlZHMgdG8gYmUgcmUtY2FsY3VsYXRlZCBm
b3IgYWxsIHN1Ym1lc2hlcworICAgICAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5fbWFya0Fs
bFN1Yk1lc2hlc0FzSW1hZ2VQcm9jZXNzaW5nRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0RpcnR5KE1hdGVyaWFsLl9JbWFnZVByb2Nlc3NpbmdE
aXJ0eUNhbGxCYWNrKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEluZGljYXRlcyB0aGF0IHRl
eHR1cmVzIG5lZWQgdG8gYmUgcmUtY2FsY3VsYXRlZCBmb3IgYWxsIHN1Ym1lc2hlcworICAgICAq
LworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5fbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0
eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzRGlydHko
TWF0ZXJpYWwuX1RleHR1cmVEaXJ0eUNhbGxCYWNrKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEluZGljYXRlcyB0aGF0IGZyZXNuZWwgbmVlZHMgdG8gYmUgcmUtY2FsY3VsYXRlZCBmb3IgYWxs
IHN1Ym1lc2hlcworICAgICAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5fbWFya0FsbFN1Yk1l
c2hlc0FzRnJlc25lbERpcnR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9tYXJrQWxs
U3ViTWVzaGVzQXNEaXJ0eShNYXRlcmlhbC5fRnJlc25lbERpcnR5Q2FsbEJhY2spOworICAgIH07
CisgICAgLyoqCisgICAgICogSW5kaWNhdGVzIHRoYXQgZnJlc25lbCBhbmQgbWlzYyBuZWVkIHRv
IGJlIHJlLWNhbGN1bGF0ZWQgZm9yIGFsbCBzdWJtZXNoZXMKKyAgICAgKi8KKyAgICBNYXRlcmlh
bC5wcm90b3R5cGUuX21hcmtBbGxTdWJNZXNoZXNBc0ZyZXNuZWxBbmRNaXNjRGlydHkgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0RpcnR5KE1hdGVyaWFs
Ll9GcmVzbmVsQW5kTWlzY0RpcnR5Q2FsbEJhY2spOworICAgIH07CisgICAgLyoqCisgICAgICog
SW5kaWNhdGVzIHRoYXQgbGlnaHRzIG5lZWQgdG8gYmUgcmUtY2FsY3VsYXRlZCBmb3IgYWxsIHN1
Ym1lc2hlcworICAgICAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5fbWFya0FsbFN1Yk1lc2hl
c0FzTGlnaHRzRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX21hcmtBbGxTdWJN
ZXNoZXNBc0RpcnR5KE1hdGVyaWFsLl9MaWdodHNEaXJ0eUNhbGxCYWNrKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEluZGljYXRlcyB0aGF0IGF0dHJpYnV0ZXMgbmVlZCB0byBiZSByZS1jYWxj
dWxhdGVkIGZvciBhbGwgc3VibWVzaGVzCisgICAgICovCisgICAgTWF0ZXJpYWwucHJvdG90eXBl
Ll9tYXJrQWxsU3ViTWVzaGVzQXNBdHRyaWJ1dGVzRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0RpcnR5KE1hdGVyaWFsLl9BdHRyaWJ1dGVEaXJ0
eUNhbGxCYWNrKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEluZGljYXRlcyB0aGF0IG1pc2Mg
bmVlZHMgdG8gYmUgcmUtY2FsY3VsYXRlZCBmb3IgYWxsIHN1Ym1lc2hlcworICAgICAqLworICAg
IE1hdGVyaWFsLnByb3RvdHlwZS5fbWFya0FsbFN1Yk1lc2hlc0FzTWlzY0RpcnR5ID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB0aGlzLl9tYXJrQWxsU3ViTWVzaGVzQXNEaXJ0eShNYXRlcmlhbC5f
TWlzY0RpcnR5Q2FsbEJhY2spOworICAgIH07CisgICAgLyoqCisgICAgICogSW5kaWNhdGVzIHRo
YXQgdGV4dHVyZXMgYW5kIG1pc2MgbmVlZCB0byBiZSByZS1jYWxjdWxhdGVkIGZvciBhbGwgc3Vi
bWVzaGVzCisgICAgICovCisgICAgTWF0ZXJpYWwucHJvdG90eXBlLl9tYXJrQWxsU3ViTWVzaGVz
QXNUZXh0dXJlc0FuZE1pc2NEaXJ0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fbWFy
a0FsbFN1Yk1lc2hlc0FzRGlydHkoTWF0ZXJpYWwuX1RleHR1cmVBbmRNaXNjRGlydHlDYWxsQmFj
ayk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgbWF0ZXJpYWwKKyAgICAg
KiBAcGFyYW0gZm9yY2VEaXNwb3NlRWZmZWN0IHNwZWNpZmllcyBpZiBlZmZlY3RzIHNob3VsZCBi
ZSBmb3JjZWZ1bGx5IGRpc3Bvc2VkCisgICAgICogQHBhcmFtIGZvcmNlRGlzcG9zZVRleHR1cmVz
IHNwZWNpZmllcyBpZiB0ZXh0dXJlcyBzaG91bGQgYmUgZm9yY2VmdWxseSBkaXNwb3NlZAorICAg
ICAqIEBwYXJhbSBub3RCb3VuZFRvTWVzaCBzcGVjaWZpZXMgaWYgdGhlIG1hdGVyaWFsIHRoYXQg
aXMgYmVpbmcgZGlzcG9zZWQgaXMga25vd24gdG8gYmUgbm90IGJvdW5kIHRvIGFueSBtZXNoCisg
ICAgICovCisgICAgTWF0ZXJpYWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZm9yY2VE
aXNwb3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcywgbm90Qm91bmRUb01lc2gpIHsKKyAg
ICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICAvLyBBbmltYXRpb25z
CisgICAgICAgIHNjZW5lLnN0b3BBbmltYXRpb24odGhpcyk7CisgICAgICAgIHNjZW5lLmZyZWVQ
cm9jZXNzZWRNYXRlcmlhbHMoKTsKKyAgICAgICAgLy8gUmVtb3ZlIGZyb20gc2NlbmUKKyAgICAg
ICAgc2NlbmUucmVtb3ZlTWF0ZXJpYWwodGhpcyk7CisgICAgICAgIGlmIChub3RCb3VuZFRvTWVz
aCAhPT0gdHJ1ZSkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gbWVzaGVzCisgICAgICAg
ICAgICBpZiAodGhpcy5tZXNoTWFwKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgbWVzaElk
IGluIHRoaXMubWVzaE1hcCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IHRoaXMu
bWVzaE1hcFttZXNoSWRdOworICAgICAgICAgICAgICAgICAgICBpZiAobWVzaCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbCA9IG51bGw7IC8vIHdpbGwgc2V0IHRoZSBl
bnRyeSBpbiB0aGUgbWFwIHRvIHVuZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5yZWxlYXNlVmVydGV4QXJyYXlPYmplY3QobWVzaCwgZm9yY2VEaXNwb3NlRWZmZWN0KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBtZXNoZXMgPSBzY2VuZS5tZXNo
ZXM7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBtZXNoZXNfMiA9IG1lc2hlczsg
X2kgPCBtZXNoZXNfMi5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1l
c2ggPSBtZXNoZXNfMltfaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFs
ID09PSB0aGlzICYmICFtZXNoLnNvdXJjZU1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1lc2gubWF0ZXJpYWwgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxl
YXNlVmVydGV4QXJyYXlPYmplY3QobWVzaCwgZm9yY2VEaXNwb3NlRWZmZWN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmRpc3Bvc2UoKTsKKyAgICAgICAgLy8gU2hh
ZGVyIGFyZSBrZXB0IGluIGNhY2hlIGZvciBmdXJ0aGVyIHVzZSBidXQgd2UgY2FuIGdldCByaWQg
b2YgdGhpcyBieSB1c2luZyBmb3JjZURpc3Bvc2VFZmZlY3QKKyAgICAgICAgaWYgKGZvcmNlRGlz
cG9zZUVmZmVjdCAmJiB0aGlzLl9lZmZlY3QpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fc3Rv
cmVFZmZlY3RPblN1Yk1lc2hlcykgeworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5kaXNw
b3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9lZmZlY3QgPSBudWxsOwor
ICAgICAgICB9CisgICAgICAgIC8vIENhbGxiYWNrCisgICAgICAgIHRoaXMub25EaXNwb3NlT2Jz
ZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIHRoaXMub25EaXNwb3NlT2Jz
ZXJ2YWJsZS5jbGVhcigpOworICAgICAgICBpZiAodGhpcy5fb25CaW5kT2JzZXJ2YWJsZSkgewor
ICAgICAgICAgICAgdGhpcy5fb25CaW5kT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9vblVuQmluZE9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIHRoaXMu
X29uVW5CaW5kT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5yZWxlYXNlVmVydGV4QXJyYXlPYmpl
Y3QgPSBmdW5jdGlvbiAobWVzaCwgZm9yY2VEaXNwb3NlRWZmZWN0KSB7CisgICAgICAgIGlmICht
ZXNoLmdlb21ldHJ5KSB7CisgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSAobWVzaC5nZW9tZXRy
eSk7CisgICAgICAgICAgICBpZiAodGhpcy5fc3RvcmVFZmZlY3RPblN1Yk1lc2hlcykgeworICAg
ICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBtZXNoLnN1Yk1lc2hlczsgX2kgPCBf
YS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBfYVtf
aV07CisgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5Ll9yZWxlYXNlVmVydGV4QXJyYXlPYmpl
Y3Qoc3ViTWVzaC5fbWF0ZXJpYWxFZmZlY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoZm9y
Y2VEaXNwb3NlRWZmZWN0ICYmIHN1Yk1lc2guX21hdGVyaWFsRWZmZWN0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdWJNZXNoLl9tYXRlcmlhbEVmZmVjdC5kaXNwb3NlKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBnZW9tZXRyeS5fcmVsZWFzZVZlcnRleEFycmF5
T2JqZWN0KHRoaXMuX2VmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhpcyBtYXRlcmlhbAorICAgICAqIEByZXR1cm5z
IHRoZSBzZXJpYWxpemVkIG1hdGVyaWFsIG9iamVjdAorICAgICAqLworICAgIE1hdGVyaWFsLnBy
b3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxw
ZXIiXS5TZXJpYWxpemUodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEg
bWF0ZXJpYWwgZnJvbSBwYXJzZWQgbWF0ZXJpYWwgZGF0YQorICAgICAqIEBwYXJhbSBwYXJzZWRN
YXRlcmlhbCBkZWZpbmVzIHBhcnNlZCBtYXRlcmlhbCBkYXRhCisgICAgICogQHBhcmFtIHNjZW5l
IGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVz
IHRoZSByb290IFVSTCB0byB1c2UgdG8gbG9hZCB0ZXh0dXJlcworICAgICAqIEByZXR1cm5zIGEg
bmV3IG1hdGVyaWFsCisgICAgICovCisgICAgTWF0ZXJpYWwuUGFyc2UgPSBmdW5jdGlvbiAocGFy
c2VkTWF0ZXJpYWwsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIGlmICghcGFyc2VkTWF0ZXJp
YWwuY3VzdG9tVHlwZSkgeworICAgICAgICAgICAgcGFyc2VkTWF0ZXJpYWwuY3VzdG9tVHlwZSA9
ICJCQUJZTE9OLlN0YW5kYXJkTWF0ZXJpYWwiOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KHBhcnNlZE1hdGVyaWFsLmN1c3RvbVR5cGUgPT09ICJCQUJZTE9OLlBCUk1hdGVyaWFsIiAmJiBw
YXJzZWRNYXRlcmlhbC5vdmVybG9hZGVkQWxiZWRvKSB7CisgICAgICAgICAgICBwYXJzZWRNYXRl
cmlhbC5jdXN0b21UeXBlID0gIkJBQllMT04uTGVnYWN5UEJSTWF0ZXJpYWwiOworICAgICAgICAg
ICAgaWYgKCFCQUJZTE9OLkxlZ2FjeVBCUk1hdGVyaWFsKSB7CisgICAgICAgICAgICAgICAgX01p
c2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkxvZ2dlciJdLkVycm9yKCJZ
b3VyIHNjZW5lIGlzIHRyeWluZyB0byBsb2FkIGEgbGVnYWN5IHZlcnNpb24gb2YgdGhlIFBCUk1h
dGVyaWFsLCBwbGVhc2UsIGluY2x1ZGUgaXQgZnJvbSB0aGUgbWF0ZXJpYWxzIGxpYnJhcnkuIik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgdmFyIG1hdGVyaWFsVHlwZSA9IF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlRvb2xzIl0uSW5zdGFudGlhdGUocGFyc2VkTWF0ZXJpYWwuY3VzdG9tVHlw
ZSk7CisgICAgICAgIHJldHVybiBtYXRlcmlhbFR5cGUuUGFyc2UocGFyc2VkTWF0ZXJpYWwsIHNj
ZW5lLCByb290VXJsKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHRyaWFu
Z2xlIGZpbGwgbW9kZQorICAgICAqLworICAgIE1hdGVyaWFsLlRyaWFuZ2xlRmlsbE1vZGUgPSBf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRz
Il0uTUFURVJJQUxfVHJpYW5nbGVGaWxsTW9kZTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSB3aXJlZnJhbWUgbW9kZQorICAgICAqLworICAgIE1hdGVyaWFsLldpcmVGcmFtZUZpbGxNb2Rl
ID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0
YW50cyJdLk1BVEVSSUFMX1dpcmVGcmFtZUZpbGxNb2RlOworICAgIC8qKgorICAgICAqIFJldHVy
bnMgdGhlIHBvaW50IGZpbGwgbW9kZQorICAgICAqLworICAgIE1hdGVyaWFsLlBvaW50RmlsbE1v
ZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29u
c3RhbnRzIl0uTUFURVJJQUxfUG9pbnRGaWxsTW9kZTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IHRoZSBwb2ludCBsaXN0IGRyYXcgbW9kZQorICAgICAqLworICAgIE1hdGVyaWFsLlBvaW50TGlz
dERyYXdNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83
X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1BvaW50TGlzdERyYXdNb2RlOworICAgIC8qKgorICAg
ICAqIFJldHVybnMgdGhlIGxpbmUgbGlzdCBkcmF3IG1vZGUKKyAgICAgKi8KKyAgICBNYXRlcmlh
bC5MaW5lTGlzdERyYXdNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX0xpbmVMaXN0RHJhd01vZGU7CisgICAg
LyoqCisgICAgICogUmV0dXJucyB0aGUgbGluZSBsb29wIGRyYXcgbW9kZQorICAgICAqLworICAg
IE1hdGVyaWFsLkxpbmVMb29wRHJhd01vZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfTGluZUxvb3BEcmF3TW9k
ZTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsaW5lIHN0cmlwIGRyYXcgbW9kZQorICAg
ICAqLworICAgIE1hdGVyaWFsLkxpbmVTdHJpcERyYXdNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX0xpbmVT
dHJpcERyYXdNb2RlOworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHRyaWFuZ2xlIHN0cmlw
IGRyYXcgbW9kZQorICAgICAqLworICAgIE1hdGVyaWFsLlRyaWFuZ2xlU3RyaXBEcmF3TW9kZSA9
IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFu
dHMiXS5NQVRFUklBTF9UcmlhbmdsZVN0cmlwRHJhd01vZGU7CisgICAgLyoqCisgICAgICogUmV0
dXJucyB0aGUgdHJpYW5nbGUgZmFuIGRyYXcgbW9kZQorICAgICAqLworICAgIE1hdGVyaWFsLlRy
aWFuZ2xlRmFuRHJhd01vZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVHJpYW5nbGVGYW5EcmF3TW9kZTsKKyAg
ICAvKioKKyAgICAgKiBTdG9yZXMgdGhlIGNsb2NrLXdpc2Ugc2lkZSBvcmllbnRhdGlvbgorICAg
ICAqLworICAgIE1hdGVyaWFsLkNsb2NrV2lzZVNpZGVPcmllbnRhdGlvbiA9IF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5NQVRFUklB
TF9DbG9ja1dpc2VTaWRlT3JpZW50YXRpb247CisgICAgLyoqCisgICAgICogU3RvcmVzIHRoZSBj
b3VudGVyIGNsb2NrLXdpc2Ugc2lkZSBvcmllbnRhdGlvbgorICAgICAqLworICAgIE1hdGVyaWFs
LkNvdW50ZXJDbG9ja1dpc2VTaWRlT3JpZW50YXRpb24gPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfQ291bnRlckNs
b2NrV2lzZVNpZGVPcmllbnRhdGlvbjsKKyAgICAvKioKKyAgICAgKiBUaGUgZGlydHkgdGV4dHVy
ZSBmbGFnIHZhbHVlCisgICAgICovCisgICAgTWF0ZXJpYWwuVGV4dHVyZURpcnR5RmxhZyA9IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMi
XS5NQVRFUklBTF9UZXh0dXJlRGlydHlGbGFnOworICAgIC8qKgorICAgICAqIFRoZSBkaXJ0eSBs
aWdodCBmbGFnIHZhbHVlCisgICAgICovCisgICAgTWF0ZXJpYWwuTGlnaHREaXJ0eUZsYWcgPSBf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRz
Il0uTUFURVJJQUxfTGlnaHREaXJ0eUZsYWc7CisgICAgLyoqCisgICAgICogVGhlIGRpcnR5IGZy
ZXNuZWwgZmxhZyB2YWx1ZQorICAgICAqLworICAgIE1hdGVyaWFsLkZyZXNuZWxEaXJ0eUZsYWcg
PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3Rh
bnRzIl0uTUFURVJJQUxfRnJlc25lbERpcnR5RmxhZzsKKyAgICAvKioKKyAgICAgKiBUaGUgZGly
dHkgYXR0cmlidXRlIGZsYWcgdmFsdWUKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5BdHRyaWJ1dGVz
RGlydHlGbGFnID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83
X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX0F0dHJpYnV0ZXNEaXJ0eUZsYWc7CisgICAgLyoqCisg
ICAgICogVGhlIGRpcnR5IG1pc2MgZmxhZyB2YWx1ZQorICAgICAqLworICAgIE1hdGVyaWFsLk1p
c2NEaXJ0eUZsYWcgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzdfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfTWlzY0RpcnR5RmxhZzsKKyAgICAvKioKKyAgICAg
KiBUaGUgYWxsIGRpcnR5IGZsYWcgdmFsdWUKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5BbGxEaXJ0
eUZsYWcgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
Q29uc3RhbnRzIl0uTUFURVJJQUxfQWxsRGlydHlGbGFnOworICAgIE1hdGVyaWFsLl9BbGxEaXJ0
eUNhbGxCYWNrID0gZnVuY3Rpb24gKGRlZmluZXMpIHsgcmV0dXJuIGRlZmluZXMubWFya0FsbEFz
RGlydHkoKTsgfTsKKyAgICBNYXRlcmlhbC5fSW1hZ2VQcm9jZXNzaW5nRGlydHlDYWxsQmFjayA9
IGZ1bmN0aW9uIChkZWZpbmVzKSB7IHJldHVybiBkZWZpbmVzLm1hcmtBc0ltYWdlUHJvY2Vzc2lu
Z0RpcnR5KCk7IH07CisgICAgTWF0ZXJpYWwuX1RleHR1cmVEaXJ0eUNhbGxCYWNrID0gZnVuY3Rp
b24gKGRlZmluZXMpIHsgcmV0dXJuIGRlZmluZXMubWFya0FzVGV4dHVyZXNEaXJ0eSgpOyB9Owor
ICAgIE1hdGVyaWFsLl9GcmVzbmVsRGlydHlDYWxsQmFjayA9IGZ1bmN0aW9uIChkZWZpbmVzKSB7
IHJldHVybiBkZWZpbmVzLm1hcmtBc0ZyZXNuZWxEaXJ0eSgpOyB9OworICAgIE1hdGVyaWFsLl9N
aXNjRGlydHlDYWxsQmFjayA9IGZ1bmN0aW9uIChkZWZpbmVzKSB7IHJldHVybiBkZWZpbmVzLm1h
cmtBc01pc2NEaXJ0eSgpOyB9OworICAgIE1hdGVyaWFsLl9MaWdodHNEaXJ0eUNhbGxCYWNrID0g
ZnVuY3Rpb24gKGRlZmluZXMpIHsgcmV0dXJuIGRlZmluZXMubWFya0FzTGlnaHREaXJ0eSgpOyB9
OworICAgIE1hdGVyaWFsLl9BdHRyaWJ1dGVEaXJ0eUNhbGxCYWNrID0gZnVuY3Rpb24gKGRlZmlu
ZXMpIHsgcmV0dXJuIGRlZmluZXMubWFya0FzQXR0cmlidXRlc0RpcnR5KCk7IH07CisgICAgTWF0
ZXJpYWwuX0ZyZXNuZWxBbmRNaXNjRGlydHlDYWxsQmFjayA9IGZ1bmN0aW9uIChkZWZpbmVzKSB7
CisgICAgICAgIE1hdGVyaWFsLl9GcmVzbmVsRGlydHlDYWxsQmFjayhkZWZpbmVzKTsKKyAgICAg
ICAgTWF0ZXJpYWwuX01pc2NEaXJ0eUNhbGxCYWNrKGRlZmluZXMpOworICAgIH07CisgICAgTWF0
ZXJpYWwuX1RleHR1cmVBbmRNaXNjRGlydHlDYWxsQmFjayA9IGZ1bmN0aW9uIChkZWZpbmVzKSB7
CisgICAgICAgIE1hdGVyaWFsLl9UZXh0dXJlRGlydHlDYWxsQmFjayhkZWZpbmVzKTsKKyAgICAg
ICAgTWF0ZXJpYWwuX01pc2NEaXJ0eUNhbGxCYWNrKGRlZmluZXMpOworICAgIH07CisgICAgTWF0
ZXJpYWwuX0RpcnR5Q2FsbGJhY2tBcnJheSA9IFtdOworICAgIE1hdGVyaWFsLl9SdW5EaXJ0eUNh
bGxCYWNrcyA9IGZ1bmN0aW9uIChkZWZpbmVzKSB7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwg
X2EgPSBNYXRlcmlhbC5fRGlydHlDYWxsYmFja0FycmF5OyBfaSA8IF9hLmxlbmd0aDsgX2krKykg
eworICAgICAgICAgICAgdmFyIGNiID0gX2FbX2ldOworICAgICAgICAgICAgY2IoZGVmaW5lcyk7
CisgICAgICAgIH0KKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0ZXJpYWwu
cHJvdG90eXBlLCAiaWQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0
ZXJpYWwucHJvdG90eXBlLCAidW5pcXVlSWQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgp
CisgICAgXSwgTWF0ZXJpYWwucHJvdG90eXBlLCAibmFtZSIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBNYXRlcmlhbC5wcm90b3R5cGUsICJjaGVja1JlYWR5T25FdmVyeUNh
bGwiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0ZXJpYWwucHJvdG90
eXBlLCAiY2hlY2tSZWFkeU9ubHlPbmNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIE1hdGVyaWFsLnByb3RvdHlwZSwgInN0YXRlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoImFscGhhIikKKyAgICBdLCBNYXRlcmlhbC5wcm90b3R5cGUsICJfYWxwaGEiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgiYmFja0ZhY2VDdWxsaW5nIikKKyAgICBdLCBNYXRlcmlh
bC5wcm90b3R5cGUsICJfYmFja0ZhY2VDdWxsaW5nIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIE1hdGVyaWFsLnByb3RvdHlwZSwgInNpZGVPcmllbnRhdGlvbiIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCJhbHBoYU1vZGUiKQorICAgIF0sIE1hdGVyaWFsLnByb3Rv
dHlwZSwgIl9hbHBoYU1vZGUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
TWF0ZXJpYWwucHJvdG90eXBlLCAiX25lZWREZXB0aFByZVBhc3MiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0ZXJpYWwucHJvdG90eXBlLCAiZGlzYWJsZURlcHRoV3Jp
dGUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0ZXJpYWwucHJvdG90
eXBlLCAiZm9yY2VEZXB0aFdyaXRlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIE1hdGVyaWFsLnByb3RvdHlwZSwgInNlcGFyYXRlQ3VsbGluZ1Bhc3MiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgiZm9nRW5hYmxlZCIpCisgICAgXSwgTWF0ZXJpYWwucHJvdG90eXBl
LCAiX2ZvZ0VuYWJsZWQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0
ZXJpYWwucHJvdG90eXBlLCAicG9pbnRTaXplIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIE1hdGVyaWFsLnByb3RvdHlwZSwgInpPZmZzZXQiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0ZXJpYWwucHJvdG90eXBlLCAid2lyZWZyYW1lIiwgbnVs
bCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBNYXRlcmlhbC5wcm90b3R5cGUsICJwb2lu
dHNDbG91ZCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0ZXJpYWwucHJv
dG90eXBlLCAiZmlsbE1vZGUiLCBudWxsKTsKKyAgICByZXR1cm4gTWF0ZXJpYWw7Cit9KCkpOwor
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9tYXRlcmlhbERlZmluZXMudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L01hdGVyaWFscy9tYXRlcmlhbERlZmluZXMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTWF0ZXJpYWxEZWZp
bmVzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1hdGVyaWFsRGVmaW5l
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWF0ZXJpYWxEZWZpbmVzOyB9KTsKKy8qKgorICogTWFu
YWdlcyB0aGUgZGVmaW5lcyBmb3IgdGhlIE1hdGVyaWFsCisgKi8KK3ZhciBNYXRlcmlhbERlZmlu
ZXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gTWF0ZXJpYWxE
ZWZpbmVzKCkgeworICAgICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICAgICAgdGhpcy5fYXJlTGlnaHRzRGlydHkgPSB0cnVlOworICAgICAgICAv
KiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9hcmVMaWdodHNEaXNwb3NlZCA9IGZhbHNlOwor
ICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9hcmVBdHRyaWJ1dGVzRGlydHkg
PSB0cnVlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9hcmVUZXh0dXJl
c0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fYXJl
RnJlc25lbERpcnR5ID0gdHJ1ZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhp
cy5fYXJlTWlzY0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAg
dGhpcy5fYXJlSW1hZ2VQcm9jZXNzaW5nRGlydHkgPSB0cnVlOworICAgICAgICAvKiogQGhpZGRl
biAqLworICAgICAgICB0aGlzLl9ub3JtYWxzID0gZmFsc2U7CisgICAgICAgIC8qKiBAaGlkZGVu
ICovCisgICAgICAgIHRoaXMuX3V2cyA9IGZhbHNlOworICAgICAgICAvKiogQGhpZGRlbiAqLwor
ICAgICAgICB0aGlzLl9uZWVkTm9ybWFscyA9IGZhbHNlOworICAgICAgICAvKiogQGhpZGRlbiAq
LworICAgICAgICB0aGlzLl9uZWVkVVZzID0gZmFsc2U7CisgICAgfQorICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShNYXRlcmlhbERlZmluZXMucHJvdG90eXBlLCAiaXNEaXJ0eSIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwgbmVlZHMgdG8gYmUg
cmUtY2FsY3VsYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEaXJ0eTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqCisgICAgICogTWFya3MgdGhlIG1hdGVyaWFsIHRvIGluZGljYXRlIHRoYXQgaXQgaGFzIGJl
ZW4gcmUtY2FsY3VsYXRlZAorICAgICAqLworICAgIE1hdGVyaWFsRGVmaW5lcy5wcm90b3R5cGUu
bWFya0FzUHJvY2Vzc2VkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9pc0RpcnR5ID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX2FyZUF0dHJpYnV0ZXNEaXJ0eSA9IGZhbHNlOworICAgICAg
ICB0aGlzLl9hcmVUZXh0dXJlc0RpcnR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2FyZUZyZXNu
ZWxEaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9hcmVMaWdodHNEaXJ0eSA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl9hcmVMaWdodHNEaXNwb3NlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9h
cmVNaXNjRGlydHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fYXJlSW1hZ2VQcm9jZXNzaW5nRGly
dHkgPSBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1hcmtzIHRoZSBtYXRlcmlhbCB0
byBpbmRpY2F0ZSB0aGF0IGl0IG5lZWRzIHRvIGJlIHJlLWNhbGN1bGF0ZWQKKyAgICAgKi8KKyAg
ICBNYXRlcmlhbERlZmluZXMucHJvdG90eXBlLm1hcmtBc1VucHJvY2Vzc2VkID0gZnVuY3Rpb24g
KCkgeworICAgICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIE1hcmtzIHRoZSBtYXRlcmlhbCB0byBpbmRpY2F0ZSBhbGwgb2YgaXRzIGRlZmluZXMgbmVl
ZCB0byBiZSByZS1jYWxjdWxhdGVkCisgICAgICovCisgICAgTWF0ZXJpYWxEZWZpbmVzLnByb3Rv
dHlwZS5tYXJrQWxsQXNEaXJ0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fYXJlVGV4
dHVyZXNEaXJ0eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2FyZUF0dHJpYnV0ZXNEaXJ0eSA9IHRy
dWU7CisgICAgICAgIHRoaXMuX2FyZUxpZ2h0c0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5f
YXJlRnJlc25lbERpcnR5ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fYXJlTWlzY0RpcnR5ID0gdHJ1
ZTsKKyAgICAgICAgdGhpcy5fYXJlSW1hZ2VQcm9jZXNzaW5nRGlydHkgPSB0cnVlOworICAgICAg
ICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1hcmtzIHRo
ZSBtYXRlcmlhbCB0byBpbmRpY2F0ZSB0aGF0IGltYWdlIHByb2Nlc3NpbmcgbmVlZHMgdG8gYmUg
cmUtY2FsY3VsYXRlZAorICAgICAqLworICAgIE1hdGVyaWFsRGVmaW5lcy5wcm90b3R5cGUubWFy
a0FzSW1hZ2VQcm9jZXNzaW5nRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2Fy
ZUltYWdlUHJvY2Vzc2luZ0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5faXNEaXJ0eSA9IHRy
dWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNYXJrcyB0aGUgbWF0ZXJpYWwgdG8gaW5kaWNh
dGUgdGhlIGxpZ2h0cyBuZWVkIHRvIGJlIHJlLWNhbGN1bGF0ZWQKKyAgICAgKiBAcGFyYW0gZGlz
cG9zZWQgRGVmaW5lcyB3aGV0aGVyIHRoZSBsaWdodCBpcyBkaXJ0eSBkdWUgdG8gZGlzcG9zZSBv
ciBub3QKKyAgICAgKi8KKyAgICBNYXRlcmlhbERlZmluZXMucHJvdG90eXBlLm1hcmtBc0xpZ2h0
RGlydHkgPSBmdW5jdGlvbiAoZGlzcG9zZWQpIHsKKyAgICAgICAgaWYgKGRpc3Bvc2VkID09PSB2
b2lkIDApIHsgZGlzcG9zZWQgPSBmYWxzZTsgfQorICAgICAgICB0aGlzLl9hcmVMaWdodHNEaXJ0
eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2FyZUxpZ2h0c0Rpc3Bvc2VkID0gdGhpcy5fYXJlTGln
aHRzRGlzcG9zZWQgfHwgZGlzcG9zZWQ7CisgICAgICAgIHRoaXMuX2lzRGlydHkgPSB0cnVlOwor
ICAgIH07CisgICAgLyoqCisgICAgICogTWFya3MgdGhlIGF0dHJpYnV0ZSBzdGF0ZSBhcyBjaGFu
Z2VkCisgICAgICovCisgICAgTWF0ZXJpYWxEZWZpbmVzLnByb3RvdHlwZS5tYXJrQXNBdHRyaWJ1
dGVzRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2FyZUF0dHJpYnV0ZXNEaXJ0
eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2lzRGlydHkgPSB0cnVlOworICAgIH07CisgICAgLyoq
CisgICAgICogTWFya3MgdGhlIHRleHR1cmUgc3RhdGUgYXMgY2hhbmdlZAorICAgICAqLworICAg
IE1hdGVyaWFsRGVmaW5lcy5wcm90b3R5cGUubWFya0FzVGV4dHVyZXNEaXJ0eSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5fYXJlVGV4dHVyZXNEaXJ0eSA9IHRydWU7CisgICAgICAgIHRo
aXMuX2lzRGlydHkgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogTWFya3MgdGhlIGZy
ZXNuZWwgc3RhdGUgYXMgY2hhbmdlZAorICAgICAqLworICAgIE1hdGVyaWFsRGVmaW5lcy5wcm90
b3R5cGUubWFya0FzRnJlc25lbERpcnR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9h
cmVGcmVzbmVsRGlydHkgPSB0cnVlOworICAgICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIE1hcmtzIHRoZSBtaXNjIHN0YXRlIGFzIGNoYW5nZWQKKyAg
ICAgKi8KKyAgICBNYXRlcmlhbERlZmluZXMucHJvdG90eXBlLm1hcmtBc01pc2NEaXJ0eSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fYXJlTWlzY0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAg
dGhpcy5faXNEaXJ0eSA9IHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWJ1aWxkcyB0
aGUgbWF0ZXJpYWwgZGVmaW5lcworICAgICAqLworICAgIE1hdGVyaWFsRGVmaW5lcy5wcm90b3R5
cGUucmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2tleXMpIHsKKyAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9rZXlzOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2tl
eXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IE9iamVjdC5rZXlzKHRoaXMp
OyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGtleSA9IF9hW19pXTsK
KyAgICAgICAgICAgIGlmIChrZXlbMF0gPT09ICJfIikgeworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fa2V5cy5wdXNoKGtleSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyBpZiB0d28gbWF0ZXJp
YWwgZGVmaW5lcyBhcmUgZXF1YWwKKyAgICAgKiBAcGFyYW0gb3RoZXIgLSBBIG1hdGVyaWFsIGRl
ZmluZSBpbnN0YW5jZSB0byBjb21wYXJlIHRvCisgICAgICogQHJldHVybnMgLSBCb29sZWFuIGlu
ZGljYXRpbmcgaWYgdGhlIG1hdGVyaWFsIGRlZmluZXMgYXJlIGVxdWFsICh0cnVlKSBvciBub3Qg
KGZhbHNlKQorICAgICAqLworICAgIE1hdGVyaWFsRGVmaW5lcy5wcm90b3R5cGUuaXNFcXVhbCA9
IGZ1bmN0aW9uIChvdGhlcikgeworICAgICAgICBpZiAodGhpcy5fa2V5cy5sZW5ndGggIT09IG90
aGVyLl9rZXlzLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9rZXlzLmxlbmd0aDsg
aW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHByb3AgPSB0aGlzLl9rZXlzW2luZGV4XTsKKyAg
ICAgICAgICAgIGlmICh0aGlzW3Byb3BdICE9PSBvdGhlcltwcm9wXSkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lcyB0aGlzIGluc3RhbmNlJ3Mg
ZGVmaW5lcyB0byBhbm90aGVyIGluc3RhbmNlCisgICAgICogQHBhcmFtIG90aGVyIC0gbWF0ZXJp
YWwgZGVmaW5lcyB0byBjbG9uZSB2YWx1ZXMgdG8KKyAgICAgKi8KKyAgICBNYXRlcmlhbERlZmlu
ZXMucHJvdG90eXBlLmNsb25lVG8gPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAgICAgaWYgKHRo
aXMuX2tleXMubGVuZ3RoICE9PSBvdGhlci5fa2V5cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIG90
aGVyLl9rZXlzID0gdGhpcy5fa2V5cy5zbGljZSgwKTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fa2V5cy5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgIHZhciBwcm9wID0gdGhpcy5fa2V5c1tpbmRleF07CisgICAgICAgICAgICBvdGhl
cltwcm9wXSA9IHRoaXNbcHJvcF07CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAq
IFJlc2V0cyB0aGUgbWF0ZXJpYWwgZGVmaW5lIHZhbHVlcworICAgICAqLworICAgIE1hdGVyaWFs
RGVmaW5lcy5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9rZXlzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgdmFyIHByb3AgPSB0aGlzLl9rZXlzW2luZGV4XTsKKyAgICAgICAgICAgIHZhciB0eXBl
ID0gdHlwZW9mIHRoaXNbcHJvcF07CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlICJudW1iZXIiOgorICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3Bd
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAi
c3RyaW5nIjoKKyAgICAgICAgICAgICAgICAgICAgdGhpc1twcm9wXSA9ICIiOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICB0aGlzW3Byb3BdID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0
cyB0aGUgbWF0ZXJpYWwgZGVmaW5lIHZhbHVlcyB0byBhIHN0cmluZworICAgICAqIEByZXR1cm5z
IC0gU3RyaW5nIG9mIG1hdGVyaWFsIGRlZmluZSBpbmZvcm1hdGlvbgorICAgICAqLworICAgIE1h
dGVyaWFsRGVmaW5lcy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSAiIjsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRo
aXMuX2tleXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgcHJvcCA9IHRoaXMu
X2tleXNbaW5kZXhdOworICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpc1twcm9wXTsKKyAgICAg
ICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlOworICAgICAgICAgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICAgICAgICAgICAgY2FzZSAibnVtYmVyIjoKKyAgICAgICAgICAgICAgICBjYXNl
ICJzdHJpbmciOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIiNkZWZpbmUgIiArIHBy
b3AgKyAiICIgKyB2YWx1ZSArICJcbiI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIjZGVmaW5lICIgKyBwcm9wICsgIlxu
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07Cisg
ICAgcmV0dXJuIE1hdGVyaWFsRGVmaW5lczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsRmxhZ3MudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvbWF0ZXJpYWxGbGFncy50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogTWF0ZXJpYWxGbGFncyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNYXRlcmlhbEZsYWdzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNYXRlcmlhbEZs
YWdzOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2lu
ZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVz
L2NvbnN0YW50cy50cyIpOworCisKKy8qKgorICogVGhpcyBncm91cHMgYWxsIHRoZSBmbGFncyB1
c2VkIHRvIGNvbnRyb2wgdGhlIG1hdGVyaWFscyBjaGFubmVsLgorICovCit2YXIgTWF0ZXJpYWxG
bGFncyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBNYXRlcmlh
bEZsYWdzKCkgeworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0ZXJpYWxGbGFn
cywgIkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFy
ZSBkaWZmdXNlIHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
RGlmZnVzZVRleHR1cmVFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX0RpZmZ1c2VUZXh0dXJlRW5hYmxlZCA9
PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9EaWZmdXNlVGV4dHVyZUVuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAg
IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5N
YXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZyk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbEZsYWdz
LCAiQW1iaWVudFRleHR1cmVFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQXJl
IGFtYmllbnQgdGV4dHVyZXMgZW5hYmxlZCBpbiB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9B
bWJpZW50VGV4dHVyZUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fQW1iaWVudFRleHR1cmVFbmFibGVkID09
PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX0FtYmllbnRUZXh0dXJlRW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAg
X0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLk1h
cmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGlydHlGbGFnKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdGVyaWFsRmxhZ3Ms
ICJPcGFjaXR5VGV4dHVyZUVuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBcmUg
b3BhY2l0eSB0ZXh0dXJlcyBlbmFibGVkIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX09w
YWNpdHlUZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9PcGFjaXR5VGV4dHVyZUVuYWJsZWQgPT09
IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGhpcy5fT3BhY2l0eVRleHR1cmVFbmFibGVkID0gdmFsdWU7CisgICAgICAgICAgICBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uTWFy
a0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RleHR1cmVEaXJ0eUZsYWcpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0ZXJpYWxGbGFncywg
IlJlZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFy
ZSByZWZsZWN0aW9uIHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fUmVmbGVjdGlvblRleHR1cmVFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX1JlZmxlY3Rpb25UZXh0dXJl
RW5hYmxlZCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQgPSB2YWx1ZTsK
KyAgICAgICAgICAgIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJFbmdpbmUiXS5NYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVGV4dHVyZURp
cnR5RmxhZyk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShN
YXRlcmlhbEZsYWdzLCAiRW1pc3NpdmVUZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEFyZSBlbWlzc2l2ZSB0ZXh0dXJlcyBlbmFibGVkIGluIHRoZSBhcHBsaWNhdGlv
bi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX0VtaXNzaXZlVGV4dHVyZUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fRW1pc3NpdmVU
ZXh0dXJlRW5hYmxlZCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9FbWlzc2l2ZVRleHR1cmVFbmFibGVkID0gdmFs
dWU7CisgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siRW5naW5lIl0uTWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RleHR1
cmVEaXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoTWF0ZXJpYWxGbGFncywgIlNwZWN1bGFyVGV4dHVyZUVuYWJsZWQiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBBcmUgc3BlY3VsYXIgdGV4dHVyZXMgZW5hYmxlZCBpbiB0aGUgYXBwbGlj
YXRpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9TcGVjdWxhclRleHR1cmVFbmFibGVkOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX1NwZWN1
bGFyVGV4dHVyZUVuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fU3BlY3VsYXJUZXh0dXJlRW5hYmxlZCA9
IHZhbHVlOworICAgICAgICAgICAgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVuZ2luZSJdLk1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9U
ZXh0dXJlRGlydHlGbGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KE1hdGVyaWFsRmxhZ3MsICJCdW1wVGV4dHVyZUVuYWJsZWQiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBBcmUgYnVtcCB0ZXh0dXJlcyBlbmFibGVkIGluIHRoZSBhcHBsaWNhdGlv
bi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX0J1bXBUZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9CdW1wVGV4dHVyZUVu
YWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5fQnVtcFRleHR1cmVFbmFibGVkID0gdmFsdWU7CisgICAgICAg
ICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5l
Il0uTWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RleHR1cmVEaXJ0eUZsYWcp
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0ZXJpYWxG
bGFncywgIkxpZ2h0bWFwVGV4dHVyZUVuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBBcmUgbGlnaHRtYXAgdGV4dHVyZXMgZW5hYmxlZCBpbiB0aGUgYXBwbGljYXRpb24uCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9MaWdodG1hcFRleHR1cmVFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX0xpZ2h0bWFwVGV4dHVyZUVu
YWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5fTGlnaHRtYXBUZXh0dXJlRW5hYmxlZCA9IHZhbHVlOworICAg
ICAgICAgICAgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVu
Z2luZSJdLk1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGlydHlG
bGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdGVy
aWFsRmxhZ3MsICJSZWZyYWN0aW9uVGV4dHVyZUVuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBBcmUgcmVmcmFjdGlvbiB0ZXh0dXJlcyBlbmFibGVkIGluIHRoZSBhcHBsaWNhdGlv
bi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX1JlZnJhY3Rpb25UZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9SZWZyYWN0
aW9uVGV4dHVyZUVuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fUmVmcmFjdGlvblRleHR1cmVFbmFibGVk
ID0gdmFsdWU7CisgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRW5naW5lIl0uTWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLk1BVEVSSUFM
X1RleHR1cmVEaXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoTWF0ZXJpYWxGbGFncywgIkNvbG9yR3JhZGluZ1RleHR1cmVFbmFibGVkIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogQXJlIGNvbG9yIGdyYWRpbmcgdGV4dHVyZXMgZW5hYmxl
ZCBpbiB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9Db2xvckdyYWRpbmdUZXh0dXJlRW5hYmxl
ZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9Db2xvckdyYWRpbmdUZXh0dXJlRW5hYmxlZCA9PT0gdmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9D
b2xvckdyYWRpbmdUZXh0dXJlRW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAgX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLk1hcmtBbGxNYXRl
cmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGlydHlGbGFnKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdGVyaWFsRmxhZ3MsICJGcmVzbmVs
RW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFyZSBmcmVzbmVscyBlbmFibGVk
IGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX0ZyZXNuZWxFbmFibGVkOworICAgICAgICB9
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMu
X0ZyZXNuZWxFbmFibGVkID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX0ZyZXNuZWxFbmFibGVkID0gdmFsdWU7Cisg
ICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RW5naW5lIl0uTWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX0ZyZXNuZWxEaXJ0
eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0
ZXJpYWxGbGFncywgIkNsZWFyQ29hdFRleHR1cmVFbmFibGVkIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogQXJlIGNsZWFyIGNvYXQgdGV4dHVyZXMgZW5hYmxlZCBpbiB0aGUgYXBwbGljYXRp
b24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9DbGVhckNvYXRUZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9DbGVhckNv
YXRUZXh0dXJlRW5hYmxlZCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9DbGVhckNvYXRUZXh0dXJlRW5hYmxlZCA9
IHZhbHVlOworICAgICAgICAgICAgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVuZ2luZSJdLk1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9U
ZXh0dXJlRGlydHlGbGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KE1hdGVyaWFsRmxhZ3MsICJDbGVhckNvYXRCdW1wVGV4dHVyZUVuYWJsZWQiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBBcmUgY2xlYXIgY29hdCBidW1wIHRleHR1cmVzIGVuYWJs
ZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fQ2xlYXJDb2F0QnVtcFRleHR1cmVFbmFi
bGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX0NsZWFyQ29hdEJ1bXBUZXh0dXJlRW5hYmxlZCA9PT0gdmFsdWUpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9DbGVhckNvYXRCdW1wVGV4dHVyZUVuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5NYXJrQWxs
TWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZyk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbEZsYWdzLCAiQ2xl
YXJDb2F0VGludFRleHR1cmVFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQXJl
IGNsZWFyIGNvYXQgdGludCB0ZXh0dXJlcyBlbmFibGVkIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX0NsZWFyQ29hdFRpbnRUZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9DbGVhckNvYXRU
aW50VGV4dHVyZUVuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fQ2xlYXJDb2F0VGludFRleHR1cmVFbmFi
bGVkID0gdmFsdWU7CisgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siRW5naW5lIl0uTWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLk1BVEVS
SUFMX1RleHR1cmVEaXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoTWF0ZXJpYWxGbGFncywgIlNoZWVuVGV4dHVyZUVuYWJsZWQiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBBcmUgc2hlZW4gdGV4dHVyZXMgZW5hYmxlZCBpbiB0aGUgYXBw
bGljYXRpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9TaGVlblRleHR1cmVFbmFibGVkOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX1NoZWVu
VGV4dHVyZUVuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fU2hlZW5UZXh0dXJlRW5hYmxlZCA9IHZhbHVl
OworICAgICAgICAgICAgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkVuZ2luZSJdLk1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJl
RGlydHlGbGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KE1hdGVyaWFsRmxhZ3MsICJBbmlzb3Ryb3BpY1RleHR1cmVFbmFibGVkIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogQXJlIGFuaXNvdHJvcGljIHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFw
cGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fQW5pc290cm9waWNUZXh0dXJlRW5hYmxlZDsKKyAgICAgICAg
fSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9Bbmlzb3Ryb3BpY1RleHR1cmVFbmFibGVkID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX0FuaXNvdHJvcGljVGV4
dHVyZUVuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5NYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29uc3RhbnRz
Il0uTUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZyk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbEZsYWdzLCAiVGhpY2tuZXNzVGV4dHVyZUVuYWJs
ZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBcmUgdGhpY2tuZXNzIHRleHR1cmVzIGVu
YWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fVGhpY2tuZXNzVGV4dHVyZUVuYWJs
ZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fVGhpY2tuZXNzVGV4dHVyZUVuYWJsZWQgPT09IHZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fVGhp
Y2tuZXNzVGV4dHVyZUVuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5NYXJrQWxsTWF0ZXJpYWxz
QXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
Q29uc3RhbnRzIl0uTUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZyk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIC8vIEZsYWdzIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgYSB0eXBlIG9mIHRleHR1
cmUgZm9yIGFsbCBTdGFuZGFyZCBNYXRlcmlhbHMKKyAgICBNYXRlcmlhbEZsYWdzLl9EaWZmdXNl
VGV4dHVyZUVuYWJsZWQgPSB0cnVlOworICAgIE1hdGVyaWFsRmxhZ3MuX0FtYmllbnRUZXh0dXJl
RW5hYmxlZCA9IHRydWU7CisgICAgTWF0ZXJpYWxGbGFncy5fT3BhY2l0eVRleHR1cmVFbmFibGVk
ID0gdHJ1ZTsKKyAgICBNYXRlcmlhbEZsYWdzLl9SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQgPSB0
cnVlOworICAgIE1hdGVyaWFsRmxhZ3MuX0VtaXNzaXZlVGV4dHVyZUVuYWJsZWQgPSB0cnVlOwor
ICAgIE1hdGVyaWFsRmxhZ3MuX1NwZWN1bGFyVGV4dHVyZUVuYWJsZWQgPSB0cnVlOworICAgIE1h
dGVyaWFsRmxhZ3MuX0J1bXBUZXh0dXJlRW5hYmxlZCA9IHRydWU7CisgICAgTWF0ZXJpYWxGbGFn
cy5fTGlnaHRtYXBUZXh0dXJlRW5hYmxlZCA9IHRydWU7CisgICAgTWF0ZXJpYWxGbGFncy5fUmVm
cmFjdGlvblRleHR1cmVFbmFibGVkID0gdHJ1ZTsKKyAgICBNYXRlcmlhbEZsYWdzLl9Db2xvckdy
YWRpbmdUZXh0dXJlRW5hYmxlZCA9IHRydWU7CisgICAgTWF0ZXJpYWxGbGFncy5fRnJlc25lbEVu
YWJsZWQgPSB0cnVlOworICAgIE1hdGVyaWFsRmxhZ3MuX0NsZWFyQ29hdFRleHR1cmVFbmFibGVk
ID0gdHJ1ZTsKKyAgICBNYXRlcmlhbEZsYWdzLl9DbGVhckNvYXRCdW1wVGV4dHVyZUVuYWJsZWQg
PSB0cnVlOworICAgIE1hdGVyaWFsRmxhZ3MuX0NsZWFyQ29hdFRpbnRUZXh0dXJlRW5hYmxlZCA9
IHRydWU7CisgICAgTWF0ZXJpYWxGbGFncy5fU2hlZW5UZXh0dXJlRW5hYmxlZCA9IHRydWU7Cisg
ICAgTWF0ZXJpYWxGbGFncy5fQW5pc290cm9waWNUZXh0dXJlRW5hYmxlZCA9IHRydWU7CisgICAg
TWF0ZXJpYWxGbGFncy5fVGhpY2tuZXNzVGV4dHVyZUVuYWJsZWQgPSB0cnVlOworICAgIHJldHVy
biBNYXRlcmlhbEZsYWdzOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRl
cmlhbHMvbWF0ZXJpYWxIZWxwZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogTWF0ZXJpYWxIZWxwZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTWF0ZXJpYWxIZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1hdGVyaWFsSGVscGVy
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2Vy
ICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5l
U3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVz
aGVzL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0xpZ2h0c19saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTGlnaHRzL2xpZ2h0ICovICIuL0xpZ2h0cy9saWdodC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRo
LmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKworCisKKworCisKKy8qKgorICog
IlN0YXRpYyBDbGFzcyIgY29udGFpbmluZyB0aGUgbW9zdCBjb21tb25seSB1c2VkIGhlbHBlciB3
aGlsZSBkZWFsaW5nIHdpdGggbWF0ZXJpYWwgZm9yCisgKiByZW5kZXJpbmcgcHVycG9zZS4KKyAq
CisgKiBJdCBjb250YWlucyB0aGUgYmFzaWMgdG9vbHMgdG8gaGVscCBkZWZpbmluZyBkZWZpbmVz
LCBiaW5kaW5nIHVuaWZvcm0gZm9yIHRoZSBjb21tb24gcGFydCBvZiB0aGUgbWF0ZXJpYWxzLgor
ICoKKyAqIFRoaXMgd29ya3MgYnkgY29udmVudGlvbiBpbiBCYWJ5bG9uSlMgYnV0IGlzIG1lYW50
IHRvIGJlIHVzZSBvbmx5IHdpdGggc2hhZGVyIGZvbGxvd2luZyB0aGUgaW4gcGxhY2UgbmFtaW5n
IHJ1bGVzIGFuZCBjb252ZW50aW9ucy4KKyAqLwordmFyIE1hdGVyaWFsSGVscGVyID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIE1hdGVyaWFsSGVscGVyKCkgewor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBCaW5kIHRoZSBjdXJyZW50IHZpZXcgcG9zaXRpb24gdG8g
YW4gZWZmZWN0LgorICAgICAqIEBwYXJhbSBlZmZlY3QgVGhlIGVmZmVjdCB0byBiZSBib3VuZAor
ICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhlIGV5ZXMgcG9zaXRpb24gaXMgdXNlZCBm
cm9tCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuQmluZEV5ZVBvc2l0aW9uID0gZnVuY3Rp
b24gKGVmZmVjdCwgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lLl9mb3JjZWRWaWV3UG9zaXRp
b24pIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRWZWN0b3IzKCJ2RXllUG9zaXRpb24iLCBzY2Vu
ZS5fZm9yY2VkVmlld1Bvc2l0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgZ2xvYmFsUG9zaXRpb24gPSBzY2VuZS5hY3RpdmVDYW1lcmEuZ2xvYmFsUG9z
aXRpb247CisgICAgICAgIGlmICghZ2xvYmFsUG9zaXRpb24pIHsKKyAgICAgICAgICAgIC8vIFVz
ZSBXZWJWUkZyZWVjYW1lcmEncyBkZXZpY2UgcG9zaXRpb24gYXMgZ2xvYmFsIHBvc2l0aW9uIGlz
IG5vdCBpdCdzIGFjdHVhbCBwb3NpdGlvbiBpbiBiYWJ5bG9uIHNwYWNlCisgICAgICAgICAgICBn
bG9iYWxQb3NpdGlvbiA9IHNjZW5lLmFjdGl2ZUNhbWVyYS5kZXZpY2VQb3NpdGlvbjsKKyAgICAg
ICAgfQorICAgICAgICBlZmZlY3Quc2V0VmVjdG9yMygidkV5ZVBvc2l0aW9uIiwgc2NlbmUuX21p
cnJvcmVkQ2FtZXJhUG9zaXRpb24gPyBzY2VuZS5fbWlycm9yZWRDYW1lcmFQb3NpdGlvbiA6IGds
b2JhbFBvc2l0aW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEhlbHBzIHByZXBhcmluZyB0
aGUgZGVmaW5lcyB2YWx1ZXMgYWJvdXQgdGhlIFVWcyBpbiB1c2VkIGluIHRoZSBlZmZlY3QuCisg
ICAgICogVVZzIGFyZSBzaGFyZWQgYXMgbXVjaCBhcyB3ZSBjYW4gYWNjcm9zcyBjaGFubmVscyBp
biB0aGUgc2hhZGVycy4KKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBUaGUgdGV4dHVyZSB3ZSBhcmUg
cHJlcGFyaW5nIHRoZSBVVnMgZm9yCisgICAgICogQHBhcmFtIGRlZmluZXMgVGhlIGRlZmluZXMg
dG8gdXBkYXRlCisgICAgICogQHBhcmFtIGtleSBUaGUgY2hhbm5lbCBrZXkgImRpZmZ1c2UiLCAi
c3BlY3VsYXIiLi4uIHVzZWQgaW4gdGhlIHNoYWRlcgorICAgICAqLworICAgIE1hdGVyaWFsSGVs
cGVyLlByZXBhcmVEZWZpbmVzRm9yTWVyZ2VkVVYgPSBmdW5jdGlvbiAodGV4dHVyZSwgZGVmaW5l
cywga2V5KSB7CisgICAgICAgIGRlZmluZXMuX25lZWRVVnMgPSB0cnVlOworICAgICAgICBkZWZp
bmVzW2tleV0gPSB0cnVlOworICAgICAgICBpZiAodGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KCku
aXNJZGVudGl0eUFzM3gyKCkpIHsKKyAgICAgICAgICAgIGRlZmluZXNba2V5ICsgIkRJUkVDVFVW
Il0gPSB0ZXh0dXJlLmNvb3JkaW5hdGVzSW5kZXggKyAxOworICAgICAgICAgICAgaWYgKHRleHR1
cmUuY29vcmRpbmF0ZXNJbmRleCA9PT0gMCkgeworICAgICAgICAgICAgICAgIGRlZmluZXNbIk1B
SU5VVjEiXSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBkZWZpbmVzWyJNQUlOVVYyIl0gPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVmaW5lc1trZXkgKyAiRElSRUNU
VVYiXSA9IDA7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRzIGEgdGV4
dHVyZSBtYXRyaXggdmFsdWUgdG8gaXRzIGNvcnJzcG9uZGluZyB1bmlmb3JtCisgICAgICogQHBh
cmFtIHRleHR1cmUgVGhlIHRleHR1cmUgdG8gYmluZCB0aGUgbWF0cml4IGZvcgorICAgICAqIEBw
YXJhbSB1bmlmb3JtQnVmZmVyIFRoZSB1bmlmb3JtIGJ1ZmZlciByZWNlaXZpbiB0aGUgZGF0YQor
ICAgICAqIEBwYXJhbSBrZXkgVGhlIGNoYW5uZWwga2V5ICJkaWZmdXNlIiwgInNwZWN1bGFyIi4u
LiB1c2VkIGluIHRoZSBzaGFkZXIKKyAgICAgKi8KKyAgICBNYXRlcmlhbEhlbHBlci5CaW5kVGV4
dHVyZU1hdHJpeCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCB1bmlmb3JtQnVmZmVyLCBrZXkpIHsKKyAg
ICAgICAgdmFyIG1hdHJpeCA9IHRleHR1cmUuZ2V0VGV4dHVyZU1hdHJpeCgpOworICAgICAgICB1
bmlmb3JtQnVmZmVyLnVwZGF0ZU1hdHJpeChrZXkgKyAiTWF0cml4IiwgbWF0cml4KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBmb2cgKHNo
b3VsZCBpdCBiZSBlbmFibGVkPykKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNo
IHRvIGV2YWx1YXRlIGZvciBmb2cgc3VwcG9ydAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVz
IHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBmb2cgbXVzdCBiZSBl
bmFibGVkCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuR2V0Rm9nU3RhdGUgPSBmdW5jdGlv
biAobWVzaCwgc2NlbmUpIHsKKyAgICAgICAgcmV0dXJuIChzY2VuZS5mb2dFbmFibGVkICYmIG1l
c2guYXBwbHlGb2cgJiYgc2NlbmUuZm9nTW9kZSAhPT0gX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlNjZW5lIl0uRk9HTU9ERV9OT05FKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEhlbHBlciB1c2VkIHRvIHByZXBhcmUgdGhlIGxpc3Qgb2YgZGVmaW5lcyBhc3NvY2lhdGVk
IHdpdGggbWlzYy4gdmFsdWVzIGZvciBzaGFkZXIgY29tcGlsYXRpb24KKyAgICAgKiBAcGFyYW0g
bWVzaCBkZWZpbmVzIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5l
cyB0aGUgY3VycmVudCBzY2VuZQorICAgICAqIEBwYXJhbSB1c2VMb2dhcml0aG1pY0RlcHRoIGRl
ZmluZXMgaWYgbG9nYXJpdGhtaWMgZGVwdGggaGFzIHRvIGJlIHR1cm5lZCBvbgorICAgICAqIEBw
YXJhbSBwb2ludHNDbG91ZCBkZWZpbmVzIGlmIHBvaW50IGNsb3VkIHJlbmRlcmluZyBoYXMgdG8g
YmUgdHVybmVkIG9uCisgICAgICogQHBhcmFtIGZvZ0VuYWJsZWQgZGVmaW5lcyBpZiBmb2cgaGFz
IHRvIGJlIHR1cm5lZCBvbgorICAgICAqIEBwYXJhbSBhbHBoYVRlc3QgZGVmaW5lcyBpZiBhbHBo
YSB0ZXN0aW5nIGhhcyB0byBiZSB0dXJuZWQgb24KKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZp
bmVzIHRoZSBjdXJyZW50IGxpc3Qgb2YgZGVmaW5lcworICAgICAqLworICAgIE1hdGVyaWFsSGVs
cGVyLlByZXBhcmVEZWZpbmVzRm9yTWlzYyA9IGZ1bmN0aW9uIChtZXNoLCBzY2VuZSwgdXNlTG9n
YXJpdGhtaWNEZXB0aCwgcG9pbnRzQ2xvdWQsIGZvZ0VuYWJsZWQsIGFscGhhVGVzdCwgZGVmaW5l
cykgeworICAgICAgICBpZiAoZGVmaW5lcy5fYXJlTWlzY0RpcnR5KSB7CisgICAgICAgICAgICBk
ZWZpbmVzWyJMT0dBUklUSE1JQ0RFUFRIIl0gPSB1c2VMb2dhcml0aG1pY0RlcHRoOworICAgICAg
ICAgICAgZGVmaW5lc1siUE9JTlRTSVpFIl0gPSBwb2ludHNDbG91ZDsKKyAgICAgICAgICAgIGRl
ZmluZXNbIkZPRyJdID0gZm9nRW5hYmxlZCAmJiB0aGlzLkdldEZvZ1N0YXRlKG1lc2gsIHNjZW5l
KTsKKyAgICAgICAgICAgIGRlZmluZXNbIk5PTlVOSUZPUk1TQ0FMSU5HIl0gPSBtZXNoLm5vblVu
aWZvcm1TY2FsaW5nOworICAgICAgICAgICAgZGVmaW5lc1siQUxQSEFURVNUIl0gPSBhbHBoYVRl
c3Q7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEhlbHBlciB1c2VkIHRvIHBy
ZXBhcmUgdGhlIGxpc3Qgb2YgZGVmaW5lcyBhc3NvY2lhdGVkIHdpdGggZnJhbWUgdmFsdWVzIGZv
ciBzaGFkZXIgY29tcGlsYXRpb24KKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgY3Vy
cmVudCBzY2VuZQorICAgICAqIEBwYXJhbSBlbmdpbmUgZGVmaW5lcyB0aGUgY3VycmVudCBlbmdp
bmUKKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBzcGVjaWZpZXMgdGhlIGxpc3Qgb2YgYWN0aXZlIGRl
ZmluZXMKKyAgICAgKiBAcGFyYW0gdXNlSW5zdGFuY2VzIGRlZmluZXMgaWYgaW5zdGFuY2VzIGhh
dmUgdG8gYmUgdHVybmVkIG9uCisgICAgICogQHBhcmFtIHVzZUNsaXBQbGFuZSBkZWZpbmVzIGlm
IGNsaXAgcGxhbmUgaGF2ZSB0byBiZSB0dXJuZWQgb24KKyAgICAgKi8KKyAgICBNYXRlcmlhbEhl
bHBlci5QcmVwYXJlRGVmaW5lc0ZvckZyYW1lQm91bmRWYWx1ZXMgPSBmdW5jdGlvbiAoc2NlbmUs
IGVuZ2luZSwgZGVmaW5lcywgdXNlSW5zdGFuY2VzLCB1c2VDbGlwUGxhbmUpIHsKKyAgICAgICAg
aWYgKHVzZUNsaXBQbGFuZSA9PT0gdm9pZCAwKSB7IHVzZUNsaXBQbGFuZSA9IG51bGw7IH0KKyAg
ICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgdmFyIHVzZUNsaXBQbGFuZTEgPSBm
YWxzZTsKKyAgICAgICAgdmFyIHVzZUNsaXBQbGFuZTIgPSBmYWxzZTsKKyAgICAgICAgdmFyIHVz
ZUNsaXBQbGFuZTMgPSBmYWxzZTsKKyAgICAgICAgdmFyIHVzZUNsaXBQbGFuZTQgPSBmYWxzZTsK
KyAgICAgICAgdXNlQ2xpcFBsYW5lMSA9IHVzZUNsaXBQbGFuZSA9PSBudWxsID8gKHNjZW5lLmNs
aXBQbGFuZSAhPT0gdW5kZWZpbmVkICYmIHNjZW5lLmNsaXBQbGFuZSAhPT0gbnVsbCkgOiB1c2VD
bGlwUGxhbmU7CisgICAgICAgIHVzZUNsaXBQbGFuZTIgPSB1c2VDbGlwUGxhbmUgPT0gbnVsbCA/
IChzY2VuZS5jbGlwUGxhbmUyICE9PSB1bmRlZmluZWQgJiYgc2NlbmUuY2xpcFBsYW5lMiAhPT0g
bnVsbCkgOiB1c2VDbGlwUGxhbmU7CisgICAgICAgIHVzZUNsaXBQbGFuZTMgPSB1c2VDbGlwUGxh
bmUgPT0gbnVsbCA/IChzY2VuZS5jbGlwUGxhbmUzICE9PSB1bmRlZmluZWQgJiYgc2NlbmUuY2xp
cFBsYW5lMyAhPT0gbnVsbCkgOiB1c2VDbGlwUGxhbmU7CisgICAgICAgIHVzZUNsaXBQbGFuZTQg
PSB1c2VDbGlwUGxhbmUgPT0gbnVsbCA/IChzY2VuZS5jbGlwUGxhbmU0ICE9PSB1bmRlZmluZWQg
JiYgc2NlbmUuY2xpcFBsYW5lNCAhPT0gbnVsbCkgOiB1c2VDbGlwUGxhbmU7CisgICAgICAgIGlm
IChkZWZpbmVzWyJDTElQUExBTkUiXSAhPT0gdXNlQ2xpcFBsYW5lMSkgeworICAgICAgICAgICAg
ZGVmaW5lc1siQ0xJUFBMQU5FIl0gPSB1c2VDbGlwUGxhbmUxOworICAgICAgICAgICAgY2hhbmdl
ZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlZmluZXNbIkNMSVBQTEFORTIiXSAh
PT0gdXNlQ2xpcFBsYW5lMikgeworICAgICAgICAgICAgZGVmaW5lc1siQ0xJUFBMQU5FMiJdID0g
dXNlQ2xpcFBsYW5lMjsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChkZWZpbmVzWyJDTElQUExBTkUzIl0gIT09IHVzZUNsaXBQbGFuZTMpIHsKKyAg
ICAgICAgICAgIGRlZmluZXNbIkNMSVBQTEFORTMiXSA9IHVzZUNsaXBQbGFuZTM7CisgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lc1siQ0xJ
UFBMQU5FNCJdICE9PSB1c2VDbGlwUGxhbmU0KSB7CisgICAgICAgICAgICBkZWZpbmVzWyJDTElQ
UExBTkU0Il0gPSB1c2VDbGlwUGxhbmU0OworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGRlZmluZXNbIkRFUFRIUFJFUEFTUyJdICE9PSAhZW5naW5l
LmdldENvbG9yV3JpdGUoKSkgeworICAgICAgICAgICAgZGVmaW5lc1siREVQVEhQUkVQQVNTIl0g
PSAhZGVmaW5lc1siREVQVEhQUkVQQVNTIl07CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lc1siSU5TVEFOQ0VTIl0gIT09IHVzZUluc3Rh
bmNlcykgeworICAgICAgICAgICAgZGVmaW5lc1siSU5TVEFOQ0VTIl0gPSB1c2VJbnN0YW5jZXM7
CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hh
bmdlZCkgeworICAgICAgICAgICAgZGVmaW5lcy5tYXJrQXNVbnByb2Nlc3NlZCgpOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyB0aGUgZGVmaW5lcyBmb3IgYm9u
ZXMKKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCBjb250YWluaW5nIHRoZSBnZW9tZXRyeSBk
YXRhIHdlIHdpbGwgZHJhdworICAgICAqIEBwYXJhbSBkZWZpbmVzIFRoZSBkZWZpbmVzIHRvIHVw
ZGF0ZQorICAgICAqLworICAgIE1hdGVyaWFsSGVscGVyLlByZXBhcmVEZWZpbmVzRm9yQm9uZXMg
PSBmdW5jdGlvbiAobWVzaCwgZGVmaW5lcykgeworICAgICAgICBpZiAobWVzaC51c2VCb25lcyAm
JiBtZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBtZXNoLnNrZWxldG9uKSB7CisgICAg
ICAgICAgICBkZWZpbmVzWyJOVU1fQk9ORV9JTkZMVUVOQ0VSUyJdID0gbWVzaC5udW1Cb25lSW5m
bHVlbmNlcnM7CisgICAgICAgICAgICB2YXIgbWF0ZXJpYWxTdXBwb3J0c0JvbmVUZXh0dXJlID0g
ZGVmaW5lc1siQk9ORVRFWFRVUkUiXSAhPT0gdW5kZWZpbmVkOworICAgICAgICAgICAgaWYgKG1l
c2guc2tlbGV0b24uaXNVc2luZ1RleHR1cmVGb3JNYXRyaWNlcyAmJiBtYXRlcmlhbFN1cHBvcnRz
Qm9uZVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzWyJCT05FVEVYVFVSRSJdID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGRlZmluZXNbIkJvbmVzUGVyTWVzaCJdID0gKG1lc2guc2tlbGV0b24uYm9uZXMubGVuZ3RoICsg
MSk7CisgICAgICAgICAgICAgICAgZGVmaW5lc1siQk9ORVRFWFRVUkUiXSA9IG1hdGVyaWFsU3Vw
cG9ydHNCb25lVGV4dHVyZSA/IGZhbHNlIDogdW5kZWZpbmVkOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVmaW5lc1siTlVNX0JPTkVfSU5G
TFVFTkNFUlMiXSA9IDA7CisgICAgICAgICAgICBkZWZpbmVzWyJCb25lc1Blck1lc2giXSA9IDA7
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFByZXBhcmVzIHRoZSBkZWZpbmVz
IGZvciBtb3JwaCB0YXJnZXRzCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggY29udGFpbmlu
ZyB0aGUgZ2VvbWV0cnkgZGF0YSB3ZSB3aWxsIGRyYXcKKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBU
aGUgZGVmaW5lcyB0byB1cGRhdGUKKyAgICAgKi8KKyAgICBNYXRlcmlhbEhlbHBlci5QcmVwYXJl
RGVmaW5lc0Zvck1vcnBoVGFyZ2V0cyA9IGZ1bmN0aW9uIChtZXNoLCBkZWZpbmVzKSB7CisgICAg
ICAgIHZhciBtYW5hZ2VyID0gbWVzaC5tb3JwaFRhcmdldE1hbmFnZXI7CisgICAgICAgIGlmICht
YW5hZ2VyKSB7CisgICAgICAgICAgICBkZWZpbmVzWyJNT1JQSFRBUkdFVFNfVVYiXSA9IG1hbmFn
ZXIuc3VwcG9ydHNVVnMgJiYgZGVmaW5lc1siVVYxIl07CisgICAgICAgICAgICBkZWZpbmVzWyJN
T1JQSFRBUkdFVFNfVEFOR0VOVCJdID0gbWFuYWdlci5zdXBwb3J0c1RhbmdlbnRzICYmIGRlZmlu
ZXNbIlRBTkdFTlQiXTsKKyAgICAgICAgICAgIGRlZmluZXNbIk1PUlBIVEFSR0VUU19OT1JNQUwi
XSA9IG1hbmFnZXIuc3VwcG9ydHNOb3JtYWxzICYmIGRlZmluZXNbIk5PUk1BTCJdOworICAgICAg
ICAgICAgZGVmaW5lc1siTU9SUEhUQVJHRVRTIl0gPSAobWFuYWdlci5udW1JbmZsdWVuY2VycyA+
IDApOworICAgICAgICAgICAgZGVmaW5lc1siTlVNX01PUlBIX0lORkxVRU5DRVJTIl0gPSBtYW5h
Z2VyLm51bUluZmx1ZW5jZXJzOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgZGVmaW5lc1siTU9SUEhUQVJHRVRTX1VWIl0gPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmlu
ZXNbIk1PUlBIVEFSR0VUU19UQU5HRU5UIl0gPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXNb
Ik1PUlBIVEFSR0VUU19OT1JNQUwiXSA9IGZhbHNlOworICAgICAgICAgICAgZGVmaW5lc1siTU9S
UEhUQVJHRVRTIl0gPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXNbIk5VTV9NT1JQSF9JTkZM
VUVOQ0VSUyJdID0gMDsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUHJlcGFy
ZXMgdGhlIGRlZmluZXMgdXNlZCBpbiB0aGUgc2hhZGVyIGRlcGVuZGluZyBvbiB0aGUgYXR0cmli
dXRlcyBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBt
ZXNoIGNvbnRhaW5pbmcgdGhlIGdlb21ldHJ5IGRhdGEgd2Ugd2lsbCBkcmF3CisgICAgICogQHBh
cmFtIGRlZmluZXMgVGhlIGRlZmluZXMgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIHVzZVZlcnRl
eENvbG9yIFByZWNpc2Ugd2hldGhlciB2ZXJ0ZXggY29sb3JzIHNob3VsZCBiZSB1c2VkIG9yIG5v
dCAob3ZlcnJpZGUgbWVzaCBpbmZvKQorICAgICAqIEBwYXJhbSB1c2VCb25lcyBQcmVjaXNlIHdo
ZXRoZXIgYm9uZXMgc2hvdWxkIGJlIHVzZWQgb3Igbm90IChvdmVycmlkZSBtZXNoIGluZm8pCisg
ICAgICogQHBhcmFtIHVzZU1vcnBoVGFyZ2V0cyBQcmVjaXNlIHdoZXRoZXIgbW9ycGggdGFyZ2V0
cyBzaG91bGQgYmUgdXNlZCBvciBub3QgKG92ZXJyaWRlIG1lc2ggaW5mbykKKyAgICAgKiBAcGFy
YW0gdXNlVmVydGV4QWxwaGEgUHJlY2lzZSB3aGV0aGVyIHZlcnRleCBhbHBoYSBzaG91bGQgYmUg
dXNlZCBvciBub3QgKG92ZXJyaWRlIG1lc2ggaW5mbykKKyAgICAgKiBAcmV0dXJucyBmYWxzZSBp
ZiBkZWZpbmVzIGFyZSBjb25zaWRlcmVkIG5vdCBkaXJ0eSBhbmQgaGF2ZSBub3QgYmVlbiBjaGVj
a2VkCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuUHJlcGFyZURlZmluZXNGb3JBdHRyaWJ1
dGVzID0gZnVuY3Rpb24gKG1lc2gsIGRlZmluZXMsIHVzZVZlcnRleENvbG9yLCB1c2VCb25lcywg
dXNlTW9ycGhUYXJnZXRzLCB1c2VWZXJ0ZXhBbHBoYSkgeworICAgICAgICBpZiAodXNlTW9ycGhU
YXJnZXRzID09PSB2b2lkIDApIHsgdXNlTW9ycGhUYXJnZXRzID0gZmFsc2U7IH0KKyAgICAgICAg
aWYgKHVzZVZlcnRleEFscGhhID09PSB2b2lkIDApIHsgdXNlVmVydGV4QWxwaGEgPSB0cnVlOyB9
CisgICAgICAgIGlmICghZGVmaW5lcy5fYXJlQXR0cmlidXRlc0RpcnR5ICYmIGRlZmluZXMuX25l
ZWROb3JtYWxzID09PSBkZWZpbmVzLl9ub3JtYWxzICYmIGRlZmluZXMuX25lZWRVVnMgPT09IGRl
ZmluZXMuX3V2cykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGRlZmluZXMuX25vcm1hbHMgPSBkZWZpbmVzLl9uZWVkTm9ybWFsczsKKyAgICAgICAgZGVm
aW5lcy5fdXZzID0gZGVmaW5lcy5fbmVlZFVWczsKKyAgICAgICAgZGVmaW5lc1siTk9STUFMIl0g
PSAoZGVmaW5lcy5fbmVlZE5vcm1hbHMgJiYgbWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0u
Tm9ybWFsS2luZCkpOworICAgICAgICBpZiAoZGVmaW5lcy5fbmVlZE5vcm1hbHMgJiYgbWVzaC5p
c1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVGFuZ2VudEtpbmQpKSB7CisgICAgICAgICAgICBkZWZp
bmVzWyJUQU5HRU5UIl0gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLl9u
ZWVkVVZzKSB7CisgICAgICAgICAgICBkZWZpbmVzWyJVVjEiXSA9IG1lc2guaXNWZXJ0aWNlc0Rh
dGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
cnRleEJ1ZmZlciJdLlVWS2luZCk7CisgICAgICAgICAgICBkZWZpbmVzWyJVVjIiXSA9IG1lc2gu
aXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWMktpbmQpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgZGVmaW5lc1siVVYxIl0gPSBmYWxzZTsKKyAgICAgICAgICAgIGRl
ZmluZXNbIlVWMiJdID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVzZVZlcnRleENv
bG9yKSB7CisgICAgICAgICAgICB2YXIgaGFzVmVydGV4Q29sb3JzID0gbWVzaC51c2VWZXJ0ZXhD
b2xvcnMgJiYgbWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAg
ICAgICAgIGRlZmluZXNbIlZFUlRFWENPTE9SIl0gPSBoYXNWZXJ0ZXhDb2xvcnM7CisgICAgICAg
ICAgICBkZWZpbmVzWyJWRVJURVhBTFBIQSJdID0gbWVzaC5oYXNWZXJ0ZXhBbHBoYSAmJiBoYXNW
ZXJ0ZXhDb2xvcnMgJiYgdXNlVmVydGV4QWxwaGE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVz
ZUJvbmVzKSB7CisgICAgICAgICAgICB0aGlzLlByZXBhcmVEZWZpbmVzRm9yQm9uZXMobWVzaCwg
ZGVmaW5lcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVzZU1vcnBoVGFyZ2V0cykgeworICAg
ICAgICAgICAgdGhpcy5QcmVwYXJlRGVmaW5lc0Zvck1vcnBoVGFyZ2V0cyhtZXNoLCBkZWZpbmVz
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFByZXBhcmVzIHRoZSBkZWZpbmVzIHJlbGF0ZWQgdG8gbXVsdGl2aWV3CisgICAgICogQHBh
cmFtIHNjZW5lIFRoZSBzY2VuZSB3ZSBhcmUgaW50ZW5kaW5nIHRvIGRyYXcKKyAgICAgKiBAcGFy
YW0gZGVmaW5lcyBUaGUgZGVmaW5lcyB0byB1cGRhdGUKKyAgICAgKi8KKyAgICBNYXRlcmlhbEhl
bHBlci5QcmVwYXJlRGVmaW5lc0Zvck11bHRpdmlldyA9IGZ1bmN0aW9uIChzY2VuZSwgZGVmaW5l
cykgeworICAgICAgICBpZiAoc2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICB2YXIg
cHJldmlvdXNNdWx0aXZpZXcgPSBkZWZpbmVzLk1VTFRJVklFVzsKKyAgICAgICAgICAgIGRlZmlu
ZXMuTVVMVElWSUVXID0gKHNjZW5lLmFjdGl2ZUNhbWVyYS5vdXRwdXRSZW5kZXJUYXJnZXQgIT09
IG51bGwgJiYgc2NlbmUuYWN0aXZlQ2FtZXJhLm91dHB1dFJlbmRlclRhcmdldC5nZXRWaWV3Q291
bnQoKSA+IDEpOworICAgICAgICAgICAgaWYgKGRlZmluZXMuTVVMVElWSUVXICE9IHByZXZpb3Vz
TXVsdGl2aWV3KSB7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5tYXJrQXNVbnByb2Nlc3NlZCgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcmVw
YXJlcyB0aGUgZGVmaW5lcyByZWxhdGVkIHRvIHRoZSBsaWdodCBpbmZvcm1hdGlvbiBwYXNzZWQg
aW4gcGFyYW1ldGVyCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB3ZSBhcmUgaW50ZW5k
aW5nIHRvIGRyYXcKKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGUgZWZmZWN0IGlzIGNv
bXBpbGluZyBmb3IKKyAgICAgKiBAcGFyYW0gbGlnaHQgVGhlIGxpZ2h0IHRoZSBlZmZlY3QgaXMg
Y29tcGlsaW5nIGZvcgorICAgICAqIEBwYXJhbSBsaWdodEluZGV4IFRoZSBpbmRleCBvZiB0aGUg
bGlnaHQKKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBUaGUgZGVmaW5lcyB0byB1cGRhdGUKKyAgICAg
KiBAcGFyYW0gc3BlY3VsYXJTdXBwb3J0ZWQgU3BlY2lmaWVzIHdoZXRoZXIgc3BlY3VsYXIgaXMg
c3VwcG9ydGVkIG9yIG5vdCAob3ZlcnJpZGUgbGlnaHRzIGRhdGEpCisgICAgICogQHBhcmFtIHN0
YXRlIERlZmluZXMgdGhlIGN1cnJlbnQgc3RhdGUgcmVnYXJkaW5nIHdoYXQgaXMgbmVlZGVkIChu
b3JtYWxzLCBldGMuLi4pCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuUHJlcGFyZURlZmlu
ZXNGb3JMaWdodCA9IGZ1bmN0aW9uIChzY2VuZSwgbWVzaCwgbGlnaHQsIGxpZ2h0SW5kZXgsIGRl
ZmluZXMsIHNwZWN1bGFyU3VwcG9ydGVkLCBzdGF0ZSkgeworICAgICAgICBzdGF0ZS5uZWVkTm9y
bWFscyA9IHRydWU7CisgICAgICAgIGlmIChkZWZpbmVzWyJMSUdIVCIgKyBsaWdodEluZGV4XSA9
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBzdGF0ZS5uZWVkUmVidWlsZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgZGVmaW5lc1siTElHSFQiICsgbGlnaHRJbmRleF0gPSB0cnVlOwor
ICAgICAgICBkZWZpbmVzWyJTUE9UTElHSFQiICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAg
ICAgZGVmaW5lc1siSEVNSUxJR0hUIiArIGxpZ2h0SW5kZXhdID0gZmFsc2U7CisgICAgICAgIGRl
ZmluZXNbIlBPSU5UTElHSFQiICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgZGVmaW5l
c1siRElSTElHSFQiICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgbGlnaHQucHJlcGFy
ZUxpZ2h0U3BlY2lmaWNEZWZpbmVzKGRlZmluZXMsIGxpZ2h0SW5kZXgpOworICAgICAgICAvLyBG
YWxsT2ZmLgorICAgICAgICBkZWZpbmVzWyJMSUdIVF9GQUxMT0ZGX1BIWVNJQ0FMIiArIGxpZ2h0
SW5kZXhdID0gZmFsc2U7CisgICAgICAgIGRlZmluZXNbIkxJR0hUX0ZBTExPRkZfR0xURiIgKyBs
aWdodEluZGV4XSA9IGZhbHNlOworICAgICAgICBkZWZpbmVzWyJMSUdIVF9GQUxMT0ZGX1NUQU5E
QVJEIiArIGxpZ2h0SW5kZXhdID0gZmFsc2U7CisgICAgICAgIHN3aXRjaCAobGlnaHQuZmFsbG9m
ZlR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgX0xpZ2h0c19saWdodF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJMaWdodCJdLkZBTExPRkZfR0xURjoKKyAgICAgICAgICAgICAgICBkZWZp
bmVzWyJMSUdIVF9GQUxMT0ZGX0dMVEYiICsgbGlnaHRJbmRleF0gPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfTGlnaHRzX2xpZ2h0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIkxpZ2h0Il0uRkFMTE9GRl9QSFlTSUNBTDoKKyAgICAgICAgICAg
ICAgICBkZWZpbmVzWyJMSUdIVF9GQUxMT0ZGX1BIWVNJQ0FMIiArIGxpZ2h0SW5kZXhdID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX0xpZ2h0c19saWdo
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJMaWdodCJdLkZBTExPRkZfU1RBTkRBUkQ6
CisgICAgICAgICAgICAgICAgZGVmaW5lc1siTElHSFRfRkFMTE9GRl9TVEFOREFSRCIgKyBsaWdo
dEluZGV4XSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gU3BlY3VsYXIKKyAgICAgICAgaWYgKHNwZWN1bGFyU3VwcG9ydGVkICYmICFsaWdodC5z
cGVjdWxhci5lcXVhbHNGbG9hdHMoMCwgMCwgMCkpIHsKKyAgICAgICAgICAgIHN0YXRlLnNwZWN1
bGFyRW5hYmxlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2hhZG93cworICAgICAg
ICBkZWZpbmVzWyJTSEFET1ciICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgZGVmaW5l
c1siU0hBRE9XUENGIiArIGxpZ2h0SW5kZXhdID0gZmFsc2U7CisgICAgICAgIGRlZmluZXNbIlNI
QURPV1BDU1MiICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgZGVmaW5lc1siU0hBRE9X
UE9JU1NPTiIgKyBsaWdodEluZGV4XSA9IGZhbHNlOworICAgICAgICBkZWZpbmVzWyJTSEFET1dF
U00iICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgZGVmaW5lc1siU0hBRE9XQ1VCRSIg
KyBsaWdodEluZGV4XSA9IGZhbHNlOworICAgICAgICBkZWZpbmVzWyJTSEFET1dMT1dRVUFMSVRZ
IiArIGxpZ2h0SW5kZXhdID0gZmFsc2U7CisgICAgICAgIGRlZmluZXNbIlNIQURPV01FRElVTVFV
QUxJVFkiICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgaWYgKG1lc2ggJiYgbWVzaC5y
ZWNlaXZlU2hhZG93cyAmJiBzY2VuZS5zaGFkb3dzRW5hYmxlZCAmJiBsaWdodC5zaGFkb3dFbmFi
bGVkKSB7CisgICAgICAgICAgICB2YXIgc2hhZG93R2VuZXJhdG9yID0gbGlnaHQuZ2V0U2hhZG93
R2VuZXJhdG9yKCk7CisgICAgICAgICAgICBpZiAoc2hhZG93R2VuZXJhdG9yKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHNoYWRvd01hcCA9IHNoYWRvd0dlbmVyYXRvci5nZXRTaGFkb3dNYXAoKTsK
KyAgICAgICAgICAgICAgICBpZiAoc2hhZG93TWFwKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChzaGFkb3dNYXAucmVuZGVyTGlzdCAmJiBzaGFkb3dNYXAucmVuZGVyTGlzdC5sZW5ndGggPiAw
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zaGFkb3dFbmFibGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci5wcmVwYXJlRGVmaW5lcyhk
ZWZpbmVzLCBsaWdodEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobGlnaHQubGlnaHRt
YXBNb2RlICE9IF9MaWdodHNfbGlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTGln
aHQiXS5MSUdIVE1BUF9ERUZBVUxUKSB7CisgICAgICAgICAgICBzdGF0ZS5saWdodG1hcE1vZGUg
PSB0cnVlOworICAgICAgICAgICAgZGVmaW5lc1siTElHSFRNQVBFWENMVURFRCIgKyBsaWdodElu
ZGV4XSA9IHRydWU7CisgICAgICAgICAgICBkZWZpbmVzWyJMSUdIVE1BUE5PU1BFQ1VMQVIiICsg
bGlnaHRJbmRleF0gPSAobGlnaHQubGlnaHRtYXBNb2RlID09IF9MaWdodHNfbGlnaHRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siTGlnaHQiXS5MSUdIVE1BUF9TSEFET1dTT05MWSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkZWZpbmVzWyJMSUdIVE1BUEVY
Q0xVREVEIiArIGxpZ2h0SW5kZXhdID0gZmFsc2U7CisgICAgICAgICAgICBkZWZpbmVzWyJMSUdI
VE1BUE5PU1BFQ1VMQVIiICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogUHJlcGFyZXMgdGhlIGRlZmluZXMgcmVsYXRlZCB0byB0aGUgbGln
aHQgaW5mb3JtYXRpb24gcGFzc2VkIGluIHBhcmFtZXRlcgorICAgICAqIEBwYXJhbSBzY2VuZSBU
aGUgc2NlbmUgd2UgYXJlIGludGVuZGluZyB0byBkcmF3CisgICAgICogQHBhcmFtIG1lc2ggVGhl
IG1lc2ggdGhlIGVmZmVjdCBpcyBjb21waWxpbmcgZm9yCisgICAgICogQHBhcmFtIGRlZmluZXMg
VGhlIGRlZmluZXMgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIHNwZWN1bGFyU3VwcG9ydGVkIFNw
ZWNpZmllcyB3aGV0aGVyIHNwZWN1bGFyIGlzIHN1cHBvcnRlZCBvciBub3QgKG92ZXJyaWRlIGxp
Z2h0cyBkYXRhKQorICAgICAqIEBwYXJhbSBtYXhTaW11bHRhbmVvdXNMaWdodHMgU3BlY2ZpZXMg
aG93IG1hbnV5IGxpZ2h0cyBjYW4gYmUgYWRkZWQgdG8gdGhlIGVmZmVjdCBhdCBtYXgKKyAgICAg
KiBAcGFyYW0gZGlzYWJsZUxpZ2h0aW5nIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBsaWdodGluZyBp
cyBkaXNhYmxlZCAob3ZlcnJpZGUgc2NlbmUgYW5kIGxpZ2h0KQorICAgICAqIEByZXR1cm5zIHRy
dWUgaWYgbm9ybWFscyB3aWxsIGJlIHJlcXVpcmVkIGZvciB0aGUgcmVzdCBvZiB0aGUgZWZmZWN0
CisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuUHJlcGFyZURlZmluZXNGb3JMaWdodHMgPSBm
dW5jdGlvbiAoc2NlbmUsIG1lc2gsIGRlZmluZXMsIHNwZWN1bGFyU3VwcG9ydGVkLCBtYXhTaW11
bHRhbmVvdXNMaWdodHMsIGRpc2FibGVMaWdodGluZykgeworICAgICAgICBpZiAobWF4U2ltdWx0
YW5lb3VzTGlnaHRzID09PSB2b2lkIDApIHsgbWF4U2ltdWx0YW5lb3VzTGlnaHRzID0gNDsgfQor
ICAgICAgICBpZiAoZGlzYWJsZUxpZ2h0aW5nID09PSB2b2lkIDApIHsgZGlzYWJsZUxpZ2h0aW5n
ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCFkZWZpbmVzLl9hcmVMaWdodHNEaXJ0eSkgeworICAg
ICAgICAgICAgcmV0dXJuIGRlZmluZXMuX25lZWROb3JtYWxzOworICAgICAgICB9CisgICAgICAg
IHZhciBsaWdodEluZGV4ID0gMDsKKyAgICAgICAgdmFyIHN0YXRlID0geworICAgICAgICAgICAg
bmVlZE5vcm1hbHM6IGZhbHNlLAorICAgICAgICAgICAgbmVlZFJlYnVpbGQ6IGZhbHNlLAorICAg
ICAgICAgICAgbGlnaHRtYXBNb2RlOiBmYWxzZSwKKyAgICAgICAgICAgIHNoYWRvd0VuYWJsZWQ6
IGZhbHNlLAorICAgICAgICAgICAgc3BlY3VsYXJFbmFibGVkOiBmYWxzZQorICAgICAgICB9Owor
ICAgICAgICBpZiAoc2NlbmUubGlnaHRzRW5hYmxlZCAmJiAhZGlzYWJsZUxpZ2h0aW5nKSB7Cisg
ICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gbWVzaC5saWdodFNvdXJjZXM7IF9pIDwg
X2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpZ2h0ID0gX2FbX2ldOwor
ICAgICAgICAgICAgICAgIHRoaXMuUHJlcGFyZURlZmluZXNGb3JMaWdodChzY2VuZSwgbWVzaCwg
bGlnaHQsIGxpZ2h0SW5kZXgsIGRlZmluZXMsIHNwZWN1bGFyU3VwcG9ydGVkLCBzdGF0ZSk7Cisg
ICAgICAgICAgICAgICAgbGlnaHRJbmRleCsrOworICAgICAgICAgICAgICAgIGlmIChsaWdodElu
ZGV4ID09PSBtYXhTaW11bHRhbmVvdXNMaWdodHMpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGRlZmluZXNbIlNQRUNVTEFSVEVSTSJdID0gc3RhdGUuc3BlY3VsYXJFbmFibGVkOworICAgICAg
ICBkZWZpbmVzWyJTSEFET1dTIl0gPSBzdGF0ZS5zaGFkb3dFbmFibGVkOworICAgICAgICAvLyBS
ZXNldHRpbmcgYWxsIG90aGVyIGxpZ2h0cyBpZiBhbnkKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSBsaWdodEluZGV4OyBpbmRleCA8IG1heFNpbXVsdGFuZW91c0xpZ2h0czsgaW5kZXgrKykgewor
ICAgICAgICAgICAgaWYgKGRlZmluZXNbIkxJR0hUIiArIGluZGV4XSAhPT0gdW5kZWZpbmVkKSB7
CisgICAgICAgICAgICAgICAgZGVmaW5lc1siTElHSFQiICsgaW5kZXhdID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgZGVmaW5lc1siSEVNSUxJR0hUIiArIGluZGV4XSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGRlZmluZXNbIlBPSU5UTElHSFQiICsgaW5kZXhdID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgZGVmaW5lc1siRElSTElHSFQiICsgaW5kZXhdID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgZGVmaW5lc1siU1BPVExJR0hUIiArIGluZGV4XSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGRlZmluZXNbIlNIQURPVyIgKyBpbmRleF0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBk
ZWZpbmVzWyJTSEFET1dQQ0YiICsgaW5kZXhdID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZGVm
aW5lc1siU0hBRE9XUENTUyIgKyBpbmRleF0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBkZWZp
bmVzWyJTSEFET1dQT0lTU09OIiArIGluZGV4XSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRl
ZmluZXNbIlNIQURPV0VTTSIgKyBpbmRleF0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBkZWZp
bmVzWyJTSEFET1dDVUJFIiArIGluZGV4XSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmlu
ZXNbIlNIQURPV0xPV1FVQUxJVFkiICsgaW5kZXhdID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ZGVmaW5lc1siU0hBRE9XTUVESVVNUVVBTElUWSIgKyBpbmRleF0gPSBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgY2FwcyA9IHNjZW5lLmdldEVuZ2luZSgpLmdl
dENhcHMoKTsKKyAgICAgICAgaWYgKGRlZmluZXNbIlNIQURPV0ZMT0FUIl0gPT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgc3RhdGUubmVlZFJlYnVpbGQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIGRlZmluZXNbIlNIQURPV0ZMT0FUIl0gPSBzdGF0ZS5zaGFkb3dFbmFibGVkICYmCisg
ICAgICAgICAgICAoKGNhcHMudGV4dHVyZUZsb2F0UmVuZGVyICYmIGNhcHMudGV4dHVyZUZsb2F0
TGluZWFyRmlsdGVyaW5nKSB8fAorICAgICAgICAgICAgICAgIChjYXBzLnRleHR1cmVIYWxmRmxv
YXRSZW5kZXIgJiYgY2Fwcy50ZXh0dXJlSGFsZkZsb2F0TGluZWFyRmlsdGVyaW5nKSk7CisgICAg
ICAgIGRlZmluZXNbIkxJR0hUTUFQRVhDTFVERUQiXSA9IHN0YXRlLmxpZ2h0bWFwTW9kZTsKKyAg
ICAgICAgaWYgKHN0YXRlLm5lZWRSZWJ1aWxkKSB7CisgICAgICAgICAgICBkZWZpbmVzLnJlYnVp
bGQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdGUubmVlZE5vcm1hbHM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyB0aGUgdW5pZm9ybXMgYW5kIHNhbXBsZXJzIGxp
c3QgdG8gYmUgdXNlZCBpbiB0aGUgZWZmZWN0IChmb3IgYSBzcGVjaWZpYyBsaWdodCkKKyAgICAg
KiBAcGFyYW0gbGlnaHRJbmRleCBkZWZpbmVzIHRoZSBsaWdodCBpbmRleAorICAgICAqIEBwYXJh
bSB1bmlmb3Jtc0xpc3QgVGhlIHVuaWZvcm0gbGlzdAorICAgICAqIEBwYXJhbSBzYW1wbGVyc0xp
c3QgVGhlIHNhbXBsZXIgbGlzdAorICAgICAqIEBwYXJhbSBwcm9qZWN0ZWRMaWdodFRleHR1cmUg
ZGVmaW5lcyBpZiBwcm9qZWN0ZWQgdGV4dHVyZSBtdXN0IGJlIHVzZWQKKyAgICAgKiBAcGFyYW0g
dW5pZm9ybUJ1ZmZlcnNMaXN0IGRlZmluZXMgYW4gb3B0aW9uYWwgbGlzdCBvZiB1bmlmb3JtIGJ1
ZmZlcnMKKyAgICAgKi8KKyAgICBNYXRlcmlhbEhlbHBlci5QcmVwYXJlVW5pZm9ybXNBbmRTYW1w
bGVyc0ZvckxpZ2h0ID0gZnVuY3Rpb24gKGxpZ2h0SW5kZXgsIHVuaWZvcm1zTGlzdCwgc2FtcGxl
cnNMaXN0LCBwcm9qZWN0ZWRMaWdodFRleHR1cmUsIHVuaWZvcm1CdWZmZXJzTGlzdCkgeworICAg
ICAgICBpZiAodW5pZm9ybUJ1ZmZlcnNMaXN0ID09PSB2b2lkIDApIHsgdW5pZm9ybUJ1ZmZlcnNM
aXN0ID0gbnVsbDsgfQorICAgICAgICB1bmlmb3Jtc0xpc3QucHVzaCgidkxpZ2h0RGF0YSIgKyBs
aWdodEluZGV4LCAidkxpZ2h0RGlmZnVzZSIgKyBsaWdodEluZGV4LCAidkxpZ2h0U3BlY3VsYXIi
ICsgbGlnaHRJbmRleCwgInZMaWdodERpcmVjdGlvbiIgKyBsaWdodEluZGV4LCAidkxpZ2h0RmFs
bG9mZiIgKyBsaWdodEluZGV4LCAidkxpZ2h0R3JvdW5kIiArIGxpZ2h0SW5kZXgsICJsaWdodE1h
dHJpeCIgKyBsaWdodEluZGV4LCAic2hhZG93c0luZm8iICsgbGlnaHRJbmRleCwgImRlcHRoVmFs
dWVzIiArIGxpZ2h0SW5kZXgpOworICAgICAgICBpZiAodW5pZm9ybUJ1ZmZlcnNMaXN0KSB7Cisg
ICAgICAgICAgICB1bmlmb3JtQnVmZmVyc0xpc3QucHVzaCgiTGlnaHQiICsgbGlnaHRJbmRleCk7
CisgICAgICAgIH0KKyAgICAgICAgc2FtcGxlcnNMaXN0LnB1c2goInNoYWRvd1NhbXBsZXIiICsg
bGlnaHRJbmRleCk7CisgICAgICAgIHNhbXBsZXJzTGlzdC5wdXNoKCJkZXB0aFNhbXBsZXIiICsg
bGlnaHRJbmRleCk7CisgICAgICAgIGlmIChwcm9qZWN0ZWRMaWdodFRleHR1cmUpIHsKKyAgICAg
ICAgICAgIHNhbXBsZXJzTGlzdC5wdXNoKCJwcm9qZWN0aW9uTGlnaHRTYW1wbGVyIiArIGxpZ2h0
SW5kZXgpOworICAgICAgICAgICAgdW5pZm9ybXNMaXN0LnB1c2goInRleHR1cmVQcm9qZWN0aW9u
TWF0cml4IiArIGxpZ2h0SW5kZXgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBQcmVwYXJlcyB0aGUgdW5pZm9ybXMgYW5kIHNhbXBsZXJzIGxpc3QgdG8gYmUgdXNlZCBpbiB0
aGUgZWZmZWN0CisgICAgICogQHBhcmFtIHVuaWZvcm1zTGlzdE9yT3B0aW9ucyBUaGUgdW5pZm9y
bSBuYW1lcyB0byBwcmVwYXJlIG9yIGFuIEVmZmVjdENyZWF0aW9uT3B0aW9ucyBjb250YWluaW5n
IHRoZSBsaWlzdCBhbmQgZXh0cmEgaW5mb3JtYXRpb24KKyAgICAgKiBAcGFyYW0gc2FtcGxlcnNM
aXN0IFRoZSBzYW1wbGVyIGxpc3QKKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBUaGUgZGVmaW5lcyBo
ZWxwaW5nIGluIHRoZSBsaXN0IGdlbmVyYXRpb24KKyAgICAgKiBAcGFyYW0gbWF4U2ltdWx0YW5l
b3VzTGlnaHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbm91cyBsaWdodCBhbGxvd2Vk
IGluIHRoZSBlZmZlY3QKKyAgICAgKi8KKyAgICBNYXRlcmlhbEhlbHBlci5QcmVwYXJlVW5pZm9y
bXNBbmRTYW1wbGVyc0xpc3QgPSBmdW5jdGlvbiAodW5pZm9ybXNMaXN0T3JPcHRpb25zLCBzYW1w
bGVyc0xpc3QsIGRlZmluZXMsIG1heFNpbXVsdGFuZW91c0xpZ2h0cykgeworICAgICAgICBpZiAo
bWF4U2ltdWx0YW5lb3VzTGlnaHRzID09PSB2b2lkIDApIHsgbWF4U2ltdWx0YW5lb3VzTGlnaHRz
ID0gNDsgfQorICAgICAgICB2YXIgdW5pZm9ybXNMaXN0OworICAgICAgICB2YXIgdW5pZm9ybUJ1
ZmZlcnNMaXN0ID0gbnVsbDsKKyAgICAgICAgaWYgKHVuaWZvcm1zTGlzdE9yT3B0aW9ucy51bmlm
b3Jtc05hbWVzKSB7CisgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHVuaWZvcm1zTGlzdE9yT3B0
aW9uczsKKyAgICAgICAgICAgIHVuaWZvcm1zTGlzdCA9IG9wdGlvbnMudW5pZm9ybXNOYW1lczsK
KyAgICAgICAgICAgIHVuaWZvcm1CdWZmZXJzTGlzdCA9IG9wdGlvbnMudW5pZm9ybUJ1ZmZlcnNO
YW1lczsKKyAgICAgICAgICAgIHNhbXBsZXJzTGlzdCA9IG9wdGlvbnMuc2FtcGxlcnM7CisgICAg
ICAgICAgICBkZWZpbmVzID0gb3B0aW9ucy5kZWZpbmVzOworICAgICAgICAgICAgbWF4U2ltdWx0
YW5lb3VzTGlnaHRzID0gb3B0aW9ucy5tYXhTaW11bHRhbmVvdXNMaWdodHM7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1bmlmb3Jtc0xpc3QgPSB1bmlmb3Jtc0xpc3RP
ck9wdGlvbnM7CisgICAgICAgICAgICBpZiAoIXNhbXBsZXJzTGlzdCkgeworICAgICAgICAgICAg
ICAgIHNhbXBsZXJzTGlzdCA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGZvciAodmFyIGxpZ2h0SW5kZXggPSAwOyBsaWdodEluZGV4IDwgbWF4U2ltdWx0YW5lb3VzTGln
aHRzOyBsaWdodEluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICghZGVmaW5lc1siTElHSFQiICsg
bGlnaHRJbmRleF0pIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuUHJlcGFyZVVuaWZvcm1zQW5kU2FtcGxlcnNGb3JMaWdodChsaWdodElu
ZGV4LCB1bmlmb3Jtc0xpc3QsIHNhbXBsZXJzTGlzdCwgZGVmaW5lc1siUFJPSkVDVEVETElHSFRU
RVhUVVJFIiArIGxpZ2h0SW5kZXhdLCB1bmlmb3JtQnVmZmVyc0xpc3QpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChkZWZpbmVzWyJOVU1fTU9SUEhfSU5GTFVFTkNFUlMiXSkgeworICAgICAgICAg
ICAgdW5pZm9ybXNMaXN0LnB1c2goIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGhlbHBzIGRlY3JlYXNpbmcgcmFuayBieSBy
YW5rIHRoZSBzaGFkb3cgcXVhbGl0eSAoMCBiZWluZyB0aGUgaGlnaGVzdCByYW5rIGFuZCBxdWFs
aXR5KQorICAgICAqIEBwYXJhbSBkZWZpbmVzIFRoZSBkZWZpbmVzIHRvIHVwZGF0ZSB3aGlsZSBm
YWxsaW5nIGJhY2sKKyAgICAgKiBAcGFyYW0gZmFsbGJhY2tzIFRoZSBhdXRob3JpemVkIGVmZmVj
dCBmYWxsYmFja3MKKyAgICAgKiBAcGFyYW0gbWF4U2ltdWx0YW5lb3VzTGlnaHRzIFRoZSBtYXhp
bXVtIG51bWJlciBvZiBsaWdodHMgYWxsb3dlZAorICAgICAqIEBwYXJhbSByYW5rIHRoZSBjdXJy
ZW50IHJhbmsgb2YgdGhlIEVmZmVjdAorICAgICAqIEByZXR1cm5zIFRoZSBuZXdseSBhZmZlY3Rl
ZCByYW5rCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuSGFuZGxlRmFsbGJhY2tzRm9yU2hh
ZG93cyA9IGZ1bmN0aW9uIChkZWZpbmVzLCBmYWxsYmFja3MsIG1heFNpbXVsdGFuZW91c0xpZ2h0
cywgcmFuaykgeworICAgICAgICBpZiAobWF4U2ltdWx0YW5lb3VzTGlnaHRzID09PSB2b2lkIDAp
IHsgbWF4U2ltdWx0YW5lb3VzTGlnaHRzID0gNDsgfQorICAgICAgICBpZiAocmFuayA9PT0gdm9p
ZCAwKSB7IHJhbmsgPSAwOyB9CisgICAgICAgIHZhciBsaWdodEZhbGxiYWNrUmFuayA9IDA7Cisg
ICAgICAgIGZvciAodmFyIGxpZ2h0SW5kZXggPSAwOyBsaWdodEluZGV4IDwgbWF4U2ltdWx0YW5l
b3VzTGlnaHRzOyBsaWdodEluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICghZGVmaW5lc1siTElH
SFQiICsgbGlnaHRJbmRleF0pIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChsaWdodEluZGV4ID4gMCkgeworICAgICAgICAgICAgICAgIGxp
Z2h0RmFsbGJhY2tSYW5rID0gcmFuayArIGxpZ2h0SW5kZXg7CisgICAgICAgICAgICAgICAgZmFs
bGJhY2tzLmFkZEZhbGxiYWNrKGxpZ2h0RmFsbGJhY2tSYW5rLCAiTElHSFQiICsgbGlnaHRJbmRl
eCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWRlZmluZXNbIlNIQURPV1MiXSkg
eworICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzWyJTSEFET1ciICsgbGlnaHRJbmRleF0pIHsK
KyAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKHJhbmssICJTSEFET1ci
ICsgbGlnaHRJbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChk
ZWZpbmVzWyJTSEFET1dQQ0YiICsgbGlnaHRJbmRleF0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ZmFsbGJhY2tzLmFkZEZhbGxiYWNrKHJhbmssICJTSEFET1dQQ0YiICsgbGlnaHRJbmRleCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzWyJTSEFET1dQQ1NT
IiArIGxpZ2h0SW5kZXhdKSB7CisgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxs
YmFjayhyYW5rLCAiU0hBRE9XUENTUyIgKyBsaWdodEluZGV4KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKGRlZmluZXNbIlNIQURPV1BPSVNTT04iICsgbGlnaHRJbmRl
eF0pIHsKKyAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKHJhbmssICJT
SEFET1dQT0lTU09OIiArIGxpZ2h0SW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoZGVmaW5lc1siU0hBRE9XRVNNIiArIGxpZ2h0SW5kZXhdKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjayhyYW5rLCAiU0hBRE9XRVNNIiArIGxp
Z2h0SW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbGlnaHRGYWxsYmFja1JhbmsrKzsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFByZXBhcmVzIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgcmVxdWlyZWQgZm9yIG1vcnBoIHRh
cmdldHMgYWNjb3JkaW5nIHRvIHRoZSBlZmZlY3QgZGVmaW5lcy4KKyAgICAgKiBAcGFyYW0gYXR0
cmlicyBUaGUgY3VycmVudCBsaXN0IG9mIHN1cHBvcnRlZCBhdHRyaWJzCisgICAgICogQHBhcmFt
IG1lc2ggVGhlIG1lc2ggdG8gcHJlcGFyZSB0aGUgbW9ycGggdGFyZ2V0cyBhdHRyaWJ1dGVzIGZv
cgorICAgICAqIEBwYXJhbSBpbmZsdWVuY2VycyBUaGUgbnVtYmVyIG9mIGluZmx1ZW5jZXJzCisg
ICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuUHJlcGFyZUF0dHJpYnV0ZXNGb3JNb3JwaFRhcmdl
dHNJbmZsdWVuY2VycyA9IGZ1bmN0aW9uIChhdHRyaWJzLCBtZXNoLCBpbmZsdWVuY2Vycykgewor
ICAgICAgICB0aGlzLl9UbXBNb3JwaEluZmx1ZW5jZXJzLk5VTV9NT1JQSF9JTkZMVUVOQ0VSUyA9
IGluZmx1ZW5jZXJzOworICAgICAgICB0aGlzLlByZXBhcmVBdHRyaWJ1dGVzRm9yTW9ycGhUYXJn
ZXRzKGF0dHJpYnMsIG1lc2gsIHRoaXMuX1RtcE1vcnBoSW5mbHVlbmNlcnMpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUHJlcGFyZXMgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyByZXF1aXJlZCBm
b3IgbW9ycGggdGFyZ2V0cyBhY2NvcmRpbmcgdG8gdGhlIGVmZmVjdCBkZWZpbmVzLgorICAgICAq
IEBwYXJhbSBhdHRyaWJzIFRoZSBjdXJyZW50IGxpc3Qgb2Ygc3VwcG9ydGVkIGF0dHJpYnMKKyAg
ICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0byBwcmVwYXJlIHRoZSBtb3JwaCB0YXJnZXRzIGF0
dHJpYnV0ZXMgZm9yCisgICAgICogQHBhcmFtIGRlZmluZXMgVGhlIGN1cnJlbnQgRGVmaW5lcyBv
ZiB0aGUgZWZmZWN0CisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuUHJlcGFyZUF0dHJpYnV0
ZXNGb3JNb3JwaFRhcmdldHMgPSBmdW5jdGlvbiAoYXR0cmlicywgbWVzaCwgZGVmaW5lcykgewor
ICAgICAgICB2YXIgaW5mbHVlbmNlcnMgPSBkZWZpbmVzWyJOVU1fTU9SUEhfSU5GTFVFTkNFUlMi
XTsKKyAgICAgICAgaWYgKGluZmx1ZW5jZXJzID4gMCAmJiBfRW5naW5lc19lbmdpbmVTdG9yZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkRW5n
aW5lKSB7CisgICAgICAgICAgICB2YXIgbWF4QXR0cmlidXRlc0NvdW50ID0gX0VuZ2luZXNfZW5n
aW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lU3RvcmUiXS5MYXN0
Q3JlYXRlZEVuZ2luZS5nZXRDYXBzKCkubWF4VmVydGV4QXR0cmliczsKKyAgICAgICAgICAgIHZh
ciBtYW5hZ2VyID0gbWVzaC5tb3JwaFRhcmdldE1hbmFnZXI7CisgICAgICAgICAgICB2YXIgbm9y
bWFsID0gbWFuYWdlciAmJiBtYW5hZ2VyLnN1cHBvcnRzTm9ybWFscyAmJiBkZWZpbmVzWyJOT1JN
QUwiXTsKKyAgICAgICAgICAgIHZhciB0YW5nZW50ID0gbWFuYWdlciAmJiBtYW5hZ2VyLnN1cHBv
cnRzVGFuZ2VudHMgJiYgZGVmaW5lc1siVEFOR0VOVCJdOworICAgICAgICAgICAgdmFyIHV2ID0g
bWFuYWdlciAmJiBtYW5hZ2VyLnN1cHBvcnRzVVZzICYmIGRlZmluZXNbIlVWMSJdOworICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGluZmx1ZW5jZXJzOyBpbmRleCsrKSB7
CisgICAgICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCArIGluZGV4KTsK
KyAgICAgICAgICAgICAgICBpZiAobm9ybWFsKSB7CisgICAgICAgICAgICAgICAgICAgIGF0dHJp
YnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0
ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kICsgaW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAodGFuZ2VudCkgeworICAgICAgICAgICAgICAgICAgICBhdHRyaWJzLnB1
c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVm
ZmVyIl0uVGFuZ2VudEtpbmQgKyBpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICh1dikgeworICAgICAgICAgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVVZL
aW5kICsgIl8iICsgaW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoYXR0cmlicy5sZW5ndGggPiBtYXhBdHRyaWJ1dGVzQ291bnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJd
LkVycm9yKCJDYW5ub3QgYWRkIG1vcmUgdmVydGV4IGF0dHJpYnV0ZXMgZm9yIG1lc2ggIiArIG1l
c2gubmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHJl
cXVpcmVkIGZvciBib25lcyBhY2NvcmRpbmcgdG8gdGhlIGVmZmVjdCBkZWZpbmVzLgorICAgICAq
IEBwYXJhbSBhdHRyaWJzIFRoZSBjdXJyZW50IGxpc3Qgb2Ygc3VwcG9ydGVkIGF0dHJpYnMKKyAg
ICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0byBwcmVwYXJlIHRoZSBib25lcyBhdHRyaWJ1dGVz
IGZvcgorICAgICAqIEBwYXJhbSBkZWZpbmVzIFRoZSBjdXJyZW50IERlZmluZXMgb2YgdGhlIGVm
ZmVjdAorICAgICAqIEBwYXJhbSBmYWxsYmFja3MgVGhlIGN1cnJlbnQgZWZmZmVjdCBmYWxsYmFj
ayBzdHJhdGVneQorICAgICAqLworICAgIE1hdGVyaWFsSGVscGVyLlByZXBhcmVBdHRyaWJ1dGVz
Rm9yQm9uZXMgPSBmdW5jdGlvbiAoYXR0cmlicywgbWVzaCwgZGVmaW5lcywgZmFsbGJhY2tzKSB7
CisgICAgICAgIGlmIChkZWZpbmVzWyJOVU1fQk9ORV9JTkZMVUVOQ0VSUyJdID4gMCkgeworICAg
ICAgICAgICAgZmFsbGJhY2tzLmFkZENQVVNraW5uaW5nRmFsbGJhY2soMCwgbWVzaCk7CisgICAg
ICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCk7CisgICAgICAgICAg
ICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCk7CisgICAgICAgICAgICBpZiAo
ZGVmaW5lc1siTlVNX0JPTkVfSU5GTFVFTkNFUlMiXSA+IDQpIHsKKyAgICAgICAgICAgICAgICBh
dHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kKTsKKyAgICAgICAgICAgICAg
ICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzRXh0cmFLaW5kKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2sgYW5kIHByZXBhcmUg
dGhlIGxpc3Qgb2YgYXR0cmlidXRlcyByZXF1aXJlZCBmb3IgaW5zdGFuY2VzIGFjY29yZGluZyB0
byB0aGUgZWZmZWN0IGRlZmluZXMuCisgICAgICogQHBhcmFtIGF0dHJpYnMgVGhlIGN1cnJlbnQg
bGlzdCBvZiBzdXBwb3J0ZWQgYXR0cmlicworICAgICAqIEBwYXJhbSBkZWZpbmVzIFRoZSBjdXJy
ZW50IE1hdGVyaWFsRGVmaW5lcyBvZiB0aGUgZWZmZWN0CisgICAgICovCisgICAgTWF0ZXJpYWxI
ZWxwZXIuUHJlcGFyZUF0dHJpYnV0ZXNGb3JJbnN0YW5jZXMgPSBmdW5jdGlvbiAoYXR0cmlicywg
ZGVmaW5lcykgeworICAgICAgICBpZiAoZGVmaW5lc1siSU5TVEFOQ0VTIl0pIHsKKyAgICAgICAg
ICAgIHRoaXMuUHVzaEF0dHJpYnV0ZXNGb3JJbnN0YW5jZXMoYXR0cmlicyk7CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHJlcXVp
cmVkIGZvciBpbnN0YW5jZXMgdG8gdGhlIGF0dHJpYnMgYXJyYXkuCisgICAgICogQHBhcmFtIGF0
dHJpYnMgVGhlIGN1cnJlbnQgbGlzdCBvZiBzdXBwb3J0ZWQgYXR0cmlicworICAgICAqLworICAg
IE1hdGVyaWFsSGVscGVyLlB1c2hBdHRyaWJ1dGVzRm9ySW5zdGFuY2VzID0gZnVuY3Rpb24gKGF0
dHJpYnMpIHsKKyAgICAgICAgYXR0cmlicy5wdXNoKCJ3b3JsZDAiKTsKKyAgICAgICAgYXR0cmli
cy5wdXNoKCJ3b3JsZDEiKTsKKyAgICAgICAgYXR0cmlicy5wdXNoKCJ3b3JsZDIiKTsKKyAgICAg
ICAgYXR0cmlicy5wdXNoKCJ3b3JsZDMiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRz
IHRoZSBsaWdodCBzaGFkb3cgaW5mb3JtYXRpb24gdG8gdGhlIGVmZmVjdCBmb3IgdGhlIGdpdmVu
IG1lc2guCisgICAgICogQHBhcmFtIGxpZ2h0IFRoZSBsaWdodCBjb250YWluaW5nIHRoZSBnZW5l
cmF0b3IKKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRoZSBsaWdodHMgYmVsb25ncyB0
bworICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHdlIGFyZSBiaW5kaW5nIHRoZSBpbmZvcm1h
dGlvbiB0byByZW5kZXIKKyAgICAgKiBAcGFyYW0gbGlnaHRJbmRleCBUaGUgbGlnaHQgaW5kZXgg
aW4gdGhlIGVmZmVjdCB1c2VkIHRvIHJlbmRlciB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBlZmZl
Y3QgVGhlIGVmZmVjdCB3ZSBhcmUgYmluZGluZyB0aGUgZGF0YSB0bworICAgICAqLworICAgIE1h
dGVyaWFsSGVscGVyLkJpbmRMaWdodFNoYWRvdyA9IGZ1bmN0aW9uIChsaWdodCwgbWVzaCwgbGln
aHRJbmRleCwgZWZmZWN0KSB7CisgICAgICAgIGlmIChsaWdodC5zaGFkb3dFbmFibGVkICYmIG1l
c2gucmVjZWl2ZVNoYWRvd3MpIHsKKyAgICAgICAgICAgIHZhciBzaGFkb3dHZW5lcmF0b3IgPSBs
aWdodC5nZXRTaGFkb3dHZW5lcmF0b3IoKTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dHZW5lcmF0
b3IpIHsKKyAgICAgICAgICAgICAgICBzaGFkb3dHZW5lcmF0b3IuYmluZFNoYWRvd0xpZ2h0KGxp
Z2h0SW5kZXgsIGVmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIEJpbmRzIHRoZSBsaWdodCBpbmZvcm1hdGlvbiB0byB0aGUgZWZmZWN0Lgor
ICAgICAqIEBwYXJhbSBsaWdodCBUaGUgbGlnaHQgY29udGFpbmluZyB0aGUgZ2VuZXJhdG9yCisg
ICAgICogQHBhcmFtIGVmZmVjdCBUaGUgZWZmZWN0IHdlIGFyZSBiaW5kaW5nIHRoZSBkYXRhIHRv
CisgICAgICogQHBhcmFtIGxpZ2h0SW5kZXggVGhlIGxpZ2h0IGluZGV4IGluIHRoZSBlZmZlY3Qg
dXNlZCB0byByZW5kZXIKKyAgICAgKi8KKyAgICBNYXRlcmlhbEhlbHBlci5CaW5kTGlnaHRQcm9w
ZXJ0aWVzID0gZnVuY3Rpb24gKGxpZ2h0LCBlZmZlY3QsIGxpZ2h0SW5kZXgpIHsKKyAgICAgICAg
bGlnaHQudHJhbnNmZXJUb0VmZmVjdChlZmZlY3QsIGxpZ2h0SW5kZXggKyAiIik7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgbGlnaHRzIGluZm9ybWF0aW9uIGZyb20gdGhlIHNj
ZW5lIHRvIHRoZSBlZmZlY3QgZm9yIHRoZSBnaXZlbiBtZXNoLgorICAgICAqIEBwYXJhbSBsaWdo
dCBMaWdodCB0byBiaW5kCisgICAgICogQHBhcmFtIGxpZ2h0SW5kZXggTGlnaHQgaW5kZXgKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHdoZXJlIHRoZSBsaWdodCBiZWxvbmdzIHRvCisg
ICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggd2UgYXJlIGJpbmRpbmcgdGhlIGluZm9ybWF0aW9u
IHRvIHJlbmRlcgorICAgICAqIEBwYXJhbSBlZmZlY3QgVGhlIGVmZmVjdCB3ZSBhcmUgYmluZGlu
ZyB0aGUgZGF0YSB0bworICAgICAqIEBwYXJhbSB1c2VTcGVjdWxhciBEZWZpbmVzIGlmIHNwZWN1
bGFyIGlzIHN1cHBvcnRlZAorICAgICAqIEBwYXJhbSB1c2VQaHlzaWNhbExpZ2h0RmFsbG9mZiBT
cGVjaWZpZXMgd2hldGhlciB0aGUgbGlnaHQgZmFsbG9mZiBpcyBkZWZpbmVkIHBoeXNpY2FsbHkg
b3Igbm90CisgICAgICogQHBhcmFtIHJlYnVpbGRJblBhcmFsbGVsIFNwZWNpZmllcyB3aGV0aGVy
IHRoZSBzaGFkZXIgaXMgcmVidWlsZGluZyBpbiBwYXJhbGxlbAorICAgICAqLworICAgIE1hdGVy
aWFsSGVscGVyLkJpbmRMaWdodCA9IGZ1bmN0aW9uIChsaWdodCwgbGlnaHRJbmRleCwgc2NlbmUs
IG1lc2gsIGVmZmVjdCwgdXNlU3BlY3VsYXIsIHVzZVBoeXNpY2FsTGlnaHRGYWxsb2ZmLCByZWJ1
aWxkSW5QYXJhbGxlbCkgeworICAgICAgICBpZiAodXNlUGh5c2ljYWxMaWdodEZhbGxvZmYgPT09
IHZvaWQgMCkgeyB1c2VQaHlzaWNhbExpZ2h0RmFsbG9mZiA9IGZhbHNlOyB9CisgICAgICAgIGlm
IChyZWJ1aWxkSW5QYXJhbGxlbCA9PT0gdm9pZCAwKSB7IHJlYnVpbGRJblBhcmFsbGVsID0gZmFs
c2U7IH0KKyAgICAgICAgdmFyIGlBc1N0cmluZyA9IGxpZ2h0SW5kZXgudG9TdHJpbmcoKTsKKyAg
ICAgICAgdmFyIHNjYWxlZEludGVuc2l0eSA9IGxpZ2h0LmdldFNjYWxlZEludGVuc2l0eSgpOwor
ICAgICAgICBpZiAoIXJlYnVpbGRJblBhcmFsbGVsKSB7CisgICAgICAgICAgICBsaWdodC5fdW5p
Zm9ybUJ1ZmZlci5iaW5kVG9FZmZlY3QoZWZmZWN0LCAiTGlnaHQiICsgaUFzU3RyaW5nKTsKKyAg
ICAgICAgfQorICAgICAgICBNYXRlcmlhbEhlbHBlci5CaW5kTGlnaHRQcm9wZXJ0aWVzKGxpZ2h0
LCBlZmZlY3QsIGxpZ2h0SW5kZXgpOworICAgICAgICBsaWdodC5kaWZmdXNlLnNjYWxlVG9SZWYo
c2NhbGVkSW50ZW5zaXR5LCBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJUbXBDb2xvcnMiXS5Db2xvcjNbMF0pOworICAgICAgICBsaWdodC5fdW5pZm9ybUJ1
ZmZlci51cGRhdGVDb2xvcjQoInZMaWdodERpZmZ1c2UiLCBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUbXBDb2xvcnMiXS5Db2xvcjNbMF0sIHVzZVBoeXNp
Y2FsTGlnaHRGYWxsb2ZmID8gbGlnaHQucmFkaXVzIDogbGlnaHQucmFuZ2UsIGlBc1N0cmluZyk7
CisgICAgICAgIGlmICh1c2VTcGVjdWxhcikgeworICAgICAgICAgICAgbGlnaHQuc3BlY3VsYXIu
c2NhbGVUb1JlZihzY2FsZWRJbnRlbnNpdHksIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bIlRtcENvbG9ycyJdLkNvbG9yM1sxXSk7CisgICAgICAgICAgICBs
aWdodC5fdW5pZm9ybUJ1ZmZlci51cGRhdGVDb2xvcjMoInZMaWdodFNwZWN1bGFyIiwgX01hdGhz
X21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVG1wQ29sb3JzIl0uQ29s
b3IzWzFdLCBpQXNTdHJpbmcpOworICAgICAgICB9CisgICAgICAgIC8vIFNoYWRvd3MKKyAgICAg
ICAgaWYgKHNjZW5lLnNoYWRvd3NFbmFibGVkKSB7CisgICAgICAgICAgICB0aGlzLkJpbmRMaWdo
dFNoYWRvdyhsaWdodCwgbWVzaCwgaUFzU3RyaW5nLCBlZmZlY3QpOworICAgICAgICB9CisgICAg
ICAgIGxpZ2h0Ll91bmlmb3JtQnVmZmVyLnVwZGF0ZSgpOworICAgIH07CisgICAgLyoqCisgICAg
ICogQmluZHMgdGhlIGxpZ2h0cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzY2VuZSB0byB0aGUgZWZm
ZWN0IGZvciB0aGUgZ2l2ZW4gbWVzaC4KKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRo
ZSBsaWdodHMgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHdlIGFyZSBi
aW5kaW5nIHRoZSBpbmZvcm1hdGlvbiB0byByZW5kZXIKKyAgICAgKiBAcGFyYW0gZWZmZWN0IFRo
ZSBlZmZlY3Qgd2UgYXJlIGJpbmRpbmcgdGhlIGRhdGEgdG8KKyAgICAgKiBAcGFyYW0gZGVmaW5l
cyBUaGUgZ2VuZXJhdGVkIGRlZmluZXMgZm9yIHRoZSBlZmZlY3QKKyAgICAgKiBAcGFyYW0gbWF4
U2ltdWx0YW5lb3VzTGlnaHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaWdodCB0aGF0IGNhbiBi
ZSBib3VuZCB0byB0aGUgZWZmZWN0CisgICAgICogQHBhcmFtIHVzZVBoeXNpY2FsTGlnaHRGYWxs
b2ZmIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBsaWdodCBmYWxsb2ZmIGlzIGRlZmluZWQgcGh5c2lj
YWxseSBvciBub3QKKyAgICAgKiBAcGFyYW0gcmVidWlsZEluUGFyYWxsZWwgU3BlY2lmaWVzIHdo
ZXRoZXIgdGhlIHNoYWRlciBpcyByZWJ1aWxkaW5nIGluIHBhcmFsbGVsCisgICAgICovCisgICAg
TWF0ZXJpYWxIZWxwZXIuQmluZExpZ2h0cyA9IGZ1bmN0aW9uIChzY2VuZSwgbWVzaCwgZWZmZWN0
LCBkZWZpbmVzLCBtYXhTaW11bHRhbmVvdXNMaWdodHMsIHVzZVBoeXNpY2FsTGlnaHRGYWxsb2Zm
LCByZWJ1aWxkSW5QYXJhbGxlbCkgeworICAgICAgICBpZiAobWF4U2ltdWx0YW5lb3VzTGlnaHRz
ID09PSB2b2lkIDApIHsgbWF4U2ltdWx0YW5lb3VzTGlnaHRzID0gNDsgfQorICAgICAgICBpZiAo
dXNlUGh5c2ljYWxMaWdodEZhbGxvZmYgPT09IHZvaWQgMCkgeyB1c2VQaHlzaWNhbExpZ2h0RmFs
bG9mZiA9IGZhbHNlOyB9CisgICAgICAgIGlmIChyZWJ1aWxkSW5QYXJhbGxlbCA9PT0gdm9pZCAw
KSB7IHJlYnVpbGRJblBhcmFsbGVsID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIGxlbiA9IE1hdGgu
bWluKG1lc2gubGlnaHRTb3VyY2VzLmxlbmd0aCwgbWF4U2ltdWx0YW5lb3VzTGlnaHRzKTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgdmFyIGxp
Z2h0ID0gbWVzaC5saWdodFNvdXJjZXNbaV07CisgICAgICAgICAgICB0aGlzLkJpbmRMaWdodChs
aWdodCwgaSwgc2NlbmUsIG1lc2gsIGVmZmVjdCwgdHlwZW9mIGRlZmluZXMgPT09ICJib29sZWFu
IiA/IGRlZmluZXMgOiBkZWZpbmVzWyJTUEVDVUxBUlRFUk0iXSwgdXNlUGh5c2ljYWxMaWdodEZh
bGxvZmYsIHJlYnVpbGRJblBhcmFsbGVsKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogQmluZHMgdGhlIGZvZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzY2VuZSB0byB0aGUgZWZm
ZWN0IGZvciB0aGUgZ2l2ZW4gbWVzaC4KKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRo
ZSBsaWdodHMgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHdlIGFyZSBi
aW5kaW5nIHRoZSBpbmZvcm1hdGlvbiB0byByZW5kZXIKKyAgICAgKiBAcGFyYW0gZWZmZWN0IFRo
ZSBlZmZlY3Qgd2UgYXJlIGJpbmRpbmcgdGhlIGRhdGEgdG8KKyAgICAgKiBAcGFyYW0gbGluZWFy
U3BhY2UgRGVmaW5lcyBpZiB0aGUgZm9nIGVmZmVjdCBpcyBhcHBsaWVkIGluIGxpbmVhciBzcGFj
ZQorICAgICAqLworICAgIE1hdGVyaWFsSGVscGVyLkJpbmRGb2dQYXJhbWV0ZXJzID0gZnVuY3Rp
b24gKHNjZW5lLCBtZXNoLCBlZmZlY3QsIGxpbmVhclNwYWNlKSB7CisgICAgICAgIGlmIChsaW5l
YXJTcGFjZSA9PT0gdm9pZCAwKSB7IGxpbmVhclNwYWNlID0gZmFsc2U7IH0KKyAgICAgICAgaWYg
KHNjZW5lLmZvZ0VuYWJsZWQgJiYgbWVzaC5hcHBseUZvZyAmJiBzY2VuZS5mb2dNb2RlICE9PSBf
c2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmUiXS5GT0dNT0RFX05PTkUp
IHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDQoInZGb2dJbmZvcyIsIHNjZW5lLmZvZ01v
ZGUsIHNjZW5lLmZvZ1N0YXJ0LCBzY2VuZS5mb2dFbmQsIHNjZW5lLmZvZ0RlbnNpdHkpOworICAg
ICAgICAgICAgLy8gQ29udmVydCBmb2cgY29sb3IgdG8gbGluZWFyIHNwYWNlIGlmIHVzZWQgaW4g
YSBsaW5lYXIgc3BhY2UgY29tcHV0ZWQgc2hhZGVyLgorICAgICAgICAgICAgaWYgKGxpbmVhclNw
YWNlKSB7CisgICAgICAgICAgICAgICAgc2NlbmUuZm9nQ29sb3IudG9MaW5lYXJTcGFjZVRvUmVm
KHRoaXMuX3RlbXBGb2dDb2xvcik7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldENvbG9yMygi
dkZvZ0NvbG9yIiwgdGhpcy5fdGVtcEZvZ0NvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRDb2xvcjMoInZGb2dDb2xvciIs
IHNjZW5lLmZvZ0NvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqCisgICAgICogQmluZHMgdGhlIGJvbmVzIGluZm9ybWF0aW9uIGZyb20gdGhlIG1lc2ggdG8g
dGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB3ZSBhcmUgYmluZGluZyB0
aGUgaW5mb3JtYXRpb24gdG8gcmVuZGVyCisgICAgICogQHBhcmFtIGVmZmVjdCBUaGUgZWZmZWN0
IHdlIGFyZSBiaW5kaW5nIHRoZSBkYXRhIHRvCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIu
QmluZEJvbmVzUGFyYW1ldGVycyA9IGZ1bmN0aW9uIChtZXNoLCBlZmZlY3QpIHsKKyAgICAgICAg
aWYgKCFlZmZlY3QgfHwgIW1lc2gpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgJiYgZWZmZWN0Ll9ib25l
c0NvbXB1dGF0aW9uRm9yY2VkVG9DUFUpIHsKKyAgICAgICAgICAgIG1lc2guY29tcHV0ZUJvbmVz
VXNpbmdTaGFkZXJzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2gudXNlQm9u
ZXMgJiYgbWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgJiYgbWVzaC5za2VsZXRvbikgewor
ICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gbWVzaC5za2VsZXRvbjsKKyAgICAgICAgICAgIGlm
IChza2VsZXRvbi5pc1VzaW5nVGV4dHVyZUZvck1hdHJpY2VzICYmIGVmZmVjdC5nZXRVbmlmb3Jt
SW5kZXgoImJvbmVUZXh0dXJlV2lkdGgiKSA+IC0xKSB7CisgICAgICAgICAgICAgICAgdmFyIGJv
bmVUZXh0dXJlID0gc2tlbGV0b24uZ2V0VHJhbnNmb3JtTWF0cml4VGV4dHVyZShtZXNoKTsKKyAg
ICAgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgiYm9uZVNhbXBsZXIiLCBib25lVGV4dHVy
ZSk7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJib25lVGV4dHVyZVdpZHRoIiwg
NC4wICogKHNrZWxldG9uLmJvbmVzLmxlbmd0aCArIDEpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBtYXRyaWNlcyA9IHNrZWxldG9uLmdl
dFRyYW5zZm9ybU1hdHJpY2VzKG1lc2gpOworICAgICAgICAgICAgICAgIGlmIChtYXRyaWNlcykg
eworICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0TWF0cmljZXMoIm1Cb25lcyIsIG1hdHJp
Y2VzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIEJpbmRzIHRoZSBtb3JwaCB0YXJnZXRzIGluZm9ybWF0aW9uIGZy
b20gdGhlIG1lc2ggdG8gdGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0gYWJzdHJhY3RNZXNoIFRo
ZSBtZXNoIHdlIGFyZSBiaW5kaW5nIHRoZSBpbmZvcm1hdGlvbiB0byByZW5kZXIKKyAgICAgKiBA
cGFyYW0gZWZmZWN0IFRoZSBlZmZlY3Qgd2UgYXJlIGJpbmRpbmcgdGhlIGRhdGEgdG8KKyAgICAg
Ki8KKyAgICBNYXRlcmlhbEhlbHBlci5CaW5kTW9ycGhUYXJnZXRQYXJhbWV0ZXJzID0gZnVuY3Rp
b24gKGFic3RyYWN0TWVzaCwgZWZmZWN0KSB7CisgICAgICAgIHZhciBtYW5hZ2VyID0gYWJzdHJh
Y3RNZXNoLm1vcnBoVGFyZ2V0TWFuYWdlcjsKKyAgICAgICAgaWYgKCFhYnN0cmFjdE1lc2ggfHwg
IW1hbmFnZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlZmZl
Y3Quc2V0RmxvYXRBcnJheSgibW9ycGhUYXJnZXRJbmZsdWVuY2VzIiwgbWFuYWdlci5pbmZsdWVu
Y2VzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRzIHRoZSBsb2dhcml0aG1pYyBkZXB0
aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzY2VuZSB0byB0aGUgZWZmZWN0IGZvciB0aGUgZ2l2ZW4g
ZGVmaW5lcy4KKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBUaGUgZ2VuZXJhdGVkIGRlZmluZXMgdXNl
ZCBpbiB0aGUgZWZmZWN0CisgICAgICogQHBhcmFtIGVmZmVjdCBUaGUgZWZmZWN0IHdlIGFyZSBi
aW5kaW5nIHRoZSBkYXRhIHRvCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB3ZSBhcmUg
d2lsbGluZyB0byByZW5kZXIgd2l0aCBsb2dhcml0aG1pYyBzY2FsZSBmb3IKKyAgICAgKi8KKyAg
ICBNYXRlcmlhbEhlbHBlci5CaW5kTG9nRGVwdGggPSBmdW5jdGlvbiAoZGVmaW5lcywgZWZmZWN0
LCBzY2VuZSkgeworICAgICAgICBpZiAoZGVmaW5lc1siTE9HQVJJVEhNSUNERVBUSCJdKSB7Cisg
ICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImxvZ2FyaXRobWljRGVwdGhDb25zdGFudCIsIDIu
MCAvIChNYXRoLmxvZyhzY2VuZS5hY3RpdmVDYW1lcmEubWF4WiArIDEuMCkgLyBNYXRoLkxOMikp
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgY2xpcCBwbGFu
ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzY2VuZSB0byB0aGUgZWZmZWN0LgorICAgICAqIEBwYXJh
bSBzY2VuZSBUaGUgc2NlbmUgdGhlIGNsaXAgcGxhbmUgaW5mb3JtYXRpb24gYXJlIGV4dHJhY3Rl
ZCBmcm9tCisgICAgICogQHBhcmFtIGVmZmVjdCBUaGUgZWZmZWN0IHdlIGFyZSBiaW5kaW5nIHRo
ZSBkYXRhIHRvCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuQmluZENsaXBQbGFuZSA9IGZ1
bmN0aW9uIChlZmZlY3QsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZS5jbGlwUGxhbmUpIHsK
KyAgICAgICAgICAgIHZhciBjbGlwUGxhbmUgPSBzY2VuZS5jbGlwUGxhbmU7CisgICAgICAgICAg
ICBlZmZlY3Quc2V0RmxvYXQ0KCJ2Q2xpcFBsYW5lIiwgY2xpcFBsYW5lLm5vcm1hbC54LCBjbGlw
UGxhbmUubm9ybWFsLnksIGNsaXBQbGFuZS5ub3JtYWwueiwgY2xpcFBsYW5lLmQpOworICAgICAg
ICB9CisgICAgICAgIGlmIChzY2VuZS5jbGlwUGxhbmUyKSB7CisgICAgICAgICAgICB2YXIgY2xp
cFBsYW5lID0gc2NlbmUuY2xpcFBsYW5lMjsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDQo
InZDbGlwUGxhbmUyIiwgY2xpcFBsYW5lLm5vcm1hbC54LCBjbGlwUGxhbmUubm9ybWFsLnksIGNs
aXBQbGFuZS5ub3JtYWwueiwgY2xpcFBsYW5lLmQpOworICAgICAgICB9CisgICAgICAgIGlmIChz
Y2VuZS5jbGlwUGxhbmUzKSB7CisgICAgICAgICAgICB2YXIgY2xpcFBsYW5lID0gc2NlbmUuY2xp
cFBsYW5lMzsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDQoInZDbGlwUGxhbmUzIiwgY2xp
cFBsYW5lLm5vcm1hbC54LCBjbGlwUGxhbmUubm9ybWFsLnksIGNsaXBQbGFuZS5ub3JtYWwueiwg
Y2xpcFBsYW5lLmQpOworICAgICAgICB9CisgICAgICAgIGlmIChzY2VuZS5jbGlwUGxhbmU0KSB7
CisgICAgICAgICAgICB2YXIgY2xpcFBsYW5lID0gc2NlbmUuY2xpcFBsYW5lNDsKKyAgICAgICAg
ICAgIGVmZmVjdC5zZXRGbG9hdDQoInZDbGlwUGxhbmU0IiwgY2xpcFBsYW5lLm5vcm1hbC54LCBj
bGlwUGxhbmUubm9ybWFsLnksIGNsaXBQbGFuZS5ub3JtYWwueiwgY2xpcFBsYW5lLmQpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBNYXRlcmlhbEhlbHBlci5fVG1wTW9ycGhJbmZsdWVuY2VycyA9
IHsgIk5VTV9NT1JQSF9JTkZMVUVOQ0VSUyI6IDAgfTsKKyAgICBNYXRlcmlhbEhlbHBlci5fdGVt
cEZvZ0NvbG9yID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siQ29sb3IzIl0uQmxhY2soKTsKKyAgICByZXR1cm4gTWF0ZXJpYWxIZWxwZXI7Cit9KCkpOwor
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9tdWx0aU1hdGVyaWFsLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0
ZXJpYWxzL211bHRpTWF0ZXJpYWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE11bHRpTWF0ZXJpYWwgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTXVsdGlNYXRlcmlhbCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gTXVsdGlNYXRlcmlhbDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL21hdGVy
aWFsICovICIuL01hdGVyaWFscy9tYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvdGFncyAqLyAiLi9NaXNjL3RhZ3MudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdHlwZVN0b3JlICovICIuL01p
c2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKy8qKgorICogQSBtdWx0aS1tYXRlcmlhbCBpcyB1
c2VkIHRvIGFwcGx5IGRpZmZlcmVudCBtYXRlcmlhbHMgdG8gZGlmZmVyZW50IHBhcnRzIG9mIHRo
ZSBzYW1lIG9iamVjdCB3aXRob3V0IHRoZSBuZWVkIG9mCisgKiBzZXBhcmF0ZSBtZXNoZXMuIFRo
aXMgY2FuIGJlIHVzZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlcy4KKyAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9tdWx0aV9tYXRlcmlhbHMKKyAqLwordmFyIE11bHRpTWF0
ZXJpYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTXVsdGlNYXRlcmlhbCwgX3N1
cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgTXVsdGkgTWF0ZXJpYWwK
KyAgICAgKiBBIG11bHRpLW1hdGVyaWFsIGlzIHVzZWQgdG8gYXBwbHkgZGlmZmVyZW50IG1hdGVy
aWFscyB0byBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNhbWUgb2JqZWN0IHdpdGhvdXQgdGhlIG5l
ZWQgb2YKKyAgICAgKiBzZXBhcmF0ZSBtZXNoZXMuIFRoaXMgY2FuIGJlIHVzZSB0byBpbXByb3Zl
IHBlcmZvcm1hbmNlcy4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3df
dG8vbXVsdGlfbWF0ZXJpYWxzCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIGlu
IHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSBtYXRl
cmlhbCBiZWxvbmdzIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gTXVsdGlNYXRlcmlhbChuYW1l
LCBzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBz
Y2VuZSwgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgc2NlbmUubXVsdGlNYXRlcmlhbHMucHVzaChf
dGhpcyk7CisgICAgICAgIF90aGlzLnN1Yk1hdGVyaWFscyA9IG5ldyBBcnJheSgpOworICAgICAg
ICBfdGhpcy5fc3RvcmVFZmZlY3RPblN1Yk1lc2hlcyA9IHRydWU7IC8vIG11bHRpbWF0ZXJpYWwg
aXMgY29uc2lkZXJlZCBsaWtlIGEgcHVzaCBtYXRlcmlhbAorICAgICAgICByZXR1cm4gX3RoaXM7
CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdWx0aU1hdGVyaWFsLnByb3RvdHlw
ZSwgInN1Yk1hdGVyaWFscyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3IgU2V0
cyB0aGUgbGlzdCBvZiBNYXRlcmlhbHMgdXNlZCB3aXRoaW4gdGhlIG11bHRpIG1hdGVyaWFsLgor
ICAgICAgICAgKiBUaGV5IG5lZWQgdG8gYmUgb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlIHN1Ym1l
c2hlcyBvcmRlciBpbiB0aGUgYXNzb2NpYXRlZCBtZXNoCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJNYXRlcmlhbHM7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLl9zdWJNYXRlcmlhbHMgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2hvb2tBcnJh
eSh2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEZ1bmN0aW9uIHVz
ZWQgdG8gYWxpZ24gd2l0aCBOb2RlLmdldENoaWxkcmVuKCkKKyAgICAgKiBAcmV0dXJucyB0aGUg
bGlzdCBvZiBNYXRlcmlhbHMgdXNlZCB3aXRoaW4gdGhlIG11bHRpIG1hdGVyaWFsCisgICAgICov
CisgICAgTXVsdGlNYXRlcmlhbC5wcm90b3R5cGUuZ2V0Q2hpbGRyZW4gPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLnN1Yk1hdGVyaWFsczsKKyAgICB9OworICAgIE11bHRpTWF0
ZXJpYWwucHJvdG90eXBlLl9ob29rQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHsKKyAgICAgICAg
dmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIG9sZFB1c2ggPSBhcnJheS5wdXNoOworICAg
ICAgICBhcnJheS5wdXNoID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGl0ZW1zID0g
W107CisgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsg
X2krKykgeworICAgICAgICAgICAgICAgIGl0ZW1zW19pXSA9IGFyZ3VtZW50c1tfaV07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2xkUHVzaC5hcHBseShhcnJheSwg
aXRlbXMpOworICAgICAgICAgICAgX3RoaXMuX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGly
dHkoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07CisgICAgICAgIHZh
ciBvbGRTcGxpY2UgPSBhcnJheS5zcGxpY2U7CisgICAgICAgIGFycmF5LnNwbGljZSA9IGZ1bmN0
aW9uIChpbmRleCwgZGVsZXRlQ291bnQpIHsKKyAgICAgICAgICAgIHZhciBkZWxldGVkID0gb2xk
U3BsaWNlLmFwcGx5KGFycmF5LCBbaW5kZXgsIGRlbGV0ZUNvdW50XSk7CisgICAgICAgICAgICBf
dGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSgpOworICAgICAgICAgICAgcmV0
dXJuIGRlbGV0ZWQ7CisgICAgICAgIH07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgb25l
IG9mIHRoZSBzdWJtYXRlcmlhbCBieSBpdHMgaW5kZXggaW4gdGhlIHN1Ym1hdGVyaWFscyBhcnJh
eQorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggdG8gbG9vayB0aGUgc3ViIG1hdGVyaWFs
IGF0CisgICAgICogQHJldHVybnMgVGhlIE1hdGVyaWFsIGlmIHRoZSBpbmRleCBoYXMgYmVlbiBk
ZWZpbmVkCisgICAgICovCisgICAgTXVsdGlNYXRlcmlhbC5wcm90b3R5cGUuZ2V0U3ViTWF0ZXJp
YWwgPSBmdW5jdGlvbiAoaW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+
PSB0aGlzLnN1Yk1hdGVyaWFscy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmdl
dFNjZW5lKCkuZGVmYXVsdE1hdGVyaWFsOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz
LnN1Yk1hdGVyaWFsc1tpbmRleF07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGxp
c3Qgb2YgYWN0aXZlIHRleHR1cmVzIGZvciB0aGUgd2hvbGUgc3ViIG1hdGVyaWFscyBsaXN0Lgor
ICAgICAqIEByZXR1cm5zIEFsbCB0aGUgdGV4dHVyZXMgdGhhdCB3aWxsIGJlIHVzZWQgZHVyaW5n
IHRoZSByZW5kZXJpbmcKKyAgICAgKi8KKyAgICBNdWx0aU1hdGVyaWFsLnByb3RvdHlwZS5nZXRB
Y3RpdmVUZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF9hOworICAgICAgICBy
ZXR1cm4gKF9hID0gX3N1cGVyLnByb3RvdHlwZS5nZXRBY3RpdmVUZXh0dXJlcy5jYWxsKHRoaXMp
KS5jb25jYXQuYXBwbHkoX2EsIHRoaXMuc3ViTWF0ZXJpYWxzLm1hcChmdW5jdGlvbiAoc3ViTWF0
ZXJpYWwpIHsKKyAgICAgICAgICAgIGlmIChzdWJNYXRlcmlhbCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBzdWJNYXRlcmlhbC5nZXRBY3RpdmVUZXh0dXJlcygpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICAg
ICAgfQorICAgICAgICB9KSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJy
ZW50IGNsYXNzIG5hbWUgb2YgdGhlIG1hdGVyaWFsIGUuZy4gIk11bHRpTWF0ZXJpYWwiCisgICAg
ICogTWFpbmx5IHVzZSBpbiBzZXJpYWxpemF0aW9uLgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFz
cyBuYW1lCisgICAgICovCisgICAgTXVsdGlNYXRlcmlhbC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIk11bHRpTWF0ZXJpYWwiOworICAgIH07
CisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBtYXRlcmlhbCBpcyByZWFkeSB0byByZW5k
ZXIgdGhlIHJlcXVlc3RlZCBzdWIgbWVzaAorICAgICAqIEBwYXJhbSBtZXNoIERlZmluZSB0aGUg
bWVzaCB0aGUgc3VibWVzaCBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIHN1Yk1lc2ggRGVmaW5l
IHRoZSBzdWIgbWVzaCB0byBsb29rIHJlYWR5bmVzcyBmb3IKKyAgICAgKiBAcGFyYW0gdXNlSW5z
dGFuY2VzIERlZmluZSB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0ZXJpYWwgaXMgdXNlZCB3aXRoIGlu
c3RhbmNlcworICAgICAqIEByZXR1cm5zIHRydWUgaWYgcmVhZHksIG90aGVyd2lzZSBmYWxzZQor
ICAgICAqLworICAgIE11bHRpTWF0ZXJpYWwucHJvdG90eXBlLmlzUmVhZHlGb3JTdWJNZXNoID0g
ZnVuY3Rpb24gKG1lc2gsIHN1Yk1lc2gsIHVzZUluc3RhbmNlcykgeworICAgICAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5zdWJNYXRlcmlhbHMubGVuZ3RoOyBpbmRleCsrKSB7
CisgICAgICAgICAgICB2YXIgc3ViTWF0ZXJpYWwgPSB0aGlzLnN1Yk1hdGVyaWFsc1tpbmRleF07
CisgICAgICAgICAgICBpZiAoc3ViTWF0ZXJpYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3Vi
TWF0ZXJpYWwuX3N0b3JlRWZmZWN0T25TdWJNZXNoZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFzdWJNYXRlcmlhbC5pc1JlYWR5Rm9yU3ViTWVzaChtZXNoLCBzdWJNZXNoLCB1c2VJbnN0
YW5jZXMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghc3ViTWF0ZXJpYWwuaXNSZWFkeShtZXNoKSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBjdXJyZW50IG1hdGVyaWFsIGFuZCBpdHMgcmVsYXRl
ZCBzdWIgbWF0ZXJpYWxzCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRo
ZSBuZXdseSBjbG9uZWQgbWF0ZXJpYWwKKyAgICAgKiBAcGFyYW0gY2xvbmVDaGlsZHJlbiBEZWZp
bmUgaWYgc3VibWF0ZXJpYWwgd2lsbCBiZSBjbG9uZWQgb3Igc2hhcmVkIHdpdGggdGhlIHBhcmVu
dCBpbnN0YW5jZQorICAgICAqIEByZXR1cm5zIHRoZSBjbG9uZWQgbWF0ZXJpYWwKKyAgICAgKi8K
KyAgICBNdWx0aU1hdGVyaWFsLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIChuYW1lLCBjbG9u
ZUNoaWxkcmVuKSB7CisgICAgICAgIHZhciBuZXdNdWx0aU1hdGVyaWFsID0gbmV3IE11bHRpTWF0
ZXJpYWwobmFtZSwgdGhpcy5nZXRTY2VuZSgpKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAw
OyBpbmRleCA8IHRoaXMuc3ViTWF0ZXJpYWxzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgdmFyIHN1Yk1hdGVyaWFsID0gbnVsbDsKKyAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhp
cy5zdWJNYXRlcmlhbHNbaW5kZXhdOworICAgICAgICAgICAgaWYgKGNsb25lQ2hpbGRyZW4gJiYg
Y3VycmVudCkgeworICAgICAgICAgICAgICAgIHN1Yk1hdGVyaWFsID0gY3VycmVudC5jbG9uZShu
YW1lICsgIi0iICsgY3VycmVudC5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHN1Yk1hdGVyaWFsID0gdGhpcy5zdWJNYXRlcmlhbHNbaW5k
ZXhdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV3TXVsdGlNYXRlcmlhbC5zdWJNYXRl
cmlhbHMucHVzaChzdWJNYXRlcmlhbCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ld011
bHRpTWF0ZXJpYWw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBtYXRl
cmlhbHMgaW50byBhIEpTT04gcmVwcmVzZW50YXRpb24uCisgICAgICogQHJldHVybnMgdGhlIEpT
T04gcmVwcmVzZW50YXRpb24KKyAgICAgKi8KKyAgICBNdWx0aU1hdGVyaWFsLnByb3RvdHlwZS5z
ZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0
ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubmFtZSA9IHRoaXMubmFtZTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5pZCA9IHRoaXMuaWQ7CisgICAgICAgIGlmIChfTWlz
Y190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRhZ3MiXSkgeworICAgICAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC50YWdzID0gX01pc2NfdGFnc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJUYWdzIl0uR2V0VGFncyh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0Lm1hdGVyaWFscyA9IFtdOworICAgICAgICBmb3IgKHZhciBtYXRJ
bmRleCA9IDA7IG1hdEluZGV4IDwgdGhpcy5zdWJNYXRlcmlhbHMubGVuZ3RoOyBtYXRJbmRleCsr
KSB7CisgICAgICAgICAgICB2YXIgc3ViTWF0ID0gdGhpcy5zdWJNYXRlcmlhbHNbbWF0SW5kZXhd
OworICAgICAgICAgICAgaWYgKHN1Yk1hdCkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QubWF0ZXJpYWxzLnB1c2goc3ViTWF0LmlkKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF0ZXJp
YWxzLnB1c2gobnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlIHRo
ZSBtYXRlcmlhbCBhbmQgcmVsZWFzZSBpdHMgYXNzb2NpYXRlZCByZXNvdXJjZXMKKyAgICAgKiBA
cGFyYW0gZm9yY2VEaXNwb3NlRWZmZWN0IERlZmluZSBpZiB3ZSB3YW50IHRvIGZvcmNlIGRpc3Bv
c2luZyB0aGUgYXNzb2NpYXRlZCBlZmZlY3QgKGlmIGZhbHNlIHRoZSBzaGFkZXIgaXMgbm90IHJl
bGVhc2VkIGFuZCBjb3VsZCBiZSByZXVzZSBsYXRlciBvbikKKyAgICAgKiBAcGFyYW0gZm9yY2VE
aXNwb3NlVGV4dHVyZXMgRGVmaW5lIGlmIHdlIHdhbnQgdG8gZm9yY2UgZGlzcG9zaW5nIHRoZSBh
c3NvY2lhdGVkIHRleHR1cmVzIChpZiBmYWxzZSwgdGhleSB3aWxsIG5vdCBiZSBkaXNwb3NlZCBh
bmQgY2FuIHN0aWxsIGJlIHVzZSBlbHNld2hlcmUgaW4gdGhlIGFwcCkKKyAgICAgKiBAcGFyYW0g
Zm9yY2VEaXNwb3NlQ2hpbGRyZW4gRGVmaW5lIGlmIHdlIHdhbnQgdG8gZm9yY2UgZGlzcG9zaW5n
IHRoZSBhc3NvY2lhdGVkIHN1Ym1hdGVyaWFscyAoaWYgZmFsc2UsIHRoZXkgd2lsbCBub3QgYmUg
ZGlzcG9zZWQgYW5kIGNhbiBzdGlsbCBiZSB1c2UgZWxzZXdoZXJlIGluIHRoZSBhcHApCisgICAg
ICovCisgICAgTXVsdGlNYXRlcmlhbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChmb3Jj
ZURpc3Bvc2VFZmZlY3QsIGZvcmNlRGlzcG9zZVRleHR1cmVzLCBmb3JjZURpc3Bvc2VDaGlsZHJl
bikgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7CisgICAgICAgIGlmICgh
c2NlbmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9y
Y2VEaXNwb3NlQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCB0aGlzLnN1Yk1hdGVyaWFscy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAg
ICB2YXIgc3ViTWF0ZXJpYWwgPSB0aGlzLnN1Yk1hdGVyaWFsc1tpbmRleF07CisgICAgICAgICAg
ICAgICAgaWYgKHN1Yk1hdGVyaWFsKSB7CisgICAgICAgICAgICAgICAgICAgIHN1Yk1hdGVyaWFs
LmRpc3Bvc2UoZm9yY2VEaXNwb3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBpbmRl
eCA9IHNjZW5lLm11bHRpTWF0ZXJpYWxzLmluZGV4T2YodGhpcyk7CisgICAgICAgIGlmIChpbmRl
eCA+PSAwKSB7CisgICAgICAgICAgICBzY2VuZS5tdWx0aU1hdGVyaWFscy5zcGxpY2UoaW5kZXgs
IDEpOworICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRo
aXMsIGZvcmNlRGlzcG9zZUVmZmVjdCwgZm9yY2VEaXNwb3NlVGV4dHVyZXMpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIE11bHRpTWF0ZXJpYWwgZnJvbSBwYXJzZWQgTXVsdGlN
YXRlcmlhbCBkYXRhLgorICAgICAqIEBwYXJhbSBwYXJzZWRNdWx0aU1hdGVyaWFsIGRlZmluZXMg
cGFyc2VkIE11bHRpTWF0ZXJpYWwgZGF0YS4KKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0
aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIGEgbmV3IE11bHRpTWF0ZXJpYWwKKyAg
ICAgKi8KKyAgICBNdWx0aU1hdGVyaWFsLlBhcnNlTXVsdGlNYXRlcmlhbCA9IGZ1bmN0aW9uIChw
YXJzZWRNdWx0aU1hdGVyaWFsLCBzY2VuZSkgeworICAgICAgICB2YXIgbXVsdGlNYXRlcmlhbCA9
IG5ldyBNdWx0aU1hdGVyaWFsKHBhcnNlZE11bHRpTWF0ZXJpYWwubmFtZSwgc2NlbmUpOworICAg
ICAgICBtdWx0aU1hdGVyaWFsLmlkID0gcGFyc2VkTXVsdGlNYXRlcmlhbC5pZDsKKyAgICAgICAg
aWYgKF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVGFncyJdKSB7Cisg
ICAgICAgICAgICBfTWlzY190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRhZ3Mi
XS5BZGRUYWdzVG8obXVsdGlNYXRlcmlhbCwgcGFyc2VkTXVsdGlNYXRlcmlhbC50YWdzKTsKKyAg
ICAgICAgfQorICAgICAgICBmb3IgKHZhciBtYXRJbmRleCA9IDA7IG1hdEluZGV4IDwgcGFyc2Vk
TXVsdGlNYXRlcmlhbC5tYXRlcmlhbHMubGVuZ3RoOyBtYXRJbmRleCsrKSB7CisgICAgICAgICAg
ICB2YXIgc3ViTWF0SWQgPSBwYXJzZWRNdWx0aU1hdGVyaWFsLm1hdGVyaWFsc1ttYXRJbmRleF07
CisgICAgICAgICAgICBpZiAoc3ViTWF0SWQpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
c2FtZSBtdWx0aW1hdGVyaWFsIGlzIGxvYWRlZCB0d2ljZSwgdGhlIDJuZCBtdWx0aW1hdGVyaWFs
IG5lZWRzIHRvIHJlZmVyZW5jZSB0aGUgbGF0ZXN0IG1hdGVyaWFsIGJ5IHRoYXQgaWQgd2hpY2gK
KyAgICAgICAgICAgICAgICAvLyBpcyB3aHkgdGhpcyBsb29rdXAgc2hvdWxkIHVzZSBnZXRMYXN0
TWF0ZXJpYWxCeUlEIGluc3RlYWQgb2YgZ2V0TWF0ZXJpYWxCeUlECisgICAgICAgICAgICAgICAg
bXVsdGlNYXRlcmlhbC5zdWJNYXRlcmlhbHMucHVzaChzY2VuZS5nZXRMYXN0TWF0ZXJpYWxCeUlE
KHN1Yk1hdElkKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBtdWx0aU1hdGVyaWFsLnN1Yk1hdGVyaWFscy5wdXNoKG51bGwpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBtdWx0aU1hdGVyaWFsOworICAgIH07Cisg
ICAgcmV0dXJuIE11bHRpTWF0ZXJpYWw7Cit9KF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTWF0ZXJpYWwiXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1si
QkFCWUxPTi5NdWx0aU1hdGVyaWFsIl0gPSBNdWx0aU1hdGVyaWFsOworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NYXRlcmlhbHMvcHVzaE1hdGVyaWFsLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvcHVzaE1hdGVyaWFs
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IFB1c2hNYXRlcmlhbCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJQdXNoTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFB1c2hNYXRlcmlh
bDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rv
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGVyaWFscy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKworCisKKy8q
KgorICogQmFzZSBjbGFzcyBvZiBtYXRlcmlhbHMgd29ya2luZyBpbiBwdXNoIG1vZGUgaW4gYmFi
eWxvbiBKUworICogQGhpZGRlbgorICovCit2YXIgUHVzaE1hdGVyaWFsID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZXh0ZW5kcyJdKFB1c2hNYXRlcmlhbCwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBQ
dXNoTWF0ZXJpYWwobmFtZSwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNh
bGwodGhpcywgbmFtZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9ub3JtYWxNYXRy
aXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
Ik1hdHJpeCJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29s
ZWFuIGluZGljYXRpbmcgdGhhdCB0aGUgbWF0ZXJpYWwgaXMgYWxsb3dlZCB0byBkbyBzaGFkZXIg
aG90IHN3YXBwaW5nLgorICAgICAgICAgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIG1hdGVyaWFsIGNh
biBrZWVwIHVzaW5nIGEgcHJldmlvdXMgc2hhZGVyIHdoaWxlIGEgbmV3IG9uZSBpcyBiZWluZyBj
b21waWxlZC4KKyAgICAgICAgICogVGhpcyBpcyBtb3N0bHkgdXNlZCB3aGVuIHNoYWRlciBwYXJh
bGxlbCBjb21waWxhdGlvbiBpcyBzdXBwb3J0ZWQgKHRydWUgYnkgZGVmYXVsdCkKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLmFsbG93U2hhZGVySG90U3dhcHBpbmcgPSB0cnVlOworICAgICAg
ICBfdGhpcy5fc3RvcmVFZmZlY3RPblN1Yk1lc2hlcyA9IHRydWU7CisgICAgICAgIHJldHVybiBf
dGhpczsKKyAgICB9CisgICAgUHVzaE1hdGVyaWFsLnByb3RvdHlwZS5nZXRFZmZlY3QgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVFZmZlY3Q7CisgICAgfTsKKyAg
ICBQdXNoTWF0ZXJpYWwucHJvdG90eXBlLmlzUmVhZHkgPSBmdW5jdGlvbiAobWVzaCwgdXNlSW5z
dGFuY2VzKSB7CisgICAgICAgIGlmICghbWVzaCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGlmICghbWVzaC5zdWJNZXNoZXMgfHwgbWVzaC5zdWJNZXNo
ZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpcy5pc1JlYWR5Rm9yU3ViTWVzaChtZXNoLCBtZXNoLnN1Yk1lc2hl
c1swXSwgdXNlSW5zdGFuY2VzKTsKKyAgICB9OworICAgIC8qKgorICAgICogQmluZHMgdGhlIGdp
dmVuIHdvcmxkIG1hdHJpeCB0byB0aGUgYWN0aXZlIGVmZmVjdAorICAgICoKKyAgICAqIEBwYXJh
bSB3b3JsZCB0aGUgbWF0cml4IHRvIGJpbmQKKyAgICAqLworICAgIFB1c2hNYXRlcmlhbC5wcm90
b3R5cGUuYmluZE9ubHlXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uICh3b3JsZCkgeworICAgICAgICB0
aGlzLl9hY3RpdmVFZmZlY3Quc2V0TWF0cml4KCJ3b3JsZCIsIHdvcmxkKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEJpbmRzIHRoZSBnaXZlbiBub3JtYWwgbWF0cml4IHRvIHRoZSBhY3RpdmUg
ZWZmZWN0CisgICAgICoKKyAgICAgKiBAcGFyYW0gbm9ybWFsTWF0cml4IHRoZSBtYXRyaXggdG8g
YmluZAorICAgICAqLworICAgIFB1c2hNYXRlcmlhbC5wcm90b3R5cGUuYmluZE9ubHlOb3JtYWxN
YXRyaXggPSBmdW5jdGlvbiAobm9ybWFsTWF0cml4KSB7CisgICAgICAgIHRoaXMuX2FjdGl2ZUVm
ZmVjdC5zZXRNYXRyaXgoIm5vcm1hbE1hdHJpeCIsIG5vcm1hbE1hdHJpeCk7CisgICAgfTsKKyAg
ICBQdXNoTWF0ZXJpYWwucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAod29ybGQsIG1lc2gpIHsK
KyAgICAgICAgaWYgKCFtZXNoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5iaW5kRm9yU3ViTWVzaCh3b3JsZCwgbWVzaCwgbWVzaC5zdWJNZXNoZXNbMF0p
OworICAgIH07CisgICAgUHVzaE1hdGVyaWFsLnByb3RvdHlwZS5fYWZ0ZXJCaW5kID0gZnVuY3Rp
b24gKG1lc2gsIGVmZmVjdCkgeworICAgICAgICBpZiAoZWZmZWN0ID09PSB2b2lkIDApIHsgZWZm
ZWN0ID0gbnVsbDsgfQorICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9hZnRlckJpbmQuY2FsbCh0
aGlzLCBtZXNoKTsKKyAgICAgICAgdGhpcy5nZXRTY2VuZSgpLl9jYWNoZWRFZmZlY3QgPSBlZmZl
Y3Q7CisgICAgfTsKKyAgICBQdXNoTWF0ZXJpYWwucHJvdG90eXBlLl9tdXN0UmViaW5kID0gZnVu
Y3Rpb24gKHNjZW5lLCBlZmZlY3QsIHZpc2liaWxpdHkpIHsKKyAgICAgICAgaWYgKHZpc2liaWxp
dHkgPT09IHZvaWQgMCkgeyB2aXNpYmlsaXR5ID0gMTsgfQorICAgICAgICByZXR1cm4gc2NlbmUu
aXNDYWNoZWRNYXRlcmlhbEludmFsaWQodGhpcywgZWZmZWN0LCB2aXNpYmlsaXR5KTsKKyAgICB9
OworICAgIHJldHVybiBQdXNoTWF0ZXJpYWw7Cit9KF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWF0ZXJpYWwiXSkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL01hdGVyaWFscy9zaGFkZXJNYXRlcmlhbC50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvc2hhZGVyTWF0
ZXJpYWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBTaGFkZXJNYXRlcmlhbCAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTaGFkZXJNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
U2hhZGVyTWF0ZXJpYWw7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2Rl
Y29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9idWZmZXIgKi8gIi4v
TWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
VGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJp
YWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0
ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vbWF0ZXJpYWxIZWxwZXIgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVy
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lZmZlY3QgKi8gIi4vTWF0
ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRlcmlhbF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9t
YXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0
b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworCisKKworCisKKwor
CisKKworCisvKioKKyAqIFRoZSBTaGFkZXJNYXRlcmlhbCBvYmplY3QgaGFzIHRoZSBuZWNlc3Nh
cnkgbWV0aG9kcyB0byBwYXNzIGRhdGEgZnJvbSB5b3VyIHNjZW5lIHRvIHRoZSBWZXJ0ZXggYW5k
IEZyYWdtZW50IFNoYWRlcnMgYW5kIHJldHVybnMgYSBtYXRlcmlhbCB0aGF0IGNhbiBiZSBhcHBs
aWVkIHRvIGFueSBtZXNoLgorICoKKyAqIFRoaXMgcmV0dXJuZWQgbWF0ZXJpYWwgZWZmZWN0cyBo
b3cgdGhlIG1lc2ggd2lsbCBsb29rIGJhc2VkIG9uIHRoZSBjb2RlIGluIHRoZSBzaGFkZXJzLgor
ICoKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9zaGFkZXJfbWF0ZXJp
YWwKKyAqLwordmFyIFNoYWRlck1hdGVyaWFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9z
dXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5k
cyJdKFNoYWRlck1hdGVyaWFsLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRl
IGEgbmV3IHNoYWRlciBtYXRlcmlhbC4KKyAgICAgKiBUaGUgU2hhZGVyTWF0ZXJpYWwgb2JqZWN0
IGhhcyB0aGUgbmVjZXNzYXJ5IG1ldGhvZHMgdG8gcGFzcyBkYXRhIGZyb20geW91ciBzY2VuZSB0
byB0aGUgVmVydGV4IGFuZCBGcmFnbWVudCBTaGFkZXJzIGFuZCByZXR1cm5zIGEgbWF0ZXJpYWwg
dGhhdCBjYW4gYmUgYXBwbGllZCB0byBhbnkgbWVzaC4KKyAgICAgKiBUaGlzIHJldHVybmVkIG1h
dGVyaWFsIGVmZmVjdHMgaG93IHRoZSBtZXNoIHdpbGwgbG9vayBiYXNlZCBvbiB0aGUgY29kZSBp
biB0aGUgc2hhZGVycy4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3df
dG8vc2hhZGVyX21hdGVyaWFsCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9m
IHRoZSBtYXRlcmlhbCBpbiB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRo
ZSBzY2VuZSB0aGUgbWF0ZXJpYWwgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBzaGFkZXJQYXRo
IERlZmluZXMgIHRoZSByb3V0ZSB0byB0aGUgc2hhZGVyIGNvZGUgaW4gb25lIG9mIHRocmVlIHdh
eXM6CisgICAgICogICogb2JqZWN0OiB7IHZlcnRleDogImN1c3RvbSIsIGZyYWdtZW50OiAiY3Vz
dG9tIiB9LCB1c2VkIHdpdGggRWZmZWN0LlNoYWRlcnNTdG9yZVsiY3VzdG9tVmVydGV4U2hhZGVy
Il0gYW5kIEVmZmVjdC5TaGFkZXJzU3RvcmVbImN1c3RvbUZyYWdtZW50U2hhZGVyIl0KKyAgICAg
KiAgKiBvYmplY3Q6IHsgdmVydGV4RWxlbWVudDogInZlcnRleFNoYWRlckNvZGUiLCBmcmFnbWVu
dEVsZW1lbnQ6ICJmcmFnbWVudFNoYWRlckNvZGUiIH0sIHVzZWQgd2l0aCBzaGFkZXIgY29kZSBp
biBzY3JpcHQgdGFncworICAgICAqICAqIG9iamVjdDogeyB2ZXJ0ZXhTb3VyY2U6ICJ2ZXJ0ZXgg
c2hhZGVyIGNvZGUgc3RyaW5nIiwgZnJhZ21lbnRTb3VyY2U6ICJmcmFnbWVudCBzaGFkZXIgY29k
ZSBzdHJpbmciIH0gdXNpbmcgd2l0aCBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIHNoYWRlcnMgY29k
ZQorICAgICAqICAqIHN0cmluZzogIi4vQ09NTU9OX05BTUUiLCB1c2VkIHdpdGggZXh0ZXJuYWwg
ZmlsZXMgQ09NTU9OX05BTUUudmVydGV4LmZ4IGFuZCBDT01NT05fTkFNRS5mcmFnbWVudC5meCBp
biBpbmRleC5odG1sIGZvbGRlci4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBEZWZpbmUgdGhlIG9w
dGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIHNoYWRlcgorICAgICAqLworICAgIGZ1bmN0aW9uIFNo
YWRlck1hdGVyaWFsKG5hbWUsIHNjZW5lLCBzaGFkZXJQYXRoLCBvcHRpb25zKSB7CisgICAgICAg
IGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9CisgICAgICAgIHZhciBf
dGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICBf
dGhpcy5fdGV4dHVyZXMgPSB7fTsKKyAgICAgICAgX3RoaXMuX3RleHR1cmVBcnJheXMgPSB7fTsK
KyAgICAgICAgX3RoaXMuX2Zsb2F0cyA9IHt9OworICAgICAgICBfdGhpcy5faW50cyA9IHt9Owor
ICAgICAgICBfdGhpcy5fZmxvYXRzQXJyYXlzID0ge307CisgICAgICAgIF90aGlzLl9jb2xvcnMz
ID0ge307CisgICAgICAgIF90aGlzLl9jb2xvcnMzQXJyYXlzID0ge307CisgICAgICAgIF90aGlz
Ll9jb2xvcnM0ID0ge307CisgICAgICAgIF90aGlzLl9jb2xvcnM0QXJyYXlzID0ge307CisgICAg
ICAgIF90aGlzLl92ZWN0b3JzMiA9IHt9OworICAgICAgICBfdGhpcy5fdmVjdG9yczMgPSB7fTsK
KyAgICAgICAgX3RoaXMuX3ZlY3RvcnM0ID0ge307CisgICAgICAgIF90aGlzLl9tYXRyaWNlcyA9
IHt9OworICAgICAgICBfdGhpcy5fbWF0cmljZXMzeDMgPSB7fTsKKyAgICAgICAgX3RoaXMuX21h
dHJpY2VzMngyID0ge307CisgICAgICAgIF90aGlzLl92ZWN0b3JzMkFycmF5cyA9IHt9OworICAg
ICAgICBfdGhpcy5fdmVjdG9yczNBcnJheXMgPSB7fTsKKyAgICAgICAgX3RoaXMuX3ZlY3RvcnM0
QXJyYXlzID0ge307CisgICAgICAgIF90aGlzLl9jYWNoZWRXb3JsZFZpZXdNYXRyaXggPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJd
KCk7CisgICAgICAgIF90aGlzLl9jYWNoZWRXb3JsZFZpZXdQcm9qZWN0aW9uTWF0cml4ID0gbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNYXRyaXgi
XSgpOworICAgICAgICBfdGhpcy5fc2hhZGVyUGF0aCA9IHNoYWRlclBhdGg7CisgICAgICAgIF90
aGlzLl9vcHRpb25zID0gdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19hc3Np
Z24iXSh7IG5lZWRBbHBoYUJsZW5kaW5nOiBmYWxzZSwgbmVlZEFscGhhVGVzdGluZzogZmFsc2Us
IGF0dHJpYnV0ZXM6IFsicG9zaXRpb24iLCAibm9ybWFsIiwgInV2Il0sIHVuaWZvcm1zOiBbIndv
cmxkVmlld1Byb2plY3Rpb24iXSwgdW5pZm9ybUJ1ZmZlcnM6IFtdLCBzYW1wbGVyczogW10sIGRl
ZmluZXM6IFtdIH0sIG9wdGlvbnMpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUsICJvcHRpb25z
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNv
bXBpbGUgdGhlIHNoYWRlci4KKyAgICAgICAgICogVGhleSBjYW4gYmUgbW9kaWZpZWQgdG8gdHJp
Z2dlciBhIG5ldyBjb21waWxhdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9uczsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lIG9mIHRoZSBt
YXRlcmlhbCBlLmcuICJTaGFkZXJNYXRlcmlhbCIKKyAgICAgKiBNYWlubHkgdXNlIGluIHNlcmlh
bGl6YXRpb24uCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBT
aGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIlNoYWRlck1hdGVyaWFsIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNw
ZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwgd2lsbCByZXF1aXJlIGFscGhhIGJsZW5kaW5nCisgICAg
ICogQHJldHVybnMgYSBib29sZWFuIHNwZWNpZnlpbmcgaWYgYWxwaGEgYmxlbmRpbmcgaXMgbmVl
ZGVkCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLm5lZWRBbHBoYUJsZW5k
aW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gKHRoaXMuYWxwaGEgPCAxLjApIHx8
IHRoaXMuX29wdGlvbnMubmVlZEFscGhhQmxlbmRpbmc7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTcGVjaWZpZXMgaWYgdGhpcyBtYXRlcmlhbCBzaG91bGQgYmUgcmVuZGVyZWQgaW4gYWxwaGEg
dGVzdCBtb2RlCisgICAgICogQHJldHVybnMgYSBib29sZWFuIHNwZWNpZnlpbmcgaWYgYW4gYWxw
aGEgdGVzdCBpcyBuZWVkZWQuCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBl
Lm5lZWRBbHBoYVRlc3RpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9v
cHRpb25zLm5lZWRBbHBoYVRlc3Rpbmc7CisgICAgfTsKKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90
b3R5cGUuX2NoZWNrVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSkgeworICAgICAgICBp
ZiAodGhpcy5fb3B0aW9ucy51bmlmb3Jtcy5pbmRleE9mKHVuaWZvcm1OYW1lKSA9PT0gLTEpIHsK
KyAgICAgICAgICAgIHRoaXMuX29wdGlvbnMudW5pZm9ybXMucHVzaCh1bmlmb3JtTmFtZSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIHRleHR1cmUgaW4gdGhlIHNo
YWRlci4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0g
c2FtcGxlcnMgYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisgICAgICogQHBhcmFtIHRleHR1cmUg
RGVmaW5lIHRoZSB0ZXh0dXJlIHRvIGJpbmQgdG8gdGhpcyBzYW1wbGVyCisgICAgICogQHJldHVy
biB0aGUgbWF0ZXJpYWwgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQiIGxpa2UgdW5pZm9ybSB1cGRh
dGVzCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLnNldFRleHR1cmUgPSBm
dW5jdGlvbiAobmFtZSwgdGV4dHVyZSkgeworICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5zYW1w
bGVycy5pbmRleE9mKG5hbWUpID09PSAtMSkgeworICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5z
YW1wbGVycy5wdXNoKG5hbWUpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3RleHR1cmVzW25h
bWVdID0gdGV4dHVyZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXQgYSB0ZXh0dXJlIGFycmF5IGluIHRoZSBzaGFkZXIuCisgICAgICogQHBhcmFtIG5h
bWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHNhbXBsZXIgYXJyYXkgYXMgZGVmaW5l
ZCBpbiB0aGUgc2hhZGVyCisgICAgICogQHBhcmFtIHRleHR1cmVzIERlZmluZSB0aGUgbGlzdCBv
ZiB0ZXh0dXJlcyB0byBiaW5kIHRvIHRoaXMgc2FtcGxlcgorICAgICAqIEByZXR1cm4gdGhlIG1h
dGVyaWFsIGl0c2VsZiBhbGxvd2luZyAiZmx1ZW50IiBsaWtlIHVuaWZvcm0gdXBkYXRlcworICAg
ICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5zZXRUZXh0dXJlQXJyYXkgPSBmdW5j
dGlvbiAobmFtZSwgdGV4dHVyZXMpIHsKKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuc2FtcGxl
cnMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuc2Ft
cGxlcnMucHVzaChuYW1lKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jaGVja1VuaWZvcm0o
bmFtZSk7CisgICAgICAgIHRoaXMuX3RleHR1cmVBcnJheXNbbmFtZV0gPSB0ZXh0dXJlczsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgYSBmbG9hdCBp
biB0aGUgc2hhZGVyLgorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUg
dW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0gdmFsdWUgRGVm
aW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1bmlmb3JtCisgICAgICogQHJldHVybiB0aGUg
bWF0ZXJpYWwgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQiIGxpa2UgdW5pZm9ybSB1cGRhdGVzCisg
ICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLnNldEZsb2F0ID0gZnVuY3Rpb24g
KG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAg
ICAgdGhpcy5fZmxvYXRzW25hbWVdID0gdmFsdWU7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogU2V0IGEgaW50IGluIHRoZSBzaGFkZXIuCisgICAgICogQHBh
cmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGFzIGRlZmluZWQgaW4gdGhl
IHNoYWRlcgorICAgICAqIEBwYXJhbSB2YWx1ZSBEZWZpbmUgdGhlIHZhbHVlIHRvIGdpdmUgdG8g
dGhlIHVuaWZvcm0KKyAgICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBpdHNlbGYgYWxsb3dpbmcg
ImZsdWVudCIgbGlrZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBTaGFkZXJNYXRlcmlh
bC5wcm90b3R5cGUuc2V0SW50ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRo
aXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5faW50c1tuYW1lXSA9IHZhbHVl
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhbiBh
cnJheSBvZiBmbG9hdHMgaW4gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUg
dGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisgICAgICog
QHBhcmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUgdW5pZm9ybQorICAg
ICAqIEByZXR1cm4gdGhlIG1hdGVyaWFsIGl0c2VsZiBhbGxvd2luZyAiZmx1ZW50IiBsaWtlIHVu
aWZvcm0gdXBkYXRlcworICAgICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5zZXRG
bG9hdHMgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5fY2hlY2tVbmlm
b3JtKG5hbWUpOworICAgICAgICB0aGlzLl9mbG9hdHNBcnJheXNbbmFtZV0gPSB2YWx1ZTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgYSB2ZWMzIGlu
IHRoZSBzaGFkZXIgZnJvbSBhIENvbG9yMy4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhl
IG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisgICAgICogQHBh
cmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUgdW5pZm9ybQorICAgICAq
IEByZXR1cm4gdGhlIG1hdGVyaWFsIGl0c2VsZiBhbGxvd2luZyAiZmx1ZW50IiBsaWtlIHVuaWZv
cm0gdXBkYXRlcworICAgICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5zZXRDb2xv
cjMgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5fY2hlY2tVbmlmb3Jt
KG5hbWUpOworICAgICAgICB0aGlzLl9jb2xvcnMzW25hbWVdID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0IGEgdmVjMyBhcnJheSBpbiB0
aGUgc2hhZGVyIGZyb20gYSBDb2xvcjMgYXJyYXkuCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5l
IHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGFzIGRlZmluZWQgaW4gdGhlIHNoYWRlcgorICAgICAq
IEBwYXJhbSB2YWx1ZSBEZWZpbmUgdGhlIHZhbHVlIHRvIGdpdmUgdG8gdGhlIHVuaWZvcm0KKyAg
ICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBpdHNlbGYgYWxsb3dpbmcgImZsdWVudCIgbGlrZSB1
bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuc2V0
Q29sb3IzQXJyYXkgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5fY2hl
Y2tVbmlmb3JtKG5hbWUpOworICAgICAgICB0aGlzLl9jb2xvcnMzQXJyYXlzW25hbWVdID0gdmFs
dWUucmVkdWNlKGZ1bmN0aW9uIChhcnIsIGNvbG9yKSB7CisgICAgICAgICAgICBjb2xvci50b0Fy
cmF5KGFyciwgYXJyLmxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gYXJyOworICAgICAgICB9
LCBbXSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
IGEgdmVjNCBpbiB0aGUgc2hhZGVyIGZyb20gYSBDb2xvcjQuCisgICAgICogQHBhcmFtIG5hbWUg
RGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGFzIGRlZmluZWQgaW4gdGhlIHNoYWRlcgor
ICAgICAqIEBwYXJhbSB2YWx1ZSBEZWZpbmUgdGhlIHZhbHVlIHRvIGdpdmUgdG8gdGhlIHVuaWZv
cm0KKyAgICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBpdHNlbGYgYWxsb3dpbmcgImZsdWVudCIg
bGlrZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5
cGUuc2V0Q29sb3I0ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2No
ZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fY29sb3JzNFtuYW1lXSA9IHZhbHVlOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIHZlYzQg
YXJyYXkgaW4gdGhlIHNoYWRlciBmcm9tIGEgQ29sb3I0IGFycmF5LgorICAgICAqIEBwYXJhbSBu
YW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFk
ZXIKKyAgICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1
bmlmb3JtCisgICAgICogQHJldHVybiB0aGUgbWF0ZXJpYWwgaXRzZWxmIGFsbG93aW5nICJmbHVl
bnQiIGxpa2UgdW5pZm9ybSB1cGRhdGVzCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJv
dG90eXBlLnNldENvbG9yNEFycmF5ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAg
IHRoaXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fY29sb3JzNEFycmF5c1tu
YW1lXSA9IHZhbHVlLnJlZHVjZShmdW5jdGlvbiAoYXJyLCBjb2xvcikgeworICAgICAgICAgICAg
Y29sb3IudG9BcnJheShhcnIsIGFyci5sZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIGFycjsK
KyAgICAgICAgfSwgW10pOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldCBhIHZlYzIgaW4gdGhlIHNoYWRlciBmcm9tIGEgVmVjdG9yMi4KKyAgICAgKiBA
cGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0
aGUgc2hhZGVyCisgICAgICogQHBhcmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0
byB0aGUgdW5pZm9ybQorICAgICAqIEByZXR1cm4gdGhlIG1hdGVyaWFsIGl0c2VsZiBhbGxvd2lu
ZyAiZmx1ZW50IiBsaWtlIHVuaWZvcm0gdXBkYXRlcworICAgICAqLworICAgIFNoYWRlck1hdGVy
aWFsLnByb3RvdHlwZS5zZXRWZWN0b3IyID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAg
ICAgIHRoaXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fdmVjdG9yczJbbmFt
ZV0gPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXQgYSB2ZWMzIGluIHRoZSBzaGFkZXIgZnJvbSBhIFZlY3RvcjMuCisgICAgICogQHBhcmFt
IG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGFzIGRlZmluZWQgaW4gdGhlIHNo
YWRlcgorICAgICAqIEBwYXJhbSB2YWx1ZSBEZWZpbmUgdGhlIHZhbHVlIHRvIGdpdmUgdG8gdGhl
IHVuaWZvcm0KKyAgICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBpdHNlbGYgYWxsb3dpbmcgImZs
dWVudCIgbGlrZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBTaGFkZXJNYXRlcmlhbC5w
cm90b3R5cGUuc2V0VmVjdG9yMyA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkgeworICAgICAgICB0
aGlzLl9jaGVja1VuaWZvcm0obmFtZSk7CisgICAgICAgIHRoaXMuX3ZlY3RvcnMzW25hbWVdID0g
dmFsdWU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
IGEgdmVjNCBpbiB0aGUgc2hhZGVyIGZyb20gYSBWZWN0b3I0LgorICAgICAqIEBwYXJhbSBuYW1l
IERlZmluZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFkZXIK
KyAgICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1bmlm
b3JtCisgICAgICogQHJldHVybiB0aGUgbWF0ZXJpYWwgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQi
IGxpa2UgdW5pZm9ybSB1cGRhdGVzCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90
eXBlLnNldFZlY3RvcjQgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5f
Y2hlY2tVbmlmb3JtKG5hbWUpOworICAgICAgICB0aGlzLl92ZWN0b3JzNFtuYW1lXSA9IHZhbHVl
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIG1h
dDQgaW4gdGhlIHNoYWRlciBmcm9tIGEgTWF0cml4LgorICAgICAqIEBwYXJhbSBuYW1lIERlZmlu
ZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFkZXIKKyAgICAg
KiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1bmlmb3JtCisg
ICAgICogQHJldHVybiB0aGUgbWF0ZXJpYWwgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQiIGxpa2Ug
dW5pZm9ybSB1cGRhdGVzCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLnNl
dE1hdHJpeCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkgeworICAgICAgICB0aGlzLl9jaGVja1Vu
aWZvcm0obmFtZSk7CisgICAgICAgIHRoaXMuX21hdHJpY2VzW25hbWVdID0gdmFsdWU7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0IGEgbWF0MyBpbiB0
aGUgc2hhZGVyIGZyb20gYSBGbG9hdDMyQXJyYXkuCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5l
IHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGFzIGRlZmluZWQgaW4gdGhlIHNoYWRlcgorICAgICAq
IEBwYXJhbSB2YWx1ZSBEZWZpbmUgdGhlIHZhbHVlIHRvIGdpdmUgdG8gdGhlIHVuaWZvcm0KKyAg
ICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBpdHNlbGYgYWxsb3dpbmcgImZsdWVudCIgbGlrZSB1
bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuc2V0
TWF0cml4M3gzID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2NoZWNr
VW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fbWF0cmljZXMzeDNbbmFtZV0gPSB2YWx1ZTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgYSBtYXQy
IGluIHRoZSBzaGFkZXIgZnJvbSBhIEZsb2F0MzJBcnJheS4KKyAgICAgKiBAcGFyYW0gbmFtZSBE
ZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisg
ICAgICogQHBhcmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUgdW5pZm9y
bQorICAgICAqIEByZXR1cm4gdGhlIG1hdGVyaWFsIGl0c2VsZiBhbGxvd2luZyAiZmx1ZW50IiBs
aWtlIHVuaWZvcm0gdXBkYXRlcworICAgICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlw
ZS5zZXRNYXRyaXgyeDIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5f
Y2hlY2tVbmlmb3JtKG5hbWUpOworICAgICAgICB0aGlzLl9tYXRyaWNlczJ4MltuYW1lXSA9IHZh
bHVlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBh
IHZlYzIgYXJyYXkgaW4gdGhlIHNoYWRlciBmcm9tIGEgbnVtYmVyIGFycmF5LgorICAgICAqIEBw
YXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRo
ZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRv
IHRoZSB1bmlmb3JtCisgICAgICogQHJldHVybiB0aGUgbWF0ZXJpYWwgaXRzZWxmIGFsbG93aW5n
ICJmbHVlbnQiIGxpa2UgdW5pZm9ybSB1cGRhdGVzCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJp
YWwucHJvdG90eXBlLnNldEFycmF5MiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkgeworICAgICAg
ICB0aGlzLl9jaGVja1VuaWZvcm0obmFtZSk7CisgICAgICAgIHRoaXMuX3ZlY3RvcnMyQXJyYXlz
W25hbWVdID0gdmFsdWU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0IGEgdmVjMyBhcnJheSBpbiB0aGUgc2hhZGVyIGZyb20gYSBudW1iZXIgYXJyYXku
CisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGFzIGRl
ZmluZWQgaW4gdGhlIHNoYWRlcgorICAgICAqIEBwYXJhbSB2YWx1ZSBEZWZpbmUgdGhlIHZhbHVl
IHRvIGdpdmUgdG8gdGhlIHVuaWZvcm0KKyAgICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBpdHNl
bGYgYWxsb3dpbmcgImZsdWVudCIgbGlrZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBT
aGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuc2V0QXJyYXkzID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVl
KSB7CisgICAgICAgIHRoaXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fdmVj
dG9yczNBcnJheXNbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXQgYSB2ZWM0IGFycmF5IGluIHRoZSBzaGFkZXIgZnJvbSBhIG51
bWJlciBhcnJheS4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHVu
aWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisgICAgICogQHBhcmFtIHZhbHVlIERlZmlu
ZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUgdW5pZm9ybQorICAgICAqIEByZXR1cm4gdGhlIG1h
dGVyaWFsIGl0c2VsZiBhbGxvd2luZyAiZmx1ZW50IiBsaWtlIHVuaWZvcm0gdXBkYXRlcworICAg
ICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5zZXRBcnJheTQgPSBmdW5jdGlvbiAo
bmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5fY2hlY2tVbmlmb3JtKG5hbWUpOworICAgICAg
ICB0aGlzLl92ZWN0b3JzNEFycmF5c1tuYW1lXSA9IHZhbHVlOworICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5fY2hlY2tDYWNoZSA9IGZ1
bmN0aW9uIChtZXNoLCB1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgaWYgKCFtZXNoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZWZmZWN0
ICYmICh0aGlzLl9lZmZlY3QuZGVmaW5lcy5pbmRleE9mKCIjZGVmaW5lIElOU1RBTkNFUyIpICE9
PSAtMSkgIT09IHVzZUluc3RhbmNlcykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNw
ZWNpZmllcyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJlYWR5IHRvIGJlIHVzZWQKKyAgICAgKiBAcGFy
YW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHN1Yk1lc2gg
ZGVmaW5lcyB3aGljaCBzdWJtZXNoIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHVzZUluc3RhbmNl
cyBzcGVjaWZpZXMgdGhhdCBpbnN0YW5jZXMgc2hvdWxkIGJlIHVzZWQKKyAgICAgKiBAcmV0dXJu
cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJlYWR5IG9yIG5vdAor
ICAgICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5pc1JlYWR5Rm9yU3ViTWVzaCA9
IGZ1bmN0aW9uIChtZXNoLCBzdWJNZXNoLCB1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuaXNSZWFkeShtZXNoLCB1c2VJbnN0YW5jZXMpOworICAgIH07CisgICAgLyoqCisgICAg
ICogQ2hlY2tzIGlmIHRoZSBtYXRlcmlhbCBpcyByZWFkeSB0byByZW5kZXIgdGhlIHJlcXVlc3Rl
ZCBtZXNoCisgICAgICogQHBhcmFtIG1lc2ggRGVmaW5lIHRoZSBtZXNoIHRvIHJlbmRlcgorICAg
ICAqIEBwYXJhbSB1c2VJbnN0YW5jZXMgRGVmaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRlcmlh
bCBpcyB1c2VkIHdpdGggaW5zdGFuY2VzCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiByZWFkeSwg
b3RoZXJ3aXNlIGZhbHNlCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmlz
UmVhZHkgPSBmdW5jdGlvbiAobWVzaCwgdXNlSW5zdGFuY2VzKSB7CisgICAgICAgIHZhciBzY2Vu
ZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2lu
ZSgpOworICAgICAgICBpZiAoIXRoaXMuY2hlY2tSZWFkeU9uRXZlcnlDYWxsKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fcmVuZGVySWQgPT09IHNjZW5lLmdldFJlbmRlcklkKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fY2hlY2tDYWNoZShtZXNoLCB1c2VJbnN0YW5jZXMpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBJbnN0YW5jZXMKKyAgICAgICAgdmFyIGRl
ZmluZXMgPSBbXTsKKyAgICAgICAgdmFyIGF0dHJpYnMgPSBbXTsKKyAgICAgICAgdmFyIGZhbGxi
YWNrcyA9IG5ldyBfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkVmZmVjdEZh
bGxiYWNrcyJdKCk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9v
cHRpb25zLmRlZmluZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBkZWZpbmVzLnB1
c2godGhpcy5fb3B0aW9ucy5kZWZpbmVzW2luZGV4XSk7CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX29wdGlvbnMuYXR0cmlidXRlcy5sZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgIGF0dHJpYnMucHVzaCh0aGlzLl9vcHRpb25zLmF0dHJp
YnV0ZXNbaW5kZXhdKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWVzaCAmJiBtZXNoLmlzVmVy
dGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQpKSB7CisgICAgICAgICAgICBhdHRyaWJzLnB1
c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVm
ZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBWRVJU
RVhDT0xPUiIpOworICAgICAgICB9CisgICAgICAgIGlmICh1c2VJbnN0YW5jZXMpIHsKKyAgICAg
ICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBJTlNUQU5DRVMiKTsKKyAgICAgICAgICAgIF9t
YXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlhbEhlbHBl
ciJdLlB1c2hBdHRyaWJ1dGVzRm9ySW5zdGFuY2VzKGF0dHJpYnMpOworICAgICAgICB9CisgICAg
ICAgIC8vIEJvbmVzCisgICAgICAgIGlmIChtZXNoICYmIG1lc2gudXNlQm9uZXMgJiYgbWVzaC5j
b21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgJiYgbWVzaC5za2VsZXRvbikgeworICAgICAgICAgICAg
YXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0tpbmQpOworICAgICAgICAgICAgYXR0cmli
cy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpOworICAgICAgICAgICAgaWYgKG1lc2gubnVt
Qm9uZUluZmx1ZW5jZXJzID4gNCkgeworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVzaChfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5N
YXRyaWNlc0luZGljZXNFeHRyYUtpbmQpOworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVzaChf
TWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIi
XS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIHNrZWxldG9uID0gbWVzaC5za2VsZXRvbjsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgi
I2RlZmluZSBOVU1fQk9ORV9JTkZMVUVOQ0VSUyAiICsgbWVzaC5udW1Cb25lSW5mbHVlbmNlcnMp
OworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZENQVVNraW5uaW5nRmFsbGJhY2soMCwgbWVzaCk7
CisgICAgICAgICAgICBpZiAoc2tlbGV0b24uaXNVc2luZ1RleHR1cmVGb3JNYXRyaWNlcykgewor
ICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBCT05FVEVYVFVSRSIpOworICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnVuaWZvcm1zLmluZGV4T2YoImJvbmVUZXh0
dXJlV2lkdGgiKSA9PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy51
bmlmb3Jtcy5wdXNoKCJib25lVGV4dHVyZVdpZHRoIik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnNhbXBsZXJzLmluZGV4T2YoImJvbmVTYW1w
bGVyIikgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuc2FtcGxl
cnMucHVzaCgiYm9uZVNhbXBsZXIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZp
bmUgQm9uZXNQZXJNZXNoICIgKyAoc2tlbGV0b24uYm9uZXMubGVuZ3RoICsgMSkpOworICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnVuaWZvcm1zLmluZGV4T2YoIm1Cb25lcyIpID09
PSAtMSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zLnVuaWZvcm1zLnB1c2go
Im1Cb25lcyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBOVU1fQk9O
RV9JTkZMVUVOQ0VSUyAwIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGV4dHVyZXMKKyAgICAg
ICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykgeworICAgICAgICAgICAgaWYgKCF0
aGlzLl90ZXh0dXJlc1tuYW1lXS5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQWxwaGEgdGVzdAor
ICAgICAgICBpZiAobWVzaCAmJiB0aGlzLl9zaG91bGRUdXJuQWxwaGFUZXN0T24obWVzaCkpIHsK
KyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBBTFBIQVRFU1QiKTsKKyAgICAgICAg
fQorICAgICAgICB2YXIgcHJldmlvdXNFZmZlY3QgPSB0aGlzLl9lZmZlY3Q7CisgICAgICAgIHZh
ciBqb2luID0gZGVmaW5lcy5qb2luKCJcbiIpOworICAgICAgICB0aGlzLl9lZmZlY3QgPSBlbmdp
bmUuY3JlYXRlRWZmZWN0KHRoaXMuX3NoYWRlclBhdGgsIHsKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXM6IGF0dHJpYnMsCisgICAgICAgICAgICB1bmlmb3Jtc05hbWVzOiB0aGlzLl9vcHRpb25zLnVu
aWZvcm1zLAorICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlcnNOYW1lczogdGhpcy5fb3B0aW9ucy51
bmlmb3JtQnVmZmVycywKKyAgICAgICAgICAgIHNhbXBsZXJzOiB0aGlzLl9vcHRpb25zLnNhbXBs
ZXJzLAorICAgICAgICAgICAgZGVmaW5lczogam9pbiwKKyAgICAgICAgICAgIGZhbGxiYWNrczog
ZmFsbGJhY2tzLAorICAgICAgICAgICAgb25Db21waWxlZDogdGhpcy5vbkNvbXBpbGVkLAorICAg
ICAgICAgICAgb25FcnJvcjogdGhpcy5vbkVycm9yCisgICAgICAgIH0sIGVuZ2luZSk7CisgICAg
ICAgIGlmICghdGhpcy5fZWZmZWN0LmlzUmVhZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2aW91c0VmZmVjdCAhPT0gdGhpcy5fZWZm
ZWN0KSB7CisgICAgICAgICAgICBzY2VuZS5yZXNldENhY2hlZE1hdGVyaWFsKCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fcmVuZGVySWQgPSBzY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRzIHRoZSB3b3JsZCBt
YXRyaXggdG8gdGhlIG1hdGVyaWFsCisgICAgICogQHBhcmFtIHdvcmxkIGRlZmluZXMgdGhlIHdv
cmxkIHRyYW5zZm9ybWF0aW9uIG1hdHJpeAorICAgICAqLworICAgIFNoYWRlck1hdGVyaWFsLnBy
b3RvdHlwZS5iaW5kT25seVdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKHdvcmxkKSB7CisgICAgICAg
IHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgaWYgKCF0aGlzLl9lZmZlY3Qp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fb3B0
aW9ucy51bmlmb3Jtcy5pbmRleE9mKCJ3b3JsZCIpICE9PSAtMSkgeworICAgICAgICAgICAgdGhp
cy5fZWZmZWN0LnNldE1hdHJpeCgid29ybGQiLCB3b3JsZCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX29wdGlvbnMudW5pZm9ybXMuaW5kZXhPZigid29ybGRWaWV3IikgIT09IC0xKSB7
CisgICAgICAgICAgICB3b3JsZC5tdWx0aXBseVRvUmVmKHNjZW5lLmdldFZpZXdNYXRyaXgoKSwg
dGhpcy5fY2FjaGVkV29ybGRWaWV3TWF0cml4KTsKKyAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5z
ZXRNYXRyaXgoIndvcmxkVmlldyIsIHRoaXMuX2NhY2hlZFdvcmxkVmlld01hdHJpeCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMudW5pZm9ybXMuaW5kZXhPZigid29ybGRW
aWV3UHJvamVjdGlvbiIpICE9PSAtMSkgeworICAgICAgICAgICAgd29ybGQubXVsdGlwbHlUb1Jl
ZihzY2VuZS5nZXRUcmFuc2Zvcm1NYXRyaXgoKSwgdGhpcy5fY2FjaGVkV29ybGRWaWV3UHJvamVj
dGlvbk1hdHJpeCk7CisgICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0TWF0cml4KCJ3b3JsZFZp
ZXdQcm9qZWN0aW9uIiwgdGhpcy5fY2FjaGVkV29ybGRWaWV3UHJvamVjdGlvbk1hdHJpeCk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRzIHRoZSBtYXRlcmlhbCB0byB0
aGUgbWVzaAorICAgICAqIEBwYXJhbSB3b3JsZCBkZWZpbmVzIHRoZSB3b3JsZCB0cmFuc2Zvcm1h
dGlvbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRvIGJpbmQg
dGhlIG1hdGVyaWFsIHRvCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmJp
bmQgPSBmdW5jdGlvbiAod29ybGQsIG1lc2gpIHsKKyAgICAgICAgLy8gU3RkIHZhbHVlcworICAg
ICAgICB0aGlzLmJpbmRPbmx5V29ybGRNYXRyaXgod29ybGQpOworICAgICAgICBpZiAodGhpcy5f
ZWZmZWN0ICYmIHRoaXMuZ2V0U2NlbmUoKS5nZXRDYWNoZWRNYXRlcmlhbCgpICE9PSB0aGlzKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy51bmlmb3Jtcy5pbmRleE9mKCJ2aWV3Iikg
IT09IC0xKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldE1hdHJpeCgidmlldyIs
IHRoaXMuZ2V0U2NlbmUoKS5nZXRWaWV3TWF0cml4KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHRoaXMuX29wdGlvbnMudW5pZm9ybXMuaW5kZXhPZigicHJvamVjdGlvbiIpICE9
PSAtMSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRNYXRyaXgoInByb2plY3Rp
b24iLCB0aGlzLmdldFNjZW5lKCkuZ2V0UHJvamVjdGlvbk1hdHJpeCgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnVuaWZvcm1zLmluZGV4T2YoInZpZXdQ
cm9qZWN0aW9uIikgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldE1h
dHJpeCgidmlld1Byb2plY3Rpb24iLCB0aGlzLmdldFNjZW5lKCkuZ2V0VHJhbnNmb3JtTWF0cml4
KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQm9uZXMKKyAgICAgICAgICAgIF9t
YXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlhbEhlbHBl
ciJdLkJpbmRCb25lc1BhcmFtZXRlcnMobWVzaCwgdGhpcy5fZWZmZWN0KTsKKyAgICAgICAgICAg
IHZhciBuYW1lOworICAgICAgICAgICAgLy8gVGV4dHVyZQorICAgICAgICAgICAgZm9yIChuYW1l
IGluIHRoaXMuX3RleHR1cmVzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldFRl
eHR1cmUobmFtZSwgdGhpcy5fdGV4dHVyZXNbbmFtZV0pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gVGV4dHVyZSBhcnJheXMKKyAgICAgICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl90
ZXh0dXJlQXJyYXlzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldFRleHR1cmVB
cnJheShuYW1lLCB0aGlzLl90ZXh0dXJlQXJyYXlzW25hbWVdKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIEludAorICAgICAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX2ludHMpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0SW50KG5hbWUsIHRoaXMuX2ludHNbbmFt
ZV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRmxvYXQKKyAgICAgICAgICAgIGZv
ciAobmFtZSBpbiB0aGlzLl9mbG9hdHMpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3Qu
c2V0RmxvYXQobmFtZSwgdGhpcy5fZmxvYXRzW25hbWVdKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIEZsb2F0cworICAgICAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX2Zsb2F0c0Fy
cmF5cykgeworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRBcnJheShuYW1lLCB0aGlz
Ll9mbG9hdHNBcnJheXNbbmFtZV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ29s
b3IzCisgICAgICAgICAgICBmb3IgKG5hbWUgaW4gdGhpcy5fY29sb3JzMykgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2VmZmVjdC5zZXRDb2xvcjMobmFtZSwgdGhpcy5fY29sb3JzM1tuYW1lXSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDb2xvcjNBcnJheQorICAgICAgICAgICAg
Zm9yIChuYW1lIGluIHRoaXMuX2NvbG9yczNBcnJheXMpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9lZmZlY3Quc2V0QXJyYXkzKG5hbWUsIHRoaXMuX2NvbG9yczNBcnJheXNbbmFtZV0pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ29sb3I0CisgICAgICAgICAgICBmb3IgKG5hbWUg
aW4gdGhpcy5fY29sb3JzNCkgeworICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHRoaXMuX2Nv
bG9yczRbbmFtZV07CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldEZsb2F0NChuYW1l
LCBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIENvbG9yNEFycmF5CisgICAgICAgICAgICBmb3IgKG5hbWUgaW4gdGhpcy5f
Y29sb3JzNEFycmF5cykgeworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRBcnJheTQo
bmFtZSwgdGhpcy5fY29sb3JzNEFycmF5c1tuYW1lXSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAvLyBWZWN0b3IyCisgICAgICAgICAgICBmb3IgKG5hbWUgaW4gdGhpcy5fdmVjdG9yczIp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0VmVjdG9yMihuYW1lLCB0aGlzLl92
ZWN0b3JzMltuYW1lXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBWZWN0b3IzCisg
ICAgICAgICAgICBmb3IgKG5hbWUgaW4gdGhpcy5fdmVjdG9yczMpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9lZmZlY3Quc2V0VmVjdG9yMyhuYW1lLCB0aGlzLl92ZWN0b3JzM1tuYW1lXSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBWZWN0b3I0CisgICAgICAgICAgICBmb3IgKG5h
bWUgaW4gdGhpcy5fdmVjdG9yczQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0
VmVjdG9yNChuYW1lLCB0aGlzLl92ZWN0b3JzNFtuYW1lXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBNYXRyaXgKKyAgICAgICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl9tYXRyaWNl
cykgeworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRNYXRyaXgobmFtZSwgdGhpcy5f
bWF0cmljZXNbbmFtZV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gTWF0cml4IDN4
MworICAgICAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX21hdHJpY2VzM3gzKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5fZWZmZWN0LnNldE1hdHJpeDN4MyhuYW1lLCB0aGlzLl9tYXRyaWNlczN4
M1tuYW1lXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBNYXRyaXggMngyCisgICAg
ICAgICAgICBmb3IgKG5hbWUgaW4gdGhpcy5fbWF0cmljZXMyeDIpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9lZmZlY3Quc2V0TWF0cml4MngyKG5hbWUsIHRoaXMuX21hdHJpY2VzMngyW25hbWVd
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFZlY3RvcjJBcnJheQorICAgICAgICAg
ICAgZm9yIChuYW1lIGluIHRoaXMuX3ZlY3RvcnMyQXJyYXlzKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fZWZmZWN0LnNldEFycmF5MihuYW1lLCB0aGlzLl92ZWN0b3JzMkFycmF5c1tuYW1lXSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBWZWN0b3IzQXJyYXkKKyAgICAgICAgICAg
IGZvciAobmFtZSBpbiB0aGlzLl92ZWN0b3JzM0FycmF5cykgeworICAgICAgICAgICAgICAgIHRo
aXMuX2VmZmVjdC5zZXRBcnJheTMobmFtZSwgdGhpcy5fdmVjdG9yczNBcnJheXNbbmFtZV0pOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVmVjdG9yNEFycmF5CisgICAgICAgICAgICBm
b3IgKG5hbWUgaW4gdGhpcy5fdmVjdG9yczRBcnJheXMpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9lZmZlY3Quc2V0QXJyYXk0KG5hbWUsIHRoaXMuX3ZlY3RvcnM0QXJyYXlzW25hbWVdKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hZnRlckJpbmQobWVzaCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBhY3RpdmUgdGV4dHVyZXMgZnJvbSB0aGUg
bWF0ZXJpYWwKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB0ZXh0dXJlcworICAgICAqLwor
ICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5nZXRBY3RpdmVUZXh0dXJlcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIGFjdGl2ZVRleHR1cmVzID0gX3N1cGVyLnByb3RvdHlwZS5nZXRB
Y3RpdmVUZXh0dXJlcy5jYWxsKHRoaXMpOworICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMu
X3RleHR1cmVzKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMuX3RleHR1
cmVzW25hbWVdKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX3Rl
eHR1cmVBcnJheXMpIHsKKyAgICAgICAgICAgIHZhciBhcnJheSA9IHRoaXMuX3RleHR1cmVBcnJh
eXNbbmFtZV07CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXku
bGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgYWN0aXZlVGV4dHVyZXMucHVzaChh
cnJheVtpbmRleF0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBh
Y3RpdmVUZXh0dXJlczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyBpZiB0aGUg
bWF0ZXJpYWwgdXNlcyBhIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBkZWZpbmVzIHRo
ZSB0ZXh0dXJlIHRvIGNoZWNrIGFnYWluc3QgdGhlIG1hdGVyaWFsCisgICAgICogQHJldHVybnMg
YSBib29sZWFuIHNwZWNpZnlpbmcgaWYgdGhlIG1hdGVyaWFsIHVzZXMgdGhlIHRleHR1cmUKKyAg
ICAgKi8KKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuaGFzVGV4dHVyZSA9IGZ1bmN0aW9u
ICh0ZXh0dXJlKSB7CisgICAgICAgIGlmIChfc3VwZXIucHJvdG90eXBlLmhhc1RleHR1cmUuY2Fs
bCh0aGlzLCB0ZXh0dXJlKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykgeworICAgICAgICAgICAg
aWYgKHRoaXMuX3RleHR1cmVzW25hbWVdID09PSB0ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIg
bmFtZSBpbiB0aGlzLl90ZXh0dXJlQXJyYXlzKSB7CisgICAgICAgICAgICB2YXIgYXJyYXkgPSB0
aGlzLl90ZXh0dXJlQXJyYXlzW25hbWVdOworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAw
OyBpbmRleCA8IGFycmF5Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIGlmIChh
cnJheVtpbmRleF0gPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1ha2VzIGEgZHVwbGljYXRl
IG9mIHRoZSBtYXRlcmlhbCwgYW5kIGdpdmVzIGl0IGEgbmV3IG5hbWUKKyAgICAgKiBAcGFyYW0g
bmFtZSBkZWZpbmVzIHRoZSBuZXcgbmFtZSBmb3IgdGhlIGR1cGxpY2F0ZWQgbWF0ZXJpYWwKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY2xvbmVkIG1hdGVyaWFsCisgICAgICovCisgICAgU2hhZGVyTWF0
ZXJpYWwucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgdmFyIG5l
d1NoYWRlck1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKG5hbWUsIHRoaXMuZ2V0U2NlbmUo
KSwgdGhpcy5fc2hhZGVyUGF0aCwgdGhpcy5fb3B0aW9ucyk7CisgICAgICAgIHJldHVybiBuZXdT
aGFkZXJNYXRlcmlhbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBtYXRl
cmlhbAorICAgICAqIEBwYXJhbSBmb3JjZURpc3Bvc2VFZmZlY3Qgc3BlY2lmaWVzIGlmIGVmZmVj
dHMgc2hvdWxkIGJlIGZvcmNlZnVsbHkgZGlzcG9zZWQKKyAgICAgKiBAcGFyYW0gZm9yY2VEaXNw
b3NlVGV4dHVyZXMgc3BlY2lmaWVzIGlmIHRleHR1cmVzIHNob3VsZCBiZSBmb3JjZWZ1bGx5IGRp
c3Bvc2VkCisgICAgICogQHBhcmFtIG5vdEJvdW5kVG9NZXNoIHNwZWNpZmllcyBpZiB0aGUgbWF0
ZXJpYWwgdGhhdCBpcyBiZWluZyBkaXNwb3NlZCBpcyBrbm93biB0byBiZSBub3QgYm91bmQgdG8g
YW55IG1lc2gKKyAgICAgKi8KKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuZGlzcG9zZSA9
IGZ1bmN0aW9uIChmb3JjZURpc3Bvc2VFZmZlY3QsIGZvcmNlRGlzcG9zZVRleHR1cmVzLCBub3RC
b3VuZFRvTWVzaCkgeworICAgICAgICBpZiAoZm9yY2VEaXNwb3NlVGV4dHVyZXMpIHsKKyAgICAg
ICAgICAgIHZhciBuYW1lOworICAgICAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX3RleHR1cmVz
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbbmFtZV0uZGlzcG9zZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX3RleHR1cmVBcnJheXMp
IHsKKyAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSB0aGlzLl90ZXh0dXJlQXJyYXlzW25hbWVd
OworICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5n
dGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdLmRpc3Bvc2Uo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fdGV4dHVyZXMgPSB7fTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNh
bGwodGhpcywgZm9yY2VEaXNwb3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcywgbm90Qm91
bmRUb01lc2gpOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGlzIG1hdGVy
aWFsIGluIGEgSlNPTiByZXByZXNlbnRhdGlvbgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxp
emVkIG1hdGVyaWFsIG9iamVjdAorICAgICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlw
ZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2Jq
ZWN0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJp
YWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXplKHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9u
T2JqZWN0LmN1c3RvbVR5cGUgPSAiQkFCWUxPTi5TaGFkZXJNYXRlcmlhbCI7CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3Qub3B0aW9ucyA9IHRoaXMuX29wdGlvbnM7CisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3Quc2hhZGVyUGF0aCA9IHRoaXMuX3NoYWRlclBhdGg7CisgICAgICAgIHZh
ciBuYW1lOworICAgICAgICAvLyBUZXh0dXJlCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
dGV4dHVyZXMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX3RleHR1cmVzKSB7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRleHR1cmVzW25hbWVdID0gdGhpcy5fdGV4
dHVyZXNbbmFtZV0uc2VyaWFsaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGV4dHVyZSBh
cnJheXMKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50ZXh0dXJlQXJyYXlzID0ge307Cisg
ICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl90ZXh0dXJlQXJyYXlzKSB7CisgICAgICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LnRleHR1cmVBcnJheXNbbmFtZV0gPSBbXTsKKyAgICAgICAgICAg
IHZhciBhcnJheSA9IHRoaXMuX3RleHR1cmVBcnJheXNbbmFtZV07CisgICAgICAgICAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50ZXh0dXJlQXJyYXlzW25hbWVdLnB1c2goYXJy
YXlbaW5kZXhdLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAvLyBGbG9hdAorICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmZsb2F0cyA9IHt9OworICAg
ICAgICBmb3IgKG5hbWUgaW4gdGhpcy5fZmxvYXRzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0
aW9uT2JqZWN0LmZsb2F0c1tuYW1lXSA9IHRoaXMuX2Zsb2F0c1tuYW1lXTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBGbG9hdCBzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuRmxvYXRBcnJh
eXMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX2Zsb2F0c0FycmF5cykgeworICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5GbG9hdEFycmF5c1tuYW1lXSA9IHRoaXMuX2Zs
b2F0c0FycmF5c1tuYW1lXTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb2xvcjMKKyAgICAgICAg
c2VyaWFsaXphdGlvbk9iamVjdC5jb2xvcnMzID0ge307CisgICAgICAgIGZvciAobmFtZSBpbiB0
aGlzLl9jb2xvcnMzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvbG9yczNb
bmFtZV0gPSB0aGlzLl9jb2xvcnMzW25hbWVdLmFzQXJyYXkoKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBDb2xvcjMgYXJyYXkKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jb2xvcnMzQXJy
YXlzID0ge307CisgICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl9jb2xvcnMzQXJyYXlzKSB7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvbG9yczNBcnJheXNbbmFtZV0gPSB0aGlz
Ll9jb2xvcnMzQXJyYXlzW25hbWVdOworICAgICAgICB9CisgICAgICAgIC8vIENvbG9yNAorICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvbG9yczQgPSB7fTsKKyAgICAgICAgZm9yIChuYW1l
IGluIHRoaXMuX2NvbG9yczQpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29s
b3JzNFtuYW1lXSA9IHRoaXMuX2NvbG9yczRbbmFtZV0uYXNBcnJheSgpOworICAgICAgICB9Cisg
ICAgICAgIC8vIENvbG9yNCBhcnJheQorICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvbG9y
czRBcnJheXMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX2NvbG9yczRBcnJheXMp
IHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29sb3JzNEFycmF5c1tuYW1lXSA9
IHRoaXMuX2NvbG9yczRBcnJheXNbbmFtZV07CisgICAgICAgIH0KKyAgICAgICAgLy8gVmVjdG9y
MgorICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnZlY3RvcnMyID0ge307CisgICAgICAgIGZv
ciAobmFtZSBpbiB0aGlzLl92ZWN0b3JzMikgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC52ZWN0b3JzMltuYW1lXSA9IHRoaXMuX3ZlY3RvcnMyW25hbWVdLmFzQXJyYXkoKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBWZWN0b3IzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
dmVjdG9yczMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX3ZlY3RvcnMzKSB7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnZlY3RvcnMzW25hbWVdID0gdGhpcy5fdmVj
dG9yczNbbmFtZV0uYXNBcnJheSgpOworICAgICAgICB9CisgICAgICAgIC8vIFZlY3RvcjQKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC52ZWN0b3JzNCA9IHt9OworICAgICAgICBmb3IgKG5h
bWUgaW4gdGhpcy5fdmVjdG9yczQpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
dmVjdG9yczRbbmFtZV0gPSB0aGlzLl92ZWN0b3JzNFtuYW1lXS5hc0FycmF5KCk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gTWF0cml4CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF0cmlj
ZXMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX21hdHJpY2VzKSB7CisgICAgICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdHJpY2VzW25hbWVdID0gdGhpcy5fbWF0cmljZXNb
bmFtZV0uYXNBcnJheSgpOworICAgICAgICB9CisgICAgICAgIC8vIE1hdHJpeCAzeDMKKyAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXRyaWNlczN4MyA9IHt9OworICAgICAgICBmb3IgKG5h
bWUgaW4gdGhpcy5fbWF0cmljZXMzeDMpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QubWF0cmljZXMzeDNbbmFtZV0gPSB0aGlzLl9tYXRyaWNlczN4M1tuYW1lXTsKKyAgICAgICAg
fQorICAgICAgICAvLyBNYXRyaXggMngyCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF0
cmljZXMyeDIgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX21hdHJpY2VzMngyKSB7
CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdHJpY2VzMngyW25hbWVdID0gdGhp
cy5fbWF0cmljZXMyeDJbbmFtZV07CisgICAgICAgIH0KKyAgICAgICAgLy8gVmVjdG9yMkFycmF5
CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudmVjdG9yczJBcnJheXMgPSB7fTsKKyAgICAg
ICAgZm9yIChuYW1lIGluIHRoaXMuX3ZlY3RvcnMyQXJyYXlzKSB7CisgICAgICAgICAgICBzZXJp
YWxpemF0aW9uT2JqZWN0LnZlY3RvcnMyQXJyYXlzW25hbWVdID0gdGhpcy5fdmVjdG9yczJBcnJh
eXNbbmFtZV07CisgICAgICAgIH0KKyAgICAgICAgLy8gVmVjdG9yM0FycmF5CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QudmVjdG9yczNBcnJheXMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1l
IGluIHRoaXMuX3ZlY3RvcnMzQXJyYXlzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LnZlY3RvcnMzQXJyYXlzW25hbWVdID0gdGhpcy5fdmVjdG9yczNBcnJheXNbbmFtZV07Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gVmVjdG9yNEFycmF5CisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QudmVjdG9yczRBcnJheXMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX3Zl
Y3RvcnM0QXJyYXlzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnZlY3RvcnM0
QXJyYXlzW25hbWVdID0gdGhpcy5fdmVjdG9yczRBcnJheXNbbmFtZV07CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgc2hhZGVyIG1hdGVyaWFsIGZyb20gcGFyc2VkIHNoYWRlciBtYXRlcmlhbCBk
YXRhCisgICAgICogQHBhcmFtIHNvdXJjZSBkZWZpbmVzIHRoZSBKU09OIHJlcHJlc25ldGF0aW9u
IG9mIHRoZSBtYXRlcmlhbAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5n
IHNjZW5lCisgICAgICogQHBhcmFtIHJvb3RVcmwgZGVmaW5lcyB0aGUgcm9vdCBVUkwgdG8gdXNl
IHRvIGxvYWQgdGV4dHVyZXMgYW5kIHJlbGF0aXZlIGRlcGVuZGVuY2llcworICAgICAqIEByZXR1
cm5zIGEgbmV3IG1hdGVyaWFsCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwuUGFyc2UgPSBm
dW5jdGlvbiAoc291cmNlLCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICB2YXIgbWF0ZXJpYWwg
PSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6
YXRpb25IZWxwZXIiXS5QYXJzZShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU2hhZGVyTWF0ZXJp
YWwoc291cmNlLm5hbWUsIHNjZW5lLCBzb3VyY2Uuc2hhZGVyUGF0aCwgc291cmNlLm9wdGlvbnMp
OyB9LCBzb3VyY2UsIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgdmFyIG5hbWU7CisgICAgICAg
IC8vIFRleHR1cmUKKyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJjZS50ZXh0dXJlcykgeworICAg
ICAgICAgICAgbWF0ZXJpYWwuc2V0VGV4dHVyZShuYW1lLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3Rl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGV4dHVyZSJdLlBhcnNlKHNvdXJj
ZS50ZXh0dXJlc1tuYW1lXSwgc2NlbmUsIHJvb3RVcmwpKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBUZXh0dXJlIGFycmF5cworICAgICAgICBmb3IgKG5hbWUgaW4gc291cmNlLnRleHR1cmVBcnJh
eXMpIHsKKyAgICAgICAgICAgIHZhciBhcnJheSA9IHNvdXJjZS50ZXh0dXJlQXJyYXlzW25hbWVd
OworICAgICAgICAgICAgdmFyIHRleHR1cmVBcnJheSA9IG5ldyBBcnJheSgpOworICAgICAgICAg
ICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5Lmxlbmd0aDsgaW5kZXgrKykgewor
ICAgICAgICAgICAgICAgIHRleHR1cmVBcnJheS5wdXNoKF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uUGFyc2UoYXJyYXlb
aW5kZXhdLCBzY2VuZSwgcm9vdFVybCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0
ZXJpYWwuc2V0VGV4dHVyZUFycmF5KG5hbWUsIHRleHR1cmVBcnJheSk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gRmxvYXQKKyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJjZS5mbG9hdHMpIHsKKyAg
ICAgICAgICAgIG1hdGVyaWFsLnNldEZsb2F0KG5hbWUsIHNvdXJjZS5mbG9hdHNbbmFtZV0pOwor
ICAgICAgICB9CisgICAgICAgIC8vIEZsb2F0IHMKKyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJj
ZS5mbG9hdHNBcnJheXMpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLnNldEZsb2F0cyhuYW1lLCBz
b3VyY2UuZmxvYXRzQXJyYXlzW25hbWVdKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb2xvcjMK
KyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJjZS5jb2xvcnMzKSB7CisgICAgICAgICAgICBtYXRl
cmlhbC5zZXRDb2xvcjMobmFtZSwgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siQ29sb3IzIl0uRnJvbUFycmF5KHNvdXJjZS5jb2xvcnMzW25hbWVdKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gQ29sb3IzIGFycmF5cworICAgICAgICBmb3IgKG5hbWUgaW4g
c291cmNlLmNvbG9yczNBcnJheXMpIHsKKyAgICAgICAgICAgIHZhciBjb2xvcnMgPSBzb3VyY2Uu
Y29sb3JzM0FycmF5c1tuYW1lXS5yZWR1Y2UoZnVuY3Rpb24gKGFyciwgbnVtLCBpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGkgJSAzID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGFyci5w
dXNoKFtudW1dKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFyclthcnIubGVuZ3RoIC0gMV0ucHVzaChudW0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gYXJyOworICAgICAgICAgICAgfSwg
W10pLm1hcChmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJuIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNvbG9yMyJdLkZyb21BcnJheShjb2xvcik7IH0pOwor
ICAgICAgICAgICAgbWF0ZXJpYWwuc2V0Q29sb3IzQXJyYXkobmFtZSwgY29sb3JzKTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBDb2xvcjQKKyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJjZS5jb2xv
cnM0KSB7CisgICAgICAgICAgICBtYXRlcmlhbC5zZXRDb2xvcjQobmFtZSwgX01hdGhzX21hdGhf
Y29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ29sb3I0Il0uRnJvbUFycmF5KHNv
dXJjZS5jb2xvcnM0W25hbWVdKSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29sb3I0IGFycmF5
cworICAgICAgICBmb3IgKG5hbWUgaW4gc291cmNlLmNvbG9yczRBcnJheXMpIHsKKyAgICAgICAg
ICAgIHZhciBjb2xvcnMgPSBzb3VyY2UuY29sb3JzNEFycmF5c1tuYW1lXS5yZWR1Y2UoZnVuY3Rp
b24gKGFyciwgbnVtLCBpKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgJSA0ID09PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKFtudW1dKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFyclthcnIubGVuZ3Ro
IC0gMV0ucHVzaChudW0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gYXJyOworICAgICAgICAgICAgfSwgW10pLm1hcChmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJu
IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNvbG9yNCJd
LkZyb21BcnJheShjb2xvcik7IH0pOworICAgICAgICAgICAgbWF0ZXJpYWwuc2V0Q29sb3I0QXJy
YXkobmFtZSwgY29sb3JzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBWZWN0b3IyCisgICAgICAg
IGZvciAobmFtZSBpbiBzb3VyY2UudmVjdG9yczIpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLnNl
dFZlY3RvcjIobmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlZlY3RvcjIiXS5Gcm9tQXJyYXkoc291cmNlLnZlY3RvcnMyW25hbWVdKSk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gVmVjdG9yMworICAgICAgICBmb3IgKG5hbWUgaW4gc291cmNlLnZl
Y3RvcnMzKSB7CisgICAgICAgICAgICBtYXRlcmlhbC5zZXRWZWN0b3IzKG5hbWUsIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uRnJvbUFy
cmF5KHNvdXJjZS52ZWN0b3JzM1tuYW1lXSkpOworICAgICAgICB9CisgICAgICAgIC8vIFZlY3Rv
cjQKKyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJjZS52ZWN0b3JzNCkgeworICAgICAgICAgICAg
bWF0ZXJpYWwuc2V0VmVjdG9yNChuYW1lLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVjdG9yNCJdLkZyb21BcnJheShzb3VyY2UudmVjdG9yczRbbmFt
ZV0pKTsKKyAgICAgICAgfQorICAgICAgICAvLyBNYXRyaXgKKyAgICAgICAgZm9yIChuYW1lIGlu
IHNvdXJjZS5tYXRyaWNlcykgeworICAgICAgICAgICAgbWF0ZXJpYWwuc2V0TWF0cml4KG5hbWUs
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNYXRyaXgi
XS5Gcm9tQXJyYXkoc291cmNlLm1hdHJpY2VzW25hbWVdKSk7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gTWF0cml4IDN4MworICAgICAgICBmb3IgKG5hbWUgaW4gc291cmNlLm1hdHJpY2VzM3gzKSB7
CisgICAgICAgICAgICBtYXRlcmlhbC5zZXRNYXRyaXgzeDMobmFtZSwgc291cmNlLm1hdHJpY2Vz
M3gzW25hbWVdKTsKKyAgICAgICAgfQorICAgICAgICAvLyBNYXRyaXggMngyCisgICAgICAgIGZv
ciAobmFtZSBpbiBzb3VyY2UubWF0cmljZXMyeDIpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLnNl
dE1hdHJpeDJ4MihuYW1lLCBzb3VyY2UubWF0cmljZXMyeDJbbmFtZV0pOworICAgICAgICB9Cisg
ICAgICAgIC8vIFZlY3RvcjJBcnJheQorICAgICAgICBmb3IgKG5hbWUgaW4gc291cmNlLnZlY3Rv
cnMyQXJyYXlzKSB7CisgICAgICAgICAgICBtYXRlcmlhbC5zZXRBcnJheTIobmFtZSwgc291cmNl
LnZlY3RvcnMyQXJyYXlzW25hbWVdKTsKKyAgICAgICAgfQorICAgICAgICAvLyBWZWN0b3IzQXJy
YXkKKyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJjZS52ZWN0b3JzM0FycmF5cykgeworICAgICAg
ICAgICAgbWF0ZXJpYWwuc2V0QXJyYXkzKG5hbWUsIHNvdXJjZS52ZWN0b3JzM0FycmF5c1tuYW1l
XSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVmVjdG9yNEFycmF5CisgICAgICAgIGZvciAobmFt
ZSBpbiBzb3VyY2UudmVjdG9yczRBcnJheXMpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLnNldEFy
cmF5NChuYW1lLCBzb3VyY2UudmVjdG9yczRBcnJheXNbbmFtZV0pOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtYXRlcmlhbDsKKyAgICB9OworICAgIHJldHVybiBTaGFkZXJNYXRlcmlhbDsK
K30oX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsIl0pKTsK
KworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIl9UeXBlU3Rv
cmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uU2hhZGVyTWF0ZXJpYWwiXSA9IFNoYWRlck1h
dGVyaWFsOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRl
cmlhbC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL01hdGVyaWFscy9zdGFuZGFyZE1hdGVyaWFsLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBT
dGFuZGFyZE1hdGVyaWFsRGVmaW5lcywgU3RhbmRhcmRNYXRlcmlhbCAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gU3RhbmRhcmRNYXRlcmlhbERlZmluZXM7IH0pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiU3RhbmRhcmRNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3RhbmRhcmRNYXRlcmlh
bDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvc21hcnRB
cnJheSAqLyAiLi9NaXNjL3NtYXJ0QXJyYXkudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRo
LnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2J1ZmZlciAqLyAiLi9NZXNo
ZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAqLyAiLi9NYXRlcmlh
bHMvaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsRGVmaW5lc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxz
L21hdGVyaWFsRGVmaW5lcyAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWxEZWZpbmVzLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3B1c2hNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcHVzaE1hdGVyaWFsICovICIu
L01hdGVyaWFscy9wdXNoTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL21hdGVyaWFsSGVscGVyICovICIuL01hdGVyaWFscy9tYXRlcmlhbEhl
bHBlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNf
dGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0
dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0
b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0ZXJpYWxGbGFncyAqLyAiLi9NYXRl
cmlhbHMvbWF0ZXJpYWxGbGFncy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzX2RlZmF1bHRfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2RlZmF1bHQuZnJhZ21lbnQgKi8gIi4vU2hh
ZGVycy9kZWZhdWx0LmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1No
YWRlcnNfZGVmYXVsdF92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2RlZmF1bHQudmVydGV4ICovICIuL1NoYWRl
cnMvZGVmYXVsdC52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50
cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworLyoqIEBoaWRkZW4gKi8K
K3ZhciBTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChf
c3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVu
ZHMiXShTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcywgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBTdGFu
ZGFyZE1hdGVyaWFsRGVmaW5lcygpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwo
dGhpcykgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuTUFJTlVWMSA9IGZhbHNlOworICAgICAgICBf
dGhpcy5NQUlOVVYyID0gZmFsc2U7CisgICAgICAgIF90aGlzLkRJRkZVU0UgPSBmYWxzZTsKKyAg
ICAgICAgX3RoaXMuRElGRlVTRURJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuQU1CSUVOVCA9
IGZhbHNlOworICAgICAgICBfdGhpcy5BTUJJRU5URElSRUNUVVYgPSAwOworICAgICAgICBfdGhp
cy5PUEFDSVRZID0gZmFsc2U7CisgICAgICAgIF90aGlzLk9QQUNJVFlESVJFQ1RVViA9IDA7Cisg
ICAgICAgIF90aGlzLk9QQUNJVFlSR0IgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElP
TiA9IGZhbHNlOworICAgICAgICBfdGhpcy5FTUlTU0lWRSA9IGZhbHNlOworICAgICAgICBfdGhp
cy5FTUlTU0lWRURJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuU1BFQ1VMQVIgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuU1BFQ1VMQVJESVJFQ1RVViA9IDA7CisgICAgICAgIF90aGlzLkJVTVAg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQlVNUERJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMu
UEFSQUxMQVggPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUEFSQUxMQVhPQ0NMVVNJT04gPSBmYWxz
ZTsKKyAgICAgICAgX3RoaXMuU1BFQ1VMQVJPVkVSQUxQSEEgPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuQ0xJUFBMQU5FID0gZmFsc2U7CisgICAgICAgIF90aGlzLkNMSVBQTEFORTIgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuQ0xJUFBMQU5FMyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DTElQUExB
TkU0ID0gZmFsc2U7CisgICAgICAgIF90aGlzLkFMUEhBVEVTVCA9IGZhbHNlOworICAgICAgICBf
dGhpcy5ERVBUSFBSRVBBU1MgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQUxQSEFGUk9NRElGRlVT
RSA9IGZhbHNlOworICAgICAgICBfdGhpcy5QT0lOVFNJWkUgPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuRk9HID0gZmFsc2U7CisgICAgICAgIF90aGlzLlNQRUNVTEFSVEVSTSA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5ESUZGVVNFRlJFU05FTCA9IGZhbHNlOworICAgICAgICBfdGhpcy5PUEFDSVRZ
RlJFU05FTCA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9ORlJFU05FTCA9IGZhbHNl
OworICAgICAgICBfdGhpcy5SRUZSQUNUSU9ORlJFU05FTCA9IGZhbHNlOworICAgICAgICBfdGhp
cy5FTUlTU0lWRUZSRVNORUwgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuRlJFU05FTCA9IGZhbHNl
OworICAgICAgICBfdGhpcy5OT1JNQUwgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVVYxID0gZmFs
c2U7CisgICAgICAgIF90aGlzLlVWMiA9IGZhbHNlOworICAgICAgICBfdGhpcy5WRVJURVhDT0xP
UiA9IGZhbHNlOworICAgICAgICBfdGhpcy5WRVJURVhBTFBIQSA9IGZhbHNlOworICAgICAgICBf
dGhpcy5OVU1fQk9ORV9JTkZMVUVOQ0VSUyA9IDA7CisgICAgICAgIF90aGlzLkJvbmVzUGVyTWVz
aCA9IDA7CisgICAgICAgIF90aGlzLkJPTkVURVhUVVJFID0gZmFsc2U7CisgICAgICAgIF90aGlz
LklOU1RBTkNFUyA9IGZhbHNlOworICAgICAgICBfdGhpcy5HTE9TU0lORVNTID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLlJPVUdITkVTUyA9IGZhbHNlOworICAgICAgICBfdGhpcy5FTUlTU0lWRUFT
SUxMVU1JTkFUSU9OID0gZmFsc2U7CisgICAgICAgIF90aGlzLkxJTktFTUlTU0lWRVdJVEhESUZG
VVNFID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05GUkVTTkVMRlJPTVNQRUNVTEFS
ID0gZmFsc2U7CisgICAgICAgIF90aGlzLkxJR0hUTUFQID0gZmFsc2U7CisgICAgICAgIF90aGlz
LkxJR0hUTUFQRElSRUNUVVYgPSAwOworICAgICAgICBfdGhpcy5PQkpFQ1RTUEFDRV9OT1JNQUxN
QVAgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVVNFTElHSFRNQVBBU1NIQURPV01BUCA9IGZhbHNl
OworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQXzNEID0gZmFsc2U7CisgICAgICAgIF90aGlz
LlJFRkxFQ1RJT05NQVBfU1BIRVJJQ0FMID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJ
T05NQVBfUExBTkFSID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05NQVBfQ1VCSUMg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVVNFX0xPQ0FMX1JFRkxFQ1RJT05NQVBfQ1VCSUMgPSBm
YWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF9QUk9KRUNUSU9OID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLlJFRkxFQ1RJT05NQVBfU0tZQk9YID0gZmFsc2U7CisgICAgICAgIF90aGlz
LlJFRkxFQ1RJT05NQVBfU0tZQk9YX1RSQU5TRk9STUVEID0gZmFsc2U7CisgICAgICAgIF90aGlz
LlJFRkxFQ1RJT05NQVBfRVhQTElDSVQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElP
Tk1BUF9FUVVJUkVDVEFOR1VMQVIgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1B
UF9FUVVJUkVDVEFOR1VMQVJfRklYRUQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElP
Tk1BUF9NSVJST1JFREVRVUlSRUNUQU5HVUxBUl9GSVhFRCA9IGZhbHNlOworICAgICAgICBfdGhp
cy5JTlZFUlRDVUJJQ01BUCA9IGZhbHNlOworICAgICAgICBfdGhpcy5MT0dBUklUSE1JQ0RFUFRI
ID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJFRlJBQ1RJT04gPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuUkVGUkFDVElPTk1BUF8zRCA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OT1ZF
UkFMUEhBID0gZmFsc2U7CisgICAgICAgIF90aGlzLlRXT1NJREVETElHSFRJTkcgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuU0hBRE9XRkxPQVQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuTU9SUEhU
QVJHRVRTID0gZmFsc2U7CisgICAgICAgIF90aGlzLk1PUlBIVEFSR0VUU19OT1JNQUwgPSBmYWxz
ZTsKKyAgICAgICAgX3RoaXMuTU9SUEhUQVJHRVRTX1RBTkdFTlQgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuTU9SUEhUQVJHRVRTX1VWID0gZmFsc2U7CisgICAgICAgIF90aGlzLk5VTV9NT1JQSF9J
TkZMVUVOQ0VSUyA9IDA7CisgICAgICAgIF90aGlzLk5PTlVOSUZPUk1TQ0FMSU5HID0gZmFsc2U7
IC8vIGh0dHBzOi8vcGxheWdyb3VuZC5iYWJ5bG9uanMuY29tI1Y2RFdJSAorICAgICAgICBfdGhp
cy5QUkVNVUxUSVBMWUFMUEhBID0gZmFsc2U7IC8vIGh0dHBzOi8vcGxheWdyb3VuZC5iYWJ5bG9u
anMuY29tI0xOVkpKNworICAgICAgICBfdGhpcy5JTUFHRVBST0NFU1NJTkcgPSBmYWxzZTsKKyAg
ICAgICAgX3RoaXMuVklHTkVUVEUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVklHTkVUVEVCTEVO
RE1PREVNVUxUSVBMWSA9IGZhbHNlOworICAgICAgICBfdGhpcy5WSUdORVRURUJMRU5ETU9ERU9Q
QVFVRSA9IGZhbHNlOworICAgICAgICBfdGhpcy5UT05FTUFQUElORyA9IGZhbHNlOworICAgICAg
ICBfdGhpcy5UT05FTUFQUElOR19BQ0VTID0gZmFsc2U7CisgICAgICAgIF90aGlzLkNPTlRSQVNU
ID0gZmFsc2U7CisgICAgICAgIF90aGlzLkNPTE9SQ1VSVkVTID0gZmFsc2U7CisgICAgICAgIF90
aGlzLkNPTE9SR1JBRElORyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DT0xPUkdSQURJTkczRCA9
IGZhbHNlOworICAgICAgICBfdGhpcy5TQU1QTEVSM0RHUkVFTkRFUFRIID0gZmFsc2U7CisgICAg
ICAgIF90aGlzLlNBTVBMRVIzREJHUk1BUCA9IGZhbHNlOworICAgICAgICBfdGhpcy5JTUFHRVBS
T0NFU1NJTkdQT1NUUFJPQ0VTUyA9IGZhbHNlOworICAgICAgICBfdGhpcy5NVUxUSVZJRVcgPSBm
YWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSByZWZsZWN0aW9uIHRleHR1cmUg
b24gdGhpcyBtYXRlcmlhbCBpcyBpbiBsaW5lYXIgY29sb3Igc3BhY2UKKyAgICAgICAgICogQGhp
ZGRlbgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuSVNfUkVGTEVDVElPTl9MSU5FQVIgPSBm
YWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSByZWZyYWN0aW9uIHRleHR1cmUg
b24gdGhpcyBtYXRlcmlhbCBpcyBpbiBsaW5lYXIgY29sb3Igc3BhY2UKKyAgICAgICAgICogQGhp
ZGRlbgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuSVNfUkVGUkFDVElPTl9MSU5FQVIgPSBm
YWxzZTsKKyAgICAgICAgX3RoaXMuRVhQT1NVUkUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMucmVi
dWlsZCgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIFN0YW5kYXJkTWF0ZXJp
YWxEZWZpbmVzLnByb3RvdHlwZS5zZXRSZWZsZWN0aW9uTW9kZSA9IGZ1bmN0aW9uIChtb2RlVG9F
bmFibGUpIHsKKyAgICAgICAgdmFyIG1vZGVzID0gWworICAgICAgICAgICAgIlJFRkxFQ1RJT05N
QVBfQ1VCSUMiLCAiUkVGTEVDVElPTk1BUF9FWFBMSUNJVCIsICJSRUZMRUNUSU9OTUFQX1BMQU5B
UiIsCisgICAgICAgICAgICAiUkVGTEVDVElPTk1BUF9QUk9KRUNUSU9OIiwgIlJFRkxFQ1RJT05N
QVBfUFJPSkVDVElPTiIsICJSRUZMRUNUSU9OTUFQX1NLWUJPWCIsCisgICAgICAgICAgICAiUkVG
TEVDVElPTk1BUF9TUEhFUklDQUwiLCAiUkVGTEVDVElPTk1BUF9FUVVJUkVDVEFOR1VMQVIiLCAi
UkVGTEVDVElPTk1BUF9FUVVJUkVDVEFOR1VMQVJfRklYRUQiLAorICAgICAgICAgICAgIlJFRkxF
Q1RJT05NQVBfTUlSUk9SRURFUVVJUkVDVEFOR1VMQVJfRklYRUQiCisgICAgICAgIF07CisgICAg
ICAgIGZvciAodmFyIF9pID0gMCwgbW9kZXNfMSA9IG1vZGVzOyBfaSA8IG1vZGVzXzEubGVuZ3Ro
OyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbW9kZSA9IG1vZGVzXzFbX2ldOworICAgICAgICAg
ICAgdGhpc1ttb2RlXSA9IChtb2RlID09PSBtb2RlVG9FbmFibGUpOworICAgICAgICB9CisgICAg
fTsKKyAgICByZXR1cm4gU3RhbmRhcmRNYXRlcmlhbERlZmluZXM7Cit9KF9NYXRlcmlhbHNfbWF0
ZXJpYWxEZWZpbmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIk1hdGVyaWFsRGVmaW5l
cyJdKSk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZGVmYXVsdCBtYXRlcmlhbCB1c2VkIGluIEJh
Ynlsb24uIEl0IGlzIHRoZSBiZXN0IHRyYWRlIG9mZiBiZXR3ZWVuIHF1YWxpdHkKKyAqIGFuZCBw
ZXJmb3JtYW5jZXMuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAx
L21hdGVyaWFscworICovCit2YXIgU3RhbmRhcmRNYXRlcmlhbCA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2V4dGVuZHMiXShTdGFuZGFyZE1hdGVyaWFsLCBfc3VwZXIpOworICAgIC8qKgorICAgICAq
IEluc3RhbnRpYXRlcyBhIG5ldyBzdGFuZGFyZCBtYXRlcmlhbC4KKyAgICAgKiBUaGlzIGlzIHRo
ZSBkZWZhdWx0IG1hdGVyaWFsIHVzZWQgaW4gQmFieWxvbi4gSXQgaXMgdGhlIGJlc3QgdHJhZGUg
b2ZmIGJldHdlZW4gcXVhbGl0eQorICAgICAqIGFuZCBwZXJmb3JtYW5jZXMuCisgICAgICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9tYXRlcmlhbHMKKyAgICAgKiBA
cGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIG1hdGVyaWFsIGluIHRoZSBzY2VuZQor
ICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSBtYXRlcmlhbCBiZWxvbmcg
dG8KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdGFuZGFyZE1hdGVyaWFsKG5hbWUsIHNjZW5lKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0
aGlzOworICAgICAgICBfdGhpcy5fZGlmZnVzZVRleHR1cmUgPSBudWxsOworICAgICAgICBfdGhp
cy5fYW1iaWVudFRleHR1cmUgPSBudWxsOworICAgICAgICBfdGhpcy5fb3BhY2l0eVRleHR1cmUg
PSBudWxsOworICAgICAgICBfdGhpcy5fcmVmbGVjdGlvblRleHR1cmUgPSBudWxsOworICAgICAg
ICBfdGhpcy5fZW1pc3NpdmVUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX3NwZWN1bGFy
VGV4dHVyZSA9IG51bGw7CisgICAgICAgIF90aGlzLl9idW1wVGV4dHVyZSA9IG51bGw7CisgICAg
ICAgIF90aGlzLl9saWdodG1hcFRleHR1cmUgPSBudWxsOworICAgICAgICBfdGhpcy5fcmVmcmFj
dGlvblRleHR1cmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIG9m
IHRoZSBtYXRlcmlhbCBsaXQgYnkgdGhlIGVudmlyb25tZW50YWwgYmFja2dyb3VuZCBsaWdodGlu
Zy4KKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9t
YXRlcmlhbHMjYW1iaWVudC1jb2xvci1leGFtcGxlCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5hbWJpZW50Q29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siQ29sb3IzIl0oMCwgMCwgMCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBU
aGUgYmFzaWMgY29sb3Igb2YgdGhlIG1hdGVyaWFsIGFzIHZpZXdlZCB1bmRlciBhIGxpZ2h0Lgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZGlmZnVzZUNvbG9yID0gbmV3IF9NYXRoc19tYXRo
X2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbG9yMyJdKDEsIDEsIDEpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGhvdyB0aGUgY29sb3IgYW5kIGludGVuc2l0
eSBvZiB0aGUgaGlnaGxpZ2h0IGdpdmVuIGJ5IHRoZSBsaWdodCBpbiB0aGUgbWF0ZXJpYWwuCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5zcGVjdWxhckNvbG9yID0gbmV3IF9NYXRoc19tYXRo
X2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbG9yMyJdKDEsIDEsIDEpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBjb2xvciBvZiB0aGUgbWF0ZXJpYWwg
YXMgaWYgc2VsZiBsaXQuCisgICAgICAgICAqIFRoaXMgd2lsbCBiZSBtaXhlZCBpbiB0aGUgZmlu
YWwgcmVzdWx0IGV2ZW4gaW4gdGhlIGFic2VuY2Ugb2YgbGlnaHQuCisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5lbWlzc2l2ZUNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIkNvbG9yMyJdKDAsIDAsIDApOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lcyBob3cgc2hhcnAgYXJlIHRoZSBoaWdobGlnaHRzIGluIHRoZSBtYXRl
cmlhbC4KKyAgICAgICAgICogVGhlIGJpZ2dlciB0aGUgdmFsdWUgdGhlIHNoYXJwZXIgZ2l2aW5n
IGEgbW9yZSBnbG9zc3kgZmVlbGluZyB0byB0aGUgcmVzdWx0LgorICAgICAgICAgKiBSZXZlcnNl
bHksIHRoZSBzbWFsbGVyIHRoZSB2YWx1ZSB0aGUgYmx1cnJpZXIgZ2l2aW5nIGEgbW9yZSByb3Vn
aCBmZWVsaW5nIHRvIHRoZSByZXN1bHQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5zcGVj
dWxhclBvd2VyID0gNjQ7CisgICAgICAgIF90aGlzLl91c2VBbHBoYUZyb21EaWZmdXNlVGV4dHVy
ZSA9IGZhbHNlOworICAgICAgICBfdGhpcy5fdXNlRW1pc3NpdmVBc0lsbHVtaW5hdGlvbiA9IGZh
bHNlOworICAgICAgICBfdGhpcy5fbGlua0VtaXNzaXZlV2l0aERpZmZ1c2UgPSBmYWxzZTsKKyAg
ICAgICAgX3RoaXMuX3VzZVNwZWN1bGFyT3ZlckFscGhhID0gZmFsc2U7CisgICAgICAgIF90aGlz
Ll91c2VSZWZsZWN0aW9uT3ZlckFscGhhID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9kaXNhYmxl
TGlnaHRpbmcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX3VzZU9iamVjdFNwYWNlTm9ybWFsTWFw
ID0gZmFsc2U7CisgICAgICAgIF90aGlzLl91c2VQYXJhbGxheCA9IGZhbHNlOworICAgICAgICBf
dGhpcy5fdXNlUGFyYWxsYXhPY2NsdXNpb24gPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEFwcGx5IGEgc2NhbGluZyBmYWN0b3IgdGhhdCBkZXRlcm1pbmUgd2hpY2ggImRlcHRoIiB0
aGUgaGVpZ2h0IG1hcCBzaG91bGQgcmVwcmVuc2VudC4gQSB2YWx1ZSBiZXR3ZWVuIDAuMDUgYW5k
IDAuMSBpcyByZWFzb25uYWJsZSBpbiBQYXJhbGxheCwgeW91IGNhbiByZWFjaCAwLjIgdXNpbmcg
UGFyYWxsYXggT2NjbHVzaW9uLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucGFyYWxsYXhT
Y2FsZUJpYXMgPSAwLjA1OworICAgICAgICBfdGhpcy5fcm91Z2huZXNzID0gMDsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEluIGNhc2Ugb2YgcmVmcmFjdGlvbiwgZGVmaW5lIHRoZSB2YWx1ZSBv
ZiB0aGUgaW5kZXggb2YgcmVmcmFjdGlvbi4KKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL3JlZmxlY3QjaG93LXRvLW9idGFpbi1yZWZsZWN0aW9ucy1hbmQt
cmVmcmFjdGlvbnMKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmluZGV4T2ZSZWZyYWN0aW9u
ID0gMC45ODsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludmVydCB0aGUgcmVmcmFjdGlvbiB0
ZXh0dXJlIGFsb25nc2lkZSB0aGUgeSBheGlzLgorICAgICAgICAgKiBJdCBjYW4gYmUgdXNlZnVs
IHdpdGggcHJvY2VkdXJhbCB0ZXh0dXJlcyBvciBwcm9iZSBmb3IgaW5zdGFuY2UuCisgICAgICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9yZWZsZWN0I2hvdy10by1v
YnRhaW4tcmVmbGVjdGlvbnMtYW5kLXJlZnJhY3Rpb25zCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5pbnZlcnRSZWZyYWN0aW9uWSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
ZWZpbmVzIHRoZSBhbHBoYSBsaW1pdHMgaW4gYWxwaGEgdGVzdCBtb2RlLgorICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMuYWxwaGFDdXRPZmYgPSAwLjQ7CisgICAgICAgIF90aGlzLl91c2VMaWdo
dG1hcEFzU2hhZG93bWFwID0gZmFsc2U7CisgICAgICAgIF90aGlzLl91c2VSZWZsZWN0aW9uRnJl
c25lbEZyb21TcGVjdWxhciA9IGZhbHNlOworICAgICAgICBfdGhpcy5fdXNlR2xvc3NpbmVzc0Zy
b21TcGVjdWxhck1hcEFscGhhID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9tYXhTaW11bHRhbmVv
dXNMaWdodHMgPSA0OworICAgICAgICBfdGhpcy5faW52ZXJ0Tm9ybWFsTWFwWCA9IGZhbHNlOwor
ICAgICAgICBfdGhpcy5faW52ZXJ0Tm9ybWFsTWFwWSA9IGZhbHNlOworICAgICAgICBfdGhpcy5f
dHdvU2lkZWRMaWdodGluZyA9IGZhbHNlOworICAgICAgICBfdGhpcy5fcmVuZGVyVGFyZ2V0cyA9
IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNtYXJ0
QXJyYXkiXSgxNik7CisgICAgICAgIF90aGlzLl93b3JsZFZpZXdQcm9qZWN0aW9uTWF0cml4ID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdHJpeCJd
Llplcm8oKTsKKyAgICAgICAgX3RoaXMuX2dsb2JhbEFtYmllbnRDb2xvciA9IG5ldyBfTWF0aHNf
bWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb2xvcjMiXSgwLCAwLCAw
KTsKKyAgICAgICAgX3RoaXMuX3JlYnVpbGRJblBhcmFsbGVsID0gZmFsc2U7CisgICAgICAgIC8v
IFNldHVwIHRoZSBkZWZhdWx0IHByb2Nlc3NpbmcgY29uZmlndXJhdGlvbiB0byB0aGUgc2NlbmUu
CisgICAgICAgIF90aGlzLl9hdHRhY2hJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKG51bGwp
OworICAgICAgICBfdGhpcy5nZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRzLnJlc2V0KCk7CisgICAgICAgICAgICBp
ZiAoU3RhbmRhcmRNYXRlcmlhbC5SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQgJiYgX3RoaXMuX3Jl
ZmxlY3Rpb25UZXh0dXJlICYmIF90aGlzLl9yZWZsZWN0aW9uVGV4dHVyZS5pc1JlbmRlclRhcmdl
dCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRzLnB1c2goX3RoaXMuX3Jl
ZmxlY3Rpb25UZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTdGFuZGFy
ZE1hdGVyaWFsLlJlZnJhY3Rpb25UZXh0dXJlRW5hYmxlZCAmJiBfdGhpcy5fcmVmcmFjdGlvblRl
eHR1cmUgJiYgX3RoaXMuX3JlZnJhY3Rpb25UZXh0dXJlLmlzUmVuZGVyVGFyZ2V0KSB7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX3JlbmRlclRhcmdldHMucHVzaChfdGhpcy5fcmVmcmFjdGlvblRl
eHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9yZW5kZXJU
YXJnZXRzOworICAgICAgICB9OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgImltYWdlUHJv
Y2Vzc2luZ0NvbmZpZ3VyYXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBpbWFnZSBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24gdXNlZCBlaXRoZXIgaW4gdGhpcyBtYXRl
cmlhbC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb247CisgICAgICAgIH0s
CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBEZWZhdWx0IGltYWdlIHByb2Nlc3Np
bmcgY29uZmlndXJhdGlvbiB1c2VkIGVpdGhlciBpbiB0aGUgdGhpcyBtYXRlcmlhbC4KKyAgICAg
ICAgICoKKyAgICAgICAgICogSWYgc2V0cyB0byBudWxsLCB0aGUgc2NlbmUgb25lIGlzIGluIHVz
ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICB0aGlzLl9hdHRhY2hJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKHZhbHVlKTsKKyAg
ICAgICAgICAgIC8vIEVuc3VyZSB0aGUgZWZmZWN0IHdpbGwgYmUgcmVidWlsdC4KKyAgICAgICAg
ICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkoKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLyoqCisgICAgICogQXR0YWNoZXMgYSBuZXcgaW1hZ2UgcHJvY2Vzc2luZyBj
b25maWd1cmF0aW9uIHRvIHRoZSBTdGFuZGFyZCBNYXRlcmlhbC4KKyAgICAgKiBAcGFyYW0gY29u
ZmlndXJhdGlvbgorICAgICAqLworICAgIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLl9hdHRh
Y2hJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24g
PT09IHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBEZXRhY2hlcyBvYnNlcnZlcgorICAgICAgICBp
ZiAodGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiB0aGlzLl9pbWFnZVByb2Nl
c3NpbmdPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbi5vblVwZGF0ZVBhcmFtZXRlcnMucmVtb3ZlKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ09i
c2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICAvLyBQaWNrIHRoZSBzY2VuZSBjb25maWd1cmF0
aW9uIGlmIG5lZWRlZAorICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAg
IHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gPSB0aGlzLmdldFNjZW5lKCkuaW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0
aW9uOworICAgICAgICB9CisgICAgICAgIC8vIEF0dGFjaGVzIG9ic2VydmVyCisgICAgICAgIGlm
ICh0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICB0aGlz
Ll9pbWFnZVByb2Nlc3NpbmdPYnNlcnZlciA9IHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24ub25VcGRhdGVQYXJhbWV0ZXJzLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAg
ICAgX3RoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0ltYWdlUHJvY2Vzc2luZ0RpcnR5KCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiY2FtZXJhQ29sb3JDdXJ2ZXNFbmFibGVkIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGN1cnZlcyBl
ZmZlY3QgaXMgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5j
b2xvckN1cnZlc0VuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBT
ZXRzIHdldGhlciB0aGUgY29sb3IgY3VydmVzIGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAg
Ki8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckN1cnZlc0VuYWJsZWQgPSB2YWx1ZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJp
YWwucHJvdG90eXBlLCAiY2FtZXJhQ29sb3JHcmFkaW5nRW5hYmxlZCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgd2V0aGVyIHRoZSBjb2xvciBncmFkaW5nIGVmZmVjdCBpcyBlbmFi
bGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yR3JhZGluZ0Vu
YWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdldGhlciB0
aGUgY29sb3IgZ3JhZGluZyBlZmZlY3QgaXMgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLmltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24uY29sb3JHcmFkaW5nRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5
cGUsICJjYW1lcmFUb25lTWFwcGluZ0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHdldGhlciB0b25lbWFwcGluZyBpcyBlbmFibGVkIG9yIG5vdC4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udG9uZU1hcHBpbmdFbmFibGVkOworICAgICAgICB9
LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3ZXRoZXIgdG9uZW1hcHBpbmcgaXMgZW5h
YmxlZCBvciBub3QKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnRvbmVNYXBw
aW5nRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1lcmFFeHBvc3VyZSIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjYW1lcmEgZXhwb3N1cmUgdXNlZCBvbiB0aGlz
IG1hdGVyaWFsLgorICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGhlcmUgYW5kIG5vdCBpbiB0
aGUgY2FtZXJhIHRvIGFsbG93IGNvbnRyb2xsaW5nIGV4cG9zdXJlIHdpdGhvdXQgZnVsbCBzY3Jl
ZW4gcG9zdCBwcm9jZXNzLgorICAgICAgICAgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIGEgcGhvdG9n
cmFwaGljIGV4cG9zdXJlLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5l
eHBvc3VyZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjYW1lcmEg
ZXhwb3N1cmUgdXNlZCBvbiB0aGlzIG1hdGVyaWFsLgorICAgICAgICAgKiBUaGlzIHByb3BlcnR5
IGlzIGhlcmUgYW5kIG5vdCBpbiB0aGUgY2FtZXJhIHRvIGFsbG93IGNvbnRyb2xsaW5nIGV4cG9z
dXJlIHdpdGhvdXQgZnVsbCBzY3JlZW4gcG9zdCBwcm9jZXNzLgorICAgICAgICAgKiBUaGlzIGNv
cnJlc3BvbmRzIHRvIGEgcGhvdG9ncmFwaGljIGV4cG9zdXJlLgorICAgICAgICAgKi8KKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24uZXhwb3N1cmUgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiY2Ft
ZXJhQ29udHJhc3QiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIFRoZSBjYW1lcmEg
Y29udHJhc3QgdXNlZCBvbiB0aGlzIG1hdGVyaWFsLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbi5jb250cmFzdDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFNldHMgVGhlIGNhbWVyYSBjb250cmFzdCB1c2VkIG9uIHRoaXMgbWF0ZXJpYWwuCisgICAg
ICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhp
cy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb250cmFzdCA9IHZhbHVlOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5w
cm90b3R5cGUsICJjYW1lcmFDb2xvckdyYWRpbmdUZXh0dXJlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgQ29sb3IgR3JhZGluZyAyRCBMb29rdXAgVGV4dHVyZS4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uY29sb3JHcmFkaW5nVGV4dHVyZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIENvbG9yIEdyYWRpbmcg
MkQgTG9va3VwIFRleHR1cmUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5j
b2xvckdyYWRpbmdUZXh0dXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgImNhbWVyYUNvbG9y
Q3VydmVzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIGdyYWRpbmcgY3Vy
dmVzIHByb3ZpZGUgYWRkaXRpb25hbCBjb2xvciBhZGp1c3RtbmVudCB0aGF0IGlzIGFwcGxpZWQg
YWZ0ZXIgYW55IGNvbG9yIGdyYWRpbmcgdHJhbnNmb3JtICgzRCBMVVQpLgorICAgICAgICAgKiBU
aGV5IGFsbG93IGJhc2ljIGFkanVzdG1lbnQgb2Ygc2F0dXJhdGlvbiBhbmQgc21hbGwgZXhwb3N1
cmUgYWRqdXN0bWVudHMsIGFsb25nIHdpdGggY29sb3IgZmlsdGVyIHRpbnRpbmcgdG8gcHJvdmlk
ZSB3aGl0ZSBiYWxhbmNlIGFkanVzdG1lbnQgb3IgbW9yZSBzdHlsaXN0aWMgZWZmZWN0cy4KKyAg
ICAgICAgICogVGhlc2UgYXJlIHNpbWlsYXIgdG8gY29udHJvbHMgZm91bmQgaW4gbWFueSBwcm9m
ZXNzaW9uYWwgaW1hZ2luZyBvciBjb2xvcmlzdCBzb2Z0d2FyZS4gVGhlIGdsb2JhbCBjb250cm9s
cyBhcmUgYXBwbGllZCB0byB0aGUgZW50aXJlIGltYWdlLiBGb3IgYWR2YW5jZWQgdHVuaW5nLCBl
eHRyYSBjb250cm9scyBhcmUgcHJvdmlkZWQgdG8gYWRqdXN0IHRoZSBzaGFkb3csIG1pZHRvbmUg
YW5kIGhpZ2hsaWdodCBhcmVhcyBvZiB0aGUgaW1hZ2U7CisgICAgICAgICAqIGNvcnJlc3BvbmRp
bmcgdG8gbG93IGx1bWluYW5jZSwgbWVkaXVtIGx1bWluYW5jZSwgYW5kIGhpZ2ggbHVtaW5hbmNl
IGFyZWFzIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRp
b24uY29sb3JDdXJ2ZXM7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
Y29sb3IgZ3JhZGluZyBjdXJ2ZXMgcHJvdmlkZSBhZGRpdGlvbmFsIGNvbG9yIGFkanVzdG1uZW50
IHRoYXQgaXMgYXBwbGllZCBhZnRlciBhbnkgY29sb3IgZ3JhZGluZyB0cmFuc2Zvcm0gKDNEIExV
VCkuCisgICAgICAgICAqIFRoZXkgYWxsb3cgYmFzaWMgYWRqdXN0bWVudCBvZiBzYXR1cmF0aW9u
IGFuZCBzbWFsbCBleHBvc3VyZSBhZGp1c3RtZW50cywgYWxvbmcgd2l0aCBjb2xvciBmaWx0ZXIg
dGludGluZyB0byBwcm92aWRlIHdoaXRlIGJhbGFuY2UgYWRqdXN0bWVudCBvciBtb3JlIHN0eWxp
c3RpYyBlZmZlY3RzLgorICAgICAgICAgKiBUaGVzZSBhcmUgc2ltaWxhciB0byBjb250cm9scyBm
b3VuZCBpbiBtYW55IHByb2Zlc3Npb25hbCBpbWFnaW5nIG9yIGNvbG9yaXN0IHNvZnR3YXJlLiBU
aGUgZ2xvYmFsIGNvbnRyb2xzIGFyZSBhcHBsaWVkIHRvIHRoZSBlbnRpcmUgaW1hZ2UuIEZvciBh
ZHZhbmNlZCB0dW5pbmcsIGV4dHJhIGNvbnRyb2xzIGFyZSBwcm92aWRlZCB0byBhZGp1c3QgdGhl
IHNoYWRvdywgbWlkdG9uZSBhbmQgaGlnaGxpZ2h0IGFyZWFzIG9mIHRoZSBpbWFnZTsKKyAgICAg
ICAgICogY29ycmVzcG9uZGluZyB0byBsb3cgbHVtaW5hbmNlLCBtZWRpdW0gbHVtaW5hbmNlLCBh
bmQgaGlnaCBsdW1pbmFuY2UgYXJlYXMgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgKi8KKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24uY29sb3JDdXJ2ZXMgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAi
aGFzUmVuZGVyVGFyZ2V0VGV4dHVyZXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgY3VycmVudCBtYXRlcmlhbCBuZWVkcyB0byByZWdp
c3RlciBSVFQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgaWYgKFN0YW5kYXJkTWF0ZXJpYWwuUmVmbGVjdGlvblRleHR1cmVFbmFibGVkICYmIHRo
aXMuX3JlZmxlY3Rpb25UZXh0dXJlICYmIHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlLmlzUmVuZGVy
VGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoU3RhbmRhcmRNYXRlcmlhbC5SZWZyYWN0aW9uVGV4dHVyZUVuYWJsZWQg
JiYgdGhpcy5fcmVmcmFjdGlvblRleHR1cmUgJiYgdGhpcy5fcmVmcmFjdGlvblRleHR1cmUuaXNS
ZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lIG9mIHRoZSBtYXRlcmlhbCBlLmcu
ICJTdGFuZGFyZE1hdGVyaWFsIgorICAgICAqIE1haW5seSB1c2UgaW4gc2VyaWFsaXphdGlvbi4K
KyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFN0YW5kYXJkTWF0
ZXJpYWwucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuICJTdGFuZGFyZE1hdGVyaWFsIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgInVzZUxvZ2FyaXRobWljRGVwdGgiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBJbiBjYXNlIHRoZSBkZXB0aCBidWZmZXIgZG9lcyBub3Qg
YWxsb3cgZW5vdWdoIGRlcHRoIHByZWNpc2lvbiBmb3IgeW91ciBzY2VuZSAobWlnaHQgYmUgdGhl
IGNhc2UgaW4gbGFyZ2Ugc2NlbmVzKQorICAgICAgICAgKiBZb3UgY2FuIHRyeSBzd2l0Y2hpbmcg
dG8gbG9nYXJpdGhtaWMgZGVwdGguCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by91c2luZ19sb2dhcml0aG1pY19kZXB0aF9idWZmZXIKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Vz
ZUxvZ2FyaXRobWljRGVwdGg7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICB0aGlzLl91c2VMb2dhcml0aG1pY0RlcHRoID0gdmFsdWUgJiYg
dGhpcy5nZXRTY2VuZSgpLmdldEVuZ2luZSgpLmdldENhcHMoKS5mcmFnbWVudERlcHRoU3VwcG9y
dGVkOworICAgICAgICAgICAgdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzTWlzY0RpcnR5KCk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbWF0ZXJp
YWwgd2lsbCByZXF1aXJlIGFscGhhIGJsZW5kaW5nCisgICAgICogQHJldHVybnMgYSBib29sZWFu
IHNwZWNpZnlpbmcgaWYgYWxwaGEgYmxlbmRpbmcgaXMgbmVlZGVkCisgICAgICovCisgICAgU3Rh
bmRhcmRNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhhQmxlbmRpbmcgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiAodGhpcy5hbHBoYSA8IDEuMCkgfHwgKHRoaXMuX29wYWNpdHlUZXh0
dXJlICE9IG51bGwpIHx8IHRoaXMuX3Nob3VsZFVzZUFscGhhRnJvbURpZmZ1c2VUZXh0dXJlKCkg
fHwgdGhpcy5fb3BhY2l0eUZyZXNuZWxQYXJhbWV0ZXJzICYmIHRoaXMuX29wYWNpdHlGcmVzbmVs
UGFyYW1ldGVycy5pc0VuYWJsZWQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMg
aWYgdGhpcyBtYXRlcmlhbCBzaG91bGQgYmUgcmVuZGVyZWQgaW4gYWxwaGEgdGVzdCBtb2RlCisg
ICAgICogQHJldHVybnMgYSBib29sZWFuIHNwZWNpZnlpbmcgaWYgYW4gYWxwaGEgdGVzdCBpcyBu
ZWVkZWQuCisgICAgICovCisgICAgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhh
VGVzdGluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RpZmZ1c2VUZXh0
dXJlICE9IG51bGwgJiYgdGhpcy5fZGlmZnVzZVRleHR1cmUuaGFzQWxwaGE7CisgICAgfTsKKyAg
ICBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZS5fc2hvdWxkVXNlQWxwaGFGcm9tRGlmZnVzZVRl
eHR1cmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9kaWZmdXNlVGV4dHVy
ZSAhPSBudWxsICYmIHRoaXMuX2RpZmZ1c2VUZXh0dXJlLmhhc0FscGhhICYmIHRoaXMuX3VzZUFs
cGhhRnJvbURpZmZ1c2VUZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSB0
ZXh0dXJlIHVzZWQgZm9yIGFscGhhIHRlc3QgcHVycG9zZS4KKyAgICAgKiBAcmV0dXJucyB0aGUg
ZGlmZnVzZSB0ZXh0dXJlIGluIGNhc2Ugb2YgdGhlIHN0YW5kYXJkIG1hdGVyaWFsLgorICAgICAq
LworICAgIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLmdldEFscGhhVGVzdFRleHR1cmUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9kaWZmdXNlVGV4dHVyZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldCBpZiB0aGUgc3VibWVzaCBpcyByZWFkeSB0byBiZSB1c2Vk
IGFuZCBhbGwgaXRzIGluZm9ybWF0aW9uIGF2YWlsYWJsZS4KKyAgICAgKiBDaGlsZCBjbGFzc2Vz
IGNhbiB1c2UgaXQgdG8gdXBkYXRlIHNoYWRlcnMKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVz
IHRoZSBtZXNoIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHN1Yk1lc2ggZGVmaW5lcyB3aGljaCBz
dWJtZXNoIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHVzZUluc3RhbmNlcyBzcGVjaWZpZXMgdGhh
dCBpbnN0YW5jZXMgc2hvdWxkIGJlIHVzZWQKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gaW5k
aWNhdGluZyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJlYWR5IG9yIG5vdAorICAgICAqLworICAgIFN0
YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLmlzUmVhZHlGb3JTdWJNZXNoID0gZnVuY3Rpb24gKG1l
c2gsIHN1Yk1lc2gsIHVzZUluc3RhbmNlcykgeworICAgICAgICBpZiAodXNlSW5zdGFuY2VzID09
PSB2b2lkIDApIHsgdXNlSW5zdGFuY2VzID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHN1Yk1lc2gu
ZWZmZWN0ICYmIHRoaXMuaXNGcm96ZW4pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl93YXNQcmV2
aW91c2x5UmVhZHkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXN1Yk1lc2guX21hdGVyaWFsRGVmaW5lcykgewor
ICAgICAgICAgICAgc3ViTWVzaC5fbWF0ZXJpYWxEZWZpbmVzID0gbmV3IFN0YW5kYXJkTWF0ZXJp
YWxEZWZpbmVzKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2Vu
ZSgpOworICAgICAgICB2YXIgZGVmaW5lcyA9IHN1Yk1lc2guX21hdGVyaWFsRGVmaW5lczsKKyAg
ICAgICAgaWYgKCF0aGlzLmNoZWNrUmVhZHlPbkV2ZXJ5Q2FsbCAmJiBzdWJNZXNoLmVmZmVjdCkg
eworICAgICAgICAgICAgaWYgKGRlZmluZXMuX3JlbmRlcklkID09PSBzY2VuZS5nZXRSZW5kZXJJ
ZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICAv
LyBMaWdodHMKKyAgICAgICAgZGVmaW5lcy5fbmVlZE5vcm1hbHMgPSBfbWF0ZXJpYWxIZWxwZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZURl
ZmluZXNGb3JMaWdodHMoc2NlbmUsIG1lc2gsIGRlZmluZXMsIHRydWUsIHRoaXMuX21heFNpbXVs
dGFuZW91c0xpZ2h0cywgdGhpcy5fZGlzYWJsZUxpZ2h0aW5nKTsKKyAgICAgICAgLy8gTXVsdGl2
aWV3CisgICAgICAgIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFf
X1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck11bHRpdmlldyhzY2VuZSwgZGVm
aW5lcyk7CisgICAgICAgIC8vIFRleHR1cmVzCisgICAgICAgIGlmIChkZWZpbmVzLl9hcmVUZXh0
dXJlc0RpcnR5KSB7CisgICAgICAgICAgICBkZWZpbmVzLl9uZWVkVVZzID0gZmFsc2U7CisgICAg
ICAgICAgICBkZWZpbmVzLk1BSU5VVjEgPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuTUFJ
TlVWMiA9IGZhbHNlOworICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVy
aWFsLkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRo
aXMuX2RpZmZ1c2VUZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9tYXRlcmlhbEhl
bHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVw
YXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX2RpZmZ1c2VUZXh0dXJlLCBkZWZpbmVzLCAiRElG
RlVTRSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkRJRkZVU0UgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2FtYmll
bnRUZXh0dXJlICYmIFN0YW5kYXJkTWF0ZXJpYWwuQW1iaWVudFRleHR1cmVFbmFibGVkKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fYW1iaWVudFRleHR1cmUuaXNSZWFkeU9yTm90
QmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MV9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yTWVyZ2VkVVYodGhpcy5fYW1i
aWVudFRleHR1cmUsIGRlZmluZXMsICJBTUJJRU5UIik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuQU1CSUVOVCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fb3BhY2l0eVRleHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlhbC5P
cGFjaXR5VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9v
cGFjaXR5VGV4dHVyZS5pc1JlYWR5T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZURl
ZmluZXNGb3JNZXJnZWRVVih0aGlzLl9vcGFjaXR5VGV4dHVyZSwgZGVmaW5lcywgIk9QQUNJVFki
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuT1BBQ0lUWVJHQiA9IHRoaXMuX29w
YWNpdHlUZXh0dXJlLmdldEFscGhhRnJvbVJHQjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lcy5PUEFDSVRZID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLlJl
ZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMu
X3JlZmxlY3Rpb25UZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuX25l
ZWROb3JtYWxzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVD
VElPTiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJPVUdITkVTUyA9
ICh0aGlzLl9yb3VnaG5lc3MgPiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMu
UkVGTEVDVElPTk9WRVJBTFBIQSA9IHRoaXMuX3VzZVJlZmxlY3Rpb25PdmVyQWxwaGE7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLklOVkVSVENVQklDTUFQID0gKHRoaXMuX3JlZmxl
Y3Rpb25UZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSA9PT0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0
dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0dXJlIl0uSU5WQ1VCSUNfTU9E
RSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfM0QgPSB0
aGlzLl9yZWZsZWN0aW9uVGV4dHVyZS5pc0N1YmU7CisgICAgICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0dXJlIl0uRVhQTElDSVRfTU9ERToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5zZXRSZWZsZWN0aW9uTW9kZSgi
UkVGTEVDVElPTk1BUF9FWFBMSUNJVCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siVGV4dHVyZSJdLlBM
QU5BUl9NT0RFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLnNldFJl
ZmxlY3Rpb25Nb2RlKCJSRUZMRUNUSU9OTUFQX1BMQU5BUiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9N
YXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1si
VGV4dHVyZSJdLlBST0pFQ1RJT05fTU9ERToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lcy5zZXRSZWZsZWN0aW9uTW9kZSgiUkVGTEVDVElPTk1BUF9QUk9KRUNUSU9OIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0dXJlIl0uU0tZQk9YX01PREU6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmluZXMuc2V0UmVmbGVjdGlvbk1vZGUoIlJFRkxFQ1RJT05N
QVBfU0tZQk9YIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVG
TEVDVElPTk1BUF9TS1lCT1hfVFJBTlNGT1JNRUQgPSAhdGhpcy5fcmVmbGVjdGlvblRleHR1cmUu
Z2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXgoKS5pc0lkZW50aXR5KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
Ml9fWyJUZXh0dXJlIl0uU1BIRVJJQ0FMX01PREU6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuc2V0UmVmbGVjdGlvbk1vZGUoIlJFRkxFQ1RJT05NQVBfU1BIRVJJQ0FM
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0dXJlIl0uRVFVSVJFQ1RBTkdVTEFSX01PREU6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuc2V0UmVmbGVjdGlvbk1vZGUo
IlJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX01hdGVy
aWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0
dXJlIl0uRklYRURfRVFVSVJFQ1RBTkdVTEFSX01PREU6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmluZXMuc2V0UmVmbGVjdGlvbk1vZGUoIlJFRkxFQ1RJT05NQVBfRVFVSVJF
Q1RBTkdVTEFSX0ZJWEVEIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0dXJlIl0uRklYRURfRVFV
SVJFQ1RBTkdVTEFSX01JUlJPUkVEX01PREU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmluZXMuc2V0UmVmbGVjdGlvbk1vZGUoIlJFRkxFQ1RJT05NQVBfTUlSUk9SRURFUVVJ
UkVDVEFOR1VMQVJfRklYRUQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfTWF0ZXJpYWxzX1RleHR1cmVz
X3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlRleHR1cmUiXS5DVUJJQ19N
T0RFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJl
c190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0dXJlIl0uSU5WQ1VC
SUNfTU9ERToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLnNldFJlZmxlY3Rpb25Nb2RlKCJSRUZMRUNU
SU9OTUFQX0NVQklDIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5l
cy5VU0VfTE9DQUxfUkVGTEVDVElPTk1BUF9DVUJJQyA9IHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJl
LmJvdW5kaW5nQm94U2l6ZSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRleHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlh
bC5FbWlzc2l2ZVRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhp
cy5fZW1pc3NpdmVUZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9tYXRlcmlhbEhl
bHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVw
YXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX2VtaXNzaXZlVGV4dHVyZSwgZGVmaW5lcywgIkVN
SVNTSVZFIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuRU1JU1NJVkUg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xp
Z2h0bWFwVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLkxpZ2h0bWFwVGV4dHVyZUVuYWJsZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9saWdodG1hcFRleHR1cmUuaXNSZWFk
eU9yTm90QmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yTWVyZ2VkVVYodGhp
cy5fbGlnaHRtYXBUZXh0dXJlLCBkZWZpbmVzLCAiTElHSFRNQVAiKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmluZXMuVVNFTElHSFRNQVBBU1NIQURPV01BUCA9IHRoaXMuX3VzZUxpZ2h0
bWFwQXNTaGFkb3dtYXA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuTElH
SFRNQVAgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX3NwZWN1bGFyVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLlNwZWN1bGFyVGV4dHVyZUVu
YWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zcGVjdWxhclRleHR1cmUu
aXNSZWFkeU9yTm90QmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yTWVyZ2Vk
VVYodGhpcy5fc3BlY3VsYXJUZXh0dXJlLCBkZWZpbmVzLCAiU1BFQ1VMQVIiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmluZXMuR0xPU1NJTkVTUyA9IHRoaXMuX3VzZUdsb3NzaW5lc3NG
cm9tU3BlY3VsYXJNYXBBbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5l
cy5TUEVDVUxBUiA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoc2NlbmUuZ2V0RW5naW5lKCkuZ2V0Q2FwcygpLnN0YW5kYXJkRGVyaXZhdGl2ZXMgJiYgdGhp
cy5fYnVtcFRleHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlhbC5CdW1wVGV4dHVyZUVuYWJsZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gQnVtcCB0ZXh1cmUgY2FuIG5vdCBiZSBub3QgYmxvY2tp
bmcuCisgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fYnVtcFRleHR1cmUuaXNSZWFkeSgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVy
aWFsSGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JNZXJnZWRVVih0aGlzLl9idW1wVGV4dHVyZSwg
ZGVmaW5lcywgIkJVTVAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUEFSQUxM
QVggPSB0aGlzLl91c2VQYXJhbGxheDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMu
UEFSQUxMQVhPQ0NMVVNJT04gPSB0aGlzLl91c2VQYXJhbGxheE9jY2x1c2lvbjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLk9CSkVDVFNQQUNFX05P
Uk1BTE1BUCA9IHRoaXMuX3VzZU9iamVjdFNwYWNlTm9ybWFsTWFwOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5C
VU1QID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlz
Ll9yZWZyYWN0aW9uVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLlJlZnJhY3Rpb25UZXh0dXJl
RW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3JlZnJhY3Rpb25UZXh0
dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuX25lZWRVVnMgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZSQUNUSU9OID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGUkFDVElPTk1BUF8zRCA9IHRoaXMuX3JlZnJh
Y3Rpb25UZXh0dXJlLmlzQ3ViZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5l
cy5SRUZSQUNUSU9OID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGRlZmluZXMuVFdPU0lERURMSUdIVElORyA9ICF0aGlzLl9iYWNrRmFjZUN1bGxpbmcgJiYgdGhp
cy5fdHdvU2lkZWRMaWdodGluZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIGRlZmluZXMuRElGRlVTRSA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGRlZmluZXMuQU1CSUVOVCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmluZXMuT1BBQ0lU
WSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTiA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIGRlZmluZXMuRU1JU1NJVkUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBkZWZpbmVzLkxJR0hUTUFQID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5CVU1Q
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZSQUNUSU9OID0gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZpbmVzLkFMUEhBRlJPTURJRkZVU0UgPSB0aGlz
Ll9zaG91bGRVc2VBbHBoYUZyb21EaWZmdXNlVGV4dHVyZSgpOworICAgICAgICAgICAgZGVmaW5l
cy5FTUlTU0lWRUFTSUxMVU1JTkFUSU9OID0gdGhpcy5fdXNlRW1pc3NpdmVBc0lsbHVtaW5hdGlv
bjsKKyAgICAgICAgICAgIGRlZmluZXMuTElOS0VNSVNTSVZFV0lUSERJRkZVU0UgPSB0aGlzLl9s
aW5rRW1pc3NpdmVXaXRoRGlmZnVzZTsKKyAgICAgICAgICAgIGRlZmluZXMuU1BFQ1VMQVJPVkVS
QUxQSEEgPSB0aGlzLl91c2VTcGVjdWxhck92ZXJBbHBoYTsKKyAgICAgICAgICAgIGRlZmluZXMu
UFJFTVVMVElQTFlBTFBIQSA9ICh0aGlzLmFscGhhTW9kZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJDb25zdGFudHMiXS5BTFBIQV9QUkVNVUxU
SVBMSUVEIHx8IHRoaXMuYWxwaGFNb2RlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE3X19bIkNvbnN0YW50cyJdLkFMUEhBX1BSRU1VTFRJUExJRURfUE9S
VEVSRFVGRik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZUltYWdlUHJvY2Vz
c2luZ0RpcnR5ICYmIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24pIHsKKyAgICAg
ICAgICAgIGlmICghdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5pc1JlYWR5KCkp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByZXBhcmVEZWZpbmVzKGRl
ZmluZXMpOworICAgICAgICAgICAgZGVmaW5lcy5JU19SRUZMRUNUSU9OX0xJTkVBUiA9ICh0aGlz
LnJlZmxlY3Rpb25UZXh0dXJlICE9IG51bGwgJiYgIXRoaXMucmVmbGVjdGlvblRleHR1cmUuZ2Ft
bWFTcGFjZSk7CisgICAgICAgICAgICBkZWZpbmVzLklTX1JFRlJBQ1RJT05fTElORUFSID0gKHRo
aXMucmVmcmFjdGlvblRleHR1cmUgIT0gbnVsbCAmJiAhdGhpcy5yZWZyYWN0aW9uVGV4dHVyZS5n
YW1tYVNwYWNlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5fYXJlRnJlc25lbERp
cnR5KSB7CisgICAgICAgICAgICBpZiAoU3RhbmRhcmRNYXRlcmlhbC5GcmVzbmVsRW5hYmxlZCkg
eworICAgICAgICAgICAgICAgIC8vIEZyZXNuZWwKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5f
ZGlmZnVzZUZyZXNuZWxQYXJhbWV0ZXJzIHx8IHRoaXMuX29wYWNpdHlGcmVzbmVsUGFyYW1ldGVy
cyB8fAorICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWlzc2l2ZUZyZXNuZWxQYXJhbWV0ZXJz
IHx8IHRoaXMuX3JlZnJhY3Rpb25GcmVzbmVsUGFyYW1ldGVycyB8fAorICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9yZWZsZWN0aW9uRnJlc25lbFBhcmFtZXRlcnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lcy5ESUZGVVNFRlJFU05FTCA9ICh0aGlzLl9kaWZmdXNlRnJlc25lbFBhcmFt
ZXRlcnMgJiYgdGhpcy5fZGlmZnVzZUZyZXNuZWxQYXJhbWV0ZXJzLmlzRW5hYmxlZCk7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmluZXMuT1BBQ0lUWUZSRVNORUwgPSAodGhpcy5fb3BhY2l0eUZy
ZXNuZWxQYXJhbWV0ZXJzICYmIHRoaXMuX29wYWNpdHlGcmVzbmVsUGFyYW1ldGVycy5pc0VuYWJs
ZWQpOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05GUkVTTkVMID0gKHRo
aXMuX3JlZmxlY3Rpb25GcmVzbmVsUGFyYW1ldGVycyAmJiB0aGlzLl9yZWZsZWN0aW9uRnJlc25l
bFBhcmFtZXRlcnMuaXNFbmFibGVkKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZM
RUNUSU9ORlJFU05FTEZST01TUEVDVUxBUiA9IHRoaXMuX3VzZVJlZmxlY3Rpb25GcmVzbmVsRnJv
bVNwZWN1bGFyOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRlJBQ1RJT05GUkVTTkVM
ID0gKHRoaXMuX3JlZnJhY3Rpb25GcmVzbmVsUGFyYW1ldGVycyAmJiB0aGlzLl9yZWZyYWN0aW9u
RnJlc25lbFBhcmFtZXRlcnMuaXNFbmFibGVkKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5l
cy5FTUlTU0lWRUZSRVNORUwgPSAodGhpcy5fZW1pc3NpdmVGcmVzbmVsUGFyYW1ldGVycyAmJiB0
aGlzLl9lbWlzc2l2ZUZyZXNuZWxQYXJhbWV0ZXJzLmlzRW5hYmxlZCk7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuX25lZWROb3JtYWxzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lcy5GUkVTTkVMID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLkZSRVNORUwgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBNaXNjLgorICAgICAg
ICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFs
SGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JNaXNjKG1lc2gsIHNjZW5lLCB0aGlzLl91c2VMb2dh
cml0aG1pY0RlcHRoLCB0aGlzLnBvaW50c0Nsb3VkLCB0aGlzLmZvZ0VuYWJsZWQsIHRoaXMuX3No
b3VsZFR1cm5BbHBoYVRlc3RPbihtZXNoKSwgZGVmaW5lcyk7CisgICAgICAgIC8vIEF0dHJpYnMK
KyAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJN
YXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yQXR0cmlidXRlcyhtZXNoLCBkZWZpbmVz
LCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgLy8gVmFsdWVzIHRoYXQgbmVlZCB0byBiZSBl
dmFsdWF0ZWQgb24gZXZlcnkgZnJhbWUKKyAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9y
RnJhbWVCb3VuZFZhbHVlcyhzY2VuZSwgZW5naW5lLCBkZWZpbmVzLCB1c2VJbnN0YW5jZXMpOwor
ICAgICAgICAvLyBHZXQgY29ycmVjdCBlZmZlY3QKKyAgICAgICAgaWYgKGRlZmluZXMuaXNEaXJ0
eSkgeworICAgICAgICAgICAgdmFyIGxpZ2h0RGlzcG9zZWQgPSBkZWZpbmVzLl9hcmVMaWdodHNE
aXNwb3NlZDsKKyAgICAgICAgICAgIGRlZmluZXMubWFya0FzUHJvY2Vzc2VkKCk7CisgICAgICAg
ICAgICAvLyBGYWxsYmFja3MKKyAgICAgICAgICAgIHZhciBmYWxsYmFja3MgPSBuZXcgX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJFZmZlY3RGYWxsYmFja3MiXSgpOworICAg
ICAgICAgICAgaWYgKGRlZmluZXMuUkVGTEVDVElPTikgeworICAgICAgICAgICAgICAgIGZhbGxi
YWNrcy5hZGRGYWxsYmFjaygwLCAiUkVGTEVDVElPTiIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGRlZmluZXMuU1BFQ1VMQVIpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja3Mu
YWRkRmFsbGJhY2soMCwgIlNQRUNVTEFSIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoZGVmaW5lcy5CVU1QKSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNr
KDAsICJCVU1QIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVmaW5lcy5QQVJB
TExBWCkgeworICAgICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjaygxLCAiUEFSQUxM
QVgiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWZpbmVzLlBBUkFMTEFYT0ND
TFVTSU9OKSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKDAsICJQQVJB
TExBWE9DQ0xVU0lPTiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlZmluZXMu
U1BFQ1VMQVJPVkVSQUxQSEEpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJh
Y2soMCwgIlNQRUNVTEFST1ZFUkFMUEhBIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoZGVmaW5lcy5GT0cpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJhY2so
MSwgIkZPRyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlZmluZXMuUE9JTlRT
SVpFKSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKDAsICJQT0lOVFNJ
WkUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWZpbmVzLkxPR0FSSVRITUlD
REVQVEgpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJhY2soMCwgIkxPR0FS
SVRITUlDREVQVEgiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9tYXRlcmlhbEhlbHBl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0ZXJpYWxIZWxwZXIiXS5IYW5kbGVG
YWxsYmFja3NGb3JTaGFkb3dzKGRlZmluZXMsIGZhbGxiYWNrcywgdGhpcy5fbWF4U2ltdWx0YW5l
b3VzTGlnaHRzKTsKKyAgICAgICAgICAgIGlmIChkZWZpbmVzLlNQRUNVTEFSVEVSTSkgeworICAg
ICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjaygwLCAiU1BFQ1VMQVJURVJNIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVmaW5lcy5ESUZGVVNFRlJFU05FTCkgewor
ICAgICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjaygxLCAiRElGRlVTRUZSRVNORUwi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWZpbmVzLk9QQUNJVFlGUkVTTkVM
KSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKDIsICJPUEFDSVRZRlJF
U05FTCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlZmluZXMuUkVGTEVDVElP
TkZSRVNORUwpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJhY2soMywgIlJF
RkxFQ1RJT05GUkVTTkVMIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVmaW5l
cy5FTUlTU0lWRUZSRVNORUwpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJh
Y2soNCwgIkVNSVNTSVZFRlJFU05FTCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGRlZmluZXMuRlJFU05FTCkgeworICAgICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFj
ayg0LCAiRlJFU05FTCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlZmluZXMu
TVVMVElWSUVXKSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKDAsICJN
VUxUSVZJRVciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vQXR0cmlidXRlcworICAg
ICAgICAgICAgdmFyIGF0dHJpYnMgPSBbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgICAgIGlm
IChkZWZpbmVzLk5PUk1BTCkgeworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVzaChfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3Jt
YWxLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWZpbmVzLlVWMSkgewor
ICAgICAgICAgICAgICAgIGF0dHJpYnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGRlZmluZXMuVVYyKSB7CisgICAgICAgICAgICAgICAgYXR0cmlicy5w
dXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlZlcnRleEJ1
ZmZlciJdLlVWMktpbmQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlZmluZXMu
VkVSVEVYQ09MT1IpIHsKKyAgICAgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5k
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlQXR0cmlidXRlc0Zv
ckJvbmVzKGF0dHJpYnMsIG1lc2gsIGRlZmluZXMsIGZhbGxiYWNrcyk7CisgICAgICAgICAgICBf
bWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVs
cGVyIl0uUHJlcGFyZUF0dHJpYnV0ZXNGb3JJbnN0YW5jZXMoYXR0cmlicywgZGVmaW5lcyk7Cisg
ICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19b
Ik1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZUF0dHJpYnV0ZXNGb3JNb3JwaFRhcmdldHMoYXR0cmli
cywgbWVzaCwgZGVmaW5lcyk7CisgICAgICAgICAgICB2YXIgc2hhZGVyTmFtZSA9ICJkZWZhdWx0
IjsKKyAgICAgICAgICAgIHZhciB1bmlmb3JtcyA9IFsid29ybGQiLCAidmlldyIsICJ2aWV3UHJv
amVjdGlvbiIsICJ2RXllUG9zaXRpb24iLCAidkxpZ2h0c1R5cGUiLCAidkFtYmllbnRDb2xvciIs
ICJ2RGlmZnVzZUNvbG9yIiwgInZTcGVjdWxhckNvbG9yIiwgInZFbWlzc2l2ZUNvbG9yIiwgInZp
c2liaWxpdHkiLAorICAgICAgICAgICAgICAgICJ2Rm9nSW5mb3MiLCAidkZvZ0NvbG9yIiwgInBv
aW50U2l6ZSIsCisgICAgICAgICAgICAgICAgInZEaWZmdXNlSW5mb3MiLCAidkFtYmllbnRJbmZv
cyIsICJ2T3BhY2l0eUluZm9zIiwgInZSZWZsZWN0aW9uSW5mb3MiLCAidkVtaXNzaXZlSW5mb3Mi
LCAidlNwZWN1bGFySW5mb3MiLCAidkJ1bXBJbmZvcyIsICJ2TGlnaHRtYXBJbmZvcyIsICJ2UmVm
cmFjdGlvbkluZm9zIiwKKyAgICAgICAgICAgICAgICAibUJvbmVzIiwKKyAgICAgICAgICAgICAg
ICAidkNsaXBQbGFuZSIsICJ2Q2xpcFBsYW5lMiIsICJ2Q2xpcFBsYW5lMyIsICJ2Q2xpcFBsYW5l
NCIsICJkaWZmdXNlTWF0cml4IiwgImFtYmllbnRNYXRyaXgiLCAib3BhY2l0eU1hdHJpeCIsICJy
ZWZsZWN0aW9uTWF0cml4IiwgImVtaXNzaXZlTWF0cml4IiwgInNwZWN1bGFyTWF0cml4IiwgImJ1
bXBNYXRyaXgiLCAibm9ybWFsTWF0cml4IiwgImxpZ2h0bWFwTWF0cml4IiwgInJlZnJhY3Rpb25N
YXRyaXgiLAorICAgICAgICAgICAgICAgICJkaWZmdXNlTGVmdENvbG9yIiwgImRpZmZ1c2VSaWdo
dENvbG9yIiwgIm9wYWNpdHlQYXJ0cyIsICJyZWZsZWN0aW9uTGVmdENvbG9yIiwgInJlZmxlY3Rp
b25SaWdodENvbG9yIiwgImVtaXNzaXZlTGVmdENvbG9yIiwgImVtaXNzaXZlUmlnaHRDb2xvciIs
ICJyZWZyYWN0aW9uTGVmdENvbG9yIiwgInJlZnJhY3Rpb25SaWdodENvbG9yIiwKKyAgICAgICAg
ICAgICAgICAidlJlZmxlY3Rpb25Qb3NpdGlvbiIsICJ2UmVmbGVjdGlvblNpemUiLAorICAgICAg
ICAgICAgICAgICJsb2dhcml0aG1pY0RlcHRoQ29uc3RhbnQiLCAidlRhbmdlbnRTcGFjZVBhcmFt
cyIsICJhbHBoYUN1dE9mZiIsICJib25lVGV4dHVyZVdpZHRoIgorICAgICAgICAgICAgXTsKKyAg
ICAgICAgICAgIHZhciBzYW1wbGVycyA9IFsiZGlmZnVzZVNhbXBsZXIiLCAiYW1iaWVudFNhbXBs
ZXIiLCAib3BhY2l0eVNhbXBsZXIiLCAicmVmbGVjdGlvbkN1YmVTYW1wbGVyIiwKKyAgICAgICAg
ICAgICAgICAicmVmbGVjdGlvbjJEU2FtcGxlciIsICJlbWlzc2l2ZVNhbXBsZXIiLCAic3BlY3Vs
YXJTYW1wbGVyIiwgImJ1bXBTYW1wbGVyIiwgImxpZ2h0bWFwU2FtcGxlciIsCisgICAgICAgICAg
ICAgICAgInJlZnJhY3Rpb25DdWJlU2FtcGxlciIsICJyZWZyYWN0aW9uMkRTYW1wbGVyIiwgImJv
bmVTYW1wbGVyIl07CisgICAgICAgICAgICB2YXIgdW5pZm9ybUJ1ZmZlcnMgPSBbIk1hdGVyaWFs
IiwgIlNjZW5lIl07CisgICAgICAgICAgICBpZiAoX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRp
b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbiJdKSB7CisgICAgICAgICAgICAgICAgX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
biJdLlByZXBhcmVVbmlmb3Jtcyh1bmlmb3JtcywgZGVmaW5lcyk7CisgICAgICAgICAgICAgICAg
X2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
X1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiJdLlByZXBhcmVTYW1wbGVycyhzYW1wbGVy
cywgZGVmaW5lcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZVVu
aWZvcm1zQW5kU2FtcGxlcnNMaXN0KHsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtc05hbWVzOiB1
bmlmb3JtcywKKyAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyc05hbWVzOiB1bmlmb3JtQnVm
ZmVycywKKyAgICAgICAgICAgICAgICBzYW1wbGVyczogc2FtcGxlcnMsCisgICAgICAgICAgICAg
ICAgZGVmaW5lczogZGVmaW5lcywKKyAgICAgICAgICAgICAgICBtYXhTaW11bHRhbmVvdXNMaWdo
dHM6IHRoaXMuX21heFNpbXVsdGFuZW91c0xpZ2h0cworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpZiAodGhpcy5jdXN0b21TaGFkZXJOYW1lUmVzb2x2ZSkgeworICAgICAgICAgICAgICAg
IHNoYWRlck5hbWUgPSB0aGlzLmN1c3RvbVNoYWRlck5hbWVSZXNvbHZlKHNoYWRlck5hbWUsIHVu
aWZvcm1zLCB1bmlmb3JtQnVmZmVycywgc2FtcGxlcnMsIGRlZmluZXMpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFyIGpvaW4gPSBkZWZpbmVzLnRvU3RyaW5nKCk7CisgICAgICAgICAg
ICB2YXIgcHJldmlvdXNFZmZlY3QgPSBzdWJNZXNoLmVmZmVjdDsKKyAgICAgICAgICAgIHZhciBl
ZmZlY3QgPSBzY2VuZS5nZXRFbmdpbmUoKS5jcmVhdGVFZmZlY3Qoc2hhZGVyTmFtZSwgeworICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnMsCisgICAgICAgICAgICAgICAgdW5pZm9y
bXNOYW1lczogdW5pZm9ybXMsCisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlcnNOYW1lczog
dW5pZm9ybUJ1ZmZlcnMsCisgICAgICAgICAgICAgICAgc2FtcGxlcnM6IHNhbXBsZXJzLAorICAg
ICAgICAgICAgICAgIGRlZmluZXM6IGpvaW4sCisgICAgICAgICAgICAgICAgZmFsbGJhY2tzOiBm
YWxsYmFja3MsCisgICAgICAgICAgICAgICAgb25Db21waWxlZDogdGhpcy5vbkNvbXBpbGVkLAor
ICAgICAgICAgICAgICAgIG9uRXJyb3I6IHRoaXMub25FcnJvciwKKyAgICAgICAgICAgICAgICBp
bmRleFBhcmFtZXRlcnM6IHsgbWF4U2ltdWx0YW5lb3VzTGlnaHRzOiB0aGlzLl9tYXhTaW11bHRh
bmVvdXNMaWdodHMsIG1heFNpbXVsdGFuZW91c01vcnBoVGFyZ2V0czogZGVmaW5lcy5OVU1fTU9S
UEhfSU5GTFVFTkNFUlMgfQorICAgICAgICAgICAgfSwgZW5naW5lKTsKKyAgICAgICAgICAgIGlm
IChlZmZlY3QpIHsKKyAgICAgICAgICAgICAgICAvLyBVc2UgcHJldmlvdXMgZWZmZWN0IHdoaWxl
IG5ldyBvbmUgaXMgY29tcGlsaW5nCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dTaGFk
ZXJIb3RTd2FwcGluZyAmJiBwcmV2aW91c0VmZmVjdCAmJiAhZWZmZWN0LmlzUmVhZHkoKSkgewor
ICAgICAgICAgICAgICAgICAgICBlZmZlY3QgPSBwcmV2aW91c0VmZmVjdDsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fcmVidWlsZEluUGFyYWxsZWwgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLm1hcmtBc1VucHJvY2Vzc2VkKCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChsaWdodERpc3Bvc2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyByZSByZWdpc3Rl
ciBpbiBjYXNlIGl0IHRha2VzIG1vcmUgdGhhbiBvbmUgZnJhbWUuCisgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZpbmVzLl9hcmVMaWdodHNEaXNwb3NlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3JlYnVpbGRJblBhcmFsbGVsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNjZW5l
LnJlc2V0Q2FjaGVkTWF0ZXJpYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgc3ViTWVzaC5zZXRF
ZmZlY3QoZWZmZWN0LCBkZWZpbmVzKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFVu
aWZvcm1MYXlvdXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFzdWJNZXNoLmVmZmVjdCB8fCAhc3ViTWVzaC5lZmZlY3QuaXNSZWFk
eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZGVm
aW5lcy5fcmVuZGVySWQgPSBzY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICB0aGlzLl93YXNQ
cmV2aW91c2x5UmVhZHkgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEJ1aWxkcyB0aGUgbWF0ZXJpYWwgVUJPIGxheW91dHMuCisgICAgICogVXNl
ZCBpbnRlcm5hbGx5IGR1cmluZyB0aGUgZWZmZWN0IHByZXBhcmF0aW9uLgorICAgICAqLworICAg
IFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLmJ1aWxkVW5pZm9ybUxheW91dCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgLy8gT3JkZXIgaXMgaW1wb3J0YW50ICEKKyAgICAgICAgdmFyIHVibyA9
IHRoaXMuX3VuaWZvcm1CdWZmZXI7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJkaWZmdXNlTGVm
dENvbG9yIiwgNCk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJkaWZmdXNlUmlnaHRDb2xvciIs
IDQpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgib3BhY2l0eVBhcnRzIiwgNCk7CisgICAgICAg
IHViby5hZGRVbmlmb3JtKCJyZWZsZWN0aW9uTGVmdENvbG9yIiwgNCk7CisgICAgICAgIHViby5h
ZGRVbmlmb3JtKCJyZWZsZWN0aW9uUmlnaHRDb2xvciIsIDQpOworICAgICAgICB1Ym8uYWRkVW5p
Zm9ybSgicmVmcmFjdGlvbkxlZnRDb2xvciIsIDQpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgi
cmVmcmFjdGlvblJpZ2h0Q29sb3IiLCA0KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oImVtaXNz
aXZlTGVmdENvbG9yIiwgNCk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJlbWlzc2l2ZVJpZ2h0
Q29sb3IiLCA0KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZEaWZmdXNlSW5mb3MiLCAyKTsK
KyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZBbWJpZW50SW5mb3MiLCAyKTsKKyAgICAgICAgdWJv
LmFkZFVuaWZvcm0oInZPcGFjaXR5SW5mb3MiLCAyKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0o
InZSZWZsZWN0aW9uSW5mb3MiLCAyKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZSZWZsZWN0
aW9uUG9zaXRpb24iLCAzKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZSZWZsZWN0aW9uU2l6
ZSIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidkVtaXNzaXZlSW5mb3MiLCAyKTsKKyAg
ICAgICAgdWJvLmFkZFVuaWZvcm0oInZMaWdodG1hcEluZm9zIiwgMik7CisgICAgICAgIHViby5h
ZGRVbmlmb3JtKCJ2U3BlY3VsYXJJbmZvcyIsIDIpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgi
dkJ1bXBJbmZvcyIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgiZGlmZnVzZU1hdHJpeCIs
IDE2KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oImFtYmllbnRNYXRyaXgiLCAxNik7CisgICAg
ICAgIHViby5hZGRVbmlmb3JtKCJvcGFjaXR5TWF0cml4IiwgMTYpOworICAgICAgICB1Ym8uYWRk
VW5pZm9ybSgicmVmbGVjdGlvbk1hdHJpeCIsIDE2KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0o
ImVtaXNzaXZlTWF0cml4IiwgMTYpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgibGlnaHRtYXBN
YXRyaXgiLCAxNik7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJzcGVjdWxhck1hdHJpeCIsIDE2
KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oImJ1bXBNYXRyaXgiLCAxNik7CisgICAgICAgIHVi
by5hZGRVbmlmb3JtKCJ2VGFuZ2VudFNwYWNlUGFyYW1zIiwgMik7CisgICAgICAgIHViby5hZGRV
bmlmb3JtKCJwb2ludFNpemUiLCAxKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInJlZnJhY3Rp
b25NYXRyaXgiLCAxNik7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2UmVmcmFjdGlvbkluZm9z
IiwgNCk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2U3BlY3VsYXJDb2xvciIsIDQpOworICAg
ICAgICB1Ym8uYWRkVW5pZm9ybSgidkVtaXNzaXZlQ29sb3IiLCAzKTsKKyAgICAgICAgdWJvLmFk
ZFVuaWZvcm0oInZpc2liaWxpdHkiLCAxKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZEaWZm
dXNlQ29sb3IiLCA0KTsKKyAgICAgICAgdWJvLmNyZWF0ZSgpOworICAgIH07CisgICAgLyoqCisg
ICAgICogVW5iaW5kcyB0aGUgbWF0ZXJpYWwgZnJvbSB0aGUgbWVzaAorICAgICAqLworICAgIFN0
YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKHRoaXMuX2FjdGl2ZUVmZmVjdCkgeworICAgICAgICAgICAgdmFyIG5lZWRGbGFnID0gZmFs
c2U7CisgICAgICAgICAgICBpZiAodGhpcy5fcmVmbGVjdGlvblRleHR1cmUgJiYgdGhpcy5fcmVm
bGVjdGlvblRleHR1cmUuaXNSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9h
Y3RpdmVFZmZlY3Quc2V0VGV4dHVyZSgicmVmbGVjdGlvbjJEU2FtcGxlciIsIG51bGwpOworICAg
ICAgICAgICAgICAgIG5lZWRGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZSAmJiB0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZS5p
c1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUVmZmVjdC5zZXRU
ZXh0dXJlKCJyZWZyYWN0aW9uMkRTYW1wbGVyIiwgbnVsbCk7CisgICAgICAgICAgICAgICAgbmVl
ZEZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5lZWRGbGFnKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5i
aW5kLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgc3VibWVz
aCB0byB0aGlzIG1hdGVyaWFsIGJ5IHByZXBhcmluZyB0aGUgZWZmZWN0IGFuZCBzaGFkZXIgdG8g
ZHJhdworICAgICAqIEBwYXJhbSB3b3JsZCBkZWZpbmVzIHRoZSB3b3JsZCB0cmFuc2Zvcm1hdGlv
biBtYXRyaXgKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIGNvbnRhaW5pbmcg
dGhlIHN1Ym1lc2gKKyAgICAgKiBAcGFyYW0gc3ViTWVzaCBkZWZpbmVzIHRoZSBzdWJtZXNoIHRv
IGJpbmQgdGhlIG1hdGVyaWFsIHRvCisgICAgICovCisgICAgU3RhbmRhcmRNYXRlcmlhbC5wcm90
b3R5cGUuYmluZEZvclN1Yk1lc2ggPSBmdW5jdGlvbiAod29ybGQsIG1lc2gsIHN1Yk1lc2gpIHsK
KyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICB2YXIgZGVmaW5l
cyA9IHN1Yk1lc2guX21hdGVyaWFsRGVmaW5lczsKKyAgICAgICAgaWYgKCFkZWZpbmVzKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVmZmVjdCA9IHN1Yk1l
c2guZWZmZWN0OworICAgICAgICBpZiAoIWVmZmVjdCkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2FjdGl2ZUVmZmVjdCA9IGVmZmVjdDsKKyAgICAgICAg
Ly8gTWF0cmljZXMKKyAgICAgICAgaWYgKCFkZWZpbmVzLklOU1RBTkNFUykgeworICAgICAgICAg
ICAgdGhpcy5iaW5kT25seVdvcmxkTWF0cml4KHdvcmxkKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBOb3JtYWwgTWF0cml4CisgICAgICAgIGlmIChkZWZpbmVzLk9CSkVDVFNQQUNFX05PUk1BTE1B
UCkgeworICAgICAgICAgICAgd29ybGQudG9Ob3JtYWxNYXRyaXgodGhpcy5fbm9ybWFsTWF0cml4
KTsKKyAgICAgICAgICAgIHRoaXMuYmluZE9ubHlOb3JtYWxNYXRyaXgodGhpcy5fbm9ybWFsTWF0
cml4KTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbXVzdFJlYmluZCA9IHRoaXMuX211c3RSZWJp
bmQoc2NlbmUsIGVmZmVjdCwgbWVzaC52aXNpYmlsaXR5KTsKKyAgICAgICAgLy8gQm9uZXMKKyAg
ICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRl
cmlhbEhlbHBlciJdLkJpbmRCb25lc1BhcmFtZXRlcnMobWVzaCwgZWZmZWN0KTsKKyAgICAgICAg
dmFyIHVibyA9IHRoaXMuX3VuaWZvcm1CdWZmZXI7CisgICAgICAgIGlmIChtdXN0UmViaW5kKSB7
CisgICAgICAgICAgICB1Ym8uYmluZFRvRWZmZWN0KGVmZmVjdCwgIk1hdGVyaWFsIik7CisgICAg
ICAgICAgICB0aGlzLmJpbmRWaWV3UHJvamVjdGlvbihlZmZlY3QpOworICAgICAgICAgICAgaWYg
KCF1Ym8udXNlVWJvIHx8ICF0aGlzLmlzRnJvemVuIHx8ICF1Ym8uaXNTeW5jKSB7CisgICAgICAg
ICAgICAgICAgaWYgKFN0YW5kYXJkTWF0ZXJpYWwuRnJlc25lbEVuYWJsZWQgJiYgZGVmaW5lcy5G
UkVTTkVMKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZyZXNuZWwKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuZGlmZnVzZUZyZXNuZWxQYXJhbWV0ZXJzICYmIHRoaXMuZGlmZnVzZUZy
ZXNuZWxQYXJhbWV0ZXJzLmlzRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdWJv
LnVwZGF0ZUNvbG9yNCgiZGlmZnVzZUxlZnRDb2xvciIsIHRoaXMuZGlmZnVzZUZyZXNuZWxQYXJh
bWV0ZXJzLmxlZnRDb2xvciwgdGhpcy5kaWZmdXNlRnJlc25lbFBhcmFtZXRlcnMucG93ZXIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUNvbG9yNCgiZGlmZnVzZVJpZ2h0Q29s
b3IiLCB0aGlzLmRpZmZ1c2VGcmVzbmVsUGFyYW1ldGVycy5yaWdodENvbG9yLCB0aGlzLmRpZmZ1
c2VGcmVzbmVsUGFyYW1ldGVycy5iaWFzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpcy5vcGFjaXR5RnJlc25lbFBhcmFtZXRlcnMgJiYgdGhpcy5v
cGFjaXR5RnJlc25lbFBhcmFtZXRlcnMuaXNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB1Ym8udXBkYXRlQ29sb3I0KCJvcGFjaXR5UGFydHMiLCBuZXcgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29sb3IzIl0odGhpcy5vcGFjaXR5RnJl
c25lbFBhcmFtZXRlcnMubGVmdENvbG9yLnRvTHVtaW5hbmNlKCksIHRoaXMub3BhY2l0eUZyZXNu
ZWxQYXJhbWV0ZXJzLnJpZ2h0Q29sb3IudG9MdW1pbmFuY2UoKSwgdGhpcy5vcGFjaXR5RnJlc25l
bFBhcmFtZXRlcnMuYmlhcyksIHRoaXMub3BhY2l0eUZyZXNuZWxQYXJhbWV0ZXJzLnBvd2VyKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWZs
ZWN0aW9uRnJlc25lbFBhcmFtZXRlcnMgJiYgdGhpcy5yZWZsZWN0aW9uRnJlc25lbFBhcmFtZXRl
cnMuaXNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlQ29sb3I0
KCJyZWZsZWN0aW9uTGVmdENvbG9yIiwgdGhpcy5yZWZsZWN0aW9uRnJlc25lbFBhcmFtZXRlcnMu
bGVmdENvbG9yLCB0aGlzLnJlZmxlY3Rpb25GcmVzbmVsUGFyYW1ldGVycy5wb3dlcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlQ29sb3I0KCJyZWZsZWN0aW9uUmlnaHRDb2xv
ciIsIHRoaXMucmVmbGVjdGlvbkZyZXNuZWxQYXJhbWV0ZXJzLnJpZ2h0Q29sb3IsIHRoaXMucmVm
bGVjdGlvbkZyZXNuZWxQYXJhbWV0ZXJzLmJpYXMpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlZnJhY3Rpb25GcmVzbmVsUGFyYW1ldGVycyAm
JiB0aGlzLnJlZnJhY3Rpb25GcmVzbmVsUGFyYW1ldGVycy5pc0VuYWJsZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHViby51cGRhdGVDb2xvcjQoInJlZnJhY3Rpb25MZWZ0Q29sb3IiLCB0
aGlzLnJlZnJhY3Rpb25GcmVzbmVsUGFyYW1ldGVycy5sZWZ0Q29sb3IsIHRoaXMucmVmcmFjdGlv
bkZyZXNuZWxQYXJhbWV0ZXJzLnBvd2VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHViby51
cGRhdGVDb2xvcjQoInJlZnJhY3Rpb25SaWdodENvbG9yIiwgdGhpcy5yZWZyYWN0aW9uRnJlc25l
bFBhcmFtZXRlcnMucmlnaHRDb2xvciwgdGhpcy5yZWZyYWN0aW9uRnJlc25lbFBhcmFtZXRlcnMu
Ymlhcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuZW1pc3NpdmVGcmVzbmVsUGFyYW1ldGVycyAmJiB0aGlzLmVtaXNzaXZlRnJlc25lbFBhcmFt
ZXRlcnMuaXNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlQ29s
b3I0KCJlbWlzc2l2ZUxlZnRDb2xvciIsIHRoaXMuZW1pc3NpdmVGcmVzbmVsUGFyYW1ldGVycy5s
ZWZ0Q29sb3IsIHRoaXMuZW1pc3NpdmVGcmVzbmVsUGFyYW1ldGVycy5wb3dlcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlQ29sb3I0KCJlbWlzc2l2ZVJpZ2h0Q29sb3IiLCB0
aGlzLmVtaXNzaXZlRnJlc25lbFBhcmFtZXRlcnMucmlnaHRDb2xvciwgdGhpcy5lbWlzc2l2ZUZy
ZXNuZWxQYXJhbWV0ZXJzLmJpYXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFRleHR1cmVzCisgICAgICAgICAgICAgICAgaWYg
KHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5f
ZGlmZnVzZVRleHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlhbC5EaWZmdXNlVGV4dHVyZUVuYWJsZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDIoInZEaWZmdXNlSW5m
b3MiLCB0aGlzLl9kaWZmdXNlVGV4dHVyZS5jb29yZGluYXRlc0luZGV4LCB0aGlzLl9kaWZmdXNl
VGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uQmluZFRleHR1
cmVNYXRyaXgodGhpcy5fZGlmZnVzZVRleHR1cmUsIHVibywgImRpZmZ1c2UiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4dHVyZS5oYXNBbHBoYSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiYWxwaGFDdXRPZmYiLCB0
aGlzLmFscGhhQ3V0T2ZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYW1iaWVudFRleHR1cmUg
JiYgU3RhbmRhcmRNYXRlcmlhbC5BbWJpZW50VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDIoInZBbWJpZW50SW5mb3MiLCB0aGlzLl9hbWJp
ZW50VGV4dHVyZS5jb29yZGluYXRlc0luZGV4LCB0aGlzLl9hbWJpZW50VGV4dHVyZS5sZXZlbCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uQmluZFRleHR1cmVNYXRyaXgodGhpcy5f
YW1iaWVudFRleHR1cmUsIHVibywgImFtYmllbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3BhY2l0eVRleHR1cmUgJiYgU3RhbmRhcmRN
YXRlcmlhbC5PcGFjaXR5VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHViby51cGRhdGVGbG9hdDIoInZPcGFjaXR5SW5mb3MiLCB0aGlzLl9vcGFjaXR5VGV4dHVyZS5j
b29yZGluYXRlc0luZGV4LCB0aGlzLl9vcGFjaXR5VGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEx
X19bIk1hdGVyaWFsSGVscGVyIl0uQmluZFRleHR1cmVNYXRyaXgodGhpcy5fb3BhY2l0eVRleHR1
cmUsIHVibywgIm9wYWNpdHkiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5fcmVmbGVjdGlvblRleHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlhbC5S
ZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHViby51
cGRhdGVGbG9hdDIoInZSZWZsZWN0aW9uSW5mb3MiLCB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZS5s
ZXZlbCwgdGhpcy5yb3VnaG5lc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0
ZU1hdHJpeCgicmVmbGVjdGlvbk1hdHJpeCIsIHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlLmdldFJl
ZmxlY3Rpb25UZXh0dXJlTWF0cml4KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX3JlZmxlY3Rpb25UZXh0dXJlLmJvdW5kaW5nQm94U2l6ZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBjdWJlVGV4dHVyZSA9IHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVWZWN0b3IzKCJ2UmVmbGVjdGlv
blBvc2l0aW9uIiwgY3ViZVRleHR1cmUuYm91bmRpbmdCb3hQb3NpdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZVZlY3RvcjMoInZSZWZsZWN0aW9uU2l6ZSIsIGN1
YmVUZXh0dXJlLmJvdW5kaW5nQm94U2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VtaXNz
aXZlVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLkVtaXNzaXZlVGV4dHVyZUVuYWJsZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDIoInZFbWlzc2l2ZUluZm9z
IiwgdGhpcy5fZW1pc3NpdmVUZXh0dXJlLmNvb3JkaW5hdGVzSW5kZXgsIHRoaXMuX2VtaXNzaXZl
VGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uQmluZFRleHR1
cmVNYXRyaXgodGhpcy5fZW1pc3NpdmVUZXh0dXJlLCB1Ym8sICJlbWlzc2l2ZSIpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9saWdodG1hcFRl
eHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlhbC5MaWdodG1hcFRleHR1cmVFbmFibGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlRmxvYXQyKCJ2TGlnaHRtYXBJbmZvcyIsIHRo
aXMuX2xpZ2h0bWFwVGV4dHVyZS5jb29yZGluYXRlc0luZGV4LCB0aGlzLl9saWdodG1hcFRleHR1
cmUubGV2ZWwpOworICAgICAgICAgICAgICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRUZXh0dXJlTWF0
cml4KHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSwgdWJvLCAibGlnaHRtYXAiKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3BlY3VsYXJUZXh0dXJl
ICYmIFN0YW5kYXJkTWF0ZXJpYWwuU3BlY3VsYXJUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUZsb2F0MigidlNwZWN1bGFySW5mb3MiLCB0aGlzLl9z
cGVjdWxhclRleHR1cmUuY29vcmRpbmF0ZXNJbmRleCwgdGhpcy5fc3BlY3VsYXJUZXh0dXJlLmxl
dmVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kVGV4dHVyZU1hdHJpeCh0
aGlzLl9zcGVjdWxhclRleHR1cmUsIHVibywgInNwZWN1bGFyIik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2J1bXBUZXh0dXJlICYmIHNjZW5l
LmdldEVuZ2luZSgpLmdldENhcHMoKS5zdGFuZGFyZERlcml2YXRpdmVzICYmIFN0YW5kYXJkTWF0
ZXJpYWwuQnVtcFRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1Ym8u
dXBkYXRlRmxvYXQzKCJ2QnVtcEluZm9zIiwgdGhpcy5fYnVtcFRleHR1cmUuY29vcmRpbmF0ZXNJ
bmRleCwgMS4wIC8gdGhpcy5fYnVtcFRleHR1cmUubGV2ZWwsIHRoaXMucGFyYWxsYXhTY2FsZUJp
YXMpOworICAgICAgICAgICAgICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRUZXh0dXJlTWF0cml4KHRo
aXMuX2J1bXBUZXh0dXJlLCB1Ym8sICJidW1wIik7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc2NlbmUuX21pcnJvcmVkQ2FtZXJhUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1Ym8udXBkYXRlRmxvYXQyKCJ2VGFuZ2VudFNwYWNlUGFyYW1zIiwgdGhpcy5faW52
ZXJ0Tm9ybWFsTWFwWCA/IDEuMCA6IC0xLjAsIHRoaXMuX2ludmVydE5vcm1hbE1hcFkgPyAxLjAg
OiAtMS4wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDIo
InZUYW5nZW50U3BhY2VQYXJhbXMiLCB0aGlzLl9pbnZlcnROb3JtYWxNYXBYID8gLTEuMCA6IDEu
MCwgdGhpcy5faW52ZXJ0Tm9ybWFsTWFwWSA/IC0xLjAgOiAxLjApOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
ICh0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLlJlZnJhY3Rpb25U
ZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlcHRoID0gMS4w
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZS5p
c0N1YmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlTWF0cml4KCJy
ZWZyYWN0aW9uTWF0cml4IiwgdGhpcy5fcmVmcmFjdGlvblRleHR1cmUuZ2V0UmVmbGVjdGlvblRl
eHR1cmVNYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Jl
ZnJhY3Rpb25UZXh0dXJlLmRlcHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlcHRoID0gdGhpcy5fcmVmcmFjdGlvblRleHR1cmUuZGVwdGg7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgdWJvLnVwZGF0ZUZsb2F0NCgidlJlZnJhY3Rpb25JbmZvcyIsIHRoaXMuX3JlZnJh
Y3Rpb25UZXh0dXJlLmxldmVsLCB0aGlzLmluZGV4T2ZSZWZyYWN0aW9uLCBkZXB0aCwgdGhpcy5p
bnZlcnRSZWZyYWN0aW9uWSA/IC0xIDogMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gUG9pbnQgc2l6ZQorICAgICAgICAgICAg
ICAgIGlmICh0aGlzLnBvaW50c0Nsb3VkKSB7CisgICAgICAgICAgICAgICAgICAgIHViby51cGRh
dGVGbG9hdCgicG9pbnRTaXplIiwgdGhpcy5wb2ludFNpemUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoZGVmaW5lcy5TUEVDVUxBUlRFUk0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgdWJvLnVwZGF0ZUNvbG9yNCgidlNwZWN1bGFyQ29sb3IiLCB0aGlzLnNwZWN1bGFy
Q29sb3IsIHRoaXMuc3BlY3VsYXJQb3dlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHViby51cGRhdGVDb2xvcjMoInZFbWlzc2l2ZUNvbG9yIiwgU3RhbmRhcmRNYXRlcmlh
bC5FbWlzc2l2ZVRleHR1cmVFbmFibGVkID8gdGhpcy5lbWlzc2l2ZUNvbG9yIDogX01hdGhzX21h
dGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29sb3IzIl0uQmxhY2tSZWFk
T25seSk7CisgICAgICAgICAgICAgICAgLy8gVmlzaWJpbGl0eQorICAgICAgICAgICAgICAgIHVi
by51cGRhdGVGbG9hdCgidmlzaWJpbGl0eSIsIG1lc2gudmlzaWJpbGl0eSk7CisgICAgICAgICAg
ICAgICAgLy8gRGlmZnVzZQorICAgICAgICAgICAgICAgIHViby51cGRhdGVDb2xvcjQoInZEaWZm
dXNlQ29sb3IiLCB0aGlzLmRpZmZ1c2VDb2xvciwgdGhpcy5hbHBoYSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAvLyBUZXh0dXJlcworICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1cmVz
RW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4dHVyZSAmJiBT
dGFuZGFyZE1hdGVyaWFsLkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAg
ICAgICBlZmZlY3Quc2V0VGV4dHVyZSgiZGlmZnVzZVNhbXBsZXIiLCB0aGlzLl9kaWZmdXNlVGV4
dHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hbWJp
ZW50VGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLkFtYmllbnRUZXh0dXJlRW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgiYW1iaWVudFNhbXBsZXIiLCB0
aGlzLl9hbWJpZW50VGV4dHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9vcGFjaXR5VGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLk9wYWNpdHlUZXh0
dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgib3Bh
Y2l0eVNhbXBsZXIiLCB0aGlzLl9vcGFjaXR5VGV4dHVyZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSAmJiBTdGFuZGFyZE1h
dGVyaWFsLlJlZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fcmVmbGVjdGlvblRleHR1cmUuaXNDdWJlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlZmZlY3Quc2V0VGV4dHVyZSgicmVmbGVjdGlvbkN1YmVTYW1wbGVyIiwgdGhpcy5fcmVm
bGVjdGlvblRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInJl
ZmxlY3Rpb24yRFNhbXBsZXIiLCB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMu
X2VtaXNzaXZlVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLkVtaXNzaXZlVGV4dHVyZUVuYWJs
ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoImVtaXNzaXZlU2Ft
cGxlciIsIHRoaXMuX2VtaXNzaXZlVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9saWdodG1hcFRleHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlhbC5M
aWdodG1hcFRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRU
ZXh0dXJlKCJsaWdodG1hcFNhbXBsZXIiLCB0aGlzLl9saWdodG1hcFRleHR1cmUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3BlY3VsYXJUZXh0dXJlICYm
IFN0YW5kYXJkTWF0ZXJpYWwuU3BlY3VsYXJUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAg
ICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgic3BlY3VsYXJTYW1wbGVyIiwgdGhpcy5fc3BlY3Vs
YXJUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMu
X2J1bXBUZXh0dXJlICYmIHNjZW5lLmdldEVuZ2luZSgpLmdldENhcHMoKS5zdGFuZGFyZERlcml2
YXRpdmVzICYmIFN0YW5kYXJkTWF0ZXJpYWwuQnVtcFRleHR1cmVFbmFibGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJidW1wU2FtcGxlciIsIHRoaXMuX2J1bXBU
ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Jl
ZnJhY3Rpb25UZXh0dXJlICYmIFN0YW5kYXJkTWF0ZXJpYWwuUmVmcmFjdGlvblRleHR1cmVFbmFi
bGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBkZXB0aCA9IDEuMDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlLmlzQ3ViZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInJlZnJhY3Rpb25DdWJlU2FtcGxlciIs
IHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRU
ZXh0dXJlKCJyZWZyYWN0aW9uMkRTYW1wbGVyIiwgdGhpcy5fcmVmcmFjdGlvblRleHR1cmUpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gQ2xpcCBwbGFuZQorICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRDbGlwUGxh
bmUoZWZmZWN0LCBzY2VuZSk7CisgICAgICAgICAgICAvLyBDb2xvcnMKKyAgICAgICAgICAgIHNj
ZW5lLmFtYmllbnRDb2xvci5tdWx0aXBseVRvUmVmKHRoaXMuYW1iaWVudENvbG9yLCB0aGlzLl9n
bG9iYWxBbWJpZW50Q29sb3IpOworICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRFeWVQb3NpdGlvbihl
ZmZlY3QsIHNjZW5lKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRDb2xvcjMoInZBbWJpZW50Q29s
b3IiLCB0aGlzLl9nbG9iYWxBbWJpZW50Q29sb3IpOworICAgICAgICB9CisgICAgICAgIGlmICht
dXN0UmViaW5kIHx8ICF0aGlzLmlzRnJvemVuKSB7CisgICAgICAgICAgICAvLyBMaWdodHMKKyAg
ICAgICAgICAgIGlmIChzY2VuZS5saWdodHNFbmFibGVkICYmICF0aGlzLl9kaXNhYmxlTGlnaHRp
bmcpIHsKKyAgICAgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uQmluZExpZ2h0cyhzY2VuZSwgbWVzaCwgZWZm
ZWN0LCBkZWZpbmVzLCB0aGlzLl9tYXhTaW11bHRhbmVvdXNMaWdodHMsIGZhbHNlLCB0aGlzLl9y
ZWJ1aWxkSW5QYXJhbGxlbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBWaWV3Cisg
ICAgICAgICAgICBpZiAoc2NlbmUuZm9nRW5hYmxlZCAmJiBtZXNoLmFwcGx5Rm9nICYmIHNjZW5l
LmZvZ01vZGUgIT09IF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZSJd
LkZPR01PREVfTk9ORSB8fCB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSB8fCB0aGlzLl9yZWZyYWN0
aW9uVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuYmluZFZpZXcoZWZmZWN0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZvZworICAgICAgICAgICAgX21hdGVyaWFsSGVs
cGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRG
b2dQYXJhbWV0ZXJzKHNjZW5lLCBtZXNoLCBlZmZlY3QpOworICAgICAgICAgICAgLy8gTW9ycGgg
dGFyZ2V0cworICAgICAgICAgICAgaWYgKGRlZmluZXMuTlVNX01PUlBIX0lORkxVRU5DRVJTKSB7
CisgICAgICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRNb3JwaFRhcmdldFBhcmFtZXRlcnMobWVzaCwg
ZWZmZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIExvZy4gZGVwdGgKKyAgICAg
ICAgICAgIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0
ZXJpYWxIZWxwZXIiXS5CaW5kTG9nRGVwdGgoZGVmaW5lcywgZWZmZWN0LCBzY2VuZSk7CisgICAg
ICAgICAgICAvLyBpbWFnZSBwcm9jZXNzaW5nCisgICAgICAgICAgICBpZiAodGhpcy5faW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiAhdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbi5hcHBseUJ5UG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9pbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uLmJpbmQodGhpcy5fYWN0aXZlRWZmZWN0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB1Ym8udXBkYXRlKCk7CisgICAgICAgIHRoaXMuX2Fm
dGVyQmluZChtZXNoLCB0aGlzLl9hY3RpdmVFZmZlY3QpOworICAgIH07CisgICAgLyoqCisgICAg
ICogR2V0IHRoZSBsaXN0IG9mIGFuaW1hdGFibGVzIGluIHRoZSBtYXRlcmlhbC4KKyAgICAgKiBA
cmV0dXJucyB0aGUgbGlzdCBvZiBhbmltYXRhYmxlcyBvYmplY3QgdXNlZCBpbiB0aGUgbWF0ZXJp
YWwKKyAgICAgKi8KKyAgICBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZS5nZXRBbmltYXRhYmxl
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTsKKyAgICAgICAgaWYg
KHRoaXMuX2RpZmZ1c2VUZXh0dXJlICYmIHRoaXMuX2RpZmZ1c2VUZXh0dXJlLmFuaW1hdGlvbnMg
JiYgdGhpcy5fZGlmZnVzZVRleHR1cmUuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICByZXN1bHRzLnB1c2godGhpcy5fZGlmZnVzZVRleHR1cmUpOworICAgICAgICB9CisgICAg
ICAgIGlmICh0aGlzLl9hbWJpZW50VGV4dHVyZSAmJiB0aGlzLl9hbWJpZW50VGV4dHVyZS5hbmlt
YXRpb25zICYmIHRoaXMuX2FtYmllbnRUZXh0dXJlLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgewor
ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMuX2FtYmllbnRUZXh0dXJlKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5fb3BhY2l0eVRleHR1cmUgJiYgdGhpcy5fb3BhY2l0eVRleHR1
cmUuYW5pbWF0aW9ucyAmJiB0aGlzLl9vcGFjaXR5VGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9vcGFjaXR5VGV4dHVyZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlICYmIHRoaXMuX3Jl
ZmxlY3Rpb25UZXh0dXJlLmFuaW1hdGlvbnMgJiYgdGhpcy5fcmVmbGVjdGlvblRleHR1cmUuYW5p
bWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fcmVm
bGVjdGlvblRleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRl
eHR1cmUgJiYgdGhpcy5fZW1pc3NpdmVUZXh0dXJlLmFuaW1hdGlvbnMgJiYgdGhpcy5fZW1pc3Np
dmVUZXh0dXJlLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgcmVzdWx0cy5w
dXNoKHRoaXMuX2VtaXNzaXZlVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X3NwZWN1bGFyVGV4dHVyZSAmJiB0aGlzLl9zcGVjdWxhclRleHR1cmUuYW5pbWF0aW9ucyAmJiB0
aGlzLl9zcGVjdWxhclRleHR1cmUuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICAgICAg
ICByZXN1bHRzLnB1c2godGhpcy5fc3BlY3VsYXJUZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAodGhpcy5fYnVtcFRleHR1cmUgJiYgdGhpcy5fYnVtcFRleHR1cmUuYW5pbWF0aW9ucyAm
JiB0aGlzLl9idW1wVGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAg
IHJlc3VsdHMucHVzaCh0aGlzLl9idW1wVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSAmJiB0aGlzLl9saWdodG1hcFRleHR1cmUuYW5pbWF0aW9u
cyAmJiB0aGlzLl9saWdodG1hcFRleHR1cmUuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAg
ICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fbGlnaHRtYXBUZXh0dXJlKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5fcmVmcmFjdGlvblRleHR1cmUgJiYgdGhpcy5fcmVmcmFjdGlvblRl
eHR1cmUuYW5pbWF0aW9ucyAmJiB0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZS5hbmltYXRpb25zLmxl
bmd0aCA+IDApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9yZWZyYWN0aW9uVGV4
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBhY3RpdmUgdGV4dHVyZXMgZnJvbSB0aGUgbWF0ZXJpYWwKKyAg
ICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB0ZXh0dXJlcworICAgICAqLworICAgIFN0YW5kYXJk
TWF0ZXJpYWwucHJvdG90eXBlLmdldEFjdGl2ZVRleHR1cmVzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgYWN0aXZlVGV4dHVyZXMgPSBfc3VwZXIucHJvdG90eXBlLmdldEFjdGl2ZVRleHR1
cmVzLmNhbGwodGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4dHVyZSkgeworICAg
ICAgICAgICAgYWN0aXZlVGV4dHVyZXMucHVzaCh0aGlzLl9kaWZmdXNlVGV4dHVyZSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2FtYmllbnRUZXh0dXJlKSB7CisgICAgICAgICAgICBh
Y3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMuX2FtYmllbnRUZXh0dXJlKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodGhpcy5fb3BhY2l0eVRleHR1cmUpIHsKKyAgICAgICAgICAgIGFjdGl2ZVRleHR1
cmVzLnB1c2godGhpcy5fb3BhY2l0eVRleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSkgeworICAgICAgICAgICAgYWN0aXZlVGV4dHVyZXMucHVz
aCh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X2VtaXNzaXZlVGV4dHVyZSkgeworICAgICAgICAgICAgYWN0aXZlVGV4dHVyZXMucHVzaCh0aGlz
Ll9lbWlzc2l2ZVRleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9zcGVjdWxh
clRleHR1cmUpIHsKKyAgICAgICAgICAgIGFjdGl2ZVRleHR1cmVzLnB1c2godGhpcy5fc3BlY3Vs
YXJUZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYnVtcFRleHR1cmUpIHsK
KyAgICAgICAgICAgIGFjdGl2ZVRleHR1cmVzLnB1c2godGhpcy5fYnVtcFRleHR1cmUpOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLl9saWdodG1hcFRleHR1cmUpIHsKKyAgICAgICAgICAg
IGFjdGl2ZVRleHR1cmVzLnB1c2godGhpcy5fbGlnaHRtYXBUZXh0dXJlKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5fcmVmcmFjdGlvblRleHR1cmUpIHsKKyAgICAgICAgICAgIGFjdGl2
ZVRleHR1cmVzLnB1c2godGhpcy5fcmVmcmFjdGlvblRleHR1cmUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBhY3RpdmVUZXh0dXJlczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNp
ZmllcyBpZiB0aGUgbWF0ZXJpYWwgdXNlcyBhIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gdGV4dHVy
ZSBkZWZpbmVzIHRoZSB0ZXh0dXJlIHRvIGNoZWNrIGFnYWluc3QgdGhlIG1hdGVyaWFsCisgICAg
ICogQHJldHVybnMgYSBib29sZWFuIHNwZWNpZnlpbmcgaWYgdGhlIG1hdGVyaWFsIHVzZXMgdGhl
IHRleHR1cmUKKyAgICAgKi8KKyAgICBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZS5oYXNUZXh0
dXJlID0gZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAgICAgICAgaWYgKF9zdXBlci5wcm90b3R5cGUu
aGFzVGV4dHVyZS5jYWxsKHRoaXMsIHRleHR1cmUpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZGlmZnVzZVRleHR1cmUgPT09IHRleHR1
cmUpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLl9hbWJpZW50VGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29wYWNpdHlUZXh0dXJlID09PSB0ZXh0
dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fcmVmbGVjdGlvblRleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRleHR1cmUgPT09
IHRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9zcGVjdWxhclRleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9idW1wVGV4dHVyZSA9PT0g
dGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJl
ID09PSB0ZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUg
bWF0ZXJpYWwKKyAgICAgKiBAcGFyYW0gZm9yY2VEaXNwb3NlRWZmZWN0IHNwZWNpZmllcyBpZiBl
ZmZlY3RzIHNob3VsZCBiZSBmb3JjZWZ1bGx5IGRpc3Bvc2VkCisgICAgICogQHBhcmFtIGZvcmNl
RGlzcG9zZVRleHR1cmVzIHNwZWNpZmllcyBpZiB0ZXh0dXJlcyBzaG91bGQgYmUgZm9yY2VmdWxs
eSBkaXNwb3NlZAorICAgICAqLworICAgIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLmRpc3Bv
c2UgPSBmdW5jdGlvbiAoZm9yY2VEaXNwb3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcykg
eworICAgICAgICBpZiAoZm9yY2VEaXNwb3NlVGV4dHVyZXMpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9kaWZmdXNlVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2RpZmZ1c2VUZXh0
dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9hbWJp
ZW50VGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2FtYmllbnRUZXh0dXJlLmRpc3Bv
c2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9vcGFjaXR5VGV4dHVy
ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX29wYWNpdHlUZXh0dXJlLmRpc3Bvc2UoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRleHR1cmUpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9lbWlzc2l2ZVRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHRoaXMuX3NwZWN1bGFyVGV4dHVyZSkgeworICAgICAgICAgICAg
ICAgIHRoaXMuX3NwZWN1bGFyVGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodGhpcy5fYnVtcFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9i
dW1wVGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhp
cy5fbGlnaHRtYXBUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRtYXBUZXh0
dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9yZWZy
YWN0aW9uVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJl
LmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5f
aW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdPYnNl
cnZlcikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5v
blVwZGF0ZVBhcmFtZXRlcnMucmVtb3ZlKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ09ic2VydmVyKTsK
KyAgICAgICAgfQorICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzLCBm
b3JjZURpc3Bvc2VFZmZlY3QsIGZvcmNlRGlzcG9zZVRleHR1cmVzKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIE1ha2VzIGEgZHVwbGljYXRlIG9mIHRoZSBtYXRlcmlhbCwgYW5kIGdpdmVzIGl0
IGEgbmV3IG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuZXcgbmFtZSBmb3Ig
dGhlIGR1cGxpY2F0ZWQgbWF0ZXJpYWwKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xvbmVkIG1hdGVy
aWFsCisgICAgICovCisgICAgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5j
dGlvbiAobmFtZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgcmVz
dWx0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJp
YWxpemF0aW9uSGVscGVyIl0uQ2xvbmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN0YW5kYXJk
TWF0ZXJpYWwobmFtZSwgX3RoaXMuZ2V0U2NlbmUoKSk7IH0sIHRoaXMpOworICAgICAgICByZXN1
bHQubmFtZSA9IG5hbWU7CisgICAgICAgIHJlc3VsdC5pZCA9IG5hbWU7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoaXMgbWF0ZXJp
YWwgaW4gYSBKU09OIHJlcHJlc2VudGF0aW9uCisgICAgICogQHJldHVybnMgdGhlIHNlcmlhbGl6
ZWQgbWF0ZXJpYWwgb2JqZWN0CisgICAgICovCisgICAgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5
cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0u
U2VyaWFsaXplKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHN0YW5k
YXJkIG1hdGVyaWFsIGZyb20gcGFyc2VkIG1hdGVyaWFsIGRhdGEKKyAgICAgKiBAcGFyYW0gc291
cmNlIGRlZmluZXMgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdGVyaWFsCisgICAg
ICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0g
cm9vdFVybCBkZWZpbmVzIHRoZSByb290IFVSTCB0byB1c2UgdG8gbG9hZCB0ZXh0dXJlcyBhbmQg
cmVsYXRpdmUgZGVwZW5kZW5jaWVzCisgICAgICogQHJldHVybnMgYSBuZXcgc3RhbmRhcmQgbWF0
ZXJpYWwKKyAgICAgKi8KKyAgICBTdGFuZGFyZE1hdGVyaWFsLlBhcnNlID0gZnVuY3Rpb24gKHNv
dXJjZSwgc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlBhcnNl
KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdGFuZGFyZE1hdGVyaWFsKHNvdXJjZS5uYW1lLCBz
Y2VuZSk7IH0sIHNvdXJjZSwgc2NlbmUsIHJvb3RVcmwpOworICAgIH07CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwsICJEaWZmdXNlVGV4dHVyZUVuYWJsZWQiLCB7
CisgICAgICAgIC8vIEZsYWdzIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgYSB0eXBlIG9mIHRl
eHR1cmUgZm9yIGFsbCBTdGFuZGFyZCBNYXRlcmlhbHMKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEFyZSBkaWZmdXNlIHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX21h
dGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVyaWFsRmxhZ3Mi
XS5EaWZmdXNlVGV4dHVyZUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCA9IHZh
bHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRh
cmRNYXRlcmlhbCwgIkFtYmllbnRUZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEFyZSBhbWJpZW50IHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVyaWFs
RmxhZ3MiXS5BbWJpZW50VGV4dHVyZUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkFtYmllbnRUZXh0dXJlRW5hYmxl
ZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
U3RhbmRhcmRNYXRlcmlhbCwgIk9wYWNpdHlUZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEFyZSBvcGFjaXR5IHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0
aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1h
dGVyaWFsRmxhZ3MiXS5PcGFjaXR5VGV4dHVyZUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBfbWF0ZXJpYWxGbGFnc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLk9wYWNpdHlUZXh0dXJl
RW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoU3RhbmRhcmRNYXRlcmlhbCwgIlJlZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEFyZSByZWZsZWN0aW9uIHRleHR1cmVzIGVuYWJsZWQgaW4g
dGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE0X19bIk1hdGVyaWFsRmxhZ3MiXS5SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQ7CisgICAg
ICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBfbWF0
ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJd
LlJlZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbCwgIkVtaXNzaXZlVGV4dHVy
ZUVuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBcmUgZW1pc3NpdmUgdGV4dHVy
ZXMgZW5hYmxlZCBpbiB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkVtaXNzaXZlVGV4dHVyZUVu
YWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0
ZXJpYWxGbGFncyJdLkVtaXNzaXZlVGV4dHVyZUVuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwsICJTcGVj
dWxhclRleHR1cmVFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQXJlIHNwZWN1
bGFyIHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX21hdGVyaWFsRmxh
Z3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVyaWFsRmxhZ3MiXS5TcGVjdWxh
clRleHR1cmVFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE0X19bIk1hdGVyaWFsRmxhZ3MiXS5TcGVjdWxhclRleHR1cmVFbmFibGVkID0gdmFsdWU7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZE1hdGVy
aWFsLCAiQnVtcFRleHR1cmVFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQXJl
IGJ1bXAgdGV4dHVyZXMgZW5hYmxlZCBpbiB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBfbWF0ZXJpYWxG
bGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkJ1bXBU
ZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
NF9fWyJNYXRlcmlhbEZsYWdzIl0uQnVtcFRleHR1cmVFbmFibGVkID0gdmFsdWU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZE1hdGVyaWFsLCAi
TGlnaHRtYXBUZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFyZSBs
aWdodG1hcCB0ZXh0dXJlcyBlbmFibGVkIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9tYXRlcmlh
bEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbEZsYWdzIl0uTGln
aHRtYXBUZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNF9fWyJNYXRlcmlhbEZsYWdzIl0uTGlnaHRtYXBUZXh0dXJlRW5hYmxlZCA9IHZhbHVl
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRN
YXRlcmlhbCwgIlJlZnJhY3Rpb25UZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEFyZSByZWZyYWN0aW9uIHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9u
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVy
aWFsRmxhZ3MiXS5SZWZyYWN0aW9uVGV4dHVyZUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBfbWF0ZXJpYWxGbGFnc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLlJlZnJhY3Rpb25UZXh0
dXJlRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbCwgIkNvbG9yR3JhZGluZ1RleHR1cmVFbmFibGVkIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogQXJlIGNvbG9yIGdyYWRpbmcgdGV4dHVyZXMgZW5h
YmxlZCBpbiB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkNvbG9yR3JhZGluZ1RleHR1cmVFbmFi
bGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVy
aWFsRmxhZ3MiXS5Db2xvckdyYWRpbmdUZXh0dXJlRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbCwgIkZy
ZXNuZWxFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQXJlIGZyZXNuZWxzIGVu
YWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE0X19bIk1hdGVyaWFsRmxhZ3MiXS5GcmVzbmVsRW5hYmxlZDsKKyAgICAg
ICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIF9tYXRl
cmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbEZsYWdzIl0u
RnJlc25lbEVuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
QXNUZXh0dXJlIl0pKCJkaWZmdXNlVGV4dHVyZSIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5w
cm90b3R5cGUsICJfZGlmZnVzZVRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVy
dHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0FuZE1pc2NEaXJ0eSIpCisgICAgXSwg
U3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJkaWZmdXNlVGV4dHVyZSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCJhbWJpZW50VGV4dHVyZSIpCisgICAgXSwgU3RhbmRh
cmRNYXRlcmlhbC5wcm90b3R5cGUsICJfYW1iaWVudFRleHR1cmUiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4
cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAg
ICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgImFtYmllbnRUZXh0dXJlIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoIm9wYWNpdHlUZXh0dXJlIikKKyAgICBdLCBT
dGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9vcGFjaXR5VGV4dHVyZSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzQW5kTWlz
Y0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIm9wYWNpdHlUZXh0
dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoInJlZmxlY3Rpb25UZXh0
dXJlIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9yZWZsZWN0aW9uVGV4
dHVyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNo
ZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAi
cmVmbGVjdGlvblRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgi
ZW1pc3NpdmVUZXh0dXJlIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9l
bWlzc2l2ZVRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJr
QWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnBy
b3RvdHlwZSwgImVtaXNzaXZlVGV4dHVyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0
dXJlIl0pKCJzcGVjdWxhclRleHR1cmUiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90
eXBlLCAiX3NwZWN1bGFyVGV4dHVyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJd
KSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFN0YW5kYXJkTWF0
ZXJpYWwucHJvdG90eXBlLCAic3BlY3VsYXJUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emVBc1RleHR1cmUiXSkoImJ1bXBUZXh0dXJlIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnBy
b3RvdHlwZSwgIl9idW1wVGV4dHVyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJd
KSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFN0YW5kYXJkTWF0
ZXJpYWwucHJvdG90eXBlLCAiYnVtcFRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFz
VGV4dHVyZSJdKSgibGlnaHRtYXBUZXh0dXJlIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnBy
b3RvdHlwZSwgIl9saWdodG1hcFRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVy
dHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFy
ZE1hdGVyaWFsLnByb3RvdHlwZSwgImxpZ2h0bWFwVGV4dHVyZSIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplQXNUZXh0dXJlIl0pKCJyZWZyYWN0aW9uVGV4dHVyZSIpCisgICAgXSwgU3RhbmRhcmRN
YXRlcmlhbC5wcm90b3R5cGUsICJfcmVmcmFjdGlvblRleHR1cmUiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4
cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAg
ICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgInJlZnJhY3Rpb25UZXh0dXJlIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemVBc0NvbG9yMyJdKSgiYW1iaWVudCIpCisgICAgXSwgU3RhbmRh
cmRNYXRlcmlhbC5wcm90b3R5cGUsICJhbWJpZW50Q29sb3IiLCB2b2lkIDApOworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZUFzQ29sb3IzIl0pKCJkaWZmdXNlIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3Rv
dHlwZSwgImRpZmZ1c2VDb2xvciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNDb2xvcjMiXSko
InNwZWN1bGFyIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgInNwZWN1bGFy
Q29sb3IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzQ29sb3IzIl0pKCJlbWlzc2l2ZSIpCisg
ICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJlbWlzc2l2ZUNvbG9yIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBl
LCAic3BlY3VsYXJQb3dlciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCJ1c2VBbHBoYUZy
b21EaWZmdXNlVGV4dHVyZSIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJf
dXNlQWxwaGFGcm9tRGlmZnVzZVRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVy
dHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFy
ZE1hdGVyaWFsLnByb3RvdHlwZSwgInVzZUFscGhhRnJvbURpZmZ1c2VUZXh0dXJlIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoInVzZUVtaXNzaXZlQXNJbGx1bWluYXRpb24iKQorICAgIF0s
IFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX3VzZUVtaXNzaXZlQXNJbGx1bWluYXRpb24i
LCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVj
b3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgInVzZUVt
aXNzaXZlQXNJbGx1bWluYXRpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgibGlua0Vt
aXNzaXZlV2l0aERpZmZ1c2UiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAi
X2xpbmtFbWlzc2l2ZVdpdGhEaWZmdXNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5
Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgU3RhbmRhcmRN
YXRlcmlhbC5wcm90b3R5cGUsICJsaW5rRW1pc3NpdmVXaXRoRGlmZnVzZSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCJ1c2VTcGVjdWxhck92ZXJBbHBoYSIpCisgICAgXSwgU3RhbmRhcmRN
YXRlcmlhbC5wcm90b3R5cGUsICJfdXNlU3BlY3VsYXJPdmVyQWxwaGEiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
ImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikK
KyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgInVzZVNwZWN1bGFyT3ZlckFscGhh
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoInVzZVJlZmxlY3Rpb25PdmVyQWxwaGEiKQor
ICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX3VzZVJlZmxlY3Rpb25PdmVyQWxw
aGEiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVz
QXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgInVz
ZVJlZmxlY3Rpb25PdmVyQWxwaGEiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgiZGlzYWJs
ZUxpZ2h0aW5nIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9kaXNhYmxl
TGlnaHRpbmciLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3Vi
TWVzaGVzQXNMaWdodHNEaXJ0eSIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUs
ICJkaXNhYmxlTGlnaHRpbmciLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgidXNlT2JqZWN0
U3BhY2VOb3JtYWxNYXAiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX3Vz
ZU9iamVjdFNwYWNlTm9ybWFsTWFwIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0p
KCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgU3RhbmRhcmRNYXRl
cmlhbC5wcm90b3R5cGUsICJ1c2VPYmplY3RTcGFjZU5vcm1hbE1hcCIsIHZvaWQgMCk7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAg
ICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
c2VyaWFsaXplIl0pKCJ1c2VQYXJhbGxheCIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90
b3R5cGUsICJfdXNlUGFyYWxsYXgiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSko
Il9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVy
aWFsLnByb3RvdHlwZSwgInVzZVBhcmFsbGF4Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
InVzZVBhcmFsbGF4T2NjbHVzaW9uIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlw
ZSwgIl91c2VQYXJhbGxheE9jY2x1c2lvbiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0
eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFN0YW5kYXJk
TWF0ZXJpYWwucHJvdG90eXBlLCAidXNlUGFyYWxsYXhPY2NsdXNpb24iLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJwYXJh
bGxheFNjYWxlQmlhcyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCJyb3VnaG5lc3MiKQor
ICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX3JvdWdobmVzcyIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGly
dHkiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAicm91Z2huZXNzIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90
eXBlLCAiaW5kZXhPZlJlZnJhY3Rpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisg
ICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJpbnZlcnRSZWZyYWN0aW9uWSIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3Rv
dHlwZSwgImFscGhhQ3V0T2ZmIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoInVzZUxpZ2h0
bWFwQXNTaGFkb3dtYXAiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX3Vz
ZUxpZ2h0bWFwQXNTaGFkb3dtYXAiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSko
Il9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVy
aWFsLnByb3RvdHlwZSwgInVzZUxpZ2h0bWFwQXNTaGFkb3dtYXAiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZUFzRnJlc25lbFBhcmFtZXRlcnMiXSkoImRpZmZ1c2VGcmVzbmVsUGFyYW1ldGVycyIp
CisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJfZGlmZnVzZUZyZXNuZWxQYXJh
bWV0ZXJzIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1l
c2hlc0FzRnJlc25lbERpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwg
ImRpZmZ1c2VGcmVzbmVsUGFyYW1ldGVycyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNGcmVz
bmVsUGFyYW1ldGVycyJdKSgib3BhY2l0eUZyZXNuZWxQYXJhbWV0ZXJzIikKKyAgICBdLCBTdGFu
ZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9vcGFjaXR5RnJlc25lbFBhcmFtZXRlcnMiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNGcmVzbmVs
QW5kTWlzY0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIm9wYWNp
dHlGcmVzbmVsUGFyYW1ldGVycyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNGcmVzbmVsUGFy
YW1ldGVycyJdKSgicmVmbGVjdGlvbkZyZXNuZWxQYXJhbWV0ZXJzIikKKyAgICBdLCBTdGFuZGFy
ZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9yZWZsZWN0aW9uRnJlc25lbFBhcmFtZXRlcnMiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNGcmVzbmVs
RGlydHkiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAicmVmbGVjdGlvbkZy
ZXNuZWxQYXJhbWV0ZXJzIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0ZyZXNuZWxQYXJhbWV0
ZXJzIl0pKCJyZWZyYWN0aW9uRnJlc25lbFBhcmFtZXRlcnMiKQorICAgIF0sIFN0YW5kYXJkTWF0
ZXJpYWwucHJvdG90eXBlLCAiX3JlZnJhY3Rpb25GcmVzbmVsUGFyYW1ldGVycyIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc0ZyZXNuZWxEaXJ0
eSIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJyZWZyYWN0aW9uRnJlc25l
bFBhcmFtZXRlcnMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzRnJlc25lbFBhcmFtZXRlcnMi
XSkoImVtaXNzaXZlRnJlc25lbFBhcmFtZXRlcnMiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwu
cHJvdG90eXBlLCAiX2VtaXNzaXZlRnJlc25lbFBhcmFtZXRlcnMiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4
cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNGcmVzbmVsRGlydHkiKQorICAg
IF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiZW1pc3NpdmVGcmVzbmVsUGFyYW1ldGVy
cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCJ1c2VSZWZsZWN0aW9uRnJlc25lbEZyb21T
cGVjdWxhciIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJfdXNlUmVmbGVj
dGlvbkZyZXNuZWxGcm9tU3BlY3VsYXIiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHki
XSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNGcmVzbmVsRGlydHkiKQorICAgIF0sIFN0YW5kYXJkTWF0
ZXJpYWwucHJvdG90eXBlLCAidXNlUmVmbGVjdGlvbkZyZXNuZWxGcm9tU3BlY3VsYXIiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgidXNlR2xvc3NpbmVzc0Zyb21TcGVjdWxhck1hcEFscGhh
IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl91c2VHbG9zc2luZXNzRnJv
bVNwZWN1bGFyTWFwQWxwaGEiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9t
YXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFs
LnByb3RvdHlwZSwgInVzZUdsb3NzaW5lc3NGcm9tU3BlY3VsYXJNYXBBbHBoYSIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplIl0pKCJtYXhTaW11bHRhbmVvdXNMaWdodHMiKQorICAgIF0sIFN0YW5k
YXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX21heFNpbXVsdGFuZW91c0xpZ2h0cyIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc0xpZ2h0c0RpcnR5
IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIm1heFNpbXVsdGFuZW91c0xp
Z2h0cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCJpbnZlcnROb3JtYWxNYXBYIikKKyAg
ICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9pbnZlcnROb3JtYWxNYXBYIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVy
ZXNEaXJ0eSIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJpbnZlcnROb3Jt
YWxNYXBYIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoImludmVydE5vcm1hbE1hcFkiKQor
ICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX2ludmVydE5vcm1hbE1hcFkiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0
dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgImludmVydE5v
cm1hbE1hcFkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgidHdvU2lkZWRMaWdodGluZyIp
CisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJfdHdvU2lkZWRMaWdodGluZyIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1Rl
eHR1cmVzRGlydHkiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAidHdvU2lk
ZWRMaWdodGluZyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFy
ZE1hdGVyaWFsLnByb3RvdHlwZSwgInVzZUxvZ2FyaXRobWljRGVwdGgiLCBudWxsKTsKKyAgICBy
ZXR1cm4gU3RhbmRhcmRNYXRlcmlhbDsKK30oX3B1c2hNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTBfX1siUHVzaE1hdGVyaWFsIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJC
QUJZTE9OLlN0YW5kYXJkTWF0ZXJpYWwiXSA9IFN0YW5kYXJkTWF0ZXJpYWw7Citfc2NlbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmUiXS5EZWZhdWx0TWF0ZXJpYWxGYWN0b3J5
ID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAgcmV0dXJuIG5ldyBTdGFuZGFyZE1hdGVyaWFsKCJk
ZWZhdWx0IG1hdGVyaWFsIiwgc2NlbmUpOworfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWF0ZXJpYWxzL3VuaWZvcm1CdWZmZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvdW5pZm9ybUJ1ZmZlci50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogVW5pZm9ybUJ1ZmZlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJVbmlmb3JtQnVmZmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVbmlmb3JtQnVmZmVyOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICov
ICIuL01pc2MvbG9nZ2VyLnRzIik7CisKKy8qKgorICogVW5pZm9ybSBidWZmZXIgb2JqZWN0cy4K
KyAqCisgKiBIYW5kbGVzIGJsb2NrcyBvZiB1bmlmb3JtIG9uIHRoZSBHUFUuCisgKgorICogSWYg
V2ViR0wgMiBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIGNsYXNzIGZhbGxzIGJhY2sgb24gdHJhZGl0
aW9ubmFsIHNldFVuaWZvcm1YWFggY2FsbHMuCisgKgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24s
IHBsZWFzZSByZWZlciB0byA6CisgKiBodHRwczovL3d3dy5raHJvbm9zLm9yZy9vcGVuZ2wvd2lr
aS9Vbmlmb3JtX0J1ZmZlcl9PYmplY3QKKyAqLwordmFyIFVuaWZvcm1CdWZmZXIgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgbmV3
IFVuaWZvcm0gYnVmZmVyIG9iamVjdHMuCisgICAgICoKKyAgICAgKiBIYW5kbGVzIGJsb2NrcyBv
ZiB1bmlmb3JtIG9uIHRoZSBHUFUuCisgICAgICoKKyAgICAgKiBJZiBXZWJHTCAyIGlzIG5vdCBh
dmFpbGFibGUsIHRoaXMgY2xhc3MgZmFsbHMgYmFjayBvbiB0cmFkaXRpb25uYWwgc2V0VW5pZm9y
bVhYWCBjYWxscy4KKyAgICAgKgorICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ug
cmVmZXIgdG8gOgorICAgICAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsL3dp
a2kvVW5pZm9ybV9CdWZmZXJfT2JqZWN0CisgICAgICogQHBhcmFtIGVuZ2luZSBEZWZpbmUgdGhl
IGVuZ2luZSB0aGUgYnVmZmVyIGlzIGFzc29jaWF0ZWQgd2l0aAorICAgICAqIEBwYXJhbSBkYXRh
IERlZmluZSB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBk
eW5hbWljIERlZmluZSBpZiB0aGUgYnVmZmVyIGlzIHVwZGF0YWJsZQorICAgICAqLworICAgIGZ1
bmN0aW9uIFVuaWZvcm1CdWZmZXIoZW5naW5lLCBkYXRhLCBkeW5hbWljKSB7CisgICAgICAgIC8v
IE1hdHJpeCBjYWNoZQorICAgICAgICB0aGlzLl92YWx1ZUNhY2hlID0ge307CisgICAgICAgIHRo
aXMuX2VuZ2luZSA9IGVuZ2luZTsKKyAgICAgICAgdGhpcy5fbm9VQk8gPSAhZW5naW5lLnN1cHBv
cnRzVW5pZm9ybUJ1ZmZlcnM7CisgICAgICAgIHRoaXMuX2R5bmFtaWMgPSBkeW5hbWljOworICAg
ICAgICB0aGlzLl9kYXRhID0gZGF0YSB8fCBbXTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUxvY2F0
aW9ucyA9IHt9OworICAgICAgICB0aGlzLl91bmlmb3JtU2l6ZXMgPSB7fTsKKyAgICAgICAgdGhp
cy5fdW5pZm9ybUFycmF5U2l6ZXMgPSB7fTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUxvY2F0aW9u
UG9pbnRlciA9IDA7CisgICAgICAgIHRoaXMuX25lZWRTeW5jID0gZmFsc2U7CisgICAgICAgIGlm
ICh0aGlzLl9ub1VCTykgeworICAgICAgICAgICAgdGhpcy51cGRhdGVNYXRyaXgzeDMgPSB0aGlz
Ll91cGRhdGVNYXRyaXgzeDNGb3JFZmZlY3Q7CisgICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJp
eDJ4MiA9IHRoaXMuX3VwZGF0ZU1hdHJpeDJ4MkZvckVmZmVjdDsKKyAgICAgICAgICAgIHRoaXMu
dXBkYXRlRmxvYXQgPSB0aGlzLl91cGRhdGVGbG9hdEZvckVmZmVjdDsKKyAgICAgICAgICAgIHRo
aXMudXBkYXRlRmxvYXQyID0gdGhpcy5fdXBkYXRlRmxvYXQyRm9yRWZmZWN0OworICAgICAgICAg
ICAgdGhpcy51cGRhdGVGbG9hdDMgPSB0aGlzLl91cGRhdGVGbG9hdDNGb3JFZmZlY3Q7CisgICAg
ICAgICAgICB0aGlzLnVwZGF0ZUZsb2F0NCA9IHRoaXMuX3VwZGF0ZUZsb2F0NEZvckVmZmVjdDsK
KyAgICAgICAgICAgIHRoaXMudXBkYXRlRmxvYXRBcnJheSA9IHRoaXMuX3VwZGF0ZUZsb2F0QXJy
YXlGb3JFZmZlY3Q7CisgICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpeCA9IHRoaXMuX3VwZGF0
ZU1hdHJpeEZvckVmZmVjdDsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cmljZXMgPSB0aGlz
Ll91cGRhdGVNYXRyaWNlc0ZvckVmZmVjdDsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlVmVjdG9y
MyA9IHRoaXMuX3VwZGF0ZVZlY3RvcjNGb3JFZmZlY3Q7CisgICAgICAgICAgICB0aGlzLnVwZGF0
ZVZlY3RvcjQgPSB0aGlzLl91cGRhdGVWZWN0b3I0Rm9yRWZmZWN0OworICAgICAgICAgICAgdGhp
cy51cGRhdGVDb2xvcjMgPSB0aGlzLl91cGRhdGVDb2xvcjNGb3JFZmZlY3Q7CisgICAgICAgICAg
ICB0aGlzLnVwZGF0ZUNvbG9yNCA9IHRoaXMuX3VwZGF0ZUNvbG9yNEZvckVmZmVjdDsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5fdW5pZm9ybUJ1
ZmZlcnMucHVzaCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cml4M3gzID0gdGhp
cy5fdXBkYXRlTWF0cml4M3gzRm9yVW5pZm9ybTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0
cml4MngyID0gdGhpcy5fdXBkYXRlTWF0cml4MngyRm9yVW5pZm9ybTsKKyAgICAgICAgICAgIHRo
aXMudXBkYXRlRmxvYXQgPSB0aGlzLl91cGRhdGVGbG9hdEZvclVuaWZvcm07CisgICAgICAgICAg
ICB0aGlzLnVwZGF0ZUZsb2F0MiA9IHRoaXMuX3VwZGF0ZUZsb2F0MkZvclVuaWZvcm07CisgICAg
ICAgICAgICB0aGlzLnVwZGF0ZUZsb2F0MyA9IHRoaXMuX3VwZGF0ZUZsb2F0M0ZvclVuaWZvcm07
CisgICAgICAgICAgICB0aGlzLnVwZGF0ZUZsb2F0NCA9IHRoaXMuX3VwZGF0ZUZsb2F0NEZvclVu
aWZvcm07CisgICAgICAgICAgICB0aGlzLnVwZGF0ZUZsb2F0QXJyYXkgPSB0aGlzLl91cGRhdGVG
bG9hdEFycmF5Rm9yVW5pZm9ybTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cml4ID0gdGhp
cy5fdXBkYXRlTWF0cml4Rm9yVW5pZm9ybTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cmlj
ZXMgPSB0aGlzLl91cGRhdGVNYXRyaWNlc0ZvclVuaWZvcm07CisgICAgICAgICAgICB0aGlzLnVw
ZGF0ZVZlY3RvcjMgPSB0aGlzLl91cGRhdGVWZWN0b3IzRm9yVW5pZm9ybTsKKyAgICAgICAgICAg
IHRoaXMudXBkYXRlVmVjdG9yNCA9IHRoaXMuX3VwZGF0ZVZlY3RvcjRGb3JVbmlmb3JtOworICAg
ICAgICAgICAgdGhpcy51cGRhdGVDb2xvcjMgPSB0aGlzLl91cGRhdGVDb2xvcjNGb3JVbmlmb3Jt
OworICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvcjQgPSB0aGlzLl91cGRhdGVDb2xvcjRGb3JV
bmlmb3JtOworICAgICAgICB9CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbmlm
b3JtQnVmZmVyLnByb3RvdHlwZSwgInVzZVVibyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEluZGljYXRlcyBpZiB0aGUgYnVmZmVyIGlzIHVzaW5nIHRoZSBXZWJHTDIgVUJPIGltcGxlbWVu
dGF0aW9uLAorICAgICAgICAgKiBvciBqdXN0IGZhbGxpbmcgYmFjayBvbiBzZXRVbmlmb3JtWFhY
IGNhbGxzLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gIXRoaXMuX25vVUJPOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUsICJpc1N5bmMiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIFdlYkdMIHVuZGVybHlpbmcgdW5p
Zm9ybSBidWZmZXIgaXMgaW4gc3luYworICAgICAgICAgKiB3aXRoIHRoZSBqYXZhc2NyaXB0IGNh
Y2hlIGRhdGEuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiAhdGhpcy5fbmVlZFN5bmM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8q
KgorICAgICAqIEluZGljYXRlcyBpZiB0aGUgV2ViR0wgdW5kZXJseWluZyB1bmlmb3JtIGJ1ZmZl
ciBpcyBkeW5hbWljLgorICAgICAqIEFsc28sIGEgZHluYW1pYyBVbmlmb3JtQnVmZmVyIHdpbGwg
ZGlzYWJsZSBjYWNoZSB2ZXJpZmljYXRpb24gYW5kIGFsd2F5cworICAgICAqIHVwZGF0ZSB0aGUg
dW5kZXJseWluZyBXZWJHTCB1bmlmb3JtIGJ1ZmZlciB0byB0aGUgR1BVLgorICAgICAqIEByZXR1
cm5zIGlmIER5bmFtaWMsIG90aGVyd2lzZSBmYWxzZQorICAgICAqLworICAgIFVuaWZvcm1CdWZm
ZXIucHJvdG90eXBlLmlzRHluYW1pYyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2R5bmFtaWMgIT09IHVuZGVmaW5lZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoZSBk
YXRhIGNhY2hlIG9uIEpTIHNpZGUuCisgICAgICogQHJldHVybnMgdGhlIHVuZGVybHlpbmcgZGF0
YSBhcyBhIGZsb2F0IGFycmF5CisgICAgICovCisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUu
Z2V0RGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlckRhdGE7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGUgdW5kZXJseWluZyBXZWJHTCBVbmlmb3JtIGJ1
ZmZlci4KKyAgICAgKiBAcmV0dXJucyB0aGUgd2ViZ2wgYnVmZmVyCisgICAgICovCisgICAgVW5p
Zm9ybUJ1ZmZlci5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fYnVmZmVyOworICAgIH07CisgICAgLyoqCisgICAgICogc3RkMTQwIGxheW91
dCBzcGVjaWZpZXMgaG93IHRvIGFsaWduIGRhdGEgd2l0aGluIGFuIFVCTyBzdHJ1Y3R1cmUuCisg
ICAgICogU2VlIGh0dHBzOi8va2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlbkdML3NwZWNzL2dsL2ds
c3BlYzQ1LmNvcmUucGRmI3BhZ2U9MTU5CisgICAgICogZm9yIHNwZWNzLgorICAgICAqLworICAg
IFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl9maWxsQWxpZ25tZW50ID0gZnVuY3Rpb24gKHNpemUp
IHsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGhhcyBiZWVuIHNpbXBsaWZpZWQgYmVjYXVzZSB3ZSBv
bmx5IHVzZSBmbG9hdHMsIHZlY3RvcnMgb2YgMSwgMiwgMywgNCBjb21wb25lbnRzCisgICAgICAg
IC8vIGFuZCA0eDQgbWF0cmljZXMKKyAgICAgICAgLy8gVE9ETyA6IGNoYW5nZSBpZiBvdGhlciB0
eXBlcyBhcmUgdXNlZAorICAgICAgICB2YXIgYWxpZ25tZW50OworICAgICAgICBpZiAoc2l6ZSA8
PSAyKSB7CisgICAgICAgICAgICBhbGlnbm1lbnQgPSBzaXplOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgYWxpZ25tZW50ID0gNDsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoKHRoaXMuX3VuaWZvcm1Mb2NhdGlvblBvaW50ZXIgJSBhbGlnbm1lbnQpICE9PSAwKSB7Cisg
ICAgICAgICAgICB2YXIgb2xkUG9pbnRlciA9IHRoaXMuX3VuaWZvcm1Mb2NhdGlvblBvaW50ZXI7
CisgICAgICAgICAgICB0aGlzLl91bmlmb3JtTG9jYXRpb25Qb2ludGVyICs9IGFsaWdubWVudCAt
ICh0aGlzLl91bmlmb3JtTG9jYXRpb25Qb2ludGVyICUgYWxpZ25tZW50KTsKKyAgICAgICAgICAg
IHZhciBkaWZmID0gdGhpcy5fdW5pZm9ybUxvY2F0aW9uUG9pbnRlciAtIG9sZFBvaW50ZXI7Cisg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmY7IGkrKykgeworICAgICAgICAgICAg
ICAgIHRoaXMuX2RhdGEucHVzaCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogQWRkcyBhbiB1bmlmb3JtIGluIHRoZSBidWZmZXIuCisgICAgICog
V2FybmluZyA6IHRoZSBzdWJzZXF1ZW50cyBjYWxscyBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUg
aW4gdGhlIHNhbWUgb3JkZXIgYXMgZGVjbGFyZWQgaW4gdGhlIHNoYWRlcgorICAgICAqIGZvciB0
aGUgbGF5b3V0IHRvIGJlIGNvcnJlY3QgIQorICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhl
IHVuaWZvcm0sIGFzIHVzZWQgaW4gdGhlIHVuaWZvcm0gYmxvY2sgaW4gdGhlIHNoYWRlci4KKyAg
ICAgKiBAcGFyYW0gc2l6ZSBEYXRhIHNpemUsIG9yIGRhdGEgZGlyZWN0bHkuCisgICAgICogQHBh
cmFtIGFycmF5U2l6ZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheSwgMCBpZiBu
b3QgYW4gYXJyYXkuCisgICAgICovCisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuYWRkVW5p
Zm9ybSA9IGZ1bmN0aW9uIChuYW1lLCBzaXplLCBhcnJheVNpemUpIHsKKyAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PT0gdm9pZCAwKSB7IGFycmF5U2l6ZSA9IDA7IH0KKyAgICAgICAgaWYgKHRoaXMu
X25vVUJPKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX3VuaWZvcm1Mb2NhdGlvbnNbbmFtZV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAg
Ly8gQWxyZWFkeSBleGlzdGluZyB1bmlmb3JtCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgb3JkZXIg
b2YgdGhlIHNoYWRlciBsYXlvdXQgIQorICAgICAgICAvLyBzaXplIGNhbiBiZSB0aGUgc2l6ZSBv
ZiB0aGUgdW5pZm9ybSwgb3IgZGF0YSBkaXJlY3RseQorICAgICAgICB2YXIgZGF0YTsKKyAgICAg
ICAgLy8gc3RkMTQwIEZUVy4uLgorICAgICAgICBpZiAoYXJyYXlTaXplID4gMCkgeworICAgICAg
ICAgICAgaWYgKHNpemUgaW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgICAgIHRocm93
ICJhZGRVbmlmb3JtIHNob3VsZCBub3QgYmUgdXNlIHdpdGggQXJyYXkgaW4gVUJPOiAiICsgbmFt
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1BcnJheVNpemVzW25h
bWVdID0geyBzdHJpZGVTaXplOiBzaXplLCBhcnJheVNpemU6IGFycmF5U2l6ZSB9OworICAgICAg
ICAgICAgaWYgKHNpemUgPT0gMTYpIHsKKyAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSAqIGFy
cmF5U2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHZhciBwZXJFbGVtZW50UGFkZGluZyA9IDQgLSBzaXplOworICAgICAgICAgICAgICAgIHZh
ciB0b3RhbFBhZGRpbmcgPSBwZXJFbGVtZW50UGFkZGluZyAqIGFycmF5U2l6ZTsKKyAgICAgICAg
ICAgICAgICBzaXplID0gc2l6ZSAqIGFycmF5U2l6ZSArIHRvdGFsUGFkZGluZzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGRhdGEgPSBbXTsKKyAgICAgICAgICAgIC8vIEZpbGwgd2l0aCB6
ZXJvcworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBkYXRhLnB1c2goMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoc2l6ZSBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAg
ICAgICAgICAgICAgZGF0YSA9IHNpemU7CisgICAgICAgICAgICAgICAgc2l6ZSA9IGRhdGEubGVu
Z3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
c2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAgZGF0YSA9IFtdOworICAgICAgICAgICAgICAg
IC8vIEZpbGwgd2l0aCB6ZXJvcworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaCgwKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9maWxsQWxpZ25tZW50
KHNpemUpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VuaWZvcm1TaXplc1tuYW1lXSA9IHNp
emU7CisgICAgICAgIHRoaXMuX3VuaWZvcm1Mb2NhdGlvbnNbbmFtZV0gPSB0aGlzLl91bmlmb3Jt
TG9jYXRpb25Qb2ludGVyOworICAgICAgICB0aGlzLl91bmlmb3JtTG9jYXRpb25Qb2ludGVyICs9
IHNpemU7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
ICAgICB0aGlzLl9kYXRhLnB1c2goZGF0YVtpXSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
bmVlZFN5bmMgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIE1hdHJpeCA0
eDQgdG8gdGhlIHVuaWZvcm0gYnVmZmVyLgorICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhl
IHVuaWZvcm0sIGFzIHVzZWQgaW4gdGhlIHVuaWZvcm0gYmxvY2sgaW4gdGhlIHNoYWRlci4KKyAg
ICAgKiBAcGFyYW0gbWF0IEEgNHg0IG1hdHJpeC4KKyAgICAgKi8KKyAgICBVbmlmb3JtQnVmZmVy
LnByb3RvdHlwZS5hZGRNYXRyaXggPSBmdW5jdGlvbiAobmFtZSwgbWF0KSB7CisgICAgICAgIHRo
aXMuYWRkVW5pZm9ybShuYW1lLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtYXQudG9BcnJh
eSgpKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgdmVjMiB0byB0aGUgdW5pZm9y
bSBidWZmZXIuCisgICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgdW5pZm9ybSwgYXMgdXNl
ZCBpbiB0aGUgdW5pZm9ybSBibG9jayBpbiB0aGUgc2hhZGVyLgorICAgICAqIEBwYXJhbSB4IERl
ZmluZSB0aGUgeCBjb21wb25lbnQgdmFsdWUgb2YgdGhlIHZlYzIKKyAgICAgKiBAcGFyYW0geSBE
ZWZpbmUgdGhlIHkgY29tcG9uZW50IHZhbHVlIG9mIHRoZSB2ZWMyCisgICAgICovCisgICAgVW5p
Zm9ybUJ1ZmZlci5wcm90b3R5cGUuYWRkRmxvYXQyID0gZnVuY3Rpb24gKG5hbWUsIHgsIHkpIHsK
KyAgICAgICAgdmFyIHRlbXAgPSBbeCwgeV07CisgICAgICAgIHRoaXMuYWRkVW5pZm9ybShuYW1l
LCB0ZW1wKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgYSB2ZWMzIHRvIHRoZSB1bmlm
b3JtIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSB1bmlmb3JtLCBhcyB1
c2VkIGluIHRoZSB1bmlmb3JtIGJsb2NrIGluIHRoZSBzaGFkZXIuCisgICAgICogQHBhcmFtIHgg
RGVmaW5lIHRoZSB4IGNvbXBvbmVudCB2YWx1ZSBvZiB0aGUgdmVjMworICAgICAqIEBwYXJhbSB5
IERlZmluZSB0aGUgeSBjb21wb25lbnQgdmFsdWUgb2YgdGhlIHZlYzMKKyAgICAgKiBAcGFyYW0g
eiBEZWZpbmUgdGhlIHogY29tcG9uZW50IHZhbHVlIG9mIHRoZSB2ZWMzCisgICAgICovCisgICAg
VW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuYWRkRmxvYXQzID0gZnVuY3Rpb24gKG5hbWUsIHgsIHks
IHopIHsKKyAgICAgICAgdmFyIHRlbXAgPSBbeCwgeSwgel07CisgICAgICAgIHRoaXMuYWRkVW5p
Zm9ybShuYW1lLCB0ZW1wKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgYSB2ZWMzIHRv
IHRoZSB1bmlmb3JtIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSB1bmlm
b3JtLCBhcyB1c2VkIGluIHRoZSB1bmlmb3JtIGJsb2NrIGluIHRoZSBzaGFkZXIuCisgICAgICog
QHBhcmFtIGNvbG9yIERlZmluZSB0aGUgdmVjMyBmcm9tIGEgQ29sb3IKKyAgICAgKi8KKyAgICBV
bmlmb3JtQnVmZmVyLnByb3RvdHlwZS5hZGRDb2xvcjMgPSBmdW5jdGlvbiAobmFtZSwgY29sb3Ip
IHsKKyAgICAgICAgdmFyIHRlbXAgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgY29sb3IudG9BcnJh
eSh0ZW1wKTsKKyAgICAgICAgdGhpcy5hZGRVbmlmb3JtKG5hbWUsIHRlbXApOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQWRkcyBhIHZlYzQgdG8gdGhlIHVuaWZvcm0gYnVmZmVyLgorICAgICAq
IEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHVuaWZvcm0sIGFzIHVzZWQgaW4gdGhlIHVuaWZvcm0g
YmxvY2sgaW4gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0gY29sb3IgRGVmaW5lIHRoZSByZ2Ig
Y29tcG9uZW50cyBmcm9tIGEgQ29sb3IKKyAgICAgKiBAcGFyYW0gYWxwaGEgRGVmaW5lIHRoZSBh
IGNvbXBvbmVudCBvZiB0aGUgdmVjNAorICAgICAqLworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90
eXBlLmFkZENvbG9yNCA9IGZ1bmN0aW9uIChuYW1lLCBjb2xvciwgYWxwaGEpIHsKKyAgICAgICAg
dmFyIHRlbXAgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgY29sb3IudG9BcnJheSh0ZW1wKTsKKyAg
ICAgICAgdGVtcC5wdXNoKGFscGhhKTsKKyAgICAgICAgdGhpcy5hZGRVbmlmb3JtKG5hbWUsIHRl
bXApOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIHZlYzMgdG8gdGhlIHVuaWZvcm0g
YnVmZmVyLgorICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHVuaWZvcm0sIGFzIHVzZWQg
aW4gdGhlIHVuaWZvcm0gYmxvY2sgaW4gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0gdmVjdG9y
IERlZmluZSB0aGUgdmVjMyBjb21wb25lbnRzIGZyb20gYSBWZWN0b3IKKyAgICAgKi8KKyAgICBV
bmlmb3JtQnVmZmVyLnByb3RvdHlwZS5hZGRWZWN0b3IzID0gZnVuY3Rpb24gKG5hbWUsIHZlY3Rv
cikgeworICAgICAgICB2YXIgdGVtcCA9IG5ldyBBcnJheSgpOworICAgICAgICB2ZWN0b3IudG9B
cnJheSh0ZW1wKTsKKyAgICAgICAgdGhpcy5hZGRVbmlmb3JtKG5hbWUsIHRlbXApOworICAgIH07
CisgICAgLyoqCisgICAgICogQWRkcyBhIE1hdHJpeCAzeDMgdG8gdGhlIHVuaWZvcm0gYnVmZmVy
LgorICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHVuaWZvcm0sIGFzIHVzZWQgaW4gdGhl
IHVuaWZvcm0gYmxvY2sgaW4gdGhlIHNoYWRlci4KKyAgICAgKi8KKyAgICBVbmlmb3JtQnVmZmVy
LnByb3RvdHlwZS5hZGRNYXRyaXgzeDMgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICB0aGlz
LmFkZFVuaWZvcm0obmFtZSwgMTIpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIE1h
dHJpeCAyeDIgdG8gdGhlIHVuaWZvcm0gYnVmZmVyLgorICAgICAqIEBwYXJhbSBuYW1lIE5hbWUg
b2YgdGhlIHVuaWZvcm0sIGFzIHVzZWQgaW4gdGhlIHVuaWZvcm0gYmxvY2sgaW4gdGhlIHNoYWRl
ci4KKyAgICAgKi8KKyAgICBVbmlmb3JtQnVmZmVyLnByb3RvdHlwZS5hZGRNYXRyaXgyeDIgPSBm
dW5jdGlvbiAobmFtZSkgeworICAgICAgICB0aGlzLmFkZFVuaWZvcm0obmFtZSwgOCk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBFZmZlY3RpdmVseSBjcmVhdGVzIHRoZSBXZWJHTCBVbmlmb3Jt
IEJ1ZmZlciwgb25jZSBsYXlvdXQgaXMgY29tcGxldGVkIHdpdGggYGFkZFVuaWZvcm1gLgorICAg
ICAqLworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMuX25vVUJPKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikgeworICAgICAgICAgICAgcmV0dXJuOyAvLyBu
b3RoaW5nIHRvIGRvCisgICAgICAgIH0KKyAgICAgICAgLy8gU2VlIHNwZWMsIGFsaWdubWVudCBt
dXN0IGJlIGZpbGxlZCBhcyBhIHZlYzQKKyAgICAgICAgdGhpcy5fZmlsbEFsaWdubWVudCg0KTsK
KyAgICAgICAgdGhpcy5fYnVmZmVyRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5fZGF0YSk7
CisgICAgICAgIHRoaXMuX3JlYnVpbGQoKTsKKyAgICAgICAgdGhpcy5fbmVlZFN5bmMgPSB0cnVl
OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBVbmlmb3JtQnVmZmVyLnByb3RvdHlw
ZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX25vVUJPIHx8ICF0
aGlzLl9idWZmZXJEYXRhKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuX2R5bmFtaWMpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IHRoaXMu
X2VuZ2luZS5jcmVhdGVEeW5hbWljVW5pZm9ybUJ1ZmZlcih0aGlzLl9idWZmZXJEYXRhKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IHRoaXMu
X2VuZ2luZS5jcmVhdGVVbmlmb3JtQnVmZmVyKHRoaXMuX2J1ZmZlckRhdGEpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBXZWJHTCBVbmlmb3JtIEJ1ZmZl
ciBvbiB0aGUgR1BVLgorICAgICAqIElmIHRoZSBgZHluYW1pY2AgZmxhZyBpcyBzZXQgdG8gdHJ1
ZSwgbm8gY2FjaGUgY29tcGFyaXNvbiBpcyBkb25lLgorICAgICAqIE90aGVyd2lzZSwgdGhlIGJ1
ZmZlciB3aWxsIGJlIHVwZGF0ZWQgb25seSBpZiB0aGUgY2FjaGUgZGlmZmVycy4KKyAgICAgKi8K
KyAgICBVbmlmb3JtQnVmZmVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICghdGhpcy5fYnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLmNyZWF0ZSgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fZHluYW1pYyAm
JiAhdGhpcy5fbmVlZFN5bmMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9lbmdpbmUudXBkYXRlVW5pZm9ybUJ1ZmZlcih0aGlzLl9idWZmZXIsIHRoaXMu
X2J1ZmZlckRhdGEpOworICAgICAgICB0aGlzLl9uZWVkU3luYyA9IGZhbHNlOworICAgIH07Cisg
ICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgdmFsdWUgb2YgYW4gdW5pZm9ybS4gVGhlIGB1cGRh
dGVgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBhZnRlcndhcmRzIHRvIG1ha2UgaXQgZWZmZWN0aXZl
IGluIHRoZSBHUFUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIERlZmluZSB0aGUgbmFtZSBv
ZiB0aGUgdW5pZm9ybSwgYXMgdXNlZCBpbiB0aGUgdW5pZm9ybSBibG9jayBpbiB0aGUgc2hhZGVy
LgorICAgICAqIEBwYXJhbSBkYXRhIERlZmluZSB0aGUgZmxhdHRlbmVkIGRhdGEKKyAgICAgKiBA
cGFyYW0gc2l6ZSBEZWZpbmUgdGhlIHNpemUgb2YgdGhlIGRhdGEuCisgICAgICovCisgICAgVW5p
Zm9ybUJ1ZmZlci5wcm90b3R5cGUudXBkYXRlVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtTmFt
ZSwgZGF0YSwgc2l6ZSkgeworICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl91bmlmb3JtTG9j
YXRpb25zW3VuaWZvcm1OYW1lXTsKKyAgICAgICAgaWYgKGxvY2F0aW9uID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBD
YW5ub3QgYWRkIGFuIHVuaWZvcm0gaWYgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IGNyZWF0ZWQKKyAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
TG9nZ2VyIl0uRXJyb3IoIkNhbm5vdCBhZGQgYW4gdW5pZm9ybSBhZnRlciBVQk8gaGFzIGJlZW4g
Y3JlYXRlZC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLmFkZFVuaWZvcm0odW5pZm9ybU5hbWUsIHNpemUpOworICAgICAgICAgICAg
bG9jYXRpb24gPSB0aGlzLl91bmlmb3JtTG9jYXRpb25zW3VuaWZvcm1OYW1lXTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXRoaXMuX2J1ZmZlcikgeworICAgICAgICAgICAgdGhpcy5jcmVhdGUo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2R5bmFtaWMpIHsKKyAgICAgICAgICAg
IC8vIENhY2hlIGZvciBzdGF0aWMgdW5pZm9ybSBidWZmZXJzCisgICAgICAgICAgICB2YXIgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PT0gMTYgfHwgdGhpcy5fYnVmZmVyRGF0YVts
b2NhdGlvbiArIGldICE9PSBkYXRhW2ldKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXJEYXRhW2xvY2F0aW9uICsg
aV0gPSBkYXRhW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX25lZWRTeW5jID0gdGhpcy5fbmVlZFN5bmMgfHwgY2hhbmdlZDsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vIGNhY2hlIGZvciBkeW5hbWljCisg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAg
ICAgIHRoaXMuX2J1ZmZlckRhdGFbbG9jYXRpb24gKyBpXSA9IGRhdGFbaV07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIHZhbHVl
IG9mIGFuIHVuaWZvcm0uIFRoZSBgdXBkYXRlYCBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYWZ0ZXJ3
YXJkcyB0byBtYWtlIGl0IGVmZmVjdGl2ZSBpbiB0aGUgR1BVLgorICAgICAqIEBwYXJhbSB1bmlm
b3JtTmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0sIGFzIHVzZWQgaW4gdGhlIHVu
aWZvcm0gYmxvY2sgaW4gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0gZGF0YSBEZWZpbmUgdGhl
IGZsYXR0ZW5lZCBkYXRhCisgICAgICogQHBhcmFtIHNpemUgRGVmaW5lIHRoZSBzaXplIG9mIHRo
ZSBkYXRhLgorICAgICAqLworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLnVwZGF0ZVVuaWZv
cm1BcnJheSA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgZGF0YSwgc2l6ZSkgeworICAgICAgICB2
YXIgbG9jYXRpb24gPSB0aGlzLl91bmlmb3JtTG9jYXRpb25zW3VuaWZvcm1OYW1lXTsKKyAgICAg
ICAgaWYgKGxvY2F0aW9uID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMb2dnZXIiXS5FcnJvcigiQ2Fubm90IGFk
ZCBhbiB1bmlmb3JtIEFycmF5IGR5bmFtaWNhbGx5LiBQbGVhc2UsIGFkZCBpdCB1c2luZyBhZGRV
bmlmb3JtLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICgh
dGhpcy5fYnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLmNyZWF0ZSgpOworICAgICAgICB9Cisg
ICAgICAgIHZhciBhcnJheVNpemVzID0gdGhpcy5fdW5pZm9ybUFycmF5U2l6ZXNbdW5pZm9ybU5h
bWVdOworICAgICAgICBpZiAoIXRoaXMuX2R5bmFtaWMpIHsKKyAgICAgICAgICAgIC8vIENhY2hl
IGZvciBzdGF0aWMgdW5pZm9ybSBidWZmZXJzCisgICAgICAgICAgICB2YXIgY2hhbmdlZCA9IGZh
bHNlOworICAgICAgICAgICAgdmFyIGNvdW50VG9Gb3VyID0gMDsKKyAgICAgICAgICAgIHZhciBi
YXNlU3RyaWRlID0gMDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlckRhdGFbbG9jYXRpb24gKyBiYXNl
U3RyaWRlICogNCArIGNvdW50VG9Gb3VyXSAhPT0gZGF0YVtpXSkgeworICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyRGF0
YVtsb2NhdGlvbiArIGJhc2VTdHJpZGUgKiA0ICsgY291bnRUb0ZvdXJdID0gZGF0YVtpXTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY291bnRUb0ZvdXIrKzsKKyAgICAgICAg
ICAgICAgICBpZiAoY291bnRUb0ZvdXIgPT09IGFycmF5U2l6ZXMuc3RyaWRlU2l6ZSkgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKDsgY291bnRUb0ZvdXIgPCA0OyBjb3VudFRvRm91cisrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXJEYXRhW2xvY2F0aW9uICsgYmFz
ZVN0cmlkZSAqIDQgKyBjb3VudFRvRm91cl0gPSAwOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGNvdW50VG9Gb3VyID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
YmFzZVN0cmlkZSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX25lZWRTeW5jID0gdGhpcy5fbmVlZFN5bmMgfHwgY2hhbmdlZDsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vIGNhY2hlIGZvciBkeW5hbWljCisg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAg
ICAgIHRoaXMuX2J1ZmZlckRhdGFbbG9jYXRpb24gKyBpXSA9IGRhdGFbaV07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl9jYWNo
ZU1hdHJpeCA9IGZ1bmN0aW9uIChuYW1lLCBtYXRyaXgpIHsKKyAgICAgICAgdmFyIGNhY2hlID0g
dGhpcy5fdmFsdWVDYWNoZVtuYW1lXTsKKyAgICAgICAgdmFyIGZsYWcgPSBtYXRyaXgudXBkYXRl
RmxhZzsKKyAgICAgICAgaWYgKGNhY2hlICE9PSB1bmRlZmluZWQgJiYgY2FjaGUgPT09IGZsYWcp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl92
YWx1ZUNhY2hlW25hbWVdID0gZmxhZzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAg
ICAvLyBVcGRhdGUgbWV0aG9kcworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl91cGRhdGVN
YXRyaXgzeDNGb3JVbmlmb3JtID0gZnVuY3Rpb24gKG5hbWUsIG1hdHJpeCkgeworICAgICAgICAv
LyBUbyBtYXRjaCBzdGQxNDAsIG1hdHJpeCBtdXN0IGJlIHJlYWxpZ25lZAorICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVt
cEJ1ZmZlcltpICogNF0gPSBtYXRyaXhbaSAqIDNdOworICAgICAgICAgICAgVW5pZm9ybUJ1ZmZl
ci5fdGVtcEJ1ZmZlcltpICogNCArIDFdID0gbWF0cml4W2kgKiAzICsgMV07CisgICAgICAgICAg
ICBVbmlmb3JtQnVmZmVyLl90ZW1wQnVmZmVyW2kgKiA0ICsgMl0gPSBtYXRyaXhbaSAqIDMgKyAy
XTsKKyAgICAgICAgICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXJbaSAqIDQgKyAzXSA9IDAu
MDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnVwZGF0ZVVuaWZvcm0obmFtZSwgVW5pZm9ybUJ1
ZmZlci5fdGVtcEJ1ZmZlciwgMTIpOworICAgIH07CisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5
cGUuX3VwZGF0ZU1hdHJpeDN4M0ZvckVmZmVjdCA9IGZ1bmN0aW9uIChuYW1lLCBtYXRyaXgpIHsK
KyAgICAgICAgdGhpcy5fY3VycmVudEVmZmVjdC5zZXRNYXRyaXgzeDMobmFtZSwgbWF0cml4KTsK
KyAgICB9OworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl91cGRhdGVNYXRyaXgyeDJGb3JF
ZmZlY3QgPSBmdW5jdGlvbiAobmFtZSwgbWF0cml4KSB7CisgICAgICAgIHRoaXMuX2N1cnJlbnRF
ZmZlY3Quc2V0TWF0cml4MngyKG5hbWUsIG1hdHJpeCk7CisgICAgfTsKKyAgICBVbmlmb3JtQnVm
ZmVyLnByb3RvdHlwZS5fdXBkYXRlTWF0cml4MngyRm9yVW5pZm9ybSA9IGZ1bmN0aW9uIChuYW1l
LCBtYXRyaXgpIHsKKyAgICAgICAgLy8gVG8gbWF0Y2ggc3RkMTQwLCBtYXRyaXggbXVzdCBiZSBy
ZWFsaWduZWQKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAg
ICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXJbaSAqIDRdID0gbWF0cml4W2kgKiAyXTsKKyAg
ICAgICAgICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXJbaSAqIDQgKyAxXSA9IG1hdHJpeFtp
ICogMiArIDFdOworICAgICAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlcltpICogNCAr
IDJdID0gMC4wOworICAgICAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlcltpICogNCAr
IDNdID0gMC4wOworICAgICAgICB9CisgICAgICAgIHRoaXMudXBkYXRlVW5pZm9ybShuYW1lLCBV
bmlmb3JtQnVmZmVyLl90ZW1wQnVmZmVyLCA4KTsKKyAgICB9OworICAgIFVuaWZvcm1CdWZmZXIu
cHJvdG90eXBlLl91cGRhdGVGbG9hdEZvckVmZmVjdCA9IGZ1bmN0aW9uIChuYW1lLCB4KSB7Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnRFZmZlY3Quc2V0RmxvYXQobmFtZSwgeCk7CisgICAgfTsKKyAg
ICBVbmlmb3JtQnVmZmVyLnByb3RvdHlwZS5fdXBkYXRlRmxvYXRGb3JVbmlmb3JtID0gZnVuY3Rp
b24gKG5hbWUsIHgpIHsKKyAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlclswXSA9IHg7
CisgICAgICAgIHRoaXMudXBkYXRlVW5pZm9ybShuYW1lLCBVbmlmb3JtQnVmZmVyLl90ZW1wQnVm
ZmVyLCAxKTsKKyAgICB9OworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl91cGRhdGVGbG9h
dDJGb3JFZmZlY3QgPSBmdW5jdGlvbiAobmFtZSwgeCwgeSwgc3VmZml4KSB7CisgICAgICAgIGlm
IChzdWZmaXggPT09IHZvaWQgMCkgeyBzdWZmaXggPSAiIjsgfQorICAgICAgICB0aGlzLl9jdXJy
ZW50RWZmZWN0LnNldEZsb2F0MihuYW1lICsgc3VmZml4LCB4LCB5KTsKKyAgICB9OworICAgIFVu
aWZvcm1CdWZmZXIucHJvdG90eXBlLl91cGRhdGVGbG9hdDJGb3JVbmlmb3JtID0gZnVuY3Rpb24g
KG5hbWUsIHgsIHkpIHsKKyAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlclswXSA9IHg7
CisgICAgICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXJbMV0gPSB5OworICAgICAgICB0aGlz
LnVwZGF0ZVVuaWZvcm0obmFtZSwgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlciwgMik7CisgICAg
fTsKKyAgICBVbmlmb3JtQnVmZmVyLnByb3RvdHlwZS5fdXBkYXRlRmxvYXQzRm9yRWZmZWN0ID0g
ZnVuY3Rpb24gKG5hbWUsIHgsIHksIHosIHN1ZmZpeCkgeworICAgICAgICBpZiAoc3VmZml4ID09
PSB2b2lkIDApIHsgc3VmZml4ID0gIiI7IH0KKyAgICAgICAgdGhpcy5fY3VycmVudEVmZmVjdC5z
ZXRGbG9hdDMobmFtZSArIHN1ZmZpeCwgeCwgeSwgeik7CisgICAgfTsKKyAgICBVbmlmb3JtQnVm
ZmVyLnByb3RvdHlwZS5fdXBkYXRlRmxvYXQzRm9yVW5pZm9ybSA9IGZ1bmN0aW9uIChuYW1lLCB4
LCB5LCB6KSB7CisgICAgICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXJbMF0gPSB4OworICAg
ICAgICBVbmlmb3JtQnVmZmVyLl90ZW1wQnVmZmVyWzFdID0geTsKKyAgICAgICAgVW5pZm9ybUJ1
ZmZlci5fdGVtcEJ1ZmZlclsyXSA9IHo7CisgICAgICAgIHRoaXMudXBkYXRlVW5pZm9ybShuYW1l
LCBVbmlmb3JtQnVmZmVyLl90ZW1wQnVmZmVyLCAzKTsKKyAgICB9OworICAgIFVuaWZvcm1CdWZm
ZXIucHJvdG90eXBlLl91cGRhdGVGbG9hdDRGb3JFZmZlY3QgPSBmdW5jdGlvbiAobmFtZSwgeCwg
eSwgeiwgdywgc3VmZml4KSB7CisgICAgICAgIGlmIChzdWZmaXggPT09IHZvaWQgMCkgeyBzdWZm
aXggPSAiIjsgfQorICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0LnNldEZsb2F0NChuYW1lICsg
c3VmZml4LCB4LCB5LCB6LCB3KTsKKyAgICB9OworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBl
Ll91cGRhdGVGbG9hdDRGb3JVbmlmb3JtID0gZnVuY3Rpb24gKG5hbWUsIHgsIHksIHosIHcpIHsK
KyAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlclswXSA9IHg7CisgICAgICAgIFVuaWZv
cm1CdWZmZXIuX3RlbXBCdWZmZXJbMV0gPSB5OworICAgICAgICBVbmlmb3JtQnVmZmVyLl90ZW1w
QnVmZmVyWzJdID0gejsKKyAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlclszXSA9IHc7
CisgICAgICAgIHRoaXMudXBkYXRlVW5pZm9ybShuYW1lLCBVbmlmb3JtQnVmZmVyLl90ZW1wQnVm
ZmVyLCA0KTsKKyAgICB9OworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl91cGRhdGVGbG9h
dEFycmF5Rm9yRWZmZWN0ID0gZnVuY3Rpb24gKG5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMu
X2N1cnJlbnRFZmZlY3Quc2V0RmxvYXRBcnJheShuYW1lLCBhcnJheSk7CisgICAgfTsKKyAgICBV
bmlmb3JtQnVmZmVyLnByb3RvdHlwZS5fdXBkYXRlRmxvYXRBcnJheUZvclVuaWZvcm0gPSBmdW5j
dGlvbiAobmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhpcy51cGRhdGVVbmlmb3JtQXJyYXkobmFt
ZSwgYXJyYXksIGFycmF5Lmxlbmd0aCk7CisgICAgfTsKKyAgICBVbmlmb3JtQnVmZmVyLnByb3Rv
dHlwZS5fdXBkYXRlTWF0cml4Rm9yRWZmZWN0ID0gZnVuY3Rpb24gKG5hbWUsIG1hdCkgeworICAg
ICAgICB0aGlzLl9jdXJyZW50RWZmZWN0LnNldE1hdHJpeChuYW1lLCBtYXQpOworICAgIH07Cisg
ICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuX3VwZGF0ZU1hdHJpeEZvclVuaWZvcm0gPSBmdW5j
dGlvbiAobmFtZSwgbWF0KSB7CisgICAgICAgIGlmICh0aGlzLl9jYWNoZU1hdHJpeChuYW1lLCBt
YXQpKSB7CisgICAgICAgICAgICB0aGlzLnVwZGF0ZVVuaWZvcm0obmFtZSwgbWF0LnRvQXJyYXko
KSwgMTYpOworICAgICAgICB9CisgICAgfTsKKyAgICBVbmlmb3JtQnVmZmVyLnByb3RvdHlwZS5f
dXBkYXRlTWF0cmljZXNGb3JFZmZlY3QgPSBmdW5jdGlvbiAobmFtZSwgbWF0KSB7CisgICAgICAg
IHRoaXMuX2N1cnJlbnRFZmZlY3Quc2V0TWF0cmljZXMobmFtZSwgbWF0KTsKKyAgICB9OworICAg
IFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl91cGRhdGVNYXRyaWNlc0ZvclVuaWZvcm0gPSBmdW5j
dGlvbiAobmFtZSwgbWF0KSB7CisgICAgICAgIHRoaXMudXBkYXRlVW5pZm9ybShuYW1lLCBtYXQs
IG1hdC5sZW5ndGgpOworICAgIH07CisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuX3VwZGF0
ZVZlY3RvcjNGb3JFZmZlY3QgPSBmdW5jdGlvbiAobmFtZSwgdmVjdG9yKSB7CisgICAgICAgIHRo
aXMuX2N1cnJlbnRFZmZlY3Quc2V0VmVjdG9yMyhuYW1lLCB2ZWN0b3IpOworICAgIH07CisgICAg
VW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuX3VwZGF0ZVZlY3RvcjNGb3JVbmlmb3JtID0gZnVuY3Rp
b24gKG5hbWUsIHZlY3RvcikgeworICAgICAgICB2ZWN0b3IudG9BcnJheShVbmlmb3JtQnVmZmVy
Ll90ZW1wQnVmZmVyKTsKKyAgICAgICAgdGhpcy51cGRhdGVVbmlmb3JtKG5hbWUsIFVuaWZvcm1C
dWZmZXIuX3RlbXBCdWZmZXIsIDMpOworICAgIH07CisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5
cGUuX3VwZGF0ZVZlY3RvcjRGb3JFZmZlY3QgPSBmdW5jdGlvbiAobmFtZSwgdmVjdG9yKSB7Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnRFZmZlY3Quc2V0VmVjdG9yNChuYW1lLCB2ZWN0b3IpOworICAg
IH07CisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuX3VwZGF0ZVZlY3RvcjRGb3JVbmlmb3Jt
ID0gZnVuY3Rpb24gKG5hbWUsIHZlY3RvcikgeworICAgICAgICB2ZWN0b3IudG9BcnJheShVbmlm
b3JtQnVmZmVyLl90ZW1wQnVmZmVyKTsKKyAgICAgICAgdGhpcy51cGRhdGVVbmlmb3JtKG5hbWUs
IFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXIsIDQpOworICAgIH07CisgICAgVW5pZm9ybUJ1ZmZl
ci5wcm90b3R5cGUuX3VwZGF0ZUNvbG9yM0ZvckVmZmVjdCA9IGZ1bmN0aW9uIChuYW1lLCBjb2xv
ciwgc3VmZml4KSB7CisgICAgICAgIGlmIChzdWZmaXggPT09IHZvaWQgMCkgeyBzdWZmaXggPSAi
IjsgfQorICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0LnNldENvbG9yMyhuYW1lICsgc3VmZml4
LCBjb2xvcik7CisgICAgfTsKKyAgICBVbmlmb3JtQnVmZmVyLnByb3RvdHlwZS5fdXBkYXRlQ29s
b3IzRm9yVW5pZm9ybSA9IGZ1bmN0aW9uIChuYW1lLCBjb2xvcikgeworICAgICAgICBjb2xvci50
b0FycmF5KFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXIpOworICAgICAgICB0aGlzLnVwZGF0ZVVu
aWZvcm0obmFtZSwgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlciwgMyk7CisgICAgfTsKKyAgICBV
bmlmb3JtQnVmZmVyLnByb3RvdHlwZS5fdXBkYXRlQ29sb3I0Rm9yRWZmZWN0ID0gZnVuY3Rpb24g
KG5hbWUsIGNvbG9yLCBhbHBoYSwgc3VmZml4KSB7CisgICAgICAgIGlmIChzdWZmaXggPT09IHZv
aWQgMCkgeyBzdWZmaXggPSAiIjsgfQorICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0LnNldENv
bG9yNChuYW1lICsgc3VmZml4LCBjb2xvciwgYWxwaGEpOworICAgIH07CisgICAgVW5pZm9ybUJ1
ZmZlci5wcm90b3R5cGUuX3VwZGF0ZUNvbG9yNEZvclVuaWZvcm0gPSBmdW5jdGlvbiAobmFtZSwg
Y29sb3IsIGFscGhhKSB7CisgICAgICAgIGNvbG9yLnRvQXJyYXkoVW5pZm9ybUJ1ZmZlci5fdGVt
cEJ1ZmZlcik7CisgICAgICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXJbM10gPSBhbHBoYTsK
KyAgICAgICAgdGhpcy51cGRhdGVVbmlmb3JtKG5hbWUsIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZm
ZXIsIDQpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIHNhbXBsZXIgdW5pZm9ybSBv
biB0aGUgZWZmZWN0LgorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUg
c2FtcGxlci4KKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBEZWZpbmUgdGhlIHRleHR1cmUgdG8gc2V0
IGluIHRoZSBzYW1wbGVyCisgICAgICovCisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuc2V0
VGV4dHVyZSA9IGZ1bmN0aW9uIChuYW1lLCB0ZXh0dXJlKSB7CisgICAgICAgIHRoaXMuX2N1cnJl
bnRFZmZlY3Quc2V0VGV4dHVyZShuYW1lLCB0ZXh0dXJlKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIERpcmVjdGx5IHVwZGF0ZXMgdGhlIHZhbHVlIG9mIHRoZSB1bmlmb3JtIGluIHRoZSBjYWNo
ZSBBTkQgb24gdGhlIEdQVS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgRGVmaW5lIHRoZSBu
YW1lIG9mIHRoZSB1bmlmb3JtLCBhcyB1c2VkIGluIHRoZSB1bmlmb3JtIGJsb2NrIGluIHRoZSBz
aGFkZXIuCisgICAgICogQHBhcmFtIGRhdGEgRGVmaW5lIHRoZSBmbGF0dGVuZWQgZGF0YQorICAg
ICAqLworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLnVwZGF0ZVVuaWZvcm1EaXJlY3RseSA9
IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgZGF0YSkgeworICAgICAgICB0aGlzLnVwZGF0ZVVuaWZv
cm0odW5pZm9ybU5hbWUsIGRhdGEsIGRhdGEubGVuZ3RoKTsKKyAgICAgICAgdGhpcy51cGRhdGUo
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRzIHRoaXMgdW5pZm9ybSBidWZmZXIgdG8g
YW4gZWZmZWN0LgorICAgICAqIEBwYXJhbSBlZmZlY3QgRGVmaW5lIHRoZSBlZmZlY3QgdG8gYmlu
ZCB0aGUgYnVmZmVyIHRvCisgICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgdW5pZm9ybSBi
bG9jayBpbiB0aGUgc2hhZGVyLgorICAgICAqLworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBl
LmJpbmRUb0VmZmVjdCA9IGZ1bmN0aW9uIChlZmZlY3QsIG5hbWUpIHsKKyAgICAgICAgdGhpcy5f
Y3VycmVudEVmZmVjdCA9IGVmZmVjdDsKKyAgICAgICAgaWYgKHRoaXMuX25vVUJPIHx8ICF0aGlz
Ll9idWZmZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlZmZl
Y3QuYmluZFVuaWZvcm1CdWZmZXIodGhpcy5fYnVmZmVyLCBuYW1lKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIERpc3Bvc2VzIHRoZSB1bmlmb3JtIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBVbmlm
b3JtQnVmZmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5fbm9VQk8pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2
YXIgdW5pZm9ybUJ1ZmZlcnMgPSB0aGlzLl9lbmdpbmUuX3VuaWZvcm1CdWZmZXJzOworICAgICAg
ICB2YXIgaW5kZXggPSB1bmlmb3JtQnVmZmVycy5pbmRleE9mKHRoaXMpOworICAgICAgICBpZiAo
aW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICB1bmlmb3JtQnVmZmVyc1tpbmRleF0gPSB1bmlm
b3JtQnVmZmVyc1t1bmlmb3JtQnVmZmVycy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIHVuaWZv
cm1CdWZmZXJzLnBvcCgpOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fYnVmZmVyKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2VuZ2lu
ZS5fcmVsZWFzZUJ1ZmZlcih0aGlzLl9idWZmZXIpKSB7CisgICAgICAgICAgICB0aGlzLl9idWZm
ZXIgPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICAvLyBQb29sIGZvciBhdm9pZGluZyBt
ZW1vcnkgbGVha3MKKyAgICBVbmlmb3JtQnVmZmVyLl9NQVhfVU5JRk9STV9TSVpFID0gMjU2Owor
ICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KFVuaWZvcm1C
dWZmZXIuX01BWF9VTklGT1JNX1NJWkUpOworICAgIHJldHVybiBVbmlmb3JtQnVmZmVyOworfSgp
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRocy9pbmRleC50cyI6CisvKiEqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGhzL2luZGV4LnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTY2FsYXIs
IFNwYWNlLCBBeGlzLCBDb2xvcjMsIENvbG9yNCwgVG1wQ29sb3JzLCBUb0dhbW1hU3BhY2UsIFRv
TGluZWFyU3BhY2UsIEVwc2lsb24sIEZydXN0dW0sIFBsYW5lLCBTaXplLCBWZWN0b3IyLCBWZWN0
b3IzLCBWZWN0b3I0LCBRdWF0ZXJuaW9uLCBNYXRyaXgsIFRtcFZlY3RvcnMsIFZpZXdwb3J0LCBT
cGhlcmljYWxIYXJtb25pY3MsIFNwaGVyaWNhbFBvbHlub21pYWwsIE9yaWVudGF0aW9uLCBCZXpp
ZXJDdXJ2ZSwgQW5nbGUsIEFyYzIsIFBhdGgyLCBQYXRoM0QsIEN1cnZlMywgUG9zaXRpb25Ob3Jt
YWxWZXJ0ZXgsIFBvc2l0aW9uTm9ybWFsVGV4dHVyZVZlcnRleCAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGguc2NhbGFyICovICIu
L01hdGhzL21hdGguc2NhbGFyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjYWxhciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlNjYWxhciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGggKi8g
Ii4vTWF0aHMvbWF0aC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGFjZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU3BhY2UiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiQXhpcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQXhpcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJDb2xvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIkNvbG9yMyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvcjQiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9y
NCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUbXBDb2xvcnMiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcENvbG9ycyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJUb0dhbW1hU3BhY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9t
YXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRvR2FtbWFTcGFjZSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJUb0xpbmVhclNwYWNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb0xpbmVhclNwYWNlIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkVwc2lsb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVwc2lsb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiRnJ1c3R1bSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siRnJ1c3R1bSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQbGFuZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUGxh
bmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2l6ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2l6ZSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJWZWN0b3IyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZl
Y3RvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlZlY3RvcjMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmVjdG9yNCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9y
NCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJRdWF0ZXJuaW9uIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk1hdHJpeCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlRtcFZlY3RvcnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Vmlld3BvcnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlZpZXdwb3J0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9yaWVudGF0aW9u
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJPcmllbnRhdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCZXppZXJDdXJ2ZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQmV6
aWVyQ3VydmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5nbGUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFuZ2xlIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkFyYzIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFyYzIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
UGF0aDIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlBhdGgyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhdGgzRCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUGF0aDNEIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN1cnZlMyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21h
dGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ3VydmUzIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlBvc2l0aW9uTm9ybWFsVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb3NpdGlvbk5vcm1hbFZlcnRleCJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJQb3NpdGlvbk5vcm1hbFRleHR1cmVWZXJ0ZXgiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc2l0
aW9uTm9ybWFsVGV4dHVyZVZlcnRleCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9zcGhlcmljYWxQb2x5bm9taWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3NwaGVyaWNhbFBvbHlub21pYWwgKi8gIi4vTWF0aHMvc3Bo
ZXJpY2FsUG9seW5vbWlhbC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGhlcmljYWxIYXJtb25p
Y3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zcGhlcmljYWxQb2x5bm9taWFsX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlNwaGVyaWNhbEhhcm1vbmljcyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJTcGhlcmljYWxQb2x5bm9taWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3BoZXJp
Y2FsUG9seW5vbWlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTcGhlcmljYWxQb2x5
bm9taWFsIl07IH0pOworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGhzL21h
dGguYXhpcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NYXRocy9tYXRoLmF4aXMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTcGFjZSwgQXhpcyAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTcGFjZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3BhY2U7IH0p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiQXhpcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXhpczsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGgudmVjdG9yICovICIu
L01hdGhzL21hdGgudmVjdG9yLnRzIik7CisKKy8qKiBEZWZpbmVzIHN1cHBvcnRlZCBzcGFjZXMg
Ki8KK3ZhciBTcGFjZTsKKyhmdW5jdGlvbiAoU3BhY2UpIHsKKyAgICAvKiogTG9jYWwgKG9iamVj
dCkgc3BhY2UgKi8KKyAgICBTcGFjZVtTcGFjZVsiTE9DQUwiXSA9IDBdID0gIkxPQ0FMIjsKKyAg
ICAvKiogV29ybGQgc3BhY2UgKi8KKyAgICBTcGFjZVtTcGFjZVsiV09STEQiXSA9IDFdID0gIldP
UkxEIjsKKyAgICAvKiogQm9uZSBzcGFjZSAqLworICAgIFNwYWNlW1NwYWNlWyJCT05FIl0gPSAy
XSA9ICJCT05FIjsKK30pKFNwYWNlIHx8IChTcGFjZSA9IHt9KSk7CisvKiogRGVmaW5lcyB0aGUg
MyBtYWluIGF4ZXMgKi8KK3ZhciBBeGlzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
ICAgIGZ1bmN0aW9uIEF4aXMoKSB7CisgICAgfQorICAgIC8qKiBYIGF4aXMgKi8KKyAgICBBeGlz
LlggPSBuZXcgX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3Rv
cjMiXSgxLjAsIDAuMCwgMC4wKTsKKyAgICAvKiogWSBheGlzICovCisgICAgQXhpcy5ZID0gbmV3
IF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMC4w
LCAxLjAsIDAuMCk7CisgICAgLyoqIFogYXhpcyAqLworICAgIEF4aXMuWiA9IG5ldyBfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAuMCwgMC4wLCAx
LjApOworICAgIHJldHVybiBBeGlzOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9NYXRocy9tYXRoLmNvbG9yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9NYXRocy9tYXRoLmNvbG9yLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbG9yMywgQ29sb3I0LCBU
bXBDb2xvcnMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3IzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBDb2xvcjM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3I0
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb2xvcjQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG1w
Q29sb3JzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUbXBDb2xvcnM7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tYXRoLnNjYWxhciAqLyAiLi9NYXRocy9tYXRoLnNj
YWxhci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRoX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tYXRo
LmNvbnN0YW50cyAqLyAiLi9NYXRocy9tYXRoLmNvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NaXNjX2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvYXJyYXlUb29scyAqLyAiLi9NaXNj
L2FycmF5VG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3Rv
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKy8q
KgorICogQ2xhc3MgdXNlZCB0byBob2xkIGEgUkJHIGNvbG9yCisgKi8KK3ZhciBDb2xvcjMgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5l
dyBDb2xvcjMgb2JqZWN0IGZyb20gcmVkLCBncmVlbiwgYmx1ZSB2YWx1ZXMsIGFsbCBiZXR3ZWVu
IDAgYW5kIDEKKyAgICAgKiBAcGFyYW0gciBkZWZpbmVzIHRoZSByZWQgY29tcG9uZW50IChiZXR3
ZWVuIDAgYW5kIDEsIGRlZmF1bHQgaXMgMCkKKyAgICAgKiBAcGFyYW0gZyBkZWZpbmVzIHRoZSBn
cmVlbiBjb21wb25lbnQgKGJldHdlZW4gMCBhbmQgMSwgZGVmYXVsdCBpcyAwKQorICAgICAqIEBw
YXJhbSBiIGRlZmluZXMgdGhlIGJsdWUgY29tcG9uZW50IChiZXR3ZWVuIDAgYW5kIDEsIGRlZmF1
bHQgaXMgMCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDb2xvcjMoCisgICAgLyoqCisgICAgICog
RGVmaW5lcyB0aGUgcmVkIGNvbXBvbmVudCAoYmV0d2VlbiAwIGFuZCAxLCBkZWZhdWx0IGlzIDAp
CisgICAgICovCisgICAgciwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgZ3JlZW4gY29t
cG9uZW50IChiZXR3ZWVuIDAgYW5kIDEsIGRlZmF1bHQgaXMgMCkKKyAgICAgKi8KKyAgICBnLCAK
KyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBibHVlIGNvbXBvbmVudCAoYmV0d2VlbiAwIGFu
ZCAxLCBkZWZhdWx0IGlzIDApCisgICAgICovCisgICAgYikgeworICAgICAgICBpZiAociA9PT0g
dm9pZCAwKSB7IHIgPSAwOyB9CisgICAgICAgIGlmIChnID09PSB2b2lkIDApIHsgZyA9IDA7IH0K
KyAgICAgICAgaWYgKGIgPT09IHZvaWQgMCkgeyBiID0gMDsgfQorICAgICAgICB0aGlzLnIgPSBy
OworICAgICAgICB0aGlzLmcgPSBnOworICAgICAgICB0aGlzLmIgPSBiOworICAgIH0KKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgc3RyaW5nIHdpdGggdGhlIENvbG9yMyBjdXJyZW50IHZhbHVl
cworICAgICAqIEByZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIENvbG9y
MyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gIntSOiAiICsgdGhpcy5yICsgIiBHOiIgKyB0aGlzLmcg
KyAiIEI6IiArIHRoaXMuYiArICJ9IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
dGhlIHN0cmluZyAiQ29sb3IzIgorICAgICAqIEByZXR1cm5zICJDb2xvcjMiCisgICAgICovCisg
ICAgQ29sb3IzLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiAiQ29sb3IzIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXB1dGUgdGhlIENv
bG9yMyBoYXNoIGNvZGUKKyAgICAgKiBAcmV0dXJucyBhbiB1bmlxdWUgbnVtYmVyIHRoYXQgY2Fu
IGJlIHVzZWQgdG8gaGFzaCBDb2xvcjMgb2JqZWN0cworICAgICAqLworICAgIENvbG9yMy5wcm90
b3R5cGUuZ2V0SGFzaENvZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBoYXNoID0gKHRo
aXMuciAqIDI1NSkgfCAwOworICAgICAgICBoYXNoID0gKGhhc2ggKiAzOTcpIF4gKCh0aGlzLmcg
KiAyNTUpIHwgMCk7CisgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAoKHRoaXMuYiAqIDI1
NSkgfCAwKTsKKyAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgfTsKKyAgICAvLyBPcGVyYXRvcnMK
KyAgICAvKioKKyAgICAgKiBTdG9yZXMgaW4gdGhlIGdpdmVuIGFycmF5IGZyb20gdGhlIGdpdmVu
IHN0YXJ0aW5nIGluZGV4IHRoZSByZWQsIGdyZWVuLCBibHVlIHZhbHVlcyBhcyBzdWNjZXNzaXZl
IGVsZW1lbnRzCisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIGFycmF5IHdoZXJlIHRv
IHN0b3JlIHRoZSByLGcsYiBjb21wb25lbnRzCisgICAgICogQHBhcmFtIGluZGV4IGRlZmluZXMg
YW4gb3B0aW9uYWwgaW5kZXggaW4gdGhlIHRhcmdldCBhcnJheSB0byBkZWZpbmUgd2hlcmUgdG8g
c3RhcnQgc3RvcmluZyB2YWx1ZXMKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBDb2xvcjMg
b2JqZWN0CisgICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24g
KGFycmF5LCBpbmRleCkgeworICAgICAgICBpZiAoaW5kZXggPT09IHZvaWQgMCkgeyBpbmRleCA9
IDA7IH0KKyAgICAgICAgYXJyYXlbaW5kZXhdID0gdGhpcy5yOworICAgICAgICBhcnJheVtpbmRl
eCArIDFdID0gdGhpcy5nOworICAgICAgICBhcnJheVtpbmRleCArIDJdID0gdGhpcy5iOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcg
Q29sb3I0IG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IENvbG9yMyBhbmQgdGhlIGdpdmVuIGFscGhh
CisgICAgICogQHBhcmFtIGFscGhhIGRlZmluZXMgdGhlIGFscGhhIGNvbXBvbmVudCBvbiB0aGUg
bmV3IENvbG9yNCBvYmplY3QgKGRlZmF1bHQgaXMgMSkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBD
b2xvcjQgb2JqZWN0CisgICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS50b0NvbG9yNCA9IGZ1
bmN0aW9uIChhbHBoYSkgeworICAgICAgICBpZiAoYWxwaGEgPT09IHZvaWQgMCkgeyBhbHBoYSA9
IDE7IH0KKyAgICAgICAgcmV0dXJuIG5ldyBDb2xvcjQodGhpcy5yLCB0aGlzLmcsIHRoaXMuYiwg
YWxwaGEpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBhcnJheSBwb3B1
bGF0ZWQgd2l0aCAzIG51bWVyaWMgZWxlbWVudHMgOiByZWQsIGdyZWVuIGFuZCBibHVlIHZhbHVl
cworICAgICAqIEByZXR1cm5zIHRoZSBuZXcgYXJyYXkKKyAgICAgKi8KKyAgICBDb2xvcjMucHJv
dG90eXBlLmFzQXJyYXkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgdGhpcy50b0FycmF5KHJlc3VsdCwgMCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsdW1pbmFuY2Ug
dmFsdWUKKyAgICAgKiBAcmV0dXJucyBhIGZsb2F0IHZhbHVlCisgICAgICovCisgICAgQ29sb3Iz
LnByb3RvdHlwZS50b0x1bWluYW5jZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuciAqIDAuMyArIHRoaXMuZyAqIDAuNTkgKyB0aGlzLmIgKiAwLjExOworICAgIH07CisgICAg
LyoqCisgICAgICogTXVsdGlwbHkgZWFjaCBDb2xvcjMgcmdiIHZhbHVlcyBieSB0aGUgZ2l2ZW4g
Q29sb3IzIHJnYiB2YWx1ZXMgaW4gYSBuZXcgQ29sb3IzIG9iamVjdAorICAgICAqIEBwYXJhbSBv
dGhlckNvbG9yIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHJldHVybnMgdGhl
IG5ldyBDb2xvcjMgb2JqZWN0CisgICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS5tdWx0aXBs
eSA9IGZ1bmN0aW9uIChvdGhlckNvbG9yKSB7CisgICAgICAgIHJldHVybiBuZXcgQ29sb3IzKHRo
aXMuciAqIG90aGVyQ29sb3IuciwgdGhpcy5nICogb3RoZXJDb2xvci5nLCB0aGlzLmIgKiBvdGhl
ckNvbG9yLmIpOworICAgIH07CisgICAgLyoqCisgICAgICogTXVsdGlwbHkgdGhlIHJnYiB2YWx1
ZXMgb2YgdGhlIENvbG9yMyBhbmQgdGhlIGdpdmVuIENvbG9yMyBhbmQgc3RvcmVzIHRoZSByZXN1
bHQgaW4gdGhlIG9iamVjdCAicmVzdWx0IgorICAgICAqIEBwYXJhbSBvdGhlckNvbG9yIGRlZmlu
ZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSBD
b2xvcjMgb2JqZWN0IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0
aGUgY3VycmVudCBDb2xvcjMKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLm11bHRpcGx5
VG9SZWYgPSBmdW5jdGlvbiAob3RoZXJDb2xvciwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC5y
ID0gdGhpcy5yICogb3RoZXJDb2xvci5yOworICAgICAgICByZXN1bHQuZyA9IHRoaXMuZyAqIG90
aGVyQ29sb3IuZzsKKyAgICAgICAgcmVzdWx0LmIgPSB0aGlzLmIgKiBvdGhlckNvbG9yLmI7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBl
cXVhbGl0eSBiZXR3ZWVuIENvbG9yMyBvYmplY3RzCisgICAgICogQHBhcmFtIG90aGVyQ29sb3Ig
ZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBy
Z2IgdmFsdWVzIGFyZSBlcXVhbCB0byB0aGUgZ2l2ZW4gb25lcworICAgICAqLworICAgIENvbG9y
My5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyQ29sb3IpIHsKKyAgICAgICAgcmV0
dXJuIG90aGVyQ29sb3IgJiYgdGhpcy5yID09PSBvdGhlckNvbG9yLnIgJiYgdGhpcy5nID09PSBv
dGhlckNvbG9yLmcgJiYgdGhpcy5iID09PSBvdGhlckNvbG9yLmI7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBEZXRlcm1pbmVzIGVxdWFsaXR5IGJldHdlZW4gdGhlIGN1cnJlbnQgQ29sb3IzIG9i
amVjdCBhbmQgYSBzZXQgb2YgcixiLGcgdmFsdWVzCisgICAgICogQHBhcmFtIHIgZGVmaW5lcyB0
aGUgcmVkIGNvbXBvbmVudCB0byBjaGVjaworICAgICAqIEBwYXJhbSBnIGRlZmluZXMgdGhlIGdy
ZWVuIGNvbXBvbmVudCB0byBjaGVjaworICAgICAqIEBwYXJhbSBiIGRlZmluZXMgdGhlIGJsdWUg
Y29tcG9uZW50IHRvIGNoZWNrCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgcmdiIHZhbHVl
cyBhcmUgZXF1YWwgdG8gdGhlIGdpdmVuIG9uZXMKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90
eXBlLmVxdWFsc0Zsb2F0cyA9IGZ1bmN0aW9uIChyLCBnLCBiKSB7CisgICAgICAgIHJldHVybiB0
aGlzLnIgPT09IHIgJiYgdGhpcy5nID09PSBnICYmIHRoaXMuYiA9PT0gYjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIE11bHRpcGxpZXMgaW4gcGxhY2UgZWFjaCByZ2IgdmFsdWUgYnkgc2NhbGUK
KyAgICAgKiBAcGFyYW0gc2NhbGUgZGVmaW5lcyB0aGUgc2NhbGluZyBmYWN0b3IKKyAgICAgKiBA
cmV0dXJucyB0aGUgdXBkYXRlZCBDb2xvcjMKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBl
LnNjYWxlID0gZnVuY3Rpb24gKHNjYWxlKSB7CisgICAgICAgIHJldHVybiBuZXcgQ29sb3IzKHRo
aXMuciAqIHNjYWxlLCB0aGlzLmcgKiBzY2FsZSwgdGhpcy5iICogc2NhbGUpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogTXVsdGlwbGllcyB0aGUgcmdiIHZhbHVlcyBieSBzY2FsZSBhbmQgc3Rv
cmVzIHRoZSByZXN1bHQgaW50byAicmVzdWx0IgorICAgICAqIEBwYXJhbSBzY2FsZSBkZWZpbmVz
IHRoZSBzY2FsaW5nIGZhY3RvcgorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgQ29s
b3IzIG9iamVjdCB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0CisgICAgICogQHJldHVybnMgdGhl
IHVubW9kaWZpZWQgY3VycmVudCBDb2xvcjMKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBl
LnNjYWxlVG9SZWYgPSBmdW5jdGlvbiAoc2NhbGUsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQu
ciA9IHRoaXMuciAqIHNjYWxlOworICAgICAgICByZXN1bHQuZyA9IHRoaXMuZyAqIHNjYWxlOwor
ICAgICAgICByZXN1bHQuYiA9IHRoaXMuYiAqIHNjYWxlOworICAgICAgICByZXR1cm4gdGhpczsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNjYWxlIHRoZSBjdXJyZW50IENvbG9yMyB2YWx1ZXMg
YnkgYSBmYWN0b3IgYW5kIGFkZCB0aGUgcmVzdWx0IHRvIGEgZ2l2ZW4gQ29sb3IzCisgICAgICog
QHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxlIGZhY3RvcgorICAgICAqIEBwYXJhbSByZXN1
bHQgZGVmaW5lcyBjb2xvciB0byBzdG9yZSB0aGUgcmVzdWx0IGludG8KKyAgICAgKiBAcmV0dXJu
cyB0aGUgdW5tb2RpZmllZCBjdXJyZW50IENvbG9yMworICAgICAqLworICAgIENvbG9yMy5wcm90
b3R5cGUuc2NhbGVBbmRBZGRUb1JlZiA9IGZ1bmN0aW9uIChzY2FsZSwgcmVzdWx0KSB7CisgICAg
ICAgIHJlc3VsdC5yICs9IHRoaXMuciAqIHNjYWxlOworICAgICAgICByZXN1bHQuZyArPSB0aGlz
LmcgKiBzY2FsZTsKKyAgICAgICAgcmVzdWx0LmIgKz0gdGhpcy5iICogc2NhbGU7CisgICAgICAg
IHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ2xhbXBzIHRoZSByZ2IgdmFs
dWVzIGJ5IHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGludG8g
InJlc3VsdCIKKyAgICAgKiBAcGFyYW0gbWluIGRlZmluZXMgbWluaW11bSBjbGFtcGluZyB2YWx1
ZSAoZGVmYXVsdCBpcyAwKQorICAgICAqIEBwYXJhbSBtYXggZGVmaW5lcyBtYXhpbXVtIGNsYW1w
aW5nIHZhbHVlIChkZWZhdWx0IGlzIDEpCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIGNv
bG9yIHRvIHN0b3JlIHRoZSByZXN1bHQgaW50bworICAgICAqIEByZXR1cm5zIHRoZSBvcmlnaW5h
bCBDb2xvcjMKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLmNsYW1wVG9SZWYgPSBmdW5j
dGlvbiAobWluLCBtYXgsIHJlc3VsdCkgeworICAgICAgICBpZiAobWluID09PSB2b2lkIDApIHsg
bWluID0gMDsgfQorICAgICAgICBpZiAobWF4ID09PSB2b2lkIDApIHsgbWF4ID0gMTsgfQorICAg
ICAgICByZXN1bHQuciA9IF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJTY2FsYXIiXS5DbGFtcCh0aGlzLnIsIG1pbiwgbWF4KTsKKyAgICAgICAgcmVzdWx0LmcgPSBf
bWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uQ2xhbXAo
dGhpcy5nLCBtaW4sIG1heCk7CisgICAgICAgIHJlc3VsdC5iID0gX21hdGhfc2NhbGFyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjYWxhciJdLkNsYW1wKHRoaXMuYiwgbWluLCBtYXgp
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgQ29sb3IzIHNldCB3aXRoIHRoZSBhZGRlZCB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgQ29s
b3IzIGFuZCBvZiB0aGUgZ2l2ZW4gb25lCisgICAgICogQHBhcmFtIG90aGVyQ29sb3IgZGVmaW5l
cyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IENvbG9yMworICAg
ICAqLworICAgIENvbG9yMy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG90aGVyQ29sb3IpIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBDb2xvcjModGhpcy5yICsgb3RoZXJDb2xvci5yLCB0aGlzLmcg
KyBvdGhlckNvbG9yLmcsIHRoaXMuYiArIG90aGVyQ29sb3IuYik7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgYWRkaXRpb24gb2YgdGhlIGN1cnJlbnQg
Q29sb3IzIGFuZCBnaXZlbiBvbmUgcmdiIHZhbHVlcyBpbnRvICJyZXN1bHQiCisgICAgICogQHBh
cmFtIG90aGVyQ29sb3IgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0g
cmVzdWx0IGRlZmluZXMgQ29sb3IzIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGludG8KKyAg
ICAgKiBAcmV0dXJucyB0aGUgdW5tb2RpZmllZCBjdXJyZW50IENvbG9yMworICAgICAqLworICAg
IENvbG9yMy5wcm90b3R5cGUuYWRkVG9SZWYgPSBmdW5jdGlvbiAob3RoZXJDb2xvciwgcmVzdWx0
KSB7CisgICAgICAgIHJlc3VsdC5yID0gdGhpcy5yICsgb3RoZXJDb2xvci5yOworICAgICAgICBy
ZXN1bHQuZyA9IHRoaXMuZyArIG90aGVyQ29sb3IuZzsKKyAgICAgICAgcmVzdWx0LmIgPSB0aGlz
LmIgKyBvdGhlckNvbG9yLmI7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoq
CisgICAgICogUmV0dXJucyBhIG5ldyBDb2xvcjMgc2V0IHdpdGggdGhlIHN1YnRyYWN0ZWQgdmFs
dWVzIG9mIHRoZSBnaXZlbiBvbmUgZnJvbSB0aGUgY3VycmVudCBDb2xvcjMKKyAgICAgKiBAcGFy
YW0gb3RoZXJDb2xvciBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5z
IHRoZSBuZXcgQ29sb3IzCisgICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS5zdWJ0cmFjdCA9
IGZ1bmN0aW9uIChvdGhlckNvbG9yKSB7CisgICAgICAgIHJldHVybiBuZXcgQ29sb3IzKHRoaXMu
ciAtIG90aGVyQ29sb3IuciwgdGhpcy5nIC0gb3RoZXJDb2xvci5nLCB0aGlzLmIgLSBvdGhlckNv
bG9yLmIpOworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcmVzIHRoZSByZXN1bHQgb2YgdGhl
IHN1YnRyYWN0aW9uIG9mIGdpdmVuIG9uZSBmcm9tIHRoZSBjdXJyZW50IENvbG9yMyByZ2IgdmFs
dWVzIGludG8gInJlc3VsdCIKKyAgICAgKiBAcGFyYW0gb3RoZXJDb2xvciBkZWZpbmVzIHRoZSBz
ZWNvbmQgb3BlcmFuZAorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyBDb2xvcjMgb2JqZWN0
IHRvIHN0b3JlIHRoZSByZXN1bHQgaW50bworICAgICAqIEByZXR1cm5zIHRoZSB1bm1vZGlmaWVk
IGN1cnJlbnQgQ29sb3IzCisgICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS5zdWJ0cmFjdFRv
UmVmID0gZnVuY3Rpb24gKG90aGVyQ29sb3IsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQuciA9
IHRoaXMuciAtIG90aGVyQ29sb3IucjsKKyAgICAgICAgcmVzdWx0LmcgPSB0aGlzLmcgLSBvdGhl
ckNvbG9yLmc7CisgICAgICAgIHJlc3VsdC5iID0gdGhpcy5iIC0gb3RoZXJDb2xvci5iOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvcHkgdGhlIGN1cnJl
bnQgb2JqZWN0CisgICAgICogQHJldHVybnMgYSBuZXcgQ29sb3IzIGNvcGllZCB0aGUgY3VycmVu
dCBvbmUKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gbmV3IENvbG9yMyh0aGlzLnIsIHRoaXMuZywgdGhpcy5iKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIENvcGllcyB0aGUgcmdiIHZhbHVlcyBmcm9tIHRoZSBzb3Vy
Y2UgaW4gdGhlIGN1cnJlbnQgQ29sb3IzCisgICAgICogQHBhcmFtIHNvdXJjZSBkZWZpbmVzIHRo
ZSBzb3VyY2UgQ29sb3IzIG9iamVjdAorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIENvbG9y
MyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLmNvcHlGcm9tID0gZnVuY3Rp
b24gKHNvdXJjZSkgeworICAgICAgICB0aGlzLnIgPSBzb3VyY2UucjsKKyAgICAgICAgdGhpcy5n
ID0gc291cmNlLmc7CisgICAgICAgIHRoaXMuYiA9IHNvdXJjZS5iOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIENvbG9yMyByZ2IgdmFs
dWVzIGZyb20gdGhlIGdpdmVuIGZsb2F0cworICAgICAqIEBwYXJhbSByIGRlZmluZXMgdGhlIHJl
ZCBjb21wb25lbnQgdG8gcmVhZCBmcm9tCisgICAgICogQHBhcmFtIGcgZGVmaW5lcyB0aGUgZ3Jl
ZW4gY29tcG9uZW50IHRvIHJlYWQgZnJvbQorICAgICAqIEBwYXJhbSBiIGRlZmluZXMgdGhlIGJs
dWUgY29tcG9uZW50IHRvIHJlYWQgZnJvbQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IENv
bG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLmNvcHlGcm9tRmxvYXRz
ID0gZnVuY3Rpb24gKHIsIGcsIGIpIHsKKyAgICAgICAgdGhpcy5yID0gcjsKKyAgICAgICAgdGhp
cy5nID0gZzsKKyAgICAgICAgdGhpcy5iID0gYjsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBDb2xvcjMgcmdiIHZhbHVlcyBmcm9tIHRo
ZSBnaXZlbiBmbG9hdHMKKyAgICAgKiBAcGFyYW0gciBkZWZpbmVzIHRoZSByZWQgY29tcG9uZW50
IHRvIHJlYWQgZnJvbQorICAgICAqIEBwYXJhbSBnIGRlZmluZXMgdGhlIGdyZWVuIGNvbXBvbmVu
dCB0byByZWFkIGZyb20KKyAgICAgKiBAcGFyYW0gYiBkZWZpbmVzIHRoZSBibHVlIGNvbXBvbmVu
dCB0byByZWFkIGZyb20KKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBDb2xvcjMgb2JqZWN0
CisgICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAociwgZywgYikg
eworICAgICAgICByZXR1cm4gdGhpcy5jb3B5RnJvbUZsb2F0cyhyLCBnLCBiKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIENvbXB1dGUgdGhlIENvbG9yMyBoZXhhZGVjaW1hbCBjb2RlIGFzIGEg
c3RyaW5nCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgaGV4YWRlY2lt
YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xv
cjMucHJvdG90eXBlLnRvSGV4U3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaW50
UiA9ICh0aGlzLnIgKiAyNTUpIHwgMDsKKyAgICAgICAgdmFyIGludEcgPSAodGhpcy5nICogMjU1
KSB8IDA7CisgICAgICAgIHZhciBpbnRCID0gKHRoaXMuYiAqIDI1NSkgfCAwOworICAgICAgICBy
ZXR1cm4gIiMiICsgX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNj
YWxhciJdLlRvSGV4KGludFIpICsgX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlNjYWxhciJdLlRvSGV4KGludEcpICsgX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlNjYWxhciJdLlRvSGV4KGludEIpOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ29tcHV0ZXMgYSBuZXcgQ29sb3IzIGNvbnZlcnRlZCBmcm9tIHRoZSBjdXJyZW50IG9u
ZSB0byBsaW5lYXIgc3BhY2UKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjMgb2JqZWN0Cisg
ICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS50b0xpbmVhclNwYWNlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgY29udmVydGVkQ29sb3IgPSBuZXcgQ29sb3IzKCk7CisgICAgICAgIHRo
aXMudG9MaW5lYXJTcGFjZVRvUmVmKGNvbnZlcnRlZENvbG9yKTsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRlZENvbG9yOworICAgIH07CisgICAgLyoqCisgICAgICogQ29udmVydHMgY3VycmVudCBj
b2xvciBpbiByZ2Igc3BhY2UgdG8gSFNWIHZhbHVlcworICAgICAqIEByZXR1cm5zIGEgbmV3IGNv
bG9yMyByZXByZXNlbnRpbmcgdGhlIEhTViB2YWx1ZXMKKyAgICAgKi8KKyAgICBDb2xvcjMucHJv
dG90eXBlLnRvSFNWID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IENv
bG9yMygpOworICAgICAgICB0aGlzLnRvSFNWVG9SZWYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbnZlcnRzIGN1cnJlbnQgY29sb3Ig
aW4gcmdiIHNwYWNlIHRvIEhTViB2YWx1ZXMKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMg
dGhlIENvbG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgSFNWIHZhbHVlcworICAgICAqLworICAgIENv
bG9yMy5wcm90b3R5cGUudG9IU1ZUb1JlZiA9IGZ1bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAg
dmFyIHIgPSB0aGlzLnI7CisgICAgICAgIHZhciBnID0gdGhpcy5nOworICAgICAgICB2YXIgYiA9
IHRoaXMuYjsKKyAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpOworICAgICAgICB2
YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7CisgICAgICAgIHZhciBoID0gMDsKKyAgICAgICAg
dmFyIHMgPSAwOworICAgICAgICB2YXIgdiA9IG1heDsKKyAgICAgICAgdmFyIGRtID0gbWF4IC0g
bWluOworICAgICAgICBpZiAobWF4ICE9PSAwKSB7CisgICAgICAgICAgICBzID0gZG0gLyBtYXg7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1heCAhPSBtaW4pIHsKKyAgICAgICAgICAgIGlmICht
YXggPT0gcikgeworICAgICAgICAgICAgICAgIGggPSAoZyAtIGIpIC8gZG07CisgICAgICAgICAg
ICAgICAgaWYgKGcgPCBiKSB7CisgICAgICAgICAgICAgICAgICAgIGggKz0gNjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtYXggPT0gZykg
eworICAgICAgICAgICAgICAgIGggPSAoYiAtIHIpIC8gZG0gKyAyOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAobWF4ID09IGIpIHsKKyAgICAgICAgICAgICAgICBoID0gKHIg
LSBnKSAvIGRtICsgNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGggKj0gNjA7CisgICAg
ICAgIH0KKyAgICAgICAgcmVzdWx0LnIgPSBoOworICAgICAgICByZXN1bHQuZyA9IHM7CisgICAg
ICAgIHJlc3VsdC5iID0gdjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbnZlcnRzIHRoZSBD
b2xvcjMgdmFsdWVzIHRvIGxpbmVhciBzcGFjZSBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gImNv
bnZlcnRlZENvbG9yIgorICAgICAqIEBwYXJhbSBjb252ZXJ0ZWRDb2xvciBkZWZpbmVzIHRoZSBD
b2xvcjMgb2JqZWN0IHdoZXJlIHRvIHN0b3JlIHRoZSBsaW5lYXIgc3BhY2UgdmVyc2lvbgorICAg
ICAqIEByZXR1cm5zIHRoZSB1bm1vZGlmaWVkIENvbG9yMworICAgICAqLworICAgIENvbG9yMy5w
cm90b3R5cGUudG9MaW5lYXJTcGFjZVRvUmVmID0gZnVuY3Rpb24gKGNvbnZlcnRlZENvbG9yKSB7
CisgICAgICAgIGNvbnZlcnRlZENvbG9yLnIgPSBNYXRoLnBvdyh0aGlzLnIsIF9tYXRoX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb0xpbmVhclNwYWNlIl0pOworICAg
ICAgICBjb252ZXJ0ZWRDb2xvci5nID0gTWF0aC5wb3codGhpcy5nLCBfbWF0aF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG9MaW5lYXJTcGFjZSJdKTsKKyAgICAgICAg
Y29udmVydGVkQ29sb3IuYiA9IE1hdGgucG93KHRoaXMuYiwgX21hdGhfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRvTGluZWFyU3BhY2UiXSk7CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ29tcHV0ZXMgYSBuZXcgQ29sb3IzIGNv
bnZlcnRlZCBmcm9tIHRoZSBjdXJyZW50IG9uZSB0byBnYW1tYSBzcGFjZQorICAgICAqIEByZXR1
cm5zIGEgbmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLnRv
R2FtbWFTcGFjZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGNvbnZlcnRlZENvbG9yID0g
bmV3IENvbG9yMygpOworICAgICAgICB0aGlzLnRvR2FtbWFTcGFjZVRvUmVmKGNvbnZlcnRlZENv
bG9yKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRlZENvbG9yOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ29udmVydHMgdGhlIENvbG9yMyB2YWx1ZXMgdG8gZ2FtbWEgc3BhY2UgYW5kIHN0b3Jl
cyB0aGUgcmVzdWx0IGluICJjb252ZXJ0ZWRDb2xvciIKKyAgICAgKiBAcGFyYW0gY29udmVydGVk
Q29sb3IgZGVmaW5lcyB0aGUgQ29sb3IzIG9iamVjdCB3aGVyZSB0byBzdG9yZSB0aGUgZ2FtbWEg
c3BhY2UgdmVyc2lvbgorICAgICAqIEByZXR1cm5zIHRoZSB1bm1vZGlmaWVkIENvbG9yMworICAg
ICAqLworICAgIENvbG9yMy5wcm90b3R5cGUudG9HYW1tYVNwYWNlVG9SZWYgPSBmdW5jdGlvbiAo
Y29udmVydGVkQ29sb3IpIHsKKyAgICAgICAgY29udmVydGVkQ29sb3IuciA9IE1hdGgucG93KHRo
aXMuciwgX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRvR2Ft
bWFTcGFjZSJdKTsKKyAgICAgICAgY29udmVydGVkQ29sb3IuZyA9IE1hdGgucG93KHRoaXMuZywg
X21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRvR2FtbWFTcGFj
ZSJdKTsKKyAgICAgICAgY29udmVydGVkQ29sb3IuYiA9IE1hdGgucG93KHRoaXMuYiwgX21hdGhf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRvR2FtbWFTcGFjZSJdKTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IEh1
ZSwgc2F0dXJhdGlvbiBhbmQgdmFsdWUgdG8gYSBDb2xvcjMgKFJHQikKKyAgICAgKiBAcGFyYW0g
aHVlIGRlZmluZXMgdGhlIGh1ZQorICAgICAqIEBwYXJhbSBzYXR1cmF0aW9uIGRlZmluZXMgdGhl
IHNhdHVyYXRpb24KKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5lcyB0aGUgdmFsdWUKKyAgICAg
KiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIENvbG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgUkdC
IHZhbHVlcworICAgICAqLworICAgIENvbG9yMy5IU1Z0b1JHQlRvUmVmID0gZnVuY3Rpb24gKGh1
ZSwgc2F0dXJhdGlvbiwgdmFsdWUsIHJlc3VsdCkgeworICAgICAgICB2YXIgY2hyb21hID0gdmFs
dWUgKiBzYXR1cmF0aW9uOworICAgICAgICB2YXIgaCA9IGh1ZSAvIDYwOworICAgICAgICB2YXIg
eCA9IGNocm9tYSAqICgxIC0gTWF0aC5hYnMoKGggJSAyKSAtIDEpKTsKKyAgICAgICAgdmFyIHIg
PSAwOworICAgICAgICB2YXIgZyA9IDA7CisgICAgICAgIHZhciBiID0gMDsKKyAgICAgICAgaWYg
KGggPj0gMCAmJiBoIDw9IDEpIHsKKyAgICAgICAgICAgIHIgPSBjaHJvbWE7CisgICAgICAgICAg
ICBnID0geDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChoID49IDEgJiYgaCA8PSAyKSB7
CisgICAgICAgICAgICByID0geDsKKyAgICAgICAgICAgIGcgPSBjaHJvbWE7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoaCA+PSAyICYmIGggPD0gMykgeworICAgICAgICAgICAgZyA9IGNo
cm9tYTsKKyAgICAgICAgICAgIGIgPSB4OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGgg
Pj0gMyAmJiBoIDw9IDQpIHsKKyAgICAgICAgICAgIGcgPSB4OworICAgICAgICAgICAgYiA9IGNo
cm9tYTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChoID49IDQgJiYgaCA8PSA1KSB7Cisg
ICAgICAgICAgICByID0geDsKKyAgICAgICAgICAgIGIgPSBjaHJvbWE7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoaCA+PSA1ICYmIGggPD0gNikgeworICAgICAgICAgICAgciA9IGNocm9t
YTsKKyAgICAgICAgICAgIGIgPSB4OworICAgICAgICB9CisgICAgICAgIHZhciBtID0gdmFsdWUg
LSBjaHJvbWE7CisgICAgICAgIHJlc3VsdC5zZXQoKHIgKyBtKSwgKGcgKyBtKSwgKGIgKyBtKSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IENvbG9yMyBmcm9tIHRoZSBz
dHJpbmcgY29udGFpbmluZyB2YWxpZCBoZXhhZGVjaW1hbCB2YWx1ZXMKKyAgICAgKiBAcGFyYW0g
aGV4IGRlZmluZXMgYSBzdHJpbmcgY29udGFpbmluZyB2YWxpZCBoZXhhZGVjaW1hbCB2YWx1ZXMK
KyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjMgb2JqZWN0CisgICAgICovCisgICAgQ29sb3Iz
LkZyb21IZXhTdHJpbmcgPSBmdW5jdGlvbiAoaGV4KSB7CisgICAgICAgIGlmIChoZXguc3Vic3Ry
aW5nKDAsIDEpICE9PSAiIyIgfHwgaGV4Lmxlbmd0aCAhPT0gNykgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyBDb2xvcjMoMCwgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHIgPSBwYXJz
ZUludChoZXguc3Vic3RyaW5nKDEsIDMpLCAxNik7CisgICAgICAgIHZhciBnID0gcGFyc2VJbnQo
aGV4LnN1YnN0cmluZygzLCA1KSwgMTYpOworICAgICAgICB2YXIgYiA9IHBhcnNlSW50KGhleC5z
dWJzdHJpbmcoNSwgNyksIDE2KTsKKyAgICAgICAgcmV0dXJuIENvbG9yMy5Gcm9tSW50cyhyLCBn
LCBiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgQ29sb3IzIGZyb20g
dGhlIHN0YXJ0aW5nIGluZGV4IG9mIHRoZSBnaXZlbiBhcnJheQorICAgICAqIEBwYXJhbSBhcnJh
eSBkZWZpbmVzIHRoZSBzb3VyY2UgYXJyYXkKKyAgICAgKiBAcGFyYW0gb2Zmc2V0IGRlZmluZXMg
YW4gb2Zmc2V0IGluIHRoZSBzb3VyY2UgYXJyYXkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xv
cjMgb2JqZWN0CisgICAgICovCisgICAgQ29sb3IzLkZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJh
eSwgb2Zmc2V0KSB7CisgICAgICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgeyBvZmZzZXQgPSAw
OyB9CisgICAgICAgIHJldHVybiBuZXcgQ29sb3IzKGFycmF5W29mZnNldF0sIGFycmF5W29mZnNl
dCArIDFdLCBhcnJheVtvZmZzZXQgKyAyXSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IENvbG9yMyBmcm9tIGludGVnZXIgdmFsdWVzICg8IDI1NikKKyAgICAgKiBAcGFy
YW0gciBkZWZpbmVzIHRoZSByZWQgY29tcG9uZW50IHRvIHJlYWQgZnJvbSAodmFsdWUgYmV0d2Vl
biAwIGFuZCAyNTUpCisgICAgICogQHBhcmFtIGcgZGVmaW5lcyB0aGUgZ3JlZW4gY29tcG9uZW50
IHRvIHJlYWQgZnJvbSAodmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUpCisgICAgICogQHBhcmFtIGIg
ZGVmaW5lcyB0aGUgYmx1ZSBjb21wb25lbnQgdG8gcmVhZCBmcm9tICh2YWx1ZSBiZXR3ZWVuIDAg
YW5kIDI1NSkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjMgb2JqZWN0CisgICAgICovCisg
ICAgQ29sb3IzLkZyb21JbnRzID0gZnVuY3Rpb24gKHIsIGcsIGIpIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBDb2xvcjMociAvIDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUuMCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IENvbG9yMyB3aXRoIHZhbHVlcyBsaW5lYXJseSBp
bnRlcnBvbGF0ZWQgb2YgImFtb3VudCIgYmV0d2VlbiB0aGUgc3RhcnQgQ29sb3IzIGFuZCB0aGUg
ZW5kIENvbG9yMworICAgICAqIEBwYXJhbSBzdGFydCBkZWZpbmVzIHRoZSBzdGFydCBDb2xvcjMg
dmFsdWUKKyAgICAgKiBAcGFyYW0gZW5kIGRlZmluZXMgdGhlIGVuZCBDb2xvcjMgdmFsdWUKKyAg
ICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHZhbHVlIGJldHdlZW4gc3Rh
cnQgYW5kIGVuZAorICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8K
KyAgICBDb2xvcjMuTGVycCA9IGZ1bmN0aW9uIChzdGFydCwgZW5kLCBhbW91bnQpIHsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IG5ldyBDb2xvcjMoMC4wLCAwLjAsIDAuMCk7CisgICAgICAgIENvbG9y
My5MZXJwVG9SZWYoc3RhcnQsIGVuZCwgYW1vdW50LCByZXN1bHQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBDb2xvcjMgd2l0
aCB2YWx1ZXMgbGluZWFybHkgaW50ZXJwb2xhdGVkIG9mICJhbW91bnQiIGJldHdlZW4gdGhlIHN0
YXJ0IENvbG9yMyBhbmQgdGhlIGVuZCBDb2xvcjMKKyAgICAgKiBAcGFyYW0gbGVmdCBkZWZpbmVz
IHRoZSBzdGFydCB2YWx1ZQorICAgICAqIEBwYXJhbSByaWdodCBkZWZpbmVzIHRoZSBlbmQgdmFs
dWUKKyAgICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGdyYWRpZW50IGZhY3RvcgorICAg
ICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgQ29sb3IzIG9iamVjdCB3aGVyZSB0byBzdG9y
ZSB0aGUgcmVzdWx0CisgICAgICovCisgICAgQ29sb3IzLkxlcnBUb1JlZiA9IGZ1bmN0aW9uIChs
ZWZ0LCByaWdodCwgYW1vdW50LCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnIgPSBsZWZ0LnIg
KyAoKHJpZ2h0LnIgLSBsZWZ0LnIpICogYW1vdW50KTsKKyAgICAgICAgcmVzdWx0LmcgPSBsZWZ0
LmcgKyAoKHJpZ2h0LmcgLSBsZWZ0LmcpICogYW1vdW50KTsKKyAgICAgICAgcmVzdWx0LmIgPSBs
ZWZ0LmIgKyAoKHJpZ2h0LmIgLSBsZWZ0LmIpICogYW1vdW50KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJldHVybnMgYSBDb2xvcjMgdmFsdWUgY29udGFpbmluZyBhIHJlZCBjb2xvcgorICAg
ICAqIEByZXR1cm5zIGEgbmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMuUmVk
ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IENvbG9yMygxLCAwLCAwKTsgfTsKKyAgICAvKioK
KyAgICAgKiBSZXR1cm5zIGEgQ29sb3IzIHZhbHVlIGNvbnRhaW5pbmcgYSBncmVlbiBjb2xvcgor
ICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMu
R3JlZW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29sb3IzKDAsIDEsIDApOyB9OworICAg
IC8qKgorICAgICAqIFJldHVybnMgYSBDb2xvcjMgdmFsdWUgY29udGFpbmluZyBhIGJsdWUgY29s
b3IKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjMgb2JqZWN0CisgICAgICovCisgICAgQ29s
b3IzLkJsdWUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29sb3IzKDAsIDAsIDEpOyB9Owor
ICAgIC8qKgorICAgICAqIFJldHVybnMgYSBDb2xvcjMgdmFsdWUgY29udGFpbmluZyBhIGJsYWNr
IGNvbG9yCisgICAgICogQHJldHVybnMgYSBuZXcgQ29sb3IzIG9iamVjdAorICAgICAqLworICAg
IENvbG9yMy5CbGFjayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBDb2xvcjMoMCwgMCwgMCk7
IH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yMywgIkJsYWNrUmVhZE9ubHkiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgICogR2V0cyBhIENvbG9yMyB2YWx1ZSBjb250YWluaW5n
IGEgYmxhY2sgY29sb3IgdGhhdCBtdXN0IG5vdCBiZSB1cGRhdGVkCisgICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gQ29sb3IzLl9CbGFj
a1JlYWRPbmx5OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEg
Q29sb3IzIHZhbHVlIGNvbnRhaW5pbmcgYSB3aGl0ZSBjb2xvcgorICAgICAqIEByZXR1cm5zIGEg
bmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMuV2hpdGUgPSBmdW5jdGlvbiAo
KSB7IHJldHVybiBuZXcgQ29sb3IzKDEsIDEsIDEpOyB9OworICAgIC8qKgorICAgICAqIFJldHVy
bnMgYSBDb2xvcjMgdmFsdWUgY29udGFpbmluZyBhIHB1cnBsZSBjb2xvcgorICAgICAqIEByZXR1
cm5zIGEgbmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMuUHVycGxlID0gZnVu
Y3Rpb24gKCkgeyByZXR1cm4gbmV3IENvbG9yMygwLjUsIDAsIDAuNSk7IH07CisgICAgLyoqCisg
ICAgICogUmV0dXJucyBhIENvbG9yMyB2YWx1ZSBjb250YWluaW5nIGEgbWFnZW50YSBjb2xvcgor
ICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMu
TWFnZW50YSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBDb2xvcjMoMSwgMCwgMSk7IH07Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIENvbG9yMyB2YWx1ZSBjb250YWluaW5nIGEgeWVsbG93
IGNvbG9yCisgICAgICogQHJldHVybnMgYSBuZXcgQ29sb3IzIG9iamVjdAorICAgICAqLworICAg
IENvbG9yMy5ZZWxsb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29sb3IzKDEsIDEsIDAp
OyB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBDb2xvcjMgdmFsdWUgY29udGFpbmluZyBh
IGdyYXkgY29sb3IKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjMgb2JqZWN0CisgICAgICov
CisgICAgQ29sb3IzLkdyYXkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29sb3IzKDAuNSwg
MC41LCAwLjUpOyB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBDb2xvcjMgdmFsdWUgY29u
dGFpbmluZyBhIHRlYWwgY29sb3IKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjMgb2JqZWN0
CisgICAgICovCisgICAgQ29sb3IzLlRlYWwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29s
b3IzKDAsIDEuMCwgMS4wKTsgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgQ29sb3IzIHZh
bHVlIGNvbnRhaW5pbmcgYSByYW5kb20gY29sb3IKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xv
cjMgb2JqZWN0CisgICAgICovCisgICAgQ29sb3IzLlJhbmRvbSA9IGZ1bmN0aW9uICgpIHsgcmV0
dXJuIG5ldyBDb2xvcjMoTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20o
KSk7IH07CisgICAgLy8gU3RhdGljcworICAgIENvbG9yMy5fQmxhY2tSZWFkT25seSA9IENvbG9y
My5CbGFjaygpOworICAgIHJldHVybiBDb2xvcjM7Cit9KCkpOworCisvKioKKyAqIENsYXNzIHVz
ZWQgdG8gaG9sZCBhIFJCR0EgY29sb3IKKyAqLwordmFyIENvbG9yNCA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IENvbG9yNCBvYmpl
Y3QgZnJvbSByZWQsIGdyZWVuLCBibHVlIHZhbHVlcywgYWxsIGJldHdlZW4gMCBhbmQgMQorICAg
ICAqIEBwYXJhbSByIGRlZmluZXMgdGhlIHJlZCBjb21wb25lbnQgKGJldHdlZW4gMCBhbmQgMSwg
ZGVmYXVsdCBpcyAwKQorICAgICAqIEBwYXJhbSBnIGRlZmluZXMgdGhlIGdyZWVuIGNvbXBvbmVu
dCAoYmV0d2VlbiAwIGFuZCAxLCBkZWZhdWx0IGlzIDApCisgICAgICogQHBhcmFtIGIgZGVmaW5l
cyB0aGUgYmx1ZSBjb21wb25lbnQgKGJldHdlZW4gMCBhbmQgMSwgZGVmYXVsdCBpcyAwKQorICAg
ICAqIEBwYXJhbSBhIGRlZmluZXMgdGhlIGFscGhhIGNvbXBvbmVudCAoYmV0d2VlbiAwIGFuZCAx
LCBkZWZhdWx0IGlzIDEpCisgICAgICovCisgICAgZnVuY3Rpb24gQ29sb3I0KAorICAgIC8qKgor
ICAgICAqIERlZmluZXMgdGhlIHJlZCBjb21wb25lbnQgKGJldHdlZW4gMCBhbmQgMSwgZGVmYXVs
dCBpcyAwKQorICAgICAqLworICAgIHIsIAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGdy
ZWVuIGNvbXBvbmVudCAoYmV0d2VlbiAwIGFuZCAxLCBkZWZhdWx0IGlzIDApCisgICAgICovCisg
ICAgZywgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgYmx1ZSBjb21wb25lbnQgKGJldHdl
ZW4gMCBhbmQgMSwgZGVmYXVsdCBpcyAwKQorICAgICAqLworICAgIGIsIAorICAgIC8qKgorICAg
ICAqIERlZmluZXMgdGhlIGFscGhhIGNvbXBvbmVudCAoYmV0d2VlbiAwIGFuZCAxLCBkZWZhdWx0
IGlzIDEpCisgICAgICovCisgICAgYSkgeworICAgICAgICBpZiAociA9PT0gdm9pZCAwKSB7IHIg
PSAwOyB9CisgICAgICAgIGlmIChnID09PSB2b2lkIDApIHsgZyA9IDA7IH0KKyAgICAgICAgaWYg
KGIgPT09IHZvaWQgMCkgeyBiID0gMDsgfQorICAgICAgICBpZiAoYSA9PT0gdm9pZCAwKSB7IGEg
PSAxOyB9CisgICAgICAgIHRoaXMuciA9IHI7CisgICAgICAgIHRoaXMuZyA9IGc7CisgICAgICAg
IHRoaXMuYiA9IGI7CisgICAgICAgIHRoaXMuYSA9IGE7CisgICAgfQorICAgIC8vIE9wZXJhdG9y
cworICAgIC8qKgorICAgICAqIEFkZHMgaW4gcGxhY2UgdGhlIGdpdmVuIENvbG9yNCB2YWx1ZXMg
dG8gdGhlIGN1cnJlbnQgQ29sb3I0IG9iamVjdAorICAgICAqIEBwYXJhbSByaWdodCBkZWZpbmVz
IHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQg
Q29sb3I0IG9iamVjdAorICAgICAqLworICAgIENvbG9yNC5wcm90b3R5cGUuYWRkSW5QbGFjZSA9
IGZ1bmN0aW9uIChyaWdodCkgeworICAgICAgICB0aGlzLnIgKz0gcmlnaHQucjsKKyAgICAgICAg
dGhpcy5nICs9IHJpZ2h0Lmc7CisgICAgICAgIHRoaXMuYiArPSByaWdodC5iOworICAgICAgICB0
aGlzLmEgKz0gcmlnaHQuYTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgbmV3IGFycmF5IHBvcHVsYXRlZCB3aXRoIDQgbnVtZXJpYyBlbGVt
ZW50cyA6IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIHZhbHVlcworICAgICAqIEByZXR1cm5zIHRo
ZSBuZXcgYXJyYXkKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLmFzQXJyYXkgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhp
cy50b0FycmF5KHJlc3VsdCwgMCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTdG9yZXMgZnJvbSB0aGUgc3RhcnRpbmcgaW5kZXggaW4gdGhlIGdpdmVu
IGFycmF5IHRoZSBDb2xvcjQgc3VjY2Vzc2l2ZSB2YWx1ZXMKKyAgICAgKiBAcGFyYW0gYXJyYXkg
ZGVmaW5lcyB0aGUgYXJyYXkgd2hlcmUgdG8gc3RvcmUgdGhlIHIsZyxiIGNvbXBvbmVudHMKKyAg
ICAgKiBAcGFyYW0gaW5kZXggZGVmaW5lcyBhbiBvcHRpb25hbCBpbmRleCBpbiB0aGUgdGFyZ2V0
IGFycmF5IHRvIGRlZmluZSB3aGVyZSB0byBzdGFydCBzdG9yaW5nIHZhbHVlcworICAgICAqIEBy
ZXR1cm5zIHRoZSBjdXJyZW50IENvbG9yNCBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjQucHJv
dG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXksIGluZGV4KSB7CisgICAgICAgIGlmIChp
bmRleCA9PT0gdm9pZCAwKSB7IGluZGV4ID0gMDsgfQorICAgICAgICBhcnJheVtpbmRleF0gPSB0
aGlzLnI7CisgICAgICAgIGFycmF5W2luZGV4ICsgMV0gPSB0aGlzLmc7CisgICAgICAgIGFycmF5
W2luZGV4ICsgMl0gPSB0aGlzLmI7CisgICAgICAgIGFycmF5W2luZGV4ICsgM10gPSB0aGlzLmE7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0ZXJtaW5l
cyBlcXVhbGl0eSBiZXR3ZWVuIENvbG9yNCBvYmplY3RzCisgICAgICogQHBhcmFtIG90aGVyQ29s
b3IgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRo
ZSByZ2JhIHZhbHVlcyBhcmUgZXF1YWwgdG8gdGhlIGdpdmVuIG9uZXMKKyAgICAgKi8KKyAgICBD
b2xvcjQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlckNvbG9yKSB7CisgICAgICAg
IHJldHVybiBvdGhlckNvbG9yICYmIHRoaXMuciA9PT0gb3RoZXJDb2xvci5yICYmIHRoaXMuZyA9
PT0gb3RoZXJDb2xvci5nICYmIHRoaXMuYiA9PT0gb3RoZXJDb2xvci5iICYmIHRoaXMuYSA9PT0g
b3RoZXJDb2xvci5hOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBDb2xv
cjQgc2V0IHdpdGggdGhlIGFkZGVkIHZhbHVlcyBvZiB0aGUgY3VycmVudCBDb2xvcjQgYW5kIG9m
IHRoZSBnaXZlbiBvbmUKKyAgICAgKiBAcGFyYW0gcmlnaHQgZGVmaW5lcyB0aGUgc2Vjb25kIG9w
ZXJhbmQKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjQgb2JqZWN0CisgICAgICovCisgICAg
Q29sb3I0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAocmlnaHQpIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBDb2xvcjQodGhpcy5yICsgcmlnaHQuciwgdGhpcy5nICsgcmlnaHQuZywgdGhpcy5iICsg
cmlnaHQuYiwgdGhpcy5hICsgcmlnaHQuYSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IENvbG9yNCBzZXQgd2l0aCB0aGUgc3VidHJhY3RlZCB2YWx1ZXMgb2YgdGhlIGdp
dmVuIG9uZSBmcm9tIHRoZSBjdXJyZW50IENvbG9yNAorICAgICAqIEBwYXJhbSByaWdodCBkZWZp
bmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yNCBvYmpl
Y3QKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLnN1YnRyYWN0ID0gZnVuY3Rpb24gKHJp
Z2h0KSB7CisgICAgICAgIHJldHVybiBuZXcgQ29sb3I0KHRoaXMuciAtIHJpZ2h0LnIsIHRoaXMu
ZyAtIHJpZ2h0LmcsIHRoaXMuYiAtIHJpZ2h0LmIsIHRoaXMuYSAtIHJpZ2h0LmEpOworICAgIH07
CisgICAgLyoqCisgICAgICogU3VidHJhY3RzIHRoZSBnaXZlbiBvbmVzIGZyb20gdGhlIGN1cnJl
bnQgQ29sb3I0IHZhbHVlcyBhbmQgc3RvcmVzIHRoZSByZXN1bHRzIGluICJyZXN1bHQiCisgICAg
ICogQHBhcmFtIHJpZ2h0IGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHBhcmFt
IHJlc3VsdCBkZWZpbmVzIHRoZSBDb2xvcjQgb2JqZWN0IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1
bHQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBDb2xvcjQgb2JqZWN0CisgICAgICovCisg
ICAgQ29sb3I0LnByb3RvdHlwZS5zdWJ0cmFjdFRvUmVmID0gZnVuY3Rpb24gKHJpZ2h0LCByZXN1
bHQpIHsKKyAgICAgICAgcmVzdWx0LnIgPSB0aGlzLnIgLSByaWdodC5yOworICAgICAgICByZXN1
bHQuZyA9IHRoaXMuZyAtIHJpZ2h0Lmc7CisgICAgICAgIHJlc3VsdC5iID0gdGhpcy5iIC0gcmln
aHQuYjsKKyAgICAgICAgcmVzdWx0LmEgPSB0aGlzLmEgLSByaWdodC5hOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgQ29sb3I0IHdp
dGggdGhlIGN1cnJlbnQgQ29sb3I0IHZhbHVlcyBtdWx0aXBsaWVkIGJ5IHNjYWxlCisgICAgICog
QHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxpbmcgZmFjdG9yIHRvIGFwcGx5CisgICAgICog
QHJldHVybnMgYSBuZXcgQ29sb3I0IG9iamVjdAorICAgICAqLworICAgIENvbG9yNC5wcm90b3R5
cGUuc2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDb2xvcjQo
dGhpcy5yICogc2NhbGUsIHRoaXMuZyAqIHNjYWxlLCB0aGlzLmIgKiBzY2FsZSwgdGhpcy5hICog
c2NhbGUpOworICAgIH07CisgICAgLyoqCisgICAgICogTXVsdGlwbGllcyB0aGUgY3VycmVudCBD
b2xvcjQgdmFsdWVzIGJ5IHNjYWxlIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiAicmVzdWx0Igor
ICAgICAqIEBwYXJhbSBzY2FsZSBkZWZpbmVzIHRoZSBzY2FsaW5nIGZhY3RvciB0byBhcHBseQor
ICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgQ29sb3I0IG9iamVjdCB3aGVyZSB0byBz
dG9yZSB0aGUgcmVzdWx0CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdW5tb2RpZmllZCBD
b2xvcjQKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLnNjYWxlVG9SZWYgPSBmdW5jdGlv
biAoc2NhbGUsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQuciA9IHRoaXMuciAqIHNjYWxlOwor
ICAgICAgICByZXN1bHQuZyA9IHRoaXMuZyAqIHNjYWxlOworICAgICAgICByZXN1bHQuYiA9IHRo
aXMuYiAqIHNjYWxlOworICAgICAgICByZXN1bHQuYSA9IHRoaXMuYSAqIHNjYWxlOworICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNjYWxlIHRoZSBjdXJyZW50
IENvbG9yNCB2YWx1ZXMgYnkgYSBmYWN0b3IgYW5kIGFkZCB0aGUgcmVzdWx0IHRvIGEgZ2l2ZW4g
Q29sb3I0CisgICAgICogQHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxlIGZhY3RvcgorICAg
ICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgQ29sb3I0IG9iamVjdCB3aGVyZSB0byBzdG9y
ZSB0aGUgcmVzdWx0CisgICAgICogQHJldHVybnMgdGhlIHVubW9kaWZpZWQgY3VycmVudCBDb2xv
cjQKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLnNjYWxlQW5kQWRkVG9SZWYgPSBmdW5j
dGlvbiAoc2NhbGUsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQuciArPSB0aGlzLnIgKiBzY2Fs
ZTsKKyAgICAgICAgcmVzdWx0LmcgKz0gdGhpcy5nICogc2NhbGU7CisgICAgICAgIHJlc3VsdC5i
ICs9IHRoaXMuYiAqIHNjYWxlOworICAgICAgICByZXN1bHQuYSArPSB0aGlzLmEgKiBzY2FsZTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbGFtcHMgdGhl
IHJnYiB2YWx1ZXMgYnkgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBhbmQgc3RvcmVzIHRoZSByZXN1
bHQgaW50byAicmVzdWx0IgorICAgICAqIEBwYXJhbSBtaW4gZGVmaW5lcyBtaW5pbXVtIGNsYW1w
aW5nIHZhbHVlIChkZWZhdWx0IGlzIDApCisgICAgICogQHBhcmFtIG1heCBkZWZpbmVzIG1heGlt
dW0gY2xhbXBpbmcgdmFsdWUgKGRlZmF1bHQgaXMgMSkKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRl
ZmluZXMgY29sb3IgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbnRvLgorICAgICAqIEByZXR1cm5zIHRo
ZSBjdXVyZW50IENvbG9yNAorICAgICAqLworICAgIENvbG9yNC5wcm90b3R5cGUuY2xhbXBUb1Jl
ZiA9IGZ1bmN0aW9uIChtaW4sIG1heCwgcmVzdWx0KSB7CisgICAgICAgIGlmIChtaW4gPT09IHZv
aWQgMCkgeyBtaW4gPSAwOyB9CisgICAgICAgIGlmIChtYXggPT09IHZvaWQgMCkgeyBtYXggPSAx
OyB9CisgICAgICAgIHJlc3VsdC5yID0gX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlNjYWxhciJdLkNsYW1wKHRoaXMuciwgbWluLCBtYXgpOworICAgICAgICByZXN1
bHQuZyA9IF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIi
XS5DbGFtcCh0aGlzLmcsIG1pbiwgbWF4KTsKKyAgICAgICAgcmVzdWx0LmIgPSBfbWF0aF9zY2Fs
YXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uQ2xhbXAodGhpcy5iLCBt
aW4sIG1heCk7CisgICAgICAgIHJlc3VsdC5hID0gX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlNjYWxhciJdLkNsYW1wKHRoaXMuYSwgbWluLCBtYXgpOworICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAgKiBNdWx0aXB5IGFuIENvbG9y
NCB2YWx1ZSBieSBhbm90aGVyIGFuZCByZXR1cm4gYSBuZXcgQ29sb3I0IG9iamVjdAorICAgICAg
KiBAcGFyYW0gY29sb3IgZGVmaW5lcyB0aGUgQ29sb3I0IHZhbHVlIHRvIG11bHRpcGx5IGJ5Cisg
ICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yNCBvYmplY3QKKyAgICAgICovCisgICAgQ29sb3I0
LnByb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIChjb2xvcikgeworICAgICAgICByZXR1cm4g
bmV3IENvbG9yNCh0aGlzLnIgKiBjb2xvci5yLCB0aGlzLmcgKiBjb2xvci5nLCB0aGlzLmIgKiBj
b2xvci5iLCB0aGlzLmEgKiBjb2xvci5hKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE11bHRp
cHkgYSBDb2xvcjQgdmFsdWUgYnkgYW5vdGhlciBhbmQgcHVzaCB0aGUgcmVzdWx0IGluIGEgcmVm
ZXJlbmNlIHZhbHVlCisgICAgICogQHBhcmFtIGNvbG9yIGRlZmluZXMgdGhlIENvbG9yNCB2YWx1
ZSB0byBtdWx0aXBseSBieQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgQ29sb3I0
IHRvIGZpbGwgdGhlIHJlc3VsdCBpbgorICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHQgQ29sb3I0
CisgICAgICovCisgICAgQ29sb3I0LnByb3RvdHlwZS5tdWx0aXBseVRvUmVmID0gZnVuY3Rpb24g
KGNvbG9yLCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnIgPSB0aGlzLnIgKiBjb2xvci5yOwor
ICAgICAgICByZXN1bHQuZyA9IHRoaXMuZyAqIGNvbG9yLmc7CisgICAgICAgIHJlc3VsdC5iID0g
dGhpcy5iICogY29sb3IuYjsKKyAgICAgICAgcmVzdWx0LmEgPSB0aGlzLmEgKiBjb2xvci5hOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBh
IHN0cmluZyB3aXRoIHRoZSBDb2xvcjQgY3VycmVudCB2YWx1ZXMKKyAgICAgKiBAcmV0dXJucyB0
aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBDb2xvcjQgb2JqZWN0CisgICAgICovCisg
ICAgQ29sb3I0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuICJ7UjogIiArIHRoaXMuciArICIgRzoiICsgdGhpcy5nICsgIiBCOiIgKyB0aGlzLmIgKyAi
IEE6IiArIHRoaXMuYSArICJ9IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhl
IHN0cmluZyAiQ29sb3I0IgorICAgICAqIEByZXR1cm5zICJDb2xvcjQiCisgICAgICovCisgICAg
Q29sb3I0LnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAiQ29sb3I0IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXB1dGUgdGhlIENvbG9y
NCBoYXNoIGNvZGUKKyAgICAgKiBAcmV0dXJucyBhbiB1bmlxdWUgbnVtYmVyIHRoYXQgY2FuIGJl
IHVzZWQgdG8gaGFzaCBDb2xvcjQgb2JqZWN0cworICAgICAqLworICAgIENvbG9yNC5wcm90b3R5
cGUuZ2V0SGFzaENvZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBoYXNoID0gKHRoaXMu
ciAqIDI1NSkgfCAwOworICAgICAgICBoYXNoID0gKGhhc2ggKiAzOTcpIF4gKCh0aGlzLmcgKiAy
NTUpIHwgMCk7CisgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAoKHRoaXMuYiAqIDI1NSkg
fCAwKTsKKyAgICAgICAgaGFzaCA9IChoYXNoICogMzk3KSBeICgodGhpcy5hICogMjU1KSB8IDAp
OworICAgICAgICByZXR1cm4gaGFzaDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgQ29sb3I0IGNvcGllZCBmcm9tIHRoZSBjdXJyZW50IG9uZQorICAgICAqIEByZXR1cm5z
IGEgbmV3IENvbG9yNCBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLmNsb25l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IENvbG9yNCh0aGlzLnIsIHRoaXMu
ZywgdGhpcy5iLCB0aGlzLmEpOworICAgIH07CisgICAgLyoqCisgICAgICogQ29waWVzIHRoZSBn
aXZlbiBDb2xvcjQgdmFsdWVzIGludG8gdGhlIGN1cnJlbnQgb25lCisgICAgICogQHBhcmFtIHNv
dXJjZSBkZWZpbmVzIHRoZSBzb3VyY2UgQ29sb3I0IG9iamVjdAorICAgICAqIEByZXR1cm5zIHRo
ZSBjdXJyZW50IHVwZGF0ZWQgQ29sb3I0IG9iamVjdAorICAgICAqLworICAgIENvbG9yNC5wcm90
b3R5cGUuY29weUZyb20gPSBmdW5jdGlvbiAoc291cmNlKSB7CisgICAgICAgIHRoaXMuciA9IHNv
dXJjZS5yOworICAgICAgICB0aGlzLmcgPSBzb3VyY2UuZzsKKyAgICAgICAgdGhpcy5iID0gc291
cmNlLmI7CisgICAgICAgIHRoaXMuYSA9IHNvdXJjZS5hOworICAgICAgICByZXR1cm4gdGhpczsK
KyAgICB9OworICAgIC8qKgorICAgICAqIENvcGllcyB0aGUgZ2l2ZW4gZmxvYXQgdmFsdWVzIGlu
dG8gdGhlIGN1cnJlbnQgb25lCisgICAgICogQHBhcmFtIHIgZGVmaW5lcyB0aGUgcmVkIGNvbXBv
bmVudCB0byByZWFkIGZyb20KKyAgICAgKiBAcGFyYW0gZyBkZWZpbmVzIHRoZSBncmVlbiBjb21w
b25lbnQgdG8gcmVhZCBmcm9tCisgICAgICogQHBhcmFtIGIgZGVmaW5lcyB0aGUgYmx1ZSBjb21w
b25lbnQgdG8gcmVhZCBmcm9tCisgICAgICogQHBhcmFtIGEgZGVmaW5lcyB0aGUgYWxwaGEgY29t
cG9uZW50IHRvIHJlYWQgZnJvbQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQg
Q29sb3I0IG9iamVjdAorICAgICAqLworICAgIENvbG9yNC5wcm90b3R5cGUuY29weUZyb21GbG9h
dHMgPSBmdW5jdGlvbiAociwgZywgYiwgYSkgeworICAgICAgICB0aGlzLnIgPSByOworICAgICAg
ICB0aGlzLmcgPSBnOworICAgICAgICB0aGlzLmIgPSBiOworICAgICAgICB0aGlzLmEgPSBhOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvcGllcyB0aGUg
Z2l2ZW4gZmxvYXQgdmFsdWVzIGludG8gdGhlIGN1cnJlbnQgb25lCisgICAgICogQHBhcmFtIHIg
ZGVmaW5lcyB0aGUgcmVkIGNvbXBvbmVudCB0byByZWFkIGZyb20KKyAgICAgKiBAcGFyYW0gZyBk
ZWZpbmVzIHRoZSBncmVlbiBjb21wb25lbnQgdG8gcmVhZCBmcm9tCisgICAgICogQHBhcmFtIGIg
ZGVmaW5lcyB0aGUgYmx1ZSBjb21wb25lbnQgdG8gcmVhZCBmcm9tCisgICAgICogQHBhcmFtIGEg
ZGVmaW5lcyB0aGUgYWxwaGEgY29tcG9uZW50IHRvIHJlYWQgZnJvbQorICAgICAqIEByZXR1cm5z
IHRoZSBjdXJyZW50IHVwZGF0ZWQgQ29sb3I0IG9iamVjdAorICAgICAqLworICAgIENvbG9yNC5w
cm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHIsIGcsIGIsIGEpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuY29weUZyb21GbG9hdHMociwgZywgYiwgYSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
b21wdXRlIHRoZSBDb2xvcjQgaGV4YWRlY2ltYWwgY29kZSBhcyBhIHN0cmluZworICAgICAqIEBy
ZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9u
IG9mIHRoZSBDb2xvcjQgb2JqZWN0CisgICAgICovCisgICAgQ29sb3I0LnByb3RvdHlwZS50b0hl
eFN0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGludFIgPSAodGhpcy5yICogMjU1
KSB8IDA7CisgICAgICAgIHZhciBpbnRHID0gKHRoaXMuZyAqIDI1NSkgfCAwOworICAgICAgICB2
YXIgaW50QiA9ICh0aGlzLmIgKiAyNTUpIHwgMDsKKyAgICAgICAgdmFyIGludEEgPSAodGhpcy5h
ICogMjU1KSB8IDA7CisgICAgICAgIHJldHVybiAiIyIgKyBfbWF0aF9zY2FsYXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uVG9IZXgoaW50UikgKyBfbWF0aF9zY2FsYXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uVG9IZXgoaW50RykgKyBfbWF0
aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uVG9IZXgoaW50
QikgKyBfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0u
VG9IZXgoaW50QSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb21wdXRlcyBhIG5ldyBDb2xv
cjQgY29udmVydGVkIGZyb20gdGhlIGN1cnJlbnQgb25lIHRvIGxpbmVhciBzcGFjZQorICAgICAq
IEByZXR1cm5zIGEgbmV3IENvbG9yNCBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90
eXBlLnRvTGluZWFyU3BhY2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBjb252ZXJ0ZWRD
b2xvciA9IG5ldyBDb2xvcjQoKTsKKyAgICAgICAgdGhpcy50b0xpbmVhclNwYWNlVG9SZWYoY29u
dmVydGVkQ29sb3IpOworICAgICAgICByZXR1cm4gY29udmVydGVkQ29sb3I7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGUgQ29sb3I0IHZhbHVlcyB0byBsaW5lYXIgc3BhY2Ug
YW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluICJjb252ZXJ0ZWRDb2xvciIKKyAgICAgKiBAcGFyYW0g
Y29udmVydGVkQ29sb3IgZGVmaW5lcyB0aGUgQ29sb3I0IG9iamVjdCB3aGVyZSB0byBzdG9yZSB0
aGUgbGluZWFyIHNwYWNlIHZlcnNpb24KKyAgICAgKiBAcmV0dXJucyB0aGUgdW5tb2RpZmllZCBD
b2xvcjQKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLnRvTGluZWFyU3BhY2VUb1JlZiA9
IGZ1bmN0aW9uIChjb252ZXJ0ZWRDb2xvcikgeworICAgICAgICBjb252ZXJ0ZWRDb2xvci5yID0g
TWF0aC5wb3codGhpcy5yLCBfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVG9MaW5lYXJTcGFjZSJdKTsKKyAgICAgICAgY29udmVydGVkQ29sb3IuZyA9IE1hdGgu
cG93KHRoaXMuZywgX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlRvTGluZWFyU3BhY2UiXSk7CisgICAgICAgIGNvbnZlcnRlZENvbG9yLmIgPSBNYXRoLnBvdyh0
aGlzLmIsIF9tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb0xp
bmVhclNwYWNlIl0pOworICAgICAgICBjb252ZXJ0ZWRDb2xvci5hID0gdGhpcy5hOworICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXB1dGVzIGEgbmV3IENv
bG9yNCBjb252ZXJ0ZWQgZnJvbSB0aGUgY3VycmVudCBvbmUgdG8gZ2FtbWEgc3BhY2UKKyAgICAg
KiBAcmV0dXJucyBhIG5ldyBDb2xvcjQgb2JqZWN0CisgICAgICovCisgICAgQ29sb3I0LnByb3Rv
dHlwZS50b0dhbW1hU3BhY2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBjb252ZXJ0ZWRD
b2xvciA9IG5ldyBDb2xvcjQoKTsKKyAgICAgICAgdGhpcy50b0dhbW1hU3BhY2VUb1JlZihjb252
ZXJ0ZWRDb2xvcik7CisgICAgICAgIHJldHVybiBjb252ZXJ0ZWRDb2xvcjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIENvbnZlcnRzIHRoZSBDb2xvcjQgdmFsdWVzIHRvIGdhbW1hIHNwYWNlIGFu
ZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiAiY29udmVydGVkQ29sb3IiCisgICAgICogQHBhcmFtIGNv
bnZlcnRlZENvbG9yIGRlZmluZXMgdGhlIENvbG9yNCBvYmplY3Qgd2hlcmUgdG8gc3RvcmUgdGhl
IGdhbW1hIHNwYWNlIHZlcnNpb24KKyAgICAgKiBAcmV0dXJucyB0aGUgdW5tb2RpZmllZCBDb2xv
cjQKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLnRvR2FtbWFTcGFjZVRvUmVmID0gZnVu
Y3Rpb24gKGNvbnZlcnRlZENvbG9yKSB7CisgICAgICAgIGNvbnZlcnRlZENvbG9yLnIgPSBNYXRo
LnBvdyh0aGlzLnIsIF9tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJUb0dhbW1hU3BhY2UiXSk7CisgICAgICAgIGNvbnZlcnRlZENvbG9yLmcgPSBNYXRoLnBvdyh0
aGlzLmcsIF9tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb0dh
bW1hU3BhY2UiXSk7CisgICAgICAgIGNvbnZlcnRlZENvbG9yLmIgPSBNYXRoLnBvdyh0aGlzLmIs
IF9tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb0dhbW1hU3Bh
Y2UiXSk7CisgICAgICAgIGNvbnZlcnRlZENvbG9yLmEgPSB0aGlzLmE7CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLy8gU3RhdGljcworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgQ29sb3I0IGZyb20gdGhlIHN0cmluZyBjb250YWluaW5nIHZhbGlkIGhleGFkZWNpbWFs
IHZhbHVlcworICAgICAqIEBwYXJhbSBoZXggZGVmaW5lcyBhIHN0cmluZyBjb250YWluaW5nIHZh
bGlkIGhleGFkZWNpbWFsIHZhbHVlcworICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yNCBvYmpl
Y3QKKyAgICAgKi8KKyAgICBDb2xvcjQuRnJvbUhleFN0cmluZyA9IGZ1bmN0aW9uIChoZXgpIHsK
KyAgICAgICAgaWYgKGhleC5zdWJzdHJpbmcoMCwgMSkgIT09ICIjIiB8fCBoZXgubGVuZ3RoICE9
PSA5KSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yNCgwLjAsIDAuMCwgMC4wLCAwLjAp
OworICAgICAgICB9CisgICAgICAgIHZhciByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygxLCAz
KSwgMTYpOworICAgICAgICB2YXIgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMywgNSksIDE2
KTsKKyAgICAgICAgdmFyIGIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDUsIDcpLCAxNik7Cisg
ICAgICAgIHZhciBhID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg3LCA5KSwgMTYpOworICAgICAg
ICByZXR1cm4gQ29sb3I0LkZyb21JbnRzKHIsIGcsIGIsIGEpOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIG5ldyBDb2xvcjQgb2JqZWN0IHNldCB3aXRoIHRoZSBsaW5lYXJseSBp
bnRlcnBvbGF0ZWQgdmFsdWVzIG9mICJhbW91bnQiIGJldHdlZW4gdGhlIGxlZnQgQ29sb3I0IG9i
amVjdCBhbmQgdGhlIHJpZ2h0IENvbG9yNCBvYmplY3QKKyAgICAgKiBAcGFyYW0gbGVmdCBkZWZp
bmVzIHRoZSBzdGFydCB2YWx1ZQorICAgICAqIEBwYXJhbSByaWdodCBkZWZpbmVzIHRoZSBlbmQg
dmFsdWUKKyAgICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGdyYWRpZW50IGZhY3Rvcgor
ICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yNCBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjQu
TGVycCA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYW1vdW50KSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBuZXcgQ29sb3I0KDAuMCwgMC4wLCAwLjAsIDAuMCk7CisgICAgICAgIENvbG9yNC5MZXJw
VG9SZWYobGVmdCwgcmlnaHQsIGFtb3VudCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgZ2l2ZW4gInJlc3VsdCIgd2l0aCB0
aGUgbGluZWFybHkgaW50ZXJwb2xhdGVkIHZhbHVlcyBvZiAiYW1vdW50IiBiZXR3ZWVuIHRoZSBs
ZWZ0IENvbG9yNCBvYmplY3QgYW5kIHRoZSByaWdodCBDb2xvcjQgb2JqZWN0CisgICAgICogQHBh
cmFtIGxlZnQgZGVmaW5lcyB0aGUgc3RhcnQgdmFsdWUKKyAgICAgKiBAcGFyYW0gcmlnaHQgZGVm
aW5lcyB0aGUgZW5kIHZhbHVlCisgICAgICogQHBhcmFtIGFtb3VudCBkZWZpbmVzIHRoZSBncmFk
aWVudCBmYWN0b3IKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIENvbG9yNCBvYmpl
Y3Qgd2hlcmUgdG8gc3RvcmUgZGF0YQorICAgICAqLworICAgIENvbG9yNC5MZXJwVG9SZWYgPSBm
dW5jdGlvbiAobGVmdCwgcmlnaHQsIGFtb3VudCwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC5y
ID0gbGVmdC5yICsgKHJpZ2h0LnIgLSBsZWZ0LnIpICogYW1vdW50OworICAgICAgICByZXN1bHQu
ZyA9IGxlZnQuZyArIChyaWdodC5nIC0gbGVmdC5nKSAqIGFtb3VudDsKKyAgICAgICAgcmVzdWx0
LmIgPSBsZWZ0LmIgKyAocmlnaHQuYiAtIGxlZnQuYikgKiBhbW91bnQ7CisgICAgICAgIHJlc3Vs
dC5hID0gbGVmdC5hICsgKHJpZ2h0LmEgLSBsZWZ0LmEpICogYW1vdW50OworICAgIH07CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBDb2xvcjQgZnJvbSBhIENvbG9yMyBhbmQgYW4gYWxw
aGEgdmFsdWUKKyAgICAgKiBAcGFyYW0gY29sb3IzIGRlZmluZXMgdGhlIHNvdXJjZSBDb2xvcjMg
dG8gcmVhZCBmcm9tCisgICAgICogQHBhcmFtIGFscGhhIGRlZmluZXMgdGhlIGFscGhhIGNvbXBv
bmVudCAoMS4wIGJ5IGRlZmF1bHQpCisgICAgICogQHJldHVybnMgYSBuZXcgQ29sb3I0IG9iamVj
dAorICAgICAqLworICAgIENvbG9yNC5Gcm9tQ29sb3IzID0gZnVuY3Rpb24gKGNvbG9yMywgYWxw
aGEpIHsKKyAgICAgICAgaWYgKGFscGhhID09PSB2b2lkIDApIHsgYWxwaGEgPSAxLjA7IH0KKyAg
ICAgICAgcmV0dXJuIG5ldyBDb2xvcjQoY29sb3IzLnIsIGNvbG9yMy5nLCBjb2xvcjMuYiwgYWxw
aGEpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBDb2xvcjQgZnJvbSB0
aGUgc3RhcnRpbmcgaW5kZXggZWxlbWVudCBvZiB0aGUgZ2l2ZW4gYXJyYXkKKyAgICAgKiBAcGFy
YW0gYXJyYXkgZGVmaW5lcyB0aGUgc291cmNlIGFycmF5IHRvIHJlYWQgZnJvbQorICAgICAqIEBw
YXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGluIHRoZSBzb3VyY2UgYXJyYXkKKyAgICAg
KiBAcmV0dXJucyBhIG5ldyBDb2xvcjQgb2JqZWN0CisgICAgICovCisgICAgQ29sb3I0LkZyb21B
cnJheSA9IGZ1bmN0aW9uIChhcnJheSwgb2Zmc2V0KSB7CisgICAgICAgIGlmIChvZmZzZXQgPT09
IHZvaWQgMCkgeyBvZmZzZXQgPSAwOyB9CisgICAgICAgIHJldHVybiBuZXcgQ29sb3I0KGFycmF5
W29mZnNldF0sIGFycmF5W29mZnNldCArIDFdLCBhcnJheVtvZmZzZXQgKyAyXSwgYXJyYXlbb2Zm
c2V0ICsgM10pOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBDb2xvcjMg
ZnJvbSBpbnRlZ2VyIHZhbHVlcyAoPCAyNTYpCisgICAgICogQHBhcmFtIHIgZGVmaW5lcyB0aGUg
cmVkIGNvbXBvbmVudCB0byByZWFkIGZyb20gKHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1KQorICAg
ICAqIEBwYXJhbSBnIGRlZmluZXMgdGhlIGdyZWVuIGNvbXBvbmVudCB0byByZWFkIGZyb20gKHZh
bHVlIGJldHdlZW4gMCBhbmQgMjU1KQorICAgICAqIEBwYXJhbSBiIGRlZmluZXMgdGhlIGJsdWUg
Y29tcG9uZW50IHRvIHJlYWQgZnJvbSAodmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUpCisgICAgICog
QHBhcmFtIGEgZGVmaW5lcyB0aGUgYWxwaGEgY29tcG9uZW50IHRvIHJlYWQgZnJvbSAodmFsdWUg
YmV0d2VlbiAwIGFuZCAyNTUpCisgICAgICogQHJldHVybnMgYSBuZXcgQ29sb3IzIG9iamVjdAor
ICAgICAqLworICAgIENvbG9yNC5Gcm9tSW50cyA9IGZ1bmN0aW9uIChyLCBnLCBiLCBhKSB7Cisg
ICAgICAgIHJldHVybiBuZXcgQ29sb3I0KHIgLyAyNTUuMCwgZyAvIDI1NS4wLCBiIC8gMjU1LjAs
IGEgLyAyNTUuMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVjayB0aGUgY29udGVudCBv
ZiBhIGdpdmVuIGFycmF5IGFuZCBjb252ZXJ0IGl0IHRvIGFuIGFycmF5IGNvbnRhaW5pbmcgUkdC
QSBkYXRhCisgICAgICogSWYgdGhlIG9yaWdpbmFsIGFycmF5IHdhcyBhbHJlYWR5IGNvbnRhaW5p
bmcgY291bnQgKiA0IHZhbHVlcyB0aGVuIGl0IGlzIHJldHVybmVkIGRpcmVjdGx5CisgICAgICog
QHBhcmFtIGNvbG9ycyBkZWZpbmVzIHRoZSBhcnJheSB0byBjaGVjaworICAgICAqIEBwYXJhbSBj
b3VudCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgUkdCQSBkYXRhIHRvIGV4cGVjdAorICAgICAqIEBy
ZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgY291bnQgKiA0IHZhbHVlcyAoUkdCQSkKKyAgICAg
Ki8KKyAgICBDb2xvcjQuQ2hlY2tDb2xvcnM0ID0gZnVuY3Rpb24gKGNvbG9ycywgY291bnQpIHsK
KyAgICAgICAgLy8gQ2hlY2sgaWYgY29sb3IzIHdhcyB1c2VkCisgICAgICAgIGlmIChjb2xvcnMu
bGVuZ3RoID09PSBjb3VudCAqIDMpIHsKKyAgICAgICAgICAgIHZhciBjb2xvcnM0ID0gW107Cisg
ICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgY29sb3JzLmxlbmd0aDsgaW5k
ZXggKz0gMykgeworICAgICAgICAgICAgICAgIHZhciBuZXdJbmRleCA9IChpbmRleCAvIDMpICog
NDsKKyAgICAgICAgICAgICAgICBjb2xvcnM0W25ld0luZGV4XSA9IGNvbG9yc1tpbmRleF07Cisg
ICAgICAgICAgICAgICAgY29sb3JzNFtuZXdJbmRleCArIDFdID0gY29sb3JzW2luZGV4ICsgMV07
CisgICAgICAgICAgICAgICAgY29sb3JzNFtuZXdJbmRleCArIDJdID0gY29sb3JzW2luZGV4ICsg
Ml07CisgICAgICAgICAgICAgICAgY29sb3JzNFtuZXdJbmRleCArIDNdID0gMS4wOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbG9yczQ7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGNvbG9yczsKKyAgICB9OworICAgIHJldHVybiBDb2xvcjQ7Cit9KCkpOworCisvKioK
KyAqIEBoaWRkZW4KKyAqLwordmFyIFRtcENvbG9ycyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICBmdW5jdGlvbiBUbXBDb2xvcnMoKSB7CisgICAgfQorICAgIFRtcENvbG9ycy5D
b2xvcjMgPSBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFy
cmF5VG9vbHMiXS5CdWlsZEFycmF5KDMsIENvbG9yMy5CbGFjayk7CisgICAgVG1wQ29sb3JzLkNv
bG9yNCA9IF9NaXNjX2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQXJy
YXlUb29scyJdLkJ1aWxkQXJyYXkoMywgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IENvbG9yNCgw
LCAwLCAwLCAwKTsgfSk7CisgICAgcmV0dXJuIFRtcENvbG9yczsKK30oKSk7CisKK19NaXNjX3R5
cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJfVHlwZVN0b3JlIl0uUmVnaXN0
ZXJlZFR5cGVzWyJCQUJZTE9OLkNvbG9yMyJdID0gQ29sb3IzOworX01pc2NfdHlwZVN0b3JlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNb
IkJBQllMT04uQ29sb3I0Il0gPSBDb2xvcjQ7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01h
dGhzL21hdGguY29uc3RhbnRzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vTWF0aHMvbWF0aC5jb25zdGFudHMudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFRvR2Ft
bWFTcGFjZSwgVG9MaW5lYXJTcGFjZSwgRXBzaWxvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJUb0dhbW1hU3BhY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRvR2FtbWFT
cGFjZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUb0xpbmVhclNwYWNlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBUb0xpbmVhclNwYWNlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVwc2lsb24iLCBm
dW5jdGlvbigpIHsgcmV0dXJuIEVwc2lsb247IH0pOworLyoqCisgKiBDb25zdGFudCB1c2VkIHRv
IGNvbnZlcnQgYSB2YWx1ZSB0byBnYW1tYSBzcGFjZQorICogQGlnbm9yZW5hbWluZworICovCit2
YXIgVG9HYW1tYVNwYWNlID0gMSAvIDIuMjsKKy8qKgorICogQ29uc3RhbnQgdXNlZCB0byBjb252
ZXJ0IGEgdmFsdWUgdG8gbGluZWFyIHNwYWNlCisgKiBAaWdub3JlbmFtaW5nCisgKi8KK3ZhciBU
b0xpbmVhclNwYWNlID0gMi4yOworLyoqCisgKiBDb25zdGFudCB1c2VkIHRvIGRlZmluZSB0aGUg
bWluaW1hbCBudW1iZXIgdmFsdWUgaW4gQmFieWxvbi5qcworICogQGlnbm9yZW5hbWluZworICov
Cit2YXIgRXBzaWxvbiA9IDAuMDAxOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGhz
L21hdGguZnJ1c3R1bS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NYXRocy9tYXRoLmZydXN0dW0udHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBGcnVzdHVtICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZydXN0dW0iLCBmdW5jdGlvbigpIHsgcmV0
dXJuIEZydXN0dW07IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRoX3BsYW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21h
dGgucGxhbmUgKi8gIi4vTWF0aHMvbWF0aC5wbGFuZS50cyIpOworCisvKioKKyAqIFJlcHJhc2Vu
dHMgYSBjYW1lcmEgZnJ1c3R1bQorICovCit2YXIgRnJ1c3R1bSA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBGcnVzdHVtKCkgeworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBHZXRzIHRoZSBwbGFuZXMgcmVwcmVzZW50aW5nIHRoZSBmcnVzdHVtCisgICAgICogQHBh
cmFtIHRyYW5zZm9ybSBtYXRyaXggdG8gYmUgYXBwbGllZCB0byB0aGUgcmV0dXJuZWQgcGxhbmVz
CisgICAgICogQHJldHVybnMgYSBuZXcgYXJyYXkgb2YgNiBGcnVzdHVtIHBsYW5lcyBjb21wdXRl
ZCBieSB0aGUgZ2l2ZW4gdHJhbnNmb3JtYXRpb24gbWF0cml4LgorICAgICAqLworICAgIEZydXN0
dW0uR2V0UGxhbmVzID0gZnVuY3Rpb24gKHRyYW5zZm9ybSkgeworICAgICAgICB2YXIgZnJ1c3R1
bVBsYW5lcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgNjsgaW5k
ZXgrKykgeworICAgICAgICAgICAgZnJ1c3R1bVBsYW5lcy5wdXNoKG5ldyBfbWF0aF9wbGFuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQbGFuZSJdKDAuMCwgMC4wLCAwLjAsIDAuMCkp
OworICAgICAgICB9CisgICAgICAgIEZydXN0dW0uR2V0UGxhbmVzVG9SZWYodHJhbnNmb3JtLCBm
cnVzdHVtUGxhbmVzKTsKKyAgICAgICAgcmV0dXJuIGZydXN0dW1QbGFuZXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXRzIHRoZSBuZWFyIGZydXN0dW0gcGxhbmUgdHJhbnNmb3JtZWQgYnkg
dGhlIHRyYW5zZm9ybSBtYXRyaXgKKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXN1bHRpbmcgZnJ1c3R1bSBwbGFuZQor
ICAgICAqIEBwYXJhbSBmcnVzdHVtUGxhbmUgdGhlIHJlc3VsaW5nIGZydXN0dW0gcGxhbmUKKyAg
ICAgKi8KKyAgICBGcnVzdHVtLkdldE5lYXJQbGFuZVRvUmVmID0gZnVuY3Rpb24gKHRyYW5zZm9y
bSwgZnJ1c3R1bVBsYW5lKSB7CisgICAgICAgIHZhciBtID0gdHJhbnNmb3JtLm07CisgICAgICAg
IGZydXN0dW1QbGFuZS5ub3JtYWwueCA9IG1bM10gKyBtWzJdOworICAgICAgICBmcnVzdHVtUGxh
bmUubm9ybWFsLnkgPSBtWzddICsgbVs2XTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbC56
ID0gbVsxMV0gKyBtWzEwXTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLmQgPSBtWzE1XSArIG1bMTRd
OworICAgICAgICBmcnVzdHVtUGxhbmUubm9ybWFsaXplKCk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXRzIHRoZSBmYXIgZnJ1c3R1bSBwbGFuZSB0cmFuc2Zvcm1lZCBieSB0aGUgdHJhbnNm
b3JtIG1hdHJpeAorICAgICAqIEBwYXJhbSB0cmFuc2Zvcm0gdHJhbnNmb3JtYXRpb24gbWF0cml4
IHRvIGJlIGFwcGxpZWQgdG8gdGhlIHJlc3VsdGluZyBmcnVzdHVtIHBsYW5lCisgICAgICogQHBh
cmFtIGZydXN0dW1QbGFuZSB0aGUgcmVzdWxpbmcgZnJ1c3R1bSBwbGFuZQorICAgICAqLworICAg
IEZydXN0dW0uR2V0RmFyUGxhbmVUb1JlZiA9IGZ1bmN0aW9uICh0cmFuc2Zvcm0sIGZydXN0dW1Q
bGFuZSkgeworICAgICAgICB2YXIgbSA9IHRyYW5zZm9ybS5tOworICAgICAgICBmcnVzdHVtUGxh
bmUubm9ybWFsLnggPSBtWzNdIC0gbVsyXTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbC55
ID0gbVs3XSAtIG1bNl07CisgICAgICAgIGZydXN0dW1QbGFuZS5ub3JtYWwueiA9IG1bMTFdIC0g
bVsxMF07CisgICAgICAgIGZydXN0dW1QbGFuZS5kID0gbVsxNV0gLSBtWzE0XTsKKyAgICAgICAg
ZnJ1c3R1bVBsYW5lLm5vcm1hbGl6ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0
aGUgbGVmdCBmcnVzdHVtIHBsYW5lIHRyYW5zZm9ybWVkIGJ5IHRoZSB0cmFuc2Zvcm0gbWF0cml4
CisgICAgICogQHBhcmFtIHRyYW5zZm9ybSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdG8gYmUgYXBw
bGllZCB0byB0aGUgcmVzdWx0aW5nIGZydXN0dW0gcGxhbmUKKyAgICAgKiBAcGFyYW0gZnJ1c3R1
bVBsYW5lIHRoZSByZXN1bGluZyBmcnVzdHVtIHBsYW5lCisgICAgICovCisgICAgRnJ1c3R1bS5H
ZXRMZWZ0UGxhbmVUb1JlZiA9IGZ1bmN0aW9uICh0cmFuc2Zvcm0sIGZydXN0dW1QbGFuZSkgewor
ICAgICAgICB2YXIgbSA9IHRyYW5zZm9ybS5tOworICAgICAgICBmcnVzdHVtUGxhbmUubm9ybWFs
LnggPSBtWzNdICsgbVswXTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbC55ID0gbVs3XSAr
IG1bNF07CisgICAgICAgIGZydXN0dW1QbGFuZS5ub3JtYWwueiA9IG1bMTFdICsgbVs4XTsKKyAg
ICAgICAgZnJ1c3R1bVBsYW5lLmQgPSBtWzE1XSArIG1bMTJdOworICAgICAgICBmcnVzdHVtUGxh
bmUubm9ybWFsaXplKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByaWdodCBm
cnVzdHVtIHBsYW5lIHRyYW5zZm9ybWVkIGJ5IHRoZSB0cmFuc2Zvcm0gbWF0cml4CisgICAgICog
QHBhcmFtIHRyYW5zZm9ybSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdG8gYmUgYXBwbGllZCB0byB0
aGUgcmVzdWx0aW5nIGZydXN0dW0gcGxhbmUKKyAgICAgKiBAcGFyYW0gZnJ1c3R1bVBsYW5lIHRo
ZSByZXN1bGluZyBmcnVzdHVtIHBsYW5lCisgICAgICovCisgICAgRnJ1c3R1bS5HZXRSaWdodFBs
YW5lVG9SZWYgPSBmdW5jdGlvbiAodHJhbnNmb3JtLCBmcnVzdHVtUGxhbmUpIHsKKyAgICAgICAg
dmFyIG0gPSB0cmFuc2Zvcm0ubTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbC54ID0gbVsz
XSAtIG1bMF07CisgICAgICAgIGZydXN0dW1QbGFuZS5ub3JtYWwueSA9IG1bN10gLSBtWzRdOwor
ICAgICAgICBmcnVzdHVtUGxhbmUubm9ybWFsLnogPSBtWzExXSAtIG1bOF07CisgICAgICAgIGZy
dXN0dW1QbGFuZS5kID0gbVsxNV0gLSBtWzEyXTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1h
bGl6ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdG9wIGZydXN0dW0gcGxh
bmUgdHJhbnNmb3JtZWQgYnkgdGhlIHRyYW5zZm9ybSBtYXRyaXgKKyAgICAgKiBAcGFyYW0gdHJh
bnNmb3JtIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXN1bHRp
bmcgZnJ1c3R1bSBwbGFuZQorICAgICAqIEBwYXJhbSBmcnVzdHVtUGxhbmUgdGhlIHJlc3VsaW5n
IGZydXN0dW0gcGxhbmUKKyAgICAgKi8KKyAgICBGcnVzdHVtLkdldFRvcFBsYW5lVG9SZWYgPSBm
dW5jdGlvbiAodHJhbnNmb3JtLCBmcnVzdHVtUGxhbmUpIHsKKyAgICAgICAgdmFyIG0gPSB0cmFu
c2Zvcm0ubTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbC54ID0gbVszXSAtIG1bMV07Cisg
ICAgICAgIGZydXN0dW1QbGFuZS5ub3JtYWwueSA9IG1bN10gLSBtWzVdOworICAgICAgICBmcnVz
dHVtUGxhbmUubm9ybWFsLnogPSBtWzExXSAtIG1bOV07CisgICAgICAgIGZydXN0dW1QbGFuZS5k
ID0gbVsxNV0gLSBtWzEzXTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbGl6ZSgpOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgYm90dG9tIGZydXN0dW0gcGxhbmUgdHJhbnNm
b3JtZWQgYnkgdGhlIHRyYW5zZm9ybSBtYXRyaXgKKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtIHRy
YW5zZm9ybWF0aW9uIG1hdHJpeCB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXN1bHRpbmcgZnJ1c3R1
bSBwbGFuZQorICAgICAqIEBwYXJhbSBmcnVzdHVtUGxhbmUgdGhlIHJlc3VsaW5nIGZydXN0dW0g
cGxhbmUKKyAgICAgKi8KKyAgICBGcnVzdHVtLkdldEJvdHRvbVBsYW5lVG9SZWYgPSBmdW5jdGlv
biAodHJhbnNmb3JtLCBmcnVzdHVtUGxhbmUpIHsKKyAgICAgICAgdmFyIG0gPSB0cmFuc2Zvcm0u
bTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbC54ID0gbVszXSArIG1bMV07CisgICAgICAg
IGZydXN0dW1QbGFuZS5ub3JtYWwueSA9IG1bN10gKyBtWzVdOworICAgICAgICBmcnVzdHVtUGxh
bmUubm9ybWFsLnogPSBtWzExXSArIG1bOV07CisgICAgICAgIGZydXN0dW1QbGFuZS5kID0gbVsx
NV0gKyBtWzEzXTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbGl6ZSgpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2ZW4gYXJyYXkgImZydXN0dW1QbGFuZXMiIHdpdGgg
dGhlIDYgRnJ1c3R1bSBwbGFuZXMgY29tcHV0ZWQgYnkgdGhlIGdpdmVuIHRyYW5zZm9ybWF0aW9u
IG1hdHJpeC4KKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0
byBiZSBhcHBsaWVkIHRvIHRoZSByZXN1bHRpbmcgZnJ1c3R1bSBwbGFuZXMKKyAgICAgKiBAcGFy
YW0gZnJ1c3R1bVBsYW5lcyB0aGUgcmVzdWxpbmcgZnJ1c3R1bSBwbGFuZXMKKyAgICAgKi8KKyAg
ICBGcnVzdHVtLkdldFBsYW5lc1RvUmVmID0gZnVuY3Rpb24gKHRyYW5zZm9ybSwgZnJ1c3R1bVBs
YW5lcykgeworICAgICAgICAvLyBOZWFyCisgICAgICAgIEZydXN0dW0uR2V0TmVhclBsYW5lVG9S
ZWYodHJhbnNmb3JtLCBmcnVzdHVtUGxhbmVzWzBdKTsKKyAgICAgICAgLy8gRmFyCisgICAgICAg
IEZydXN0dW0uR2V0RmFyUGxhbmVUb1JlZih0cmFuc2Zvcm0sIGZydXN0dW1QbGFuZXNbMV0pOwor
ICAgICAgICAvLyBMZWZ0CisgICAgICAgIEZydXN0dW0uR2V0TGVmdFBsYW5lVG9SZWYodHJhbnNm
b3JtLCBmcnVzdHVtUGxhbmVzWzJdKTsKKyAgICAgICAgLy8gUmlnaHQKKyAgICAgICAgRnJ1c3R1
bS5HZXRSaWdodFBsYW5lVG9SZWYodHJhbnNmb3JtLCBmcnVzdHVtUGxhbmVzWzNdKTsKKyAgICAg
ICAgLy8gVG9wCisgICAgICAgIEZydXN0dW0uR2V0VG9wUGxhbmVUb1JlZih0cmFuc2Zvcm0sIGZy
dXN0dW1QbGFuZXNbNF0pOworICAgICAgICAvLyBCb3R0b20KKyAgICAgICAgRnJ1c3R1bS5HZXRC
b3R0b21QbGFuZVRvUmVmKHRyYW5zZm9ybSwgZnJ1c3R1bVBsYW5lc1s1XSk7CisgICAgfTsKKyAg
ICByZXR1cm4gRnJ1c3R1bTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0
aHMvbWF0aC5mdW5jdGlvbnMudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9NYXRocy9tYXRoLmZ1bmN0aW9ucy50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZXh0cmFj
dE1pbkFuZE1heEluZGV4ZWQsIGV4dHJhY3RNaW5BbmRNYXggKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiZXh0cmFjdE1pbkFuZE1heEluZGV4ZWQiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIGV4dHJhY3RNaW5BbmRNYXhJbmRleGVkOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImV4
dHJhY3RNaW5BbmRNYXgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV4dHJhY3RNaW5BbmRNYXg7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tYXRoLnZlY3RvciAqLyAi
Li9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworCisvKioKKyAqIEV4dHJhY3RzIG1pbmltdW0gYW5k
IG1heGltdW0gdmFsdWVzIGZyb20gYSBsaXN0IG9mIGluZGV4ZWQgcG9zaXRpb25zCisgKiBAcGFy
YW0gcG9zaXRpb25zIGRlZmluZXMgdGhlIHBvc2l0aW9ucyB0byB1c2UKKyAqIEBwYXJhbSBpbmRp
Y2VzIGRlZmluZXMgdGhlIGluZGljZXMgdG8gdGhlIHBvc2l0aW9ucworICogQHBhcmFtIGluZGV4
U3RhcnQgZGVmaW5lcyB0aGUgc3RhcnQgaW5kZXgKKyAqIEBwYXJhbSBpbmRleENvdW50IGRlZmlu
ZXMgdGhlIGVuZCBpbmRleAorICogQHBhcmFtIGJpYXMgZGVmaW5lcyBiaWFzIHZhbHVlIHRvIGFk
ZCB0byB0aGUgcmVzdWx0CisgKiBAcmV0dXJuIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzCisg
Ki8KK2Z1bmN0aW9uIGV4dHJhY3RNaW5BbmRNYXhJbmRleGVkKHBvc2l0aW9ucywgaW5kaWNlcywg
aW5kZXhTdGFydCwgaW5kZXhDb3VudCwgYmlhcykgeworICAgIGlmIChiaWFzID09PSB2b2lkIDAp
IHsgYmlhcyA9IG51bGw7IH0KKyAgICB2YXIgbWluaW11bSA9IG5ldyBfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKE51bWJlci5NQVhfVkFMVUUsIE51
bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUUpOworICAgIHZhciBtYXhpbXVtID0gbmV3
IF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oLU51
bWJlci5NQVhfVkFMVUUsIC1OdW1iZXIuTUFYX1ZBTFVFLCAtTnVtYmVyLk1BWF9WQUxVRSk7Cisg
ICAgZm9yICh2YXIgaW5kZXggPSBpbmRleFN0YXJ0OyBpbmRleCA8IGluZGV4U3RhcnQgKyBpbmRl
eENvdW50OyBpbmRleCsrKSB7CisgICAgICAgIHZhciBvZmZzZXQgPSBpbmRpY2VzW2luZGV4XSAq
IDM7CisgICAgICAgIHZhciB4ID0gcG9zaXRpb25zW29mZnNldF07CisgICAgICAgIHZhciB5ID0g
cG9zaXRpb25zW29mZnNldCArIDFdOworICAgICAgICB2YXIgeiA9IHBvc2l0aW9uc1tvZmZzZXQg
KyAyXTsKKyAgICAgICAgbWluaW11bS5taW5pbWl6ZUluUGxhY2VGcm9tRmxvYXRzKHgsIHksIHop
OworICAgICAgICBtYXhpbXVtLm1heGltaXplSW5QbGFjZUZyb21GbG9hdHMoeCwgeSwgeik7Cisg
ICAgfQorICAgIGlmIChiaWFzKSB7CisgICAgICAgIG1pbmltdW0ueCAtPSBtaW5pbXVtLnggKiBi
aWFzLnggKyBiaWFzLnk7CisgICAgICAgIG1pbmltdW0ueSAtPSBtaW5pbXVtLnkgKiBiaWFzLngg
KyBiaWFzLnk7CisgICAgICAgIG1pbmltdW0ueiAtPSBtaW5pbXVtLnogKiBiaWFzLnggKyBiaWFz
Lnk7CisgICAgICAgIG1heGltdW0ueCArPSBtYXhpbXVtLnggKiBiaWFzLnggKyBiaWFzLnk7Cisg
ICAgICAgIG1heGltdW0ueSArPSBtYXhpbXVtLnkgKiBiaWFzLnggKyBiaWFzLnk7CisgICAgICAg
IG1heGltdW0ueiArPSBtYXhpbXVtLnogKiBiaWFzLnggKyBiaWFzLnk7CisgICAgfQorICAgIHJl
dHVybiB7CisgICAgICAgIG1pbmltdW06IG1pbmltdW0sCisgICAgICAgIG1heGltdW06IG1heGlt
dW0KKyAgICB9OworfQorLyoqCisgKiBFeHRyYWN0cyBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVl
cyBmcm9tIGEgbGlzdCBvZiBwb3NpdGlvbnMKKyAqIEBwYXJhbSBwb3NpdGlvbnMgZGVmaW5lcyB0
aGUgcG9zaXRpb25zIHRvIHVzZQorICogQHBhcmFtIHN0YXJ0IGRlZmluZXMgdGhlIHN0YXJ0IGlu
ZGV4IGluIHRoZSBwb3NpdGlvbnMgYXJyYXkKKyAqIEBwYXJhbSBjb3VudCBkZWZpbmVzIHRoZSBu
dW1iZXIgb2YgcG9zaXRpb25zIHRvIGhhbmRsZQorICogQHBhcmFtIGJpYXMgZGVmaW5lcyBiaWFz
IHZhbHVlIHRvIGFkZCB0byB0aGUgcmVzdWx0CisgKiBAcGFyYW0gc3RyaWRlIGRlZmluZXMgdGhl
IHN0cmlkZSBzaXplIHRvIHVzZSAoZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9zaXRpb25zIGluIHRo
ZSBwb3NpdGlvbnMgYXJyYXkpCisgKiBAcmV0dXJuIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVz
CisgKi8KK2Z1bmN0aW9uIGV4dHJhY3RNaW5BbmRNYXgocG9zaXRpb25zLCBzdGFydCwgY291bnQs
IGJpYXMsIHN0cmlkZSkgeworICAgIGlmIChiaWFzID09PSB2b2lkIDApIHsgYmlhcyA9IG51bGw7
IH0KKyAgICB2YXIgbWluaW11bSA9IG5ldyBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdKE51bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUUs
IE51bWJlci5NQVhfVkFMVUUpOworICAgIHZhciBtYXhpbXVtID0gbmV3IF9tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oLU51bWJlci5NQVhfVkFMVUUs
IC1OdW1iZXIuTUFYX1ZBTFVFLCAtTnVtYmVyLk1BWF9WQUxVRSk7CisgICAgaWYgKCFzdHJpZGUp
IHsKKyAgICAgICAgc3RyaWRlID0gMzsKKyAgICB9CisgICAgZm9yICh2YXIgaW5kZXggPSBzdGFy
dCwgb2Zmc2V0ID0gc3RhcnQgKiBzdHJpZGU7IGluZGV4IDwgc3RhcnQgKyBjb3VudDsgaW5kZXgr
Kywgb2Zmc2V0ICs9IHN0cmlkZSkgeworICAgICAgICB2YXIgeCA9IHBvc2l0aW9uc1tvZmZzZXRd
OworICAgICAgICB2YXIgeSA9IHBvc2l0aW9uc1tvZmZzZXQgKyAxXTsKKyAgICAgICAgdmFyIHog
PSBwb3NpdGlvbnNbb2Zmc2V0ICsgMl07CisgICAgICAgIG1pbmltdW0ubWluaW1pemVJblBsYWNl
RnJvbUZsb2F0cyh4LCB5LCB6KTsKKyAgICAgICAgbWF4aW11bS5tYXhpbWl6ZUluUGxhY2VGcm9t
RmxvYXRzKHgsIHksIHopOworICAgIH0KKyAgICBpZiAoYmlhcykgeworICAgICAgICBtaW5pbXVt
LnggLT0gbWluaW11bS54ICogYmlhcy54ICsgYmlhcy55OworICAgICAgICBtaW5pbXVtLnkgLT0g
bWluaW11bS55ICogYmlhcy54ICsgYmlhcy55OworICAgICAgICBtaW5pbXVtLnogLT0gbWluaW11
bS56ICogYmlhcy54ICsgYmlhcy55OworICAgICAgICBtYXhpbXVtLnggKz0gbWF4aW11bS54ICog
Ymlhcy54ICsgYmlhcy55OworICAgICAgICBtYXhpbXVtLnkgKz0gbWF4aW11bS55ICogYmlhcy54
ICsgYmlhcy55OworICAgICAgICBtYXhpbXVtLnogKz0gbWF4aW11bS56ICogYmlhcy54ICsgYmlh
cy55OworICAgIH0KKyAgICByZXR1cm4geworICAgICAgICBtaW5pbXVtOiBtaW5pbXVtLAorICAg
ICAgICBtYXhpbXVtOiBtYXhpbXVtCisgICAgfTsKK30KKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vTWF0aHMvbWF0aC5wYXRoLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL01hdGhzL21hdGgucGF0aC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE9yaWVudGF0aW9uLCBCZXppZXJD
dXJ2ZSwgQW5nbGUsIEFyYzIsIFBhdGgyLCBQYXRoM0QsIEN1cnZlMyAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJPcmllbnRhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
T3JpZW50YXRpb247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmV6aWVyQ3VydmUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEJlemllckN1cnZlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuZ2xlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBBbmdsZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmMyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBBcmMyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhdGgyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBQYXRoMjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQYXRoM0Qi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFBhdGgzRDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDdXJ2
ZTMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEN1cnZlMzsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL21hdGguc2NhbGFyICovICIuL01hdGhzL21hdGguc2NhbGFyLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGgudmVjdG9yICov
ICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21h
dGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL21hdGguY29uc3RhbnRzICovICIuL01hdGhzL21hdGguY29uc3RhbnRzLnRz
Iik7CisKKworCisvKioKKyAqIERlZmluZXMgcG90ZW50aWFsIG9yaWVudGF0aW9uIGZvciBiYWNr
IGZhY2UgY3VsbGluZworICovCit2YXIgT3JpZW50YXRpb247CisoZnVuY3Rpb24gKE9yaWVudGF0
aW9uKSB7CisgICAgLyoqCisgICAgICogQ2xvY2t3aXNlCisgICAgICovCisgICAgT3JpZW50YXRp
b25bT3JpZW50YXRpb25bIkNXIl0gPSAwXSA9ICJDVyI7CisgICAgLyoqIENvdW50ZXIgY2xvY2t3
aXNlICovCisgICAgT3JpZW50YXRpb25bT3JpZW50YXRpb25bIkNDVyJdID0gMV0gPSAiQ0NXIjsK
K30pKE9yaWVudGF0aW9uIHx8IChPcmllbnRhdGlvbiA9IHt9KSk7CisvKiogQ2xhc3MgdXNlZCB0
byByZXByZXNlbnQgYSBCZXppZXIgY3VydmUgKi8KK3ZhciBCZXppZXJDdXJ2ZSA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBCZXppZXJDdXJ2ZSgpIHsKKyAgICB9
CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY3ViaWMgQmV6aWVyIGludGVycG9sYXRlZCB2
YWx1ZSAoZmxvYXQpIGF0ICJ0IiAoZmxvYXQpIGZyb20gdGhlIGdpdmVuIHgxLCB5MSwgeDIsIHky
IGZsb2F0cworICAgICAqIEBwYXJhbSB0IGRlZmluZXMgdGhlIHRpbWUKKyAgICAgKiBAcGFyYW0g
eDEgZGVmaW5lcyB0aGUgbGVmdCBjb29yZGluYXRlIG9uIFggYXhpcworICAgICAqIEBwYXJhbSB5
MSBkZWZpbmVzIHRoZSBsZWZ0IGNvb3JkaW5hdGUgb24gWSBheGlzCisgICAgICogQHBhcmFtIHgy
IGRlZmluZXMgdGhlIHJpZ2h0IGNvb3JkaW5hdGUgb24gWCBheGlzCisgICAgICogQHBhcmFtIHky
IGRlZmluZXMgdGhlIHJpZ2h0IGNvb3JkaW5hdGUgb24gWSBheGlzCisgICAgICogQHJldHVybnMg
dGhlIGludGVycG9sYXRlZCB2YWx1ZQorICAgICAqLworICAgIEJlemllckN1cnZlLkludGVycG9s
YXRlID0gZnVuY3Rpb24gKHQsIHgxLCB5MSwgeDIsIHkyKSB7CisgICAgICAgIC8vIEV4dHJhY3Qg
WCAod2hpY2ggaXMgZXF1YWwgdG8gdGltZSBoZXJlKQorICAgICAgICB2YXIgZjAgPSAxIC0gMyAq
IHgyICsgMyAqIHgxOworICAgICAgICB2YXIgZjEgPSAzICogeDIgLSA2ICogeDE7CisgICAgICAg
IHZhciBmMiA9IDMgKiB4MTsKKyAgICAgICAgdmFyIHJlZmluZWRUID0gdDsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgICAgIHZhciByZWZpbmVkVDIgPSBy
ZWZpbmVkVCAqIHJlZmluZWRUOworICAgICAgICAgICAgdmFyIHJlZmluZWRUMyA9IHJlZmluZWRU
MiAqIHJlZmluZWRUOworICAgICAgICAgICAgdmFyIHggPSBmMCAqIHJlZmluZWRUMyArIGYxICog
cmVmaW5lZFQyICsgZjIgKiByZWZpbmVkVDsKKyAgICAgICAgICAgIHZhciBzbG9wZSA9IDEuMCAv
ICgzLjAgKiBmMCAqIHJlZmluZWRUMiArIDIuMCAqIGYxICogcmVmaW5lZFQgKyBmMik7CisgICAg
ICAgICAgICByZWZpbmVkVCAtPSAoeCAtIHQpICogc2xvcGU7CisgICAgICAgICAgICByZWZpbmVk
VCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHJlZmluZWRUKSk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gUmVzb2x2ZSBjdWJpYyBiZXppZXIgZm9yIHRoZSBnaXZlbiB4CisgICAgICAgIHJldHVy
biAzICogTWF0aC5wb3coMSAtIHJlZmluZWRULCAyKSAqIHJlZmluZWRUICogeTEgKworICAgICAg
ICAgICAgMyAqICgxIC0gcmVmaW5lZFQpICogTWF0aC5wb3cocmVmaW5lZFQsIDIpICogeTIgKwor
ICAgICAgICAgICAgTWF0aC5wb3cocmVmaW5lZFQsIDMpOworICAgIH07CisgICAgcmV0dXJuIEJl
emllckN1cnZlOworfSgpKTsKKworLyoqCisgKiBEZWZpbmVzIGFuZ2xlIHJlcHJlc2VudGF0aW9u
CisgKi8KK3ZhciBBbmdsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGFuIEFuZ2xlIG9iamVjdCBvZiAicmFkaWFucyIgcmFkaWFucyAoZmxv
YXQpLgorICAgICAqIEBwYXJhbSByYWRpYW5zIHRoZSBhbmdsZSBpbiByYWRpYW5zCisgICAgICov
CisgICAgZnVuY3Rpb24gQW5nbGUocmFkaWFucykgeworICAgICAgICB0aGlzLl9yYWRpYW5zID0g
cmFkaWFuczsKKyAgICAgICAgaWYgKHRoaXMuX3JhZGlhbnMgPCAwLjApIHsKKyAgICAgICAgICAg
IHRoaXMuX3JhZGlhbnMgKz0gKDIuMCAqIE1hdGguUEkpOworICAgICAgICB9CisgICAgfQorICAg
IC8qKgorICAgICAqIEdldCB2YWx1ZSBpbiBkZWdyZWVzCisgICAgICogQHJldHVybnMgdGhlIEFu
Z2xlIHZhbHVlIGluIGRlZ3JlZXMgKGZsb2F0KQorICAgICAqLworICAgIEFuZ2xlLnByb3RvdHlw
ZS5kZWdyZWVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fcmFkaWFucyAq
IDE4MC4wIC8gTWF0aC5QSTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCB2YWx1ZSBpbiBy
YWRpYW5zCisgICAgICogQHJldHVybnMgdGhlIEFuZ2xlIHZhbHVlIGluIHJhZGlhbnMgKGZsb2F0
KQorICAgICAqLworICAgIEFuZ2xlLnByb3RvdHlwZS5yYWRpYW5zID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fcmFkaWFuczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdl
dHMgYSBuZXcgQW5nbGUgb2JqZWN0IHZhbHVlZCB3aXRoIHRoZSBhbmdsZSB2YWx1ZSBpbiByYWRp
YW5zIGJldHdlZW4gdGhlIHR3byBnaXZlbiB2ZWN0b3JzCisgICAgICogQHBhcmFtIGEgZGVmaW5l
cyBmaXJzdCB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gYiBkZWZpbmVzIHNlY29uZCB2ZWN0b3IKKyAg
ICAgKiBAcmV0dXJucyBhIG5ldyBBbmdsZQorICAgICAqLworICAgIEFuZ2xlLkJldHdlZW5Ud29Q
b2ludHMgPSBmdW5jdGlvbiAoYSwgYikgeworICAgICAgICB2YXIgZGVsdGEgPSBiLnN1YnRyYWN0
KGEpOworICAgICAgICB2YXIgdGhldGEgPSBNYXRoLmF0YW4yKGRlbHRhLnksIGRlbHRhLngpOwor
ICAgICAgICByZXR1cm4gbmV3IEFuZ2xlKHRoZXRhKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEdldHMgYSBuZXcgQW5nbGUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGZsb2F0IGluIHJhZGlhbnMK
KyAgICAgKiBAcGFyYW0gcmFkaWFucyBkZWZpbmVzIHRoZSBhbmdsZSB2YWx1ZSBpbiByYWRpYW5z
CisgICAgICogQHJldHVybnMgYSBuZXcgQW5nbGUKKyAgICAgKi8KKyAgICBBbmdsZS5Gcm9tUmFk
aWFucyA9IGZ1bmN0aW9uIChyYWRpYW5zKSB7CisgICAgICAgIHJldHVybiBuZXcgQW5nbGUocmFk
aWFucyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbmV3IEFuZ2xlIG9iamVjdCBm
cm9tIHRoZSBnaXZlbiBmbG9hdCBpbiBkZWdyZWVzCisgICAgICogQHBhcmFtIGRlZ3JlZXMgZGVm
aW5lcyB0aGUgYW5nbGUgdmFsdWUgaW4gZGVncmVlcworICAgICAqIEByZXR1cm5zIGEgbmV3IEFu
Z2xlCisgICAgICovCisgICAgQW5nbGUuRnJvbURlZ3JlZXMgPSBmdW5jdGlvbiAoZGVncmVlcykg
eworICAgICAgICByZXR1cm4gbmV3IEFuZ2xlKGRlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApOwor
ICAgIH07CisgICAgcmV0dXJuIEFuZ2xlOworfSgpKTsKKworLyoqCisgKiBUaGlzIHJlcHJlc2Vu
dHMgYW4gYXJjIGluIGEgMmQgc3BhY2UuCisgKi8KK3ZhciBBcmMyID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gQXJjIG9iamVjdCBmcm9t
IHRoZSB0aHJlZSBnaXZlbiBwb2ludHMgOiBzdGFydCwgbWlkZGxlIGFuZCBlbmQuCisgICAgICog
QHBhcmFtIHN0YXJ0UG9pbnQgRGVmaW5lcyB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlIGFyYworICAg
ICAqIEBwYXJhbSBtaWRQb2ludCBEZWZpbmVzIHRoZSBtaWRsbGUgcG9pbnQgb2YgdGhlIGFyYwor
ICAgICAqIEBwYXJhbSBlbmRQb2ludCBEZWZpbmVzIHRoZSBlbmQgcG9pbnQgb2YgdGhlIGFyYwor
ICAgICAqLworICAgIGZ1bmN0aW9uIEFyYzIoCisgICAgLyoqIERlZmluZXMgdGhlIHN0YXJ0IHBv
aW50IG9mIHRoZSBhcmMgKi8KKyAgICBzdGFydFBvaW50LCAKKyAgICAvKiogRGVmaW5lcyB0aGUg
bWlkIHBvaW50IG9mIHRoZSBhcmMgKi8KKyAgICBtaWRQb2ludCwgCisgICAgLyoqIERlZmluZXMg
dGhlIGVuZCBwb2ludCBvZiB0aGUgYXJjICovCisgICAgZW5kUG9pbnQpIHsKKyAgICAgICAgdGhp
cy5zdGFydFBvaW50ID0gc3RhcnRQb2ludDsKKyAgICAgICAgdGhpcy5taWRQb2ludCA9IG1pZFBv
aW50OworICAgICAgICB0aGlzLmVuZFBvaW50ID0gZW5kUG9pbnQ7CisgICAgICAgIHZhciB0ZW1w
ID0gTWF0aC5wb3cobWlkUG9pbnQueCwgMikgKyBNYXRoLnBvdyhtaWRQb2ludC55LCAyKTsKKyAg
ICAgICAgdmFyIHN0YXJ0VG9NaWQgPSAoTWF0aC5wb3coc3RhcnRQb2ludC54LCAyKSArIE1hdGgu
cG93KHN0YXJ0UG9pbnQueSwgMikgLSB0ZW1wKSAvIDIuOworICAgICAgICB2YXIgbWlkVG9FbmQg
PSAodGVtcCAtIE1hdGgucG93KGVuZFBvaW50LngsIDIpIC0gTWF0aC5wb3coZW5kUG9pbnQueSwg
MikpIC8gMi47CisgICAgICAgIHZhciBkZXQgPSAoc3RhcnRQb2ludC54IC0gbWlkUG9pbnQueCkg
KiAobWlkUG9pbnQueSAtIGVuZFBvaW50LnkpIC0gKG1pZFBvaW50LnggLSBlbmRQb2ludC54KSAq
IChzdGFydFBvaW50LnkgLSBtaWRQb2ludC55KTsKKyAgICAgICAgdGhpcy5jZW50ZXJQb2ludCA9
IG5ldyBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJd
KChzdGFydFRvTWlkICogKG1pZFBvaW50LnkgLSBlbmRQb2ludC55KSAtIG1pZFRvRW5kICogKHN0
YXJ0UG9pbnQueSAtIG1pZFBvaW50LnkpKSAvIGRldCwgKChzdGFydFBvaW50LnggLSBtaWRQb2lu
dC54KSAqIG1pZFRvRW5kIC0gKG1pZFBvaW50LnggLSBlbmRQb2ludC54KSAqIHN0YXJ0VG9NaWQp
IC8gZGV0KTsKKyAgICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLmNlbnRlclBvaW50LnN1YnRyYWN0
KHRoaXMuc3RhcnRQb2ludCkubGVuZ3RoKCk7CisgICAgICAgIHRoaXMuc3RhcnRBbmdsZSA9IEFu
Z2xlLkJldHdlZW5Ud29Qb2ludHModGhpcy5jZW50ZXJQb2ludCwgdGhpcy5zdGFydFBvaW50KTsK
KyAgICAgICAgdmFyIGExID0gdGhpcy5zdGFydEFuZ2xlLmRlZ3JlZXMoKTsKKyAgICAgICAgdmFy
IGEyID0gQW5nbGUuQmV0d2VlblR3b1BvaW50cyh0aGlzLmNlbnRlclBvaW50LCB0aGlzLm1pZFBv
aW50KS5kZWdyZWVzKCk7CisgICAgICAgIHZhciBhMyA9IEFuZ2xlLkJldHdlZW5Ud29Qb2ludHMo
dGhpcy5jZW50ZXJQb2ludCwgdGhpcy5lbmRQb2ludCkuZGVncmVlcygpOworICAgICAgICAvLyBh
bmdsZXMgY29ycmVjdGlvbgorICAgICAgICBpZiAoYTIgLSBhMSA+ICsxODAuMCkgeworICAgICAg
ICAgICAgYTIgLT0gMzYwLjA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGEyIC0gYTEgPCAtMTgw
LjApIHsKKyAgICAgICAgICAgIGEyICs9IDM2MC4wOworICAgICAgICB9CisgICAgICAgIGlmIChh
MyAtIGEyID4gKzE4MC4wKSB7CisgICAgICAgICAgICBhMyAtPSAzNjAuMDsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoYTMgLSBhMiA8IC0xODAuMCkgeworICAgICAgICAgICAgYTMgKz0gMzYwLjA7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IChhMiAtIGExKSA8IDAgPyBP
cmllbnRhdGlvbi5DVyA6IE9yaWVudGF0aW9uLkNDVzsKKyAgICAgICAgdGhpcy5hbmdsZSA9IEFu
Z2xlLkZyb21EZWdyZWVzKHRoaXMub3JpZW50YXRpb24gPT09IE9yaWVudGF0aW9uLkNXID8gYTEg
LSBhMyA6IGEzIC0gYTEpOworICAgIH0KKyAgICByZXR1cm4gQXJjMjsKK30oKSk7CisKKy8qKgor
ICogUmVwcmVzZW50cyBhIDJEIHBhdGggbWFkZSB1cCBvZiBtdWx0aXBsZSAyRCBwb2ludHMKKyAq
LwordmFyIFBhdGgyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBQYXRoMiBvYmplY3QgZnJvbSB0aGUgc3RhcnRpbmcgMkQgY29vcmRpbmF0
ZXMgeCBhbmQgeS4KKyAgICAgKiBAcGFyYW0geCB0aGUgc3RhcnRpbmcgcG9pbnRzIHggdmFsdWUK
KyAgICAgKiBAcGFyYW0geSB0aGUgc3RhcnRpbmcgcG9pbnRzIHkgdmFsdWUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBQYXRoMih4LCB5KSB7CisgICAgICAgIHRoaXMuX3BvaW50cyA9IG5ldyBBcnJh
eSgpOworICAgICAgICB0aGlzLl9sZW5ndGggPSAwLjA7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBJZiB0aGUgcGF0aCBzdGFydCBhbmQgZW5kIHBvaW50IGFyZSB0aGUgc2FtZQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcG9pbnRzLnB1
c2gobmV3IF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3Iy
Il0oeCwgeSkpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGRzIGEgbmV3IHNlZ21lbnQgdW50
aWwgdGhlIGdpdmVuIGNvb3JkaW5hdGVzICh4LCB5KSB0byB0aGUgY3VycmVudCBQYXRoMi4KKyAg
ICAgKiBAcGFyYW0geCB0aGUgYWRkZWQgcG9pbnRzIHggdmFsdWUKKyAgICAgKiBAcGFyYW0geSB0
aGUgYWRkZWQgcG9pbnRzIHkgdmFsdWUKKyAgICAgKiBAcmV0dXJucyB0aGUgdXBkYXRlZCBQYXRo
Mi4KKyAgICAgKi8KKyAgICBQYXRoMi5wcm90b3R5cGUuYWRkTGluZVRvID0gZnVuY3Rpb24gKHgs
IHkpIHsKKyAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgfQorICAgICAgICB2YXIgbmV3UG9pbnQgPSBuZXcgX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjIiXSh4LCB5KTsKKyAgICAgICAgdmFy
IHByZXZpb3VzUG9pbnQgPSB0aGlzLl9wb2ludHNbdGhpcy5fcG9pbnRzLmxlbmd0aCAtIDFdOwor
ICAgICAgICB0aGlzLl9wb2ludHMucHVzaChuZXdQb2ludCk7CisgICAgICAgIHRoaXMuX2xlbmd0
aCArPSBuZXdQb2ludC5zdWJ0cmFjdChwcmV2aW91c1BvaW50KS5sZW5ndGgoKTsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIF9udW1iZXJPZlNlZ21l
bnRzXyBzZWdtZW50cyBhY2NvcmRpbmcgdG8gdGhlIGFyYyBkZWZpbml0aW9uIChtaWRkbGUgcG9p
bnQgY29vcmRpbmF0ZXMsIGVuZCBwb2ludCBjb29yZGluYXRlcywgdGhlIGFyYyBzdGFydCBwb2lu
dCBiZWluZyB0aGUgY3VycmVudCBQYXRoMiBsYXN0IHBvaW50KSB0byB0aGUgY3VycmVudCBQYXRo
Mi4KKyAgICAgKiBAcGFyYW0gbWlkWCBtaWRkbGUgcG9pbnQgeCB2YWx1ZQorICAgICAqIEBwYXJh
bSBtaWRZIG1pZGRsZSBwb2ludCB5IHZhbHVlCisgICAgICogQHBhcmFtIGVuZFggZW5kIHBvaW50
IHggdmFsdWUKKyAgICAgKiBAcGFyYW0gZW5kWSBlbmQgcG9pbnQgeSB2YWx1ZQorICAgICAqIEBw
YXJhbSBudW1iZXJPZlNlZ21lbnRzIChkZWZhdWx0OiAzNikKKyAgICAgKiBAcmV0dXJucyB0aGUg
dXBkYXRlZCBQYXRoMi4KKyAgICAgKi8KKyAgICBQYXRoMi5wcm90b3R5cGUuYWRkQXJjVG8gPSBm
dW5jdGlvbiAobWlkWCwgbWlkWSwgZW5kWCwgZW5kWSwgbnVtYmVyT2ZTZWdtZW50cykgeworICAg
ICAgICBpZiAobnVtYmVyT2ZTZWdtZW50cyA9PT0gdm9pZCAwKSB7IG51bWJlck9mU2VnbWVudHMg
PSAzNjsgfQorICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICB9CisgICAgICAgIHZhciBzdGFydFBvaW50ID0gdGhpcy5fcG9pbnRzW3Ro
aXMuX3BvaW50cy5sZW5ndGggLSAxXTsKKyAgICAgICAgdmFyIG1pZFBvaW50ID0gbmV3IF9tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0obWlkWCwgbWlk
WSk7CisgICAgICAgIHZhciBlbmRQb2ludCA9IG5ldyBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKGVuZFgsIGVuZFkpOworICAgICAgICB2YXIgYXJj
ID0gbmV3IEFyYzIoc3RhcnRQb2ludCwgbWlkUG9pbnQsIGVuZFBvaW50KTsKKyAgICAgICAgdmFy
IGluY3JlbWVudCA9IGFyYy5hbmdsZS5yYWRpYW5zKCkgLyBudW1iZXJPZlNlZ21lbnRzOworICAg
ICAgICBpZiAoYXJjLm9yaWVudGF0aW9uID09PSBPcmllbnRhdGlvbi5DVykgeworICAgICAgICAg
ICAgaW5jcmVtZW50ICo9IC0xOworICAgICAgICB9CisgICAgICAgIHZhciBjdXJyZW50QW5nbGUg
PSBhcmMuc3RhcnRBbmdsZS5yYWRpYW5zKCkgKyBpbmNyZW1lbnQ7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbnVtYmVyT2ZTZWdtZW50czsgaSsrKSB7CisgICAgICAgICAgICB2YXIgeCA9
IE1hdGguY29zKGN1cnJlbnRBbmdsZSkgKiBhcmMucmFkaXVzICsgYXJjLmNlbnRlclBvaW50Lng7
CisgICAgICAgICAgICB2YXIgeSA9IE1hdGguc2luKGN1cnJlbnRBbmdsZSkgKiBhcmMucmFkaXVz
ICsgYXJjLmNlbnRlclBvaW50Lnk7CisgICAgICAgICAgICB0aGlzLmFkZExpbmVUbyh4LCB5KTsK
KyAgICAgICAgICAgIGN1cnJlbnRBbmdsZSArPSBpbmNyZW1lbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9zZXMgdGhlIFBhdGgy
LgorICAgICAqIEByZXR1cm5zIHRoZSBQYXRoMi4KKyAgICAgKi8KKyAgICBQYXRoMi5wcm90b3R5
cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzdW0g
b2YgdGhlIGRpc3RhbmNlIGJldHdlZW4gZWFjaCBzZXF1ZW50aWFsIHBvaW50IGluIHRoZSBwYXRo
CisgICAgICogQHJldHVybnMgdGhlIFBhdGgyIHRvdGFsIGxlbmd0aCAoZmxvYXQpLgorICAgICAq
LworICAgIFBhdGgyLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh
ciByZXN1bHQgPSB0aGlzLl9sZW5ndGg7CisgICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHsKKyAg
ICAgICAgICAgIHZhciBsYXN0UG9pbnQgPSB0aGlzLl9wb2ludHNbdGhpcy5fcG9pbnRzLmxlbmd0
aCAtIDFdOworICAgICAgICAgICAgdmFyIGZpcnN0UG9pbnQgPSB0aGlzLl9wb2ludHNbMF07Cisg
ICAgICAgICAgICByZXN1bHQgKz0gKGZpcnN0UG9pbnQuc3VidHJhY3QobGFzdFBvaW50KS5sZW5n
dGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEdldHMgdGhlIHBvaW50cyB3aGljaCBjb25zdHJ1Y3QgdGhlIHBhdGgKKyAgICAg
KiBAcmV0dXJucyB0aGUgUGF0aDIgaW50ZXJuYWwgYXJyYXkgb2YgcG9pbnRzLgorICAgICAqLwor
ICAgIFBhdGgyLnByb3RvdHlwZS5nZXRQb2ludHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9wb2ludHM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXRyZWl2ZXMgdGhl
IHBvaW50IGF0IHRoZSBkaXN0YW5jZSBhd2F5cyBmcm9tIHRoZSBzdGFydGluZyBwb2ludAorICAg
ICAqIEBwYXJhbSBub3JtYWxpemVkTGVuZ3RoUG9zaXRpb24gdGhlIGxlbmd0aCBhbG9uZyB0aGUg
cGF0aCB0byByZXRyZWl2ZSB0aGUgcG9pbnQgZnJvbQorICAgICAqIEByZXR1cm5zIGEgbmV3IFZl
Y3RvcjIgbG9jYXRlZCBhdCBhIHBlcmNlbnRhZ2Ugb2YgdGhlIFBhdGgyIHRvdGFsIGxlbmd0aCBv
biB0aGlzIHBhdGguCisgICAgICovCisgICAgUGF0aDIucHJvdG90eXBlLmdldFBvaW50QXRMZW5n
dGhQb3NpdGlvbiA9IGZ1bmN0aW9uIChub3JtYWxpemVkTGVuZ3RoUG9zaXRpb24pIHsKKyAgICAg
ICAgaWYgKG5vcm1hbGl6ZWRMZW5ndGhQb3NpdGlvbiA8IDAgfHwgbm9ybWFsaXplZExlbmd0aFBv
c2l0aW9uID4gMSkgeworICAgICAgICAgICAgcmV0dXJuIF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0uWmVybygpOworICAgICAgICB9CisgICAgICAg
IHZhciBsZW5ndGhQb3NpdGlvbiA9IG5vcm1hbGl6ZWRMZW5ndGhQb3NpdGlvbiAqIHRoaXMubGVu
Z3RoKCk7CisgICAgICAgIHZhciBwcmV2aW91c09mZnNldCA9IDA7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5fcG9pbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIg
aiA9IChpICsgMSkgJSB0aGlzLl9wb2ludHMubGVuZ3RoOworICAgICAgICAgICAgdmFyIGEgPSB0
aGlzLl9wb2ludHNbaV07CisgICAgICAgICAgICB2YXIgYiA9IHRoaXMuX3BvaW50c1tqXTsKKyAg
ICAgICAgICAgIHZhciBiVG9BID0gYi5zdWJ0cmFjdChhKTsKKyAgICAgICAgICAgIHZhciBuZXh0
T2Zmc2V0ID0gKGJUb0EubGVuZ3RoKCkgKyBwcmV2aW91c09mZnNldCk7CisgICAgICAgICAgICBp
ZiAobGVuZ3RoUG9zaXRpb24gPj0gcHJldmlvdXNPZmZzZXQgJiYgbGVuZ3RoUG9zaXRpb24gPD0g
bmV4dE9mZnNldCkgeworICAgICAgICAgICAgICAgIHZhciBkaXIgPSBiVG9BLm5vcm1hbGl6ZSgp
OworICAgICAgICAgICAgICAgIHZhciBsb2NhbE9mZnNldCA9IGxlbmd0aFBvc2l0aW9uIC0gcHJl
dmlvdXNPZmZzZXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKGEueCArIChkaXIueCAqIGxvY2Fs
T2Zmc2V0KSwgYS55ICsgKGRpci55ICogbG9jYWxPZmZzZXQpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gbmV4dE9mZnNldDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3Rv
cjIiXS5aZXJvKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHBhdGgg
c3RhcnRpbmcgZnJvbSBhbiB4IGFuZCB5IHBvc2l0aW9uCisgICAgICogQHBhcmFtIHggc3RhcnRp
bmcgeCB2YWx1ZQorICAgICAqIEBwYXJhbSB5IHN0YXJ0aW5nIHkgdmFsdWUKKyAgICAgKiBAcmV0
dXJucyBhIG5ldyBQYXRoMiBzdGFydGluZyBhdCB0aGUgY29vcmRpbmF0ZXMgKHgsIHkpLgorICAg
ICAqLworICAgIFBhdGgyLlN0YXJ0aW5nQXQgPSBmdW5jdGlvbiAoeCwgeSkgeworICAgICAgICBy
ZXR1cm4gbmV3IFBhdGgyKHgsIHkpOworICAgIH07CisgICAgcmV0dXJuIFBhdGgyOworfSgpKTsK
KworLyoqCisgKiBSZXByZXNlbnRzIGEgM0QgcGF0aCBtYWRlIHVwIG9mIG11bHRpcGxlIDNEIHBv
aW50cworICovCit2YXIgUGF0aDNEID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAg
IC8qKgorICAgICogbmV3IFBhdGgzRChwYXRoLCBub3JtYWwsIHJhdykKKyAgICAqIENyZWF0ZXMg
YSBQYXRoM0QuIEEgUGF0aDNEIGlzIGEgbG9naWNhbCBtYXRoIG9iamVjdCwgc28gbm90IGEgbWVz
aC4KKyAgICAqIHBsZWFzZSByZWFkIHRoZSBkZXNjcmlwdGlvbiBpbiB0aGUgdHV0b3JpYWwgOiBo
dHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3BhdGgzZAorICAgICog
QHBhcmFtIHBhdGggYW4gYXJyYXkgb2YgVmVjdG9yMywgdGhlIGN1cnZlIGF4aXMgb2YgdGhlIFBh
dGgzRAorICAgICogQHBhcmFtIGZpcnN0Tm9ybWFsIChvcHRpb25zKSBWZWN0b3IzLCB0aGUgZmly
c3Qgd2FudGVkIG5vcm1hbCB0byB0aGUgY3VydmUuIEV4ICgwLCAxLCAwKSBmb3IgYSB2ZXJ0aWNh
bCBub3JtYWwuCisgICAgKiBAcGFyYW0gcmF3IChvcHRpb25hbCwgZGVmYXVsdCBmYWxzZSkgOiBi
b29sZWFuLCBpZiB0cnVlIHRoZSByZXR1cm5lZCBQYXRoM0QgaXNuJ3Qgbm9ybWFsaXplZC4gVXNl
ZnVsIHRvIGRlcGljdCBwYXRoIGFjY2VsZXJhdGlvbiBvciBzcGVlZC4KKyAgICAqLworICAgIGZ1
bmN0aW9uIFBhdGgzRCgKKyAgICAvKioKKyAgICAgKiBhbiBhcnJheSBvZiBWZWN0b3IzLCB0aGUg
Y3VydmUgYXhpcyBvZiB0aGUgUGF0aDNECisgICAgICovCisgICAgcGF0aCwgZmlyc3ROb3JtYWws
IHJhdykgeworICAgICAgICBpZiAoZmlyc3ROb3JtYWwgPT09IHZvaWQgMCkgeyBmaXJzdE5vcm1h
bCA9IG51bGw7IH0KKyAgICAgICAgdGhpcy5wYXRoID0gcGF0aDsKKyAgICAgICAgdGhpcy5fY3Vy
dmUgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fZGlzdGFuY2VzID0gbmV3IEFycmF5KCk7
CisgICAgICAgIHRoaXMuX3RhbmdlbnRzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX25v
cm1hbHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fYmlub3JtYWxzID0gbmV3IEFycmF5
KCk7CisgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgcGF0aC5sZW5ndGg7IHArKykgeworICAg
ICAgICAgICAgdGhpcy5fY3VydmVbcF0gPSBwYXRoW3BdLmNsb25lKCk7IC8vIGhhcmQgY29weQor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX3JhdyA9IHJhdyB8fCBmYWxzZTsKKyAgICAgICAgdGhp
cy5fY29tcHV0ZShmaXJzdE5vcm1hbCk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJldHVybnMg
dGhlIFBhdGgzRCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMgZGVzaWduaW5nIGl0cyBjdXJ2
ZS4KKyAgICAgKiBAcmV0dXJucyB0aGUgUGF0aDNEIGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9y
MyBkZXNpZ25pbmcgaXRzIGN1cnZlLgorICAgICAqLworICAgIFBhdGgzRC5wcm90b3R5cGUuZ2V0
Q3VydmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9jdXJ2ZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gYXJyYXkgcG9wdWxhdGVkIHdpdGggdGFuZ2Vu
dCB2ZWN0b3JzIG9uIGVhY2ggUGF0aDNEIGN1cnZlIHBvaW50LgorICAgICAqIEByZXR1cm5zIGFu
IGFycmF5IHBvcHVsYXRlZCB3aXRoIHRhbmdlbnQgdmVjdG9ycyBvbiBlYWNoIFBhdGgzRCBjdXJ2
ZSBwb2ludC4KKyAgICAgKi8KKyAgICBQYXRoM0QucHJvdG90eXBlLmdldFRhbmdlbnRzID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdGFuZ2VudHM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBSZXR1cm5zIGFuIGFycmF5IHBvcHVsYXRlZCB3aXRoIG5vcm1hbCB2ZWN0b3Jz
IG9uIGVhY2ggUGF0aDNEIGN1cnZlIHBvaW50LgorICAgICAqIEByZXR1cm5zIGFuIGFycmF5IHBv
cHVsYXRlZCB3aXRoIG5vcm1hbCB2ZWN0b3JzIG9uIGVhY2ggUGF0aDNEIGN1cnZlIHBvaW50Lgor
ICAgICAqLworICAgIFBhdGgzRC5wcm90b3R5cGUuZ2V0Tm9ybWFscyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX25vcm1hbHM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIGFuIGFycmF5IHBvcHVsYXRlZCB3aXRoIGJpbm9ybWFsIHZlY3RvcnMgb24gZWFjaCBQ
YXRoM0QgY3VydmUgcG9pbnQuCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgcG9wdWxhdGVkIHdp
dGggYmlub3JtYWwgdmVjdG9ycyBvbiBlYWNoIFBhdGgzRCBjdXJ2ZSBwb2ludC4KKyAgICAgKi8K
KyAgICBQYXRoM0QucHJvdG90eXBlLmdldEJpbm9ybWFscyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2Jpbm9ybWFsczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVy
bnMgYW4gYXJyYXkgcG9wdWxhdGVkIHdpdGggZGlzdGFuY2VzIChmbG9hdCkgb2YgdGhlIGktdGgg
cG9pbnQgZnJvbSB0aGUgZmlyc3QgY3VydmUgcG9pbnQuCisgICAgICogQHJldHVybnMgYW4gYXJy
YXkgcG9wdWxhdGVkIHdpdGggZGlzdGFuY2VzIChmbG9hdCkgb2YgdGhlIGktdGggcG9pbnQgZnJv
bSB0aGUgZmlyc3QgY3VydmUgcG9pbnQuCisgICAgICovCisgICAgUGF0aDNELnByb3RvdHlwZS5n
ZXREaXN0YW5jZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9kaXN0YW5j
ZXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZXMgdGhlIFBhdGgzRCB0YW5nZW50LCBu
b3JtYWwsIGJpbm9ybWFsIGFuZCBkaXN0YW5jZSByZWNvbXB1dGF0aW9uLgorICAgICAqIEBwYXJh
bSBwYXRoIHBhdGggd2hpY2ggYWxsIHZhbHVlcyBhcmUgY29waWVkIGludG8gdGhlIGN1cnZlcyBw
b2ludHMKKyAgICAgKiBAcGFyYW0gZmlyc3ROb3JtYWwgd2hpY2ggc2hvdWxkIGJlIHByb2plY3Rl
ZCBvbnRvIHRoZSBjdXJ2ZQorICAgICAqIEByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCB1cGRhdGVk
LgorICAgICAqLworICAgIFBhdGgzRC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKHBhdGgs
IGZpcnN0Tm9ybWFsKSB7CisgICAgICAgIGlmIChmaXJzdE5vcm1hbCA9PT0gdm9pZCAwKSB7IGZp
cnN0Tm9ybWFsID0gbnVsbDsgfQorICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHBhdGgubGVu
Z3RoOyBwKyspIHsKKyAgICAgICAgICAgIHRoaXMuX2N1cnZlW3BdLnggPSBwYXRoW3BdLng7Cisg
ICAgICAgICAgICB0aGlzLl9jdXJ2ZVtwXS55ID0gcGF0aFtwXS55OworICAgICAgICAgICAgdGhp
cy5fY3VydmVbcF0ueiA9IHBhdGhbcF0uejsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb21w
dXRlKGZpcnN0Tm9ybWFsKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvLyBw
cml2YXRlIGZ1bmN0aW9uIGNvbXB1dGUoKSA6IGNvbXB1dGVzIHRhbmdlbnRzLCBub3JtYWxzIGFu
ZCBiaW5vcm1hbHMKKyAgICBQYXRoM0QucHJvdG90eXBlLl9jb21wdXRlID0gZnVuY3Rpb24gKGZp
cnN0Tm9ybWFsKSB7CisgICAgICAgIHZhciBsID0gdGhpcy5fY3VydmUubGVuZ3RoOworICAgICAg
ICAvLyBmaXJzdCBhbmQgbGFzdCB0YW5nZW50cworICAgICAgICB0aGlzLl90YW5nZW50c1swXSA9
IHRoaXMuX2dldEZpcnN0Tm9uTnVsbFZlY3RvcigwKTsKKyAgICAgICAgaWYgKCF0aGlzLl9yYXcp
IHsKKyAgICAgICAgICAgIHRoaXMuX3RhbmdlbnRzWzBdLm5vcm1hbGl6ZSgpOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX3RhbmdlbnRzW2wgLSAxXSA9IHRoaXMuX2N1cnZlW2wgLSAxXS5zdWJ0
cmFjdCh0aGlzLl9jdXJ2ZVtsIC0gMl0pOworICAgICAgICBpZiAoIXRoaXMuX3JhdykgeworICAg
ICAgICAgICAgdGhpcy5fdGFuZ2VudHNbbCAtIDFdLm5vcm1hbGl6ZSgpOworICAgICAgICB9Cisg
ICAgICAgIC8vIG5vcm1hbHMgYW5kIGJpbm9ybWFscyBhdCBmaXJzdCBwb2ludCA6IGFyYml0cmFy
eSB2ZWN0b3Igd2l0aCBfbm9ybWFsVmVjdG9yKCkKKyAgICAgICAgdmFyIHRnMCA9IHRoaXMuX3Rh
bmdlbnRzWzBdOworICAgICAgICB2YXIgcHAwID0gdGhpcy5fbm9ybWFsVmVjdG9yKHRnMCwgZmly
c3ROb3JtYWwpOworICAgICAgICB0aGlzLl9ub3JtYWxzWzBdID0gcHAwOworICAgICAgICBpZiAo
IXRoaXMuX3JhdykgeworICAgICAgICAgICAgdGhpcy5fbm9ybWFsc1swXS5ub3JtYWxpemUoKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9iaW5vcm1hbHNbMF0gPSBfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKHRnMCwgdGhpcy5fbm9y
bWFsc1swXSk7CisgICAgICAgIGlmICghdGhpcy5fcmF3KSB7CisgICAgICAgICAgICB0aGlzLl9i
aW5vcm1hbHNbMF0ubm9ybWFsaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGlzdGFu
Y2VzWzBdID0gMC4wOworICAgICAgICAvLyBub3JtYWxzIGFuZCBiaW5vcm1hbHMgOiBuZXh0IHBv
aW50cworICAgICAgICB2YXIgcHJldjsgLy8gcHJldmlvdXMgdmVjdG9yIChzZWdtZW50KQorICAg
ICAgICB2YXIgY3VyOyAvLyBjdXJyZW50IHZlY3RvciAoc2VnbWVudCkKKyAgICAgICAgdmFyIGN1
clRhbmc7IC8vIGN1cnJlbnQgdGFuZ2VudAorICAgICAgICAvLyBwcmV2aW91cyBub3JtYWwKKyAg
ICAgICAgdmFyIHByZXZCaW5vcjsgLy8gcHJldmlvdXMgYmlub3JtYWwKKyAgICAgICAgZm9yICh2
YXIgaSA9IDE7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgIC8vIHRhbmdlbnRzCisgICAgICAg
ICAgICBwcmV2ID0gdGhpcy5fZ2V0TGFzdE5vbk51bGxWZWN0b3IoaSk7CisgICAgICAgICAgICBp
ZiAoaSA8IGwgLSAxKSB7CisgICAgICAgICAgICAgICAgY3VyID0gdGhpcy5fZ2V0Rmlyc3ROb25O
dWxsVmVjdG9yKGkpOworICAgICAgICAgICAgICAgIHRoaXMuX3RhbmdlbnRzW2ldID0gcHJldi5h
ZGQoY3VyKTsKKyAgICAgICAgICAgICAgICB0aGlzLl90YW5nZW50c1tpXS5ub3JtYWxpemUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlc1tpXSA9IHRoaXMuX2Rp
c3RhbmNlc1tpIC0gMV0gKyBwcmV2Lmxlbmd0aCgpOworICAgICAgICAgICAgLy8gbm9ybWFscyBh
bmQgYmlub3JtYWxzCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LmNzLmNtdS5lZHUvYWZzL2Fu
ZHJldy9zY3MvY3MvMTUtNDYyL3dlYi9vbGQvYXNzdDJjYW1lcmEuaHRtbAorICAgICAgICAgICAg
Y3VyVGFuZyA9IHRoaXMuX3RhbmdlbnRzW2ldOworICAgICAgICAgICAgcHJldkJpbm9yID0gdGhp
cy5fYmlub3JtYWxzW2kgLSAxXTsKKyAgICAgICAgICAgIHRoaXMuX25vcm1hbHNbaV0gPSBfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKHBy
ZXZCaW5vciwgY3VyVGFuZyk7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3JhdykgeworICAgICAg
ICAgICAgICAgIHRoaXMuX25vcm1hbHNbaV0ubm9ybWFsaXplKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl9iaW5vcm1hbHNbaV0gPSBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKGN1clRhbmcsIHRoaXMuX25vcm1hbHNb
aV0pOworICAgICAgICAgICAgaWYgKCF0aGlzLl9yYXcpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9iaW5vcm1hbHNbaV0ubm9ybWFsaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworICAgIC8vIHByaXZhdGUgZnVuY3Rpb24gZ2V0Rmlyc3ROb25OdWxsVmVjdG9yKGluZGV4
KQorICAgIC8vIHJldHVybnMgdGhlIGZpcnN0IG5vbiBudWxsIHZlY3RvciBmcm9tIGluZGV4IDog
Y3VydmVbaW5kZXggKyBOXS5zdWJ0cmFjdChjdXJ2ZVtpbmRleF0pCisgICAgUGF0aDNELnByb3Rv
dHlwZS5fZ2V0Rmlyc3ROb25OdWxsVmVjdG9yID0gZnVuY3Rpb24gKGluZGV4KSB7CisgICAgICAg
IHZhciBpID0gMTsKKyAgICAgICAgdmFyIG5OVmVjdG9yID0gdGhpcy5fY3VydmVbaW5kZXggKyBp
XS5zdWJ0cmFjdCh0aGlzLl9jdXJ2ZVtpbmRleF0pOworICAgICAgICB3aGlsZSAobk5WZWN0b3Iu
bGVuZ3RoKCkgPT09IDAgJiYgaW5kZXggKyBpICsgMSA8IHRoaXMuX2N1cnZlLmxlbmd0aCkgewor
ICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgbk5WZWN0b3IgPSB0aGlzLl9jdXJ2ZVtpbmRl
eCArIGldLnN1YnRyYWN0KHRoaXMuX2N1cnZlW2luZGV4XSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG5OVmVjdG9yOworICAgIH07CisgICAgLy8gcHJpdmF0ZSBmdW5jdGlvbiBnZXRMYXN0
Tm9uTnVsbFZlY3RvcihpbmRleCkKKyAgICAvLyByZXR1cm5zIHRoZSBsYXN0IG5vbiBudWxsIHZl
Y3RvciBmcm9tIGluZGV4IDogY3VydmVbaW5kZXhdLnN1YnRyYWN0KGN1cnZlW2luZGV4IC0gTl0p
CisgICAgUGF0aDNELnByb3RvdHlwZS5fZ2V0TGFzdE5vbk51bGxWZWN0b3IgPSBmdW5jdGlvbiAo
aW5kZXgpIHsKKyAgICAgICAgdmFyIGkgPSAxOworICAgICAgICB2YXIgbkxWZWN0b3IgPSB0aGlz
Ll9jdXJ2ZVtpbmRleF0uc3VidHJhY3QodGhpcy5fY3VydmVbaW5kZXggLSBpXSk7CisgICAgICAg
IHdoaWxlIChuTFZlY3Rvci5sZW5ndGgoKSA9PT0gMCAmJiBpbmRleCA+IGkgKyAxKSB7CisgICAg
ICAgICAgICBpKys7CisgICAgICAgICAgICBuTFZlY3RvciA9IHRoaXMuX2N1cnZlW2luZGV4XS5z
dWJ0cmFjdCh0aGlzLl9jdXJ2ZVtpbmRleCAtIGldKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbkxWZWN0b3I7CisgICAgfTsKKyAgICAvLyBwcml2YXRlIGZ1bmN0aW9uIG5vcm1hbFZlY3Rv
cih2MCwgdnQsIHZhKSA6CisgICAgLy8gcmV0dXJucyBhbiBhcmJpdHJhcnkgcG9pbnQgaW4gdGhl
IHBsYW5lIGRlZmluZWQgYnkgdGhlIHBvaW50IHYwIGFuZCB0aGUgdmVjdG9yIHZ0IG9ydGhvZ29u
YWwgdG8gdGhpcyBwbGFuZQorICAgIC8vIGlmIHZhIGlzIHBhc3NlZCwgaXQgcmV0dXJucyB0aGUg
dmEgcHJvamVjdGlvbiBvbiB0aGUgcGxhbmUgb3J0aG9nb25hbCB0byB2dCBhdCB0aGUgcG9pbnQg
djAKKyAgICBQYXRoM0QucHJvdG90eXBlLl9ub3JtYWxWZWN0b3IgPSBmdW5jdGlvbiAodnQsIHZh
KSB7CisgICAgICAgIHZhciBub3JtYWwwOworICAgICAgICB2YXIgdGdsID0gdnQubGVuZ3RoKCk7
CisgICAgICAgIGlmICh0Z2wgPT09IDAuMCkgeworICAgICAgICAgICAgdGdsID0gMS4wOworICAg
ICAgICB9CisgICAgICAgIGlmICh2YSA9PT0gdW5kZWZpbmVkIHx8IHZhID09PSBudWxsKSB7Cisg
ICAgICAgICAgICB2YXIgcG9pbnQ7CisgICAgICAgICAgICBpZiAoIV9tYXRoX3NjYWxhcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRoaW5FcHNpbG9uKE1hdGguYWJz
KHZ0LnkpIC8gdGdsLCAxLjAsIF9tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJFcHNpbG9uIl0pKSB7IC8vIHNlYXJjaCBmb3IgYSBwb2ludCBpbiB0aGUgcGxhbmUK
KyAgICAgICAgICAgICAgICBwb2ludCA9IG5ldyBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAuMCwgLTEuMCwgMC4wKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKCFfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siU2NhbGFyIl0uV2l0aGluRXBzaWxvbihNYXRoLmFicyh2dC54KSAvIHRnbCwgMS4w
LCBfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRXBzaWxvbiJd
KSkgeworICAgICAgICAgICAgICAgIHBvaW50ID0gbmV3IF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0oMS4wLCAwLjAsIDAuMCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmICghX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlNjYWxhciJdLldpdGhpbkVwc2lsb24oTWF0aC5hYnModnQueikgLyB0Z2ws
IDEuMCwgX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkVwc2ls
b24iXSkpIHsKKyAgICAgICAgICAgICAgICBwb2ludCA9IG5ldyBfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAuMCwgMC4wLCAxLjApOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcG9pbnQgPSBfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vcm1hbDAgPSBfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKHZ0LCBwb2ludCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBub3JtYWwwID0gX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Dcm9zcyh2dCwgdmEpOwor
ICAgICAgICAgICAgX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZl
Y3RvcjMiXS5Dcm9zc1RvUmVmKG5vcm1hbDAsIHZ0LCBub3JtYWwwKTsKKyAgICAgICAgfQorICAg
ICAgICBub3JtYWwwLm5vcm1hbGl6ZSgpOworICAgICAgICByZXR1cm4gbm9ybWFsMDsKKyAgICB9
OworICAgIHJldHVybiBQYXRoM0Q7Cit9KCkpOworCisvKioKKyAqIEEgQ3VydmUzIG9iamVjdCBp
cyBhIGxvZ2ljYWwgb2JqZWN0LCBzbyBub3QgYSBtZXNoLCB0byBoYW5kbGUgY3VydmVzIGluIHRo
ZSAzRCBnZW9tZXRyaWMgc3BhY2UuCisgKiBBIEN1cnZlMyBpcyBkZXNpZ25lZCBmcm9tIGEgc2Vy
aWVzIG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMy4KKyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9jdXJ2ZTMKKyAqLwordmFyIEN1cnZlMyA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBBIEN1cnZlMyBvYmplY3QgaXMg
YSBsb2dpY2FsIG9iamVjdCwgc28gbm90IGEgbWVzaCwgdG8gaGFuZGxlIGN1cnZlcyBpbiB0aGUg
M0QgZ2VvbWV0cmljIHNwYWNlLgorICAgICAqIEEgQ3VydmUzIGlzIGRlc2lnbmVkIGZyb20gYSBz
ZXJpZXMgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzLgorICAgICAqIFR1dG8gOiBodHRwczovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2N1cnZlMyNjdXJ2ZTMtb2JqZWN0CisgICAg
ICogQHBhcmFtIHBvaW50cyBwb2ludHMgd2hpY2ggbWFrZSB1cCB0aGUgY3VydmUKKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBDdXJ2ZTMocG9pbnRzKSB7CisgICAgICAgIHRoaXMuX2xlbmd0aCA9IDAu
MDsKKyAgICAgICAgdGhpcy5fcG9pbnRzID0gcG9pbnRzOworICAgICAgICB0aGlzLl9sZW5ndGgg
PSB0aGlzLl9jb21wdXRlTGVuZ3RoKHBvaW50cyk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJl
dHVybnMgYSBDdXJ2ZTMgb2JqZWN0IGFsb25nIGEgUXVhZHJhdGljIEJlemllciBjdXJ2ZSA6IGh0
dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfY3VydmUzI3F1YWRyYXRp
Yy1iZXppZXItY3VydmUKKyAgICAgKiBAcGFyYW0gdjAgKFZlY3RvcjMpIHRoZSBvcmlnaW4gcG9p
bnQgb2YgdGhlIFF1YWRyYXRpYyBCZXppZXIKKyAgICAgKiBAcGFyYW0gdjEgKFZlY3RvcjMpIHRo
ZSBjb250cm9sIHBvaW50CisgICAgICogQHBhcmFtIHYyIChWZWN0b3IzKSB0aGUgZW5kIHBvaW50
IG9mIHRoZSBRdWFkcmF0aWMgQmV6aWVyCisgICAgICogQHBhcmFtIG5iUG9pbnRzIChpbnRlZ2Vy
KSB0aGUgd2FudGVkIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGN1cnZlCisgICAgICogQHJldHVy
bnMgdGhlIGNyZWF0ZWQgQ3VydmUzCisgICAgICovCisgICAgQ3VydmUzLkNyZWF0ZVF1YWRyYXRp
Y0JlemllciA9IGZ1bmN0aW9uICh2MCwgdjEsIHYyLCBuYlBvaW50cykgeworICAgICAgICBuYlBv
aW50cyA9IG5iUG9pbnRzID4gMiA/IG5iUG9pbnRzIDogMzsKKyAgICAgICAgdmFyIGJleiA9IG5l
dyBBcnJheSgpOworICAgICAgICB2YXIgZXF1YXRpb24gPSBmdW5jdGlvbiAodCwgdmFsMCwgdmFs
MSwgdmFsMikgeworICAgICAgICAgICAgdmFyIHJlcyA9ICgxLjAgLSB0KSAqICgxLjAgLSB0KSAq
IHZhbDAgKyAyLjAgKiB0ICogKDEuMCAtIHQpICogdmFsMSArIHQgKiB0ICogdmFsMjsKKyAgICAg
ICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH07CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDw9IG5iUG9pbnRzOyBpKyspIHsKKyAgICAgICAgICAgIGJlei5wdXNoKG5ldyBfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKGVxdWF0aW9uKGkgLyBu
YlBvaW50cywgdjAueCwgdjEueCwgdjIueCksIGVxdWF0aW9uKGkgLyBuYlBvaW50cywgdjAueSwg
djEueSwgdjIueSksIGVxdWF0aW9uKGkgLyBuYlBvaW50cywgdjAueiwgdjEueiwgdjIueikpKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IEN1cnZlMyhiZXopOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyBhIEN1cnZlMyBvYmplY3QgYWxvbmcgYSBDdWJpYyBCZXppZXIg
Y3VydmUgOiBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2N1cnZl
MyNjdWJpYy1iZXppZXItY3VydmUKKyAgICAgKiBAcGFyYW0gdjAgKFZlY3RvcjMpIHRoZSBvcmln
aW4gcG9pbnQgb2YgdGhlIEN1YmljIEJlemllcgorICAgICAqIEBwYXJhbSB2MSAoVmVjdG9yMykg
dGhlIGZpcnN0IGNvbnRyb2wgcG9pbnQKKyAgICAgKiBAcGFyYW0gdjIgKFZlY3RvcjMpIHRoZSBz
ZWNvbmQgY29udHJvbCBwb2ludAorICAgICAqIEBwYXJhbSB2MyAoVmVjdG9yMykgdGhlIGVuZCBw
b2ludCBvZiB0aGUgQ3ViaWMgQmV6aWVyCisgICAgICogQHBhcmFtIG5iUG9pbnRzIChpbnRlZ2Vy
KSB0aGUgd2FudGVkIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGN1cnZlCisgICAgICogQHJldHVy
bnMgdGhlIGNyZWF0ZWQgQ3VydmUzCisgICAgICovCisgICAgQ3VydmUzLkNyZWF0ZUN1YmljQmV6
aWVyID0gZnVuY3Rpb24gKHYwLCB2MSwgdjIsIHYzLCBuYlBvaW50cykgeworICAgICAgICBuYlBv
aW50cyA9IG5iUG9pbnRzID4gMyA/IG5iUG9pbnRzIDogNDsKKyAgICAgICAgdmFyIGJleiA9IG5l
dyBBcnJheSgpOworICAgICAgICB2YXIgZXF1YXRpb24gPSBmdW5jdGlvbiAodCwgdmFsMCwgdmFs
MSwgdmFsMiwgdmFsMykgeworICAgICAgICAgICAgdmFyIHJlcyA9ICgxLjAgLSB0KSAqICgxLjAg
LSB0KSAqICgxLjAgLSB0KSAqIHZhbDAgKyAzLjAgKiB0ICogKDEuMCAtIHQpICogKDEuMCAtIHQp
ICogdmFsMSArIDMuMCAqIHQgKiB0ICogKDEuMCAtIHQpICogdmFsMiArIHQgKiB0ICogdCAqIHZh
bDM7CisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9OworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8PSBuYlBvaW50czsgaSsrKSB7CisgICAgICAgICAgICBiZXoucHVzaChuZXcg
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXShlcXVh
dGlvbihpIC8gbmJQb2ludHMsIHYwLngsIHYxLngsIHYyLngsIHYzLngpLCBlcXVhdGlvbihpIC8g
bmJQb2ludHMsIHYwLnksIHYxLnksIHYyLnksIHYzLnkpLCBlcXVhdGlvbihpIC8gbmJQb2ludHMs
IHYwLnosIHYxLnosIHYyLnosIHYzLnopKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5l
dyBDdXJ2ZTMoYmV6KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBDdXJ2ZTMg
b2JqZWN0IGFsb25nIGEgSGVybWl0ZSBTcGxpbmUgY3VydmUgOiBodHRwczovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9ob3dfdG9fdXNlX2N1cnZlMyNoZXJtaXRlLXNwbGluZQorICAgICAqIEBw
YXJhbSBwMSAoVmVjdG9yMykgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgSGVybWl0ZSBTcGxpbmUK
KyAgICAgKiBAcGFyYW0gdDEgKFZlY3RvcjMpIHRoZSB0YW5nZW50IHZlY3RvciBhdCB0aGUgb3Jp
Z2luIHBvaW50CisgICAgICogQHBhcmFtIHAyIChWZWN0b3IzKSB0aGUgZW5kIHBvaW50IG9mIHRo
ZSBIZXJtaXRlIFNwbGluZQorICAgICAqIEBwYXJhbSB0MiAoVmVjdG9yMykgdGhlIHRhbmdlbnQg
dmVjdG9yIGF0IHRoZSBlbmQgcG9pbnQKKyAgICAgKiBAcGFyYW0gbmJQb2ludHMgKGludGVnZXIp
IHRoZSB3YW50ZWQgbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgY3VydmUKKyAgICAgKiBAcmV0dXJu
cyB0aGUgY3JlYXRlZCBDdXJ2ZTMKKyAgICAgKi8KKyAgICBDdXJ2ZTMuQ3JlYXRlSGVybWl0ZVNw
bGluZSA9IGZ1bmN0aW9uIChwMSwgdDEsIHAyLCB0MiwgbmJQb2ludHMpIHsKKyAgICAgICAgdmFy
IGhlcm1pdGUgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdmFyIHN0ZXAgPSAxLjAgLyBuYlBvaW50
czsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbmJQb2ludHM7IGkrKykgeworICAgICAg
ICAgICAgaGVybWl0ZS5wdXNoKF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJWZWN0b3IzIl0uSGVybWl0ZShwMSwgdDEsIHAyLCB0MiwgaSAqIHN0ZXApKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbmV3IEN1cnZlMyhoZXJtaXRlKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFJldHVybnMgYSBDdXJ2ZTMgb2JqZWN0IGFsb25nIGEgQ2F0bXVsbFJvbSBTcGxp
bmUgY3VydmUgOgorICAgICAqIEBwYXJhbSBwb2ludHMgKGFycmF5IG9mIFZlY3RvcjMpIHRoZSBw
b2ludHMgdGhlIHNwbGluZSBtdXN0IHBhc3MgdGhyb3VnaC4gQXQgbGVhc3QsIGZvdXIgcG9pbnRz
IHJlcXVpcmVkCisgICAgICogQHBhcmFtIG5iUG9pbnRzIChpbnRlZ2VyKSB0aGUgd2FudGVkIG51
bWJlciBvZiBwb2ludHMgYmV0d2VlbiBlYWNoIGN1cnZlIGNvbnRyb2wgcG9pbnRzCisgICAgICog
QHBhcmFtIGNsb3NlZCAoYm9vbGVhbikgb3B0aW9uYWwgd2l0aCBkZWZhdWx0IGZhbHNlLCB3aGVu
IHRydWUgZm9ybXMgYSBjbG9zZWQgbG9vcCBmcm9tIHRoZSBwb2ludHMKKyAgICAgKiBAcmV0dXJu
cyB0aGUgY3JlYXRlZCBDdXJ2ZTMKKyAgICAgKi8KKyAgICBDdXJ2ZTMuQ3JlYXRlQ2F0bXVsbFJv
bVNwbGluZSA9IGZ1bmN0aW9uIChwb2ludHMsIG5iUG9pbnRzLCBjbG9zZWQpIHsKKyAgICAgICAg
dmFyIGNhdG11bGxSb20gPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdmFyIHN0ZXAgPSAxLjAgLyBu
YlBvaW50czsKKyAgICAgICAgdmFyIGFtb3VudCA9IDAuMDsKKyAgICAgICAgaWYgKGNsb3NlZCkg
eworICAgICAgICAgICAgdmFyIHBvaW50c0NvdW50ID0gcG9pbnRzLmxlbmd0aDsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzQ291bnQ7IGkrKykgeworICAgICAgICAgICAg
ICAgIGFtb3VudCA9IDA7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBuYlBv
aW50czsgYysrKSB7CisgICAgICAgICAgICAgICAgICAgIGNhdG11bGxSb20ucHVzaChfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNhdG11bGxSb20o
cG9pbnRzW2kgJSBwb2ludHNDb3VudF0sIHBvaW50c1soaSArIDEpICUgcG9pbnRzQ291bnRdLCBw
b2ludHNbKGkgKyAyKSAlIHBvaW50c0NvdW50XSwgcG9pbnRzWyhpICsgMykgJSBwb2ludHNDb3Vu
dF0sIGFtb3VudCkpOworICAgICAgICAgICAgICAgICAgICBhbW91bnQgKz0gc3RlcDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRtdWxsUm9tLnB1c2go
Y2F0bXVsbFJvbVswXSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2
YXIgdG90YWxQb2ludHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAgIHRvdGFsUG9pbnRzLnB1
c2gocG9pbnRzWzBdLmNsb25lKCkpOworICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2gu
YXBwbHkodG90YWxQb2ludHMsIHBvaW50cyk7CisgICAgICAgICAgICB0b3RhbFBvaW50cy5wdXNo
KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0uY2xvbmUoKSk7CisgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRvdGFsUG9pbnRzLmxlbmd0aCAtIDM7IGkrKykgeworICAgICAgICAgICAg
ICAgIGFtb3VudCA9IDA7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBuYlBv
aW50czsgYysrKSB7CisgICAgICAgICAgICAgICAgICAgIGNhdG11bGxSb20ucHVzaChfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNhdG11bGxSb20o
dG90YWxQb2ludHNbaV0sIHRvdGFsUG9pbnRzW2kgKyAxXSwgdG90YWxQb2ludHNbaSArIDJdLCB0
b3RhbFBvaW50c1tpICsgM10sIGFtb3VudCkpOworICAgICAgICAgICAgICAgICAgICBhbW91bnQg
Kz0gc3RlcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
LS07CisgICAgICAgICAgICBjYXRtdWxsUm9tLnB1c2goX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5DYXRtdWxsUm9tKHRvdGFsUG9pbnRzW2ldLCB0
b3RhbFBvaW50c1tpICsgMV0sIHRvdGFsUG9pbnRzW2kgKyAyXSwgdG90YWxQb2ludHNbaSArIDNd
LCBhbW91bnQpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IEN1cnZlMyhjYXRtdWxs
Um9tKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEByZXR1cm5zIHRoZSBDdXJ2ZTMgc3RvcmVk
IGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMworICAgICAqLworICAgIEN1cnZlMy5wcm90b3R5
cGUuZ2V0UG9pbnRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fcG9pbnRz
OworICAgIH07CisgICAgLyoqCisgICAgICogQHJldHVybnMgdGhlIGNvbXB1dGVkIGxlbmd0aCAo
ZmxvYXQpIG9mIHRoZSBjdXJ2ZS4KKyAgICAgKi8KKyAgICBDdXJ2ZTMucHJvdG90eXBlLmxlbmd0
aCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgQ3VydmUzIG9iamVjdCA6
IHZhciBjdXJ2ZSA9IGN1cnZlQS5jb250aW51ZShjdXJ2ZUIpOworICAgICAqIFRoaXMgbmV3IEN1
cnZlMyBpcyBidWlsdCBieSB0cmFuc2xhdGluZyBhbmQgc3RpY2tpbmcgdGhlIGN1cnZlQiBhdCB0
aGUgZW5kIG9mIHRoZSBjdXJ2ZUEuCisgICAgICogY3VydmVBIGFuZCBjdXJ2ZUIga2VlcCB1bmNo
YW5nZWQuCisgICAgICogQHBhcmFtIGN1cnZlIHRoZSBjdXJ2ZSB0byBjb250aW51ZSBmcm9tIHRo
aXMgY3VydmUKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3bHkgY29uc3RydWN0ZWQgY3VydmUKKyAg
ICAgKi8KKyAgICBDdXJ2ZTMucHJvdG90eXBlLmNvbnRpbnVlID0gZnVuY3Rpb24gKGN1cnZlKSB7
CisgICAgICAgIHZhciBsYXN0UG9pbnQgPSB0aGlzLl9wb2ludHNbdGhpcy5fcG9pbnRzLmxlbmd0
aCAtIDFdOworICAgICAgICB2YXIgY29udGludWVkUG9pbnRzID0gdGhpcy5fcG9pbnRzLnNsaWNl
KCk7CisgICAgICAgIHZhciBjdXJ2ZVBvaW50cyA9IGN1cnZlLmdldFBvaW50cygpOworICAgICAg
ICBmb3IgKHZhciBpID0gMTsgaSA8IGN1cnZlUG9pbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICBjb250aW51ZWRQb2ludHMucHVzaChjdXJ2ZVBvaW50c1tpXS5zdWJ0cmFjdChjdXJ2ZVBv
aW50c1swXSkuYWRkKGxhc3RQb2ludCkpOworICAgICAgICB9CisgICAgICAgIHZhciBjb250aW51
ZWRDdXJ2ZSA9IG5ldyBDdXJ2ZTMoY29udGludWVkUG9pbnRzKTsKKyAgICAgICAgcmV0dXJuIGNv
bnRpbnVlZEN1cnZlOworICAgIH07CisgICAgQ3VydmUzLnByb3RvdHlwZS5fY29tcHV0ZUxlbmd0
aCA9IGZ1bmN0aW9uIChwYXRoKSB7CisgICAgICAgIHZhciBsID0gMDsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDE7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBsICs9IChwYXRo
W2ldLnN1YnRyYWN0KHBhdGhbaSAtIDFdKSkubGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGw7CisgICAgfTsKKyAgICByZXR1cm4gQ3VydmUzOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NYXRocy9tYXRoLnBsYW5lLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRocy9tYXRoLnBsYW5lLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBs
YW5lICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBsYW5lIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBQbGFuZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisKKy8qKgor
ICogUmVwcmVzZW5zIGEgcGxhbmUgYnkgdGhlIGVxdWF0aW9uIGF4ICsgYnkgKyBjeiArIGQgPSAw
CisgKi8KK3ZhciBQbGFuZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgUGxhbmUgb2JqZWN0IGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZmxv
YXRzIGEsIGIsIGMsIGQgYW5kIHRoZSBwbGFuZSBlcXVhdGlvbiA6IGF4ICsgYnkgKyBjeiArIGQg
PSAwCisgICAgICogQHBhcmFtIGEgYSBjb21wb25lbnQgb2YgdGhlIHBsYW5lCisgICAgICogQHBh
cmFtIGIgYiBjb21wb25lbnQgb2YgdGhlIHBsYW5lCisgICAgICogQHBhcmFtIGMgYyBjb21wb25l
bnQgb2YgdGhlIHBsYW5lCisgICAgICogQHBhcmFtIGQgZCBjb21wb25lbnQgb2YgdGhlIHBsYW5l
CisgICAgICovCisgICAgZnVuY3Rpb24gUGxhbmUoYSwgYiwgYywgZCkgeworICAgICAgICB0aGlz
Lm5vcm1hbCA9IG5ldyBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdKGEsIGIsIGMpOworICAgICAgICB0aGlzLmQgPSBkOworICAgIH0KKyAgICAvKioK
KyAgICAgKiBAcmV0dXJucyB0aGUgcGxhbmUgY29vcmRpbmF0ZXMgYXMgYSBuZXcgYXJyYXkgb2Yg
NCBlbGVtZW50cyBbYSwgYiwgYywgZF0uCisgICAgICovCisgICAgUGxhbmUucHJvdG90eXBlLmFz
QXJyYXkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBbdGhpcy5ub3JtYWwueCwgdGhp
cy5ub3JtYWwueSwgdGhpcy5ub3JtYWwueiwgdGhpcy5kXTsKKyAgICB9OworICAgIC8vIE1ldGhv
ZHMKKyAgICAvKioKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBwbGFuZSBjb3BpZWQgZnJvbSB0aGUg
Y3VycmVudCBQbGFuZS4KKyAgICAgKi8KKyAgICBQbGFuZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGxhbmUodGhpcy5ub3JtYWwueCwgdGhpcy5u
b3JtYWwueSwgdGhpcy5ub3JtYWwueiwgdGhpcy5kKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEByZXR1cm5zIHRoZSBzdHJpbmcgIlBsYW5lIi4KKyAgICAgKi8KKyAgICBQbGFuZS5wcm90b3R5
cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlBsYW5lIjsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEByZXR1cm5zIHRoZSBQbGFuZSBoYXNoIGNvZGUuCisg
ICAgICovCisgICAgUGxhbmUucHJvdG90eXBlLmdldEhhc2hDb2RlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgaGFzaCA9IHRoaXMubm9ybWFsLmdldEhhc2hDb2RlKCk7CisgICAgICAgIGhh
c2ggPSAoaGFzaCAqIDM5NykgXiAodGhpcy5kIHwgMCk7CisgICAgICAgIHJldHVybiBoYXNoOwor
ICAgIH07CisgICAgLyoqCisgICAgICogTm9ybWFsaXplIHRoZSBjdXJyZW50IFBsYW5lIGluIHBs
YWNlLgorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIFBsYW5lLgorICAgICAqLworICAgIFBs
YW5lLnByb3RvdHlwZS5ub3JtYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBub3Jt
ID0gKE1hdGguc3FydCgodGhpcy5ub3JtYWwueCAqIHRoaXMubm9ybWFsLngpICsgKHRoaXMubm9y
bWFsLnkgKiB0aGlzLm5vcm1hbC55KSArICh0aGlzLm5vcm1hbC56ICogdGhpcy5ub3JtYWwueikp
KTsKKyAgICAgICAgdmFyIG1hZ25pdHVkZSA9IDAuMDsKKyAgICAgICAgaWYgKG5vcm0gIT09IDAp
IHsKKyAgICAgICAgICAgIG1hZ25pdHVkZSA9IDEuMCAvIG5vcm07CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5ub3JtYWwueCAqPSBtYWduaXR1ZGU7CisgICAgICAgIHRoaXMubm9ybWFsLnkgKj0g
bWFnbml0dWRlOworICAgICAgICB0aGlzLm5vcm1hbC56ICo9IG1hZ25pdHVkZTsKKyAgICAgICAg
dGhpcy5kICo9IG1hZ25pdHVkZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBcHBsaWVzIGEgdHJhbnNmb3JtYXRpb24gdGhlIHBsYW5lIGFuZCByZXR1cm5z
IHRoZSByZXN1bHQKKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtYXRpb24gdGhlIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCB0byBiZSBhcHBsaWVkIHRvIHRoZSBwbGFuZQorICAgICAqIEByZXR1cm5zIGEg
bmV3IFBsYW5lIGFzIHRoZSByZXN1bHQgb2YgdGhlIHRyYW5zZm9ybWF0aW9uIG9mIHRoZSBjdXJy
ZW50IFBsYW5lIGJ5IHRoZSBnaXZlbiBtYXRyaXguCisgICAgICovCisgICAgUGxhbmUucHJvdG90
eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uICh0cmFuc2Zvcm1hdGlvbikgeworICAgICAgICB2YXIg
dHJhbnNwb3NlZE1hdHJpeCA9IFBsYW5lLl9UbXBNYXRyaXg7CisgICAgICAgIF9tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5UcmFuc3Bvc2VUb1JlZih0
cmFuc2Zvcm1hdGlvbiwgdHJhbnNwb3NlZE1hdHJpeCk7CisgICAgICAgIHZhciBtID0gdHJhbnNw
b3NlZE1hdHJpeC5tOworICAgICAgICB2YXIgeCA9IHRoaXMubm9ybWFsLng7CisgICAgICAgIHZh
ciB5ID0gdGhpcy5ub3JtYWwueTsKKyAgICAgICAgdmFyIHogPSB0aGlzLm5vcm1hbC56OworICAg
ICAgICB2YXIgZCA9IHRoaXMuZDsKKyAgICAgICAgdmFyIG5vcm1hbFggPSB4ICogbVswXSArIHkg
KiBtWzFdICsgeiAqIG1bMl0gKyBkICogbVszXTsKKyAgICAgICAgdmFyIG5vcm1hbFkgPSB4ICog
bVs0XSArIHkgKiBtWzVdICsgeiAqIG1bNl0gKyBkICogbVs3XTsKKyAgICAgICAgdmFyIG5vcm1h
bFogPSB4ICogbVs4XSArIHkgKiBtWzldICsgeiAqIG1bMTBdICsgZCAqIG1bMTFdOworICAgICAg
ICB2YXIgZmluYWxEID0geCAqIG1bMTJdICsgeSAqIG1bMTNdICsgeiAqIG1bMTRdICsgZCAqIG1b
MTVdOworICAgICAgICByZXR1cm4gbmV3IFBsYW5lKG5vcm1hbFgsIG5vcm1hbFksIG5vcm1hbFos
IGZpbmFsRCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxjdWFsdHRlIHRoZSBkb3QgcHJv
ZHVjdCBiZXR3ZWVuIHRoZSBwb2ludCBhbmQgdGhlIHBsYW5lIG5vcm1hbAorICAgICAqIEBwYXJh
bSBwb2ludCBwb2ludCB0byBjYWxjdWxhdGUgdGhlIGRvdCBwcm9kdWN0IHdpdGgKKyAgICAgKiBA
cmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBvZiB0aGUgcG9pbnQgY29vcmRpbmF0ZXMg
YW5kIHRoZSBwbGFuZSBub3JtYWwuCisgICAgICovCisgICAgUGxhbmUucHJvdG90eXBlLmRvdENv
b3JkaW5hdGUgPSBmdW5jdGlvbiAocG9pbnQpIHsKKyAgICAgICAgcmV0dXJuICgoKCh0aGlzLm5v
cm1hbC54ICogcG9pbnQueCkgKyAodGhpcy5ub3JtYWwueSAqIHBvaW50LnkpKSArICh0aGlzLm5v
cm1hbC56ICogcG9pbnQueikpICsgdGhpcy5kKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVw
ZGF0ZXMgdGhlIGN1cnJlbnQgUGxhbmUgZnJvbSB0aGUgcGxhbmUgZGVmaW5lZCBieSB0aGUgdGhy
ZWUgZ2l2ZW4gcG9pbnRzLgorICAgICAqIEBwYXJhbSBwb2ludDEgb25lIG9mIHRoZSBwb2ludHMg
dXNlZCB0byBjb250cnVjdCB0aGUgcGxhbmUKKyAgICAgKiBAcGFyYW0gcG9pbnQyIG9uZSBvZiB0
aGUgcG9pbnRzIHVzZWQgdG8gY29udHJ1Y3QgdGhlIHBsYW5lCisgICAgICogQHBhcmFtIHBvaW50
MyBvbmUgb2YgdGhlIHBvaW50cyB1c2VkIHRvIGNvbnRydWN0IHRoZSBwbGFuZQorICAgICAqIEBy
ZXR1cm5zIHRoZSB1cGRhdGVkIFBsYW5lLgorICAgICAqLworICAgIFBsYW5lLnByb3RvdHlwZS5j
b3B5RnJvbVBvaW50cyA9IGZ1bmN0aW9uIChwb2ludDEsIHBvaW50MiwgcG9pbnQzKSB7CisgICAg
ICAgIHZhciB4MSA9IHBvaW50Mi54IC0gcG9pbnQxLng7CisgICAgICAgIHZhciB5MSA9IHBvaW50
Mi55IC0gcG9pbnQxLnk7CisgICAgICAgIHZhciB6MSA9IHBvaW50Mi56IC0gcG9pbnQxLno7Cisg
ICAgICAgIHZhciB4MiA9IHBvaW50My54IC0gcG9pbnQxLng7CisgICAgICAgIHZhciB5MiA9IHBv
aW50My55IC0gcG9pbnQxLnk7CisgICAgICAgIHZhciB6MiA9IHBvaW50My56IC0gcG9pbnQxLno7
CisgICAgICAgIHZhciB5eiA9ICh5MSAqIHoyKSAtICh6MSAqIHkyKTsKKyAgICAgICAgdmFyIHh6
ID0gKHoxICogeDIpIC0gKHgxICogejIpOworICAgICAgICB2YXIgeHkgPSAoeDEgKiB5MikgLSAo
eTEgKiB4Mik7CisgICAgICAgIHZhciBweXRoID0gKE1hdGguc3FydCgoeXogKiB5eikgKyAoeHog
KiB4eikgKyAoeHkgKiB4eSkpKTsKKyAgICAgICAgdmFyIGludlB5dGg7CisgICAgICAgIGlmIChw
eXRoICE9PSAwKSB7CisgICAgICAgICAgICBpbnZQeXRoID0gMS4wIC8gcHl0aDsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludlB5dGggPSAwLjA7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5ub3JtYWwueCA9IHl6ICogaW52UHl0aDsKKyAgICAgICAgdGhpcy5ub3Jt
YWwueSA9IHh6ICogaW52UHl0aDsKKyAgICAgICAgdGhpcy5ub3JtYWwueiA9IHh5ICogaW52UHl0
aDsKKyAgICAgICAgdGhpcy5kID0gLSgodGhpcy5ub3JtYWwueCAqIHBvaW50MS54KSArICh0aGlz
Lm5vcm1hbC55ICogcG9pbnQxLnkpICsgKHRoaXMubm9ybWFsLnogKiBwb2ludDEueikpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiB0aGUg
cGxhbmUgaXMgZmFjaW5nIGEgZ2l2ZW4gZGlyZWN0aW9uCisgICAgICogQHBhcmFtIGRpcmVjdGlv
biB0aGUgZGlyZWN0aW9uIHRvIGNoZWNrIGlmIHRoZSBwbGFuZSBpcyBmYWNpbmcKKyAgICAgKiBA
cGFyYW0gZXBzaWxvbiB2YWx1ZSB0aGUgZG90IHByb2R1Y3QgaXMgY29tcGFyZWQgYWdhaW5zdCAo
cmV0dXJucyB0cnVlIGlmIGRvdCA8PSBlcHNpbG9uKQorICAgICAqIEByZXR1cm5zIFRydWUgaXMg
dGhlIHZlY3RvciAiZGlyZWN0aW9uIiAgaXMgdGhlIHNhbWUgc2lkZSB0aGFuIHRoZSBwbGFuZSBu
b3JtYWwuCisgICAgICovCisgICAgUGxhbmUucHJvdG90eXBlLmlzRnJvbnRGYWNpbmdUbyA9IGZ1
bmN0aW9uIChkaXJlY3Rpb24sIGVwc2lsb24pIHsKKyAgICAgICAgdmFyIGRvdCA9IF9tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KHRoaXMubm9y
bWFsLCBkaXJlY3Rpb24pOworICAgICAgICByZXR1cm4gKGRvdCA8PSBlcHNpbG9uKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENhbGN1bGF0ZXMgdGhlIGRpc3RhbmNlIHRvIGEgcG9pbnQKKyAg
ICAgKiBAcGFyYW0gcG9pbnQgcG9pbnQgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIHRvCisgICAgICog
QHJldHVybnMgdGhlIHNpZ25lZCBkaXN0YW5jZSAoZmxvYXQpIGZyb20gdGhlIGdpdmVuIHBvaW50
IHRvIHRoZSBQbGFuZS4KKyAgICAgKi8KKyAgICBQbGFuZS5wcm90b3R5cGUuc2lnbmVkRGlzdGFu
Y2VUbyA9IGZ1bmN0aW9uIChwb2ludCkgeworICAgICAgICByZXR1cm4gX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Eb3QocG9pbnQsIHRoaXMubm9y
bWFsKSArIHRoaXMuZDsKKyAgICB9OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgcGxhbmUgZnJvbSBhbiAgYXJyYXkKKyAgICAgKiBAcGFyYW0gYXJyYXkgdGhlIGFy
cmF5IHRvIGNyZWF0ZSBhIHBsYW5lIGZyb20KKyAgICAgKiBAcmV0dXJucyBhIG5ldyBQbGFuZSBm
cm9tIHRoZSBnaXZlbiBhcnJheS4KKyAgICAgKi8KKyAgICBQbGFuZS5Gcm9tQXJyYXkgPSBmdW5j
dGlvbiAoYXJyYXkpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQbGFuZShhcnJheVswXSwgYXJyYXlb
MV0sIGFycmF5WzJdLCBhcnJheVszXSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgcGxhbmUgZnJvbSB0aHJlZSBwb2ludHMKKyAgICAgKiBAcGFyYW0gcG9pbnQxIHBvaW50IHVz
ZWQgdG8gY3JlYXRlIHRoZSBwbGFuZQorICAgICAqIEBwYXJhbSBwb2ludDIgcG9pbnQgdXNlZCB0
byBjcmVhdGUgdGhlIHBsYW5lCisgICAgICogQHBhcmFtIHBvaW50MyBwb2ludCB1c2VkIHRvIGNy
ZWF0ZSB0aGUgcGxhbmUKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBQbGFuZSBkZWZpbmVkIGJ5IHRo
ZSB0aHJlZSBnaXZlbiBwb2ludHMuCisgICAgICovCisgICAgUGxhbmUuRnJvbVBvaW50cyA9IGZ1
bmN0aW9uIChwb2ludDEsIHBvaW50MiwgcG9pbnQzKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBu
ZXcgUGxhbmUoMC4wLCAwLjAsIDAuMCwgMC4wKTsKKyAgICAgICAgcmVzdWx0LmNvcHlGcm9tUG9p
bnRzKHBvaW50MSwgcG9pbnQyLCBwb2ludDMpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHBsYW5lIGZyb20gYW4gb3JpZ2luIHBvaW50
IGFuZCBhIG5vcm1hbAorICAgICAqIEBwYXJhbSBvcmlnaW4gb3JpZ2luIG9mIHRoZSBwbGFuZSB0
byBiZSBjb25zdHJ1Y3RlZAorICAgICAqIEBwYXJhbSBub3JtYWwgbm9ybWFsIG9mIHRoZSBwbGFu
ZSB0byBiZSBjb25zdHJ1Y3RlZAorICAgICAqIEByZXR1cm5zIGEgbmV3IFBsYW5lIHRoZSBub3Jt
YWwgdmVjdG9yIHRvIHRoaXMgcGxhbmUgYXQgdGhlIGdpdmVuIG9yaWdpbiBwb2ludC4KKyAgICAg
KiBOb3RlIDogdGhlIHZlY3RvciAibm9ybWFsIiBpcyB1cGRhdGVkIGJlY2F1c2Ugbm9ybWFsaXpl
ZC4KKyAgICAgKi8KKyAgICBQbGFuZS5Gcm9tUG9zaXRpb25BbmROb3JtYWwgPSBmdW5jdGlvbiAo
b3JpZ2luLCBub3JtYWwpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBQbGFuZSgwLjAsIDAu
MCwgMC4wLCAwLjApOworICAgICAgICBub3JtYWwubm9ybWFsaXplKCk7CisgICAgICAgIHJlc3Vs
dC5ub3JtYWwgPSBub3JtYWw7CisgICAgICAgIHJlc3VsdC5kID0gLShub3JtYWwueCAqIG9yaWdp
bi54ICsgbm9ybWFsLnkgKiBvcmlnaW4ueSArIG5vcm1hbC56ICogb3JpZ2luLnopOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ2FsY3VsYXRlcyB0aGUg
ZGlzdGFuY2UgZnJvbSBhIHBsYW5lIGFuZCBhIHBvaW50CisgICAgICogQHBhcmFtIG9yaWdpbiBv
cmlnaW4gb2YgdGhlIHBsYW5lIHRvIGJlIGNvbnN0cnVjdGVkCisgICAgICogQHBhcmFtIG5vcm1h
bCBub3JtYWwgb2YgdGhlIHBsYW5lIHRvIGJlIGNvbnN0cnVjdGVkCisgICAgICogQHBhcmFtIHBv
aW50IHBvaW50IHRvIGNhbGN1bGF0ZSBkaXN0YW5jZSB0bworICAgICAqIEByZXR1cm5zIHRoZSBz
aWduZWQgZGlzdGFuY2UgYmV0d2VlbiB0aGUgcGxhbmUgZGVmaW5lZCBieSB0aGUgbm9ybWFsIHZl
Y3RvciBhdCB0aGUgIm9yaWdpbiIiIHBvaW50IGFuZCB0aGUgZ2l2ZW4gb3RoZXIgcG9pbnQuCisg
ICAgICovCisgICAgUGxhbmUuU2lnbmVkRGlzdGFuY2VUb1BsYW5lRnJvbVBvc2l0aW9uQW5kTm9y
bWFsID0gZnVuY3Rpb24gKG9yaWdpbiwgbm9ybWFsLCBwb2ludCkgeworICAgICAgICB2YXIgZCA9
IC0obm9ybWFsLnggKiBvcmlnaW4ueCArIG5vcm1hbC55ICogb3JpZ2luLnkgKyBub3JtYWwueiAq
IG9yaWdpbi56KTsKKyAgICAgICAgcmV0dXJuIF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KHBvaW50LCBub3JtYWwpICsgZDsKKyAgICB9Owor
ICAgIFBsYW5lLl9UbXBNYXRyaXggPSBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICByZXR1cm4gUGxhbmU7Cit9KCkpOwor
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGhzL21hdGguc2NhbGFyLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0aHMvbWF0aC5zY2Fs
YXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFNjYWxhciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTY2FsYXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNjYWxhcjsgfSk7CisvKioKKyAqIFNjYWxh
ciBjb21wdXRhdGlvbiBsaWJyYXJ5CisgKi8KK3ZhciBTY2FsYXIgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gU2NhbGFyKCkgeworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBCb29sZWFuIDogdHJ1ZSBpZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEg
YW5kIGIgaXMgbG93ZXIgdGhhbiBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KQorICAg
ICAqIEBwYXJhbSBhIG51bWJlcgorICAgICAqIEBwYXJhbSBiIG51bWJlcgorICAgICAqIEBwYXJh
bSBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KQorICAgICAqIEByZXR1cm5zIHRydWUg
aWYgdGhlIGFic29sdXRlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGFuZCBiIGlzIGxvd2VyIHRoYW4g
ZXBzaWxvbiAoZGVmYXVsdCA9IDEuNDAxMjk4RS00NSkKKyAgICAgKi8KKyAgICBTY2FsYXIuV2l0
aGluRXBzaWxvbiA9IGZ1bmN0aW9uIChhLCBiLCBlcHNpbG9uKSB7CisgICAgICAgIGlmIChlcHNp
bG9uID09PSB2b2lkIDApIHsgZXBzaWxvbiA9IDEuNDAxMjk4RS00NTsgfQorICAgICAgICB2YXIg
bnVtID0gYSAtIGI7CisgICAgICAgIHJldHVybiAtZXBzaWxvbiA8PSBudW0gJiYgbnVtIDw9IGVw
c2lsb247CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIDogdGhlIHVw
cGVyIGNhc2UgdHJhbnNsYXRpb24gb2YgdGhlIG51bWJlciBpIHRvIGhleGFkZWNpbWFsLgorICAg
ICAqIEBwYXJhbSBpIG51bWJlcgorICAgICAqIEByZXR1cm5zIHRoZSB1cHBlciBjYXNlIHRyYW5z
bGF0aW9uIG9mIHRoZSBudW1iZXIgaSB0byBoZXhhZGVjaW1hbC4KKyAgICAgKi8KKyAgICBTY2Fs
YXIuVG9IZXggPSBmdW5jdGlvbiAoaSkgeworICAgICAgICB2YXIgc3RyID0gaS50b1N0cmluZygx
Nik7CisgICAgICAgIGlmIChpIDw9IDE1KSB7CisgICAgICAgICAgICByZXR1cm4gKCIwIiArIHN0
cikudG9VcHBlckNhc2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RyLnRvVXBwZXJD
YXNlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIC0xIGlmIHZhbHVlIGlzIG5l
Z2F0aXZlIGFuZCArMSBpcyB2YWx1ZSBpcyBwb3NpdGl2ZS4KKyAgICAgKiBAcGFyYW0gdmFsdWUg
dGhlIHZhbHVlCisgICAgICogQHJldHVybnMgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCdzIGVxdWFs
IHRvIHplcm8uCisgICAgICovCisgICAgU2NhbGFyLlNpZ24gPSBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgdmFsdWUgPSArdmFsdWU7IC8vIGNvbnZlcnQgdG8gYSBudW1iZXIKKyAgICAgICAg
aWYgKHZhbHVlID09PSAwIHx8IGlzTmFOKHZhbHVlKSkgeworICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZSA+IDAgPyAxIDogLTE7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBpdHNlbGYgaWYgaXQncyBiZXR3
ZWVuIG1pbiBhbmQgbWF4LgorICAgICAqIFJldHVybnMgbWluIGlmIHRoZSB2YWx1ZSBpcyBsb3dl
ciB0aGFuIG1pbi4KKyAgICAgKiBSZXR1cm5zIG1heCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0
aGFuIG1heC4KKyAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGNsbWFwCisgICAgICog
QHBhcmFtIG1pbiB0aGUgbWluIHZhbHVlIHRvIGNsYW1wIHRvIChkZWZhdWx0OiAwKQorICAgICAq
IEBwYXJhbSBtYXggdGhlIG1heCB2YWx1ZSB0byBjbGFtcCB0byAoZGVmYXVsdDogMSkKKyAgICAg
KiBAcmV0dXJucyB0aGUgY2xhbXBlZCB2YWx1ZQorICAgICAqLworICAgIFNjYWxhci5DbGFtcCA9
IGZ1bmN0aW9uICh2YWx1ZSwgbWluLCBtYXgpIHsKKyAgICAgICAgaWYgKG1pbiA9PT0gdm9pZCAw
KSB7IG1pbiA9IDA7IH0KKyAgICAgICAgaWYgKG1heCA9PT0gdm9pZCAwKSB7IG1heCA9IDE7IH0K
KyAgICAgICAgcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB2YWx1ZSkpOworICAg
IH07CisgICAgLyoqCisgICAgICogdGhlIGxvZzIgb2YgdmFsdWUuCisgICAgICogQHBhcmFtIHZh
bHVlIHRoZSB2YWx1ZSB0byBjb21wdXRlIGxvZzIgb2YKKyAgICAgKiBAcmV0dXJucyB0aGUgbG9n
MiBvZiB2YWx1ZS4KKyAgICAgKi8KKyAgICBTY2FsYXIuTG9nMiA9IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICByZXR1cm4gTWF0aC5sb2codmFsdWUpICogTWF0aC5MT0cyRTsKKyAgICB9Owor
ICAgIC8qKgorICAgICogTG9vcHMgdGhlIHZhbHVlLCBzbyB0aGF0IGl0IGlzIG5ldmVyIGxhcmdl
ciB0aGFuIGxlbmd0aCBhbmQgbmV2ZXIgc21hbGxlciB0aGFuIDAuCisgICAgKgorICAgICogVGhp
cyBpcyBzaW1pbGFyIHRvIHRoZSBtb2R1bG8gb3BlcmF0b3IgYnV0IGl0IHdvcmtzIHdpdGggZmxv
YXRpbmcgcG9pbnQgbnVtYmVycy4KKyAgICAqIEZvciBleGFtcGxlLCB1c2luZyAzLjAgZm9yIHQg
YW5kIDIuNSBmb3IgbGVuZ3RoLCB0aGUgcmVzdWx0IHdvdWxkIGJlIDAuNS4KKyAgICAqIFdpdGgg
dCA9IDUgYW5kIGxlbmd0aCA9IDIuNSwgdGhlIHJlc3VsdCB3b3VsZCBiZSAwLjAuCisgICAgKiBO
b3RlLCBob3dldmVyLCB0aGF0IHRoZSBiZWhhdmlvdXIgaXMgbm90IGRlZmluZWQgZm9yIG5lZ2F0
aXZlIG51bWJlcnMgYXMgaXQgaXMgZm9yIHRoZSBtb2R1bG8gb3BlcmF0b3IKKyAgICAqIEBwYXJh
bSB2YWx1ZSB0aGUgdmFsdWUKKyAgICAqIEBwYXJhbSBsZW5ndGggdGhlIGxlbmd0aAorICAgICog
QHJldHVybnMgdGhlIGxvb3BlZCB2YWx1ZQorICAgICovCisgICAgU2NhbGFyLlJlcGVhdCA9IGZ1
bmN0aW9uICh2YWx1ZSwgbGVuZ3RoKSB7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIE1hdGguZmxv
b3IodmFsdWUgLyBsZW5ndGgpICogbGVuZ3RoOworICAgIH07CisgICAgLyoqCisgICAgICogTm9y
bWFsaXplIHRoZSB2YWx1ZSBiZXR3ZWVuIDAuMCBhbmQgMS4wIHVzaW5nIG1pbiBhbmQgbWF4IHZh
bHVlcworICAgICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBub3JtYWxpemUKKyAgICAgKiBAcGFy
YW0gbWluIG1heCB0byBub3JtYWxpemUgYmV0d2VlbgorICAgICAqIEBwYXJhbSBtYXggbWluIHRv
IG5vcm1hbGl6ZSBiZXR3ZWVuCisgICAgICogQHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUK
KyAgICAgKi8KKyAgICBTY2FsYXIuTm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlLCBtaW4sIG1h
eCkgeworICAgICAgICByZXR1cm4gKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pOworICAgIH07
CisgICAgLyoqCisgICAgKiBEZW5vcm1hbGl6ZSB0aGUgdmFsdWUgZnJvbSAwLjAgYW5kIDEuMCB1
c2luZyBtaW4gYW5kIG1heCB2YWx1ZXMKKyAgICAqIEBwYXJhbSBub3JtYWxpemVkIHZhbHVlIHRv
IGRlbm9ybWFsaXplCisgICAgKiBAcGFyYW0gbWluIG1heCB0byBkZW5vcm1hbGl6ZSBiZXR3ZWVu
CisgICAgKiBAcGFyYW0gbWF4IG1pbiB0byBkZW5vcm1hbGl6ZSBiZXR3ZWVuCisgICAgKiBAcmV0
dXJucyB0aGUgZGVub3JtYWxpemVkIHZhbHVlCisgICAgKi8KKyAgICBTY2FsYXIuRGVub3JtYWxp
emUgPSBmdW5jdGlvbiAobm9ybWFsaXplZCwgbWluLCBtYXgpIHsKKyAgICAgICAgcmV0dXJuIChu
b3JtYWxpemVkICogKG1heCAtIG1pbikgKyBtaW4pOworICAgIH07CisgICAgLyoqCisgICAgKiBD
YWxjdWxhdGVzIHRoZSBzaG9ydGVzdCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGdpdmVuIGFuZ2xl
cyBnaXZlbiBpbiBkZWdyZWVzLgorICAgICogQHBhcmFtIGN1cnJlbnQgY3VycmVudCBhbmdsZSBp
biBkZWdyZWVzCisgICAgKiBAcGFyYW0gdGFyZ2V0IHRhcmdldCBhbmdsZSBpbiBkZWdyZWVzCisg
ICAgKiBAcmV0dXJucyB0aGUgZGVsdGEKKyAgICAqLworICAgIFNjYWxhci5EZWx0YUFuZ2xlID0g
ZnVuY3Rpb24gKGN1cnJlbnQsIHRhcmdldCkgeworICAgICAgICB2YXIgbnVtID0gU2NhbGFyLlJl
cGVhdCh0YXJnZXQgLSBjdXJyZW50LCAzNjAuMCk7CisgICAgICAgIGlmIChudW0gPiAxODAuMCkg
eworICAgICAgICAgICAgbnVtIC09IDM2MC4wOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dW07CisgICAgfTsKKyAgICAvKioKKyAgICAqIFBpbmdQb25ncyB0aGUgdmFsdWUgdCwgc28gdGhh
dCBpdCBpcyBuZXZlciBsYXJnZXIgdGhhbiBsZW5ndGggYW5kIG5ldmVyIHNtYWxsZXIgdGhhbiAw
LgorICAgICogQHBhcmFtIHR4IHZhbHVlCisgICAgKiBAcGFyYW0gbGVuZ3RoIGxlbmd0aAorICAg
ICogQHJldHVybnMgVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgbW92ZSBiYWNrIGFuZCBmb3J0aCBi
ZXR3ZWVuIDAgYW5kIGxlbmd0aAorICAgICovCisgICAgU2NhbGFyLlBpbmdQb25nID0gZnVuY3Rp
b24gKHR4LCBsZW5ndGgpIHsKKyAgICAgICAgdmFyIHQgPSBTY2FsYXIuUmVwZWF0KHR4LCBsZW5n
dGggKiAyLjApOworICAgICAgICByZXR1cm4gbGVuZ3RoIC0gTWF0aC5hYnModCAtIGxlbmd0aCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAqIEludGVycG9sYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4
IHdpdGggc21vb3RoaW5nIGF0IHRoZSBsaW1pdHMuCisgICAgKgorICAgICogVGhpcyBmdW5jdGlv
biBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBtaW4gYW5kIG1heCBpbiBhIHNpbWlsYXIgd2F5IHRvIExl
cnAuIEhvd2V2ZXIsIHRoZSBpbnRlcnBvbGF0aW9uIHdpbGwgZ3JhZHVhbGx5IHNwZWVkIHVwCisg
ICAgKiBmcm9tIHRoZSBzdGFydCBhbmQgc2xvdyBkb3duIHRvd2FyZCB0aGUgZW5kLiBUaGlzIGlz
IHVzZWZ1bCBmb3IgY3JlYXRpbmcgbmF0dXJhbC1sb29raW5nIGFuaW1hdGlvbiwgZmFkaW5nIGFu
ZCBvdGhlciB0cmFuc2l0aW9ucy4KKyAgICAqIEBwYXJhbSBmcm9tIGZyb20KKyAgICAqIEBwYXJh
bSB0byB0bworICAgICogQHBhcmFtIHR4IHZhbHVlCisgICAgKiBAcmV0dXJucyB0aGUgc21vb3Ro
IHN0ZXBwZWQgdmFsdWUKKyAgICAqLworICAgIFNjYWxhci5TbW9vdGhTdGVwID0gZnVuY3Rpb24g
KGZyb20sIHRvLCB0eCkgeworICAgICAgICB2YXIgdCA9IFNjYWxhci5DbGFtcCh0eCk7CisgICAg
ICAgIHQgPSAtMi4wICogdCAqIHQgKiB0ICsgMy4wICogdCAqIHQ7CisgICAgICAgIHJldHVybiB0
byAqIHQgKyBmcm9tICogKDEuMCAtIHQpOworICAgIH07CisgICAgLyoqCisgICAgKiBNb3ZlcyBh
IHZhbHVlIGN1cnJlbnQgdG93YXJkcyB0YXJnZXQuCisgICAgKgorICAgICogVGhpcyBpcyBlc3Nl
bnRpYWxseSB0aGUgc2FtZSBhcyBNYXRoZi5MZXJwIGJ1dCBpbnN0ZWFkIHRoZSBmdW5jdGlvbiB3
aWxsIGVuc3VyZSB0aGF0IHRoZSBzcGVlZCBuZXZlciBleGNlZWRzIG1heERlbHRhLgorICAgICog
TmVnYXRpdmUgdmFsdWVzIG9mIG1heERlbHRhIHB1c2hlcyB0aGUgdmFsdWUgYXdheSBmcm9tIHRh
cmdldC4KKyAgICAqIEBwYXJhbSBjdXJyZW50IGN1cnJlbnQgdmFsdWUKKyAgICAqIEBwYXJhbSB0
YXJnZXQgdGFyZ2V0IHZhbHVlCisgICAgKiBAcGFyYW0gbWF4RGVsdGEgbWF4IGRpc3RhbmNlIHRv
IG1vdmUKKyAgICAqIEByZXR1cm5zIHJlc3VsdGluZyB2YWx1ZQorICAgICovCisgICAgU2NhbGFy
Lk1vdmVUb3dhcmRzID0gZnVuY3Rpb24gKGN1cnJlbnQsIHRhcmdldCwgbWF4RGVsdGEpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgICAgIGlmIChNYXRoLmFicyh0YXJnZXQgLSBjdXJy
ZW50KSA8PSBtYXhEZWx0YSkgeworICAgICAgICAgICAgcmVzdWx0ID0gdGFyZ2V0OworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudCArIFNjYWxh
ci5TaWduKHRhcmdldCAtIGN1cnJlbnQpICogbWF4RGVsdGE7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICogU2FtZSBhcyBNb3ZlVG93YXJk
cyBidXQgbWFrZXMgc3VyZSB0aGUgdmFsdWVzIGludGVycG9sYXRlIGNvcnJlY3RseSB3aGVuIHRo
ZXkgd3JhcCBhcm91bmQgMzYwIGRlZ3JlZXMuCisgICAgKgorICAgICogVmFyaWFibGVzIGN1cnJl
bnQgYW5kIHRhcmdldCBhcmUgYXNzdW1lZCB0byBiZSBpbiBkZWdyZWVzLiBGb3Igb3B0aW1pemF0
aW9uIHJlYXNvbnMsIG5lZ2F0aXZlIHZhbHVlcyBvZiBtYXhEZWx0YQorICAgICogIGFyZSBub3Qg
c3VwcG9ydGVkIGFuZCBtYXkgY2F1c2Ugb3NjaWxsYXRpb24uIFRvIHB1c2ggY3VycmVudCBhd2F5
IGZyb20gYSB0YXJnZXQgYW5nbGUsIGFkZCAxODAgdG8gdGhhdCBhbmdsZSBpbnN0ZWFkLgorICAg
ICogQHBhcmFtIGN1cnJlbnQgY3VycmVudCB2YWx1ZQorICAgICogQHBhcmFtIHRhcmdldCB0YXJn
ZXQgdmFsdWUKKyAgICAqIEBwYXJhbSBtYXhEZWx0YSBtYXggZGlzdGFuY2UgdG8gbW92ZQorICAg
ICogQHJldHVybnMgcmVzdWx0aW5nIGFuZ2xlCisgICAgKi8KKyAgICBTY2FsYXIuTW92ZVRvd2Fy
ZHNBbmdsZSA9IGZ1bmN0aW9uIChjdXJyZW50LCB0YXJnZXQsIG1heERlbHRhKSB7CisgICAgICAg
IHZhciBudW0gPSBTY2FsYXIuRGVsdGFBbmdsZShjdXJyZW50LCB0YXJnZXQpOworICAgICAgICB2
YXIgcmVzdWx0ID0gMDsKKyAgICAgICAgaWYgKC1tYXhEZWx0YSA8IG51bSAmJiBudW0gPCBtYXhE
ZWx0YSkgeworICAgICAgICAgICAgcmVzdWx0ID0gdGFyZ2V0OworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGFyZ2V0ID0gY3VycmVudCArIG51bTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IFNjYWxhci5Nb3ZlVG93YXJkcyhjdXJyZW50LCB0YXJnZXQsIG1heERlbHRhKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIG5ldyBzY2FsYXIgd2l0aCB2YWx1ZXMgbGluZWFybHkgaW50ZXJwb2xhdGVk
IG9mICJhbW91bnQiIGJldHdlZW4gdGhlIHN0YXJ0IHNjYWxhciBhbmQgdGhlIGVuZCBzY2FsYXIu
CisgICAgICogQHBhcmFtIHN0YXJ0IHN0YXJ0IHZhbHVlCisgICAgICogQHBhcmFtIGVuZCB0YXJn
ZXQgdmFsdWUKKyAgICAgKiBAcGFyYW0gYW1vdW50IGFtb3VudCB0byBsZXJwIGJldHdlZW4KKyAg
ICAgKiBAcmV0dXJucyB0aGUgbGVycGVkIHZhbHVlCisgICAgICovCisgICAgU2NhbGFyLkxlcnAg
PSBmdW5jdGlvbiAoc3RhcnQsIGVuZCwgYW1vdW50KSB7CisgICAgICAgIHJldHVybiBzdGFydCAr
ICgoZW5kIC0gc3RhcnQpICogYW1vdW50KTsKKyAgICB9OworICAgIC8qKgorICAgICogU2FtZSBh
cyBMZXJwIGJ1dCBtYWtlcyBzdXJlIHRoZSB2YWx1ZXMgaW50ZXJwb2xhdGUgY29ycmVjdGx5IHdo
ZW4gdGhleSB3cmFwIGFyb3VuZCAzNjAgZGVncmVlcy4KKyAgICAqIFRoZSBwYXJhbWV0ZXIgdCBp
cyBjbGFtcGVkIHRvIHRoZSByYW5nZSBbMCwgMV0uIFZhcmlhYmxlcyBhIGFuZCBiIGFyZSBhc3N1
bWVkIHRvIGJlIGluIGRlZ3JlZXMuCisgICAgKiBAcGFyYW0gc3RhcnQgc3RhcnQgdmFsdWUKKyAg
ICAqIEBwYXJhbSBlbmQgdGFyZ2V0IHZhbHVlCisgICAgKiBAcGFyYW0gYW1vdW50IGFtb3VudCB0
byBsZXJwIGJldHdlZW4KKyAgICAqIEByZXR1cm5zIHRoZSBsZXJwZWQgdmFsdWUKKyAgICAqLwor
ICAgIFNjYWxhci5MZXJwQW5nbGUgPSBmdW5jdGlvbiAoc3RhcnQsIGVuZCwgYW1vdW50KSB7Cisg
ICAgICAgIHZhciBudW0gPSBTY2FsYXIuUmVwZWF0KGVuZCAtIHN0YXJ0LCAzNjAuMCk7CisgICAg
ICAgIGlmIChudW0gPiAxODAuMCkgeworICAgICAgICAgICAgbnVtIC09IDM2MC4wOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzdGFydCArIG51bSAqIFNjYWxhci5DbGFtcChhbW91bnQpOwor
ICAgIH07CisgICAgLyoqCisgICAgKiBDYWxjdWxhdGVzIHRoZSBsaW5lYXIgcGFyYW1ldGVyIHQg
dGhhdCBwcm9kdWNlcyB0aGUgaW50ZXJwb2xhbnQgdmFsdWUgd2l0aGluIHRoZSByYW5nZSBbYSwg
Yl0uCisgICAgKiBAcGFyYW0gYSBzdGFydCB2YWx1ZQorICAgICogQHBhcmFtIGIgdGFyZ2V0IHZh
bHVlCisgICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgYmV0d2VlbiBhIGFuZCBiCisgICAgKiBAcmV0
dXJucyB0aGUgaW52ZXJzZUxlcnAgdmFsdWUKKyAgICAqLworICAgIFNjYWxhci5JbnZlcnNlTGVy
cCA9IGZ1bmN0aW9uIChhLCBiLCB2YWx1ZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gMDsKKyAg
ICAgICAgaWYgKGEgIT0gYikgeworICAgICAgICAgICAgcmVzdWx0ID0gU2NhbGFyLkNsYW1wKCh2
YWx1ZSAtIGEpIC8gKGIgLSBhKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICByZXN1bHQgPSAwLjA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgc2NhbGFyIGxvY2F0ZWQgZm9yICJh
bW91bnQiIChmbG9hdCkgb24gdGhlIEhlcm1pdGUgc3BsaW5lIGRlZmluZWQgYnkgdGhlIHNjYWxh
cnMgInZhbHVlMSIsICJ2YWx1ZTMiLCAidGFuZ2VudDEiLCAidGFuZ2VudDIiLgorICAgICAqIEBz
ZWUgaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9IZXJtaXRlUG9seW5vbWlhbC5odG1sCisg
ICAgICogQHBhcmFtIHZhbHVlMSBzcGxpbmUgdmFsdWUKKyAgICAgKiBAcGFyYW0gdGFuZ2VudDEg
c3BsaW5lIHZhbHVlCisgICAgICogQHBhcmFtIHZhbHVlMiBzcGxpbmUgdmFsdWUKKyAgICAgKiBA
cGFyYW0gdGFuZ2VudDIgc3BsaW5lIHZhbHVlCisgICAgICogQHBhcmFtIGFtb3VudCBpbnB1dCB2
YWx1ZQorICAgICAqIEByZXR1cm5zIGhlcm1pdGUgcmVzdWx0CisgICAgICovCisgICAgU2NhbGFy
Lkhlcm1pdGUgPSBmdW5jdGlvbiAodmFsdWUxLCB0YW5nZW50MSwgdmFsdWUyLCB0YW5nZW50Miwg
YW1vdW50KSB7CisgICAgICAgIHZhciBzcXVhcmVkID0gYW1vdW50ICogYW1vdW50OworICAgICAg
ICB2YXIgY3ViZWQgPSBhbW91bnQgKiBzcXVhcmVkOworICAgICAgICB2YXIgcGFydDEgPSAoKDIu
MCAqIGN1YmVkKSAtICgzLjAgKiBzcXVhcmVkKSkgKyAxLjA7CisgICAgICAgIHZhciBwYXJ0MiA9
ICgtMi4wICogY3ViZWQpICsgKDMuMCAqIHNxdWFyZWQpOworICAgICAgICB2YXIgcGFydDMgPSAo
Y3ViZWQgLSAoMi4wICogc3F1YXJlZCkpICsgYW1vdW50OworICAgICAgICB2YXIgcGFydDQgPSBj
dWJlZCAtIHNxdWFyZWQ7CisgICAgICAgIHJldHVybiAoKCh2YWx1ZTEgKiBwYXJ0MSkgKyAodmFs
dWUyICogcGFydDIpKSArICh0YW5nZW50MSAqIHBhcnQzKSkgKyAodGFuZ2VudDIgKiBwYXJ0NCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAqIFJldHVybnMgYSByYW5kb20gZmxvYXQgbnVtYmVyIGJl
dHdlZW4gYW5kIG1pbiBhbmQgbWF4IHZhbHVlcworICAgICogQHBhcmFtIG1pbiBtaW4gdmFsdWUg
b2YgcmFuZG9tCisgICAgKiBAcGFyYW0gbWF4IG1heCB2YWx1ZSBvZiByYW5kb20KKyAgICAqIEBy
ZXR1cm5zIHJhbmRvbSB2YWx1ZQorICAgICovCisgICAgU2NhbGFyLlJhbmRvbVJhbmdlID0gZnVu
Y3Rpb24gKG1pbiwgbWF4KSB7CisgICAgICAgIGlmIChtaW4gPT09IG1heCkgeworICAgICAgICAg
ICAgcmV0dXJuIG1pbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKChNYXRoLnJhbmRvbSgp
ICogKG1heCAtIG1pbikpICsgbWluKTsKKyAgICB9OworICAgIC8qKgorICAgICogVGhpcyBmdW5j
dGlvbiByZXR1cm5zIHBlcmNlbnRhZ2Ugb2YgYSBudW1iZXIgaW4gYSBnaXZlbiByYW5nZS4KKyAg
ICAqCisgICAgKiBSYW5nZVRvUGVyY2VudCg0MCwyMCw2MCkgd2lsbCByZXR1cm4gMC41ICg1MCUp
CisgICAgKiBSYW5nZVRvUGVyY2VudCgzNCwwLDEwMCkgd2lsbCByZXR1cm4gMC4zNCAoMzQlKQor
ICAgICogQHBhcmFtIG51bWJlciB0byBjb252ZXJ0IHRvIHBlcmNlbnRhZ2UKKyAgICAqIEBwYXJh
bSBtaW4gbWluIHJhbmdlCisgICAgKiBAcGFyYW0gbWF4IG1heCByYW5nZQorICAgICogQHJldHVy
bnMgdGhlIHBlcmNlbnRhZ2UKKyAgICAqLworICAgIFNjYWxhci5SYW5nZVRvUGVyY2VudCA9IGZ1
bmN0aW9uIChudW1iZXIsIG1pbiwgbWF4KSB7CisgICAgICAgIHJldHVybiAoKG51bWJlciAtIG1p
bikgLyAobWF4IC0gbWluKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAqIFRoaXMgZnVuY3Rpb24g
cmV0dXJucyBudW1iZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcGVyY2VudGFnZSBpbiBhIGdp
dmVuIHJhbmdlLgorICAgICoKKyAgICAqIFBlcmNlbnRUb1JhbmdlKDAuMzQsMCwxMDApIHdpbGwg
cmV0dXJuIDM0LgorICAgICogQHBhcmFtIHBlcmNlbnQgdG8gY29udmVydCB0byBudW1iZXIKKyAg
ICAqIEBwYXJhbSBtaW4gbWluIHJhbmdlCisgICAgKiBAcGFyYW0gbWF4IG1heCByYW5nZQorICAg
ICogQHJldHVybnMgdGhlIG51bWJlcgorICAgICovCisgICAgU2NhbGFyLlBlcmNlbnRUb1Jhbmdl
ID0gZnVuY3Rpb24gKHBlcmNlbnQsIG1pbiwgbWF4KSB7CisgICAgICAgIHJldHVybiAoKG1heCAt
IG1pbikgKiBwZXJjZW50ICsgbWluKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
dGhlIGFuZ2xlIGNvbnZlcnRlZCB0byBlcXVpdmFsZW50IHZhbHVlIGJldHdlZW4gLU1hdGguUEkg
YW5kIE1hdGguUEkgcmFkaWFucy4KKyAgICAgKiBAcGFyYW0gYW5nbGUgVGhlIGFuZ2xlIHRvIG5v
cm1hbGl6ZSBpbiByYWRpYW4uCisgICAgICogQHJldHVybiBUaGUgY29udmVydGVkIGFuZ2xlLgor
ICAgICAqLworICAgIFNjYWxhci5Ob3JtYWxpemVSYWRpYW5zID0gZnVuY3Rpb24gKGFuZ2xlKSB7
CisgICAgICAgIC8vIE1vcmUgcHJlY2lzZSBidXQgc2xvd2VyIHZlcnNpb24ga2VwdCBmb3IgcmVm
ZXJlbmNlLgorICAgICAgICAvLyBhbmdsZSA9IGFuZ2xlICUgVG9vbHMuVHdvUGk7CisgICAgICAg
IC8vIGFuZ2xlID0gKGFuZ2xlICsgVG9vbHMuVHdvUGkpICUgVG9vbHMuVHdvUGk7CisgICAgICAg
IC8vaWYgKGFuZ2xlID4gTWF0aC5QSSkgeworICAgICAgICAvLwlhbmdsZSAtPSBUb29scy5Ud29Q
aTsKKyAgICAgICAgLy99CisgICAgICAgIGFuZ2xlIC09IChTY2FsYXIuVHdvUGkgKiBNYXRoLmZs
b29yKChhbmdsZSArIE1hdGguUEkpIC8gU2NhbGFyLlR3b1BpKSk7CisgICAgICAgIHJldHVybiBh
bmdsZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFR3byBwaSBjb25zdGFudHMgY29udmVuaWVu
dCBmb3IgY29tcHV0YXRpb24uCisgICAgICovCisgICAgU2NhbGFyLlR3b1BpID0gTWF0aC5QSSAq
IDI7CisgICAgcmV0dXJuIFNjYWxhcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vTWF0aHMvbWF0aC5zaXplLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL01hdGhzL21hdGguc2l6ZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNpemUgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2l6ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2l6ZTsg
fSk7CisvKioKKyAqIFNpemUgY29udGFpbmluZyB3aWRodCBhbmQgaGVpZ2h0CisgKi8KK3ZhciBT
aXplID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0
ZXMgYSBTaXplIG9iamVjdCBmcm9tIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IChmbG9hdHMp
LgorICAgICAqIEBwYXJhbSB3aWR0aCB3aWR0aCBvZiB0aGUgbmV3IHNpemUKKyAgICAgKiBAcGFy
YW0gaGVpZ2h0IGhlaWdodCBvZiB0aGUgbmV3IHNpemUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBT
aXplKHdpZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOworICAgICAg
ICB0aGlzLmhlaWdodCA9IGhlaWdodDsKKyAgICB9CisgICAgLyoqCisgICAgICogUmV0dXJucyBh
IHN0cmluZyB3aXRoIHRoZSBTaXplIHdpZHRoIGFuZCBoZWlnaHQKKyAgICAgKiBAcmV0dXJucyBh
IHN0cmluZyB3aXRoIHRoZSBTaXplIHdpZHRoIGFuZCBoZWlnaHQKKyAgICAgKi8KKyAgICBTaXpl
LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJ7Vzog
IiArIHRoaXMud2lkdGggKyAiLCBIOiAiICsgdGhpcy5oZWlnaHQgKyAifSI7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiAiU2l6ZSIKKyAgICAgKiBAcmV0dXJucyB0aGUgc3RyaW5nICJTaXplIgor
ICAgICAqLworICAgIFNpemUucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuICJTaXplIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
dGhlIFNpemUgaGFzaCBjb2RlLgorICAgICAqIEByZXR1cm5zIGEgaGFzaCBjb2RlIGZvciBhIHVu
aXF1ZSB3aWR0aCBhbmQgaGVpZ2h0CisgICAgICovCisgICAgU2l6ZS5wcm90b3R5cGUuZ2V0SGFz
aENvZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBoYXNoID0gdGhpcy53aWR0aCB8IDA7
CisgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAodGhpcy5oZWlnaHQgfCAwKTsKKyAgICAg
ICAgcmV0dXJuIGhhc2g7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBjdXJy
ZW50IHNpemUgZnJvbSB0aGUgZ2l2ZW4gb25lLgorICAgICAqIEBwYXJhbSBzcmMgdGhlIGdpdmVu
IHNpemUKKyAgICAgKi8KKyAgICBTaXplLnByb3RvdHlwZS5jb3B5RnJvbSA9IGZ1bmN0aW9uIChz
cmMpIHsKKyAgICAgICAgdGhpcy53aWR0aCA9IHNyYy53aWR0aDsKKyAgICAgICAgdGhpcy5oZWln
aHQgPSBzcmMuaGVpZ2h0OworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyBpbiBwbGFj
ZSB0aGUgY3VycmVudCBTaXplIGZyb20gdGhlIGdpdmVuIGZsb2F0cy4KKyAgICAgKiBAcGFyYW0g
d2lkdGggd2lkdGggb2YgdGhlIG5ldyBzaXplCisgICAgICogQHBhcmFtIGhlaWdodCBoZWlnaHQg
b2YgdGhlIG5ldyBzaXplCisgICAgICogQHJldHVybnMgdGhlIHVwZGF0ZWQgU2l6ZS4KKyAgICAg
Ki8KKyAgICBTaXplLnByb3RvdHlwZS5jb3B5RnJvbUZsb2F0cyA9IGZ1bmN0aW9uICh3aWR0aCwg
aGVpZ2h0KSB7CisgICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKKyAgICAgICAgdGhpcy5oZWln
aHQgPSBoZWlnaHQ7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAg
ICogVXBkYXRlcyBpbiBwbGFjZSB0aGUgY3VycmVudCBTaXplIGZyb20gdGhlIGdpdmVuIGZsb2F0
cy4KKyAgICAgKiBAcGFyYW0gd2lkdGggd2lkdGggdG8gc2V0CisgICAgICogQHBhcmFtIGhlaWdo
dCBoZWlnaHQgdG8gc2V0CisgICAgICogQHJldHVybnMgdGhlIHVwZGF0ZWQgU2l6ZS4KKyAgICAg
Ki8KKyAgICBTaXplLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5jb3B5RnJvbUZsb2F0cyh3aWR0aCwgaGVpZ2h0KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIE11bHRpcGxpZXMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYnkgbnVt
YmVycworICAgICAqIEBwYXJhbSB3IGZhY3RvciB0byBtdWx0aXBsZSB0aGUgd2lkdGggYnkKKyAg
ICAgKiBAcGFyYW0gaCBmYWN0b3IgdG8gbXVsdGlwbGUgdGhlIGhlaWdodCBieQorICAgICAqIEBy
ZXR1cm5zIGEgbmV3IFNpemUgc2V0IHdpdGggdGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBvZiB0
aGUgY3VycmVudCBTaXplIGFuZCB0aGUgZ2l2ZW4gZmxvYXRzLgorICAgICAqLworICAgIFNpemUu
cHJvdG90eXBlLm11bHRpcGx5QnlGbG9hdHMgPSBmdW5jdGlvbiAodywgaCkgeworICAgICAgICBy
ZXR1cm4gbmV3IFNpemUodGhpcy53aWR0aCAqIHcsIHRoaXMuaGVpZ2h0ICogaCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhlIHNpemUKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBT
aXplIGNvcGllZCBmcm9tIHRoZSBnaXZlbiBvbmUuCisgICAgICovCisgICAgU2l6ZS5wcm90b3R5
cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgU2l6ZSh0aGlzLndp
ZHRoLCB0aGlzLmhlaWdodCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUcnVlIGlmIHRoZSBj
dXJyZW50IFNpemUgYW5kIHRoZSBnaXZlbiBvbmUgd2lkdGggYW5kIGhlaWdodCBhcmUgc3RyaWN0
bHkgZXF1YWwuCisgICAgICogQHBhcmFtIG90aGVyIHRoZSBvdGhlciBzaXplIHRvIGNvbXBhcmUg
YWdhaW5zdAorICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1cnJlbnQgU2l6ZSBhbmQgdGhl
IGdpdmVuIG9uZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBzdHJpY3RseSBlcXVhbC4KKyAgICAgKi8K
KyAgICBTaXplLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAgICAg
aWYgKCFvdGhlcikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiAodGhpcy53aWR0aCA9PT0gb3RoZXIud2lkdGgpICYmICh0aGlzLmhlaWdodCA9
PT0gb3RoZXIuaGVpZ2h0KTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaXpl
LnByb3RvdHlwZSwgInN1cmZhY2UiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc3Vy
ZmFjZSBvZiB0aGUgU2l6ZSA6IHdpZHRoICogaGVpZ2h0IChmbG9hdCkuCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLndpZHRo
ICogdGhpcy5oZWlnaHQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIENyZWF0
ZSBhIG5ldyBzaXplIG9mIHplcm8KKyAgICAgKiBAcmV0dXJucyBhIG5ldyBTaXplIHNldCB0byAo
MC4wLCAwLjApCisgICAgICovCisgICAgU2l6ZS5aZXJvID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gbmV3IFNpemUoMC4wLCAwLjApOworICAgIH07CisgICAgLyoqCisgICAgICogU3Vt
cyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0d28gc2l6ZXMKKyAgICAgKiBAcGFyYW0gb3RoZXJT
aXplIHNpemUgdG8gYWRkIHRvIHRoaXMgc2l6ZQorICAgICAqIEByZXR1cm5zIGEgbmV3IFNpemUg
c2V0IGFzIHRoZSBhZGRpdGlvbiByZXN1bHQgb2YgdGhlIGN1cnJlbnQgU2l6ZSBhbmQgdGhlIGdp
dmVuIG9uZS4KKyAgICAgKi8KKyAgICBTaXplLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAob3Ro
ZXJTaXplKSB7CisgICAgICAgIHZhciByID0gbmV3IFNpemUodGhpcy53aWR0aCArIG90aGVyU2l6
ZS53aWR0aCwgdGhpcy5oZWlnaHQgKyBvdGhlclNpemUuaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJu
IHI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTdWJ0cmFjdHMgdGhlIHdpZHRoIGFuZCBoZWln
aHQgb2YgdHdvCisgICAgICogQHBhcmFtIG90aGVyU2l6ZSBzaXplIHRvIHN1YnRyYWN0IHRvIHRo
aXMgc2l6ZQorICAgICAqIEByZXR1cm5zIGEgbmV3IFNpemUgc2V0IGFzIHRoZSBzdWJ0cmFjdGlv
biByZXN1bHQgb2YgIHRoZSBnaXZlbiBvbmUgZnJvbSB0aGUgY3VycmVudCBTaXplLgorICAgICAq
LworICAgIFNpemUucHJvdG90eXBlLnN1YnRyYWN0ID0gZnVuY3Rpb24gKG90aGVyU2l6ZSkgewor
ICAgICAgICB2YXIgciA9IG5ldyBTaXplKHRoaXMud2lkdGggLSBvdGhlclNpemUud2lkdGgsIHRo
aXMuaGVpZ2h0IC0gb3RoZXJTaXplLmhlaWdodCk7CisgICAgICAgIHJldHVybiByOworICAgIH07
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBTaXplIHNldCBhdCB0aGUgbGluZWFyIGlu
dGVycG9sYXRpb24gImFtb3VudCIgYmV0d2VlbiAic3RhcnQiIGFuZCAiZW5kIgorICAgICAqIEBw
YXJhbSBzdGFydCBzdGFydGluZyBzaXplIHRvIGxlcnAgYmV0d2VlbgorICAgICAqIEBwYXJhbSBl
bmQgZW5kIHNpemUgdG8gbGVycCBiZXR3ZWVuCisgICAgICogQHBhcmFtIGFtb3VudCBhbW91bnQg
dG8gbGVycCBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIHZhbHVlcworICAgICAqIEByZXR1cm5z
IGEgbmV3IFNpemUgc2V0IGF0IHRoZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiAiYW1vdW50IiBiZXR3
ZWVuICJzdGFydCIgYW5kICJlbmQiCisgICAgICovCisgICAgU2l6ZS5MZXJwID0gZnVuY3Rpb24g
KHN0YXJ0LCBlbmQsIGFtb3VudCkgeworICAgICAgICB2YXIgdyA9IHN0YXJ0LndpZHRoICsgKChl
bmQud2lkdGggLSBzdGFydC53aWR0aCkgKiBhbW91bnQpOworICAgICAgICB2YXIgaCA9IHN0YXJ0
LmhlaWdodCArICgoZW5kLmhlaWdodCAtIHN0YXJ0LmhlaWdodCkgKiBhbW91bnQpOworICAgICAg
ICByZXR1cm4gbmV3IFNpemUodywgaCk7CisgICAgfTsKKyAgICByZXR1cm4gU2l6ZTsKK30oKSk7
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0aHMvbWF0aC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0aHMvbWF0aC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTcGFjZSwgQXhpcywg
Q29sb3IzLCBDb2xvcjQsIFRtcENvbG9ycywgVG9HYW1tYVNwYWNlLCBUb0xpbmVhclNwYWNlLCBF
cHNpbG9uLCBGcnVzdHVtLCBQbGFuZSwgU2l6ZSwgVmVjdG9yMiwgVmVjdG9yMywgVmVjdG9yNCwg
UXVhdGVybmlvbiwgTWF0cml4LCBUbXBWZWN0b3JzLCBWaWV3cG9ydCwgT3JpZW50YXRpb24sIEJl
emllckN1cnZlLCBBbmdsZSwgQXJjMiwgUGF0aDIsIFBhdGgzRCwgQ3VydmUzLCBQb3NpdGlvbk5v
cm1hbFZlcnRleCwgUG9zaXRpb25Ob3JtYWxUZXh0dXJlVmVydGV4ICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGguYXhpcyAqLyAiLi9N
YXRocy9tYXRoLmF4aXMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3BhY2UiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3BhY2Ui
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXhpcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21h
dGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBeGlzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0aC5jb2xvciAqLyAiLi9NYXRocy9t
YXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yMyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3IzIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yNCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21h
dGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3I0Il07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlRtcENvbG9ycyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG1wQ29sb3JzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGguY29uc3RhbnRzICovICIu
L01hdGhzL21hdGguY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvR2FtbWFTcGFj
ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlRvR2FtbWFTcGFjZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUb0xp
bmVhclNwYWNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siVG9MaW5lYXJTcGFjZSJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJFcHNpbG9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF9jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siRXBzaWxvbiJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9tYXRoX2ZydXN0dW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0aC5mcnVzdHVtICovICIuL01hdGhzL21hdGguZnJ1
c3R1bS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcnVzdHVtIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfbWF0aF9mcnVzdHVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkZydXN0dW0iXTsg
fSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0aF9wYXRoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGgucGF0aCAqLyAi
Li9NYXRocy9tYXRoLnBhdGgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT3JpZW50YXRpb24iLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siT3JpZW50YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmV6aWVyQ3VydmUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siQmV6aWVyQ3VydmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5nbGUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9tYXRoX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQW5n
bGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjMiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X21hdGhfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBcmMyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBhdGgyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF9wYXRoX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBhdGgyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBhdGgzRCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfcGF0aF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJQYXRoM0QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3VydmUz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF9wYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkN1cnZlMyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRoX3Bs
YW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL21hdGgucGxhbmUgKi8gIi4vTWF0aHMvbWF0aC5wbGFuZS50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJQbGFuZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siUGxhbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfbWF0aF9zaXplX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL21hdGguc2l6ZSAqLyAiLi9NYXRocy9tYXRoLnNpemUudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiU2l6ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfc2l6ZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTaXplIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3RvcjIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZWN0b3IyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlZlY3RvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZWN0b3IzIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlZlY3RvcjQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZWN0b3I0Il07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlF1YXRlcm5pb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJRdWF0ZXJuaW9uIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk1hdHJpeCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIk1hdHJpeCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUbXBW
ZWN0b3JzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzdfX1siVG1wVmVjdG9ycyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9tYXRoX3ZlcnRleEZvcm1hdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tYXRoLnZlcnRleEZvcm1hdCAqLyAiLi9NYXRocy9tYXRo
LnZlcnRleEZvcm1hdC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NpdGlvbk5vcm1hbFZlcnRl
eCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfdmVydGV4Rm9ybWF0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV84X19bIlBvc2l0aW9uTm9ybWFsVmVydGV4Il07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBvc2l0aW9uTm9ybWFsVGV4dHVyZVZlcnRleCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X21hdGhfdmVydGV4Rm9ybWF0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBvc2l0aW9u
Tm9ybWFsVGV4dHVyZVZlcnRleCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9t
YXRoX3ZpZXdwb3J0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL21hdGgudmlld3BvcnQgKi8gIi4vTWF0aHMvbWF0aC52aWV3cG9ydC50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJWaWV3cG9ydCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhf
dmlld3BvcnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmlld3BvcnQiXTsgfSk7CisK
KworCisKKworCisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRocy9tYXRo
LnZlY3Rvci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL01hdGhzL21hdGgudmVjdG9yLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBWZWN0b3IyLCBWZWN0b3IzLCBWZWN0b3I0
LCBRdWF0ZXJuaW9uLCBNYXRyaXgsIFRtcFZlY3RvcnMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiVmVjdG9yMiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVmVjdG9yMjsgfSk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJWZWN0b3IzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBWZWN0b3Iz
OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3RvcjQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFZl
Y3RvcjQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVhdGVybmlvbiIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gUXVhdGVybmlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNYXRyaXgiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIE1hdHJpeDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUbXBWZWN0b3JzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBUbXBWZWN0b3JzOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vbWF0aC5zY2FsYXIgKi8gIi4vTWF0aHMvbWF0aC5zY2FsYXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0aC5jb25zdGFu
dHMgKi8gIi4vTWF0aHMvbWF0aC5jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2FycmF5VG9vbHMgKi8gIi4vTWlzYy9hcnJheVRv
b2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNj
L3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisvKioKKyAqIENs
YXNzIHJlcHJlc2VudGluZyBhIHZlY3RvciBjb250YWluaW5nIDIgY29vcmRpbmF0ZXMKKyAqLwor
dmFyIFZlY3RvcjIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIG5ldyBWZWN0b3IyIGZyb20gdGhlIGdpdmVuIHggYW5kIHkgY29vcmRpbmF0
ZXMKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlCisgICAgICog
QHBhcmFtIHkgZGVmaW5lcyB0aGUgc2Vjb25kIGNvb3JkaW5hdGUKKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBWZWN0b3IyKAorICAgIC8qKiBkZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlICovCisg
ICAgeCwgCisgICAgLyoqIGRlZmluZXMgdGhlIHNlY29uZCBjb29yZGluYXRlICovCisgICAgeSkg
eworICAgICAgICBpZiAoeCA9PT0gdm9pZCAwKSB7IHggPSAwOyB9CisgICAgICAgIGlmICh5ID09
PSB2b2lkIDApIHsgeSA9IDA7IH0KKyAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgdGhpcy55
ID0geTsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyB3aXRoIHRoZSBWZWN0
b3IyIGNvb3JkaW5hdGVzCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgVmVjdG9y
MiBjb29yZGluYXRlcworICAgICAqLworICAgIFZlY3RvcjIucHJvdG90eXBlLnRvU3RyaW5nID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIntYOiAiICsgdGhpcy54ICsgIiBZOiIgKyB0
aGlzLnkgKyAifSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGNsYXNzIG5hbWUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgc3RyaW5nICJWZWN0b3IyIgorICAgICAqLworICAgIFZlY3RvcjIu
cHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJW
ZWN0b3IyIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgY3VycmVudCB2ZWN0b3IgaGFz
aCBjb2RlCisgICAgICogQHJldHVybnMgdGhlIFZlY3RvcjIgaGFzaCBjb2RlIGFzIGEgbnVtYmVy
CisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuZ2V0SGFzaENvZGUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBoYXNoID0gdGhpcy54IHwgMDsKKyAgICAgICAgaGFzaCA9IChoYXNo
ICogMzk3KSBeICh0aGlzLnkgfCAwKTsKKyAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgfTsKKyAg
ICAvLyBPcGVyYXRvcnMKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBWZWN0b3IyIGNvb3JkaW5h
dGVzIGluIHRoZSBnaXZlbiBhcnJheSBvciBGbG9hdDMyQXJyYXkgZnJvbSB0aGUgZ2l2ZW4gaW5k
ZXguCisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIHNvdXJjZSBhcnJheQorICAgICAq
IEBwYXJhbSBpbmRleCBkZWZpbmVzIHRoZSBvZmZzZXQgaW4gc291cmNlIGFycmF5CisgICAgICog
QHJldHVybnMgdGhlIGN1cnJlbnQgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90
eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXksIGluZGV4KSB7CisgICAgICAgIGlmIChpbmRl
eCA9PT0gdm9pZCAwKSB7IGluZGV4ID0gMDsgfQorICAgICAgICBhcnJheVtpbmRleF0gPSB0aGlz
Lng7CisgICAgICAgIGFycmF5W2luZGV4ICsgMV0gPSB0aGlzLnk7CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ29weSB0aGUgY3VycmVudCB2ZWN0b3IgdG8g
YW4gYXJyYXkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBhcnJheSB3aXRoIDIgZWxlbWVudHM6IHRo
ZSBWZWN0b3IyIGNvb3JkaW5hdGVzLgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90eXBlLmFz
QXJyYXkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoKTsK
KyAgICAgICAgdGhpcy50b0FycmF5KHJlc3VsdCwgMCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBWZWN0b3IyIGNvb3JkaW5hdGVzIHdp
dGggdGhlIGdpdmVuIFZlY3RvcjIgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gc291cmNlIGRl
ZmluZXMgdGhlIHNvdXJjZSBWZWN0b3IyCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBk
YXRlZCBWZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuY29weUZyb20gPSBm
dW5jdGlvbiAoc291cmNlKSB7CisgICAgICAgIHRoaXMueCA9IHNvdXJjZS54OworICAgICAgICB0
aGlzLnkgPSBzb3VyY2UueTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTZXRzIHRoZSBWZWN0b3IyIGNvb3JkaW5hdGVzIHdpdGggdGhlIGdpdmVuIGZsb2F0
cworICAgICAqIEBwYXJhbSB4IGRlZmluZXMgdGhlIGZpcnN0IGNvb3JkaW5hdGUKKyAgICAgKiBA
cGFyYW0geSBkZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZQorICAgICAqIEByZXR1cm5zIHRo
ZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90eXBl
LmNvcHlGcm9tRmxvYXRzID0gZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAgdGhpcy54ID0geDsK
KyAgICAgICAgdGhpcy55ID0geTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIHRoZSBWZWN0b3IyIGNvb3JkaW5hdGVzIHdpdGggdGhlIGdpdmVuIGZs
b2F0cworICAgICAqIEBwYXJhbSB4IGRlZmluZXMgdGhlIGZpcnN0IGNvb3JkaW5hdGUKKyAgICAg
KiBAcGFyYW0geSBkZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZQorICAgICAqIEByZXR1cm5z
IHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90
eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvcHlGcm9t
RmxvYXRzKHgsIHkpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGFub3RoZXIgdmVjdG9y
IHdpdGggdGhlIGN1cnJlbnQgb25lCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIGRlZmluZXMg
dGhlIG90aGVyIHZlY3RvcgorICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjIgc2V0IHdpdGgg
dGhlIGFkZGl0aW9uIG9mIHRoZSBjdXJyZW50IFZlY3RvcjIgYW5kIHRoZSBnaXZlbiBvbmUgY29v
cmRpbmF0ZXMKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAo
b3RoZXJWZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHRoaXMueCArIG90aGVy
VmVjdG9yLngsIHRoaXMueSArIG90aGVyVmVjdG9yLnkpOworICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0cyB0aGUgInJlc3VsdCIgY29vcmRpbmF0ZXMgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhl
IGN1cnJlbnQgVmVjdG9yMiBhbmQgdGhlIGdpdmVuIG9uZSBjb29yZGluYXRlcworICAgICAqIEBw
YXJhbSBvdGhlclZlY3RvciBkZWZpbmVzIHRoZSBvdGhlciB2ZWN0b3IKKyAgICAgKiBAcGFyYW0g
cmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgdW5t
b2RpZmllZCBjdXJyZW50IFZlY3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlwZS5h
ZGRUb1JlZiA9IGZ1bmN0aW9uIChvdGhlclZlY3RvciwgcmVzdWx0KSB7CisgICAgICAgIHJlc3Vs
dC54ID0gdGhpcy54ICsgb3RoZXJWZWN0b3IueDsKKyAgICAgICAgcmVzdWx0LnkgPSB0aGlzLnkg
KyBvdGhlclZlY3Rvci55OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldCB0aGUgVmVjdG9yMiBjb29yZGluYXRlcyBieSBhZGRpbmcgdGhlIGdpdmVuIFZl
Y3RvcjIgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUg
b3RoZXIgdmVjdG9yCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3Iy
CisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuYWRkSW5QbGFjZSA9IGZ1bmN0aW9uIChv
dGhlclZlY3RvcikgeworICAgICAgICB0aGlzLnggKz0gb3RoZXJWZWN0b3IueDsKKyAgICAgICAg
dGhpcy55ICs9IG90aGVyVmVjdG9yLnk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyBhIG5ldyBWZWN0b3IyIGJ5IGFkZGluZyB0aGUgY3VycmVudCBW
ZWN0b3IyIGNvb3JkaW5hdGVzIHRvIHRoZSBnaXZlbiBWZWN0b3IzIHgsIHkgY29vcmRpbmF0ZXMK
KyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUgb3RoZXIgdmVjdG9yCisgICAg
ICogQHJldHVybnMgYSBuZXcgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90eXBl
LmFkZFZlY3RvcjMgPSBmdW5jdGlvbiAob3RoZXJWZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBWZWN0b3IyKHRoaXMueCArIG90aGVyVmVjdG9yLngsIHRoaXMueSArIG90aGVyVmVjdG9yLnkp
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIG5ldyBWZWN0b3IyIHNldCB3aXRoIHRo
ZSBzdWJ0cmFjdGVkIGNvb3JkaW5hdGVzIG9mIHRoZSBnaXZlbiBvbmUgZnJvbSB0aGUgY3VycmVu
dCBWZWN0b3IyCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIGRlZmluZXMgdGhlIG90aGVyIHZl
Y3RvcgorICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3Iy
LnByb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIChvdGhlclZlY3RvcikgeworICAgICAgICBy
ZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54IC0gb3RoZXJWZWN0b3IueCwgdGhpcy55IC0gb3RoZXJW
ZWN0b3IueSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSAicmVzdWx0IiBjb29y
ZGluYXRlcyB3aXRoIHRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgZ2l2ZW4gb25lIGZyb20gdGhlIGN1
cnJlbnQgVmVjdG9yMiBjb29yZGluYXRlcy4KKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVm
aW5lcyB0aGUgb3RoZXIgdmVjdG9yCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0
YXJnZXQgdmVjdG9yCisgICAgICogQHJldHVybnMgdGhlIHVubW9kaWZpZWQgY3VycmVudCBWZWN0
b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuc3VidHJhY3RUb1JlZiA9IGZ1bmN0
aW9uIChvdGhlclZlY3RvciwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0gdGhpcy54IC0g
b3RoZXJWZWN0b3IueDsKKyAgICAgICAgcmVzdWx0LnkgPSB0aGlzLnkgLSBvdGhlclZlY3Rvci55
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IGN1cnJlbnQgVmVjdG9yMiBjb29yZGluYXRlcyBieSBzdWJ0cmFjdGluZyBmcm9tIGl0IHRoZSBn
aXZlbiBvbmUgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0
aGUgb3RoZXIgdmVjdG9yCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0
b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuc3VidHJhY3RJblBsYWNlID0gZnVu
Y3Rpb24gKG90aGVyVmVjdG9yKSB7CisgICAgICAgIHRoaXMueCAtPSBvdGhlclZlY3Rvci54Owor
ICAgICAgICB0aGlzLnkgLT0gb3RoZXJWZWN0b3IueTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBNdWx0aXBsaWVzIGluIHBsYWNlIHRoZSBjdXJyZW50IFZl
Y3RvcjIgY29vcmRpbmF0ZXMgYnkgdGhlIGdpdmVuIG9uZXMKKyAgICAgKiBAcGFyYW0gb3RoZXJW
ZWN0b3IgZGVmaW5lcyB0aGUgb3RoZXIgdmVjdG9yCisgICAgICogQHJldHVybnMgdGhlIGN1cnJl
bnQgdXBkYXRlZCBWZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUubXVsdGlw
bHlJblBsYWNlID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yKSB7CisgICAgICAgIHRoaXMueCAqPSBv
dGhlclZlY3Rvci54OworICAgICAgICB0aGlzLnkgKj0gb3RoZXJWZWN0b3IueTsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3Rv
cjIgc2V0IHdpdGggdGhlIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBjdXJyZW50IFZlY3RvcjIgYW5k
IHRoZSBnaXZlbiBvbmUgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVm
aW5lcyB0aGUgb3RoZXIgdmVjdG9yCisgICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMgorICAg
ICAqLworICAgIFZlY3RvcjIucHJvdG90eXBlLm11bHRpcGx5ID0gZnVuY3Rpb24gKG90aGVyVmVj
dG9yKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMih0aGlzLnggKiBvdGhlclZlY3Rvci54
LCB0aGlzLnkgKiBvdGhlclZlY3Rvci55KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMg
InJlc3VsdCIgY29vcmRpbmF0ZXMgd2l0aCB0aGUgbXVsdGlwbGljYXRpb24gb2YgdGhlIGN1cnJl
bnQgVmVjdG9yMiBhbmQgdGhlIGdpdmVuIG9uZSBjb29yZGluYXRlcworICAgICAqIEBwYXJhbSBv
dGhlclZlY3RvciBkZWZpbmVzIHRoZSBvdGhlciB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gcmVzdWx0
IGRlZmluZXMgdGhlIHRhcmdldCB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgdW5tb2RpZmll
ZCBjdXJyZW50IFZlY3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlwZS5tdWx0aXBs
eVRvUmVmID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yLCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0
LnggPSB0aGlzLnggKiBvdGhlclZlY3Rvci54OworICAgICAgICByZXN1bHQueSA9IHRoaXMueSAq
IG90aGVyVmVjdG9yLnk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogR2V0cyBhIG5ldyBWZWN0b3IyIHNldCB3aXRoIHRoZSBWZWN0b3IyIGNvb3JkaW5hdGVz
IG11bHRpcGxpZWQgYnkgdGhlIGdpdmVuIGZsb2F0cworICAgICAqIEBwYXJhbSB4IGRlZmluZXMg
dGhlIGZpcnN0IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSBzZWNvbmQg
Y29vcmRpbmF0ZQorICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjIKKyAgICAgKi8KKyAgICBW
ZWN0b3IyLnByb3RvdHlwZS5tdWx0aXBseUJ5RmxvYXRzID0gZnVuY3Rpb24gKHgsIHkpIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHRoaXMueCAqIHgsIHRoaXMueSAqIHkpOworICAgIH07
CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IyIHNldCB3aXRoIHRoZSBWZWN0
b3IyIGNvb3JkaW5hdGVzIGRpdmlkZWQgYnkgdGhlIGdpdmVuIG9uZSBjb29yZGluYXRlcworICAg
ICAqIEBwYXJhbSBvdGhlclZlY3RvciBkZWZpbmVzIHRoZSBvdGhlciB2ZWN0b3IKKyAgICAgKiBA
cmV0dXJucyBhIG5ldyBWZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuZGl2
aWRlID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9y
Mih0aGlzLnggLyBvdGhlclZlY3Rvci54LCB0aGlzLnkgLyBvdGhlclZlY3Rvci55KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgdGhlICJyZXN1bHQiIGNvb3JkaW5hdGVzIHdpdGggdGhl
IFZlY3RvcjIgZGl2aWRlZCBieSB0aGUgZ2l2ZW4gb25lIGNvb3JkaW5hdGVzCisgICAgICogQHBh
cmFtIG90aGVyVmVjdG9yIGRlZmluZXMgdGhlIG90aGVyIHZlY3RvcgorICAgICAqIEBwYXJhbSBy
ZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IHZlY3RvcgorICAgICAqIEByZXR1cm5zIHRoZSB1bm1v
ZGlmaWVkIGN1cnJlbnQgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90eXBlLmRp
dmlkZVRvUmVmID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yLCByZXN1bHQpIHsKKyAgICAgICAgcmVz
dWx0LnggPSB0aGlzLnggLyBvdGhlclZlY3Rvci54OworICAgICAgICByZXN1bHQueSA9IHRoaXMu
eSAvIG90aGVyVmVjdG9yLnk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoq
CisgICAgICogRGl2aWRlcyB0aGUgY3VycmVudCBWZWN0b3IyIGNvb3JkaW5hdGVzIGJ5IHRoZSBn
aXZlbiBvbmVzCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIGRlZmluZXMgdGhlIG90aGVyIHZl
Y3RvcgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yMgorICAgICAq
LworICAgIFZlY3RvcjIucHJvdG90eXBlLmRpdmlkZUluUGxhY2UgPSBmdW5jdGlvbiAob3RoZXJW
ZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZGl2aWRlVG9SZWYob3RoZXJWZWN0b3IsIHRo
aXMpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIG5ldyBWZWN0b3IyIHdpdGggY3Vy
cmVudCBWZWN0b3IyIG5lZ2F0ZWQgY29vcmRpbmF0ZXMKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBW
ZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUubmVnYXRlID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoLXRoaXMueCwgLXRoaXMueSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBNdWx0aXBseSB0aGUgVmVjdG9yMiBjb29yZGluYXRlcyBieSBz
Y2FsZQorICAgICAqIEBwYXJhbSBzY2FsZSBkZWZpbmVzIHRoZSBzY2FsaW5nIGZhY3RvcgorICAg
ICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yMgorICAgICAqLworICAgIFZl
Y3RvcjIucHJvdG90eXBlLnNjYWxlSW5QbGFjZSA9IGZ1bmN0aW9uIChzY2FsZSkgeworICAgICAg
ICB0aGlzLnggKj0gc2NhbGU7CisgICAgICAgIHRoaXMueSAqPSBzY2FsZTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjIg
c2NhbGVkIGJ5ICJzY2FsZSIgZnJvbSB0aGUgY3VycmVudCBWZWN0b3IyCisgICAgICogQHBhcmFt
IHNjYWxlIGRlZmluZXMgdGhlIHNjYWxpbmcgZmFjdG9yCisgICAgICogQHJldHVybnMgYSBuZXcg
VmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24g
KHNjYWxlKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgVmVjdG9yMigwLCAwKTsKKyAgICAg
ICAgdGhpcy5zY2FsZVRvUmVmKHNjYWxlLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07CisgICAgLyoqCisgICAgICogU2NhbGUgdGhlIGN1cnJlbnQgVmVjdG9yMiB2YWx1
ZXMgYnkgYSBmYWN0b3IgdG8gYSBnaXZlbiBWZWN0b3IyCisgICAgICogQHBhcmFtIHNjYWxlIGRl
ZmluZXMgdGhlIHNjYWxlIGZhY3RvcgorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUg
VmVjdG9yMiBvYmplY3Qgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5z
IHRoZSB1bm1vZGlmaWVkIGN1cnJlbnQgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJv
dG90eXBlLnNjYWxlVG9SZWYgPSBmdW5jdGlvbiAoc2NhbGUsIHJlc3VsdCkgeworICAgICAgICBy
ZXN1bHQueCA9IHRoaXMueCAqIHNjYWxlOworICAgICAgICByZXN1bHQueSA9IHRoaXMueSAqIHNj
YWxlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNjYWxl
IHRoZSBjdXJyZW50IFZlY3RvcjIgdmFsdWVzIGJ5IGEgZmFjdG9yIGFuZCBhZGQgdGhlIHJlc3Vs
dCB0byBhIGdpdmVuIFZlY3RvcjIKKyAgICAgKiBAcGFyYW0gc2NhbGUgZGVmaW5lcyB0aGUgc2Nh
bGUgZmFjdG9yCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSBWZWN0b3IyIG9iamVj
dCB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0CisgICAgICogQHJldHVybnMgdGhlIHVubW9kaWZp
ZWQgY3VycmVudCBWZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuc2NhbGVB
bmRBZGRUb1JlZiA9IGZ1bmN0aW9uIChzY2FsZSwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54
ICs9IHRoaXMueCAqIHNjYWxlOworICAgICAgICByZXN1bHQueSArPSB0aGlzLnkgKiBzY2FsZTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9v
bGVhbiBpZiB0d28gdmVjdG9ycyBhcmUgZXF1YWxzCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9y
IGRlZmluZXMgdGhlIG90aGVyIHZlY3RvcgorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGdp
dmVuIHZlY3RvciBjb29yZGluYXRlcyBzdHJpY3RseSBlcXVhbCB0aGUgY3VycmVudCBWZWN0b3Iy
IG9uZXMKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAo
b3RoZXJWZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIG90aGVyVmVjdG9yICYmIHRoaXMueCA9PT0g
b3RoZXJWZWN0b3IueCAmJiB0aGlzLnkgPT09IG90aGVyVmVjdG9yLnk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpZiB0d28gdmVjdG9ycyBhcmUgZXF1YWxzICh1c2lu
ZyBhbiBlcHNpbG9uIHZhbHVlKQorICAgICAqIEBwYXJhbSBvdGhlclZlY3RvciBkZWZpbmVzIHRo
ZSBvdGhlciB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gZXBzaWxvbiBkZWZpbmVzIHRoZSBtaW5pbWFs
IGRpc3RhbmNlIHRvIGNvbnNpZGVyIGVxdWFsaXR5CisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0
aGUgZ2l2ZW4gdmVjdG9yIGNvb3JkaW5hdGVzIGFyZSBjbG9zZSB0byB0aGUgY3VycmVudCBvbmVz
IGJ5IGEgZGlzdGFuY2Ugb2YgZXBzaWxvbi4KKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlw
ZS5lcXVhbHNXaXRoRXBzaWxvbiA9IGZ1bmN0aW9uIChvdGhlclZlY3RvciwgZXBzaWxvbikgewor
ICAgICAgICBpZiAoZXBzaWxvbiA9PT0gdm9pZCAwKSB7IGVwc2lsb24gPSBfbWF0aF9jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRXBzaWxvbiJdOyB9CisgICAgICAgIHJl
dHVybiBvdGhlclZlY3RvciAmJiBfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siU2NhbGFyIl0uV2l0aGluRXBzaWxvbih0aGlzLngsIG90aGVyVmVjdG9yLngsIGVwc2ls
b24pICYmIF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIi
XS5XaXRoaW5FcHNpbG9uKHRoaXMueSwgb3RoZXJWZWN0b3IueSwgZXBzaWxvbik7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIGEgbmV3IFZlY3RvcjIgZnJvbSBjdXJyZW50IFZlY3RvcjIg
Zmxvb3JlZCB2YWx1ZXMKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IyCisgICAgICovCisg
ICAgVmVjdG9yMi5wcm90b3R5cGUuZmxvb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biBuZXcgVmVjdG9yMihNYXRoLmZsb29yKHRoaXMueCksIE1hdGguZmxvb3IodGhpcy55KSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbmV3IFZlY3RvcjIgZnJvbSBjdXJyZW50IFZl
Y3RvcjIgZmxvb3JlZCB2YWx1ZXMKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IyCisgICAg
ICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuZnJhY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiBuZXcgVmVjdG9yMih0aGlzLnggLSBNYXRoLmZsb29yKHRoaXMueCksIHRoaXMueSAt
IE1hdGguZmxvb3IodGhpcy55KSk7CisgICAgfTsKKyAgICAvLyBQcm9wZXJ0aWVzCisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyB0
aGUgdmVjdG9yIGxlbmd0aCAoZmxvYXQpCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUu
bGVuZ3RoID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAq
IHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRz
IHRoZSB2ZWN0b3Igc3F1YXJlZCBsZW5ndGgKKyAgICAgKiBAcmV0dXJucyB0aGUgdmVjdG9yIHNx
dWFyZWQgbGVuZ3RoIChmbG9hdCkKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlwZS5sZW5n
dGhTcXVhcmVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gKHRoaXMueCAqIHRoaXMu
eCArIHRoaXMueSAqIHRoaXMueSk7CisgICAgfTsKKyAgICAvLyBNZXRob2RzCisgICAgLyoqCisg
ICAgICogTm9ybWFsaXplIHRoZSB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1
cGRhdGVkIFZlY3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlwZS5ub3JtYWxpemUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aCgpOworICAgICAg
ICBpZiAobGVuID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgbnVtID0gMS4wIC8gbGVuOworICAgICAgICB0aGlzLnggKj0gbnVtOworICAg
ICAgICB0aGlzLnkgKj0gbnVtOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEdldHMgYSBuZXcgVmVjdG9yMiBjb3BpZWQgZnJvbSB0aGUgVmVjdG9yMgorICAg
ICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlw
ZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHRoaXMu
eCwgdGhpcy55KTsKKyAgICB9OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAgICAgKiBHZXRz
IGEgbmV3IFZlY3RvcjIoMCwgMCkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IyCisgICAg
ICovCisgICAgVmVjdG9yMi5aZXJvID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3
IFZlY3RvcjIoMCwgMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbmV3IFZlY3Rv
cjIoMSwgMSkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IyCisgICAgICovCisgICAgVmVj
dG9yMi5PbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMigxLCAx
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBuZXcgVmVjdG9yMiBzZXQgZnJvbSB0
aGUgZ2l2ZW4gaW5kZXggZWxlbWVudCBvZiB0aGUgZ2l2ZW4gYXJyYXkKKyAgICAgKiBAcGFyYW0g
YXJyYXkgZGVmaW5lcyB0aGUgZGF0YSBzb3VyY2UKKyAgICAgKiBAcGFyYW0gb2Zmc2V0IGRlZmlu
ZXMgdGhlIG9mZnNldCBpbiB0aGUgZGF0YSBzb3VyY2UKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBW
ZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5Gcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXks
IG9mZnNldCkgeworICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsgb2Zmc2V0ID0gMDsg
fQorICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoYXJyYXlbb2Zmc2V0XSwgYXJyYXlbb2Zmc2V0
ICsgMV0pOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyAicmVzdWx0IiBmcm9tIHRoZSBn
aXZlbiBpbmRleCBlbGVtZW50IG9mIHRoZSBnaXZlbiBhcnJheQorICAgICAqIEBwYXJhbSBhcnJh
eSBkZWZpbmVzIHRoZSBkYXRhIHNvdXJjZQorICAgICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0
aGUgb2Zmc2V0IGluIHRoZSBkYXRhIHNvdXJjZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5l
cyB0aGUgdGFyZ2V0IHZlY3RvcgorICAgICAqLworICAgIFZlY3RvcjIuRnJvbUFycmF5VG9SZWYg
PSBmdW5jdGlvbiAoYXJyYXksIG9mZnNldCwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0g
YXJyYXlbb2Zmc2V0XTsKKyAgICAgICAgcmVzdWx0LnkgPSBhcnJheVtvZmZzZXQgKyAxXTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBuZXcgVmVjdG9yMiBsb2NhdGVkIGZvciAiYW1v
dW50IiAoZmxvYXQpIG9uIHRoZSBDYXRtdWxsUm9tIHNwbGluZSBkZWZpbmVkIGJ5IHRoZSBnaXZl
biBmb3VyIFZlY3RvcjIKKyAgICAgKiBAcGFyYW0gdmFsdWUxIGRlZmluZXMgMXN0IHBvaW50IG9m
IGNvbnRyb2wKKyAgICAgKiBAcGFyYW0gdmFsdWUyIGRlZmluZXMgMm5kIHBvaW50IG9mIGNvbnRy
b2wKKyAgICAgKiBAcGFyYW0gdmFsdWUzIGRlZmluZXMgM3JkIHBvaW50IG9mIGNvbnRyb2wKKyAg
ICAgKiBAcGFyYW0gdmFsdWU0IGRlZmluZXMgNHRoIHBvaW50IG9mIGNvbnRyb2wKKyAgICAgKiBA
cGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGludGVycG9sYXRpb24gZmFjdG9yCisgICAgICogQHJl
dHVybnMgYSBuZXcgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIuQ2F0bXVsbFJvbSA9IGZ1
bmN0aW9uICh2YWx1ZTEsIHZhbHVlMiwgdmFsdWUzLCB2YWx1ZTQsIGFtb3VudCkgeworICAgICAg
ICB2YXIgc3F1YXJlZCA9IGFtb3VudCAqIGFtb3VudDsKKyAgICAgICAgdmFyIGN1YmVkID0gYW1v
dW50ICogc3F1YXJlZDsKKyAgICAgICAgdmFyIHggPSAwLjUgKiAoKCgoMi4wICogdmFsdWUyLngp
ICsgKCgtdmFsdWUxLnggKyB2YWx1ZTMueCkgKiBhbW91bnQpKSArCisgICAgICAgICAgICAoKCgo
KDIuMCAqIHZhbHVlMS54KSAtICg1LjAgKiB2YWx1ZTIueCkpICsgKDQuMCAqIHZhbHVlMy54KSkg
LSB2YWx1ZTQueCkgKiBzcXVhcmVkKSkgKworICAgICAgICAgICAgKCgoKC12YWx1ZTEueCArICgz
LjAgKiB2YWx1ZTIueCkpIC0gKDMuMCAqIHZhbHVlMy54KSkgKyB2YWx1ZTQueCkgKiBjdWJlZCkp
OworICAgICAgICB2YXIgeSA9IDAuNSAqICgoKCgyLjAgKiB2YWx1ZTIueSkgKyAoKC12YWx1ZTEu
eSArIHZhbHVlMy55KSAqIGFtb3VudCkpICsKKyAgICAgICAgICAgICgoKCgoMi4wICogdmFsdWUx
LnkpIC0gKDUuMCAqIHZhbHVlMi55KSkgKyAoNC4wICogdmFsdWUzLnkpKSAtIHZhbHVlNC55KSAq
IHNxdWFyZWQpKSArCisgICAgICAgICAgICAoKCgoLXZhbHVlMS55ICsgKDMuMCAqIHZhbHVlMi55
KSkgLSAoMy4wICogdmFsdWUzLnkpKSArIHZhbHVlNC55KSAqIGN1YmVkKSk7CisgICAgICAgIHJl
dHVybiBuZXcgVmVjdG9yMih4LCB5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBuZXcgVmVjdG9yMiBzZXQgd2l0aCBzYW1lIHRoZSBjb29yZGluYXRlcyB0aGFuICJ2YWx1ZSIg
b25lcyBpZiB0aGUgdmVjdG9yICJ2YWx1ZSIgaXMgaW4gdGhlIHNxdWFyZSBkZWZpbmVkIGJ5ICJt
aW4iIGFuZCAibWF4Ii4KKyAgICAgKiBJZiBhIGNvb3JkaW5hdGUgb2YgInZhbHVlIiBpcyBsb3dl
ciB0aGFuICJtaW4iIGNvb3JkaW5hdGVzLCB0aGUgcmV0dXJuZWQgVmVjdG9yMiBpcyBnaXZlbiB0
aGlzICJtaW4iIGNvb3JkaW5hdGUuCisgICAgICogSWYgYSBjb29yZGluYXRlIG9mICJ2YWx1ZSIg
aXMgZ3JlYXRlciB0aGFuICJtYXgiIGNvb3JkaW5hdGVzLCB0aGUgcmV0dXJuZWQgVmVjdG9yMiBp
cyBnaXZlbiB0aGlzICJtYXgiIGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5l
cyB0aGUgdmFsdWUgdG8gY2xhbXAKKyAgICAgKiBAcGFyYW0gbWluIGRlZmluZXMgdGhlIGxvd2Vy
IGxpbWl0CisgICAgICogQHBhcmFtIG1heCBkZWZpbmVzIHRoZSB1cHBlciBsaW1pdAorICAgICAq
IEByZXR1cm5zIGEgbmV3IFZlY3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3IyLkNsYW1wID0gZnVu
Y3Rpb24gKHZhbHVlLCBtaW4sIG1heCkgeworICAgICAgICB2YXIgeCA9IHZhbHVlLng7CisgICAg
ICAgIHggPSAoeCA+IG1heC54KSA/IG1heC54IDogeDsKKyAgICAgICAgeCA9ICh4IDwgbWluLngp
ID8gbWluLnggOiB4OworICAgICAgICB2YXIgeSA9IHZhbHVlLnk7CisgICAgICAgIHkgPSAoeSA+
IG1heC55KSA/IG1heC55IDogeTsKKyAgICAgICAgeSA9ICh5IDwgbWluLnkpID8gbWluLnkgOiB5
OworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoeCwgeSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjIgbG9jYXRlZCBmb3IgImFtb3VudCIgKGZsb2F0KSBv
biB0aGUgSGVybWl0ZSBzcGxpbmUgZGVmaW5lZCBieSB0aGUgdmVjdG9ycyAidmFsdWUxIiwgInZh
bHVlMyIsICJ0YW5nZW50MSIsICJ0YW5nZW50MiIKKyAgICAgKiBAcGFyYW0gdmFsdWUxIGRlZmlu
ZXMgdGhlIDFzdCBjb250cm9sIHBvaW50CisgICAgICogQHBhcmFtIHRhbmdlbnQxIGRlZmluZXMg
dGhlIG91dGdvaW5nIHRhbmdlbnQKKyAgICAgKiBAcGFyYW0gdmFsdWUyIGRlZmluZXMgdGhlIDJu
ZCBjb250cm9sIHBvaW50CisgICAgICogQHBhcmFtIHRhbmdlbnQyIGRlZmluZXMgdGhlIGluY29t
aW5nIHRhbmdlbnQKKyAgICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGludGVycG9sYXRp
b24gZmFjdG9yCisgICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMgorICAgICAqLworICAgIFZl
Y3RvcjIuSGVybWl0ZSA9IGZ1bmN0aW9uICh2YWx1ZTEsIHRhbmdlbnQxLCB2YWx1ZTIsIHRhbmdl
bnQyLCBhbW91bnQpIHsKKyAgICAgICAgdmFyIHNxdWFyZWQgPSBhbW91bnQgKiBhbW91bnQ7Cisg
ICAgICAgIHZhciBjdWJlZCA9IGFtb3VudCAqIHNxdWFyZWQ7CisgICAgICAgIHZhciBwYXJ0MSA9
ICgoMi4wICogY3ViZWQpIC0gKDMuMCAqIHNxdWFyZWQpKSArIDEuMDsKKyAgICAgICAgdmFyIHBh
cnQyID0gKC0yLjAgKiBjdWJlZCkgKyAoMy4wICogc3F1YXJlZCk7CisgICAgICAgIHZhciBwYXJ0
MyA9IChjdWJlZCAtICgyLjAgKiBzcXVhcmVkKSkgKyBhbW91bnQ7CisgICAgICAgIHZhciBwYXJ0
NCA9IGN1YmVkIC0gc3F1YXJlZDsKKyAgICAgICAgdmFyIHggPSAoKCh2YWx1ZTEueCAqIHBhcnQx
KSArICh2YWx1ZTIueCAqIHBhcnQyKSkgKyAodGFuZ2VudDEueCAqIHBhcnQzKSkgKyAodGFuZ2Vu
dDIueCAqIHBhcnQ0KTsKKyAgICAgICAgdmFyIHkgPSAoKCh2YWx1ZTEueSAqIHBhcnQxKSArICh2
YWx1ZTIueSAqIHBhcnQyKSkgKyAodGFuZ2VudDEueSAqIHBhcnQzKSkgKyAodGFuZ2VudDIueSAq
IHBhcnQ0KTsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHgsIHkpOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IyIGxvY2F0ZWQgZm9yICJhbW91bnQiIChm
bG9hdCkgb24gdGhlIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIHZlY3RvciAic3Rh
cnQiIGFkbiB0aGUgdmVjdG9yICJlbmQiLgorICAgICAqIEBwYXJhbSBzdGFydCBkZWZpbmVzIHRo
ZSBzdGFydCB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gZW5kIGRlZmluZXMgdGhlIGVuZCB2ZWN0b3IK
KyAgICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGludGVycG9sYXRpb24gZmFjdG9yCisg
ICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIuTGVycCA9
IGZ1bmN0aW9uIChzdGFydCwgZW5kLCBhbW91bnQpIHsKKyAgICAgICAgdmFyIHggPSBzdGFydC54
ICsgKChlbmQueCAtIHN0YXJ0LngpICogYW1vdW50KTsKKyAgICAgICAgdmFyIHkgPSBzdGFydC55
ICsgKChlbmQueSAtIHN0YXJ0LnkpICogYW1vdW50KTsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0
b3IyKHgsIHkpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZG90IHByb2R1Y3Qg
b2YgdGhlIHZlY3RvciAibGVmdCIgYW5kIHRoZSB2ZWN0b3IgInJpZ2h0IgorICAgICAqIEBwYXJh
bSBsZWZ0IGRlZmluZXMgZmlyc3QgdmVjdG9yCisgICAgICogQHBhcmFtIHJpZ2h0IGRlZmluZXMg
c2Vjb25kIHZlY3RvcgorICAgICAqIEByZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCAoZmxvYXQpCisg
ICAgICovCisgICAgVmVjdG9yMi5Eb3QgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsKKyAgICAg
ICAgcmV0dXJuIGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55OworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IyIGVxdWFsIHRvIHRoZSBub3JtYWxp
emVkIGdpdmVuIHZlY3RvcgorICAgICAqIEBwYXJhbSB2ZWN0b3IgZGVmaW5lcyB0aGUgdmVjdG9y
IHRvIG5vcm1hbGl6ZQorICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjIKKyAgICAgKi8KKyAg
ICBWZWN0b3IyLk5vcm1hbGl6ZSA9IGZ1bmN0aW9uICh2ZWN0b3IpIHsKKyAgICAgICAgdmFyIG5l
d1ZlY3RvciA9IHZlY3Rvci5jbG9uZSgpOworICAgICAgICBuZXdWZWN0b3Iubm9ybWFsaXplKCk7
CisgICAgICAgIHJldHVybiBuZXdWZWN0b3I7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRz
IGEgbmV3IFZlY3RvcjIgc2V0IHdpdGggdGhlIG1pbmltYWwgY29vcmRpbmF0ZSB2YWx1ZXMgZnJv
bSB0aGUgImxlZnQiIGFuZCAicmlnaHQiIHZlY3RvcnMKKyAgICAgKiBAcGFyYW0gbGVmdCBkZWZp
bmVzIDFzdCB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gcmlnaHQgZGVmaW5lcyAybmQgdmVjdG9yCisg
ICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIuTWluaW1p
emUgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsKKyAgICAgICAgdmFyIHggPSAobGVmdC54IDwg
cmlnaHQueCkgPyBsZWZ0LnggOiByaWdodC54OworICAgICAgICB2YXIgeSA9IChsZWZ0LnkgPCBy
aWdodC55KSA/IGxlZnQueSA6IHJpZ2h0Lnk7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMih4
LCB5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBuZXcgVmVjdG8yIHNldCB3aXRo
IHRoZSBtYXhpbWFsIGNvb3JkaW5hdGUgdmFsdWVzIGZyb20gdGhlICJsZWZ0IiBhbmQgInJpZ2h0
IiB2ZWN0b3JzCisgICAgICogQHBhcmFtIGxlZnQgZGVmaW5lcyAxc3QgdmVjdG9yCisgICAgICog
QHBhcmFtIHJpZ2h0IGRlZmluZXMgMm5kIHZlY3RvcgorICAgICAqIEByZXR1cm5zIGEgbmV3IFZl
Y3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3IyLk1heGltaXplID0gZnVuY3Rpb24gKGxlZnQsIHJp
Z2h0KSB7CisgICAgICAgIHZhciB4ID0gKGxlZnQueCA+IHJpZ2h0LngpID8gbGVmdC54IDogcmln
aHQueDsKKyAgICAgICAgdmFyIHkgPSAobGVmdC55ID4gcmlnaHQueSkgPyBsZWZ0LnkgOiByaWdo
dC55OworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoeCwgeSk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBHZXRzIGEgbmV3IFZlY3RvcjIgc2V0IHdpdGggdGhlIHRyYW5zZm9ybWVkIGNvb3Jk
aW5hdGVzIG9mIHRoZSBnaXZlbiB2ZWN0b3IgYnkgdGhlIGdpdmVuIHRyYW5zZm9ybWF0aW9uIG1h
dHJpeAorICAgICAqIEBwYXJhbSB2ZWN0b3IgZGVmaW5lcyB0aGUgdmVjdG9yIHRvIHRyYW5zZm9y
bQorICAgICAqIEBwYXJhbSB0cmFuc2Zvcm1hdGlvbiBkZWZpbmVzIHRoZSBtYXRyaXggdG8gYXBw
bHkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5U
cmFuc2Zvcm0gPSBmdW5jdGlvbiAodmVjdG9yLCB0cmFuc2Zvcm1hdGlvbikgeworICAgICAgICB2
YXIgciA9IFZlY3RvcjIuWmVybygpOworICAgICAgICBWZWN0b3IyLlRyYW5zZm9ybVRvUmVmKHZl
Y3RvciwgdHJhbnNmb3JtYXRpb24sIHIpOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFRyYW5zZm9ybXMgdGhlIGdpdmVuIHZlY3RvciBjb29yZGluYXRlcyBieSB0
aGUgZ2l2ZW4gdHJhbnNmb3JtYXRpb24gbWF0cml4IGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0
aGUgdmVjdG9yICJyZXN1bHQiIGNvb3JkaW5hdGVzCisgICAgICogQHBhcmFtIHZlY3RvciBkZWZp
bmVzIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtCisgICAgICogQHBhcmFtIHRyYW5zZm9ybWF0aW9u
IGRlZmluZXMgdGhlIG1hdHJpeCB0byBhcHBseQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5l
cyB0aGUgdGFyZ2V0IHZlY3RvcgorICAgICAqLworICAgIFZlY3RvcjIuVHJhbnNmb3JtVG9SZWYg
PSBmdW5jdGlvbiAodmVjdG9yLCB0cmFuc2Zvcm1hdGlvbiwgcmVzdWx0KSB7CisgICAgICAgIHZh
ciBtID0gdHJhbnNmb3JtYXRpb24ubTsKKyAgICAgICAgdmFyIHggPSAodmVjdG9yLnggKiBtWzBd
KSArICh2ZWN0b3IueSAqIG1bNF0pICsgbVsxMl07CisgICAgICAgIHZhciB5ID0gKHZlY3Rvci54
ICogbVsxXSkgKyAodmVjdG9yLnkgKiBtWzVdKSArIG1bMTNdOworICAgICAgICByZXN1bHQueCA9
IHg7CisgICAgICAgIHJlc3VsdC55ID0geTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGVy
bWluZXMgaWYgYSBnaXZlbiB2ZWN0b3IgaXMgaW5jbHVkZWQgaW4gYSB0cmlhbmdsZQorICAgICAq
IEBwYXJhbSBwIGRlZmluZXMgdGhlIHZlY3RvciB0byB0ZXN0CisgICAgICogQHBhcmFtIHAwIGRl
ZmluZXMgMXN0IHRyaWFuZ2xlIHBvaW50CisgICAgICogQHBhcmFtIHAxIGRlZmluZXMgMm5kIHRy
aWFuZ2xlIHBvaW50CisgICAgICogQHBhcmFtIHAyIGRlZmluZXMgM3JkIHRyaWFuZ2xlIHBvaW50
CisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgcG9pbnQgInAiIGlzIGluIHRoZSB0cmlhbmds
ZSBkZWZpbmVkIGJ5IHRoZSB2ZXJ0b3JzICJwMCIsICJwMSIsICJwMiIKKyAgICAgKi8KKyAgICBW
ZWN0b3IyLlBvaW50SW5UcmlhbmdsZSA9IGZ1bmN0aW9uIChwLCBwMCwgcDEsIHAyKSB7CisgICAg
ICAgIHZhciBhID0gMSAvIDIgKiAoLXAxLnkgKiBwMi54ICsgcDAueSAqICgtcDEueCArIHAyLngp
ICsgcDAueCAqIChwMS55IC0gcDIueSkgKyBwMS54ICogcDIueSk7CisgICAgICAgIHZhciBzaWdu
ID0gYSA8IDAgPyAtMSA6IDE7CisgICAgICAgIHZhciBzID0gKHAwLnkgKiBwMi54IC0gcDAueCAq
IHAyLnkgKyAocDIueSAtIHAwLnkpICogcC54ICsgKHAwLnggLSBwMi54KSAqIHAueSkgKiBzaWdu
OworICAgICAgICB2YXIgdCA9IChwMC54ICogcDEueSAtIHAwLnkgKiBwMS54ICsgKHAwLnkgLSBw
MS55KSAqIHAueCArIChwMS54IC0gcDAueCkgKiBwLnkpICogc2lnbjsKKyAgICAgICAgcmV0dXJu
IHMgPiAwICYmIHQgPiAwICYmIChzICsgdCkgPCAyICogYSAqIHNpZ247CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB2ZWN0b3JzICJ2YWx1ZTEi
IGFuZCAidmFsdWUyIgorICAgICAqIEBwYXJhbSB2YWx1ZTEgZGVmaW5lcyBmaXJzdCB2ZWN0b3IK
KyAgICAgKiBAcGFyYW0gdmFsdWUyIGRlZmluZXMgc2Vjb25kIHZlY3RvcgorICAgICAqIEByZXR1
cm5zIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHZlY3RvcnMKKyAgICAgKi8KKyAgICBWZWN0b3IyLkRp
c3RhbmNlID0gZnVuY3Rpb24gKHZhbHVlMSwgdmFsdWUyKSB7CisgICAgICAgIHJldHVybiBNYXRo
LnNxcnQoVmVjdG9yMi5EaXN0YW5jZVNxdWFyZWQodmFsdWUxLCB2YWx1ZTIpKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiB0aGUg
dmVjdG9ycyAidmFsdWUxIiBhbmQgInZhbHVlMiIKKyAgICAgKiBAcGFyYW0gdmFsdWUxIGRlZmlu
ZXMgZmlyc3QgdmVjdG9yCisgICAgICogQHBhcmFtIHZhbHVlMiBkZWZpbmVzIHNlY29uZCB2ZWN0
b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgc3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIHZlY3RvcnMK
KyAgICAgKi8KKyAgICBWZWN0b3IyLkRpc3RhbmNlU3F1YXJlZCA9IGZ1bmN0aW9uICh2YWx1ZTEs
IHZhbHVlMikgeworICAgICAgICB2YXIgeCA9IHZhbHVlMS54IC0gdmFsdWUyLng7CisgICAgICAg
IHZhciB5ID0gdmFsdWUxLnkgLSB2YWx1ZTIueTsKKyAgICAgICAgcmV0dXJuICh4ICogeCkgKyAo
eSAqIHkpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIG5ldyBWZWN0b3IyIGxvY2F0
ZWQgYXQgdGhlIGNlbnRlciBvZiB0aGUgdmVjdG9ycyAidmFsdWUxIiBhbmQgInZhbHVlMiIKKyAg
ICAgKiBAcGFyYW0gdmFsdWUxIGRlZmluZXMgZmlyc3QgdmVjdG9yCisgICAgICogQHBhcmFtIHZh
bHVlMiBkZWZpbmVzIHNlY29uZCB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3Iy
CisgICAgICovCisgICAgVmVjdG9yMi5DZW50ZXIgPSBmdW5jdGlvbiAodmFsdWUxLCB2YWx1ZTIp
IHsKKyAgICAgICAgdmFyIGNlbnRlciA9IHZhbHVlMS5hZGQodmFsdWUyKTsKKyAgICAgICAgY2Vu
dGVyLnNjYWxlSW5QbGFjZSgwLjUpOworICAgICAgICByZXR1cm4gY2VudGVyOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgc2hvcnRlc3QgZGlzdGFuY2UgKGZsb2F0KSBiZXR3ZWVu
IHRoZSBwb2ludCAicCIgYW5kIHRoZSBzZWdtZW50IGRlZmluZWQgYnkgdGhlIHR3byBwb2ludHMg
InNlZ0EiIGFuZCAic2VnQiIuCisgICAgICogQHBhcmFtIHAgZGVmaW5lcyB0aGUgbWlkZGxlIHBv
aW50CisgICAgICogQHBhcmFtIHNlZ0EgZGVmaW5lcyBvbmUgcG9pbnQgb2YgdGhlIHNlZ21lbnQK
KyAgICAgKiBAcGFyYW0gc2VnQiBkZWZpbmVzIHRoZSBvdGhlciBwb2ludCBvZiB0aGUgc2VnbWVu
dAorICAgICAqIEByZXR1cm5zIHRoZSBzaG9ydGVzdCBkaXN0YW5jZQorICAgICAqLworICAgIFZl
Y3RvcjIuRGlzdGFuY2VPZlBvaW50RnJvbVNlZ21lbnQgPSBmdW5jdGlvbiAocCwgc2VnQSwgc2Vn
QikgeworICAgICAgICB2YXIgbDIgPSBWZWN0b3IyLkRpc3RhbmNlU3F1YXJlZChzZWdBLCBzZWdC
KTsKKyAgICAgICAgaWYgKGwyID09PSAwLjApIHsKKyAgICAgICAgICAgIHJldHVybiBWZWN0b3Iy
LkRpc3RhbmNlKHAsIHNlZ0EpOworICAgICAgICB9CisgICAgICAgIHZhciB2ID0gc2VnQi5zdWJ0
cmFjdChzZWdBKTsKKyAgICAgICAgdmFyIHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBWZWN0
b3IyLkRvdChwLnN1YnRyYWN0KHNlZ0EpLCB2KSAvIGwyKSk7CisgICAgICAgIHZhciBwcm9qID0g
c2VnQS5hZGQodi5tdWx0aXBseUJ5RmxvYXRzKHQsIHQpKTsKKyAgICAgICAgcmV0dXJuIFZlY3Rv
cjIuRGlzdGFuY2UocCwgcHJvaik7CisgICAgfTsKKyAgICByZXR1cm4gVmVjdG9yMjsKK30oKSk7
CisKKy8qKgorICogQ2xhc3NlZCB1c2VkIHRvIHN0b3JlICh4LHkseikgdmVjdG9yIHJlcHJlc2Vu
dGF0aW9uCisgKiBBIFZlY3RvcjMgaXMgdGhlIG1haW4gb2JqZWN0IHVzZWQgaW4gM0QgZ2VvbWV0
cnkKKyAqIEl0IGNhbiByZXByZXNlbnQgZXRpaGVyIHRoZSBjb29yZGluYXRlcyBvZiBhIHBvaW50
IHRoZSBzcGFjZSwgZWl0aGVyIGEgZGlyZWN0aW9uCisgKiBSZW1pbmRlcjoganMgdXNlcyBhIGxl
ZnQgaGFuZGVkIGZvcndhcmQgZmFjaW5nIHN5c3RlbQorICovCit2YXIgVmVjdG9yMyA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFZl
Y3RvcjMgb2JqZWN0IGZyb20gdGhlIGdpdmVuIHgsIHksIHogKGZsb2F0cykgY29vcmRpbmF0ZXMu
CisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgZmlyc3QgY29vcmRpbmF0ZXMgKG9uIFggYXhp
cykKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZXMgKG9uIFkg
YXhpcykKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB0aGlyZCBjb29yZGluYXRlcyAob24g
WiBheGlzKQorICAgICAqLworICAgIGZ1bmN0aW9uIFZlY3RvcjMoCisgICAgLyoqCisgICAgICog
RGVmaW5lcyB0aGUgZmlyc3QgY29vcmRpbmF0ZXMgKG9uIFggYXhpcykKKyAgICAgKi8KKyAgICB4
LCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZXMgKG9uIFkg
YXhpcykKKyAgICAgKi8KKyAgICB5LCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSB0aGly
ZCBjb29yZGluYXRlcyAob24gWiBheGlzKQorICAgICAqLworICAgIHopIHsKKyAgICAgICAgaWYg
KHggPT09IHZvaWQgMCkgeyB4ID0gMDsgfQorICAgICAgICBpZiAoeSA9PT0gdm9pZCAwKSB7IHkg
PSAwOyB9CisgICAgICAgIGlmICh6ID09PSB2b2lkIDApIHsgeiA9IDA7IH0KKyAgICAgICAgdGhp
cy54ID0geDsKKyAgICAgICAgdGhpcy55ID0geTsKKyAgICAgICAgdGhpcy56ID0gejsKKyAgICB9
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUg
VmVjdG9yMworICAgICAqIEByZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIFZlY3RvcjMgY29vcmRp
bmF0ZXMuCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiAie1g6ICIgKyB0aGlzLnggKyAiIFk6IiArIHRoaXMueSAr
ICIgWjoiICsgdGhpcy56ICsgIn0iOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
Y2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBzdHJpbmcgIlZlY3RvcjMiCisgICAgICov
CisgICAgVmVjdG9yMy5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIlZlY3RvcjMiOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0
aGUgVmVjdG9yMyBoYXNoIGNvZGUKKyAgICAgKiBAcmV0dXJucyBhIG51bWJlciB3aGljaCB0ZW5k
cyB0byBiZSB1bmlxdWUgYmV0d2VlbiBWZWN0b3IzIGluc3RhbmNlcworICAgICAqLworICAgIFZl
Y3RvcjMucHJvdG90eXBlLmdldEhhc2hDb2RlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIg
aGFzaCA9IHRoaXMueCB8IDA7CisgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAodGhpcy55
IHwgMCk7CisgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAodGhpcy56IHwgMCk7CisgICAg
ICAgIHJldHVybiBoYXNoOworICAgIH07CisgICAgLy8gT3BlcmF0b3JzCisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRocmVlIGVsZW1lbnRzIDogdGhlIGNvb3Jk
aW5hdGVzIG9mIHRoZSBWZWN0b3IzCisgICAgICogQHJldHVybnMgYSBuZXcgYXJyYXkgb2YgbnVt
YmVycworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLmFzQXJyYXkgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICAgICAgdGhpcy50b0FycmF5KHJlc3Vs
dCwgMCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQ
b3B1bGF0ZXMgdGhlIGdpdmVuIGFycmF5IG9yIEZsb2F0MzJBcnJheSBmcm9tIHRoZSBnaXZlbiBp
bmRleCB3aXRoIHRoZSBzdWNjZXNzaXZlIGNvb3JkaW5hdGVzIG9mIHRoZSBWZWN0b3IzCisgICAg
ICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIGRlc3RpbmF0aW9uIGFycmF5CisgICAgICogQHBh
cmFtIGluZGV4IGRlZmluZXMgdGhlIG9mZnNldCBpbiB0aGUgZGVzdGluYXRpb24gYXJyYXkKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5w
cm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIChhcnJheSwgaW5kZXgpIHsKKyAgICAgICAgaWYg
KGluZGV4ID09PSB2b2lkIDApIHsgaW5kZXggPSAwOyB9CisgICAgICAgIGFycmF5W2luZGV4XSA9
IHRoaXMueDsKKyAgICAgICAgYXJyYXlbaW5kZXggKyAxXSA9IHRoaXMueTsKKyAgICAgICAgYXJy
YXlbaW5kZXggKyAyXSA9IHRoaXMuejsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGUgY3VycmVudCBWZWN0b3IzIGludG8gYSBxdWF0ZXJu
aW9uIChjb25zaWRlcmluZyB0aGF0IHRoZSBWZWN0b3IzIGNvbnRhaW5zIEV1bGVyIGFuZ2xlcyBy
ZXByZXNlbnRhdGlvbiBvZiBhIHJvdGF0aW9uKQorICAgICAqIEByZXR1cm5zIGEgbmV3IFF1YXRl
cm5pb24gb2JqZWN0LCBjb21wdXRlZCBmcm9tIHRoZSBWZWN0b3IzIGNvb3JkaW5hdGVzCisgICAg
ICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUudG9RdWF0ZXJuaW9uID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gUXVhdGVybmlvbi5Sb3RhdGlvbllhd1BpdGNoUm9sbCh0aGlzLnksIHRo
aXMueCwgdGhpcy56KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgdGhlIGdpdmVuIHZl
Y3RvciB0byB0aGUgY3VycmVudCBWZWN0b3IzCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIGRl
ZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBk
YXRlZCBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuYWRkSW5QbGFjZSA9
IGZ1bmN0aW9uIChvdGhlclZlY3RvcikgeworICAgICAgICByZXR1cm4gdGhpcy5hZGRJblBsYWNl
RnJvbUZsb2F0cyhvdGhlclZlY3Rvci54LCBvdGhlclZlY3Rvci55LCBvdGhlclZlY3Rvci56KTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIHRvIHRo
ZSBjdXJyZW50IFZlY3RvcjMKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB4IGNvb3JkaW5h
dGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5IGNvb3JkaW5h
dGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB6IGNvb3JkaW5h
dGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZl
Y3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLnByb3RvdHlwZS5hZGRJblBsYWNlRnJvbUZsb2F0
cyA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7CisgICAgICAgIHRoaXMueCArPSB4OworICAgICAgICB0
aGlzLnkgKz0geTsKKyAgICAgICAgdGhpcy56ICs9IHo7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIG5ldyBWZWN0b3IzLCByZXN1bHQgb2YgdGhl
IGFkZGl0aW9uIHRoZSBjdXJyZW50IFZlY3RvcjMgYW5kIHRoZSBnaXZlbiB2ZWN0b3IKKyAgICAg
KiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBA
cmV0dXJucyB0aGUgcmVzdWx0aW5nIFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLnByb3Rv
dHlwZS5hZGQgPSBmdW5jdGlvbiAob3RoZXJWZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBW
ZWN0b3IzKHRoaXMueCArIG90aGVyVmVjdG9yLngsIHRoaXMueSArIG90aGVyVmVjdG9yLnksIHRo
aXMueiArIG90aGVyVmVjdG9yLnopOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyB0aGUg
Y3VycmVudCBWZWN0b3IzIHRvIHRoZSBnaXZlbiBvbmUgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGlu
IHRoZSB2ZWN0b3IgInJlc3VsdCIKKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0
aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3Rv
cjMgb2JqZWN0IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y3VycmVudCBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuYWRkVG9SZWYg
PSBmdW5jdGlvbiAob3RoZXJWZWN0b3IsIHJlc3VsdCkgeworICAgICAgICByZXR1cm4gcmVzdWx0
LmNvcHlGcm9tRmxvYXRzKHRoaXMueCArIG90aGVyVmVjdG9yLngsIHRoaXMueSArIG90aGVyVmVj
dG9yLnksIHRoaXMueiArIG90aGVyVmVjdG9yLnopOworICAgIH07CisgICAgLyoqCisgICAgICog
U3VidHJhY3QgdGhlIGdpdmVuIHZlY3RvciBmcm9tIHRoZSBjdXJyZW50IFZlY3RvcjMKKyAgICAg
KiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBA
cmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3Iz
LnByb3RvdHlwZS5zdWJ0cmFjdEluUGxhY2UgPSBmdW5jdGlvbiAob3RoZXJWZWN0b3IpIHsKKyAg
ICAgICAgdGhpcy54IC09IG90aGVyVmVjdG9yLng7CisgICAgICAgIHRoaXMueSAtPSBvdGhlclZl
Y3Rvci55OworICAgICAgICB0aGlzLnogLT0gb3RoZXJWZWN0b3IuejsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMsIHJl
c3VsdCBvZiB0aGUgc3VidHJhY3Rpb24gb2YgdGhlIGdpdmVuIHZlY3RvciBmcm9tIHRoZSBjdXJy
ZW50IFZlY3RvcjMKKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUgc2Vjb25k
IG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIFZlY3RvcjMKKyAgICAgKi8K
KyAgICBWZWN0b3IzLnByb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIChvdGhlclZlY3Rvcikg
eworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54IC0gb3RoZXJWZWN0b3IueCwgdGhp
cy55IC0gb3RoZXJWZWN0b3IueSwgdGhpcy56IC0gb3RoZXJWZWN0b3Iueik7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTdWJ0cmFjdHMgdGhlIGdpdmVuIHZlY3RvciBmcm9tIHRoZSBjdXJyZW50
IFZlY3RvcjMgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSB2ZWN0b3IgInJlc3VsdCIuCisg
ICAgICogQHBhcmFtIG90aGVyVmVjdG9yIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAg
ICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSBWZWN0b3IzIG9iamVjdCB3aGVyZSB0byBzdG9y
ZSB0aGUgcmVzdWx0CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgVmVjdG9yMworICAgICAq
LworICAgIFZlY3RvcjMucHJvdG90eXBlLnN1YnRyYWN0VG9SZWYgPSBmdW5jdGlvbiAob3RoZXJW
ZWN0b3IsIHJlc3VsdCkgeworICAgICAgICByZXR1cm4gdGhpcy5zdWJ0cmFjdEZyb21GbG9hdHNU
b1JlZihvdGhlclZlY3Rvci54LCBvdGhlclZlY3Rvci55LCBvdGhlclZlY3Rvci56LCByZXN1bHQp
OworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRo
IHRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgZ2l2ZW4gZmxvYXRzIGZyb20gdGhlIGN1cnJlbnQgVmVj
dG9yMyBjb29yZGluYXRlcworICAgICAqIEBwYXJhbSB4IGRlZmluZXMgdGhlIHggY29vcmRpbmF0
ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgdGhlIHkgY29vcmRpbmF0
ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEBwYXJhbSB6IGRlZmluZXMgdGhlIHogY29vcmRpbmF0
ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgVmVjdG9yMwor
ICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLnN1YnRyYWN0RnJvbUZsb2F0cyA9IGZ1bmN0
aW9uICh4LCB5LCB6KSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyh0aGlzLnggLSB4LCB0
aGlzLnkgLSB5LCB0aGlzLnogLSB6KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFN1YnRyYWN0
cyB0aGUgZ2l2ZW4gZmxvYXRzIGZyb20gdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBh
bmQgc2V0IHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIgd2l0aCB0aGlzIHJlc3VsdAorICAgICAq
IEBwYXJhbSB4IGRlZmluZXMgdGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAq
IEBwYXJhbSB5IGRlZmluZXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAq
IEBwYXJhbSB6IGRlZmluZXMgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAq
IEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgVmVjdG9yMyBvYmplY3Qgd2hlcmUgdG8gc3RvcmUg
dGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IFZlY3RvcjMKKyAgICAgKi8K
KyAgICBWZWN0b3IzLnByb3RvdHlwZS5zdWJ0cmFjdEZyb21GbG9hdHNUb1JlZiA9IGZ1bmN0aW9u
ICh4LCB5LCB6LCByZXN1bHQpIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3B5RnJvbUZsb2F0
cyh0aGlzLnggLSB4LCB0aGlzLnkgLSB5LCB0aGlzLnogLSB6KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEdldHMgYSBuZXcgVmVjdG9yMyBzZXQgd2l0aCB0aGUgY3VycmVudCBWZWN0b3IzIG5l
Z2F0ZWQgY29vcmRpbmF0ZXMKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IzCisgICAgICov
CisgICAgVmVjdG9yMy5wcm90b3R5cGUubmVnYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gbmV3IFZlY3RvcjMoLXRoaXMueCwgLXRoaXMueSwgLXRoaXMueik7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBNdWx0aXBsaWVzIHRoZSBWZWN0b3IzIGNvb3JkaW5hdGVzIGJ5IHRoZSBm
bG9hdCAic2NhbGUiCisgICAgICogQHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIG11bHRpcGxpZXIg
ZmFjdG9yCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzCisgICAg
ICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuc2NhbGVJblBsYWNlID0gZnVuY3Rpb24gKHNjYWxl
KSB7CisgICAgICAgIHRoaXMueCAqPSBzY2FsZTsKKyAgICAgICAgdGhpcy55ICo9IHNjYWxlOwor
ICAgICAgICB0aGlzLnogKj0gc2NhbGU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRoIHRoZSBjdXJyZW50
IFZlY3RvcjMgY29vcmRpbmF0ZXMgbXVsdGlwbGllZCBieSB0aGUgZmxvYXQgInNjYWxlIgorICAg
ICAqIEBwYXJhbSBzY2FsZSBkZWZpbmVzIHRoZSBtdWx0aXBsaWVyIGZhY3RvcgorICAgICAqIEBy
ZXR1cm5zIGEgbmV3IFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLnByb3RvdHlwZS5zY2Fs
ZSA9IGZ1bmN0aW9uIChzY2FsZSkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54
ICogc2NhbGUsIHRoaXMueSAqIHNjYWxlLCB0aGlzLnogKiBzY2FsZSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBNdWx0aXBsaWVzIHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMgYnkg
dGhlIGZsb2F0ICJzY2FsZSIgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBnaXZlbiB2ZWN0
b3IgInJlc3VsdCIgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gc2NhbGUgZGVmaW5lcyB0aGUg
bXVsdGlwbGllciBmYWN0b3IKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3Rv
cjMgb2JqZWN0IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y3VycmVudCBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuc2NhbGVUb1Jl
ZiA9IGZ1bmN0aW9uIChzY2FsZSwgcmVzdWx0KSB7CisgICAgICAgIHJldHVybiByZXN1bHQuY29w
eUZyb21GbG9hdHModGhpcy54ICogc2NhbGUsIHRoaXMueSAqIHNjYWxlLCB0aGlzLnogKiBzY2Fs
ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0aGUgY3VycmVudCBWZWN0b3IzIHZh
bHVlcyBieSBhIGZhY3RvciBhbmQgYWRkIHRoZSByZXN1bHQgdG8gYSBnaXZlbiBWZWN0b3IzCisg
ICAgICogQHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxlIGZhY3RvcgorICAgICAqIEBwYXJh
bSByZXN1bHQgZGVmaW5lcyB0aGUgVmVjdG9yMyBvYmplY3Qgd2hlcmUgdG8gc3RvcmUgdGhlIHJl
c3VsdAorICAgICAqIEByZXR1cm5zIHRoZSB1bm1vZGlmaWVkIGN1cnJlbnQgVmVjdG9yMworICAg
ICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLnNjYWxlQW5kQWRkVG9SZWYgPSBmdW5jdGlvbiAo
c2NhbGUsIHJlc3VsdCkgeworICAgICAgICByZXR1cm4gcmVzdWx0LmFkZEluUGxhY2VGcm9tRmxv
YXRzKHRoaXMueCAqIHNjYWxlLCB0aGlzLnkgKiBzY2FsZSwgdGhpcy56ICogc2NhbGUpOworICAg
IH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IFZlY3RvcjMg
YW5kIHRoZSBnaXZlbiB2ZWN0b3IgY29vcmRpbmF0ZXMgYXJlIHN0cmljdGx5IGVxdWFsCisgICAg
ICogQHBhcmFtIG90aGVyVmVjdG9yIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICog
QHJldHVybnMgdHJ1ZSBpZiBib3RoIHZlY3RvcnMgYXJlIGVxdWFscworICAgICAqLworICAgIFZl
Y3RvcjMucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlclZlY3RvcikgeworICAgICAg
ICByZXR1cm4gb3RoZXJWZWN0b3IgJiYgdGhpcy54ID09PSBvdGhlclZlY3Rvci54ICYmIHRoaXMu
eSA9PT0gb3RoZXJWZWN0b3IueSAmJiB0aGlzLnogPT09IG90aGVyVmVjdG9yLno7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgVmVjdG9yMyBhbmQg
dGhlIGdpdmVuIHZlY3RvciBjb29yZGluYXRlcyBhcmUgZGlzdGFudCBsZXNzIHRoYW4gZXBzaWxv
bgorICAgICAqIEBwYXJhbSBvdGhlclZlY3RvciBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAor
ICAgICAqIEBwYXJhbSBlcHNpbG9uIGRlZmluZXMgdGhlIG1pbmltYWwgZGlzdGFuY2UgdG8gZGVm
aW5lIHZhbHVlcyBhcyBlcXVhbHMKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGJvdGggdmVjdG9y
cyBhcmUgZGlzdGFudCBsZXNzIHRoYW4gZXBzaWxvbgorICAgICAqLworICAgIFZlY3RvcjMucHJv
dG90eXBlLmVxdWFsc1dpdGhFcHNpbG9uID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yLCBlcHNpbG9u
KSB7CisgICAgICAgIGlmIChlcHNpbG9uID09PSB2b2lkIDApIHsgZXBzaWxvbiA9IF9tYXRoX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFcHNpbG9uIl07IH0KKyAgICAg
ICAgcmV0dXJuIG90aGVyVmVjdG9yICYmIF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRoaW5FcHNpbG9uKHRoaXMueCwgb3RoZXJWZWN0b3IueCwg
ZXBzaWxvbikgJiYgX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNj
YWxhciJdLldpdGhpbkVwc2lsb24odGhpcy55LCBvdGhlclZlY3Rvci55LCBlcHNpbG9uKSAmJiBf
bWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uV2l0aGlu
RXBzaWxvbih0aGlzLnosIG90aGVyVmVjdG9yLnosIGVwc2lsb24pOworICAgIH07CisgICAgLyoq
CisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMg
ZXF1YWxzIHRoZSBnaXZlbiBmbG9hdHMKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB4IGNv
b3JkaW5hdGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5IGNv
b3JkaW5hdGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB6IGNv
b3JkaW5hdGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGJvdGggdmVj
dG9ycyBhcmUgZXF1YWxzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuZXF1YWxzVG9G
bG9hdHMgPSBmdW5jdGlvbiAoeCwgeSwgeikgeworICAgICAgICByZXR1cm4gdGhpcy54ID09PSB4
ICYmIHRoaXMueSA9PT0geSAmJiB0aGlzLnogPT09IHo7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBNdWx0aXBsaWVzIHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMgYnkgdGhlIGdpdmVu
IG9uZXMKKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJh
bmQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjMKKyAgICAgKi8K
KyAgICBWZWN0b3IzLnByb3RvdHlwZS5tdWx0aXBseUluUGxhY2UgPSBmdW5jdGlvbiAob3RoZXJW
ZWN0b3IpIHsKKyAgICAgICAgdGhpcy54ICo9IG90aGVyVmVjdG9yLng7CisgICAgICAgIHRoaXMu
eSAqPSBvdGhlclZlY3Rvci55OworICAgICAgICB0aGlzLnogKj0gb3RoZXJWZWN0b3IuejsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3
IFZlY3RvcjMsIHJlc3VsdCBvZiB0aGUgbXVsdGlwbGljYXRpb24gb2YgdGhlIGN1cnJlbnQgVmVj
dG9yMyBieSB0aGUgZ2l2ZW4gdmVjdG9yCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIGRlZmlu
ZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHJldHVybnMgdGhlIG5ldyBWZWN0b3IzCisg
ICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUubXVsdGlwbHkgPSBmdW5jdGlvbiAob3RoZXJW
ZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlCeUZsb2F0cyhvdGhlclZlY3Rv
ci54LCBvdGhlclZlY3Rvci55LCBvdGhlclZlY3Rvci56KTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIE11bHRpcGxpZXMgdGhlIGN1cnJlbnQgVmVjdG9yMyBieSB0aGUgZ2l2ZW4gb25lIGFuZCBz
dG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gdmVjdG9yICJyZXN1bHQiCisgICAgICogQHBh
cmFtIG90aGVyVmVjdG9yIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHBhcmFt
IHJlc3VsdCBkZWZpbmVzIHRoZSBWZWN0b3IzIG9iamVjdCB3aGVyZSB0byBzdG9yZSB0aGUgcmVz
dWx0CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgVmVjdG9yMworICAgICAqLworICAgIFZl
Y3RvcjMucHJvdG90eXBlLm11bHRpcGx5VG9SZWYgPSBmdW5jdGlvbiAob3RoZXJWZWN0b3IsIHJl
c3VsdCkgeworICAgICAgICByZXR1cm4gcmVzdWx0LmNvcHlGcm9tRmxvYXRzKHRoaXMueCAqIG90
aGVyVmVjdG9yLngsIHRoaXMueSAqIG90aGVyVmVjdG9yLnksIHRoaXMueiAqIG90aGVyVmVjdG9y
LnopOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3
aXRoIHRoZSByZXN1bHQgb2YgdGhlIG11bGxpcGxpY2F0aW9uIG9mIHRoZSBjdXJyZW50IFZlY3Rv
cjMgY29vcmRpbmF0ZXMgYnkgdGhlIGdpdmVuIGZsb2F0cworICAgICAqIEBwYXJhbSB4IGRlZmlu
ZXMgdGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEBwYXJhbSB5IGRlZmlu
ZXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEBwYXJhbSB6IGRlZmlu
ZXMgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBu
ZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLm11bHRpcGx5QnlGbG9h
dHMgPSBmdW5jdGlvbiAoeCwgeSwgeikgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhp
cy54ICogeCwgdGhpcy55ICogeSwgdGhpcy56ICogeik7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZGl2aXNp
b24gb2YgdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBieSB0aGUgZ2l2ZW4gb25lcwor
ICAgICAqIEBwYXJhbSBvdGhlclZlY3RvciBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAg
ICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90
eXBlLmRpdmlkZSA9IGZ1bmN0aW9uIChvdGhlclZlY3RvcikgeworICAgICAgICByZXR1cm4gbmV3
IFZlY3RvcjModGhpcy54IC8gb3RoZXJWZWN0b3IueCwgdGhpcy55IC8gb3RoZXJWZWN0b3IueSwg
dGhpcy56IC8gb3RoZXJWZWN0b3Iueik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXZpZGVz
IHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMgYnkgdGhlIGdpdmVuIG9uZXMgYW5kIHN0
b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIKKyAgICAgKiBAcGFy
YW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0g
cmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjMgb2JqZWN0IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1
bHQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0b3IzCisgICAgICovCisgICAgVmVj
dG9yMy5wcm90b3R5cGUuZGl2aWRlVG9SZWYgPSBmdW5jdGlvbiAob3RoZXJWZWN0b3IsIHJlc3Vs
dCkgeworICAgICAgICByZXR1cm4gcmVzdWx0LmNvcHlGcm9tRmxvYXRzKHRoaXMueCAvIG90aGVy
VmVjdG9yLngsIHRoaXMueSAvIG90aGVyVmVjdG9yLnksIHRoaXMueiAvIG90aGVyVmVjdG9yLnop
OworICAgIH07CisgICAgLyoqCisgICAgICogRGl2aWRlcyB0aGUgY3VycmVudCBWZWN0b3IzIGNv
b3JkaW5hdGVzIGJ5IHRoZSBnaXZlbiBvbmVzLgorICAgICAqIEBwYXJhbSBvdGhlclZlY3RvciBk
ZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVw
ZGF0ZWQgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLmRpdmlkZUluUGxh
Y2UgPSBmdW5jdGlvbiAob3RoZXJWZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZGl2aWRl
VG9SZWYob3RoZXJWZWN0b3IsIHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRl
cyB0aGUgY3VycmVudCBWZWN0b3IzIHdpdGggdGhlIG1pbmltYWwgY29vcmRpbmF0ZSB2YWx1ZXMg
YmV0d2VlbiBpdHMgYW5kIHRoZSBnaXZlbiB2ZWN0b3Igb25lcworICAgICAqIEBwYXJhbSBvdGhl
ciBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50
IHVwZGF0ZWQgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLm1pbmltaXpl
SW5QbGFjZSA9IGZ1bmN0aW9uIChvdGhlcikgeworICAgICAgICByZXR1cm4gdGhpcy5taW5pbWl6
ZUluUGxhY2VGcm9tRmxvYXRzKG90aGVyLngsIG90aGVyLnksIG90aGVyLnopOworICAgIH07Cisg
ICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgY3VycmVudCBWZWN0b3IzIHdpdGggdGhlIG1heGlt
YWwgY29vcmRpbmF0ZSB2YWx1ZXMgYmV0d2VlbiBpdHMgYW5kIHRoZSBnaXZlbiB2ZWN0b3Igb25l
cy4KKyAgICAgKiBAcGFyYW0gb3RoZXIgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0
b3IzLnByb3RvdHlwZS5tYXhpbWl6ZUluUGxhY2UgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMubWF4aW1pemVJblBsYWNlRnJvbUZsb2F0cyhvdGhlci54LCBvdGhlci55
LCBvdGhlci56KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQg
VmVjdG9yMyB3aXRoIHRoZSBtaW5pbWFsIGNvb3JkaW5hdGUgdmFsdWVzIGJldHdlZW4gaXRzIGFu
ZCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB4IGNv
b3JkaW5hdGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5IGNv
b3JkaW5hdGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB6IGNv
b3JkaW5hdGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRh
dGVkIFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLnByb3RvdHlwZS5taW5pbWl6ZUluUGxh
Y2VGcm9tRmxvYXRzID0gZnVuY3Rpb24gKHgsIHksIHopIHsKKyAgICAgICAgaWYgKHggPCB0aGlz
LngpIHsKKyAgICAgICAgICAgIHRoaXMueCA9IHg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkg
PCB0aGlzLnkpIHsKKyAgICAgICAgICAgIHRoaXMueSA9IHk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHogPCB0aGlzLnopIHsKKyAgICAgICAgICAgIHRoaXMueiA9IHo7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBj
dXJyZW50IFZlY3RvcjMgd2l0aCB0aGUgbWF4aW1hbCBjb29yZGluYXRlIHZhbHVlcyBiZXR3ZWVu
IGl0cyBhbmQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLgorICAgICAqIEBwYXJhbSB4IGRlZmluZXMg
dGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEBwYXJhbSB5IGRlZmluZXMg
dGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEBwYXJhbSB6IGRlZmluZXMg
dGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJy
ZW50IHVwZGF0ZWQgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLm1heGlt
aXplSW5QbGFjZUZyb21GbG9hdHMgPSBmdW5jdGlvbiAoeCwgeSwgeikgeworICAgICAgICBpZiAo
eCA+IHRoaXMueCkgeworICAgICAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoeSA+IHRoaXMueSkgeworICAgICAgICAgICAgdGhpcy55ID0geTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoeiA+IHRoaXMueikgeworICAgICAgICAgICAgdGhpcy56ID0gejsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIER1ZSB0
byBmbG9hdCBwcmVjaXNpb24sIHNjYWxlIG9mIGEgbWVzaCBjb3VsZCBiZSB1bmlmb3JtIGJ1dCBm
bG9hdCB2YWx1ZXMgYXJlIG9mZiBieSBhIHNtYWxsIGZyYWN0aW9uCisgICAgICogQ2hlY2sgaWYg
aXMgbm9uIHVuaWZvcm0gd2l0aGluIGEgY2VydGFpbiBhbW91bnQgb2YgZGVjaW1hbCBwbGFjZXMg
dG8gYWNjb3VudCBmb3IgdGhpcworICAgICAqIEBwYXJhbSBlcHNpbG9uIHRoZSBhbW91bnQgdGhl
IHZhbHVlcyBjYW4gZGlmZmVyCisgICAgICogQHJldHVybnMgaWYgdGhlIHRoZSB2ZWN0b3IgaXMg
bm9uIHVuaWZvcm0gdG8gYSBjZXJ0YWluIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcworICAgICAq
LworICAgIFZlY3RvcjMucHJvdG90eXBlLmlzTm9uVW5pZm9ybVdpdGhpbkVwc2lsb24gPSBmdW5j
dGlvbiAoZXBzaWxvbikgeworICAgICAgICB2YXIgYWJzWCA9IE1hdGguYWJzKHRoaXMueCk7Cisg
ICAgICAgIHZhciBhYnNZID0gTWF0aC5hYnModGhpcy55KTsKKyAgICAgICAgaWYgKCFfbWF0aF9z
Y2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uV2l0aGluRXBzaWxv
bihhYnNYLCBhYnNZLCBlcHNpbG9uKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGFic1ogPSBNYXRoLmFicyh0aGlzLnopOworICAgICAgICBpZiAo
IV9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRo
aW5FcHNpbG9uKGFic1gsIGFic1osIGVwc2lsb24pKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIV9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRoaW5FcHNpbG9uKGFic1ksIGFic1osIGVwc2lsb24p
KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVjdG9yMy5wcm90b3R5
cGUsICJpc05vblVuaWZvcm0iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGEgYm9v
bGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhlIHZlY3RvciBpcyBub24gdW5pZm9ybSBtZWFuaW5nIHgs
IHkgb3IgeiBhcmUgbm90IGFsbCB0aGUgc2FtZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgYWJzWCA9IE1hdGguYWJzKHRoaXMueCk7Cisg
ICAgICAgICAgICB2YXIgYWJzWSA9IE1hdGguYWJzKHRoaXMueSk7CisgICAgICAgICAgICBpZiAo
YWJzWCAhPT0gYWJzWSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIGFic1ogPSBNYXRoLmFicyh0aGlzLnopOworICAgICAgICAg
ICAgaWYgKGFic1ggIT09IGFic1opIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhYnNZICE9PSBhYnNaKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldHMgYSBuZXcgVmVjdG9y
MyBmcm9tIGN1cnJlbnQgVmVjdG9yMyBmbG9vcmVkIHZhbHVlcworICAgICAqIEByZXR1cm5zIGEg
bmV3IFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLnByb3RvdHlwZS5mbG9vciA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKE1hdGguZmxvb3IodGhpcy54KSwg
TWF0aC5mbG9vcih0aGlzLnkpLCBNYXRoLmZsb29yKHRoaXMueikpOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyBhIG5ldyBWZWN0b3IzIGZyb20gY3VycmVudCBWZWN0b3IzIGZsb29yZWQg
dmFsdWVzCisgICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3Rv
cjMucHJvdG90eXBlLmZyYWN0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZl
Y3RvcjModGhpcy54IC0gTWF0aC5mbG9vcih0aGlzLngpLCB0aGlzLnkgLSBNYXRoLmZsb29yKHRo
aXMueSksIHRoaXMueiAtIE1hdGguZmxvb3IodGhpcy56KSk7CisgICAgfTsKKyAgICAvLyBQcm9w
ZXJ0aWVzCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBWZWN0b3IzCisg
ICAgICogQHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgVmVjdG9yMworICAgICAqLworICAgIFZl
Y3RvcjMucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIE1h
dGguc3FydCh0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlz
LnopOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc3F1YXJlZCBsZW5ndGggb2Yg
dGhlIFZlY3RvcjMKKyAgICAgKiBAcmV0dXJucyBzcXVhcmVkIGxlbmd0aCBvZiB0aGUgVmVjdG9y
MworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLmxlbmd0aFNxdWFyZWQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiAodGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55
ICsgdGhpcy56ICogdGhpcy56KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE5vcm1hbGl6ZSB0
aGUgY3VycmVudCBWZWN0b3IzLgorICAgICAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBhbiBp
biBwbGFjZSBvcGVyYXRpb24uCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBW
ZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVGcm9tTGVuZ3RoKHRoaXMubGVu
Z3RoKCkpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVvcmRlcnMgdGhlIHggeSB6IHByb3Bl
cnRpZXMgb2YgdGhlIHZlY3RvciBpbiBwbGFjZQorICAgICAqIEBwYXJhbSBvcmRlciBuZXcgb3Jk
ZXJpbmcgb2YgdGhlIHByb3BlcnRpZXMgKGVnLiBmb3IgdmVjdG9yIDEsMiwzIHdpdGggIlpZWCIg
d2lsbCBwcm9kdWNlIDMsMiwxKQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQg
dmVjdG9yCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUucmVvcmRlckluUGxhY2UgPSBm
dW5jdGlvbiAob3JkZXIpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgb3Jk
ZXIgPSBvcmRlci50b0xvd2VyQ2FzZSgpOworICAgICAgICBpZiAob3JkZXIgPT09ICJ4eXoiKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBNYXRoVG1wLlZl
Y3RvcjNbMF0uY29weUZyb20odGhpcyk7CisgICAgICAgIFsieCIsICJ5IiwgInoiXS5mb3JFYWNo
KGZ1bmN0aW9uICh2YWwsIGkpIHsKKyAgICAgICAgICAgIF90aGlzW3ZhbF0gPSBNYXRoVG1wLlZl
Y3RvcjNbMF1bb3JkZXJbaV1dOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSb3RhdGVzIHRoZSB2ZWN0b3IgYXJvdW5kIDAsMCwwIGJ5
IGEgcXVhdGVybmlvbgorICAgICAqIEBwYXJhbSBxdWF0ZXJuaW9uIHRoZSByb3RhdGlvbiBxdWF0
ZXJuaW9uCisgICAgICogQHBhcmFtIHJlc3VsdCB2ZWN0b3IgdG8gc3RvcmUgdGhlIHJlc3VsdAor
ICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yCisgICAgICovCisgICAgVmVjdG9y
My5wcm90b3R5cGUucm90YXRlQnlRdWF0ZXJuaW9uVG9SZWYgPSBmdW5jdGlvbiAocXVhdGVybmlv
biwgcmVzdWx0KSB7CisgICAgICAgIHF1YXRlcm5pb24udG9Sb3RhdGlvbk1hdHJpeChNYXRoVG1w
Lk1hdHJpeFswXSk7CisgICAgICAgIFZlY3RvcjMuVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0
aGlzLCBNYXRoVG1wLk1hdHJpeFswXSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJvdGF0ZXMgYSB2ZWN0b3IgYXJvdW5kIGEgZ2l2ZW4g
cG9pbnQKKyAgICAgKiBAcGFyYW0gcXVhdGVybmlvbiB0aGUgcm90YXRpb24gcXVhdGVybmlvbgor
ICAgICAqIEBwYXJhbSBwb2ludCB0aGUgcG9pbnQgdG8gcm90YXRlIGFyb3VuZAorICAgICAqIEBw
YXJhbSByZXN1bHQgdmVjdG9yIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0
aGUgcmVzdWx0aW5nIHZlY3RvcgorICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLnJvdGF0
ZUJ5UXVhdGVybmlvbkFyb3VuZFBvaW50VG9SZWYgPSBmdW5jdGlvbiAocXVhdGVybmlvbiwgcG9p
bnQsIHJlc3VsdCkgeworICAgICAgICB0aGlzLnN1YnRyYWN0VG9SZWYocG9pbnQsIE1hdGhUbXAu
VmVjdG9yM1swXSk7CisgICAgICAgIE1hdGhUbXAuVmVjdG9yM1swXS5yb3RhdGVCeVF1YXRlcm5p
b25Ub1JlZihxdWF0ZXJuaW9uLCBNYXRoVG1wLlZlY3RvcjNbMF0pOworICAgICAgICBwb2ludC5h
ZGRUb1JlZihNYXRoVG1wLlZlY3RvcjNbMF0sIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9y
MyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBsZW5ndGguCisgICAgICogUGxlYXNlIG5vdGUgdGhhdCB0
aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi4KKyAgICAgKiBAcGFyYW0gbGVuIHRoZSBsZW5n
dGggb2YgdGhlIHZlY3RvcgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVj
dG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLm5vcm1hbGl6ZUZyb21MZW5ndGgg
PSBmdW5jdGlvbiAobGVuKSB7CisgICAgICAgIGlmIChsZW4gPT09IDAgfHwgbGVuID09PSAxLjAp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
aGlzLnNjYWxlSW5QbGFjZSgxLjAgLyBsZW4pOworICAgIH07CisgICAgLyoqCisgICAgICogTm9y
bWFsaXplIHRoZSBjdXJyZW50IFZlY3RvcjMgdG8gYSBuZXcgdmVjdG9yCisgICAgICogQHJldHVy
bnMgdGhlIG5ldyBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUubm9ybWFs
aXplVG9OZXcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBub3JtYWxpemVkID0gbmV3IFZl
Y3RvcjMoMCwgMCwgMCk7CisgICAgICAgIHRoaXMubm9ybWFsaXplVG9SZWYobm9ybWFsaXplZCk7
CisgICAgICAgIHJldHVybiBub3JtYWxpemVkOworICAgIH07CisgICAgLyoqCisgICAgICogTm9y
bWFsaXplIHRoZSBjdXJyZW50IFZlY3RvcjMgdG8gdGhlIHJlZmVyZW5jZQorICAgICAqIEBwYXJh
bSByZWZlcmVuY2UgZGVmaW5lIHRoZSBWZWN0b3IzIHRvIHVwZGF0ZQorICAgICAqIEByZXR1cm5z
IHRoZSB1cGRhdGVkIFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLnByb3RvdHlwZS5ub3Jt
YWxpemVUb1JlZiA9IGZ1bmN0aW9uIChyZWZlcmVuY2UpIHsKKyAgICAgICAgdmFyIGxlbiA9IHRo
aXMubGVuZ3RoKCk7CisgICAgICAgIGlmIChsZW4gPT09IDAgfHwgbGVuID09PSAxLjApIHsKKyAg
ICAgICAgICAgIHJldHVybiByZWZlcmVuY2UuY29weUZyb21GbG9hdHModGhpcy54LCB0aGlzLnks
IHRoaXMueik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGVUb1JlZigxLjAg
LyBsZW4sIHJlZmVyZW5jZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3
IFZlY3RvcjMgY29waWVkIGZyb20gdGhlIGN1cnJlbnQgVmVjdG9yMworICAgICAqIEByZXR1cm5z
IHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLmNsb25lID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54LCB0aGlzLnks
IHRoaXMueik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb3BpZXMgdGhlIGdpdmVuIHZlY3Rv
ciBjb29yZGluYXRlcyB0byB0aGUgY3VycmVudCBWZWN0b3IzIG9uZXMKKyAgICAgKiBAcGFyYW0g
c291cmNlIGRlZmluZXMgdGhlIHNvdXJjZSBWZWN0b3IzCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgdXBkYXRlZCBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuY29w
eUZyb20gPSBmdW5jdGlvbiAoc291cmNlKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvcHlGcm9t
RmxvYXRzKHNvdXJjZS54LCBzb3VyY2UueSwgc291cmNlLnopOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ29waWVzIHRoZSBnaXZlbiBmbG9hdHMgdG8gdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29y
ZGluYXRlcworICAgICAqIEBwYXJhbSB4IGRlZmluZXMgdGhlIHggY29vcmRpbmF0ZSBvZiB0aGUg
b3BlcmFuZAorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUg
b3BlcmFuZAorICAgICAqIEBwYXJhbSB6IGRlZmluZXMgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGUg
b3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yMworICAg
ICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLmNvcHlGcm9tRmxvYXRzID0gZnVuY3Rpb24gKHgs
IHksIHopIHsKKyAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgdGhpcy55ID0geTsKKyAgICAg
ICAgdGhpcy56ID0gejsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDb3BpZXMgdGhlIGdpdmVuIGZsb2F0cyB0byB0aGUgY3VycmVudCBWZWN0b3IzIGNvb3Jk
aW5hdGVzCisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgeCBjb29yZGluYXRlIG9mIHRoZSBv
cGVyYW5kCisgICAgICogQHBhcmFtIHkgZGVmaW5lcyB0aGUgeSBjb29yZGluYXRlIG9mIHRoZSBv
cGVyYW5kCisgICAgICogQHBhcmFtIHogZGVmaW5lcyB0aGUgeiBjb29yZGluYXRlIG9mIHRoZSBv
cGVyYW5kCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzCisgICAg
ICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHksIHopIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuY29weUZyb21GbG9hdHMoeCwgeSwgeik7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDb3BpZXMgdGhlIGdpdmVuIGZsb2F0IHRvIHRoZSBjdXJyZW50IFZlY3RvcjMg
Y29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gdiBkZWZpbmVzIHRoZSB4LCB5IGFuZCB6IGNvb3Jk
aW5hdGVzIG9mIHRoZSBvcGVyYW5kCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRl
ZCBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuc2V0QWxsID0gZnVuY3Rp
b24gKHYpIHsKKyAgICAgICAgdGhpcy54ID0gdGhpcy55ID0gdGhpcy56ID0gdjsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvLyBTdGF0aWNzCisgICAgLyoqCisgICAgICogR2V0
IHRoZSBjbGlwIGZhY3RvciBiZXR3ZWVuIHR3byB2ZWN0b3JzCisgICAgICogQHBhcmFtIHZlY3Rv
cjAgZGVmaW5lcyB0aGUgZmlyc3Qgb3BlcmFuZAorICAgICAqIEBwYXJhbSB2ZWN0b3IxIGRlZmlu
ZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHBhcmFtIGF4aXMgZGVmaW5lcyB0aGUgYXhp
cyB0byB1c2UKKyAgICAgKiBAcGFyYW0gc2l6ZSBkZWZpbmVzIHRoZSBzaXplIGFsb25nIHRoZSBh
eGlzCisgICAgICogQHJldHVybnMgdGhlIGNsaXAgZmFjdG9yCisgICAgICovCisgICAgVmVjdG9y
My5HZXRDbGlwRmFjdG9yID0gZnVuY3Rpb24gKHZlY3RvcjAsIHZlY3RvcjEsIGF4aXMsIHNpemUp
IHsKKyAgICAgICAgdmFyIGQwID0gVmVjdG9yMy5Eb3QodmVjdG9yMCwgYXhpcykgLSBzaXplOwor
ICAgICAgICB2YXIgZDEgPSBWZWN0b3IzLkRvdCh2ZWN0b3IxLCBheGlzKSAtIHNpemU7CisgICAg
ICAgIHZhciBzID0gZDAgLyAoZDAgLSBkMSk7CisgICAgICAgIHJldHVybiBzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0IGFuZ2xlIGJldHdlZW4gdHdvIHZlY3RvcnMKKyAgICAgKiBAcGFy
YW0gdmVjdG9yMCBhbmdsZSBiZXR3ZWVuIHZlY3RvcjAgYW5kIHZlY3RvcjEKKyAgICAgKiBAcGFy
YW0gdmVjdG9yMSBhbmdsZSBiZXR3ZWVuIHZlY3RvcjAgYW5kIHZlY3RvcjEKKyAgICAgKiBAcGFy
YW0gbm9ybWFsIGRpcmVjdGlvbiBvZiB0aGUgbm9ybWFsCisgICAgICogQHJldHVybiB0aGUgYW5n
bGUgYmV0d2VlbiB2ZWN0b3IwIGFuZCB2ZWN0b3IxCisgICAgICovCisgICAgVmVjdG9yMy5HZXRB
bmdsZUJldHdlZW5WZWN0b3JzID0gZnVuY3Rpb24gKHZlY3RvcjAsIHZlY3RvcjEsIG5vcm1hbCkg
eworICAgICAgICB2YXIgdjAgPSB2ZWN0b3IwLm5vcm1hbGl6ZVRvUmVmKE1hdGhUbXAuVmVjdG9y
M1sxXSk7CisgICAgICAgIHZhciB2MSA9IHZlY3RvcjEubm9ybWFsaXplVG9SZWYoTWF0aFRtcC5W
ZWN0b3IzWzJdKTsKKyAgICAgICAgdmFyIGRvdCA9IFZlY3RvcjMuRG90KHYwLCB2MSk7CisgICAg
ICAgIHZhciBuID0gTWF0aFRtcC5WZWN0b3IzWzNdOworICAgICAgICBWZWN0b3IzLkNyb3NzVG9S
ZWYodjAsIHYxLCBuKTsKKyAgICAgICAgaWYgKFZlY3RvcjMuRG90KG4sIG5vcm1hbCkgPiAwKSB7
CisgICAgICAgICAgICByZXR1cm4gTWF0aC5hY29zKGRvdCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIC1NYXRoLmFjb3MoZG90KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBuZXcgVmVjdG9yMyBzZXQgZnJvbSB0aGUgaW5kZXggIm9mZnNldCIgb2YgdGhlIGdpdmVuIGFy
cmF5CisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIHNvdXJjZSBhcnJheQorICAgICAq
IEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGluIHRoZSBzb3VyY2UgYXJyYXkKKyAg
ICAgKiBAcmV0dXJucyB0aGUgbmV3IFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLkZyb21B
cnJheSA9IGZ1bmN0aW9uIChhcnJheSwgb2Zmc2V0KSB7CisgICAgICAgIGlmIChvZmZzZXQgPT09
IHZvaWQgMCkgeyBvZmZzZXQgPSAwOyB9CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyhhcnJh
eVtvZmZzZXRdLCBhcnJheVtvZmZzZXQgKyAxXSwgYXJyYXlbb2Zmc2V0ICsgMl0pOworICAgIH07
CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCBmcm9tIHRoZSBpbmRl
eCAib2Zmc2V0IiBvZiB0aGUgZ2l2ZW4gRmxvYXQzMkFycmF5CisgICAgICogVGhpcyBmdW5jdGlv
biBpcyBkZXByZWNhdGVkLiBVc2UgRnJvbUFycmF5IGluc3RlYWQKKyAgICAgKiBAcGFyYW0gYXJy
YXkgZGVmaW5lcyB0aGUgc291cmNlIGFycmF5CisgICAgICogQHBhcmFtIG9mZnNldCBkZWZpbmVz
IHRoZSBvZmZzZXQgaW4gdGhlIHNvdXJjZSBhcnJheQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcg
VmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuRnJvbUZsb2F0QXJyYXkgPSBmdW5jdGlvbiAo
YXJyYXksIG9mZnNldCkgeworICAgICAgICByZXR1cm4gVmVjdG9yMy5Gcm9tQXJyYXkoYXJyYXks
IG9mZnNldCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3Ig
InJlc3VsdCIgd2l0aCB0aGUgZWxlbWVudCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggIm9mZnNldCIg
b2YgdGhlIGdpdmVuIGFycmF5CisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIHNvdXJj
ZSBhcnJheQorICAgICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGluIHRoZSBz
b3VyY2UgYXJyYXkKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjMgd2hl
cmUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqLworICAgIFZlY3RvcjMuRnJvbUFycmF5VG9S
ZWYgPSBmdW5jdGlvbiAoYXJyYXksIG9mZnNldCwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54
ID0gYXJyYXlbb2Zmc2V0XTsKKyAgICAgICAgcmVzdWx0LnkgPSBhcnJheVtvZmZzZXQgKyAxXTsK
KyAgICAgICAgcmVzdWx0LnogPSBhcnJheVtvZmZzZXQgKyAyXTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciAicmVzdWx0IiB3aXRoIHRoZSBlbGVtZW50IHZh
bHVlcyBmcm9tIHRoZSBpbmRleCAib2Zmc2V0IiBvZiB0aGUgZ2l2ZW4gRmxvYXQzMkFycmF5Cisg
ICAgICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiAgVXNlIEZyb21BcnJheVRvUmVmIGlu
c3RlYWQuCisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIHNvdXJjZSBhcnJheQorICAg
ICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGluIHRoZSBzb3VyY2UgYXJyYXkK
KyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8gc3RvcmUg
dGhlIHJlc3VsdAorICAgICAqLworICAgIFZlY3RvcjMuRnJvbUZsb2F0QXJyYXlUb1JlZiA9IGZ1
bmN0aW9uIChhcnJheSwgb2Zmc2V0LCByZXN1bHQpIHsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjMu
RnJvbUFycmF5VG9SZWYoYXJyYXksIG9mZnNldCwgcmVzdWx0KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciAicmVzdWx0IiB3aXRoIHRoZSBnaXZlbiBmbG9h
dHMuCisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgeCBjb29yZGluYXRlIG9mIHRoZSBzb3Vy
Y2UKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHNvdXJj
ZQorICAgICAqIEBwYXJhbSB6IGRlZmluZXMgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgc291cmNl
CisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSBWZWN0b3IzIHdoZXJlIHRvIHN0b3Jl
IHRoZSByZXN1bHQKKyAgICAgKi8KKyAgICBWZWN0b3IzLkZyb21GbG9hdHNUb1JlZiA9IGZ1bmN0
aW9uICh4LCB5LCB6LCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LmNvcHlGcm9tRmxvYXRzKHgs
IHksIHopOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNl
dCB0byAoMC4wLCAwLjAsIDAuMCkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBlbXB0eSBWZWN0b3Iz
CisgICAgICovCisgICAgVmVjdG9yMy5aZXJvID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gbmV3IFZlY3RvcjMoMC4wLCAwLjAsIDAuMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgxLjAsIDEuMCwgMS4wKQorICAgICAqIEByZXR1
cm5zIGEgbmV3IHVuaXQgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuT25lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMS4wLCAxLjAsIDEuMCk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgwLjAsIDEu
MCwgMC4wKQorICAgICAqIEByZXR1cm5zIGEgbmV3IHVwIFZlY3RvcjMKKyAgICAgKi8KKyAgICBW
ZWN0b3IzLlVwID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMC4w
LCAxLjAsIDAuMCk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVjdG9yMywg
IlVwUmVhZE9ubHkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGEgdXAgVmVjdG9y
MyB0aGF0IG11c3Qgbm90IGJlIHVwZGF0ZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjMuX1VwUmVhZE9ubHk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWZWN0b3IzLCAiWmVyb1Jl
YWRPbmx5IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIHplcm8gVmVjdG9yMyB0
aGF0IG11c3Qgbm90IGJlIHVwZGF0ZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjMuX1plcm9SZWFkT25seTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0
byAoMC4wLCAtMS4wLCAwLjApCisgICAgICogQHJldHVybnMgYSBuZXcgZG93biBWZWN0b3IzCisg
ICAgICovCisgICAgVmVjdG9yMy5Eb3duID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
bmV3IFZlY3RvcjMoMC4wLCAtMS4wLCAwLjApOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0
dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIDEuMCkKKyAgICAgKiBAcmV0dXJu
cyBhIG5ldyBmb3J3YXJkIFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLkZvcndhcmQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLjAsIDAuMCwgMS4wKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDAu
MCwgMC4wLCAtMS4wKQorICAgICAqIEByZXR1cm5zIGEgbmV3IGZvcndhcmQgVmVjdG9yMworICAg
ICAqLworICAgIFZlY3RvcjMuQmFja3dhcmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biBuZXcgVmVjdG9yMygwLjAsIDAuMCwgLTEuMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgxLjAsIDAuMCwgMC4wKQorICAgICAqIEByZXR1
cm5zIGEgbmV3IHJpZ2h0IFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLlJpZ2h0ID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMS4wLCAwLjAsIDAuMCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgtMS4w
LCAwLjAsIDAuMCkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBsZWZ0IFZlY3RvcjMKKyAgICAgKi8K
KyAgICBWZWN0b3IzLkxlZnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVj
dG9yMygtMS4wLCAwLjAsIDAuMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEg
bmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgdHJhbnNmb3JtYXRpb24gYnkg
dGhlIGdpdmVuIG1hdHJpeCBvZiB0aGUgZ2l2ZW4gdmVjdG9yLgorICAgICAqIFRoaXMgbWV0aG9k
IGNvbXB1dGVzIHRyYW5mb3JtZWQgY29vcmRpbmF0ZXMgb25seSwgbm90IHRyYW5zZm9ybWVkIGRp
cmVjdGlvbiB2ZWN0b3JzIChpZS4gaXQgdGFrZXMgdHJhbnNsYXRpb24gaW4gYWNjb3VudCkKKyAg
ICAgKiBAcGFyYW0gdmVjdG9yIGRlZmluZXMgdGhlIFZlY3RvcjMgdG8gdHJhbnNmb3JtCisgICAg
ICogQHBhcmFtIHRyYW5zZm9ybWF0aW9uIGRlZmluZXMgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJp
eAorICAgICAqIEByZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCBWZWN0b3IzCisgICAgICovCisgICAg
VmVjdG9yMy5UcmFuc2Zvcm1Db29yZGluYXRlcyA9IGZ1bmN0aW9uICh2ZWN0b3IsIHRyYW5zZm9y
bWF0aW9uKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBWZWN0b3IzLlplcm8oKTsKKyAgICAgICAg
VmVjdG9yMy5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHZlY3RvciwgdHJhbnNmb3JtYXRpb24s
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIgY29vcmRpbmF0ZXMgd2l0aCB0aGUgcmVz
dWx0IG9mIHRoZSB0cmFuc2Zvcm1hdGlvbiBieSB0aGUgZ2l2ZW4gbWF0cml4IG9mIHRoZSBnaXZl
biB2ZWN0b3IKKyAgICAgKiBUaGlzIG1ldGhvZCBjb21wdXRlcyB0cmFuZm9ybWVkIGNvb3JkaW5h
dGVzIG9ubHksIG5vdCB0cmFuc2Zvcm1lZCBkaXJlY3Rpb24gdmVjdG9ycyAoaWUuIGl0IHRha2Vz
IHRyYW5zbGF0aW9uIGluIGFjY291bnQpCisgICAgICogQHBhcmFtIHZlY3RvciBkZWZpbmVzIHRo
ZSBWZWN0b3IzIHRvIHRyYW5zZm9ybQorICAgICAqIEBwYXJhbSB0cmFuc2Zvcm1hdGlvbiBkZWZp
bmVzIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmlu
ZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqLworICAgIFZl
Y3RvcjMuVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZiA9IGZ1bmN0aW9uICh2ZWN0b3IsIHRyYW5z
Zm9ybWF0aW9uLCByZXN1bHQpIHsKKyAgICAgICAgVmVjdG9yMy5UcmFuc2Zvcm1Db29yZGluYXRl
c0Zyb21GbG9hdHNUb1JlZih2ZWN0b3IueCwgdmVjdG9yLnksIHZlY3Rvci56LCB0cmFuc2Zvcm1h
dGlvbiwgcmVzdWx0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGdpdmVuIHZl
Y3RvciAicmVzdWx0IiBjb29yZGluYXRlcyB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIHRyYW5zZm9y
bWF0aW9uIGJ5IHRoZSBnaXZlbiBtYXRyaXggb2YgdGhlIGdpdmVuIGZsb2F0cyAoeCwgeSwgeikK
KyAgICAgKiBUaGlzIG1ldGhvZCBjb21wdXRlcyB0cmFuZm9ybWVkIGNvb3JkaW5hdGVzIG9ubHks
IG5vdCB0cmFuc2Zvcm1lZCBkaXJlY3Rpb24gdmVjdG9ycworICAgICAqIEBwYXJhbSB4IGRlZmlu
ZSB0aGUgeCBjb29yZGluYXRlIG9mIHRoZSBzb3VyY2UgdmVjdG9yCisgICAgICogQHBhcmFtIHkg
ZGVmaW5lIHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHNvdXJjZSB2ZWN0b3IKKyAgICAgKiBAcGFy
YW0geiBkZWZpbmUgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgc291cmNlIHZlY3RvcgorICAgICAq
IEBwYXJhbSB0cmFuc2Zvcm1hdGlvbiBkZWZpbmVzIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgK
KyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8gc3RvcmUg
dGhlIHJlc3VsdAorICAgICAqLworICAgIFZlY3RvcjMuVHJhbnNmb3JtQ29vcmRpbmF0ZXNGcm9t
RmxvYXRzVG9SZWYgPSBmdW5jdGlvbiAoeCwgeSwgeiwgdHJhbnNmb3JtYXRpb24sIHJlc3VsdCkg
eworICAgICAgICB2YXIgbSA9IHRyYW5zZm9ybWF0aW9uLm07CisgICAgICAgIHZhciByeCA9IHgg
KiBtWzBdICsgeSAqIG1bNF0gKyB6ICogbVs4XSArIG1bMTJdOworICAgICAgICB2YXIgcnkgPSB4
ICogbVsxXSArIHkgKiBtWzVdICsgeiAqIG1bOV0gKyBtWzEzXTsKKyAgICAgICAgdmFyIHJ6ID0g
eCAqIG1bMl0gKyB5ICogbVs2XSArIHogKiBtWzEwXSArIG1bMTRdOworICAgICAgICB2YXIgcncg
PSAxIC8gKHggKiBtWzNdICsgeSAqIG1bN10gKyB6ICogbVsxMV0gKyBtWzE1XSk7CisgICAgICAg
IHJlc3VsdC54ID0gcnggKiBydzsKKyAgICAgICAgcmVzdWx0LnkgPSByeSAqIHJ3OworICAgICAg
ICByZXN1bHQueiA9IHJ6ICogcnc7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEg
bmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgbm9ybWFsIHRyYW5zZm9ybWF0
aW9uIGJ5IHRoZSBnaXZlbiBtYXRyaXggb2YgdGhlIGdpdmVuIHZlY3RvcgorICAgICAqIFRoaXMg
bWV0aG9kcyBjb21wdXRlcyB0cmFuc2Zvcm1lZCBub3JtYWxpemVkIGRpcmVjdGlvbiB2ZWN0b3Jz
IG9ubHkgKGllLiBpdCBkb2VzIG5vdCBhcHBseSB0cmFuc2xhdGlvbikKKyAgICAgKiBAcGFyYW0g
dmVjdG9yIGRlZmluZXMgdGhlIFZlY3RvcjMgdG8gdHJhbnNmb3JtCisgICAgICogQHBhcmFtIHRy
YW5zZm9ybWF0aW9uIGRlZmluZXMgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeAorICAgICAqIEBy
ZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuVHJhbnNmb3JtTm9y
bWFsID0gZnVuY3Rpb24gKHZlY3RvciwgdHJhbnNmb3JtYXRpb24pIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IFZlY3RvcjMuWmVybygpOworICAgICAgICBWZWN0b3IzLlRyYW5zZm9ybU5vcm1hbFRv
UmVmKHZlY3RvciwgdHJhbnNmb3JtYXRpb24sIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3IgInJlc3Vs
dCIgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBub3JtYWwgdHJhbnNmb3JtYXRpb24gYnkgdGhlIGdp
dmVuIG1hdHJpeCBvZiB0aGUgZ2l2ZW4gdmVjdG9yCisgICAgICogVGhpcyBtZXRob2RzIGNvbXB1
dGVzIHRyYW5zZm9ybWVkIG5vcm1hbGl6ZWQgZGlyZWN0aW9uIHZlY3RvcnMgb25seSAoaWUuIGl0
IGRvZXMgbm90IGFwcGx5IHRyYW5zbGF0aW9uKQorICAgICAqIEBwYXJhbSB2ZWN0b3IgZGVmaW5l
cyB0aGUgVmVjdG9yMyB0byB0cmFuc2Zvcm0KKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtYXRpb24g
ZGVmaW5lcyB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4CisgICAgICogQHBhcmFtIHJlc3VsdCBk
ZWZpbmVzIHRoZSBWZWN0b3IzIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKi8KKyAg
ICBWZWN0b3IzLlRyYW5zZm9ybU5vcm1hbFRvUmVmID0gZnVuY3Rpb24gKHZlY3RvciwgdHJhbnNm
b3JtYXRpb24sIHJlc3VsdCkgeworICAgICAgICB0aGlzLlRyYW5zZm9ybU5vcm1hbEZyb21GbG9h
dHNUb1JlZih2ZWN0b3IueCwgdmVjdG9yLnksIHZlY3Rvci56LCB0cmFuc2Zvcm1hdGlvbiwgcmVz
dWx0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciAicmVz
dWx0IiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIG5vcm1hbCB0cmFuc2Zvcm1hdGlvbiBieSB0aGUg
Z2l2ZW4gbWF0cml4IG9mIHRoZSBnaXZlbiBmbG9hdHMgKHgsIHksIHopCisgICAgICogVGhpcyBt
ZXRob2RzIGNvbXB1dGVzIHRyYW5zZm9ybWVkIG5vcm1hbGl6ZWQgZGlyZWN0aW9uIHZlY3RvcnMg
b25seSAoaWUuIGl0IGRvZXMgbm90IGFwcGx5IHRyYW5zbGF0aW9uKQorICAgICAqIEBwYXJhbSB4
IGRlZmluZSB0aGUgeCBjb29yZGluYXRlIG9mIHRoZSBzb3VyY2UgdmVjdG9yCisgICAgICogQHBh
cmFtIHkgZGVmaW5lIHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHNvdXJjZSB2ZWN0b3IKKyAgICAg
KiBAcGFyYW0geiBkZWZpbmUgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgc291cmNlIHZlY3Rvcgor
ICAgICAqIEBwYXJhbSB0cmFuc2Zvcm1hdGlvbiBkZWZpbmVzIHRoZSB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXgKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8g
c3RvcmUgdGhlIHJlc3VsdAorICAgICAqLworICAgIFZlY3RvcjMuVHJhbnNmb3JtTm9ybWFsRnJv
bUZsb2F0c1RvUmVmID0gZnVuY3Rpb24gKHgsIHksIHosIHRyYW5zZm9ybWF0aW9uLCByZXN1bHQp
IHsKKyAgICAgICAgdmFyIG0gPSB0cmFuc2Zvcm1hdGlvbi5tOworICAgICAgICByZXN1bHQueCA9
IHggKiBtWzBdICsgeSAqIG1bNF0gKyB6ICogbVs4XTsKKyAgICAgICAgcmVzdWx0LnkgPSB4ICog
bVsxXSArIHkgKiBtWzVdICsgeiAqIG1bOV07CisgICAgICAgIHJlc3VsdC56ID0geCAqIG1bMl0g
KyB5ICogbVs2XSArIHogKiBtWzEwXTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBuZXcgVmVjdG9yMyBsb2NhdGVkIGZvciAiYW1vdW50IiBvbiB0aGUgQ2F0bXVsbFJvbSBpbnRl
cnBvbGF0aW9uIHNwbGluZSBkZWZpbmVkIGJ5IHRoZSB2ZWN0b3JzICJ2YWx1ZTEiLCAidmFsdWUy
IiwgInZhbHVlMyIsICJ2YWx1ZTQiCisgICAgICogQHBhcmFtIHZhbHVlMSBkZWZpbmVzIHRoZSBm
aXJzdCBjb250cm9sIHBvaW50CisgICAgICogQHBhcmFtIHZhbHVlMiBkZWZpbmVzIHRoZSBzZWNv
bmQgY29udHJvbCBwb2ludAorICAgICAqIEBwYXJhbSB2YWx1ZTMgZGVmaW5lcyB0aGUgdGhpcmQg
Y29udHJvbCBwb2ludAorICAgICAqIEBwYXJhbSB2YWx1ZTQgZGVmaW5lcyB0aGUgZm91cnRoIGNv
bnRyb2wgcG9pbnQKKyAgICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGFtb3VudCBvbiB0
aGUgc3BsaW5lIHRvIHVzZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAq
LworICAgIFZlY3RvcjMuQ2F0bXVsbFJvbSA9IGZ1bmN0aW9uICh2YWx1ZTEsIHZhbHVlMiwgdmFs
dWUzLCB2YWx1ZTQsIGFtb3VudCkgeworICAgICAgICB2YXIgc3F1YXJlZCA9IGFtb3VudCAqIGFt
b3VudDsKKyAgICAgICAgdmFyIGN1YmVkID0gYW1vdW50ICogc3F1YXJlZDsKKyAgICAgICAgdmFy
IHggPSAwLjUgKiAoKCgoMi4wICogdmFsdWUyLngpICsgKCgtdmFsdWUxLnggKyB2YWx1ZTMueCkg
KiBhbW91bnQpKSArCisgICAgICAgICAgICAoKCgoKDIuMCAqIHZhbHVlMS54KSAtICg1LjAgKiB2
YWx1ZTIueCkpICsgKDQuMCAqIHZhbHVlMy54KSkgLSB2YWx1ZTQueCkgKiBzcXVhcmVkKSkgKwor
ICAgICAgICAgICAgKCgoKC12YWx1ZTEueCArICgzLjAgKiB2YWx1ZTIueCkpIC0gKDMuMCAqIHZh
bHVlMy54KSkgKyB2YWx1ZTQueCkgKiBjdWJlZCkpOworICAgICAgICB2YXIgeSA9IDAuNSAqICgo
KCgyLjAgKiB2YWx1ZTIueSkgKyAoKC12YWx1ZTEueSArIHZhbHVlMy55KSAqIGFtb3VudCkpICsK
KyAgICAgICAgICAgICgoKCgoMi4wICogdmFsdWUxLnkpIC0gKDUuMCAqIHZhbHVlMi55KSkgKyAo
NC4wICogdmFsdWUzLnkpKSAtIHZhbHVlNC55KSAqIHNxdWFyZWQpKSArCisgICAgICAgICAgICAo
KCgoLXZhbHVlMS55ICsgKDMuMCAqIHZhbHVlMi55KSkgLSAoMy4wICogdmFsdWUzLnkpKSArIHZh
bHVlNC55KSAqIGN1YmVkKSk7CisgICAgICAgIHZhciB6ID0gMC41ICogKCgoKDIuMCAqIHZhbHVl
Mi56KSArICgoLXZhbHVlMS56ICsgdmFsdWUzLnopICogYW1vdW50KSkgKworICAgICAgICAgICAg
KCgoKCgyLjAgKiB2YWx1ZTEueikgLSAoNS4wICogdmFsdWUyLnopKSArICg0LjAgKiB2YWx1ZTMu
eikpIC0gdmFsdWU0LnopICogc3F1YXJlZCkpICsKKyAgICAgICAgICAgICgoKCgtdmFsdWUxLnog
KyAoMy4wICogdmFsdWUyLnopKSAtICgzLjAgKiB2YWx1ZTMueikpICsgdmFsdWU0LnopICogY3Vi
ZWQpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKHgsIHksIHopOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRoIHRoZSBjb29yZGluYXRl
cyBvZiAidmFsdWUiLCBpZiB0aGUgdmVjdG9yICJ2YWx1ZSIgaXMgaW4gdGhlIGN1YmUgZGVmaW5l
ZCBieSB0aGUgdmVjdG9ycyAibWluIiBhbmQgIm1heCIKKyAgICAgKiBJZiBhIGNvb3JkaW5hdGUg
dmFsdWUgb2YgInZhbHVlIiBpcyBsb3dlciB0aGFuIG9uZSBvZiB0aGUgIm1pbiIgY29vcmRpbmF0
ZSwgdGhlbiB0aGlzICJ2YWx1ZSIgY29vcmRpbmF0ZSBpcyBzZXQgd2l0aCB0aGUgIm1pbiIgb25l
CisgICAgICogSWYgYSBjb29yZGluYXRlIHZhbHVlIG9mICJ2YWx1ZSIgaXMgZ3JlYXRlciB0aGFu
IG9uZSBvZiB0aGUgIm1heCIgY29vcmRpbmF0ZSwgdGhlbiB0aGlzICJ2YWx1ZSIgY29vcmRpbmF0
ZSBpcyBzZXQgd2l0aCB0aGUgIm1heCIgb25lCisgICAgICogQHBhcmFtIHZhbHVlIGRlZmluZXMg
dGhlIGN1cnJlbnQgdmFsdWUKKyAgICAgKiBAcGFyYW0gbWluIGRlZmluZXMgdGhlIGxvd2VyIHJh
bmdlIHZhbHVlCisgICAgICogQHBhcmFtIG1heCBkZWZpbmVzIHRoZSB1cHBlciByYW5nZSB2YWx1
ZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMu
Q2xhbXAgPSBmdW5jdGlvbiAodmFsdWUsIG1pbiwgbWF4KSB7CisgICAgICAgIHZhciB2ID0gbmV3
IFZlY3RvcjMoKTsKKyAgICAgICAgVmVjdG9yMy5DbGFtcFRvUmVmKHZhbHVlLCBtaW4sIG1heCwg
dik7CisgICAgICAgIHJldHVybiB2OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUg
Z2l2ZW4gdmVjdG9yICJyZXN1bHQiIHdpdGggdGhlIGNvb3JkaW5hdGVzIG9mICJ2YWx1ZSIsIGlm
IHRoZSB2ZWN0b3IgInZhbHVlIiBpcyBpbiB0aGUgY3ViZSBkZWZpbmVkIGJ5IHRoZSB2ZWN0b3Jz
ICJtaW4iIGFuZCAibWF4IgorICAgICAqIElmIGEgY29vcmRpbmF0ZSB2YWx1ZSBvZiAidmFsdWUi
IGlzIGxvd2VyIHRoYW4gb25lIG9mIHRoZSAibWluIiBjb29yZGluYXRlLCB0aGVuIHRoaXMgInZh
bHVlIiBjb29yZGluYXRlIGlzIHNldCB3aXRoIHRoZSAibWluIiBvbmUKKyAgICAgKiBJZiBhIGNv
b3JkaW5hdGUgdmFsdWUgb2YgInZhbHVlIiBpcyBncmVhdGVyIHRoYW4gb25lIG9mIHRoZSAibWF4
IiBjb29yZGluYXRlLCB0aGVuIHRoaXMgInZhbHVlIiBjb29yZGluYXRlIGlzIHNldCB3aXRoIHRo
ZSAibWF4IiBvbmUKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5lcyB0aGUgY3VycmVudCB2YWx1
ZQorICAgICAqIEBwYXJhbSBtaW4gZGVmaW5lcyB0aGUgbG93ZXIgcmFuZ2UgdmFsdWUKKyAgICAg
KiBAcGFyYW0gbWF4IGRlZmluZXMgdGhlIHVwcGVyIHJhbmdlIHZhbHVlCisgICAgICogQHBhcmFt
IHJlc3VsdCBkZWZpbmVzIHRoZSBWZWN0b3IzIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAg
ICAgKi8KKyAgICBWZWN0b3IzLkNsYW1wVG9SZWYgPSBmdW5jdGlvbiAodmFsdWUsIG1pbiwgbWF4
LCByZXN1bHQpIHsKKyAgICAgICAgdmFyIHggPSB2YWx1ZS54OworICAgICAgICB4ID0gKHggPiBt
YXgueCkgPyBtYXgueCA6IHg7CisgICAgICAgIHggPSAoeCA8IG1pbi54KSA/IG1pbi54IDogeDsK
KyAgICAgICAgdmFyIHkgPSB2YWx1ZS55OworICAgICAgICB5ID0gKHkgPiBtYXgueSkgPyBtYXgu
eSA6IHk7CisgICAgICAgIHkgPSAoeSA8IG1pbi55KSA/IG1pbi55IDogeTsKKyAgICAgICAgdmFy
IHogPSB2YWx1ZS56OworICAgICAgICB6ID0gKHogPiBtYXgueikgPyBtYXgueiA6IHo7CisgICAg
ICAgIHogPSAoeiA8IG1pbi56KSA/IG1pbi56IDogejsKKyAgICAgICAgcmVzdWx0LmNvcHlGcm9t
RmxvYXRzKHgsIHksIHopOworICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIGEgZ2l2
ZW4gdmVjdG9yIGlzIGluc2lkZSBhIHNwZWNpZmljIHJhbmdlCisgICAgICogQHBhcmFtIHYgZGVm
aW5lcyB0aGUgdmVjdG9yIHRvIHRlc3QKKyAgICAgKiBAcGFyYW0gbWluIGRlZmluZXMgdGhlIG1p
bmltdW0gcmFuZ2UKKyAgICAgKiBAcGFyYW0gbWF4IGRlZmluZXMgdGhlIG1heGltdW0gcmFuZ2UK
KyAgICAgKi8KKyAgICBWZWN0b3IzLkNoZWNrRXh0ZW5kcyA9IGZ1bmN0aW9uICh2LCBtaW4sIG1h
eCkgeworICAgICAgICBtaW4ubWluaW1pemVJblBsYWNlKHYpOworICAgICAgICBtYXgubWF4aW1p
emVJblBsYWNlKHYpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0
b3IzIGxvY2F0ZWQgZm9yICJhbW91bnQiIChmbG9hdCkgb24gdGhlIEhlcm1pdGUgaW50ZXJwb2xh
dGlvbiBzcGxpbmUgZGVmaW5lZCBieSB0aGUgdmVjdG9ycyAidmFsdWUxIiwgInRhbmdlbnQxIiwg
InZhbHVlMiIsICJ0YW5nZW50MiIKKyAgICAgKiBAcGFyYW0gdmFsdWUxIGRlZmluZXMgdGhlIGZp
cnN0IGNvbnRyb2wgcG9pbnQKKyAgICAgKiBAcGFyYW0gdGFuZ2VudDEgZGVmaW5lcyB0aGUgZmly
c3QgdGFuZ2VudCB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gdmFsdWUyIGRlZmluZXMgdGhlIHNlY29u
ZCBjb250cm9sIHBvaW50CisgICAgICogQHBhcmFtIHRhbmdlbnQyIGRlZmluZXMgdGhlIHNlY29u
ZCB0YW5nZW50IHZlY3RvcgorICAgICAqIEBwYXJhbSBhbW91bnQgZGVmaW5lcyB0aGUgYW1vdW50
IG9uIHRoZSBpbnRlcnBvbGF0aW9uIHNwbGluZSAoYmV0d2VlbiAwIGFuZCAxKQorICAgICAqIEBy
ZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuSGVybWl0ZSA9IGZ1
bmN0aW9uICh2YWx1ZTEsIHRhbmdlbnQxLCB2YWx1ZTIsIHRhbmdlbnQyLCBhbW91bnQpIHsKKyAg
ICAgICAgdmFyIHNxdWFyZWQgPSBhbW91bnQgKiBhbW91bnQ7CisgICAgICAgIHZhciBjdWJlZCA9
IGFtb3VudCAqIHNxdWFyZWQ7CisgICAgICAgIHZhciBwYXJ0MSA9ICgoMi4wICogY3ViZWQpIC0g
KDMuMCAqIHNxdWFyZWQpKSArIDEuMDsKKyAgICAgICAgdmFyIHBhcnQyID0gKC0yLjAgKiBjdWJl
ZCkgKyAoMy4wICogc3F1YXJlZCk7CisgICAgICAgIHZhciBwYXJ0MyA9IChjdWJlZCAtICgyLjAg
KiBzcXVhcmVkKSkgKyBhbW91bnQ7CisgICAgICAgIHZhciBwYXJ0NCA9IGN1YmVkIC0gc3F1YXJl
ZDsKKyAgICAgICAgdmFyIHggPSAoKCh2YWx1ZTEueCAqIHBhcnQxKSArICh2YWx1ZTIueCAqIHBh
cnQyKSkgKyAodGFuZ2VudDEueCAqIHBhcnQzKSkgKyAodGFuZ2VudDIueCAqIHBhcnQ0KTsKKyAg
ICAgICAgdmFyIHkgPSAoKCh2YWx1ZTEueSAqIHBhcnQxKSArICh2YWx1ZTIueSAqIHBhcnQyKSkg
KyAodGFuZ2VudDEueSAqIHBhcnQzKSkgKyAodGFuZ2VudDIueSAqIHBhcnQ0KTsKKyAgICAgICAg
dmFyIHogPSAoKCh2YWx1ZTEueiAqIHBhcnQxKSArICh2YWx1ZTIueiAqIHBhcnQyKSkgKyAodGFu
Z2VudDEueiAqIHBhcnQzKSkgKyAodGFuZ2VudDIueiAqIHBhcnQ0KTsKKyAgICAgICAgcmV0dXJu
IG5ldyBWZWN0b3IzKHgsIHksIHopOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBh
IG5ldyBWZWN0b3IzIGxvY2F0ZWQgZm9yICJhbW91bnQiIChmbG9hdCkgb24gdGhlIGxpbmVhciBp
bnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIHZlY3RvcnMgInN0YXJ0IiBhbmQgImVuZCIKKyAgICAg
KiBAcGFyYW0gc3RhcnQgZGVmaW5lcyB0aGUgc3RhcnQgdmFsdWUKKyAgICAgKiBAcGFyYW0gZW5k
IGRlZmluZXMgdGhlIGVuZCB2YWx1ZQorICAgICAqIEBwYXJhbSBhbW91bnQgbWF4IGRlZmluZXMg
YW1vdW50IGJldHdlZW4gYm90aCAoYmV0d2VlbiAwIGFuZCAxKQorICAgICAqIEByZXR1cm5zIHRo
ZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuTGVycCA9IGZ1bmN0aW9uIChzdGFy
dCwgZW5kLCBhbW91bnQpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBWZWN0b3IzKDAsIDAs
IDApOworICAgICAgICBWZWN0b3IzLkxlcnBUb1JlZihzdGFydCwgZW5kLCBhbW91bnQsIHJlc3Vs
dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRz
IHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBsaW5lYXIg
aW50ZXJwb2xhdGlvbiBmcm9tIHRoZSB2ZWN0b3IgInN0YXJ0IiBmb3IgImFtb3VudCIgdG8gdGhl
IHZlY3RvciAiZW5kIgorICAgICAqIEBwYXJhbSBzdGFydCBkZWZpbmVzIHRoZSBzdGFydCB2YWx1
ZQorICAgICAqIEBwYXJhbSBlbmQgZGVmaW5lcyB0aGUgZW5kIHZhbHVlCisgICAgICogQHBhcmFt
IGFtb3VudCBtYXggZGVmaW5lcyBhbW91bnQgYmV0d2VlbiBib3RoIChiZXR3ZWVuIDAgYW5kIDEp
CisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSBWZWN0b3IzIHdoZXJlIHRvIHN0b3Jl
IHRoZSByZXN1bHQKKyAgICAgKi8KKyAgICBWZWN0b3IzLkxlcnBUb1JlZiA9IGZ1bmN0aW9uIChz
dGFydCwgZW5kLCBhbW91bnQsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQueCA9IHN0YXJ0Lngg
KyAoKGVuZC54IC0gc3RhcnQueCkgKiBhbW91bnQpOworICAgICAgICByZXN1bHQueSA9IHN0YXJ0
LnkgKyAoKGVuZC55IC0gc3RhcnQueSkgKiBhbW91bnQpOworICAgICAgICByZXN1bHQueiA9IHN0
YXJ0LnogKyAoKGVuZC56IC0gc3RhcnQueikgKiBhbW91bnQpOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBiZXR3ZWVuIHRoZSB2ZWN0b3Jz
ICJsZWZ0IiBhbmQgInJpZ2h0IgorICAgICAqIEBwYXJhbSBsZWZ0IGRlZmluZXMgdGhlIGxlZnQg
b3BlcmFuZAorICAgICAqIEBwYXJhbSByaWdodCBkZWZpbmVzIHRoZSByaWdodCBvcGVyYW5kCisg
ICAgICogQHJldHVybnMgdGhlIGRvdCBwcm9kdWN0CisgICAgICovCisgICAgVmVjdG9yMy5Eb3Qg
PSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsKKyAgICAgICAgcmV0dXJuIChsZWZ0LnggKiByaWdo
dC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0LnopOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGFzIHRoZSBjcm9zcyBwcm9kdWN0IG9m
IHRoZSB2ZWN0b3JzICJsZWZ0IiBhbmQgInJpZ2h0IgorICAgICAqIFRoZSBjcm9zcyBwcm9kdWN0
IGlzIHRoZW4gb3J0aG9nb25hbCB0byBib3RoICJsZWZ0IiBhbmQgInJpZ2h0IgorICAgICAqIEBw
YXJhbSBsZWZ0IGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZAorICAgICAqIEBwYXJhbSByaWdodCBk
ZWZpbmVzIHRoZSByaWdodCBvcGVyYW5kCisgICAgICogQHJldHVybnMgdGhlIGNyb3NzIHByb2R1
Y3QKKyAgICAgKi8KKyAgICBWZWN0b3IzLkNyb3NzID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7
CisgICAgICAgIHZhciByZXN1bHQgPSBWZWN0b3IzLlplcm8oKTsKKyAgICAgICAgVmVjdG9yMy5D
cm9zc1RvUmVmKGxlZnQsIHJpZ2h0LCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2ZW4gdmVjdG9yICJyZXN1bHQiIHdp
dGggdGhlIGNyb3NzIHByb2R1Y3Qgb2YgImxlZnQiIGFuZCAicmlnaHQiCisgICAgICogVGhlIGNy
b3NzIHByb2R1Y3QgaXMgdGhlbiBvcnRob2dvbmFsIHRvIGJvdGggImxlZnQiIGFuZCAicmlnaHQi
CisgICAgICogQHBhcmFtIGxlZnQgZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kCisgICAgICogQHBh
cmFtIHJpZ2h0IGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmQKKyAgICAgKiBAcGFyYW0gcmVzdWx0
IGRlZmluZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqLwor
ICAgIFZlY3RvcjMuQ3Jvc3NUb1JlZiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgcmVzdWx0KSB7
CisgICAgICAgIHZhciB4ID0gbGVmdC55ICogcmlnaHQueiAtIGxlZnQueiAqIHJpZ2h0Lnk7Cisg
ICAgICAgIHZhciB5ID0gbGVmdC56ICogcmlnaHQueCAtIGxlZnQueCAqIHJpZ2h0Lno7CisgICAg
ICAgIHZhciB6ID0gbGVmdC54ICogcmlnaHQueSAtIGxlZnQueSAqIHJpZ2h0Lng7CisgICAgICAg
IHJlc3VsdC5jb3B5RnJvbUZsb2F0cyh4LCB5LCB6KTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgbm9ybWFsaXphdGlvbiBvZiB0aGUgZ2l2ZW4g
dmVjdG9yCisgICAgICogQHBhcmFtIHZlY3RvciBkZWZpbmVzIHRoZSBWZWN0b3IzIHRvIG5vcm1h
bGl6ZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3Rv
cjMuTm9ybWFsaXplID0gZnVuY3Rpb24gKHZlY3RvcikgeworICAgICAgICB2YXIgcmVzdWx0ID0g
VmVjdG9yMy5aZXJvKCk7CisgICAgICAgIFZlY3RvcjMuTm9ybWFsaXplVG9SZWYodmVjdG9yLCBy
ZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICog
U2V0cyB0aGUgZ2l2ZW4gdmVjdG9yICJyZXN1bHQiIHdpdGggdGhlIG5vcm1hbGl6YXRpb24gb2Yg
dGhlIGdpdmVuIGZpcnN0IHZlY3RvcgorICAgICAqIEBwYXJhbSB2ZWN0b3IgZGVmaW5lcyB0aGUg
VmVjdG9yMyB0byBub3JtYWxpemUKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZl
Y3RvcjMgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqLworICAgIFZlY3RvcjMuTm9y
bWFsaXplVG9SZWYgPSBmdW5jdGlvbiAodmVjdG9yLCByZXN1bHQpIHsKKyAgICAgICAgdmVjdG9y
Lm5vcm1hbGl6ZVRvUmVmKHJlc3VsdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcm9qZWN0
IGEgVmVjdG9yMyBvbnRvIHNjcmVlbiBzcGFjZQorICAgICAqIEBwYXJhbSB2ZWN0b3IgZGVmaW5l
cyB0aGUgVmVjdG9yMyB0byBwcm9qZWN0CisgICAgICogQHBhcmFtIHdvcmxkIGRlZmluZXMgdGhl
IHdvcmxkIG1hdHJpeCB0byB1c2UKKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtIGRlZmluZXMgdGhl
IHRyYW5zZm9ybSAodmlldyB4IHByb2plY3Rpb24pIG1hdHJpeCB0byB1c2UKKyAgICAgKiBAcGFy
YW0gdmlld3BvcnQgZGVmaW5lcyB0aGUgc2NyZWVuIHZpZXdwb3J0IHRvIHVzZQorICAgICAqIEBy
ZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuUHJvamVjdCA9IGZ1
bmN0aW9uICh2ZWN0b3IsIHdvcmxkLCB0cmFuc2Zvcm0sIHZpZXdwb3J0KSB7CisgICAgICAgIHZh
ciBjdyA9IHZpZXdwb3J0LndpZHRoOworICAgICAgICB2YXIgY2ggPSB2aWV3cG9ydC5oZWlnaHQ7
CisgICAgICAgIHZhciBjeCA9IHZpZXdwb3J0Lng7CisgICAgICAgIHZhciBjeSA9IHZpZXdwb3J0
Lnk7CisgICAgICAgIHZhciB2aWV3cG9ydE1hdHJpeCA9IE1hdGhUbXAuTWF0cml4WzFdOworICAg
ICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKGN3IC8gMi4wLCAwLCAwLCAwLCAwLCAtY2ggLyAy
LjAsIDAsIDAsIDAsIDAsIDAuNSwgMCwgY3ggKyBjdyAvIDIuMCwgY2ggLyAyLjAgKyBjeSwgMC41
LCAxLCB2aWV3cG9ydE1hdHJpeCk7CisgICAgICAgIHZhciBtYXRyaXggPSBNYXRoVG1wLk1hdHJp
eFswXTsKKyAgICAgICAgd29ybGQubXVsdGlwbHlUb1JlZih0cmFuc2Zvcm0sIG1hdHJpeCk7Cisg
ICAgICAgIG1hdHJpeC5tdWx0aXBseVRvUmVmKHZpZXdwb3J0TWF0cml4LCBtYXRyaXgpOworICAg
ICAgICByZXR1cm4gVmVjdG9yMy5UcmFuc2Zvcm1Db29yZGluYXRlcyh2ZWN0b3IsIG1hdHJpeCk7
CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFZlY3RvcjMuX1VucHJvamVjdEZyb21J
bnZlcnRlZE1hdHJpeFRvUmVmID0gZnVuY3Rpb24gKHNvdXJjZSwgbWF0cml4LCByZXN1bHQpIHsK
KyAgICAgICAgVmVjdG9yMy5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHNvdXJjZSwgbWF0cml4
LCByZXN1bHQpOworICAgICAgICB2YXIgbSA9IG1hdHJpeC5tOworICAgICAgICB2YXIgbnVtID0g
c291cmNlLnggKiBtWzNdICsgc291cmNlLnkgKiBtWzddICsgc291cmNlLnogKiBtWzExXSArIG1b
MTVdOworICAgICAgICBpZiAoX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlNjYWxhciJdLldpdGhpbkVwc2lsb24obnVtLCAxLjApKSB7CisgICAgICAgICAgICByZXN1
bHQuc2NhbGVJblBsYWNlKDEuMCAvIG51bSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIFVucHJvamVjdCBmcm9tIHNjcmVlbiBzcGFjZSB0byBvYmplY3Qgc3BhY2UKKyAgICAg
KiBAcGFyYW0gc291cmNlIGRlZmluZXMgdGhlIHNjcmVlbiBzcGFjZSBWZWN0b3IzIHRvIHVzZQor
ICAgICAqIEBwYXJhbSB2aWV3cG9ydFdpZHRoIGRlZmluZXMgdGhlIGN1cnJlbnQgd2lkdGggb2Yg
dGhlIHZpZXdwb3J0CisgICAgICogQHBhcmFtIHZpZXdwb3J0SGVpZ2h0IGRlZmluZXMgdGhlIGN1
cnJlbnQgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydAorICAgICAqIEBwYXJhbSB3b3JsZCBkZWZpbmVz
IHRoZSB3b3JsZCBtYXRyaXggdG8gdXNlIChjYW4gYmUgc2V0IHRvIElkZW50aXR5IHRvIGdvIHRv
IHdvcmxkIHNwYWNlKQorICAgICAqIEBwYXJhbSB0cmFuc2Zvcm0gZGVmaW5lcyB0aGUgdHJhbnNm
b3JtICh2aWV3IHggcHJvamVjdGlvbikgbWF0cml4IHRvIHVzZQorICAgICAqIEByZXR1cm5zIHRo
ZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuVW5wcm9qZWN0RnJvbVRyYW5zZm9y
bSA9IGZ1bmN0aW9uIChzb3VyY2UsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB3b3Js
ZCwgdHJhbnNmb3JtKSB7CisgICAgICAgIHZhciBtYXRyaXggPSBNYXRoVG1wLk1hdHJpeFswXTsK
KyAgICAgICAgd29ybGQubXVsdGlwbHlUb1JlZih0cmFuc2Zvcm0sIG1hdHJpeCk7CisgICAgICAg
IG1hdHJpeC5pbnZlcnQoKTsKKyAgICAgICAgc291cmNlLnggPSBzb3VyY2UueCAvIHZpZXdwb3J0
V2lkdGggKiAyIC0gMTsKKyAgICAgICAgc291cmNlLnkgPSAtKHNvdXJjZS55IC8gdmlld3BvcnRI
ZWlnaHQgKiAyIC0gMSk7CisgICAgICAgIHZhciB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpOworICAg
ICAgICBWZWN0b3IzLl9VbnByb2plY3RGcm9tSW52ZXJ0ZWRNYXRyaXhUb1JlZihzb3VyY2UsIG1h
dHJpeCwgdmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIHZlY3RvcjsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFVucHJvamVjdCBmcm9tIHNjcmVlbiBzcGFjZSB0byBvYmplY3Qgc3BhY2UKKyAgICAg
KiBAcGFyYW0gc291cmNlIGRlZmluZXMgdGhlIHNjcmVlbiBzcGFjZSBWZWN0b3IzIHRvIHVzZQor
ICAgICAqIEBwYXJhbSB2aWV3cG9ydFdpZHRoIGRlZmluZXMgdGhlIGN1cnJlbnQgd2lkdGggb2Yg
dGhlIHZpZXdwb3J0CisgICAgICogQHBhcmFtIHZpZXdwb3J0SGVpZ2h0IGRlZmluZXMgdGhlIGN1
cnJlbnQgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydAorICAgICAqIEBwYXJhbSB3b3JsZCBkZWZpbmVz
IHRoZSB3b3JsZCBtYXRyaXggdG8gdXNlIChjYW4gYmUgc2V0IHRvIElkZW50aXR5IHRvIGdvIHRv
IHdvcmxkIHNwYWNlKQorICAgICAqIEBwYXJhbSB2aWV3IGRlZmluZXMgdGhlIHZpZXcgbWF0cml4
IHRvIHVzZQorICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIGRlZmluZXMgdGhlIHByb2plY3Rpb24g
bWF0cml4IHRvIHVzZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLwor
ICAgIFZlY3RvcjMuVW5wcm9qZWN0ID0gZnVuY3Rpb24gKHNvdXJjZSwgdmlld3BvcnRXaWR0aCwg
dmlld3BvcnRIZWlnaHQsIHdvcmxkLCB2aWV3LCBwcm9qZWN0aW9uKSB7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBWZWN0b3IzLlplcm8oKTsKKyAgICAgICAgVmVjdG9yMy5VbnByb2plY3RUb1JlZihz
b3VyY2UsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB3b3JsZCwgdmlldywgcHJvamVj
dGlvbiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFVucHJvamVjdCBmcm9tIHNjcmVlbiBzcGFjZSB0byBvYmplY3Qgc3BhY2UKKyAgICAg
KiBAcGFyYW0gc291cmNlIGRlZmluZXMgdGhlIHNjcmVlbiBzcGFjZSBWZWN0b3IzIHRvIHVzZQor
ICAgICAqIEBwYXJhbSB2aWV3cG9ydFdpZHRoIGRlZmluZXMgdGhlIGN1cnJlbnQgd2lkdGggb2Yg
dGhlIHZpZXdwb3J0CisgICAgICogQHBhcmFtIHZpZXdwb3J0SGVpZ2h0IGRlZmluZXMgdGhlIGN1
cnJlbnQgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydAorICAgICAqIEBwYXJhbSB3b3JsZCBkZWZpbmVz
IHRoZSB3b3JsZCBtYXRyaXggdG8gdXNlIChjYW4gYmUgc2V0IHRvIElkZW50aXR5IHRvIGdvIHRv
IHdvcmxkIHNwYWNlKQorICAgICAqIEBwYXJhbSB2aWV3IGRlZmluZXMgdGhlIHZpZXcgbWF0cml4
IHRvIHVzZQorICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIGRlZmluZXMgdGhlIHByb2plY3Rpb24g
bWF0cml4IHRvIHVzZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgVmVjdG9yMyB3
aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0CisgICAgICovCisgICAgVmVjdG9yMy5VbnByb2plY3RU
b1JlZiA9IGZ1bmN0aW9uIChzb3VyY2UsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB3
b3JsZCwgdmlldywgcHJvamVjdGlvbiwgcmVzdWx0KSB7CisgICAgICAgIFZlY3RvcjMuVW5wcm9q
ZWN0RmxvYXRzVG9SZWYoc291cmNlLngsIHNvdXJjZS55LCBzb3VyY2Uueiwgdmlld3BvcnRXaWR0
aCwgdmlld3BvcnRIZWlnaHQsIHdvcmxkLCB2aWV3LCBwcm9qZWN0aW9uLCByZXN1bHQpOworICAg
IH07CisgICAgLyoqCisgICAgICogVW5wcm9qZWN0IGZyb20gc2NyZWVuIHNwYWNlIHRvIG9iamVj
dCBzcGFjZQorICAgICAqIEBwYXJhbSBzb3VyY2VYIGRlZmluZXMgdGhlIHNjcmVlbiBzcGFjZSB4
IGNvb3JkaW5hdGUgdG8gdXNlCisgICAgICogQHBhcmFtIHNvdXJjZVkgZGVmaW5lcyB0aGUgc2Ny
ZWVuIHNwYWNlIHkgY29vcmRpbmF0ZSB0byB1c2UKKyAgICAgKiBAcGFyYW0gc291cmNlWiBkZWZp
bmVzIHRoZSBzY3JlZW4gc3BhY2UgeiBjb29yZGluYXRlIHRvIHVzZQorICAgICAqIEBwYXJhbSB2
aWV3cG9ydFdpZHRoIGRlZmluZXMgdGhlIGN1cnJlbnQgd2lkdGggb2YgdGhlIHZpZXdwb3J0Cisg
ICAgICogQHBhcmFtIHZpZXdwb3J0SGVpZ2h0IGRlZmluZXMgdGhlIGN1cnJlbnQgaGVpZ2h0IG9m
IHRoZSB2aWV3cG9ydAorICAgICAqIEBwYXJhbSB3b3JsZCBkZWZpbmVzIHRoZSB3b3JsZCBtYXRy
aXggdG8gdXNlIChjYW4gYmUgc2V0IHRvIElkZW50aXR5IHRvIGdvIHRvIHdvcmxkIHNwYWNlKQor
ICAgICAqIEBwYXJhbSB2aWV3IGRlZmluZXMgdGhlIHZpZXcgbWF0cml4IHRvIHVzZQorICAgICAq
IEBwYXJhbSBwcm9qZWN0aW9uIGRlZmluZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IHRvIHVzZQor
ICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgVmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0
aGUgcmVzdWx0CisgICAgICovCisgICAgVmVjdG9yMy5VbnByb2plY3RGbG9hdHNUb1JlZiA9IGZ1
bmN0aW9uIChzb3VyY2VYLCBzb3VyY2VZLCBzb3VyY2VaLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9y
dEhlaWdodCwgd29ybGQsIHZpZXcsIHByb2plY3Rpb24sIHJlc3VsdCkgeworICAgICAgICB2YXIg
bWF0cml4ID0gTWF0aFRtcC5NYXRyaXhbMF07CisgICAgICAgIHdvcmxkLm11bHRpcGx5VG9SZWYo
dmlldywgbWF0cml4KTsKKyAgICAgICAgbWF0cml4Lm11bHRpcGx5VG9SZWYocHJvamVjdGlvbiwg
bWF0cml4KTsKKyAgICAgICAgbWF0cml4LmludmVydCgpOworICAgICAgICB2YXIgc2NyZWVuU291
cmNlID0gTWF0aFRtcC5WZWN0b3IzWzBdOworICAgICAgICBzY3JlZW5Tb3VyY2UueCA9IHNvdXJj
ZVggLyB2aWV3cG9ydFdpZHRoICogMiAtIDE7CisgICAgICAgIHNjcmVlblNvdXJjZS55ID0gLShz
b3VyY2VZIC8gdmlld3BvcnRIZWlnaHQgKiAyIC0gMSk7CisgICAgICAgIHNjcmVlblNvdXJjZS56
ID0gMiAqIHNvdXJjZVogLSAxLjA7CisgICAgICAgIFZlY3RvcjMuX1VucHJvamVjdEZyb21JbnZl
cnRlZE1hdHJpeFRvUmVmKHNjcmVlblNvdXJjZSwgbWF0cml4LCByZXN1bHQpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgbWluaW1hbCBjb29yZGluYXRlIHZhbHVlcyBiZXR3ZWVu
IHR3byBWZWN0b3IzCisgICAgICogQHBhcmFtIGxlZnQgZGVmaW5lcyB0aGUgZmlyc3Qgb3BlcmFu
ZAorICAgICAqIEBwYXJhbSByaWdodCBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAq
IEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuTWluaW1pemUg
PSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsKKyAgICAgICAgdmFyIG1pbiA9IGxlZnQuY2xvbmUo
KTsKKyAgICAgICAgbWluLm1pbmltaXplSW5QbGFjZShyaWdodCk7CisgICAgICAgIHJldHVybiBt
aW47CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBtYXhpbWFsIGNvb3JkaW5hdGUg
dmFsdWVzIGJldHdlZW4gdHdvIFZlY3RvcjMKKyAgICAgKiBAcGFyYW0gbGVmdCBkZWZpbmVzIHRo
ZSBmaXJzdCBvcGVyYW5kCisgICAgICogQHBhcmFtIHJpZ2h0IGRlZmluZXMgdGhlIHNlY29uZCBv
cGVyYW5kCisgICAgICogQHJldHVybnMgdGhlIG5ldyBWZWN0b3IzCisgICAgICovCisgICAgVmVj
dG9yMy5NYXhpbWl6ZSA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeworICAgICAgICB2YXIgbWF4
ID0gbGVmdC5jbG9uZSgpOworICAgICAgICBtYXgubWF4aW1pemVJblBsYWNlKHJpZ2h0KTsKKyAg
ICAgICAgcmV0dXJuIG1heDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGRp
c3RhbmNlIGJldHdlZW4gdGhlIHZlY3RvcnMgInZhbHVlMSIgYW5kICJ2YWx1ZTIiCisgICAgICog
QHBhcmFtIHZhbHVlMSBkZWZpbmVzIHRoZSBmaXJzdCBvcGVyYW5kCisgICAgICogQHBhcmFtIHZh
bHVlMiBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBkaXN0
YW5jZQorICAgICAqLworICAgIFZlY3RvcjMuRGlzdGFuY2UgPSBmdW5jdGlvbiAodmFsdWUxLCB2
YWx1ZTIpIHsKKyAgICAgICAgcmV0dXJuIE1hdGguc3FydChWZWN0b3IzLkRpc3RhbmNlU3F1YXJl
ZCh2YWx1ZTEsIHZhbHVlMikpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUg
c3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB2ZWN0b3JzICJ2YWx1ZTEiIGFuZCAidmFsdWUy
IgorICAgICAqIEBwYXJhbSB2YWx1ZTEgZGVmaW5lcyB0aGUgZmlyc3Qgb3BlcmFuZAorICAgICAq
IEBwYXJhbSB2YWx1ZTIgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJu
cyB0aGUgc3F1YXJlZCBkaXN0YW5jZQorICAgICAqLworICAgIFZlY3RvcjMuRGlzdGFuY2VTcXVh
cmVkID0gZnVuY3Rpb24gKHZhbHVlMSwgdmFsdWUyKSB7CisgICAgICAgIHZhciB4ID0gdmFsdWUx
LnggLSB2YWx1ZTIueDsKKyAgICAgICAgdmFyIHkgPSB2YWx1ZTEueSAtIHZhbHVlMi55OworICAg
ICAgICB2YXIgeiA9IHZhbHVlMS56IC0gdmFsdWUyLno7CisgICAgICAgIHJldHVybiAoeCAqIHgp
ICsgKHkgKiB5KSArICh6ICogeik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEg
bmV3IFZlY3RvcjMgbG9jYXRlZCBhdCB0aGUgY2VudGVyIGJldHdlZW4gInZhbHVlMSIgYW5kICJ2
YWx1ZTIiCisgICAgICogQHBhcmFtIHZhbHVlMSBkZWZpbmVzIHRoZSBmaXJzdCBvcGVyYW5kCisg
ICAgICogQHBhcmFtIHZhbHVlMiBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEBy
ZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuQ2VudGVyID0gZnVu
Y3Rpb24gKHZhbHVlMSwgdmFsdWUyKSB7CisgICAgICAgIHZhciBjZW50ZXIgPSB2YWx1ZTEuYWRk
KHZhbHVlMik7CisgICAgICAgIGNlbnRlci5zY2FsZUluUGxhY2UoMC41KTsKKyAgICAgICAgcmV0
dXJuIGNlbnRlcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdpdmVuIHRocmVlIG9ydGhvZ29u
YWwgbm9ybWFsaXplZCBsZWZ0LWhhbmRlZCBvcmllbnRlZCBWZWN0b3IzIGF4aXMgaW4gc3BhY2Ug
KHRhcmdldCBzeXN0ZW0pLAorICAgICAqIFJvdGF0aW9uRnJvbUF4aXMoKSByZXR1cm5zIHRoZSBy
b3RhdGlvbiBFdWxlciBhbmdsZXMgKGV4IDogcm90YXRpb24ueCwgcm90YXRpb24ueSwgcm90YXRp
b24ueikgdG8gYXBwbHkKKyAgICAgKiB0byBzb21ldGhpbmcgaW4gb3JkZXIgdG8gcm90YXRlIGl0
IGZyb20gaXRzIGxvY2FsIHN5c3RlbSB0byB0aGUgZ2l2ZW4gdGFyZ2V0IHN5c3RlbQorICAgICAq
IE5vdGU6IGF4aXMxLCBheGlzMiBhbmQgYXhpczMgYXJlIG5vcm1hbGl6ZWQgZHVyaW5nIHRoaXMg
b3BlcmF0aW9uCisgICAgICogQHBhcmFtIGF4aXMxIGRlZmluZXMgdGhlIGZpcnN0IGF4aXMKKyAg
ICAgKiBAcGFyYW0gYXhpczIgZGVmaW5lcyB0aGUgc2Vjb25kIGF4aXMKKyAgICAgKiBAcGFyYW0g
YXhpczMgZGVmaW5lcyB0aGUgdGhpcmQgYXhpcworICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3Rv
cjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLlJvdGF0aW9uRnJvbUF4aXMgPSBmdW5jdGlvbiAoYXhp
czEsIGF4aXMyLCBheGlzMykgeworICAgICAgICB2YXIgcm90YXRpb24gPSBWZWN0b3IzLlplcm8o
KTsKKyAgICAgICAgVmVjdG9yMy5Sb3RhdGlvbkZyb21BeGlzVG9SZWYoYXhpczEsIGF4aXMyLCBh
eGlzMywgcm90YXRpb24pOworICAgICAgICByZXR1cm4gcm90YXRpb247CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBUaGUgc2FtZSB0aGFuIFJvdGF0aW9uRnJvbUF4aXMgYnV0IHVwZGF0ZXMgdGhl
IGdpdmVuIHJlZiBWZWN0b3IzIHBhcmFtZXRlciBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBW
ZWN0b3IzCisgICAgICogQHBhcmFtIGF4aXMxIGRlZmluZXMgdGhlIGZpcnN0IGF4aXMKKyAgICAg
KiBAcGFyYW0gYXhpczIgZGVmaW5lcyB0aGUgc2Vjb25kIGF4aXMKKyAgICAgKiBAcGFyYW0gYXhp
czMgZGVmaW5lcyB0aGUgdGhpcmQgYXhpcworICAgICAqIEBwYXJhbSByZWYgZGVmaW5lcyB0aGUg
VmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0CisgICAgICovCisgICAgVmVjdG9yMy5S
b3RhdGlvbkZyb21BeGlzVG9SZWYgPSBmdW5jdGlvbiAoYXhpczEsIGF4aXMyLCBheGlzMywgcmVm
KSB7CisgICAgICAgIHZhciBxdWF0ID0gTWF0aFRtcC5RdWF0ZXJuaW9uWzBdOworICAgICAgICBR
dWF0ZXJuaW9uLlJvdGF0aW9uUXVhdGVybmlvbkZyb21BeGlzVG9SZWYoYXhpczEsIGF4aXMyLCBh
eGlzMywgcXVhdCk7CisgICAgICAgIHF1YXQudG9FdWxlckFuZ2xlc1RvUmVmKHJlZik7CisgICAg
fTsKKyAgICBWZWN0b3IzLl9VcFJlYWRPbmx5ID0gVmVjdG9yMy5VcCgpOworICAgIFZlY3RvcjMu
X1plcm9SZWFkT25seSA9IFZlY3RvcjMuWmVybygpOworICAgIHJldHVybiBWZWN0b3IzOworfSgp
KTsKKworLyoqCisgKiBWZWN0b3I0IGNsYXNzIGNyZWF0ZWQgZm9yIEV1bGVyQW5nbGUgY2xhc3Mg
Y29udmVyc2lvbiB0byBRdWF0ZXJuaW9uCisgKi8KK3ZhciBWZWN0b3I0ID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBWZWN0b3I0IG9iamVj
dCBmcm9tIHRoZSBnaXZlbiBmbG9hdHMuCisgICAgICogQHBhcmFtIHggeCB2YWx1ZSBvZiB0aGUg
dmVjdG9yCisgICAgICogQHBhcmFtIHkgeSB2YWx1ZSBvZiB0aGUgdmVjdG9yCisgICAgICogQHBh
cmFtIHogeiB2YWx1ZSBvZiB0aGUgdmVjdG9yCisgICAgICogQHBhcmFtIHcgdyB2YWx1ZSBvZiB0
aGUgdmVjdG9yCisgICAgICovCisgICAgZnVuY3Rpb24gVmVjdG9yNCgKKyAgICAvKiogeCB2YWx1
ZSBvZiB0aGUgdmVjdG9yICovCisgICAgeCwgCisgICAgLyoqIHkgdmFsdWUgb2YgdGhlIHZlY3Rv
ciAqLworICAgIHksIAorICAgIC8qKiB6IHZhbHVlIG9mIHRoZSB2ZWN0b3IgKi8KKyAgICB6LCAK
KyAgICAvKiogdyB2YWx1ZSBvZiB0aGUgdmVjdG9yICovCisgICAgdykgeworICAgICAgICB0aGlz
LnggPSB4OworICAgICAgICB0aGlzLnkgPSB5OworICAgICAgICB0aGlzLnogPSB6OworICAgICAg
ICB0aGlzLncgPSB3OworICAgIH0KKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcg
d2l0aCB0aGUgVmVjdG9yNCBjb29yZGluYXRlcy4KKyAgICAgKiBAcmV0dXJucyBhIHN0cmluZyBj
b250YWluaW5nIGFsbCB0aGUgdmVjdG9yIHZhbHVlcworICAgICAqLworICAgIFZlY3RvcjQucHJv
dG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIntYOiAiICsg
dGhpcy54ICsgIiBZOiIgKyB0aGlzLnkgKyAiIFo6IiArIHRoaXMueiArICIgVzoiICsgdGhpcy53
ICsgIn0iOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3RyaW5nICJWZWN0
b3I0Ii4KKyAgICAgKiBAcmV0dXJucyAiVmVjdG9yNCIKKyAgICAgKi8KKyAgICBWZWN0b3I0LnBy
b3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiVmVj
dG9yNCI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBWZWN0b3I0IGhhc2gg
Y29kZS4KKyAgICAgKiBAcmV0dXJucyBhIHVuaXF1ZSBoYXNoIGNvZGUKKyAgICAgKi8KKyAgICBW
ZWN0b3I0LnByb3RvdHlwZS5nZXRIYXNoQ29kZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IGhhc2ggPSB0aGlzLnggfCAwOworICAgICAgICBoYXNoID0gKGhhc2ggKiAzOTcpIF4gKHRoaXMu
eSB8IDApOworICAgICAgICBoYXNoID0gKGhhc2ggKiAzOTcpIF4gKHRoaXMueiB8IDApOworICAg
ICAgICBoYXNoID0gKGhhc2ggKiAzOTcpIF4gKHRoaXMudyB8IDApOworICAgICAgICByZXR1cm4g
aGFzaDsKKyAgICB9OworICAgIC8vIE9wZXJhdG9ycworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBuZXcgYXJyYXkgcG9wdWxhdGVkIHdpdGggNCBlbGVtZW50cyA6IHRoZSBWZWN0b3I0IGNvb3Jk
aW5hdGVzLgorICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgYXJyYXkKKyAgICAgKi8KKyAg
ICBWZWN0b3I0LnByb3RvdHlwZS5hc0FycmF5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIg
cmVzdWx0ID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMudG9BcnJheShyZXN1bHQsIDApOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogUG9wdWxhdGVz
IHRoZSBnaXZlbiBhcnJheSBmcm9tIHRoZSBnaXZlbiBpbmRleCB3aXRoIHRoZSBWZWN0b3I0IGNv
b3JkaW5hdGVzLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBwb3B1bGF0ZQorICAgICAq
IEBwYXJhbSBpbmRleCBpbmRleCBvZiB0aGUgYXJyYXkgdG8gc3RhcnQgYXQgKGRlZmF1bHQ6IDAp
CisgICAgICogQHJldHVybnMgdGhlIFZlY3RvcjQuCisgICAgICovCisgICAgVmVjdG9yNC5wcm90
b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIChhcnJheSwgaW5kZXgpIHsKKyAgICAgICAgaWYgKGlu
ZGV4ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgfQor
ICAgICAgICBhcnJheVtpbmRleF0gPSB0aGlzLng7CisgICAgICAgIGFycmF5W2luZGV4ICsgMV0g
PSB0aGlzLnk7CisgICAgICAgIGFycmF5W2luZGV4ICsgMl0gPSB0aGlzLno7CisgICAgICAgIGFy
cmF5W2luZGV4ICsgM10gPSB0aGlzLnc7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQWRkcyB0aGUgZ2l2ZW4gdmVjdG9yIHRvIHRoZSBjdXJyZW50IFZlY3Rv
cjQuCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIHRoZSB2ZWN0b3IgdG8gYWRkCisgICAgICog
QHJldHVybnMgdGhlIHVwZGF0ZWQgVmVjdG9yNC4KKyAgICAgKi8KKyAgICBWZWN0b3I0LnByb3Rv
dHlwZS5hZGRJblBsYWNlID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yKSB7CisgICAgICAgIHRoaXMu
eCArPSBvdGhlclZlY3Rvci54OworICAgICAgICB0aGlzLnkgKz0gb3RoZXJWZWN0b3IueTsKKyAg
ICAgICAgdGhpcy56ICs9IG90aGVyVmVjdG9yLno7CisgICAgICAgIHRoaXMudyArPSBvdGhlclZl
Y3Rvci53OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
dHVybnMgYSBuZXcgVmVjdG9yNCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBhZGRpdGlvbiBvZiB0aGUg
Y3VycmVudCBWZWN0b3I0IGFuZCB0aGUgZ2l2ZW4gb25lLgorICAgICAqIEBwYXJhbSBvdGhlclZl
Y3RvciB0aGUgdmVjdG9yIHRvIGFkZAorICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVj
dG9yCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG90aGVy
VmVjdG9yKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCh0aGlzLnggKyBvdGhlclZlY3Rv
ci54LCB0aGlzLnkgKyBvdGhlclZlY3Rvci55LCB0aGlzLnogKyBvdGhlclZlY3Rvci56LCB0aGlz
LncgKyBvdGhlclZlY3Rvci53KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhl
IGdpdmVuIHZlY3RvciAicmVzdWx0IiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGFkZGl0aW9uIG9m
IHRoZSBjdXJyZW50IFZlY3RvcjQgYW5kIHRoZSBnaXZlbiBvbmUuCisgICAgICogQHBhcmFtIG90
aGVyVmVjdG9yIHRoZSB2ZWN0b3IgdG8gYWRkCisgICAgICogQHBhcmFtIHJlc3VsdCB0aGUgdmVj
dG9yIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0
b3I0LgorICAgICAqLworICAgIFZlY3RvcjQucHJvdG90eXBlLmFkZFRvUmVmID0gZnVuY3Rpb24g
KG90aGVyVmVjdG9yLCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnggPSB0aGlzLnggKyBvdGhl
clZlY3Rvci54OworICAgICAgICByZXN1bHQueSA9IHRoaXMueSArIG90aGVyVmVjdG9yLnk7Cisg
ICAgICAgIHJlc3VsdC56ID0gdGhpcy56ICsgb3RoZXJWZWN0b3IuejsKKyAgICAgICAgcmVzdWx0
LncgPSB0aGlzLncgKyBvdGhlclZlY3Rvci53OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFN1YnRyYWN0IGluIHBsYWNlIHRoZSBnaXZlbiB2ZWN0b3IgZnJv
bSB0aGUgY3VycmVudCBWZWN0b3I0LgorICAgICAqIEBwYXJhbSBvdGhlclZlY3RvciB0aGUgdmVj
dG9yIHRvIHN1YnRyYWN0CisgICAgICogQHJldHVybnMgdGhlIHVwZGF0ZWQgVmVjdG9yNC4KKyAg
ICAgKi8KKyAgICBWZWN0b3I0LnByb3RvdHlwZS5zdWJ0cmFjdEluUGxhY2UgPSBmdW5jdGlvbiAo
b3RoZXJWZWN0b3IpIHsKKyAgICAgICAgdGhpcy54IC09IG90aGVyVmVjdG9yLng7CisgICAgICAg
IHRoaXMueSAtPSBvdGhlclZlY3Rvci55OworICAgICAgICB0aGlzLnogLT0gb3RoZXJWZWN0b3Iu
ejsKKyAgICAgICAgdGhpcy53IC09IG90aGVyVmVjdG9yLnc7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3I0IHdpdGggdGhl
IHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb24gb2YgdGhlIGdpdmVuIHZlY3RvciBmcm9tIHRoZSBj
dXJyZW50IFZlY3RvcjQuCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIHRoZSB2ZWN0b3IgdG8g
YWRkCisgICAgICogQHJldHVybnMgdGhlIG5ldyB2ZWN0b3Igd2l0aCB0aGUgcmVzdWx0CisgICAg
ICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiAob3RoZXJWZWN0
b3IpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3I0KHRoaXMueCAtIG90aGVyVmVjdG9yLngs
IHRoaXMueSAtIG90aGVyVmVjdG9yLnksIHRoaXMueiAtIG90aGVyVmVjdG9yLnosIHRoaXMudyAt
IG90aGVyVmVjdG9yLncpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2ZW4g
dmVjdG9yICJyZXN1bHQiIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb24gb2YgdGhl
IGdpdmVuIHZlY3RvciBmcm9tIHRoZSBjdXJyZW50IFZlY3RvcjQuCisgICAgICogQHBhcmFtIG90
aGVyVmVjdG9yIHRoZSB2ZWN0b3IgdG8gc3VidHJhY3QKKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRo
ZSB2ZWN0b3IgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50
IFZlY3RvcjQuCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuc3VidHJhY3RUb1JlZiA9
IGZ1bmN0aW9uIChvdGhlclZlY3RvciwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0gdGhp
cy54IC0gb3RoZXJWZWN0b3IueDsKKyAgICAgICAgcmVzdWx0LnkgPSB0aGlzLnkgLSBvdGhlclZl
Y3Rvci55OworICAgICAgICByZXN1bHQueiA9IHRoaXMueiAtIG90aGVyVmVjdG9yLno7CisgICAg
ICAgIHJlc3VsdC53ID0gdGhpcy53IC0gb3RoZXJWZWN0b3IudzsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjQgc2V0IHdp
dGggdGhlIHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb24gb2YgdGhlIGdpdmVuIGZsb2F0cyBmcm9t
IHRoZSBjdXJyZW50IFZlY3RvcjQgY29vcmRpbmF0ZXMuCisgICAgICovCisgICAgLyoqCisgICAg
ICogUmV0dXJucyBhIG5ldyBWZWN0b3I0IHNldCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIHN1YnRy
YWN0aW9uIG9mIHRoZSBnaXZlbiBmbG9hdHMgZnJvbSB0aGUgY3VycmVudCBWZWN0b3I0IGNvb3Jk
aW5hdGVzLgorICAgICAqIEBwYXJhbSB4IHZhbHVlIHRvIHN1YnRyYWN0CisgICAgICogQHBhcmFt
IHkgdmFsdWUgdG8gc3VidHJhY3QKKyAgICAgKiBAcGFyYW0geiB2YWx1ZSB0byBzdWJ0cmFjdAor
ICAgICAqIEBwYXJhbSB3IHZhbHVlIHRvIHN1YnRyYWN0CisgICAgICogQHJldHVybnMgbmV3IHZl
Y3RvciBjb250YWluaW5nIHRoZSByZXN1bHQKKyAgICAgKi8KKyAgICBWZWN0b3I0LnByb3RvdHlw
ZS5zdWJ0cmFjdEZyb21GbG9hdHMgPSBmdW5jdGlvbiAoeCwgeSwgeiwgdykgeworICAgICAgICBy
ZXR1cm4gbmV3IFZlY3RvcjQodGhpcy54IC0geCwgdGhpcy55IC0geSwgdGhpcy56IC0geiwgdGhp
cy53IC0gdyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3Ig
InJlc3VsdCIgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb24gb2YgdGhlIGdp
dmVuIGZsb2F0cyBmcm9tIHRoZSBjdXJyZW50IFZlY3RvcjQgY29vcmRpbmF0ZXMuCisgICAgICog
QHBhcmFtIHggdmFsdWUgdG8gc3VidHJhY3QKKyAgICAgKiBAcGFyYW0geSB2YWx1ZSB0byBzdWJ0
cmFjdAorICAgICAqIEBwYXJhbSB6IHZhbHVlIHRvIHN1YnRyYWN0CisgICAgICogQHBhcmFtIHcg
dmFsdWUgdG8gc3VidHJhY3QKKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSB2ZWN0b3IgdG8gc3Rv
cmUgdGhlIHJlc3VsdCBpbgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IFZlY3RvcjQuCisg
ICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuc3VidHJhY3RGcm9tRmxvYXRzVG9SZWYgPSBm
dW5jdGlvbiAoeCwgeSwgeiwgdywgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0gdGhpcy54
IC0geDsKKyAgICAgICAgcmVzdWx0LnkgPSB0aGlzLnkgLSB5OworICAgICAgICByZXN1bHQueiA9
IHRoaXMueiAtIHo7CisgICAgICAgIHJlc3VsdC53ID0gdGhpcy53IC0gdzsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjQg
c2V0IHdpdGggdGhlIGN1cnJlbnQgVmVjdG9yNCBuZWdhdGVkIGNvb3JkaW5hdGVzLgorICAgICAq
IEByZXR1cm5zIGEgbmV3IHZlY3RvciB3aXRoIHRoZSBuZWdhdGVkIHZhbHVlcworICAgICAqLwor
ICAgIFZlY3RvcjQucHJvdG90eXBlLm5lZ2F0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBWZWN0b3I0KC10aGlzLngsIC10aGlzLnksIC10aGlzLnosIC10aGlzLncpOworICAg
IH07CisgICAgLyoqCisgICAgICogTXVsdGlwbGllcyB0aGUgY3VycmVudCBWZWN0b3I0IGNvb3Jk
aW5hdGVzIGJ5IHNjYWxlIChmbG9hdCkuCisgICAgICogQHBhcmFtIHNjYWxlIHRoZSBudW1iZXIg
dG8gc2NhbGUgd2l0aAorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIFZlY3RvcjQuCisgICAg
ICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuc2NhbGVJblBsYWNlID0gZnVuY3Rpb24gKHNjYWxl
KSB7CisgICAgICAgIHRoaXMueCAqPSBzY2FsZTsKKyAgICAgICAgdGhpcy55ICo9IHNjYWxlOwor
ICAgICAgICB0aGlzLnogKj0gc2NhbGU7CisgICAgICAgIHRoaXMudyAqPSBzY2FsZTsKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZl
Y3RvcjQgc2V0IHdpdGggdGhlIGN1cnJlbnQgVmVjdG9yNCBjb29yZGluYXRlcyBtdWx0aXBsaWVk
IGJ5IHNjYWxlIChmbG9hdCkuCisgICAgICogQHBhcmFtIHNjYWxlIHRoZSBudW1iZXIgdG8gc2Nh
bGUgd2l0aAorICAgICAqIEByZXR1cm5zIGEgbmV3IHZlY3RvciB3aXRoIHRoZSByZXN1bHQKKyAg
ICAgKi8KKyAgICBWZWN0b3I0LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSkgewor
ICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjQodGhpcy54ICogc2NhbGUsIHRoaXMueSAqIHNjYWxl
LCB0aGlzLnogKiBzY2FsZSwgdGhpcy53ICogc2NhbGUpOworICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0cyB0aGUgZ2l2ZW4gdmVjdG9yICJyZXN1bHQiIHdpdGggdGhlIGN1cnJlbnQgVmVjdG9y
NCBjb29yZGluYXRlcyBtdWx0aXBsaWVkIGJ5IHNjYWxlIChmbG9hdCkuCisgICAgICogQHBhcmFt
IHNjYWxlIHRoZSBudW1iZXIgdG8gc2NhbGUgd2l0aAorICAgICAqIEBwYXJhbSByZXN1bHQgYSB2
ZWN0b3IgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50
IFZlY3RvcjQuCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuc2NhbGVUb1JlZiA9IGZ1
bmN0aW9uIChzY2FsZSwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0gdGhpcy54ICogc2Nh
bGU7CisgICAgICAgIHJlc3VsdC55ID0gdGhpcy55ICogc2NhbGU7CisgICAgICAgIHJlc3VsdC56
ID0gdGhpcy56ICogc2NhbGU7CisgICAgICAgIHJlc3VsdC53ID0gdGhpcy53ICogc2NhbGU7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2NhbGUgdGhlIGN1
cnJlbnQgVmVjdG9yNCB2YWx1ZXMgYnkgYSBmYWN0b3IgYW5kIGFkZCB0aGUgcmVzdWx0IHRvIGEg
Z2l2ZW4gVmVjdG9yNAorICAgICAqIEBwYXJhbSBzY2FsZSBkZWZpbmVzIHRoZSBzY2FsZSBmYWN0
b3IKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjQgb2JqZWN0IHdoZXJl
IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0aGUgdW5tb2RpZmllZCBjdXJy
ZW50IFZlY3RvcjQKKyAgICAgKi8KKyAgICBWZWN0b3I0LnByb3RvdHlwZS5zY2FsZUFuZEFkZFRv
UmVmID0gZnVuY3Rpb24gKHNjYWxlLCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnggKz0gdGhp
cy54ICogc2NhbGU7CisgICAgICAgIHJlc3VsdC55ICs9IHRoaXMueSAqIHNjYWxlOworICAgICAg
ICByZXN1bHQueiArPSB0aGlzLnogKiBzY2FsZTsKKyAgICAgICAgcmVzdWx0LncgKz0gdGhpcy53
ICogc2NhbGU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICog
Qm9vbGVhbiA6IFRydWUgaWYgdGhlIGN1cnJlbnQgVmVjdG9yNCBjb29yZGluYXRlcyBhcmUgc3Ry
aWNseSBlcXVhbCB0byB0aGUgZ2l2ZW4gb25lcy4KKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3Ig
dGhlIHZlY3RvciB0byBjb21wYXJlIGFnYWluc3QKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRo
ZXkgYXJlIGVxdWFsCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuZXF1YWxzID0gZnVu
Y3Rpb24gKG90aGVyVmVjdG9yKSB7CisgICAgICAgIHJldHVybiBvdGhlclZlY3RvciAmJiB0aGlz
LnggPT09IG90aGVyVmVjdG9yLnggJiYgdGhpcy55ID09PSBvdGhlclZlY3Rvci55ICYmIHRoaXMu
eiA9PT0gb3RoZXJWZWN0b3IueiAmJiB0aGlzLncgPT09IG90aGVyVmVjdG9yLnc7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBCb29sZWFuIDogVHJ1ZSBpZiB0aGUgY3VycmVudCBWZWN0b3I0IGNv
b3JkaW5hdGVzIGFyZSBlYWNoIGJlbmVhdGggdGhlIGRpc3RhbmNlICJlcHNpbG9uIiBmcm9tIHRo
ZSBnaXZlbiB2ZWN0b3Igb25lcy4KKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgdmVjdG9yIHRv
IGNvbXBhcmUgYWdhaW5zdAorICAgICAqIEBwYXJhbSBlcHNpbG9uIChEZWZhdWx0OiB2ZXJ5IHNt
YWxsIG51bWJlcikKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZXkgYXJlIGVxdWFsCisgICAg
ICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuZXF1YWxzV2l0aEVwc2lsb24gPSBmdW5jdGlvbiAo
b3RoZXJWZWN0b3IsIGVwc2lsb24pIHsKKyAgICAgICAgaWYgKGVwc2lsb24gPT09IHZvaWQgMCkg
eyBlcHNpbG9uID0gX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkVwc2lsb24iXTsgfQorICAgICAgICByZXR1cm4gb3RoZXJWZWN0b3IKKyAgICAgICAgICAgICYm
IF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRo
aW5FcHNpbG9uKHRoaXMueCwgb3RoZXJWZWN0b3IueCwgZXBzaWxvbikKKyAgICAgICAgICAgICYm
IF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRo
aW5FcHNpbG9uKHRoaXMueSwgb3RoZXJWZWN0b3IueSwgZXBzaWxvbikKKyAgICAgICAgICAgICYm
IF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRo
aW5FcHNpbG9uKHRoaXMueiwgb3RoZXJWZWN0b3IueiwgZXBzaWxvbikKKyAgICAgICAgICAgICYm
IF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRo
aW5FcHNpbG9uKHRoaXMudywgb3RoZXJWZWN0b3IudywgZXBzaWxvbik7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBCb29sZWFuIDogVHJ1ZSBpZiB0aGUgZ2l2ZW4gZmxvYXRzIGFyZSBzdHJpY3Rs
eSBlcXVhbCB0byB0aGUgY3VycmVudCBWZWN0b3I0IGNvb3JkaW5hdGVzLgorICAgICAqIEBwYXJh
bSB4IHggdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0CisgICAgICogQHBhcmFtIHkgeSB2YWx1ZSB0
byBjb21wYXJlIGFnYWluc3QKKyAgICAgKiBAcGFyYW0geiB6IHZhbHVlIHRvIGNvbXBhcmUgYWdh
aW5zdAorICAgICAqIEBwYXJhbSB3IHcgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0CisgICAgICog
QHJldHVybnMgdHJ1ZSBpZiBlcXVhbAorICAgICAqLworICAgIFZlY3RvcjQucHJvdG90eXBlLmVx
dWFsc1RvRmxvYXRzID0gZnVuY3Rpb24gKHgsIHksIHosIHcpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMueCA9PT0geCAmJiB0aGlzLnkgPT09IHkgJiYgdGhpcy56ID09PSB6ICYmIHRoaXMudyA9PT0g
dzsKKyAgICB9OworICAgIC8qKgorICAgICAqIE11bHRpcGxpZXMgaW4gcGxhY2UgdGhlIGN1cnJl
bnQgVmVjdG9yNCBieSB0aGUgZ2l2ZW4gb25lLgorICAgICAqIEBwYXJhbSBvdGhlclZlY3RvciB2
ZWN0b3IgdG8gbXVsdGlwbGUgd2l0aAorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIFZlY3Rv
cjQuCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUubXVsdGlwbHlJblBsYWNlID0gZnVu
Y3Rpb24gKG90aGVyVmVjdG9yKSB7CisgICAgICAgIHRoaXMueCAqPSBvdGhlclZlY3Rvci54Owor
ICAgICAgICB0aGlzLnkgKj0gb3RoZXJWZWN0b3IueTsKKyAgICAgICAgdGhpcy56ICo9IG90aGVy
VmVjdG9yLno7CisgICAgICAgIHRoaXMudyAqPSBvdGhlclZlY3Rvci53OworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yNCBz
ZXQgd2l0aCB0aGUgbXVsdGlwbGljYXRpb24gcmVzdWx0IG9mIHRoZSBjdXJyZW50IFZlY3RvcjQg
YW5kIHRoZSBnaXZlbiBvbmUuCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIHZlY3RvciB0byBt
dWx0aXBsZSB3aXRoCisgICAgICogQHJldHVybnMgcmVzdWx0aW5nIG5ldyB2ZWN0b3IKKyAgICAg
Ki8KKyAgICBWZWN0b3I0LnByb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdGhlclZlY3Rv
cikgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjQodGhpcy54ICogb3RoZXJWZWN0b3IueCwg
dGhpcy55ICogb3RoZXJWZWN0b3IueSwgdGhpcy56ICogb3RoZXJWZWN0b3IueiwgdGhpcy53ICog
b3RoZXJWZWN0b3Iudyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBnaXZl
biB2ZWN0b3IgInJlc3VsdCIgd2l0aCB0aGUgbXVsdGlwbGljYXRpb24gcmVzdWx0IG9mIHRoZSBj
dXJyZW50IFZlY3RvcjQgYW5kIHRoZSBnaXZlbiBvbmUuCisgICAgICogQHBhcmFtIG90aGVyVmVj
dG9yIHZlY3RvciB0byBtdWx0aXBsZSB3aXRoCisgICAgICogQHBhcmFtIHJlc3VsdCB2ZWN0b3Ig
dG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IFZlY3RvcjQu
CisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUubXVsdGlwbHlUb1JlZiA9IGZ1bmN0aW9u
IChvdGhlclZlY3RvciwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0gdGhpcy54ICogb3Ro
ZXJWZWN0b3IueDsKKyAgICAgICAgcmVzdWx0LnkgPSB0aGlzLnkgKiBvdGhlclZlY3Rvci55Owor
ICAgICAgICByZXN1bHQueiA9IHRoaXMueiAqIG90aGVyVmVjdG9yLno7CisgICAgICAgIHJlc3Vs
dC53ID0gdGhpcy53ICogb3RoZXJWZWN0b3IudzsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjQgc2V0IHdpdGggdGhlIG11
bHRpcGxpY2F0aW9uIHJlc3VsdCBvZiB0aGUgZ2l2ZW4gZmxvYXRzIGFuZCB0aGUgY3VycmVudCBW
ZWN0b3I0IGNvb3JkaW5hdGVzLgorICAgICAqIEBwYXJhbSB4IHggdmFsdWUgbXVsdGlwbHkgd2l0
aAorICAgICAqIEBwYXJhbSB5IHkgdmFsdWUgbXVsdGlwbHkgd2l0aAorICAgICAqIEBwYXJhbSB6
IHogdmFsdWUgbXVsdGlwbHkgd2l0aAorICAgICAqIEBwYXJhbSB3IHcgdmFsdWUgbXVsdGlwbHkg
d2l0aAorICAgICAqIEByZXR1cm5zIHJlc3VsdGluZyBuZXcgdmVjdG9yCisgICAgICovCisgICAg
VmVjdG9yNC5wcm90b3R5cGUubXVsdGlwbHlCeUZsb2F0cyA9IGZ1bmN0aW9uICh4LCB5LCB6LCB3
KSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCh0aGlzLnggKiB4LCB0aGlzLnkgKiB5LCB0
aGlzLnogKiB6LCB0aGlzLncgKiB3KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBuZXcgVmVjdG9yNCBzZXQgd2l0aCB0aGUgZGl2aXNpb24gcmVzdWx0IG9mIHRoZSBjdXJyZW50
IFZlY3RvcjQgYnkgdGhlIGdpdmVuIG9uZS4KKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgdmVj
dG9yIHRvIGRldmlkZSB3aXRoCisgICAgICogQHJldHVybnMgcmVzdWx0aW5nIG5ldyB2ZWN0b3IK
KyAgICAgKi8KKyAgICBWZWN0b3I0LnByb3RvdHlwZS5kaXZpZGUgPSBmdW5jdGlvbiAob3RoZXJW
ZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3I0KHRoaXMueCAvIG90aGVyVmVjdG9y
LngsIHRoaXMueSAvIG90aGVyVmVjdG9yLnksIHRoaXMueiAvIG90aGVyVmVjdG9yLnosIHRoaXMu
dyAvIG90aGVyVmVjdG9yLncpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUg
Z2l2ZW4gdmVjdG9yICJyZXN1bHQiIHdpdGggdGhlIGRpdmlzaW9uIHJlc3VsdCBvZiB0aGUgY3Vy
cmVudCBWZWN0b3I0IGJ5IHRoZSBnaXZlbiBvbmUuCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9y
IHZlY3RvciB0byBkZXZpZGUgd2l0aAorICAgICAqIEBwYXJhbSByZXN1bHQgdmVjdG9yIHRvIHN0
b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0b3I0LgorICAg
ICAqLworICAgIFZlY3RvcjQucHJvdG90eXBlLmRpdmlkZVRvUmVmID0gZnVuY3Rpb24gKG90aGVy
VmVjdG9yLCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnggPSB0aGlzLnggLyBvdGhlclZlY3Rv
ci54OworICAgICAgICByZXN1bHQueSA9IHRoaXMueSAvIG90aGVyVmVjdG9yLnk7CisgICAgICAg
IHJlc3VsdC56ID0gdGhpcy56IC8gb3RoZXJWZWN0b3IuejsKKyAgICAgICAgcmVzdWx0LncgPSB0
aGlzLncgLyBvdGhlclZlY3Rvci53OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAg
IC8qKgorICAgICAqIERpdmlkZXMgdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBieSB0
aGUgZ2l2ZW4gb25lcy4KKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgdmVjdG9yIHRvIGRldmlk
ZSB3aXRoCisgICAgICogQHJldHVybnMgdGhlIHVwZGF0ZWQgVmVjdG9yMy4KKyAgICAgKi8KKyAg
ICBWZWN0b3I0LnByb3RvdHlwZS5kaXZpZGVJblBsYWNlID0gZnVuY3Rpb24gKG90aGVyVmVjdG9y
KSB7CisgICAgICAgIHJldHVybiB0aGlzLmRpdmlkZVRvUmVmKG90aGVyVmVjdG9yLCB0aGlzKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIFZlY3RvcjQgY29vcmRpbmF0ZXMg
d2l0aCB0aGUgbWluaW11bSB2YWx1ZXMgYmV0d2VlbiBpdHMgb3duIGFuZCB0aGUgZ2l2ZW4gdmVj
dG9yIG9uZXMKKyAgICAgKiBAcGFyYW0gb3RoZXIgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQK
KyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjQKKyAgICAgKi8KKyAg
ICBWZWN0b3I0LnByb3RvdHlwZS5taW5pbWl6ZUluUGxhY2UgPSBmdW5jdGlvbiAob3RoZXIpIHsK
KyAgICAgICAgaWYgKG90aGVyLnggPCB0aGlzLngpIHsKKyAgICAgICAgICAgIHRoaXMueCA9IG90
aGVyLng7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG90aGVyLnkgPCB0aGlzLnkpIHsKKyAgICAg
ICAgICAgIHRoaXMueSA9IG90aGVyLnk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG90aGVyLnog
PCB0aGlzLnopIHsKKyAgICAgICAgICAgIHRoaXMueiA9IG90aGVyLno7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG90aGVyLncgPCB0aGlzLncpIHsKKyAgICAgICAgICAgIHRoaXMudyA9IG90aGVy
Lnc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBVcGRhdGVzIHRoZSBWZWN0b3I0IGNvb3JkaW5hdGVzIHdpdGggdGhlIG1heGltdW0gdmFs
dWVzIGJldHdlZW4gaXRzIG93biBhbmQgdGhlIGdpdmVuIHZlY3RvciBvbmVzCisgICAgICogQHBh
cmFtIG90aGVyIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHJldHVybnMgdGhl
IGN1cnJlbnQgdXBkYXRlZCBWZWN0b3I0CisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUu
bWF4aW1pemVJblBsYWNlID0gZnVuY3Rpb24gKG90aGVyKSB7CisgICAgICAgIGlmIChvdGhlci54
ID4gdGhpcy54KSB7CisgICAgICAgICAgICB0aGlzLnggPSBvdGhlci54OworICAgICAgICB9Cisg
ICAgICAgIGlmIChvdGhlci55ID4gdGhpcy55KSB7CisgICAgICAgICAgICB0aGlzLnkgPSBvdGhl
ci55OworICAgICAgICB9CisgICAgICAgIGlmIChvdGhlci56ID4gdGhpcy56KSB7CisgICAgICAg
ICAgICB0aGlzLnogPSBvdGhlci56OworICAgICAgICB9CisgICAgICAgIGlmIChvdGhlci53ID4g
dGhpcy53KSB7CisgICAgICAgICAgICB0aGlzLncgPSBvdGhlci53OworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIG5ldyBWZWN0
b3I0IGZyb20gY3VycmVudCBWZWN0b3I0IGZsb29yZWQgdmFsdWVzCisgICAgICogQHJldHVybnMg
YSBuZXcgVmVjdG9yNAorICAgICAqLworICAgIFZlY3RvcjQucHJvdG90eXBlLmZsb29yID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjQoTWF0aC5mbG9vcih0aGlzLngp
LCBNYXRoLmZsb29yKHRoaXMueSksIE1hdGguZmxvb3IodGhpcy56KSwgTWF0aC5mbG9vcih0aGlz
LncpKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBuZXcgVmVjdG9yNCBmcm9tIGN1
cnJlbnQgVmVjdG9yMyBmbG9vcmVkIHZhbHVlcworICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3Rv
cjQKKyAgICAgKi8KKyAgICBWZWN0b3I0LnByb3RvdHlwZS5mcmFjdCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3I0KHRoaXMueCAtIE1hdGguZmxvb3IodGhpcy54KSwg
dGhpcy55IC0gTWF0aC5mbG9vcih0aGlzLnkpLCB0aGlzLnogLSBNYXRoLmZsb29yKHRoaXMueiks
IHRoaXMudyAtIE1hdGguZmxvb3IodGhpcy53KSk7CisgICAgfTsKKyAgICAvLyBQcm9wZXJ0aWVz
CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgVmVjdG9yNCBsZW5ndGggKGZsb2F0KS4KKyAg
ICAgKiBAcmV0dXJucyB0aGUgbGVuZ3RoCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUu
bGVuZ3RoID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAq
IHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueiArIHRoaXMudyAqIHRo
aXMudyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBWZWN0b3I0IHNxdWFy
ZWQgbGVuZ3RoIChmbG9hdCkuCisgICAgICogQHJldHVybnMgdGhlIGxlbmd0aCBzcXVhcmVkCisg
ICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUubGVuZ3RoU3F1YXJlZCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICh0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0
aGlzLnogKiB0aGlzLnogKyB0aGlzLncgKiB0aGlzLncpOworICAgIH07CisgICAgLy8gTWV0aG9k
cworICAgIC8qKgorICAgICAqIE5vcm1hbGl6ZXMgaW4gcGxhY2UgdGhlIFZlY3RvcjQuCisgICAg
ICogQHJldHVybnMgdGhlIHVwZGF0ZWQgVmVjdG9yNC4KKyAgICAgKi8KKyAgICBWZWN0b3I0LnBy
b3RvdHlwZS5ub3JtYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBsZW4gPSB0aGlz
Lmxlbmd0aCgpOworICAgICAgICBpZiAobGVuID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5zY2FsZUluUGxhY2UoMS4wIC8g
bGVuKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBmcm9t
IHRoZSBWZWN0b3I0ICh4LCB5LCB6KSBjb29yZGluYXRlcy4KKyAgICAgKiBAcmV0dXJucyB0aGlz
IGNvbnZlcnRlZCB0byBhIG5ldyB2ZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5
cGUudG9WZWN0b3IzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMo
dGhpcy54LCB0aGlzLnksIHRoaXMueik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IGEgbmV3IFZlY3RvcjQgY29waWVkIGZyb20gdGhlIGN1cnJlbnQgb25lLgorICAgICAqIEByZXR1
cm5zIHRoZSBuZXcgY2xvbmVkIHZlY3RvcgorICAgICAqLworICAgIFZlY3RvcjQucHJvdG90eXBl
LmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjQodGhpcy54
LCB0aGlzLnksIHRoaXMueiwgdGhpcy53KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0
ZXMgdGhlIGN1cnJlbnQgVmVjdG9yNCB3aXRoIHRoZSBnaXZlbiBvbmUgY29vcmRpbmF0ZXMuCisg
ICAgICogQHBhcmFtIHNvdXJjZSB0aGUgc291cmNlIHZlY3RvciB0byBjb3B5IGZyb20KKyAgICAg
KiBAcmV0dXJucyB0aGUgdXBkYXRlZCBWZWN0b3I0LgorICAgICAqLworICAgIFZlY3RvcjQucHJv
dG90eXBlLmNvcHlGcm9tID0gZnVuY3Rpb24gKHNvdXJjZSkgeworICAgICAgICB0aGlzLnggPSBz
b3VyY2UueDsKKyAgICAgICAgdGhpcy55ID0gc291cmNlLnk7CisgICAgICAgIHRoaXMueiA9IHNv
dXJjZS56OworICAgICAgICB0aGlzLncgPSBzb3VyY2UudzsKKyAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50IFZlY3RvcjQgY29v
cmRpbmF0ZXMgd2l0aCB0aGUgZ2l2ZW4gZmxvYXRzLgorICAgICAqIEBwYXJhbSB4IGZsb2F0IHRv
IGNvcHkgZnJvbQorICAgICAqIEBwYXJhbSB5IGZsb2F0IHRvIGNvcHkgZnJvbQorICAgICAqIEBw
YXJhbSB6IGZsb2F0IHRvIGNvcHkgZnJvbQorICAgICAqIEBwYXJhbSB3IGZsb2F0IHRvIGNvcHkg
ZnJvbQorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIFZlY3RvcjQuCisgICAgICovCisgICAg
VmVjdG9yNC5wcm90b3R5cGUuY29weUZyb21GbG9hdHMgPSBmdW5jdGlvbiAoeCwgeSwgeiwgdykg
eworICAgICAgICB0aGlzLnggPSB4OworICAgICAgICB0aGlzLnkgPSB5OworICAgICAgICB0aGlz
LnogPSB6OworICAgICAgICB0aGlzLncgPSB3OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgVmVjdG9yNCBjb29yZGluYXRl
cyB3aXRoIHRoZSBnaXZlbiBmbG9hdHMuCisgICAgICogQHBhcmFtIHggZmxvYXQgdG8gc2V0IGZy
b20KKyAgICAgKiBAcGFyYW0geSBmbG9hdCB0byBzZXQgZnJvbQorICAgICAqIEBwYXJhbSB6IGZs
b2F0IHRvIHNldCBmcm9tCisgICAgICogQHBhcmFtIHcgZmxvYXQgdG8gc2V0IGZyb20KKyAgICAg
KiBAcmV0dXJucyB0aGUgdXBkYXRlZCBWZWN0b3I0LgorICAgICAqLworICAgIFZlY3RvcjQucHJv
dG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5LCB6LCB3KSB7CisgICAgICAgIHJldHVybiB0aGlz
LmNvcHlGcm9tRmxvYXRzKHgsIHksIHosIHcpOworICAgIH07CisgICAgLyoqCisgICAgICogQ29w
aWVzIHRoZSBnaXZlbiBmbG9hdCB0byB0aGUgY3VycmVudCBWZWN0b3IzIGNvb3JkaW5hdGVzCisg
ICAgICogQHBhcmFtIHYgZGVmaW5lcyB0aGUgeCwgeSwgeiBhbmQgdyBjb29yZGluYXRlcyBvZiB0
aGUgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yMwor
ICAgICAqLworICAgIFZlY3RvcjQucHJvdG90eXBlLnNldEFsbCA9IGZ1bmN0aW9uICh2KSB7Cisg
ICAgICAgIHRoaXMueCA9IHRoaXMueSA9IHRoaXMueiA9IHRoaXMudyA9IHY7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgLy8gU3RhdGljcworICAgIC8qKgorICAgICAqIFJldHVy
bnMgYSBuZXcgVmVjdG9yNCBzZXQgZnJvbSB0aGUgc3RhcnRpbmcgaW5kZXggb2YgdGhlIGdpdmVu
IGFycmF5LgorICAgICAqIEBwYXJhbSBhcnJheSB0aGUgYXJyYXkgdG8gcHVsbCB2YWx1ZXMgZnJv
bQorICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBhcnJheSB0byBzdGFy
dCBhdAorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgdmVjdG9yCisgICAgICovCisgICAgVmVjdG9y
NC5Gcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXksIG9mZnNldCkgeworICAgICAgICBpZiAoIW9m
ZnNldCkgeworICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbmV3IFZlY3RvcjQoYXJyYXlbb2Zmc2V0XSwgYXJyYXlbb2Zmc2V0ICsgMV0sIGFycmF5W29m
ZnNldCArIDJdLCBhcnJheVtvZmZzZXQgKyAzXSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBV
cGRhdGVzIHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIgZnJvbSB0aGUgc3RhcnRpbmcgaW5kZXgg
b2YgdGhlIGdpdmVuIGFycmF5LgorICAgICAqIEBwYXJhbSBhcnJheSB0aGUgYXJyYXkgdG8gcHVs
bCB2YWx1ZXMgZnJvbQorICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBh
cnJheSB0byBzdGFydCBhdAorICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHZlY3RvciB0byBzdG9y
ZSB0aGUgcmVzdWx0IGluCisgICAgICovCisgICAgVmVjdG9yNC5Gcm9tQXJyYXlUb1JlZiA9IGZ1
bmN0aW9uIChhcnJheSwgb2Zmc2V0LCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnggPSBhcnJh
eVtvZmZzZXRdOworICAgICAgICByZXN1bHQueSA9IGFycmF5W29mZnNldCArIDFdOworICAgICAg
ICByZXN1bHQueiA9IGFycmF5W29mZnNldCArIDJdOworICAgICAgICByZXN1bHQudyA9IGFycmF5
W29mZnNldCArIDNdOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgZ2l2ZW4g
dmVjdG9yICJyZXN1bHQiIGZyb20gdGhlIHN0YXJ0aW5nIGluZGV4IG9mIHRoZSBnaXZlbiBGbG9h
dDMyQXJyYXkuCisgICAgICogQHBhcmFtIGFycmF5IHRoZSBhcnJheSB0byBwdWxsIHZhbHVlcyBm
cm9tCisgICAgICogQHBhcmFtIG9mZnNldCB0aGUgb2Zmc2V0IGludG8gdGhlIGFycmF5IHRvIHN0
YXJ0IGF0CisgICAgICogQHBhcmFtIHJlc3VsdCB0aGUgdmVjdG9yIHRvIHN0b3JlIHRoZSByZXN1
bHQgaW4KKyAgICAgKi8KKyAgICBWZWN0b3I0LkZyb21GbG9hdEFycmF5VG9SZWYgPSBmdW5jdGlv
biAoYXJyYXksIG9mZnNldCwgcmVzdWx0KSB7CisgICAgICAgIFZlY3RvcjQuRnJvbUFycmF5VG9S
ZWYoYXJyYXksIG9mZnNldCwgcmVzdWx0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0
ZXMgdGhlIGdpdmVuIHZlY3RvciAicmVzdWx0IiBjb29yZGluYXRlcyBmcm9tIHRoZSBnaXZlbiBm
bG9hdHMuCisgICAgICogQHBhcmFtIHggZmxvYXQgdG8gc2V0IGZyb20KKyAgICAgKiBAcGFyYW0g
eSBmbG9hdCB0byBzZXQgZnJvbQorICAgICAqIEBwYXJhbSB6IGZsb2F0IHRvIHNldCBmcm9tCisg
ICAgICogQHBhcmFtIHcgZmxvYXQgdG8gc2V0IGZyb20KKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRo
ZSB2ZWN0b3IgdG8gdGhlIGZsb2F0cyBpbgorICAgICAqLworICAgIFZlY3RvcjQuRnJvbUZsb2F0
c1RvUmVmID0gZnVuY3Rpb24gKHgsIHksIHosIHcsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQu
eCA9IHg7CisgICAgICAgIHJlc3VsdC55ID0geTsKKyAgICAgICAgcmVzdWx0LnogPSB6OworICAg
ICAgICByZXN1bHQudyA9IHc7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3
IFZlY3RvcjQgc2V0IHRvICgwLjAsIDAuMCwgMC4wLCAwLjApCisgICAgICogQHJldHVybnMgdGhl
IG5ldyB2ZWN0b3IKKyAgICAgKi8KKyAgICBWZWN0b3I0Llplcm8gPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCgwLjAsIDAuMCwgMC4wLCAwLjApOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3I0IHNldCB0byAoMS4wLCAxLjAsIDEu
MCwgMS4wKQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgdmVjdG9yCisgICAgICovCisgICAgVmVj
dG9yNC5PbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCgxLjAs
IDEuMCwgMS4wLCAxLjApOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBu
b3JtYWxpemVkIFZlY3RvcjQgZnJvbSB0aGUgZ2l2ZW4gb25lLgorICAgICAqIEBwYXJhbSB2ZWN0
b3IgdGhlIHZlY3RvciB0byBub3JtYWxpemUKKyAgICAgKiBAcmV0dXJucyB0aGUgdmVjdG9yCisg
ICAgICovCisgICAgVmVjdG9yNC5Ob3JtYWxpemUgPSBmdW5jdGlvbiAodmVjdG9yKSB7CisgICAg
ICAgIHZhciByZXN1bHQgPSBWZWN0b3I0Llplcm8oKTsKKyAgICAgICAgVmVjdG9yNC5Ob3JtYWxp
emVUb1JlZih2ZWN0b3IsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIgZnJvbSB0
aGUgbm9ybWFsaXphdGlvbiBvZiB0aGUgZ2l2ZW4gb25lLgorICAgICAqIEBwYXJhbSB2ZWN0b3Ig
dGhlIHZlY3RvciB0byBub3JtYWxpemUKKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSB2ZWN0b3Ig
dG8gc3RvcmUgdGhlIHJlc3VsdCBpbgorICAgICAqLworICAgIFZlY3RvcjQuTm9ybWFsaXplVG9S
ZWYgPSBmdW5jdGlvbiAodmVjdG9yLCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LmNvcHlGcm9t
KHZlY3Rvcik7CisgICAgICAgIHJlc3VsdC5ub3JtYWxpemUoKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJldHVybnMgYSB2ZWN0b3Igd2l0aCB0aGUgbWluaW11bSB2YWx1ZXMgZnJvbSB0aGUg
bGVmdCBhbmQgcmlnaHQgdmVjdG9ycworICAgICAqIEBwYXJhbSBsZWZ0IGxlZnQgdmVjdG9yIHRv
IG1pbmltaXplCisgICAgICogQHBhcmFtIHJpZ2h0IHJpZ2h0IHZlY3RvciB0byBtaW5pbWl6ZQor
ICAgICAqIEByZXR1cm5zIGEgbmV3IHZlY3RvciB3aXRoIHRoZSBtaW5pbXVtIG9mIHRoZSBsZWZ0
IGFuZCByaWdodCB2ZWN0b3IgdmFsdWVzCisgICAgICovCisgICAgVmVjdG9yNC5NaW5pbWl6ZSA9
IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeworICAgICAgICB2YXIgbWluID0gbGVmdC5jbG9uZSgp
OworICAgICAgICBtaW4ubWluaW1pemVJblBsYWNlKHJpZ2h0KTsKKyAgICAgICAgcmV0dXJuIG1p
bjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSB2ZWN0b3Igd2l0aCB0aGUgbWF4
aW11bSB2YWx1ZXMgZnJvbSB0aGUgbGVmdCBhbmQgcmlnaHQgdmVjdG9ycworICAgICAqIEBwYXJh
bSBsZWZ0IGxlZnQgdmVjdG9yIHRvIG1heGltaXplCisgICAgICogQHBhcmFtIHJpZ2h0IHJpZ2h0
IHZlY3RvciB0byBtYXhpbWl6ZQorICAgICAqIEByZXR1cm5zIGEgbmV3IHZlY3RvciB3aXRoIHRo
ZSBtYXhpbXVtIG9mIHRoZSBsZWZ0IGFuZCByaWdodCB2ZWN0b3IgdmFsdWVzCisgICAgICovCisg
ICAgVmVjdG9yNC5NYXhpbWl6ZSA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeworICAgICAgICB2
YXIgbWF4ID0gbGVmdC5jbG9uZSgpOworICAgICAgICBtYXgubWF4aW1pemVJblBsYWNlKHJpZ2h0
KTsKKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
dGhlIGRpc3RhbmNlIChmbG9hdCkgYmV0d2VlbiB0aGUgdmVjdG9ycyAidmFsdWUxIiBhbmQgInZh
bHVlMiIuCisgICAgICogQHBhcmFtIHZhbHVlMSB2YWx1ZSB0byBjYWx1bGF0ZSB0aGUgZGlzdGFu
Y2UgYmV0d2VlbgorICAgICAqIEBwYXJhbSB2YWx1ZTIgdmFsdWUgdG8gY2FsdWxhdGUgdGhlIGRp
c3RhbmNlIGJldHdlZW4KKyAgICAgKiBAcmV0dXJuIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0
d28gdmVjdG9ycworICAgICAqLworICAgIFZlY3RvcjQuRGlzdGFuY2UgPSBmdW5jdGlvbiAodmFs
dWUxLCB2YWx1ZTIpIHsKKyAgICAgICAgcmV0dXJuIE1hdGguc3FydChWZWN0b3I0LkRpc3RhbmNl
U3F1YXJlZCh2YWx1ZTEsIHZhbHVlMikpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJu
cyB0aGUgc3F1YXJlZCBkaXN0YW5jZSAoZmxvYXQpIGJldHdlZW4gdGhlIHZlY3RvcnMgInZhbHVl
MSIgYW5kICJ2YWx1ZTIiLgorICAgICAqIEBwYXJhbSB2YWx1ZTEgdmFsdWUgdG8gY2FsdWxhdGUg
dGhlIGRpc3RhbmNlIGJldHdlZW4KKyAgICAgKiBAcGFyYW0gdmFsdWUyIHZhbHVlIHRvIGNhbHVs
YXRlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuCisgICAgICogQHJldHVybiB0aGUgZGlzdGFuY2UgYmV0
d2VlbiB0aGUgdHdvIHZlY3RvcnMgc3F1YXJlZAorICAgICAqLworICAgIFZlY3RvcjQuRGlzdGFu
Y2VTcXVhcmVkID0gZnVuY3Rpb24gKHZhbHVlMSwgdmFsdWUyKSB7CisgICAgICAgIHZhciB4ID0g
dmFsdWUxLnggLSB2YWx1ZTIueDsKKyAgICAgICAgdmFyIHkgPSB2YWx1ZTEueSAtIHZhbHVlMi55
OworICAgICAgICB2YXIgeiA9IHZhbHVlMS56IC0gdmFsdWUyLno7CisgICAgICAgIHZhciB3ID0g
dmFsdWUxLncgLSB2YWx1ZTIudzsKKyAgICAgICAgcmV0dXJuICh4ICogeCkgKyAoeSAqIHkpICsg
KHogKiB6KSArICh3ICogdyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3
IFZlY3RvcjQgbG9jYXRlZCBhdCB0aGUgY2VudGVyIGJldHdlZW4gdGhlIHZlY3RvcnMgInZhbHVl
MSIgYW5kICJ2YWx1ZTIiLgorICAgICAqIEBwYXJhbSB2YWx1ZTEgdmFsdWUgdG8gY2FsdWxhdGUg
dGhlIGNlbnRlciBiZXR3ZWVuCisgICAgICogQHBhcmFtIHZhbHVlMiB2YWx1ZSB0byBjYWx1bGF0
ZSB0aGUgY2VudGVyIGJldHdlZW4KKyAgICAgKiBAcmV0dXJuIHRoZSBjZW50ZXIgYmV0d2VlbiB0
aGUgdHdvIHZlY3RvcnMKKyAgICAgKi8KKyAgICBWZWN0b3I0LkNlbnRlciA9IGZ1bmN0aW9uICh2
YWx1ZTEsIHZhbHVlMikgeworICAgICAgICB2YXIgY2VudGVyID0gdmFsdWUxLmFkZCh2YWx1ZTIp
OworICAgICAgICBjZW50ZXIuc2NhbGVJblBsYWNlKDAuNSk7CisgICAgICAgIHJldHVybiBjZW50
ZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjQgc2V0IHdp
dGggdGhlIHJlc3VsdCBvZiB0aGUgbm9ybWFsIHRyYW5zZm9ybWF0aW9uIGJ5IHRoZSBnaXZlbiBt
YXRyaXggb2YgdGhlIGdpdmVuIHZlY3Rvci4KKyAgICAgKiBUaGlzIG1ldGhvZHMgY29tcHV0ZXMg
dHJhbnNmb3JtZWQgbm9ybWFsaXplZCBkaXJlY3Rpb24gdmVjdG9ycyBvbmx5LgorICAgICAqIEBw
YXJhbSB2ZWN0b3IgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm0KKyAgICAgKiBAcGFyYW0gdHJhbnNm
b3JtYXRpb24gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0byBhcHBseQorICAgICAqIEByZXR1
cm5zIHRoZSBuZXcgdmVjdG9yCisgICAgICovCisgICAgVmVjdG9yNC5UcmFuc2Zvcm1Ob3JtYWwg
PSBmdW5jdGlvbiAodmVjdG9yLCB0cmFuc2Zvcm1hdGlvbikgeworICAgICAgICB2YXIgcmVzdWx0
ID0gVmVjdG9yNC5aZXJvKCk7CisgICAgICAgIFZlY3RvcjQuVHJhbnNmb3JtTm9ybWFsVG9SZWYo
dmVjdG9yLCB0cmFuc2Zvcm1hdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciAicmVzdWx0IiB3
aXRoIHRoZSByZXN1bHQgb2YgdGhlIG5vcm1hbCB0cmFuc2Zvcm1hdGlvbiBieSB0aGUgZ2l2ZW4g
bWF0cml4IG9mIHRoZSBnaXZlbiB2ZWN0b3IuCisgICAgICogVGhpcyBtZXRob2RzIGNvbXB1dGVz
IHRyYW5zZm9ybWVkIG5vcm1hbGl6ZWQgZGlyZWN0aW9uIHZlY3RvcnMgb25seS4KKyAgICAgKiBA
cGFyYW0gdmVjdG9yIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtCisgICAgICogQHBhcmFtIHRyYW5z
Zm9ybWF0aW9uIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdG8gYXBwbHkKKyAgICAgKiBAcGFy
YW0gcmVzdWx0IHRoZSB2ZWN0b3IgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbgorICAgICAqLworICAg
IFZlY3RvcjQuVHJhbnNmb3JtTm9ybWFsVG9SZWYgPSBmdW5jdGlvbiAodmVjdG9yLCB0cmFuc2Zv
cm1hdGlvbiwgcmVzdWx0KSB7CisgICAgICAgIHZhciBtID0gdHJhbnNmb3JtYXRpb24ubTsKKyAg
ICAgICAgdmFyIHggPSAodmVjdG9yLnggKiBtWzBdKSArICh2ZWN0b3IueSAqIG1bNF0pICsgKHZl
Y3Rvci56ICogbVs4XSk7CisgICAgICAgIHZhciB5ID0gKHZlY3Rvci54ICogbVsxXSkgKyAodmVj
dG9yLnkgKiBtWzVdKSArICh2ZWN0b3IueiAqIG1bOV0pOworICAgICAgICB2YXIgeiA9ICh2ZWN0
b3IueCAqIG1bMl0pICsgKHZlY3Rvci55ICogbVs2XSkgKyAodmVjdG9yLnogKiBtWzEwXSk7Cisg
ICAgICAgIHJlc3VsdC54ID0geDsKKyAgICAgICAgcmVzdWx0LnkgPSB5OworICAgICAgICByZXN1
bHQueiA9IHo7CisgICAgICAgIHJlc3VsdC53ID0gdmVjdG9yLnc7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIgd2l0aCB0aGUgcmVzdWx0IG9m
IHRoZSBub3JtYWwgdHJhbnNmb3JtYXRpb24gYnkgdGhlIGdpdmVuIG1hdHJpeCBvZiB0aGUgZ2l2
ZW4gZmxvYXRzICh4LCB5LCB6LCB3KS4KKyAgICAgKiBUaGlzIG1ldGhvZHMgY29tcHV0ZXMgdHJh
bnNmb3JtZWQgbm9ybWFsaXplZCBkaXJlY3Rpb24gdmVjdG9ycyBvbmx5LgorICAgICAqIEBwYXJh
bSB4IHZhbHVlIHRvIHRyYW5zZm9ybQorICAgICAqIEBwYXJhbSB5IHZhbHVlIHRvIHRyYW5zZm9y
bQorICAgICAqIEBwYXJhbSB6IHZhbHVlIHRvIHRyYW5zZm9ybQorICAgICAqIEBwYXJhbSB3IHZh
bHVlIHRvIHRyYW5zZm9ybQorICAgICAqIEBwYXJhbSB0cmFuc2Zvcm1hdGlvbiB0aGUgdHJhbnNm
b3JtYXRpb24gbWF0cml4IHRvIGFwcGx5CisgICAgICogQHBhcmFtIHJlc3VsdCB0aGUgdmVjdG9y
IHRvIHN0b3JlIHRoZSByZXN1bHRzIGluCisgICAgICovCisgICAgVmVjdG9yNC5UcmFuc2Zvcm1O
b3JtYWxGcm9tRmxvYXRzVG9SZWYgPSBmdW5jdGlvbiAoeCwgeSwgeiwgdywgdHJhbnNmb3JtYXRp
b24sIHJlc3VsdCkgeworICAgICAgICB2YXIgbSA9IHRyYW5zZm9ybWF0aW9uLm07CisgICAgICAg
IHJlc3VsdC54ID0gKHggKiBtWzBdKSArICh5ICogbVs0XSkgKyAoeiAqIG1bOF0pOworICAgICAg
ICByZXN1bHQueSA9ICh4ICogbVsxXSkgKyAoeSAqIG1bNV0pICsgKHogKiBtWzldKTsKKyAgICAg
ICAgcmVzdWx0LnogPSAoeCAqIG1bMl0pICsgKHkgKiBtWzZdKSArICh6ICogbVsxMF0pOworICAg
ICAgICByZXN1bHQudyA9IHc7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3
IFZlY3RvcjQgZnJvbSBhIFZlY3RvcjMKKyAgICAgKiBAcGFyYW0gc291cmNlIGRlZmluZXMgdGhl
IHNvdXJjZSBkYXRhCisgICAgICogQHBhcmFtIHcgZGVmaW5lcyB0aGUgNHRoIGNvbXBvbmVudCAo
ZGVmYXVsdCBpcyAwKQorICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjQKKyAgICAgKi8KKyAg
ICBWZWN0b3I0LkZyb21WZWN0b3IzID0gZnVuY3Rpb24gKHNvdXJjZSwgdykgeworICAgICAgICBp
ZiAodyA9PT0gdm9pZCAwKSB7IHcgPSAwOyB9CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yNChz
b3VyY2UueCwgc291cmNlLnksIHNvdXJjZS56LCB3KTsKKyAgICB9OworICAgIHJldHVybiBWZWN0
b3I0OworfSgpKTsKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHN0b3JlIHF1YXRlcm5pb24gZGF0
YQorICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdWF0ZXJuaW9uCisgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9wb3NpdGlvbixfcm90YXRpb24s
X3NjYWxpbmcKKyAqLwordmFyIFF1YXRlcm5pb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBRdWF0ZXJuaW9uIGZyb20gdGhlIGdp
dmVuIGZsb2F0cworICAgICAqIEBwYXJhbSB4IGRlZmluZXMgdGhlIGZpcnN0IGNvbXBvbmVudCAo
MCBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgdGhlIHNlY29uZCBjb21wb25l
bnQgKDAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB0aGlyZCBjb21w
b25lbnQgKDAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gdyBkZWZpbmVzIHRoZSBmb3VydGgg
Y29tcG9uZW50ICgxLjAgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBRdWF0ZXJu
aW9uKAorICAgIC8qKiBkZWZpbmVzIHRoZSBmaXJzdCBjb21wb25lbnQgKDAgYnkgZGVmYXVsdCkg
Ki8KKyAgICB4LCAKKyAgICAvKiogZGVmaW5lcyB0aGUgc2Vjb25kIGNvbXBvbmVudCAoMCBieSBk
ZWZhdWx0KSAqLworICAgIHksIAorICAgIC8qKiBkZWZpbmVzIHRoZSB0aGlyZCBjb21wb25lbnQg
KDAgYnkgZGVmYXVsdCkgKi8KKyAgICB6LCAKKyAgICAvKiogZGVmaW5lcyB0aGUgZm91cnRoIGNv
bXBvbmVudCAoMS4wIGJ5IGRlZmF1bHQpICovCisgICAgdykgeworICAgICAgICBpZiAoeCA9PT0g
dm9pZCAwKSB7IHggPSAwLjA7IH0KKyAgICAgICAgaWYgKHkgPT09IHZvaWQgMCkgeyB5ID0gMC4w
OyB9CisgICAgICAgIGlmICh6ID09PSB2b2lkIDApIHsgeiA9IDAuMDsgfQorICAgICAgICBpZiAo
dyA9PT0gdm9pZCAwKSB7IHcgPSAxLjA7IH0KKyAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAg
dGhpcy55ID0geTsKKyAgICAgICAgdGhpcy56ID0gejsKKyAgICAgICAgdGhpcy53ID0gdzsKKyAg
ICB9CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhl
IGN1cnJlbnQgcXVhdGVybmlvbgorICAgICAqIEByZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIFF1
YXRlcm5pb24gY29vcmRpbmF0ZXMKKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLnByb3RvdHlwZS50
b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJ7WDogIiArIHRoaXMueCAr
ICIgWToiICsgdGhpcy55ICsgIiBaOiIgKyB0aGlzLnogKyAiIFc6IiArIHRoaXMudyArICJ9IjsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIHF1YXRl
cm5pb24KKyAgICAgKiBAcmV0dXJucyB0aGUgc3RyaW5nICJRdWF0ZXJuaW9uIgorICAgICAqLwor
ICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuICJRdWF0ZXJuaW9uIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMg
YSBoYXNoIGNvZGUgZm9yIHRoaXMgcXVhdGVybmlvbgorICAgICAqIEByZXR1cm5zIHRoZSBxdWF0
ZXJuaW9uIGhhc2ggY29kZQorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmdldEhh
c2hDb2RlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaGFzaCA9IHRoaXMueCB8IDA7Cisg
ICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAodGhpcy55IHwgMCk7CisgICAgICAgIGhhc2gg
PSAoaGFzaCAqIDM5NykgXiAodGhpcy56IHwgMCk7CisgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5
NykgXiAodGhpcy53IHwgMCk7CisgICAgICAgIHJldHVybiBoYXNoOworICAgIH07CisgICAgLyoq
CisgICAgICogQ29weSB0aGUgcXVhdGVybmlvbiB0byBhbiBhcnJheQorICAgICAqIEByZXR1cm5z
IGEgbmV3IGFycmF5IHBvcHVsYXRlZCB3aXRoIDQgZWxlbWVudHMgZnJvbSB0aGUgcXVhdGVybmlv
biBjb29yZGluYXRlcworICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmFzQXJyYXkg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnksIHRoaXMueiwg
dGhpcy53XTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHR3byBxdWF0ZXJuaW9u
cyBhcmUgZXF1YWxzCisgICAgICogQHBhcmFtIG90aGVyUXVhdGVybmlvbiBkZWZpbmVzIHRoZSBz
ZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCBxdWF0ZXJu
aW9uIGFuZCB0aGUgZ2l2ZW4gb25lIGNvb3JkaW5hdGVzIGFyZSBzdHJpY3RseSBlcXVhbHMKKyAg
ICAgKi8KKyAgICBRdWF0ZXJuaW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAob3RoZXJR
dWF0ZXJuaW9uKSB7CisgICAgICAgIHJldHVybiBvdGhlclF1YXRlcm5pb24gJiYgdGhpcy54ID09
PSBvdGhlclF1YXRlcm5pb24ueCAmJiB0aGlzLnkgPT09IG90aGVyUXVhdGVybmlvbi55ICYmIHRo
aXMueiA9PT0gb3RoZXJRdWF0ZXJuaW9uLnogJiYgdGhpcy53ID09PSBvdGhlclF1YXRlcm5pb24u
dzsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lIHRoZSBjdXJyZW50IHF1YXRlcm5pb24K
KyAgICAgKiBAcmV0dXJucyBhIG5ldyBxdWF0ZXJuaW9uIGNvcGllZCBmcm9tIHRoZSBjdXJyZW50
IG9uZQorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gbmV3IFF1YXRlcm5pb24odGhpcy54LCB0aGlzLnksIHRoaXMu
eiwgdGhpcy53KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvcHkgYSBxdWF0ZXJuaW9uIHRv
IHRoZSBjdXJyZW50IG9uZQorICAgICAqIEBwYXJhbSBvdGhlciBkZWZpbmVzIHRoZSBvdGhlciBx
dWF0ZXJuaW9uCisgICAgICogQHJldHVybnMgdGhlIHVwZGF0ZWQgY3VycmVudCBxdWF0ZXJuaW9u
CisgICAgICovCisgICAgUXVhdGVybmlvbi5wcm90b3R5cGUuY29weUZyb20gPSBmdW5jdGlvbiAo
b3RoZXIpIHsKKyAgICAgICAgdGhpcy54ID0gb3RoZXIueDsKKyAgICAgICAgdGhpcy55ID0gb3Ro
ZXIueTsKKyAgICAgICAgdGhpcy56ID0gb3RoZXIuejsKKyAgICAgICAgdGhpcy53ID0gb3RoZXIu
dzsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVz
IHRoZSBjdXJyZW50IHF1YXRlcm5pb24gd2l0aCB0aGUgZ2l2ZW4gZmxvYXQgY29vcmRpbmF0ZXMK
KyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB4IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0g
eSBkZWZpbmVzIHRoZSB5IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB6
IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gdyBkZWZpbmVzIHRoZSB3IGNvb3JkaW5hdGUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgdXBkYXRlZCBjdXJyZW50IHF1YXRlcm5pb24KKyAgICAgKi8KKyAg
ICBRdWF0ZXJuaW9uLnByb3RvdHlwZS5jb3B5RnJvbUZsb2F0cyA9IGZ1bmN0aW9uICh4LCB5LCB6
LCB3KSB7CisgICAgICAgIHRoaXMueCA9IHg7CisgICAgICAgIHRoaXMueSA9IHk7CisgICAgICAg
IHRoaXMueiA9IHo7CisgICAgICAgIHRoaXMudyA9IHc7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgY3VycmVudCBxdWF0ZXJuaW9uIGZy
b20gdGhlIGdpdmVuIGZsb2F0IGNvb3JkaW5hdGVzCisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0
aGUgeCBjb29yZGluYXRlCisgICAgICogQHBhcmFtIHkgZGVmaW5lcyB0aGUgeSBjb29yZGluYXRl
CisgICAgICogQHBhcmFtIHogZGVmaW5lcyB0aGUgeiBjb29yZGluYXRlCisgICAgICogQHBhcmFt
IHcgZGVmaW5lcyB0aGUgdyBjb29yZGluYXRlCisgICAgICogQHJldHVybnMgdGhlIHVwZGF0ZWQg
Y3VycmVudCBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5wcm90b3R5cGUuc2V0
ID0gZnVuY3Rpb24gKHgsIHksIHosIHcpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY29weUZyb21G
bG9hdHMoeCwgeSwgeiwgdyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIHR3byBxdWF0
ZXJuaW9ucworICAgICAqIEBwYXJhbSBvdGhlciBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAor
ICAgICAqIEByZXR1cm5zIGEgbmV3IHF1YXRlcm5pb24gYXMgdGhlIGFkZGl0aW9uIHJlc3VsdCBv
ZiB0aGUgZ2l2ZW4gb25lIGFuZCB0aGUgY3VycmVudCBxdWF0ZXJuaW9uCisgICAgICovCisgICAg
UXVhdGVybmlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG90aGVyKSB7CisgICAgICAgIHJl
dHVybiBuZXcgUXVhdGVybmlvbih0aGlzLnggKyBvdGhlci54LCB0aGlzLnkgKyBvdGhlci55LCB0
aGlzLnogKyBvdGhlci56LCB0aGlzLncgKyBvdGhlci53KTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEFkZCBhIHF1YXRlcm5pb24gdG8gdGhlIGN1cnJlbnQgb25lCisgICAgICogQHBhcmFtIG90
aGVyIGRlZmluZXMgdGhlIHF1YXRlcm5pb24gdG8gYWRkCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgcXVhdGVybmlvbgorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmFkZElu
UGxhY2UgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAgICAgdGhpcy54ICs9IG90aGVyLng7Cisg
ICAgICAgIHRoaXMueSArPSBvdGhlci55OworICAgICAgICB0aGlzLnogKz0gb3RoZXIuejsKKyAg
ICAgICAgdGhpcy53ICs9IG90aGVyLnc7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU3VidHJhY3QgdHdvIHF1YXRlcm5pb25zCisgICAgICogQHBhcmFtIG90
aGVyIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHJldHVybnMgYSBuZXcgcXVh
dGVybmlvbiBhcyB0aGUgc3VidHJhY3Rpb24gcmVzdWx0IG9mIHRoZSBnaXZlbiBvbmUgZnJvbSB0
aGUgY3VycmVudCBvbmUKKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLnByb3RvdHlwZS5zdWJ0cmFj
dCA9IGZ1bmN0aW9uIChvdGhlcikgeworICAgICAgICByZXR1cm4gbmV3IFF1YXRlcm5pb24odGhp
cy54IC0gb3RoZXIueCwgdGhpcy55IC0gb3RoZXIueSwgdGhpcy56IC0gb3RoZXIueiwgdGhpcy53
IC0gb3RoZXIudyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNdWx0aXBsaWVzIHRoZSBjdXJy
ZW50IHF1YXRlcm5pb24gYnkgYSBzY2FsZSBmYWN0b3IKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVm
aW5lcyB0aGUgc2NhbGUgZmFjdG9yCisgICAgICogQHJldHVybnMgYSBuZXcgcXVhdGVybmlvbiBz
ZXQgYnkgbXVsdGlwbHlpbmcgdGhlIGN1cnJlbnQgcXVhdGVybmlvbiBjb29yZGluYXRlcyBieSB0
aGUgZmxvYXQgInNjYWxlIgorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLnNjYWxl
ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHJldHVybiBuZXcgUXVhdGVybmlvbih0aGlz
LnggKiB2YWx1ZSwgdGhpcy55ICogdmFsdWUsIHRoaXMueiAqIHZhbHVlLCB0aGlzLncgKiB2YWx1
ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0aGUgY3VycmVudCBxdWF0ZXJuaW9u
IHZhbHVlcyBieSBhIGZhY3RvciBhbmQgc3RvcmVzIHRoZSByZXN1bHQgdG8gYSBnaXZlbiBxdWF0
ZXJuaW9uCisgICAgICogQHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxlIGZhY3RvcgorICAg
ICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgUXVhdGVybmlvbiBvYmplY3Qgd2hlcmUgdG8g
c3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSB1bm1vZGlmaWVkIGN1cnJlbnQg
cXVhdGVybmlvbgorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLnNjYWxlVG9SZWYg
PSBmdW5jdGlvbiAoc2NhbGUsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQueCA9IHRoaXMueCAq
IHNjYWxlOworICAgICAgICByZXN1bHQueSA9IHRoaXMueSAqIHNjYWxlOworICAgICAgICByZXN1
bHQueiA9IHRoaXMueiAqIHNjYWxlOworICAgICAgICByZXN1bHQudyA9IHRoaXMudyAqIHNjYWxl
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIE11bHRpcGxp
ZXMgaW4gcGxhY2UgdGhlIGN1cnJlbnQgcXVhdGVybmlvbiBieSBhIHNjYWxlIGZhY3RvcgorICAg
ICAqIEBwYXJhbSB2YWx1ZSBkZWZpbmVzIHRoZSBzY2FsZSBmYWN0b3IKKyAgICAgKiBAcmV0dXJu
cyB0aGUgY3VycmVudCBtb2RpZmllZCBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlv
bi5wcm90b3R5cGUuc2NhbGVJblBsYWNlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHRo
aXMueCAqPSB2YWx1ZTsKKyAgICAgICAgdGhpcy55ICo9IHZhbHVlOworICAgICAgICB0aGlzLnog
Kj0gdmFsdWU7CisgICAgICAgIHRoaXMudyAqPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0aGUgY3VycmVudCBxdWF0ZXJuaW9uIHZh
bHVlcyBieSBhIGZhY3RvciBhbmQgYWRkIHRoZSByZXN1bHQgdG8gYSBnaXZlbiBxdWF0ZXJuaW9u
CisgICAgICogQHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxlIGZhY3RvcgorICAgICAqIEBw
YXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgUXVhdGVybmlvbiBvYmplY3Qgd2hlcmUgdG8gc3RvcmUg
dGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSB1bm1vZGlmaWVkIGN1cnJlbnQgcXVhdGVy
bmlvbgorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLnNjYWxlQW5kQWRkVG9SZWYg
PSBmdW5jdGlvbiAoc2NhbGUsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQueCArPSB0aGlzLngg
KiBzY2FsZTsKKyAgICAgICAgcmVzdWx0LnkgKz0gdGhpcy55ICogc2NhbGU7CisgICAgICAgIHJl
c3VsdC56ICs9IHRoaXMueiAqIHNjYWxlOworICAgICAgICByZXN1bHQudyArPSB0aGlzLncgKiBz
Y2FsZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNdWx0
aXBsaWVzIHR3byBxdWF0ZXJuaW9ucworICAgICAqIEBwYXJhbSBxMSBkZWZpbmVzIHRoZSBzZWNv
bmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIGEgbmV3IHF1YXRlcm5pb24gc2V0IGFzIHRoZSBt
dWx0aXBsaWNhdGlvbiByZXN1bHQgb2YgdGhlIGN1cnJlbnQgb25lIHdpdGggdGhlIGdpdmVuIG9u
ZSAicTEiCisgICAgICovCisgICAgUXVhdGVybmlvbi5wcm90b3R5cGUubXVsdGlwbHkgPSBmdW5j
dGlvbiAocTEpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBRdWF0ZXJuaW9uKDAsIDAsIDAs
IDEuMCk7CisgICAgICAgIHRoaXMubXVsdGlwbHlUb1JlZihxMSwgcmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGdpdmVuICJy
ZXN1bHQiIGFzIHRoZSB0aGUgbXVsdGlwbGljYXRpb24gcmVzdWx0IG9mIHRoZSBjdXJyZW50IG9u
ZSB3aXRoIHRoZSBnaXZlbiBvbmUgInExIgorICAgICAqIEBwYXJhbSBxMSBkZWZpbmVzIHRoZSBz
ZWNvbmQgb3BlcmFuZAorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IHF1
YXRlcm5pb24KKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBxdWF0ZXJuaW9uCisgICAgICov
CisgICAgUXVhdGVybmlvbi5wcm90b3R5cGUubXVsdGlwbHlUb1JlZiA9IGZ1bmN0aW9uIChxMSwg
cmVzdWx0KSB7CisgICAgICAgIHZhciB4ID0gdGhpcy54ICogcTEudyArIHRoaXMueSAqIHExLnog
LSB0aGlzLnogKiBxMS55ICsgdGhpcy53ICogcTEueDsKKyAgICAgICAgdmFyIHkgPSAtdGhpcy54
ICogcTEueiArIHRoaXMueSAqIHExLncgKyB0aGlzLnogKiBxMS54ICsgdGhpcy53ICogcTEueTsK
KyAgICAgICAgdmFyIHogPSB0aGlzLnggKiBxMS55IC0gdGhpcy55ICogcTEueCArIHRoaXMueiAq
IHExLncgKyB0aGlzLncgKiBxMS56OworICAgICAgICB2YXIgdyA9IC10aGlzLnggKiBxMS54IC0g
dGhpcy55ICogcTEueSAtIHRoaXMueiAqIHExLnogKyB0aGlzLncgKiBxMS53OworICAgICAgICBy
ZXN1bHQuY29weUZyb21GbG9hdHMoeCwgeSwgeiwgdyk7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgY3VycmVudCBxdWF0ZXJuaW9uIHdp
dGggdGhlIG11bHRpcGxpY2F0aW9uIG9mIGl0c2VsZiB3aXRoIHRoZSBnaXZlbiBvbmUgInExIgor
ICAgICAqIEBwYXJhbSBxMSBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1
cm5zIHRoZSBjdXJyZW50dXBkYXRlZCBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlv
bi5wcm90b3R5cGUubXVsdGlwbHlJblBsYWNlID0gZnVuY3Rpb24gKHExKSB7CisgICAgICAgIHRo
aXMubXVsdGlwbHlUb1JlZihxMSwgdGhpcyk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogQ29uanVnYXRlcyAoMS1xKSB0aGUgY3VycmVudCBxdWF0ZXJuaW9u
IGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gcXVhdGVybmlvbgorICAgICAqIEBw
YXJhbSByZWYgZGVmaW5lcyB0aGUgdGFyZ2V0IHF1YXRlcm5pb24KKyAgICAgKiBAcmV0dXJucyB0
aGUgY3VycmVudCBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5wcm90b3R5cGUu
Y29uanVnYXRlVG9SZWYgPSBmdW5jdGlvbiAocmVmKSB7CisgICAgICAgIHJlZi5jb3B5RnJvbUZs
b2F0cygtdGhpcy54LCAtdGhpcy55LCAtdGhpcy56LCB0aGlzLncpOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbmp1Z2F0ZXMgaW4gcGxhY2UgKDEtcSkg
dGhlIGN1cnJlbnQgcXVhdGVybmlvbgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0
ZWQgcXVhdGVybmlvbgorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmNvbmp1Z2F0
ZUluUGxhY2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMueCAqPSAtMTsKKyAgICAgICAg
dGhpcy55ICo9IC0xOworICAgICAgICB0aGlzLnogKj0gLTE7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogQ29uanVnYXRlcyBpbiBwbGFjZSAoMS1xKSB0aGUg
Y3VycmVudCBxdWF0ZXJuaW9uCisgICAgICogQHJldHVybnMgYSBuZXcgcXVhdGVybmlvbgorICAg
ICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmNvbmp1Z2F0ZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBRdWF0ZXJuaW9uKC10aGlzLngsIC10aGlzLnksIC10
aGlzLnosIHRoaXMudyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBHZXRzIGxlbmd0aCBvZiBjdXJyZW50IHF1YXRlcm5pb24KKyAgICAgKiBAcmV0dXJu
cyB0aGUgcXVhdGVybmlvbiBsZW5ndGggKGZsb2F0KQorICAgICAqLworICAgIFF1YXRlcm5pb24u
cHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIE1hdGguc3Fy
dCgodGhpcy54ICogdGhpcy54KSArICh0aGlzLnkgKiB0aGlzLnkpICsgKHRoaXMueiAqIHRoaXMu
eikgKyAodGhpcy53ICogdGhpcy53KSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBOb3JtYWxp
emUgaW4gcGxhY2UgdGhlIGN1cnJlbnQgcXVhdGVybmlvbgorICAgICAqIEByZXR1cm5zIHRoZSBj
dXJyZW50IHVwZGF0ZWQgcXVhdGVybmlvbgorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90
eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGxlbiA9IHRoaXMubGVu
Z3RoKCk7CisgICAgICAgIGlmIChsZW4gPT09IDApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICB9CisgICAgICAgIHZhciBpbnYgPSAxLjAgLyBsZW47CisgICAgICAgIHRoaXMu
eCAqPSBpbnY7CisgICAgICAgIHRoaXMueSAqPSBpbnY7CisgICAgICAgIHRoaXMueiAqPSBpbnY7
CisgICAgICAgIHRoaXMudyAqPSBpbnY7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRoIHRoZSBFdWxlciBh
bmdsZXMgdHJhbnNsYXRlZCBmcm9tIHRoZSBjdXJyZW50IHF1YXRlcm5pb24KKyAgICAgKiBAcGFy
YW0gb3JkZXIgaXMgYSByZXNlcnZlZCBwYXJhbWV0ZXIgYW5kIGlzIGlnbm9yZSBmb3Igbm93Cisg
ICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMyBjb250YWluaW5nIHRoZSBFdWxlciBhbmdsZXMK
KyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLnByb3RvdHlwZS50b0V1bGVyQW5nbGVzID0gZnVuY3Rp
b24gKG9yZGVyKSB7CisgICAgICAgIGlmIChvcmRlciA9PT0gdm9pZCAwKSB7IG9yZGVyID0gIlla
WCI7IH0KKyAgICAgICAgdmFyIHJlc3VsdCA9IFZlY3RvcjMuWmVybygpOworICAgICAgICB0aGlz
LnRvRXVsZXJBbmdsZXNUb1JlZihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2ZW4gdmVjdG9yMyAicmVzdWx0IiB3aXRo
IHRoZSBFdWxlciBhbmdsZXMgdHJhbnNsYXRlZCBmcm9tIHRoZSBjdXJyZW50IHF1YXRlcm5pb24K
KyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHZlY3RvciB3aGljaCB3aWxsIGJlIGZp
bGxlZCB3aXRoIHRoZSBFdWxlciBhbmdsZXMKKyAgICAgKiBAcGFyYW0gb3JkZXIgaXMgYSByZXNl
cnZlZCBwYXJhbWV0ZXIgYW5kIGlzIGlnbm9yZSBmb3Igbm93CisgICAgICogQHJldHVybnMgdGhl
IGN1cnJlbnQgdW5jaGFuZ2VkIHF1YXRlcm5pb24KKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLnBy
b3RvdHlwZS50b0V1bGVyQW5nbGVzVG9SZWYgPSBmdW5jdGlvbiAocmVzdWx0KSB7CisgICAgICAg
IHZhciBxeiA9IHRoaXMuejsKKyAgICAgICAgdmFyIHF4ID0gdGhpcy54OworICAgICAgICB2YXIg
cXkgPSB0aGlzLnk7CisgICAgICAgIHZhciBxdyA9IHRoaXMudzsKKyAgICAgICAgdmFyIHNxdyA9
IHF3ICogcXc7CisgICAgICAgIHZhciBzcXogPSBxeiAqIHF6OworICAgICAgICB2YXIgc3F4ID0g
cXggKiBxeDsKKyAgICAgICAgdmFyIHNxeSA9IHF5ICogcXk7CisgICAgICAgIHZhciB6QXhpc1kg
PSBxeSAqIHF6IC0gcXggKiBxdzsKKyAgICAgICAgdmFyIGxpbWl0ID0gLjQ5OTk5OTk7CisgICAg
ICAgIGlmICh6QXhpc1kgPCAtbGltaXQpIHsKKyAgICAgICAgICAgIHJlc3VsdC55ID0gMiAqIE1h
dGguYXRhbjIocXksIHF3KTsKKyAgICAgICAgICAgIHJlc3VsdC54ID0gTWF0aC5QSSAvIDI7Cisg
ICAgICAgICAgICByZXN1bHQueiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoekF4
aXNZID4gbGltaXQpIHsKKyAgICAgICAgICAgIHJlc3VsdC55ID0gMiAqIE1hdGguYXRhbjIocXks
IHF3KTsKKyAgICAgICAgICAgIHJlc3VsdC54ID0gLU1hdGguUEkgLyAyOworICAgICAgICAgICAg
cmVzdWx0LnogPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVz
dWx0LnogPSBNYXRoLmF0YW4yKDIuMCAqIChxeCAqIHF5ICsgcXogKiBxdyksICgtc3F6IC0gc3F4
ICsgc3F5ICsgc3F3KSk7CisgICAgICAgICAgICByZXN1bHQueCA9IE1hdGguYXNpbigtMi4wICog
KHF6ICogcXkgLSBxeCAqIHF3KSk7CisgICAgICAgICAgICByZXN1bHQueSA9IE1hdGguYXRhbjIo
Mi4wICogKHF6ICogcXggKyBxeSAqIHF3KSwgKHNxeiAtIHNxeCAtIHNxeSArIHNxdykpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogVXBk
YXRlcyB0aGUgZ2l2ZW4gcm90YXRpb24gbWF0cml4IHdpdGggdGhlIGN1cnJlbnQgcXVhdGVybmlv
biB2YWx1ZXMKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBtYXRyaXgK
KyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1bmNoYW5nZWQgcXVhdGVybmlvbgorICAgICAq
LworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLnRvUm90YXRpb25NYXRyaXggPSBmdW5jdGlvbiAo
cmVzdWx0KSB7CisgICAgICAgIE1hdHJpeC5Gcm9tUXVhdGVybmlvblRvUmVmKHRoaXMsIHJlc3Vs
dCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRl
cyB0aGUgY3VycmVudCBxdWF0ZXJuaW9uIGZyb20gdGhlIGdpdmVuIHJvdGF0aW9uIG1hdHJpeCB2
YWx1ZXMKKyAgICAgKiBAcGFyYW0gbWF0cml4IGRlZmluZXMgdGhlIHNvdXJjZSBtYXRyaXgKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIHF1YXRlcm5pb24KKyAgICAgKi8KKyAg
ICBRdWF0ZXJuaW9uLnByb3RvdHlwZS5mcm9tUm90YXRpb25NYXRyaXggPSBmdW5jdGlvbiAobWF0
cml4KSB7CisgICAgICAgIFF1YXRlcm5pb24uRnJvbVJvdGF0aW9uTWF0cml4VG9SZWYobWF0cml4
LCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvLyBTdGF0aWNzCisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBxdWF0ZXJuaW9uIGZyb20gYSByb3RhdGlvbiBt
YXRyaXgKKyAgICAgKiBAcGFyYW0gbWF0cml4IGRlZmluZXMgdGhlIHNvdXJjZSBtYXRyaXgKKyAg
ICAgKiBAcmV0dXJucyBhIG5ldyBxdWF0ZXJuaW9uIGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gcm90
YXRpb24gbWF0cml4IHZhbHVlcworICAgICAqLworICAgIFF1YXRlcm5pb24uRnJvbVJvdGF0aW9u
TWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFF1
YXRlcm5pb24oKTsKKyAgICAgICAgUXVhdGVybmlvbi5Gcm9tUm90YXRpb25NYXRyaXhUb1JlZiht
YXRyaXgsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBVcGRhdGVzIHRoZSBnaXZlbiBxdWF0ZXJuaW9uIHdpdGggdGhlIGdpdmVuIHJvdGF0
aW9uIG1hdHJpeCB2YWx1ZXMKKyAgICAgKiBAcGFyYW0gbWF0cml4IGRlZmluZXMgdGhlIHNvdXJj
ZSBtYXRyaXgKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJu
aW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5Gcm9tUm90YXRpb25NYXRyaXhUb1JlZiA9IGZ1
bmN0aW9uIChtYXRyaXgsIHJlc3VsdCkgeworICAgICAgICB2YXIgZGF0YSA9IG1hdHJpeC5tOwor
ICAgICAgICB2YXIgbTExID0gZGF0YVswXSwgbTEyID0gZGF0YVs0XSwgbTEzID0gZGF0YVs4XTsK
KyAgICAgICAgdmFyIG0yMSA9IGRhdGFbMV0sIG0yMiA9IGRhdGFbNV0sIG0yMyA9IGRhdGFbOV07
CisgICAgICAgIHZhciBtMzEgPSBkYXRhWzJdLCBtMzIgPSBkYXRhWzZdLCBtMzMgPSBkYXRhWzEw
XTsKKyAgICAgICAgdmFyIHRyYWNlID0gbTExICsgbTIyICsgbTMzOworICAgICAgICB2YXIgczsK
KyAgICAgICAgaWYgKHRyYWNlID4gMCkgeworICAgICAgICAgICAgcyA9IDAuNSAvIE1hdGguc3Fy
dCh0cmFjZSArIDEuMCk7CisgICAgICAgICAgICByZXN1bHQudyA9IDAuMjUgLyBzOworICAgICAg
ICAgICAgcmVzdWx0LnggPSAobTMyIC0gbTIzKSAqIHM7CisgICAgICAgICAgICByZXN1bHQueSA9
IChtMTMgLSBtMzEpICogczsKKyAgICAgICAgICAgIHJlc3VsdC56ID0gKG0yMSAtIG0xMikgKiBz
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG0xMSA+IG0yMiAmJiBtMTEgPiBtMzMpIHsK
KyAgICAgICAgICAgIHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTExIC0gbTIyIC0gbTMzKTsK
KyAgICAgICAgICAgIHJlc3VsdC53ID0gKG0zMiAtIG0yMykgLyBzOworICAgICAgICAgICAgcmVz
dWx0LnggPSAwLjI1ICogczsKKyAgICAgICAgICAgIHJlc3VsdC55ID0gKG0xMiArIG0yMSkgLyBz
OworICAgICAgICAgICAgcmVzdWx0LnogPSAobTEzICsgbTMxKSAvIHM7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAobTIyID4gbTMzKSB7CisgICAgICAgICAgICBzID0gMi4wICogTWF0aC5z
cXJ0KDEuMCArIG0yMiAtIG0xMSAtIG0zMyk7CisgICAgICAgICAgICByZXN1bHQudyA9IChtMTMg
LSBtMzEpIC8gczsKKyAgICAgICAgICAgIHJlc3VsdC54ID0gKG0xMiArIG0yMSkgLyBzOworICAg
ICAgICAgICAgcmVzdWx0LnkgPSAwLjI1ICogczsKKyAgICAgICAgICAgIHJlc3VsdC56ID0gKG0y
MyArIG0zMikgLyBzOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcyA9
IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMzMgLSBtMTEgLSBtMjIpOworICAgICAgICAgICAgcmVz
dWx0LncgPSAobTIxIC0gbTEyKSAvIHM7CisgICAgICAgICAgICByZXN1bHQueCA9IChtMTMgKyBt
MzEpIC8gczsKKyAgICAgICAgICAgIHJlc3VsdC55ID0gKG0yMyArIG0zMikgLyBzOworICAgICAg
ICAgICAgcmVzdWx0LnogPSAwLjI1ICogczsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogUmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBiZXR3ZWVuIHRoZSBxdWF0ZXJu
aW9ucyAibGVmdCIgYW5kICJyaWdodCIKKyAgICAgKiBAcGFyYW0gbGVmdCBkZWZpbmVzIHRoZSBs
ZWZ0IG9wZXJhbmQKKyAgICAgKiBAcGFyYW0gcmlnaHQgZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFu
ZAorICAgICAqIEByZXR1cm5zIHRoZSBkb3QgcHJvZHVjdAorICAgICAqLworICAgIFF1YXRlcm5p
b24uRG90ID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7CisgICAgICAgIHJldHVybiAobGVmdC54
ICogcmlnaHQueCArIGxlZnQueSAqIHJpZ2h0LnkgKyBsZWZ0LnogKiByaWdodC56ICsgbGVmdC53
ICogcmlnaHQudyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIHR3byBx
dWF0ZXJuaW9ucyBhcmUgY2xvc2UgdG8gZWFjaCBvdGhlcgorICAgICAqIEBwYXJhbSBxdWF0MCBk
ZWZpbmVzIHRoZSBmaXJzdCBxdWF0ZXJuaW9uIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHF1YXQx
IGRlZmluZXMgdGhlIHNlY29uZCBxdWF0ZXJuaW9uIHRvIGNoZWNrCisgICAgICogQHJldHVybnMg
dHJ1ZSBpZiB0aGUgdHdvIHF1YXRlcm5pb25zIGFyZSBjbG9zZSB0byBlYWNoIG90aGVyCisgICAg
ICovCisgICAgUXVhdGVybmlvbi5BcmVDbG9zZSA9IGZ1bmN0aW9uIChxdWF0MCwgcXVhdDEpIHsK
KyAgICAgICAgdmFyIGRvdCA9IFF1YXRlcm5pb24uRG90KHF1YXQwLCBxdWF0MSk7CisgICAgICAg
IHJldHVybiBkb3QgPj0gMDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gZW1w
dHkgcXVhdGVybmlvbgorICAgICAqIEByZXR1cm5zIGEgbmV3IHF1YXRlcm5pb24gc2V0IHRvICgw
LjAsIDAuMCwgMC4wKQorICAgICAqLworICAgIFF1YXRlcm5pb24uWmVybyA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBRdWF0ZXJuaW9uKDAuMCwgMC4wLCAwLjAsIDAuMCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnZlcnNlIGEgZ2l2ZW4gcXVhdGVybmlvbgorICAgICAq
IEBwYXJhbSBxIGRlZmluZXMgdGhlIHNvdXJjZSBxdWF0ZXJuaW9uCisgICAgICogQHJldHVybnMg
YSBuZXcgcXVhdGVybmlvbiBhcyB0aGUgaW52ZXJ0ZWQgY3VycmVudCBxdWF0ZXJuaW9uCisgICAg
ICovCisgICAgUXVhdGVybmlvbi5JbnZlcnNlID0gZnVuY3Rpb24gKHEpIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBRdWF0ZXJuaW9uKC1xLngsIC1xLnksIC1xLnosIHEudyk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBJbnZlcnNlIGEgZ2l2ZW4gcXVhdGVybmlvbgorICAgICAqIEBwYXJhbSBxIGRl
ZmluZXMgdGhlIHNvdXJjZSBxdWF0ZXJuaW9uCisgICAgICogQHBhcmFtIHJlc3VsdCB0aGUgcXVh
dGVybmlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluCisgICAgICogQHJldHVybnMgdGhl
IHJlc3VsdCBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5JbnZlcnNlVG9SZWYg
PSBmdW5jdGlvbiAocSwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC5zZXQoLXEueCwgLXEueSwg
LXEueiwgcS53KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgcXVhdGVybmlvbgorICAgICAqIEByZXR1cm5zIHRoZSBp
ZGVudGl0eSBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5JZGVudGl0eSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBRdWF0ZXJuaW9uKDAuMCwgMC4wLCAwLjAs
IDEuMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5n
IGlmIHRoZSBnaXZlbiBxdWF0ZXJuaW9uIGlzIGlkZW50aXR5CisgICAgICogQHBhcmFtIHF1YXRl
cm5pb24gZGVmaW5lcyB0aGUgcXVhdGVybmlvbiB0byBjaGVjaworICAgICAqIEByZXR1cm5zIHRy
dWUgaWYgdGhlIHF1YXRlcm5pb24gaXMgaWRlbnRpdHkKKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9u
LklzSWRlbnRpdHkgPSBmdW5jdGlvbiAocXVhdGVybmlvbikgeworICAgICAgICByZXR1cm4gcXVh
dGVybmlvbiAmJiBxdWF0ZXJuaW9uLnggPT09IDAgJiYgcXVhdGVybmlvbi55ID09PSAwICYmIHF1
YXRlcm5pb24ueiA9PT0gMCAmJiBxdWF0ZXJuaW9uLncgPT09IDE7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgcXVhdGVybmlvbiBmcm9tIGEgcm90YXRpb24gYXJvdW5kIGFuIGF4
aXMKKyAgICAgKiBAcGFyYW0gYXhpcyBkZWZpbmVzIHRoZSBheGlzIHRvIHVzZQorICAgICAqIEBw
YXJhbSBhbmdsZSBkZWZpbmVzIHRoZSBhbmdsZSB0byB1c2UKKyAgICAgKiBAcmV0dXJucyBhIG5l
dyBxdWF0ZXJuaW9uIGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gYXhpcyAoVmVjdG9yMykgYW5kIGFu
Z2xlIGluIHJhZGlhbnMgKGZsb2F0KQorICAgICAqLworICAgIFF1YXRlcm5pb24uUm90YXRpb25B
eGlzID0gZnVuY3Rpb24gKGF4aXMsIGFuZ2xlKSB7CisgICAgICAgIHJldHVybiBRdWF0ZXJuaW9u
LlJvdGF0aW9uQXhpc1RvUmVmKGF4aXMsIGFuZ2xlLCBuZXcgUXVhdGVybmlvbigpKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSByb3RhdGlvbiBhcm91bmQgYW4gYXhpcyBhbmQg
c3RvcmVzIGl0IGludG8gdGhlIGdpdmVuIHF1YXRlcm5pb24KKyAgICAgKiBAcGFyYW0gYXhpcyBk
ZWZpbmVzIHRoZSBheGlzIHRvIHVzZQorICAgICAqIEBwYXJhbSBhbmdsZSBkZWZpbmVzIHRoZSBh
bmdsZSB0byB1c2UKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBxdWF0
ZXJuaW9uCisgICAgICogQHJldHVybnMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uCisgICAgICovCisg
ICAgUXVhdGVybmlvbi5Sb3RhdGlvbkF4aXNUb1JlZiA9IGZ1bmN0aW9uIChheGlzLCBhbmdsZSwg
cmVzdWx0KSB7CisgICAgICAgIHZhciBzaW4gPSBNYXRoLnNpbihhbmdsZSAvIDIpOworICAgICAg
ICBheGlzLm5vcm1hbGl6ZSgpOworICAgICAgICByZXN1bHQudyA9IE1hdGguY29zKGFuZ2xlIC8g
Mik7CisgICAgICAgIHJlc3VsdC54ID0gYXhpcy54ICogc2luOworICAgICAgICByZXN1bHQueSA9
IGF4aXMueSAqIHNpbjsKKyAgICAgICAgcmVzdWx0LnogPSBheGlzLnogKiBzaW47CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHF1
YXRlcm5pb24gZnJvbSBkYXRhIHN0b3JlZCBpbnRvIGFuIGFycmF5CisgICAgICogQHBhcmFtIGFy
cmF5IGRlZmluZXMgdGhlIGRhdGEgc291cmNlCisgICAgICogQHBhcmFtIG9mZnNldCBkZWZpbmVz
IHRoZSBvZmZzZXQgaW4gdGhlIHNvdXJjZSBhcnJheSB3aGVyZSB0aGUgZGF0YSBzdGFydHMKKyAg
ICAgKiBAcmV0dXJucyBhIG5ldyBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5G
cm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXksIG9mZnNldCkgeworICAgICAgICBpZiAoIW9mZnNl
dCkgeworICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bmV3IFF1YXRlcm5pb24oYXJyYXlbb2Zmc2V0XSwgYXJyYXlbb2Zmc2V0ICsgMV0sIGFycmF5W29m
ZnNldCArIDJdLCBhcnJheVtvZmZzZXQgKyAzXSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGUgYSBxdWF0ZXJuaW9uIGZyb20gRXVsZXIgcm90YXRpb24gYW5nbGVzCisgICAgICogQHBh
cmFtIHggUGl0Y2gKKyAgICAgKiBAcGFyYW0geSBZYXcKKyAgICAgKiBAcGFyYW0geiBSb2xsCisg
ICAgICogQHJldHVybnMgdGhlIG5ldyBRdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlv
bi5Gcm9tRXVsZXJBbmdsZXMgPSBmdW5jdGlvbiAoeCwgeSwgeikgeworICAgICAgICB2YXIgcSA9
IG5ldyBRdWF0ZXJuaW9uKCk7CisgICAgICAgIFF1YXRlcm5pb24uUm90YXRpb25ZYXdQaXRjaFJv
bGxUb1JlZih5LCB4LCB6LCBxKTsKKyAgICAgICAgcmV0dXJuIHE7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBVcGRhdGVzIGEgcXVhdGVybmlvbiBmcm9tIEV1bGVyIHJvdGF0aW9uIGFuZ2xlcwor
ICAgICAqIEBwYXJhbSB4IFBpdGNoCisgICAgICogQHBhcmFtIHkgWWF3CisgICAgICogQHBhcmFt
IHogUm9sbAorICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHF1YXRlcm5pb24gdG8gc3RvcmUgdGhl
IHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIHF1YXRlcm5pb24KKyAgICAgKi8K
KyAgICBRdWF0ZXJuaW9uLkZyb21FdWxlckFuZ2xlc1RvUmVmID0gZnVuY3Rpb24gKHgsIHksIHos
IHJlc3VsdCkgeworICAgICAgICBRdWF0ZXJuaW9uLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYo
eSwgeCwgeiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENyZWF0ZSBhIHF1YXRlcm5pb24gZnJvbSBFdWxlciByb3RhdGlvbiB2ZWN0b3IK
KyAgICAgKiBAcGFyYW0gdmVjIHRoZSBFdWxlciB2ZWN0b3IgKHggUGl0Y2gsIHkgWWF3LCB6IFJv
bGwpCisgICAgICogQHJldHVybnMgdGhlIG5ldyBRdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVh
dGVybmlvbi5Gcm9tRXVsZXJWZWN0b3IgPSBmdW5jdGlvbiAodmVjKSB7CisgICAgICAgIHZhciBx
ID0gbmV3IFF1YXRlcm5pb24oKTsKKyAgICAgICAgUXVhdGVybmlvbi5Sb3RhdGlvbllhd1BpdGNo
Um9sbFRvUmVmKHZlYy55LCB2ZWMueCwgdmVjLnosIHEpOworICAgICAgICByZXR1cm4gcTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgYSBxdWF0ZXJuaW9uIGZyb20gRXVsZXIgcm90
YXRpb24gdmVjdG9yCisgICAgICogQHBhcmFtIHZlYyB0aGUgRXVsZXIgdmVjdG9yICh4IFBpdGNo
LCB5IFlhdywgeiBSb2xsKQorICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHF1YXRlcm5pb24gdG8g
c3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIHF1YXRlcm5pb24K
KyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLkZyb21FdWxlclZlY3RvclRvUmVmID0gZnVuY3Rpb24g
KHZlYywgcmVzdWx0KSB7CisgICAgICAgIFF1YXRlcm5pb24uUm90YXRpb25ZYXdQaXRjaFJvbGxU
b1JlZih2ZWMueSwgdmVjLngsIHZlYy56LCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBxdWF0ZXJuaW9uIGZyb20g
dGhlIGdpdmVuIEV1bGVyIGZsb2F0IGFuZ2xlcyAoeSwgeCwgeikKKyAgICAgKiBAcGFyYW0geWF3
IGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBZIGF4aXMKKyAgICAgKiBAcGFyYW0gcGl0Y2gg
ZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFggYXhpcworICAgICAqIEBwYXJhbSByb2xsIGRl
ZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBaIGF4aXMKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3
IHF1YXRlcm5pb24KKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLlJvdGF0aW9uWWF3UGl0Y2hSb2xs
ID0gZnVuY3Rpb24gKHlhdywgcGl0Y2gsIHJvbGwpIHsKKyAgICAgICAgdmFyIHEgPSBuZXcgUXVh
dGVybmlvbigpOworICAgICAgICBRdWF0ZXJuaW9uLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYo
eWF3LCBwaXRjaCwgcm9sbCwgcSk7CisgICAgICAgIHJldHVybiBxOworICAgIH07CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBmcm9tIHRoZSBnaXZlbiBFdWxlciBmbG9h
dCBhbmdsZXMgKHksIHgsIHopIGFuZCBzdG9yZXMgaXQgaW4gdGhlIHRhcmdldCBxdWF0ZXJuaW9u
CisgICAgICogQHBhcmFtIHlhdyBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWSBheGlzCisg
ICAgICogQHBhcmFtIHBpdGNoIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBYIGF4aXMKKyAg
ICAgKiBAcGFyYW0gcm9sbCBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWiBheGlzCisgICAg
ICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvbgorICAgICAqLwor
ICAgIFF1YXRlcm5pb24uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZiA9IGZ1bmN0aW9uICh5YXcs
IHBpdGNoLCByb2xsLCByZXN1bHQpIHsKKyAgICAgICAgLy8gUHJvZHVjZXMgYSBxdWF0ZXJuaW9u
IGZyb20gRXVsZXIgYW5nbGVzIGluIHRoZSB6LXkteCBvcmllbnRhdGlvbiAoVGFpdC1CcnlhbiBh
bmdsZXMpCisgICAgICAgIHZhciBoYWxmUm9sbCA9IHJvbGwgKiAwLjU7CisgICAgICAgIHZhciBo
YWxmUGl0Y2ggPSBwaXRjaCAqIDAuNTsKKyAgICAgICAgdmFyIGhhbGZZYXcgPSB5YXcgKiAwLjU7
CisgICAgICAgIHZhciBzaW5Sb2xsID0gTWF0aC5zaW4oaGFsZlJvbGwpOworICAgICAgICB2YXIg
Y29zUm9sbCA9IE1hdGguY29zKGhhbGZSb2xsKTsKKyAgICAgICAgdmFyIHNpblBpdGNoID0gTWF0
aC5zaW4oaGFsZlBpdGNoKTsKKyAgICAgICAgdmFyIGNvc1BpdGNoID0gTWF0aC5jb3MoaGFsZlBp
dGNoKTsKKyAgICAgICAgdmFyIHNpbllhdyA9IE1hdGguc2luKGhhbGZZYXcpOworICAgICAgICB2
YXIgY29zWWF3ID0gTWF0aC5jb3MoaGFsZllhdyk7CisgICAgICAgIHJlc3VsdC54ID0gKGNvc1lh
dyAqIHNpblBpdGNoICogY29zUm9sbCkgKyAoc2luWWF3ICogY29zUGl0Y2ggKiBzaW5Sb2xsKTsK
KyAgICAgICAgcmVzdWx0LnkgPSAoc2luWWF3ICogY29zUGl0Y2ggKiBjb3NSb2xsKSAtIChjb3NZ
YXcgKiBzaW5QaXRjaCAqIHNpblJvbGwpOworICAgICAgICByZXN1bHQueiA9IChjb3NZYXcgKiBj
b3NQaXRjaCAqIHNpblJvbGwpIC0gKHNpbllhdyAqIHNpblBpdGNoICogY29zUm9sbCk7CisgICAg
ICAgIHJlc3VsdC53ID0gKGNvc1lhdyAqIGNvc1BpdGNoICogY29zUm9sbCkgKyAoc2luWWF3ICog
c2luUGl0Y2ggKiBzaW5Sb2xsKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBu
ZXcgcXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiBFdWxlciBmbG9hdCBhbmdsZXMgZXhwcmVzc2Vk
IGluIHoteC16IG9yaWVudGF0aW9uCisgICAgICogQHBhcmFtIGFscGhhIGRlZmluZXMgdGhlIHJv
dGF0aW9uIGFyb3VuZCBmaXJzdCBheGlzCisgICAgICogQHBhcmFtIGJldGEgZGVmaW5lcyB0aGUg
cm90YXRpb24gYXJvdW5kIHNlY29uZCBheGlzCisgICAgICogQHBhcmFtIGdhbW1hIGRlZmluZXMg
dGhlIHJvdGF0aW9uIGFyb3VuZCB0aGlyZCBheGlzCisgICAgICogQHJldHVybnMgdGhlIG5ldyBx
dWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5Sb3RhdGlvbkFscGhhQmV0YUdhbW1h
ID0gZnVuY3Rpb24gKGFscGhhLCBiZXRhLCBnYW1tYSkgeworICAgICAgICB2YXIgcmVzdWx0ID0g
bmV3IFF1YXRlcm5pb24oKTsKKyAgICAgICAgUXVhdGVybmlvbi5Sb3RhdGlvbkFscGhhQmV0YUdh
bW1hVG9SZWYoYWxwaGEsIGJldGEsIGdhbW1hLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBxdWF0ZXJuaW9uIGZy
b20gdGhlIGdpdmVuIEV1bGVyIGZsb2F0IGFuZ2xlcyBleHByZXNzZWQgaW4gei14LXogb3JpZW50
YXRpb24gYW5kIHN0b3JlcyBpdCBpbiB0aGUgdGFyZ2V0IHF1YXRlcm5pb24KKyAgICAgKiBAcGFy
YW0gYWxwaGEgZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIGZpcnN0IGF4aXMKKyAgICAgKiBA
cGFyYW0gYmV0YSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgc2Vjb25kIGF4aXMKKyAgICAg
KiBAcGFyYW0gZ2FtbWEgZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIHRoaXJkIGF4aXMKKyAg
ICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uCisgICAgICov
CisgICAgUXVhdGVybmlvbi5Sb3RhdGlvbkFscGhhQmV0YUdhbW1hVG9SZWYgPSBmdW5jdGlvbiAo
YWxwaGEsIGJldGEsIGdhbW1hLCByZXN1bHQpIHsKKyAgICAgICAgLy8gUHJvZHVjZXMgYSBxdWF0
ZXJuaW9uIGZyb20gRXVsZXIgYW5nbGVzIGluIHRoZSB6LXgteiBvcmllbnRhdGlvbgorICAgICAg
ICB2YXIgaGFsZkdhbW1hUGx1c0FscGhhID0gKGdhbW1hICsgYWxwaGEpICogMC41OworICAgICAg
ICB2YXIgaGFsZkdhbW1hTWludXNBbHBoYSA9IChnYW1tYSAtIGFscGhhKSAqIDAuNTsKKyAgICAg
ICAgdmFyIGhhbGZCZXRhID0gYmV0YSAqIDAuNTsKKyAgICAgICAgcmVzdWx0LnggPSBNYXRoLmNv
cyhoYWxmR2FtbWFNaW51c0FscGhhKSAqIE1hdGguc2luKGhhbGZCZXRhKTsKKyAgICAgICAgcmVz
dWx0LnkgPSBNYXRoLnNpbihoYWxmR2FtbWFNaW51c0FscGhhKSAqIE1hdGguc2luKGhhbGZCZXRh
KTsKKyAgICAgICAgcmVzdWx0LnogPSBNYXRoLnNpbihoYWxmR2FtbWFQbHVzQWxwaGEpICogTWF0
aC5jb3MoaGFsZkJldGEpOworICAgICAgICByZXN1bHQudyA9IE1hdGguY29zKGhhbGZHYW1tYVBs
dXNBbHBoYSkgKiBNYXRoLmNvcyhoYWxmQmV0YSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgbmV3IHF1YXRlcm5pb24gY29udGFpbmluZyB0aGUgcm90YXRpb24gdmFsdWUgdG8g
cmVhY2ggdGhlIHRhcmdldCAoYXhpczEsIGF4aXMyLCBheGlzMykgb3JpZW50YXRpb24gYXMgYSBy
b3RhdGVkIFhZWiBzeXN0ZW0gKGF4aXMxLCBheGlzMiBhbmQgYXhpczMgYXJlIG5vcm1hbGl6ZWQg
ZHVyaW5nIHRoaXMgb3BlcmF0aW9uKQorICAgICAqIEBwYXJhbSBheGlzMSBkZWZpbmVzIHRoZSBm
aXJzdCBheGlzCisgICAgICogQHBhcmFtIGF4aXMyIGRlZmluZXMgdGhlIHNlY29uZCBheGlzCisg
ICAgICogQHBhcmFtIGF4aXMzIGRlZmluZXMgdGhlIHRoaXJkIGF4aXMKKyAgICAgKiBAcmV0dXJu
cyB0aGUgbmV3IHF1YXRlcm5pb24KKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLlJvdGF0aW9uUXVh
dGVybmlvbkZyb21BeGlzID0gZnVuY3Rpb24gKGF4aXMxLCBheGlzMiwgYXhpczMpIHsKKyAgICAg
ICAgdmFyIHF1YXQgPSBuZXcgUXVhdGVybmlvbigwLjAsIDAuMCwgMC4wLCAwLjApOworICAgICAg
ICBRdWF0ZXJuaW9uLlJvdGF0aW9uUXVhdGVybmlvbkZyb21BeGlzVG9SZWYoYXhpczEsIGF4aXMy
LCBheGlzMywgcXVhdCk7CisgICAgICAgIHJldHVybiBxdWF0OworICAgIH07CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIHJvdGF0aW9uIHZhbHVlIHRvIHJlYWNoIHRoZSB0YXJnZXQgKGF4aXMx
LCBheGlzMiwgYXhpczMpIG9yaWVudGF0aW9uIGFzIGEgcm90YXRlZCBYWVogc3lzdGVtIChheGlz
MSwgYXhpczIgYW5kIGF4aXMzIGFyZSBub3JtYWxpemVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbikg
YW5kIHN0b3JlcyBpdCBpbiB0aGUgdGFyZ2V0IHF1YXRlcm5pb24KKyAgICAgKiBAcGFyYW0gYXhp
czEgZGVmaW5lcyB0aGUgZmlyc3QgYXhpcworICAgICAqIEBwYXJhbSBheGlzMiBkZWZpbmVzIHRo
ZSBzZWNvbmQgYXhpcworICAgICAqIEBwYXJhbSBheGlzMyBkZWZpbmVzIHRoZSB0aGlyZCBheGlz
CisgICAgICogQHBhcmFtIHJlZiBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvbgorICAgICAq
LworICAgIFF1YXRlcm5pb24uUm90YXRpb25RdWF0ZXJuaW9uRnJvbUF4aXNUb1JlZiA9IGZ1bmN0
aW9uIChheGlzMSwgYXhpczIsIGF4aXMzLCByZWYpIHsKKyAgICAgICAgdmFyIHJvdE1hdCA9IE1h
dGhUbXAuTWF0cml4WzBdOworICAgICAgICBNYXRyaXguRnJvbVhZWkF4ZXNUb1JlZihheGlzMS5u
b3JtYWxpemUoKSwgYXhpczIubm9ybWFsaXplKCksIGF4aXMzLm5vcm1hbGl6ZSgpLCByb3RNYXQp
OworICAgICAgICBRdWF0ZXJuaW9uLkZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKHJvdE1hdCwgcmVm
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEludGVycG9sYXRlcyBiZXR3ZWVuIHR3byBxdWF0
ZXJuaW9ucworICAgICAqIEBwYXJhbSBsZWZ0IGRlZmluZXMgZmlyc3QgcXVhdGVybmlvbgorICAg
ICAqIEBwYXJhbSByaWdodCBkZWZpbmVzIHNlY29uZCBxdWF0ZXJuaW9uCisgICAgICogQHBhcmFt
IGFtb3VudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2UKKyAgICAgKiBAcmV0dXJucyB0aGUg
bmV3IGludGVycG9sYXRlZCBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5TbGVy
cCA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYW1vdW50KSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBRdWF0ZXJuaW9uLklkZW50aXR5KCk7CisgICAgICAgIFF1YXRlcm5pb24uU2xlcnBUb1JlZihs
ZWZ0LCByaWdodCwgYW1vdW50LCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07CisgICAgLyoqCisgICAgICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIHF1YXRlcm5pb25z
IGFuZCBzdG9yZXMgaXQgaW50byBhIHRhcmdldCBxdWF0ZXJuaW9uCisgICAgICogQHBhcmFtIGxl
ZnQgZGVmaW5lcyBmaXJzdCBxdWF0ZXJuaW9uCisgICAgICogQHBhcmFtIHJpZ2h0IGRlZmluZXMg
c2Vjb25kIHF1YXRlcm5pb24KKyAgICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGdyYWRp
ZW50IHRvIHVzZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IHF1YXRl
cm5pb24KKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLlNsZXJwVG9SZWYgPSBmdW5jdGlvbiAobGVm
dCwgcmlnaHQsIGFtb3VudCwgcmVzdWx0KSB7CisgICAgICAgIHZhciBudW0yOworICAgICAgICB2
YXIgbnVtMzsKKyAgICAgICAgdmFyIG51bTQgPSAoKChsZWZ0LnggKiByaWdodC54KSArIChsZWZ0
LnkgKiByaWdodC55KSkgKyAobGVmdC56ICogcmlnaHQueikpICsgKGxlZnQudyAqIHJpZ2h0Lncp
OworICAgICAgICB2YXIgZmxhZyA9IGZhbHNlOworICAgICAgICBpZiAobnVtNCA8IDApIHsKKyAg
ICAgICAgICAgIGZsYWcgPSB0cnVlOworICAgICAgICAgICAgbnVtNCA9IC1udW00OworICAgICAg
ICB9CisgICAgICAgIGlmIChudW00ID4gMC45OTk5OTkpIHsKKyAgICAgICAgICAgIG51bTMgPSAx
IC0gYW1vdW50OworICAgICAgICAgICAgbnVtMiA9IGZsYWcgPyAtYW1vdW50IDogYW1vdW50Owor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIG51bTUgPSBNYXRoLmFj
b3MobnVtNCk7CisgICAgICAgICAgICB2YXIgbnVtNiA9ICgxLjAgLyBNYXRoLnNpbihudW01KSk7
CisgICAgICAgICAgICBudW0zID0gKE1hdGguc2luKCgxLjAgLSBhbW91bnQpICogbnVtNSkpICog
bnVtNjsKKyAgICAgICAgICAgIG51bTIgPSBmbGFnID8gKCgtTWF0aC5zaW4oYW1vdW50ICogbnVt
NSkpICogbnVtNikgOiAoKE1hdGguc2luKGFtb3VudCAqIG51bTUpKSAqIG51bTYpOworICAgICAg
ICB9CisgICAgICAgIHJlc3VsdC54ID0gKG51bTMgKiBsZWZ0LngpICsgKG51bTIgKiByaWdodC54
KTsKKyAgICAgICAgcmVzdWx0LnkgPSAobnVtMyAqIGxlZnQueSkgKyAobnVtMiAqIHJpZ2h0Lnkp
OworICAgICAgICByZXN1bHQueiA9IChudW0zICogbGVmdC56KSArIChudW0yICogcmlnaHQueik7
CisgICAgICAgIHJlc3VsdC53ID0gKG51bTMgKiBsZWZ0LncpICsgKG51bTIgKiByaWdodC53KTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEludGVycG9sYXRlIGJldHdlZW4gdHdvIHF1YXRlcm5p
b25zIHVzaW5nIEhlcm1pdGUgaW50ZXJwb2xhdGlvbgorICAgICAqIEBwYXJhbSB2YWx1ZTEgZGVm
aW5lcyBmaXJzdCBxdWF0ZXJuaW9uCisgICAgICogQHBhcmFtIHRhbmdlbnQxIGRlZmluZXMgdGhl
IGluY29taW5nIHRhbmdlbnQKKyAgICAgKiBAcGFyYW0gdmFsdWUyIGRlZmluZXMgc2Vjb25kIHF1
YXRlcm5pb24KKyAgICAgKiBAcGFyYW0gdGFuZ2VudDIgZGVmaW5lcyB0aGUgb3V0Z29pbmcgdGFu
Z2VudAorICAgICAqIEBwYXJhbSBhbW91bnQgZGVmaW5lcyB0aGUgdGFyZ2V0IHF1YXRlcm5pb24K
KyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGludGVycG9sYXRlZCBxdWF0ZXJuaW9uCisgICAgICov
CisgICAgUXVhdGVybmlvbi5IZXJtaXRlID0gZnVuY3Rpb24gKHZhbHVlMSwgdGFuZ2VudDEsIHZh
bHVlMiwgdGFuZ2VudDIsIGFtb3VudCkgeworICAgICAgICB2YXIgc3F1YXJlZCA9IGFtb3VudCAq
IGFtb3VudDsKKyAgICAgICAgdmFyIGN1YmVkID0gYW1vdW50ICogc3F1YXJlZDsKKyAgICAgICAg
dmFyIHBhcnQxID0gKCgyLjAgKiBjdWJlZCkgLSAoMy4wICogc3F1YXJlZCkpICsgMS4wOworICAg
ICAgICB2YXIgcGFydDIgPSAoLTIuMCAqIGN1YmVkKSArICgzLjAgKiBzcXVhcmVkKTsKKyAgICAg
ICAgdmFyIHBhcnQzID0gKGN1YmVkIC0gKDIuMCAqIHNxdWFyZWQpKSArIGFtb3VudDsKKyAgICAg
ICAgdmFyIHBhcnQ0ID0gY3ViZWQgLSBzcXVhcmVkOworICAgICAgICB2YXIgeCA9ICgoKHZhbHVl
MS54ICogcGFydDEpICsgKHZhbHVlMi54ICogcGFydDIpKSArICh0YW5nZW50MS54ICogcGFydDMp
KSArICh0YW5nZW50Mi54ICogcGFydDQpOworICAgICAgICB2YXIgeSA9ICgoKHZhbHVlMS55ICog
cGFydDEpICsgKHZhbHVlMi55ICogcGFydDIpKSArICh0YW5nZW50MS55ICogcGFydDMpKSArICh0
YW5nZW50Mi55ICogcGFydDQpOworICAgICAgICB2YXIgeiA9ICgoKHZhbHVlMS56ICogcGFydDEp
ICsgKHZhbHVlMi56ICogcGFydDIpKSArICh0YW5nZW50MS56ICogcGFydDMpKSArICh0YW5nZW50
Mi56ICogcGFydDQpOworICAgICAgICB2YXIgdyA9ICgoKHZhbHVlMS53ICogcGFydDEpICsgKHZh
bHVlMi53ICogcGFydDIpKSArICh0YW5nZW50MS53ICogcGFydDMpKSArICh0YW5nZW50Mi53ICog
cGFydDQpOworICAgICAgICByZXR1cm4gbmV3IFF1YXRlcm5pb24oeCwgeSwgeiwgdyk7CisgICAg
fTsKKyAgICByZXR1cm4gUXVhdGVybmlvbjsKK30oKSk7CisKKy8qKgorICogQ2xhc3MgdXNlZCB0
byBzdG9yZSBtYXRyaXggZGF0YSAoNHg0KQorICovCit2YXIgTWF0cml4ID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gZW1wdHkgbWF0cml4
IChmaWxsZWQgd2l0aCB6ZXJvcykKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBNYXRyaXgoKSB7Cisg
ICAgICAgIHRoaXMuX2lzSWRlbnRpdHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faXNJZGVudGl0
eURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5faXNJZGVudGl0eTN4MiA9IHRydWU7CisgICAg
ICAgIHRoaXMuX2lzSWRlbnRpdHkzeDJEaXJ0eSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSB1cGRhdGUgZmxhZyBvZiB0aGUgbWF0cml4IHdoaWNoIGlzIGFuIHVuaXF1
ZSBudW1iZXIgZm9yIHRoZSBtYXRyaXguCisgICAgICAgICAqIEl0IHdpbGwgYmUgaW5jcmVtZW50
ZWQgZXZlcnkgdGltZSB0aGUgbWF0cml4IGRhdGEgY2hhbmdlLgorICAgICAgICAgKiBZb3UgY2Fu
IHVzZSBpdCB0byBzcGVlZCB0aGUgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2ZXJzaW9ucyBvZiB0
aGUgc2FtZSBtYXRyaXguCisgICAgICAgICAqLworICAgICAgICB0aGlzLnVwZGF0ZUZsYWcgPSAt
MTsKKyAgICAgICAgdGhpcy5fbSA9IG5ldyBGbG9hdDMyQXJyYXkoMTYpOworICAgICAgICB0aGlz
Ll91cGRhdGVJZGVudGl0eVN0YXR1cyhmYWxzZSk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShNYXRyaXgucHJvdG90eXBlLCAibSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIGludGVybmFsIGRhdGEgb2YgdGhlIG1hdHJpeAorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9tOyB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIE1hdHJpeC5wcm90b3R5cGUuX21hcmtBc1VwZGF0ZWQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRoaXMudXBkYXRlRmxhZyA9IE1hdHJpeC5fdXBkYXRlRmxhZ1NlZWQr
KzsKKyAgICAgICAgdGhpcy5faXNJZGVudGl0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0lk
ZW50aXR5M3gyID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lzSWRlbnRpdHlEaXJ0eSA9IHRydWU7
CisgICAgICAgIHRoaXMuX2lzSWRlbnRpdHkzeDJEaXJ0eSA9IHRydWU7CisgICAgfTsKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIE1hdHJpeC5wcm90b3R5cGUuX3VwZGF0ZUlkZW50aXR5U3RhdHVz
ID0gZnVuY3Rpb24gKGlzSWRlbnRpdHksIGlzSWRlbnRpdHlEaXJ0eSwgaXNJZGVudGl0eTN4Miwg
aXNJZGVudGl0eTN4MkRpcnR5KSB7CisgICAgICAgIGlmIChpc0lkZW50aXR5RGlydHkgPT09IHZv
aWQgMCkgeyBpc0lkZW50aXR5RGlydHkgPSBmYWxzZTsgfQorICAgICAgICBpZiAoaXNJZGVudGl0
eTN4MiA9PT0gdm9pZCAwKSB7IGlzSWRlbnRpdHkzeDIgPSBmYWxzZTsgfQorICAgICAgICBpZiAo
aXNJZGVudGl0eTN4MkRpcnR5ID09PSB2b2lkIDApIHsgaXNJZGVudGl0eTN4MkRpcnR5ID0gdHJ1
ZTsgfQorICAgICAgICB0aGlzLnVwZGF0ZUZsYWcgPSBNYXRyaXguX3VwZGF0ZUZsYWdTZWVkKys7
CisgICAgICAgIHRoaXMuX2lzSWRlbnRpdHkgPSBpc0lkZW50aXR5OworICAgICAgICB0aGlzLl9p
c0lkZW50aXR5M3gyID0gaXNJZGVudGl0eSB8fCBpc0lkZW50aXR5M3gyOworICAgICAgICB0aGlz
Ll9pc0lkZW50aXR5RGlydHkgPSB0aGlzLl9pc0lkZW50aXR5ID8gZmFsc2UgOiBpc0lkZW50aXR5
RGlydHk7CisgICAgICAgIHRoaXMuX2lzSWRlbnRpdHkzeDJEaXJ0eSA9IHRoaXMuX2lzSWRlbnRp
dHkzeDIgPyBmYWxzZSA6IGlzSWRlbnRpdHkzeDJEaXJ0eTsKKyAgICB9OworICAgIC8vIFByb3Bl
cnRpZXMKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCBtYXRyaXggaXMgaWRl
bnRpdHkKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlzIHRoZSBtYXRyaXggaXMgdGhlIGlkZW50aXR5
IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUuaXNJZGVudGl0eSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2lzSWRlbnRpdHlEaXJ0eSkgeworICAgICAgICAg
ICAgdGhpcy5faXNJZGVudGl0eURpcnR5ID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgbSA9IHRo
aXMuX207CisgICAgICAgICAgICB0aGlzLl9pc0lkZW50aXR5ID0gKG1bMF0gPT09IDEuMCAmJiBt
WzFdID09PSAwLjAgJiYgbVsyXSA9PT0gMC4wICYmIG1bM10gPT09IDAuMCAmJgorICAgICAgICAg
ICAgICAgIG1bNF0gPT09IDAuMCAmJiBtWzVdID09PSAxLjAgJiYgbVs2XSA9PT0gMC4wICYmIG1b
N10gPT09IDAuMCAmJgorICAgICAgICAgICAgICAgIG1bOF0gPT09IDAuMCAmJiBtWzldID09PSAw
LjAgJiYgbVsxMF0gPT09IDEuMCAmJiBtWzExXSA9PT0gMC4wICYmCisgICAgICAgICAgICAgICAg
bVsxMl0gPT09IDAuMCAmJiBtWzEzXSA9PT0gMC4wICYmIG1bMTRdID09PSAwLjAgJiYgbVsxNV0g
PT09IDEuMCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2lzSWRlbnRpdHk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCBtYXRyaXggaXMgaWRl
bnRpdHkgYXMgYSB0ZXh0dXJlIG1hdHJpeCAoM3gyIHN0b3JlIGluIDR4NCkKKyAgICAgKiBAcmV0
dXJucyB0cnVlIGlzIHRoZSBtYXRyaXggaXMgdGhlIGlkZW50aXR5IG1hdHJpeAorICAgICAqLwor
ICAgIE1hdHJpeC5wcm90b3R5cGUuaXNJZGVudGl0eUFzM3gyID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAodGhpcy5faXNJZGVudGl0eTN4MkRpcnR5KSB7CisgICAgICAgICAgICB0aGlzLl9p
c0lkZW50aXR5M3gyRGlydHkgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9tWzBdICE9
PSAxLjAgfHwgdGhpcy5fbVs1XSAhPT0gMS4wIHx8IHRoaXMuX21bMTVdICE9PSAxLjApIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9pc0lkZW50aXR5M3gyID0gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9tWzFdICE9PSAwLjAgfHwgdGhpcy5fbVsyXSAh
PT0gMC4wIHx8IHRoaXMuX21bM10gIT09IDAuMCB8fAorICAgICAgICAgICAgICAgIHRoaXMuX21b
NF0gIT09IDAuMCB8fCB0aGlzLl9tWzZdICE9PSAwLjAgfHwgdGhpcy5fbVs3XSAhPT0gMC4wIHx8
CisgICAgICAgICAgICAgICAgdGhpcy5fbVs4XSAhPT0gMC4wIHx8IHRoaXMuX21bOV0gIT09IDAu
MCB8fCB0aGlzLl9tWzEwXSAhPT0gMC4wIHx8IHRoaXMuX21bMTFdICE9PSAwLjAgfHwKKyAgICAg
ICAgICAgICAgICB0aGlzLl9tWzEyXSAhPT0gMC4wIHx8IHRoaXMuX21bMTNdICE9PSAwLjAgfHwg
dGhpcy5fbVsxNF0gIT09IDAuMCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2lzSWRlbnRpdHkz
eDIgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2lzSWRlbnRpdHkzeDIgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzLl9pc0lkZW50aXR5M3gyOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgZGV0ZXJtaW5hbnQgb2YgdGhlIG1hdHJpeAorICAgICAqIEByZXR1
cm5zIHRoZSBtYXRyaXggZGV0ZXJtaW5hbnQKKyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBl
LmRldGVybWluYW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5faXNJZGVudGl0
eSA9PT0gdHJ1ZSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIG0gPSB0aGlzLl9tOworICAgICAgICB2YXIgbTAwID0gbVswXSwgbTAxID0gbVsxXSwgbTAy
ID0gbVsyXSwgbTAzID0gbVszXTsKKyAgICAgICAgdmFyIG0xMCA9IG1bNF0sIG0xMSA9IG1bNV0s
IG0xMiA9IG1bNl0sIG0xMyA9IG1bN107CisgICAgICAgIHZhciBtMjAgPSBtWzhdLCBtMjEgPSBt
WzldLCBtMjIgPSBtWzEwXSwgbTIzID0gbVsxMV07CisgICAgICAgIHZhciBtMzAgPSBtWzEyXSwg
bTMxID0gbVsxM10sIG0zMiA9IG1bMTRdLCBtMzMgPSBtWzE1XTsKKyAgICAgICAgLy8gaHR0cHM6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGFwbGFjZV9leHBhbnNpb24KKyAgICAgICAgLy8gdG8g
Y29tcHV0ZSB0aGUgZGV0ZXJybWluYW50IG9mIGEgNHg0IE1hdHJpeCB3ZSBjb21wdXRlIHRoZSBj
b2ZhY3RvcnMgb2YgYW55IHJvdyBvciBjb2x1bW4sCisgICAgICAgIC8vIHRoZW4gd2UgbXVsdGlw
bHkgZWFjaCBDb2ZhY3RvciBieSBpdHMgY29ycmVzcG9uZGluZyBtYXRyaXggdmFsdWUgYW5kIHN1
bSB0aGVtIGFsbCB0byBnZXQgdGhlIGRldGVybWluYW50CisgICAgICAgIC8vIENvZmFjdG9yKGks
IGopID0gc2lnbihpLGopICogZGV0KE1pbm9yKGksIGopKQorICAgICAgICAvLyB3aGVyZQorICAg
ICAgICAvLyAgLSBzaWduKGksaikgPSAoaStqKSAlIDIgPT09IDAgPyAxIDogLTEKKyAgICAgICAg
Ly8gIC0gTWlub3IoaSwgaikgaXMgdGhlIDN4MyBtYXRyaXggd2UgZ2V0IGJ5IHJlbW92aW5nIHJv
dyBpIGFuZCBjb2x1bW4gaiBmcm9tIGN1cnJlbnQgTWF0cml4CisgICAgICAgIC8vCisgICAgICAg
IC8vIEhlcmUgd2UgZG8gdGhhdCBmb3IgdGhlIDFzdCByb3cuCisgICAgICAgIHZhciBkZXRfMjJf
MzMgPSBtMjIgKiBtMzMgLSBtMzIgKiBtMjM7CisgICAgICAgIHZhciBkZXRfMjFfMzMgPSBtMjEg
KiBtMzMgLSBtMzEgKiBtMjM7CisgICAgICAgIHZhciBkZXRfMjFfMzIgPSBtMjEgKiBtMzIgLSBt
MzEgKiBtMjI7CisgICAgICAgIHZhciBkZXRfMjBfMzMgPSBtMjAgKiBtMzMgLSBtMzAgKiBtMjM7
CisgICAgICAgIHZhciBkZXRfMjBfMzIgPSBtMjAgKiBtMzIgLSBtMjIgKiBtMzA7CisgICAgICAg
IHZhciBkZXRfMjBfMzEgPSBtMjAgKiBtMzEgLSBtMzAgKiBtMjE7CisgICAgICAgIHZhciBjb2Zh
Y3RfMDAgPSArKG0xMSAqIGRldF8yMl8zMyAtIG0xMiAqIGRldF8yMV8zMyArIG0xMyAqIGRldF8y
MV8zMik7CisgICAgICAgIHZhciBjb2ZhY3RfMDEgPSAtKG0xMCAqIGRldF8yMl8zMyAtIG0xMiAq
IGRldF8yMF8zMyArIG0xMyAqIGRldF8yMF8zMik7CisgICAgICAgIHZhciBjb2ZhY3RfMDIgPSAr
KG0xMCAqIGRldF8yMV8zMyAtIG0xMSAqIGRldF8yMF8zMyArIG0xMyAqIGRldF8yMF8zMSk7Cisg
ICAgICAgIHZhciBjb2ZhY3RfMDMgPSAtKG0xMCAqIGRldF8yMV8zMiAtIG0xMSAqIGRldF8yMF8z
MiArIG0xMiAqIGRldF8yMF8zMSk7CisgICAgICAgIHJldHVybiBtMDAgKiBjb2ZhY3RfMDAgKyBt
MDEgKiBjb2ZhY3RfMDEgKyBtMDIgKiBjb2ZhY3RfMDIgKyBtMDMgKiBjb2ZhY3RfMDM7CisgICAg
fTsKKyAgICAvLyBNZXRob2RzCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbWF0cml4IGFz
IGEgRmxvYXQzMkFycmF5CisgICAgICogQHJldHVybnMgdGhlIG1hdHJpeCB1bmRlcmx5aW5nIGFy
cmF5CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5fbTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVy
bnMgdGhlIG1hdHJpeCBhcyBhIEZsb2F0MzJBcnJheQorICAgICogQHJldHVybnMgdGhlIG1hdHJp
eCB1bmRlcmx5aW5nIGFycmF5LgorICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS5hc0FycmF5
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fbTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEludmVydHMgdGhlIGN1cnJlbnQgbWF0cml4IGluIHBsYWNlCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgaW52ZXJ0ZWQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnBy
b3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuaW52ZXJ0VG9SZWYo
dGhpcyk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
cyBhbGwgdGhlIG1hdHJpeCBlbGVtZW50cyB0byB6ZXJvCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgTWF0cml4LkZyb21WYWx1ZXNUb1JlZigwLjAsIDAuMCwgMC4wLCAw
LjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4w
LCAwLjAsIHRoaXMpOworICAgICAgICB0aGlzLl91cGRhdGVJZGVudGl0eVN0YXR1cyhmYWxzZSk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyB0aGUg
Y3VycmVudCBtYXRyaXggd2l0aCBhIHNlY29uZCBvbmUKKyAgICAgKiBAcGFyYW0gb3RoZXIgZGVm
aW5lcyB0aGUgbWF0cml4IHRvIGFkZAorICAgICAqIEByZXR1cm5zIGEgbmV3IG1hdHJpeCBhcyB0
aGUgYWRkaXRpb24gb2YgdGhlIGN1cnJlbnQgbWF0cml4IGFuZCB0aGUgZ2l2ZW4gb25lCisgICAg
ICovCisgICAgTWF0cml4LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IG5ldyBNYXRyaXgoKTsKKyAgICAgICAgdGhpcy5hZGRUb1JlZihvdGhl
ciwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldHMgdGhlIGdpdmVuIG1hdHJpeCAicmVzdWx0IiB0byB0aGUgYWRkaXRpb24gb2YgdGhl
IGN1cnJlbnQgbWF0cml4IGFuZCB0aGUgZ2l2ZW4gb25lCisgICAgICogQHBhcmFtIG90aGVyIGRl
ZmluZXMgdGhlIG1hdHJpeCB0byBhZGQKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhl
IHRhcmdldCBtYXRyaXgKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtYXRyaXgKKyAgICAg
Ki8KKyAgICBNYXRyaXgucHJvdG90eXBlLmFkZFRvUmVmID0gZnVuY3Rpb24gKG90aGVyLCByZXN1
bHQpIHsKKyAgICAgICAgdmFyIG0gPSB0aGlzLl9tOworICAgICAgICB2YXIgcmVzdWx0TSA9IHJl
c3VsdC5fbTsKKyAgICAgICAgdmFyIG90aGVyTSA9IG90aGVyLm07CisgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCAxNjsgaW5kZXgrKykgeworICAgICAgICAgICAgcmVzdWx0TVtp
bmRleF0gPSBtW2luZGV4XSArIG90aGVyTVtpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgcmVz
dWx0Ll9tYXJrQXNVcGRhdGVkKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
LyoqCisgICAgICogQWRkcyBpbiBwbGFjZSB0aGUgZ2l2ZW4gbWF0cml4IHRvIHRoZSBjdXJyZW50
IG1hdHJpeAorICAgICAqIEBwYXJhbSBvdGhlciBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAor
ICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgbWF0cml4CisgICAgICovCisgICAg
TWF0cml4LnByb3RvdHlwZS5hZGRUb1NlbGYgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAgICAg
dmFyIG0gPSB0aGlzLl9tOworICAgICAgICB2YXIgb3RoZXJNID0gb3RoZXIubTsKKyAgICAgICAg
Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IDE2OyBpbmRleCsrKSB7CisgICAgICAgICAgICBt
W2luZGV4XSArPSBvdGhlck1baW5kZXhdOworICAgICAgICB9CisgICAgICAgIHRoaXMuX21hcmtB
c1VwZGF0ZWQoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSBnaXZlbiBtYXRyaXggdG8gdGhlIGN1cnJlbnQgaW52ZXJ0ZWQgTWF0cml4Cisg
ICAgICogQHBhcmFtIG90aGVyIGRlZmluZXMgdGhlIHRhcmdldCBtYXRyaXgKKyAgICAgKiBAcmV0
dXJucyB0aGUgdW5tb2RpZmllZCBjdXJyZW50IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5w
cm90b3R5cGUuaW52ZXJ0VG9SZWYgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAgICAgaWYgKHRo
aXMuX2lzSWRlbnRpdHkgPT09IHRydWUpIHsKKyAgICAgICAgICAgIE1hdHJpeC5JZGVudGl0eVRv
UmVmKG90aGVyKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAg
IC8vIHRoZSBpbnZlcnNlIG9mIGEgTWF0cml4IGlzIHRoZSB0cmFuc3Bvc2Ugb2YgY29mYWN0b3Ig
bWF0cml4IGRpdmlkZWQgYnkgdGhlIGRldGVybWluYW50CisgICAgICAgIHZhciBtID0gdGhpcy5f
bTsKKyAgICAgICAgdmFyIG0wMCA9IG1bMF0sIG0wMSA9IG1bMV0sIG0wMiA9IG1bMl0sIG0wMyA9
IG1bM107CisgICAgICAgIHZhciBtMTAgPSBtWzRdLCBtMTEgPSBtWzVdLCBtMTIgPSBtWzZdLCBt
MTMgPSBtWzddOworICAgICAgICB2YXIgbTIwID0gbVs4XSwgbTIxID0gbVs5XSwgbTIyID0gbVsx
MF0sIG0yMyA9IG1bMTFdOworICAgICAgICB2YXIgbTMwID0gbVsxMl0sIG0zMSA9IG1bMTNdLCBt
MzIgPSBtWzE0XSwgbTMzID0gbVsxNV07CisgICAgICAgIHZhciBkZXRfMjJfMzMgPSBtMjIgKiBt
MzMgLSBtMzIgKiBtMjM7CisgICAgICAgIHZhciBkZXRfMjFfMzMgPSBtMjEgKiBtMzMgLSBtMzEg
KiBtMjM7CisgICAgICAgIHZhciBkZXRfMjFfMzIgPSBtMjEgKiBtMzIgLSBtMzEgKiBtMjI7Cisg
ICAgICAgIHZhciBkZXRfMjBfMzMgPSBtMjAgKiBtMzMgLSBtMzAgKiBtMjM7CisgICAgICAgIHZh
ciBkZXRfMjBfMzIgPSBtMjAgKiBtMzIgLSBtMjIgKiBtMzA7CisgICAgICAgIHZhciBkZXRfMjBf
MzEgPSBtMjAgKiBtMzEgLSBtMzAgKiBtMjE7CisgICAgICAgIHZhciBjb2ZhY3RfMDAgPSArKG0x
MSAqIGRldF8yMl8zMyAtIG0xMiAqIGRldF8yMV8zMyArIG0xMyAqIGRldF8yMV8zMik7CisgICAg
ICAgIHZhciBjb2ZhY3RfMDEgPSAtKG0xMCAqIGRldF8yMl8zMyAtIG0xMiAqIGRldF8yMF8zMyAr
IG0xMyAqIGRldF8yMF8zMik7CisgICAgICAgIHZhciBjb2ZhY3RfMDIgPSArKG0xMCAqIGRldF8y
MV8zMyAtIG0xMSAqIGRldF8yMF8zMyArIG0xMyAqIGRldF8yMF8zMSk7CisgICAgICAgIHZhciBj
b2ZhY3RfMDMgPSAtKG0xMCAqIGRldF8yMV8zMiAtIG0xMSAqIGRldF8yMF8zMiArIG0xMiAqIGRl
dF8yMF8zMSk7CisgICAgICAgIHZhciBkZXQgPSBtMDAgKiBjb2ZhY3RfMDAgKyBtMDEgKiBjb2Zh
Y3RfMDEgKyBtMDIgKiBjb2ZhY3RfMDIgKyBtMDMgKiBjb2ZhY3RfMDM7CisgICAgICAgIGlmIChk
ZXQgPT09IDApIHsKKyAgICAgICAgICAgIC8vIG5vdCBpbnZlcnRpYmxlCisgICAgICAgICAgICBv
dGhlci5jb3B5RnJvbSh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9
CisgICAgICAgIHZhciBkZXRJbnYgPSAxIC8gZGV0OworICAgICAgICB2YXIgZGV0XzEyXzMzID0g
bTEyICogbTMzIC0gbTMyICogbTEzOworICAgICAgICB2YXIgZGV0XzExXzMzID0gbTExICogbTMz
IC0gbTMxICogbTEzOworICAgICAgICB2YXIgZGV0XzExXzMyID0gbTExICogbTMyIC0gbTMxICog
bTEyOworICAgICAgICB2YXIgZGV0XzEwXzMzID0gbTEwICogbTMzIC0gbTMwICogbTEzOworICAg
ICAgICB2YXIgZGV0XzEwXzMyID0gbTEwICogbTMyIC0gbTMwICogbTEyOworICAgICAgICB2YXIg
ZGV0XzEwXzMxID0gbTEwICogbTMxIC0gbTMwICogbTExOworICAgICAgICB2YXIgZGV0XzEyXzIz
ID0gbTEyICogbTIzIC0gbTIyICogbTEzOworICAgICAgICB2YXIgZGV0XzExXzIzID0gbTExICog
bTIzIC0gbTIxICogbTEzOworICAgICAgICB2YXIgZGV0XzExXzIyID0gbTExICogbTIyIC0gbTIx
ICogbTEyOworICAgICAgICB2YXIgZGV0XzEwXzIzID0gbTEwICogbTIzIC0gbTIwICogbTEzOwor
ICAgICAgICB2YXIgZGV0XzEwXzIyID0gbTEwICogbTIyIC0gbTIwICogbTEyOworICAgICAgICB2
YXIgZGV0XzEwXzIxID0gbTEwICogbTIxIC0gbTIwICogbTExOworICAgICAgICB2YXIgY29mYWN0
XzEwID0gLShtMDEgKiBkZXRfMjJfMzMgLSBtMDIgKiBkZXRfMjFfMzMgKyBtMDMgKiBkZXRfMjFf
MzIpOworICAgICAgICB2YXIgY29mYWN0XzExID0gKyhtMDAgKiBkZXRfMjJfMzMgLSBtMDIgKiBk
ZXRfMjBfMzMgKyBtMDMgKiBkZXRfMjBfMzIpOworICAgICAgICB2YXIgY29mYWN0XzEyID0gLSht
MDAgKiBkZXRfMjFfMzMgLSBtMDEgKiBkZXRfMjBfMzMgKyBtMDMgKiBkZXRfMjBfMzEpOworICAg
ICAgICB2YXIgY29mYWN0XzEzID0gKyhtMDAgKiBkZXRfMjFfMzIgLSBtMDEgKiBkZXRfMjBfMzIg
KyBtMDIgKiBkZXRfMjBfMzEpOworICAgICAgICB2YXIgY29mYWN0XzIwID0gKyhtMDEgKiBkZXRf
MTJfMzMgLSBtMDIgKiBkZXRfMTFfMzMgKyBtMDMgKiBkZXRfMTFfMzIpOworICAgICAgICB2YXIg
Y29mYWN0XzIxID0gLShtMDAgKiBkZXRfMTJfMzMgLSBtMDIgKiBkZXRfMTBfMzMgKyBtMDMgKiBk
ZXRfMTBfMzIpOworICAgICAgICB2YXIgY29mYWN0XzIyID0gKyhtMDAgKiBkZXRfMTFfMzMgLSBt
MDEgKiBkZXRfMTBfMzMgKyBtMDMgKiBkZXRfMTBfMzEpOworICAgICAgICB2YXIgY29mYWN0XzIz
ID0gLShtMDAgKiBkZXRfMTFfMzIgLSBtMDEgKiBkZXRfMTBfMzIgKyBtMDIgKiBkZXRfMTBfMzEp
OworICAgICAgICB2YXIgY29mYWN0XzMwID0gLShtMDEgKiBkZXRfMTJfMjMgLSBtMDIgKiBkZXRf
MTFfMjMgKyBtMDMgKiBkZXRfMTFfMjIpOworICAgICAgICB2YXIgY29mYWN0XzMxID0gKyhtMDAg
KiBkZXRfMTJfMjMgLSBtMDIgKiBkZXRfMTBfMjMgKyBtMDMgKiBkZXRfMTBfMjIpOworICAgICAg
ICB2YXIgY29mYWN0XzMyID0gLShtMDAgKiBkZXRfMTFfMjMgLSBtMDEgKiBkZXRfMTBfMjMgKyBt
MDMgKiBkZXRfMTBfMjEpOworICAgICAgICB2YXIgY29mYWN0XzMzID0gKyhtMDAgKiBkZXRfMTFf
MjIgLSBtMDEgKiBkZXRfMTBfMjIgKyBtMDIgKiBkZXRfMTBfMjEpOworICAgICAgICBNYXRyaXgu
RnJvbVZhbHVlc1RvUmVmKGNvZmFjdF8wMCAqIGRldEludiwgY29mYWN0XzEwICogZGV0SW52LCBj
b2ZhY3RfMjAgKiBkZXRJbnYsIGNvZmFjdF8zMCAqIGRldEludiwgY29mYWN0XzAxICogZGV0SW52
LCBjb2ZhY3RfMTEgKiBkZXRJbnYsIGNvZmFjdF8yMSAqIGRldEludiwgY29mYWN0XzMxICogZGV0
SW52LCBjb2ZhY3RfMDIgKiBkZXRJbnYsIGNvZmFjdF8xMiAqIGRldEludiwgY29mYWN0XzIyICog
ZGV0SW52LCBjb2ZhY3RfMzIgKiBkZXRJbnYsIGNvZmFjdF8wMyAqIGRldEludiwgY29mYWN0XzEz
ICogZGV0SW52LCBjb2ZhY3RfMjMgKiBkZXRJbnYsIGNvZmFjdF8zMyAqIGRldEludiwgb3RoZXIp
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIGFkZCBhIHZh
bHVlIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgTWF0cml4CisgICAg
ICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgdmFsdWUgd2l0aGluIHRoZSBtYXRyaXgu
IGJldHdlZW4gMCBhbmQgMTUuCisgICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBiZSBh
ZGRlZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgbWF0cml4CisgICAgICov
CisgICAgTWF0cml4LnByb3RvdHlwZS5hZGRBdEluZGV4ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1
ZSkgeworICAgICAgICB0aGlzLl9tW2luZGV4XSArPSB2YWx1ZTsKKyAgICAgICAgdGhpcy5fbWFy
a0FzVXBkYXRlZCgpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIG11dGlwbHkgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBNYXRyaXgg
YnkgYSB2YWx1ZQorICAgICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIHZhbHVlIHdp
dGhpbiB0aGUgbWF0cml4LiBiZXR3ZWVuIDAgYW5kIDE1LgorICAgICAqIEBwYXJhbSB2YWx1ZSB0
aGUgdmFsdWUgdG8gYmUgYWRkZWQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVk
IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUubXVsdGlwbHlBdEluZGV4ID0g
ZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkgeworICAgICAgICB0aGlzLl9tW2luZGV4XSAqPSB2YWx1
ZTsKKyAgICAgICAgdGhpcy5fbWFya0FzVXBkYXRlZCgpOworICAgICAgICByZXR1cm4gdGhpczsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEluc2VydHMgdGhlIHRyYW5zbGF0aW9uIHZlY3RvciAo
dXNpbmcgMyBmbG9hdHMpIGluIHRoZSBjdXJyZW50IG1hdHJpeAorICAgICAqIEBwYXJhbSB4IGRl
ZmluZXMgdGhlIDFzdCBjb21wb25lbnQgb2YgdGhlIHRyYW5zbGF0aW9uCisgICAgICogQHBhcmFt
IHkgZGVmaW5lcyB0aGUgMm5kIGNvbXBvbmVudCBvZiB0aGUgdHJhbnNsYXRpb24KKyAgICAgKiBA
cGFyYW0geiBkZWZpbmVzIHRoZSAzcmQgY29tcG9uZW50IG9mIHRoZSB0cmFuc2xhdGlvbgorICAg
ICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgbWF0cml4CisgICAgICovCisgICAgTWF0
cml4LnByb3RvdHlwZS5zZXRUcmFuc2xhdGlvbkZyb21GbG9hdHMgPSBmdW5jdGlvbiAoeCwgeSwg
eikgeworICAgICAgICB0aGlzLl9tWzEyXSA9IHg7CisgICAgICAgIHRoaXMuX21bMTNdID0geTsK
KyAgICAgICAgdGhpcy5fbVsxNF0gPSB6OworICAgICAgICB0aGlzLl9tYXJrQXNVcGRhdGVkKCk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyB0aGUg
dHJhbnNsYXRpb24gdmVjdG9yICh1c2luZyAzIGZsb2F0cykgaW4gdGhlIGN1cnJlbnQgbWF0cml4
CisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgMXN0IGNvbXBvbmVudCBvZiB0aGUgdHJhbnNs
YXRpb24KKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSAybmQgY29tcG9uZW50IG9mIHRoZSB0
cmFuc2xhdGlvbgorICAgICAqIEBwYXJhbSB6IGRlZmluZXMgdGhlIDNyZCBjb21wb25lbnQgb2Yg
dGhlIHRyYW5zbGF0aW9uCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBtYXRy
aXgKKyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLmFkZFRyYW5zbGF0aW9uRnJvbUZsb2F0
cyA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7CisgICAgICAgIHRoaXMuX21bMTJdICs9IHg7CisgICAg
ICAgIHRoaXMuX21bMTNdICs9IHk7CisgICAgICAgIHRoaXMuX21bMTRdICs9IHo7CisgICAgICAg
IHRoaXMuX21hcmtBc1VwZGF0ZWQoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBJbnNlcnRzIHRoZSB0cmFuc2xhdGlvbiB2ZWN0b3IgaW4gdGhlIGN1cnJl
bnQgbWF0cml4CisgICAgICogQHBhcmFtIHZlY3RvcjMgZGVmaW5lcyB0aGUgdHJhbnNsYXRpb24g
dG8gaW5zZXJ0CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBtYXRyaXgKKyAg
ICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLnNldFRyYW5zbGF0aW9uID0gZnVuY3Rpb24gKHZl
Y3RvcjMpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2V0VHJhbnNsYXRpb25Gcm9tRmxvYXRzKHZl
Y3RvcjMueCwgdmVjdG9yMy55LCB2ZWN0b3IzLnopOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0cyB0aGUgdHJhbnNsYXRpb24gdmFsdWUgb2YgdGhlIGN1cnJlbnQgbWF0cml4CisgICAgICog
QHJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgZXh0cmFjdGVkIHRyYW5zbGF0aW9uIGZyb20g
dGhlIG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUuZ2V0VHJhbnNsYXRpb24g
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyh0aGlzLl9tWzEyXSwg
dGhpcy5fbVsxM10sIHRoaXMuX21bMTRdKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEZpbGwg
YSBWZWN0b3IzIHdpdGggdGhlIGV4dHJhY3RlZCB0cmFuc2xhdGlvbiBmcm9tIHRoZSBtYXRyaXgK
KyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8gc3RvcmUg
dGhlIHRyYW5zbGF0aW9uCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWF0cml4CisgICAg
ICovCisgICAgTWF0cml4LnByb3RvdHlwZS5nZXRUcmFuc2xhdGlvblRvUmVmID0gZnVuY3Rpb24g
KHJlc3VsdCkgeworICAgICAgICByZXN1bHQueCA9IHRoaXMuX21bMTJdOworICAgICAgICByZXN1
bHQueSA9IHRoaXMuX21bMTNdOworICAgICAgICByZXN1bHQueiA9IHRoaXMuX21bMTRdOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSByb3RhdGlv
biBhbmQgc2NhbGluZyBwYXJ0IGZyb20gdGhlIG1hdHJpeAorICAgICAqIEByZXR1cm5zIHRoZSB1
cGRhdGVkIG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUucmVtb3ZlUm90YXRp
b25BbmRTY2FsaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbSA9IHRoaXMubTsKKyAg
ICAgICAgTWF0cml4LkZyb21WYWx1ZXNUb1JlZigxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4w
LCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMCwgMC4wLCBtWzEyXSwgbVsxM10sIG1bMTRdLCBtWzE1
XSwgdGhpcyk7CisgICAgICAgIHRoaXMuX3VwZGF0ZUlkZW50aXR5U3RhdHVzKG1bMTJdID09PSAw
ICYmIG1bMTNdID09PSAwICYmIG1bMTRdID09PSAwICYmIG1bMTVdID09PSAxKTsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNdWx0aXBseSB0d28gbWF0cmlj
ZXMKKyAgICAgKiBAcGFyYW0gb3RoZXIgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAg
KiBAcmV0dXJucyBhIG5ldyBtYXRyaXggc2V0IHdpdGggdGhlIG11bHRpcGxpY2F0aW9uIHJlc3Vs
dCBvZiB0aGUgY3VycmVudCBNYXRyaXggYW5kIHRoZSBnaXZlbiBvbmUKKyAgICAgKi8KKyAgICBN
YXRyaXgucHJvdG90eXBlLm11bHRpcGx5ID0gZnVuY3Rpb24gKG90aGVyKSB7CisgICAgICAgIHZh
ciByZXN1bHQgPSBuZXcgTWF0cml4KCk7CisgICAgICAgIHRoaXMubXVsdGlwbHlUb1JlZihvdGhl
ciwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENvcHkgdGhlIGN1cnJlbnQgbWF0cml4IGZyb20gdGhlIGdpdmVuIG9uZQorICAgICAqIEBw
YXJhbSBvdGhlciBkZWZpbmVzIHRoZSBzb3VyY2UgbWF0cml4CisgICAgICogQHJldHVybnMgdGhl
IGN1cnJlbnQgdXBkYXRlZCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLmNv
cHlGcm9tID0gZnVuY3Rpb24gKG90aGVyKSB7CisgICAgICAgIG90aGVyLmNvcHlUb0FycmF5KHRo
aXMuX20pOworICAgICAgICB2YXIgbyA9IG90aGVyOworICAgICAgICB0aGlzLl91cGRhdGVJZGVu
dGl0eVN0YXR1cyhvLl9pc0lkZW50aXR5LCBvLl9pc0lkZW50aXR5RGlydHksIG8uX2lzSWRlbnRp
dHkzeDIsIG8uX2lzSWRlbnRpdHkzeDJEaXJ0eSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogUG9wdWxhdGVzIHRoZSBnaXZlbiBhcnJheSBmcm9tIHRoZSBz
dGFydGluZyBpbmRleCB3aXRoIHRoZSBjdXJyZW50IG1hdHJpeCB2YWx1ZXMKKyAgICAgKiBAcGFy
YW0gYXJyYXkgZGVmaW5lcyB0aGUgdGFyZ2V0IGFycmF5CisgICAgICogQHBhcmFtIG9mZnNldCBk
ZWZpbmVzIHRoZSBvZmZzZXQgaW4gdGhlIHRhcmdldCBhcnJheSB3aGVyZSB0byBzdGFydCBzdG9y
aW5nIHZhbHVlcworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1hdHJpeAorICAgICAqLwor
ICAgIE1hdHJpeC5wcm90b3R5cGUuY29weVRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXksIG9mZnNl
dCkgeworICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsgb2Zmc2V0ID0gMDsgfQorICAg
ICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgMTY7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHRoaXMuX21baW5kZXhdOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2
ZW4gbWF0cml4ICJyZXN1bHQiIHdpdGggdGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBvZiB0aGUg
Y3VycmVudCBNYXRyaXggYW5kIHRoZSBnaXZlbiBvbmUKKyAgICAgKiBAcGFyYW0gb3RoZXIgZGVm
aW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhl
IG1hdHJpeCB3aGVyZSB0byBzdG9yZSB0aGUgbXVsdGlwbGljYXRpb24KKyAgICAgKiBAcmV0dXJu
cyB0aGUgY3VycmVudCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLm11bHRp
cGx5VG9SZWYgPSBmdW5jdGlvbiAob3RoZXIsIHJlc3VsdCkgeworICAgICAgICBpZiAodGhpcy5f
aXNJZGVudGl0eSkgeworICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKG90aGVyKTsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmIChvdGhlci5faXNJZGVu
dGl0eSkgeworICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKHRoaXMpOworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5tdWx0aXBseVRvQXJyYXkob3Ro
ZXIsIHJlc3VsdC5fbSwgMCk7CisgICAgICAgIHJlc3VsdC5fbWFya0FzVXBkYXRlZCgpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIEZsb2F0
MzJBcnJheSAicmVzdWx0IiBmcm9tIHRoZSBnaXZlbiBpbmRleCAib2Zmc2V0IiB3aXRoIHRoZSBt
dWx0aXBsaWNhdGlvbiBvZiB0aGUgY3VycmVudCBtYXRyaXggYW5kIHRoZSBnaXZlbiBvbmUKKyAg
ICAgKiBAcGFyYW0gb3RoZXIgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcGFy
YW0gcmVzdWx0IGRlZmluZXMgdGhlIGFycmF5IHdoZXJlIHRvIHN0b3JlIHRoZSBtdWx0aXBsaWNh
dGlvbgorICAgICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGluIHRoZSB0YXJn
ZXQgYXJyYXkgd2hlcmUgdG8gc3RhcnQgc3RvcmluZyB2YWx1ZXMKKyAgICAgKiBAcmV0dXJucyB0
aGUgY3VycmVudCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLm11bHRpcGx5
VG9BcnJheSA9IGZ1bmN0aW9uIChvdGhlciwgcmVzdWx0LCBvZmZzZXQpIHsKKyAgICAgICAgdmFy
IG0gPSB0aGlzLl9tOworICAgICAgICB2YXIgb3RoZXJNID0gb3RoZXIubTsKKyAgICAgICAgdmFy
IHRtMCA9IG1bMF0sIHRtMSA9IG1bMV0sIHRtMiA9IG1bMl0sIHRtMyA9IG1bM107CisgICAgICAg
IHZhciB0bTQgPSBtWzRdLCB0bTUgPSBtWzVdLCB0bTYgPSBtWzZdLCB0bTcgPSBtWzddOworICAg
ICAgICB2YXIgdG04ID0gbVs4XSwgdG05ID0gbVs5XSwgdG0xMCA9IG1bMTBdLCB0bTExID0gbVsx
MV07CisgICAgICAgIHZhciB0bTEyID0gbVsxMl0sIHRtMTMgPSBtWzEzXSwgdG0xNCA9IG1bMTRd
LCB0bTE1ID0gbVsxNV07CisgICAgICAgIHZhciBvbTAgPSBvdGhlck1bMF0sIG9tMSA9IG90aGVy
TVsxXSwgb20yID0gb3RoZXJNWzJdLCBvbTMgPSBvdGhlck1bM107CisgICAgICAgIHZhciBvbTQg
PSBvdGhlck1bNF0sIG9tNSA9IG90aGVyTVs1XSwgb202ID0gb3RoZXJNWzZdLCBvbTcgPSBvdGhl
ck1bN107CisgICAgICAgIHZhciBvbTggPSBvdGhlck1bOF0sIG9tOSA9IG90aGVyTVs5XSwgb20x
MCA9IG90aGVyTVsxMF0sIG9tMTEgPSBvdGhlck1bMTFdOworICAgICAgICB2YXIgb20xMiA9IG90
aGVyTVsxMl0sIG9tMTMgPSBvdGhlck1bMTNdLCBvbTE0ID0gb3RoZXJNWzE0XSwgb20xNSA9IG90
aGVyTVsxNV07CisgICAgICAgIHJlc3VsdFtvZmZzZXRdID0gdG0wICogb20wICsgdG0xICogb200
ICsgdG0yICogb204ICsgdG0zICogb20xMjsKKyAgICAgICAgcmVzdWx0W29mZnNldCArIDFdID0g
dG0wICogb20xICsgdG0xICogb201ICsgdG0yICogb205ICsgdG0zICogb20xMzsKKyAgICAgICAg
cmVzdWx0W29mZnNldCArIDJdID0gdG0wICogb20yICsgdG0xICogb202ICsgdG0yICogb20xMCAr
IHRtMyAqIG9tMTQ7CisgICAgICAgIHJlc3VsdFtvZmZzZXQgKyAzXSA9IHRtMCAqIG9tMyArIHRt
MSAqIG9tNyArIHRtMiAqIG9tMTEgKyB0bTMgKiBvbTE1OworICAgICAgICByZXN1bHRbb2Zmc2V0
ICsgNF0gPSB0bTQgKiBvbTAgKyB0bTUgKiBvbTQgKyB0bTYgKiBvbTggKyB0bTcgKiBvbTEyOwor
ICAgICAgICByZXN1bHRbb2Zmc2V0ICsgNV0gPSB0bTQgKiBvbTEgKyB0bTUgKiBvbTUgKyB0bTYg
KiBvbTkgKyB0bTcgKiBvbTEzOworICAgICAgICByZXN1bHRbb2Zmc2V0ICsgNl0gPSB0bTQgKiBv
bTIgKyB0bTUgKiBvbTYgKyB0bTYgKiBvbTEwICsgdG03ICogb20xNDsKKyAgICAgICAgcmVzdWx0
W29mZnNldCArIDddID0gdG00ICogb20zICsgdG01ICogb203ICsgdG02ICogb20xMSArIHRtNyAq
IG9tMTU7CisgICAgICAgIHJlc3VsdFtvZmZzZXQgKyA4XSA9IHRtOCAqIG9tMCArIHRtOSAqIG9t
NCArIHRtMTAgKiBvbTggKyB0bTExICogb20xMjsKKyAgICAgICAgcmVzdWx0W29mZnNldCArIDld
ID0gdG04ICogb20xICsgdG05ICogb201ICsgdG0xMCAqIG9tOSArIHRtMTEgKiBvbTEzOworICAg
ICAgICByZXN1bHRbb2Zmc2V0ICsgMTBdID0gdG04ICogb20yICsgdG05ICogb202ICsgdG0xMCAq
IG9tMTAgKyB0bTExICogb20xNDsKKyAgICAgICAgcmVzdWx0W29mZnNldCArIDExXSA9IHRtOCAq
IG9tMyArIHRtOSAqIG9tNyArIHRtMTAgKiBvbTExICsgdG0xMSAqIG9tMTU7CisgICAgICAgIHJl
c3VsdFtvZmZzZXQgKyAxMl0gPSB0bTEyICogb20wICsgdG0xMyAqIG9tNCArIHRtMTQgKiBvbTgg
KyB0bTE1ICogb20xMjsKKyAgICAgICAgcmVzdWx0W29mZnNldCArIDEzXSA9IHRtMTIgKiBvbTEg
KyB0bTEzICogb201ICsgdG0xNCAqIG9tOSArIHRtMTUgKiBvbTEzOworICAgICAgICByZXN1bHRb
b2Zmc2V0ICsgMTRdID0gdG0xMiAqIG9tMiArIHRtMTMgKiBvbTYgKyB0bTE0ICogb20xMCArIHRt
MTUgKiBvbTE0OworICAgICAgICByZXN1bHRbb2Zmc2V0ICsgMTVdID0gdG0xMiAqIG9tMyArIHRt
MTMgKiBvbTcgKyB0bTE0ICogb20xMSArIHRtMTUgKiBvbTE1OworICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrIGVxdWFsaXR5IGJldHdlZW4gdGhpcyBt
YXRyaXggYW5kIGEgc2Vjb25kIG9uZQorICAgICAqIEBwYXJhbSB2YWx1ZSBkZWZpbmVzIHRoZSBz
ZWNvbmQgbWF0cml4IHRvIGNvbXBhcmUKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlzIHRoZSBjdXJy
ZW50IG1hdHJpeCBhbmQgdGhlIGdpdmVuIG9uZSB2YWx1ZXMgYXJlIHN0cmljdGx5IGVxdWFsCisg
ICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgdmFyIG90aGVyID0gdmFsdWU7CisgICAgICAgIGlmICghb3RoZXIpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5faXNJZGVu
dGl0eSB8fCBvdGhlci5faXNJZGVudGl0eSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0lk
ZW50aXR5RGlydHkgJiYgIW90aGVyLl9pc0lkZW50aXR5RGlydHkpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5faXNJZGVudGl0eSAmJiBvdGhlci5faXNJZGVudGl0eTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgbSA9IHRoaXMubTsKKyAgICAgICAgdmFyIG9t
ID0gb3RoZXIubTsKKyAgICAgICAgcmV0dXJuIChtWzBdID09PSBvbVswXSAmJiBtWzFdID09PSBv
bVsxXSAmJiBtWzJdID09PSBvbVsyXSAmJiBtWzNdID09PSBvbVszXSAmJgorICAgICAgICAgICAg
bVs0XSA9PT0gb21bNF0gJiYgbVs1XSA9PT0gb21bNV0gJiYgbVs2XSA9PT0gb21bNl0gJiYgbVs3
XSA9PT0gb21bN10gJiYKKyAgICAgICAgICAgIG1bOF0gPT09IG9tWzhdICYmIG1bOV0gPT09IG9t
WzldICYmIG1bMTBdID09PSBvbVsxMF0gJiYgbVsxMV0gPT09IG9tWzExXSAmJgorICAgICAgICAg
ICAgbVsxMl0gPT09IG9tWzEyXSAmJiBtWzEzXSA9PT0gb21bMTNdICYmIG1bMTRdID09PSBvbVsx
NF0gJiYgbVsxNV0gPT09IG9tWzE1XSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZSB0
aGUgY3VycmVudCBtYXRyaXgKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBtYXRyaXggZnJvbSB0aGUg
Y3VycmVudCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpOworICAgICAgICBt
YXRyaXguY29weUZyb20odGhpcyk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IG1hdHJpeCBjbGFz
cworICAgICAqIEByZXR1cm5zIHRoZSBzdHJpbmcgIk1hdHJpeCIKKyAgICAgKi8KKyAgICBNYXRy
aXgucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
ICJNYXRyaXgiOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgaGFzaCBjb2RlIG9m
IHRoZSBjdXJyZW50IG1hdHJpeAorICAgICAqIEByZXR1cm5zIHRoZSBoYXNoIGNvZGUKKyAgICAg
Ki8KKyAgICBNYXRyaXgucHJvdG90eXBlLmdldEhhc2hDb2RlID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgaGFzaCA9IHRoaXMuX21bMF0gfCAwOworICAgICAgICBmb3IgKHZhciBpID0gMTsg
aSA8IDE2OyBpKyspIHsKKyAgICAgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAodGhpcy5f
bVtpXSB8IDApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNoOworICAgIH07CisgICAg
LyoqCisgICAgICogRGVjb21wb3NlcyB0aGUgY3VycmVudCBNYXRyaXggaW50byBhIHRyYW5zbGF0
aW9uLCByb3RhdGlvbiBhbmQgc2NhbGluZyBjb21wb25lbnRzCisgICAgICogQHBhcmFtIHNjYWxl
IGRlZmluZXMgdGhlIHNjYWxlIHZlY3RvcjMgZ2l2ZW4gYXMgYSByZWZlcmVuY2UgdG8gdXBkYXRl
CisgICAgICogQHBhcmFtIHJvdGF0aW9uIGRlZmluZXMgdGhlIHJvdGF0aW9uIHF1YXRlcm5pb24g
Z2l2ZW4gYXMgYSByZWZlcmVuY2UgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIHRyYW5zbGF0aW9u
IGRlZmluZXMgdGhlIHRyYW5zbGF0aW9uIHZlY3RvcjMgZ2l2ZW4gYXMgYSByZWZlcmVuY2UgdG8g
dXBkYXRlCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwK
KyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLmRlY29tcG9zZSA9IGZ1bmN0aW9uIChzY2Fs
ZSwgcm90YXRpb24sIHRyYW5zbGF0aW9uKSB7CisgICAgICAgIGlmICh0aGlzLl9pc0lkZW50aXR5
KSB7CisgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0cmFu
c2xhdGlvbi5zZXRBbGwoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2NhbGUp
IHsKKyAgICAgICAgICAgICAgICBzY2FsZS5zZXRBbGwoMSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAocm90YXRpb24pIHsKKyAgICAgICAgICAgICAgICByb3RhdGlvbi5jb3B5RnJv
bUZsb2F0cygwLCAwLCAwLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHZhciBtID0gdGhpcy5fbTsKKyAgICAgICAgaWYgKHRy
YW5zbGF0aW9uKSB7CisgICAgICAgICAgICB0cmFuc2xhdGlvbi5jb3B5RnJvbUZsb2F0cyhtWzEy
XSwgbVsxM10sIG1bMTRdKTsKKyAgICAgICAgfQorICAgICAgICBzY2FsZSA9IHNjYWxlIHx8IE1h
dGhUbXAuVmVjdG9yM1swXTsKKyAgICAgICAgc2NhbGUueCA9IE1hdGguc3FydChtWzBdICogbVsw
XSArIG1bMV0gKiBtWzFdICsgbVsyXSAqIG1bMl0pOworICAgICAgICBzY2FsZS55ID0gTWF0aC5z
cXJ0KG1bNF0gKiBtWzRdICsgbVs1XSAqIG1bNV0gKyBtWzZdICogbVs2XSk7CisgICAgICAgIHNj
YWxlLnogPSBNYXRoLnNxcnQobVs4XSAqIG1bOF0gKyBtWzldICogbVs5XSArIG1bMTBdICogbVsx
MF0pOworICAgICAgICBpZiAodGhpcy5kZXRlcm1pbmFudCgpIDw9IDApIHsKKyAgICAgICAgICAg
IHNjYWxlLnkgKj0gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjYWxlLnggPT09IDAgfHwg
c2NhbGUueSA9PT0gMCB8fCBzY2FsZS56ID09PSAwKSB7CisgICAgICAgICAgICBpZiAocm90YXRp
b24pIHsKKyAgICAgICAgICAgICAgICByb3RhdGlvbi5jb3B5RnJvbUZsb2F0cygwLjAsIDAuMCwg
MC4wLCAxLjApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGlmIChyb3RhdGlvbikgeworICAgICAgICAgICAgdmFyIHN4ID0gMSAv
IHNjYWxlLngsIHN5ID0gMSAvIHNjYWxlLnksIHN6ID0gMSAvIHNjYWxlLno7CisgICAgICAgICAg
ICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKG1bMF0gKiBzeCwgbVsxXSAqIHN4LCBtWzJdICogc3gs
IDAuMCwgbVs0XSAqIHN5LCBtWzVdICogc3ksIG1bNl0gKiBzeSwgMC4wLCBtWzhdICogc3osIG1b
OV0gKiBzeiwgbVsxMF0gKiBzeiwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIE1hdGhUbXAuTWF0
cml4WzBdKTsKKyAgICAgICAgICAgIFF1YXRlcm5pb24uRnJvbVJvdGF0aW9uTWF0cml4VG9SZWYo
TWF0aFRtcC5NYXRyaXhbMF0sIHJvdGF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgc3BlY2lmaWMgcm93IG9mIHRoZSBt
YXRyaXgKKyAgICAgKiBAcGFyYW0gaW5kZXggZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHRoZSByb3cg
dG8gZ2V0CisgICAgICogQHJldHVybnMgdGhlIGluZGV4LXRoIHJvdyBvZiB0aGUgY3VycmVudCBt
YXRyaXggYXMgYSBuZXcgVmVjdG9yNAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUuZ2V0
Um93ID0gZnVuY3Rpb24gKGluZGV4KSB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXgg
PiAzKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB2YXIg
aSA9IGluZGV4ICogNDsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3I0KHRoaXMuX21baSArIDBd
LCB0aGlzLl9tW2kgKyAxXSwgdGhpcy5fbVtpICsgMl0sIHRoaXMuX21baSArIDNdKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGluZGV4LXRoIHJvdyBvZiB0aGUgY3VycmVudCBt
YXRyaXggdG8gdGhlIHZlY3RvcjQgdmFsdWVzCisgICAgICogQHBhcmFtIGluZGV4IGRlZmluZXMg
dGhlIG51bWJlciBvZiB0aGUgcm93IHRvIHNldAorICAgICAqIEBwYXJhbSByb3cgZGVmaW5lcyB0
aGUgdGFyZ2V0IHZlY3RvcjQKKyAgICAgKiBAcmV0dXJucyB0aGUgdXBkYXRlZCBjdXJyZW50IG1h
dHJpeAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUuc2V0Um93ID0gZnVuY3Rpb24gKGlu
ZGV4LCByb3cpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2V0Um93RnJvbUZsb2F0cyhpbmRleCwg
cm93LngsIHJvdy55LCByb3cueiwgcm93LncpOworICAgIH07CisgICAgLyoqCisgICAgICogQ29t
cHV0ZSB0aGUgdHJhbnNwb3NlIG9mIHRoZSBtYXRyaXgKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3
IHRyYW5zcG9zZWQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS50cmFuc3Bv
c2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBNYXRyaXguVHJhbnNwb3NlKHRoaXMp
OworICAgIH07CisgICAgLyoqCisgICAgICogQ29tcHV0ZSB0aGUgdHJhbnNwb3NlIG9mIHRoZSBt
YXRyaXggYW5kIHN0b3JlIGl0IGluIGEgZ2l2ZW4gbWF0cml4CisgICAgICogQHBhcmFtIHJlc3Vs
dCBkZWZpbmVzIHRoZSB0YXJnZXQgbWF0cml4CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQg
bWF0cml4CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS50cmFuc3Bvc2VUb1JlZiA9IGZ1
bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAgTWF0cml4LlRyYW5zcG9zZVRvUmVmKHRoaXMsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
cyB0aGUgaW5kZXgtdGggcm93IG9mIHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIHRoZSBnaXZlbiA0
IHggZmxvYXQgdmFsdWVzCisgICAgICogQHBhcmFtIGluZGV4IGRlZmluZXMgdGhlIHJvdyBpbmRl
eAorICAgICAqIEBwYXJhbSB4IGRlZmluZXMgdGhlIHggY29tcG9uZW50IHRvIHNldAorICAgICAq
IEBwYXJhbSB5IGRlZmluZXMgdGhlIHkgY29tcG9uZW50IHRvIHNldAorICAgICAqIEBwYXJhbSB6
IGRlZmluZXMgdGhlIHogY29tcG9uZW50IHRvIHNldAorICAgICAqIEBwYXJhbSB3IGRlZmluZXMg
dGhlIHcgY29tcG9uZW50IHRvIHNldAorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIGN1cnJl
bnQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS5zZXRSb3dGcm9tRmxvYXRz
ID0gZnVuY3Rpb24gKGluZGV4LCB4LCB5LCB6LCB3KSB7CisgICAgICAgIGlmIChpbmRleCA8IDAg
fHwgaW5kZXggPiAzKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgaSA9IGluZGV4ICogNDsKKyAgICAgICAgdGhpcy5fbVtpICsgMF0gPSB4OworICAg
ICAgICB0aGlzLl9tW2kgKyAxXSA9IHk7CisgICAgICAgIHRoaXMuX21baSArIDJdID0gejsKKyAg
ICAgICAgdGhpcy5fbVtpICsgM10gPSB3OworICAgICAgICB0aGlzLl9tYXJrQXNVcGRhdGVkKCk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ29tcHV0ZSBh
IG5ldyBtYXRyaXggc2V0IHdpdGggdGhlIGN1cnJlbnQgbWF0cml4IHZhbHVlcyBtdWx0aXBsaWVk
IGJ5IHNjYWxlIChmbG9hdCkKKyAgICAgKiBAcGFyYW0gc2NhbGUgZGVmaW5lcyB0aGUgc2NhbGUg
ZmFjdG9yCisgICAgICogQHJldHVybnMgYSBuZXcgbWF0cml4CisgICAgICovCisgICAgTWF0cml4
LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gbmV3IE1hdHJpeCgpOworICAgICAgICB0aGlzLnNjYWxlVG9SZWYoc2NhbGUsIHJlc3VsdCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0
aGUgY3VycmVudCBtYXRyaXggdmFsdWVzIGJ5IGEgZmFjdG9yIHRvIGEgZ2l2ZW4gcmVzdWx0IG1h
dHJpeAorICAgICAqIEBwYXJhbSBzY2FsZSBkZWZpbmVzIHRoZSBzY2FsZSBmYWN0b3IKKyAgICAg
KiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIG1hdHJpeCB0byBzdG9yZSB0aGUgcmVzdWx0Cisg
ICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnBy
b3RvdHlwZS5zY2FsZVRvUmVmID0gZnVuY3Rpb24gKHNjYWxlLCByZXN1bHQpIHsKKyAgICAgICAg
Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IDE2OyBpbmRleCsrKSB7CisgICAgICAgICAgICBy
ZXN1bHQuX21baW5kZXhdID0gdGhpcy5fbVtpbmRleF0gKiBzY2FsZTsKKyAgICAgICAgfQorICAg
ICAgICByZXN1bHQuX21hcmtBc1VwZGF0ZWQoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0aGUgY3VycmVudCBtYXRyaXggdmFsdWVzIGJ5IGEg
ZmFjdG9yIGFuZCBhZGQgdGhlIHJlc3VsdCB0byBhIGdpdmVuIG1hdHJpeAorICAgICAqIEBwYXJh
bSBzY2FsZSBkZWZpbmVzIHRoZSBzY2FsZSBmYWN0b3IKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRl
ZmluZXMgdGhlIE1hdHJpeCB0byBzdG9yZSB0aGUgcmVzdWx0CisgICAgICogQHJldHVybnMgdGhl
IGN1cnJlbnQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS5zY2FsZUFuZEFk
ZFRvUmVmID0gZnVuY3Rpb24gKHNjYWxlLCByZXN1bHQpIHsKKyAgICAgICAgZm9yICh2YXIgaW5k
ZXggPSAwOyBpbmRleCA8IDE2OyBpbmRleCsrKSB7CisgICAgICAgICAgICByZXN1bHQuX21baW5k
ZXhdICs9IHRoaXMuX21baW5kZXhdICogc2NhbGU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0
Ll9tYXJrQXNVcGRhdGVkKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoq
CisgICAgICogV3JpdGVzIHRvIHRoZSBnaXZlbiBtYXRyaXggYSBub3JtYWwgbWF0cml4LCBjb21w
dXRlZCBmcm9tIHRoaXMgb25lICh1c2luZyB2YWx1ZXMgZnJvbSBpZGVudGl0eSBtYXRyaXggZm9y
IGZvdXJ0aCByb3cgYW5kIGNvbHVtbikuCisgICAgICogQHBhcmFtIHJlZiBtYXRyaXggdG8gc3Rv
cmUgdGhlIHJlc3VsdAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUudG9Ob3JtYWxNYXRy
aXggPSBmdW5jdGlvbiAocmVmKSB7CisgICAgICAgIHZhciB0bXAgPSBNYXRoVG1wLk1hdHJpeFsw
XTsKKyAgICAgICAgdGhpcy5pbnZlcnRUb1JlZih0bXApOworICAgICAgICB0bXAudHJhbnNwb3Nl
VG9SZWYocmVmKTsKKyAgICAgICAgdmFyIG0gPSByZWYuX207CisgICAgICAgIE1hdHJpeC5Gcm9t
VmFsdWVzVG9SZWYobVswXSwgbVsxXSwgbVsyXSwgMC4wLCBtWzRdLCBtWzVdLCBtWzZdLCAwLjAs
IG1bOF0sIG1bOV0sIG1bMTBdLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMCwgcmVmKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgb25seSByb3RhdGlvbiBwYXJ0IG9mIHRoZSBjdXJyZW50
IG1hdHJpeAorICAgICAqIEByZXR1cm5zIGEgbmV3IG1hdHJpeCBzZXRzIHRvIHRoZSBleHRyYWN0
ZWQgcm90YXRpb24gbWF0cml4IGZyb20gdGhlIGN1cnJlbnQgb25lCisgICAgICovCisgICAgTWF0
cml4LnByb3RvdHlwZS5nZXRSb3RhdGlvbk1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IG5ldyBNYXRyaXgoKTsKKyAgICAgICAgdGhpcy5nZXRSb3RhdGlvbk1hdHJp
eFRvUmVmKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBFeHRyYWN0cyB0aGUgcm90YXRpb24gbWF0cml4IGZyb20gdGhlIGN1cnJlbnQgb25l
IGFuZCBzZXRzIGl0IGFzIHRoZSBnaXZlbiAicmVzdWx0IgorICAgICAqIEBwYXJhbSByZXN1bHQg
ZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeCB0byBzdG9yZSBkYXRhIHRvCisgICAgICogQHJldHVy
bnMgdGhlIGN1cnJlbnQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS5nZXRS
b3RhdGlvbk1hdHJpeFRvUmVmID0gZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICB2YXIgc2Nh
bGUgPSBNYXRoVG1wLlZlY3RvcjNbMF07CisgICAgICAgIGlmICghdGhpcy5kZWNvbXBvc2Uoc2Nh
bGUpKSB7CisgICAgICAgICAgICBNYXRyaXguSWRlbnRpdHlUb1JlZihyZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG0gPSB0aGlzLl9tOwor
ICAgICAgICB2YXIgc3ggPSAxIC8gc2NhbGUueCwgc3kgPSAxIC8gc2NhbGUueSwgc3ogPSAxIC8g
c2NhbGUuejsKKyAgICAgICAgTWF0cml4LkZyb21WYWx1ZXNUb1JlZihtWzBdICogc3gsIG1bMV0g
KiBzeCwgbVsyXSAqIHN4LCAwLjAsIG1bNF0gKiBzeSwgbVs1XSAqIHN5LCBtWzZdICogc3ksIDAu
MCwgbVs4XSAqIHN6LCBtWzldICogc3osIG1bMTBdICogc3osIDAuMCwgMC4wLCAwLjAsIDAuMCwg
MS4wLCByZXN1bHQpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFRvZ2dsZXMgbW9kZWwgbWF0cml4IGZyb20gYmVpbmcgcmlnaHQgaGFuZGVkIHRvIGxlZnQg
aGFuZGVkIGluIHBsYWNlIGFuZCB2aWNlIHZlcnNhCisgICAgICovCisgICAgTWF0cml4LnByb3Rv
dHlwZS50b2dnbGVNb2RlbE1hdHJpeEhhbmRJblBsYWNlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgbSA9IHRoaXMuX207CisgICAgICAgIG1bMl0gKj0gLTE7CisgICAgICAgIG1bNl0gKj0g
LTE7CisgICAgICAgIG1bOF0gKj0gLTE7CisgICAgICAgIG1bOV0gKj0gLTE7CisgICAgICAgIG1b
MTRdICo9IC0xOworICAgICAgICB0aGlzLl9tYXJrQXNVcGRhdGVkKCk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBUb2dnbGVzIHByb2plY3Rpb24gbWF0cml4IGZyb20gYmVpbmcgcmlnaHQgaGFu
ZGVkIHRvIGxlZnQgaGFuZGVkIGluIHBsYWNlIGFuZCB2aWNlIHZlcnNhCisgICAgICovCisgICAg
TWF0cml4LnByb3RvdHlwZS50b2dnbGVQcm9qZWN0aW9uTWF0cml4SGFuZEluUGxhY2UgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciBtID0gdGhpcy5fbTsKKyAgICAgICAgbVs4XSAqPSAtMTsK
KyAgICAgICAgbVs5XSAqPSAtMTsKKyAgICAgICAgbVsxMF0gKj0gLTE7CisgICAgICAgIG1bMTFd
ICo9IC0xOworICAgICAgICB0aGlzLl9tYXJrQXNVcGRhdGVkKCk7CisgICAgfTsKKyAgICAvLyBT
dGF0aWNzCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGFuIGFycmF5Cisg
ICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIHNvdXJjZSBhcnJheQorICAgICAqIEBwYXJh
bSBvZmZzZXQgZGVmaW5lcyBhbiBvZmZzZXQgaW4gdGhlIHNvdXJjZSBhcnJheQorICAgICAqIEBy
ZXR1cm5zIGEgbmV3IE1hdHJpeCBzZXQgZnJvbSB0aGUgc3RhcnRpbmcgaW5kZXggb2YgdGhlIGdp
dmVuIGFycmF5CisgICAgICovCisgICAgTWF0cml4LkZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJh
eSwgb2Zmc2V0KSB7CisgICAgICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgeyBvZmZzZXQgPSAw
OyB9CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgTWF0cml4KCk7CisgICAgICAgIE1hdHJpeC5G
cm9tQXJyYXlUb1JlZihhcnJheSwgb2Zmc2V0LCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ29weSB0aGUgY29udGVudCBvZiBhbiBhcnJh
eSBpbnRvIGEgZ2l2ZW4gbWF0cml4CisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIHNv
dXJjZSBhcnJheQorICAgICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyBhbiBvZmZzZXQgaW4gdGhl
IHNvdXJjZSBhcnJheQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1h
dHJpeAorICAgICAqLworICAgIE1hdHJpeC5Gcm9tQXJyYXlUb1JlZiA9IGZ1bmN0aW9uIChhcnJh
eSwgb2Zmc2V0LCByZXN1bHQpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IDE2OyBpbmRleCsrKSB7CisgICAgICAgICAgICByZXN1bHQuX21baW5kZXhdID0gYXJyYXlbaW5k
ZXggKyBvZmZzZXRdOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5fbWFya0FzVXBkYXRlZCgp
OworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcmVzIGFuIGFycmF5IGludG8gYSBtYXRyaXgg
YWZ0ZXIgaGF2aW5nIG11bHRpcGxpZWQgZWFjaCBjb21wb25lbnQgYnkgYSBnaXZlbiBmYWN0b3IK
KyAgICAgKiBAcGFyYW0gYXJyYXkgZGVmaW5lcyB0aGUgc291cmNlIGFycmF5CisgICAgICogQHBh
cmFtIG9mZnNldCBkZWZpbmVzIHRoZSBvZmZzZXQgaW4gdGhlIHNvdXJjZSBhcnJheQorICAgICAq
IEBwYXJhbSBzY2FsZSBkZWZpbmVzIHRoZSBzY2FsaW5nIGZhY3RvcgorICAgICAqIEBwYXJhbSBy
ZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5Gcm9t
RmxvYXQzMkFycmF5VG9SZWZTY2FsZWQgPSBmdW5jdGlvbiAoYXJyYXksIG9mZnNldCwgc2NhbGUs
IHJlc3VsdCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgMTY7IGluZGV4
KyspIHsKKyAgICAgICAgICAgIHJlc3VsdC5fbVtpbmRleF0gPSBhcnJheVtpbmRleCArIG9mZnNl
dF0gKiBzY2FsZTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuX21hcmtBc1VwZGF0ZWQoKTsK
KyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXgsICJJZGVudGl0eVJlYWRP
bmx5IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhbiBpZGVudGl0eSBtYXRyaXgg
dGhhdCBtdXN0IG5vdCBiZSB1cGRhdGVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBNYXRyaXguX2lkZW50aXR5UmVhZE9ubHk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFN0b3JlcyBhIGxpc3Qgb2YgdmFsdWVz
ICgxNikgaW5zaWRlIGEgZ2l2ZW4gbWF0cml4CisgICAgICogQHBhcmFtIGluaXRpYWxNMTEgZGVm
aW5lcyAxc3QgdmFsdWUgb2YgMXN0IHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTEyIGRlZmlu
ZXMgMm5kIHZhbHVlIG9mIDFzdCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0xMyBkZWZpbmVz
IDNyZCB2YWx1ZSBvZiAxc3Qgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMTQgZGVmaW5lcyA0
dGggdmFsdWUgb2YgMXN0IHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTIxIGRlZmluZXMgMXN0
IHZhbHVlIG9mIDJuZCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0yMiBkZWZpbmVzIDJuZCB2
YWx1ZSBvZiAybmQgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMjMgZGVmaW5lcyAzcmQgdmFs
dWUgb2YgMm5kIHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTI0IGRlZmluZXMgNHRoIHZhbHVl
IG9mIDJuZCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0zMSBkZWZpbmVzIDFzdCB2YWx1ZSBv
ZiAzcmQgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMzIgZGVmaW5lcyAybmQgdmFsdWUgb2Yg
M3JkIHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTMzIGRlZmluZXMgM3JkIHZhbHVlIG9mIDNy
ZCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0zNCBkZWZpbmVzIDR0aCB2YWx1ZSBvZiAzcmQg
cm93CisgICAgICogQHBhcmFtIGluaXRpYWxNNDEgZGVmaW5lcyAxc3QgdmFsdWUgb2YgNHRoIHJv
dworICAgICAqIEBwYXJhbSBpbml0aWFsTTQyIGRlZmluZXMgMm5kIHZhbHVlIG9mIDR0aCByb3cK
KyAgICAgKiBAcGFyYW0gaW5pdGlhbE00MyBkZWZpbmVzIDNyZCB2YWx1ZSBvZiA0dGggcm93Cisg
ICAgICogQHBhcmFtIGluaXRpYWxNNDQgZGVmaW5lcyA0dGggdmFsdWUgb2YgNHRoIHJvdworICAg
ICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAg
IE1hdHJpeC5Gcm9tVmFsdWVzVG9SZWYgPSBmdW5jdGlvbiAoaW5pdGlhbE0xMSwgaW5pdGlhbE0x
MiwgaW5pdGlhbE0xMywgaW5pdGlhbE0xNCwgaW5pdGlhbE0yMSwgaW5pdGlhbE0yMiwgaW5pdGlh
bE0yMywgaW5pdGlhbE0yNCwgaW5pdGlhbE0zMSwgaW5pdGlhbE0zMiwgaW5pdGlhbE0zMywgaW5p
dGlhbE0zNCwgaW5pdGlhbE00MSwgaW5pdGlhbE00MiwgaW5pdGlhbE00MywgaW5pdGlhbE00NCwg
cmVzdWx0KSB7CisgICAgICAgIHZhciBtID0gcmVzdWx0Ll9tOworICAgICAgICBtWzBdID0gaW5p
dGlhbE0xMTsKKyAgICAgICAgbVsxXSA9IGluaXRpYWxNMTI7CisgICAgICAgIG1bMl0gPSBpbml0
aWFsTTEzOworICAgICAgICBtWzNdID0gaW5pdGlhbE0xNDsKKyAgICAgICAgbVs0XSA9IGluaXRp
YWxNMjE7CisgICAgICAgIG1bNV0gPSBpbml0aWFsTTIyOworICAgICAgICBtWzZdID0gaW5pdGlh
bE0yMzsKKyAgICAgICAgbVs3XSA9IGluaXRpYWxNMjQ7CisgICAgICAgIG1bOF0gPSBpbml0aWFs
TTMxOworICAgICAgICBtWzldID0gaW5pdGlhbE0zMjsKKyAgICAgICAgbVsxMF0gPSBpbml0aWFs
TTMzOworICAgICAgICBtWzExXSA9IGluaXRpYWxNMzQ7CisgICAgICAgIG1bMTJdID0gaW5pdGlh
bE00MTsKKyAgICAgICAgbVsxM10gPSBpbml0aWFsTTQyOworICAgICAgICBtWzE0XSA9IGluaXRp
YWxNNDM7CisgICAgICAgIG1bMTVdID0gaW5pdGlhbE00NDsKKyAgICAgICAgcmVzdWx0Ll9tYXJr
QXNVcGRhdGVkKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIG5ldyBtYXRyaXgg
ZnJvbSBhIGxpc3Qgb2YgdmFsdWVzICgxNikKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0xMSBkZWZp
bmVzIDFzdCB2YWx1ZSBvZiAxc3Qgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMTIgZGVmaW5l
cyAybmQgdmFsdWUgb2YgMXN0IHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTEzIGRlZmluZXMg
M3JkIHZhbHVlIG9mIDFzdCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0xNCBkZWZpbmVzIDR0
aCB2YWx1ZSBvZiAxc3Qgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMjEgZGVmaW5lcyAxc3Qg
dmFsdWUgb2YgMm5kIHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTIyIGRlZmluZXMgMm5kIHZh
bHVlIG9mIDJuZCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0yMyBkZWZpbmVzIDNyZCB2YWx1
ZSBvZiAybmQgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMjQgZGVmaW5lcyA0dGggdmFsdWUg
b2YgMm5kIHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTMxIGRlZmluZXMgMXN0IHZhbHVlIG9m
IDNyZCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0zMiBkZWZpbmVzIDJuZCB2YWx1ZSBvZiAz
cmQgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMzMgZGVmaW5lcyAzcmQgdmFsdWUgb2YgM3Jk
IHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTM0IGRlZmluZXMgNHRoIHZhbHVlIG9mIDNyZCBy
b3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE00MSBkZWZpbmVzIDFzdCB2YWx1ZSBvZiA0dGggcm93
CisgICAgICogQHBhcmFtIGluaXRpYWxNNDIgZGVmaW5lcyAybmQgdmFsdWUgb2YgNHRoIHJvdwor
ICAgICAqIEBwYXJhbSBpbml0aWFsTTQzIGRlZmluZXMgM3JkIHZhbHVlIG9mIDR0aCByb3cKKyAg
ICAgKiBAcGFyYW0gaW5pdGlhbE00NCBkZWZpbmVzIDR0aCB2YWx1ZSBvZiA0dGggcm93CisgICAg
ICogQHJldHVybnMgdGhlIG5ldyBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguRnJvbVZhbHVl
cyA9IGZ1bmN0aW9uIChpbml0aWFsTTExLCBpbml0aWFsTTEyLCBpbml0aWFsTTEzLCBpbml0aWFs
TTE0LCBpbml0aWFsTTIxLCBpbml0aWFsTTIyLCBpbml0aWFsTTIzLCBpbml0aWFsTTI0LCBpbml0
aWFsTTMxLCBpbml0aWFsTTMyLCBpbml0aWFsTTMzLCBpbml0aWFsTTM0LCBpbml0aWFsTTQxLCBp
bml0aWFsTTQyLCBpbml0aWFsTTQzLCBpbml0aWFsTTQ0KSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBuZXcgTWF0cml4KCk7CisgICAgICAgIHZhciBtID0gcmVzdWx0Ll9tOworICAgICAgICBtWzBd
ID0gaW5pdGlhbE0xMTsKKyAgICAgICAgbVsxXSA9IGluaXRpYWxNMTI7CisgICAgICAgIG1bMl0g
PSBpbml0aWFsTTEzOworICAgICAgICBtWzNdID0gaW5pdGlhbE0xNDsKKyAgICAgICAgbVs0XSA9
IGluaXRpYWxNMjE7CisgICAgICAgIG1bNV0gPSBpbml0aWFsTTIyOworICAgICAgICBtWzZdID0g
aW5pdGlhbE0yMzsKKyAgICAgICAgbVs3XSA9IGluaXRpYWxNMjQ7CisgICAgICAgIG1bOF0gPSBp
bml0aWFsTTMxOworICAgICAgICBtWzldID0gaW5pdGlhbE0zMjsKKyAgICAgICAgbVsxMF0gPSBp
bml0aWFsTTMzOworICAgICAgICBtWzExXSA9IGluaXRpYWxNMzQ7CisgICAgICAgIG1bMTJdID0g
aW5pdGlhbE00MTsKKyAgICAgICAgbVsxM10gPSBpbml0aWFsTTQyOworICAgICAgICBtWzE0XSA9
IGluaXRpYWxNNDM7CisgICAgICAgIG1bMTVdID0gaW5pdGlhbE00NDsKKyAgICAgICAgcmVzdWx0
Ll9tYXJrQXNVcGRhdGVkKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IG1hdHJpeCBjb21wb3NlZCBieSBtZXJnaW5nIHNjYWxl
ICh2ZWN0b3IzKSwgcm90YXRpb24gKHF1YXRlcm5pb24pIGFuZCB0cmFuc2xhdGlvbiAodmVjdG9y
MykKKyAgICAgKiBAcGFyYW0gc2NhbGUgZGVmaW5lcyB0aGUgc2NhbGUgdmVjdG9yMworICAgICAq
IEBwYXJhbSByb3RhdGlvbiBkZWZpbmVzIHRoZSByb3RhdGlvbiBxdWF0ZXJuaW9uCisgICAgICog
QHBhcmFtIHRyYW5zbGF0aW9uIGRlZmluZXMgdGhlIHRyYW5zbGF0aW9uIHZlY3RvcjMKKyAgICAg
KiBAcmV0dXJucyBhIG5ldyBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguQ29tcG9zZSA9IGZ1
bmN0aW9uIChzY2FsZSwgcm90YXRpb24sIHRyYW5zbGF0aW9uKSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBuZXcgTWF0cml4KCk7CisgICAgICAgIE1hdHJpeC5Db21wb3NlVG9SZWYoc2NhbGUsIHJv
dGF0aW9uLCB0cmFuc2xhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNldHMgYSBtYXRyaXggdG8gYSB2YWx1ZSBjb21wb3NlZCBi
eSBtZXJnaW5nIHNjYWxlICh2ZWN0b3IzKSwgcm90YXRpb24gKHF1YXRlcm5pb24pIGFuZCB0cmFu
c2xhdGlvbiAodmVjdG9yMykKKyAgICAgKiBAcGFyYW0gc2NhbGUgZGVmaW5lcyB0aGUgc2NhbGUg
dmVjdG9yMworICAgICAqIEBwYXJhbSByb3RhdGlvbiBkZWZpbmVzIHRoZSByb3RhdGlvbiBxdWF0
ZXJuaW9uCisgICAgICogQHBhcmFtIHRyYW5zbGF0aW9uIGRlZmluZXMgdGhlIHRyYW5zbGF0aW9u
IHZlY3RvcjMKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBtYXRyaXgK
KyAgICAgKi8KKyAgICBNYXRyaXguQ29tcG9zZVRvUmVmID0gZnVuY3Rpb24gKHNjYWxlLCByb3Rh
dGlvbiwgdHJhbnNsYXRpb24sIHJlc3VsdCkgeworICAgICAgICB2YXIgbSA9IHJlc3VsdC5fbTsK
KyAgICAgICAgdmFyIHggPSByb3RhdGlvbi54LCB5ID0gcm90YXRpb24ueSwgeiA9IHJvdGF0aW9u
LnosIHcgPSByb3RhdGlvbi53OworICAgICAgICB2YXIgeDIgPSB4ICsgeCwgeTIgPSB5ICsgeSwg
ejIgPSB6ICsgejsKKyAgICAgICAgdmFyIHh4ID0geCAqIHgyLCB4eSA9IHggKiB5MiwgeHogPSB4
ICogejI7CisgICAgICAgIHZhciB5eSA9IHkgKiB5MiwgeXogPSB5ICogejIsIHp6ID0geiAqIHoy
OworICAgICAgICB2YXIgd3ggPSB3ICogeDIsIHd5ID0gdyAqIHkyLCB3eiA9IHcgKiB6MjsKKyAg
ICAgICAgdmFyIHN4ID0gc2NhbGUueCwgc3kgPSBzY2FsZS55LCBzeiA9IHNjYWxlLno7CisgICAg
ICAgIG1bMF0gPSAoMSAtICh5eSArIHp6KSkgKiBzeDsKKyAgICAgICAgbVsxXSA9ICh4eSArIHd6
KSAqIHN4OworICAgICAgICBtWzJdID0gKHh6IC0gd3kpICogc3g7CisgICAgICAgIG1bM10gPSAw
OworICAgICAgICBtWzRdID0gKHh5IC0gd3opICogc3k7CisgICAgICAgIG1bNV0gPSAoMSAtICh4
eCArIHp6KSkgKiBzeTsKKyAgICAgICAgbVs2XSA9ICh5eiArIHd4KSAqIHN5OworICAgICAgICBt
WzddID0gMDsKKyAgICAgICAgbVs4XSA9ICh4eiArIHd5KSAqIHN6OworICAgICAgICBtWzldID0g
KHl6IC0gd3gpICogc3o7CisgICAgICAgIG1bMTBdID0gKDEgLSAoeHggKyB5eSkpICogc3o7Cisg
ICAgICAgIG1bMTFdID0gMDsKKyAgICAgICAgbVsxMl0gPSB0cmFuc2xhdGlvbi54OworICAgICAg
ICBtWzEzXSA9IHRyYW5zbGF0aW9uLnk7CisgICAgICAgIG1bMTRdID0gdHJhbnNsYXRpb24uejsK
KyAgICAgICAgbVsxNV0gPSAxOworICAgICAgICByZXN1bHQuX21hcmtBc1VwZGF0ZWQoKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0cml4CisgICAg
ICogQHJldHVybnMgYSBuZXcgaWRlbnRpdHkgbWF0cml4CisgICAgICovCisgICAgTWF0cml4Lklk
ZW50aXR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaWRlbnRpdHkgPSBNYXRyaXguRnJv
bVZhbHVlcygxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAsIDAuMCwgMC4wLCAwLjAs
IDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjApOworICAgICAgICBpZGVudGl0eS5fdXBkYXRl
SWRlbnRpdHlTdGF0dXModHJ1ZSk7CisgICAgICAgIHJldHVybiBpZGVudGl0eTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0cml4IGFuZCBzdG9yZXMg
dGhlIHJlc3VsdCBpbiBhIGdpdmVuIG1hdHJpeAorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5l
cyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5JZGVudGl0eVRvUmVmID0g
ZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKDEuMCwg
MC4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAsIDAu
MCwgMC4wLCAwLjAsIDEuMCwgcmVzdWx0KTsKKyAgICAgICAgcmVzdWx0Ll91cGRhdGVJZGVudGl0
eVN0YXR1cyh0cnVlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgemVy
byBtYXRyaXgKKyAgICAgKiBAcmV0dXJucyBhIG5ldyB6ZXJvIG1hdHJpeAorICAgICAqLworICAg
IE1hdHJpeC5aZXJvID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgemVybyA9IE1hdHJpeC5G
cm9tVmFsdWVzKDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAu
MCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCk7CisgICAgICAgIHplcm8uX3VwZGF0ZUlk
ZW50aXR5U3RhdHVzKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHplcm87CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHJvdGF0aW9uIG1hdHJpeCBmb3IgImFuZ2xlIiByYWRp
YW5zIGFyb3VuZCB0aGUgWCBheGlzCisgICAgICogQHBhcmFtIGFuZ2xlIGRlZmluZXMgdGhlIGFu
Z2xlIChpbiByYWRpYW5zKSB0byB1c2UKKyAgICAgKiBAcmV0dXJuIHRoZSBuZXcgbWF0cml4Cisg
ICAgICovCisgICAgTWF0cml4LlJvdGF0aW9uWCA9IGZ1bmN0aW9uIChhbmdsZSkgeworICAgICAg
ICB2YXIgcmVzdWx0ID0gbmV3IE1hdHJpeCgpOworICAgICAgICBNYXRyaXguUm90YXRpb25YVG9S
ZWYoYW5nbGUsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IG1hdHJpeCBhcyB0aGUgaW52ZXJ0IG9mIGEgZ2l2ZW4g
bWF0cml4CisgICAgICogQHBhcmFtIHNvdXJjZSBkZWZpbmVzIHRoZSBzb3VyY2UgbWF0cml4Cisg
ICAgICogQHJldHVybnMgdGhlIG5ldyBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguSW52ZXJ0
ID0gZnVuY3Rpb24gKHNvdXJjZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IE1hdHJpeCgp
OworICAgICAgICBzb3VyY2UuaW52ZXJ0VG9SZWYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgcm90YXRpb24gbWF0
cml4IGZvciAiYW5nbGUiIHJhZGlhbnMgYXJvdW5kIHRoZSBYIGF4aXMgYW5kIHN0b3JlcyBpdCBp
biBhIGdpdmVuIG1hdHJpeAorICAgICAqIEBwYXJhbSBhbmdsZSBkZWZpbmVzIHRoZSBhbmdsZSAo
aW4gcmFkaWFucykgdG8gdXNlCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJn
ZXQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LlJvdGF0aW9uWFRvUmVmID0gZnVuY3Rpb24g
KGFuZ2xlLCByZXN1bHQpIHsKKyAgICAgICAgdmFyIHMgPSBNYXRoLnNpbihhbmdsZSk7CisgICAg
ICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpOworICAgICAgICBNYXRyaXguRnJvbVZhbHVlc1Rv
UmVmKDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCBjLCBzLCAwLjAsIDAuMCwgLXMsIGMsIDAuMCwg
MC4wLCAwLjAsIDAuMCwgMS4wLCByZXN1bHQpOworICAgICAgICByZXN1bHQuX3VwZGF0ZUlkZW50
aXR5U3RhdHVzKGMgPT09IDEgJiYgcyA9PT0gMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgbmV3IHJvdGF0aW9uIG1hdHJpeCBmb3IgImFuZ2xlIiByYWRpYW5zIGFyb3VuZCB0
aGUgWSBheGlzCisgICAgICogQHBhcmFtIGFuZ2xlIGRlZmluZXMgdGhlIGFuZ2xlIChpbiByYWRp
YW5zKSB0byB1c2UKKyAgICAgKiBAcmV0dXJuIHRoZSBuZXcgbWF0cml4CisgICAgICovCisgICAg
TWF0cml4LlJvdGF0aW9uWSA9IGZ1bmN0aW9uIChhbmdsZSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gbmV3IE1hdHJpeCgpOworICAgICAgICBNYXRyaXguUm90YXRpb25ZVG9SZWYoYW5nbGUsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgbmV3IHJvdGF0aW9uIG1hdHJpeCBmb3IgImFuZ2xlIiByYWRpYW5zIGFyb3VuZCB0
aGUgWSBheGlzIGFuZCBzdG9yZXMgaXQgaW4gYSBnaXZlbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0g
YW5nbGUgZGVmaW5lcyB0aGUgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHVzZQorICAgICAqIEBwYXJh
bSByZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5S
b3RhdGlvbllUb1JlZiA9IGZ1bmN0aW9uIChhbmdsZSwgcmVzdWx0KSB7CisgICAgICAgIHZhciBz
ID0gTWF0aC5zaW4oYW5nbGUpOworICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTsKKyAg
ICAgICAgTWF0cml4LkZyb21WYWx1ZXNUb1JlZihjLCAwLjAsIC1zLCAwLjAsIDAuMCwgMS4wLCAw
LjAsIDAuMCwgcywgMC4wLCBjLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMCwgcmVzdWx0KTsKKyAg
ICAgICAgcmVzdWx0Ll91cGRhdGVJZGVudGl0eVN0YXR1cyhjID09PSAxICYmIHMgPT09IDApOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBtYXRyaXggZm9y
ICJhbmdsZSIgcmFkaWFucyBhcm91bmQgdGhlIFogYXhpcworICAgICAqIEBwYXJhbSBhbmdsZSBk
ZWZpbmVzIHRoZSBhbmdsZSAoaW4gcmFkaWFucykgdG8gdXNlCisgICAgICogQHJldHVybiB0aGUg
bmV3IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5Sb3RhdGlvblogPSBmdW5jdGlvbiAoYW5n
bGUpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBNYXRyaXgoKTsKKyAgICAgICAgTWF0cml4
LlJvdGF0aW9uWlRvUmVmKGFuZ2xlLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBtYXRyaXggZm9y
ICJhbmdsZSIgcmFkaWFucyBhcm91bmQgdGhlIFogYXhpcyBhbmQgc3RvcmVzIGl0IGluIGEgZ2l2
ZW4gbWF0cml4CisgICAgICogQHBhcmFtIGFuZ2xlIGRlZmluZXMgdGhlIGFuZ2xlIChpbiByYWRp
YW5zKSB0byB1c2UKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBtYXRy
aXgKKyAgICAgKi8KKyAgICBNYXRyaXguUm90YXRpb25aVG9SZWYgPSBmdW5jdGlvbiAoYW5nbGUs
IHJlc3VsdCkgeworICAgICAgICB2YXIgcyA9IE1hdGguc2luKGFuZ2xlKTsKKyAgICAgICAgdmFy
IGMgPSBNYXRoLmNvcyhhbmdsZSk7CisgICAgICAgIE1hdHJpeC5Gcm9tVmFsdWVzVG9SZWYoYywg
cywgMC4wLCAwLjAsIC1zLCBjLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMCwgMC4wLCAwLjAsIDAu
MCwgMC4wLCAxLjAsIHJlc3VsdCk7CisgICAgICAgIHJlc3VsdC5fdXBkYXRlSWRlbnRpdHlTdGF0
dXMoYyA9PT0gMSAmJiBzID09PSAwKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgcm90YXRpb24gbWF0cml4IGZvciAiYW5nbGUiIHJhZGlhbnMgYXJvdW5kIHRoZSBnaXZl
biBheGlzCisgICAgICogQHBhcmFtIGF4aXMgZGVmaW5lcyB0aGUgYXhpcyB0byB1c2UKKyAgICAg
KiBAcGFyYW0gYW5nbGUgZGVmaW5lcyB0aGUgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHVzZQorICAg
ICAqIEByZXR1cm4gdGhlIG5ldyBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguUm90YXRpb25B
eGlzID0gZnVuY3Rpb24gKGF4aXMsIGFuZ2xlKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcg
TWF0cml4KCk7CisgICAgICAgIE1hdHJpeC5Sb3RhdGlvbkF4aXNUb1JlZihheGlzLCBhbmdsZSwg
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgcm90YXRpb24gbWF0cml4IGZvciAiYW5nbGUiIHJhZGlhbnMgYXJvdW5k
IHRoZSBnaXZlbiBheGlzIGFuZCBzdG9yZXMgaXQgaW4gYSBnaXZlbiBtYXRyaXgKKyAgICAgKiBA
cGFyYW0gYXhpcyBkZWZpbmVzIHRoZSBheGlzIHRvIHVzZQorICAgICAqIEBwYXJhbSBhbmdsZSBk
ZWZpbmVzIHRoZSBhbmdsZSAoaW4gcmFkaWFucykgdG8gdXNlCisgICAgICogQHBhcmFtIHJlc3Vs
dCBkZWZpbmVzIHRoZSB0YXJnZXQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LlJvdGF0aW9u
QXhpc1RvUmVmID0gZnVuY3Rpb24gKGF4aXMsIGFuZ2xlLCByZXN1bHQpIHsKKyAgICAgICAgdmFy
IHMgPSBNYXRoLnNpbigtYW5nbGUpOworICAgICAgICB2YXIgYyA9IE1hdGguY29zKC1hbmdsZSk7
CisgICAgICAgIHZhciBjMSA9IDEgLSBjOworICAgICAgICBheGlzLm5vcm1hbGl6ZSgpOworICAg
ICAgICB2YXIgbSA9IHJlc3VsdC5fbTsKKyAgICAgICAgbVswXSA9IChheGlzLnggKiBheGlzLngp
ICogYzEgKyBjOworICAgICAgICBtWzFdID0gKGF4aXMueCAqIGF4aXMueSkgKiBjMSAtIChheGlz
LnogKiBzKTsKKyAgICAgICAgbVsyXSA9IChheGlzLnggKiBheGlzLnopICogYzEgKyAoYXhpcy55
ICogcyk7CisgICAgICAgIG1bM10gPSAwLjA7CisgICAgICAgIG1bNF0gPSAoYXhpcy55ICogYXhp
cy54KSAqIGMxICsgKGF4aXMueiAqIHMpOworICAgICAgICBtWzVdID0gKGF4aXMueSAqIGF4aXMu
eSkgKiBjMSArIGM7CisgICAgICAgIG1bNl0gPSAoYXhpcy55ICogYXhpcy56KSAqIGMxIC0gKGF4
aXMueCAqIHMpOworICAgICAgICBtWzddID0gMC4wOworICAgICAgICBtWzhdID0gKGF4aXMueiAq
IGF4aXMueCkgKiBjMSAtIChheGlzLnkgKiBzKTsKKyAgICAgICAgbVs5XSA9IChheGlzLnogKiBh
eGlzLnkpICogYzEgKyAoYXhpcy54ICogcyk7CisgICAgICAgIG1bMTBdID0gKGF4aXMueiAqIGF4
aXMueikgKiBjMSArIGM7CisgICAgICAgIG1bMTFdID0gMC4wOworICAgICAgICBtWzEyXSA9IDAu
MDsKKyAgICAgICAgbVsxM10gPSAwLjA7CisgICAgICAgIG1bMTRdID0gMC4wOworICAgICAgICBt
WzE1XSA9IDEuMDsKKyAgICAgICAgcmVzdWx0Ll9tYXJrQXNVcGRhdGVkKCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBUYWtlcyBub3JtYWxpc2VkIHZlY3RvcnMgYW5kIHJldHVybnMgYSByb3Rh
dGlvbiBtYXRyaXggdG8gYWxpZ24gImZyb20iIHdpdGggInRvIi4KKyAgICAgKiBUYWtlbiBmcm9t
IGh0dHA6Ly93d3cuaXF1aWxlemxlcy5vcmcvd3d3L2FydGljbGVzL25vYWNvcy9ub2Fjb3MuaHRt
CisgICAgICogQHBhcmFtIGZyb20gZGVmaW5lcyB0aGUgdmVjdG9yIHRvIGFsaWduCisgICAgICog
QHBhcmFtIHRvIGRlZmluZXMgdGhlIHZlY3RvciB0byBhbGlnbiB0bworICAgICAqIEBwYXJhbSBy
ZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5Sb3Rh
dGlvbkFsaWduVG9SZWYgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHJlc3VsdCkgeworICAgICAgICB2
YXIgdiA9IFZlY3RvcjMuQ3Jvc3ModG8sIGZyb20pOworICAgICAgICB2YXIgYyA9IFZlY3RvcjMu
RG90KHRvLCBmcm9tKTsKKyAgICAgICAgdmFyIGsgPSAxIC8gKDEgKyBjKTsKKyAgICAgICAgdmFy
IG0gPSByZXN1bHQuX207CisgICAgICAgIG1bMF0gPSB2LnggKiB2LnggKiBrICsgYzsKKyAgICAg
ICAgbVsxXSA9IHYueSAqIHYueCAqIGsgLSB2Lno7CisgICAgICAgIG1bMl0gPSB2LnogKiB2Lngg
KiBrICsgdi55OworICAgICAgICBtWzNdID0gMDsKKyAgICAgICAgbVs0XSA9IHYueCAqIHYueSAq
IGsgKyB2Lno7CisgICAgICAgIG1bNV0gPSB2LnkgKiB2LnkgKiBrICsgYzsKKyAgICAgICAgbVs2
XSA9IHYueiAqIHYueSAqIGsgLSB2Lng7CisgICAgICAgIG1bN10gPSAwOworICAgICAgICBtWzhd
ID0gdi54ICogdi56ICogayAtIHYueTsKKyAgICAgICAgbVs5XSA9IHYueSAqIHYueiAqIGsgKyB2
Lng7CisgICAgICAgIG1bMTBdID0gdi56ICogdi56ICogayArIGM7CisgICAgICAgIG1bMTFdID0g
MDsKKyAgICAgICAgbVsxMl0gPSAwOworICAgICAgICBtWzEzXSA9IDA7CisgICAgICAgIG1bMTRd
ID0gMDsKKyAgICAgICAgbVsxNV0gPSAxOworICAgICAgICByZXN1bHQuX21hcmtBc1VwZGF0ZWQo
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSByb3RhdGlvbiBtYXRyaXgKKyAg
ICAgKiBAcGFyYW0geWF3IGRlZmluZXMgdGhlIHlhdyBhbmdsZSBpbiByYWRpYW5zIChZIGF4aXMp
CisgICAgICogQHBhcmFtIHBpdGNoIGRlZmluZXMgdGhlIHBpdGNoIGFuZ2xlIGluIHJhZGlhbnMg
KFggYXhpcykKKyAgICAgKiBAcGFyYW0gcm9sbCBkZWZpbmVzIHRoZSByb2xsIGFuZ2xlIGluIHJh
ZGlhbnMgKFggYXhpcykKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IHJvdGF0aW9uIG1hdHJpeAor
ICAgICAqLworICAgIE1hdHJpeC5Sb3RhdGlvbllhd1BpdGNoUm9sbCA9IGZ1bmN0aW9uICh5YXcs
IHBpdGNoLCByb2xsKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgTWF0cml4KCk7CisgICAg
ICAgIE1hdHJpeC5Sb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKHlhdywgcGl0Y2gsIHJvbGwsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgcm90YXRpb24gbWF0cml4IGFuZCBzdG9yZXMgaXQgaW4gYSBnaXZlbiBtYXRyaXgK
KyAgICAgKiBAcGFyYW0geWF3IGRlZmluZXMgdGhlIHlhdyBhbmdsZSBpbiByYWRpYW5zIChZIGF4
aXMpCisgICAgICogQHBhcmFtIHBpdGNoIGRlZmluZXMgdGhlIHBpdGNoIGFuZ2xlIGluIHJhZGlh
bnMgKFggYXhpcykKKyAgICAgKiBAcGFyYW0gcm9sbCBkZWZpbmVzIHRoZSByb2xsIGFuZ2xlIGlu
IHJhZGlhbnMgKFggYXhpcykKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdl
dCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZiA9
IGZ1bmN0aW9uICh5YXcsIHBpdGNoLCByb2xsLCByZXN1bHQpIHsKKyAgICAgICAgUXVhdGVybmlv
bi5Sb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKHlhdywgcGl0Y2gsIHJvbGwsIE1hdGhUbXAuUXVh
dGVybmlvblswXSk7CisgICAgICAgIE1hdGhUbXAuUXVhdGVybmlvblswXS50b1JvdGF0aW9uTWF0
cml4KHJlc3VsdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgc2NhbGluZyBt
YXRyaXgKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSBzY2FsZSBmYWN0b3Igb24gWCBheGlz
CisgICAgICogQHBhcmFtIHkgZGVmaW5lcyB0aGUgc2NhbGUgZmFjdG9yIG9uIFkgYXhpcworICAg
ICAqIEBwYXJhbSB6IGRlZmluZXMgdGhlIHNjYWxlIGZhY3RvciBvbiBaIGF4aXMKKyAgICAgKiBA
cmV0dXJucyB0aGUgbmV3IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5TY2FsaW5nID0gZnVu
Y3Rpb24gKHgsIHksIHopIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBNYXRyaXgoKTsKKyAg
ICAgICAgTWF0cml4LlNjYWxpbmdUb1JlZih4LCB5LCB6LCByZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHNjYWxpbmcgbWF0
cml4IGFuZCBzdG9yZXMgaXQgaW4gYSBnaXZlbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0geCBkZWZp
bmVzIHRoZSBzY2FsZSBmYWN0b3Igb24gWCBheGlzCisgICAgICogQHBhcmFtIHkgZGVmaW5lcyB0
aGUgc2NhbGUgZmFjdG9yIG9uIFkgYXhpcworICAgICAqIEBwYXJhbSB6IGRlZmluZXMgdGhlIHNj
YWxlIGZhY3RvciBvbiBaIGF4aXMKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRh
cmdldCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguU2NhbGluZ1RvUmVmID0gZnVuY3Rpb24g
KHgsIHksIHosIHJlc3VsdCkgeworICAgICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKHgsIDAu
MCwgMC4wLCAwLjAsIDAuMCwgeSwgMC4wLCAwLjAsIDAuMCwgMC4wLCB6LCAwLjAsIDAuMCwgMC4w
LCAwLjAsIDEuMCwgcmVzdWx0KTsKKyAgICAgICAgcmVzdWx0Ll91cGRhdGVJZGVudGl0eVN0YXR1
cyh4ID09PSAxICYmIHkgPT09IDEgJiYgeiA9PT0gMSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgdHJhbnNsYXRpb24gbWF0cml4CisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0
aGUgdHJhbnNsYXRpb24gb24gWCBheGlzCisgICAgICogQHBhcmFtIHkgZGVmaW5lcyB0aGUgdHJh
bnNsYXRpb24gb24gWSBheGlzCisgICAgICogQHBhcmFtIHogZGVmaW5lcyB0aGUgdHJhbnNsYXRp
b25vbiBaIGF4aXMKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IG1hdHJpeAorICAgICAqLworICAg
IE1hdHJpeC5UcmFuc2xhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBuZXcgTWF0cml4KCk7CisgICAgICAgIE1hdHJpeC5UcmFuc2xhdGlvblRvUmVmKHgs
IHksIHosIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgdHJhbnNsYXRpb24gbWF0cml4IGFuZCBzdG9yZXMgaXQgaW4gYSBn
aXZlbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB0cmFuc2xhdGlvbiBvbiBY
IGF4aXMKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB0cmFuc2xhdGlvbiBvbiBZIGF4aXMK
KyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB0cmFuc2xhdGlvbm9uIFogYXhpcworICAgICAq
IEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1h
dHJpeC5UcmFuc2xhdGlvblRvUmVmID0gZnVuY3Rpb24gKHgsIHksIHosIHJlc3VsdCkgeworICAg
ICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjAs
IDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAsIHgsIHksIHosIDEuMCwgcmVzdWx0KTsKKyAg
ICAgICAgcmVzdWx0Ll91cGRhdGVJZGVudGl0eVN0YXR1cyh4ID09PSAwICYmIHkgPT09IDAgJiYg
eiA9PT0gMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IE1hdHJpeCB3
aG9zZSB2YWx1ZXMgYXJlIHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWVzIGZvciAiZ3JhZGllbnQiIChm
bG9hdCkgYmV0d2VlbiB0aGUgb25lcyBvZiB0aGUgbWF0cmljZXMgInN0YXJ0VmFsdWUiIGFuZCAi
ZW5kVmFsdWUiLgorICAgICAqIEBwYXJhbSBzdGFydFZhbHVlIGRlZmluZXMgdGhlIHN0YXJ0IHZh
bHVlCisgICAgICogQHBhcmFtIGVuZFZhbHVlIGRlZmluZXMgdGhlIGVuZCB2YWx1ZQorICAgICAq
IEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCBmYWN0b3IKKyAgICAgKiBAcmV0
dXJucyB0aGUgbmV3IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5MZXJwID0gZnVuY3Rpb24g
KHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBncmFkaWVudCkgeworICAgICAgICB2YXIgcmVzdWx0ID0g
bmV3IE1hdHJpeCgpOworICAgICAgICBNYXRyaXguTGVycFRvUmVmKHN0YXJ0VmFsdWUsIGVuZFZh
bHVlLCBncmFkaWVudCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNldCB0aGUgZ2l2ZW4gbWF0cml4ICJyZXN1bHQiIGFzIHRoZSBpbnRl
cnBvbGF0ZWQgdmFsdWVzIGZvciAiZ3JhZGllbnQiIChmbG9hdCkgYmV0d2VlbiB0aGUgb25lcyBv
ZiB0aGUgbWF0cmljZXMgInN0YXJ0VmFsdWUiIGFuZCAiZW5kVmFsdWUiLgorICAgICAqIEBwYXJh
bSBzdGFydFZhbHVlIGRlZmluZXMgdGhlIHN0YXJ0IHZhbHVlCisgICAgICogQHBhcmFtIGVuZFZh
bHVlIGRlZmluZXMgdGhlIGVuZCB2YWx1ZQorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVz
IHRoZSBncmFkaWVudCBmYWN0b3IKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIE1h
dHJpeCBvYmplY3Qgd2hlcmUgdG8gc3RvcmUgZGF0YQorICAgICAqLworICAgIE1hdHJpeC5MZXJw
VG9SZWYgPSBmdW5jdGlvbiAoc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50LCByZXN1bHQp
IHsKKyAgICAgICAgdmFyIHJlc3VsdE0gPSByZXN1bHQuX207CisgICAgICAgIHZhciBzdGFydE0g
PSBzdGFydFZhbHVlLm07CisgICAgICAgIHZhciBlbmRNID0gZW5kVmFsdWUubTsKKyAgICAgICAg
Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IDE2OyBpbmRleCsrKSB7CisgICAgICAgICAgICBy
ZXN1bHRNW2luZGV4XSA9IHN0YXJ0TVtpbmRleF0gKiAoMS4wIC0gZ3JhZGllbnQpICsgZW5kTVtp
bmRleF0gKiBncmFkaWVudDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuX21hcmtBc1VwZGF0
ZWQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJ1aWxkcyBhIG5ldyBtYXRyaXggd2hvc2Ug
dmFsdWVzIGFyZSBjb21wdXRlZCBieToKKyAgICAgKiAqIGRlY29tcG9zaW5nIHRoZSB0aGUgInN0
YXJ0VmFsdWUiIGFuZCAiZW5kVmFsdWUiIG1hdHJpY2VzIGludG8gdGhlaXIgcmVzcGVjdGl2ZSBz
Y2FsZSwgcm90YXRpb24gYW5kIHRyYW5zbGF0aW9uIG1hdHJpY2VzCisgICAgICogKiBpbnRlcnBv
bGF0aW5nIGZvciAiZ3JhZGllbnQiIChmbG9hdCkgdGhlIHZhbHVlcyBiZXR3ZWVuIGVhY2ggb2Yg
dGhlc2UgZGVjb21wb3NlZCBtYXRyaWNlcyBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgdGhlIGVuZAor
ICAgICAqICogcmVjb21wb3NpbmcgYSBuZXcgbWF0cml4IGZyb20gdGhlc2UgMyBpbnRlcnBvbGF0
ZWQgc2NhbGUsIHJvdGF0aW9uIGFuZCB0cmFuc2xhdGlvbiBtYXRyaWNlcworICAgICAqIEBwYXJh
bSBzdGFydFZhbHVlIGRlZmluZXMgdGhlIGZpcnN0IG1hdHJpeAorICAgICAqIEBwYXJhbSBlbmRW
YWx1ZSBkZWZpbmVzIHRoZSBzZWNvbmQgbWF0cml4CisgICAgICogQHBhcmFtIGdyYWRpZW50IGRl
ZmluZXMgdGhlIGdyYWRpZW50IGJldHdlZW4gdGhlIHR3byBtYXRyaWNlcworICAgICAqIEByZXR1
cm5zIHRoZSBuZXcgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LkRlY29tcG9zZUxlcnAgPSBm
dW5jdGlvbiAoc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KSB7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBuZXcgTWF0cml4KCk7CisgICAgICAgIE1hdHJpeC5EZWNvbXBvc2VMZXJwVG9SZWYo
c3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50LCByZXN1bHQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIGEgbWF0cml4IHRvIHZhbHVl
cyB3aGljaCBhcmUgY29tcHV0ZWQgYnk6CisgICAgICogKiBkZWNvbXBvc2luZyB0aGUgdGhlICJz
dGFydFZhbHVlIiBhbmQgImVuZFZhbHVlIiBtYXRyaWNlcyBpbnRvIHRoZWlyIHJlc3BlY3RpdmUg
c2NhbGUsIHJvdGF0aW9uIGFuZCB0cmFuc2xhdGlvbiBtYXRyaWNlcworICAgICAqICogaW50ZXJw
b2xhdGluZyBmb3IgImdyYWRpZW50IiAoZmxvYXQpIHRoZSB2YWx1ZXMgYmV0d2VlbiBlYWNoIG9m
IHRoZXNlIGRlY29tcG9zZWQgbWF0cmljZXMgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIHRoZSBlbmQK
KyAgICAgKiAqIHJlY29tcG9zaW5nIGEgbmV3IG1hdHJpeCBmcm9tIHRoZXNlIDMgaW50ZXJwb2xh
dGVkIHNjYWxlLCByb3RhdGlvbiBhbmQgdHJhbnNsYXRpb24gbWF0cmljZXMKKyAgICAgKiBAcGFy
YW0gc3RhcnRWYWx1ZSBkZWZpbmVzIHRoZSBmaXJzdCBtYXRyaXgKKyAgICAgKiBAcGFyYW0gZW5k
VmFsdWUgZGVmaW5lcyB0aGUgc2Vjb25kIG1hdHJpeAorICAgICAqIEBwYXJhbSBncmFkaWVudCBk
ZWZpbmVzIHRoZSBncmFkaWVudCBiZXR3ZWVuIHRoZSB0d28gbWF0cmljZXMKKyAgICAgKiBAcGFy
YW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXgu
RGVjb21wb3NlTGVycFRvUmVmID0gZnVuY3Rpb24gKHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBncmFk
aWVudCwgcmVzdWx0KSB7CisgICAgICAgIHZhciBzdGFydFNjYWxlID0gTWF0aFRtcC5WZWN0b3Iz
WzBdOworICAgICAgICB2YXIgc3RhcnRSb3RhdGlvbiA9IE1hdGhUbXAuUXVhdGVybmlvblswXTsK
KyAgICAgICAgdmFyIHN0YXJ0VHJhbnNsYXRpb24gPSBNYXRoVG1wLlZlY3RvcjNbMV07CisgICAg
ICAgIHN0YXJ0VmFsdWUuZGVjb21wb3NlKHN0YXJ0U2NhbGUsIHN0YXJ0Um90YXRpb24sIHN0YXJ0
VHJhbnNsYXRpb24pOworICAgICAgICB2YXIgZW5kU2NhbGUgPSBNYXRoVG1wLlZlY3RvcjNbMl07
CisgICAgICAgIHZhciBlbmRSb3RhdGlvbiA9IE1hdGhUbXAuUXVhdGVybmlvblsxXTsKKyAgICAg
ICAgdmFyIGVuZFRyYW5zbGF0aW9uID0gTWF0aFRtcC5WZWN0b3IzWzNdOworICAgICAgICBlbmRW
YWx1ZS5kZWNvbXBvc2UoZW5kU2NhbGUsIGVuZFJvdGF0aW9uLCBlbmRUcmFuc2xhdGlvbik7Cisg
ICAgICAgIHZhciByZXN1bHRTY2FsZSA9IE1hdGhUbXAuVmVjdG9yM1s0XTsKKyAgICAgICAgVmVj
dG9yMy5MZXJwVG9SZWYoc3RhcnRTY2FsZSwgZW5kU2NhbGUsIGdyYWRpZW50LCByZXN1bHRTY2Fs
ZSk7CisgICAgICAgIHZhciByZXN1bHRSb3RhdGlvbiA9IE1hdGhUbXAuUXVhdGVybmlvblsyXTsK
KyAgICAgICAgUXVhdGVybmlvbi5TbGVycFRvUmVmKHN0YXJ0Um90YXRpb24sIGVuZFJvdGF0aW9u
LCBncmFkaWVudCwgcmVzdWx0Um90YXRpb24pOworICAgICAgICB2YXIgcmVzdWx0VHJhbnNsYXRp
b24gPSBNYXRoVG1wLlZlY3RvcjNbNV07CisgICAgICAgIFZlY3RvcjMuTGVycFRvUmVmKHN0YXJ0
VHJhbnNsYXRpb24sIGVuZFRyYW5zbGF0aW9uLCBncmFkaWVudCwgcmVzdWx0VHJhbnNsYXRpb24p
OworICAgICAgICBNYXRyaXguQ29tcG9zZVRvUmVmKHJlc3VsdFNjYWxlLCByZXN1bHRSb3RhdGlv
biwgcmVzdWx0VHJhbnNsYXRpb24sIHJlc3VsdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIGEgbmV3IHJvdGF0aW9uIG1hdHJpeCB1c2VkIHRvIHJvdGF0ZSBhbiBlbnRpdHkgc28gYXMg
aXQgbG9va3MgYXQgdGhlIHRhcmdldCB2ZWN0b3IzLCBmcm9tIHRoZSBleWUgdmVjdG9yMyBwb3Np
dGlvbiwgdGhlIHVwIHZlY3RvcjMgYmVpbmcgb3JpZW50ZWQgbGlrZSAidXAiCisgICAgICogVGhp
cyBmdW5jdGlvbiB3b3JrcyBpbiBsZWZ0IGhhbmRlZCBtb2RlCisgICAgICogQHBhcmFtIGV5ZSBk
ZWZpbmVzIHRoZSBmaW5hbCBwb3NpdGlvbiBvZiB0aGUgZW50aXR5CisgICAgICogQHBhcmFtIHRh
cmdldCBkZWZpbmVzIHdoZXJlIHRoZSBlbnRpdHkgc2hvdWxkIGxvb2sgYXQKKyAgICAgKiBAcGFy
YW0gdXAgZGVmaW5lcyB0aGUgdXAgdmVjdG9yIGZvciB0aGUgZW50aXR5CisgICAgICogQHJldHVy
bnMgdGhlIG5ldyBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguTG9va0F0TEggPSBmdW5jdGlv
biAoZXllLCB0YXJnZXQsIHVwKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgTWF0cml4KCk7
CisgICAgICAgIE1hdHJpeC5Mb29rQXRMSFRvUmVmKGV5ZSwgdGFyZ2V0LCB1cCwgcmVzdWx0KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IGdpdmVuICJyZXN1bHQiIE1hdHJpeCB0byBhIHJvdGF0aW9uIG1hdHJpeCB1c2VkIHRvIHJvdGF0
ZSBhbiBlbnRpdHkgc28gdGhhdCBpdCBsb29rcyBhdCB0aGUgdGFyZ2V0IHZlY3RvcjMsIGZyb20g
dGhlIGV5ZSB2ZWN0b3IzIHBvc2l0aW9uLCB0aGUgdXAgdmVjdG9yMyBiZWluZyBvcmllbnRlZCBs
aWtlICJ1cCIuCisgICAgICogVGhpcyBmdW5jdGlvbiB3b3JrcyBpbiBsZWZ0IGhhbmRlZCBtb2Rl
CisgICAgICogQHBhcmFtIGV5ZSBkZWZpbmVzIHRoZSBmaW5hbCBwb3NpdGlvbiBvZiB0aGUgZW50
aXR5CisgICAgICogQHBhcmFtIHRhcmdldCBkZWZpbmVzIHdoZXJlIHRoZSBlbnRpdHkgc2hvdWxk
IGxvb2sgYXQKKyAgICAgKiBAcGFyYW0gdXAgZGVmaW5lcyB0aGUgdXAgdmVjdG9yIGZvciB0aGUg
ZW50aXR5CisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQgbWF0cml4Cisg
ICAgICovCisgICAgTWF0cml4Lkxvb2tBdExIVG9SZWYgPSBmdW5jdGlvbiAoZXllLCB0YXJnZXQs
IHVwLCByZXN1bHQpIHsKKyAgICAgICAgdmFyIHhBeGlzID0gTWF0aFRtcC5WZWN0b3IzWzBdOwor
ICAgICAgICB2YXIgeUF4aXMgPSBNYXRoVG1wLlZlY3RvcjNbMV07CisgICAgICAgIHZhciB6QXhp
cyA9IE1hdGhUbXAuVmVjdG9yM1syXTsKKyAgICAgICAgLy8gWiBheGlzCisgICAgICAgIHRhcmdl
dC5zdWJ0cmFjdFRvUmVmKGV5ZSwgekF4aXMpOworICAgICAgICB6QXhpcy5ub3JtYWxpemUoKTsK
KyAgICAgICAgLy8gWCBheGlzCisgICAgICAgIFZlY3RvcjMuQ3Jvc3NUb1JlZih1cCwgekF4aXMs
IHhBeGlzKTsKKyAgICAgICAgdmFyIHhTcXVhcmVMZW5ndGggPSB4QXhpcy5sZW5ndGhTcXVhcmVk
KCk7CisgICAgICAgIGlmICh4U3F1YXJlTGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICB4QXhp
cy54ID0gMS4wOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgeEF4aXMu
bm9ybWFsaXplRnJvbUxlbmd0aChNYXRoLnNxcnQoeFNxdWFyZUxlbmd0aCkpOworICAgICAgICB9
CisgICAgICAgIC8vIFkgYXhpcworICAgICAgICBWZWN0b3IzLkNyb3NzVG9SZWYoekF4aXMsIHhB
eGlzLCB5QXhpcyk7CisgICAgICAgIHlBeGlzLm5vcm1hbGl6ZSgpOworICAgICAgICAvLyBFeWUg
YW5nbGVzCisgICAgICAgIHZhciBleCA9IC1WZWN0b3IzLkRvdCh4QXhpcywgZXllKTsKKyAgICAg
ICAgdmFyIGV5ID0gLVZlY3RvcjMuRG90KHlBeGlzLCBleWUpOworICAgICAgICB2YXIgZXogPSAt
VmVjdG9yMy5Eb3QoekF4aXMsIGV5ZSk7CisgICAgICAgIE1hdHJpeC5Gcm9tVmFsdWVzVG9SZWYo
eEF4aXMueCwgeUF4aXMueCwgekF4aXMueCwgMC4wLCB4QXhpcy55LCB5QXhpcy55LCB6QXhpcy55
LCAwLjAsIHhBeGlzLnosIHlBeGlzLnosIHpBeGlzLnosIDAuMCwgZXgsIGV5LCBleiwgMS4wLCBy
ZXN1bHQpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIG5ldyByb3RhdGlvbiBtYXRy
aXggdXNlZCB0byByb3RhdGUgYW4gZW50aXR5IHNvIGFzIGl0IGxvb2tzIGF0IHRoZSB0YXJnZXQg
dmVjdG9yMywgZnJvbSB0aGUgZXllIHZlY3RvcjMgcG9zaXRpb24sIHRoZSB1cCB2ZWN0b3IzIGJl
aW5nIG9yaWVudGVkIGxpa2UgInVwIgorICAgICAqIFRoaXMgZnVuY3Rpb24gd29ya3MgaW4gcmln
aHQgaGFuZGVkIG1vZGUKKyAgICAgKiBAcGFyYW0gZXllIGRlZmluZXMgdGhlIGZpbmFsIHBvc2l0
aW9uIG9mIHRoZSBlbnRpdHkKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgd2hlcmUgdGhl
IGVudGl0eSBzaG91bGQgbG9vayBhdAorICAgICAqIEBwYXJhbSB1cCBkZWZpbmVzIHRoZSB1cCB2
ZWN0b3IgZm9yIHRoZSBlbnRpdHkKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IG1hdHJpeAorICAg
ICAqLworICAgIE1hdHJpeC5Mb29rQXRSSCA9IGZ1bmN0aW9uIChleWUsIHRhcmdldCwgdXApIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBNYXRyaXgoKTsKKyAgICAgICAgTWF0cml4Lkxvb2tB
dFJIVG9SZWYoZXllLCB0YXJnZXQsIHVwLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2ZW4gInJlc3VsdCIgTWF0cml4
IHRvIGEgcm90YXRpb24gbWF0cml4IHVzZWQgdG8gcm90YXRlIGFuIGVudGl0eSBzbyB0aGF0IGl0
IGxvb2tzIGF0IHRoZSB0YXJnZXQgdmVjdG9yMywgZnJvbSB0aGUgZXllIHZlY3RvcjMgcG9zaXRp
b24sIHRoZSB1cCB2ZWN0b3IzIGJlaW5nIG9yaWVudGVkIGxpa2UgInVwIi4KKyAgICAgKiBUaGlz
IGZ1bmN0aW9uIHdvcmtzIGluIHJpZ2h0IGhhbmRlZCBtb2RlCisgICAgICogQHBhcmFtIGV5ZSBk
ZWZpbmVzIHRoZSBmaW5hbCBwb3NpdGlvbiBvZiB0aGUgZW50aXR5CisgICAgICogQHBhcmFtIHRh
cmdldCBkZWZpbmVzIHdoZXJlIHRoZSBlbnRpdHkgc2hvdWxkIGxvb2sgYXQKKyAgICAgKiBAcGFy
YW0gdXAgZGVmaW5lcyB0aGUgdXAgdmVjdG9yIGZvciB0aGUgZW50aXR5CisgICAgICogQHBhcmFt
IHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4Lkxv
b2tBdFJIVG9SZWYgPSBmdW5jdGlvbiAoZXllLCB0YXJnZXQsIHVwLCByZXN1bHQpIHsKKyAgICAg
ICAgdmFyIHhBeGlzID0gTWF0aFRtcC5WZWN0b3IzWzBdOworICAgICAgICB2YXIgeUF4aXMgPSBN
YXRoVG1wLlZlY3RvcjNbMV07CisgICAgICAgIHZhciB6QXhpcyA9IE1hdGhUbXAuVmVjdG9yM1sy
XTsKKyAgICAgICAgLy8gWiBheGlzCisgICAgICAgIGV5ZS5zdWJ0cmFjdFRvUmVmKHRhcmdldCwg
ekF4aXMpOworICAgICAgICB6QXhpcy5ub3JtYWxpemUoKTsKKyAgICAgICAgLy8gWCBheGlzCisg
ICAgICAgIFZlY3RvcjMuQ3Jvc3NUb1JlZih1cCwgekF4aXMsIHhBeGlzKTsKKyAgICAgICAgdmFy
IHhTcXVhcmVMZW5ndGggPSB4QXhpcy5sZW5ndGhTcXVhcmVkKCk7CisgICAgICAgIGlmICh4U3F1
YXJlTGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICB4QXhpcy54ID0gMS4wOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgeEF4aXMubm9ybWFsaXplRnJvbUxlbmd0aChN
YXRoLnNxcnQoeFNxdWFyZUxlbmd0aCkpOworICAgICAgICB9CisgICAgICAgIC8vIFkgYXhpcwor
ICAgICAgICBWZWN0b3IzLkNyb3NzVG9SZWYoekF4aXMsIHhBeGlzLCB5QXhpcyk7CisgICAgICAg
IHlBeGlzLm5vcm1hbGl6ZSgpOworICAgICAgICAvLyBFeWUgYW5nbGVzCisgICAgICAgIHZhciBl
eCA9IC1WZWN0b3IzLkRvdCh4QXhpcywgZXllKTsKKyAgICAgICAgdmFyIGV5ID0gLVZlY3RvcjMu
RG90KHlBeGlzLCBleWUpOworICAgICAgICB2YXIgZXogPSAtVmVjdG9yMy5Eb3QoekF4aXMsIGV5
ZSk7CisgICAgICAgIE1hdHJpeC5Gcm9tVmFsdWVzVG9SZWYoeEF4aXMueCwgeUF4aXMueCwgekF4
aXMueCwgMC4wLCB4QXhpcy55LCB5QXhpcy55LCB6QXhpcy55LCAwLjAsIHhBeGlzLnosIHlBeGlz
LnosIHpBeGlzLnosIDAuMCwgZXgsIGV5LCBleiwgMS4wLCByZXN1bHQpOworICAgIH07CisgICAg
LyoqCisgICAgICogQ3JlYXRlIGEgbGVmdC1oYW5kZWQgb3J0aG9ncmFwaGljIHByb2plY3Rpb24g
bWF0cml4CisgICAgICogQHBhcmFtIHdpZHRoIGRlZmluZXMgdGhlIHZpZXdwb3J0IHdpZHRoCisg
ICAgICogQHBhcmFtIGhlaWdodCBkZWZpbmVzIHRoZSB2aWV3cG9ydCBoZWlnaHQKKyAgICAgKiBA
cGFyYW0gem5lYXIgZGVmaW5lcyB0aGUgbmVhciBjbGlwIHBsYW5lCisgICAgICogQHBhcmFtIHpm
YXIgZGVmaW5lcyB0aGUgZmFyIGNsaXAgcGxhbmUKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBtYXRy
aXggYXMgYSBsZWZ0LWhhbmRlZCBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBtYXRyaXgKKyAgICAg
Ki8KKyAgICBNYXRyaXguT3J0aG9MSCA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB6bmVhciwg
emZhcikgeworICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpOworICAgICAgICBNYXRy
aXguT3J0aG9MSFRvUmVmKHdpZHRoLCBoZWlnaHQsIHpuZWFyLCB6ZmFyLCBtYXRyaXgpOworICAg
ICAgICByZXR1cm4gbWF0cml4OworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcmUgYSBsZWZ0
LWhhbmRlZCBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiB0byBhIGdpdmVuIG1hdHJpeAorICAgICAq
IEBwYXJhbSB3aWR0aCBkZWZpbmVzIHRoZSB2aWV3cG9ydCB3aWR0aAorICAgICAqIEBwYXJhbSBo
ZWlnaHQgZGVmaW5lcyB0aGUgdmlld3BvcnQgaGVpZ2h0CisgICAgICogQHBhcmFtIHpuZWFyIGRl
ZmluZXMgdGhlIG5lYXIgY2xpcCBwbGFuZQorICAgICAqIEBwYXJhbSB6ZmFyIGRlZmluZXMgdGhl
IGZhciBjbGlwIHBsYW5lCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQg
bWF0cml4CisgICAgICovCisgICAgTWF0cml4Lk9ydGhvTEhUb1JlZiA9IGZ1bmN0aW9uICh3aWR0
aCwgaGVpZ2h0LCB6bmVhciwgemZhciwgcmVzdWx0KSB7CisgICAgICAgIHZhciBuID0gem5lYXI7
CisgICAgICAgIHZhciBmID0gemZhcjsKKyAgICAgICAgdmFyIGEgPSAyLjAgLyB3aWR0aDsKKyAg
ICAgICAgdmFyIGIgPSAyLjAgLyBoZWlnaHQ7CisgICAgICAgIHZhciBjID0gMi4wIC8gKGYgLSBu
KTsKKyAgICAgICAgdmFyIGQgPSAtKGYgKyBuKSAvIChmIC0gbik7CisgICAgICAgIE1hdHJpeC5G
cm9tVmFsdWVzVG9SZWYoYSwgMC4wLCAwLjAsIDAuMCwgMC4wLCBiLCAwLjAsIDAuMCwgMC4wLCAw
LjAsIGMsIDAuMCwgMC4wLCAwLjAsIGQsIDEuMCwgcmVzdWx0KTsKKyAgICAgICAgcmVzdWx0Ll91
cGRhdGVJZGVudGl0eVN0YXR1cyhhID09PSAxICYmIGIgPT09IDEgJiYgYyA9PT0gMSAmJiBkID09
PSAwKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGxlZnQtaGFuZGVkIG9ydGhv
Z3JhcGhpYyBwcm9qZWN0aW9uIG1hdHJpeAorICAgICAqIEBwYXJhbSBsZWZ0IGRlZmluZXMgdGhl
IHZpZXdwb3J0IGxlZnQgY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSByaWdodCBkZWZpbmVzIHRo
ZSB2aWV3cG9ydCByaWdodCBjb29yZGluYXRlCisgICAgICogQHBhcmFtIGJvdHRvbSBkZWZpbmVz
IHRoZSB2aWV3cG9ydCBib3R0b20gY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSB0b3AgZGVmaW5l
cyB0aGUgdmlld3BvcnQgdG9wIGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gem5lYXIgZGVmaW5l
cyB0aGUgbmVhciBjbGlwIHBsYW5lCisgICAgICogQHBhcmFtIHpmYXIgZGVmaW5lcyB0aGUgZmFy
IGNsaXAgcGxhbmUKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBtYXRyaXggYXMgYSBsZWZ0LWhhbmRl
ZCBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguT3J0
aG9PZmZDZW50ZXJMSCA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIHpuZWFy
LCB6ZmFyKSB7CisgICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7CisgICAgICAgIE1h
dHJpeC5PcnRob09mZkNlbnRlckxIVG9SZWYobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCB6bmVh
ciwgemZhciwgbWF0cml4KTsKKyAgICAgICAgcmV0dXJuIG1hdHJpeDsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFN0b3JlcyBhIGxlZnQtaGFuZGVkIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIGlu
dG8gYSBnaXZlbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0gbGVmdCBkZWZpbmVzIHRoZSB2aWV3cG9y
dCBsZWZ0IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gcmlnaHQgZGVmaW5lcyB0aGUgdmlld3Bv
cnQgcmlnaHQgY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSBib3R0b20gZGVmaW5lcyB0aGUgdmll
d3BvcnQgYm90dG9tIGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gdG9wIGRlZmluZXMgdGhlIHZp
ZXdwb3J0IHRvcCBjb29yZGluYXRlCisgICAgICogQHBhcmFtIHpuZWFyIGRlZmluZXMgdGhlIG5l
YXIgY2xpcCBwbGFuZQorICAgICAqIEBwYXJhbSB6ZmFyIGRlZmluZXMgdGhlIGZhciBjbGlwIHBs
YW5lCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQgbWF0cml4CisgICAg
ICovCisgICAgTWF0cml4Lk9ydGhvT2ZmQ2VudGVyTEhUb1JlZiA9IGZ1bmN0aW9uIChsZWZ0LCBy
aWdodCwgYm90dG9tLCB0b3AsIHpuZWFyLCB6ZmFyLCByZXN1bHQpIHsKKyAgICAgICAgdmFyIG4g
PSB6bmVhcjsKKyAgICAgICAgdmFyIGYgPSB6ZmFyOworICAgICAgICB2YXIgYSA9IDIuMCAvIChy
aWdodCAtIGxlZnQpOworICAgICAgICB2YXIgYiA9IDIuMCAvICh0b3AgLSBib3R0b20pOworICAg
ICAgICB2YXIgYyA9IDIuMCAvIChmIC0gbik7CisgICAgICAgIHZhciBkID0gLShmICsgbikgLyAo
ZiAtIG4pOworICAgICAgICB2YXIgaTAgPSAobGVmdCArIHJpZ2h0KSAvIChsZWZ0IC0gcmlnaHQp
OworICAgICAgICB2YXIgaTEgPSAodG9wICsgYm90dG9tKSAvIChib3R0b20gLSB0b3ApOworICAg
ICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKGEsIDAuMCwgMC4wLCAwLjAsIDAuMCwgYiwgMC4w
LCAwLjAsIDAuMCwgMC4wLCBjLCAwLjAsIGkwLCBpMSwgZCwgMS4wLCByZXN1bHQpOworICAgICAg
ICByZXN1bHQuX21hcmtBc1VwZGF0ZWQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0
ZXMgYSByaWdodC1oYW5kZWQgb3J0aG9ncmFwaGljIHByb2plY3Rpb24gbWF0cml4CisgICAgICog
QHBhcmFtIGxlZnQgZGVmaW5lcyB0aGUgdmlld3BvcnQgbGVmdCBjb29yZGluYXRlCisgICAgICog
QHBhcmFtIHJpZ2h0IGRlZmluZXMgdGhlIHZpZXdwb3J0IHJpZ2h0IGNvb3JkaW5hdGUKKyAgICAg
KiBAcGFyYW0gYm90dG9tIGRlZmluZXMgdGhlIHZpZXdwb3J0IGJvdHRvbSBjb29yZGluYXRlCisg
ICAgICogQHBhcmFtIHRvcCBkZWZpbmVzIHRoZSB2aWV3cG9ydCB0b3AgY29vcmRpbmF0ZQorICAg
ICAqIEBwYXJhbSB6bmVhciBkZWZpbmVzIHRoZSBuZWFyIGNsaXAgcGxhbmUKKyAgICAgKiBAcGFy
YW0gemZhciBkZWZpbmVzIHRoZSBmYXIgY2xpcCBwbGFuZQorICAgICAqIEByZXR1cm5zIGEgbmV3
IG1hdHJpeCBhcyBhIHJpZ2h0LWhhbmRlZCBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBtYXRyaXgK
KyAgICAgKi8KKyAgICBNYXRyaXguT3J0aG9PZmZDZW50ZXJSSCA9IGZ1bmN0aW9uIChsZWZ0LCBy
aWdodCwgYm90dG9tLCB0b3AsIHpuZWFyLCB6ZmFyKSB7CisgICAgICAgIHZhciBtYXRyaXggPSBu
ZXcgTWF0cml4KCk7CisgICAgICAgIE1hdHJpeC5PcnRob09mZkNlbnRlclJIVG9SZWYobGVmdCwg
cmlnaHQsIGJvdHRvbSwgdG9wLCB6bmVhciwgemZhciwgbWF0cml4KTsKKyAgICAgICAgcmV0dXJu
IG1hdHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFN0b3JlcyBhIHJpZ2h0LWhhbmRlZCBv
cnRob2dyYXBoaWMgcHJvamVjdGlvbiBpbnRvIGEgZ2l2ZW4gbWF0cml4CisgICAgICogQHBhcmFt
IGxlZnQgZGVmaW5lcyB0aGUgdmlld3BvcnQgbGVmdCBjb29yZGluYXRlCisgICAgICogQHBhcmFt
IHJpZ2h0IGRlZmluZXMgdGhlIHZpZXdwb3J0IHJpZ2h0IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFy
YW0gYm90dG9tIGRlZmluZXMgdGhlIHZpZXdwb3J0IGJvdHRvbSBjb29yZGluYXRlCisgICAgICog
QHBhcmFtIHRvcCBkZWZpbmVzIHRoZSB2aWV3cG9ydCB0b3AgY29vcmRpbmF0ZQorICAgICAqIEBw
YXJhbSB6bmVhciBkZWZpbmVzIHRoZSBuZWFyIGNsaXAgcGxhbmUKKyAgICAgKiBAcGFyYW0gemZh
ciBkZWZpbmVzIHRoZSBmYXIgY2xpcCBwbGFuZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5l
cyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5PcnRob09mZkNlbnRlclJI
VG9SZWYgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCB6bmVhciwgemZhciwg
cmVzdWx0KSB7CisgICAgICAgIE1hdHJpeC5PcnRob09mZkNlbnRlckxIVG9SZWYobGVmdCwgcmln
aHQsIGJvdHRvbSwgdG9wLCB6bmVhciwgemZhciwgcmVzdWx0KTsKKyAgICAgICAgcmVzdWx0Ll9t
WzEwXSAqPSAtMTsgLy8gTm8gbmVlZCB0byBjYWxsIF9tYXJrQXNVcGRhdGVkIGFzIHByZXZpb3Vz
IGZ1bmN0aW9uIGFscmVhZHkgY2FsbGVkIGl0IGFuZCBsZXQgX2lzSWRlbnRpdHlEaXJ0eSB0byB0
cnVlCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbGVmdC1oYW5kZWQgcGVyc3Bl
Y3RpdmUgcHJvamVjdGlvbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0gd2lkdGggZGVmaW5lcyB0aGUg
dmlld3BvcnQgd2lkdGgKKyAgICAgKiBAcGFyYW0gaGVpZ2h0IGRlZmluZXMgdGhlIHZpZXdwb3J0
IGhlaWdodAorICAgICAqIEBwYXJhbSB6bmVhciBkZWZpbmVzIHRoZSBuZWFyIGNsaXAgcGxhbmUK
KyAgICAgKiBAcGFyYW0gemZhciBkZWZpbmVzIHRoZSBmYXIgY2xpcCBwbGFuZQorICAgICAqIEBy
ZXR1cm5zIGEgbmV3IG1hdHJpeCBhcyBhIGxlZnQtaGFuZGVkIHBlcnNwZWN0aXZlIHByb2plY3Rp
b24gbWF0cml4CisgICAgICovCisgICAgTWF0cml4LlBlcnNwZWN0aXZlTEggPSBmdW5jdGlvbiAo
d2lkdGgsIGhlaWdodCwgem5lYXIsIHpmYXIpIHsKKyAgICAgICAgdmFyIG1hdHJpeCA9IG5ldyBN
YXRyaXgoKTsKKyAgICAgICAgdmFyIG4gPSB6bmVhcjsKKyAgICAgICAgdmFyIGYgPSB6ZmFyOwor
ICAgICAgICB2YXIgYSA9IDIuMCAqIG4gLyB3aWR0aDsKKyAgICAgICAgdmFyIGIgPSAyLjAgKiBu
IC8gaGVpZ2h0OworICAgICAgICB2YXIgYyA9IChmICsgbikgLyAoZiAtIG4pOworICAgICAgICB2
YXIgZCA9IC0yLjAgKiBmICogbiAvIChmIC0gbik7CisgICAgICAgIE1hdHJpeC5Gcm9tVmFsdWVz
VG9SZWYoYSwgMC4wLCAwLjAsIDAuMCwgMC4wLCBiLCAwLjAsIDAuMCwgMC4wLCAwLjAsIGMsIDEu
MCwgMC4wLCAwLjAsIGQsIDAuMCwgbWF0cml4KTsKKyAgICAgICAgbWF0cml4Ll91cGRhdGVJZGVu
dGl0eVN0YXR1cyhmYWxzZSk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbGVmdC1oYW5kZWQgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBt
YXRyaXgKKyAgICAgKiBAcGFyYW0gZm92IGRlZmluZXMgdGhlIGhvcml6b250YWwgZmllbGQgb2Yg
dmlldworICAgICAqIEBwYXJhbSBhc3BlY3QgZGVmaW5lcyB0aGUgYXNwZWN0IHJhdGlvCisgICAg
ICogQHBhcmFtIHpuZWFyIGRlZmluZXMgdGhlIG5lYXIgY2xpcCBwbGFuZQorICAgICAqIEBwYXJh
bSB6ZmFyIGRlZmluZXMgdGhlIGZhciBjbGlwIHBsYW5lCisgICAgICogQHJldHVybnMgYSBuZXcg
bWF0cml4IGFzIGEgbGVmdC1oYW5kZWQgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXgKKyAg
ICAgKi8KKyAgICBNYXRyaXguUGVyc3BlY3RpdmVGb3ZMSCA9IGZ1bmN0aW9uIChmb3YsIGFzcGVj
dCwgem5lYXIsIHpmYXIpIHsKKyAgICAgICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTsKKyAg
ICAgICAgTWF0cml4LlBlcnNwZWN0aXZlRm92TEhUb1JlZihmb3YsIGFzcGVjdCwgem5lYXIsIHpm
YXIsIG1hdHJpeCk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTdG9yZXMgYSBsZWZ0LWhhbmRlZCBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIGludG8gYSBn
aXZlbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0gZm92IGRlZmluZXMgdGhlIGhvcml6b250YWwgZmll
bGQgb2YgdmlldworICAgICAqIEBwYXJhbSBhc3BlY3QgZGVmaW5lcyB0aGUgYXNwZWN0IHJhdGlv
CisgICAgICogQHBhcmFtIHpuZWFyIGRlZmluZXMgdGhlIG5lYXIgY2xpcCBwbGFuZQorICAgICAq
IEBwYXJhbSB6ZmFyIGRlZmluZXMgdGhlIGZhciBjbGlwIHBsYW5lCisgICAgICogQHBhcmFtIHJl
c3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQgbWF0cml4CisgICAgICogQHBhcmFtIGlzVmVydGljYWxG
b3ZGaXhlZCBkZWZpbmVzIGl0IHRoZSBmb3YgaXMgdmVydGljYWxseSBmaXhlZCAoZGVmYXVsdCkg
b3IgaG9yaXpvbnRhbGx5CisgICAgICovCisgICAgTWF0cml4LlBlcnNwZWN0aXZlRm92TEhUb1Jl
ZiA9IGZ1bmN0aW9uIChmb3YsIGFzcGVjdCwgem5lYXIsIHpmYXIsIHJlc3VsdCwgaXNWZXJ0aWNh
bEZvdkZpeGVkKSB7CisgICAgICAgIGlmIChpc1ZlcnRpY2FsRm92Rml4ZWQgPT09IHZvaWQgMCkg
eyBpc1ZlcnRpY2FsRm92Rml4ZWQgPSB0cnVlOyB9CisgICAgICAgIHZhciBuID0gem5lYXI7Cisg
ICAgICAgIHZhciBmID0gemZhcjsKKyAgICAgICAgdmFyIHQgPSAxLjAgLyAoTWF0aC50YW4oZm92
ICogMC41KSk7CisgICAgICAgIHZhciBhID0gaXNWZXJ0aWNhbEZvdkZpeGVkID8gKHQgLyBhc3Bl
Y3QpIDogdDsKKyAgICAgICAgdmFyIGIgPSBpc1ZlcnRpY2FsRm92Rml4ZWQgPyB0IDogKHQgKiBh
c3BlY3QpOworICAgICAgICB2YXIgYyA9IChmICsgbikgLyAoZiAtIG4pOworICAgICAgICB2YXIg
ZCA9IC0yLjAgKiBmICogbiAvIChmIC0gbik7CisgICAgICAgIE1hdHJpeC5Gcm9tVmFsdWVzVG9S
ZWYoYSwgMC4wLCAwLjAsIDAuMCwgMC4wLCBiLCAwLjAsIDAuMCwgMC4wLCAwLjAsIGMsIDEuMCwg
MC4wLCAwLjAsIGQsIDAuMCwgcmVzdWx0KTsKKyAgICAgICAgcmVzdWx0Ll91cGRhdGVJZGVudGl0
eVN0YXR1cyhmYWxzZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcmlnaHQt
aGFuZGVkIHBlcnNwZWN0aXZlIHByb2plY3Rpb24gbWF0cml4CisgICAgICogQHBhcmFtIGZvdiBk
ZWZpbmVzIHRoZSBob3Jpem9udGFsIGZpZWxkIG9mIHZpZXcKKyAgICAgKiBAcGFyYW0gYXNwZWN0
IGRlZmluZXMgdGhlIGFzcGVjdCByYXRpbworICAgICAqIEBwYXJhbSB6bmVhciBkZWZpbmVzIHRo
ZSBuZWFyIGNsaXAgcGxhbmUKKyAgICAgKiBAcGFyYW0gemZhciBkZWZpbmVzIHRoZSBmYXIgY2xp
cCBwbGFuZQorICAgICAqIEByZXR1cm5zIGEgbmV3IG1hdHJpeCBhcyBhIHJpZ2h0LWhhbmRlZCBw
ZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5QZXJzcGVj
dGl2ZUZvdlJIID0gZnVuY3Rpb24gKGZvdiwgYXNwZWN0LCB6bmVhciwgemZhcikgeworICAgICAg
ICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpOworICAgICAgICBNYXRyaXguUGVyc3BlY3RpdmVG
b3ZSSFRvUmVmKGZvdiwgYXNwZWN0LCB6bmVhciwgemZhciwgbWF0cml4KTsKKyAgICAgICAgcmV0
dXJuIG1hdHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFN0b3JlcyBhIHJpZ2h0LWhhbmRl
ZCBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIGludG8gYSBnaXZlbiBtYXRyaXgKKyAgICAgKiBAcGFy
YW0gZm92IGRlZmluZXMgdGhlIGhvcml6b250YWwgZmllbGQgb2YgdmlldworICAgICAqIEBwYXJh
bSBhc3BlY3QgZGVmaW5lcyB0aGUgYXNwZWN0IHJhdGlvCisgICAgICogQHBhcmFtIHpuZWFyIGRl
ZmluZXMgdGhlIG5lYXIgY2xpcCBwbGFuZQorICAgICAqIEBwYXJhbSB6ZmFyIGRlZmluZXMgdGhl
IGZhciBjbGlwIHBsYW5lCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQg
bWF0cml4CisgICAgICogQHBhcmFtIGlzVmVydGljYWxGb3ZGaXhlZCBkZWZpbmVzIGl0IHRoZSBm
b3YgaXMgdmVydGljYWxseSBmaXhlZCAoZGVmYXVsdCkgb3IgaG9yaXpvbnRhbGx5CisgICAgICov
CisgICAgTWF0cml4LlBlcnNwZWN0aXZlRm92UkhUb1JlZiA9IGZ1bmN0aW9uIChmb3YsIGFzcGVj
dCwgem5lYXIsIHpmYXIsIHJlc3VsdCwgaXNWZXJ0aWNhbEZvdkZpeGVkKSB7CisgICAgICAgIC8v
YWx0ZXJuYXRpdmVseSB0aGlzIGNvdWxkIGJlIGV4cHJlc3NlZCBhczoKKyAgICAgICAgLy8gICAg
bSA9IFBlcnNwZWN0aXZlRm92TEhUb1JlZgorICAgICAgICAvLyAgICBtWzEwXSAqPSAtMS4wOwor
ICAgICAgICAvLyAgICBtWzExXSAqPSAtMS4wOworICAgICAgICBpZiAoaXNWZXJ0aWNhbEZvdkZp
eGVkID09PSB2b2lkIDApIHsgaXNWZXJ0aWNhbEZvdkZpeGVkID0gdHJ1ZTsgfQorICAgICAgICB2
YXIgbiA9IHpuZWFyOworICAgICAgICB2YXIgZiA9IHpmYXI7CisgICAgICAgIHZhciB0ID0gMS4w
IC8gKE1hdGgudGFuKGZvdiAqIDAuNSkpOworICAgICAgICB2YXIgYSA9IGlzVmVydGljYWxGb3ZG
aXhlZCA/ICh0IC8gYXNwZWN0KSA6IHQ7CisgICAgICAgIHZhciBiID0gaXNWZXJ0aWNhbEZvdkZp
eGVkID8gdCA6ICh0ICogYXNwZWN0KTsKKyAgICAgICAgdmFyIGMgPSAtKGYgKyBuKSAvIChmIC0g
bik7CisgICAgICAgIHZhciBkID0gLTIgKiBmICogbiAvIChmIC0gbik7CisgICAgICAgIE1hdHJp
eC5Gcm9tVmFsdWVzVG9SZWYoYSwgMC4wLCAwLjAsIDAuMCwgMC4wLCBiLCAwLjAsIDAuMCwgMC4w
LCAwLjAsIGMsIC0xLjAsIDAuMCwgMC4wLCBkLCAwLjAsIHJlc3VsdCk7CisgICAgICAgIHJlc3Vs
dC5fdXBkYXRlSWRlbnRpdHlTdGF0dXMoZmFsc2UpOworICAgIH07CisgICAgLyoqCisgICAgICog
U3RvcmVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBmb3IgV2ViVlIgaW5mbyBhIGdpdmVuIG1h
dHJpeAorICAgICAqIEBwYXJhbSBmb3YgZGVmaW5lcyB0aGUgZmllbGQgb2YgdmlldworICAgICAq
IEBwYXJhbSB6bmVhciBkZWZpbmVzIHRoZSBuZWFyIGNsaXAgcGxhbmUKKyAgICAgKiBAcGFyYW0g
emZhciBkZWZpbmVzIHRoZSBmYXIgY2xpcCBwbGFuZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVm
aW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqIEBwYXJhbSByaWdodEhhbmRlZCBkZWZpbmVz
IGlmIHRoZSBtYXRyaXggbXVzdCBiZSBpbiByaWdodC1oYW5kZWQgbW9kZSAoZmFsc2UgYnkgZGVm
YXVsdCkKKyAgICAgKi8KKyAgICBNYXRyaXguUGVyc3BlY3RpdmVGb3ZXZWJWUlRvUmVmID0gZnVu
Y3Rpb24gKGZvdiwgem5lYXIsIHpmYXIsIHJlc3VsdCwgcmlnaHRIYW5kZWQpIHsKKyAgICAgICAg
aWYgKHJpZ2h0SGFuZGVkID09PSB2b2lkIDApIHsgcmlnaHRIYW5kZWQgPSBmYWxzZTsgfQorICAg
ICAgICB2YXIgcmlnaHRIYW5kZWRGYWN0b3IgPSByaWdodEhhbmRlZCA/IC0xIDogMTsKKyAgICAg
ICAgdmFyIHVwVGFuID0gTWF0aC50YW4oZm92LnVwRGVncmVlcyAqIE1hdGguUEkgLyAxODAuMCk7
CisgICAgICAgIHZhciBkb3duVGFuID0gTWF0aC50YW4oZm92LmRvd25EZWdyZWVzICogTWF0aC5Q
SSAvIDE4MC4wKTsKKyAgICAgICAgdmFyIGxlZnRUYW4gPSBNYXRoLnRhbihmb3YubGVmdERlZ3Jl
ZXMgKiBNYXRoLlBJIC8gMTgwLjApOworICAgICAgICB2YXIgcmlnaHRUYW4gPSBNYXRoLnRhbihm
b3YucmlnaHREZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTsKKyAgICAgICAgdmFyIHhTY2FsZSA9
IDIuMCAvIChsZWZ0VGFuICsgcmlnaHRUYW4pOworICAgICAgICB2YXIgeVNjYWxlID0gMi4wIC8g
KHVwVGFuICsgZG93blRhbik7CisgICAgICAgIHZhciBtID0gcmVzdWx0Ll9tOworICAgICAgICBt
WzBdID0geFNjYWxlOworICAgICAgICBtWzFdID0gbVsyXSA9IG1bM10gPSBtWzRdID0gMC4wOwor
ICAgICAgICBtWzVdID0geVNjYWxlOworICAgICAgICBtWzZdID0gbVs3XSA9IDAuMDsKKyAgICAg
ICAgbVs4XSA9ICgobGVmdFRhbiAtIHJpZ2h0VGFuKSAqIHhTY2FsZSAqIDAuNSk7CisgICAgICAg
IG1bOV0gPSAtKCh1cFRhbiAtIGRvd25UYW4pICogeVNjYWxlICogMC41KTsKKyAgICAgICAgbVsx
MF0gPSAtemZhciAvICh6bmVhciAtIHpmYXIpOworICAgICAgICBtWzExXSA9IDEuMCAqIHJpZ2h0
SGFuZGVkRmFjdG9yOworICAgICAgICBtWzEyXSA9IG1bMTNdID0gbVsxNV0gPSAwLjA7CisgICAg
ICAgIG1bMTRdID0gLSgyLjAgKiB6ZmFyICogem5lYXIpIC8gKHpmYXIgLSB6bmVhcik7CisgICAg
ICAgIHJlc3VsdC5fbWFya0FzVXBkYXRlZCgpOworICAgIH07CisgICAgLyoqCisgICAgICogQ29t
cHV0ZXMgYSBjb21wbGV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0gdmll
d3BvcnQgZGVmaW5lcyB0aGUgdmlld3BvcnQgdG8gdXNlCisgICAgICogQHBhcmFtIHdvcmxkIGRl
ZmluZXMgdGhlIHdvcmxkIG1hdHJpeAorICAgICAqIEBwYXJhbSB2aWV3IGRlZmluZXMgdGhlIHZp
ZXcgbWF0cml4CisgICAgICogQHBhcmFtIHByb2plY3Rpb24gZGVmaW5lcyB0aGUgcHJvamVjdGlv
biBtYXRyaXgKKyAgICAgKiBAcGFyYW0gem1pbiBkZWZpbmVzIHRoZSBuZWFyIGNsaXAgcGxhbmUK
KyAgICAgKiBAcGFyYW0gem1heCBkZWZpbmVzIHRoZSBmYXIgY2xpcCBwbGFuZQorICAgICAqIEBy
ZXR1cm5zIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguR2V0
RmluYWxNYXRyaXggPSBmdW5jdGlvbiAodmlld3BvcnQsIHdvcmxkLCB2aWV3LCBwcm9qZWN0aW9u
LCB6bWluLCB6bWF4KSB7CisgICAgICAgIHZhciBjdyA9IHZpZXdwb3J0LndpZHRoOworICAgICAg
ICB2YXIgY2ggPSB2aWV3cG9ydC5oZWlnaHQ7CisgICAgICAgIHZhciBjeCA9IHZpZXdwb3J0Lng7
CisgICAgICAgIHZhciBjeSA9IHZpZXdwb3J0Lnk7CisgICAgICAgIHZhciB2aWV3cG9ydE1hdHJp
eCA9IE1hdHJpeC5Gcm9tVmFsdWVzKGN3IC8gMi4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIC1jaCAv
IDIuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCB6bWF4IC0gem1pbiwgMC4wLCBjeCArIGN3IC8gMi4w
LCBjaCAvIDIuMCArIGN5LCB6bWluLCAxLjApOworICAgICAgICB2YXIgbWF0cml4ID0gTWF0aFRt
cC5NYXRyaXhbMF07CisgICAgICAgIHdvcmxkLm11bHRpcGx5VG9SZWYodmlldywgbWF0cml4KTsK
KyAgICAgICAgbWF0cml4Lm11bHRpcGx5VG9SZWYocHJvamVjdGlvbiwgbWF0cml4KTsKKyAgICAg
ICAgcmV0dXJuIG1hdHJpeC5tdWx0aXBseSh2aWV3cG9ydE1hdHJpeCk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBFeHRyYWN0cyBhIDJ4MiBtYXRyaXggZnJvbSBhIGdpdmVuIG1hdHJpeCBhbmQg
c3RvcmUgdGhlIHJlc3VsdCBpbiBhIEZsb2F0MzJBcnJheQorICAgICAqIEBwYXJhbSBtYXRyaXgg
ZGVmaW5lcyB0aGUgbWF0cml4IHRvIHVzZQorICAgICAqIEByZXR1cm5zIGEgbmV3IEZsb2F0MzJB
cnJheSBhcnJheSB3aXRoIDQgZWxlbWVudHMgOiB0aGUgMngyIG1hdHJpeCBleHRyYWN0ZWQgZnJv
bSB0aGUgZ2l2ZW4gbWF0cml4CisgICAgICovCisgICAgTWF0cml4LkdldEFzTWF0cml4MngyID0g
ZnVuY3Rpb24gKG1hdHJpeCkgeworICAgICAgICB2YXIgbSA9IG1hdHJpeC5tOworICAgICAgICBy
ZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbbVswXSwgbVsxXSwgbVs0XSwgbVs1XV0pOworICAgIH07
CisgICAgLyoqCisgICAgICogRXh0cmFjdHMgYSAzeDMgbWF0cml4IGZyb20gYSBnaXZlbiBtYXRy
aXggYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gYSBGbG9hdDMyQXJyYXkKKyAgICAgKiBAcGFyYW0g
bWF0cml4IGRlZmluZXMgdGhlIG1hdHJpeCB0byB1c2UKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBG
bG9hdDMyQXJyYXkgYXJyYXkgd2l0aCA5IGVsZW1lbnRzIDogdGhlIDN4MyBtYXRyaXggZXh0cmFj
dGVkIGZyb20gdGhlIGdpdmVuIG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5HZXRBc01hdHJp
eDN4MyA9IGZ1bmN0aW9uIChtYXRyaXgpIHsKKyAgICAgICAgdmFyIG0gPSBtYXRyaXgubTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAgICAgbVswXSwgbVsxXSwg
bVsyXSwKKyAgICAgICAgICAgIG1bNF0sIG1bNV0sIG1bNl0sCisgICAgICAgICAgICBtWzhdLCBt
WzldLCBtWzEwXQorICAgICAgICBdKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXB1dGUg
dGhlIHRyYW5zcG9zZSBvZiBhIGdpdmVuIG1hdHJpeAorICAgICAqIEBwYXJhbSBtYXRyaXggZGVm
aW5lcyB0aGUgbWF0cml4IHRvIHRyYW5zcG9zZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgbWF0
cml4CisgICAgICovCisgICAgTWF0cml4LlRyYW5zcG9zZSA9IGZ1bmN0aW9uIChtYXRyaXgpIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBNYXRyaXgoKTsKKyAgICAgICAgTWF0cml4LlRyYW5z
cG9zZVRvUmVmKG1hdHJpeCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENvbXB1dGUgdGhlIHRyYW5zcG9zZSBvZiBhIG1hdHJpeCBhbmQg
c3RvcmUgaXQgaW4gYSB0YXJnZXQgbWF0cml4CisgICAgICogQHBhcmFtIG1hdHJpeCBkZWZpbmVz
IHRoZSBtYXRyaXggdG8gdHJhbnNwb3NlCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRo
ZSB0YXJnZXQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LlRyYW5zcG9zZVRvUmVmID0gZnVu
Y3Rpb24gKG1hdHJpeCwgcmVzdWx0KSB7CisgICAgICAgIHZhciBybSA9IHJlc3VsdC5fbTsKKyAg
ICAgICAgdmFyIG1tID0gbWF0cml4Lm07CisgICAgICAgIHJtWzBdID0gbW1bMF07CisgICAgICAg
IHJtWzFdID0gbW1bNF07CisgICAgICAgIHJtWzJdID0gbW1bOF07CisgICAgICAgIHJtWzNdID0g
bW1bMTJdOworICAgICAgICBybVs0XSA9IG1tWzFdOworICAgICAgICBybVs1XSA9IG1tWzVdOwor
ICAgICAgICBybVs2XSA9IG1tWzldOworICAgICAgICBybVs3XSA9IG1tWzEzXTsKKyAgICAgICAg
cm1bOF0gPSBtbVsyXTsKKyAgICAgICAgcm1bOV0gPSBtbVs2XTsKKyAgICAgICAgcm1bMTBdID0g
bW1bMTBdOworICAgICAgICBybVsxMV0gPSBtbVsxNF07CisgICAgICAgIHJtWzEyXSA9IG1tWzNd
OworICAgICAgICBybVsxM10gPSBtbVs3XTsKKyAgICAgICAgcm1bMTRdID0gbW1bMTFdOworICAg
ICAgICBybVsxNV0gPSBtbVsxNV07CisgICAgICAgIC8vIGlkZW50aXR5LW5lc3MgZG9lcyBub3Qg
Y2hhbmdlIHdoZW4gdHJhbnNwb3NpbmcKKyAgICAgICAgcmVzdWx0Ll91cGRhdGVJZGVudGl0eVN0
YXR1cyhtYXRyaXguX2lzSWRlbnRpdHksIG1hdHJpeC5faXNJZGVudGl0eURpcnR5KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENvbXB1dGVzIGEgcmVmbGVjdGlvbiBtYXRyaXggZnJvbSBhIHBs
YW5lCisgICAgICogQHBhcmFtIHBsYW5lIGRlZmluZXMgdGhlIHJlZmxlY3Rpb24gcGxhbmUKKyAg
ICAgKiBAcmV0dXJucyBhIG5ldyBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguUmVmbGVjdGlv
biA9IGZ1bmN0aW9uIChwbGFuZSkgeworICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgp
OworICAgICAgICBNYXRyaXguUmVmbGVjdGlvblRvUmVmKHBsYW5lLCBtYXRyaXgpOworICAgICAg
ICByZXR1cm4gbWF0cml4OworICAgIH07CisgICAgLyoqCisgICAgICogQ29tcHV0ZXMgYSByZWZs
ZWN0aW9uIG1hdHJpeCBmcm9tIGEgcGxhbmUKKyAgICAgKiBAcGFyYW0gcGxhbmUgZGVmaW5lcyB0
aGUgcmVmbGVjdGlvbiBwbGFuZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFy
Z2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5SZWZsZWN0aW9uVG9SZWYgPSBmdW5jdGlv
biAocGxhbmUsIHJlc3VsdCkgeworICAgICAgICBwbGFuZS5ub3JtYWxpemUoKTsKKyAgICAgICAg
dmFyIHggPSBwbGFuZS5ub3JtYWwueDsKKyAgICAgICAgdmFyIHkgPSBwbGFuZS5ub3JtYWwueTsK
KyAgICAgICAgdmFyIHogPSBwbGFuZS5ub3JtYWwuejsKKyAgICAgICAgdmFyIHRlbXAgPSAtMiAq
IHg7CisgICAgICAgIHZhciB0ZW1wMiA9IC0yICogeTsKKyAgICAgICAgdmFyIHRlbXAzID0gLTIg
KiB6OworICAgICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKHRlbXAgKiB4ICsgMSwgdGVtcDIg
KiB4LCB0ZW1wMyAqIHgsIDAuMCwgdGVtcCAqIHksIHRlbXAyICogeSArIDEsIHRlbXAzICogeSwg
MC4wLCB0ZW1wICogeiwgdGVtcDIgKiB6LCB0ZW1wMyAqIHogKyAxLCAwLjAsIHRlbXAgKiBwbGFu
ZS5kLCB0ZW1wMiAqIHBsYW5lLmQsIHRlbXAzICogcGxhbmUuZCwgMS4wLCByZXN1bHQpOworICAg
IH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2ZW4gbWF0cml4IGFzIGEgcm90YXRpb24g
bWF0cml4IGNvbXBvc2VkIGZyb20gdGhlIDMgbGVmdCBoYW5kZWQgYXhlcworICAgICAqIEBwYXJh
bSB4YXhpcyBkZWZpbmVzIHRoZSB2YWx1ZSBvZiB0aGUgMXN0IGF4aXMKKyAgICAgKiBAcGFyYW0g
eWF4aXMgZGVmaW5lcyB0aGUgdmFsdWUgb2YgdGhlIDJuZCBheGlzCisgICAgICogQHBhcmFtIHph
eGlzIGRlZmluZXMgdGhlIHZhbHVlIG9mIHRoZSAzcmQgYXhpcworICAgICAqIEBwYXJhbSByZXN1
bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5Gcm9tWFla
QXhlc1RvUmVmID0gZnVuY3Rpb24gKHhheGlzLCB5YXhpcywgemF4aXMsIHJlc3VsdCkgeworICAg
ICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKHhheGlzLngsIHhheGlzLnksIHhheGlzLnosIDAu
MCwgeWF4aXMueCwgeWF4aXMueSwgeWF4aXMueiwgMC4wLCB6YXhpcy54LCB6YXhpcy55LCB6YXhp
cy56LCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMCwgcmVzdWx0KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgYSByb3RhdGlvbiBtYXRyaXggZnJvbSBhIHF1YXRlcm5pb24gYW5kIHN0
b3JlcyBpdCBpbiBhIHRhcmdldCBtYXRyaXgKKyAgICAgKiBAcGFyYW0gcXVhdCBkZWZpbmVzIHRo
ZSBxdWF0ZXJuaW9uIHRvIHVzZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFy
Z2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5Gcm9tUXVhdGVybmlvblRvUmVmID0gZnVu
Y3Rpb24gKHF1YXQsIHJlc3VsdCkgeworICAgICAgICB2YXIgeHggPSBxdWF0LnggKiBxdWF0Lng7
CisgICAgICAgIHZhciB5eSA9IHF1YXQueSAqIHF1YXQueTsKKyAgICAgICAgdmFyIHp6ID0gcXVh
dC56ICogcXVhdC56OworICAgICAgICB2YXIgeHkgPSBxdWF0LnggKiBxdWF0Lnk7CisgICAgICAg
IHZhciB6dyA9IHF1YXQueiAqIHF1YXQudzsKKyAgICAgICAgdmFyIHp4ID0gcXVhdC56ICogcXVh
dC54OworICAgICAgICB2YXIgeXcgPSBxdWF0LnkgKiBxdWF0Lnc7CisgICAgICAgIHZhciB5eiA9
IHF1YXQueSAqIHF1YXQuejsKKyAgICAgICAgdmFyIHh3ID0gcXVhdC54ICogcXVhdC53OworICAg
ICAgICByZXN1bHQuX21bMF0gPSAxLjAgLSAoMi4wICogKHl5ICsgenopKTsKKyAgICAgICAgcmVz
dWx0Ll9tWzFdID0gMi4wICogKHh5ICsgencpOworICAgICAgICByZXN1bHQuX21bMl0gPSAyLjAg
KiAoenggLSB5dyk7CisgICAgICAgIHJlc3VsdC5fbVszXSA9IDAuMDsKKyAgICAgICAgcmVzdWx0
Ll9tWzRdID0gMi4wICogKHh5IC0gencpOworICAgICAgICByZXN1bHQuX21bNV0gPSAxLjAgLSAo
Mi4wICogKHp6ICsgeHgpKTsKKyAgICAgICAgcmVzdWx0Ll9tWzZdID0gMi4wICogKHl6ICsgeHcp
OworICAgICAgICByZXN1bHQuX21bN10gPSAwLjA7CisgICAgICAgIHJlc3VsdC5fbVs4XSA9IDIu
MCAqICh6eCArIHl3KTsKKyAgICAgICAgcmVzdWx0Ll9tWzldID0gMi4wICogKHl6IC0geHcpOwor
ICAgICAgICByZXN1bHQuX21bMTBdID0gMS4wIC0gKDIuMCAqICh5eSArIHh4KSk7CisgICAgICAg
IHJlc3VsdC5fbVsxMV0gPSAwLjA7CisgICAgICAgIHJlc3VsdC5fbVsxMl0gPSAwLjA7CisgICAg
ICAgIHJlc3VsdC5fbVsxM10gPSAwLjA7CisgICAgICAgIHJlc3VsdC5fbVsxNF0gPSAwLjA7Cisg
ICAgICAgIHJlc3VsdC5fbVsxNV0gPSAxLjA7CisgICAgICAgIHJlc3VsdC5fbWFya0FzVXBkYXRl
ZCgpOworICAgIH07CisgICAgTWF0cml4Ll91cGRhdGVGbGFnU2VlZCA9IDA7CisgICAgTWF0cml4
Ll9pZGVudGl0eVJlYWRPbmx5ID0gTWF0cml4LklkZW50aXR5KCk7CisgICAgcmV0dXJuIE1hdHJp
eDsKK30oKSk7CisKKy8qKgorICogQGhpZGRlbgorICogU2FtZSBhcyBUbXAgYnV0IG5vdCBleHBv
cnRlZCB0byBrZWVwIGl0IG9ubHkgZm9yIG1hdGggZnVuY3Rpb25zIHRvIGF2b2lkIGNvbmZsaWN0
cworICovCit2YXIgTWF0aFRtcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBm
dW5jdGlvbiBNYXRoVG1wKCkgeworICAgIH0KKyAgICBNYXRoVG1wLlZlY3RvcjMgPSBfTWlzY19h
cnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFycmF5VG9vbHMiXS5CdWls
ZEFycmF5KDYsIFZlY3RvcjMuWmVybyk7CisgICAgTWF0aFRtcC5NYXRyaXggPSBfTWlzY19hcnJh
eVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFycmF5VG9vbHMiXS5CdWlsZEFy
cmF5KDIsIE1hdHJpeC5JZGVudGl0eSk7CisgICAgTWF0aFRtcC5RdWF0ZXJuaW9uID0gX01pc2Nf
YXJyYXlUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBcnJheVRvb2xzIl0uQnVp
bGRBcnJheSgzLCBRdWF0ZXJuaW9uLlplcm8pOworICAgIHJldHVybiBNYXRoVG1wOworfSgpKTsK
Ky8qKgorICogQGhpZGRlbgorICovCit2YXIgVG1wVmVjdG9ycyA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBUbXBWZWN0b3JzKCkgeworICAgIH0KKyAgICBUbXBW
ZWN0b3JzLlZlY3RvcjIgPSBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkFycmF5VG9vbHMiXS5CdWlsZEFycmF5KDMsIFZlY3RvcjIuWmVybyk7IC8vIDMgdGVt
cCBWZWN0b3IyIGF0IG9uY2Ugc2hvdWxkIGJlIGVub3VnaAorICAgIFRtcFZlY3RvcnMuVmVjdG9y
MyA9IF9NaXNjX2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQXJyYXlU
b29scyJdLkJ1aWxkQXJyYXkoMTMsIFZlY3RvcjMuWmVybyk7IC8vIDEzIHRlbXAgVmVjdG9yMyBh
dCBvbmNlIHNob3VsZCBiZSBlbm91Z2gKKyAgICBUbXBWZWN0b3JzLlZlY3RvcjQgPSBfTWlzY19h
cnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFycmF5VG9vbHMiXS5CdWls
ZEFycmF5KDMsIFZlY3RvcjQuWmVybyk7IC8vIDMgdGVtcCBWZWN0b3I0IGF0IG9uY2Ugc2hvdWxk
IGJlIGVub3VnaAorICAgIFRtcFZlY3RvcnMuUXVhdGVybmlvbiA9IF9NaXNjX2FycmF5VG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQXJyYXlUb29scyJdLkJ1aWxkQXJyYXkoMiwg
UXVhdGVybmlvbi5aZXJvKTsgLy8gMiB0ZW1wIFF1YXRlcm5pb24gYXQgb25jZSBzaG91bGQgYmUg
ZW5vdWdoCisgICAgVG1wVmVjdG9ycy5NYXRyaXggPSBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIkFycmF5VG9vbHMiXS5CdWlsZEFycmF5KDgsIE1hdHJpeC5J
ZGVudGl0eSk7IC8vIDggdGVtcCBNYXRyaWNlcyBhdCBvbmNlIHNob3VsZCBiZSBlbm91Z2gKKyAg
ICByZXR1cm4gVG1wVmVjdG9yczsKK30oKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9O
LlZlY3RvcjIiXSA9IFZlY3RvcjI7CitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5WZWN0b3Iz
Il0gPSBWZWN0b3IzOworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uVmVjdG9yNCJdID0gVmVj
dG9yNDsKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJfVHlw
ZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLk1hdHJpeCJdID0gTWF0cml4OworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9NYXRocy9tYXRoLnZlcnRleEZvcm1hdC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGhzL21h
dGgudmVydGV4Rm9ybWF0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQb3NpdGlvbk5vcm1hbFZlcnRleCwgUG9z
aXRpb25Ob3JtYWxUZXh0dXJlVmVydGV4ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBvc2l0aW9uTm9ybWFsVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBQb3NpdGlv
bk5vcm1hbFZlcnRleDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NpdGlvbk5vcm1hbFRleHR1
cmVWZXJ0ZXgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvc2l0aW9uTm9ybWFsVGV4dHVyZVZlcnRl
eDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisKKy8qKgorICogQ29udGFpbnMgcG9zaXRp
b24gYW5kIG5vcm1hbCB2ZWN0b3JzIGZvciBhIHZlcnRleAorICovCit2YXIgUG9zaXRpb25Ob3Jt
YWxWZXJ0ZXggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIFBvc2l0aW9uTm9ybWFsVmVydGV4CisgICAgICogQHBhcmFtIHBvc2l0aW9uIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgdmVydGV4IChkZWZhdXQ6IDAsMCwwKQorICAgICAqIEBwYXJhbSBu
b3JtYWwgdGhlIG5vcm1hbCBvZiB0aGUgdmVydGV4IChkZWZhdXQ6IDAsMSwwKQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIFBvc2l0aW9uTm9ybWFsVmVydGV4KAorICAgIC8qKiB0aGUgcG9zaXRpb24g
b2YgdGhlIHZlcnRleCAoZGVmYXV0OiAwLDAsMCkgKi8KKyAgICBwb3NpdGlvbiwgCisgICAgLyoq
IHRoZSBub3JtYWwgb2YgdGhlIHZlcnRleCAoZGVmYXV0OiAwLDEsMCkgKi8KKyAgICBub3JtYWwp
IHsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09PSB2b2lkIDApIHsgcG9zaXRpb24gPSBfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsgfQor
ICAgICAgICBpZiAobm9ybWFsID09PSB2b2lkIDApIHsgbm9ybWFsID0gX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5VcCgpOyB9CisgICAgICAgIHRo
aXMucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgdGhpcy5ub3JtYWwgPSBub3JtYWw7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIENsb25lcyB0aGUgUG9zaXRpb25Ob3JtYWxWZXJ0ZXgKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY2xvbmVkIFBvc2l0aW9uTm9ybWFsVmVydGV4CisgICAgICovCisg
ICAgUG9zaXRpb25Ob3JtYWxWZXJ0ZXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gbmV3IFBvc2l0aW9uTm9ybWFsVmVydGV4KHRoaXMucG9zaXRpb24uY2xv
bmUoKSwgdGhpcy5ub3JtYWwuY2xvbmUoKSk7CisgICAgfTsKKyAgICByZXR1cm4gUG9zaXRpb25O
b3JtYWxWZXJ0ZXg7Cit9KCkpOworCisvKioKKyAqIENvbnRhaW5zIHBvc2l0aW9uLCBub3JtYWwg
YW5kIHV2IHZlY3RvcnMgZm9yIGEgdmVydGV4CisgKi8KK3ZhciBQb3NpdGlvbk5vcm1hbFRleHR1
cmVWZXJ0ZXggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIFBvc2l0aW9uTm9ybWFsVGV4dHVyZVZlcnRleAorICAgICAqIEBwYXJhbSBwb3Np
dGlvbiB0aGUgcG9zaXRpb24gb2YgdGhlIHZlcnRleCAoZGVmYXV0OiAwLDAsMCkKKyAgICAgKiBA
cGFyYW0gbm9ybWFsIHRoZSBub3JtYWwgb2YgdGhlIHZlcnRleCAoZGVmYXV0OiAwLDEsMCkKKyAg
ICAgKiBAcGFyYW0gdXYgdGhlIHV2IG9mIHRoZSB2ZXJ0ZXggKGRlZmF1bHQ6IDAsMCkKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBQb3NpdGlvbk5vcm1hbFRleHR1cmVWZXJ0ZXgoCisgICAgLyoqIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgdmVydGV4IChkZWZhdXQ6IDAsMCwwKSAqLworICAgIHBvc2l0aW9u
LCAKKyAgICAvKiogdGhlIG5vcm1hbCBvZiB0aGUgdmVydGV4IChkZWZhdXQ6IDAsMSwwKSAqLwor
ICAgIG5vcm1hbCwgCisgICAgLyoqIHRoZSB1diBvZiB0aGUgdmVydGV4IChkZWZhdWx0OiAwLDAp
ICovCisgICAgdXYpIHsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09PSB2b2lkIDApIHsgcG9zaXRp
b24gPSBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJd
Llplcm8oKTsgfQorICAgICAgICBpZiAobm9ybWFsID09PSB2b2lkIDApIHsgbm9ybWFsID0gX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5VcCgpOyB9
CisgICAgICAgIGlmICh1diA9PT0gdm9pZCAwKSB7IHV2ID0gX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjIiXS5aZXJvKCk7IH0KKyAgICAgICAgdGhpcy5w
b3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbDsKKyAgICAg
ICAgdGhpcy51diA9IHV2OworICAgIH0KKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhlIFBvc2l0
aW9uTm9ybWFsVGV4dHVyZVZlcnRleAorICAgICAqIEByZXR1cm5zIHRoZSBjbG9uZWQgUG9zaXRp
b25Ob3JtYWxUZXh0dXJlVmVydGV4CisgICAgICovCisgICAgUG9zaXRpb25Ob3JtYWxUZXh0dXJl
VmVydGV4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBQb3NpdGlvbk5vcm1hbFRleHR1cmVWZXJ0ZXgodGhpcy5wb3NpdGlvbi5jbG9uZSgpLCB0aGlz
Lm5vcm1hbC5jbG9uZSgpLCB0aGlzLnV2LmNsb25lKCkpOworICAgIH07CisgICAgcmV0dXJuIFBv
c2l0aW9uTm9ybWFsVGV4dHVyZVZlcnRleDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWF0aHMvbWF0aC52aWV3cG9ydC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vTWF0aHMvbWF0aC52aWV3cG9ydC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBW
aWV3cG9ydCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWaWV3cG9ydCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gVmlld3BvcnQ7IH0pOworLyoqCisgKiBDbGFzcyB1c2VkIHRv
IHJlcHJlc2VudCBhIHZpZXdwb3J0IG9uIHNjcmVlbgorICovCit2YXIgVmlld3BvcnQgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIFZpZXdw
b3J0IG9iamVjdCBsb2NhdGVkIGF0ICh4LCB5KSBhbmQgc2l6ZWQgKHdpZHRoLCBoZWlnaHQpCisg
ICAgICogQHBhcmFtIHggZGVmaW5lcyB2aWV3cG9ydCBsZWZ0IGNvb3JkaW5hdGUKKyAgICAgKiBA
cGFyYW0geSBkZWZpbmVzIHZpZXdwb3J0IHRvcCBjb29yZGluYXRlCisgICAgICogQHBhcmFtIHdp
ZHRoIGRlZmluZXMgdGhlIHZpZXdwb3J0IHdpZHRoCisgICAgICogQHBhcmFtIGhlaWdodCBkZWZp
bmVzIHRoZSB2aWV3cG9ydCBoZWlnaHQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBWaWV3cG9ydCgK
KyAgICAvKiogdmlld3BvcnQgbGVmdCBjb29yZGluYXRlICovCisgICAgeCwgCisgICAgLyoqIHZp
ZXdwb3J0IHRvcCBjb29yZGluYXRlICovCisgICAgeSwgCisgICAgLyoqdmlld3BvcnQgd2lkdGgg
Ki8KKyAgICB3aWR0aCwgCisgICAgLyoqIHZpZXdwb3J0IGhlaWdodCAqLworICAgIGhlaWdodCkg
eworICAgICAgICB0aGlzLnggPSB4OworICAgICAgICB0aGlzLnkgPSB5OworICAgICAgICB0aGlz
LndpZHRoID0gd2lkdGg7CisgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OworICAgIH0KKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHZpZXdwb3J0IHVzaW5nIGFic29sdXRlIHNpemlu
ZyAoZnJvbSAwLT4gd2lkdGgsIDAtPiBoZWlnaHQgaW5zdGVhZCBvZiAwLT4xKQorICAgICAqIEBw
YXJhbSByZW5kZXJXaWR0aCBkZWZpbmVzIHRoZSByZW5kZXJpbmcgd2lkdGgKKyAgICAgKiBAcGFy
YW0gcmVuZGVySGVpZ2h0IGRlZmluZXMgdGhlIHJlbmRlcmluZyBoZWlnaHQKKyAgICAgKiBAcmV0
dXJucyBhIG5ldyBWaWV3cG9ydAorICAgICAqLworICAgIFZpZXdwb3J0LnByb3RvdHlwZS50b0ds
b2JhbCA9IGZ1bmN0aW9uIChyZW5kZXJXaWR0aCwgcmVuZGVySGVpZ2h0KSB7CisgICAgICAgIHJl
dHVybiBuZXcgVmlld3BvcnQodGhpcy54ICogcmVuZGVyV2lkdGgsIHRoaXMueSAqIHJlbmRlckhl
aWdodCwgdGhpcy53aWR0aCAqIHJlbmRlcldpZHRoLCB0aGlzLmhlaWdodCAqIHJlbmRlckhlaWdo
dCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTdG9yZXMgYWJzb2x1dGUgdmlld3BvcnQgdmFs
dWUgaW50byBhIHRhcmdldCB2aWV3cG9ydCAoZnJvbSAwLT4gd2lkdGgsIDAtPiBoZWlnaHQgaW5z
dGVhZCBvZiAwLT4xKQorICAgICAqIEBwYXJhbSByZW5kZXJXaWR0aCBkZWZpbmVzIHRoZSByZW5k
ZXJpbmcgd2lkdGgKKyAgICAgKiBAcGFyYW0gcmVuZGVySGVpZ2h0IGRlZmluZXMgdGhlIHJlbmRl
cmluZyBoZWlnaHQKKyAgICAgKiBAcGFyYW0gcmVmIGRlZmluZXMgdGhlIHRhcmdldCB2aWV3cG9y
dAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHZpZXdwb3J0CisgICAgICovCisgICAgVmll
d3BvcnQucHJvdG90eXBlLnRvR2xvYmFsVG9SZWYgPSBmdW5jdGlvbiAocmVuZGVyV2lkdGgsIHJl
bmRlckhlaWdodCwgcmVmKSB7CisgICAgICAgIHJlZi54ID0gdGhpcy54ICogcmVuZGVyV2lkdGg7
CisgICAgICAgIHJlZi55ID0gdGhpcy55ICogcmVuZGVySGVpZ2h0OworICAgICAgICByZWYud2lk
dGggPSB0aGlzLndpZHRoICogcmVuZGVyV2lkdGg7CisgICAgICAgIHJlZi5oZWlnaHQgPSB0aGlz
LmhlaWdodCAqIHJlbmRlckhlaWdodDsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZpZXdwb3J0IGNvcGllZCBmcm9tIHRoZSBjdXJy
ZW50IG9uZQorICAgICAqIEByZXR1cm5zIGEgbmV3IFZpZXdwb3J0CisgICAgICovCisgICAgVmll
d3BvcnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3
IFZpZXdwb3J0KHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7CisgICAg
fTsKKyAgICByZXR1cm4gVmlld3BvcnQ7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL01hdGhzL3NwaGVyaWNhbFBvbHlub21pYWwudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGhzL3NwaGVyaWNhbFBvbHlub21p
YWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogU3BoZXJpY2FsSGFybW9uaWNzLCBTcGhlcmljYWxQb2x5bm9t
aWFsICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNwaGVyaWNhbEhhcm1v
bmljcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3BoZXJpY2FsSGFybW9uaWNzOyB9KTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlNwaGVyaWNhbFBvbHlub21pYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNw
aGVyaWNhbFBvbHlub21pYWw7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMi
KTsKKworLy8gaHR0cHM6Ly9kaWNreWppbS53b3JkcHJlc3MuY29tLzIwMTMvMDkvMDQvc3BoZXJp
Y2FsLWhhcm1vbmljcy1mb3ItYmVnaW5uZXJzLworLy8gaHR0cDovL3NpbHZpb2plbW1hLmNvbS9w
dWJsaWMvcGFwZXJzL2xpZ2h0aW5nL3NwaGVyaWNhbC1oYXJtb25pYy1saWdodGluZy5wZGYKKy8v
IGh0dHBzOi8vd3d3LnBwc2xvYW4ub3JnL3B1YmxpY2F0aW9ucy9TdHVwaWRTSDM2LnBkZgorLy8g
aHR0cDovL2NzZXdlYi51Y3NkLmVkdS9+cmF2aXIvcGFwZXJzL2Vudm1hcC9lbnZtYXAucGRmCisv
LyBodHRwczovL3d3dy5wcHNsb2FuLm9yZy9wdWJsaWNhdGlvbnMvU0hKQ0dULnBkZgorLy8gaHR0
cHM6Ly93d3cucHBzbG9hbi5vcmcvcHVibGljYXRpb25zL3NoZGVyaW5nLnBkZgorLy8gaHR0cHM6
Ly9nb29nbGUuZ2l0aHViLmlvL2ZpbGFtZW50L0ZpbGFtZW50Lm1kLmh0bWwjYW5uZXgvc3BoZXJp
Y2FsaGFybW9uaWNzCisvLyBodHRwczovL3BhdGFwb20uY29tL2Jsb2cvU0hQb3J0YWwvCisvLyBo
dHRwczovL2ltZG9pbmdpdHdyb25nLndvcmRwcmVzcy5jb20vMjAxMS8wNC8xNC9zcGhlcmljYWwt
aGFybW9uaWNzLXd0Zi8KKy8vIFVzaW5nIHJlYWwgU0ggYmFzaXM6CisvLyAgbT4wICAgICAgICAg
ICAgIG0gICBtCisvLyB5ICAgPSBzcXJ0KDIpICogSyAqIFAgKiBjb3MobSpwaGkpICogY29zKHRo
ZXRhKQorLy8gIGwgICAgICAgICAgICAgICBsICAgbAorLy8KKy8vICBtPDAgICAgICAgICAgICAg
bSAgIHxtfAorLy8geSAgID0gc3FydCgyKSAqIEsgKiBQICogc2luKG0qcGhpKSAqIGNvcyh0aGV0
YSkKKy8vICBsICAgICAgICAgICAgICAgbCAgIGwKKy8vCisvLyAgbT0wICAgMCAgIDAKKy8vIHkg
ICA9IEsgKiBQICogdHJpZ29ubyB0ZXJtcworLy8gIGwgICAgIGwgICBsCisvLworLy8gIG0gICAg
ICAgKDJsICsgMSkobCAtIHxtfCkhCisvLyBLID0gc3FydCgtLS0tLS0tLS0tLS0tLS0tLS0pCisv
LyAgbCAgICAgICAgICAgNHBpKGwgKyB8bXwpIQorLy8KKy8vIGFuZCBQIGJ5IHJlY3Vyc2lvbjoK
Ky8vCisvLyBQMDAoeCkgPSAxCisvLyBQMDEoeCkgPSB4CisvLyBQbGwoeCkgPSAoLTFebCkoMmwg
LSAxKSEhKDEteCp4KV4oMS8yKQorLy8gICAgICAgICAgKCgybCAtIDEpeFtQbC0xL21dLShsICsg
bSAtIDEpW1BsLTIvbV0pCisvLyBQbG0oeCkgPSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgIGwgLSBtCisvLyBMZWF2aW5n
IHRoZSB0cmlnb25vbWV0cmljIHRlcm1zIGFzaWRlIHdlIGNhbiBwcmVjb21wdXRlIHRoZSBjb25z
dGFudHMgdG8gOgordmFyIFNIM3lsbUJhc2lzQ29uc3RhbnRzID0gWworICAgIE1hdGguc3FydCgx
IC8gKDQgKiBNYXRoLlBJKSksCisgICAgLU1hdGguc3FydCgzIC8gKDQgKiBNYXRoLlBJKSksCisg
ICAgTWF0aC5zcXJ0KDMgLyAoNCAqIE1hdGguUEkpKSwKKyAgICAtTWF0aC5zcXJ0KDMgLyAoNCAq
IE1hdGguUEkpKSwKKyAgICBNYXRoLnNxcnQoMTUgLyAoNCAqIE1hdGguUEkpKSwKKyAgICAtTWF0
aC5zcXJ0KDE1IC8gKDQgKiBNYXRoLlBJKSksCisgICAgTWF0aC5zcXJ0KDUgLyAoMTYgKiBNYXRo
LlBJKSksCisgICAgLU1hdGguc3FydCgxNSAvICg0ICogTWF0aC5QSSkpLAorICAgIE1hdGguc3Fy
dCgxNSAvICgxNiAqIE1hdGguUEkpKSwKK107CisvLyBjbSA9IGNvcyhtICogcGhpKQorLy8gc20g
PSBzaW4obSAqIHBoaSkKKy8vIHt4LHksen0gPSB7Y29zKHBoaSlzaW4odGhldGEpLCBzaW4ocGhp
KXNpbih0aGV0YSksIGNvcyh0aGV0YSl9CisvLyBCeSByZWN1cnNpb24gb24gdXNpbmcgdHJpZ28g
aWRlbnRpdGllczoKK3ZhciBTSDN5bG1CYXNpc1RyaWdvbm9tZXRyaWNUZXJtcyA9IFsKKyAgICBm
dW5jdGlvbiAoZGlyZWN0aW9uKSB7IHJldHVybiAxOyB9LAorICAgIGZ1bmN0aW9uIChkaXJlY3Rp
b24pIHsgcmV0dXJuIGRpcmVjdGlvbi55OyB9LAorICAgIGZ1bmN0aW9uIChkaXJlY3Rpb24pIHsg
cmV0dXJuIGRpcmVjdGlvbi56OyB9LAorICAgIGZ1bmN0aW9uIChkaXJlY3Rpb24pIHsgcmV0dXJu
IGRpcmVjdGlvbi54OyB9LAorICAgIGZ1bmN0aW9uIChkaXJlY3Rpb24pIHsgcmV0dXJuIGRpcmVj
dGlvbi54ICogZGlyZWN0aW9uLnk7IH0sCisgICAgZnVuY3Rpb24gKGRpcmVjdGlvbikgeyByZXR1
cm4gZGlyZWN0aW9uLnkgKiBkaXJlY3Rpb24uejsgfSwKKyAgICBmdW5jdGlvbiAoZGlyZWN0aW9u
KSB7IHJldHVybiAzICogZGlyZWN0aW9uLnogKiBkaXJlY3Rpb24ueiAtIDE7IH0sCisgICAgZnVu
Y3Rpb24gKGRpcmVjdGlvbikgeyByZXR1cm4gZGlyZWN0aW9uLnggKiBkaXJlY3Rpb24uejsgfSwK
KyAgICBmdW5jdGlvbiAoZGlyZWN0aW9uKSB7IHJldHVybiBkaXJlY3Rpb24ueCAqIGRpcmVjdGlv
bi54IC0gZGlyZWN0aW9uLnkgKiBkaXJlY3Rpb24ueTsgfSwKK107CisvLyBXcmFwIHRoZSBmdWxs
IGNvbXB1dGUKK3ZhciBhcHBseVNIMyA9IGZ1bmN0aW9uIChsbSwgZGlyZWN0aW9uKSB7CisgICAg
cmV0dXJuIFNIM3lsbUJhc2lzQ29uc3RhbnRzW2xtXSAqIFNIM3lsbUJhc2lzVHJpZ29ub21ldHJp
Y1Rlcm1zW2xtXShkaXJlY3Rpb24pOworfTsKKy8vIERlcml2ZWQgZnJvbSB0aGUgaW50ZWdyYXRp
b24gb2YgdGhlIGEga2VybmVsIGNvbnZvbHV0aW9uIHRvIFNILgorLy8gR3JlYXQgZXhwbGFuYXRp
b24gaGVyZTogaHR0cHM6Ly9wYXRhcG9tLmNvbS9ibG9nL1NIUG9ydGFsLyNhYm91dC1kaXN0YW50
LXJhZGlhbmNlLWFuZC1pcnJhZGlhbmNlLWVudmlyb25tZW50cwordmFyIFNIQ29zS2VybmVsQ29u
dm9sdXRpb24gPSBbCisgICAgTWF0aC5QSSwKKyAgICAyICogTWF0aC5QSSAvIDMsCisgICAgMiAq
IE1hdGguUEkgLyAzLAorICAgIDIgKiBNYXRoLlBJIC8gMywKKyAgICBNYXRoLlBJIC8gNCwKKyAg
ICBNYXRoLlBJIC8gNCwKKyAgICBNYXRoLlBJIC8gNCwKKyAgICBNYXRoLlBJIC8gNCwKKyAgICBN
YXRoLlBJIC8gNCwKK107CisvKioKKyAqIENsYXNzIHJlcHJlc2VudGluZyBzcGhlcmljYWwgaGFy
bW9uaWNzIGNvZWZmaWNpZW50cyB0byB0aGUgM3JkIGRlZ3JlZQorICovCit2YXIgU3BoZXJpY2Fs
SGFybW9uaWNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFNw
aGVyaWNhbEhhcm1vbmljcygpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgd2hl
dGhlciBvciBub3QgdGhlIGhhcm1vbmljcyBoYXZlIGJlZW4gcHJlc2NhbGVkIGZvciByZW5kZXJp
bmcuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnByZVNjYWxlZCA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogVGhlIGwwLDAgY29lZmZpY2llbnRzIG9mIHRoZSBzcGhlcmljYWwg
aGFybW9uaWNzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmwwMCA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAg
ICAgICAvKioKKyAgICAgICAgICogVGhlIGwxLC0xIGNvZWZmaWNpZW50cyBvZiB0aGUgc3BoZXJp
Y2FsIGhhcm1vbmljcworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5sMV8xID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbDEsMCBjb2VmZmljaWVudHMgb2YgdGhlIHNw
aGVyaWNhbCBoYXJtb25pY3MKKyAgICAgICAgICovCisgICAgICAgIHRoaXMubDEwID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbDEsMSBjb2VmZmljaWVudHMgb2YgdGhl
IHNwaGVyaWNhbCBoYXJtb25pY3MKKyAgICAgICAgICovCisgICAgICAgIHRoaXMubDExID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbDIsLTIgY29lZmZpY2llbnRzIG9m
IHRoZSBzcGhlcmljYWwgaGFybW9uaWNzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmwyXzIg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBsMiwtMSBjb2VmZmljaWVu
dHMgb2YgdGhlIHNwaGVyaWNhbCBoYXJtb25pY3MKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
bDJfMSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0uWmVybygpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGwyLDAgY29lZmZp
Y2llbnRzIG9mIHRoZSBzcGhlcmljYWwgaGFybW9uaWNzCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmwyMCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGwyLDEgY29l
ZmZpY2llbnRzIG9mIHRoZSBzcGhlcmljYWwgaGFybW9uaWNzCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmwyMSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGwyLDIg
Y29lZmZpY2llbnRzIG9mIHRoZSBzcGhlcmljYWwgaGFybW9uaWNzCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLmwyMiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGRzIGEg
bGlnaHQgdG8gdGhlIHNwaGVyaWNhbCBoYXJtb25pY3MKKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9u
IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGxpZ2h0CisgICAgICogQHBhcmFtIGNvbG9yIHRoZSBjb2xv
ciBvZiB0aGUgbGlnaHQKKyAgICAgKiBAcGFyYW0gZGVsdGFTb2xpZEFuZ2xlIHRoZSBkZWx0YSBz
b2xpZCBhbmdsZSBvZiB0aGUgbGlnaHQKKyAgICAgKi8KKyAgICBTcGhlcmljYWxIYXJtb25pY3Mu
cHJvdG90eXBlLmFkZExpZ2h0ID0gZnVuY3Rpb24gKGRpcmVjdGlvbiwgY29sb3IsIGRlbHRhU29s
aWRBbmdsZSkgeworICAgICAgICB2YXIgY29sb3JWZWN0b3IgPSBuZXcgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShjb2xvci5yLCBjb2xv
ci5nLCBjb2xvci5iKTsKKyAgICAgICAgdmFyIGMgPSBjb2xvclZlY3Rvci5zY2FsZShkZWx0YVNv
bGlkQW5nbGUpOworICAgICAgICB0aGlzLmwwMCA9IHRoaXMubDAwLmFkZChjLnNjYWxlKGFwcGx5
U0gzKDAsIGRpcmVjdGlvbikpKTsKKyAgICAgICAgdGhpcy5sMV8xID0gdGhpcy5sMV8xLmFkZChj
LnNjYWxlKGFwcGx5U0gzKDEsIGRpcmVjdGlvbikpKTsKKyAgICAgICAgdGhpcy5sMTAgPSB0aGlz
LmwxMC5hZGQoYy5zY2FsZShhcHBseVNIMygyLCBkaXJlY3Rpb24pKSk7CisgICAgICAgIHRoaXMu
bDExID0gdGhpcy5sMTEuYWRkKGMuc2NhbGUoYXBwbHlTSDMoMywgZGlyZWN0aW9uKSkpOworICAg
ICAgICB0aGlzLmwyXzIgPSB0aGlzLmwyXzIuYWRkKGMuc2NhbGUoYXBwbHlTSDMoNCwgZGlyZWN0
aW9uKSkpOworICAgICAgICB0aGlzLmwyXzEgPSB0aGlzLmwyXzEuYWRkKGMuc2NhbGUoYXBwbHlT
SDMoNSwgZGlyZWN0aW9uKSkpOworICAgICAgICB0aGlzLmwyMCA9IHRoaXMubDIwLmFkZChjLnNj
YWxlKGFwcGx5U0gzKDYsIGRpcmVjdGlvbikpKTsKKyAgICAgICAgdGhpcy5sMjEgPSB0aGlzLmwy
MS5hZGQoYy5zY2FsZShhcHBseVNIMyg3LCBkaXJlY3Rpb24pKSk7CisgICAgICAgIHRoaXMubDIy
ID0gdGhpcy5sMjIuYWRkKGMuc2NhbGUoYXBwbHlTSDMoOCwgZGlyZWN0aW9uKSkpOworICAgIH07
CisgICAgLyoqCisgICAgICogU2NhbGVzIHRoZSBzcGhlcmljYWwgaGFybW9uaWNzIGJ5IHRoZSBn
aXZlbiBhbW91bnQKKyAgICAgKiBAcGFyYW0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZQorICAg
ICAqLworICAgIFNwaGVyaWNhbEhhcm1vbmljcy5wcm90b3R5cGUuc2NhbGVJblBsYWNlID0gZnVu
Y3Rpb24gKHNjYWxlKSB7CisgICAgICAgIHRoaXMubDAwLnNjYWxlSW5QbGFjZShzY2FsZSk7Cisg
ICAgICAgIHRoaXMubDFfMS5zY2FsZUluUGxhY2Uoc2NhbGUpOworICAgICAgICB0aGlzLmwxMC5z
Y2FsZUluUGxhY2Uoc2NhbGUpOworICAgICAgICB0aGlzLmwxMS5zY2FsZUluUGxhY2Uoc2NhbGUp
OworICAgICAgICB0aGlzLmwyXzIuc2NhbGVJblBsYWNlKHNjYWxlKTsKKyAgICAgICAgdGhpcy5s
Ml8xLnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgICAgIHRoaXMubDIwLnNjYWxlSW5QbGFjZShz
Y2FsZSk7CisgICAgICAgIHRoaXMubDIxLnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgICAgIHRo
aXMubDIyLnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb252
ZXJ0IGZyb20gaW5jaWRlbnQgcmFkaWFuY2UgKExpKSB0byBpcnJhZGlhbmNlIChFKSBieSBhcHBs
eWluZyBjb252b2x1dGlvbiB3aXRoIHRoZSBjb3NpbmUtd2VpZ2h0ZWQgaGVtaXNwaGVyZS4KKyAg
ICAgKgorICAgICAqIGBgYAorICAgICAqIEVfbG0gPSBBX2wgKiBMX2xtCisgICAgICogYGBgCisg
ICAgICoKKyAgICAgKiBJbiBzcGhlcmljYWwgaGFybW9uaWNzIHRoaXMgY29udm9sdXRpb24gYW1v
dW50cyB0byBzY2FsaW5nIGZhY3RvcnMgZm9yIGVhY2ggZnJlcXVlbmN5IGJhbmQuCisgICAgICog
VGhpcyBjb3JyZXNwb25kcyB0byBlcXVhdGlvbiA1IGluICJBbiBFZmZpY2llbnQgUmVwcmVzZW50
YXRpb24gZm9yIElycmFkaWFuY2UgRW52aXJvbm1lbnQgTWFwcyIsIHdoZXJlCisgICAgICogdGhl
IHNjYWxpbmcgZmFjdG9ycyBhcmUgZ2l2ZW4gaW4gZXF1YXRpb24gOS4KKyAgICAgKi8KKyAgICBT
cGhlcmljYWxIYXJtb25pY3MucHJvdG90eXBlLmNvbnZlcnRJbmNpZGVudFJhZGlhbmNlVG9JcnJh
ZGlhbmNlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBDb25zdGFudCAoQmFuZCAwKQorICAg
ICAgICB0aGlzLmwwMC5zY2FsZUluUGxhY2UoU0hDb3NLZXJuZWxDb252b2x1dGlvblswXSk7Cisg
ICAgICAgIC8vIExpbmVhciAoQmFuZCAxKQorICAgICAgICB0aGlzLmwxXzEuc2NhbGVJblBsYWNl
KFNIQ29zS2VybmVsQ29udm9sdXRpb25bMV0pOworICAgICAgICB0aGlzLmwxMC5zY2FsZUluUGxh
Y2UoU0hDb3NLZXJuZWxDb252b2x1dGlvblsyXSk7CisgICAgICAgIHRoaXMubDExLnNjYWxlSW5Q
bGFjZShTSENvc0tlcm5lbENvbnZvbHV0aW9uWzNdKTsKKyAgICAgICAgLy8gUXVhZHJhdGljIChC
YW5kIDIpCisgICAgICAgIHRoaXMubDJfMi5zY2FsZUluUGxhY2UoU0hDb3NLZXJuZWxDb252b2x1
dGlvbls0XSk7CisgICAgICAgIHRoaXMubDJfMS5zY2FsZUluUGxhY2UoU0hDb3NLZXJuZWxDb252
b2x1dGlvbls1XSk7CisgICAgICAgIHRoaXMubDIwLnNjYWxlSW5QbGFjZShTSENvc0tlcm5lbENv
bnZvbHV0aW9uWzZdKTsKKyAgICAgICAgdGhpcy5sMjEuc2NhbGVJblBsYWNlKFNIQ29zS2VybmVs
Q29udm9sdXRpb25bN10pOworICAgICAgICB0aGlzLmwyMi5zY2FsZUluUGxhY2UoU0hDb3NLZXJu
ZWxDb252b2x1dGlvbls4XSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGZyb20g
aXJyYWRpYW5jZSB0byBvdXRnb2luZyByYWRpYW5jZSBmb3IgTGFtYmVydGlhbiBCRFJGLCBzdWl0
YWJsZSBmb3IgZWZmaWNpZW50IHNoYWRlciBldmFsdWF0aW9uLgorICAgICAqCisgICAgICogYGBg
CisgICAgICogTCA9ICgxL3BpKSAqIEUgKiByaG8KKyAgICAgKiBgYGAKKyAgICAgKgorICAgICAq
IFRoaXMgaXMgZG9uZSBieSBhbiBhZGRpdGlvbmFsIHNjYWxlIGJ5IDEvcGksIHNvIGlzIGEgZmFp
cmx5IHRyaXZpYWwgb3BlcmF0aW9uIGJ1dCBpbXBvcnRhbnQgY29uY2VwdHVhbGx5LgorICAgICAq
LworICAgIFNwaGVyaWNhbEhhcm1vbmljcy5wcm90b3R5cGUuY29udmVydElycmFkaWFuY2VUb0xh
bWJlcnRpYW5SYWRpYW5jZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2FsZUluUGxh
Y2UoMS4wIC8gTWF0aC5QSSk7CisgICAgICAgIC8vIFRoZSByZXN1bHRhbnQgU0ggbm93IHJlcHJl
c2VudHMgb3V0Z29pbmcgcmFkaWFuY2UsIHNvIGluY2x1ZGVzIHRoZSBMYW1iZXJ0IDEvcGkgbm9y
bWFsaXNhdGlvbiBmYWN0b3IgYnV0IHdpdGhvdXQgYWxiZWRvIChyaG8pIGFwcGxpZWQKKyAgICAg
ICAgLy8gKFRoZSBwaXhlbCBzaGFkZXIgbXVzdCBhcHBseSBhbGJlZG8gYWZ0ZXIgdGV4dHVyZSBm
ZXRjaGVzLCBldGMpLgorICAgIH07CisgICAgLyoqCisgICAgICogSW50ZWdyYXRlcyB0aGUgcmVj
b25zdHJ1Y3Rpb24gY29lZmZpY2llbnRzIGRpcmVjdGx5IGluIHRvIHRoZSBTSCBwcmV2ZW50aW5n
IGZ1cnRoZXIKKyAgICAgKiByZXF1aXJlZCBvcGVyYXRpb25zIGF0IHJ1biB0aW1lLgorICAgICAq
CisgICAgICogVGhpcyBpcyBzaW1wbHkgZG9uZSBieSBzY2FsaW5nIGJhY2sgdGhlIFNIIHdpdGgg
WWxtIGNvbnN0YW50cyBwYXJhbWV0ZXIuCisgICAgICogVGhlIHRyaWdvbm9tZXRyaWMgcGFydCBi
ZWluZyBhcHBsaWVkIGJ5IHRoZSBzaGFkZXIgYXQgcnVuIHRpbWUuCisgICAgICovCisgICAgU3Bo
ZXJpY2FsSGFybW9uaWNzLnByb3RvdHlwZS5wcmVTY2FsZUZvclJlbmRlcmluZyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5wcmVTY2FsZWQgPSB0cnVlOworICAgICAgICB0aGlzLmwwMC5z
Y2FsZUluUGxhY2UoU0gzeWxtQmFzaXNDb25zdGFudHNbMF0pOworICAgICAgICB0aGlzLmwxXzEu
c2NhbGVJblBsYWNlKFNIM3lsbUJhc2lzQ29uc3RhbnRzWzFdKTsKKyAgICAgICAgdGhpcy5sMTAu
c2NhbGVJblBsYWNlKFNIM3lsbUJhc2lzQ29uc3RhbnRzWzJdKTsKKyAgICAgICAgdGhpcy5sMTEu
c2NhbGVJblBsYWNlKFNIM3lsbUJhc2lzQ29uc3RhbnRzWzNdKTsKKyAgICAgICAgdGhpcy5sMl8y
LnNjYWxlSW5QbGFjZShTSDN5bG1CYXNpc0NvbnN0YW50c1s0XSk7CisgICAgICAgIHRoaXMubDJf
MS5zY2FsZUluUGxhY2UoU0gzeWxtQmFzaXNDb25zdGFudHNbNV0pOworICAgICAgICB0aGlzLmwy
MC5zY2FsZUluUGxhY2UoU0gzeWxtQmFzaXNDb25zdGFudHNbNl0pOworICAgICAgICB0aGlzLmwy
MS5zY2FsZUluUGxhY2UoU0gzeWxtQmFzaXNDb25zdGFudHNbN10pOworICAgICAgICB0aGlzLmwy
Mi5zY2FsZUluUGxhY2UoU0gzeWxtQmFzaXNDb25zdGFudHNbOF0pOworICAgIH07CisgICAgLyoq
CisgICAgICogQ29uc3RydWN0cyBhIHNwaGVyaWNhbCBoYXJtb25pY3MgZnJvbSBhbiBhcnJheS4K
KyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSA5eDMgY29lZmZpY2llbnRzIChsMDAsIGwx
LTEsIGwxMCwgbDExLCBsMi0yLCBsMi0xLCBsMjAsIGwyMSwgbDIyKQorICAgICAqIEByZXR1cm5z
IHRoZSBzcGhlcmljYWwgaGFybW9uaWNzCisgICAgICovCisgICAgU3BoZXJpY2FsSGFybW9uaWNz
LkZyb21BcnJheSA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIHZhciBzaCA9IG5ldyBTcGhl
cmljYWxIYXJtb25pY3MoKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRhWzBdLCAwLCBz
aC5sMDApOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKGRhdGFbMV0sIDAsIHNoLmwxXzEpOwor
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKGRhdGFbMl0sIDAsIHNoLmwxMCk7CisgICAgICAgIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0u
RnJvbUFycmF5VG9SZWYoZGF0YVszXSwgMCwgc2gubDExKTsKKyAgICAgICAgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlU
b1JlZihkYXRhWzRdLCAwLCBzaC5sMl8yKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRh
WzVdLCAwLCBzaC5sMl8xKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRhWzZdLCAwLCBz
aC5sMjApOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKGRhdGFbN10sIDAsIHNoLmwyMSk7Cisg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYoZGF0YVs4XSwgMCwgc2gubDIyKTsKKyAgICAgICAgcmV0
dXJuIHNoOworICAgIH07CisgICAgLy8gS2VlcCBmb3IgcmVmZXJlbmNlcy4KKyAgICAvKioKKyAg
ICAgKiBHZXRzIHRoZSBzcGhlcmljYWwgaGFybW9uaWNzIGZyb20gcG9seW5vbWlhbAorICAgICAq
IEBwYXJhbSBwb2x5bm9taWFsIHRoZSBzcGhlcmljYWwgcG9seW5vbWlhbAorICAgICAqIEByZXR1
cm5zIHRoZSBzcGhlcmljYWwgaGFybW9uaWNzCisgICAgICovCisgICAgU3BoZXJpY2FsSGFybW9u
aWNzLkZyb21Qb2x5bm9taWFsID0gZnVuY3Rpb24gKHBvbHlub21pYWwpIHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IG5ldyBTcGhlcmljYWxIYXJtb25pY3MoKTsKKyAgICAgICAgcmVzdWx0LmwwMCA9
IHBvbHlub21pYWwueHguc2NhbGUoMC4zNzYxMjcpLmFkZChwb2x5bm9taWFsLnl5LnNjYWxlKDAu
Mzc2MTI3KSkuYWRkKHBvbHlub21pYWwuenouc2NhbGUoMC4zNzYxMjYpKTsKKyAgICAgICAgcmVz
dWx0LmwxXzEgPSBwb2x5bm9taWFsLnkuc2NhbGUoMC45NzcyMDQpOworICAgICAgICByZXN1bHQu
bDEwID0gcG9seW5vbWlhbC56LnNjYWxlKDAuOTc3MjA0KTsKKyAgICAgICAgcmVzdWx0LmwxMSA9
IHBvbHlub21pYWwueC5zY2FsZSgwLjk3NzIwNCk7CisgICAgICAgIHJlc3VsdC5sMl8yID0gcG9s
eW5vbWlhbC54eS5zY2FsZSgxLjE2NTM4KTsKKyAgICAgICAgcmVzdWx0LmwyXzEgPSBwb2x5bm9t
aWFsLnl6LnNjYWxlKDEuMTY1MzgpOworICAgICAgICByZXN1bHQubDIwID0gcG9seW5vbWlhbC56
ei5zY2FsZSgxLjM0NTY3KS5zdWJ0cmFjdChwb2x5bm9taWFsLnh4LnNjYWxlKDAuNjcyODM0KSku
c3VidHJhY3QocG9seW5vbWlhbC55eS5zY2FsZSgwLjY3MjgzNCkpOworICAgICAgICByZXN1bHQu
bDIxID0gcG9seW5vbWlhbC56eC5zY2FsZSgxLjE2NTM4KTsKKyAgICAgICAgcmVzdWx0LmwyMiA9
IHBvbHlub21pYWwueHguc2NhbGUoMS4xNjUzOCkuc3VidHJhY3QocG9seW5vbWlhbC55eS5zY2Fs
ZSgxLjE2NTM4KSk7CisgICAgICAgIHJlc3VsdC5sMV8xLnNjYWxlSW5QbGFjZSgtMSk7CisgICAg
ICAgIHJlc3VsdC5sMTEuc2NhbGVJblBsYWNlKC0xKTsKKyAgICAgICAgcmVzdWx0LmwyXzEuc2Nh
bGVJblBsYWNlKC0xKTsKKyAgICAgICAgcmVzdWx0LmwyMS5zY2FsZUluUGxhY2UoLTEpOworICAg
ICAgICByZXN1bHQuc2NhbGVJblBsYWNlKE1hdGguUEkpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07CisgICAgcmV0dXJuIFNwaGVyaWNhbEhhcm1vbmljczsKK30oKSk7CisKKy8qKgor
ICogQ2xhc3MgcmVwcmVzZW50aW5nIHNwaGVyaWNhbCBwb2x5bm9taWFsIGNvZWZmaWNpZW50cyB0
byB0aGUgM3JkIGRlZ3JlZQorICovCit2YXIgU3BoZXJpY2FsUG9seW5vbWlhbCA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBTcGhlcmljYWxQb2x5bm9taWFsKCkg
eworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHggY29lZmZpY2llbnRzIG9mIHRoZSBzcGhl
cmljYWwgcG9seW5vbWlhbAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy54ID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgeSBjb2VmZmljaWVudHMgb2YgdGhlIHNwaGVy
aWNhbCBwb2x5bm9taWFsCisgICAgICAgICAqLworICAgICAgICB0aGlzLnkgPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB6IGNvZWZmaWNpZW50cyBvZiB0aGUgc3BoZXJp
Y2FsIHBvbHlub21pYWwKKyAgICAgICAgICovCisgICAgICAgIHRoaXMueiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHh4IGNvZWZmaWNpZW50cyBvZiB0aGUgc3BoZXJp
Y2FsIHBvbHlub21pYWwKKyAgICAgICAgICovCisgICAgICAgIHRoaXMueHggPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB5eSBjb2VmZmljaWVudHMgb2YgdGhlIHNwaGVy
aWNhbCBwb2x5bm9taWFsCisgICAgICAgICAqLworICAgICAgICB0aGlzLnl5ID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgenogY29lZmZpY2llbnRzIG9mIHRoZSBzcGhl
cmljYWwgcG9seW5vbWlhbAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy56eiA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygp
OworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHh5IGNvZWZmaWNpZW50cyBvZiB0aGUgc3Bo
ZXJpY2FsIHBvbHlub21pYWwKKyAgICAgICAgICovCisgICAgICAgIHRoaXMueHkgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8o
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB5eiBjb2VmZmljaWVudHMgb2YgdGhlIHNw
aGVyaWNhbCBwb2x5bm9taWFsCisgICAgICAgICAqLworICAgICAgICB0aGlzLnl6ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgenggY29lZmZpY2llbnRzIG9mIHRoZSBz
cGhlcmljYWwgcG9seW5vbWlhbAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy56eCA9IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVy
bygpOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3BoZXJpY2FsUG9seW5vbWlh
bC5wcm90b3R5cGUsICJwcmVTY2FsZWRIYXJtb25pY3MiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaGUgc3BoZXJpY2FsIGhhcm1vbmljcyB1c2VkIHRvIGNyZWF0ZSB0aGUgcG9seW5vbWlh
bHMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy5faGFybW9uaWNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5faGFybW9uaWNz
ID0gU3BoZXJpY2FsSGFybW9uaWNzLkZyb21Qb2x5bm9taWFsKHRoaXMpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCF0aGlzLl9oYXJtb25pY3MucHJlU2NhbGVkKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5faGFybW9uaWNzLnByZVNjYWxlRm9yUmVuZGVyaW5nKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFybW9uaWNzOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGFuIGFtYmllbnQgY29sb3IgdG8gdGhlIHNwaGVy
aWNhbCBwb2x5bm9taWFsCisgICAgICogQHBhcmFtIGNvbG9yIHRoZSBjb2xvciB0byBhZGQKKyAg
ICAgKi8KKyAgICBTcGhlcmljYWxQb2x5bm9taWFsLnByb3RvdHlwZS5hZGRBbWJpZW50ID0gZnVu
Y3Rpb24gKGNvbG9yKSB7CisgICAgICAgIHZhciBjb2xvclZlY3RvciA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKGNvbG9yLnIs
IGNvbG9yLmcsIGNvbG9yLmIpOworICAgICAgICB0aGlzLnh4ID0gdGhpcy54eC5hZGQoY29sb3JW
ZWN0b3IpOworICAgICAgICB0aGlzLnl5ID0gdGhpcy55eS5hZGQoY29sb3JWZWN0b3IpOworICAg
ICAgICB0aGlzLnp6ID0gdGhpcy56ei5hZGQoY29sb3JWZWN0b3IpOworICAgIH07CisgICAgLyoq
CisgICAgICogU2NhbGVzIHRoZSBzcGhlcmljYWwgcG9seW5vbWlhbCBieSB0aGUgZ2l2ZW4gYW1v
dW50CisgICAgICogQHBhcmFtIHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUKKyAgICAgKi8KKyAg
ICBTcGhlcmljYWxQb2x5bm9taWFsLnByb3RvdHlwZS5zY2FsZUluUGxhY2UgPSBmdW5jdGlvbiAo
c2NhbGUpIHsKKyAgICAgICAgdGhpcy54LnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgICAgIHRo
aXMueS5zY2FsZUluUGxhY2Uoc2NhbGUpOworICAgICAgICB0aGlzLnouc2NhbGVJblBsYWNlKHNj
YWxlKTsKKyAgICAgICAgdGhpcy54eC5zY2FsZUluUGxhY2Uoc2NhbGUpOworICAgICAgICB0aGlz
Lnl5LnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgICAgIHRoaXMuenouc2NhbGVJblBsYWNlKHNj
YWxlKTsKKyAgICAgICAgdGhpcy55ei5zY2FsZUluUGxhY2Uoc2NhbGUpOworICAgICAgICB0aGlz
Lnp4LnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgICAgIHRoaXMueHkuc2NhbGVJblBsYWNlKHNj
YWxlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHNwaGVyaWNhbCBwb2x5bm9t
aWFsIGZyb20gaGFybW9uaWNzCisgICAgICogQHBhcmFtIGhhcm1vbmljcyB0aGUgc3BoZXJpY2Fs
IGhhcm1vbmljcworICAgICAqIEByZXR1cm5zIHRoZSBzcGhlcmljYWwgcG9seW5vbWlhbAorICAg
ICAqLworICAgIFNwaGVyaWNhbFBvbHlub21pYWwuRnJvbUhhcm1vbmljcyA9IGZ1bmN0aW9uICho
YXJtb25pY3MpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBTcGhlcmljYWxQb2x5bm9taWFs
KCk7CisgICAgICAgIHJlc3VsdC5faGFybW9uaWNzID0gaGFybW9uaWNzOworICAgICAgICByZXN1
bHQueCA9IGhhcm1vbmljcy5sMTEuc2NhbGUoMS4wMjMzMykuc2NhbGUoLTEpOworICAgICAgICBy
ZXN1bHQueSA9IGhhcm1vbmljcy5sMV8xLnNjYWxlKDEuMDIzMzMpLnNjYWxlKC0xKTsKKyAgICAg
ICAgcmVzdWx0LnogPSBoYXJtb25pY3MubDEwLnNjYWxlKDEuMDIzMzMpOworICAgICAgICByZXN1
bHQueHggPSBoYXJtb25pY3MubDAwLnNjYWxlKDAuODg2Mjc3KS5zdWJ0cmFjdChoYXJtb25pY3Mu
bDIwLnNjYWxlKDAuMjQ3NzA4KSkuYWRkKGhhcm1vbmljcy5sMjIuc2NhbGUoMC40MjkwNDMpKTsK
KyAgICAgICAgcmVzdWx0Lnl5ID0gaGFybW9uaWNzLmwwMC5zY2FsZSgwLjg4NjI3Nykuc3VidHJh
Y3QoaGFybW9uaWNzLmwyMC5zY2FsZSgwLjI0NzcwOCkpLnN1YnRyYWN0KGhhcm1vbmljcy5sMjIu
c2NhbGUoMC40MjkwNDMpKTsKKyAgICAgICAgcmVzdWx0Lnp6ID0gaGFybW9uaWNzLmwwMC5zY2Fs
ZSgwLjg4NjI3NykuYWRkKGhhcm1vbmljcy5sMjAuc2NhbGUoMC40OTU0MTcpKTsKKyAgICAgICAg
cmVzdWx0Lnl6ID0gaGFybW9uaWNzLmwyXzEuc2NhbGUoMC44NTgwODYpLnNjYWxlKC0xKTsKKyAg
ICAgICAgcmVzdWx0Lnp4ID0gaGFybW9uaWNzLmwyMS5zY2FsZSgwLjg1ODA4Nikuc2NhbGUoLTEp
OworICAgICAgICByZXN1bHQueHkgPSBoYXJtb25pY3MubDJfMi5zY2FsZSgwLjg1ODA4Nik7Cisg
ICAgICAgIHJlc3VsdC5zY2FsZUluUGxhY2UoMS4wIC8gTWF0aC5QSSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgc3BoZXJpY2Fs
IHBvbHlub21pYWwgZnJvbSBhbiBhcnJheS4KKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRo
ZSA5eDMgY29lZmZpY2llbnRzICh4LCB5LCB6LCB4eCwgeXksIHp6LCB5eiwgengsIHh5KQorICAg
ICAqIEByZXR1cm5zIHRoZSBzcGhlcmljYWwgcG9seW5vbWlhbAorICAgICAqLworICAgIFNwaGVy
aWNhbFBvbHlub21pYWwuRnJvbUFycmF5ID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdmFy
IHNwID0gbmV3IFNwaGVyaWNhbFBvbHlub21pYWwoKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1Jl
ZihkYXRhWzBdLCAwLCBzcC54KTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRhWzFdLCAw
LCBzcC55KTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRhWzJdLCAwLCBzcC56KTsKKyAg
ICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRhWzNdLCAwLCBzcC54eCk7CisgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJv
bUFycmF5VG9SZWYoZGF0YVs0XSwgMCwgc3AueXkpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVm
KGRhdGFbNV0sIDAsIHNwLnp6KTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRhWzZdLCAw
LCBzcC55eik7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYoZGF0YVs3XSwgMCwgc3AuengpOwor
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKGRhdGFbOF0sIDAsIHNwLnh5KTsKKyAgICAgICAgcmV0
dXJuIHNwOworICAgIH07CisgICAgcmV0dXJuIFNwaGVyaWNhbFBvbHlub21pYWw7Cit9KCkpOwor
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy9CdWlsZGVycy9ib3hCdWlsZGVyLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTWVzaGVzL0J1aWxkZXJzL2JveEJ1aWxkZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJveEJ1aWxk
ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm94QnVpbGRlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gQm94QnVpbGRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2gudmVydGV4
RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0ZXhEYXRhLnRzIik7CisKKworCisKK19tZXNoX3Zl
cnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdLkNyZWF0
ZUJveCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgdmFyIG5iRmFjZXMgPSA2OworICAgIHZh
ciBpbmRpY2VzID0gWzAsIDEsIDIsIDAsIDIsIDMsIDQsIDUsIDYsIDQsIDYsIDcsIDgsIDksIDEw
LCA4LCAxMCwgMTEsIDEyLCAxMywgMTQsIDEyLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE2LCAxOCwg
MTksIDIwLCAyMSwgMjIsIDIwLCAyMiwgMjNdOworICAgIHZhciBub3JtYWxzID0gWzAsIDAsIDEs
IDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEs
IDAsIDAsIC0xLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAtMSwgMCwgMCwg
LTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwg
MCwgMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDBdOworICAgIHZh
ciB1dnMgPSBbXTsKKyAgICB2YXIgcG9zaXRpb25zID0gW107CisgICAgdmFyIHdpZHRoID0gb3B0
aW9ucy53aWR0aCB8fCBvcHRpb25zLnNpemUgfHwgMTsKKyAgICB2YXIgaGVpZ2h0ID0gb3B0aW9u
cy5oZWlnaHQgfHwgb3B0aW9ucy5zaXplIHx8IDE7CisgICAgdmFyIGRlcHRoID0gb3B0aW9ucy5k
ZXB0aCB8fCBvcHRpb25zLnNpemUgfHwgMTsKKyAgICB2YXIgd3JhcCA9IG9wdGlvbnMud3JhcCB8
fCBmYWxzZTsKKyAgICB2YXIgdG9wQmFzZUF0ID0gKG9wdGlvbnMudG9wQmFzZUF0ID09PSB2b2lk
IDApID8gMSA6IG9wdGlvbnMudG9wQmFzZUF0OworICAgIHZhciBib3R0b21CYXNlQXQgPSAob3B0
aW9ucy5ib3R0b21CYXNlQXQgPT09IHZvaWQgMCkgPyAwIDogb3B0aW9ucy5ib3R0b21CYXNlQXQ7
CisgICAgdG9wQmFzZUF0ID0gKHRvcEJhc2VBdCArIDQpICUgNDsgLy8gcGxhY2VzIHZhbHVlcyBh
cyAwIHRvIDMKKyAgICBib3R0b21CYXNlQXQgPSAoYm90dG9tQmFzZUF0ICsgNCkgJSA0OyAvLyBw
bGFjZXMgdmFsdWVzIGFzIDAgdG8gMworICAgIHZhciB0b3BPcmRlciA9IFsyLCAwLCAzLCAxXTsK
KyAgICB2YXIgYm90dG9tT3JkZXIgPSBbMiwgMCwgMSwgM107CisgICAgdmFyIHRvcEluZGV4ID0g
dG9wT3JkZXJbdG9wQmFzZUF0XTsKKyAgICB2YXIgYm90dG9tSW5kZXggPSBib3R0b21PcmRlclti
b3R0b21CYXNlQXRdOworICAgIHZhciBiYXNlUG9zaXRpb25zID0gWzEsIC0xLCAxLCAtMSwgLTEs
IDEsIC0xLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAtMSwgLTEsIDEsIC0xLCAtMSwgLTEsIC0xLCAx
LCAtMSwgLTEsIDEsIDEsIC0xLCAxLCAtMSwgLTEsIDEsIC0xLCAxLCAxLCAxLCAxLCAtMSwgMSwg
MSwgLTEsIC0xLCAxLCAtMSwgLTEsIC0xLCAtMSwgMSwgLTEsIC0xLCAxLCAxLCAtMSwgMSwgLTEs
IDEsIDEsIC0xLCAxLCAxLCAxLCAxLCAtMSwgMSwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg
LTEsIDFdOworICAgIGlmICh3cmFwKSB7CisgICAgICAgIGluZGljZXMgPSBbMiwgMywgMCwgMiwg
MCwgMSwgNCwgNSwgNiwgNCwgNiwgNywgOSwgMTAsIDExLCA5LCAxMSwgOCwgMTIsIDE0LCAxNSwg
MTIsIDEzLCAxNF07CisgICAgICAgIGJhc2VQb3NpdGlvbnMgPSBbLTEsIDEsIDEsIDEsIDEsIDEs
IDEsIC0xLCAxLCAtMSwgLTEsIDEsIDEsIDEsIC0xLCAtMSwgMSwgLTEsIC0xLCAtMSwgLTEsIDEs
IC0xLCAtMSwgMSwgMSwgMSwgMSwgMSwgLTEsIDEsIC0xLCAtMSwgMSwgLTEsIDEsIC0xLCAxLCAt
MSwgLTEsIDEsIDEsIC0xLCAtMSwgMSwgLTEsIC0xLCAtMV07CisgICAgICAgIHZhciB0b3BGYWNl
QmFzZSA9IFtbMSwgMSwgMV0sIFstMSwgMSwgMV0sIFstMSwgMSwgLTFdLCBbMSwgMSwgLTFdXTsK
KyAgICAgICAgdmFyIGJvdHRvbUZhY2VCYXNlID0gW1stMSwgLTEsIDFdLCBbMSwgLTEsIDFdLCBb
MSwgLTEsIC0xXSwgWy0xLCAtMSwgLTFdXTsKKyAgICAgICAgdmFyIHRvcEZhY2VPcmRlciA9IFsx
NywgMTgsIDE5LCAxNl07CisgICAgICAgIHZhciBib3R0b21GYWNlT3JkZXIgPSBbMjIsIDIzLCAy
MCwgMjFdOworICAgICAgICB3aGlsZSAodG9wSW5kZXggPiAwKSB7CisgICAgICAgICAgICB0b3BG
YWNlQmFzZS51bnNoaWZ0KHRvcEZhY2VCYXNlLnBvcCgpKTsKKyAgICAgICAgICAgIHRvcEZhY2VP
cmRlci51bnNoaWZ0KHRvcEZhY2VPcmRlci5wb3AoKSk7CisgICAgICAgICAgICB0b3BJbmRleC0t
OworICAgICAgICB9CisgICAgICAgIHdoaWxlIChib3R0b21JbmRleCA+IDApIHsKKyAgICAgICAg
ICAgIGJvdHRvbUZhY2VCYXNlLnVuc2hpZnQoYm90dG9tRmFjZUJhc2UucG9wKCkpOworICAgICAg
ICAgICAgYm90dG9tRmFjZU9yZGVyLnVuc2hpZnQoYm90dG9tRmFjZU9yZGVyLnBvcCgpKTsKKyAg
ICAgICAgICAgIGJvdHRvbUluZGV4LS07CisgICAgICAgIH0KKyAgICAgICAgdG9wRmFjZUJhc2Ug
PSB0b3BGYWNlQmFzZS5mbGF0KCk7CisgICAgICAgIGJvdHRvbUZhY2VCYXNlID0gYm90dG9tRmFj
ZUJhc2UuZmxhdCgpOworICAgICAgICBiYXNlUG9zaXRpb25zID0gYmFzZVBvc2l0aW9ucy5jb25j
YXQodG9wRmFjZUJhc2UpLmNvbmNhdChib3R0b21GYWNlQmFzZSk7CisgICAgICAgIGluZGljZXMu
cHVzaCh0b3BGYWNlT3JkZXJbMF0sIHRvcEZhY2VPcmRlclsyXSwgdG9wRmFjZU9yZGVyWzNdLCB0
b3BGYWNlT3JkZXJbMF0sIHRvcEZhY2VPcmRlclsxXSwgdG9wRmFjZU9yZGVyWzJdKTsKKyAgICAg
ICAgaW5kaWNlcy5wdXNoKGJvdHRvbUZhY2VPcmRlclswXSwgYm90dG9tRmFjZU9yZGVyWzJdLCBi
b3R0b21GYWNlT3JkZXJbM10sIGJvdHRvbUZhY2VPcmRlclswXSwgYm90dG9tRmFjZU9yZGVyWzFd
LCBib3R0b21GYWNlT3JkZXJbMl0pOworICAgIH0KKyAgICB2YXIgc2NhbGVBcnJheSA9IFt3aWR0
aCAvIDIsIGhlaWdodCAvIDIsIGRlcHRoIC8gMl07CisgICAgcG9zaXRpb25zID0gYmFzZVBvc2l0
aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGN1cnJlbnRJ
bmRleCkgeyByZXR1cm4gYWNjdW11bGF0b3IuY29uY2F0KGN1cnJlbnRWYWx1ZSAqIHNjYWxlQXJy
YXlbY3VycmVudEluZGV4ICUgM10pOyB9LCBbXSk7CisgICAgdmFyIHNpZGVPcmllbnRhdGlvbiA9
IChvcHRpb25zLnNpZGVPcmllbnRhdGlvbiA9PT0gMCkgPyAwIDogb3B0aW9ucy5zaWRlT3JpZW50
YXRpb24gfHwgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZXJ0ZXhEYXRhIl0uREVGQVVMVFNJREU7CisgICAgdmFyIGZhY2VVViA9IG9wdGlvbnMuZmFjZVVW
IHx8IG5ldyBBcnJheSg2KTsKKyAgICB2YXIgZmFjZUNvbG9ycyA9IG9wdGlvbnMuZmFjZUNvbG9y
czsKKyAgICB2YXIgY29sb3JzID0gW107CisgICAgLy8gZGVmYXVsdCBmYWNlIGNvbG9ycyBhbmQg
VVYgaWYgdW5kZWZpbmVkCisgICAgZm9yICh2YXIgZiA9IDA7IGYgPCA2OyBmKyspIHsKKyAgICAg
ICAgaWYgKGZhY2VVVltmXSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBmYWNlVVZbZl0g
PSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjQiXSgwLCAwLCAxLCAxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmFjZUNvbG9ycyAm
JiBmYWNlQ29sb3JzW2ZdID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGZhY2VDb2xvcnNb
Zl0gPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
Q29sb3I0Il0oMSwgMSwgMSwgMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gQ3JlYXRlIGVh
Y2ggZmFjZSBpbiB0dXJuLgorICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBuYkZhY2Vz
OyBpbmRleCsrKSB7CisgICAgICAgIHV2cy5wdXNoKGZhY2VVVltpbmRleF0ueiwgZmFjZVVWW2lu
ZGV4XS53KTsKKyAgICAgICAgdXZzLnB1c2goZmFjZVVWW2luZGV4XS54LCBmYWNlVVZbaW5kZXhd
LncpOworICAgICAgICB1dnMucHVzaChmYWNlVVZbaW5kZXhdLngsIGZhY2VVVltpbmRleF0ueSk7
CisgICAgICAgIHV2cy5wdXNoKGZhY2VVVltpbmRleF0ueiwgZmFjZVVWW2luZGV4XS55KTsKKyAg
ICAgICAgaWYgKGZhY2VDb2xvcnMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwg
NDsgYysrKSB7CisgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goZmFjZUNvbG9yc1tpbmRleF0u
ciwgZmFjZUNvbG9yc1tpbmRleF0uZywgZmFjZUNvbG9yc1tpbmRleF0uYiwgZmFjZUNvbG9yc1tp
bmRleF0uYSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gc2lkZXMK
KyAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eERhdGEiXS5fQ29tcHV0ZVNpZGVzKHNpZGVPcmllbnRhdGlvbiwgcG9zaXRpb25zLCBpbmRpY2Vz
LCBub3JtYWxzLCB1dnMsIG9wdGlvbnMuZnJvbnRVVnMsIG9wdGlvbnMuYmFja1VWcyk7CisgICAg
Ly8gUmVzdWx0CisgICAgdmFyIHZlcnRleERhdGEgPSBuZXcgX21lc2hfdmVydGV4RGF0YV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAgICB2ZXJ0ZXhEYXRh
LmluZGljZXMgPSBpbmRpY2VzOworICAgIHZlcnRleERhdGEucG9zaXRpb25zID0gcG9zaXRpb25z
OworICAgIHZlcnRleERhdGEubm9ybWFscyA9IG5vcm1hbHM7CisgICAgdmVydGV4RGF0YS51dnMg
PSB1dnM7CisgICAgaWYgKGZhY2VDb2xvcnMpIHsKKyAgICAgICAgdmFyIHRvdGFsQ29sb3JzID0g
KHNpZGVPcmllbnRhdGlvbiA9PT0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uRE9VQkxFU0lERSkgPyBjb2xvcnMuY29uY2F0KGNvbG9y
cykgOiBjb2xvcnM7CisgICAgICAgIHZlcnRleERhdGEuY29sb3JzID0gdG90YWxDb2xvcnM7Cisg
ICAgfQorICAgIHJldHVybiB2ZXJ0ZXhEYXRhOworfTsKK19tZXNoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk1lc2giXS5DcmVhdGVCb3ggPSBmdW5jdGlvbiAobmFtZSwgc2l6ZSwgc2Nl
bmUsIHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uKSB7CisgICAgaWYgKHNjZW5lID09PSB2b2lk
IDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIHNpemU6
IHNpemUsCisgICAgICAgIHNpZGVPcmllbnRhdGlvbjogc2lkZU9yaWVudGF0aW9uLAorICAgICAg
ICB1cGRhdGFibGU6IHVwZGF0YWJsZQorICAgIH07CisgICAgcmV0dXJuIEJveEJ1aWxkZXIuQ3Jl
YXRlQm94KG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKK307CisvKioKKyAqIENsYXNzIGNvbnRhaW5p
bmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWlsZCBtZXNoZXMKKyAq
LwordmFyIEJveEJ1aWxkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVu
Y3Rpb24gQm94QnVpbGRlcigpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGJv
eCBtZXNoCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBzaXplYCBzZXRzIHRoZSBzaXplIChmbG9h
dCkgb2YgZWFjaCBib3ggc2lkZSAoZGVmYXVsdCAxKQorICAgICAqICogWW91IGNhbiBzZXQgc29t
ZSBkaWZmZXJlbnQgYm94IGRpbWVuc2lvbnMgYnkgdXNpbmcgdGhlIHBhcmFtZXRlcnMgYHdpZHRo
YCwgYGhlaWdodGAgYW5kIGBkZXB0aGAgKGFsbCBieSBkZWZhdWx0IGhhdmUgdGhlIHNhbWUgdmFs
dWUgb2YgYHNpemVgKQorICAgICAqICogWW91IGNhbiBzZXQgZGlmZmVyZW50IGNvbG9ycyBhbmQg
ZGlmZmVyZW50IGltYWdlcyB0byBlYWNoIGJveCBzaWRlIGJ5IHVzaW5nIHRoZSBwYXJhbWV0ZXJz
IGBmYWNlQ29sb3JzYCAoYW4gYXJyYXkgb2YgNiBDb2xvcjMgZWxlbWVudHMpIGFuZCBgZmFjZVVW
YCAoYW4gYXJyYXkgb2YgNiBWZWN0b3I0IGVsZW1lbnRzKQorICAgICAqICogUGxlYXNlIHJlYWQg
dGhpcyB0dXRvcmlhbCA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2NyZWF0ZWJv
eF9wZXJfZmFjZV90ZXh0dXJlc19hbmRfY29sb3JzCisgICAgICogKiBZb3UgY2FuIGFsc28gc2V0
IHRoZSBtZXNoIHNpZGUgb3JpZW50YXRpb24gd2l0aCB0aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNo
LkZST05UU0lERSAoZGVmYXVsdCksIEJBQllMT04uTWVzaC5CQUNLU0lERSBvciBCQUJZTE9OLk1l
c2guRE9VQkxFU0lERQorICAgICAqICogSWYgeW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNo
LCB5b3UgY2FuIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3Ag
YW5kIHN0aWNrIHJlc3BlY3RpdmVseSBvbiB0aGUgZnJvbnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdp
dGggdGhlIHBhcmFtZXRlcnMgYGZyb250VVZzYCBhbmQgYGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0
YWlsIGhlcmUgOiBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJf
YmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRhdGlvbgorICAgICAqICogVGhlIG1lc2ggY2FuIGJl
IHNldCB0byB1cGRhdGFibGUgd2l0aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAg
KGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBj
aGFuZ2Ugb25jZSBjcmVhdGVkCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9zZXRfc2hhcGVzI2JveAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5h
bWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25z
IHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhl
IGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgYm94IG1lc2gKKyAgICAgKi8KKyAg
ICBCb3hCdWlsZGVyLkNyZWF0ZUJveCA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkg
eworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAg
ICAgdmFyIGJveCA9IG5ldyBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNo
Il0obmFtZSwgc2NlbmUpOworICAgICAgICBvcHRpb25zLnNpZGVPcmllbnRhdGlvbiA9IF9tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1lc2giXS5fR2V0RGVmYXVsdFNpZGVPcmll
bnRhdGlvbihvcHRpb25zLnNpZGVPcmllbnRhdGlvbik7CisgICAgICAgIGJveC5fb3JpZ2luYWxC
dWlsZGVyU2lkZU9yaWVudGF0aW9uID0gb3B0aW9ucy5zaWRlT3JpZW50YXRpb247CisgICAgICAg
IHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlQm94KG9wdGlvbnMpOworICAgICAgICB2ZXJ0ZXhE
YXRhLmFwcGx5VG9NZXNoKGJveCwgb3B0aW9ucy51cGRhdGFibGUpOworICAgICAgICByZXR1cm4g
Ym94OworICAgIH07CisgICAgcmV0dXJuIEJveEJ1aWxkZXI7Cit9KCkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1aWxkZXIudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1aWxkZXIudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
Q3lsaW5kZXJCdWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN5
bGluZGVyQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ3lsaW5kZXJCdWlsZGVyOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21h
dGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0
aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tZXNo
ICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3NjZW5lICovICIuL3Nj
ZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfYXhpc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWF0aHMvbWF0aC5heGlzICovICIuL01hdGhzL21hdGguYXhpcy50cyIpOworCisKKworCisKKwor
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRh
Il0uQ3JlYXRlQ3lsaW5kZXIgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgIHZhciBoZWlnaHQg
PSBvcHRpb25zLmhlaWdodCB8fCAyOworICAgIHZhciBkaWFtZXRlclRvcCA9IChvcHRpb25zLmRp
YW1ldGVyVG9wID09PSAwKSA/IDAgOiBvcHRpb25zLmRpYW1ldGVyVG9wIHx8IG9wdGlvbnMuZGlh
bWV0ZXIgfHwgMTsKKyAgICB2YXIgZGlhbWV0ZXJCb3R0b20gPSAob3B0aW9ucy5kaWFtZXRlckJv
dHRvbSA9PT0gMCkgPyAwIDogb3B0aW9ucy5kaWFtZXRlckJvdHRvbSB8fCBvcHRpb25zLmRpYW1l
dGVyIHx8IDE7CisgICAgZGlhbWV0ZXJUb3AgPSBkaWFtZXRlclRvcCB8fCAwLjAwMDAxOyAvLyBQ
cmV2ZW50IGJyb2tlbiBub3JtYWxzCisgICAgZGlhbWV0ZXJCb3R0b20gPSBkaWFtZXRlckJvdHRv
bSB8fCAwLjAwMDAxOyAvLyBQcmV2ZW50IGJyb2tlbiBub3JtYWxzCisgICAgdmFyIHRlc3NlbGxh
dGlvbiA9IG9wdGlvbnMudGVzc2VsbGF0aW9uIHx8IDI0OworICAgIHZhciBzdWJkaXZpc2lvbnMg
PSBvcHRpb25zLnN1YmRpdmlzaW9ucyB8fCAxOworICAgIHZhciBoYXNSaW5ncyA9IG9wdGlvbnMu
aGFzUmluZ3MgPyB0cnVlIDogZmFsc2U7CisgICAgdmFyIGVuY2xvc2UgPSBvcHRpb25zLmVuY2xv
c2UgPyB0cnVlIDogZmFsc2U7CisgICAgdmFyIGNhcCA9IChvcHRpb25zLmNhcCA9PT0gMCkgPyAw
IDogb3B0aW9ucy5jYXAgfHwgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVz
aCJdLkNBUF9BTEw7CisgICAgdmFyIGFyYyA9IG9wdGlvbnMuYXJjICYmIChvcHRpb25zLmFyYyA8
PSAwIHx8IG9wdGlvbnMuYXJjID4gMSkgPyAxLjAgOiBvcHRpb25zLmFyYyB8fCAxLjA7CisgICAg
dmFyIHNpZGVPcmllbnRhdGlvbiA9IChvcHRpb25zLnNpZGVPcmllbnRhdGlvbiA9PT0gMCkgPyAw
IDogb3B0aW9ucy5zaWRlT3JpZW50YXRpb24gfHwgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uREVGQVVMVFNJREU7CisgICAgdmFyIGZh
Y2VVViA9IG9wdGlvbnMuZmFjZVVWIHx8IG5ldyBBcnJheSgzKTsKKyAgICB2YXIgZmFjZUNvbG9y
cyA9IG9wdGlvbnMuZmFjZUNvbG9yczsKKyAgICAvLyBkZWZhdWx0IGZhY2UgY29sb3JzIGFuZCBV
ViBpZiB1bmRlZmluZWQKKyAgICB2YXIgcXVhZE5iID0gKGFyYyAhPT0gMSAmJiBlbmNsb3NlKSA/
IDIgOiAwOworICAgIHZhciByaW5nTmIgPSAoaGFzUmluZ3MpID8gc3ViZGl2aXNpb25zIDogMTsK
KyAgICB2YXIgc3VyZmFjZU5iID0gMiArICgxICsgcXVhZE5iKSAqIHJpbmdOYjsKKyAgICB2YXIg
ZjsKKyAgICBmb3IgKGYgPSAwOyBmIDwgc3VyZmFjZU5iOyBmKyspIHsKKyAgICAgICAgaWYgKGZh
Y2VDb2xvcnMgJiYgZmFjZUNvbG9yc1tmXSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBm
YWNlQ29sb3JzW2ZdID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIkNvbG9yNCJdKDEsIDEsIDEsIDEpOworICAgICAgICB9CisgICAgfQorICAgIGZv
ciAoZiA9IDA7IGYgPCBzdXJmYWNlTmI7IGYrKykgeworICAgICAgICBpZiAoZmFjZVVWICYmIGZh
Y2VVVltmXSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBmYWNlVVZbZl0gPSBuZXcgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjQiXSgw
LCAwLCAxLCAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2YXIgaW5kaWNlcyA9IG5ldyBBcnJh
eSgpOworICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgbm9ybWFscyA9
IG5ldyBBcnJheSgpOworICAgIHZhciB1dnMgPSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgY29sb3Jz
ID0gbmV3IEFycmF5KCk7CisgICAgdmFyIGFuZ2xlX3N0ZXAgPSBNYXRoLlBJICogMiAqIGFyYyAv
IHRlc3NlbGxhdGlvbjsKKyAgICB2YXIgYW5nbGU7CisgICAgdmFyIGg7CisgICAgdmFyIHJhZGl1
czsKKyAgICB2YXIgdGFuID0gKGRpYW1ldGVyQm90dG9tIC0gZGlhbWV0ZXJUb3ApIC8gMiAvIGhl
aWdodDsKKyAgICB2YXIgcmluZ1ZlcnRleCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgIHZhciByaW5nTm9ybWFs
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3Rv
cjMiXS5aZXJvKCk7CisgICAgdmFyIHJpbmdGaXJzdFZlcnRleCA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgIHZh
ciByaW5nRmlyc3ROb3JtYWwgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICB2YXIgcXVhZE5vcm1hbCA9IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVy
bygpOworICAgIHZhciBZID0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJBeGlzIl0uWTsKKyAgICAvLyBwb3NpdGlvbnMsIG5vcm1hbHMsIHV2cworICAgIHZh
ciBpOworICAgIHZhciBqOworICAgIHZhciByOworICAgIHZhciByaW5nSWR4ID0gMTsKKyAgICB2
YXIgcyA9IDE7IC8vIHN1cmZhY2UgaW5kZXgKKyAgICB2YXIgY3MgPSAwOworICAgIHZhciB2ID0g
MDsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IHN1YmRpdmlzaW9uczsgaSsrKSB7CisgICAgICAgIGgg
PSBpIC8gc3ViZGl2aXNpb25zOworICAgICAgICByYWRpdXMgPSAoaCAqIChkaWFtZXRlclRvcCAt
IGRpYW1ldGVyQm90dG9tKSArIGRpYW1ldGVyQm90dG9tKSAvIDI7CisgICAgICAgIHJpbmdJZHgg
PSAoaGFzUmluZ3MgJiYgaSAhPT0gMCAmJiBpICE9PSBzdWJkaXZpc2lvbnMpID8gMiA6IDE7Cisg
ICAgICAgIGZvciAociA9IDA7IHIgPCByaW5nSWR4OyByKyspIHsKKyAgICAgICAgICAgIGlmICho
YXNSaW5ncykgeworICAgICAgICAgICAgICAgIHMgKz0gcjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChlbmNsb3NlKSB7CisgICAgICAgICAgICAgICAgcyArPSAyICogcjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPD0gdGVzc2VsbGF0aW9uOyBqKysp
IHsKKyAgICAgICAgICAgICAgICBhbmdsZSA9IGogKiBhbmdsZV9zdGVwOworICAgICAgICAgICAg
ICAgIC8vIHBvc2l0aW9uCisgICAgICAgICAgICAgICAgcmluZ1ZlcnRleC54ID0gTWF0aC5jb3Mo
LWFuZ2xlKSAqIHJhZGl1czsKKyAgICAgICAgICAgICAgICByaW5nVmVydGV4LnkgPSAtaGVpZ2h0
IC8gMiArIGggKiBoZWlnaHQ7CisgICAgICAgICAgICAgICAgcmluZ1ZlcnRleC56ID0gTWF0aC5z
aW4oLWFuZ2xlKSAqIHJhZGl1czsKKyAgICAgICAgICAgICAgICAvLyBub3JtYWwKKyAgICAgICAg
ICAgICAgICBpZiAoZGlhbWV0ZXJUb3AgPT09IDAgJiYgaSA9PT0gc3ViZGl2aXNpb25zKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vIHRvcCBjYXAsIHJldXNlIGZvcm1lciBub3JtYWxz
CisgICAgICAgICAgICAgICAgICAgIHJpbmdOb3JtYWwueCA9IG5vcm1hbHNbbm9ybWFscy5sZW5n
dGggLSAodGVzc2VsbGF0aW9uICsgMSkgKiAzXTsKKyAgICAgICAgICAgICAgICAgICAgcmluZ05v
cm1hbC55ID0gbm9ybWFsc1tub3JtYWxzLmxlbmd0aCAtICh0ZXNzZWxsYXRpb24gKyAxKSAqIDMg
KyAxXTsKKyAgICAgICAgICAgICAgICAgICAgcmluZ05vcm1hbC56ID0gbm9ybWFsc1tub3JtYWxz
Lmxlbmd0aCAtICh0ZXNzZWxsYXRpb24gKyAxKSAqIDMgKyAyXTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJpbmdOb3JtYWwu
eCA9IHJpbmdWZXJ0ZXgueDsKKyAgICAgICAgICAgICAgICAgICAgcmluZ05vcm1hbC56ID0gcmlu
Z1ZlcnRleC56OworICAgICAgICAgICAgICAgICAgICByaW5nTm9ybWFsLnkgPSBNYXRoLnNxcnQo
cmluZ05vcm1hbC54ICogcmluZ05vcm1hbC54ICsgcmluZ05vcm1hbC56ICogcmluZ05vcm1hbC56
KSAqIHRhbjsKKyAgICAgICAgICAgICAgICAgICAgcmluZ05vcm1hbC5ub3JtYWxpemUoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8ga2VlcCBmaXJzdCByaW5nIHZlcnRl
eCB2YWx1ZXMgZm9yIGVuY2xvc2UKKyAgICAgICAgICAgICAgICBpZiAoaiA9PT0gMCkgeworICAg
ICAgICAgICAgICAgICAgICByaW5nRmlyc3RWZXJ0ZXguY29weUZyb20ocmluZ1ZlcnRleCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJpbmdGaXJzdE5vcm1hbC5jb3B5RnJvbShyaW5nTm9ybWFsKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2gocmluZ1Zl
cnRleC54LCByaW5nVmVydGV4LnksIHJpbmdWZXJ0ZXgueik7CisgICAgICAgICAgICAgICAgbm9y
bWFscy5wdXNoKHJpbmdOb3JtYWwueCwgcmluZ05vcm1hbC55LCByaW5nTm9ybWFsLnopOworICAg
ICAgICAgICAgICAgIGlmIChoYXNSaW5ncykgeworICAgICAgICAgICAgICAgICAgICB2ID0gKGNz
ICE9PSBzKSA/IGZhY2VVVltzXS55IDogZmFjZVVWW3NdLnc7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2ID0gZmFjZVVWW3Nd
LnkgKyAoZmFjZVVWW3NdLncgLSBmYWNlVVZbc10ueSkgKiBoOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB1dnMucHVzaChmYWNlVVZbc10ueCArIChmYWNlVVZbc10ueiAtIGZh
Y2VVVltzXS54KSAqIGogLyB0ZXNzZWxsYXRpb24sIHYpOworICAgICAgICAgICAgICAgIGlmIChm
YWNlQ29sb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbG9ycy5wdXNoKGZhY2VDb2xvcnNb
c10uciwgZmFjZUNvbG9yc1tzXS5nLCBmYWNlQ29sb3JzW3NdLmIsIGZhY2VDb2xvcnNbc10uYSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gaWYgZW5j
bG9zZSwgYWRkIGZvdXIgdmVydGljZXMgYW5kIHRoZWlyIGRlZGljYXRlZCBub3JtYWxzCisgICAg
ICAgICAgICBpZiAoYXJjICE9PSAxICYmIGVuY2xvc2UpIHsKKyAgICAgICAgICAgICAgICBwb3Np
dGlvbnMucHVzaChyaW5nVmVydGV4LngsIHJpbmdWZXJ0ZXgueSwgcmluZ1ZlcnRleC56KTsKKyAg
ICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCgwLCByaW5nVmVydGV4LnksIDApOworICAgICAg
ICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKDAsIHJpbmdWZXJ0ZXgueSwgMCk7CisgICAgICAgICAg
ICAgICAgcG9zaXRpb25zLnB1c2gocmluZ0ZpcnN0VmVydGV4LngsIHJpbmdGaXJzdFZlcnRleC55
LCByaW5nRmlyc3RWZXJ0ZXgueik7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Dcm9zc1RvUmVmKFksIHJp
bmdOb3JtYWwsIHF1YWROb3JtYWwpOworICAgICAgICAgICAgICAgIHF1YWROb3JtYWwubm9ybWFs
aXplKCk7CisgICAgICAgICAgICAgICAgbm9ybWFscy5wdXNoKHF1YWROb3JtYWwueCwgcXVhZE5v
cm1hbC55LCBxdWFkTm9ybWFsLnosIHF1YWROb3JtYWwueCwgcXVhZE5vcm1hbC55LCBxdWFkTm9y
bWFsLnopOworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZihyaW5nRmlyc3ROb3JtYWwsIFks
IHF1YWROb3JtYWwpOworICAgICAgICAgICAgICAgIHF1YWROb3JtYWwubm9ybWFsaXplKCk7Cisg
ICAgICAgICAgICAgICAgbm9ybWFscy5wdXNoKHF1YWROb3JtYWwueCwgcXVhZE5vcm1hbC55LCBx
dWFkTm9ybWFsLnosIHF1YWROb3JtYWwueCwgcXVhZE5vcm1hbC55LCBxdWFkTm9ybWFsLnopOwor
ICAgICAgICAgICAgICAgIGlmIChoYXNSaW5ncykgeworICAgICAgICAgICAgICAgICAgICB2ID0g
KGNzICE9PSBzKSA/IGZhY2VVVltzICsgMV0ueSA6IGZhY2VVVltzICsgMV0udzsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHYg
PSBmYWNlVVZbcyArIDFdLnkgKyAoZmFjZVVWW3MgKyAxXS53IC0gZmFjZVVWW3MgKyAxXS55KSAq
IGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHV2cy5wdXNoKGZhY2VVVltz
ICsgMV0ueCwgdik7CisgICAgICAgICAgICAgICAgdXZzLnB1c2goZmFjZVVWW3MgKyAxXS56LCB2
KTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzUmluZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAg
diA9IChjcyAhPT0gcykgPyBmYWNlVVZbcyArIDJdLnkgOiBmYWNlVVZbcyArIDJdLnc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB2ID0gZmFjZVVWW3MgKyAyXS55ICsgKGZhY2VVVltzICsgMl0udyAtIGZhY2VVVltzICsgMl0u
eSkgKiBoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1dnMucHVzaChmYWNl
VVZbcyArIDJdLngsIHYpOworICAgICAgICAgICAgICAgIHV2cy5wdXNoKGZhY2VVVltzICsgMl0u
eiwgdik7CisgICAgICAgICAgICAgICAgaWYgKGZhY2VDb2xvcnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29sb3JzLnB1c2goZmFjZUNvbG9yc1tzICsgMV0uciwgZmFjZUNvbG9yc1tzICsgMV0u
ZywgZmFjZUNvbG9yc1tzICsgMV0uYiwgZmFjZUNvbG9yc1tzICsgMV0uYSk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbG9ycy5wdXNoKGZhY2VDb2xvcnNbcyArIDFdLnIsIGZhY2VDb2xvcnNbcyAr
IDFdLmcsIGZhY2VDb2xvcnNbcyArIDFdLmIsIGZhY2VDb2xvcnNbcyArIDFdLmEpOworICAgICAg
ICAgICAgICAgICAgICBjb2xvcnMucHVzaChmYWNlQ29sb3JzW3MgKyAyXS5yLCBmYWNlQ29sb3Jz
W3MgKyAyXS5nLCBmYWNlQ29sb3JzW3MgKyAyXS5iLCBmYWNlQ29sb3JzW3MgKyAyXS5hKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goZmFjZUNvbG9yc1tzICsgMl0uciwgZmFjZUNv
bG9yc1tzICsgMl0uZywgZmFjZUNvbG9yc1tzICsgMl0uYiwgZmFjZUNvbG9yc1tzICsgMl0uYSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNzICE9
PSBzKSB7CisgICAgICAgICAgICAgICAgY3MgPSBzOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIC8vIGluZGljZXMKKyAgICB2YXIgZSA9IChhcmMgIT09IDEgJiYgZW5jbG9z
ZSkgPyB0ZXNzZWxsYXRpb24gKyA0IDogdGVzc2VsbGF0aW9uOyAvLyBjb3JyZWN0aW9uIG9mIG51
bWJlciBvZiBpdGVyYXRpb24gaWYgZW5jbG9zZQorICAgIHZhciBzOworICAgIGkgPSAwOworICAg
IGZvciAocyA9IDA7IHMgPCBzdWJkaXZpc2lvbnM7IHMrKykgeworICAgICAgICB2YXIgaTAgPSAw
OworICAgICAgICB2YXIgaTEgPSAwOworICAgICAgICB2YXIgaTIgPSAwOworICAgICAgICB2YXIg
aTMgPSAwOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgdGVzc2VsbGF0aW9uOyBqKyspIHsKKyAg
ICAgICAgICAgIGkwID0gaSAqIChlICsgMSkgKyBqOworICAgICAgICAgICAgaTEgPSAoaSArIDEp
ICogKGUgKyAxKSArIGo7CisgICAgICAgICAgICBpMiA9IGkgKiAoZSArIDEpICsgKGogKyAxKTsK
KyAgICAgICAgICAgIGkzID0gKGkgKyAxKSAqIChlICsgMSkgKyAoaiArIDEpOworICAgICAgICAg
ICAgaW5kaWNlcy5wdXNoKGkwLCBpMSwgaTIpOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGkz
LCBpMiwgaTEpOworICAgICAgICB9CisgICAgICAgIGlmIChhcmMgIT09IDEgJiYgZW5jbG9zZSkg
eyAvLyBpZiBlbmNsb3NlLCBhZGQgdHdvIHF1YWRzCisgICAgICAgICAgICBpbmRpY2VzLnB1c2go
aTAgKyAyLCBpMSArIDIsIGkyICsgMik7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaTMgKyAy
LCBpMiArIDIsIGkxICsgMik7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaTAgKyA0LCBpMSAr
IDQsIGkyICsgNCk7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaTMgKyA0LCBpMiArIDQsIGkx
ICsgNCk7CisgICAgICAgIH0KKyAgICAgICAgaSA9IChoYXNSaW5ncykgPyAoaSArIDIpIDogKGkg
KyAxKTsKKyAgICB9CisgICAgLy8gQ2FwcworICAgIHZhciBjcmVhdGVDeWxpbmRlckNhcCA9IGZ1
bmN0aW9uIChpc1RvcCkgeworICAgICAgICB2YXIgcmFkaXVzID0gaXNUb3AgPyBkaWFtZXRlclRv
cCAvIDIgOiBkaWFtZXRlckJvdHRvbSAvIDI7CisgICAgICAgIGlmIChyYWRpdXMgPT09IDApIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBDYXAgcG9zaXRpb25z
LCBub3JtYWxzICYgdXZzCisgICAgICAgIHZhciBhbmdsZTsKKyAgICAgICAgdmFyIGNpcmNsZVZl
Y3RvcjsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIHZhciB1ID0gKGlzVG9wKSA/IGZhY2VVVltz
dXJmYWNlTmIgLSAxXSA6IGZhY2VVVlswXTsKKyAgICAgICAgdmFyIGMgPSBudWxsOworICAgICAg
ICBpZiAoZmFjZUNvbG9ycykgeworICAgICAgICAgICAgYyA9IChpc1RvcCkgPyBmYWNlQ29sb3Jz
W3N1cmZhY2VOYiAtIDFdIDogZmFjZUNvbG9yc1swXTsKKyAgICAgICAgfQorICAgICAgICAvLyBj
YXAgY2VudGVyCisgICAgICAgIHZhciB2YmFzZSA9IHBvc2l0aW9ucy5sZW5ndGggLyAzOworICAg
ICAgICB2YXIgb2Zmc2V0ID0gaXNUb3AgPyBoZWlnaHQgLyAyIDogLWhlaWdodCAvIDI7CisgICAg
ICAgIHZhciBjZW50ZXIgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCBvZmZzZXQsIDApOworICAgICAgICBwb3NpdGlvbnMu
cHVzaChjZW50ZXIueCwgY2VudGVyLnksIGNlbnRlci56KTsKKyAgICAgICAgbm9ybWFscy5wdXNo
KDAsIGlzVG9wID8gMSA6IC0xLCAwKTsKKyAgICAgICAgdXZzLnB1c2godS54ICsgKHUueiAtIHUu
eCkgKiAwLjUsIHUueSArICh1LncgLSB1LnkpICogMC41KTsKKyAgICAgICAgaWYgKGMpIHsKKyAg
ICAgICAgICAgIGNvbG9ycy5wdXNoKGMuciwgYy5nLCBjLmIsIGMuYSk7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIHRleHR1cmVTY2FsZSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdKDAuNSwgMC41KTsKKyAgICAgICAgZm9yIChp
ID0gMDsgaSA8PSB0ZXNzZWxsYXRpb247IGkrKykgeworICAgICAgICAgICAgYW5nbGUgPSBNYXRo
LlBJICogMiAqIGkgKiBhcmMgLyB0ZXNzZWxsYXRpb247CisgICAgICAgICAgICB2YXIgY29zID0g
TWF0aC5jb3MoLWFuZ2xlKTsKKyAgICAgICAgICAgIHZhciBzaW4gPSBNYXRoLnNpbigtYW5nbGUp
OworICAgICAgICAgICAgY2lyY2xlVmVjdG9yID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oY29zICogcmFkaXVzLCBvZmZzZXQs
IHNpbiAqIHJhZGl1cyk7CisgICAgICAgICAgICB2YXIgdGV4dHVyZUNvb3JkaW5hdGUgPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjIi
XShjb3MgKiB0ZXh0dXJlU2NhbGUueCArIDAuNSwgc2luICogdGV4dHVyZVNjYWxlLnkgKyAwLjUp
OworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goY2lyY2xlVmVjdG9yLngsIGNpcmNsZVZlY3Rv
ci55LCBjaXJjbGVWZWN0b3Iueik7CisgICAgICAgICAgICBub3JtYWxzLnB1c2goMCwgaXNUb3Ag
PyAxIDogLTEsIDApOworICAgICAgICAgICAgdXZzLnB1c2godS54ICsgKHUueiAtIHUueCkgKiB0
ZXh0dXJlQ29vcmRpbmF0ZS54LCB1LnkgKyAodS53IC0gdS55KSAqIHRleHR1cmVDb29yZGluYXRl
LnkpOworICAgICAgICAgICAgaWYgKGMpIHsKKyAgICAgICAgICAgICAgICBjb2xvcnMucHVzaChj
LnIsIGMuZywgYy5iLCBjLmEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IENhcCBpbmRpY2VzCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZXNzZWxsYXRpb247IGkrKykg
eworICAgICAgICAgICAgaWYgKCFpc1RvcCkgeworICAgICAgICAgICAgICAgIGluZGljZXMucHVz
aCh2YmFzZSk7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZiYXNlICsgKGkgKyAxKSk7
CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZiYXNlICsgKGkgKyAyKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2go
dmJhc2UpOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCh2YmFzZSArIChpICsgMikpOwor
ICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCh2YmFzZSArIChpICsgMSkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvLyBhZGQgY2FwcyB0byBnZW9tZXRyeSBiYXNl
ZCBvbiBjYXAgcGFyYW1ldGVyCisgICAgaWYgKChjYXAgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk1lc2giXS5DQVBfU1RBUlQpCisgICAgICAgIHx8IChjYXAgPT09IF9t
ZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1lc2giXS5DQVBfQUxMKSkgeworICAg
ICAgICBjcmVhdGVDeWxpbmRlckNhcChmYWxzZSk7CisgICAgfQorICAgIGlmICgoY2FwID09PSBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uQ0FQX0VORCkKKyAgICAg
ICAgfHwgKGNhcCA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJd
LkNBUF9BTEwpKSB7CisgICAgICAgIGNyZWF0ZUN5bGluZGVyQ2FwKHRydWUpOworICAgIH0KKyAg
ICAvLyBTaWRlcworICAgIF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVydGV4RGF0YSJdLl9Db21wdXRlU2lkZXMoc2lkZU9yaWVudGF0aW9uLCBwb3NpdGlv
bnMsIGluZGljZXMsIG5vcm1hbHMsIHV2cywgb3B0aW9ucy5mcm9udFVWcywgb3B0aW9ucy5iYWNr
VVZzKTsKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXSgpOworICAgIHZlcnRleERhdGEuaW5k
aWNlcyA9IGluZGljZXM7CisgICAgdmVydGV4RGF0YS5wb3NpdGlvbnMgPSBwb3NpdGlvbnM7Cisg
ICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRhLnV2cyA9IHV2
czsKKyAgICBpZiAoZmFjZUNvbG9ycykgeworICAgICAgICB2ZXJ0ZXhEYXRhLmNvbG9ycyA9IGNv
bG9yczsKKyAgICB9CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdLkNyZWF0ZUN5bGluZGVyID0gZnVuY3Rpb24gKG5h
bWUsIGhlaWdodCwgZGlhbWV0ZXJUb3AsIGRpYW1ldGVyQm90dG9tLCB0ZXNzZWxsYXRpb24sIHN1
YmRpdmlzaW9ucywgc2NlbmUsIHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uKSB7CisgICAgaWYg
KHNjZW5lID09PSB1bmRlZmluZWQgfHwgIShzY2VuZSBpbnN0YW5jZW9mIF9zY2VuZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZSJdKSkgeworICAgICAgICBpZiAoc2NlbmUgIT09
IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgc2lkZU9yaWVudGF0aW9uID0gdXBkYXRhYmxlIHx8
IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1lc2giXS5ERUZBVUxUU0lERTsK
KyAgICAgICAgICAgIHVwZGF0YWJsZSA9IHNjZW5lOworICAgICAgICB9CisgICAgICAgIHNjZW5l
ID0gc3ViZGl2aXNpb25zOworICAgICAgICBzdWJkaXZpc2lvbnMgPSAxOworICAgIH0KKyAgICB2
YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCisgICAgICAgIGRpYW1ldGVy
VG9wOiBkaWFtZXRlclRvcCwKKyAgICAgICAgZGlhbWV0ZXJCb3R0b206IGRpYW1ldGVyQm90dG9t
LAorICAgICAgICB0ZXNzZWxsYXRpb246IHRlc3NlbGxhdGlvbiwKKyAgICAgICAgc3ViZGl2aXNp
b25zOiBzdWJkaXZpc2lvbnMsCisgICAgICAgIHNpZGVPcmllbnRhdGlvbjogc2lkZU9yaWVudGF0
aW9uLAorICAgICAgICB1cGRhdGFibGU6IHVwZGF0YWJsZQorICAgIH07CisgICAgcmV0dXJuIEN5
bGluZGVyQnVpbGRlci5DcmVhdGVDeWxpbmRlcihuYW1lLCBvcHRpb25zLCBzY2VuZSk7Cit9Owor
LyoqCisgKiBDbGFzcyBjb250YWluaW5nIHN0YXRpYyBmdW5jdGlvbnMgdG8gaGVscCBwcm9jZWR1
cmFsbHkgYnVpbGQgbWVzaGVzCisgKi8KK3ZhciBDeWxpbmRlckJ1aWxkZXIgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gQ3lsaW5kZXJCdWlsZGVyKCkgeworICAg
IH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgY3lsaW5kZXIgb3IgYSBjb25lIG1lc2gKKyAg
ICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGhlaWdodGAgc2V0cyB0aGUgaGVpZ2h0IHNpemUgKGZsb2F0
KSBvZiB0aGUgY3lsaW5kZXIvY29uZSAoZmxvYXQsIGRlZmF1bHQgMikuCisgICAgICogKiBUaGUg
cGFyYW1ldGVyIGBkaWFtZXRlcmAgc2V0cyB0aGUgZGlhbWV0ZXIgb2YgdGhlIHRvcCBhbmQgYm90
dG9tIGNhcCBhdCBvbmNlIChmbG9hdCwgZGVmYXVsdCAxKS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0
ZXJzIGBkaWFtZXRlclRvcGAgYW5kIGBkaWFtZXRlckJvdHRvbWAgb3ZlcndyaXRlIHRoZSBwYXJh
bWV0ZXIgYGRpYW1ldGVyYCBhbmQgc2V0IHJlc3BlY3RpdmVseSB0aGUgdG9wIGNhcCBhbmQgYm90
dG9tIGNhcCBkaWFtZXRlciAoZmxvYXRzLCBkZWZhdWx0IDEpLiBUaGUgcGFyYW1ldGVyICJkaWFt
ZXRlckJvdHRvbSIgY2FuJ3QgYmUgemVyby4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHRlc3Nl
bGxhdGlvbmAgc2V0cyB0aGUgbnVtYmVyIG9mIGN5bGluZGVyIHNpZGVzIChwb3NpdGl2ZSBpbnRl
Z2VyLCBkZWZhdWx0IDI0KS4gU2V0IGl0IHRvIDMgdG8gZ2V0IGEgcHJpc20gZm9yIGluc3RhbmNl
LgorICAgICAqICogVGhlIHBhcmFtZXRlciBgc3ViZGl2aXNpb25zYCBzZXRzIHRoZSBudW1iZXIg
b2YgcmluZ3MgYWxvbmcgdGhlIGN5bGluZGVyIGhlaWdodCAocG9zaXRpdmUgaW50ZWdlciwgZGVm
YXVsdCAxKS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGhhc1JpbmdzYCAoYm9vbGVhbiwgZGVm
YXVsdCBmYWxzZSkgbWFrZXMgdGhlIHN1YmRpdmlzaW9ucyBpbmRlcGVuZGVudCBmcm9tIGVhY2gg
b3RoZXIsIHNvIHRoZXkgYmVjb21lIGRpZmZlcmVudCBmYWNlcy4KKyAgICAgKiAqIFRoZSBwYXJh
bWV0ZXIgYGVuY2xvc2VgICAoYm9vbGVhbiwgZGVmYXVsdCBmYWxzZSkgYWRkcyB0d28gZXh0cmEg
ZmFjZXMgcGVyIHN1YmRpdmlzaW9uIHRvIGEgc2xpY2VkIGN5bGluZGVyIHRvIGNsb3NlIGl0IGFy
b3VuZCBpdHMgaGVpZ2h0IGF4aXMuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBjYXBgIHNldHMg
dGhlIHdheSB0aGUgY3lsaW5kZXIgaXMgY2FwcGVkLiBQb3NzaWJsZSB2YWx1ZXMgOiBCQUJZTE9O
Lk1lc2guTk9fQ0FQLCBCQUJZTE9OLk1lc2guQ0FQX1NUQVJULCBCQUJZTE9OLk1lc2guQ0FQX0VO
RCwgQkFCWUxPTi5NZXNoLkNBUF9BTEwgKGRlZmF1bHQpLgorICAgICAqICogVGhlIHBhcmFtZXRl
ciBgYXJjYCAoZmxvYXQsIGRlZmF1bHQgMSkgaXMgdGhlIHJhdGlvIChtYXggMSkgdG8gYXBwbHkg
dG8gdGhlIGNpcmN1bWZlcmVuY2UgdG8gc2xpY2UgdGhlIGN5bGluZGVyLgorICAgICAqICogWW91
IGNhbiBzZXQgZGlmZmVyZW50IGNvbG9ycyBhbmQgZGlmZmVyZW50IGltYWdlcyB0byBlYWNoIGJv
eCBzaWRlIGJ5IHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGBmYWNlQ29sb3JzYCAoYW4gYXJyYXkgb2Yg
biBDb2xvcjMgZWxlbWVudHMpIGFuZCBgZmFjZVVWYCAoYW4gYXJyYXkgb2YgbiBWZWN0b3I0IGVs
ZW1lbnRzKS4KKyAgICAgKiAqIFRoZSB2YWx1ZSBvZiBuIGlzIHRoZSBudW1iZXIgb2YgY3lsaW5k
ZXIgZmFjZXMuIElmIHRoZSBjeWxpbmRlciBoYXMgb25seSAxIHN1YmRpdmlzaW9ucywgbiBlcXVh
bHMgOiB0b3AgZmFjZSArIGN5bGluZGVyIHN1cmZhY2UgKyBib3R0b20gZmFjZSA9IDMKKyAgICAg
KiAqIE5vdywgaWYgdGhlIGN5bGluZGVyIGhhcyA1IGluZGVwZW5kZW50IHN1YmRpdmlzaW9ucyAo
aGFzUmluZ3MgPSB0cnVlKSwgbiBlcXVhbHMgOiB0b3AgZmFjZSArIDUgc3RyaXBlIHN1cmZhY2Vz
ICsgYm90dG9tIGZhY2UgPSAyICsgNSA9IDcKKyAgICAgKiAqIEZpbmFsbHksIGlmIHRoZSBjeWxp
bmRlciBoYXMgNSBpbmRlcGVuZGVudCBzdWJkaXZpc2lvbnMgYW5kIGlzIGVuY2xvc2UsIG4gZXF1
YWxzIDogdG9wIGZhY2UgKyA1IHggKHN0cmlwZSBzdXJmYWNlICsgMiBjbG9zaW5nIGZhY2VzKSAr
IGJvdHRvbSBmYWNlID0gMiArIDUgKiAzID0gMTcKKyAgICAgKiAqIEVhY2ggYXJyYXkgKGNvbG9y
IG9yIFVWcykgaXMgYWx3YXlzIG9yZGVyZWQgdGhlIHNhbWUgd2F5IDogdGhlIGZpcnN0IGVsZW1l
bnQgaXMgdGhlIGJvdHRvbSBjYXAsIHRoZSBsYXN0IGVsZW1lbnQgaXMgdGhlIHRvcCBjYXAuIFRo
ZSBvdGhlciBlbGVtZW50cyBhcmUgZWFjaCBhIHJpbmcgc3VyZmFjZS4KKyAgICAgKiAqIElmIGBl
bmNsb3NlYCBpcyBmYWxzZSwgYSByaW5nIHN1cmZhY2UgaXMgb25lIGVsZW1lbnQuCisgICAgICog
KiBJZiBgZW5jbG9zZWAgaXMgdHJ1ZSwgYSByaW5nIHN1cmZhY2UgaXMgMyBzdWNjZXNzaXZlIGVs
ZW1lbnRzIGluIHRoZSBhcnJheSA6IHRoZSB0dWJ1bGFyIHN1cmZhY2UsIHRoZW4gdGhlIHR3byBj
bG9zaW5nIGZhY2VzLgorICAgICAqICogRXhhbXBsZSBob3cgdG8gc2V0IGNvbG9ycyBhbmQgdGV4
dHVyZXMgb24gYSBzbGljZWQgY3lsaW5kZXIgOiBodHRwczovL3d3dy5odG1sNWdhbWVkZXZzLmNv
bS90b3BpYy8xNzk0NS1jcmVhdGluZy1hLWNsb3NlZC1zbGljZS1vZi1hLWN5bGluZGVyLyNjb21t
ZW50LTEwNjM3OQorICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVu
dGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQp
LCBCQUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNoLkRPVUJMRVNJREUKKyAgICAg
KiAqIElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hh
dCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZl
bHkgb24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBm
cm9udFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFpbCBoZXJlIDogaHR0cHM6Ly9k
b2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUt
b3JpZW50YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdp
dGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBp
dHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZC4K
KyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICog
QHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVz
aAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICog
QHJldHVybnMgdGhlIGN5bGluZGVyIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vaG93X3RvL3NldF9zaGFwZXMjY3lsaW5kZXItb3ItY29uZQorICAgICAqLworICAg
IEN5bGluZGVyQnVpbGRlci5DcmVhdGVDeWxpbmRlciA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25z
LCBzY2VuZSkgeworICAgICAgICB2YXIgY3lsaW5kZXIgPSBuZXcgX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTWVzaCJdKG5hbWUsIHNjZW5lKTsKKyAgICAgICAgb3B0aW9ucy5z
aWRlT3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNo
Il0uX0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24pOwor
ICAgICAgICBjeWxpbmRlci5fb3JpZ2luYWxCdWlsZGVyU2lkZU9yaWVudGF0aW9uID0gb3B0aW9u
cy5zaWRlT3JpZW50YXRpb247CisgICAgICAgIHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4
RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlQ3ls
aW5kZXIob3B0aW9ucyk7CisgICAgICAgIHZlcnRleERhdGEuYXBwbHlUb01lc2goY3lsaW5kZXIs
IG9wdGlvbnMudXBkYXRhYmxlKTsKKyAgICAgICAgcmV0dXJuIGN5bGluZGVyOworICAgIH07Cisg
ICAgcmV0dXJuIEN5bGluZGVyQnVpbGRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWVzaGVzL0J1aWxkZXJzL2RlY2FsQnVpbGRlci50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL0J1aWxkZXJz
L2RlY2FsQnVpbGRlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBEZWNhbEJ1aWxkZXIgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVjYWxCdWlsZGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBEZWNhbEJ1aWxkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaCAqLyAiLi9NZXNo
ZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2J1ZmZlciAq
LyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZXJ0ZXhGb3JtYXRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01hdGhzL21hdGgudmVydGV4Rm9ybWF0ICovICIuL01hdGhzL21hdGgudmVydGV4Rm9ybWF0
LnRzIik7CisKKworCisKKworX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVz
aCJdLkNyZWF0ZURlY2FsID0gZnVuY3Rpb24gKG5hbWUsIHNvdXJjZU1lc2gsIHBvc2l0aW9uLCBu
b3JtYWwsIHNpemUsIGFuZ2xlKSB7CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIHBvc2l0
aW9uOiBwb3NpdGlvbiwKKyAgICAgICAgbm9ybWFsOiBub3JtYWwsCisgICAgICAgIHNpemU6IHNp
emUsCisgICAgICAgIGFuZ2xlOiBhbmdsZQorICAgIH07CisgICAgcmV0dXJuIERlY2FsQnVpbGRl
ci5DcmVhdGVEZWNhbChuYW1lLCBzb3VyY2VNZXNoLCBvcHRpb25zKTsKK307CisvKioKKyAqIENs
YXNzIGNvbnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWls
ZCBtZXNoZXMKKyAqLwordmFyIERlY2FsQnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICBmdW5jdGlvbiBEZWNhbEJ1aWxkZXIoKSB7CisgICAgfQorICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBkZWNhbCBtZXNoLgorICAgICAqIEEgZGVjYWwgaXMgYSBtZXNoIHVzdWFs
bHkgYXBwbGllZCBhcyBhIG1vZGVsIG9udG8gdGhlIHN1cmZhY2Ugb2YgYW5vdGhlciBtZXNoLiBT
byBkb24ndCBmb3JnZXQgdGhlIHBhcmFtZXRlciBgc291cmNlTWVzaGAgZGVwaWN0aW5nIHRoZSBk
ZWNhbAorICAgICAqICogVGhlIHBhcmFtZXRlciBgcG9zaXRpb25gIChWZWN0b3IzLCBkZWZhdWx0
IGAoMCwgMCwgMClgKSBzZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVjYWwgaW4gV29ybGQgY29v
cmRpbmF0ZXMKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYG5vcm1hbGAgKFZlY3RvcjMsIGRlZmF1
bHQgYFZlY3RvcjMuVXBgKSBzZXRzIHRoZSBub3JtYWwgb2YgdGhlIG1lc2ggd2hlcmUgdGhlIGRl
Y2FsIGlzIGFwcGxpZWQgb250byBpbiBXb3JsZCBjb29yZGluYXRlcworICAgICAqICogVGhlIHBh
cmFtZXRlciBgc2l6ZWAgKFZlY3RvcjMsIGRlZmF1bHQgYCgxLCAxLCAxKWApIHNldHMgdGhlIGRl
Y2FsIHNjYWxpbmcKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGFuZ2xlYCAoZmxvYXQgaW4gcmFk
aWFuLCBkZWZhdWx0IDApIHNldHMgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgZGVjYWwKKyAgICAg
KiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFt
IHNvdXJjZU1lc2ggZGVmaW5lcyB0aGUgbWVzaCB3aGVyZSB0aGUgZGVjYWwgbXVzdCBiZSBhcHBs
aWVkCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNy
ZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNj
ZW5lCisgICAgICogQHJldHVybnMgdGhlIGRlY2FsIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8v
ZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2RlY2FscworICAgICAqLworICAgIERlY2FsQnVpbGRl
ci5DcmVhdGVEZWNhbCA9IGZ1bmN0aW9uIChuYW1lLCBzb3VyY2VNZXNoLCBvcHRpb25zKSB7Cisg
ICAgICAgIHZhciBpbmRpY2VzID0gc291cmNlTWVzaC5nZXRJbmRpY2VzKCk7CisgICAgICAgIHZh
ciBwb3NpdGlvbnMgPSBzb3VyY2VNZXNoLmdldFZlcnRpY2VzRGF0YShfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7CisgICAg
ICAgIHZhciBub3JtYWxzID0gc291cmNlTWVzaC5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKTsKKyAg
ICAgICAgdmFyIHBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiB8fCBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAg
ICAgdmFyIG5vcm1hbCA9IG9wdGlvbnMubm9ybWFsIHx8IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVXAoKTsKKyAgICAgICAgdmFyIHNp
emUgPSBvcHRpb25zLnNpemUgfHwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5PbmUoKTsKKyAgICAgICAgdmFyIGFuZ2xlID0gb3B0aW9u
cy5hbmdsZSB8fCAwOworICAgICAgICAvLyBHZXR0aW5nIGNvcnJlY3Qgcm90YXRpb24KKyAgICAg
ICAgaWYgKCFub3JtYWwpIHsKKyAgICAgICAgICAgIHZhciB0YXJnZXQgPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAwLCAx
KTsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSBzb3VyY2VNZXNoLmdldFNjZW5lKCkuYWN0aXZl
Q2FtZXJhOworICAgICAgICAgICAgdmFyIGNhbWVyYVdvcmxkVGFyZ2V0ID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1D
b29yZGluYXRlcyh0YXJnZXQsIGNhbWVyYS5nZXRXb3JsZE1hdHJpeCgpKTsKKyAgICAgICAgICAg
IG5vcm1hbCA9IGNhbWVyYS5nbG9iYWxQb3NpdGlvbi5zdWJ0cmFjdChjYW1lcmFXb3JsZFRhcmdl
dCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHlhdyA9IC1NYXRoLmF0YW4yKG5vcm1hbC56LCBu
b3JtYWwueCkgLSBNYXRoLlBJIC8gMjsKKyAgICAgICAgdmFyIGxlbiA9IE1hdGguc3FydChub3Jt
YWwueCAqIG5vcm1hbC54ICsgbm9ybWFsLnogKiBub3JtYWwueik7CisgICAgICAgIHZhciBwaXRj
aCA9IE1hdGguYXRhbjIobm9ybWFsLnksIGxlbik7CisgICAgICAgIC8vIE1hdHJpeAorICAgICAg
ICB2YXIgZGVjYWxXb3JsZE1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5Sb3RhdGlvbllhd1BpdGNoUm9sbCh5YXcsIHBpdGNo
LCBhbmdsZSkubXVsdGlwbHkoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIk1hdHJpeCJdLlRyYW5zbGF0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBv
c2l0aW9uLnopKTsKKyAgICAgICAgdmFyIGludmVyc2VEZWNhbFdvcmxkTWF0cml4ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLkludmVy
dChkZWNhbFdvcmxkTWF0cml4KTsKKyAgICAgICAgdmFyIG1lc2hXb3JsZE1hdHJpeCA9IHNvdXJj
ZU1lc2guZ2V0V29ybGRNYXRyaXgoKTsKKyAgICAgICAgdmFyIHRyYW5zZm9ybU1hdHJpeCA9IG1l
c2hXb3JsZE1hdHJpeC5tdWx0aXBseShpbnZlcnNlRGVjYWxXb3JsZE1hdHJpeCk7CisgICAgICAg
IHZhciB2ZXJ0ZXhEYXRhID0gbmV3IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVmVydGV4RGF0YSJdKCk7CisgICAgICAgIHZlcnRleERhdGEuaW5kaWNlcyA9
IFtdOworICAgICAgICB2ZXJ0ZXhEYXRhLnBvc2l0aW9ucyA9IFtdOworICAgICAgICB2ZXJ0ZXhE
YXRhLm5vcm1hbHMgPSBbXTsKKyAgICAgICAgdmVydGV4RGF0YS51dnMgPSBbXTsKKyAgICAgICAg
dmFyIGN1cnJlbnRWZXJ0ZXhEYXRhSW5kZXggPSAwOworICAgICAgICB2YXIgZXh0cmFjdERlY2Fs
VmVjdG9yMyA9IGZ1bmN0aW9uIChpbmRleElkKSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0g
bmV3IF9NYXRoc19tYXRoX3ZlcnRleEZvcm1hdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJQb3NpdGlvbk5vcm1hbFZlcnRleCJdKCk7CisgICAgICAgICAgICBpZiAoIWluZGljZXMgfHwg
IXBvc2l0aW9ucyB8fCAhbm9ybWFscykgeworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgdmVydGV4SWQgPSBpbmRpY2VzW2luZGV4
SWRdOworICAgICAgICAgICAgcmVzdWx0LnBvc2l0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0ocG9zaXRpb25zW3ZlcnRl
eElkICogM10sIHBvc2l0aW9uc1t2ZXJ0ZXhJZCAqIDMgKyAxXSwgcG9zaXRpb25zW3ZlcnRleElk
ICogMyArIDJdKTsKKyAgICAgICAgICAgIC8vIFNlbmQgdmVjdG9yIHRvIGRlY2FsIGxvY2FsIHdv
cmxkCisgICAgICAgICAgICByZXN1bHQucG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVz
KHJlc3VsdC5wb3NpdGlvbiwgdHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgICAgIC8vIEdldCBu
b3JtYWwKKyAgICAgICAgICAgIHJlc3VsdC5ub3JtYWwgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShub3JtYWxzW3ZlcnRleElk
ICogM10sIG5vcm1hbHNbdmVydGV4SWQgKiAzICsgMV0sIG5vcm1hbHNbdmVydGV4SWQgKiAzICsg
Ml0pOworICAgICAgICAgICAgcmVzdWx0Lm5vcm1hbCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKHJlc3Vs
dC5ub3JtYWwsIHRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9OyAvLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vbXJkb29iL3RocmVl
LmpzL2Jsb2IvZWVlMjMxOTYwODgyZjZmM2I2MTEzNDA1ZjUyNDk1NjE0NTE0ODE0Ni9leGFtcGxl
cy9qcy9nZW9tZXRyaWVzL0RlY2FsR2VvbWV0cnkuanMKKyAgICAgICAgdmFyIGNsaXAgPSBmdW5j
dGlvbiAodmVydGljZXMsIGF4aXMpIHsKKyAgICAgICAgICAgIGlmICh2ZXJ0aWNlcy5sZW5ndGgg
PT09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmVydGljZXM7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXIgY2xpcFNpemUgPSAwLjUgKiBNYXRoLmFicyhfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdChzaXplLCBh
eGlzKSk7CisgICAgICAgICAgICB2YXIgY2xpcFZlcnRpY2VzID0gZnVuY3Rpb24gKHYwLCB2MSkg
eworICAgICAgICAgICAgICAgIHZhciBjbGlwRmFjdG9yID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5HZXRDbGlwRmFjdG9yKHYwLnBv
c2l0aW9uLCB2MS5wb3NpdGlvbiwgYXhpcywgY2xpcFNpemUpOworICAgICAgICAgICAgICAgIHJl
dHVybiBuZXcgX01hdGhzX21hdGhfdmVydGV4Rm9ybWF0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIlBvc2l0aW9uTm9ybWFsVmVydGV4Il0oX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5MZXJwKHYwLnBvc2l0aW9uLCB2MS5wb3Np
dGlvbiwgY2xpcEZhY3RvciksIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJWZWN0b3IzIl0uTGVycCh2MC5ub3JtYWwsIHYxLm5vcm1hbCwgY2xpcEZhY3Rv
cikpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXko
KTsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB2ZXJ0aWNlcy5sZW5n
dGg7IGluZGV4ICs9IDMpIHsKKyAgICAgICAgICAgICAgICB2YXIgdjFPdXQ7CisgICAgICAgICAg
ICAgICAgdmFyIHYyT3V0OworICAgICAgICAgICAgICAgIHZhciB2M091dDsKKyAgICAgICAgICAg
ICAgICB2YXIgdG90YWwgPSAwOworICAgICAgICAgICAgICAgIHZhciBuVjEgPSBudWxsOworICAg
ICAgICAgICAgICAgIHZhciBuVjIgPSBudWxsOworICAgICAgICAgICAgICAgIHZhciBuVjMgPSBu
dWxsOworICAgICAgICAgICAgICAgIHZhciBuVjQgPSBudWxsOworICAgICAgICAgICAgICAgIHZh
ciBkMSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0uRG90KHZlcnRpY2VzW2luZGV4XS5wb3NpdGlvbiwgYXhpcykgLSBjbGlwU2l6ZTsK
KyAgICAgICAgICAgICAgICB2YXIgZDIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdCh2ZXJ0aWNlc1tpbmRleCArIDFdLnBvc2l0
aW9uLCBheGlzKSAtIGNsaXBTaXplOworICAgICAgICAgICAgICAgIHZhciBkMyA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KHZl
cnRpY2VzW2luZGV4ICsgMl0ucG9zaXRpb24sIGF4aXMpIC0gY2xpcFNpemU7CisgICAgICAgICAg
ICAgICAgdjFPdXQgPSBkMSA+IDA7CisgICAgICAgICAgICAgICAgdjJPdXQgPSBkMiA+IDA7Cisg
ICAgICAgICAgICAgICAgdjNPdXQgPSBkMyA+IDA7CisgICAgICAgICAgICAgICAgdG90YWwgPSAo
djFPdXQgPyAxIDogMCkgKyAodjJPdXQgPyAxIDogMCkgKyAodjNPdXQgPyAxIDogMCk7CisgICAg
ICAgICAgICAgICAgc3dpdGNoICh0b3RhbCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDA6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2ZXJ0aWNlc1tpbmRleF0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godmVydGljZXNbaW5kZXggKyAxXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2ZXJ0aWNlc1tpbmRleCArIDJd
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodjFPdXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuVjEgPSB2ZXJ0aWNlc1tpbmRleCArIDFdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5WMiA9IHZlcnRpY2VzW2luZGV4ICsgMl07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgblYzID0gY2xpcFZlcnRpY2VzKHZlcnRpY2VzW2luZGV4XSwgblYxKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuVjQgPSBjbGlwVmVydGljZXModmVydGljZXNb
aW5kZXhdLCBuVjIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHYyT3V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgblYxID0g
dmVydGljZXNbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WMiA9IHZlcnRp
Y2VzW2luZGV4ICsgMl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgblYzID0gY2xpcFZl
cnRpY2VzKHZlcnRpY2VzW2luZGV4ICsgMV0sIG5WMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgblY0ID0gY2xpcFZlcnRpY2VzKHZlcnRpY2VzW2luZGV4ICsgMV0sIG5WMik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goblYzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQucHVzaChuVjIuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnB1c2goblYxLmNsb25lKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5wdXNoKG5WMi5jbG9uZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQucHVzaChuVjMuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnB1c2goblY0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2M091dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WMSA9IHZlcnRpY2VzW2lu
ZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuVjIgPSB2ZXJ0aWNlc1tpbmRleCAr
IDFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WMyA9IGNsaXBWZXJ0aWNlcyh2ZXJ0
aWNlc1tpbmRleCArIDJdLCBuVjEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WNCA9
IGNsaXBWZXJ0aWNlcyh2ZXJ0aWNlc1tpbmRleCArIDJdLCBuVjIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5WMSAmJiBuVjIgJiYgblYz
ICYmIG5WNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5WMS5j
bG9uZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuVjIuY2xv
bmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goblYzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuVjQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5WMy5jbG9uZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQucHVzaChuVjIuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2MU91dCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5WMSA9IHZlcnRpY2VzW2luZGV4XS5jbG9uZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WMiA9IGNsaXBWZXJ0aWNlcyhuVjEsIHZlcnRp
Y2VzW2luZGV4ICsgMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WMyA9IGNsaXBW
ZXJ0aWNlcyhuVjEsIHZlcnRpY2VzW2luZGV4ICsgMl0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5wdXNoKG5WMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnB1c2goblYyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChu
VjMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCF2Mk91dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WMSA9IHZlcnRpY2Vz
W2luZGV4ICsgMV0uY2xvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuVjIgPSBj
bGlwVmVydGljZXMoblYxLCB2ZXJ0aWNlc1tpbmRleCArIDJdKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuVjMgPSBjbGlwVmVydGljZXMoblYxLCB2ZXJ0aWNlc1tpbmRleF0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5WMSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goblYyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQucHVzaChuVjMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCF2M091dCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5WMSA9IHZlcnRpY2VzW2luZGV4ICsgMl0uY2xvbmUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuVjIgPSBjbGlwVmVydGljZXMoblYxLCB2ZXJ0aWNlc1tpbmRleF0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5WMyA9IGNsaXBWZXJ0aWNlcyhuVjEsIHZlcnRpY2Vz
W2luZGV4ICsgMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5W
MSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goblYyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuVjMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH07CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBpbmRpY2VzLmxlbmd0
aDsgaW5kZXggKz0gMykgeworICAgICAgICAgICAgdmFyIGZhY2VWZXJ0aWNlcyA9IG5ldyBBcnJh
eSgpOworICAgICAgICAgICAgZmFjZVZlcnRpY2VzLnB1c2goZXh0cmFjdERlY2FsVmVjdG9yMyhp
bmRleCkpOworICAgICAgICAgICAgZmFjZVZlcnRpY2VzLnB1c2goZXh0cmFjdERlY2FsVmVjdG9y
MyhpbmRleCArIDEpKTsKKyAgICAgICAgICAgIGZhY2VWZXJ0aWNlcy5wdXNoKGV4dHJhY3REZWNh
bFZlY3RvcjMoaW5kZXggKyAyKSk7CisgICAgICAgICAgICAvLyBDbGlwCisgICAgICAgICAgICBm
YWNlVmVydGljZXMgPSBjbGlwKGZhY2VWZXJ0aWNlcywgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMSwgMCwgMCkpOworICAgICAg
ICAgICAgZmFjZVZlcnRpY2VzID0gY2xpcChmYWNlVmVydGljZXMsIG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKC0xLCAwLCAwKSk7
CisgICAgICAgICAgICBmYWNlVmVydGljZXMgPSBjbGlwKGZhY2VWZXJ0aWNlcywgbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMCwg
MSwgMCkpOworICAgICAgICAgICAgZmFjZVZlcnRpY2VzID0gY2xpcChmYWNlVmVydGljZXMsIG5l
dyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdKDAsIC0xLCAwKSk7CisgICAgICAgICAgICBmYWNlVmVydGljZXMgPSBjbGlwKGZhY2VWZXJ0
aWNlcywgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0oMCwgMCwgMSkpOworICAgICAgICAgICAgZmFjZVZlcnRpY2VzID0gY2xpcChm
YWNlVmVydGljZXMsIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVmVjdG9yMyJdKDAsIDAsIC0xKSk7CisgICAgICAgICAgICBpZiAoZmFjZVZlcnRp
Y2VzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gQWRkIFVWcyBhbmQgZ2V0IGJhY2sgdG8gd29ybGQKKyAgICAg
ICAgICAgIGZvciAodmFyIHZJbmRleCA9IDA7IHZJbmRleCA8IGZhY2VWZXJ0aWNlcy5sZW5ndGg7
IHZJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHZlcnRleCA9IGZhY2VWZXJ0aWNlc1t2
SW5kZXhdOworICAgICAgICAgICAgICAgIC8vVE9ETyBjaGVjayBmb3IgSW50MzJBcnJheSB8IFVp
bnQzMkFycmF5IHwgVWludDE2QXJyYXkKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhEYXRhLmluZGlj
ZXMucHVzaChjdXJyZW50VmVydGV4RGF0YUluZGV4KTsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXgu
cG9zaXRpb24udG9BcnJheSh2ZXJ0ZXhEYXRhLnBvc2l0aW9ucywgY3VycmVudFZlcnRleERhdGFJ
bmRleCAqIDMpOworICAgICAgICAgICAgICAgIHZlcnRleC5ub3JtYWwudG9BcnJheSh2ZXJ0ZXhE
YXRhLm5vcm1hbHMsIGN1cnJlbnRWZXJ0ZXhEYXRhSW5kZXggKiAzKTsKKyAgICAgICAgICAgICAg
ICB2ZXJ0ZXhEYXRhLnV2cy5wdXNoKDAuNSArIHZlcnRleC5wb3NpdGlvbi54IC8gc2l6ZS54KTsK
KyAgICAgICAgICAgICAgICB2ZXJ0ZXhEYXRhLnV2cy5wdXNoKDAuNSArIHZlcnRleC5wb3NpdGlv
bi55IC8gc2l6ZS55KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50VmVydGV4RGF0YUluZGV4Kys7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gUmV0dXJuIG1lc2gKKyAgICAg
ICAgdmFyIGRlY2FsID0gbmV3IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1l
c2giXShuYW1lLCBzb3VyY2VNZXNoLmdldFNjZW5lKCkpOworICAgICAgICB2ZXJ0ZXhEYXRhLmFw
cGx5VG9NZXNoKGRlY2FsKTsKKyAgICAgICAgZGVjYWwucG9zaXRpb24gPSBwb3NpdGlvbi5jbG9u
ZSgpOworICAgICAgICBkZWNhbC5yb3RhdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKHBpdGNoLCB5YXcsIGFuZ2xlKTsK
KyAgICAgICAgcmV0dXJuIGRlY2FsOworICAgIH07CisgICAgcmV0dXJuIERlY2FsQnVpbGRlcjsK
K30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL0J1aWxkZXJzL2Rpc2NC
dWlsZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL01lc2hlcy9CdWlsZGVycy9kaXNjQnVpbGRlci50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IERpc2NCdWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRp
c2NCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEaXNjQnVpbGRlcjsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tZXNoLnZlcnRleERhdGEg
Ki8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50cyIpOworCisKK19tZXNoX3ZlcnRleERhdGFf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4RGF0YSJdLkNyZWF0ZURpc2MgPSBm
dW5jdGlvbiAob3B0aW9ucykgeworICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAg
ICB2YXIgaW5kaWNlcyA9IG5ldyBBcnJheSgpOworICAgIHZhciBub3JtYWxzID0gbmV3IEFycmF5
KCk7CisgICAgdmFyIHV2cyA9IG5ldyBBcnJheSgpOworICAgIHZhciByYWRpdXMgPSBvcHRpb25z
LnJhZGl1cyB8fCAwLjU7CisgICAgdmFyIHRlc3NlbGxhdGlvbiA9IG9wdGlvbnMudGVzc2VsbGF0
aW9uIHx8IDY0OworICAgIHZhciBhcmMgPSBvcHRpb25zLmFyYyAmJiAob3B0aW9ucy5hcmMgPD0g
MCB8fCBvcHRpb25zLmFyYyA+IDEpID8gMS4wIDogb3B0aW9ucy5hcmMgfHwgMS4wOworICAgIHZh
ciBzaWRlT3JpZW50YXRpb24gPSAob3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPT09IDApID8gMCA6
IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uIHx8IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVydGV4RGF0YSJdLkRFRkFVTFRTSURFOworICAgIC8vIHBvc2l0
aW9ucyBhbmQgdXZzCisgICAgcG9zaXRpb25zLnB1c2goMCwgMCwgMCk7IC8vIGRpc2MgY2VudGVy
IGZpcnN0CisgICAgdXZzLnB1c2goMC41LCAwLjUpOworICAgIHZhciB0aGV0YSA9IE1hdGguUEkg
KiAyICogYXJjOworICAgIHZhciBzdGVwID0gdGhldGEgLyB0ZXNzZWxsYXRpb247CisgICAgZm9y
ICh2YXIgYSA9IDA7IGEgPCB0aGV0YTsgYSArPSBzdGVwKSB7CisgICAgICAgIHZhciB4ID0gTWF0
aC5jb3MoYSk7CisgICAgICAgIHZhciB5ID0gTWF0aC5zaW4oYSk7CisgICAgICAgIHZhciB1ID0g
KHggKyAxKSAvIDI7CisgICAgICAgIHZhciB2ID0gKDEgLSB5KSAvIDI7CisgICAgICAgIHBvc2l0
aW9ucy5wdXNoKHJhZGl1cyAqIHgsIHJhZGl1cyAqIHksIDApOworICAgICAgICB1dnMucHVzaCh1
LCB2KTsKKyAgICB9CisgICAgaWYgKGFyYyA9PT0gMSkgeworICAgICAgICBwb3NpdGlvbnMucHVz
aChwb3NpdGlvbnNbM10sIHBvc2l0aW9uc1s0XSwgcG9zaXRpb25zWzVdKTsgLy8gY2xvc2UgdGhl
IGNpcmNsZQorICAgICAgICB1dnMucHVzaCh1dnNbMl0sIHV2c1szXSk7CisgICAgfQorICAgIC8v
aW5kaWNlcworICAgIHZhciB2ZXJ0ZXhOYiA9IHBvc2l0aW9ucy5sZW5ndGggLyAzOworICAgIGZv
ciAodmFyIGkgPSAxOyBpIDwgdmVydGV4TmIgLSAxOyBpKyspIHsKKyAgICAgICAgaW5kaWNlcy5w
dXNoKGkgKyAxLCAwLCBpKTsKKyAgICB9CisgICAgLy8gcmVzdWx0CisgICAgX21lc2hfdmVydGV4
RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhEYXRhIl0uQ29tcHV0ZU5v
cm1hbHMocG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzKTsKKyAgICBfbWVzaF92ZXJ0ZXhEYXRh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleERhdGEiXS5fQ29tcHV0ZVNpZGVz
KHNpZGVPcmllbnRhdGlvbiwgcG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzLCB1dnMsIG9wdGlv
bnMuZnJvbnRVVnMsIG9wdGlvbnMuYmFja1VWcyk7CisgICAgdmFyIHZlcnRleERhdGEgPSBuZXcg
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhEYXRh
Il0oKTsKKyAgICB2ZXJ0ZXhEYXRhLmluZGljZXMgPSBpbmRpY2VzOworICAgIHZlcnRleERhdGEu
cG9zaXRpb25zID0gcG9zaXRpb25zOworICAgIHZlcnRleERhdGEubm9ybWFscyA9IG5vcm1hbHM7
CisgICAgdmVydGV4RGF0YS51dnMgPSB1dnM7CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9Owor
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkNyZWF0ZURpc2MgPSBm
dW5jdGlvbiAobmFtZSwgcmFkaXVzLCB0ZXNzZWxsYXRpb24sIHNjZW5lLCB1cGRhdGFibGUsIHNp
ZGVPcmllbnRhdGlvbikgeworICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVs
bDsgfQorICAgIHZhciBvcHRpb25zID0geworICAgICAgICByYWRpdXM6IHJhZGl1cywKKyAgICAg
ICAgdGVzc2VsbGF0aW9uOiB0ZXNzZWxsYXRpb24sCisgICAgICAgIHNpZGVPcmllbnRhdGlvbjog
c2lkZU9yaWVudGF0aW9uLAorICAgICAgICB1cGRhdGFibGU6IHVwZGF0YWJsZQorICAgIH07Cisg
ICAgcmV0dXJuIERpc2NCdWlsZGVyLkNyZWF0ZURpc2MobmFtZSwgb3B0aW9ucywgc2NlbmUpOwor
fTsKKy8qKgorICogQ2xhc3MgY29udGFpbmluZyBzdGF0aWMgZnVuY3Rpb25zIHRvIGhlbHAgcHJv
Y2VkdXJhbGx5IGJ1aWxkIG1lc2hlcworICovCit2YXIgRGlzY0J1aWxkZXIgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRGlzY0J1aWxkZXIoKSB7CisgICAgfQor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBwbGFuZSBwb2x5Z29uYWwgbWVzaC4gIEJ5IGRlZmF1
bHQsIHRoaXMgaXMgYSBkaXNjCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGByYWRpdXNgIHNldHMg
dGhlIHJhZGl1cyBzaXplIChmbG9hdCkgb2YgdGhlIHBvbHlnb24gKGRlZmF1bHQgMC41KQorICAg
ICAqICogVGhlIHBhcmFtZXRlciBgdGVzc2VsbGF0aW9uYCBzZXRzIHRoZSBudW1iZXIgb2YgcG9s
eWdvbiBzaWRlcyAocG9zaXRpdmUgaW50ZWdlciwgZGVmYXVsdCA2NCkuIFNvIGEgdGVzc2VsbGF0
aW9uIHZhbHVlZCB0byAzIHdpbGwgYnVpbGQgYSB0cmlhbmdsZSwgdG8gNCBhIHNxdWFyZSwgZXRj
CisgICAgICogKiBZb3UgY2FuIGNyZWF0ZSBhbiB1bmNsb3NlZCBwb2x5Z29uIHdpdGggdGhlIHBh
cmFtZXRlciBgYXJjYCAocG9zaXRpdmUgZmxvYXQsIGRlZmF1bHQgMSksIHZhbHVlZCBiZXR3ZWVu
IDAgYW5kIDEsIHdoYXQgaXMgdGhlIHJhdGlvIG9mIHRoZSBjaXJjdW1mZXJlbmNlIDogMiB4IFBJ
IHggcmF0aW8KKyAgICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRh
dGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwg
QkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICog
KiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQg
cGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5
IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJv
bnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9j
LmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9y
aWVudGF0aW9uCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRo
IHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRz
IGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAg
ICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBh
cmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAor
ICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJl
dHVybnMgdGhlIHBsYW5lIHBvbHlnb25hbCBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by9zZXRfc2hhcGVzI2Rpc2Mtb3ItcmVndWxhci1wb2x5Z29uCisg
ICAgICovCisgICAgRGlzY0J1aWxkZXIuQ3JlYXRlRGlzYyA9IGZ1bmN0aW9uIChuYW1lLCBvcHRp
b25zLCBzY2VuZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51
bGw7IH0KKyAgICAgICAgdmFyIGRpc2MgPSBuZXcgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTWVzaCJdKG5hbWUsIHNjZW5lKTsKKyAgICAgICAgb3B0aW9ucy5zaWRlT3JpZW50
YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uX0dldERl
ZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24pOworICAgICAgICBk
aXNjLl9vcmlnaW5hbEJ1aWxkZXJTaWRlT3JpZW50YXRpb24gPSBvcHRpb25zLnNpZGVPcmllbnRh
dGlvbjsKKyAgICAgICAgdmFyIHZlcnRleERhdGEgPSBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleERhdGEiXS5DcmVhdGVEaXNjKG9wdGlvbnMpOwor
ICAgICAgICB2ZXJ0ZXhEYXRhLmFwcGx5VG9NZXNoKGRpc2MsIG9wdGlvbnMudXBkYXRhYmxlKTsK
KyAgICAgICAgcmV0dXJuIGRpc2M7CisgICAgfTsKKyAgICByZXR1cm4gRGlzY0J1aWxkZXI7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy9CdWlsZGVycy9ncm91bmRC
dWlsZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vTWVzaGVzL0J1aWxkZXJzL2dyb3VuZEJ1aWxkZXIudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IEdyb3VuZEJ1aWxkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiR3JvdW5kQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gR3JvdW5kQnVpbGRlcjsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRo
cy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLmNvbG9yICovICIu
L01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
bWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9t
ZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL21lc2gudmVydGV4RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0ZXhE
YXRhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2dyb3VuZE1lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2dyb3VuZE1l
c2ggKi8gIi4vTWVzaGVzL2dyb3VuZE1lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xzLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvZW5n
aW5lU3RvcmUgKi8gIi4vRW5naW5lcy9lbmdpbmVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5jb25zdGFudHMg
Ki8gIi4vTWF0aHMvbWF0aC5jb25zdGFudHMudHMiKTsKKworCisKKworCisKKworCitfbWVzaF92
ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5DcmVh
dGVHcm91bmQgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgIHZhciBpbmRpY2VzID0gW107Cisg
ICAgdmFyIHBvc2l0aW9ucyA9IFtdOworICAgIHZhciBub3JtYWxzID0gW107CisgICAgdmFyIHV2
cyA9IFtdOworICAgIHZhciByb3csIGNvbDsKKyAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRo
IHx8IDE7CisgICAgdmFyIGhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0IHx8IDE7CisgICAgdmFyIHN1
YmRpdmlzaW9uc1ggPSBvcHRpb25zLnN1YmRpdmlzaW9uc1ggfHwgb3B0aW9ucy5zdWJkaXZpc2lv
bnMgfHwgMTsKKyAgICB2YXIgc3ViZGl2aXNpb25zWSA9IG9wdGlvbnMuc3ViZGl2aXNpb25zWSB8
fCBvcHRpb25zLnN1YmRpdmlzaW9ucyB8fCAxOworICAgIGZvciAocm93ID0gMDsgcm93IDw9IHN1
YmRpdmlzaW9uc1k7IHJvdysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDw9IHN1YmRp
dmlzaW9uc1g7IGNvbCsrKSB7CisgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgoY29s
ICogd2lkdGgpIC8gc3ViZGl2aXNpb25zWCAtICh3aWR0aCAvIDIuMCksIDAsICgoc3ViZGl2aXNp
b25zWSAtIHJvdykgKiBoZWlnaHQpIC8gc3ViZGl2aXNpb25zWSAtIChoZWlnaHQgLyAyLjApKTsK
KyAgICAgICAgICAgIHZhciBub3JtYWwgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAxLjAsIDApOworICAgICAgICAgICAg
cG9zaXRpb25zLnB1c2gocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7CisgICAg
ICAgICAgICBub3JtYWxzLnB1c2gobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7CisgICAg
ICAgICAgICB1dnMucHVzaChjb2wgLyBzdWJkaXZpc2lvbnNYLCAxLjAgLSByb3cgLyBzdWJkaXZp
c2lvbnNZKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IHN1YmRp
dmlzaW9uc1k7IHJvdysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgc3ViZGl2aXNp
b25zWDsgY29sKyspIHsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChjb2wgKyAxICsgKHJvdyAr
IDEpICogKHN1YmRpdmlzaW9uc1ggKyAxKSk7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goY29s
ICsgMSArIHJvdyAqIChzdWJkaXZpc2lvbnNYICsgMSkpOworICAgICAgICAgICAgaW5kaWNlcy5w
dXNoKGNvbCArIHJvdyAqIChzdWJkaXZpc2lvbnNYICsgMSkpOworICAgICAgICAgICAgaW5kaWNl
cy5wdXNoKGNvbCArIChyb3cgKyAxKSAqIChzdWJkaXZpc2lvbnNYICsgMSkpOworICAgICAgICAg
ICAgaW5kaWNlcy5wdXNoKGNvbCArIDEgKyAocm93ICsgMSkgKiAoc3ViZGl2aXNpb25zWCArIDEp
KTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChjb2wgKyByb3cgKiAoc3ViZGl2aXNpb25zWCAr
IDEpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBSZXN1bHQKKyAgICB2YXIgdmVydGV4RGF0
YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
cnRleERhdGEiXSgpOworICAgIHZlcnRleERhdGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgdmVy
dGV4RGF0YS5wb3NpdGlvbnMgPSBwb3NpdGlvbnM7CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0g
bm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRhLnV2cyA9IHV2czsKKyAgICByZXR1cm4gdmVydGV4RGF0
YTsKK307CitfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
cnRleERhdGEiXS5DcmVhdGVUaWxlZEdyb3VuZCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAg
dmFyIHhtaW4gPSAob3B0aW9ucy54bWluICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy54bWluICE9
PSBudWxsKSA/IG9wdGlvbnMueG1pbiA6IC0xLjA7CisgICAgdmFyIHptaW4gPSAob3B0aW9ucy56
bWluICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy56bWluICE9PSBudWxsKSA/IG9wdGlvbnMuem1p
biA6IC0xLjA7CisgICAgdmFyIHhtYXggPSAob3B0aW9ucy54bWF4ICE9PSB1bmRlZmluZWQgJiYg
b3B0aW9ucy54bWF4ICE9PSBudWxsKSA/IG9wdGlvbnMueG1heCA6IDEuMDsKKyAgICB2YXIgem1h
eCA9IChvcHRpb25zLnptYXggIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnptYXggIT09IG51bGwp
ID8gb3B0aW9ucy56bWF4IDogMS4wOworICAgIHZhciBzdWJkaXZpc2lvbnMgPSBvcHRpb25zLnN1
YmRpdmlzaW9ucyB8fCB7IHc6IDEsIGg6IDEgfTsKKyAgICB2YXIgcHJlY2lzaW9uID0gb3B0aW9u
cy5wcmVjaXNpb24gfHwgeyB3OiAxLCBoOiAxIH07CisgICAgdmFyIGluZGljZXMgPSBuZXcgQXJy
YXkoKTsKKyAgICB2YXIgcG9zaXRpb25zID0gbmV3IEFycmF5KCk7CisgICAgdmFyIG5vcm1hbHMg
PSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgdXZzID0gbmV3IEFycmF5KCk7CisgICAgdmFyIHJvdywg
Y29sLCB0aWxlUm93LCB0aWxlQ29sOworICAgIHN1YmRpdmlzaW9ucy5oID0gKHN1YmRpdmlzaW9u
cy5oIDwgMSkgPyAxIDogc3ViZGl2aXNpb25zLmg7CisgICAgc3ViZGl2aXNpb25zLncgPSAoc3Vi
ZGl2aXNpb25zLncgPCAxKSA/IDEgOiBzdWJkaXZpc2lvbnMudzsKKyAgICBwcmVjaXNpb24udyA9
IChwcmVjaXNpb24udyA8IDEpID8gMSA6IHByZWNpc2lvbi53OworICAgIHByZWNpc2lvbi5oID0g
KHByZWNpc2lvbi5oIDwgMSkgPyAxIDogcHJlY2lzaW9uLmg7CisgICAgdmFyIHRpbGVTaXplID0g
eworICAgICAgICAndyc6ICh4bWF4IC0geG1pbikgLyBzdWJkaXZpc2lvbnMudywKKyAgICAgICAg
J2gnOiAoem1heCAtIHptaW4pIC8gc3ViZGl2aXNpb25zLmgKKyAgICB9OworICAgIGZ1bmN0aW9u
IGFwcGx5VGlsZSh4VGlsZU1pbiwgelRpbGVNaW4sIHhUaWxlTWF4LCB6VGlsZU1heCkgeworICAg
ICAgICAvLyBJbmRpY2VzCisgICAgICAgIHZhciBiYXNlID0gcG9zaXRpb25zLmxlbmd0aCAvIDM7
CisgICAgICAgIHZhciByb3dMZW5ndGggPSBwcmVjaXNpb24udyArIDE7CisgICAgICAgIGZvciAo
cm93ID0gMDsgcm93IDwgcHJlY2lzaW9uLmg7IHJvdysrKSB7CisgICAgICAgICAgICBmb3IgKGNv
bCA9IDA7IGNvbCA8IHByZWNpc2lvbi53OyBjb2wrKykgeworICAgICAgICAgICAgICAgIHZhciBz
cXVhcmUgPSBbCisgICAgICAgICAgICAgICAgICAgIGJhc2UgKyBjb2wgKyByb3cgKiByb3dMZW5n
dGgsCisgICAgICAgICAgICAgICAgICAgIGJhc2UgKyAoY29sICsgMSkgKyByb3cgKiByb3dMZW5n
dGgsCisgICAgICAgICAgICAgICAgICAgIGJhc2UgKyAoY29sICsgMSkgKyAocm93ICsgMSkgKiBy
b3dMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGJhc2UgKyBjb2wgKyAocm93ICsgMSkgKiBy
b3dMZW5ndGgKKyAgICAgICAgICAgICAgICBdOworICAgICAgICAgICAgICAgIGluZGljZXMucHVz
aChzcXVhcmVbMV0pOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChzcXVhcmVbMl0pOwor
ICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChzcXVhcmVbM10pOworICAgICAgICAgICAgICAg
IGluZGljZXMucHVzaChzcXVhcmVbMF0pOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChz
cXVhcmVbMV0pOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChzcXVhcmVbM10pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFBvc2l0aW9uLCBub3JtYWxzIGFuZCB1
dnMKKyAgICAgICAgdmFyIHBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHZhciBub3JtYWwg
PSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXSgwLCAxLjAsIDApOworICAgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8PSBwcmVjaXNp
b24uaDsgcm93KyspIHsKKyAgICAgICAgICAgIHBvc2l0aW9uLnogPSAocm93ICogKHpUaWxlTWF4
IC0gelRpbGVNaW4pKSAvIHByZWNpc2lvbi5oICsgelRpbGVNaW47CisgICAgICAgICAgICBmb3Ig
KGNvbCA9IDA7IGNvbCA8PSBwcmVjaXNpb24udzsgY29sKyspIHsKKyAgICAgICAgICAgICAgICBw
b3NpdGlvbi54ID0gKGNvbCAqICh4VGlsZU1heCAtIHhUaWxlTWluKSkgLyBwcmVjaXNpb24udyAr
IHhUaWxlTWluOworICAgICAgICAgICAgICAgIHBvc2l0aW9uLnkgPSAwOworICAgICAgICAgICAg
ICAgIHBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopOwor
ICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaChub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56
KTsKKyAgICAgICAgICAgICAgICB1dnMucHVzaChjb2wgLyBwcmVjaXNpb24udywgcm93IC8gcHJl
Y2lzaW9uLmgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZvciAodGls
ZVJvdyA9IDA7IHRpbGVSb3cgPCBzdWJkaXZpc2lvbnMuaDsgdGlsZVJvdysrKSB7CisgICAgICAg
IGZvciAodGlsZUNvbCA9IDA7IHRpbGVDb2wgPCBzdWJkaXZpc2lvbnMudzsgdGlsZUNvbCsrKSB7
CisgICAgICAgICAgICBhcHBseVRpbGUoeG1pbiArIHRpbGVDb2wgKiB0aWxlU2l6ZS53LCB6bWlu
ICsgdGlsZVJvdyAqIHRpbGVTaXplLmgsIHhtaW4gKyAodGlsZUNvbCArIDEpICogdGlsZVNpemUu
dywgem1pbiArICh0aWxlUm93ICsgMSkgKiB0aWxlU2l6ZS5oKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAvLyBSZXN1bHQKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXSgpOworICAgIHZlcnRl
eERhdGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgdmVydGV4RGF0YS5wb3NpdGlvbnMgPSBwb3Np
dGlvbnM7CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRh
LnV2cyA9IHV2czsKKyAgICByZXR1cm4gdmVydGV4RGF0YTsKK307CitfbWVzaF92ZXJ0ZXhEYXRh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5DcmVhdGVHcm91bmRG
cm9tSGVpZ2h0TWFwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICB2YXIgaW5kaWNlcyA9IFtd
OworICAgIHZhciBwb3NpdGlvbnMgPSBbXTsKKyAgICB2YXIgbm9ybWFscyA9IFtdOworICAgIHZh
ciB1dnMgPSBbXTsKKyAgICB2YXIgcm93LCBjb2w7CisgICAgdmFyIGZpbHRlciA9IG9wdGlvbnMu
Y29sb3JGaWx0ZXIgfHwgbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIkNvbG9yMyJdKDAuMywgMC41OSwgMC4xMSk7CisgICAgdmFyIGFscGhhRmlsdGVy
ID0gb3B0aW9ucy5hbHBoYUZpbHRlciB8fCAwLjA7CisgICAgdmFyIGludmVydCA9IGZhbHNlOwor
ICAgIGlmIChvcHRpb25zLm1pbkhlaWdodCA+IG9wdGlvbnMubWF4SGVpZ2h0KSB7CisgICAgICAg
IGludmVydCA9IHRydWU7CisgICAgICAgIHZhciB0ZW1wID0gb3B0aW9ucy5tYXhIZWlnaHQ7Cisg
ICAgICAgIG9wdGlvbnMubWF4SGVpZ2h0ID0gb3B0aW9ucy5taW5IZWlnaHQ7CisgICAgICAgIG9w
dGlvbnMubWluSGVpZ2h0ID0gdGVtcDsKKyAgICB9CisgICAgLy8gVmVydGljZXMKKyAgICBmb3Ig
KHJvdyA9IDA7IHJvdyA8PSBvcHRpb25zLnN1YmRpdmlzaW9uczsgcm93KyspIHsKKyAgICAgICAg
Zm9yIChjb2wgPSAwOyBjb2wgPD0gb3B0aW9ucy5zdWJkaXZpc2lvbnM7IGNvbCsrKSB7CisgICAg
ICAgICAgICB2YXIgcG9zaXRpb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgoY29sICogb3B0aW9ucy53aWR0aCkgLyBvcHRp
b25zLnN1YmRpdmlzaW9ucyAtIChvcHRpb25zLndpZHRoIC8gMi4wKSwgMCwgKChvcHRpb25zLnN1
YmRpdmlzaW9ucyAtIHJvdykgKiBvcHRpb25zLmhlaWdodCkgLyBvcHRpb25zLnN1YmRpdmlzaW9u
cyAtIChvcHRpb25zLmhlaWdodCAvIDIuMCkpOworICAgICAgICAgICAgLy8gQ29tcHV0ZSBoZWln
aHQKKyAgICAgICAgICAgIHZhciBoZWlnaHRNYXBYID0gKCgocG9zaXRpb24ueCArIG9wdGlvbnMu
d2lkdGggLyAyKSAvIG9wdGlvbnMud2lkdGgpICogKG9wdGlvbnMuYnVmZmVyV2lkdGggLSAxKSkg
fCAwOworICAgICAgICAgICAgdmFyIGhlaWdodE1hcFkgPSAoKDEuMCAtIChwb3NpdGlvbi56ICsg
b3B0aW9ucy5oZWlnaHQgLyAyKSAvIG9wdGlvbnMuaGVpZ2h0KSAqIChvcHRpb25zLmJ1ZmZlckhl
aWdodCAtIDEpKSB8IDA7CisgICAgICAgICAgICB2YXIgcG9zID0gKGhlaWdodE1hcFggKyBoZWln
aHRNYXBZICogb3B0aW9ucy5idWZmZXJXaWR0aCkgKiA0OworICAgICAgICAgICAgdmFyIHIgPSBv
cHRpb25zLmJ1ZmZlcltwb3NdIC8gMjU1LjA7CisgICAgICAgICAgICB2YXIgZyA9IG9wdGlvbnMu
YnVmZmVyW3BvcyArIDFdIC8gMjU1LjA7CisgICAgICAgICAgICB2YXIgYiA9IG9wdGlvbnMuYnVm
ZmVyW3BvcyArIDJdIC8gMjU1LjA7CisgICAgICAgICAgICB2YXIgYSA9IG9wdGlvbnMuYnVmZmVy
W3BvcyArIDNdIC8gMjU1LjA7CisgICAgICAgICAgICBpZiAoaW52ZXJ0KSB7CisgICAgICAgICAg
ICAgICAgciA9IDEuMCAtIHI7CisgICAgICAgICAgICAgICAgZyA9IDEuMCAtIGc7CisgICAgICAg
ICAgICAgICAgYiA9IDEuMCAtIGI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgZ3Jh
ZGllbnQgPSByICogZmlsdGVyLnIgKyBnICogZmlsdGVyLmcgKyBiICogZmlsdGVyLmI7CisgICAg
ICAgICAgICAvLyBJZiBvdXIgYWxwaGEgY2hhbm5lbCBpcyBub3Qgd2l0aGluIG91ciBmaWx0ZXIg
dGhlbiB3ZSB3aWxsIGFzc2lnbiBhICdzcGVjaWFsJyBoZWlnaHQKKyAgICAgICAgICAgIC8vIFRo
ZW4gd2hlbiBidWlsZGluZyB0aGUgaW5kaWNlcywgd2Ugd2lsbCBpZ25vcmUgYW55IHZlcnRleCB0
aGF0IGlzIHVzaW5nIHRoZSBzcGVjaWFsIGhlaWdodAorICAgICAgICAgICAgaWYgKGEgPj0gYWxw
aGFGaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbi55ID0gb3B0aW9ucy5taW5IZWln
aHQgKyAob3B0aW9ucy5tYXhIZWlnaHQgLSBvcHRpb25zLm1pbkhlaWdodCkgKiBncmFkaWVudDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBvc2l0
aW9uLnkgPSBvcHRpb25zLm1pbkhlaWdodCAtIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJFcHNpbG9uIl07IC8vIFdlIGNhbid0IGhhdmUgYSBoZWln
aHQgYmVsb3cgbWluSGVpZ2h0LCBub3JtYWxseS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC8vIEFkZCAgdmVydGV4CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChwb3NpdGlvbi54LCBw
b3NpdGlvbi55LCBwb3NpdGlvbi56KTsKKyAgICAgICAgICAgIG5vcm1hbHMucHVzaCgwLCAwLCAw
KTsKKyAgICAgICAgICAgIHV2cy5wdXNoKGNvbCAvIG9wdGlvbnMuc3ViZGl2aXNpb25zLCAxLjAg
LSByb3cgLyBvcHRpb25zLnN1YmRpdmlzaW9ucyk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8g
SW5kaWNlcworICAgIGZvciAocm93ID0gMDsgcm93IDwgb3B0aW9ucy5zdWJkaXZpc2lvbnM7IHJv
dysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgb3B0aW9ucy5zdWJkaXZpc2lvbnM7
IGNvbCsrKSB7CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgSW5kaWNlcworICAgICAgICAgICAg
dmFyIGlkeDEgPSAoY29sICsgMSArIChyb3cgKyAxKSAqIChvcHRpb25zLnN1YmRpdmlzaW9ucyAr
IDEpKTsKKyAgICAgICAgICAgIHZhciBpZHgyID0gKGNvbCArIDEgKyByb3cgKiAob3B0aW9ucy5z
dWJkaXZpc2lvbnMgKyAxKSk7CisgICAgICAgICAgICB2YXIgaWR4MyA9IChjb2wgKyByb3cgKiAo
b3B0aW9ucy5zdWJkaXZpc2lvbnMgKyAxKSk7CisgICAgICAgICAgICB2YXIgaWR4NCA9IChjb2wg
KyAocm93ICsgMSkgKiAob3B0aW9ucy5zdWJkaXZpc2lvbnMgKyAxKSk7CisgICAgICAgICAgICAv
LyBDaGVjayB0aGF0IGFsbCBpbmRpY2VzIGFyZSB2aXNpYmxlIChiYXNlZCBvbiBvdXIgc3BlY2lh
bCBoZWlnaHQpCisgICAgICAgICAgICAvLyBPbmx5IGRpc3BsYXkgdGhlIHZlcnRleCBpZiBhbGwg
SW5kaWNlcyBhcmUgdmlzaWJsZQorICAgICAgICAgICAgLy8gUG9zaXRpb25zIGFyZSBzdG9yZWQg
eCx5LHogZm9yIGVhY2ggdmVydGV4LCBoZW5jZSB0aGUgKiAzIGFuZCArIDEgZm9yIGhlaWdodAor
ICAgICAgICAgICAgdmFyIGlzVmlzaWJsZUlkeDEgPSBwb3NpdGlvbnNbaWR4MSAqIDMgKyAxXSA+
PSBvcHRpb25zLm1pbkhlaWdodDsKKyAgICAgICAgICAgIHZhciBpc1Zpc2libGVJZHgyID0gcG9z
aXRpb25zW2lkeDIgKiAzICsgMV0gPj0gb3B0aW9ucy5taW5IZWlnaHQ7CisgICAgICAgICAgICB2
YXIgaXNWaXNpYmxlSWR4MyA9IHBvc2l0aW9uc1tpZHgzICogMyArIDFdID49IG9wdGlvbnMubWlu
SGVpZ2h0OworICAgICAgICAgICAgaWYgKGlzVmlzaWJsZUlkeDEgJiYgaXNWaXNpYmxlSWR4MiAm
JiBpc1Zpc2libGVJZHgzKSB7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGlkeDEpOwor
ICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChpZHgyKTsKKyAgICAgICAgICAgICAgICBpbmRp
Y2VzLnB1c2goaWR4Myk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgaXNWaXNpYmxl
SWR4NCA9IHBvc2l0aW9uc1tpZHg0ICogMyArIDFdID49IG9wdGlvbnMubWluSGVpZ2h0OworICAg
ICAgICAgICAgaWYgKGlzVmlzaWJsZUlkeDQgJiYgaXNWaXNpYmxlSWR4MSAmJiBpc1Zpc2libGVJ
ZHgzKSB7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGlkeDQpOworICAgICAgICAgICAg
ICAgIGluZGljZXMucHVzaChpZHgxKTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goaWR4
Myk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gTm9ybWFscworICAg
IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0
YSJdLkNvbXB1dGVOb3JtYWxzKHBvc2l0aW9ucywgaW5kaWNlcywgbm9ybWFscyk7CisgICAgLy8g
UmVzdWx0CisgICAgdmFyIHZlcnRleERhdGEgPSBuZXcgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAgICB2ZXJ0ZXhEYXRhLmlu
ZGljZXMgPSBpbmRpY2VzOworICAgIHZlcnRleERhdGEucG9zaXRpb25zID0gcG9zaXRpb25zOwor
ICAgIHZlcnRleERhdGEubm9ybWFscyA9IG5vcm1hbHM7CisgICAgdmVydGV4RGF0YS51dnMgPSB1
dnM7CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siTWVzaCJdLkNyZWF0ZUdyb3VuZCA9IGZ1bmN0aW9uIChuYW1lLCB3aWR0aCwg
aGVpZ2h0LCBzdWJkaXZpc2lvbnMsIHNjZW5lLCB1cGRhdGFibGUpIHsKKyAgICB2YXIgb3B0aW9u
cyA9IHsKKyAgICAgICAgd2lkdGg6IHdpZHRoLAorICAgICAgICBoZWlnaHQ6IGhlaWdodCwKKyAg
ICAgICAgc3ViZGl2aXNpb25zOiBzdWJkaXZpc2lvbnMsCisgICAgICAgIHVwZGF0YWJsZTogdXBk
YXRhYmxlCisgICAgfTsKKyAgICByZXR1cm4gR3JvdW5kQnVpbGRlci5DcmVhdGVHcm91bmQobmFt
ZSwgb3B0aW9ucywgc2NlbmUpOworfTsKK19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk1lc2giXS5DcmVhdGVUaWxlZEdyb3VuZCA9IGZ1bmN0aW9uIChuYW1lLCB4bWluLCB6bWlu
LCB4bWF4LCB6bWF4LCBzdWJkaXZpc2lvbnMsIHByZWNpc2lvbiwgc2NlbmUsIHVwZGF0YWJsZSkg
eworICAgIHZhciBvcHRpb25zID0geworICAgICAgICB4bWluOiB4bWluLAorICAgICAgICB6bWlu
OiB6bWluLAorICAgICAgICB4bWF4OiB4bWF4LAorICAgICAgICB6bWF4OiB6bWF4LAorICAgICAg
ICBzdWJkaXZpc2lvbnM6IHN1YmRpdmlzaW9ucywKKyAgICAgICAgcHJlY2lzaW9uOiBwcmVjaXNp
b24sCisgICAgICAgIHVwZGF0YWJsZTogdXBkYXRhYmxlCisgICAgfTsKKyAgICByZXR1cm4gR3Jv
dW5kQnVpbGRlci5DcmVhdGVUaWxlZEdyb3VuZChuYW1lLCBvcHRpb25zLCBzY2VuZSk7Cit9Owor
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdLkNyZWF0ZUdyb3VuZEZy
b21IZWlnaHRNYXAgPSBmdW5jdGlvbiAobmFtZSwgdXJsLCB3aWR0aCwgaGVpZ2h0LCBzdWJkaXZp
c2lvbnMsIG1pbkhlaWdodCwgbWF4SGVpZ2h0LCBzY2VuZSwgdXBkYXRhYmxlLCBvblJlYWR5LCBh
bHBoYUZpbHRlcikgeworICAgIHZhciBvcHRpb25zID0geworICAgICAgICB3aWR0aDogd2lkdGgs
CisgICAgICAgIGhlaWdodDogaGVpZ2h0LAorICAgICAgICBzdWJkaXZpc2lvbnM6IHN1YmRpdmlz
aW9ucywKKyAgICAgICAgbWluSGVpZ2h0OiBtaW5IZWlnaHQsCisgICAgICAgIG1heEhlaWdodDog
bWF4SGVpZ2h0LAorICAgICAgICB1cGRhdGFibGU6IHVwZGF0YWJsZSwKKyAgICAgICAgb25SZWFk
eTogb25SZWFkeSwKKyAgICAgICAgYWxwaGFGaWx0ZXI6IGFscGhhRmlsdGVyCisgICAgfTsKKyAg
ICByZXR1cm4gR3JvdW5kQnVpbGRlci5DcmVhdGVHcm91bmRGcm9tSGVpZ2h0TWFwKG5hbWUsIHVy
bCwgb3B0aW9ucywgc2NlbmUpOworfTsKKy8qKgorICogQ2xhc3MgY29udGFpbmluZyBzdGF0aWMg
ZnVuY3Rpb25zIHRvIGhlbHAgcHJvY2VkdXJhbGx5IGJ1aWxkIG1lc2hlcworICovCit2YXIgR3Jv
dW5kQnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBH
cm91bmRCdWlsZGVyKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgZ3JvdW5k
IG1lc2gKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXJzIGB3aWR0aGAgYW5kIGBoZWlnaHRgIChmbG9h
dHMsIGRlZmF1bHQgMSkgc2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHNpemVzIG9mIHRoZSBncm91
bmQKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHN1YmRpdmlzaW9uc2AgKHBvc2l0aXZlIGludGVn
ZXIpIHNldHMgdGhlIG51bWJlciBvZiBzdWJkaXZpc2lvbnMgcGVyIHNpZGUKKyAgICAgKiAqIFRo
ZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVy
IGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMg
c3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmlu
ZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRo
ZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRl
ZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgZ3JvdW5kIG1lc2gK
KyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3NldF9zaGFwZXMj
Z3JvdW5kCisgICAgICovCisgICAgR3JvdW5kQnVpbGRlci5DcmVhdGVHcm91bmQgPSBmdW5jdGlv
biAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgdmFyIGdyb3VuZCA9IG5ldyBfZ3Jv
dW5kTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJHcm91bmRNZXNoIl0obmFtZSwg
c2NlbmUpOworICAgICAgICBncm91bmQuX3NldFJlYWR5KGZhbHNlKTsKKyAgICAgICAgZ3JvdW5k
Ll9zdWJkaXZpc2lvbnNYID0gb3B0aW9ucy5zdWJkaXZpc2lvbnNYIHx8IG9wdGlvbnMuc3ViZGl2
aXNpb25zIHx8IDE7CisgICAgICAgIGdyb3VuZC5fc3ViZGl2aXNpb25zWSA9IG9wdGlvbnMuc3Vi
ZGl2aXNpb25zWSB8fCBvcHRpb25zLnN1YmRpdmlzaW9ucyB8fCAxOworICAgICAgICBncm91bmQu
X3dpZHRoID0gb3B0aW9ucy53aWR0aCB8fCAxOworICAgICAgICBncm91bmQuX2hlaWdodCA9IG9w
dGlvbnMuaGVpZ2h0IHx8IDE7CisgICAgICAgIGdyb3VuZC5fbWF4WCA9IGdyb3VuZC5fd2lkdGgg
LyAyOworICAgICAgICBncm91bmQuX21heFogPSBncm91bmQuX2hlaWdodCAvIDI7CisgICAgICAg
IGdyb3VuZC5fbWluWCA9IC1ncm91bmQuX21heFg7CisgICAgICAgIGdyb3VuZC5fbWluWiA9IC1n
cm91bmQuX21heFo7CisgICAgICAgIHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4RGF0YV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlR3JvdW5kKG9w
dGlvbnMpOworICAgICAgICB2ZXJ0ZXhEYXRhLmFwcGx5VG9NZXNoKGdyb3VuZCwgb3B0aW9ucy51
cGRhdGFibGUpOworICAgICAgICBncm91bmQuX3NldFJlYWR5KHRydWUpOworICAgICAgICByZXR1
cm4gZ3JvdW5kOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHRpbGVkIGdyb3Vu
ZCBtZXNoCisgICAgICogKiBUaGUgcGFyYW1ldGVycyBgeG1pbmAgYW5kIGB4bWF4YCAoZmxvYXRz
LCBkZWZhdWx0IC0xIGFuZCAxKSBzZXQgdGhlIGdyb3VuZCBtaW5pbXVtIGFuZCBtYXhpbXVtIFgg
Y29vcmRpbmF0ZXMKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXJzIGB6bWluYCBhbmQgYHptYXhgIChm
bG9hdHMsIGRlZmF1bHQgLTEgYW5kIDEpIHNldCB0aGUgZ3JvdW5kIG1pbmltdW0gYW5kIG1heGlt
dW0gWiBjb29yZGluYXRlcworICAgICAqICogVGhlIHBhcmFtZXRlciBgc3ViZGl2aXNpb25zYCBp
cyBhIGphdmFzY3JpcHQgb2JqZWN0IGB7dzogcG9zaXRpdmUgaW50ZWdlciwgaDogcG9zaXRpdmUg
aW50ZWdlcn1gIChkZWZhdWx0IGB7dzogNiwgaDogNn1gKS4gYHdgIGFuZCBgaGAgYXJlIHRoZSBu
dW1iZXJzIG9mIHN1YmRpdmlzaW9ucyBvbiB0aGUgZ3JvdW5kIHdpZHRoIGFuZCBoZWlnaHQuIEVh
Y2ggc3ViZGl2aXNpb24gaXMgY2FsbGVkIGEgdGlsZQorICAgICAqICogVGhlIHBhcmFtZXRlciBg
cHJlY2lzaW9uYCBpcyBhIGphdmFzY3JpcHQgb2JqZWN0IGB7dzogcG9zaXRpdmUgaW50ZWdlciwg
aDogcG9zaXRpdmUgaW50ZWdlcn1gIChkZWZhdWx0IGB7dzogMiwgaDogMn1gKS4gYHdgIGFuZCBg
aGAgYXJlIHRoZSBudW1iZXJzIG9mIHN1YmRpdmlzaW9ucyBvbiB0aGUgZ3JvdW5kIHdpZHRoIGFu
ZCBoZWlnaHQgb2YgZWFjaCB0aWxlCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVw
ZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBm
YWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNl
IGNyZWF0ZWQuCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVz
aAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVh
dGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2Vu
ZQorICAgICAqIEByZXR1cm5zIHRoZSB0aWxlZCBncm91bmQgbWVzaAorICAgICAqIEBzZWUgaHR0
cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vc2V0X3NoYXBlcyN0aWxlZC1ncm91bmQKKyAg
ICAgKi8KKyAgICBHcm91bmRCdWlsZGVyLkNyZWF0ZVRpbGVkR3JvdW5kID0gZnVuY3Rpb24gKG5h
bWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNj
ZW5lID0gbnVsbDsgfQorICAgICAgICB2YXIgdGlsZWRHcm91bmQgPSBuZXcgX21lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdKG5hbWUsIHNjZW5lKTsKKyAgICAgICAgdmFy
IHZlcnRleERhdGEgPSBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlZlcnRleERhdGEiXS5DcmVhdGVUaWxlZEdyb3VuZChvcHRpb25zKTsKKyAgICAgICAgdmVy
dGV4RGF0YS5hcHBseVRvTWVzaCh0aWxlZEdyb3VuZCwgb3B0aW9ucy51cGRhdGFibGUpOworICAg
ICAgICByZXR1cm4gdGlsZWRHcm91bmQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgZ3JvdW5kIG1lc2ggZnJvbSBhIGhlaWdodCBtYXAKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIg
YHVybGAgc2V0cyB0aGUgVVJMIG9mIHRoZSBoZWlnaHQgbWFwIGltYWdlIHJlc291cmNlLgorICAg
ICAqICogVGhlIHBhcmFtZXRlcnMgYHdpZHRoYCBhbmQgYGhlaWdodGAgKHBvc2l0aXZlIGZsb2F0
cywgZGVmYXVsdCAxMCkgc2V0IHRoZSBncm91bmQgd2lkdGggYW5kIGhlaWdodCBzaXplcy4KKyAg
ICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHN1YmRpdmlzaW9uc2AgKHBvc2l0aXZlIGludGVnZXIsIGRl
ZmF1bHQgMSkgc2V0cyB0aGUgbnVtYmVyIG9mIHN1YmRpdmlzaW9uIHBlciBzaWRlLgorICAgICAq
ICogVGhlIHBhcmFtZXRlciBgbWluSGVpZ2h0YCAoZmxvYXQsIGRlZmF1bHQgMCkgaXMgdGhlIG1p
bmltdW0gYWx0aXR1ZGUgb24gdGhlIGdyb3VuZC4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYG1h
eEhlaWdodGAgKGZsb2F0LCBkZWZhdWx0IDEpIGlzIHRoZSBtYXhpbXVtIGFsdGl0dWRlIG9uIHRo
ZSBncm91bmQuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBjb2xvckZpbHRlcmAgKG9wdGlvbmFs
IENvbG9yMywgZGVmYXVsdCAoMC4zLCAwLjU5LCAwLjExKSApIGlzIHRoZSBmaWx0ZXIgdG8gYXBw
bHkgdG8gdGhlIGltYWdlIHBpeGVsIGNvbG9ycyB0byBjb21wdXRlIHRoZSBoZWlnaHQuCisgICAg
ICogKiBUaGUgcGFyYW1ldGVyIGBvblJlYWR5YCBpcyBhIGphdmFzY3JpcHQgY2FsbGJhY2sgZnVu
Y3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCAgb25jZSB0aGUgbWVzaCBpcyBqdXN0IGJ1aWx0ICh0
aGUgaGVpZ2h0IG1hcCBkb3dubG9hZCBjYW4gbGFzdCBzb21lIHRpbWUpLgorICAgICAqICogVGhl
IHBhcmFtZXRlciBgYWxwaGFGaWx0ZXJgIHdpbGwgZmlsdGVyIGFueSBkYXRhIHdoZXJlIHRoZSBh
bHBoYSBjaGFubmVsIGlzIGJlbG93IHRoaXMgdmFsdWUsIGRlZmF1bHRzIDAgKGFsbCBkYXRhIHZp
c2libGUpCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRo
ZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGlu
dGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQuCisgICAg
ICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJh
bSB1cmwgZGVmaW5lcyB0aGUgdXJsIHRvIHRoZSBoZWlnaHQgbWFwCisgICAgICogQHBhcmFtIG9w
dGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAq
IEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMg
dGhlIGdyb3VuZCBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2Jh
Ynlsb24xMDEvaGVpZ2h0X21hcAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNv
bS9ob3dfdG8vc2V0X3NoYXBlcyNncm91bmQtZnJvbS1hLWhlaWdodC1tYXAKKyAgICAgKi8KKyAg
ICBHcm91bmRCdWlsZGVyLkNyZWF0ZUdyb3VuZEZyb21IZWlnaHRNYXAgPSBmdW5jdGlvbiAobmFt
ZSwgdXJsLCBvcHRpb25zLCBzY2VuZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkg
eyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCB8fCAx
MC4wOworICAgICAgICB2YXIgaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgMTAuMDsKKyAgICAg
ICAgdmFyIHN1YmRpdmlzaW9ucyA9IG9wdGlvbnMuc3ViZGl2aXNpb25zIHx8IDEgfCAwOworICAg
ICAgICB2YXIgbWluSGVpZ2h0ID0gb3B0aW9ucy5taW5IZWlnaHQgfHwgMC4wOworICAgICAgICB2
YXIgbWF4SGVpZ2h0ID0gb3B0aW9ucy5tYXhIZWlnaHQgfHwgMS4wOworICAgICAgICB2YXIgZmls
dGVyID0gb3B0aW9ucy5jb2xvckZpbHRlciB8fCBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3IzIl0oMC4zLCAwLjU5LCAwLjExKTsKKyAgICAg
ICAgdmFyIGFscGhhRmlsdGVyID0gb3B0aW9ucy5hbHBoYUZpbHRlciB8fCAwLjA7CisgICAgICAg
IHZhciB1cGRhdGFibGUgPSBvcHRpb25zLnVwZGF0YWJsZTsKKyAgICAgICAgdmFyIG9uUmVhZHkg
PSBvcHRpb25zLm9uUmVhZHk7CisgICAgICAgIHNjZW5lID0gc2NlbmUgfHwgX0VuZ2luZXNfZW5n
aW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRW5naW5lU3RvcmUiXS5MYXN0
Q3JlYXRlZFNjZW5lOworICAgICAgICB2YXIgZ3JvdW5kID0gbmV3IF9ncm91bmRNZXNoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkdyb3VuZE1lc2giXShuYW1lLCBzY2VuZSk7CisgICAg
ICAgIGdyb3VuZC5fc3ViZGl2aXNpb25zWCA9IHN1YmRpdmlzaW9uczsKKyAgICAgICAgZ3JvdW5k
Ll9zdWJkaXZpc2lvbnNZID0gc3ViZGl2aXNpb25zOworICAgICAgICBncm91bmQuX3dpZHRoID0g
d2lkdGg7CisgICAgICAgIGdyb3VuZC5faGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBncm91bmQu
X21heFggPSBncm91bmQuX3dpZHRoIC8gMi4wOworICAgICAgICBncm91bmQuX21heFogPSBncm91
bmQuX2hlaWdodCAvIDIuMDsKKyAgICAgICAgZ3JvdW5kLl9taW5YID0gLWdyb3VuZC5fbWF4WDsK
KyAgICAgICAgZ3JvdW5kLl9taW5aID0gLWdyb3VuZC5fbWF4WjsKKyAgICAgICAgZ3JvdW5kLl9z
ZXRSZWFkeShmYWxzZSk7CisgICAgICAgIHZhciBvbmxvYWQgPSBmdW5jdGlvbiAoaW1nKSB7Cisg
ICAgICAgICAgICAvLyBHZXR0aW5nIGhlaWdodCBtYXAgZGF0YQorICAgICAgICAgICAgdmFyIGNh
bnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOworICAgICAgICAgICAgdmFy
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICAgICAgICAgIGlmICghY29u
dGV4dCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGdldCAy
ZCBjb250ZXh0IGZvciBDcmVhdGVHcm91bmRGcm9tSGVpZ2h0TWFwIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoc2NlbmUuaXNEaXNwb3NlZCkgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBidWZmZXJXaWR0aCA9IGltZy53
aWR0aDsKKyAgICAgICAgICAgIHZhciBidWZmZXJIZWlnaHQgPSBpbWcuaGVpZ2h0OworICAgICAg
ICAgICAgY2FudmFzLndpZHRoID0gYnVmZmVyV2lkdGg7CisgICAgICAgICAgICBjYW52YXMuaGVp
Z2h0ID0gYnVmZmVySGVpZ2h0OworICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1nLCAw
LCAwKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBWZXJ0ZXhEYXRhIGZyb20gbWFwIGRhdGEKKyAg
ICAgICAgICAgIC8vIENhc3QgaXMgZHVlIHRvIHdyb25nIGRlZmluaXRpb24gaW4gbGliLmQudHMg
ZnJvbSB0cyAxLjMgLSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNz
dWVzLzk0OQorICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAs
IDAsIGJ1ZmZlcldpZHRoLCBidWZmZXJIZWlnaHQpLmRhdGE7CisgICAgICAgICAgICB2YXIgdmVy
dGV4RGF0YSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVydGV4RGF0YSJdLkNyZWF0ZUdyb3VuZEZyb21IZWlnaHRNYXAoeworICAgICAgICAgICAgICAg
IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAgICAgICAgc3ViZGl2aXNp
b25zOiBzdWJkaXZpc2lvbnMsCisgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBtaW5IZWlnaHQs
IG1heEhlaWdodDogbWF4SGVpZ2h0LCBjb2xvckZpbHRlcjogZmlsdGVyLAorICAgICAgICAgICAg
ICAgIGJ1ZmZlcjogYnVmZmVyLCBidWZmZXJXaWR0aDogYnVmZmVyV2lkdGgsIGJ1ZmZlckhlaWdo
dDogYnVmZmVySGVpZ2h0LAorICAgICAgICAgICAgICAgIGFscGhhRmlsdGVyOiBhbHBoYUZpbHRl
cgorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB2ZXJ0ZXhEYXRhLmFwcGx5VG9NZXNoKGdy
b3VuZCwgdXBkYXRhYmxlKTsKKyAgICAgICAgICAgIC8vZXhlY3V0ZSByZWFkeSBjYWxsYmFjaywg
aWYgc2V0CisgICAgICAgICAgICBpZiAob25SZWFkeSkgeworICAgICAgICAgICAgICAgIG9uUmVh
ZHkoZ3JvdW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdyb3VuZC5fc2V0UmVhZHko
dHJ1ZSk7CisgICAgICAgIH07CisgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlRvb2xzIl0uTG9hZEltYWdlKHVybCwgb25sb2FkLCBmdW5jdGlvbiAoKSB7
IH0sIHNjZW5lLm9mZmxpbmVQcm92aWRlcik7CisgICAgICAgIHJldHVybiBncm91bmQ7CisgICAg
fTsKKyAgICByZXR1cm4gR3JvdW5kQnVpbGRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWVzaGVzL0J1aWxkZXJzL2hlbWlzcGhlcmVCdWlsZGVyLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01l
c2hlcy9CdWlsZGVycy9oZW1pc3BoZXJlQnVpbGRlci50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IEhlbWlzcGhlcmVCdWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkhlbWlzcGhlcmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBIZW1pc3BoZXJlQnVpbGRl
cjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2ggKi8gIi4vTWVzaGVz
L21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQnVpbGRlcnNfc3BoZXJlQnVp
bGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vQnVpbGRlcnMvc3BoZXJlQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJl
QnVpbGRlci50cyIpOworCisKKy8qKgorICogQ3JlYXRlcyBhIGhlbWlzcGhlcmljIGxpZ2h0Cisg
Ki8KK19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5DcmVhdGVIZW1p
c3BoZXJlID0gZnVuY3Rpb24gKG5hbWUsIHNlZ21lbnRzLCBkaWFtZXRlciwgc2NlbmUpIHsKKyAg
ICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgc2VnbWVudHM6IHNlZ21lbnRzLAorICAgICAgICBk
aWFtZXRlcjogZGlhbWV0ZXIKKyAgICB9OworICAgIHJldHVybiBIZW1pc3BoZXJlQnVpbGRlci5D
cmVhdGVIZW1pc3BoZXJlKG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKK307CisvKioKKyAqIENsYXNz
IGNvbnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWlsZCBt
ZXNoZXMKKyAqLwordmFyIEhlbWlzcGhlcmVCdWlsZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgeworICAgIGZ1bmN0aW9uIEhlbWlzcGhlcmVCdWlsZGVyKCkgeworICAgIH0KKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgaGVtaXNwaGVyZSBtZXNoCisgICAgICogQHBhcmFtIG5hbWUg
ZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmlu
ZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSBoZW1pc3Bo
ZXJlIG1lc2gKKyAgICAgKi8KKyAgICBIZW1pc3BoZXJlQnVpbGRlci5DcmVhdGVIZW1pc3BoZXJl
ID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmICghb3B0aW9u
cy5kaWFtZXRlcikgeworICAgICAgICAgICAgb3B0aW9ucy5kaWFtZXRlciA9IDE7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFvcHRpb25zLnNlZ21lbnRzKSB7CisgICAgICAgICAgICBvcHRpb25z
LnNlZ21lbnRzID0gMTY7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGhhbGZTcGhlcmUgPSBfQnVp
bGRlcnNfc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTcGhlcmVC
dWlsZGVyIl0uQ3JlYXRlU3BoZXJlKCIiLCB7IHNsaWNlOiAwLjUsIGRpYW1ldGVyOiBvcHRpb25z
LmRpYW1ldGVyLCBzZWdtZW50czogb3B0aW9ucy5zZWdtZW50cyB9LCBzY2VuZSk7CisgICAgICAg
IHZhciBkaXNjID0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkNy
ZWF0ZURpc2MoIiIsIG9wdGlvbnMuZGlhbWV0ZXIgLyAyLCAob3B0aW9ucy5zZWdtZW50cyAqIDMp
ICsgKDQgLSBvcHRpb25zLnNlZ21lbnRzKSwgc2NlbmUpOworICAgICAgICBkaXNjLnJvdGF0aW9u
LnggPSAtTWF0aC5QSSAvIDI7CisgICAgICAgIGRpc2MucGFyZW50ID0gaGFsZlNwaGVyZTsKKyAg
ICAgICAgdmFyIG1lcmdlZCA9IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1l
c2giXS5NZXJnZU1lc2hlcyhbZGlzYywgaGFsZlNwaGVyZV0sIHRydWUpOworICAgICAgICBtZXJn
ZWQubmFtZSA9IG5hbWU7CisgICAgICAgIHJldHVybiBtZXJnZWQ7CisgICAgfTsKKyAgICByZXR1
cm4gSGVtaXNwaGVyZUJ1aWxkZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L01lc2hlcy9CdWlsZGVycy9pY29TcGhlcmVCdWlsZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL0J1aWxk
ZXJzL2ljb1NwaGVyZUJ1aWxkZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEljb1NwaGVyZUJ1
aWxkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSWNvU3BoZXJlQnVp
bGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSWNvU3BoZXJlQnVpbGRlcjsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3Rv
ciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNo
LnZlcnRleERhdGEudHMiKTsKKworCisKK19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siVmVydGV4RGF0YSJdLkNyZWF0ZUljb1NwaGVyZSA9IGZ1bmN0aW9uIChv
cHRpb25zKSB7CisgICAgdmFyIHNpZGVPcmllbnRhdGlvbiA9IG9wdGlvbnMuc2lkZU9yaWVudGF0
aW9uIHx8IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVy
dGV4RGF0YSJdLkRFRkFVTFRTSURFOworICAgIHZhciByYWRpdXMgPSBvcHRpb25zLnJhZGl1cyB8
fCAxOworICAgIHZhciBmbGF0ID0gKG9wdGlvbnMuZmxhdCA9PT0gdW5kZWZpbmVkKSA/IHRydWUg
OiBvcHRpb25zLmZsYXQ7CisgICAgdmFyIHN1YmRpdmlzaW9ucyA9IG9wdGlvbnMuc3ViZGl2aXNp
b25zIHx8IDQ7CisgICAgdmFyIHJhZGl1c1ggPSBvcHRpb25zLnJhZGl1c1ggfHwgcmFkaXVzOwor
ICAgIHZhciByYWRpdXNZID0gb3B0aW9ucy5yYWRpdXNZIHx8IHJhZGl1czsKKyAgICB2YXIgcmFk
aXVzWiA9IG9wdGlvbnMucmFkaXVzWiB8fCByYWRpdXM7CisgICAgdmFyIHQgPSAoMSArIE1hdGgu
c3FydCg1KSkgLyAyOworICAgIC8vIDEyIHZlcnRleCB4LHksegorICAgIHZhciBpY29fdmVydGlj
ZXMgPSBbCisgICAgICAgIC0xLCB0LCAtMCwgMSwgdCwgMCwgLTEsIC10LCAwLCAxLCAtdCwgMCwK
KyAgICAgICAgMCwgLTEsIC10LCAwLCAxLCAtdCwgMCwgLTEsIHQsIDAsIDEsIHQsCisgICAgICAg
IHQsIDAsIDEsIHQsIDAsIC0xLCAtdCwgMCwgMSwgLXQsIDAsIC0xIC8vIHY4LTExCisgICAgXTsK
KyAgICAvLyBpbmRleCBvZiAzIHZlcnRleCBtYWtlcyBhIGZhY2Ugb2YgaWNvcHNoZXJlCisgICAg
dmFyIGljb19pbmRpY2VzID0gWworICAgICAgICAwLCAxMSwgNSwgMCwgNSwgMSwgMCwgMSwgNywg
MCwgNywgMTAsIDEyLCAyMiwgMjMsCisgICAgICAgIDEsIDUsIDIwLCA1LCAxMSwgNCwgMjMsIDIy
LCAxMywgMjIsIDE4LCA2LCA3LCAxLCA4LAorICAgICAgICAxNCwgMjEsIDQsIDE0LCA0LCAyLCAx
NiwgMTMsIDYsIDE1LCA2LCAxOSwgMywgOCwgOSwKKyAgICAgICAgNCwgMjEsIDUsIDEzLCAxNywg
MjMsIDYsIDEzLCAyMiwgMTksIDYsIDE4LCA5LCA4LCAxCisgICAgXTsKKyAgICAvLyB2ZXJ0ZXgg
Zm9yIHV2IGhhdmUgYWxpYXNlZCBwb3NpdGlvbiwgbm90IGZvciBVVgorICAgIHZhciB2ZXJ0aWNl
c191bmFsaWFzX2lkID0gWworICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx
MCwgMTEsCisgICAgICAgIC8vIHZlcnRleCBhbGlhcworICAgICAgICAwLAorICAgICAgICAyLAor
ICAgICAgICAzLAorICAgICAgICAzLAorICAgICAgICAzLAorICAgICAgICA0LAorICAgICAgICA3
LAorICAgICAgICA4LAorICAgICAgICA5LAorICAgICAgICA5LAorICAgICAgICAxMCwKKyAgICAg
ICAgMTEgLy8gMjM6IEIgKyAxMgorICAgIF07CisgICAgLy8gdXYgYXMgaW50ZWdlciBzdGVwIChu
b3QgcGl4ZWxzICEpCisgICAgdmFyIGljb192ZXJ0ZXh1diA9IFsKKyAgICAgICAgNSwgMSwgMywg
MSwgNiwgNCwgMCwgMCwKKyAgICAgICAgNSwgMywgNCwgMiwgMiwgMiwgNCwgMCwKKyAgICAgICAg
MiwgMCwgMSwgMSwgNiwgMCwgNiwgMiwKKyAgICAgICAgLy8gdmVydGV4IGFsaWFzIChmb3Igc2Ft
ZSB2ZXJ0ZXggb24gZGlmZmVyZW50IGZhY2VzKQorICAgICAgICAwLCA0LAorICAgICAgICAzLCAz
LAorICAgICAgICA0LCA0LAorICAgICAgICAzLCAxLAorICAgICAgICA0LCAyLAorICAgICAgICA0
LCA0LAorICAgICAgICAwLCAyLAorICAgICAgICAxLCAxLAorICAgICAgICAyLCAyLAorICAgICAg
ICAzLCAzLAorICAgICAgICAxLCAzLAorICAgICAgICAyLCA0IC8vIDIzOiBCICsgMTIKKyAgICBd
OworICAgIC8vIFZlcnRpY2VzWzAsIDEsIC4uLjksIEEsIEJdIDogcG9zaXRpb24gb24gVVYgcGxh
bmUKKyAgICAvLyAnKycgaW5kaWNhdGUgZHVwbGljYXRlIHBvc2l0aW9uIHRvIGJlIGZpeGVkICgz
LDk6MCwyLDMsNCw3LDgsQSxCKQorICAgIC8vIEZpcnN0IGlzbGFuZCBvZiB1diBtYXBwaW5nCisg
ICAgLy8gdiA9IDRoICAgICAgICAgIDMrICAyCisgICAgLy8gdiA9IDNoICAgICAgICA5KyAgNAor
ICAgIC8vIHYgPSAyaCAgICAgIDkrICA1ICAgQgorICAgIC8vIHYgPSAxaCAgICA5ICAgMSAgIDAK
KyAgICAvLyB2ID0gMGggIDMgICA4ICAgNyAgIEEKKyAgICAvLyAgICAgdSA9IDAgMSAyIDMgNCA1
IDYgICphCisgICAgLy8gU2Vjb25kIGlzbGFuZCBvZiB1diBtYXBwaW5nCisgICAgLy8gdiA9IDRo
ICAwKyAgQisgIDQrCisgICAgLy8gdiA9IDNoICAgIEErICAyKworICAgIC8vIHYgPSAyaCAgNysg
IDYgICAzKworICAgIC8vIHYgPSAxaCAgICA4KyAgMysKKyAgICAvLyB2ID0gMGgKKyAgICAvLyAg
ICAgdSA9IDAgMSAyIDMgNCA1IDYgICphCisgICAgLy8gRmFjZSBsYXlvdXQgb24gdGV4dHVyZSBV
ViBtYXBwaW5nCisgICAgLy8gPT09PT09PT09PT09CisgICAgLy8gXCA0ICAvXCAxNiAvICAgPT09
PT09CisgICAgLy8gIFwgIC8gIFwgIC8gICAvXCAxMSAvCisgICAgLy8gICBcLyA3ICBcLyAgIC8g
IFwgIC8KKyAgICAvLyAgICA9PT09PT09ICAvIDEwIFwvCisgICAgLy8gICAvXCAxNyAvXCAgPT09
PT09PQorICAgIC8vICAvICBcICAvICBcIFwgMTUgL1wKKyAgICAvLyAvIDggIFwvIDEyIFwgXCAg
LyAgXAorICAgIC8vID09PT09PT09PT09PSAgXC8gNiAgXAorICAgIC8vIFwgMTggL1wgID09PT09
PT09PT09PQorICAgIC8vICBcICAvICBcIFwgNSAgL1wgMCAgLworICAgIC8vICAgXC8gMTMgXCBc
ICAvICBcICAvCisgICAgLy8gICA9PT09PT09ICBcLyAxICBcLworICAgIC8vICAgICAgID09PT09
PT09PT09PT0KKyAgICAvLyAgICAgIC9cIDE5IC9cICAyIC9cCisgICAgLy8gICAgIC8gIFwgIC8g
IFwgIC8gIFwKKyAgICAvLyAgICAvIDE0IFwvIDkgIFwvICAzIFwKKyAgICAvLyAgID09PT09PT09
PT09PT09PT09PT0KKyAgICAvLyB1diBzdGVwIGlzIHU6MSBvciAwLjUsIHY6Y29zKDMwKT1zcXJ0
KDMpLzIsIHJhdGlvIGFwcHJveCBpcyA4NC85NworICAgIHZhciB1c3RlcCA9IDEzOCAvIDEwMjQ7
CisgICAgdmFyIHZzdGVwID0gMjM5IC8gMTAyNDsKKyAgICB2YXIgdW9mZnNldCA9IDYwIC8gMTAy
NDsKKyAgICB2YXIgdm9mZnNldCA9IDI2IC8gMTAyNDsKKyAgICAvLyBTZWNvbmQgaXNsYW5kIHNo
b3VsZCBoYXZlIG1hcmdpbiwgbm90IHRvIHRvdWNoIHRoZSBmaXJzdCBpc2xhbmQKKyAgICAvLyBh
dm9pZCBhbnkgYm9yZGVybGluZSBhcnRlZmFjdCBpbiBwaXhlbCByb3VuZGluZworICAgIHZhciBp
c2xhbmRfdV9vZmZzZXQgPSAtNDAgLyAxMDI0OworICAgIHZhciBpc2xhbmRfdl9vZmZzZXQgPSAr
MjAgLyAxMDI0OworICAgIC8vIGZhY2UgaXMgZWl0aGVyIGlzbGFuZCAwIG9yIDEgOgorICAgIC8v
IHNlY29uZCBpc2xhbmQgaXMgZm9yIGZhY2VzIDogWzQsIDcsIDgsIDEyLCAxMywgMTYsIDE3LCAx
OF0KKyAgICB2YXIgaXNsYW5kID0gWworICAgICAgICAwLCAwLCAwLCAwLCAxLAorICAgICAgICAw
LCAwLCAxLCAxLCAwLAorICAgICAgICAwLCAwLCAxLCAxLCAwLAorICAgICAgICAwLCAxLCAxLCAx
LCAwIC8vICAxNSAtIDE5CisgICAgXTsKKyAgICB2YXIgaW5kaWNlcyA9IG5ldyBBcnJheSgpOwor
ICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgbm9ybWFscyA9IG5ldyBB
cnJheSgpOworICAgIHZhciB1dnMgPSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgY3VycmVudF9pbmRp
Y2UgPSAwOworICAgIC8vIHByZXBhcmUgYXJyYXkgb2YgMyB2ZWN0b3IgKGVtcHR5KSAodG8gYmUg
d29ya2VkIGluIHBsYWNlLCBzaGFyZWQgZm9yIGVhY2ggZmFjZSkKKyAgICB2YXIgZmFjZV92ZXJ0
ZXhfcG9zID0gbmV3IEFycmF5KDMpOworICAgIHZhciBmYWNlX3ZlcnRleF91diA9IG5ldyBBcnJh
eSgzKTsKKyAgICB2YXIgdjAxMjsKKyAgICBmb3IgKHYwMTIgPSAwOyB2MDEyIDwgMzsgdjAxMisr
KSB7CisgICAgICAgIGZhY2VfdmVydGV4X3Bvc1t2MDEyXSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBm
YWNlX3ZlcnRleF91dlt2MDEyXSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJWZWN0b3IyIl0uWmVybygpOworICAgIH0KKyAgICAvLyBjcmVhdGUgYWxs
IHdpdGggbm9ybWFscworICAgIGZvciAodmFyIGZhY2UgPSAwOyBmYWNlIDwgMjA7IGZhY2UrKykg
eworICAgICAgICAvLyAzIHZlcnRleCBwZXIgZmFjZQorICAgICAgICBmb3IgKHYwMTIgPSAwOyB2
MDEyIDwgMzsgdjAxMisrKSB7CisgICAgICAgICAgICAvLyBsb29rIHVwIHZlcnRleCAwLDEsMiB0
byBpdHMgaW5kZXggaW4gMCB0byAxMSAob3IgMjMgaW5jbHVkaW5nIGFsaWFzKQorICAgICAgICAg
ICAgdmFyIHZfaWQgPSBpY29faW5kaWNlc1szICogZmFjZSArIHYwMTJdOworICAgICAgICAgICAg
Ly8gdmVydGV4IGhhdmUgM0QgcG9zaXRpb24gKHgseSx6KQorICAgICAgICAgICAgZmFjZV92ZXJ0
ZXhfcG9zW3YwMTJdLmNvcHlGcm9tRmxvYXRzKGljb192ZXJ0aWNlc1szICogdmVydGljZXNfdW5h
bGlhc19pZFt2X2lkXV0sIGljb192ZXJ0aWNlc1szICogdmVydGljZXNfdW5hbGlhc19pZFt2X2lk
XSArIDFdLCBpY29fdmVydGljZXNbMyAqIHZlcnRpY2VzX3VuYWxpYXNfaWRbdl9pZF0gKyAyXSk7
CisgICAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gZ2V0IG5vcm1hbCwgdGhlbiBzY2FsZSB0byBy
YWRpdXMKKyAgICAgICAgICAgIGZhY2VfdmVydGV4X3Bvc1t2MDEyXS5ub3JtYWxpemUoKS5zY2Fs
ZUluUGxhY2UocmFkaXVzKTsKKyAgICAgICAgICAgIC8vIHV2IENvb3JkaW5hdGVzIGZyb20gdmVy
dGV4IElECisgICAgICAgICAgICBmYWNlX3ZlcnRleF91dlt2MDEyXS5jb3B5RnJvbUZsb2F0cyhp
Y29fdmVydGV4dXZbMiAqIHZfaWRdICogdXN0ZXAgKyB1b2Zmc2V0ICsgaXNsYW5kW2ZhY2VdICog
aXNsYW5kX3Vfb2Zmc2V0LCBpY29fdmVydGV4dXZbMiAqIHZfaWQgKyAxXSAqIHZzdGVwICsgdm9m
ZnNldCArIGlzbGFuZFtmYWNlXSAqIGlzbGFuZF92X29mZnNldCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gU3ViZGl2aWRlIHRoZSBmYWNlIChpbnRlcnBvbGF0ZSBwb3MsIG5vcm0sIHV2KQorICAg
ICAgICAvLyAtIHBvcyBpcyBsaW5lYXIgaW50ZXJwb2xhdGlvbiwgdGhlbiBwcm9qZWN0ZWQgdG8g
c3BoZXJlIChjb252ZXJnZSBwb2x5aGVkcm9uIHRvIHNwaGVyZSkKKyAgICAgICAgLy8gLSBub3Jt
IGlzIGxpbmVhciBpbnRlcnBvbGF0aW9uIG9mIHZlcnRleCBjb3JuZXIgbm9ybWFsCisgICAgICAg
IC8vICAgKHRvIGJlIGNoZWNrZWQgaWYgYmV0dGVyIHRvIHJlLWNhbGMgZnJvbSBmYWNlIHZlcnRl
eCwgb3IgaWYgYXBwcm94aW1hdGlvbiBpcyBPSyA/Pz8gKQorICAgICAgICAvLyAtIHV2IGlzIGxp
bmVhciBpbnRlcnBvbGF0aW9uCisgICAgICAgIC8vCisgICAgICAgIC8vIFRvcG9sb2d5IGlzIGFz
IGJlbG93IGZvciBzdWItZGl2aWRlIGJ5IDIKKyAgICAgICAgLy8gdmVydGV4IHNob3duIGFzIHYw
LHYxLHYyCisgICAgICAgIC8vIGludGVycCBpbmRleCBpcyBpMSB0byBwcm9ncmVzcyBpbiByYW5n
ZSBbdjAsdjFbCisgICAgICAgIC8vIGludGVycCBpbmRleCBpcyBpMiB0byBwcm9ncmVzcyBpbiBy
YW5nZSBbdjAsdjJbCisgICAgICAgIC8vIGZhY2UgaW5kZXggYXMgIChpMSxpMikgIGZvciAvXCAg
OiAoaTEsaTIpLChpMSsxLGkyKSwoaTEsaTIrMSkKKyAgICAgICAgLy8gICAgICAgICAgICBhbmQg
KGkxLGkyKScgZm9yIFwvICA6IChpMSsxLGkyKSwoaTErMSxpMisxKSwoaTEsaTIrMSkKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIGkyICAgIHYy
CisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBeICAgIF4KKyAgICAgICAgLy8gICAgICAg
ICAgICAgICAgICAgLyAgICAvIFwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAvICAgIC8g
ICBcCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAvICAgIC8gICAgIFwKKyAgICAgICAgLy8g
ICAgICAgICAgICAgICAgLyAgICAvICgwLDEpIFwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAv
ICAgICMtLS0tLS0tLS1cCisgICAgICAgIC8vICAgICAgICAgICAgICAvICAgIC8gXCAoMCwwKScv
IFwKKyAgICAgICAgLy8gICAgICAgICAgICAgLyAgICAvICAgXCAgICAgLyAgIFwKKyAgICAgICAg
Ly8gICAgICAgICAgICAvICAgIC8gICAgIFwgICAvICAgICBcCisgICAgICAgIC8vICAgICAgICAg
ICAvICAgIC8gKDAsMCkgXCAvICgxLDApIFwKKyAgICAgICAgLy8gICAgICAgICAgLyAgICAjLS0t
LS0tLS0tIy0tLS0tLS0tLVwKKyAgICAgICAgLy8gICAgICAgICAgICAgIHYwICAgICAgICAgICAg
ICAgICAgICB2MQorICAgICAgICAvLworICAgICAgICAvLyAgICAgICAgICAgICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0+IGkxCisgICAgICAgIC8vCisgICAgICAgIC8vIGludGVycCBvZiAoaTEsaTIp
OgorICAgICAgICAvLyAgYWxvbmcgaTIgOiAgeDA9bGVycCh2MCx2MiwgaTIvUykgPC0tLT4geDE9
bGVycCh2MSx2MiwgaTIvUykKKyAgICAgICAgLy8gIGFsb25nIGkxIDogIGxlcnAoeDAseDEsIGkx
LyhTLWkyKSkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gY2VudHJvaWQgb2YgdHJpYW5nbGUgaXMg
bmVlZGVkIHRvIGdldCBoZWxwIG5vcm1hbCBjb21wdXRhdGlvbgorICAgICAgICAvLyAgKGMxLGMy
KSBhcmUgdXNlZCBmb3IgY2VudHJvaWQgbG9jYXRpb24KKyAgICAgICAgdmFyIGludGVycF92ZXJ0
ZXggPSBmdW5jdGlvbiAoaTEsIGkyLCBjMSwgYzIpIHsKKyAgICAgICAgICAgIC8vIHZlcnRleCBp
cyBpbnRlcnBvbGF0ZWQgZnJvbQorICAgICAgICAgICAgLy8gICAtIGZhY2VfdmVydGV4X3Bvc1sw
Li4yXQorICAgICAgICAgICAgLy8gICAtIGZhY2VfdmVydGV4X3V2WzAuLjJdCisgICAgICAgICAg
ICB2YXIgcG9zX3gwID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlZlY3RvcjMiXS5MZXJwKGZhY2VfdmVydGV4X3Bvc1swXSwgZmFjZV92ZXJ0ZXhfcG9z
WzJdLCBpMiAvIHN1YmRpdmlzaW9ucyk7CisgICAgICAgICAgICB2YXIgcG9zX3gxID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5MZXJw
KGZhY2VfdmVydGV4X3Bvc1sxXSwgZmFjZV92ZXJ0ZXhfcG9zWzJdLCBpMiAvIHN1YmRpdmlzaW9u
cyk7CisgICAgICAgICAgICB2YXIgcG9zX2ludGVycCA9IChzdWJkaXZpc2lvbnMgPT09IGkyKSA/
IGZhY2VfdmVydGV4X3Bvc1syXSA6IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uTGVycChwb3NfeDAsIHBvc194MSwgaTEgLyAoc3ViZGl2
aXNpb25zIC0gaTIpKTsKKyAgICAgICAgICAgIHBvc19pbnRlcnAubm9ybWFsaXplKCk7CisgICAg
ICAgICAgICB2YXIgdmVydGV4X25vcm1hbDsKKyAgICAgICAgICAgIGlmIChmbGF0KSB7CisgICAg
ICAgICAgICAgICAgLy8gaW4gZmxhdCBtb2RlLCByZWNhbGN1bGF0ZSBub3JtYWwgYXMgZmFjZSBj
ZW50cm9pZCBub3JtYWwKKyAgICAgICAgICAgICAgICB2YXIgY2VudHJvaWRfeDAgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkxlcnAo
ZmFjZV92ZXJ0ZXhfcG9zWzBdLCBmYWNlX3ZlcnRleF9wb3NbMl0sIGMyIC8gc3ViZGl2aXNpb25z
KTsKKyAgICAgICAgICAgICAgICB2YXIgY2VudHJvaWRfeDEgPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkxlcnAoZmFjZV92ZXJ0ZXhf
cG9zWzFdLCBmYWNlX3ZlcnRleF9wb3NbMl0sIGMyIC8gc3ViZGl2aXNpb25zKTsKKyAgICAgICAg
ICAgICAgICB2ZXJ0ZXhfbm9ybWFsID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5MZXJwKGNlbnRyb2lkX3gwLCBjZW50cm9pZF94MSwg
YzEgLyAoc3ViZGl2aXNpb25zIC0gYzIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIGluIHNtb290aCBtb2RlLCByZWNhbGN1bGF0ZSBub3Jt
YWwgZnJvbSBlYWNoIHNpbmdsZSB2ZXJ0ZXggcG9zaXRpb24KKyAgICAgICAgICAgICAgICB2ZXJ0
ZXhfbm9ybWFsID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0ocG9zX2ludGVycC54LCBwb3NfaW50ZXJwLnksIHBvc19pbnRlcnAu
eik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBWZXJ0ZXggbm9ybWFsIG5lZWQgY29y
cmVjdGlvbiBkdWUgdG8gWCxZLFogcmFkaXVzIHNjYWxpbmcKKyAgICAgICAgICAgIHZlcnRleF9u
b3JtYWwueCAvPSByYWRpdXNYOworICAgICAgICAgICAgdmVydGV4X25vcm1hbC55IC89IHJhZGl1
c1k7CisgICAgICAgICAgICB2ZXJ0ZXhfbm9ybWFsLnogLz0gcmFkaXVzWjsKKyAgICAgICAgICAg
IHZlcnRleF9ub3JtYWwubm9ybWFsaXplKCk7CisgICAgICAgICAgICB2YXIgdXZfeDAgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdLkxl
cnAoZmFjZV92ZXJ0ZXhfdXZbMF0sIGZhY2VfdmVydGV4X3V2WzJdLCBpMiAvIHN1YmRpdmlzaW9u
cyk7CisgICAgICAgICAgICB2YXIgdXZfeDEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdLkxlcnAoZmFjZV92ZXJ0ZXhfdXZbMV0sIGZh
Y2VfdmVydGV4X3V2WzJdLCBpMiAvIHN1YmRpdmlzaW9ucyk7CisgICAgICAgICAgICB2YXIgdXZf
aW50ZXJwID0gKHN1YmRpdmlzaW9ucyA9PT0gaTIpID8gZmFjZV92ZXJ0ZXhfdXZbMl0gOiBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdLkxl
cnAodXZfeDAsIHV2X3gxLCBpMSAvIChzdWJkaXZpc2lvbnMgLSBpMikpOworICAgICAgICAgICAg
cG9zaXRpb25zLnB1c2gocG9zX2ludGVycC54ICogcmFkaXVzWCwgcG9zX2ludGVycC55ICogcmFk
aXVzWSwgcG9zX2ludGVycC56ICogcmFkaXVzWik7CisgICAgICAgICAgICBub3JtYWxzLnB1c2go
dmVydGV4X25vcm1hbC54LCB2ZXJ0ZXhfbm9ybWFsLnksIHZlcnRleF9ub3JtYWwueik7CisgICAg
ICAgICAgICB1dnMucHVzaCh1dl9pbnRlcnAueCwgdXZfaW50ZXJwLnkpOworICAgICAgICAgICAg
Ly8gcHVzaCBlYWNoIHZlcnRleCBoYXMgbWVtYmVyIG9mIGEgZmFjZQorICAgICAgICAgICAgLy8g
U2FtZSB2ZXJ0ZXggY2FuIGJsZW9uZyB0byBtdWx0aXBsZSBmYWNlLCBpdCBpcyBwdXNoZWQgbXVs
dGlwbGUgdGltZSAoZHVwbGljYXRlIHZlcnRleCBhcmUgcHJlc2VudCkKKyAgICAgICAgICAgIGlu
ZGljZXMucHVzaChjdXJyZW50X2luZGljZSk7CisgICAgICAgICAgICBjdXJyZW50X2luZGljZSsr
OworICAgICAgICB9OworICAgICAgICBmb3IgKHZhciBpMiA9IDA7IGkyIDwgc3ViZGl2aXNpb25z
OyBpMisrKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpMSA9IDA7IGkxICsgaTIgPCBzdWJkaXZp
c2lvbnM7IGkxKyspIHsKKyAgICAgICAgICAgICAgICAvLyBmYWNlIDogKGkxLGkyKSAgZm9yIC9c
ICA6CisgICAgICAgICAgICAgICAgLy8gaW50ZXJwIGZvciA6IChpMSxpMiksKGkxKzEsaTIpLChp
MSxpMisxKQorICAgICAgICAgICAgICAgIGludGVycF92ZXJ0ZXgoaTEsIGkyLCBpMSArIDEuMCAv
IDMsIGkyICsgMS4wIC8gMyk7CisgICAgICAgICAgICAgICAgaW50ZXJwX3ZlcnRleChpMSArIDEs
IGkyLCBpMSArIDEuMCAvIDMsIGkyICsgMS4wIC8gMyk7CisgICAgICAgICAgICAgICAgaW50ZXJw
X3ZlcnRleChpMSwgaTIgKyAxLCBpMSArIDEuMCAvIDMsIGkyICsgMS4wIC8gMyk7CisgICAgICAg
ICAgICAgICAgaWYgKGkxICsgaTIgKyAxIDwgc3ViZGl2aXNpb25zKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIGZhY2UgOiAoaTEsaTIpJyBmb3IgXC8gIDoKKyAgICAgICAgICAgICAgICAgICAg
Ly8gaW50ZXJwIGZvciAoaTErMSxpMiksKGkxKzEsaTIrMSksKGkxLGkyKzEpCisgICAgICAgICAg
ICAgICAgICAgIGludGVycF92ZXJ0ZXgoaTEgKyAxLCBpMiwgaTEgKyAyLjAgLyAzLCBpMiArIDIu
MCAvIDMpOworICAgICAgICAgICAgICAgICAgICBpbnRlcnBfdmVydGV4KGkxICsgMSwgaTIgKyAx
LCBpMSArIDIuMCAvIDMsIGkyICsgMi4wIC8gMyk7CisgICAgICAgICAgICAgICAgICAgIGludGVy
cF92ZXJ0ZXgoaTEsIGkyICsgMSwgaTEgKyAyLjAgLyAzLCBpMiArIDIuMCAvIDMpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBTaWRl
cworICAgIF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVy
dGV4RGF0YSJdLl9Db21wdXRlU2lkZXMoc2lkZU9yaWVudGF0aW9uLCBwb3NpdGlvbnMsIGluZGlj
ZXMsIG5vcm1hbHMsIHV2cywgb3B0aW9ucy5mcm9udFVWcywgb3B0aW9ucy5iYWNrVVZzKTsKKyAg
ICAvLyBSZXN1bHQKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleERhdGEiXSgpOworICAgIHZlcnRleERh
dGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgdmVydGV4RGF0YS5wb3NpdGlvbnMgPSBwb3NpdGlv
bnM7CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRhLnV2
cyA9IHV2czsKKyAgICByZXR1cm4gdmVydGV4RGF0YTsKK307CitfbWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uQ3JlYXRlSWNvU3BoZXJlID0gZnVuY3Rpb24gKG5hbWUs
IG9wdGlvbnMsIHNjZW5lKSB7CisgICAgcmV0dXJuIEljb1NwaGVyZUJ1aWxkZXIuQ3JlYXRlSWNv
U3BoZXJlKG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKK307CisvKioKKyAqIENsYXNzIGNvbnRhaW5p
bmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWlsZCBtZXNoZXMKKyAq
LwordmFyIEljb1NwaGVyZUJ1aWxkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgZnVuY3Rpb24gSWNvU3BoZXJlQnVpbGRlcigpIHsKKyAgICB9CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIHNwaGVyZSBiYXNlZCB1cG9uIGFuIGljb3NhaGVkcm9uIHdpdGggMjAgdHJpYW5n
dWxhciBmYWNlcyB3aGljaCBjYW4gYmUgc3ViZGl2aWRlZAorICAgICAqICogVGhlIHBhcmFtZXRl
ciBgcmFkaXVzYCBzZXRzIHRoZSByYWRpdXMgc2l6ZSAoZmxvYXQpIG9mIHRoZSBpY29zcGhlcmUg
KGRlZmF1bHQgMSkKKyAgICAgKiAqIFlvdSBjYW4gc2V0IHNvbWUgZGlmZmVyZW50IGljb3NwaGVy
ZSBkaW1lbnNpb25zLCBmb3IgaW5zdGFuY2UgdG8gYnVpbGQgYW4gZWxsaXBzb2lkLCBieSB1c2lu
ZyB0aGUgcGFyYW1ldGVycyBgcmFkaXVzWGAsIGByYWRpdXNZYCBhbmQgYHJhZGl1c1pgIChhbGwg
YnkgZGVmYXVsdCBoYXZlIHRoZSBzYW1lIHZhbHVlIG9mIGByYWRpdXNgKQorICAgICAqICogVGhl
IHBhcmFtZXRlciBgc3ViZGl2aXNpb25zYCBzZXRzIHRoZSBudW1iZXIgb2Ygc3ViZGl2aXNpb25z
IChwb3N0aXZlIGludGVnZXIsIGRlZmF1bHQgNCkuIFRoZSBtb3JlIHN1YmRpdmlzaW9ucywgdGhl
IG1vcmUgZmFjZXMgb24gdGhlIGljb3NwaGVyZSB3aGF0ZXZlciBpdHMgc2l6ZQorICAgICAqICog
VGhlIHBhcmFtZXRlciBgZmxhdGAgKGJvb2xlYW4sIGRlZmF1bHQgdHJ1ZSkgZ2l2ZXMgZWFjaCBz
aWRlIGl0cyBvd24gbm9ybWFscy4gU2V0IGl0IHRvIGZhbHNlIHRvIGdldCBhIHNtb290aCBjb250
aW51b3VzIGxpZ2h0IHJlZmxlY3Rpb24gb24gdGhlIHN1cmZhY2UKKyAgICAgKiAqIFlvdSBjYW4g
YWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZ
TE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJB
QllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNp
ZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2Ug
dG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sg
c2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3Rv
cjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9k
aXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUgbWVz
aCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBk
YXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBv
c2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRo
ZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0
aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVz
IHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdGhlIGljb3NhaGVkcm9uIG1lc2gK
KyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BvbHloZWRyYV9z
aGFwZXMjaWNvc3BoZXJlCisgICAgICovCisgICAgSWNvU3BoZXJlQnVpbGRlci5DcmVhdGVJY29T
cGhlcmUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNj
ZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHZhciBzcGhlcmUgPSBu
ZXcgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdKG5hbWUsIHNjZW5l
KTsKKyAgICAgICAgb3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uX0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9u
cy5zaWRlT3JpZW50YXRpb24pOworICAgICAgICBzcGhlcmUuX29yaWdpbmFsQnVpbGRlclNpZGVP
cmllbnRhdGlvbiA9IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uOworICAgICAgICB2YXIgdmVydGV4
RGF0YSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVy
dGV4RGF0YSJdLkNyZWF0ZUljb1NwaGVyZShvcHRpb25zKTsKKyAgICAgICAgdmVydGV4RGF0YS5h
cHBseVRvTWVzaChzcGhlcmUsIG9wdGlvbnMudXBkYXRhYmxlKTsKKyAgICAgICAgcmV0dXJuIHNw
aGVyZTsKKyAgICB9OworICAgIHJldHVybiBJY29TcGhlcmVCdWlsZGVyOworfSgpKTsKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRlcnMvaW5kZXgudHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL0J1aWxk
ZXJzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogQm94QnVpbGRlciwgU3BoZXJlQnVpbGRlciwgQ3lsaW5k
ZXJCdWlsZGVyLCBUb3J1c0J1aWxkZXIsIExpbmVzQnVpbGRlciwgUGxhbmVCdWlsZGVyLCBHcm91
bmRCdWlsZGVyLCBUaWxlZEJveEJ1aWxkZXIsIERpc2NCdWlsZGVyLCBSaWJib25CdWlsZGVyLCBI
ZW1pc3BoZXJlQnVpbGRlciwgVG9ydXNLbm90QnVpbGRlciwgUG9seWdvbkJ1aWxkZXIsIFNoYXBl
QnVpbGRlciwgTGF0aGVCdWlsZGVyLCBUaWxlZFBsYW5lQnVpbGRlciwgVHViZUJ1aWxkZXIsIFBv
bHloZWRyb25CdWlsZGVyLCBJY29TcGhlcmVCdWlsZGVyLCBEZWNhbEJ1aWxkZXIgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ib3hCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2JveEJ1aWxk
ZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL2JveEJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQm94QnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2JveEJ1aWxkZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siQm94QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF90aWxlZEJveEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGlsZWRCb3hCdWlsZGVyICovICIuL01lc2hlcy9C
dWlsZGVycy90aWxlZEJveEJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGlsZWRCb3hC
dWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdGlsZWRCb3hCdWlsZGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlRpbGVkQm94QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9kaXNjQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kaXNjQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRl
cnMvZGlzY0J1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGlzY0J1aWxkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9kaXNjQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJEaXNjQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yaWJib25C
dWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL3JpYmJvbkJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3JpYmJvbkJ1aWxkZXIu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmliYm9uQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX3JpYmJvbkJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUmliYm9uQnVp
bGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGhlcmVCdWlsZGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Nw
aGVyZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3NwaGVyZUJ1aWxkZXIudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiU3BoZXJlQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NwaGVy
ZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BoZXJlQnVpbGRlciJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZW1pc3BoZXJlQnVpbGRlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZW1pc3Bo
ZXJlQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvaGVtaXNwaGVyZUJ1aWxkZXIudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiSGVtaXNwaGVyZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9oZW1pc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJIZW1pc3Bo
ZXJlQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jeWxpbmRlckJ1
aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vY3lsaW5kZXJCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1aWxk
ZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJCdWlsZGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfY3lsaW5kZXJCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkN5
bGluZGVyQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b3J1c0J1
aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vdG9ydXNCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy90b3J1c0J1aWxkZXIudHMi
KTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVG9ydXNCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
dG9ydXNCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlRvcnVzQnVpbGRlciJd
OyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b3J1c0tub3RCdWlsZGVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvcnVz
S25vdEJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3RvcnVzS25vdEJ1aWxkZXIudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiVG9ydXNLbm90QnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X3RvcnVzS25vdEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVG9ydXNLbm90
QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saW5lc0J1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
bGluZXNCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9saW5lc0J1aWxkZXIudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTGluZXNCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbGluZXNC
dWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkxpbmVzQnVpbGRlciJdOyB9KTsK
KworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb2x5Z29uQnVpbGRlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9seWdvbkJ1aWxk
ZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3BvbHlnb25CdWlsZGVyLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBvbHlnb25CdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9seWdvbkJ1aWxk
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlBvbHlnb25CdWlsZGVyIl07IH0pOwor
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NoYXBlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2hhcGVCdWlsZGVyICov
ICIuL01lc2hlcy9CdWlsZGVycy9zaGFwZUJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U2hhcGVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2hhcGVCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fWyJTaGFwZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfbGF0aGVCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sYXRoZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1
aWxkZXJzL2xhdGhlQnVpbGRlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMYXRoZUJ1aWxkZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9sYXRoZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEyX19bIkxhdGhlQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9wbGFuZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL3BsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvcGxhbmVC
dWlsZGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBsYW5lQnVpbGRlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX3BsYW5lQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUGxh
bmVCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RpbGVkUGxhbmVC
dWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi90aWxlZFBsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdGlsZWRQbGFu
ZUJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGlsZWRQbGFuZUJ1aWxkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF90aWxlZFBsYW5lQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTRfX1siVGlsZWRQbGFuZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfZ3JvdW5kQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vZ3JvdW5kQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMv
Z3JvdW5kQnVpbGRlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHcm91bmRCdWlsZGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfZ3JvdW5kQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTVfX1siR3JvdW5kQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90
dWJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vdHViZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3R1YmVCdWlsZGVy
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlR1YmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfdHViZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIlR1YmVCdWlsZGVy
Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvbHloZWRyb25CdWlsZGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9w
b2x5aGVkcm9uQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvcG9seWhlZHJvbkJ1aWxkZXIu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWhlZHJvbkJ1aWxkZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9wb2x5aGVkcm9uQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1si
UG9seWhlZHJvbkJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaWNv
U3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vaWNvU3BoZXJlQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvaWNv
U3BoZXJlQnVpbGRlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJY29TcGhlcmVCdWlsZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaWNvU3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMThfX1siSWNvU3BoZXJlQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9kZWNhbEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL2RlY2FsQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMv
ZGVjYWxCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlY2FsQnVpbGRlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2RlY2FsQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlf
X1siRGVjYWxCdWlsZGVyIl07IH0pOworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRlcnMvbGF0aGVC
dWlsZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9NZXNoZXMvQnVpbGRlcnMvbGF0aGVCdWlsZGVyLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IExhdGhlQnVpbGRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJMYXRoZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIExhdGhlQnVpbGRlcjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRo
LnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX3JpYmJvbkJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmliYm9uQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVp
bGRlcnMvcmliYm9uQnVpbGRlci50cyIpOworCisKKworX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZUxhdGhlID0gZnVuY3Rpb24gKG5hbWUsIHNoYXBlLCBy
YWRpdXMsIHRlc3NlbGxhdGlvbiwgc2NlbmUsIHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uKSB7
CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIHNoYXBlOiBzaGFwZSwKKyAgICAgICAgcmFk
aXVzOiByYWRpdXMsCisgICAgICAgIHRlc3NlbGxhdGlvbjogdGVzc2VsbGF0aW9uLAorICAgICAg
ICBzaWRlT3JpZW50YXRpb246IHNpZGVPcmllbnRhdGlvbiwKKyAgICAgICAgdXBkYXRhYmxlOiB1
cGRhdGFibGUKKyAgICB9OworICAgIHJldHVybiBMYXRoZUJ1aWxkZXIuQ3JlYXRlTGF0aGUobmFt
ZSwgb3B0aW9ucywgc2NlbmUpOworfTsKKy8qKgorICogQ2xhc3MgY29udGFpbmluZyBzdGF0aWMg
ZnVuY3Rpb25zIHRvIGhlbHAgcHJvY2VkdXJhbGx5IGJ1aWxkIG1lc2hlcworICovCit2YXIgTGF0
aGVCdWlsZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIExh
dGhlQnVpbGRlcigpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBsYXRoZSBtZXNo
LgorICAgICAqIFRoZSBsYXRoZSBpcyBhIHNoYXBlIHdpdGggYSBzeW1ldHJ5IGF4aXMgOiBhIDJE
IG1vZGVsIHNoYXBlIGlzIHJvdGF0ZWQgYXJvdW5kIHRoaXMgYXhpcyB0byBkZXNpZ24gdGhlIGxh
dGhlCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBzaGFwZWAgaXMgYSByZXF1aXJlZCBhcnJheSBv
ZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgYXJyYXkgZGVwaWN0cyB0aGUgc2hhcGUgdG8gYmUg
cm90YXRlZCBpbiBpdHMgbG9jYWwgc3BhY2UgOiB0aGUgc2hhcGUgbXVzdCBiZSBkZXNpZ25lZCBp
biB0aGUgeE95IHBsYW5lIGFuZCB3aWxsIGJlIHJvdGF0ZWQgYXJvdW5kIHRoZSBZIGF4aXMuIEl0
J3MgdXN1YWxseSBhIDJEIHNoYXBlLCBzbyB0aGUgVmVjdG9yMyB6IGNvb3JkaW5hdGVzIGFyZSBv
ZnRlbiBzZXQgdG8gemVybworICAgICAqICogVGhlIHBhcmFtZXRlciBgcmFkaXVzYCAocG9zaXRp
dmUgZmxvYXQsIGRlZmF1bHQgMSkgaXMgdGhlIHJhZGl1cyB2YWx1ZSBvZiB0aGUgbGF0aGUKKyAg
ICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHRlc3NlbGxhdGlvbmAgKHBvc2l0aXZlIGludGVnZXIsIGRl
ZmF1bHQgNjQpIGlzIHRoZSBzaWRlIG51bWJlciBvZiB0aGUgbGF0aGUKKyAgICAgKiAqIFRoZSBw
YXJhbWV0ZXIgYGNsaXBgIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDApIGlzIHRoZSBudW1i
ZXIgb2Ygc2lkZXMgdG8gbm90IGNyZWF0ZSB3aXRob3V0IGVmZmVjdGluZyB0aGUgZ2VuZXJhbCBz
aGFwZSBvZiB0aGUgc2lkZXMKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGFyY2AgKHBvc2l0aXZl
IGZsb2F0LCBkZWZhdWx0IDEpIGlzIHRoZSByYXRpbyBvZiB0aGUgbGF0aGUuIDAuNSBidWlsZHMg
Zm9yIGluc3RhbmNlIGhhbGYgYSBsYXRoZSwgc28gYW4gb3BlbmVkIHNoYXBlCisgICAgICogKiBU
aGUgcGFyYW1ldGVyIGBjbG9zZWRgIChib29sZWFuLCBkZWZhdWx0IHRydWUpIG9wZW5zL2Nsb3Nl
cyB0aGUgbGF0aGUgY2lyY3VtZmVyZW5jZS4gVGhpcyBzaG91bGQgYmUgc2V0IHRvIGZhbHNlIHdo
ZW4gdXNlZCB3aXRoIHRoZSBwYXJhbWV0ZXIgImFyYyIKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIg
YGNhcGAgc2V0cyB0aGUgd2F5IHRoZSBleHRydWRlZCBzaGFwZSBpcyBjYXBwZWQuIFBvc3NpYmxl
IHZhbHVlcyA6IEJBQllMT04uTWVzaC5OT19DQVAgKGRlZmF1bHQpLCBCQUJZTE9OLk1lc2guQ0FQ
X1NUQVJULCBCQUJZTE9OLk1lc2guQ0FQX0VORCwgQkFCWUxPTi5NZXNoLkNBUF9BTEwKKyAgICAg
KiAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2
YWx1ZXMgOiBCQUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJB
Q0tTSURFIG9yIEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRl
IGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRl
eHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBh
bmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFj
a1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20v
YmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAg
ICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnZlcnRVVmAgKGJvb2xlYW4sIGRlZmF1bHQg
ZmFsc2UpIHN3YXBzIGluIHRoZSBnZW9tZXRyeSB0aGUgVSBhbmQgViBjb29yZGluYXRlcyB0byBh
cHBseSBhIHRleHR1cmUKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxl
IHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBp
ZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRl
ZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAg
KiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBt
ZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAg
KiBAcmV0dXJucyB0aGUgbGF0aGUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxv
bmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjbGF0aGUKKyAgICAgKi8KKyAgICBMYXRo
ZUJ1aWxkZXIuQ3JlYXRlTGF0aGUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsK
KyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAg
IHZhciBhcmMgPSBvcHRpb25zLmFyYyA/ICgob3B0aW9ucy5hcmMgPD0gMCB8fCBvcHRpb25zLmFy
YyA+IDEpID8gMS4wIDogb3B0aW9ucy5hcmMpIDogMS4wOworICAgICAgICB2YXIgY2xvc2VkID0g
KG9wdGlvbnMuY2xvc2VkID09PSB1bmRlZmluZWQpID8gdHJ1ZSA6IG9wdGlvbnMuY2xvc2VkOwor
ICAgICAgICB2YXIgc2hhcGUgPSBvcHRpb25zLnNoYXBlOworICAgICAgICB2YXIgcmFkaXVzID0g
b3B0aW9ucy5yYWRpdXMgfHwgMTsKKyAgICAgICAgdmFyIHRlc3NlbGxhdGlvbiA9IG9wdGlvbnMu
dGVzc2VsbGF0aW9uIHx8IDY0OworICAgICAgICB2YXIgY2xpcCA9IG9wdGlvbnMuY2xpcCB8fCAw
OworICAgICAgICB2YXIgdXBkYXRhYmxlID0gb3B0aW9ucy51cGRhdGFibGU7CisgICAgICAgIHZh
ciBzaWRlT3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJN
ZXNoIl0uX0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24p
OworICAgICAgICB2YXIgY2FwID0gb3B0aW9ucy5jYXAgfHwgX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siTWVzaCJdLk5PX0NBUDsKKyAgICAgICAgdmFyIHBpMiA9IE1hdGguUEkg
KiAyOworICAgICAgICB2YXIgcGF0aHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdmFyIGludmVy
dFVWID0gb3B0aW9ucy5pbnZlcnRVViB8fCBmYWxzZTsKKyAgICAgICAgdmFyIGkgPSAwOworICAg
ICAgICB2YXIgcCA9IDA7CisgICAgICAgIHZhciBzdGVwID0gcGkyIC8gdGVzc2VsbGF0aW9uICog
YXJjOworICAgICAgICB2YXIgcm90YXRlZDsKKyAgICAgICAgdmFyIHBhdGggPSBuZXcgQXJyYXko
KTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8PSB0ZXNzZWxsYXRpb24gLSBjbGlwOyBpKyspIHsK
KyAgICAgICAgICAgIHZhciBwYXRoID0gW107CisgICAgICAgICAgICBpZiAoY2FwID09IF9tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfU1RBUlQgfHwgY2FwID09
IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfQUxMKSB7Cisg
ICAgICAgICAgICAgICAgcGF0aC5wdXNoKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIHNoYXBlWzBdLnksIDApKTsKKyAgICAg
ICAgICAgICAgICBwYXRoLnB1c2gobmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oTWF0aC5jb3MoaSAqIHN0ZXApICogc2hhcGVbMF0u
eCAqIHJhZGl1cywgc2hhcGVbMF0ueSwgTWF0aC5zaW4oaSAqIHN0ZXApICogc2hhcGVbMF0ueCAq
IHJhZGl1cykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChwID0gMDsgcCA8IHNo
YXBlLmxlbmd0aDsgcCsrKSB7CisgICAgICAgICAgICAgICAgcm90YXRlZCA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKE1hdGgu
Y29zKGkgKiBzdGVwKSAqIHNoYXBlW3BdLnggKiByYWRpdXMsIHNoYXBlW3BdLnksIE1hdGguc2lu
KGkgKiBzdGVwKSAqIHNoYXBlW3BdLnggKiByYWRpdXMpOworICAgICAgICAgICAgICAgIHBhdGgu
cHVzaChyb3RhdGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYXAgPT0gX21l
c2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNBUF9FTkQgfHwgY2FwID09
IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfQUxMKSB7Cisg
ICAgICAgICAgICAgICAgcGF0aC5wdXNoKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKE1hdGguY29zKGkgKiBzdGVwKSAqIHNoYXBl
W3NoYXBlLmxlbmd0aCAtIDFdLnggKiByYWRpdXMsIHNoYXBlW3NoYXBlLmxlbmd0aCAtIDFdLnks
IE1hdGguc2luKGkgKiBzdGVwKSAqIHNoYXBlW3NoYXBlLmxlbmd0aCAtIDFdLnggKiByYWRpdXMp
KTsKKyAgICAgICAgICAgICAgICBwYXRoLnB1c2gobmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMCwgc2hhcGVbc2hhcGUubGVuZ3Ro
IC0gMV0ueSwgMCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGF0aHMucHVzaChwYXRo
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBsYXRoZSByaWJib24KKyAgICAgICAgdmFyIGxhdGhl
ID0gX3JpYmJvbkJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUmliYm9uQnVp
bGRlciJdLkNyZWF0ZVJpYmJvbihuYW1lLCB7IHBhdGhBcnJheTogcGF0aHMsIGNsb3NlQXJyYXk6
IGNsb3NlZCwgc2lkZU9yaWVudGF0aW9uOiBzaWRlT3JpZW50YXRpb24sIHVwZGF0YWJsZTogdXBk
YXRhYmxlLCBpbnZlcnRVVjogaW52ZXJ0VVYsIGZyb250VVZzOiBvcHRpb25zLmZyb250VVZzLCBi
YWNrVVZzOiBvcHRpb25zLmJhY2tVVnMgfSwgc2NlbmUpOworICAgICAgICByZXR1cm4gbGF0aGU7
CisgICAgfTsKKyAgICByZXR1cm4gTGF0aGVCdWlsZGVyOworfSgpKTsKKworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRlcnMvbGluZXNCdWlsZGVyLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NZXNoZXMv
QnVpbGRlcnMvbGluZXNCdWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IExpbmVzQnVpbGRlciAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaW5lc0J1aWxkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIExpbmVzQnVpbGRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tZXNoICov
ICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfdmVy
dGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2xpbmVzTWVzaF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVz
L2xpbmVzTWVzaCAqLyAiLi9NZXNoZXMvbGluZXNNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1
ZmZlci50cyIpOworCisKKworCisKK19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siVmVydGV4RGF0YSJdLkNyZWF0ZUxpbmVTeXN0ZW0gPSBmdW5jdGlvbiAob3B0
aW9ucykgeworICAgIHZhciBpbmRpY2VzID0gW107CisgICAgdmFyIHBvc2l0aW9ucyA9IFtdOwor
ICAgIHZhciBsaW5lcyA9IG9wdGlvbnMubGluZXM7CisgICAgdmFyIGNvbG9ycyA9IG9wdGlvbnMu
Y29sb3JzOworICAgIHZhciB2ZXJ0ZXhDb2xvcnMgPSBbXTsKKyAgICB2YXIgaWR4ID0gMDsKKyAg
ICBmb3IgKHZhciBsID0gMDsgbCA8IGxpbmVzLmxlbmd0aDsgbCsrKSB7CisgICAgICAgIHZhciBw
b2ludHMgPSBsaW5lc1tsXTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHBv
aW50cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHBvaW50
c1tpbmRleF0ueCwgcG9pbnRzW2luZGV4XS55LCBwb2ludHNbaW5kZXhdLnopOworICAgICAgICAg
ICAgaWYgKGNvbG9ycykgeworICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGNvbG9yc1tsXTsK
KyAgICAgICAgICAgICAgICB2ZXJ0ZXhDb2xvcnMucHVzaChjb2xvcltpbmRleF0uciwgY29sb3Jb
aW5kZXhdLmcsIGNvbG9yW2luZGV4XS5iLCBjb2xvcltpbmRleF0uYSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5w
dXNoKGlkeCAtIDEpOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChpZHgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWR4Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgdmFyIHZl
cnRleERhdGEgPSBuZXcgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAgICB2ZXJ0ZXhEYXRhLmluZGljZXMgPSBpbmRpY2VzOwor
ICAgIHZlcnRleERhdGEucG9zaXRpb25zID0gcG9zaXRpb25zOworICAgIGlmIChjb2xvcnMpIHsK
KyAgICAgICAgdmVydGV4RGF0YS5jb2xvcnMgPSB2ZXJ0ZXhDb2xvcnM7CisgICAgfQorICAgIHJl
dHVybiB2ZXJ0ZXhEYXRhOworfTsKK19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siVmVydGV4RGF0YSJdLkNyZWF0ZURhc2hlZExpbmVzID0gZnVuY3Rpb24gKG9w
dGlvbnMpIHsKKyAgICB2YXIgZGFzaFNpemUgPSBvcHRpb25zLmRhc2hTaXplIHx8IDM7CisgICAg
dmFyIGdhcFNpemUgPSBvcHRpb25zLmdhcFNpemUgfHwgMTsKKyAgICB2YXIgZGFzaE5iID0gb3B0
aW9ucy5kYXNoTmIgfHwgMjAwOworICAgIHZhciBwb2ludHMgPSBvcHRpb25zLnBvaW50czsKKyAg
ICB2YXIgcG9zaXRpb25zID0gbmV3IEFycmF5KCk7CisgICAgdmFyIGluZGljZXMgPSBuZXcgQXJy
YXkoKTsKKyAgICB2YXIgY3VydmVjdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgIHZhciBsZyA9IDA7CisgICAg
dmFyIG5iID0gMDsKKyAgICB2YXIgc2hmdCA9IDA7CisgICAgdmFyIGRhc2hzaGZ0ID0gMDsKKyAg
ICB2YXIgY3Vyc2hmdCA9IDA7CisgICAgdmFyIGlkeCA9IDA7CisgICAgdmFyIGkgPSAwOworICAg
IGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgICAgIHBvaW50
c1tpICsgMV0uc3VidHJhY3RUb1JlZihwb2ludHNbaV0sIGN1cnZlY3QpOworICAgICAgICBsZyAr
PSBjdXJ2ZWN0Lmxlbmd0aCgpOworICAgIH0KKyAgICBzaGZ0ID0gbGcgLyBkYXNoTmI7CisgICAg
ZGFzaHNoZnQgPSBkYXNoU2l6ZSAqIHNoZnQgLyAoZGFzaFNpemUgKyBnYXBTaXplKTsKKyAgICBm
b3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykgeworICAgICAgICBwb2ludHNb
aSArIDFdLnN1YnRyYWN0VG9SZWYocG9pbnRzW2ldLCBjdXJ2ZWN0KTsKKyAgICAgICAgbmIgPSBN
YXRoLmZsb29yKGN1cnZlY3QubGVuZ3RoKCkgLyBzaGZ0KTsKKyAgICAgICAgY3VydmVjdC5ub3Jt
YWxpemUoKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuYjsgaisrKSB7CisgICAgICAg
ICAgICBjdXJzaGZ0ID0gc2hmdCAqIGo7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChwb2lu
dHNbaV0ueCArIGN1cnNoZnQgKiBjdXJ2ZWN0LngsIHBvaW50c1tpXS55ICsgY3Vyc2hmdCAqIGN1
cnZlY3QueSwgcG9pbnRzW2ldLnogKyBjdXJzaGZ0ICogY3VydmVjdC56KTsKKyAgICAgICAgICAg
IHBvc2l0aW9ucy5wdXNoKHBvaW50c1tpXS54ICsgKGN1cnNoZnQgKyBkYXNoc2hmdCkgKiBjdXJ2
ZWN0LngsIHBvaW50c1tpXS55ICsgKGN1cnNoZnQgKyBkYXNoc2hmdCkgKiBjdXJ2ZWN0LnksIHBv
aW50c1tpXS56ICsgKGN1cnNoZnQgKyBkYXNoc2hmdCkgKiBjdXJ2ZWN0LnopOworICAgICAgICAg
ICAgaW5kaWNlcy5wdXNoKGlkeCwgaWR4ICsgMSk7CisgICAgICAgICAgICBpZHggKz0gMjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAvLyBSZXN1bHQKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBf
bWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleERhdGEi
XSgpOworICAgIHZlcnRleERhdGEucG9zaXRpb25zID0gcG9zaXRpb25zOworICAgIHZlcnRleERh
dGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZUxpbmVzID0gZnVuY3Rp
b24gKG5hbWUsIHBvaW50cywgc2NlbmUsIHVwZGF0YWJsZSwgaW5zdGFuY2UpIHsKKyAgICBpZiAo
c2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICBpZiAodXBkYXRhYmxlID09
PSB2b2lkIDApIHsgdXBkYXRhYmxlID0gZmFsc2U7IH0KKyAgICBpZiAoaW5zdGFuY2UgPT09IHZv
aWQgMCkgeyBpbnN0YW5jZSA9IG51bGw7IH0KKyAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAg
cG9pbnRzOiBwb2ludHMsCisgICAgICAgIHVwZGF0YWJsZTogdXBkYXRhYmxlLAorICAgICAgICBp
bnN0YW5jZTogaW5zdGFuY2UKKyAgICB9OworICAgIHJldHVybiBMaW5lc0J1aWxkZXIuQ3JlYXRl
TGluZXMobmFtZSwgb3B0aW9ucywgc2NlbmUpOworfTsKK19tZXNoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIk1lc2giXS5DcmVhdGVEYXNoZWRMaW5lcyA9IGZ1bmN0aW9uIChuYW1lLCBw
b2ludHMsIGRhc2hTaXplLCBnYXBTaXplLCBkYXNoTmIsIHNjZW5lLCB1cGRhdGFibGUsIGluc3Rh
bmNlKSB7CisgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAg
dmFyIG9wdGlvbnMgPSB7CisgICAgICAgIHBvaW50czogcG9pbnRzLAorICAgICAgICBkYXNoU2l6
ZTogZGFzaFNpemUsCisgICAgICAgIGdhcFNpemU6IGdhcFNpemUsCisgICAgICAgIGRhc2hOYjog
ZGFzaE5iLAorICAgICAgICB1cGRhdGFibGU6IHVwZGF0YWJsZSwKKyAgICAgICAgaW5zdGFuY2U6
IGluc3RhbmNlCisgICAgfTsKKyAgICByZXR1cm4gTGluZXNCdWlsZGVyLkNyZWF0ZURhc2hlZExp
bmVzKG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKK307CisvKioKKyAqIENsYXNzIGNvbnRhaW5pbmcg
c3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWlsZCBtZXNoZXMKKyAqLwor
dmFyIExpbmVzQnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5j
dGlvbiBMaW5lc0J1aWxkZXIoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBs
aW5lIHN5c3RlbSBtZXNoLiBBIGxpbmUgc3lzdGVtIGlzIGEgcG9vbCBvZiBtYW55IGxpbmVzIGdh
dGhlcmVkIGluIGEgc2luZ2xlIG1lc2gKKyAgICAgKiAqIEEgbGluZSBzeXN0ZW0gbWVzaCBpcyBj
b25zaWRlcmVkIGFzIGEgcGFyYW1ldHJpYyBzaGFwZSBzaW5jZSBpdCBoYXMgbm8gcHJlZGVmaW5l
ZCBvcmlnaW5hbCBzaGFwZS4gSXRzIHNoYXBlIGlzIGRldGVybWluZWQgYnkgdGhlIHBhc3NlZCBh
cnJheSBvZiBsaW5lcyBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIKKyAgICAgKiAqIExpa2UgZXZlcnkg
b3RoZXIgcGFyYW1ldHJpYyBzaGFwZSwgaXQgaXMgZHluYW1pY2FsbHkgdXBkYXRhYmxlIGJ5IHBh
c3NpbmcgYW4gZXhpc3RpbmcgaW5zdGFuY2Ugb2YgTGluZVN5c3RlbSB0byB0aGlzIHN0YXRpYyBm
dW5jdGlvbgorICAgICAqICogVGhlIHBhcmFtZXRlciBgbGluZXNgIGlzIGFuIGFycmF5IG9mIGxp
bmVzLCBlYWNoIGxpbmUgYmVpbmcgYW4gYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzCisgICAg
ICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnN0YW5jZWAgaXMgYW4gaW5zdGFuY2Ugb2Yg
YW4gZXhpc3RpbmcgTGluZVN5c3RlbSBvYmplY3QgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZSBwYXNz
ZWQgYGxpbmVzYCBwYXJhbWV0ZXIKKyAgICAgKiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYGNv
bG9yc2AgaXMgYW4gYXJyYXkgb2YgbGluZSBjb2xvcnMsIGVhY2ggbGluZSBjb2xvcnMgYmVpbmcg
YW4gYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBDb2xvcjQsIG9uZSBwZXIgbGluZSBwb2ludAorICAgICAq
ICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgdXNlVmVydGV4QWxwaGFgIGlzIHRvIGJlIHNldCB0
byBgZmFsc2VgIChkZWZhdWx0IGB0cnVlYCkgd2hlbiB5b3UgZG9uJ3QgbmVlZCB0aGUgYWxwaGEg
YmxlbmRpbmcgKGZhc3RlcikKKyAgICAgKiAqIFVwZGF0aW5nIGEgc2ltcGxlIExpbmUgbWVzaCwg
eW91IGp1c3QgbmVlZCB0byB1cGRhdGUgZXZlcnkgbGluZSBpbiB0aGUgYGxpbmVzYCBhcnJheSA6
IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b19keW5hbWljYWxseV9tb3Jw
aF9hX21lc2gjbGluZXMtYW5kLWRhc2hlZGxpbmVzCisgICAgICogKiBXaGVuIHVwZGF0aW5nIGFu
IGluc3RhbmNlLCByZW1lbWJlciB0aGF0IG9ubHkgbGluZSBwb2ludCBwb3NpdGlvbnMgY2FuIGNo
YW5nZSwgbm90IHRoZSBudW1iZXIgb2YgcG9pbnRzLCBuZWl0aGVyIHRoZSBudW1iZXIgb2YgbGlu
ZXMKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhlIGJv
b2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50ZXJu
YWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAorICAgICAqIEBz
ZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjbGlu
ZS1zeXN0ZW0KKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBuZXcg
bGluZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVz
ZWQgdG8gY3JlYXRlIHRoZSBsaW5lIHN5c3RlbQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVz
IHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgYSBuZXcgbGluZSBzeXN0ZW0gbWVz
aAorICAgICAqLworICAgIExpbmVzQnVpbGRlci5DcmVhdGVMaW5lU3lzdGVtID0gZnVuY3Rpb24g
KG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIHZhciBpbnN0YW5jZSA9IG9wdGlvbnMu
aW5zdGFuY2U7CisgICAgICAgIHZhciBsaW5lcyA9IG9wdGlvbnMubGluZXM7CisgICAgICAgIHZh
ciBjb2xvcnMgPSBvcHRpb25zLmNvbG9yczsKKyAgICAgICAgaWYgKGluc3RhbmNlKSB7IC8vIGxp
bmVzIHVwZGF0ZQorICAgICAgICAgICAgdmFyIHBvc2l0aW9ucyA9IGluc3RhbmNlLmdldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0
ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpOworICAgICAgICAgICAgdmFyIHZlcnRleENvbG9yOwor
ICAgICAgICAgICAgdmFyIGxpbmVDb2xvcnM7CisgICAgICAgICAgICBpZiAoY29sb3JzKSB7Cisg
ICAgICAgICAgICAgICAgdmVydGV4Q29sb3IgPSBpbnN0YW5jZS5nZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVydGV4QnVmZmVyIl0u
Q29sb3JLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBpID0gMDsKKyAgICAg
ICAgICAgIHZhciBjID0gMDsKKyAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgbGluZXMu
bGVuZ3RoOyBsKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcG9pbnRzID0gbGluZXNbbF07Cisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBwb2ludHMubGVuZ3RoOyBwKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW2ldID0gcG9pbnRzW3BdLng7CisgICAgICAg
ICAgICAgICAgICAgIHBvc2l0aW9uc1tpICsgMV0gPSBwb2ludHNbcF0ueTsKKyAgICAgICAgICAg
ICAgICAgICAgcG9zaXRpb25zW2kgKyAyXSA9IHBvaW50c1twXS56OworICAgICAgICAgICAgICAg
ICAgICBpZiAoY29sb3JzICYmIHZlcnRleENvbG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lQ29sb3JzID0gY29sb3JzW2xdOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4
Q29sb3JbY10gPSBsaW5lQ29sb3JzW3BdLnI7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0
ZXhDb2xvcltjICsgMV0gPSBsaW5lQ29sb3JzW3BdLmc7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2ZXJ0ZXhDb2xvcltjICsgMl0gPSBsaW5lQ29sb3JzW3BdLmI7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhDb2xvcltjICsgM10gPSBsaW5lQ29sb3JzW3BdLmE7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjICs9IDQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGluc3RhbmNlLnVwZGF0ZVZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHBvc2l0
aW9ucywgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChjb2xvcnMgJiYgdmVydGV4Q29s
b3IpIHsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVydGV4QnVmZmVyIl0uQ29s
b3JLaW5kLCB2ZXJ0ZXhDb2xvciwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICAgICAgfQorICAgICAgICAvLyBsaW5lIHN5c3Rl
bSBjcmVhdGlvbgorICAgICAgICB2YXIgdXNlVmVydGV4Q29sb3IgPSAoY29sb3JzKSA/IHRydWUg
OiBmYWxzZTsKKyAgICAgICAgdmFyIGxpbmVTeXN0ZW0gPSBuZXcgX01lc2hlc19saW5lc01lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTGluZXNNZXNoIl0obmFtZSwgc2NlbmUsIG51
bGwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1c2VWZXJ0ZXhDb2xvciwgb3B0aW9ucy51c2VWZXJ0
ZXhBbHBoYSk7CisgICAgICAgIHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlTGluZVN5c3RlbShv
cHRpb25zKTsKKyAgICAgICAgdmVydGV4RGF0YS5hcHBseVRvTWVzaChsaW5lU3lzdGVtLCBvcHRp
b25zLnVwZGF0YWJsZSk7CisgICAgICAgIHJldHVybiBsaW5lU3lzdGVtOworICAgIH07CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIGxpbmUgbWVzaAorICAgICAqIEEgbGluZSBtZXNoIGlzIGNv
bnNpZGVyZWQgYXMgYSBwYXJhbWV0cmljIHNoYXBlIHNpbmNlIGl0IGhhcyBubyBwcmVkZWZpbmVk
IG9yaWdpbmFsIHNoYXBlLiBJdHMgc2hhcGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcGFzc2VkIGFy
cmF5IG9mIHBvaW50cyBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIKKyAgICAgKiAqIExpa2UgZXZlcnkg
b3RoZXIgcGFyYW1ldHJpYyBzaGFwZSwgaXQgaXMgZHluYW1pY2FsbHkgdXBkYXRhYmxlIGJ5IHBh
c3NpbmcgYW4gZXhpc3RpbmcgaW5zdGFuY2Ugb2YgTGluZU1lc2ggdG8gdGhpcyBzdGF0aWMgZnVu
Y3Rpb24KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHBvaW50c2AgaXMgYW4gYXJyYXkgc3VjY2Vz
c2l2ZSBWZWN0b3IzCisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnN0YW5jZWAg
aXMgYW4gaW5zdGFuY2Ugb2YgYW4gZXhpc3RpbmcgTGluZU1lc2ggb2JqZWN0IHRvIGJlIHVwZGF0
ZWQgd2l0aCB0aGUgcGFzc2VkIGBwb2ludHNgIHBhcmFtZXRlciA6IGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vaG93X3RvL2hvd190b19keW5hbWljYWxseV9tb3JwaF9hX21lc2gjbGluZXMtYW5k
LWRhc2hlZGxpbmVzCisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBjb2xvcnNgIGlz
IGFuIGFycmF5IG9mIHN1Y2Nlc3NpdmUgQ29sb3I0LCBvbmUgcGVyIGxpbmUgcG9pbnQKKyAgICAg
KiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYHVzZVZlcnRleEFscGhhYCBpcyB0byBiZSBzZXQg
dG8gYGZhbHNlYCAoZGVmYXVsdCBgdHJ1ZWApIHdoZW4geW91IGRvbid0IG5lZWQgYWxwaGEgYmxl
bmRpbmcgKGZhc3RlcikKKyAgICAgKiAqIFdoZW4gdXBkYXRpbmcgYW4gaW5zdGFuY2UsIHJlbWVt
YmVyIHRoYXQgb25seSBwb2ludCBwb3NpdGlvbnMgY2FuIGNoYW5nZSwgbm90IHRoZSBudW1iZXIg
b2YgcG9pbnRzCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRo
IHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRz
IGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAg
ICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BhcmFtZXRyaWNfc2hh
cGVzI2xpbmVzCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3
IGxpbmUgc3lzdGVtCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1
c2VkIHRvIGNyZWF0ZSB0aGUgbGluZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5l
cyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIGEgbmV3IGxpbmUgbWVzaAorICAg
ICAqLworICAgIExpbmVzQnVpbGRlci5DcmVhdGVMaW5lcyA9IGZ1bmN0aW9uIChuYW1lLCBvcHRp
b25zLCBzY2VuZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51
bGw7IH0KKyAgICAgICAgdmFyIGNvbG9ycyA9IChvcHRpb25zLmNvbG9ycykgPyBbb3B0aW9ucy5j
b2xvcnNdIDogbnVsbDsKKyAgICAgICAgdmFyIGxpbmVzID0gTGluZXNCdWlsZGVyLkNyZWF0ZUxp
bmVTeXN0ZW0obmFtZSwgeyBsaW5lczogW29wdGlvbnMucG9pbnRzXSwgdXBkYXRhYmxlOiBvcHRp
b25zLnVwZGF0YWJsZSwgaW5zdGFuY2U6IG9wdGlvbnMuaW5zdGFuY2UsIGNvbG9yczogY29sb3Jz
LCB1c2VWZXJ0ZXhBbHBoYTogb3B0aW9ucy51c2VWZXJ0ZXhBbHBoYSB9LCBzY2VuZSk7CisgICAg
ICAgIHJldHVybiBsaW5lczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBkYXNo
ZWQgbGluZSBtZXNoCisgICAgICogKiBBIGRhc2hlZCBsaW5lIG1lc2ggaXMgY29uc2lkZXJlZCBh
cyBhIHBhcmFtZXRyaWMgc2hhcGUgc2luY2UgaXQgaGFzIG5vIHByZWRlZmluZWQgb3JpZ2luYWwg
c2hhcGUuIEl0cyBzaGFwZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwYXNzZWQgYXJyYXkgb2YgcG9p
bnRzIGFzIGFuIGlucHV0IHBhcmFtZXRlcgorICAgICAqICogTGlrZSBldmVyeSBvdGhlciBwYXJh
bWV0cmljIHNoYXBlLCBpdCBpcyBkeW5hbWljYWxseSB1cGRhdGFibGUgYnkgcGFzc2luZyBhbiBl
eGlzdGluZyBpbnN0YW5jZSBvZiBMaW5lTWVzaCB0byB0aGlzIHN0YXRpYyBmdW5jdGlvbgorICAg
ICAqICogVGhlIHBhcmFtZXRlciBgcG9pbnRzYCBpcyBhbiBhcnJheSBzdWNjZXNzaXZlIFZlY3Rv
cjMKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGRhc2hOYmAgaXMgdGhlIGludGVuZGVkIHRvdGFs
IG51bWJlciBvZiBkYXNoZXMgKHBvc2l0aXZlIGludGVnZXIsIGRlZmF1bHQgMjAwKQorICAgICAq
ICogVGhlIHBhcmFtZXRlciBgZGFzaFNpemVgIGlzIHRoZSBzaXplIG9mIHRoZSBkYXNoZXMgcmVs
YXRpdmVseSB0aGUgZGFzaCBudW1iZXIgKHBvc2l0aXZlIGZsb2F0LCBkZWZhdWx0IDMpCisgICAg
ICogKiBUaGUgcGFyYW1ldGVyIGBnYXBTaXplYCBpcyB0aGUgc2l6ZSBvZiB0aGUgZ2FwIGJldHdl
ZW4gdHdvIHN1Y2Nlc3NpdmUgZGFzaGVzIHJlbGF0aXZlbHkgdGhlIGRhc2ggbnVtYmVyIChwb3Np
dGl2ZSBmbG9hdCwgZGVmYXVsdCAxKQorICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBg
aW5zdGFuY2VgIGlzIGFuIGluc3RhbmNlIG9mIGFuIGV4aXN0aW5nIExpbmVNZXNoIG9iamVjdCB0
byBiZSB1cGRhdGVkIHdpdGggdGhlIHBhc3NlZCBgcG9pbnRzYCBwYXJhbWV0ZXIgOiBodHRwczov
L2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fZHluYW1pY2FsbHlfbW9ycGhfYV9tZXNo
I2xpbmVzLWFuZC1kYXNoZWRsaW5lcworICAgICAqICogV2hlbiB1cGRhdGluZyBhbiBpbnN0YW5j
ZSwgcmVtZW1iZXIgdGhhdCBvbmx5IHBvaW50IHBvc2l0aW9ucyBjYW4gY2hhbmdlLCBub3QgdGhl
IG51bWJlciBvZiBwb2ludHMKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRh
YmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNl
KSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3Jl
YXRlZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAg
ICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRo
ZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgZGFzaGVkIGxpbmUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9k
b2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjZGFzaGVkLWxpbmVzCisg
ICAgICovCisgICAgTGluZXNCdWlsZGVyLkNyZWF0ZURhc2hlZExpbmVzID0gZnVuY3Rpb24gKG5h
bWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNj
ZW5lID0gbnVsbDsgfQorICAgICAgICB2YXIgcG9pbnRzID0gb3B0aW9ucy5wb2ludHM7CisgICAg
ICAgIHZhciBpbnN0YW5jZSA9IG9wdGlvbnMuaW5zdGFuY2U7CisgICAgICAgIHZhciBnYXBTaXpl
ID0gb3B0aW9ucy5nYXBTaXplIHx8IDE7CisgICAgICAgIHZhciBkYXNoU2l6ZSA9IG9wdGlvbnMu
ZGFzaFNpemUgfHwgMzsKKyAgICAgICAgaWYgKGluc3RhbmNlKSB7IC8vICBkYXNoZWQgbGluZXMg
dXBkYXRlCisgICAgICAgICAgICB2YXIgcG9zaXRpb25GdW5jdGlvbiA9IGZ1bmN0aW9uIChwb3Np
dGlvbnMpIHsKKyAgICAgICAgICAgICAgICB2YXIgY3VydmVjdCA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAg
ICAgICAgICAgIHZhciBuYlNlZyA9IHBvc2l0aW9ucy5sZW5ndGggLyA2OworICAgICAgICAgICAg
ICAgIHZhciBsZyA9IDA7CisgICAgICAgICAgICAgICAgdmFyIG5iID0gMDsKKyAgICAgICAgICAg
ICAgICB2YXIgc2hmdCA9IDA7CisgICAgICAgICAgICAgICAgdmFyIGRhc2hzaGZ0ID0gMDsKKyAg
ICAgICAgICAgICAgICB2YXIgY3Vyc2hmdCA9IDA7CisgICAgICAgICAgICAgICAgdmFyIHAgPSAw
OworICAgICAgICAgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgICAgICAgICB2YXIgaiA9IDA7
CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2kgKyAxXS5zdWJ0cmFjdFRvUmVmKHBvaW50
c1tpXSwgY3VydmVjdCk7CisgICAgICAgICAgICAgICAgICAgIGxnICs9IGN1cnZlY3QubGVuZ3Ro
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNoZnQgPSBsZyAvIG5iU2Vn
OworICAgICAgICAgICAgICAgIHZhciBkYXNoU2l6ZSA9IGluc3RhbmNlLl9jcmVhdGlvbkRhdGFT
dG9yYWdlLmRhc2hTaXplOworICAgICAgICAgICAgICAgIHZhciBnYXBTaXplID0gaW5zdGFuY2Uu
X2NyZWF0aW9uRGF0YVN0b3JhZ2UuZ2FwU2l6ZTsKKyAgICAgICAgICAgICAgICBkYXNoc2hmdCA9
IGRhc2hTaXplICogc2hmdCAvIChkYXNoU2l6ZSArIGdhcFNpemUpOworICAgICAgICAgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIHBvaW50c1tpICsgMV0uc3VidHJhY3RUb1JlZihwb2ludHNbaV0sIGN1cnZlY3QpOwor
ICAgICAgICAgICAgICAgICAgICBuYiA9IE1hdGguZmxvb3IoY3VydmVjdC5sZW5ndGgoKSAvIHNo
ZnQpOworICAgICAgICAgICAgICAgICAgICBjdXJ2ZWN0Lm5vcm1hbGl6ZSgpOworICAgICAgICAg
ICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBuYiAmJiBw
IDwgcG9zaXRpb25zLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc2hmdCA9
IHNoZnQgKiBqOworICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW3BdID0gcG9pbnRz
W2ldLnggKyBjdXJzaGZ0ICogY3VydmVjdC54OworICAgICAgICAgICAgICAgICAgICAgICAgcG9z
aXRpb25zW3AgKyAxXSA9IHBvaW50c1tpXS55ICsgY3Vyc2hmdCAqIGN1cnZlY3QueTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1twICsgMl0gPSBwb2ludHNbaV0ueiArIGN1cnNo
ZnQgKiBjdXJ2ZWN0Lno7CisgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbcCArIDNd
ID0gcG9pbnRzW2ldLnggKyAoY3Vyc2hmdCArIGRhc2hzaGZ0KSAqIGN1cnZlY3QueDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1twICsgNF0gPSBwb2ludHNbaV0ueSArIChjdXJz
aGZ0ICsgZGFzaHNoZnQpICogY3VydmVjdC55OworICAgICAgICAgICAgICAgICAgICAgICAgcG9z
aXRpb25zW3AgKyA1XSA9IHBvaW50c1tpXS56ICsgKGN1cnNoZnQgKyBkYXNoc2hmdCkgKiBjdXJ2
ZWN0Lno7CisgICAgICAgICAgICAgICAgICAgICAgICBwICs9IDY7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBwb3NpdGlvbnMubGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgICAgIHBvc2l0aW9uc1twXSA9IHBvaW50c1tpXS54OworICAgICAgICAgICAgICAgICAg
ICBwb3NpdGlvbnNbcCArIDFdID0gcG9pbnRzW2ldLnk7CisgICAgICAgICAgICAgICAgICAgIHBv
c2l0aW9uc1twICsgMl0gPSBwb2ludHNbaV0uejsKKyAgICAgICAgICAgICAgICAgICAgcCArPSAz
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpbnN0YW5j
ZS51cGRhdGVNZXNoUG9zaXRpb25zKHBvc2l0aW9uRnVuY3Rpb24sIGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICAgICAgfQorICAgICAgICAvLyBkYXNoZWQgbGluZXMg
Y3JlYXRpb24KKyAgICAgICAgdmFyIGRhc2hlZExpbmVzID0gbmV3IF9NZXNoZXNfbGluZXNNZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxpbmVzTWVzaCJdKG5hbWUsIHNjZW5lKTsK
KyAgICAgICAgdmFyIHZlcnRleERhdGEgPSBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlZlcnRleERhdGEiXS5DcmVhdGVEYXNoZWRMaW5lcyhvcHRpb25zKTsK
KyAgICAgICAgdmVydGV4RGF0YS5hcHBseVRvTWVzaChkYXNoZWRMaW5lcywgb3B0aW9ucy51cGRh
dGFibGUpOworICAgICAgICBkYXNoZWRMaW5lcy5fY3JlYXRpb25EYXRhU3RvcmFnZSA9IG5ldyBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJfQ3JlYXRpb25EYXRhU3RvcmFnZSJd
KCk7CisgICAgICAgIGRhc2hlZExpbmVzLl9jcmVhdGlvbkRhdGFTdG9yYWdlLmRhc2hTaXplID0g
ZGFzaFNpemU7CisgICAgICAgIGRhc2hlZExpbmVzLl9jcmVhdGlvbkRhdGFTdG9yYWdlLmdhcFNp
emUgPSBnYXBTaXplOworICAgICAgICByZXR1cm4gZGFzaGVkTGluZXM7CisgICAgfTsKKyAgICBy
ZXR1cm4gTGluZXNCdWlsZGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9N
ZXNoZXMvQnVpbGRlcnMvcGxhbmVCdWlsZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NZXNoZXMvQnVpbGRlcnMvcGxhbmVC
dWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBsYW5lQnVpbGRlciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJQbGFuZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFBsYW5lQnVpbGRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2gg
Ki8gIi4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF92
ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9tZXNoLnZlcnRleERhdGEgKi8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50
cyIpOworCisKK19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVydGV4RGF0YSJdLkNyZWF0ZVBsYW5lID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICB2YXIg
aW5kaWNlcyA9IFtdOworICAgIHZhciBwb3NpdGlvbnMgPSBbXTsKKyAgICB2YXIgbm9ybWFscyA9
IFtdOworICAgIHZhciB1dnMgPSBbXTsKKyAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoIHx8
IG9wdGlvbnMuc2l6ZSB8fCAxOworICAgIHZhciBoZWlnaHQgPSBvcHRpb25zLmhlaWdodCB8fCBv
cHRpb25zLnNpemUgfHwgMTsKKyAgICB2YXIgc2lkZU9yaWVudGF0aW9uID0gKG9wdGlvbnMuc2lk
ZU9yaWVudGF0aW9uID09PSAwKSA/IDAgOiBvcHRpb25zLnNpZGVPcmllbnRhdGlvbiB8fCBfbWVz
aF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleERhdGEiXS5E
RUZBVUxUU0lERTsKKyAgICAvLyBWZXJ0aWNlcworICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAv
IDIuMDsKKyAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDIuMDsKKyAgICBwb3NpdGlvbnMu
cHVzaCgtaGFsZldpZHRoLCAtaGFsZkhlaWdodCwgMCk7CisgICAgbm9ybWFscy5wdXNoKDAsIDAs
IC0xLjApOworICAgIHV2cy5wdXNoKDAuMCwgMC4wKTsKKyAgICBwb3NpdGlvbnMucHVzaChoYWxm
V2lkdGgsIC1oYWxmSGVpZ2h0LCAwKTsKKyAgICBub3JtYWxzLnB1c2goMCwgMCwgLTEuMCk7Cisg
ICAgdXZzLnB1c2goMS4wLCAwLjApOworICAgIHBvc2l0aW9ucy5wdXNoKGhhbGZXaWR0aCwgaGFs
ZkhlaWdodCwgMCk7CisgICAgbm9ybWFscy5wdXNoKDAsIDAsIC0xLjApOworICAgIHV2cy5wdXNo
KDEuMCwgMS4wKTsKKyAgICBwb3NpdGlvbnMucHVzaCgtaGFsZldpZHRoLCBoYWxmSGVpZ2h0LCAw
KTsKKyAgICBub3JtYWxzLnB1c2goMCwgMCwgLTEuMCk7CisgICAgdXZzLnB1c2goMC4wLCAxLjAp
OworICAgIC8vIEluZGljZXMKKyAgICBpbmRpY2VzLnB1c2goMCk7CisgICAgaW5kaWNlcy5wdXNo
KDEpOworICAgIGluZGljZXMucHVzaCgyKTsKKyAgICBpbmRpY2VzLnB1c2goMCk7CisgICAgaW5k
aWNlcy5wdXNoKDIpOworICAgIGluZGljZXMucHVzaCgzKTsKKyAgICAvLyBTaWRlcworICAgIF9t
ZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4RGF0YSJd
Ll9Db21wdXRlU2lkZXMoc2lkZU9yaWVudGF0aW9uLCBwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1h
bHMsIHV2cywgb3B0aW9ucy5mcm9udFVWcywgb3B0aW9ucy5iYWNrVVZzKTsKKyAgICAvLyBSZXN1
bHQKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlcnRleERhdGEiXSgpOworICAgIHZlcnRleERhdGEuaW5kaWNl
cyA9IGluZGljZXM7CisgICAgdmVydGV4RGF0YS5wb3NpdGlvbnMgPSBwb3NpdGlvbnM7CisgICAg
dmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRhLnV2cyA9IHV2czsK
KyAgICByZXR1cm4gdmVydGV4RGF0YTsKK307CitfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJNZXNoIl0uQ3JlYXRlUGxhbmUgPSBmdW5jdGlvbiAobmFtZSwgc2l6ZSwgc2NlbmUs
IHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uKSB7CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAg
ICAgIHNpemU6IHNpemUsCisgICAgICAgIHdpZHRoOiBzaXplLAorICAgICAgICBoZWlnaHQ6IHNp
emUsCisgICAgICAgIHNpZGVPcmllbnRhdGlvbjogc2lkZU9yaWVudGF0aW9uLAorICAgICAgICB1
cGRhdGFibGU6IHVwZGF0YWJsZQorICAgIH07CisgICAgcmV0dXJuIFBsYW5lQnVpbGRlci5DcmVh
dGVQbGFuZShuYW1lLCBvcHRpb25zLCBzY2VuZSk7Cit9OworLyoqCisgKiBDbGFzcyBjb250YWlu
aW5nIHN0YXRpYyBmdW5jdGlvbnMgdG8gaGVscCBwcm9jZWR1cmFsbHkgYnVpbGQgbWVzaGVzCisg
Ki8KK3ZhciBQbGFuZUJ1aWxkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
ZnVuY3Rpb24gUGxhbmVCdWlsZGVyKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgcGxhbmUgbWVzaAorICAgICAqICogVGhlIHBhcmFtZXRlciBgc2l6ZWAgc2V0cyB0aGUgc2l6
ZSAoZmxvYXQpIG9mIGJvdGggc2lkZXMgb2YgdGhlIHBsYW5lIGF0IG9uY2UgKGRlZmF1bHQgMSkK
KyAgICAgKiAqIFlvdSBjYW4gc2V0IHNvbWUgZGlmZmVyZW50IHBsYW5lIGRpbWVuc2lvbnMgYnkg
dXNpbmcgdGhlIHBhcmFtZXRlcnMgYHdpZHRoYCBhbmQgYGhlaWdodGAgKGJvdGggYnkgZGVmYXVs
dCBoYXZlIHRoZSBzYW1lIHZhbHVlIG9mIGBzaXplYCkKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIg
YHNvdXJjZVBsYW5lYCBpcyBhIFBsYW5lIGluc3RhbmNlLiBJdCBidWlsZHMgYSBtZXNoIHBsYW5l
IGZyb20gYSBNYXRoIHBsYW5lCisgICAgICogKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtZXNoIHNp
ZGUgb3JpZW50YXRpb24gd2l0aCB0aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLkZST05UU0lERSAo
ZGVmYXVsdCksIEJBQllMT04uTWVzaC5CQUNLU0lERSBvciBCQUJZTE9OLk1lc2guRE9VQkxFU0lE
RQorICAgICAqICogSWYgeW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNo
b29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJl
c3BlY3RpdmVseSBvbiB0aGUgZnJvbnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGggdGhlIHBhcmFt
ZXRlcnMgYGZyb250VVZzYCBhbmQgYGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBo
dHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVu
dHMjc2lkZS1vcmllbnRhdGlvbgorICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRh
dGFibGUgd2l0aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFs
c2UpIGlmIGl0cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBj
cmVhdGVkCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAor
ICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUg
dGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQor
ICAgICAqIEByZXR1cm5zIHRoZSBwbGFuZSBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by9zZXRfc2hhcGVzI3BsYW5lCisgICAgICovCisgICAgUGxhbmVC
dWlsZGVyLkNyZWF0ZVBsYW5lID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7Cisg
ICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICB2
YXIgcGxhbmUgPSBuZXcgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJd
KG5hbWUsIHNjZW5lKTsKKyAgICAgICAgb3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPSBfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uX0dldERlZmF1bHRTaWRlT3JpZW50
YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24pOworICAgICAgICBwbGFuZS5fb3JpZ2luYWxC
dWlsZGVyU2lkZU9yaWVudGF0aW9uID0gb3B0aW9ucy5zaWRlT3JpZW50YXRpb247CisgICAgICAg
IHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlUGxhbmUob3B0aW9ucyk7CisgICAgICAgIHZlcnRl
eERhdGEuYXBwbHlUb01lc2gocGxhbmUsIG9wdGlvbnMudXBkYXRhYmxlKTsKKyAgICAgICAgaWYg
KG9wdGlvbnMuc291cmNlUGxhbmUpIHsKKyAgICAgICAgICAgIHBsYW5lLnRyYW5zbGF0ZShvcHRp
b25zLnNvdXJjZVBsYW5lLm5vcm1hbCwgLW9wdGlvbnMuc291cmNlUGxhbmUuZCk7CisgICAgICAg
ICAgICBwbGFuZS5zZXREaXJlY3Rpb24ob3B0aW9ucy5zb3VyY2VQbGFuZS5ub3JtYWwuc2NhbGUo
LTEpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGxhbmU7CisgICAgfTsKKyAgICByZXR1
cm4gUGxhbmVCdWlsZGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNo
ZXMvQnVpbGRlcnMvcG9seWdvbkJ1aWxkZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL0J1aWxkZXJzL3BvbHln
b25CdWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9seWdvbkJ1aWxkZXIgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWdvbkJ1aWxkZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFBvbHlnb25CdWlsZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgu
dmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRh
ICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcG9seWdvbk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL3BvbHlnb25NZXNoICovICIuL01lc2hlcy9wb2x5Z29uTWVzaC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NZXNoZXMv
YnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9Fbmdp
bmVzL2VuZ2luZVN0b3JlLnRzIik7CisKKworCisKKworCisKK19tZXNoX3ZlcnRleERhdGFfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdLkNyZWF0ZVBvbHlnb24gPSBm
dW5jdGlvbiAocG9seWdvbiwgc2lkZU9yaWVudGF0aW9uLCBmVVYsIGZDb2xvcnMsIGZyb250VVZz
LCBiYWNrVVZzKSB7CisgICAgdmFyIGZhY2VVViA9IGZVViB8fCBuZXcgQXJyYXkoMyk7CisgICAg
dmFyIGZhY2VDb2xvcnMgPSBmQ29sb3JzOworICAgIHZhciBjb2xvcnMgPSBbXTsKKyAgICAvLyBk
ZWZhdWx0IGZhY2UgY29sb3JzIGFuZCBVViBpZiB1bmRlZmluZWQKKyAgICBmb3IgKHZhciBmID0g
MDsgZiA8IDM7IGYrKykgeworICAgICAgICBpZiAoZmFjZVVWW2ZdID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIGZhY2VVVltmXSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yNCJdKDAsIDAsIDEsIDEpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmYWNlQ29sb3JzICYmIGZhY2VDb2xvcnNbZl0gPT09IHVuZGVmaW5lZCkgewor
ICAgICAgICAgICAgZmFjZUNvbG9yc1tmXSA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjQiXSgxLCAxLCAxLCAxKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB2YXIgcG9zaXRpb25zID0gcG9seWdvbi5nZXRWZXJ0aWNlc0RhdGEoX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uUG9z
aXRpb25LaW5kKTsKKyAgICB2YXIgbm9ybWFscyA9IHBvbHlnb24uZ2V0VmVydGljZXNEYXRhKF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlcnRleEJ1ZmZlciJd
Lk5vcm1hbEtpbmQpOworICAgIHZhciB1dnMgPSBwb2x5Z29uLmdldFZlcnRpY2VzRGF0YShfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZmZXIiXS5V
VktpbmQpOworICAgIHZhciBpbmRpY2VzID0gcG9seWdvbi5nZXRJbmRpY2VzKCk7CisgICAgLy8g
c2V0IGZhY2UgY29sb3VycyBhbmQgdGV4dHVyZXMKKyAgICB2YXIgaWR4ID0gMDsKKyAgICB2YXIg
ZmFjZSA9IDA7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG5vcm1hbHMubGVuZ3Ro
OyBpbmRleCArPSAzKSB7CisgICAgICAgIC8vRWRnZSBGYWNlICBuby4gMQorICAgICAgICBpZiAo
TWF0aC5hYnMobm9ybWFsc1tpbmRleCArIDFdKSA8IDAuMDAxKSB7CisgICAgICAgICAgICBmYWNl
ID0gMTsKKyAgICAgICAgfQorICAgICAgICAvL1RvcCBGYWNlICBuby4gMAorICAgICAgICBpZiAo
TWF0aC5hYnMobm9ybWFsc1tpbmRleCArIDFdIC0gMSkgPCAwLjAwMSkgeworICAgICAgICAgICAg
ZmFjZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgLy9Cb3R0b20gRmFjZSAgbm8uIDIKKyAgICAg
ICAgaWYgKE1hdGguYWJzKG5vcm1hbHNbaW5kZXggKyAxXSArIDEpIDwgMC4wMDEpIHsKKyAgICAg
ICAgICAgIGZhY2UgPSAyOworICAgICAgICB9CisgICAgICAgIGlkeCA9IGluZGV4IC8gMzsKKyAg
ICAgICAgdXZzWzIgKiBpZHhdID0gKDEgLSB1dnNbMiAqIGlkeF0pICogZmFjZVVWW2ZhY2VdLngg
KyB1dnNbMiAqIGlkeF0gKiBmYWNlVVZbZmFjZV0uejsKKyAgICAgICAgdXZzWzIgKiBpZHggKyAx
XSA9ICgxIC0gdXZzWzIgKiBpZHggKyAxXSkgKiBmYWNlVVZbZmFjZV0ueSArIHV2c1syICogaWR4
ICsgMV0gKiBmYWNlVVZbZmFjZV0udzsKKyAgICAgICAgaWYgKGZhY2VDb2xvcnMpIHsKKyAgICAg
ICAgICAgIGNvbG9ycy5wdXNoKGZhY2VDb2xvcnNbZmFjZV0uciwgZmFjZUNvbG9yc1tmYWNlXS5n
LCBmYWNlQ29sb3JzW2ZhY2VdLmIsIGZhY2VDb2xvcnNbZmFjZV0uYSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgLy8gc2lkZXMKKyAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5fQ29tcHV0ZVNpZGVzKHNpZGVPcmllbnRhdGlvbiwg
cG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzLCB1dnMsIGZyb250VVZzLCBiYWNrVVZzKTsKKyAg
ICAvLyBSZXN1bHQKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXSgpOworICAgIHZlcnRleERh
dGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgdmVydGV4RGF0YS5wb3NpdGlvbnMgPSBwb3NpdGlv
bnM7CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRhLnV2
cyA9IHV2czsKKyAgICBpZiAoZmFjZUNvbG9ycykgeworICAgICAgICB2YXIgdG90YWxDb2xvcnMg
PSAoc2lkZU9yaWVudGF0aW9uID09PSBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5ET1VCTEVTSURFKSA/IGNvbG9ycy5jb25jYXQoY29s
b3JzKSA6IGNvbG9yczsKKyAgICAgICAgdmVydGV4RGF0YS5jb2xvcnMgPSB0b3RhbENvbG9yczsK
KyAgICB9CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTWVzaCJdLkNyZWF0ZVBvbHlnb24gPSBmdW5jdGlvbiAobmFtZSwgc2hh
cGUsIHNjZW5lLCBob2xlcywgdXBkYXRhYmxlLCBzaWRlT3JpZW50YXRpb24sIGVhcmN1dEluamVj
dGlvbikgeworICAgIGlmIChlYXJjdXRJbmplY3Rpb24gPT09IHZvaWQgMCkgeyBlYXJjdXRJbmpl
Y3Rpb24gPSBlYXJjdXQ7IH0KKyAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgc2hhcGU6IHNo
YXBlLAorICAgICAgICBob2xlczogaG9sZXMsCisgICAgICAgIHVwZGF0YWJsZTogdXBkYXRhYmxl
LAorICAgICAgICBzaWRlT3JpZW50YXRpb246IHNpZGVPcmllbnRhdGlvbgorICAgIH07CisgICAg
cmV0dXJuIFBvbHlnb25CdWlsZGVyLkNyZWF0ZVBvbHlnb24obmFtZSwgb3B0aW9ucywgc2NlbmUs
IGVhcmN1dEluamVjdGlvbik7Cit9OworX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTWVzaCJdLkV4dHJ1ZGVQb2x5Z29uID0gZnVuY3Rpb24gKG5hbWUsIHNoYXBlLCBkZXB0aCwg
c2NlbmUsIGhvbGVzLCB1cGRhdGFibGUsIHNpZGVPcmllbnRhdGlvbiwgZWFyY3V0SW5qZWN0aW9u
KSB7CisgICAgaWYgKGVhcmN1dEluamVjdGlvbiA9PT0gdm9pZCAwKSB7IGVhcmN1dEluamVjdGlv
biA9IGVhcmN1dDsgfQorICAgIHZhciBvcHRpb25zID0geworICAgICAgICBzaGFwZTogc2hhcGUs
CisgICAgICAgIGhvbGVzOiBob2xlcywKKyAgICAgICAgZGVwdGg6IGRlcHRoLAorICAgICAgICB1
cGRhdGFibGU6IHVwZGF0YWJsZSwKKyAgICAgICAgc2lkZU9yaWVudGF0aW9uOiBzaWRlT3JpZW50
YXRpb24KKyAgICB9OworICAgIHJldHVybiBQb2x5Z29uQnVpbGRlci5FeHRydWRlUG9seWdvbihu
YW1lLCBvcHRpb25zLCBzY2VuZSwgZWFyY3V0SW5qZWN0aW9uKTsKK307CisvKioKKyAqIENsYXNz
IGNvbnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWlsZCBt
ZXNoZXMKKyAqLwordmFyIFBvbHlnb25CdWlsZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KCkgeworICAgIGZ1bmN0aW9uIFBvbHlnb25CdWlsZGVyKCkgeworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgcG9seWdvbiBtZXNoCisgICAgICogVGhlIHBvbHlnb24ncyBzaGFwZSB3
aWxsIGRlcGVuZCBvbiB0aGUgaW5wdXQgcGFyYW1ldGVycyBhbmQgaXMgY29uc3RydWN0ZWQgcGFy
YWxsZWwgdG8gYSBncm91bmQgbWVzaAorICAgICAqICogVGhlIHBhcmFtZXRlciBgc2hhcGVgIGlz
IGEgcmVxdWlyZWQgYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzIHJlcHJlc2VudGluZyB0aGUg
Y29ybmVycyBvZiB0aGUgcG9seWdvbiBpbiB0aCBYb1ogcGxhbmUsIHRoYXQgaXMgeSA9IDAgZm9y
IGFsbCB2ZWN0b3JzCisgICAgICogKiBZb3UgY2FuIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVudGF0
aW9uIHdpdGggdGhlIHZhbHVlcyA6IE1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgTWVzaC5CQUNL
U0lERSBvciBNZXNoLkRPVUJMRVNJREUKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8g
dXBkYXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0
IGZhbHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9u
Y2UgY3JlYXRlZAorICAgICAqICogSWYgeW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5
b3UgY2FuIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5k
IHN0aWNrIHJlc3BlY3RpdmVseSBvbiB0aGUgZnJvbnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGgg
dGhlIHBhcmFtZXRlcnMgYGZyb250VVZzYCBhbmQgYGJhY2tVVnNgIChWZWN0b3I0KQorICAgICAq
ICogUmVtZW1iZXIgeW91IGNhbiBvbmx5IGNoYW5nZSB0aGUgc2hhcGUgcG9zaXRpb25zLCBub3Qg
dGhlaXIgbnVtYmVyIHdoZW4gdXBkYXRpbmcgYSBwb2x5Z29uCisgICAgICogQHBhcmFtIG5hbWUg
ZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmlu
ZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSBlYXJjdXRJbmplY3Rp
b24gY2FuIGJlIHVzZWQgdG8gaW5qZWN0IHlvdXIgb3duIGVhcmN1dCByZWZlcmVuY2UKKyAgICAg
KiBAcmV0dXJucyB0aGUgcG9seWdvbiBtZXNoCisgICAgICovCisgICAgUG9seWdvbkJ1aWxkZXIu
Q3JlYXRlUG9seWdvbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSwgZWFyY3V0SW5q
ZWN0aW9uKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsg
fQorICAgICAgICBpZiAoZWFyY3V0SW5qZWN0aW9uID09PSB2b2lkIDApIHsgZWFyY3V0SW5qZWN0
aW9uID0gZWFyY3V0OyB9CisgICAgICAgIG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uID0gX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdLl9HZXREZWZhdWx0U2lkZU9yaWVu
dGF0aW9uKG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uKTsKKyAgICAgICAgdmFyIHNoYXBlID0gb3B0
aW9ucy5zaGFwZTsKKyAgICAgICAgdmFyIGhvbGVzID0gb3B0aW9ucy5ob2xlcyB8fCBbXTsKKyAg
ICAgICAgdmFyIGRlcHRoID0gb3B0aW9ucy5kZXB0aCB8fCAwOworICAgICAgICB2YXIgY29udG91
cnMgPSBbXTsKKyAgICAgICAgdmFyIGhvbGUgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzaGFwZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgY29udG91cnNbaV0gPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjIi
XShzaGFwZVtpXS54LCBzaGFwZVtpXS56KTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZXBzaWxv
biA9IDAuMDAwMDAwMDE7CisgICAgICAgIGlmIChjb250b3Vyc1swXS5lcXVhbHNXaXRoRXBzaWxv
bihjb250b3Vyc1tjb250b3Vycy5sZW5ndGggLSAxXSwgZXBzaWxvbikpIHsKKyAgICAgICAgICAg
IGNvbnRvdXJzLnBvcCgpOworICAgICAgICB9CisgICAgICAgIHZhciBwb2x5Z29uVHJpYW5ndWxh
dGlvbiA9IG5ldyBfcG9seWdvbk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUG9s
eWdvbk1lc2hCdWlsZGVyIl0obmFtZSwgY29udG91cnMsIHNjZW5lIHx8IF9FbmdpbmVzX2VuZ2lu
ZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkVuZ2luZVN0b3JlIl0uTGFzdENy
ZWF0ZWRTY2VuZSwgZWFyY3V0SW5qZWN0aW9uKTsKKyAgICAgICAgZm9yICh2YXIgaE5iID0gMDsg
aE5iIDwgaG9sZXMubGVuZ3RoOyBoTmIrKykgeworICAgICAgICAgICAgaG9sZSA9IFtdOworICAg
ICAgICAgICAgZm9yICh2YXIgaFBvaW50ID0gMDsgaFBvaW50IDwgaG9sZXNbaE5iXS5sZW5ndGg7
IGhQb2ludCsrKSB7CisgICAgICAgICAgICAgICAgaG9sZS5wdXNoKG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdKGhvbGVzW2hOYl1b
aFBvaW50XS54LCBob2xlc1toTmJdW2hQb2ludF0ueikpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcG9seWdvblRyaWFuZ3VsYXRpb24uYWRkSG9sZShob2xlKTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgcG9seWdvbiA9IHBvbHlnb25Ucmlhbmd1bGF0aW9uLmJ1aWxkKG9wdGlvbnMudXBk
YXRhYmxlLCBkZXB0aCk7CisgICAgICAgIHBvbHlnb24uX29yaWdpbmFsQnVpbGRlclNpZGVPcmll
bnRhdGlvbiA9IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uOworICAgICAgICB2YXIgdmVydGV4RGF0
YSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
RGF0YSJdLkNyZWF0ZVBvbHlnb24ocG9seWdvbiwgb3B0aW9ucy5zaWRlT3JpZW50YXRpb24sIG9w
dGlvbnMuZmFjZVVWLCBvcHRpb25zLmZhY2VDb2xvcnMsIG9wdGlvbnMuZnJvbnRVVnMsIG9wdGlv
bnMuYmFja1VWcyk7CisgICAgICAgIHZlcnRleERhdGEuYXBwbHlUb01lc2gocG9seWdvbiwgb3B0
aW9ucy51cGRhdGFibGUpOworICAgICAgICByZXR1cm4gcG9seWdvbjsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYW4gZXh0cnVkZWQgcG9seWdvbiBtZXNoLCB3aXRoIGRlcHRoIGlu
IHRoZSBZIGRpcmVjdGlvbi4KKyAgICAgKiAqIFlvdSBjYW4gc2V0IGRpZmZlcmVudCBjb2xvcnMg
YW5kIGRpZmZlcmVudCBpbWFnZXMgdG8gdGhlIHRvcCwgYm90dG9tIGFuZCBleHRydWRlZCBzaWRl
IGJ5IHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGBmYWNlQ29sb3JzYCAoYW4gYXJyYXkgb2YgMyBDb2xv
cjMgZWxlbWVudHMpIGFuZCBgZmFjZVVWYCAoYW4gYXJyYXkgb2YgMyBWZWN0b3I0IGVsZW1lbnRz
KQorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3JlYXRlYm94
X3Blcl9mYWNlX3RleHR1cmVzX2FuZF9jb2xvcnMKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVz
IHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUg
b3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZp
bmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIGVhcmN1dEluamVjdGlvbiBjYW4g
YmUgdXNlZCB0byBpbmplY3QgeW91ciBvd24gZWFyY3V0IHJlZmVyZW5jZQorICAgICAqIEByZXR1
cm5zIHRoZSBwb2x5Z29uIG1lc2gKKyAgICAgKi8KKyAgICBQb2x5Z29uQnVpbGRlci5FeHRydWRl
UG9seWdvbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSwgZWFyY3V0SW5qZWN0aW9u
KSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAg
ICAgICBpZiAoZWFyY3V0SW5qZWN0aW9uID09PSB2b2lkIDApIHsgZWFyY3V0SW5qZWN0aW9uID0g
ZWFyY3V0OyB9CisgICAgICAgIHJldHVybiBQb2x5Z29uQnVpbGRlci5DcmVhdGVQb2x5Z29uKG5h
bWUsIG9wdGlvbnMsIHNjZW5lLCBlYXJjdXRJbmplY3Rpb24pOworICAgIH07CisgICAgcmV0dXJu
IFBvbHlnb25CdWlsZGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNo
ZXMvQnVpbGRlcnMvcG9seWhlZHJvbkJ1aWxkZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL0J1aWxkZXJz
L3BvbHloZWRyb25CdWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9seWhlZHJvbkJ1
aWxkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWhlZHJvbkJ1
aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvbHloZWRyb25CdWlsZGVyOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVj
dG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0
aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tZXNoICovICIu
L01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfdmVydGV4
RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEudHMiKTsK
KworCisKKworX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZXJ0ZXhEYXRhIl0uQ3JlYXRlUG9seWhlZHJvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAg
Ly8gcHJvdmlkZWQgcG9seWhlZHJvbiB0eXBlcyA6CisgICAgLy8gMCA6IFRldHJhaGVkcm9uLCAx
IDogT2N0YWhlZHJvbiwgMiA6IERvZGVjYWhlZHJvbiwgMyA6IEljb3NhaGVkcm9uLCA0IDogUmhv
bWJpY3Vib2N0YWhlZHJvbiwgNSA6IFRyaWFuZ3VsYXIgUHJpc20sIDYgOiBQZW50YWdvbmFsIFBy
aXNtLCA3IDogSGV4YWdvbmFsIFByaXNtLCA4IDogU3F1YXJlIFB5cmFtaWQgKEoxKQorICAgIC8v
IDkgOiBQZW50YWdvbmFsIFB5cmFtaWQgKEoyKSwgMTAgOiBUcmlhbmd1bGFyIERpcHlyYW1pZCAo
SjEyKSwgMTEgOiBQZW50YWdvbmFsIERpcHlyYW1pZCAoSjEzKSwgMTIgOiBFbG9uZ2F0ZWQgU3F1
YXJlIERpcHlyYW1pZCAoSjE1KSwgMTMgOiBFbG9uZ2F0ZWQgUGVudGFnb25hbCBEaXB5cmFtaWQg
KEoxNiksIDE0IDogRWxvbmdhdGVkIFBlbnRhZ29uYWwgQ3Vwb2xhIChKMjApCisgICAgdmFyIHBv
bHloZWRyYSA9IFtdOworICAgIHBvbHloZWRyYVswXSA9IHsgdmVydGV4OiBbWzAsIDAsIDEuNzMy
MDUxXSwgWzEuNjMyOTkzLCAwLCAtMC41NzczNTAzXSwgWy0wLjgxNjQ5NjYsIDEuNDE0MjE0LCAt
MC41NzczNTAzXSwgWy0wLjgxNjQ5NjYsIC0xLjQxNDIxNCwgLTAuNTc3MzUwM11dLCBmYWNlOiBb
WzAsIDEsIDJdLCBbMCwgMiwgM10sIFswLCAzLCAxXSwgWzEsIDMsIDJdXSB9OworICAgIHBvbHlo
ZWRyYVsxXSA9IHsgdmVydGV4OiBbWzAsIDAsIDEuNDE0MjE0XSwgWzEuNDE0MjE0LCAwLCAwXSwg
WzAsIDEuNDE0MjE0LCAwXSwgWy0xLjQxNDIxNCwgMCwgMF0sIFswLCAtMS40MTQyMTQsIDBdLCBb
MCwgMCwgLTEuNDE0MjE0XV0sIGZhY2U6IFtbMCwgMSwgMl0sIFswLCAyLCAzXSwgWzAsIDMsIDRd
LCBbMCwgNCwgMV0sIFsxLCA0LCA1XSwgWzEsIDUsIDJdLCBbMiwgNSwgM10sIFszLCA1LCA0XV0g
fTsKKyAgICBwb2x5aGVkcmFbMl0gPSB7CisgICAgICAgIHZlcnRleDogW1swLCAwLCAxLjA3MDQ2
Nl0sIFswLjcxMzY0NDIsIDAsIDAuNzk3ODc4NF0sIFstMC4zNTY4MjIxLCAwLjYxODAzNCwgMC43
OTc4Nzg0XSwgWy0wLjM1NjgyMjEsIC0wLjYxODAzNCwgMC43OTc4Nzg0XSwgWzAuNzk3ODc4NCwg
MC42MTgwMzQsIDAuMzU2ODIyMV0sIFswLjc5Nzg3ODQsIC0wLjYxODAzNCwgMC4zNTY4MjIxXSwg
Wy0wLjkzNDE3MjQsIDAuMzgxOTY2LCAwLjM1NjgyMjFdLCBbMC4xMzYyOTM5LCAxLCAwLjM1Njgy
MjFdLCBbMC4xMzYyOTM5LCAtMSwgMC4zNTY4MjIxXSwgWy0wLjkzNDE3MjQsIC0wLjM4MTk2Niwg
MC4zNTY4MjIxXSwgWzAuOTM0MTcyNCwgMC4zODE5NjYsIC0wLjM1NjgyMjFdLCBbMC45MzQxNzI0
LCAtMC4zODE5NjYsIC0wLjM1NjgyMjFdLCBbLTAuNzk3ODc4NCwgMC42MTgwMzQsIC0wLjM1Njgy
MjFdLCBbLTAuMTM2MjkzOSwgMSwgLTAuMzU2ODIyMV0sIFstMC4xMzYyOTM5LCAtMSwgLTAuMzU2
ODIyMV0sIFstMC43OTc4Nzg0LCAtMC42MTgwMzQsIC0wLjM1NjgyMjFdLCBbMC4zNTY4MjIxLCAw
LjYxODAzNCwgLTAuNzk3ODc4NF0sIFswLjM1NjgyMjEsIC0wLjYxODAzNCwgLTAuNzk3ODc4NF0s
IFstMC43MTM2NDQyLCAwLCAtMC43OTc4Nzg0XSwgWzAsIDAsIC0xLjA3MDQ2Nl1dLAorICAgICAg
ICBmYWNlOiBbWzAsIDEsIDQsIDcsIDJdLCBbMCwgMiwgNiwgOSwgM10sIFswLCAzLCA4LCA1LCAx
XSwgWzEsIDUsIDExLCAxMCwgNF0sIFsyLCA3LCAxMywgMTIsIDZdLCBbMywgOSwgMTUsIDE0LCA4
XSwgWzQsIDEwLCAxNiwgMTMsIDddLCBbNSwgOCwgMTQsIDE3LCAxMV0sIFs2LCAxMiwgMTgsIDE1
LCA5XSwgWzEwLCAxMSwgMTcsIDE5LCAxNl0sIFsxMiwgMTMsIDE2LCAxOSwgMThdLCBbMTQsIDE1
LCAxOCwgMTksIDE3XV0KKyAgICB9OworICAgIHBvbHloZWRyYVszXSA9IHsKKyAgICAgICAgdmVy
dGV4OiBbWzAsIDAsIDEuMTc1NTcxXSwgWzEuMDUxNDYyLCAwLCAwLjUyNTczMTFdLCBbMC4zMjQ5
MTk3LCAxLCAwLjUyNTczMTFdLCBbLTAuODUwNjUwOCwgMC42MTgwMzQsIDAuNTI1NzMxMV0sIFst
MC44NTA2NTA4LCAtMC42MTgwMzQsIDAuNTI1NzMxMV0sIFswLjMyNDkxOTcsIC0xLCAwLjUyNTcz
MTFdLCBbMC44NTA2NTA4LCAwLjYxODAzNCwgLTAuNTI1NzMxMV0sIFswLjg1MDY1MDgsIC0wLjYx
ODAzNCwgLTAuNTI1NzMxMV0sIFstMC4zMjQ5MTk3LCAxLCAtMC41MjU3MzExXSwgWy0xLjA1MTQ2
MiwgMCwgLTAuNTI1NzMxMV0sIFstMC4zMjQ5MTk3LCAtMSwgLTAuNTI1NzMxMV0sIFswLCAwLCAt
MS4xNzU1NzFdXSwKKyAgICAgICAgZmFjZTogW1swLCAxLCAyXSwgWzAsIDIsIDNdLCBbMCwgMywg
NF0sIFswLCA0LCA1XSwgWzAsIDUsIDFdLCBbMSwgNSwgN10sIFsxLCA3LCA2XSwgWzEsIDYsIDJd
LCBbMiwgNiwgOF0sIFsyLCA4LCAzXSwgWzMsIDgsIDldLCBbMywgOSwgNF0sIFs0LCA5LCAxMF0s
IFs0LCAxMCwgNV0sIFs1LCAxMCwgN10sIFs2LCA3LCAxMV0sIFs2LCAxMSwgOF0sIFs3LCAxMCwg
MTFdLCBbOCwgMTEsIDldLCBbOSwgMTEsIDEwXV0KKyAgICB9OworICAgIHBvbHloZWRyYVs0XSA9
IHsKKyAgICAgICAgdmVydGV4OiBbWzAsIDAsIDEuMDcwNzIyXSwgWzAuNzE0ODEzNSwgMCwgMC43
OTcxNzUyXSwgWy0wLjEwNDY4MiwgMC43MDcxMDY4LCAwLjc5NzE3NTJdLCBbLTAuNjg0MTUyOCwg
MC4yMDcxMDY4LCAwLjc5NzE3NTJdLCBbLTAuMTA0NjgyLCAtMC43MDcxMDY4LCAwLjc5NzE3NTJd
LCBbMC42MTAxMzE1LCAwLjcwNzEwNjgsIDAuNTIzNjI3OV0sIFsxLjA0MTU2LCAwLjIwNzEwNjgs
IDAuMTM2NzczNl0sIFswLjYxMDEzMTUsIC0wLjcwNzEwNjgsIDAuNTIzNjI3OV0sIFstMC4zNTc0
MDY3LCAxLCAwLjEzNjc3MzZdLCBbLTAuNzg4ODM0OCwgLTAuNSwgMC41MjM2Mjc5XSwgWy0wLjkz
Njg3NzYsIDAuNSwgMC4xMzY3NzM2XSwgWy0wLjM1NzQwNjcsIC0xLCAwLjEzNjc3MzZdLCBbMC4z
NTc0MDY3LCAxLCAtMC4xMzY3NzM2XSwgWzAuOTM2ODc3NiwgLTAuNSwgLTAuMTM2NzczNl0sIFsw
Ljc4ODgzNDgsIDAuNSwgLTAuNTIzNjI3OV0sIFswLjM1NzQwNjcsIC0xLCAtMC4xMzY3NzM2XSwg
Wy0wLjYxMDEzMTUsIDAuNzA3MTA2OCwgLTAuNTIzNjI3OV0sIFstMS4wNDE1NiwgLTAuMjA3MTA2
OCwgLTAuMTM2NzczNl0sIFstMC42MTAxMzE1LCAtMC43MDcxMDY4LCAtMC41MjM2Mjc5XSwgWzAu
MTA0NjgyLCAwLjcwNzEwNjgsIC0wLjc5NzE3NTJdLCBbMC42ODQxNTI4LCAtMC4yMDcxMDY4LCAt
MC43OTcxNzUyXSwgWzAuMTA0NjgyLCAtMC43MDcxMDY4LCAtMC43OTcxNzUyXSwgWy0wLjcxNDgx
MzUsIDAsIC0wLjc5NzE3NTJdLCBbMCwgMCwgLTEuMDcwNzIyXV0sCisgICAgICAgIGZhY2U6IFtb
MCwgMiwgM10sIFsxLCA2LCA1XSwgWzQsIDksIDExXSwgWzcsIDE1LCAxM10sIFs4LCAxNiwgMTBd
LCBbMTIsIDE0LCAxOV0sIFsxNywgMjIsIDE4XSwgWzIwLCAyMSwgMjNdLCBbMCwgMSwgNSwgMl0s
IFswLCAzLCA5LCA0XSwgWzAsIDQsIDcsIDFdLCBbMSwgNywgMTMsIDZdLCBbMiwgNSwgMTIsIDhd
LCBbMiwgOCwgMTAsIDNdLCBbMywgMTAsIDE3LCA5XSwgWzQsIDExLCAxNSwgN10sIFs1LCA2LCAx
NCwgMTJdLCBbNiwgMTMsIDIwLCAxNF0sIFs4LCAxMiwgMTksIDE2XSwgWzksIDE3LCAxOCwgMTFd
LCBbMTAsIDE2LCAyMiwgMTddLCBbMTEsIDE4LCAyMSwgMTVdLCBbMTMsIDE1LCAyMSwgMjBdLCBb
MTQsIDIwLCAyMywgMTldLCBbMTYsIDE5LCAyMywgMjJdLCBbMTgsIDIyLCAyMywgMjFdXQorICAg
IH07CisgICAgcG9seWhlZHJhWzVdID0geyB2ZXJ0ZXg6IFtbMCwgMCwgMS4zMjI4NzZdLCBbMS4z
MDkzMDcsIDAsIDAuMTg4OTgyMl0sIFstMC45ODE5ODA1LCAwLjg2NjAyNTQsIDAuMTg4OTgyMl0s
IFswLjE2MzY2MzQsIC0xLjI5OTAzOCwgMC4xODg5ODIyXSwgWzAuMzI3MzI2OCwgMC44NjYwMjU0
LCAtMC45NDQ5MTEyXSwgWy0wLjgxODMxNzEsIC0wLjQzMzAxMjcsIC0wLjk0NDkxMTJdXSwgZmFj
ZTogW1swLCAzLCAxXSwgWzIsIDQsIDVdLCBbMCwgMSwgNCwgMl0sIFswLCAyLCA1LCAzXSwgWzEs
IDMsIDUsIDRdXSB9OworICAgIHBvbHloZWRyYVs2XSA9IHsgdmVydGV4OiBbWzAsIDAsIDEuMTU5
OTUzXSwgWzEuMDEzNDY0LCAwLCAwLjU2NDI1NDJdLCBbLTAuMzUwMTQzMSwgMC45NTEwNTY1LCAw
LjU2NDI1NDJdLCBbLTAuNzcxNTIwOCwgLTAuNjU3MTYzOSwgMC41NjQyNTQyXSwgWzAuNjYzMzIw
NiwgMC45NTEwNTY1LCAtMC4wMzE0NDQ4MV0sIFswLjg2ODI5NzksIC0wLjY1NzE2MzksIC0wLjM5
OTYwNzFdLCBbLTEuMTIxNjY0LCAwLjI5Mzg5MjYsIC0wLjAzMTQ0NDgxXSwgWy0wLjIzNDg4MzEs
IC0xLjA2MzMxNCwgLTAuMzk5NjA3MV0sIFswLjUxODE1NDgsIDAuMjkzODkyNiwgLTAuOTk1MzA2
MV0sIFstMC41ODUwMjYyLCAtMC4xMTIyNTcsIC0wLjk5NTMwNjFdXSwgZmFjZTogW1swLCAxLCA0
LCAyXSwgWzAsIDIsIDYsIDNdLCBbMSwgNSwgOCwgNF0sIFszLCA2LCA5LCA3XSwgWzUsIDcsIDks
IDhdLCBbMCwgMywgNywgNSwgMV0sIFsyLCA0LCA4LCA5LCA2XV0gfTsKKyAgICBwb2x5aGVkcmFb
N10gPSB7IHZlcnRleDogW1swLCAwLCAxLjExODAzNF0sIFswLjg5NDQyNzIsIDAsIDAuNjcwODIw
NF0sIFstMC4yMjM2MDY4LCAwLjg2NjAyNTQsIDAuNjcwODIwNF0sIFstMC43ODI2MjM4LCAtMC40
MzMwMTI3LCAwLjY3MDgyMDRdLCBbMC42NzA4MjA0LCAwLjg2NjAyNTQsIDAuMjIzNjA2OF0sIFsx
LjAwNjIzMSwgLTAuNDMzMDEyNywgLTAuMjIzNjA2OF0sIFstMS4wMDYyMzEsIDAuNDMzMDEyNywg
MC4yMjM2MDY4XSwgWy0wLjY3MDgyMDQsIC0wLjg2NjAyNTQsIC0wLjIyMzYwNjhdLCBbMC43ODI2
MjM4LCAwLjQzMzAxMjcsIC0wLjY3MDgyMDRdLCBbMC4yMjM2MDY4LCAtMC44NjYwMjU0LCAtMC42
NzA4MjA0XSwgWy0wLjg5NDQyNzIsIDAsIC0wLjY3MDgyMDRdLCBbMCwgMCwgLTEuMTE4MDM0XV0s
IGZhY2U6IFtbMCwgMSwgNCwgMl0sIFswLCAyLCA2LCAzXSwgWzEsIDUsIDgsIDRdLCBbMywgNiwg
MTAsIDddLCBbNSwgOSwgMTEsIDhdLCBbNywgMTAsIDExLCA5XSwgWzAsIDMsIDcsIDksIDUsIDFd
LCBbMiwgNCwgOCwgMTEsIDEwLCA2XV0gfTsKKyAgICBwb2x5aGVkcmFbOF0gPSB7IHZlcnRleDog
W1stMC43Mjk2NjUsIDAuNjcwMTIxLCAwLjMxOTE1NV0sIFstMC42NTUyMzUsIC0wLjI5MjEzLCAt
MC43NTQwOTZdLCBbLTAuMDkzOTIyLCAtMC42MDcxMjMsIDAuNTM3ODE4XSwgWzAuNzAyMTk2LCAw
LjU5NTY5MSwgMC40ODUxODddLCBbMC43NzY2MjYsIC0wLjM2NjU2LCAtMC41ODgwNjRdXSwgZmFj
ZTogW1sxLCA0LCAyXSwgWzAsIDEsIDJdLCBbMywgMCwgMl0sIFs0LCAzLCAyXSwgWzQsIDEsIDAs
IDNdXSB9OworICAgIHBvbHloZWRyYVs5XSA9IHsgdmVydGV4OiBbWy0wLjg2ODg0OSwgLTAuMTAw
MDQxLCAwLjYxMjU3XSwgWy0wLjMyOTQ1OCwgMC45NzYwOTksIDAuMjgwNzhdLCBbLTAuMjY2Mjks
IC0wLjAxMzc5NiwgLTAuNDc3NjU0XSwgWy0wLjEzMzkyLCAtMS4wMzQxMTUsIDAuMjI5ODI5XSwg
WzAuNzM4ODM0LCAwLjcwNzExNywgLTAuMzA3MDE4XSwgWzAuODU5NjgzLCAtMC41MzUyNjQsIC0w
LjMzODUwOF1dLCBmYWNlOiBbWzMsIDAsIDJdLCBbNSwgMywgMl0sIFs0LCA1LCAyXSwgWzEsIDQs
IDJdLCBbMCwgMSwgMl0sIFswLCAzLCA1LCA0LCAxXV0gfTsKKyAgICBwb2x5aGVkcmFbMTBdID0g
eyB2ZXJ0ZXg6IFtbLTAuNjEwMzg5LCAwLjI0Mzk3NSwgMC41MzEyMTNdLCBbLTAuMTg3ODEyLCAt
MC40ODc5NSwgLTAuNjY0MDE2XSwgWy0wLjE4NzgxMiwgMC45NzU5LCAtMC42NjQwMTZdLCBbMC4x
ODc4MTIsIC0wLjk3NTksIDAuNjY0MDE2XSwgWzAuNzk4MjAxLCAwLjI0Mzk3NSwgMC4xMzI4MDNd
XSwgZmFjZTogW1sxLCAzLCAwXSwgWzMsIDQsIDBdLCBbMywgMSwgNF0sIFswLCAyLCAxXSwgWzAs
IDQsIDJdLCBbMiwgNCwgMV1dIH07CisgICAgcG9seWhlZHJhWzExXSA9IHsgdmVydGV4OiBbWy0x
LjAyODc3OCwgMC4zOTIwMjcsIC0wLjA0ODc4Nl0sIFstMC42NDA1MDMsIC0wLjY0NjE2MSwgMC42
MjE4MzddLCBbLTAuMTI1MTYyLCAtMC4zOTU2NjMsIC0wLjU0MDA1OV0sIFswLjAwNDY4MywgMC44
ODg0NDcsIC0wLjY1MTk4OF0sIFswLjEyNTE2MSwgMC4zOTU2NjMsIDAuNTQwMDU5XSwgWzAuNjMy
OTI1LCAtMC43OTEzNzYsIDAuNDMzMTAyXSwgWzEuMDMxNjcyLCAwLjE1NzA2MywgLTAuMzU0MTY1
XV0sIGZhY2U6IFtbMywgMiwgMF0sIFsyLCAxLCAwXSwgWzIsIDUsIDFdLCBbMCwgNCwgM10sIFsw
LCAxLCA0XSwgWzQsIDEsIDVdLCBbMiwgMywgNl0sIFszLCA0LCA2XSwgWzUsIDIsIDZdLCBbNCwg
NSwgNl1dIH07CisgICAgcG9seWhlZHJhWzEyXSA9IHsgdmVydGV4OiBbWy0wLjY2OTg2NywgMC4z
MzQ5MzMsIC0wLjUyOTU3Nl0sIFstMC42Njk4NjcsIDAuMzM0OTMzLCAwLjUyOTU3N10sIFstMC40
MDQzLCAxLjIxMjkwMSwgMF0sIFstMC4zMzQ5MzMsIC0wLjY2OTg2NywgLTAuNTI5NTc2XSwgWy0w
LjMzNDkzMywgLTAuNjY5ODY3LCAwLjUyOTU3N10sIFswLjMzNDkzMywgMC42Njk4NjcsIC0wLjUy
OTU3Nl0sIFswLjMzNDkzMywgMC42Njk4NjcsIDAuNTI5NTc3XSwgWzAuNDA0MywgLTEuMjEyOTAx
LCAwXSwgWzAuNjY5ODY3LCAtMC4zMzQ5MzMsIC0wLjUyOTU3Nl0sIFswLjY2OTg2NywgLTAuMzM0
OTMzLCAwLjUyOTU3N11dLCBmYWNlOiBbWzgsIDksIDddLCBbNiwgNSwgMl0sIFszLCA4LCA3XSwg
WzUsIDAsIDJdLCBbNCwgMywgN10sIFswLCAxLCAyXSwgWzksIDQsIDddLCBbMSwgNiwgMl0sIFs5
LCA4LCA1LCA2XSwgWzgsIDMsIDAsIDVdLCBbMywgNCwgMSwgMF0sIFs0LCA5LCA2LCAxXV0gfTsK
KyAgICBwb2x5aGVkcmFbMTNdID0geyB2ZXJ0ZXg6IFtbLTAuOTMxODM2LCAwLjIxOTk3NiwgLTAu
MjY0NjMyXSwgWy0wLjYzNjcwNiwgMC4zMTgzNTMsIDAuNjkyODE2XSwgWy0wLjYxMzQ4MywgLTAu
NzM1MDgzLCAtMC4yNjQ2MzJdLCBbLTAuMzI2NTQ1LCAwLjk3OTYzNCwgMF0sIFstMC4zMTgzNTMs
IC0wLjYzNjcwNiwgMC42OTI4MTZdLCBbLTAuMTU5MTc2LCAwLjQ3NzUyOSwgLTAuODU2MzY4XSwg
WzAuMTU5MTc2LCAtMC40Nzc1MjksIC0wLjg1NjM2OF0sIFswLjMxODM1MywgMC42MzY3MDYsIDAu
NjkyODE2XSwgWzAuMzI2NTQ1LCAtMC45Nzk2MzQsIDBdLCBbMC42MTM0ODIsIDAuNzM1MDgyLCAt
MC4yNjQ2MzJdLCBbMC42MzY3MDYsIC0wLjMxODM1MywgMC42OTI4MTZdLCBbMC45MzE4MzUsIC0w
LjIxOTk3NywgLTAuMjY0NjMyXV0sIGZhY2U6IFtbMTEsIDEwLCA4XSwgWzcsIDksIDNdLCBbNiwg
MTEsIDhdLCBbOSwgNSwgM10sIFsyLCA2LCA4XSwgWzUsIDAsIDNdLCBbNCwgMiwgOF0sIFswLCAx
LCAzXSwgWzEwLCA0LCA4XSwgWzEsIDcsIDNdLCBbMTAsIDExLCA5LCA3XSwgWzExLCA2LCA1LCA5
XSwgWzYsIDIsIDAsIDVdLCBbMiwgNCwgMSwgMF0sIFs0LCAxMCwgNywgMV1dIH07CisgICAgcG9s
eWhlZHJhWzE0XSA9IHsKKyAgICAgICAgdmVydGV4OiBbWy0wLjkzNDY1LCAwLjMwMDQ1OSwgLTAu
MjcxMTg1XSwgWy0wLjgzODY4OSwgLTAuMjYwMjE5LCAtMC41MTYwMTddLCBbLTAuNzExMzE5LCAw
LjcxNzU5MSwgMC4xMjgzNTldLCBbLTAuNzEwMzM0LCAtMC4xNTY5MjIsIDAuMDgwOTQ2XSwgWy0w
LjU5OTc5OSwgMC41NTYwMDMsIC0wLjcyNTE0OF0sIFstMC41MDM4MzgsIC0wLjAwNDY3NSwgLTAu
OTY5OTgxXSwgWy0wLjQ4NzAwNCwgMC4yNjAyMSwgMC40ODA0OV0sIFstMC40NjAwODksIC0wLjc1
MDI4MiwgLTAuNTEyNjIyXSwgWy0wLjM3NjQ2OCwgMC45NzMxMzUsIC0wLjMyNTYwNV0sIFstMC4z
MzE3MzUsIC0wLjY0Njk4NSwgMC4wODQzNDJdLCBbLTAuMjU0MDAxLCAwLjgzMTg0NywgMC41MzAw
MDFdLCBbLTAuMTI1MjM5LCAtMC40OTQ3MzgsIC0wLjk2NjU4Nl0sIFswLjAyOTYyMiwgMC4wMjc5
NDksIDAuNzMwODE3XSwgWzAuMDU2NTM2LCAtMC45ODI1NDMsIC0wLjI2MjI5NV0sIFswLjA4MDg1
LCAxLjA4NzM5MSwgMC4wNzYwMzddLCBbMC4xMjU1ODMsIC0wLjUzMjcyOSwgMC40ODU5ODRdLCBb
MC4yNjI2MjUsIDAuNTk5NTg2LCAwLjc4MDMyOF0sIFswLjM5MTM4NywgLTAuNzI2OTk5LCAtMC43
MTYyNTldLCBbMC41MTM4NTQsIC0wLjg2ODI4NywgMC4xMzkzNDddLCBbMC41OTc0NzUsIDAuODU1
MTMsIDAuMzI2MzY0XSwgWzAuNjQxMjI0LCAwLjEwOTUyMywgMC43ODM3MjNdLCBbMC43MzcxODUs
IC0wLjQ1MTE1NSwgMC41Mzg4OTFdLCBbMC44NDg3MDUsIC0wLjYxMjc0MiwgLTAuMzE0NjE2XSwg
WzAuOTc2MDc1LCAwLjM2NTA2NywgMC4zMjk3Nl0sIFsxLjA3MjAzNiwgLTAuMTk1NjEsIDAuMDg0
OTI3XV0sCisgICAgICAgIGZhY2U6IFtbMTUsIDE4LCAyMV0sIFsxMiwgMjAsIDE2XSwgWzYsIDEw
LCAyXSwgWzMsIDAsIDFdLCBbOSwgNywgMTNdLCBbMiwgOCwgNCwgMF0sIFswLCA0LCA1LCAxXSwg
WzEsIDUsIDExLCA3XSwgWzcsIDExLCAxNywgMTNdLCBbMTMsIDE3LCAyMiwgMThdLCBbMTgsIDIy
LCAyNCwgMjFdLCBbMjEsIDI0LCAyMywgMjBdLCBbMjAsIDIzLCAxOSwgMTZdLCBbMTYsIDE5LCAx
NCwgMTBdLCBbMTAsIDE0LCA4LCAyXSwgWzE1LCA5LCAxMywgMThdLCBbMTIsIDE1LCAyMSwgMjBd
LCBbNiwgMTIsIDE2LCAxMF0sIFszLCA2LCAyLCAwXSwgWzksIDMsIDEsIDddLCBbOSwgMTUsIDEy
LCA2LCAzXSwgWzIyLCAxNywgMTEsIDUsIDQsIDgsIDE0LCAxOSwgMjMsIDI0XV0KKyAgICB9Owor
ICAgIHZhciB0eXBlID0gb3B0aW9ucy50eXBlICYmIChvcHRpb25zLnR5cGUgPCAwIHx8IG9wdGlv
bnMudHlwZSA+PSBwb2x5aGVkcmEubGVuZ3RoKSA/IDAgOiBvcHRpb25zLnR5cGUgfHwgMDsKKyAg
ICB2YXIgc2l6ZSA9IG9wdGlvbnMuc2l6ZTsKKyAgICB2YXIgc2l6ZVggPSBvcHRpb25zLnNpemVY
IHx8IHNpemUgfHwgMTsKKyAgICB2YXIgc2l6ZVkgPSBvcHRpb25zLnNpemVZIHx8IHNpemUgfHwg
MTsKKyAgICB2YXIgc2l6ZVogPSBvcHRpb25zLnNpemVaIHx8IHNpemUgfHwgMTsKKyAgICB2YXIg
ZGF0YSA9IG9wdGlvbnMuY3VzdG9tIHx8IHBvbHloZWRyYVt0eXBlXTsKKyAgICB2YXIgbmJmYWNl
cyA9IGRhdGEuZmFjZS5sZW5ndGg7CisgICAgdmFyIGZhY2VVViA9IG9wdGlvbnMuZmFjZVVWIHx8
IG5ldyBBcnJheShuYmZhY2VzKTsKKyAgICB2YXIgZmFjZUNvbG9ycyA9IG9wdGlvbnMuZmFjZUNv
bG9yczsKKyAgICB2YXIgZmxhdCA9IChvcHRpb25zLmZsYXQgPT09IHVuZGVmaW5lZCkgPyB0cnVl
IDogb3B0aW9ucy5mbGF0OworICAgIHZhciBzaWRlT3JpZW50YXRpb24gPSAob3B0aW9ucy5zaWRl
T3JpZW50YXRpb24gPT09IDApID8gMCA6IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uIHx8IF9tZXNo
X3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdLkRF
RkFVTFRTSURFOworICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgaW5k
aWNlcyA9IG5ldyBBcnJheSgpOworICAgIHZhciBub3JtYWxzID0gbmV3IEFycmF5KCk7CisgICAg
dmFyIHV2cyA9IG5ldyBBcnJheSgpOworICAgIHZhciBjb2xvcnMgPSBuZXcgQXJyYXkoKTsKKyAg
ICB2YXIgaW5kZXggPSAwOworICAgIHZhciBmYWNlSWR4ID0gMDsgLy8gZmFjZSBjdXJzb3IgaW4g
dGhlIGFycmF5ICJpbmRleGVzIgorICAgIHZhciBpbmRleGVzID0gbmV3IEFycmF5KCk7CisgICAg
dmFyIGkgPSAwOworICAgIHZhciBmID0gMDsKKyAgICB2YXIgdSwgdiwgYW5nLCB4LCB5LCB0bXA7
CisgICAgLy8gZGVmYXVsdCBmYWNlIGNvbG9ycyBhbmQgVVYgaWYgdW5kZWZpbmVkCisgICAgaWYg
KGZsYXQpIHsKKyAgICAgICAgZm9yIChmID0gMDsgZiA8IG5iZmFjZXM7IGYrKykgeworICAgICAg
ICAgICAgaWYgKGZhY2VDb2xvcnMgJiYgZmFjZUNvbG9yc1tmXSA9PT0gdW5kZWZpbmVkKSB7Cisg
ICAgICAgICAgICAgICAgZmFjZUNvbG9yc1tmXSA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjQiXSgxLCAxLCAxLCAxKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChmYWNlVVYgJiYgZmFjZVVWW2ZdID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgICAgICBmYWNlVVZbZl0gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjQiXSgwLCAwLCAxLCAxKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWZsYXQpIHsKKyAgICAgICAgZm9y
IChpID0gMDsgaSA8IGRhdGEudmVydGV4Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBwb3Np
dGlvbnMucHVzaChkYXRhLnZlcnRleFtpXVswXSAqIHNpemVYLCBkYXRhLnZlcnRleFtpXVsxXSAq
IHNpemVZLCBkYXRhLnZlcnRleFtpXVsyXSAqIHNpemVaKTsKKyAgICAgICAgICAgIHV2cy5wdXNo
KDAsIDApOworICAgICAgICB9CisgICAgICAgIGZvciAoZiA9IDA7IGYgPCBuYmZhY2VzOyBmKysp
IHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhLmZhY2VbZl0ubGVuZ3RoIC0gMjsg
aSsrKSB7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGRhdGEuZmFjZVtmXVswXSwgZGF0
YS5mYWNlW2ZdW2kgKyAyXSwgZGF0YS5mYWNlW2ZdW2kgKyAxXSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZvciAoZiA9IDA7IGYgPCBuYmZh
Y2VzOyBmKyspIHsKKyAgICAgICAgICAgIHZhciBmbCA9IGRhdGEuZmFjZVtmXS5sZW5ndGg7IC8v
IG51bWJlciBvZiB2ZXJ0aWNlcyBvZiB0aGUgY3VycmVudCBmYWNlCisgICAgICAgICAgICBhbmcg
PSAyICogTWF0aC5QSSAvIGZsOworICAgICAgICAgICAgeCA9IDAuNSAqIE1hdGgudGFuKGFuZyAv
IDIpOworICAgICAgICAgICAgeSA9IDAuNTsKKyAgICAgICAgICAgIC8vIHBvc2l0aW9ucywgdXZz
LCBjb2xvcnMKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmbDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgLy8gcG9zaXRpb25zCisgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goZGF0
YS52ZXJ0ZXhbZGF0YS5mYWNlW2ZdW2ldXVswXSAqIHNpemVYLCBkYXRhLnZlcnRleFtkYXRhLmZh
Y2VbZl1baV1dWzFdICogc2l6ZVksIGRhdGEudmVydGV4W2RhdGEuZmFjZVtmXVtpXV1bMl0gKiBz
aXplWik7CisgICAgICAgICAgICAgICAgaW5kZXhlcy5wdXNoKGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBpbmRleCsrOworICAgICAgICAgICAgICAgIC8vIHV2cworICAgICAgICAgICAgICAgIHUg
PSBmYWNlVVZbZl0ueCArIChmYWNlVVZbZl0ueiAtIGZhY2VVVltmXS54KSAqICgwLjUgKyB4KTsK
KyAgICAgICAgICAgICAgICB2ID0gZmFjZVVWW2ZdLnkgKyAoZmFjZVVWW2ZdLncgLSBmYWNlVVZb
Zl0ueSkgKiAoeSAtIDAuNSk7CisgICAgICAgICAgICAgICAgdXZzLnB1c2godSwgdik7CisgICAg
ICAgICAgICAgICAgdG1wID0geCAqIE1hdGguY29zKGFuZykgLSB5ICogTWF0aC5zaW4oYW5nKTsK
KyAgICAgICAgICAgICAgICB5ID0geCAqIE1hdGguc2luKGFuZykgKyB5ICogTWF0aC5jb3MoYW5n
KTsKKyAgICAgICAgICAgICAgICB4ID0gdG1wOworICAgICAgICAgICAgICAgIC8vIGNvbG9ycwor
ICAgICAgICAgICAgICAgIGlmIChmYWNlQ29sb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bG9ycy5wdXNoKGZhY2VDb2xvcnNbZl0uciwgZmFjZUNvbG9yc1tmXS5nLCBmYWNlQ29sb3JzW2Zd
LmIsIGZhY2VDb2xvcnNbZl0uYSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gaW5kaWNlcyBmcm9tIGluZGV4ZXMKKyAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBmbCAtIDI7IGkrKykgeworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRl
eGVzWzAgKyBmYWNlSWR4XSwgaW5kZXhlc1tpICsgMiArIGZhY2VJZHhdLCBpbmRleGVzW2kgKyAx
ICsgZmFjZUlkeF0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFjZUlkeCArPSBmbDsK
KyAgICAgICAgfQorICAgIH0KKyAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5Db21wdXRlTm9ybWFscyhwb3NpdGlvbnMsIGluZGlj
ZXMsIG5vcm1hbHMpOworICAgIF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVydGV4RGF0YSJdLl9Db21wdXRlU2lkZXMoc2lkZU9yaWVudGF0aW9uLCBwb3Np
dGlvbnMsIGluZGljZXMsIG5vcm1hbHMsIHV2cywgb3B0aW9ucy5mcm9udFVWcywgb3B0aW9ucy5i
YWNrVVZzKTsKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXSgpOworICAgIHZlcnRleERhdGEu
cG9zaXRpb25zID0gcG9zaXRpb25zOworICAgIHZlcnRleERhdGEuaW5kaWNlcyA9IGluZGljZXM7
CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRhLnV2cyA9
IHV2czsKKyAgICBpZiAoZmFjZUNvbG9ycyAmJiBmbGF0KSB7CisgICAgICAgIHZlcnRleERhdGEu
Y29sb3JzID0gY29sb3JzOworICAgIH0KKyAgICByZXR1cm4gdmVydGV4RGF0YTsKK307CitfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uQ3JlYXRlUG9seWhlZHJvbiA9
IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkgeworICAgIHJldHVybiBQb2x5aGVkcm9u
QnVpbGRlci5DcmVhdGVQb2x5aGVkcm9uKG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKK307CisvKioK
KyAqIENsYXNzIGNvbnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxs
eSBidWlsZCBtZXNoZXMKKyAqLwordmFyIFBvbHloZWRyb25CdWlsZGVyID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFBvbHloZWRyb25CdWlsZGVyKCkgeworICAg
IH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcG9seWhlZHJvbiBtZXNoCisgICAgICogKiBU
aGUgcGFyYW1ldGVyIGB0eXBlYCAocG9zaXRpdmUgaW50ZWdlciwgbWF4IDE0LCBkZWZhdWx0IDAp
IHNldHMgdGhlIHBvbHloZWRyb24gdHlwZSB0byBidWlsZCBhbW9uZyB0aGUgMTUgZW1iYmVkZWQg
dHlwZXMuIFBsZWFzZSByZWZlciB0byB0aGUgdHlwZSBzaGVldCBpbiB0aGUgdHV0b3JpYWwgdG8g
Y2hvb3NlIHRoZSB3YW50ZWQgdHlwZQorICAgICAqICogVGhlIHBhcmFtZXRlciBgc2l6ZWAgKHBv
c2l0aXZlIGZsb2F0LCBkZWZhdWx0IDEpIHNldHMgdGhlIHBvbHlnb24gc2l6ZQorICAgICAqICog
WW91IGNhbiBvdmVyd3JpdGUgdGhlIGBzaXplYCBvbiBlYWNoIGRpbWVuc2lvbiBidSB1c2luZyB0
aGUgcGFyYW1ldGVycyBgc2l6ZVhgLCBgc2l6ZVlgIG9yIGBzaXplWmAgKHBvc2l0aXZlIGZsb2F0
cywgZGVmYXVsdCB0byBgc2l6ZWAgdmFsdWUpCisgICAgICogKiBZb3UgY2FuIGJ1aWxkIG90aGVy
IHBvbHloZWRyb24gdHlwZXMgdGhhbiB0aGUgMTUgZW1iYmVkZWQgb25lcyBieSBzZXR0aW5nIHRo
ZSBwYXJhbWV0ZXIgYGN1c3RvbWAgKGBwb2x5aGVkcm9uT2JqZWN0YCwgZGVmYXVsdCBudWxsKS4g
SWYgeW91IHNldCB0aGUgcGFyYW1ldGVyIGBjdXN0b21gLCB0aGlzIG92ZXJ3cml0dGVzIHRoZSBw
YXJhbWV0ZXIgYHR5cGVgCisgICAgICogKiBBIGBwb2x5aGVkcm9uT2JqZWN0YCBpcyBhIGZvcm1h
dHRlZCBqYXZhc2NyaXB0IG9iamVjdC4gWW91J2xsIGZpbmQgYSBmdWxsIGZpbGUgd2l0aCBwcmUt
c2V0IHBvbHloZWRyYSBoZXJlIDogaHR0cHM6Ly9naXRodWIuY29tL0JhYnlsb25KUy9FeHRlbnNp
b25zL3RyZWUvbWFzdGVyL1BvbHloZWRyb24KKyAgICAgKiAqIFlvdSBjYW4gc2V0IHRoZSBjb2xv
ciBhbmQgdGhlIFVWIG9mIGVhY2ggc2lkZSBvZiB0aGUgcG9seWhlZHJvbiB3aXRoIHRoZSBwYXJh
bWV0ZXJzIGBmYWNlQ29sb3JzYCAoQ29sb3I0LCBkZWZhdWx0IGAoMSwgMSwgMSwgMSlgKSBhbmQg
ZmFjZVVWIChWZWN0b3I0LCBkZWZhdWx0IGAoMCwgMCwgMSwgMSlgKQorICAgICAqICogVG8gdW5k
ZXJzdGFuZCBob3cgdG8gc2V0IGBmYWNlVVZgIG9yIGBmYWNlQ29sb3JzYCwgcGxlYXNlIHJlYWQg
dGhpcyBieSBjb25zaWRlcmluZyB0aGUgcmlnaHQgbnVtYmVyIG9mIGZhY2VzIG9mIHlvdXIgcG9s
eWhlZHJvbiwgaW5zdGVhZCBvZiBvbmx5IDYgZm9yIHRoZSBib3ggOiBodHRwczovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9jcmVhdGVib3hfcGVyX2ZhY2VfdGV4dHVyZXNfYW5kX2NvbG9ycwor
ICAgICAqICogVGhlIHBhcmFtZXRlciBgZmxhdGAgKGJvb2xlYW4sIGRlZmF1bHQgdHJ1ZSkuIElm
IHNldCB0byBmYWxzZSwgaXQgZ2l2ZXMgdGhlIHBvbHloZWRyb24gYSBzaW5nbGUgZ2xvYmFsIGZh
Y2UsIHNvIGxlc3MgdmVydGljZXMgYW5kIHNoYXJlZCBub3JtYWxzLiBJbiB0aGlzIGNhc2UsIGBm
YWNlQ29sb3JzYCBhbmQgYGZhY2VVVmAgYXJlIGlnbm9yZWQKKyAgICAgKiAqIFlvdSBjYW4gYWxz
byBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9O
Lk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJBQllM
T04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVk
IG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8g
Y3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lk
ZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3RvcjQp
LiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNj
b3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUgbWVzaCBj
YW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRh
YmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2Vk
IHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBu
YW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9u
cyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRo
ZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdGhlIHBvbHloZWRyb24gbWVzaAorICAg
ICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcG9seWhlZHJhX3NoYXBl
cworICAgICAqLworICAgIFBvbHloZWRyb25CdWlsZGVyLkNyZWF0ZVBvbHloZWRyb24gPSBmdW5j
dGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lk
IDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHZhciBwb2x5aGVkcm9uID0gbmV3IF9tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1lc2giXShuYW1lLCBzY2VuZSk7CisgICAg
ICAgIG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uID0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTWVzaCJdLl9HZXREZWZhdWx0U2lkZU9yaWVudGF0aW9uKG9wdGlvbnMuc2lkZU9y
aWVudGF0aW9uKTsKKyAgICAgICAgcG9seWhlZHJvbi5fb3JpZ2luYWxCdWlsZGVyU2lkZU9yaWVu
dGF0aW9uID0gb3B0aW9ucy5zaWRlT3JpZW50YXRpb247CisgICAgICAgIHZhciB2ZXJ0ZXhEYXRh
ID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhE
YXRhIl0uQ3JlYXRlUG9seWhlZHJvbihvcHRpb25zKTsKKyAgICAgICAgdmVydGV4RGF0YS5hcHBs
eVRvTWVzaChwb2x5aGVkcm9uLCBvcHRpb25zLnVwZGF0YWJsZSk7CisgICAgICAgIHJldHVybiBw
b2x5aGVkcm9uOworICAgIH07CisgICAgcmV0dXJuIFBvbHloZWRyb25CdWlsZGVyOworfSgpKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRlcnMvcmliYm9uQnVpbGRl
ci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL01lc2hlcy9CdWlsZGVycy9yaWJib25CdWlsZGVyLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBSaWJib25CdWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlJpYmJvbkJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJpYmJvbkJ1aWxkZXI7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0
aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRh
ICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0N1bGxpbmcvYm91bmRpbmdJbmZvICovICIu
L0N1bGxpbmcvYm91bmRpbmdJbmZvLnRzIik7CisKKworCisKKworX21lc2hfdmVydGV4RGF0YV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlUmliYm9uID0g
ZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICB2YXIgcGF0aEFycmF5ID0gb3B0aW9ucy5wYXRoQXJy
YXk7CisgICAgdmFyIGNsb3NlQXJyYXkgPSBvcHRpb25zLmNsb3NlQXJyYXkgfHwgZmFsc2U7Cisg
ICAgdmFyIGNsb3NlUGF0aCA9IG9wdGlvbnMuY2xvc2VQYXRoIHx8IGZhbHNlOworICAgIHZhciBp
bnZlcnRVViA9IG9wdGlvbnMuaW52ZXJ0VVYgfHwgZmFsc2U7CisgICAgdmFyIGRlZmF1bHRPZmZz
ZXQgPSBNYXRoLmZsb29yKHBhdGhBcnJheVswXS5sZW5ndGggLyAyKTsKKyAgICB2YXIgb2Zmc2V0
ID0gb3B0aW9ucy5vZmZzZXQgfHwgZGVmYXVsdE9mZnNldDsKKyAgICBvZmZzZXQgPSBvZmZzZXQg
PiBkZWZhdWx0T2Zmc2V0ID8gZGVmYXVsdE9mZnNldCA6IE1hdGguZmxvb3Iob2Zmc2V0KTsgLy8g
b2Zmc2V0IG1heCBhbGxvd2VkIDogZGVmYXVsdE9mZnNldAorICAgIHZhciBzaWRlT3JpZW50YXRp
b24gPSAob3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPT09IDApID8gMCA6IG9wdGlvbnMuc2lkZU9y
aWVudGF0aW9uIHx8IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVydGV4RGF0YSJdLkRFRkFVTFRTSURFOworICAgIHZhciBjdXN0b21VViA9IG9wdGlvbnMu
dXZzOworICAgIHZhciBjdXN0b21Db2xvcnMgPSBvcHRpb25zLmNvbG9yczsKKyAgICB2YXIgcG9z
aXRpb25zID0gW107CisgICAgdmFyIGluZGljZXMgPSBbXTsKKyAgICB2YXIgbm9ybWFscyA9IFtd
OworICAgIHZhciB1dnMgPSBbXTsKKyAgICB2YXIgdXMgPSBbXTsgLy8gdXNbcGF0aF9pZF0gPSBb
dURpc3QxLCB1RGlzdDIsIHVEaXN0MyAuLi4gXSBkaXN0YW5jZXMgYmV0d2VlbiBwb2ludHMgb24g
cGF0aCBwYXRoX2lkCisgICAgdmFyIHZzID0gW107IC8vIHZzW2ldID0gW3ZEaXN0MSwgdkRpc3Qy
LCB2RGlzdDMsIC4uLiBdIGRpc3RhbmNlcyBiZXR3ZWVuIHBvaW50cyBpIG9mIGNvbnNlY3V0aXZl
cyBwYXRocyBmcm9tIHBhdGhBcnJheQorICAgIHZhciB1VG90YWxEaXN0YW5jZSA9IFtdOyAvLyB1
VG90YWxEaXN0YW5jZVtwXSA6IHRvdGFsIGRpc3RhbmNlIG9mIHBhdGggcAorICAgIHZhciB2VG90
YWxEaXN0YW5jZSA9IFtdOyAvLyAgdlRvdGFsRGlzdGFuY2VbaV0gOiB0b3RhbCBkaXN0YW5jZSBi
ZXR3ZWVuIHBvaW50cyBpIG9mIGZpcnN0IGFuZCBsYXN0IHBhdGggZnJvbSBwYXRoQXJyYXkKKyAg
ICB2YXIgbWlubGc7IC8vIG1pbmltYWwgbGVuZ3RoIGFtb25nIGFsbCBwYXRocyBmcm9tIHBhdGhB
cnJheQorICAgIHZhciBsZyA9IFtdOyAvLyBhcnJheSBvZiBwYXRoIGxlbmd0aHMgOiBuYiBvZiB2
ZXJ0ZXggcGVyIHBhdGgKKyAgICB2YXIgaWR4ID0gW107IC8vIGFycmF5IG9mIHBhdGggaW5kZXhl
cyA6IGluZGV4IG9mIGVhY2ggcGF0aCAoZmlyc3QgdmVydGV4KSBpbiB0aGUgdG90YWwgdmVydGV4
IG51bWJlcgorICAgIHZhciBwOyAvLyBwYXRoIGl0ZXJhdG9yCisgICAgdmFyIGk7IC8vIHBvaW50
IGl0ZXJhdG9yCisgICAgdmFyIGo7IC8vIHBvaW50IGl0ZXJhdG9yCisgICAgLy8gaWYgc2luZ2xl
IHBhdGggaW4gcGF0aEFycmF5CisgICAgaWYgKHBhdGhBcnJheS5sZW5ndGggPCAyKSB7CisgICAg
ICAgIHZhciBhcjEgPSBbXTsKKyAgICAgICAgdmFyIGFyMiA9IFtdOworICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgcGF0aEFycmF5WzBdLmxlbmd0aCAtIG9mZnNldDsgaSsrKSB7CisgICAgICAgICAg
ICBhcjEucHVzaChwYXRoQXJyYXlbMF1baV0pOworICAgICAgICAgICAgYXIyLnB1c2gocGF0aEFy
cmF5WzBdW2kgKyBvZmZzZXRdKTsKKyAgICAgICAgfQorICAgICAgICBwYXRoQXJyYXkgPSBbYXIx
LCBhcjJdOworICAgIH0KKyAgICAvLyBwb3NpdGlvbnMgYW5kIGhvcml6b250YWwgZGlzdGFuY2Vz
ICh1KQorICAgIHZhciBpZGMgPSAwOworICAgIHZhciBjbG9zZVBhdGhDb3JyID0gKGNsb3NlUGF0
aCkgPyAxIDogMDsgLy8gdGhlIGZpbmFsIGluZGV4IHdpbGwgYmUgKzEgaWYgY2xvc2VQYXRoCisg
ICAgdmFyIHBhdGg7CisgICAgdmFyIGw7CisgICAgbWlubGcgPSBwYXRoQXJyYXlbMF0ubGVuZ3Ro
OworICAgIHZhciB2ZWN0bGc7CisgICAgdmFyIGRpc3Q7CisgICAgZm9yIChwID0gMDsgcCA8IHBh
dGhBcnJheS5sZW5ndGg7IHArKykgeworICAgICAgICB1VG90YWxEaXN0YW5jZVtwXSA9IDA7Cisg
ICAgICAgIHVzW3BdID0gWzBdOworICAgICAgICBwYXRoID0gcGF0aEFycmF5W3BdOworICAgICAg
ICBsID0gcGF0aC5sZW5ndGg7CisgICAgICAgIG1pbmxnID0gKG1pbmxnIDwgbCkgPyBtaW5sZyA6
IGw7CisgICAgICAgIGogPSAwOworICAgICAgICB3aGlsZSAoaiA8IGwpIHsKKyAgICAgICAgICAg
IHBvc2l0aW9ucy5wdXNoKHBhdGhbal0ueCwgcGF0aFtqXS55LCBwYXRoW2pdLnopOworICAgICAg
ICAgICAgaWYgKGogPiAwKSB7CisgICAgICAgICAgICAgICAgdmVjdGxnID0gcGF0aFtqXS5zdWJ0
cmFjdChwYXRoW2ogLSAxXSkubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgZGlzdCA9IHZlY3Rs
ZyArIHVUb3RhbERpc3RhbmNlW3BdOworICAgICAgICAgICAgICAgIHVzW3BdLnB1c2goZGlzdCk7
CisgICAgICAgICAgICAgICAgdVRvdGFsRGlzdGFuY2VbcF0gPSBkaXN0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaisrOworICAgICAgICB9CisgICAgICAgIGlmIChjbG9zZVBhdGgpIHsg
Ly8gYW4gZXh0cmEgaGlkZGVuIHZlcnRleCBpcyBhZGRlZCBpbiB0aGUgInBvc2l0aW9ucyIgYXJy
YXkKKyAgICAgICAgICAgIGotLTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHBhdGhbMF0u
eCwgcGF0aFswXS55LCBwYXRoWzBdLnopOworICAgICAgICAgICAgdmVjdGxnID0gcGF0aFtqXS5z
dWJ0cmFjdChwYXRoWzBdKS5sZW5ndGgoKTsKKyAgICAgICAgICAgIGRpc3QgPSB2ZWN0bGcgKyB1
VG90YWxEaXN0YW5jZVtwXTsKKyAgICAgICAgICAgIHVzW3BdLnB1c2goZGlzdCk7CisgICAgICAg
ICAgICB1VG90YWxEaXN0YW5jZVtwXSA9IGRpc3Q7CisgICAgICAgIH0KKyAgICAgICAgbGdbcF0g
PSBsICsgY2xvc2VQYXRoQ29ycjsKKyAgICAgICAgaWR4W3BdID0gaWRjOworICAgICAgICBpZGMg
Kz0gKGwgKyBjbG9zZVBhdGhDb3JyKTsKKyAgICB9CisgICAgLy8gdmVydGljYWwgZGlzdGFuY2Vz
ICh2KQorICAgIHZhciBwYXRoMTsKKyAgICB2YXIgcGF0aDI7CisgICAgdmFyIHZlcnRleDEgPSBu
dWxsOworICAgIHZhciB2ZXJ0ZXgyID0gbnVsbDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbWlubGcg
KyBjbG9zZVBhdGhDb3JyOyBpKyspIHsKKyAgICAgICAgdlRvdGFsRGlzdGFuY2VbaV0gPSAwOwor
ICAgICAgICB2c1tpXSA9IFswXTsKKyAgICAgICAgZm9yIChwID0gMDsgcCA8IHBhdGhBcnJheS5s
ZW5ndGggLSAxOyBwKyspIHsKKyAgICAgICAgICAgIHBhdGgxID0gcGF0aEFycmF5W3BdOworICAg
ICAgICAgICAgcGF0aDIgPSBwYXRoQXJyYXlbcCArIDFdOworICAgICAgICAgICAgaWYgKGkgPT09
IG1pbmxnKSB7IC8vIGNsb3NlUGF0aAorICAgICAgICAgICAgICAgIHZlcnRleDEgPSBwYXRoMVsw
XTsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXgyID0gcGF0aDJbMF07CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXgxID0gcGF0aDFbaV07Cisg
ICAgICAgICAgICAgICAgdmVydGV4MiA9IHBhdGgyW2ldOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmVjdGxnID0gdmVydGV4Mi5zdWJ0cmFjdCh2ZXJ0ZXgxKS5sZW5ndGgoKTsKKyAgICAg
ICAgICAgIGRpc3QgPSB2ZWN0bGcgKyB2VG90YWxEaXN0YW5jZVtpXTsKKyAgICAgICAgICAgIHZz
W2ldLnB1c2goZGlzdCk7CisgICAgICAgICAgICB2VG90YWxEaXN0YW5jZVtpXSA9IGRpc3Q7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNsb3NlQXJyYXkgJiYgdmVydGV4MiAmJiB2ZXJ0ZXgxKSB7
CisgICAgICAgICAgICBwYXRoMSA9IHBhdGhBcnJheVtwXTsKKyAgICAgICAgICAgIHBhdGgyID0g
cGF0aEFycmF5WzBdOworICAgICAgICAgICAgaWYgKGkgPT09IG1pbmxnKSB7IC8vIGNsb3NlUGF0
aAorICAgICAgICAgICAgICAgIHZlcnRleDIgPSBwYXRoMlswXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZlY3RsZyA9IHZlcnRleDIuc3VidHJhY3QodmVydGV4MSkubGVuZ3RoKCk7Cisg
ICAgICAgICAgICBkaXN0ID0gdmVjdGxnICsgdlRvdGFsRGlzdGFuY2VbaV07CisgICAgICAgICAg
ICB2VG90YWxEaXN0YW5jZVtpXSA9IGRpc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gdXZz
CisgICAgdmFyIHU7CisgICAgdmFyIHY7CisgICAgaWYgKGN1c3RvbVVWKSB7CisgICAgICAgIGZv
ciAocCA9IDA7IHAgPCBjdXN0b21VVi5sZW5ndGg7IHArKykgeworICAgICAgICAgICAgdXZzLnB1
c2goY3VzdG9tVVZbcF0ueCwgY3VzdG9tVVZbcF0ueSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSB7CisgICAgICAgIGZvciAocCA9IDA7IHAgPCBwYXRoQXJyYXkubGVuZ3RoOyBwKyspIHsK
KyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW5sZyArIGNsb3NlUGF0aENvcnI7IGkrKykg
eworICAgICAgICAgICAgICAgIHUgPSAodVRvdGFsRGlzdGFuY2VbcF0gIT0gMC4wKSA/IHVzW3Bd
W2ldIC8gdVRvdGFsRGlzdGFuY2VbcF0gOiAwLjA7CisgICAgICAgICAgICAgICAgdiA9ICh2VG90
YWxEaXN0YW5jZVtpXSAhPSAwLjApID8gdnNbaV1bcF0gLyB2VG90YWxEaXN0YW5jZVtpXSA6IDAu
MDsKKyAgICAgICAgICAgICAgICBpZiAoaW52ZXJ0VVYpIHsKKyAgICAgICAgICAgICAgICAgICAg
dXZzLnB1c2godiwgdSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICB1dnMucHVzaCh1LCB2KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gaW5kaWNlcworICAgIHAg
PSAwOyAvLyBwYXRoIGluZGV4CisgICAgdmFyIHBpID0gMDsgLy8gcG9zaXRpb25zIGFycmF5IGlu
ZGV4CisgICAgdmFyIGwxID0gbGdbcF0gLSAxOyAvLyBwYXRoMSBsZW5ndGgKKyAgICB2YXIgbDIg
PSBsZ1twICsgMV0gLSAxOyAvLyBwYXRoMiBsZW5ndGgKKyAgICB2YXIgbWluID0gKGwxIDwgbDIp
ID8gbDEgOiBsMjsgLy8gY3VycmVudCBwYXRoIHN0b3AgaW5kZXgKKyAgICB2YXIgc2hmdCA9IGlk
eFsxXSAtIGlkeFswXTsgLy8gc2hpZnQKKyAgICB2YXIgcGF0aDFuYiA9IGNsb3NlQXJyYXkgPyBs
Zy5sZW5ndGggOiBsZy5sZW5ndGggLSAxOyAvLyBudW1iZXIgb2YgcGF0aDEgdG8gaXRlcmF0ZQlv
bgorICAgIHdoaWxlIChwaSA8PSBtaW4gJiYgcCA8IHBhdGgxbmIpIHsgLy8gIHN0YXkgdW5kZXIg
bWluIGFuZCBkb24ndCBnbyBvdmVyIG5leHQgdG8gbGFzdCBwYXRoCisgICAgICAgIC8vIGRyYXcg
dHdvIHRyaWFuZ2xlcyBiZXR3ZWVuIHBhdGgxIChwMSkgYW5kIHBhdGgyIChwMikgOiAocDEucGks
IHAyLnBpLCBwMS5waSsxKSBhbmQgKHAyLnBpKzEsIHAxLnBpKzEsIHAyLnBpKSBjbG9ja3dpc2UK
KyAgICAgICAgaW5kaWNlcy5wdXNoKHBpLCBwaSArIHNoZnQsIHBpICsgMSk7CisgICAgICAgIGlu
ZGljZXMucHVzaChwaSArIHNoZnQgKyAxLCBwaSArIDEsIHBpICsgc2hmdCk7CisgICAgICAgIHBp
ICs9IDE7CisgICAgICAgIGlmIChwaSA9PT0gbWluKSB7IC8vIGlmIGVuZCBvZiBvbmUgb2YgdHdv
IGNvbnNlY3V0aXZlIHBhdGhzIHJlYWNoZWQsIGdvIHRvIG5leHQgZXhpc3RpbmcgcGF0aAorICAg
ICAgICAgICAgcCsrOworICAgICAgICAgICAgaWYgKHAgPT09IGxnLmxlbmd0aCAtIDEpIHsgLy8g
bGFzdCBwYXRoIG9mIHBhdGhBcnJheSByZWFjaGVkIDw9PiBjbG9zZUFycmF5ID09IHRydWUKKyAg
ICAgICAgICAgICAgICBzaGZ0ID0gaWR4WzBdIC0gaWR4W3BdOworICAgICAgICAgICAgICAgIGwx
ID0gbGdbcF0gLSAxOworICAgICAgICAgICAgICAgIGwyID0gbGdbMF0gLSAxOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc2hmdCA9IGlkeFtwICsg
MV0gLSBpZHhbcF07CisgICAgICAgICAgICAgICAgbDEgPSBsZ1twXSAtIDE7CisgICAgICAgICAg
ICAgICAgbDIgPSBsZ1twICsgMV0gLSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGkg
PSBpZHhbcF07CisgICAgICAgICAgICBtaW4gPSAobDEgPCBsMikgPyBsMSArIHBpIDogbDIgKyBw
aTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBub3JtYWxzCisgICAgX21lc2hfdmVydGV4RGF0
YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ29tcHV0ZU5vcm1h
bHMocG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzKTsKKyAgICBpZiAoY2xvc2VQYXRoKSB7IC8v
IHVwZGF0ZSBib3RoIHRoZSBmaXJzdCBhbmQgbGFzdCB2ZXJ0ZXggbm9ybWFscyB0byB0aGVpciBh
dmVyYWdlIHZhbHVlCisgICAgICAgIHZhciBpbmRleEZpcnN0ID0gMDsKKyAgICAgICAgdmFyIGlu
ZGV4TGFzdCA9IDA7CisgICAgICAgIGZvciAocCA9IDA7IHAgPCBwYXRoQXJyYXkubGVuZ3RoOyBw
KyspIHsKKyAgICAgICAgICAgIGluZGV4Rmlyc3QgPSBpZHhbcF0gKiAzOworICAgICAgICAgICAg
aWYgKHAgKyAxIDwgcGF0aEFycmF5Lmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGluZGV4TGFz
dCA9IChpZHhbcCArIDFdIC0gMSkgKiAzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgaW5kZXhMYXN0ID0gbm9ybWFscy5sZW5ndGggLSAzOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbm9ybWFsc1tpbmRleEZpcnN0XSA9IChub3JtYWxzW2lu
ZGV4Rmlyc3RdICsgbm9ybWFsc1tpbmRleExhc3RdKSAqIDAuNTsKKyAgICAgICAgICAgIG5vcm1h
bHNbaW5kZXhGaXJzdCArIDFdID0gKG5vcm1hbHNbaW5kZXhGaXJzdCArIDFdICsgbm9ybWFsc1tp
bmRleExhc3QgKyAxXSkgKiAwLjU7CisgICAgICAgICAgICBub3JtYWxzW2luZGV4Rmlyc3QgKyAy
XSA9IChub3JtYWxzW2luZGV4Rmlyc3QgKyAyXSArIG5vcm1hbHNbaW5kZXhMYXN0ICsgMl0pICog
MC41OworICAgICAgICAgICAgbm9ybWFsc1tpbmRleExhc3RdID0gbm9ybWFsc1tpbmRleEZpcnN0
XTsKKyAgICAgICAgICAgIG5vcm1hbHNbaW5kZXhMYXN0ICsgMV0gPSBub3JtYWxzW2luZGV4Rmly
c3QgKyAxXTsKKyAgICAgICAgICAgIG5vcm1hbHNbaW5kZXhMYXN0ICsgMl0gPSBub3JtYWxzW2lu
ZGV4Rmlyc3QgKyAyXTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBzaWRlcworICAgIF9tZXNo
X3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdLl9D
b21wdXRlU2lkZXMoc2lkZU9yaWVudGF0aW9uLCBwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1hbHMs
IHV2cywgb3B0aW9ucy5mcm9udFVWcywgb3B0aW9ucy5iYWNrVVZzKTsKKyAgICAvLyBDb2xvcnMK
KyAgICB2YXIgY29sb3JzID0gbnVsbDsKKyAgICBpZiAoY3VzdG9tQ29sb3JzKSB7CisgICAgICAg
IGNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoY3VzdG9tQ29sb3JzLmxlbmd0aCAqIDQpOworICAg
ICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGN1c3RvbUNvbG9ycy5sZW5ndGg7IGMrKykgeworICAg
ICAgICAgICAgY29sb3JzW2MgKiA0XSA9IGN1c3RvbUNvbG9yc1tjXS5yOworICAgICAgICAgICAg
Y29sb3JzW2MgKiA0ICsgMV0gPSBjdXN0b21Db2xvcnNbY10uZzsKKyAgICAgICAgICAgIGNvbG9y
c1tjICogNCArIDJdID0gY3VzdG9tQ29sb3JzW2NdLmI7CisgICAgICAgICAgICBjb2xvcnNbYyAq
IDQgKyAzXSA9IGN1c3RvbUNvbG9yc1tjXS5hOworICAgICAgICB9CisgICAgfQorICAgIC8vIFJl
c3VsdAorICAgIHZhciB2ZXJ0ZXhEYXRhID0gbmV3IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdKCk7CisgICAgdmFyIHBvc2l0aW9uczMy
ID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMpOworICAgIHZhciBub3JtYWxzMzIgPSBuZXcg
RmxvYXQzMkFycmF5KG5vcm1hbHMpOworICAgIHZhciB1dnMzMiA9IG5ldyBGbG9hdDMyQXJyYXko
dXZzKTsKKyAgICB2ZXJ0ZXhEYXRhLmluZGljZXMgPSBpbmRpY2VzOworICAgIHZlcnRleERhdGEu
cG9zaXRpb25zID0gcG9zaXRpb25zMzI7CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFs
czMyOworICAgIHZlcnRleERhdGEudXZzID0gdXZzMzI7CisgICAgaWYgKGNvbG9ycykgeworICAg
ICAgICB2ZXJ0ZXhEYXRhLnNldChjb2xvcnMsIF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kKTsKKyAgICB9CisgICAgaWYgKGNsb3Nl
UGF0aCkgeworICAgICAgICB2ZXJ0ZXhEYXRhLl9pZHggPSBpZHg7CisgICAgfQorICAgIHJldHVy
biB2ZXJ0ZXhEYXRhOworfTsKK19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1l
c2giXS5DcmVhdGVSaWJib24gPSBmdW5jdGlvbiAobmFtZSwgcGF0aEFycmF5LCBjbG9zZUFycmF5
LCBjbG9zZVBhdGgsIG9mZnNldCwgc2NlbmUsIHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uLCBp
bnN0YW5jZSkgeworICAgIGlmIChjbG9zZUFycmF5ID09PSB2b2lkIDApIHsgY2xvc2VBcnJheSA9
IGZhbHNlOyB9CisgICAgaWYgKHVwZGF0YWJsZSA9PT0gdm9pZCAwKSB7IHVwZGF0YWJsZSA9IGZh
bHNlOyB9CisgICAgcmV0dXJuIFJpYmJvbkJ1aWxkZXIuQ3JlYXRlUmliYm9uKG5hbWUsIHsKKyAg
ICAgICAgcGF0aEFycmF5OiBwYXRoQXJyYXksCisgICAgICAgIGNsb3NlQXJyYXk6IGNsb3NlQXJy
YXksCisgICAgICAgIGNsb3NlUGF0aDogY2xvc2VQYXRoLAorICAgICAgICBvZmZzZXQ6IG9mZnNl
dCwKKyAgICAgICAgdXBkYXRhYmxlOiB1cGRhdGFibGUsCisgICAgICAgIHNpZGVPcmllbnRhdGlv
bjogc2lkZU9yaWVudGF0aW9uLAorICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UKKyAgICB9LCBz
Y2VuZSk7Cit9OworLyoqCisgKiBDbGFzcyBjb250YWluaW5nIHN0YXRpYyBmdW5jdGlvbnMgdG8g
aGVscCBwcm9jZWR1cmFsbHkgYnVpbGQgbWVzaGVzCisgKi8KK3ZhciBSaWJib25CdWlsZGVyID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFJpYmJvbkJ1aWxkZXIo
KSB7CisgICAgfQorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSByaWJib24gbWVzaC4gVGhlIHJp
YmJvbiBpcyBhIHBhcmFtZXRyaWMgc2hhcGUuICBJdCBoYXMgbm8gcHJlZGVmaW5lZCBzaGFwZS4g
SXRzIGZpbmFsIHNoYXBlIHdpbGwgZGVwZW5kIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzCisgICAg
ICogKiBUaGUgcGFyYW1ldGVyIGBwYXRoQXJyYXlgIGlzIGEgcmVxdWlyZWQgYXJyYXkgb2YgcGF0
aHMsIHdoYXQgYXJlIGVhY2ggYW4gYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzLiBUaGUgcGF0
aEFycmF5IHBhcmFtZXRlciBkZXBpY3RzIHRoZSByaWJib24gZ2VvbWV0cnkKKyAgICAgKiAqIFRo
ZSBwYXJhbWV0ZXIgYGNsb3NlQXJyYXlgIChib29sZWFuLCBkZWZhdWx0IGZhbHNlKSBjcmVhdGVz
IGEgc2VhbSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgcGF0aHMgb2YgdGhlIHBhdGgg
YXJyYXkKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGNsb3NlUGF0aGAgKGJvb2xlYW4sIGRlZmF1
bHQgZmFsc2UpIGNyZWF0ZXMgYSBzZWFtIGJldHdlZW4gdGhlIGZpcnN0IGFuZCB0aGUgbGFzdCBw
b2ludHMgb2YgZWFjaCBwYXRoIG9mIHRoZSBwYXRoIGFycmF5CisgICAgICogKiBUaGUgcGFyYW1l
dGVyIGBvZmZzZXRgIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDogcm91bmRlZCBoYWxmIHNp
emUgb2YgdGhlIHBhdGhBcnJheSBsZW5ndGgpLCBpcyB0YWtlbiBpbiBhY2NvdW50IG9ubHkgaWYg
dGhlIGBwYXRoQXJyYXlgIGlzIGNvbnRhaW5pbmcgYSBzaW5nbGUgcGF0aAorICAgICAqICogSXQn
cyB0aGUgb2Zmc2V0IHRvIGpvaW4gdGhlIHBvaW50cyBmcm9tIHRoZSBzYW1lIHBhdGguIEV4IDog
b2Zmc2V0ID0gMTAgbWVhbnMgdGhlIHBvaW50IDEgaXMgam9pbmVkIHRvIHRoZSBwb2ludCAxMQor
ICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgaW5zdGFuY2VgIGlzIGFuIGluc3RhbmNl
IG9mIGFuIGV4aXN0aW5nIFJpYmJvbiBvYmplY3QgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZSBwYXNz
ZWQgYHBhdGhBcnJheWAgcGFyYW1ldGVyIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3df
dG8vaG93X3RvX2R5bmFtaWNhbGx5X21vcnBoX2FfbWVzaCNyaWJib24KKyAgICAgKiAqIFlvdSBj
YW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBC
QUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9y
IEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91Ymxl
LXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1h
Z2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJh
Y2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZl
Y3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEw
MS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUg
b3B0aW9uYWwgcGFyYW1ldGVyIGBpbnZlcnRVVmAgKGJvb2xlYW4sIGRlZmF1bHQgZmFsc2UpIHN3
YXBzIGluIHRoZSBnZW9tZXRyeSB0aGUgVSBhbmQgViBjb29yZGluYXRlcyB0byBhcHBseSBhIHRl
eHR1cmUKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHV2c2AgaXMgYW4gb3B0aW9uYWwgZmxhdCBh
cnJheSBvZiBgVmVjdG9yMmAgdG8gdXBkYXRlL3NldCBlYWNoIHJpYmJvbiB2ZXJ0ZXggd2l0aCBp
dHMgb3duIGN1c3RvbSBVViB2YWx1ZXMgaW5zdGVhZCBvZiB0aGUgY29tcHV0ZWQgb25lcworICAg
ICAqICogVGhlIHBhcmFtZXRlcnMgYGNvbG9yc2AgaXMgYW4gb3B0aW9uYWwgZmxhdCBhcnJheSBv
ZiBgQ29sb3I0YCB0byBzZXQvdXBkYXRlIGVhY2ggcmliYm9uIHZlcnRleCB3aXRoIGl0cyBvd24g
Y3VzdG9tIGNvbG9yIHZhbHVlcworICAgICAqICogTm90ZSB0aGF0IGlmIHlvdSB1c2UgdGhlIHBh
cmFtZXRlcnMgYHV2c2Agb3IgYGNvbG9yc2AsIHRoZSBwYXNzZWQgYXJyYXlzIG11c3QgYmUgcG9w
dWxhdGVkIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBlbGVtZW50cywgaXQgaXMgdG8gc2F5IHRo
ZSBudW1iZXIgb2YgcmliYm9uIHZlcnRpY2VzLiBSZW1lbWJlciB0aGF0IGlmIHlvdSBzZXQgYGNs
b3NlUGF0aGAgdG8gYHRydWVgLCB0aGVyZSdzIG9uZSBleHRyYSB2ZXJ0ZXggcGVyIHBhdGggaW4g
dGhlIGdlb21ldHJ5CisgICAgICogKiBNb3Jlb3ZlciwgeW91IGNhbiB1c2UgdGhlIHBhcmFtZXRl
ciBgY29sb3JgIHdpdGggYGluc3RhbmNlYCAodG8gdXBkYXRlIHRoZSByaWJib24pLCBvbmx5IGlm
IHlvdSBwcmV2aW91c2x5IHVzZWQgaXQgYXQgY3JlYXRpb24gdGltZQorICAgICAqICogVGhlIG1l
c2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVw
ZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBw
b3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0
aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9w
dGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5l
cyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSByaWJib24gbWVzaAorICAg
ICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcmliYm9uX3R1dG9yaWFs
CisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9wYXJhbWV0cmlj
X3NoYXBlcworICAgICAqLworICAgIFJpYmJvbkJ1aWxkZXIuQ3JlYXRlUmliYm9uID0gZnVuY3Rp
b24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAw
KSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICB2YXIgcGF0aEFycmF5ID0gb3B0aW9ucy5wYXRo
QXJyYXk7CisgICAgICAgIHZhciBjbG9zZUFycmF5ID0gb3B0aW9ucy5jbG9zZUFycmF5OworICAg
ICAgICB2YXIgY2xvc2VQYXRoID0gb3B0aW9ucy5jbG9zZVBhdGg7CisgICAgICAgIHZhciBzaWRl
T3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0u
X0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24pOworICAg
ICAgICB2YXIgaW5zdGFuY2UgPSBvcHRpb25zLmluc3RhbmNlOworICAgICAgICB2YXIgdXBkYXRh
YmxlID0gb3B0aW9ucy51cGRhdGFibGU7CisgICAgICAgIGlmIChpbnN0YW5jZSkgeyAvLyBleGlz
dGluZyByaWJib24gaW5zdGFuY2UgdXBkYXRlCisgICAgICAgICAgICAvLyBwb3NpdGlvbkZ1bmN0
aW9uIDogcmliYm9uIGNhc2UKKyAgICAgICAgICAgIC8vIG9ubHkgcGF0aEFycmF5IGFuZCBzaWRl
T3JpZW50YXRpb24gcGFyYW1ldGVycyBhcmUgdGFrZW4gaW50byBhY2NvdW50IGZvciBwb3NpdGlv
bnMgdXBkYXRlCisgICAgICAgICAgICB2YXIgbWluaW11bV8xID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdLnNl
dEFsbChOdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICAgICAgICAgIHZhciBtYXhpbXVtXzEgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJd
LlZlY3RvcjNbMV0uc2V0QWxsKC1OdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICAgICAgICAgIHZhciBw
b3NpdGlvbkZ1bmN0aW9uID0gZnVuY3Rpb24gKHBvc2l0aW9ucykgeworICAgICAgICAgICAgICAg
IHZhciBtaW5sZyA9IHBhdGhBcnJheVswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgdmFyIG1l
c2ggPSBpbnN0YW5jZTsKKyAgICAgICAgICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgICAgICAg
ICAgdmFyIG5zID0gKG1lc2guX29yaWdpbmFsQnVpbGRlclNpZGVPcmllbnRhdGlvbiA9PT0gX21l
c2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkRPVUJMRVNJREUpID8gMiA6
IDE7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgc2kgPSAxOyBzaSA8PSBuczsgKytzaSkgewor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHBhdGhBcnJheS5sZW5ndGg7
ICsrcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGggPSBwYXRoQXJyYXlbcF07
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHBhdGgubGVuZ3RoOworICAgICAgICAg
ICAgICAgICAgICAgICAgbWlubGcgPSAobWlubGcgPCBsKSA/IG1pbmxnIDogbDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWlubGc7ICsraikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRoUG9pbnQgPSBwYXRoW2pdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tpXSA9IHBhdGhQb2ludC54OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tpICsgMV0gPSBwYXRoUG9pbnQueTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbaSArIDJdID0gcGF0aFBvaW50Lno7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bV8xLm1pbmltaXplSW5QbGFjZUZyb21G
bG9hdHMocGF0aFBvaW50LngsIHBhdGhQb2ludC55LCBwYXRoUG9pbnQueik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF4aW11bV8xLm1heGltaXplSW5QbGFjZUZyb21GbG9hdHMocGF0
aFBvaW50LngsIHBhdGhQb2ludC55LCBwYXRoUG9pbnQueik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1lc2guX2NyZWF0aW9uRGF0YVN0b3JhZ2UgJiYgbWVzaC5fY3JlYXRp
b25EYXRhU3RvcmFnZS5jbG9zZVBhdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcGF0aFBvaW50ID0gcGF0aFswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Np
dGlvbnNbaV0gPSBwYXRoUG9pbnQueDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Np
dGlvbnNbaSArIDFdID0gcGF0aFBvaW50Lnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9zaXRpb25zW2kgKyAyXSA9IHBhdGhQb2ludC56OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGkgKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB2YXIg
cG9zaXRpb25zID0gaW5zdGFuY2UuZ2V0VmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAg
ICAgIHBvc2l0aW9uRnVuY3Rpb24ocG9zaXRpb25zKTsKKyAgICAgICAgICAgIGlmIChpbnN0YW5j
ZS5fYm91bmRpbmdJbmZvKSB7CisgICAgICAgICAgICAgICAgaW5zdGFuY2UuX2JvdW5kaW5nSW5m
by5yZUNvbnN0cnVjdChtaW5pbXVtXzEsIG1heGltdW1fMSwgaW5zdGFuY2UuX3dvcmxkTWF0cml4
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlu
c3RhbmNlLl9ib3VuZGluZ0luZm8gPSBuZXcgX0N1bGxpbmdfYm91bmRpbmdJbmZvX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIkJvdW5kaW5nSW5mbyJdKG1pbmltdW1fMSwgbWF4aW11bV8x
LCBpbnN0YW5jZS5fd29ybGRNYXRyaXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5z
dGFuY2UudXBkYXRlVmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kLCBwb3NpdGlvbnMsIGZhbHNlLCBmYWxz
ZSk7CisgICAgICAgICAgICBpZiAob3B0aW9ucy5jb2xvcnMpIHsKKyAgICAgICAgICAgICAgICB2
YXIgY29sb3JzID0gaW5zdGFuY2UuZ2V0VmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHZhciBjID0gMCwgY29sb3JJbmRleCA9IDA7IGMgPCBvcHRpb25zLmNvbG9ycy5s
ZW5ndGg7IGMrKywgY29sb3JJbmRleCArPSA0KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBj
b2xvciA9IG9wdGlvbnMuY29sb3JzW2NdOworICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY29s
b3JJbmRleF0gPSBjb2xvci5yOworICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JJbmRl
eCArIDFdID0gY29sb3IuZzsKKyAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbG9ySW5kZXgg
KyAyXSA9IGNvbG9yLmI7CisgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvckluZGV4ICsg
M10gPSBjb2xvci5hOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnN0YW5j
ZS51cGRhdGVWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQsIGNvbG9ycywgZmFsc2UsIGZhbHNlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnV2cykgeworICAgICAgICAgICAgICAg
IHZhciB1dnMgPSBpbnN0YW5jZS5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy51dnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgdXZzW2kgKiAyXSA9IG9wdGlvbnMudXZzW2ldLng7CisgICAgICAgICAgICAg
ICAgICAgIHV2c1tpICogMiArIDFdID0gb3B0aW9ucy51dnNbaV0ueTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaW5zdGFuY2UudXBkYXRlVmVydGljZXNEYXRhKF9idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kLCB1dnMs
IGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWluc3RhbmNl
LmFyZU5vcm1hbHNGcm96ZW4gfHwgaW5zdGFuY2UuaXNGYWNldERhdGFFbmFibGVkKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGluZGljZXMgPSBpbnN0YW5jZS5nZXRJbmRpY2VzKCk7CisgICAgICAg
ICAgICAgICAgdmFyIG5vcm1hbHMgPSBpbnN0YW5jZS5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKTsK
KyAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gaW5zdGFuY2UuaXNGYWNldERhdGFFbmFibGVk
ID8gaW5zdGFuY2UuZ2V0RmFjZXREYXRhUGFyYW1ldGVycygpIDogbnVsbDsKKyAgICAgICAgICAg
ICAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eERhdGEiXS5Db21wdXRlTm9ybWFscyhwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1hbHMsIHBhcmFt
cyk7CisgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLl9jcmVhdGlvbkRhdGFTdG9yYWdlICYm
IGluc3RhbmNlLl9jcmVhdGlvbkRhdGFTdG9yYWdlLmNsb3NlUGF0aCkgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgaW5kZXhGaXJzdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHZhciBpbmRl
eExhc3QgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHBhdGhB
cnJheS5sZW5ndGg7IHArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGaXJzdCA9
IGluc3RhbmNlLl9jcmVhdGlvbkRhdGFTdG9yYWdlLmlkeFtwXSAqIDM7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocCArIDEgPCBwYXRoQXJyYXkubGVuZ3RoKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhMYXN0ID0gKGluc3RhbmNlLl9jcmVhdGlvbkRhdGFTdG9yYWdl
LmlkeFtwICsgMV0gLSAxKSAqIDM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eExhc3QgPSBub3JtYWxzLmxlbmd0aCAtIDM7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzW2luZGV4Rmlyc3RdID0gKG5vcm1hbHNbaW5k
ZXhGaXJzdF0gKyBub3JtYWxzW2luZGV4TGFzdF0pICogMC41OworICAgICAgICAgICAgICAgICAg
ICAgICAgbm9ybWFsc1tpbmRleEZpcnN0ICsgMV0gPSAobm9ybWFsc1tpbmRleEZpcnN0ICsgMV0g
KyBub3JtYWxzW2luZGV4TGFzdCArIDFdKSAqIDAuNTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5vcm1hbHNbaW5kZXhGaXJzdCArIDJdID0gKG5vcm1hbHNbaW5kZXhGaXJzdCArIDJdICsgbm9y
bWFsc1tpbmRleExhc3QgKyAyXSkgKiAwLjU7CisgICAgICAgICAgICAgICAgICAgICAgICBub3Jt
YWxzW2luZGV4TGFzdF0gPSBub3JtYWxzW2luZGV4Rmlyc3RdOworICAgICAgICAgICAgICAgICAg
ICAgICAgbm9ybWFsc1tpbmRleExhc3QgKyAxXSA9IG5vcm1hbHNbaW5kZXhGaXJzdCArIDFdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1tpbmRleExhc3QgKyAyXSA9IG5vcm1hbHNb
aW5kZXhGaXJzdCArIDJdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICghKGluc3RhbmNlLmFyZU5vcm1hbHNGcm96ZW4pKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnVwZGF0ZVZlcnRpY2VzRGF0YShfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQsIG5v
cm1hbHMsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAv
LyBuZXcgcmliYm9uIGNyZWF0aW9uCisgICAgICAgICAgICB2YXIgcmliYm9uID0gbmV3IF9tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXShuYW1lLCBzY2VuZSk7CisgICAg
ICAgICAgICByaWJib24uX29yaWdpbmFsQnVpbGRlclNpZGVPcmllbnRhdGlvbiA9IHNpZGVPcmll
bnRhdGlvbjsKKyAgICAgICAgICAgIHJpYmJvbi5fY3JlYXRpb25EYXRhU3RvcmFnZSA9IG5ldyBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJfQ3JlYXRpb25EYXRhU3RvcmFnZSJd
KCk7CisgICAgICAgICAgICB2YXIgdmVydGV4RGF0YSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdLkNyZWF0ZVJpYmJvbihvcHRpb25z
KTsKKyAgICAgICAgICAgIGlmIChjbG9zZVBhdGgpIHsKKyAgICAgICAgICAgICAgICByaWJib24u
X2NyZWF0aW9uRGF0YVN0b3JhZ2UuaWR4ID0gdmVydGV4RGF0YS5faWR4OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmliYm9uLl9jcmVhdGlvbkRhdGFTdG9yYWdlLmNsb3NlUGF0aCA9IGNs
b3NlUGF0aDsKKyAgICAgICAgICAgIHJpYmJvbi5fY3JlYXRpb25EYXRhU3RvcmFnZS5jbG9zZUFy
cmF5ID0gY2xvc2VBcnJheTsKKyAgICAgICAgICAgIHZlcnRleERhdGEuYXBwbHlUb01lc2gocmli
Ym9uLCB1cGRhdGFibGUpOworICAgICAgICAgICAgcmV0dXJuIHJpYmJvbjsKKyAgICAgICAgfQor
ICAgIH07CisgICAgcmV0dXJuIFJpYmJvbkJ1aWxkZXI7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL01lc2hlcy9CdWlsZGVycy9zaGFwZUJ1aWxkZXIudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hlcy9C
dWlsZGVycy9zaGFwZUJ1aWxkZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2hhcGVCdWlsZGVyICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNoYXBlQnVpbGRlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gU2hhcGVCdWlsZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21h
dGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2ggKi8g
Ii4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmliYm9uQnVp
bGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9yaWJib25CdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9yaWJib25CdWlsZGVyLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfcGF0aF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMv
bWF0aC5wYXRoICovICIuL01hdGhzL21hdGgucGF0aC50cyIpOworCisKKworCitfbWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uRXh0cnVkZVNoYXBlID0gZnVuY3Rpb24g
KG5hbWUsIHNoYXBlLCBwYXRoLCBzY2FsZSwgcm90YXRpb24sIGNhcCwgc2NlbmUsIHVwZGF0YWJs
ZSwgc2lkZU9yaWVudGF0aW9uLCBpbnN0YW5jZSkgeworICAgIGlmIChzY2VuZSA9PT0gdm9pZCAw
KSB7IHNjZW5lID0gbnVsbDsgfQorICAgIHZhciBvcHRpb25zID0geworICAgICAgICBzaGFwZTog
c2hhcGUsCisgICAgICAgIHBhdGg6IHBhdGgsCisgICAgICAgIHNjYWxlOiBzY2FsZSwKKyAgICAg
ICAgcm90YXRpb246IHJvdGF0aW9uLAorICAgICAgICBjYXA6IChjYXAgPT09IDApID8gMCA6IGNh
cCB8fCBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uTk9fQ0FQLAor
ICAgICAgICBzaWRlT3JpZW50YXRpb246IHNpZGVPcmllbnRhdGlvbiwKKyAgICAgICAgaW5zdGFu
Y2U6IGluc3RhbmNlLAorICAgICAgICB1cGRhdGFibGU6IHVwZGF0YWJsZQorICAgIH07CisgICAg
cmV0dXJuIFNoYXBlQnVpbGRlci5FeHRydWRlU2hhcGUobmFtZSwgb3B0aW9ucywgc2NlbmUpOwor
fTsKK19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5FeHRydWRlU2hh
cGVDdXN0b20gPSBmdW5jdGlvbiAobmFtZSwgc2hhcGUsIHBhdGgsIHNjYWxlRnVuY3Rpb24sIHJv
dGF0aW9uRnVuY3Rpb24sIHJpYmJvbkNsb3NlQXJyYXksIHJpYmJvbkNsb3NlUGF0aCwgY2FwLCBz
Y2VuZSwgdXBkYXRhYmxlLCBzaWRlT3JpZW50YXRpb24sIGluc3RhbmNlKSB7CisgICAgdmFyIG9w
dGlvbnMgPSB7CisgICAgICAgIHNoYXBlOiBzaGFwZSwKKyAgICAgICAgcGF0aDogcGF0aCwKKyAg
ICAgICAgc2NhbGVGdW5jdGlvbjogc2NhbGVGdW5jdGlvbiwKKyAgICAgICAgcm90YXRpb25GdW5j
dGlvbjogcm90YXRpb25GdW5jdGlvbiwKKyAgICAgICAgcmliYm9uQ2xvc2VBcnJheTogcmliYm9u
Q2xvc2VBcnJheSwKKyAgICAgICAgcmliYm9uQ2xvc2VQYXRoOiByaWJib25DbG9zZVBhdGgsCisg
ICAgICAgIGNhcDogKGNhcCA9PT0gMCkgPyAwIDogY2FwIHx8IF9tZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIk1lc2giXS5OT19DQVAsCisgICAgICAgIHNpZGVPcmllbnRhdGlvbjog
c2lkZU9yaWVudGF0aW9uLAorICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsCisgICAgICAgIHVw
ZGF0YWJsZTogdXBkYXRhYmxlCisgICAgfTsKKyAgICByZXR1cm4gU2hhcGVCdWlsZGVyLkV4dHJ1
ZGVTaGFwZUN1c3RvbShuYW1lLCBvcHRpb25zLCBzY2VuZSk7Cit9OworLyoqCisgKiBDbGFzcyBj
b250YWluaW5nIHN0YXRpYyBmdW5jdGlvbnMgdG8gaGVscCBwcm9jZWR1cmFsbHkgYnVpbGQgbWVz
aGVzCisgKi8KK3ZhciBTaGFwZUJ1aWxkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgZnVuY3Rpb24gU2hhcGVCdWlsZGVyKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGFuIGV4dHJ1ZGVkIHNoYXBlIG1lc2guIFRoZSBleHRydXNpb24gaXMgYSBwYXJhbWV0
cmljIHNoYXBlLiBJdCBoYXMgbm8gcHJlZGVmaW5lZCBzaGFwZS4gSXRzIGZpbmFsIHNoYXBlIHdp
bGwgZGVwZW5kIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLgorICAgICAqICogVGhlIHBhcmFtZXRl
ciBgc2hhcGVgIGlzIGEgcmVxdWlyZWQgYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzLiBUaGlz
IGFycmF5IGRlcGljdHMgdGhlIHNoYXBlIHRvIGJlIGV4dHJ1ZGVkIGluIGl0cyBsb2NhbCBzcGFj
ZSA6IHRoZSBzaGFwZSBtdXN0IGJlIGRlc2lnbmVkIGluIHRoZSB4T3kgcGxhbmUgYW5kIHdpbGwg
YmUgZXh0cnVkZWQgYWxvbmcgdGhlIFogYXhpcy4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHBh
dGhgIGlzIGEgcmVxdWlyZWQgYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzLiBUaGlzIGlzIHRo
ZSBheGlzIGN1cnZlIHRoZSBzaGFwZSBpcyBleHRydWRlZCBhbG9uZy4KKyAgICAgKiAqIFRoZSBw
YXJhbWV0ZXIgYHJvdGF0aW9uYCAoZmxvYXQsIGRlZmF1bHQgMCByYWRpYW5zKSBpcyB0aGUgYW5n
bGUgdmFsdWUgdG8gcm90YXRlIHRoZSBzaGFwZSBlYWNoIHN0ZXAgKGVhY2ggcGF0aCBwb2ludCks
IGZyb20gdGhlIGZvcm1lciBzdGVwIChzbyByb3RhdGlvbiBhZGRlZCBlYWNoIHN0ZXApIGFsb25n
IHRoZSBjdXJ2ZS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHNjYWxlYCAoZmxvYXQsIGRlZmF1
bHQgMSkgaXMgdGhlIHZhbHVlIHRvIHNjYWxlIHRoZSBzaGFwZS4KKyAgICAgKiAqIFRoZSBwYXJh
bWV0ZXIgYGNhcGAgc2V0cyB0aGUgd2F5IHRoZSBleHRydWRlZCBzaGFwZSBpcyBjYXBwZWQuIFBv
c3NpYmxlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5OT19DQVAgKGRlZmF1bHQpLCBCQUJZTE9OLk1l
c2guQ0FQX1NUQVJULCBCQUJZTE9OLk1lc2guQ0FQX0VORCwgQkFCWUxPTi5NZXNoLkNBUF9BTEwK
KyAgICAgKiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYGluc3RhbmNlYCBpcyBhbiBpbnN0YW5j
ZSBvZiBhbiBleGlzdGluZyBFeHRydWRlZFNoYXBlIG9iamVjdCB0byBiZSB1cGRhdGVkIHdpdGgg
dGhlIHBhc3NlZCBgc2hhcGVgLCBgcGF0aGAsIGBzY2FsZWAgb3IgYHJvdGF0aW9uYCBwYXJhbWV0
ZXJzIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX2R5bmFtaWNhbGx5
X21vcnBoX2FfbWVzaCNleHRydWRlZC1zaGFwZQorICAgICAqICogUmVtZW1iZXIgeW91IGNhbiBv
bmx5IGNoYW5nZSB0aGUgc2hhcGUgb3IgcGF0aCBwb2ludCBwb3NpdGlvbnMsIG5vdCB0aGVpciBu
dW1iZXIgd2hlbiB1cGRhdGluZyBhbiBleHRydWRlZCBzaGFwZS4KKyAgICAgKiAqIFlvdSBjYW4g
YWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZ
TE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJB
QllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNp
ZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2Ug
dG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sg
c2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3Rv
cjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9k
aXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUgb3B0
aW9uYWwgcGFyYW1ldGVyIGBpbnZlcnRVVmAgKGJvb2xlYW4sIGRlZmF1bHQgZmFsc2UpIHN3YXBz
IGluIHRoZSBnZW9tZXRyeSB0aGUgVSBhbmQgViBjb29yZGluYXRlcyB0byBhcHBseSBhIHRleHR1
cmUuCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBi
b29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVy
bmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQuCisgICAgICog
QHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBv
cHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAg
KiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5z
IHRoZSBleHRydWRlZCBzaGFwZSBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9wYXJhbWV0cmljX3NoYXBlcworICAgICAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjZXh0cnVkZWQtc2hhcGVzCisg
ICAgICovCisgICAgU2hhcGVCdWlsZGVyLkV4dHJ1ZGVTaGFwZSA9IGZ1bmN0aW9uIChuYW1lLCBv
cHRpb25zLCBzY2VuZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9
IG51bGw7IH0KKyAgICAgICAgdmFyIHBhdGggPSBvcHRpb25zLnBhdGg7CisgICAgICAgIHZhciBz
aGFwZSA9IG9wdGlvbnMuc2hhcGU7CisgICAgICAgIHZhciBzY2FsZSA9IG9wdGlvbnMuc2NhbGUg
fHwgMTsKKyAgICAgICAgdmFyIHJvdGF0aW9uID0gb3B0aW9ucy5yb3RhdGlvbiB8fCAwOworICAg
ICAgICB2YXIgY2FwID0gKG9wdGlvbnMuY2FwID09PSAwKSA/IDAgOiBvcHRpb25zLmNhcCB8fCBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uTk9fQ0FQOworICAgICAg
ICB2YXIgdXBkYXRhYmxlID0gb3B0aW9ucy51cGRhdGFibGU7CisgICAgICAgIHZhciBzaWRlT3Jp
ZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uX0dl
dERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24pOworICAgICAg
ICB2YXIgaW5zdGFuY2UgPSBvcHRpb25zLmluc3RhbmNlIHx8IG51bGw7CisgICAgICAgIHZhciBp
bnZlcnRVViA9IG9wdGlvbnMuaW52ZXJ0VVYgfHwgZmFsc2U7CisgICAgICAgIHJldHVybiBTaGFw
ZUJ1aWxkZXIuX0V4dHJ1ZGVTaGFwZUdlbmVyaWMobmFtZSwgc2hhcGUsIHBhdGgsIHNjYWxlLCBy
b3RhdGlvbiwgbnVsbCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBjYXAsIGZhbHNlLCBzY2VuZSwgdXBk
YXRhYmxlID8gdHJ1ZSA6IGZhbHNlLCBzaWRlT3JpZW50YXRpb24sIGluc3RhbmNlLCBpbnZlcnRV
Viwgb3B0aW9ucy5mcm9udFVWcyB8fCBudWxsLCBvcHRpb25zLmJhY2tVVnMgfHwgbnVsbCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIGN1c3RvbSBleHRydWRlZCBzaGFwZSBt
ZXNoLgorICAgICAqIFRoZSBjdXN0b20gZXh0cnVzaW9uIGlzIGEgcGFyYW1ldHJpYyBzaGFwZS4g
SXQgaGFzIG5vIHByZWRlZmluZWQgc2hhcGUuIEl0cyBmaW5hbCBzaGFwZSB3aWxsIGRlcGVuZCBv
biB0aGUgaW5wdXQgcGFyYW1ldGVycy4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHNoYXBlYCBp
cyBhIHJlcXVpcmVkIGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMy4gVGhpcyBhcnJheSBkZXBp
Y3RzIHRoZSBzaGFwZSB0byBiZSBleHRydWRlZCBpbiBpdHMgbG9jYWwgc3BhY2UgOiB0aGUgc2hh
cGUgbXVzdCBiZSBkZXNpZ25lZCBpbiB0aGUgeE95IHBsYW5lIGFuZCB3aWxsIGJlIGV4dHJ1ZGVk
IGFsb25nIHRoZSBaIGF4aXMuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBwYXRoYCBpcyBhIHJl
cXVpcmVkIGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMy4gVGhpcyBpcyB0aGUgYXhpcyBjdXJ2
ZSB0aGUgc2hhcGUgaXMgZXh0cnVkZWQgYWxvbmcuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBy
b3RhdGlvbkZ1bmN0aW9uYCAoSlMgZnVuY3Rpb24pIGlzIGEgY3VzdG9tIEphdmFzY3JpcHQgZnVu
Y3Rpb24gY2FsbGVkIG9uIGVhY2ggcGF0aCBwb2ludC4gVGhpcyBmdW5jdGlvbiBpcyBwYXNzZWQg
dGhlIHBvc2l0aW9uIGkgb2YgdGhlIHBvaW50IGluIHRoZSBwYXRoIGFuZCB0aGUgZGlzdGFuY2Ug
b2YgdGhpcyBwb2ludCBmcm9tIHRoZSBiZWdpbmluZyBvZiB0aGUgcGF0aAorICAgICAqICogSXQg
bXVzdCByZXR1cm5zIGEgZmxvYXQgdmFsdWUgdGhhdCB3aWxsIGJlIHRoZSByb3RhdGlvbiBpbiBy
YWRpYW5zIGFwcGxpZWQgdG8gdGhlIHNoYXBlIG9uIGVhY2ggcGF0aCBwb2ludC4KKyAgICAgKiAq
IFRoZSBwYXJhbWV0ZXIgYHNjYWxlRnVuY3Rpb25gIChKUyBmdW5jdGlvbikgaXMgYSBjdXN0b20g
SmF2YXNjcmlwdCBmdW5jdGlvbiBjYWxsZWQgb24gZWFjaCBwYXRoIHBvaW50LiBUaGlzIGZ1bmN0
aW9uIGlzIHBhc3NlZCB0aGUgcG9zaXRpb24gaSBvZiB0aGUgcG9pbnQgaW4gdGhlIHBhdGggYW5k
IHRoZSBkaXN0YW5jZSBvZiB0aGlzIHBvaW50IGZyb20gdGhlIGJlZ2luaW5nIG9mIHRoZSBwYXRo
CisgICAgICogKiBJdCBtdXN0IHJldHVybnMgYSBmbG9hdCB2YWx1ZSB0aGF0IHdpbGwgYmUgdGhl
IHNjYWxlIHZhbHVlIGFwcGxpZWQgdG8gdGhlIHNoYXBlIG9uIGVhY2ggcGF0aCBwb2ludAorICAg
ICAqICogVGhlIHBhcmFtZXRlciBgcmliYm9uQ2xvc2VQYXRoYCAoYm9vbGVhbiwgZGVmYXVsdCBm
YWxzZSkgZm9yY2VzIHRoZSBleHRydXNpb24gdW5kZXJseWluZyByaWJib24gdG8gY2xvc2UgYWxs
IHRoZSBwYXRocyBpbiBpdHMgYHBhdGhBcnJheWAKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHJp
YmJvbkNsb3NlQXJyYXlgIChib29sZWFuLCBkZWZhdWx0IGZhbHNlKSBmb3JjZXMgdGhlIGV4dHJ1
c2lvbiB1bmRlcmx5aW5nIHJpYmJvbiB0byBjbG9zZSBpdHMgYHBhdGhBcnJheWAKKyAgICAgKiAq
IFRoZSBwYXJhbWV0ZXIgYGNhcGAgc2V0cyB0aGUgd2F5IHRoZSBleHRydWRlZCBzaGFwZSBpcyBj
YXBwZWQuIFBvc3NpYmxlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5OT19DQVAgKGRlZmF1bHQpLCBC
QUJZTE9OLk1lc2guQ0FQX1NUQVJULCBCQUJZTE9OLk1lc2guQ0FQX0VORCwgQkFCWUxPTi5NZXNo
LkNBUF9BTEwKKyAgICAgKiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYGluc3RhbmNlYCBpcyBh
biBpbnN0YW5jZSBvZiBhbiBleGlzdGluZyBFeHRydWRlZFNoYXBlIG9iamVjdCB0byBiZSB1cGRh
dGVkIHdpdGggdGhlIHBhc3NlZCBgc2hhcGVgLCBgcGF0aGAsIGBzY2FsZWAgb3IgYHJvdGF0aW9u
YCBwYXJhbWV0ZXJzIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX2R5
bmFtaWNhbGx5X21vcnBoX2FfbWVzaCNleHRydWRlZC1zaGFwZQorICAgICAqICogUmVtZW1iZXIg
eW91IGNhbiBvbmx5IGNoYW5nZSB0aGUgc2hhcGUgb3IgcGF0aCBwb2ludCBwb3NpdGlvbnMsIG5v
dCB0aGVpciBudW1iZXIgd2hlbiB1cGRhdGluZyBhbiBleHRydWRlZCBzaGFwZQorICAgICAqICog
WW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9uIHdpdGggdGhlIHZhbHVl
cyA6IEJBQllMT04uTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBCQUJZTE9OLk1lc2guQkFDS1NJ
REUgb3IgQkFCWUxPTi5NZXNoLkRPVUJMRVNJREUKKyAgICAgKiAqIElmIHlvdSBjcmVhdGUgYSBk
b3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVy
ZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZlbHkgb24gdGhlIGZyb250IGFuZCB0
aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBmcm9udFVWc2AgYW5kIGBiYWNrVVZz
YCAoVmVjdG9yNCkuIERldGFpbCBoZXJlIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5
bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50YXRpb24KKyAgICAgKiAq
IFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYGludmVydFVWYCAoYm9vbGVhbiwgZGVmYXVsdCBmYWxz
ZSkgc3dhcHMgaW4gdGhlIGdlb21ldHJ5IHRoZSBVIGFuZCBWIGNvb3JkaW5hdGVzIHRvIGFwcGx5
IGEgdGV4dHVyZQorICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0
aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0
cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkCisg
ICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBw
YXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gK
KyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBy
ZXR1cm5zIHRoZSBjdXN0b20gZXh0cnVkZWQgc2hhcGUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6
Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjY3VzdG9tLWV4dHJ1
ZGVkLXNoYXBlcworICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
cGFyYW1ldHJpY19zaGFwZXMKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL3BhcmFtZXRyaWNfc2hhcGVzI2V4dHJ1ZGVkLXNoYXBlcworICAgICAqLworICAgIFNo
YXBlQnVpbGRlci5FeHRydWRlU2hhcGVDdXN0b20gPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywg
c2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9
CisgICAgICAgIHZhciBwYXRoID0gb3B0aW9ucy5wYXRoOworICAgICAgICB2YXIgc2hhcGUgPSBv
cHRpb25zLnNoYXBlOworICAgICAgICB2YXIgc2NhbGVGdW5jdGlvbiA9IG9wdGlvbnMuc2NhbGVG
dW5jdGlvbiB8fCAoZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSk7CisgICAgICAgIHZhciByb3Rh
dGlvbkZ1bmN0aW9uID0gb3B0aW9ucy5yb3RhdGlvbkZ1bmN0aW9uIHx8IChmdW5jdGlvbiAoKSB7
IHJldHVybiAwOyB9KTsKKyAgICAgICAgdmFyIHJpYmJvbkNsb3NlQXJyYXkgPSBvcHRpb25zLnJp
YmJvbkNsb3NlQXJyYXkgfHwgZmFsc2U7CisgICAgICAgIHZhciByaWJib25DbG9zZVBhdGggPSBv
cHRpb25zLnJpYmJvbkNsb3NlUGF0aCB8fCBmYWxzZTsKKyAgICAgICAgdmFyIGNhcCA9IChvcHRp
b25zLmNhcCA9PT0gMCkgPyAwIDogb3B0aW9ucy5jYXAgfHwgX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siTWVzaCJdLk5PX0NBUDsKKyAgICAgICAgdmFyIHVwZGF0YWJsZSA9IG9w
dGlvbnMudXBkYXRhYmxlOworICAgICAgICB2YXIgc2lkZU9yaWVudGF0aW9uID0gX21lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLl9HZXREZWZhdWx0U2lkZU9yaWVudGF0
aW9uKG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uKTsKKyAgICAgICAgdmFyIGluc3RhbmNlID0gb3B0
aW9ucy5pbnN0YW5jZTsKKyAgICAgICAgdmFyIGludmVydFVWID0gb3B0aW9ucy5pbnZlcnRVViB8
fCBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFNoYXBlQnVpbGRlci5fRXh0cnVkZVNoYXBlR2VuZXJp
YyhuYW1lLCBzaGFwZSwgcGF0aCwgbnVsbCwgbnVsbCwgc2NhbGVGdW5jdGlvbiwgcm90YXRpb25G
dW5jdGlvbiwgcmliYm9uQ2xvc2VBcnJheSwgcmliYm9uQ2xvc2VQYXRoLCBjYXAsIHRydWUsIHNj
ZW5lLCB1cGRhdGFibGUgPyB0cnVlIDogZmFsc2UsIHNpZGVPcmllbnRhdGlvbiwgaW5zdGFuY2Ug
fHwgbnVsbCwgaW52ZXJ0VVYsIG9wdGlvbnMuZnJvbnRVVnMgfHwgbnVsbCwgb3B0aW9ucy5iYWNr
VVZzIHx8IG51bGwpOworICAgIH07CisgICAgU2hhcGVCdWlsZGVyLl9FeHRydWRlU2hhcGVHZW5l
cmljID0gZnVuY3Rpb24gKG5hbWUsIHNoYXBlLCBjdXJ2ZSwgc2NhbGUsIHJvdGF0aW9uLCBzY2Fs
ZUZ1bmN0aW9uLCByb3RhdGVGdW5jdGlvbiwgcmJDQSwgcmJDUCwgY2FwLCBjdXN0b20sIHNjZW5l
LCB1cGR0YmwsIHNpZGUsIGluc3RhbmNlLCBpbnZlcnRVViwgZnJvbnRVVnMsIGJhY2tVVnMpIHsK
KyAgICAgICAgLy8gZXh0cnVzaW9uIGdlb21ldHJ5CisgICAgICAgIHZhciBleHRydXNpb25QYXRo
QXJyYXkgPSBmdW5jdGlvbiAoc2hhcGUsIGN1cnZlLCBwYXRoM0QsIHNoYXBlUGF0aHMsIHNjYWxl
LCByb3RhdGlvbiwgc2NhbGVGdW5jdGlvbiwgcm90YXRlRnVuY3Rpb24sIGNhcCwgY3VzdG9tKSB7
CisgICAgICAgICAgICB2YXIgdGFuZ2VudHMgPSBwYXRoM0QuZ2V0VGFuZ2VudHMoKTsKKyAgICAg
ICAgICAgIHZhciBub3JtYWxzID0gcGF0aDNELmdldE5vcm1hbHMoKTsKKyAgICAgICAgICAgIHZh
ciBiaW5vcm1hbHMgPSBwYXRoM0QuZ2V0Qmlub3JtYWxzKCk7CisgICAgICAgICAgICB2YXIgZGlz
dGFuY2VzID0gcGF0aDNELmdldERpc3RhbmNlcygpOworICAgICAgICAgICAgdmFyIGFuZ2xlID0g
MDsKKyAgICAgICAgICAgIHZhciByZXR1cm5TY2FsZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNj
YWxlICE9PSBudWxsID8gc2NhbGUgOiAxOyB9OworICAgICAgICAgICAgdmFyIHJldHVyblJvdGF0
aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcm90YXRpb24gIT09IG51bGwgPyByb3RhdGlvbiA6
IDA7IH07CisgICAgICAgICAgICB2YXIgcm90YXRlID0gY3VzdG9tICYmIHJvdGF0ZUZ1bmN0aW9u
ID8gcm90YXRlRnVuY3Rpb24gOiByZXR1cm5Sb3RhdGlvbjsKKyAgICAgICAgICAgIHZhciBzY2wg
PSBjdXN0b20gJiYgc2NhbGVGdW5jdGlvbiA/IHNjYWxlRnVuY3Rpb24gOiByZXR1cm5TY2FsZTsK
KyAgICAgICAgICAgIHZhciBpbmRleCA9IChjYXAgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIk1lc2giXS5OT19DQVAgfHwgY2FwID09PSBfbWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uQ0FQX0VORCkgPyAwIDogMjsKKyAgICAgICAgICAgIHZh
ciByb3RhdGlvbk1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdOworICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjdXJ2ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBzaGFw
ZVBhdGggPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAgICAgICB2YXIgYW5nbGVTdGVwID0gcm90
YXRlKGksIGRpc3RhbmNlc1tpXSk7CisgICAgICAgICAgICAgICAgdmFyIHNjYWxlUmF0aW8gPSBz
Y2woaSwgZGlzdGFuY2VzW2ldKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8
IHNoYXBlLmxlbmd0aDsgcCsrKSB7CisgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5Sb3RhdGlvbkF4aXNU
b1JlZih0YW5nZW50c1tpXSwgYW5nbGUsIHJvdGF0aW9uTWF0cml4KTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHBsYW5lZCA9ICgodGFuZ2VudHNbaV0uc2NhbGUoc2hhcGVbcF0ueikpLmFkZChu
b3JtYWxzW2ldLnNjYWxlKHNoYXBlW3BdLngpKS5hZGQoYmlub3JtYWxzW2ldLnNjYWxlKHNoYXBl
W3BdLnkpKSk7CisgICAgICAgICAgICAgICAgICAgIHZhciByb3RhdGVkID0gc2hhcGVQYXRoW3Bd
ID8gc2hhcGVQYXRoW3BdIDogX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICAgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNm
b3JtQ29vcmRpbmF0ZXNUb1JlZihwbGFuZWQsIHJvdGF0aW9uTWF0cml4LCByb3RhdGVkKTsKKyAg
ICAgICAgICAgICAgICAgICAgcm90YXRlZC5zY2FsZUluUGxhY2Uoc2NhbGVSYXRpbykuYWRkSW5Q
bGFjZShjdXJ2ZVtpXSk7CisgICAgICAgICAgICAgICAgICAgIHNoYXBlUGF0aFtwXSA9IHJvdGF0
ZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNoYXBlUGF0aHNbaW5kZXhd
ID0gc2hhcGVQYXRoOworICAgICAgICAgICAgICAgIGFuZ2xlICs9IGFuZ2xlU3RlcDsKKyAgICAg
ICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gY2FwCisg
ICAgICAgICAgICB2YXIgY2FwUGF0aCA9IGZ1bmN0aW9uIChzaGFwZVBhdGgpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgcG9pbnRDYXAgPSBBcnJheSgpOworICAgICAgICAgICAgICAgIHZhciBiYXJ5
Y2VudGVyID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICAgICAgdmFyIGk7CisgICAgICAgICAgICAg
ICAgZm9yIChpID0gMDsgaSA8IHNoYXBlUGF0aC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBiYXJ5Y2VudGVyLmFkZEluUGxhY2Uoc2hhcGVQYXRoW2ldKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYmFyeWNlbnRlci5zY2FsZUluUGxhY2UoMS4wIC8gc2hh
cGVQYXRoLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNoYXBlUGF0
aC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBwb2ludENhcC5wdXNoKGJhcnlj
ZW50ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnRD
YXA7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgc3dpdGNoIChjYXApIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5O
T19DQVA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNBUF9TVEFSVDoKKyAg
ICAgICAgICAgICAgICAgICAgc2hhcGVQYXRoc1swXSA9IGNhcFBhdGgoc2hhcGVQYXRoc1syXSk7
CisgICAgICAgICAgICAgICAgICAgIHNoYXBlUGF0aHNbMV0gPSBzaGFwZVBhdGhzWzJdOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIF9tZXNoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfRU5EOgorICAgICAgICAgICAgICAg
ICAgICBzaGFwZVBhdGhzW2luZGV4XSA9IHNoYXBlUGF0aHNbaW5kZXggLSAxXTsKKyAgICAgICAg
ICAgICAgICAgICAgc2hhcGVQYXRoc1tpbmRleCArIDFdID0gY2FwUGF0aChzaGFwZVBhdGhzW2lu
ZGV4IC0gMV0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfQUxMOgor
ICAgICAgICAgICAgICAgICAgICBzaGFwZVBhdGhzWzBdID0gY2FwUGF0aChzaGFwZVBhdGhzWzJd
KTsKKyAgICAgICAgICAgICAgICAgICAgc2hhcGVQYXRoc1sxXSA9IHNoYXBlUGF0aHNbMl07Cisg
ICAgICAgICAgICAgICAgICAgIHNoYXBlUGF0aHNbaW5kZXhdID0gc2hhcGVQYXRoc1tpbmRleCAt
IDFdOworICAgICAgICAgICAgICAgICAgICBzaGFwZVBhdGhzW2luZGV4ICsgMV0gPSBjYXBQYXRo
KHNoYXBlUGF0aHNbaW5kZXggLSAxXSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNoYXBlUGF0aHM7CisgICAgICAgIH07CisgICAg
ICAgIHZhciBwYXRoM0Q7CisgICAgICAgIHZhciBwYXRoQXJyYXk7CisgICAgICAgIGlmIChpbnN0
YW5jZSkgeyAvLyBpbnN0YW5jZSB1cGRhdGUKKyAgICAgICAgICAgIHZhciBzdG9yYWdlID0gaW5z
dGFuY2UuX2NyZWF0aW9uRGF0YVN0b3JhZ2U7CisgICAgICAgICAgICBwYXRoM0QgPSBzdG9yYWdl
LnBhdGgzRC51cGRhdGUoY3VydmUpOworICAgICAgICAgICAgcGF0aEFycmF5ID0gZXh0cnVzaW9u
UGF0aEFycmF5KHNoYXBlLCBjdXJ2ZSwgc3RvcmFnZS5wYXRoM0QsIHN0b3JhZ2UucGF0aEFycmF5
LCBzY2FsZSwgcm90YXRpb24sIHNjYWxlRnVuY3Rpb24sIHJvdGF0ZUZ1bmN0aW9uLCBzdG9yYWdl
LmNhcCwgY3VzdG9tKTsKKyAgICAgICAgICAgIGluc3RhbmNlID0gX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZVJpYmJvbigiIiwgcGF0aEFycmF5LCBmYWxz
ZSwgZmFsc2UsIDAsIHNjZW5lIHx8IHVuZGVmaW5lZCwgZmFsc2UsIDAsIGluc3RhbmNlKTsKKyAg
ICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICAgICAgfQorICAgICAgICAvLyBleHRydWRl
ZCBzaGFwZSBjcmVhdGlvbgorICAgICAgICBwYXRoM0QgPSBuZXcgX01hdGhzX21hdGhfcGF0aF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQYXRoM0QiXShjdXJ2ZSk7CisgICAgICAgIHZh
ciBuZXdTaGFwZVBhdGhzID0gbmV3IEFycmF5KCk7CisgICAgICAgIGNhcCA9IChjYXAgPCAwIHx8
IGNhcCA+IDMpID8gMCA6IGNhcDsKKyAgICAgICAgcGF0aEFycmF5ID0gZXh0cnVzaW9uUGF0aEFy
cmF5KHNoYXBlLCBjdXJ2ZSwgcGF0aDNELCBuZXdTaGFwZVBhdGhzLCBzY2FsZSwgcm90YXRpb24s
IHNjYWxlRnVuY3Rpb24sIHJvdGF0ZUZ1bmN0aW9uLCBjYXAsIGN1c3RvbSk7CisgICAgICAgIHZh
ciBleHRydWRlZEdlbmVyaWMgPSBfcmliYm9uQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJSaWJib25CdWlsZGVyIl0uQ3JlYXRlUmliYm9uKG5hbWUsIHsgcGF0aEFycmF5OiBw
YXRoQXJyYXksIGNsb3NlQXJyYXk6IHJiQ0EsIGNsb3NlUGF0aDogcmJDUCwgdXBkYXRhYmxlOiB1
cGR0YmwsIHNpZGVPcmllbnRhdGlvbjogc2lkZSwgaW52ZXJ0VVY6IGludmVydFVWLCBmcm9udFVW
czogZnJvbnRVVnMgfHwgdW5kZWZpbmVkLCBiYWNrVVZzOiBiYWNrVVZzIHx8IHVuZGVmaW5lZCB9
LCBzY2VuZSk7CisgICAgICAgIGV4dHJ1ZGVkR2VuZXJpYy5fY3JlYXRpb25EYXRhU3RvcmFnZS5w
YXRoQXJyYXkgPSBwYXRoQXJyYXk7CisgICAgICAgIGV4dHJ1ZGVkR2VuZXJpYy5fY3JlYXRpb25E
YXRhU3RvcmFnZS5wYXRoM0QgPSBwYXRoM0Q7CisgICAgICAgIGV4dHJ1ZGVkR2VuZXJpYy5fY3Jl
YXRpb25EYXRhU3RvcmFnZS5jYXAgPSBjYXA7CisgICAgICAgIHJldHVybiBleHRydWRlZEdlbmVy
aWM7CisgICAgfTsKKyAgICByZXR1cm4gU2hhcGVCdWlsZGVyOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlci50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01l
c2hlcy9CdWlsZGVycy9zcGhlcmVCdWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTcGhlcmVC
dWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNwaGVyZUJ1aWxk
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNwaGVyZUJ1aWxkZXI7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8g
Ii4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL21lc2gudmVydGV4RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0
ZXhEYXRhLnRzIik7CisKKworCitfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlcnRleERhdGEiXS5DcmVhdGVTcGhlcmUgPSBmdW5jdGlvbiAob3B0aW9ucykg
eworICAgIHZhciBzZWdtZW50cyA9IG9wdGlvbnMuc2VnbWVudHMgfHwgMzI7CisgICAgdmFyIGRp
YW1ldGVyWCA9IG9wdGlvbnMuZGlhbWV0ZXJYIHx8IG9wdGlvbnMuZGlhbWV0ZXIgfHwgMTsKKyAg
ICB2YXIgZGlhbWV0ZXJZID0gb3B0aW9ucy5kaWFtZXRlclkgfHwgb3B0aW9ucy5kaWFtZXRlciB8
fCAxOworICAgIHZhciBkaWFtZXRlclogPSBvcHRpb25zLmRpYW1ldGVyWiB8fCBvcHRpb25zLmRp
YW1ldGVyIHx8IDE7CisgICAgdmFyIGFyYyA9IG9wdGlvbnMuYXJjICYmIChvcHRpb25zLmFyYyA8
PSAwIHx8IG9wdGlvbnMuYXJjID4gMSkgPyAxLjAgOiBvcHRpb25zLmFyYyB8fCAxLjA7CisgICAg
dmFyIHNsaWNlID0gb3B0aW9ucy5zbGljZSAmJiAob3B0aW9ucy5zbGljZSA8PSAwKSA/IDEuMCA6
IG9wdGlvbnMuc2xpY2UgfHwgMS4wOworICAgIHZhciBzaWRlT3JpZW50YXRpb24gPSAob3B0aW9u
cy5zaWRlT3JpZW50YXRpb24gPT09IDApID8gMCA6IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uIHx8
IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4RGF0
YSJdLkRFRkFVTFRTSURFOworICAgIHZhciByYWRpdXMgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShkaWFtZXRlclggLyAyLCBk
aWFtZXRlclkgLyAyLCBkaWFtZXRlclogLyAyKTsKKyAgICB2YXIgdG90YWxaUm90YXRpb25TdGVw
cyA9IDIgKyBzZWdtZW50czsKKyAgICB2YXIgdG90YWxZUm90YXRpb25TdGVwcyA9IDIgKiB0b3Rh
bFpSb3RhdGlvblN0ZXBzOworICAgIHZhciBpbmRpY2VzID0gW107CisgICAgdmFyIHBvc2l0aW9u
cyA9IFtdOworICAgIHZhciBub3JtYWxzID0gW107CisgICAgdmFyIHV2cyA9IFtdOworICAgIGZv
ciAodmFyIHpSb3RhdGlvblN0ZXAgPSAwOyB6Um90YXRpb25TdGVwIDw9IHRvdGFsWlJvdGF0aW9u
U3RlcHM7IHpSb3RhdGlvblN0ZXArKykgeworICAgICAgICB2YXIgbm9ybWFsaXplZFogPSB6Um90
YXRpb25TdGVwIC8gdG90YWxaUm90YXRpb25TdGVwczsKKyAgICAgICAgdmFyIGFuZ2xlWiA9IG5v
cm1hbGl6ZWRaICogTWF0aC5QSSAqIHNsaWNlOworICAgICAgICBmb3IgKHZhciB5Um90YXRpb25T
dGVwID0gMDsgeVJvdGF0aW9uU3RlcCA8PSB0b3RhbFlSb3RhdGlvblN0ZXBzOyB5Um90YXRpb25T
dGVwKyspIHsKKyAgICAgICAgICAgIHZhciBub3JtYWxpemVkWSA9IHlSb3RhdGlvblN0ZXAgLyB0
b3RhbFlSb3RhdGlvblN0ZXBzOworICAgICAgICAgICAgdmFyIGFuZ2xlWSA9IG5vcm1hbGl6ZWRZ
ICogTWF0aC5QSSAqIDIgKiBhcmM7CisgICAgICAgICAgICB2YXIgcm90YXRpb25aID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlJvdGF0
aW9uWigtYW5nbGVaKTsKKyAgICAgICAgICAgIHZhciByb3RhdGlvblkgPSBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWF0cml4Il0uUm90YXRpb25ZKGFu
Z2xlWSk7CisgICAgICAgICAgICB2YXIgYWZ0ZXJSb3RaID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRl
cyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdLlVwKCksIHJvdGF0aW9uWik7CisgICAgICAgICAgICB2YXIgY29tcGxldGUgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5z
Zm9ybUNvb3JkaW5hdGVzKGFmdGVyUm90Wiwgcm90YXRpb25ZKTsKKyAgICAgICAgICAgIHZhciB2
ZXJ0ZXggPSBjb21wbGV0ZS5tdWx0aXBseShyYWRpdXMpOworICAgICAgICAgICAgdmFyIG5vcm1h
bCA9IGNvbXBsZXRlLmRpdmlkZShyYWRpdXMpLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgcG9z
aXRpb25zLnB1c2godmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueik7CisgICAgICAgICAgICBu
b3JtYWxzLnB1c2gobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7CisgICAgICAgICAgICB1
dnMucHVzaChub3JtYWxpemVkWSwgbm9ybWFsaXplZFopOworICAgICAgICB9CisgICAgICAgIGlm
ICh6Um90YXRpb25TdGVwID4gMCkgeworICAgICAgICAgICAgdmFyIHZlcnRpY2VzQ291bnQgPSBw
b3NpdGlvbnMubGVuZ3RoIC8gMzsKKyAgICAgICAgICAgIGZvciAodmFyIGZpcnN0SW5kZXggPSB2
ZXJ0aWNlc0NvdW50IC0gMiAqICh0b3RhbFlSb3RhdGlvblN0ZXBzICsgMSk7IChmaXJzdEluZGV4
ICsgdG90YWxZUm90YXRpb25TdGVwcyArIDIpIDwgdmVydGljZXNDb3VudDsgZmlyc3RJbmRleCsr
KSB7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKChmaXJzdEluZGV4KSk7CisgICAgICAg
ICAgICAgICAgaW5kaWNlcy5wdXNoKChmaXJzdEluZGV4ICsgMSkpOworICAgICAgICAgICAgICAg
IGluZGljZXMucHVzaChmaXJzdEluZGV4ICsgdG90YWxZUm90YXRpb25TdGVwcyArIDEpOworICAg
ICAgICAgICAgICAgIGluZGljZXMucHVzaCgoZmlyc3RJbmRleCArIHRvdGFsWVJvdGF0aW9uU3Rl
cHMgKyAxKSk7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKChmaXJzdEluZGV4ICsgMSkp
OworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCgoZmlyc3RJbmRleCArIHRvdGFsWVJvdGF0
aW9uU3RlcHMgKyAyKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy8g
U2lkZXMKKyAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlcnRleERhdGEiXS5fQ29tcHV0ZVNpZGVzKHNpZGVPcmllbnRhdGlvbiwgcG9zaXRpb25zLCBp
bmRpY2VzLCBub3JtYWxzLCB1dnMsIG9wdGlvbnMuZnJvbnRVVnMsIG9wdGlvbnMuYmFja1VWcyk7
CisgICAgLy8gUmVzdWx0CisgICAgdmFyIHZlcnRleERhdGEgPSBuZXcgX21lc2hfdmVydGV4RGF0
YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAgICB2ZXJ0
ZXhEYXRhLmluZGljZXMgPSBpbmRpY2VzOworICAgIHZlcnRleERhdGEucG9zaXRpb25zID0gcG9z
aXRpb25zOworICAgIHZlcnRleERhdGEubm9ybWFscyA9IG5vcm1hbHM7CisgICAgdmVydGV4RGF0
YS51dnMgPSB1dnM7CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZVNwaGVyZSA9IGZ1bmN0aW9uIChuYW1l
LCBzZWdtZW50cywgZGlhbWV0ZXIsIHNjZW5lLCB1cGRhdGFibGUsIHNpZGVPcmllbnRhdGlvbikg
eworICAgIHZhciBvcHRpb25zID0geworICAgICAgICBzZWdtZW50czogc2VnbWVudHMsCisgICAg
ICAgIGRpYW1ldGVyWDogZGlhbWV0ZXIsCisgICAgICAgIGRpYW1ldGVyWTogZGlhbWV0ZXIsCisg
ICAgICAgIGRpYW1ldGVyWjogZGlhbWV0ZXIsCisgICAgICAgIHNpZGVPcmllbnRhdGlvbjogc2lk
ZU9yaWVudGF0aW9uLAorICAgICAgICB1cGRhdGFibGU6IHVwZGF0YWJsZQorICAgIH07CisgICAg
cmV0dXJuIFNwaGVyZUJ1aWxkZXIuQ3JlYXRlU3BoZXJlKG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsK
K307CisvKioKKyAqIENsYXNzIGNvbnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHBy
b2NlZHVyYWxseSBidWlsZCBtZXNoZXMKKyAqLwordmFyIFNwaGVyZUJ1aWxkZXIgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gU3BoZXJlQnVpbGRlcigpIHsKKyAg
ICB9CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHNwaGVyZSBtZXNoCisgICAgICogKiBUaGUg
cGFyYW1ldGVyIGBkaWFtZXRlcmAgc2V0cyB0aGUgZGlhbWV0ZXIgc2l6ZSAoZmxvYXQpIG9mIHRo
ZSBzcGhlcmUgKGRlZmF1bHQgMSkKKyAgICAgKiAqIFlvdSBjYW4gc2V0IHNvbWUgZGlmZmVyZW50
IHNwaGVyZSBkaW1lbnNpb25zLCBmb3IgaW5zdGFuY2UgdG8gYnVpbGQgYW4gZWxsaXBzb2lkLCBi
eSB1c2luZyB0aGUgcGFyYW1ldGVycyBgZGlhbWV0ZXJYYCwgYGRpYW1ldGVyWWAgYW5kIGBkaWFt
ZXRlclpgIChhbGwgYnkgZGVmYXVsdCBoYXZlIHRoZSBzYW1lIHZhbHVlIG9mIGBkaWFtZXRlcmAp
CisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBzZWdtZW50c2Agc2V0cyB0aGUgc3BoZXJlIG51bWJl
ciBvZiBob3Jpem9udGFsIHN0cmlwZXMgKHBvc2l0aXZlIGludGVnZXIsIGRlZmF1bHQgMzIpCisg
ICAgICogKiBZb3UgY2FuIGNyZWF0ZSBhbiB1bmNsb3NlZCBzcGhlcmUgd2l0aCB0aGUgcGFyYW1l
dGVyIGBhcmNgIChwb3NpdGl2ZSBmbG9hdCwgZGVmYXVsdCAxKSwgdmFsdWVkIGJldHdlZW4gMCBh
bmQgMSwgd2hhdCBpcyB0aGUgcmF0aW8gb2YgdGhlIGNpcmN1bWZlcmVuY2UgKGxhdGl0dWRlKSA6
IDIgeCBQSSB4IHJhdGlvCisgICAgICogKiBZb3UgY2FuIGNyZWF0ZSBhbiB1bmNsb3NlZCBzcGhl
cmUgb24gaXRzIGhlaWdodCB3aXRoIHRoZSBwYXJhbWV0ZXIgYHNsaWNlYCAocG9zaXRpdmUgZmxv
YXQsIGRlZmF1bHQxKSwgdmFsdWVkIGJldHdlZW4gMCBhbmQgMSwgd2hhdCBpcyB0aGUgaGVpZ2h0
IHJhdGlvIChsb25naXR1ZGUpCisgICAgICogKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtZXNoIHNp
ZGUgb3JpZW50YXRpb24gd2l0aCB0aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLkZST05UU0lERSAo
ZGVmYXVsdCksIEJBQllMT04uTWVzaC5CQUNLU0lERSBvciBCQUJZTE9OLk1lc2guRE9VQkxFU0lE
RQorICAgICAqICogSWYgeW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNo
b29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJl
c3BlY3RpdmVseSBvbiB0aGUgZnJvbnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGggdGhlIHBhcmFt
ZXRlcnMgYGZyb250VVZzYCBhbmQgYGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBo
dHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVu
dHMjc2lkZS1vcmllbnRhdGlvbgorICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRh
dGFibGUgd2l0aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFs
c2UpIGlmIGl0cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBj
cmVhdGVkCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAor
ICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUg
dGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQor
ICAgICAqIEByZXR1cm5zIHRoZSBzcGhlcmUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vc2V0X3NoYXBlcyNzcGhlcmUKKyAgICAgKi8KKyAgICBTcGhl
cmVCdWlsZGVyLkNyZWF0ZVNwaGVyZSA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkg
eworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAg
ICAgdmFyIHNwaGVyZSA9IG5ldyBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJN
ZXNoIl0obmFtZSwgc2NlbmUpOworICAgICAgICBvcHRpb25zLnNpZGVPcmllbnRhdGlvbiA9IF9t
ZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5fR2V0RGVmYXVsdFNpZGVP
cmllbnRhdGlvbihvcHRpb25zLnNpZGVPcmllbnRhdGlvbik7CisgICAgICAgIHNwaGVyZS5fb3Jp
Z2luYWxCdWlsZGVyU2lkZU9yaWVudGF0aW9uID0gb3B0aW9ucy5zaWRlT3JpZW50YXRpb247Cisg
ICAgICAgIHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlU3BoZXJlKG9wdGlvbnMpOworICAgICAg
ICB2ZXJ0ZXhEYXRhLmFwcGx5VG9NZXNoKHNwaGVyZSwgb3B0aW9ucy51cGRhdGFibGUpOworICAg
ICAgICByZXR1cm4gc3BoZXJlOworICAgIH07CisgICAgcmV0dXJuIFNwaGVyZUJ1aWxkZXI7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy9CdWlsZGVycy90aWxlZEJv
eEJ1aWxkZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL01lc2hlcy9CdWlsZGVycy90aWxlZEJveEJ1aWxkZXIudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogVGlsZWRCb3hCdWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlRpbGVkQm94QnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVGls
ZWRCb3hCdWlsZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21h
dGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hl
cy9tZXNoLnZlcnRleERhdGEudHMiKTsKKworCisKKworX21lc2hfdmVydGV4RGF0YV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlVGlsZWRCb3ggPSBmdW5j
dGlvbiAob3B0aW9ucykgeworICAgIHZhciBuYkZhY2VzID0gNjsKKyAgICB2YXIgZmFjZVVWID0g
b3B0aW9ucy5mYWNlVVYgfHwgbmV3IEFycmF5KDYpOworICAgIHZhciBmYWNlQ29sb3JzID0gb3B0
aW9ucy5mYWNlQ29sb3JzOworICAgIHZhciBmbGlwVGlsZSA9IG9wdGlvbnMucGF0dGVybiB8fCBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uTk9fRkxJUDsKKyAgICB2
YXIgd2lkdGggPSBvcHRpb25zLndpZHRoIHx8IG9wdGlvbnMuc2l6ZSB8fCAxOworICAgIHZhciBo
ZWlnaHQgPSBvcHRpb25zLmhlaWdodCB8fCBvcHRpb25zLnNpemUgfHwgMTsKKyAgICB2YXIgZGVw
dGggPSBvcHRpb25zLmRlcHRoIHx8IG9wdGlvbnMuc2l6ZSB8fCAxOworICAgIHZhciB0aWxlV2lk
dGggPSBvcHRpb25zLnRpbGVXaWR0aCB8fCBvcHRpb25zLnRpbGVTaXplIHx8IDE7CisgICAgdmFy
IHRpbGVIZWlnaHQgPSBvcHRpb25zLnRpbGVIZWlnaHQgfHwgb3B0aW9ucy50aWxlU2l6ZSB8fCAx
OworICAgIHZhciBhbGlnbkggPSBvcHRpb25zLmFsaWduSG9yaXpvbnRhbCB8fCAwOworICAgIHZh
ciBhbGlnblYgPSBvcHRpb25zLmFsaWduVmVydGljYWwgfHwgMDsKKyAgICB2YXIgc2lkZU9yaWVu
dGF0aW9uID0gKG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uID09PSAwKSA/IDAgOiBvcHRpb25zLnNp
ZGVPcmllbnRhdGlvbiB8fCBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlcnRleERhdGEiXS5ERUZBVUxUU0lERTsKKyAgICAvLyBkZWZhdWx0IGZhY2UgY29s
b3JzIGFuZCBVViBpZiB1bmRlZmluZWQKKyAgICBmb3IgKHZhciBmID0gMDsgZiA8IG5iRmFjZXM7
IGYrKykgeworICAgICAgICBpZiAoZmFjZVVWW2ZdID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgIGZhY2VVVltmXSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yNCJdKDAsIDAsIDEsIDEpOworICAgICAgICB9CisgICAgICAgIGlm
IChmYWNlQ29sb3JzICYmIGZhY2VDb2xvcnNbZl0gPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgZmFjZUNvbG9yc1tmXSA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJDb2xvcjQiXSgxLCAxLCAxLCAxKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyOworICAgIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0
IC8gMjsKKyAgICB2YXIgaGFsZkRlcHRoID0gZGVwdGggLyAyOworICAgIHZhciBmYWNlVmVydGV4
RGF0YSA9IFtdOworICAgIGZvciAodmFyIGYgPSAwOyBmIDwgMjsgZisrKSB7IC8vZnJvbnQgYW5k
IGJhY2sKKyAgICAgICAgZmFjZVZlcnRleERhdGFbZl0gPSBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5DcmVhdGVUaWxlZFBsYW5lKHsK
KyAgICAgICAgICAgIHBhdHRlcm46IGZsaXBUaWxlLAorICAgICAgICAgICAgdGlsZVdpZHRoOiB0
aWxlV2lkdGgsCisgICAgICAgICAgICB0aWxlSGVpZ2h0OiB0aWxlSGVpZ2h0LAorICAgICAgICAg
ICAgd2lkdGg6IHdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAg
ICBhbGlnblZlcnRpY2FsOiBhbGlnblYsCisgICAgICAgICAgICBhbGlnbkhvcml6b250YWw6IGFs
aWduSCwKKyAgICAgICAgICAgIHNpZGVPcmllbnRhdGlvbjogc2lkZU9yaWVudGF0aW9uCisgICAg
ICAgIH0pOworICAgIH0KKyAgICBmb3IgKHZhciBmID0gMjsgZiA8IDQ7IGYrKykgeyAvL3NpZGVz
CisgICAgICAgIGZhY2VWZXJ0ZXhEYXRhW2ZdID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlVGlsZWRQbGFuZSh7CisgICAg
ICAgICAgICBwYXR0ZXJuOiBmbGlwVGlsZSwKKyAgICAgICAgICAgIHRpbGVXaWR0aDogdGlsZVdp
ZHRoLAorICAgICAgICAgICAgdGlsZUhlaWdodDogdGlsZUhlaWdodCwKKyAgICAgICAgICAgIHdp
ZHRoOiBkZXB0aCwKKyAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAorICAgICAgICAgICAgYWxp
Z25WZXJ0aWNhbDogYWxpZ25WLAorICAgICAgICAgICAgYWxpZ25Ib3Jpem9udGFsOiBhbGlnbkgs
CisgICAgICAgICAgICBzaWRlT3JpZW50YXRpb246IHNpZGVPcmllbnRhdGlvbgorICAgICAgICB9
KTsKKyAgICB9CisgICAgdmFyIGJhc2VBbGlnblYgPSBhbGlnblY7CisgICAgaWYgKGFsaWduViA9
PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdLkJPVFRPTSkgewor
ICAgICAgICBiYXNlQWxpZ25WID0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
TWVzaCJdLlRPUDsKKyAgICB9CisgICAgZWxzZSBpZiAoYWxpZ25WID09PSBfbWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uVE9QKSB7CisgICAgICAgIGJhc2VBbGlnblYg
PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uQk9UVE9NOworICAg
IH0KKyAgICBmb3IgKHZhciBmID0gNDsgZiA8IDY7IGYrKykgeyAvL3RvcCBhbmQgYm90dG9tCisg
ICAgICAgIGZhY2VWZXJ0ZXhEYXRhW2ZdID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlVGlsZWRQbGFuZSh7CisgICAgICAg
ICAgICBwYXR0ZXJuOiBmbGlwVGlsZSwKKyAgICAgICAgICAgIHRpbGVXaWR0aDogdGlsZVdpZHRo
LAorICAgICAgICAgICAgdGlsZUhlaWdodDogdGlsZUhlaWdodCwKKyAgICAgICAgICAgIHdpZHRo
OiB3aWR0aCwKKyAgICAgICAgICAgIGhlaWdodDogZGVwdGgsCisgICAgICAgICAgICBhbGlnblZl
cnRpY2FsOiBiYXNlQWxpZ25WLAorICAgICAgICAgICAgYWxpZ25Ib3Jpem9udGFsOiBhbGlnbkgs
CisgICAgICAgICAgICBzaWRlT3JpZW50YXRpb246IHNpZGVPcmllbnRhdGlvbgorICAgICAgICB9
KTsKKyAgICB9CisgICAgdmFyIHBvc2l0aW9ucyA9IFtdOworICAgIHZhciBub3JtYWxzID0gW107
CisgICAgdmFyIHV2cyA9IFtdOworICAgIHZhciBpbmRpY2VzID0gW107CisgICAgdmFyIGNvbG9y
cyA9IFtdOworICAgIHZhciBmYWNlUG9zaXRpb25zID0gW107CisgICAgdmFyIGZhY2VOb3JtYWxz
ID0gW107CisgICAgdmFyIG5ld0ZhY2VVViA9IFtdOworICAgIHZhciBsZW4gPSAwOworICAgIHZh
ciBsdSA9IDA7CisgICAgdmFyIGxpID0gMDsKKyAgICBmb3IgKHZhciBmID0gMDsgZiA8IG5iRmFj
ZXM7IGYrKykgeworICAgICAgICB2YXIgbGVuID0gZmFjZVZlcnRleERhdGFbZl0ucG9zaXRpb25z
Lmxlbmd0aDsKKyAgICAgICAgZmFjZVBvc2l0aW9uc1tmXSA9IFtdOworICAgICAgICBmYWNlTm9y
bWFsc1tmXSA9IFtdOworICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IGxlbiAvIDM7IHArKykg
eworICAgICAgICAgICAgZmFjZVBvc2l0aW9uc1tmXS5wdXNoKG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKGZhY2VWZXJ0ZXhEYXRh
W2ZdLnBvc2l0aW9uc1szICogcF0sIGZhY2VWZXJ0ZXhEYXRhW2ZdLnBvc2l0aW9uc1szICogcCAr
IDFdLCBmYWNlVmVydGV4RGF0YVtmXS5wb3NpdGlvbnNbMyAqIHAgKyAyXSkpOworICAgICAgICAg
ICAgZmFjZU5vcm1hbHNbZl0ucHVzaChuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShmYWNlVmVydGV4RGF0YVtmXS5ub3JtYWxzWzMg
KiBwXSwgZmFjZVZlcnRleERhdGFbZl0ubm9ybWFsc1szICogcCArIDFdLCBmYWNlVmVydGV4RGF0
YVtmXS5ub3JtYWxzWzMgKiBwICsgMl0pKTsKKyAgICAgICAgfQorICAgICAgICAvLyB1dnMKKyAg
ICAgICAgbHUgPSBmYWNlVmVydGV4RGF0YVtmXS51dnMubGVuZ3RoOworICAgICAgICBuZXdGYWNl
VVZbZl0gPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsdTsgaSArPSAyKSB7Cisg
ICAgICAgICAgICBuZXdGYWNlVVZbZl1baV0gPSBmYWNlVVZbZl0ueCArIChmYWNlVVZbZl0ueiAt
IGZhY2VVVltmXS54KSAqIGZhY2VWZXJ0ZXhEYXRhW2ZdLnV2c1tpXTsKKyAgICAgICAgICAgIG5l
d0ZhY2VVVltmXVtpICsgMV0gPSBmYWNlVVZbZl0ueSArIChmYWNlVVZbZl0udyAtIGZhY2VVVltm
XS55KSAqIGZhY2VWZXJ0ZXhEYXRhW2ZdLnV2c1tpICsgMV07CisgICAgICAgIH0KKyAgICAgICAg
dXZzID0gdXZzLmNvbmNhdChuZXdGYWNlVVZbZl0pOworICAgICAgICBpbmRpY2VzID0gaW5kaWNl
cy5jb25jYXQoZmFjZVZlcnRleERhdGFbZl0uaW5kaWNlcy5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0
dXJuIHggKyBsaTsgfSkpOworICAgICAgICBsaSArPSBmYWNlUG9zaXRpb25zW2ZdLmxlbmd0aDsK
KyAgICAgICAgaWYgKGZhY2VDb2xvcnMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBj
IDwgNDsgYysrKSB7CisgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goZmFjZUNvbG9yc1tmXS5y
LCBmYWNlQ29sb3JzW2ZdLmcsIGZhY2VDb2xvcnNbZl0uYiwgZmFjZUNvbG9yc1tmXS5hKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB2YXIgdmVjMCA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIDAs
IGhhbGZEZXB0aCk7CisgICAgdmFyIG10cngwID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlJvdGF0aW9uWShNYXRoLlBJKTsKKyAgICBw
b3NpdGlvbnMgPSBmYWNlUG9zaXRpb25zWzBdLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJu
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0uVHJhbnNmb3JtTm9ybWFsKGVudHJ5LCBtdHJ4MCkuYWRkKHZlYzApOyB9KS5tYXAoZnVuY3Rp
b24gKGVudHJ5KSB7IHJldHVybiBbZW50cnkueCwgZW50cnkueSwgZW50cnkuel07IH0pLnJlZHVj
ZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgeyByZXR1cm4gYWNjdW11bGF0
b3IuY29uY2F0KGN1cnJlbnRWYWx1ZSk7IH0sIFtdKTsKKyAgICBub3JtYWxzID0gZmFjZU5vcm1h
bHNbMF0ubWFwKGZ1bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwoZW50
cnksIG10cngwKTsgfSkubWFwKGZ1bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gW2VudHJ5LngsIGVu
dHJ5LnksIGVudHJ5LnpdOyB9KS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBjdXJyZW50
VmFsdWUpIHsgcmV0dXJuIGFjY3VtdWxhdG9yLmNvbmNhdChjdXJyZW50VmFsdWUpOyB9LCBbXSk7
CisgICAgcG9zaXRpb25zID0gcG9zaXRpb25zLmNvbmNhdChmYWNlUG9zaXRpb25zWzFdLm1hcChm
dW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIGVudHJ5LnN1YnRyYWN0KHZlYzApOyB9KS5tYXAoZnVu
Y3Rpb24gKGVudHJ5KSB7IHJldHVybiBbZW50cnkueCwgZW50cnkueSwgZW50cnkuel07IH0pLnJl
ZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgeyByZXR1cm4gYWNjdW11
bGF0b3IuY29uY2F0KGN1cnJlbnRWYWx1ZSk7IH0sIFtdKSk7CisgICAgbm9ybWFscyA9IG5vcm1h
bHMuY29uY2F0KGZhY2VOb3JtYWxzWzFdLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIFtl
bnRyeS54LCBlbnRyeS55LCBlbnRyeS56XTsgfSkucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRv
ciwgY3VycmVudFZhbHVlKSB7IHJldHVybiBhY2N1bXVsYXRvci5jb25jYXQoY3VycmVudFZhbHVl
KTsgfSwgW10pKTsKKyAgICB2YXIgdmVjMiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKGhhbGZXaWR0aCwgMCwgMCk7CisgICAg
dmFyIG10cngyID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIk1hdHJpeCJdLlJvdGF0aW9uWSgtTWF0aC5QSSAvIDIpOworICAgIHBvc2l0aW9ucyA9IHBv
c2l0aW9ucy5jb25jYXQoZmFjZVBvc2l0aW9uc1syXS5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7IHJl
dHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVj
dG9yMyJdLlRyYW5zZm9ybU5vcm1hbChlbnRyeSwgbXRyeDIpLmFkZCh2ZWMyKTsgfSkubWFwKGZ1
bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gW2VudHJ5LngsIGVudHJ5LnksIGVudHJ5LnpdOyB9KS5y
ZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpIHsgcmV0dXJuIGFjY3Vt
dWxhdG9yLmNvbmNhdChjdXJyZW50VmFsdWUpOyB9LCBbXSkpOworICAgIG5vcm1hbHMgPSBub3Jt
YWxzLmNvbmNhdChmYWNlTm9ybWFsc1syXS5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7IHJldHVybiBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJd
LlRyYW5zZm9ybU5vcm1hbChlbnRyeSwgbXRyeDIpOyB9KS5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7
IHJldHVybiBbZW50cnkueCwgZW50cnkueSwgZW50cnkuel07IH0pLnJlZHVjZShmdW5jdGlvbiAo
YWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgeyByZXR1cm4gYWNjdW11bGF0b3IuY29uY2F0KGN1
cnJlbnRWYWx1ZSk7IH0sIFtdKSk7CisgICAgdmFyIG10cngzID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlJvdGF0aW9uWShNYXRoLlBJ
IC8gMik7CisgICAgcG9zaXRpb25zID0gcG9zaXRpb25zLmNvbmNhdChmYWNlUG9zaXRpb25zWzNd
Lm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKGVudHJ5LCBt
dHJ4Mykuc3VidHJhY3QodmVjMik7IH0pLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIFtl
bnRyeS54LCBlbnRyeS55LCBlbnRyeS56XTsgfSkucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRv
ciwgY3VycmVudFZhbHVlKSB7IHJldHVybiBhY2N1bXVsYXRvci5jb25jYXQoY3VycmVudFZhbHVl
KTsgfSwgW10pKTsKKyAgICBub3JtYWxzID0gbm9ybWFscy5jb25jYXQoZmFjZU5vcm1hbHNbM10u
bWFwKGZ1bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwoZW50cnksIG10
cngzKTsgfSkubWFwKGZ1bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gW2VudHJ5LngsIGVudHJ5Lnks
IGVudHJ5LnpdOyB9KS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUp
IHsgcmV0dXJuIGFjY3VtdWxhdG9yLmNvbmNhdChjdXJyZW50VmFsdWUpOyB9LCBbXSkpOworICAg
IHZhciB2ZWM0ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0oMCwgaGFsZkhlaWdodCwgMCk7CisgICAgdmFyIG10cng0ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlJv
dGF0aW9uWChNYXRoLlBJIC8gMik7CisgICAgcG9zaXRpb25zID0gcG9zaXRpb25zLmNvbmNhdChm
YWNlUG9zaXRpb25zWzRdLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3Jt
Tm9ybWFsKGVudHJ5LCBtdHJ4NCkuYWRkKHZlYzQpOyB9KS5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7
IHJldHVybiBbZW50cnkueCwgZW50cnkueSwgZW50cnkuel07IH0pLnJlZHVjZShmdW5jdGlvbiAo
YWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgeyByZXR1cm4gYWNjdW11bGF0b3IuY29uY2F0KGN1
cnJlbnRWYWx1ZSk7IH0sIFtdKSk7CisgICAgbm9ybWFscyA9IG5vcm1hbHMuY29uY2F0KGZhY2VO
b3JtYWxzWzRdLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFs
KGVudHJ5LCBtdHJ4NCk7IH0pLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIFtlbnRyeS54
LCBlbnRyeS55LCBlbnRyeS56XTsgfSkucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgY3Vy
cmVudFZhbHVlKSB7IHJldHVybiBhY2N1bXVsYXRvci5jb25jYXQoY3VycmVudFZhbHVlKTsgfSwg
W10pKTsKKyAgICB2YXIgbXRyeDUgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siTWF0cml4Il0uUm90YXRpb25YKC1NYXRoLlBJIC8gMik7CisgICAgcG9z
aXRpb25zID0gcG9zaXRpb25zLmNvbmNhdChmYWNlUG9zaXRpb25zWzVdLm1hcChmdW5jdGlvbiAo
ZW50cnkpIHsgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKGVudHJ5LCBtdHJ4NSkuc3VidHJhY3Qo
dmVjNCk7IH0pLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIFtlbnRyeS54LCBlbnRyeS55
LCBlbnRyeS56XTsgfSkucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVl
KSB7IHJldHVybiBhY2N1bXVsYXRvci5jb25jYXQoY3VycmVudFZhbHVlKTsgfSwgW10pKTsKKyAg
ICBub3JtYWxzID0gbm9ybWFscy5jb25jYXQoZmFjZU5vcm1hbHNbNV0ubWFwKGZ1bmN0aW9uIChl
bnRyeSkgeyByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwoZW50cnksIG10cng1KTsgfSkubWFwKGZ1
bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gW2VudHJ5LngsIGVudHJ5LnksIGVudHJ5LnpdOyB9KS5y
ZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpIHsgcmV0dXJuIGFjY3Vt
dWxhdG9yLmNvbmNhdChjdXJyZW50VmFsdWUpOyB9LCBbXSkpOworICAgIC8vIHNpZGVzCisgICAg
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRh
Il0uX0NvbXB1dGVTaWRlcyhzaWRlT3JpZW50YXRpb24sIHBvc2l0aW9ucywgaW5kaWNlcywgbm9y
bWFscywgdXZzKTsKKyAgICAvLyBSZXN1bHQKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVz
aF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXSgp
OworICAgIHZlcnRleERhdGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgdmVydGV4RGF0YS5wb3Np
dGlvbnMgPSBwb3NpdGlvbnM7CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAg
ICB2ZXJ0ZXhEYXRhLnV2cyA9IHV2czsKKyAgICBpZiAoZmFjZUNvbG9ycykgeworICAgICAgICB2
YXIgdG90YWxDb2xvcnMgPSAoc2lkZU9yaWVudGF0aW9uID09PSBfbWVzaF92ZXJ0ZXhEYXRhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5ET1VCTEVTSURFKSA/IGNv
bG9ycy5jb25jYXQoY29sb3JzKSA6IGNvbG9yczsKKyAgICAgICAgdmVydGV4RGF0YS5jb2xvcnMg
PSB0b3RhbENvbG9yczsKKyAgICB9CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworLyoqCisg
KiBDbGFzcyBjb250YWluaW5nIHN0YXRpYyBmdW5jdGlvbnMgdG8gaGVscCBwcm9jZWR1cmFsbHkg
YnVpbGQgbWVzaGVzCisgKi8KK3ZhciBUaWxlZEJveEJ1aWxkZXIgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gVGlsZWRCb3hCdWlsZGVyKCkgeworICAgIH0KKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgYm94IG1lc2gKKyAgICAgKiBmYWNlVGlsZXMgc2V0cyB0
aGUgcGF0dGVybiwgdGlsZSBzaXplIGFuZCBudW1iZXIgb2YgdGlsZXMgZm9yIGEgZmFjZSAgICAg
KiAqIFlvdSBjYW4gc2V0IGRpZmZlcmVudCBjb2xvcnMgYW5kIGRpZmZlcmVudCBpbWFnZXMgdG8g
ZWFjaCBib3ggc2lkZSBieSB1c2luZyB0aGUgcGFyYW1ldGVycyBgZmFjZUNvbG9yc2AgKGFuIGFy
cmF5IG9mIDYgQ29sb3IzIGVsZW1lbnRzKSBhbmQgYGZhY2VVVmAgKGFuIGFycmF5IG9mIDYgVmVj
dG9yNCBlbGVtZW50cykKKyAgICAgKiAqIFBsZWFzZSByZWFkIHRoaXMgdHV0b3JpYWwgOiBodHRw
czovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jcmVhdGVib3hfcGVyX2ZhY2VfdGV4dHVyZXNf
YW5kX2NvbG9ycworICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVu
dGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQp
LCBCQUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNoLkRPVUJMRVNJREUKKyAgICAg
KiAqIElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hh
dCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZl
bHkgb24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBm
cm9udFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFpbCBoZXJlIDogaHR0cHM6Ly9k
b2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUt
b3JpZW50YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdp
dGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBp
dHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAor
ICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBA
cGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNo
CisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBA
cmV0dXJucyB0aGUgYm94IG1lc2gKKyAgICAgKi8KKyAgICBUaWxlZEJveEJ1aWxkZXIuQ3JlYXRl
VGlsZWRCb3ggPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYg
KHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHZhciBib3ggPSBu
ZXcgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdKG5hbWUsIHNjZW5l
KTsKKyAgICAgICAgb3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uX0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9u
cy5zaWRlT3JpZW50YXRpb24pOworICAgICAgICBib3guX29yaWdpbmFsQnVpbGRlclNpZGVPcmll
bnRhdGlvbiA9IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uOworICAgICAgICB2YXIgdmVydGV4RGF0
YSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
RGF0YSJdLkNyZWF0ZVRpbGVkQm94KG9wdGlvbnMpOworICAgICAgICB2ZXJ0ZXhEYXRhLmFwcGx5
VG9NZXNoKGJveCwgb3B0aW9ucy51cGRhdGFibGUpOworICAgICAgICByZXR1cm4gYm94OworICAg
IH07CisgICAgcmV0dXJuIFRpbGVkQm94QnVpbGRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3RpbGVkUGxhbmVCdWlsZGVyLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L01lc2hlcy9CdWlsZGVycy90aWxlZFBsYW5lQnVpbGRlci50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IFRpbGVkUGxhbmVCdWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlRpbGVkUGxhbmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUaWxlZFBsYW5lQnVp
bGRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2ggKi8gIi4vTWVz
aGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF92ZXJ0ZXhEYXRh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9tZXNoLnZlcnRleERhdGEgKi8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50cyIpOworCisK
K19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4RGF0
YSJdLkNyZWF0ZVRpbGVkUGxhbmUgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgIHZhciBmbGlw
VGlsZSA9IG9wdGlvbnMucGF0dGVybiB8fCBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJNZXNoIl0uTk9fRkxJUDsKKyAgICB2YXIgdGlsZVdpZHRoID0gb3B0aW9ucy50aWxlV2lk
dGggfHwgb3B0aW9ucy50aWxlU2l6ZSB8fCAxOworICAgIHZhciB0aWxlSGVpZ2h0ID0gb3B0aW9u
cy50aWxlSGVpZ2h0IHx8IG9wdGlvbnMudGlsZVNpemUgfHwgMTsKKyAgICB2YXIgYWxpZ25IID0g
b3B0aW9ucy5hbGlnbkhvcml6b250YWwgfHwgMDsKKyAgICB2YXIgYWxpZ25WID0gb3B0aW9ucy5h
bGlnblZlcnRpY2FsIHx8IDA7CisgICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCB8fCBvcHRp
b25zLnNpemUgfHwgMTsKKyAgICB2YXIgdGlsZXNYID0gTWF0aC5mbG9vcih3aWR0aCAvIHRpbGVX
aWR0aCk7CisgICAgdmFyIG9mZnNldFggPSB3aWR0aCAtIHRpbGVzWCAqIHRpbGVXaWR0aDsKKyAg
ICB2YXIgaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgb3B0aW9ucy5zaXplIHx8IDE7CisgICAg
dmFyIHRpbGVzWSA9IE1hdGguZmxvb3IoaGVpZ2h0IC8gdGlsZUhlaWdodCk7CisgICAgdmFyIG9m
ZnNldFkgPSBoZWlnaHQgLSB0aWxlc1kgKiB0aWxlSGVpZ2h0OworICAgIHZhciBoYWxmV2lkdGgg
PSB0aWxlV2lkdGggKiB0aWxlc1ggLyAyOworICAgIHZhciBoYWxmSGVpZ2h0ID0gdGlsZUhlaWdo
dCAqIHRpbGVzWSAvIDI7CisgICAgdmFyIGFkanVzdFggPSAwOworICAgIHZhciBhZGp1c3RZID0g
MDsKKyAgICB2YXIgc3RhcnRYID0gMDsKKyAgICB2YXIgc3RhcnRZID0gMDsKKyAgICB2YXIgZW5k
WCA9IDA7CisgICAgdmFyIGVuZFkgPSAwOworICAgIC8vUGFydCBUaWxlcworICAgIGlmIChvZmZz
ZXRYID4gMCB8fCBvZmZzZXRZID4gMCkgeworICAgICAgICBzdGFydFggPSAtaGFsZldpZHRoOwor
ICAgICAgICBzdGFydFkgPSAtaGFsZkhlaWdodDsKKyAgICAgICAgdmFyIGVuZFggPSBoYWxmV2lk
dGg7CisgICAgICAgIHZhciBlbmRZID0gaGFsZkhlaWdodDsKKyAgICAgICAgc3dpdGNoIChhbGln
bkgpIHsKKyAgICAgICAgICAgIGNhc2UgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siTWVzaCJdLkNFTlRFUjoKKyAgICAgICAgICAgICAgICBvZmZzZXRYIC89IDI7CisgICAgICAg
ICAgICAgICAgc3RhcnRYIC09IG9mZnNldFg7CisgICAgICAgICAgICAgICAgZW5kWCArPSBvZmZz
ZXRYOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfbWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uTEVGVDoKKyAgICAgICAgICAgICAgICBl
bmRYICs9IG9mZnNldFg7CisgICAgICAgICAgICAgICAgYWRqdXN0WCA9IC1vZmZzZXRYIC8gMjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJJR0hUOgorICAgICAgICAgICAgICAgIHN0YXJ0
WCAtPSBvZmZzZXRYOworICAgICAgICAgICAgICAgIGFkanVzdFggPSBvZmZzZXRYIC8gMjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKGFsaWduVikg
eworICAgICAgICAgICAgY2FzZSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJN
ZXNoIl0uQ0VOVEVSOgorICAgICAgICAgICAgICAgIG9mZnNldFkgLz0gMjsKKyAgICAgICAgICAg
ICAgICBzdGFydFkgLT0gb2Zmc2V0WTsKKyAgICAgICAgICAgICAgICBlbmRZICs9IG9mZnNldFk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9tZXNoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5CT1RUT006CisgICAgICAgICAgICAgICAgZW5k
WSArPSBvZmZzZXRZOworICAgICAgICAgICAgICAgIGFkanVzdFkgPSAtb2Zmc2V0WSAvIDI7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9tZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5UT1A6CisgICAgICAgICAgICAgICAgc3RhcnRZIC09
IG9mZnNldFk7CisgICAgICAgICAgICAgICAgYWRqdXN0WSA9IG9mZnNldFkgLyAyOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHZhciBwb3NpdGlvbnMgPSBb
XTsKKyAgICB2YXIgbm9ybWFscyA9IFtdOworICAgIHZhciB1dkJhc2UgPSBbXTsKKyAgICB1dkJh
c2VbMF0gPSBbMCwgMCwgMSwgMCwgMSwgMSwgMCwgMV07CisgICAgdXZCYXNlWzFdID0gWzAsIDAs
IDEsIDAsIDEsIDEsIDAsIDFdOworICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9USUxFIHx8IGZsaXBUaWxlID09PSBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1JPVykgewor
ICAgICAgICB1dkJhc2VbMV0gPSBbMSwgMSwgMCwgMSwgMCwgMCwgMSwgMF07CisgICAgfQorICAg
IGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVz
aCJdLkZMSVBfVElMRSB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTWVzaCJdLkZMSVBfUk9XKSB7CisgICAgICAgIHV2QmFzZVsxXSA9IFsxLCAwLCAw
LCAwLCAwLCAxLCAxLCAxXTsKKyAgICB9CisgICAgaWYgKGZsaXBUaWxlID09PSBfbWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9OX1JPVEFURV9USUxFIHx8IGZs
aXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJ
UF9OX1JPVEFURV9ST1cpIHsKKyAgICAgICAgdXZCYXNlWzFdID0gWzAsIDEsIDEsIDEsIDEsIDAs
IDAsIDBdOworICAgIH0KKyAgICB2YXIgdXZzID0gW107CisgICAgdmFyIGNvbG9ycyA9IFtdOwor
ICAgIHZhciBpbmRpY2VzID0gW107CisgICAgdmFyIGluZGV4ID0gMDsKKyAgICBmb3IgKHZhciB5
ID0gMDsgeSA8IHRpbGVzWTsgeSsrKSB7CisgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdGls
ZXNYOyB4KyspIHsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKC1oYWxmV2lkdGggKyB4ICog
dGlsZVdpZHRoICsgYWRqdXN0WCwgLWhhbGZIZWlnaHQgKyB5ICogdGlsZUhlaWdodCArIGFkanVz
dFksIDApOworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goLWhhbGZXaWR0aCArICh4ICsgMSkg
KiB0aWxlV2lkdGggKyBhZGp1c3RYLCAtaGFsZkhlaWdodCArIHkgKiB0aWxlSGVpZ2h0ICsgYWRq
dXN0WSwgMCk7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCgtaGFsZldpZHRoICsgKHggKyAx
KSAqIHRpbGVXaWR0aCArIGFkanVzdFgsIC1oYWxmSGVpZ2h0ICsgKHkgKyAxKSAqIHRpbGVIZWln
aHQgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKC1oYWxmV2lkdGgg
KyB4ICogdGlsZVdpZHRoICsgYWRqdXN0WCwgLWhhbGZIZWlnaHQgKyAoeSArIDEpICogdGlsZUhl
aWdodCArIGFkanVzdFksIDApOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4LCBpbmRl
eCArIDEsIGluZGV4ICsgMywgaW5kZXggKyAxLCBpbmRleCArIDIsIGluZGV4ICsgMyk7CisgICAg
ICAgICAgICBpZiAoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIk1lc2giXS5GTElQX1RJTEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIk1lc2giXS5ST1RBVEVfVElMRSB8fCBmbGlwVGlsZSA9PT0gX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfVElMRSkg
eworICAgICAgICAgICAgICAgIHV2cyA9IHV2cy5jb25jYXQodXZCYXNlWyh4ICUgMiArIHkgJSAy
KSAlIDJdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGZsaXBUaWxlID09
PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9ST1cgfHwg
ZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5S
T1RBVEVfUk9XIHx8IGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJNZXNoIl0uRkxJUF9OX1JPVEFURV9ST1cpIHsKKyAgICAgICAgICAgICAgICB1dnMgPSB1
dnMuY29uY2F0KHV2QmFzZVt5ICUgMl0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgdXZzID0gdXZzLmNvbmNhdCh1dkJhc2VbMF0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY29sb3JzLnB1c2goMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSk7CisgICAgICAgICAgICBub3JtYWxzLnB1c2goMCwgMCwg
LTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEpOworICAgICAgICAgICAgaW5kZXggKz0g
NDsKKyAgICAgICAgfQorICAgIH0KKyAgICAvL1BhcnQgVGlsZXMKKyAgICBpZiAob2Zmc2V0WCA+
IDAgfHwgb2Zmc2V0WSA+IDApIHsKKyAgICAgICAgdmFyIHBhcnRpYWxCb3R0b21Sb3cgPSAob2Zm
c2V0WSA+IDAgJiYgKGFsaWduViA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siTWVzaCJdLkNFTlRFUiB8fCBhbGlnblYgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIk1lc2giXS5UT1ApKTsKKyAgICAgICAgdmFyIHBhcnRpYWxUb3BSb3cgPSAob2Zm
c2V0WSA+IDAgJiYgKGFsaWduViA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siTWVzaCJdLkNFTlRFUiB8fCBhbGlnblYgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIk1lc2giXS5CT1RUT00pKTsKKyAgICAgICAgdmFyIHBhcnRpYWxMZWZ0Q29sID0g
KG9mZnNldFggPiAwICYmIChhbGlnbkggPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIk1lc2giXS5DRU5URVIgfHwgYWxpZ25IID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJNZXNoIl0uUklHSFQpKTsKKyAgICAgICAgdmFyIHBhcnRpYWxSaWdodENv
bCA9IChvZmZzZXRYID4gMCAmJiAoYWxpZ25IID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJNZXNoIl0uQ0VOVEVSIHx8IGFsaWduSCA9PT0gX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkxFRlQpKTsKKyAgICAgICAgdmFyIHV2UGFydCA9IFtd
OworICAgICAgICB2YXIgYSwgYiwgYywgZDsKKyAgICAgICAgLy9jb3JuZXJzCisgICAgICAgIGlm
IChwYXJ0aWFsQm90dG9tUm93ICYmIHBhcnRpYWxMZWZ0Q29sKSB7IC8vYm90dG9tIGxlZnQgY29y
bmVyCisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChzdGFydFggKyBhZGp1c3RYLCBzdGFydFkg
KyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKC1oYWxmV2lkdGggKyBh
ZGp1c3RYLCBzdGFydFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNo
KC1oYWxmV2lkdGggKyBhZGp1c3RYLCBzdGFydFkgKyBvZmZzZXRZICsgYWRqdXN0WSwgMCk7Cisg
ICAgICAgICAgICBwb3NpdGlvbnMucHVzaChzdGFydFggKyBhZGp1c3RYLCBzdGFydFkgKyBvZmZz
ZXRZICsgYWRqdXN0WSwgMCk7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXgsIGluZGV4
ICsgMSwgaW5kZXggKyAzLCBpbmRleCArIDEsIGluZGV4ICsgMiwgaW5kZXggKyAzKTsKKyAgICAg
ICAgICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICBhID0gMSAtIG9mZnNldFggLyB0aWxlV2lk
dGg7CisgICAgICAgICAgICBiID0gMSAtIG9mZnNldFkgLyB0aWxlSGVpZ2h0OworICAgICAgICAg
ICAgYyA9IDE7CisgICAgICAgICAgICBkID0gMTsKKyAgICAgICAgICAgIHV2UGFydCA9IFthLCBi
LCBjLCBiLCBjLCBkLCBhLCBkXTsKKyAgICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9ST1cpIHsKKyAgICAg
ICAgICAgICAgICB1dlBhcnQgPSBbMSAtIGEsIDEgLSBiLCAxIC0gYywgMSAtIGIsIDEgLSBjLCAx
IC0gZCwgMSAtIGEsIDEgLSBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmbGlw
VGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBf
Uk9XKSB7CisgICAgICAgICAgICAgICAgdXZQYXJ0ID0gWzEgLSBhLCBiLCAxIC0gYywgYiwgMSAt
IGMsIGQsIDEgLSBhLCBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmbGlwVGls
ZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9S
T1RBVEVfUk9XKSB7CisgICAgICAgICAgICAgICAgdXZQYXJ0ID0gW2EsIDEgLSBiLCBjLCAxIC0g
YiwgYywgMSAtIGQsIGEsIDEgLSBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHV2cyA9
IHV2cy5jb25jYXQodXZQYXJ0KTsKKyAgICAgICAgICAgIGNvbG9ycy5wdXNoKDEsIDEsIDEsIDEs
IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEpOworICAgICAgICAgICAgbm9ybWFs
cy5wdXNoKDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAocGFydGlhbEJvdHRvbVJvdyAmJiBwYXJ0aWFsUmlnaHRDb2wpIHsgLy9i
b3R0b20gcmlnaHQgY29ybmVyCisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChoYWxmV2lkdGgg
KyBhZGp1c3RYLCBzdGFydFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5w
dXNoKGVuZFggKyBhZGp1c3RYLCBzdGFydFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBv
c2l0aW9ucy5wdXNoKGVuZFggKyBhZGp1c3RYLCBzdGFydFkgKyBvZmZzZXRZICsgYWRqdXN0WSwg
MCk7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChoYWxmV2lkdGggKyBhZGp1c3RYLCBzdGFy
dFkgKyBvZmZzZXRZICsgYWRqdXN0WSwgMCk7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaW5k
ZXgsIGluZGV4ICsgMSwgaW5kZXggKyAzLCBpbmRleCArIDEsIGluZGV4ICsgMiwgaW5kZXggKyAz
KTsKKyAgICAgICAgICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICBhID0gMCwKKyAgICAgICAg
ICAgICAgICBiID0gMSAtIG9mZnNldFkgLyB0aWxlSGVpZ2h0OworICAgICAgICAgICAgYyA9IG9m
ZnNldFggLyB0aWxlV2lkdGg7CisgICAgICAgICAgICBkID0gMTsKKyAgICAgICAgICAgIHV2UGFy
dCA9IFthLCBiLCBjLCBiLCBjLCBkLCBhLCBkXTsKKyAgICAgICAgICAgIGlmIChmbGlwVGlsZSA9
PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9ST1cg
fHwgKGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNo
Il0uUk9UQVRFX1RJTEUgJiYgKHRpbGVzWCAlIDIpID09PSAwKSkgeworICAgICAgICAgICAgICAg
IHV2UGFydCA9IFsxIC0gYSwgMSAtIGIsIDEgLSBjLCAxIC0gYiwgMSAtIGMsIDEgLSBkLCAxIC0g
YSwgMSAtIGRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZsaXBUaWxlID09PSBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9ST1cgfHwgKGZs
aXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJ
UF9USUxFICYmICh0aWxlc1ggJSAyKSA9PT0gMCkpIHsKKyAgICAgICAgICAgICAgICB1dlBhcnQg
PSBbMSAtIGEsIGIsIDEgLSBjLCBiLCAxIC0gYywgZCwgMSAtIGEsIGRdOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9OX1JPVEFURV9ST1cgfHwgKGZsaXBUaWxlID09PSBfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9OX1JPVEFURV9USUxF
ICYmICh0aWxlc1ggJSAyKSA9PT0gMCkpIHsKKyAgICAgICAgICAgICAgICB1dlBhcnQgPSBbYSwg
MSAtIGIsIGMsIDEgLSBiLCBjLCAxIC0gZCwgYSwgMSAtIGRdOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdXZzID0gdXZzLmNvbmNhdCh1dlBhcnQpOworICAgICAgICAgICAgY29sb3JzLnB1
c2goMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSk7CisgICAg
ICAgICAgICBub3JtYWxzLnB1c2goMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwg
LTEpOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJ0aWFsVG9wUm93ICYmIHBhcnRpYWxMZWZ0
Q29sKSB7IC8vdG9wIGxlZnQgY29ybmVyCisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChzdGFy
dFggKyBhZGp1c3RYLCBoYWxmSGVpZ2h0ICsgYWRqdXN0WSwgMCk7CisgICAgICAgICAgICBwb3Np
dGlvbnMucHVzaCgtaGFsZldpZHRoICsgYWRqdXN0WCwgaGFsZkhlaWdodCArIGFkanVzdFksIDAp
OworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goLWhhbGZXaWR0aCArIGFkanVzdFgsIGVuZFkg
KyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHN0YXJ0WCArIGFkanVz
dFgsIGVuZFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRleCwg
aW5kZXggKyAxLCBpbmRleCArIDMsIGluZGV4ICsgMSwgaW5kZXggKyAyLCBpbmRleCArIDMpOwor
ICAgICAgICAgICAgaW5kZXggKz0gNDsKKyAgICAgICAgICAgIGEgPSAxIC0gb2Zmc2V0WCAvIHRp
bGVXaWR0aDsKKyAgICAgICAgICAgIGIgPSAwOworICAgICAgICAgICAgYyA9IDE7CisgICAgICAg
ICAgICBkID0gb2Zmc2V0WSAvIHRpbGVIZWlnaHQ7CisgICAgICAgICAgICB1dlBhcnQgPSBbYSwg
YiwgYywgYiwgYywgZCwgYSwgZF07CisgICAgICAgICAgICBpZiAoKGZsaXBUaWxlID09PSBfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1JPVyAmJiAodGls
ZXNZICUgMikgPT09IDEpIHx8IChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9USUxFICYmICh0aWxlc1kgJSAxKSA9PT0gMCkpIHsK
KyAgICAgICAgICAgICAgICB1dlBhcnQgPSBbMSAtIGEsIDEgLSBiLCAxIC0gYywgMSAtIGIsIDEg
LSBjLCAxIC0gZCwgMSAtIGEsIDEgLSBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICgoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2gi
XS5GTElQX1JPVyAmJiAodGlsZXNZICUgMikgPT09IDEpIHx8IChmbGlwVGlsZSA9PT0gX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfVElMRSAmJiAodGlsZXNZ
ICUgMikgPT09IDApKSB7CisgICAgICAgICAgICAgICAgdXZQYXJ0ID0gWzEgLSBhLCBiLCAxIC0g
YywgYiwgMSAtIGMsIGQsIDEgLSBhLCBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICgoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2gi
XS5GTElQX05fUk9UQVRFX1JPVyAmJiAodGlsZXNZICUgMikgPT09IDEpIHx8IChmbGlwVGlsZSA9
PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9ST1RB
VEVfVElMRSAmJiAodGlsZXNZICUgMikgPT09IDApKSB7CisgICAgICAgICAgICAgICAgdXZQYXJ0
ID0gW2EsIDEgLSBiLCBjLCAxIC0gYiwgYywgMSAtIGQsIGEsIDEgLSBkXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHV2cyA9IHV2cy5jb25jYXQodXZQYXJ0KTsKKyAgICAgICAgICAgIGNv
bG9ycy5wdXNoKDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEp
OworICAgICAgICAgICAgbm9ybWFscy5wdXNoKDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEs
IDAsIDAsIC0xKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFydGlhbFRvcFJvdyAmJiBwYXJ0
aWFsUmlnaHRDb2wpIHsgLy90b3AgcmlnaHQgY29ybmVyCisgICAgICAgICAgICBwb3NpdGlvbnMu
cHVzaChoYWxmV2lkdGggKyBhZGp1c3RYLCBoYWxmSGVpZ2h0ICsgYWRqdXN0WSwgMCk7CisgICAg
ICAgICAgICBwb3NpdGlvbnMucHVzaChlbmRYICsgYWRqdXN0WCwgaGFsZkhlaWdodCArIGFkanVz
dFksIDApOworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goZW5kWCArIGFkanVzdFgsIGVuZFkg
KyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKGhhbGZXaWR0aCArIGFk
anVzdFgsIGVuZFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRl
eCwgaW5kZXggKyAxLCBpbmRleCArIDMsIGluZGV4ICsgMSwgaW5kZXggKyAyLCBpbmRleCArIDMp
OworICAgICAgICAgICAgaW5kZXggKz0gNDsKKyAgICAgICAgICAgIGEgPSAwLAorICAgICAgICAg
ICAgICAgIGIgPSAwOworICAgICAgICAgICAgYyA9IG9mZnNldFggLyB0aWxlV2lkdGg7CisgICAg
ICAgICAgICBkID0gb2Zmc2V0WSAvIHRpbGVIZWlnaHQ7CisgICAgICAgICAgICB1dlBhcnQgPSBb
YSwgYiwgYywgYiwgYywgZCwgYSwgZF07CisgICAgICAgICAgICBpZiAoKGZsaXBUaWxlID09PSBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1JPVyAmJiAo
dGlsZXNZICUgMikgPT09IDEpIHx8IChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9USUxFICYmICh0aWxlc1kgKyB0aWxlc1gpICUg
MiA9PT0gMSkpIHsKKyAgICAgICAgICAgICAgICB1dlBhcnQgPSBbMSAtIGEsIDEgLSBiLCAxIC0g
YywgMSAtIGIsIDEgLSBjLCAxIC0gZCwgMSAtIGEsIDEgLSBkXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICgoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIk1lc2giXS5GTElQX1JPVyAmJiAodGlsZXNZICUgMikgPT09IDEpIHx8IChmbGlwVGls
ZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfVElM
RSAmJiAodGlsZXNZICsgdGlsZXNYKSAlIDIgPT09IDEpKSB7CisgICAgICAgICAgICAgICAgdXZQ
YXJ0ID0gWzEgLSBhLCBiLCAxIC0gYywgYiwgMSAtIGMsIGQsIDEgLSBhLCBkXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICgoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIk1lc2giXS5GTElQX05fUk9UQVRFX1JPVyAmJiAodGlsZXNZICUgMikg
PT09IDEpIHx8IChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfVElMRSAmJiAodGlsZXNZICsgdGlsZXNYKSAlIDIgPT09
IDEpKSB7CisgICAgICAgICAgICAgICAgdXZQYXJ0ID0gW2EsIDEgLSBiLCBjLCAxIC0gYiwgYywg
MSAtIGQsIGEsIDEgLSBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHV2cyA9IHV2cy5j
b25jYXQodXZQYXJ0KTsKKyAgICAgICAgICAgIGNvbG9ycy5wdXNoKDEsIDEsIDEsIDEsIDEsIDEs
IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEpOworICAgICAgICAgICAgbm9ybWFscy5wdXNo
KDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xKTsKKyAgICAgICAgfQorICAg
ICAgICAvL3BhcnQgcm93cworICAgICAgICBpZiAocGFydGlhbEJvdHRvbVJvdykgeworICAgICAg
ICAgICAgdmFyIHV2QmFzZUJSID0gW107CisgICAgICAgICAgICBhID0gMDsKKyAgICAgICAgICAg
IGIgPSAxIC0gb2Zmc2V0WSAvIHRpbGVIZWlnaHQ7CisgICAgICAgICAgICBjID0gMTsKKyAgICAg
ICAgICAgIGQgPSAxOworICAgICAgICAgICAgdXZCYXNlQlJbMF0gPSBbYSwgYiwgYywgYiwgYywg
ZCwgYSwgZF07CisgICAgICAgICAgICB1dkJhc2VCUlsxXSA9IFthLCBiLCBjLCBiLCBjLCBkLCBh
LCBkXTsKKyAgICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9USUxFIHx8IGZsaXBUaWxlID09PSBfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1JPVykgeworICAgICAg
ICAgICAgICAgIHV2QmFzZUJSWzFdID0gWzEgLSBhLCAxIC0gYiwgMSAtIGMsIDEgLSBiLCAxIC0g
YywgMSAtIGQsIDEgLSBhLCAxIC0gZF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5G
TElQX1RJTEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIk1lc2giXS5GTElQX1JPVykgeworICAgICAgICAgICAgICAgIHV2QmFzZUJSWzFdID0gWzEg
LSBhLCBiLCAxIC0gYywgYiwgMSAtIGMsIGQsIDEgLSBhLCBkXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfVElMRSB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfUk9XKSB7Cisg
ICAgICAgICAgICAgICAgdXZCYXNlQlJbMV0gPSBbYSwgMSAtIGIsIGMsIDEgLSBiLCBjLCAxIC0g
ZCwgYSwgMSAtIGRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7
IHggPCB0aWxlc1g7IHgrKykgeworICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKC1oYWxm
V2lkdGggKyB4ICogdGlsZVdpZHRoICsgYWRqdXN0WCwgc3RhcnRZICsgYWRqdXN0WSwgMCk7Cisg
ICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goLWhhbGZXaWR0aCArICh4ICsgMSkgKiB0aWxl
V2lkdGggKyBhZGp1c3RYLCBzdGFydFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgICAgICBw
b3NpdGlvbnMucHVzaCgtaGFsZldpZHRoICsgKHggKyAxKSAqIHRpbGVXaWR0aCArIGFkanVzdFgs
IHN0YXJ0WSArIG9mZnNldFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgICAgICBwb3NpdGlv
bnMucHVzaCgtaGFsZldpZHRoICsgeCAqIHRpbGVXaWR0aCArIGFkanVzdFgsIHN0YXJ0WSArIG9m
ZnNldFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXgs
IGluZGV4ICsgMSwgaW5kZXggKyAzLCBpbmRleCArIDEsIGluZGV4ICsgMiwgaW5kZXggKyAzKTsK
KyAgICAgICAgICAgICAgICBpbmRleCArPSA0OworICAgICAgICAgICAgICAgIGlmIChmbGlwVGls
ZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfVElM
RSB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVz
aCJdLlJPVEFURV9USUxFIHx8IGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9OX1JPVEFURV9USUxFKSB7CisgICAgICAgICAgICAgICAg
ICAgIHV2cyA9IHV2cy5jb25jYXQodXZCYXNlQlJbKHggKyAxKSAlIDJdKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5GTElQX1JPVyB8fCBmbGlwVGlsZSA9PT0g
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9ST1cgfHwg
ZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5G
TElQX05fUk9UQVRFX1JPVykgeworICAgICAgICAgICAgICAgICAgICB1dnMgPSB1dnMuY29uY2F0
KHV2QmFzZUJSWzFdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHV2cyA9IHV2cy5jb25jYXQodXZCYXNlQlJbMF0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2xvcnMucHVzaCgxLCAxLCAxLCAxLCAx
LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxKTsKKyAgICAgICAgICAgICAgICBub3Jt
YWxzLnB1c2goMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwYXJ0aWFsVG9wUm93KSB7CisgICAgICAg
ICAgICB2YXIgdXZCYXNlVFIgPSBbXTsKKyAgICAgICAgICAgIGEgPSAwOworICAgICAgICAgICAg
YiA9IDA7CisgICAgICAgICAgICBjID0gMTsKKyAgICAgICAgICAgIGQgPSBvZmZzZXRZIC8gdGls
ZUhlaWdodDsKKyAgICAgICAgICAgIHV2QmFzZVRSWzBdID0gW2EsIGIsIGMsIGIsIGMsIGQsIGEs
IGRdOworICAgICAgICAgICAgdXZCYXNlVFJbMV0gPSBbYSwgYiwgYywgYiwgYywgZCwgYSwgZF07
CisgICAgICAgICAgICBpZiAoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIk1lc2giXS5ST1RBVEVfVElMRSB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9ST1cpIHsKKyAgICAgICAgICAg
ICAgICB1dkJhc2VUUlsxXSA9IFsxIC0gYSwgMSAtIGIsIDEgLSBjLCAxIC0gYiwgMSAtIGMsIDEg
LSBkLCAxIC0gYSwgMSAtIGRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZsaXBU
aWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9U
SUxFIHx8IGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJN
ZXNoIl0uRkxJUF9ST1cpIHsKKyAgICAgICAgICAgICAgICB1dkJhc2VUUlsxXSA9IFsxIC0gYSwg
YiwgMSAtIGMsIGIsIDEgLSBjLCBkLCAxIC0gYSwgZF07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Ik1lc2giXS5GTElQX05fUk9UQVRFX1RJTEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5GTElQX05fUk9UQVRFX1JPVykgeworICAgICAg
ICAgICAgICAgIHV2QmFzZVRSWzFdID0gW2EsIDEgLSBiLCBjLCAxIC0gYiwgYywgMSAtIGQsIGEs
IDEgLSBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwg
dGlsZXNYOyB4KyspIHsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCgtaGFsZldpZHRo
ICsgeCAqIHRpbGVXaWR0aCArIGFkanVzdFgsIGVuZFkgLSBvZmZzZXRZICsgYWRqdXN0WSwgMCk7
CisgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goLWhhbGZXaWR0aCArICh4ICsgMSkgKiB0
aWxlV2lkdGggKyBhZGp1c3RYLCBlbmRZIC0gb2Zmc2V0WSArIGFkanVzdFksIDApOworICAgICAg
ICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKC1oYWxmV2lkdGggKyAoeCArIDEpICogdGlsZVdpZHRo
ICsgYWRqdXN0WCwgZW5kWSArIGFkanVzdFksIDApOworICAgICAgICAgICAgICAgIHBvc2l0aW9u
cy5wdXNoKC1oYWxmV2lkdGggKyB4ICogdGlsZVdpZHRoICsgYWRqdXN0WCwgZW5kWSArIGFkanVz
dFksIDApOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRleCwgaW5kZXggKyAxLCBp
bmRleCArIDMsIGluZGV4ICsgMSwgaW5kZXggKyAyLCBpbmRleCArIDMpOworICAgICAgICAgICAg
ICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICAgICAgaWYgKGZsaXBUaWxlID09PSBfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9USUxFIHx8IGZsaXBUaWxl
ID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1RJ
TEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1l
c2giXS5GTElQX05fUk9UQVRFX1RJTEUpIHsKKyAgICAgICAgICAgICAgICAgICAgdXZzID0gdXZz
LmNvbmNhdCh1dkJhc2VUUlsoeCArIHRpbGVzWSkgJSAyXSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9ST1cgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5ST1RBVEVfUk9XIHx8IGZsaXBUaWxl
ID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9OX1JP
VEFURV9ST1cpIHsKKyAgICAgICAgICAgICAgICAgICAgdXZzID0gdXZzLmNvbmNhdCh1dkJhc2VU
Ult0aWxlc1kgJSAyXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICB1dnMgPSB1dnMuY29uY2F0KHV2QmFzZVRSWzBdKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goMSwgMSwgMSwgMSwg
MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSk7CisgICAgICAgICAgICAgICAgbm9y
bWFscy5wdXNoKDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFydGlhbExlZnRDb2wpIHsKKyAgICAg
ICAgICAgIHZhciB1dkJhc2VMQyA9IFtdOworICAgICAgICAgICAgYSA9IDEgLSBvZmZzZXRYIC8g
dGlsZVdpZHRoOworICAgICAgICAgICAgYiA9IDA7CisgICAgICAgICAgICBjID0gMTsKKyAgICAg
ICAgICAgIGQgPSAxOworICAgICAgICAgICAgdXZCYXNlTENbMF0gPSBbYSwgYiwgYywgYiwgYywg
ZCwgYSwgZF07CisgICAgICAgICAgICB1dkJhc2VMQ1sxXSA9IFthLCBiLCBjLCBiLCBjLCBkLCBh
LCBkXTsKKyAgICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9USUxFIHx8IGZsaXBUaWxlID09PSBfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1JPVykgeworICAgICAg
ICAgICAgICAgIHV2QmFzZUxDWzFdID0gWzEgLSBhLCAxIC0gYiwgMSAtIGMsIDEgLSBiLCAxIC0g
YywgMSAtIGQsIDEgLSBhLCAxIC0gZF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5G
TElQX1RJTEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIk1lc2giXS5GTElQX1JPVykgeworICAgICAgICAgICAgICAgIHV2QmFzZUxDWzFdID0gWzEg
LSBhLCBiLCAxIC0gYywgYiwgMSAtIGMsIGQsIDEgLSBhLCBkXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfVElMRSB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfUk9XKSB7Cisg
ICAgICAgICAgICAgICAgdXZCYXNlTENbMV0gPSBbYSwgMSAtIGIsIGMsIDEgLSBiLCBjLCAxIC0g
ZCwgYSwgMSAtIGRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7
IHkgPCB0aWxlc1k7IHkrKykgeworICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHN0YXJ0
WCArIGFkanVzdFgsIC1oYWxmSGVpZ2h0ICsgeSAqIHRpbGVIZWlnaHQgKyBhZGp1c3RZLCAwKTsK
KyAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChzdGFydFggKyBvZmZzZXRYICsgYWRqdXN0
WCwgLWhhbGZIZWlnaHQgKyB5ICogdGlsZUhlaWdodCArIGFkanVzdFksIDApOworICAgICAgICAg
ICAgICAgIHBvc2l0aW9ucy5wdXNoKHN0YXJ0WCArIG9mZnNldFggKyBhZGp1c3RYLCAtaGFsZkhl
aWdodCArICh5ICsgMSkgKiB0aWxlSGVpZ2h0ICsgYWRqdXN0WSwgMCk7CisgICAgICAgICAgICAg
ICAgcG9zaXRpb25zLnB1c2goc3RhcnRYICsgYWRqdXN0WCwgLWhhbGZIZWlnaHQgKyAoeSArIDEp
ICogdGlsZUhlaWdodCArIGFkanVzdFksIDApOworICAgICAgICAgICAgICAgIGluZGljZXMucHVz
aChpbmRleCwgaW5kZXggKyAxLCBpbmRleCArIDMsIGluZGV4ICsgMSwgaW5kZXggKyAyLCBpbmRl
eCArIDMpOworICAgICAgICAgICAgICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICAgICAgaWYg
KGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0u
RkxJUF9USUxFIHx8IGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJNZXNoIl0uUk9UQVRFX1RJTEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5GTElQX05fUk9UQVRFX1RJTEUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdXZzID0gdXZzLmNvbmNhdCh1dkJhc2VMQ1soeSArIDEpICUgMl0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGlwVGlsZSA9PT0gX21l
c2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfUk9XIHx8IGZsaXBU
aWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRF
X1JPVyB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
TWVzaCJdLkZMSVBfTl9ST1RBVEVfUk9XKSB7CisgICAgICAgICAgICAgICAgICAgIHV2cyA9IHV2
cy5jb25jYXQodXZCYXNlTENbeSAlIDJdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHV2cyA9IHV2cy5jb25jYXQodXZCYXNl
TENbMF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2xvcnMucHVzaCgx
LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxKTsKKyAgICAgICAg
ICAgICAgICBub3JtYWxzLnB1c2goMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwg
LTEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwYXJ0aWFsUmlnaHRD
b2wpIHsKKyAgICAgICAgICAgIHZhciB1dkJhc2VSQyA9IFtdOworICAgICAgICAgICAgYSA9IDA7
CisgICAgICAgICAgICBiID0gMDsKKyAgICAgICAgICAgIGMgPSBvZmZzZXRYIC8gdGlsZUhlaWdo
dDsKKyAgICAgICAgICAgIGQgPSAxOworICAgICAgICAgICAgdXZCYXNlUkNbMF0gPSBbYSwgYiwg
YywgYiwgYywgZCwgYSwgZF07CisgICAgICAgICAgICB1dkJhc2VSQ1sxXSA9IFthLCBiLCBjLCBi
LCBjLCBkLCBhLCBkXTsKKyAgICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9USUxFIHx8IGZsaXBUaWxlID09
PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1JPVykg
eworICAgICAgICAgICAgICAgIHV2QmFzZVJDWzFdID0gWzEgLSBhLCAxIC0gYiwgMSAtIGMsIDEg
LSBiLCAxIC0gYywgMSAtIGQsIDEgLSBhLCAxIC0gZF07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Ik1lc2giXS5GTElQX1RJTEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIk1lc2giXS5GTElQX1JPVykgeworICAgICAgICAgICAgICAgIHV2QmFzZVJD
WzFdID0gWzEgLSBhLCBiLCAxIC0gYywgYiwgMSAtIGMsIGQsIDEgLSBhLCBkXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfVElMRSB8fCBmbGlwVGlsZSA9PT0g
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVf
Uk9XKSB7CisgICAgICAgICAgICAgICAgdXZCYXNlUkNbMV0gPSBbYSwgMSAtIGIsIGMsIDEgLSBi
LCBjLCAxIC0gZCwgYSwgMSAtIGRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2
YXIgeSA9IDA7IHkgPCB0aWxlc1k7IHkrKykgeworICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5w
dXNoKGVuZFggLSBvZmZzZXRYICsgYWRqdXN0WCwgLWhhbGZIZWlnaHQgKyB5ICogdGlsZUhlaWdo
dCArIGFkanVzdFksIDApOworICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKGVuZFggKyBh
ZGp1c3RYLCAtaGFsZkhlaWdodCArIHkgKiB0aWxlSGVpZ2h0ICsgYWRqdXN0WSwgMCk7CisgICAg
ICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goZW5kWCArIGFkanVzdFgsIC1oYWxmSGVpZ2h0ICsg
KHkgKyAxKSAqIHRpbGVIZWlnaHQgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgICAgICBwb3Np
dGlvbnMucHVzaChlbmRYIC0gb2Zmc2V0WCArIGFkanVzdFgsIC1oYWxmSGVpZ2h0ICsgKHkgKyAx
KSAqIHRpbGVIZWlnaHQgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1
c2goaW5kZXgsIGluZGV4ICsgMSwgaW5kZXggKyAzLCBpbmRleCArIDEsIGluZGV4ICsgMiwgaW5k
ZXggKyAzKTsKKyAgICAgICAgICAgICAgICBpbmRleCArPSA0OworICAgICAgICAgICAgICAgIGlm
IChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJd
LkZMSVBfVElMRSB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTWVzaCJdLlJPVEFURV9USUxFIHx8IGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9OX1JPVEFURV9USUxFKSB7CisgICAgICAg
ICAgICAgICAgICAgIHV2cyA9IHV2cy5jb25jYXQodXZCYXNlUkNbKHkgKyB0aWxlc1gpICUgMl0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGlwVGlsZSA9
PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfUk9XIHx8
IGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0u
Uk9UQVRFX1JPVyB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfUk9XKSB7CisgICAgICAgICAgICAgICAgICAgIHV2
cyA9IHV2cy5jb25jYXQodXZCYXNlUkNbeSAlIDJdKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHV2cyA9IHV2cy5jb25jYXQo
dXZCYXNlUkNbMF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2xvcnMu
cHVzaCgxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxKTsKKyAg
ICAgICAgICAgICAgICBub3JtYWxzLnB1c2goMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwg
MCwgMCwgLTEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHZhciBzaWRl
T3JpZW50YXRpb24gPSAob3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPT09IDApID8gMCA6IG9wdGlv
bnMuc2lkZU9yaWVudGF0aW9uIHx8IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVydGV4RGF0YSJdLkRFRkFVTFRTSURFOworICAgIC8vIHNpZGVzCisgICAg
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhEYXRh
Il0uX0NvbXB1dGVTaWRlcyhzaWRlT3JpZW50YXRpb24sIHBvc2l0aW9ucywgaW5kaWNlcywgbm9y
bWFscywgdXZzLCBvcHRpb25zLmZyb250VVZzLCBvcHRpb25zLmJhY2tVVnMpOworICAgIC8vIFJl
c3VsdAorICAgIHZhciB2ZXJ0ZXhEYXRhID0gbmV3IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4RGF0YSJdKCk7CisgICAgdmVydGV4RGF0YS5pbmRp
Y2VzID0gaW5kaWNlczsKKyAgICB2ZXJ0ZXhEYXRhLnBvc2l0aW9ucyA9IHBvc2l0aW9uczsKKyAg
ICB2ZXJ0ZXhEYXRhLm5vcm1hbHMgPSBub3JtYWxzOworICAgIHZlcnRleERhdGEudXZzID0gdXZz
OworICAgIHZhciB0b3RhbENvbG9ycyA9IChzaWRlT3JpZW50YXRpb24gPT09IF9tZXNoX3ZlcnRl
eERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4RGF0YSJdLkRPVUJMRVNJ
REUpID8gY29sb3JzLmNvbmNhdChjb2xvcnMpIDogY29sb3JzOworICAgIHZlcnRleERhdGEuY29s
b3JzID0gdG90YWxDb2xvcnM7CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworLyoqCisgKiBD
bGFzcyBjb250YWluaW5nIHN0YXRpYyBmdW5jdGlvbnMgdG8gaGVscCBwcm9jZWR1cmFsbHkgYnVp
bGQgbWVzaGVzCisgKi8KK3ZhciBUaWxlZFBsYW5lQnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBUaWxlZFBsYW5lQnVpbGRlcigpIHsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHRpbGVkIHBsYW5lIG1lc2gKKyAgICAgKiAqIFRoZSBw
YXJhbWV0ZXIgYHBhdHRlcm5gIHdpbGwsIGRlcGVuZGluZyBvbiB2YWx1ZSwgZG8gbm90aGluZyBv
cgorICAgICAqICogKiBmbGlwIChyZWZsZWN0IGFib3V0IGNlbnRyYWwgdmVydGljYWwpIGFsdGVy
bmF0ZSB0aWxlcyBhY3Jvc3MgYW5kIHVwCisgICAgICogKiAqIGZsaXAgZXZlcnkgdGlsZSBvbiBh
bHRlcm5hdGUgcm93cworICAgICAqICogKiByb3RhdGUgKDE4MCBkZWdzKSBhbHRlcm5hdGUgdGls
ZXMgYWNyb3NzIGFuZCB1cAorICAgICAqICogKiByb3RhdGUgZXZlcnkgdGlsZSBvbiBhbHRlcm5h
dGUgcm93cworICAgICAqICogKiBmbGlwIGFuZCByb3RhdGUgYWx0ZXJuYXRlIHRpbGVzIGFjcm9z
cyBhbmQgdXAKKyAgICAgKiAqICogZmxpcCBhbmQgcm90YXRlIGV2ZXJ5IHRpbGUgb24gYWx0ZXJu
YXRlIHJvd3MKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHRpbGVTaXplYCBzZXRzIHRoZSBzaXpl
IChmbG9hdCkgb2YgZWFjaCB0aWxlIHNpZGUgKGRlZmF1bHQgMSkKKyAgICAgKiAqIFlvdSBjYW4g
c2V0IHNvbWUgZGlmZmVyZW50IHRpbGUgZGltZW5zaW9ucyBieSB1c2luZyB0aGUgcGFyYW1ldGVy
cyBgdGlsZVdpZHRoYCBhbmQgYHRpbGVIZWlnaHRgIChib3RoIGJ5IGRlZmF1bHQgaGF2ZSB0aGUg
c2FtZSB2YWx1ZSBvZiBgdGlsZVNpemVgKQorICAgICAqICogSWYgeW91IGNyZWF0ZSBhIGRvdWJs
ZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGlt
YWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJlc3BlY3RpdmVseSBvbiB0aGUgZnJvbnQgYW5kIHRoZSBi
YWNrIHNpZGVzIHdpdGggdGhlIHBhcmFtZXRlcnMgYGZyb250VVZzYCBhbmQgYGJhY2tVVnNgIChW
ZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24x
MDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRhdGlvbgorICAgICAqICogc2lk
ZU9yaWVudGF0aW9uIG9wdGlvbmFsIGFuZCB0YWtlcyB0aGUgdmFsdWVzIDogTWVzaC5GUk9OVFNJ
REUgKGRlZmF1bHQpLCBNZXNoLkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lERQorICAgICAqICog
ZnJvbnRVdnMgb25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gs
IHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBh
bmQgYXBwbHkgb24gdGhlIGZyb250IHNpZGUsIG9wdGlvbmFsLCBkZWZhdWx0IHZlY3RvcjQgKDAs
IDAsIDEsIDEpCisgICAgICogKiBiYWNrVVZzIG9ubHkgdXNhYmxlIHdoZW4geW91IGNyZWF0ZSBh
IGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0
dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBiYWNrIHNpZGUsIG9wdGlvbmFsLCBk
ZWZhdWx0IHZlY3RvcjQgKDAsIDAsIDEsIDEpCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9zZXRfc2hhcGVzI2JveAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmlu
ZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRo
ZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRl
ZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgYm94IG1lc2gKKyAg
ICAgKi8KKyAgICBUaWxlZFBsYW5lQnVpbGRlci5DcmVhdGVUaWxlZFBsYW5lID0gZnVuY3Rpb24g
KG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7
IHNjZW5lID0gbnVsbDsgfQorICAgICAgICB2YXIgcGxhbmUgPSBuZXcgX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdKG5hbWUsIHNjZW5lKTsKKyAgICAgICAgb3B0aW9u
cy5zaWRlT3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJN
ZXNoIl0uX0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24p
OworICAgICAgICBwbGFuZS5fb3JpZ2luYWxCdWlsZGVyU2lkZU9yaWVudGF0aW9uID0gb3B0aW9u
cy5zaWRlT3JpZW50YXRpb247CisgICAgICAgIHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4
RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlVGls
ZWRQbGFuZShvcHRpb25zKTsKKyAgICAgICAgdmVydGV4RGF0YS5hcHBseVRvTWVzaChwbGFuZSwg
b3B0aW9ucy51cGRhdGFibGUpOworICAgICAgICByZXR1cm4gcGxhbmU7CisgICAgfTsKKyAgICBy
ZXR1cm4gVGlsZWRQbGFuZUJ1aWxkZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL01lc2hlcy9CdWlsZGVycy90b3J1c0J1aWxkZXIudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hlcy9CdWlsZGVycy90
b3J1c0J1aWxkZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogVG9ydXNCdWlsZGVyICovCisvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvcnVzQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gVG9ydXNCdWlsZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9y
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2ggKi8gIi4vTWVzaGVz
L21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF92ZXJ0ZXhEYXRhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9t
ZXNoLnZlcnRleERhdGEgKi8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50cyIpOworCisKKwor
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhEYXRh
Il0uQ3JlYXRlVG9ydXMgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgIHZhciBpbmRpY2VzID0g
W107CisgICAgdmFyIHBvc2l0aW9ucyA9IFtdOworICAgIHZhciBub3JtYWxzID0gW107CisgICAg
dmFyIHV2cyA9IFtdOworICAgIHZhciBkaWFtZXRlciA9IG9wdGlvbnMuZGlhbWV0ZXIgfHwgMTsK
KyAgICB2YXIgdGhpY2tuZXNzID0gb3B0aW9ucy50aGlja25lc3MgfHwgMC41OworICAgIHZhciB0
ZXNzZWxsYXRpb24gPSBvcHRpb25zLnRlc3NlbGxhdGlvbiB8fCAxNjsKKyAgICB2YXIgc2lkZU9y
aWVudGF0aW9uID0gKG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uID09PSAwKSA/IDAgOiBvcHRpb25z
LnNpZGVPcmllbnRhdGlvbiB8fCBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlcnRleERhdGEiXS5ERUZBVUxUU0lERTsKKyAgICB2YXIgc3RyaWRlID0gdGVz
c2VsbGF0aW9uICsgMTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8PSB0ZXNzZWxsYXRpb247IGkr
KykgeworICAgICAgICB2YXIgdSA9IGkgLyB0ZXNzZWxsYXRpb247CisgICAgICAgIHZhciBvdXRl
ckFuZ2xlID0gaSAqIE1hdGguUEkgKiAyLjAgLyB0ZXNzZWxsYXRpb24gLSBNYXRoLlBJIC8gMi4w
OworICAgICAgICB2YXIgdHJhbnNmb3JtID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlRyYW5zbGF0aW9uKGRpYW1ldGVyIC8gMi4wLCAw
LCAwKS5tdWx0aXBseShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTWF0cml4Il0uUm90YXRpb25ZKG91dGVyQW5nbGUpKTsKKyAgICAgICAgZm9yICh2YXIg
aiA9IDA7IGogPD0gdGVzc2VsbGF0aW9uOyBqKyspIHsKKyAgICAgICAgICAgIHZhciB2ID0gMSAt
IGogLyB0ZXNzZWxsYXRpb247CisgICAgICAgICAgICB2YXIgaW5uZXJBbmdsZSA9IGogKiBNYXRo
LlBJICogMi4wIC8gdGVzc2VsbGF0aW9uICsgTWF0aC5QSTsKKyAgICAgICAgICAgIHZhciBkeCA9
IE1hdGguY29zKGlubmVyQW5nbGUpOworICAgICAgICAgICAgdmFyIGR5ID0gTWF0aC5zaW4oaW5u
ZXJBbmdsZSk7CisgICAgICAgICAgICAvLyBDcmVhdGUgYSB2ZXJ0ZXguCisgICAgICAgICAgICB2
YXIgbm9ybWFsID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0oZHgsIGR5LCAwKTsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9
IG5vcm1hbC5zY2FsZSh0aGlja25lc3MgLyAyKTsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlQ29v
cmRpbmF0ZSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMiJdKHUsIHYpOworICAgICAgICAgICAgcG9zaXRpb24gPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9y
bUNvb3JkaW5hdGVzKHBvc2l0aW9uLCB0cmFuc2Zvcm0pOworICAgICAgICAgICAgbm9ybWFsID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMi
XS5UcmFuc2Zvcm1Ob3JtYWwobm9ybWFsLCB0cmFuc2Zvcm0pOworICAgICAgICAgICAgcG9zaXRp
b25zLnB1c2gocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7CisgICAgICAgICAg
ICBub3JtYWxzLnB1c2gobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7CisgICAgICAgICAg
ICB1dnMucHVzaCh0ZXh0dXJlQ29vcmRpbmF0ZS54LCB0ZXh0dXJlQ29vcmRpbmF0ZS55KTsKKyAg
ICAgICAgICAgIC8vIEFuZCBjcmVhdGUgaW5kaWNlcyBmb3IgdHdvIHRyaWFuZ2xlcy4KKyAgICAg
ICAgICAgIHZhciBuZXh0SSA9IChpICsgMSkgJSBzdHJpZGU7CisgICAgICAgICAgICB2YXIgbmV4
dEogPSAoaiArIDEpICUgc3RyaWRlOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGkgKiBzdHJp
ZGUgKyBqKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChpICogc3RyaWRlICsgbmV4dEopOwor
ICAgICAgICAgICAgaW5kaWNlcy5wdXNoKG5leHRJICogc3RyaWRlICsgaik7CisgICAgICAgICAg
ICBpbmRpY2VzLnB1c2goaSAqIHN0cmlkZSArIG5leHRKKTsKKyAgICAgICAgICAgIGluZGljZXMu
cHVzaChuZXh0SSAqIHN0cmlkZSArIG5leHRKKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChu
ZXh0SSAqIHN0cmlkZSArIGopOworICAgICAgICB9CisgICAgfQorICAgIC8vIFNpZGVzCisgICAg
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhEYXRh
Il0uX0NvbXB1dGVTaWRlcyhzaWRlT3JpZW50YXRpb24sIHBvc2l0aW9ucywgaW5kaWNlcywgbm9y
bWFscywgdXZzLCBvcHRpb25zLmZyb250VVZzLCBvcHRpb25zLmJhY2tVVnMpOworICAgIC8vIFJl
c3VsdAorICAgIHZhciB2ZXJ0ZXhEYXRhID0gbmV3IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4RGF0YSJdKCk7CisgICAgdmVydGV4RGF0YS5pbmRp
Y2VzID0gaW5kaWNlczsKKyAgICB2ZXJ0ZXhEYXRhLnBvc2l0aW9ucyA9IHBvc2l0aW9uczsKKyAg
ICB2ZXJ0ZXhEYXRhLm5vcm1hbHMgPSBub3JtYWxzOworICAgIHZlcnRleERhdGEudXZzID0gdXZz
OworICAgIHJldHVybiB2ZXJ0ZXhEYXRhOworfTsKK19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk1lc2giXS5DcmVhdGVUb3J1cyA9IGZ1bmN0aW9uIChuYW1lLCBkaWFtZXRlciwg
dGhpY2tuZXNzLCB0ZXNzZWxsYXRpb24sIHNjZW5lLCB1cGRhdGFibGUsIHNpZGVPcmllbnRhdGlv
bikgeworICAgIHZhciBvcHRpb25zID0geworICAgICAgICBkaWFtZXRlcjogZGlhbWV0ZXIsCisg
ICAgICAgIHRoaWNrbmVzczogdGhpY2tuZXNzLAorICAgICAgICB0ZXNzZWxsYXRpb246IHRlc3Nl
bGxhdGlvbiwKKyAgICAgICAgc2lkZU9yaWVudGF0aW9uOiBzaWRlT3JpZW50YXRpb24sCisgICAg
ICAgIHVwZGF0YWJsZTogdXBkYXRhYmxlCisgICAgfTsKKyAgICByZXR1cm4gVG9ydXNCdWlsZGVy
LkNyZWF0ZVRvcnVzKG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKK307CisvKioKKyAqIENsYXNzIGNv
bnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWlsZCBtZXNo
ZXMKKyAqLwordmFyIFRvcnVzQnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICBmdW5jdGlvbiBUb3J1c0J1aWxkZXIoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSB0b3J1cyBtZXNoCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBkaWFtZXRlcmAgc2V0
cyB0aGUgZGlhbWV0ZXIgc2l6ZSAoZmxvYXQpIG9mIHRoZSB0b3J1cyAoZGVmYXVsdCAxKQorICAg
ICAqICogVGhlIHBhcmFtZXRlciBgdGhpY2tuZXNzYCBzZXRzIHRoZSBkaWFtZXRlciBzaXplIG9m
IHRoZSB0dWJlIG9mIHRoZSB0b3J1cyAoZmxvYXQsIGRlZmF1bHQgMC41KQorICAgICAqICogVGhl
IHBhcmFtZXRlciBgdGVzc2VsbGF0aW9uYCBzZXRzIHRoZSBudW1iZXIgb2YgdG9ydXMgc2lkZXMg
KHBvc3RpdmUgaW50ZWdlciwgZGVmYXVsdCAxNikKKyAgICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQg
dGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2gu
RlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJBQllMT04uTWVz
aC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gs
IHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBh
bmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0
aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBEZXRh
aWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9i
YXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUg
c2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAo
ZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNo
YW5nZSBvbmNlIGNyZWF0ZWQuCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBv
ZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNl
ZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9z
dGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSB0b3J1cyBtZXNoCisgICAgICogQHNlZSBo
dHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9zZXRfc2hhcGVzI3RvcnVzCisgICAgICov
CisgICAgVG9ydXNCdWlsZGVyLkNyZWF0ZVRvcnVzID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMs
IHNjZW5lKSB7CisgICAgICAgIHZhciB0b3J1cyA9IG5ldyBfbWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJNZXNoIl0obmFtZSwgc2NlbmUpOworICAgICAgICBvcHRpb25zLnNpZGVP
cmllbnRhdGlvbiA9IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5f
R2V0RGVmYXVsdFNpZGVPcmllbnRhdGlvbihvcHRpb25zLnNpZGVPcmllbnRhdGlvbik7CisgICAg
ICAgIHRvcnVzLl9vcmlnaW5hbEJ1aWxkZXJTaWRlT3JpZW50YXRpb24gPSBvcHRpb25zLnNpZGVP
cmllbnRhdGlvbjsKKyAgICAgICAgdmFyIHZlcnRleERhdGEgPSBfbWVzaF92ZXJ0ZXhEYXRhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleERhdGEiXS5DcmVhdGVUb3J1cyhvcHRp
b25zKTsKKyAgICAgICAgdmVydGV4RGF0YS5hcHBseVRvTWVzaCh0b3J1cywgb3B0aW9ucy51cGRh
dGFibGUpOworICAgICAgICByZXR1cm4gdG9ydXM7CisgICAgfTsKKyAgICByZXR1cm4gVG9ydXNC
dWlsZGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRl
cnMvdG9ydXNLbm90QnVpbGRlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hlcy9CdWlsZGVycy90b3J1c0tub3RC
dWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBUb3J1c0tub3RCdWlsZGVyICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvcnVzS25vdEJ1aWxkZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFRvcnVzS25vdEJ1aWxkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMv
bWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaCAq
LyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoX3Zl
cnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL21lc2gudmVydGV4RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0ZXhEYXRhLnRz
Iik7CisKKworCitfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlcnRleERhdGEiXS5DcmVhdGVUb3J1c0tub3QgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAg
IHZhciBpbmRpY2VzID0gbmV3IEFycmF5KCk7CisgICAgdmFyIHBvc2l0aW9ucyA9IG5ldyBBcnJh
eSgpOworICAgIHZhciBub3JtYWxzID0gbmV3IEFycmF5KCk7CisgICAgdmFyIHV2cyA9IG5ldyBB
cnJheSgpOworICAgIHZhciByYWRpdXMgPSBvcHRpb25zLnJhZGl1cyB8fCAyOworICAgIHZhciB0
dWJlID0gb3B0aW9ucy50dWJlIHx8IDAuNTsKKyAgICB2YXIgcmFkaWFsU2VnbWVudHMgPSBvcHRp
b25zLnJhZGlhbFNlZ21lbnRzIHx8IDMyOworICAgIHZhciB0dWJ1bGFyU2VnbWVudHMgPSBvcHRp
b25zLnR1YnVsYXJTZWdtZW50cyB8fCAzMjsKKyAgICB2YXIgcCA9IG9wdGlvbnMucCB8fCAyOwor
ICAgIHZhciBxID0gb3B0aW9ucy5xIHx8IDM7CisgICAgdmFyIHNpZGVPcmllbnRhdGlvbiA9IChv
cHRpb25zLnNpZGVPcmllbnRhdGlvbiA9PT0gMCkgPyAwIDogb3B0aW9ucy5zaWRlT3JpZW50YXRp
b24gfHwgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0
ZXhEYXRhIl0uREVGQVVMVFNJREU7CisgICAgLy8gSGVscGVyCisgICAgdmFyIGdldFBvcyA9IGZ1
bmN0aW9uIChhbmdsZSkgeworICAgICAgICB2YXIgY3UgPSBNYXRoLmNvcyhhbmdsZSk7CisgICAg
ICAgIHZhciBzdSA9IE1hdGguc2luKGFuZ2xlKTsKKyAgICAgICAgdmFyIHF1T3ZlclAgPSBxIC8g
cCAqIGFuZ2xlOworICAgICAgICB2YXIgY3MgPSBNYXRoLmNvcyhxdU92ZXJQKTsKKyAgICAgICAg
dmFyIHR4ID0gcmFkaXVzICogKDIgKyBjcykgKiAwLjUgKiBjdTsKKyAgICAgICAgdmFyIHR5ID0g
cmFkaXVzICogKDIgKyBjcykgKiBzdSAqIDAuNTsKKyAgICAgICAgdmFyIHR6ID0gcmFkaXVzICog
TWF0aC5zaW4ocXVPdmVyUCkgKiAwLjU7CisgICAgICAgIHJldHVybiBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSh0eCwgdHksIHR6
KTsKKyAgICB9OworICAgIC8vIFZlcnRpY2VzCisgICAgdmFyIGk7CisgICAgdmFyIGo7CisgICAg
Zm9yIChpID0gMDsgaSA8PSByYWRpYWxTZWdtZW50czsgaSsrKSB7CisgICAgICAgIHZhciBtb2RJ
ID0gaSAlIHJhZGlhbFNlZ21lbnRzOworICAgICAgICB2YXIgdSA9IG1vZEkgLyByYWRpYWxTZWdt
ZW50cyAqIDIgKiBwICogTWF0aC5QSTsKKyAgICAgICAgdmFyIHAxID0gZ2V0UG9zKHUpOworICAg
ICAgICB2YXIgcDIgPSBnZXRQb3ModSArIDAuMDEpOworICAgICAgICB2YXIgdGFuZyA9IHAyLnN1
YnRyYWN0KHAxKTsKKyAgICAgICAgdmFyIG4gPSBwMi5hZGQocDEpOworICAgICAgICB2YXIgYml0
YW4gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVj
dG9yMyJdLkNyb3NzKHRhbmcsIG4pOworICAgICAgICBuID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Dcm9zcyhiaXRhbiwgdGFuZyk7
CisgICAgICAgIGJpdGFuLm5vcm1hbGl6ZSgpOworICAgICAgICBuLm5vcm1hbGl6ZSgpOworICAg
ICAgICBmb3IgKGogPSAwOyBqIDwgdHVidWxhclNlZ21lbnRzOyBqKyspIHsKKyAgICAgICAgICAg
IHZhciBtb2RKID0gaiAlIHR1YnVsYXJTZWdtZW50czsKKyAgICAgICAgICAgIHZhciB2ID0gbW9k
SiAvIHR1YnVsYXJTZWdtZW50cyAqIDIgKiBNYXRoLlBJOworICAgICAgICAgICAgdmFyIGN4ID0g
LXR1YmUgKiBNYXRoLmNvcyh2KTsKKyAgICAgICAgICAgIHZhciBjeSA9IHR1YmUgKiBNYXRoLnNp
bih2KTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHAxLnggKyBjeCAqIG4ueCArIGN5ICog
Yml0YW4ueCk7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChwMS55ICsgY3ggKiBuLnkgKyBj
eSAqIGJpdGFuLnkpOworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2gocDEueiArIGN4ICogbi56
ICsgY3kgKiBiaXRhbi56KTsKKyAgICAgICAgICAgIHV2cy5wdXNoKGkgLyByYWRpYWxTZWdtZW50
cyk7CisgICAgICAgICAgICB1dnMucHVzaChqIC8gdHVidWxhclNlZ21lbnRzKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgcmFkaWFsU2VnbWVudHM7IGkrKykgeworICAg
ICAgICBmb3IgKGogPSAwOyBqIDwgdHVidWxhclNlZ21lbnRzOyBqKyspIHsKKyAgICAgICAgICAg
IHZhciBqTmV4dCA9IChqICsgMSkgJSB0dWJ1bGFyU2VnbWVudHM7CisgICAgICAgICAgICB2YXIg
YSA9IGkgKiB0dWJ1bGFyU2VnbWVudHMgKyBqOworICAgICAgICAgICAgdmFyIGIgPSAoaSArIDEp
ICogdHVidWxhclNlZ21lbnRzICsgajsKKyAgICAgICAgICAgIHZhciBjID0gKGkgKyAxKSAqIHR1
YnVsYXJTZWdtZW50cyArIGpOZXh0OworICAgICAgICAgICAgdmFyIGQgPSBpICogdHVidWxhclNl
Z21lbnRzICsgak5leHQ7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goZCk7CisgICAgICAgICAg
ICBpbmRpY2VzLnB1c2goYik7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goYSk7CisgICAgICAg
ICAgICBpbmRpY2VzLnB1c2goZCk7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goYyk7CisgICAg
ICAgICAgICBpbmRpY2VzLnB1c2goYik7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gTm9ybWFs
cworICAgIF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVy
dGV4RGF0YSJdLkNvbXB1dGVOb3JtYWxzKHBvc2l0aW9ucywgaW5kaWNlcywgbm9ybWFscyk7Cisg
ICAgLy8gU2lkZXMKKyAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlZlcnRleERhdGEiXS5fQ29tcHV0ZVNpZGVzKHNpZGVPcmllbnRhdGlvbiwgcG9zaXRp
b25zLCBpbmRpY2VzLCBub3JtYWxzLCB1dnMsIG9wdGlvbnMuZnJvbnRVVnMsIG9wdGlvbnMuYmFj
a1VWcyk7CisgICAgLy8gUmVzdWx0CisgICAgdmFyIHZlcnRleERhdGEgPSBuZXcgX21lc2hfdmVy
dGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAg
ICB2ZXJ0ZXhEYXRhLmluZGljZXMgPSBpbmRpY2VzOworICAgIHZlcnRleERhdGEucG9zaXRpb25z
ID0gcG9zaXRpb25zOworICAgIHZlcnRleERhdGEubm9ybWFscyA9IG5vcm1hbHM7CisgICAgdmVy
dGV4RGF0YS51dnMgPSB1dnM7CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworX21lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZVRvcnVzS25vdCA9IGZ1bmN0
aW9uIChuYW1lLCByYWRpdXMsIHR1YmUsIHJhZGlhbFNlZ21lbnRzLCB0dWJ1bGFyU2VnbWVudHMs
IHAsIHEsIHNjZW5lLCB1cGRhdGFibGUsIHNpZGVPcmllbnRhdGlvbikgeworICAgIHZhciBvcHRp
b25zID0geworICAgICAgICByYWRpdXM6IHJhZGl1cywKKyAgICAgICAgdHViZTogdHViZSwKKyAg
ICAgICAgcmFkaWFsU2VnbWVudHM6IHJhZGlhbFNlZ21lbnRzLAorICAgICAgICB0dWJ1bGFyU2Vn
bWVudHM6IHR1YnVsYXJTZWdtZW50cywKKyAgICAgICAgcDogcCwKKyAgICAgICAgcTogcSwKKyAg
ICAgICAgc2lkZU9yaWVudGF0aW9uOiBzaWRlT3JpZW50YXRpb24sCisgICAgICAgIHVwZGF0YWJs
ZTogdXBkYXRhYmxlCisgICAgfTsKKyAgICByZXR1cm4gVG9ydXNLbm90QnVpbGRlci5DcmVhdGVU
b3J1c0tub3QobmFtZSwgb3B0aW9ucywgc2NlbmUpOworfTsKKy8qKgorICogQ2xhc3MgY29udGFp
bmluZyBzdGF0aWMgZnVuY3Rpb25zIHRvIGhlbHAgcHJvY2VkdXJhbGx5IGJ1aWxkIG1lc2hlcwor
ICovCit2YXIgVG9ydXNLbm90QnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICBmdW5jdGlvbiBUb3J1c0tub3RCdWlsZGVyKCkgeworICAgIH0KKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgdG9ydXMga25vdCBtZXNoCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGByYWRp
dXNgIHNldHMgdGhlIGdsb2JhbCByYWRpdXMgc2l6ZSAoZmxvYXQpIG9mIHRoZSB0b3J1cyBrbm90
IChkZWZhdWx0IDIpCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGByYWRpYWxTZWdtZW50c2Agc2V0
cyB0aGUgbnVtYmVyIG9mIHNpZGVzIG9uIGVhY2ggdHViZSBzZWdtZW50cyAocG9zaXRpdmUgaW50
ZWdlciwgZGVmYXVsdCAzMikKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHR1YnVsYXJTZWdtZW50
c2Agc2V0cyB0aGUgbnVtYmVyIG9mIHR1YmVzIHRvIGRlY29tcG9zZSB0aGUga25vdCBpbnRvIChw
b3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDMyKQorICAgICAqICogVGhlIHBhcmFtZXRlcnMgYHBg
IGFuZCBgcWAgYXJlIHRoZSBudW1iZXIgb2Ygd2luZGluZ3Mgb24gZWFjaCBheGlzIChwb3NpdGl2
ZSBpbnRlZ2VycywgZGVmYXVsdCAyIGFuZCAzKQorICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0
aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5G
Uk9OVFNJREUgKGRlZmF1bHQpLCBCQUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNo
LkRPVUJMRVNJREUKKyAgICAgKiAqIElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwg
eW91IGNhbiBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFu
ZCBzdGljayByZXNwZWN0aXZlbHkgb24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRo
IHRoZSBwYXJhbWV0ZXJzIGBmcm9udFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFp
bCBoZXJlIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jh
c2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBz
ZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChk
ZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hh
bmdlIG9uY2UgY3JlYXRlZC4KKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9m
IHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2Vk
IHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0
aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdGhlIHRvcnVzIGtub3QgbWVzaAorICAgICAqIEBz
ZWUgIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3NldF9zaGFwZXMjdG9ydXMta25v
dAorICAgICAqLworICAgIFRvcnVzS25vdEJ1aWxkZXIuQ3JlYXRlVG9ydXNLbm90ID0gZnVuY3Rp
b24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIHZhciB0b3J1c0tub3QgPSBuZXcg
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdKG5hbWUsIHNjZW5lKTsK
KyAgICAgICAgb3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJNZXNoIl0uX0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5z
aWRlT3JpZW50YXRpb24pOworICAgICAgICB0b3J1c0tub3QuX29yaWdpbmFsQnVpbGRlclNpZGVP
cmllbnRhdGlvbiA9IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uOworICAgICAgICB2YXIgdmVydGV4
RGF0YSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVy
dGV4RGF0YSJdLkNyZWF0ZVRvcnVzS25vdChvcHRpb25zKTsKKyAgICAgICAgdmVydGV4RGF0YS5h
cHBseVRvTWVzaCh0b3J1c0tub3QsIG9wdGlvbnMudXBkYXRhYmxlKTsKKyAgICAgICAgcmV0dXJu
IHRvcnVzS25vdDsKKyAgICB9OworICAgIHJldHVybiBUb3J1c0tub3RCdWlsZGVyOworfSgpKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdHViZUJ1aWxkZXIu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vTWVzaGVzL0J1aWxkZXJzL3R1YmVCdWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogVHVi
ZUJ1aWxkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHViZUJ1aWxk
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFR1YmVCdWlsZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIu
L01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cmliYm9uQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9yaWJib25CdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9yaWJib25C
dWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfcGF0aF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWF0aHMvbWF0aC5wYXRoICovICIuL01hdGhzL21hdGgucGF0aC50cyIpOworCisKKworCitf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uQ3JlYXRlVHViZSA9IGZ1
bmN0aW9uIChuYW1lLCBwYXRoLCByYWRpdXMsIHRlc3NlbGxhdGlvbiwgcmFkaXVzRnVuY3Rpb24s
IGNhcCwgc2NlbmUsIHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uLCBpbnN0YW5jZSkgeworICAg
IHZhciBvcHRpb25zID0geworICAgICAgICBwYXRoOiBwYXRoLAorICAgICAgICByYWRpdXM6IHJh
ZGl1cywKKyAgICAgICAgdGVzc2VsbGF0aW9uOiB0ZXNzZWxsYXRpb24sCisgICAgICAgIHJhZGl1
c0Z1bmN0aW9uOiByYWRpdXNGdW5jdGlvbiwKKyAgICAgICAgYXJjOiAxLAorICAgICAgICBjYXA6
IGNhcCwKKyAgICAgICAgdXBkYXRhYmxlOiB1cGRhdGFibGUsCisgICAgICAgIHNpZGVPcmllbnRh
dGlvbjogc2lkZU9yaWVudGF0aW9uLAorICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UKKyAgICB9
OworICAgIHJldHVybiBUdWJlQnVpbGRlci5DcmVhdGVUdWJlKG5hbWUsIG9wdGlvbnMsIHNjZW5l
KTsKK307CisvKioKKyAqIENsYXNzIGNvbnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxw
IHByb2NlZHVyYWxseSBidWlsZCBtZXNoZXMKKyAqLwordmFyIFR1YmVCdWlsZGVyID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFR1YmVCdWlsZGVyKCkgeworICAg
IH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgdHViZSBtZXNoLgorICAgICAqIFRoZSB0dWJl
IGlzIGEgcGFyYW1ldHJpYyBzaGFwZS4gSXQgaGFzIG5vIHByZWRlZmluZWQgc2hhcGUuIEl0cyBm
aW5hbCBzaGFwZSB3aWxsIGRlcGVuZCBvbiB0aGUgaW5wdXQgcGFyYW1ldGVycworICAgICAqICog
VGhlIHBhcmFtZXRlciBgcGF0aGAgaXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZl
Y3RvcjMuIEl0IGlzIHRoZSBjdXJ2ZSB1c2VkIGFzIHRoZSBheGlzIG9mIHRoZSB0dWJlCisgICAg
ICogKiBUaGUgcGFyYW1ldGVyIGByYWRpdXNgIChwb3NpdGl2ZSBmbG9hdCwgZGVmYXVsdCAxKSBz
ZXRzIHRoZSB0dWJlIHJhZGl1cyBzaXplCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGB0ZXNzZWxs
YXRpb25gIChwb3NpdGl2ZSBmbG9hdCwgZGVmYXVsdCA2NCkgaXMgdGhlIG51bWJlciBvZiBzaWRl
cyBvbiB0aGUgdHVidWxhciBzdXJmYWNlCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGByYWRpdXNG
dW5jdGlvbmAgKGphdmFzY3JpcHQgZnVuY3Rpb24sIGRlZmF1bHQgbnVsbCkgaXMgYSB2YW5pbGxh
IGphdmFzY3JpcHQgZnVuY3Rpb24uIElmIGl0IGlzIG5vdCBudWxsLCBpdCBvdmVyd3JpdHRlcyB0
aGUgcGFyYW1ldGVyIGByYWRpdXNgCisgICAgICogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBv
biBlYWNoIHBvaW50IG9mIHRoZSB0dWJlIHBhdGggYW5kIGlzIHBhc3NlZCB0aGUgaW5kZXggYGlg
IG9mIHRoZSBpLXRoIHBvaW50IGFuZCB0aGUgZGlzdGFuY2Ugb2YgdGhpcyBwb2ludCBmcm9tIHRo
ZSBmaXJzdCBwb2ludCBvZiB0aGUgcGF0aC4gSXQgbXVzdCByZXR1cm4gYSByYWRpdXMgdmFsdWUg
KHBvc2l0aXZlIGZsb2F0KQorICAgICAqICogVGhlIHBhcmFtZXRlciBgYXJjYCAocG9zaXRpdmUg
ZmxvYXQsIG1heGltdW0gMSwgZGVmYXVsdCAxKSBpcyB0aGUgcmF0aW8gdG8gYXBwbHkgdG8gdGhl
IHR1YmUgY2lyY3VtZmVyZW5jZSA6IDIgeCBQSSB4IGFyYworICAgICAqICogVGhlIHBhcmFtZXRl
ciBgY2FwYCBzZXRzIHRoZSB3YXkgdGhlIGV4dHJ1ZGVkIHNoYXBlIGlzIGNhcHBlZC4gUG9zc2li
bGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLk5PX0NBUCAoZGVmYXVsdCksIEJBQllMT04uTWVzaC5D
QVBfU1RBUlQsIEJBQllMT04uTWVzaC5DQVBfRU5ELCBCQUJZTE9OLk1lc2guQ0FQX0FMTAorICAg
ICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgaW5zdGFuY2VgIGlzIGFuIGluc3RhbmNlIG9m
IGFuIGV4aXN0aW5nIFR1YmUgb2JqZWN0IHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGUgcGFzc2VkIGBw
YXRoQXJyYXlgIHBhcmFtZXRlciA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hv
d190b19keW5hbWljYWxseV9tb3JwaF9hX21lc2gjdHViZQorICAgICAqICogWW91IGNhbiBhbHNv
IHNldCB0aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04u
TWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBCQUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxP
Ti5NZXNoLkRPVUJMRVNJREUKKyAgICAgKiAqIElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQg
bWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBj
cm9wIGFuZCBzdGljayByZXNwZWN0aXZlbHkgb24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRl
cyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBmcm9udFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCku
IERldGFpbCBoZXJlIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2Nv
dmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50YXRpb24KKyAgICAgKiAqIFRoZSBvcHRpb25h
bCBwYXJhbWV0ZXIgYGludmVydFVWYCAoYm9vbGVhbiwgZGVmYXVsdCBmYWxzZSkgc3dhcHMgaW4g
dGhlIGdlb21ldHJ5IHRoZSBVIGFuZCBWIGNvb3JkaW5hdGVzIHRvIGFwcGx5IGEgdGV4dHVyZQor
ICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0aCB0aGUgYm9vbGVh
biBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBpbnRlcm5hbCBn
ZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkCisgICAgICogQHBhcmFt
IG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25z
IGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFy
YW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSB0
dWJlIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3Bh
cmFtZXRyaWNfc2hhcGVzCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hv
d190by9zZXRfc2hhcGVzI3R1YmUKKyAgICAgKi8KKyAgICBUdWJlQnVpbGRlci5DcmVhdGVUdWJl
ID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZSA9
PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICB2YXIgcGF0aCA9IG9wdGlvbnMu
cGF0aDsKKyAgICAgICAgdmFyIGluc3RhbmNlID0gb3B0aW9ucy5pbnN0YW5jZTsKKyAgICAgICAg
dmFyIHJhZGl1cyA9IDEuMDsKKyAgICAgICAgaWYgKG9wdGlvbnMucmFkaXVzICE9PSB1bmRlZmlu
ZWQpIHsKKyAgICAgICAgICAgIHJhZGl1cyA9IG9wdGlvbnMucmFkaXVzOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKGluc3RhbmNlKSB7CisgICAgICAgICAgICByYWRpdXMgPSBpbnN0YW5j
ZS5fY3JlYXRpb25EYXRhU3RvcmFnZS5yYWRpdXM7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRl
c3NlbGxhdGlvbiA9IG9wdGlvbnMudGVzc2VsbGF0aW9uIHx8IDY0IHwgMDsKKyAgICAgICAgdmFy
IHJhZGl1c0Z1bmN0aW9uID0gb3B0aW9ucy5yYWRpdXNGdW5jdGlvbiB8fCBudWxsOworICAgICAg
ICB2YXIgY2FwID0gb3B0aW9ucy5jYXAgfHwgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siTWVzaCJdLk5PX0NBUDsKKyAgICAgICAgdmFyIGludmVydFVWID0gb3B0aW9ucy5pbnZl
cnRVViB8fCBmYWxzZTsKKyAgICAgICAgdmFyIHVwZGF0YWJsZSA9IG9wdGlvbnMudXBkYXRhYmxl
OworICAgICAgICB2YXIgc2lkZU9yaWVudGF0aW9uID0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTWVzaCJdLl9HZXREZWZhdWx0U2lkZU9yaWVudGF0aW9uKG9wdGlvbnMuc2lk
ZU9yaWVudGF0aW9uKTsKKyAgICAgICAgb3B0aW9ucy5hcmMgPSBvcHRpb25zLmFyYyAmJiAob3B0
aW9ucy5hcmMgPD0gMC4wIHx8IG9wdGlvbnMuYXJjID4gMS4wKSA/IDEuMCA6IG9wdGlvbnMuYXJj
IHx8IDEuMDsKKyAgICAgICAgLy8gdHViZSBnZW9tZXRyeQorICAgICAgICB2YXIgdHViZVBhdGhB
cnJheSA9IGZ1bmN0aW9uIChwYXRoLCBwYXRoM0QsIGNpcmNsZVBhdGhzLCByYWRpdXMsIHRlc3Nl
bGxhdGlvbiwgcmFkaXVzRnVuY3Rpb24sIGNhcCwgYXJjKSB7CisgICAgICAgICAgICB2YXIgdGFu
Z2VudHMgPSBwYXRoM0QuZ2V0VGFuZ2VudHMoKTsKKyAgICAgICAgICAgIHZhciBub3JtYWxzID0g
cGF0aDNELmdldE5vcm1hbHMoKTsKKyAgICAgICAgICAgIHZhciBkaXN0YW5jZXMgPSBwYXRoM0Qu
Z2V0RGlzdGFuY2VzKCk7CisgICAgICAgICAgICB2YXIgcGkyID0gTWF0aC5QSSAqIDI7CisgICAg
ICAgICAgICB2YXIgc3RlcCA9IHBpMiAvIHRlc3NlbGxhdGlvbiAqIGFyYzsKKyAgICAgICAgICAg
IHZhciByZXR1cm5SYWRpdXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiByYWRpdXM7IH07CisgICAg
ICAgICAgICB2YXIgcmFkaXVzRnVuY3Rpb25GaW5hbCA9IHJhZGl1c0Z1bmN0aW9uIHx8IHJldHVy
blJhZGl1czsKKyAgICAgICAgICAgIHZhciBjaXJjbGVQYXRoOworICAgICAgICAgICAgdmFyIHJh
ZDsKKyAgICAgICAgICAgIHZhciBub3JtYWw7CisgICAgICAgICAgICB2YXIgcm90YXRlZDsKKyAg
ICAgICAgICAgIHZhciByb3RhdGlvbk1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdOworICAgICAgICAg
ICAgdmFyIGluZGV4ID0gKGNhcCA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siTWVzaCJdLk5PX0NBUCB8fCBjYXAgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIk1lc2giXS5DQVBfRU5EKSA/IDAgOiAyOworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgcmFkID0gcmFkaXVz
RnVuY3Rpb25GaW5hbChpLCBkaXN0YW5jZXNbaV0pOyAvLyBjdXJyZW50IHJhZGl1cworICAgICAg
ICAgICAgICAgIGNpcmNsZVBhdGggPSBBcnJheSgpOyAvLyBjdXJyZW50IGNpcmNsZSBhcnJheQor
ICAgICAgICAgICAgICAgIG5vcm1hbCA9IG5vcm1hbHNbaV07IC8vIGN1cnJlbnQgbm9ybWFsCisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCB0ZXNzZWxsYXRpb247IHQrKykgewor
ICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siTWF0cml4Il0uUm90YXRpb25BeGlzVG9SZWYodGFuZ2VudHNbaV0sIHN0ZXAg
KiB0LCByb3RhdGlvbk1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgIHJvdGF0ZWQgPSBjaXJj
bGVQYXRoW3RdID8gY2lyY2xlUGF0aFt0XSA6IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAgICAgICAgICAg
ICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYobm9ybWFsLCByb3RhdGlvbk1hdHJpeCwgcm90
YXRlZCk7CisgICAgICAgICAgICAgICAgICAgIHJvdGF0ZWQuc2NhbGVJblBsYWNlKHJhZCkuYWRk
SW5QbGFjZShwYXRoW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgY2lyY2xlUGF0aFt0XSA9IHJv
dGF0ZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNpcmNsZVBhdGhzW2lu
ZGV4XSA9IGNpcmNsZVBhdGg7CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIGNhcAorICAgICAgICAgICAgdmFyIGNhcFBhdGggPSBmdW5jdGlv
biAobmJQb2ludHMsIHBhdGhJbmRleCkgeworICAgICAgICAgICAgICAgIHZhciBwb2ludENhcCA9
IEFycmF5KCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYlBvaW50czsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHBvaW50Q2FwLnB1c2gocGF0aFtwYXRoSW5kZXhd
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50Q2FwOwor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHN3aXRjaCAoY2FwKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uTk9fQ0FQ
OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIF9tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfU1RBUlQ6CisgICAgICAg
ICAgICAgICAgICAgIGNpcmNsZVBhdGhzWzBdID0gY2FwUGF0aCh0ZXNzZWxsYXRpb24sIDApOwor
ICAgICAgICAgICAgICAgICAgICBjaXJjbGVQYXRoc1sxXSA9IGNpcmNsZVBhdGhzWzJdLnNsaWNl
KDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIF9t
ZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfRU5EOgorICAgICAg
ICAgICAgICAgICAgICBjaXJjbGVQYXRoc1tpbmRleF0gPSBjaXJjbGVQYXRoc1tpbmRleCAtIDFd
LnNsaWNlKDApOworICAgICAgICAgICAgICAgICAgICBjaXJjbGVQYXRoc1tpbmRleCArIDFdID0g
Y2FwUGF0aCh0ZXNzZWxsYXRpb24sIHBhdGgubGVuZ3RoIC0gMSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTWVzaCJdLkNBUF9BTEw6CisgICAgICAgICAgICAgICAgICAgIGNpcmNsZVBh
dGhzWzBdID0gY2FwUGF0aCh0ZXNzZWxsYXRpb24sIDApOworICAgICAgICAgICAgICAgICAgICBj
aXJjbGVQYXRoc1sxXSA9IGNpcmNsZVBhdGhzWzJdLnNsaWNlKDApOworICAgICAgICAgICAgICAg
ICAgICBjaXJjbGVQYXRoc1tpbmRleF0gPSBjaXJjbGVQYXRoc1tpbmRleCAtIDFdLnNsaWNlKDAp
OworICAgICAgICAgICAgICAgICAgICBjaXJjbGVQYXRoc1tpbmRleCArIDFdID0gY2FwUGF0aCh0
ZXNzZWxsYXRpb24sIHBhdGgubGVuZ3RoIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNpcmNsZVBhdGhzOworICAgICAgICB9
OworICAgICAgICB2YXIgcGF0aDNEOworICAgICAgICB2YXIgcGF0aEFycmF5OworICAgICAgICBp
ZiAoaW5zdGFuY2UpIHsgLy8gdHViZSB1cGRhdGUKKyAgICAgICAgICAgIHZhciBzdG9yYWdlID0g
aW5zdGFuY2UuX2NyZWF0aW9uRGF0YVN0b3JhZ2U7CisgICAgICAgICAgICB2YXIgYXJjID0gb3B0
aW9ucy5hcmMgfHwgc3RvcmFnZS5hcmM7CisgICAgICAgICAgICBwYXRoM0QgPSBzdG9yYWdlLnBh
dGgzRC51cGRhdGUocGF0aCk7CisgICAgICAgICAgICBwYXRoQXJyYXkgPSB0dWJlUGF0aEFycmF5
KHBhdGgsIHBhdGgzRCwgc3RvcmFnZS5wYXRoQXJyYXksIHJhZGl1cywgc3RvcmFnZS50ZXNzZWxs
YXRpb24sIHJhZGl1c0Z1bmN0aW9uLCBzdG9yYWdlLmNhcCwgYXJjKTsKKyAgICAgICAgICAgIGlu
c3RhbmNlID0gX3JpYmJvbkJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUmli
Ym9uQnVpbGRlciJdLkNyZWF0ZVJpYmJvbigiIiwgeyBwYXRoQXJyYXk6IHBhdGhBcnJheSwgaW5z
dGFuY2U6IGluc3RhbmNlIH0pOworICAgICAgICAgICAgLy8gVXBkYXRlIG1vZGUsIG5vIG5lZWQg
dG8gcmVjcmVhdGUgdGhlIHN0b3JhZ2UuCisgICAgICAgICAgICBzdG9yYWdlLnBhdGgzRCA9IHBh
dGgzRDsKKyAgICAgICAgICAgIHN0b3JhZ2UucGF0aEFycmF5ID0gcGF0aEFycmF5OworICAgICAg
ICAgICAgc3RvcmFnZS5hcmMgPSBhcmM7CisgICAgICAgICAgICBzdG9yYWdlLnJhZGl1cyA9IHJh
ZGl1czsKKyAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICAgICAgfQorICAgICAgICAv
LyB0dWJlIGNyZWF0aW9uCisgICAgICAgIHBhdGgzRCA9IG5ldyBfTWF0aHNfbWF0aF9wYXRoX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBhdGgzRCJdKHBhdGgpOworICAgICAgICB2YXIg
bmV3UGF0aEFycmF5ID0gbmV3IEFycmF5KCk7CisgICAgICAgIGNhcCA9IChjYXAgPCAwIHx8IGNh
cCA+IDMpID8gMCA6IGNhcDsKKyAgICAgICAgcGF0aEFycmF5ID0gdHViZVBhdGhBcnJheShwYXRo
LCBwYXRoM0QsIG5ld1BhdGhBcnJheSwgcmFkaXVzLCB0ZXNzZWxsYXRpb24sIHJhZGl1c0Z1bmN0
aW9uLCBjYXAsIG9wdGlvbnMuYXJjKTsKKyAgICAgICAgdmFyIHR1YmUgPSBfcmliYm9uQnVpbGRl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJSaWJib25CdWlsZGVyIl0uQ3JlYXRlUmli
Ym9uKG5hbWUsIHsgcGF0aEFycmF5OiBwYXRoQXJyYXksIGNsb3NlUGF0aDogdHJ1ZSwgY2xvc2VB
cnJheTogZmFsc2UsIHVwZGF0YWJsZTogdXBkYXRhYmxlLCBzaWRlT3JpZW50YXRpb246IHNpZGVP
cmllbnRhdGlvbiwgaW52ZXJ0VVY6IGludmVydFVWLCBmcm9udFVWczogb3B0aW9ucy5mcm9udFVW
cywgYmFja1VWczogb3B0aW9ucy5iYWNrVVZzIH0sIHNjZW5lKTsKKyAgICAgICAgdHViZS5fY3Jl
YXRpb25EYXRhU3RvcmFnZS5wYXRoQXJyYXkgPSBwYXRoQXJyYXk7CisgICAgICAgIHR1YmUuX2Ny
ZWF0aW9uRGF0YVN0b3JhZ2UucGF0aDNEID0gcGF0aDNEOworICAgICAgICB0dWJlLl9jcmVhdGlv
bkRhdGFTdG9yYWdlLnRlc3NlbGxhdGlvbiA9IHRlc3NlbGxhdGlvbjsKKyAgICAgICAgdHViZS5f
Y3JlYXRpb25EYXRhU3RvcmFnZS5jYXAgPSBjYXA7CisgICAgICAgIHR1YmUuX2NyZWF0aW9uRGF0
YVN0b3JhZ2UuYXJjID0gb3B0aW9ucy5hcmM7CisgICAgICAgIHR1YmUuX2NyZWF0aW9uRGF0YVN0
b3JhZ2UucmFkaXVzID0gcmFkaXVzOworICAgICAgICByZXR1cm4gdHViZTsKKyAgICB9OworICAg
IHJldHVybiBUdWJlQnVpbGRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWVzaGVzL0NvbXByZXNzaW9uL2RyYWNvQ29tcHJlc3Npb24udHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NZXNoZXMv
Q29tcHJlc3Npb24vZHJhY29Db21wcmVzc2lvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
RHJhY29Db21wcmVzc2lvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJE
cmFjb0NvbXByZXNzaW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEcmFjb0NvbXByZXNzaW9uOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy90b29scyAq
LyAiLi9NaXNjL3Rvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfd29y
a2VyUG9vbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vTWlzYy93b3JrZXJQb29sICovICIuL01pc2Mvd29ya2VyUG9vbC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NZXNo
ZXMvbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEudHMiKTsKKwor
CisKK2Z1bmN0aW9uIGxvYWRTY3JpcHRBc3luYyh1cmwpIHsKKyAgICBpZiAodHlwZW9mIGltcG9y
dFNjcmlwdHMgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgaW1wb3J0U2NyaXB0cyh1cmwpOwor
ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgfQorICAgIGVsc2UgeworICAg
ICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeworICAg
ICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMi
XS5Mb2FkU2NyaXB0KHVybCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJlc29sdmUo
KTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChtZXNzYWdlKSB7CisgICAgICAgICAgICAgICAg
cmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfQorfQorZnVuY3Rpb24gbG9hZEZpbGVBc3luYyh1cmwpIHsKKyAgICByZXR1cm4gbmV3
IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICBfTWlzY190b29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLkxvYWRGaWxlKHVybCwgZnVu
Y3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7CisgICAgICAgIH0sIHVu
ZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlLCBmdW5jdGlvbiAocmVxdWVzdCwgZXhjZXB0aW9uKSB7
CisgICAgICAgICAgICByZWplY3QoZXhjZXB0aW9uKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9
CitmdW5jdGlvbiBjcmVhdGVEZWNvZGVyQXN5bmMod2FzbVVybCwgd2FzbUJpbmFyeSwgZmFsbGJh
Y2tVcmwpIHsKKyAgICB2YXIgZGVjb2RlclVybCA9ICh3YXNtQmluYXJ5ICYmIHdhc21VcmwpIHx8
IGZhbGxiYWNrVXJsOworICAgIGlmIChkZWNvZGVyVXJsKSB7CisgICAgICAgIHJldHVybiBsb2Fk
U2NyaXB0QXN5bmMoZGVjb2RlclVybCkudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsKKyAgICAgICAgICAgICAgICBE
cmFjb0RlY29kZXJNb2R1bGUoeyB3YXNtQmluYXJ5OiB3YXNtQmluYXJ5IH0pLnRoZW4oZnVuY3Rp
b24gKG1vZHVsZSkgeworICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgbW9kdWxlOiBtb2R1
bGUgfSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfQorICAgIHJldHVybiB1bmRlZmluZWQ7Cit9CitmdW5jdGlvbiBkZWNvZGVNZXNoKGRl
Y29kZXJNb2R1bGUsIGRhdGFWaWV3LCBhdHRyaWJ1dGVzLCBvbkluZGljZXNEYXRhLCBvbkF0dHJp
YnV0ZURhdGEpIHsKKyAgICB2YXIgYnVmZmVyID0gbmV3IGRlY29kZXJNb2R1bGUuRGVjb2RlckJ1
ZmZlcigpOworICAgIGJ1ZmZlci5Jbml0KGRhdGFWaWV3LCBkYXRhVmlldy5ieXRlTGVuZ3RoKTsK
KyAgICB2YXIgZGVjb2RlciA9IG5ldyBkZWNvZGVyTW9kdWxlLkRlY29kZXIoKTsKKyAgICB2YXIg
Z2VvbWV0cnk7CisgICAgdmFyIHN0YXR1czsKKyAgICB0cnkgeworICAgICAgICB2YXIgdHlwZSA9
IGRlY29kZXIuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZShidWZmZXIpOworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgZGVjb2Rlck1vZHVsZS5UUklBTkdVTEFSX01FU0g6
CisgICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBuZXcgZGVjb2Rlck1vZHVsZS5NZXNoKCk7Cisg
ICAgICAgICAgICAgICAgc3RhdHVzID0gZGVjb2Rlci5EZWNvZGVCdWZmZXJUb01lc2goYnVmZmVy
LCBnZW9tZXRyeSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGRl
Y29kZXJNb2R1bGUuUE9JTlRfQ0xPVUQ6CisgICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBuZXcg
ZGVjb2Rlck1vZHVsZS5Qb2ludENsb3VkKCk7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gZGVj
b2Rlci5EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWQoYnVmZmVyLCBnZW9tZXRyeSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiSW52YWxpZCBnZW9tZXRyeSB0eXBlICIgKyB0eXBlKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXN0YXR1cy5vaygpIHx8ICFnZW9tZXRyeS5wdHIpIHsKKyAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcihzdGF0dXMuZXJyb3JfbXNnKCkpOworICAgICAgICB9CisgICAg
ICAgIHZhciBudW1Qb2ludHNfMSA9IGdlb21ldHJ5Lm51bV9wb2ludHMoKTsKKyAgICAgICAgaWYg
KHR5cGUgPT09IGRlY29kZXJNb2R1bGUuVFJJQU5HVUxBUl9NRVNIKSB7CisgICAgICAgICAgICB2
YXIgbnVtRmFjZXMgPSBnZW9tZXRyeS5udW1fZmFjZXMoKTsKKyAgICAgICAgICAgIHZhciBmYWNl
SW5kaWNlcyA9IG5ldyBkZWNvZGVyTW9kdWxlLkRyYWNvSW50MzJBcnJheSgpOworICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShu
dW1GYWNlcyAqIDMpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRmFj
ZXM7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLkdldEZhY2VGcm9tTWVzaChn
ZW9tZXRyeSwgaSwgZmFjZUluZGljZXMpOworICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0
ID0gaSAqIDM7CisgICAgICAgICAgICAgICAgICAgIGluZGljZXNbb2Zmc2V0ICsgMF0gPSBmYWNl
SW5kaWNlcy5HZXRWYWx1ZSgwKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tvZmZzZXQg
KyAxXSA9IGZhY2VJbmRpY2VzLkdldFZhbHVlKDEpOworICAgICAgICAgICAgICAgICAgICBpbmRp
Y2VzW29mZnNldCArIDJdID0gZmFjZUluZGljZXMuR2V0VmFsdWUoMik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIG9uSW5kaWNlc0RhdGEoaW5kaWNlcyk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBkZWNvZGVyTW9kdWxl
LmRlc3Ryb3koZmFjZUluZGljZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHZhciBwcm9jZXNzQXR0cmlidXRlID0gZnVuY3Rpb24gKGtpbmQsIGF0dHJpYnV0ZSkgeworICAg
ICAgICAgICAgdmFyIGRyYWNvRGF0YSA9IG5ldyBkZWNvZGVyTW9kdWxlLkRyYWNvRmxvYXQzMkFy
cmF5KCk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRlY29kZXIuR2V0QXR0
cmlidXRlRmxvYXRGb3JBbGxQb2ludHMoZ2VvbWV0cnksIGF0dHJpYnV0ZSwgZHJhY29EYXRhKTsK
KyAgICAgICAgICAgICAgICB2YXIgYmFieWxvbkRhdGEgPSBuZXcgRmxvYXQzMkFycmF5KG51bVBv
aW50c18xICogYXR0cmlidXRlLm51bV9jb21wb25lbnRzKCkpOworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYmFieWxvbkRhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgYmFieWxvbkRhdGFbaV0gPSBkcmFjb0RhdGEuR2V0VmFsdWUoaSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9uQXR0cmlidXRlRGF0YShraW5kLCBiYWJ5bG9u
RGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAg
ICAgICBkZWNvZGVyTW9kdWxlLmRlc3Ryb3koZHJhY29EYXRhKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIGZvciAodmFy
IGtpbmQgaW4gYXR0cmlidXRlcykgeworICAgICAgICAgICAgICAgIHZhciBpZCA9IGF0dHJpYnV0
ZXNba2luZF07CisgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGRlY29kZXIuR2V0QXR0
cmlidXRlQnlVbmlxdWVJZChnZW9tZXRyeSwgaWQpOworICAgICAgICAgICAgICAgIHByb2Nlc3NB
dHRyaWJ1dGUoa2luZCwgYXR0cmlidXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBuYXRpdmVBdHRyaWJ1dGVUeXBlcyA9IHsKKyAg
ICAgICAgICAgICAgICAicG9zaXRpb24iOiAiUE9TSVRJT04iLAorICAgICAgICAgICAgICAgICJu
b3JtYWwiOiAiTk9STUFMIiwKKyAgICAgICAgICAgICAgICAiY29sb3IiOiAiQ09MT1IiLAorICAg
ICAgICAgICAgICAgICJ1diI6ICJURVhfQ09PUkQiCisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgZm9yICh2YXIga2luZCBpbiBuYXRpdmVBdHRyaWJ1dGVUeXBlcykgeworICAgICAgICAgICAg
ICAgIHZhciBpZCA9IGRlY29kZXIuR2V0QXR0cmlidXRlSWQoZ2VvbWV0cnksIGRlY29kZXJNb2R1
bGVbbmF0aXZlQXR0cmlidXRlVHlwZXNba2luZF1dKTsKKyAgICAgICAgICAgICAgICBpZiAoaWQg
IT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSBkZWNvZGVyLkdl
dEF0dHJpYnV0ZShnZW9tZXRyeSwgaWQpOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0
cmlidXRlKGtpbmQsIGF0dHJpYnV0ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgICBpZiAoZ2VvbWV0cnkp
IHsKKyAgICAgICAgICAgIGRlY29kZXJNb2R1bGUuZGVzdHJveShnZW9tZXRyeSk7CisgICAgICAg
IH0KKyAgICAgICAgZGVjb2Rlck1vZHVsZS5kZXN0cm95KGRlY29kZXIpOworICAgICAgICBkZWNv
ZGVyTW9kdWxlLmRlc3Ryb3koYnVmZmVyKTsKKyAgICB9Cit9CisvKioKKyAqIFRoZSB3b3JrZXIg
ZnVuY3Rpb24gdGhhdCBnZXRzIGNvbnZlcnRlZCB0byBhIGJsb2IgdXJsIHRvIHBhc3MgaW50byBh
IHdvcmtlci4KKyAqLworZnVuY3Rpb24gd29ya2VyKCkgeworICAgIHZhciBkZWNvZGVyUHJvbWlz
ZTsKKyAgICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgdmFyIGRhdGEg
PSBldmVudC5kYXRhOworICAgICAgICBzd2l0Y2ggKGRhdGEuaWQpIHsKKyAgICAgICAgICAgIGNh
c2UgImluaXQiOiB7CisgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBkYXRhLmRlY29kZXI7
CisgICAgICAgICAgICAgICAgZGVjb2RlclByb21pc2UgPSBjcmVhdGVEZWNvZGVyQXN5bmMoZGVj
b2Rlci53YXNtVXJsLCBkZWNvZGVyLndhc21CaW5hcnksIGRlY29kZXIuZmFsbGJhY2tVcmwpOwor
ICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJkb25lIik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlICJkZWNvZGVNZXNoIjogeworICAg
ICAgICAgICAgICAgIGlmICghZGVjb2RlclByb21pc2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJEcmFjbyBkZWNvZGVyIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlIik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlY29kZXJQcm9taXNlLnRoZW4o
ZnVuY3Rpb24gKGRlY29kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlTWVzaChkZWNv
ZGVyLm1vZHVsZSwgZGF0YS5kYXRhVmlldywgZGF0YS5hdHRyaWJ1dGVzLCBmdW5jdGlvbiAoaW5k
aWNlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoeyBpZDogImluZGlj
ZXMiLCB2YWx1ZTogaW5kaWNlcyB9LCBbaW5kaWNlcy5idWZmZXJdKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSwgZnVuY3Rpb24gKGtpbmQsIGRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBvc3RNZXNzYWdlKHsgaWQ6IGtpbmQsIHZhbHVlOiBkYXRhIH0sIFtkYXRhLmJ1ZmZlcl0pOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uo
ImRvbmUiKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9CitmdW5jdGlvbiBnZXRBYnNvbHV0ZVVy
bCh1cmwpIHsKKyAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAib2JqZWN0IiB8fCB0eXBlb2Yg
dXJsICE9PSAic3RyaW5nIikgeworICAgICAgICByZXR1cm4gdXJsOworICAgIH0KKyAgICByZXR1
cm4gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5HZXRB
YnNvbHV0ZVVybCh1cmwpOworfQorLyoqCisgKiBEcmFjbyBjb21wcmVzc2lvbiAoaHR0cHM6Ly9n
b29nbGUuZ2l0aHViLmlvL2RyYWNvLykKKyAqCisgKiBUaGlzIGNsYXNzIHdyYXBzIHRoZSBEcmFj
byBtb2R1bGUuCisgKgorICogKipFbmNvZGVyKioKKyAqCisgKiBUaGUgZW5jb2RlciBpcyBub3Qg
Y3VycmVudGx5IGltcGxlbWVudGVkLgorICoKKyAqICoqRGVjb2RlcioqCisgKgorICogQnkgZGVm
YXVsdCwgdGhlIGNvbmZpZ3VyYXRpb24gcG9pbnRzIHRvIGEgY29weSBvZiB0aGUgRHJhY28gZGVj
b2RlciBmaWxlcyBmb3IgZ2xURiBmcm9tIHRoZSBiYWJ5bG9uLmpzIHByZXZpZXcgY2RuIGh0dHBz
Oi8vcHJldmlldy5iYWJ5bG9uanMuY29tL2RyYWNvX3dhc21fd3JhcHBlcl9nbHRmLmpzLgorICoK
KyAqIFRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiwgdXNlIHRoZSBmb2xsb3dpbmcgY29kZToK
KyAqIGBgYGphdmFzY3JpcHQKKyAqICAgICBEcmFjb0NvbXByZXNzaW9uLkNvbmZpZ3VyYXRpb24g
PSB7CisgKiAgICAgICAgIGRlY29kZXI6IHsKKyAqICAgICAgICAgICAgIHdhc21Vcmw6ICI8dXJs
IHRvIHRoZSBXZWJBc3NlbWJseSBsaWJyYXJ5PiIsCisgKiAgICAgICAgICAgICB3YXNtQmluYXJ5
VXJsOiAiPHVybCB0byB0aGUgV2ViQXNzZW1ibHkgYmluYXJ5PiIsCisgKiAgICAgICAgICAgICBm
YWxsYmFja1VybDogIjx1cmwgdG8gdGhlIGZhbGxiYWNrIEphdmFTY3JpcHQgbGlicmFyeT4iLAor
ICogICAgICAgICB9CisgKiAgICAgfTsKKyAqIGBgYAorICoKKyAqIERyYWNvIGhhcyB0d28gdmVy
c2lvbnMsIG9uZSBmb3IgV2ViQXNzZW1ibHkgYW5kIG9uZSBmb3IgSmF2YVNjcmlwdC4gVGhlIGRl
Y29kZXIgY29uZmlndXJhdGlvbiBjYW4gYmUgc2V0IHRvIG9ubHkgc3VwcG9ydCBXZWJzc2VtYmx5
IG9yIG9ubHkgc3VwcG9ydCB0aGUgSmF2YVNjcmlwdCB2ZXJzaW9uLgorICogRGVjb2Rpbmcgd2ls
bCBhdXRvbWF0aWNhbGx5IGZhbGxiYWNrIHRvIHRoZSBKYXZhU2NyaXB0IHZlcnNpb24gaWYgV2Vi
QXNzZW1ibHkgdmVyc2lvbiBpcyBub3QgY29uZmlndXJlZCBvciBpZiBXZWJBc3NlbWJseSBpcyBu
b3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLgorICogVXNlIGBEcmFjb0NvbXByZXNzaW9uLkRl
Y29kZXJBdmFpbGFibGVgIHRvIGRldGVybWluZSBpZiB0aGUgZGVjb2RlciBjb25maWd1cmF0aW9u
IGlzIGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQgY29udGV4dC4KKyAqCisgKiBUbyBkZWNvZGUg
RHJhY28gY29tcHJlc3NlZCBkYXRhLCBnZXQgdGhlIGRlZmF1bHQgRHJhY29Db21wcmVzc2lvbiBv
YmplY3QgYW5kIGNhbGwgZGVjb2RlTWVzaEFzeW5jOgorICogYGBgamF2YXNjcmlwdAorICogICAg
IHZhciB2ZXJ0ZXhEYXRhID0gYXdhaXQgRHJhY29Db21wcmVzc2lvbi5EZWZhdWx0LmRlY29kZU1l
c2hBc3luYyhkYXRhKTsKKyAqIGBgYAorICoKKyAqIEBzZWUgaHR0cHM6Ly93d3cuYmFieWxvbmpz
LXBsYXlncm91bmQuY29tLyNOM0VLNEIjMAorICovCit2YXIgRHJhY29Db21wcmVzc2lvbiA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3Rvcgor
ICAgICAqIEBwYXJhbSBudW1Xb3JrZXJzIFRoZSBudW1iZXIgb2Ygd29ya2VycyBmb3IgYXN5bmMg
b3BlcmF0aW9ucy4gU3BlY2lmeSBgMGAgdG8gZGlzYWJsZSB3ZWIgd29ya2VycyBhbmQgcnVuIHN5
bmNocm9ub3VzbHkgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBEcmFjb0NvbXByZXNzaW9uKG51bVdvcmtlcnMpIHsKKyAgICAgICAgaWYgKG51bVdvcmtlcnMg
PT09IHZvaWQgMCkgeyBudW1Xb3JrZXJzID0gRHJhY29Db21wcmVzc2lvbi5EZWZhdWx0TnVtV29y
a2VyczsgfQorICAgICAgICB2YXIgZGVjb2RlciA9IERyYWNvQ29tcHJlc3Npb24uQ29uZmlndXJh
dGlvbi5kZWNvZGVyOworICAgICAgICB2YXIgZGVjb2Rlcldhc21CaW5hcnlQcm9taXNlID0gKGRl
Y29kZXIud2FzbVVybCAmJiBkZWNvZGVyLndhc21CaW5hcnlVcmwgJiYgdHlwZW9mIFdlYkFzc2Vt
Ymx5ID09PSAib2JqZWN0IikKKyAgICAgICAgICAgID8gbG9hZEZpbGVBc3luYyhnZXRBYnNvbHV0
ZVVybChkZWNvZGVyLndhc21CaW5hcnlVcmwpKQorICAgICAgICAgICAgOiBQcm9taXNlLnJlc29s
dmUodW5kZWZpbmVkKTsKKyAgICAgICAgaWYgKG51bVdvcmtlcnMgJiYgdHlwZW9mIFdvcmtlciA9
PT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgdGhpcy5fd29ya2VyUG9vbFByb21pc2UgPSBk
ZWNvZGVyV2FzbUJpbmFyeVByb21pc2UudGhlbihmdW5jdGlvbiAoZGVjb2Rlcldhc21CaW5hcnkp
IHsKKyAgICAgICAgICAgICAgICB2YXIgd29ya2VyQ29udGVudCA9ICIiICsgbG9hZFNjcmlwdEFz
eW5jICsgY3JlYXRlRGVjb2RlckFzeW5jICsgZGVjb2RlTWVzaCArICIoIiArIHdvcmtlciArICIp
KCkiOworICAgICAgICAgICAgICAgIHZhciB3b3JrZXJCbG9iVXJsID0gVVJMLmNyZWF0ZU9iamVj
dFVSTChuZXcgQmxvYihbd29ya2VyQ29udGVudF0sIHsgdHlwZTogImFwcGxpY2F0aW9uL2phdmFz
Y3JpcHQiIH0pKTsKKyAgICAgICAgICAgICAgICB2YXIgd29ya2VyUHJvbWlzZXMgPSBuZXcgQXJy
YXkobnVtV29ya2Vycyk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jr
ZXJQcm9taXNlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB3b3JrZXJQcm9t
aXNlc1tpXSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlckJsb2JVcmwp
OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3Ip
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5l
cigiZXJyb3IiLCBvbkVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb25NZXNzYWdlID0gZnVuY3Rpb24gKG1lc3Nh
Z2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kYXRhID09PSAi
ZG9uZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLnJlbW92ZUV2
ZW50TGlzdGVuZXIoImVycm9yIiwgb25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgb25NZXNzYWdlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh3b3JrZXIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgICAgICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBvbkVy
cm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCJt
ZXNzYWdlIiwgb25NZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0
TWVzc2FnZSh7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICJpbml0IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyOiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdhc21Vcmw6IGdldEFic29sdXRlVXJsKGRlY29kZXIud2FzbVVybCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc21CaW5hcnk6IGRlY29kZXJXYXNtQmluYXJ5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFja1VybDogZ2V0QWJzb2x1
dGVVcmwoZGVjb2Rlci5mYWxsYmFja1VybCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh3b3Jr
ZXJQcm9taXNlcykudGhlbihmdW5jdGlvbiAod29ya2VycykgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IF9NaXNjX3dvcmtlclBvb2xfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siV29ya2VyUG9vbCJdKHdvcmtlcnMpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9kZWNv
ZGVyTW9kdWxlUHJvbWlzZSA9IGRlY29kZXJXYXNtQmluYXJ5UHJvbWlzZS50aGVuKGZ1bmN0aW9u
IChkZWNvZGVyV2FzbUJpbmFyeSkgeworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVEZWNv
ZGVyQXN5bmMoZGVjb2Rlci53YXNtVXJsLCBkZWNvZGVyV2FzbUJpbmFyeSwgZGVjb2Rlci5mYWxs
YmFja1VybCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoRHJhY29Db21wcmVzc2lvbiwgIkRlY29kZXJBdmFpbGFibGUiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGRlY29kZXIgY29uZmln
dXJhdGlvbiBpcyBhdmFpbGFibGUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHZhciBkZWNvZGVyID0gRHJhY29Db21wcmVzc2lvbi5Db25maWd1
cmF0aW9uLmRlY29kZXI7CisgICAgICAgICAgICByZXR1cm4gISEoKGRlY29kZXIud2FzbVVybCAm
JiBkZWNvZGVyLndhc21CaW5hcnlVcmwgJiYgdHlwZW9mIFdlYkFzc2VtYmx5ID09PSAib2JqZWN0
IikgfHwgZGVjb2Rlci5mYWxsYmFja1VybCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIERyYWNv
Q29tcHJlc3Npb24uR2V0RGVmYXVsdE51bVdvcmtlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAib2JqZWN0IiB8fCAhbmF2aWdhdG9yLmhhcmR3YXJl
Q29uY3VycmVuY3kpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAg
IC8vIFVzZSA1MCUgb2YgdGhlIGF2YWlsYWJsZSBsb2dpY2FsIHByb2Nlc3NvcnMgYnV0IGNhcHBl
ZCBhdCA0LgorICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5mbG9vcihuYXZpZ2F0b3IuaGFy
ZHdhcmVDb25jdXJyZW5jeSAqIDAuNSksIDQpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KERyYWNvQ29tcHJlc3Npb24sICJEZWZhdWx0IiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogRGVmYXVsdCBpbnN0YW5jZSBmb3IgdGhlIGRyYWNvIGNvbXByZXNzaW9uIG9iamVjdC4K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYg
KCFEcmFjb0NvbXByZXNzaW9uLl9EZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgRHJhY29Db21w
cmVzc2lvbi5fRGVmYXVsdCA9IG5ldyBEcmFjb0NvbXByZXNzaW9uKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gRHJhY29Db21wcmVzc2lvbi5fRGVmYXVsdDsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgLyoqCisgICAgICogU3RvcCBhbGwgYXN5bmMgb3BlcmF0aW9ucyBhbmQg
cmVsZWFzZSByZXNvdXJjZXMuCisgICAgICovCisgICAgRHJhY29Db21wcmVzc2lvbi5wcm90b3R5
cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3dvcmtlclBvb2xQ
cm9taXNlKSB7CisgICAgICAgICAgICB0aGlzLl93b3JrZXJQb29sUHJvbWlzZS50aGVuKGZ1bmN0
aW9uICh3b3JrZXJQb29sKSB7CisgICAgICAgICAgICAgICAgd29ya2VyUG9vbC5kaXNwb3NlKCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgdGhpcy5fd29ya2Vy
UG9vbFByb21pc2U7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9kZWNvZGVyTW9kdWxlUHJvbWlzZTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMg
d2hlbiByZWFkeS4gQ2FsbCB0aGlzIG1hbnVhbGx5IHRvIGVuc3VyZSBkcmFjbyBjb21wcmVzc2lv
biBpcyByZWFkeSBiZWZvcmUgdXNlLgorICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJl
c29sdmVzIHdoZW4gcmVhZHkKKyAgICAgKi8KKyAgICBEcmFjb0NvbXByZXNzaW9uLnByb3RvdHlw
ZS53aGVuUmVhZHlBc3luYyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3dvcmtl
clBvb2xQcm9taXNlKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fd29ya2VyUG9vbFByb21p
c2UudGhlbihmdW5jdGlvbiAoKSB7IH0pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9k
ZWNvZGVyTW9kdWxlUHJvbWlzZSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlY29kZXJN
b2R1bGVQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyB9KTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgICogRGVjb2Rl
IERyYWNvIGNvbXByZXNzZWQgbWVzaCBkYXRhIHRvIHZlcnRleCBkYXRhLgorICAgICAgKiBAcGFy
YW0gZGF0YSBUaGUgQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3IGZvciB0aGUgRHJhY28g
Y29tcHJlc3Npb24gZGF0YQorICAgICAgKiBAcGFyYW0gYXR0cmlidXRlcyBBIG1hcCBvZiBhdHRy
aWJ1dGVzIGZyb20gdmVydGV4IGJ1ZmZlciBraW5kcyB0byBEcmFjbyB1bmlxdWUgaWRzCisgICAg
ICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgdmVy
dGV4IGRhdGEKKyAgICAgICovCisgICAgRHJhY29Db21wcmVzc2lvbi5wcm90b3R5cGUuZGVjb2Rl
TWVzaEFzeW5jID0gZnVuY3Rpb24gKGRhdGEsIGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgdmFyIGRh
dGFWaWV3ID0gZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoZGF0
YSkgOiBkYXRhOworICAgICAgICBpZiAodGhpcy5fd29ya2VyUG9vbFByb21pc2UpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl93b3JrZXJQb29sUHJvbWlzZS50aGVuKGZ1bmN0aW9uICh3b3Jr
ZXJQb29sKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChy
ZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyUG9vbC5wdXNoKGZ1
bmN0aW9uICh3b3JrZXIsIG9uQ29tcGxldGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB2ZXJ0ZXhEYXRhID0gbmV3IF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlZlcnRleERhdGEiXSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG9uRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBvbkVycm9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2Fn
ZSIsIG9uTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9y
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uTWVzc2FnZSA9
IGZ1bmN0aW9uIChtZXNzYWdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1l
c3NhZ2UuZGF0YSA9PT0gImRvbmUiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsIG9uRXJyb3IpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2Fn
ZSIsIG9uTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUo
dmVydGV4RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobWVzc2FnZS5kYXRhLmlkID09PSAiaW5kaWNlcyIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4RGF0YS5pbmRpY2VzID0gbWVzc2FnZS5kYXRh
LnZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4
RGF0YS5zZXQobWVzc2FnZS5kYXRhLnZhbHVlLCBtZXNzYWdlLmRhdGEuaWQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgICAgICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBvbkVycm9y
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCJtZXNz
YWdlIiwgb25NZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhVmlld0Nv
cHkgPSBuZXcgVWludDhBcnJheShkYXRhVmlldy5ieXRlTGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFWaWV3Q29weS5zZXQobmV3IFVpbnQ4QXJyYXkoZGF0YVZpZXcuYnVmZmVy
LCBkYXRhVmlldy5ieXRlT2Zmc2V0LCBkYXRhVmlldy5ieXRlTGVuZ3RoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZDogImRlY29kZU1lc2giLCBkYXRh
VmlldzogZGF0YVZpZXdDb3B5LCBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzIH0sIFtkYXRhVmlld0Nv
cHkuYnVmZmVyXSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2RlY29kZXJN
b2R1bGVQcm9taXNlKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVjb2Rlck1vZHVsZVBy
b21pc2UudGhlbihmdW5jdGlvbiAoZGVjb2RlcikgeworICAgICAgICAgICAgICAgIHZhciB2ZXJ0
ZXhEYXRhID0gbmV3IF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlcnRleERhdGEiXSgpOworICAgICAgICAgICAgICAgIGRlY29kZU1lc2goZGVj
b2Rlci5tb2R1bGUsIGRhdGFWaWV3LCBhdHRyaWJ1dGVzLCBmdW5jdGlvbiAoaW5kaWNlcykgewor
ICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhEYXRhLmluZGljZXMgPSBpbmRpY2VzOworICAgICAg
ICAgICAgICAgIH0sIGZ1bmN0aW9uIChraW5kLCBkYXRhKSB7CisgICAgICAgICAgICAgICAgICAg
IHZlcnRleERhdGEuc2V0KGRhdGEsIGtpbmQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIHJldHVybiB2ZXJ0ZXhEYXRhOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEcmFjbyBkZWNvZGVyIG1vZHVsZSBpcyBub3QgYXZh
aWxhYmxlIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGUgY29uZmlndXJhdGlvbi4gRGVm
YXVsdHMgdG8gdGhlIGZvbGxvd2luZyB1cmxzOgorICAgICAqIC0gd2FzbVVybDogImh0dHBzOi8v
cHJldmlldy5iYWJ5bG9uanMuY29tL2RyYWNvX3dhc21fd3JhcHBlcl9nbHRmLmpzIgorICAgICAq
IC0gd2FzbUJpbmFyeVVybDogImh0dHBzOi8vcHJldmlldy5iYWJ5bG9uanMuY29tL2RyYWNvX2Rl
Y29kZXJfZ2x0Zi53YXNtIgorICAgICAqIC0gZmFsbGJhY2tVcmw6ICJodHRwczovL3ByZXZpZXcu
YmFieWxvbmpzLmNvbS9kcmFjb19kZWNvZGVyX2dsdGYuanMiCisgICAgICovCisgICAgRHJhY29D
b21wcmVzc2lvbi5Db25maWd1cmF0aW9uID0geworICAgICAgICBkZWNvZGVyOiB7CisgICAgICAg
ICAgICB3YXNtVXJsOiAiaHR0cHM6Ly9wcmV2aWV3LmJhYnlsb25qcy5jb20vZHJhY29fd2FzbV93
cmFwcGVyX2dsdGYuanMiLAorICAgICAgICAgICAgd2FzbUJpbmFyeVVybDogImh0dHBzOi8vcHJl
dmlldy5iYWJ5bG9uanMuY29tL2RyYWNvX2RlY29kZXJfZ2x0Zi53YXNtIiwKKyAgICAgICAgICAg
IGZhbGxiYWNrVXJsOiAiaHR0cHM6Ly9wcmV2aWV3LmJhYnlsb25qcy5jb20vZHJhY29fZGVjb2Rl
cl9nbHRmLmpzIgorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IG51
bWJlciBvZiB3b3JrZXJzIHRvIGNyZWF0ZSB3aGVuIGNyZWF0aW5nIHRoZSBkcmFjbyBjb21wcmVz
c2lvbiBvYmplY3QuCisgICAgICovCisgICAgRHJhY29Db21wcmVzc2lvbi5EZWZhdWx0TnVtV29y
a2VycyA9IERyYWNvQ29tcHJlc3Npb24uR2V0RGVmYXVsdE51bVdvcmtlcnMoKTsKKyAgICBEcmFj
b0NvbXByZXNzaW9uLl9EZWZhdWx0ID0gbnVsbDsKKyAgICByZXR1cm4gRHJhY29Db21wcmVzc2lv
bjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL0NvbXByZXNzaW9u
L2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL01lc2hlcy9Db21wcmVzc2lvbi9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IERyYWNv
Q29tcHJlc3Npb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9kcmFjb0NvbXByZXNzaW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2RyYWNvQ29tcHJlc3Npb24gKi8gIi4vTWVzaGVzL0NvbXByZXNz
aW9uL2RyYWNvQ29tcHJlc3Npb24udHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRHJhY29Db21wcmVz
c2lvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RyYWNvQ29tcHJlc3Npb25fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRHJhY29Db21wcmVzc2lvbiJdOyB9KTsKKworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL01lc2hlcy9XZWJHTC93ZWJHTERhdGFCdWZmZXIudHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hl
cy9XZWJHTC93ZWJHTERhdGFCdWZmZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogV2ViR0xEYXRhQnVm
ZmVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkdMRGF0YUJ1ZmZl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViR0xEYXRhQnVmZmVyOyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5l
czYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGF0YUJ1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vZGF0YUJ1ZmZl
ciAqLyAiLi9NZXNoZXMvZGF0YUJ1ZmZlci50cyIpOworCisKKy8qKiBAaGlkZGVuICovCit2YXIg
V2ViR0xEYXRhQnVmZmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFdlYkdMRGF0
YUJ1ZmZlciwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBXZWJHTERhdGFCdWZmZXIocmVzb3VyY2Up
IHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKKyAgICAg
ICAgX3RoaXMuX2J1ZmZlciA9IHJlc291cmNlOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAg
fQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJHTERhdGFCdWZmZXIucHJvdG90eXBlLCAi
dW5kZXJseWluZ1Jlc291cmNlIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIHJldHVy
biBXZWJHTERhdGFCdWZmZXI7Cit9KF9kYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkRhdGFCdWZmZXIiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hl
cy9XZWJHUFUvd2ViZ3B1RGF0YUJ1ZmZlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NZXNoZXMvV2ViR1BVL3dlYmdwdURh
dGFCdWZmZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBXZWJHUFVEYXRhQnVmZmVyICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkdQVURhdGFCdWZmZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFdlYkdQVURhdGFCdWZmZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9kYXRhQnVmZmVyICovICIuL01l
c2hlcy9kYXRhQnVmZmVyLnRzIik7CisKKworLyoqIEBoaWRkZW4gKi8KK3ZhciBXZWJHUFVEYXRh
QnVmZmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFdlYkdQVURhdGFCdWZmZXIs
IF9zdXBlcik7CisgICAgZnVuY3Rpb24gV2ViR1BVRGF0YUJ1ZmZlcihyZXNvdXJjZSkgeworICAg
ICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOworICAgICAgICBfdGhp
cy5fYnVmZmVyID0gcmVzb3VyY2U7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYkdQVURhdGFCdWZmZXIucHJvdG90eXBlLCAidW5kZXJs
eWluZ1Jlc291cmNlIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9idWZmZXI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIHJldHVybiBXZWJH
UFVEYXRhQnVmZmVyOworfShfZGF0YUJ1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJEYXRhQnVmZmVyIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvYWJz
dHJhY3RNZXNoLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9NZXNoZXMvYWJzdHJhY3RNZXNoLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFic3RyYWN0TWVzaCAqLwor
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBYnN0cmFjdE1lc2giLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEFic3RyYWN0TWVzaDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90
b29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01p
c2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01h
dGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01l
c2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWVzaGVzL21lc2gudmVydGV4RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0
ZXhEYXRhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc190cmFuc2Zvcm1O
b2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NZXNoZXMvdHJhbnNmb3JtTm9kZSAqLyAiLi9NZXNoZXMvdHJhbnNmb3JtTm9kZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Db2xsaXNpb25zX3BpY2tpbmdJbmZvX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9Db2xs
aXNpb25zL3BpY2tpbmdJbmZvICovICIuL0NvbGxpc2lvbnMvcGlja2luZ0luZm8udHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0N1bGxpbmcvYm91
bmRpbmdJbmZvICovICIuL0N1bGxpbmcvYm91bmRpbmdJbmZvLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4v
RW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJp
YWxzX3VuaWZvcm1CdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvdW5pZm9ybUJ1ZmZlciAqLyAiLi9NYXRlcmlh
bHMvdW5pZm9ybUJ1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Db2xsaXNp
b25zX21lc2hDb2xsaXNpb25EYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ29sbGlzaW9ucy9tZXNoQ29sbGlzaW9uRGF0YSAqLyAi
Li9Db2xsaXNpb25zL21lc2hDb2xsaXNpb25EYXRhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2RldlRvb2xzICovICIuL01pc2MvZGV2VG9vbHMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9mdW5jdGlvbnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRocy9tYXRoLmZ1bmN0aW9ucyAqLyAiLi9NYXRocy9tYXRoLmZ1bmN0aW9ucy50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xv
ciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb25zdGFudHMgKi8gIi4vTWF0aHMv
bWF0aC5jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0
aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0aHMvbWF0aC5heGlzICovICIuL01hdGhzL21hdGguYXhpcy50cyIpOworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworLyoqIEBoaWRkZW4gKi8KK3ZhciBfRmFj
ZXREYXRhU3RvcmFnZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlv
biBfRmFjZXREYXRhU3RvcmFnZSgpIHsKKyAgICAgICAgdGhpcy5mYWNldE5iID0gMDsgLy8gZmFj
ZXQgbnVtYmVyCisgICAgICAgIHRoaXMucGFydGl0aW9uaW5nU3ViZGl2aXNpb25zID0gMTA7IC8v
IG51bWJlciBvZiBzdWJkaXZpc2lvbnMgcGVyIGF4aXMgaW4gdGhlIHBhcnRpb25pbmcgc3BhY2UK
KyAgICAgICAgdGhpcy5wYXJ0aXRpb25pbmdCQm94UmF0aW8gPSAxLjAxOyAvLyB0aGUgcGFydGlv
bmluZyBhcnJheSBzcGFjZSBpcyBieSBkZWZhdWx0IDElIGJpZ2dlciB0aGFuIHRoZSBib3VuZGlu
ZyBib3gKKyAgICAgICAgdGhpcy5mYWNldERhdGFFbmFibGVkID0gZmFsc2U7IC8vIGlzIHRoZSBm
YWNldCBkYXRhIGZlYXR1cmUgZW5hYmxlZCBvbiB0aGlzIG1lc2ggPworICAgICAgICB0aGlzLmZh
Y2V0UGFyYW1ldGVycyA9IHt9OyAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgcGFy
YW1ldGVycyB0byBhdm9pZCBtZW1vcnkgcmUtYWxsb2NhdGlvbgorICAgICAgICB0aGlzLmJiU2l6
ZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0
b3IzIl0uWmVybygpOyAvLyBiYm94IHNpemUgYXBwcm94aW1hdGVkIGZvciBmYWNldCBkYXRhCisg
ICAgICAgIHRoaXMuc3ViRGl2ID0geworICAgICAgICAgICAgbWF4OiAxLAorICAgICAgICAgICAg
WDogMSwKKyAgICAgICAgICAgIFk6IDEsCisgICAgICAgICAgICBaOiAxCisgICAgICAgIH07Cisg
ICAgICAgIHRoaXMuZmFjZXREZXB0aFNvcnQgPSBmYWxzZTsgLy8gaXMgdGhlIGZhY2V0IGRlcHRo
IHNvcnQgdG8gYmUgY29tcHV0ZWQKKyAgICAgICAgdGhpcy5mYWNldERlcHRoU29ydEVuYWJsZWQg
PSBmYWxzZTsgLy8gaXMgdGhlIGZhY2V0IGRlcHRoIHNvcnQgaW5pdGlhbGl6ZWQKKyAgICB9Cisg
ICAgcmV0dXJuIF9GYWNldERhdGFTdG9yYWdlOworfSgpKTsKKy8qKgorICogQGhpZGRlbgorICoq
LwordmFyIF9JbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIF9JbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvKCkg
eworICAgICAgICB0aGlzLl9oYXNWZXJ0ZXhBbHBoYSA9IGZhbHNlOworICAgICAgICB0aGlzLl91
c2VWZXJ0ZXhDb2xvcnMgPSB0cnVlOworICAgICAgICB0aGlzLl9udW1Cb25lSW5mbHVlbmNlcnMg
PSA0OworICAgICAgICB0aGlzLl9hcHBseUZvZyA9IHRydWU7CisgICAgICAgIHRoaXMuX3JlY2Vp
dmVTaGFkb3dzID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2ZhY2V0RGF0YSA9IG5ldyBfRmFjZXRE
YXRhU3RvcmFnZSgpOworICAgICAgICB0aGlzLl92aXNpYmlsaXR5ID0gMS4wOworICAgICAgICB0
aGlzLl9za2VsZXRvbiA9IG51bGw7CisgICAgICAgIHRoaXMuX2xheWVyTWFzayA9IDB4MEZGRkZG
RkY7CisgICAgICAgIHRoaXMuX2NvbXB1dGVCb25lc1VzaW5nU2hhZGVycyA9IHRydWU7CisgICAg
ICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7CisgICAgICAgIHRoaXMuX29ubHlGb3JJbnN0YW5j
ZXMgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faXNBY3RpdmVJbnRlcm1lZGlhdGUgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fb25seUZvckluc3RhbmNlc0ludGVybWVkaWF0ZSA9IGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gX0ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm87Cit9KCkpOworLyoq
CisgKiBDbGFzcyB1c2VkIHRvIHN0b3JlIGFsbCBjb21tb24gbWVzaCBwcm9wZXJ0aWVzCisgKi8K
K3ZhciBBYnN0cmFjdE1lc2ggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oQWJzdHJh
Y3RNZXNoLCBfc3VwZXIpOworICAgIC8vIENvbnN0cnVjdG9yCisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyBhIG5ldyBBYnN0cmFjdE1lc2gKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBu
YW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcg
c2NlbmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBBYnN0cmFjdE1lc2gobmFtZSwgc2NlbmUpIHsK
KyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAg
IHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lLCBmYWxzZSkgfHwgdGhp
czsKKyAgICAgICAgLy8gSW50ZXJuYWwgZGF0YQorICAgICAgICAvKiogQGhpZGRlbiAqLworICAg
ICAgICBfdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mbyA9IG5ldyBfSW50ZXJuYWxB
YnN0cmFjdE1lc2hEYXRhSW5mbygpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGN1bGxp
bmcgc3RyYXRlZ3kgdG8gdXNlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIG1lc2ggbXVzdCBiZSByZW5k
ZXJlZCBvciBub3QuCisgICAgICAgICAqIFRoaXMgdmFsdWUgY2FuIGJlIGNoYW5nZWQgYXQgYW55
IHRpbWUgYW5kIHdpbGwgYmUgdXNlZCBvbiB0aGUgbmV4dCByZW5kZXIgbWVzaCBzZWxlY3Rpb24u
CisgICAgICAgICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlIDoKKyAgICAgICAgICogLSBBYnN0
cmFjdE1lc2guQ1VMTElOR1NUUkFURUdZX1NUQU5EQVJECisgICAgICAgICAqIC0gQWJzdHJhY3RN
ZXNoLkNVTExJTkdTVFJBVEVHWV9CT1VORElOR1NQSEVSRV9PTkxZCisgICAgICAgICAqIC0gQWJz
dHJhY3RNZXNoLkNVTExJTkdTVFJBVEVHWV9PUFRJTUlTVElDX0lOQ0xVU0lPTgorICAgICAgICAg
KiAtIEFic3RyYWN0TWVzaC5DVUxMSU5HU1RSQVRFR1lfT1BUSU1JU1RJQ19JTkNMVVNJT05fVEhF
Tl9CU1BIRVJFX09OTFkKKyAgICAgICAgICogUGxlYXNlIHJlYWQgZWFjaCBzdGF0aWMgdmFyaWFi
bGUgZG9jdW1lbnRhdGlvbiB0byBnZXQgZGV0YWlscyBhYm91dCB0aGUgY3VsbGluZyBwcm9jZXNz
LgorICAgICAgICAgKiAqLworICAgICAgICBfdGhpcy5jdWxsaW5nU3RyYXRlZ3kgPSBBYnN0cmFj
dE1lc2guQ1VMTElOR1NUUkFURUdZX1NUQU5EQVJEOworICAgICAgICAvLyBFdmVudHMKKyAgICAg
ICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhpcyBtZXNoIGNvbGxp
ZGVzIHdpdGggYW5vdGhlciBvbmUKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25Db2xsaWRl
T2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0
cmlnZ2VyZWQgd2hlbiB0aGUgY29sbGlzaW9uJ3MgcG9zaXRpb24gY2hhbmdlcworICAgICAgICAq
LworICAgICAgICBfdGhpcy5vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdlT2JzZXJ2YWJsZSA9IG5l
dyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFi
bGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiBt
YXRlcmlhbCBpcyBjaGFuZ2VkCisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uTWF0ZXJpYWxD
aGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvLyBQcm9wZXJ0aWVzCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIG9yaWVudGF0aW9uIGZvciBQT1Yg
bW92ZW1lbnQgJiByb3RhdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZGVmaW5lZEZh
Y2luZ0ZvcndhcmQgPSB0cnVlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhp
cy5fb2NjbHVzaW9uUXVlcnkgPSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAg
ICBfdGhpcy5fcmVuZGVyaW5nR3JvdXAgPSBudWxsOworICAgICAgICAvKiogR2V0cyBvciBzZXRz
IHRoZSBhbHBoYSBpbmRleCB1c2VkIHRvIHNvcnQgdHJhbnNwYXJlbnQgbWVzaGVzCisgICAgICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL3Jlc291cmNlcy90cmFuc3BhcmVuY3lf
YW5kX2hvd19tZXNoZXNfYXJlX3JlbmRlcmVkI2FscGhhLWluZGV4CisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5hbHBoYUluZGV4ID0gTnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgbWVzaCBp
cyB2aXNpYmxlIChyZW5kZXJhYmxlKS4gRGVmYXVsdCBpcyB0cnVlCisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5pc1Zpc2libGUgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBtZXNoIGNhbiBiZSBwaWNrZWQg
KGJ5IHNjZW5lLnBpY2sgZm9yIGluc3RhbmNlIG9yIHRocm91Z2ggYWN0aW9ucykuIERlZmF1bHQg
aXMgdHJ1ZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaXNQaWNrYWJsZSA9IHRydWU7Cisg
ICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCBib3VuZGlu
ZyBib3hlcyBvZiBzdWJNZXNoZXMgbXVzdCBiZSByZW5kZXJlZCBhcyB3ZWxsIChmYWxzZSBieSBk
ZWZhdWx0KSAqLworICAgICAgICBfdGhpcy5zaG93U3ViTWVzaGVzQm91bmRpbmdCb3ggPSBmYWxz
ZTsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUg
bWVzaCBtdXN0IGJlIGNvbnNpZGVyZWQgYXMgYSByYXkgYmxvY2tlciBmb3IgbGVucyBmbGFyZXMg
KGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9ob3dfdG9fdXNlX2xlbnNfZmxhcmVzCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5pc0Jsb2NrZXIgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Ig
c2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHBvaW50ZXIgbW92ZSBldmVudHMgbXVzdCBi
ZSBzdXBwb3J0ZWQgb24gdGhpcyBtZXNoIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMuZW5hYmxlUG9pbnRlck1vdmVFdmVudHMgPSBmYWxzZTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFNwZWNpZmllcyB0aGUgcmVuZGVyaW5nIGdyb3VwIGlkIGZvciB0aGlz
IG1lc2ggKDAgYnkgZGVmYXVsdCkKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25q
cy5jb20vcmVzb3VyY2VzL3RyYW5zcGFyZW5jeV9hbmRfaG93X21lc2hlc19hcmVfcmVuZGVyZWQj
cmVuZGVyaW5nLWdyb3VwcworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucmVuZGVyaW5nR3Jv
dXBJZCA9IDA7CisgICAgICAgIF90aGlzLl9tYXRlcmlhbCA9IG51bGw7CisgICAgICAgIC8qKiBE
ZWZpbmVzIGNvbG9yIHRvIHVzZSB3aGVuIHJlbmRlcmluZyBvdXRsaW5lICovCisgICAgICAgIF90
aGlzLm91dGxpbmVDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNV9fWyJDb2xvcjMiXS5SZWQoKTsKKyAgICAgICAgLyoqIERlZmluZSB3aWR0aCB0byB1
c2Ugd2hlbiByZW5kZXJpbmcgb3V0bGluZSAqLworICAgICAgICBfdGhpcy5vdXRsaW5lV2lkdGgg
PSAwLjAyOworICAgICAgICAvKiogRGVmaW5lcyBjb2xvciB0byB1c2Ugd2hlbiByZW5kZXJpbmcg
b3ZlcmxheSAqLworICAgICAgICBfdGhpcy5vdmVybGF5Q29sb3IgPSBfTWF0aHNfbWF0aF9jb2xv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siQ29sb3IzIl0uUmVkKCk7CisgICAgICAg
IC8qKiBEZWZpbmVzIGFscGhhIHRvIHVzZSB3aGVuIHJlbmRlcmluZyBvdmVybGF5ICovCisgICAg
ICAgIF90aGlzLm92ZXJsYXlBbHBoYSA9IDAuNTsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyBh
IGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGludGVybmFsIG9jdHJlZSAoaWYgYXZhaWxhYmxlKSBj
YW4gYmUgdXNlZCB0byBib29zdCBzdWJtZXNoZXMgc2VsZWN0aW9uICh0cnVlIGJ5IGRlZmF1bHQp
ICovCisgICAgICAgIF90aGlzLnVzZU9jdHJlZUZvclJlbmRlcmluZ1NlbGVjdGlvbiA9IHRydWU7
CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCBpbnRl
cm5hbCBvY3RyZWUgKGlmIGF2YWlsYWJsZSkgY2FuIGJlIHVzZWQgdG8gYm9vc3Qgc3VibWVzaGVz
IHBpY2tpbmcgKHRydWUgYnkgZGVmYXVsdCkgKi8KKyAgICAgICAgX3RoaXMudXNlT2N0cmVlRm9y
UGlja2luZyA9IHRydWU7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGlj
YXRpbmcgdGhhdCBpbnRlcm5hbCBvY3RyZWUgKGlmIGF2YWlsYWJsZSkgY2FuIGJlIHVzZWQgdG8g
Ym9vc3Qgc3VibWVzaGVzIGNvbGxpc2lvbiAodHJ1ZSBieSBkZWZhdWx0KSAqLworICAgICAgICBf
dGhpcy51c2VPY3RyZWVGb3JDb2xsaXNpb25zID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFRydWUgaWYgdGhlIG1lc2ggbXVzdCBiZSByZW5kZXJlZCBpbiBhbnkgY2FzZSAodGhpcyB3
aWxsIHNob3J0Y3V0IHRoZSBmcnVzdHVtIGNsaXBwaW5nIHBoYXNlKQorICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMuYWx3YXlzU2VsZWN0QXNBY3RpdmVNZXNoID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCB0aGUg
Ym91bmRpbmcgaW5mbyBkb2VzIG5vdCBuZWVkIHRvIGJlIGtlcHQgaW4gc3luYyAoZm9yIHBlcmZv
cm1hbmNlIHJlYXNvbikKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmRvTm90U3luY0JvdW5k
aW5nSW5mbyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRo
ZSBjdXJyZW50IGFjdGlvbiBtYW5hZ2VyCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLmFjdGlvbk1hbmFnZXIgPSBudWxsOworICAgICAgICAvLyBDb2xsaXNpb25zCisgICAg
ICAgIF90aGlzLl9tZXNoQ29sbGlzaW9uRGF0YSA9IG5ldyBfQ29sbGlzaW9uc19tZXNoQ29sbGlz
aW9uRGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siX01lc2hDb2xsaXNpb25EYXRh
Il0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgZWxsaXBzb2lk
IHVzZWQgdG8gaW1wZXJzb25hdGUgdGhpcyBtZXNoIHdoZW4gdXNpbmcgY29sbGlzaW9uIGVuZ2lu
ZSAoZGVmYXVsdCBpcyAoMC41LCAxLCAwLjUpKQorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2NhbWVyYXMsX21lc2hfY29sbGlzaW9uc19hbmRfZ3Jh
dml0eQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZWxsaXBzb2lkID0gbmV3IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMC41LCAx
LCAwLjUpOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBlbGxpcHNv
aWQgb2Zmc2V0IHVzZWQgdG8gaW1wZXJzb25hdGUgdGhpcyBtZXNoIHdoZW4gdXNpbmcgY29sbGlz
aW9uIGVuZ2luZSAoZGVmYXVsdCBpcyAoMCwgMCwgMCkpCisgICAgICAgICAqIEBzZWUgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvY2FtZXJhcyxfbWVzaF9jb2xsaXNpb25zX2Fu
ZF9ncmF2aXR5CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5lbGxpcHNvaWRPZmZzZXQgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXSgwLCAwLCAwKTsKKyAgICAgICAgLy8gRWRnZXMKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZXMgZWRnZSB3aWR0aCB1c2VkIHdoZW4gZWRnZXNSZW5kZXJlciBpcyBlbmFibGVkCisg
ICAgICAgICAqIEBzZWUgaHR0cHM6Ly93d3cuYmFieWxvbmpzLXBsYXlncm91bmQuY29tLyMxME9K
U0cjMTMKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmVkZ2VzV2lkdGggPSAxOworICAgICAg
ICAvKioKKyAgICAgICAgICogRGVmaW5lcyBlZGdlIGNvbG9yIHVzZWQgd2hlbiBlZGdlc1JlbmRl
cmVyIGlzIGVuYWJsZWQKKyAgICAgICAgICogQHNlZSBodHRwczovL3d3dy5iYWJ5bG9uanMtcGxh
eWdyb3VuZC5jb20vIzEwT0pTRyMxMworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZWRnZXND
b2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVf
X1siQ29sb3I0Il0oMSwgMCwgMCwgMSk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAg
IF90aGlzLl9lZGdlc1JlbmRlcmVyID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICAgICAgX3RoaXMuX21hc3Rlck1lc2ggPSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLwor
ICAgICAgICBfdGhpcy5fYm91bmRpbmdJbmZvID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4g
Ki8KKyAgICAgICAgX3RoaXMuX3JlbmRlcklkID0gMDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICAgICAgX3RoaXMuX2ludGVyc2VjdGlvbnNJblByb2dyZXNzID0gbmV3IEFycmF5KCk7Cisg
ICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl91bkluZGV4ZWQgPSBmYWxzZTsK
KyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2xpZ2h0U291cmNlcyA9IG5l
dyBBcnJheSgpOworICAgICAgICAvLyBMb2FkaW5nIHByb3BlcnRpZXMKKyAgICAgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX3dhaXRpbmdEYXRhID0geworICAgICAgICAgICAgbG9k
czogbnVsbCwKKyAgICAgICAgICAgIGFjdGlvbnM6IG51bGwsCisgICAgICAgICAgICBmcmVlemVX
b3JsZE1hdHJpeDogbnVsbAorICAgICAgICB9OworICAgICAgICAvKiogQGhpZGRlbiAqLworICAg
ICAgICBfdGhpcy5fYm9uZXNUcmFuc2Zvcm1NYXRyaWNlcyA9IG51bGw7CisgICAgICAgIC8qKiBA
aGlkZGVuICovCisgICAgICAgIF90aGlzLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlID0gbnVsbDsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBtZXNo
IGlzIHJlYnVpbHQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vblJlYnVpbGRPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIF90aGlzLl9vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdl
ID0gZnVuY3Rpb24gKGNvbGxpc2lvbklkLCBuZXdQb3NpdGlvbiwgY29sbGlkZWRNZXNoKSB7Cisg
ICAgICAgICAgICBpZiAoY29sbGlkZWRNZXNoID09PSB2b2lkIDApIHsgY29sbGlkZWRNZXNoID0g
bnVsbDsgfQorICAgICAgICAgICAgbmV3UG9zaXRpb24uc3VidHJhY3RUb1JlZihfdGhpcy5fbWVz
aENvbGxpc2lvbkRhdGEuX29sZFBvc2l0aW9uRm9yQ29sbGlzaW9ucywgX3RoaXMuX21lc2hDb2xs
aXNpb25EYXRhLl9kaWZmUG9zaXRpb25Gb3JDb2xsaXNpb25zKTsKKyAgICAgICAgICAgIGlmIChf
dGhpcy5fbWVzaENvbGxpc2lvbkRhdGEuX2RpZmZQb3NpdGlvbkZvckNvbGxpc2lvbnMubGVuZ3Ro
KCkgPiBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5l
Il0uQ29sbGlzaW9uc0Vwc2lsb24pIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5wb3NpdGlvbi5h
ZGRJblBsYWNlKF90aGlzLl9tZXNoQ29sbGlzaW9uRGF0YS5fZGlmZlBvc2l0aW9uRm9yQ29sbGlz
aW9ucyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29sbGlkZWRNZXNoKSB7Cisg
ICAgICAgICAgICAgICAgX3RoaXMub25Db2xsaWRlT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMo
Y29sbGlkZWRNZXNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLm9uQ29sbGlz
aW9uUG9zaXRpb25DaGFuZ2VPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhfdGhpcy5wb3NpdGlv
bik7CisgICAgICAgIH07CisgICAgICAgIF90aGlzLmdldFNjZW5lKCkuYWRkTWVzaChfdGhpcyk7
CisgICAgICAgIF90aGlzLl9yZXN5bmNMaWdodFNvdXJjZXMoKTsKKyAgICAgICAgLy8gTWVzaCBV
bmlmb3JtIEJ1ZmZlci4KKyAgICAgICAgX3RoaXMuX3VuaWZvcm1CdWZmZXIgPSBuZXcgX01hdGVy
aWFsc191bmlmb3JtQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJVbmlmb3Jt
QnVmZmVyIl0oX3RoaXMuZ2V0U2NlbmUoKS5nZXRFbmdpbmUoKSk7CisgICAgICAgIF90aGlzLl9i
dWlsZFVuaWZvcm1MYXlvdXQoKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLCAiQklMTEJPQVJETU9ERV9OT05FIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogTm8gYmlsbGJvYXJkCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBfTWVzaGVzX3RyYW5z
Zm9ybU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVHJhbnNmb3JtTm9kZSJdLkJJ
TExCT0FSRE1PREVfTk9ORTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEFic3RyYWN0TWVzaCwgIkJJTExCT0FSRE1PREVfWCIsIHsKKyAgICAgICAgLyoqIEJp
bGxib2FyZCBvbiBYIGF4aXMgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gX01lc2hlc190cmFuc2Zvcm1Ob2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIlRyYW5zZm9ybU5vZGUiXS5CSUxMQk9BUkRNT0RFX1g7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gsICJCSUxMQk9BUkRNT0RF
X1kiLCB7CisgICAgICAgIC8qKiBCaWxsYm9hcmQgb24gWSBheGlzICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJUcmFuc2Zvcm1Ob2RlIl0uQklMTEJPQVJETU9E
RV9ZOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJh
Y3RNZXNoLCAiQklMTEJPQVJETU9ERV9aIiwgeworICAgICAgICAvKiogQmlsbGJvYXJkIG9uIFog
YXhpcyAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBf
TWVzaGVzX3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVHJhbnNm
b3JtTm9kZSJdLkJJTExCT0FSRE1PREVfWjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEFic3RyYWN0TWVzaCwgIkJJTExCT0FSRE1PREVfQUxMIiwgeworICAg
ICAgICAvKiogQmlsbGJvYXJkIG9uIGFsbCBheGVzICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJUcmFuc2Zvcm1Ob2RlIl0uQklMTEJPQVJETU9ERV9BTEw7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gs
ICJCSUxMQk9BUkRNT0RFX1VTRV9QT1NJVElPTiIsIHsKKyAgICAgICAgLyoqIEJpbGxib2FyZCBv
biB1c2luZyBwb3NpdGlvbiBpbnN0ZWFkIG9mIG9yaWVudGF0aW9uICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJUcmFuc2Zvcm1Ob2RlIl0uQklMTEJPQVJETU9E
RV9VU0VfUE9TSVRJT047CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90eXBlLCAiZmFjZXROYiIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIG51bWJlciBvZiBmYWNldHMgaW4gdGhlIG1lc2gKKyAgICAgICAg
ICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfZmFjZXRk
YXRhI3doYXQtaXMtYS1tZXNoLWZhY2V0CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERh
dGFJbmZvLl9mYWNldERhdGEuZmFjZXROYjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEFic3RyYWN0TWVzaC5wcm90b3R5cGUsICJwYXJ0aXRpb25pbmdTdWJk
aXZpc2lvbnMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldCB0aGUgbnVt
YmVyIChpbnRlZ2VyKSBvZiBzdWJkaXZpc2lvbnMgcGVyIGF4aXMgaW4gdGhlIHBhcnRpb25pbmcg
c3BhY2UKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hv
d190b191c2VfZmFjZXRkYXRhI3R3ZWFraW5nLXRoZS1wYXJ0aXRpb25pbmcKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lu
dGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2ZhY2V0RGF0YS5wYXJ0aXRpb25pbmdTdWJkaXZp
c2lvbnM7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKG5iKSB7CisgICAgICAg
ICAgICB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9mYWNldERhdGEucGFydGl0
aW9uaW5nU3ViZGl2aXNpb25zID0gbmI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90eXBlLCAicGFydGl0aW9uaW5nQkJveFJh
dGlvIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHJhdGlvIChmbG9hdCkgdG8gYXBw
bHkgdG8gdGhlIGJvdWRpbmcgYm94IHNpemUgdG8gc2V0IHRvIHRoZSBwYXJ0aW9uaW5nIHNwYWNl
LgorICAgICAgICAgKiBFeCA6IDEuMDEgKGRlZmF1bHQpIHRoZSBwYXJ0aW9uaW5nIHNwYWNlIGlz
IDElIGJpZ2dlciB0aGFuIHRoZSBib3VuZGluZyBib3gKKyAgICAgICAgICogQHNlZSBodHRwOi8v
ZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfZmFjZXRkYXRhI3R3ZWFraW5nLXRo
ZS1wYXJ0aXRpb25pbmcKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2Zh
Y2V0RGF0YS5wYXJ0aXRpb25pbmdCQm94UmF0aW87CisgICAgICAgIH0sCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHJhdGlvKSB7CisgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVz
aERhdGFJbmZvLl9mYWNldERhdGEucGFydGl0aW9uaW5nQkJveFJhdGlvID0gcmF0aW87CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJv
dG90eXBlLCAibXVzdERlcHRoU29ydEZhY2V0cyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBmYWNldHMgbXVzdCBi
ZSBkZXB0aCBzb3J0ZWQgb24gbmV4dCBjYWxsIHRvIGB1cGRhdGVGYWNldERhdGEoKWAuCisgICAg
ICAgICAqIFdvcmtzIG9ubHkgZm9yIHVwZGF0YWJsZSBtZXNoZXMuCisgICAgICAgICAqIERvZXNu
J3Qgd29yayB3aXRoIG11bHRpLW1hdGVyaWFscworICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9mYWNldGRhdGEjZmFjZXQtZGVwdGgtc29y
dAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fZmFjZXREYXRhLmZhY2V0
RGVwdGhTb3J0OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzb3J0KSB7Cisg
ICAgICAgICAgICB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9mYWNldERhdGEu
ZmFjZXREZXB0aFNvcnQgPSBzb3J0OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgImZhY2V0RGVwdGhTb3J0RnJvbSIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBsb2NhdGlvbiAoVmVjdG9yMykgd2hlcmUg
dGhlIGZhY2V0IGRlcHRoIHNvcnQgbXVzdCBiZSBjb21wdXRlZCBmcm9tLgorICAgICAgICAgKiBC
eSBkZWZhdWx0LCB0aGUgYWN0aXZlIGNhbWVyYSBwb3NpdGlvbi4KKyAgICAgICAgICogVXNlZCBv
bmx5IHdoZW4gZmFjZXQgZGVwdGggc29ydCBpcyBlbmFibGVkCisgICAgICAgICAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2ZhY2V0ZGF0YSNmYWNldC1k
ZXB0aC1zb3J0CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9mYWNldERh
dGEuZmFjZXREZXB0aFNvcnRGcm9tOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
IChsb2NhdGlvbikgeworICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRh
SW5mby5fZmFjZXREYXRhLmZhY2V0RGVwdGhTb3J0RnJvbSA9IGxvY2F0aW9uOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlw
ZSwgImlzRmFjZXREYXRhRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIGdldHMg
YSBib29sZWFuIGluZGljYXRpbmcgaWYgZmFjZXREYXRhIGlzIGVuYWJsZWQKKyAgICAgICAgICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfZmFjZXRkYXRh
I3doYXQtaXMtYS1tZXNoLWZhY2V0CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJ
bmZvLl9mYWNldERhdGEuZmFjZXREYXRhRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLl91cGRhdGVOb25Vbmlm
b3JtU2NhbGluZ1N0YXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIGlmICghX3N1cGVy
LnByb3RvdHlwZS5fdXBkYXRlTm9uVW5pZm9ybVNjYWxpbmdTdGF0ZS5jYWxsKHRoaXMsIHZhbHVl
KSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHRoaXMu
X21hcmtTdWJNZXNoZXNBc01pc2NEaXJ0eSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90eXBlLCAib25D
b2xsaWRlIiwgeworICAgICAgICAvKiogU2V0IGEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMg
bWVzaCBjb2xsaWRlcyB3aXRoIGFub3RoZXIgb25lICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fbWVzaENvbGxpc2lvbkRhdGEuX29u
Q29sbGlkZU9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vbkNvbGxpZGVPYnNlcnZh
YmxlLnJlbW92ZSh0aGlzLl9tZXNoQ29sbGlzaW9uRGF0YS5fb25Db2xsaWRlT2JzZXJ2ZXIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fbWVzaENvbGxpc2lvbkRhdGEuX29uQ29s
bGlkZU9ic2VydmVyID0gdGhpcy5vbkNvbGxpZGVPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gu
cHJvdG90eXBlLCAib25Db2xsaXNpb25Qb3NpdGlvbkNoYW5nZSIsIHsKKyAgICAgICAgLyoqIFNl
dCBhIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgY29sbGlzaW9uJ3MgcG9zaXRpb24gY2hhbmdl
cyAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICAgICAgaWYg
KHRoaXMuX21lc2hDb2xsaXNpb25EYXRhLl9vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdlT2JzZXJ2
ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQ29sbGlzaW9uUG9zaXRpb25DaGFuZ2VPYnNl
cnZhYmxlLnJlbW92ZSh0aGlzLl9tZXNoQ29sbGlzaW9uRGF0YS5fb25Db2xsaXNpb25Qb3NpdGlv
bkNoYW5nZU9ic2VydmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX21lc2hD
b2xsaXNpb25EYXRhLl9vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdlT2JzZXJ2ZXIgPSB0aGlzLm9u
Q29sbGlzaW9uUG9zaXRpb25DaGFuZ2VPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90
eXBlLCAidmlzaWJpbGl0eSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0
cyBtZXNoIHZpc2liaWxpdHkgYmV0d2VlbiAwIGFuZCAxIChkZWZhdWx0IGlzIDEpCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl92aXNpYmlsaXR5OworICAgICAgICB9LAor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIG1lc2ggdmlzaWJpbGl0eSBiZXR3
ZWVuIDAgYW5kIDEgKGRlZmF1bHQgaXMgMSkKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5faW50ZXJuYWxBYnN0cmFjdE1l
c2hEYXRhSW5mby5fdmlzaWJpbGl0eSA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVz
aERhdGFJbmZvLl92aXNpYmlsaXR5ID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9tYXJrU3Vi
TWVzaGVzQXNNaXNjRGlydHkoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEFic3RyYWN0TWVzaC5wcm90b3R5cGUsICJtYXRlcmlhbCIsIHsKKyAgICAgICAg
LyoqIEdldHMgb3Igc2V0cyBjdXJyZW50IG1hdGVyaWFsICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hdGVyaWFsOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX21h
dGVyaWFsID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIG1hdGVyaWFsIG1lc2ggbWFwIGlkIG5lZWRl
ZAorICAgICAgICAgICAgaWYgKHRoaXMuX21hdGVyaWFsICYmIHRoaXMuX21hdGVyaWFsLm1lc2hN
YXApIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXRlcmlhbC5tZXNoTWFwW3RoaXMudW5pcXVl
SWRdID0gdW5kZWZpbmVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fbWF0ZXJp
YWwgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5tZXNoTWFwKSB7Cisg
ICAgICAgICAgICAgICAgdmFsdWUubWVzaE1hcFt0aGlzLnVuaXF1ZUlkXSA9IHRoaXM7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5vbk1hdGVyaWFsQ2hhbmdlZE9ic2VydmFi
bGUuaGFzT2JzZXJ2ZXJzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vbk1hdGVyaWFsQ2hhbmdl
ZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCF0aGlzLnN1Yk1lc2hlcykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3VuQmluZEVmZmVjdCgpOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlw
ZSwgInJlY2VpdmVTaGFkb3dzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBz
ZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBtZXNoIGNhbiByZWNlaXZlIHJlYWx0
aW1lIHNoYWRvd3MKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFi
eWxvbjEwMS9zaGFkb3dzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9y
ZWNlaXZlU2hhZG93czsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9y
ZWNlaXZlU2hhZG93cyA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZv
Ll9yZWNlaXZlU2hhZG93cyA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fbWFya1N1Yk1lc2hl
c0FzTGlnaHREaXJ0eSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgImhhc1ZlcnRleEFscGhhIiwgeworICAgICAg
ICAvKiogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBtZXNoIGNv
bnRhaW5zIHZlcnRleCBjb2xvciBkYXRhIHdpdGggYWxwaGEgdmFsdWVzICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsQWJzdHJh
Y3RNZXNoRGF0YUluZm8uX2hhc1ZlcnRleEFscGhhOworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2ludGVybmFsQWJzdHJh
Y3RNZXNoRGF0YUluZm8uX2hhc1ZlcnRleEFscGhhID09PSB2YWx1ZSkgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ludGVybmFsQWJz
dHJhY3RNZXNoRGF0YUluZm8uX2hhc1ZlcnRleEFscGhhID0gdmFsdWU7CisgICAgICAgICAgICB0
aGlzLl9tYXJrU3ViTWVzaGVzQXNBdHRyaWJ1dGVzRGlydHkoKTsKKyAgICAgICAgICAgIHRoaXMu
X21hcmtTdWJNZXNoZXNBc01pc2NEaXJ0eSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgInVzZVZlcnRleENvbG9y
cyIsIHsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0
IHRoaXMgbWVzaCBuZWVkcyB0byB1c2UgdmVydGV4IGNvbG9yIGRhdGEgdG8gcmVuZGVyIChpZiB0
aGlzIGtpbmQgb2YgdmVydGV4IGRhdGEgaXMgYXZhaWxhYmxlIGluIHRoZSBnZW9tZXRyeSkgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50
ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fdXNlVmVydGV4Q29sb3JzOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2lu
dGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX3VzZVZlcnRleENvbG9ycyA9PT0gdmFsdWUpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl91c2VWZXJ0ZXhDb2xvcnMgPSB2YWx1ZTsK
KyAgICAgICAgICAgIHRoaXMuX21hcmtTdWJNZXNoZXNBc0F0dHJpYnV0ZXNEaXJ0eSgpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnBy
b3RvdHlwZSwgImNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGJvbmUgYW5pbWF0
aW9ucyBtdXN0IGJlIGNvbXB1dGVkIGJ5IHRoZSBDUFUgKGZhbHNlIGJ5IGRlZmF1bHQpCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9jb21wdXRlQm9uZXNVc2luZ1NoYWRl
cnM7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fY29tcHV0ZUJvbmVz
VXNpbmdTaGFkZXJzID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8u
X2NvbXB1dGVCb25lc1VzaW5nU2hhZGVycyA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fbWFy
a1N1Yk1lc2hlc0FzQXR0cmlidXRlc0RpcnR5KCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90eXBlLCAibnVtQm9uZUluZmx1
ZW5jZXJzIiwgeworICAgICAgICAvKiogR2V0cyBvciBzZXRzIHRoZSBudW1iZXIgb2YgYWxsb3dl
ZCBib25lIGluZmx1ZW5jZXMgcGVyIHZlcnRleCAoNCBieSBkZWZhdWx0KSAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEFic3Ry
YWN0TWVzaERhdGFJbmZvLl9udW1Cb25lSW5mbHVlbmNlcnM7CisgICAgICAgIH0sCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5faW50ZXJuYWxB
YnN0cmFjdE1lc2hEYXRhSW5mby5fbnVtQm9uZUluZmx1ZW5jZXJzID09PSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2lu
dGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX251bUJvbmVJbmZsdWVuY2VycyA9IHZhbHVlOwor
ICAgICAgICAgICAgdGhpcy5fbWFya1N1Yk1lc2hlc0FzQXR0cmlidXRlc0RpcnR5KCk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJv
dG90eXBlLCAiYXBwbHlGb2ciLCB7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFu
IGluZGljYXRpbmcgdGhhdCB0aGlzIG1lc2ggd2lsbCBhbGxvdyBmb2cgdG8gYmUgcmVuZGVyZWQg
b24gaXQgKHRydWUgYnkgZGVmYXVsdCkgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fYXBw
bHlGb2c7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fYXBwbHlGb2cg
PT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fYXBwbHlGb2cgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtTdWJNZXNoZXNBc01pc2NEaXJ0eSgpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnBy
b3RvdHlwZSwgImxheWVyTWFzayIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Ig
c2V0cyB0aGUgY3VycmVudCBsYXllciBtYXNrIChkZWZhdWx0IGlzIDB4MEZGRkZGRkYpCisgICAg
ICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9sYXllcm1hc2tzX2Fu
ZF9tdWx0aS1jYW1fdGV4dHVyZXMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUlu
Zm8uX2xheWVyTWFzazsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hE
YXRhSW5mby5fbGF5ZXJNYXNrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fbGF5
ZXJNYXNrID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9yZXN5bmNMaWdodFNvdXJjZXMoKTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFic3RyYWN0TWVz
aC5wcm90b3R5cGUsICJjb2xsaXNpb25NYXNrIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyBvciBzZXRzIGEgY29sbGlzaW9uIG1hc2sgdXNlZCB0byBtYXNrIGNvbGxpc2lvbnMgKGRl
ZmF1bHQgaXMgLTEpLgorICAgICAgICAgKiBBIGNvbGxpc2lvbiBiZXR3ZWVuIEEgYW5kIEIgd2ls
bCBoYXBwZW4gaWYgQS5jb2xsaXNpb25Hcm91cCAmIGIuY29sbGlzaW9uTWFzayAhPT0gMAorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fbWVzaENvbGxpc2lvbkRhdGEuX2NvbGxpc2lvbk1hc2s7CisgICAgICAgIH0sCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKG1hc2spIHsKKyAgICAgICAgICAgIHRoaXMuX21lc2hDb2xsaXNp
b25EYXRhLl9jb2xsaXNpb25NYXNrID0gIWlzTmFOKG1hc2spID8gbWFzayA6IC0xOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3Rv
dHlwZSwgImNvbGxpc2lvbkdyb3VwIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBv
ciBzZXRzIHRoZSBjdXJyZW50IGNvbGxpc2lvbiBncm91cCBtYXNrICgtMSBieSBkZWZhdWx0KS4K
KyAgICAgICAgICogQSBjb2xsaXNpb24gYmV0d2VlbiBBIGFuZCBCIHdpbGwgaGFwcGVuIGlmIEEu
Y29sbGlzaW9uR3JvdXAgJiBiLmNvbGxpc2lvbk1hc2sgIT09IDAKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lc2hDb2xs
aXNpb25EYXRhLl9jb2xsaXNpb25Hcm91cDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAobWFzaykgeworICAgICAgICAgICAgdGhpcy5fbWVzaENvbGxpc2lvbkRhdGEuX2NvbGxp
c2lvbkdyb3VwID0gIWlzTmFOKG1hc2spID8gbWFzayA6IC0xOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgImxpZ2h0
U291cmNlcyIsIHsKKyAgICAgICAgLyoqIEdldHMgdGhlIGxpc3Qgb2YgbGlnaHRzIGFmZmVjdGlu
ZyB0aGF0IG1lc2ggKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fbGlnaHRTb3VyY2VzOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgIl9wb3NpdGlvbnMiLCB7Cisg
ICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90eXBlLCAic2tlbGV0b24iLCB7CisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsQWJzdHJh
Y3RNZXNoRGF0YUluZm8uX3NrZWxldG9uOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBvciBzZXRzIGEgc2tlbGV0b24gdG8gYXBwbHkgc2tpbmluZyB0cmFuc2Zvcm1h
dGlvbnMKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hv
d190b191c2VfYm9uZXNfYW5kX3NrZWxldG9ucworICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IHRoaXMuX2ludGVy
bmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX3NrZWxldG9uOworICAgICAgICAgICAgaWYgKHNrZWxl
dG9uICYmIHNrZWxldG9uLm5lZWRJbml0aWFsU2tpbk1hdHJpeCkgeworICAgICAgICAgICAgICAg
IHNrZWxldG9uLl91bnJlZ2lzdGVyTWVzaFdpdGhQb3NlTWF0cml4KHRoaXMpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLm5lZWRJbml0aWFsU2tpbk1hdHJp
eCkgeworICAgICAgICAgICAgICAgIHZhbHVlLl9yZWdpc3Rlck1lc2hXaXRoUG9zZU1hdHJpeCh0
aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ludGVybmFsQWJzdHJhY3RN
ZXNoRGF0YUluZm8uX3NrZWxldG9uID0gdmFsdWU7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2lu
dGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX3NrZWxldG9uKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fYm9uZXNUcmFuc2Zvcm1NYXRyaWNlcyA9IG51bGw7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9tYXJrU3ViTWVzaGVzQXNBdHRyaWJ1dGVzRGlydHkoKTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fYnVpbGRVbmlmb3JtTGF5b3V0
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0o
IndvcmxkIiwgMTYpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZp
c2liaWxpdHkiLCAxKTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5jcmVhdGUoKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFRyYW5zZmVyIHRoZSBtZXNoIHZhbHVlcyB0byBpdHMgVUJP
LgorICAgICAqIEBwYXJhbSB3b3JsZCBUaGUgd29ybGQgbWF0cml4IGFzc29jaWF0ZWQgd2l0aCB0
aGUgbWVzaAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUudHJhbnNmZXJUb0Vm
ZmVjdCA9IGZ1bmN0aW9uICh3b3JsZCkgeworICAgICAgICB2YXIgdWJvID0gdGhpcy5fdW5pZm9y
bUJ1ZmZlcjsKKyAgICAgICAgdWJvLnVwZGF0ZU1hdHJpeCgid29ybGQiLCB3b3JsZCk7CisgICAg
ICAgIHViby51cGRhdGVGbG9hdCgidmlzaWJpbGl0eSIsIHRoaXMuX2ludGVybmFsQWJzdHJhY3RN
ZXNoRGF0YUluZm8uX3Zpc2liaWxpdHkpOworICAgICAgICB1Ym8udXBkYXRlKCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBtZXNoIHVuaWZvcm0gYnVmZmVyLgorICAgICAqIEBy
ZXR1cm4gdGhlIHVuaWZvcm0gYnVmZmVyIG9mIHRoZSBtZXNoLgorICAgICAqLworICAgIEFic3Ry
YWN0TWVzaC5wcm90b3R5cGUuZ2V0TWVzaFVuaWZvcm1CdWZmZXIgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl91bmlmb3JtQnVmZmVyOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmV0dXJucyB0aGUgc3RyaW5nICJBYnN0cmFjdE1lc2giCisgICAgICogQHJldHVybnMgIkFi
c3RyYWN0TWVzaCIKKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLmdldENsYXNz
TmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJBYnN0cmFjdE1lc2giOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUg
Y3VycmVudCBtZXNoCisgICAgICogQHBhcmFtIGZ1bGxEZXRhaWxzIGRlZmluZXMgYSBib29sZWFu
IGluZGljYXRpbmcgaWYgZnVsbCBkZXRhaWxzIG11c3QgYmUgaW5jbHVkZWQKKyAgICAgKiBAcmV0
dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBtZXNoCisgICAgICov
CisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIChmdWxsRGV0
YWlscykgeworICAgICAgICB2YXIgcmV0ID0gIk5hbWU6ICIgKyB0aGlzLm5hbWUgKyAiLCBpc0lu
c3RhbmNlOiAiICsgKHRoaXMuZ2V0Q2xhc3NOYW1lKCkgIT09ICJJbnN0YW5jZWRNZXNoIiA/ICJZ
RVMiIDogIk5PIik7CisgICAgICAgIHJldCArPSAiLCAjIG9mIHN1Ym1lc2hlczogIiArICh0aGlz
LnN1Yk1lc2hlcyA/IHRoaXMuc3ViTWVzaGVzLmxlbmd0aCA6IDApOworICAgICAgICB2YXIgc2tl
bGV0b24gPSB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9za2VsZXRvbjsKKyAg
ICAgICAgaWYgKHNrZWxldG9uKSB7CisgICAgICAgICAgICByZXQgKz0gIiwgc2tlbGV0b246ICIg
KyBza2VsZXRvbi5uYW1lOworICAgICAgICB9CisgICAgICAgIGlmIChmdWxsRGV0YWlscykgewor
ICAgICAgICAgICAgcmV0ICs9ICIsIGJpbGxib2FyZCBtb2RlOiAiICsgKFsiTk9ORSIsICJYIiwg
IlkiLCBudWxsLCAiWiIsIG51bGwsIG51bGwsICJBTEwiXSlbdGhpcy5iaWxsYm9hcmRNb2RlXTsK
KyAgICAgICAgICAgIHJldCArPSAiLCBmcmVlemUgd3JsZCBtYXQ6ICIgKyAodGhpcy5faXNXb3Js
ZE1hdHJpeEZyb3plbiB8fCB0aGlzLl93YWl0aW5nRGF0YS5mcmVlemVXb3JsZE1hdHJpeCA/ICJZ
RVMiIDogIk5PIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBl
Ll9nZXRFZmZlY3RpdmVQYXJlbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9t
YXN0ZXJNZXNoICYmIHRoaXMuYmlsbGJvYXJkTW9kZSAhPT0gX01lc2hlc190cmFuc2Zvcm1Ob2Rl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlRyYW5zZm9ybU5vZGUiXS5CSUxMQk9BUkRN
T0RFX05PTkUpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXN0ZXJNZXNoOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl9nZXRFZmZlY3RpdmVQYXJlbnQu
Y2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQWJzdHJhY3RNZXNo
LnByb3RvdHlwZS5fZ2V0QWN0aW9uTWFuYWdlckZvclRyaWdnZXIgPSBmdW5jdGlvbiAodHJpZ2dl
ciwgaW5pdGlhbENhbGwpIHsKKyAgICAgICAgaWYgKGluaXRpYWxDYWxsID09PSB2b2lkIDApIHsg
aW5pdGlhbENhbGwgPSB0cnVlOyB9CisgICAgICAgIGlmICh0aGlzLmFjdGlvbk1hbmFnZXIgJiYg
KGluaXRpYWxDYWxsIHx8IHRoaXMuYWN0aW9uTWFuYWdlci5pc1JlY3Vyc2l2ZSkpIHsKKyAgICAg
ICAgICAgIGlmICh0cmlnZ2VyKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uTWFu
YWdlci5oYXNTcGVjaWZpY1RyaWdnZXIodHJpZ2dlcikpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuYWN0aW9uTWFuYWdlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hY3Rp
b25NYW5hZ2VyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5w
YXJlbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLnBhcmVudC5fZ2V0QWN0aW9uTWFuYWdlckZvclRyaWdnZXIodHJpZ2dlciwgZmFs
c2UpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90
eXBlLl9yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLm9uUmVidWlsZE9ic2Vy
dmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICBpZiAodGhpcy5fb2NjbHVzaW9u
UXVlcnkpIHsKKyAgICAgICAgICAgIHRoaXMuX29jY2x1c2lvblF1ZXJ5ID0gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXRoaXMuc3ViTWVzaGVzKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuc3ViTWVzaGVz
OyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBfYVtf
aV07CisgICAgICAgICAgICBzdWJNZXNoLl9yZWJ1aWxkKCk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKiBAaGlkZGVuICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fcmVzeW5jTGln
aHRTb3VyY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9saWdodFNvdXJjZXMubGVu
Z3RoID0gMDsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuZ2V0U2NlbmUoKS5s
aWdodHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbGlnaHQgPSBf
YVtfaV07CisgICAgICAgICAgICBpZiAoIWxpZ2h0LmlzRW5hYmxlZCgpKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGlnaHQuY2Fu
QWZmZWN0TWVzaCh0aGlzKSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2xpZ2h0U291cmNlcy5w
dXNoKGxpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9tYXJr
U3ViTWVzaGVzQXNMaWdodERpcnR5KCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAg
IEFic3RyYWN0TWVzaC5wcm90b3R5cGUuX3Jlc3luY0xpZ2hTb3VyY2UgPSBmdW5jdGlvbiAobGln
aHQpIHsKKyAgICAgICAgdmFyIGlzSW4gPSBsaWdodC5pc0VuYWJsZWQoKSAmJiBsaWdodC5jYW5B
ZmZlY3RNZXNoKHRoaXMpOworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9saWdodFNvdXJjZXMu
aW5kZXhPZihsaWdodCk7CisgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAgICAg
IGlmICghaXNJbikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX2xpZ2h0U291cmNlcy5wdXNoKGxpZ2h0KTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0luKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fbGlnaHRTb3VyY2VzLnNwbGlj
ZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbWFya1N1Yk1lc2hlc0FzTGln
aHREaXJ0eSgpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBBYnN0cmFjdE1lc2gu
cHJvdG90eXBlLl91bkJpbmRFZmZlY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFy
IF9pID0gMCwgX2EgPSB0aGlzLnN1Yk1lc2hlczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAg
ICAgICAgICAgIHZhciBzdWJNZXNoID0gX2FbX2ldOworICAgICAgICAgICAgc3ViTWVzaC5zZXRF
ZmZlY3QobnVsbCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAg
QWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fcmVtb3ZlTGlnaHRTb3VyY2UgPSBmdW5jdGlvbiAobGln
aHQsIGRpc3Bvc2UpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fbGlnaHRTb3VyY2VzLmlu
ZGV4T2YobGlnaHQpOworICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbGlnaHRTb3VyY2VzLnNwbGljZShpbmRl
eCwgMSk7CisgICAgICAgIHRoaXMuX21hcmtTdWJNZXNoZXNBc0xpZ2h0RGlydHkoZGlzcG9zZSk7
CisgICAgfTsKKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLl9tYXJrU3ViTWVzaGVzQXNEaXJ0
eSA9IGZ1bmN0aW9uIChmdW5jKSB7CisgICAgICAgIGlmICghdGhpcy5zdWJNZXNoZXMpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9h
ID0gdGhpcy5zdWJNZXNoZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2
YXIgc3ViTWVzaCA9IF9hW19pXTsKKyAgICAgICAgICAgIGlmIChzdWJNZXNoLl9tYXRlcmlhbERl
ZmluZXMpIHsKKyAgICAgICAgICAgICAgICBmdW5jKHN1Yk1lc2guX21hdGVyaWFsRGVmaW5lcyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fbWFya1N1Yk1lc2hlc0FzTGlnaHREaXJ0eSA9IGZ1
bmN0aW9uIChkaXNwb3NlKSB7CisgICAgICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHsgZGlz
cG9zZSA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMuX21hcmtTdWJNZXNoZXNBc0RpcnR5KGZ1bmN0
aW9uIChkZWZpbmVzKSB7IHJldHVybiBkZWZpbmVzLm1hcmtBc0xpZ2h0RGlydHkoZGlzcG9zZSk7
IH0pOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90
eXBlLl9tYXJrU3ViTWVzaGVzQXNBdHRyaWJ1dGVzRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX21hcmtTdWJNZXNoZXNBc0RpcnR5KGZ1bmN0aW9uIChkZWZpbmVzKSB7IHJldHVy
biBkZWZpbmVzLm1hcmtBc0F0dHJpYnV0ZXNEaXJ0eSgpOyB9KTsKKyAgICB9OworICAgIC8qKiBA
aGlkZGVuICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fbWFya1N1Yk1lc2hlc0FzTWlz
Y0RpcnR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuc3ViTWVzaGVzKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBf
YSA9IHRoaXMuc3ViTWVzaGVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAg
dmFyIHN1Yk1lc2ggPSBfYVtfaV07CisgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBzdWJNZXNo
LmdldE1hdGVyaWFsKCk7CisgICAgICAgICAgICBpZiAobWF0ZXJpYWwpIHsKKyAgICAgICAgICAg
ICAgICBtYXRlcmlhbC5tYXJrQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEwX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX01pc2NEaXJ0eUZsYWcpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgInNjYWxpbmciLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAqIEdldHMgb3Igc2V0cyBhIFZlY3RvcjMgZGVwaWN0aW5nIHRoZSBtZXNoIHNjYWxpbmcg
YWxvbmcgZWFjaCBsb2NhbCBheGlzIFgsIFksIFouICBEZWZhdWx0IGlzICgxLjAsIDEuMCwgMS4w
KQorICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9zY2FsaW5nOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChu
ZXdTY2FsaW5nKSB7CisgICAgICAgICAgICB0aGlzLl9zY2FsaW5nID0gbmV3U2NhbGluZzsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFic3RyYWN0TWVzaC5w
cm90b3R5cGUsICJpc0Jsb2NrZWQiLCB7CisgICAgICAgIC8vIE1ldGhvZHMKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWVzaCBpcyBibG9ja2VkLiBJbXBsZW1l
bnRlZCBieSBjaGlsZCBjbGFzc2VzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqCisgICAgICogUmV0dXJucyB0aGUgbWVzaCBpdHNlbGYgYnkgZGVmYXVsdC4gSW1wbGVtZW50
ZWQgYnkgY2hpbGQgY2xhc3NlcworICAgICAqIEBwYXJhbSBjYW1lcmEgZGVmaW5lcyB0aGUgY2Ft
ZXJhIHRvIHVzZSB0byBwaWNrIHRoZSByaWdodCBMT0QgbGV2ZWwKKyAgICAgKiBAcmV0dXJucyB0
aGUgY3VycmVudEFic3RyYWN0TWVzaAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5
cGUuZ2V0TE9EID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgMCBieSBkZWZhdWx0LiBJbXBsZW1lbnRlZCBi
eSBjaGlsZCBjbGFzc2VzCisgICAgICogQHJldHVybnMgYW4gaW50ZWdlcgorICAgICAqLworICAg
IEFic3RyYWN0TWVzaC5wcm90b3R5cGUuZ2V0VG90YWxWZXJ0aWNlcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgcG9z
aXRpdmUgaW50ZWdlciA6IHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiB0aGlzIG1lc2gg
Z2VvbWV0cnkuCisgICAgICogQHJldHVybnMgdGhlIG51bW5lciBvZiBpbmRpY2VzIG9yIHplcm8g
aWYgdGhlIG1lc2ggaGFzIG5vIGdlb21ldHJ5LgorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5w
cm90b3R5cGUuZ2V0VG90YWxJbmRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
MDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgbnVsbCBieSBkZWZhdWx0LiBJbXBs
ZW1lbnRlZCBieSBjaGlsZCBjbGFzc2VzCisgICAgICogQHJldHVybnMgbnVsbAorICAgICAqLwor
ICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuZ2V0SW5kaWNlcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBh
cnJheSBvZiB0aGUgcmVxdWVzdGVkIHZlcnRleCBkYXRhIGtpbmQuIEltcGxlbWVudGVkIGJ5IGNo
aWxkIGNsYXNzZXMKKyAgICAgKiBAcGFyYW0ga2luZCBkZWZpbmVzIHRoZSB2ZXJ0ZXggZGF0YSBr
aW5kIHRvIHVzZQorICAgICAqIEByZXR1cm5zIG51bGwKKyAgICAgKi8KKyAgICBBYnN0cmFjdE1l
c2gucHJvdG90eXBlLmdldFZlcnRpY2VzRGF0YSA9IGZ1bmN0aW9uIChraW5kKSB7CisgICAgICAg
IHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgdmVydGV4IGRh
dGEgb2YgdGhlIG1lc2ggZ2VvbWV0cnkgZm9yIHRoZSByZXF1ZXN0ZWQgYGtpbmRgLgorICAgICAq
IElmIHRoZSBtZXNoIGhhcyBubyBnZW9tZXRyeSwgYSBuZXcgR2VvbWV0cnkgb2JqZWN0IGlzIHNl
dCB0byB0aGUgbWVzaCBhbmQgdGhlbiBwYXNzZWQgdGhpcyB2ZXJ0ZXggZGF0YS4KKyAgICAgKiBO
b3RlIHRoYXQgYSBuZXcgdW5kZXJseWluZyBWZXJ0ZXhCdWZmZXIgb2JqZWN0IGlzIGNyZWF0ZWQg
ZWFjaCBjYWxsLgorICAgICAqIElmIHRoZSBga2luZGAgaXMgdGhlIGBQb3NpdGlvbktpbmRgLCB0
aGUgbWVzaCBCb3VuZGluZ0luZm8gaXMgcmVuZXdlZCwgc28gdGhlIGJvdW5kaW5nIGJveCBhbmQg
c3BoZXJlLCBhbmQgdGhlIG1lc2ggV29ybGQgTWF0cml4IGlzIHJlY29tcHV0ZWQuCisgICAgICog
QHBhcmFtIGtpbmQgZGVmaW5lcyB2ZXJ0ZXggZGF0YSBraW5kOgorICAgICAqICogVmVydGV4QnVm
ZmVyLlBvc2l0aW9uS2luZAorICAgICAqICogVmVydGV4QnVmZmVyLlVWS2luZAorICAgICAqICog
VmVydGV4QnVmZmVyLlVWMktpbmQKKyAgICAgKiAqIFZlcnRleEJ1ZmZlci5VVjNLaW5kCisgICAg
ICogKiBWZXJ0ZXhCdWZmZXIuVVY0S2luZAorICAgICAqICogVmVydGV4QnVmZmVyLlVWNUtpbmQK
KyAgICAgKiAqIFZlcnRleEJ1ZmZlci5VVjZLaW5kCisgICAgICogKiBWZXJ0ZXhCdWZmZXIuQ29s
b3JLaW5kCisgICAgICogKiBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzS2luZAorICAgICAq
ICogVmVydGV4QnVmZmVyLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZAorICAgICAqICogVmVydGV4
QnVmZmVyLk1hdHJpY2VzV2VpZ2h0c0tpbmQKKyAgICAgKiAqIFZlcnRleEJ1ZmZlci5NYXRyaWNl
c1dlaWdodHNFeHRyYUtpbmQKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHNv
dXJjZQorICAgICAqIEBwYXJhbSB1cGRhdGFibGUgZGVmaW5lcyBpZiB0aGUgZGF0YSBtdXN0IGJl
IGZsYWdnZWQgYXMgdXBkYXRhYmxlIChvciBzdGF0aWMpCisgICAgICogQHBhcmFtIHN0cmlkZSBk
ZWZpbmVzIHRoZSB2ZXJ0ZXggc3RyaWRlIChzaXplIG9mIGFuIGVudGlyZSB2ZXJ0ZXgpLiBDYW4g
YmUgbnVsbCBhbmQgaW4gdGhpcyBjYXNlIHdpbGwgYmUgZGVkdWNlZCBmcm9tIHZlcnRleCBkYXRh
IGtpbmQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICovCisgICAgQWJz
dHJhY3RNZXNoLnByb3RvdHlwZS5zZXRWZXJ0aWNlc0RhdGEgPSBmdW5jdGlvbiAoa2luZCwgZGF0
YSwgdXBkYXRhYmxlLCBzdHJpZGUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBleGlzdGluZyB2ZXJ0ZXggZGF0YSBvZiB0aGUgbWVz
aCBnZW9tZXRyeSBmb3IgdGhlIHJlcXVlc3RlZCBga2luZGAuCisgICAgICogSWYgdGhlIG1lc2gg
aGFzIG5vIGdlb21ldHJ5LCBpdCBpcyBzaW1wbHkgcmV0dXJuZWQgYXMgaXQgaXMuCisgICAgICog
QHBhcmFtIGtpbmQgZGVmaW5lcyB2ZXJ0ZXggZGF0YSBraW5kOgorICAgICAqICogVmVydGV4QnVm
ZmVyLlBvc2l0aW9uS2luZAorICAgICAqICogVmVydGV4QnVmZmVyLlVWS2luZAorICAgICAqICog
VmVydGV4QnVmZmVyLlVWMktpbmQKKyAgICAgKiAqIFZlcnRleEJ1ZmZlci5VVjNLaW5kCisgICAg
ICogKiBWZXJ0ZXhCdWZmZXIuVVY0S2luZAorICAgICAqICogVmVydGV4QnVmZmVyLlVWNUtpbmQK
KyAgICAgKiAqIFZlcnRleEJ1ZmZlci5VVjZLaW5kCisgICAgICogKiBWZXJ0ZXhCdWZmZXIuQ29s
b3JLaW5kCisgICAgICogKiBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzS2luZAorICAgICAq
ICogVmVydGV4QnVmZmVyLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZAorICAgICAqICogVmVydGV4
QnVmZmVyLk1hdHJpY2VzV2VpZ2h0c0tpbmQKKyAgICAgKiAqIFZlcnRleEJ1ZmZlci5NYXRyaWNl
c1dlaWdodHNFeHRyYUtpbmQKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHNv
dXJjZQorICAgICAqIEBwYXJhbSB1cGRhdGVFeHRlbmRzIElmIGBraW5kYCBpcyBgUG9zaXRpb25L
aW5kYCBhbmQgaWYgYHVwZGF0ZUV4dGVuZHNgIGlzIHRydWUsIHRoZSBtZXNoIEJvdW5kaW5nSW5m
byBpcyByZW5ld2VkLCBzbyB0aGUgYm91bmRpbmcgYm94IGFuZCBzcGhlcmUsIGFuZCB0aGUgbWVz
aCBXb3JsZCBNYXRyaXggaXMgcmVjb21wdXRlZAorICAgICAqIEBwYXJhbSBtYWtlSXRVbmlxdWUg
SWYgdHJ1ZSwgYSBuZXcgZ2xvYmFsIGdlb21ldHJ5IGlzIGNyZWF0ZWQgZnJvbSB0aGlzIGRhdGEg
YW5kIGlzIHNldCB0byB0aGUgbWVzaAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gK
KyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLnVwZGF0ZVZlcnRpY2VzRGF0YSA9
IGZ1bmN0aW9uIChraW5kLCBkYXRhLCB1cGRhdGVFeHRlbmRzLCBtYWtlSXRVbmlxdWUpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBtZXNo
IGluZGljZXMsCisgICAgICogSWYgdGhlIG1lc2ggaGFzIG5vIGdlb21ldHJ5LCBhIG5ldyBHZW9t
ZXRyeSBvYmplY3QgaXMgY3JlYXRlZCBhbmQgc2V0IHRvIHRoZSBtZXNoLgorICAgICAqIEBwYXJh
bSBpbmRpY2VzIEV4cGVjdHMgYW4gYXJyYXkgcG9wdWxhdGVkIHdpdGggaW50ZWdlcnMgb3IgYSB0
eXBlZCBhcnJheSAoSW50MzJBcnJheSwgVWludDMyQXJyYXksIFVpbnQxNkFycmF5KQorICAgICAq
IEBwYXJhbSB0b3RhbFZlcnRpY2VzIERlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNl
cworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBBYnN0cmFj
dE1lc2gucHJvdG90eXBlLnNldEluZGljZXMgPSBmdW5jdGlvbiAoaW5kaWNlcywgdG90YWxWZXJ0
aWNlcykgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdl
dHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgc3BlY2lmaWMgdmVydGV4IGRhdGEgaXMgcHJlc2Vu
dAorICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMgdGhlIHZlcnRleCBkYXRhIGtpbmQgdG8gdXNl
CisgICAgICogQHJldHVybnMgdHJ1ZSBpcyBkYXRhIGtpbmQgaXMgcHJlc2VudAorICAgICAqLwor
ICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuaXNWZXJ0aWNlc0RhdGFQcmVzZW50ID0gZnVuY3Rp
b24gKGtpbmQpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmV0dXJucyB0aGUgbWVzaCBCb3VuZGluZ0luZm8gb2JqZWN0IG9yIGNyZWF0ZXMgYSBuZXcg
b25lIGFuZCByZXR1cm5zIGlmIGl0IHdhcyB1bmRlZmluZWQuCisgICAgICogTm90ZSB0aGF0IGl0
IHJldHVybnMgYSBzaGFsbG93IGJvdW5kaW5nIG9mIHRoZSBtZXNoIChpLmUuIGl0IGRvZXMgbm90
IGluY2x1ZGUgY2hpbGRyZW4pLgorICAgICAqIFRvIGdldCB0aGUgZnVsbCBib3VuZGluZyBvZiBh
bGwgY2hpbGRyZW4sIGNhbGwgYGdldEhpZXJhcmNoeUJvdW5kaW5nVmVjdG9yc2AgaW5zdGVhZC4K
KyAgICAgKiBAcmV0dXJucyBhIEJvdW5kaW5nSW5mbworICAgICAqLworICAgIEFic3RyYWN0TWVz
aC5wcm90b3R5cGUuZ2V0Qm91bmRpbmdJbmZvID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5fbWFzdGVyTWVzaCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc3Rlck1lc2gu
Z2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9ib3VuZGlu
Z0luZm8pIHsKKyAgICAgICAgICAgIC8vIHRoaXMuX2JvdW5kaW5nSW5mbyBpcyBiZWluZyBjcmVh
dGVkIGhlcmUKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJvdW5kaW5nSW5mbygpOworICAgICAg
ICB9CisgICAgICAgIC8vIGNhbm5vdCBiZSBudWxsLgorICAgICAgICByZXR1cm4gdGhpcy5fYm91
bmRpbmdJbmZvOworICAgIH07CisgICAgLyoqCisgICAgICogVW5pZm9ybWx5IHNjYWxlcyB0aGUg
bWVzaCB0byBmaXQgaW5zaWRlIG9mIGEgdW5pdCBjdWJlICgxIFggMSBYIDEgdW5pdHMpCisgICAg
ICogQHBhcmFtIGluY2x1ZGVEZXNjZW5kYW50cyBVc2UgdGhlIGhpZXJhcmNoeSdzIGJvdW5kaW5n
IGJveCBpbnN0ZWFkIG9mIHRoZSBtZXNoJ3MgYm91bmRpbmcgYm94LiBEZWZhdWx0IGlzIGZhbHNl
CisgICAgICogQHBhcmFtIGlnbm9yZVJvdGF0aW9uIGlnbm9yZSByb3RhdGlvbiB3aGVuIGNvbXB1
dGluZyB0aGUgc2NhbGUgKGllLiBvYmplY3Qgd2lsbCBiZSBheGlzIGFsaWduZWQpLiBEZWZhdWx0
IGlzIGZhbHNlCisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBwcmVkaWNhdGUgdGhhdCBpcyBwYXNz
ZWQgaW4gdG8gZ2V0SGllcmFyY2h5Qm91bmRpbmdWZWN0b3JzIHdoZW4gc2VsZWN0aW5nIHdoaWNo
IG9iamVjdCBzaG91bGQgYmUgaW5jbHVkZWQgd2hlbiBzY2FsaW5nCisgICAgICogQHJldHVybnMg
dGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUubm9y
bWFsaXplVG9Vbml0Q3ViZSA9IGZ1bmN0aW9uIChpbmNsdWRlRGVzY2VuZGFudHMsIGlnbm9yZVJv
dGF0aW9uLCBwcmVkaWNhdGUpIHsKKyAgICAgICAgaWYgKGluY2x1ZGVEZXNjZW5kYW50cyA9PT0g
dm9pZCAwKSB7IGluY2x1ZGVEZXNjZW5kYW50cyA9IHRydWU7IH0KKyAgICAgICAgaWYgKGlnbm9y
ZVJvdGF0aW9uID09PSB2b2lkIDApIHsgaWdub3JlUm90YXRpb24gPSBmYWxzZTsgfQorICAgICAg
ICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5ub3JtYWxpemVUb1VuaXRDdWJlLmNhbGwodGhpcywg
aW5jbHVkZURlc2NlbmRhbnRzLCBpZ25vcmVSb3RhdGlvbiwgcHJlZGljYXRlKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIE92ZXJ3cml0ZSB0aGUgY3VycmVudCBib3VuZGluZyBpbmZvCisgICAg
ICogQHBhcmFtIGJvdW5kaW5nSW5mbyBkZWZpbmVzIHRoZSBuZXcgYm91bmRpbmcgaW5mbworICAg
ICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gu
cHJvdG90eXBlLnNldEJvdW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChib3VuZGluZ0luZm8pIHsKKyAg
ICAgICAgdGhpcy5fYm91bmRpbmdJbmZvID0gYm91bmRpbmdJbmZvOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJv
dG90eXBlLCAidXNlQm9uZXMiLCB7CisgICAgICAgIC8qKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0
aW5nIGlmIHRoaXMgbWVzaCBoYXMgc2tpbm5pbmcgZGF0YSBhbmQgYW4gYXR0YWNoZWQgc2tlbGV0
b24gKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gKHRo
aXMuc2tlbGV0b24gJiYgdGhpcy5nZXRTY2VuZSgpLnNrZWxldG9uc0VuYWJsZWQgJiYgdGhpcy5p
c1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCkgJiYgdGhpcy5pc1Zl
cnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCkpOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuX3By
ZUFjdGl2YXRlID0gZnVuY3Rpb24gKCkgeworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLl9wcmVBY3RpdmF0ZUZvckludGVybWVkaWF0ZVJlbmRl
cmluZyA9IGZ1bmN0aW9uIChyZW5kZXJJZCkgeworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLl9hY3RpdmF0ZSA9IGZ1bmN0aW9uIChyZW5kZXJJ
ZCwgaW50ZXJtZWRpYXRlUmVuZGVyaW5nKSB7CisgICAgICAgIHRoaXMuX3JlbmRlcklkID0gcmVu
ZGVySWQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLl9wb3N0QWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAg
QWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fZnJlZXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICAv
LyBEbyBub3RoaW5nCisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFic3RyYWN0TWVz
aC5wcm90b3R5cGUuX3VuRnJlZXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBEbyBub3Ro
aW5nCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHdvcmxkIG1hdHJp
eAorICAgICAqIEByZXR1cm5zIGEgTWF0cml4CisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnBy
b3RvdHlwZS5nZXRXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMu
X21hc3Rlck1lc2ggJiYgdGhpcy5iaWxsYm9hcmRNb2RlID09PSBfTWVzaGVzX3RyYW5zZm9ybU5v
ZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVHJhbnNmb3JtTm9kZSJdLkJJTExCT0FS
RE1PREVfTk9ORSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc3Rlck1lc2guZ2V0V29y
bGRNYXRyaXgoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5n
ZXRXb3JsZE1hdHJpeC5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLl9nZXRXb3JsZE1hdHJpeERldGVybWluYW50ID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fbWFzdGVyTWVzaCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX21hc3Rlck1lc2guX2dldFdvcmxkTWF0cml4RGV0ZXJtaW5hbnQoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fZ2V0V29ybGRNYXRyaXhE
ZXRlcm1pbmFudC5jYWxsKHRoaXMpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEFic3RyYWN0TWVzaC5wcm90b3R5cGUsICJpc0FuSW5zdGFuY2UiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgbWVzaCBpcyBhbiBp
bnN0YW5jZSBvciBhIHJlZ3VsYXIgbWVzaAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90eXBlLCAiaGFzSW5z
dGFuY2VzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNh
dGluZyBpZiB0aGlzIG1lc2ggaGFzIGluc3RhbmNlcworICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUG9pbnQgb2Yg
VmlldyBNb3ZlbWVudCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvKioK
KyAgICAgKiBQZXJmb3JtIHJlbGF0aXZlIHBvc2l0aW9uIGNoYW5nZSBmcm9tIHRoZSBwb2ludCBv
ZiB2aWV3IG9mIGJlaGluZCB0aGUgZnJvbnQgb2YgdGhlIG1lc2guCisgICAgICogVGhpcyBpcyBw
ZXJmb3JtZWQgdGFraW5nIGludG8gYWNjb3VudCB0aGUgbWVzaGVzIGN1cnJlbnQgcm90YXRpb24s
IHNvIHlvdSBkbyBub3QgaGF2ZSB0byBjYXJlLgorICAgICAqIFN1cHBvcnRzIGRlZmluaXRpb24g
b2YgbWVzaCBmYWNpbmcgZm9yd2FyZCBvciBiYWNrd2FyZAorICAgICAqIEBwYXJhbSBhbW91bnRS
aWdodCBkZWZpbmVzIHRoZSBkaXN0YW5jZSBvbiB0aGUgcmlnaHQgYXhpcworICAgICAqIEBwYXJh
bSBhbW91bnRVcCBkZWZpbmVzIHRoZSBkaXN0YW5jZSBvbiB0aGUgdXAgYXhpcworICAgICAqIEBw
YXJhbSBhbW91bnRGb3J3YXJkIGRlZmluZXMgdGhlIGRpc3RhbmNlIG9uIHRoZSBmb3J3YXJkIGF4
aXMKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICovCisgICAgQWJzdHJh
Y3RNZXNoLnByb3RvdHlwZS5tb3ZlUE9WID0gZnVuY3Rpb24gKGFtb3VudFJpZ2h0LCBhbW91bnRV
cCwgYW1vdW50Rm9yd2FyZCkgeworICAgICAgICB0aGlzLnBvc2l0aW9uLmFkZEluUGxhY2UodGhp
cy5jYWxjTW92ZVBPVihhbW91bnRSaWdodCwgYW1vdW50VXAsIGFtb3VudEZvcndhcmQpKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxjdWxhdGUgcmVs
YXRpdmUgcG9zaXRpb24gY2hhbmdlIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgYmVoaW5kIHRo
ZSBmcm9udCBvZiB0aGUgbWVzaC4KKyAgICAgKiBUaGlzIGlzIHBlcmZvcm1lZCB0YWtpbmcgaW50
byBhY2NvdW50IHRoZSBtZXNoZXMgY3VycmVudCByb3RhdGlvbiwgc28geW91IGRvIG5vdCBoYXZl
IHRvIGNhcmUuCisgICAgICogU3VwcG9ydHMgZGVmaW5pdGlvbiBvZiBtZXNoIGZhY2luZyBmb3J3
YXJkIG9yIGJhY2t3YXJkCisgICAgICogQHBhcmFtIGFtb3VudFJpZ2h0IGRlZmluZXMgdGhlIGRp
c3RhbmNlIG9uIHRoZSByaWdodCBheGlzCisgICAgICogQHBhcmFtIGFtb3VudFVwIGRlZmluZXMg
dGhlIGRpc3RhbmNlIG9uIHRoZSB1cCBheGlzCisgICAgICogQHBhcmFtIGFtb3VudEZvcndhcmQg
ZGVmaW5lcyB0aGUgZGlzdGFuY2Ugb24gdGhlIGZvcndhcmQgYXhpcworICAgICAqIEByZXR1cm5z
IHRoZSBuZXcgZGlzcGxhY2VtZW50IHZlY3RvcgorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5w
cm90b3R5cGUuY2FsY01vdmVQT1YgPSBmdW5jdGlvbiAoYW1vdW50UmlnaHQsIGFtb3VudFVwLCBh
bW91bnRGb3J3YXJkKSB7CisgICAgICAgIHZhciByb3RNYXRyaXggPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdKCk7CisgICAgICAg
IHZhciByb3RRdWF0ZXJuaW9uID0gKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSA/IHRoaXMucm90
YXRpb25RdWF0ZXJuaW9uIDogX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbllhd1BpdGNoUm9sbCh0aGlzLnJvdGF0aW9u
LnksIHRoaXMucm90YXRpb24ueCwgdGhpcy5yb3RhdGlvbi56KTsKKyAgICAgICAgcm90UXVhdGVy
bmlvbi50b1JvdGF0aW9uTWF0cml4KHJvdE1hdHJpeCk7CisgICAgICAgIHZhciB0cmFuc2xhdGlv
bkRlbHRhID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHZhciBkZWZGb3J3YXJkTXVsdCA9IHRoaXMuZGVm
aW5lZEZhY2luZ0ZvcndhcmQgPyAtMSA6IDE7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0
ZXNGcm9tRmxvYXRzVG9SZWYoYW1vdW50UmlnaHQgKiBkZWZGb3J3YXJkTXVsdCwgYW1vdW50VXAs
IGFtb3VudEZvcndhcmQgKiBkZWZGb3J3YXJkTXVsdCwgcm90TWF0cml4LCB0cmFuc2xhdGlvbkRl
bHRhKTsKKyAgICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uRGVsdGE7CisgICAgfTsKKyAgICAvLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFBvaW50IG9mIFZpZXcgUm90YXRpb24g
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLyoqCisgICAgICogUGVyZm9y
bSByZWxhdGl2ZSByb3RhdGlvbiBjaGFuZ2UgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBiZWhp
bmQgdGhlIGZyb250IG9mIHRoZSBtZXNoLgorICAgICAqIFN1cHBvcnRzIGRlZmluaXRpb24gb2Yg
bWVzaCBmYWNpbmcgZm9yd2FyZCBvciBiYWNrd2FyZAorICAgICAqIEBwYXJhbSBmbGlwQmFjayBk
ZWZpbmVzIHRoZSBmbGlwCisgICAgICogQHBhcmFtIHR3aXJsQ2xvY2t3aXNlIGRlZmluZXMgdGhl
IHR3aXJsCisgICAgICogQHBhcmFtIHRpbHRSaWdodCBkZWZpbmVzIHRoZSB0aWx0CisgICAgICog
QHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90
b3R5cGUucm90YXRlUE9WID0gZnVuY3Rpb24gKGZsaXBCYWNrLCB0d2lybENsb2Nrd2lzZSwgdGls
dFJpZ2h0KSB7CisgICAgICAgIHRoaXMucm90YXRpb24uYWRkSW5QbGFjZSh0aGlzLmNhbGNSb3Rh
dGVQT1YoZmxpcEJhY2ssIHR3aXJsQ2xvY2t3aXNlLCB0aWx0UmlnaHQpKTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxjdWxhdGUgcmVsYXRpdmUgcm90
YXRpb24gY2hhbmdlIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgYmVoaW5kIHRoZSBmcm9udCBv
ZiB0aGUgbWVzaC4KKyAgICAgKiBTdXBwb3J0cyBkZWZpbml0aW9uIG9mIG1lc2ggZmFjaW5nIGZv
cndhcmQgb3IgYmFja3dhcmQuCisgICAgICogQHBhcmFtIGZsaXBCYWNrIGRlZmluZXMgdGhlIGZs
aXAKKyAgICAgKiBAcGFyYW0gdHdpcmxDbG9ja3dpc2UgZGVmaW5lcyB0aGUgdHdpcmwKKyAgICAg
KiBAcGFyYW0gdGlsdFJpZ2h0IGRlZmluZXMgdGhlIHRpbHQKKyAgICAgKiBAcmV0dXJucyB0aGUg
bmV3IHJvdGF0aW9uIHZlY3RvcgorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUu
Y2FsY1JvdGF0ZVBPViA9IGZ1bmN0aW9uIChmbGlwQmFjaywgdHdpcmxDbG9ja3dpc2UsIHRpbHRS
aWdodCkgeworICAgICAgICB2YXIgZGVmRm9yd2FyZE11bHQgPSB0aGlzLmRlZmluZWRGYWNpbmdG
b3J3YXJkID8gMSA6IC0xOworICAgICAgICByZXR1cm4gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oZmxpcEJhY2sgKiBkZWZGb3J3
YXJkTXVsdCwgdHdpcmxDbG9ja3dpc2UsIHRpbHRSaWdodCAqIGRlZkZvcndhcmRNdWx0KTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlY29tcHV0ZXMgYW5kIHNldHMgYSBu
ZXcgQm91bmRpbmdJbmZvIHRvIHRoZSBtZXNoIHVubGVzcyBpdCBpcyBsb2NrZWQuCisgICAgICog
VGhpcyBtZWFucyB0aGUgbWVzaCB1bmRlcmx5aW5nIGJvdW5kaW5nIGJveCBhbmQgc3BoZXJlIGFy
ZSByZWNvbXB1dGVkLgorICAgICAqIEBwYXJhbSBhcHBseVNrZWxldG9uIGRlZmluZXMgd2hldGhl
ciB0byBhcHBseSB0aGUgc2tlbGV0b24gYmVmb3JlIGNvbXB1dGluZyB0aGUgYm91bmRpbmcgaW5m
bworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBBYnN0cmFj
dE1lc2gucHJvdG90eXBlLnJlZnJlc2hCb3VuZGluZ0luZm8gPSBmdW5jdGlvbiAoYXBwbHlTa2Vs
ZXRvbikgeworICAgICAgICBpZiAoYXBwbHlTa2VsZXRvbiA9PT0gdm9pZCAwKSB7IGFwcGx5U2tl
bGV0b24gPSBmYWxzZTsgfQorICAgICAgICBpZiAodGhpcy5fYm91bmRpbmdJbmZvICYmIHRoaXMu
X2JvdW5kaW5nSW5mby5pc0xvY2tlZCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fcmVmcmVzaEJvdW5kaW5nSW5mbyh0aGlzLl9nZXRQb3NpdGlv
bkRhdGEoYXBwbHlTa2VsZXRvbiksIG51bGwpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fcmVmcmVz
aEJvdW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChkYXRhLCBiaWFzKSB7CisgICAgICAgIGlmIChkYXRh
KSB7CisgICAgICAgICAgICB2YXIgZXh0ZW5kID0gT2JqZWN0KF9NYXRoc19tYXRoX2Z1bmN0aW9u
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siZXh0cmFjdE1pbkFuZE1heCJdKShkYXRh
LCAwLCB0aGlzLmdldFRvdGFsVmVydGljZXMoKSwgYmlhcyk7CisgICAgICAgICAgICBpZiAodGhp
cy5fYm91bmRpbmdJbmZvKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYm91bmRpbmdJbmZvLnJl
Q29uc3RydWN0KGV4dGVuZC5taW5pbXVtLCBleHRlbmQubWF4aW11bSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ib3VuZGluZ0luZm8g
PSBuZXcgX0N1bGxpbmdfYm91bmRpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IkJvdW5kaW5nSW5mbyJdKGV4dGVuZC5taW5pbXVtLCBleHRlbmQubWF4aW11bSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuc3ViTWVzaGVzKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5zdWJNZXNoZXMubGVuZ3RoOyBp
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zdWJNZXNoZXNbaW5kZXhdLnJlZnJlc2hC
b3VuZGluZ0luZm8oZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fdXBkYXRlQm91bmRpbmdJbmZvKCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAg
IEFic3RyYWN0TWVzaC5wcm90b3R5cGUuX2dldFBvc2l0aW9uRGF0YSA9IGZ1bmN0aW9uIChhcHBs
eVNrZWxldG9uKSB7CisgICAgICAgIHZhciBkYXRhID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0u
UG9zaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKGRhdGEgJiYgYXBwbHlTa2VsZXRvbiAmJiB0aGlz
LnNrZWxldG9uKSB7CisgICAgICAgICAgICBkYXRhID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVG9vbHMiXS5TbGljZShkYXRhKTsKKyAgICAgICAgICAgIHRoaXMu
X2dlbmVyYXRlUG9pbnRzQXJyYXkoKTsKKyAgICAgICAgICAgIHZhciBtYXRyaWNlc0luZGljZXNE
YXRhID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCk7CisgICAg
ICAgICAgICB2YXIgbWF0cmljZXNXZWlnaHRzRGF0YSA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlcnRleEJ1ZmZlciJd
Lk1hdHJpY2VzV2VpZ2h0c0tpbmQpOworICAgICAgICAgICAgaWYgKG1hdHJpY2VzV2VpZ2h0c0Rh
dGEgJiYgbWF0cmljZXNJbmRpY2VzRGF0YSkgeworICAgICAgICAgICAgICAgIHZhciBuZWVkRXh0
cmFzID0gdGhpcy5udW1Cb25lSW5mbHVlbmNlcnMgPiA0OworICAgICAgICAgICAgICAgIHZhciBt
YXRyaWNlc0luZGljZXNFeHRyYURhdGEgPSBuZWVkRXh0cmFzID8gdGhpcy5nZXRWZXJ0aWNlc0Rh
dGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVm
ZmVyIl0uTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kKSA6IG51bGw7CisgICAgICAgICAgICAgICAg
dmFyIG1hdHJpY2VzV2VpZ2h0c0V4dHJhRGF0YSA9IG5lZWRFeHRyYXMgPyB0aGlzLmdldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0
ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQpIDogbnVsbDsKKyAgICAgICAgICAg
ICAgICB0aGlzLnNrZWxldG9uLnByZXBhcmUoKTsKKyAgICAgICAgICAgICAgICB2YXIgc2tlbGV0
b25NYXRyaWNlcyA9IHRoaXMuc2tlbGV0b24uZ2V0VHJhbnNmb3JtTWF0cmljZXModGhpcyk7Cisg
ICAgICAgICAgICAgICAgdmFyIHRlbXBWZWN0b3IgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF07CisgICAgICAg
ICAgICAgICAgdmFyIGZpbmFsTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF07CisgICAgICAgICAgICAg
ICAgdmFyIHRlbXBNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsxXTsKKyAgICAgICAgICAgICAgICB2YXIg
bWF0V2VpZ2h0SWR4ID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4ICs9IDMsIG1hdFdlaWdodElkeCArPSA0KSB7CisgICAg
ICAgICAgICAgICAgICAgIGZpbmFsTWF0cml4LnJlc2V0KCk7CisgICAgICAgICAgICAgICAgICAg
IHZhciBpbmY7CisgICAgICAgICAgICAgICAgICAgIHZhciB3ZWlnaHQ7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW5mID0gMDsgaW5mIDwgNDsgaW5mKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdlaWdodCA9IG1hdHJpY2VzV2VpZ2h0c0RhdGFbbWF0V2VpZ2h0SWR4ICsgaW5mXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIk1hdHJpeCJdLkZyb21GbG9hdDMyQXJyYXlUb1JlZlNjYWxlZChza2VsZXRvbk1hdHJp
Y2VzLCBNYXRoLmZsb29yKG1hdHJpY2VzSW5kaWNlc0RhdGFbbWF0V2VpZ2h0SWR4ICsgaW5mXSAq
IDE2KSwgd2VpZ2h0LCB0ZW1wTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aW5hbE1hdHJpeC5hZGRUb1NlbGYodGVtcE1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRF
eHRyYXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW5mID0gMDsgaW5mIDwgNDsg
aW5mKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQgPSBtYXRyaWNlc1dl
aWdodHNFeHRyYURhdGFbbWF0V2VpZ2h0SWR4ICsgaW5mXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAod2VpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4
Il0uRnJvbUZsb2F0MzJBcnJheVRvUmVmU2NhbGVkKHNrZWxldG9uTWF0cmljZXMsIE1hdGguZmxv
b3IobWF0cmljZXNJbmRpY2VzRXh0cmFEYXRhW21hdFdlaWdodElkeCArIGluZl0gKiAxNiksIHdl
aWdodCwgdGVtcE1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFs
TWF0cml4LmFkZFRvU2VsZih0ZW1wTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc0Zyb21GbG9hdHNUb1JlZihk
YXRhW2luZGV4XSwgZGF0YVtpbmRleCArIDFdLCBkYXRhW2luZGV4ICsgMl0sIGZpbmFsTWF0cml4
LCB0ZW1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcFZlY3Rvci50b0FycmF5KGRh
dGEsIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9ucykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25zW2luZGV4IC8gM10uY29weUZy
b20odGVtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuX3VwZGF0ZUJv
dW5kaW5nSW5mbyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGVmZmVjdGl2ZU1lc2ggPSB0
aGlzLl9lZmZlY3RpdmVNZXNoOworICAgICAgICBpZiAodGhpcy5fYm91bmRpbmdJbmZvKSB7Cisg
ICAgICAgICAgICB0aGlzLl9ib3VuZGluZ0luZm8udXBkYXRlKGVmZmVjdGl2ZU1lc2gud29ybGRN
YXRyaXhGcm9tQ2FjaGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
dGhpcy5fYm91bmRpbmdJbmZvID0gbmV3IF9DdWxsaW5nX2JvdW5kaW5nSW5mb19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJCb3VuZGluZ0luZm8iXSh0aGlzLmFic29sdXRlUG9zaXRpb24s
IHRoaXMuYWJzb2x1dGVQb3NpdGlvbiwgZWZmZWN0aXZlTWVzaC53b3JsZE1hdHJpeEZyb21DYWNo
ZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdXBkYXRlU3ViTWVzaGVzQm91bmRpbmdJbmZv
KGVmZmVjdGl2ZU1lc2gud29ybGRNYXRyaXhGcm9tQ2FjaGUpOworICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlw
ZS5fdXBkYXRlU3ViTWVzaGVzQm91bmRpbmdJbmZvID0gZnVuY3Rpb24gKG1hdHJpeCkgeworICAg
ICAgICBpZiAoIXRoaXMuc3ViTWVzaGVzKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgY291bnQgPSB0aGlzLnN1Yk1lc2hlcy5sZW5ndGg7CisgICAg
ICAgIGZvciAodmFyIHN1YkluZGV4ID0gMDsgc3ViSW5kZXggPCBjb3VudDsgc3ViSW5kZXgrKykg
eworICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSB0aGlzLnN1Yk1lc2hlc1tzdWJJbmRleF07Cisg
ICAgICAgICAgICBpZiAoY291bnQgPiAxIHx8ICFzdWJNZXNoLklzR2xvYmFsKSB7CisgICAgICAg
ICAgICAgICAgc3ViTWVzaC51cGRhdGVCb3VuZGluZ0luZm8obWF0cml4KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKiBAaGlk
ZGVuICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fYWZ0ZXJDb21wdXRlV29ybGRNYXRy
aXggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLmRvTm90U3luY0JvdW5kaW5nSW5m
bykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEJvdW5kaW5n
IGluZm8KKyAgICAgICAgdGhpcy5fdXBkYXRlQm91bmRpbmdJbmZvKCk7CisgICAgfTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgIl9lZmZlY3RpdmVN
ZXNoIiwgeworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiAodGhpcy5za2VsZXRvbiAmJiB0aGlzLnNrZWxldG9uLm92
ZXJyaWRlTWVzaCkgfHwgdGhpczsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICog
UmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG1lc2ggaXMgd2l0aGluIHRoZSBmcnVzdHVtIGRlZmluZWQg
YnkgdGhlIHBhc3NlZCBhcnJheSBvZiBwbGFuZXMuCisgICAgICogQSBtZXNoIGlzIGluIHRoZSBm
cnVzdHVtIGlmIGl0cyBib3VuZGluZyBib3ggaW50ZXJzZWN0cyB0aGUgZnJ1c3R1bQorICAgICAq
IEBwYXJhbSBmcnVzdHVtUGxhbmVzIGRlZmluZXMgdGhlIGZydXN0dW0gdG8gdGVzdAorICAgICAq
IEByZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggaXMgaW4gdGhlIGZydXN0dW0gcGxhbmVzCisgICAg
ICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5pc0luRnJ1c3R1bSA9IGZ1bmN0aW9uIChm
cnVzdHVtUGxhbmVzKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9ib3VuZGluZ0luZm8gIT09IG51
bGwgJiYgdGhpcy5fYm91bmRpbmdJbmZvLmlzSW5GcnVzdHVtKGZydXN0dW1QbGFuZXMsIHRoaXMu
Y3VsbGluZ1N0cmF0ZWd5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYHRydWVg
IGlmIHRoZSBtZXNoIGlzIGNvbXBsZXRlbHkgaW4gdGhlIGZydXN0dW0gZGVmaW5lZCBiZSB0aGUg
cGFzc2VkIGFycmF5IG9mIHBsYW5lcy4KKyAgICAgKiBBIG1lc2ggaXMgY29tcGxldGVseSBpbiB0
aGUgZnJ1c3R1bSBpZiBpdHMgYm91bmRpbmcgYm94IGl0IGNvbXBsZXRlbHkgaW5zaWRlIHRoZSBm
cnVzdHVtLgorICAgICAqIEBwYXJhbSBmcnVzdHVtUGxhbmVzIGRlZmluZXMgdGhlIGZydXN0dW0g
dG8gdGVzdAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggaXMgY29tcGxldGVseSBp
biB0aGUgZnJ1c3R1bSBwbGFuZXMKKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBl
LmlzQ29tcGxldGVseUluRnJ1c3R1bSA9IGZ1bmN0aW9uIChmcnVzdHVtUGxhbmVzKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9ib3VuZGluZ0luZm8gIT09IG51bGwgJiYgdGhpcy5fYm91bmRpbmdJ
bmZvLmlzQ29tcGxldGVseUluRnJ1c3R1bShmcnVzdHVtUGxhbmVzKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFRydWUgaWYgdGhlIG1lc2ggaW50ZXJzZWN0cyBhbm90aGVyIG1lc2ggb3IgYSBT
b2xpZFBhcnRpY2xlIG9iamVjdAorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgYSB0YXJnZXQg
bWVzaCBvciBTb2xpZFBhcnRpY2xlIHRvIHRlc3QKKyAgICAgKiBAcGFyYW0gcHJlY2lzZSBVbmxl
c3MgdGhlIHBhcmFtZXRlciBgcHJlY2lzZWAgaXMgc2V0IHRvIGB0cnVlYCB0aGUgaW50ZXJzZWN0
aW9uIGlzIGNvbXB1dGVkIGFjY29yZGluZyB0byBBeGlzIEFsaWduZWQgQm91bmRpbmcgQm94ZXMg
KEFBQkIpLCBlbHNlIGFjY29yZGluZyB0byBPQkIgKE9yaWVudGVkIEJCb3hlcykKKyAgICAgKiBA
cGFyYW0gaW5jbHVkZURlc2NlbmRhbnRzIENhbiBiZSBzZXQgdG8gdHJ1ZSB0byB0ZXN0IGlmIHRo
ZSBtZXNoIGRlZmluZWQgaW4gcGFyYW1ldGVycyBpbnRlcnNlY3RzIHdpdGggdGhlIGN1cnJlbnQg
bWVzaCBvciBhbnkgY2hpbGQgbWVzaGVzCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBp
cyBhbiBpbnRlcnNlY3Rpb24KKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLmlu
dGVyc2VjdHNNZXNoID0gZnVuY3Rpb24gKG1lc2gsIHByZWNpc2UsIGluY2x1ZGVEZXNjZW5kYW50
cykgeworICAgICAgICBpZiAocHJlY2lzZSA9PT0gdm9pZCAwKSB7IHByZWNpc2UgPSBmYWxzZTsg
fQorICAgICAgICBpZiAoIXRoaXMuX2JvdW5kaW5nSW5mbyB8fCAhbWVzaC5fYm91bmRpbmdJbmZv
KSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX2JvdW5kaW5nSW5mby5pbnRlcnNlY3RzKG1lc2guX2JvdW5kaW5nSW5mbywgcHJlY2lzZSkp
IHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpbmNs
dWRlRGVzY2VuZGFudHMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlz
LmdldENoaWxkTWVzaGVzKCk7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGNoaWxkID0gX2FbX2ldOworICAgICAgICAgICAgICAgIGlmIChjaGlsZC5pbnRlcnNl
Y3RzTWVzaChtZXNoLCBwcmVjaXNlLCB0cnVlKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVl
IGlmIHRoZSBwYXNzZWQgcG9pbnQgKFZlY3RvcjMpIGlzIGluc2lkZSB0aGUgbWVzaCBib3VuZGlu
ZyBib3gKKyAgICAgKiBAcGFyYW0gcG9pbnQgZGVmaW5lcyB0aGUgcG9pbnQgdG8gdGVzdAorICAg
ICAqIEByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gaW50ZXJzZWN0aW9uCisgICAgICovCisg
ICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5pbnRlcnNlY3RzUG9pbnQgPSBmdW5jdGlvbiAocG9p
bnQpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9ib3VuZGluZ0luZm8pIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fYm91bmRpbmdJbmZv
LmludGVyc2VjdHNQb2ludChwb2ludCk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgImNoZWNrQ29sbGlzaW9ucyIsIHsKKyAgICAgICAg
Ly8gQ29sbGlzaW9ucworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9v
bGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBtZXNoIGNhbiBiZSB1c2VkIGluIHRoZSBjb2xsaXNp
b24gZW5naW5lCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnls
b24xMDEvY2FtZXJhcyxfbWVzaF9jb2xsaXNpb25zX2FuZF9ncmF2aXR5CisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXNo
Q29sbGlzaW9uRGF0YS5fY2hlY2tDb2xsaXNpb25zOworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uIChjb2xsaXNpb25FbmFibGVkKSB7CisgICAgICAgICAgICB0aGlzLl9tZXNoQ29s
bGlzaW9uRGF0YS5fY2hlY2tDb2xsaXNpb25zID0gY29sbGlzaW9uRW5hYmxlZDsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFic3RyYWN0TWVzaC5wcm90b3R5
cGUsICJjb2xsaWRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgQ29sbGlkZXIg
b2JqZWN0IHVzZWQgdG8gY29tcHV0ZSBjb2xsaXNpb25zIChub3QgcGh5c2ljcykKKyAgICAgICAg
ICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9jYW1lcmFzLF9tZXNo
X2NvbGxpc2lvbnNfYW5kX2dyYXZpdHkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lc2hDb2xsaXNpb25EYXRhLl9jb2xs
aWRlcjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogTW92ZSB0aGUgbWVzaCB1
c2luZyBjb2xsaXNpb24gZW5naW5lCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vYmFieWxvbjEwMS9jYW1lcmFzLF9tZXNoX2NvbGxpc2lvbnNfYW5kX2dyYXZpdHkKKyAgICAg
KiBAcGFyYW0gZGlzcGxhY2VtZW50IGRlZmluZXMgdGhlIHJlcXVlc3RlZCBkaXNwbGFjZW1lbnQg
dmVjdG9yCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIEFi
c3RyYWN0TWVzaC5wcm90b3R5cGUubW92ZVdpdGhDb2xsaXNpb25zID0gZnVuY3Rpb24gKGRpc3Bs
YWNlbWVudCkgeworICAgICAgICB2YXIgZ2xvYmFsUG9zaXRpb24gPSB0aGlzLmdldEFic29sdXRl
UG9zaXRpb24oKTsKKyAgICAgICAgZ2xvYmFsUG9zaXRpb24uYWRkVG9SZWYodGhpcy5lbGxpcHNv
aWRPZmZzZXQsIHRoaXMuX21lc2hDb2xsaXNpb25EYXRhLl9vbGRQb3NpdGlvbkZvckNvbGxpc2lv
bnMpOworICAgICAgICB2YXIgY29vcmRpbmF0b3IgPSB0aGlzLmdldFNjZW5lKCkuY29sbGlzaW9u
Q29vcmRpbmF0b3I7CisgICAgICAgIGlmICghdGhpcy5fbWVzaENvbGxpc2lvbkRhdGEuX2NvbGxp
ZGVyKSB7CisgICAgICAgICAgICB0aGlzLl9tZXNoQ29sbGlzaW9uRGF0YS5fY29sbGlkZXIgPSBj
b29yZGluYXRvci5jcmVhdGVDb2xsaWRlcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX21l
c2hDb2xsaXNpb25EYXRhLl9jb2xsaWRlci5fcmFkaXVzID0gdGhpcy5lbGxpcHNvaWQ7CisgICAg
ICAgIGNvb3JkaW5hdG9yLmdldE5ld1Bvc2l0aW9uKHRoaXMuX21lc2hDb2xsaXNpb25EYXRhLl9v
bGRQb3NpdGlvbkZvckNvbGxpc2lvbnMsIGRpc3BsYWNlbWVudCwgdGhpcy5fbWVzaENvbGxpc2lv
bkRhdGEuX2NvbGxpZGVyLCAzLCB0aGlzLCB0aGlzLl9vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdl
LCB0aGlzLnVuaXF1ZUlkKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvLyBD
b2xsaXNpb25zCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBl
Ll9jb2xsaWRlRm9yU3ViTWVzaCA9IGZ1bmN0aW9uIChzdWJNZXNoLCB0cmFuc2Zvcm1NYXRyaXgs
IGNvbGxpZGVyKSB7CisgICAgICAgIHRoaXMuX2dlbmVyYXRlUG9pbnRzQXJyYXkoKTsKKyAgICAg
ICAgaWYgKCF0aGlzLl9wb3NpdGlvbnMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICB9CisgICAgICAgIC8vIFRyYW5zZm9ybWF0aW9uCisgICAgICAgIGlmICghc3ViTWVzaC5f
bGFzdENvbGxpZGVyV29ybGRWZXJ0aWNlcyB8fCAhc3ViTWVzaC5fbGFzdENvbGxpZGVyVHJhbnNm
b3JtTWF0cml4LmVxdWFscyh0cmFuc2Zvcm1NYXRyaXgpKSB7CisgICAgICAgICAgICBzdWJNZXNo
Ll9sYXN0Q29sbGlkZXJUcmFuc2Zvcm1NYXRyaXggPSB0cmFuc2Zvcm1NYXRyaXguY2xvbmUoKTsK
KyAgICAgICAgICAgIHN1Yk1lc2guX2xhc3RDb2xsaWRlcldvcmxkVmVydGljZXMgPSBbXTsKKyAg
ICAgICAgICAgIHN1Yk1lc2guX3RyaWFuZ2xlUGxhbmVzID0gW107CisgICAgICAgICAgICB2YXIg
c3RhcnQgPSBzdWJNZXNoLnZlcnRpY2VzU3RhcnQ7CisgICAgICAgICAgICB2YXIgZW5kID0gKHN1
Yk1lc2gudmVydGljZXNTdGFydCArIHN1Yk1lc2gudmVydGljZXNDb3VudCk7CisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgeworICAgICAgICAgICAgICAgIHN1
Yk1lc2guX2xhc3RDb2xsaWRlcldvcmxkVmVydGljZXMucHVzaChfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5h
dGVzKHRoaXMuX3Bvc2l0aW9uc1tpXSwgdHJhbnNmb3JtTWF0cml4KSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29sbGlkZQorICAgICAgICBjb2xsaWRlci5fY29sbGlk
ZShzdWJNZXNoLl90cmlhbmdsZVBsYW5lcywgc3ViTWVzaC5fbGFzdENvbGxpZGVyV29ybGRWZXJ0
aWNlcywgdGhpcy5nZXRJbmRpY2VzKCksIHN1Yk1lc2guaW5kZXhTdGFydCwgc3ViTWVzaC5pbmRl
eFN0YXJ0ICsgc3ViTWVzaC5pbmRleENvdW50LCBzdWJNZXNoLnZlcnRpY2VzU3RhcnQsICEhc3Vi
TWVzaC5nZXRNYXRlcmlhbCgpLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuX3Byb2Nlc3ND
b2xsaXNpb25zRm9yU3ViTWVzaGVzID0gZnVuY3Rpb24gKGNvbGxpZGVyLCB0cmFuc2Zvcm1NYXRy
aXgpIHsKKyAgICAgICAgdmFyIHN1Yk1lc2hlcyA9IHRoaXMuX3NjZW5lLmdldENvbGxpZGluZ1N1
Yk1lc2hDYW5kaWRhdGVzKHRoaXMsIGNvbGxpZGVyKTsKKyAgICAgICAgdmFyIGxlbiA9IHN1Yk1l
c2hlcy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW47IGlu
ZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBzdWJNZXNoID0gc3ViTWVzaGVzLmRhdGFbaW5kZXhd
OworICAgICAgICAgICAgLy8gQm91bmRpbmcgdGVzdAorICAgICAgICAgICAgaWYgKGxlbiA+IDEg
JiYgIXN1Yk1lc2guX2NoZWNrQ29sbGlzaW9uKGNvbGxpZGVyKSkgeworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY29sbGlkZUZvclN1
Yk1lc2goc3ViTWVzaCwgdHJhbnNmb3JtTWF0cml4LCBjb2xsaWRlcik7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFic3Ry
YWN0TWVzaC5wcm90b3R5cGUuX2NoZWNrQ29sbGlzaW9uID0gZnVuY3Rpb24gKGNvbGxpZGVyKSB7
CisgICAgICAgIC8vIEJvdW5kaW5nIGJveCB0ZXN0CisgICAgICAgIGlmICghdGhpcy5fYm91bmRp
bmdJbmZvIHx8ICF0aGlzLl9ib3VuZGluZ0luZm8uX2NoZWNrQ29sbGlzaW9uKGNvbGxpZGVyKSkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgLy8gVHJhbnNm
b3JtYXRpb24gbWF0cml4CisgICAgICAgIHZhciBjb2xsaXNpb25zU2NhbGluZ01hdHJpeCA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3Jz
Il0uTWF0cml4WzBdOworICAgICAgICB2YXIgY29sbGlzaW9uc1RyYW5zZm9ybU1hdHJpeCA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3Jz
Il0uTWF0cml4WzFdOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siTWF0cml4Il0uU2NhbGluZ1RvUmVmKDEuMCAvIGNvbGxpZGVyLl9yYWRp
dXMueCwgMS4wIC8gY29sbGlkZXIuX3JhZGl1cy55LCAxLjAgLyBjb2xsaWRlci5fcmFkaXVzLnos
IGNvbGxpc2lvbnNTY2FsaW5nTWF0cml4KTsKKyAgICAgICAgdGhpcy53b3JsZE1hdHJpeEZyb21D
YWNoZS5tdWx0aXBseVRvUmVmKGNvbGxpc2lvbnNTY2FsaW5nTWF0cml4LCBjb2xsaXNpb25zVHJh
bnNmb3JtTWF0cml4KTsKKyAgICAgICAgdGhpcy5fcHJvY2Vzc0NvbGxpc2lvbnNGb3JTdWJNZXNo
ZXMoY29sbGlkZXIsIGNvbGxpc2lvbnNUcmFuc2Zvcm1NYXRyaXgpOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8vIFBpY2tpbmcKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFi
c3RyYWN0TWVzaC5wcm90b3R5cGUuX2dlbmVyYXRlUG9pbnRzQXJyYXkgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyBp
ZiB0aGUgcGFzc2VkIFJheSBpbnRlcnNlY3RzIHdpdGggdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0g
cmF5IGRlZmluZXMgdGhlIHJheSB0byB1c2UKKyAgICAgKiBAcGFyYW0gZmFzdENoZWNrIGRlZmlu
ZXMgaWYgZmFzdCBtb2RlIChidXQgbGVzcyBwcmVjaXNlKSBtdXN0IGJlIHVzZWQgKGZhbHNlIGJ5
IGRlZmF1bHQpCisgICAgICogQHBhcmFtIHRyaWFuZ2xlUHJlZGljYXRlIGRlZmluZXMgYW4gb3B0
aW9uYWwgcHJlZGljYXRlIHVzZWQgdG8gc2VsZWN0IGZhY2VzIHdoZW4gYSBtZXNoIGludGVyc2Vj
dGlvbiBpcyBkZXRlY3RlZAorICAgICAqIEByZXR1cm5zIHRoZSBwaWNraW5nIGluZm8KKyAgICAg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2ludGVyc2VjdF9jb2xs
aXNpb25zXy1fbWVzaAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuaW50ZXJz
ZWN0cyA9IGZ1bmN0aW9uIChyYXksIGZhc3RDaGVjaywgdHJpYW5nbGVQcmVkaWNhdGUpIHsKKyAg
ICAgICAgdmFyIHBpY2tpbmdJbmZvID0gbmV3IF9Db2xsaXNpb25zX3BpY2tpbmdJbmZvX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBpY2tpbmdJbmZvIl0oKTsKKyAgICAgICAgdmFyIGlu
dGVyc2VjdGlvblRocmVzaG9sZCA9IHRoaXMuZ2V0Q2xhc3NOYW1lKCkgPT09ICJJbnN0YW5jZWRM
aW5lc01lc2giIHx8IHRoaXMuZ2V0Q2xhc3NOYW1lKCkgPT09ICJMaW5lc01lc2giID8gdGhpcy5p
bnRlcnNlY3Rpb25UaHJlc2hvbGQgOiAwOworICAgICAgICB2YXIgYm91bmRpbmdJbmZvID0gdGhp
cy5fYm91bmRpbmdJbmZvOworICAgICAgICBpZiAoIXRoaXMuc3ViTWVzaGVzIHx8ICFib3VuZGlu
Z0luZm8gfHwgIXJheS5pbnRlcnNlY3RzU3BoZXJlKGJvdW5kaW5nSW5mby5ib3VuZGluZ1NwaGVy
ZSwgaW50ZXJzZWN0aW9uVGhyZXNob2xkKSB8fCAhcmF5LmludGVyc2VjdHNCb3goYm91bmRpbmdJ
bmZvLmJvdW5kaW5nQm94LCBpbnRlcnNlY3Rpb25UaHJlc2hvbGQpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcGlja2luZ0luZm87CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9nZW5lcmF0
ZVBvaW50c0FycmF5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBwaWNraW5nSW5mbzsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgaW50ZXJzZWN0SW5mbyA9IG51bGw7CisgICAgICAgIHZhciBzdWJN
ZXNoZXMgPSB0aGlzLl9zY2VuZS5nZXRJbnRlcnNlY3RpbmdTdWJNZXNoQ2FuZGlkYXRlcyh0aGlz
LCByYXkpOworICAgICAgICB2YXIgbGVuID0gc3ViTWVzaGVzLmxlbmd0aDsKKyAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFy
IHN1Yk1lc2ggPSBzdWJNZXNoZXMuZGF0YVtpbmRleF07CisgICAgICAgICAgICAvLyBCb3VuZGlu
ZyB0ZXN0CisgICAgICAgICAgICBpZiAobGVuID4gMSAmJiAhc3ViTWVzaC5jYW5JbnRlcnNlY3Rz
KHJheSkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHZhciBjdXJyZW50SW50ZXJzZWN0SW5mbyA9IHN1Yk1lc2guaW50ZXJzZWN0cyhyYXks
IHRoaXMuX3Bvc2l0aW9ucywgdGhpcy5nZXRJbmRpY2VzKCksIGZhc3RDaGVjaywgdHJpYW5nbGVQ
cmVkaWNhdGUpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRJbnRlcnNlY3RJbmZvKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGZhc3RDaGVjayB8fCAhaW50ZXJzZWN0SW5mbyB8fCBjdXJyZW50SW50
ZXJzZWN0SW5mby5kaXN0YW5jZSA8IGludGVyc2VjdEluZm8uZGlzdGFuY2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW50ZXJzZWN0SW5mbyA9IGN1cnJlbnRJbnRlcnNlY3RJbmZvOworICAgICAg
ICAgICAgICAgICAgICBpbnRlcnNlY3RJbmZvLnN1Yk1lc2hJZCA9IGluZGV4OworICAgICAgICAg
ICAgICAgICAgICBpZiAoZmFzdENoZWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaW50ZXJzZWN0SW5mbykgeworICAgICAgICAgICAg
Ly8gR2V0IHBpY2tlZCBwb2ludAorICAgICAgICAgICAgdmFyIHdvcmxkID0gdGhpcy5nZXRXb3Js
ZE1hdHJpeCgpOworICAgICAgICAgICAgdmFyIHdvcmxkT3JpZ2luID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBd
OworICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1sxXTsKKyAgICAgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0
b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihyYXkub3JpZ2luLCB3b3JsZCwgd29ybGRP
cmlnaW4pOworICAgICAgICAgICAgcmF5LmRpcmVjdGlvbi5zY2FsZVRvUmVmKGludGVyc2VjdElu
Zm8uZGlzdGFuY2UsIGRpcmVjdGlvbik7CisgICAgICAgICAgICB2YXIgd29ybGREaXJlY3Rpb24g
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9y
MyJdLlRyYW5zZm9ybU5vcm1hbChkaXJlY3Rpb24sIHdvcmxkKTsKKyAgICAgICAgICAgIHZhciBw
aWNrZWRQb2ludCA9IHdvcmxkRGlyZWN0aW9uLmFkZEluUGxhY2Uod29ybGRPcmlnaW4pOworICAg
ICAgICAgICAgLy8gUmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgcGlja2luZ0luZm8uaGl0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIHBpY2tpbmdJbmZvLmRpc3RhbmNlID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5EaXN0YW5jZSh3b3Js
ZE9yaWdpbiwgcGlja2VkUG9pbnQpOworICAgICAgICAgICAgcGlja2luZ0luZm8ucGlja2VkUG9p
bnQgPSBwaWNrZWRQb2ludDsKKyAgICAgICAgICAgIHBpY2tpbmdJbmZvLnBpY2tlZE1lc2ggPSB0
aGlzOworICAgICAgICAgICAgcGlja2luZ0luZm8uYnUgPSBpbnRlcnNlY3RJbmZvLmJ1IHx8IDA7
CisgICAgICAgICAgICBwaWNraW5nSW5mby5idiA9IGludGVyc2VjdEluZm8uYnYgfHwgMDsKKyAg
ICAgICAgICAgIHBpY2tpbmdJbmZvLmZhY2VJZCA9IGludGVyc2VjdEluZm8uZmFjZUlkOworICAg
ICAgICAgICAgcGlja2luZ0luZm8uc3ViTWVzaElkID0gaW50ZXJzZWN0SW5mby5zdWJNZXNoSWQ7
CisgICAgICAgICAgICByZXR1cm4gcGlja2luZ0luZm87CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHBpY2tpbmdJbmZvOworICAgIH07CisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBjdXJy
ZW50IG1lc2gKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBtZXNoIG5hbWUKKyAgICAg
KiBAcGFyYW0gbmV3UGFyZW50IGRlZmluZXMgdGhlIG5ldyBtZXNoIHBhcmVudAorICAgICAqIEBw
YXJhbSBkb05vdENsb25lQ2hpbGRyZW4gZGVmaW5lcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0
IGNoaWxkcmVuIG11c3Qgbm90IGJlIGNsb25lZCAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKiBA
cmV0dXJucyB0aGUgbmV3IG1lc2gKKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBl
LmNsb25lID0gZnVuY3Rpb24gKG5hbWUsIG5ld1BhcmVudCwgZG9Ob3RDbG9uZUNoaWxkcmVuKSB7
CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMg
YWxsIHRoZSBzdWJtZXNoZXMgb2YgdGhlIGN1cnJlbnQgbWVzaG5wCisgICAgICogQHJldHVybnMg
dGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUucmVs
ZWFzZVN1Yk1lc2hlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuc3ViTWVzaGVz
KSB7CisgICAgICAgICAgICB3aGlsZSAodGhpcy5zdWJNZXNoZXMubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5zdWJNZXNoZXNbMF0uZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5zdWJNZXNoZXMgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFJlbGVhc2VzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhYnN0cmFj
dCBtZXNoLgorICAgICAqIEBwYXJhbSBkb05vdFJlY3Vyc2UgU2V0IHRvIHRydWUgdG8gbm90IHJl
Y3Vyc2UgaW50byBlYWNoIGNoaWxkcmVuIChyZWN1cnNlIGludG8gZWFjaCBjaGlsZHJlbiBieSBk
ZWZhdWx0KQorICAgICAqIEBwYXJhbSBkaXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcyBTZXQgdG8g
dHJ1ZSB0byBhbHNvIGRpc3Bvc2UgcmVmZXJlbmNlZCBtYXRlcmlhbHMgYW5kIHRleHR1cmVzIChm
YWxzZSBieSBkZWZhdWx0KQorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuZGlz
cG9zZSA9IGZ1bmN0aW9uIChkb05vdFJlY3Vyc2UsIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVz
KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChkaXNwb3NlTWF0ZXJp
YWxBbmRUZXh0dXJlcyA9PT0gdm9pZCAwKSB7IGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzID0g
ZmFsc2U7IH0KKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICAvLyBtZXNoIG1hcCByZWxlYXNl
LgorICAgICAgICBpZiAodGhpcy5fc2NlbmUudXNlTWF0ZXJpYWxNZXNoTWFwKSB7CisgICAgICAg
ICAgICAvLyByZW1vdmUgZnJvbSBtYXRlcmlhbCBtZXNoIG1hcCBpZCBuZWVkZWQKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9tYXRlcmlhbCAmJiB0aGlzLl9tYXRlcmlhbC5tZXNoTWFwKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fbWF0ZXJpYWwubWVzaE1hcFt0aGlzLnVuaXF1ZUlkXSA9IHVuZGVm
aW5lZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBTbWFydCBBcnJheSBS
ZXRhaW5lcnMuCisgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5mcmVlQWN0aXZlTWVzaGVzKCk7Cisg
ICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5mcmVlUmVuZGVyaW5nR3JvdXBzKCk7CisgICAgICAgIC8v
IEFjdGlvbiBtYW5hZ2VyCisgICAgICAgIGlmICh0aGlzLmFjdGlvbk1hbmFnZXIgIT09IHVuZGVm
aW5lZCAmJiB0aGlzLmFjdGlvbk1hbmFnZXIgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMu
YWN0aW9uTWFuYWdlci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLmFjdGlvbk1hbmFnZXIg
PSBudWxsOworICAgICAgICB9CisgICAgICAgIC8vIFNrZWxldG9uCisgICAgICAgIHRoaXMuX2lu
dGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX3NrZWxldG9uID0gbnVsbDsKKyAgICAgICAgaWYg
KHRoaXMuX3RyYW5zZm9ybU1hdHJpeFRleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3RyYW5z
Zm9ybU1hdHJpeFRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3Jt
TWF0cml4VGV4dHVyZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW50ZXJzZWN0aW9u
cyBpbiBwcm9ncmVzcworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9pbnRl
cnNlY3Rpb25zSW5Qcm9ncmVzcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBv
dGhlciA9IHRoaXMuX2ludGVyc2VjdGlvbnNJblByb2dyZXNzW2luZGV4XTsKKyAgICAgICAgICAg
IHZhciBwb3MgPSBvdGhlci5faW50ZXJzZWN0aW9uc0luUHJvZ3Jlc3MuaW5kZXhPZih0aGlzKTsK
KyAgICAgICAgICAgIG90aGVyLl9pbnRlcnNlY3Rpb25zSW5Qcm9ncmVzcy5zcGxpY2UocG9zLCAx
KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pbnRlcnNlY3Rpb25zSW5Qcm9ncmVzcyA9IFtd
OworICAgICAgICAvLyBMaWdodHMKKyAgICAgICAgdmFyIGxpZ2h0cyA9IHRoaXMuZ2V0U2NlbmUo
KS5saWdodHM7CisgICAgICAgIGxpZ2h0cy5mb3JFYWNoKGZ1bmN0aW9uIChsaWdodCkgeworICAg
ICAgICAgICAgdmFyIG1lc2hJbmRleCA9IGxpZ2h0LmluY2x1ZGVkT25seU1lc2hlcy5pbmRleE9m
KF90aGlzKTsKKyAgICAgICAgICAgIGlmIChtZXNoSW5kZXggIT09IC0xKSB7CisgICAgICAgICAg
ICAgICAgbGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVzLnNwbGljZShtZXNoSW5kZXgsIDEpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbWVzaEluZGV4ID0gbGlnaHQuZXhjbHVkZWRNZXNoZXMu
aW5kZXhPZihfdGhpcyk7CisgICAgICAgICAgICBpZiAobWVzaEluZGV4ICE9PSAtMSkgeworICAg
ICAgICAgICAgICAgIGxpZ2h0LmV4Y2x1ZGVkTWVzaGVzLnNwbGljZShtZXNoSW5kZXgsIDEpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gU2hhZG93IGdlbmVyYXRvcnMKKyAgICAgICAg
ICAgIHZhciBnZW5lcmF0b3IgPSBsaWdodC5nZXRTaGFkb3dHZW5lcmF0b3IoKTsKKyAgICAgICAg
ICAgIGlmIChnZW5lcmF0b3IpIHsKKyAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwID0gZ2Vu
ZXJhdG9yLmdldFNoYWRvd01hcCgpOworICAgICAgICAgICAgICAgIGlmIChzaGFkb3dNYXAgJiYg
c2hhZG93TWFwLnJlbmRlckxpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzaEluZGV4ID0g
c2hhZG93TWFwLnJlbmRlckxpc3QuaW5kZXhPZihfdGhpcyk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtZXNoSW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dN
YXAucmVuZGVyTGlzdC5zcGxpY2UobWVzaEluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAg
IC8vIFN1Yk1lc2hlcworICAgICAgICBpZiAodGhpcy5nZXRDbGFzc05hbWUoKSAhPT0gIkluc3Rh
bmNlZE1lc2giIHx8IHRoaXMuZ2V0Q2xhc3NOYW1lKCkgIT09ICJJbnN0YW5jZWRMaW5lc01lc2gi
KSB7CisgICAgICAgICAgICB0aGlzLnJlbGVhc2VTdWJNZXNoZXMoKTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBRdWVyeQorICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRTY2VuZSgpLmdldEVu
Z2luZSgpOworICAgICAgICBpZiAodGhpcy5fb2NjbHVzaW9uUXVlcnkpIHsKKyAgICAgICAgICAg
IHRoaXMuaXNPY2NsdXNpb25RdWVyeUluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIGVu
Z2luZS5kZWxldGVRdWVyeSh0aGlzLl9vY2NsdXNpb25RdWVyeSk7CisgICAgICAgICAgICB0aGlz
Ll9vY2NsdXNpb25RdWVyeSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8gRW5naW5lCisg
ICAgICAgIGVuZ2luZS53aXBlQ2FjaGVzKCk7CisgICAgICAgIC8vIFJlbW92ZSBmcm9tIHNjZW5l
CisgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5yZW1vdmVNZXNoKHRoaXMpOworICAgICAgICBpZiAo
ZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm1hdGVy
aWFsKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWwuZ2V0Q2xhc3NOYW1lKCkg
PT09ICJNdWx0aU1hdGVyaWFsIikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFs
LmRpc3Bvc2UoZmFsc2UsIHRydWUsIHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC5kaXNwb3Nl
KGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFkb05vdFJlY3Vyc2UpIHsKKyAgICAgICAgICAgIC8vIFBhcnRpY2xl
cworICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5nZXRTY2VuZSgpLnBh
cnRpY2xlU3lzdGVtcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAodGhp
cy5nZXRTY2VuZSgpLnBhcnRpY2xlU3lzdGVtc1tpbmRleF0uZW1pdHRlciA9PT0gdGhpcykgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNjZW5lKCkucGFydGljbGVTeXN0ZW1zW2luZGV4
XS5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIGluZGV4LS07CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGZhY2V0IGRhdGEKKyAg
ICAgICAgaWYgKHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2ZhY2V0RGF0YS5m
YWNldERhdGFFbmFibGVkKSB7CisgICAgICAgICAgICB0aGlzLmRpc2FibGVGYWNldERhdGEoKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLm9uQWZ0ZXJXb3JsZE1hdHJpeFVwZGF0ZU9ic2VydmFi
bGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkNvbGxpZGVPYnNlcnZhYmxlLmNsZWFyKCk7Cisg
ICAgICAgIHRoaXMub25Db2xsaXNpb25Qb3NpdGlvbkNoYW5nZU9ic2VydmFibGUuY2xlYXIoKTsK
KyAgICAgICAgdGhpcy5vblJlYnVpbGRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIF9zdXBl
ci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMsIGRvTm90UmVjdXJzZSwgZGlzcG9zZU1hdGVy
aWFsQW5kVGV4dHVyZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyB0aGUgcGFzc2Vk
IG1lc2ggYXMgYSBjaGlsZCB0byB0aGUgY3VycmVudCBtZXNoCisgICAgICogQHBhcmFtIG1lc2gg
ZGVmaW5lcyB0aGUgY2hpbGQgbWVzaAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gK
KyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24g
KG1lc2gpIHsKKyAgICAgICAgbWVzaC5zZXRQYXJlbnQodGhpcyk7CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgcGFzc2VkIG1lc2ggZnJv
bSB0aGUgY3VycmVudCBtZXNoIGNoaWxkcmVuIGxpc3QKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZp
bmVzIHRoZSBjaGlsZCBtZXNoCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAg
ICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAo
bWVzaCkgeworICAgICAgICBtZXNoLnNldFBhcmVudChudWxsKTsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvLyBGYWNldCBkYXRhCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBB
YnN0cmFjdE1lc2gucHJvdG90eXBlLl9pbml0RmFjZXREYXRhID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgZGF0YSA9IHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2ZhY2V0
RGF0YTsKKyAgICAgICAgaWYgKCFkYXRhLmZhY2V0Tm9ybWFscykgeworICAgICAgICAgICAgZGF0
YS5mYWNldE5vcm1hbHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWRh
dGEuZmFjZXRQb3NpdGlvbnMpIHsKKyAgICAgICAgICAgIGRhdGEuZmFjZXRQb3NpdGlvbnMgPSBu
ZXcgQXJyYXkoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWRhdGEuZmFjZXRQYXJ0aXRpb25p
bmcpIHsKKyAgICAgICAgICAgIGRhdGEuZmFjZXRQYXJ0aXRpb25pbmcgPSBuZXcgQXJyYXkoKTsK
KyAgICAgICAgfQorICAgICAgICBkYXRhLmZhY2V0TmIgPSAodGhpcy5nZXRJbmRpY2VzKCkubGVu
Z3RoIC8gMykgfCAwOworICAgICAgICBkYXRhLnBhcnRpdGlvbmluZ1N1YmRpdmlzaW9ucyA9IChk
YXRhLnBhcnRpdGlvbmluZ1N1YmRpdmlzaW9ucykgPyBkYXRhLnBhcnRpdGlvbmluZ1N1YmRpdmlz
aW9ucyA6IDEwOyAvLyBkZWZhdWx0IG5iIG9mIHBhcnRpdGlvbmluZyBzdWJkaXZpc2lvbnMgPSAx
MAorICAgICAgICBkYXRhLnBhcnRpdGlvbmluZ0JCb3hSYXRpbyA9IChkYXRhLnBhcnRpdGlvbmlu
Z0JCb3hSYXRpbykgPyBkYXRhLnBhcnRpdGlvbmluZ0JCb3hSYXRpbyA6IDEuMDE7IC8vIGRlZmF1
bHQgcmF0aW8gMS4wMSA9IHRoZSBwYXJ0aXRpb25pbmcgaXMgMSUgYmlnZ2VyIHRoYW4gdGhlIGJv
dW5kaW5nIGJveAorICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGRhdGEuZmFjZXROYjsgZisr
KSB7CisgICAgICAgICAgICBkYXRhLmZhY2V0Tm9ybWFsc1tmXSA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAg
ICAgICAgZGF0YS5mYWNldFBvc2l0aW9uc1tmXSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB9CisgICAg
ICAgIGRhdGEuZmFjZXREYXRhRW5hYmxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgbWVzaCBmYWNldERhdGEgYXJyYXlz
IGFuZCB0aGUgaW50ZXJuYWwgcGFydGl0aW9uaW5nIHdoZW4gdGhlIG1lc2ggaXMgbW9ycGhlZCBv
ciB1cGRhdGVkLgorICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgd2l0aGluIHRoZSBy
ZW5kZXIgbG9vcC4KKyAgICAgKiBZb3UgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMgbWV0aG9kIGJ5
IHlvdXJzZWxmIGluIHRoZSByZW5kZXIgbG9vcCB3aGVuIHlvdSB1cGRhdGUvbW9ycGggYSBtZXNo
IHdpdGggdGhlIG1ldGhvZHMgQ3JlYXRlWFhYKCkgYXMgdGhleSBhdXRvbWF0aWNhbGx5IG1hbmFn
ZSB0aGlzIGNvbXB1dGF0aW9uCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2ZhY2V0
ZGF0YQorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUudXBkYXRlRmFjZXREYXRh
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2ludGVybmFsQWJzdHJh
Y3RNZXNoRGF0YUluZm8uX2ZhY2V0RGF0YTsKKyAgICAgICAgaWYgKCFkYXRhLmZhY2V0RGF0YUVu
YWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2luaXRGYWNldERhdGEoKTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25L
aW5kKTsKKyAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmdldEluZGljZXMoKTsKKyAgICAgICAg
dmFyIG5vcm1hbHMgPSB0aGlzLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKTsKKyAgICAg
ICAgdmFyIGJJbmZvID0gdGhpcy5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgaWYgKGRhdGEu
ZmFjZXREZXB0aFNvcnQgJiYgIWRhdGEuZmFjZXREZXB0aFNvcnRFbmFibGVkKSB7CisgICAgICAg
ICAgICAvLyBpbml0IGFycmF5cywgbWF0cml4IGFuZCBzb3J0IGZ1bmN0aW9uIG9uIGZpcnN0IGNh
bGwKKyAgICAgICAgICAgIGRhdGEuZmFjZXREZXB0aFNvcnRFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGlmIChpbmRpY2VzIGluc3RhbmNlb2YgVWludDE2QXJyYXkpIHsKKyAgICAgICAgICAg
ICAgICBkYXRhLmRlcHRoU29ydGVkSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGluZGljZXMgaW5zdGFuY2VvZiBV
aW50MzJBcnJheSkgeworICAgICAgICAgICAgICAgIGRhdGEuZGVwdGhTb3J0ZWRJbmRpY2VzID0g
bmV3IFVpbnQzMkFycmF5KGluZGljZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgdmFyIG5lZWRzMzJiaXRzID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpbmRpY2VzW2ldID4gNjU1MzUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5lZWRzMzJiaXRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChuZWVkczMyYml0cykgeworICAgICAgICAgICAgICAgICAgICBkYXRhLmRlcHRoU29y
dGVkSW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShpbmRpY2VzKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEuZGVwdGhT
b3J0ZWRJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGEuZmFjZXREZXB0aFNvcnRGdW5jdGlv
biA9IGZ1bmN0aW9uIChmMSwgZjIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGYyLnNxRGlz
dGFuY2UgLSBmMS5zcURpc3RhbmNlKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAo
IWRhdGEuZmFjZXREZXB0aFNvcnRGcm9tKSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbWVyYSA9
IHRoaXMuZ2V0U2NlbmUoKS5hY3RpdmVDYW1lcmE7CisgICAgICAgICAgICAgICAgZGF0YS5mYWNl
dERlcHRoU29ydEZyb20gPSAoY2FtZXJhKSA/IGNhbWVyYS5wb3NpdGlvbiA6IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YS5kZXB0aFNvcnRlZEZhY2V0cyA9IFtdOwor
ICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBkYXRhLmZhY2V0TmI7IGYrKykgeworICAg
ICAgICAgICAgICAgIHZhciBkZXB0aFNvcnRlZEZhY2V0ID0geyBpbmQ6IGYgKiAzLCBzcURpc3Rh
bmNlOiAwLjAgfTsKKyAgICAgICAgICAgICAgICBkYXRhLmRlcHRoU29ydGVkRmFjZXRzLnB1c2go
ZGVwdGhTb3J0ZWRGYWNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhLmludmVy
dGVkTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgICAgICAgICBkYXRhLmZhY2V0RGVwdGhTb3J0
T3JpZ2luID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YS5iYlNpemUueCA9IChi
SW5mby5tYXhpbXVtLnggLSBiSW5mby5taW5pbXVtLnggPiBfTWF0aHNfbWF0aF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkVwc2lsb24iXSkgPyBiSW5mby5tYXhpbXVt
LnggLSBiSW5mby5taW5pbXVtLnggOiBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE2X19bIkVwc2lsb24iXTsKKyAgICAgICAgZGF0YS5iYlNpemUueSA9IChi
SW5mby5tYXhpbXVtLnkgLSBiSW5mby5taW5pbXVtLnkgPiBfTWF0aHNfbWF0aF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkVwc2lsb24iXSkgPyBiSW5mby5tYXhpbXVt
LnkgLSBiSW5mby5taW5pbXVtLnkgOiBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE2X19bIkVwc2lsb24iXTsKKyAgICAgICAgZGF0YS5iYlNpemUueiA9IChi
SW5mby5tYXhpbXVtLnogLSBiSW5mby5taW5pbXVtLnogPiBfTWF0aHNfbWF0aF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkVwc2lsb24iXSkgPyBiSW5mby5tYXhpbXVt
LnogLSBiSW5mby5taW5pbXVtLnogOiBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE2X19bIkVwc2lsb24iXTsKKyAgICAgICAgdmFyIGJiU2l6ZU1heCA9IChk
YXRhLmJiU2l6ZS54ID4gZGF0YS5iYlNpemUueSkgPyBkYXRhLmJiU2l6ZS54IDogZGF0YS5iYlNp
emUueTsKKyAgICAgICAgYmJTaXplTWF4ID0gKGJiU2l6ZU1heCA+IGRhdGEuYmJTaXplLnopID8g
YmJTaXplTWF4IDogZGF0YS5iYlNpemUuejsKKyAgICAgICAgZGF0YS5zdWJEaXYubWF4ID0gZGF0
YS5wYXJ0aXRpb25pbmdTdWJkaXZpc2lvbnM7CisgICAgICAgIGRhdGEuc3ViRGl2LlggPSBNYXRo
LmZsb29yKGRhdGEuc3ViRGl2Lm1heCAqIGRhdGEuYmJTaXplLnggLyBiYlNpemVNYXgpOyAvLyBh
ZGp1c3QgdGhlIG51bWJlciBvZiBzdWJkaXZpc2lvbnMgcGVyIGF4aXMKKyAgICAgICAgZGF0YS5z
dWJEaXYuWSA9IE1hdGguZmxvb3IoZGF0YS5zdWJEaXYubWF4ICogZGF0YS5iYlNpemUueSAvIGJi
U2l6ZU1heCk7IC8vIGFjY29yZGluZyB0byBlYWNoIGJib3ggc2l6ZSBwZXIgYXhpcworICAgICAg
ICBkYXRhLnN1YkRpdi5aID0gTWF0aC5mbG9vcihkYXRhLnN1YkRpdi5tYXggKiBkYXRhLmJiU2l6
ZS56IC8gYmJTaXplTWF4KTsKKyAgICAgICAgZGF0YS5zdWJEaXYuWCA9IGRhdGEuc3ViRGl2Llgg
PCAxID8gMSA6IGRhdGEuc3ViRGl2Llg7IC8vIGF0IGxlYXN0IG9uZSBzdWJkaXZpc2lvbgorICAg
ICAgICBkYXRhLnN1YkRpdi5ZID0gZGF0YS5zdWJEaXYuWSA8IDEgPyAxIDogZGF0YS5zdWJEaXYu
WTsKKyAgICAgICAgZGF0YS5zdWJEaXYuWiA9IGRhdGEuc3ViRGl2LlogPCAxID8gMSA6IGRhdGEu
c3ViRGl2Llo7CisgICAgICAgIC8vIHNldCB0aGUgcGFyYW1ldGVycyBmb3IgQ29tcHV0ZU5vcm1h
bHMoKQorICAgICAgICBkYXRhLmZhY2V0UGFyYW1ldGVycy5mYWNldE5vcm1hbHMgPSB0aGlzLmdl
dEZhY2V0TG9jYWxOb3JtYWxzKCk7CisgICAgICAgIGRhdGEuZmFjZXRQYXJhbWV0ZXJzLmZhY2V0
UG9zaXRpb25zID0gdGhpcy5nZXRGYWNldExvY2FsUG9zaXRpb25zKCk7CisgICAgICAgIGRhdGEu
ZmFjZXRQYXJhbWV0ZXJzLmZhY2V0UGFydGl0aW9uaW5nID0gdGhpcy5nZXRGYWNldExvY2FsUGFy
dGl0aW9uaW5nKCk7CisgICAgICAgIGRhdGEuZmFjZXRQYXJhbWV0ZXJzLmJJbmZvID0gYkluZm87
CisgICAgICAgIGRhdGEuZmFjZXRQYXJhbWV0ZXJzLmJiU2l6ZSA9IGRhdGEuYmJTaXplOworICAg
ICAgICBkYXRhLmZhY2V0UGFyYW1ldGVycy5zdWJEaXYgPSBkYXRhLnN1YkRpdjsKKyAgICAgICAg
ZGF0YS5mYWNldFBhcmFtZXRlcnMucmF0aW8gPSB0aGlzLnBhcnRpdGlvbmluZ0JCb3hSYXRpbzsK
KyAgICAgICAgZGF0YS5mYWNldFBhcmFtZXRlcnMuZGVwdGhTb3J0ID0gZGF0YS5mYWNldERlcHRo
U29ydDsKKyAgICAgICAgaWYgKGRhdGEuZmFjZXREZXB0aFNvcnQgJiYgZGF0YS5mYWNldERlcHRo
U29ydEVuYWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUp
OworICAgICAgICAgICAgdGhpcy5fd29ybGRNYXRyaXguaW52ZXJ0VG9SZWYoZGF0YS5pbnZlcnRl
ZE1hdHJpeCk7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYoZGF0YS5m
YWNldERlcHRoU29ydEZyb20sIGRhdGEuaW52ZXJ0ZWRNYXRyaXgsIGRhdGEuZmFjZXREZXB0aFNv
cnRPcmlnaW4pOworICAgICAgICAgICAgZGF0YS5mYWNldFBhcmFtZXRlcnMuZGlzdGFuY2VUbyA9
IGRhdGEuZmFjZXREZXB0aFNvcnRPcmlnaW47CisgICAgICAgIH0KKyAgICAgICAgZGF0YS5mYWNl
dFBhcmFtZXRlcnMuZGVwdGhTb3J0ZWRGYWNldHMgPSBkYXRhLmRlcHRoU29ydGVkRmFjZXRzOwor
ICAgICAgICBfTWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fWyJWZXJ0ZXhEYXRhIl0uQ29tcHV0ZU5vcm1hbHMocG9zaXRpb25zLCBpbmRpY2VzLCBub3Jt
YWxzLCBkYXRhLmZhY2V0UGFyYW1ldGVycyk7CisgICAgICAgIGlmIChkYXRhLmZhY2V0RGVwdGhT
b3J0ICYmIGRhdGEuZmFjZXREZXB0aFNvcnRFbmFibGVkKSB7CisgICAgICAgICAgICBkYXRhLmRl
cHRoU29ydGVkRmFjZXRzLnNvcnQoZGF0YS5mYWNldERlcHRoU29ydEZ1bmN0aW9uKTsKKyAgICAg
ICAgICAgIHZhciBsID0gKGRhdGEuZGVwdGhTb3J0ZWRJbmRpY2VzLmxlbmd0aCAvIDMpIHwgMDsK
KyAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgbDsgZisrKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHNpbmQgPSBkYXRhLmRlcHRoU29ydGVkRmFjZXRzW2ZdLmluZDsKKyAgICAgICAgICAg
ICAgICBkYXRhLmRlcHRoU29ydGVkSW5kaWNlc1tmICogM10gPSBpbmRpY2VzW3NpbmRdOworICAg
ICAgICAgICAgICAgIGRhdGEuZGVwdGhTb3J0ZWRJbmRpY2VzW2YgKiAzICsgMV0gPSBpbmRpY2Vz
W3NpbmQgKyAxXTsKKyAgICAgICAgICAgICAgICBkYXRhLmRlcHRoU29ydGVkSW5kaWNlc1tmICog
MyArIDJdID0gaW5kaWNlc1tzaW5kICsgMl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aGlzLnVwZGF0ZUluZGljZXMoZGF0YS5kZXB0aFNvcnRlZEluZGljZXMsIHVuZGVmaW5lZCwgdHJ1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIHRoZSBmYWNldExvY2FsTm9ybWFscyBhcnJheS4KKyAgICAgKiBUaGUgbm9y
bWFscyBhcmUgZXhwcmVzc2VkIGluIHRoZSBtZXNoIGxvY2FsIHNwYWMKKyAgICAgKiBAcmV0dXJu
cyBhbiBhcnJheSBvZiBWZWN0b3IzCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNo
LnByb3RvdHlwZS5nZXRGYWNldExvY2FsTm9ybWFscyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dmFyIGZhY2V0RGF0YSA9IHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2ZhY2V0
RGF0YTsKKyAgICAgICAgaWYgKCFmYWNldERhdGEuZmFjZXROb3JtYWxzKSB7CisgICAgICAgICAg
ICB0aGlzLnVwZGF0ZUZhY2V0RGF0YSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWNl
dERhdGEuZmFjZXROb3JtYWxzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUg
ZmFjZXRMb2NhbFBvc2l0aW9ucyBhcnJheS4KKyAgICAgKiBUaGUgZmFjZXQgcG9zaXRpb25zIGFy
ZSBleHByZXNzZWQgaW4gdGhlIG1lc2ggbG9jYWwgc3BhY2UKKyAgICAgKiBAcmV0dXJucyBhbiBh
cnJheSBvZiBWZWN0b3IzCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3Rv
dHlwZS5nZXRGYWNldExvY2FsUG9zaXRpb25zID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIg
ZmFjZXREYXRhID0gdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fZmFjZXREYXRh
OworICAgICAgICBpZiAoIWZhY2V0RGF0YS5mYWNldFBvc2l0aW9ucykgeworICAgICAgICAgICAg
dGhpcy51cGRhdGVGYWNldERhdGEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFjZXRE
YXRhLmZhY2V0UG9zaXRpb25zOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUg
ZmFjZXRMb2NhbFBhcnRpb25pbmcgYXJyYXkKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBh
cnJheSBvZiBudW1iZXJzCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3Rv
dHlwZS5nZXRGYWNldExvY2FsUGFydGl0aW9uaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2
YXIgZmFjZXREYXRhID0gdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fZmFjZXRE
YXRhOworICAgICAgICBpZiAoIWZhY2V0RGF0YS5mYWNldFBhcnRpdGlvbmluZykgeworICAgICAg
ICAgICAgdGhpcy51cGRhdGVGYWNldERhdGEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFjZXREYXRhLmZhY2V0UGFydGl0aW9uaW5nOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0
dXJucyB0aGUgaS10aCBmYWNldCBwb3NpdGlvbiBpbiB0aGUgd29ybGQgc3lzdGVtLgorICAgICAq
IFRoaXMgbWV0aG9kIGFsbG9jYXRlcyBhIG5ldyBWZWN0b3IzIHBlciBjYWxsCisgICAgICogQHBh
cmFtIGkgZGVmaW5lcyB0aGUgZmFjZXQgaW5kZXgKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0
b3IzCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191
c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5nZXRGYWNl
dFBvc2l0aW9uID0gZnVuY3Rpb24gKGkpIHsKKyAgICAgICAgdmFyIHBvcyA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICB0aGlzLmdldEZhY2V0UG9zaXRpb25Ub1JlZihpLCBwb3MpOworICAgICAgICByZXR1
cm4gcG9zOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgcmVmZXJlbmNlIFZlY3Rv
cjMgd2l0aCB0aGUgaS10aCBmYWNldCBwb3NpdGlvbiBpbiB0aGUgd29ybGQgc3lzdGVtCisgICAg
ICogQHBhcmFtIGkgZGVmaW5lcyB0aGUgZmFjZXQgaW5kZXgKKyAgICAgKiBAcGFyYW0gcmVmIGRl
ZmluZXMgdGhlIHRhcmdldCB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNo
CisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vf
ZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5nZXRGYWNldFBv
c2l0aW9uVG9SZWYgPSBmdW5jdGlvbiAoaSwgcmVmKSB7CisgICAgICAgIHZhciBsb2NhbFBvcyA9
ICh0aGlzLmdldEZhY2V0TG9jYWxQb3NpdGlvbnMoKSlbaV07CisgICAgICAgIHZhciB3b3JsZCA9
IHRoaXMuZ2V0V29ybGRNYXRyaXgoKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1Rv
UmVmKGxvY2FsUG9zLCB3b3JsZCwgcmVmKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpLXRoIGZhY2V0IG5vcm1hbCBpbiB0aGUgd29y
bGQgc3lzdGVtLgorICAgICAqIFRoaXMgbWV0aG9kIGFsbG9jYXRlcyBhIG5ldyBWZWN0b3IzIHBl
ciBjYWxsCisgICAgICogQHBhcmFtIGkgZGVmaW5lcyB0aGUgZmFjZXQgaW5kZXgKKyAgICAgKiBA
cmV0dXJucyBhIG5ldyBWZWN0b3IzCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNo
LnByb3RvdHlwZS5nZXRGYWNldE5vcm1hbCA9IGZ1bmN0aW9uIChpKSB7CisgICAgICAgIHZhciBu
b3JtID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
Y3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuZ2V0RmFjZXROb3JtYWxUb1JlZihpLCBub3Jt
KTsKKyAgICAgICAgcmV0dXJuIG5vcm07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRo
ZSByZWZlcmVuY2UgVmVjdG9yMyB3aXRoIHRoZSBpLXRoIGZhY2V0IG5vcm1hbCBpbiB0aGUgd29y
bGQgc3lzdGVtCisgICAgICogQHBhcmFtIGkgZGVmaW5lcyB0aGUgZmFjZXQgaW5kZXgKKyAgICAg
KiBAcGFyYW0gcmVmIGRlZmluZXMgdGhlIHRhcmdldCB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyB0
aGUgY3VycmVudCBtZXNoCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3Rv
dHlwZS5nZXRGYWNldE5vcm1hbFRvUmVmID0gZnVuY3Rpb24gKGksIHJlZikgeworICAgICAgICB2
YXIgbG9jYWxOb3JtID0gKHRoaXMuZ2V0RmFjZXRMb2NhbE5vcm1hbHMoKSlbaV07CisgICAgICAg
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3Iz
Il0uVHJhbnNmb3JtTm9ybWFsVG9SZWYobG9jYWxOb3JtLCB0aGlzLmdldFdvcmxkTWF0cml4KCks
IHJlZik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0
dXJucyB0aGUgZmFjZXRzIChpbiBhbiBhcnJheSkgaW4gdGhlIHNhbWUgcGFydGl0aW9uaW5nIGJs
b2NrIHRoYW4gdGhlIG9uZSB0aGUgcGFzc2VkIGNvb3JkaW5hdGVzIGFyZSBsb2NhdGVkIChleHBy
ZXNzZWQgaW4gdGhlIG1lc2ggbG9jYWwgc3lzdGVtKQorICAgICAqIEBwYXJhbSB4IGRlZmluZXMg
eCBjb29yZGluYXRlCisgICAgICogQHBhcmFtIHkgZGVmaW5lcyB5IGNvb3JkaW5hdGUKKyAgICAg
KiBAcGFyYW0geiBkZWZpbmVzIHogY29vcmRpbmF0ZQorICAgICAqIEByZXR1cm5zIHRoZSBhcnJh
eSBvZiBmYWNldCBpbmRleGVzCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnBy
b3RvdHlwZS5nZXRGYWNldHNBdExvY2FsQ29vcmRpbmF0ZXMgPSBmdW5jdGlvbiAoeCwgeSwgeikg
eworICAgICAgICB2YXIgYkluZm8gPSB0aGlzLmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICB2
YXIgZGF0YSA9IHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2ZhY2V0RGF0YTsK
KyAgICAgICAgdmFyIG94ID0gTWF0aC5mbG9vcigoeCAtIGJJbmZvLm1pbmltdW0ueCAqIGRhdGEu
cGFydGl0aW9uaW5nQkJveFJhdGlvKSAqIGRhdGEuc3ViRGl2LlggKiBkYXRhLnBhcnRpdGlvbmlu
Z0JCb3hSYXRpbyAvIGRhdGEuYmJTaXplLngpOworICAgICAgICB2YXIgb3kgPSBNYXRoLmZsb29y
KCh5IC0gYkluZm8ubWluaW11bS55ICogZGF0YS5wYXJ0aXRpb25pbmdCQm94UmF0aW8pICogZGF0
YS5zdWJEaXYuWSAqIGRhdGEucGFydGl0aW9uaW5nQkJveFJhdGlvIC8gZGF0YS5iYlNpemUueSk7
CisgICAgICAgIHZhciBveiA9IE1hdGguZmxvb3IoKHogLSBiSW5mby5taW5pbXVtLnogKiBkYXRh
LnBhcnRpdGlvbmluZ0JCb3hSYXRpbykgKiBkYXRhLnN1YkRpdi5aICogZGF0YS5wYXJ0aXRpb25p
bmdCQm94UmF0aW8gLyBkYXRhLmJiU2l6ZS56KTsKKyAgICAgICAgaWYgKG94IDwgMCB8fCBveCA+
IGRhdGEuc3ViRGl2Lm1heCB8fCBveSA8IDAgfHwgb3kgPiBkYXRhLnN1YkRpdi5tYXggfHwgb3og
PCAwIHx8IG96ID4gZGF0YS5zdWJEaXYubWF4KSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YS5mYWNldFBhcnRpdGlvbmluZ1tveCArIGRh
dGEuc3ViRGl2Lm1heCAqIG95ICsgZGF0YS5zdWJEaXYubWF4ICogZGF0YS5zdWJEaXYubWF4ICog
b3pdOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY2xvc2VzdCBtZXNoIGZh
Y2V0IGluZGV4IGF0ICh4LHkseikgV29ybGQgY29vcmRpbmF0ZXMsIG51bGwgaWYgbm90IGZvdW5k
CisgICAgICogQHBhcmFtIHByb2plY3RlZCBzZXRzIGFzIHRoZSAoeCx5LHopIHdvcmxkIHByb2pl
Y3Rpb24gb24gdGhlIGZhY2V0CisgICAgICogQHBhcmFtIGNoZWNrRmFjZSBpZiB0cnVlIChkZWZh
dWx0IGZhbHNlKSwgb25seSB0aGUgZmFjZXQgImZhY2luZyIgdG8gKHgseSx6KSBvciBvbmx5IHRo
ZSBvbmVzICJ0dXJuaW5nIHRoZWlyIGJhY2tzIiwgYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXIg
ImZhY2luZyIgYXJlIHJldHVybmVkCisgICAgICogQHBhcmFtIGZhY2luZyBpZiBmYWNpbmcgYW5k
IGNoZWNrRmFjZSBhcmUgdHJ1ZSwgb25seSB0aGUgZmFjZXQgImZhY2luZyIgdG8gKHgsIHksIHop
IGFyZSByZXR1cm5lZCA6IHBvc2l0aXZlIGRvdCAoeCwgeSwgeikgKiBmYWNldCBwb3NpdGlvbi4g
SWYgZmFjaW5nIHNpIGZhbHNlIGFuZCBjaGVja0ZhY2UgaXMgdHJ1ZSwgb25seSB0aGUgZmFjZXQg
InR1cm5pbmcgdGhlaXIgYmFja3MiIHRvICh4LCB5LCB6KSBhcmUgcmV0dXJuZWQgOiBuZWdhdGl2
ZSBkb3QgKHgsIHksIHopICogZmFjZXQgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0geCBkZWZpbmVz
IHggY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgeSBjb29yZGluYXRlCisgICAg
ICogQHBhcmFtIHogZGVmaW5lcyB6IGNvb3JkaW5hdGUKKyAgICAgKiBAcmV0dXJucyB0aGUgZmFj
ZSBpbmRleCBpZiBmb3VuZCAob3IgbnVsbCBpbnN0ZWFkKQorICAgICAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2ZhY2V0ZGF0YQorICAgICAqLworICAg
IEFic3RyYWN0TWVzaC5wcm90b3R5cGUuZ2V0Q2xvc2VzdEZhY2V0QXRDb29yZGluYXRlcyA9IGZ1
bmN0aW9uICh4LCB5LCB6LCBwcm9qZWN0ZWQsIGNoZWNrRmFjZSwgZmFjaW5nKSB7CisgICAgICAg
IGlmIChjaGVja0ZhY2UgPT09IHZvaWQgMCkgeyBjaGVja0ZhY2UgPSBmYWxzZTsgfQorICAgICAg
ICBpZiAoZmFjaW5nID09PSB2b2lkIDApIHsgZmFjaW5nID0gdHJ1ZTsgfQorICAgICAgICB2YXIg
d29ybGQgPSB0aGlzLmdldFdvcmxkTWF0cml4KCk7CisgICAgICAgIHZhciBpbnZNYXQgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJd
Lk1hdHJpeFs1XTsKKyAgICAgICAgd29ybGQuaW52ZXJ0VG9SZWYoaW52TWF0KTsKKyAgICAgICAg
dmFyIGludlZlY3QgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbOF07CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRp
bmF0ZXNGcm9tRmxvYXRzVG9SZWYoeCwgeSwgeiwgaW52TWF0LCBpbnZWZWN0KTsgLy8gdHJhbnNm
b3JtICh4LHkseikgdG8gY29vcmRpbmF0ZXMgaW4gdGhlIG1lc2ggbG9jYWwgc3BhY2UKKyAgICAg
ICAgdmFyIGNsb3Nlc3QgPSB0aGlzLmdldENsb3Nlc3RGYWNldEF0TG9jYWxDb29yZGluYXRlcyhp
bnZWZWN0LngsIGludlZlY3QueSwgaW52VmVjdC56LCBwcm9qZWN0ZWQsIGNoZWNrRmFjZSwgZmFj
aW5nKTsKKyAgICAgICAgaWYgKHByb2plY3RlZCkgeworICAgICAgICAgICAgLy8gdHJhbmZvcm0g
dGhlIGxvY2FsIGNvbXB1dGVkIHByb2plY3RlZCB2ZWN0b3IgdG8gd29ybGQgY29vcmRpbmF0ZXMK
KyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNGcm9tRmxvYXRzVG9SZWYocHJvamVj
dGVkLngsIHByb2plY3RlZC55LCBwcm9qZWN0ZWQueiwgd29ybGQsIHByb2plY3RlZCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGNsb3Nlc3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIHRoZSBjbG9zZXN0IG1lc2ggZmFjZXQgaW5kZXggYXQgKHgseSx6KSBsb2NhbCBjb29y
ZGluYXRlcywgbnVsbCBpZiBub3QgZm91bmQKKyAgICAgKiBAcGFyYW0gcHJvamVjdGVkIHNldHMg
YXMgdGhlICh4LHkseikgbG9jYWwgcHJvamVjdGlvbiBvbiB0aGUgZmFjZXQKKyAgICAgKiBAcGFy
YW0gY2hlY2tGYWNlIGlmIHRydWUgKGRlZmF1bHQgZmFsc2UpLCBvbmx5IHRoZSBmYWNldCAiZmFj
aW5nIiB0byAoeCx5LHopIG9yIG9ubHkgdGhlIG9uZXMgInR1cm5pbmcgdGhlaXIgYmFja3MiLCBh
Y2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlciAiZmFjaW5nIiBhcmUgcmV0dXJuZWQKKyAgICAgKiBA
cGFyYW0gZmFjaW5nIGlmIGZhY2luZyBhbmQgY2hlY2tGYWNlIGFyZSB0cnVlLCBvbmx5IHRoZSBm
YWNldCAiZmFjaW5nIiB0byAoeCwgeSwgeikgYXJlIHJldHVybmVkIDogcG9zaXRpdmUgZG90ICh4
LCB5LCB6KSAqIGZhY2V0IHBvc2l0aW9uLiBJZiBmYWNpbmcgc2kgZmFsc2UgYW5kIGNoZWNrRmFj
ZSBpcyB0cnVlLCBvbmx5IHRoZSBmYWNldCAidHVybmluZyB0aGVpciBiYWNrcyIgdG8gKHgsIHks
IHopIGFyZSByZXR1cm5lZCA6IG5lZ2F0aXZlIGRvdCAoeCwgeSwgeikgKiBmYWNldCBwb3NpdGlv
bgorICAgICAqIEBwYXJhbSB4IGRlZmluZXMgeCBjb29yZGluYXRlCisgICAgICogQHBhcmFtIHkg
ZGVmaW5lcyB5IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHogY29vcmRpbmF0
ZQorICAgICAqIEByZXR1cm5zIHRoZSBmYWNlIGluZGV4IGlmIGZvdW5kIChvciBudWxsIGluc3Rl
YWQpCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191
c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5nZXRDbG9z
ZXN0RmFjZXRBdExvY2FsQ29vcmRpbmF0ZXMgPSBmdW5jdGlvbiAoeCwgeSwgeiwgcHJvamVjdGVk
LCBjaGVja0ZhY2UsIGZhY2luZykgeworICAgICAgICBpZiAoY2hlY2tGYWNlID09PSB2b2lkIDAp
IHsgY2hlY2tGYWNlID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGZhY2luZyA9PT0gdm9pZCAwKSB7
IGZhY2luZyA9IHRydWU7IH0KKyAgICAgICAgdmFyIGNsb3Nlc3QgPSBudWxsOworICAgICAgICB2
YXIgdG1weCA9IDAuMDsKKyAgICAgICAgdmFyIHRtcHkgPSAwLjA7CisgICAgICAgIHZhciB0bXB6
ID0gMC4wOworICAgICAgICB2YXIgZCA9IDAuMDsgLy8gdG1wIGRvdCBmYWNldCBub3JtYWwgKiBm
YWNldCBwb3NpdGlvbgorICAgICAgICB2YXIgdDAgPSAwLjA7CisgICAgICAgIHZhciBwcm9qeCA9
IDAuMDsKKyAgICAgICAgdmFyIHByb2p5ID0gMC4wOworICAgICAgICB2YXIgcHJvanogPSAwLjA7
CisgICAgICAgIC8vIEdldCBhbGwgdGhlIGZhY2V0cyBpbiB0aGUgc2FtZSBwYXJ0aXRpb25pbmcg
YmxvY2sgdGhhbiAoeCwgeSwgeikKKyAgICAgICAgdmFyIGZhY2V0UG9zaXRpb25zID0gdGhpcy5n
ZXRGYWNldExvY2FsUG9zaXRpb25zKCk7CisgICAgICAgIHZhciBmYWNldE5vcm1hbHMgPSB0aGlz
LmdldEZhY2V0TG9jYWxOb3JtYWxzKCk7CisgICAgICAgIHZhciBmYWNldHNJbkJsb2NrID0gdGhp
cy5nZXRGYWNldHNBdExvY2FsQ29vcmRpbmF0ZXMoeCwgeSwgeik7CisgICAgICAgIGlmICghZmFj
ZXRzSW5CbG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gR2V0IHRoZSBjbG9zZXN0IGZhY2V0IHRvICh4LCB5LCB6KQorICAgICAgICB2YXIgc2hv
cnRlc3QgPSBOdW1iZXIuTUFYX1ZBTFVFOyAvLyBpbml0IGRpc3RhbmNlIHZhcnMKKyAgICAgICAg
dmFyIHRtcERpc3RhbmNlID0gc2hvcnRlc3Q7CisgICAgICAgIHZhciBmaWI7IC8vIGN1cnJlbnQg
ZmFjZXQgaW4gdGhlIGJsb2NrCisgICAgICAgIHZhciBub3JtOyAvLyBjdXJyZW50IGZhY2V0IG5v
cm1hbAorICAgICAgICB2YXIgcDA7IC8vIGN1cnJlbnQgZmFjZXQgYmFyeWNlbnRlciBwb3NpdGlv
bgorICAgICAgICAvLyBsb29wIG9uIGFsbCB0aGUgZmFjZXRzIGluIHRoZSBjdXJyZW50IHBhcnRp
dGlvbmluZyBibG9jaworICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBmYWNldHNJbkJs
b2NrLmxlbmd0aDsgaWR4KyspIHsKKyAgICAgICAgICAgIGZpYiA9IGZhY2V0c0luQmxvY2tbaWR4
XTsKKyAgICAgICAgICAgIG5vcm0gPSBmYWNldE5vcm1hbHNbZmliXTsKKyAgICAgICAgICAgIHAw
ID0gZmFjZXRQb3NpdGlvbnNbZmliXTsKKyAgICAgICAgICAgIGQgPSAoeCAtIHAwLngpICogbm9y
bS54ICsgKHkgLSBwMC55KSAqIG5vcm0ueSArICh6IC0gcDAueikgKiBub3JtLno7CisgICAgICAg
ICAgICBpZiAoIWNoZWNrRmFjZSB8fCAoY2hlY2tGYWNlICYmIGZhY2luZyAmJiBkID49IDAuMCkg
fHwgKGNoZWNrRmFjZSAmJiAhZmFjaW5nICYmIGQgPD0gMC4wKSkgeworICAgICAgICAgICAgICAg
IC8vIGNvbXB1dGUgKHgseSx6KSBwcm9qZWN0aW9uIG9uIHRoZSBmYWNldCA9IChwcm9qeCwgcHJv
anksIHByb2p6KQorICAgICAgICAgICAgICAgIGQgPSBub3JtLnggKiBwMC54ICsgbm9ybS55ICog
cDAueSArIG5vcm0ueiAqIHAwLno7CisgICAgICAgICAgICAgICAgdDAgPSAtKG5vcm0ueCAqIHgg
KyBub3JtLnkgKiB5ICsgbm9ybS56ICogeiAtIGQpIC8gKG5vcm0ueCAqIG5vcm0ueCArIG5vcm0u
eSAqIG5vcm0ueSArIG5vcm0ueiAqIG5vcm0ueik7CisgICAgICAgICAgICAgICAgcHJvanggPSB4
ICsgbm9ybS54ICogdDA7CisgICAgICAgICAgICAgICAgcHJvankgPSB5ICsgbm9ybS55ICogdDA7
CisgICAgICAgICAgICAgICAgcHJvanogPSB6ICsgbm9ybS56ICogdDA7CisgICAgICAgICAgICAg
ICAgdG1weCA9IHByb2p4IC0geDsKKyAgICAgICAgICAgICAgICB0bXB5ID0gcHJvankgLSB5Owor
ICAgICAgICAgICAgICAgIHRtcHogPSBwcm9qeiAtIHo7CisgICAgICAgICAgICAgICAgdG1wRGlz
dGFuY2UgPSB0bXB4ICogdG1weCArIHRtcHkgKiB0bXB5ICsgdG1weiAqIHRtcHo7IC8vIGNvbXB1
dGUgbGVuZ3RoIGJldHdlZW4gKHgsIHksIHopIGFuZCBpdHMgcHJvamVjdGlvbiBvbiB0aGUgZmFj
ZXQKKyAgICAgICAgICAgICAgICBpZiAodG1wRGlzdGFuY2UgPCBzaG9ydGVzdCkgeyAvLyBqdXN0
IGtlZXAgdGhlIGNsb3Nlc3QgZmFjZXQgdG8gKHgsIHksIHopCisgICAgICAgICAgICAgICAgICAg
IHNob3J0ZXN0ID0gdG1wRGlzdGFuY2U7CisgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3QgPSBm
aWI7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9qZWN0ZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByb2plY3RlZC54ID0gcHJvang7CisgICAgICAgICAgICAgICAgICAgICAgICBw
cm9qZWN0ZWQueSA9IHByb2p5OworICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdGVkLnog
PSBwcm9qejsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2xvc2VzdDsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFJldHVybnMgdGhlIG9iamVjdCAicGFyYW1ldGVyIiBzZXQgd2l0aCBhbGwg
dGhlIGV4cGVjdGVkIHBhcmFtZXRlcnMgZm9yIGZhY2V0RGF0YSBjb21wdXRhdGlvbiBieSBDb21w
dXRlTm9ybWFscygpCisgICAgICogQHJldHVybnMgdGhlIHBhcmFtZXRlcnMKKyAgICAgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9mYWNldGRhdGEKKyAg
ICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLmdldEZhY2V0RGF0YVBhcmFtZXRlcnMg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVz
aERhdGFJbmZvLl9mYWNldERhdGEuZmFjZXRQYXJhbWV0ZXJzOworICAgIH07CisgICAgLyoqCisg
ICAgICogRGlzYWJsZXMgdGhlIGZlYXR1cmUgRmFjZXREYXRhIGFuZCBmcmVlcyB0aGUgcmVsYXRl
ZCBtZW1vcnkKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICogQHNlZSBo
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAg
ICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5kaXNhYmxlRmFjZXREYXRhID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB2YXIgZmFjZXREYXRhID0gdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1l
c2hEYXRhSW5mby5fZmFjZXREYXRhOworICAgICAgICBpZiAoZmFjZXREYXRhLmZhY2V0RGF0YUVu
YWJsZWQpIHsKKyAgICAgICAgICAgIGZhY2V0RGF0YS5mYWNldERhdGFFbmFibGVkID0gZmFsc2U7
CisgICAgICAgICAgICBmYWNldERhdGEuZmFjZXRQb3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgICAgIGZhY2V0RGF0YS5mYWNldE5vcm1hbHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAg
ICAgIGZhY2V0RGF0YS5mYWNldFBhcnRpdGlvbmluZyA9IG5ldyBBcnJheSgpOworICAgICAgICAg
ICAgZmFjZXREYXRhLmZhY2V0UGFyYW1ldGVycyA9IG51bGw7CisgICAgICAgICAgICBmYWNldERh
dGEuZGVwdGhTb3J0ZWRJbmRpY2VzID0gbmV3IFVpbnQzMkFycmF5KDApOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUg
QWJzdHJhY3RNZXNoIGluZGljZXMgYXJyYXkKKyAgICAgKiBAcGFyYW0gaW5kaWNlcyBkZWZpbmVz
IHRoZSBkYXRhIHNvdXJjZQorICAgICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0
IGluIHRoZSBpbmRleCBidWZmZXIgd2hlcmUgdG8gc3RvcmUgdGhlIG5ldyBkYXRhIChjYW4gYmUg
bnVsbCkKKyAgICAgKiBAcGFyYW0gZ3B1TWVtb3J5T25seSBkZWZpbmVzIGEgYm9vbGVhbiBpbmRp
Y2F0aW5nIHRoYXQgb25seSB0aGUgR1BVIG1lbW9yeSBtdXN0IGJlIHVwZGF0ZWQgbGVhdmluZyB0
aGUgQ1BVIHZlcnNpb24gb2YgdGhlIGluZGljZXMgdW5jaGFuZ2VkIChmYWxzZSBieSBkZWZhdWx0
KQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBBYnN0cmFj
dE1lc2gucHJvdG90eXBlLnVwZGF0ZUluZGljZXMgPSBmdW5jdGlvbiAoaW5kaWNlcywgb2Zmc2V0
LCBncHVNZW1vcnlPbmx5KSB7CisgICAgICAgIGlmIChncHVNZW1vcnlPbmx5ID09PSB2b2lkIDAp
IHsgZ3B1TWVtb3J5T25seSA9IGZhbHNlOyB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBuZXcgbm9ybWFscyBkYXRhIGZvciB0aGUgbWVzaAor
ICAgICAqIEBwYXJhbSB1cGRhdGFibGUgZGVmaW5lcyBpZiB0aGUgbm9ybWFsIHZlcnRleCBidWZm
ZXIgbXVzdCBiZSBmbGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJy
ZW50IG1lc2gKKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLmNyZWF0ZU5vcm1h
bHMgPSBmdW5jdGlvbiAodXBkYXRhYmxlKSB7CisgICAgICAgIHZhciBwb3NpdGlvbnMgPSB0aGlz
LmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpOworICAgICAgICB2YXIgaW5kaWNlcyA9
IHRoaXMuZ2V0SW5kaWNlcygpOworICAgICAgICB2YXIgbm9ybWFsczsKKyAgICAgICAgaWYgKHRo
aXMuaXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQpKSB7CisgICAgICAgICAgICBu
b3JtYWxzID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBub3JtYWxzID0gW107CisgICAgICAgIH0KKyAg
ICAgICAgX01lc2hlc19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siVmVydGV4RGF0YSJdLkNvbXB1dGVOb3JtYWxzKHBvc2l0aW9ucywgaW5kaWNlcywgbm9ybWFs
cywgeyB1c2VSaWdodEhhbmRlZFN5c3RlbTogdGhpcy5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVk
U3lzdGVtIH0pOworICAgICAgICB0aGlzLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBu
b3JtYWxzLCB1cGRhdGFibGUpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEFsaWduIHRoZSBtZXNoIHdpdGggYSBub3JtYWwKKyAgICAgKiBAcGFyYW0gbm9y
bWFsIGRlZmluZXMgdGhlIG5vcm1hbCB0byB1c2UKKyAgICAgKiBAcGFyYW0gdXBEaXJlY3Rpb24g
Y2FuIGJlIHVzZWQgdG8gcmVkZWZpbmVkIHRoZSB1cCB2ZWN0b3IgdG8gdXNlICh3aWxsIHVzZSB0
aGUgKDAsIDEsIDApIGJ5IGRlZmF1bHQpCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVz
aAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuYWxpZ25XaXRoTm9ybWFsID0g
ZnVuY3Rpb24gKG5vcm1hbCwgdXBEaXJlY3Rpb24pIHsKKyAgICAgICAgaWYgKCF1cERpcmVjdGlv
bikgeworICAgICAgICAgICAgdXBEaXJlY3Rpb24gPSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xN19fWyJBeGlzIl0uWTsKKyAgICAgICAgfQorICAgICAgICB2YXIg
YXhpc1ggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VG1wVmVjdG9ycyJdLlZlY3RvcjNbMF07CisgICAgICAgIHZhciBheGlzWiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9y
M1sxXTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlY3RvcjMiXS5Dcm9zc1RvUmVmKHVwRGlyZWN0aW9uLCBub3JtYWwsIGF4aXNaKTsK
KyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXS5Dcm9zc1RvUmVmKG5vcm1hbCwgYXhpc1osIGF4aXNYKTsKKyAgICAgICAgaWYg
KHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdLlJvdGF0aW9uUXVh
dGVybmlvbkZyb21BeGlzVG9SZWYoYXhpc1gsIG5vcm1hbCwgYXhpc1osIHRoaXMucm90YXRpb25R
dWF0ZXJuaW9uKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uUm90
YXRpb25Gcm9tQXhpc1RvUmVmKGF4aXNYLCBub3JtYWwsIGF4aXNaLCB0aGlzLnJvdGF0aW9uKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKiBAaGlkZGVu
ICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fY2hlY2tPY2NsdXNpb25RdWVyeSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAg
ICogRGlzYWJsZXMgdGhlIG1lc2ggZWRnZSByZW5kZXJpbmcgbW9kZQorICAgICAqIEByZXR1cm5z
IHRoZSBjdXJyZW50QWJzdHJhY3RNZXNoCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3Rv
dHlwZS5kaXNhYmxlRWRnZXNSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93
IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJfRGV2VG9vbHMi
XS5XYXJuSW1wb3J0KCJFZGdlc1JlbmRlcmVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBF
bmFibGVzIHRoZSBlZGdlIHJlbmRlcmluZyBtb2RlIG9uIHRoZSBtZXNoLgorICAgICAqIFRoaXMg
bW9kZSBtYWtlcyB0aGUgbWVzaCBlZGdlcyB2aXNpYmxlCisgICAgICogQHBhcmFtIGVwc2lsb24g
ZGVmaW5lcyB0aGUgbWF4aW1hbCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBhbmdsZXMgdG8gZGV0ZWN0
IGEgZmFjZQorICAgICAqIEBwYXJhbSBjaGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcyBpbmRp
Y2F0ZXMgdGhhdCB3ZSBzaG91bGQgY2hlY2sgdmVydGV4IGxpc3QgZGlyZWN0bHkgaW5zdGVhZCBv
ZiBmYWNlcworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50QWJzdHJhY3RNZXNoCisgICAgICog
QHNlZSBodHRwczovL3d3dy5iYWJ5bG9uanMtcGxheWdyb3VuZC5jb20vIzE5TzlUVSMwCisgICAg
ICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5lbmFibGVFZGdlc1JlbmRlcmluZyA9IGZ1
bmN0aW9uIChlcHNpbG9uLCBjaGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcykgeworICAgICAg
ICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siX0Rl
dlRvb2xzIl0uV2FybkltcG9ydCgiRWRnZXNSZW5kZXJlciIpOworICAgIH07CisgICAgLyoqIE5v
IG9jY2x1c2lvbiAqLworICAgIEFic3RyYWN0TWVzaC5PQ0NMVVNJT05fVFlQRV9OT05FID0gMDsK
KyAgICAvKiogT2NjbHVzaW9uIHNldCB0byBvcHRpbWlzaXRpYyAqLworICAgIEFic3RyYWN0TWVz
aC5PQ0NMVVNJT05fVFlQRV9PUFRJTUlTVElDID0gMTsKKyAgICAvKiogT2NjbHVzaW9uIHNldCB0
byBzdHJpY3QgKi8KKyAgICBBYnN0cmFjdE1lc2guT0NDTFVTSU9OX1RZUEVfU1RSSUNUID0gMjsK
KyAgICAvKiogVXNlIGFuIGFjY3VyYW50ZSBvY2NsdXNpb24gYWxnb3JpdGhtICovCisgICAgQWJz
dHJhY3RNZXNoLk9DQ0xVU0lPTl9BTEdPUklUSE1fVFlQRV9BQ0NVUkFURSA9IDA7CisgICAgLyoq
IFVzZSBhIGNvbnNlcnZhdGl2ZSBvY2NsdXNpb24gYWxnb3JpdGhtICovCisgICAgQWJzdHJhY3RN
ZXNoLk9DQ0xVU0lPTl9BTEdPUklUSE1fVFlQRV9DT05TRVJWQVRJVkUgPSAxOworICAgIC8qKiBE
ZWZhdWx0IGN1bGxpbmcgc3RyYXRlZ3kgOiB0aGlzIGlzIGFuIGV4Y2x1c2lvbiB0ZXN0IGFuZCBp
dCdzIHRoZSBtb3JlIGFjY3VyYXRlLgorICAgICAqICBUZXN0IG9yZGVyIDoKKyAgICAgKiAgSXMg
dGhlIGJvdW5kaW5nIHNwaGVyZSBvdXRzaWRlIHRoZSBmcnVzdHVtID8KKyAgICAgKiAgSWYgbm90
LCBhcmUgdGhlIGJvdW5kaW5nIGJveCB2ZXJ0aWNlcyBvdXRzaWRlIHRoZSBmcnVzdHVtID8KKyAg
ICAgKiAgSXQgbm90LCB0aGVuIHRoZSBjdWxsYWJsZSBvYmplY3QgaXMgaW4gdGhlIGZydXN0dW0u
CisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLkNVTExJTkdTVFJBVEVHWV9TVEFOREFSRCA9IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQ29uc3RhbnRz
Il0uTUVTSEVTX0NVTExJTkdTVFJBVEVHWV9TVEFOREFSRDsKKyAgICAvKiogQ3VsbGluZyBzdHJh
dGVneSA6IEJvdW5kaW5nIFNwaGVyZSBPbmx5LgorICAgICAqICBUaGlzIGlzIGFuIGV4Y2x1c2lv
biB0ZXN0LiBJdCdzIGZhc3RlciB0aGFuIHRoZSBzdGFuZGFyZCBzdHJhdGVneSBiZWNhdXNlIHRo
ZSBib3VuZGluZyBib3ggaXMgbm90IHRlc3RlZC4KKyAgICAgKiAgSXQncyBhbHNvIGxlc3MgYWNj
dXJhdGUgdGhhbiB0aGUgc3RhbmRhcmQgYmVjYXVzZSBzb21lIG5vdCB2aXNpYmxlIG9iamVjdHMg
Y2FuIHN0aWxsIGJlIHNlbGVjdGVkLgorICAgICAqICBUZXN0IDogaXMgdGhlIGJvdW5kaW5nIHNw
aGVyZSBvdXRzaWRlIHRoZSBmcnVzdHVtID8KKyAgICAgKiAgSWYgbm90LCB0aGVuIHRoZSBjdWxs
YWJsZSBvYmplY3QgaXMgaW4gdGhlIGZydXN0dW0uCisgICAgICovCisgICAgQWJzdHJhY3RNZXNo
LkNVTExJTkdTVFJBVEVHWV9CT1VORElOR1NQSEVSRV9PTkxZID0gX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJDb25zdGFudHMiXS5NRVNIRVNfQ1VMTElO
R1NUUkFURUdZX0JPVU5ESU5HU1BIRVJFX09OTFk7CisgICAgLyoqIEN1bGxpbmcgc3RyYXRlZ3kg
OiBPcHRpbWlzdGljIEluY2x1c2lvbi4KKyAgICAgKiAgVGhpcyBpbiBhbiBpbmNsdXNpb24gdGVz
dCBmaXJzdCwgdGhlbiB0aGUgc3RhbmRhcmQgZXhjbHVzaW9uIHRlc3QuCisgICAgICogIFRoaXMg
Y2FuIGJlIGZhc3RlciB3aGVuIGEgY3VsbGFibGUgb2JqZWN0IGlzIGV4cGVjdGVkIHRvIGJlIGFs
bW9zdCBhbHdheXMgaW4gdGhlIGNhbWVyYSBmcnVzdHVtLgorICAgICAqICBUaGlzIGNvdWxkIGFs
c28gYmUgYSBsaXR0bGUgc2xvd2VyIHRoYW4gdGhlIHN0YW5kYXJkIHRlc3Qgd2hlbiB0aGUgdGVz
dGVkIG9iamVjdCBjZW50ZXIgaXMgbm90IHRoZSBmcnVzdHVtIGJ1dCBvbmUgb2YgaXRzIGJvdW5k
aW5nIGJveCB2ZXJ0ZXggaXMgc3RpbGwgaW5zaWRlLgorICAgICAqICBBbnl3YXksIGl0J3MgYXMg
YWNjdXJhdGUgYXMgdGhlIHN0YW5kYXJkIHN0cmF0ZWd5LgorICAgICAqICBUZXN0IDoKKyAgICAg
KiAgSXMgdGhlIGN1bGxhYmxlIG9iamVjdCBib3VuZGluZyBzcGhlcmUgY2VudGVyIGluIHRoZSBm
cnVzdHVtID8KKyAgICAgKiAgSWYgbm90LCBhcHBseSB0aGUgZGVmYXVsdCBjdWxsaW5nIHN0cmF0
ZWd5LgorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5DVUxMSU5HU1RSQVRFR1lfT1BUSU1JU1RJ
Q19JTkNMVVNJT04gPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzEwX19bIkNvbnN0YW50cyJdLk1FU0hFU19DVUxMSU5HU1RSQVRFR1lfT1BUSU1JU1RJQ19JTkNM
VVNJT047CisgICAgLyoqIEN1bGxpbmcgc3RyYXRlZ3kgOiBPcHRpbWlzdGljIEluY2x1c2lvbiB0
aGVuIEJvdW5kaW5nIFNwaGVyZSBPbmx5LgorICAgICAqICBUaGlzIGluIGFuIGluY2x1c2lvbiB0
ZXN0IGZpcnN0LCB0aGVuIHRoZSBib3VuZGluZyBzcGhlcmUgb25seSBleGNsdXNpb24gdGVzdC4K
KyAgICAgKiAgVGhpcyBjYW4gYmUgdGhlIGZhc3Rlc3QgdGVzdCB3aGVuIGEgY3VsbGFibGUgb2Jq
ZWN0IGlzIGV4cGVjdGVkIHRvIGJlIGFsbW9zdCBhbHdheXMgaW4gdGhlIGNhbWVyYSBmcnVzdHVt
LgorICAgICAqICBUaGlzIGNvdWxkIGFsc28gYmUgYSBsaXR0bGUgc2xvd2VyIHRoYW4gdGhlIEJv
dW5kaW5nU3BoZXJlT25seSBzdHJhdGVneSB3aGVuIHRoZSB0ZXN0ZWQgb2JqZWN0IGNlbnRlciBp
cyBub3QgaW4gdGhlIGZydXN0dW0gYnV0IGl0cyBib3VuZGluZyBzcGhlcmUgc3RpbGwgaW50ZXJz
ZWN0cyBpdC4KKyAgICAgKiAgSXQncyBsZXNzIGFjY3VyYXRlIHRoYW4gdGhlIHN0YW5kYXJkIHN0
cmF0ZWd5IGFuZCBhcyBhY2N1cmF0ZSBhcyB0aGUgQm91bmRpbmdTcGhlcmVPbmx5IHN0cmF0ZWd5
LgorICAgICAqICBUZXN0IDoKKyAgICAgKiAgSXMgdGhlIGN1bGxhYmxlIG9iamVjdCBib3VuZGlu
ZyBzcGhlcmUgY2VudGVyIGluIHRoZSBmcnVzdHVtID8KKyAgICAgKiAgSWYgbm90LCBhcHBseSB0
aGUgQm91bmRpbmcgU3BoZXJlIE9ubHkgc3RyYXRlZ3kuIE5vIEJvdW5kaW5nIEJveCBpcyB0ZXN0
ZWQgaGVyZS4KKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2guQ1VMTElOR1NUUkFURUdZX09QVElN
SVNUSUNfSU5DTFVTSU9OX1RIRU5fQlNQSEVSRV9PTkxZID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJDb25zdGFudHMiXS5NRVNIRVNfQ1VMTElOR1NU
UkFURUdZX09QVElNSVNUSUNfSU5DTFVTSU9OX1RIRU5fQlNQSEVSRV9PTkxZOworICAgIHJldHVy
biBBYnN0cmFjdE1lc2g7Cit9KF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJUcmFuc2Zvcm1Ob2RlIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9NZXNoZXMvYnVmZmVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NZXNoZXMvYnVmZmVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJ1ZmZlciwgVmVydGV4QnVmZmVyICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gQnVmZmVyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlcnRleEJ1ZmZlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gVmVydGV4QnVmZmVyOyB9KTsKKy8qKgorICogQ2xhc3MgdXNlZCB0byBz
dG9yZSBkYXRhIHRoYXQgd2lsbCBiZSBzdG9yZSBpbiBHUFUgbWVtb3J5CisgKi8KK3ZhciBCdWZm
ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ29uc3Ry
dWN0b3IKKyAgICAgKiBAcGFyYW0gZW5naW5lIHRoZSBlbmdpbmUKKyAgICAgKiBAcGFyYW0gZGF0
YSB0aGUgZGF0YSB0byB1c2UgZm9yIHRoaXMgYnVmZmVyCisgICAgICogQHBhcmFtIHVwZGF0YWJs
ZSB3aGV0aGVyIHRoZSBkYXRhIGlzIHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBzdHJpZGUgdGhl
IHN0cmlkZSAob3B0aW9uYWwpCisgICAgICogQHBhcmFtIHBvc3Rwb25lSW50ZXJuYWxDcmVhdGlv
biB3aGV0aGVyIHRvIHBvc3Rwb25lIGNyZWF0aW5nIHRoZSBpbnRlcm5hbCBXZWJHTCBidWZmZXIg
KG9wdGlvbmFsKQorICAgICAqIEBwYXJhbSBpbnN0YW5jZWQgd2hldGhlciB0aGUgYnVmZmVyIGlz
IGluc3RhbmNlZCAob3B0aW9uYWwpCisgICAgICogQHBhcmFtIHVzZUJ5dGVzIHNldCB0byB0cnVl
IGlmIHRoZSBzdHJpZGUgaW4gaW4gYnl0ZXMgKG9wdGlvbmFsKQorICAgICAqLworICAgIGZ1bmN0
aW9uIEJ1ZmZlcihlbmdpbmUsIGRhdGEsIHVwZGF0YWJsZSwgc3RyaWRlLCBwb3N0cG9uZUludGVy
bmFsQ3JlYXRpb24sIGluc3RhbmNlZCwgdXNlQnl0ZXMpIHsKKyAgICAgICAgaWYgKHN0cmlkZSA9
PT0gdm9pZCAwKSB7IHN0cmlkZSA9IDA7IH0KKyAgICAgICAgaWYgKHBvc3Rwb25lSW50ZXJuYWxD
cmVhdGlvbiA9PT0gdm9pZCAwKSB7IHBvc3Rwb25lSW50ZXJuYWxDcmVhdGlvbiA9IGZhbHNlOyB9
CisgICAgICAgIGlmIChpbnN0YW5jZWQgPT09IHZvaWQgMCkgeyBpbnN0YW5jZWQgPSBmYWxzZTsg
fQorICAgICAgICBpZiAodXNlQnl0ZXMgPT09IHZvaWQgMCkgeyB1c2VCeXRlcyA9IGZhbHNlOyB9
CisgICAgICAgIGlmIChlbmdpbmUuZ2V0U2NlbmUpIHsgLy8gb2xkIHZlcnNpb25zIG9mIFZlcnRl
eEJ1ZmZlciBhY2NlcHRlZCAnbWVzaCcgaW5zdGVhZCBvZiAnZW5naW5lJworICAgICAgICAgICAg
dGhpcy5fZW5naW5lID0gZW5naW5lLmdldFNjZW5lKCkuZ2V0RW5naW5lKCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUgPSBlbmdpbmU7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fdXBkYXRhYmxlID0gdXBkYXRhYmxlOworICAgICAgICB0aGlz
Ll9pbnN0YW5jZWQgPSBpbnN0YW5jZWQ7CisgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhOworICAg
ICAgICB0aGlzLmJ5dGVTdHJpZGUgPSB1c2VCeXRlcyA/IHN0cmlkZSA6IHN0cmlkZSAqIEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDsKKyAgICAgICAgaWYgKCFwb3N0cG9uZUludGVybmFs
Q3JlYXRpb24pIHsgLy8gYnkgZGVmYXVsdAorICAgICAgICAgICAgdGhpcy5jcmVhdGUoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgVmVydGV4QnVmZmVy
IGJhc2VkIG9uIHRoZSBjdXJyZW50IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMg
dGhlIHZlcnRleCBidWZmZXIga2luZCAocG9zaXRpb24sIG5vcm1hbCwgZXRjLikKKyAgICAgKiBA
cGFyYW0gb2Zmc2V0IGRlZmluZXMgb2Zmc2V0IGluIHRoZSBidWZmZXIgKDAgYnkgZGVmYXVsdCkK
KyAgICAgKiBAcGFyYW0gc2l6ZSBkZWZpbmVzIHRoZSBzaXplIGluIGZsb2F0cyBvZiBhdHRyaWJ1
dGVzIChwb3NpdGlvbiBpcyAzIGZvciBpbnN0YW5jZSkKKyAgICAgKiBAcGFyYW0gc3RyaWRlIGRl
ZmluZXMgdGhlIHN0cmlkZSBzaXplIGluIGZsb2F0cyBpbiB0aGUgYnVmZmVyICh0aGUgb2Zmc2V0
IHRvIGFwcGx5IHRvIHJlYWNoIG5leHQgdmFsdWUgd2hlbiBkYXRhIGlzIGludGVybGVhdmVkKQor
ICAgICAqIEBwYXJhbSBpbnN0YW5jZWQgZGVmaW5lcyBpZiB0aGUgdmVydGV4IGJ1ZmZlciBjb250
YWlucyBpbmRleGVkIGRhdGEKKyAgICAgKiBAcGFyYW0gdXNlQnl0ZXMgZGVmaW5lcyBpZiB0aGUg
b2Zmc2V0IGFuZCBzdHJpZGUgYXJlIGluIGJ5dGVzCisgICAgICogQHJldHVybnMgdGhlIG5ldyB2
ZXJ0ZXggYnVmZmVyCisgICAgICovCisgICAgQnVmZmVyLnByb3RvdHlwZS5jcmVhdGVWZXJ0ZXhC
dWZmZXIgPSBmdW5jdGlvbiAoa2luZCwgb2Zmc2V0LCBzaXplLCBzdHJpZGUsIGluc3RhbmNlZCwg
dXNlQnl0ZXMpIHsKKyAgICAgICAgaWYgKHVzZUJ5dGVzID09PSB2b2lkIDApIHsgdXNlQnl0ZXMg
PSBmYWxzZTsgfQorICAgICAgICB2YXIgYnl0ZU9mZnNldCA9IHVzZUJ5dGVzID8gb2Zmc2V0IDog
b2Zmc2V0ICogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UOworICAgICAgICB2YXIgYnl0
ZVN0cmlkZSA9IHN0cmlkZSA/ICh1c2VCeXRlcyA/IHN0cmlkZSA6IHN0cmlkZSAqIEZsb2F0MzJB
cnJheS5CWVRFU19QRVJfRUxFTUVOVCkgOiB0aGlzLmJ5dGVTdHJpZGU7CisgICAgICAgIC8vIGEg
bG90IG9mIHRoZXNlIHBhcmFtZXRlcnMgYXJlIGlnbm9yZWQgYXMgdGhleSBhcmUgb3ZlcnJpZGVu
IGJ5IHRoZSBidWZmZXIKKyAgICAgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIodGhpcy5fZW5n
aW5lLCB0aGlzLCBraW5kLCB0aGlzLl91cGRhdGFibGUsIHRydWUsIGJ5dGVTdHJpZGUsIGluc3Rh
bmNlZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5faW5zdGFuY2VkIDogaW5zdGFuY2VkLCBieXRlT2Zm
c2V0LCBzaXplLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSk7CisgICAgfTsKKyAgICAvLyBQ
cm9wZXJ0aWVzCisgICAgLyoqCisgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0
aGUgQnVmZmVyIGlzIHVwZGF0YWJsZT8KKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBidWZm
ZXIgaXMgdXBkYXRhYmxlCisgICAgICovCisgICAgQnVmZmVyLnByb3RvdHlwZS5pc1VwZGF0YWJs
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0YWJsZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgY3VycmVudCBidWZmZXIncyBkYXRhCisgICAgICogQHJl
dHVybnMgYSBEYXRhQXJyYXkgb3IgbnVsbAorICAgICAqLworICAgIEJ1ZmZlci5wcm90b3R5cGUu
Z2V0RGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHVuZGVybHlpbmcgbmF0aXZlIGJ1ZmZlcgorICAgICAq
IEByZXR1cm5zIHVuZGVybHlpbmcgbmF0aXZlIGJ1ZmZlcgorICAgICAqLworICAgIEJ1ZmZlci5w
cm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5f
YnVmZmVyOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc3RyaWRlIGluIGZsb2F0
MzIgdW5pdHMgKGkuZS4gYnl0ZSBzdHJpZGUgLyA0KS4KKyAgICAgKiBNYXkgbm90IGJlIGFuIGlu
dGVnZXIgaWYgdGhlIGJ5dGUgc3RyaWRlIGlzIG5vdCBkaXZpc2libGUgYnkgNC4KKyAgICAgKiBE
RVBSRUNBVEVELiBVc2UgYnl0ZVN0cmlkZSBpbnN0ZWFkLgorICAgICAqIEByZXR1cm5zIHRoZSBz
dHJpZGUgaW4gZmxvYXQzMiB1bml0cworICAgICAqLworICAgIEJ1ZmZlci5wcm90b3R5cGUuZ2V0
U3RyaWRlU2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZVN0cmlk
ZSAvIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDsKKyAgICB9OworICAgIC8vIE1ldGhv
ZHMKKyAgICAvKioKKyAgICAgKiBTdG9yZSBkYXRhIGludG8gdGhlIGJ1ZmZlci4gSWYgdGhlIGJ1
ZmZlciB3YXMgYWxyZWFkeSB1c2VkIGl0IHdpbGwgYmUgZWl0aGVyIHJlY3JlYXRlZCBvciB1cGRh
dGVkIGRlcGVuZGluZyBvbiBpc1VwZGF0YWJsZSBwcm9wZXJ0eQorICAgICAqIEBwYXJhbSBkYXRh
IGRlZmluZXMgdGhlIGRhdGEgdG8gc3RvcmUKKyAgICAgKi8KKyAgICBCdWZmZXIucHJvdG90eXBl
LmNyZWF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIGlmIChkYXRhID09PSB2b2lkIDAp
IHsgZGF0YSA9IG51bGw7IH0KKyAgICAgICAgaWYgKCFkYXRhICYmIHRoaXMuX2J1ZmZlcikgewor
ICAgICAgICAgICAgcmV0dXJuOyAvLyBub3RoaW5nIHRvIGRvCisgICAgICAgIH0KKyAgICAgICAg
ZGF0YSA9IGRhdGEgfHwgdGhpcy5fZGF0YTsKKyAgICAgICAgaWYgKCFkYXRhKSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9idWZmZXIpIHsgLy8g
Y3JlYXRlIGJ1ZmZlcgorICAgICAgICAgICAgaWYgKHRoaXMuX3VwZGF0YWJsZSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IHRoaXMuX2VuZ2luZS5jcmVhdGVEeW5hbWljVmVydGV4
QnVmZmVyKGRhdGEpOworICAgICAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVy
ID0gdGhpcy5fZW5naW5lLmNyZWF0ZVZlcnRleEJ1ZmZlcihkYXRhKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLl91cGRhdGFibGUpIHsgLy8gdXBkYXRl
IGJ1ZmZlcgorICAgICAgICAgICAgdGhpcy5fZW5naW5lLnVwZGF0ZUR5bmFtaWNWZXJ0ZXhCdWZm
ZXIodGhpcy5fYnVmZmVyLCBkYXRhKTsKKyAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEJ1ZmZlci5wcm90b3R5
cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7
CisgICAgICAgIHRoaXMuY3JlYXRlKHRoaXMuX2RhdGEpOworICAgIH07CisgICAgLyoqCisgICAg
ICogVXBkYXRlIGN1cnJlbnQgYnVmZmVyIGRhdGEKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVz
IHRoZSBkYXRhIHRvIHN0b3JlCisgICAgICovCisgICAgQnVmZmVyLnByb3RvdHlwZS51cGRhdGUg
PSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB0aGlzLmNyZWF0ZShkYXRhKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGRhdGEgZGlyZWN0bHkuCisgICAgICogQHBhcmFt
IGRhdGEgdGhlIG5ldyBkYXRhCisgICAgICogQHBhcmFtIG9mZnNldCB0aGUgbmV3IG9mZnNldAor
ICAgICAqIEBwYXJhbSB2ZXJ0ZXhDb3VudCB0aGUgdmVydGV4IGNvdW50IChvcHRpb25hbCkKKyAg
ICAgKiBAcGFyYW0gdXNlQnl0ZXMgc2V0IHRvIHRydWUgaWYgdGhlIG9mZnNldCBpcyBpbiBieXRl
cworICAgICAqLworICAgIEJ1ZmZlci5wcm90b3R5cGUudXBkYXRlRGlyZWN0bHkgPSBmdW5jdGlv
biAoZGF0YSwgb2Zmc2V0LCB2ZXJ0ZXhDb3VudCwgdXNlQnl0ZXMpIHsKKyAgICAgICAgaWYgKHVz
ZUJ5dGVzID09PSB2b2lkIDApIHsgdXNlQnl0ZXMgPSBmYWxzZTsgfQorICAgICAgICBpZiAoIXRo
aXMuX2J1ZmZlcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLl91cGRhdGFibGUpIHsgLy8gdXBkYXRlIGJ1ZmZlcgorICAgICAgICAgICAgdGhpcy5f
ZW5naW5lLnVwZGF0ZUR5bmFtaWNWZXJ0ZXhCdWZmZXIodGhpcy5fYnVmZmVyLCBkYXRhLCB1c2VC
eXRlcyA/IG9mZnNldCA6IG9mZnNldCAqIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwg
KHZlcnRleENvdW50ID8gdmVydGV4Q291bnQgKiB0aGlzLmJ5dGVTdHJpZGUgOiB1bmRlZmluZWQp
KTsKKyAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZWxlYXNlIGFsbCByZXNvdXJjZXMKKyAgICAgKi8KKyAgICBCdWZmZXIu
cHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fYnVm
ZmVyKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X2VuZ2luZS5fcmVsZWFzZUJ1ZmZlcih0aGlzLl9idWZmZXIpKSB7CisgICAgICAgICAgICB0aGlz
Ll9idWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gQnVmZmVyOwor
fSgpKTsKKworLyoqCisgICAgICogU3BlY2lhbGl6ZWQgYnVmZmVyIHVzZWQgdG8gc3RvcmUgdmVy
dGV4IGRhdGEKKyAgICAgKi8KK3ZhciBWZXJ0ZXhCdWZmZXIgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IKKyAgICAgKiBAcGFyYW0gZW5n
aW5lIHRoZSBlbmdpbmUKKyAgICAgKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSB0byB1c2UgZm9yIHRo
aXMgdmVydGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBraW5kIHRoZSB2ZXJ0ZXggYnVmZmVyIGtp
bmQKKyAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIHdoZXRoZXIgdGhlIGRhdGEgaXMgdXBkYXRhYmxl
CisgICAgICogQHBhcmFtIHBvc3Rwb25lSW50ZXJuYWxDcmVhdGlvbiB3aGV0aGVyIHRvIHBvc3Rw
b25lIGNyZWF0aW5nIHRoZSBpbnRlcm5hbCBXZWJHTCBidWZmZXIgKG9wdGlvbmFsKQorICAgICAq
IEBwYXJhbSBzdHJpZGUgdGhlIHN0cmlkZSAob3B0aW9uYWwpCisgICAgICogQHBhcmFtIGluc3Rh
bmNlZCB3aGV0aGVyIHRoZSBidWZmZXIgaXMgaW5zdGFuY2VkIChvcHRpb25hbCkKKyAgICAgKiBA
cGFyYW0gb2Zmc2V0IHRoZSBvZmZzZXQgb2YgdGhlIGRhdGEgKG9wdGlvbmFsKQorICAgICAqIEBw
YXJhbSBzaXplIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyAob3B0aW9uYWwpCisgICAgICogQHBh
cmFtIHR5cGUgdGhlIHR5cGUgb2YgdGhlIGNvbXBvbmVudCAob3B0aW9uYWwpCisgICAgICogQHBh
cmFtIG5vcm1hbGl6ZWQgd2hldGhlciB0aGUgZGF0YSBjb250YWlucyBub3JtYWxpemVkIGRhdGEg
KG9wdGlvbmFsKQorICAgICAqIEBwYXJhbSB1c2VCeXRlcyBzZXQgdG8gdHJ1ZSBpZiBzdHJpZGUg
YW5kIG9mZnNldCBhcmUgaW4gYnl0ZXMgKG9wdGlvbmFsKQorICAgICAqLworICAgIGZ1bmN0aW9u
IFZlcnRleEJ1ZmZlcihlbmdpbmUsIGRhdGEsIGtpbmQsIHVwZGF0YWJsZSwgcG9zdHBvbmVJbnRl
cm5hbENyZWF0aW9uLCBzdHJpZGUsIGluc3RhbmNlZCwgb2Zmc2V0LCBzaXplLCB0eXBlLCBub3Jt
YWxpemVkLCB1c2VCeXRlcykgeworICAgICAgICBpZiAobm9ybWFsaXplZCA9PT0gdm9pZCAwKSB7
IG5vcm1hbGl6ZWQgPSBmYWxzZTsgfQorICAgICAgICBpZiAodXNlQnl0ZXMgPT09IHZvaWQgMCkg
eyB1c2VCeXRlcyA9IGZhbHNlOyB9CisgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQnVmZmVy
KSB7CisgICAgICAgICAgICB0aGlzLl9idWZmZXIgPSBkYXRhOworICAgICAgICAgICAgdGhpcy5f
b3duc0J1ZmZlciA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5fYnVmZmVyID0gbmV3IEJ1ZmZlcihlbmdpbmUsIGRhdGEsIHVwZGF0YWJsZSwgc3Ry
aWRlLCBwb3N0cG9uZUludGVybmFsQ3JlYXRpb24sIGluc3RhbmNlZCwgdXNlQnl0ZXMpOworICAg
ICAgICAgICAgdGhpcy5fb3duc0J1ZmZlciA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fa2luZCA9IGtpbmQ7CisgICAgICAgIGlmICh0eXBlID09IHVuZGVmaW5lZCkgeworICAgICAg
ICAgICAgdmFyIGRhdGFfMSA9IHRoaXMuZ2V0RGF0YSgpOworICAgICAgICAgICAgdGhpcy50eXBl
ID0gVmVydGV4QnVmZmVyLkZMT0FUOworICAgICAgICAgICAgaWYgKGRhdGFfMSBpbnN0YW5jZW9m
IEludDhBcnJheSkgeworICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9IFZlcnRleEJ1ZmZlci5C
WVRFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZGF0YV8xIGluc3RhbmNl
b2YgVWludDhBcnJheSkgeworICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9IFZlcnRleEJ1ZmZl
ci5VTlNJR05FRF9CWVRFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZGF0
YV8xIGluc3RhbmNlb2YgSW50MTZBcnJheSkgeworICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9
IFZlcnRleEJ1ZmZlci5TSE9SVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KGRhdGFfMSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSB7CisgICAgICAgICAgICAgICAgdGhpcy50
eXBlID0gVmVydGV4QnVmZmVyLlVOU0lHTkVEX1NIT1JUOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAoZGF0YV8xIGluc3RhbmNlb2YgSW50MzJBcnJheSkgeworICAgICAgICAg
ICAgICAgIHRoaXMudHlwZSA9IFZlcnRleEJ1ZmZlci5JTlQ7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmIChkYXRhXzEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkgeworICAgICAg
ICAgICAgICAgIHRoaXMudHlwZSA9IFZlcnRleEJ1ZmZlci5VTlNJR05FRF9JTlQ7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLnR5cGUg
PSB0eXBlOworICAgICAgICB9CisgICAgICAgIHZhciB0eXBlQnl0ZUxlbmd0aCA9IFZlcnRleEJ1
ZmZlci5HZXRUeXBlQnl0ZUxlbmd0aCh0aGlzLnR5cGUpOworICAgICAgICBpZiAodXNlQnl0ZXMp
IHsKKyAgICAgICAgICAgIHRoaXMuX3NpemUgPSBzaXplIHx8IChzdHJpZGUgPyAoc3RyaWRlIC8g
dHlwZUJ5dGVMZW5ndGgpIDogVmVydGV4QnVmZmVyLkRlZHVjZVN0cmlkZShraW5kKSk7CisgICAg
ICAgICAgICB0aGlzLmJ5dGVTdHJpZGUgPSBzdHJpZGUgfHwgdGhpcy5fYnVmZmVyLmJ5dGVTdHJp
ZGUgfHwgKHRoaXMuX3NpemUgKiB0eXBlQnl0ZUxlbmd0aCk7CisgICAgICAgICAgICB0aGlzLmJ5
dGVPZmZzZXQgPSBvZmZzZXQgfHwgMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHRoaXMuX3NpemUgPSBzaXplIHx8IHN0cmlkZSB8fCBWZXJ0ZXhCdWZmZXIuRGVkdWNl
U3RyaWRlKGtpbmQpOworICAgICAgICAgICAgdGhpcy5ieXRlU3RyaWRlID0gc3RyaWRlID8gKHN0
cmlkZSAqIHR5cGVCeXRlTGVuZ3RoKSA6ICh0aGlzLl9idWZmZXIuYnl0ZVN0cmlkZSB8fCAodGhp
cy5fc2l6ZSAqIHR5cGVCeXRlTGVuZ3RoKSk7CisgICAgICAgICAgICB0aGlzLmJ5dGVPZmZzZXQg
PSAob2Zmc2V0IHx8IDApICogdHlwZUJ5dGVMZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5ub3JtYWxpemVkID0gbm9ybWFsaXplZDsKKyAgICAgICAgdGhpcy5faW5zdGFuY2VkID0gaW5z
dGFuY2VkICE9PSB1bmRlZmluZWQgPyBpbnN0YW5jZWQgOiBmYWxzZTsKKyAgICAgICAgdGhpcy5f
aW5zdGFuY2VEaXZpc29yID0gaW5zdGFuY2VkID8gMSA6IDA7CisgICAgfQorICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShWZXJ0ZXhCdWZmZXIucHJvdG90eXBlLCAiaW5zdGFuY2VEaXZpc29yIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBpbnN0YW5jZSBkaXZp
c29yIHdoZW4gaW4gaW5zdGFuY2VkIG1vZGUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlRGl2aXNvcjsKKyAg
ICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRo
aXMuX2luc3RhbmNlRGl2aXNvciA9IHZhbHVlOworICAgICAgICAgICAgaWYgKHZhbHVlID09IDAp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlZCA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKiBAaGlkZGVu
ICovCisgICAgVmVydGV4QnVmZmVyLnByb3RvdHlwZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9idWZmZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9idWZmZXIuX3JlYnVpbGQoKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJldHVybnMgdGhlIGtpbmQgb2YgdGhlIFZlcnRleEJ1ZmZlciAoc3RyaW5nKQorICAg
ICAqIEByZXR1cm5zIGEgc3RyaW5nCisgICAgICovCisgICAgVmVydGV4QnVmZmVyLnByb3RvdHlw
ZS5nZXRLaW5kID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fa2luZDsKKyAg
ICB9OworICAgIC8vIFByb3BlcnRpZXMKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBp
bmRpY2F0aW5nIGlmIHRoZSBWZXJ0ZXhCdWZmZXIgaXMgdXBkYXRhYmxlPworICAgICAqIEByZXR1
cm5zIHRydWUgaWYgdGhlIGJ1ZmZlciBpcyB1cGRhdGFibGUKKyAgICAgKi8KKyAgICBWZXJ0ZXhC
dWZmZXIucHJvdG90eXBlLmlzVXBkYXRhYmxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fYnVmZmVyLmlzVXBkYXRhYmxlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIGN1cnJlbnQgYnVmZmVyJ3MgZGF0YQorICAgICAqIEByZXR1cm5zIGEgRGF0YUFycmF5IG9y
IG51bGwKKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIucHJvdG90eXBlLmdldERhdGEgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZ2V0RGF0YSgpOworICAgIH07
CisgICAgLyoqCisgICAgICogR2V0cyB1bmRlcmx5aW5nIG5hdGl2ZSBidWZmZXIKKyAgICAgKiBA
cmV0dXJucyB1bmRlcmx5aW5nIG5hdGl2ZSBidWZmZXIKKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZm
ZXIucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2J1ZmZlci5nZXRCdWZmZXIoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhl
IHN0cmlkZSBpbiBmbG9hdDMyIHVuaXRzIChpLmUuIGJ5dGUgc3RyaWRlIC8gNCkuCisgICAgICog
TWF5IG5vdCBiZSBhbiBpbnRlZ2VyIGlmIHRoZSBieXRlIHN0cmlkZSBpcyBub3QgZGl2aXNpYmxl
IGJ5IDQuCisgICAgICogREVQUkVDQVRFRC4gVXNlIGJ5dGVTdHJpZGUgaW5zdGVhZC4KKyAgICAg
KiBAcmV0dXJucyB0aGUgc3RyaWRlIGluIGZsb2F0MzIgdW5pdHMKKyAgICAgKi8KKyAgICBWZXJ0
ZXhCdWZmZXIucHJvdG90eXBlLmdldFN0cmlkZVNpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLmJ5dGVTdHJpZGUgLyBWZXJ0ZXhCdWZmZXIuR2V0VHlwZUJ5dGVMZW5ndGgo
dGhpcy50eXBlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG9mZnNldCBh
cyBhIG11bHRpcGxlIG9mIHRoZSB0eXBlIGJ5dGUgbGVuZ3RoLgorICAgICAqIERFUFJFQ0FURUQu
IFVzZSBieXRlT2Zmc2V0IGluc3RlYWQuCisgICAgICogQHJldHVybnMgdGhlIG9mZnNldCBpbiBi
eXRlcworICAgICAqLworICAgIFZlcnRleEJ1ZmZlci5wcm90b3R5cGUuZ2V0T2Zmc2V0ID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0IC8gVmVydGV4QnVmZmVy
LkdldFR5cGVCeXRlTGVuZ3RoKHRoaXMudHlwZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBwZXIgdmVydGV4IGF0dHJpYnV0ZSAoaW50
ZWdlcikKKyAgICAgKiBAcmV0dXJucyB0aGUgc2l6ZSBpbiBmbG9hdAorICAgICAqLworICAgIFZl
cnRleEJ1ZmZlci5wcm90b3R5cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3NpemU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBp
bmRpY2F0aW5nIGlzIHRoZSBpbnRlcm5hbCBidWZmZXIgb2YgdGhlIFZlcnRleEJ1ZmZlciBpcyBp
bnN0YW5jZWQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoaXMgYnVmZmVyIGlzIGluc3RhbmNl
ZAorICAgICAqLworICAgIFZlcnRleEJ1ZmZlci5wcm90b3R5cGUuZ2V0SXNJbnN0YW5jZWQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZWQ7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbnN0YW5jaW5nIGRpdmlzb3IsIHplcm8gZm9yIG5v
bi1pbnN0YW5jZWQgKGludGVnZXIpLgorICAgICAqIEByZXR1cm5zIGEgbnVtYmVyCisgICAgICov
CisgICAgVmVydGV4QnVmZmVyLnByb3RvdHlwZS5nZXRJbnN0YW5jZURpdmlzb3IgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZURpdmlzb3I7CisgICAgfTsKKyAg
ICAvLyBNZXRob2RzCisgICAgLyoqCisgICAgICogU3RvcmUgZGF0YSBpbnRvIHRoZSBidWZmZXIu
IElmIHRoZSBidWZmZXIgd2FzIGFscmVhZHkgdXNlZCBpdCB3aWxsIGJlIGVpdGhlciByZWNyZWF0
ZWQgb3IgdXBkYXRlZCBkZXBlbmRpbmcgb24gaXNVcGRhdGFibGUgcHJvcGVydHkKKyAgICAgKiBA
cGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHRvIHN0b3JlCisgICAgICovCisgICAgVmVydGV4
QnVmZmVyLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB0aGlz
Ll9idWZmZXIuY3JlYXRlKGRhdGEpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0
aGUgdW5kZXJseWluZyBidWZmZXIgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbnVtZXJpYyBhcnJh
eSBvciBGbG9hdDMyQXJyYXkuCisgICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhIG5l
dyBidWZmZXIgaWYgdGhlIGN1cnJlbnQgb25lIGlzIG5vdCB1cGRhdGFibGUKKyAgICAgKiBAcGFy
YW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHRvIHN0b3JlCisgICAgICovCisgICAgVmVydGV4QnVm
ZmVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB0aGlzLl9i
dWZmZXIudXBkYXRlKGRhdGEpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyBkaXJl
Y3RseSB0aGUgdW5kZXJseWluZyBXZWJHTEJ1ZmZlciBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBu
dW1lcmljIGFycmF5IG9yIEZsb2F0MzJBcnJheS4KKyAgICAgKiBSZXR1cm5zIHRoZSBkaXJlY3Rs
eSB1cGRhdGVkIFdlYkdMQnVmZmVyLgorICAgICAqIEBwYXJhbSBkYXRhIHRoZSBuZXcgZGF0YQor
ICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIG5ldyBvZmZzZXQKKyAgICAgKiBAcGFyYW0gdXNlQnl0
ZXMgc2V0IHRvIHRydWUgaWYgdGhlIG9mZnNldCBpcyBpbiBieXRlcworICAgICAqLworICAgIFZl
cnRleEJ1ZmZlci5wcm90b3R5cGUudXBkYXRlRGlyZWN0bHkgPSBmdW5jdGlvbiAoZGF0YSwgb2Zm
c2V0LCB1c2VCeXRlcykgeworICAgICAgICBpZiAodXNlQnl0ZXMgPT09IHZvaWQgMCkgeyB1c2VC
eXRlcyA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMuX2J1ZmZlci51cGRhdGVEaXJlY3RseShkYXRh
LCBvZmZzZXQsIHVuZGVmaW5lZCwgdXNlQnl0ZXMpOworICAgIH07CisgICAgLyoqCisgICAgICog
RGlzcG9zZXMgdGhlIFZlcnRleEJ1ZmZlciBhbmQgdGhlIHVuZGVybHlpbmcgV2ViR0xCdWZmZXIu
CisgICAgICovCisgICAgVmVydGV4QnVmZmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24g
KCkgeworICAgICAgICBpZiAodGhpcy5fb3duc0J1ZmZlcikgeworICAgICAgICAgICAgdGhpcy5f
YnVmZmVyLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRW51
bWVyYXRlcyBlYWNoIHZhbHVlIG9mIHRoaXMgdmVydGV4IGJ1ZmZlciBhcyBudW1iZXJzLgorICAg
ICAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHZhbHVlcyB0byBlbnVtZXJhdGUKKyAgICAg
KiBAcGFyYW0gY2FsbGJhY2sgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCB2
YWx1ZQorICAgICAqLworICAgIFZlcnRleEJ1ZmZlci5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0
aW9uIChjb3VudCwgY2FsbGJhY2spIHsKKyAgICAgICAgVmVydGV4QnVmZmVyLkZvckVhY2godGhp
cy5fYnVmZmVyLmdldERhdGEoKSwgdGhpcy5ieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTdHJpZGUsIHRo
aXMuX3NpemUsIHRoaXMudHlwZSwgY291bnQsIHRoaXMubm9ybWFsaXplZCwgY2FsbGJhY2spOwor
ICAgIH07CisgICAgLyoqCisgICAgICogRGVkdWNlcyB0aGUgc3RyaWRlIGdpdmVuIGEga2luZC4K
KyAgICAgKiBAcGFyYW0ga2luZCBUaGUga2luZCBzdHJpbmcgdG8gZGVkdWNlCisgICAgICogQHJl
dHVybnMgVGhlIGRlZHVjZWQgc3RyaWRlCisgICAgICovCisgICAgVmVydGV4QnVmZmVyLkRlZHVj
ZVN0cmlkZSA9IGZ1bmN0aW9uIChraW5kKSB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAg
ICAgICAgICAgY2FzZSBWZXJ0ZXhCdWZmZXIuVVZLaW5kOgorICAgICAgICAgICAgY2FzZSBWZXJ0
ZXhCdWZmZXIuVVYyS2luZDoKKyAgICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLlVWM0tpbmQ6
CisgICAgICAgICAgICBjYXNlIFZlcnRleEJ1ZmZlci5VVjRLaW5kOgorICAgICAgICAgICAgY2Fz
ZSBWZXJ0ZXhCdWZmZXIuVVY1S2luZDoKKyAgICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLlVW
NktpbmQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgICAgICBjYXNlIFZlcnRl
eEJ1ZmZlci5Ob3JtYWxLaW5kOgorICAgICAgICAgICAgY2FzZSBWZXJ0ZXhCdWZmZXIuUG9zaXRp
b25LaW5kOgorICAgICAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICAgICAgY2FzZSBWZXJ0
ZXhCdWZmZXIuQ29sb3JLaW5kOgorICAgICAgICAgICAgY2FzZSBWZXJ0ZXhCdWZmZXIuTWF0cmlj
ZXNJbmRpY2VzS2luZDoKKyAgICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLk1hdHJpY2VzSW5k
aWNlc0V4dHJhS2luZDoKKyAgICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLk1hdHJpY2VzV2Vp
Z2h0c0tpbmQ6CisgICAgICAgICAgICBjYXNlIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNF
eHRyYUtpbmQ6CisgICAgICAgICAgICBjYXNlIFZlcnRleEJ1ZmZlci5UYW5nZW50S2luZDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGtpbmQgJyIgKyBraW5kICsgIiciKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgYnl0ZSBsZW5ndGggb2Yg
dGhlIGdpdmVuIHR5cGUuCisgICAgICogQHBhcmFtIHR5cGUgdGhlIHR5cGUKKyAgICAgKiBAcmV0
dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgICAgICovCisgICAgVmVydGV4QnVmZmVyLkdldFR5
cGVCeXRlTGVuZ3RoID0gZnVuY3Rpb24gKHR5cGUpIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgICAgICBjYXNlIFZlcnRleEJ1ZmZlci5CWVRFOgorICAgICAgICAgICAgY2FzZSBW
ZXJ0ZXhCdWZmZXIuVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLlNIT1JUOgorICAgICAgICAgICAgY2FzZSBWZXJ0
ZXhCdWZmZXIuVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAg
ICAgICAgICBjYXNlIFZlcnRleEJ1ZmZlci5JTlQ6CisgICAgICAgICAgICBjYXNlIFZlcnRleEJ1
ZmZlci5VTlNJR05FRF9JTlQ6CisgICAgICAgICAgICBjYXNlIFZlcnRleEJ1ZmZlci5GTE9BVDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHR5cGUgJyIgKyB0eXBlICsgIiciKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRW51bWVyYXRlcyBlYWNoIHZhbHVl
IG9mIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFzIG51bWJlcnMuCisgICAgICogQHBhcmFtIGRhdGEg
dGhlIGRhdGEgdG8gZW51bWVyYXRlCisgICAgICogQHBhcmFtIGJ5dGVPZmZzZXQgdGhlIGJ5dGUg
b2Zmc2V0IG9mIHRoZSBkYXRhCisgICAgICogQHBhcmFtIGJ5dGVTdHJpZGUgdGhlIGJ5dGUgc3Ry
aWRlIG9mIHRoZSBkYXRhCisgICAgICogQHBhcmFtIGNvbXBvbmVudENvdW50IHRoZSBudW1iZXIg
b2YgY29tcG9uZW50cyBwZXIgZWxlbWVudAorICAgICAqIEBwYXJhbSBjb21wb25lbnRUeXBlIHRo
ZSB0eXBlIG9mIHRoZSBjb21wb25lbnQKKyAgICAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBv
ZiB2YWx1ZXMgdG8gZW51bWVyYXRlCisgICAgICogQHBhcmFtIG5vcm1hbGl6ZWQgd2hldGhlciB0
aGUgZGF0YSBpcyBub3JtYWxpemVkCisgICAgICogQHBhcmFtIGNhbGxiYWNrIHRoZSBjYWxsYmFj
ayBmdW5jdGlvbiBjYWxsZWQgZm9yIGVhY2ggdmFsdWUKKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZm
ZXIuRm9yRWFjaCA9IGZ1bmN0aW9uIChkYXRhLCBieXRlT2Zmc2V0LCBieXRlU3RyaWRlLCBjb21w
b25lbnRDb3VudCwgY29tcG9uZW50VHlwZSwgY291bnQsIG5vcm1hbGl6ZWQsIGNhbGxiYWNrKSB7
CisgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgIHZhciBv
ZmZzZXQgPSBieXRlT2Zmc2V0IC8gNDsKKyAgICAgICAgICAgIHZhciBzdHJpZGUgPSBieXRlU3Ry
aWRlIC8gNDsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsg
aW5kZXggKz0gY29tcG9uZW50Q291bnQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBjb21w
b25lbnRJbmRleCA9IDA7IGNvbXBvbmVudEluZGV4IDwgY29tcG9uZW50Q291bnQ7IGNvbXBvbmVu
dEluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YVtvZmZzZXQgKyBj
b21wb25lbnRJbmRleF0sIGluZGV4ICsgY29tcG9uZW50SW5kZXgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGRhdGFWaWV3ID0gZGF0YSBp
bnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IERhdGFWaWV3KGRhdGEpIDogbmV3IERhdGFWaWV3
KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCk7CisgICAgICAg
ICAgICB2YXIgY29tcG9uZW50Qnl0ZUxlbmd0aCA9IFZlcnRleEJ1ZmZlci5HZXRUeXBlQnl0ZUxl
bmd0aChjb21wb25lbnRUeXBlKTsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBjb3VudDsgaW5kZXggKz0gY29tcG9uZW50Q291bnQpIHsKKyAgICAgICAgICAgICAgICB2
YXIgY29tcG9uZW50Qnl0ZU9mZnNldCA9IGJ5dGVPZmZzZXQ7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgY29tcG9uZW50SW5kZXggPSAwOyBjb21wb25lbnRJbmRleCA8IGNvbXBvbmVudENvdW50
OyBjb21wb25lbnRJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IFZl
cnRleEJ1ZmZlci5fR2V0RmxvYXRWYWx1ZShkYXRhVmlldywgY29tcG9uZW50VHlwZSwgY29tcG9u
ZW50Qnl0ZU9mZnNldCwgbm9ybWFsaXplZCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr
KHZhbHVlLCBpbmRleCArIGNvbXBvbmVudEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgY29t
cG9uZW50Qnl0ZU9mZnNldCArPSBjb21wb25lbnRCeXRlTGVuZ3RoOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBieXRlT2Zmc2V0ICs9IGJ5dGVTdHJpZGU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworICAgIFZlcnRleEJ1ZmZlci5fR2V0RmxvYXRWYWx1ZSA9
IGZ1bmN0aW9uIChkYXRhVmlldywgdHlwZSwgYnl0ZU9mZnNldCwgbm9ybWFsaXplZCkgeworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLkJZVEU6
IHsKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBkYXRhVmlldy5nZXRJbnQ4KGJ5dGVPZmZz
ZXQpOworICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlID0gTWF0aC5tYXgodmFsdWUgLyAxMjcsIC0xKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBWZXJ0ZXhCdWZmZXIuVU5TSUdORURfQllURTogeworICAgICAgICAgICAgICAgIHZh
ciB2YWx1ZSA9IGRhdGFWaWV3LmdldFVpbnQ4KGJ5dGVPZmZzZXQpOworICAgICAgICAgICAgICAg
IGlmIChub3JtYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyAy
NTU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLlNIT1JUOiB7CisgICAg
ICAgICAgICAgICAgdmFyIHZhbHVlID0gZGF0YVZpZXcuZ2V0SW50MTYoYnl0ZU9mZnNldCwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBNYXRoLm1heCh2YWx1ZSAvIDMyNzY3LCAtMSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgVmVydGV4QnVmZmVyLlVOU0lHTkVEX1NIT1JUOiB7CisgICAgICAgICAgICAgICAg
dmFyIHZhbHVlID0gZGF0YVZpZXcuZ2V0VWludDE2KGJ5dGVPZmZzZXQsIHRydWUpOworICAgICAg
ICAgICAgICAgIGlmIChub3JtYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0g
dmFsdWUgLyA2NTUzNTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0ZXhCdWZmZXIuSU5U
OiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFWaWV3LmdldEludDMyKGJ5dGVPZmZzZXQs
IHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0ZXhCdWZmZXIuVU5T
SUdORURfSU5UOiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFWaWV3LmdldFVpbnQzMihi
eXRlT2Zmc2V0LCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVydGV4
QnVmZmVyLkZMT0FUOiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFWaWV3LmdldEZsb2F0
MzIoYnl0ZU9mZnNldCwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0
OiB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbXBvbmVudCB0
eXBlICIgKyB0eXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogVGhlIGJ5dGUgdHlwZS4KKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIuQllURSA9
IDUxMjA7CisgICAgLyoqCisgICAgICogVGhlIHVuc2lnbmVkIGJ5dGUgdHlwZS4KKyAgICAgKi8K
KyAgICBWZXJ0ZXhCdWZmZXIuVU5TSUdORURfQllURSA9IDUxMjE7CisgICAgLyoqCisgICAgICog
VGhlIHNob3J0IHR5cGUuCisgICAgICovCisgICAgVmVydGV4QnVmZmVyLlNIT1JUID0gNTEyMjsK
KyAgICAvKioKKyAgICAgKiBUaGUgdW5zaWduZWQgc2hvcnQgdHlwZS4KKyAgICAgKi8KKyAgICBW
ZXJ0ZXhCdWZmZXIuVU5TSUdORURfU0hPUlQgPSA1MTIzOworICAgIC8qKgorICAgICAqIFRoZSBp
bnRlZ2VyIHR5cGUuCisgICAgICovCisgICAgVmVydGV4QnVmZmVyLklOVCA9IDUxMjQ7CisgICAg
LyoqCisgICAgICogVGhlIHVuc2lnbmVkIGludGVnZXIgdHlwZS4KKyAgICAgKi8KKyAgICBWZXJ0
ZXhCdWZmZXIuVU5TSUdORURfSU5UID0gNTEyNTsKKyAgICAvKioKKyAgICAgKiBUaGUgZmxvYXQg
dHlwZS4KKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIuRkxPQVQgPSA1MTI2OworICAgIC8vIEVu
dW1zCisgICAgLyoqCisgICAgICogUG9zaXRpb25zCisgICAgICovCisgICAgVmVydGV4QnVmZmVy
LlBvc2l0aW9uS2luZCA9ICJwb3NpdGlvbiI7CisgICAgLyoqCisgICAgICogTm9ybWFscworICAg
ICAqLworICAgIFZlcnRleEJ1ZmZlci5Ob3JtYWxLaW5kID0gIm5vcm1hbCI7CisgICAgLyoqCisg
ICAgICogVGFuZ2VudHMKKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIuVGFuZ2VudEtpbmQgPSAi
dGFuZ2VudCI7CisgICAgLyoqCisgICAgICogVGV4dHVyZSBjb29yZGluYXRlcworICAgICAqLwor
ICAgIFZlcnRleEJ1ZmZlci5VVktpbmQgPSAidXYiOworICAgIC8qKgorICAgICAqIFRleHR1cmUg
Y29vcmRpbmF0ZXMgMgorICAgICAqLworICAgIFZlcnRleEJ1ZmZlci5VVjJLaW5kID0gInV2MiI7
CisgICAgLyoqCisgICAgICogVGV4dHVyZSBjb29yZGluYXRlcyAzCisgICAgICovCisgICAgVmVy
dGV4QnVmZmVyLlVWM0tpbmQgPSAidXYzIjsKKyAgICAvKioKKyAgICAgKiBUZXh0dXJlIGNvb3Jk
aW5hdGVzIDQKKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIuVVY0S2luZCA9ICJ1djQiOworICAg
IC8qKgorICAgICAqIFRleHR1cmUgY29vcmRpbmF0ZXMgNQorICAgICAqLworICAgIFZlcnRleEJ1
ZmZlci5VVjVLaW5kID0gInV2NSI7CisgICAgLyoqCisgICAgICogVGV4dHVyZSBjb29yZGluYXRl
cyA2CisgICAgICovCisgICAgVmVydGV4QnVmZmVyLlVWNktpbmQgPSAidXY2IjsKKyAgICAvKioK
KyAgICAgKiBDb2xvcnMKKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIuQ29sb3JLaW5kID0gImNv
bG9yIjsKKyAgICAvKioKKyAgICAgKiBNYXRyaXggaW5kaWNlcyAoZm9yIGJvbmVzKQorICAgICAq
LworICAgIFZlcnRleEJ1ZmZlci5NYXRyaWNlc0luZGljZXNLaW5kID0gIm1hdHJpY2VzSW5kaWNl
cyI7CisgICAgLyoqCisgICAgICogTWF0cml4IHdlaWdodHMgKGZvciBib25lcykKKyAgICAgKi8K
KyAgICBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNXZWlnaHRzS2luZCA9ICJtYXRyaWNlc1dlaWdodHMi
OworICAgIC8qKgorICAgICAqIEFkZGl0aW9uYWwgbWF0cml4IGluZGljZXMgKGZvciBib25lcykK
KyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kID0gIm1h
dHJpY2VzSW5kaWNlc0V4dHJhIjsKKyAgICAvKioKKyAgICAgKiBBZGRpdGlvbmFsIG1hdHJpeCB3
ZWlnaHRzIChmb3IgYm9uZXMpCisgICAgICovCisgICAgVmVydGV4QnVmZmVyLk1hdHJpY2VzV2Vp
Z2h0c0V4dHJhS2luZCA9ICJtYXRyaWNlc1dlaWdodHNFeHRyYSI7CisgICAgcmV0dXJuIFZlcnRl
eEJ1ZmZlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL2NzZy50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL2NzZy50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBDU0cgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ1NHIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBDU0c7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2J1ZmZl
ciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01l
c2hlc19zdWJNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvc3ViTWVzaCAqLyAiLi9NZXNoZXMvc3ViTWVzaC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2ggKi8gIi4v
TWVzaGVzL21lc2gudHMiKTsKKworCisKKworLyoqCisgKiBVbmlxdWUgSUQgd2hlbiB3ZSBpbXBv
cnQgbWVzaGVzIGZyb20gQmFieWxvbiB0byBDU0cKKyAqLwordmFyIGN1cnJlbnRDU0dNZXNoSWQg
PSAwOworLyoqCisgKiBSZXByZXNlbnRzIGEgdmVydGV4IG9mIGEgcG9seWdvbi4gVXNlIHlvdXIg
b3duIHZlcnRleCBjbGFzcyBpbnN0ZWFkIG9mIHRoaXMKKyAqIG9uZSB0byBwcm92aWRlIGFkZGl0
aW9uYWwgZmVhdHVyZXMgbGlrZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGFuZCB2ZXJ0ZXgKKyAqIGNv
bG9ycy4gQ3VzdG9tIHZlcnRleCBjbGFzc2VzIG5lZWQgdG8gcHJvdmlkZSBhIGBwb3NgIHByb3Bl
cnR5IGFuZCBgY2xvbmUoKWAsCisgKiBgZmxpcCgpYCwgYW5kIGBpbnRlcnBvbGF0ZSgpYCBtZXRo
b2RzIHRoYXQgYmVoYXZlIGFuYWxvZ291cyB0byB0aGUgb25lcworICogZGVmaW5lZCBieSBgQkFC
WUxPTi5DU0cuVmVydGV4YC4gVGhpcyBjbGFzcyBwcm92aWRlcyBgbm9ybWFsYCBzbyBjb252ZW5p
ZW5jZQorICogZnVuY3Rpb25zIGxpa2UgYEJBQllMT04uQ1NHLnNwaGVyZSgpYCBjYW4gcmV0dXJu
IGEgc21vb3RoIHZlcnRleCBub3JtYWwsIGJ1dCBgbm9ybWFsYAorICogaXMgbm90IHVzZWQgYW55
d2hlcmUgZWxzZS4KKyAqIFNhbWUgZ29lcyBmb3IgdXYsIGl0IGFsbG93cyB0byBrZWVwIHRoZSBv
cmlnaW5hbCB2ZXJ0ZXggdXYgY29vcmRpbmF0ZXMgb2YgdGhlIDIgbWVzaGVzCisgKi8KK3ZhciBW
ZXJ0ZXggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5p
dGlhbGl6ZXMgdGhlIHZlcnRleAorICAgICAqIEBwYXJhbSBwb3MgVGhlIHBvc2l0aW9uIG9mIHRo
ZSB2ZXJ0ZXgKKyAgICAgKiBAcGFyYW0gbm9ybWFsIFRoZSBub3JtYWwgb2YgdGhlIHZlcnRleAor
ICAgICAqIEBwYXJhbSB1diBUaGUgdGV4dHVyZSBjb29yZGluYXRlIG9mIHRoZSB2ZXJ0ZXgKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBWZXJ0ZXgoCisgICAgLyoqCisgICAgICogVGhlIHBvc2l0aW9u
IG9mIHRoZSB2ZXJ0ZXgKKyAgICAgKi8KKyAgICBwb3MsIAorICAgIC8qKgorICAgICAqIFRoZSBu
b3JtYWwgb2YgdGhlIHZlcnRleAorICAgICAqLworICAgIG5vcm1hbCwgCisgICAgLyoqCisgICAg
ICogVGhlIHRleHR1cmUgY29vcmRpbmF0ZSBvZiB0aGUgdmVydGV4CisgICAgICovCisgICAgdXYp
IHsKKyAgICAgICAgdGhpcy5wb3MgPSBwb3M7CisgICAgICAgIHRoaXMubm9ybWFsID0gbm9ybWFs
OworICAgICAgICB0aGlzLnV2ID0gdXY7CisgICAgfQorICAgIC8qKgorICAgICAqIE1ha2UgYSBj
bG9uZSwgb3IgZGVlcCBjb3B5LCBvZiB0aGUgdmVydGV4CisgICAgICogQHJldHVybnMgQSBuZXcg
VmVydGV4CisgICAgICovCisgICAgVmVydGV4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBWZXJ0ZXgodGhpcy5wb3MuY2xvbmUoKSwgdGhpcy5ub3Jt
YWwuY2xvbmUoKSwgdGhpcy51di5jbG9uZSgpKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIElu
dmVydCBhbGwgb3JpZW50YXRpb24tc3BlY2lmaWMgZGF0YSAoZS5nLiB2ZXJ0ZXggbm9ybWFsKS4g
Q2FsbGVkIHdoZW4gdGhlCisgICAgICogb3JpZW50YXRpb24gb2YgYSBwb2x5Z29uIGlzIGZsaXBw
ZWQuCisgICAgICovCisgICAgVmVydGV4LnByb3RvdHlwZS5mbGlwID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB0aGlzLm5vcm1hbCA9IHRoaXMubm9ybWFsLnNjYWxlKC0xKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyB2ZXJ0ZXggYmV0d2VlbiB0aGlzIHZlcnRleCBhbmQg
YG90aGVyYCBieSBsaW5lYXJseQorICAgICAqIGludGVycG9sYXRpbmcgYWxsIHByb3BlcnRpZXMg
dXNpbmcgYSBwYXJhbWV0ZXIgb2YgYHRgLiBTdWJjbGFzc2VzIHNob3VsZAorICAgICAqIG92ZXJy
aWRlIHRoaXMgdG8gaW50ZXJwb2xhdGUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzLgorICAgICAqIEBw
YXJhbSBvdGhlciB0aGUgdmVydGV4IHRvIGludGVycG9sYXRlIGFnYWluc3QKKyAgICAgKiBAcGFy
YW0gdCBUaGUgZmFjdG9yIHVzZWQgdG8gbGluZWFybHkgaW50ZXJwb2xhdGUgYmV0d2VlbiB0aGUg
dmVydGljZXMKKyAgICAgKi8KKyAgICBWZXJ0ZXgucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVu
Y3Rpb24gKG90aGVyLCB0KSB7CisgICAgICAgIHJldHVybiBuZXcgVmVydGV4KF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uTGVycCh0aGlz
LnBvcywgb3RoZXIucG9zLCB0KSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5MZXJwKHRoaXMubm9ybWFsLCBvdGhlci5ub3JtYWwsIHQp
LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MiJdLkxlcnAodGhpcy51diwgb3RoZXIudXYsIHQpKTsKKyAgICB9OworICAgIHJldHVybiBWZXJ0
ZXg7Cit9KCkpOworLyoqCisgKiBSZXByZXNlbnRzIGEgcGxhbmUgaW4gM0Qgc3BhY2UuCisgKi8K
K3ZhciBQbGFuZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBJbml0aWFsaXplcyB0aGUgcGxhbmUKKyAgICAgKiBAcGFyYW0gbm9ybWFsIFRoZSBub3JtYWwg
Zm9yIHRoZSBwbGFuZQorICAgICAqIEBwYXJhbSB3CisgICAgICovCisgICAgZnVuY3Rpb24gUGxh
bmUobm9ybWFsLCB3KSB7CisgICAgICAgIHRoaXMubm9ybWFsID0gbm9ybWFsOworICAgICAgICB0
aGlzLncgPSB3OworICAgIH0KKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBwbGFuZSBmcm9t
IHRocmVlIHBvaW50cworICAgICAqIEBwYXJhbSBhIFBvaW50IGEKKyAgICAgKiBAcGFyYW0gYiBQ
b2ludCBiCisgICAgICogQHBhcmFtIGMgUG9pbnQgYworICAgICAqLworICAgIFBsYW5lLkZyb21Q
b2ludHMgPSBmdW5jdGlvbiAoYSwgYiwgYykgeworICAgICAgICB2YXIgdjAgPSBjLnN1YnRyYWN0
KGEpOworICAgICAgICB2YXIgdjEgPSBiLnN1YnRyYWN0KGEpOworICAgICAgICBpZiAodjAubGVu
Z3RoU3F1YXJlZCgpID09PSAwIHx8IHYxLmxlbmd0aFNxdWFyZWQoKSA9PT0gMCkgeworICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG4gPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLk5vcm1hbGl6
ZShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdLkNyb3NzKHYwLCB2MSkpOworICAgICAgICByZXR1cm4gbmV3IFBsYW5lKG4sIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KG4s
IGEpKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lLCBvciBtYWtlIGEgZGVlcCBjb3B5
IG9mIHRoZSBwbGFuZQorICAgICAqIEByZXR1cm5zIGEgbmV3IFBsYW5lCisgICAgICovCisgICAg
UGxhbmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3
IFBsYW5lKHRoaXMubm9ybWFsLmNsb25lKCksIHRoaXMudyk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBGbGlwIHRoZSBmYWNlIG9mIHRoZSBwbGFuZQorICAgICAqLworICAgIFBsYW5lLnByb3Rv
dHlwZS5mbGlwID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLm5vcm1hbC5zY2FsZUluUGxh
Y2UoLTEpOworICAgICAgICB0aGlzLncgPSAtdGhpcy53OworICAgIH07CisgICAgLyoqCisgICAg
ICogU3BsaXQgYHBvbHlnb25gIGJ5IHRoaXMgcGxhbmUgaWYgbmVlZGVkLCB0aGVuIHB1dCB0aGUg
cG9seWdvbiBvciBwb2x5Z29uCisgICAgICogZnJhZ21lbnRzIGluIHRoZSBhcHByb3ByaWF0ZSBs
aXN0cy4gQ29wbGFuYXIgcG9seWdvbnMgZ28gaW50byBlaXRoZXIKKyAgICBgKiBjb3BsYW5hckZy
b250YCBvciBgY29wbGFuYXJCYWNrYCBkZXBlbmRpbmcgb24gdGhlaXIgb3JpZW50YXRpb24gd2l0
aAorICAgICAqIHJlc3BlY3QgdG8gdGhpcyBwbGFuZS4gUG9seWdvbnMgaW4gZnJvbnQgb3IgaW4g
YmFjayBvZiB0aGlzIHBsYW5lIGdvIGludG8KKyAgICAgKiBlaXRoZXIgYGZyb250YCBvciBgYmFj
a2AKKyAgICAgKiBAcGFyYW0gcG9seWdvbiBUaGUgcG9seWdvbiB0byBiZSBzcGxpdAorICAgICAq
IEBwYXJhbSBjb3BsYW5hckZyb250IFdpbGwgY29udGFpbiBwb2x5Z29ucyBjb3BsYW5hciB3aXRo
IHRoZSBwbGFuZSB0aGF0IGFyZSBvcmllbnRlZCB0byB0aGUgZnJvbnQgb2YgdGhlIHBsYW5lCisg
ICAgICogQHBhcmFtIGNvcGxhbmFyQmFjayBXaWxsIGNvbnRhaW4gcG9seWdvbnMgY29wbGFuYXIg
d2l0aCB0aGUgcGxhbmUgdGhhdCBhcmUgb3JpZW50ZWQgdG8gdGhlIGJhY2sgb2YgdGhlIHBsYW5l
CisgICAgICogQHBhcmFtIGZyb250IFdpbGwgY29udGFpbiB0aGUgcG9seWdvbnMgaW4gZnJvbnQg
b2YgdGhlIHBsYW5lCisgICAgICogQHBhcmFtIGJhY2sgV2lsbCBjb250YWluIHRoZSBwb2x5Z29u
cyBiZWdpbmQgdGhlIHBsYW5lCisgICAgICovCisgICAgUGxhbmUucHJvdG90eXBlLnNwbGl0UG9s
eWdvbiA9IGZ1bmN0aW9uIChwb2x5Z29uLCBjb3BsYW5hckZyb250LCBjb3BsYW5hckJhY2ssIGZy
b250LCBiYWNrKSB7CisgICAgICAgIHZhciBDT1BMQU5BUiA9IDA7CisgICAgICAgIHZhciBGUk9O
VCA9IDE7CisgICAgICAgIHZhciBCQUNLID0gMjsKKyAgICAgICAgdmFyIFNQQU5OSU5HID0gMzsK
KyAgICAgICAgLy8gQ2xhc3NpZnkgZWFjaCBwb2ludCBhcyB3ZWxsIGFzIHRoZSBlbnRpcmUgcG9s
eWdvbiBpbnRvIG9uZSBvZiB0aGUgYWJvdmUKKyAgICAgICAgLy8gZm91ciBjbGFzc2VzLgorICAg
ICAgICB2YXIgcG9seWdvblR5cGUgPSAwOworICAgICAgICB2YXIgdHlwZXMgPSBbXTsKKyAgICAg
ICAgdmFyIGk7CisgICAgICAgIHZhciB0OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG9seWdv
bi52ZXJ0aWNlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdCA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KHRoaXMubm9y
bWFsLCBwb2x5Z29uLnZlcnRpY2VzW2ldLnBvcykgLSB0aGlzLnc7CisgICAgICAgICAgICB2YXIg
dHlwZSA9ICh0IDwgLVBsYW5lLkVQU0lMT04pID8gQkFDSyA6ICh0ID4gUGxhbmUuRVBTSUxPTikg
PyBGUk9OVCA6IENPUExBTkFSOworICAgICAgICAgICAgcG9seWdvblR5cGUgfD0gdHlwZTsKKyAg
ICAgICAgICAgIHR5cGVzLnB1c2godHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUHV0IHRo
ZSBwb2x5Z29uIGluIHRoZSBjb3JyZWN0IGxpc3QsIHNwbGl0dGluZyBpdCB3aGVuIG5lY2Vzc2Fy
eQorICAgICAgICBzd2l0Y2ggKHBvbHlnb25UeXBlKSB7CisgICAgICAgICAgICBjYXNlIENPUExB
TkFSOgorICAgICAgICAgICAgICAgIChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdCh0aGlzLm5vcm1hbCwgcG9seWdvbi5wbGFuZS5u
b3JtYWwpID4gMCA/IGNvcGxhbmFyRnJvbnQgOiBjb3BsYW5hckJhY2spLnB1c2gocG9seWdvbik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZST05UOgorICAgICAg
ICAgICAgICAgIGZyb250LnB1c2gocG9seWdvbik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEJBQ0s6CisgICAgICAgICAgICAgICAgYmFjay5wdXNoKHBvbHlnb24p
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTUEFOTklORzoKKyAg
ICAgICAgICAgICAgICB2YXIgZiA9IFtdLCBiID0gW107CisgICAgICAgICAgICAgICAgZm9yIChp
ID0gMDsgaSA8IHBvbHlnb24udmVydGljZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGogPSAoaSArIDEpICUgcG9seWdvbi52ZXJ0aWNlcy5sZW5ndGg7CisgICAgICAg
ICAgICAgICAgICAgIHZhciB0aSA9IHR5cGVzW2ldLCB0aiA9IHR5cGVzW2pdOworICAgICAgICAg
ICAgICAgICAgICB2YXIgdmkgPSBwb2x5Z29uLnZlcnRpY2VzW2ldLCB2aiA9IHBvbHlnb24udmVy
dGljZXNbal07CisgICAgICAgICAgICAgICAgICAgIGlmICh0aSAhPT0gQkFDSykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZi5wdXNoKHZpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAodGkgIT09IEZST05UKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBiLnB1c2godGkgIT09IEJBQ0sgPyB2aS5jbG9uZSgpIDogdmkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgodGkgfCB0aikgPT09IFNQQU5OSU5H
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHRoaXMudyAtIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KHRoaXMubm9y
bWFsLCB2aS5wb3MpKSAvIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0uRG90KHRoaXMubm9ybWFsLCB2ai5wb3Muc3VidHJhY3QodmkucG9z
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IHZpLmludGVycG9sYXRlKHZqLCB0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGYucHVzaCh2KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGIucHVzaCh2LmNsb25lKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBwb2x5OworICAgICAgICAgICAgICAgIGlm
IChmLmxlbmd0aCA+PSAzKSB7CisgICAgICAgICAgICAgICAgICAgIHBvbHkgPSBuZXcgUG9seWdv
bihmLCBwb2x5Z29uLnNoYXJlZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb2x5LnBsYW5l
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcm9udC5wdXNoKHBvbHkpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChiLmxl
bmd0aCA+PSAzKSB7CisgICAgICAgICAgICAgICAgICAgIHBvbHkgPSBuZXcgUG9seWdvbihiLCBw
b2x5Z29uLnNoYXJlZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb2x5LnBsYW5lKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBiYWNrLnB1c2gocG9seSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIGBDU0cuUGxhbmUuRVBTSUxPTmAgaXMgdGhlIHRv
bGVyYW5jZSB1c2VkIGJ5IGBzcGxpdFBvbHlnb24oKWAgdG8gZGVjaWRlIGlmIGEKKyAgICAgKiBw
b2ludCBpcyBvbiB0aGUgcGxhbmUKKyAgICAgKi8KKyAgICBQbGFuZS5FUFNJTE9OID0gMWUtNTsK
KyAgICByZXR1cm4gUGxhbmU7Cit9KCkpOworLyoqCisgKiBSZXByZXNlbnRzIGEgY29udmV4IHBv
bHlnb24uIFRoZSB2ZXJ0aWNlcyB1c2VkIHRvIGluaXRpYWxpemUgYSBwb2x5Z29uIG11c3QKKyAq
IGJlIGNvcGxhbmFyIGFuZCBmb3JtIGEgY29udmV4IGxvb3AuCisgKgorICogRWFjaCBjb252ZXgg
cG9seWdvbiBoYXMgYSBgc2hhcmVkYCBwcm9wZXJ0eSwgd2hpY2ggaXMgc2hhcmVkIGJldHdlZW4g
YWxsCisgKiBwb2x5Z29ucyB0aGF0IGFyZSBjbG9uZXMgb2YgZWFjaCBvdGhlciBvciB3ZXJlIHNw
bGl0IGZyb20gdGhlIHNhbWUgcG9seWdvbi4KKyAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGVmaW5l
IHBlci1wb2x5Z29uIHByb3BlcnRpZXMgKHN1Y2ggYXMgc3VyZmFjZSBjb2xvcikKKyAqLwordmFy
IFBvbHlnb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICog
SW5pdGlhbGl6ZXMgdGhlIHBvbHlnb24KKyAgICAgKiBAcGFyYW0gdmVydGljZXMgVGhlIHZlcnRp
Y2VzIG9mIHRoZSBwb2x5Z29uCisgICAgICogQHBhcmFtIHNoYXJlZCBUaGUgcHJvcGVydGllcyBz
aGFyZWQgYWNyb3NzIGFsbCBwb2x5Z29ucworICAgICAqLworICAgIGZ1bmN0aW9uIFBvbHlnb24o
dmVydGljZXMsIHNoYXJlZCkgeworICAgICAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXM7Cisg
ICAgICAgIHRoaXMuc2hhcmVkID0gc2hhcmVkOworICAgICAgICB0aGlzLnBsYW5lID0gUGxhbmUu
RnJvbVBvaW50cyh2ZXJ0aWNlc1swXS5wb3MsIHZlcnRpY2VzWzFdLnBvcywgdmVydGljZXNbMl0u
cG9zKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQ2xvbmVzLCBvciBtYWtlcyBhIGRlZXAgY29w
eSwgb3IgdGhlIHBvbHlnb24KKyAgICAgKi8KKyAgICBQb2x5Z29uLnByb3RvdHlwZS5jbG9uZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcy5tYXAo
ZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYuY2xvbmUoKTsgfSk7CisgICAgICAgIHJldHVybiBuZXcg
UG9seWdvbih2ZXJ0aWNlcywgdGhpcy5zaGFyZWQpOworICAgIH07CisgICAgLyoqCisgICAgICog
RmxpcHMgdGhlIGZhY2VzIG9mIHRoZSBwb2x5Z29uCisgICAgICovCisgICAgUG9seWdvbi5wcm90
b3R5cGUuZmxpcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy52ZXJ0aWNlcy5yZXZlcnNl
KCkubWFwKGZ1bmN0aW9uICh2KSB7IHYuZmxpcCgpOyB9KTsKKyAgICAgICAgdGhpcy5wbGFuZS5m
bGlwKCk7CisgICAgfTsKKyAgICByZXR1cm4gUG9seWdvbjsKK30oKSk7CisvKioKKyAqIEhvbGRz
IGEgbm9kZSBpbiBhIEJTUCB0cmVlLiBBIEJTUCB0cmVlIGlzIGJ1aWx0IGZyb20gYSBjb2xsZWN0
aW9uIG9mIHBvbHlnb25zCisgKiBieSBwaWNraW5nIGEgcG9seWdvbiB0byBzcGxpdCBhbG9uZy4g
VGhhdCBwb2x5Z29uIChhbmQgYWxsIG90aGVyIGNvcGxhbmFyCisgKiBwb2x5Z29ucykgYXJlIGFk
ZGVkIGRpcmVjdGx5IHRvIHRoYXQgbm9kZSBhbmQgdGhlIG90aGVyIHBvbHlnb25zIGFyZSBhZGRl
ZCB0bworICogdGhlIGZyb250IGFuZC9vciBiYWNrIHN1YnRyZWVzLiBUaGlzIGlzIG5vdCBhIGxl
YWZ5IEJTUCB0cmVlIHNpbmNlIHRoZXJlIGlzCisgKiBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIGlu
dGVybmFsIGFuZCBsZWFmIG5vZGVzCisgKi8KK3ZhciBOb2RlID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBub2RlCisgICAgICog
QHBhcmFtIHBvbHlnb25zIEEgY29sbGVjdGlvbiBvZiBwb2x5Z29ucyBoZWxkIGluIHRoZSBub2Rl
CisgICAgICovCisgICAgZnVuY3Rpb24gTm9kZShwb2x5Z29ucykgeworICAgICAgICB0aGlzLnBs
YW5lID0gbnVsbDsKKyAgICAgICAgdGhpcy5mcm9udCA9IG51bGw7CisgICAgICAgIHRoaXMuYmFj
ayA9IG51bGw7CisgICAgICAgIHRoaXMucG9seWdvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAg
aWYgKHBvbHlnb25zKSB7CisgICAgICAgICAgICB0aGlzLmJ1aWxkKHBvbHlnb25zKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBDbG9uZXMsIG9yIG1ha2VzIGEgZGVlcCBjb3B5
LCBvZiB0aGUgbm9kZQorICAgICAqIEByZXR1cm5zIFRoZSBjbG9uZWQgbm9kZQorICAgICAqLwor
ICAgIE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbm9k
ZSA9IG5ldyBOb2RlKCk7CisgICAgICAgIG5vZGUucGxhbmUgPSB0aGlzLnBsYW5lICYmIHRoaXMu
cGxhbmUuY2xvbmUoKTsKKyAgICAgICAgbm9kZS5mcm9udCA9IHRoaXMuZnJvbnQgJiYgdGhpcy5m
cm9udC5jbG9uZSgpOworICAgICAgICBub2RlLmJhY2sgPSB0aGlzLmJhY2sgJiYgdGhpcy5iYWNr
LmNsb25lKCk7CisgICAgICAgIG5vZGUucG9seWdvbnMgPSB0aGlzLnBvbHlnb25zLm1hcChmdW5j
dGlvbiAocCkgeyByZXR1cm4gcC5jbG9uZSgpOyB9KTsKKyAgICAgICAgcmV0dXJuIG5vZGU7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IHNvbGlkIHNwYWNlIHRvIGVtcHR5IHNwYWNl
IGFuZCBlbXB0eSBzcGFjZSB0byBzb2xpZCBzcGFjZQorICAgICAqLworICAgIE5vZGUucHJvdG90
eXBlLmludmVydCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLnBvbHlnb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnBvbHlnb25zW2ld
LmZsaXAoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5wbGFuZSkgeworICAgICAgICAg
ICAgdGhpcy5wbGFuZS5mbGlwKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuZnJvbnQp
IHsKKyAgICAgICAgICAgIHRoaXMuZnJvbnQuaW52ZXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuYmFjaykgeworICAgICAgICAgICAgdGhpcy5iYWNrLmludmVydCgpOworICAgICAg
ICB9CisgICAgICAgIHZhciB0ZW1wID0gdGhpcy5mcm9udDsKKyAgICAgICAgdGhpcy5mcm9udCA9
IHRoaXMuYmFjazsKKyAgICAgICAgdGhpcy5iYWNrID0gdGVtcDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJlY3Vyc2l2ZWx5IHJlbW92ZSBhbGwgcG9seWdvbnMgaW4gYHBvbHlnb25zYCB0aGF0
IGFyZSBpbnNpZGUgdGhpcyBCU1AKKyAgICAgKiB0cmVlLgorICAgICAqIEBwYXJhbSBwb2x5Z29u
cyBQb2x5Z29ucyB0byByZW1vdmUgZnJvbSB0aGUgQlNQCisgICAgICogQHJldHVybnMgUG9seWdv
bnMgY2xpcHBlZCBmcm9tIHRoZSBCU1AKKyAgICAgKi8KKyAgICBOb2RlLnByb3RvdHlwZS5jbGlw
UG9seWdvbnMgPSBmdW5jdGlvbiAocG9seWdvbnMpIHsKKyAgICAgICAgaWYgKCF0aGlzLnBsYW5l
KSB7CisgICAgICAgICAgICByZXR1cm4gcG9seWdvbnMuc2xpY2UoKTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgZnJvbnQgPSBuZXcgQXJyYXkoKSwgYmFjayA9IG5ldyBBcnJheSgpOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHBvbHlnb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICB0aGlzLnBsYW5lLnNwbGl0UG9seWdvbihwb2x5Z29uc1tpXSwgZnJvbnQsIGJhY2ssIGZyb250
LCBiYWNrKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5mcm9udCkgeworICAgICAgICAg
ICAgZnJvbnQgPSB0aGlzLmZyb250LmNsaXBQb2x5Z29ucyhmcm9udCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuYmFjaykgeworICAgICAgICAgICAgYmFjayA9IHRoaXMuYmFjay5jbGlw
UG9seWdvbnMoYmFjayk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBi
YWNrID0gW107CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZyb250LmNvbmNhdChiYWNrKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhbGwgcG9seWdvbnMgaW4gdGhpcyBCU1Ag
dHJlZSB0aGF0IGFyZSBpbnNpZGUgdGhlIG90aGVyIEJTUCB0cmVlCisgICAgICogYGJzcGAuCisg
ICAgICogQHBhcmFtIGJzcCBCU1AgY29udGFpbmluZyBwb2x5Z29ucyB0byByZW1vdmUgZnJvbSB0
aGlzIEJTUAorICAgICAqLworICAgIE5vZGUucHJvdG90eXBlLmNsaXBUbyA9IGZ1bmN0aW9uIChi
c3ApIHsKKyAgICAgICAgdGhpcy5wb2x5Z29ucyA9IGJzcC5jbGlwUG9seWdvbnModGhpcy5wb2x5
Z29ucyk7CisgICAgICAgIGlmICh0aGlzLmZyb250KSB7CisgICAgICAgICAgICB0aGlzLmZyb250
LmNsaXBUbyhic3ApOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmJhY2spIHsKKyAgICAg
ICAgICAgIHRoaXMuYmFjay5jbGlwVG8oYnNwKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogUmV0dXJuIGEgbGlzdCBvZiBhbGwgcG9seWdvbnMgaW4gdGhpcyBCU1AgdHJlZQor
ICAgICAqIEByZXR1cm5zIExpc3Qgb2YgYWxsIHBvbHlnb25zIGluIHRoaXMgQlNQIHRyZWUKKyAg
ICAgKi8KKyAgICBOb2RlLnByb3RvdHlwZS5hbGxQb2x5Z29ucyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHBvbHlnb25zID0gdGhpcy5wb2x5Z29ucy5zbGljZSgpOworICAgICAgICBpZiAo
dGhpcy5mcm9udCkgeworICAgICAgICAgICAgcG9seWdvbnMgPSBwb2x5Z29ucy5jb25jYXQodGhp
cy5mcm9udC5hbGxQb2x5Z29ucygpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5iYWNr
KSB7CisgICAgICAgICAgICBwb2x5Z29ucyA9IHBvbHlnb25zLmNvbmNhdCh0aGlzLmJhY2suYWxs
UG9seWdvbnMoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBvbHlnb25zOworICAgIH07
CisgICAgLyoqCisgICAgICogQnVpbGQgYSBCU1AgdHJlZSBvdXQgb2YgYHBvbHlnb25zYC4gV2hl
biBjYWxsZWQgb24gYW4gZXhpc3RpbmcgdHJlZSwgdGhlCisgICAgICogbmV3IHBvbHlnb25zIGFy
ZSBmaWx0ZXJlZCBkb3duIHRvIHRoZSBib3R0b20gb2YgdGhlIHRyZWUgYW5kIGJlY29tZSBuZXcK
KyAgICAgKiBub2RlcyB0aGVyZS4gRWFjaCBzZXQgb2YgcG9seWdvbnMgaXMgcGFydGl0aW9uZWQg
dXNpbmcgdGhlIGZpcnN0IHBvbHlnb24KKyAgICAgKiAobm8gaGV1cmlzdGljIGlzIHVzZWQgdG8g
cGljayBhIGdvb2Qgc3BsaXQpCisgICAgICogQHBhcmFtIHBvbHlnb25zIFBvbHlnb25zIHVzZWQg
dG8gY29uc3RydWN0IHRoZSBCU1AgdHJlZQorICAgICAqLworICAgIE5vZGUucHJvdG90eXBlLmJ1
aWxkID0gZnVuY3Rpb24gKHBvbHlnb25zKSB7CisgICAgICAgIGlmICghcG9seWdvbnMubGVuZ3Ro
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnBs
YW5lKSB7CisgICAgICAgICAgICB0aGlzLnBsYW5lID0gcG9seWdvbnNbMF0ucGxhbmUuY2xvbmUo
KTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZnJvbnQgPSBuZXcgQXJyYXkoKSwgYmFjayA9IG5l
dyBBcnJheSgpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvbHlnb25zLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICB0aGlzLnBsYW5lLnNwbGl0UG9seWdvbihwb2x5Z29uc1tpXSwg
dGhpcy5wb2x5Z29ucywgdGhpcy5wb2x5Z29ucywgZnJvbnQsIGJhY2spOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmcm9udC5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5mcm9udCkg
eworICAgICAgICAgICAgICAgIHRoaXMuZnJvbnQgPSBuZXcgTm9kZSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5mcm9udC5idWlsZChmcm9udCk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGJhY2subGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuYmFjaykgeworICAg
ICAgICAgICAgICAgIHRoaXMuYmFjayA9IG5ldyBOb2RlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLmJhY2suYnVpbGQoYmFjayk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJl
dHVybiBOb2RlOworfSgpKTsKKy8qKgorICogQ2xhc3MgZm9yIGJ1aWxkaW5nIENvbnN0cnVjdGl2
ZSBTb2xpZCBHZW9tZXRyeQorICovCit2YXIgQ1NHID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KCkgeworICAgIGZ1bmN0aW9uIENTRygpIHsKKyAgICAgICAgdGhpcy5wb2x5Z29ucyA9IG5ldyBB
cnJheSgpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IHRoZSBNZXNoIHRvIENTRwor
ICAgICAqIEBwYXJhbSBtZXNoIFRoZSBNZXNoIHRvIGNvbnZlcnQgdG8gQ1NHCisgICAgICogQHJl
dHVybnMgQSBuZXcgQ1NHIGZyb20gdGhlIE1lc2gKKyAgICAgKi8KKyAgICBDU0cuRnJvbU1lc2gg
PSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICB2YXIgdmVydGV4LCBub3JtYWwsIHV2LCBwb3Np
dGlvbiwgcG9seWdvbiwgcG9seWdvbnMgPSBuZXcgQXJyYXkoKSwgdmVydGljZXM7CisgICAgICAg
IHZhciBtYXRyaXgsIG1lc2hQb3NpdGlvbiwgbWVzaFJvdGF0aW9uLCBtZXNoUm90YXRpb25RdWF0
ZXJuaW9uID0gbnVsbCwgbWVzaFNjYWxpbmc7CisgICAgICAgIGlmIChtZXNoIGluc3RhbmNlb2Yg
X01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1lc2giXSkgeworICAg
ICAgICAgICAgbWVzaC5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgICAgICBtYXRy
aXggPSBtZXNoLmdldFdvcmxkTWF0cml4KCk7CisgICAgICAgICAgICBtZXNoUG9zaXRpb24gPSBt
ZXNoLnBvc2l0aW9uLmNsb25lKCk7CisgICAgICAgICAgICBtZXNoUm90YXRpb24gPSBtZXNoLnJv
dGF0aW9uLmNsb25lKCk7CisgICAgICAgICAgICBpZiAobWVzaC5yb3RhdGlvblF1YXRlcm5pb24p
IHsKKyAgICAgICAgICAgICAgICBtZXNoUm90YXRpb25RdWF0ZXJuaW9uID0gbWVzaC5yb3RhdGlv
blF1YXRlcm5pb24uY2xvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lc2hTY2Fs
aW5nID0gbWVzaC5zY2FsaW5nLmNsb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICB0aHJvdyAnQkFCWUxPTi5DU0c6IFdyb25nIE1lc2ggdHlwZSwgbXVzdCBiZSBC
QUJZTE9OLk1lc2gnOworICAgICAgICB9CisgICAgICAgIHZhciBpbmRpY2VzID0gbWVzaC5nZXRJ
bmRpY2VzKCksIHBvc2l0aW9ucyA9IG1lc2guZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2lu
ZCksIG5vcm1hbHMgPSBtZXNoLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKSwgdXZzID0g
bWVzaC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kKTsKKyAgICAgICAgdmFyIHN1Yk1lc2hlcyA9
IG1lc2guc3ViTWVzaGVzOworICAgICAgICBmb3IgKHZhciBzbSA9IDAsIHNtbCA9IHN1Yk1lc2hl
cy5sZW5ndGg7IHNtIDwgc21sOyBzbSsrKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gc3Vi
TWVzaGVzW3NtXS5pbmRleFN0YXJ0LCBpbCA9IHN1Yk1lc2hlc1tzbV0uaW5kZXhDb3VudCArIHN1
Yk1lc2hlc1tzbV0uaW5kZXhTdGFydDsgaSA8IGlsOyBpICs9IDMpIHsKKyAgICAgICAgICAgICAg
ICB2ZXJ0aWNlcyA9IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsg
aisrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VOb3JtYWwgPSBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShub3Jt
YWxzW2luZGljZXNbaSArIGpdICogM10sIG5vcm1hbHNbaW5kaWNlc1tpICsgal0gKiAzICsgMV0s
IG5vcm1hbHNbaW5kaWNlc1tpICsgal0gKiAzICsgMl0pOworICAgICAgICAgICAgICAgICAgICB1
diA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMiJdKHV2c1tpbmRpY2VzW2kgKyBqXSAqIDJdLCB1dnNbaW5kaWNlc1tpICsgal0gKiAy
ICsgMV0pOworICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlUG9zaXRpb24gPSBuZXcgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShw
b3NpdGlvbnNbaW5kaWNlc1tpICsgal0gKiAzXSwgcG9zaXRpb25zW2luZGljZXNbaSArIGpdICog
MyArIDFdLCBwb3NpdGlvbnNbaW5kaWNlc1tpICsgal0gKiAzICsgMl0pOworICAgICAgICAgICAg
ICAgICAgICBwb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXMoc291cmNlUG9zaXRpb24s
IG1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgIG5vcm1hbCA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFs
KHNvdXJjZU5vcm1hbCwgbWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4ID0gbmV3
IFZlcnRleChwb3NpdGlvbiwgbm9ybWFsLCB1dik7CisgICAgICAgICAgICAgICAgICAgIHZlcnRp
Y2VzLnB1c2godmVydGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcG9s
eWdvbiA9IG5ldyBQb2x5Z29uKHZlcnRpY2VzLCB7IHN1Yk1lc2hJZDogc20sIG1lc2hJZDogY3Vy
cmVudENTR01lc2hJZCwgbWF0ZXJpYWxJbmRleDogc3ViTWVzaGVzW3NtXS5tYXRlcmlhbEluZGV4
IH0pOworICAgICAgICAgICAgICAgIC8vIFRvIGhhbmRsZSB0aGUgY2FzZSBvZiBkZWdlbmVyYXRl
ZCB0cmlhbmdsZQorICAgICAgICAgICAgICAgIC8vIHBvbHlnb24ucGxhbmUgPT0gbnVsbCA8PT4g
dGhlIHBvbHlnb24gZG9lcyBub3QgcmVwcmVzZW50IDEgc2luZ2xlIHBsYW5lIDw9PiB0aGUgdHJp
YW5nbGUgaXMgZGVnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICBpZiAocG9seWdvbi5wbGFuZSkg
eworICAgICAgICAgICAgICAgICAgICBwb2x5Z29ucy5wdXNoKHBvbHlnb24pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgY3NnID0gQ1NH
LkZyb21Qb2x5Z29ucyhwb2x5Z29ucyk7CisgICAgICAgIGNzZy5tYXRyaXggPSBtYXRyaXg7Cisg
ICAgICAgIGNzZy5wb3NpdGlvbiA9IG1lc2hQb3NpdGlvbjsKKyAgICAgICAgY3NnLnJvdGF0aW9u
ID0gbWVzaFJvdGF0aW9uOworICAgICAgICBjc2cuc2NhbGluZyA9IG1lc2hTY2FsaW5nOworICAg
ICAgICBjc2cucm90YXRpb25RdWF0ZXJuaW9uID0gbWVzaFJvdGF0aW9uUXVhdGVybmlvbjsKKyAg
ICAgICAgY3VycmVudENTR01lc2hJZCsrOworICAgICAgICByZXR1cm4gY3NnOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgQ1NHIHNvbGlkIGZyb20gYSBsaXN0IG9mIGBDU0cu
UG9seWdvbmAgaW5zdGFuY2VzLgorICAgICAqIEBwYXJhbSBwb2x5Z29ucyBQb2x5Z29ucyB1c2Vk
IHRvIGNvbnN0cnVjdCBhIENTRyBzb2xpZAorICAgICAqLworICAgIENTRy5Gcm9tUG9seWdvbnMg
PSBmdW5jdGlvbiAocG9seWdvbnMpIHsKKyAgICAgICAgdmFyIGNzZyA9IG5ldyBDU0coKTsKKyAg
ICAgICAgY3NnLnBvbHlnb25zID0gcG9seWdvbnM7CisgICAgICAgIHJldHVybiBjc2c7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBDbG9uZXMsIG9yIG1ha2VzIGEgZGVlcCBjb3B5LCBvZiB0aGUg
Q1NHCisgICAgICogQHJldHVybnMgQSBuZXcgQ1NHCisgICAgICovCisgICAgQ1NHLnByb3RvdHlw
ZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGNzZyA9IG5ldyBDU0coKTsKKyAg
ICAgICAgY3NnLnBvbHlnb25zID0gdGhpcy5wb2x5Z29ucy5tYXAoZnVuY3Rpb24gKHApIHsgcmV0
dXJuIHAuY2xvbmUoKTsgfSk7CisgICAgICAgIGNzZy5jb3B5VHJhbnNmb3JtQXR0cmlidXRlcyh0
aGlzKTsKKyAgICAgICAgcmV0dXJuIGNzZzsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVuaW9u
cyB0aGlzIENTRyB3aXRoIGFub3RoZXIgQ1NHCisgICAgICogQHBhcmFtIGNzZyBUaGUgQ1NHIHRv
IHVuaW9uIGFnYWluc3QgdGhpcyBDU0cKKyAgICAgKiBAcmV0dXJucyBUaGUgdW5pb25lZCBDU0cK
KyAgICAgKi8KKyAgICBDU0cucHJvdG90eXBlLnVuaW9uID0gZnVuY3Rpb24gKGNzZykgeworICAg
ICAgICB2YXIgYSA9IG5ldyBOb2RlKHRoaXMuY2xvbmUoKS5wb2x5Z29ucyk7CisgICAgICAgIHZh
ciBiID0gbmV3IE5vZGUoY3NnLmNsb25lKCkucG9seWdvbnMpOworICAgICAgICBhLmNsaXBUbyhi
KTsKKyAgICAgICAgYi5jbGlwVG8oYSk7CisgICAgICAgIGIuaW52ZXJ0KCk7CisgICAgICAgIGIu
Y2xpcFRvKGEpOworICAgICAgICBiLmludmVydCgpOworICAgICAgICBhLmJ1aWxkKGIuYWxsUG9s
eWdvbnMoKSk7CisgICAgICAgIHJldHVybiBDU0cuRnJvbVBvbHlnb25zKGEuYWxsUG9seWdvbnMo
KSkuY29weVRyYW5zZm9ybUF0dHJpYnV0ZXModGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBVbmlvbnMgdGhpcyBDU0cgd2l0aCBhbm90aGVyIENTRyBpbiBwbGFjZQorICAgICAqIEBwYXJh
bSBjc2cgVGhlIENTRyB0byB1bmlvbiBhZ2FpbnN0IHRoaXMgQ1NHCisgICAgICovCisgICAgQ1NH
LnByb3RvdHlwZS51bmlvbkluUGxhY2UgPSBmdW5jdGlvbiAoY3NnKSB7CisgICAgICAgIHZhciBh
ID0gbmV3IE5vZGUodGhpcy5wb2x5Z29ucyk7CisgICAgICAgIHZhciBiID0gbmV3IE5vZGUoY3Nn
LnBvbHlnb25zKTsKKyAgICAgICAgYS5jbGlwVG8oYik7CisgICAgICAgIGIuY2xpcFRvKGEpOwor
ICAgICAgICBiLmludmVydCgpOworICAgICAgICBiLmNsaXBUbyhhKTsKKyAgICAgICAgYi5pbnZl
cnQoKTsKKyAgICAgICAgYS5idWlsZChiLmFsbFBvbHlnb25zKCkpOworICAgICAgICB0aGlzLnBv
bHlnb25zID0gYS5hbGxQb2x5Z29ucygpOworICAgIH07CisgICAgLyoqCisgICAgICogU3VidHJh
Y3RzIHRoaXMgQ1NHIHdpdGggYW5vdGhlciBDU0cKKyAgICAgKiBAcGFyYW0gY3NnIFRoZSBDU0cg
dG8gc3VidHJhY3QgYWdhaW5zdCB0aGlzIENTRworICAgICAqIEByZXR1cm5zIEEgbmV3IENTRwor
ICAgICAqLworICAgIENTRy5wcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiAoY3NnKSB7Cisg
ICAgICAgIHZhciBhID0gbmV3IE5vZGUodGhpcy5jbG9uZSgpLnBvbHlnb25zKTsKKyAgICAgICAg
dmFyIGIgPSBuZXcgTm9kZShjc2cuY2xvbmUoKS5wb2x5Z29ucyk7CisgICAgICAgIGEuaW52ZXJ0
KCk7CisgICAgICAgIGEuY2xpcFRvKGIpOworICAgICAgICBiLmNsaXBUbyhhKTsKKyAgICAgICAg
Yi5pbnZlcnQoKTsKKyAgICAgICAgYi5jbGlwVG8oYSk7CisgICAgICAgIGIuaW52ZXJ0KCk7Cisg
ICAgICAgIGEuYnVpbGQoYi5hbGxQb2x5Z29ucygpKTsKKyAgICAgICAgYS5pbnZlcnQoKTsKKyAg
ICAgICAgcmV0dXJuIENTRy5Gcm9tUG9seWdvbnMoYS5hbGxQb2x5Z29ucygpKS5jb3B5VHJhbnNm
b3JtQXR0cmlidXRlcyh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFN1YnRyYWN0cyB0
aGlzIENTRyB3aXRoIGFub3RoZXIgQ1NHIGluIHBsYWNlCisgICAgICogQHBhcmFtIGNzZyBUaGUg
Q1NHIHRvIHN1YnRhY3QgYWdhaW5zdCB0aGlzIENTRworICAgICAqLworICAgIENTRy5wcm90b3R5
cGUuc3VidHJhY3RJblBsYWNlID0gZnVuY3Rpb24gKGNzZykgeworICAgICAgICB2YXIgYSA9IG5l
dyBOb2RlKHRoaXMucG9seWdvbnMpOworICAgICAgICB2YXIgYiA9IG5ldyBOb2RlKGNzZy5wb2x5
Z29ucyk7CisgICAgICAgIGEuaW52ZXJ0KCk7CisgICAgICAgIGEuY2xpcFRvKGIpOworICAgICAg
ICBiLmNsaXBUbyhhKTsKKyAgICAgICAgYi5pbnZlcnQoKTsKKyAgICAgICAgYi5jbGlwVG8oYSk7
CisgICAgICAgIGIuaW52ZXJ0KCk7CisgICAgICAgIGEuYnVpbGQoYi5hbGxQb2x5Z29ucygpKTsK
KyAgICAgICAgYS5pbnZlcnQoKTsKKyAgICAgICAgdGhpcy5wb2x5Z29ucyA9IGEuYWxsUG9seWdv
bnMoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEludGVyc2VjdCB0aGlzIENTRyB3aXRoIGFu
b3RoZXIgQ1NHCisgICAgICogQHBhcmFtIGNzZyBUaGUgQ1NHIHRvIGludGVyc2VjdCBhZ2FpbnN0
IHRoaXMgQ1NHCisgICAgICogQHJldHVybnMgQSBuZXcgQ1NHCisgICAgICovCisgICAgQ1NHLnBy
b3RvdHlwZS5pbnRlcnNlY3QgPSBmdW5jdGlvbiAoY3NnKSB7CisgICAgICAgIHZhciBhID0gbmV3
IE5vZGUodGhpcy5jbG9uZSgpLnBvbHlnb25zKTsKKyAgICAgICAgdmFyIGIgPSBuZXcgTm9kZShj
c2cuY2xvbmUoKS5wb2x5Z29ucyk7CisgICAgICAgIGEuaW52ZXJ0KCk7CisgICAgICAgIGIuY2xp
cFRvKGEpOworICAgICAgICBiLmludmVydCgpOworICAgICAgICBhLmNsaXBUbyhiKTsKKyAgICAg
ICAgYi5jbGlwVG8oYSk7CisgICAgICAgIGEuYnVpbGQoYi5hbGxQb2x5Z29ucygpKTsKKyAgICAg
ICAgYS5pbnZlcnQoKTsKKyAgICAgICAgcmV0dXJuIENTRy5Gcm9tUG9seWdvbnMoYS5hbGxQb2x5
Z29ucygpKS5jb3B5VHJhbnNmb3JtQXR0cmlidXRlcyh0aGlzKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEludGVyc2VjdHMgdGhpcyBDU0cgd2l0aCBhbm90aGVyIENTRyBpbiBwbGFjZQorICAg
ICAqIEBwYXJhbSBjc2cgVGhlIENTRyB0byBpbnRlcnNlY3QgYWdhaW5zdCB0aGlzIENTRworICAg
ICAqLworICAgIENTRy5wcm90b3R5cGUuaW50ZXJzZWN0SW5QbGFjZSA9IGZ1bmN0aW9uIChjc2cp
IHsKKyAgICAgICAgdmFyIGEgPSBuZXcgTm9kZSh0aGlzLnBvbHlnb25zKTsKKyAgICAgICAgdmFy
IGIgPSBuZXcgTm9kZShjc2cucG9seWdvbnMpOworICAgICAgICBhLmludmVydCgpOworICAgICAg
ICBiLmNsaXBUbyhhKTsKKyAgICAgICAgYi5pbnZlcnQoKTsKKyAgICAgICAgYS5jbGlwVG8oYik7
CisgICAgICAgIGIuY2xpcFRvKGEpOworICAgICAgICBhLmJ1aWxkKGIuYWxsUG9seWdvbnMoKSk7
CisgICAgICAgIGEuaW52ZXJ0KCk7CisgICAgICAgIHRoaXMucG9seWdvbnMgPSBhLmFsbFBvbHln
b25zKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBuZXcgQ1NHIHNvbGlkIHdp
dGggc29saWQgYW5kIGVtcHR5IHNwYWNlIHN3aXRjaGVkLiBUaGlzIHNvbGlkIGlzCisgICAgICog
bm90IG1vZGlmaWVkLgorICAgICAqIEByZXR1cm5zIEEgbmV3IENTRyBzb2xpZCB3aXRoIHNvbGlk
IGFuZCBlbXB0eSBzcGFjZSBzd2l0Y2hlZAorICAgICAqLworICAgIENTRy5wcm90b3R5cGUuaW52
ZXJzZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGNzZyA9IHRoaXMuY2xvbmUoKTsKKyAg
ICAgICAgY3NnLmludmVyc2VJblBsYWNlKCk7CisgICAgICAgIHJldHVybiBjc2c7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBJbnZlcnNlcyB0aGUgQ1NHIGluIHBsYWNlCisgICAgICovCisgICAg
Q1NHLnByb3RvdHlwZS5pbnZlcnNlSW5QbGFjZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy5wb2x5Z29ucy5tYXAoZnVuY3Rpb24gKHApIHsgcC5mbGlwKCk7IH0pOworICAgIH07CisgICAg
LyoqCisgICAgICogVGhpcyBpcyB1c2VkIHRvIGtlZXAgbWVzaGVzIHRyYW5zZm9ybWF0aW9ucyBz
byB0aGV5IGNhbiBiZSByZXN0b3JlZAorICAgICAqIHdoZW4gd2UgYnVpbGQgYmFjayBhIEJhYnls
b24gTWVzaAorICAgICAqIE5CIDogQWxsIENTRyBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgaW4g
d29ybGQgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gY3NnIFRoZSBDU0cgdG8gY29weSB0aGUg
dHJhbnNmb3JtIGF0dHJpYnV0ZXMgZnJvbQorICAgICAqIEByZXR1cm5zIFRoaXMgQ1NHCisgICAg
ICovCisgICAgQ1NHLnByb3RvdHlwZS5jb3B5VHJhbnNmb3JtQXR0cmlidXRlcyA9IGZ1bmN0aW9u
IChjc2cpIHsKKyAgICAgICAgdGhpcy5tYXRyaXggPSBjc2cubWF0cml4OworICAgICAgICB0aGlz
LnBvc2l0aW9uID0gY3NnLnBvc2l0aW9uOworICAgICAgICB0aGlzLnJvdGF0aW9uID0gY3NnLnJv
dGF0aW9uOworICAgICAgICB0aGlzLnNjYWxpbmcgPSBjc2cuc2NhbGluZzsKKyAgICAgICAgdGhp
cy5yb3RhdGlvblF1YXRlcm5pb24gPSBjc2cucm90YXRpb25RdWF0ZXJuaW9uOworICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJ1aWxkIFJhdyBtZXNoIGZyb20g
Q1NHCisgICAgICogQ29vcmRpbmF0ZXMgaGVyZSBhcmUgaW4gd29ybGQgc3BhY2UKKyAgICAgKiBA
cGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbWVzaCBnZW9tZXRyeQorICAgICAqIEBwYXJhbSBz
Y2VuZSBUaGUgU2NlbmUKKyAgICAgKiBAcGFyYW0ga2VlcFN1Yk1lc2hlcyBTcGVjaWZpZXMgaWYg
dGhlIHN1Ym1lc2hlcyBzaG91bGQgYmUga2VwdAorICAgICAqIEByZXR1cm5zIEEgbmV3IE1lc2gK
KyAgICAgKi8KKyAgICBDU0cucHJvdG90eXBlLmJ1aWxkTWVzaEdlb21ldHJ5ID0gZnVuY3Rpb24g
KG5hbWUsIHNjZW5lLCBrZWVwU3ViTWVzaGVzKSB7CisgICAgICAgIHZhciBtYXRyaXggPSB0aGlz
Lm1hdHJpeC5jbG9uZSgpOworICAgICAgICBtYXRyaXguaW52ZXJ0KCk7CisgICAgICAgIHZhciBt
ZXNoID0gbmV3IF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNZXNo
Il0obmFtZSwgc2NlbmUpLCB2ZXJ0aWNlcyA9IFtdLCBpbmRpY2VzID0gW10sIG5vcm1hbHMgPSBb
XSwgdXZzID0gW10sIHZlcnRleCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpLCBub3JtYWwgPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKSwgdXYgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJd
Llplcm8oKSwgcG9seWdvbnMgPSB0aGlzLnBvbHlnb25zLCBwb2x5Z29uSW5kaWNlcyA9IFswLCAw
LCAwXSwgcG9seWdvbiwgdmVydGljZV9kaWN0ID0ge30sIHZlcnRleF9pZHgsIGN1cnJlbnRJbmRl
eCA9IDAsIHN1Yk1lc2hfZGljdCA9IHt9LCBzdWJNZXNoX29iajsKKyAgICAgICAgaWYgKGtlZXBT
dWJNZXNoZXMpIHsKKyAgICAgICAgICAgIC8vIFNvcnQgUG9seWdvbnMsIHNpbmNlIHN1Yk1lc2hl
cyBhcmUgaW5kaWNlcyByYW5nZQorICAgICAgICAgICAgcG9seWdvbnMuc29ydChmdW5jdGlvbiAo
YSwgYikgeworICAgICAgICAgICAgICAgIGlmIChhLnNoYXJlZC5tZXNoSWQgPT09IGIuc2hhcmVk
Lm1lc2hJZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5zaGFyZWQuc3ViTWVzaElk
IC0gYi5zaGFyZWQuc3ViTWVzaElkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuc2hhcmVkLm1lc2hJZCAtIGIu
c2hhcmVkLm1lc2hJZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb2x5Z29ucy5sZW5ndGg7IGkgPCBp
bDsgaSsrKSB7CisgICAgICAgICAgICBwb2x5Z29uID0gcG9seWdvbnNbaV07CisgICAgICAgICAg
ICAvLyBCdWlsZGluZyBTdWJNZXNoZXMKKyAgICAgICAgICAgIGlmICghc3ViTWVzaF9kaWN0W3Bv
bHlnb24uc2hhcmVkLm1lc2hJZF0pIHsKKyAgICAgICAgICAgICAgICBzdWJNZXNoX2RpY3RbcG9s
eWdvbi5zaGFyZWQubWVzaElkXSA9IHt9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCFzdWJNZXNoX2RpY3RbcG9seWdvbi5zaGFyZWQubWVzaElkXVtwb2x5Z29uLnNoYXJlZC5zdWJN
ZXNoSWRdKSB7CisgICAgICAgICAgICAgICAgc3ViTWVzaF9kaWN0W3BvbHlnb24uc2hhcmVkLm1l
c2hJZF1bcG9seWdvbi5zaGFyZWQuc3ViTWVzaElkXSA9IHsKKyAgICAgICAgICAgICAgICAgICAg
aW5kZXhTdGFydDogK0luZmluaXR5LAorICAgICAgICAgICAgICAgICAgICBpbmRleEVuZDogLUlu
ZmluaXR5LAorICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbEluZGV4OiBwb2x5Z29uLnNoYXJl
ZC5tYXRlcmlhbEluZGV4CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHN1Yk1lc2hfb2JqID0gc3ViTWVzaF9kaWN0W3BvbHlnb24uc2hhcmVkLm1lc2hJZF1b
cG9seWdvbi5zaGFyZWQuc3ViTWVzaElkXTsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAyLCBq
bCA9IHBvbHlnb24udmVydGljZXMubGVuZ3RoOyBqIDwgamw7IGorKykgeworICAgICAgICAgICAg
ICAgIHBvbHlnb25JbmRpY2VzWzBdID0gMDsKKyAgICAgICAgICAgICAgICBwb2x5Z29uSW5kaWNl
c1sxXSA9IGogLSAxOworICAgICAgICAgICAgICAgIHBvbHlnb25JbmRpY2VzWzJdID0gajsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDM7IGsrKykgeworICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXguY29weUZyb20ocG9seWdvbi52ZXJ0aWNlc1twb2x5Z29uSW5kaWNlc1tr
XV0ucG9zKTsKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsLmNvcHlGcm9tKHBvbHlnb24udmVy
dGljZXNbcG9seWdvbkluZGljZXNba11dLm5vcm1hbCk7CisgICAgICAgICAgICAgICAgICAgIHV2
LmNvcHlGcm9tKHBvbHlnb24udmVydGljZXNbcG9seWdvbkluZGljZXNba11dLnV2KTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGxvY2FsVmVydGV4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlcyh2
ZXJ0ZXgsIG1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhbE5vcm1hbCA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0u
VHJhbnNmb3JtTm9ybWFsKG5vcm1hbCwgbWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgdmVy
dGV4X2lkeCA9IHZlcnRpY2VfZGljdFtsb2NhbFZlcnRleC54ICsgJywnICsgbG9jYWxWZXJ0ZXgu
eSArICcsJyArIGxvY2FsVmVydGV4LnpdOworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBp
ZiAyIHBvaW50cyBjYW4gYmUgbWVyZ2VkCisgICAgICAgICAgICAgICAgICAgIGlmICghKHR5cGVv
ZiB2ZXJ0ZXhfaWR4ICE9PSAndW5kZWZpbmVkJyAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsc1t2ZXJ0ZXhfaWR4ICogM10gPT09IGxvY2FsTm9ybWFsLnggJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vcm1hbHNbdmVydGV4X2lkeCAqIDMgKyAxXSA9PT0gbG9jYWxOb3JtYWwu
eSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1t2ZXJ0ZXhfaWR4ICogMyArIDJd
ID09PSBsb2NhbE5vcm1hbC56ICYmCisgICAgICAgICAgICAgICAgICAgICAgICB1dnNbdmVydGV4
X2lkeCAqIDJdID09PSB1di54ICYmCisgICAgICAgICAgICAgICAgICAgICAgICB1dnNbdmVydGV4
X2lkeCAqIDIgKyAxXSA9PT0gdXYueSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRp
Y2VzLnB1c2gobG9jYWxWZXJ0ZXgueCwgbG9jYWxWZXJ0ZXgueSwgbG9jYWxWZXJ0ZXgueik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB1dnMucHVzaCh1di54LCB1di55KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vcm1hbHMucHVzaChub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleF9pZHggPSB2ZXJ0aWNlX2RpY3RbbG9jYWxW
ZXJ0ZXgueCArICcsJyArIGxvY2FsVmVydGV4LnkgKyAnLCcgKyBsb2NhbFZlcnRleC56XSA9ICh2
ZXJ0aWNlcy5sZW5ndGggLyAzKSAtIDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRleF9pZHgpOworICAgICAgICAgICAgICAgICAg
ICBzdWJNZXNoX29iai5pbmRleFN0YXJ0ID0gTWF0aC5taW4oY3VycmVudEluZGV4LCBzdWJNZXNo
X29iai5pbmRleFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgc3ViTWVzaF9vYmouaW5kZXhF
bmQgPSBNYXRoLm1heChjdXJyZW50SW5kZXgsIHN1Yk1lc2hfb2JqLmluZGV4RW5kKTsKKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudEluZGV4Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0
aW9uS2luZCwgdmVydGljZXMpOworICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3Jt
YWxLaW5kLCBub3JtYWxzKTsKKyAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5k
LCB1dnMpOworICAgICAgICBtZXNoLnNldEluZGljZXMoaW5kaWNlcywgbnVsbCk7CisgICAgICAg
IGlmIChrZWVwU3ViTWVzaGVzKSB7CisgICAgICAgICAgICAvLyBXZSBvZmZzZXQgdGhlIG1hdGVy
aWFsSW5kZXggYnkgdGhlIHByZXZpb3VzIG51bWJlciBvZiBtYXRlcmlhbHMgaW4gdGhlIENTRyBt
aXhlZCBtZXNoZXMKKyAgICAgICAgICAgIHZhciBtYXRlcmlhbEluZGV4T2Zmc2V0ID0gMCwgbWF0
ZXJpYWxNYXhJbmRleDsKKyAgICAgICAgICAgIG1lc2guc3ViTWVzaGVzID0gbmV3IEFycmF5KCk7
CisgICAgICAgICAgICBmb3IgKHZhciBtIGluIHN1Yk1lc2hfZGljdCkgeworICAgICAgICAgICAg
ICAgIG1hdGVyaWFsTWF4SW5kZXggPSAtMTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBzbSBp
biBzdWJNZXNoX2RpY3RbbV0pIHsKKyAgICAgICAgICAgICAgICAgICAgc3ViTWVzaF9vYmogPSBz
dWJNZXNoX2RpY3RbbV1bc21dOworICAgICAgICAgICAgICAgICAgICBfTWVzaGVzX3N1Yk1lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU3ViTWVzaCJdLkNyZWF0ZUZyb21JbmRpY2Vz
KHN1Yk1lc2hfb2JqLm1hdGVyaWFsSW5kZXggKyBtYXRlcmlhbEluZGV4T2Zmc2V0LCBzdWJNZXNo
X29iai5pbmRleFN0YXJ0LCBzdWJNZXNoX29iai5pbmRleEVuZCAtIHN1Yk1lc2hfb2JqLmluZGV4
U3RhcnQgKyAxLCBtZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxNYXhJbmRleCA9
IE1hdGgubWF4KHN1Yk1lc2hfb2JqLm1hdGVyaWFsSW5kZXgsIG1hdGVyaWFsTWF4SW5kZXgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRlcmlhbEluZGV4T2Zmc2V0ICs9
ICsrbWF0ZXJpYWxNYXhJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbWVzaDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJ1aWxkIE1lc2ggZnJvbSBDU0cg
dGFraW5nIG1hdGVyaWFsIGFuZCB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAorICAgICAqIEBwYXJh
bSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBNZXNoCisgICAgICogQHBhcmFtIG1hdGVyaWFsIFRoZSBt
YXRlcmlhbCBvZiB0aGUgTWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgU2NlbmUKKyAgICAg
KiBAcGFyYW0ga2VlcFN1Yk1lc2hlcyBTcGVjaWZpZXMgaWYgc3VibWVzaGVzIHNob3VsZCBiZSBr
ZXB0CisgICAgICogQHJldHVybnMgVGhlIG5ldyBNZXNoCisgICAgICovCisgICAgQ1NHLnByb3Rv
dHlwZS50b01lc2ggPSBmdW5jdGlvbiAobmFtZSwgbWF0ZXJpYWwsIHNjZW5lLCBrZWVwU3ViTWVz
aGVzKSB7CisgICAgICAgIGlmIChtYXRlcmlhbCA9PT0gdm9pZCAwKSB7IG1hdGVyaWFsID0gbnVs
bDsgfQorICAgICAgICB2YXIgbWVzaCA9IHRoaXMuYnVpbGRNZXNoR2VvbWV0cnkobmFtZSwgc2Nl
bmUsIGtlZXBTdWJNZXNoZXMpOworICAgICAgICBtZXNoLm1hdGVyaWFsID0gbWF0ZXJpYWw7Cisg
ICAgICAgIG1lc2gucG9zaXRpb24uY29weUZyb20odGhpcy5wb3NpdGlvbik7CisgICAgICAgIG1l
c2gucm90YXRpb24uY29weUZyb20odGhpcy5yb3RhdGlvbik7CisgICAgICAgIGlmICh0aGlzLnJv
dGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgbWVzaC5yb3RhdGlvblF1YXRlcm5pb24g
PSB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbi5jbG9uZSgpOworICAgICAgICB9CisgICAgICAgIG1l
c2guc2NhbGluZy5jb3B5RnJvbSh0aGlzLnNjYWxpbmcpOworICAgICAgICBtZXNoLmNvbXB1dGVX
b3JsZE1hdHJpeCh0cnVlKTsKKyAgICAgICAgcmV0dXJuIG1lc2g7CisgICAgfTsKKyAgICByZXR1
cm4gQ1NHOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvZGF0YUJ1
ZmZlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L01lc2hlcy9kYXRhQnVmZmVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBEYXRhQnVmZmVyICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkRhdGFCdWZmZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERh
dGFCdWZmZXI7IH0pOworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHN0b3JlIGdmeCBkYXRhIChsaWtl
IFdlYkdMQnVmZmVyKQorICovCit2YXIgRGF0YUJ1ZmZlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uICgpIHsKKyAgICBmdW5jdGlvbiBEYXRhQnVmZmVyKCkgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBvciBzZXRzIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyByZWZlcmVuY2luZyB0aGlz
IGJ1ZmZlcgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZWZlcmVuY2VzID0gMDsKKyAgICAg
ICAgLyoqIEdldHMgb3Igc2V0cyB0aGUgc2l6ZSBvZiB0aGUgdW5kZXJseWluZyBidWZmZXIgKi8K
KyAgICAgICAgdGhpcy5jYXBhY2l0eSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGJ1ZmZlciBjb250YWlucyAzMmJp
dHMgaW5kaWNlcworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pczMyQml0cyA9IGZhbHNlOwor
ICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YUJ1ZmZlci5wcm90b3R5cGUsICJ1
bmRlcmx5aW5nUmVzb3VyY2UiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB1
bmRlcmx5aW5nIGJ1ZmZlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgcmV0dXJu
IERhdGFCdWZmZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy9n
ZW9tZXRyeS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NZXNoZXMvZ2VvbWV0cnkudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBHZW9tZXRyeSAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJHZW9tZXRyeSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gR2VvbWV0cnk7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMv
bWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRo
cy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNo
X3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01lc2hlcy9tZXNoLnZlcnRleERhdGEgKi8gIi4vTWVzaGVzL21lc2gudmVy
dGV4RGF0YS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
ZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWVzaGVzX3N1Yk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9zdWJNZXNoICovICIuL01lc2hlcy9zdWJN
ZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0xvYWRpbmdfc2NlbmVMb2FkZXJG
bGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTG9hZGluZy9zY2VuZUxvYWRlckZsYWdzICovICIuL0xvYWRpbmcvc2NlbmVMb2FkZXJG
bGFncy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DdWxsaW5nX2JvdW5kaW5nSW5m
b19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vQ3VsbGluZy9ib3VuZGluZ0luZm8gKi8gIi4vQ3VsbGluZy9ib3VuZGluZ0luZm8udHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29u
c3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdGFncyAqLyAiLi9NaXNjL3Rh
Z3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9mdW5jdGlvbnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRocy9tYXRoLmZ1bmN0aW9ucyAqLyAiLi9NYXRocy9tYXRoLmZ1bmN0aW9ucy50cyIpOwor
CisKKworCisKKworCisKKworCisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBzdG9yZSBnZW9tZXRy
eSBkYXRhICh2ZXJ0ZXggYnVmZmVycyArIGluZGV4IGJ1ZmZlcikKKyAqLwordmFyIEdlb21ldHJ5
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgZ2VvbWV0cnkKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgdW5pcXVlIElECisg
ICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFy
YW0gdmVydGV4RGF0YSBkZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhIHVzZWQgdG8gZ2V0IGdlb21ldHJ5
IGRhdGEKKyAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMgaWYgZ2VvbWV0cnkgbXVzdCBi
ZSB1cGRhdGFibGUgKGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5l
cyB0aGUgbWVzaCB0aGF0IHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnZW9tZXRyeQorICAg
ICAqLworICAgIGZ1bmN0aW9uIEdlb21ldHJ5KGlkLCBzY2VuZSwgdmVydGV4RGF0YSwgdXBkYXRh
YmxlLCBtZXNoKSB7CisgICAgICAgIGlmICh1cGRhdGFibGUgPT09IHZvaWQgMCkgeyB1cGRhdGFi
bGUgPSBmYWxzZTsgfQorICAgICAgICBpZiAobWVzaCA9PT0gdm9pZCAwKSB7IG1lc2ggPSBudWxs
OyB9CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBkZWxheSBsb2FkaW5nIHN0YXRl
IG9mIHRoZSBnZW9tZXRyeSAobm9uZSBieSBkZWZhdWx0IHdoaWNoIG1lYW5zIG5vdCBkZWxheWVk
KQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5ERUxBWUxP
QURTVEFURV9OT05FOworICAgICAgICB0aGlzLl90b3RhbFZlcnRpY2VzID0gMDsKKyAgICAgICAg
dGhpcy5faXNEaXNwb3NlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9pbmRleEJ1ZmZlcklzVXBk
YXRhYmxlID0gZmFsc2U7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy51bmlx
dWVJZCA9IHNjZW5lLmdldFVuaXF1ZUlkKCk7CisgICAgICAgIHRoaXMuX2VuZ2luZSA9IHNjZW5l
LmdldEVuZ2luZSgpOworICAgICAgICB0aGlzLl9tZXNoZXMgPSBbXTsKKyAgICAgICAgdGhpcy5f
c2NlbmUgPSBzY2VuZTsKKyAgICAgICAgLy9Jbml0IHZlcnRleCBidWZmZXIgY2FjaGUKKyAgICAg
ICAgdGhpcy5fdmVydGV4QnVmZmVycyA9IHt9OworICAgICAgICB0aGlzLl9pbmRpY2VzID0gW107
CisgICAgICAgIHRoaXMuX3VwZGF0YWJsZSA9IHVwZGF0YWJsZTsKKyAgICAgICAgLy8gdmVydGV4
RGF0YQorICAgICAgICBpZiAodmVydGV4RGF0YSkgeworICAgICAgICAgICAgdGhpcy5zZXRBbGxW
ZXJ0aWNlc0RhdGEodmVydGV4RGF0YSwgdXBkYXRhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3RvdGFsVmVydGljZXMgPSAwOworICAgICAgICAgICAg
dGhpcy5faW5kaWNlcyA9IFtdOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9lbmdpbmUu
Z2V0Q2FwcygpLnZlcnRleEFycmF5T2JqZWN0KSB7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhB
cnJheU9iamVjdHMgPSB7fTsKKyAgICAgICAgfQorICAgICAgICAvLyBhcHBseVRvTWVzaAorICAg
ICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgdGhpcy5hcHBseVRvTWVzaChtZXNoKTsKKyAg
ICAgICAgICAgIG1lc2guY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAgICB9CisgICAg
fQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeS5wcm90b3R5cGUsICJib3VuZGlu
Z0JpYXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiAgR2V0cyBvciBzZXRzIHRoZSBCaWFz
IFZlY3RvciB0byBhcHBseSBvbiB0aGUgYm91bmRpbmcgZWxlbWVudHMgKGJveC9zcGhlcmUpLCB0
aGUgbWF4IGV4dGVuZCBpcyBjb21wdXRlZCBhcyB2ICs9IHYgKiBiaWFzLnggKyBiaWFzLnksIHRo
ZSBtaW4gaXMgY29tcHV0ZWQgYXMgdiAtPSB2ICogYmlhcy54ICsgYmlhcy55CisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9i
b3VuZGluZ0JpYXM7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiAgR2V0cyBv
ciBzZXRzIHRoZSBCaWFzIFZlY3RvciB0byBhcHBseSBvbiB0aGUgYm91bmRpbmcgZWxlbWVudHMg
KGJveC9zcGhlcmUpLCB0aGUgbWF4IGV4dGVuZCBpcyBjb21wdXRlZCBhcyB2ICs9IHYgKiBiaWFz
LnggKyBiaWFzLnksIHRoZSBtaW4gaXMgY29tcHV0ZWQgYXMgdiAtPSB2ICogYmlhcy54ICsgYmlh
cy55CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX2JvdW5kaW5nQmlhcykgeworICAgICAgICAgICAgICAgIHRoaXMuX2Jv
dW5kaW5nQmlhcy5jb3B5RnJvbSh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ib3VuZGluZ0JpYXMgPSB2YWx1ZS5jbG9uZSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fdXBkYXRlQm91bmRpbmdJbmZvKHRy
dWUsIG51bGwpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBTdGF0aWMgZnVu
Y3Rpb24gdXNlZCB0byBhdHRhY2ggYSBuZXcgZW1wdHkgZ2VvbWV0cnkgdG8gYSBtZXNoCisgICAg
ICogQHBhcmFtIG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0byBhdHRhY2ggdGhlIGdlb21ldHJ5IHRv
CisgICAgICogQHJldHVybnMgdGhlIG5ldyBHZW9tZXRyeQorICAgICAqLworICAgIEdlb21ldHJ5
LkNyZWF0ZUdlb21ldHJ5Rm9yTWVzaCA9IGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgIHZhciBn
ZW9tZXRyeSA9IG5ldyBHZW9tZXRyeShHZW9tZXRyeS5SYW5kb21JZCgpLCBtZXNoLmdldFNjZW5l
KCkpOworICAgICAgICBnZW9tZXRyeS5hcHBseVRvTWVzaChtZXNoKTsKKyAgICAgICAgcmV0dXJu
IGdlb21ldHJ5OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEdlb21ldHJ5LnBy
b3RvdHlwZSwgImV4dGVuZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGN1
cnJlbnQgZXh0ZW5kIG9mIHRoZSBnZW9tZXRyeQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXh0ZW5kOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICog
QHJldHVybnMgdGhlIGhvc3RpbmcgU2NlbmUKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5
cGUuZ2V0U2NlbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGhvc3RpbmcgZW5naW5lCisgICAgICog
QHJldHVybnMgdGhlIGhvc3RpbmcgRW5naW5lCisgICAgICovCisgICAgR2VvbWV0cnkucHJvdG90
eXBlLmdldEVuZ2luZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuZ2lu
ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmluZXMgaWYgdGhlIGdlb21ldHJ5IGlzIHJl
YWR5IHRvIHVzZQorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGdlb21ldHJ5IGlzIHJlYWR5
IHRvIGJlIHVzZWQKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZGVsYXlMb2FkU3RhdGUgPT09IF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5E
RUxBWUxPQURTVEFURV9MT0FERUQgfHwgdGhpcy5kZWxheUxvYWRTdGF0ZSA9PT0gX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLkRFTEFZ
TE9BRFNUQVRFX05PTkU7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0
cnkucHJvdG90eXBlLCAiZG9Ob3RTZXJpYWxpemUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB0aGF0IHRoZSBnZW9tZXRyeSBzaG91bGQgbm90IGJl
IHNlcmlhbGl6ZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX21lc2hlcy5sZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21lc2hlc1tpbmRleF0uZG9O
b3RTZXJpYWxpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEdlb21ldHJ5LnByb3RvdHlw
ZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3ZlcnRleEFycmF5
T2JqZWN0cykgeworICAgICAgICAgICAgdGhpcy5fdmVydGV4QXJyYXlPYmplY3RzID0ge307Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gSW5kZXggYnVmZmVyCisgICAgICAgIGlmICh0aGlzLl9tZXNo
ZXMubGVuZ3RoICE9PSAwICYmIHRoaXMuX2luZGljZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX2lu
ZGV4QnVmZmVyID0gdGhpcy5fZW5naW5lLmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuX2luZGljZXMp
OworICAgICAgICB9CisgICAgICAgIC8vIFZlcnRleCBidWZmZXJzCisgICAgICAgIGZvciAodmFy
IGtleSBpbiB0aGlzLl92ZXJ0ZXhCdWZmZXJzKSB7CisgICAgICAgICAgICB2YXIgdmVydGV4QnVm
ZmVyID0gdGhpcy5fdmVydGV4QnVmZmVyc1trZXldOworICAgICAgICAgICAgdmVydGV4QnVmZmVy
Ll9yZWJ1aWxkKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEFmZmVjdHMg
YWxsIGdlb21ldHJ5IGRhdGEgaW4gb25lIGNhbGwKKyAgICAgKiBAcGFyYW0gdmVydGV4RGF0YSBk
ZWZpbmVzIHRoZSBnZW9tZXRyeSBkYXRhCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVz
IGlmIHRoZSBnZW9tZXRyeSBtdXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlIChmYWxzZSBhcyBk
ZWZhdWx0KQorICAgICAqLworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5zZXRBbGxWZXJ0aWNlc0Rh
dGEgPSBmdW5jdGlvbiAodmVydGV4RGF0YSwgdXBkYXRhYmxlKSB7CisgICAgICAgIHZlcnRleERh
dGEuYXBwbHlUb0dlb21ldHJ5KHRoaXMsIHVwZGF0YWJsZSk7CisgICAgICAgIHRoaXMubm90aWZ5
VXBkYXRlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgc3BlY2lmaWMgdmVydGV4IGRh
dGEKKyAgICAgKiBAcGFyYW0ga2luZCBkZWZpbmVzIHRoZSBkYXRhIGtpbmQgKFBvc2l0aW9uLCBu
b3JtYWwsIGV0Yy4uLikKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSB2ZXJ0ZXggZGF0
YSB0byB1c2UKKyAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMgaWYgdGhlIHZlcnRleCBt
dXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlIChmYWxzZSBhcyBkZWZhdWx0KQorICAgICAqIEBw
YXJhbSBzdHJpZGUgZGVmaW5lcyB0aGUgc3RyaWRlIHRvIHVzZSAoMCBieSBkZWZhdWx0KS4gVGhp
cyB2YWx1ZSBpcyBkZWR1Y2VkIGZyb20gdGhlIGtpbmQgdmFsdWUgaWYgbm90IHNwZWNpZmllZAor
ICAgICAqLworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5zZXRWZXJ0aWNlc0RhdGEgPSBmdW5jdGlv
biAoa2luZCwgZGF0YSwgdXBkYXRhYmxlLCBzdHJpZGUpIHsKKyAgICAgICAgaWYgKHVwZGF0YWJs
ZSA9PT0gdm9pZCAwKSB7IHVwZGF0YWJsZSA9IGZhbHNlOyB9CisgICAgICAgIHZhciBidWZmZXIg
PSBuZXcgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
QnVmZmVyIl0odGhpcy5fZW5naW5lLCBkYXRhLCBraW5kLCB1cGRhdGFibGUsIHRoaXMuX21lc2hl
cy5sZW5ndGggPT09IDAsIHN0cmlkZSk7CisgICAgICAgIHRoaXMuc2V0VmVydGljZXNCdWZmZXIo
YnVmZmVyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMgYSBzcGVjaWZpYyB2ZXJ0
ZXggZGF0YQorICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMgdGhlIGRhdGEga2luZCAoUG9zaXRp
b24sIG5vcm1hbCwgZXRjLi4uKQorICAgICAqLworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5yZW1v
dmVWZXJ0aWNlc0RhdGEgPSBmdW5jdGlvbiAoa2luZCkgeworICAgICAgICBpZiAodGhpcy5fdmVy
dGV4QnVmZmVyc1traW5kXSkgeworICAgICAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1traW5k
XS5kaXNwb3NlKCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fdmVydGV4QnVmZmVyc1traW5k
XTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQWZmZWN0IGEgdmVydGV4IGJ1
ZmZlciB0byB0aGUgZ2VvbWV0cnkuIHRoZSB2ZXJ0ZXhCdWZmZXIuZ2V0S2luZCgpIGZ1bmN0aW9u
IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIHN0b3JlIHRoZSBkYXRhCisgICAgICogQHBh
cmFtIGJ1ZmZlciBkZWZpbmVzIHRoZSB2ZXJ0ZXggYnVmZmVyIHRvIHVzZQorICAgICAqIEBwYXJh
bSB0b3RhbFZlcnRpY2VzIGRlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlcyBmb3Ig
cG9zaXRpb24ga2luZCAoY291bGQgYmUgbnVsbCkKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90
b3R5cGUuc2V0VmVydGljZXNCdWZmZXIgPSBmdW5jdGlvbiAoYnVmZmVyLCB0b3RhbFZlcnRpY2Vz
KSB7CisgICAgICAgIGlmICh0b3RhbFZlcnRpY2VzID09PSB2b2lkIDApIHsgdG90YWxWZXJ0aWNl
cyA9IG51bGw7IH0KKyAgICAgICAgdmFyIGtpbmQgPSBidWZmZXIuZ2V0S2luZCgpOworICAgICAg
ICBpZiAodGhpcy5fdmVydGV4QnVmZmVyc1traW5kXSkgeworICAgICAgICAgICAgdGhpcy5fdmVy
dGV4QnVmZmVyc1traW5kXS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdmVy
dGV4QnVmZmVyc1traW5kXSA9IGJ1ZmZlcjsKKyAgICAgICAgaWYgKGtpbmQgPT09IF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0
aW9uS2luZCkgeworICAgICAgICAgICAgdmFyIGRhdGEgPSBidWZmZXIuZ2V0RGF0YSgpOworICAg
ICAgICAgICAgaWYgKHRvdGFsVmVydGljZXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRo
aXMuX3RvdGFsVmVydGljZXMgPSB0b3RhbFZlcnRpY2VzOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl90b3RhbFZlcnRpY2VzID0gZGF0YS5sZW5ndGggLyAoYnVmZmVy
LmJ5dGVTdHJpZGUgLyA0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl91cGRhdGVFeHRlbmQoZGF0YSk7CisgICAgICAgICAgICB0aGlzLl9yZXNl
dFBvaW50c0FycmF5Q2FjaGUoKTsKKyAgICAgICAgICAgIHZhciBtZXNoZXMgPSB0aGlzLl9tZXNo
ZXM7CisgICAgICAgICAgICB2YXIgbnVtT2ZNZXNoZXMgPSBtZXNoZXMubGVuZ3RoOworICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG51bU9mTWVzaGVzOyBpbmRleCsrKSB7
CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBtZXNoZXNbaW5kZXhdOworICAgICAgICAgICAg
ICAgIG1lc2guX2JvdW5kaW5nSW5mbyA9IG5ldyBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siQm91bmRpbmdJbmZvIl0odGhpcy5fZXh0ZW5kLm1pbmlt
dW0sIHRoaXMuX2V4dGVuZC5tYXhpbXVtKTsKKyAgICAgICAgICAgICAgICBtZXNoLl9jcmVhdGVH
bG9iYWxTdWJNZXNoKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtZXNoLmNvbXB1dGVXb3JsZE1h
dHJpeCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLm5vdGlm
eVVwZGF0ZShraW5kKTsKKyAgICAgICAgaWYgKHRoaXMuX3ZlcnRleEFycmF5T2JqZWN0cykgewor
ICAgICAgICAgICAgdGhpcy5fZGlzcG9zZVZlcnRleEFycmF5T2JqZWN0cygpOworICAgICAgICAg
ICAgdGhpcy5fdmVydGV4QXJyYXlPYmplY3RzID0ge307IC8vIFdpbGwgdHJpZ2dlciBhIHJlYnVp
bGQgb2YgdGhlIFZBTyBpZiBzdXBwb3J0ZWQKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogVXBkYXRlIGEgc3BlY2lmaWMgdmVydGV4IGJ1ZmZlcgorICAgICAqIFRoaXMgZnVuY3Rp
b24gd2lsbCBkaXJlY3RseSB1cGRhdGUgdGhlIHVuZGVybHlpbmcgRGF0YUJ1ZmZlciBhY2NvcmRp
bmcgdG8gdGhlIHBhc3NlZCBudW1lcmljIGFycmF5IG9yIEZsb2F0MzJBcnJheQorICAgICAqIEl0
IHdpbGwgZG8gbm90aGluZyBpZiB0aGUgYnVmZmVyIGlzIG5vdCB1cGRhdGFibGUKKyAgICAgKiBA
cGFyYW0ga2luZCBkZWZpbmVzIHRoZSBkYXRhIGtpbmQgKFBvc2l0aW9uLCBub3JtYWwsIGV0Yy4u
LikKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHRvIHVzZQorICAgICAqIEBw
YXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGluIHRoZSB0YXJnZXQgYnVmZmVyIHdoZXJl
IHRvIHN0b3JlIHRoZSBkYXRhCisgICAgICogQHBhcmFtIHVzZUJ5dGVzIHNldCB0byB0cnVlIGlm
IHRoZSBvZmZzZXQgaXMgaW4gYnl0ZXMKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUu
dXBkYXRlVmVydGljZXNEYXRhRGlyZWN0bHkgPSBmdW5jdGlvbiAoa2luZCwgZGF0YSwgb2Zmc2V0
LCB1c2VCeXRlcykgeworICAgICAgICBpZiAodXNlQnl0ZXMgPT09IHZvaWQgMCkgeyB1c2VCeXRl
cyA9IGZhbHNlOyB9CisgICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB0aGlzLmdldFZlcnRleEJ1
ZmZlcihraW5kKTsKKyAgICAgICAgaWYgKCF2ZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICB2ZXJ0ZXhCdWZmZXIudXBkYXRlRGlyZWN0bHkoZGF0
YSwgb2Zmc2V0LCB1c2VCeXRlcyk7CisgICAgICAgIHRoaXMubm90aWZ5VXBkYXRlKGtpbmQpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIGEgc3BlY2lmaWMgdmVydGV4IGJ1ZmZlcgor
ICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYSBuZXcgYnVmZmVyIGlmIHRoZSBjdXJy
ZW50IG9uZSBpcyBub3QgdXBkYXRhYmxlCisgICAgICogQHBhcmFtIGtpbmQgZGVmaW5lcyB0aGUg
ZGF0YSBraW5kIChQb3NpdGlvbiwgbm9ybWFsLCBldGMuLi4pCisgICAgICogQHBhcmFtIGRhdGEg
ZGVmaW5lcyB0aGUgZGF0YSB0byB1c2UKKyAgICAgKiBAcGFyYW0gdXBkYXRlRXh0ZW5kcyBkZWZp
bmVzIGlmIHRoZSBnZW9tZXRyeSBleHRlbmRzIG11c3QgYmUgcmVjb21wdXRlZCAoZmFsc2UgYnkg
ZGVmYXVsdCkKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUudXBkYXRlVmVydGljZXNE
YXRhID0gZnVuY3Rpb24gKGtpbmQsIGRhdGEsIHVwZGF0ZUV4dGVuZHMpIHsKKyAgICAgICAgaWYg
KHVwZGF0ZUV4dGVuZHMgPT09IHZvaWQgMCkgeyB1cGRhdGVFeHRlbmRzID0gZmFsc2U7IH0KKyAg
ICAgICAgdmFyIHZlcnRleEJ1ZmZlciA9IHRoaXMuZ2V0VmVydGV4QnVmZmVyKGtpbmQpOworICAg
ICAgICBpZiAoIXZlcnRleEJ1ZmZlcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHZlcnRleEJ1ZmZlci51cGRhdGUoZGF0YSk7CisgICAgICAgIGlmIChraW5kID09
PSBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZm
ZXIiXS5Qb3NpdGlvbktpbmQpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJvdW5kaW5nSW5m
byh1cGRhdGVFeHRlbmRzLCBkYXRhKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm5vdGlmeVVw
ZGF0ZShraW5kKTsKKyAgICB9OworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5fdXBkYXRlQm91bmRp
bmdJbmZvID0gZnVuY3Rpb24gKHVwZGF0ZUV4dGVuZHMsIGRhdGEpIHsKKyAgICAgICAgaWYgKHVw
ZGF0ZUV4dGVuZHMpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUV4dGVuZChkYXRhKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9yZXNldFBvaW50c0FycmF5Q2FjaGUoKTsKKyAgICAgICAg
aWYgKHVwZGF0ZUV4dGVuZHMpIHsKKyAgICAgICAgICAgIHZhciBtZXNoZXMgPSB0aGlzLl9tZXNo
ZXM7CisgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIG1lc2hlc18xID0gbWVzaGVzOyBfaSA8
IG1lc2hlc18xLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZhciBtZXNoID0gbWVz
aGVzXzFbX2ldOworICAgICAgICAgICAgICAgIGlmIChtZXNoLl9ib3VuZGluZ0luZm8pIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWVzaC5fYm91bmRpbmdJbmZvLnJlQ29uc3RydWN0KHRoaXMuX2V4
dGVuZC5taW5pbXVtLCB0aGlzLl9leHRlbmQubWF4aW11bSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtZXNoLl9ib3VuZGlu
Z0luZm8gPSBuZXcgX0N1bGxpbmdfYm91bmRpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIkJvdW5kaW5nSW5mbyJdKHRoaXMuX2V4dGVuZC5taW5pbXVtLCB0aGlzLl9leHRlbmQu
bWF4aW11bSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBzdWJNZXNo
ZXMgPSBtZXNoLnN1Yk1lc2hlczsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBfYSA9IDAsIHN1
Yk1lc2hlc18xID0gc3ViTWVzaGVzOyBfYSA8IHN1Yk1lc2hlc18xLmxlbmd0aDsgX2ErKykgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgc3ViTWVzaCA9IHN1Yk1lc2hlc18xW19hXTsKKyAgICAg
ICAgICAgICAgICAgICAgc3ViTWVzaC5yZWZyZXNoQm91bmRpbmdJbmZvKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRl
biAqLworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5fYmluZCA9IGZ1bmN0aW9uIChlZmZlY3QsIGlu
ZGV4VG9CaW5kKSB7CisgICAgICAgIGlmICghZWZmZWN0KSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZGV4VG9CaW5kID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgIGluZGV4VG9CaW5kID0gdGhpcy5faW5kZXhCdWZmZXI7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIHZicyA9IHRoaXMuZ2V0VmVydGV4QnVmZmVycygpOworICAgICAgICBpZiAoIXZi
cykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChpbmRleFRv
QmluZCAhPSB0aGlzLl9pbmRleEJ1ZmZlciB8fCAhdGhpcy5fdmVydGV4QXJyYXlPYmplY3RzKSB7
CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUuYmluZEJ1ZmZlcnModmJzLCBpbmRleFRvQmluZCwg
ZWZmZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBVc2lu
ZyBWQU8KKyAgICAgICAgaWYgKCF0aGlzLl92ZXJ0ZXhBcnJheU9iamVjdHNbZWZmZWN0LmtleV0p
IHsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleEFycmF5T2JqZWN0c1tlZmZlY3Qua2V5XSA9IHRo
aXMuX2VuZ2luZS5yZWNvcmRWZXJ0ZXhBcnJheU9iamVjdCh2YnMsIGluZGV4VG9CaW5kLCBlZmZl
Y3QpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VuZ2luZS5iaW5kVmVydGV4QXJyYXlPYmpl
Y3QodGhpcy5fdmVydGV4QXJyYXlPYmplY3RzW2VmZmVjdC5rZXldLCBpbmRleFRvQmluZCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlcworICAg
ICAqIEByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXMKKyAgICAgKi8KKyAgICBH
ZW9tZXRyeS5wcm90b3R5cGUuZ2V0VG90YWxWZXJ0aWNlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgaWYgKCF0aGlzLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3RvdGFsVmVydGljZXM7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBHZXRzIGEgc3BlY2lmaWMgdmVydGV4IGRhdGEgYXR0YWNoZWQgdG8gdGhpcyBnZW9t
ZXRyeS4gRmxvYXQgZGF0YSBpcyBjb25zdHJ1Y3RlZCBpZiB0aGUgdmVydGV4IGJ1ZmZlciBkYXRh
IGNhbm5vdCBiZSByZXR1cm5lZCBkaXJlY3RseS4KKyAgICAgKiBAcGFyYW0ga2luZCBkZWZpbmVz
IHRoZSBkYXRhIGtpbmQgKFBvc2l0aW9uLCBub3JtYWwsIGV0Yy4uLikKKyAgICAgKiBAcGFyYW0g
Y29weVdoZW5TaGFyZWQgZGVmaW5lcyBpZiB0aGUgcmV0dXJuZWQgYXJyYXkgbXVzdCBiZSBjbG9u
ZWQgdXBvbiByZXR1cm5pbmcgaXQgaWYgdGhlIGN1cnJlbnQgZ2VvbWV0cnkgaXMgc2hhcmVkIGJl
dHdlZW4gbXVsdGlwbGUgbWVzaGVzCisgICAgICogQHBhcmFtIGZvcmNlQ29weSBkZWZpbmVzIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhlIHJldHVybmVkIGFycmF5IG11c3QgYmUgY2xvbmVk
IHVwb24gcmV0dXJuaW5nIGl0CisgICAgICogQHJldHVybnMgYSBmbG9hdCBhcnJheSBjb250YWlu
aW5nIHZlcnRleCBkYXRhCisgICAgICovCisgICAgR2VvbWV0cnkucHJvdG90eXBlLmdldFZlcnRp
Y2VzRGF0YSA9IGZ1bmN0aW9uIChraW5kLCBjb3B5V2hlblNoYXJlZCwgZm9yY2VDb3B5KSB7Cisg
ICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB0aGlzLmdldFZlcnRleEJ1ZmZlcihraW5kKTsKKyAg
ICAgICAgaWYgKCF2ZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICB9CisgICAgICAgIHZhciBkYXRhID0gdmVydGV4QnVmZmVyLmdldERhdGEoKTsKKyAgICAg
ICAgaWYgKCFkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgdGlnaHRseVBhY2tlZEJ5dGVTdHJpZGUgPSB2ZXJ0ZXhCdWZmZXIuZ2V0U2l6ZSgp
ICogX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVm
ZmVyIl0uR2V0VHlwZUJ5dGVMZW5ndGgodmVydGV4QnVmZmVyLnR5cGUpOworICAgICAgICB2YXIg
Y291bnQgPSB0aGlzLl90b3RhbFZlcnRpY2VzICogdmVydGV4QnVmZmVyLmdldFNpemUoKTsKKyAg
ICAgICAgaWYgKHZlcnRleEJ1ZmZlci50eXBlICE9PSBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5GTE9BVCB8fCB2ZXJ0ZXhCdWZmZXIu
Ynl0ZVN0cmlkZSAhPT0gdGlnaHRseVBhY2tlZEJ5dGVTdHJpZGUpIHsKKyAgICAgICAgICAgIHZh
ciBjb3B5XzEgPSBbXTsKKyAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5mb3JFYWNoKGNvdW50LCBm
dW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGNvcHlfMS5wdXNoKHZhbHVlKTsgfSk7CisgICAgICAg
ICAgICByZXR1cm4gY29weV8xOworICAgICAgICB9CisgICAgICAgIGlmICghKChkYXRhIGluc3Rh
bmNlb2YgQXJyYXkpIHx8IChkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSkgfHwgdmVydGV4
QnVmZmVyLmJ5dGVPZmZzZXQgIT09IDAgfHwgZGF0YS5sZW5ndGggIT09IGNvdW50KSB7CisgICAg
ICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICAgICAgdmFy
IG9mZnNldCA9IHZlcnRleEJ1ZmZlci5ieXRlT2Zmc2V0IC8gNDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVG9vbHMiXS5T
bGljZShkYXRhLCBvZmZzZXQsIG9mZnNldCArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgeworICAgICAgICAg
ICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGRhdGEsIHZlcnRleEJ1ZmZlci5ieXRlT2Zm
c2V0LCBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2YXIgb2Zmc2V0ID0gZGF0YS5ieXRlT2Zmc2V0ICsgdmVydGV4QnVmZmVyLmJ5dGVP
ZmZzZXQ7CisgICAgICAgICAgICAgICAgaWYgKGZvcmNlQ29weSB8fCAoY29weVdoZW5TaGFyZWQg
JiYgdGhpcy5fbWVzaGVzLmxlbmd0aCAhPT0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQpOworICAgICAgICAgICAgICAgICAgICB2
YXIgc291cmNlID0gbmV3IEZsb2F0MzJBcnJheShkYXRhLmJ1ZmZlciwgb2Zmc2V0LCBjb3VudCk7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoc291cmNlKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoZGF0YS5idWZmZXIsIG9mZnNldCwgY291bnQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmb3JjZUNvcHkgfHwgKGNvcHlXaGVu
U2hhcmVkICYmIHRoaXMuX21lc2hlcy5sZW5ndGggIT09IDEpKSB7CisgICAgICAgICAgICByZXR1
cm4gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVG9vbHMiXS5TbGlj
ZShkYXRhKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFJldHVybnMgYSBib29sZWFuIGRlZmluaW5nIGlmIHRoZSB2ZXJ0ZXggZGF0YSBm
b3IgdGhlIHJlcXVlc3RlZCBga2luZGAgaXMgdXBkYXRhYmxlCisgICAgICogQHBhcmFtIGtpbmQg
ZGVmaW5lcyB0aGUgZGF0YSBraW5kIChQb3NpdGlvbiwgbm9ybWFsLCBldGMuLi4pCisgICAgICog
QHJldHVybnMgdHJ1ZSBpZiB0aGUgdmVydGV4IGJ1ZmZlciB3aXRoIHRoZSBzcGVjaWZpZWQga2lu
ZCBpcyB1cGRhdGFibGUKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuaXNWZXJ0ZXhC
dWZmZXJVcGRhdGFibGUgPSBmdW5jdGlvbiAoa2luZCkgeworICAgICAgICB2YXIgdmIgPSB0aGlz
Ll92ZXJ0ZXhCdWZmZXJzW2tpbmRdOworICAgICAgICBpZiAoIXZiKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZiLmlzVXBkYXRhYmxlKCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc3BlY2lmaWMgdmVydGV4IGJ1ZmZlcgor
ICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMgdGhlIGRhdGEga2luZCAoUG9zaXRpb24sIG5vcm1h
bCwgZXRjLi4uKQorICAgICAqIEByZXR1cm5zIGEgVmVydGV4QnVmZmVyCisgICAgICovCisgICAg
R2VvbWV0cnkucHJvdG90eXBlLmdldFZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uIChraW5kKSB7Cisg
ICAgICAgIGlmICghdGhpcy5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl92ZXJ0ZXhCdWZmZXJzW2tpbmRdOworICAg
IH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhbGwgdmVydGV4IGJ1ZmZlcnMKKyAgICAgKiBA
cmV0dXJuIGFuIG9iamVjdCBob2xkaW5nIGFsbCB2ZXJ0ZXggYnVmZmVycyBpbmRleGVkIGJ5IGtp
bmQKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuZ2V0VmVydGV4QnVmZmVycyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHkoKSkgeworICAgICAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnRleEJ1ZmZl
cnM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlm
IHNwZWNpZmljIHZlcnRleCBidWZmZXIgaXMgcHJlc2VudAorICAgICAqIEBwYXJhbSBraW5kIGRl
ZmluZXMgdGhlIGRhdGEga2luZCAoUG9zaXRpb24sIG5vcm1hbCwgZXRjLi4uKQorICAgICAqIEBy
ZXR1cm5zIHRydWUgaWYgZGF0YSBpcyBwcmVzZW50CisgICAgICovCisgICAgR2VvbWV0cnkucHJv
dG90eXBlLmlzVmVydGljZXNEYXRhUHJlc2VudCA9IGZ1bmN0aW9uIChraW5kKSB7CisgICAgICAg
IGlmICghdGhpcy5fdmVydGV4QnVmZmVycykgeworICAgICAgICAgICAgaWYgKHRoaXMuX2RlbGF5
SW5mbykgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxheUluZm8uaW5kZXhPZihr
aW5kKSAhPT0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnRleEJ1ZmZlcnNba2luZF0gIT09IHVu
ZGVmaW5lZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBsaXN0IG9mIGFsbCBhdHRh
Y2hlZCBkYXRhIGtpbmRzIChQb3NpdGlvbiwgbm9ybWFsLCBldGMuLi4pCisgICAgICogQHJldHVy
bnMgYSBsaXN0IG9mIHN0cmluZyBjb250YWluaW5nIGFsbCBraW5kcworICAgICAqLworICAgIEdl
b21ldHJ5LnByb3RvdHlwZS5nZXRWZXJ0aWNlc0RhdGFLaW5kcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAgICAgICB2YXIga2luZDsKKyAgICAgICAgaWYgKCF0
aGlzLl92ZXJ0ZXhCdWZmZXJzICYmIHRoaXMuX2RlbGF5SW5mbykgeworICAgICAgICAgICAgZm9y
IChraW5kIGluIHRoaXMuX2RlbGF5SW5mbykgeworICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNo
KGtpbmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgZm9yIChraW5kIGluIHRoaXMuX3ZlcnRleEJ1ZmZlcnMpIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQucHVzaChraW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIGluZGV4IGJ1ZmZl
cgorICAgICAqIEBwYXJhbSBpbmRpY2VzIGRlZmluZXMgdGhlIGluZGljZXMgdG8gc3RvcmUgaW4g
dGhlIGluZGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0
IGluIHRoZSB0YXJnZXQgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSBkYXRhCisgICAgICogQHBh
cmFtIGdwdU1lbW9yeU9ubHkgZGVmaW5lcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IG9ubHkg
dGhlIEdQVSBtZW1vcnkgbXVzdCBiZSB1cGRhdGVkIGxlYXZpbmcgdGhlIENQVSB2ZXJzaW9uIG9m
IHRoZSBpbmRpY2VzIHVuY2hhbmdlZCAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBH
ZW9tZXRyeS5wcm90b3R5cGUudXBkYXRlSW5kaWNlcyA9IGZ1bmN0aW9uIChpbmRpY2VzLCBvZmZz
ZXQsIGdwdU1lbW9yeU9ubHkpIHsKKyAgICAgICAgaWYgKGdwdU1lbW9yeU9ubHkgPT09IHZvaWQg
MCkgeyBncHVNZW1vcnlPbmx5ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCF0aGlzLl9pbmRleEJ1
ZmZlcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghdGhp
cy5faW5kZXhCdWZmZXJJc1VwZGF0YWJsZSkgeworICAgICAgICAgICAgdGhpcy5zZXRJbmRpY2Vz
KGluZGljZXMsIG51bGwsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdmFyIG5lZWRUb1VwZGF0ZVN1Yk1lc2hlcyA9IGluZGljZXMubGVuZ3RoICE9PSB0aGlz
Ll9pbmRpY2VzLmxlbmd0aDsKKyAgICAgICAgICAgIGlmICghZ3B1TWVtb3J5T25seSkgeworICAg
ICAgICAgICAgICAgIHRoaXMuX2luZGljZXMgPSBpbmRpY2VzLnNsaWNlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUudXBkYXRlRHluYW1pY0luZGV4QnVmZmVyKHRo
aXMuX2luZGV4QnVmZmVyLCBpbmRpY2VzLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKG5lZWRU
b1VwZGF0ZVN1Yk1lc2hlcykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2Eg
PSB0aGlzLl9tZXNoZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBtZXNoID0gX2FbX2ldOworICAgICAgICAgICAgICAgICAgICBtZXNoLl9jcmVhdGVH
bG9iYWxTdWJNZXNoKHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbmRleCBidWZm
ZXIKKyAgICAgKiBAcGFyYW0gaW5kaWNlcyBkZWZpbmVzIHRoZSBpbmRpY2VzIHRvIHN0b3JlIGlu
IHRoZSBpbmRleCBidWZmZXIKKyAgICAgKiBAcGFyYW0gdG90YWxWZXJ0aWNlcyBkZWZpbmVzIHRo
ZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXMgKGNvdWxkIGJlIG51bGwpCisgICAgICogQHBhcmFt
IHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBpbmRleCBidWZmZXIgbXVzdCBiZSBmbGFnZ2VkIGFz
IHVwZGF0YWJsZSAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90
b3R5cGUuc2V0SW5kaWNlcyA9IGZ1bmN0aW9uIChpbmRpY2VzLCB0b3RhbFZlcnRpY2VzLCB1cGRh
dGFibGUpIHsKKyAgICAgICAgaWYgKHRvdGFsVmVydGljZXMgPT09IHZvaWQgMCkgeyB0b3RhbFZl
cnRpY2VzID0gbnVsbDsgfQorICAgICAgICBpZiAodXBkYXRhYmxlID09PSB2b2lkIDApIHsgdXBk
YXRhYmxlID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHRoaXMuX2luZGV4QnVmZmVyKSB7CisgICAg
ICAgICAgICB0aGlzLl9lbmdpbmUuX3JlbGVhc2VCdWZmZXIodGhpcy5faW5kZXhCdWZmZXIpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2Rpc3Bvc2VWZXJ0ZXhBcnJheU9iamVjdHMoKTsKKyAg
ICAgICAgdGhpcy5faW5kaWNlcyA9IGluZGljZXM7CisgICAgICAgIHRoaXMuX2luZGV4QnVmZmVy
SXNVcGRhdGFibGUgPSB1cGRhdGFibGU7CisgICAgICAgIGlmICh0aGlzLl9tZXNoZXMubGVuZ3Ro
ICE9PSAwICYmIHRoaXMuX2luZGljZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX2luZGV4QnVmZmVy
ID0gdGhpcy5fZW5naW5lLmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuX2luZGljZXMsIHVwZGF0YWJs
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRvdGFsVmVydGljZXMgIT0gdW5kZWZpbmVkKSB7
IC8vIGluY2x1ZGluZyBudWxsIGFuZCB1bmRlZmluZWQKKyAgICAgICAgICAgIHRoaXMuX3RvdGFs
VmVydGljZXMgPSB0b3RhbFZlcnRpY2VzOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIF9p
ID0gMCwgX2EgPSB0aGlzLl9tZXNoZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAg
ICAgICB2YXIgbWVzaCA9IF9hW19pXTsKKyAgICAgICAgICAgIG1lc2guX2NyZWF0ZUdsb2JhbFN1
Yk1lc2godHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5ub3RpZnlVcGRhdGUoKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMK
KyAgICAgKiBAcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMKKyAgICAgKi8KKyAg
ICBHZW9tZXRyeS5wcm90b3R5cGUuZ2V0VG90YWxJbmRpY2VzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAoIXRoaXMuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpcy5faW5kaWNlcy5sZW5ndGg7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBpbmRleCBidWZmZXIgYXJyYXkKKyAgICAgKiBAcGFyYW0gY29w
eVdoZW5TaGFyZWQgZGVmaW5lcyBpZiB0aGUgcmV0dXJuZWQgYXJyYXkgbXVzdCBiZSBjbG9uZWQg
dXBvbiByZXR1cm5pbmcgaXQgaWYgdGhlIGN1cnJlbnQgZ2VvbWV0cnkgaXMgc2hhcmVkIGJldHdl
ZW4gbXVsdGlwbGUgbWVzaGVzCisgICAgICogQHBhcmFtIGZvcmNlQ29weSBkZWZpbmVzIGEgYm9v
bGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhlIHJldHVybmVkIGFycmF5IG11c3QgYmUgY2xvbmVkIHVw
b24gcmV0dXJuaW5nIGl0CisgICAgICogQHJldHVybnMgdGhlIGluZGV4IGJ1ZmZlciBhcnJheQor
ICAgICAqLworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5nZXRJbmRpY2VzID0gZnVuY3Rpb24gKGNv
cHlXaGVuU2hhcmVkLCBmb3JjZUNvcHkpIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHkoKSkg
eworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9yaWcg
PSB0aGlzLl9pbmRpY2VzOworICAgICAgICBpZiAoIWZvcmNlQ29weSAmJiAoIWNvcHlXaGVuU2hh
cmVkIHx8IHRoaXMuX21lc2hlcy5sZW5ndGggPT09IDEpKSB7CisgICAgICAgICAgICByZXR1cm4g
b3JpZzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBsZW4gPSBv
cmlnLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBjb3B5ID0gW107CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29weS5wdXNoKG9y
aWdbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGluZGV4IGJ1ZmZlcgorICAgICAq
IEByZXR1cm4gdGhlIGluZGV4IGJ1ZmZlcgorICAgICAqLworICAgIEdlb21ldHJ5LnByb3RvdHlw
ZS5nZXRJbmRleEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzUmVh
ZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMuX2luZGV4QnVmZmVyOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBH
ZW9tZXRyeS5wcm90b3R5cGUuX3JlbGVhc2VWZXJ0ZXhBcnJheU9iamVjdCA9IGZ1bmN0aW9uIChl
ZmZlY3QpIHsKKyAgICAgICAgaWYgKGVmZmVjdCA9PT0gdm9pZCAwKSB7IGVmZmVjdCA9IG51bGw7
IH0KKyAgICAgICAgaWYgKCFlZmZlY3QgfHwgIXRoaXMuX3ZlcnRleEFycmF5T2JqZWN0cykgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl92ZXJ0ZXhB
cnJheU9iamVjdHNbZWZmZWN0LmtleV0pIHsKKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5yZWxl
YXNlVmVydGV4QXJyYXlPYmplY3QodGhpcy5fdmVydGV4QXJyYXlPYmplY3RzW2VmZmVjdC5rZXld
KTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl92ZXJ0ZXhBcnJheU9iamVjdHNbZWZmZWN0Lmtl
eV07CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbGVhc2UgdGhlIGFzc29j
aWF0ZWQgcmVzb3VyY2VzIGZvciBhIHNwZWNpZmljIG1lc2gKKyAgICAgKiBAcGFyYW0gbWVzaCBk
ZWZpbmVzIHRoZSBzb3VyY2UgbWVzaAorICAgICAqIEBwYXJhbSBzaG91bGREaXNwb3NlIGRlZmlu
ZXMgaWYgdGhlIGdlb21ldHJ5IG11c3QgYmUgZGlzcG9zZWQgaWYgdGhlcmUgaXMgbm8gbW9yZSBt
ZXNoIHBvaW50aW5nIHRvIGl0CisgICAgICovCisgICAgR2VvbWV0cnkucHJvdG90eXBlLnJlbGVh
c2VGb3JNZXNoID0gZnVuY3Rpb24gKG1lc2gsIHNob3VsZERpc3Bvc2UpIHsKKyAgICAgICAgdmFy
IG1lc2hlcyA9IHRoaXMuX21lc2hlczsKKyAgICAgICAgdmFyIGluZGV4ID0gbWVzaGVzLmluZGV4
T2YobWVzaCk7CisgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBtZXNoZXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAg
bWVzaC5fZ2VvbWV0cnkgPSBudWxsOworICAgICAgICBpZiAobWVzaGVzLmxlbmd0aCA9PT0gMCAm
JiBzaG91bGREaXNwb3NlKSB7CisgICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogQXBwbHkgY3VycmVudCBnZW9tZXRyeSB0byBhIGdp
dmVuIG1lc2gKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRvIGFwcGx5IGdl
b21ldHJ5IHRvCisgICAgICovCisgICAgR2VvbWV0cnkucHJvdG90eXBlLmFwcGx5VG9NZXNoID0g
ZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKG1lc2guX2dlb21ldHJ5ID09PSB0aGlzKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHByZXZpb3VzR2Vv
bWV0cnkgPSBtZXNoLl9nZW9tZXRyeTsKKyAgICAgICAgaWYgKHByZXZpb3VzR2VvbWV0cnkpIHsK
KyAgICAgICAgICAgIHByZXZpb3VzR2VvbWV0cnkucmVsZWFzZUZvck1lc2gobWVzaCk7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIG1lc2hlcyA9IHRoaXMuX21lc2hlczsKKyAgICAgICAgLy8gbXVz
dCBiZSBkb25lIGJlZm9yZSBzZXR0aW5nIHZlcnRleEJ1ZmZlcnMgYmVjYXVzZSBvZiBtZXNoLl9j
cmVhdGVHbG9iYWxTdWJNZXNoKCkKKyAgICAgICAgbWVzaC5fZ2VvbWV0cnkgPSB0aGlzOworICAg
ICAgICB0aGlzLl9zY2VuZS5wdXNoR2VvbWV0cnkodGhpcyk7CisgICAgICAgIG1lc2hlcy5wdXNo
KG1lc2gpOworICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgIHRoaXMu
X2FwcGx5VG9NZXNoKG1lc2gpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgbWVzaC5fYm91bmRpbmdJbmZvID0gdGhpcy5fYm91bmRpbmdJbmZvOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuX3VwZGF0ZUV4dGVuZCA9IGZ1bmN0aW9uIChk
YXRhKSB7CisgICAgICAgIGlmIChkYXRhID09PSB2b2lkIDApIHsgZGF0YSA9IG51bGw7IH0KKyAg
ICAgICAgaWYgKCFkYXRhKSB7CisgICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRWZXJ0aWNlc0Rh
dGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVm
ZmVyIl0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9leHRlbmQgPSBP
YmplY3QoX01hdGhzX21hdGhfZnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9f
WyJleHRyYWN0TWluQW5kTWF4Il0pKGRhdGEsIDAsIHRoaXMuX3RvdGFsVmVydGljZXMsIHRoaXMu
Ym91bmRpbmdCaWFzLCAzKTsKKyAgICB9OworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5fYXBwbHlU
b01lc2ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICB2YXIgbnVtT2ZNZXNoZXMgPSB0aGlz
Ll9tZXNoZXMubGVuZ3RoOworICAgICAgICAvLyB2ZXJ0ZXhCdWZmZXJzCisgICAgICAgIGZvciAo
dmFyIGtpbmQgaW4gdGhpcy5fdmVydGV4QnVmZmVycykgeworICAgICAgICAgICAgaWYgKG51bU9m
TWVzaGVzID09PSAxKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1traW5k
XS5jcmVhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlz
Ll92ZXJ0ZXhCdWZmZXJzW2tpbmRdLmdldEJ1ZmZlcigpOworICAgICAgICAgICAgaWYgKGJ1ZmZl
cikgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5yZWZlcmVuY2VzID0gbnVtT2ZNZXNoZXM7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoa2luZCA9PT0gX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSB7
CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9leHRlbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fdXBkYXRlRXh0ZW5kKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIG1lc2guX2JvdW5kaW5nSW5mbyA9IG5ldyBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siQm91bmRpbmdJbmZvIl0odGhpcy5fZXh0ZW5kLm1pbmlt
dW0sIHRoaXMuX2V4dGVuZC5tYXhpbXVtKTsKKyAgICAgICAgICAgICAgICBtZXNoLl9jcmVhdGVH
bG9iYWxTdWJNZXNoKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAvL2JvdW5kaW5nIGluZm8gd2Fz
IGp1c3QgY3JlYXRlZCBhZ2Fpbiwgd29ybGQgbWF0cml4IHNob3VsZCBiZSBhcHBsaWVkIGFnYWlu
LgorICAgICAgICAgICAgICAgIG1lc2guX3VwZGF0ZUJvdW5kaW5nSW5mbygpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGluZGV4QnVmZmVyCisgICAgICAgIGlmIChudW1P
Zk1lc2hlcyA9PT0gMSAmJiB0aGlzLl9pbmRpY2VzICYmIHRoaXMuX2luZGljZXMubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgdGhpcy5faW5kZXhCdWZmZXIgPSB0aGlzLl9lbmdpbmUuY3JlYXRl
SW5kZXhCdWZmZXIodGhpcy5faW5kaWNlcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X2luZGV4QnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9pbmRleEJ1ZmZlci5yZWZlcmVuY2Vz
ID0gbnVtT2ZNZXNoZXM7CisgICAgICAgIH0KKyAgICAgICAgLy8gbW9ycGhUYXJnZXRzCisgICAg
ICAgIG1lc2guX3N5bmNHZW9tZXRyeVdpdGhNb3JwaFRhcmdldE1hbmFnZXIoKTsKKyAgICAgICAg
Ly8gaW5zdGFuY2VzCisgICAgICAgIG1lc2guc3luY2hyb25pemVJbnN0YW5jZXMoKTsKKyAgICB9
OworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5ub3RpZnlVcGRhdGUgPSBmdW5jdGlvbiAoa2luZCkg
eworICAgICAgICBpZiAodGhpcy5vbkdlb21ldHJ5VXBkYXRlZCkgeworICAgICAgICAgICAgdGhp
cy5vbkdlb21ldHJ5VXBkYXRlZCh0aGlzLCBraW5kKTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KHZhciBfaSA9IDAsIF9hID0gdGhpcy5fbWVzaGVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewor
ICAgICAgICAgICAgdmFyIG1lc2ggPSBfYVtfaV07CisgICAgICAgICAgICBtZXNoLl9tYXJrU3Vi
TWVzaGVzQXNBdHRyaWJ1dGVzRGlydHkoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogTG9hZCB0aGUgZ2VvbWV0cnkgaWYgaXQgd2FzIGZsYWdnZWQgYXMgZGVsYXkgbG9hZGVk
CisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBA
cGFyYW0gb25Mb2FkZWQgZGVmaW5lcyBhIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBnZW9tZXRy
eSBpcyBsb2FkZWQKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUubG9hZCA9IGZ1bmN0
aW9uIChzY2VuZSwgb25Mb2FkZWQpIHsKKyAgICAgICAgaWYgKHRoaXMuZGVsYXlMb2FkU3RhdGUg
PT09IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25z
dGFudHMiXS5ERUxBWUxPQURTVEFURV9MT0FESU5HKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICBpZiAo
b25Mb2FkZWQpIHsKKyAgICAgICAgICAgICAgICBvbkxvYWRlZCgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuZGVsYXlMb2FkU3Rh
dGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29u
c3RhbnRzIl0uREVMQVlMT0FEU1RBVEVfTE9BRElORzsKKyAgICAgICAgdGhpcy5fcXVldWVMb2Fk
KHNjZW5lLCBvbkxvYWRlZCk7CisgICAgfTsKKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuX3F1ZXVl
TG9hZCA9IGZ1bmN0aW9uIChzY2VuZSwgb25Mb2FkZWQpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgaWYgKCF0aGlzLmRlbGF5TG9hZGluZ0ZpbGUpIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzY2VuZS5fYWRkUGVuZGluZ0RhdGEodGhpcyk7
CisgICAgICAgIHNjZW5lLl9sb2FkRmlsZSh0aGlzLmRlbGF5TG9hZGluZ0ZpbGUsIGZ1bmN0aW9u
IChkYXRhKSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLl9kZWxheUxvYWRpbmdGdW5jdGlvbikg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90
aGlzLl9kZWxheUxvYWRpbmdGdW5jdGlvbihKU09OLnBhcnNlKGRhdGEpLCBfdGhpcyk7CisgICAg
ICAgICAgICBfdGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9MT0FERUQ7
CisgICAgICAgICAgICBfdGhpcy5fZGVsYXlJbmZvID0gW107CisgICAgICAgICAgICBzY2VuZS5f
cmVtb3ZlUGVuZGluZ0RhdGEoX3RoaXMpOworICAgICAgICAgICAgdmFyIG1lc2hlcyA9IF90aGlz
Ll9tZXNoZXM7CisgICAgICAgICAgICB2YXIgbnVtT2ZNZXNoZXMgPSBtZXNoZXMubGVuZ3RoOwor
ICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG51bU9mTWVzaGVzOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2FwcGx5VG9NZXNoKG1lc2hlc1tpbmRleF0p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9uTG9hZGVkKSB7CisgICAgICAgICAg
ICAgICAgb25Mb2FkZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgdW5kZWZpbmVkLCB0
cnVlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEludmVydCB0aGUgZ2VvbWV0cnkgdG8gbW92
ZSBmcm9tIGEgcmlnaHQgaGFuZGVkIHN5c3RlbSB0byBhIGxlZnQgaGFuZGVkIG9uZS4KKyAgICAg
Ki8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUudG9MZWZ0SGFuZGVkID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAvLyBGbGlwIGZhY2VzCisgICAgICAgIHZhciB0SW5kaWNlcyA9IHRoaXMuZ2V0SW5k
aWNlcyhmYWxzZSk7CisgICAgICAgIGlmICh0SW5kaWNlcyAhPSBudWxsICYmIHRJbmRpY2VzLmxl
bmd0aCA+IDApIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdEluZGljZXMubGVu
Z3RoOyBpICs9IDMpIHsKKyAgICAgICAgICAgICAgICB2YXIgdFRlbXAgPSB0SW5kaWNlc1tpICsg
MF07CisgICAgICAgICAgICAgICAgdEluZGljZXNbaSArIDBdID0gdEluZGljZXNbaSArIDJdOwor
ICAgICAgICAgICAgICAgIHRJbmRpY2VzW2kgKyAyXSA9IHRUZW1wOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5zZXRJbmRpY2VzKHRJbmRpY2VzKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBOZWdhdGUgcG9zaXRpb24uegorICAgICAgICB2YXIgdFBvc2l0aW9ucyA9IHRoaXMuZ2V0
VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgZmFsc2UpOworICAgICAgICBpZiAodFBvc2l0
aW9ucyAhPSBudWxsICYmIHRQb3NpdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0UG9zaXRpb25zLmxlbmd0aDsgaSArPSAzKSB7CisgICAgICAgICAg
ICAgICAgdFBvc2l0aW9uc1tpICsgMl0gPSAtdFBvc2l0aW9uc1tpICsgMl07CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHRQ
b3NpdGlvbnMsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBOZWdhdGUgbm9ybWFsLnoK
KyAgICAgICAgdmFyIHROb3JtYWxzID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2lu
ZCwgZmFsc2UpOworICAgICAgICBpZiAodE5vcm1hbHMgIT0gbnVsbCAmJiB0Tm9ybWFscy5sZW5n
dGggPiAwKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHROb3JtYWxzLmxlbmd0
aDsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgdE5vcm1hbHNbaSArIDJdID0gLXROb3JtYWxz
W2kgKyAyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc2V0VmVydGljZXNEYXRh
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZl
ciJdLk5vcm1hbEtpbmQsIHROb3JtYWxzLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8vIENhY2hlCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuX3Jl
c2V0UG9pbnRzQXJyYXlDYWNoZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fcG9zaXRp
b25zID0gbnVsbDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgR2VvbWV0cnkucHJv
dG90eXBlLl9nZW5lcmF0ZVBvaW50c0FycmF5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5fcG9zaXRpb25zKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7
CisgICAgICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Bvc2l0aW9ucyA9IFtdOwor
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4ICs9
IDMpIHsKKyAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9ucy5wdXNoKF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KGRhdGEs
IGluZGV4KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgZ2VvbWV0cnkgaXMgZGlz
cG9zZWQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBnZW9tZXRyeSB3YXMgZGlzcG9zZWQK
KyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuaXNEaXNwb3NlZCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ7CisgICAgfTsKKyAgICBHZW9tZXRy
eS5wcm90b3R5cGUuX2Rpc3Bvc2VWZXJ0ZXhBcnJheU9iamVjdHMgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGlmICh0aGlzLl92ZXJ0ZXhBcnJheU9iamVjdHMpIHsKKyAgICAgICAgICAgIGZvciAo
dmFyIGtpbmQgaW4gdGhpcy5fdmVydGV4QXJyYXlPYmplY3RzKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fZW5naW5lLnJlbGVhc2VWZXJ0ZXhBcnJheU9iamVjdCh0aGlzLl92ZXJ0ZXhBcnJheU9i
amVjdHNba2luZF0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fdmVydGV4QXJy
YXlPYmplY3RzID0ge307CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEZyZWUg
YWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgICAgICovCisgICAgR2VvbWV0cnkucHJvdG90eXBl
LmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBtZXNoZXMgPSB0aGlzLl9tZXNo
ZXM7CisgICAgICAgIHZhciBudW1PZk1lc2hlcyA9IG1lc2hlcy5sZW5ndGg7CisgICAgICAgIHZh
ciBpbmRleDsKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtT2ZNZXNoZXM7IGlu
ZGV4KyspIHsKKyAgICAgICAgICAgIHRoaXMucmVsZWFzZUZvck1lc2gobWVzaGVzW2luZGV4XSk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbWVzaGVzID0gW107CisgICAgICAgIHRoaXMuX2Rp
c3Bvc2VWZXJ0ZXhBcnJheU9iamVjdHMoKTsKKyAgICAgICAgZm9yICh2YXIga2luZCBpbiB0aGlz
Ll92ZXJ0ZXhCdWZmZXJzKSB7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzW2tpbmRd
LmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzID0ge307
CisgICAgICAgIHRoaXMuX3RvdGFsVmVydGljZXMgPSAwOworICAgICAgICBpZiAodGhpcy5faW5k
ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5fcmVsZWFzZUJ1ZmZlcih0aGlz
Ll9pbmRleEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5faW5kZXhCdWZmZXIgPSBu
dWxsOworICAgICAgICB0aGlzLl9pbmRpY2VzID0gW107CisgICAgICAgIHRoaXMuZGVsYXlMb2Fk
U3RhdGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
Q29uc3RhbnRzIl0uREVMQVlMT0FEU1RBVEVfTk9ORTsKKyAgICAgICAgdGhpcy5kZWxheUxvYWRp
bmdGaWxlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZGVsYXlMb2FkaW5nRnVuY3Rpb24gPSBudWxs
OworICAgICAgICB0aGlzLl9kZWxheUluZm8gPSBbXTsKKyAgICAgICAgdGhpcy5fYm91bmRpbmdJ
bmZvID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2NlbmUucmVtb3ZlR2VvbWV0cnkodGhpcyk7Cisg
ICAgICAgIHRoaXMuX2lzRGlzcG9zZWQgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICog
Q2xvbmUgdGhlIGN1cnJlbnQgZ2VvbWV0cnkgaW50byBhIG5ldyBnZW9tZXRyeQorICAgICAqIEBw
YXJhbSBpZCBkZWZpbmVzIHRoZSB1bmlxdWUgSUQgb2YgdGhlIG5ldyBnZW9tZXRyeQorICAgICAq
IEByZXR1cm5zIGEgbmV3IGdlb21ldHJ5IG9iamVjdAorICAgICAqLworICAgIEdlb21ldHJ5LnBy
b3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIHZhciB2ZXJ0ZXhEYXRhID0g
bmV3IF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlcnRleERhdGEiXSgpOworICAgICAgICB2ZXJ0ZXhEYXRhLmluZGljZXMgPSBbXTsKKyAgICAg
ICAgdmFyIGluZGljZXMgPSB0aGlzLmdldEluZGljZXMoKTsKKyAgICAgICAgaWYgKGluZGljZXMp
IHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBpbmRpY2VzLmxlbmd0
aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZlcnRleERhdGEuaW5kaWNlcy5wdXNoKGlu
ZGljZXNbaW5kZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgdXBk
YXRhYmxlID0gZmFsc2U7CisgICAgICAgIHZhciBzdG9wQ2hlY2tpbmcgPSBmYWxzZTsKKyAgICAg
ICAgdmFyIGtpbmQ7CisgICAgICAgIGZvciAoa2luZCBpbiB0aGlzLl92ZXJ0ZXhCdWZmZXJzKSB7
CisgICAgICAgICAgICAvLyB1c2luZyBzbGljZSgpIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBhcnJh
eSBhbmQgbm90IGp1c3QgcmVmZXJlbmNlIGl0CisgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMu
Z2V0VmVydGljZXNEYXRhKGtpbmQpOworICAgICAgICAgICAgaWYgKGRhdGEpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkgeworICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhEYXRhLnNldChuZXcgRmxvYXQzMkFycmF5KGRhdGEpLCBraW5kKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHZlcnRleERhdGEuc2V0KGRhdGEuc2xpY2UoMCksIGtpbmQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoIXN0b3BDaGVja2luZykgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgdmIgPSB0aGlzLmdldFZlcnRleEJ1ZmZlcihraW5kKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGFibGUgPSB2Yi5p
c1VwZGF0YWJsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcENoZWNraW5nID0gIXVw
ZGF0YWJsZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnko
aWQsIHRoaXMuX3NjZW5lLCB2ZXJ0ZXhEYXRhLCB1cGRhdGFibGUpOworICAgICAgICBnZW9tZXRy
eS5kZWxheUxvYWRTdGF0ZSA9IHRoaXMuZGVsYXlMb2FkU3RhdGU7CisgICAgICAgIGdlb21ldHJ5
LmRlbGF5TG9hZGluZ0ZpbGUgPSB0aGlzLmRlbGF5TG9hZGluZ0ZpbGU7CisgICAgICAgIGdlb21l
dHJ5Ll9kZWxheUxvYWRpbmdGdW5jdGlvbiA9IHRoaXMuX2RlbGF5TG9hZGluZ0Z1bmN0aW9uOwor
ICAgICAgICBmb3IgKGtpbmQgaW4gdGhpcy5fZGVsYXlJbmZvKSB7CisgICAgICAgICAgICBnZW9t
ZXRyeS5fZGVsYXlJbmZvID0gZ2VvbWV0cnkuX2RlbGF5SW5mbyB8fCBbXTsKKyAgICAgICAgICAg
IGdlb21ldHJ5Ll9kZWxheUluZm8ucHVzaChraW5kKTsKKyAgICAgICAgfQorICAgICAgICAvLyBC
b3VuZGluZyBpbmZvCisgICAgICAgIGdlb21ldHJ5Ll9ib3VuZGluZ0luZm8gPSBuZXcgX0N1bGxp
bmdfYm91bmRpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkJvdW5kaW5nSW5m
byJdKHRoaXMuX2V4dGVuZC5taW5pbXVtLCB0aGlzLl9leHRlbmQubWF4aW11bSk7CisgICAgICAg
IHJldHVybiBnZW9tZXRyeTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUg
Y3VycmVudCBnZW9tZXRyeSBpbmZvIChhbmQgbm90IHRoZSB2ZXJ0aWNlcyBkYXRhKSBpbnRvIGEg
SlNPTiBvYmplY3QKKyAgICAgKiBAcmV0dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUg
Y3VycmVudCBnZW9tZXRyeSBkYXRhICh3aXRob3V0IHRoZSB2ZXJ0aWNlcyBkYXRhKQorICAgICAq
LworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QuaWQgPSB0aGlzLmlkOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnVwZGF0YWJs
ZSA9IHRoaXMuX3VwZGF0YWJsZTsKKyAgICAgICAgaWYgKF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siVGFncyJdICYmIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siVGFncyJdLkhhc1RhZ3ModGhpcykpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QudGFncyA9IF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siVGFncyJdLkdldFRhZ3ModGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlcmlh
bGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICBHZW9tZXRyeS5wcm90b3R5cGUudG9OdW1iZXJB
cnJheSA9IGZ1bmN0aW9uIChvcmlnaW4pIHsKKyAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3Jp
Z2luKSkgeworICAgICAgICAgICAgcmV0dXJuIG9yaWdpbjsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvcmln
aW4pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgYWxsIHZl
cnRpY2VzIGRhdGEgaW50byBhIEpTT04gb2plY3QKKyAgICAgKiBAcmV0dXJucyBhIEpTT04gcmVw
cmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgZ2VvbWV0cnkgZGF0YQorICAgICAqLworICAgIEdl
b21ldHJ5LnByb3RvdHlwZS5zZXJpYWxpemVWZXJ0aWNlRGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB0aGlzLnNlcmlhbGl6ZSgpOworICAgICAg
ICBpZiAodGhpcy5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSkgeworICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5wb3NpdGlvbnMgPSB0aGlzLnRvTnVtYmVyQXJy
YXkodGhpcy5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSk7CisgICAgICAgICAgICBp
ZiAodGhpcy5pc1ZlcnRleEJ1ZmZlclVwZGF0YWJsZShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpKSB7CisgICAg
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5wb3NpdGlvbnMuX3VwZGF0YWJsZSA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNl
c0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQpKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9u
T2JqZWN0Lm5vcm1hbHMgPSB0aGlzLnRvTnVtYmVyQXJyYXkodGhpcy5nZXRWZXJ0aWNlc0RhdGEo
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVy
Il0uTm9ybWFsS2luZCkpOworICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0ZXhCdWZmZXJVcGRh
dGFibGUoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
QnVmZmVyIl0uTm9ybWFsS2luZCkpIHsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0Lm5vcm1hbHMuX3VwZGF0YWJsZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlRhbmdlbnRLaW5kKSkg
eworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50YW5nZXRzID0gdGhpcy50b051bWJl
ckFycmF5KHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlRhbmdlbnRLaW5kKSk7CisgICAgICAgICAg
ICBpZiAodGhpcy5pc1ZlcnRleEJ1ZmZlclVwZGF0YWJsZShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5UYW5nZW50S2luZCkpIHsKKyAg
ICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRhbmdldHMuX3VwZGF0YWJsZSA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNl
c0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLlVWS2luZCkpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QudXZzID0gdGhpcy50b051bWJlckFycmF5KHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWS2lu
ZCkpOworICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0ZXhCdWZmZXJVcGRhdGFibGUoX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVVZL
aW5kKSkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudXZzLl91cGRhdGFi
bGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmlz
VmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjJLaW5kKSkgeworICAgICAgICAgICAgc2VyaWFsaXph
dGlvbk9iamVjdC51djJzID0gdGhpcy50b051bWJlckFycmF5KHRoaXMuZ2V0VmVydGljZXNEYXRh
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZl
ciJdLlVWMktpbmQpKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzVmVydGV4QnVmZmVyVXBkYXRh
YmxlKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1
ZmZlciJdLlVWMktpbmQpKSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51
djJzLl91cGRhdGFibGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjNLaW5kKSkgeworICAgICAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC51djNzID0gdGhpcy50b051bWJlckFycmF5KHRoaXMuZ2V0
VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLlVWM0tpbmQpKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzVmVydGV4
QnVmZmVyVXBkYXRhYmxlKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlZlcnRleEJ1ZmZlciJdLlVWM0tpbmQpKSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXph
dGlvbk9iamVjdC51djNzLl91cGRhdGFibGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjRLaW5kKSkg
eworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51djRzID0gdGhpcy50b051bWJlckFy
cmF5KHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWNEtpbmQpKTsKKyAgICAgICAgICAgIGlmICh0
aGlzLmlzVmVydGV4QnVmZmVyVXBkYXRhYmxlKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWNEtpbmQpKSB7CisgICAgICAgICAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC51djRzLl91cGRhdGFibGUgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmlzVmVydGljZXNEYXRhUHJlc2VudChf
TWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIi
XS5VVjVLaW5kKSkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51djVzID0gdGhp
cy50b051bWJlckFycmF5KHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWNUtpbmQpKTsKKyAgICAg
ICAgICAgIGlmICh0aGlzLmlzVmVydGV4QnVmZmVyVXBkYXRhYmxlKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWNUtpbmQpKSB7Cisg
ICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51djVzLl91cGRhdGFibGUgPSB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmlzVmVydGljZXNE
YXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZXJ0ZXhCdWZmZXIiXS5VVjZLaW5kKSkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC51djZzID0gdGhpcy50b051bWJlckFycmF5KHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWNktp
bmQpKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzVmVydGV4QnVmZmVyVXBkYXRhYmxlKF9NZXNo
ZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVW
NktpbmQpKSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51djZzLl91cGRh
dGFibGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
LmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQpKSB7CisgICAgICAgICAgICBzZXJp
YWxpemF0aW9uT2JqZWN0LmNvbG9ycyA9IHRoaXMudG9OdW1iZXJBcnJheSh0aGlzLmdldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0
ZXhCdWZmZXIiXS5Db2xvcktpbmQpKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzVmVydGV4QnVm
ZmVyVXBkYXRhYmxlKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCkpIHsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0
aW9uT2JqZWN0LmNvbG9ycy5fdXBkYXRhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJ
bmRpY2VzS2luZCkpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF0cmljZXNJ
bmRpY2VzID0gdGhpcy50b051bWJlckFycmF5KHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJp
Y2VzSW5kaWNlc0tpbmQpKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF0cmlj
ZXNJbmRpY2VzLl9pc0V4cGFuZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzVmVy
dGV4QnVmZmVyVXBkYXRhYmxlKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0tpbmQpKSB7CisgICAgICAgICAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXRyaWNlc0luZGljZXMuX3VwZGF0YWJsZSA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNl
c0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpKSB7CisgICAgICAgICAgICBzZXJp
YWxpemF0aW9uT2JqZWN0Lm1hdHJpY2VzV2VpZ2h0cyA9IHRoaXMudG9OdW1iZXJBcnJheSh0aGlz
LmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKSk7CisgICAgICAgICAgICBp
ZiAodGhpcy5pc1ZlcnRleEJ1ZmZlclVwZGF0YWJsZShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKSkg
eworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF0cmljZXNXZWlnaHRzLl91
cGRhdGFibGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3QuaW5kaWNlcyA9IHRoaXMudG9OdW1iZXJBcnJheSh0aGlzLmdldEluZGlj
ZXMoKSk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAg
Ly8gU3RhdGljcworICAgIC8qKgorICAgICAqIEV4dHJhY3RzIGEgY2xvbmUgb2YgYSBtZXNoIGdl
b21ldHJ5CisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5lcyB0aGUgc291cmNlIG1lc2gKKyAgICAg
KiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgdW5pcXVlIElEIG9mIHRoZSBuZXcgZ2VvbWV0cnkgb2Jq
ZWN0CisgICAgICogQHJldHVybnMgdGhlIG5ldyBnZW9tZXRyeSBvYmplY3QKKyAgICAgKi8KKyAg
ICBHZW9tZXRyeS5FeHRyYWN0RnJvbU1lc2ggPSBmdW5jdGlvbiAobWVzaCwgaWQpIHsKKyAgICAg
ICAgdmFyIGdlb21ldHJ5ID0gbWVzaC5fZ2VvbWV0cnk7CisgICAgICAgIGlmICghZ2VvbWV0cnkp
IHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBn
ZW9tZXRyeS5jb3B5KGlkKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFlvdSBzaG91bGQgbm93
IHVzZSBUb29scy5SYW5kb21JZCgpLCB0aGlzIG1ldGhvZCBpcyBzdGlsbCBoZXJlIGZvciBsZWdh
Y3kgcmVhc29ucy4KKyAgICAgKiBJbXBsZW1lbnRhdGlvbiBmcm9tIGh0dHA6Ly9zdGFja292ZXJm
bG93LmNvbS9xdWVzdGlvbnMvMTA1MDM0L2hvdy10by1jcmVhdGUtYS1ndWlkLXV1aWQtaW4tamF2
YXNjcmlwdC8yMTE3NTIzI2Fuc3dlci0yMTE3NTIzCisgICAgICogQmUgYXdhcmUgTWF0aC5yYW5k
b20oKSBjb3VsZCBjYXVzZSBjb2xsaXNpb25zLCBidXQ6CisgICAgICogIkFsbCBidXQgNiBvZiB0
aGUgMTI4IGJpdHMgb2YgdGhlIElEIGFyZSByYW5kb21seSBnZW5lcmF0ZWQsIHdoaWNoIG1lYW5z
IHRoYXQgZm9yIGFueSB0d28gaWRzLCB0aGVyZSdzIGEgMSBpbiAyXl4xMjIgKG9yIDUuM3gxMF5e
MzYpIGNoYW5jZSB0aGV5J2xsIGNvbGxpZGUiCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29u
dGFpbmluZyBhIG5ldyBHVUlECisgICAgICovCisgICAgR2VvbWV0cnkuUmFuZG9tSWQgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOF9fWyJUb29scyJdLlJhbmRvbUlkKCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIEdlb21ldHJ5Ll9JbXBvcnRHZW9tZXRyeSA9IGZ1bmN0aW9uIChwYXJzZWRHZW9tZXRy
eSwgbWVzaCkgeworICAgICAgICB2YXIgc2NlbmUgPSBtZXNoLmdldFNjZW5lKCk7CisgICAgICAg
IC8vIEdlb21ldHJ5CisgICAgICAgIHZhciBnZW9tZXRyeUlkID0gcGFyc2VkR2VvbWV0cnkuZ2Vv
bWV0cnlJZDsKKyAgICAgICAgaWYgKGdlb21ldHJ5SWQpIHsKKyAgICAgICAgICAgIHZhciBnZW9t
ZXRyeSA9IHNjZW5lLmdldEdlb21ldHJ5QnlJRChnZW9tZXRyeUlkKTsKKyAgICAgICAgICAgIGlm
IChnZW9tZXRyeSkgeworICAgICAgICAgICAgICAgIGdlb21ldHJ5LmFwcGx5VG9NZXNoKG1lc2gp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZEdlb21l
dHJ5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgICAgIHZhciBiaW5hcnlJbmZv
ID0gbWVzaC5fYmluYXJ5SW5mbzsKKyAgICAgICAgICAgIGlmIChiaW5hcnlJbmZvLnBvc2l0aW9u
c0F0dHJEZXNjICYmIGJpbmFyeUluZm8ucG9zaXRpb25zQXR0ckRlc2MuY291bnQgPiAwKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uc0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KHBhcnNl
ZEdlb21ldHJ5LCBiaW5hcnlJbmZvLnBvc2l0aW9uc0F0dHJEZXNjLm9mZnNldCwgYmluYXJ5SW5m
by5wb3NpdGlvbnNBdHRyRGVzYy5jb3VudCk7CisgICAgICAgICAgICAgICAgbWVzaC5zZXRWZXJ0
aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVy
dGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kLCBwb3NpdGlvbnNEYXRhLCBmYWxzZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoYmluYXJ5SW5mby5ub3JtYWxzQXR0ckRlc2MgJiYgYmlu
YXJ5SW5mby5ub3JtYWxzQXR0ckRlc2MuY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgdmFy
IG5vcm1hbHNEYXRhID0gbmV3IEZsb2F0MzJBcnJheShwYXJzZWRHZW9tZXRyeSwgYmluYXJ5SW5m
by5ub3JtYWxzQXR0ckRlc2Mub2Zmc2V0LCBiaW5hcnlJbmZvLm5vcm1hbHNBdHRyRGVzYy5jb3Vu
dCk7CisgICAgICAgICAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCwg
bm9ybWFsc0RhdGEsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiaW5h
cnlJbmZvLnRhbmdldHNBdHRyRGVzYyAmJiBiaW5hcnlJbmZvLnRhbmdldHNBdHRyRGVzYy5jb3Vu
dCA+IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgdGFuZ2VudHNEYXRhID0gbmV3IEZsb2F0MzJB
cnJheShwYXJzZWRHZW9tZXRyeSwgYmluYXJ5SW5mby50YW5nZXRzQXR0ckRlc2Mub2Zmc2V0LCBi
aW5hcnlJbmZvLnRhbmdldHNBdHRyRGVzYy5jb3VudCk7CisgICAgICAgICAgICAgICAgbWVzaC5z
ZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVydGV4QnVmZmVyIl0uVGFuZ2VudEtpbmQsIHRhbmdlbnRzRGF0YSwgZmFsc2UpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJpbmFyeUluZm8udXZzQXR0ckRlc2MgJiYgYmlu
YXJ5SW5mby51dnNBdHRyRGVzYy5jb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgdXZz
RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkocGFyc2VkR2VvbWV0cnksIGJpbmFyeUluZm8udXZzQXR0
ckRlc2Mub2Zmc2V0LCBiaW5hcnlJbmZvLnV2c0F0dHJEZXNjLmNvdW50KTsKKyAgICAgICAgICAg
ICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQsIHV2c0RhdGEsIGZhbHNlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiaW5hcnlJbmZvLnV2czJBdHRyRGVzYyAmJiBi
aW5hcnlJbmZvLnV2czJBdHRyRGVzYy5jb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICB2YXIg
dXZzMkRhdGEgPSBuZXcgRmxvYXQzMkFycmF5KHBhcnNlZEdlb21ldHJ5LCBiaW5hcnlJbmZvLnV2
czJBdHRyRGVzYy5vZmZzZXQsIGJpbmFyeUluZm8udXZzMkF0dHJEZXNjLmNvdW50KTsKKyAgICAg
ICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjJLaW5kLCB1dnMyRGF0YSwgZmFs
c2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJpbmFyeUluZm8udXZzM0F0dHJE
ZXNjICYmIGJpbmFyeUluZm8udXZzM0F0dHJEZXNjLmNvdW50ID4gMCkgeworICAgICAgICAgICAg
ICAgIHZhciB1dnMzRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkocGFyc2VkR2VvbWV0cnksIGJpbmFy
eUluZm8udXZzM0F0dHJEZXNjLm9mZnNldCwgYmluYXJ5SW5mby51dnMzQXR0ckRlc2MuY291bnQp
OworICAgICAgICAgICAgICAgIG1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWM0tpbmQsIHV2czNE
YXRhLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYmluYXJ5SW5mby51
dnM0QXR0ckRlc2MgJiYgYmluYXJ5SW5mby51dnM0QXR0ckRlc2MuY291bnQgPiAwKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHV2czREYXRhID0gbmV3IEZsb2F0MzJBcnJheShwYXJzZWRHZW9tZXRy
eSwgYmluYXJ5SW5mby51dnM0QXR0ckRlc2Mub2Zmc2V0LCBiaW5hcnlJbmZvLnV2czRBdHRyRGVz
Yy5jb3VudCk7CisgICAgICAgICAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVVY0S2lu
ZCwgdXZzNERhdGEsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiaW5h
cnlJbmZvLnV2czVBdHRyRGVzYyAmJiBiaW5hcnlJbmZvLnV2czVBdHRyRGVzYy5jb3VudCA+IDAp
IHsKKyAgICAgICAgICAgICAgICB2YXIgdXZzNURhdGEgPSBuZXcgRmxvYXQzMkFycmF5KHBhcnNl
ZEdlb21ldHJ5LCBiaW5hcnlJbmZvLnV2czVBdHRyRGVzYy5vZmZzZXQsIGJpbmFyeUluZm8udXZz
NUF0dHJEZXNjLmNvdW50KTsKKyAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShf
TWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIi
XS5VVjVLaW5kLCB1dnM1RGF0YSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGJpbmFyeUluZm8udXZzNkF0dHJEZXNjICYmIGJpbmFyeUluZm8udXZzNkF0dHJEZXNjLmNv
dW50ID4gMCkgeworICAgICAgICAgICAgICAgIHZhciB1dnM2RGF0YSA9IG5ldyBGbG9hdDMyQXJy
YXkocGFyc2VkR2VvbWV0cnksIGJpbmFyeUluZm8udXZzNkF0dHJEZXNjLm9mZnNldCwgYmluYXJ5
SW5mby51dnM2QXR0ckRlc2MuY291bnQpOworICAgICAgICAgICAgICAgIG1lc2guc2V0VmVydGlj
ZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eEJ1ZmZlciJdLlVWNktpbmQsIHV2czZEYXRhLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoYmluYXJ5SW5mby5jb2xvcnNBdHRyRGVzYyAmJiBiaW5hcnlJbmZvLmNvbG9y
c0F0dHJEZXNjLmNvdW50ID4gMCkgeworICAgICAgICAgICAgICAgIHZhciBjb2xvcnNEYXRhID0g
bmV3IEZsb2F0MzJBcnJheShwYXJzZWRHZW9tZXRyeSwgYmluYXJ5SW5mby5jb2xvcnNBdHRyRGVz
Yy5vZmZzZXQsIGJpbmFyeUluZm8uY29sb3JzQXR0ckRlc2MuY291bnQpOworICAgICAgICAgICAg
ICAgIG1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCwgY29sb3JzRGF0YSwgZmFsc2Us
IGJpbmFyeUluZm8uY29sb3JzQXR0ckRlc2Muc3RyaWRlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChiaW5hcnlJbmZvLm1hdHJpY2VzSW5kaWNlc0F0dHJEZXNjICYmIGJpbmFyeUlu
Zm8ubWF0cmljZXNJbmRpY2VzQXR0ckRlc2MuY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAg
dmFyIG1hdHJpY2VzSW5kaWNlc0RhdGEgPSBuZXcgSW50MzJBcnJheShwYXJzZWRHZW9tZXRyeSwg
YmluYXJ5SW5mby5tYXRyaWNlc0luZGljZXNBdHRyRGVzYy5vZmZzZXQsIGJpbmFyeUluZm8ubWF0
cmljZXNJbmRpY2VzQXR0ckRlc2MuY291bnQpOworICAgICAgICAgICAgICAgIHZhciBmbG9hdElu
ZGljZXMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdHJpY2Vz
SW5kaWNlc0RhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4
ID0gbWF0cmljZXNJbmRpY2VzRGF0YVtpXTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXRJbmRp
Y2VzLnB1c2goaW5kZXggJiAweDAwMDAwMEZGKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXRJ
bmRpY2VzLnB1c2goKGluZGV4ICYgMHgwMDAwRkYwMCkgPj4gOCk7CisgICAgICAgICAgICAgICAg
ICAgIGZsb2F0SW5kaWNlcy5wdXNoKChpbmRleCAmIDB4MDBGRjAwMDApID4+IDE2KTsKKyAgICAg
ICAgICAgICAgICAgICAgZmxvYXRJbmRpY2VzLnB1c2goaW5kZXggPj4gMjQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNl
c0luZGljZXNLaW5kLCBmbG9hdEluZGljZXMsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChiaW5hcnlJbmZvLm1hdHJpY2VzV2VpZ2h0c0F0dHJEZXNjICYmIGJpbmFyeUlu
Zm8ubWF0cmljZXNXZWlnaHRzQXR0ckRlc2MuY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAg
dmFyIG1hdHJpY2VzV2VpZ2h0c0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KHBhcnNlZEdlb21ldHJ5
LCBiaW5hcnlJbmZvLm1hdHJpY2VzV2VpZ2h0c0F0dHJEZXNjLm9mZnNldCwgYmluYXJ5SW5mby5t
YXRyaWNlc1dlaWdodHNBdHRyRGVzYy5jb3VudCk7CisgICAgICAgICAgICAgICAgbWVzaC5zZXRW
ZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCwgbWF0cmljZXNXZWlnaHRzRGF0YSwg
ZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJpbmFyeUluZm8uaW5kaWNl
c0F0dHJEZXNjICYmIGJpbmFyeUluZm8uaW5kaWNlc0F0dHJEZXNjLmNvdW50ID4gMCkgeworICAg
ICAgICAgICAgICAgIHZhciBpbmRpY2VzRGF0YSA9IG5ldyBJbnQzMkFycmF5KHBhcnNlZEdlb21l
dHJ5LCBiaW5hcnlJbmZvLmluZGljZXNBdHRyRGVzYy5vZmZzZXQsIGJpbmFyeUluZm8uaW5kaWNl
c0F0dHJEZXNjLmNvdW50KTsKKyAgICAgICAgICAgICAgICBtZXNoLnNldEluZGljZXMoaW5kaWNl
c0RhdGEsIG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJpbmFyeUluZm8u
c3ViTWVzaGVzQXR0ckRlc2MgJiYgYmluYXJ5SW5mby5zdWJNZXNoZXNBdHRyRGVzYy5jb3VudCA+
IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgc3ViTWVzaGVzRGF0YSA9IG5ldyBJbnQzMkFycmF5
KHBhcnNlZEdlb21ldHJ5LCBiaW5hcnlJbmZvLnN1Yk1lc2hlc0F0dHJEZXNjLm9mZnNldCwgYmlu
YXJ5SW5mby5zdWJNZXNoZXNBdHRyRGVzYy5jb3VudCAqIDUpOworICAgICAgICAgICAgICAgIG1l
c2guc3ViTWVzaGVzID0gW107CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBi
aW5hcnlJbmZvLnN1Yk1lc2hlc0F0dHJEZXNjLmNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIG1hdGVyaWFsSW5kZXggPSBzdWJNZXNoZXNEYXRhWyhpICogNSkgKyAwXTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzU3RhcnQgPSBzdWJNZXNoZXNEYXRhWyhpICog
NSkgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzQ291bnQgPSBzdWJNZXNo
ZXNEYXRhWyhpICogNSkgKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4U3RhcnQg
PSBzdWJNZXNoZXNEYXRhWyhpICogNSkgKyAzXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGlu
ZGV4Q291bnQgPSBzdWJNZXNoZXNEYXRhWyhpICogNSkgKyA0XTsKKyAgICAgICAgICAgICAgICAg
ICAgX01lc2hlc19zdWJNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlN1Yk1lc2gi
XS5BZGRUb01lc2gobWF0ZXJpYWxJbmRleCwgdmVydGljZXNTdGFydCwgdmVydGljZXNDb3VudCwg
aW5kZXhTdGFydCwgaW5kZXhDb3VudCwgbWVzaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZEdlb21ldHJ5LnBvc2l0
aW9ucyAmJiBwYXJzZWRHZW9tZXRyeS5ub3JtYWxzICYmIHBhcnNlZEdlb21ldHJ5LmluZGljZXMp
IHsKKyAgICAgICAgICAgIG1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgcGFy
c2VkR2VvbWV0cnkucG9zaXRpb25zLCBwYXJzZWRHZW9tZXRyeS5wb3NpdGlvbnMuX3VwZGF0YWJs
ZSk7CisgICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBwYXJz
ZWRHZW9tZXRyeS5ub3JtYWxzLCBwYXJzZWRHZW9tZXRyeS5ub3JtYWxzLl91cGRhdGFibGUpOwor
ICAgICAgICAgICAgaWYgKHBhcnNlZEdlb21ldHJ5LnRhbmdlbnRzKSB7CisgICAgICAgICAgICAg
ICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVGFuZ2VudEtpbmQsIHBhcnNlZEdlb21ldHJ5LnRh
bmdlbnRzLCBwYXJzZWRHZW9tZXRyeS50YW5nZW50cy5fdXBkYXRhYmxlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRHZW9tZXRyeS51dnMpIHsKKyAgICAgICAgICAgICAg
ICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQsIHBhcnNlZEdlb21ldHJ5LnV2cywgcGFy
c2VkR2VvbWV0cnkudXZzLl91cGRhdGFibGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHBhcnNlZEdlb21ldHJ5LnV2czIpIHsKKyAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0
ZXhCdWZmZXIiXS5VVjJLaW5kLCBwYXJzZWRHZW9tZXRyeS51dnMyLCBwYXJzZWRHZW9tZXRyeS51
dnMyLl91cGRhdGFibGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZEdl
b21ldHJ5LnV2czMpIHsKKyAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5V
VjNLaW5kLCBwYXJzZWRHZW9tZXRyeS51dnMzLCBwYXJzZWRHZW9tZXRyeS51dnMzLl91cGRhdGFi
bGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZEdlb21ldHJ5LnV2czQp
IHsKKyAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjRLaW5kLCBwYXJz
ZWRHZW9tZXRyeS51dnM0LCBwYXJzZWRHZW9tZXRyeS51dnM0Ll91cGRhdGFibGUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZEdlb21ldHJ5LnV2czUpIHsKKyAgICAgICAg
ICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjVLaW5kLCBwYXJzZWRHZW9tZXRyeS51
dnM1LCBwYXJzZWRHZW9tZXRyeS51dnM1Ll91cGRhdGFibGUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHBhcnNlZEdlb21ldHJ5LnV2czYpIHsKKyAgICAgICAgICAgICAgICBtZXNo
LnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjZLaW5kLCBwYXJzZWRHZW9tZXRyeS51dnM2LCBwYXJzZWRH
ZW9tZXRyeS51dnM2Ll91cGRhdGFibGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHBhcnNlZEdlb21ldHJ5LmNvbG9ycykgeworICAgICAgICAgICAgICAgIG1lc2guc2V0VmVydGlj
ZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eEJ1ZmZlciJdLkNvbG9yS2luZCwgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siQ29sb3I0Il0uQ2hlY2tDb2xvcnM0KHBhcnNlZEdlb21ldHJ5LmNvbG9ycywg
cGFyc2VkR2VvbWV0cnkucG9zaXRpb25zLmxlbmd0aCAvIDMpLCBwYXJzZWRHZW9tZXRyeS5jb2xv
cnMuX3VwZGF0YWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFyc2VkR2Vv
bWV0cnkubWF0cmljZXNJbmRpY2VzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRHZW9t
ZXRyeS5tYXRyaWNlc0luZGljZXMuX2lzRXhwYW5kZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGZsb2F0SW5kaWNlcyA9IFtdOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHBhcnNlZEdlb21ldHJ5Lm1hdHJpY2VzSW5kaWNlcy5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpY2VzSW5kZXggPSBwYXJzZWRHZW9tZXRyeS5t
YXRyaWNlc0luZGljZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdEluZGljZXMu
cHVzaChtYXRyaWNlc0luZGV4ICYgMHgwMDAwMDBGRik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdEluZGljZXMucHVzaCgobWF0cmljZXNJbmRleCAmIDB4MDAwMEZGMDApID4+IDgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRJbmRpY2VzLnB1c2goKG1hdHJpY2VzSW5kZXgg
JiAweDAwRkYwMDAwKSA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdEluZGlj
ZXMucHVzaChtYXRyaWNlc0luZGV4ID4+IDI0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNL
aW5kLCBmbG9hdEluZGljZXMsIHBhcnNlZEdlb21ldHJ5Lm1hdHJpY2VzSW5kaWNlcy5fdXBkYXRh
YmxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBwYXJzZWRHZW9tZXRyeS5tYXRyaWNlc0luZGljZXMuX2lzRXhw
YW5kZWQ7CisgICAgICAgICAgICAgICAgICAgIG1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJp
Y2VzSW5kaWNlc0tpbmQsIHBhcnNlZEdlb21ldHJ5Lm1hdHJpY2VzSW5kaWNlcywgcGFyc2VkR2Vv
bWV0cnkubWF0cmljZXNJbmRpY2VzLl91cGRhdGFibGUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRHZW9tZXRyeS5tYXRyaWNlc0luZGlj
ZXNFeHRyYSkgeworICAgICAgICAgICAgICAgIGlmICghcGFyc2VkR2VvbWV0cnkubWF0cmljZXNJ
bmRpY2VzRXh0cmEuX2lzRXhwYW5kZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZsb2F0
SW5kaWNlcyA9IFtdOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBh
cnNlZEdlb21ldHJ5Lm1hdHJpY2VzSW5kaWNlc0V4dHJhLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgbWF0cmljZXNJbmRleCA9IHBhcnNlZEdlb21ldHJ5Lm1hdHJp
Y2VzSW5kaWNlc0V4dHJhW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRJbmRpY2Vz
LnB1c2gobWF0cmljZXNJbmRleCAmIDB4MDAwMDAwRkYpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXRJbmRpY2VzLnB1c2goKG1hdHJpY2VzSW5kZXggJiAweDAwMDBGRjAwKSA+PiA4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0SW5kaWNlcy5wdXNoKChtYXRyaWNlc0luZGV4
ICYgMHgwMEZGMDAwMCkgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRJbmRp
Y2VzLnB1c2gobWF0cmljZXNJbmRleCA+PiAyNCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2Vz
RXh0cmFLaW5kLCBmbG9hdEluZGljZXMsIHBhcnNlZEdlb21ldHJ5Lm1hdHJpY2VzSW5kaWNlc0V4
dHJhLl91cGRhdGFibGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnNlZEdlb21ldHJ5Lm1hdHJpY2VzSW5k
aWNlcy5faXNFeHBhbmRlZDsKKyAgICAgICAgICAgICAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0Rh
dGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVm
ZmVyIl0uTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kLCBwYXJzZWRHZW9tZXRyeS5tYXRyaWNlc0lu
ZGljZXNFeHRyYSwgcGFyc2VkR2VvbWV0cnkubWF0cmljZXNJbmRpY2VzRXh0cmEuX3VwZGF0YWJs
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBh
cnNlZEdlb21ldHJ5Lm1hdHJpY2VzV2VpZ2h0cykgeworICAgICAgICAgICAgICAgIEdlb21ldHJ5
Ll9DbGVhbk1hdHJpY2VzV2VpZ2h0cyhwYXJzZWRHZW9tZXRyeSwgbWVzaCk7CisgICAgICAgICAg
ICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCwgcGFyc2Vk
R2VvbWV0cnkubWF0cmljZXNXZWlnaHRzLCBwYXJzZWRHZW9tZXRyeS5tYXRyaWNlc1dlaWdodHMu
X3VwZGF0YWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFyc2VkR2VvbWV0
cnkubWF0cmljZXNXZWlnaHRzRXh0cmEpIHsKKyAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0
ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQsIHBhcnNlZEdlb21ldHJ5Lm1hdHJp
Y2VzV2VpZ2h0c0V4dHJhLCBwYXJzZWRHZW9tZXRyeS5tYXRyaWNlc1dlaWdodHMuX3VwZGF0YWJs
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXNoLnNldEluZGljZXMocGFyc2VkR2Vv
bWV0cnkuaW5kaWNlcywgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU3ViTWVzaGVzCisg
ICAgICAgIGlmIChwYXJzZWRHZW9tZXRyeS5zdWJNZXNoZXMpIHsKKyAgICAgICAgICAgIG1lc2gu
c3ViTWVzaGVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBzdWJJbmRleCA9IDA7IHN1Yklu
ZGV4IDwgcGFyc2VkR2VvbWV0cnkuc3ViTWVzaGVzLmxlbmd0aDsgc3ViSW5kZXgrKykgeworICAg
ICAgICAgICAgICAgIHZhciBwYXJzZWRTdWJNZXNoID0gcGFyc2VkR2VvbWV0cnkuc3ViTWVzaGVz
W3N1YkluZGV4XTsKKyAgICAgICAgICAgICAgICBfTWVzaGVzX3N1Yk1lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siU3ViTWVzaCJdLkFkZFRvTWVzaChwYXJzZWRTdWJNZXNoLm1hdGVy
aWFsSW5kZXgsIHBhcnNlZFN1Yk1lc2gudmVydGljZXNTdGFydCwgcGFyc2VkU3ViTWVzaC52ZXJ0
aWNlc0NvdW50LCBwYXJzZWRTdWJNZXNoLmluZGV4U3RhcnQsIHBhcnNlZFN1Yk1lc2guaW5kZXhD
b3VudCwgbWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gRmxhdCBz
aGFkaW5nCisgICAgICAgIGlmIChtZXNoLl9zaG91bGRHZW5lcmF0ZUZsYXRTaGFkaW5nKSB7Cisg
ICAgICAgICAgICBtZXNoLmNvbnZlcnRUb0ZsYXRTaGFkZWRNZXNoKCk7CisgICAgICAgICAgICBk
ZWxldGUgbWVzaC5fc2hvdWxkR2VuZXJhdGVGbGF0U2hhZGluZzsKKyAgICAgICAgfQorICAgICAg
ICAvLyBVcGRhdGUKKyAgICAgICAgbWVzaC5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAg
ICAgIHNjZW5lLm9uTWVzaEltcG9ydGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMobWVzaCk7
CisgICAgfTsKKyAgICBHZW9tZXRyeS5fQ2xlYW5NYXRyaWNlc1dlaWdodHMgPSBmdW5jdGlvbiAo
cGFyc2VkR2VvbWV0cnksIG1lc2gpIHsKKyAgICAgICAgdmFyIGVwc2lsb24gPSAxZS0zOworICAg
ICAgICBpZiAoIV9Mb2FkaW5nX3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siU2NlbmVMb2FkZXJGbGFncyJdLkNsZWFuQm9uZU1hdHJpeFdlaWdodHMpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgbm9JbmZsdWVuY2VCb25l
SW5kZXggPSAwLjA7CisgICAgICAgIGlmIChwYXJzZWRHZW9tZXRyeS5za2VsZXRvbklkID4gLTEp
IHsKKyAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IG1lc2guZ2V0U2NlbmUoKS5nZXRMYXN0U2tl
bGV0b25CeUlEKHBhcnNlZEdlb21ldHJ5LnNrZWxldG9uSWQpOworICAgICAgICAgICAgaWYgKCFz
a2VsZXRvbikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG5vSW5mbHVlbmNlQm9uZUluZGV4ID0gc2tlbGV0b24uYm9uZXMubGVuZ3RoOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHZhciBtYXRyaWNlc0luZGljZXMgPSBtZXNoLmdldFZlcnRpY2VzRGF0YShfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRy
aWNlc0luZGljZXNLaW5kKTsKKyAgICAgICAgdmFyIG1hdHJpY2VzSW5kaWNlc0V4dHJhID0gbWVz
aC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kKTsKKyAgICAgICAg
dmFyIG1hdHJpY2VzV2VpZ2h0cyA9IHBhcnNlZEdlb21ldHJ5Lm1hdHJpY2VzV2VpZ2h0czsKKyAg
ICAgICAgdmFyIG1hdHJpY2VzV2VpZ2h0c0V4dHJhID0gcGFyc2VkR2VvbWV0cnkubWF0cmljZXNX
ZWlnaHRzRXh0cmE7CisgICAgICAgIHZhciBpbmZsdWVuY2VycyA9IHBhcnNlZEdlb21ldHJ5Lm51
bUJvbmVJbmZsdWVuY2VyOworICAgICAgICB2YXIgc2l6ZSA9IG1hdHJpY2VzV2VpZ2h0cy5sZW5n
dGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAgICAg
ICAgICB2YXIgd2VpZ2h0ID0gMC4wOworICAgICAgICAgICAgdmFyIGZpcnN0WmVyb1dlaWdodCA9
IC0xOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHsKKyAgICAgICAg
ICAgICAgICB2YXIgdyA9IG1hdHJpY2VzV2VpZ2h0c1tpICsgal07CisgICAgICAgICAgICAgICAg
d2VpZ2h0ICs9IHc7CisgICAgICAgICAgICAgICAgaWYgKHcgPCBlcHNpbG9uICYmIGZpcnN0WmVy
b1dlaWdodCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RaZXJvV2VpZ2h0ID0gajsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWF0cmlj
ZXNXZWlnaHRzRXh0cmEpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7
IGorKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgdyA9IG1hdHJpY2VzV2VpZ2h0c0V4dHJh
W2kgKyBqXTsKKyAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ICs9IHc7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh3IDwgZXBzaWxvbiAmJiBmaXJzdFplcm9XZWlnaHQgPCAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmaXJzdFplcm9XZWlnaHQgPSBqICsgNDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChmaXJzdFplcm9XZWlnaHQgPCAwIHx8IGZpcnN0WmVyb1dlaWdodCA+IChpbmZsdWVuY2VycyAt
IDEpKSB7CisgICAgICAgICAgICAgICAgZmlyc3RaZXJvV2VpZ2h0ID0gaW5mbHVlbmNlcnMgLSAx
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHdlaWdodCA+IGVwc2lsb24pIHsKKyAg
ICAgICAgICAgICAgICB2YXIgbXdlaWdodCA9IDEuMCAvIHdlaWdodDsKKyAgICAgICAgICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICBtYXRy
aWNlc1dlaWdodHNbaSArIGpdICo9IG13ZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChtYXRyaWNlc1dlaWdodHNFeHRyYSkgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
bWF0cmljZXNXZWlnaHRzRXh0cmFbaSArIGpdICo9IG13ZWlnaHQ7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RaZXJvV2VpZ2h0ID49IDQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbWF0cmljZXNXZWlnaHRzRXh0cmFbaSArIGZpcnN0WmVyb1dlaWdodCAtIDRd
ID0gMS4wIC0gd2VpZ2h0OworICAgICAgICAgICAgICAgICAgICBtYXRyaWNlc0luZGljZXNFeHRy
YVtpICsgZmlyc3RaZXJvV2VpZ2h0IC0gNF0gPSBub0luZmx1ZW5jZUJvbmVJbmRleDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IG1hdHJpY2VzV2VpZ2h0c1tpICsgZmlyc3RaZXJvV2VpZ2h0XSA9IDEuMCAtIHdlaWdodDsKKyAg
ICAgICAgICAgICAgICAgICAgbWF0cmljZXNJbmRpY2VzW2kgKyBmaXJzdFplcm9XZWlnaHRdID0g
bm9JbmZsdWVuY2VCb25lSW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIG1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNl
c0tpbmQsIG1hdHJpY2VzSW5kaWNlcyk7CisgICAgICAgIGlmIChwYXJzZWRHZW9tZXRyeS5tYXRy
aWNlc1dlaWdodHNFeHRyYSkgeworICAgICAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0u
TWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kLCBtYXRyaWNlc0luZGljZXNFeHRyYSk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBnZW9tZXRyeSBmcm9tIHBl
cnNpc3RlZCBkYXRhIChVc2luZyAuYmFieWxvbiBmaWxlIGZvcm1hdCkKKyAgICAgKiBAcGFyYW0g
cGFyc2VkVmVydGV4RGF0YSBkZWZpbmVzIHRoZSBwZXJzaXN0ZWQgZGF0YQorICAgICAqIEBwYXJh
bSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHJvb3RVcmwg
ZGVmaW5lcyB0aGUgcm9vdCB1cmwgdG8gdXNlIHRvIGxvYWQgYXNzZXRzIChsaWtlIGRlbGF5ZWQg
ZGF0YSkKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGdlb21ldHJ5IG9iamVjdAorICAgICAqLwor
ICAgIEdlb21ldHJ5LlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZFZlcnRleERhdGEsIHNjZW5lLCBy
b290VXJsKSB7CisgICAgICAgIGlmIChzY2VuZS5nZXRHZW9tZXRyeUJ5SUQocGFyc2VkVmVydGV4
RGF0YS5pZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBudWxsIHNpbmNlIGdlb21l
dHJ5IGNvdWxkIGJlIHNvbWV0aGluZyBlbHNlIHRoYW4gYSBib3guLi4KKyAgICAgICAgfQorICAg
ICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkocGFyc2VkVmVydGV4RGF0YS5pZCwgc2Nl
bmUsIHVuZGVmaW5lZCwgcGFyc2VkVmVydGV4RGF0YS51cGRhdGFibGUpOworICAgICAgICBpZiAo
X01pc2NfdGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJUYWdzIl0pIHsKKyAgICAg
ICAgICAgIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVGFncyJdLkFk
ZFRhZ3NUbyhnZW9tZXRyeSwgcGFyc2VkVmVydGV4RGF0YS50YWdzKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocGFyc2VkVmVydGV4RGF0YS5kZWxheUxvYWRpbmdGaWxlKSB7CisgICAgICAgICAg
ICBnZW9tZXRyeS5kZWxheUxvYWRTdGF0ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9OT1RMT0FERUQ7
CisgICAgICAgICAgICBnZW9tZXRyeS5kZWxheUxvYWRpbmdGaWxlID0gcm9vdFVybCArIHBhcnNl
ZFZlcnRleERhdGEuZGVsYXlMb2FkaW5nRmlsZTsKKyAgICAgICAgICAgIGdlb21ldHJ5Ll9ib3Vu
ZGluZ0luZm8gPSBuZXcgX0N1bGxpbmdfYm91bmRpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV82X19bIkJvdW5kaW5nSW5mbyJdKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KHBhcnNlZFZlcnRleERhdGEuYm91
bmRpbmdCb3hNaW5pbXVtKSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocGFyc2VkVmVydGV4RGF0YS5ib3VuZGluZ0Jv
eE1heGltdW0pKTsKKyAgICAgICAgICAgIGdlb21ldHJ5Ll9kZWxheUluZm8gPSBbXTsKKyAgICAg
ICAgICAgIGlmIChwYXJzZWRWZXJ0ZXhEYXRhLmhhc1VWcykgeworICAgICAgICAgICAgICAgIGdl
b21ldHJ5Ll9kZWxheUluZm8ucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHBhcnNlZFZlcnRleERhdGEuaGFzVVZzMikgeworICAgICAgICAgICAgICAgIGdl
b21ldHJ5Ll9kZWxheUluZm8ucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjJLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChwYXJzZWRWZXJ0ZXhEYXRhLmhhc1VWczMpIHsKKyAgICAgICAgICAgICAgICBn
ZW9tZXRyeS5fZGVsYXlJbmZvLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVVYzS2luZCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAocGFyc2VkVmVydGV4RGF0YS5oYXNVVnM0KSB7CisgICAgICAgICAgICAgICAg
Z2VvbWV0cnkuX2RlbGF5SW5mby5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWNEtpbmQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHBhcnNlZFZlcnRleERhdGEuaGFzVVZzNSkgeworICAgICAgICAgICAgICAg
IGdlb21ldHJ5Ll9kZWxheUluZm8ucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjVLaW5kKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChwYXJzZWRWZXJ0ZXhEYXRhLmhhc1VWczYpIHsKKyAgICAgICAgICAgICAg
ICBnZW9tZXRyeS5fZGVsYXlJbmZvLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVVY2S2luZCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAocGFyc2VkVmVydGV4RGF0YS5oYXNDb2xvcnMpIHsKKyAgICAgICAgICAg
ICAgICBnZW9tZXRyeS5fZGVsYXlJbmZvLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRWZXJ0ZXhEYXRhLmhhc01hdHJpY2VzSW5kaWNlcykg
eworICAgICAgICAgICAgICAgIGdlb21ldHJ5Ll9kZWxheUluZm8ucHVzaChfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0lu
ZGljZXNLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRWZXJ0ZXhE
YXRhLmhhc01hdHJpY2VzV2VpZ2h0cykgeworICAgICAgICAgICAgICAgIGdlb21ldHJ5Ll9kZWxh
eUluZm8ucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGdlb21ldHJ5Ll9kZWxheUxvYWRpbmdGdW5jdGlvbiA9IF9NZXNoZXNfbWVzaF92ZXJ0
ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleERhdGEiXS5JbXBvcnRW
ZXJ0ZXhEYXRhOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX01lc2hl
c19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4RGF0
YSJdLkltcG9ydFZlcnRleERhdGEocGFyc2VkVmVydGV4RGF0YSwgZ2VvbWV0cnkpOworICAgICAg
ICB9CisgICAgICAgIHNjZW5lLnB1c2hHZW9tZXRyeShnZW9tZXRyeSwgdHJ1ZSk7CisgICAgICAg
IHJldHVybiBnZW9tZXRyeTsKKyAgICB9OworICAgIHJldHVybiBHZW9tZXRyeTsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL2dyb3VuZE1lc2gudHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NZXNoZXMvZ3JvdW5kTWVz
aC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogR3JvdW5kTWVzaCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJHcm91bmRNZXNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBHcm91bmRNZXNoOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xp
Yi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9idWZmZXIgKi8g
Ii4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsKKworCisKKworX01lc2hl
c19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1lc2giXS5fR3JvdW5kTWVzaFBh
cnNlciA9IGZ1bmN0aW9uIChwYXJzZWRNZXNoLCBzY2VuZSkgeworICAgIHJldHVybiBHcm91bmRN
ZXNoLlBhcnNlKHBhcnNlZE1lc2gsIHNjZW5lKTsKK307CisvKioKKyAqIE1lc2ggcmVwcmVzZW50
aW5nIHRoZSBnb3J1bmQKKyAqLwordmFyIEdyb3VuZE1lc2ggPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oR3JvdW5kTWVzaCwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBHcm91bmRNZXNo
KG5hbWUsIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5h
bWUsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICAvKiogSWYgb2N0cmVlIHNob3VsZCBiZSBnZW5l
cmF0ZWQgKi8KKyAgICAgICAgX3RoaXMuZ2VuZXJhdGVPY3RyZWUgPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiAiR3JvdW5kTWVzaCIKKyAgICAg
KiBAcmV0dXJucyAiR3JvdW5kTWVzaCIKKyAgICAgKi8KKyAgICBHcm91bmRNZXNoLnByb3RvdHlw
ZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiR3JvdW5kTWVz
aCI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR3JvdW5kTWVzaC5wcm90b3R5
cGUsICJzdWJkaXZpc2lvbnMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbWluaW11
bSBvZiB4IGFuZCB5IHN1YmRpdmlzaW9ucworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5fc3ViZGl2aXNpb25z
WCwgdGhpcy5fc3ViZGl2aXNpb25zWSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShHcm91bmRNZXNoLnByb3RvdHlwZSwgInN1YmRpdmlzaW9uc1giLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBYIHN1YmRpdmlzaW9ucworICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3ViZGl2aXNp
b25zWDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEdyb3Vu
ZE1lc2gucHJvdG90eXBlLCAic3ViZGl2aXNpb25zWSIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFkgc3ViZGl2aXNpb25zCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJkaXZpc2lvbnNZOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIGFuIG9jdHJl
ZSB0byBoZWxwIHRvIHNlbGVjdCB0aGUgcmlnaHQgc3VibWVzaGVzIGZvciByZW5kZXJpbmcsIHBp
Y2tpbmcgYW5kIGNvbGxpc2lvbiBjb21wdXRhdGlvbnMuCisgICAgICogUGxlYXNlIG5vdGUgdGhh
dCB5b3UgbXVzdCBoYXZlIGEgZGVjZW50IG51bWJlciBvZiBzdWJtZXNoZXMgdG8gZ2V0IHBlcmZv
cm1hbmNlIGltcHJvdmVtZW50cyB3aGVuIHVzaW5nIGFuIG9jdHJlZQorICAgICAqIEBwYXJhbSBj
aHVua3NDb3VudCB0aGUgbnVtYmVyIG9mIHN1YmRpdmlzaW9ucyBmb3IgeCBhbmQgeQorICAgICAq
IEBwYXJhbSBvY3RyZWVCbG9ja3NTaXplIChEZWZhdWx0OiAzMikKKyAgICAgKi8KKyAgICBHcm91
bmRNZXNoLnByb3RvdHlwZS5vcHRpbWl6ZSA9IGZ1bmN0aW9uIChjaHVua3NDb3VudCwgb2N0cmVl
QmxvY2tzU2l6ZSkgeworICAgICAgICBpZiAob2N0cmVlQmxvY2tzU2l6ZSA9PT0gdm9pZCAwKSB7
IG9jdHJlZUJsb2Nrc1NpemUgPSAzMjsgfQorICAgICAgICB0aGlzLl9zdWJkaXZpc2lvbnNYID0g
Y2h1bmtzQ291bnQ7CisgICAgICAgIHRoaXMuX3N1YmRpdmlzaW9uc1kgPSBjaHVua3NDb3VudDsK
KyAgICAgICAgdGhpcy5zdWJkaXZpZGUoY2h1bmtzQ291bnQpOworICAgICAgICAvLyBDYWxsIHRo
ZSBvY3RyZWUgc3lzdGVtIG9wdGltaXphdGlvbiBpZiBpdCBpcyBkZWZpbmVkLgorICAgICAgICB2
YXIgdGhpc0FzQW55ID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXNBc0FueS5jcmVhdGVPclVwZGF0
ZVN1Ym1lc2hlc09jdHJlZSkgeworICAgICAgICAgICAgdGhpc0FzQW55LmNyZWF0ZU9yVXBkYXRl
U3VibWVzaGVzT2N0cmVlKG9jdHJlZUJsb2Nrc1NpemUpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIGEgaGVpZ2h0ICh5KSB2YWx1ZSBpbiB0aGUgV29ybCBzeXN0
ZW0gOgorICAgICAqIHRoZSBncm91bmQgYWx0aXR1ZGUgYXQgdGhlIGNvb3JkaW5hdGVzICh4LCB6
KSBleHByZXNzZWQgaW4gdGhlIFdvcmxkIHN5c3RlbS4KKyAgICAgKiBAcGFyYW0geCB4IGNvb3Jk
aW5hdGUKKyAgICAgKiBAcGFyYW0geiB6IGNvb3JkaW5hdGUKKyAgICAgKiBAcmV0dXJucyB0aGUg
Z3JvdW5kIHkgcG9zaXRpb24gaWYgKHgsIHopIGFyZSBvdXRzaWRlIHRoZSBncm91bmQgc3VyZmFj
ZS4KKyAgICAgKi8KKyAgICBHcm91bmRNZXNoLnByb3RvdHlwZS5nZXRIZWlnaHRBdENvb3JkaW5h
dGVzID0gZnVuY3Rpb24gKHgsIHopIHsKKyAgICAgICAgdmFyIHdvcmxkID0gdGhpcy5nZXRXb3Js
ZE1hdHJpeCgpOworICAgICAgICB2YXIgaW52TWF0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbNV07CisgICAgICAg
IHdvcmxkLmludmVydFRvUmVmKGludk1hdCk7CisgICAgICAgIHZhciB0bXBWZWN0ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5W
ZWN0b3IzWzhdOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzRnJvbUZsb2F0c1RvUmVm
KHgsIDAuMCwgeiwgaW52TWF0LCB0bXBWZWN0KTsgLy8gdHJhbnNmb3JtIHgseiBpbiB0aGUgbWVz
aCBsb2NhbCBzcGFjZQorICAgICAgICB4ID0gdG1wVmVjdC54OworICAgICAgICB6ID0gdG1wVmVj
dC56OworICAgICAgICBpZiAoeCA8IHRoaXMuX21pblggfHwgeCA+IHRoaXMuX21heFggfHwgeiA8
IHRoaXMuX21pblogfHwgeiA+IHRoaXMuX21heFopIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LnBvc2l0aW9uLnk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9oZWlnaHRRdWFkcyB8
fCB0aGlzLl9oZWlnaHRRdWFkcy5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgdGhpcy5faW5p
dEhlaWdodFF1YWRzKCk7CisgICAgICAgICAgICB0aGlzLl9jb21wdXRlSGVpZ2h0UXVhZHMoKTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgZmFjZXQgPSB0aGlzLl9nZXRGYWNldEF0KHgsIHopOwor
ICAgICAgICB2YXIgeSA9IC0oZmFjZXQueCAqIHggKyBmYWNldC56ICogeiArIGZhY2V0LncpIC8g
ZmFjZXQueTsKKyAgICAgICAgLy8gcmV0dXJuIHkgaW4gdGhlIFdvcmxkIHN5c3RlbQorICAgICAg
ICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9y
MyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzRnJvbUZsb2F0c1RvUmVmKDAuMCwgeSwgMC4wLCB3b3Js
ZCwgdG1wVmVjdCk7CisgICAgICAgIHJldHVybiB0bXBWZWN0Lnk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZXR1cm5zIGEgbm9ybWFsaXplZCB2ZWN0b3IgKFZlY3RvcjMpIG9ydGhvZ29uYWwg
dG8gdGhlIGdyb3VuZAorICAgICAqIGF0IHRoZSBncm91bmQgY29vcmRpbmF0ZXMgKHgsIHopIGV4
cHJlc3NlZCBpbiB0aGUgV29ybGQgc3lzdGVtLgorICAgICAqIEBwYXJhbSB4IHggY29vcmRpbmF0
ZQorICAgICAqIEBwYXJhbSB6IHogY29vcmRpbmF0ZQorICAgICAqIEByZXR1cm5zIFZlY3RvcjMo
MC4wLCAxLjAsIDAuMCkgaWYgKHgsIHopIGFyZSBvdXRzaWRlIHRoZSBncm91bmQgc3VyZmFjZS4K
KyAgICAgKi8KKyAgICBHcm91bmRNZXNoLnByb3RvdHlwZS5nZXROb3JtYWxBdENvb3JkaW5hdGVz
ID0gZnVuY3Rpb24gKHgsIHopIHsKKyAgICAgICAgdmFyIG5vcm1hbCA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAuMCwgMS4w
LCAwLjApOworICAgICAgICB0aGlzLmdldE5vcm1hbEF0Q29vcmRpbmF0ZXNUb1JlZih4LCB6LCBu
b3JtYWwpOworICAgICAgICByZXR1cm4gbm9ybWFsOworICAgIH07CisgICAgLyoqCisgICAgICog
VXBkYXRlcyB0aGUgVmVjdG9yMyBwYXNzZWQgYSByZWZlcmVuY2Ugd2l0aCBhIG5vcm1hbGl6ZWQg
dmVjdG9yIG9ydGhvZ29uYWwgdG8gdGhlIGdyb3VuZAorICAgICAqIGF0IHRoZSBncm91bmQgY29v
cmRpbmF0ZXMgKHgsIHopIGV4cHJlc3NlZCBpbiB0aGUgV29ybGQgc3lzdGVtLgorICAgICAqIERv
ZXNuJ3QgdXB0YWRlIHRoZSByZWZlcmVuY2UgVmVjdG9yMyBpZiAoeCwgeikgYXJlIG91dHNpZGUg
dGhlIGdyb3VuZCBzdXJmYWNlLgorICAgICAqIEBwYXJhbSB4IHggY29vcmRpbmF0ZQorICAgICAq
IEBwYXJhbSB6IHogY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSByZWYgdmVjdG9yIHRvIHN0b3Jl
IHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0aGUgR3JvdW5kTWVzaC4KKyAgICAgKi8KKyAg
ICBHcm91bmRNZXNoLnByb3RvdHlwZS5nZXROb3JtYWxBdENvb3JkaW5hdGVzVG9SZWYgPSBmdW5j
dGlvbiAoeCwgeiwgcmVmKSB7CisgICAgICAgIHZhciB3b3JsZCA9IHRoaXMuZ2V0V29ybGRNYXRy
aXgoKTsKKyAgICAgICAgdmFyIHRtcE1hdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzVdOworICAgICAgICB3b3Js
ZC5pbnZlcnRUb1JlZih0bXBNYXQpOworICAgICAgICB2YXIgdG1wVmVjdCA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3JzIl0uVmVjdG9y
M1s4XTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc0Zyb21GbG9hdHNUb1JlZih4LCAw
LjAsIHosIHRtcE1hdCwgdG1wVmVjdCk7IC8vIHRyYW5zZm9ybSB4LHogaW4gdGhlIG1lc2ggbG9j
YWwgc3BhY2UKKyAgICAgICAgeCA9IHRtcFZlY3QueDsKKyAgICAgICAgeiA9IHRtcFZlY3QuejsK
KyAgICAgICAgaWYgKHggPCB0aGlzLl9taW5YIHx8IHggPiB0aGlzLl9tYXhYIHx8IHogPCB0aGlz
Ll9taW5aIHx8IHogPiB0aGlzLl9tYXhaKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2hlaWdodFF1YWRzIHx8IHRoaXMuX2hlaWdodFF1
YWRzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICB0aGlzLl9pbml0SGVpZ2h0UXVhZHMoKTsK
KyAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVIZWlnaHRRdWFkcygpOworICAgICAgICB9CisgICAg
ICAgIHZhciBmYWNldCA9IHRoaXMuX2dldEZhY2V0QXQoeCwgeik7CisgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNm
b3JtTm9ybWFsRnJvbUZsb2F0c1RvUmVmKGZhY2V0LngsIGZhY2V0LnksIGZhY2V0LnosIHdvcmxk
LCByZWYpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICogRm9y
Y2UgdGhlIGhlaWdodHMgdG8gYmUgcmVjb21wdXRlZCBmb3IgZ2V0SGVpZ2h0QXRDb29yZGluYXRl
cygpIG9yIGdldE5vcm1hbEF0Q29vcmRpbmF0ZXMoKQorICAgICogaWYgdGhlIGdyb3VuZCBoYXMg
YmVlbiB1cGRhdGVkLgorICAgICogVGhpcyBjYW4gYmUgdXNlZCBpbiB0aGUgcmVuZGVyIGxvb3Au
CisgICAgKiBAcmV0dXJucyB0aGUgR3JvdW5kTWVzaC4KKyAgICAqLworICAgIEdyb3VuZE1lc2gu
cHJvdG90eXBlLnVwZGF0ZUNvb3JkaW5hdGVIZWlnaHRzID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAoIXRoaXMuX2hlaWdodFF1YWRzIHx8IHRoaXMuX2hlaWdodFF1YWRzLmxlbmd0aCA9PSAw
KSB7CisgICAgICAgICAgICB0aGlzLl9pbml0SGVpZ2h0UXVhZHMoKTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9jb21wdXRlSGVpZ2h0UXVhZHMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICAvLyBSZXR1cm5zIHRoZSBlbGVtZW50ICJmYWNldCIgZnJvbSB0aGUgaGVpZ2h0
UXVhZHMgYXJyYXkgcmVsYXRpdmUgdG8gKHgsIHopIGxvY2FsIGNvb3JkaW5hdGVzCisgICAgR3Jv
dW5kTWVzaC5wcm90b3R5cGUuX2dldEZhY2V0QXQgPSBmdW5jdGlvbiAoeCwgeikgeworICAgICAg
ICAvLyByZXRyaWV2ZSBjb2wgYW5kIHJvdyBmcm9tIHgsIHogY29vcmRpbmF0ZXMgaW4gdGhlIGdy
b3VuZCBsb2NhbCBzeXN0ZW0KKyAgICAgICAgdmFyIGNvbCA9IE1hdGguZmxvb3IoKHggKyB0aGlz
Ll9tYXhYKSAqIHRoaXMuX3N1YmRpdmlzaW9uc1ggLyB0aGlzLl93aWR0aCk7CisgICAgICAgIHZh
ciByb3cgPSBNYXRoLmZsb29yKC0oeiArIHRoaXMuX21heFopICogdGhpcy5fc3ViZGl2aXNpb25z
WSAvIHRoaXMuX2hlaWdodCArIHRoaXMuX3N1YmRpdmlzaW9uc1kpOworICAgICAgICB2YXIgcXVh
ZCA9IHRoaXMuX2hlaWdodFF1YWRzW3JvdyAqIHRoaXMuX3N1YmRpdmlzaW9uc1ggKyBjb2xdOwor
ICAgICAgICB2YXIgZmFjZXQ7CisgICAgICAgIGlmICh6IDwgcXVhZC5zbG9wZS54ICogeCArIHF1
YWQuc2xvcGUueSkgeworICAgICAgICAgICAgZmFjZXQgPSBxdWFkLmZhY2V0MTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZhY2V0ID0gcXVhZC5mYWNldDI7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhY2V0OworICAgIH07CisgICAgLy8gIENyZWF0ZXMgYW5k
IHBvcHVsYXRlcyB0aGUgaGVpZ2h0TWFwIGFycmF5IHdpdGggImZhY2V0IiBlbGVtZW50cyA6Cisg
ICAgLy8gYSBxdWFkIGlzIHR3byB0cmlhbmd1bGFyIGZhY2V0cyBzZXBhcmF0ZWQgYnkgYSBzbG9w
ZSwgc28gYSAiZmFjZXQiIGVsZW1lbnQgaXMgMSBzbG9wZSArIDIgZmFjZXRzCisgICAgLy8gc2xv
cGUgOiBWZWN0b3IyKGMsIGgpID0gMkQgZGlhZ29uYWwgbGluZSBlcXVhdGlvbiBzZXR0aW5nIGFw
cGFydCB0d28gdHJpYW5ndWxhciBmYWNldHMgaW4gYSBxdWFkIDogeiA9IGN4ICsgaAorICAgIC8v
IGZhY2V0MSA6IFZlY3RvcjQoYSwgYiwgYywgZCkgPSBmaXJzdCBmYWNldCAzRCBwbGFuZSBlcXVh
dGlvbiA6IGF4ICsgYnkgKyBjeiArIGQgPSAwCisgICAgLy8gZmFjZXQyIDogIFZlY3RvcjQoYSwg
YiwgYywgZCkgPSBzZWNvbmQgZmFjZXQgM0QgcGxhbmUgZXF1YXRpb24gOiBheCArIGJ5ICsgY3og
KyBkID0gMAorICAgIC8vIFJldHVybnMgdGhlIEdyb3VuZE1lc2guCisgICAgR3JvdW5kTWVzaC5w
cm90b3R5cGUuX2luaXRIZWlnaHRRdWFkcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHN1
YmRpdmlzaW9uc1ggPSB0aGlzLl9zdWJkaXZpc2lvbnNYOworICAgICAgICB2YXIgc3ViZGl2aXNp
b25zWSA9IHRoaXMuX3N1YmRpdmlzaW9uc1k7CisgICAgICAgIHRoaXMuX2hlaWdodFF1YWRzID0g
bmV3IEFycmF5KCk7CisgICAgICAgIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IHN1YmRpdmlzaW9u
c1k7IHJvdysrKSB7CisgICAgICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBzdWJkaXZp
c2lvbnNYOyBjb2wrKykgeworICAgICAgICAgICAgICAgIHZhciBxdWFkID0geyBzbG9wZTogX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjIiXS5a
ZXJvKCksIGZhY2V0MTogbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3I0Il0oMC4wLCAwLjAsIDAuMCwgMC4wKSwgZmFjZXQyOiBuZXcgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjQiXSgw
LjAsIDAuMCwgMC4wLCAwLjApIH07CisgICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0UXVhZHNb
cm93ICogc3ViZGl2aXNpb25zWCArIGNvbF0gPSBxdWFkOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLy8gQ29tcHV0ZSBlYWNoIHF1
YWQgZWxlbWVudCB2YWx1ZXMgYW5kIHVwZGF0ZSB0aGUgdGhlIGhlaWdodE1hcCBhcnJheSA6Cisg
ICAgLy8gc2xvcGUgOiBWZWN0b3IyKGMsIGgpID0gMkQgZGlhZ29uYWwgbGluZSBlcXVhdGlvbiBz
ZXR0aW5nIGFwcGFydCB0d28gdHJpYW5ndWxhciBmYWNldHMgaW4gYSBxdWFkIDogeiA9IGN4ICsg
aAorICAgIC8vIGZhY2V0MSA6IFZlY3RvcjQoYSwgYiwgYywgZCkgPSBmaXJzdCBmYWNldCAzRCBw
bGFuZSBlcXVhdGlvbiA6IGF4ICsgYnkgKyBjeiArIGQgPSAwCisgICAgLy8gZmFjZXQyIDogIFZl
Y3RvcjQoYSwgYiwgYywgZCkgPSBzZWNvbmQgZmFjZXQgM0QgcGxhbmUgZXF1YXRpb24gOiBheCAr
IGJ5ICsgY3ogKyBkID0gMAorICAgIC8vIFJldHVybnMgdGhlIEdyb3VuZE1lc2guCisgICAgR3Jv
dW5kTWVzaC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHRRdWFkcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2lu
ZCk7CisgICAgICAgIGlmICghcG9zaXRpb25zKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgICAgfQorICAgICAgICB2YXIgdjEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbM107CisgICAgICAgIHZh
ciB2MiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJU
bXBWZWN0b3JzIl0uVmVjdG9yM1syXTsKKyAgICAgICAgdmFyIHYzID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzFd
OworICAgICAgICB2YXIgdjQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF07CisgICAgICAgIHZhciB2MXYyID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3Rv
cnMiXS5WZWN0b3IzWzRdOworICAgICAgICB2YXIgdjF2MyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1s1XTsKKyAg
ICAgICAgdmFyIHYxdjQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbNl07CisgICAgICAgIHZhciBub3JtMSA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3Jz
Il0uVmVjdG9yM1s3XTsKKyAgICAgICAgdmFyIG5vcm0yID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzhdOworICAg
ICAgICB2YXIgaSA9IDA7CisgICAgICAgIHZhciBqID0gMDsKKyAgICAgICAgdmFyIGsgPSAwOwor
ICAgICAgICB2YXIgY2QgPSAwOyAvLyAyRCBzbG9wZSBjb2VmZmljaWVudCA6IHogPSBjZCAqIHgg
KyBoCisgICAgICAgIHZhciBoID0gMDsKKyAgICAgICAgdmFyIGQxID0gMDsgLy8gZmFjZXQgcGxh
bmUgZXF1YXRpb24gOiBheCArIGJ5ICsgY3ogKyBkID0gMAorICAgICAgICB2YXIgZDIgPSAwOwor
ICAgICAgICB2YXIgc3ViZGl2aXNpb25zWCA9IHRoaXMuX3N1YmRpdmlzaW9uc1g7CisgICAgICAg
IHZhciBzdWJkaXZpc2lvbnNZID0gdGhpcy5fc3ViZGl2aXNpb25zWTsKKyAgICAgICAgZm9yICh2
YXIgcm93ID0gMDsgcm93IDwgc3ViZGl2aXNpb25zWTsgcm93KyspIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIGNvbCA9IDA7IGNvbCA8IHN1YmRpdmlzaW9uc1g7IGNvbCsrKSB7CisgICAgICAgICAg
ICAgICAgaSA9IGNvbCAqIDM7CisgICAgICAgICAgICAgICAgaiA9IHJvdyAqIChzdWJkaXZpc2lv
bnNYICsgMSkgKiAzOworICAgICAgICAgICAgICAgIGsgPSAocm93ICsgMSkgKiAoc3ViZGl2aXNp
b25zWCArIDEpICogMzsKKyAgICAgICAgICAgICAgICB2MS54ID0gcG9zaXRpb25zW2ogKyBpXTsK
KyAgICAgICAgICAgICAgICB2MS55ID0gcG9zaXRpb25zW2ogKyBpICsgMV07CisgICAgICAgICAg
ICAgICAgdjEueiA9IHBvc2l0aW9uc1tqICsgaSArIDJdOworICAgICAgICAgICAgICAgIHYyLngg
PSBwb3NpdGlvbnNbaiArIGkgKyAzXTsKKyAgICAgICAgICAgICAgICB2Mi55ID0gcG9zaXRpb25z
W2ogKyBpICsgNF07CisgICAgICAgICAgICAgICAgdjIueiA9IHBvc2l0aW9uc1tqICsgaSArIDVd
OworICAgICAgICAgICAgICAgIHYzLnggPSBwb3NpdGlvbnNbayArIGldOworICAgICAgICAgICAg
ICAgIHYzLnkgPSBwb3NpdGlvbnNbayArIGkgKyAxXTsKKyAgICAgICAgICAgICAgICB2My56ID0g
cG9zaXRpb25zW2sgKyBpICsgMl07CisgICAgICAgICAgICAgICAgdjQueCA9IHBvc2l0aW9uc1tr
ICsgaSArIDNdOworICAgICAgICAgICAgICAgIHY0LnkgPSBwb3NpdGlvbnNbayArIGkgKyA0XTsK
KyAgICAgICAgICAgICAgICB2NC56ID0gcG9zaXRpb25zW2sgKyBpICsgNV07CisgICAgICAgICAg
ICAgICAgLy8gMkQgc2xvcGUgVjFWNAorICAgICAgICAgICAgICAgIGNkID0gKHY0LnogLSB2MS56
KSAvICh2NC54IC0gdjEueCk7CisgICAgICAgICAgICAgICAgaCA9IHYxLnogLSBjZCAqIHYxLng7
IC8vIHYxIGJlbG9uZ3MgdG8gdGhlIHNsb3BlCisgICAgICAgICAgICAgICAgLy8gZmFjZXQgZXF1
YXRpb25zIDoKKyAgICAgICAgICAgICAgICAvLyB3ZSBjb21wdXRlIGVhY2ggZmFjZXQgbm9ybWFs
IHZlY3RvcgorICAgICAgICAgICAgICAgIC8vIHRoZSBlcXVhdGlvbiBvZiB0aGUgZmFjZXQgcGxh
bmUgaXMgOiBub3JtLnggKiB4ICsgbm9ybS55ICogeSArIG5vcm0ueiAqIHogKyBkID0gMAorICAg
ICAgICAgICAgICAgIC8vIHdlIGNvbXB1dGUgdGhlIHZhbHVlIGQgYnkgYXBwbHlpbmcgdGhlIGVx
dWF0aW9uIHRvIHYxIHdoaWNoIGJlbG9uZ3MgdG8gdGhlIHBsYW5lCisgICAgICAgICAgICAgICAg
Ly8gdGhlbiB3ZSBzdG9yZSB0aGUgZmFjZXQgZXF1YXRpb24gaW4gYSBWZWN0b3I0CisgICAgICAg
ICAgICAgICAgdjIuc3VidHJhY3RUb1JlZih2MSwgdjF2Mik7CisgICAgICAgICAgICAgICAgdjMu
c3VidHJhY3RUb1JlZih2MSwgdjF2Myk7CisgICAgICAgICAgICAgICAgdjQuc3VidHJhY3RUb1Jl
Zih2MSwgdjF2NCk7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Dcm9zc1RvUmVmKHYxdjQsIHYxdjMsIG5v
cm0xKTsgLy8gY2F1dGlvbiA6IENyb3NzVG9SZWYgdXNlcyB0aGUgVG1wIGNsYXNzCisgICAgICAg
ICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlY3RvcjMiXS5Dcm9zc1RvUmVmKHYxdjIsIHYxdjQsIG5vcm0yKTsKKyAgICAgICAgICAgICAg
ICBub3JtMS5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICBub3JtMi5ub3JtYWxpemUoKTsK
KyAgICAgICAgICAgICAgICBkMSA9IC0obm9ybTEueCAqIHYxLnggKyBub3JtMS55ICogdjEueSAr
IG5vcm0xLnogKiB2MS56KTsKKyAgICAgICAgICAgICAgICBkMiA9IC0obm9ybTIueCAqIHYyLngg
KyBub3JtMi55ICogdjIueSArIG5vcm0yLnogKiB2Mi56KTsKKyAgICAgICAgICAgICAgICB2YXIg
cXVhZCA9IHRoaXMuX2hlaWdodFF1YWRzW3JvdyAqIHN1YmRpdmlzaW9uc1ggKyBjb2xdOworICAg
ICAgICAgICAgICAgIHF1YWQuc2xvcGUuY29weUZyb21GbG9hdHMoY2QsIGgpOworICAgICAgICAg
ICAgICAgIHF1YWQuZmFjZXQxLmNvcHlGcm9tRmxvYXRzKG5vcm0xLngsIG5vcm0xLnksIG5vcm0x
LnosIGQxKTsKKyAgICAgICAgICAgICAgICBxdWFkLmZhY2V0Mi5jb3B5RnJvbUZsb2F0cyhub3Jt
Mi54LCBub3JtMi55LCBub3JtMi56LCBkMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRo
aXMgZ3JvdW5kIG1lc2gKKyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlvbk9iamVjdCBvYmplY3Qg
dG8gd3JpdGUgc2VyaWFsaXphdGlvbiB0bworICAgICAqLworICAgIEdyb3VuZE1lc2gucHJvdG90
eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0KSB7CisgICAgICAg
IF9zdXBlci5wcm90b3R5cGUuc2VyaWFsaXplLmNhbGwodGhpcywgc2VyaWFsaXphdGlvbk9iamVj
dCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc3ViZGl2aXNpb25zWCA9IHRoaXMuX3N1
YmRpdmlzaW9uc1g7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc3ViZGl2aXNpb25zWSA9
IHRoaXMuX3N1YmRpdmlzaW9uc1k7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWluWCA9
IHRoaXMuX21pblg7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF4WCA9IHRoaXMuX21h
eFg7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWluWiA9IHRoaXMuX21pblo7CisgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF4WiA9IHRoaXMuX21heFo7CisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3Qud2lkdGggPSB0aGlzLl93aWR0aDsKKyAgICAgICAgc2VyaWFsaXphdGlv
bk9iamVjdC5oZWlnaHQgPSB0aGlzLl9oZWlnaHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQ
YXJzZXMgYSBzZXJpYWxpemVkIGdyb3VuZCBtZXNoCisgICAgICogQHBhcmFtIHBhcnNlZE1lc2gg
dGhlIHNlcmlhbGl6ZWQgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSB0aGUgc2NlbmUgdG8gY3Jl
YXRlIHRoZSBncm91bmQgbWVzaCBpbgorICAgICAqIEByZXR1cm5zIHRoZSBjcmVhdGVkIGdyb3Vu
ZCBtZXNoCisgICAgICovCisgICAgR3JvdW5kTWVzaC5QYXJzZSA9IGZ1bmN0aW9uIChwYXJzZWRN
ZXNoLCBzY2VuZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEdyb3VuZE1lc2gocGFyc2Vk
TWVzaC5uYW1lLCBzY2VuZSk7CisgICAgICAgIHJlc3VsdC5fc3ViZGl2aXNpb25zWCA9IHBhcnNl
ZE1lc2guc3ViZGl2aXNpb25zWCB8fCAxOworICAgICAgICByZXN1bHQuX3N1YmRpdmlzaW9uc1kg
PSBwYXJzZWRNZXNoLnN1YmRpdmlzaW9uc1kgfHwgMTsKKyAgICAgICAgcmVzdWx0Ll9taW5YID0g
cGFyc2VkTWVzaC5taW5YOworICAgICAgICByZXN1bHQuX21heFggPSBwYXJzZWRNZXNoLm1heFg7
CisgICAgICAgIHJlc3VsdC5fbWluWiA9IHBhcnNlZE1lc2gubWluWjsKKyAgICAgICAgcmVzdWx0
Ll9tYXhaID0gcGFyc2VkTWVzaC5tYXhaOworICAgICAgICByZXN1bHQuX3dpZHRoID0gcGFyc2Vk
TWVzaC53aWR0aDsKKyAgICAgICAgcmVzdWx0Ll9oZWlnaHQgPSBwYXJzZWRNZXNoLmhlaWdodDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIHJldHVybiBHcm91bmRNZXNoOwor
fShfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWVzaCJdKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL2luZGV4LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hlcy9pbmRleC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFic3RyYWN0
TWVzaCwgQnVmZmVyLCBWZXJ0ZXhCdWZmZXIsIENTRywgR2VvbWV0cnksIEdyb3VuZE1lc2gsIFRy
YWlsTWVzaCwgSW5zdGFuY2VkTWVzaCwgTGluZXNNZXNoLCBJbnN0YW5jZWRMaW5lc01lc2gsIF9D
cmVhdGlvbkRhdGFTdG9yYWdlLCBfSW5zdGFuY2VzQmF0Y2gsIE1lc2gsIFZlcnRleERhdGEsIE1l
c2hCdWlsZGVyLCBTaW1wbGlmaWNhdGlvblNldHRpbmdzLCBTaW1wbGlmaWNhdGlvblF1ZXVlLCBT
aW1wbGlmaWNhdGlvblR5cGUsIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQsIFBvbHln
b24sIFBvbHlnb25NZXNoQnVpbGRlciwgQmFzZVN1Yk1lc2gsIFN1Yk1lc2gsIE1lc2hMT0RMZXZl
bCwgVHJhbnNmb3JtTm9kZSwgQm94QnVpbGRlciwgU3BoZXJlQnVpbGRlciwgQ3lsaW5kZXJCdWls
ZGVyLCBUb3J1c0J1aWxkZXIsIExpbmVzQnVpbGRlciwgUGxhbmVCdWlsZGVyLCBHcm91bmRCdWls
ZGVyLCBEYXRhQnVmZmVyLCBXZWJHTERhdGFCdWZmZXIsIFdlYkdQVURhdGFCdWZmZXIsIERyYWNv
Q29tcHJlc3Npb24sIFRpbGVkQm94QnVpbGRlciwgRGlzY0J1aWxkZXIsIFJpYmJvbkJ1aWxkZXIs
IEhlbWlzcGhlcmVCdWlsZGVyLCBUb3J1c0tub3RCdWlsZGVyLCBQb2x5Z29uQnVpbGRlciwgU2hh
cGVCdWlsZGVyLCBMYXRoZUJ1aWxkZXIsIFRpbGVkUGxhbmVCdWlsZGVyLCBUdWJlQnVpbGRlciwg
UG9seWhlZHJvbkJ1aWxkZXIsIEljb1NwaGVyZUJ1aWxkZXIsIERlY2FsQnVpbGRlciAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Fic3RyYWN0TWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hYnN0
cmFjdE1lc2ggKi8gIi4vTWVzaGVzL2Fic3RyYWN0TWVzaC50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJBYnN0cmFjdE1lc2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hYnN0cmFjdE1lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siQWJzdHJhY3RNZXNoIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJCdWZmZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQnVmZmVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlZlcnRleEJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfQ29tcHJlc3Npb25faW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQ29tcHJlc3Npb24vaW5kZXggKi8gIi4vTWVz
aGVzL0NvbXByZXNzaW9uL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRyYWNvQ29tcHJl
c3Npb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Db21wcmVzc2lvbl9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJEcmFjb0NvbXByZXNzaW9uIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2NzZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9jc2cgKi8gIi4vTWVzaGVzL2NzZy50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJDU0ciLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jc2dfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siQ1NHIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2dlb21l
dHJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL2dlb21ldHJ5ICovICIuL01lc2hlcy9nZW9tZXRyeS50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJHZW9tZXRyeSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2dlb21ldHJ5X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIkdlb21ldHJ5Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2dyb3VuZE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vZ3JvdW5kTWVzaCAqLyAiLi9NZXNoZXMvZ3JvdW5kTWVzaC50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJHcm91bmRNZXNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZ3JvdW5k
TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJHcm91bmRNZXNoIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RyYWlsTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90cmFpbE1lc2ggKi8gIi4vTWVzaGVz
L3RyYWlsTWVzaC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmFpbE1lc2giLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF90cmFpbE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVHJhaWxN
ZXNoIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2luc3RhbmNlZE1lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaW5z
dGFuY2VkTWVzaCAqLyAiLi9NZXNoZXMvaW5zdGFuY2VkTWVzaC50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJJbnN0YW5jZWRNZXNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5zdGFuY2VkTWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJJbnN0YW5jZWRNZXNoIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2xpbmVzTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9saW5lc01lc2ggKi8gIi4vTWVzaGVzL2xp
bmVzTWVzaC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaW5lc01lc2giLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9saW5lc01lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTGluZXNNZXNo
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkluc3RhbmNlZExpbmVzTWVzaCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2xpbmVzTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJJbnN0
YW5jZWRMaW5lc01lc2giXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9t
ZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9DcmVhdGlvbkRh
dGFTdG9yYWdlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOV9fWyJfQ3JlYXRpb25EYXRhU3RvcmFnZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJfSW5zdGFuY2VzQmF0Y2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIl9JbnN0YW5jZXNCYXRjaCJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJNZXNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOV9fWyJNZXNoIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmVydGV4RGF0YSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siVmVydGV4RGF0
YSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoQnVpbGRlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWVzaEJ1
aWxkZXIgKi8gIi4vTWVzaGVzL21lc2hCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1l
c2hCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWVzaEJ1aWxkZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzExX19bIk1lc2hCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX21lc2hTaW1wbGlmaWNhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWVzaFNpbXBsaWZpY2F0aW9uICovICIuL01l
c2hlcy9tZXNoU2ltcGxpZmljYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2ltcGxpZmlj
YXRpb25TZXR0aW5ncyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21lc2hTaW1wbGlmaWNhdGlvbl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siU2ltcGxpZmljYXRpb25TZXR0aW5ncyJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTaW1wbGlmaWNhdGlvblF1ZXVlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfbWVzaFNpbXBsaWZpY2F0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9f
WyJTaW1wbGlmaWNhdGlvblF1ZXVlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbXBsaWZp
Y2F0aW9uVHlwZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21lc2hTaW1wbGlmaWNhdGlvbl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siU2ltcGxpZmljYXRpb25UeXBlIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hTaW1wbGlmaWNhdGlvblNjZW5lQ29tcG9uZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9tZXNoU2ltcGxpZmljYXRpb25TY2VuZUNvbXBvbmVudCAqLyAiLi9NZXNoZXMvbWVzaFNpbXBs
aWZpY2F0aW9uU2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2ltcGxpY2F0
aW9uUXVldWVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21lc2hTaW1wbGlm
aWNhdGlvblNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJTaW1w
bGljYXRpb25RdWV1ZVNjZW5lQ29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX3BvbHlnb25NZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9wb2x5Z29uTWVzaCAqLyAiLi9NZXNoZXMvcG9seWdvbk1lc2gu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWdvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Bv
bHlnb25NZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJQb2x5Z29uIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlBvbHlnb25NZXNoQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX3BvbHlnb25NZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJQb2x5Z29uTWVz
aEJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3ViTWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3Vi
TWVzaCAqLyAiLi9NZXNoZXMvc3ViTWVzaC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCYXNlU3Vi
TWVzaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N1Yk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE1X19bIkJhc2VTdWJNZXNoIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN1Yk1lc2gi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdWJNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
NV9fWyJTdWJNZXNoIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hMT0RM
ZXZlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vbWVzaExPRExldmVsICovICIuL01lc2hlcy9tZXNoTE9ETGV2ZWwudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTWVzaExPRExldmVsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWVzaExPRExl
dmVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJNZXNoTE9ETGV2ZWwiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdHJhbnNmb3JtTm9kZSAq
LyAiLi9NZXNoZXMvdHJhbnNmb3JtTm9kZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmFuc2Zv
cm1Ob2RlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTdfX1siVHJhbnNmb3JtTm9kZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9CdWlsZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQnVpbGRlcnMvaW5kZXggKi8gIi4vTWVzaGVzL0J1
aWxkZXJzL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJveEJ1aWxkZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9CdWlsZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThf
X1siQm94QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGhlcmVCdWlsZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE4X19bIlNwaGVyZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3lsaW5k
ZXJCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE4X19bIkN5bGluZGVyQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJUb3J1c0J1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CdWlsZGVyc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siVG9ydXNCdWlsZGVyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkxpbmVzQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0J1aWxk
ZXJzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJMaW5lc0J1aWxkZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxhbmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfQnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIlBsYW5lQnVp
bGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHcm91bmRCdWlsZGVyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfQnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19b
Ikdyb3VuZEJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGlsZWRCb3hCdWlsZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE4X19bIlRpbGVkQm94QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJE
aXNjQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0J1aWxkZXJzX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xOF9fWyJEaXNjQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJSaWJib25CdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIlJpYmJvbkJ1aWxkZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiSGVtaXNwaGVyZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9C
dWlsZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siSGVtaXNwaGVyZUJ1
aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG9ydXNLbm90QnVpbGRlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0J1aWxkZXJzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
OF9fWyJUb3J1c0tub3RCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvbHlnb25C
dWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE4X19bIlBvbHlnb25CdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlNoYXBlQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0J1aWxkZXJzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJTaGFwZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTGF0aGVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIkxhdGhlQnVpbGRlciJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJUaWxlZFBsYW5lQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0J1aWxkZXJzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJUaWxlZFBs
YW5lQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUdWJlQnVpbGRlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0J1aWxkZXJzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
OF9fWyJUdWJlQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2x5aGVkcm9uQnVp
bGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0J1aWxkZXJzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOF9fWyJQb2x5aGVkcm9uQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJJY29TcGhlcmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIkljb1NwaGVyZUJ1aWxkZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRGVjYWxCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
QnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIkRlY2FsQnVpbGRl
ciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kYXRhQnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kYXRhQnVm
ZmVyICovICIuL01lc2hlcy9kYXRhQnVmZmVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRhdGFC
dWZmZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xOV9fWyJEYXRhQnVmZmVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1dlYkdMX3dlYkdMRGF0YUJ1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vV2ViR0wvd2ViR0xEYXRhQnVmZmVyICovICIuL01l
c2hlcy9XZWJHTC93ZWJHTERhdGFCdWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViR0xE
YXRhQnVmZmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfV2ViR0xfd2ViR0xEYXRhQnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJXZWJHTERhdGFCdWZmZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfV2ViR1BVX3dlYmdwdURhdGFCdWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzIxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1dlYkdQVS93
ZWJncHVEYXRhQnVmZmVyICovICIuL01lc2hlcy9XZWJHUFUvd2ViZ3B1RGF0YUJ1ZmZlci50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJXZWJHUFVEYXRhQnVmZmVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfV2ViR1BVX3dlYmdwdURhdGFCdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19b
IldlYkdQVURhdGFCdWZmZXIiXTsgfSk7CisKKworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvaW5zdGFuY2Vk
TWVzaC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL01lc2hlcy9pbnN0YW5jZWRNZXNoLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBJbnN0YW5jZWRNZXNoICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkluc3RhbmNlZE1lc2giLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEluc3RhbmNlZE1lc2g7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0
b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9hYnN0cmFj
dE1lc2ggKi8gIi4vTWVzaGVzL2Fic3RyYWN0TWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWVwQ29waWVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2RlZXBDb3Bp
ZXIgKi8gIi4vTWlzYy9kZWVwQ29waWVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vdHJhbnNmb3JtTm9kZSAqLyAiLi9NZXNoZXMvdHJhbnNmb3JtTm9kZS50
cyIpOworCisKKworCisKKworCitfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siTWVzaCJdLl9pbnN0YW5jZWRNZXNoRmFjdG9yeSA9IGZ1bmN0aW9uIChuYW1lLCBtZXNo
KSB7CisgICAgcmV0dXJuIG5ldyBJbnN0YW5jZWRNZXNoKG5hbWUsIG1lc2gpOworfTsKKy8qKgor
ICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBiYXNlZCBvbiBhIHNvdXJjZSBtZXNoLgorICovCit2YXIg
SW5zdGFuY2VkTWVzaCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShJbnN0YW5jZWRN
ZXNoLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIEluc3RhbmNlZE1lc2gobmFtZSwgc291cmNlKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNvdXJjZS5nZXRT
Y2VuZSgpKSB8fCB0aGlzOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhpcy5f
aW5kZXhJblNvdXJjZU1lc2hJbnN0YW5jZUFycmF5ID0gLTE7CisgICAgICAgIHNvdXJjZS5hZGRJ
bnN0YW5jZShfdGhpcyk7CisgICAgICAgIF90aGlzLl9zb3VyY2VNZXNoID0gc291cmNlOworICAg
ICAgICBfdGhpcy5fdW5JbmRleGVkID0gc291cmNlLl91bkluZGV4ZWQ7CisgICAgICAgIF90aGlz
LnBvc2l0aW9uLmNvcHlGcm9tKHNvdXJjZS5wb3NpdGlvbik7CisgICAgICAgIF90aGlzLnJvdGF0
aW9uLmNvcHlGcm9tKHNvdXJjZS5yb3RhdGlvbik7CisgICAgICAgIF90aGlzLnNjYWxpbmcuY29w
eUZyb20oc291cmNlLnNjYWxpbmcpOworICAgICAgICBpZiAoc291cmNlLnJvdGF0aW9uUXVhdGVy
bmlvbikgeworICAgICAgICAgICAgX3RoaXMucm90YXRpb25RdWF0ZXJuaW9uID0gc291cmNlLnJv
dGF0aW9uUXVhdGVybmlvbi5jbG9uZSgpOworICAgICAgICB9CisgICAgICAgIF90aGlzLmluZmlu
aXRlRGlzdGFuY2UgPSBzb3VyY2UuaW5maW5pdGVEaXN0YW5jZTsKKyAgICAgICAgX3RoaXMuc2V0
UGl2b3RNYXRyaXgoc291cmNlLmdldFBpdm90TWF0cml4KCkpOworICAgICAgICBfdGhpcy5yZWZy
ZXNoQm91bmRpbmdJbmZvKCk7CisgICAgICAgIF90aGlzLl9zeW5jU3ViTWVzaGVzKCk7CisgICAg
ICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3Ry
aW5nICJJbnN0YW5jZWRNZXNoIi4KKyAgICAgKi8KKyAgICBJbnN0YW5jZWRNZXNoLnByb3RvdHlw
ZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiSW5zdGFuY2Vk
TWVzaCI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5zdGFuY2VkTWVzaC5w
cm90b3R5cGUsICJsaWdodFNvdXJjZXMiLCB7CisgICAgICAgIC8qKiBHZXRzIHRoZSBsaXN0IG9m
IGxpZ2h0cyBhZmZlY3RpbmcgdGhhdCBtZXNoICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZU1lc2guX2xpZ2h0U291cmNlczsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgSW5zdGFuY2VkTWVzaC5wcm90b3R5cGUuX3Jlc3luY0xpZ2h0
U291cmNlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gRG8gbm90aGluZyBhcyBhbGwgdGhl
IHdvcmsgd2lsbCBiZSBkb25lIGJ5IHNvdXJjZSBtZXNoCisgICAgfTsKKyAgICBJbnN0YW5jZWRN
ZXNoLnByb3RvdHlwZS5fcmVzeW5jTGlnaFNvdXJjZSA9IGZ1bmN0aW9uIChsaWdodCkgeworICAg
ICAgICAvLyBEbyBub3RoaW5nIGFzIGFsbCB0aGUgd29yayB3aWxsIGJlIGRvbmUgYnkgc291cmNl
IG1lc2gKKyAgICB9OworICAgIEluc3RhbmNlZE1lc2gucHJvdG90eXBlLl9yZW1vdmVMaWdodFNv
dXJjZSA9IGZ1bmN0aW9uIChsaWdodCwgZGlzcG9zZSkgeworICAgICAgICAvLyBEbyBub3RoaW5n
IGFzIGFsbCB0aGUgd29yayB3aWxsIGJlIGRvbmUgYnkgc291cmNlIG1lc2gKKyAgICB9OworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnN0YW5jZWRNZXNoLnByb3RvdHlwZSwgInJlY2VpdmVT
aGFkb3dzIiwgeworICAgICAgICAvLyBNZXRob2RzCisgICAgICAgIC8qKgorICAgICAgICAgKiBJ
ZiB0aGUgc291cmNlIG1lc2ggcmVjZWl2ZXMgc2hhZG93cworICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlTWVzaC5y
ZWNlaXZlU2hhZG93czsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KEluc3RhbmNlZE1lc2gucHJvdG90eXBlLCAibWF0ZXJpYWwiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaGUgbWF0ZXJpYWwgb2YgdGhlIHNvdXJjZSBtZXNoCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3Vy
Y2VNZXNoLm1hdGVyaWFsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoSW5zdGFuY2VkTWVzaC5wcm90b3R5cGUsICJ2aXNpYmlsaXR5IiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogVmlzaWJpbGl0eSBvZiB0aGUgc291cmNlIG1lc2gKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Nv
dXJjZU1lc2gudmlzaWJpbGl0eTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEluc3RhbmNlZE1lc2gucHJvdG90eXBlLCAic2tlbGV0b24iLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBTa2VsZXRvbiBvZiB0aGUgc291cmNlIG1lc2gKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Nv
dXJjZU1lc2guc2tlbGV0b247CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShJbnN0YW5jZWRNZXNoLnByb3RvdHlwZSwgInJlbmRlcmluZ0dyb3VwSWQiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBSZW5kZXJpbmcgZ3JvdW5kIGlkIG9mIHRoZSBzb3VyY2Ug
bWVzaAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fc291cmNlTWVzaC5yZW5kZXJpbmdHcm91cElkOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9z
b3VyY2VNZXNoIHx8IHZhbHVlID09PSB0aGlzLl9zb3VyY2VNZXNoLnJlbmRlcmluZ0dyb3VwSWQp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
L25vLW9wIHdpdGggd2FybmluZworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIkxvZ2dlciJdLldhcm4oIk5vdGUgLSBzZXR0aW5nIHJlbmRlcmlu
Z0dyb3VwSWQgb2YgYW4gaW5zdGFuY2VkIG1lc2ggaGFzIG5vIGVmZmVjdCBvbiB0aGUgc2NlbmUi
KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdG90YWwg
bnVtYmVyIG9mIHZlcnRpY2VzIChpbnRlZ2VyKS4KKyAgICAgKi8KKyAgICBJbnN0YW5jZWRNZXNo
LnByb3RvdHlwZS5nZXRUb3RhbFZlcnRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fc291cmNlTWVzaCA/IHRoaXMuX3NvdXJjZU1lc2guZ2V0VG90YWxWZXJ0aWNlcygp
IDogMDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBwb3NpdGl2ZSBpbnRlZ2Vy
IDogdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIHRoaXMgbWVzaCBnZW9tZXRyeS4KKyAg
ICAgKiBAcmV0dXJucyB0aGUgbnVtbmVyIG9mIGluZGljZXMgb3IgemVybyBpZiB0aGUgbWVzaCBo
YXMgbm8gZ2VvbWV0cnkuCisgICAgICovCisgICAgSW5zdGFuY2VkTWVzaC5wcm90b3R5cGUuZ2V0
VG90YWxJbmRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fc291cmNl
TWVzaC5nZXRUb3RhbEluZGljZXMoKTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShJbnN0YW5jZWRNZXNoLnByb3RvdHlwZSwgInNvdXJjZU1lc2giLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaGUgc291cmNlIG1lc2ggb2YgdGhlIGluc3RhbmNlCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3Vy
Y2VNZXNoOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBJcyB0aGlzIG5vZGUg
cmVhZHkgdG8gYmUgdXNlZC9yZW5kZXJlZAorICAgICAqIEBwYXJhbSBjb21wbGV0ZUNoZWNrIGRl
ZmluZXMgaWYgYSBjb21wbGV0ZSBjaGVjayAoaW5jbHVkaW5nIG1hdGVyaWFscyBhbmQgbGlnaHRz
KSBoYXMgdG8gYmUgZG9uZSAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKiBAcmV0dXJuIHtib29s
ZWFufSBpcyBpdCByZWFkeQorICAgICAqLworICAgIEluc3RhbmNlZE1lc2gucHJvdG90eXBlLmlz
UmVhZHkgPSBmdW5jdGlvbiAoY29tcGxldGVDaGVjaykgeworICAgICAgICBpZiAoY29tcGxldGVD
aGVjayA9PT0gdm9pZCAwKSB7IGNvbXBsZXRlQ2hlY2sgPSBmYWxzZTsgfQorICAgICAgICByZXR1
cm4gdGhpcy5fc291cmNlTWVzaC5pc1JlYWR5KGNvbXBsZXRlQ2hlY2ssIHRydWUpOworICAgIH07
CisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBpbnRlZ2VycyBvciBhIHR5cGVk
IGFycmF5IChJbnQzMkFycmF5LCBVaW50MzJBcnJheSwgVWludDE2QXJyYXkpIHBvcHVsYXRlZCB3
aXRoIHRoZSBtZXNoIGluZGljZXMuCisgICAgICogQHBhcmFtIGtpbmQga2luZCBvZiB2ZXJ0aWNp
ZXMgdG8gcmV0cmVpdmUgKGVnLiBwb3NpdG9ucywgbm9ybWFscywgdXZzLCBldGMuKQorICAgICAq
IEBwYXJhbSBjb3B5V2hlblNoYXJlZCBJZiB0cnVlIChkZWZhdWx0IGZhbHNlKSBhbmQgYW5kIGlm
IHRoZSBtZXNoIGdlb21ldHJ5IGlzIHNoYXJlZCBhbW9uZyBzb21lIG90aGVyIG1lc2hlcywgdGhl
IHJldHVybmVkIGFycmF5IGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgb25lLgorICAgICAqIEBy
ZXR1cm5zIGEgZmxvYXQgYXJyYXkgb3IgYSBGbG9hdDMyQXJyYXkgb2YgdGhlIHJlcXVlc3RlZCBr
aW5kIG9mIGRhdGEgOiBwb3NpdG9ucywgbm9ybWFscywgdXZzLCBldGMuCisgICAgICovCisgICAg
SW5zdGFuY2VkTWVzaC5wcm90b3R5cGUuZ2V0VmVydGljZXNEYXRhID0gZnVuY3Rpb24gKGtpbmQs
IGNvcHlXaGVuU2hhcmVkKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VNZXNoLmdldFZl
cnRpY2VzRGF0YShraW5kLCBjb3B5V2hlblNoYXJlZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSB2ZXJ0ZXggZGF0YSBvZiB0aGUgbWVzaCBnZW9tZXRyeSBmb3IgdGhlIHJlcXVl
c3RlZCBga2luZGAuCisgICAgICogSWYgdGhlIG1lc2ggaGFzIG5vIGdlb21ldHJ5LCBhIG5ldyBH
ZW9tZXRyeSBvYmplY3QgaXMgc2V0IHRvIHRoZSBtZXNoIGFuZCB0aGVuIHBhc3NlZCB0aGlzIHZl
cnRleCBkYXRhLgorICAgICAqIFRoZSBgZGF0YWAgYXJlIGVpdGhlciBhIG51bWVyaWMgYXJyYXkg
ZWl0aGVyIGEgRmxvYXQzMkFycmF5LgorICAgICAqIFRoZSBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAg
aXMgcGFzc2VkIGFzIGlzIHRvIHRoZSB1bmRlcmx5aW5nIEdlb21ldHJ5IG9iamVjdCBjb25zdHJ1
Y3RvciAoaWYgaW5pdGlhbmlsbHkgbm9uZSkgb3IgdXBkYXRlci4KKyAgICAgKiBUaGUgcGFyYW1l
dGVyIGBzdHJpZGVgIGlzIGFuIG9wdGlvbmFsIHBvc2l0aXZlIGludGVnZXIsIGl0IGlzIHVzdWFs
bHkgYXV0b21hdGljYWxseSBkZWR1Y3RlZCBmcm9tIHRoZSBga2luZGAgKDMgZm9yIHBvc2l0aW9u
cyBvciBub3JtYWxzLCAyIGZvciBVViwgZXRjKS4KKyAgICAgKiBOb3RlIHRoYXQgYSBuZXcgdW5k
ZXJseWluZyBWZXJ0ZXhCdWZmZXIgb2JqZWN0IGlzIGNyZWF0ZWQgZWFjaCBjYWxsLgorICAgICAq
IElmIHRoZSBga2luZGAgaXMgdGhlIGBQb3NpdGlvbktpbmRgLCB0aGUgbWVzaCBCb3VuZGluZ0lu
Zm8gaXMgcmVuZXdlZCwgc28gdGhlIGJvdW5kaW5nIGJveCBhbmQgc3BoZXJlLCBhbmQgdGhlIG1l
c2ggV29ybGQgTWF0cml4IGlzIHJlY29tcHV0ZWQuCisgICAgICoKKyAgICAgKiBQb3NzaWJsZSBg
a2luZGAgdmFsdWVzIDoKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5Qb3NpdGlvbktpbmQKKyAgICAg
KiAtIFZlcnRleEJ1ZmZlci5VVktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjJLaW5kCisg
ICAgICogLSBWZXJ0ZXhCdWZmZXIuVVYzS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNEtp
bmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjVLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIu
VVY2S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLkNvbG9yS2luZAorICAgICAqIC0gVmVydGV4
QnVmZmVyLk1hdHJpY2VzSW5kaWNlc0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNl
c0luZGljZXNFeHRyYUtpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNL
aW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNXZWlnaHRzRXh0cmFLaW5kCisgICAg
ICoKKyAgICAgKiBSZXR1cm5zIHRoZSBNZXNoLgorICAgICAqLworICAgIEluc3RhbmNlZE1lc2gu
cHJvdG90eXBlLnNldFZlcnRpY2VzRGF0YSA9IGZ1bmN0aW9uIChraW5kLCBkYXRhLCB1cGRhdGFi
bGUsIHN0cmlkZSkgeworICAgICAgICBpZiAodGhpcy5zb3VyY2VNZXNoKSB7CisgICAgICAgICAg
ICB0aGlzLnNvdXJjZU1lc2guc2V0VmVydGljZXNEYXRhKGtpbmQsIGRhdGEsIHVwZGF0YWJsZSwg
c3RyaWRlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VNZXNoOworICAg
IH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgZXhpc3RpbmcgdmVydGV4IGRhdGEgb2Yg
dGhlIG1lc2ggZ2VvbWV0cnkgZm9yIHRoZSByZXF1ZXN0ZWQgYGtpbmRgLgorICAgICAqIElmIHRo
ZSBtZXNoIGhhcyBubyBnZW9tZXRyeSwgaXQgaXMgc2ltcGx5IHJldHVybmVkIGFzIGl0IGlzLgor
ICAgICAqIFRoZSBgZGF0YWAgYXJlIGVpdGhlciBhIG51bWVyaWMgYXJyYXkgZWl0aGVyIGEgRmxv
YXQzMkFycmF5LgorICAgICAqIE5vIG5ldyB1bmRlcmx5aW5nIFZlcnRleEJ1ZmZlciBvYmplY3Qg
aXMgY3JlYXRlZC4KKyAgICAgKiBJZiB0aGUgYGtpbmRgIGlzIHRoZSBgUG9zaXRpb25LaW5kYCBh
bmQgaWYgYHVwZGF0ZUV4dGVuZHNgIGlzIHRydWUsIHRoZSBtZXNoIEJvdW5kaW5nSW5mbyBpcyBy
ZW5ld2VkLCBzbyB0aGUgYm91bmRpbmcgYm94IGFuZCBzcGhlcmUsIGFuZCB0aGUgbWVzaCBXb3Js
ZCBNYXRyaXggaXMgcmVjb21wdXRlZC4KKyAgICAgKiBJZiB0aGUgcGFyYW1ldGVyIGBtYWtlSXRV
bmlxdWVgIGlzIHRydWUsIGEgbmV3IGdsb2JhbCBnZW9tZXRyeSBpcyBjcmVhdGVkIGZyb20gdGhp
cyBwb3NpdGlvbnMgYW5kIGlzIHNldCB0byB0aGUgbWVzaC4KKyAgICAgKgorICAgICAqIFBvc3Np
YmxlIGBraW5kYCB2YWx1ZXMgOgorICAgICAqIC0gVmVydGV4QnVmZmVyLlBvc2l0aW9uS2luZAor
ICAgICAqIC0gVmVydGV4QnVmZmVyLlVWS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWMktp
bmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjNLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIu
VVY0S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNUtpbmQKKyAgICAgKiAtIFZlcnRleEJ1
ZmZlci5VVjZLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuQ29sb3JLaW5kCisgICAgICogLSBW
ZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk1h
dHJpY2VzSW5kaWNlc0V4dHJhS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk1hdHJpY2VzV2Vp
Z2h0c0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQK
KyAgICAgKgorICAgICAqIFJldHVybnMgdGhlIE1lc2guCisgICAgICovCisgICAgSW5zdGFuY2Vk
TWVzaC5wcm90b3R5cGUudXBkYXRlVmVydGljZXNEYXRhID0gZnVuY3Rpb24gKGtpbmQsIGRhdGEs
IHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1ZSkgeworICAgICAgICBpZiAodGhpcy5zb3VyY2VN
ZXNoKSB7CisgICAgICAgICAgICB0aGlzLnNvdXJjZU1lc2gudXBkYXRlVmVydGljZXNEYXRhKGtp
bmQsIGRhdGEsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRoaXMuc291cmNlTWVzaDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMg
dGhlIG1lc2ggaW5kaWNlcy4KKyAgICAgKiBFeHBlY3RzIGFuIGFycmF5IHBvcHVsYXRlZCB3aXRo
IGludGVnZXJzIG9yIGEgdHlwZWQgYXJyYXkgKEludDMyQXJyYXksIFVpbnQzMkFycmF5LCBVaW50
MTZBcnJheSkuCisgICAgICogSWYgdGhlIG1lc2ggaGFzIG5vIGdlb21ldHJ5LCBhIG5ldyBHZW9t
ZXRyeSBvYmplY3QgaXMgY3JlYXRlZCBhbmQgc2V0IHRvIHRoZSBtZXNoLgorICAgICAqIFRoaXMg
bWV0aG9kIGNyZWF0ZXMgYSBuZXcgaW5kZXggYnVmZmVyIGVhY2ggY2FsbC4KKyAgICAgKiBSZXR1
cm5zIHRoZSBNZXNoLgorICAgICAqLworICAgIEluc3RhbmNlZE1lc2gucHJvdG90eXBlLnNldElu
ZGljZXMgPSBmdW5jdGlvbiAoaW5kaWNlcywgdG90YWxWZXJ0aWNlcykgeworICAgICAgICBpZiAo
dG90YWxWZXJ0aWNlcyA9PT0gdm9pZCAwKSB7IHRvdGFsVmVydGljZXMgPSBudWxsOyB9CisgICAg
ICAgIGlmICh0aGlzLnNvdXJjZU1lc2gpIHsKKyAgICAgICAgICAgIHRoaXMuc291cmNlTWVzaC5z
ZXRJbmRpY2VzKGluZGljZXMsIHRvdGFsVmVydGljZXMpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLnNvdXJjZU1lc2g7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCb29sZWFuIDog
VHJ1ZSBpZiB0aGUgbWVzaCBvd25zIHRoZSByZXF1ZXN0ZWQga2luZCBvZiBkYXRhLgorICAgICAq
LworICAgIEluc3RhbmNlZE1lc2gucHJvdG90eXBlLmlzVmVydGljZXNEYXRhUHJlc2VudCA9IGZ1
bmN0aW9uIChraW5kKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VNZXNoLmlzVmVydGlj
ZXNEYXRhUHJlc2VudChraW5kKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4g
YXJyYXkgb2YgaW5kaWNlcyAoSW5kaWNlc0FycmF5KS4KKyAgICAgKi8KKyAgICBJbnN0YW5jZWRN
ZXNoLnByb3RvdHlwZS5nZXRJbmRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5fc291cmNlTWVzaC5nZXRJbmRpY2VzKCk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoSW5zdGFuY2VkTWVzaC5wcm90b3R5cGUsICJfcG9zaXRpb25zIiwgeworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VNZXNo
Ll9wb3NpdGlvbnM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFRoaXMgbWV0
aG9kIHJlY29tcHV0ZXMgYW5kIHNldHMgYSBuZXcgQm91bmRpbmdJbmZvIHRvIHRoZSBtZXNoIHVu
bGVzcyBpdCBpcyBsb2NrZWQuCisgICAgICogVGhpcyBtZWFucyB0aGUgbWVzaCB1bmRlcmx5aW5n
IGJvdW5kaW5nIGJveCBhbmQgc3BoZXJlIGFyZSByZWNvbXB1dGVkLgorICAgICAqIEBwYXJhbSBh
cHBseVNrZWxldG9uIGRlZmluZXMgd2hldGhlciB0byBhcHBseSB0aGUgc2tlbGV0b24gYmVmb3Jl
IGNvbXB1dGluZyB0aGUgYm91bmRpbmcgaW5mbworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50
IG1lc2gKKyAgICAgKi8KKyAgICBJbnN0YW5jZWRNZXNoLnByb3RvdHlwZS5yZWZyZXNoQm91bmRp
bmdJbmZvID0gZnVuY3Rpb24gKGFwcGx5U2tlbGV0b24pIHsKKyAgICAgICAgaWYgKGFwcGx5U2tl
bGV0b24gPT09IHZvaWQgMCkgeyBhcHBseVNrZWxldG9uID0gZmFsc2U7IH0KKyAgICAgICAgaWYg
KHRoaXMuX2JvdW5kaW5nSW5mbyAmJiB0aGlzLl9ib3VuZGluZ0luZm8uaXNMb2NrZWQpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZhciBiaWFzID0gdGhp
cy5fc291cmNlTWVzaC5nZW9tZXRyeSA/IHRoaXMuX3NvdXJjZU1lc2guZ2VvbWV0cnkuYm91bmRp
bmdCaWFzIDogbnVsbDsKKyAgICAgICAgdGhpcy5fcmVmcmVzaEJvdW5kaW5nSW5mbyh0aGlzLl9z
b3VyY2VNZXNoLl9nZXRQb3NpdGlvbkRhdGEoYXBwbHlTa2VsZXRvbiksIGJpYXMpOworICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgSW5zdGFuY2Vk
TWVzaC5wcm90b3R5cGUuX3ByZUFjdGl2YXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5fY3VycmVudExPRCkgeworICAgICAgICAgICAgdGhpcy5fY3VycmVudExPRC5fcHJlQWN0
aXZhdGUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8q
KiBAaGlkZGVuICovCisgICAgSW5zdGFuY2VkTWVzaC5wcm90b3R5cGUuX2FjdGl2YXRlID0gZnVu
Y3Rpb24gKHJlbmRlcklkLCBpbnRlcm1lZGlhdGVSZW5kZXJpbmcpIHsKKyAgICAgICAgaWYgKCF0
aGlzLl9zb3VyY2VNZXNoLnN1Yk1lc2hlcykgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkxvZ2dlciJdLldhcm4oIkluc3RhbmNlcyBzaG91
bGQgb25seSBiZSBjcmVhdGVkIGZvciBtZXNoZXMgd2l0aCBnZW9tZXRyeS4iKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5fY3VycmVudExPRCkgeworICAgICAgICAgICAgdGhpcy5fY3Vy
cmVudExPRC5fcmVnaXN0ZXJJbnN0YW5jZUZvclJlbmRlcklkKHRoaXMsIHJlbmRlcklkKTsKKyAg
ICAgICAgICAgIGlmIChpbnRlcm1lZGlhdGVSZW5kZXJpbmcpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMuX2N1cnJlbnRMT0QuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2lzQWN0
aXZlSW50ZXJtZWRpYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRMT0Qu
X2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX29ubHlGb3JJbnN0YW5jZXNJbnRlcm1lZGlh
dGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXRoaXMuX2N1cnJlbnRMT0QuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2lz
QWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRMT0QuX2ludGVybmFs
QWJzdHJhY3RNZXNoRGF0YUluZm8uX29ubHlGb3JJbnN0YW5jZXMgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBJbnN0YW5jZWRNZXNoLnByb3RvdHlwZS5fcG9zdEFjdGl2YXRlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBpZiAodGhpcy5fZWRnZXNSZW5kZXJlciAmJiB0aGlzLl9lZGdlc1Jl
bmRlcmVyLmlzRW5hYmxlZCAmJiB0aGlzLl9zb3VyY2VNZXNoLl9yZW5kZXJpbmdHcm91cCkgewor
ICAgICAgICAgICAgdGhpcy5fc291cmNlTWVzaC5fcmVuZGVyaW5nR3JvdXAuX2VkZ2VzUmVuZGVy
ZXJzLnB1c2godGhpcy5fZWRnZXNSZW5kZXJlcik7CisgICAgICAgIH0KKyAgICB9OworICAgIElu
c3RhbmNlZE1lc2gucHJvdG90eXBlLmdldFdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAodGhpcy5fY3VycmVudExPRCAmJiB0aGlzLl9jdXJyZW50TE9ELmJpbGxib2FyZE1v
ZGUgIT09IF90cmFuc2Zvcm1Ob2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRyYW5z
Zm9ybU5vZGUiXS5CSUxMQk9BUkRNT0RFX05PTkUgJiYgdGhpcy5fY3VycmVudExPRC5fbWFzdGVy
TWVzaCAhPT0gdGhpcykgeworICAgICAgICAgICAgdmFyIHRlbXBNYXN0ZXIgPSB0aGlzLl9jdXJy
ZW50TE9ELl9tYXN0ZXJNZXNoOworICAgICAgICAgICAgdGhpcy5fY3VycmVudExPRC5fbWFzdGVy
TWVzaCA9IHRoaXM7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXS5jb3B5RnJvbSh0aGlzLl9j
dXJyZW50TE9ELmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKSk7CisgICAgICAgICAgICB0aGlzLl9j
dXJyZW50TE9ELl9tYXN0ZXJNZXNoID0gdGVtcE1hc3RlcjsKKyAgICAgICAgICAgIHJldHVybiBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG1wVmVjdG9y
cyJdLk1hdHJpeFswXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlw
ZS5nZXRXb3JsZE1hdHJpeC5jYWxsKHRoaXMpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEluc3RhbmNlZE1lc2gucHJvdG90eXBlLCAiaXNBbkluc3RhbmNlIiwgeworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFzc29jaWF0ZWQg
TE9EIEFic3RyYWN0TWVzaC4KKyAgICAgKi8KKyAgICBJbnN0YW5jZWRNZXNoLnByb3RvdHlwZS5n
ZXRMT0QgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAgICAgIGlmICghY2FtZXJhKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB2YXIgYm91bmRpbmdJbmZv
ID0gdGhpcy5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgdGhpcy5fY3VycmVudExPRCA9IHRo
aXMuc291cmNlTWVzaC5nZXRMT0QoY2FtZXJhLCBib3VuZGluZ0luZm8uYm91bmRpbmdTcGhlcmUp
OworICAgICAgICBpZiAodGhpcy5fY3VycmVudExPRCA9PT0gdGhpcy5zb3VyY2VNZXNoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VNZXNoOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLl9jdXJyZW50TE9EOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBJ
bnN0YW5jZWRNZXNoLnByb3RvdHlwZS5fc3luY1N1Yk1lc2hlcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5yZWxlYXNlU3ViTWVzaGVzKCk7CisgICAgICAgIGlmICh0aGlzLl9zb3VyY2VN
ZXNoLnN1Yk1lc2hlcykgeworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IHRoaXMuX3NvdXJjZU1lc2guc3ViTWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgICAgIHRoaXMuX3NvdXJjZU1lc2guc3ViTWVzaGVzW2luZGV4XS5jbG9uZSh0aGlzLCB0aGlz
Ll9zb3VyY2VNZXNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgSW5zdGFuY2VkTWVzaC5wcm90
b3R5cGUuX2dlbmVyYXRlUG9pbnRzQXJyYXkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biB0aGlzLl9zb3VyY2VNZXNoLl9nZW5lcmF0ZVBvaW50c0FycmF5KCk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEluc3RhbmNlZE1lc2ggZnJvbSB0aGUgY3VycmVudCBt
ZXNoLgorICAgICAqIC0gbmFtZSAoc3RyaW5nKSA6IHRoZSBjbG9uZWQgbWVzaCBuYW1lCisgICAg
ICogLSBuZXdQYXJlbnQgKG9wdGlvbmFsIE5vZGUpIDogdGhlIG9wdGlvbmFsIE5vZGUgdG8gcGFy
ZW50IHRoZSBjbG9uZSB0by4KKyAgICAgKiAtIGRvTm90Q2xvbmVDaGlsZHJlbiAob3B0aW9uYWwg
Ym9vbGVhbiwgZGVmYXVsdCBgZmFsc2VgKSA6IGlmIGB0cnVlYCB0aGUgbW9kZWwgY2hpbGRyZW4g
YXJlbid0IGNsb25lZC4KKyAgICAgKgorICAgICAqIFJldHVybnMgdGhlIGNsb25lLgorICAgICAq
LworICAgIEluc3RhbmNlZE1lc2gucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUsIG5l
d1BhcmVudCwgZG9Ob3RDbG9uZUNoaWxkcmVuKSB7CisgICAgICAgIGlmIChuZXdQYXJlbnQgPT09
IHZvaWQgMCkgeyBuZXdQYXJlbnQgPSBudWxsOyB9CisgICAgICAgIHZhciByZXN1bHQgPSB0aGlz
Ll9zb3VyY2VNZXNoLmNyZWF0ZUluc3RhbmNlKG5hbWUpOworICAgICAgICAvLyBEZWVwIGNvcHkK
KyAgICAgICAgX01pc2NfZGVlcENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJE
ZWVwQ29waWVyIl0uRGVlcENvcHkodGhpcywgcmVzdWx0LCBbIm5hbWUiLCAic3ViTWVzaGVzIiwg
InVuaXF1ZUlkIl0sIFtdKTsKKyAgICAgICAgLy8gQm91bmRpbmcgaW5mbworICAgICAgICB0aGlz
LnJlZnJlc2hCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgLy8gUGFyZW50CisgICAgICAgIGlmIChu
ZXdQYXJlbnQpIHsKKyAgICAgICAgICAgIHJlc3VsdC5wYXJlbnQgPSBuZXdQYXJlbnQ7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFkb05vdENsb25lQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIC8v
IENoaWxkcmVuCisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5n
ZXRTY2VuZSgpLm1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
bWVzaCA9IHRoaXMuZ2V0U2NlbmUoKS5tZXNoZXNbaW5kZXhdOworICAgICAgICAgICAgICAgIGlm
IChtZXNoLnBhcmVudCA9PT0gdGhpcykgeworICAgICAgICAgICAgICAgICAgICBtZXNoLmNsb25l
KG1lc2gubmFtZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBJ
bnN0YW5jZWRNZXNoLgorICAgICAqIFJldHVybnMgbm90aGluZy4KKyAgICAgKi8KKyAgICBJbnN0
YW5jZWRNZXNoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGRvTm90UmVjdXJzZSwgZGlz
cG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMpIHsKKyAgICAgICAgaWYgKGRpc3Bvc2VNYXRlcmlhbEFu
ZFRleHR1cmVzID09PSB2b2lkIDApIHsgZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMgPSBmYWxz
ZTsgfQorICAgICAgICAvLyBSZW1vdmUgZnJvbSBtZXNoCisgICAgICAgIHRoaXMuX3NvdXJjZU1l
c2gucmVtb3ZlSW5zdGFuY2UodGhpcyk7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9z
ZS5jYWxsKHRoaXMsIGRvTm90UmVjdXJzZSwgZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMpOwor
ICAgIH07CisgICAgcmV0dXJuIEluc3RhbmNlZE1lc2g7Cit9KF9NZXNoZXNfYWJzdHJhY3RNZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFic3RyYWN0TWVzaCJdKSk7CisKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL2xpbmVzTWVzaC50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL2xpbmVzTWVzaC50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBMaW5lc01lc2gsIEluc3RhbmNlZExpbmVzTWVzaCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJMaW5lc01lc2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIExpbmVzTWVzaDsg
fSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJJbnN0YW5jZWRMaW5lc01lc2giLCBmdW5jdGlvbigpIHsg
cmV0dXJuIEluc3RhbmNlZExpbmVzTWVzaDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3Ig
Ki8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9tZXNoICovICIuL01l
c2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19pbnN0YW5j
ZWRNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NZXNoZXMvaW5zdGFuY2VkTWVzaCAqLyAiLi9NZXNoZXMvaW5zdGFuY2VkTWVzaC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVy
aWFscy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX3NoYWRlck1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc2hhZGVy
TWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL3NoYWRlck1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL21hdGVy
aWFsSGVscGVyICovICIuL01hdGVyaWFscy9tYXRlcmlhbEhlbHBlci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2NvbG9yX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2NvbG9yLmZy
YWdtZW50ICovICIuL1NoYWRlcnMvY29sb3IuZnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfU2hhZGVyc19jb2xvcl92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvY29sb3IudmVydGV4ICov
ICIuL1NoYWRlcnMvY29sb3IudmVydGV4LnRzIik7CisKKworCisKKworCisKKworCisKKy8qKgor
ICogTGluZSBtZXNoCisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEw
MS9wYXJhbWV0cmljX3NoYXBlcworICovCit2YXIgTGluZXNNZXNoID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZXh0ZW5kcyJdKExpbmVzTWVzaCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IExpbmVzTWVzaAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUK
KyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBw
YXJhbSBwYXJlbnQgZGVmaW5lcyB0aGUgcGFyZW50IG1lc2ggaWYgYW55CisgICAgICogQHBhcmFt
IHNvdXJjZSBkZWZpbmVzIHRoZSBvcHRpb25hbCBzb3VyY2UgTGluZXNNZXNoIHVzZWQgdG8gY2xv
bmUgZGF0YSBmcm9tCisgICAgICogQHBhcmFtIGRvTm90Q2xvbmVDaGlsZHJlbiBXaGVuIGNsb25p
bmcsIHNraXAgY2xvbmluZyBjaGlsZCBtZXNoZXMgb2Ygc291cmNlLCBkZWZhdWx0IEZhbHNlLgor
ICAgICAqIFdoZW4gZmFsc2UsIGFjaGlldmVkIGJ5IGNhbGxpbmcgYSBjbG9uZSgpLCBhbHNvIHBh
c3NpbmcgRmFsc2UuCisgICAgICogVGhpcyB3aWxsIG1ha2UgY3JlYXRpb24gb2YgY2hpbGRyZW4s
IHJlY3Vyc2l2ZS4KKyAgICAgKiBAcGFyYW0gdXNlVmVydGV4Q29sb3IgZGVmaW5lcyBpZiB0aGlz
IExpbmVzTWVzaCBzdXBwb3J0cyB2ZXJ0ZXggY29sb3IKKyAgICAgKiBAcGFyYW0gdXNlVmVydGV4
QWxwaGEgZGVmaW5lcyBpZiB0aGlzIExpbmVzTWVzaCBzdXBwb3J0cyB2ZXJ0ZXggYWxwaGEKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBMaW5lc01lc2gobmFtZSwgc2NlbmUsIHBhcmVudCwgc291cmNl
LCBkb05vdENsb25lQ2hpbGRyZW4sIAorICAgIC8qKgorICAgICAqIElmIHZlcnRleCBjb2xvciBz
aG91bGQgYmUgYXBwbGllZCB0byB0aGUgbWVzaAorICAgICAqLworICAgIHVzZVZlcnRleENvbG9y
LCAKKyAgICAvKioKKyAgICAgKiBJZiB2ZXJ0ZXggYWxwaGEgc2hvdWxkIGJlIGFwcGxpZWQgdG8g
dGhlIG1lc2gKKyAgICAgKi8KKyAgICB1c2VWZXJ0ZXhBbHBoYSkgeworICAgICAgICBpZiAoc2Nl
bmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgaWYgKHBhcmVudCA9PT0g
dm9pZCAwKSB7IHBhcmVudCA9IG51bGw7IH0KKyAgICAgICAgaWYgKHNvdXJjZSA9PT0gdm9pZCAw
KSB7IHNvdXJjZSA9IG51bGw7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgbmFtZSwgc2NlbmUsIHBhcmVudCwgc291cmNlLCBkb05vdENsb25lQ2hpbGRyZW4pIHx8IHRo
aXM7CisgICAgICAgIF90aGlzLnVzZVZlcnRleENvbG9yID0gdXNlVmVydGV4Q29sb3I7CisgICAg
ICAgIF90aGlzLnVzZVZlcnRleEFscGhhID0gdXNlVmVydGV4QWxwaGE7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBDb2xvciBvZiB0aGUgbGluZSAoRGVmYXVsdDogV2hpdGUpCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5jb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjMiXSgxLCAxLCAxKTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEFscGhhIG9mIHRoZSBsaW5lIChEZWZhdWx0OiAxKQorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuYWxwaGEgPSAxOworICAgICAgICBpZiAoc291cmNlKSB7CisgICAgICAgICAgICBf
dGhpcy5jb2xvciA9IHNvdXJjZS5jb2xvci5jbG9uZSgpOworICAgICAgICAgICAgX3RoaXMuYWxw
aGEgPSBzb3VyY2UuYWxwaGE7CisgICAgICAgICAgICBfdGhpcy51c2VWZXJ0ZXhDb2xvciA9IHNv
dXJjZS51c2VWZXJ0ZXhDb2xvcjsKKyAgICAgICAgICAgIF90aGlzLnVzZVZlcnRleEFscGhhID0g
c291cmNlLnVzZVZlcnRleEFscGhhOworICAgICAgICB9CisgICAgICAgIF90aGlzLmludGVyc2Vj
dGlvblRocmVzaG9sZCA9IDAuMTsKKyAgICAgICAgdmFyIGRlZmluZXMgPSBbXTsKKyAgICAgICAg
dmFyIG9wdGlvbnMgPSB7CisgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5k
LCAid29ybGQwIiwgIndvcmxkMSIsICJ3b3JsZDIiLCAid29ybGQzIl0sCisgICAgICAgICAgICB1
bmlmb3JtczogWyJ2Q2xpcFBsYW5lIiwgInZDbGlwUGxhbmUyIiwgInZDbGlwUGxhbmUzIiwgInZD
bGlwUGxhbmU0IiwgIndvcmxkIiwgInZpZXdQcm9qZWN0aW9uIl0sCisgICAgICAgICAgICBuZWVk
QWxwaGFCbGVuZGluZzogdHJ1ZSwKKyAgICAgICAgICAgIGRlZmluZXM6IGRlZmluZXMKKyAgICAg
ICAgfTsKKyAgICAgICAgaWYgKHVzZVZlcnRleEFscGhhID09PSBmYWxzZSkgeworICAgICAgICAg
ICAgb3B0aW9ucy5uZWVkQWxwaGFCbGVuZGluZyA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmICghdXNlVmVydGV4Q29sb3IpIHsKKyAgICAgICAgICAgIG9wdGlvbnMudW5pZm9ybXMucHVz
aCgiY29sb3IiKTsKKyAgICAgICAgICAgIF90aGlzLmNvbG9yNCA9IG5ldyBfTWF0aHNfbWF0aF9j
b2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjQiXSgpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb3B0aW9ucy5kZWZpbmVzLnB1c2goIiNkZWZp
bmUgVkVSVEVYQ09MT1IiKTsKKyAgICAgICAgICAgIG9wdGlvbnMuYXR0cmlidXRlcy5wdXNoKF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJd
LkNvbG9yS2luZCk7CisgICAgICAgIH0KKyAgICAgICAgX3RoaXMuX2NvbG9yU2hhZGVyID0gbmV3
IF9NYXRlcmlhbHNfc2hhZGVyTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
U2hhZGVyTWF0ZXJpYWwiXSgiY29sb3JTaGFkZXIiLCBfdGhpcy5nZXRTY2VuZSgpLCAiY29sb3Ii
LCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBMaW5lc01lc2gu
cHJvdG90eXBlLl9hZGRDbGlwUGxhbmVEZWZpbmUgPSBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAg
ICAgdmFyIGRlZmluZSA9ICIjZGVmaW5lICIgKyBsYWJlbDsKKyAgICAgICAgdmFyIGluZGV4ID0g
dGhpcy5fY29sb3JTaGFkZXIub3B0aW9ucy5kZWZpbmVzLmluZGV4T2YoZGVmaW5lKTsKKyAgICAg
ICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2NvbG9yU2hhZGVyLm9wdGlvbnMuZGVmaW5lcy5wdXNoKGRlZmluZSk7Cisg
ICAgfTsKKyAgICBMaW5lc01lc2gucHJvdG90eXBlLl9yZW1vdmVDbGlwUGxhbmVEZWZpbmUgPSBm
dW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgdmFyIGRlZmluZSA9ICIjZGVmaW5lICIgKyBsYWJl
bDsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fY29sb3JTaGFkZXIub3B0aW9ucy5kZWZpbmVz
LmluZGV4T2YoZGVmaW5lKTsKKyAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NvbG9yU2hhZGVyLm9wdGlvbnMu
ZGVmaW5lcy5zcGxpY2UoaW5kZXgsIDEpOworICAgIH07CisgICAgTGluZXNNZXNoLnByb3RvdHlw
ZS5pc1JlYWR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNj
ZW5lKCk7CisgICAgICAgIC8vIENsaXAgcGxhbmVzCisgICAgICAgIHNjZW5lLmNsaXBQbGFuZSA/
IHRoaXMuX2FkZENsaXBQbGFuZURlZmluZSgiQ0xJUFBMQU5FIikgOiB0aGlzLl9yZW1vdmVDbGlw
UGxhbmVEZWZpbmUoIkNMSVBQTEFORSIpOworICAgICAgICBzY2VuZS5jbGlwUGxhbmUyID8gdGhp
cy5fYWRkQ2xpcFBsYW5lRGVmaW5lKCJDTElQUExBTkUyIikgOiB0aGlzLl9yZW1vdmVDbGlwUGxh
bmVEZWZpbmUoIkNMSVBQTEFORTIiKTsKKyAgICAgICAgc2NlbmUuY2xpcFBsYW5lMyA/IHRoaXMu
X2FkZENsaXBQbGFuZURlZmluZSgiQ0xJUFBMQU5FMyIpIDogdGhpcy5fcmVtb3ZlQ2xpcFBsYW5l
RGVmaW5lKCJDTElQUExBTkUzIik7CisgICAgICAgIHNjZW5lLmNsaXBQbGFuZTQgPyB0aGlzLl9h
ZGRDbGlwUGxhbmVEZWZpbmUoIkNMSVBQTEFORTQiKSA6IHRoaXMuX3JlbW92ZUNsaXBQbGFuZURl
ZmluZSgiQ0xJUFBMQU5FNCIpOworICAgICAgICBpZiAoIXRoaXMuX2NvbG9yU2hhZGVyLmlzUmVh
ZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBfc3VwZXIucHJvdG90eXBlLmlzUmVhZHkuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyAiTGluZU1lc2giCisgICAgICovCisgICAgTGlu
ZXNNZXNoLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAiTGluZXNNZXNoIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaW5l
c01lc2gucHJvdG90eXBlLCAibWF0ZXJpYWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBA
aGlkZGVuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9jb2xvclNoYWRlcjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaW5lc01lc2gucHJvdG90eXBlLCAiY2hlY2tDb2xsaXNp
b25zIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIC8qKiBAaGlkZGVuICovCisgICAgTGluZXNNZXNoLnByb3RvdHlw
ZS5fYmluZCA9IGZ1bmN0aW9uIChzdWJNZXNoLCBlZmZlY3QsIGZpbGxNb2RlKSB7CisgICAgICAg
IGlmICghdGhpcy5fZ2VvbWV0cnkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICB9CisgICAgICAgIHZhciBjb2xvckVmZmVjdCA9IHRoaXMuX2NvbG9yU2hhZGVyLmdldEVmZmVj
dCgpOworICAgICAgICAvLyBWQk9zCisgICAgICAgIHZhciBpbmRleFRvQmluZCA9IHRoaXMuaXNV
bkluZGV4ZWQgPyBudWxsIDogdGhpcy5fZ2VvbWV0cnkuZ2V0SW5kZXhCdWZmZXIoKTsKKyAgICAg
ICAgdGhpcy5fZ2VvbWV0cnkuX2JpbmQoY29sb3JFZmZlY3QsIGluZGV4VG9CaW5kKTsKKyAgICAg
ICAgLy8gQ29sb3IKKyAgICAgICAgaWYgKCF0aGlzLnVzZVZlcnRleENvbG9yKSB7CisgICAgICAg
ICAgICB2YXIgX2EgPSB0aGlzLmNvbG9yLCByID0gX2EuciwgZyA9IF9hLmcsIGIgPSBfYS5iOwor
ICAgICAgICAgICAgdGhpcy5jb2xvcjQuc2V0KHIsIGcsIGIsIHRoaXMuYWxwaGEpOworICAgICAg
ICAgICAgdGhpcy5fY29sb3JTaGFkZXIuc2V0Q29sb3I0KCJjb2xvciIsIHRoaXMuY29sb3I0KTsK
KyAgICAgICAgfQorICAgICAgICAvLyBDbGlwIHBsYW5lcworICAgICAgICBfTWF0ZXJpYWxzX21h
dGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVscGVy
Il0uQmluZENsaXBQbGFuZShjb2xvckVmZmVjdCwgdGhpcy5nZXRTY2VuZSgpKTsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIExpbmVzTWVzaC5w
cm90b3R5cGUuX2RyYXcgPSBmdW5jdGlvbiAoc3ViTWVzaCwgZmlsbE1vZGUsIGluc3RhbmNlc0Nv
dW50KSB7CisgICAgICAgIGlmICghdGhpcy5fZ2VvbWV0cnkgfHwgIXRoaXMuX2dlb21ldHJ5Lmdl
dFZlcnRleEJ1ZmZlcnMoKSB8fCAoIXRoaXMuX3VuSW5kZXhlZCAmJiAhdGhpcy5fZ2VvbWV0cnku
Z2V0SW5kZXhCdWZmZXIoKSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9
CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLmdldFNjZW5lKCkuZ2V0RW5naW5lKCk7CisgICAg
ICAgIC8vIERyYXcgb3JkZXIKKyAgICAgICAgaWYgKHRoaXMuX3VuSW5kZXhlZCkgeworICAgICAg
ICAgICAgZW5naW5lLmRyYXdBcnJheXNUeXBlKF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWwiXS5MaW5lTGlzdERyYXdNb2RlLCBzdWJNZXNo
LnZlcnRpY2VzU3RhcnQsIHN1Yk1lc2gudmVydGljZXNDb3VudCwgaW5zdGFuY2VzQ291bnQpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW5naW5lLmRyYXdFbGVtZW50
c1R5cGUoX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJN
YXRlcmlhbCJdLkxpbmVMaXN0RHJhd01vZGUsIHN1Yk1lc2guaW5kZXhTdGFydCwgc3ViTWVzaC5p
bmRleENvdW50LCBpbnN0YW5jZXNDb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyBvZiB0aGUgbGluZSBtZXNoCisg
ICAgICogQHBhcmFtIGRvTm90UmVjdXJzZSBJZiBjaGlsZHJlbiBzaG91bGQgYmUgZGlzcG9zZWQK
KyAgICAgKi8KKyAgICBMaW5lc01lc2gucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZG9O
b3RSZWN1cnNlKSB7CisgICAgICAgIHRoaXMuX2NvbG9yU2hhZGVyLmRpc3Bvc2UoZmFsc2UsIGZh
bHNlLCB0cnVlKTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcywg
ZG9Ob3RSZWN1cnNlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgTGlu
ZU1lc2ggb2JqZWN0IGNsb25lZCBmcm9tIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgKi8KKyAgICBM
aW5lc01lc2gucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUsIG5ld1BhcmVudCwgZG9O
b3RDbG9uZUNoaWxkcmVuKSB7CisgICAgICAgIGlmIChuZXdQYXJlbnQgPT09IHZvaWQgMCkgeyBu
ZXdQYXJlbnQgPSBudWxsOyB9CisgICAgICAgIHJldHVybiBuZXcgTGluZXNNZXNoKG5hbWUsIHRo
aXMuZ2V0U2NlbmUoKSwgbmV3UGFyZW50LCB0aGlzLCBkb05vdENsb25lQ2hpbGRyZW4pOworICAg
IH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBJbnN0YW5jZWRMaW5lc01lc2ggb2Jq
ZWN0IGZyb20gdGhlIG1lc2ggbW9kZWwuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25q
cy5jb20vaG93X3RvL2hvd190b191c2VfaW5zdGFuY2VzCisgICAgICogQHBhcmFtIG5hbWUgZGVm
aW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3IGluc3RhbmNlCisgICAgICogQHJldHVybnMgYSBuZXcg
SW5zdGFuY2VkTGluZXNNZXNoCisgICAgICovCisgICAgTGluZXNNZXNoLnByb3RvdHlwZS5jcmVh
dGVJbnN0YW5jZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHJldHVybiBuZXcgSW5zdGFu
Y2VkTGluZXNNZXNoKG5hbWUsIHRoaXMpOworICAgIH07CisgICAgcmV0dXJuIExpbmVzTWVzaDsK
K30oX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1lc2giXSkpOwor
CisvKioKKyAqIENyZWF0ZXMgYW4gaW5zdGFuY2UgYmFzZWQgb24gYSBzb3VyY2UgTGluZXNNZXNo
CisgKi8KK3ZhciBJbnN0YW5jZWRMaW5lc01lc2ggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
X3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRl
bmRzIl0oSW5zdGFuY2VkTGluZXNNZXNoLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIEluc3RhbmNl
ZExpbmVzTWVzaChuYW1lLCBzb3VyY2UpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNh
bGwodGhpcywgbmFtZSwgc291cmNlKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5pbnRlcnNlY3Rp
b25UaHJlc2hvbGQgPSBzb3VyY2UuaW50ZXJzZWN0aW9uVGhyZXNob2xkOworICAgICAgICByZXR1
cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyAiSW5z
dGFuY2VkTGluZXNNZXNoIi4KKyAgICAgKi8KKyAgICBJbnN0YW5jZWRMaW5lc01lc2gucHJvdG90
eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJJbnN0YW5j
ZWRMaW5lc01lc2giOworICAgIH07CisgICAgcmV0dXJuIEluc3RhbmNlZExpbmVzTWVzaDsKK30o
X01lc2hlc19pbnN0YW5jZWRNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkluc3Rh
bmNlZE1lc2giXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy9tZXNoLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL21lc2gu
dHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IF9DcmVhdGlvbkRhdGFTdG9yYWdlLCBfSW5zdGFuY2VzQmF0Y2gsIE1lc2ggKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0NyZWF0aW9uRGF0YVN0b3JhZ2UiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9DcmVhdGlvbkRhdGFTdG9yYWdlOyB9KTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIl9JbnN0YW5jZXNCYXRjaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0luc3RhbmNlc0JhdGNo
OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1lc2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1lc2g7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1
bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNj
X29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAiLi9N
aXNjL3Rvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVlcENvcGll
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWlzYy9kZWVwQ29waWVyICovICIuL01pc2MvZGVlcENvcGllci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdGFncyAqLyAiLi9NaXNjL3RhZ3MudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21h
dGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMv
bWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlICov
ICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2J1ZmZlciAq
LyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9tZXNoLnZlcnRleERhdGEgKi8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9nZW9tZXRyeV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZ2VvbWV0cnkgKi8gIi4v
TWVzaGVzL2dlb21ldHJ5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Fic3RyYWN0
TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1lc2gudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfc3ViTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3ViTWVzaCAqLyAiLi9NZXNoZXMvc3ViTWVz
aC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DdWxsaW5nX2JvdW5kaW5nSW5mb19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L0N1bGxpbmcvYm91bmRpbmdJbmZvICovICIuL0N1bGxpbmcvYm91bmRpbmdJbmZvLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9t
YXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX211bHRpTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvbXVsdGlNYXRlcmlh
bCAqLyAiLi9NYXRlcmlhbHMvbXVsdGlNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9Mb2FkaW5nX3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9Mb2FkaW5nL3NjZW5lTG9hZGVyRmxh
Z3MgKi8gIi4vTG9hZGluZy9zY2VuZUxvYWRlckZsYWdzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5n
aW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01p
c2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGV2VG9vbHMgKi8gIi4vTWlzYy9k
ZXZUb29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZUNvbXBvbmVudF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX21lc2hMT0RMZXZlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWVzaExPRExldmVsICovICIuL01lc2hlcy9tZXNo
TE9ETGV2ZWwudHMiKTsKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworLyoqCisgKiBAaGlkZGVuCisgKiovCit2YXIgX0NyZWF0aW9uRGF0YVN0b3JhZ2Ug
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gX0NyZWF0aW9uRGF0
YVN0b3JhZ2UoKSB7CisgICAgfQorICAgIHJldHVybiBfQ3JlYXRpb25EYXRhU3RvcmFnZTsKK30o
KSk7CisKKy8qKgorICogQGhpZGRlbgorICoqLwordmFyIF9JbnN0YW5jZURhdGFTdG9yYWdlID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIF9JbnN0YW5jZURhdGFT
dG9yYWdlKCkgeworICAgICAgICB0aGlzLnZpc2libGVJbnN0YW5jZXMgPSB7fTsKKyAgICAgICAg
dGhpcy5iYXRjaENhY2hlID0gbmV3IF9JbnN0YW5jZXNCYXRjaCgpOworICAgICAgICB0aGlzLmlu
c3RhbmNlc0J1ZmZlclNpemUgPSAzMiAqIDE2ICogNDsgLy8gbGV0J3Mgc3RhcnQgd2l0aCBhIG1h
eGltdW0gb2YgMzIgaW5zdGFuY2VzCisgICAgfQorICAgIHJldHVybiBfSW5zdGFuY2VEYXRhU3Rv
cmFnZTsKK30oKSk7CisvKioKKyAqIEBoaWRkZW4KKyAqKi8KK3ZhciBfSW5zdGFuY2VzQmF0Y2gg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gX0luc3RhbmNlc0Jh
dGNoKCkgeworICAgICAgICB0aGlzLm11c3RSZXR1cm4gPSBmYWxzZTsKKyAgICAgICAgdGhpcy52
aXNpYmxlSW5zdGFuY2VzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMucmVuZGVyU2VsZiA9
IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLmhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nID0g
bmV3IEFycmF5KCk7CisgICAgfQorICAgIHJldHVybiBfSW5zdGFuY2VzQmF0Y2g7Cit9KCkpOwor
CisvKioKKyAqIEBoaWRkZW4KKyAqKi8KK3ZhciBfSW50ZXJuYWxNZXNoRGF0YUluZm8gPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gX0ludGVybmFsTWVzaERhdGFJ
bmZvKCkgeworICAgICAgICB0aGlzLl9hcmVOb3JtYWxzRnJvemVuID0gZmFsc2U7IC8vIFdpbGwg
YmUgdXNlZCBieSByaWJib25zIG1haW5seQorICAgICAgICAvLyBXaWxsIGJlIHVzZWQgdG8gc2F2
ZSBhIHNvdXJjZSBtZXNoIHJlZmVyZW5jZSwgSWYgYW55CisgICAgICAgIHRoaXMuX3NvdXJjZSA9
IG51bGw7CisgICAgICAgIC8vIFdpbGwgYmUgdXNlZCB0byBmb3IgZmFzdCBjbG9uZWQgbWVzaCBs
b29rdXAKKyAgICAgICAgdGhpcy5tZXNoTWFwID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcHJlQWN0
aXZhdGVJZCA9IC0xOworICAgICAgICB0aGlzLl9MT0RMZXZlbHMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgLy8gTW9ycGgKKyAgICAgICAgdGhpcy5fbW9ycGhUYXJnZXRNYW5hZ2VyID0gbnVsbDsK
KyAgICB9CisgICAgcmV0dXJuIF9JbnRlcm5hbE1lc2hEYXRhSW5mbzsKK30oKSk7CisvKioKKyAq
IENsYXNzIHVzZWQgdG8gcmVwcmVzZW50IHJlbmRlcmFibGUgbW9kZWxzCisgKi8KK3ZhciBNZXNo
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKE1lc2gsIF9zdXBlcik7CisgICAgLyoq
CisgICAgICogQGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFtIG5hbWUgVGhlIHZhbHVlIHVzZWQg
Ynkgc2NlbmUuZ2V0TWVzaEJ5TmFtZSgpIHRvIGRvIGEgbG9va3VwLgorICAgICAqIEBwYXJhbSBz
Y2VuZSBUaGUgc2NlbmUgdG8gYWRkIHRoaXMgbWVzaCB0by4KKyAgICAgKiBAcGFyYW0gcGFyZW50
IFRoZSBwYXJlbnQgb2YgdGhpcyBtZXNoLCBpZiBpdCBoYXMgb25lCisgICAgICogQHBhcmFtIHNv
dXJjZSBBbiBvcHRpb25hbCBNZXNoIGZyb20gd2hpY2ggZ2VvbWV0cnkgaXMgc2hhcmVkLCBjbG9u
ZWQuCisgICAgICogQHBhcmFtIGRvTm90Q2xvbmVDaGlsZHJlbiBXaGVuIGNsb25pbmcsIHNraXAg
Y2xvbmluZyBjaGlsZCBtZXNoZXMgb2Ygc291cmNlLCBkZWZhdWx0IEZhbHNlLgorICAgICAqICAg
ICAgICAgICAgICAgICAgV2hlbiBmYWxzZSwgYWNoaWV2ZWQgYnkgY2FsbGluZyBhIGNsb25lKCks
IGFsc28gcGFzc2luZyBGYWxzZS4KKyAgICAgKiAgICAgICAgICAgICAgICAgIFRoaXMgd2lsbCBt
YWtlIGNyZWF0aW9uIG9mIGNoaWxkcmVuLCByZWN1cnNpdmUuCisgICAgICogQHBhcmFtIGNsb25l
UGh5c2ljc0ltcG9zdG9yIFdoZW4gY2xvbmluZywgaW5jbHVkZSBjbG9uaW5nIG1lc2ggcGh5c2lj
cyBpbXBvc3RvciwgZGVmYXVsdCBUcnVlLgorICAgICAqLworICAgIGZ1bmN0aW9uIE1lc2gobmFt
ZSwgc2NlbmUsIHBhcmVudCwgc291cmNlLCBkb05vdENsb25lQ2hpbGRyZW4sIGNsb25lUGh5c2lj
c0ltcG9zdG9yKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVs
bDsgfQorICAgICAgICBpZiAocGFyZW50ID09PSB2b2lkIDApIHsgcGFyZW50ID0gbnVsbDsgfQor
ICAgICAgICBpZiAoc291cmNlID09PSB2b2lkIDApIHsgc291cmNlID0gbnVsbDsgfQorICAgICAg
ICBpZiAoY2xvbmVQaHlzaWNzSW1wb3N0b3IgPT09IHZvaWQgMCkgeyBjbG9uZVBoeXNpY3NJbXBv
c3RvciA9IHRydWU7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFt
ZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIC8vIEludGVybmFsIGRhdGEKKyAgICAgICAgX3Ro
aXMuX2ludGVybmFsTWVzaERhdGFJbmZvID0gbmV3IF9JbnRlcm5hbE1lc2hEYXRhSW5mbygpOwor
ICAgICAgICAvLyBNZW1iZXJzCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBkZWxh
eSBsb2FkaW5nIHN0YXRlIG9mIHRoZSBtZXNoICh3aGVuIGRlbGF5IGxvYWRpbmcgaXMgdHVybmVk
IG9uKQorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vdXNp
bmdfdGhlX2luY3JlbWVudGFsX2xvYWRpbmdfc3lzdGVtCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTdfX1siQ29uc3RhbnRzIl0uREVMQVlMT0FEU1RBVEVfTk9ORTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgaW5zdGFuY2VzIGNyZWF0ZWQgZnJvbSB0
aGlzIG1lc2gKKyAgICAgICAgICogaXQgaXMgbm90IHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIG1h
bnVhbGx5LgorICAgICAgICAgKiBOb3RlIGFsc28gdGhhdCB0aGUgb3JkZXIgb2YgdGhlIEluc3Rh
bmNlZE1lc2ggd2loaW4gdGhlIGFycmF5IGlzIG5vdCBzaWduaWZpY2FudCBhbmQgbWlnaHQgY2hh
bmdlLgorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93
X3RvX3VzZV9pbnN0YW5jZXMKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmluc3RhbmNlcyA9
IG5ldyBBcnJheSgpOworICAgICAgICAvLyBQcml2YXRlCisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIF90aGlzLl9jcmVhdGlvbkRhdGFTdG9yYWdlID0gbnVsbDsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2dlb21ldHJ5ID0gbnVsbDsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2luc3RhbmNlRGF0YVN0b3JhZ2UgPSBuZXcgX0lu
c3RhbmNlRGF0YVN0b3JhZ2UoKTsKKyAgICAgICAgX3RoaXMuX2VmZmVjdGl2ZU1hdGVyaWFsID0g
bnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX3Nob3VsZEdlbmVy
YXRlRmxhdFNoYWRpbmcgPSBmYWxzZTsKKyAgICAgICAgLy8gVXNlIGJ5IGJ1aWxkZXIgb25seSB0
byBrbm93IHdoYXQgb3JpZW50YXRpb24gd2VyZSB0aGUgbWVzaCBidWlsZCBpbi4KKyAgICAgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX29yaWdpbmFsQnVpbGRlclNpZGVPcmllbnRh
dGlvbiA9IE1lc2guREVGQVVMVFNJREU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVc2UgdGhp
cyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIG9yaWdpbmFsIHNpZGUgb3JpZW50YXRpb24gZGVmaW5l
ZCBhdCBjb25zdHJ1Y3Rpb24gdGltZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub3ZlcnJp
ZGVNYXRlcmlhbFNpZGVPcmllbnRhdGlvbiA9IG51bGw7CisgICAgICAgIHNjZW5lID0gX3RoaXMu
Z2V0U2NlbmUoKTsKKyAgICAgICAgaWYgKHNvdXJjZSkgeworICAgICAgICAgICAgLy8gR2VvbWV0
cnkKKyAgICAgICAgICAgIGlmIChzb3VyY2UuX2dlb21ldHJ5KSB7CisgICAgICAgICAgICAgICAg
c291cmNlLl9nZW9tZXRyeS5hcHBseVRvTWVzaChfdGhpcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBEZWVwIGNvcHkKKyAgICAgICAgICAgIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHNvdXJjZSwgX3Ro
aXMsIFsibmFtZSIsICJtYXRlcmlhbCIsICJza2VsZXRvbiIsICJpbnN0YW5jZXMiLCAicGFyZW50
IiwgInVuaXF1ZUlkIiwKKyAgICAgICAgICAgICAgICAic291cmNlIiwgIm1ldGFkYXRhIiwgImhh
c0xPRExldmVscyIsICJnZW9tZXRyeSIsICJpc0Jsb2NrZWQiLCAiYXJlTm9ybWFsc0Zyb3plbiIs
CisgICAgICAgICAgICAgICAgIm9uQmVmb3JlRHJhd09ic2VydmFibGUiLCAib25CZWZvcmVSZW5k
ZXJPYnNlcnZhYmxlIiwgIm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlIiwgIm9uQmVmb3JlRHJhdyIs
CisgICAgICAgICAgICAgICAgIm9uQWZ0ZXJXb3JsZE1hdHJpeFVwZGF0ZU9ic2VydmFibGUiLCAi
b25Db2xsaWRlT2JzZXJ2YWJsZSIsICJvbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdlT2JzZXJ2YWJs
ZSIsICJvblJlYnVpbGRPYnNlcnZhYmxlIiwKKyAgICAgICAgICAgICAgICAib25EaXNwb3NlT2Jz
ZXJ2YWJsZSIsICJsaWdodFNvdXJjZXMiCisgICAgICAgICAgICBdLCBbIl9wb3NlTWF0cml4Il0p
OworICAgICAgICAgICAgLy8gU291cmNlIG1lc2gKKyAgICAgICAgICAgIF90aGlzLl9pbnRlcm5h
bE1lc2hEYXRhSW5mby5fc291cmNlID0gc291cmNlOworICAgICAgICAgICAgaWYgKHNjZW5lLnVz
ZUNsb25lZE1lc2hoTWFwKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzb3VyY2UuX2ludGVybmFs
TWVzaERhdGFJbmZvLm1lc2hNYXApIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlLl9pbnRl
cm5hbE1lc2hEYXRhSW5mby5tZXNoTWFwID0ge307CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHNvdXJjZS5faW50ZXJuYWxNZXNoRGF0YUluZm8ubWVzaE1hcFtfdGhpcy51bmlx
dWVJZF0gPSBfdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENvbnN0cnVjdGlv
biBQYXJhbXMKKyAgICAgICAgICAgIC8vIENsb25lIHBhcmFtZXRlcnMgYWxsb3dpbmcgbWVzaCB0
byBiZSB1cGRhdGVkIGluIGNhc2Ugb2YgcGFyYW1ldHJpYyBzaGFwZXMuCisgICAgICAgICAgICBf
dGhpcy5fb3JpZ2luYWxCdWlsZGVyU2lkZU9yaWVudGF0aW9uID0gc291cmNlLl9vcmlnaW5hbEJ1
aWxkZXJTaWRlT3JpZW50YXRpb247CisgICAgICAgICAgICBfdGhpcy5fY3JlYXRpb25EYXRhU3Rv
cmFnZSA9IHNvdXJjZS5fY3JlYXRpb25EYXRhU3RvcmFnZTsKKyAgICAgICAgICAgIC8vIEFuaW1h
dGlvbiByYW5nZXMKKyAgICAgICAgICAgIGlmIChzb3VyY2UuX3JhbmdlcykgeworICAgICAgICAg
ICAgICAgIHZhciByYW5nZXMgPSBzb3VyY2UuX3JhbmdlczsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBuYW1lIGluIHJhbmdlcykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlcy5o
YXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyYW5nZXNb
bmFtZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmNyZWF0ZUFuaW1hdGlvblJhbmdl
KG5hbWUsIHJhbmdlc1tuYW1lXS5mcm9tLCByYW5nZXNbbmFtZV0udG8pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE1ldGFkYXRhCisgICAgICAgICAg
ICBpZiAoc291cmNlLm1ldGFkYXRhICYmIHNvdXJjZS5tZXRhZGF0YS5jbG9uZSkgeworICAgICAg
ICAgICAgICAgIF90aGlzLm1ldGFkYXRhID0gc291cmNlLm1ldGFkYXRhLmNsb25lKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5tZXRh
ZGF0YSA9IHNvdXJjZS5tZXRhZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRh
Z3MKKyAgICAgICAgICAgIGlmIChfTWlzY190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIlRhZ3MiXSAmJiBfTWlzY190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRh
Z3MiXS5IYXNUYWdzKHNvdXJjZSkpIHsKKyAgICAgICAgICAgICAgICBfTWlzY190YWdzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRhZ3MiXS5BZGRUYWdzVG8oX3RoaXMsIF9NaXNjX3Rh
Z3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGFncyJdLkdldFRhZ3Moc291cmNlLCB0
cnVlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBQYXJlbnQKKyAgICAgICAgICAg
IF90aGlzLnBhcmVudCA9IHNvdXJjZS5wYXJlbnQ7CisgICAgICAgICAgICAvLyBQaXZvdAorICAg
ICAgICAgICAgX3RoaXMuc2V0UGl2b3RNYXRyaXgoc291cmNlLmdldFBpdm90TWF0cml4KCkpOwor
ICAgICAgICAgICAgX3RoaXMuaWQgPSBuYW1lICsgIi4iICsgc291cmNlLmlkOworICAgICAgICAg
ICAgLy8gTWF0ZXJpYWwKKyAgICAgICAgICAgIF90aGlzLm1hdGVyaWFsID0gc291cmNlLm1hdGVy
aWFsOworICAgICAgICAgICAgdmFyIGluZGV4OworICAgICAgICAgICAgaWYgKCFkb05vdENsb25l
Q2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAgICAvLyBDaGlsZHJlbgorICAgICAgICAgICAgICAg
IHZhciBkaXJlY3REZXNjZW5kYW50cyA9IHNvdXJjZS5nZXREZXNjZW5kYW50cyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleF8xID0gMDsgaW5kZXhfMSA8IGRpcmVjdERlc2Nl
bmRhbnRzLmxlbmd0aDsgaW5kZXhfMSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjaGls
ZCA9IGRpcmVjdERlc2NlbmRhbnRzW2luZGV4XzFdOworICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQuY2xvbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmNsb25lKG5hbWUg
KyAiLiIgKyBjaGlsZC5uYW1lLCBfdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBQaHlzaWNzIGNsb25l
CisgICAgICAgICAgICBpZiAoc2NlbmUuZ2V0UGh5c2ljc0VuZ2luZSkgeworICAgICAgICAgICAg
ICAgIHZhciBwaHlzaWNzRW5naW5lID0gc2NlbmUuZ2V0UGh5c2ljc0VuZ2luZSgpOworICAgICAg
ICAgICAgICAgIGlmIChjbG9uZVBoeXNpY3NJbXBvc3RvciAmJiBwaHlzaWNzRW5naW5lKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBpbXBvc3RvciA9IHBoeXNpY3NFbmdpbmUuZ2V0SW1wb3N0
b3JGb3JQaHlzaWNzT2JqZWN0KHNvdXJjZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbXBv
c3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucGh5c2ljc0ltcG9zdG9yID0g
aW1wb3N0b3IuY2xvbmUoX3RoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUGFydGljbGVzCisgICAgICAg
ICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzY2VuZS5wYXJ0aWNsZVN5c3RlbXMubGVuZ3Ro
OyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHN5c3RlbSA9IHNjZW5lLnBhcnRpY2xl
U3lzdGVtc1tpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKHN5c3RlbS5lbWl0dGVyID09PSBz
b3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLmNsb25lKHN5c3RlbS5uYW1lLCBf
dGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgX3Ro
aXMucmVmcmVzaEJvdW5kaW5nSW5mbygpOworICAgICAgICAgICAgX3RoaXMuY29tcHV0ZVdvcmxk
TWF0cml4KHRydWUpOworICAgICAgICB9CisgICAgICAgIC8vIFBhcmVudAorICAgICAgICBpZiAo
cGFyZW50ICE9PSBudWxsKSB7CisgICAgICAgICAgICBfdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Cisg
ICAgICAgIH0KKyAgICAgICAgX3RoaXMuX2luc3RhbmNlRGF0YVN0b3JhZ2UuaGFyZHdhcmVJbnN0
YW5jZWRSZW5kZXJpbmcgPSBfdGhpcy5nZXRFbmdpbmUoKS5nZXRDYXBzKCkuaW5zdGFuY2VkQXJy
YXlzOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMg
dGhlIGRlZmF1bHQgc2lkZSBvcmllbnRhdGlvbi4KKyAgICAgKiBAcGFyYW0gb3JpZW50YXRpb24g
dGhlIG9yaWVudGF0aW9uIHRvIHZhbHVlIHRvIGF0dGVtcHQgdG8gZ2V0CisgICAgICogQHJldHVy
bnMgdGhlIGRlZmF1bHQgb3JpZW50YXRpb24KKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAg
TWVzaC5fR2V0RGVmYXVsdFNpZGVPcmllbnRhdGlvbiA9IGZ1bmN0aW9uIChvcmllbnRhdGlvbikg
eworICAgICAgICByZXR1cm4gb3JpZW50YXRpb24gfHwgTWVzaC5GUk9OVFNJREU7IC8vIHdvcmtz
IGFzIE1lc2guRlJPTlRTSURFIGlzIDAKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShNZXNoLnByb3RvdHlwZSwgIm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZSIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCBiZWZvcmUgcmVuZGVyaW5nIHRoZSBt
ZXNoCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm8uX29uQmVmb3JlUmVuZGVyT2JzZXJ2YWJs
ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTWVzaERhdGFJbmZvLl9vbkJlZm9y
ZVJlbmRlck9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mby5fb25CZWZvcmVSZW5kZXJPYnNlcnZh
YmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzaC5w
cm90b3R5cGUsICJvbkJlZm9yZUJpbmRPYnNlcnZhYmxlIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSBiaW5kaW5nIHRoZSBtZXNoCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5f
aW50ZXJuYWxNZXNoRGF0YUluZm8uX29uQmVmb3JlQmluZE9ic2VydmFibGUpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mby5fb25CZWZvcmVCaW5kT2JzZXJ2YWJs
ZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9i
c2VydmFibGUiXSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lu
dGVybmFsTWVzaERhdGFJbmZvLl9vbkJlZm9yZUJpbmRPYnNlcnZhYmxlOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzaC5wcm90b3R5cGUsICJvbkFmdGVy
UmVuZGVyT2JzZXJ2YWJsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJp
Z2dlcmVkIGFmdGVyIHJlbmRlcmluZyB0aGUgbWVzaAorICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5faW50ZXJuYWxNZXNoRGF0YUlu
Zm8uX29uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5faW50
ZXJuYWxNZXNoRGF0YUluZm8uX29uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29i
c2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxNZXNoRGF0YUlu
Zm8uX29uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoTWVzaC5wcm90b3R5cGUsICJvbkJlZm9yZURyYXdPYnNlcnZhYmxl
IiwgeworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgYmVmb3JlIGRy
YXdpbmcgdGhlIG1lc2gKKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBpZiAoIXRoaXMuX2ludGVybmFsTWVzaERhdGFJbmZvLl9vbkJlZm9yZURyYXdP
YnNlcnZhYmxlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm8u
X29uQmVmb3JlRHJhd09ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mby5fb25CZWZvcmVEcmF3T2Jz
ZXJ2YWJsZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1l
c2gucHJvdG90eXBlLCAib25CZWZvcmVEcmF3IiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
U2V0cyBhIGNhbGxiYWNrIHRvIGNhbGwgYmVmb3JlIGRyYXdpbmcgdGhlIG1lc2guIEl0IGlzIHJl
Y29tbWVuZGVkIHRvIHVzZSBvbkJlZm9yZURyYXdPYnNlcnZhYmxlIGluc3RlYWQKKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fb25CZWZvcmVEcmF3T2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQmVm
b3JlRHJhd09ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQmVmb3JlRHJhd09ic2VydmVyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX29uQmVmb3JlRHJhd09ic2VydmVyID0gdGhp
cy5vbkJlZm9yZURyYXdPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXNoLnByb3RvdHlwZSwgImhhc0luc3RhbmNl
cyIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5pbnN0YW5jZXMubGVuZ3RoID4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KE1lc2gucHJvdG90eXBlLCAibW9ycGhUYXJnZXRNYW5hZ2VyIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBtb3JwaCB0YXJnZXQgbWFuYWdl
cgorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3Rv
X3VzZV9tb3JwaHRhcmdldHMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsTWVzaERhdGFJbmZvLl9tb3JwaFRh
cmdldE1hbmFnZXI7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm8uX21vcnBoVGFyZ2V0
TWFuYWdlciA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mby5fbW9ycGhUYXJnZXRN
YW5hZ2VyID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9zeW5jR2VvbWV0cnlXaXRoTW9ycGhU
YXJnZXRNYW5hZ2VyKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShNZXNoLnByb3RvdHlwZSwgInNvdXJjZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIHNvdXJjZSBtZXNoICh0aGUgb25lIHVzZWQgdG8gY2xvbmUgdGhpcyBvbmUgZnJv
bSkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2ludGVybmFsTWVzaERhdGFJbmZvLl9zb3VyY2U7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXNoLnByb3RvdHlwZSwgImlzVW5JbmRl
eGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBp
bmRpY2F0aW5nIHRoYXQgdGhpcyBtZXNoIGRvZXMgbm90IHVzZSBpbmRleCBidWZmZXIKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3VuSW5kZXhlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl91bkluZGV4ZWQgIT09IHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5fdW5JbmRleGVkID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdGhpcy5f
bWFya1N1Yk1lc2hlc0FzQXR0cmlidXRlc0RpcnR5KCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIC8vIE1ldGhvZHMKKyAgICBNZXNoLnByb3RvdHlwZS5pbnN0YW50aWF0
ZUhpZXJhcnljaHkgPSBmdW5jdGlvbiAobmV3UGFyZW50KSB7CisgICAgICAgIGlmIChuZXdQYXJl
bnQgPT09IHZvaWQgMCkgeyBuZXdQYXJlbnQgPSBudWxsOyB9CisgICAgICAgIHZhciBpbnN0YW5j
ZSA9IHRoaXMuY3JlYXRlSW5zdGFuY2UoImluc3RhbmNlIG9mICIgKyAodGhpcy5uYW1lIHx8IHRo
aXMuaWQpKTsKKyAgICAgICAgaW5zdGFuY2UucGFyZW50ID0gbmV3UGFyZW50IHx8IHRoaXMucGFy
ZW50OworICAgICAgICBpbnN0YW5jZS5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb24uY2xvbmUoKTsK
KyAgICAgICAgaW5zdGFuY2Uuc2NhbGluZyA9IHRoaXMuc2NhbGluZy5jbG9uZSgpOworICAgICAg
ICBpZiAodGhpcy5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIGluc3RhbmNlLnJv
dGF0aW9uUXVhdGVybmlvbiA9IHRoaXMucm90YXRpb25RdWF0ZXJuaW9uLmNsb25lKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnN0YW5jZS5yb3RhdGlvbiA9IHRo
aXMucm90YXRpb24uY2xvbmUoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAs
IF9hID0gdGhpcy5nZXRDaGlsZFRyYW5zZm9ybU5vZGVzKHRydWUpOyBfaSA8IF9hLmxlbmd0aDsg
X2krKykgeworICAgICAgICAgICAgdmFyIGNoaWxkID0gX2FbX2ldOworICAgICAgICAgICAgY2hp
bGQuaW5zdGFudGlhdGVIaWVyYXJ5Y2h5KGluc3RhbmNlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBu
YW1lCisgICAgICogQHJldHVybnMgdGhlIHN0cmluZyAiTWVzaCIuCisgICAgICovCisgICAgTWVz
aC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
Ik1lc2giOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1lc2gucHJvdG90eXBl
LCAiX2lzTWVzaCIsIHsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIGRlc2NyaXB0aW9uIG9mIHRoaXMgbWVzaAorICAgICAq
IEBwYXJhbSBmdWxsRGV0YWlscyBkZWZpbmUgaWYgZnVsbCBkZXRhaWxzIGFib3V0IHRoaXMgbWVz
aCBtdXN0IGJlIHVzZWQKKyAgICAgKiBAcmV0dXJucyBhIGRlc2NyaXB0aXZlIHN0cmluZyByZXBy
ZXNlbnRpbmcgdGhpcyBtZXNoCisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUudG9TdHJpbmcg
PSBmdW5jdGlvbiAoZnVsbERldGFpbHMpIHsKKyAgICAgICAgdmFyIHJldCA9IF9zdXBlci5wcm90
b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzLCBmdWxsRGV0YWlscyk7CisgICAgICAgIHJldCArPSAi
LCBuIHZlcnRpY2VzOiAiICsgdGhpcy5nZXRUb3RhbFZlcnRpY2VzKCk7CisgICAgICAgIHJldCAr
PSAiLCBwYXJlbnQ6ICIgKyAodGhpcy5fd2FpdGluZ1BhcmVudElkID8gdGhpcy5fd2FpdGluZ1Bh
cmVudElkIDogKHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQubmFtZSA6ICJOT05FIikpOworICAg
ICAgICBpZiAodGhpcy5hbmltYXRpb25zKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHJldCAr
PSAiLCBhbmltYXRpb25bMF06ICIgKyB0aGlzLmFuaW1hdGlvbnNbaV0udG9TdHJpbmcoZnVsbERl
dGFpbHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmdWxsRGV0YWls
cykgeworICAgICAgICAgICAgaWYgKHRoaXMuX2dlb21ldHJ5KSB7CisgICAgICAgICAgICAgICAg
dmFyIGliID0gdGhpcy5nZXRJbmRpY2VzKCk7CisgICAgICAgICAgICAgICAgdmFyIHZiID0gdGhp
cy5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJW
ZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpOworICAgICAgICAgICAgICAgIGlmICh2YiAmJiBp
YikgeworICAgICAgICAgICAgICAgICAgICByZXQgKz0gIiwgZmxhdCBzaGFkaW5nOiAiICsgKHZi
Lmxlbmd0aCAvIDMgPT09IGliLmxlbmd0aCA/ICJZRVMiIDogIk5PIik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
cmV0ICs9ICIsIGZsYXQgc2hhZGluZzogVU5LTk9XTiI7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAg
TWVzaC5wcm90b3R5cGUuX3VuQmluZEVmZmVjdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgX3N1
cGVyLnByb3RvdHlwZS5fdW5CaW5kRWZmZWN0LmNhbGwodGhpcyk7CisgICAgICAgIGZvciAodmFy
IF9pID0gMCwgX2EgPSB0aGlzLmluc3RhbmNlczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAg
ICAgICAgICAgIHZhciBpbnN0YW5jZSA9IF9hW19pXTsKKyAgICAgICAgICAgIGluc3RhbmNlLl91
bkJpbmRFZmZlY3QoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KE1lc2gucHJvdG90eXBlLCAiaGFzTE9ETGV2ZWxzIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIG1lc2ggaGFzIExPRAorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm8uX0xPRExldmVscy5sZW5ndGggPiAwOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIE1lc2hMT0RMZXZl
bCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgbWVzaAorICAgICAqIEByZXR1cm5zIGFuIGFy
cmF5IG9mIE1lc2hMT0RMZXZlbAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLmdldExPRExl
dmVscyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsTWVzaERh
dGFJbmZvLl9MT0RMZXZlbHM7CisgICAgfTsKKyAgICBNZXNoLnByb3RvdHlwZS5fc29ydExPRExl
dmVscyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm8u
X0xPRExldmVscy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICBpZiAoYS5kaXN0
YW5jZSA8IGIuZGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChhLmRpc3RhbmNlID4gYi5kaXN0YW5jZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBhIG1lc2ggYXMgTE9E
IGxldmVsIHRyaWdnZXJlZCBhdCB0aGUgZ2l2ZW4gZGlzdGFuY2UuCisgICAgICogQHNlZSBodHRw
czovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2xvZAorICAgICAqIEBwYXJh
bSBkaXN0YW5jZSBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBvYmplY3QgdG8g
c2hvdyB0aGlzIGxldmVsCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gYmUgYWRkZWQg
YXMgTE9EIGxldmVsIChjYW4gYmUgbnVsbCkKKyAgICAgKiBAcmV0dXJuIFRoaXMgbWVzaCAoZm9y
IGNoYWluaW5nKQorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLmFkZExPRExldmVsID0gZnVu
Y3Rpb24gKGRpc3RhbmNlLCBtZXNoKSB7CisgICAgICAgIGlmIChtZXNoICYmIG1lc2guX21hc3Rl
ck1lc2gpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTlfX1siTG9nZ2VyIl0uV2FybigiWW91IGNhbm5vdCB1c2UgYSBtZXNoIGFzIExPRCBsZXZl
bCB0d2ljZSIpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGxldmVsID0gbmV3IF9tZXNoTE9ETGV2ZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIz
X19bIk1lc2hMT0RMZXZlbCJdKGRpc3RhbmNlLCBtZXNoKTsKKyAgICAgICAgdGhpcy5faW50ZXJu
YWxNZXNoRGF0YUluZm8uX0xPRExldmVscy5wdXNoKGxldmVsKTsKKyAgICAgICAgaWYgKG1lc2gp
IHsKKyAgICAgICAgICAgIG1lc2guX21hc3Rlck1lc2ggPSB0aGlzOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX3NvcnRMT0RMZXZlbHMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBMT0QgbGV2ZWwgbWVzaCBhdCB0aGUgcGFzc2Vk
IGRpc3RhbmNlIG9yIG51bGwgaWYgbm90IGZvdW5kLgorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9sb2QKKyAgICAgKiBAcGFyYW0gZGlzdGFu
Y2UgVGhlIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgb2JqZWN0IHRvIHNob3cgdGhp
cyBsZXZlbAorICAgICAqIEByZXR1cm5zIGEgTWVzaCBvciBgbnVsbGAKKyAgICAgKi8KKyAgICBN
ZXNoLnByb3RvdHlwZS5nZXRMT0RMZXZlbEF0RGlzdGFuY2UgPSBmdW5jdGlvbiAoZGlzdGFuY2Up
IHsKKyAgICAgICAgdmFyIGludGVybmFsRGF0YUluZm8gPSB0aGlzLl9pbnRlcm5hbE1lc2hEYXRh
SW5mbzsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGludGVybmFsRGF0YUlu
Zm8uX0xPRExldmVscy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBsZXZlbCA9
IGludGVybmFsRGF0YUluZm8uX0xPRExldmVsc1tpbmRleF07CisgICAgICAgICAgICBpZiAobGV2
ZWwuZGlzdGFuY2UgPT09IGRpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxldmVs
Lm1lc2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBtZXNoIGZyb20gdGhlIExPRCBhcnJheQor
ICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9s
b2QKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRvIGJlIHJlbW92ZWQKKyAg
ICAgKiBAcmV0dXJuIFRoaXMgbWVzaCAoZm9yIGNoYWluaW5nKQorICAgICAqLworICAgIE1lc2gu
cHJvdG90eXBlLnJlbW92ZUxPRExldmVsID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgdmFy
IGludGVybmFsRGF0YUluZm8gPSB0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mbzsKKyAgICAgICAg
Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGludGVybmFsRGF0YUluZm8uX0xPRExldmVscy5s
ZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmIChpbnRlcm5hbERhdGFJbmZvLl9MT0RM
ZXZlbHNbaW5kZXhdLm1lc2ggPT09IG1lc2gpIHsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbERh
dGFJbmZvLl9MT0RMZXZlbHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICBpZiAo
bWVzaCkgeworICAgICAgICAgICAgICAgICAgICBtZXNoLl9tYXN0ZXJNZXNoID0gbnVsbDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
c29ydExPRExldmVscygpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJldHVybnMgdGhlIHJlZ2lzdGVyZWQgTE9EIG1lc2ggZGlzdGFudCBmcm9tIHRoZSBw
YXJhbWV0ZXIgYGNhbWVyYWAgcG9zaXRpb24gaWYgYW55LCBlbHNlIHJldHVybnMgdGhlIGN1cnJl
bnQgbWVzaC4KKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hv
d190b191c2VfbG9kCisgICAgICogQHBhcmFtIGNhbWVyYSBkZWZpbmVzIHRoZSBjYW1lcmEgdG8g
dXNlIHRvIGNvbXB1dGUgZGlzdGFuY2UKKyAgICAgKiBAcGFyYW0gYm91bmRpbmdTcGhlcmUgZGVm
aW5lcyBhIGN1c3RvbSBib3VuZGluZyBzcGhlcmUgdG8gdXNlIGluc3RlYWQgb2YgdGhlIG9uZSBm
cm9tIHRoaXMgbWVzaAorICAgICAqIEByZXR1cm4gVGhpcyBtZXNoIChmb3IgY2hhaW5pbmcpCisg
ICAgICovCisgICAgTWVzaC5wcm90b3R5cGUuZ2V0TE9EID0gZnVuY3Rpb24gKGNhbWVyYSwgYm91
bmRpbmdTcGhlcmUpIHsKKyAgICAgICAgdmFyIGludGVybmFsRGF0YUluZm8gPSB0aGlzLl9pbnRl
cm5hbE1lc2hEYXRhSW5mbzsKKyAgICAgICAgaWYgKCFpbnRlcm5hbERhdGFJbmZvLl9MT0RMZXZl
bHMgfHwgaW50ZXJuYWxEYXRhSW5mby5fTE9ETGV2ZWxzLmxlbmd0aCA9PT0gMCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGJTcGhlcmU7CisgICAg
ICAgIGlmIChib3VuZGluZ1NwaGVyZSkgeworICAgICAgICAgICAgYlNwaGVyZSA9IGJvdW5kaW5n
U3BoZXJlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGJvdW5k
aW5nSW5mbyA9IHRoaXMuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICBiU3BoZXJlID0g
Ym91bmRpbmdJbmZvLmJvdW5kaW5nU3BoZXJlOworICAgICAgICB9CisgICAgICAgIHZhciBkaXN0
YW5jZVRvQ2FtZXJhID0gYlNwaGVyZS5jZW50ZXJXb3JsZC5zdWJ0cmFjdChjYW1lcmEuZ2xvYmFs
UG9zaXRpb24pLmxlbmd0aCgpOworICAgICAgICBpZiAoaW50ZXJuYWxEYXRhSW5mby5fTE9ETGV2
ZWxzW2ludGVybmFsRGF0YUluZm8uX0xPRExldmVscy5sZW5ndGggLSAxXS5kaXN0YW5jZSA+IGRp
c3RhbmNlVG9DYW1lcmEpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm9uTE9ETGV2ZWxTZWxlY3Rp
b24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uTE9ETGV2ZWxTZWxlY3Rpb24oZGlzdGFuY2VU
b0NhbWVyYSwgdGhpcywgaW50ZXJuYWxEYXRhSW5mby5fTE9ETGV2ZWxzW2ludGVybmFsRGF0YUlu
Zm8uX0xPRExldmVscy5sZW5ndGggLSAxXS5tZXNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsg
aW5kZXggPCBpbnRlcm5hbERhdGFJbmZvLl9MT0RMZXZlbHMubGVuZ3RoOyBpbmRleCsrKSB7Cisg
ICAgICAgICAgICB2YXIgbGV2ZWwgPSBpbnRlcm5hbERhdGFJbmZvLl9MT0RMZXZlbHNbaW5kZXhd
OworICAgICAgICAgICAgaWYgKGxldmVsLmRpc3RhbmNlIDwgZGlzdGFuY2VUb0NhbWVyYSkgewor
ICAgICAgICAgICAgICAgIGlmIChsZXZlbC5tZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIGxl
dmVsLm1lc2guX3ByZUFjdGl2YXRlKCk7CisgICAgICAgICAgICAgICAgICAgIGxldmVsLm1lc2gu
X3VwZGF0ZVN1Yk1lc2hlc0JvdW5kaW5nSW5mbyh0aGlzLndvcmxkTWF0cml4RnJvbUNhY2hlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMub25MT0RMZXZlbFNl
bGVjdGlvbikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTE9ETGV2ZWxTZWxlY3Rpb24o
ZGlzdGFuY2VUb0NhbWVyYSwgdGhpcywgbGV2ZWwubWVzaCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiBsZXZlbC5tZXNoOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLm9uTE9ETGV2ZWxTZWxlY3Rpb24pIHsKKyAgICAgICAgICAg
IHRoaXMub25MT0RMZXZlbFNlbGVjdGlvbihkaXN0YW5jZVRvQ2FtZXJhLCB0aGlzLCB0aGlzKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShNZXNoLnByb3RvdHlwZSwgImdlb21ldHJ5IiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgbWVzaCBpbnRlcm5hbCBHZW9tZXRyeSBvYmplY3QKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2dlb21ldHJ5OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXMgd2l0aGluIHRoZSBtZXNoIGdlb21ldHJ5IG9yIHpl
cm8gaWYgdGhlIG1lc2ggaGFzIG5vIGdlb21ldHJ5LgorICAgICAqIEByZXR1cm5zIHRoZSB0b3Rh
bCBudW1iZXIgb2YgdmVydGljZXMKKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5nZXRUb3Rh
bFZlcnRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fZ2VvbWV0cnkgPT09
IG51bGwgfHwgdGhpcy5fZ2VvbWV0cnkgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2dlb21ldHJ5LmdldFRvdGFs
VmVydGljZXMoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGNvbnRlbnQg
b2YgYW4gYXNzb2NpYXRlZCB2ZXJ0ZXggYnVmZmVyCisgICAgICogQHBhcmFtIGtpbmQgZGVmaW5l
cyB3aGljaCBidWZmZXIgdG8gcmVhZCBmcm9tIChwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1hbHMs
IGV0YykuIFBvc3NpYmxlIGBraW5kYCB2YWx1ZXMgOgorICAgICAqIC0gVmVydGV4QnVmZmVyLlBv
c2l0aW9uS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWS2luZAorICAgICAqIC0gVmVydGV4
QnVmZmVyLlVWMktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjNLaW5kCisgICAgICogLSBW
ZXJ0ZXhCdWZmZXIuVVY0S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNUtpbmQKKyAgICAg
KiAtIFZlcnRleEJ1ZmZlci5VVjZLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuQ29sb3JLaW5k
CisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzS2luZAorICAgICAqIC0gVmVy
dGV4QnVmZmVyLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVy
Lk1hdHJpY2VzV2VpZ2h0c0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdo
dHNFeHRyYUtpbmQKKyAgICAgKiBAcGFyYW0gY29weVdoZW5TaGFyZWQgZGVmaW5lcyBhIGJvb2xl
YW4gaW5kaWNhdGluZyB0aGF0IGlmIHRoZSBtZXNoIGdlb21ldHJ5IGlzIHNoYXJlZCBhbW9uZyBz
b21lIG90aGVyIG1lc2hlcywgdGhlIHJldHVybmVkIGFycmF5IGlzIGEgY29weSBvZiB0aGUgaW50
ZXJuYWwgb25lCisgICAgICogQHBhcmFtIGZvcmNlQ29weSBkZWZpbmVzIGEgYm9vbGVhbiBmb3Jj
aW5nIHRoZSBjb3B5IG9mIHRoZSBidWZmZXIgbm8gbWF0dGVyIHdoYXQgdGhlIHZhbHVlIG9mIGNv
cHlXaGVuU2hhcmVkIGlzCisgICAgICogQHJldHVybnMgYSBGbG9hdEFycmF5IG9yIG51bGwgaWYg
dGhlIG1lc2ggaGFzIG5vIGdlb21ldHJ5IG9yIG5vIHZlcnRleCBidWZmZXIgZm9yIHRoaXMga2lu
ZC4KKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5nZXRWZXJ0aWNlc0RhdGEgPSBmdW5jdGlv
biAoa2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSkgeworICAgICAgICBpZiAoIXRoaXMu
X2dlb21ldHJ5KSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdGhpcy5fZ2VvbWV0cnkuZ2V0VmVydGljZXNEYXRhKGtpbmQsIGNvcHlXaGVuU2hh
cmVkLCBmb3JjZUNvcHkpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbWVz
aCBWZXJ0ZXhCdWZmZXIgb2JqZWN0IGZyb20gdGhlIHJlcXVlc3RlZCBga2luZGAKKyAgICAgKiBA
cGFyYW0ga2luZCBkZWZpbmVzIHdoaWNoIGJ1ZmZlciB0byByZWFkIGZyb20gKHBvc2l0aW9ucywg
aW5kaWNlcywgbm9ybWFscywgZXRjKS4gUG9zc2libGUgYGtpbmRgIHZhbHVlcyA6CisgICAgICog
LSBWZXJ0ZXhCdWZmZXIuUG9zaXRpb25LaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTm9ybWFs
S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVy
LlVWMktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjNLaW5kCisgICAgICogLSBWZXJ0ZXhC
dWZmZXIuVVY0S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNUtpbmQKKyAgICAgKiAtIFZl
cnRleEJ1ZmZlci5VVjZLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuQ29sb3JLaW5kCisgICAg
ICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzS2luZAorICAgICAqIC0gVmVydGV4QnVm
ZmVyLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk1hdHJp
Y2VzV2VpZ2h0c0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNFeHRy
YUtpbmQKKyAgICAgKiBAcmV0dXJucyBhIEZsb2F0QXJyYXkgb3IgbnVsbCBpZiB0aGUgbWVzaCBo
YXMgbm8gdmVydGV4IGJ1ZmZlciBmb3IgdGhpcyBraW5kLgorICAgICAqLworICAgIE1lc2gucHJv
dG90eXBlLmdldFZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uIChraW5kKSB7CisgICAgICAgIGlmICgh
dGhpcy5fZ2VvbWV0cnkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLl9nZW9tZXRyeS5nZXRWZXJ0ZXhCdWZmZXIoa2luZCk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBUZXN0cyBpZiBhIHNwZWNpZmljIHZlcnRleCBidWZmZXIgaXMg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgbWVzaAorICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMgd2hp
Y2ggYnVmZmVyIHRvIGNoZWNrIChwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1hbHMsIGV0YykuIFBv
c3NpYmxlIGBraW5kYCB2YWx1ZXMgOgorICAgICAqIC0gVmVydGV4QnVmZmVyLlBvc2l0aW9uS2lu
ZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk5vcm1hbEtpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZl
ci5VVktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjJLaW5kCisgICAgICogLSBWZXJ0ZXhC
dWZmZXIuVVYzS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNEtpbmQKKyAgICAgKiAtIFZl
cnRleEJ1ZmZlci5VVjVLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuVVY2S2luZAorICAgICAq
IC0gVmVydGV4QnVmZmVyLkNvbG9yS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk1hdHJpY2Vz
SW5kaWNlc0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc0luZGljZXNFeHRyYUtp
bmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNLaW5kCisgICAgICogLSBW
ZXJ0ZXhCdWZmZXIuTWF0cmljZXNXZWlnaHRzRXh0cmFLaW5kCisgICAgICogQHJldHVybnMgYSBi
b29sZWFuCisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUuaXNWZXJ0aWNlc0RhdGFQcmVzZW50
ID0gZnVuY3Rpb24gKGtpbmQpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9nZW9tZXRyeSkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX2RlbGF5SW5mbykgeworICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLl9kZWxheUluZm8uaW5kZXhPZihraW5kKSAhPT0gLTE7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2dl
b21ldHJ5LmlzVmVydGljZXNEYXRhUHJlc2VudChraW5kKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJldHVybnMgYSBib29sZWFuIGRlZmluaW5nIGlmIHRoZSB2ZXJ0ZXggZGF0YSBmb3IgdGhl
IHJlcXVlc3RlZCBga2luZGAgaXMgdXBkYXRhYmxlLgorICAgICAqIEBwYXJhbSBraW5kIGRlZmlu
ZXMgd2hpY2ggYnVmZmVyIHRvIGNoZWNrIChwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1hbHMsIGV0
YykuIFBvc3NpYmxlIGBraW5kYCB2YWx1ZXMgOgorICAgICAqIC0gVmVydGV4QnVmZmVyLlBvc2l0
aW9uS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWS2luZAorICAgICAqIC0gVmVydGV4QnVm
ZmVyLlVWMktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjNLaW5kCisgICAgICogLSBWZXJ0
ZXhCdWZmZXIuVVY0S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNUtpbmQKKyAgICAgKiAt
IFZlcnRleEJ1ZmZlci5VVjZLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuQ29sb3JLaW5kCisg
ICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzS2luZAorICAgICAqIC0gVmVydGV4
QnVmZmVyLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk1h
dHJpY2VzV2VpZ2h0c0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNF
eHRyYUtpbmQKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4KKyAgICAgKi8KKyAgICBNZXNoLnBy
b3RvdHlwZS5pc1ZlcnRleEJ1ZmZlclVwZGF0YWJsZSA9IGZ1bmN0aW9uIChraW5kKSB7CisgICAg
ICAgIGlmICghdGhpcy5fZ2VvbWV0cnkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9kZWxheUlu
Zm8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsYXlJbmZvLmluZGV4T2Yoa2lu
ZCkgIT09IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nZW9tZXRyeS5pc1ZlcnRleEJ1ZmZlclVwZGF0
YWJsZShraW5kKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgd2hp
Y2ggY29udGFpbnMgdGhlIGxpc3Qgb2YgZXhpc3RpbmcgYGtpbmRzYCBvZiBWZXJ0ZXggRGF0YSBh
c3NvY2lhdGVkIHdpdGggdGhpcyBtZXNoLgorICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMgd2hp
Y2ggYnVmZmVyIHRvIHJlYWQgZnJvbSAocG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzLCBldGMp
LiBQb3NzaWJsZSBga2luZGAgdmFsdWVzIDoKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5Qb3NpdGlv
bktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5Ob3JtYWxLaW5kCisgICAgICogLSBWZXJ0ZXhC
dWZmZXIuVVZLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuVVYyS2luZAorICAgICAqIC0gVmVy
dGV4QnVmZmVyLlVWM0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjRLaW5kCisgICAgICog
LSBWZXJ0ZXhCdWZmZXIuVVY1S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNktpbmQKKyAg
ICAgKiAtIFZlcnRleEJ1ZmZlci5Db2xvcktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRy
aWNlc0luZGljZXNLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzRXh0
cmFLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNXZWlnaHRzS2luZAorICAgICAq
IC0gVmVydGV4QnVmZmVyLk1hdHJpY2VzV2VpZ2h0c0V4dHJhS2luZAorICAgICAqIEByZXR1cm5z
IGFuIGFycmF5IG9mIHN0cmluZ3MKKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5nZXRWZXJ0
aWNlc0RhdGFLaW5kcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9nZW9tZXRy
eSkgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheSgpOworICAgICAgICAgICAg
aWYgKHRoaXMuX2RlbGF5SW5mbykgeworICAgICAgICAgICAgICAgIHRoaXMuX2RlbGF5SW5mby5m
b3JFYWNoKGZ1bmN0aW9uIChraW5kKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNo
KGtpbmQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fZ2VvbWV0cnku
Z2V0VmVydGljZXNEYXRhS2luZHMoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBwb3NpdGl2ZSBpbnRlZ2VyIDogdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIHRoaXMg
bWVzaCBnZW9tZXRyeS4KKyAgICAgKiBAcmV0dXJucyB0aGUgbnVtbmVyIG9mIGluZGljZXMgb3Ig
emVybyBpZiB0aGUgbWVzaCBoYXMgbm8gZ2VvbWV0cnkuCisgICAgICovCisgICAgTWVzaC5wcm90
b3R5cGUuZ2V0VG90YWxJbmRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMu
X2dlb21ldHJ5KSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5fZ2VvbWV0cnkuZ2V0VG90YWxJbmRpY2VzKCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGludGVnZXJzIG9yIGEgdHlwZWQgYXJyYXkgKElu
dDMyQXJyYXksIFVpbnQzMkFycmF5LCBVaW50MTZBcnJheSkgcG9wdWxhdGVkIHdpdGggdGhlIG1l
c2ggaW5kaWNlcy4KKyAgICAgKiBAcGFyYW0gY29weVdoZW5TaGFyZWQgSWYgdHJ1ZSAoZGVmYXVs
dCBmYWxzZSkgYW5kIGFuZCBpZiB0aGUgbWVzaCBnZW9tZXRyeSBpcyBzaGFyZWQgYW1vbmcgc29t
ZSBvdGhlciBtZXNoZXMsIHRoZSByZXR1cm5lZCBhcnJheSBpcyBhIGNvcHkgb2YgdGhlIGludGVy
bmFsIG9uZS4KKyAgICAgKiBAcGFyYW0gZm9yY2VDb3B5IGRlZmluZXMgYSBib29sZWFuIGluZGlj
YXRpbmcgdGhhdCB0aGUgcmV0dXJuZWQgYXJyYXkgbXVzdCBiZSBjbG9uZWQgdXBvbiByZXR1cm5p
bmcgaXQKKyAgICAgKiBAcmV0dXJucyB0aGUgaW5kaWNlcyBhcnJheSBvciBhbiBlbXB0eSBhcnJh
eSBpZiB0aGUgbWVzaCBoYXMgbm8gZ2VvbWV0cnkKKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlw
ZS5nZXRJbmRpY2VzID0gZnVuY3Rpb24gKGNvcHlXaGVuU2hhcmVkLCBmb3JjZUNvcHkpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9nZW9tZXRyeSkgeworICAgICAgICAgICAgcmV0dXJuIFtdOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nZW9tZXRyeS5nZXRJbmRpY2VzKGNvcHlXaGVu
U2hhcmVkLCBmb3JjZUNvcHkpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1l
c2gucHJvdG90eXBlLCAiaXNCbG9ja2VkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXN0ZXJNZXNoICE9PSBudWxsICYmIHRoaXMuX21h
c3Rlck1lc2ggIT09IHVuZGVmaW5lZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAg
ICogRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IG1lc2ggaXMgcmVhZHkgdG8gYmUgcmVuZGVyZWQK
KyAgICAgKiBAcGFyYW0gY29tcGxldGVDaGVjayBkZWZpbmVzIGlmIGEgY29tcGxldGUgY2hlY2sg
KGluY2x1ZGluZyBtYXRlcmlhbHMgYW5kIGxpZ2h0cykgaGFzIHRvIGJlIGRvbmUgKGZhbHNlIGJ5
IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGZvcmNlSW5zdGFuY2VTdXBwb3J0IHdpbGwgY2hlY2sg
aWYgdGhlIG1lc2ggd2lsbCBiZSByZWFkeSB3aGVuIHVzZWQgd2l0aCBpbnN0YW5jZXMgKGZhbHNl
IGJ5IGRlZmF1bHQpCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBhbGwgYXNzb2NpYXRlZCBhc3Nl
dHMgYXJlIHJlYWR5IChtYXRlcmlhbCwgdGV4dHVyZXMsIHNoYWRlcnMpCisgICAgICovCisgICAg
TWVzaC5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uIChjb21wbGV0ZUNoZWNrLCBmb3JjZUlu
c3RhbmNlU3VwcG9ydCkgeworICAgICAgICBpZiAoY29tcGxldGVDaGVjayA9PT0gdm9pZCAwKSB7
IGNvbXBsZXRlQ2hlY2sgPSBmYWxzZTsgfQorICAgICAgICBpZiAoZm9yY2VJbnN0YW5jZVN1cHBv
cnQgPT09IHZvaWQgMCkgeyBmb3JjZUluc3RhbmNlU3VwcG9ydCA9IGZhbHNlOyB9CisgICAgICAg
IGlmICh0aGlzLmRlbGF5TG9hZFN0YXRlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE3X19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNUQVRFX0xPQURJTkcp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIV9z
dXBlci5wcm90b3R5cGUuaXNSZWFkeS5jYWxsKHRoaXMsIGNvbXBsZXRlQ2hlY2spKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnN1Yk1l
c2hlcyB8fCB0aGlzLnN1Yk1lc2hlcy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghY29tcGxldGVDaGVjaykgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMu
Z2V0RW5naW5lKCk7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAg
ICAgdmFyIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nID0gZm9yY2VJbnN0YW5jZVN1cHBvcnQg
fHwgZW5naW5lLmdldENhcHMoKS5pbnN0YW5jZWRBcnJheXMgJiYgdGhpcy5pbnN0YW5jZXMubGVu
Z3RoID4gMDsKKyAgICAgICAgdGhpcy5jb21wdXRlV29ybGRNYXRyaXgoKTsKKyAgICAgICAgdmFy
IG1hdCA9IHRoaXMubWF0ZXJpYWwgfHwgc2NlbmUuZGVmYXVsdE1hdGVyaWFsOworICAgICAgICBp
ZiAobWF0KSB7CisgICAgICAgICAgICBpZiAobWF0Ll9zdG9yZUVmZmVjdE9uU3ViTWVzaGVzKSB7
CisgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuc3ViTWVzaGVzOyBf
aSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgc3ViTWVzaCA9
IF9hW19pXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGVmZmVjdGl2ZU1hdGVyaWFsID0gc3Vi
TWVzaC5nZXRNYXRlcmlhbCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZWZmZWN0aXZlTWF0
ZXJpYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZmZlY3RpdmVNYXRlcmlhbC5f
c3RvcmVFZmZlY3RPblN1Yk1lc2hlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghZWZmZWN0aXZlTWF0ZXJpYWwuaXNSZWFkeUZvclN1Yk1lc2godGhpcywgc3ViTWVzaCwgaGFy
ZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVmZmVjdGl2ZU1hdGVyaWFsLmlzUmVhZHkodGhp
cywgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIW1hdC5pc1JlYWR5KHRoaXMsIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nKSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFNoYWRvd3MKKyAgICAgICAgZm9y
ICh2YXIgX2IgPSAwLCBfYyA9IHRoaXMubGlnaHRTb3VyY2VzOyBfYiA8IF9jLmxlbmd0aDsgX2Ir
KykgeworICAgICAgICAgICAgdmFyIGxpZ2h0ID0gX2NbX2JdOworICAgICAgICAgICAgdmFyIGdl
bmVyYXRvciA9IGxpZ2h0LmdldFNoYWRvd0dlbmVyYXRvcigpOworICAgICAgICAgICAgaWYgKGdl
bmVyYXRvcikgeworICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gMCwgX2UgPSB0aGlzLnN1
Yk1lc2hlczsgX2QgPCBfZS5sZW5ndGg7IF9kKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHN1Yk1lc2ggPSBfZVtfZF07CisgICAgICAgICAgICAgICAgICAgIGlmICghZ2VuZXJhdG9yLmlz
UmVhZHkoc3ViTWVzaCwgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gTE9ECisg
ICAgICAgIGZvciAodmFyIF9mID0gMCwgX2cgPSB0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mby5f
TE9ETGV2ZWxzOyBfZiA8IF9nLmxlbmd0aDsgX2YrKykgeworICAgICAgICAgICAgdmFyIGxvZCA9
IF9nW19mXTsKKyAgICAgICAgICAgIGlmIChsb2QubWVzaCAmJiAhbG9kLm1lc2guaXNSZWFkeSho
YXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzaC5wcm90b3R5cGUsICJhcmVOb3JtYWxz
RnJvemVuIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNh
dGluZyBpZiB0aGUgbm9ybWFscyBhcmVuJ3QgdG8gYmUgcmVjb21wdXRlZCBvbiBuZXh0IG1lc2gg
YHBvc2l0aW9uc2AgYXJyYXkgdXBkYXRlLiBUaGlzIHByb3BlcnR5IGlzIHBlcnRpbmVudCBvbmx5
IGZvciB1cGRhdGFibGUgcGFyYW1ldHJpYyBzaGFwZXMuCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbE1lc2hE
YXRhSW5mby5fYXJlTm9ybWFsc0Zyb3plbjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisg
ICAgICogVGhpcyBmdW5jdGlvbiBhZmZlY3RzIHBhcmFtZXRyaWMgc2hhcGVzIG9uIHZlcnRleCBw
b3NpdGlvbiB1cGRhdGUgb25seSA6IHJpYmJvbnMsIHR1YmVzLCBldGMuIEl0IGhhcyBubyBlZmZl
Y3QgYXQgYWxsIG9uIG90aGVyIHNoYXBlcy4gSXQgcHJldmVudHMgdGhlIG1lc2ggbm9ybWFscyBm
cm9tIGJlaW5nIHJlY29tcHV0ZWQgb24gbmV4dCBgcG9zaXRpb25zYCBhcnJheSB1cGRhdGUuCisg
ICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90
eXBlLmZyZWV6ZU5vcm1hbHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2ludGVybmFs
TWVzaERhdGFJbmZvLl9hcmVOb3JtYWxzRnJvemVuID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGFmZmVjdHMgcGFyYW1l
dHJpYyBzaGFwZXMgb24gdmVydGV4IHBvc2l0aW9uIHVwZGF0ZSBvbmx5IDogcmliYm9ucywgdHVi
ZXMsIGV0Yy4gSXQgaGFzIG5vIGVmZmVjdCBhdCBhbGwgb24gb3RoZXIgc2hhcGVzLiBJdCByZWFj
dGl2YXRlcyB0aGUgbWVzaCBub3JtYWxzIGNvbXB1dGF0aW9uIGlmIGl0IHdhcyBwcmV2aW91c2x5
IGZyb3plbgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBN
ZXNoLnByb3RvdHlwZS51bmZyZWV6ZU5vcm1hbHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMuX2ludGVybmFsTWVzaERhdGFJbmZvLl9hcmVOb3JtYWxzRnJvemVuID0gZmFsc2U7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1lc2gu
cHJvdG90eXBlLCAib3ZlcnJpZGVuSW5zdGFuY2VDb3VudCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFNldHMgYSB2YWx1ZSBvdmVycmlkaW5nIHRoZSBpbnN0YW5jZSBjb3VudC4gT25seSBh
cHBsaWNhYmxlIHdoZW4gY3VzdG9tIGluc3RhbmNlZCBJbnRlcmxlYXZlZFZlcnRleEJ1ZmZlciBh
cmUgdXNlZCByYXRoZXIgdGhhbiBJbnN0YW5jZWRNZXNocworICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAoY291bnQpIHsKKyAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlRGF0YVN0
b3JhZ2Uub3ZlcnJpZGVuSW5zdGFuY2VDb3VudCA9IGNvdW50OworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvLyBNZXRob2RzCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBNZXNoLnByb3RvdHlwZS5f
cHJlQWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpbnRlcm5hbERhdGFJbmZv
ID0gdGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm87CisgICAgICAgIHZhciBzY2VuZVJlbmRlcklk
ID0gdGhpcy5nZXRTY2VuZSgpLmdldFJlbmRlcklkKCk7CisgICAgICAgIGlmIChpbnRlcm5hbERh
dGFJbmZvLl9wcmVBY3RpdmF0ZUlkID09PSBzY2VuZVJlbmRlcklkKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBpbnRlcm5hbERhdGFJbmZvLl9wcmVBY3Rp
dmF0ZUlkID0gc2NlbmVSZW5kZXJJZDsKKyAgICAgICAgdGhpcy5faW5zdGFuY2VEYXRhU3RvcmFn
ZS52aXNpYmxlSW5zdGFuY2VzID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIE1lc2gucHJvdG90eXBlLl9wcmVBY3RpdmF0ZUZvcklu
dGVybWVkaWF0ZVJlbmRlcmluZyA9IGZ1bmN0aW9uIChyZW5kZXJJZCkgeworICAgICAgICBpZiAo
dGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS52aXNpYmxlSW5zdGFuY2VzKSB7CisgICAgICAgICAg
ICB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLnZpc2libGVJbnN0YW5jZXMuaW50ZXJtZWRpYXRl
RGVmYXVsdFJlbmRlcklkID0gcmVuZGVySWQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE1lc2gucHJvdG90eXBlLl9yZWdp
c3Rlckluc3RhbmNlRm9yUmVuZGVySWQgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIHJlbmRlcklkKSB7
CisgICAgICAgIGlmICghdGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS52aXNpYmxlSW5zdGFuY2Vz
KSB7CisgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLnZpc2libGVJbnN0YW5j
ZXMgPSB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFJlbmRlcklkOiByZW5kZXJJZCwKKyAgICAg
ICAgICAgICAgICBzZWxmRGVmYXVsdFJlbmRlcklkOiB0aGlzLl9yZW5kZXJJZAorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlRGF0YVN0b3JhZ2Uu
dmlzaWJsZUluc3RhbmNlc1tyZW5kZXJJZF0pIHsKKyAgICAgICAgICAgIHRoaXMuX2luc3RhbmNl
RGF0YVN0b3JhZ2UudmlzaWJsZUluc3RhbmNlc1tyZW5kZXJJZF0gPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLnZpc2libGVJbnN0YW5j
ZXNbcmVuZGVySWRdLnB1c2goaW5zdGFuY2UpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlY29tcHV0ZXMgYW5kIHNldHMgYSBuZXcg
Qm91bmRpbmdJbmZvIHRvIHRoZSBtZXNoIHVubGVzcyBpdCBpcyBsb2NrZWQuCisgICAgICogVGhp
cyBtZWFucyB0aGUgbWVzaCB1bmRlcmx5aW5nIGJvdW5kaW5nIGJveCBhbmQgc3BoZXJlIGFyZSBy
ZWNvbXB1dGVkLgorICAgICAqIEBwYXJhbSBhcHBseVNrZWxldG9uIGRlZmluZXMgd2hldGhlciB0
byBhcHBseSB0aGUgc2tlbGV0b24gYmVmb3JlIGNvbXB1dGluZyB0aGUgYm91bmRpbmcgaW5mbwor
ICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBNZXNoLnByb3Rv
dHlwZS5yZWZyZXNoQm91bmRpbmdJbmZvID0gZnVuY3Rpb24gKGFwcGx5U2tlbGV0b24pIHsKKyAg
ICAgICAgaWYgKGFwcGx5U2tlbGV0b24gPT09IHZvaWQgMCkgeyBhcHBseVNrZWxldG9uID0gZmFs
c2U7IH0KKyAgICAgICAgaWYgKHRoaXMuX2JvdW5kaW5nSW5mbyAmJiB0aGlzLl9ib3VuZGluZ0lu
Zm8uaXNMb2NrZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAg
ICAgIHZhciBiaWFzID0gdGhpcy5nZW9tZXRyeSA/IHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdCaWFz
IDogbnVsbDsKKyAgICAgICAgdGhpcy5fcmVmcmVzaEJvdW5kaW5nSW5mbyh0aGlzLl9nZXRQb3Np
dGlvbkRhdGEoYXBwbHlTa2VsZXRvbiksIGJpYXMpOworICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTWVzaC5wcm90b3R5cGUuX2NyZWF0ZUdsb2Jh
bFN1Yk1lc2ggPSBmdW5jdGlvbiAoZm9yY2UpIHsKKyAgICAgICAgdmFyIHRvdGFsVmVydGljZXMg
PSB0aGlzLmdldFRvdGFsVmVydGljZXMoKTsKKyAgICAgICAgaWYgKCF0b3RhbFZlcnRpY2VzIHx8
ICF0aGlzLmdldEluZGljZXMoKSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAg
IH0KKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byByZWNyZWF0ZSB0aGUgc3VibWVzaGVz
CisgICAgICAgIGlmICh0aGlzLnN1Yk1lc2hlcyAmJiB0aGlzLnN1Yk1lc2hlcy5sZW5ndGggPiAw
KSB7CisgICAgICAgICAgICB2YXIgaWIgPSB0aGlzLmdldEluZGljZXMoKTsKKyAgICAgICAgICAg
IGlmICghaWIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZhciB0b3RhbEluZGljZXMgPSBpYi5sZW5ndGg7CisgICAgICAgICAgICB2
YXIgbmVlZFRvUmVjcmVhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChmb3JjZSkgeworICAg
ICAgICAgICAgICAgIG5lZWRUb1JlY3JlYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlz
LnN1Yk1lc2hlczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHN1Ym1lc2ggPSBfYVtfaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChzdWJtZXNoLmlu
ZGV4U3RhcnQgKyBzdWJtZXNoLmluZGV4Q291bnQgPj0gdG90YWxJbmRpY2VzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBuZWVkVG9SZWNyZWF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBpZiAoc3VibWVzaC52ZXJ0aWNlc1N0YXJ0ICsgc3VibWVzaC52ZXJ0aWNlc0NvdW50ID49IHRv
dGFsVmVydGljZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRUb1JlY3JlYXRlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFu
ZWVkVG9SZWNyZWF0ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Yk1lc2hlc1sw
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLnJlbGVhc2VTdWJNZXNo
ZXMoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBfc3ViTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTJfX1siU3ViTWVzaCJdKDAsIDAsIHRvdGFsVmVydGljZXMsIDAsIHRoaXMuZ2V0VG90YWxJ
bmRpY2VzKCksIHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiB3
aWxsIHN1YmRpdmlkZSB0aGUgbWVzaCBpbnRvIG11bHRpcGxlIHN1Ym1lc2hlcworICAgICAqIEBw
YXJhbSBjb3VudCBkZWZpbmVzIHRoZSBleHBlY3RlZCBudW1iZXIgb2Ygc3VibWVzaGVzCisgICAg
ICovCisgICAgTWVzaC5wcm90b3R5cGUuc3ViZGl2aWRlID0gZnVuY3Rpb24gKGNvdW50KSB7Cisg
ICAgICAgIGlmIChjb3VudCA8IDEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgdG90YWxJbmRpY2VzID0gdGhpcy5nZXRUb3RhbEluZGljZXMoKTsKKyAgICAg
ICAgdmFyIHN1YmRpdmlzaW9uU2l6ZSA9ICh0b3RhbEluZGljZXMgLyBjb3VudCkgfCAwOworICAg
ICAgICB2YXIgb2Zmc2V0ID0gMDsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgc3ViZGl2aXNpb25T
aXplIGlzIGEgbXVsdGlwbGUgb2YgMworICAgICAgICB3aGlsZSAoc3ViZGl2aXNpb25TaXplICUg
MyAhPT0gMCkgeworICAgICAgICAgICAgc3ViZGl2aXNpb25TaXplKys7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5yZWxlYXNlU3ViTWVzaGVzKCk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0g
MDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKG9mZnNldCA+PSB0
b3RhbEluZGljZXMpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIF9zdWJNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJTdWJNZXNo
Il0uQ3JlYXRlRnJvbUluZGljZXMoMCwgb2Zmc2V0LCBNYXRoLm1pbihzdWJkaXZpc2lvblNpemUs
IHRvdGFsSW5kaWNlcyAtIG9mZnNldCksIHRoaXMpOworICAgICAgICAgICAgb2Zmc2V0ICs9IHN1
YmRpdmlzaW9uU2l6ZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnN5bmNocm9uaXplSW5zdGFu
Y2VzKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb3B5IGEgRmxvYXRBcnJheSBpbnRvIGEg
c3BlY2lmaWMgYXNzb2NpYXRlZCB2ZXJ0ZXggYnVmZmVyCisgICAgICogQHBhcmFtIGtpbmQgZGVm
aW5lcyB3aGljaCBidWZmZXIgdG8gd3JpdGUgdG8gKHBvc2l0aW9ucywgaW5kaWNlcywgbm9ybWFs
cywgZXRjKS4gUG9zc2libGUgYGtpbmRgIHZhbHVlcyA6CisgICAgICogLSBWZXJ0ZXhCdWZmZXIu
UG9zaXRpb25LaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuVVZLaW5kCisgICAgICogLSBWZXJ0
ZXhCdWZmZXIuVVYyS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWM0tpbmQKKyAgICAgKiAt
IFZlcnRleEJ1ZmZlci5VVjRLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuVVY1S2luZAorICAg
ICAqIC0gVmVydGV4QnVmZmVyLlVWNktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5Db2xvcktp
bmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc0luZGljZXNLaW5kCisgICAgICogLSBW
ZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZm
ZXIuTWF0cmljZXNXZWlnaHRzS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk1hdHJpY2VzV2Vp
Z2h0c0V4dHJhS2luZAorICAgICAqIEBwYXJhbSBkYXRhIGRlZmluZXMgdGhlIGRhdGEgc291cmNl
CisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSB1cGRhdGVkIHZlcnRleCBi
dWZmZXIgbXVzdCBiZSBmbGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBzdHJpZGUg
ZGVmaW5lcyB0aGUgZGF0YSBzdHJpZGUgc2l6ZSAoY2FuIGJlIG51bGwpCisgICAgICogQHJldHVy
bnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLnNldFZlcnRp
Y2VzRGF0YSA9IGZ1bmN0aW9uIChraW5kLCBkYXRhLCB1cGRhdGFibGUsIHN0cmlkZSkgeworICAg
ICAgICBpZiAodXBkYXRhYmxlID09PSB2b2lkIDApIHsgdXBkYXRhYmxlID0gZmFsc2U7IH0KKyAg
ICAgICAgaWYgKCF0aGlzLl9nZW9tZXRyeSkgeworICAgICAgICAgICAgdmFyIHZlcnRleERhdGEg
PSBuZXcgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJWZXJ0
ZXhEYXRhIl0oKTsKKyAgICAgICAgICAgIHZlcnRleERhdGEuc2V0KGRhdGEsIGtpbmQpOworICAg
ICAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICAgICAgbmV3IF9n
ZW9tZXRyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siR2VvbWV0cnkiXShfZ2VvbWV0
cnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkdlb21ldHJ5Il0uUmFuZG9tSWQoKSwg
c2NlbmUsIHZlcnRleERhdGEsIHVwZGF0YWJsZSwgdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9nZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoa2luZCwg
ZGF0YSwgdXBkYXRhYmxlLCBzdHJpZGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogRmxhZ3MgYW4gYXNzb2NpYXRlZCB2ZXJ0ZXggYnVm
ZmVyIGFzIHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMgd2hpY2ggYnVmZmVy
IHRvIHVzZSAocG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzLCBldGMpLiBQb3NzaWJsZSBga2lu
ZGAgdmFsdWVzIDoKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5Qb3NpdGlvbktpbmQKKyAgICAgKiAt
IFZlcnRleEJ1ZmZlci5VVktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjJLaW5kCisgICAg
ICogLSBWZXJ0ZXhCdWZmZXIuVVYzS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNEtpbmQK
KyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjVLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuVVY2
S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLkNvbG9yS2luZAorICAgICAqIC0gVmVydGV4QnVm
ZmVyLk1hdHJpY2VzSW5kaWNlc0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc0lu
ZGljZXNFeHRyYUtpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNLaW5k
CisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNXZWlnaHRzRXh0cmFLaW5kCisgICAgICog
QHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSB1cGRhdGVkIHZlcnRleCBidWZmZXIgbXVz
dCBiZSBmbGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLm1h
cmtWZXJ0aWNlc0RhdGFBc1VwZGF0YWJsZSA9IGZ1bmN0aW9uIChraW5kLCB1cGRhdGFibGUpIHsK
KyAgICAgICAgaWYgKHVwZGF0YWJsZSA9PT0gdm9pZCAwKSB7IHVwZGF0YWJsZSA9IHRydWU7IH0K
KyAgICAgICAgdmFyIHZiID0gdGhpcy5nZXRWZXJ0ZXhCdWZmZXIoa2luZCk7CisgICAgICAgIGlm
ICghdmIgfHwgdmIuaXNVcGRhdGFibGUoKSA9PT0gdXBkYXRhYmxlKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zZXRWZXJ0aWNlc0RhdGEoa2luZCwgdGhp
cy5nZXRWZXJ0aWNlc0RhdGEoa2luZCksIHVwZGF0YWJsZSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXRzIHRoZSBtZXNoIGdsb2JhbCBWZXJ0ZXggQnVmZmVyCisgICAgICogQHBhcmFtIGJ1
ZmZlciBkZWZpbmVzIHRoZSBidWZmZXIgdG8gdXNlCisgICAgICogQHJldHVybnMgdGhlIGN1cnJl
bnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLnNldFZlcnRpY2VzQnVmZmVyID0g
ZnVuY3Rpb24gKGJ1ZmZlcikgeworICAgICAgICBpZiAoIXRoaXMuX2dlb21ldHJ5KSB7CisgICAg
ICAgICAgICB0aGlzLl9nZW9tZXRyeSA9IF9nZW9tZXRyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTBfX1siR2VvbWV0cnkiXS5DcmVhdGVHZW9tZXRyeUZvck1lc2godGhpcyk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fZ2VvbWV0cnkuc2V0VmVydGljZXNCdWZmZXIoYnVmZmVyKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgYSBzcGVj
aWZpYyBhc3NvY2lhdGVkIHZlcnRleCBidWZmZXIKKyAgICAgKiBAcGFyYW0ga2luZCBkZWZpbmVz
IHdoaWNoIGJ1ZmZlciB0byB3cml0ZSB0byAocG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzLCBl
dGMpLiBQb3NzaWJsZSBga2luZGAgdmFsdWVzIDoKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5Qb3Np
dGlvbktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVktpbmQKKyAgICAgKiAtIFZlcnRleEJ1
ZmZlci5VVjJLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuVVYzS2luZAorICAgICAqIC0gVmVy
dGV4QnVmZmVyLlVWNEtpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjVLaW5kCisgICAgICog
LSBWZXJ0ZXhCdWZmZXIuVVY2S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLkNvbG9yS2luZAor
ICAgICAqIC0gVmVydGV4QnVmZmVyLk1hdHJpY2VzSW5kaWNlc0tpbmQKKyAgICAgKiAtIFZlcnRl
eEJ1ZmZlci5NYXRyaWNlc0luZGljZXNFeHRyYUtpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5N
YXRyaWNlc1dlaWdodHNLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNXZWlnaHRz
RXh0cmFLaW5kCisgICAgICogQHBhcmFtIGRhdGEgZGVmaW5lcyB0aGUgZGF0YSBzb3VyY2UKKyAg
ICAgKiBAcGFyYW0gdXBkYXRlRXh0ZW5kcyBkZWZpbmVzIGlmIGV4dGVuZHMgaW5mbyBvZiB0aGUg
bWVzaCBtdXN0IGJlIHVwZGF0ZWQgKGNhbiBiZSBudWxsKS4gVGhpcyBpcyBtb3N0bHkgdXNlZnVs
IGZvciAicG9zaXRpb24iIGtpbmQKKyAgICAgKiBAcGFyYW0gbWFrZUl0VW5pcXVlIGRlZmluZXMg
aWYgdGhlIGdlb21ldHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzaCBtdXN0IGJlIGNsb25lZCB0
byBtYWtlIHRoZSBjaGFuZ2Ugb25seSBmb3IgdGhpcyBtZXNoIChhbmQgbm90IGFsbCBtZXNoZXMg
YXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIGdlb21ldHJ5KQorICAgICAqIEByZXR1cm5zIHRoZSBj
dXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS51cGRhdGVWZXJ0aWNlc0Rh
dGEgPSBmdW5jdGlvbiAoa2luZCwgZGF0YSwgdXBkYXRlRXh0ZW5kcywgbWFrZUl0VW5pcXVlKSB7
CisgICAgICAgIGlmICghdGhpcy5fZ2VvbWV0cnkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICB9CisgICAgICAgIGlmICghbWFrZUl0VW5pcXVlKSB7CisgICAgICAgICAgICB0
aGlzLl9nZW9tZXRyeS51cGRhdGVWZXJ0aWNlc0RhdGEoa2luZCwgZGF0YSwgdXBkYXRlRXh0ZW5k
cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLm1ha2VHZW9t
ZXRyeVVuaXF1ZSgpOworICAgICAgICAgICAgdGhpcy51cGRhdGVWZXJ0aWNlc0RhdGEoa2luZCwg
ZGF0YSwgdXBkYXRlRXh0ZW5kcywgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgdmVy
dGV4IHBvc2l0aW9ucyBvZiBhbiB1cGRhdGFibGUgbWVzaCBhY2NvcmRpbmcgdG8gdGhlIGBwb3Np
dGlvbkZ1bmN0aW9uYCByZXR1cm5lZCB2YWx1ZXMuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2hvd190b19keW5hbWljYWxseV9tb3JwaF9hX21lc2gjb3RoZXIt
c2hhcGVzLXVwZGF0ZW1lc2hwb3NpdGlvbnMKKyAgICAgKiBAcGFyYW0gcG9zaXRpb25GdW5jdGlv
biBpcyBhIHNpbXBsZSBKUyBmdW5jdGlvbiB3aGF0IGlzIHBhc3NlZCB0aGUgbWVzaCBgcG9zaXRp
b25zYCBhcnJheS4gSXQgZG9lc24ndCBuZWVkIHRvIHJldHVybiBhbnl0aGluZworICAgICAqIEBw
YXJhbSBjb21wdXRlTm9ybWFscyBpcyBhIGJvb2xlYW4gKGRlZmF1bHQgdHJ1ZSkgdG8gZW5hYmxl
L2Rpc2FibGUgdGhlIG1lc2ggbm9ybWFsIHJlY29tcHV0YXRpb24gYWZ0ZXIgdGhlIHZlcnRleCBw
b3NpdGlvbiB1cGRhdGUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICov
CisgICAgTWVzaC5wcm90b3R5cGUudXBkYXRlTWVzaFBvc2l0aW9ucyA9IGZ1bmN0aW9uIChwb3Np
dGlvbkZ1bmN0aW9uLCBjb21wdXRlTm9ybWFscykgeworICAgICAgICBpZiAoY29tcHV0ZU5vcm1h
bHMgPT09IHZvaWQgMCkgeyBjb21wdXRlTm9ybWFscyA9IHRydWU7IH0KKyAgICAgICAgdmFyIHBv
c2l0aW9ucyA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCFw
b3NpdGlvbnMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAg
IHBvc2l0aW9uRnVuY3Rpb24ocG9zaXRpb25zKTsKKyAgICAgICAgdGhpcy51cGRhdGVWZXJ0aWNl
c0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIi
XS5Qb3NpdGlvbktpbmQsIHBvc2l0aW9ucywgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgaWYgKGNv
bXB1dGVOb3JtYWxzKSB7CisgICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuZ2V0SW5kaWNl
cygpOworICAgICAgICAgICAgdmFyIG5vcm1hbHMgPSB0aGlzLmdldFZlcnRpY2VzRGF0YShfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtp
bmQpOworICAgICAgICAgICAgaWYgKCFub3JtYWxzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlZlcnRleERhdGEiXS5Db21wdXRlTm9ybWFscyhwb3Np
dGlvbnMsIGluZGljZXMsIG5vcm1hbHMpOworICAgICAgICAgICAgdGhpcy51cGRhdGVWZXJ0aWNl
c0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIi
XS5Ob3JtYWxLaW5kLCBub3JtYWxzLCBmYWxzZSwgZmFsc2UpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHVuLXNoYXJl
ZCBzcGVjaWZpYyBvY2N1cmVuY2Ugb2YgdGhlIGdlb21ldHJ5IGZvciB0aGUgbWVzaC4KKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUu
bWFrZUdlb21ldHJ5VW5pcXVlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX2dl
b21ldHJ5KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB2
YXIgb2xkR2VvbWV0cnkgPSB0aGlzLl9nZW9tZXRyeTsKKyAgICAgICAgdmFyIGdlb21ldHJ5ID0g
dGhpcy5fZ2VvbWV0cnkuY29weShfZ2VvbWV0cnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEw
X19bIkdlb21ldHJ5Il0uUmFuZG9tSWQoKSk7CisgICAgICAgIG9sZEdlb21ldHJ5LnJlbGVhc2VG
b3JNZXNoKHRoaXMsIHRydWUpOworICAgICAgICBnZW9tZXRyeS5hcHBseVRvTWVzaCh0aGlzKTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGlu
ZGV4IGJ1ZmZlciBvZiB0aGlzIG1lc2gKKyAgICAgKiBAcGFyYW0gaW5kaWNlcyBkZWZpbmVzIHRo
ZSBzb3VyY2UgZGF0YQorICAgICAqIEBwYXJhbSB0b3RhbFZlcnRpY2VzIGRlZmluZXMgdGhlIHRv
dGFsIG51bWJlciBvZiB2ZXJ0aWNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgaW5kZXggZGF0YSAoY2Fu
IGJlIG51bGwpCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSB1cGRhdGVk
IGluZGV4IGJ1ZmZlciBtdXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlIChkZWZhdWx0IGlzIGZh
bHNlKQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBNZXNo
LnByb3RvdHlwZS5zZXRJbmRpY2VzID0gZnVuY3Rpb24gKGluZGljZXMsIHRvdGFsVmVydGljZXMs
IHVwZGF0YWJsZSkgeworICAgICAgICBpZiAodG90YWxWZXJ0aWNlcyA9PT0gdm9pZCAwKSB7IHRv
dGFsVmVydGljZXMgPSBudWxsOyB9CisgICAgICAgIGlmICh1cGRhdGFibGUgPT09IHZvaWQgMCkg
eyB1cGRhdGFibGUgPSBmYWxzZTsgfQorICAgICAgICBpZiAoIXRoaXMuX2dlb21ldHJ5KSB7Cisg
ICAgICAgICAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIlZlcnRleERhdGEiXSgpOworICAgICAgICAgICAgdmVydGV4
RGF0YS5pbmRpY2VzID0gaW5kaWNlczsKKyAgICAgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0
U2NlbmUoKTsKKyAgICAgICAgICAgIG5ldyBfZ2VvbWV0cnlfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEwX19bIkdlb21ldHJ5Il0oX2dlb21ldHJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fWyJHZW9tZXRyeSJdLlJhbmRvbUlkKCksIHNjZW5lLCB2ZXJ0ZXhEYXRhLCB1cGRhdGFibGUs
IHRoaXMpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZ2Vv
bWV0cnkuc2V0SW5kaWNlcyhpbmRpY2VzLCB0b3RhbFZlcnRpY2VzLCB1cGRhdGFibGUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogVXBk
YXRlIHRoZSBjdXJyZW50IGluZGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBpbmRpY2VzIGRlZmlu
ZXMgdGhlIHNvdXJjZSBkYXRhCisgICAgICogQHBhcmFtIG9mZnNldCBkZWZpbmVzIHRoZSBvZmZz
ZXQgaW4gdGhlIGluZGV4IGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgbmV3IGRhdGEgKGNhbiBi
ZSBudWxsKQorICAgICAqIEBwYXJhbSBncHVNZW1vcnlPbmx5IGRlZmluZXMgYSBib29sZWFuIGlu
ZGljYXRpbmcgdGhhdCBvbmx5IHRoZSBHUFUgbWVtb3J5IG11c3QgYmUgdXBkYXRlZCBsZWF2aW5n
IHRoZSBDUFUgdmVyc2lvbiBvZiB0aGUgaW5kaWNlcyB1bmNoYW5nZWQgKGZhbHNlIGJ5IGRlZmF1
bHQpCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gu
cHJvdG90eXBlLnVwZGF0ZUluZGljZXMgPSBmdW5jdGlvbiAoaW5kaWNlcywgb2Zmc2V0LCBncHVN
ZW1vcnlPbmx5KSB7CisgICAgICAgIGlmIChncHVNZW1vcnlPbmx5ID09PSB2b2lkIDApIHsgZ3B1
TWVtb3J5T25seSA9IGZhbHNlOyB9CisgICAgICAgIGlmICghdGhpcy5fZ2VvbWV0cnkpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dlb21ldHJ5
LnVwZGF0ZUluZGljZXMoaW5kaWNlcywgb2Zmc2V0LCBncHVNZW1vcnlPbmx5KTsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnZlcnQgdGhlIGdlb21ldHJ5
IHRvIG1vdmUgZnJvbSBhIHJpZ2h0IGhhbmRlZCBzeXN0ZW0gdG8gYSBsZWZ0IGhhbmRlZCBvbmUu
CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJv
dG90eXBlLnRvTGVmdEhhbmRlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9n
ZW9tZXRyeSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fZ2VvbWV0cnkudG9MZWZ0SGFuZGVkKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBNZXNoLnByb3RvdHlwZS5fYmluZCA9IGZ1bmN0
aW9uIChzdWJNZXNoLCBlZmZlY3QsIGZpbGxNb2RlKSB7CisgICAgICAgIGlmICghdGhpcy5fZ2Vv
bWV0cnkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZh
ciBlbmdpbmUgPSB0aGlzLmdldFNjZW5lKCkuZ2V0RW5naW5lKCk7CisgICAgICAgIC8vIFdpcmVm
cmFtZQorICAgICAgICB2YXIgaW5kZXhUb0JpbmQ7CisgICAgICAgIGlmICh0aGlzLl91bkluZGV4
ZWQpIHsKKyAgICAgICAgICAgIGluZGV4VG9CaW5kID0gbnVsbDsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZmlsbE1vZGUpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19b
Ik1hdGVyaWFsIl0uUG9pbnRGaWxsTW9kZToKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhUb0Jp
bmQgPSBudWxsOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1h
dGVyaWFsIl0uV2lyZUZyYW1lRmlsbE1vZGU6CisgICAgICAgICAgICAgICAgICAgIGluZGV4VG9C
aW5kID0gc3ViTWVzaC5fZ2V0TGluZXNJbmRleEJ1ZmZlcih0aGlzLmdldEluZGljZXMoKSwgZW5n
aW5lKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE0X19bIk1hdGVyaWFsIl0uVHJpYW5nbGVGaWxsTW9kZToKKyAgICAgICAg
ICAgICAgICAgICAgaW5kZXhUb0JpbmQgPSB0aGlzLl9nZW9tZXRyeS5nZXRJbmRleEJ1ZmZlcigp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAvLyBWQk9zCisgICAgICAgIHRoaXMuX2dlb21ldHJ5Ll9iaW5kKGVmZmVjdCwgaW5k
ZXhUb0JpbmQpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKiBAaGlkZGVu
ICovCisgICAgTWVzaC5wcm90b3R5cGUuX2RyYXcgPSBmdW5jdGlvbiAoc3ViTWVzaCwgZmlsbE1v
ZGUsIGluc3RhbmNlc0NvdW50KSB7CisgICAgICAgIGlmICghdGhpcy5fZ2VvbWV0cnkgfHwgIXRo
aXMuX2dlb21ldHJ5LmdldFZlcnRleEJ1ZmZlcnMoKSB8fCAoIXRoaXMuX3VuSW5kZXhlZCAmJiAh
dGhpcy5fZ2VvbWV0cnkuZ2V0SW5kZXhCdWZmZXIoKSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mby5f
b25CZWZvcmVEcmF3T2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxNZXNo
RGF0YUluZm8uX29uQmVmb3JlRHJhd09ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOwor
ICAgICAgICB9CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAg
dmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAodGhpcy5fdW5JbmRl
eGVkIHx8IGZpbGxNb2RlID09IF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE0X19bIk1hdGVyaWFsIl0uUG9pbnRGaWxsTW9kZSkgeworICAgICAgICAgICAgLy8g
b3IgdHJpYW5nbGVzIGFzIHBvaW50cworICAgICAgICAgICAgZW5naW5lLmRyYXdBcnJheXNUeXBl
KGZpbGxNb2RlLCBzdWJNZXNoLnZlcnRpY2VzU3RhcnQsIHN1Yk1lc2gudmVydGljZXNDb3VudCwg
aW5zdGFuY2VzQ291bnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZpbGxNb2RlID09
IF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVy
aWFsIl0uV2lyZUZyYW1lRmlsbE1vZGUpIHsKKyAgICAgICAgICAgIC8vIFRyaWFuZ2xlcyBhcyB3
aXJlZnJhbWUKKyAgICAgICAgICAgIGVuZ2luZS5kcmF3RWxlbWVudHNUeXBlKGZpbGxNb2RlLCAw
LCBzdWJNZXNoLl9saW5lc0luZGV4Q291bnQsIGluc3RhbmNlc0NvdW50KTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVuZ2luZS5kcmF3RWxlbWVudHNUeXBlKGZpbGxN
b2RlLCBzdWJNZXNoLmluZGV4U3RhcnQsIHN1Yk1lc2guaW5kZXhDb3VudCwgaW5zdGFuY2VzQ291
bnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmVnaXN0ZXJzIGZvciB0aGlzIG1lc2ggYSBqYXZhc2NyaXB0IGZ1bmN0aW9uIGNhbGxl
ZCBqdXN0IGJlZm9yZSB0aGUgcmVuZGVyaW5nIHByb2Nlc3MKKyAgICAgKiBAcGFyYW0gZnVuYyBk
ZWZpbmVzIHRoZSBmdW5jdGlvbiB0byBjYWxsIGJlZm9yZSByZW5kZXJpbmcgdGhpcyBtZXNoCisg
ICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90
eXBlLnJlZ2lzdGVyQmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKGZ1bmMpIHsKKyAgICAgICAgdGhp
cy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmMpOworICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIGEgcHJldmlvdXNseSByZWdpc3Rl
cmVkIGphdmFzY3JpcHQgZnVuY3Rpb24gY2FsbGVkIGJlZm9yZSB0aGUgcmVuZGVyaW5nCisgICAg
ICogQHBhcmFtIGZ1bmMgZGVmaW5lcyB0aGUgZnVuY3Rpb24gdG8gcmVtb3ZlCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLnVucmVn
aXN0ZXJCZWZvcmVSZW5kZXIgPSBmdW5jdGlvbiAoZnVuYykgeworICAgICAgICB0aGlzLm9uQmVm
b3JlUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmVDYWxsYmFjayhmdW5jKTsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlcnMgZm9yIHRoaXMgbWVzaCBh
IGphdmFzY3JpcHQgZnVuY3Rpb24gY2FsbGVkIGp1c3QgYWZ0ZXIgdGhlIHJlbmRlcmluZyBpcyBj
b21wbGV0ZQorICAgICAqIEBwYXJhbSBmdW5jIGRlZmluZXMgdGhlIGZ1bmN0aW9uIHRvIGNhbGwg
YWZ0ZXIgcmVuZGVyaW5nIHRoaXMgbWVzaAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1l
c2gKKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5yZWdpc3RlckFmdGVyUmVuZGVyID0gZnVu
Y3Rpb24gKGZ1bmMpIHsKKyAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5hZGQo
ZnVuYyk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogRGlz
cG9zZXMgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgamF2YXNjcmlwdCBmdW5jdGlvbiBjYWxsZWQg
YWZ0ZXIgdGhlIHJlbmRlcmluZy4KKyAgICAgKiBAcGFyYW0gZnVuYyBkZWZpbmVzIHRoZSBmdW5j
dGlvbiB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICov
CisgICAgTWVzaC5wcm90b3R5cGUudW5yZWdpc3RlckFmdGVyUmVuZGVyID0gZnVuY3Rpb24gKGZ1
bmMpIHsKKyAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmVDYWxsYmFj
ayhmdW5jKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIE1lc2gucHJvdG90eXBlLl9nZXRJbnN0YW5jZXNSZW5kZXJMaXN0ID0gZnVuY3Rpb24g
KHN1Yk1lc2hJZCkgeworICAgICAgICBpZiAodGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS5pc0Zy
b3plbiAmJiB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLnByZXZpb3VzQmF0Y2gpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLnByZXZpb3VzQmF0Y2g7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICB2
YXIgaXNJbkludGVybWVkaWF0ZVJlbmRlcmluZyA9IHNjZW5lLl9pc0luSW50ZXJtZWRpYXRlUmVu
ZGVyaW5nKCk7CisgICAgICAgIHZhciBvbmx5Rm9ySW5zdGFuY2VzID0gaXNJbkludGVybWVkaWF0
ZVJlbmRlcmluZyA/IHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX29ubHlGb3JJ
bnN0YW5jZXNJbnRlcm1lZGlhdGUgOiB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZv
Ll9vbmx5Rm9ySW5zdGFuY2VzOworICAgICAgICB2YXIgYmF0Y2hDYWNoZSA9IHRoaXMuX2luc3Rh
bmNlRGF0YVN0b3JhZ2UuYmF0Y2hDYWNoZTsKKyAgICAgICAgYmF0Y2hDYWNoZS5tdXN0UmV0dXJu
ID0gZmFsc2U7CisgICAgICAgIGJhdGNoQ2FjaGUucmVuZGVyU2VsZltzdWJNZXNoSWRdID0gIW9u
bHlGb3JJbnN0YW5jZXMgJiYgdGhpcy5pc0VuYWJsZWQoKSAmJiB0aGlzLmlzVmlzaWJsZTsKKyAg
ICAgICAgYmF0Y2hDYWNoZS52aXNpYmxlSW5zdGFuY2VzW3N1Yk1lc2hJZF0gPSBudWxsOworICAg
ICAgICBpZiAodGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS52aXNpYmxlSW5zdGFuY2VzKSB7Cisg
ICAgICAgICAgICB2YXIgdmlzaWJsZUluc3RhbmNlcyA9IHRoaXMuX2luc3RhbmNlRGF0YVN0b3Jh
Z2UudmlzaWJsZUluc3RhbmNlczsKKyAgICAgICAgICAgIHZhciBjdXJyZW50UmVuZGVySWQgPSBz
Y2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICAgICAgdmFyIGRlZmF1bHRSZW5kZXJJZCA9IChp
c0luSW50ZXJtZWRpYXRlUmVuZGVyaW5nID8gdmlzaWJsZUluc3RhbmNlcy5pbnRlcm1lZGlhdGVE
ZWZhdWx0UmVuZGVySWQgOiB2aXNpYmxlSW5zdGFuY2VzLmRlZmF1bHRSZW5kZXJJZCk7CisgICAg
ICAgICAgICBiYXRjaENhY2hlLnZpc2libGVJbnN0YW5jZXNbc3ViTWVzaElkXSA9IHZpc2libGVJ
bnN0YW5jZXNbY3VycmVudFJlbmRlcklkXTsKKyAgICAgICAgICAgIGlmICghYmF0Y2hDYWNoZS52
aXNpYmxlSW5zdGFuY2VzW3N1Yk1lc2hJZF0gJiYgZGVmYXVsdFJlbmRlcklkKSB7CisgICAgICAg
ICAgICAgICAgYmF0Y2hDYWNoZS52aXNpYmxlSW5zdGFuY2VzW3N1Yk1lc2hJZF0gPSB2aXNpYmxl
SW5zdGFuY2VzW2RlZmF1bHRSZW5kZXJJZF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgYmF0Y2hDYWNoZS5oYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZ1tzdWJNZXNoSWRdID0g
dGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS5oYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZyAmJiAo
YmF0Y2hDYWNoZS52aXNpYmxlSW5zdGFuY2VzW3N1Yk1lc2hJZF0gIT09IG51bGwpICYmIChiYXRj
aENhY2hlLnZpc2libGVJbnN0YW5jZXNbc3ViTWVzaElkXSAhPT0gdW5kZWZpbmVkKTsKKyAgICAg
ICAgdGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS5wcmV2aW91c0JhdGNoID0gYmF0Y2hDYWNoZTsK
KyAgICAgICAgcmV0dXJuIGJhdGNoQ2FjaGU7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIE1lc2gucHJvdG90eXBlLl9yZW5kZXJXaXRoSW5zdGFuY2VzID0gZnVuY3Rpb24gKHN1Yk1l
c2gsIGZpbGxNb2RlLCBiYXRjaCwgZWZmZWN0LCBlbmdpbmUpIHsKKyAgICAgICAgdmFyIHZpc2li
bGVJbnN0YW5jZXMgPSBiYXRjaC52aXNpYmxlSW5zdGFuY2VzW3N1Yk1lc2guX2lkXTsKKyAgICAg
ICAgaWYgKCF2aXNpYmxlSW5zdGFuY2VzKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgaW5zdGFuY2VTdG9yYWdlID0gdGhpcy5faW5zdGFuY2VEYXRh
U3RvcmFnZTsKKyAgICAgICAgdmFyIGN1cnJlbnRJbnN0YW5jZXNCdWZmZXJTaXplID0gaW5zdGFu
Y2VTdG9yYWdlLmluc3RhbmNlc0J1ZmZlclNpemU7CisgICAgICAgIHZhciBpbnN0YW5jZXNCdWZm
ZXIgPSBpbnN0YW5jZVN0b3JhZ2UuaW5zdGFuY2VzQnVmZmVyOworICAgICAgICB2YXIgbWF0cmlj
ZXNDb3VudCA9IHZpc2libGVJbnN0YW5jZXMubGVuZ3RoICsgMTsKKyAgICAgICAgdmFyIGJ1ZmZl
clNpemUgPSBtYXRyaWNlc0NvdW50ICogMTYgKiA0OworICAgICAgICB3aGlsZSAoaW5zdGFuY2VT
dG9yYWdlLmluc3RhbmNlc0J1ZmZlclNpemUgPCBidWZmZXJTaXplKSB7CisgICAgICAgICAgICBp
bnN0YW5jZVN0b3JhZ2UuaW5zdGFuY2VzQnVmZmVyU2l6ZSAqPSAyOworICAgICAgICB9CisgICAg
ICAgIGlmICghaW5zdGFuY2VTdG9yYWdlLmluc3RhbmNlc0RhdGEgfHwgY3VycmVudEluc3RhbmNl
c0J1ZmZlclNpemUgIT0gaW5zdGFuY2VTdG9yYWdlLmluc3RhbmNlc0J1ZmZlclNpemUpIHsKKyAg
ICAgICAgICAgIGluc3RhbmNlU3RvcmFnZS5pbnN0YW5jZXNEYXRhID0gbmV3IEZsb2F0MzJBcnJh
eShpbnN0YW5jZVN0b3JhZ2UuaW5zdGFuY2VzQnVmZmVyU2l6ZSAvIDQpOworICAgICAgICB9Cisg
ICAgICAgIHZhciBvZmZzZXQgPSAwOworICAgICAgICB2YXIgaW5zdGFuY2VzQ291bnQgPSAwOwor
ICAgICAgICB2YXIgd29ybGQgPSB0aGlzLl9lZmZlY3RpdmVNZXNoLmdldFdvcmxkTWF0cml4KCk7
CisgICAgICAgIGlmIChiYXRjaC5yZW5kZXJTZWxmW3N1Yk1lc2guX2lkXSkgeworICAgICAgICAg
ICAgd29ybGQuY29weVRvQXJyYXkoaW5zdGFuY2VTdG9yYWdlLmluc3RhbmNlc0RhdGEsIG9mZnNl
dCk7CisgICAgICAgICAgICBvZmZzZXQgKz0gMTY7CisgICAgICAgICAgICBpbnN0YW5jZXNDb3Vu
dCsrOworICAgICAgICB9CisgICAgICAgIGlmICh2aXNpYmxlSW5zdGFuY2VzKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBpbnN0YW5jZUluZGV4ID0gMDsgaW5zdGFuY2VJbmRleCA8IHZpc2libGVJ
bnN0YW5jZXMubGVuZ3RoOyBpbnN0YW5jZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
aW5zdGFuY2UgPSB2aXNpYmxlSW5zdGFuY2VzW2luc3RhbmNlSW5kZXhdOworICAgICAgICAgICAg
ICAgIGluc3RhbmNlLmdldFdvcmxkTWF0cml4KCkuY29weVRvQXJyYXkoaW5zdGFuY2VTdG9yYWdl
Lmluc3RhbmNlc0RhdGEsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE2Owor
ICAgICAgICAgICAgICAgIGluc3RhbmNlc0NvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFpbnN0YW5jZXNCdWZmZXIgfHwgY3VycmVudEluc3RhbmNlc0J1ZmZl
clNpemUgIT0gaW5zdGFuY2VTdG9yYWdlLmluc3RhbmNlc0J1ZmZlclNpemUpIHsKKyAgICAgICAg
ICAgIGlmIChpbnN0YW5jZXNCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZXNCdWZm
ZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5zdGFuY2VzQnVmZmVy
ID0gbmV3IF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQnVmZmVyIl0oZW5n
aW5lLCBpbnN0YW5jZVN0b3JhZ2UuaW5zdGFuY2VzRGF0YSwgdHJ1ZSwgMTYsIGZhbHNlLCB0cnVl
KTsKKyAgICAgICAgICAgIGluc3RhbmNlU3RvcmFnZS5pbnN0YW5jZXNCdWZmZXIgPSBpbnN0YW5j
ZXNCdWZmZXI7CisgICAgICAgICAgICB0aGlzLnNldFZlcnRpY2VzQnVmZmVyKGluc3RhbmNlc0J1
ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoIndvcmxkMCIsIDAsIDQpKTsKKyAgICAgICAgICAgIHRo
aXMuc2V0VmVydGljZXNCdWZmZXIoaW5zdGFuY2VzQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcigi
d29ybGQxIiwgNCwgNCkpOworICAgICAgICAgICAgdGhpcy5zZXRWZXJ0aWNlc0J1ZmZlcihpbnN0
YW5jZXNCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKCJ3b3JsZDIiLCA4LCA0KSk7CisgICAgICAg
ICAgICB0aGlzLnNldFZlcnRpY2VzQnVmZmVyKGluc3RhbmNlc0J1ZmZlci5jcmVhdGVWZXJ0ZXhC
dWZmZXIoIndvcmxkMyIsIDEyLCA0KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBpbnN0YW5jZXNCdWZmZXIudXBkYXRlRGlyZWN0bHkoaW5zdGFuY2VTdG9yYWdlLmlu
c3RhbmNlc0RhdGEsIDAsIGluc3RhbmNlc0NvdW50KTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9iaW5kKHN1Yk1lc2gsIGVmZmVjdCwgZmlsbE1vZGUpOworICAgICAgICB0aGlzLl9kcmF3KHN1
Yk1lc2gsIGZpbGxNb2RlLCBpbnN0YW5jZXNDb3VudCk7CisgICAgICAgIGVuZ2luZS51bmJpbmRJ
bnN0YW5jZUF0dHJpYnV0ZXMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIE1lc2gucHJvdG90eXBlLl9wcm9jZXNzUmVuZGVyaW5nID0gZnVu
Y3Rpb24gKHN1Yk1lc2gsIGVmZmVjdCwgZmlsbE1vZGUsIGJhdGNoLCBoYXJkd2FyZUluc3RhbmNl
ZFJlbmRlcmluZywgb25CZWZvcmVEcmF3LCBlZmZlY3RpdmVNYXRlcmlhbCkgeworICAgICAgICB2
YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7CisgICAgICAgIHZhciBlbmdpbmUgPSBzY2VuZS5n
ZXRFbmdpbmUoKTsKKyAgICAgICAgaWYgKGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nKSB7Cisg
ICAgICAgICAgICB0aGlzLl9yZW5kZXJXaXRoSW5zdGFuY2VzKHN1Yk1lc2gsIGZpbGxNb2RlLCBi
YXRjaCwgZWZmZWN0LCBlbmdpbmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgaWYgKGJhdGNoLnJlbmRlclNlbGZbc3ViTWVzaC5faWRdKSB7CisgICAgICAgICAgICAg
ICAgLy8gRHJhdworICAgICAgICAgICAgICAgIGlmIChvbkJlZm9yZURyYXcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgb25CZWZvcmVEcmF3KGZhbHNlLCB0aGlzLl9lZmZlY3RpdmVNZXNoLmdldFdv
cmxkTWF0cml4KCksIGVmZmVjdGl2ZU1hdGVyaWFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgdGhpcy5fZHJhdyhzdWJNZXNoLCBmaWxsTW9kZSwgdGhpcy5faW5zdGFuY2VE
YXRhU3RvcmFnZS5vdmVycmlkZW5JbnN0YW5jZUNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHZhciB2aXNpYmxlSW5zdGFuY2VzRm9yU3ViTWVzaCA9IGJhdGNoLnZpc2libGVJbnN0
YW5jZXNbc3ViTWVzaC5faWRdOworICAgICAgICAgICAgaWYgKHZpc2libGVJbnN0YW5jZXNGb3JT
dWJNZXNoKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5zdGFuY2VJbmRleCA9IDA7IGlu
c3RhbmNlSW5kZXggPCB2aXNpYmxlSW5zdGFuY2VzRm9yU3ViTWVzaC5sZW5ndGg7IGluc3RhbmNl
SW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB2aXNpYmxlSW5z
dGFuY2VzRm9yU3ViTWVzaFtpbnN0YW5jZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
V29ybGQKKyAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmxkID0gaW5zdGFuY2UuZ2V0V29ybGRN
YXRyaXgoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9uQmVmb3JlRHJhdykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgb25CZWZvcmVEcmF3KHRydWUsIHdvcmxkLCBlZmZlY3RpdmVNYXRl
cmlhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gRHJh
dworICAgICAgICAgICAgICAgICAgICB0aGlzLl9kcmF3KHN1Yk1lc2gsIGZpbGxNb2RlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE1lc2gucHJvdG90eXBlLl9y
ZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5faW5zdGFuY2VEYXRhU3Rv
cmFnZS5pbnN0YW5jZXNCdWZmZXIpIHsKKyAgICAgICAgICAgIC8vIERpc3Bvc2UgaW5zdGFuY2Ug
YnVmZmVyIHRvIGJlIHJlY3JlYXRlZCBpbiBfcmVuZGVyV2l0aEluc3RhbmNlcyB3aGVuIHJlbmRl
cmVkCisgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLmluc3RhbmNlc0J1ZmZl
ci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLmluc3Rh
bmNlc0J1ZmZlciA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5f
cmVidWlsZC5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBNZXNo
LnByb3RvdHlwZS5fZnJlZXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuc3Vi
TWVzaGVzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gUHJl
cGFyZSBiYXRjaGVzCisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnN1
Yk1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHRoaXMuX2dldEluc3RhbmNl
c1JlbmRlckxpc3QoaW5kZXgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VmZmVjdGl2ZU1h
dGVyaWFsID0gbnVsbDsKKyAgICAgICAgdGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS5pc0Zyb3pl
biA9IHRydWU7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE1lc2gucHJvdG90eXBl
Ll91bkZyZWV6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW5zdGFuY2VEYXRhU3Rv
cmFnZS5pc0Zyb3plbiA9IGZhbHNlOworICAgICAgICB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdl
LnByZXZpb3VzQmF0Y2ggPSBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogVHJpZ2dlcnMg
dGhlIGRyYXcgY2FsbCBmb3IgdGhlIG1lc2guIFVzdWFsbHksIHlvdSBkb24ndCBuZWVkIHRvIGNh
bGwgdGhpcyBtZXRob2QgYnkgeW91ciBvd24gYmVjYXVzZSB0aGUgbWVzaCByZW5kZXJpbmcgaXMg
aGFuZGxlZCBieSB0aGUgc2NlbmUgcmVuZGVyaW5nIG1hbmFnZXIKKyAgICAgKiBAcGFyYW0gc3Vi
TWVzaCBkZWZpbmVzIHRoZSBzdWJNZXNoIHRvIHJlbmRlcgorICAgICAqIEBwYXJhbSBlbmFibGVB
bHBoYU1vZGUgZGVmaW5lcyBpZiBhbHBoYSBtb2RlIGNhbiBiZSBjaGFuZ2VkCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLnJlbmRl
ciA9IGZ1bmN0aW9uIChzdWJNZXNoLCBlbmFibGVBbHBoYU1vZGUpIHsKKyAgICAgICAgdmFyIHNj
ZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICBpZiAoc2NlbmUuX2lzSW5JbnRlcm1lZGlh
dGVSZW5kZXJpbmcoKSkgeworICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hE
YXRhSW5mby5faXNBY3RpdmVJbnRlcm1lZGlhdGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8u
X2lzQWN0aXZlID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2NoZWNrT2Nj
bHVzaW9uUXVlcnkoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gTWFuYWdpbmcgaW5zdGFuY2VzCisgICAgICAgIHZhciBiYXRjaCA9IHRoaXMuX2dl
dEluc3RhbmNlc1JlbmRlckxpc3Qoc3ViTWVzaC5faWQpOworICAgICAgICBpZiAoYmF0Y2gubXVz
dFJldHVybikgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQ2hlY2tpbmcgZ2VvbWV0cnkgc3RhdGUKKyAgICAgICAgaWYgKCF0aGlzLl9nZW9tZXRyeSB8
fCAhdGhpcy5fZ2VvbWV0cnkuZ2V0VmVydGV4QnVmZmVycygpIHx8ICghdGhpcy5fdW5JbmRleGVk
ICYmICF0aGlzLl9nZW9tZXRyeS5nZXRJbmRleEJ1ZmZlcigpKSkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2ludGVybmFsTWVzaERhdGFJ
bmZvLl9vbkJlZm9yZVJlbmRlck9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2ludGVy
bmFsTWVzaERhdGFJbmZvLl9vbkJlZm9yZVJlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJz
KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUo
KTsKKyAgICAgICAgdmFyIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nID0gYmF0Y2guaGFyZHdh
cmVJbnN0YW5jZWRSZW5kZXJpbmdbc3ViTWVzaC5faWRdOworICAgICAgICB2YXIgaW5zdGFuY2VE
YXRhU3RvcmFnZSA9IHRoaXMuX2luc3RhbmNlRGF0YVN0b3JhZ2U7CisgICAgICAgIHZhciBtYXRl
cmlhbCA9IHN1Yk1lc2guZ2V0TWF0ZXJpYWwoKTsKKyAgICAgICAgaWYgKCFtYXRlcmlhbCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgLy8gTWF0ZXJpYWwK
KyAgICAgICAgaWYgKCFpbnN0YW5jZURhdGFTdG9yYWdlLmlzRnJvemVuIHx8ICF0aGlzLl9lZmZl
Y3RpdmVNYXRlcmlhbCB8fCB0aGlzLl9lZmZlY3RpdmVNYXRlcmlhbCAhPT0gbWF0ZXJpYWwpIHsK
KyAgICAgICAgICAgIHRoaXMuX2VmZmVjdGl2ZU1hdGVyaWFsID0gbWF0ZXJpYWw7CisgICAgICAg
ICAgICBpZiAodGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwuX3N0b3JlRWZmZWN0T25TdWJNZXNoZXMp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2VmZmVjdGl2ZU1hdGVyaWFsLmlzUmVhZHlG
b3JTdWJNZXNoKHRoaXMsIHN1Yk1lc2gsIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nKSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwu
aXNSZWFkeSh0aGlzLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZykpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBB
bHBoYSBtb2RlCisgICAgICAgIGlmIChlbmFibGVBbHBoYU1vZGUpIHsKKyAgICAgICAgICAgIGVu
Z2luZS5zZXRBbHBoYU1vZGUodGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwuYWxwaGFNb2RlKTsKKyAg
ICAgICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gc2NlbmUuX2JlZm9yZVJlbmRl
cmluZ01lc2hTdGFnZTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBz
dGVwID0gX2FbX2ldOworICAgICAgICAgICAgc3RlcC5hY3Rpb24odGhpcywgc3ViTWVzaCwgYmF0
Y2gpOworICAgICAgICB9CisgICAgICAgIHZhciBlZmZlY3Q7CisgICAgICAgIGlmICh0aGlzLl9l
ZmZlY3RpdmVNYXRlcmlhbC5fc3RvcmVFZmZlY3RPblN1Yk1lc2hlcykgeworICAgICAgICAgICAg
ZWZmZWN0ID0gc3ViTWVzaC5lZmZlY3Q7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBlZmZlY3QgPSB0aGlzLl9lZmZlY3RpdmVNYXRlcmlhbC5nZXRFZmZlY3QoKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWVmZmVjdCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVmZmVjdGl2ZU1lc2ggPSB0aGlzLl9lZmZlY3RpdmVN
ZXNoOworICAgICAgICB2YXIgc2lkZU9yaWVudGF0aW9uOworICAgICAgICBpZiAoIWluc3RhbmNl
RGF0YVN0b3JhZ2UuaXNGcm96ZW4pIHsKKyAgICAgICAgICAgIHNpZGVPcmllbnRhdGlvbiA9IHRo
aXMub3ZlcnJpZGVNYXRlcmlhbFNpZGVPcmllbnRhdGlvbjsKKyAgICAgICAgICAgIGlmIChzaWRl
T3JpZW50YXRpb24gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNpZGVPcmllbnRhdGlvbiA9
IHRoaXMuX2VmZmVjdGl2ZU1hdGVyaWFsLnNpZGVPcmllbnRhdGlvbjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChlZmZlY3RpdmVNZXNoLl9nZXRXb3JsZE1hdHJpeERldGVybWluYW50
KCkgPCAwKSB7CisgICAgICAgICAgICAgICAgc2lkZU9yaWVudGF0aW9uID0gKHNpZGVPcmllbnRh
dGlvbiA9PT0gX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRf
X1siTWF0ZXJpYWwiXS5DbG9ja1dpc2VTaWRlT3JpZW50YXRpb24gPyBfTWF0ZXJpYWxzX21hdGVy
aWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbCJdLkNvdW50ZXJDbG9j
a1dpc2VTaWRlT3JpZW50YXRpb24gOiBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbCJdLkNsb2NrV2lzZVNpZGVPcmllbnRhdGlvbik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpbnN0YW5jZURhdGFTdG9yYWdlLnNpZGVPcmllbnRh
dGlvbiA9IHNpZGVPcmllbnRhdGlvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHNpZGVPcmllbnRhdGlvbiA9IGluc3RhbmNlRGF0YVN0b3JhZ2Uuc2lkZU9yaWVudGF0
aW9uOworICAgICAgICB9CisgICAgICAgIHZhciByZXZlcnNlID0gdGhpcy5fZWZmZWN0aXZlTWF0
ZXJpYWwuX3ByZUJpbmQoZWZmZWN0LCBzaWRlT3JpZW50YXRpb24pOworICAgICAgICBpZiAodGhp
cy5fZWZmZWN0aXZlTWF0ZXJpYWwuZm9yY2VEZXB0aFdyaXRlKSB7CisgICAgICAgICAgICBlbmdp
bmUuc2V0RGVwdGhXcml0ZSh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBCaW5kCisgICAg
ICAgIHZhciBmaWxsTW9kZSA9IHNjZW5lLmZvcmNlUG9pbnRzQ2xvdWQgPyBfTWF0ZXJpYWxzX21h
dGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbCJdLlBvaW50Rmls
bE1vZGUgOiAoc2NlbmUuZm9yY2VXaXJlZnJhbWUgPyBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbCJdLldpcmVGcmFtZUZpbGxNb2RlIDog
dGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwuZmlsbE1vZGUpOworICAgICAgICBpZiAodGhpcy5faW50
ZXJuYWxNZXNoRGF0YUluZm8uX29uQmVmb3JlQmluZE9ic2VydmFibGUpIHsKKyAgICAgICAgICAg
IHRoaXMuX2ludGVybmFsTWVzaERhdGFJbmZvLl9vbkJlZm9yZUJpbmRPYnNlcnZhYmxlLm5vdGlm
eU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWhhcmR3YXJlSW5zdGFu
Y2VkUmVuZGVyaW5nKSB7IC8vIEJpbmRpbmcgd2lsbCBiZSBkb25lIGxhdGVyIGJlY2F1c2Ugd2Ug
bmVlZCB0byBhZGQgbW9yZSBpbmZvIHRvIHRoZSBWQgorICAgICAgICAgICAgdGhpcy5fYmluZChz
dWJNZXNoLCBlZmZlY3QsIGZpbGxNb2RlKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgd29ybGQg
PSBlZmZlY3RpdmVNZXNoLmdldFdvcmxkTWF0cml4KCk7CisgICAgICAgIGlmICh0aGlzLl9lZmZl
Y3RpdmVNYXRlcmlhbC5fc3RvcmVFZmZlY3RPblN1Yk1lc2hlcykgeworICAgICAgICAgICAgdGhp
cy5fZWZmZWN0aXZlTWF0ZXJpYWwuYmluZEZvclN1Yk1lc2god29ybGQsIHRoaXMsIHN1Yk1lc2gp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZWZmZWN0aXZl
TWF0ZXJpYWwuYmluZCh3b3JsZCwgdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlz
Ll9lZmZlY3RpdmVNYXRlcmlhbC5iYWNrRmFjZUN1bGxpbmcgJiYgdGhpcy5fZWZmZWN0aXZlTWF0
ZXJpYWwuc2VwYXJhdGVDdWxsaW5nUGFzcykgeworICAgICAgICAgICAgZW5naW5lLnNldFN0YXRl
KHRydWUsIHRoaXMuX2VmZmVjdGl2ZU1hdGVyaWFsLnpPZmZzZXQsIGZhbHNlLCAhcmV2ZXJzZSk7
CisgICAgICAgICAgICB0aGlzLl9wcm9jZXNzUmVuZGVyaW5nKHN1Yk1lc2gsIGVmZmVjdCwgZmls
bE1vZGUsIGJhdGNoLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZywgdGhpcy5fb25CZWZvcmVE
cmF3LCB0aGlzLl9lZmZlY3RpdmVNYXRlcmlhbCk7CisgICAgICAgICAgICBlbmdpbmUuc2V0U3Rh
dGUodHJ1ZSwgdGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwuek9mZnNldCwgZmFsc2UsIHJldmVyc2Up
OworICAgICAgICB9CisgICAgICAgIC8vIERyYXcKKyAgICAgICAgdGhpcy5fcHJvY2Vzc1JlbmRl
cmluZyhzdWJNZXNoLCBlZmZlY3QsIGZpbGxNb2RlLCBiYXRjaCwgaGFyZHdhcmVJbnN0YW5jZWRS
ZW5kZXJpbmcsIHRoaXMuX29uQmVmb3JlRHJhdywgdGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwpOwor
ICAgICAgICAvLyBVbmJpbmQKKyAgICAgICAgdGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwudW5iaW5k
KCk7CisgICAgICAgIGZvciAodmFyIF9iID0gMCwgX2MgPSBzY2VuZS5fYWZ0ZXJSZW5kZXJpbmdN
ZXNoU3RhZ2U7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7CisgICAgICAgICAgICB2YXIgc3RlcCA9
IF9jW19iXTsKKyAgICAgICAgICAgIHN0ZXAuYWN0aW9uKHRoaXMsIHN1Yk1lc2gsIGJhdGNoKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm8uX29uQWZ0
ZXJSZW5kZXJPYnNlcnZhYmxlKSB7CisgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbE1lc2hEYXRh
SW5mby5fb25BZnRlclJlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgTWVzaC5wcm90b3R5cGUu
X29uQmVmb3JlRHJhdyA9IGZ1bmN0aW9uIChpc0luc3RhbmNlLCB3b3JsZCwgZWZmZWN0aXZlTWF0
ZXJpYWwpIHsKKyAgICAgICAgaWYgKGlzSW5zdGFuY2UgJiYgZWZmZWN0aXZlTWF0ZXJpYWwpIHsK
KyAgICAgICAgICAgIGVmZmVjdGl2ZU1hdGVyaWFsLmJpbmRPbmx5V29ybGRNYXRyaXgod29ybGQp
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiAgIFJlbm9ybWFsaXplIHRoZSBt
ZXNoIGFuZCBwYXRjaCBpdCB1cCBpZiB0aGVyZSBhcmUgbm8gd2VpZ2h0cworICAgICAqICAgU2lt
aWxhciB0byBub3JtYWxpemF0aW9uIGJ5IGFkZGluZyB0aGUgd2VpZ2h0cyBjb21wdXRlIHRoZSBy
ZWNpcHJvY2FsIGFuZCBtdWx0aXBseSBhbGwgZWxlbWVudHMsIHRoaXMgd2lsIGVuc3VyZSB0aGF0
IGV2ZXJ5dGhpbmcgYWRkcyB0byAxLgorICAgICAqICAgSG93ZXZlciBpbiB0aGUgY2FzZSBvZiB6
ZXJvIHdlaWdodHMgdGhlbiB3ZSBzZXQganVzdCBhIHNpbmdsZSBpbmZsdWVuY2UgdG8gMS4KKyAg
ICAgKiAgIFdlIGNoZWNrIGluIHRoZSBmdW5jdGlvbiBmb3IgZXh0cmEncyBwcmVzZW50IGFuZCBp
ZiBzbyB3ZSB1c2UgdGhlIG5vcm1hbGl6ZVNraW5XZWlnaHRzV2l0aEV4dHJhcyByYXRoZXIgdGhh
biB0aGUgRm91cldlaWdodHMgdmVyc2lvbi4KKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5j
bGVhbk1hdHJpeFdlaWdodHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLmlzVmVy
dGljZXNEYXRhUHJlc2VudChfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZl
cnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpKSB7CisgICAgICAgICAgICBpZiAodGhp
cy5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQpKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5ub3JtYWxpemVTa2luV2VpZ2h0c0FuZEV4dHJhKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZVNr
aW5Gb3VyV2VpZ2h0cygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAv
LyBmYXN0ZXIgNCB3ZWlnaHQgdmVyc2lvbi4KKyAgICBNZXNoLnByb3RvdHlwZS5ub3JtYWxpemVT
a2luRm91cldlaWdodHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBtYXRyaWNlc1dlaWdo
dHMgPSB0aGlzLmdldFZlcnRpY2VzRGF0YShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV84X19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpOworICAgICAgICB2YXIg
bnVtV2VpZ2h0cyA9IG1hdHJpY2VzV2VpZ2h0cy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGEg
PSAwOyBhIDwgbnVtV2VpZ2h0czsgYSArPSA0KSB7CisgICAgICAgICAgICAvLyBhY2N1bXVsYXRl
IHdlaWdodHMKKyAgICAgICAgICAgIHZhciB0ID0gbWF0cmljZXNXZWlnaHRzW2FdICsgbWF0cmlj
ZXNXZWlnaHRzW2EgKyAxXSArIG1hdHJpY2VzV2VpZ2h0c1thICsgMl0gKyBtYXRyaWNlc1dlaWdo
dHNbYSArIDNdOworICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGludmFsaWQgd2VpZ2h0IGFuZCBq
dXN0IHNldCBpdCB0byAxLgorICAgICAgICAgICAgaWYgKHQgPT09IDApIHsKKyAgICAgICAgICAg
ICAgICBtYXRyaWNlc1dlaWdodHNbYV0gPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gcmVub3JtYWxpemUgc28gZXZlcnl0aGluZyBhZGRz
IHRvIDEgdXNlIHJlY2lwcmljYWwKKyAgICAgICAgICAgICAgICB2YXIgcmVjaXAgPSAxIC8gdDsK
KyAgICAgICAgICAgICAgICBtYXRyaWNlc1dlaWdodHNbYV0gKj0gcmVjaXA7CisgICAgICAgICAg
ICAgICAgbWF0cmljZXNXZWlnaHRzW2EgKyAxXSAqPSByZWNpcDsKKyAgICAgICAgICAgICAgICBt
YXRyaWNlc1dlaWdodHNbYSArIDJdICo9IHJlY2lwOworICAgICAgICAgICAgICAgIG1hdHJpY2Vz
V2VpZ2h0c1thICsgM10gKj0gcmVjaXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5zZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kLCBtYXRyaWNlc1dlaWdodHMp
OworICAgIH07CisgICAgLy8gaGFuZGxlIHNwZWNpYWwgY2FzZSBvZiBleHRyYSB2ZXJ0cy4gIChp
biB0aGVvcnkgZ2x0ZiBjYW4gaGFuZGxlIDEyIGluZmx1ZW5jZXMpCisgICAgTWVzaC5wcm90b3R5
cGUubm9ybWFsaXplU2tpbldlaWdodHNBbmRFeHRyYSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dmFyIG1hdHJpY2VzV2VpZ2h0c0V4dHJhID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdo
dHNFeHRyYUtpbmQpOworICAgICAgICB2YXIgbWF0cmljZXNXZWlnaHRzID0gdGhpcy5nZXRWZXJ0
aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZm
ZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKTsKKyAgICAgICAgdmFyIG51bVdlaWdodHMgPSBtYXRy
aWNlc1dlaWdodHMubGVuZ3RoOworICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IG51bVdlaWdo
dHM7IGEgKz0gNCkgeworICAgICAgICAgICAgLy8gYWNjdW11bGF0ZSB3ZWlnaHRzCisgICAgICAg
ICAgICB2YXIgdCA9IG1hdHJpY2VzV2VpZ2h0c1thXSArIG1hdHJpY2VzV2VpZ2h0c1thICsgMV0g
KyBtYXRyaWNlc1dlaWdodHNbYSArIDJdICsgbWF0cmljZXNXZWlnaHRzW2EgKyAzXTsKKyAgICAg
ICAgICAgIHQgKz0gbWF0cmljZXNXZWlnaHRzRXh0cmFbYV0gKyBtYXRyaWNlc1dlaWdodHNFeHRy
YVthICsgMV0gKyBtYXRyaWNlc1dlaWdodHNFeHRyYVthICsgMl0gKyBtYXRyaWNlc1dlaWdodHNF
eHRyYVthICsgM107CisgICAgICAgICAgICAvLyBjaGVjayBmb3IgaW52YWxpZCB3ZWlnaHQgYW5k
IGp1c3Qgc2V0IGl0IHRvIDEuCisgICAgICAgICAgICBpZiAodCA9PT0gMCkgeworICAgICAgICAg
ICAgICAgIG1hdHJpY2VzV2VpZ2h0c1thXSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyByZW5vcm1hbGl6ZSBzbyBldmVyeXRoaW5nIGFk
ZHMgdG8gMSB1c2UgcmVjaXByaWNhbAorICAgICAgICAgICAgICAgIHZhciByZWNpcCA9IDEgLyB0
OworICAgICAgICAgICAgICAgIG1hdHJpY2VzV2VpZ2h0c1thXSAqPSByZWNpcDsKKyAgICAgICAg
ICAgICAgICBtYXRyaWNlc1dlaWdodHNbYSArIDFdICo9IHJlY2lwOworICAgICAgICAgICAgICAg
IG1hdHJpY2VzV2VpZ2h0c1thICsgMl0gKj0gcmVjaXA7CisgICAgICAgICAgICAgICAgbWF0cmlj
ZXNXZWlnaHRzW2EgKyAzXSAqPSByZWNpcDsKKyAgICAgICAgICAgICAgICAvLyBzYW1lIGdvZXMg
Zm9yIGV4dHJhcworICAgICAgICAgICAgICAgIG1hdHJpY2VzV2VpZ2h0c0V4dHJhW2FdICo9IHJl
Y2lwOworICAgICAgICAgICAgICAgIG1hdHJpY2VzV2VpZ2h0c0V4dHJhW2EgKyAxXSAqPSByZWNp
cDsKKyAgICAgICAgICAgICAgICBtYXRyaWNlc1dlaWdodHNFeHRyYVthICsgMl0gKj0gcmVjaXA7
CisgICAgICAgICAgICAgICAgbWF0cmljZXNXZWlnaHRzRXh0cmFbYSArIDNdICo9IHJlY2lwOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuc2V0VmVydGljZXNEYXRhKF9i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTWF0cmlj
ZXNXZWlnaHRzS2luZCwgbWF0cmljZXNXZWlnaHRzKTsKKyAgICAgICAgdGhpcy5zZXRWZXJ0aWNl
c0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIi
XS5NYXRyaWNlc1dlaWdodHNLaW5kLCBtYXRyaWNlc1dlaWdodHNFeHRyYSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBWYWxpZGF0ZVNraW5uaW5nIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoYXQg
YSBtZXNoIGhhcyB2YWxpZCBza2lubmluZyBkYXRhIGFsb25nIHdpdGggc2tpbiBtZXRyaWNzLCBp
ZiBtaXNzaW5nIHdlaWdodHMsCisgICAgICogb3Igbm90IG5vcm1hbGl6ZWQgaXQgaXMgcmV0dXJu
ZWQgYXMgaW52YWxpZCBtZXNoIHRoZSBzdHJpbmcgY2FuIGJlIHVzZWQgZm9yIGNvbnNvbGUgbG9n
cywgb3Igb24gc2NyZWVuIG1lc3NhZ2VzIHRvIGxldAorICAgICAqIHRoZSB1c2VyIGtub3cgdGhl
cmUgd2FzIGFuIGlzc3VlIHdpdGggaW1wb3J0aW5nIHRoZSBtZXNoCisgICAgICogQHJldHVybnMg
YSB2YWxpZGF0aW9uIG9iamVjdCB3aXRoIHNraW5uZWQsIHZhbGlkIGFuZCByZXBvcnQgc3RyaW5n
CisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUudmFsaWRhdGVTa2lubmluZyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIG1hdHJpY2VzV2VpZ2h0c0V4dHJhID0gdGhpcy5nZXRWZXJ0aWNl
c0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIi
XS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQpOworICAgICAgICB2YXIgbWF0cmljZXNXZWlnaHRz
ID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKTsKKyAgICAgICAgaWYgKG1h
dHJpY2VzV2VpZ2h0cyA9PT0gbnVsbCB8fCB0aGlzLnNrZWxldG9uID09IG51bGwpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7IHNraW5uZWQ6IGZhbHNlLCB2YWxpZDogdHJ1ZSwgcmVwb3J0OiAibm90
IHNraW5uZWQiIH07CisgICAgICAgIH0KKyAgICAgICAgdmFyIG51bVdlaWdodHMgPSBtYXRyaWNl
c1dlaWdodHMubGVuZ3RoOworICAgICAgICB2YXIgbnVtYmVyTm90U29ydGVkID0gMDsKKyAgICAg
ICAgdmFyIG1pc3NpbmdXZWlnaHRzID0gMDsKKyAgICAgICAgdmFyIG1heFVzZWRXZWlnaHRzID0g
MDsKKyAgICAgICAgdmFyIG51bWJlck5vdE5vcm1hbGl6ZWQgPSAwOworICAgICAgICB2YXIgbnVt
SW5mbHVlbmNlcyA9IG1hdHJpY2VzV2VpZ2h0c0V4dHJhID09PSBudWxsID8gNCA6IDg7CisgICAg
ICAgIHZhciB1c2VkV2VpZ2h0Q291bnRzID0gbmV3IEFycmF5KCk7CisgICAgICAgIGZvciAodmFy
IGEgPSAwOyBhIDw9IG51bUluZmx1ZW5jZXM7IGErKykgeworICAgICAgICAgICAgdXNlZFdlaWdo
dENvdW50c1thXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRvbGVyYW5jZUVwc2lsb24g
PSAwLjAwMTsKKyAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBudW1XZWlnaHRzOyBhICs9IDQp
IHsKKyAgICAgICAgICAgIHZhciBsYXN0V2VpZ2h0ID0gbWF0cmljZXNXZWlnaHRzW2FdOworICAg
ICAgICAgICAgdmFyIHQgPSBsYXN0V2VpZ2h0OworICAgICAgICAgICAgdmFyIHVzZWRXZWlnaHRz
ID0gdCA9PT0gMCA/IDAgOiAxOworICAgICAgICAgICAgZm9yICh2YXIgYiA9IDE7IGIgPCBudW1J
bmZsdWVuY2VzOyBiKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgZCA9IGIgPCA0ID8gbWF0cmlj
ZXNXZWlnaHRzW2EgKyBiXSA6IG1hdHJpY2VzV2VpZ2h0c0V4dHJhW2EgKyBiIC0gNF07CisgICAg
ICAgICAgICAgICAgaWYgKGQgPiBsYXN0V2VpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIG51
bWJlck5vdFNvcnRlZCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
ZCAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB1c2VkV2VpZ2h0cysrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ICs9IGQ7CisgICAgICAgICAgICAgICAgbGFzdFdl
aWdodCA9IGQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBjb3VudCB0aGUgYnVmZmVy
IHdlaWdodHMgdXNhZ2UKKyAgICAgICAgICAgIHVzZWRXZWlnaHRDb3VudHNbdXNlZFdlaWdodHNd
Kys7CisgICAgICAgICAgICAvLyBtYXggaW5mbHVlbmNlcworICAgICAgICAgICAgaWYgKHVzZWRX
ZWlnaHRzID4gbWF4VXNlZFdlaWdodHMpIHsKKyAgICAgICAgICAgICAgICBtYXhVc2VkV2VpZ2h0
cyA9IHVzZWRXZWlnaHRzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gY2hlY2sgZm9y
IGludmFsaWQgd2VpZ2h0IGFuZCBqdXN0IHNldCBpdCB0byAxLgorICAgICAgICAgICAgaWYgKHQg
PT09IDApIHsKKyAgICAgICAgICAgICAgICBtaXNzaW5nV2VpZ2h0cysrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gcmVub3JtYWxpemUgc28g
ZXZlcnl0aGluZyBhZGRzIHRvIDEgdXNlIHJlY2lwcmljYWwKKyAgICAgICAgICAgICAgICB2YXIg
cmVjaXAgPSAxIC8gdDsKKyAgICAgICAgICAgICAgICB2YXIgdG9sZXJhbmNlID0gMDsKKyAgICAg
ICAgICAgICAgICBmb3IgKGIgPSAwOyBiIDwgbnVtSW5mbHVlbmNlczsgYisrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChiIDwgNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdG9sZXJh
bmNlICs9IE1hdGguYWJzKG1hdHJpY2VzV2VpZ2h0c1thICsgYl0gLSAobWF0cmljZXNXZWlnaHRz
W2EgKyBiXSAqIHJlY2lwKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0b2xlcmFuY2UgKz0gTWF0aC5h
YnMobWF0cmljZXNXZWlnaHRzRXh0cmFbYSArIGIgLSA0XSAtIChtYXRyaWNlc1dlaWdodHNFeHRy
YVthICsgYiAtIDRdICogcmVjaXApKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBhcmJpdGFyeSBlcHNpbG9uIHZhbHVlIGZvciBk
aWNkYXRpbmcgbm90IG5vcm1hbGl6ZWQKKyAgICAgICAgICAgICAgICBpZiAodG9sZXJhbmNlID4g
dG9sZXJhbmNlRXBzaWxvbikgeworICAgICAgICAgICAgICAgICAgICBudW1iZXJOb3ROb3JtYWxp
emVkKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIC8vIHZhbGlkYXRlIGJvbmUgaW5kaWNlcyBhcmUgaW4gcmFuZ2Ugb2YgdGhlIHNrZWxldG9u
CisgICAgICAgIHZhciBudW1Cb25lcyA9IHRoaXMuc2tlbGV0b24uYm9uZXMubGVuZ3RoOworICAg
ICAgICB2YXIgbWF0cmljZXNJbmRpY2VzID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGlj
ZXNLaW5kKTsKKyAgICAgICAgdmFyIG1hdHJpY2VzSW5kaWNlc0V4dHJhID0gdGhpcy5nZXRWZXJ0
aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZm
ZXIiXS5NYXRyaWNlc0luZGljZXNFeHRyYUtpbmQpOworICAgICAgICB2YXIgbnVtQmFkQm9uZUlu
ZGljZXMgPSAwOworICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IG51bVdlaWdodHM7IGErKykg
eworICAgICAgICAgICAgZm9yICh2YXIgYiA9IDA7IGIgPCBudW1JbmZsdWVuY2VzOyBiKyspIHsK
KyAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBiIDwgNCA/IG1hdHJpY2VzSW5kaWNlc1tiXSA6
IG1hdHJpY2VzSW5kaWNlc0V4dHJhW2IgLSA0XTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXgg
Pj0gbnVtQm9uZXMgfHwgaW5kZXggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIG51bUJhZEJv
bmVJbmRpY2VzKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIC8vIGxvZyBtZXNoIHN0YXRzCisgICAgICAgIHZhciBvdXRwdXQgPSAiTnVtYmVy
IG9mIFdlaWdodHMgPSAiICsgbnVtV2VpZ2h0cyAvIDQgKyAiXG5NYXhpbXVtIGluZmx1ZW5jZXMg
PSAiICsgbWF4VXNlZFdlaWdodHMgKworICAgICAgICAgICAgIlxuTWlzc2luZyBXZWlnaHRzID0g
IiArIG1pc3NpbmdXZWlnaHRzICsgIlxuTm90IFNvcnRlZCA9ICIgKyBudW1iZXJOb3RTb3J0ZWQg
KworICAgICAgICAgICAgIlxuTm90IE5vcm1hbGl6ZWQgPSAiICsgbnVtYmVyTm90Tm9ybWFsaXpl
ZCArICJcbldlaWdodENvdW50cyA9IFsiICsgdXNlZFdlaWdodENvdW50cyArICJdIiArCisgICAg
ICAgICAgICAiXG5OdW1iZXIgb2YgYm9uZXMgPSAiICsgbnVtQm9uZXMgKyAiXG5CYWQgQm9uZSBJ
bmRpY2VzID0gIiArIG51bUJhZEJvbmVJbmRpY2VzOworICAgICAgICByZXR1cm4geyBza2lubmVk
OiB0cnVlLCB2YWxpZDogbWlzc2luZ1dlaWdodHMgPT09IDAgJiYgbnVtYmVyTm90Tm9ybWFsaXpl
ZCA9PT0gMCAmJiBudW1CYWRCb25lSW5kaWNlcyA9PT0gMCwgcmVwb3J0OiBvdXRwdXQgfTsKKyAg
ICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTWVzaC5wcm90b3R5cGUuX2NoZWNrRGVsYXlT
dGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgp
OworICAgICAgICBpZiAodGhpcy5fZ2VvbWV0cnkpIHsKKyAgICAgICAgICAgIHRoaXMuX2dlb21l
dHJ5LmxvYWQoc2NlbmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMuZGVsYXlM
b2FkU3RhdGUgPT09IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTdfX1siQ29uc3RhbnRzIl0uREVMQVlMT0FEU1RBVEVfTk9UTE9BREVEKSB7CisgICAgICAgICAg
ICB0aGlzLmRlbGF5TG9hZFN0YXRlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9MT0FESU5HOworICAg
ICAgICAgICAgdGhpcy5fcXVldWVMb2FkKHNjZW5lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIE1lc2gucHJvdG90eXBlLl9xdWV1ZUxvYWQgPSBmdW5jdGlv
biAoc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgc2NlbmUuX2Fk
ZFBlbmRpbmdEYXRhKHRoaXMpOworICAgICAgICB2YXIgZ2V0QmluYXJ5RGF0YSA9ICh0aGlzLmRl
bGF5TG9hZGluZ0ZpbGUuaW5kZXhPZigiLmJhYnlsb25iaW5hcnltZXNoZGF0YSIpICE9PSAtMSk7
CisgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRvb2xz
Il0uTG9hZEZpbGUodGhpcy5kZWxheUxvYWRpbmdGaWxlLCBmdW5jdGlvbiAoZGF0YSkgeworICAg
ICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgeworICAgICAgICAgICAg
ICAgIF90aGlzLl9kZWxheUxvYWRpbmdGdW5jdGlvbihkYXRhLCBfdGhpcyk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fZGVsYXlMb2Fk
aW5nRnVuY3Rpb24oSlNPTi5wYXJzZShkYXRhKSwgX3RoaXMpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgX3RoaXMuaW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24gKGluc3RhbmNlKSB7Cisg
ICAgICAgICAgICAgICAgaW5zdGFuY2UucmVmcmVzaEJvdW5kaW5nSW5mbygpOworICAgICAgICAg
ICAgICAgIGluc3RhbmNlLl9zeW5jU3ViTWVzaGVzKCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIF90aGlzLmRlbGF5TG9hZFN0YXRlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9MT0FERUQ7
CisgICAgICAgICAgICBzY2VuZS5fcmVtb3ZlUGVuZGluZ0RhdGEoX3RoaXMpOworICAgICAgICB9
LCBmdW5jdGlvbiAoKSB7IH0sIHNjZW5lLm9mZmxpbmVQcm92aWRlciwgZ2V0QmluYXJ5RGF0YSk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBg
dHJ1ZWAgaWYgdGhlIG1lc2ggaXMgd2l0aGluIHRoZSBmcnVzdHVtIGRlZmluZWQgYnkgdGhlIHBh
c3NlZCBhcnJheSBvZiBwbGFuZXMuCisgICAgICogQSBtZXNoIGlzIGluIHRoZSBmcnVzdHVtIGlm
IGl0cyBib3VuZGluZyBib3ggaW50ZXJzZWN0cyB0aGUgZnJ1c3R1bQorICAgICAqIEBwYXJhbSBm
cnVzdHVtUGxhbmVzIGRlZmluZXMgdGhlIGZydXN0dW0gdG8gdGVzdAorICAgICAqIEByZXR1cm5z
IHRydWUgaWYgdGhlIG1lc2ggaXMgaW4gdGhlIGZydXN0dW0gcGxhbmVzCisgICAgICovCisgICAg
TWVzaC5wcm90b3R5cGUuaXNJbkZydXN0dW0gPSBmdW5jdGlvbiAoZnJ1c3R1bVBsYW5lcykgewor
ICAgICAgICBpZiAodGhpcy5kZWxheUxvYWRTdGF0ZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9M
T0FESU5HKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFfc3VwZXIucHJvdG90eXBlLmlzSW5GcnVzdHVtLmNhbGwodGhpcywgZnJ1c3R1bVBsYW5l
cykpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9jaGVja0RlbGF5U3RhdGUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIHRoZSBtZXNoIG1hdGVyaWFsIGJ5IHRoZSBtYXRlcmlhbCBvciBtdWx0
aU1hdGVyaWFsIGBpZGAgcHJvcGVydHkKKyAgICAgKiBAcGFyYW0gaWQgaXMgYSBzdHJpbmcgaWRl
bnRpZnlpbmcgdGhlIG1hdGVyaWFsIG9yIHRoZSBtdWx0aU1hdGVyaWFsCisgICAgICogQHJldHVy
bnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLnNldE1hdGVy
aWFsQnlJRCA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICB2YXIgbWF0ZXJpYWxzID0gdGhpcy5n
ZXRTY2VuZSgpLm1hdGVyaWFsczsKKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICBmb3IgKGlu
ZGV4ID0gbWF0ZXJpYWxzLmxlbmd0aCAtIDE7IGluZGV4ID4gLTE7IGluZGV4LS0pIHsKKyAgICAg
ICAgICAgIGlmIChtYXRlcmlhbHNbaW5kZXhdLmlkID09PSBpZCkgeworICAgICAgICAgICAgICAg
IHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbHNbaW5kZXhdOworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE11bHRpCisgICAg
ICAgIHZhciBtdWx0aU1hdGVyaWFscyA9IHRoaXMuZ2V0U2NlbmUoKS5tdWx0aU1hdGVyaWFsczsK
KyAgICAgICAgZm9yIChpbmRleCA9IG11bHRpTWF0ZXJpYWxzLmxlbmd0aCAtIDE7IGluZGV4ID4g
LTE7IGluZGV4LS0pIHsKKyAgICAgICAgICAgIGlmIChtdWx0aU1hdGVyaWFsc1tpbmRleF0uaWQg
PT09IGlkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG11bHRpTWF0ZXJpYWxz
W2luZGV4XTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
dHVybnMgYXMgYSBuZXcgYXJyYXkgcG9wdWxhdGVkIHdpdGggdGhlIG1lc2ggbWF0ZXJpYWwgYW5k
L29yIHNrZWxldG9uLCBpZiBhbnkuCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgSUFuaW1h
dGFibGUKKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5nZXRBbmltYXRhYmxlcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgaWYg
KHRoaXMubWF0ZXJpYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLm1hdGVyaWFs
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5za2VsZXRvbikgeworICAgICAgICAgICAg
cmVzdWx0cy5wdXNoKHRoaXMuc2tlbGV0b24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXN1bHRzOworICAgIH07CisgICAgLyoqCisgICAgICogTW9kaWZpZXMgdGhlIG1lc2ggZ2VvbWV0
cnkgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgdHJhbnNmb3JtYXRpb24gbWF0cml4LgorICAgICAq
IFRoaXMgbWV0aG9kIHJldHVybnMgbm90aGluZyBidXQgaXQgcmVhbGx5IG1vZGlmaWVzIHRoZSBt
ZXNoIGV2ZW4gaWYgaXQncyBvcmlnaW5hbGx5IG5vdCBzZXQgYXMgdXBkYXRhYmxlLgorICAgICAq
IFRoZSBtZXNoIG5vcm1hbHMgYXJlIG1vZGlmaWVkIHVzaW5nIHRoZSBzYW1lIHRyYW5zZm9ybWF0
aW9uLgorICAgICAqIE5vdGUgdGhhdCwgdW5kZXIgdGhlIGhvb2QsIHRoaXMgbWV0aG9kIHNldHMg
YSBuZXcgVmVydGV4QnVmZmVyIGVhY2ggY2FsbC4KKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtIGRl
ZmluZXMgdGhlIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlCisgICAgICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vcmVzb3VyY2VzL2Jha2luZ190cmFuc2Zvcm1hdGlvbnMKKyAgICAgKiBA
cmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUuYmFr
ZVRyYW5zZm9ybUludG9WZXJ0aWNlcyA9IGZ1bmN0aW9uICh0cmFuc2Zvcm0pIHsKKyAgICAgICAg
Ly8gUG9zaXRpb24KKyAgICAgICAgaWYgKCF0aGlzLmlzVmVydGljZXNEYXRhUHJlc2VudChfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9u
S2luZCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZh
ciBzdWJtZXNoZXMgPSB0aGlzLnN1Yk1lc2hlcy5zcGxpY2UoMCk7CisgICAgICAgIHRoaXMuX3Jl
c2V0UG9pbnRzQXJyYXlDYWNoZSgpOworICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0VmVydGlj
ZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVy
Il0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAgdmFyIHRlbXAgPSBuZXcgQXJyYXkoKTsKKyAgICAg
ICAgdmFyIGluZGV4OworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0
aDsgaW5kZXggKz0gMykgeworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlcyhfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZy
b21BcnJheShkYXRhLCBpbmRleCksIHRyYW5zZm9ybSkudG9BcnJheSh0ZW1wLCBpbmRleCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5zZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHRlbXAsIHRo
aXMuZ2V0VmVydGV4QnVmZmVyKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
VmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKS5pc1VwZGF0YWJsZSgpKTsKKyAgICAgICAgLy8g
Tm9ybWFscworICAgICAgICBpZiAodGhpcy5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKSkg
eworICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCk7CisgICAg
ICAgICAgICB0ZW1wID0gW107CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBk
YXRhLmxlbmd0aDsgaW5kZXggKz0gMykgeworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9y
bWFsKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0
b3IzIl0uRnJvbUFycmF5KGRhdGEsIGluZGV4KSwgdHJhbnNmb3JtKS5ub3JtYWxpemUoKS50b0Fy
cmF5KHRlbXAsIGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc2V0VmVy
dGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVm
ZmVyIl0uTm9ybWFsS2luZCwgdGVtcCwgdGhpcy5nZXRWZXJ0ZXhCdWZmZXIoX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKS5pc1Vw
ZGF0YWJsZSgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBmbGlwIGZhY2VzPworICAgICAgICBp
ZiAodHJhbnNmb3JtLm1bMF0gKiB0cmFuc2Zvcm0ubVs1XSAqIHRyYW5zZm9ybS5tWzEwXSA8IDAp
IHsKKyAgICAgICAgICAgIHRoaXMuZmxpcEZhY2VzKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8g
UmVzdG9yZSBzdWJtZXNoZXMKKyAgICAgICAgdGhpcy5yZWxlYXNlU3ViTWVzaGVzKCk7CisgICAg
ICAgIHRoaXMuc3ViTWVzaGVzID0gc3VibWVzaGVzOworICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIE1vZGlmaWVzIHRoZSBtZXNoIGdlb21ldHJ5IGFjY29yZGlu
ZyB0byBpdHMgb3duIGN1cnJlbnQgV29ybGQgTWF0cml4LgorICAgICAqIFRoZSBtZXNoIFdvcmxk
IE1hdHJpeCBpcyB0aGVuIHJlc2V0LgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgbm90aGlu
ZyBidXQgcmVhbGx5IG1vZGlmaWVzIHRoZSBtZXNoIGV2ZW4gaWYgaXQncyBvcmlnaW5hbGx5IG5v
dCBzZXQgYXMgdXBkYXRhYmxlLgorICAgICAqIE5vdGUgdGhhdCwgdW5kZXIgdGhlIGhvb2QsIHRo
aXMgbWV0aG9kIHNldHMgYSBuZXcgVmVydGV4QnVmZmVyIGVhY2ggY2FsbC4KKyAgICAgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9yZXNvdXJjZXMvYmFraW5nX3RyYW5zZm9ybWF0aW9u
cworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBNZXNoLnBy
b3RvdHlwZS5iYWtlQ3VycmVudFRyYW5zZm9ybUludG9WZXJ0aWNlcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGhpcy5iYWtlVHJhbnNmb3JtSW50b1ZlcnRpY2VzKHRoaXMuY29tcHV0ZVdvcmxk
TWF0cml4KHRydWUpKTsKKyAgICAgICAgdGhpcy5zY2FsaW5nLmNvcHlGcm9tRmxvYXRzKDEsIDEs
IDEpOworICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHlGcm9tRmxvYXRzKDAsIDAsIDApOworICAg
ICAgICB0aGlzLnJvdGF0aW9uLmNvcHlGcm9tRmxvYXRzKDAsIDAsIDApOworICAgICAgICAvL29u
bHkgaWYgcXVhdGVybmlvbiBpcyBhbHJlYWR5IHNldAorICAgICAgICBpZiAodGhpcy5yb3RhdGlv
blF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlF1YXRlcm5pb24i
XS5JZGVudGl0eSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1hdHJpeCJdLklk
ZW50aXR5KCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KE1lc2gucHJvdG90eXBlLCAiX3Bvc2l0aW9ucyIsIHsKKyAgICAgICAgLy8gQ2Fj
aGUKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fZ2VvbWV0cnkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5fZ2VvbWV0cnkuX3Bvc2l0aW9uczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE1l
c2gucHJvdG90eXBlLl9yZXNldFBvaW50c0FycmF5Q2FjaGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICh0aGlzLl9nZW9tZXRyeSkgeworICAgICAgICAgICAgdGhpcy5fZ2VvbWV0cnkuX3Jl
c2V0UG9pbnRzQXJyYXlDYWNoZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBNZXNoLnByb3RvdHlwZS5fZ2VuZXJhdGVQ
b2ludHNBcnJheSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2dlb21ldHJ5KSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2VvbWV0cnkuX2dlbmVyYXRlUG9pbnRzQXJyYXko
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIGEgbmV3IE1lc2ggb2JqZWN0IGdlbmVyYXRlZCBmcm9tIHRoZSBjdXJyZW50
IG1lc2ggcHJvcGVydGllcy4KKyAgICAgKiBUaGlzIG1ldGhvZCBtdXN0IG5vdCBnZXQgY29uZnVz
ZWQgd2l0aCBjcmVhdGVJbnN0YW5jZSgpCisgICAgICogQHBhcmFtIG5hbWUgaXMgYSBzdHJpbmcs
IHRoZSBuYW1lIGdpdmVuIHRvIHRoZSBuZXcgbWVzaAorICAgICAqIEBwYXJhbSBuZXdQYXJlbnQg
Y2FuIGJlIGFueSBOb2RlIG9iamVjdCAoZGVmYXVsdCBgbnVsbGApCisgICAgICogQHBhcmFtIGRv
Tm90Q2xvbmVDaGlsZHJlbiBhbGxvd3MvZGVuaWVzIHRoZSByZWN1cnNpdmUgY2xvbmluZyBvZiB0
aGUgb3JpZ2luYWwgbWVzaCBjaGlsZHJlbiBpZiBhbnkgKGRlZmF1bHQgYGZhbHNlYCkKKyAgICAg
KiBAcGFyYW0gY2xvbmVQaHlzaWNzSW1wb3N0b3IgYWxsb3dzL2RlbmllcyB0aGUgY2xvbmluZyBp
biB0aGUgc2FtZSB0aW1lIG9mIHRoZSBvcmlnaW5hbCBtZXNoIGBib2R5YCB1c2VkIGJ5IHRoZSBw
aHlzaWNzIGVuZ2luZSwgaWYgYW55IChkZWZhdWx0IGB0cnVlYCkKKyAgICAgKiBAcmV0dXJucyBh
IG5ldyBtZXNoCisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAo
bmFtZSwgbmV3UGFyZW50LCBkb05vdENsb25lQ2hpbGRyZW4sIGNsb25lUGh5c2ljc0ltcG9zdG9y
KSB7CisgICAgICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9ICIiOyB9CisgICAgICAg
IGlmIChuZXdQYXJlbnQgPT09IHZvaWQgMCkgeyBuZXdQYXJlbnQgPSBudWxsOyB9CisgICAgICAg
IGlmIChjbG9uZVBoeXNpY3NJbXBvc3RvciA9PT0gdm9pZCAwKSB7IGNsb25lUGh5c2ljc0ltcG9z
dG9yID0gdHJ1ZTsgfQorICAgICAgICByZXR1cm4gbmV3IE1lc2gobmFtZSwgdGhpcy5nZXRTY2Vu
ZSgpLCBuZXdQYXJlbnQsIHRoaXMsIGRvTm90Q2xvbmVDaGlsZHJlbiwgY2xvbmVQaHlzaWNzSW1w
b3N0b3IpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZXMgcmVzb3VyY2VzIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIG1lc2guCisgICAgICogQHBhcmFtIGRvTm90UmVjdXJzZSBTZXQgdG8g
dHJ1ZSB0byBub3QgcmVjdXJzZSBpbnRvIGVhY2ggY2hpbGRyZW4gKHJlY3Vyc2UgaW50byBlYWNo
IGNoaWxkcmVuIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGRpc3Bvc2VNYXRlcmlhbEFuZFRl
eHR1cmVzIFNldCB0byB0cnVlIHRvIGFsc28gZGlzcG9zZSByZWZlcmVuY2VkIG1hdGVyaWFscyBh
bmQgdGV4dHVyZXMgKGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgTWVzaC5wcm90b3R5
cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChkb05vdFJlY3Vyc2UsIGRpc3Bvc2VNYXRlcmlhbEFuZFRl
eHR1cmVzKSB7CisgICAgICAgIGlmIChkaXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcyA9PT0gdm9p
ZCAwKSB7IGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzID0gZmFsc2U7IH0KKyAgICAgICAgdGhp
cy5tb3JwaFRhcmdldE1hbmFnZXIgPSBudWxsOworICAgICAgICBpZiAodGhpcy5fZ2VvbWV0cnkp
IHsKKyAgICAgICAgICAgIHRoaXMuX2dlb21ldHJ5LnJlbGVhc2VGb3JNZXNoKHRoaXMsIHRydWUp
OworICAgICAgICB9CisgICAgICAgIHZhciBpbnRlcm5hbERhdGFJbmZvID0gdGhpcy5faW50ZXJu
YWxNZXNoRGF0YUluZm87CisgICAgICAgIGlmIChpbnRlcm5hbERhdGFJbmZvLl9vbkJlZm9yZURy
YXdPYnNlcnZhYmxlKSB7CisgICAgICAgICAgICBpbnRlcm5hbERhdGFJbmZvLl9vbkJlZm9yZURy
YXdPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGludGVybmFsRGF0
YUluZm8uX29uQmVmb3JlQmluZE9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIGludGVybmFsRGF0
YUluZm8uX29uQmVmb3JlQmluZE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoaW50ZXJuYWxEYXRhSW5mby5fb25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlKSB7CisgICAg
ICAgICAgICBpbnRlcm5hbERhdGFJbmZvLl9vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuY2xlYXIo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW50ZXJuYWxEYXRhSW5mby5fb25BZnRlclJlbmRl
ck9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIGludGVybmFsRGF0YUluZm8uX29uQWZ0ZXJSZW5k
ZXJPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU291cmNlcworICAg
ICAgICBpZiAodGhpcy5fc2NlbmUudXNlQ2xvbmVkTWVzaGhNYXApIHsKKyAgICAgICAgICAgIGlm
IChpbnRlcm5hbERhdGFJbmZvLm1lc2hNYXApIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciB1
bmlxdWVJZCBpbiBpbnRlcm5hbERhdGFJbmZvLm1lc2hNYXApIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIG1lc2ggPSBpbnRlcm5hbERhdGFJbmZvLm1lc2hNYXBbdW5pcXVlSWRdOworICAgICAg
ICAgICAgICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5f
aW50ZXJuYWxNZXNoRGF0YUluZm8uX3NvdXJjZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnRlcm5hbERhdGFJbmZvLm1lc2hNYXBbdW5pcXVlSWRdID0gdW5kZWZpbmVkOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGludGVybmFsRGF0YUluZm8uX3NvdXJjZSAmJiBpbnRlcm5hbERhdGFJbmZv
Ll9zb3VyY2UuX2ludGVybmFsTWVzaERhdGFJbmZvLm1lc2hNYXApIHsKKyAgICAgICAgICAgICAg
ICBpbnRlcm5hbERhdGFJbmZvLl9zb3VyY2UuX2ludGVybmFsTWVzaERhdGFJbmZvLm1lc2hNYXBb
dGhpcy51bmlxdWVJZF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgbWVzaGVzID0gdGhpcy5nZXRTY2VuZSgpLm1l
c2hlczsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgbWVzaGVzXzEgPSBtZXNoZXM7IF9p
IDwgbWVzaGVzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGFic3RyYWN0
TWVzaCA9IG1lc2hlc18xW19pXTsKKyAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IGFic3RyYWN0
TWVzaDsKKyAgICAgICAgICAgICAgICBpZiAobWVzaC5faW50ZXJuYWxNZXNoRGF0YUluZm8gJiYg
bWVzaC5faW50ZXJuYWxNZXNoRGF0YUluZm8uX3NvdXJjZSAmJiBtZXNoLl9pbnRlcm5hbE1lc2hE
YXRhSW5mby5fc291cmNlID09PSB0aGlzKSB7CisgICAgICAgICAgICAgICAgICAgIG1lc2guX2lu
dGVybmFsTWVzaERhdGFJbmZvLl9zb3VyY2UgPSBudWxsOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnRlcm5hbERhdGFJbmZvLl9zb3VyY2Ug
PSBudWxsOworICAgICAgICAvLyBJbnN0YW5jZXMKKyAgICAgICAgaWYgKHRoaXMuX2luc3RhbmNl
RGF0YVN0b3JhZ2UuaW5zdGFuY2VzQnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9pbnN0YW5j
ZURhdGFTdG9yYWdlLmluc3RhbmNlc0J1ZmZlci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlz
Ll9pbnN0YW5jZURhdGFTdG9yYWdlLmluc3RhbmNlc0J1ZmZlciA9IG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgd2hpbGUgKHRoaXMuaW5zdGFuY2VzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhp
cy5pbnN0YW5jZXNbMF0uZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90
b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMsIGRvTm90UmVjdXJzZSwgZGlzcG9zZU1hdGVyaWFsQW5k
VGV4dHVyZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogTW9kaWZpZXMgdGhlIG1lc2ggZ2Vv
bWV0cnkgYWNjb3JkaW5nIHRvIGEgZGlzcGxhY2VtZW50IG1hcC4KKyAgICAgKiBBIGRpc3BsYWNl
bWVudCBtYXAgaXMgYSBjb2xvcmVkIGltYWdlLiBFYWNoIHBpeGVsIGNvbG9yIHZhbHVlIChhY3R1
YWxseSBhIGdyYWRpZW50IGNvbXB1dGVkIGZyb20gcmVkLCBncmVlbiwgYmx1ZSB2YWx1ZXMpIHdp
bGwgZ2l2ZSB0aGUgZGlzcGxhY2VtZW50IHRvIGFwcGx5IHRvIGVhY2ggbWVzaCB2ZXJ0ZXguCisg
ICAgICogVGhlIG1lc2ggbXVzdCBiZSBzZXQgYXMgdXBkYXRhYmxlLiBJdHMgaW50ZXJuYWwgZ2Vv
bWV0cnkgaXMgZGlyZWN0bHkgbW9kaWZpZWQsIG5vIG5ldyBidWZmZXIgYXJlIGFsbG9jYXRlZC4K
KyAgICAgKiBAcGFyYW0gdXJsIGlzIGEgc3RyaW5nLCB0aGUgVVJMIGZyb20gdGhlIGltYWdlIGZp
bGUgaXMgdG8gYmUgZG93bmxvYWRlZC4KKyAgICAgKiBAcGFyYW0gbWluSGVpZ2h0IGlzIHRoZSBs
b3dlciBsaW1pdCBvZiB0aGUgZGlzcGxhY2VtZW50LgorICAgICAqIEBwYXJhbSBtYXhIZWlnaHQg
aXMgdGhlIHVwcGVyIGxpbWl0IG9mIHRoZSBkaXNwbGFjZW1lbnQuCisgICAgICogQHBhcmFtIG9u
U3VjY2VzcyBpcyBhbiBvcHRpb25hbCBKYXZhc2NyaXB0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBq
dXN0IGFmdGVyIHRoZSBtZXNoIGlzIG1vZGlmaWVkLiBJdCBpcyBwYXNzZWQgdGhlIG1vZGlmaWVk
IG1lc2ggYW5kIG11c3QgcmV0dXJuIG5vdGhpbmcuCisgICAgICogQHBhcmFtIHV2T2Zmc2V0IGlz
IGFuIG9wdGlvbmFsIHZlY3RvcjIgdXNlZCB0byBvZmZzZXQgVVYuCisgICAgICogQHBhcmFtIHV2
U2NhbGUgaXMgYW4gb3B0aW9uYWwgdmVjdG9yMiB1c2VkIHRvIHNjYWxlIFVWLgorICAgICAqIEBw
YXJhbSBmb3JjZVVwZGF0ZSBkZWZpbmVzIHdoZXRoZXIgb3Igbm90IHRvIGZvcmNlIGFuIHVwZGF0
ZSBvZiB0aGUgZ2VuZXJhdGVkIGJ1ZmZlcnMuIFRoaXMgaXMgdXNlZnVsIHRvIGFwcGx5IG9uIGEg
ZGVzZXJpYWxpemVkIG1vZGVsIGZvciBpbnN0YW5jZS4KKyAgICAgKiBAcmV0dXJucyB0aGUgTWVz
aC4KKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5hcHBseURpc3BsYWNlbWVudE1hcCA9IGZ1
bmN0aW9uICh1cmwsIG1pbkhlaWdodCwgbWF4SGVpZ2h0LCBvblN1Y2Nlc3MsIHV2T2Zmc2V0LCB1
dlNjYWxlLCBmb3JjZVVwZGF0ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAg
ICBpZiAoZm9yY2VVcGRhdGUgPT09IHZvaWQgMCkgeyBmb3JjZVVwZGF0ZSA9IGZhbHNlOyB9Cisg
ICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgdmFyIG9ubG9hZCA9
IGZ1bmN0aW9uIChpbWcpIHsKKyAgICAgICAgICAgIC8vIEdldHRpbmcgaGVpZ2h0IG1hcCBkYXRh
CisgICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFz
Iik7CisgICAgICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwor
ICAgICAgICAgICAgdmFyIGhlaWdodE1hcFdpZHRoID0gaW1nLndpZHRoOworICAgICAgICAgICAg
dmFyIGhlaWdodE1hcEhlaWdodCA9IGltZy5oZWlnaHQ7CisgICAgICAgICAgICBjYW52YXMud2lk
dGggPSBoZWlnaHRNYXBXaWR0aDsKKyAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHRN
YXBIZWlnaHQ7CisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWcsIDAsIDApOworICAg
ICAgICAgICAgLy8gQ3JlYXRlIFZlcnRleERhdGEgZnJvbSBtYXAgZGF0YQorICAgICAgICAgICAg
Ly9DYXN0IGlzIGR1ZSB0byB3cm9uZyBkZWZpbml0aW9uIGluIGxpYi5kLnRzIGZyb20gdHMgMS4z
IC0gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy85NDkKKyAg
ICAgICAgICAgIHZhciBidWZmZXIgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBoZWlnaHRN
YXBXaWR0aCwgaGVpZ2h0TWFwSGVpZ2h0KS5kYXRhOworICAgICAgICAgICAgX3RoaXMuYXBwbHlE
aXNwbGFjZW1lbnRNYXBGcm9tQnVmZmVyKGJ1ZmZlciwgaGVpZ2h0TWFwV2lkdGgsIGhlaWdodE1h
cEhlaWdodCwgbWluSGVpZ2h0LCBtYXhIZWlnaHQsIHV2T2Zmc2V0LCB1dlNjYWxlLCBmb3JjZVVw
ZGF0ZSk7CisgICAgICAgICAgICAvL2V4ZWN1dGUgc3VjY2VzcyBjYWxsYmFjaywgaWYgc2V0Cisg
ICAgICAgICAgICBpZiAob25TdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgb25TdWNjZXNzKF90
aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgX01pc2NfdG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5Mb2FkSW1hZ2UodXJsLCBvbmxvYWQs
IGZ1bmN0aW9uICgpIHsgfSwgc2NlbmUub2ZmbGluZVByb3ZpZGVyKTsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNb2RpZmllcyB0aGUgbWVzaCBnZW9tZXRy
eSBhY2NvcmRpbmcgdG8gYSBkaXNwbGFjZW1lbnRNYXAgYnVmZmVyLgorICAgICAqIEEgZGlzcGxh
Y2VtZW50IG1hcCBpcyBhIGNvbG9yZWQgaW1hZ2UuIEVhY2ggcGl4ZWwgY29sb3IgdmFsdWUgKGFj
dHVhbGx5IGEgZ3JhZGllbnQgY29tcHV0ZWQgZnJvbSByZWQsIGdyZWVuLCBibHVlIHZhbHVlcykg
d2lsbCBnaXZlIHRoZSBkaXNwbGFjZW1lbnQgdG8gYXBwbHkgdG8gZWFjaCBtZXNoIHZlcnRleC4K
KyAgICAgKiBUaGUgbWVzaCBtdXN0IGJlIHNldCBhcyB1cGRhdGFibGUuIEl0cyBpbnRlcm5hbCBn
ZW9tZXRyeSBpcyBkaXJlY3RseSBtb2RpZmllZCwgbm8gbmV3IGJ1ZmZlciBhcmUgYWxsb2NhdGVk
LgorICAgICAqIEBwYXJhbSBidWZmZXIgaXMgYSBgVWludDhBcnJheWAgYnVmZmVyIGNvbnRhaW5p
bmcgc2VyaWVzIG9mIGBVaW50OGAgbG93ZXIgdGhhbiAyNTUsIHRoZSByZWQsIGdyZWVuLCBibHVl
IGFuZCBhbHBoYSB2YWx1ZXMgb2YgZWFjaCBzdWNjZXNzaXZlIHBpeGVsLgorICAgICAqIEBwYXJh
bSBoZWlnaHRNYXBXaWR0aCBpcyB0aGUgd2lkdGggb2YgdGhlIGJ1ZmZlciBpbWFnZS4KKyAgICAg
KiBAcGFyYW0gaGVpZ2h0TWFwSGVpZ2h0IGlzIHRoZSBoZWlnaHQgb2YgdGhlIGJ1ZmZlciBpbWFn
ZS4KKyAgICAgKiBAcGFyYW0gbWluSGVpZ2h0IGlzIHRoZSBsb3dlciBsaW1pdCBvZiB0aGUgZGlz
cGxhY2VtZW50LgorICAgICAqIEBwYXJhbSBtYXhIZWlnaHQgaXMgdGhlIHVwcGVyIGxpbWl0IG9m
IHRoZSBkaXNwbGFjZW1lbnQuCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhbiBvcHRpb25h
bCBKYXZhc2NyaXB0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBqdXN0IGFmdGVyIHRoZSBtZXNoIGlz
IG1vZGlmaWVkLiBJdCBpcyBwYXNzZWQgdGhlIG1vZGlmaWVkIG1lc2ggYW5kIG11c3QgcmV0dXJu
IG5vdGhpbmcuCisgICAgICogQHBhcmFtIHV2T2Zmc2V0IGlzIGFuIG9wdGlvbmFsIHZlY3RvcjIg
dXNlZCB0byBvZmZzZXQgVVYuCisgICAgICogQHBhcmFtIHV2U2NhbGUgaXMgYW4gb3B0aW9uYWwg
dmVjdG9yMiB1c2VkIHRvIHNjYWxlIFVWLgorICAgICAqIEBwYXJhbSBmb3JjZVVwZGF0ZSBkZWZp
bmVzIHdoZXRoZXIgb3Igbm90IHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgZ2VuZXJhdGVkIGJ1
ZmZlcnMuIFRoaXMgaXMgdXNlZnVsIHRvIGFwcGx5IG9uIGEgZGVzZXJpYWxpemVkIG1vZGVsIGZv
ciBpbnN0YW5jZS4KKyAgICAgKiBAcmV0dXJucyB0aGUgTWVzaC4KKyAgICAgKi8KKyAgICBNZXNo
LnByb3RvdHlwZS5hcHBseURpc3BsYWNlbWVudE1hcEZyb21CdWZmZXIgPSBmdW5jdGlvbiAoYnVm
ZmVyLCBoZWlnaHRNYXBXaWR0aCwgaGVpZ2h0TWFwSGVpZ2h0LCBtaW5IZWlnaHQsIG1heEhlaWdo
dCwgdXZPZmZzZXQsIHV2U2NhbGUsIGZvcmNlVXBkYXRlKSB7CisgICAgICAgIGlmIChmb3JjZVVw
ZGF0ZSA9PT0gdm9pZCAwKSB7IGZvcmNlVXBkYXRlID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCF0
aGlzLmlzVmVydGljZXNEYXRhUHJlc2VudChfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV84X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCkKKyAgICAgICAgICAgIHx8ICF0aGlz
LmlzVmVydGljZXNEYXRhUHJlc2VudChfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQpCisgICAgICAgICAgICB8fCAhdGhpcy5pc1Zl
cnRpY2VzRGF0YVByZXNlbnQoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJW
ZXJ0ZXhCdWZmZXIiXS5VVktpbmQpKSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE5X19bIkxvZ2dlciJdLldhcm4oIkNhbm5vdCBjYWxsIGFwcGx5
RGlzcGxhY2VtZW50TWFwOiBHaXZlbiBtZXNoIGlzIG5vdCBjb21wbGV0ZS4gUG9zaXRpb24sIE5v
cm1hbCBvciBVViBhcmUgbWlzc2luZyIpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25L
aW5kLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgdmFyIG5vcm1hbHMgPSB0aGlzLmdldFZlcnRpY2Vz
RGF0YShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJd
Lk5vcm1hbEtpbmQpOworICAgICAgICB2YXIgdXZzID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQp
OworICAgICAgICB2YXIgcG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgdmFyIG5vcm1hbCA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0b3Iz
Il0uWmVybygpOworICAgICAgICB2YXIgdXYgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMiJdLlplcm8oKTsKKyAgICAgICAgdXZPZmZzZXQg
PSB1dk9mZnNldCB8fCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siVmVjdG9yMiJdLlplcm8oKTsKKyAgICAgICAgdXZTY2FsZSA9IHV2U2NhbGUgfHwgbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0b3Iy
Il0oMSwgMSk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBwb3NpdGlvbnMu
bGVuZ3RoOyBpbmRleCArPSAzKSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKHBvc2l0
aW9ucywgaW5kZXgsIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYobm9y
bWFscywgaW5kZXgsIG5vcm1hbCk7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMiJdLkZyb21BcnJheVRvUmVmKHV2cywg
KGluZGV4IC8gMykgKiAyLCB1dik7CisgICAgICAgICAgICAvLyBDb21wdXRlIGhlaWdodAorICAg
ICAgICAgICAgdmFyIHUgPSAoKE1hdGguYWJzKHV2LnggKiB1dlNjYWxlLnggKyB1dk9mZnNldC54
KSAqIGhlaWdodE1hcFdpZHRoKSAlIGhlaWdodE1hcFdpZHRoKSB8IDA7CisgICAgICAgICAgICB2
YXIgdiA9ICgoTWF0aC5hYnModXYueSAqIHV2U2NhbGUueSArIHV2T2Zmc2V0LnkpICogaGVpZ2h0
TWFwSGVpZ2h0KSAlIGhlaWdodE1hcEhlaWdodCkgfCAwOworICAgICAgICAgICAgdmFyIHBvcyA9
ICh1ICsgdiAqIGhlaWdodE1hcFdpZHRoKSAqIDQ7CisgICAgICAgICAgICB2YXIgciA9IGJ1ZmZl
cltwb3NdIC8gMjU1LjA7CisgICAgICAgICAgICB2YXIgZyA9IGJ1ZmZlcltwb3MgKyAxXSAvIDI1
NS4wOworICAgICAgICAgICAgdmFyIGIgPSBidWZmZXJbcG9zICsgMl0gLyAyNTUuMDsKKyAgICAg
ICAgICAgIHZhciBncmFkaWVudCA9IHIgKiAwLjMgKyBnICogMC41OSArIGIgKiAwLjExOworICAg
ICAgICAgICAgbm9ybWFsLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgbm9ybWFsLnNjYWxlSW5Q
bGFjZShtaW5IZWlnaHQgKyAobWF4SGVpZ2h0IC0gbWluSGVpZ2h0KSAqIGdyYWRpZW50KTsKKyAg
ICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24uYWRkKG5vcm1hbCk7CisgICAgICAgICAgICBw
b3NpdGlvbi50b0FycmF5KHBvc2l0aW9ucywgaW5kZXgpOworICAgICAgICB9CisgICAgICAgIF9t
ZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmVydGV4RGF0YSJd
LkNvbXB1dGVOb3JtYWxzKHBvc2l0aW9ucywgdGhpcy5nZXRJbmRpY2VzKCksIG5vcm1hbHMpOwor
ICAgICAgICBpZiAoZm9yY2VVcGRhdGUpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0VmVydGljZXNE
YXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0u
UG9zaXRpb25LaW5kLCBwb3NpdGlvbnMpOworICAgICAgICAgICAgdGhpcy5zZXRWZXJ0aWNlc0Rh
dGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5O
b3JtYWxLaW5kLCBub3JtYWxzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHRoaXMudXBkYXRlVmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kLCBwb3NpdGlvbnMpOworICAgICAg
ICAgICAgdGhpcy51cGRhdGVWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBub3JtYWxzKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1vZGlmeSB0
aGUgbWVzaCB0byBnZXQgYSBmbGF0IHNoYWRpbmcgcmVuZGVyaW5nLgorICAgICAqIFRoaXMgbWVh
bnMgZWFjaCBtZXNoIGZhY2V0IHdpbGwgdGhlbiBoYXZlIGl0cyBvd24gbm9ybWFscy4gVXN1YWxs
eSBuZXcgdmVydGljZXMgYXJlIGFkZGVkIGluIHRoZSBtZXNoIGdlb21ldHJ5IHRvIGdldCB0aGlz
IHJlc3VsdC4KKyAgICAgKiBXYXJuaW5nIDogdGhlIG1lc2ggaXMgcmVhbGx5IG1vZGlmaWVkIGV2
ZW4gaWYgbm90IHNldCBvcmlnaW5hbGx5IGFzIHVwZGF0YWJsZSBhbmQsIHVuZGVyIHRoZSBob29k
LCBhIG5ldyBWZXJ0ZXhCdWZmZXIgaXMgYWxsb2NhdGVkLgorICAgICAqIEByZXR1cm5zIGN1cnJl
bnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLmNvbnZlcnRUb0ZsYXRTaGFkZWRN
ZXNoID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIga2luZHMgPSB0aGlzLmdldFZlcnRpY2Vz
RGF0YUtpbmRzKCk7CisgICAgICAgIHZhciB2YnMgPSB7fTsKKyAgICAgICAgdmFyIGRhdGEgPSB7
fTsKKyAgICAgICAgdmFyIG5ld2RhdGEgPSB7fTsKKyAgICAgICAgdmFyIHVwZGF0YWJsZU5vcm1h
bHMgPSBmYWxzZTsKKyAgICAgICAgdmFyIGtpbmRJbmRleDsKKyAgICAgICAgdmFyIGtpbmQ7Cisg
ICAgICAgIGZvciAoa2luZEluZGV4ID0gMDsga2luZEluZGV4IDwga2luZHMubGVuZ3RoOyBraW5k
SW5kZXgrKykgeworICAgICAgICAgICAga2luZCA9IGtpbmRzW2tpbmRJbmRleF07CisgICAgICAg
ICAgICB2YXIgdmVydGV4QnVmZmVyID0gdGhpcy5nZXRWZXJ0ZXhCdWZmZXIoa2luZCk7CisgICAg
ICAgICAgICBpZiAoa2luZCA9PT0gX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
WyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKSB7CisgICAgICAgICAgICAgICAgdXBkYXRhYmxl
Tm9ybWFscyA9IHZlcnRleEJ1ZmZlci5pc1VwZGF0YWJsZSgpOworICAgICAgICAgICAgICAgIGtp
bmRzLnNwbGljZShraW5kSW5kZXgsIDEpOworICAgICAgICAgICAgICAgIGtpbmRJbmRleC0tOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmJz
W2tpbmRdID0gdmVydGV4QnVmZmVyOworICAgICAgICAgICAgZGF0YVtraW5kXSA9IHZic1traW5k
XS5nZXREYXRhKCk7CisgICAgICAgICAgICBuZXdkYXRhW2tpbmRdID0gW107CisgICAgICAgIH0K
KyAgICAgICAgLy8gU2F2ZSBwcmV2aW91cyBzdWJtZXNoZXMKKyAgICAgICAgdmFyIHByZXZpb3Vz
U3VibWVzaGVzID0gdGhpcy5zdWJNZXNoZXMuc2xpY2UoMCk7CisgICAgICAgIHZhciBpbmRpY2Vz
ID0gdGhpcy5nZXRJbmRpY2VzKCk7CisgICAgICAgIHZhciB0b3RhbEluZGljZXMgPSB0aGlzLmdl
dFRvdGFsSW5kaWNlcygpOworICAgICAgICAvLyBHZW5lcmF0aW5nIHVuaXF1ZSB2ZXJ0aWNlcyBw
ZXIgZmFjZQorICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRl
eCA8IHRvdGFsSW5kaWNlczsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHZlcnRleEluZGV4
ID0gaW5kaWNlc1tpbmRleF07CisgICAgICAgICAgICBmb3IgKGtpbmRJbmRleCA9IDA7IGtpbmRJ
bmRleCA8IGtpbmRzLmxlbmd0aDsga2luZEluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBraW5k
ID0ga2luZHNba2luZEluZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgc3RyaWRlID0gdmJzW2tp
bmRdLmdldFN0cmlkZVNpemUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBvZmZzZXQgPSAw
OyBvZmZzZXQgPCBzdHJpZGU7IG9mZnNldCsrKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld2Rh
dGFba2luZF0ucHVzaChkYXRhW2tpbmRdW3ZlcnRleEluZGV4ICogc3RyaWRlICsgb2Zmc2V0XSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IFVwZGF0aW5nIGZhY2VzICYgbm9ybWFsCisgICAgICAgIHZhciBub3JtYWxzID0gW107CisgICAg
ICAgIHZhciBwb3NpdGlvbnMgPSBuZXdkYXRhW19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgZm9yIChpbmRl
eCA9IDA7IGluZGV4IDwgdG90YWxJbmRpY2VzOyBpbmRleCArPSAzKSB7CisgICAgICAgICAgICBp
bmRpY2VzW2luZGV4XSA9IGluZGV4OworICAgICAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0g
aW5kZXggKyAxOworICAgICAgICAgICAgaW5kaWNlc1tpbmRleCArIDJdID0gaW5kZXggKyAyOwor
ICAgICAgICAgICAgdmFyIHAxID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocG9zaXRpb25zLCBpbmRleCAqIDMpOwor
ICAgICAgICAgICAgdmFyIHAyID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocG9zaXRpb25zLCAoaW5kZXggKyAxKSAq
IDMpOworICAgICAgICAgICAgdmFyIHAzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocG9zaXRpb25zLCAoaW5kZXgg
KyAyKSAqIDMpOworICAgICAgICAgICAgdmFyIHAxcDIgPSBwMS5zdWJ0cmFjdChwMik7CisgICAg
ICAgICAgICB2YXIgcDNwMiA9IHAzLnN1YnRyYWN0KHAyKTsKKyAgICAgICAgICAgIHZhciBub3Jt
YWwgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVj
dG9yMyJdLk5vcm1hbGl6ZShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siVmVjdG9yMyJdLkNyb3NzKHAxcDIsIHAzcDIpKTsKKyAgICAgICAgICAgIC8vIFN0
b3JlIHNhbWUgbm9ybWFscyBmb3IgZXZlcnkgdmVydGV4CisgICAgICAgICAgICBmb3IgKHZhciBs
b2NhbEluZGV4ID0gMDsgbG9jYWxJbmRleCA8IDM7IGxvY2FsSW5kZXgrKykgeworICAgICAgICAg
ICAgICAgIG5vcm1hbHMucHVzaChub3JtYWwueCk7CisgICAgICAgICAgICAgICAgbm9ybWFscy5w
dXNoKG5vcm1hbC55KTsKKyAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2gobm9ybWFsLnopOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuc2V0SW5kaWNlcyhpbmRpY2Vz
KTsKKyAgICAgICAgdGhpcy5zZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBub3JtYWxzLCB1cGRhdGFi
bGVOb3JtYWxzKTsKKyAgICAgICAgLy8gVXBkYXRpbmcgdmVydGV4IGJ1ZmZlcnMKKyAgICAgICAg
Zm9yIChraW5kSW5kZXggPSAwOyBraW5kSW5kZXggPCBraW5kcy5sZW5ndGg7IGtpbmRJbmRleCsr
KSB7CisgICAgICAgICAgICBraW5kID0ga2luZHNba2luZEluZGV4XTsKKyAgICAgICAgICAgIHRo
aXMuc2V0VmVydGljZXNEYXRhKGtpbmQsIG5ld2RhdGFba2luZF0sIHZic1traW5kXS5pc1VwZGF0
YWJsZSgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBVcGRhdGluZyBzdWJtZXNoZXMKKyAgICAg
ICAgdGhpcy5yZWxlYXNlU3ViTWVzaGVzKCk7CisgICAgICAgIGZvciAodmFyIHN1Ym1lc2hJbmRl
eCA9IDA7IHN1Ym1lc2hJbmRleCA8IHByZXZpb3VzU3VibWVzaGVzLmxlbmd0aDsgc3VibWVzaElu
ZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBwcmV2aW91c09uZSA9IHByZXZpb3VzU3VibWVzaGVz
W3N1Ym1lc2hJbmRleF07CisgICAgICAgICAgICBfc3ViTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTJfX1siU3ViTWVzaCJdLkFkZFRvTWVzaChwcmV2aW91c09uZS5tYXRlcmlhbEluZGV4
LCBwcmV2aW91c09uZS5pbmRleFN0YXJ0LCBwcmV2aW91c09uZS5pbmRleENvdW50LCBwcmV2aW91
c09uZS5pbmRleFN0YXJ0LCBwcmV2aW91c09uZS5pbmRleENvdW50LCB0aGlzKTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLnN5bmNocm9uaXplSW5zdGFuY2VzKCk7CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgdGhl
IG1lc2ggaW5kaWNlcyBhbmQgYWRkIG5ldyB2ZXJ0aWNlcyAoZHVwbGljYXRpb24pIGluIG9yZGVy
IHRvIHVuZm9sZCBmYWNldHMgaW50byBidWZmZXJzLgorICAgICAqIEluIG90aGVyIHdvcmRzLCBt
b3JlIHZlcnRpY2VzLCBubyBtb3JlIGluZGljZXMgYW5kIGEgc2luZ2xlIGJpZ2dlciBWQk8uCisg
ICAgICogVGhlIG1lc2ggaXMgcmVhbGx5IG1vZGlmaWVkIGV2ZW4gaWYgbm90IHNldCBvcmlnaW5h
bGx5IGFzIHVwZGF0YWJsZS4gVW5kZXIgdGhlIGhvb2QsIGEgbmV3IFZlcnRleEJ1ZmZlciBpcyBh
bGxvY2F0ZWQuCisgICAgICogQHJldHVybnMgY3VycmVudCBtZXNoCisgICAgICovCisgICAgTWVz
aC5wcm90b3R5cGUuY29udmVydFRvVW5JbmRleGVkTWVzaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIGtpbmRzID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGFLaW5kcygpOworICAgICAgICB2YXIg
dmJzID0ge307CisgICAgICAgIHZhciBkYXRhID0ge307CisgICAgICAgIHZhciBuZXdkYXRhID0g
e307CisgICAgICAgIHZhciBraW5kSW5kZXg7CisgICAgICAgIHZhciBraW5kOworICAgICAgICBm
b3IgKGtpbmRJbmRleCA9IDA7IGtpbmRJbmRleCA8IGtpbmRzLmxlbmd0aDsga2luZEluZGV4Kysp
IHsKKyAgICAgICAgICAgIGtpbmQgPSBraW5kc1traW5kSW5kZXhdOworICAgICAgICAgICAgdmFy
IHZlcnRleEJ1ZmZlciA9IHRoaXMuZ2V0VmVydGV4QnVmZmVyKGtpbmQpOworICAgICAgICAgICAg
dmJzW2tpbmRdID0gdmVydGV4QnVmZmVyOworICAgICAgICAgICAgZGF0YVtraW5kXSA9IHZic1tr
aW5kXS5nZXREYXRhKCk7CisgICAgICAgICAgICBuZXdkYXRhW2tpbmRdID0gW107CisgICAgICAg
IH0KKyAgICAgICAgLy8gU2F2ZSBwcmV2aW91cyBzdWJtZXNoZXMKKyAgICAgICAgdmFyIHByZXZp
b3VzU3VibWVzaGVzID0gdGhpcy5zdWJNZXNoZXMuc2xpY2UoMCk7CisgICAgICAgIHZhciBpbmRp
Y2VzID0gdGhpcy5nZXRJbmRpY2VzKCk7CisgICAgICAgIHZhciB0b3RhbEluZGljZXMgPSB0aGlz
LmdldFRvdGFsSW5kaWNlcygpOworICAgICAgICAvLyBHZW5lcmF0aW5nIHVuaXF1ZSB2ZXJ0aWNl
cyBwZXIgZmFjZQorICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBp
bmRleCA8IHRvdGFsSW5kaWNlczsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHZlcnRleElu
ZGV4ID0gaW5kaWNlc1tpbmRleF07CisgICAgICAgICAgICBmb3IgKGtpbmRJbmRleCA9IDA7IGtp
bmRJbmRleCA8IGtpbmRzLmxlbmd0aDsga2luZEluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBr
aW5kID0ga2luZHNba2luZEluZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgc3RyaWRlID0gdmJz
W2tpbmRdLmdldFN0cmlkZVNpemUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBvZmZzZXQg
PSAwOyBvZmZzZXQgPCBzdHJpZGU7IG9mZnNldCsrKSB7CisgICAgICAgICAgICAgICAgICAgIG5l
d2RhdGFba2luZF0ucHVzaChkYXRhW2tpbmRdW3ZlcnRleEluZGV4ICogc3RyaWRlICsgb2Zmc2V0
XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IC8vIFVwZGF0aW5nIGluZGljZXMKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdG90
YWxJbmRpY2VzOyBpbmRleCArPSAzKSB7CisgICAgICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGlu
ZGV4OworICAgICAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxOworICAgICAg
ICAgICAgaW5kaWNlc1tpbmRleCArIDJdID0gaW5kZXggKyAyOworICAgICAgICB9CisgICAgICAg
IHRoaXMuc2V0SW5kaWNlcyhpbmRpY2VzKTsKKyAgICAgICAgLy8gVXBkYXRpbmcgdmVydGV4IGJ1
ZmZlcnMKKyAgICAgICAgZm9yIChraW5kSW5kZXggPSAwOyBraW5kSW5kZXggPCBraW5kcy5sZW5n
dGg7IGtpbmRJbmRleCsrKSB7CisgICAgICAgICAgICBraW5kID0ga2luZHNba2luZEluZGV4XTsK
KyAgICAgICAgICAgIHRoaXMuc2V0VmVydGljZXNEYXRhKGtpbmQsIG5ld2RhdGFba2luZF0sIHZi
c1traW5kXS5pc1VwZGF0YWJsZSgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBVcGRhdGluZyBz
dWJtZXNoZXMKKyAgICAgICAgdGhpcy5yZWxlYXNlU3ViTWVzaGVzKCk7CisgICAgICAgIGZvciAo
dmFyIHN1Ym1lc2hJbmRleCA9IDA7IHN1Ym1lc2hJbmRleCA8IHByZXZpb3VzU3VibWVzaGVzLmxl
bmd0aDsgc3VibWVzaEluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBwcmV2aW91c09uZSA9IHBy
ZXZpb3VzU3VibWVzaGVzW3N1Ym1lc2hJbmRleF07CisgICAgICAgICAgICBfc3ViTWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siU3ViTWVzaCJdLkFkZFRvTWVzaChwcmV2aW91c09u
ZS5tYXRlcmlhbEluZGV4LCBwcmV2aW91c09uZS5pbmRleFN0YXJ0LCBwcmV2aW91c09uZS5pbmRl
eENvdW50LCBwcmV2aW91c09uZS5pbmRleFN0YXJ0LCBwcmV2aW91c09uZS5pbmRleENvdW50LCB0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl91bkluZGV4ZWQgPSB0cnVlOworICAgICAg
ICB0aGlzLnN5bmNocm9uaXplSW5zdGFuY2VzKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogSW52ZXJzZXMgZmFjZXQgb3JpZW50YXRpb25zLgorICAgICAq
IFdhcm5pbmcgOiB0aGUgbWVzaCBpcyByZWFsbHkgbW9kaWZpZWQgZXZlbiBpZiBub3Qgc2V0IG9y
aWdpbmFsbHkgYXMgdXBkYXRhYmxlLiBBIG5ldyBWZXJ0ZXhCdWZmZXIgaXMgY3JlYXRlZCB1bmRl
ciB0aGUgaG9vZCBlYWNoIGNhbGwuCisgICAgICogQHBhcmFtIGZsaXBOb3JtYWxzIHdpbGwgYWxz
byBpbnZlcnRzIHRoZSBub3JtYWxzCisgICAgICogQHJldHVybnMgY3VycmVudCBtZXNoCisgICAg
ICovCisgICAgTWVzaC5wcm90b3R5cGUuZmxpcEZhY2VzID0gZnVuY3Rpb24gKGZsaXBOb3JtYWxz
KSB7CisgICAgICAgIGlmIChmbGlwTm9ybWFscyA9PT0gdm9pZCAwKSB7IGZsaXBOb3JtYWxzID0g
ZmFsc2U7IH0KKyAgICAgICAgdmFyIHZlcnRleF9kYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJWZXJ0ZXhEYXRhIl0uRXh0cmFjdEZyb21NZXNoKHRo
aXMpOworICAgICAgICB2YXIgaTsKKyAgICAgICAgaWYgKGZsaXBOb3JtYWxzICYmIHRoaXMuaXNW
ZXJ0aWNlc0RhdGFQcmVzZW50KF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
VmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCkgJiYgdmVydGV4X2RhdGEubm9ybWFscykgeworICAg
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IHZlcnRleF9kYXRhLm5vcm1hbHMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5ub3JtYWxzW2ldICo9IC0xOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh2ZXJ0ZXhfZGF0YS5pbmRpY2VzKSB7Cisg
ICAgICAgICAgICB2YXIgdGVtcDsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB2ZXJ0ZXhf
ZGF0YS5pbmRpY2VzLmxlbmd0aDsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgLy8gcmVhc3Np
Z24gaW5kaWNlcworICAgICAgICAgICAgICAgIHRlbXAgPSB2ZXJ0ZXhfZGF0YS5pbmRpY2VzW2kg
KyAxXTsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5pbmRpY2VzW2kgKyAxXSA9IHZlcnRl
eF9kYXRhLmluZGljZXNbaSArIDJdOworICAgICAgICAgICAgICAgIHZlcnRleF9kYXRhLmluZGlj
ZXNbaSArIDJdID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2ZXJ0
ZXhfZGF0YS5hcHBseVRvTWVzaCh0aGlzLCB0aGlzLmlzVmVydGV4QnVmZmVyVXBkYXRhYmxlKF9i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRp
b25LaW5kKSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICog
SW5jcmVhc2UgdGhlIG51bWJlciBvZiBmYWNldHMgYW5kIGhlbmNlIHZlcnRpY2VzIGluIGEgbWVz
aAorICAgICAqIFZlcnRleCBub3JtYWxzIGFyZSBpbnRlcnBvbGF0ZWQgZnJvbSBleGlzdGluZyB2
ZXJ0ZXggbm9ybWFscworICAgICAqIFdhcm5pbmcgOiB0aGUgbWVzaCBpcyByZWFsbHkgbW9kaWZp
ZWQgZXZlbiBpZiBub3Qgc2V0IG9yaWdpbmFsbHkgYXMgdXBkYXRhYmxlLiBBIG5ldyBWZXJ0ZXhC
dWZmZXIgaXMgY3JlYXRlZCB1bmRlciB0aGUgaG9vZCBlYWNoIGNhbGwuCisgICAgICogQHBhcmFt
IG51bWJlclBlckVkZ2UgdGhlIG51bWJlciBvZiBuZXcgdmVydGljZXMgdG8gYWRkIHRvIGVhY2gg
ZWRnZSBvZiBhIGZhY2V0LCBvcHRpb25hbCBkZWZhdWx0IDEKKyAgICAgKi8KKyAgICBNZXNoLnBy
b3RvdHlwZS5pbmNyZWFzZVZlcnRpY2VzID0gZnVuY3Rpb24gKG51bWJlclBlckVkZ2UpIHsKKyAg
ICAgICAgdmFyIHZlcnRleF9kYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOV9fWyJWZXJ0ZXhEYXRhIl0uRXh0cmFjdEZyb21NZXNoKHRoaXMpOworICAgICAg
ICB2YXIgdXZzID0gdmVydGV4X2RhdGEudXZzOworICAgICAgICB2YXIgY3VycmVudEluZGljZXMg
PSB2ZXJ0ZXhfZGF0YS5pbmRpY2VzOworICAgICAgICB2YXIgcG9zaXRpb25zID0gdmVydGV4X2Rh
dGEucG9zaXRpb25zOworICAgICAgICB2YXIgbm9ybWFscyA9IHZlcnRleF9kYXRhLm5vcm1hbHM7
CisgICAgICAgIGlmIChjdXJyZW50SW5kaWNlcyA9PT0gbnVsbCB8fCBwb3NpdGlvbnMgPT09IG51
bGwgfHwgbm9ybWFscyA9PT0gbnVsbCB8fCB1dnMgPT09IG51bGwpIHsKKyAgICAgICAgICAgIF9N
aXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siTG9nZ2VyIl0uV2Fybigi
VmVydGV4RGF0YSBjb250YWlucyBudWxsIGVudHJpZXMiKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHZhciBzZWdtZW50cyA9IG51bWJlclBlckVkZ2UgKyAxOyAvL3Nl
Z21lbnRzIHBlciBjdXJyZW50IGZhY2V0IGVkZ2UsIGJlY29tZSBzaWRlcyBvZiBuZXcgZmFjZXRz
CisgICAgICAgICAgICB2YXIgdGVtcEluZGljZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMgKyAxOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICB0ZW1wSW5kaWNlc1tpXSA9IG5ldyBBcnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdmFyIGE7IC8vdmVydGV4IGluZGV4IG9mIG9uZSBlbmQgb2YgYSBzaWRlCisgICAgICAgICAg
ICB2YXIgYjsgLy92ZXJ0ZXggaW5kZXggb2Ygb3RoZXIgZW5kIG9mIHRoZSBzaWRlCisgICAgICAg
ICAgICB2YXIgZGVsdGFQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAgICAgICAgICAgdmFy
IGRlbHRhTm9ybWFsID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNV9fWyJWZWN0b3IzIl0oMCwgMCwgMCk7CisgICAgICAgICAgICB2YXIgZGVsdGFVViA9
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVj
dG9yMiJdKDAsIDApOworICAgICAgICAgICAgdmFyIGluZGljZXMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgICAgIHZhciB2ZXJ0ZXhJbmRleCA9IG5ldyBBcnJheSgpOworICAgICAgICAgICAgdmFy
IHNpZGUgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAgIHZhciBsZW47CisgICAgICAgICAgICB2
YXIgcG9zaXRpb25QdHIgPSBwb3NpdGlvbnMubGVuZ3RoOworICAgICAgICAgICAgdmFyIHV2UHRy
ID0gdXZzLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3VycmVudElu
ZGljZXMubGVuZ3RoOyBpICs9IDMpIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhJbmRleFswXSA9
IGN1cnJlbnRJbmRpY2VzW2ldOworICAgICAgICAgICAgICAgIHZlcnRleEluZGV4WzFdID0gY3Vy
cmVudEluZGljZXNbaSArIDFdOworICAgICAgICAgICAgICAgIHZlcnRleEluZGV4WzJdID0gY3Vy
cmVudEluZGljZXNbaSArIDJdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
MzsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGEgPSB2ZXJ0ZXhJbmRleFtqXTsKKyAgICAg
ICAgICAgICAgICAgICAgYiA9IHZlcnRleEluZGV4WyhqICsgMSkgJSAzXTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNpZGVbYV0gPT09IHVuZGVmaW5lZCAmJiBzaWRlW2JdID09PSB1bmRlZmlu
ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVbYV0gPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNpZGVbYl0gPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzaWRlW2FdID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaWRlW2FdID0gbmV3IEFycmF5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lkZVtiXSA9PT0gdW5kZWZpbmVkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVtiXSA9IG5ldyBBcnJheSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzaWRlW2FdW2JdID09PSB1bmRlZmluZWQgJiYgc2lkZVtiXVthXSA9PT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlW2FdW2JdID0gW107CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWx0YVBvc2l0aW9uLnggPSAocG9zaXRpb25zWzMgKiBiXSAt
IHBvc2l0aW9uc1szICogYV0pIC8gc2VnbWVudHM7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWx0YVBvc2l0aW9uLnkgPSAocG9zaXRpb25zWzMgKiBiICsgMV0gLSBwb3NpdGlvbnNbMyAqIGEg
KyAxXSkgLyBzZWdtZW50czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhUG9zaXRpb24u
eiA9IChwb3NpdGlvbnNbMyAqIGIgKyAyXSAtIHBvc2l0aW9uc1szICogYSArIDJdKSAvIHNlZ21l
bnRzOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFOb3JtYWwueCA9IChub3JtYWxzWzMg
KiBiXSAtIG5vcm1hbHNbMyAqIGFdKSAvIHNlZ21lbnRzOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsdGFOb3JtYWwueSA9IChub3JtYWxzWzMgKiBiICsgMV0gLSBub3JtYWxzWzMgKiBhICsg
MV0pIC8gc2VnbWVudHM7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YU5vcm1hbC56ID0g
KG5vcm1hbHNbMyAqIGIgKyAyXSAtIG5vcm1hbHNbMyAqIGEgKyAyXSkgLyBzZWdtZW50czsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbHRhVVYueCA9ICh1dnNbMiAqIGJdIC0gdXZzWzIgKiBh
XSkgLyBzZWdtZW50czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhVVYueSA9ICh1dnNb
MiAqIGIgKyAxXSAtIHV2c1syICogYSArIDFdKSAvIHNlZ21lbnRzOworICAgICAgICAgICAgICAg
ICAgICAgICAgc2lkZVthXVtiXS5wdXNoKGEpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgayA9IDE7IGsgPCBzZWdtZW50czsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2lkZVthXVtiXS5wdXNoKHBvc2l0aW9ucy5sZW5ndGggLyAzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbcG9zaXRpb25QdHJdID0gcG9zaXRpb25zWzMgKiBh
XSArIGsgKiBkZWx0YVBvc2l0aW9uLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9y
bWFsc1twb3NpdGlvblB0cisrXSA9IG5vcm1hbHNbMyAqIGFdICsgayAqIGRlbHRhTm9ybWFsLng7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW3Bvc2l0aW9uUHRyXSA9IHBv
c2l0aW9uc1szICogYSArIDFdICsgayAqIGRlbHRhUG9zaXRpb24ueTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub3JtYWxzW3Bvc2l0aW9uUHRyKytdID0gbm9ybWFsc1szICogYSArIDFd
ICsgayAqIGRlbHRhTm9ybWFsLnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRp
b25zW3Bvc2l0aW9uUHRyXSA9IHBvc2l0aW9uc1szICogYSArIDJdICsgayAqIGRlbHRhUG9zaXRp
b24uejsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzW3Bvc2l0aW9uUHRyKytd
ID0gbm9ybWFsc1szICogYSArIDJdICsgayAqIGRlbHRhTm9ybWFsLno7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXZzW3V2UHRyKytdID0gdXZzWzIgKiBhXSArIGsgKiBkZWx0YVVWLng7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZzW3V2UHRyKytdID0gdXZzWzIgKiBhICsg
MV0gKyBrICogZGVsdGFVVi55OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgc2lkZVthXVtiXS5wdXNoKGIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc2lkZVtiXVthXSA9IG5ldyBBcnJheSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVu
ID0gc2lkZVthXVtiXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2lkZVtiXVthXVtpZHhdID0gc2lkZVthXVtiXVtsZW4gLSAxIC0gaWR4XTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvL0NhbGN1bGF0ZSBwb3NpdGlvbnMsIG5vcm1hbHMgYW5kIHV2cyBv
ZiBuZXcgaW50ZXJuYWwgdmVydGljZXMKKyAgICAgICAgICAgICAgICB0ZW1wSW5kaWNlc1swXVsw
XSA9IGN1cnJlbnRJbmRpY2VzW2ldOworICAgICAgICAgICAgICAgIHRlbXBJbmRpY2VzWzFdWzBd
ID0gc2lkZVtjdXJyZW50SW5kaWNlc1tpXV1bY3VycmVudEluZGljZXNbaSArIDFdXVsxXTsKKyAg
ICAgICAgICAgICAgICB0ZW1wSW5kaWNlc1sxXVsxXSA9IHNpZGVbY3VycmVudEluZGljZXNbaV1d
W2N1cnJlbnRJbmRpY2VzW2kgKyAyXV1bMV07CisgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9
IDI7IGsgPCBzZWdtZW50czsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIHRlbXBJbmRpY2Vz
W2tdWzBdID0gc2lkZVtjdXJyZW50SW5kaWNlc1tpXV1bY3VycmVudEluZGljZXNbaSArIDFdXVtr
XTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcEluZGljZXNba11ba10gPSBzaWRlW2N1cnJlbnRJ
bmRpY2VzW2ldXVtjdXJyZW50SW5kaWNlc1tpICsgMl1dW2tdOworICAgICAgICAgICAgICAgICAg
ICBkZWx0YVBvc2l0aW9uLnggPSAocG9zaXRpb25zWzMgKiB0ZW1wSW5kaWNlc1trXVtrXV0gLSBw
b3NpdGlvbnNbMyAqIHRlbXBJbmRpY2VzW2tdWzBdXSkgLyBrOworICAgICAgICAgICAgICAgICAg
ICBkZWx0YVBvc2l0aW9uLnkgPSAocG9zaXRpb25zWzMgKiB0ZW1wSW5kaWNlc1trXVtrXSArIDFd
IC0gcG9zaXRpb25zWzMgKiB0ZW1wSW5kaWNlc1trXVswXSArIDFdKSAvIGs7CisgICAgICAgICAg
ICAgICAgICAgIGRlbHRhUG9zaXRpb24ueiA9IChwb3NpdGlvbnNbMyAqIHRlbXBJbmRpY2VzW2td
W2tdICsgMl0gLSBwb3NpdGlvbnNbMyAqIHRlbXBJbmRpY2VzW2tdWzBdICsgMl0pIC8gazsKKyAg
ICAgICAgICAgICAgICAgICAgZGVsdGFOb3JtYWwueCA9IChub3JtYWxzWzMgKiB0ZW1wSW5kaWNl
c1trXVtrXV0gLSBub3JtYWxzWzMgKiB0ZW1wSW5kaWNlc1trXVswXV0pIC8gazsKKyAgICAgICAg
ICAgICAgICAgICAgZGVsdGFOb3JtYWwueSA9IChub3JtYWxzWzMgKiB0ZW1wSW5kaWNlc1trXVtr
XSArIDFdIC0gbm9ybWFsc1szICogdGVtcEluZGljZXNba11bMF0gKyAxXSkgLyBrOworICAgICAg
ICAgICAgICAgICAgICBkZWx0YU5vcm1hbC56ID0gKG5vcm1hbHNbMyAqIHRlbXBJbmRpY2VzW2td
W2tdICsgMl0gLSBub3JtYWxzWzMgKiB0ZW1wSW5kaWNlc1trXVswXSArIDJdKSAvIGs7CisgICAg
ICAgICAgICAgICAgICAgIGRlbHRhVVYueCA9ICh1dnNbMiAqIHRlbXBJbmRpY2VzW2tdW2tdXSAt
IHV2c1syICogdGVtcEluZGljZXNba11bMF1dKSAvIGs7CisgICAgICAgICAgICAgICAgICAgIGRl
bHRhVVYueSA9ICh1dnNbMiAqIHRlbXBJbmRpY2VzW2tdW2tdICsgMV0gLSB1dnNbMiAqIHRlbXBJ
bmRpY2VzW2tdWzBdICsgMV0pIC8gazsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDE7IGogPCBrOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBJbmRpY2VzW2td
W2pdID0gcG9zaXRpb25zLmxlbmd0aCAvIDM7CisgICAgICAgICAgICAgICAgICAgICAgICBwb3Np
dGlvbnNbcG9zaXRpb25QdHJdID0gcG9zaXRpb25zWzMgKiB0ZW1wSW5kaWNlc1trXVswXV0gKyBq
ICogZGVsdGFQb3NpdGlvbi54OworICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1twb3Np
dGlvblB0cisrXSA9IG5vcm1hbHNbMyAqIHRlbXBJbmRpY2VzW2tdWzBdXSArIGogKiBkZWx0YU5v
cm1hbC54OworICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW3Bvc2l0aW9uUHRyXSA9
IHBvc2l0aW9uc1szICogdGVtcEluZGljZXNba11bMF0gKyAxXSArIGogKiBkZWx0YVBvc2l0aW9u
Lnk7CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzW3Bvc2l0aW9uUHRyKytdID0gbm9y
bWFsc1szICogdGVtcEluZGljZXNba11bMF0gKyAxXSArIGogKiBkZWx0YU5vcm1hbC55OworICAg
ICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW3Bvc2l0aW9uUHRyXSA9IHBvc2l0aW9uc1sz
ICogdGVtcEluZGljZXNba11bMF0gKyAyXSArIGogKiBkZWx0YVBvc2l0aW9uLno7CisgICAgICAg
ICAgICAgICAgICAgICAgICBub3JtYWxzW3Bvc2l0aW9uUHRyKytdID0gbm9ybWFsc1szICogdGVt
cEluZGljZXNba11bMF0gKyAyXSArIGogKiBkZWx0YU5vcm1hbC56OworICAgICAgICAgICAgICAg
ICAgICAgICAgdXZzW3V2UHRyKytdID0gdXZzWzIgKiB0ZW1wSW5kaWNlc1trXVswXV0gKyBqICog
ZGVsdGFVVi54OworICAgICAgICAgICAgICAgICAgICAgICAgdXZzW3V2UHRyKytdID0gdXZzWzIg
KiB0ZW1wSW5kaWNlc1trXVswXSArIDFdICsgaiAqIGRlbHRhVVYueTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZW1wSW5kaWNlc1tz
ZWdtZW50c10gPSBzaWRlW2N1cnJlbnRJbmRpY2VzW2kgKyAxXV1bY3VycmVudEluZGljZXNbaSAr
IDJdXTsKKyAgICAgICAgICAgICAgICAvLyByZWZvcm0gaW5kaWNlcworICAgICAgICAgICAgICAg
IGluZGljZXMucHVzaCh0ZW1wSW5kaWNlc1swXVswXSwgdGVtcEluZGljZXNbMV1bMF0sIHRlbXBJ
bmRpY2VzWzFdWzFdKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMTsgayA8IHNlZ21l
bnRzOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrOyBq
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCh0ZW1wSW5kaWNlc1tr
XVtqXSwgdGVtcEluZGljZXNbayArIDFdW2pdLCB0ZW1wSW5kaWNlc1trICsgMV1baiArIDFdKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCh0ZW1wSW5kaWNlc1trXVtqXSwg
dGVtcEluZGljZXNbayArIDFdW2ogKyAxXSwgdGVtcEluZGljZXNba11baiArIDFdKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2godGVtcElu
ZGljZXNba11bal0sIHRlbXBJbmRpY2VzW2sgKyAxXVtqXSwgdGVtcEluZGljZXNbayArIDFdW2og
KyAxXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdmVy
dGV4X2RhdGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5hcHBs
eVRvTWVzaCh0aGlzLCB0aGlzLmlzVmVydGV4QnVmZmVyVXBkYXRhYmxlKF9idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEZvcmNlIGFkamFjZW50IGZhY2V0cyB0
byBzaGFyZSB2ZXJ0aWNlcyBhbmQgcmVtb3ZlIGFueSBmYWNldHMgdGhhdCBoYXZlIGFsbCB2ZXJ0
aWNlcyBpbiBhIGxpbmUKKyAgICAgKiBUaGlzIHdpbGwgdW5kbyBhbnkgYXBwbGljYXRpb24gb2Yg
Y292ZXJ0VG9GbGF0U2hhZGVkTWVzaAorICAgICAqIFdhcm5pbmcgOiB0aGUgbWVzaCBpcyByZWFs
bHkgbW9kaWZpZWQgZXZlbiBpZiBub3Qgc2V0IG9yaWdpbmFsbHkgYXMgdXBkYXRhYmxlLiBBIG5l
dyBWZXJ0ZXhCdWZmZXIgaXMgY3JlYXRlZCB1bmRlciB0aGUgaG9vZCBlYWNoIGNhbGwuCisgICAg
ICovCisgICAgTWVzaC5wcm90b3R5cGUuZm9yY2VTaGFyZWRWZXJ0aWNlcyA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdmFyIHZlcnRleF9kYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJWZXJ0ZXhEYXRhIl0uRXh0cmFjdEZyb21NZXNoKHRoaXMpOwor
ICAgICAgICB2YXIgY3VycmVudFVWcyA9IHZlcnRleF9kYXRhLnV2czsKKyAgICAgICAgdmFyIGN1
cnJlbnRJbmRpY2VzID0gdmVydGV4X2RhdGEuaW5kaWNlczsKKyAgICAgICAgdmFyIGN1cnJlbnRQ
b3NpdGlvbnMgPSB2ZXJ0ZXhfZGF0YS5wb3NpdGlvbnM7CisgICAgICAgIHZhciBjdXJyZW50Q29s
b3JzID0gdmVydGV4X2RhdGEuY29sb3JzOworICAgICAgICBpZiAoY3VycmVudEluZGljZXMgPT09
IHZvaWQgMCB8fCBjdXJyZW50UG9zaXRpb25zID09PSB2b2lkIDAgfHwgY3VycmVudEluZGljZXMg
PT09IG51bGwgfHwgY3VycmVudFBvc2l0aW9ucyA9PT0gbnVsbCkgeworICAgICAgICAgICAgX01p
c2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJMb2dnZXIiXS5XYXJuKCJW
ZXJ0ZXhEYXRhIGNvbnRhaW5zIGVtcHR5IGVudHJpZXMiKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAg
ICAgIHZhciBpbmRpY2VzID0gbmV3IEFycmF5KCk7CisgICAgICAgICAgICB2YXIgdXZzID0gbmV3
IEFycmF5KCk7CisgICAgICAgICAgICB2YXIgY29sb3JzID0gbmV3IEFycmF5KCk7CisgICAgICAg
ICAgICB2YXIgcHN0cmluZyA9IG5ldyBBcnJheSgpOyAvL2xpc3RzIGZhY2V0IHZlcnRleCBwb3Np
dGlvbnMgKGEsYixjKSBhcyBzdHJpbmcgImF8YnxjIgorICAgICAgICAgICAgdmFyIGluZGV4UHRy
ID0gMDsgLy8gcG9pbnRlciB0byBuZXh0IGF2YWlsYWJsZSBpbmRleCB2YWx1ZQorICAgICAgICAg
ICAgdmFyIHVuaXF1ZVBvc2l0aW9ucyA9IG5ldyBBcnJheSgpOyAvLyB1bmlxdWUgdmVydGV4IHBv
c2l0aW9ucworICAgICAgICAgICAgdmFyIHB0cjsgLy8gcG9pbnRlciB0byBlbGVtZW50IGluIHVu
aXF1ZVBvc2l0aW9ucworICAgICAgICAgICAgdmFyIGZhY2V0OworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBjdXJyZW50SW5kaWNlcy5sZW5ndGg7IGkgKz0gMykgeworICAgICAgICAg
ICAgICAgIGZhY2V0ID0gW2N1cnJlbnRJbmRpY2VzW2ldLCBjdXJyZW50SW5kaWNlc1tpICsgMV0s
IGN1cnJlbnRJbmRpY2VzW2kgKyAyXV07IC8vZmFjZXQgdmVydGV4IGluZGljZXMKKyAgICAgICAg
ICAgICAgICBwc3RyaW5nID0gbmV3IEFycmF5KCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
aiA9IDA7IGogPCAzOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcHN0cmluZ1tqXSA9ICIi
OworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDM7IGsrKykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy9zbWFsbCB2YWx1ZXMgbWFrZSAwCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoTWF0aC5hYnMoY3VycmVudFBvc2l0aW9uc1szICogZmFjZXRbal0gKyBr
XSkgPCAwLjAwMDAwMDAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBv
c2l0aW9uc1szICogZmFjZXRbal0gKyBrXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBwc3RyaW5nW2pdICs9IGN1cnJlbnRQb3NpdGlvbnNb
MyAqIGZhY2V0W2pdICsga10gKyAifCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgcHN0cmluZ1tqXSA9IHBzdHJpbmdbal0uc2xpY2UoMCwgLTEpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvL2NoZWNrIGZhY2V0IHZlcnRpY2VzIHRvIHNl
ZSB0aGF0IG5vbmUgYXJlIHJlcGVhdGVkCisgICAgICAgICAgICAgICAgLy8gZG8gbm90IHByb2Nl
c3MgYW55IGZhY2V0IHRoYXQgaGFzIGEgcmVwZWF0ZWQgdmVydGV4LCBpZSBpcyBhIGxpbmUKKyAg
ICAgICAgICAgICAgICBpZiAoIShwc3RyaW5nWzBdID09IHBzdHJpbmdbMV0gfHwgcHN0cmluZ1sw
XSA9PSBwc3RyaW5nWzJdIHx8IHBzdHJpbmdbMV0gPT0gcHN0cmluZ1syXSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy9mb3IgZWFjaCBmYWNldCBwb3NpdGlvbiBjaGVjayBpZiBhbHJlYWR5IGxp
c3RlZCBpbiB1bmlxdWVQb3NpdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IGxp
c3RlZCBhZGQgdG8gdW5pcXVlUG9zaXRpb25zIGFuZCBzZXQgaW5kZXggcG9pbnRlcgorICAgICAg
ICAgICAgICAgICAgICAvLyBpZiBsaXN0ZWQgdXNlIGl0cyBpbmRleCBpbiB1bmlxdWVQb3NpdGlv
bnMgYW5kIG5ldyBpbmRleCBwb2ludGVyCisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGog
PSAwOyBqIDwgMzsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSB1bmlxdWVQ
b3NpdGlvbnMuaW5kZXhPZihwc3RyaW5nW2pdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwdHIgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlUG9zaXRpb25z
LnB1c2gocHN0cmluZ1tqXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gaW5k
ZXhQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL25vdCBsaXN0ZWQgc28gYWRk
IGluZGl2aWR1YWwgeCwgeSwgeiBjb29yZGluYXRlcyB0byBwb3NpdGlvbnMKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDM7IGsrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChjdXJyZW50UG9zaXRpb25zWzMg
KiBmYWNldFtqXSArIGtdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2xvcnMgIT09IG51bGwgJiYgY3VycmVu
dENvbG9ycyAhPT0gdm9pZCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2xvcnMucHVzaChjdXJyZW50Q29sb3JzWzQgKiBmYWNldFtqXSArIGtdKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFVWcyAhPT0gbnVs
bCAmJiBjdXJyZW50VVZzICE9PSB2b2lkIDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCAyOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHV2cy5wdXNoKGN1cnJlbnRVVnNbMiAqIGZhY2V0W2pdICsga10pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYWRkIG5ldyBpbmRleCBwb2ludGVyIHRvIGluZGljZXMgYXJyYXkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGljZXMucHVzaChwdHIpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG5vcm1hbHMg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAgIF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siVmVydGV4RGF0YSJdLkNvbXB1dGVOb3JtYWxzKHBvc2l0aW9ucywg
aW5kaWNlcywgbm9ybWFscyk7CisgICAgICAgICAgICAvL2NyZWF0ZSBuZXcgdmVydGV4IGRhdGEg
b2JqZWN0IGFuZCB1cGRhdGUKKyAgICAgICAgICAgIHZlcnRleF9kYXRhLnBvc2l0aW9ucyA9IHBv
c2l0aW9uczsKKyAgICAgICAgICAgIHZlcnRleF9kYXRhLmluZGljZXMgPSBpbmRpY2VzOworICAg
ICAgICAgICAgdmVydGV4X2RhdGEubm9ybWFscyA9IG5vcm1hbHM7CisgICAgICAgICAgICBpZiAo
Y3VycmVudFVWcyAhPT0gbnVsbCAmJiBjdXJyZW50VVZzICE9PSB2b2lkIDApIHsKKyAgICAgICAg
ICAgICAgICB2ZXJ0ZXhfZGF0YS51dnMgPSB1dnM7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoY3VycmVudENvbG9ycyAhPT0gbnVsbCAmJiBjdXJyZW50Q29sb3JzICE9PSB2b2lkIDAp
IHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5jb2xvcnMgPSBjb2xvcnM7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5hcHBseVRvTWVzaCh0aGlzLCB0aGlzLmlz
VmVydGV4QnVmZmVyVXBkYXRhYmxlKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
X1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8vIEluc3RhbmNlcworICAgIC8qKiBAaGlkZGVuICovCisgICAgTWVzaC5faW5zdGFuY2VkTWVz
aEZhY3RvcnkgPSBmdW5jdGlvbiAobmFtZSwgbWVzaCkgeworICAgICAgICB0aHJvdyBfTWlzY19k
ZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRvb2xzIl0uV2Fybklt
cG9ydCgiSW5zdGFuY2VkTWVzaCIpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBN
ZXNoLl9QaHlzaWNzSW1wb3N0b3JQYXJzZXIgPSBmdW5jdGlvbiAoc2NlbmUsIHBoeXNpY09iamVj
dCwganNvbk9iamVjdCkgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiUGh5c2ljc0ltcG9z
dG9yIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEluc3RhbmNlZE1l
c2ggb2JqZWN0IGZyb20gdGhlIG1lc2ggbW9kZWwuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfaW5zdGFuY2VzCisgICAgICogQHBhcmFtIG5h
bWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3IGluc3RhbmNlCisgICAgICogQHJldHVybnMg
YSBuZXcgSW5zdGFuY2VkTWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLmNyZWF0ZUlu
c3RhbmNlID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIE1lc2guX2luc3RhbmNl
ZE1lc2hGYWN0b3J5KG5hbWUsIHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogU3luY2hy
b25pc2VzIGFsbCB0aGUgbWVzaCBpbnN0YW5jZSBzdWJtZXNoZXMgdG8gdGhlIGN1cnJlbnQgbWVz
aCBzdWJtZXNoZXMsIGlmIGFueS4KKyAgICAgKiBBZnRlciB0aGlzIGNhbGwsIGFsbCB0aGUgbWVz
aCBpbnN0YW5jZXMgaGF2ZSB0aGUgc2FtZSBzdWJtZXNoZXMgdGhhbiB0aGUgY3VycmVudCBtZXNo
LgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBNZXNoLnBy
b3RvdHlwZS5zeW5jaHJvbml6ZUluc3RhbmNlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9y
ICh2YXIgaW5zdGFuY2VJbmRleCA9IDA7IGluc3RhbmNlSW5kZXggPCB0aGlzLmluc3RhbmNlcy5s
ZW5ndGg7IGluc3RhbmNlSW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gdGhp
cy5pbnN0YW5jZXNbaW5zdGFuY2VJbmRleF07CisgICAgICAgICAgICBpbnN0YW5jZS5fc3luY1N1
Yk1lc2hlcygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
LyoqCisgICAgICogT3B0aW1pemF0aW9uIG9mIHRoZSBtZXNoJ3MgaW5kaWNlcywgaW4gY2FzZSBh
IG1lc2ggaGFzIGR1cGxpY2F0ZWQgdmVydGljZXMuCisgICAgICogVGhlIGZ1bmN0aW9uIHdpbGwg
b25seSByZW9yZGVyIHRoZSBpbmRpY2VzIGFuZCB3aWxsIG5vdCByZW1vdmUgdW51c2VkIHZlcnRp
Y2VzIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggc3VibWVzaGVzLgorICAgICAqIFRoaXMgc2hvdWxk
IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgc2ltcGxpZmljYXRpb24gdG8gYXZvaWQgZGlzYXBw
ZWFyaW5nIHRyaWFuZ2xlcy4KKyAgICAgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIGFuIG9wdGlv
bmFsIHN1Y2Nlc3MgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBvcHRpbWl6YXRpb24g
ZmluaXNoZWQuCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAg
IE1lc2gucHJvdG90eXBlLm9wdGltaXplSW5kaWNlcyA9IGZ1bmN0aW9uIChzdWNjZXNzQ2FsbGJh
Y2spIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIGluZGljZXMgPSB0
aGlzLmdldEluZGljZXMoKTsKKyAgICAgICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMuZ2V0VmVydGlj
ZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVy
Il0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCFwb3NpdGlvbnMgfHwgIWluZGljZXMpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZhciB2ZWN0b3JQ
b3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgZm9yICh2YXIgcG9zID0gMDsgcG9zIDwg
cG9zaXRpb25zLmxlbmd0aDsgcG9zID0gcG9zICsgMykgeworICAgICAgICAgICAgdmVjdG9yUG9z
aXRpb25zLnB1c2goX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocG9zaXRpb25zLCBwb3MpKTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgZHVwZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siQXN5bmNMb29wIl0uU3luY0FzeW5jRm9yTG9vcCh2ZWN0
b3JQb3NpdGlvbnMubGVuZ3RoLCA0MCwgZnVuY3Rpb24gKGl0ZXJhdGlvbikgeworICAgICAgICAg
ICAgdmFyIHJlYWxQb3MgPSB2ZWN0b3JQb3NpdGlvbnMubGVuZ3RoIC0gMSAtIGl0ZXJhdGlvbjsK
KyAgICAgICAgICAgIHZhciB0ZXN0ZWRQb3NpdGlvbiA9IHZlY3RvclBvc2l0aW9uc1tyZWFsUG9z
XTsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVhbFBvczsgKytqKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGFnYWluc3RQb3NpdGlvbiA9IHZlY3RvclBvc2l0aW9uc1tqXTsKKyAg
ICAgICAgICAgICAgICBpZiAodGVzdGVkUG9zaXRpb24uZXF1YWxzKGFnYWluc3RQb3NpdGlvbikp
IHsKKyAgICAgICAgICAgICAgICAgICAgZHVwZXNbcmVhbFBvc10gPSBqOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNl
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGluZGljZXNbaV0gPSBkdXBlc1tpbmRp
Y2VzW2ldXSB8fCBpbmRpY2VzW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy9pbmRp
Y2VzIGFyZSBub3cgcmVvcmRlcmVkCisgICAgICAgICAgICB2YXIgb3JpZ2luYWxTdWJNZXNoZXMg
PSBfdGhpcy5zdWJNZXNoZXMuc2xpY2UoMCk7CisgICAgICAgICAgICBfdGhpcy5zZXRJbmRpY2Vz
KGluZGljZXMpOworICAgICAgICAgICAgX3RoaXMuc3ViTWVzaGVzID0gb3JpZ2luYWxTdWJNZXNo
ZXM7CisgICAgICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAg
c3VjY2Vzc0NhbGxiYWNrKF90aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplIGN1cnJl
bnQgbWVzaAorICAgICAqIEBwYXJhbSBzZXJpYWxpemF0aW9uT2JqZWN0IGRlZmluZXMgdGhlIG9i
amVjdCB3aGljaCB3aWxsIHJlY2VpdmUgdGhlIHNlcmlhbGl6YXRpb24gZGF0YQorICAgICAqLwor
ICAgIE1lc2gucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2Jq
ZWN0KSB7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubmFtZSA9IHRoaXMubmFtZTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5pZCA9IHRoaXMuaWQ7CisgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QudHlwZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIGlmIChfTWlz
Y190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRhZ3MiXSAmJiBfTWlzY190YWdz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRhZ3MiXS5IYXNUYWdzKHRoaXMpKSB7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRhZ3MgPSBfTWlzY190YWdzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlRhZ3MiXS5HZXRUYWdzKHRoaXMpOworICAgICAgICB9Cisg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uLmFzQXJy
YXkoKTsKKyAgICAgICAgaWYgKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAg
ICBzZXJpYWxpemF0aW9uT2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbiA9IHRoaXMucm90YXRpb25R
dWF0ZXJuaW9uLmFzQXJyYXkoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLnJv
dGF0aW9uKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJvdGF0aW9uID0gdGhp
cy5yb3RhdGlvbi5hc0FycmF5KCk7CisgICAgICAgIH0KKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5zY2FsaW5nID0gdGhpcy5zY2FsaW5nLmFzQXJyYXkoKTsKKyAgICAgICAgaWYgKHRoaXMu
X3Bvc3RNdWx0aXBseVBpdm90TWF0cml4KSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LnBpdm90TWF0cml4ID0gdGhpcy5nZXRQaXZvdE1hdHJpeCgpLmFzQXJyYXkoKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubG9j
YWxNYXRyaXggPSB0aGlzLmdldFBpdm90TWF0cml4KCkuYXNBcnJheSgpOworICAgICAgICB9Cisg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaXNFbmFibGVkID0gdGhpcy5pc0VuYWJsZWQoZmFs
c2UpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmlzVmlzaWJsZSA9IHRoaXMuaXNWaXNp
YmxlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmluZmluaXRlRGlzdGFuY2UgPSB0aGlz
LmluZmluaXRlRGlzdGFuY2U7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucGlja2FibGUg
PSB0aGlzLmlzUGlja2FibGU7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmVjZWl2ZVNo
YWRvd3MgPSB0aGlzLnJlY2VpdmVTaGFkb3dzOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
LmJpbGxib2FyZE1vZGUgPSB0aGlzLmJpbGxib2FyZE1vZGU7CisgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QudmlzaWJpbGl0eSA9IHRoaXMudmlzaWJpbGl0eTsKKyAgICAgICAgc2VyaWFsaXph
dGlvbk9iamVjdC5jaGVja0NvbGxpc2lvbnMgPSB0aGlzLmNoZWNrQ29sbGlzaW9uczsKKyAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC5pc0Jsb2NrZXIgPSB0aGlzLmlzQmxvY2tlcjsKKyAgICAg
ICAgLy8gUGFyZW50CisgICAgICAgIGlmICh0aGlzLnBhcmVudCkgeworICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5wYXJlbnRJZCA9IHRoaXMucGFyZW50LmlkOworICAgICAgICB9Cisg
ICAgICAgIC8vIEdlb21ldHJ5CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaXNVbkluZGV4
ZWQgPSB0aGlzLmlzVW5JbmRleGVkOworICAgICAgICB2YXIgZ2VvbWV0cnkgPSB0aGlzLl9nZW9t
ZXRyeTsKKyAgICAgICAgaWYgKGdlb21ldHJ5KSB7CisgICAgICAgICAgICB2YXIgZ2VvbWV0cnlJ
ZCA9IGdlb21ldHJ5LmlkOworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5nZW9tZXRy
eUlkID0gZ2VvbWV0cnlJZDsKKyAgICAgICAgICAgIC8vIFN1Yk1lc2hlcworICAgICAgICAgICAg
c2VyaWFsaXphdGlvbk9iamVjdC5zdWJNZXNoZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFy
IHN1YkluZGV4ID0gMDsgc3ViSW5kZXggPCB0aGlzLnN1Yk1lc2hlcy5sZW5ndGg7IHN1YkluZGV4
KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgc3ViTWVzaCA9IHRoaXMuc3ViTWVzaGVzW3N1Yklu
ZGV4XTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnN1Yk1lc2hlcy5wdXNo
KHsKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxJbmRleDogc3ViTWVzaC5tYXRlcmlhbElu
ZGV4LAorICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1N0YXJ0OiBzdWJNZXNoLnZlcnRpY2Vz
U3RhcnQsCisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzQ291bnQ6IHN1Yk1lc2gudmVydGlj
ZXNDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFydDogc3ViTWVzaC5pbmRleFN0
YXJ0LAorICAgICAgICAgICAgICAgICAgICBpbmRleENvdW50OiBzdWJNZXNoLmluZGV4Q291bnQK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAv
LyBNYXRlcmlhbAorICAgICAgICBpZiAodGhpcy5tYXRlcmlhbCkgeworICAgICAgICAgICAgaWYg
KCF0aGlzLm1hdGVyaWFsLmRvTm90U2VyaWFsaXplKSB7CisgICAgICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5tYXRlcmlhbElkID0gdGhpcy5tYXRlcmlhbC5pZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwg
PSBudWxsOworICAgICAgICB9CisgICAgICAgIC8vIE1vcnBoIHRhcmdldHMKKyAgICAgICAgaWYg
KHRoaXMubW9ycGhUYXJnZXRNYW5hZ2VyKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0Lm1vcnBoVGFyZ2V0TWFuYWdlcklkID0gdGhpcy5tb3JwaFRhcmdldE1hbmFnZXIudW5pcXVl
SWQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2tlbGV0b24KKyAgICAgICAgaWYgKHRoaXMuc2tl
bGV0b24pIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc2tlbGV0b25JZCA9IHRo
aXMuc2tlbGV0b24uaWQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gUGh5c2ljcworICAgICAgICAv
L1RPRE8gaW1wbGVtZW50IGNvcnJlY3Qgc2VyaWFsaXphdGlvbiBmb3IgcGh5c2ljcyBpbXBvc3Rv
cnMuCisgICAgICAgIGlmICh0aGlzLmdldFNjZW5lKCkuX2dldENvbXBvbmVudChfc2NlbmVDb21w
b25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIlNjZW5lQ29tcG9uZW50Q29uc3Rh
bnRzIl0uTkFNRV9QSFlTSUNTRU5HSU5FKSkgeworICAgICAgICAgICAgdmFyIGltcG9zdG9yID0g
dGhpcy5nZXRQaHlzaWNzSW1wb3N0b3IoKTsKKyAgICAgICAgICAgIGlmIChpbXBvc3Rvcikgewor
ICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucGh5c2ljc01hc3MgPSBpbXBvc3Rv
ci5nZXRQYXJhbSgibWFzcyIpOworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
cGh5c2ljc0ZyaWN0aW9uID0gaW1wb3N0b3IuZ2V0UGFyYW0oImZyaWN0aW9uIik7CisgICAgICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5waHlzaWNzUmVzdGl0dXRpb24gPSBpbXBvc3Rv
ci5nZXRQYXJhbSgibWFzcyIpOworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
cGh5c2ljc0ltcG9zdG9yID0gaW1wb3N0b3IudHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAvLyBNZXRhZGF0YQorICAgICAgICBpZiAodGhpcy5tZXRhZGF0YSkgeworICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tZXRhZGF0YSA9IHRoaXMubWV0YWRhdGE7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gSW5zdGFuY2VzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QuaW5zdGFuY2VzID0gW107CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0
aGlzLmluc3RhbmNlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBpbnN0YW5j
ZSA9IHRoaXMuaW5zdGFuY2VzW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChpbnN0YW5jZS5kb05v
dFNlcmlhbGl6ZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25JbnN0YW5jZSA9IHsKKyAgICAgICAgICAgICAg
ICBuYW1lOiBpbnN0YW5jZS5uYW1lLAorICAgICAgICAgICAgICAgIGlkOiBpbnN0YW5jZS5pZCwK
KyAgICAgICAgICAgICAgICBwb3NpdGlvbjogaW5zdGFuY2UucG9zaXRpb24uYXNBcnJheSgpLAor
ICAgICAgICAgICAgICAgIHNjYWxpbmc6IGluc3RhbmNlLnNjYWxpbmcuYXNBcnJheSgpCisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgaWYgKGluc3RhbmNlLnBhcmVudCkgeworICAgICAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25JbnN0YW5jZS5wYXJlbnRJZCA9IGluc3RhbmNlLnBhcmVudC5p
ZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnN0YW5jZS5yb3RhdGlvblF1YXRl
cm5pb24pIHsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uSW5zdGFuY2Uucm90YXRpb25R
dWF0ZXJuaW9uID0gaW5zdGFuY2Uucm90YXRpb25RdWF0ZXJuaW9uLmFzQXJyYXkoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGluc3RhbmNlLnJvdGF0aW9uKSB7CisgICAg
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbkluc3RhbmNlLnJvdGF0aW9uID0gaW5zdGFuY2Uucm90
YXRpb24uYXNBcnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VyaWFsaXphdGlv
bk9iamVjdC5pbnN0YW5jZXMucHVzaChzZXJpYWxpemF0aW9uSW5zdGFuY2UpOworICAgICAgICAg
ICAgLy8gQW5pbWF0aW9ucworICAgICAgICAgICAgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMThfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkFwcGVuZFNlcmlhbGl6
ZWRBbmltYXRpb25zKGluc3RhbmNlLCBzZXJpYWxpemF0aW9uSW5zdGFuY2UpOworICAgICAgICAg
ICAgc2VyaWFsaXphdGlvbkluc3RhbmNlLnJhbmdlcyA9IGluc3RhbmNlLnNlcmlhbGl6ZUFuaW1h
dGlvblJhbmdlcygpOworICAgICAgICB9CisgICAgICAgIC8vCisgICAgICAgIC8vIEFuaW1hdGlv
bnMKKyAgICAgICAgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThf
X1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkFwcGVuZFNlcmlhbGl6ZWRBbmltYXRpb25zKHRoaXMs
IHNlcmlhbGl6YXRpb25PYmplY3QpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJhbmdl
cyA9IHRoaXMuc2VyaWFsaXplQW5pbWF0aW9uUmFuZ2VzKCk7CisgICAgICAgIC8vIExheWVyIG1h
c2sKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5sYXllck1hc2sgPSB0aGlzLmxheWVyTWFz
azsKKyAgICAgICAgLy8gQWxwaGEKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hbHBoYUlu
ZGV4ID0gdGhpcy5hbHBoYUluZGV4OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lmhhc1Zl
cnRleEFscGhhID0gdGhpcy5oYXNWZXJ0ZXhBbHBoYTsKKyAgICAgICAgLy8gT3ZlcmxheQorICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm92ZXJsYXlBbHBoYSA9IHRoaXMub3ZlcmxheUFscGhh
OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm92ZXJsYXlDb2xvciA9IHRoaXMub3Zlcmxh
eUNvbG9yLmFzQXJyYXkoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5yZW5kZXJPdmVy
bGF5ID0gdGhpcy5yZW5kZXJPdmVybGF5OworICAgICAgICAvLyBGb2cKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5hcHBseUZvZyA9IHRoaXMuYXBwbHlGb2c7CisgICAgICAgIC8vIEFjdGlv
biBNYW5hZ2VyCisgICAgICAgIGlmICh0aGlzLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAg
IHNlcmlhbGl6YXRpb25PYmplY3QuYWN0aW9ucyA9IHRoaXMuYWN0aW9uTWFuYWdlci5zZXJpYWxp
emUodGhpcy5uYW1lKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBNZXNoLnByb3RvdHlwZS5fc3luY0dlb21ldHJ5V2l0aE1vcnBoVGFyZ2V0TWFuYWdlciA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmdlb21ldHJ5KSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbWFya1N1Yk1lc2hlc0FzQXR0cmlidXRl
c0RpcnR5KCk7CisgICAgICAgIHZhciBtb3JwaFRhcmdldE1hbmFnZXIgPSB0aGlzLl9pbnRlcm5h
bE1lc2hEYXRhSW5mby5fbW9ycGhUYXJnZXRNYW5hZ2VyOworICAgICAgICBpZiAobW9ycGhUYXJn
ZXRNYW5hZ2VyICYmIG1vcnBoVGFyZ2V0TWFuYWdlci52ZXJ0ZXhDb3VudCkgeworICAgICAgICAg
ICAgaWYgKG1vcnBoVGFyZ2V0TWFuYWdlci52ZXJ0ZXhDb3VudCAhPT0gdGhpcy5nZXRUb3RhbFZl
cnRpY2VzKCkpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE5X19bIkxvZ2dlciJdLkVycm9yKCJNZXNoIGlzIGluY29tcGF0aWJsZSB3aXRo
IG1vcnBoIHRhcmdldHMuIFRhcmdldHMgYW5kIG1lc2ggbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSB2
ZXJ0aWNlcyBjb3VudC4iKTsKKyAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0TWFuYWdl
ciA9IG51bGw7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG1vcnBoVGFyZ2V0TWFuYWdlci5udW1J
bmZsdWVuY2VyczsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBtb3JwaFRhcmdldCA9
IG1vcnBoVGFyZ2V0TWFuYWdlci5nZXRBY3RpdmVUYXJnZXQoaW5kZXgpOworICAgICAgICAgICAg
ICAgIHZhciBwb3NpdGlvbnMgPSBtb3JwaFRhcmdldC5nZXRQb3NpdGlvbnMoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXBvc2l0aW9ucykgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIkxvZ2dlciJdLkVycm9yKCJJbnZhbGlk
IG1vcnBoIHRhcmdldC4gVGFyZ2V0IG11c3QgaGF2ZSBwb3NpdGlvbnMuIik7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhp
cy5nZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQgKyBpbmRleCwgcG9zaXRpb25zLCBm
YWxzZSwgMyk7CisgICAgICAgICAgICAgICAgdmFyIG5vcm1hbHMgPSBtb3JwaFRhcmdldC5nZXRO
b3JtYWxzKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vcm1hbHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5nZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kICsgaW5kZXgsIG5vcm1h
bHMsIGZhbHNlLCAzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHRh
bmdlbnRzID0gbW9ycGhUYXJnZXQuZ2V0VGFuZ2VudHMoKTsKKyAgICAgICAgICAgICAgICBpZiAo
dGFuZ2VudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW9tZXRyeS5zZXRWZXJ0aWNl
c0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIi
XS5UYW5nZW50S2luZCArIGluZGV4LCB0YW5nZW50cywgZmFsc2UsIDMpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgdXZzID0gbW9ycGhUYXJnZXQuZ2V0VVZzKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHV2cykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmdlb21l
dHJ5LnNldFZlcnRpY2VzRGF0YShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IlZlcnRleEJ1ZmZlciJdLlVWS2luZCArICJfIiArIGluZGV4LCB1dnMsIGZhbHNlLCAyKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICAgICAgLy8gUG9zaXRpb25zCisg
ICAgICAgICAgICB3aGlsZSAodGhpcy5nZW9tZXRyeS5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlv
bktpbmQgKyBpbmRleCkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmdlb21ldHJ5LnJlbW92ZVZl
cnRpY2VzRGF0YShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1
ZmZlciJdLlBvc2l0aW9uS2luZCArIGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5n
ZW9tZXRyeS5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kICsgaW5kZXgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZ2VvbWV0cnkucmVtb3ZlVmVydGljZXNEYXRhKF9idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCArIGlu
ZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2VvbWV0
cnkuaXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siVmVydGV4QnVmZmVyIl0uVGFuZ2VudEtpbmQgKyBpbmRleCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5nZW9tZXRyeS5yZW1vdmVWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5UYW5nZW50S2luZCArIGluZGV4
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2VvbWV0cnku
aXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
X1siVmVydGV4QnVmZmVyIl0uVVZLaW5kICsgaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuZ2VvbWV0cnkucmVtb3ZlVmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kICsgIl8iICsgaW5kZXgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IE1lc2ggb2Jq
ZWN0IHBhcnNlZCBmcm9tIHRoZSBzb3VyY2UgcHJvdmlkZWQuCisgICAgICogQHBhcmFtIHBhcnNl
ZE1lc2ggaXMgdGhlIHNvdXJjZQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0
aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHJvb3RVcmwgaXMgdGhlIHJvb3QgVVJMIHRvIHByZWZp
eCB0aGUgYGRlbGF5TG9hZGluZ0ZpbGVgIHByb3BlcnR5IHdpdGgKKyAgICAgKiBAcmV0dXJucyBh
IG5ldyBNZXNoCisgICAgICovCisgICAgTWVzaC5QYXJzZSA9IGZ1bmN0aW9uIChwYXJzZWRNZXNo
LCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICB2YXIgbWVzaDsKKyAgICAgICAgaWYgKHBhcnNl
ZE1lc2gudHlwZSAmJiBwYXJzZWRNZXNoLnR5cGUgPT09ICJHcm91bmRNZXNoIikgeworICAgICAg
ICAgICAgbWVzaCA9IE1lc2guX0dyb3VuZE1lc2hQYXJzZXIocGFyc2VkTWVzaCwgc2NlbmUpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWVzaCA9IG5ldyBNZXNoKHBh
cnNlZE1lc2gubmFtZSwgc2NlbmUpOworICAgICAgICB9CisgICAgICAgIG1lc2guaWQgPSBwYXJz
ZWRNZXNoLmlkOworICAgICAgICBpZiAoX01pc2NfdGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJUYWdzIl0pIHsKKyAgICAgICAgICAgIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siVGFncyJdLkFkZFRhZ3NUbyhtZXNoLCBwYXJzZWRNZXNoLnRhZ3MpOwor
ICAgICAgICB9CisgICAgICAgIG1lc2gucG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZyb21BcnJheShwYXJzZWRNZXNo
LnBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHBhcnNlZE1lc2gubWV0YWRhdGEgIT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgbWVzaC5tZXRhZGF0YSA9IHBhcnNlZE1lc2gubWV0YWRhdGE7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uKSB7Cisg
ICAgICAgICAgICBtZXNoLnJvdGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJRdWF0ZXJuaW9uIl0uRnJvbUFycmF5KHBhcnNl
ZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChw
YXJzZWRNZXNoLnJvdGF0aW9uKSB7CisgICAgICAgICAgICBtZXNoLnJvdGF0aW9uID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5Gcm9t
QXJyYXkocGFyc2VkTWVzaC5yb3RhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgbWVzaC5zY2Fs
aW5nID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZl
Y3RvcjMiXS5Gcm9tQXJyYXkocGFyc2VkTWVzaC5zY2FsaW5nKTsKKyAgICAgICAgaWYgKHBhcnNl
ZE1lc2gubG9jYWxNYXRyaXgpIHsKKyAgICAgICAgICAgIG1lc2guc2V0UHJlVHJhbnNmb3JtTWF0
cml4KF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRy
aXgiXS5Gcm9tQXJyYXkocGFyc2VkTWVzaC5sb2NhbE1hdHJpeCkpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHBhcnNlZE1lc2gucGl2b3RNYXRyaXgpIHsKKyAgICAgICAgICAgIG1lc2gu
c2V0UGl2b3RNYXRyaXgoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X19bIk1hdHJpeCJdLkZyb21BcnJheShwYXJzZWRNZXNoLnBpdm90TWF0cml4KSk7CisgICAg
ICAgIH0KKyAgICAgICAgbWVzaC5zZXRFbmFibGVkKHBhcnNlZE1lc2guaXNFbmFibGVkKTsKKyAg
ICAgICAgbWVzaC5pc1Zpc2libGUgPSBwYXJzZWRNZXNoLmlzVmlzaWJsZTsKKyAgICAgICAgbWVz
aC5pbmZpbml0ZURpc3RhbmNlID0gcGFyc2VkTWVzaC5pbmZpbml0ZURpc3RhbmNlOworICAgICAg
ICBtZXNoLnNob3dCb3VuZGluZ0JveCA9IHBhcnNlZE1lc2guc2hvd0JvdW5kaW5nQm94OworICAg
ICAgICBtZXNoLnNob3dTdWJNZXNoZXNCb3VuZGluZ0JveCA9IHBhcnNlZE1lc2guc2hvd1N1Yk1l
c2hlc0JvdW5kaW5nQm94OworICAgICAgICBpZiAocGFyc2VkTWVzaC5hcHBseUZvZyAhPT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICBtZXNoLmFwcGx5Rm9nID0gcGFyc2VkTWVzaC5hcHBseUZv
ZzsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkTWVzaC5waWNrYWJsZSAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICAgICAgICBtZXNoLmlzUGlja2FibGUgPSBwYXJzZWRNZXNoLnBpY2thYmxl
OworICAgICAgICB9CisgICAgICAgIGlmIChwYXJzZWRNZXNoLmFscGhhSW5kZXggIT09IHVuZGVm
aW5lZCkgeworICAgICAgICAgICAgbWVzaC5hbHBoYUluZGV4ID0gcGFyc2VkTWVzaC5hbHBoYUlu
ZGV4OworICAgICAgICB9CisgICAgICAgIG1lc2gucmVjZWl2ZVNoYWRvd3MgPSBwYXJzZWRNZXNo
LnJlY2VpdmVTaGFkb3dzOworICAgICAgICBtZXNoLmJpbGxib2FyZE1vZGUgPSBwYXJzZWRNZXNo
LmJpbGxib2FyZE1vZGU7CisgICAgICAgIGlmIChwYXJzZWRNZXNoLnZpc2liaWxpdHkgIT09IHVu
ZGVmaW5lZCkgeworICAgICAgICAgICAgbWVzaC52aXNpYmlsaXR5ID0gcGFyc2VkTWVzaC52aXNp
YmlsaXR5OworICAgICAgICB9CisgICAgICAgIG1lc2guY2hlY2tDb2xsaXNpb25zID0gcGFyc2Vk
TWVzaC5jaGVja0NvbGxpc2lvbnM7CisgICAgICAgIGlmIChwYXJzZWRNZXNoLmlzQmxvY2tlciAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBtZXNoLmlzQmxvY2tlciA9IHBhcnNlZE1lc2gu
aXNCbG9ja2VyOworICAgICAgICB9CisgICAgICAgIG1lc2guX3Nob3VsZEdlbmVyYXRlRmxhdFNo
YWRpbmcgPSBwYXJzZWRNZXNoLnVzZUZsYXRTaGFkaW5nOworICAgICAgICAvLyBmcmVlemVXb3Js
ZE1hdHJpeAorICAgICAgICBpZiAocGFyc2VkTWVzaC5mcmVlemVXb3JsZE1hdHJpeCkgeworICAg
ICAgICAgICAgbWVzaC5fd2FpdGluZ0RhdGEuZnJlZXplV29ybGRNYXRyaXggPSBwYXJzZWRNZXNo
LmZyZWV6ZVdvcmxkTWF0cml4OworICAgICAgICB9CisgICAgICAgIC8vIFBhcmVudAorICAgICAg
ICBpZiAocGFyc2VkTWVzaC5wYXJlbnRJZCkgeworICAgICAgICAgICAgbWVzaC5fd2FpdGluZ1Bh
cmVudElkID0gcGFyc2VkTWVzaC5wYXJlbnRJZDsKKyAgICAgICAgfQorICAgICAgICAvLyBBY3Rp
b25zCisgICAgICAgIGlmIChwYXJzZWRNZXNoLmFjdGlvbnMgIT09IHVuZGVmaW5lZCkgeworICAg
ICAgICAgICAgbWVzaC5fd2FpdGluZ0RhdGEuYWN0aW9ucyA9IHBhcnNlZE1lc2guYWN0aW9uczsK
KyAgICAgICAgfQorICAgICAgICAvLyBPdmVybGF5CisgICAgICAgIGlmIChwYXJzZWRNZXNoLm92
ZXJsYXlBbHBoYSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBtZXNoLm92ZXJsYXlBbHBo
YSA9IHBhcnNlZE1lc2gub3ZlcmxheUFscGhhOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJz
ZWRNZXNoLm92ZXJsYXlDb2xvciAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBtZXNoLm92
ZXJsYXlDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82
X19bIkNvbG9yMyJdLkZyb21BcnJheShwYXJzZWRNZXNoLm92ZXJsYXlDb2xvcik7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHBhcnNlZE1lc2gucmVuZGVyT3ZlcmxheSAhPT0gdW5kZWZpbmVkKSB7
CisgICAgICAgICAgICBtZXNoLnJlbmRlck92ZXJsYXkgPSBwYXJzZWRNZXNoLnJlbmRlck92ZXJs
YXk7CisgICAgICAgIH0KKyAgICAgICAgLy8gR2VvbWV0cnkKKyAgICAgICAgbWVzaC5pc1VuSW5k
ZXhlZCA9ICEhcGFyc2VkTWVzaC5pc1VuSW5kZXhlZDsKKyAgICAgICAgbWVzaC5oYXNWZXJ0ZXhB
bHBoYSA9IHBhcnNlZE1lc2guaGFzVmVydGV4QWxwaGE7CisgICAgICAgIGlmIChwYXJzZWRNZXNo
LmRlbGF5TG9hZGluZ0ZpbGUpIHsKKyAgICAgICAgICAgIG1lc2guZGVsYXlMb2FkU3RhdGUgPSBf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bIkNvbnN0YW50
cyJdLkRFTEFZTE9BRFNUQVRFX05PVExPQURFRDsKKyAgICAgICAgICAgIG1lc2guZGVsYXlMb2Fk
aW5nRmlsZSA9IHJvb3RVcmwgKyBwYXJzZWRNZXNoLmRlbGF5TG9hZGluZ0ZpbGU7CisgICAgICAg
ICAgICBtZXNoLl9ib3VuZGluZ0luZm8gPSBuZXcgX0N1bGxpbmdfYm91bmRpbmdJbmZvX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJCb3VuZGluZ0luZm8iXShfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZyb21BcnJheShwYXJz
ZWRNZXNoLmJvdW5kaW5nQm94TWluaW11bSksIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KHBhcnNlZE1lc2guYm91bmRp
bmdCb3hNYXhpbXVtKSk7CisgICAgICAgICAgICBpZiAocGFyc2VkTWVzaC5fYmluYXJ5SW5mbykg
eworICAgICAgICAgICAgICAgIG1lc2guX2JpbmFyeUluZm8gPSBwYXJzZWRNZXNoLl9iaW5hcnlJ
bmZvOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVzaC5fZGVsYXlJbmZvID0gW107Cisg
ICAgICAgICAgICBpZiAocGFyc2VkTWVzaC5oYXNVVnMpIHsKKyAgICAgICAgICAgICAgICBtZXNo
Ll9kZWxheUluZm8ucHVzaChfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZl
cnRleEJ1ZmZlciJdLlVWS2luZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFy
c2VkTWVzaC5oYXNVVnMyKSB7CisgICAgICAgICAgICAgICAgbWVzaC5fZGVsYXlJbmZvLnB1c2go
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjJL
aW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRNZXNoLmhhc1VWczMp
IHsKKyAgICAgICAgICAgICAgICBtZXNoLl9kZWxheUluZm8ucHVzaChfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLlVWM0tpbmQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZE1lc2guaGFzVVZzNCkgeworICAgICAgICAgICAg
ICAgIG1lc2guX2RlbGF5SW5mby5wdXNoKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siVmVydGV4QnVmZmVyIl0uVVY0S2luZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAocGFyc2VkTWVzaC5oYXNVVnM1KSB7CisgICAgICAgICAgICAgICAgbWVzaC5fZGVsYXlJ
bmZvLnB1c2goX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZm
ZXIiXS5VVjVLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRNZXNo
Lmhhc1VWczYpIHsKKyAgICAgICAgICAgICAgICBtZXNoLl9kZWxheUluZm8ucHVzaChfYnVmZmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLlVWNktpbmQpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZE1lc2guaGFzQ29sb3JzKSB7Cisg
ICAgICAgICAgICAgICAgbWVzaC5fZGVsYXlJbmZvLnB1c2goX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHBhcnNlZE1lc2guaGFzTWF0cmljZXNJbmRpY2VzKSB7CisgICAg
ICAgICAgICAgICAgbWVzaC5fZGVsYXlJbmZvLnB1c2goX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNLaW5kKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRNZXNoLmhhc01hdHJpY2VzV2VpZ2h0cykg
eworICAgICAgICAgICAgICAgIG1lc2guX2RlbGF5SW5mby5wdXNoKF9idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXNoLl9kZWxheUxvYWRpbmdGdW5jdGlvbiA9
IF9nZW9tZXRyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siR2VvbWV0cnkiXS5fSW1w
b3J0R2VvbWV0cnk7CisgICAgICAgICAgICBpZiAoX0xvYWRpbmdfc2NlbmVMb2FkZXJGbGFnc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siU2NlbmVMb2FkZXJGbGFncyJdLkZvcmNlRnVs
bFNjZW5lTG9hZGluZ0ZvckluY3JlbWVudGFsKSB7CisgICAgICAgICAgICAgICAgbWVzaC5fY2hl
Y2tEZWxheVN0YXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBfZ2VvbWV0cnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkdl
b21ldHJ5Il0uX0ltcG9ydEdlb21ldHJ5KHBhcnNlZE1lc2gsIG1lc2gpOworICAgICAgICB9Cisg
ICAgICAgIC8vIE1hdGVyaWFsCisgICAgICAgIGlmIChwYXJzZWRNZXNoLm1hdGVyaWFsSWQpIHsK
KyAgICAgICAgICAgIG1lc2guc2V0TWF0ZXJpYWxCeUlEKHBhcnNlZE1lc2gubWF0ZXJpYWxJZCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtZXNoLm1hdGVyaWFsID0g
bnVsbDsKKyAgICAgICAgfQorICAgICAgICAvLyBNb3JwaCB0YXJnZXRzCisgICAgICAgIGlmIChw
YXJzZWRNZXNoLm1vcnBoVGFyZ2V0TWFuYWdlcklkID4gLTEpIHsKKyAgICAgICAgICAgIG1lc2gu
bW9ycGhUYXJnZXRNYW5hZ2VyID0gc2NlbmUuZ2V0TW9ycGhUYXJnZXRNYW5hZ2VyQnlJZChwYXJz
ZWRNZXNoLm1vcnBoVGFyZ2V0TWFuYWdlcklkKTsKKyAgICAgICAgfQorICAgICAgICAvLyBTa2Vs
ZXRvbgorICAgICAgICBpZiAocGFyc2VkTWVzaC5za2VsZXRvbklkID4gLTEpIHsKKyAgICAgICAg
ICAgIG1lc2guc2tlbGV0b24gPSBzY2VuZS5nZXRMYXN0U2tlbGV0b25CeUlEKHBhcnNlZE1lc2gu
c2tlbGV0b25JZCk7CisgICAgICAgICAgICBpZiAocGFyc2VkTWVzaC5udW1Cb25lSW5mbHVlbmNl
cnMpIHsKKyAgICAgICAgICAgICAgICBtZXNoLm51bUJvbmVJbmZsdWVuY2VycyA9IHBhcnNlZE1l
c2gubnVtQm9uZUluZmx1ZW5jZXJzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IC8vIEFuaW1hdGlvbnMKKyAgICAgICAgaWYgKHBhcnNlZE1lc2guYW5pbWF0aW9ucykgeworICAg
ICAgICAgICAgZm9yICh2YXIgYW5pbWF0aW9uSW5kZXggPSAwOyBhbmltYXRpb25JbmRleCA8IHBh
cnNlZE1lc2guYW5pbWF0aW9ucy5sZW5ndGg7IGFuaW1hdGlvbkluZGV4KyspIHsKKyAgICAgICAg
ICAgICAgICB2YXIgcGFyc2VkQW5pbWF0aW9uID0gcGFyc2VkTWVzaC5hbmltYXRpb25zW2FuaW1h
dGlvbkluZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxDbGFzcyA9IF9NaXNjX3R5
cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siX1R5cGVTdG9yZSJdLkdldENs
YXNzKCJCQUJZTE9OLkFuaW1hdGlvbiIpOworICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbENs
YXNzKSB7CisgICAgICAgICAgICAgICAgICAgIG1lc2guYW5pbWF0aW9ucy5wdXNoKGludGVybmFs
Q2xhc3MuUGFyc2UocGFyc2VkQW5pbWF0aW9uKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
Tm9kZSJdLlBhcnNlQW5pbWF0aW9uUmFuZ2VzKG1lc2gsIHBhcnNlZE1lc2gsIHNjZW5lKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAocGFyc2VkTWVzaC5hdXRvQW5pbWF0ZSkgeworICAgICAgICAg
ICAgc2NlbmUuYmVnaW5BbmltYXRpb24obWVzaCwgcGFyc2VkTWVzaC5hdXRvQW5pbWF0ZUZyb20s
IHBhcnNlZE1lc2guYXV0b0FuaW1hdGVUbywgcGFyc2VkTWVzaC5hdXRvQW5pbWF0ZUxvb3AsIHBh
cnNlZE1lc2guYXV0b0FuaW1hdGVTcGVlZCB8fCAxLjApOworICAgICAgICB9CisgICAgICAgIC8v
IExheWVyIE1hc2sKKyAgICAgICAgaWYgKHBhcnNlZE1lc2gubGF5ZXJNYXNrICYmICghaXNOYU4o
cGFyc2VkTWVzaC5sYXllck1hc2spKSkgeworICAgICAgICAgICAgbWVzaC5sYXllck1hc2sgPSBN
YXRoLmFicyhwYXJzZUludChwYXJzZWRNZXNoLmxheWVyTWFzaykpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbWVzaC5sYXllck1hc2sgPSAweDBGRkZGRkZGOworICAg
ICAgICB9CisgICAgICAgIC8vIFBoeXNpY3MKKyAgICAgICAgaWYgKHBhcnNlZE1lc2gucGh5c2lj
c0ltcG9zdG9yKSB7CisgICAgICAgICAgICBNZXNoLl9QaHlzaWNzSW1wb3N0b3JQYXJzZXIoc2Nl
bmUsIG1lc2gsIHBhcnNlZE1lc2gpOworICAgICAgICB9CisgICAgICAgIC8vIExldmVscworICAg
ICAgICBpZiAocGFyc2VkTWVzaC5sb2RNZXNoSWRzKSB7CisgICAgICAgICAgICBtZXNoLl93YWl0
aW5nRGF0YS5sb2RzID0geworICAgICAgICAgICAgICAgIGlkczogcGFyc2VkTWVzaC5sb2RNZXNo
SWRzLAorICAgICAgICAgICAgICAgIGRpc3RhbmNlczogKHBhcnNlZE1lc2gubG9kRGlzdGFuY2Vz
KSA/IHBhcnNlZE1lc2gubG9kRGlzdGFuY2VzIDogbnVsbCwKKyAgICAgICAgICAgICAgICBjb3Zl
cmFnZXM6IChwYXJzZWRNZXNoLmxvZENvdmVyYWdlcykgPyBwYXJzZWRNZXNoLmxvZENvdmVyYWdl
cyA6IG51bGwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5zdGFuY2Vz
CisgICAgICAgIGlmIChwYXJzZWRNZXNoLmluc3RhbmNlcykgeworICAgICAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IHBhcnNlZE1lc2guaW5zdGFuY2VzLmxlbmd0aDsgaW5kZXgr
KykgeworICAgICAgICAgICAgICAgIHZhciBwYXJzZWRJbnN0YW5jZSA9IHBhcnNlZE1lc2guaW5z
dGFuY2VzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBtZXNoLmNyZWF0
ZUluc3RhbmNlKHBhcnNlZEluc3RhbmNlLm5hbWUpOworICAgICAgICAgICAgICAgIGlmIChwYXJz
ZWRJbnN0YW5jZS5pZCkgeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5pZCA9IHBhcnNl
ZEluc3RhbmNlLmlkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoX01p
c2NfdGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUYWdzIl0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhcnNlZEluc3RhbmNlLnRhZ3MpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGFncyJdLkFk
ZFRhZ3NUbyhpbnN0YW5jZSwgcGFyc2VkSW5zdGFuY2UudGFncyk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBfTWlzY190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRhZ3MiXS5BZGRUYWdz
VG8oaW5zdGFuY2UsIHBhcnNlZE1lc2gudGFncyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5zdGFuY2UucG9zaXRpb24gPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZy
b21BcnJheShwYXJzZWRJbnN0YW5jZS5wb3NpdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKHBh
cnNlZEluc3RhbmNlLm1ldGFkYXRhICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW5zdGFuY2UubWV0YWRhdGEgPSBwYXJzZWRJbnN0YW5jZS5tZXRhZGF0YTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZEluc3RhbmNlLnBhcmVudElkKSB7
CisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLl93YWl0aW5nUGFyZW50SWQgPSBwYXJzZWRJ
bnN0YW5jZS5wYXJlbnRJZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KHBhcnNlZEluc3RhbmNlLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgICAg
ICBpbnN0YW5jZS5yb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siUXVhdGVybmlvbiJdLkZyb21BcnJheShwYXJzZWRJbnN0
YW5jZS5yb3RhdGlvblF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChwYXJzZWRJbnN0YW5jZS5yb3RhdGlvbikgeworICAgICAgICAgICAgICAg
ICAgICBpbnN0YW5jZS5yb3RhdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KHBhcnNlZEluc3RhbmNlLnJvdGF0
aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2NhbGlu
ZyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0
b3IzIl0uRnJvbUFycmF5KHBhcnNlZEluc3RhbmNlLnNjYWxpbmcpOworICAgICAgICAgICAgICAg
IGlmIChwYXJzZWRJbnN0YW5jZS5jaGVja0NvbGxpc2lvbnMgIT0gdW5kZWZpbmVkICYmIHBhcnNl
ZEluc3RhbmNlLmNoZWNrQ29sbGlzaW9ucyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAg
IGluc3RhbmNlLmNoZWNrQ29sbGlzaW9ucyA9IHBhcnNlZEluc3RhbmNlLmNoZWNrQ29sbGlzaW9u
czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZEluc3RhbmNl
LnBpY2thYmxlICE9IHVuZGVmaW5lZCAmJiBwYXJzZWRJbnN0YW5jZS5waWNrYWJsZSAhPSBudWxs
KSB7CisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmlzUGlja2FibGUgPSBwYXJzZWRJbnN0
YW5jZS5waWNrYWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBh
cnNlZEluc3RhbmNlLnNob3dCb3VuZGluZ0JveCAhPSB1bmRlZmluZWQgJiYgcGFyc2VkSW5zdGFu
Y2Uuc2hvd0JvdW5kaW5nQm94ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFu
Y2Uuc2hvd0JvdW5kaW5nQm94ID0gcGFyc2VkSW5zdGFuY2Uuc2hvd0JvdW5kaW5nQm94OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5zdGFuY2Uuc2hvd1N1
Yk1lc2hlc0JvdW5kaW5nQm94ICE9IHVuZGVmaW5lZCAmJiBwYXJzZWRJbnN0YW5jZS5zaG93U3Vi
TWVzaGVzQm91bmRpbmdCb3ggIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5j
ZS5zaG93U3ViTWVzaGVzQm91bmRpbmdCb3ggPSBwYXJzZWRJbnN0YW5jZS5zaG93U3ViTWVzaGVz
Qm91bmRpbmdCb3g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwYXJz
ZWRJbnN0YW5jZS5hbHBoYUluZGV4ICE9IHVuZGVmaW5lZCAmJiBwYXJzZWRJbnN0YW5jZS5zaG93
U3ViTWVzaGVzQm91bmRpbmdCb3ggIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpbnN0
YW5jZS5hbHBoYUluZGV4ID0gcGFyc2VkSW5zdGFuY2UuYWxwaGFJbmRleDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgLy8gUGh5c2ljcworICAgICAgICAgICAgICAgIGlmIChw
YXJzZWRJbnN0YW5jZS5waHlzaWNzSW1wb3N0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgTWVz
aC5fUGh5c2ljc0ltcG9zdG9yUGFyc2VyKHNjZW5lLCBpbnN0YW5jZSwgcGFyc2VkSW5zdGFuY2Up
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBBbmltYXRpb24KKyAgICAg
ICAgICAgICAgICBpZiAocGFyc2VkSW5zdGFuY2UuYW5pbWF0aW9ucykgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKGFuaW1hdGlvbkluZGV4ID0gMDsgYW5pbWF0aW9uSW5kZXggPCBwYXJzZWRJ
bnN0YW5jZS5hbmltYXRpb25zLmxlbmd0aDsgYW5pbWF0aW9uSW5kZXgrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VkQW5pbWF0aW9uID0gcGFyc2VkSW5zdGFuY2UuYW5pbWF0aW9u
c1thbmltYXRpb25JbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxD
bGFzcyA9IF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siX1R5
cGVTdG9yZSJdLkdldENsYXNzKCJCQUJZTE9OLkFuaW1hdGlvbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGludGVybmFsQ2xhc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnN0YW5jZS5hbmltYXRpb25zLnB1c2goaW50ZXJuYWxDbGFzcy5QYXJzZShwYXJzZWRBbmlt
YXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJOb2RlIl0uUGFyc2VBbmltYXRpb25SYW5nZXMoaW5zdGFuY2UsIHBhcnNlZEluc3RhbmNlLCBz
Y2VuZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWRJbnN0YW5jZS5hdXRvQW5pbWF0
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmUuYmVnaW5BbmltYXRpb24oaW5zdGFu
Y2UsIHBhcnNlZEluc3RhbmNlLmF1dG9BbmltYXRlRnJvbSwgcGFyc2VkSW5zdGFuY2UuYXV0b0Fu
aW1hdGVUbywgcGFyc2VkSW5zdGFuY2UuYXV0b0FuaW1hdGVMb29wLCBwYXJzZWRJbnN0YW5jZS5h
dXRvQW5pbWF0ZVNwZWVkIHx8IDEuMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1lc2g7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcmliYm9uIG1lc2guIFBsZWFzZSBj
b25zaWRlciB1c2luZyB0aGUgc2FtZSBtZXRob2QgZnJvbSB0aGUgTWVzaEJ1aWxkZXIgY2xhc3Mg
aW5zdGVhZAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9wYXJh
bWV0cmljX3NoYXBlcworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhl
IG1lc2ggdG8gY3JlYXRlCisgICAgICogQHBhcmFtIHBhdGhBcnJheSBpcyBhIHJlcXVpcmVkIGFy
cmF5IG9mIHBhdGhzLCB3aGF0IGFyZSBlYWNoIGFuIGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9y
My4gVGhlIHBhdGhBcnJheSBwYXJhbWV0ZXIgZGVwaWN0cyB0aGUgcmliYm9uIGdlb21ldHJ5Lgor
ICAgICAqIEBwYXJhbSBjbG9zZUFycmF5IGNyZWF0ZXMgYSBzZWFtIGJldHdlZW4gdGhlIGZpcnN0
IGFuZCB0aGUgbGFzdCBwYXRocyBvZiB0aGUgcGF0aCBhcnJheSAoZGVmYXVsdCBpcyBmYWxzZSkK
KyAgICAgKiBAcGFyYW0gY2xvc2VQYXRoIGNyZWF0ZXMgYSBzZWFtIGJldHdlZW4gdGhlIGZpcnN0
IGFuZCB0aGUgbGFzdCBwb2ludHMgb2YgZWFjaCBwYXRoIG9mIHRoZSBwYXRoIGFycmF5CisgICAg
ICogQHBhcmFtIG9mZnNldCBpcyB0YWtlbiBpbiBhY2NvdW50IG9ubHkgaWYgdGhlIGBwYXRoQXJy
YXlgIGlzIGNvbnRhaW5pbmcgYSBzaW5nbGUgcGF0aAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZp
bmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlm
IHRoZSBtZXNoIG11c3QgYmUgZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBAcGFyYW0gc2lk
ZU9yaWVudGF0aW9uIGRlZmluZXMgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiAoaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1v
cmllbnRhdGlvbikKKyAgICAgKiBAcGFyYW0gaW5zdGFuY2UgZGVmaW5lcyBhbiBpbnN0YW5jZSBv
ZiBhbiBleGlzdGluZyBSaWJib24gb2JqZWN0IHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGUgcGFzc2Vk
IGBwYXRoQXJyYXlgIHBhcmFtZXRlciAoaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9I
b3dfdG9fZHluYW1pY2FsbHlfbW9ycGhfYV9tZXNoI3JpYmJvbikKKyAgICAgKiBAcmV0dXJucyBh
IG5ldyBNZXNoCisgICAgICovCisgICAgTWVzaC5DcmVhdGVSaWJib24gPSBmdW5jdGlvbiAobmFt
ZSwgcGF0aEFycmF5LCBjbG9zZUFycmF5LCBjbG9zZVBhdGgsIG9mZnNldCwgc2NlbmUsIHVwZGF0
YWJsZSwgc2lkZU9yaWVudGF0aW9uLCBpbnN0YW5jZSkgeworICAgICAgICB0aHJvdyBfTWlzY19k
ZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRvb2xzIl0uV2Fybklt
cG9ydCgiTWVzaEJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAgKiBDcmVhdGVzIGEg
cGxhbmUgcG9seWdvbmFsIG1lc2guICBCeSBkZWZhdWx0LCB0aGlzIGlzIGEgZGlzYy4gUGxlYXNl
IGNvbnNpZGVyIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBmcm9tIHRoZSBNZXNoQnVpbGRlciBjbGFz
cyBpbnN0ZWFkCisgICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1l
c2ggdG8gY3JlYXRlCisgICAgICAqIEBwYXJhbSByYWRpdXMgc2V0cyB0aGUgcmFkaXVzIHNpemUg
KGZsb2F0KSBvZiB0aGUgcG9seWdvbiAoZGVmYXVsdCAwLjUpCisgICAgICAqIEBwYXJhbSB0ZXNz
ZWxsYXRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIHBvbHlnb24gc2lkZXMgKHBvc2l0aXZlIGludGVn
ZXIsIGRlZmF1bHQgNjQpLiBTbyBhIHRlc3NlbGxhdGlvbiB2YWx1ZWQgdG8gMyB3aWxsIGJ1aWxk
IGEgdHJpYW5nbGUsIHRvIDQgYSBzcXVhcmUsIGV0YworICAgICAgKiBAcGFyYW0gc2NlbmUgZGVm
aW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMg
aWYgdGhlIG1lc2ggbXVzdCBiZSBmbGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAgKiBAcGFyYW0g
c2lkZU9yaWVudGF0aW9uIGRlZmluZXMgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiAoaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lk
ZS1vcmllbnRhdGlvbikKKyAgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAgKi8KKyAg
ICBNZXNoLkNyZWF0ZURpc2MgPSBmdW5jdGlvbiAobmFtZSwgcmFkaXVzLCB0ZXNzZWxsYXRpb24s
IHNjZW5lLCB1cGRhdGFibGUsIHNpZGVPcmllbnRhdGlvbikgeworICAgICAgICBpZiAoc2NlbmUg
PT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9v
bHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQo
Ik1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgYm94IG1l
c2guIFBsZWFzZSBjb25zaWRlciB1c2luZyB0aGUgc2FtZSBtZXRob2QgZnJvbSB0aGUgTWVzaEJ1
aWxkZXIgY2xhc3MgaW5zdGVhZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUg
b2YgdGhlIG1lc2ggdG8gY3JlYXRlCisgICAgICogQHBhcmFtIHNpemUgc2V0cyB0aGUgc2l6ZSAo
ZmxvYXQpIG9mIGVhY2ggYm94IHNpZGUgKGRlZmF1bHQgMSkKKyAgICAgKiBAcGFyYW0gc2NlbmUg
ZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSB1cGRhdGFibGUgZGVmaW5l
cyBpZiB0aGUgbWVzaCBtdXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlCisgICAgICogQHBhcmFt
IHNpZGVPcmllbnRhdGlvbiBkZWZpbmVzIHRoZSBtZXNoIHNpZGUgb3JpZW50YXRpb24gKGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3Np
ZGUtb3JpZW50YXRpb24pCisgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAg
IE1lc2guQ3JlYXRlQm94ID0gZnVuY3Rpb24gKG5hbWUsIHNpemUsIHNjZW5lLCB1cGRhdGFibGUs
IHNpZGVPcmllbnRhdGlvbikgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2Vu
ZSA9IG51bGw7IH0KKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgICogQ3JlYXRlcyBhIHNwaGVyZSBtZXNoLiBQbGVhc2UgY29u
c2lkZXIgdXNpbmcgdGhlIHNhbWUgbWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGlu
c3RlYWQKKyAgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaCB0
byBjcmVhdGUKKyAgICAgICogQHBhcmFtIHNlZ21lbnRzIHNldHMgdGhlIHNwaGVyZSBudW1iZXIg
b2YgaG9yaXpvbnRhbCBzdHJpcGVzIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDMyKQorICAg
ICAgKiBAcGFyYW0gZGlhbWV0ZXIgc2V0cyB0aGUgZGlhbWV0ZXIgc2l6ZSAoZmxvYXQpIG9mIHRo
ZSBzcGhlcmUgKGRlZmF1bHQgMSkKKyAgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhv
c3Rpbmcgc2NlbmUKKyAgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBtZXNo
IG11c3QgYmUgZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgICogQHBhcmFtIHNpZGVPcmllbnRh
dGlvbiBkZWZpbmVzIHRoZSBtZXNoIHNpZGUgb3JpZW50YXRpb24gKGh0dHA6Ly9kb2MuYmFieWxv
bmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50YXRp
b24pCisgICAgICAqIEByZXR1cm5zIGEgbmV3IE1lc2gKKyAgICAgICovCisgICAgTWVzaC5DcmVh
dGVTcGhlcmUgPSBmdW5jdGlvbiAobmFtZSwgc2VnbWVudHMsIGRpYW1ldGVyLCBzY2VuZSwgdXBk
YXRhYmxlLCBzaWRlT3JpZW50YXRpb24pIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIk1l
c2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgICogQ3JlYXRlcyBhIGhlbWlzcGhl
cmUgbWVzaC4gUGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBmcm9tIHRoZSBN
ZXNoQnVpbGRlciBjbGFzcyBpbnN0ZWFkCisgICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhl
IG5hbWUgb2YgdGhlIG1lc2ggdG8gY3JlYXRlCisgICAgICAqIEBwYXJhbSBzZWdtZW50cyBzZXRz
IHRoZSBzcGhlcmUgbnVtYmVyIG9mIGhvcml6b250YWwgc3RyaXBlcyAocG9zaXRpdmUgaW50ZWdl
ciwgZGVmYXVsdCAzMikKKyAgICAgICogQHBhcmFtIGRpYW1ldGVyIHNldHMgdGhlIGRpYW1ldGVy
IHNpemUgKGZsb2F0KSBvZiB0aGUgc3BoZXJlIChkZWZhdWx0IDEpCisgICAgICAqIEBwYXJhbSBz
Y2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICAqIEByZXR1cm5zIGEgbmV3IE1l
c2gKKyAgICAgICovCisgICAgTWVzaC5DcmVhdGVIZW1pc3BoZXJlID0gZnVuY3Rpb24gKG5hbWUs
IHNlZ21lbnRzLCBkaWFtZXRlciwgc2NlbmUpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9v
bHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQo
Ik1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgY3lsaW5k
ZXIgb3IgYSBjb25lIG1lc2guIFBsZWFzZSBjb25zaWRlciB1c2luZyB0aGUgc2FtZSBtZXRob2Qg
ZnJvbSB0aGUgTWVzaEJ1aWxkZXIgY2xhc3MgaW5zdGVhZAorICAgICAqIEBwYXJhbSBuYW1lIGRl
ZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2ggdG8gY3JlYXRlCisgICAgICogQHBhcmFtIGhlaWdo
dCBzZXRzIHRoZSBoZWlnaHQgc2l6ZSAoZmxvYXQpIG9mIHRoZSBjeWxpbmRlci9jb25lIChmbG9h
dCwgZGVmYXVsdCAyKQorICAgICAqIEBwYXJhbSBkaWFtZXRlclRvcCBzZXQgdGhlIHRvcCBjYXAg
ZGlhbWV0ZXIgKGZsb2F0cywgZGVmYXVsdCAxKQorICAgICAqIEBwYXJhbSBkaWFtZXRlckJvdHRv
bSBzZXQgdGhlIGJvdHRvbSBjYXAgZGlhbWV0ZXIgKGZsb2F0cywgZGVmYXVsdCAxKS4gVGhpcyB2
YWx1ZSBjYW4ndCBiZSB6ZXJvCisgICAgICogQHBhcmFtIHRlc3NlbGxhdGlvbiBzZXRzIHRoZSBu
dW1iZXIgb2YgY3lsaW5kZXIgc2lkZXMgKHBvc2l0aXZlIGludGVnZXIsIGRlZmF1bHQgMjQpLiBT
ZXQgaXQgdG8gMyB0byBnZXQgYSBwcmlzbSBmb3IgaW5zdGFuY2UKKyAgICAgKiBAcGFyYW0gc3Vi
ZGl2aXNpb25zIHNldHMgdGhlIG51bWJlciBvZiByaW5ncyBhbG9uZyB0aGUgY3lsaW5kZXIgaGVp
Z2h0IChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDEpCisgICAgICogQHBhcmFtIHNjZW5lIGRl
ZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMg
aWYgdGhlIG1lc2ggbXVzdCBiZSBmbGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBz
aWRlT3JpZW50YXRpb24gZGVmaW5lcyB0aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9uIChodHRwOi8v
ZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRl
LW9yaWVudGF0aW9uKQorICAgICAqIEByZXR1cm5zIGEgbmV3IE1lc2gKKyAgICAgKi8KKyAgICBN
ZXNoLkNyZWF0ZUN5bGluZGVyID0gZnVuY3Rpb24gKG5hbWUsIGhlaWdodCwgZGlhbWV0ZXJUb3As
IGRpYW1ldGVyQm90dG9tLCB0ZXNzZWxsYXRpb24sIHN1YmRpdmlzaW9ucywgc2NlbmUsIHVwZGF0
YWJsZSwgc2lkZU9yaWVudGF0aW9uKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJNZXNo
QnVpbGRlciIpOworICAgIH07CisgICAgLy8gVG9ydXMgIChDb2RlIGZyb20gU2hhcnBEWC5vcmcp
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHRvcnVzIG1lc2guIFBsZWFzZSBjb25zaWRlciB1
c2luZyB0aGUgc2FtZSBtZXRob2QgZnJvbSB0aGUgTWVzaEJ1aWxkZXIgY2xhc3MgaW5zdGVhZAor
ICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2ggdG8gY3JlYXRl
CisgICAgICogQHBhcmFtIGRpYW1ldGVyIHNldHMgdGhlIGRpYW1ldGVyIHNpemUgKGZsb2F0KSBv
ZiB0aGUgdG9ydXMgKGRlZmF1bHQgMSkKKyAgICAgKiBAcGFyYW0gdGhpY2tuZXNzIHNldHMgdGhl
IGRpYW1ldGVyIHNpemUgb2YgdGhlIHR1YmUgb2YgdGhlIHRvcnVzIChmbG9hdCwgZGVmYXVsdCAw
LjUpCisgICAgICogQHBhcmFtIHRlc3NlbGxhdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgdG9ydXMg
c2lkZXMgKHBvc3RpdmUgaW50ZWdlciwgZGVmYXVsdCAxNikKKyAgICAgKiBAcGFyYW0gc2NlbmUg
ZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSB1cGRhdGFibGUgZGVmaW5l
cyBpZiB0aGUgbWVzaCBtdXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlCisgICAgICogQHBhcmFt
IHNpZGVPcmllbnRhdGlvbiBkZWZpbmVzIHRoZSBtZXNoIHNpZGUgb3JpZW50YXRpb24gKGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3Np
ZGUtb3JpZW50YXRpb24pCisgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAg
IE1lc2guQ3JlYXRlVG9ydXMgPSBmdW5jdGlvbiAobmFtZSwgZGlhbWV0ZXIsIHRoaWNrbmVzcywg
dGVzc2VsbGF0aW9uLCBzY2VuZSwgdXBkYXRhYmxlLCBzaWRlT3JpZW50YXRpb24pIHsKKyAgICAg
ICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9E
ZXZUb29scyJdLldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgdG9ydXMga25vdCBtZXNoLiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhl
IHNhbWUgbWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQKKyAgICAgKiBA
cGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoIHRvIGNyZWF0ZQorICAgICAq
IEBwYXJhbSByYWRpdXMgc2V0cyB0aGUgZ2xvYmFsIHJhZGl1cyBzaXplIChmbG9hdCkgb2YgdGhl
IHRvcnVzIGtub3QgKGRlZmF1bHQgMikKKyAgICAgKiBAcGFyYW0gdHViZSBzZXRzIHRoZSBkaWFt
ZXRlciBzaXplIG9mIHRoZSB0dWJlIG9mIHRoZSB0b3J1cyAoZmxvYXQsIGRlZmF1bHQgMC41KQor
ICAgICAqIEBwYXJhbSByYWRpYWxTZWdtZW50cyBzZXRzIHRoZSBudW1iZXIgb2Ygc2lkZXMgb24g
ZWFjaCB0dWJlIHNlZ21lbnRzIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDMyKQorICAgICAq
IEBwYXJhbSB0dWJ1bGFyU2VnbWVudHMgc2V0cyB0aGUgbnVtYmVyIG9mIHR1YmVzIHRvIGRlY29t
cG9zZSB0aGUga25vdCBpbnRvIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDMyKQorICAgICAq
IEBwYXJhbSBwIHRoZSBudW1iZXIgb2Ygd2luZGluZ3Mgb24gWCBheGlzIChwb3NpdGl2ZSBpbnRl
Z2VycywgZGVmYXVsdCAyKQorICAgICAqIEBwYXJhbSBxIHRoZSBudW1iZXIgb2Ygd2luZGluZ3Mg
b24gWSBheGlzIChwb3NpdGl2ZSBpbnRlZ2VycywgZGVmYXVsdCAzKQorICAgICAqIEBwYXJhbSBz
Y2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBk
ZWZpbmVzIGlmIHRoZSBtZXNoIG11c3QgYmUgZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBA
cGFyYW0gc2lkZU9yaWVudGF0aW9uIGRlZmluZXMgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiAo
aHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVu
dHMjc2lkZS1vcmllbnRhdGlvbikKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBNZXNoCisgICAgICov
CisgICAgTWVzaC5DcmVhdGVUb3J1c0tub3QgPSBmdW5jdGlvbiAobmFtZSwgcmFkaXVzLCB0dWJl
LCByYWRpYWxTZWdtZW50cywgdHVidWxhclNlZ21lbnRzLCBwLCBxLCBzY2VuZSwgdXBkYXRhYmxl
LCBzaWRlT3JpZW50YXRpb24pIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIk1lc2hCdWls
ZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbGluZSBtZXNoLiBQbGVh
c2UgY29uc2lkZXIgdXNpbmcgdGhlIHNhbWUgbWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNs
YXNzIGluc3RlYWQuCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUg
bWVzaCB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0gcG9pbnRzIGlzIGFuIGFycmF5IHN1Y2Nlc3Np
dmUgVmVjdG9yMworICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5l
CisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBtZXNoIG11c3QgYmUgZmxh
Z2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBAcGFyYW0gaW5zdGFuY2UgaXMgYW4gaW5zdGFuY2Ug
b2YgYW4gZXhpc3RpbmcgTGluZU1lc2ggb2JqZWN0IHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGUgcGFz
c2VkIGBwb2ludHNgIHBhcmFtZXRlciAoaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9I
b3dfdG9fZHluYW1pY2FsbHlfbW9ycGhfYV9tZXNoI2xpbmVzLWFuZC1kYXNoZWRsaW5lcykuCisg
ICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAgIE1lc2guQ3JlYXRlTGluZXMg
PSBmdW5jdGlvbiAobmFtZSwgcG9pbnRzLCBzY2VuZSwgdXBkYXRhYmxlLCBpbnN0YW5jZSkgewor
ICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAg
aWYgKHVwZGF0YWJsZSA9PT0gdm9pZCAwKSB7IHVwZGF0YWJsZSA9IGZhbHNlOyB9CisgICAgICAg
IGlmIChpbnN0YW5jZSA9PT0gdm9pZCAwKSB7IGluc3RhbmNlID0gbnVsbDsgfQorICAgICAgICB0
aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRv
b2xzIl0uV2FybkltcG9ydCgiTWVzaEJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBkYXNoZWQgbGluZSBtZXNoLiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHNh
bWUgbWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQKKyAgICAgKiBAcGFy
YW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoIHRvIGNyZWF0ZQorICAgICAqIEBw
YXJhbSBwb2ludHMgaXMgYW4gYXJyYXkgc3VjY2Vzc2l2ZSBWZWN0b3IzCisgICAgICogQHBhcmFt
IGRhc2hTaXplIGlzIHRoZSBzaXplIG9mIHRoZSBkYXNoZXMgcmVsYXRpdmVseSB0aGUgZGFzaCBu
dW1iZXIgKHBvc2l0aXZlIGZsb2F0LCBkZWZhdWx0IDMpCisgICAgICogQHBhcmFtIGdhcFNpemUg
aXMgdGhlIHNpemUgb2YgdGhlIGdhcCBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGRhc2hlcyByZWxh
dGl2ZWx5IHRoZSBkYXNoIG51bWJlciAocG9zaXRpdmUgZmxvYXQsIGRlZmF1bHQgMSkKKyAgICAg
KiBAcGFyYW0gZGFzaE5iIGlzIHRoZSBpbnRlbmRlZCB0b3RhbCBudW1iZXIgb2YgZGFzaGVzIChw
b3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDIwMCkKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5l
cyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSB1cGRhdGFibGUgZGVmaW5lcyBpZiB0
aGUgbWVzaCBtdXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlCisgICAgICogQHBhcmFtIGluc3Rh
bmNlIGlzIGFuIGluc3RhbmNlIG9mIGFuIGV4aXN0aW5nIExpbmVNZXNoIG9iamVjdCB0byBiZSB1
cGRhdGVkIHdpdGggdGhlIHBhc3NlZCBgcG9pbnRzYCBwYXJhbWV0ZXIgKGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vSG93X3RvX2R5bmFtaWNhbGx5X21vcnBoX2FfbWVzaCNsaW5lcy1h
bmQtZGFzaGVkbGluZXMpCisgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAg
IE1lc2guQ3JlYXRlRGFzaGVkTGluZXMgPSBmdW5jdGlvbiAobmFtZSwgcG9pbnRzLCBkYXNoU2l6
ZSwgZ2FwU2l6ZSwgZGFzaE5iLCBzY2VuZSwgdXBkYXRhYmxlLCBpbnN0YW5jZSkgeworICAgICAg
ICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgdGhyb3cg
X01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJd
Lldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgcG9seWdvbiBtZXNoLlBsZWFzZSBjb25zaWRlciB1c2luZyB0aGUgc2FtZSBtZXRob2Qg
ZnJvbSB0aGUgTWVzaEJ1aWxkZXIgY2xhc3MgaW5zdGVhZAorICAgICAqIFRoZSBwb2x5Z29uJ3Mg
c2hhcGUgd2lsbCBkZXBlbmQgb24gdGhlIGlucHV0IHBhcmFtZXRlcnMgYW5kIGlzIGNvbnN0cnVj
dGVkIHBhcmFsbGVsIHRvIGEgZ3JvdW5kIG1lc2guCisgICAgICogVGhlIHBhcmFtZXRlciBgc2hh
cGVgIGlzIGEgcmVxdWlyZWQgYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzIHJlcHJlc2VudGlu
ZyB0aGUgY29ybmVycyBvZiB0aGUgcG9seWdvbiBpbiB0aCBYb1ogcGxhbmUsIHRoYXQgaXMgeSA9
IDAgZm9yIGFsbCB2ZWN0b3JzLgorICAgICAqIFlvdSBjYW4gc2V0IHRoZSBtZXNoIHNpZGUgb3Jp
ZW50YXRpb24gd2l0aCB0aGUgdmFsdWVzIDogTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBNZXNo
LkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lERQorICAgICAqIFRoZSBtZXNoIGNhbiBiZSBzZXQg
dG8gdXBkYXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZh
dWx0IGZhbHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdl
IG9uY2UgY3JlYXRlZC4KKyAgICAgKiBSZW1lbWJlciB5b3UgY2FuIG9ubHkgY2hhbmdlIHRoZSBz
aGFwZSBwb3NpdGlvbnMsIG5vdCB0aGVpciBudW1iZXIgd2hlbiB1cGRhdGluZyBhIHBvbHlnb24u
CisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BhcmFtZXRyaWNf
c2hhcGVzI25vbi1yZWd1bGFyLXBvbHlnb24KKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRo
ZSBuYW1lIG9mIHRoZSBtZXNoIHRvIGNyZWF0ZQorICAgICAqIEBwYXJhbSBzaGFwZSBpcyBhIHJl
cXVpcmVkIGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMyByZXByZXNlbnRpbmcgdGhlIGNvcm5l
cnMgb2YgdGhlIHBvbHlnb24gaW4gdGggWG9aIHBsYW5lLCB0aGF0IGlzIHkgPSAwIGZvciBhbGwg
dmVjdG9ycworICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisg
ICAgICogQHBhcmFtIGhvbGVzIGlzIGEgcmVxdWlyZWQgYXJyYXkgb2YgYXJyYXlzIG9mIHN1Y2Nl
c3NpdmUgVmVjdG9yMyB1c2VkIHRvIGRlZmluZXMgaG9sZXMgaW4gdGhlIHBvbHlnb24KKyAgICAg
KiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMgaWYgdGhlIG1lc2ggbXVzdCBiZSBmbGFnZ2VkIGFz
IHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBzaWRlT3JpZW50YXRpb24gZGVmaW5lcyB0aGUgbWVz
aCBzaWRlIG9yaWVudGF0aW9uIChodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9k
aXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uKQorICAgICAqIEBwYXJhbSBl
YXJjdXRJbmplY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW5qZWN0IHlvdXIgb3duIGVhcmN1dCByZWZl
cmVuY2UKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBNZXNoCisgICAgICovCisgICAgTWVzaC5DcmVh
dGVQb2x5Z29uID0gZnVuY3Rpb24gKG5hbWUsIHNoYXBlLCBzY2VuZSwgaG9sZXMsIHVwZGF0YWJs
ZSwgc2lkZU9yaWVudGF0aW9uLCBlYXJjdXRJbmplY3Rpb24pIHsKKyAgICAgICAgaWYgKGVhcmN1
dEluamVjdGlvbiA9PT0gdm9pZCAwKSB7IGVhcmN1dEluamVjdGlvbiA9IGVhcmN1dDsgfQorICAg
ICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1si
X0RldlRvb2xzIl0uV2FybkltcG9ydCgiTWVzaEJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgYW4gZXh0cnVkZWQgcG9seWdvbiBtZXNoLCB3aXRoIGRlcHRoIGluIHRo
ZSBZIGRpcmVjdGlvbi4gUGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBmcm9t
IHRoZSBNZXNoQnVpbGRlciBjbGFzcyBpbnN0ZWFkLgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by9wYXJhbWV0cmljX3NoYXBlcyNleHRydWRlZC1ub24tcmVndWxh
ci1wb2x5Z29uCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVz
aCB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0gc2hhcGUgaXMgYSByZXF1aXJlZCBhcnJheSBvZiBz
dWNjZXNzaXZlIFZlY3RvcjMgcmVwcmVzZW50aW5nIHRoZSBjb3JuZXJzIG9mIHRoZSBwb2x5Z29u
IGluIHRoIFhvWiBwbGFuZSwgdGhhdCBpcyB5ID0gMCBmb3IgYWxsIHZlY3RvcnMKKyAgICAgKiBA
cGFyYW0gZGVwdGggZGVmaW5lcyB0aGUgaGVpZ2h0IG9mIGV4dHJ1c2lvbgorICAgICAqIEBwYXJh
bSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIGhvbGVzIGlz
IGEgcmVxdWlyZWQgYXJyYXkgb2YgYXJyYXlzIG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMyB1c2VkIHRv
IGRlZmluZXMgaG9sZXMgaW4gdGhlIHBvbHlnb24KKyAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRl
ZmluZXMgaWYgdGhlIG1lc2ggbXVzdCBiZSBmbGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAqIEBw
YXJhbSBzaWRlT3JpZW50YXRpb24gZGVmaW5lcyB0aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9uICho
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50
cyNzaWRlLW9yaWVudGF0aW9uKQorICAgICAqIEBwYXJhbSBlYXJjdXRJbmplY3Rpb24gY2FuIGJl
IHVzZWQgdG8gaW5qZWN0IHlvdXIgb3duIGVhcmN1dCByZWZlcmVuY2UKKyAgICAgKiBAcmV0dXJu
cyBhIG5ldyBNZXNoCisgICAgICovCisgICAgTWVzaC5FeHRydWRlUG9seWdvbiA9IGZ1bmN0aW9u
IChuYW1lLCBzaGFwZSwgZGVwdGgsIHNjZW5lLCBob2xlcywgdXBkYXRhYmxlLCBzaWRlT3JpZW50
YXRpb24sIGVhcmN1dEluamVjdGlvbikgeworICAgICAgICBpZiAoZWFyY3V0SW5qZWN0aW9uID09
PSB2b2lkIDApIHsgZWFyY3V0SW5qZWN0aW9uID0gZWFyY3V0OyB9CisgICAgICAgIHRocm93IF9N
aXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJfRGV2VG9vbHMiXS5X
YXJuSW1wb3J0KCJNZXNoQnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRl
cyBhbiBleHRydWRlZCBzaGFwZSBtZXNoLgorICAgICAqIFRoZSBleHRydXNpb24gaXMgYSBwYXJh
bWV0cmljIHNoYXBlLiBJdCBoYXMgbm8gcHJlZGVmaW5lZCBzaGFwZS4gSXRzIGZpbmFsIHNoYXBl
IHdpbGwgZGVwZW5kIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgY29uc2lkZXIgdXNp
bmcgdGhlIHNhbWUgbWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQKKyAg
ICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFw
ZXMKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJp
Y19zaGFwZXMjZXh0cnVkZWQtc2hhcGVzCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
bmFtZSBvZiB0aGUgbWVzaCB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0gc2hhcGUgaXMgYSByZXF1
aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgYXJyYXkgZGVwaWN0cyB0aGUg
c2hhcGUgdG8gYmUgZXh0cnVkZWQgaW4gaXRzIGxvY2FsIHNwYWNlIDogdGhlIHNoYXBlIG11c3Qg
YmUgZGVzaWduZWQgaW4gdGhlIHhPeSBwbGFuZSBhbmQgd2lsbCBiZSBleHRydWRlZCBhbG9uZyB0
aGUgWiBheGlzCisgICAgICogQHBhcmFtIHBhdGggaXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNj
ZXNzaXZlIFZlY3RvcjMuIFRoaXMgaXMgdGhlIGF4aXMgY3VydmUgdGhlIHNoYXBlIGlzIGV4dHJ1
ZGVkIGFsb25nCisgICAgICogQHBhcmFtIHNjYWxlIGlzIHRoZSB2YWx1ZSB0byBzY2FsZSB0aGUg
c2hhcGUKKyAgICAgKiBAcGFyYW0gcm90YXRpb24gaXMgdGhlIGFuZ2xlIHZhbHVlIHRvIHJvdGF0
ZSB0aGUgc2hhcGUgZWFjaCBzdGVwIChlYWNoIHBhdGggcG9pbnQpLCBmcm9tIHRoZSBmb3JtZXIg
c3RlcCAoc28gcm90YXRpb24gYWRkZWQgZWFjaCBzdGVwKSBhbG9uZyB0aGUgY3VydmUKKyAgICAg
KiBAcGFyYW0gY2FwIHNldHMgdGhlIHdheSB0aGUgZXh0cnVkZWQgc2hhcGUgaXMgY2FwcGVkLiBQ
b3NzaWJsZSB2YWx1ZXMgOiBNZXNoLk5PX0NBUCAoZGVmYXVsdCksIE1lc2guQ0FQX1NUQVJULCBN
ZXNoLkNBUF9FTkQsIE1lc2guQ0FQX0FMTAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRo
ZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBt
ZXNoIG11c3QgYmUgZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBAcGFyYW0gc2lkZU9yaWVu
dGF0aW9uIGRlZmluZXMgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiAoaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRh
dGlvbikKKyAgICAgKiBAcGFyYW0gaW5zdGFuY2UgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gZXhpc3Rp
bmcgRXh0cnVkZWRTaGFwZSBvYmplY3QgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZSBwYXNzZWQgYHNo
YXBlYCwgYHBhdGhgLCBgc2NhbGVgIG9yIGByb3RhdGlvbmAgcGFyYW1ldGVycyAoaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9Ib3dfdG9fZHluYW1pY2FsbHlfbW9ycGhfYV9tZXNoI2V4
dHJ1ZGVkLXNoYXBlKQorICAgICAqIEByZXR1cm5zIGEgbmV3IE1lc2gKKyAgICAgKi8KKyAgICBN
ZXNoLkV4dHJ1ZGVTaGFwZSA9IGZ1bmN0aW9uIChuYW1lLCBzaGFwZSwgcGF0aCwgc2NhbGUsIHJv
dGF0aW9uLCBjYXAsIHNjZW5lLCB1cGRhdGFibGUsIHNpZGVPcmllbnRhdGlvbiwgaW5zdGFuY2Up
IHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAg
ICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJf
RGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJNZXNoQnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhbiBjdXN0b20gZXh0cnVkZWQgc2hhcGUgbWVzaC4KKyAgICAgKiBUaGUg
Y3VzdG9tIGV4dHJ1c2lvbiBpcyBhIHBhcmFtZXRyaWMgc2hhcGUuCisgICAgICogSXQgaGFzIG5v
IHByZWRlZmluZWQgc2hhcGUuIEl0cyBmaW5hbCBzaGFwZSB3aWxsIGRlcGVuZCBvbiB0aGUgaW5w
dXQgcGFyYW1ldGVycy4KKyAgICAgKiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHNhbWUgbWV0
aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQKKyAgICAgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjZXh0cnVkZWQtc2hh
cGVzCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaCB0byBj
cmVhdGUKKyAgICAgKiBAcGFyYW0gc2hhcGUgaXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNz
aXZlIFZlY3RvcjMuIFRoaXMgYXJyYXkgZGVwaWN0cyB0aGUgc2hhcGUgdG8gYmUgZXh0cnVkZWQg
aW4gaXRzIGxvY2FsIHNwYWNlIDogdGhlIHNoYXBlIG11c3QgYmUgZGVzaWduZWQgaW4gdGhlIHhP
eSBwbGFuZSBhbmQgd2lsbCBiZSBleHRydWRlZCBhbG9uZyB0aGUgWiBheGlzCisgICAgICogQHBh
cmFtIHBhdGggaXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMg
aXMgdGhlIGF4aXMgY3VydmUgdGhlIHNoYXBlIGlzIGV4dHJ1ZGVkIGFsb25nCisgICAgICogQHBh
cmFtIHNjYWxlRnVuY3Rpb24gaXMgYSBjdXN0b20gSmF2YXNjcmlwdCBmdW5jdGlvbiBjYWxsZWQg
b24gZWFjaCBwYXRoIHBvaW50CisgICAgICogQHBhcmFtIHJvdGF0aW9uRnVuY3Rpb24gaXMgYSBj
dXN0b20gSmF2YXNjcmlwdCBmdW5jdGlvbiBjYWxsZWQgb24gZWFjaCBwYXRoIHBvaW50CisgICAg
ICogQHBhcmFtIHJpYmJvbkNsb3NlQXJyYXkgZm9yY2VzIHRoZSBleHRydXNpb24gdW5kZXJseWlu
ZyByaWJib24gdG8gY2xvc2UgYWxsIHRoZSBwYXRocyBpbiBpdHMgYHBhdGhBcnJheWAKKyAgICAg
KiBAcGFyYW0gcmliYm9uQ2xvc2VQYXRoIGZvcmNlcyB0aGUgZXh0cnVzaW9uIHVuZGVybHlpbmcg
cmliYm9uIHRvIGNsb3NlIGl0cyBgcGF0aEFycmF5YAorICAgICAqIEBwYXJhbSBjYXAgc2V0cyB0
aGUgd2F5IHRoZSBleHRydWRlZCBzaGFwZSBpcyBjYXBwZWQuIFBvc3NpYmxlIHZhbHVlcyA6IE1l
c2guTk9fQ0FQIChkZWZhdWx0KSwgTWVzaC5DQVBfU1RBUlQsIE1lc2guQ0FQX0VORCwgTWVzaC5D
QVBfQUxMCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAg
ICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMgaWYgdGhlIG1lc2ggbXVzdCBiZSBmbGFnZ2Vk
IGFzIHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBzaWRlT3JpZW50YXRpb24gZGVmaW5lcyB0aGUg
bWVzaCBzaWRlIG9yaWVudGF0aW9uIChodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEw
MS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uKQorICAgICAqIEBwYXJh
bSBpbnN0YW5jZSBpcyBhbiBpbnN0YW5jZSBvZiBhbiBleGlzdGluZyBFeHRydWRlZFNoYXBlIG9i
amVjdCB0byBiZSB1cGRhdGVkIHdpdGggdGhlIHBhc3NlZCBgc2hhcGVgLCBgcGF0aGAsIGBzY2Fs
ZWAgb3IgYHJvdGF0aW9uYCBwYXJhbWV0ZXJzIChodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL2hvd190b19keW5hbWljYWxseV9tb3JwaF9hX21lc2gjZXh0cnVkZWQtc2hhcGUpCisgICAg
ICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAgIE1lc2guRXh0cnVkZVNoYXBlQ3Vz
dG9tID0gZnVuY3Rpb24gKG5hbWUsIHNoYXBlLCBwYXRoLCBzY2FsZUZ1bmN0aW9uLCByb3RhdGlv
bkZ1bmN0aW9uLCByaWJib25DbG9zZUFycmF5LCByaWJib25DbG9zZVBhdGgsIGNhcCwgc2NlbmUs
IHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uLCBpbnN0YW5jZSkgeworICAgICAgICB0aHJvdyBf
TWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRvb2xzIl0u
V2FybkltcG9ydCgiTWVzaEJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0
ZXMgbGF0aGUgbWVzaC4KKyAgICAgKiBUaGUgbGF0aGUgaXMgYSBzaGFwZSB3aXRoIGEgc3ltZXRy
eSBheGlzIDogYSAyRCBtb2RlbCBzaGFwZSBpcyByb3RhdGVkIGFyb3VuZCB0aGlzIGF4aXMgdG8g
ZGVzaWduIHRoZSBsYXRoZS4KKyAgICAgKiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHNhbWUg
bWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQKKyAgICAgKiBAcGFyYW0g
bmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoIHRvIGNyZWF0ZQorICAgICAqIEBwYXJh
bSBzaGFwZSBpcyBhIHJlcXVpcmVkIGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMy4gVGhpcyBh
cnJheSBkZXBpY3RzIHRoZSBzaGFwZSB0byBiZSByb3RhdGVkIGluIGl0cyBsb2NhbCBzcGFjZSA6
IHRoZSBzaGFwZSBtdXN0IGJlIGRlc2lnbmVkIGluIHRoZSB4T3kgcGxhbmUgYW5kIHdpbGwgYmUg
cm90YXRlZCBhcm91bmQgdGhlIFkgYXhpcy4gSXQncyB1c3VhbGx5IGEgMkQgc2hhcGUsIHNvIHRo
ZSBWZWN0b3IzIHogY29vcmRpbmF0ZXMgYXJlIG9mdGVuIHNldCB0byB6ZXJvCisgICAgICogQHBh
cmFtIHJhZGl1cyBpcyB0aGUgcmFkaXVzIHZhbHVlIG9mIHRoZSBsYXRoZQorICAgICAqIEBwYXJh
bSB0ZXNzZWxsYXRpb24gaXMgdGhlIHNpZGUgbnVtYmVyIG9mIHRoZSBsYXRoZS4KKyAgICAgKiBA
cGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSB1cGRh
dGFibGUgZGVmaW5lcyBpZiB0aGUgbWVzaCBtdXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlCisg
ICAgICogQHBhcmFtIHNpZGVPcmllbnRhdGlvbiBkZWZpbmVzIHRoZSBtZXNoIHNpZGUgb3JpZW50
YXRpb24gKGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2lj
X2VsZW1lbnRzI3NpZGUtb3JpZW50YXRpb24pCisgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAor
ICAgICAqLworICAgIE1lc2guQ3JlYXRlTGF0aGUgPSBmdW5jdGlvbiAobmFtZSwgc2hhcGUsIHJh
ZGl1cywgdGVzc2VsbGF0aW9uLCBzY2VuZSwgdXBkYXRhYmxlLCBzaWRlT3JpZW50YXRpb24pIHsK
KyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIx
X19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgcGxhbmUgbWVzaC4gUGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRo
ZSBzYW1lIG1ldGhvZCBmcm9tIHRoZSBNZXNoQnVpbGRlciBjbGFzcyBpbnN0ZWFkCisgICAgICog
QHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaCB0byBjcmVhdGUKKyAgICAg
KiBAcGFyYW0gc2l6ZSBzZXRzIHRoZSBzaXplIChmbG9hdCkgb2YgYm90aCBzaWRlcyBvZiB0aGUg
cGxhbmUgYXQgb25jZSAoZGVmYXVsdCAxKQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRo
ZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBt
ZXNoIG11c3QgYmUgZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBAcGFyYW0gc2lkZU9yaWVu
dGF0aW9uIGRlZmluZXMgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiAoaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRh
dGlvbikKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBNZXNoCisgICAgICovCisgICAgTWVzaC5DcmVh
dGVQbGFuZSA9IGZ1bmN0aW9uIChuYW1lLCBzaXplLCBzY2VuZSwgdXBkYXRhYmxlLCBzaWRlT3Jp
ZW50YXRpb24pIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgZ3JvdW5kIG1lc2guCisgICAgICogUGxl
YXNlIGNvbnNpZGVyIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBmcm9tIHRoZSBNZXNoQnVpbGRlciBj
bGFzcyBpbnN0ZWFkCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUg
bWVzaCB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0gd2lkdGggc2V0IHRoZSB3aWR0aCBvZiB0aGUg
Z3JvdW5kCisgICAgICogQHBhcmFtIGhlaWdodCBzZXQgdGhlIGhlaWdodCBvZiB0aGUgZ3JvdW5k
CisgICAgICogQHBhcmFtIHN1YmRpdmlzaW9ucyBzZXRzIHRoZSBudW1iZXIgb2Ygc3ViZGl2aXNp
b25zIHBlciBzaWRlCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2Nl
bmUKKyAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMgaWYgdGhlIG1lc2ggbXVzdCBiZSBm
bGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAqIEByZXR1cm5zIGEgbmV3IE1lc2gKKyAgICAgKi8K
KyAgICBNZXNoLkNyZWF0ZUdyb3VuZCA9IGZ1bmN0aW9uIChuYW1lLCB3aWR0aCwgaGVpZ2h0LCBz
dWJkaXZpc2lvbnMsIHNjZW5lLCB1cGRhdGFibGUpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2
VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBv
cnQoIk1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgdGls
ZWQgZ3JvdW5kIG1lc2guCisgICAgICogUGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRoZSBzYW1lIG1l
dGhvZCBmcm9tIHRoZSBNZXNoQnVpbGRlciBjbGFzcyBpbnN0ZWFkCisgICAgICogQHBhcmFtIG5h
bWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaCB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0g
eG1pbiBzZXQgdGhlIGdyb3VuZCBtaW5pbXVtIFggY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSB6
bWluIHNldCB0aGUgZ3JvdW5kIG1pbmltdW0gWSBjb29yZGluYXRlCisgICAgICogQHBhcmFtIHht
YXggc2V0IHRoZSBncm91bmQgbWF4aW11bSBYIGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gem1h
eCBzZXQgdGhlIGdyb3VuZCBtYXhpbXVtIFogY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSBzdWJk
aXZpc2lvbnMgaXMgYW4gb2JqZWN0IGB7dzogcG9zaXRpdmUgaW50ZWdlciwgaDogcG9zaXRpdmUg
aW50ZWdlcn1gIChkZWZhdWx0IGB7dzogNiwgaDogNn1gKS4gYHdgIGFuZCBgaGAgYXJlIHRoZSBu
dW1iZXJzIG9mIHN1YmRpdmlzaW9ucyBvbiB0aGUgZ3JvdW5kIHdpZHRoIGFuZCBoZWlnaHQuIEVh
Y2ggc3ViZGl2aXNpb24gaXMgY2FsbGVkIGEgdGlsZQorICAgICAqIEBwYXJhbSBwcmVjaXNpb24g
aXMgYW4gb2JqZWN0IGB7dzogcG9zaXRpdmUgaW50ZWdlciwgaDogcG9zaXRpdmUgaW50ZWdlcn1g
IChkZWZhdWx0IGB7dzogMiwgaDogMn1gKS4gYHdgIGFuZCBgaGAgYXJlIHRoZSBudW1iZXJzIG9m
IHN1YmRpdmlzaW9ucyBvbiB0aGUgZ3JvdW5kIHdpZHRoIGFuZCBoZWlnaHQgb2YgZWFjaCB0aWxl
CisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBA
cGFyYW0gdXBkYXRhYmxlIGRlZmluZXMgaWYgdGhlIG1lc2ggbXVzdCBiZSBmbGFnZ2VkIGFzIHVw
ZGF0YWJsZQorICAgICAqIEByZXR1cm5zIGEgbmV3IE1lc2gKKyAgICAgKi8KKyAgICBNZXNoLkNy
ZWF0ZVRpbGVkR3JvdW5kID0gZnVuY3Rpb24gKG5hbWUsIHhtaW4sIHptaW4sIHhtYXgsIHptYXgs
IHN1YmRpdmlzaW9ucywgcHJlY2lzaW9uLCBzY2VuZSwgdXBkYXRhYmxlKSB7CisgICAgICAgIHRo
cm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJfRGV2VG9v
bHMiXS5XYXJuSW1wb3J0KCJNZXNoQnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIGdyb3VuZCBtZXNoIGZyb20gYSBoZWlnaHQgbWFwLgorICAgICAqIFBsZWFzZSBj
b25zaWRlciB1c2luZyB0aGUgc2FtZSBtZXRob2QgZnJvbSB0aGUgTWVzaEJ1aWxkZXIgY2xhc3Mg
aW5zdGVhZAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEv
aGVpZ2h0X21hcAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1l
c2ggdG8gY3JlYXRlCisgICAgICogQHBhcmFtIHVybCBzZXRzIHRoZSBVUkwgb2YgdGhlIGhlaWdo
dCBtYXAgaW1hZ2UgcmVzb3VyY2UKKyAgICAgKiBAcGFyYW0gd2lkdGggc2V0IHRoZSBncm91bmQg
d2lkdGggc2l6ZQorICAgICAqIEBwYXJhbSBoZWlnaHQgc2V0IHRoZSBncm91bmQgaGVpZ2h0IHNp
emUKKyAgICAgKiBAcGFyYW0gc3ViZGl2aXNpb25zIHNldHMgdGhlIG51bWJlciBvZiBzdWJkaXZp
c2lvbiBwZXIgc2lkZQorICAgICAqIEBwYXJhbSBtaW5IZWlnaHQgaXMgdGhlIG1pbmltdW0gYWx0
aXR1ZGUgb24gdGhlIGdyb3VuZAorICAgICAqIEBwYXJhbSBtYXhIZWlnaHQgaXMgdGhlIG1heGlt
dW0gYWx0aXR1ZGUgb24gdGhlIGdyb3VuZAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRo
ZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBt
ZXNoIG11c3QgYmUgZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBAcGFyYW0gb25SZWFkeSAg
aXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkICBvbmNlIHRoZSBtZXNo
IGlzIGJ1aWx0ICh0aGUgaGVpZ2h0IG1hcCBkb3dubG9hZCBjYW4gbGFzdCBzb21lIHRpbWUpCisg
ICAgICogQHBhcmFtIGFscGhhRmlsdGVyIHdpbGwgZmlsdGVyIGFueSBkYXRhIHdoZXJlIHRoZSBh
bHBoYSBjaGFubmVsIGlzIGJlbG93IHRoaXMgdmFsdWUsIGRlZmF1bHRzIDAgKGFsbCBkYXRhIHZp
c2libGUpCisgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAgIE1lc2guQ3Jl
YXRlR3JvdW5kRnJvbUhlaWdodE1hcCA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIHdpZHRoLCBoZWln
aHQsIHN1YmRpdmlzaW9ucywgbWluSGVpZ2h0LCBtYXhIZWlnaHQsIHNjZW5lLCB1cGRhdGFibGUs
IG9uUmVhZHksIGFscGhhRmlsdGVyKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJNZXNo
QnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHR1YmUgbWVzaC4K
KyAgICAgKiBUaGUgdHViZSBpcyBhIHBhcmFtZXRyaWMgc2hhcGUuCisgICAgICogSXQgaGFzIG5v
IHByZWRlZmluZWQgc2hhcGUuIEl0cyBmaW5hbCBzaGFwZSB3aWxsIGRlcGVuZCBvbiB0aGUgaW5w
dXQgcGFyYW1ldGVycy4KKyAgICAgKiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHNhbWUgbWV0
aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQKKyAgICAgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMKKyAgICAgKiBAcGFy
YW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoIHRvIGNyZWF0ZQorICAgICAqIEBw
YXJhbSBwYXRoIGlzIGEgcmVxdWlyZWQgYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzLiBJdCBp
cyB0aGUgY3VydmUgdXNlZCBhcyB0aGUgYXhpcyBvZiB0aGUgdHViZQorICAgICAqIEBwYXJhbSBy
YWRpdXMgc2V0cyB0aGUgdHViZSByYWRpdXMgc2l6ZQorICAgICAqIEBwYXJhbSB0ZXNzZWxsYXRp
b24gaXMgdGhlIG51bWJlciBvZiBzaWRlcyBvbiB0aGUgdHVidWxhciBzdXJmYWNlCisgICAgICog
QHBhcmFtIHJhZGl1c0Z1bmN0aW9uIGlzIGEgY3VzdG9tIGZ1bmN0aW9uLiBJZiBpdCBpcyBub3Qg
bnVsbCwgaXQgb3ZlcndyaXR0ZXMgdGhlIHBhcmFtZXRlciBgcmFkaXVzYC4gVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgb24gZWFjaCBwb2ludCBvZiB0aGUgdHViZSBwYXRoIGFuZCBpcyBwYXNzZWQg
dGhlIGluZGV4IGBpYCBvZiB0aGUgaS10aCBwb2ludCBhbmQgdGhlIGRpc3RhbmNlIG9mIHRoaXMg
cG9pbnQgZnJvbSB0aGUgZmlyc3QgcG9pbnQgb2YgdGhlIHBhdGgKKyAgICAgKiBAcGFyYW0gY2Fw
IHNldHMgdGhlIHdheSB0aGUgZXh0cnVkZWQgc2hhcGUgaXMgY2FwcGVkLiBQb3NzaWJsZSB2YWx1
ZXMgOiBNZXNoLk5PX0NBUCAoZGVmYXVsdCksIE1lc2guQ0FQX1NUQVJULCBNZXNoLkNBUF9FTkQs
IE1lc2guQ0FQX0FMTAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNj
ZW5lCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBtZXNoIG11c3QgYmUg
ZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBAcGFyYW0gc2lkZU9yaWVudGF0aW9uIGRlZmlu
ZXMgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiAoaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2Jh
Ynlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRhdGlvbikKKyAgICAg
KiBAcGFyYW0gaW5zdGFuY2UgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gZXhpc3RpbmcgVHViZSBvYmpl
Y3QgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZSBwYXNzZWQgYHBhdGhBcnJheWAgcGFyYW1ldGVyICho
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL0hvd190b19keW5hbWljYWxseV9tb3JwaF9h
X21lc2gjdHViZSkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBNZXNoCisgICAgICovCisgICAgTWVz
aC5DcmVhdGVUdWJlID0gZnVuY3Rpb24gKG5hbWUsIHBhdGgsIHJhZGl1cywgdGVzc2VsbGF0aW9u
LCByYWRpdXNGdW5jdGlvbiwgY2FwLCBzY2VuZSwgdXBkYXRhYmxlLCBzaWRlT3JpZW50YXRpb24s
IGluc3RhbmNlKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMV9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJNZXNoQnVpbGRlciIpOwor
ICAgIH07CisgICAgLyoqCisgICAgICAqIENyZWF0ZXMgYSBwb2x5aGVkcm9uIG1lc2guCisgICAg
ICAqIFBsZWFzZSBjb25zaWRlciB1c2luZyB0aGUgc2FtZSBtZXRob2QgZnJvbSB0aGUgTWVzaEJ1
aWxkZXIgY2xhc3MgaW5zdGVhZC4KKyAgICAgICogKiBUaGUgcGFyYW1ldGVyIGB0eXBlYCAocG9z
aXRpdmUgaW50ZWdlciwgbWF4IDE0LCBkZWZhdWx0IDApIHNldHMgdGhlIHBvbHloZWRyb24gdHlw
ZSB0byBidWlsZCBhbW9uZyB0aGUgMTUgZW1iYmVkZWQgdHlwZXMuIFBsZWFzZSByZWZlciB0byB0
aGUgdHlwZSBzaGVldCBpbiB0aGUgdHV0b3JpYWwgdG8gY2hvb3NlIHRoZSB3YW50ZWQgdHlwZQor
ICAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHNpemVgIChwb3NpdGl2ZSBmbG9hdCwgZGVmYXVsdCAx
KSBzZXRzIHRoZSBwb2x5Z29uIHNpemUKKyAgICAgICogKiBZb3UgY2FuIG92ZXJ3cml0ZSB0aGUg
YHNpemVgIG9uIGVhY2ggZGltZW5zaW9uIGJ1IHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGBzaXplWGAs
IGBzaXplWWAgb3IgYHNpemVaYCAocG9zaXRpdmUgZmxvYXRzLCBkZWZhdWx0IHRvIGBzaXplYCB2
YWx1ZSkKKyAgICAgICogKiBZb3UgY2FuIGJ1aWxkIG90aGVyIHBvbHloZWRyb24gdHlwZXMgdGhh
biB0aGUgMTUgZW1iYmVkZWQgb25lcyBieSBzZXR0aW5nIHRoZSBwYXJhbWV0ZXIgYGN1c3RvbWAg
KGBwb2x5aGVkcm9uT2JqZWN0YCwgZGVmYXVsdCBudWxsKS4gSWYgeW91IHNldCB0aGUgcGFyYW1l
dGVyIGBjdXN0b21gLCB0aGlzIG92ZXJ3cml0dGVzIHRoZSBwYXJhbWV0ZXIgYHR5cGVgCisgICAg
ICAqICogQSBgcG9seWhlZHJvbk9iamVjdGAgaXMgYSBmb3JtYXR0ZWQgamF2YXNjcmlwdCBvYmpl
Y3QuIFlvdSdsbCBmaW5kIGEgZnVsbCBmaWxlIHdpdGggcHJlLXNldCBwb2x5aGVkcmEgaGVyZSA6
IGh0dHBzOi8vZ2l0aHViLmNvbS9CYWJ5bG9uSlMvRXh0ZW5zaW9ucy90cmVlL21hc3Rlci9Qb2x5
aGVkcm9uCisgICAgICAqICogWW91IGNhbiBzZXQgdGhlIGNvbG9yIGFuZCB0aGUgVVYgb2YgZWFj
aCBzaWRlIG9mIHRoZSBwb2x5aGVkcm9uIHdpdGggdGhlIHBhcmFtZXRlcnMgYGZhY2VDb2xvcnNg
IChDb2xvcjQsIGRlZmF1bHQgYCgxLCAxLCAxLCAxKWApIGFuZCBmYWNlVVYgKFZlY3RvcjQsIGRl
ZmF1bHQgYCgwLCAwLCAxLCAxKWApCisgICAgICAqICogVG8gdW5kZXJzdGFuZCBob3cgdG8gc2V0
IGBmYWNlVVZgIG9yIGBmYWNlQ29sb3JzYCwgcGxlYXNlIHJlYWQgdGhpcyBieSBjb25zaWRlcmlu
ZyB0aGUgcmlnaHQgbnVtYmVyIG9mIGZhY2VzIG9mIHlvdXIgcG9seWhlZHJvbiwgaW5zdGVhZCBv
ZiBvbmx5IDYgZm9yIHRoZSBib3ggOiBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9j
cmVhdGVib3hfcGVyX2ZhY2VfdGV4dHVyZXNfYW5kX2NvbG9ycworICAgICAgKiAqIFRoZSBwYXJh
bWV0ZXIgYGZsYXRgIChib29sZWFuLCBkZWZhdWx0IHRydWUpLiBJZiBzZXQgdG8gZmFsc2UsIGl0
IGdpdmVzIHRoZSBwb2x5aGVkcm9uIGEgc2luZ2xlIGdsb2JhbCBmYWNlLCBzbyBsZXNzIHZlcnRp
Y2VzIGFuZCBzaGFyZWQgbm9ybWFscy4gSW4gdGhpcyBjYXNlLCBgZmFjZUNvbG9yc2AgYW5kIGBm
YWNlVVZgIGFyZSBpZ25vcmVkCisgICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBz
aWRlIG9yaWVudGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IE1lc2guRlJPTlRTSURFIChkZWZhdWx0
KSwgTWVzaC5CQUNLU0lERSBvciBNZXNoLkRPVUJMRVNJREUKKyAgICAgICogKiBJZiB5b3UgY3Jl
YXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhl
IHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9u
dCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBg
YmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNv
bS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50YXRpb24KKyAg
ICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFu
IHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdl
b21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAgICAgICogQHBhcmFt
IG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaCB0byBjcmVhdGUKKyAgICAgICogQHBh
cmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAor
ICAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAgKiBA
cmV0dXJucyBhIG5ldyBNZXNoCisgICAgICAqLworICAgIE1lc2guQ3JlYXRlUG9seWhlZHJvbiA9
IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkgeworICAgICAgICB0aHJvdyBfTWlzY19k
ZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRvb2xzIl0uV2Fybklt
cG9ydCgiTWVzaEJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBz
cGhlcmUgYmFzZWQgdXBvbiBhbiBpY29zYWhlZHJvbiB3aXRoIDIwIHRyaWFuZ3VsYXIgZmFjZXMg
d2hpY2ggY2FuIGJlIHN1YmRpdmlkZWQKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHJhZGl1c2Ag
c2V0cyB0aGUgcmFkaXVzIHNpemUgKGZsb2F0KSBvZiB0aGUgaWNvc3BoZXJlIChkZWZhdWx0IDEp
CisgICAgICogKiBZb3UgY2FuIHNldCBzb21lIGRpZmZlcmVudCBpY29zcGhlcmUgZGltZW5zaW9u
cywgZm9yIGluc3RhbmNlIHRvIGJ1aWxkIGFuIGVsbGlwc29pZCwgYnkgdXNpbmcgdGhlIHBhcmFt
ZXRlcnMgYHJhZGl1c1hgLCBgcmFkaXVzWWAgYW5kIGByYWRpdXNaYCAoYWxsIGJ5IGRlZmF1bHQg
aGF2ZSB0aGUgc2FtZSB2YWx1ZSB0aGFuIGByYWRpdXNgKQorICAgICAqICogVGhlIHBhcmFtZXRl
ciBgc3ViZGl2aXNpb25zYCBzZXRzIHRoZSBudW1iZXIgb2Ygc3ViZGl2aXNpb25zIChwb3N0aXZl
IGludGVnZXIsIGRlZmF1bHQgNCkuIFRoZSBtb3JlIHN1YmRpdmlzaW9ucywgdGhlIG1vcmUgZmFj
ZXMgb24gdGhlIGljb3NwaGVyZSB3aGF0ZXZlciBpdHMgc2l6ZQorICAgICAqICogVGhlIHBhcmFt
ZXRlciBgZmxhdGAgKGJvb2xlYW4sIGRlZmF1bHQgdHJ1ZSkgZ2l2ZXMgZWFjaCBzaWRlIGl0cyBv
d24gbm9ybWFscy4gU2V0IGl0IHRvIGZhbHNlIHRvIGdldCBhIHNtb290aCBjb250aW51b3VzIGxp
Z2h0IHJlZmxlY3Rpb24gb24gdGhlIHN1cmZhY2UKKyAgICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQg
dGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBNZXNoLkZST05UU0lE
RSAoZGVmYXVsdCksIE1lc2guQkFDS1NJREUgb3IgTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJ
ZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFy
dHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9u
IHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRV
VnNgIGFuZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50
YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhl
IGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50
ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAorICAgICAq
IEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0g
b3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisgICAg
ICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJu
cyBhIG5ldyBNZXNoCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3Rv
L3BvbHloZWRyYV9zaGFwZXMjaWNvc3BoZXJlCisgICAgICovCisgICAgTWVzaC5DcmVhdGVJY29T
cGhlcmUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgdGhyb3cg
X01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJd
Lldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgZGVjYWwgbWVzaC4KKyAgICAgKiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHNhbWUg
bWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQuCisgICAgICogQSBkZWNh
bCBpcyBhIG1lc2ggdXN1YWxseSBhcHBsaWVkIGFzIGEgbW9kZWwgb250byB0aGUgc3VyZmFjZSBv
ZiBhbm90aGVyIG1lc2gKKyAgICAgKiBAcGFyYW0gbmFtZSAgZGVmaW5lcyB0aGUgbmFtZSBvZiB0
aGUgbWVzaAorICAgICAqIEBwYXJhbSBzb3VyY2VNZXNoIGRlZmluZXMgdGhlIG1lc2ggcmVjZWl2
aW5nIHRoZSBkZWNhbAorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBzZXRzIHRoZSBwb3NpdGlvbiBv
ZiB0aGUgZGVjYWwgaW4gd29ybGQgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gbm9ybWFsIHNl
dHMgdGhlIG5vcm1hbCBvZiB0aGUgbWVzaCB3aGVyZSB0aGUgZGVjYWwgaXMgYXBwbGllZCBvbnRv
IGluIHdvcmxkIGNvb3JkaW5hdGVzCisgICAgICogQHBhcmFtIHNpemUgc2V0cyB0aGUgZGVjYWwg
c2NhbGluZworICAgICAqIEBwYXJhbSBhbmdsZSBzZXRzIHRoZSBhbmdsZSB0byByb3RhdGUgdGhl
IGRlY2FsCisgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAgIE1lc2guQ3Jl
YXRlRGVjYWwgPSBmdW5jdGlvbiAobmFtZSwgc291cmNlTWVzaCwgcG9zaXRpb24sIG5vcm1hbCwg
c2l6ZSwgYW5nbGUpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7
CisgICAgfTsKKyAgICAvLyBTa2VsZXRvbnMKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlIGludGVy
bmFsIHBvc2l0aW9uIGFycmF5IGZvciBzb2Z0d2FyZSBDUFUgc2tpbm5pbmcKKyAgICAgKiBAcmV0
dXJucyBvcmlnaW5hbCBwb3NpdGlvbnMgdXNlZCBmb3IgQ1BVIHNraW5uaW5nLiBVc2VmdWwgZm9y
IGludGVncmF0aW5nIE1vcnBoaW5nIHdpdGggc2tlbGV0b25zIGluIHNhbWUgbWVzaAorICAgICAq
LworICAgIE1lc2gucHJvdG90eXBlLnNldFBvc2l0aW9uc0ZvckNQVVNraW5uaW5nID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB2YXIgaW50ZXJuYWxEYXRhSW5mbyA9IHRoaXMuX2ludGVybmFsTWVz
aERhdGFJbmZvOworICAgICAgICBpZiAoIWludGVybmFsRGF0YUluZm8uX3NvdXJjZVBvc2l0aW9u
cykgeworICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25L
aW5kKTsKKyAgICAgICAgICAgIGlmICghc291cmNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGludGVybmFsRGF0YUluZm8uX3NvdXJjZVBvc2l0aW9uczsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGludGVybmFsRGF0YUluZm8uX3NvdXJjZVBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJy
YXkoc291cmNlKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5pc1ZlcnRleEJ1ZmZlclVwZGF0YWJs
ZShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLlBv
c2l0aW9uS2luZCkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNldFZlcnRpY2VzRGF0YShfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9u
S2luZCwgc291cmNlLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gaW50ZXJuYWxEYXRhSW5mby5fc291cmNlUG9zaXRpb25zOworICAgIH07CisgICAgLyoq
CisgICAgICogUHJlcGFyZSBpbnRlcm5hbCBub3JtYWwgYXJyYXkgZm9yIHNvZnR3YXJlIENQVSBz
a2lubmluZworICAgICAqIEByZXR1cm5zIG9yaWdpbmFsIG5vcm1hbHMgdXNlZCBmb3IgQ1BVIHNr
aW5uaW5nLiBVc2VmdWwgZm9yIGludGVncmF0aW5nIE1vcnBoaW5nIHdpdGggc2tlbGV0b25zIGlu
IHNhbWUgbWVzaC4KKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5zZXROb3JtYWxzRm9yQ1BV
U2tpbm5pbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpbnRlcm5hbERhdGFJbmZvID0g
dGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm87CisgICAgICAgIGlmICghaW50ZXJuYWxEYXRhSW5m
by5fc291cmNlTm9ybWFscykgeworICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMuZ2V0VmVy
dGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVm
ZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAgICAgICBpZiAoIXNvdXJjZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBpbnRlcm5hbERhdGFJbmZvLl9zb3VyY2VOb3JtYWxzOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaW50ZXJuYWxEYXRhSW5mby5fc291cmNlTm9ybWFscyA9IG5ldyBG
bG9hdDMyQXJyYXkoc291cmNlKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5pc1ZlcnRleEJ1ZmZl
clVwZGF0YWJsZShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1
ZmZlciJdLk5vcm1hbEtpbmQpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zZXRWZXJ0aWNlc0Rh
dGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5O
b3JtYWxLaW5kLCBzb3VyY2UsIHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBpbnRlcm5hbERhdGFJbmZvLl9zb3VyY2VOb3JtYWxzOworICAgIH07CisgICAg
LyoqCisgICAgICogVXBkYXRlcyB0aGUgdmVydGV4IGJ1ZmZlciBieSBhcHBseWluZyB0cmFuc2Zv
cm1hdGlvbiBmcm9tIHRoZSBib25lcworICAgICAqIEBwYXJhbSBza2VsZXRvbiBkZWZpbmVzIHRo
ZSBza2VsZXRvbiB0byBhcHBseSB0byBjdXJyZW50IG1lc2gKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y3VycmVudCBtZXNoCisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUuYXBwbHlTa2VsZXRvbiA9
IGZ1bmN0aW9uIChza2VsZXRvbikgeworICAgICAgICBpZiAoIXRoaXMuZ2VvbWV0cnkpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmdlb21l
dHJ5Ll9zb2Z0d2FyZVNraW5uaW5nRnJhbWVJZCA9PSB0aGlzLmdldFNjZW5lKCkuZ2V0RnJhbWVJ
ZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Lmdlb21ldHJ5Ll9zb2Z0d2FyZVNraW5uaW5nRnJhbWVJZCA9IHRoaXMuZ2V0U2NlbmUoKS5nZXRG
cmFtZUlkKCk7CisgICAgICAgIGlmICghdGhpcy5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktp
bmQpKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IXRoaXMuaXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCkpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5pc1ZlcnRpY2VzRGF0YVByZXNl
bnQoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5N
YXRyaWNlc0luZGljZXNLaW5kKSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCF0aGlzLmlzVmVydGljZXNEYXRhUHJlc2VudChfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tp
bmQpKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB2YXIg
aW50ZXJuYWxEYXRhSW5mbyA9IHRoaXMuX2ludGVybmFsTWVzaERhdGFJbmZvOworICAgICAgICBp
ZiAoIWludGVybmFsRGF0YUluZm8uX3NvdXJjZVBvc2l0aW9ucykgeworICAgICAgICAgICAgdmFy
IHN1Ym1lc2hlcyA9IHRoaXMuc3ViTWVzaGVzLnNsaWNlKCk7CisgICAgICAgICAgICB0aGlzLnNl
dFBvc2l0aW9uc0ZvckNQVVNraW5uaW5nKCk7CisgICAgICAgICAgICB0aGlzLnN1Yk1lc2hlcyA9
IHN1Ym1lc2hlczsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWludGVybmFsRGF0YUluZm8uX3Nv
dXJjZU5vcm1hbHMpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0Tm9ybWFsc0ZvckNQVVNraW5uaW5n
KCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gcG9zaXRpb25zRGF0YSBjaGVja3MgZm9yIG5vdCBi
ZWluZyBGbG9hdDMyQXJyYXkgd2lsbCBvbmx5IHBhc3MgYXQgbW9zdCBvbmNlCisgICAgICAgIHZh
ciBwb3NpdGlvbnNEYXRhID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpOworICAgICAg
ICBpZiAoIXBvc2l0aW9uc0RhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICB9CisgICAgICAgIGlmICghKHBvc2l0aW9uc0RhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkp
KSB7CisgICAgICAgICAgICBwb3NpdGlvbnNEYXRhID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlv
bnNEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAvLyBub3JtYWxzRGF0YSBjaGVja3MgZm9yIG5v
dCBiZWluZyBGbG9hdDMyQXJyYXkgd2lsbCBvbmx5IHBhc3MgYXQgbW9zdCBvbmNlCisgICAgICAg
IHZhciBub3JtYWxzRGF0YSA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAg
IGlmICghbm9ybWFsc0RhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9
CisgICAgICAgIGlmICghKG5vcm1hbHNEYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSkgewor
ICAgICAgICAgICAgbm9ybWFsc0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KG5vcm1hbHNEYXRhKTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgbWF0cmljZXNJbmRpY2VzRGF0YSA9IHRoaXMuZ2V0VmVy
dGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVm
ZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCk7CisgICAgICAgIHZhciBtYXRyaWNlc1dlaWdodHNE
YXRhID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKTsKKyAgICAgICAgaWYg
KCFtYXRyaWNlc1dlaWdodHNEYXRhIHx8ICFtYXRyaWNlc0luZGljZXNEYXRhKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB2YXIgbmVlZEV4dHJhcyA9IHRo
aXMubnVtQm9uZUluZmx1ZW5jZXJzID4gNDsKKyAgICAgICAgdmFyIG1hdHJpY2VzSW5kaWNlc0V4
dHJhRGF0YSA9IG5lZWRFeHRyYXMgPyB0aGlzLmdldFZlcnRpY2VzRGF0YShfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0V4
dHJhS2luZCkgOiBudWxsOworICAgICAgICB2YXIgbWF0cmljZXNXZWlnaHRzRXh0cmFEYXRhID0g
bmVlZEV4dHJhcyA/IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzRXh0cmFLaW5kKSA6
IG51bGw7CisgICAgICAgIHZhciBza2VsZXRvbk1hdHJpY2VzID0gc2tlbGV0b24uZ2V0VHJhbnNm
b3JtTWF0cmljZXModGhpcyk7CisgICAgICAgIHZhciB0ZW1wVmVjdG9yMyA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICB2YXIgZmluYWxNYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIk1hdHJpeCJdKCk7CisgICAgICAgIHZhciB0ZW1wTWF0cml4
ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJN
YXRyaXgiXSgpOworICAgICAgICB2YXIgbWF0V2VpZ2h0SWR4ID0gMDsKKyAgICAgICAgdmFyIGlu
ZjsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHBvc2l0aW9uc0RhdGEubGVu
Z3RoOyBpbmRleCArPSAzLCBtYXRXZWlnaHRJZHggKz0gNCkgeworICAgICAgICAgICAgdmFyIHdl
aWdodDsKKyAgICAgICAgICAgIGZvciAoaW5mID0gMDsgaW5mIDwgNDsgaW5mKyspIHsKKyAgICAg
ICAgICAgICAgICB3ZWlnaHQgPSBtYXRyaWNlc1dlaWdodHNEYXRhW21hdFdlaWdodElkeCArIGlu
Zl07CisgICAgICAgICAgICAgICAgaWYgKHdlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1hdHJp
eCJdLkZyb21GbG9hdDMyQXJyYXlUb1JlZlNjYWxlZChza2VsZXRvbk1hdHJpY2VzLCBNYXRoLmZs
b29yKG1hdHJpY2VzSW5kaWNlc0RhdGFbbWF0V2VpZ2h0SWR4ICsgaW5mXSAqIDE2KSwgd2VpZ2h0
LCB0ZW1wTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWxNYXRyaXguYWRkVG9TZWxm
KHRlbXBNYXRyaXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChuZWVkRXh0cmFzKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbmYgPSAwOyBpbmYg
PCA0OyBpbmYrKykgeworICAgICAgICAgICAgICAgICAgICB3ZWlnaHQgPSBtYXRyaWNlc1dlaWdo
dHNFeHRyYURhdGFbbWF0V2VpZ2h0SWR4ICsgaW5mXTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHdlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRyaXgiXS5Gcm9tRmxvYXQzMkFycmF5
VG9SZWZTY2FsZWQoc2tlbGV0b25NYXRyaWNlcywgTWF0aC5mbG9vcihtYXRyaWNlc0luZGljZXNF
eHRyYURhdGFbbWF0V2VpZ2h0SWR4ICsgaW5mXSAqIDE2KSwgd2VpZ2h0LCB0ZW1wTWF0cml4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsTWF0cml4LmFkZFRvU2VsZih0ZW1wTWF0cml4
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNGcm9tRmxvYXRzVG9SZWYoaW50
ZXJuYWxEYXRhSW5mby5fc291cmNlUG9zaXRpb25zW2luZGV4XSwgaW50ZXJuYWxEYXRhSW5mby5f
c291cmNlUG9zaXRpb25zW2luZGV4ICsgMV0sIGludGVybmFsRGF0YUluZm8uX3NvdXJjZVBvc2l0
aW9uc1tpbmRleCArIDJdLCBmaW5hbE1hdHJpeCwgdGVtcFZlY3RvcjMpOworICAgICAgICAgICAg
dGVtcFZlY3RvcjMudG9BcnJheShwb3NpdGlvbnNEYXRhLCBpbmRleCk7CisgICAgICAgICAgICBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJd
LlRyYW5zZm9ybU5vcm1hbEZyb21GbG9hdHNUb1JlZihpbnRlcm5hbERhdGFJbmZvLl9zb3VyY2VO
b3JtYWxzW2luZGV4XSwgaW50ZXJuYWxEYXRhSW5mby5fc291cmNlTm9ybWFsc1tpbmRleCArIDFd
LCBpbnRlcm5hbERhdGFJbmZvLl9zb3VyY2VOb3JtYWxzW2luZGV4ICsgMl0sIGZpbmFsTWF0cml4
LCB0ZW1wVmVjdG9yMyk7CisgICAgICAgICAgICB0ZW1wVmVjdG9yMy50b0FycmF5KG5vcm1hbHNE
YXRhLCBpbmRleCk7CisgICAgICAgICAgICBmaW5hbE1hdHJpeC5yZXNldCgpOworICAgICAgICB9
CisgICAgICAgIHRoaXMudXBkYXRlVmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kLCBwb3NpdGlvbnNEYXRh
KTsKKyAgICAgICAgdGhpcy51cGRhdGVWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBub3JtYWxzRGF0YSk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLy8gVG9vbHMKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIGEgbWluIGFuZCBtYXggVmVjdG9yMyB3
aGljaCBhcmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmVjdG9ycyBvZiBlYWNoIG1lc2ggYm91
bmRpbmcgYm94IGZyb20gdGhlIHBhc3NlZCBhcnJheSwgaW4gdGhlIHdvcmxkIGNvb3JkaW5hdGVz
CisgICAgICogQHBhcmFtIG1lc2hlcyBkZWZpbmVzIHRoZSBsaXN0IG9mIG1lc2hlcyB0byBzY2Fu
CisgICAgICogQHJldHVybnMgYW4gb2JqZWN0IGB7bWluOmAgVmVjdG9yM2AsIG1heDpgIFZlY3Rv
cjNgfWAKKyAgICAgKi8KKyAgICBNZXNoLk1pbk1heCA9IGZ1bmN0aW9uIChtZXNoZXMpIHsKKyAg
ICAgICAgdmFyIG1pblZlY3RvciA9IG51bGw7CisgICAgICAgIHZhciBtYXhWZWN0b3IgPSBudWxs
OworICAgICAgICBtZXNoZXMuZm9yRWFjaChmdW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAg
dmFyIGJvdW5kaW5nSW5mbyA9IG1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICB2
YXIgYm91bmRpbmdCb3ggPSBib3VuZGluZ0luZm8uYm91bmRpbmdCb3g7CisgICAgICAgICAgICBp
ZiAoIW1pblZlY3RvciB8fCAhbWF4VmVjdG9yKSB7CisgICAgICAgICAgICAgICAgbWluVmVjdG9y
ID0gYm91bmRpbmdCb3gubWluaW11bVdvcmxkOworICAgICAgICAgICAgICAgIG1heFZlY3RvciA9
IGJvdW5kaW5nQm94Lm1heGltdW1Xb3JsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIG1pblZlY3Rvci5taW5pbWl6ZUluUGxhY2UoYm91bmRpbmdC
b3gubWluaW11bVdvcmxkKTsKKyAgICAgICAgICAgICAgICBtYXhWZWN0b3IubWF4aW1pemVJblBs
YWNlKGJvdW5kaW5nQm94Lm1heGltdW1Xb3JsZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgICAgICBpZiAoIW1pblZlY3RvciB8fCAhbWF4VmVjdG9yKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIG1pbjogX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5aZXJvKCksCisgICAgICAgICAgICAgICAg
bWF4OiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVj
dG9yMyJdLlplcm8oKQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgbWluOiBtaW5WZWN0b3IsCisgICAgICAgICAgICBtYXg6IG1heFZlY3Rv
cgorICAgICAgICB9OworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY2VudGVy
IG9mIHRoZSBge21pbjpgIFZlY3RvcjNgLCBtYXg6YCBWZWN0b3IzYH1gIG9yIHRoZSBjZW50ZXIg
b2YgTWluTWF4IHZlY3RvcjMgY29tcHV0ZWQgZnJvbSBhIG1lc2ggYXJyYXkKKyAgICAgKiBAcGFy
YW0gbWVzaGVzT3JNaW5NYXhWZWN0b3IgY291bGQgYmUgYW4gYXJyYXkgb2YgbWVzaGVzIG9yIGEg
YHttaW46YCBWZWN0b3IzYCwgbWF4OmAgVmVjdG9yM2B9YCBvYmplY3QKKyAgICAgKiBAcmV0dXJu
cyBhIHZlY3RvcjMKKyAgICAgKi8KKyAgICBNZXNoLkNlbnRlciA9IGZ1bmN0aW9uIChtZXNoZXNP
ck1pbk1heFZlY3RvcikgeworICAgICAgICB2YXIgbWluTWF4VmVjdG9yID0gKG1lc2hlc09yTWlu
TWF4VmVjdG9yIGluc3RhbmNlb2YgQXJyYXkpID8gTWVzaC5NaW5NYXgobWVzaGVzT3JNaW5NYXhW
ZWN0b3IpIDogbWVzaGVzT3JNaW5NYXhWZWN0b3I7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkNlbnRlciht
aW5NYXhWZWN0b3IubWluLCBtaW5NYXhWZWN0b3IubWF4KTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIE1lcmdlIHRoZSBhcnJheSBvZiBtZXNoZXMgaW50byBhIHNpbmdsZSBtZXNoIGZvciBwZXJm
b3JtYW5jZSByZWFzb25zLgorICAgICAqIEBwYXJhbSBtZXNoZXMgZGVmaW5lcyBoZSB2ZXJ0aWNl
cyBzb3VyY2UuICBUaGV5IHNob3VsZCBhbGwgYmUgb2YgdGhlIHNhbWUgbWF0ZXJpYWwuICBFbnRy
aWVzIGNhbiBlbXB0eQorICAgICAqIEBwYXJhbSBkaXNwb3NlU291cmNlIHdoZW4gdHJ1ZSAoZGVm
YXVsdCksIGRpc3Bvc2Ugb2YgdGhlIHZlcnRpY2VzIGZyb20gdGhlIHNvdXJjZSBtZXNoZXMKKyAg
ICAgKiBAcGFyYW0gYWxsb3czMkJpdHNJbmRpY2VzIHdoZW4gdGhlIHN1bSBvZiB0aGUgdmVydGlj
ZXMgPiA2NGssIHRoaXMgbXVzdCBiZSBzZXQgdG8gdHJ1ZQorICAgICAqIEBwYXJhbSBtZXNoU3Vi
Y2xhc3Mgd2hlbiBzZXQsIHZlcnRpY2VzIGluc2VydGVkIGludG8gdGhpcyBNZXNoLiAgTWVzaGVz
IGNhbiB0aGVuIGJlIG1lcmdlZCBpbnRvIGEgTWVzaCBzdWItY2xhc3MuCisgICAgICogQHBhcmFt
IHN1YmRpdmlkZVdpdGhTdWJNZXNoZXMgd2hlbiB0cnVlIChmYWxzZSBkZWZhdWx0KSwgc3ViZGl2
aWRlIG1lc2ggdG8gaGlzIHN1Yk1lc2ggYXJyYXkgd2l0aCBtZXNoZXMgc291cmNlLgorICAgICAq
IEBwYXJhbSBtdWx0aU11bHRpTWF0ZXJpYWxzIHdoZW4gdHJ1ZSAoZmFsc2UgZGVmYXVsdCksIHN1
YmRpdmlkZSBtZXNoIGFuZCBhY2NlcHQgbXVsdGlwbGUgbXVsdGkgbWF0ZXJpYWxzLCBpZ25vcmVz
IHN1YmRpdmlkZVdpdGhTdWJNZXNoZXMuCisgICAgICogQHJldHVybnMgYSBuZXcgbWVzaAorICAg
ICAqLworICAgIE1lc2guTWVyZ2VNZXNoZXMgPSBmdW5jdGlvbiAobWVzaGVzLCBkaXNwb3NlU291
cmNlLCBhbGxvdzMyQml0c0luZGljZXMsIG1lc2hTdWJjbGFzcywgc3ViZGl2aWRlV2l0aFN1Yk1l
c2hlcywgbXVsdGlNdWx0aU1hdGVyaWFscykgeworICAgICAgICBpZiAoZGlzcG9zZVNvdXJjZSA9
PT0gdm9pZCAwKSB7IGRpc3Bvc2VTb3VyY2UgPSB0cnVlOyB9CisgICAgICAgIHZhciBpbmRleDsK
KyAgICAgICAgaWYgKCFhbGxvdzMyQml0c0luZGljZXMpIHsKKyAgICAgICAgICAgIHZhciB0b3Rh
bFZlcnRpY2VzID0gMDsKKyAgICAgICAgICAgIC8vIENvdW50aW5nIHZlcnRpY2VzCisgICAgICAg
ICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1lc2hlc1tpbmRleF0pIHsKKyAgICAgICAgICAgICAgICAgICAg
dG90YWxWZXJ0aWNlcyArPSBtZXNoZXNbaW5kZXhdLmdldFRvdGFsVmVydGljZXMoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRvdGFsVmVydGljZXMgPj0gNjU1MzYpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1si
TG9nZ2VyIl0uV2FybigiQ2Fubm90IG1lcmdlIG1lc2hlcyBiZWNhdXNlIHJlc3VsdGluZyBtZXNo
IHdpbGwgaGF2ZSBtb3JlIHRoYW4gNjU1MzYgdmVydGljZXMuIFBsZWFzZSB1c2UgYWxsb3czMkJp
dHNJbmRpY2VzID0gdHJ1ZSB0byB1c2UgMzIgYml0cyBpbmRpY2VzIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobXVsdGlNdWx0
aU1hdGVyaWFscykgeworICAgICAgICAgICAgdmFyIG5ld011bHRpTWF0ZXJpYWwgPSBudWxsOwor
ICAgICAgICAgICAgdmFyIHN1YkluZGV4OworICAgICAgICAgICAgdmFyIG1hdEluZGV4OworICAg
ICAgICAgICAgc3ViZGl2aWRlV2l0aFN1Yk1lc2hlcyA9IGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHZhciBtYXRlcmlhbEFycmF5ID0gbmV3IEFycmF5KCk7CisgICAgICAgIHZhciBtYXRlcmlh
bEluZGV4QXJyYXkgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLy8gTWVyZ2UKKyAgICAgICAgdmFy
IHZlcnRleERhdGEgPSBudWxsOworICAgICAgICB2YXIgb3RoZXJWZXJ0ZXhEYXRhOworICAgICAg
ICB2YXIgaW5kaWNlQXJyYXkgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdmFyIHNvdXJjZSA9IG51
bGw7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1lc2hlcy5sZW5ndGg7IGluZGV4
KyspIHsKKyAgICAgICAgICAgIGlmIChtZXNoZXNbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAg
dmFyIG1lc2ggPSBtZXNoZXNbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChtZXNoLmlzQW5J
bnN0YW5jZSkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE5X19bIkxvZ2dlciJdLldhcm4oIkNhbm5vdCBtZXJnZSBpbnN0YW5jZSBt
ZXNoZXMuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgd20gPSBtZXNoLmNvbXB1dGVXb3JsZE1hdHJpeCh0
cnVlKTsKKyAgICAgICAgICAgICAgICBvdGhlclZlcnRleERhdGEgPSBfbWVzaF92ZXJ0ZXhEYXRh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlZlcnRleERhdGEiXS5FeHRyYWN0RnJvbU1l
c2gobWVzaCwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgb3RoZXJWZXJ0ZXhEYXRhLnRy
YW5zZm9ybSh3bSk7CisgICAgICAgICAgICAgICAgaWYgKHZlcnRleERhdGEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmVydGV4RGF0YS5tZXJnZShvdGhlclZlcnRleERhdGEsIGFsbG93MzJCaXRz
SW5kaWNlcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICB2ZXJ0ZXhEYXRhID0gb3RoZXJWZXJ0ZXhEYXRhOworICAgICAgICAg
ICAgICAgICAgICBzb3VyY2UgPSBtZXNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoc3ViZGl2aWRlV2l0aFN1Yk1lc2hlcykgeworICAgICAgICAgICAgICAgICAgICBp
bmRpY2VBcnJheS5wdXNoKG1lc2guZ2V0VG90YWxJbmRpY2VzKCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAobXVsdGlNdWx0aU1hdGVyaWFscykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtYXRlcmlhbCBpbnN0YW5jZW9mIF9NYXRlcmlhbHNfbXVsdGlNYXRlcmlhbF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTVfX1siTXVsdGlNYXRlcmlhbCJdKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChtYXRJbmRleCA9IDA7IG1hdEluZGV4IDwgbWF0ZXJpYWwuc3ViTWF0
ZXJpYWxzLmxlbmd0aDsgbWF0SW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobWF0ZXJpYWxBcnJheS5pbmRleE9mKG1hdGVyaWFsLnN1Yk1hdGVyaWFsc1ttYXRJ
bmRleF0pIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJp
YWxBcnJheS5wdXNoKG1hdGVyaWFsLnN1Yk1hdGVyaWFsc1ttYXRJbmRleF0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3ViSW5kZXggPSAwOyBzdWJJbmRleCA8
IG1lc2guc3ViTWVzaGVzLmxlbmd0aDsgc3ViSW5kZXgrKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRlcmlhbEluZGV4QXJyYXkucHVzaChtYXRlcmlhbEFycmF5LmluZGV4
T2YobWF0ZXJpYWwuc3ViTWF0ZXJpYWxzW21lc2guc3ViTWVzaGVzW3N1YkluZGV4XS5tYXRlcmlh
bEluZGV4XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VBcnJheS5w
dXNoKG1lc2guc3ViTWVzaGVzW3N1YkluZGV4XS5pbmRleENvdW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0ZXJp
YWxBcnJheS5pbmRleE9mKG1hdGVyaWFsKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0ZXJpYWxBcnJheS5wdXNoKG1hdGVyaWFsKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzdWJJbmRleCA9
IDA7IHN1YkluZGV4IDwgbWVzaC5zdWJNZXNoZXMubGVuZ3RoOyBzdWJJbmRleCsrKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsSW5kZXhBcnJheS5wdXNoKG1hdGVy
aWFsQXJyYXkuaW5kZXhPZihtYXRlcmlhbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRpY2VBcnJheS5wdXNoKG1lc2guc3ViTWVzaGVzW3N1YkluZGV4XS5pbmRleENvdW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN1YkluZGV4ID0gMDsgc3ViSW5kZXggPCBtZXNo
LnN1Yk1lc2hlcy5sZW5ndGg7IHN1YkluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRlcmlhbEluZGV4QXJyYXkucHVzaCgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRpY2VBcnJheS5wdXNoKG1lc2guc3ViTWVzaGVzW3N1YkluZGV4XS5pbmRleENvdW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzb3VyY2Ug
PSBzb3VyY2U7CisgICAgICAgIGlmICghbWVzaFN1YmNsYXNzKSB7CisgICAgICAgICAgICBtZXNo
U3ViY2xhc3MgPSBuZXcgTWVzaChzb3VyY2UubmFtZSArICJfbWVyZ2VkIiwgc291cmNlLmdldFNj
ZW5lKCkpOworICAgICAgICB9CisgICAgICAgIHZlcnRleERhdGEuYXBwbHlUb01lc2gobWVzaFN1
YmNsYXNzKTsKKyAgICAgICAgLy8gU2V0dGluZyBwcm9wZXJ0aWVzCisgICAgICAgIG1lc2hTdWJj
bGFzcy5jaGVja0NvbGxpc2lvbnMgPSBzb3VyY2UuY2hlY2tDb2xsaXNpb25zOworICAgICAgICAv
LyBDbGVhbmluZworICAgICAgICBpZiAoZGlzcG9zZVNvdXJjZSkgeworICAgICAgICAgICAgZm9y
IChpbmRleCA9IDA7IGluZGV4IDwgbWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgICAgIGlmIChtZXNoZXNbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAgICAgIG1lc2hlc1tp
bmRleF0uZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAvLyBTdWJkaXZpZGUKKyAgICAgICAgaWYgKHN1YmRpdmlkZVdpdGhTdWJN
ZXNoZXMgfHwgbXVsdGlNdWx0aU1hdGVyaWFscykgeworICAgICAgICAgICAgLy8tLSByZW1vdmFs
IG9mIGdsb2JhbCBzdWJtZXNoCisgICAgICAgICAgICBtZXNoU3ViY2xhc3MucmVsZWFzZVN1Yk1l
c2hlcygpOworICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICAgICAgdmFyIG9mZnNldCA9
IDA7CisgICAgICAgICAgICAvLy0tIGFwcGx5IHN1YmRpdmlzaW9uIGFjY29yZGluZyB0byBpbmRl
eCB0YWJsZQorICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgaW5kaWNlQXJyYXkubGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgX3N1Yk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19b
IlN1Yk1lc2giXS5DcmVhdGVGcm9tSW5kaWNlcygwLCBvZmZzZXQsIGluZGljZUFycmF5W2luZGV4
XSwgbWVzaFN1YmNsYXNzKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gaW5kaWNlQXJyYXlb
aW5kZXhdOworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG11bHRpTXVsdGlNYXRlcmlhbHMpIHsKKyAgICAgICAgICAgIG5ld011
bHRpTWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFsc19tdWx0aU1hdGVyaWFsX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xNV9fWyJNdWx0aU1hdGVyaWFsIl0oc291cmNlLm5hbWUgKyAiX21lcmdlZCIs
IHNvdXJjZS5nZXRTY2VuZSgpKTsKKyAgICAgICAgICAgIG5ld011bHRpTWF0ZXJpYWwuc3ViTWF0
ZXJpYWxzID0gbWF0ZXJpYWxBcnJheTsKKyAgICAgICAgICAgIGZvciAoc3ViSW5kZXggPSAwOyBz
dWJJbmRleCA8IG1lc2hTdWJjbGFzcy5zdWJNZXNoZXMubGVuZ3RoOyBzdWJJbmRleCsrKSB7Cisg
ICAgICAgICAgICAgICAgbWVzaFN1YmNsYXNzLnN1Yk1lc2hlc1tzdWJJbmRleF0ubWF0ZXJpYWxJ
bmRleCA9IG1hdGVyaWFsSW5kZXhBcnJheVtzdWJJbmRleF07CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtZXNoU3ViY2xhc3MubWF0ZXJpYWwgPSBuZXdNdWx0aU1hdGVyaWFsOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWVzaFN1YmNsYXNzLm1hdGVyaWFsID0g
c291cmNlLm1hdGVyaWFsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtZXNoU3ViY2xhc3M7
CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE1lc2gucHJvdG90eXBlLmFkZEluc3Rh
bmNlID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7CisgICAgICAgIGluc3RhbmNlLl9pbmRleEluU291
cmNlTWVzaEluc3RhbmNlQXJyYXkgPSB0aGlzLmluc3RhbmNlcy5sZW5ndGg7CisgICAgICAgIHRo
aXMuaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBNZXNoLnByb3RvdHlwZS5yZW1vdmVJbnN0YW5jZSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkg
eworICAgICAgICAvLyBSZW1vdmUgZnJvbSBtZXNoCisgICAgICAgIHZhciBpbmRleCA9IGluc3Rh
bmNlLl9pbmRleEluU291cmNlTWVzaEluc3RhbmNlQXJyYXk7CisgICAgICAgIGlmIChpbmRleCAh
PSAtMSkgeworICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB0aGlzLmluc3RhbmNlcy5sZW5ndGgg
LSAxKSB7CisgICAgICAgICAgICAgICAgdmFyIGxhc3QgPSB0aGlzLmluc3RhbmNlc1t0aGlzLmlu
c3RhbmNlcy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlc1tpbmRl
eF0gPSBsYXN0OworICAgICAgICAgICAgICAgIGxhc3QuX2luZGV4SW5Tb3VyY2VNZXNoSW5zdGFu
Y2VBcnJheSA9IGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5zdGFuY2UuX2lu
ZGV4SW5Tb3VyY2VNZXNoSW5zdGFuY2VBcnJheSA9IC0xOworICAgICAgICAgICAgdGhpcy5pbnN0
YW5jZXMucG9wKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8vIENvbnN0cworICAgIC8qKgor
ICAgICAqIE1lc2ggc2lkZSBvcmllbnRhdGlvbiA6IHVzdWFsbHkgdGhlIGV4dGVybmFsIG9yIGZy
b250IHN1cmZhY2UKKyAgICAgKi8KKyAgICBNZXNoLkZST05UU0lERSA9IF9tZXNoX3ZlcnRleERh
dGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmVydGV4RGF0YSJdLkZST05UU0lERTsK
KyAgICAvKioKKyAgICAgKiBNZXNoIHNpZGUgb3JpZW50YXRpb24gOiB1c3VhbGx5IHRoZSBpbnRl
cm5hbCBvciBiYWNrIHN1cmZhY2UKKyAgICAgKi8KKyAgICBNZXNoLkJBQ0tTSURFID0gX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJWZXJ0ZXhEYXRhIl0uQkFD
S1NJREU7CisgICAgLyoqCisgICAgICogTWVzaCBzaWRlIG9yaWVudGF0aW9uIDogYm90aCBpbnRl
cm5hbCBhbmQgZXh0ZXJuYWwgb3IgZnJvbnQgYW5kIGJhY2sgc3VyZmFjZXMKKyAgICAgKi8KKyAg
ICBNZXNoLkRPVUJMRVNJREUgPSBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIlZlcnRleERhdGEiXS5ET1VCTEVTSURFOworICAgIC8qKgorICAgICAqIE1lc2gg
c2lkZSBvcmllbnRhdGlvbiA6IGJ5IGRlZmF1bHQsIGBGUk9OVFNJREVgCisgICAgICovCisgICAg
TWVzaC5ERUZBVUxUU0lERSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siVmVydGV4RGF0YSJdLkRFRkFVTFRTSURFOworICAgIC8qKgorICAgICAqIE1lc2gg
Y2FwIHNldHRpbmcgOiBubyBjYXAKKyAgICAgKi8KKyAgICBNZXNoLk5PX0NBUCA9IDA7CisgICAg
LyoqCisgICAgICogTWVzaCBjYXAgc2V0dGluZyA6IG9uZSBjYXAgYXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgbWVzaAorICAgICAqLworICAgIE1lc2guQ0FQX1NUQVJUID0gMTsKKyAgICAvKioKKyAg
ICAgKiBNZXNoIGNhcCBzZXR0aW5nIDogb25lIGNhcCBhdCB0aGUgZW5kIG9mIHRoZSBtZXNoCisg
ICAgICovCisgICAgTWVzaC5DQVBfRU5EID0gMjsKKyAgICAvKioKKyAgICAgKiBNZXNoIGNhcCBz
ZXR0aW5nIDogdHdvIGNhcHMsIG9uZSBhdCB0aGUgYmVnaW5uaW5nICBhbmQgb25lIGF0IHRoZSBl
bmQgb2YgdGhlIG1lc2gKKyAgICAgKi8KKyAgICBNZXNoLkNBUF9BTEwgPSAzOworICAgIC8qKgor
ICAgICAqIE1lc2ggcGF0dGVybiBzZXR0aW5nIDogbm8gZmxpcCBvciByb3RhdGUKKyAgICAgKi8K
KyAgICBNZXNoLk5PX0ZMSVAgPSAwOworICAgIC8qKgorICAgICAqIE1lc2ggcGF0dGVybiBzZXR0
aW5nIDogZmxpcCAocmVmbGVjdCBpbiB5IGF4aXMpIGFsdGVybmF0ZSB0aWxlcyBvbiBlYWNoIHJv
dyBvciBjb2x1bW4KKyAgICAgKi8KKyAgICBNZXNoLkZMSVBfVElMRSA9IDE7CisgICAgLyoqCisg
ICAgICogTWVzaCBwYXR0ZXJuIHNldHRpbmcgOiByb3RhdGUgKDE4MGRlZ3MpIGFsdGVybmF0ZSB0
aWxlcyBvbiBlYWNoIHJvdyBvciBjb2x1bW4KKyAgICAgKi8KKyAgICBNZXNoLlJPVEFURV9USUxF
ID0gMjsKKyAgICAvKioKKyAgICAgKiBNZXNoIHBhdHRlcm4gc2V0dGluZyA6IGZsaXAgKHJlZmxl
Y3QgaW4geSBheGlzKSBhbGwgdGlsZXMgb24gYWx0ZXJuYXRlIHJvd3MKKyAgICAgKi8KKyAgICBN
ZXNoLkZMSVBfUk9XID0gMzsKKyAgICAvKioKKyAgICAgKiBNZXNoIHBhdHRlcm4gc2V0dGluZyA6
IHJvdGF0ZSAoMTgwZGVncykgYWxsIHRpbGVzIG9uIGFsdGVybmF0ZSByb3dzCisgICAgICovCisg
ICAgTWVzaC5ST1RBVEVfUk9XID0gNDsKKyAgICAvKioKKyAgICAgKiBNZXNoIHBhdHRlcm4gc2V0
dGluZyA6IGZsaXAgYW5kIHJvdGF0ZSBhbHRlcm5hdGUgdGlsZXMgb24gZWFjaCByb3cgb3IgY29s
dW1uCisgICAgICovCisgICAgTWVzaC5GTElQX05fUk9UQVRFX1RJTEUgPSA1OworICAgIC8qKgor
ICAgICAqIE1lc2ggcGF0dGVybiBzZXR0aW5nIDogcm90YXRlIHBhdHRlcm4gYW5kIHJvdGF0ZQor
ICAgICAqLworICAgIE1lc2guRkxJUF9OX1JPVEFURV9ST1cgPSA2OworICAgIC8qKgorICAgICAq
IE1lc2ggdGlsZSBwb3NpdGlvbmluZyA6IHBhcnQgdGlsZXMgc2FtZSBvbiBsZWZ0L3JpZ2h0IG9y
IHRvcC9ib3R0b20KKyAgICAgKi8KKyAgICBNZXNoLkNFTlRFUiA9IDA7CisgICAgLyoqCisgICAg
ICogTWVzaCB0aWxlIHBvc2l0aW9uaW5nIDogcGFydCB0aWxlcyBvbiBsZWZ0CisgICAgICovCisg
ICAgTWVzaC5MRUZUID0gMTsKKyAgICAvKioKKyAgICAgKiBNZXNoIHRpbGUgcG9zaXRpb25pbmcg
OiBwYXJ0IHRpbGVzIG9uIHJpZ2h0CisgICAgICovCisgICAgTWVzaC5SSUdIVCA9IDI7CisgICAg
LyoqCisgICAgICogTWVzaCB0aWxlIHBvc2l0aW9uaW5nIDogcGFydCB0aWxlcyBvbiB0b3AKKyAg
ICAgKi8KKyAgICBNZXNoLlRPUCA9IDM7CisgICAgLyoqCisgICAgICogTWVzaCB0aWxlIHBvc2l0
aW9uaW5nIDogcGFydCB0aWxlcyBvbiBib3R0b20KKyAgICAgKi8KKyAgICBNZXNoLkJPVFRPTSA9
IDQ7CisgICAgLy8gU3RhdGljcworICAgIC8qKiBAaGlkZGVuICovCisgICAgTWVzaC5fR3JvdW5k
TWVzaFBhcnNlciA9IGZ1bmN0aW9uIChwYXJzZWRNZXNoLCBzY2VuZSkgeworICAgICAgICB0aHJv
dyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRvb2xz
Il0uV2FybkltcG9ydCgiR3JvdW5kTWVzaCIpOworICAgIH07CisgICAgcmV0dXJuIE1lc2g7Cit9
KF9hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkFic3RyYWN0TWVz
aCJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0
YS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBWZXJ0ZXhEYXRhICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlcnRleERhdGEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFZlcnRleERhdGE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3Iu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2J1
ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvZGV2VG9vbHMgKi8gIi4vTWlzYy9kZXZUb29scy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNv
bG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKworCisKKworLyoqCisgKiBUaGlzIGNs
YXNzIGNvbnRhaW5zIHRoZSB2YXJpb3VzIGtpbmRzIG9mIGRhdGEgb24gZXZlcnkgdmVydGV4IG9m
IGEgbWVzaCB1c2VkIGluIGRldGVybWluaW5nIGl0cyBzaGFwZSBhbmQgYXBwZWFyYW5jZQorICov
Cit2YXIgVmVydGV4RGF0YSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5j
dGlvbiBWZXJ0ZXhEYXRhKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBVc2VzIHRoZSBwYXNz
ZWQgZGF0YSBhcnJheSB0byBzZXQgdGhlIHNldCB0aGUgdmFsdWVzIGZvciB0aGUgc3BlY2lmaWVk
IGtpbmQgb2YgZGF0YQorICAgICAqIEBwYXJhbSBkYXRhIGEgbGluZWFyIGFycmF5IG9mIGZsb2F0
aW5nIG51bWJlcnMKKyAgICAgKiBAcGFyYW0ga2luZCB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgaXMg
YmVpbmcgc2V0LCBlZyBwb3NpdGlvbnMsIGNvbG9ycyBldGMKKyAgICAgKi8KKyAgICBWZXJ0ZXhE
YXRhLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZGF0YSwga2luZCkgeworICAgICAgICBzd2l0
Y2ggKGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kOgorICAgICAgICAg
ICAgICAgIHRoaXMucG9zaXRpb25zID0gZGF0YTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZDoKKyAgICAgICAgICAgICAgICB0aGlzLm5vcm1h
bHMgPSBkYXRhOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5U
YW5nZW50S2luZDoKKyAgICAgICAgICAgICAgICB0aGlzLnRhbmdlbnRzID0gZGF0YTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kOgorICAgICAgICAg
ICAgICAgIHRoaXMudXZzID0gZGF0YTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVy
dGV4QnVmZmVyIl0uVVYyS2luZDoKKyAgICAgICAgICAgICAgICB0aGlzLnV2czIgPSBkYXRhOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfTWVzaGVzX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjNLaW5kOgorICAg
ICAgICAgICAgICAgIHRoaXMudXZzMyA9IGRhdGE7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlcnRleEJ1ZmZlciJdLlVWNEtpbmQ6CisgICAgICAgICAgICAgICAgdGhpcy51dnM0ID0g
ZGF0YTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVY1S2lu
ZDoKKyAgICAgICAgICAgICAgICB0aGlzLnV2czUgPSBkYXRhOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjZLaW5kOgorICAgICAgICAgICAgICAgIHRoaXMu
dXZzNiA9IGRhdGE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJd
LkNvbG9yS2luZDoKKyAgICAgICAgICAgICAgICB0aGlzLmNvbG9ycyA9IGRhdGE7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0tpbmQ6
CisgICAgICAgICAgICAgICAgdGhpcy5tYXRyaWNlc0luZGljZXMgPSBkYXRhOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kOgor
ICAgICAgICAgICAgICAgIHRoaXMubWF0cmljZXNXZWlnaHRzID0gZGF0YTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5k
OgorICAgICAgICAgICAgICAgIHRoaXMubWF0cmljZXNJbmRpY2VzRXh0cmEgPSBkYXRhOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNF
eHRyYUtpbmQ6CisgICAgICAgICAgICAgICAgdGhpcy5tYXRyaWNlc1dlaWdodHNFeHRyYSA9IGRh
dGE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFzc29jaWF0ZXMgdGhlIHZlcnRleERhdGEgdG8gdGhlIHBhc3NlZCBNZXNoLgorICAg
ICAqIFNldHMgaXQgYXMgdXBkYXRhYmxlIG9yIG5vdCAoZGVmYXVsdCBgZmFsc2VgKQorICAgICAq
IEBwYXJhbSBtZXNoIHRoZSBtZXNoIHRoZSB2ZXJ0ZXhEYXRhIGlzIGFwcGxpZWQgdG8KKyAgICAg
KiBAcGFyYW0gdXBkYXRhYmxlIHdoZW4gdXNlZCBhbmQgaGF2aW5nIHRoZSB2YWx1ZSB0cnVlIGFs
bG93cyBuZXcgZGF0YSB0byB1cGRhdGUgdGhlIHZlcnRleERhdGEKKyAgICAgKiBAcmV0dXJucyB0
aGUgVmVydGV4RGF0YQorICAgICAqLworICAgIFZlcnRleERhdGEucHJvdG90eXBlLmFwcGx5VG9N
ZXNoID0gZnVuY3Rpb24gKG1lc2gsIHVwZGF0YWJsZSkgeworICAgICAgICB0aGlzLl9hcHBseVRv
KG1lc2gsIHVwZGF0YWJsZSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoq
CisgICAgICogQXNzb2NpYXRlcyB0aGUgdmVydGV4RGF0YSB0byB0aGUgcGFzc2VkIEdlb21ldHJ5
LgorICAgICAqIFNldHMgaXQgYXMgdXBkYXRhYmxlIG9yIG5vdCAoZGVmYXVsdCBgZmFsc2VgKQor
ICAgICAqIEBwYXJhbSBnZW9tZXRyeSB0aGUgZ2VvbWV0cnkgdGhlIHZlcnRleERhdGEgaXMgYXBw
bGllZCB0bworICAgICAqIEBwYXJhbSB1cGRhdGFibGUgd2hlbiB1c2VkIGFuZCBoYXZpbmcgdGhl
IHZhbHVlIHRydWUgYWxsb3dzIG5ldyBkYXRhIHRvIHVwZGF0ZSB0aGUgdmVydGV4RGF0YQorICAg
ICAqIEByZXR1cm5zIFZlcnRleERhdGEKKyAgICAgKi8KKyAgICBWZXJ0ZXhEYXRhLnByb3RvdHlw
ZS5hcHBseVRvR2VvbWV0cnkgPSBmdW5jdGlvbiAoZ2VvbWV0cnksIHVwZGF0YWJsZSkgeworICAg
ICAgICB0aGlzLl9hcHBseVRvKGdlb21ldHJ5LCB1cGRhdGFibGUpOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGFzc29jaWF0ZWQgbWVz
aAorICAgICAqIEBwYXJhbSBtZXNoIHRoZSBtZXNoIHRvIGJlIHVwZGF0ZWQKKyAgICAgKiBAcGFy
YW0gdXBkYXRlRXh0ZW5kcyB3aGVuIHRydWUgdGhlIG1lc2ggQm91bmRpbmdJbmZvIHdpbGwgYmUg
cmVuZXdlZCB3aGVuIGFuZCBpZiBwb3NpdGlvbiBraW5kIGlzIHVwZGF0ZWQsIG9wdGlvbmFsIHdp
dGggZGVmYXVsdCBmYWxzZQorICAgICAqIEBwYXJhbSBtYWtlSXRVbmlxdWUgd2hlbiB0cnVlLCBh
bmQgd2hlbiBhbmQgaWYgcG9zaXRpb24ga2luZCBpcyB1cGRhdGVkLCBhIG5ldyBnbG9iYWwgZ2Vv
bWV0cnkgd2lsbCBiZSAgY3JlYXRlZCBmcm9tIHRoZXNlIHBvc2l0aW9ucyBhbmQgc2V0IHRvIHRo
ZSBtZXNoLCBvcHRpb25hbCB3aXRoIGRlZmF1bHQgZmFsc2UKKyAgICAgKiBAcmV0dXJucyBWZXJ0
ZXhEYXRhCisgICAgICovCisgICAgVmVydGV4RGF0YS5wcm90b3R5cGUudXBkYXRlTWVzaCA9IGZ1
bmN0aW9uIChtZXNoKSB7CisgICAgICAgIHRoaXMuX3VwZGF0ZShtZXNoKTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBhc3NvY2lhdGVk
IGdlb21ldHJ5CisgICAgICogQHBhcmFtIGdlb21ldHJ5IHRoZSBnZW9tZXRyeSB0byBiZSB1cGRh
dGVkCisgICAgICogQHBhcmFtIHVwZGF0ZUV4dGVuZHMgd2hlbiB0cnVlIEJvdW5kaW5nSW5mbyB3
aWxsIGJlIHJlbmV3ZWQgd2hlbiBhbmQgaWYgcG9zaXRpb24ga2luZCBpcyB1cGRhdGVkLCBvcHRp
b25hbCB3aXRoIGRlZmF1bHQgZmFsc2UKKyAgICAgKiBAcGFyYW0gbWFrZUl0VW5pcXVlIHdoZW4g
dHJ1ZSwgYW5kIHdoZW4gYW5kIGlmIHBvc2l0aW9uIGtpbmQgaXMgdXBkYXRlZCwgYSBuZXcgZ2xv
YmFsIGdlb21ldHJ5IHdpbGwgYmUgY3JlYXRlZCBmcm9tIHRoZXNlIHBvc2l0aW9ucyBhbmQgc2V0
IHRvIHRoZSBtZXNoLCBvcHRpb25hbCB3aXRoIGRlZmF1bHQgZmFsc2UKKyAgICAgKiBAcmV0dXJu
cyBWZXJ0ZXhEYXRhLgorICAgICAqLworICAgIFZlcnRleERhdGEucHJvdG90eXBlLnVwZGF0ZUdl
b21ldHJ5ID0gZnVuY3Rpb24gKGdlb21ldHJ5KSB7CisgICAgICAgIHRoaXMuX3VwZGF0ZShnZW9t
ZXRyeSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgVmVydGV4RGF0YS5wcm90
b3R5cGUuX2FwcGx5VG8gPSBmdW5jdGlvbiAobWVzaE9yR2VvbWV0cnksIHVwZGF0YWJsZSkgewor
ICAgICAgICBpZiAodXBkYXRhYmxlID09PSB2b2lkIDApIHsgdXBkYXRhYmxlID0gZmFsc2U7IH0K
KyAgICAgICAgaWYgKHRoaXMucG9zaXRpb25zKSB7CisgICAgICAgICAgICBtZXNoT3JHZW9tZXRy
eS5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kLCB0aGlzLnBvc2l0aW9ucywgdXBkYXRh
YmxlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5ub3JtYWxzKSB7CisgICAgICAgICAg
ICBtZXNoT3JHZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCwgdGhpcy5ub3Jt
YWxzLCB1cGRhdGFibGUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnRhbmdlbnRzKSB7
CisgICAgICAgICAgICBtZXNoT3JHZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVGFuZ2VudEtp
bmQsIHRoaXMudGFuZ2VudHMsIHVwZGF0YWJsZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMudXZzKSB7CisgICAgICAgICAgICBtZXNoT3JHZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0u
VVZLaW5kLCB0aGlzLnV2cywgdXBkYXRhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy51dnMyKSB7CisgICAgICAgICAgICBtZXNoT3JHZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0u
VVYyS2luZCwgdGhpcy51dnMyLCB1cGRhdGFibGUpOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLnV2czMpIHsKKyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnNldFZlcnRpY2VzRGF0YShf
TWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIi
XS5VVjNLaW5kLCB0aGlzLnV2czMsIHVwZGF0YWJsZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMudXZzNCkgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkuc2V0VmVydGljZXNEYXRh
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZl
ciJdLlVWNEtpbmQsIHRoaXMudXZzNCwgdXBkYXRhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy51dnM1KSB7CisgICAgICAgICAgICBtZXNoT3JHZW9tZXRyeS5zZXRWZXJ0aWNlc0Rh
dGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVm
ZmVyIl0uVVY1S2luZCwgdGhpcy51dnM1LCB1cGRhdGFibGUpOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLnV2czYpIHsKKyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnNldFZlcnRpY2Vz
RGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhC
dWZmZXIiXS5VVjZLaW5kLCB0aGlzLnV2czYsIHVwZGF0YWJsZSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuY29sb3JzKSB7CisgICAgICAgICAgICBtZXNoT3JHZW9tZXRyeS5zZXRWZXJ0
aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVy
dGV4QnVmZmVyIl0uQ29sb3JLaW5kLCB0aGlzLmNvbG9ycywgdXBkYXRhYmxlKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5tYXRyaWNlc0luZGljZXMpIHsKKyAgICAgICAgICAgIG1lc2hP
ckdlb21ldHJ5LnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNLaW5kLCB0aGlzLm1h
dHJpY2VzSW5kaWNlcywgdXBkYXRhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5t
YXRyaWNlc1dlaWdodHMpIHsKKyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnNldFZlcnRpY2Vz
RGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhC
dWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kLCB0aGlzLm1hdHJpY2VzV2VpZ2h0cywgdXBkYXRh
YmxlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5tYXRyaWNlc0luZGljZXNFeHRyYSkg
eworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkuc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2Vz
SW5kaWNlc0V4dHJhS2luZCwgdGhpcy5tYXRyaWNlc0luZGljZXNFeHRyYSwgdXBkYXRhYmxlKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5tYXRyaWNlc1dlaWdodHNFeHRyYSkgeworICAg
ICAgICAgICAgbWVzaE9yR2VvbWV0cnkuc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0
c0V4dHJhS2luZCwgdGhpcy5tYXRyaWNlc1dlaWdodHNFeHRyYSwgdXBkYXRhYmxlKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5pbmRpY2VzKSB7CisgICAgICAgICAgICBtZXNoT3JHZW9t
ZXRyeS5zZXRJbmRpY2VzKHRoaXMuaW5kaWNlcywgbnVsbCwgdXBkYXRhYmxlKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnNldEluZGljZXMo
W10sIG51bGwpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
VmVydGV4RGF0YS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChtZXNoT3JHZW9tZXRyeSwg
dXBkYXRlRXh0ZW5kcywgbWFrZUl0VW5pcXVlKSB7CisgICAgICAgIGlmICh0aGlzLnBvc2l0aW9u
cykgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkudXBkYXRlVmVydGljZXNEYXRhKF9NZXNo
ZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBv
c2l0aW9uS2luZCwgdGhpcy5wb3NpdGlvbnMsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubm9ybWFscykgeworICAgICAgICAgICAgbWVz
aE9yR2VvbWV0cnkudXBkYXRlVmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQsIHRoaXMubm9ybWFs
cywgdXBkYXRlRXh0ZW5kcywgbWFrZUl0VW5pcXVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy50YW5nZW50cykgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkudXBkYXRlVmVydGlj
ZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLlRhbmdlbnRLaW5kLCB0aGlzLnRhbmdlbnRzLCB1cGRhdGVFeHRlbmRzLCBtYWtl
SXRVbmlxdWUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnV2cykgeworICAgICAgICAg
ICAgbWVzaE9yR2VvbWV0cnkudXBkYXRlVmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCwgdGhpcy51dnMs
IHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMudXZzMikgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkudXBkYXRlVmVydGljZXNEYXRh
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZl
ciJdLlVWMktpbmQsIHRoaXMudXZzMiwgdXBkYXRlRXh0ZW5kcywgbWFrZUl0VW5pcXVlKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy51dnMzKSB7CisgICAgICAgICAgICBtZXNoT3JHZW9t
ZXRyeS51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVYzS2luZCwgdGhpcy51dnMzLCB1cGRhdGVFeHRl
bmRzLCBtYWtlSXRVbmlxdWUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnV2czQpIHsK
KyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnVwZGF0ZVZlcnRpY2VzRGF0YShfTWVzaGVzX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjRLaW5k
LCB0aGlzLnV2czQsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMudXZzNSkgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkudXBkYXRl
VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlcnRleEJ1ZmZlciJdLlVWNUtpbmQsIHRoaXMudXZzNSwgdXBkYXRlRXh0ZW5kcywgbWFrZUl0
VW5pcXVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy51dnM2KSB7CisgICAgICAgICAg
ICBtZXNoT3JHZW9tZXRyeS51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVY2S2luZCwgdGhpcy51dnM2
LCB1cGRhdGVFeHRlbmRzLCBtYWtlSXRVbmlxdWUpOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLmNvbG9ycykgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkudXBkYXRlVmVydGljZXNE
YXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1
ZmZlciJdLkNvbG9yS2luZCwgdGhpcy5jb2xvcnMsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubWF0cmljZXNJbmRpY2VzKSB7CisgICAg
ICAgICAgICBtZXNoT3JHZW9tZXRyeS51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRp
Y2VzS2luZCwgdGhpcy5tYXRyaWNlc0luZGljZXMsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubWF0cmljZXNXZWlnaHRzKSB7CisgICAg
ICAgICAgICBtZXNoT3JHZW9tZXRyeS51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWln
aHRzS2luZCwgdGhpcy5tYXRyaWNlc1dlaWdodHMsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubWF0cmljZXNJbmRpY2VzRXh0cmEpIHsK
KyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnVwZGF0ZVZlcnRpY2VzRGF0YShfTWVzaGVzX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNl
c0luZGljZXNFeHRyYUtpbmQsIHRoaXMubWF0cmljZXNJbmRpY2VzRXh0cmEsIHVwZGF0ZUV4dGVu
ZHMsIG1ha2VJdFVuaXF1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubWF0cmljZXNX
ZWlnaHRzRXh0cmEpIHsKKyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnVwZGF0ZVZlcnRpY2Vz
RGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhC
dWZmZXIiXS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQsIHRoaXMubWF0cmljZXNXZWlnaHRzRXh0
cmEsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuaW5kaWNlcykgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkuc2V0SW5kaWNlcyh0
aGlzLmluZGljZXMsIG51bGwpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogVHJhbnNmb3JtcyBlYWNoIHBvc2l0aW9uIGFuZCBlYWNoIG5v
cm1hbCBvZiB0aGUgdmVydGV4RGF0YSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBNYXRyaXgKKyAg
ICAgKiBAcGFyYW0gbWF0cml4IHRoZSB0cmFuc2Zvcm1pbmcgbWF0cml4CisgICAgICogQHJldHVy
bnMgdGhlIFZlcnRleERhdGEKKyAgICAgKi8KKyAgICBWZXJ0ZXhEYXRhLnByb3RvdHlwZS50cmFu
c2Zvcm0gPSBmdW5jdGlvbiAobWF0cml4KSB7CisgICAgICAgIHZhciBmbGlwID0gbWF0cml4Lm1b
MF0gKiBtYXRyaXgubVs1XSAqIG1hdHJpeC5tWzEwXSA8IDA7CisgICAgICAgIHZhciB0cmFuc2Zv
cm1lZCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0uWmVybygpOworICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIGlmICh0aGlzLnBv
c2l0aW9ucykgeworICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAg
ICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnBvc2l0aW9ucy5sZW5ndGg7IGluZGV4
ICs9IDMpIHsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKHRoaXMucG9zaXRpb25z
LCBpbmRleCwgcG9zaXRpb24pOworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0
ZXNUb1JlZihwb3NpdGlvbiwgbWF0cml4LCB0cmFuc2Zvcm1lZCk7CisgICAgICAgICAgICAgICAg
dGhpcy5wb3NpdGlvbnNbaW5kZXhdID0gdHJhbnNmb3JtZWQueDsKKyAgICAgICAgICAgICAgICB0
aGlzLnBvc2l0aW9uc1tpbmRleCArIDFdID0gdHJhbnNmb3JtZWQueTsKKyAgICAgICAgICAgICAg
ICB0aGlzLnBvc2l0aW9uc1tpbmRleCArIDJdID0gdHJhbnNmb3JtZWQuejsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5ub3JtYWxzKSB7CisgICAgICAgICAgICB2
YXIgbm9ybWFsID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLm5vcm1hbHMubGVuZ3RoOyBpbmRleCArPSAzKSB7CisgICAgICAgICAgICAgICAgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5G
cm9tQXJyYXlUb1JlZih0aGlzLm5vcm1hbHMsIGluZGV4LCBub3JtYWwpOworICAgICAgICAgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0
b3IzIl0uVHJhbnNmb3JtTm9ybWFsVG9SZWYobm9ybWFsLCBtYXRyaXgsIHRyYW5zZm9ybWVkKTsK
KyAgICAgICAgICAgICAgICB0aGlzLm5vcm1hbHNbaW5kZXhdID0gdHJhbnNmb3JtZWQueDsKKyAg
ICAgICAgICAgICAgICB0aGlzLm5vcm1hbHNbaW5kZXggKyAxXSA9IHRyYW5zZm9ybWVkLnk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5ub3JtYWxzW2luZGV4ICsgMl0gPSB0cmFuc2Zvcm1lZC56Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnRhbmdlbnRzKSB7Cisg
ICAgICAgICAgICB2YXIgdGFuZ2VudCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWZWN0b3I0Il0uWmVybygpOworICAgICAgICAgICAgdmFyIHRhbmdl
bnRUcmFuc2Zvcm1lZCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3I0Il0uWmVybygpOworICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGlu
ZGV4IDwgdGhpcy50YW5nZW50cy5sZW5ndGg7IGluZGV4ICs9IDQpIHsKKyAgICAgICAgICAgICAg
ICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
NCJdLkZyb21BcnJheVRvUmVmKHRoaXMudGFuZ2VudHMsIGluZGV4LCB0YW5nZW50KTsKKyAgICAg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yNCJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKHRhbmdlbnQsIG1hdHJpeCwgdGFuZ2Vu
dFRyYW5zZm9ybWVkKTsKKyAgICAgICAgICAgICAgICB0aGlzLnRhbmdlbnRzW2luZGV4XSA9IHRh
bmdlbnRUcmFuc2Zvcm1lZC54OworICAgICAgICAgICAgICAgIHRoaXMudGFuZ2VudHNbaW5kZXgg
KyAxXSA9IHRhbmdlbnRUcmFuc2Zvcm1lZC55OworICAgICAgICAgICAgICAgIHRoaXMudGFuZ2Vu
dHNbaW5kZXggKyAyXSA9IHRhbmdlbnRUcmFuc2Zvcm1lZC56OworICAgICAgICAgICAgICAgIHRo
aXMudGFuZ2VudHNbaW5kZXggKyAzXSA9IHRhbmdlbnRUcmFuc2Zvcm1lZC53OworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmbGlwICYmIHRoaXMuaW5kaWNlcykgeworICAg
ICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5pbmRpY2VzLmxlbmd0aDsgaW5k
ZXggKz0gMykgeworICAgICAgICAgICAgICAgIHZhciB0bXAgPSB0aGlzLmluZGljZXNbaW5kZXgg
KyAxXTsKKyAgICAgICAgICAgICAgICB0aGlzLmluZGljZXNbaW5kZXggKyAxXSA9IHRoaXMuaW5k
aWNlc1tpbmRleCArIDJdOworICAgICAgICAgICAgICAgIHRoaXMuaW5kaWNlc1tpbmRleCArIDJd
ID0gdG1wOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogTWVyZ2VzIHRoZSBwYXNzZWQgVmVydGV4RGF0YSBpbnRv
IHRoZSBjdXJyZW50IG9uZQorICAgICAqIEBwYXJhbSBvdGhlciB0aGUgVmVydGV4RGF0YSB0byBi
ZSBtZXJnZWQgaW50byB0aGUgY3VycmVudCBvbmUKKyAgICAgKiBAcGFyYW0gdXNlMzJCaXRzSW5k
aWNlcyBkZWZpbmVzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGluZGljZXMgbXVzdCBiZSBzdG9y
ZSBpbiBhIDMyIGJpdHMgYXJyYXkKKyAgICAgKiBAcmV0dXJucyB0aGUgbW9kaWZpZWQgVmVydGV4
RGF0YQorICAgICAqLworICAgIFZlcnRleERhdGEucHJvdG90eXBlLm1lcmdlID0gZnVuY3Rpb24g
KG90aGVyLCB1c2UzMkJpdHNJbmRpY2VzKSB7CisgICAgICAgIGlmICh1c2UzMkJpdHNJbmRpY2Vz
ID09PSB2b2lkIDApIHsgdXNlMzJCaXRzSW5kaWNlcyA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMu
X3ZhbGlkYXRlKCk7CisgICAgICAgIG90aGVyLl92YWxpZGF0ZSgpOworICAgICAgICBpZiAoIXRo
aXMubm9ybWFscyAhPT0gIW90aGVyLm5vcm1hbHMgfHwKKyAgICAgICAgICAgICF0aGlzLnRhbmdl
bnRzICE9PSAhb3RoZXIudGFuZ2VudHMgfHwKKyAgICAgICAgICAgICF0aGlzLnV2cyAhPT0gIW90
aGVyLnV2cyB8fAorICAgICAgICAgICAgIXRoaXMudXZzMiAhPT0gIW90aGVyLnV2czIgfHwKKyAg
ICAgICAgICAgICF0aGlzLnV2czMgIT09ICFvdGhlci51dnMzIHx8CisgICAgICAgICAgICAhdGhp
cy51dnM0ICE9PSAhb3RoZXIudXZzNCB8fAorICAgICAgICAgICAgIXRoaXMudXZzNSAhPT0gIW90
aGVyLnV2czUgfHwKKyAgICAgICAgICAgICF0aGlzLnV2czYgIT09ICFvdGhlci51dnM2IHx8Cisg
ICAgICAgICAgICAhdGhpcy5jb2xvcnMgIT09ICFvdGhlci5jb2xvcnMgfHwKKyAgICAgICAgICAg
ICF0aGlzLm1hdHJpY2VzSW5kaWNlcyAhPT0gIW90aGVyLm1hdHJpY2VzSW5kaWNlcyB8fAorICAg
ICAgICAgICAgIXRoaXMubWF0cmljZXNXZWlnaHRzICE9PSAhb3RoZXIubWF0cmljZXNXZWlnaHRz
IHx8CisgICAgICAgICAgICAhdGhpcy5tYXRyaWNlc0luZGljZXNFeHRyYSAhPT0gIW90aGVyLm1h
dHJpY2VzSW5kaWNlc0V4dHJhIHx8CisgICAgICAgICAgICAhdGhpcy5tYXRyaWNlc1dlaWdodHNF
eHRyYSAhPT0gIW90aGVyLm1hdHJpY2VzV2VpZ2h0c0V4dHJhKSB7CisgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkNhbm5vdCBtZXJnZSB2ZXJ0ZXggZGF0YSB0aGF0IGRvIG5vdCBoYXZlIHRo
ZSBzYW1lIHNldCBvZiBhdHRyaWJ1dGVzIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG90aGVy
LmluZGljZXMpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5pbmRpY2VzKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5pbmRpY2VzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIg
b2Zmc2V0ID0gdGhpcy5wb3NpdGlvbnMgPyB0aGlzLnBvc2l0aW9ucy5sZW5ndGggLyAzIDogMDsK
KyAgICAgICAgICAgIHZhciBpc1NyY1R5cGVkQXJyYXkgPSB0aGlzLmluZGljZXMuQllURVNfUEVS
X0VMRU1FTlQgIT09IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIGlmIChpc1NyY1R5cGVkQXJyYXkp
IHsKKyAgICAgICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aCArIG90aGVy
LmluZGljZXMubGVuZ3RoOworICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gdXNlMzJCaXRzSW5k
aWNlcyB8fCB0aGlzLmluZGljZXMgaW5zdGFuY2VvZiBVaW50MzJBcnJheSA/IG5ldyBVaW50MzJB
cnJheShsZW4pIDogbmV3IFVpbnQxNkFycmF5KGxlbik7CisgICAgICAgICAgICAgICAgdGVtcC5z
ZXQodGhpcy5pbmRpY2VzKTsKKyAgICAgICAgICAgICAgICB2YXIgZGVjYWwgPSB0aGlzLmluZGlj
ZXMubGVuZ3RoOworICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBv
dGhlci5pbmRpY2VzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICB0ZW1w
W2RlY2FsICsgaW5kZXhdID0gb3RoZXIuaW5kaWNlc1tpbmRleF0gKyBvZmZzZXQ7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuaW5kaWNlcyA9IHRlbXA7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRl
eCA9IDA7IGluZGV4IDwgb3RoZXIuaW5kaWNlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5pbmRpY2VzLnB1c2gob3RoZXIuaW5kaWNlc1tpbmRleF0gKyBvZmZz
ZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB0aGlzLnBvc2l0aW9ucyA9IHRoaXMuX21lcmdlRWxlbWVudCh0aGlzLnBvc2l0aW9ucywgb3Ro
ZXIucG9zaXRpb25zKTsKKyAgICAgICAgdGhpcy5ub3JtYWxzID0gdGhpcy5fbWVyZ2VFbGVtZW50
KHRoaXMubm9ybWFscywgb3RoZXIubm9ybWFscyk7CisgICAgICAgIHRoaXMudGFuZ2VudHMgPSB0
aGlzLl9tZXJnZUVsZW1lbnQodGhpcy50YW5nZW50cywgb3RoZXIudGFuZ2VudHMpOworICAgICAg
ICB0aGlzLnV2cyA9IHRoaXMuX21lcmdlRWxlbWVudCh0aGlzLnV2cywgb3RoZXIudXZzKTsKKyAg
ICAgICAgdGhpcy51dnMyID0gdGhpcy5fbWVyZ2VFbGVtZW50KHRoaXMudXZzMiwgb3RoZXIudXZz
Mik7CisgICAgICAgIHRoaXMudXZzMyA9IHRoaXMuX21lcmdlRWxlbWVudCh0aGlzLnV2czMsIG90
aGVyLnV2czMpOworICAgICAgICB0aGlzLnV2czQgPSB0aGlzLl9tZXJnZUVsZW1lbnQodGhpcy51
dnM0LCBvdGhlci51dnM0KTsKKyAgICAgICAgdGhpcy51dnM1ID0gdGhpcy5fbWVyZ2VFbGVtZW50
KHRoaXMudXZzNSwgb3RoZXIudXZzNSk7CisgICAgICAgIHRoaXMudXZzNiA9IHRoaXMuX21lcmdl
RWxlbWVudCh0aGlzLnV2czYsIG90aGVyLnV2czYpOworICAgICAgICB0aGlzLmNvbG9ycyA9IHRo
aXMuX21lcmdlRWxlbWVudCh0aGlzLmNvbG9ycywgb3RoZXIuY29sb3JzKTsKKyAgICAgICAgdGhp
cy5tYXRyaWNlc0luZGljZXMgPSB0aGlzLl9tZXJnZUVsZW1lbnQodGhpcy5tYXRyaWNlc0luZGlj
ZXMsIG90aGVyLm1hdHJpY2VzSW5kaWNlcyk7CisgICAgICAgIHRoaXMubWF0cmljZXNXZWlnaHRz
ID0gdGhpcy5fbWVyZ2VFbGVtZW50KHRoaXMubWF0cmljZXNXZWlnaHRzLCBvdGhlci5tYXRyaWNl
c1dlaWdodHMpOworICAgICAgICB0aGlzLm1hdHJpY2VzSW5kaWNlc0V4dHJhID0gdGhpcy5fbWVy
Z2VFbGVtZW50KHRoaXMubWF0cmljZXNJbmRpY2VzRXh0cmEsIG90aGVyLm1hdHJpY2VzSW5kaWNl
c0V4dHJhKTsKKyAgICAgICAgdGhpcy5tYXRyaWNlc1dlaWdodHNFeHRyYSA9IHRoaXMuX21lcmdl
RWxlbWVudCh0aGlzLm1hdHJpY2VzV2VpZ2h0c0V4dHJhLCBvdGhlci5tYXRyaWNlc1dlaWdodHNF
eHRyYSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgVmVydGV4RGF0YS5wcm90
b3R5cGUuX21lcmdlRWxlbWVudCA9IGZ1bmN0aW9uIChzb3VyY2UsIG90aGVyKSB7CisgICAgICAg
IGlmICghc291cmNlKSB7CisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFvdGhlcikgeworICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTsKKyAgICAgICAg
fQorICAgICAgICB2YXIgbGVuID0gb3RoZXIubGVuZ3RoICsgc291cmNlLmxlbmd0aDsKKyAgICAg
ICAgdmFyIGlzU3JjVHlwZWRBcnJheSA9IHNvdXJjZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheTsK
KyAgICAgICAgdmFyIGlzT3RoVHlwZWRBcnJheSA9IG90aGVyIGluc3RhbmNlb2YgRmxvYXQzMkFy
cmF5OworICAgICAgICAvLyB1c2Ugbm9uLWxvb3AgbWV0aG9kIHdoZW4gdGhlIHNvdXJjZSBpcyBG
bG9hdDMyQXJyYXkKKyAgICAgICAgaWYgKGlzU3JjVHlwZWRBcnJheSkgeworICAgICAgICAgICAg
dmFyIHJldDMyID0gbmV3IEZsb2F0MzJBcnJheShsZW4pOworICAgICAgICAgICAgcmV0MzIuc2V0
KHNvdXJjZSk7CisgICAgICAgICAgICByZXQzMi5zZXQob3RoZXIsIHNvdXJjZS5sZW5ndGgpOwor
ICAgICAgICAgICAgcmV0dXJuIHJldDMyOworICAgICAgICAgICAgLy8gc291cmNlIGlzIG51bWJl
cltdLCB3aGVuIG90aGVyIGlzIGFsc28gdXNlIGNvbmNhdAorICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKCFpc090aFR5cGVkQXJyYXkpIHsKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2UuY29u
Y2F0KG90aGVyKTsKKyAgICAgICAgICAgIC8vIHNvdXJjZSBpcyBhIG51bWJlcltdLCBidXQgb3Ro
ZXIgaXMgYSBGbG9hdDMyQXJyYXksIGxvb3AgcmVxdWlyZWQKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHZhciByZXQgPSBzb3VyY2Uuc2xpY2UoMCk7IC8vIGNvcHkgc291
cmNlIHRvIGEgc2VwYXJhdGUgYXJyYXkKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4g
PSBvdGhlci5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIHJldC5wdXNo
KG90aGVyW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAg
ICAgIH0KKyAgICB9OworICAgIFZlcnRleERhdGEucHJvdG90eXBlLl92YWxpZGF0ZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLnBvc2l0aW9ucykgeworICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJQb3NpdGlvbnMgYXJlIHJlcXVpcmVkIik7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIGdldEVsZW1lbnRDb3VudCA9IGZ1bmN0aW9uIChraW5kLCB2YWx1ZXMpIHsKKyAgICAg
ICAgICAgIHZhciBzdHJpZGUgPSBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5EZWR1Y2VTdHJpZGUoa2luZCk7CisgICAgICAgICAgICBp
ZiAoKHZhbHVlcy5sZW5ndGggJSBzdHJpZGUpICE9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJUaGUgIiArIGtpbmQgKyAicyBhcnJheSBjb3VudCBtdXN0IGJlIGEgbXVs
dGlwbGUgb2YgIiArIHN0cmlkZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dmFsdWVzLmxlbmd0aCAvIHN0cmlkZTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHBvc2l0aW9u
c0VsZW1lbnRDb3VudCA9IGdldEVsZW1lbnRDb3VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHRoaXMucG9z
aXRpb25zKTsKKyAgICAgICAgdmFyIHZhbGlkYXRlRWxlbWVudENvdW50ID0gZnVuY3Rpb24gKGtp
bmQsIHZhbHVlcykgeworICAgICAgICAgICAgdmFyIGVsZW1lbnRDb3VudCA9IGdldEVsZW1lbnRD
b3VudChraW5kLCB2YWx1ZXMpOworICAgICAgICAgICAgaWYgKGVsZW1lbnRDb3VudCAhPT0gcG9z
aXRpb25zRWxlbWVudENvdW50KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJU
aGUgIiArIGtpbmQgKyAicyBlbGVtZW50IGNvdW50ICgiICsgZWxlbWVudENvdW50ICsgIikgZG9l
cyBub3QgbWF0Y2ggdGhlIHBvc2l0aW9ucyBjb3VudCAoIiArIHBvc2l0aW9uc0VsZW1lbnRDb3Vu
dCArICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIGlmICh0aGlzLm5v
cm1hbHMpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudENvdW50KF9NZXNoZXNfYnVmZmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQs
IHRoaXMubm9ybWFscyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudGFuZ2VudHMpIHsK
KyAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudENvdW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlRhbmdlbnRLaW5kLCB0aGlzLnRh
bmdlbnRzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy51dnMpIHsKKyAgICAgICAgICAg
IHZhbGlkYXRlRWxlbWVudENvdW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCwgdGhpcy51dnMpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLnV2czIpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudENvdW50
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZl
ciJdLlVWMktpbmQsIHRoaXMudXZzMik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudXZz
MykgeworICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50Q291bnQoX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVYzS2luZCwgdGhpcy51
dnMzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy51dnM0KSB7CisgICAgICAgICAgICB2
YWxpZGF0ZUVsZW1lbnRDb3VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjRLaW5kLCB0aGlzLnV2czQpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLnV2czUpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudENvdW50
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZl
ciJdLlVWNUtpbmQsIHRoaXMudXZzNSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudXZz
NikgeworICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50Q291bnQoX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVY2S2luZCwgdGhpcy51
dnM2KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5jb2xvcnMpIHsKKyAgICAgICAgICAg
IHZhbGlkYXRlRWxlbWVudENvdW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCwgdGhpcy5jb2xvcnMpOworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLm1hdHJpY2VzSW5kaWNlcykgeworICAgICAgICAgICAgdmFs
aWRhdGVFbGVtZW50Q291bnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCwgdGhpcy5tYXRyaWNlc0lu
ZGljZXMpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLm1hdHJpY2VzV2VpZ2h0cykgewor
ICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50Q291bnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCwg
dGhpcy5tYXRyaWNlc1dlaWdodHMpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLm1hdHJp
Y2VzSW5kaWNlc0V4dHJhKSB7CisgICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnRDb3VudChfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5N
YXRyaWNlc0luZGljZXNFeHRyYUtpbmQsIHRoaXMubWF0cmljZXNJbmRpY2VzRXh0cmEpOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLm1hdHJpY2VzV2VpZ2h0c0V4dHJhKSB7CisgICAgICAg
ICAgICB2YWxpZGF0ZUVsZW1lbnRDb3VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQsIHRo
aXMubWF0cmljZXNXZWlnaHRzRXh0cmEpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXJpYWxpemVzIHRoZSBWZXJ0ZXhEYXRhCisgICAgICogQHJldHVybnMgYSBzZXJpYWxp
emVkIG9iamVjdAorICAgICAqLworICAgIFZlcnRleERhdGEucHJvdG90eXBlLnNlcmlhbGl6ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB0aGlzLnNl
cmlhbGl6ZSgpOworICAgICAgICBpZiAodGhpcy5wb3NpdGlvbnMpIHsKKyAgICAgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QucG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMubm9ybWFscykgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5ub3JtYWxzID0gdGhpcy5ub3JtYWxzOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
LnRhbmdlbnRzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRhbmdlbnRzID0g
dGhpcy50YW5nZW50czsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy51dnMpIHsKKyAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudXZzID0gdGhpcy51dnM7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMudXZzMikgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51
dnMyID0gdGhpcy51dnMyOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnV2czMpIHsKKyAg
ICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudXZzMyA9IHRoaXMudXZzMzsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy51dnM0KSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LnV2czQgPSB0aGlzLnV2czQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudXZzNSkg
eworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51dnM1ID0gdGhpcy51dnM1OworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLnV2czYpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QudXZzNiA9IHRoaXMudXZzNjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5j
b2xvcnMpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29sb3JzID0gdGhpcy5j
b2xvcnM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubWF0cmljZXNJbmRpY2VzKSB7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdHJpY2VzSW5kaWNlcyA9IHRoaXMubWF0
cmljZXNJbmRpY2VzOworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXRyaWNlc0lu
ZGljZXMuX2lzRXhwYW5kZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLm1h
dHJpY2VzV2VpZ2h0cykgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXRyaWNl
c1dlaWdodHMgPSB0aGlzLm1hdHJpY2VzV2VpZ2h0czsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5tYXRyaWNlc0luZGljZXNFeHRyYSkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5tYXRyaWNlc0luZGljZXNFeHRyYSA9IHRoaXMubWF0cmljZXNJbmRpY2VzRXh0cmE7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdHJpY2VzSW5kaWNlc0V4dHJhLl9pc0V4
cGFuZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5tYXRyaWNlc1dlaWdo
dHNFeHRyYSkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXRyaWNlc1dlaWdo
dHNFeHRyYSA9IHRoaXMubWF0cmljZXNXZWlnaHRzRXh0cmE7CisgICAgICAgIH0KKyAgICAgICAg
c2VyaWFsaXphdGlvbk9iamVjdC5pbmRpY2VzID0gdGhpcy5pbmRpY2VzOworICAgICAgICByZXR1
cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioK
KyAgICAgKiBFeHRyYWN0cyB0aGUgdmVydGV4RGF0YSBmcm9tIGEgbWVzaAorICAgICAqIEBwYXJh
bSBtZXNoIHRoZSBtZXNoIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgVmVydGV4RGF0YQorICAg
ICAqIEBwYXJhbSBjb3B5V2hlblNoYXJlZCBkZWZpbmVzIGlmIHRoZSBWZXJ0ZXhEYXRhIG11c3Qg
YmUgY2xvbmVkIHdoZW4gc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgbWVzaGVzLCBvcHRpb25hbCwg
ZGVmYXVsdCBmYWxzZQorICAgICAqIEBwYXJhbSBmb3JjZUNvcHkgaW5kaWNhdGluZyB0aGF0IHRo
ZSBWZXJ0ZXhEYXRhIG11c3QgYmUgY2xvbmVkLCBvcHRpb25hbCwgZGVmYXVsdCBmYWxzZQorICAg
ICAqIEByZXR1cm5zIHRoZSBvYmplY3QgVmVydGV4RGF0YSBhc3NvY2lhdGVkIHRvIHRoZSBwYXNz
ZWQgbWVzaAorICAgICAqLworICAgIFZlcnRleERhdGEuRXh0cmFjdEZyb21NZXNoID0gZnVuY3Rp
b24gKG1lc2gsIGNvcHlXaGVuU2hhcmVkLCBmb3JjZUNvcHkpIHsKKyAgICAgICAgcmV0dXJuIFZl
cnRleERhdGEuX0V4dHJhY3RGcm9tKG1lc2gsIGNvcHlXaGVuU2hhcmVkLCBmb3JjZUNvcHkpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogRXh0cmFjdHMgdGhlIHZlcnRleERhdGEgZnJvbSB0aGUg
Z2VvbWV0cnkKKyAgICAgKiBAcGFyYW0gZ2VvbWV0cnkgdGhlIGdlb21ldHJ5IGZyb20gd2hpY2gg
dG8gZXh0cmFjdCB0aGUgVmVydGV4RGF0YQorICAgICAqIEBwYXJhbSBjb3B5V2hlblNoYXJlZCBk
ZWZpbmVzIGlmIHRoZSBWZXJ0ZXhEYXRhIG11c3QgYmUgY2xvbmVkIHdoZW4gdGhlIGdlb21ldHJ0
eSBpcyBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBtZXNoZXMsIG9wdGlvbmFsLCBkZWZhdWx0IGZh
bHNlCisgICAgICogQHBhcmFtIGZvcmNlQ29weSBpbmRpY2F0aW5nIHRoYXQgdGhlIFZlcnRleERh
dGEgbXVzdCBiZSBjbG9uZWQsIG9wdGlvbmFsLCBkZWZhdWx0IGZhbHNlCisgICAgICogQHJldHVy
bnMgdGhlIG9iamVjdCBWZXJ0ZXhEYXRhIGFzc29jaWF0ZWQgdG8gdGhlIHBhc3NlZCBtZXNoCisg
ICAgICovCisgICAgVmVydGV4RGF0YS5FeHRyYWN0RnJvbUdlb21ldHJ5ID0gZnVuY3Rpb24gKGdl
b21ldHJ5LCBjb3B5V2hlblNoYXJlZCwgZm9yY2VDb3B5KSB7CisgICAgICAgIHJldHVybiBWZXJ0
ZXhEYXRhLl9FeHRyYWN0RnJvbShnZW9tZXRyeSwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7
CisgICAgfTsKKyAgICBWZXJ0ZXhEYXRhLl9FeHRyYWN0RnJvbSA9IGZ1bmN0aW9uIChtZXNoT3JH
ZW9tZXRyeSwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gbmV3IFZlcnRleERhdGEoKTsKKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGlj
ZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpKSB7CisgICAgICAgICAgICByZXN1bHQucG9z
aXRpb25zID0gbWVzaE9yR2VvbWV0cnkuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwg
Y29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hP
ckdlb21ldHJ5LmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKSkgeworICAgICAg
ICAgICAgcmVzdWx0Lm5vcm1hbHMgPSBtZXNoT3JHZW9tZXRyeS5nZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0u
Tm9ybWFsS2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5UYW5nZW50S2lu
ZCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC50YW5nZW50cyA9IG1lc2hPckdlb21ldHJ5LmdldFZl
cnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJW
ZXJ0ZXhCdWZmZXIiXS5UYW5nZW50S2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNEYXRhUHJlc2Vu
dChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZm
ZXIiXS5VVktpbmQpKSB7CisgICAgICAgICAgICByZXN1bHQudXZzID0gbWVzaE9yR2VvbWV0cnku
Z2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNEYXRhUHJlc2Vu
dChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZm
ZXIiXS5VVjJLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0LnV2czIgPSBtZXNoT3JHZW9tZXRy
eS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVydGV4QnVmZmVyIl0uVVYyS2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNEYXRhUHJl
c2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhC
dWZmZXIiXS5VVjNLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0LnV2czMgPSBtZXNoT3JHZW9t
ZXRyeS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVYzS2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29w
eSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNEYXRh
UHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0
ZXhCdWZmZXIiXS5VVjRLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0LnV2czQgPSBtZXNoT3JH
ZW9tZXRyeS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVY0S2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNl
Q29weSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNE
YXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJW
ZXJ0ZXhCdWZmZXIiXS5VVjVLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0LnV2czUgPSBtZXNo
T3JHZW9tZXRyeS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVY1S2luZCwgY29weVdoZW5TaGFyZWQsIGZv
cmNlQ29weSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGlj
ZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJWZXJ0ZXhCdWZmZXIiXS5VVjZLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0LnV2czYgPSBt
ZXNoT3JHZW9tZXRyeS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVY2S2luZCwgY29weVdoZW5TaGFyZWQs
IGZvcmNlQ29weSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVy
dGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQpKSB7CisgICAgICAgICAgICByZXN1bHQuY29s
b3JzID0gbWVzaE9yR2VvbWV0cnkuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCwgY29weVdo
ZW5TaGFyZWQsIGZvcmNlQ29weSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21l
dHJ5LmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNLaW5kKSkgeworICAg
ICAgICAgICAgcmVzdWx0Lm1hdHJpY2VzSW5kaWNlcyA9IG1lc2hPckdlb21ldHJ5LmdldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0
ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNLaW5kLCBjb3B5V2hlblNoYXJlZCwgZm9yY2VDb3B5
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWVzaE9yR2VvbWV0cnkuaXNWZXJ0aWNlc0RhdGFQ
cmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpKSB7CisgICAgICAgICAgICByZXN1bHQubWF0
cmljZXNXZWlnaHRzID0gbWVzaE9yR2VvbWV0cnkuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2Vz
V2VpZ2h0c0tpbmQsIGNvcHlXaGVuU2hhcmVkLCBmb3JjZUNvcHkpOworICAgICAgICB9CisgICAg
ICAgIGlmIChtZXNoT3JHZW9tZXRyeS5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJ
bmRpY2VzRXh0cmFLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0Lm1hdHJpY2VzSW5kaWNlc0V4
dHJhID0gbWVzaE9yR2VvbWV0cnkuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0V4
dHJhS2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdo
dHNFeHRyYUtpbmQpKSB7CisgICAgICAgICAgICByZXN1bHQubWF0cmljZXNXZWlnaHRzRXh0cmEg
PSBtZXNoT3JHZW9tZXRyeS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzRXh0cmFL
aW5kLCBjb3B5V2hlblNoYXJlZCwgZm9yY2VDb3B5KTsKKyAgICAgICAgfQorICAgICAgICByZXN1
bHQuaW5kaWNlcyA9IG1lc2hPckdlb21ldHJ5LmdldEluZGljZXMoY29weVdoZW5TaGFyZWQsIGZv
cmNlQ29weSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIHRoZSBWZXJ0ZXhEYXRhIGZvciBhIFJpYmJvbgorICAgICAqIEBwYXJhbSBvcHRp
b25zIGFuIG9iamVjdCB1c2VkIHRvIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRl
cnMgZm9yIHRoZSByaWJib24sIHJlcXVpcmVkIGJ1dCBjYW4gYmUgZW1wdHkKKyAgICAgICogKiBw
YXRoQXJyYXkgYXJyYXkgb2YgcGF0aHMsIGVhY2ggb2Ygd2hpY2ggYW4gYXJyYXkgb2Ygc3VjY2Vz
c2l2ZSBWZWN0b3IzCisgICAgICAqICogY2xvc2VBcnJheSBjcmVhdGVzIGEgc2VhbSBiZXR3ZWVu
IHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgcGF0aHMgb2YgdGhlIHBhdGhBcnJheSwgb3B0aW9uYWws
IGRlZmF1bHQgZmFsc2UKKyAgICAgICogKiBjbG9zZVBhdGggY3JlYXRlcyBhIHNlYW0gYmV0d2Vl
biB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IHBvaW50cyBvZiBlYWNoIHBhdGggb2YgdGhlIHBhdGgg
YXJyYXksIG9wdGlvbmFsLCBkZWZhdWx0IGZhbHNlCisgICAgICAqICogb2Zmc2V0IGEgcG9zaXRp
dmUgaW50ZWdlciwgb25seSB1c2VkIHdoZW4gcGF0aEFycmF5IGNvbnRhaW5zIGEgc2luZ2xlIHBh
dGggKG9mZnNldCA9IDEwIG1lYW5zIHRoZSBwb2ludCAxIGlzIGpvaW5lZCB0byB0aGUgcG9pbnQg
MTEpLCBkZWZhdWx0IHJvdW5kZWQgaGFsZiBzaXplIG9mIHRoZSBwYXRoQXJyYXkgbGVuZ3RoCisg
ICAgICAqICogc2lkZU9yaWVudGF0aW9uIG9wdGlvbmFsIGFuZCB0YWtlcyB0aGUgdmFsdWVzIDog
TWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBNZXNoLkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lE
RQorICAgICAgKiAqIGZyb250VXZzIG9ubHkgdXNhYmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJs
ZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGlt
YWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBmcm9udCBzaWRlLCBvcHRpb25hbCwgZGVmYXVs
dCB2ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAgKiAqIGJhY2tVVnMgb25seSB1c2FibGUgd2hl
biB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFy
dHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgYXBwbHkgb24gdGhlIGJhY2sgc2lk
ZSwgb3B0aW9uYWwsIGRlZmF1bHQgdmVjdG9yNCAoMCwgMCwgMSwgMSkKKyAgICAgICogKiBpbnZl
cnRVViBzd2FwcyBpbiB0aGUgVSBhbmQgViBjb29yZGluYXRlcyB3aGVuIGFwcGx5aW5nIGEgdGV4
dHVyZSwgb3B0aW9uYWwsIGRlZmF1bHQgZmFsc2UKKyAgICAgICogKiB1dnMgYSBsaW5lYXIgYXJy
YXksIG9mIGxlbmd0aCAyICogbnVtYmVyIG9mIHZlcnRpY2VzLCBvZiBjdXN0b20gVVYgdmFsdWVz
LCBvcHRpb25hbAorICAgICAgKiAqIGNvbG9ycyBhIGxpbmVhciBhcnJheSwgb2YgbGVuZ3RoIDQg
KiBudW1iZXIgb2YgdmVydGljZXMsIG9mIGN1c3RvbSBjb2xvciB2YWx1ZXMsIG9wdGlvbmFsCisg
ICAgICogQHJldHVybnMgdGhlIFZlcnRleERhdGEgb2YgdGhlIHJpYmJvbgorICAgICAqLworICAg
IFZlcnRleERhdGEuQ3JlYXRlUmliYm9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICAgICAg
dGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siX0RldlRv
b2xzIl0uV2FybkltcG9ydCgicmliYm9uQnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyB0aGUgVmVydGV4RGF0YSBmb3IgYSBib3gKKyAgICAgKiBAcGFyYW0gb3B0aW9u
cyBhbiBvYmplY3QgdXNlZCB0byBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJz
IGZvciB0aGUgYm94LCByZXF1aXJlZCBidXQgY2FuIGJlIGVtcHR5CisgICAgICAqICogc2l6ZSBz
ZXRzIHRoZSB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGUgYm94IHRvIHRoZSB2YWx1ZSBv
ZiBzaXplLCBvcHRpb25hbCBkZWZhdWx0IDEKKyAgICAgICogKiB3aWR0aCBzZXRzIHRoZSB3aWR0
aCAoeCBkaXJlY3Rpb24pIG9mIHRoZSBib3gsIG92ZXJ3cml0ZXMgdGhlIHdpZHRoIHNldCBieSBz
aXplLCBvcHRpb25hbCwgZGVmYXVsdCBzaXplCisgICAgICAqICogaGVpZ2h0IHNldHMgdGhlIGhl
aWdodCAoeSBkaXJlY3Rpb24pIG9mIHRoZSBib3gsIG92ZXJ3cml0ZXMgdGhlIGhlaWdodCBzZXQg
Ynkgc2l6ZSwgb3B0aW9uYWwsIGRlZmF1bHQgc2l6ZQorICAgICAgKiAqIGRlcHRoIHNldHMgdGhl
IGRlcHRoICh6IGRpcmVjdGlvbikgb2YgdGhlIGJveCwgb3ZlcndyaXRlcyB0aGUgZGVwdGggc2V0
IGJ5IHNpemUsIG9wdGlvbmFsLCBkZWZhdWx0IHNpemUKKyAgICAgICogKiBmYWNlVVYgYW4gYXJy
YXkgb2YgNiBWZWN0b3I0IGVsZW1lbnRzIHVzZWQgdG8gc2V0IGRpZmZlcmVudCBpbWFnZXMgdG8g
ZWFjaCBib3ggc2lkZQorICAgICAgKiAqIGZhY2VDb2xvcnMgYW4gYXJyYXkgb2YgNiBDb2xvcjMg
ZWxlbWVudHMgdXNlZCB0byBzZXQgZGlmZmVyZW50IGNvbG9ycyB0byBlYWNoIGJveCBzaWRlCisg
ICAgICAqICogc2lkZU9yaWVudGF0aW9uIG9wdGlvbmFsIGFuZCB0YWtlcyB0aGUgdmFsdWVzIDog
TWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBNZXNoLkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lE
RQorICAgICAgKiAqIGZyb250VXZzIG9ubHkgdXNhYmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJs
ZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGlt
YWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBmcm9udCBzaWRlLCBvcHRpb25hbCwgZGVmYXVs
dCB2ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAgKiAqIGJhY2tVVnMgb25seSB1c2FibGUgd2hl
biB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFy
dHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgYXBwbHkgb24gdGhlIGJhY2sgc2lk
ZSwgb3B0aW9uYWwsIGRlZmF1bHQgdmVjdG9yNCAoMCwgMCwgMSwgMSkKKyAgICAgKiBAcmV0dXJu
cyB0aGUgVmVydGV4RGF0YSBvZiB0aGUgYm94CisgICAgICovCisgICAgVmVydGV4RGF0YS5DcmVh
dGVCb3ggPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJi
b3hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBWZXJ0ZXhE
YXRhIGZvciBhIHRpbGVkIGJveAorICAgICAqIEBwYXJhbSBvcHRpb25zIGFuIG9iamVjdCB1c2Vk
IHRvIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBib3gsIHJl
cXVpcmVkIGJ1dCBjYW4gYmUgZW1wdHkKKyAgICAgICogKiBmYWNlVGlsZXMgc2V0cyB0aGUgcGF0
dGVybiwgdGlsZSBzaXplIGFuZCBudW1iZXIgb2YgdGlsZXMgZm9yIGEgZmFjZQorICAgICAgKiAq
IGZhY2VVViBhbiBhcnJheSBvZiA2IFZlY3RvcjQgZWxlbWVudHMgdXNlZCB0byBzZXQgZGlmZmVy
ZW50IGltYWdlcyB0byBlYWNoIGJveCBzaWRlCisgICAgICAqICogZmFjZUNvbG9ycyBhbiBhcnJh
eSBvZiA2IENvbG9yMyBlbGVtZW50cyB1c2VkIHRvIHNldCBkaWZmZXJlbnQgY29sb3JzIHRvIGVh
Y2ggYm94IHNpZGUKKyAgICAgICogKiBzaWRlT3JpZW50YXRpb24gb3B0aW9uYWwgYW5kIHRha2Vz
IHRoZSB2YWx1ZXMgOiBNZXNoLkZST05UU0lERSAoZGVmYXVsdCksIE1lc2guQkFDS1NJREUgb3Ig
TWVzaC5ET1VCTEVTSURFCisgICAgICogQHJldHVybnMgdGhlIFZlcnRleERhdGEgb2YgdGhlIGJv
eAorICAgICAqLworICAgIFZlcnRleERhdGEuQ3JlYXRlVGlsZWRCb3ggPSBmdW5jdGlvbiAob3B0
aW9ucykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJ0aWxlZEJveEJ1aWxkZXIiKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgdGhlIFZlcnRleERhdGEgZm9yIGEgdGlsZWQg
cGxhbmUKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBhbiBvYmplY3QgdXNlZCB0byBzZXQgdGhlIGZv
bGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgYm94LCByZXF1aXJlZCBidXQgY2Fu
IGJlIGVtcHR5CisgICAgICAqICogcGF0dGVybiBhIGxpbWl0ZWQgcGF0dGVybiBhcnJhbmdlbWVu
dCBkZXBlbmRpbmcgb24gdGhlIG51bWJlcgorICAgICAgKiAqIHRpbGVTaXplIHNldHMgdGhlIHdp
ZHRoLCBoZWlnaHQgYW5kIGRlcHRoIG9mIHRoZSB0aWxlIHRvIHRoZSB2YWx1ZSBvZiBzaXplLCBv
cHRpb25hbCBkZWZhdWx0IDEKKyAgICAgICogKiB0aWxlV2lkdGggc2V0cyB0aGUgd2lkdGggKHgg
ZGlyZWN0aW9uKSBvZiB0aGUgdGlsZSwgb3ZlcndyaXRlcyB0aGUgd2lkdGggc2V0IGJ5IHNpemUs
IG9wdGlvbmFsLCBkZWZhdWx0IHNpemUKKyAgICAgICogKiB0aWxlSGVpZ2h0IHNldHMgdGhlIGhl
aWdodCAoeSBkaXJlY3Rpb24pIG9mIHRoZSB0aWxlLCBvdmVyd3JpdGVzIHRoZSBoZWlnaHQgc2V0
IGJ5IHNpemUsIG9wdGlvbmFsLCBkZWZhdWx0IHNpemUKKyAgICAgICogKiBzaWRlT3JpZW50YXRp
b24gb3B0aW9uYWwgYW5kIHRha2VzIHRoZSB2YWx1ZXMgOiBNZXNoLkZST05UU0lERSAoZGVmYXVs
dCksIE1lc2guQkFDS1NJREUgb3IgTWVzaC5ET1VCTEVTSURFCisgICAgICAqICogZnJvbnRVdnMg
b25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHVzZWQgdG8g
Y2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgYXBwbHkg
b24gdGhlIGZyb250IHNpZGUsIG9wdGlvbmFsLCBkZWZhdWx0IHZlY3RvcjQgKDAsIDAsIDEsIDEp
CisgICAgICAqICogYmFja1VWcyBvbmx5IHVzYWJsZSB3aGVuIHlvdSBjcmVhdGUgYSBkb3VibGUt
c2lkZWQgbWVzaCwgdXNlZCB0byBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFn
ZSB0byBjcm9wIGFuZCBhcHBseSBvbiB0aGUgYmFjayBzaWRlLCBvcHRpb25hbCwgZGVmYXVsdCB2
ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAqIEByZXR1cm5zIHRoZSBWZXJ0ZXhEYXRhIG9mIHRo
ZSB0aWxlZCBwbGFuZQorICAgICAqLworICAgIFZlcnRleERhdGEuQ3JlYXRlVGlsZWRQbGFuZSA9
IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoInRpbGVkUGxh
bmVCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBWZXJ0ZXhE
YXRhIGZvciBhbiBlbGxpcHNvaWQsIGRlZmF1bHRzIHRvIGEgc3BoZXJlCisgICAgICogQHBhcmFt
IG9wdGlvbnMgYW4gb2JqZWN0IHVzZWQgdG8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcGFy
YW1ldGVycyBmb3IgdGhlIGJveCwgcmVxdWlyZWQgYnV0IGNhbiBiZSBlbXB0eQorICAgICAgKiAq
IHNlZ21lbnRzIHNldHMgdGhlIG51bWJlciBvZiBob3Jpem9udGFsIHN0cmlwcyBvcHRpb25hbCwg
ZGVmYXVsdCAzMgorICAgICAgKiAqIGRpYW1ldGVyIHNldHMgdGhlIGF4ZXMgZGltZW5zaW9ucywg
ZGlhbWV0ZXJYLCBkaWFtZXRlclkgYW5kIGRpYW1ldGVyWiB0byB0aGUgdmFsdWUgb2YgZGlhbWV0
ZXIsIG9wdGlvbmFsIGRlZmF1bHQgMQorICAgICAgKiAqIGRpYW1ldGVyWCBzZXRzIHRoZSBkaWFt
ZXRlclggKHggZGlyZWN0aW9uKSBvZiB0aGUgZWxsaXBzb2lkLCBvdmVyd3JpdGVzIHRoZSBkaWFt
ZXRlclggc2V0IGJ5IGRpYW1ldGVyLCBvcHRpb25hbCwgZGVmYXVsdCBkaWFtZXRlcgorICAgICAg
KiAqIGRpYW1ldGVyWSBzZXRzIHRoZSBkaWFtZXRlclkgKHkgZGlyZWN0aW9uKSBvZiB0aGUgZWxs
aXBzb2lkLCBvdmVyd3JpdGVzIHRoZSBkaWFtZXRlclkgc2V0IGJ5IGRpYW1ldGVyLCBvcHRpb25h
bCwgZGVmYXVsdCBkaWFtZXRlcgorICAgICAgKiAqIGRpYW1ldGVyWiBzZXRzIHRoZSBkaWFtZXRl
clogKHogZGlyZWN0aW9uKSBvZiB0aGUgZWxsaXBzb2lkLCBvdmVyd3JpdGVzIHRoZSBkaWFtZXRl
clogc2V0IGJ5IGRpYW1ldGVyLCBvcHRpb25hbCwgZGVmYXVsdCBkaWFtZXRlcgorICAgICAgKiAq
IGFyYyBhIG51bWJlciBmcm9tIDAgdG8gMSwgdG8gY3JlYXRlIGFuIHVuY2xvc2VkIGVsbGlwc29p
ZCBiYXNlZCBvbiB0aGUgZnJhY3Rpb24gb2YgdGhlIGNpcmN1bWZlcmVuY2UgKGxhdGl0dWRlKSBn
aXZlbiBieSB0aGUgYXJjIHZhbHVlLCBvcHRpb25hbCwgZGVmYXVsdCAxCisgICAgICAqICogc2xp
Y2UgYSBudW1iZXIgZnJvbSAwIHRvIDEsIHRvIGNyZWF0ZSBhbiB1bmNsb3NlZCBlbGxpcHNvaWQg
YmFzZWQgb24gdGhlIGZyYWN0aW9uIG9mIHRoZSBoZWlnaHQgKGxhdGl0dWRlKSBnaXZlbiBieSB0
aGUgYXJjIHZhbHVlLCBvcHRpb25hbCwgZGVmYXVsdCAxCisgICAgICAqICogc2lkZU9yaWVudGF0
aW9uIG9wdGlvbmFsIGFuZCB0YWtlcyB0aGUgdmFsdWVzIDogTWVzaC5GUk9OVFNJREUgKGRlZmF1
bHQpLCBNZXNoLkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lERQorICAgICAgKiAqIGZyb250VXZz
IG9ubHkgdXNhYmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRv
IGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5
IG9uIHRoZSBmcm9udCBzaWRlLCBvcHRpb25hbCwgZGVmYXVsdCB2ZWN0b3I0ICgwLCAwLCAxLCAx
KQorICAgICAgKiAqIGJhY2tVVnMgb25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91Ymxl
LXNpZGVkIG1lc2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1h
Z2UgdG8gY3JvcCBhbmQgYXBwbHkgb24gdGhlIGJhY2sgc2lkZSwgb3B0aW9uYWwsIGRlZmF1bHQg
dmVjdG9yNCAoMCwgMCwgMSwgMSkKKyAgICAgKiBAcmV0dXJucyB0aGUgVmVydGV4RGF0YSBvZiB0
aGUgZWxsaXBzb2lkCisgICAgICovCisgICAgVmVydGV4RGF0YS5DcmVhdGVTcGhlcmUgPSBmdW5j
dGlvbiAob3B0aW9ucykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJzcGhlcmVCdWlsZGVy
Iik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBWZXJ0ZXhEYXRhIGZvciBh
IGN5bGluZGVyLCBjb25lIG9yIHByaXNtCisgICAgICogQHBhcmFtIG9wdGlvbnMgYW4gb2JqZWN0
IHVzZWQgdG8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIGJv
eCwgcmVxdWlyZWQgYnV0IGNhbiBiZSBlbXB0eQorICAgICAgKiAqIGhlaWdodCBzZXRzIHRoZSBo
ZWlnaHQgKHkgZGlyZWN0aW9uKSBvZiB0aGUgY3lsaW5kZXIsIG9wdGlvbmFsLCBkZWZhdWx0IDIK
KyAgICAgICogKiBkaWFtZXRlclRvcCBzZXRzIHRoZSBkaWFtZXRlciBvZiB0aGUgdG9wIG9mIHRo
ZSBjb25lLCBvdmVyd3JpdGVzIGRpYW1ldGVyLCAgb3B0aW9uYWwsIGRlZmF1bHQgZGlhbWV0ZXIK
KyAgICAgICogKiBkaWFtZXRlckJvdHRvbSBzZXRzIHRoZSBkaWFtZXRlciBvZiB0aGUgYm90dG9t
IG9mIHRoZSBjb25lLCBvdmVyd3JpdGVzIGRpYW1ldGVyLCAgb3B0aW9uYWwsIGRlZmF1bHQgZGlh
bWV0ZXIKKyAgICAgICogKiBkaWFtZXRlciBzZXRzIHRoZSBkaWFtZXRlciBvZiB0aGUgdG9wIGFu
ZCBib3R0b20gb2YgdGhlIGNvbmUsIG9wdGlvbmFsIGRlZmF1bHQgMQorICAgICAgKiAqIHRlc3Nl
bGxhdGlvbiB0aGUgbnVtYmVyIG9mIHByaXNtIHNpZGVzLCAzIGZvciBhIHRyaWFuZ3VsYXIgcHJp
c20sIG9wdGlvbmFsLCBkZWZhdWx0IDI0CisgICAgICAqICogc3ViZGl2aXNpb25zYCB0aGUgbnVt
YmVyIG9mIHJpbmdzIGFsb25nIHRoZSBjeWxpbmRlciBoZWlnaHQsIG9wdGlvbmFsLCBkZWZhdWx0
IDEKKyAgICAgICogKiBhcmMgYSBudW1iZXIgZnJvbSAwIHRvIDEsIHRvIGNyZWF0ZSBhbiB1bmNs
b3NlZCBjeWxpbmRlciBiYXNlZCBvbiB0aGUgZnJhY3Rpb24gb2YgdGhlIGNpcmN1bWZlcmVuY2Ug
Z2l2ZW4gYnkgdGhlIGFyYyB2YWx1ZSwgb3B0aW9uYWwsIGRlZmF1bHQgMQorICAgICAgKiAqIGZh
Y2VDb2xvcnMgYW4gYXJyYXkgb2YgQ29sb3IzIGVsZW1lbnRzIHVzZWQgdG8gc2V0IGRpZmZlcmVu
dCBjb2xvcnMgdG8gdGhlIHRvcCwgcmluZ3MgYW5kIGJvdHRvbSByZXNwZWN0aXZlbHkKKyAgICAg
ICogKiBmYWNlVVYgYW4gYXJyYXkgb2YgVmVjdG9yNCBlbGVtZW50cyB1c2VkIHRvIHNldCBkaWZm
ZXJlbnQgaW1hZ2VzIHRvIHRoZSB0b3AsIHJpbmdzIGFuZCBib3R0b20gcmVzcGVjdGl2ZWx5Cisg
ICAgICAqICogaGFzUmluZ3Mgd2hlbiB0cnVlIG1ha2VzIGVhY2ggc3ViZGl2aXNpb24gaW5kZXBl
bmRhbnRseSB0cmVhdGVkIGFzIGEgZmFjZSBmb3IgZmFjZVVWIGFuZCBmYWNlQ29sb3JzLCBvcHRp
b25hbCwgZGVmYXVsdCBmYWxzZQorICAgICAgKiAqIGVuY2xvc2Ugd2hlbiB0cnVlIGNsb3NlcyBh
biBvcGVuIGN5bGluZGVyIGJ5IGFkZGluZyBleHRyYSBmbGF0IGZhY2VzIGJldHdlZW4gdGhlIGhl
aWdodCBheGlzIGFuZCB2ZXJ0aWNhbCBlZGdlcywgdGhpbmsgY3V0IGNha2UKKyAgICAgICogKiBz
aWRlT3JpZW50YXRpb24gb3B0aW9uYWwgYW5kIHRha2VzIHRoZSB2YWx1ZXMgOiBNZXNoLkZST05U
U0lERSAoZGVmYXVsdCksIE1lc2guQkFDS1NJREUgb3IgTWVzaC5ET1VCTEVTSURFCisgICAgICAq
ICogZnJvbnRVdnMgb25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1l
c2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3Jv
cCBhbmQgYXBwbHkgb24gdGhlIGZyb250IHNpZGUsIG9wdGlvbmFsLCBkZWZhdWx0IHZlY3RvcjQg
KDAsIDAsIDEsIDEpCisgICAgICAqICogYmFja1VWcyBvbmx5IHVzYWJsZSB3aGVuIHlvdSBjcmVh
dGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgdXNlZCB0byBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUg
dGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBhcHBseSBvbiB0aGUgYmFjayBzaWRlLCBvcHRpb25h
bCwgZGVmYXVsdCB2ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAqIEByZXR1cm5zIHRoZSBWZXJ0
ZXhEYXRhIG9mIHRoZSBjeWxpbmRlciwgY29uZSBvciBwcmlzbQorICAgICAqLworICAgIFZlcnRl
eERhdGEuQ3JlYXRlQ3lsaW5kZXIgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICB0aHJv
dyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfRGV2VG9vbHMi
XS5XYXJuSW1wb3J0KCJjeWxpbmRlckJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgdGhlIFZlcnRleERhdGEgZm9yIGEgdG9ydXMKKyAgICAgKiBAcGFyYW0gb3B0aW9u
cyBhbiBvYmplY3QgdXNlZCB0byBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJz
IGZvciB0aGUgYm94LCByZXF1aXJlZCBidXQgY2FuIGJlIGVtcHR5CisgICAgICAqICogZGlhbWV0
ZXIgdGhlIGRpYW1ldGVyIG9mIHRoZSB0b3J1cywgb3B0aW9uYWwgZGVmYXVsdCAxCisgICAgICAq
ICogdGhpY2tuZXNzIHRoZSBkaWFtZXRlciBvZiB0aGUgdHViZSBmb3JtaW5nIHRoZSB0b3J1cywg
b3B0aW9uYWwgZGVmYXVsdCAwLjUKKyAgICAgICogKiB0ZXNzZWxsYXRpb24gdGhlIG51bWJlciBv
ZiBwcmlzbSBzaWRlcywgMyBmb3IgYSB0cmlhbmd1bGFyIHByaXNtLCBvcHRpb25hbCwgZGVmYXVs
dCAyNAorICAgICAgKiAqIHNpZGVPcmllbnRhdGlvbiBvcHRpb25hbCBhbmQgdGFrZXMgdGhlIHZh
bHVlcyA6IE1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgTWVzaC5CQUNLU0lERSBvciBNZXNoLkRP
VUJMRVNJREUKKyAgICAgICogKiBmcm9udFV2cyBvbmx5IHVzYWJsZSB3aGVuIHlvdSBjcmVhdGUg
YSBkb3VibGUtc2lkZWQgbWVzaCwgdXNlZCB0byBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4
dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBhcHBseSBvbiB0aGUgZnJvbnQgc2lkZSwgb3B0aW9uYWws
IGRlZmF1bHQgdmVjdG9yNCAoMCwgMCwgMSwgMSkKKyAgICAgICogKiBiYWNrVVZzIG9ubHkgdXNh
YmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3
aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBi
YWNrIHNpZGUsIG9wdGlvbmFsLCBkZWZhdWx0IHZlY3RvcjQgKDAsIDAsIDEsIDEpCisgICAgICog
QHJldHVybnMgdGhlIFZlcnRleERhdGEgb2YgdGhlIHRvcnVzCisgICAgICovCisgICAgVmVydGV4
RGF0YS5DcmVhdGVUb3J1cyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICAgIHRocm93IF9N
aXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9EZXZUb29scyJdLldh
cm5JbXBvcnQoInRvcnVzQnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRl
cyB0aGUgVmVydGV4RGF0YSBvZiB0aGUgTGluZVN5c3RlbQorICAgICAqIEBwYXJhbSBvcHRpb25z
IGFuIG9iamVjdCB1c2VkIHRvIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMg
Zm9yIHRoZSBMaW5lU3lzdGVtLCByZXF1aXJlZCBidXQgY2FuIGJlIGVtcHR5CisgICAgICogIC0g
bGluZXMgYW4gYXJyYXkgb2YgbGluZXMsIGVhY2ggbGluZSBiZWluZyBhbiBhcnJheSBvZiBzdWNj
ZXNzaXZlIFZlY3RvcjMKKyAgICAgKiAgLSBjb2xvcnMgYW4gYXJyYXkgb2YgbGluZSBjb2xvcnMs
IGVhY2ggb2YgdGhlIGxpbmUgY29sb3JzIGJlaW5nIGFuIGFycmF5IG9mIHN1Y2Nlc3NpdmUgQ29s
b3I0LCBvbmUgcGVyIGxpbmUgcG9pbnQKKyAgICAgKiBAcmV0dXJucyB0aGUgVmVydGV4RGF0YSBv
ZiB0aGUgTGluZVN5c3RlbQorICAgICAqLworICAgIFZlcnRleERhdGEuQ3JlYXRlTGluZVN5c3Rl
bSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoImxpbmVz
QnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlIHRoZSBWZXJ0ZXhEYXRh
IGZvciBhIERhc2hlZExpbmVzCisgICAgICogQHBhcmFtIG9wdGlvbnMgYW4gb2JqZWN0IHVzZWQg
dG8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIERhc2hlZExp
bmVzLCByZXF1aXJlZCBidXQgY2FuIGJlIGVtcHR5CisgICAgICogIC0gcG9pbnRzIGFuIGFycmF5
IHN1Y2Nlc3NpdmUgVmVjdG9yMworICAgICAqICAtIGRhc2hTaXplIHRoZSBzaXplIG9mIHRoZSBk
YXNoZXMgcmVsYXRpdmUgdG8gdGhlIGRhc2ggbnVtYmVyLCBvcHRpb25hbCwgZGVmYXVsdCAzCisg
ICAgICogIC0gZ2FwU2l6ZSB0aGUgc2l6ZSBvZiB0aGUgZ2FwIGJldHdlZW4gdHdvIHN1Y2Nlc3Np
dmUgZGFzaGVzIHJlbGF0aXZlIHRvIHRoZSBkYXNoIG51bWJlciwgb3B0aW9uYWwsIGRlZmF1bHQg
MQorICAgICAqICAtIGRhc2hOYiB0aGUgaW50ZW5kZWQgdG90YWwgbnVtYmVyIG9mIGRhc2hlcywg
b3B0aW9uYWwsIGRlZmF1bHQgMjAwCisgICAgICogQHJldHVybnMgdGhlIFZlcnRleERhdGEgZm9y
IHRoZSBEYXNoZWRMaW5lcworICAgICAqLworICAgIFZlcnRleERhdGEuQ3JlYXRlRGFzaGVkTGlu
ZXMgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJsaW5l
c0J1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgdGhlIFZlcnRleERh
dGEgZm9yIGEgR3JvdW5kCisgICAgICogQHBhcmFtIG9wdGlvbnMgYW4gb2JqZWN0IHVzZWQgdG8g
c2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIEdyb3VuZCwgcmVx
dWlyZWQgYnV0IGNhbiBiZSBlbXB0eQorICAgICAqICAtIHdpZHRoIHRoZSB3aWR0aCAoeCBkaXJl
Y3Rpb24pIG9mIHRoZSBncm91bmQsIG9wdGlvbmFsLCBkZWZhdWx0IDEKKyAgICAgKiAgLSBoZWln
aHQgdGhlIGhlaWdodCAoeiBkaXJlY3Rpb24pIG9mIHRoZSBncm91bmQsIG9wdGlvbmFsLCBkZWZh
dWx0IDEKKyAgICAgKiAgLSBzdWJkaXZpc2lvbnMgdGhlIG51bWJlciBvZiBzdWJkaXZpc2lvbnMg
cGVyIHNpZGUsIG9wdGlvbmFsLCBkZWZhdWx0IDEKKyAgICAgKiBAcmV0dXJucyB0aGUgVmVydGV4
RGF0YSBvZiB0aGUgR3JvdW5kCisgICAgICovCisgICAgVmVydGV4RGF0YS5DcmVhdGVHcm91bmQg
PSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJncm91bmRC
dWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBWZXJ0ZXhEYXRh
IGZvciBhIFRpbGVkR3JvdW5kIGJ5IHN1YmRpdmlkaW5nIHRoZSBncm91bmQgaW50byB0aWxlcwor
ICAgICAqIEBwYXJhbSBvcHRpb25zIGFuIG9iamVjdCB1c2VkIHRvIHNldCB0aGUgZm9sbG93aW5n
IG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBHcm91bmQsIHJlcXVpcmVkIGJ1dCBjYW4gYmUg
ZW1wdHkKKyAgICAgICogKiB4bWluIHRoZSBncm91bmQgbWluaW11bSBYIGNvb3JkaW5hdGUsIG9w
dGlvbmFsLCBkZWZhdWx0IC0xCisgICAgICAqICogem1pbiB0aGUgZ3JvdW5kIG1pbmltdW0gWiBj
b29yZGluYXRlLCBvcHRpb25hbCwgZGVmYXVsdCAtMQorICAgICAgKiAqIHhtYXggdGhlIGdyb3Vu
ZCBtYXhpbXVtIFggY29vcmRpbmF0ZSwgb3B0aW9uYWwsIGRlZmF1bHQgMQorICAgICAgKiAqIHpt
YXggdGhlIGdyb3VuZCBtYXhpbXVtIFogY29vcmRpbmF0ZSwgb3B0aW9uYWwsIGRlZmF1bHQgMQor
ICAgICAgKiAqIHN1YmRpdmlzaW9ucyBhIGphdmFzY3JpcHQgb2JqZWN0IHt3OiBwb3NpdGl2ZSBp
bnRlZ2VyLCBoOiBwb3NpdGl2ZSBpbnRlZ2VyfSwgYHdgIGFuZCBgaGAgYXJlIHRoZSBudW1iZXJz
IG9mIHN1YmRpdmlzaW9ucyBvbiB0aGUgZ3JvdW5kIHdpZHRoIGFuZCBoZWlnaHQgY3JlYXRpbmcg
J3RpbGVzJywgZGVmYXVsdCB7dzogNiwgaDogNn0KKyAgICAgICogKiBwcmVjaXNpb24gYSBqYXZh
c2NyaXB0IG9iamVjdCB7dzogcG9zaXRpdmUgaW50ZWdlciwgaDogcG9zaXRpdmUgaW50ZWdlcn0s
IGB3YCBhbmQgYGhgIGFyZSB0aGUgbnVtYmVycyBvZiBzdWJkaXZpc2lvbnMgb24gdGhlIHRpbGUg
d2lkdGggYW5kIGhlaWdodCwgZGVmYXVsdCB7dzogMiwgaDogMn0KKyAgICAgKiBAcmV0dXJucyB0
aGUgVmVydGV4RGF0YSBvZiB0aGUgVGlsZWRHcm91bmQKKyAgICAgKi8KKyAgICBWZXJ0ZXhEYXRh
LkNyZWF0ZVRpbGVkR3JvdW5kID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICAgICAgdGhyb3cg
X01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siX0RldlRvb2xzIl0u
V2FybkltcG9ydCgiZ3JvdW5kQnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyB0aGUgVmVydGV4RGF0YSBvZiB0aGUgR3JvdW5kIGRlc2lnbmVkIGZyb20gYSBoZWlnaHRt
YXAKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBhbiBvYmplY3QgdXNlZCB0byBzZXQgdGhlIGZvbGxv
d2luZyBwYXJhbWV0ZXJzIGZvciB0aGUgR3JvdW5kLCByZXF1aXJlZCBhbmQgcHJvdmlkZWQgYnkg
TWVzaEJ1aWxkZXIuQ3JlYXRlR3JvdW5kRnJvbUhlaWdodE1hcAorICAgICAgKiAqIHdpZHRoIHRo
ZSB3aWR0aCAoeCBkaXJlY3Rpb24pIG9mIHRoZSBncm91bmQKKyAgICAgICogKiBoZWlnaHQgdGhl
IGhlaWdodCAoeiBkaXJlY3Rpb24pIG9mIHRoZSBncm91bmQKKyAgICAgICogKiBzdWJkaXZpc2lv
bnMgdGhlIG51bWJlciBvZiBzdWJkaXZpc2lvbnMgcGVyIHNpZGUKKyAgICAgICogKiBtaW5IZWln
aHQgdGhlIG1pbmltdW0gYWx0aXR1ZGUgb24gdGhlIGdyb3VuZCwgb3B0aW9uYWwsIGRlZmF1bHQg
MAorICAgICAgKiAqIG1heEhlaWdodCB0aGUgbWF4aW11bSBhbHRpdHVkZSBvbiB0aGUgZ3JvdW5k
LCBvcHRpb25hbCBkZWZhdWx0IDEKKyAgICAgICogKiBjb2xvckZpbHRlciB0aGUgZmlsdGVyIHRv
IGFwcGx5IHRvIHRoZSBpbWFnZSBwaXhlbCBjb2xvcnMgdG8gY29tcHV0ZSB0aGUgaGVpZ2h0LCBv
cHRpb25hbCBDb2xvcjMsIGRlZmF1bHQgKDAuMywgMC41OSwgMC4xMSkKKyAgICAgICogKiBidWZm
ZXIgdGhlIGFycmF5IGhvbGRpbmcgdGhlIGltYWdlIGNvbG9yIGRhdGEKKyAgICAgICogKiBidWZm
ZXJXaWR0aCB0aGUgd2lkdGggb2YgaW1hZ2UKKyAgICAgICogKiBidWZmZXJIZWlnaHQgdGhlIGhl
aWdodCBvZiBpbWFnZQorICAgICAgKiAqIGFscGhhRmlsdGVyIFJlbW92ZSBhbnkgZGF0YSB3aGVy
ZSB0aGUgYWxwaGEgY2hhbm5lbCBpcyBiZWxvdyB0aGlzIHZhbHVlLCBkZWZhdWx0cyAwIChhbGwg
ZGF0YSB2aXNpYmxlKQorICAgICAqIEByZXR1cm5zIHRoZSBWZXJ0ZXhEYXRhIG9mIHRoZSBHcm91
bmQgZGVzaWduZWQgZnJvbSBhIGhlaWdodG1hcAorICAgICAqLworICAgIFZlcnRleERhdGEuQ3Jl
YXRlR3JvdW5kRnJvbUhlaWdodE1hcCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICAgIHRo
cm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9EZXZUb29s
cyJdLldhcm5JbXBvcnQoImdyb3VuZEJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgdGhlIFZlcnRleERhdGEgZm9yIGEgUGxhbmUKKyAgICAgKiBAcGFyYW0gb3B0aW9u
cyBhbiBvYmplY3QgdXNlZCB0byBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJz
IGZvciB0aGUgcGxhbmUsIHJlcXVpcmVkIGJ1dCBjYW4gYmUgZW1wdHkKKyAgICAgICogKiBzaXpl
IHNldHMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHBsYW5lIHRvIHRoZSB2YWx1ZSBvZiBz
aXplLCBvcHRpb25hbCBkZWZhdWx0IDEKKyAgICAgICogKiB3aWR0aCBzZXRzIHRoZSB3aWR0aCAo
eCBkaXJlY3Rpb24pIG9mIHRoZSBwbGFuZSwgb3ZlcndyaXRlcyB0aGUgd2lkdGggc2V0IGJ5IHNp
emUsIG9wdGlvbmFsLCBkZWZhdWx0IHNpemUKKyAgICAgICogKiBoZWlnaHQgc2V0cyB0aGUgaGVp
Z2h0ICh5IGRpcmVjdGlvbikgb2YgdGhlIHBsYW5lLCBvdmVyd3JpdGVzIHRoZSBoZWlnaHQgc2V0
IGJ5IHNpemUsIG9wdGlvbmFsLCBkZWZhdWx0IHNpemUKKyAgICAgICogKiBzaWRlT3JpZW50YXRp
b24gb3B0aW9uYWwgYW5kIHRha2VzIHRoZSB2YWx1ZXMgOiBNZXNoLkZST05UU0lERSAoZGVmYXVs
dCksIE1lc2guQkFDS1NJREUgb3IgTWVzaC5ET1VCTEVTSURFCisgICAgICAqICogZnJvbnRVdnMg
b25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHVzZWQgdG8g
Y2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgYXBwbHkg
b24gdGhlIGZyb250IHNpZGUsIG9wdGlvbmFsLCBkZWZhdWx0IHZlY3RvcjQgKDAsIDAsIDEsIDEp
CisgICAgICAqICogYmFja1VWcyBvbmx5IHVzYWJsZSB3aGVuIHlvdSBjcmVhdGUgYSBkb3VibGUt
c2lkZWQgbWVzaCwgdXNlZCB0byBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFn
ZSB0byBjcm9wIGFuZCBhcHBseSBvbiB0aGUgYmFjayBzaWRlLCBvcHRpb25hbCwgZGVmYXVsdCB2
ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAqIEByZXR1cm5zIHRoZSBWZXJ0ZXhEYXRhIG9mIHRo
ZSBib3gKKyAgICAgKi8KKyAgICBWZXJ0ZXhEYXRhLkNyZWF0ZVBsYW5lID0gZnVuY3Rpb24gKG9w
dGlvbnMpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgicGxhbmVCdWlsZGVyIik7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBWZXJ0ZXhEYXRhIG9mIHRoZSBEaXNjIG9y
IHJlZ3VsYXIgUG9seWdvbgorICAgICAqIEBwYXJhbSBvcHRpb25zIGFuIG9iamVjdCB1c2VkIHRv
IHNldCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBkaXNjLCByZXF1
aXJlZCBidXQgY2FuIGJlIGVtcHR5CisgICAgICAqICogcmFkaXVzIHRoZSByYWRpdXMgb2YgdGhl
IGRpc2MsIG9wdGlvbmFsIGRlZmF1bHQgMC41CisgICAgICAqICogdGVzc2VsbGF0aW9uIHRoZSBu
dW1iZXIgb2YgcG9seWdvbiBzaWRlcywgb3B0aW9uYWwsIGRlZmF1bHQgNjQKKyAgICAgICogKiBh
cmMgYSBudW1iZXIgZnJvbSAwIHRvIDEsIHRvIGNyZWF0ZSBhbiB1bmNsb3NlZCBwb2x5Z29uIGJh
c2VkIG9uIHRoZSBmcmFjdGlvbiBvZiB0aGUgY2lyY3VtZmVyZW5jZSBnaXZlbiBieSB0aGUgYXJj
IHZhbHVlLCBvcHRpb25hbCwgZGVmYXVsdCAxCisgICAgICAqICogc2lkZU9yaWVudGF0aW9uIG9w
dGlvbmFsIGFuZCB0YWtlcyB0aGUgdmFsdWVzIDogTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBN
ZXNoLkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lERQorICAgICAgKiAqIGZyb250VXZzIG9ubHkg
dXNhYmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29z
ZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRo
ZSBmcm9udCBzaWRlLCBvcHRpb25hbCwgZGVmYXVsdCB2ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAg
ICAgKiAqIGJhY2tVVnMgb25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVk
IG1lc2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8g
Y3JvcCBhbmQgYXBwbHkgb24gdGhlIGJhY2sgc2lkZSwgb3B0aW9uYWwsIGRlZmF1bHQgdmVjdG9y
NCAoMCwgMCwgMSwgMSkKKyAgICAgKiBAcmV0dXJucyB0aGUgVmVydGV4RGF0YSBvZiB0aGUgYm94
CisgICAgICovCisgICAgVmVydGV4RGF0YS5DcmVhdGVEaXNjID0gZnVuY3Rpb24gKG9wdGlvbnMp
IHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiZGlzY0J1aWxkZXIiKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIENyZWF0ZXMgdGhlIFZlcnRleERhdGEgZm9yIGFuIGlycmVndWxhciBQb2x5
Z29uIGluIHRoZSBYb1ogcGxhbmUgdXNpbmcgYSBtZXNoIGJ1aWx0IGJ5IHBvbHlnb25Ucmlhbmd1
bGF0aW9uLmJ1aWxkKCkKKyAgICAgKiBBbGwgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQgYnkgTWVz
aEJ1aWxkZXIuQ3JlYXRlUG9seWdvbiBhcyBuZWVkZWQKKyAgICAgKiBAcGFyYW0gcG9seWdvbiBh
IG1lc2ggYnVpbHQgZnJvbSBwb2x5Z29uVHJpYW5ndWxhdGlvbi5idWlsZCgpCisgICAgICogQHBh
cmFtIHNpZGVPcmllbnRhdGlvbiB0YWtlcyB0aGUgdmFsdWVzIE1lc2guRlJPTlRTSURFIChkZWZh
dWx0KSwgTWVzaC5CQUNLU0lERSBvciBNZXNoLkRPVUJMRVNJREUKKyAgICAgKiBAcGFyYW0gZlVW
IGFuIGFycmF5IG9mIFZlY3RvcjQgZWxlbWVudHMgdXNlZCB0byBzZXQgZGlmZmVyZW50IGltYWdl
cyB0byB0aGUgdG9wLCByaW5ncyBhbmQgYm90dG9tIHJlc3BlY3RpdmVseQorICAgICAqIEBwYXJh
bSBmQ29sb3JzIGFuIGFycmF5IG9mIENvbG9yMyBlbGVtZW50cyB1c2VkIHRvIHNldCBkaWZmZXJl
bnQgY29sb3JzIHRvIHRoZSB0b3AsIHJpbmdzIGFuZCBib3R0b20gcmVzcGVjdGl2ZWx5CisgICAg
ICogQHBhcmFtIGZyb250VVZzIG9ubHkgdXNhYmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJsZS1z
aWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdl
IHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBmcm9udCBzaWRlLCBvcHRpb25hbCwgZGVmYXVsdCB2
ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAqIEBwYXJhbSBiYWNrVVZzIG9ubHkgdXNhYmxlIHdo
ZW4geW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3aGF0IHBh
cnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBiYWNrIHNp
ZGUsIG9wdGlvbmFsLCBkZWZhdWx0IHZlY3RvcjQgKDAsIDAsIDEsIDEpCisgICAgICogQHJldHVy
bnMgdGhlIFZlcnRleERhdGEgb2YgdGhlIFBvbHlnb24KKyAgICAgKi8KKyAgICBWZXJ0ZXhEYXRh
LkNyZWF0ZVBvbHlnb24gPSBmdW5jdGlvbiAocG9seWdvbiwgc2lkZU9yaWVudGF0aW9uLCBmVVYs
IGZDb2xvcnMsIGZyb250VVZzLCBiYWNrVVZzKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQo
InBvbHlnb25CdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBW
ZXJ0ZXhEYXRhIG9mIHRoZSBJY29TcGhlcmUKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBhbiBvYmpl
Y3QgdXNlZCB0byBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUg
SWNvU3BoZXJlLCByZXF1aXJlZCBidXQgY2FuIGJlIGVtcHR5CisgICAgICAqICogcmFkaXVzIHRo
ZSByYWRpdXMgb2YgdGhlIEljb1NwaGVyZSwgb3B0aW9uYWwgZGVmYXVsdCAxCisgICAgICAqICog
cmFkaXVzWCBhbGxvd3Mgc3RyZXRjaGluZyBpbiB0aGUgeCBkaXJlY3Rpb24sIG9wdGlvbmFsLCBk
ZWZhdWx0IHJhZGl1cworICAgICAgKiAqIHJhZGl1c1kgYWxsb3dzIHN0cmV0Y2hpbmcgaW4gdGhl
IHkgZGlyZWN0aW9uLCBvcHRpb25hbCwgZGVmYXVsdCByYWRpdXMKKyAgICAgICogKiByYWRpdXNa
IGFsbG93cyBzdHJldGNoaW5nIGluIHRoZSB6IGRpcmVjdGlvbiwgb3B0aW9uYWwsIGRlZmF1bHQg
cmFkaXVzCisgICAgICAqICogZmxhdCB3aGVuIHRydWUgY3JlYXRlcyBhIGZsYXQgc2hhZGVkIG1l
c2gsIG9wdGlvbmFsLCBkZWZhdWx0IHRydWUKKyAgICAgICogKiBzdWJkaXZpc2lvbnMgaW5jcmVh
c2luZyB0aGUgc3ViZGl2aXNpb25zIGluY3JlYXNlcyB0aGUgbnVtYmVyIG9mIGZhY2VzLCBvcHRp
b25hbCwgZGVmYXVsdCA0CisgICAgICAqICogc2lkZU9yaWVudGF0aW9uIG9wdGlvbmFsIGFuZCB0
YWtlcyB0aGUgdmFsdWVzIDogTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBNZXNoLkJBQ0tTSURF
IG9yIE1lc2guRE9VQkxFU0lERQorICAgICAgKiAqIGZyb250VXZzIG9ubHkgdXNhYmxlIHdoZW4g
eW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3aGF0IHBhcnRz
IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBmcm9udCBzaWRl
LCBvcHRpb25hbCwgZGVmYXVsdCB2ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAgKiAqIGJhY2tV
VnMgb25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHVzZWQg
dG8gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgYXBw
bHkgb24gdGhlIGJhY2sgc2lkZSwgb3B0aW9uYWwsIGRlZmF1bHQgdmVjdG9yNCAoMCwgMCwgMSwg
MSkKKyAgICAgKiBAcmV0dXJucyB0aGUgVmVydGV4RGF0YSBvZiB0aGUgSWNvU3BoZXJlCisgICAg
ICovCisgICAgVmVydGV4RGF0YS5DcmVhdGVJY29TcGhlcmUgPSBmdW5jdGlvbiAob3B0aW9ucykg
eworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJpY29TcGhlcmVCdWlsZGVyIik7CisgICAgfTsK
KyAgICAvLyBpbnNwaXJlZCBmcm9tIC8vIGh0dHA6Ly9zdGVta29za2kuZ2l0aHViLmlvL1RocmVl
LmpzL1BvbHloZWRyYS5odG1sCisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0aGUgVmVydGV4RGF0
YSBmb3IgYSBQb2x5aGVkcm9uCisgICAgICogQHBhcmFtIG9wdGlvbnMgYW4gb2JqZWN0IHVzZWQg
dG8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHBvbHloZWRy
b24sIHJlcXVpcmVkIGJ1dCBjYW4gYmUgZW1wdHkKKyAgICAgKiAqIHR5cGUgcHJvdmlkZWQgdHlw
ZXMgYXJlOgorICAgICAqICAqIDAgOiBUZXRyYWhlZHJvbiwgMSA6IE9jdGFoZWRyb24sIDIgOiBE
b2RlY2FoZWRyb24sIDMgOiBJY29zYWhlZHJvbiwgNCA6IFJob21iaWN1Ym9jdGFoZWRyb24sIDUg
OiBUcmlhbmd1bGFyIFByaXNtLCA2IDogUGVudGFnb25hbCBQcmlzbSwgNyA6IEhleGFnb25hbCBQ
cmlzbSwgOCA6IFNxdWFyZSBQeXJhbWlkIChKMSkKKyAgICAgKiAgKiA5IDogUGVudGFnb25hbCBQ
eXJhbWlkIChKMiksIDEwIDogVHJpYW5ndWxhciBEaXB5cmFtaWQgKEoxMiksIDExIDogUGVudGFn
b25hbCBEaXB5cmFtaWQgKEoxMyksIDEyIDogRWxvbmdhdGVkIFNxdWFyZSBEaXB5cmFtaWQgKEox
NSksIDEzIDogRWxvbmdhdGVkIFBlbnRhZ29uYWwgRGlweXJhbWlkIChKMTYpLCAxNCA6IEVsb25n
YXRlZCBQZW50YWdvbmFsIEN1cG9sYSAoSjIwKQorICAgICAqICogc2l6ZSB0aGUgc2l6ZSBvZiB0
aGUgSWNvU3BoZXJlLCBvcHRpb25hbCBkZWZhdWx0IDEKKyAgICAgKiAqIHNpemVYIGFsbG93cyBz
dHJldGNoaW5nIGluIHRoZSB4IGRpcmVjdGlvbiwgb3B0aW9uYWwsIGRlZmF1bHQgc2l6ZQorICAg
ICAqICogc2l6ZVkgYWxsb3dzIHN0cmV0Y2hpbmcgaW4gdGhlIHkgZGlyZWN0aW9uLCBvcHRpb25h
bCwgZGVmYXVsdCBzaXplCisgICAgICogKiBzaXplWiBhbGxvd3Mgc3RyZXRjaGluZyBpbiB0aGUg
eiBkaXJlY3Rpb24sIG9wdGlvbmFsLCBkZWZhdWx0IHNpemUKKyAgICAgKiAqIGN1c3RvbSBhIG51
bWJlciB0aGF0IG92ZXJ3cml0ZXMgdGhlIHR5cGUgdG8gY3JlYXRlIGZyb20gYW4gZXh0ZW5kZWQg
c2V0IG9mIHBvbHloZWRyb24gZnJvbSBodHRwczovL3d3dy5iYWJ5bG9uanMtcGxheWdyb3VuZC5j
b20vIzIxUVJTSyMxNSB3aXRoIG1pbmltaXNlZCBlZGl0b3IKKyAgICAgKiAqIGZhY2VVViBhbiBh
cnJheSBvZiBWZWN0b3I0IGVsZW1lbnRzIHVzZWQgdG8gc2V0IGRpZmZlcmVudCBpbWFnZXMgdG8g
dGhlIHRvcCwgcmluZ3MgYW5kIGJvdHRvbSByZXNwZWN0aXZlbHkKKyAgICAgKiAqIGZhY2VDb2xv
cnMgYW4gYXJyYXkgb2YgQ29sb3IzIGVsZW1lbnRzIHVzZWQgdG8gc2V0IGRpZmZlcmVudCBjb2xv
cnMgdG8gdGhlIHRvcCwgcmluZ3MgYW5kIGJvdHRvbSByZXNwZWN0aXZlbHkKKyAgICAgKiAqIGZs
YXQgd2hlbiB0cnVlIGNyZWF0ZXMgYSBmbGF0IHNoYWRlZCBtZXNoLCBvcHRpb25hbCwgZGVmYXVs
dCB0cnVlCisgICAgICogKiBzdWJkaXZpc2lvbnMgaW5jcmVhc2luZyB0aGUgc3ViZGl2aXNpb25z
IGluY3JlYXNlcyB0aGUgbnVtYmVyIG9mIGZhY2VzLCBvcHRpb25hbCwgZGVmYXVsdCA0CisgICAg
ICogKiBzaWRlT3JpZW50YXRpb24gb3B0aW9uYWwgYW5kIHRha2VzIHRoZSB2YWx1ZXMgOiBNZXNo
LkZST05UU0lERSAoZGVmYXVsdCksIE1lc2guQkFDS1NJREUgb3IgTWVzaC5ET1VCTEVTSURFCisg
ICAgICogKiBmcm9udFV2cyBvbmx5IHVzYWJsZSB3aGVuIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lk
ZWQgbWVzaCwgdXNlZCB0byBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0
byBjcm9wIGFuZCBhcHBseSBvbiB0aGUgZnJvbnQgc2lkZSwgb3B0aW9uYWwsIGRlZmF1bHQgdmVj
dG9yNCAoMCwgMCwgMSwgMSkKKyAgICAgKiAqIGJhY2tVVnMgb25seSB1c2FibGUgd2hlbiB5b3Ug
Y3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFydHMgb2Yg
dGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgYXBwbHkgb24gdGhlIGJhY2sgc2lkZSwgb3B0
aW9uYWwsIGRlZmF1bHQgdmVjdG9yNCAoMCwgMCwgMSwgMSkKKyAgICAgKiBAcmV0dXJucyB0aGUg
VmVydGV4RGF0YSBvZiB0aGUgUG9seWhlZHJvbgorICAgICAqLworICAgIFZlcnRleERhdGEuQ3Jl
YXRlUG9seWhlZHJvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICAgIHRocm93IF9NaXNj
X2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9EZXZUb29scyJdLldhcm5J
bXBvcnQoInBvbHloZWRyb25CdWlsZGVyIik7CisgICAgfTsKKyAgICAvLyBiYXNlZCBvbiBodHRw
Oi8vY29kZS5nb29nbGUuY29tL3AvYXdheTNkL3NvdXJjZS9icm93c2UvdHJ1bmsvZnAxMC9Bd2F5
M0Qvc3JjL2F3YXkzZC9wcmltaXRpdmVzL1RvcnVzS25vdC5hcz9zcGVjPXN2bjI0NzMmcj0yNDcz
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0aGUgVmVydGV4RGF0YSBmb3IgYSBUb3J1c0tub3QK
KyAgICAgKiBAcGFyYW0gb3B0aW9ucyBhbiBvYmplY3QgdXNlZCB0byBzZXQgdGhlIGZvbGxvd2lu
ZyBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgVG9ydXNLbm90LCByZXF1aXJlZCBidXQgY2Fu
IGJlIGVtcHR5CisgICAgICAqICogcmFkaXVzIHRoZSByYWRpdXMgb2YgdGhlIHRvcnVzIGtub3Qs
IG9wdGlvbmFsLCBkZWZhdWx0IDIKKyAgICAgICogKiB0dWJlIHRoZSB0aGlja25lc3Mgb2YgdGhl
IHR1YmUsIG9wdGlvbmFsLCBkZWZhdWx0IDAuNQorICAgICAgKiAqIHJhZGlhbFNlZ21lbnRzIHRo
ZSBudW1iZXIgb2Ygc2lkZXMgb24gZWFjaCB0dWJlIHNlZ21lbnRzLCBvcHRpb25hbCwgZGVmYXVs
dCAzMgorICAgICAgKiAqIHR1YnVsYXJTZWdtZW50cyB0aGUgbnVtYmVyIG9mIHR1YmVzIHRvIGRl
Y29tcG9zZSB0aGUga25vdCBpbnRvLCBvcHRpb25hbCwgZGVmYXVsdCAzMgorICAgICAgKiAqIHAg
dGhlIG51bWJlciBvZiB3aW5kaW5ncyBhcm91bmQgdGhlIHogYXhpcywgb3B0aW9uYWwsICBkZWZh
dWx0IDIKKyAgICAgICogKiBxIHRoZSBudW1iZXIgb2Ygd2luZGluZ3MgYXJvdW5kIHRoZSB4IGF4
aXMsIG9wdGlvbmFsLCAgZGVmYXVsdCAzCisgICAgICAqICogc2lkZU9yaWVudGF0aW9uIG9wdGlv
bmFsIGFuZCB0YWtlcyB0aGUgdmFsdWVzIDogTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBNZXNo
LkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lERQorICAgICAgKiAqIGZyb250VXZzIG9ubHkgdXNh
YmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3
aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBm
cm9udCBzaWRlLCBvcHRpb25hbCwgZGVmYXVsdCB2ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAg
KiAqIGJhY2tVVnMgb25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1l
c2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3Jv
cCBhbmQgYXBwbHkgb24gdGhlIGJhY2sgc2lkZSwgb3B0aW9uYWwsIGRlZmF1bHQgdmVjdG9yNCAo
MCwgMCwgMSwgMSkKKyAgICAgKiBAcmV0dXJucyB0aGUgVmVydGV4RGF0YSBvZiB0aGUgVG9ydXMg
S25vdAorICAgICAqLworICAgIFZlcnRleERhdGEuQ3JlYXRlVG9ydXNLbm90ID0gZnVuY3Rpb24g
KG9wdGlvbnMpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgidG9ydXNLbm90QnVpbGRlciIp
OworICAgIH07CisgICAgLy8gVG9vbHMKKyAgICAvKioKKyAgICAgKiBDb21wdXRlIG5vcm1hbHMg
Zm9yIGdpdmVuIHBvc2l0aW9ucyBhbmQgaW5kaWNlcworICAgICAqIEBwYXJhbSBwb3NpdGlvbnMg
YW4gYXJyYXkgb2YgdmVydGV4IHBvc2l0aW9ucywgWy4uLi4sIHgsIHksIHosIC4uLi4uLl0KKyAg
ICAgKiBAcGFyYW0gaW5kaWNlcyBhbiBhcnJheSBvZiBpbmRpY2VzIGluIGdyb3VwcyBvZiB0aHJl
ZSBmb3IgZWFjaCB0cmlhbmd1bGFyIGZhY2V0LCBbLi4uLiwgaSwgaiwgaywgLi4uLi4uXQorICAg
ICAqIEBwYXJhbSBub3JtYWxzIGFuIGFycmF5IG9mIHZlcnRleCBub3JtYWxzLCBbLi4uLiwgeCwg
eSwgeiwgLi4uLi4uXQorICAgICAqIEBwYXJhbSBvcHRpb25zIGFuIG9iamVjdCB1c2VkIHRvIHNl
dCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBUb3J1c0tub3QsIG9w
dGlvbmFsCisgICAgICAqICogZmFjZXROb3JtYWxzIDogb3B0aW9uYWwgYXJyYXkgb2YgZmFjZXQg
bm9ybWFscyAodmVjdG9yMykKKyAgICAgICogKiBmYWNldFBvc2l0aW9ucyA6IG9wdGlvbmFsIGFy
cmF5IG9mIGZhY2V0IHBvc2l0aW9ucyAodmVjdG9yMykKKyAgICAgICogKiBmYWNldFBhcnRpdGlv
bmluZyA6IG9wdGlvbmFsIHBhcnRpdGlvbmluZyBhcnJheS4gZmFjZXRQb3NpdGlvbnMgaXMgcmVx
dWlyZWQgZm9yIGZhY2V0UGFydGl0aW9uaW5nIGNvbXB1dGF0aW9uCisgICAgICAqICogcmF0aW8g
OiBvcHRpb25hbCBwYXJ0aXRpb25pbmcgcmF0aW8gLyBib3VuZGluZyBib3gsIHJlcXVpcmVkIGZv
ciBmYWNldFBhcnRpdGlvbmluZyBjb21wdXRhdGlvbgorICAgICAgKiAqIGJJbmZvIDogb3B0aW9u
YWwgYm91bmRpbmcgaW5mbywgcmVxdWlyZWQgZm9yIGZhY2V0UGFydGl0aW9uaW5nIGNvbXB1dGF0
aW9uCisgICAgICAqICogYmJTaXplIDogb3B0aW9uYWwgYm91bmRpbmcgYm94IHNpemUgZGF0YSwg
cmVxdWlyZWQgZm9yIGZhY2V0UGFydGl0aW9uaW5nIGNvbXB1dGF0aW9uCisgICAgICAqICogc3Vi
RGl2IDogb3B0aW9uYWwgcGFydGl0aW9uaW5nIGRhdGEgYWJvdXQgc3ViZGl2c2lvbnMgb24gIGVh
Y2ggYXhpcyAoaW50KSwgcmVxdWlyZWQgZm9yIGZhY2V0UGFydGl0aW9uaW5nIGNvbXB1dGF0aW9u
CisgICAgICAqICogdXNlUmlnaHRIYW5kZWRTeXN0ZW06IG9wdGlvbmFsIGJvb2xlYW4gdG8gZm9y
IHJpZ2h0IGhhbmRlZCBzeXN0ZW0gY29tcHV0YXRpb24KKyAgICAgICogKiBkZXB0aFNvcnQgOiBv
cHRpb25hbCBib29sZWFuIHRvIGVuYWJsZSB0aGUgZmFjZXQgZGVwdGggc29ydCBjb21wdXRhdGlv
bgorICAgICAgKiAqIGRpc3RhbmNlVG8gOiBvcHRpb25hbCBWZWN0b3IzIHRvIGNvbXB1dGUgdGhl
IGZhY2V0IGRlcHRoIGZyb20gdGhpcyBsb2NhdGlvbgorICAgICAgKiAqIGRlcHRoU29ydGVkRmFj
ZXRzIDogb3B0aW9uYWwgYXJyYXkgb2YgZGVwdGhTb3J0ZWRGYWNldHMgdG8gc3RvcmUgdGhlIGZh
Y2V0IGRpc3RhbmNlcyBmcm9tIHRoZSByZWZlcmVuY2UgbG9jYXRpb24KKyAgICAgKi8KKyAgICBW
ZXJ0ZXhEYXRhLkNvbXB1dGVOb3JtYWxzID0gZnVuY3Rpb24gKHBvc2l0aW9ucywgaW5kaWNlcywg
bm9ybWFscywgb3B0aW9ucykgeworICAgICAgICAvLyB0ZW1wb3Jhcnkgc2NhbGFyIHZhcmlhYmxl
cworICAgICAgICB2YXIgaW5kZXggPSAwOyAvLyBmYWNldCBpbmRleAorICAgICAgICB2YXIgcDFw
MnggPSAwLjA7IC8vIHAxcDIgdmVjdG9yIHggY29vcmRpbmF0ZQorICAgICAgICB2YXIgcDFwMnkg
PSAwLjA7IC8vIHAxcDIgdmVjdG9yIHkgY29vcmRpbmF0ZQorICAgICAgICB2YXIgcDFwMnogPSAw
LjA7IC8vIHAxcDIgdmVjdG9yIHogY29vcmRpbmF0ZQorICAgICAgICB2YXIgcDNwMnggPSAwLjA7
IC8vIHAzcDIgdmVjdG9yIHggY29vcmRpbmF0ZQorICAgICAgICB2YXIgcDNwMnkgPSAwLjA7IC8v
IHAzcDIgdmVjdG9yIHkgY29vcmRpbmF0ZQorICAgICAgICB2YXIgcDNwMnogPSAwLjA7IC8vIHAz
cDIgdmVjdG9yIHogY29vcmRpbmF0ZQorICAgICAgICB2YXIgZmFjZU5vcm1hbHggPSAwLjA7IC8v
IGZhY2V0IG5vcm1hbCB4IGNvb3JkaW5hdGUKKyAgICAgICAgdmFyIGZhY2VOb3JtYWx5ID0gMC4w
OyAvLyBmYWNldCBub3JtYWwgeSBjb29yZGluYXRlCisgICAgICAgIHZhciBmYWNlTm9ybWFseiA9
IDAuMDsgLy8gZmFjZXQgbm9ybWFsIHogY29vcmRpbmF0ZQorICAgICAgICB2YXIgbGVuZ3RoID0g
MC4wOyAvLyBmYWNldCBub3JtYWwgbGVuZ3RoIGJlZm9yZSBub3JtYWxpemF0aW9uCisgICAgICAg
IHZhciB2MXggPSAwOyAvLyB2ZWN0b3IxIHggaW5kZXggaW4gdGhlIHBvc2l0aW9ucyBhcnJheQor
ICAgICAgICB2YXIgdjF5ID0gMDsgLy8gdmVjdG9yMSB5IGluZGV4IGluIHRoZSBwb3NpdGlvbnMg
YXJyYXkKKyAgICAgICAgdmFyIHYxeiA9IDA7IC8vIHZlY3RvcjEgeiBpbmRleCBpbiB0aGUgcG9z
aXRpb25zIGFycmF5CisgICAgICAgIHZhciB2MnggPSAwOyAvLyB2ZWN0b3IyIHggaW5kZXggaW4g
dGhlIHBvc2l0aW9ucyBhcnJheQorICAgICAgICB2YXIgdjJ5ID0gMDsgLy8gdmVjdG9yMiB5IGlu
ZGV4IGluIHRoZSBwb3NpdGlvbnMgYXJyYXkKKyAgICAgICAgdmFyIHYyeiA9IDA7IC8vIHZlY3Rv
cjIgeiBpbmRleCBpbiB0aGUgcG9zaXRpb25zIGFycmF5CisgICAgICAgIHZhciB2M3ggPSAwOyAv
LyB2ZWN0b3IzIHggaW5kZXggaW4gdGhlIHBvc2l0aW9ucyBhcnJheQorICAgICAgICB2YXIgdjN5
ID0gMDsgLy8gdmVjdG9yMyB5IGluZGV4IGluIHRoZSBwb3NpdGlvbnMgYXJyYXkKKyAgICAgICAg
dmFyIHYzeiA9IDA7IC8vIHZlY3RvcjMgeiBpbmRleCBpbiB0aGUgcG9zaXRpb25zIGFycmF5Cisg
ICAgICAgIHZhciBjb21wdXRlRmFjZXROb3JtYWxzID0gZmFsc2U7CisgICAgICAgIHZhciBjb21w
dXRlRmFjZXRQb3NpdGlvbnMgPSBmYWxzZTsKKyAgICAgICAgdmFyIGNvbXB1dGVGYWNldFBhcnRp
dGlvbmluZyA9IGZhbHNlOworICAgICAgICB2YXIgY29tcHV0ZURlcHRoU29ydCA9IGZhbHNlOwor
ICAgICAgICB2YXIgZmFjZU5vcm1hbFNpZ24gPSAxOworICAgICAgICB2YXIgcmF0aW8gPSAwOwor
ICAgICAgICB2YXIgZGlzdGFuY2VUbyA9IG51bGw7CisgICAgICAgIGlmIChvcHRpb25zKSB7Cisg
ICAgICAgICAgICBjb21wdXRlRmFjZXROb3JtYWxzID0gKG9wdGlvbnMuZmFjZXROb3JtYWxzKSA/
IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgIGNvbXB1dGVGYWNldFBvc2l0aW9ucyA9IChvcHRp
b25zLmZhY2V0UG9zaXRpb25zKSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgIGNvbXB1dGVG
YWNldFBhcnRpdGlvbmluZyA9IChvcHRpb25zLmZhY2V0UGFydGl0aW9uaW5nKSA/IHRydWUgOiBm
YWxzZTsKKyAgICAgICAgICAgIGZhY2VOb3JtYWxTaWduID0gKG9wdGlvbnMudXNlUmlnaHRIYW5k
ZWRTeXN0ZW0gPT09IHRydWUpID8gLTEgOiAxOworICAgICAgICAgICAgcmF0aW8gPSBvcHRpb25z
LnJhdGlvIHx8IDA7CisgICAgICAgICAgICBjb21wdXRlRGVwdGhTb3J0ID0gKG9wdGlvbnMuZGVw
dGhTb3J0KSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgIGRpc3RhbmNlVG8gPSAob3B0aW9u
cy5kaXN0YW5jZVRvKTsKKyAgICAgICAgICAgIGlmIChjb21wdXRlRGVwdGhTb3J0KSB7CisgICAg
ICAgICAgICAgICAgaWYgKGRpc3RhbmNlVG8gPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAg
ICAgICAgICBkaXN0YW5jZVRvID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHZhciBkZXB0aFNvcnRlZEZhY2V0cyA9IG9wdGlvbnMuZGVwdGhTb3J0ZWRGYWNl
dHM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gZmFjZXRQYXJ0aXRpb25p
bmcgcmVpbml0IGlmIG5lZWRlZAorICAgICAgICB2YXIgeFN1YlJhdGlvID0gMDsKKyAgICAgICAg
dmFyIHlTdWJSYXRpbyA9IDA7CisgICAgICAgIHZhciB6U3ViUmF0aW8gPSAwOworICAgICAgICB2
YXIgc3ViU3EgPSAwOworICAgICAgICBpZiAoY29tcHV0ZUZhY2V0UGFydGl0aW9uaW5nICYmIG9w
dGlvbnMgJiYgb3B0aW9ucy5iYlNpemUpIHsKKyAgICAgICAgICAgIHZhciBveCA9IDA7IC8vIFgg
cGFydGl0aW9uaW5nIGluZGV4IGZvciBmYWNldCBwb3NpdGlvbgorICAgICAgICAgICAgdmFyIG95
ID0gMDsgLy8gWSBwYXJ0aW5pb25pbmcgaW5kZXggZm9yIGZhY2V0IHBvc2l0aW9uCisgICAgICAg
ICAgICB2YXIgb3ogPSAwOyAvLyBaIHBhcnRpbmlvbmluZyBpbmRleCBmb3IgZmFjZXQgcG9zaXRp
b24KKyAgICAgICAgICAgIHZhciBiMXggPSAwOyAvLyBYIHBhcnRpdGlvbmluZyBpbmRleCBmb3Ig
ZmFjZXQgdjEgdmVydGV4CisgICAgICAgICAgICB2YXIgYjF5ID0gMDsgLy8gWSBwYXJ0aXRpb25p
bmcgaW5kZXggZm9yIGZhY2V0IHYxIHZlcnRleAorICAgICAgICAgICAgdmFyIGIxeiA9IDA7IC8v
IHogcGFydGl0aW9uaW5nIGluZGV4IGZvciBmYWNldCB2MSB2ZXJ0ZXgKKyAgICAgICAgICAgIHZh
ciBiMnggPSAwOyAvLyBYIHBhcnRpdGlvbmluZyBpbmRleCBmb3IgZmFjZXQgdjIgdmVydGV4Cisg
ICAgICAgICAgICB2YXIgYjJ5ID0gMDsgLy8gWSBwYXJ0aXRpb25pbmcgaW5kZXggZm9yIGZhY2V0
IHYyIHZlcnRleAorICAgICAgICAgICAgdmFyIGIyeiA9IDA7IC8vIFogcGFydGl0aW9uaW5nIGlu
ZGV4IGZvciBmYWNldCB2MiB2ZXJ0ZXgKKyAgICAgICAgICAgIHZhciBiM3ggPSAwOyAvLyBYIHBh
cnRpdGlvbmluZyBpbmRleCBmb3IgZmFjZXQgdjMgdmVydGV4CisgICAgICAgICAgICB2YXIgYjN5
ID0gMDsgLy8gWSBwYXJ0aXRpb25pbmcgaW5kZXggZm9yIGZhY2V0IHYzIHZlcnRleAorICAgICAg
ICAgICAgdmFyIGIzeiA9IDA7IC8vIFogcGFydGl0aW9uaW5nIGluZGV4IGZvciBmYWNldCB2MyB2
ZXJ0ZXgKKyAgICAgICAgICAgIHZhciBibG9ja19pZHhfbyA9IDA7IC8vIGZhY2V0IGJhcnljZW50
ZXIgYmxvY2sgaW5kZXgKKyAgICAgICAgICAgIHZhciBibG9ja19pZHhfdjEgPSAwOyAvLyB2MSB2
ZXJ0ZXggYmxvY2sgaW5kZXgKKyAgICAgICAgICAgIHZhciBibG9ja19pZHhfdjIgPSAwOyAvLyB2
MiB2ZXJ0ZXggYmxvY2sgaW5kZXgKKyAgICAgICAgICAgIHZhciBibG9ja19pZHhfdjMgPSAwOyAv
LyB2MyB2ZXJ0ZXggYmxvY2sgaW5kZXgKKyAgICAgICAgICAgIHZhciBiYlNpemVNYXggPSAob3B0
aW9ucy5iYlNpemUueCA+IG9wdGlvbnMuYmJTaXplLnkpID8gb3B0aW9ucy5iYlNpemUueCA6IG9w
dGlvbnMuYmJTaXplLnk7CisgICAgICAgICAgICBiYlNpemVNYXggPSAoYmJTaXplTWF4ID4gb3B0
aW9ucy5iYlNpemUueikgPyBiYlNpemVNYXggOiBvcHRpb25zLmJiU2l6ZS56OworICAgICAgICAg
ICAgeFN1YlJhdGlvID0gb3B0aW9ucy5zdWJEaXYuWCAqIHJhdGlvIC8gb3B0aW9ucy5iYlNpemUu
eDsKKyAgICAgICAgICAgIHlTdWJSYXRpbyA9IG9wdGlvbnMuc3ViRGl2LlkgKiByYXRpbyAvIG9w
dGlvbnMuYmJTaXplLnk7CisgICAgICAgICAgICB6U3ViUmF0aW8gPSBvcHRpb25zLnN1YkRpdi5a
ICogcmF0aW8gLyBvcHRpb25zLmJiU2l6ZS56OworICAgICAgICAgICAgc3ViU3EgPSBvcHRpb25z
LnN1YkRpdi5tYXggKiBvcHRpb25zLnN1YkRpdi5tYXg7CisgICAgICAgICAgICBvcHRpb25zLmZh
Y2V0UGFydGl0aW9uaW5nLmxlbmd0aCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgLy8gcmVzZXQg
dGhlIG5vcm1hbHMKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcG9zaXRpb25zLmxl
bmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgbm9ybWFsc1tpbmRleF0gPSAwLjA7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gTG9vcCA6IDEgaW5kaWNlIHRyaXBsZXQgPSAxIGZhY2V0CisgICAg
ICAgIHZhciBuYkZhY2VzID0gKGluZGljZXMubGVuZ3RoIC8gMykgfCAwOworICAgICAgICBmb3Ig
KGluZGV4ID0gMDsgaW5kZXggPCBuYkZhY2VzOyBpbmRleCsrKSB7CisgICAgICAgICAgICAvLyBn
ZXQgdGhlIGluZGV4ZXMgb2YgdGhlIGNvb3JkaW5hdGVzIG9mIGVhY2ggdmVydGV4IG9mIHRoZSBm
YWNldAorICAgICAgICAgICAgdjF4ID0gaW5kaWNlc1tpbmRleCAqIDNdICogMzsKKyAgICAgICAg
ICAgIHYxeSA9IHYxeCArIDE7CisgICAgICAgICAgICB2MXogPSB2MXggKyAyOworICAgICAgICAg
ICAgdjJ4ID0gaW5kaWNlc1tpbmRleCAqIDMgKyAxXSAqIDM7CisgICAgICAgICAgICB2MnkgPSB2
MnggKyAxOworICAgICAgICAgICAgdjJ6ID0gdjJ4ICsgMjsKKyAgICAgICAgICAgIHYzeCA9IGlu
ZGljZXNbaW5kZXggKiAzICsgMl0gKiAzOworICAgICAgICAgICAgdjN5ID0gdjN4ICsgMTsKKyAg
ICAgICAgICAgIHYzeiA9IHYzeCArIDI7CisgICAgICAgICAgICBwMXAyeCA9IHBvc2l0aW9uc1t2
MXhdIC0gcG9zaXRpb25zW3YyeF07IC8vIGNvbXB1dGUgdHdvIHZlY3RvcnMgcGVyIGZhY2V0IDog
cDFwMiBhbmQgcDNwMgorICAgICAgICAgICAgcDFwMnkgPSBwb3NpdGlvbnNbdjF5XSAtIHBvc2l0
aW9uc1t2MnldOworICAgICAgICAgICAgcDFwMnogPSBwb3NpdGlvbnNbdjF6XSAtIHBvc2l0aW9u
c1t2MnpdOworICAgICAgICAgICAgcDNwMnggPSBwb3NpdGlvbnNbdjN4XSAtIHBvc2l0aW9uc1t2
MnhdOworICAgICAgICAgICAgcDNwMnkgPSBwb3NpdGlvbnNbdjN5XSAtIHBvc2l0aW9uc1t2Mnld
OworICAgICAgICAgICAgcDNwMnogPSBwb3NpdGlvbnNbdjN6XSAtIHBvc2l0aW9uc1t2MnpdOwor
ICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgZmFjZSBub3JtYWwgd2l0aCB0aGUgY3Jvc3MgcHJv
ZHVjdAorICAgICAgICAgICAgZmFjZU5vcm1hbHggPSBmYWNlTm9ybWFsU2lnbiAqIChwMXAyeSAq
IHAzcDJ6IC0gcDFwMnogKiBwM3AyeSk7CisgICAgICAgICAgICBmYWNlTm9ybWFseSA9IGZhY2VO
b3JtYWxTaWduICogKHAxcDJ6ICogcDNwMnggLSBwMXAyeCAqIHAzcDJ6KTsKKyAgICAgICAgICAg
IGZhY2VOb3JtYWx6ID0gZmFjZU5vcm1hbFNpZ24gKiAocDFwMnggKiBwM3AyeSAtIHAxcDJ5ICog
cDNwMngpOworICAgICAgICAgICAgLy8gbm9ybWFsaXplIHRoaXMgbm9ybWFsIGFuZCBzdG9yZSBp
dCBpbiB0aGUgYXJyYXkgZmFjZXREYXRhCisgICAgICAgICAgICBsZW5ndGggPSBNYXRoLnNxcnQo
ZmFjZU5vcm1hbHggKiBmYWNlTm9ybWFseCArIGZhY2VOb3JtYWx5ICogZmFjZU5vcm1hbHkgKyBm
YWNlTm9ybWFseiAqIGZhY2VOb3JtYWx6KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IChsZW5ndGgg
PT09IDApID8gMS4wIDogbGVuZ3RoOworICAgICAgICAgICAgZmFjZU5vcm1hbHggLz0gbGVuZ3Ro
OworICAgICAgICAgICAgZmFjZU5vcm1hbHkgLz0gbGVuZ3RoOworICAgICAgICAgICAgZmFjZU5v
cm1hbHogLz0gbGVuZ3RoOworICAgICAgICAgICAgaWYgKGNvbXB1dGVGYWNldE5vcm1hbHMgJiYg
b3B0aW9ucykgeworICAgICAgICAgICAgICAgIG9wdGlvbnMuZmFjZXROb3JtYWxzW2luZGV4XS54
ID0gZmFjZU5vcm1hbHg7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5mYWNldE5vcm1hbHNbaW5k
ZXhdLnkgPSBmYWNlTm9ybWFseTsKKyAgICAgICAgICAgICAgICBvcHRpb25zLmZhY2V0Tm9ybWFs
c1tpbmRleF0ueiA9IGZhY2VOb3JtYWx6OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGNvbXB1dGVGYWNldFBvc2l0aW9ucyAmJiBvcHRpb25zKSB7CisgICAgICAgICAgICAgICAgLy8g
Y29tcHV0ZSBhbmQgdGhlIGZhY2V0IGJhcnljZW50ZXIgY29vcmRpbmF0ZXMgaW4gdGhlIGFycmF5
IGZhY2V0UG9zaXRpb25zCisgICAgICAgICAgICAgICAgb3B0aW9ucy5mYWNldFBvc2l0aW9uc1tp
bmRleF0ueCA9IChwb3NpdGlvbnNbdjF4XSArIHBvc2l0aW9uc1t2MnhdICsgcG9zaXRpb25zW3Yz
eF0pIC8gMy4wOworICAgICAgICAgICAgICAgIG9wdGlvbnMuZmFjZXRQb3NpdGlvbnNbaW5kZXhd
LnkgPSAocG9zaXRpb25zW3YxeV0gKyBwb3NpdGlvbnNbdjJ5XSArIHBvc2l0aW9uc1t2M3ldKSAv
IDMuMDsKKyAgICAgICAgICAgICAgICBvcHRpb25zLmZhY2V0UG9zaXRpb25zW2luZGV4XS56ID0g
KHBvc2l0aW9uc1t2MXpdICsgcG9zaXRpb25zW3Yyel0gKyBwb3NpdGlvbnNbdjN6XSkgLyAzLjA7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29tcHV0ZUZhY2V0UGFydGl0aW9uaW5n
ICYmIG9wdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAvLyBzdG9yZSB0aGUgZmFjZXQgaW5kZXhl
cyBpbiBhcnJheXMgaW4gdGhlIG1haW4gZmFjZXRQYXJ0aXRpb25pbmcgYXJyYXkgOgorICAgICAg
ICAgICAgICAgIC8vIGNvbXB1dGUgZWFjaCBmYWNldCB2ZXJ0ZXggKCsgZmFjZXQgYmFyeWNlbnRl
cikgaW5kZXggaW4gdGhlIHBhcnRpbmlvbmcgYXJyYXkKKyAgICAgICAgICAgICAgICBveCA9IE1h
dGguZmxvb3IoKG9wdGlvbnMuZmFjZXRQb3NpdGlvbnNbaW5kZXhdLnggLSBvcHRpb25zLmJJbmZv
Lm1pbmltdW0ueCAqIHJhdGlvKSAqIHhTdWJSYXRpbyk7CisgICAgICAgICAgICAgICAgb3kgPSBN
YXRoLmZsb29yKChvcHRpb25zLmZhY2V0UG9zaXRpb25zW2luZGV4XS55IC0gb3B0aW9ucy5iSW5m
by5taW5pbXVtLnkgKiByYXRpbykgKiB5U3ViUmF0aW8pOworICAgICAgICAgICAgICAgIG96ID0g
TWF0aC5mbG9vcigob3B0aW9ucy5mYWNldFBvc2l0aW9uc1tpbmRleF0ueiAtIG9wdGlvbnMuYklu
Zm8ubWluaW11bS56ICogcmF0aW8pICogelN1YlJhdGlvKTsKKyAgICAgICAgICAgICAgICBiMXgg
PSBNYXRoLmZsb29yKChwb3NpdGlvbnNbdjF4XSAtIG9wdGlvbnMuYkluZm8ubWluaW11bS54ICog
cmF0aW8pICogeFN1YlJhdGlvKTsKKyAgICAgICAgICAgICAgICBiMXkgPSBNYXRoLmZsb29yKChw
b3NpdGlvbnNbdjF5XSAtIG9wdGlvbnMuYkluZm8ubWluaW11bS55ICogcmF0aW8pICogeVN1YlJh
dGlvKTsKKyAgICAgICAgICAgICAgICBiMXogPSBNYXRoLmZsb29yKChwb3NpdGlvbnNbdjF6XSAt
IG9wdGlvbnMuYkluZm8ubWluaW11bS56ICogcmF0aW8pICogelN1YlJhdGlvKTsKKyAgICAgICAg
ICAgICAgICBiMnggPSBNYXRoLmZsb29yKChwb3NpdGlvbnNbdjJ4XSAtIG9wdGlvbnMuYkluZm8u
bWluaW11bS54ICogcmF0aW8pICogeFN1YlJhdGlvKTsKKyAgICAgICAgICAgICAgICBiMnkgPSBN
YXRoLmZsb29yKChwb3NpdGlvbnNbdjJ5XSAtIG9wdGlvbnMuYkluZm8ubWluaW11bS55ICogcmF0
aW8pICogeVN1YlJhdGlvKTsKKyAgICAgICAgICAgICAgICBiMnogPSBNYXRoLmZsb29yKChwb3Np
dGlvbnNbdjJ6XSAtIG9wdGlvbnMuYkluZm8ubWluaW11bS56ICogcmF0aW8pICogelN1YlJhdGlv
KTsKKyAgICAgICAgICAgICAgICBiM3ggPSBNYXRoLmZsb29yKChwb3NpdGlvbnNbdjN4XSAtIG9w
dGlvbnMuYkluZm8ubWluaW11bS54ICogcmF0aW8pICogeFN1YlJhdGlvKTsKKyAgICAgICAgICAg
ICAgICBiM3kgPSBNYXRoLmZsb29yKChwb3NpdGlvbnNbdjN5XSAtIG9wdGlvbnMuYkluZm8ubWlu
aW11bS55ICogcmF0aW8pICogeVN1YlJhdGlvKTsKKyAgICAgICAgICAgICAgICBiM3ogPSBNYXRo
LmZsb29yKChwb3NpdGlvbnNbdjN6XSAtIG9wdGlvbnMuYkluZm8ubWluaW11bS56ICogcmF0aW8p
ICogelN1YlJhdGlvKTsKKyAgICAgICAgICAgICAgICBibG9ja19pZHhfdjEgPSBiMXggKyBvcHRp
b25zLnN1YkRpdi5tYXggKiBiMXkgKyBzdWJTcSAqIGIxejsKKyAgICAgICAgICAgICAgICBibG9j
a19pZHhfdjIgPSBiMnggKyBvcHRpb25zLnN1YkRpdi5tYXggKiBiMnkgKyBzdWJTcSAqIGIyejsK
KyAgICAgICAgICAgICAgICBibG9ja19pZHhfdjMgPSBiM3ggKyBvcHRpb25zLnN1YkRpdi5tYXgg
KiBiM3kgKyBzdWJTcSAqIGIzejsKKyAgICAgICAgICAgICAgICBibG9ja19pZHhfbyA9IG94ICsg
b3B0aW9ucy5zdWJEaXYubWF4ICogb3kgKyBzdWJTcSAqIG96OworICAgICAgICAgICAgICAgIG9w
dGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X29dID0gb3B0aW9ucy5mYWNldFBhcnRp
dGlvbmluZ1tibG9ja19pZHhfb10gPyBvcHRpb25zLmZhY2V0UGFydGl0aW9uaW5nW2Jsb2NrX2lk
eF9vXSA6IG5ldyBBcnJheSgpOworICAgICAgICAgICAgICAgIG9wdGlvbnMuZmFjZXRQYXJ0aXRp
b25pbmdbYmxvY2tfaWR4X3YxXSA9IG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4
X3YxXSA/IG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X3YxXSA6IG5ldyBBcnJh
eSgpOworICAgICAgICAgICAgICAgIG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4
X3YyXSA9IG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X3YyXSA/IG9wdGlvbnMu
ZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X3YyXSA6IG5ldyBBcnJheSgpOworICAgICAgICAg
ICAgICAgIG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X3YzXSA9IG9wdGlvbnMu
ZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X3YzXSA/IG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25p
bmdbYmxvY2tfaWR4X3YzXSA6IG5ldyBBcnJheSgpOworICAgICAgICAgICAgICAgIC8vIHB1c2gg
ZWFjaCBmYWNldCBpbmRleCBpbiBlYWNoIGJsb2NrIGNvbnRhaW5pbmcgdGhlIHZlcnRleAorICAg
ICAgICAgICAgICAgIG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X3YxXS5wdXNo
KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2tfaWR4X3YyICE9IGJsb2NrX2lkeF92
MSkgeworICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZhY2V0UGFydGl0aW9uaW5nW2Jsb2Nr
X2lkeF92Ml0ucHVzaChpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICghKGJsb2NrX2lkeF92MyA9PSBibG9ja19pZHhfdjIgfHwgYmxvY2tfaWR4X3YzID09IGJs
b2NrX2lkeF92MSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5mYWNldFBhcnRpdGlv
bmluZ1tibG9ja19pZHhfdjNdLnB1c2goaW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoIShibG9ja19pZHhfbyA9PSBibG9ja19pZHhfdjEgfHwgYmxvY2tfaWR4
X28gPT0gYmxvY2tfaWR4X3YyIHx8IGJsb2NrX2lkeF9vID09IGJsb2NrX2lkeF92MykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgb3B0aW9ucy5mYWNldFBhcnRpdGlvbmluZ1tibG9ja19pZHhfb10u
cHVzaChpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGNvbXB1dGVEZXB0aFNvcnQgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmZhY2V0UG9zaXRp
b25zKSB7CisgICAgICAgICAgICAgICAgdmFyIGRzZiA9IGRlcHRoU29ydGVkRmFjZXRzW2luZGV4
XTsKKyAgICAgICAgICAgICAgICBkc2YuaW5kID0gaW5kZXggKiAzOworICAgICAgICAgICAgICAg
IGRzZi5zcURpc3RhbmNlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5EaXN0YW5jZVNxdWFyZWQob3B0aW9ucy5mYWNldFBvc2l0aW9u
c1tpbmRleF0sIGRpc3RhbmNlVG8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gY29t
cHV0ZSB0aGUgbm9ybWFscyBhbnl3YXkKKyAgICAgICAgICAgIG5vcm1hbHNbdjF4XSArPSBmYWNl
Tm9ybWFseDsgLy8gYWNjdW11bGF0ZSBhbGwgdGhlIG5vcm1hbHMgcGVyIGZhY2UKKyAgICAgICAg
ICAgIG5vcm1hbHNbdjF5XSArPSBmYWNlTm9ybWFseTsKKyAgICAgICAgICAgIG5vcm1hbHNbdjF6
XSArPSBmYWNlTm9ybWFsejsKKyAgICAgICAgICAgIG5vcm1hbHNbdjJ4XSArPSBmYWNlTm9ybWFs
eDsKKyAgICAgICAgICAgIG5vcm1hbHNbdjJ5XSArPSBmYWNlTm9ybWFseTsKKyAgICAgICAgICAg
IG5vcm1hbHNbdjJ6XSArPSBmYWNlTm9ybWFsejsKKyAgICAgICAgICAgIG5vcm1hbHNbdjN4XSAr
PSBmYWNlTm9ybWFseDsKKyAgICAgICAgICAgIG5vcm1hbHNbdjN5XSArPSBmYWNlTm9ybWFseTsK
KyAgICAgICAgICAgIG5vcm1hbHNbdjN6XSArPSBmYWNlTm9ybWFsejsKKyAgICAgICAgfQorICAg
ICAgICAvLyBsYXN0IG5vcm1hbGl6YXRpb24gb2YgZWFjaCBub3JtYWwKKyAgICAgICAgZm9yIChp
bmRleCA9IDA7IGluZGV4IDwgbm9ybWFscy5sZW5ndGggLyAzOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICBmYWNlTm9ybWFseCA9IG5vcm1hbHNbaW5kZXggKiAzXTsKKyAgICAgICAgICAgIGZhY2VO
b3JtYWx5ID0gbm9ybWFsc1tpbmRleCAqIDMgKyAxXTsKKyAgICAgICAgICAgIGZhY2VOb3JtYWx6
ID0gbm9ybWFsc1tpbmRleCAqIDMgKyAyXTsKKyAgICAgICAgICAgIGxlbmd0aCA9IE1hdGguc3Fy
dChmYWNlTm9ybWFseCAqIGZhY2VOb3JtYWx4ICsgZmFjZU5vcm1hbHkgKiBmYWNlTm9ybWFseSAr
IGZhY2VOb3JtYWx6ICogZmFjZU5vcm1hbHopOworICAgICAgICAgICAgbGVuZ3RoID0gKGxlbmd0
aCA9PT0gMCkgPyAxLjAgOiBsZW5ndGg7CisgICAgICAgICAgICBmYWNlTm9ybWFseCAvPSBsZW5n
dGg7CisgICAgICAgICAgICBmYWNlTm9ybWFseSAvPSBsZW5ndGg7CisgICAgICAgICAgICBmYWNl
Tm9ybWFseiAvPSBsZW5ndGg7CisgICAgICAgICAgICBub3JtYWxzW2luZGV4ICogM10gPSBmYWNl
Tm9ybWFseDsKKyAgICAgICAgICAgIG5vcm1hbHNbaW5kZXggKiAzICsgMV0gPSBmYWNlTm9ybWFs
eTsKKyAgICAgICAgICAgIG5vcm1hbHNbaW5kZXggKiAzICsgMl0gPSBmYWNlTm9ybWFsejsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBWZXJ0ZXhEYXRhLl9Db21w
dXRlU2lkZXMgPSBmdW5jdGlvbiAoc2lkZU9yaWVudGF0aW9uLCBwb3NpdGlvbnMsIGluZGljZXMs
IG5vcm1hbHMsIHV2cywgZnJvbnRVVnMsIGJhY2tVVnMpIHsKKyAgICAgICAgdmFyIGxpID0gaW5k
aWNlcy5sZW5ndGg7CisgICAgICAgIHZhciBsbiA9IG5vcm1hbHMubGVuZ3RoOworICAgICAgICB2
YXIgaTsKKyAgICAgICAgdmFyIG47CisgICAgICAgIHNpZGVPcmllbnRhdGlvbiA9IHNpZGVPcmll
bnRhdGlvbiB8fCBWZXJ0ZXhEYXRhLkRFRkFVTFRTSURFOworICAgICAgICBzd2l0Y2ggKHNpZGVP
cmllbnRhdGlvbikgeworICAgICAgICAgICAgY2FzZSBWZXJ0ZXhEYXRhLkZST05UU0lERToKKyAg
ICAgICAgICAgICAgICAvLyBub3RoaW5nIGNoYW5nZWQKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgVmVydGV4RGF0YS5CQUNLU0lERToKKyAgICAgICAgICAgICAgICB2
YXIgdG1wOworICAgICAgICAgICAgICAgIC8vIGluZGljZXMKKyAgICAgICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbGk7IGkgKz0gMykgeworICAgICAgICAgICAgICAgICAgICB0bXAgPSBpbmRp
Y2VzW2ldOworICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2ldID0gaW5kaWNlc1tpICsgMl07
CisgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaSArIDJdID0gdG1wOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAvLyBub3JtYWxzCisgICAgICAgICAgICAgICAgZm9yIChu
ID0gMDsgbiA8IGxuOyBuKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1tuXSA9IC1u
b3JtYWxzW25dOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVmVydGV4RGF0YS5ET1VCTEVTSURFOgorICAgICAgICAgICAgICAgIC8v
IHBvc2l0aW9ucworICAgICAgICAgICAgICAgIHZhciBscCA9IHBvc2l0aW9ucy5sZW5ndGg7Cisg
ICAgICAgICAgICAgICAgdmFyIGwgPSBscCAvIDM7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
cCA9IDA7IHAgPCBscDsgcCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tscCAr
IHBdID0gcG9zaXRpb25zW3BdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
LyBpbmRpY2VzCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpOyBpICs9IDMpIHsK
KyAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpICsgbGldID0gaW5kaWNlc1tpICsgMl0gKyBs
OworICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2kgKyAxICsgbGldID0gaW5kaWNlc1tpICsg
MV0gKyBsOworICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2kgKyAyICsgbGldID0gaW5kaWNl
c1tpXSArIGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIG5vcm1hbHMK
KyAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbG47IG4rKykgeworICAgICAgICAgICAg
ICAgICAgICBub3JtYWxzW2xuICsgbl0gPSAtbm9ybWFsc1tuXTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgLy8gdXZzCisgICAgICAgICAgICAgICAgdmFyIGx1ID0gdXZzLmxl
bmd0aDsKKyAgICAgICAgICAgICAgICB2YXIgdSA9IDA7CisgICAgICAgICAgICAgICAgZm9yICh1
ID0gMDsgdSA8IGx1OyB1KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdXZzW3UgKyBsdV0gPSB1
dnNbdV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZyb250VVZzID0gZnJv
bnRVVnMgPyBmcm9udFVWcyA6IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVmVjdG9yNCJdKDAuMCwgMC4wLCAxLjAsIDEuMCk7CisgICAgICAgICAg
ICAgICAgYmFja1VWcyA9IGJhY2tVVnMgPyBiYWNrVVZzIDogbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3I0Il0oMC4wLCAwLjAsIDEuMCwg
MS4wKTsKKyAgICAgICAgICAgICAgICB1ID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgbHUgLyAyOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdXZzW3VdID0gZnJvbnRV
VnMueCArIChmcm9udFVWcy56IC0gZnJvbnRVVnMueCkgKiB1dnNbdV07CisgICAgICAgICAgICAg
ICAgICAgIHV2c1t1ICsgMV0gPSBmcm9udFVWcy55ICsgKGZyb250VVZzLncgLSBmcm9udFVWcy55
KSAqIHV2c1t1ICsgMV07CisgICAgICAgICAgICAgICAgICAgIHV2c1t1ICsgbHVdID0gYmFja1VW
cy54ICsgKGJhY2tVVnMueiAtIGJhY2tVVnMueCkgKiB1dnNbdSArIGx1XTsKKyAgICAgICAgICAg
ICAgICAgICAgdXZzW3UgKyBsdSArIDFdID0gYmFja1VWcy55ICsgKGJhY2tVVnMudyAtIGJhY2tV
VnMueSkgKiB1dnNbdSArIGx1ICsgMV07CisgICAgICAgICAgICAgICAgICAgIHUgKz0gMjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIEFwcGxpZXMgVmVydGV4RGF0YSBjcmVhdGVkIGZyb20gdGhlIGlt
cG9ydGVkIHBhcmFtZXRlcnMgdG8gdGhlIGdlb21ldHJ5CisgICAgICogQHBhcmFtIHBhcnNlZFZl
cnRleERhdGEgdGhlIHBhcnNlZCBkYXRhIGZyb20gYW4gaW1wb3J0ZWQgZmlsZQorICAgICAqIEBw
YXJhbSBnZW9tZXRyeSB0aGUgZ2VvbWV0cnkgdG8gYXBwbHkgdGhlIFZlcnRleERhdGEgdG8KKyAg
ICAgKi8KKyAgICBWZXJ0ZXhEYXRhLkltcG9ydFZlcnRleERhdGEgPSBmdW5jdGlvbiAocGFyc2Vk
VmVydGV4RGF0YSwgZ2VvbWV0cnkpIHsKKyAgICAgICAgdmFyIHZlcnRleERhdGEgPSBuZXcgVmVy
dGV4RGF0YSgpOworICAgICAgICAvLyBwb3NpdGlvbnMKKyAgICAgICAgdmFyIHBvc2l0aW9ucyA9
IHBhcnNlZFZlcnRleERhdGEucG9zaXRpb25zOworICAgICAgICBpZiAocG9zaXRpb25zKSB7Cisg
ICAgICAgICAgICB2ZXJ0ZXhEYXRhLnNldChwb3NpdGlvbnMsIF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gbm9ybWFscworICAgICAgICB2YXIgbm9ybWFscyA9IHBhcnNl
ZFZlcnRleERhdGEubm9ybWFsczsKKyAgICAgICAgaWYgKG5vcm1hbHMpIHsKKyAgICAgICAgICAg
IHZlcnRleERhdGEuc2V0KG5vcm1hbHMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQpOworICAgICAgICB9CisgICAg
ICAgIC8vIHRhbmdlbnRzCisgICAgICAgIHZhciB0YW5nZW50cyA9IHBhcnNlZFZlcnRleERhdGEu
dGFuZ2VudHM7CisgICAgICAgIGlmICh0YW5nZW50cykgeworICAgICAgICAgICAgdmVydGV4RGF0
YS5zZXQodGFuZ2VudHMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlcnRleEJ1ZmZlciJdLlRhbmdlbnRLaW5kKTsKKyAgICAgICAgfQorICAgICAgICAvLyB1
dnMKKyAgICAgICAgdmFyIHV2cyA9IHBhcnNlZFZlcnRleERhdGEudXZzOworICAgICAgICBpZiAo
dXZzKSB7CisgICAgICAgICAgICB2ZXJ0ZXhEYXRhLnNldCh1dnMsIF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gdXYycworICAgICAgICB2YXIgdXYycyA9IHBhcnNlZFZlcnRleERh
dGEudXYyczsKKyAgICAgICAgaWYgKHV2MnMpIHsKKyAgICAgICAgICAgIHZlcnRleERhdGEuc2V0
KHV2MnMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLlVWMktpbmQpOworICAgICAgICB9CisgICAgICAgIC8vIHV2M3MKKyAgICAgICAg
dmFyIHV2M3MgPSBwYXJzZWRWZXJ0ZXhEYXRhLnV2M3M7CisgICAgICAgIGlmICh1djNzKSB7Cisg
ICAgICAgICAgICB2ZXJ0ZXhEYXRhLnNldCh1djNzLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjNLaW5kKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyB1djRzCisgICAgICAgIHZhciB1djRzID0gcGFyc2VkVmVydGV4RGF0YS51djRz
OworICAgICAgICBpZiAodXY0cykgeworICAgICAgICAgICAgdmVydGV4RGF0YS5zZXQodXY0cywg
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVy
Il0uVVY0S2luZCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gdXY1cworICAgICAgICB2YXIgdXY1
cyA9IHBhcnNlZFZlcnRleERhdGEudXY1czsKKyAgICAgICAgaWYgKHV2NXMpIHsKKyAgICAgICAg
ICAgIHZlcnRleERhdGEuc2V0KHV2NXMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWNUtpbmQpOworICAgICAgICB9CisgICAgICAg
IC8vIHV2NnMKKyAgICAgICAgdmFyIHV2NnMgPSBwYXJzZWRWZXJ0ZXhEYXRhLnV2NnM7CisgICAg
ICAgIGlmICh1djZzKSB7CisgICAgICAgICAgICB2ZXJ0ZXhEYXRhLnNldCh1djZzLCBfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjZL
aW5kKTsKKyAgICAgICAgfQorICAgICAgICAvLyBjb2xvcnMKKyAgICAgICAgdmFyIGNvbG9ycyA9
IHBhcnNlZFZlcnRleERhdGEuY29sb3JzOworICAgICAgICBpZiAoY29sb3JzKSB7CisgICAgICAg
ICAgICB2ZXJ0ZXhEYXRhLnNldChfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJDb2xvcjQiXS5DaGVja0NvbG9yczQoY29sb3JzLCBwb3NpdGlvbnMubGVuZ3Ro
IC8gMyksIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLkNvbG9yS2luZCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gbWF0cmljZXNJbmRp
Y2VzCisgICAgICAgIHZhciBtYXRyaWNlc0luZGljZXMgPSBwYXJzZWRWZXJ0ZXhEYXRhLm1hdHJp
Y2VzSW5kaWNlczsKKyAgICAgICAgaWYgKG1hdHJpY2VzSW5kaWNlcykgeworICAgICAgICAgICAg
dmVydGV4RGF0YS5zZXQobWF0cmljZXNJbmRpY2VzLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNLaW5kKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBtYXRyaWNlc1dlaWdodHMKKyAgICAgICAgdmFyIG1hdHJp
Y2VzV2VpZ2h0cyA9IHBhcnNlZFZlcnRleERhdGEubWF0cmljZXNXZWlnaHRzOworICAgICAgICBp
ZiAobWF0cmljZXNXZWlnaHRzKSB7CisgICAgICAgICAgICB2ZXJ0ZXhEYXRhLnNldChtYXRyaWNl
c1dlaWdodHMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZl
cnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpOworICAgICAgICB9CisgICAgICAgIC8v
IGluZGljZXMKKyAgICAgICAgdmFyIGluZGljZXMgPSBwYXJzZWRWZXJ0ZXhEYXRhLmluZGljZXM7
CisgICAgICAgIGlmIChpbmRpY2VzKSB7CisgICAgICAgICAgICB2ZXJ0ZXhEYXRhLmluZGljZXMg
PSBpbmRpY2VzOworICAgICAgICB9CisgICAgICAgIGdlb21ldHJ5LnNldEFsbFZlcnRpY2VzRGF0
YSh2ZXJ0ZXhEYXRhLCBwYXJzZWRWZXJ0ZXhEYXRhLnVwZGF0YWJsZSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBNZXNoIHNpZGUgb3JpZW50YXRpb24gOiB1c3VhbGx5IHRoZSBleHRlcm5hbCBv
ciBmcm9udCBzdXJmYWNlCisgICAgICovCisgICAgVmVydGV4RGF0YS5GUk9OVFNJREUgPSAwOwor
ICAgIC8qKgorICAgICAqIE1lc2ggc2lkZSBvcmllbnRhdGlvbiA6IHVzdWFsbHkgdGhlIGludGVy
bmFsIG9yIGJhY2sgc3VyZmFjZQorICAgICAqLworICAgIFZlcnRleERhdGEuQkFDS1NJREUgPSAx
OworICAgIC8qKgorICAgICAqIE1lc2ggc2lkZSBvcmllbnRhdGlvbiA6IGJvdGggaW50ZXJuYWwg
YW5kIGV4dGVybmFsIG9yIGZyb250IGFuZCBiYWNrIHN1cmZhY2VzCisgICAgICovCisgICAgVmVy
dGV4RGF0YS5ET1VCTEVTSURFID0gMjsKKyAgICAvKioKKyAgICAgKiBNZXNoIHNpZGUgb3JpZW50
YXRpb24gOiBieSBkZWZhdWx0LCBgRlJPTlRTSURFYAorICAgICAqLworICAgIFZlcnRleERhdGEu
REVGQVVMVFNJREUgPSAwOworICAgIHJldHVybiBWZXJ0ZXhEYXRhOworfSgpKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvbWVzaEJ1aWxkZXIudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL21lc2hCdWlsZGVyLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogTWVzaEJ1aWxkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiTWVzaEJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1lc2hCdWlsZGVyOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQnVpbGRlcnNfcmliYm9uQnVpbGRlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9CdWlsZGVycy9y
aWJib25CdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9yaWJib25CdWlsZGVyLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0J1aWxkZXJzX2Rpc2NCdWlsZGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0J1aWxkZXJzL2Rp
c2NCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9kaXNjQnVpbGRlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9CdWlsZGVyc19ib3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0J1aWxkZXJzL2JveEJ1aWxk
ZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL2JveEJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfQnVpbGRlcnNfdGlsZWRCb3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0J1aWxkZXJzL3RpbGVkQm94QnVp
bGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdGlsZWRCb3hCdWlsZGVyLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0J1aWxkZXJzX3NwaGVyZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQnVpbGRlcnMvc3BoZXJl
QnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9CdWlsZGVyc19jeWxpbmRlckJ1aWxkZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQnVpbGRlcnMvY3ls
aW5kZXJCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1aWxkZXIudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQnVpbGRlcnNfdG9ydXNCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0J1aWxkZXJz
L3RvcnVzQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdG9ydXNCdWlsZGVyLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0J1aWxkZXJzX3RvcnVzS25vdEJ1aWxkZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQnVpbGRl
cnMvdG9ydXNLbm90QnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdG9ydXNLbm90QnVpbGRl
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9CdWlsZGVyc19saW5lc0J1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
QnVpbGRlcnMvbGluZXNCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9saW5lc0J1aWxkZXIu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQnVpbGRlcnNfcG9seWdvbkJ1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
QnVpbGRlcnMvcG9seWdvbkJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3BvbHlnb25CdWls
ZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0J1aWxkZXJzX3NoYXBlQnVpbGRl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vQnVpbGRlcnMvc2hhcGVCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9zaGFwZUJ1aWxk
ZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQnVpbGRlcnNfbGF0aGVCdWlsZGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9CdWlsZGVycy9sYXRoZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL2xhdGhlQnVpbGRl
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9CdWlsZGVyc19wbGFuZUJ1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L0J1aWxkZXJzL3BsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvcGxhbmVCdWlsZGVy
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0J1aWxkZXJzX3RpbGVkUGxhbmVCdWls
ZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9CdWlsZGVycy90aWxlZFBsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdGls
ZWRQbGFuZUJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQnVpbGRlcnNf
Z3JvdW5kQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vQnVpbGRlcnMvZ3JvdW5kQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRl
cnMvZ3JvdW5kQnVpbGRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9CdWlsZGVy
c190dWJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vQnVpbGRlcnMvdHViZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJz
L3R1YmVCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0J1aWxkZXJzX3Bv
bHloZWRyb25CdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9CdWlsZGVycy9wb2x5aGVkcm9uQnVpbGRlciAqLyAiLi9NZXNoZXMv
QnVpbGRlcnMvcG9seWhlZHJvbkJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfQnVpbGRlcnNfaWNvU3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQnVpbGRlcnMvaWNvU3BoZXJlQnVpbGRlciAq
LyAiLi9NZXNoZXMvQnVpbGRlcnMvaWNvU3BoZXJlQnVpbGRlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9CdWlsZGVyc19kZWNhbEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0J1aWxkZXJzL2RlY2FsQnVpbGRl
ciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvZGVjYWxCdWlsZGVyLnRzIik7CisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKy8qKgorICogQ2xhc3MgY29udGFpbmluZyBzdGF0aWMg
ZnVuY3Rpb25zIHRvIGhlbHAgcHJvY2VkdXJhbGx5IGJ1aWxkIG1lc2hlcworICovCit2YXIgTWVz
aEJ1aWxkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gTWVz
aEJ1aWxkZXIoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBib3ggbWVzaAor
ICAgICAqICogVGhlIHBhcmFtZXRlciBgc2l6ZWAgc2V0cyB0aGUgc2l6ZSAoZmxvYXQpIG9mIGVh
Y2ggYm94IHNpZGUgKGRlZmF1bHQgMSkKKyAgICAgKiAqIFlvdSBjYW4gc2V0IHNvbWUgZGlmZmVy
ZW50IGJveCBkaW1lbnNpb25zIGJ5IHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGB3aWR0aGAsIGBoZWln
aHRgIGFuZCBgZGVwdGhgIChhbGwgYnkgZGVmYXVsdCBoYXZlIHRoZSBzYW1lIHZhbHVlIG9mIGBz
aXplYCkKKyAgICAgKiAqIFlvdSBjYW4gc2V0IGRpZmZlcmVudCBjb2xvcnMgYW5kIGRpZmZlcmVu
dCBpbWFnZXMgdG8gZWFjaCBib3ggc2lkZSBieSB1c2luZyB0aGUgcGFyYW1ldGVycyBgZmFjZUNv
bG9yc2AgKGFuIGFycmF5IG9mIDYgQ29sb3IzIGVsZW1lbnRzKSBhbmQgYGZhY2VVVmAgKGFuIGFy
cmF5IG9mIDYgVmVjdG9yNCBlbGVtZW50cykKKyAgICAgKiAqIFBsZWFzZSByZWFkIHRoaXMgdHV0
b3JpYWwgOiBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jcmVhdGVib3hfcGVyX2Zh
Y2VfdGV4dHVyZXNfYW5kX2NvbG9ycworICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVz
aCBzaWRlIG9yaWVudGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5GUk9OVFNJ
REUgKGRlZmF1bHQpLCBCQUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNoLkRPVUJM
RVNJREUKKyAgICAgKiAqIElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNh
biBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGlj
ayByZXNwZWN0aXZlbHkgb24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBw
YXJhbWV0ZXJzIGBmcm9udFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFpbCBoZXJl
IDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2Vs
ZW1lbnRzI3NpZGUtb3JpZW50YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8g
dXBkYXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0
IGZhbHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9u
Y2UgY3JlYXRlZAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
c2V0X3NoYXBlcyNib3gKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRo
ZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRv
IGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5n
IHNjZW5lCisgICAgICogQHJldHVybnMgdGhlIGJveCBtZXNoCisgICAgICovCisgICAgTWVzaEJ1
aWxkZXIuQ3JlYXRlQm94ID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAg
ICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICByZXR1
cm4gX0J1aWxkZXJzX2JveEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQm94
QnVpbGRlciJdLkNyZWF0ZUJveChuYW1lLCBvcHRpb25zLCBzY2VuZSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgdGlsZWQgYm94IG1lc2gKKyAgICAgKiAqIGZhY2VUaWxlcyBz
ZXRzIHRoZSBwYXR0ZXJuLCB0aWxlIHNpemUgYW5kIG51bWJlciBvZiB0aWxlcyBmb3IgYSBmYWNl
CisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29s
ZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFs
IGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAgICAgKiBAcGFy
YW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlv
bnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBw
YXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdGhl
IHRpbGVkIGJveCBtZXNoCisgICAgICovCisgICAgTWVzaEJ1aWxkZXIuQ3JlYXRlVGlsZWRCb3gg
PSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09
PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfdGls
ZWRCb3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRpbGVkQm94QnVpbGRl
ciJdLkNyZWF0ZVRpbGVkQm94KG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYSBzcGhlcmUgbWVzaAorICAgICAqICogVGhlIHBhcmFtZXRlciBg
ZGlhbWV0ZXJgIHNldHMgdGhlIGRpYW1ldGVyIHNpemUgKGZsb2F0KSBvZiB0aGUgc3BoZXJlIChk
ZWZhdWx0IDEpCisgICAgICogKiBZb3UgY2FuIHNldCBzb21lIGRpZmZlcmVudCBzcGhlcmUgZGlt
ZW5zaW9ucywgZm9yIGluc3RhbmNlIHRvIGJ1aWxkIGFuIGVsbGlwc29pZCwgYnkgdXNpbmcgdGhl
IHBhcmFtZXRlcnMgYGRpYW1ldGVyWGAsIGBkaWFtZXRlcllgIGFuZCBgZGlhbWV0ZXJaYCAoYWxs
IGJ5IGRlZmF1bHQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBvZiBgZGlhbWV0ZXJgKQorICAgICAqICog
VGhlIHBhcmFtZXRlciBgc2VnbWVudHNgIHNldHMgdGhlIHNwaGVyZSBudW1iZXIgb2YgaG9yaXpv
bnRhbCBzdHJpcGVzIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDMyKQorICAgICAqICogWW91
IGNhbiBjcmVhdGUgYW4gdW5jbG9zZWQgc3BoZXJlIHdpdGggdGhlIHBhcmFtZXRlciBgYXJjYCAo
cG9zaXRpdmUgZmxvYXQsIGRlZmF1bHQgMSksIHZhbHVlZCBiZXR3ZWVuIDAgYW5kIDEsIHdoYXQg
aXMgdGhlIHJhdGlvIG9mIHRoZSBjaXJjdW1mZXJlbmNlIChsYXRpdHVkZSkgOiAyIHggUEkgeCBy
YXRpbworICAgICAqICogWW91IGNhbiBjcmVhdGUgYW4gdW5jbG9zZWQgc3BoZXJlIG9uIGl0cyBo
ZWlnaHQgd2l0aCB0aGUgcGFyYW1ldGVyIGBzbGljZWAgKHBvc2l0aXZlIGZsb2F0LCBkZWZhdWx0
MSksIHZhbHVlZCBiZXR3ZWVuIDAgYW5kIDEsIHdoYXQgaXMgdGhlIGhlaWdodCByYXRpbyAobG9u
Z2l0dWRlKQorICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVudGF0
aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBC
QUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNoLkRPVUJMRVNJREUKKyAgICAgKiAq
IElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hhdCBw
YXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZlbHkg
b24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBmcm9u
dFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFpbCBoZXJlIDogaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3Jp
ZW50YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGgg
dGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMg
aW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAorICAg
ICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFy
YW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisg
ICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0
dXJucyB0aGUgc3BoZXJlIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL3NldF9zaGFwZXMjc3BoZXJlCisgICAgICovCisgICAgTWVzaEJ1aWxkZXIuQ3Jl
YXRlU3BoZXJlID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlm
IChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICByZXR1cm4gX0J1
aWxkZXJzX3NwaGVyZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BoZXJl
QnVpbGRlciJdLkNyZWF0ZVNwaGVyZShuYW1lLCBvcHRpb25zLCBzY2VuZSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcGxhbmUgcG9seWdvbmFsIG1lc2guICBCeSBkZWZhdWx0
LCB0aGlzIGlzIGEgZGlzYworICAgICAqICogVGhlIHBhcmFtZXRlciBgcmFkaXVzYCBzZXRzIHRo
ZSByYWRpdXMgc2l6ZSAoZmxvYXQpIG9mIHRoZSBwb2x5Z29uIChkZWZhdWx0IDAuNSkKKyAgICAg
KiAqIFRoZSBwYXJhbWV0ZXIgYHRlc3NlbGxhdGlvbmAgc2V0cyB0aGUgbnVtYmVyIG9mIHBvbHln
b24gc2lkZXMgKHBvc2l0aXZlIGludGVnZXIsIGRlZmF1bHQgNjQpLiBTbyBhIHRlc3NlbGxhdGlv
biB2YWx1ZWQgdG8gMyB3aWxsIGJ1aWxkIGEgdHJpYW5nbGUsIHRvIDQgYSBzcXVhcmUsIGV0Ywor
ICAgICAqICogWW91IGNhbiBjcmVhdGUgYW4gdW5jbG9zZWQgcG9seWdvbiB3aXRoIHRoZSBwYXJh
bWV0ZXIgYGFyY2AgKHBvc2l0aXZlIGZsb2F0LCBkZWZhdWx0IDEpLCB2YWx1ZWQgYmV0d2VlbiAw
IGFuZCAxLCB3aGF0IGlzIHRoZSByYXRpbyBvZiB0aGUgY2lyY3VtZmVyZW5jZSA6IDIgeCBQSSB4
IHJhdGlvCisgICAgICogKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtZXNoIHNpZGUgb3JpZW50YXRp
b24gd2l0aCB0aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLkZST05UU0lERSAoZGVmYXVsdCksIEJB
QllMT04uTWVzaC5CQUNLU0lERSBvciBCQUJZTE9OLk1lc2guRE9VQkxFU0lERQorICAgICAqICog
SWYgeW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNob29zZSB3aGF0IHBh
cnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJlc3BlY3RpdmVseSBv
biB0aGUgZnJvbnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGggdGhlIHBhcmFtZXRlcnMgYGZyb250
VVZzYCBhbmQgYGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBodHRwczovL2RvYy5i
YWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmll
bnRhdGlvbgorICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0aCB0
aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBp
bnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkCisgICAg
ICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJh
bSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1
cm5zIHRoZSBwbGFuZSBwb2x5Z29uYWwgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vc2V0X3NoYXBlcyNkaXNjLW9yLXJlZ3VsYXItcG9seWdvbgorICAg
ICAqLworICAgIE1lc2hCdWlsZGVyLkNyZWF0ZURpc2MgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9u
cywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxs
OyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfZGlzY0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siRGlzY0J1aWxkZXIiXS5DcmVhdGVEaXNjKG5hbWUsIG9wdGlvbnMsIHNj
ZW5lKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBzcGhlcmUgYmFzZWQgdXBv
biBhbiBpY29zYWhlZHJvbiB3aXRoIDIwIHRyaWFuZ3VsYXIgZmFjZXMgd2hpY2ggY2FuIGJlIHN1
YmRpdmlkZWQKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHJhZGl1c2Agc2V0cyB0aGUgcmFkaXVz
IHNpemUgKGZsb2F0KSBvZiB0aGUgaWNvc3BoZXJlIChkZWZhdWx0IDEpCisgICAgICogKiBZb3Ug
Y2FuIHNldCBzb21lIGRpZmZlcmVudCBpY29zcGhlcmUgZGltZW5zaW9ucywgZm9yIGluc3RhbmNl
IHRvIGJ1aWxkIGFuIGVsbGlwc29pZCwgYnkgdXNpbmcgdGhlIHBhcmFtZXRlcnMgYHJhZGl1c1hg
LCBgcmFkaXVzWWAgYW5kIGByYWRpdXNaYCAoYWxsIGJ5IGRlZmF1bHQgaGF2ZSB0aGUgc2FtZSB2
YWx1ZSBvZiBgcmFkaXVzYCkKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHN1YmRpdmlzaW9uc2Ag
c2V0cyB0aGUgbnVtYmVyIG9mIHN1YmRpdmlzaW9ucyAocG9zdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0
IDQpLiBUaGUgbW9yZSBzdWJkaXZpc2lvbnMsIHRoZSBtb3JlIGZhY2VzIG9uIHRoZSBpY29zcGhl
cmUgd2hhdGV2ZXIgaXRzIHNpemUKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGZsYXRgIChib29s
ZWFuLCBkZWZhdWx0IHRydWUpIGdpdmVzIGVhY2ggc2lkZSBpdHMgb3duIG5vcm1hbHMuIFNldCBp
dCB0byBmYWxzZSB0byBnZXQgYSBzbW9vdGggY29udGludW91cyBsaWdodCByZWZsZWN0aW9uIG9u
IHRoZSBzdXJmYWNlCisgICAgICogKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtZXNoIHNpZGUgb3Jp
ZW50YXRpb24gd2l0aCB0aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLkZST05UU0lERSAoZGVmYXVs
dCksIEJBQllMT04uTWVzaC5CQUNLU0lERSBvciBCQUJZTE9OLk1lc2guRE9VQkxFU0lERQorICAg
ICAqICogSWYgeW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNob29zZSB3
aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJlc3BlY3Rp
dmVseSBvbiB0aGUgZnJvbnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGggdGhlIHBhcmFtZXRlcnMg
YGZyb250VVZzYCBhbmQgYGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBodHRwczov
L2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lk
ZS1vcmllbnRhdGlvbgorICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUg
d2l0aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlm
IGl0cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVk
CisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAq
IEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1l
c2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAq
IEByZXR1cm5zIHRoZSBpY29zYWhlZHJvbiBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by9wb2x5aGVkcmFfc2hhcGVzI2ljb3NwaGVyZQorICAgICAqLwor
ICAgIE1lc2hCdWlsZGVyLkNyZWF0ZUljb1NwaGVyZSA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25z
LCBzY2VuZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7
IH0KKyAgICAgICAgcmV0dXJuIF9CdWlsZGVyc19pY29TcGhlcmVCdWlsZGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xN19fWyJJY29TcGhlcmVCdWlsZGVyIl0uQ3JlYXRlSWNvU3BoZXJlKG5h
bWUsIG9wdGlvbnMsIHNjZW5lKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBy
aWJib24gbWVzaC4gVGhlIHJpYmJvbiBpcyBhIHBhcmFtZXRyaWMgc2hhcGUuICBJdCBoYXMgbm8g
cHJlZGVmaW5lZCBzaGFwZS4gSXRzIGZpbmFsIHNoYXBlIHdpbGwgZGVwZW5kIG9uIHRoZSBpbnB1
dCBwYXJhbWV0ZXJzCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBwYXRoQXJyYXlgIGlzIGEgcmVx
dWlyZWQgYXJyYXkgb2YgcGF0aHMsIHdoYXQgYXJlIGVhY2ggYW4gYXJyYXkgb2Ygc3VjY2Vzc2l2
ZSBWZWN0b3IzLiBUaGUgcGF0aEFycmF5IHBhcmFtZXRlciBkZXBpY3RzIHRoZSByaWJib24gZ2Vv
bWV0cnkKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGNsb3NlQXJyYXlgIChib29sZWFuLCBkZWZh
dWx0IGZhbHNlKSBjcmVhdGVzIGEgc2VhbSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3Qg
cGF0aHMgb2YgdGhlIHBhdGggYXJyYXkKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGNsb3NlUGF0
aGAgKGJvb2xlYW4sIGRlZmF1bHQgZmFsc2UpIGNyZWF0ZXMgYSBzZWFtIGJldHdlZW4gdGhlIGZp
cnN0IGFuZCB0aGUgbGFzdCBwb2ludHMgb2YgZWFjaCBwYXRoIG9mIHRoZSBwYXRoIGFycmF5Cisg
ICAgICogKiBUaGUgcGFyYW1ldGVyIGBvZmZzZXRgIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0
IDogcm91bmRlZCBoYWxmIHNpemUgb2YgdGhlIHBhdGhBcnJheSBsZW5ndGgpLCBpcyB0YWtlbiBp
biBhY2NvdW50IG9ubHkgaWYgdGhlIGBwYXRoQXJyYXlgIGlzIGNvbnRhaW5pbmcgYSBzaW5nbGUg
cGF0aAorICAgICAqICogSXQncyB0aGUgb2Zmc2V0IHRvIGpvaW4gdGhlIHBvaW50cyBmcm9tIHRo
ZSBzYW1lIHBhdGguIEV4IDogb2Zmc2V0ID0gMTAgbWVhbnMgdGhlIHBvaW50IDEgaXMgam9pbmVk
IHRvIHRoZSBwb2ludCAxMQorICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgaW5zdGFu
Y2VgIGlzIGFuIGluc3RhbmNlIG9mIGFuIGV4aXN0aW5nIFJpYmJvbiBvYmplY3QgdG8gYmUgdXBk
YXRlZCB3aXRoIHRoZSBwYXNzZWQgYHBhdGhBcnJheWAgcGFyYW1ldGVyIDogaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX2R5bmFtaWNhbGx5X21vcnBoX2FfbWVzaCNyaWJi
b24KKyAgICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3
aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxP
Ti5NZXNoLkJBQ0tTSURFIG9yIEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5
b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMg
b2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRo
ZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNg
IGFuZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0
aW9uCisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnZlcnRVVmAgKGJvb2xlYW4s
IGRlZmF1bHQgZmFsc2UpIHN3YXBzIGluIHRoZSBnZW9tZXRyeSB0aGUgVSBhbmQgViBjb29yZGlu
YXRlcyB0byBhcHBseSBhIHRleHR1cmUKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHV2c2AgaXMg
YW4gb3B0aW9uYWwgZmxhdCBhcnJheSBvZiBgVmVjdG9yMmAgdG8gdXBkYXRlL3NldCBlYWNoIHJp
YmJvbiB2ZXJ0ZXggd2l0aCBpdHMgb3duIGN1c3RvbSBVViB2YWx1ZXMgaW5zdGVhZCBvZiB0aGUg
Y29tcHV0ZWQgb25lcworICAgICAqICogVGhlIHBhcmFtZXRlcnMgYGNvbG9yc2AgaXMgYW4gb3B0
aW9uYWwgZmxhdCBhcnJheSBvZiBgQ29sb3I0YCB0byBzZXQvdXBkYXRlIGVhY2ggcmliYm9uIHZl
cnRleCB3aXRoIGl0cyBvd24gY3VzdG9tIGNvbG9yIHZhbHVlcworICAgICAqICogTm90ZSB0aGF0
IGlmIHlvdSB1c2UgdGhlIHBhcmFtZXRlcnMgYHV2c2Agb3IgYGNvbG9yc2AsIHRoZSBwYXNzZWQg
YXJyYXlzIG11c3QgYmUgcG9wdWxhdGVkIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBlbGVtZW50
cywgaXQgaXMgdG8gc2F5IHRoZSBudW1iZXIgb2YgcmliYm9uIHZlcnRpY2VzLiBSZW1lbWJlciB0
aGF0IGlmIHlvdSBzZXQgYGNsb3NlUGF0aGAgdG8gYHRydWVgLCB0aGVyZSdzIG9uZSBleHRyYSB2
ZXJ0ZXggcGVyIHBhdGggaW4gdGhlIGdlb21ldHJ5CisgICAgICogKiBNb3Jlb3ZlciwgeW91IGNh
biB1c2UgdGhlIHBhcmFtZXRlciBgY29sb3JgIHdpdGggYGluc3RhbmNlYCAodG8gdXBkYXRlIHRo
ZSByaWJib24pLCBvbmx5IGlmIHlvdSBwcmV2aW91c2x5IHVzZWQgaXQgYXQgY3JlYXRpb24gdGlt
ZQorICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0aCB0aGUgYm9v
bGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBpbnRlcm5h
bCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkCisgICAgICogQHBh
cmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRp
b25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBA
cGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRo
ZSByaWJib24gbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3df
dG8vcmliYm9uX3R1dG9yaWFsCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9wYXJhbWV0cmljX3NoYXBlcworICAgICAqLworICAgIE1lc2hCdWlsZGVyLkNyZWF0
ZVJpYmJvbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkgeworICAgICAgICBpZiAo
c2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgcmV0dXJuIF9CdWls
ZGVyc19yaWJib25CdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJpYmJvbkJ1
aWxkZXIiXS5DcmVhdGVSaWJib24obmFtZSwgb3B0aW9ucywgc2NlbmUpOworICAgIH07CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIGN5bGluZGVyIG9yIGEgY29uZSBtZXNoCisgICAgICogKiBU
aGUgcGFyYW1ldGVyIGBoZWlnaHRgIHNldHMgdGhlIGhlaWdodCBzaXplIChmbG9hdCkgb2YgdGhl
IGN5bGluZGVyL2NvbmUgKGZsb2F0LCBkZWZhdWx0IDIpLgorICAgICAqICogVGhlIHBhcmFtZXRl
ciBgZGlhbWV0ZXJgIHNldHMgdGhlIGRpYW1ldGVyIG9mIHRoZSB0b3AgYW5kIGJvdHRvbSBjYXAg
YXQgb25jZSAoZmxvYXQsIGRlZmF1bHQgMSkuCisgICAgICogKiBUaGUgcGFyYW1ldGVycyBgZGlh
bWV0ZXJUb3BgIGFuZCBgZGlhbWV0ZXJCb3R0b21gIG92ZXJ3cml0ZSB0aGUgcGFyYW1ldGVyIGBk
aWFtZXRlcmAgYW5kIHNldCByZXNwZWN0aXZlbHkgdGhlIHRvcCBjYXAgYW5kIGJvdHRvbSBjYXAg
ZGlhbWV0ZXIgKGZsb2F0cywgZGVmYXVsdCAxKS4gVGhlIHBhcmFtZXRlciAiZGlhbWV0ZXJCb3R0
b20iIGNhbid0IGJlIHplcm8uCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGB0ZXNzZWxsYXRpb25g
IHNldHMgdGhlIG51bWJlciBvZiBjeWxpbmRlciBzaWRlcyAocG9zaXRpdmUgaW50ZWdlciwgZGVm
YXVsdCAyNCkuIFNldCBpdCB0byAzIHRvIGdldCBhIHByaXNtIGZvciBpbnN0YW5jZS4KKyAgICAg
KiAqIFRoZSBwYXJhbWV0ZXIgYHN1YmRpdmlzaW9uc2Agc2V0cyB0aGUgbnVtYmVyIG9mIHJpbmdz
IGFsb25nIHRoZSBjeWxpbmRlciBoZWlnaHQgKHBvc2l0aXZlIGludGVnZXIsIGRlZmF1bHQgMSku
CisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBoYXNSaW5nc2AgKGJvb2xlYW4sIGRlZmF1bHQgZmFs
c2UpIG1ha2VzIHRoZSBzdWJkaXZpc2lvbnMgaW5kZXBlbmRlbnQgZnJvbSBlYWNoIG90aGVyLCBz
byB0aGV5IGJlY29tZSBkaWZmZXJlbnQgZmFjZXMuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBl
bmNsb3NlYCAgKGJvb2xlYW4sIGRlZmF1bHQgZmFsc2UpIGFkZHMgdHdvIGV4dHJhIGZhY2VzIHBl
ciBzdWJkaXZpc2lvbiB0byBhIHNsaWNlZCBjeWxpbmRlciB0byBjbG9zZSBpdCBhcm91bmQgaXRz
IGhlaWdodCBheGlzLgorICAgICAqICogVGhlIHBhcmFtZXRlciBgY2FwYCBzZXRzIHRoZSB3YXkg
dGhlIGN5bGluZGVyIGlzIGNhcHBlZC4gUG9zc2libGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLk5P
X0NBUCwgQkFCWUxPTi5NZXNoLkNBUF9TVEFSVCwgQkFCWUxPTi5NZXNoLkNBUF9FTkQsIEJBQllM
T04uTWVzaC5DQVBfQUxMIChkZWZhdWx0KS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGFyY2Ag
KGZsb2F0LCBkZWZhdWx0IDEpIGlzIHRoZSByYXRpbyAobWF4IDEpIHRvIGFwcGx5IHRvIHRoZSBj
aXJjdW1mZXJlbmNlIHRvIHNsaWNlIHRoZSBjeWxpbmRlci4KKyAgICAgKiAqIFlvdSBjYW4gc2V0
IGRpZmZlcmVudCBjb2xvcnMgYW5kIGRpZmZlcmVudCBpbWFnZXMgdG8gZWFjaCBib3ggc2lkZSBi
eSB1c2luZyB0aGUgcGFyYW1ldGVycyBgZmFjZUNvbG9yc2AgKGFuIGFycmF5IG9mIG4gQ29sb3Iz
IGVsZW1lbnRzKSBhbmQgYGZhY2VVVmAgKGFuIGFycmF5IG9mIG4gVmVjdG9yNCBlbGVtZW50cyku
CisgICAgICogKiBUaGUgdmFsdWUgb2YgbiBpcyB0aGUgbnVtYmVyIG9mIGN5bGluZGVyIGZhY2Vz
LiBJZiB0aGUgY3lsaW5kZXIgaGFzIG9ubHkgMSBzdWJkaXZpc2lvbnMsIG4gZXF1YWxzIDogdG9w
IGZhY2UgKyBjeWxpbmRlciBzdXJmYWNlICsgYm90dG9tIGZhY2UgPSAzCisgICAgICogKiBOb3cs
IGlmIHRoZSBjeWxpbmRlciBoYXMgNSBpbmRlcGVuZGVudCBzdWJkaXZpc2lvbnMgKGhhc1Jpbmdz
ID0gdHJ1ZSksIG4gZXF1YWxzIDogdG9wIGZhY2UgKyA1IHN0cmlwZSBzdXJmYWNlcyArIGJvdHRv
bSBmYWNlID0gMiArIDUgPSA3CisgICAgICogKiBGaW5hbGx5LCBpZiB0aGUgY3lsaW5kZXIgaGFz
IDUgaW5kZXBlbmRlbnQgc3ViZGl2aXNpb25zIGFuZCBpcyBlbmNsb3NlLCBuIGVxdWFscyA6IHRv
cCBmYWNlICsgNSB4IChzdHJpcGUgc3VyZmFjZSArIDIgY2xvc2luZyBmYWNlcykgKyBib3R0b20g
ZmFjZSA9IDIgKyA1ICogMyA9IDE3CisgICAgICogKiBFYWNoIGFycmF5IChjb2xvciBvciBVVnMp
IGlzIGFsd2F5cyBvcmRlcmVkIHRoZSBzYW1lIHdheSA6IHRoZSBmaXJzdCBlbGVtZW50IGlzIHRo
ZSBib3R0b20gY2FwLCB0aGUgbGFzdCBlbGVtZW50IGlzIHRoZSB0b3AgY2FwLiBUaGUgb3RoZXIg
ZWxlbWVudHMgYXJlIGVhY2ggYSByaW5nIHN1cmZhY2UuCisgICAgICogKiBJZiBgZW5jbG9zZWAg
aXMgZmFsc2UsIGEgcmluZyBzdXJmYWNlIGlzIG9uZSBlbGVtZW50LgorICAgICAqICogSWYgYGVu
Y2xvc2VgIGlzIHRydWUsIGEgcmluZyBzdXJmYWNlIGlzIDMgc3VjY2Vzc2l2ZSBlbGVtZW50cyBp
biB0aGUgYXJyYXkgOiB0aGUgdHVidWxhciBzdXJmYWNlLCB0aGVuIHRoZSB0d28gY2xvc2luZyBm
YWNlcy4KKyAgICAgKiAqIEV4YW1wbGUgaG93IHRvIHNldCBjb2xvcnMgYW5kIHRleHR1cmVzIG9u
IGEgc2xpY2VkIGN5bGluZGVyIDogaHR0cHM6Ly93d3cuaHRtbDVnYW1lZGV2cy5jb20vdG9waWMv
MTc5NDUtY3JlYXRpbmctYS1jbG9zZWQtc2xpY2Utb2YtYS1jeWxpbmRlci8jY29tbWVudC0xMDYz
NzkKKyAgICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3
aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxP
Ti5NZXNoLkJBQ0tTSURFIG9yIEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5
b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMg
b2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRo
ZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNg
IGFuZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0
aW9uCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBi
b29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVy
bmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQuCisgICAgICog
QHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBv
cHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAg
KiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5z
IHRoZSBjeWxpbmRlciBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9zZXRfc2hhcGVzI2N5bGluZGVyLW9yLWNvbmUKKyAgICAgKi8KKyAgICBNZXNoQnVp
bGRlci5DcmVhdGVDeWxpbmRlciA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkgewor
ICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAg
cmV0dXJuIF9CdWlsZGVyc19jeWxpbmRlckJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siQ3lsaW5kZXJCdWlsZGVyIl0uQ3JlYXRlQ3lsaW5kZXIobmFtZSwgb3B0aW9ucywgc2Nl
bmUpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHRvcnVzIG1lc2gKKyAgICAg
KiAqIFRoZSBwYXJhbWV0ZXIgYGRpYW1ldGVyYCBzZXRzIHRoZSBkaWFtZXRlciBzaXplIChmbG9h
dCkgb2YgdGhlIHRvcnVzIChkZWZhdWx0IDEpCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGB0aGlj
a25lc3NgIHNldHMgdGhlIGRpYW1ldGVyIHNpemUgb2YgdGhlIHR1YmUgb2YgdGhlIHRvcnVzIChm
bG9hdCwgZGVmYXVsdCAwLjUpCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGB0ZXNzZWxsYXRpb25g
IHNldHMgdGhlIG51bWJlciBvZiB0b3J1cyBzaWRlcyAocG9zdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0
IDE2KQorICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9u
IHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBCQUJZ
TE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNoLkRPVUJMRVNJREUKKyAgICAgKiAqIElm
IHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hhdCBwYXJ0
cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZlbHkgb24g
dGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBmcm9udFVW
c2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFpbCBoZXJlIDogaHR0cHM6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50
YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhl
IGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50
ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZC4KKyAgICAg
KiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFt
IG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAg
ICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVy
bnMgdGhlIHRvcnVzIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL3NldF9zaGFwZXMjdG9ydXMKKyAgICAgKi8KKyAgICBNZXNoQnVpbGRlci5DcmVhdGVU
b3J1cyA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkgeworICAgICAgICBpZiAoc2Nl
bmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgcmV0dXJuIF9CdWlsZGVy
c190b3J1c0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVG9ydXNCdWlsZGVy
Il0uQ3JlYXRlVG9ydXMobmFtZSwgb3B0aW9ucywgc2NlbmUpOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIHRvcnVzIGtub3QgbWVzaAorICAgICAqICogVGhlIHBhcmFtZXRlciBg
cmFkaXVzYCBzZXRzIHRoZSBnbG9iYWwgcmFkaXVzIHNpemUgKGZsb2F0KSBvZiB0aGUgdG9ydXMg
a25vdCAoZGVmYXVsdCAyKQorICAgICAqICogVGhlIHBhcmFtZXRlciBgcmFkaWFsU2VnbWVudHNg
IHNldHMgdGhlIG51bWJlciBvZiBzaWRlcyBvbiBlYWNoIHR1YmUgc2VnbWVudHMgKHBvc2l0aXZl
IGludGVnZXIsIGRlZmF1bHQgMzIpCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGB0dWJ1bGFyU2Vn
bWVudHNgIHNldHMgdGhlIG51bWJlciBvZiB0dWJlcyB0byBkZWNvbXBvc2UgdGhlIGtub3QgaW50
byAocG9zaXRpdmUgaW50ZWdlciwgZGVmYXVsdCAzMikKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXJz
IGBwYCBhbmQgYHFgIGFyZSB0aGUgbnVtYmVyIG9mIHdpbmRpbmdzIG9uIGVhY2ggYXhpcyAocG9z
aXRpdmUgaW50ZWdlcnMsIGRlZmF1bHQgMiBhbmQgMykKKyAgICAgKiAqIFlvdSBjYW4gYWxzbyBz
ZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9OLk1l
c2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJBQllMT04u
TWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1l
c2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3Jv
cCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lkZXMg
d2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBE
ZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zl
cl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUgbWVzaCBjYW4g
YmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxl
YCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRv
IGNoYW5nZSBvbmNlIGNyZWF0ZWQuCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFt
ZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMg
dXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUg
aG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSB0b3J1cyBrbm90IG1lc2gKKyAgICAg
KiBAc2VlICBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9zZXRfc2hhcGVzI3RvcnVz
LWtub3QKKyAgICAgKi8KKyAgICBNZXNoQnVpbGRlci5DcmVhdGVUb3J1c0tub3QgPSBmdW5jdGlv
biAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDAp
IHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfdG9ydXNLbm90QnVp
bGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJUb3J1c0tub3RCdWlsZGVyIl0uQ3Jl
YXRlVG9ydXNLbm90KG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBsaW5lIHN5c3RlbSBtZXNoLiBBIGxpbmUgc3lzdGVtIGlzIGEgcG9vbCBv
ZiBtYW55IGxpbmVzIGdhdGhlcmVkIGluIGEgc2luZ2xlIG1lc2gKKyAgICAgKiAqIEEgbGluZSBz
eXN0ZW0gbWVzaCBpcyBjb25zaWRlcmVkIGFzIGEgcGFyYW1ldHJpYyBzaGFwZSBzaW5jZSBpdCBo
YXMgbm8gcHJlZGVmaW5lZCBvcmlnaW5hbCBzaGFwZS4gSXRzIHNoYXBlIGlzIGRldGVybWluZWQg
YnkgdGhlIHBhc3NlZCBhcnJheSBvZiBsaW5lcyBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIKKyAgICAg
KiAqIExpa2UgZXZlcnkgb3RoZXIgcGFyYW1ldHJpYyBzaGFwZSwgaXQgaXMgZHluYW1pY2FsbHkg
dXBkYXRhYmxlIGJ5IHBhc3NpbmcgYW4gZXhpc3RpbmcgaW5zdGFuY2Ugb2YgTGluZVN5c3RlbSB0
byB0aGlzIHN0YXRpYyBmdW5jdGlvbgorICAgICAqICogVGhlIHBhcmFtZXRlciBgbGluZXNgIGlz
IGFuIGFycmF5IG9mIGxpbmVzLCBlYWNoIGxpbmUgYmVpbmcgYW4gYXJyYXkgb2Ygc3VjY2Vzc2l2
ZSBWZWN0b3IzCisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnN0YW5jZWAgaXMg
YW4gaW5zdGFuY2Ugb2YgYW4gZXhpc3RpbmcgTGluZVN5c3RlbSBvYmplY3QgdG8gYmUgdXBkYXRl
ZCB3aXRoIHRoZSBwYXNzZWQgYGxpbmVzYCBwYXJhbWV0ZXIKKyAgICAgKiAqIFRoZSBvcHRpb25h
bCBwYXJhbWV0ZXIgYGNvbG9yc2AgaXMgYW4gYXJyYXkgb2YgbGluZSBjb2xvcnMsIGVhY2ggbGlu
ZSBjb2xvcnMgYmVpbmcgYW4gYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBDb2xvcjQsIG9uZSBwZXIgbGlu
ZSBwb2ludAorICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgdXNlVmVydGV4QWxwaGFg
IGlzIHRvIGJlIHNldCB0byBgZmFsc2VgIChkZWZhdWx0IGB0cnVlYCkgd2hlbiB5b3UgZG9uJ3Qg
bmVlZCB0aGUgYWxwaGEgYmxlbmRpbmcgKGZhc3RlcikKKyAgICAgKiAqIFVwZGF0aW5nIGEgc2lt
cGxlIExpbmUgbWVzaCwgeW91IGp1c3QgbmVlZCB0byB1cGRhdGUgZXZlcnkgbGluZSBpbiB0aGUg
YGxpbmVzYCBhcnJheSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b19k
eW5hbWljYWxseV9tb3JwaF9hX21lc2gjbGluZXMtYW5kLWRhc2hlZGxpbmVzCisgICAgICogKiBX
aGVuIHVwZGF0aW5nIGFuIGluc3RhbmNlLCByZW1lbWJlciB0aGF0IG9ubHkgbGluZSBwb2ludCBw
b3NpdGlvbnMgY2FuIGNoYW5nZSwgbm90IHRoZSBudW1iZXIgb2YgcG9pbnRzLCBuZWl0aGVyIHRo
ZSBudW1iZXIgb2YgbGluZXMKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRh
YmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNl
KSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3Jl
YXRlZAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1l
dHJpY19zaGFwZXMjbGluZS1zeXN0ZW0KKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBu
YW1lIG9mIHRoZSBuZXcgbGluZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVz
IHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBsaW5lIHN5c3RlbQorICAgICAqIEBwYXJh
bSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgYSBuZXcg
bGluZSBzeXN0ZW0gbWVzaAorICAgICAqLworICAgIE1lc2hCdWlsZGVyLkNyZWF0ZUxpbmVTeXN0
ZW0gPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgcmV0dXJuIF9C
dWlsZGVyc19saW5lc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTGluZXNC
dWlsZGVyIl0uQ3JlYXRlTGluZVN5c3RlbShuYW1lLCBvcHRpb25zLCBzY2VuZSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbGluZSBtZXNoCisgICAgICogQSBsaW5lIG1lc2gg
aXMgY29uc2lkZXJlZCBhcyBhIHBhcmFtZXRyaWMgc2hhcGUgc2luY2UgaXQgaGFzIG5vIHByZWRl
ZmluZWQgb3JpZ2luYWwgc2hhcGUuIEl0cyBzaGFwZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwYXNz
ZWQgYXJyYXkgb2YgcG9pbnRzIGFzIGFuIGlucHV0IHBhcmFtZXRlcgorICAgICAqICogTGlrZSBl
dmVyeSBvdGhlciBwYXJhbWV0cmljIHNoYXBlLCBpdCBpcyBkeW5hbWljYWxseSB1cGRhdGFibGUg
YnkgcGFzc2luZyBhbiBleGlzdGluZyBpbnN0YW5jZSBvZiBMaW5lTWVzaCB0byB0aGlzIHN0YXRp
YyBmdW5jdGlvbgorICAgICAqICogVGhlIHBhcmFtZXRlciBgcG9pbnRzYCBpcyBhbiBhcnJheSBz
dWNjZXNzaXZlIFZlY3RvcjMKKyAgICAgKiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYGluc3Rh
bmNlYCBpcyBhbiBpbnN0YW5jZSBvZiBhbiBleGlzdGluZyBMaW5lTWVzaCBvYmplY3QgdG8gYmUg
dXBkYXRlZCB3aXRoIHRoZSBwYXNzZWQgYHBvaW50c2AgcGFyYW1ldGVyIDogaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX2R5bmFtaWNhbGx5X21vcnBoX2FfbWVzaCNsaW5l
cy1hbmQtZGFzaGVkbGluZXMKKyAgICAgKiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYGNvbG9y
c2AgaXMgYW4gYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBDb2xvcjQsIG9uZSBwZXIgbGluZSBwb2ludAor
ICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgdXNlVmVydGV4QWxwaGFgIGlzIHRvIGJl
IHNldCB0byBgZmFsc2VgIChkZWZhdWx0IGB0cnVlYCkgd2hlbiB5b3UgZG9uJ3QgbmVlZCBhbHBo
YSBibGVuZGluZyAoZmFzdGVyKQorICAgICAqICogV2hlbiB1cGRhdGluZyBhbiBpbnN0YW5jZSwg
cmVtZW1iZXIgdGhhdCBvbmx5IHBvaW50IHBvc2l0aW9ucyBjYW4gY2hhbmdlLCBub3QgdGhlIG51
bWJlciBvZiBwb2ludHMKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxl
IHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBp
ZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRl
ZAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJp
Y19zaGFwZXMjbGluZXMKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRo
ZSBuZXcgbGluZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRp
b25zIHVzZWQgdG8gY3JlYXRlIHRoZSBsaW5lIHN5c3RlbQorICAgICAqIEBwYXJhbSBzY2VuZSBk
ZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgYSBuZXcgbGluZSBtZXNo
CisgICAgICovCisgICAgTWVzaEJ1aWxkZXIuQ3JlYXRlTGluZXMgPSBmdW5jdGlvbiAobmFtZSwg
b3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUg
PSBudWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfbGluZXNCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIkxpbmVzQnVpbGRlciJdLkNyZWF0ZUxpbmVzKG5hbWUsIG9w
dGlvbnMsIHNjZW5lKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBkYXNoZWQg
bGluZSBtZXNoCisgICAgICogKiBBIGRhc2hlZCBsaW5lIG1lc2ggaXMgY29uc2lkZXJlZCBhcyBh
IHBhcmFtZXRyaWMgc2hhcGUgc2luY2UgaXQgaGFzIG5vIHByZWRlZmluZWQgb3JpZ2luYWwgc2hh
cGUuIEl0cyBzaGFwZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwYXNzZWQgYXJyYXkgb2YgcG9pbnRz
IGFzIGFuIGlucHV0IHBhcmFtZXRlcgorICAgICAqICogTGlrZSBldmVyeSBvdGhlciBwYXJhbWV0
cmljIHNoYXBlLCBpdCBpcyBkeW5hbWljYWxseSB1cGRhdGFibGUgYnkgcGFzc2luZyBhbiBleGlz
dGluZyBpbnN0YW5jZSBvZiBMaW5lTWVzaCB0byB0aGlzIHN0YXRpYyBmdW5jdGlvbgorICAgICAq
ICogVGhlIHBhcmFtZXRlciBgcG9pbnRzYCBpcyBhbiBhcnJheSBzdWNjZXNzaXZlIFZlY3RvcjMK
KyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGRhc2hOYmAgaXMgdGhlIGludGVuZGVkIHRvdGFsIG51
bWJlciBvZiBkYXNoZXMgKHBvc2l0aXZlIGludGVnZXIsIGRlZmF1bHQgMjAwKQorICAgICAqICog
VGhlIHBhcmFtZXRlciBgZGFzaFNpemVgIGlzIHRoZSBzaXplIG9mIHRoZSBkYXNoZXMgcmVsYXRp
dmVseSB0aGUgZGFzaCBudW1iZXIgKHBvc2l0aXZlIGZsb2F0LCBkZWZhdWx0IDMpCisgICAgICog
KiBUaGUgcGFyYW1ldGVyIGBnYXBTaXplYCBpcyB0aGUgc2l6ZSBvZiB0aGUgZ2FwIGJldHdlZW4g
dHdvIHN1Y2Nlc3NpdmUgZGFzaGVzIHJlbGF0aXZlbHkgdGhlIGRhc2ggbnVtYmVyIChwb3NpdGl2
ZSBmbG9hdCwgZGVmYXVsdCAxKQorICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgaW5z
dGFuY2VgIGlzIGFuIGluc3RhbmNlIG9mIGFuIGV4aXN0aW5nIExpbmVNZXNoIG9iamVjdCB0byBi
ZSB1cGRhdGVkIHdpdGggdGhlIHBhc3NlZCBgcG9pbnRzYCBwYXJhbWV0ZXIgOiBodHRwczovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fZHluYW1pY2FsbHlfbW9ycGhfYV9tZXNoI2xp
bmVzLWFuZC1kYXNoZWRsaW5lcworICAgICAqICogV2hlbiB1cGRhdGluZyBhbiBpbnN0YW5jZSwg
cmVtZW1iZXIgdGhhdCBvbmx5IHBvaW50IHBvc2l0aW9ucyBjYW4gY2hhbmdlLCBub3QgdGhlIG51
bWJlciBvZiBwb2ludHMKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxl
IHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBp
ZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRl
ZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAg
KiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBt
ZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAg
KiBAcmV0dXJucyB0aGUgZGFzaGVkIGxpbmUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjZGFzaGVkLWxpbmVzCisgICAg
ICovCisgICAgTWVzaEJ1aWxkZXIuQ3JlYXRlRGFzaGVkTGluZXMgPSBmdW5jdGlvbiAobmFtZSwg
b3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUg
PSBudWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfbGluZXNCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIkxpbmVzQnVpbGRlciJdLkNyZWF0ZURhc2hlZExpbmVzKG5h
bWUsIG9wdGlvbnMsIHNjZW5lKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4g
ZXh0cnVkZWQgc2hhcGUgbWVzaC4gVGhlIGV4dHJ1c2lvbiBpcyBhIHBhcmFtZXRyaWMgc2hhcGUu
IEl0IGhhcyBubyBwcmVkZWZpbmVkIHNoYXBlLiBJdHMgZmluYWwgc2hhcGUgd2lsbCBkZXBlbmQg
b24gdGhlIGlucHV0IHBhcmFtZXRlcnMuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBzaGFwZWAg
aXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgYXJyYXkgZGVw
aWN0cyB0aGUgc2hhcGUgdG8gYmUgZXh0cnVkZWQgaW4gaXRzIGxvY2FsIHNwYWNlIDogdGhlIHNo
YXBlIG11c3QgYmUgZGVzaWduZWQgaW4gdGhlIHhPeSBwbGFuZSBhbmQgd2lsbCBiZSBleHRydWRl
ZCBhbG9uZyB0aGUgWiBheGlzLgorICAgICAqICogVGhlIHBhcmFtZXRlciBgcGF0aGAgaXMgYSBy
ZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgaXMgdGhlIGF4aXMgY3Vy
dmUgdGhlIHNoYXBlIGlzIGV4dHJ1ZGVkIGFsb25nLgorICAgICAqICogVGhlIHBhcmFtZXRlciBg
cm90YXRpb25gIChmbG9hdCwgZGVmYXVsdCAwIHJhZGlhbnMpIGlzIHRoZSBhbmdsZSB2YWx1ZSB0
byByb3RhdGUgdGhlIHNoYXBlIGVhY2ggc3RlcCAoZWFjaCBwYXRoIHBvaW50KSwgZnJvbSB0aGUg
Zm9ybWVyIHN0ZXAgKHNvIHJvdGF0aW9uIGFkZGVkIGVhY2ggc3RlcCkgYWxvbmcgdGhlIGN1cnZl
LgorICAgICAqICogVGhlIHBhcmFtZXRlciBgc2NhbGVgIChmbG9hdCwgZGVmYXVsdCAxKSBpcyB0
aGUgdmFsdWUgdG8gc2NhbGUgdGhlIHNoYXBlLgorICAgICAqICogVGhlIHBhcmFtZXRlciBgY2Fw
YCBzZXRzIHRoZSB3YXkgdGhlIGV4dHJ1ZGVkIHNoYXBlIGlzIGNhcHBlZC4gUG9zc2libGUgdmFs
dWVzIDogQkFCWUxPTi5NZXNoLk5PX0NBUCAoZGVmYXVsdCksIEJBQllMT04uTWVzaC5DQVBfU1RB
UlQsIEJBQllMT04uTWVzaC5DQVBfRU5ELCBCQUJZTE9OLk1lc2guQ0FQX0FMTAorICAgICAqICog
VGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgaW5zdGFuY2VgIGlzIGFuIGluc3RhbmNlIG9mIGFuIGV4
aXN0aW5nIEV4dHJ1ZGVkU2hhcGUgb2JqZWN0IHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGUgcGFzc2Vk
IGBzaGFwZWAsIGBwYXRoYCwgYHNjYWxlYCBvciBgcm90YXRpb25gIHBhcmFtZXRlcnMgOiBodHRw
czovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fZHluYW1pY2FsbHlfbW9ycGhfYV9t
ZXNoI2V4dHJ1ZGVkLXNoYXBlCisgICAgICogKiBSZW1lbWJlciB5b3UgY2FuIG9ubHkgY2hhbmdl
IHRoZSBzaGFwZSBvciBwYXRoIHBvaW50IHBvc2l0aW9ucywgbm90IHRoZWlyIG51bWJlciB3aGVu
IHVwZGF0aW5nIGFuIGV4dHJ1ZGVkIHNoYXBlLgorICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0
aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5G
Uk9OVFNJREUgKGRlZmF1bHQpLCBCQUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNo
LkRPVUJMRVNJREUKKyAgICAgKiAqIElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwg
eW91IGNhbiBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFu
ZCBzdGljayByZXNwZWN0aXZlbHkgb24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRo
IHRoZSBwYXJhbWV0ZXJzIGBmcm9udFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFp
bCBoZXJlIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jh
c2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50YXRpb24KKyAgICAgKiAqIFRoZSBvcHRpb25hbCBwYXJh
bWV0ZXIgYGludmVydFVWYCAoYm9vbGVhbiwgZGVmYXVsdCBmYWxzZSkgc3dhcHMgaW4gdGhlIGdl
b21ldHJ5IHRoZSBVIGFuZCBWIGNvb3JkaW5hdGVzIHRvIGFwcGx5IGEgdGV4dHVyZS4KKyAgICAg
KiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFy
YW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0
cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZC4KKyAgICAgKiBAcGFyYW0gbmFt
ZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVm
aW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBz
Y2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdGhlIGV4dHJ1
ZGVkIHNoYXBlIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL3BhcmFtZXRyaWNfc2hhcGVzCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9wYXJhbWV0cmljX3NoYXBlcyNleHRydWRlZC1zaGFwZXMKKyAgICAgKi8KKyAg
ICBNZXNoQnVpbGRlci5FeHRydWRlU2hhcGUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2Nl
bmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9Cisg
ICAgICAgIHJldHVybiBfQnVpbGRlcnNfc2hhcGVCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xMF9fWyJTaGFwZUJ1aWxkZXIiXS5FeHRydWRlU2hhcGUobmFtZSwgb3B0aW9ucywgc2Nl
bmUpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBjdXN0b20gZXh0cnVkZWQg
c2hhcGUgbWVzaC4KKyAgICAgKiBUaGUgY3VzdG9tIGV4dHJ1c2lvbiBpcyBhIHBhcmFtZXRyaWMg
c2hhcGUuIEl0IGhhcyBubyBwcmVkZWZpbmVkIHNoYXBlLiBJdHMgZmluYWwgc2hhcGUgd2lsbCBk
ZXBlbmQgb24gdGhlIGlucHV0IHBhcmFtZXRlcnMuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBz
aGFwZWAgaXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgYXJy
YXkgZGVwaWN0cyB0aGUgc2hhcGUgdG8gYmUgZXh0cnVkZWQgaW4gaXRzIGxvY2FsIHNwYWNlIDog
dGhlIHNoYXBlIG11c3QgYmUgZGVzaWduZWQgaW4gdGhlIHhPeSBwbGFuZSBhbmQgd2lsbCBiZSBl
eHRydWRlZCBhbG9uZyB0aGUgWiBheGlzLgorICAgICAqICogVGhlIHBhcmFtZXRlciBgcGF0aGAg
aXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgaXMgdGhlIGF4
aXMgY3VydmUgdGhlIHNoYXBlIGlzIGV4dHJ1ZGVkIGFsb25nLgorICAgICAqICogVGhlIHBhcmFt
ZXRlciBgcm90YXRpb25GdW5jdGlvbmAgKEpTIGZ1bmN0aW9uKSBpcyBhIGN1c3RvbSBKYXZhc2Ny
aXB0IGZ1bmN0aW9uIGNhbGxlZCBvbiBlYWNoIHBhdGggcG9pbnQuIFRoaXMgZnVuY3Rpb24gaXMg
cGFzc2VkIHRoZSBwb3NpdGlvbiBpIG9mIHRoZSBwb2ludCBpbiB0aGUgcGF0aCBhbmQgdGhlIGRp
c3RhbmNlIG9mIHRoaXMgcG9pbnQgZnJvbSB0aGUgYmVnaW5pbmcgb2YgdGhlIHBhdGgKKyAgICAg
KiAqIEl0IG11c3QgcmV0dXJucyBhIGZsb2F0IHZhbHVlIHRoYXQgd2lsbCBiZSB0aGUgcm90YXRp
b24gaW4gcmFkaWFucyBhcHBsaWVkIHRvIHRoZSBzaGFwZSBvbiBlYWNoIHBhdGggcG9pbnQuCisg
ICAgICogKiBUaGUgcGFyYW1ldGVyIGBzY2FsZUZ1bmN0aW9uYCAoSlMgZnVuY3Rpb24pIGlzIGEg
Y3VzdG9tIEphdmFzY3JpcHQgZnVuY3Rpb24gY2FsbGVkIG9uIGVhY2ggcGF0aCBwb2ludC4gVGhp
cyBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHBvc2l0aW9uIGkgb2YgdGhlIHBvaW50IGluIHRoZSBw
YXRoIGFuZCB0aGUgZGlzdGFuY2Ugb2YgdGhpcyBwb2ludCBmcm9tIHRoZSBiZWdpbmluZyBvZiB0
aGUgcGF0aAorICAgICAqICogSXQgbXVzdCByZXR1cm5zIGEgZmxvYXQgdmFsdWUgdGhhdCB3aWxs
IGJlIHRoZSBzY2FsZSB2YWx1ZSBhcHBsaWVkIHRvIHRoZSBzaGFwZSBvbiBlYWNoIHBhdGggcG9p
bnQKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHJpYmJvbkNsb3NlUGF0aGAgKGJvb2xlYW4sIGRl
ZmF1bHQgZmFsc2UpIGZvcmNlcyB0aGUgZXh0cnVzaW9uIHVuZGVybHlpbmcgcmliYm9uIHRvIGNs
b3NlIGFsbCB0aGUgcGF0aHMgaW4gaXRzIGBwYXRoQXJyYXlgCisgICAgICogKiBUaGUgcGFyYW1l
dGVyIGByaWJib25DbG9zZUFycmF5YCAoYm9vbGVhbiwgZGVmYXVsdCBmYWxzZSkgZm9yY2VzIHRo
ZSBleHRydXNpb24gdW5kZXJseWluZyByaWJib24gdG8gY2xvc2UgaXRzIGBwYXRoQXJyYXlgCisg
ICAgICogKiBUaGUgcGFyYW1ldGVyIGBjYXBgIHNldHMgdGhlIHdheSB0aGUgZXh0cnVkZWQgc2hh
cGUgaXMgY2FwcGVkLiBQb3NzaWJsZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guTk9fQ0FQIChkZWZh
dWx0KSwgQkFCWUxPTi5NZXNoLkNBUF9TVEFSVCwgQkFCWUxPTi5NZXNoLkNBUF9FTkQsIEJBQllM
T04uTWVzaC5DQVBfQUxMCisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnN0YW5j
ZWAgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gZXhpc3RpbmcgRXh0cnVkZWRTaGFwZSBvYmplY3QgdG8g
YmUgdXBkYXRlZCB3aXRoIHRoZSBwYXNzZWQgYHNoYXBlYCwgYHBhdGhgLCBgc2NhbGVgIG9yIGBy
b3RhdGlvbmAgcGFyYW1ldGVycyA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hv
d190b19keW5hbWljYWxseV9tb3JwaF9hX21lc2gjZXh0cnVkZWQtc2hhcGUKKyAgICAgKiAqIFJl
bWVtYmVyIHlvdSBjYW4gb25seSBjaGFuZ2UgdGhlIHNoYXBlIG9yIHBhdGggcG9pbnQgcG9zaXRp
b25zLCBub3QgdGhlaXIgbnVtYmVyIHdoZW4gdXBkYXRpbmcgYW4gZXh0cnVkZWQgc2hhcGUKKyAg
ICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRo
ZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNo
LkJBQ0tTSURFIG9yIEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3Jl
YXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhl
IHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9u
dCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBg
YmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5j
b20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisg
ICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnZlcnRVVmAgKGJvb2xlYW4sIGRlZmF1
bHQgZmFsc2UpIHN3YXBzIGluIHRoZSBnZW9tZXRyeSB0aGUgVSBhbmQgViBjb29yZGluYXRlcyB0
byBhcHBseSBhIHRleHR1cmUKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRh
YmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNl
KSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3Jl
YXRlZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAg
ICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRo
ZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VzdG9tIGV4dHJ1ZGVkIHNoYXBlIG1lc2gKKyAgICAgKiBAc2Vl
IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BhcmFtZXRyaWNfc2hhcGVzI2N1c3Rv
bS1leHRydWRlZC1zaGFwZXMKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL3BhcmFtZXRyaWNfc2hhcGVzCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9wYXJhbWV0cmljX3NoYXBlcyNleHRydWRlZC1zaGFwZXMKKyAgICAgKi8K
KyAgICBNZXNoQnVpbGRlci5FeHRydWRlU2hhcGVDdXN0b20gPSBmdW5jdGlvbiAobmFtZSwgb3B0
aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBu
dWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfc2hhcGVCdWlsZGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMF9fWyJTaGFwZUJ1aWxkZXIiXS5FeHRydWRlU2hhcGVDdXN0b20obmFt
ZSwgb3B0aW9ucywgc2NlbmUpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBsYXRo
ZSBtZXNoLgorICAgICAqIFRoZSBsYXRoZSBpcyBhIHNoYXBlIHdpdGggYSBzeW1ldHJ5IGF4aXMg
OiBhIDJEIG1vZGVsIHNoYXBlIGlzIHJvdGF0ZWQgYXJvdW5kIHRoaXMgYXhpcyB0byBkZXNpZ24g
dGhlIGxhdGhlCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBzaGFwZWAgaXMgYSByZXF1aXJlZCBh
cnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgYXJyYXkgZGVwaWN0cyB0aGUgc2hhcGUg
dG8gYmUgcm90YXRlZCBpbiBpdHMgbG9jYWwgc3BhY2UgOiB0aGUgc2hhcGUgbXVzdCBiZSBkZXNp
Z25lZCBpbiB0aGUgeE95IHBsYW5lIGFuZCB3aWxsIGJlIHJvdGF0ZWQgYXJvdW5kIHRoZSBZIGF4
aXMuIEl0J3MgdXN1YWxseSBhIDJEIHNoYXBlLCBzbyB0aGUgVmVjdG9yMyB6IGNvb3JkaW5hdGVz
IGFyZSBvZnRlbiBzZXQgdG8gemVybworICAgICAqICogVGhlIHBhcmFtZXRlciBgcmFkaXVzYCAo
cG9zaXRpdmUgZmxvYXQsIGRlZmF1bHQgMSkgaXMgdGhlIHJhZGl1cyB2YWx1ZSBvZiB0aGUgbGF0
aGUKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHRlc3NlbGxhdGlvbmAgKHBvc2l0aXZlIGludGVn
ZXIsIGRlZmF1bHQgNjQpIGlzIHRoZSBzaWRlIG51bWJlciBvZiB0aGUgbGF0aGUKKyAgICAgKiAq
IFRoZSBwYXJhbWV0ZXIgYGNsaXBgIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDApIGlzIHRo
ZSBudW1iZXIgb2Ygc2lkZXMgdG8gbm90IGNyZWF0ZSB3aXRob3V0IGVmZmVjdGluZyB0aGUgZ2Vu
ZXJhbCBzaGFwZSBvZiB0aGUgc2lkZXMKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGFyY2AgKHBv
c2l0aXZlIGZsb2F0LCBkZWZhdWx0IDEpIGlzIHRoZSByYXRpbyBvZiB0aGUgbGF0aGUuIDAuNSBi
dWlsZHMgZm9yIGluc3RhbmNlIGhhbGYgYSBsYXRoZSwgc28gYW4gb3BlbmVkIHNoYXBlCisgICAg
ICogKiBUaGUgcGFyYW1ldGVyIGBjbG9zZWRgIChib29sZWFuLCBkZWZhdWx0IHRydWUpIG9wZW5z
L2Nsb3NlcyB0aGUgbGF0aGUgY2lyY3VtZmVyZW5jZS4gVGhpcyBzaG91bGQgYmUgc2V0IHRvIGZh
bHNlIHdoZW4gdXNlZCB3aXRoIHRoZSBwYXJhbWV0ZXIgImFyYyIKKyAgICAgKiAqIFRoZSBwYXJh
bWV0ZXIgYGNhcGAgc2V0cyB0aGUgd2F5IHRoZSBleHRydWRlZCBzaGFwZSBpcyBjYXBwZWQuIFBv
c3NpYmxlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5OT19DQVAgKGRlZmF1bHQpLCBCQUJZTE9OLk1l
c2guQ0FQX1NUQVJULCBCQUJZTE9OLk1lc2guQ0FQX0VORCwgQkFCWUxPTi5NZXNoLkNBUF9BTEwK
KyAgICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRo
IHRoZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5N
ZXNoLkJBQ0tTSURFIG9yIEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3Ug
Y3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2Yg
dGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBm
cm9udCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFu
ZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25q
cy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9u
CisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnZlcnRVVmAgKGJvb2xlYW4sIGRl
ZmF1bHQgZmFsc2UpIHN3YXBzIGluIHRoZSBnZW9tZXRyeSB0aGUgVSBhbmQgViBjb29yZGluYXRl
cyB0byBhcHBseSBhIHRleHR1cmUKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBk
YXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZh
bHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2Ug
Y3JlYXRlZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gK
KyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRl
IHRoZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUK
KyAgICAgKiBAcmV0dXJucyB0aGUgbGF0aGUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjbGF0aGUKKyAgICAgKi8KKyAg
ICBNZXNoQnVpbGRlci5DcmVhdGVMYXRoZSA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2Vu
ZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAg
ICAgICAgcmV0dXJuIF9CdWlsZGVyc19sYXRoZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzExX19bIkxhdGhlQnVpbGRlciJdLkNyZWF0ZUxhdGhlKG5hbWUsIG9wdGlvbnMsIHNjZW5l
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSB0aWxlZCBwbGFuZSBtZXNoCisg
ICAgICogKiBZb3UgY2FuIHNldCBhIGxpbWl0ZWQgcGF0dGVybiBhcnJhbmdlbWVudCB3aXRoIHRo
ZSB0aWxlcworICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVudGF0
aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBC
QUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNoLkRPVUJMRVNJREUKKyAgICAgKiAq
IElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hhdCBw
YXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZlbHkg
b24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBmcm9u
dFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFpbCBoZXJlIDogaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3Jp
ZW50YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGgg
dGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMg
aW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAorICAg
ICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFy
YW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisg
ICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0
dXJucyB0aGUgcGxhbmUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNv
bS9ob3dfdG8vc2V0X3NoYXBlcyNwbGFuZQorICAgICAqLworICAgIE1lc2hCdWlsZGVyLkNyZWF0
ZVRpbGVkUGxhbmUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAg
aWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHJldHVybiBf
QnVpbGRlcnNfdGlsZWRQbGFuZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19b
IlRpbGVkUGxhbmVCdWlsZGVyIl0uQ3JlYXRlVGlsZWRQbGFuZShuYW1lLCBvcHRpb25zLCBzY2Vu
ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcGxhbmUgbWVzaAorICAgICAq
ICogVGhlIHBhcmFtZXRlciBgc2l6ZWAgc2V0cyB0aGUgc2l6ZSAoZmxvYXQpIG9mIGJvdGggc2lk
ZXMgb2YgdGhlIHBsYW5lIGF0IG9uY2UgKGRlZmF1bHQgMSkKKyAgICAgKiAqIFlvdSBjYW4gc2V0
IHNvbWUgZGlmZmVyZW50IHBsYW5lIGRpbWVuc2lvbnMgYnkgdXNpbmcgdGhlIHBhcmFtZXRlcnMg
YHdpZHRoYCBhbmQgYGhlaWdodGAgKGJvdGggYnkgZGVmYXVsdCBoYXZlIHRoZSBzYW1lIHZhbHVl
IG9mIGBzaXplYCkKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHNvdXJjZVBsYW5lYCBpcyBhIFBs
YW5lIGluc3RhbmNlLiBJdCBidWlsZHMgYSBtZXNoIHBsYW5lIGZyb20gYSBNYXRoIHBsYW5lCisg
ICAgICogKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtZXNoIHNpZGUgb3JpZW50YXRpb24gd2l0aCB0
aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLkZST05UU0lERSAoZGVmYXVsdCksIEJBQllMT04uTWVz
aC5CQUNLU0lERSBvciBCQUJZTE9OLk1lc2guRE9VQkxFU0lERQorICAgICAqICogSWYgeW91IGNy
ZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNob29zZSB3aGF0IHBhcnRzIG9mIHRo
ZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJlc3BlY3RpdmVseSBvbiB0aGUgZnJv
bnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGggdGhlIHBhcmFtZXRlcnMgYGZyb250VVZzYCBhbmQg
YGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBodHRwczovL2RvYy5iYWJ5bG9uanMu
Y29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRhdGlvbgor
ICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0aCB0aGUgYm9vbGVh
biBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBpbnRlcm5hbCBn
ZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkCisgICAgICogQHBhcmFt
IG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25z
IGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFy
YW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSBw
bGFuZSBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9z
ZXRfc2hhcGVzI3BsYW5lCisgICAgICovCisgICAgTWVzaEJ1aWxkZXIuQ3JlYXRlUGxhbmUgPSBm
dW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2
b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfcGxhbmVC
dWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJQbGFuZUJ1aWxkZXIiXS5DcmVh
dGVQbGFuZShuYW1lLCBvcHRpb25zLCBzY2VuZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgZ3JvdW5kIG1lc2gKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXJzIGB3aWR0aGAgYW5k
IGBoZWlnaHRgIChmbG9hdHMsIGRlZmF1bHQgMSkgc2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHNp
emVzIG9mIHRoZSBncm91bmQKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHN1YmRpdmlzaW9uc2Ag
KHBvc2l0aXZlIGludGVnZXIpIHNldHMgdGhlIG51bWJlciBvZiBzdWJkaXZpc2lvbnMgcGVyIHNp
ZGUKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhlIGJv
b2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50ZXJu
YWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAorICAgICAqIEBw
YXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gb3B0
aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisgICAgICog
QHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJucyB0
aGUgZ3JvdW5kIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL3NldF9zaGFwZXMjZ3JvdW5kCisgICAgICovCisgICAgTWVzaEJ1aWxkZXIuQ3JlYXRlR3Jv
dW5kID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2Vu
ZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICByZXR1cm4gX0J1aWxkZXJz
X2dyb3VuZEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkdyb3VuZEJ1aWxk
ZXIiXS5DcmVhdGVHcm91bmQobmFtZSwgb3B0aW9ucywgc2NlbmUpOworICAgIH07CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIHRpbGVkIGdyb3VuZCBtZXNoCisgICAgICogKiBUaGUgcGFyYW1l
dGVycyBgeG1pbmAgYW5kIGB4bWF4YCAoZmxvYXRzLCBkZWZhdWx0IC0xIGFuZCAxKSBzZXQgdGhl
IGdyb3VuZCBtaW5pbXVtIGFuZCBtYXhpbXVtIFggY29vcmRpbmF0ZXMKKyAgICAgKiAqIFRoZSBw
YXJhbWV0ZXJzIGB6bWluYCBhbmQgYHptYXhgIChmbG9hdHMsIGRlZmF1bHQgLTEgYW5kIDEpIHNl
dCB0aGUgZ3JvdW5kIG1pbmltdW0gYW5kIG1heGltdW0gWiBjb29yZGluYXRlcworICAgICAqICog
VGhlIHBhcmFtZXRlciBgc3ViZGl2aXNpb25zYCBpcyBhIGphdmFzY3JpcHQgb2JqZWN0IGB7dzog
cG9zaXRpdmUgaW50ZWdlciwgaDogcG9zaXRpdmUgaW50ZWdlcn1gIChkZWZhdWx0IGB7dzogNiwg
aDogNn1gKS4gYHdgIGFuZCBgaGAgYXJlIHRoZSBudW1iZXJzIG9mIHN1YmRpdmlzaW9ucyBvbiB0
aGUgZ3JvdW5kIHdpZHRoIGFuZCBoZWlnaHQuIEVhY2ggc3ViZGl2aXNpb24gaXMgY2FsbGVkIGEg
dGlsZQorICAgICAqICogVGhlIHBhcmFtZXRlciBgcHJlY2lzaW9uYCBpcyBhIGphdmFzY3JpcHQg
b2JqZWN0IGB7dzogcG9zaXRpdmUgaW50ZWdlciwgaDogcG9zaXRpdmUgaW50ZWdlcn1gIChkZWZh
dWx0IGB7dzogMiwgaDogMn1gKS4gYHdgIGFuZCBgaGAgYXJlIHRoZSBudW1iZXJzIG9mIHN1YmRp
dmlzaW9ucyBvbiB0aGUgZ3JvdW5kIHdpZHRoIGFuZCBoZWlnaHQgb2YgZWFjaCB0aWxlCisgICAg
ICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBh
cmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21l
dHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQuCisgICAgICogQHBhcmFtIG5h
bWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRl
ZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0g
c2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSB0aWxl
ZCBncm91bmQgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3df
dG8vc2V0X3NoYXBlcyN0aWxlZC1ncm91bmQKKyAgICAgKi8KKyAgICBNZXNoQnVpbGRlci5DcmVh
dGVUaWxlZEdyb3VuZCA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkgeworICAgICAg
ICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgcmV0dXJu
IF9CdWlsZGVyc19ncm91bmRCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJH
cm91bmRCdWlsZGVyIl0uQ3JlYXRlVGlsZWRHcm91bmQobmFtZSwgb3B0aW9ucywgc2NlbmUpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGdyb3VuZCBtZXNoIGZyb20gYSBoZWln
aHQgbWFwCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGB1cmxgIHNldHMgdGhlIFVSTCBvZiB0aGUg
aGVpZ2h0IG1hcCBpbWFnZSByZXNvdXJjZS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXJzIGB3aWR0
aGAgYW5kIGBoZWlnaHRgIChwb3NpdGl2ZSBmbG9hdHMsIGRlZmF1bHQgMTApIHNldCB0aGUgZ3Jv
dW5kIHdpZHRoIGFuZCBoZWlnaHQgc2l6ZXMuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBzdWJk
aXZpc2lvbnNgIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDEpIHNldHMgdGhlIG51bWJlciBv
ZiBzdWJkaXZpc2lvbiBwZXIgc2lkZS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYG1pbkhlaWdo
dGAgKGZsb2F0LCBkZWZhdWx0IDApIGlzIHRoZSBtaW5pbXVtIGFsdGl0dWRlIG9uIHRoZSBncm91
bmQuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBtYXhIZWlnaHRgIChmbG9hdCwgZGVmYXVsdCAx
KSBpcyB0aGUgbWF4aW11bSBhbHRpdHVkZSBvbiB0aGUgZ3JvdW5kLgorICAgICAqICogVGhlIHBh
cmFtZXRlciBgY29sb3JGaWx0ZXJgIChvcHRpb25hbCBDb2xvcjMsIGRlZmF1bHQgKDAuMywgMC41
OSwgMC4xMSkgKSBpcyB0aGUgZmlsdGVyIHRvIGFwcGx5IHRvIHRoZSBpbWFnZSBwaXhlbCBjb2xv
cnMgdG8gY29tcHV0ZSB0aGUgaGVpZ2h0LgorICAgICAqICogVGhlIHBhcmFtZXRlciBgb25SZWFk
eWAgaXMgYSBqYXZhc2NyaXB0IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQg
IG9uY2UgdGhlIG1lc2ggaXMganVzdCBidWlsdCAodGhlIGhlaWdodCBtYXAgZG93bmxvYWQgY2Fu
IGxhc3Qgc29tZSB0aW1lKS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGFscGhhRmlsdGVyYCB3
aWxsIGZpbHRlciBhbnkgZGF0YSB3aGVyZSB0aGUgYWxwaGEgY2hhbm5lbCBpcyBiZWxvdyB0aGlz
IHZhbHVlLCBkZWZhdWx0cyAwIChhbGwgZGF0YSB2aXNpYmxlKQorICAgICAqICogVGhlIG1lc2gg
Y2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0
YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3Nl
ZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkLgorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhl
IG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gdXJsIGRlZmluZXMgdGhlIHVybCB0byB0
aGUgaGVpZ2h0IG1hcAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMg
dXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUg
aG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSBncm91bmQgbWVzaAorICAgICAqIEBz
ZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2hlaWdodF9tYXAKKyAgICAg
KiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3NldF9zaGFwZXMjZ3JvdW5k
LWZyb20tYS1oZWlnaHQtbWFwCisgICAgICovCisgICAgTWVzaEJ1aWxkZXIuQ3JlYXRlR3JvdW5k
RnJvbUhlaWdodE1hcCA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIHNjZW5lKSB7Cisg
ICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICBy
ZXR1cm4gX0J1aWxkZXJzX2dyb3VuZEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0
X19bIkdyb3VuZEJ1aWxkZXIiXS5DcmVhdGVHcm91bmRGcm9tSGVpZ2h0TWFwKG5hbWUsIHVybCwg
b3B0aW9ucywgc2NlbmUpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHBvbHln
b24gbWVzaAorICAgICAqIFRoZSBwb2x5Z29uJ3Mgc2hhcGUgd2lsbCBkZXBlbmQgb24gdGhlIGlu
cHV0IHBhcmFtZXRlcnMgYW5kIGlzIGNvbnN0cnVjdGVkIHBhcmFsbGVsIHRvIGEgZ3JvdW5kIG1l
c2gKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHNoYXBlYCBpcyBhIHJlcXVpcmVkIGFycmF5IG9m
IHN1Y2Nlc3NpdmUgVmVjdG9yMyByZXByZXNlbnRpbmcgdGhlIGNvcm5lcnMgb2YgdGhlIHBvbHln
b24gaW4gdGggWG9aIHBsYW5lLCB0aGF0IGlzIHkgPSAwIGZvciBhbGwgdmVjdG9ycworICAgICAq
ICogWW91IGNhbiBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMg
OiBNZXNoLkZST05UU0lERSAoZGVmYXVsdCksIE1lc2guQkFDS1NJREUgb3IgTWVzaC5ET1VCTEVT
SURFCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBi
b29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVy
bmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAgICAgKiAq
IElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hhdCBw
YXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZlbHkg
b24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBmcm9u
dFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkKKyAgICAgKiAqIFJlbWVtYmVyIHlvdSBjYW4g
b25seSBjaGFuZ2UgdGhlIHNoYXBlIHBvc2l0aW9ucywgbm90IHRoZWlyIG51bWJlciB3aGVuIHVw
ZGF0aW5nIGEgcG9seWdvbgorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2Yg
dGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQg
dG8gY3JlYXRlIHRoZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rp
bmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gZWFyY3V0SW5qZWN0aW9uIGNhbiBiZSB1c2VkIHRvIGlu
amVjdCB5b3VyIG93biBlYXJjdXQgcmVmZXJlbmNlCisgICAgICogQHJldHVybnMgdGhlIHBvbHln
b24gbWVzaAorICAgICAqLworICAgIE1lc2hCdWlsZGVyLkNyZWF0ZVBvbHlnb24gPSBmdW5jdGlv
biAobmFtZSwgb3B0aW9ucywgc2NlbmUsIGVhcmN1dEluamVjdGlvbikgeworICAgICAgICBpZiAo
c2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgaWYgKGVhcmN1dElu
amVjdGlvbiA9PT0gdm9pZCAwKSB7IGVhcmN1dEluamVjdGlvbiA9IGVhcmN1dDsgfQorICAgICAg
ICByZXR1cm4gX0J1aWxkZXJzX3BvbHlnb25CdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIlBvbHlnb25CdWlsZGVyIl0uQ3JlYXRlUG9seWdvbihuYW1lLCBvcHRpb25zLCBzY2Vu
ZSwgZWFyY3V0SW5qZWN0aW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4g
ZXh0cnVkZWQgcG9seWdvbiBtZXNoLCB3aXRoIGRlcHRoIGluIHRoZSBZIGRpcmVjdGlvbi4KKyAg
ICAgKiAqIFlvdSBjYW4gc2V0IGRpZmZlcmVudCBjb2xvcnMgYW5kIGRpZmZlcmVudCBpbWFnZXMg
dG8gdGhlIHRvcCwgYm90dG9tIGFuZCBleHRydWRlZCBzaWRlIGJ5IHVzaW5nIHRoZSBwYXJhbWV0
ZXJzIGBmYWNlQ29sb3JzYCAoYW4gYXJyYXkgb2YgMyBDb2xvcjMgZWxlbWVudHMpIGFuZCBgZmFj
ZVVWYCAoYW4gYXJyYXkgb2YgMyBWZWN0b3I0IGVsZW1lbnRzKQorICAgICAqIEBzZWUgaHR0cHM6
Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3JlYXRlYm94X3Blcl9mYWNlX3RleHR1cmVzX2Fu
ZF9jb2xvcnMKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNo
CisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0
ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5l
CisgICAgICogQHBhcmFtIGVhcmN1dEluamVjdGlvbiBjYW4gYmUgdXNlZCB0byBpbmplY3QgeW91
ciBvd24gZWFyY3V0IHJlZmVyZW5jZQorICAgICAqIEByZXR1cm5zIHRoZSBwb2x5Z29uIG1lc2gK
KyAgICAgKi8KKyAgICBNZXNoQnVpbGRlci5FeHRydWRlUG9seWdvbiA9IGZ1bmN0aW9uIChuYW1l
LCBvcHRpb25zLCBzY2VuZSwgZWFyY3V0SW5qZWN0aW9uKSB7CisgICAgICAgIGlmIChzY2VuZSA9
PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICBpZiAoZWFyY3V0SW5qZWN0aW9u
ID09PSB2b2lkIDApIHsgZWFyY3V0SW5qZWN0aW9uID0gZWFyY3V0OyB9CisgICAgICAgIHJldHVy
biBfQnVpbGRlcnNfcG9seWdvbkJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
UG9seWdvbkJ1aWxkZXIiXS5FeHRydWRlUG9seWdvbihuYW1lLCBvcHRpb25zLCBzY2VuZSwgZWFy
Y3V0SW5qZWN0aW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSB0dWJlIG1l
c2guCisgICAgICogVGhlIHR1YmUgaXMgYSBwYXJhbWV0cmljIHNoYXBlLiBJdCBoYXMgbm8gcHJl
ZGVmaW5lZCBzaGFwZS4gSXRzIGZpbmFsIHNoYXBlIHdpbGwgZGVwZW5kIG9uIHRoZSBpbnB1dCBw
YXJhbWV0ZXJzCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBwYXRoYCBpcyBhIHJlcXVpcmVkIGFy
cmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMy4gSXQgaXMgdGhlIGN1cnZlIHVzZWQgYXMgdGhlIGF4
aXMgb2YgdGhlIHR1YmUKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHJhZGl1c2AgKHBvc2l0aXZl
IGZsb2F0LCBkZWZhdWx0IDEpIHNldHMgdGhlIHR1YmUgcmFkaXVzIHNpemUKKyAgICAgKiAqIFRo
ZSBwYXJhbWV0ZXIgYHRlc3NlbGxhdGlvbmAgKHBvc2l0aXZlIGZsb2F0LCBkZWZhdWx0IDY0KSBp
cyB0aGUgbnVtYmVyIG9mIHNpZGVzIG9uIHRoZSB0dWJ1bGFyIHN1cmZhY2UKKyAgICAgKiAqIFRo
ZSBwYXJhbWV0ZXIgYHJhZGl1c0Z1bmN0aW9uYCAoamF2YXNjcmlwdCBmdW5jdGlvbiwgZGVmYXVs
dCBudWxsKSBpcyBhIHZhbmlsbGEgamF2YXNjcmlwdCBmdW5jdGlvbi4gSWYgaXQgaXMgbm90IG51
bGwsIGl0IG92ZXJ3cml0dGVzIHRoZSBwYXJhbWV0ZXIgYHJhZGl1c2AKKyAgICAgKiAqIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGVhY2ggcG9pbnQgb2YgdGhlIHR1YmUgcGF0aCBhbmQgaXMg
cGFzc2VkIHRoZSBpbmRleCBgaWAgb2YgdGhlIGktdGggcG9pbnQgYW5kIHRoZSBkaXN0YW5jZSBv
ZiB0aGlzIHBvaW50IGZyb20gdGhlIGZpcnN0IHBvaW50IG9mIHRoZSBwYXRoLiBJdCBtdXN0IHJl
dHVybiBhIHJhZGl1cyB2YWx1ZSAocG9zaXRpdmUgZmxvYXQpCisgICAgICogKiBUaGUgcGFyYW1l
dGVyIGBhcmNgIChwb3NpdGl2ZSBmbG9hdCwgbWF4aW11bSAxLCBkZWZhdWx0IDEpIGlzIHRoZSBy
YXRpbyB0byBhcHBseSB0byB0aGUgdHViZSBjaXJjdW1mZXJlbmNlIDogMiB4IFBJIHggYXJjCisg
ICAgICogKiBUaGUgcGFyYW1ldGVyIGBjYXBgIHNldHMgdGhlIHdheSB0aGUgZXh0cnVkZWQgc2hh
cGUgaXMgY2FwcGVkLiBQb3NzaWJsZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guTk9fQ0FQIChkZWZh
dWx0KSwgQkFCWUxPTi5NZXNoLkNBUF9TVEFSVCwgQkFCWUxPTi5NZXNoLkNBUF9FTkQsIEJBQllM
T04uTWVzaC5DQVBfQUxMCisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnN0YW5j
ZWAgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gZXhpc3RpbmcgVHViZSBvYmplY3QgdG8gYmUgdXBkYXRl
ZCB3aXRoIHRoZSBwYXNzZWQgYHBhdGhBcnJheWAgcGFyYW1ldGVyIDogaHR0cHM6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX2R5bmFtaWNhbGx5X21vcnBoX2FfbWVzaCN0dWJlCisg
ICAgICogKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtZXNoIHNpZGUgb3JpZW50YXRpb24gd2l0aCB0
aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLkZST05UU0lERSAoZGVmYXVsdCksIEJBQllMT04uTWVz
aC5CQUNLU0lERSBvciBCQUJZTE9OLk1lc2guRE9VQkxFU0lERQorICAgICAqICogSWYgeW91IGNy
ZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNob29zZSB3aGF0IHBhcnRzIG9mIHRo
ZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJlc3BlY3RpdmVseSBvbiB0aGUgZnJv
bnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGggdGhlIHBhcmFtZXRlcnMgYGZyb250VVZzYCBhbmQg
YGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBodHRwczovL2RvYy5iYWJ5bG9uanMu
Y29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRhdGlvbgor
ICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgaW52ZXJ0VVZgIChib29sZWFuLCBkZWZh
dWx0IGZhbHNlKSBzd2FwcyBpbiB0aGUgZ2VvbWV0cnkgdGhlIFUgYW5kIFYgY29vcmRpbmF0ZXMg
dG8gYXBwbHkgYSB0ZXh0dXJlCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0
YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxz
ZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNy
ZWF0ZWQKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisg
ICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0
aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisg
ICAgICogQHJldHVybnMgdGhlIHR1YmUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMKKyAgICAgKiBAc2VlIGh0dHBzOi8v
ZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3NldF9zaGFwZXMjdHViZQorICAgICAqLworICAgIE1l
c2hCdWlsZGVyLkNyZWF0ZVR1YmUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsK
KyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAg
IHJldHVybiBfQnVpbGRlcnNfdHViZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1
X19bIlR1YmVCdWlsZGVyIl0uQ3JlYXRlVHViZShuYW1lLCBvcHRpb25zLCBzY2VuZSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcG9seWhlZHJvbiBtZXNoCisgICAgICogKiBU
aGUgcGFyYW1ldGVyIGB0eXBlYCAocG9zaXRpdmUgaW50ZWdlciwgbWF4IDE0LCBkZWZhdWx0IDAp
IHNldHMgdGhlIHBvbHloZWRyb24gdHlwZSB0byBidWlsZCBhbW9uZyB0aGUgMTUgZW1iYmVkZWQg
dHlwZXMuIFBsZWFzZSByZWZlciB0byB0aGUgdHlwZSBzaGVldCBpbiB0aGUgdHV0b3JpYWwgdG8g
Y2hvb3NlIHRoZSB3YW50ZWQgdHlwZQorICAgICAqICogVGhlIHBhcmFtZXRlciBgc2l6ZWAgKHBv
c2l0aXZlIGZsb2F0LCBkZWZhdWx0IDEpIHNldHMgdGhlIHBvbHlnb24gc2l6ZQorICAgICAqICog
WW91IGNhbiBvdmVyd3JpdGUgdGhlIGBzaXplYCBvbiBlYWNoIGRpbWVuc2lvbiBidSB1c2luZyB0
aGUgcGFyYW1ldGVycyBgc2l6ZVhgLCBgc2l6ZVlgIG9yIGBzaXplWmAgKHBvc2l0aXZlIGZsb2F0
cywgZGVmYXVsdCB0byBgc2l6ZWAgdmFsdWUpCisgICAgICogKiBZb3UgY2FuIGJ1aWxkIG90aGVy
IHBvbHloZWRyb24gdHlwZXMgdGhhbiB0aGUgMTUgZW1iYmVkZWQgb25lcyBieSBzZXR0aW5nIHRo
ZSBwYXJhbWV0ZXIgYGN1c3RvbWAgKGBwb2x5aGVkcm9uT2JqZWN0YCwgZGVmYXVsdCBudWxsKS4g
SWYgeW91IHNldCB0aGUgcGFyYW1ldGVyIGBjdXN0b21gLCB0aGlzIG92ZXJ3cml0dGVzIHRoZSBw
YXJhbWV0ZXIgYHR5cGVgCisgICAgICogKiBBIGBwb2x5aGVkcm9uT2JqZWN0YCBpcyBhIGZvcm1h
dHRlZCBqYXZhc2NyaXB0IG9iamVjdC4gWW91J2xsIGZpbmQgYSBmdWxsIGZpbGUgd2l0aCBwcmUt
c2V0IHBvbHloZWRyYSBoZXJlIDogaHR0cHM6Ly9naXRodWIuY29tL0JhYnlsb25KUy9FeHRlbnNp
b25zL3RyZWUvbWFzdGVyL1BvbHloZWRyb24KKyAgICAgKiAqIFlvdSBjYW4gc2V0IHRoZSBjb2xv
ciBhbmQgdGhlIFVWIG9mIGVhY2ggc2lkZSBvZiB0aGUgcG9seWhlZHJvbiB3aXRoIHRoZSBwYXJh
bWV0ZXJzIGBmYWNlQ29sb3JzYCAoQ29sb3I0LCBkZWZhdWx0IGAoMSwgMSwgMSwgMSlgKSBhbmQg
ZmFjZVVWIChWZWN0b3I0LCBkZWZhdWx0IGAoMCwgMCwgMSwgMSlgKQorICAgICAqICogVG8gdW5k
ZXJzdGFuZCBob3cgdG8gc2V0IGBmYWNlVVZgIG9yIGBmYWNlQ29sb3JzYCwgcGxlYXNlIHJlYWQg
dGhpcyBieSBjb25zaWRlcmluZyB0aGUgcmlnaHQgbnVtYmVyIG9mIGZhY2VzIG9mIHlvdXIgcG9s
eWhlZHJvbiwgaW5zdGVhZCBvZiBvbmx5IDYgZm9yIHRoZSBib3ggOiBodHRwczovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9jcmVhdGVib3hfcGVyX2ZhY2VfdGV4dHVyZXNfYW5kX2NvbG9ycwor
ICAgICAqICogVGhlIHBhcmFtZXRlciBgZmxhdGAgKGJvb2xlYW4sIGRlZmF1bHQgdHJ1ZSkuIElm
IHNldCB0byBmYWxzZSwgaXQgZ2l2ZXMgdGhlIHBvbHloZWRyb24gYSBzaW5nbGUgZ2xvYmFsIGZh
Y2UsIHNvIGxlc3MgdmVydGljZXMgYW5kIHNoYXJlZCBub3JtYWxzLiBJbiB0aGlzIGNhc2UsIGBm
YWNlQ29sb3JzYCBhbmQgYGZhY2VVVmAgYXJlIGlnbm9yZWQKKyAgICAgKiAqIFlvdSBjYW4gYWxz
byBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9O
Lk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJBQllM
T04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVk
IG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8g
Y3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lk
ZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3RvcjQp
LiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNj
b3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUgbWVzaCBj
YW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRh
YmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2Vk
IHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBu
YW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9u
cyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRo
ZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdGhlIHBvbHloZWRyb24gbWVzaAorICAg
ICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcG9seWhlZHJhX3NoYXBl
cworICAgICAqLworICAgIE1lc2hCdWlsZGVyLkNyZWF0ZVBvbHloZWRyb24gPSBmdW5jdGlvbiAo
bmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsg
c2NlbmUgPSBudWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfcG9seWhlZHJvbkJ1aWxk
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIlBvbHloZWRyb25CdWlsZGVyIl0uQ3Jl
YXRlUG9seWhlZHJvbihuYW1lLCBvcHRpb25zLCBzY2VuZSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgZGVjYWwgbWVzaC4KKyAgICAgKiBBIGRlY2FsIGlzIGEgbWVzaCB1c3Vh
bGx5IGFwcGxpZWQgYXMgYSBtb2RlbCBvbnRvIHRoZSBzdXJmYWNlIG9mIGFub3RoZXIgbWVzaC4g
U28gZG9uJ3QgZm9yZ2V0IHRoZSBwYXJhbWV0ZXIgYHNvdXJjZU1lc2hgIGRlcGljdGluZyB0aGUg
ZGVjYWwKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHBvc2l0aW9uYCAoVmVjdG9yMywgZGVmYXVs
dCBgKDAsIDAsIDApYCkgc2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGRlY2FsIGluIFdvcmxkIGNv
b3JkaW5hdGVzCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBub3JtYWxgIChWZWN0b3IzLCBkZWZh
dWx0IGBWZWN0b3IzLlVwYCkgc2V0cyB0aGUgbm9ybWFsIG9mIHRoZSBtZXNoIHdoZXJlIHRoZSBk
ZWNhbCBpcyBhcHBsaWVkIG9udG8gaW4gV29ybGQgY29vcmRpbmF0ZXMKKyAgICAgKiAqIFRoZSBw
YXJhbWV0ZXIgYHNpemVgIChWZWN0b3IzLCBkZWZhdWx0IGAoMSwgMSwgMSlgKSBzZXRzIHRoZSBk
ZWNhbCBzY2FsaW5nCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBhbmdsZWAgKGZsb2F0IGluIHJh
ZGlhbiwgZGVmYXVsdCAwKSBzZXRzIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIGRlY2FsCisgICAg
ICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJh
bSBzb3VyY2VNZXNoIGRlZmluZXMgdGhlIG1lc2ggd2hlcmUgdGhlIGRlY2FsIG11c3QgYmUgYXBw
bGllZAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBj
cmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBz
Y2VuZQorICAgICAqIEByZXR1cm5zIHRoZSBkZWNhbCBtZXNoCisgICAgICogQHNlZSBodHRwczov
L2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9kZWNhbHMKKyAgICAgKi8KKyAgICBNZXNoQnVpbGRl
ci5DcmVhdGVEZWNhbCA9IGZ1bmN0aW9uIChuYW1lLCBzb3VyY2VNZXNoLCBvcHRpb25zKSB7Cisg
ICAgICAgIHJldHVybiBfQnVpbGRlcnNfZGVjYWxCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xOF9fWyJEZWNhbEJ1aWxkZXIiXS5DcmVhdGVEZWNhbChuYW1lLCBzb3VyY2VNZXNoLCBv
cHRpb25zKTsKKyAgICB9OworICAgIHJldHVybiBNZXNoQnVpbGRlcjsKK30oKSk7CisKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL21lc2hMT0RMZXZlbC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL21lc2hMT0RMZXZl
bC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBNZXNoTE9ETGV2ZWwgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiTWVzaExPRExldmVsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNZXNoTE9ETGV2ZWw7
IH0pOworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBhIHNwZWNpZmljIGxldmVsIG9m
IGRldGFpbCBvZiBhIG1lc2gKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9ob3dfdG9fdXNlX2xvZAorICovCit2YXIgTWVzaExPRExldmVsID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgTE9EIGxldmVsCisg
ICAgICogQHBhcmFtIGRpc3RhbmNlIGRlZmluZXMgdGhlIGRpc3RhbmNlIHdoZXJlIHRoaXMgbGV2
ZWwgc2hvdWxkIHN0YXIgYmVpbmcgZGlzcGxheWVkCisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5l
cyB0aGUgbWVzaCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgbGV2ZWwKKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBNZXNoTE9ETGV2ZWwoCisgICAgLyoqIERlZmluZXMgdGhlIGRpc3RhbmNlIHdoZXJlIHRo
aXMgbGV2ZWwgc2hvdWxkIHN0YXJ0IGJlaW5nIGRpc3BsYXllZCAqLworICAgIGRpc3RhbmNlLCAK
KyAgICAvKiogRGVmaW5lcyB0aGUgbWVzaCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgbGV2ZWwgKi8K
KyAgICBtZXNoKSB7CisgICAgICAgIHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZTsKKyAgICAgICAg
dGhpcy5tZXNoID0gbWVzaDsKKyAgICB9CisgICAgcmV0dXJuIE1lc2hMT0RMZXZlbDsKK30oKSk7
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL21lc2hTaW1wbGlmaWNhdGlvbi50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTWVzaGVzL21lc2hTaW1wbGlmaWNhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTaW1wbGlmaWNh
dGlvblNldHRpbmdzLCBTaW1wbGlmaWNhdGlvblF1ZXVlLCBTaW1wbGlmaWNhdGlvblR5cGUgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2ltcGxpZmljYXRpb25TZXR0aW5n
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2ltcGxpZmljYXRpb25TZXR0aW5nczsgfSk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTaW1wbGlmaWNhdGlvblF1ZXVlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBT
aW1wbGlmaWNhdGlvblF1ZXVlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbXBsaWZpY2F0aW9u
VHlwZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2ltcGxpZmljYXRpb25UeXBlOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfc3ViTWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL3N1Yk1lc2gg
Ki8gIi4vTWVzaGVzL3N1Yk1lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVz
aGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01lc2hlcy9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
aHMvbWF0aC5jb25zdGFudHMgKi8gIi4vTWF0aHMvbWF0aC5jb25zdGFudHMudHMiKTsKKworCisK
KworCisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBzcGVjaWZ5IHNpbXBsaWZpY2F0aW9uIG9wdGlv
bnMKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9pbi1icm93c2VyX21l
c2hfc2ltcGxpZmljYXRpb24KKyAqLwordmFyIFNpbXBsaWZpY2F0aW9uU2V0dGluZ3MgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIFNpbXBs
aWZpY2F0aW9uU2V0dGluZ3MKKyAgICAgKiBAcGFyYW0gcXVhbGl0eSBleHBlY3RlZCBxdWFsaXR5
CisgICAgICogQHBhcmFtIGRpc3RhbmNlIGRpc3RhbmNlIHdoZW4gdGhpcyBvcHRpbWl6ZWQgdmVy
c2lvbiBzaG91bGQgYmUgdXNlZAorICAgICAqIEBwYXJhbSBvcHRpbWl6ZU1lc2ggYWxyZWFkeSBv
cHRpbWl6ZWQgbWVzaAorICAgICAqLworICAgIGZ1bmN0aW9uIFNpbXBsaWZpY2F0aW9uU2V0dGlu
Z3MoCisgICAgLyoqIGV4cGVjdGVkIHF1YWxpdHkgKi8KKyAgICBxdWFsaXR5LCAKKyAgICAvKiog
ZGlzdGFuY2Ugd2hlbiB0aGlzIG9wdGltaXplZCB2ZXJzaW9uIHNob3VsZCBiZSB1c2VkICovCisg
ICAgZGlzdGFuY2UsIAorICAgIC8qKiBhbHJlYWR5IG9wdGltaXplZCBtZXNoICAqLworICAgIG9w
dGltaXplTWVzaCkgeworICAgICAgICB0aGlzLnF1YWxpdHkgPSBxdWFsaXR5OworICAgICAgICB0
aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAgIHRoaXMub3B0aW1pemVNZXNoID0gb3B0
aW1pemVNZXNoOworICAgIH0KKyAgICByZXR1cm4gU2ltcGxpZmljYXRpb25TZXR0aW5nczsKK30o
KSk7CisKKy8qKgorICogUXVldWUgdXNlZCB0byBvcmRlciB0aGUgc2ltcGxpZmljYXRpb24gdGFz
a3MKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9pbi1icm93c2VyX21l
c2hfc2ltcGxpZmljYXRpb24KKyAqLwordmFyIFNpbXBsaWZpY2F0aW9uUXVldWUgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBxdWV1
ZQorICAgICAqLworICAgIGZ1bmN0aW9uIFNpbXBsaWZpY2F0aW9uUXVldWUoKSB7CisgICAgICAg
IHRoaXMucnVubmluZyA9IGZhbHNlOworICAgICAgICB0aGlzLl9zaW1wbGlmaWNhdGlvbkFycmF5
ID0gW107CisgICAgfQorICAgIC8qKgorICAgICAqIEFkZHMgYSBuZXcgc2ltcGxpZmljYXRpb24g
dGFzaworICAgICAqIEBwYXJhbSB0YXNrIGRlZmluZXMgYSB0YXNrIHRvIGFkZAorICAgICAqLwor
ICAgIFNpbXBsaWZpY2F0aW9uUXVldWUucHJvdG90eXBlLmFkZFRhc2sgPSBmdW5jdGlvbiAodGFz
aykgeworICAgICAgICB0aGlzLl9zaW1wbGlmaWNhdGlvbkFycmF5LnB1c2godGFzayk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIG5leHQgdGFzaworICAgICAqLworICAgIFNpbXBs
aWZpY2F0aW9uUXVldWUucHJvdG90eXBlLmV4ZWN1dGVOZXh0ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgdGFzayA9IHRoaXMuX3NpbXBsaWZpY2F0aW9uQXJyYXkucG9wKCk7CisgICAgICAg
IGlmICh0YXNrKSB7CisgICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlOworICAgICAgICAg
ICAgdGhpcy5ydW5TaW1wbGlmaWNhdGlvbih0YXNrKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlOworICAgICAgICB9CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBFeGVjdXRlIGEgc2ltcGxpZmljYXRpb24gdGFzaworICAgICAqIEBw
YXJhbSB0YXNrIGRlZmluZXMgdGhlIHRhc2sgdG8gcnVuCisgICAgICovCisgICAgU2ltcGxpZmlj
YXRpb25RdWV1ZS5wcm90b3R5cGUucnVuU2ltcGxpZmljYXRpb24gPSBmdW5jdGlvbiAodGFzaykg
eworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGFzay5wYXJhbGxlbFBy
b2Nlc3NpbmcpIHsKKyAgICAgICAgICAgIC8vcGFyYWxsZWwgc2ltcGxpZmllcgorICAgICAgICAg
ICAgdGFzay5zZXR0aW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChzZXR0aW5nKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHNpbXBsaWZpZXIgPSBfdGhpcy5nZXRTaW1wbGlmaWVyKHRhc2spOworICAgICAg
ICAgICAgICAgIHNpbXBsaWZpZXIuc2ltcGxpZnkoc2V0dGluZywgZnVuY3Rpb24gKG5ld01lc2gp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGFzay5tZXNoLmFkZExPRExldmVsKHNldHRpbmcuZGlz
dGFuY2UsIG5ld01lc2gpOworICAgICAgICAgICAgICAgICAgICBuZXdNZXNoLmlzVmlzaWJsZSA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIC8vY2hlY2sgaWYgaXQgaXMgdGhlIGxhc3QKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcucXVhbGl0eSA9PT0gdGFzay5zZXR0aW5nc1t0
YXNrLnNldHRpbmdzLmxlbmd0aCAtIDFdLnF1YWxpdHkgJiYgdGFzay5zdWNjZXNzQ2FsbGJhY2sp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vYWxsIGRvbmUsIHJ1biB0aGUgc3VjY2VzcyBj
YWxsYmFjay4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suc3VjY2Vzc0NhbGxiYWNrKCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuZXhlY3V0
ZU5leHQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy9zaW5nbGUgc2ltcGxpZmllci4KKyAgICAg
ICAgICAgIHZhciBzaW1wbGlmaWVyID0gdGhpcy5nZXRTaW1wbGlmaWVyKHRhc2spOworICAgICAg
ICAgICAgdmFyIHJ1bkRlY2ltYXRpb24gPSBmdW5jdGlvbiAoc2V0dGluZywgY2FsbGJhY2spIHsK
KyAgICAgICAgICAgICAgICBzaW1wbGlmaWVyLnNpbXBsaWZ5KHNldHRpbmcsIGZ1bmN0aW9uIChu
ZXdNZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIHRhc2subWVzaC5hZGRMT0RMZXZlbChzZXR0
aW5nLmRpc3RhbmNlLCBuZXdNZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3TWVzaC5pc1Zp
c2libGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAvL3J1biB0aGUgbmV4dCBxdWFsaXR5
IGxldmVsCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siQXN5bmNMb29wIl0uUnVuKHRhc2suc2V0dGluZ3MubGVuZ3RoLCBm
dW5jdGlvbiAobG9vcCkgeworICAgICAgICAgICAgICAgIHJ1bkRlY2ltYXRpb24odGFzay5zZXR0
aW5nc1tsb29wLmluZGV4XSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBsb29w
LmV4ZWN1dGVOZXh0KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9LCBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy9leGVjdXRpb24gZW5kZWQsIHJ1biB0aGUgc3Vj
Y2VzcyBjYWxsYmFjay4KKyAgICAgICAgICAgICAgICBpZiAodGFzay5zdWNjZXNzQ2FsbGJhY2sp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGFzay5zdWNjZXNzQ2FsbGJhY2soKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgX3RoaXMuZXhlY3V0ZU5leHQoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgfTsKKyAgICBTaW1wbGlmaWNhdGlvblF1ZXVlLnByb3Rv
dHlwZS5nZXRTaW1wbGlmaWVyID0gZnVuY3Rpb24gKHRhc2spIHsKKyAgICAgICAgc3dpdGNoICh0
YXNrLnNpbXBsaWZpY2F0aW9uVHlwZSkgeworICAgICAgICAgICAgY2FzZSBTaW1wbGlmaWNhdGlv
blR5cGUuUVVBRFJBVElDOgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbmV3IFF1YWRyYXRpY0Vycm9yU2ltcGxpZmljYXRpb24odGFzay5tZXNoKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgcmV0dXJuIFNpbXBsaWZpY2F0aW9uUXVldWU7Cit9KCkpOworCisv
KioKKyAqIFRoZSBpbXBsZW1lbnRlZCB0eXBlcyBvZiBzaW1wbGlmaWNhdGlvbgorICogQXQgdGhl
IG1vbWVudCBvbmx5IFF1YWRyYXRpYyBFcnJvciBEZWNpbWF0aW9uIGlzIGltcGxlbWVudGVkCisg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaW4tYnJvd3Nlcl9tZXNoX3Np
bXBsaWZpY2F0aW9uCisgKi8KK3ZhciBTaW1wbGlmaWNhdGlvblR5cGU7CisoZnVuY3Rpb24gKFNp
bXBsaWZpY2F0aW9uVHlwZSkgeworICAgIC8qKiBRdWFkcmF0aWMgZXJyb3IgZGVjaW1hdGlvbiAq
LworICAgIFNpbXBsaWZpY2F0aW9uVHlwZVtTaW1wbGlmaWNhdGlvblR5cGVbIlFVQURSQVRJQyJd
ID0gMF0gPSAiUVVBRFJBVElDIjsKK30pKFNpbXBsaWZpY2F0aW9uVHlwZSB8fCAoU2ltcGxpZmlj
YXRpb25UeXBlID0ge30pKTsKK3ZhciBEZWNpbWF0aW9uVHJpYW5nbGUgPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRGVjaW1hdGlvblRyaWFuZ2xlKHZlcnRpY2Vz
KSB7CisgICAgICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlczsKKyAgICAgICAgdGhpcy5lcnJv
ciA9IG5ldyBBcnJheSg0KTsKKyAgICAgICAgdGhpcy5kZWxldGVkID0gZmFsc2U7CisgICAgICAg
IHRoaXMuaXNEaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLmRlbGV0ZVBlbmRpbmcgPSBmYWxz
ZTsKKyAgICAgICAgdGhpcy5ib3JkZXJGYWN0b3IgPSAwOworICAgIH0KKyAgICByZXR1cm4gRGVj
aW1hdGlvblRyaWFuZ2xlOworfSgpKTsKK3ZhciBEZWNpbWF0aW9uVmVydGV4ID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIERlY2ltYXRpb25WZXJ0ZXgocG9zaXRp
b24sIGlkKSB7CisgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgdGhp
cy5pZCA9IGlkOworICAgICAgICB0aGlzLmlzQm9yZGVyID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5x
ID0gbmV3IFF1YWRyYXRpY01hdHJpeCgpOworICAgICAgICB0aGlzLnRyaWFuZ2xlQ291bnQgPSAw
OworICAgICAgICB0aGlzLnRyaWFuZ2xlU3RhcnQgPSAwOworICAgICAgICB0aGlzLm9yaWdpbmFs
T2Zmc2V0cyA9IFtdOworICAgIH0KKyAgICBEZWNpbWF0aW9uVmVydGV4LnByb3RvdHlwZS51cGRh
dGVQb3NpdGlvbiA9IGZ1bmN0aW9uIChuZXdQb3NpdGlvbikgeworICAgICAgICB0aGlzLnBvc2l0
aW9uLmNvcHlGcm9tKG5ld1Bvc2l0aW9uKTsKKyAgICB9OworICAgIHJldHVybiBEZWNpbWF0aW9u
VmVydGV4OworfSgpKTsKK3ZhciBRdWFkcmF0aWNNYXRyaXggPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgZnVuY3Rpb24gUXVhZHJhdGljTWF0cml4KGRhdGEpIHsKKyAgICAgICAg
dGhpcy5kYXRhID0gbmV3IEFycmF5KDEwKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDsgKytpKSB7CisgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhW2ldKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5kYXRhW2ldID0gZGF0YVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IDA7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgUXVhZHJhdGljTWF0cml4LnByb3RvdHlwZS5kZXQgPSBm
dW5jdGlvbiAoYTExLCBhMTIsIGExMywgYTIxLCBhMjIsIGEyMywgYTMxLCBhMzIsIGEzMykgewor
ICAgICAgICB2YXIgZGV0ID0gdGhpcy5kYXRhW2ExMV0gKiB0aGlzLmRhdGFbYTIyXSAqIHRoaXMu
ZGF0YVthMzNdICsgdGhpcy5kYXRhW2ExM10gKiB0aGlzLmRhdGFbYTIxXSAqIHRoaXMuZGF0YVth
MzJdICsKKyAgICAgICAgICAgIHRoaXMuZGF0YVthMTJdICogdGhpcy5kYXRhW2EyM10gKiB0aGlz
LmRhdGFbYTMxXSAtIHRoaXMuZGF0YVthMTNdICogdGhpcy5kYXRhW2EyMl0gKiB0aGlzLmRhdGFb
YTMxXSAtCisgICAgICAgICAgICB0aGlzLmRhdGFbYTExXSAqIHRoaXMuZGF0YVthMjNdICogdGhp
cy5kYXRhW2EzMl0gLSB0aGlzLmRhdGFbYTEyXSAqIHRoaXMuZGF0YVthMjFdICogdGhpcy5kYXRh
W2EzM107CisgICAgICAgIHJldHVybiBkZXQ7CisgICAgfTsKKyAgICBRdWFkcmF0aWNNYXRyaXgu
cHJvdG90eXBlLmFkZEluUGxhY2UgPSBmdW5jdGlvbiAobWF0cml4KSB7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgICAgICAgICAgdGhpcy5kYXRhW2ldICs9IG1h
dHJpeC5kYXRhW2ldOworICAgICAgICB9CisgICAgfTsKKyAgICBRdWFkcmF0aWNNYXRyaXgucHJv
dG90eXBlLmFkZEFycmF5SW5QbGFjZSA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgICAgICAgICAgdGhpcy5kYXRhW2ldICs9IGRh
dGFbaV07CisgICAgICAgIH0KKyAgICB9OworICAgIFF1YWRyYXRpY01hdHJpeC5wcm90b3R5cGUu
YWRkID0gZnVuY3Rpb24gKG1hdHJpeCkgeworICAgICAgICB2YXIgbSA9IG5ldyBRdWFkcmF0aWNN
YXRyaXgoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAgICAg
ICAgICBtLmRhdGFbaV0gPSB0aGlzLmRhdGFbaV0gKyBtYXRyaXguZGF0YVtpXTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbTsKKyAgICB9OworICAgIFF1YWRyYXRpY01hdHJpeC5Gcm9tRGF0
YSA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7CisgICAgICAgIHJldHVybiBuZXcgUXVhZHJhdGlj
TWF0cml4KFF1YWRyYXRpY01hdHJpeC5EYXRhRnJvbU51bWJlcnMoYSwgYiwgYywgZCkpOworICAg
IH07CisgICAgLy9yZXR1cm5pbmcgYW4gYXJyYXkgdG8gYXZvaWQgZ2FyYmFnZSBjb2xsZWN0aW9u
CisgICAgUXVhZHJhdGljTWF0cml4LkRhdGFGcm9tTnVtYmVycyA9IGZ1bmN0aW9uIChhLCBiLCBj
LCBkKSB7CisgICAgICAgIHJldHVybiBbYSAqIGEsIGEgKiBiLCBhICogYywgYSAqIGQsIGIgKiBi
LCBiICogYywgYiAqIGQsIGMgKiBjLCBjICogZCwgZCAqIGRdOworICAgIH07CisgICAgcmV0dXJu
IFF1YWRyYXRpY01hdHJpeDsKK30oKSk7Cit2YXIgUmVmZXJlbmNlID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFJlZmVyZW5jZSh2ZXJ0ZXhJZCwgdHJpYW5nbGVJ
ZCkgeworICAgICAgICB0aGlzLnZlcnRleElkID0gdmVydGV4SWQ7CisgICAgICAgIHRoaXMudHJp
YW5nbGVJZCA9IHRyaWFuZ2xlSWQ7CisgICAgfQorICAgIHJldHVybiBSZWZlcmVuY2U7Cit9KCkp
OworLyoqCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUXVhZHJhdGljIEVycm9yIHNpbXBs
aWZpY2F0aW9uIGFsZ29yaXRobS4KKyAqIE9yaWdpbmFsIHBhcGVyIDogaHR0cDovL3d3dzEuY3Mu
Y29sdW1iaWEuZWR1L35jczQxNjIvaHRtbDA1cy9nYXJsYW5kOTcucGRmCisgKiBQb3J0ZWQgbW9z
dGx5IGZyb20gUVNsaW0gYW5kIGh0dHA6Ly92b3hlbHMuYmxvZ3Nwb3QuZGUvMjAxNC8wNS9xdWFk
cmljLW1lc2gtc2ltcGxpZmljYXRpb24td2l0aC1zb3VyY2UuaHRtbCB0byBiYWJ5bG9uIEpTCisg
KiBAYXV0aG9yIFJhYW5hblcKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9pbi1icm93c2VyX21lc2hfc2ltcGxpZmljYXRpb24KKyAqLwordmFyIFF1YWRyYXRpY0Vycm9y
U2ltcGxpZmljYXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rp
b24gUXVhZHJhdGljRXJyb3JTaW1wbGlmaWNhdGlvbihfbWVzaCkgeworICAgICAgICB0aGlzLl9t
ZXNoID0gX21lc2g7CisgICAgICAgIHRoaXMuc3luY0l0ZXJhdGlvbnMgPSA1MDAwOworICAgICAg
ICB0aGlzLmFnZ3Jlc3NpdmVuZXNzID0gNzsKKyAgICAgICAgdGhpcy5kZWNpbWF0aW9uSXRlcmF0
aW9ucyA9IDEwMDsKKyAgICAgICAgdGhpcy5ib3VuZGluZ0JveEVwc2lsb24gPSBfTWF0aHNfbWF0
aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRXBzaWxvbiJdOworICAg
IH0KKyAgICBRdWFkcmF0aWNFcnJvclNpbXBsaWZpY2F0aW9uLnByb3RvdHlwZS5zaW1wbGlmeSA9
IGZ1bmN0aW9uIChzZXR0aW5ncywgc3VjY2Vzc0NhbGxiYWNrKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIHRoaXMuaW5pdERlY2ltYXRlZE1lc2goKTsKKyAgICAgICAgLy9p
dGVyYXRpbmcgdGhyb3VnaCB0aGUgc3VibWVzaGVzIGFycmF5LCBvbmUgYWZ0ZXIgdGhlIG90aGVy
LgorICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBc3lu
Y0xvb3AiXS5SdW4odGhpcy5fbWVzaC5zdWJNZXNoZXMubGVuZ3RoLCBmdW5jdGlvbiAobG9vcCkg
eworICAgICAgICAgICAgX3RoaXMuaW5pdFdpdGhNZXNoKGxvb3AuaW5kZXgsIGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgICAgICBfdGhpcy5ydW5EZWNpbWF0aW9uKHNldHRpbmdzLCBsb29wLmlu
ZGV4LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIGxvb3AuZXhlY3V0ZU5leHQo
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0sIHNldHRpbmdzLm9wdGltaXpl
TWVzaCk7CisgICAgICAgIH0sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhfdGhpcy5fcmVj
b25zdHJ1Y3RlZE1lc2gpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0pOworICAgIH07
CisgICAgUXVhZHJhdGljRXJyb3JTaW1wbGlmaWNhdGlvbi5wcm90b3R5cGUucnVuRGVjaW1hdGlv
biA9IGZ1bmN0aW9uIChzZXR0aW5ncywgc3VibWVzaEluZGV4LCBzdWNjZXNzQ2FsbGJhY2spIHsK
KyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIHRhcmdldENvdW50ID0gfn4o
dGhpcy50cmlhbmdsZXMubGVuZ3RoICogc2V0dGluZ3MucXVhbGl0eSk7CisgICAgICAgIHZhciBk
ZWxldGVkVHJpYW5nbGVzID0gMDsKKyAgICAgICAgdmFyIHRyaWFuZ2xlQ291bnQgPSB0aGlzLnRy
aWFuZ2xlcy5sZW5ndGg7CisgICAgICAgIHZhciBpdGVyYXRpb25GdW5jdGlvbiA9IGZ1bmN0aW9u
IChpdGVyYXRpb24sIGNhbGxiYWNrKSB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmF0aW9uICUgNSA9PT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICBfdGhpcy51cGRhdGVNZXNoKGl0ZXJhdGlvbiA9PT0gMCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3RoaXMudHJp
YW5nbGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLnRyaWFuZ2xl
c1tpXS5pc0RpcnR5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHZhciB0aHJlc2hvbGQgPSAwLjAwMDAwMDAwMSAqIE1hdGgucG93KChpdGVyYXRpb24gKyAzKSwg
X3RoaXMuYWdncmVzc2l2ZW5lc3MpOworICAgICAgICAgICAgICAgIHZhciB0cmlhbmdsZXNJdGVy
YXRvciA9IGZ1bmN0aW9uIChpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB0SWR4ID0gfn4o
KChfdGhpcy50cmlhbmdsZXMubGVuZ3RoIC8gMikgKyBpKSAlIF90aGlzLnRyaWFuZ2xlcy5sZW5n
dGgpOworICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IF90aGlzLnRyaWFuZ2xlc1t0SWR4XTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCF0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHQu
ZXJyb3JbM10gPiB0aHJlc2hvbGQgfHwgdC5kZWxldGVkIHx8IHQuaXNEaXJ0eSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgKytqKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodC5lcnJvcltqXSA8IHRocmVzaG9sZCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBkZWxldGVkMCA9IFtdOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBkZWxldGVkMSA9IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2
MCA9IHQudmVydGljZXNbal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYxID0g
dC52ZXJ0aWNlc1soaiArIDEpICUgM107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHYwLmlzQm9yZGVyIHx8IHYxLmlzQm9yZGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHZhciBuID0gVmVjdG9yMy5aZXJvKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdmFyIHV2ID0gVmVjdG9yMi5aZXJvKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdmFyIGNvbG9yID0gbmV3IENvbG9yNCgwLCAwLCAwLCAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5jYWxjdWxhdGVFcnJvcih2MCwgdjEsIHApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWxUciA9IG5ldyBBcnJheSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5pc0ZsaXBwZWQodjAsIHYxLCBwLCBkZWxl
dGVkMCwgZGVsVHIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoX3RoaXMuaXNGbGlwcGVkKHYxLCB2MCwgcCwgZGVsZXRlZDEsIGRlbFRyKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbGV0ZWQw
LmluZGV4T2YodHJ1ZSkgPCAwIHx8IGRlbGV0ZWQxLmluZGV4T2YodHJ1ZSkgPCAwKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5pcXVlQXJyYXkg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxUci5mb3JFYWNo
KGZ1bmN0aW9uIChkZWxldGVkVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodW5pcXVlQXJyYXkuaW5kZXhPZihkZWxldGVkVCkgPT09IC0xKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkVC5kZWxldGVQZW5kaW5nID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUFycmF5LnB1c2goZGVsZXRl
ZFQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaXF1ZUFy
cmF5Lmxlbmd0aCAlIDIgIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHYwLnEgPSB2MS5xLmFkZCh2MC5xKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2MC51cGRhdGVQb3NpdGlvbihwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgdFN0YXJ0ID0gX3RoaXMucmVmZXJlbmNlcy5sZW5ndGg7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlZFRyaWFuZ2xlcyA9IF90aGlzLnVwZGF0ZVRyaWFuZ2xlcyh2MCwg
djAsIGRlbGV0ZWQwLCBkZWxldGVkVHJpYW5nbGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWxldGVkVHJpYW5nbGVzID0gX3RoaXMudXBkYXRlVHJpYW5nbGVzKHYwLCB2MSwgZGVs
ZXRlZDEsIGRlbGV0ZWRUcmlhbmdsZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB0Q291bnQgPSBfdGhpcy5yZWZlcmVuY2VzLmxlbmd0aCAtIHRTdGFydDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodENvdW50IDw9IHYwLnRyaWFuZ2xlQ291bnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRDb3VudCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCB0Q291bnQ7IGMrKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlZmVyZW5jZXNb
djAudHJpYW5nbGVTdGFydCArIGNdID0gX3RoaXMucmVmZXJlbmNlc1t0U3RhcnQgKyBjXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
djAudHJpYW5nbGVTdGFydCA9IHRTdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjAudHJpYW5nbGVDb3VudCA9IHRDb3VudDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQXN5bmNM
b29wIl0uU3luY0FzeW5jRm9yTG9vcChfdGhpcy50cmlhbmdsZXMubGVuZ3RoLCBfdGhpcy5zeW5j
SXRlcmF0aW9ucywgdHJpYW5nbGVzSXRlcmF0b3IsIGNhbGxiYWNrLCBmdW5jdGlvbiAoKSB7IHJl
dHVybiAodHJpYW5nbGVDb3VudCAtIGRlbGV0ZWRUcmlhbmdsZXMgPD0gdGFyZ2V0Q291bnQpOyB9
KTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9OworICAgICAgICBfTWlzY190b29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBc3luY0xvb3AiXS5SdW4odGhpcy5kZWNpbWF0
aW9uSXRlcmF0aW9ucywgZnVuY3Rpb24gKGxvb3ApIHsKKyAgICAgICAgICAgIGlmICh0cmlhbmds
ZUNvdW50IC0gZGVsZXRlZFRyaWFuZ2xlcyA8PSB0YXJnZXRDb3VudCkgeworICAgICAgICAgICAg
ICAgIGxvb3AuYnJlYWtMb29wKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpdGVyYXRpb25GdW5jdGlvbihsb29wLmluZGV4LCBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgICAgIGxvb3AuZXhlY3V0ZU5leHQoKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy9yZWNvbnN0
cnVjdCB0aGlzIHBhcnQgb2YgdGhlIG1lc2gKKyAgICAgICAgICAgICAgICBfdGhpcy5yZWNvbnN0
cnVjdE1lc2goc3VibWVzaEluZGV4KTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2so
KTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9KTsKKyAgICB9OworICAgIFF1YWRyYXRp
Y0Vycm9yU2ltcGxpZmljYXRpb24ucHJvdG90eXBlLmluaXRXaXRoTWVzaCA9IGZ1bmN0aW9uIChz
dWJtZXNoSW5kZXgsIGNhbGxiYWNrLCBvcHRpbWl6ZU1lc2gpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IFtdOworICAgICAgICB0aGlzLnRyaWFu
Z2xlcyA9IFtdOworICAgICAgICB2YXIgcG9zaXRpb25EYXRhID0gdGhpcy5fbWVzaC5nZXRWZXJ0
aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVy
dGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLl9t
ZXNoLmdldEluZGljZXMoKTsKKyAgICAgICAgdmFyIHN1Ym1lc2ggPSB0aGlzLl9tZXNoLnN1Yk1l
c2hlc1tzdWJtZXNoSW5kZXhdOworICAgICAgICB2YXIgZmluZEluVmVydGljZXMgPSBmdW5jdGlv
biAocG9zaXRpb25Ub1NlYXJjaCkgeworICAgICAgICAgICAgaWYgKG9wdGltaXplTWVzaCkgewor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBfdGhpcy52ZXJ0aWNlcy5sZW5n
dGg7ICsraWkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLnZlcnRpY2VzW2lpXS5w
b3NpdGlvbi5lcXVhbHMocG9zaXRpb25Ub1NlYXJjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBfdGhpcy52ZXJ0aWNlc1tpaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfTsKKyAgICAgICAgdmFyIHZlcnRleFJlZmVyZW5jZXMgPSBbXTsKKyAgICAgICAg
dmFyIHZlcnRleEluaXQgPSBmdW5jdGlvbiAoaSkgeworICAgICAgICAgICAgaWYgKCFwb3NpdGlv
bkRhdGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgb2Zmc2V0ID0gaSArIHN1Ym1lc2gudmVydGljZXNTdGFydDsKKyAgICAgICAgICAg
IHZhciBwb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KHBvc2l0aW9uRGF0YSwgb2Zmc2V0ICogMyk7Cisg
ICAgICAgICAgICB2YXIgdmVydGV4ID0gZmluZEluVmVydGljZXMocG9zaXRpb24pIHx8IG5ldyBE
ZWNpbWF0aW9uVmVydGV4KHBvc2l0aW9uLCBfdGhpcy52ZXJ0aWNlcy5sZW5ndGgpOworICAgICAg
ICAgICAgdmVydGV4Lm9yaWdpbmFsT2Zmc2V0cy5wdXNoKG9mZnNldCk7CisgICAgICAgICAgICBp
ZiAodmVydGV4LmlkID09PSBfdGhpcy52ZXJ0aWNlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICBfdGhpcy52ZXJ0aWNlcy5wdXNoKHZlcnRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2ZXJ0ZXhSZWZlcmVuY2VzLnB1c2godmVydGV4LmlkKTsKKyAgICAgICAgfTsKKyAgICAgICAg
Ly92YXIgdG90YWxWZXJ0aWNlcyA9IG1lc2guZ2V0VG90YWxWZXJ0aWNlcygpOworICAgICAgICB2
YXIgdG90YWxWZXJ0aWNlcyA9IHN1Ym1lc2gudmVydGljZXNDb3VudDsKKyAgICAgICAgX01pc2Nf
dG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQXN5bmNMb29wIl0uU3luY0FzeW5j
Rm9yTG9vcCh0b3RhbFZlcnRpY2VzLCAodGhpcy5zeW5jSXRlcmF0aW9ucyAvIDQpID4+IDAsIHZl
cnRleEluaXQsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBpbmRpY2VzSW5pdCA9IGZ1
bmN0aW9uIChpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpbmRpY2VzKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFy
IG9mZnNldCA9IChzdWJtZXNoLmluZGV4U3RhcnQgLyAzKSArIGk7CisgICAgICAgICAgICAgICAg
dmFyIHBvcyA9IChvZmZzZXQgKiAzKTsKKyAgICAgICAgICAgICAgICB2YXIgaTAgPSBpbmRpY2Vz
W3BvcyArIDBdOworICAgICAgICAgICAgICAgIHZhciBpMSA9IGluZGljZXNbcG9zICsgMV07Cisg
ICAgICAgICAgICAgICAgdmFyIGkyID0gaW5kaWNlc1twb3MgKyAyXTsKKyAgICAgICAgICAgICAg
ICB2YXIgdjAgPSBfdGhpcy52ZXJ0aWNlc1t2ZXJ0ZXhSZWZlcmVuY2VzW2kwIC0gc3VibWVzaC52
ZXJ0aWNlc1N0YXJ0XV07CisgICAgICAgICAgICAgICAgdmFyIHYxID0gX3RoaXMudmVydGljZXNb
dmVydGV4UmVmZXJlbmNlc1tpMSAtIHN1Ym1lc2gudmVydGljZXNTdGFydF1dOworICAgICAgICAg
ICAgICAgIHZhciB2MiA9IF90aGlzLnZlcnRpY2VzW3ZlcnRleFJlZmVyZW5jZXNbaTIgLSBzdWJt
ZXNoLnZlcnRpY2VzU3RhcnRdXTsKKyAgICAgICAgICAgICAgICB2YXIgdHJpYW5nbGUgPSBuZXcg
RGVjaW1hdGlvblRyaWFuZ2xlKFt2MCwgdjEsIHYyXSk7CisgICAgICAgICAgICAgICAgdHJpYW5n
bGUub3JpZ2luYWxPZmZzZXQgPSBwb3M7CisgICAgICAgICAgICAgICAgX3RoaXMudHJpYW5nbGVz
LnB1c2godHJpYW5nbGUpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIF9NaXNjX3Rvb2xz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFzeW5jTG9vcCJdLlN5bmNBc3luY0Zvckxv
b3Aoc3VibWVzaC5pbmRleENvdW50IC8gMywgX3RoaXMuc3luY0l0ZXJhdGlvbnMsIGluZGljZXNJ
bml0LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuaW5pdChjYWxsYmFjayk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBRdWFkcmF0aWNFcnJv
clNpbXBsaWZpY2F0aW9uLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciB0cmlhbmdsZUluaXQxID0gZnVu
Y3Rpb24gKGkpIHsKKyAgICAgICAgICAgIHZhciB0ID0gX3RoaXMudHJpYW5nbGVzW2ldOworICAg
ICAgICAgICAgdC5ub3JtYWwgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdLkNyb3NzKHQudmVydGljZXNbMV0ucG9zaXRpb24uc3VidHJh
Y3QodC52ZXJ0aWNlc1swXS5wb3NpdGlvbiksIHQudmVydGljZXNbMl0ucG9zaXRpb24uc3VidHJh
Y3QodC52ZXJ0aWNlc1swXS5wb3NpdGlvbikpLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCAzOyBqKyspIHsKKyAgICAgICAgICAgICAgICB0LnZlcnRpY2VzW2pd
LnEuYWRkQXJyYXlJblBsYWNlKFF1YWRyYXRpY01hdHJpeC5EYXRhRnJvbU51bWJlcnModC5ub3Jt
YWwueCwgdC5ub3JtYWwueSwgdC5ub3JtYWwueiwgLShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdCh0Lm5vcm1hbCwgdC52ZXJ0aWNl
c1swXS5wb3NpdGlvbikpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIF9N
aXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFzeW5jTG9vcCJdLlN5bmNB
c3luY0Zvckxvb3AodGhpcy50cmlhbmdsZXMubGVuZ3RoLCB0aGlzLnN5bmNJdGVyYXRpb25zLCB0
cmlhbmdsZUluaXQxLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgdHJpYW5nbGVJbml0
MiA9IGZ1bmN0aW9uIChpKSB7CisgICAgICAgICAgICAgICAgdmFyIHQgPSBfdGhpcy50cmlhbmds
ZXNbaV07CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzOyArK2opIHsKKyAg
ICAgICAgICAgICAgICAgICAgdC5lcnJvcltqXSA9IF90aGlzLmNhbGN1bGF0ZUVycm9yKHQudmVy
dGljZXNbal0sIHQudmVydGljZXNbKGogKyAxKSAlIDNdKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdC5lcnJvclszXSA9IE1hdGgubWluKHQuZXJyb3JbMF0sIHQuZXJyb3Jb
MV0sIHQuZXJyb3JbMl0pOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIF9NaXNjX3Rvb2xz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFzeW5jTG9vcCJdLlN5bmNBc3luY0Zvckxv
b3AoX3RoaXMudHJpYW5nbGVzLmxlbmd0aCwgX3RoaXMuc3luY0l0ZXJhdGlvbnMsIHRyaWFuZ2xl
SW5pdDIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgUXVhZHJhdGljRXJyb3JTaW1wbGlm
aWNhdGlvbi5wcm90b3R5cGUucmVjb25zdHJ1Y3RNZXNoID0gZnVuY3Rpb24gKHN1Ym1lc2hJbmRl
eCkgeworICAgICAgICB2YXIgbmV3VHJpYW5nbGVzID0gW107CisgICAgICAgIHZhciBpOworICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy52ZXJ0aWNlcy5sZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgdGhpcy52ZXJ0aWNlc1tpXS50cmlhbmdsZUNvdW50ID0gMDsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgdDsKKyAgICAgICAgdmFyIGo7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlz
LnRyaWFuZ2xlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLnRyaWFuZ2xl
c1tpXS5kZWxldGVkKSB7CisgICAgICAgICAgICAgICAgdCA9IHRoaXMudHJpYW5nbGVzW2ldOwor
ICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCAzOyArK2opIHsKKyAgICAgICAgICAgICAg
ICAgICAgdC52ZXJ0aWNlc1tqXS50cmlhbmdsZUNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbmV3VHJpYW5nbGVzLnB1c2godCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIG5ld1Bvc2l0aW9uRGF0YSA9ICh0aGlzLl9yZWNvbnN0cnVj
dGVkTWVzaC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSB8fCBbXSk7CisgICAgICAg
IHZhciBuZXdOb3JtYWxEYXRhID0gKHRoaXMuX3JlY29uc3RydWN0ZWRNZXNoLmdldFZlcnRpY2Vz
RGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhC
dWZmZXIiXS5Ob3JtYWxLaW5kKSB8fCBbXSk7CisgICAgICAgIHZhciBuZXdVVnNEYXRhID0gKHRo
aXMuX3JlY29uc3RydWN0ZWRNZXNoLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpIHx8IFtdKTsK
KyAgICAgICAgdmFyIG5ld0NvbG9yc0RhdGEgPSAodGhpcy5fcmVjb25zdHJ1Y3RlZE1lc2guZ2V0
VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCkgfHwgW10pOworICAgICAgICB2YXIgbm9ybWFsRGF0
YSA9IHRoaXMuX21lc2guZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQpOworICAgICAgICB2
YXIgdXZzID0gdGhpcy5fbWVzaC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kKTsKKyAgICAgICAg
dmFyIGNvbG9yc0RhdGEgPSB0aGlzLl9tZXNoLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQp
OworICAgICAgICB2YXIgdmVydGV4Q291bnQgPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
dGhpcy52ZXJ0aWNlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHZlcnRleCA9IHRo
aXMudmVydGljZXNbaV07CisgICAgICAgICAgICB2ZXJ0ZXguaWQgPSB2ZXJ0ZXhDb3VudDsKKyAg
ICAgICAgICAgIGlmICh2ZXJ0ZXgudHJpYW5nbGVDb3VudCkgeworICAgICAgICAgICAgICAgIHZl
cnRleC5vcmlnaW5hbE9mZnNldHMuZm9yRWFjaChmdW5jdGlvbiAob3JpZ2luYWxPZmZzZXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFub3JtYWxEYXRhKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgbmV3UG9zaXRpb25EYXRhLnB1c2godmVydGV4LnBvc2l0aW9uLngpOworICAgICAgICAgICAg
ICAgICAgICBuZXdQb3NpdGlvbkRhdGEucHVzaCh2ZXJ0ZXgucG9zaXRpb24ueSk7CisgICAgICAg
ICAgICAgICAgICAgIG5ld1Bvc2l0aW9uRGF0YS5wdXNoKHZlcnRleC5wb3NpdGlvbi56KTsKKyAg
ICAgICAgICAgICAgICAgICAgbmV3Tm9ybWFsRGF0YS5wdXNoKG5vcm1hbERhdGFbb3JpZ2luYWxP
ZmZzZXQgKiAzXSk7CisgICAgICAgICAgICAgICAgICAgIG5ld05vcm1hbERhdGEucHVzaChub3Jt
YWxEYXRhWyhvcmlnaW5hbE9mZnNldCAqIDMpICsgMV0pOworICAgICAgICAgICAgICAgICAgICBu
ZXdOb3JtYWxEYXRhLnB1c2gobm9ybWFsRGF0YVsob3JpZ2luYWxPZmZzZXQgKiAzKSArIDJdKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHV2cyAmJiB1dnMubGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdVVnNEYXRhLnB1c2godXZzWyhvcmlnaW5hbE9mZnNldCAqIDIpXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdVVnNEYXRhLnB1c2godXZzWyhvcmlnaW5hbE9m
ZnNldCAqIDIpICsgMV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjb2xvcnNEYXRhICYmIGNvbG9yc0RhdGEubGVuZ3RoKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdDb2xvcnNEYXRhLnB1c2goY29sb3JzRGF0YVsob3JpZ2luYWxPZmZzZXQg
KiA0KV0pOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sb3JzRGF0YS5wdXNoKGNvbG9y
c0RhdGFbKG9yaWdpbmFsT2Zmc2V0ICogNCkgKyAxXSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdDb2xvcnNEYXRhLnB1c2goY29sb3JzRGF0YVsob3JpZ2luYWxPZmZzZXQgKiA0KSArIDJd
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbG9yc0RhdGEucHVzaChjb2xvcnNEYXRh
WyhvcmlnaW5hbE9mZnNldCAqIDQpICsgM10pOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICsrdmVydGV4Q291bnQ7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHN0YXJ0aW5nSW5kZXggPSB0aGlzLl9y
ZWNvbnN0cnVjdGVkTWVzaC5nZXRUb3RhbEluZGljZXMoKTsKKyAgICAgICAgdmFyIHN0YXJ0aW5n
VmVydGV4ID0gdGhpcy5fcmVjb25zdHJ1Y3RlZE1lc2guZ2V0VG90YWxWZXJ0aWNlcygpOworICAg
ICAgICB2YXIgc3VibWVzaGVzQXJyYXkgPSB0aGlzLl9yZWNvbnN0cnVjdGVkTWVzaC5zdWJNZXNo
ZXM7CisgICAgICAgIHRoaXMuX3JlY29uc3RydWN0ZWRNZXNoLnN1Yk1lc2hlcyA9IFtdOworICAg
ICAgICB2YXIgbmV3SW5kaWNlc0FycmF5ID0gdGhpcy5fcmVjb25zdHJ1Y3RlZE1lc2guZ2V0SW5k
aWNlcygpOyAvL1tdOworICAgICAgICB2YXIgb3JpZ2luYWxJbmRpY2VzID0gdGhpcy5fbWVzaC5n
ZXRJbmRpY2VzKCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuZXdUcmlhbmdsZXMubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIHQgPSBuZXdUcmlhbmdsZXNbaV07IC8vbm93IGdldCB0aGUg
bmV3IHJlZmVyZW5jaW5nIHBvaW50IGZvciBlYWNoIHZlcnRleAorICAgICAgICAgICAgWzAsIDEs
IDJdLmZvckVhY2goZnVuY3Rpb24gKGlkeCkgeworICAgICAgICAgICAgICAgIHZhciBpZCA9IG9y
aWdpbmFsSW5kaWNlc1t0Lm9yaWdpbmFsT2Zmc2V0ICsgaWR4XTsKKyAgICAgICAgICAgICAgICB2
YXIgb2Zmc2V0ID0gdC52ZXJ0aWNlc1tpZHhdLm9yaWdpbmFsT2Zmc2V0cy5pbmRleE9mKGlkKTsK
KyAgICAgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBv
ZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdJbmRpY2Vz
QXJyYXkucHVzaCh0LnZlcnRpY2VzW2lkeF0uaWQgKyBvZmZzZXQgKyBzdGFydGluZ1ZlcnRleCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICAvL292ZXJ3cml0aW5nIHRoZSBv
bGQgdmVydGV4IGJ1ZmZlcnMgYW5kIGluZGljZXMuCisgICAgICAgIHRoaXMuX3JlY29uc3RydWN0
ZWRNZXNoLnNldEluZGljZXMobmV3SW5kaWNlc0FycmF5KTsKKyAgICAgICAgdGhpcy5fcmVjb25z
dHJ1Y3RlZE1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgbmV3UG9zaXRpb25E
YXRhKTsKKyAgICAgICAgdGhpcy5fcmVjb25zdHJ1Y3RlZE1lc2guc2V0VmVydGljZXNEYXRhKF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJd
Lk5vcm1hbEtpbmQsIG5ld05vcm1hbERhdGEpOworICAgICAgICBpZiAobmV3VVZzRGF0YS5sZW5n
dGggPiAwKSB7CisgICAgICAgICAgICB0aGlzLl9yZWNvbnN0cnVjdGVkTWVzaC5zZXRWZXJ0aWNl
c0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4
QnVmZmVyIl0uVVZLaW5kLCBuZXdVVnNEYXRhKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3
Q29sb3JzRGF0YS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB0aGlzLl9yZWNvbnN0cnVjdGVk
TWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kLCBuZXdDb2xvcnNEYXRhKTsKKyAgICAg
ICAgfQorICAgICAgICAvL2NyZWF0ZSBzdWJtZXNoCisgICAgICAgIHZhciBvcmlnaW5hbFN1Ym1l
c2ggPSB0aGlzLl9tZXNoLnN1Yk1lc2hlc1tzdWJtZXNoSW5kZXhdOworICAgICAgICBpZiAoc3Vi
bWVzaEluZGV4ID4gMCkgeworICAgICAgICAgICAgdGhpcy5fcmVjb25zdHJ1Y3RlZE1lc2guc3Vi
TWVzaGVzID0gW107CisgICAgICAgICAgICBzdWJtZXNoZXNBcnJheS5mb3JFYWNoKGZ1bmN0aW9u
IChzdWJtZXNoKSB7CisgICAgICAgICAgICAgICAgX01lc2hlc19zdWJNZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlN1Yk1lc2giXS5BZGRUb01lc2goc3VibWVzaC5tYXRlcmlhbElu
ZGV4LCBzdWJtZXNoLnZlcnRpY2VzU3RhcnQsIHN1Ym1lc2gudmVydGljZXNDb3VudCwgLyogMCwg
bmV3UG9zaXRpb25EYXRhLmxlbmd0aC8zLCAqLyBzdWJtZXNoLmluZGV4U3RhcnQsIHN1Ym1lc2gu
aW5kZXhDb3VudCwgc3VibWVzaC5nZXRNZXNoKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBfTWVzaGVzX3N1Yk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU3ViTWVz
aCJdLkFkZFRvTWVzaChvcmlnaW5hbFN1Ym1lc2gubWF0ZXJpYWxJbmRleCwgc3RhcnRpbmdWZXJ0
ZXgsIHZlcnRleENvdW50LCAvKiAwLCBuZXdQb3NpdGlvbkRhdGEubGVuZ3RoIC8gMywgKi8gc3Rh
cnRpbmdJbmRleCwgbmV3VHJpYW5nbGVzLmxlbmd0aCAqIDMsIHRoaXMuX3JlY29uc3RydWN0ZWRN
ZXNoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgUXVhZHJhdGljRXJyb3JTaW1wbGlmaWNhdGlv
bi5wcm90b3R5cGUuaW5pdERlY2ltYXRlZE1lc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMuX3JlY29uc3RydWN0ZWRNZXNoID0gbmV3IF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJNZXNoIl0odGhpcy5fbWVzaC5uYW1lICsgIkRlY2ltYXRlZCIsIHRoaXMu
X21lc2guZ2V0U2NlbmUoKSk7CisgICAgICAgIHRoaXMuX3JlY29uc3RydWN0ZWRNZXNoLm1hdGVy
aWFsID0gdGhpcy5fbWVzaC5tYXRlcmlhbDsKKyAgICAgICAgdGhpcy5fcmVjb25zdHJ1Y3RlZE1l
c2gucGFyZW50ID0gdGhpcy5fbWVzaC5wYXJlbnQ7CisgICAgICAgIHRoaXMuX3JlY29uc3RydWN0
ZWRNZXNoLmlzVmlzaWJsZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9yZWNvbnN0cnVjdGVkTWVz
aC5yZW5kZXJpbmdHcm91cElkID0gdGhpcy5fbWVzaC5yZW5kZXJpbmdHcm91cElkOworICAgIH07
CisgICAgUXVhZHJhdGljRXJyb3JTaW1wbGlmaWNhdGlvbi5wcm90b3R5cGUuaXNGbGlwcGVkID0g
ZnVuY3Rpb24gKHZlcnRleDEsIHZlcnRleDIsIHBvaW50LCBkZWxldGVkQXJyYXksIGRlbFRyKSB7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmVydGV4MS50cmlhbmdsZUNvdW50OyArK2kp
IHsKKyAgICAgICAgICAgIHZhciB0ID0gdGhpcy50cmlhbmdsZXNbdGhpcy5yZWZlcmVuY2VzW3Zl
cnRleDEudHJpYW5nbGVTdGFydCArIGldLnRyaWFuZ2xlSWRdOworICAgICAgICAgICAgaWYgKHQu
ZGVsZXRlZCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdmFyIHMgPSB0aGlzLnJlZmVyZW5jZXNbdmVydGV4MS50cmlhbmdsZVN0YXJ0ICsg
aV0udmVydGV4SWQ7CisgICAgICAgICAgICB2YXIgdjEgPSB0LnZlcnRpY2VzWyhzICsgMSkgJSAz
XTsKKyAgICAgICAgICAgIHZhciB2MiA9IHQudmVydGljZXNbKHMgKyAyKSAlIDNdOworICAgICAg
ICAgICAgaWYgKCh2MSA9PT0gdmVydGV4MiB8fCB2MiA9PT0gdmVydGV4MikpIHsKKyAgICAgICAg
ICAgICAgICBkZWxldGVkQXJyYXlbaV0gPSB0cnVlOworICAgICAgICAgICAgICAgIGRlbFRyLnB1
c2godCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgZDEgPSB2MS5wb3NpdGlvbi5zdWJ0cmFjdChwb2ludCk7CisgICAgICAgICAgICBk
MSA9IGQxLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgdmFyIGQyID0gdjIucG9zaXRpb24uc3Vi
dHJhY3QocG9pbnQpOworICAgICAgICAgICAgZDIgPSBkMi5ub3JtYWxpemUoKTsKKyAgICAgICAg
ICAgIGlmIChNYXRoLmFicyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVmVjdG9yMyJdLkRvdChkMSwgZDIpKSA+IDAuOTk5KSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbm9ybWFsID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMi
XS5Dcm9zcyhkMSwgZDIpLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgZGVsZXRlZEFycmF5W2ld
ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Eb3Qobm9ybWFsLCB0Lm5vcm1hbCkgPCAwLjIp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICBRdWFkcmF0aWNFcnJvclNpbXBs
aWZpY2F0aW9uLnByb3RvdHlwZS51cGRhdGVUcmlhbmdsZXMgPSBmdW5jdGlvbiAob3JpZ1ZlcnRl
eCwgdmVydGV4LCBkZWxldGVkQXJyYXksIGRlbGV0ZWRUcmlhbmdsZXMpIHsKKyAgICAgICAgdmFy
IG5ld0RlbGV0ZWQgPSBkZWxldGVkVHJpYW5nbGVzOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHZlcnRleC50cmlhbmdsZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHZhciByZWYgPSB0
aGlzLnJlZmVyZW5jZXNbdmVydGV4LnRyaWFuZ2xlU3RhcnQgKyBpXTsKKyAgICAgICAgICAgIHZh
ciB0ID0gdGhpcy50cmlhbmdsZXNbcmVmLnRyaWFuZ2xlSWRdOworICAgICAgICAgICAgaWYgKHQu
ZGVsZXRlZCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGRlbGV0ZWRBcnJheVtpXSAmJiB0LmRlbGV0ZVBlbmRpbmcpIHsKKyAgICAg
ICAgICAgICAgICB0LmRlbGV0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIG5ld0RlbGV0ZWQr
KzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHQudmVydGljZXNbcmVmLnZlcnRleElkXSA9IG9yaWdWZXJ0ZXg7CisgICAgICAgICAgICB0Lmlz
RGlydHkgPSB0cnVlOworICAgICAgICAgICAgdC5lcnJvclswXSA9IHRoaXMuY2FsY3VsYXRlRXJy
b3IodC52ZXJ0aWNlc1swXSwgdC52ZXJ0aWNlc1sxXSkgKyAodC5ib3JkZXJGYWN0b3IgLyAyKTsK
KyAgICAgICAgICAgIHQuZXJyb3JbMV0gPSB0aGlzLmNhbGN1bGF0ZUVycm9yKHQudmVydGljZXNb
MV0sIHQudmVydGljZXNbMl0pICsgKHQuYm9yZGVyRmFjdG9yIC8gMik7CisgICAgICAgICAgICB0
LmVycm9yWzJdID0gdGhpcy5jYWxjdWxhdGVFcnJvcih0LnZlcnRpY2VzWzJdLCB0LnZlcnRpY2Vz
WzBdKSArICh0LmJvcmRlckZhY3RvciAvIDIpOworICAgICAgICAgICAgdC5lcnJvclszXSA9IE1h
dGgubWluKHQuZXJyb3JbMF0sIHQuZXJyb3JbMV0sIHQuZXJyb3JbMl0pOworICAgICAgICAgICAg
dGhpcy5yZWZlcmVuY2VzLnB1c2gocmVmKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3
RGVsZXRlZDsKKyAgICB9OworICAgIFF1YWRyYXRpY0Vycm9yU2ltcGxpZmljYXRpb24ucHJvdG90
eXBlLmlkZW50aWZ5Qm9yZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMudmVydGljZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciB2Q291
bnQgPSBbXTsKKyAgICAgICAgICAgIHZhciB2SWQgPSBbXTsKKyAgICAgICAgICAgIHZhciB2ID0g
dGhpcy52ZXJ0aWNlc1tpXTsKKyAgICAgICAgICAgIHZhciBqOworICAgICAgICAgICAgZm9yIChq
ID0gMDsgaiA8IHYudHJpYW5nbGVDb3VudDsgKytqKSB7CisgICAgICAgICAgICAgICAgdmFyIHRy
aWFuZ2xlID0gdGhpcy50cmlhbmdsZXNbdGhpcy5yZWZlcmVuY2VzW3YudHJpYW5nbGVTdGFydCAr
IGpdLnRyaWFuZ2xlSWRdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCAz
OyBpaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBvZnMgPSAwOworICAgICAgICAgICAg
ICAgICAgICB2YXIgdnYgPSB0cmlhbmdsZS52ZXJ0aWNlc1tpaV07CisgICAgICAgICAgICAgICAg
ICAgIHdoaWxlIChvZnMgPCB2Q291bnQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodklkW29mc10gPT09IHZ2LmlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICArK29mczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
b2ZzID09PSB2Q291bnQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2Q291bnQu
cHVzaCgxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZJZC5wdXNoKHZ2LmlkKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZDb3VudFtvZnNdKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwg
dkNvdW50Lmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKHZDb3VudFtqXSA9PT0g
MSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcnRpY2VzW3ZJZFtqXV0uaXNCb3JkZXIg
PSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc1t2SWRbal1dLmlzQm9yZGVyID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBR
dWFkcmF0aWNFcnJvclNpbXBsaWZpY2F0aW9uLnByb3RvdHlwZS51cGRhdGVNZXNoID0gZnVuY3Rp
b24gKGlkZW50aWZ5Qm9yZGVycykgeworICAgICAgICBpZiAoaWRlbnRpZnlCb3JkZXJzID09PSB2
b2lkIDApIHsgaWRlbnRpZnlCb3JkZXJzID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIGk7CisgICAg
ICAgIGlmICghaWRlbnRpZnlCb3JkZXJzKSB7CisgICAgICAgICAgICB2YXIgbmV3VHJpYW5nbGVz
VmVjdG9yID0gW107CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy50cmlhbmdsZXMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMudHJpYW5nbGVzW2ldLmRl
bGV0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3VHJpYW5nbGVzVmVjdG9yLnB1c2godGhp
cy50cmlhbmdsZXNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMudHJpYW5nbGVzID0gbmV3VHJpYW5nbGVzVmVjdG9yOworICAgICAgICB9Cisg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnZlcnRpY2VzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICB0aGlzLnZlcnRpY2VzW2ldLnRyaWFuZ2xlQ291bnQgPSAwOworICAgICAgICAgICAg
dGhpcy52ZXJ0aWNlc1tpXS50cmlhbmdsZVN0YXJ0ID0gMDsKKyAgICAgICAgfQorICAgICAgICB2
YXIgdDsKKyAgICAgICAgdmFyIGo7CisgICAgICAgIHZhciB2OworICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgdGhpcy50cmlhbmdsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHQgPSB0aGlz
LnRyaWFuZ2xlc1tpXTsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCAzOyArK2opIHsKKyAg
ICAgICAgICAgICAgICB2ID0gdC52ZXJ0aWNlc1tqXTsKKyAgICAgICAgICAgICAgICB2LnRyaWFu
Z2xlQ291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgdFN0YXJ0
ID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMudmVydGljZXMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIHRoaXMudmVydGljZXNbaV0udHJpYW5nbGVTdGFydCA9IHRTdGFydDsK
KyAgICAgICAgICAgIHRTdGFydCArPSB0aGlzLnZlcnRpY2VzW2ldLnRyaWFuZ2xlQ291bnQ7Cisg
ICAgICAgICAgICB0aGlzLnZlcnRpY2VzW2ldLnRyaWFuZ2xlQ291bnQgPSAwOworICAgICAgICB9
CisgICAgICAgIHZhciBuZXdSZWZlcmVuY2VzID0gbmV3IEFycmF5KHRoaXMudHJpYW5nbGVzLmxl
bmd0aCAqIDMpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy50cmlhbmdsZXMubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIHQgPSB0aGlzLnRyaWFuZ2xlc1tpXTsKKyAgICAgICAgICAg
IGZvciAoaiA9IDA7IGogPCAzOyArK2opIHsKKyAgICAgICAgICAgICAgICB2ID0gdC52ZXJ0aWNl
c1tqXTsKKyAgICAgICAgICAgICAgICBuZXdSZWZlcmVuY2VzW3YudHJpYW5nbGVTdGFydCArIHYu
dHJpYW5nbGVDb3VudF0gPSBuZXcgUmVmZXJlbmNlKGosIGkpOworICAgICAgICAgICAgICAgIHYu
dHJpYW5nbGVDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMu
cmVmZXJlbmNlcyA9IG5ld1JlZmVyZW5jZXM7CisgICAgICAgIGlmIChpZGVudGlmeUJvcmRlcnMp
IHsKKyAgICAgICAgICAgIHRoaXMuaWRlbnRpZnlCb3JkZXIoKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgUXVhZHJhdGljRXJyb3JTaW1wbGlmaWNhdGlvbi5wcm90b3R5cGUudmVydGV4RXJyb3Ig
PSBmdW5jdGlvbiAocSwgcG9pbnQpIHsKKyAgICAgICAgdmFyIHggPSBwb2ludC54OworICAgICAg
ICB2YXIgeSA9IHBvaW50Lnk7CisgICAgICAgIHZhciB6ID0gcG9pbnQuejsKKyAgICAgICAgcmV0
dXJuIHEuZGF0YVswXSAqIHggKiB4ICsgMiAqIHEuZGF0YVsxXSAqIHggKiB5ICsgMiAqIHEuZGF0
YVsyXSAqIHggKiB6ICsgMiAqIHEuZGF0YVszXSAqIHggKyBxLmRhdGFbNF0gKiB5ICogeQorICAg
ICAgICAgICAgKyAyICogcS5kYXRhWzVdICogeSAqIHogKyAyICogcS5kYXRhWzZdICogeSArIHEu
ZGF0YVs3XSAqIHogKiB6ICsgMiAqIHEuZGF0YVs4XSAqIHogKyBxLmRhdGFbOV07CisgICAgfTsK
KyAgICBRdWFkcmF0aWNFcnJvclNpbXBsaWZpY2F0aW9uLnByb3RvdHlwZS5jYWxjdWxhdGVFcnJv
ciA9IGZ1bmN0aW9uICh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2ludFJlc3VsdCkgeworICAgICAgICB2
YXIgcSA9IHZlcnRleDEucS5hZGQodmVydGV4Mi5xKTsKKyAgICAgICAgdmFyIGJvcmRlciA9IHZl
cnRleDEuaXNCb3JkZXIgJiYgdmVydGV4Mi5pc0JvcmRlcjsKKyAgICAgICAgdmFyIGVycm9yID0g
MDsKKyAgICAgICAgdmFyIHFEZXQgPSBxLmRldCgwLCAxLCAyLCAxLCA0LCA1LCAyLCA1LCA3KTsK
KyAgICAgICAgaWYgKHFEZXQgIT09IDAgJiYgIWJvcmRlcikgeworICAgICAgICAgICAgaWYgKCFw
b2ludFJlc3VsdCkgeworICAgICAgICAgICAgICAgIHBvaW50UmVzdWx0ID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBwb2ludFJlc3VsdC54ID0gLTEgLyBxRGV0ICogKHEu
ZGV0KDEsIDIsIDMsIDQsIDUsIDYsIDUsIDcsIDgpKTsKKyAgICAgICAgICAgIHBvaW50UmVzdWx0
LnkgPSAxIC8gcURldCAqIChxLmRldCgwLCAyLCAzLCAxLCA1LCA2LCAyLCA3LCA4KSk7CisgICAg
ICAgICAgICBwb2ludFJlc3VsdC56ID0gLTEgLyBxRGV0ICogKHEuZGV0KDAsIDEsIDMsIDEsIDQs
IDYsIDIsIDUsIDgpKTsKKyAgICAgICAgICAgIGVycm9yID0gdGhpcy52ZXJ0ZXhFcnJvcihxLCBw
b2ludFJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIg
cDMgPSAodmVydGV4MS5wb3NpdGlvbi5hZGQodmVydGV4Mi5wb3NpdGlvbikpLmRpdmlkZShuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMi
XSgyLCAyLCAyKSk7CisgICAgICAgICAgICAvL3ZhciBub3JtMyA9ICh2ZXJ0ZXgxLm5vcm1hbC5h
ZGQodmVydGV4Mi5ub3JtYWwpKS5kaXZpZGUobmV3IFZlY3RvcjMoMiwgMiwgMikpLm5vcm1hbGl6
ZSgpOworICAgICAgICAgICAgdmFyIGVycm9yMSA9IHRoaXMudmVydGV4RXJyb3IocSwgdmVydGV4
MS5wb3NpdGlvbik7CisgICAgICAgICAgICB2YXIgZXJyb3IyID0gdGhpcy52ZXJ0ZXhFcnJvcihx
LCB2ZXJ0ZXgyLnBvc2l0aW9uKTsKKyAgICAgICAgICAgIHZhciBlcnJvcjMgPSB0aGlzLnZlcnRl
eEVycm9yKHEsIHAzKTsKKyAgICAgICAgICAgIGVycm9yID0gTWF0aC5taW4oZXJyb3IxLCBlcnJv
cjIsIGVycm9yMyk7CisgICAgICAgICAgICBpZiAoZXJyb3IgPT09IGVycm9yMSkgeworICAgICAg
ICAgICAgICAgIGlmIChwb2ludFJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBwb2ludFJl
c3VsdC5jb3B5RnJvbSh2ZXJ0ZXgxLnBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChlcnJvciA9PT0gZXJyb3IyKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHBvaW50UmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHBvaW50
UmVzdWx0LmNvcHlGcm9tKHZlcnRleDIucG9zaXRpb24pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChwb2lu
dFJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBwb2ludFJlc3VsdC5jb3B5RnJvbShwMyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiBlcnJvcjsKKyAgICB9OworICAgIHJldHVybiBRdWFkcmF0aWNFcnJvclNpbXBsaWZpY2F0
aW9uOworfSgpKTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL21lc2hTaW1wbGlm
aWNhdGlvblNjZW5lQ29tcG9uZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hlcy9tZXNoU2ltcGxp
ZmljYXRpb25TY2VuZUNvbXBvbmVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNp
bXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiU2ltcGxpY2F0aW9uUXVldWVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gU2ltcGxpY2F0aW9uUXVldWVTY2VuZUNvbXBvbmVudDsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaFNpbXBsaWZpY2F0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21lc2hTaW1wbGlmaWNhdGlv
biAqLyAiLi9NZXNoZXMvbWVzaFNpbXBsaWZpY2F0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9zY2VuZUNvbXBvbmVudCAqLyAiLi9zY2VuZUNvbXBv
bmVudC50cyIpOworCisKKworCitPYmplY3QuZGVmaW5lUHJvcGVydHkoX3NjZW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lIl0ucHJvdG90eXBlLCAic2ltcGxpZmljYXRpb25R
dWV1ZSIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9zaW1w
bGlmaWNhdGlvblF1ZXVlKSB7CisgICAgICAgICAgICB0aGlzLl9zaW1wbGlmaWNhdGlvblF1ZXVl
ID0gbmV3IF9tZXNoU2ltcGxpZmljYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
U2ltcGxpZmljYXRpb25RdWV1ZSJdKCk7CisgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gdGhp
cy5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfU0lNUExJRklDQVRJT05RVUVVRSk7
CisgICAgICAgICAgICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICAgICAgICAgIGNvbXBvbmVu
dCA9IG5ldyBTaW1wbGljYXRpb25RdWV1ZVNjZW5lQ29tcG9uZW50KHRoaXMpOworICAgICAgICAg
ICAgICAgIHRoaXMuX2FkZENvbXBvbmVudChjb21wb25lbnQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9zaW1wbGlmaWNhdGlvblF1ZXVlOworICAgIH0s
CisgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgdGhpcy5fc2ltcGxpZmljYXRp
b25RdWV1ZSA9IHZhbHVlOworICAgIH0sCisgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBjb25m
aWd1cmFibGU6IHRydWUKK30pOworX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TWVzaCJdLnByb3RvdHlwZS5zaW1wbGlmeSA9IGZ1bmN0aW9uIChzZXR0aW5ncywgcGFyYWxsZWxQ
cm9jZXNzaW5nLCBzaW1wbGlmaWNhdGlvblR5cGUsIHN1Y2Nlc3NDYWxsYmFjaykgeworICAgIGlm
IChwYXJhbGxlbFByb2Nlc3NpbmcgPT09IHZvaWQgMCkgeyBwYXJhbGxlbFByb2Nlc3NpbmcgPSB0
cnVlOyB9CisgICAgaWYgKHNpbXBsaWZpY2F0aW9uVHlwZSA9PT0gdm9pZCAwKSB7IHNpbXBsaWZp
Y2F0aW9uVHlwZSA9IF9tZXNoU2ltcGxpZmljYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siU2ltcGxpZmljYXRpb25UeXBlIl0uUVVBRFJBVElDOyB9CisgICAgdGhpcy5nZXRTY2Vu
ZSgpLnNpbXBsaWZpY2F0aW9uUXVldWUuYWRkVGFzayh7CisgICAgICAgIHNldHRpbmdzOiBzZXR0
aW5ncywKKyAgICAgICAgcGFyYWxsZWxQcm9jZXNzaW5nOiBwYXJhbGxlbFByb2Nlc3NpbmcsCisg
ICAgICAgIG1lc2g6IHRoaXMsCisgICAgICAgIHNpbXBsaWZpY2F0aW9uVHlwZTogc2ltcGxpZmlj
YXRpb25UeXBlLAorICAgICAgICBzdWNjZXNzQ2FsbGJhY2s6IHN1Y2Nlc3NDYWxsYmFjaworICAg
IH0pOworICAgIHJldHVybiB0aGlzOworfTsKKy8qKgorICogRGVmaW5lcyB0aGUgc2ltcGxpZmlj
YXRpb24gcXVldWUgc2NlbmUgY29tcG9uZW50IHJlc3BvbnNpYmxlIHRvIGhlbHAgc2NoZWR1bGlu
ZyB0aGUgdmFyaW91cyBzaW1wbGlmaWNhdGlvbiB0YXNrCisgKiBjcmVhdGVkIGluIGEgc2NlbmUK
KyAqLwordmFyIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQgPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBv
ZiB0aGUgY29tcG9uZW50IGZvciB0aGUgZ2l2ZW4gc2NlbmUKKyAgICAgKiBAcGFyYW0gc2NlbmUg
RGVmaW5lcyB0aGUgc2NlbmUgdG8gcmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBpbgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQoc2NlbmUpIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjb21wb25lbnQgbmFtZSBoZWxwZnVsbCB0byBpZGVu
dGlmeSB0aGUgY29tcG9uZW50IGluIHRoZSBsaXN0IG9mIHNjZW5lIGNvbXBvbmVudHMuCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLm5hbWUgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX1NJTVBMSUZJ
Q0FUSU9OUVVFVUU7CisgICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTsKKyAgICB9CisgICAgLyoq
CisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25lbnQgaW4gYSBnaXZlbiBzY2VuZQorICAgICAq
LworICAgIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLnJlZ2lzdGVy
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLnNjZW5lLl9iZWZvcmVDYW1lcmFVcGRhdGVT
dGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9CRUZPUkVDQU1FUkFVUERBVEVf
U0lNUExJRklDQVRJT05RVUVVRSwgdGhpcywgdGhpcy5fYmVmb3JlQ2FtZXJhVXBkYXRlKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJlYnVpbGRzIHRoZSBlbGVtZW50cyByZWxhdGVkIHRvIHRo
aXMgY29tcG9uZW50IGluIGNhc2Ugb2YKKyAgICAgKiBjb250ZXh0IGxvc3QgZm9yIGluc3RhbmNl
LgorICAgICAqLworICAgIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQucHJvdG90eXBl
LnJlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gZm9yIHRo
aXMgY29tcG9uZW50CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgY29tcG9u
ZW50IGFuZCB0aGUgYXNzb2NpYXRlZCByZXNzb3VyY2VzCisgICAgICovCisgICAgU2ltcGxpY2F0
aW9uUXVldWVTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgLy8gTm90aGluZyB0byBkbyBmb3IgdGhpcyBjb21wb25lbnQKKyAgICB9OworICAg
IFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLl9iZWZvcmVDYW1lcmFV
cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnNjZW5lLl9zaW1wbGlmaWNh
dGlvblF1ZXVlICYmICF0aGlzLnNjZW5lLl9zaW1wbGlmaWNhdGlvblF1ZXVlLnJ1bm5pbmcpIHsK
KyAgICAgICAgICAgIHRoaXMuc2NlbmUuX3NpbXBsaWZpY2F0aW9uUXVldWUuZXhlY3V0ZU5leHQo
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVD
b21wb25lbnQ7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy9wb2x5
Z29uTWVzaC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9NZXNoZXMvcG9seWdvbk1lc2gudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQb2x5Z29uLCBQb2x5Z29uTWVzaEJ1
aWxkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWdvbiIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gUG9seWdvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2x5Z29u
TWVzaEJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvbHlnb25NZXNoQnVpbGRlcjsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9n
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0
aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWVzaGVzL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVz
aC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NZXNoZXMvbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvZW5n
aW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5wYXRoICovICIuL01hdGhzL21hdGgucGF0aC50
cyIpOworCisKKworCisKKworCisKKy8qKgorICogVmVjdG9yMiB3dGggaW5kZXggcHJvcGVydHkK
KyAqLwordmFyIEluZGV4ZWRWZWN0b3IyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBl
cikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJd
KEluZGV4ZWRWZWN0b3IyLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIEluZGV4ZWRWZWN0b3IyKG9y
aWdpbmFsLCAKKyAgICAvKiogSW5kZXggb2YgdGhlIHZlY3RvcjIgKi8KKyAgICBpbmRleCkgewor
ICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBvcmlnaW5hbC54LCBvcmlnaW5h
bC55KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5pbmRleCA9IGluZGV4OworICAgICAgICByZXR1
cm4gX3RoaXM7CisgICAgfQorICAgIHJldHVybiBJbmRleGVkVmVjdG9yMjsKK30oX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjIiXSkpOworLyoq
CisgKiBEZWZpbmVzIHBvaW50cyB0byBjcmVhdGUgYSBwb2x5Z29uCisgKi8KK3ZhciBQb2x5Z29u
UG9pbnRzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFBvbHln
b25Qb2ludHMoKSB7CisgICAgICAgIHRoaXMuZWxlbWVudHMgPSBuZXcgQXJyYXkoKTsKKyAgICB9
CisgICAgUG9seWdvblBvaW50cy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG9yaWdpbmFsUG9p
bnRzKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciByZXN1bHQgPSBu
ZXcgQXJyYXkoKTsKKyAgICAgICAgb3JpZ2luYWxQb2ludHMuZm9yRWFjaChmdW5jdGlvbiAocG9p
bnQpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwIHx8ICFwb2ludC5lcXVh
bHNXaXRoRXBzaWxvbihyZXN1bHRbMF0pKSB7CisgICAgICAgICAgICAgICAgdmFyIG5ld1BvaW50
ID0gbmV3IEluZGV4ZWRWZWN0b3IyKHBvaW50LCBfdGhpcy5lbGVtZW50cy5sZW5ndGgpOworICAg
ICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld1BvaW50KTsKKyAgICAgICAgICAgICAgICBfdGhp
cy5lbGVtZW50cy5wdXNoKG5ld1BvaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICBQb2x5Z29uUG9pbnRzLnByb3RvdHlw
ZS5jb21wdXRlQm91bmRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbG1pbiA9IG5ldyBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMiJd
KHRoaXMuZWxlbWVudHNbMF0ueCwgdGhpcy5lbGVtZW50c1swXS55KTsKKyAgICAgICAgdmFyIGxt
YXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlY3RvcjIiXSh0aGlzLmVsZW1lbnRzWzBdLngsIHRoaXMuZWxlbWVudHNbMF0ueSk7CisgICAg
ICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAocG9pbnQpIHsKKyAgICAgICAgICAg
IC8vIHgKKyAgICAgICAgICAgIGlmIChwb2ludC54IDwgbG1pbi54KSB7CisgICAgICAgICAgICAg
ICAgbG1pbi54ID0gcG9pbnQueDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KHBvaW50LnggPiBsbWF4LngpIHsKKyAgICAgICAgICAgICAgICBsbWF4LnggPSBwb2ludC54Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8geQorICAgICAgICAgICAgaWYgKHBvaW50Lnkg
PCBsbWluLnkpIHsKKyAgICAgICAgICAgICAgICBsbWluLnkgPSBwb2ludC55OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocG9pbnQueSA+IGxtYXgueSkgeworICAgICAgICAg
ICAgICAgIGxtYXgueSA9IHBvaW50Lnk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgbWluOiBsbWluLAorICAgICAgICAgICAgbWF4OiBs
bWF4LAorICAgICAgICAgICAgd2lkdGg6IGxtYXgueCAtIGxtaW4ueCwKKyAgICAgICAgICAgIGhl
aWdodDogbG1heC55IC0gbG1pbi55CisgICAgICAgIH07CisgICAgfTsKKyAgICByZXR1cm4gUG9s
eWdvblBvaW50czsKK30oKSk7CisvKioKKyAqIFBvbHlnb24KKyAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjbm9uLXJlZ3VsYXItcG9seWdv
bgorICovCit2YXIgUG9seWdvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBm
dW5jdGlvbiBQb2x5Z29uKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcmVj
dGFuZ2xlCisgICAgICogQHBhcmFtIHhtaW4gYm90dG9tIFggY29vcmQKKyAgICAgKiBAcGFyYW0g
eW1pbiBib3R0b20gWSBjb29yZAorICAgICAqIEBwYXJhbSB4bWF4IHRvcCBYIGNvb3JkCisgICAg
ICogQHBhcmFtIHltYXggdG9wIFkgY29vcmQKKyAgICAgKiBAcmV0dXJucyBwb2ludHMgdGhhdCBt
YWtlIHRoZSByZXN1bHRpbmcgcmVjdGF0aW9uCisgICAgICovCisgICAgUG9seWdvbi5SZWN0YW5n
bGUgPSBmdW5jdGlvbiAoeG1pbiwgeW1pbiwgeG1heCwgeW1heCkgeworICAgICAgICByZXR1cm4g
WworICAgICAgICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZWN0b3IyIl0oeG1pbiwgeW1pbiksCisgICAgICAgICAgICBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjIiXSh4bWF4
LCB5bWluKSwKKyAgICAgICAgICAgIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVjdG9yMiJdKHhtYXgsIHltYXgpLAorICAgICAgICAgICAgbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3Iy
Il0oeG1pbiwgeW1heCkKKyAgICAgICAgXTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0
ZXMgYSBjaXJjbGUKKyAgICAgKiBAcGFyYW0gcmFkaXVzIHJhZGl1cyBvZiBjaXJjbGUKKyAgICAg
KiBAcGFyYW0gY3ggc2NhbGUgaW4geAorICAgICAqIEBwYXJhbSBjeSBzY2FsZSBpbiB5CisgICAg
ICogQHBhcmFtIG51bWJlck9mU2lkZXMgbnVtYmVyIG9mIHNpZGVzIHRoYXQgbWFrZSB1cCB0aGUg
Y2lyY2xlCisgICAgICogQHJldHVybnMgcG9pbnRzIHRoYXQgbWFrZSB0aGUgcmVzdWx0aW5nIGNp
cmNsZQorICAgICAqLworICAgIFBvbHlnb24uQ2lyY2xlID0gZnVuY3Rpb24gKHJhZGl1cywgY3gs
IGN5LCBudW1iZXJPZlNpZGVzKSB7CisgICAgICAgIGlmIChjeCA9PT0gdm9pZCAwKSB7IGN4ID0g
MDsgfQorICAgICAgICBpZiAoY3kgPT09IHZvaWQgMCkgeyBjeSA9IDA7IH0KKyAgICAgICAgaWYg
KG51bWJlck9mU2lkZXMgPT09IHZvaWQgMCkgeyBudW1iZXJPZlNpZGVzID0gMzI7IH0KKyAgICAg
ICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheSgpOworICAgICAgICB2YXIgYW5nbGUgPSAwOworICAg
ICAgICB2YXIgaW5jcmVtZW50ID0gKE1hdGguUEkgKiAyKSAvIG51bWJlck9mU2lkZXM7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZTaWRlczsgaSsrKSB7CisgICAgICAgICAg
ICByZXN1bHQucHVzaChuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlY3RvcjIiXShjeCArIE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cywgY3kgKyBN
YXRoLnNpbihhbmdsZSkgKiByYWRpdXMpKTsKKyAgICAgICAgICAgIGFuZ2xlIC09IGluY3JlbWVu
dDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIHBvbHlnb24gZnJvbSBpbnB1dCBzdHJpbmcKKyAgICAgKiBAcGFyYW0g
aW5wdXQgSW5wdXQgcG9seWdvbiBkYXRhCisgICAgICogQHJldHVybnMgdGhlIHBhcnNlZCBwb2lu
dHMKKyAgICAgKi8KKyAgICBQb2x5Z29uLlBhcnNlID0gZnVuY3Rpb24gKGlucHV0KSB7CisgICAg
ICAgIHZhciBmbG9hdHMgPSBpbnB1dC5zcGxpdCgvW14tK2VFXC5cZF0rLykubWFwKHBhcnNlRmxv
YXQpLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7IHJldHVybiAoIWlzTmFOKHZhbCkpOyB9KTsKKyAg
ICAgICAgdmFyIGksIHJlc3VsdCA9IFtdOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGZsb2F0
cy5sZW5ndGggJiAweDdGRkZGRkZFKTsgaSArPSAyKSB7CisgICAgICAgICAgICByZXN1bHQucHVz
aChuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZl
Y3RvcjIiXShmbG9hdHNbaV0sIGZsb2F0c1tpICsgMV0pKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogU3RhcnRzIGJ1aWxkaW5nIGEg
cG9seWdvbiBmcm9tIHggYW5kIHkgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0geCB4IGNvb3Jk
aW5hdGUKKyAgICAgKiBAcGFyYW0geSB5IGNvb3JkaW5hdGUKKyAgICAgKiBAcmV0dXJucyB0aGUg
c3RhcnRlZCBwYXRoMgorICAgICAqLworICAgIFBvbHlnb24uU3RhcnRpbmdBdCA9IGZ1bmN0aW9u
ICh4LCB5KSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF9wYXRoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIlBhdGgyIl0uU3RhcnRpbmdBdCh4LCB5KTsKKyAgICB9OworICAgIHJl
dHVybiBQb2x5Z29uOworfSgpKTsKKworLyoqCisgKiBCdWlsZHMgYSBwb2x5Z29uCisgKiBAc2Vl
IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BvbHlnb25tZXNoYnVpbGRlcgorICov
Cit2YXIgUG9seWdvbk1lc2hCdWlsZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBQb2x5Z29uTWVzaEJ1aWxkZXIKKyAgICAgKiBAcGFy
YW0gbmFtZSBuYW1lIG9mIHRoZSBidWlsZGVyCisgICAgICogQHBhcmFtIGNvbnRvdXJzIFBhdGgg
b2YgdGhlIHBvbHlnb24KKyAgICAgKiBAcGFyYW0gc2NlbmUgc2NlbmUgdG8gYWRkIHRvIHdoZW4g
Y3JlYXRpbmcgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gZWFyY3V0SW5qZWN0aW9uIGNhbiBiZSB1
c2VkIHRvIGluamVjdCB5b3VyIG93biBlYXJjdXQgcmVmZXJlbmNlCisgICAgICovCisgICAgZnVu
Y3Rpb24gUG9seWdvbk1lc2hCdWlsZGVyKG5hbWUsIGNvbnRvdXJzLCBzY2VuZSwgZWFyY3V0SW5q
ZWN0aW9uKSB7CisgICAgICAgIGlmIChlYXJjdXRJbmplY3Rpb24gPT09IHZvaWQgMCkgeyBlYXJj
dXRJbmplY3Rpb24gPSBlYXJjdXQ7IH0KKyAgICAgICAgdGhpcy5fcG9pbnRzID0gbmV3IFBvbHln
b25Qb2ludHMoKTsKKyAgICAgICAgdGhpcy5fb3V0bGluZXBvaW50cyA9IG5ldyBQb2x5Z29uUG9p
bnRzKCk7CisgICAgICAgIHRoaXMuX2hvbGVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMu
X2Vwb2ludHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fZWhvbGVzID0gbmV3IEFycmF5
KCk7CisgICAgICAgIHRoaXMuYmpzRWFyY3V0ID0gZWFyY3V0SW5qZWN0aW9uOworICAgICAgICB0
aGlzLl9uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8fCBfRW5naW5l
c19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRW5naW5lIl0uTGFzdENyZWF0
ZWRTY2VuZTsKKyAgICAgICAgdmFyIHBvaW50czsKKyAgICAgICAgaWYgKGNvbnRvdXJzIGluc3Rh
bmNlb2YgX01hdGhzX21hdGhfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJQYXRo
MiJdKSB7CisgICAgICAgICAgICBwb2ludHMgPSBjb250b3Vycy5nZXRQb2ludHMoKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBvaW50cyA9IGNvbnRvdXJzOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2FkZFRvZXBvaW50KHBvaW50cyk7CisgICAgICAgIHRoaXMu
X3BvaW50cy5hZGQocG9pbnRzKTsKKyAgICAgICAgdGhpcy5fb3V0bGluZXBvaW50cy5hZGQocG9p
bnRzKTsKKyAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJqc0VhcmN1dCA9PT0gJ3VuZGVmaW5lZCcp
IHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJMb2dnZXIiXS5XYXJuKCJFYXJjdXQgd2FzIG5vdCBmb3VuZCwgdGhlIHBvbHlnb24gd2lsbCBu
b3QgYmUgYnVpbHQuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgUG9seWdvbk1lc2hCdWlsZGVy
LnByb3RvdHlwZS5fYWRkVG9lcG9pbnQgPSBmdW5jdGlvbiAocG9pbnRzKSB7CisgICAgICAgIGZv
ciAodmFyIF9pID0gMCwgcG9pbnRzXzEgPSBwb2ludHM7IF9pIDwgcG9pbnRzXzEubGVuZ3RoOyBf
aSsrKSB7CisgICAgICAgICAgICB2YXIgcCA9IHBvaW50c18xW19pXTsKKyAgICAgICAgICAgIHRo
aXMuX2Vwb2ludHMucHVzaChwLngsIHAueSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFkZHMgYSB3aG9sZSB3aXRoaW4gdGhlIHBvbHlnb24KKyAgICAgKiBAcGFyYW0gaG9s
ZSBBcnJheSBvZiBwb2ludHMgZGVmaW5pbmcgdGhlIGhvbGUKKyAgICAgKiBAcmV0dXJucyB0aGlz
CisgICAgICovCisgICAgUG9seWdvbk1lc2hCdWlsZGVyLnByb3RvdHlwZS5hZGRIb2xlID0gZnVu
Y3Rpb24gKGhvbGUpIHsKKyAgICAgICAgdGhpcy5fcG9pbnRzLmFkZChob2xlKTsKKyAgICAgICAg
dmFyIGhvbGVwb2ludHMgPSBuZXcgUG9seWdvblBvaW50cygpOworICAgICAgICBob2xlcG9pbnRz
LmFkZChob2xlKTsKKyAgICAgICAgdGhpcy5faG9sZXMucHVzaChob2xlcG9pbnRzKTsKKyAgICAg
ICAgdGhpcy5fZWhvbGVzLnB1c2godGhpcy5fZXBvaW50cy5sZW5ndGggLyAyKTsKKyAgICAgICAg
dGhpcy5fYWRkVG9lcG9pbnQoaG9sZSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyB0aGUgcG9seWdvbgorICAgICAqIEBwYXJhbSB1cGRhdGFi
bGUgSWYgdGhlIG1lc2ggc2hvdWxkIGJlIHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBkZXB0aCBU
aGUgZGVwdGggb2YgdGhlIG1lc2ggY3JlYXRlZAorICAgICAqIEByZXR1cm5zIHRoZSBjcmVhdGVk
IG1lc2gKKyAgICAgKi8KKyAgICBQb2x5Z29uTWVzaEJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkID0g
ZnVuY3Rpb24gKHVwZGF0YWJsZSwgZGVwdGgpIHsKKyAgICAgICAgaWYgKHVwZGF0YWJsZSA9PT0g
dm9pZCAwKSB7IHVwZGF0YWJsZSA9IGZhbHNlOyB9CisgICAgICAgIGlmIChkZXB0aCA9PT0gdm9p
ZCAwKSB7IGRlcHRoID0gMDsgfQorICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IF9NZXNoZXNfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0odGhpcy5fbmFtZSwgdGhpcy5f
c2NlbmUpOworICAgICAgICB2YXIgdmVydGV4RGF0YSA9IHRoaXMuYnVpbGRWZXJ0ZXhEYXRhKGRl
cHRoKTsKKyAgICAgICAgcmVzdWx0LnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHZl
cnRleERhdGEucG9zaXRpb25zLCB1cGRhdGFibGUpOworICAgICAgICByZXN1bHQuc2V0VmVydGlj
ZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eEJ1ZmZlciJdLk5vcm1hbEtpbmQsIHZlcnRleERhdGEubm9ybWFscywgdXBkYXRhYmxlKTsKKyAg
ICAgICAgcmVzdWx0LnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQsIHZlcnRleERhdGEudXZzLCB1
cGRhdGFibGUpOworICAgICAgICByZXN1bHQuc2V0SW5kaWNlcyh2ZXJ0ZXhEYXRhLmluZGljZXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRl
cyB0aGUgcG9seWdvbgorICAgICAqIEBwYXJhbSBkZXB0aCBUaGUgZGVwdGggb2YgdGhlIG1lc2gg
Y3JlYXRlZAorICAgICAqIEByZXR1cm5zIHRoZSBjcmVhdGVkIFZlcnRleERhdGEKKyAgICAgKi8K
KyAgICBQb2x5Z29uTWVzaEJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkVmVydGV4RGF0YSA9IGZ1bmN0
aW9uIChkZXB0aCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoZGVw
dGggPT09IHZvaWQgMCkgeyBkZXB0aCA9IDA7IH0KKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBf
TWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0
ZXhEYXRhIl0oKTsKKyAgICAgICAgdmFyIG5vcm1hbHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAg
dmFyIHBvc2l0aW9ucyA9IG5ldyBBcnJheSgpOworICAgICAgICB2YXIgdXZzID0gbmV3IEFycmF5
KCk7CisgICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9wb2ludHMuY29tcHV0ZUJvdW5kcygpOwor
ICAgICAgICB0aGlzLl9wb2ludHMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAocCkgeworICAg
ICAgICAgICAgbm9ybWFscy5wdXNoKDAsIDEuMCwgMCk7CisgICAgICAgICAgICBwb3NpdGlvbnMu
cHVzaChwLngsIDAsIHAueSk7CisgICAgICAgICAgICB1dnMucHVzaCgocC54IC0gYm91bmRzLm1p
bi54KSAvIGJvdW5kcy53aWR0aCwgKHAueSAtIGJvdW5kcy5taW4ueSkgLyBib3VuZHMuaGVpZ2h0
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHZhciBpbmRpY2VzID0gbmV3IEFycmF5KCk7CisgICAg
ICAgIHZhciByZXMgPSB0aGlzLmJqc0VhcmN1dCh0aGlzLl9lcG9pbnRzLCB0aGlzLl9laG9sZXMs
IDIpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgaW5kaWNlcy5wdXNoKHJlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRl
cHRoID4gMCkgeworICAgICAgICAgICAgdmFyIHBvc2l0aW9uc2NvdW50ID0gKHBvc2l0aW9ucy5s
ZW5ndGggLyAzKTsgLy9nZXQgdGhlIGN1cnJlbnQgcG9pbnRjb3VudAorICAgICAgICAgICAgdGhp
cy5fcG9pbnRzLmVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKHApIHsKKyAgICAgICAgICAgICAg
ICBub3JtYWxzLnB1c2goMCwgLTEuMCwgMCk7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1
c2gocC54LCAtZGVwdGgsIHAueSk7CisgICAgICAgICAgICAgICAgdXZzLnB1c2goMSAtIChwLngg
LSBib3VuZHMubWluLngpIC8gYm91bmRzLndpZHRoLCAxIC0gKHAueSAtIGJvdW5kcy5taW4ueSkg
LyBib3VuZHMuaGVpZ2h0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdmFyIHRvdGFs
Q291bnQgPSBpbmRpY2VzLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dG90YWxDb3VudDsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgdmFyIGkwID0gaW5kaWNlc1tp
ICsgMF07CisgICAgICAgICAgICAgICAgdmFyIGkxID0gaW5kaWNlc1tpICsgMV07CisgICAgICAg
ICAgICAgICAgdmFyIGkyID0gaW5kaWNlc1tpICsgMl07CisgICAgICAgICAgICAgICAgaW5kaWNl
cy5wdXNoKGkyICsgcG9zaXRpb25zY291bnQpOworICAgICAgICAgICAgICAgIGluZGljZXMucHVz
aChpMSArIHBvc2l0aW9uc2NvdW50KTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goaTAg
KyBwb3NpdGlvbnNjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL0FkZCB0aGUg
c2lkZXMKKyAgICAgICAgICAgIHRoaXMuYWRkU2lkZShwb3NpdGlvbnMsIG5vcm1hbHMsIHV2cywg
aW5kaWNlcywgYm91bmRzLCB0aGlzLl9vdXRsaW5lcG9pbnRzLCBkZXB0aCwgZmFsc2UpOworICAg
ICAgICAgICAgdGhpcy5faG9sZXMuZm9yRWFjaChmdW5jdGlvbiAoaG9sZSkgeworICAgICAgICAg
ICAgICAgIF90aGlzLmFkZFNpZGUocG9zaXRpb25zLCBub3JtYWxzLCB1dnMsIGluZGljZXMsIGJv
dW5kcywgaG9sZSwgZGVwdGgsIHRydWUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmVzdWx0LmluZGljZXMgPSBpbmRpY2VzOworICAgICAgICByZXN1bHQucG9zaXRpb25z
ID0gcG9zaXRpb25zOworICAgICAgICByZXN1bHQubm9ybWFscyA9IG5vcm1hbHM7CisgICAgICAg
IHJlc3VsdC51dnMgPSB1dnM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBZGRzIGEgc2lkZSB0byB0aGUgcG9seWdvbgorICAgICAqIEBwYXJhbSBwb3Np
dGlvbnMgcG9pbnRzIHRoYXQgbWFrZSB0aGUgcG9seWdvbgorICAgICAqIEBwYXJhbSBub3JtYWxz
IG5vcm1hbHMgb2YgdGhlIHBvbHlnb24KKyAgICAgKiBAcGFyYW0gdXZzIHV2cyBvZiB0aGUgcG9s
eWdvbgorICAgICAqIEBwYXJhbSBpbmRpY2VzIGluZGljZXMgb2YgdGhlIHBvbHlnb24KKyAgICAg
KiBAcGFyYW0gYm91bmRzIGJvdW5kcyBvZiB0aGUgcG9seWdvbgorICAgICAqIEBwYXJhbSBwb2lu
dHMgcG9pbnRzIG9mIHRoZSBwb2x5Z29uCisgICAgICogQHBhcmFtIGRlcHRoIGRlcHRoIG9mIHRo
ZSBwb2x5Z29uCisgICAgICogQHBhcmFtIGZsaXAgZmxpcCBvZiB0aGUgcG9seWdvbgorICAgICAq
LworICAgIFBvbHlnb25NZXNoQnVpbGRlci5wcm90b3R5cGUuYWRkU2lkZSA9IGZ1bmN0aW9uIChw
b3NpdGlvbnMsIG5vcm1hbHMsIHV2cywgaW5kaWNlcywgYm91bmRzLCBwb2ludHMsIGRlcHRoLCBm
bGlwKSB7CisgICAgICAgIHZhciBTdGFydEluZGV4ID0gcG9zaXRpb25zLmxlbmd0aCAvIDM7Cisg
ICAgICAgIHZhciB1bGVuZ3RoID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2lu
dHMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBwID0gcG9pbnRzLmVs
ZW1lbnRzW2ldOworICAgICAgICAgICAgdmFyIHAxOworICAgICAgICAgICAgaWYgKChpICsgMSkg
PiBwb2ludHMuZWxlbWVudHMubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgIHAxID0gcG9p
bnRzLmVsZW1lbnRzWzBdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgcDEgPSBwb2ludHMuZWxlbWVudHNbaSArIDFdOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcG9zaXRpb25zLnB1c2gocC54LCAwLCBwLnkpOworICAgICAgICAgICAgcG9z
aXRpb25zLnB1c2gocC54LCAtZGVwdGgsIHAueSk7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVz
aChwMS54LCAwLCBwMS55KTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHAxLngsIC1kZXB0
aCwgcDEueSk7CisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXShwLngsIDAsIHAueSk7CisgICAg
ICAgICAgICB2YXIgdjIgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlZlY3RvcjMiXShwMS54LCAwLCBwMS55KTsKKyAgICAgICAgICAgIHZhciB2
MyA9IHYyLnN1YnRyYWN0KHYxKTsKKyAgICAgICAgICAgIHZhciB2NCA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKDAsIDEsIDAp
OworICAgICAgICAgICAgdmFyIHZuID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5Dcm9zcyh2MywgdjQpOworICAgICAgICAgICAgdm4g
PSB2bi5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgIHV2cy5wdXNoKHVsZW5ndGggLyBib3VuZHMu
d2lkdGgsIDApOworICAgICAgICAgICAgdXZzLnB1c2godWxlbmd0aCAvIGJvdW5kcy53aWR0aCwg
MSk7CisgICAgICAgICAgICB1bGVuZ3RoICs9IHYzLmxlbmd0aCgpOworICAgICAgICAgICAgdXZz
LnB1c2goKHVsZW5ndGggLyBib3VuZHMud2lkdGgpLCAwKTsKKyAgICAgICAgICAgIHV2cy5wdXNo
KCh1bGVuZ3RoIC8gYm91bmRzLndpZHRoKSwgMSk7CisgICAgICAgICAgICBpZiAoIWZsaXApIHsK
KyAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goLXZuLngsIC12bi55LCAtdm4ueik7CisgICAg
ICAgICAgICAgICAgbm9ybWFscy5wdXNoKC12bi54LCAtdm4ueSwgLXZuLnopOworICAgICAgICAg
ICAgICAgIG5vcm1hbHMucHVzaCgtdm4ueCwgLXZuLnksIC12bi56KTsKKyAgICAgICAgICAgICAg
ICBub3JtYWxzLnB1c2goLXZuLngsIC12bi55LCAtdm4ueik7CisgICAgICAgICAgICAgICAgaW5k
aWNlcy5wdXNoKFN0YXJ0SW5kZXgpOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChTdGFy
dEluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKFN0YXJ0SW5kZXggKyAy
KTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goU3RhcnRJbmRleCArIDEpOworICAgICAg
ICAgICAgICAgIGluZGljZXMucHVzaChTdGFydEluZGV4ICsgMyk7CisgICAgICAgICAgICAgICAg
aW5kaWNlcy5wdXNoKFN0YXJ0SW5kZXggKyAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaCh2bi54LCB2bi55LCB2bi56KTsK
KyAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2godm4ueCwgdm4ueSwgdm4ueik7CisgICAgICAg
ICAgICAgICAgbm9ybWFscy5wdXNoKHZuLngsIHZuLnksIHZuLnopOworICAgICAgICAgICAgICAg
IG5vcm1hbHMucHVzaCh2bi54LCB2bi55LCB2bi56KTsKKyAgICAgICAgICAgICAgICBpbmRpY2Vz
LnB1c2goU3RhcnRJbmRleCk7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKFN0YXJ0SW5k
ZXggKyAyKTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goU3RhcnRJbmRleCArIDEpOwor
ICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChTdGFydEluZGV4ICsgMSk7CisgICAgICAgICAg
ICAgICAgaW5kaWNlcy5wdXNoKFN0YXJ0SW5kZXggKyAyKTsKKyAgICAgICAgICAgICAgICBpbmRp
Y2VzLnB1c2goU3RhcnRJbmRleCArIDMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3Rh
cnRJbmRleCArPSA0OworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gUG9seWdvbk1lc2hC
dWlsZGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvc3ViTWVz
aC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hl
cy9zdWJNZXNoLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBCYXNlU3ViTWVzaCwgU3ViTWVzaCAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJCYXNlU3ViTWVzaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQmFz
ZVN1Yk1lc2g7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3ViTWVzaCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gU3ViTWVzaDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9Db2xsaXNpb25zX2ludGVyc2VjdGlvbkluZm9fX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NvbGxpc2lv
bnMvaW50ZXJzZWN0aW9uSW5mbyAqLyAiLi9Db2xsaXNpb25zL2ludGVyc2VjdGlvbkluZm8udHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0N1bGxp
bmcvYm91bmRpbmdJbmZvICovICIuL0N1bGxpbmcvYm91bmRpbmdJbmZvLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAq
LyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX2Z1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5mdW5jdGlvbnMgKi8gIi4vTWF0aHMvbWF0
aC5mdW5jdGlvbnMudHMiKTsKKworCisKKworCisKKy8qKgorICogQmFzZSBjbGFzcyBmb3Igc3Vi
bWVzaGVzCisgKi8KK3ZhciBCYXNlU3ViTWVzaCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgp
IHsKKyAgICBmdW5jdGlvbiBCYXNlU3ViTWVzaCgpIHsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICAgICAgdGhpcy5fbWF0ZXJpYWxEZWZpbmVzID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICAgICAgdGhpcy5fbWF0ZXJpYWxFZmZlY3QgPSBudWxsOworICAgIH0KKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZVN1Yk1lc2gucHJvdG90eXBlLCAiZWZmZWN0Iiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhc3NvY2lhdGVkIGVmZmVjdAorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
bWF0ZXJpYWxFZmZlY3Q7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFNldHMg
YXNzb2NpYXRlZCBlZmZlY3QgKGVmZmVjdCB1c2VkIHRvIHJlbmRlciB0aGlzIHN1Ym1lc2gpCisg
ICAgICogQHBhcmFtIGVmZmVjdCBkZWZpbmVzIHRoZSBlZmZlY3QgdG8gYXNzb2NpYXRlIHdpdGgK
KyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBzZXQgb2YgZGVmaW5lcyB1c2VkIHRv
IGNvbXBpbGUgdGhpcyBlZmZlY3QKKyAgICAgKi8KKyAgICBCYXNlU3ViTWVzaC5wcm90b3R5cGUu
c2V0RWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCwgZGVmaW5lcykgeworICAgICAgICBpZiAoZGVm
aW5lcyA9PT0gdm9pZCAwKSB7IGRlZmluZXMgPSBudWxsOyB9CisgICAgICAgIGlmICh0aGlzLl9t
YXRlcmlhbEVmZmVjdCA9PT0gZWZmZWN0KSB7CisgICAgICAgICAgICBpZiAoIWVmZmVjdCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX21hdGVyaWFsRGVmaW5lcyA9IG51bGw7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbWF0ZXJp
YWxEZWZpbmVzID0gZGVmaW5lczsKKyAgICAgICAgdGhpcy5fbWF0ZXJpYWxFZmZlY3QgPSBlZmZl
Y3Q7CisgICAgfTsKKyAgICByZXR1cm4gQmFzZVN1Yk1lc2g7Cit9KCkpOworCisvKioKKyAqIERl
ZmluZXMgYSBzdWJkaXZpc2lvbiBpbnNpZGUgYSBtZXNoCisgKi8KK3ZhciBTdWJNZXNoID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFN1Yk1lc2gsIF9zdXBlcik7CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIG5ldyBzdWJtZXNoCisgICAgICogQHBhcmFtIG1hdGVyaWFsSW5kZXgg
ZGVmaW5lcyB0aGUgbWF0ZXJpYWwgaW5kZXggdG8gdXNlCisgICAgICogQHBhcmFtIHZlcnRpY2Vz
U3RhcnQgZGVmaW5lcyB2ZXJ0ZXggaW5kZXggc3RhcnQKKyAgICAgKiBAcGFyYW0gdmVydGljZXND
b3VudCBkZWZpbmVzIHZlcnRpY2VzIGNvdW50CisgICAgICogQHBhcmFtIGluZGV4U3RhcnQgZGVm
aW5lcyBpbmRleCBzdGFydAorICAgICAqIEBwYXJhbSBpbmRleENvdW50IGRlZmluZXMgaW5kaWNl
cyBjb3VudAorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIHBhcmVudCBtZXNoCisgICAg
ICogQHBhcmFtIHJlbmRlcmluZ01lc2ggZGVmaW5lcyBhbiBvcHRpb25hbCByZW5kZXJpbmcgbWVz
aAorICAgICAqIEBwYXJhbSBjcmVhdGVCb3VuZGluZ0JveCBkZWZpbmVzIGlmIGJvdW5kaW5nIGJv
eCBzaG91bGQgYmUgY3JlYXRlZCBmb3IgdGhpcyBzdWJtZXNoCisgICAgICovCisgICAgZnVuY3Rp
b24gU3ViTWVzaCgKKyAgICAvKiogdGhlIG1hdGVyaWFsIGluZGV4IHRvIHVzZSAqLworICAgIG1h
dGVyaWFsSW5kZXgsIAorICAgIC8qKiB2ZXJ0ZXggaW5kZXggc3RhcnQgKi8KKyAgICB2ZXJ0aWNl
c1N0YXJ0LCAKKyAgICAvKiogdmVydGljZXMgY291bnQgKi8KKyAgICB2ZXJ0aWNlc0NvdW50LCAK
KyAgICAvKiogaW5kZXggc3RhcnQgKi8KKyAgICBpbmRleFN0YXJ0LCAKKyAgICAvKiogaW5kaWNl
cyBjb3VudCAqLworICAgIGluZGV4Q291bnQsIG1lc2gsIHJlbmRlcmluZ01lc2gsIGNyZWF0ZUJv
dW5kaW5nQm94KSB7CisgICAgICAgIGlmIChjcmVhdGVCb3VuZGluZ0JveCA9PT0gdm9pZCAwKSB7
IGNyZWF0ZUJvdW5kaW5nQm94ID0gdHJ1ZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIu
Y2FsbCh0aGlzKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5tYXRlcmlhbEluZGV4ID0gbWF0ZXJp
YWxJbmRleDsKKyAgICAgICAgX3RoaXMudmVydGljZXNTdGFydCA9IHZlcnRpY2VzU3RhcnQ7Cisg
ICAgICAgIF90aGlzLnZlcnRpY2VzQ291bnQgPSB2ZXJ0aWNlc0NvdW50OworICAgICAgICBfdGhp
cy5pbmRleFN0YXJ0ID0gaW5kZXhTdGFydDsKKyAgICAgICAgX3RoaXMuaW5kZXhDb3VudCA9IGlu
ZGV4Q291bnQ7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9saW5lc0lu
ZGV4Q291bnQgPSAwOworICAgICAgICBfdGhpcy5fbGluZXNJbmRleEJ1ZmZlciA9IG51bGw7Cisg
ICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9sYXN0Q29sbGlkZXJXb3JsZFZl
cnRpY2VzID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2xh
c3RDb2xsaWRlclRyYW5zZm9ybU1hdHJpeCA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIF90aGlzLl9yZW5kZXJJZCA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisg
ICAgICAgIF90aGlzLl9hbHBoYUluZGV4ID0gMDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICAgICAgX3RoaXMuX2Rpc3RhbmNlVG9DYW1lcmEgPSAwOworICAgICAgICBfdGhpcy5fY3VycmVu
dE1hdGVyaWFsID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX21lc2ggPSBtZXNoOworICAgICAgICBf
dGhpcy5fcmVuZGVyaW5nTWVzaCA9IHJlbmRlcmluZ01lc2ggfHwgbWVzaDsKKyAgICAgICAgbWVz
aC5zdWJNZXNoZXMucHVzaChfdGhpcyk7CisgICAgICAgIF90aGlzLl90cmlhbmdsZVBsYW5lcyA9
IFtdOworICAgICAgICBfdGhpcy5faWQgPSBtZXNoLnN1Yk1lc2hlcy5sZW5ndGggLSAxOworICAg
ICAgICBpZiAoY3JlYXRlQm91bmRpbmdCb3gpIHsKKyAgICAgICAgICAgIF90aGlzLnJlZnJlc2hC
b3VuZGluZ0luZm8oKTsKKyAgICAgICAgICAgIG1lc2guY29tcHV0ZVdvcmxkTWF0cml4KHRydWUp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAg
ICogQWRkIGEgbmV3IHN1Ym1lc2ggdG8gYSBtZXNoCisgICAgICogQHBhcmFtIG1hdGVyaWFsSW5k
ZXggZGVmaW5lcyB0aGUgbWF0ZXJpYWwgaW5kZXggdG8gdXNlCisgICAgICogQHBhcmFtIHZlcnRp
Y2VzU3RhcnQgZGVmaW5lcyB2ZXJ0ZXggaW5kZXggc3RhcnQKKyAgICAgKiBAcGFyYW0gdmVydGlj
ZXNDb3VudCBkZWZpbmVzIHZlcnRpY2VzIGNvdW50CisgICAgICogQHBhcmFtIGluZGV4U3RhcnQg
ZGVmaW5lcyBpbmRleCBzdGFydAorICAgICAqIEBwYXJhbSBpbmRleENvdW50IGRlZmluZXMgaW5k
aWNlcyBjb3VudAorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIHBhcmVudCBtZXNoCisg
ICAgICogQHBhcmFtIHJlbmRlcmluZ01lc2ggZGVmaW5lcyBhbiBvcHRpb25hbCByZW5kZXJpbmcg
bWVzaAorICAgICAqIEBwYXJhbSBjcmVhdGVCb3VuZGluZ0JveCBkZWZpbmVzIGlmIGJvdW5kaW5n
IGJveCBzaG91bGQgYmUgY3JlYXRlZCBmb3IgdGhpcyBzdWJtZXNoCisgICAgICogQHJldHVybnMg
dGhlIG5ldyBzdWJtZXNoCisgICAgICovCisgICAgU3ViTWVzaC5BZGRUb01lc2ggPSBmdW5jdGlv
biAobWF0ZXJpYWxJbmRleCwgdmVydGljZXNTdGFydCwgdmVydGljZXNDb3VudCwgaW5kZXhTdGFy
dCwgaW5kZXhDb3VudCwgbWVzaCwgcmVuZGVyaW5nTWVzaCwgY3JlYXRlQm91bmRpbmdCb3gpIHsK
KyAgICAgICAgaWYgKGNyZWF0ZUJvdW5kaW5nQm94ID09PSB2b2lkIDApIHsgY3JlYXRlQm91bmRp
bmdCb3ggPSB0cnVlOyB9CisgICAgICAgIHJldHVybiBuZXcgU3ViTWVzaChtYXRlcmlhbEluZGV4
LCB2ZXJ0aWNlc1N0YXJ0LCB2ZXJ0aWNlc0NvdW50LCBpbmRleFN0YXJ0LCBpbmRleENvdW50LCBt
ZXNoLCByZW5kZXJpbmdNZXNoLCBjcmVhdGVCb3VuZGluZ0JveCk7CisgICAgfTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoU3ViTWVzaC5wcm90b3R5cGUsICJJc0dsb2JhbCIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN1Ym1lc2ggY292ZXJzIHRo
ZSBlbnRpcmUgcGFyZW50IG1lc2gKKyAgICAgICAgICogQGlnbm9yZW5hbWluZworICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gKHRoaXMu
dmVydGljZXNTdGFydCA9PT0gMCAmJiB0aGlzLnZlcnRpY2VzQ291bnQgPT09IHRoaXMuX21lc2gu
Z2V0VG90YWxWZXJ0aWNlcygpKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICog
UmV0dXJucyB0aGUgc3VibWVzaCBCb3VkaW5nSW5mbyBvYmplY3QKKyAgICAgKiBAcmV0dXJucyBj
dXJyZW50IGJvdW5kaW5nIGluZm8gKG9yIG1lc2gncyBvbmUgaWYgdGhlIHN1Ym1lc2ggaXMgZ2xv
YmFsKQorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmdldEJvdW5kaW5nSW5mbyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuSXNHbG9iYWwpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9tZXNoLmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLl9ib3VuZGluZ0luZm87CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRo
ZSBzdWJtZXNoIEJvdW5kaW5nSW5mbworICAgICAqIEBwYXJhbSBib3VuZGluZ0luZm8gZGVmaW5l
cyB0aGUgbmV3IGJvdW5kaW5nIGluZm8gdG8gdXNlCisgICAgICogQHJldHVybnMgdGhlIFN1Yk1l
c2gKKyAgICAgKi8KKyAgICBTdWJNZXNoLnByb3RvdHlwZS5zZXRCb3VuZGluZ0luZm8gPSBmdW5j
dGlvbiAoYm91bmRpbmdJbmZvKSB7CisgICAgICAgIHRoaXMuX2JvdW5kaW5nSW5mbyA9IGJvdW5k
aW5nSW5mbzsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIHRoZSBtZXNoIG9mIHRoZSBjdXJyZW50IHN1Ym1lc2gKKyAgICAgKiBAcmV0dXJuIHRo
ZSBwYXJlbnQgbWVzaAorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmdldE1lc2ggPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9tZXNoOworICAgIH07CisgICAgLyoq
CisgICAgICogUmV0dXJucyB0aGUgcmVuZGVyaW5nIG1lc2ggb2YgdGhlIHN1Ym1lc2gKKyAgICAg
KiBAcmV0dXJucyB0aGUgcmVuZGVyaW5nIG1lc2ggKGNvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHBh
cmVudCBtZXNoKQorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmdldFJlbmRlcmluZ01l
c2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJpbmdNZXNoOwor
ICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3VibWVzaCBtYXRlcmlhbAorICAg
ICAqIEByZXR1cm5zIG51bGwgb3IgdGhlIGN1cnJlbnQgbWF0ZXJpYWwKKyAgICAgKi8KKyAgICBT
dWJNZXNoLnByb3RvdHlwZS5nZXRNYXRlcmlhbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IHJvb3RNYXRlcmlhbCA9IHRoaXMuX3JlbmRlcmluZ01lc2gubWF0ZXJpYWw7CisgICAgICAgIGlm
IChyb290TWF0ZXJpYWwgPT09IG51bGwgfHwgcm9vdE1hdGVyaWFsID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXNoLmdldFNjZW5lKCkuZGVmYXVsdE1hdGVyaWFs
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJvb3RNYXRlcmlhbC5nZXRTdWJNYXRlcmlh
bCkgeworICAgICAgICAgICAgdmFyIG11bHRpTWF0ZXJpYWwgPSByb290TWF0ZXJpYWw7CisgICAg
ICAgICAgICB2YXIgZWZmZWN0aXZlTWF0ZXJpYWwgPSBtdWx0aU1hdGVyaWFsLmdldFN1Yk1hdGVy
aWFsKHRoaXMubWF0ZXJpYWxJbmRleCk7CisgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudE1h
dGVyaWFsICE9PSBlZmZlY3RpdmVNYXRlcmlhbCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2N1
cnJlbnRNYXRlcmlhbCA9IGVmZmVjdGl2ZU1hdGVyaWFsOworICAgICAgICAgICAgICAgIHRoaXMu
X21hdGVyaWFsRGVmaW5lcyA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gZWZmZWN0aXZlTWF0ZXJpYWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJvb3RNYXRl
cmlhbDsKKyAgICB9OworICAgIC8vIE1ldGhvZHMKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgbmV3
IHVwZGF0ZWQgQm91bmRpbmdJbmZvIG9iamVjdCB0byB0aGUgc3VibWVzaAorICAgICAqIEBwYXJh
bSBkYXRhIGRlZmluZXMgYW4gb3B0aW9uYWwgcG9zaXRpb24gYXJyYXkgdG8gdXNlIHRvIGRldGVy
bWluZSB0aGUgYm91bmRpbmcgaW5mbworICAgICAqIEByZXR1cm5zIHRoZSBTdWJNZXNoCisgICAg
ICovCisgICAgU3ViTWVzaC5wcm90b3R5cGUucmVmcmVzaEJvdW5kaW5nSW5mbyA9IGZ1bmN0aW9u
IChkYXRhKSB7CisgICAgICAgIGlmIChkYXRhID09PSB2b2lkIDApIHsgZGF0YSA9IG51bGw7IH0K
KyAgICAgICAgdGhpcy5fbGFzdENvbGxpZGVyV29ybGRWZXJ0aWNlcyA9IG51bGw7CisgICAgICAg
IGlmICh0aGlzLklzR2xvYmFsIHx8ICF0aGlzLl9yZW5kZXJpbmdNZXNoIHx8ICF0aGlzLl9yZW5k
ZXJpbmdNZXNoLmdlb21ldHJ5KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9yZW5kZXJp
bmdNZXNoLmdldFZlcnRpY2VzRGF0YShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFkYXRhKSB7CisgICAgICAgICAgICB0aGlzLl9ib3VuZGluZ0luZm8gPSB0aGlzLl9tZXNoLmdl
dEJvdW5kaW5nSW5mbygpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGluZGljZXMgPSB0aGlzLl9yZW5kZXJpbmdNZXNoLmdldEluZGljZXMoKTsKKyAg
ICAgICAgdmFyIGV4dGVuZDsKKyAgICAgICAgLy9pcyB0aGlzIHRoZSBvbmx5IHN1Ym1lc2g/Cisg
ICAgICAgIGlmICh0aGlzLmluZGV4U3RhcnQgPT09IDAgJiYgdGhpcy5pbmRleENvdW50ID09PSBp
bmRpY2VzLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9IHRoaXMuX3Jl
bmRlcmluZ01lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICAvL3RoZSByZW5kZXJp
bmcgbWVzaCdzIGJvdW5kaW5nIGluZm8gY2FuIGJlIHVzZWQsIGl0IGlzIHRoZSBzdGFuZGFyZCBz
dWJtZXNoIGZvciBhbGwgaW5kaWNlcy4KKyAgICAgICAgICAgIGV4dGVuZCA9IHsgbWluaW11bTog
Ym91bmRpbmdJbmZvLm1pbmltdW0uY2xvbmUoKSwgbWF4aW11bTogYm91bmRpbmdJbmZvLm1heGlt
dW0uY2xvbmUoKSB9OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZXh0
ZW5kID0gT2JqZWN0KF9NYXRoc19tYXRoX2Z1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJleHRyYWN0TWluQW5kTWF4SW5kZXhlZCJdKShkYXRhLCBpbmRpY2VzLCB0aGlzLmlu
ZGV4U3RhcnQsIHRoaXMuaW5kZXhDb3VudCwgdGhpcy5fcmVuZGVyaW5nTWVzaC5nZW9tZXRyeS5i
b3VuZGluZ0JpYXMpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9ib3VuZGluZ0luZm8p
IHsKKyAgICAgICAgICAgIHRoaXMuX2JvdW5kaW5nSW5mby5yZUNvbnN0cnVjdChleHRlbmQubWlu
aW11bSwgZXh0ZW5kLm1heGltdW0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdGhpcy5fYm91bmRpbmdJbmZvID0gbmV3IF9DdWxsaW5nX2JvdW5kaW5nSW5mb19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJCb3VuZGluZ0luZm8iXShleHRlbmQubWluaW11bSwg
ZXh0ZW5kLm1heGltdW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTdWJNZXNoLnByb3RvdHlwZS5fY2hlY2tDb2xsaXNp
b24gPSBmdW5jdGlvbiAoY29sbGlkZXIpIHsKKyAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9IHRo
aXMuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIHJldHVybiBib3VuZGluZ0luZm8uX2NoZWNr
Q29sbGlzaW9uKGNvbGxpZGVyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhl
IHN1Ym1lc2ggQm91bmRpbmdJbmZvCisgICAgICogQHBhcmFtIHdvcmxkIGRlZmluZXMgdGhlIHdv
cmxkIG1hdHJpeCB0byB1c2UgdG8gdXBkYXRlIHRoZSBib3VuZGluZyBpbmZvCisgICAgICogQHJl
dHVybnMgdGhlIHN1Ym1lc2gKKyAgICAgKi8KKyAgICBTdWJNZXNoLnByb3RvdHlwZS51cGRhdGVC
b3VuZGluZ0luZm8gPSBmdW5jdGlvbiAod29ybGQpIHsKKyAgICAgICAgdmFyIGJvdW5kaW5nSW5m
byA9IHRoaXMuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIGlmICghYm91bmRpbmdJbmZvKSB7
CisgICAgICAgICAgICB0aGlzLnJlZnJlc2hCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgICAgIGJv
dW5kaW5nSW5mbyA9IHRoaXMuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAg
Ym91bmRpbmdJbmZvLnVwZGF0ZSh3b3JsZCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogVHJ1ZSBpcyB0aGUgc3VibWVzaCBib3VuZGluZyBib3ggaW50ZXJz
ZWN0cyB0aGUgZnJ1c3R1bSBkZWZpbmVkIGJ5IHRoZSBwYXNzZWQgYXJyYXkgb2YgcGxhbmVzLgor
ICAgICAqIEBwYXJhbSBmcnVzdHVtUGxhbmVzIGRlZmluZXMgdGhlIGZydXN0dW0gcGxhbmVzCisg
ICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgc3VibWVzaCBpcyBpbnRlcnNlY3Rpbmcgd2l0aCB0
aGUgZnJ1c3R1bQorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmlzSW5GcnVzdHVtID0g
ZnVuY3Rpb24gKGZydXN0dW1QbGFuZXMpIHsKKyAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9IHRo
aXMuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIGlmICghYm91bmRpbmdJbmZvKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJvdW5kaW5n
SW5mby5pc0luRnJ1c3R1bShmcnVzdHVtUGxhbmVzLCB0aGlzLl9tZXNoLmN1bGxpbmdTdHJhdGVn
eSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUcnVlIGlzIHRoZSBzdWJtZXNoIGJvdW5kaW5n
IGJveCBpcyBjb21wbGV0ZWx5IGluc2lkZSB0aGUgZnJ1c3R1bSBkZWZpbmVkIGJ5IHRoZSBwYXNz
ZWQgYXJyYXkgb2YgcGxhbmVzCisgICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgZGVmaW5lcyB0
aGUgZnJ1c3R1bSBwbGFuZXMKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzdWJtZXNoIGlz
IGluc2lkZSB0aGUgZnJ1c3R1bQorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmlzQ29t
cGxldGVseUluRnJ1c3R1bSA9IGZ1bmN0aW9uIChmcnVzdHVtUGxhbmVzKSB7CisgICAgICAgIHZh
ciBib3VuZGluZ0luZm8gPSB0aGlzLmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICBpZiAoIWJv
dW5kaW5nSW5mbykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBib3VuZGluZ0luZm8uaXNDb21wbGV0ZWx5SW5GcnVzdHVtKGZydXN0dW1QbGFu
ZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVuZGVycyB0aGUgc3VibWVzaAorICAgICAq
IEBwYXJhbSBlbmFibGVBbHBoYU1vZGUgZGVmaW5lcyBpZiBhbHBoYSBuZWVkcyB0byBiZSB1c2Vk
CisgICAgICogQHJldHVybnMgdGhlIHN1Ym1lc2gKKyAgICAgKi8KKyAgICBTdWJNZXNoLnByb3Rv
dHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZW5hYmxlQWxwaGFNb2RlKSB7CisgICAgICAgIHRoaXMu
X3JlbmRlcmluZ01lc2gucmVuZGVyKHRoaXMsIGVuYWJsZUFscGhhTW9kZSk7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAg
IFN1Yk1lc2gucHJvdG90eXBlLl9nZXRMaW5lc0luZGV4QnVmZmVyID0gZnVuY3Rpb24gKGluZGlj
ZXMsIGVuZ2luZSkgeworICAgICAgICBpZiAoIXRoaXMuX2xpbmVzSW5kZXhCdWZmZXIpIHsKKyAg
ICAgICAgICAgIHZhciBsaW5lc0luZGljZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGlu
ZGV4ID0gdGhpcy5pbmRleFN0YXJ0OyBpbmRleCA8IHRoaXMuaW5kZXhTdGFydCArIHRoaXMuaW5k
ZXhDb3VudDsgaW5kZXggKz0gMykgeworICAgICAgICAgICAgICAgIGxpbmVzSW5kaWNlcy5wdXNo
KGluZGljZXNbaW5kZXhdLCBpbmRpY2VzW2luZGV4ICsgMV0sIGluZGljZXNbaW5kZXggKyAxXSwg
aW5kaWNlc1tpbmRleCArIDJdLCBpbmRpY2VzW2luZGV4ICsgMl0sIGluZGljZXNbaW5kZXhdKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2xpbmVzSW5kZXhCdWZmZXIgPSBlbmdp
bmUuY3JlYXRlSW5kZXhCdWZmZXIobGluZXNJbmRpY2VzKTsKKyAgICAgICAgICAgIHRoaXMuX2xp
bmVzSW5kZXhDb3VudCA9IGxpbmVzSW5kaWNlcy5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRoaXMuX2xpbmVzSW5kZXhCdWZmZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
aGVja3MgaWYgdGhlIHN1Ym1lc2ggaW50ZXJzZWN0cyB3aXRoIGEgcmF5CisgICAgICogQHBhcmFt
IHJheSBkZWZpbmVzIHRoZSByYXkgdG8gdGVzdAorICAgICAqIEByZXR1cm5zIHRydWUgaXMgdGhl
IHBhc3NlZCByYXkgaW50ZXJzZWN0cyB0aGUgc3VibWVzaCBib3VuZGluZyBib3gKKyAgICAgKi8K
KyAgICBTdWJNZXNoLnByb3RvdHlwZS5jYW5JbnRlcnNlY3RzID0gZnVuY3Rpb24gKHJheSkgewor
ICAgICAgICB2YXIgYm91bmRpbmdJbmZvID0gdGhpcy5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAg
ICAgaWYgKCFib3VuZGluZ0luZm8pIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gcmF5LmludGVyc2VjdHNCb3goYm91bmRpbmdJbmZvLmJvdW5k
aW5nQm94KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEludGVyc2VjdHMgY3VycmVudCBzdWJt
ZXNoIHdpdGggYSByYXkKKyAgICAgKiBAcGFyYW0gcmF5IGRlZmluZXMgdGhlIHJheSB0byB0ZXN0
CisgICAgICogQHBhcmFtIHBvc2l0aW9ucyBkZWZpbmVzIG1lc2gncyBwb3NpdGlvbnMgYXJyYXkK
KyAgICAgKiBAcGFyYW0gaW5kaWNlcyBkZWZpbmVzIG1lc2gncyBpbmRpY2VzIGFycmF5CisgICAg
ICogQHBhcmFtIGZhc3RDaGVjayBkZWZpbmVzIGlmIG9ubHkgYm91bmRpbmcgaW5mbyBzaG91bGQg
YmUgdXNlZAorICAgICAqIEBwYXJhbSB0cmlhbmdsZVByZWRpY2F0ZSBkZWZpbmVzIGFuIG9wdGlv
bmFsIHByZWRpY2F0ZSB1c2VkIHRvIHNlbGVjdCBmYWNlcyB3aGVuIGEgbWVzaCBpbnRlcnNlY3Rp
b24gaXMgZGV0ZWN0ZWQKKyAgICAgKiBAcmV0dXJucyBpbnRlcnNlY3Rpb24gaW5mbyBvciBudWxs
IGlmIG5vIGludGVyc2VjdGlvbgorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmludGVy
c2VjdHMgPSBmdW5jdGlvbiAocmF5LCBwb3NpdGlvbnMsIGluZGljZXMsIGZhc3RDaGVjaywgdHJp
YW5nbGVQcmVkaWNhdGUpIHsKKyAgICAgICAgdmFyIG1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlh
bCgpOworICAgICAgICBpZiAoIW1hdGVyaWFsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG1hdGVyaWFsLmZpbGxNb2RlKSB7CisgICAgICAg
ICAgICBjYXNlIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJDb25zdGFudHMiXS5NQVRFUklBTF9Qb2ludExpc3REcmF3TW9kZToKKyAgICAgICAgICAgIGNh
c2UgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbnN0
YW50cyJdLk1BVEVSSUFMX0xpbmVMaXN0RHJhd01vZGU6CisgICAgICAgICAgICBjYXNlIF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb25zdGFudHMiXS5N
QVRFUklBTF9MaW5lTG9vcERyYXdNb2RlOgorICAgICAgICAgICAgY2FzZSBfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxf
TGluZVN0cmlwRHJhd01vZGU6CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9Ucmlhbmds
ZUZhbkRyYXdNb2RlOgorICAgICAgICAgICAgY2FzZSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVHJpYW5nbGVTdHJp
cERyYXdNb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAg
ICAgIC8vIExpbmVNZXNoIGZpcnN0IGFzIGl0J3MgYWxzbyBhIE1lc2guLi4KKyAgICAgICAgaWYg
KHRoaXMuX21lc2guZ2V0Q2xhc3NOYW1lKCkgPT09ICJJbnN0YW5jZWRMaW5lc01lc2giIHx8IHRo
aXMuX21lc2guZ2V0Q2xhc3NOYW1lKCkgPT09ICJMaW5lc01lc2giKSB7CisgICAgICAgICAgICAv
LyBDaGVjayBpZiBtZXNoIGlzIHVuaW5kZXhlZAorICAgICAgICAgICAgaWYgKCFpbmRpY2VzLmxl
bmd0aCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcnNlY3RVbkluZGV4ZWRM
aW5lcyhyYXksIHBvc2l0aW9ucywgaW5kaWNlcywgdGhpcy5fbWVzaC5pbnRlcnNlY3Rpb25UaHJl
c2hvbGQsIGZhc3RDaGVjayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5faW50ZXJzZWN0TGluZXMocmF5LCBwb3NpdGlvbnMsIGluZGljZXMsIHRoaXMuX21lc2guaW50
ZXJzZWN0aW9uVGhyZXNob2xkLCBmYXN0Q2hlY2spOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbWVzaCBpcyB1bmluZGV4ZWQKKyAgICAgICAgICAg
IGlmICghaW5kaWNlcy5sZW5ndGggJiYgdGhpcy5fbWVzaC5fdW5JbmRleGVkKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVyc2VjdFVuSW5kZXhlZFRyaWFuZ2xlcyhyYXksIHBv
c2l0aW9ucywgaW5kaWNlcywgZmFzdENoZWNrLCB0cmlhbmdsZVByZWRpY2F0ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJzZWN0VHJpYW5nbGVzKHJheSwg
cG9zaXRpb25zLCBpbmRpY2VzLCBmYXN0Q2hlY2ssIHRyaWFuZ2xlUHJlZGljYXRlKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTdWJNZXNoLnByb3RvdHlwZS5f
aW50ZXJzZWN0TGluZXMgPSBmdW5jdGlvbiAocmF5LCBwb3NpdGlvbnMsIGluZGljZXMsIGludGVy
c2VjdGlvblRocmVzaG9sZCwgZmFzdENoZWNrKSB7CisgICAgICAgIHZhciBpbnRlcnNlY3RJbmZv
ID0gbnVsbDsKKyAgICAgICAgLy8gTGluZSB0ZXN0CisgICAgICAgIGZvciAodmFyIGluZGV4ID0g
dGhpcy5pbmRleFN0YXJ0OyBpbmRleCA8IHRoaXMuaW5kZXhTdGFydCArIHRoaXMuaW5kZXhDb3Vu
dDsgaW5kZXggKz0gMikgeworICAgICAgICAgICAgdmFyIHAwID0gcG9zaXRpb25zW2luZGljZXNb
aW5kZXhdXTsKKyAgICAgICAgICAgIHZhciBwMSA9IHBvc2l0aW9uc1tpbmRpY2VzW2luZGV4ICsg
MV1dOworICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHJheS5pbnRlcnNlY3Rpb25TZWdtZW50KHAw
LCBwMSwgaW50ZXJzZWN0aW9uVGhyZXNob2xkKTsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPCAw
KSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZmFzdENoZWNrIHx8ICFpbnRlcnNlY3RJbmZvIHx8IGxlbmd0aCA8IGludGVyc2VjdElu
Zm8uZGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICBpbnRlcnNlY3RJbmZvID0gbmV3IF9Db2xs
aXNpb25zX2ludGVyc2VjdGlvbkluZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siSW50
ZXJzZWN0aW9uSW5mbyJdKG51bGwsIG51bGwsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgaW50
ZXJzZWN0SW5mby5mYWNlSWQgPSBpbmRleCAvIDI7CisgICAgICAgICAgICAgICAgaWYgKGZhc3RD
aGVjaykgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludGVyc2VjdEluZm87Cisg
ICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLl9pbnRlcnNl
Y3RVbkluZGV4ZWRMaW5lcyA9IGZ1bmN0aW9uIChyYXksIHBvc2l0aW9ucywgaW5kaWNlcywgaW50
ZXJzZWN0aW9uVGhyZXNob2xkLCBmYXN0Q2hlY2spIHsKKyAgICAgICAgdmFyIGludGVyc2VjdElu
Zm8gPSBudWxsOworICAgICAgICAvLyBMaW5lIHRlc3QKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSB0aGlzLnZlcnRpY2VzU3RhcnQ7IGluZGV4IDwgdGhpcy52ZXJ0aWNlc1N0YXJ0ICsgdGhpcy52
ZXJ0aWNlc0NvdW50OyBpbmRleCArPSAyKSB7CisgICAgICAgICAgICB2YXIgcDAgPSBwb3NpdGlv
bnNbaW5kZXhdOworICAgICAgICAgICAgdmFyIHAxID0gcG9zaXRpb25zW2luZGV4ICsgMV07Cisg
ICAgICAgICAgICB2YXIgbGVuZ3RoID0gcmF5LmludGVyc2VjdGlvblNlZ21lbnQocDAsIHAxLCBp
bnRlcnNlY3Rpb25UaHJlc2hvbGQpOworICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApIHsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChm
YXN0Q2hlY2sgfHwgIWludGVyc2VjdEluZm8gfHwgbGVuZ3RoIDwgaW50ZXJzZWN0SW5mby5kaXN0
YW5jZSkgeworICAgICAgICAgICAgICAgIGludGVyc2VjdEluZm8gPSBuZXcgX0NvbGxpc2lvbnNf
aW50ZXJzZWN0aW9uSW5mb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcnNlY3Rp
b25JbmZvIl0obnVsbCwgbnVsbCwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpbnRlcnNlY3RJ
bmZvLmZhY2VJZCA9IGluZGV4IC8gMjsKKyAgICAgICAgICAgICAgICBpZiAoZmFzdENoZWNrKSB7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW50ZXJzZWN0SW5mbzsKKyAgICB9Owor
ICAgIC8qKiBAaGlkZGVuICovCisgICAgU3ViTWVzaC5wcm90b3R5cGUuX2ludGVyc2VjdFRyaWFu
Z2xlcyA9IGZ1bmN0aW9uIChyYXksIHBvc2l0aW9ucywgaW5kaWNlcywgZmFzdENoZWNrLCB0cmlh
bmdsZVByZWRpY2F0ZSkgeworICAgICAgICB2YXIgaW50ZXJzZWN0SW5mbyA9IG51bGw7CisgICAg
ICAgIC8vIFRyaWFuZ2xlcyB0ZXN0CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gdGhpcy5pbmRl
eFN0YXJ0OyBpbmRleCA8IHRoaXMuaW5kZXhTdGFydCArIHRoaXMuaW5kZXhDb3VudDsgaW5kZXgg
Kz0gMykgeworICAgICAgICAgICAgdmFyIHAwID0gcG9zaXRpb25zW2luZGljZXNbaW5kZXhdXTsK
KyAgICAgICAgICAgIHZhciBwMSA9IHBvc2l0aW9uc1tpbmRpY2VzW2luZGV4ICsgMV1dOworICAg
ICAgICAgICAgdmFyIHAyID0gcG9zaXRpb25zW2luZGljZXNbaW5kZXggKyAyXV07CisgICAgICAg
ICAgICBpZiAodHJpYW5nbGVQcmVkaWNhdGUgJiYgIXRyaWFuZ2xlUHJlZGljYXRlKHAwLCBwMSwg
cDIsIHJheSkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBjdXJyZW50SW50ZXJzZWN0SW5mbyA9IHJheS5pbnRlcnNlY3RzVHJpYW5n
bGUocDAsIHAxLCBwMik7CisgICAgICAgICAgICBpZiAoY3VycmVudEludGVyc2VjdEluZm8pIHsK
KyAgICAgICAgICAgICAgICBpZiAoY3VycmVudEludGVyc2VjdEluZm8uZGlzdGFuY2UgPCAwKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoZmFzdENoZWNrIHx8ICFpbnRlcnNlY3RJbmZvIHx8IGN1cnJlbnRJbnRl
cnNlY3RJbmZvLmRpc3RhbmNlIDwgaW50ZXJzZWN0SW5mby5kaXN0YW5jZSkgeworICAgICAgICAg
ICAgICAgICAgICBpbnRlcnNlY3RJbmZvID0gY3VycmVudEludGVyc2VjdEluZm87CisgICAgICAg
ICAgICAgICAgICAgIGludGVyc2VjdEluZm8uZmFjZUlkID0gaW5kZXggLyAzOworICAgICAgICAg
ICAgICAgICAgICBpZiAoZmFzdENoZWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW50ZXJzZWN0SW5mbzsKKyAgICB9OworICAg
IC8qKiBAaGlkZGVuICovCisgICAgU3ViTWVzaC5wcm90b3R5cGUuX2ludGVyc2VjdFVuSW5kZXhl
ZFRyaWFuZ2xlcyA9IGZ1bmN0aW9uIChyYXksIHBvc2l0aW9ucywgaW5kaWNlcywgZmFzdENoZWNr
LCB0cmlhbmdsZVByZWRpY2F0ZSkgeworICAgICAgICB2YXIgaW50ZXJzZWN0SW5mbyA9IG51bGw7
CisgICAgICAgIC8vIFRyaWFuZ2xlcyB0ZXN0CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gdGhp
cy52ZXJ0aWNlc1N0YXJ0OyBpbmRleCA8IHRoaXMudmVydGljZXNTdGFydCArIHRoaXMudmVydGlj
ZXNDb3VudDsgaW5kZXggKz0gMykgeworICAgICAgICAgICAgdmFyIHAwID0gcG9zaXRpb25zW2lu
ZGV4XTsKKyAgICAgICAgICAgIHZhciBwMSA9IHBvc2l0aW9uc1tpbmRleCArIDFdOworICAgICAg
ICAgICAgdmFyIHAyID0gcG9zaXRpb25zW2luZGV4ICsgMl07CisgICAgICAgICAgICBpZiAodHJp
YW5nbGVQcmVkaWNhdGUgJiYgIXRyaWFuZ2xlUHJlZGljYXRlKHAwLCBwMSwgcDIsIHJheSkpIHsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
ciBjdXJyZW50SW50ZXJzZWN0SW5mbyA9IHJheS5pbnRlcnNlY3RzVHJpYW5nbGUocDAsIHAxLCBw
Mik7CisgICAgICAgICAgICBpZiAoY3VycmVudEludGVyc2VjdEluZm8pIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudEludGVyc2VjdEluZm8uZGlzdGFuY2UgPCAwKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoZmFzdENoZWNrIHx8ICFpbnRlcnNlY3RJbmZvIHx8IGN1cnJlbnRJbnRlcnNlY3RJbmZvLmRp
c3RhbmNlIDwgaW50ZXJzZWN0SW5mby5kaXN0YW5jZSkgeworICAgICAgICAgICAgICAgICAgICBp
bnRlcnNlY3RJbmZvID0gY3VycmVudEludGVyc2VjdEluZm87CisgICAgICAgICAgICAgICAgICAg
IGludGVyc2VjdEluZm8uZmFjZUlkID0gaW5kZXggLyAzOworICAgICAgICAgICAgICAgICAgICBp
ZiAoZmFzdENoZWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gaW50ZXJzZWN0SW5mbzsKKyAgICB9OworICAgIC8qKiBAaGlkZGVu
ICovCisgICAgU3ViTWVzaC5wcm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICh0aGlzLl9saW5lc0luZGV4QnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9saW5l
c0luZGV4QnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgIH07CisgICAgLy8gQ2xvbmUKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHN1Ym1lc2ggZnJvbSB0aGUgcGFzc2VkIG1lc2gK
KyAgICAgKiBAcGFyYW0gbmV3TWVzaCBkZWZpbmVzIHRoZSBuZXcgaG9zdGluZyBtZXNoCisgICAg
ICogQHBhcmFtIG5ld1JlbmRlcmluZ01lc2ggZGVmaW5lcyBhbiBvcHRpb25hbCByZW5kZXJpbmcg
bWVzaAorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgc3VibWVzaAorICAgICAqLworICAgIFN1Yk1l
c2gucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5ld01lc2gsIG5ld1JlbmRlcmluZ01lc2gp
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBTdWJNZXNoKHRoaXMubWF0ZXJpYWxJbmRleCwg
dGhpcy52ZXJ0aWNlc1N0YXJ0LCB0aGlzLnZlcnRpY2VzQ291bnQsIHRoaXMuaW5kZXhTdGFydCwg
dGhpcy5pbmRleENvdW50LCBuZXdNZXNoLCBuZXdSZW5kZXJpbmdNZXNoLCBmYWxzZSk7CisgICAg
ICAgIGlmICghdGhpcy5Jc0dsb2JhbCkgeworICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9
IHRoaXMuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICBpZiAoIWJvdW5kaW5nSW5mbykg
eworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXN1bHQuX2JvdW5kaW5nSW5mbyA9IG5ldyBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQm91bmRpbmdJbmZvIl0oYm91bmRpbmdJbmZvLm1p
bmltdW0sIGJvdW5kaW5nSW5mby5tYXhpbXVtKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH07CisgICAgLy8gRGlzcG9zZQorICAgIC8qKgorICAgICAqIFJlbGVhc2Ug
YXNzb2NpYXRlZCByZXNvdXJjZXMKKyAgICAgKi8KKyAgICBTdWJNZXNoLnByb3RvdHlwZS5kaXNw
b3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fbGluZXNJbmRleEJ1ZmZlcikg
eworICAgICAgICAgICAgdGhpcy5fbWVzaC5nZXRTY2VuZSgpLmdldEVuZ2luZSgpLl9yZWxlYXNl
QnVmZmVyKHRoaXMuX2xpbmVzSW5kZXhCdWZmZXIpOworICAgICAgICAgICAgdGhpcy5fbGluZXNJ
bmRleEJ1ZmZlciA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVtb3ZlIGZyb20gbWVz
aAorICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9tZXNoLnN1Yk1lc2hlcy5pbmRleE9mKHRoaXMp
OworICAgICAgICB0aGlzLl9tZXNoLnN1Yk1lc2hlcy5zcGxpY2UoaW5kZXgsIDEpOworICAgIH07
CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRo
ZSBzdHJpbmcgIlN1Yk1lc2giLgorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmdldENs
YXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJTdWJNZXNoIjsKKyAgICB9
OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHN1Ym1lc2gg
ZnJvbSBpbmRpY2VzIGRhdGEKKyAgICAgKiBAcGFyYW0gbWF0ZXJpYWxJbmRleCB0aGUgaW5kZXgg
b2YgdGhlIG1haW4gbWVzaCBtYXRlcmlhbAorICAgICAqIEBwYXJhbSBzdGFydEluZGV4IHRoZSBp
bmRleCB3aGVyZSB0byBzdGFydCB0aGUgY29weSBpbiB0aGUgbWVzaCBpbmRpY2VzIGFycmF5Cisg
ICAgICogQHBhcmFtIGluZGV4Q291bnQgdGhlIG51bWJlciBvZiBpbmRpY2VzIHRvIGNvcHkgdGhl
biBmcm9tIHRoZSBzdGFydEluZGV4CisgICAgICogQHBhcmFtIG1lc2ggdGhlIG1haW4gbWVzaCB0
byBjcmVhdGUgdGhlIHN1Ym1lc2ggZnJvbQorICAgICAqIEBwYXJhbSByZW5kZXJpbmdNZXNoIHRo
ZSBvcHRpb25hbCByZW5kZXJpbmcgbWVzaAorICAgICAqIEByZXR1cm5zIGEgbmV3IHN1Ym1lc2gK
KyAgICAgKi8KKyAgICBTdWJNZXNoLkNyZWF0ZUZyb21JbmRpY2VzID0gZnVuY3Rpb24gKG1hdGVy
aWFsSW5kZXgsIHN0YXJ0SW5kZXgsIGluZGV4Q291bnQsIG1lc2gsIHJlbmRlcmluZ01lc2gpIHsK
KyAgICAgICAgdmFyIG1pblZlcnRleEluZGV4ID0gTnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAg
dmFyIG1heFZlcnRleEluZGV4ID0gLU51bWJlci5NQVhfVkFMVUU7CisgICAgICAgIHZhciB3aGF0
V2lsbFJlbmRlciA9IChyZW5kZXJpbmdNZXNoIHx8IG1lc2gpOworICAgICAgICB2YXIgaW5kaWNl
cyA9IHdoYXRXaWxsUmVuZGVyLmdldEluZGljZXMoKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSBzdGFydEluZGV4OyBpbmRleCA8IHN0YXJ0SW5kZXggKyBpbmRleENvdW50OyBpbmRleCsrKSB7
CisgICAgICAgICAgICB2YXIgdmVydGV4SW5kZXggPSBpbmRpY2VzW2luZGV4XTsKKyAgICAgICAg
ICAgIGlmICh2ZXJ0ZXhJbmRleCA8IG1pblZlcnRleEluZGV4KSB7CisgICAgICAgICAgICAgICAg
bWluVmVydGV4SW5kZXggPSB2ZXJ0ZXhJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh2ZXJ0ZXhJbmRleCA+IG1heFZlcnRleEluZGV4KSB7CisgICAgICAgICAgICAgICAgbWF4
VmVydGV4SW5kZXggPSB2ZXJ0ZXhJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbmV3IFN1Yk1lc2gobWF0ZXJpYWxJbmRleCwgbWluVmVydGV4SW5kZXgsIG1h
eFZlcnRleEluZGV4IC0gbWluVmVydGV4SW5kZXggKyAxLCBzdGFydEluZGV4LCBpbmRleENvdW50
LCBtZXNoLCByZW5kZXJpbmdNZXNoKTsKKyAgICB9OworICAgIHJldHVybiBTdWJNZXNoOworfShC
YXNlU3ViTWVzaCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy90cmFpbE1l
c2gudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01l
c2hlcy90cmFpbE1lc2gudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogVHJhaWxNZXNoICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlRyYWlsTWVzaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVHJhaWxNZXNo
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9k
dWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVz
aGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01lc2hlcy9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAi
Li9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNo
ZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2gu
dmVydGV4RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0ZXhEYXRhLnRzIik7CisKKworCisKKwor
LyoqCisgKiBDbGFzcyB1c2VkIHRvIGNyZWF0ZSBhIHRyYWlsIGZvbGxvd2luZyBhIG1lc2gKKyAq
LwordmFyIFRyYWlsTWVzaCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShUcmFpbE1l
c2gsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFt
IG5hbWUgVGhlIHZhbHVlIHVzZWQgYnkgc2NlbmUuZ2V0TWVzaEJ5TmFtZSgpIHRvIGRvIGEgbG9v
a3VwLgorICAgICAqIEBwYXJhbSBnZW5lcmF0b3IgVGhlIG1lc2ggdG8gZ2VuZXJhdGUgYSB0cmFp
bC4KKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRvIGFkZCB0aGlzIG1lc2ggdG8uCisg
ICAgICogQHBhcmFtIGRpYW1ldGVyIERpYW1ldGVyIG9mIHRyYWlsaW5nIG1lc2guIERlZmF1bHQg
aXMgMS4KKyAgICAgKiBAcGFyYW0gbGVuZ3RoIExlbmd0aCBvZiB0cmFpbGluZyBtZXNoLiBEZWZh
dWx0IGlzIDYwLgorICAgICAqIEBwYXJhbSBhdXRvU3RhcnQgQXV0b21hdGljYWxseSBzdGFydCB0
cmFpbGluZyBtZXNoLiBEZWZhdWx0IHRydWUuCisgICAgICovCisgICAgZnVuY3Rpb24gVHJhaWxN
ZXNoKG5hbWUsIGdlbmVyYXRvciwgc2NlbmUsIGRpYW1ldGVyLCBsZW5ndGgsIGF1dG9TdGFydCkg
eworICAgICAgICBpZiAoZGlhbWV0ZXIgPT09IHZvaWQgMCkgeyBkaWFtZXRlciA9IDE7IH0KKyAg
ICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7IGxlbmd0aCA9IDYwOyB9CisgICAgICAgIGlm
IChhdXRvU3RhcnQgPT09IHZvaWQgMCkgeyBhdXRvU3RhcnQgPSB0cnVlOyB9CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0aGlzOworICAgICAg
ICBfdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHNDb3VudCA9IDQ7CisgICAgICAgIF90aGlzLl9y
dW5uaW5nID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9hdXRvU3RhcnQgPSBhdXRvU3RhcnQ7Cisg
ICAgICAgIF90aGlzLl9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgICAgIF90aGlzLl9kaWFt
ZXRlciA9IGRpYW1ldGVyOworICAgICAgICBfdGhpcy5fbGVuZ3RoID0gbGVuZ3RoOworICAgICAg
ICBfdGhpcy5fc2VjdGlvblZlY3RvcnMgPSBbXTsKKyAgICAgICAgX3RoaXMuX3NlY3Rpb25Ob3Jt
YWxWZWN0b3JzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3RoaXMuX3NlY3Rp
b25Qb2x5Z29uUG9pbnRzQ291bnQ7IGkrKykgeworICAgICAgICAgICAgX3RoaXMuX3NlY3Rpb25W
ZWN0b3JzW2ldID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICBfdGhpcy5fc2VjdGlvbk5vcm1hbFZl
Y3RvcnNbaV0gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgfQorICAgICAgICBfdGhpcy5fY3JlYXRlTWVz
aCgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqICJUcmFp
bE1lc2giCisgICAgICogQHJldHVybnMgIlRyYWlsTWVzaCIKKyAgICAgKi8KKyAgICBUcmFpbE1l
c2gucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
ICJUcmFpbE1lc2giOworICAgIH07CisgICAgVHJhaWxNZXNoLnByb3RvdHlwZS5fY3JlYXRlTWVz
aCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGRhdGEgPSBuZXcgX01lc2hlc19tZXNoX3Zl
cnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVydGV4RGF0YSJdKCk7Cisg
ICAgICAgIHZhciBwb3NpdGlvbnMgPSBbXTsKKyAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTsKKyAg
ICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAgICAgICAgdmFyIG1lc2hDZW50ZXIgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8o
KTsKKyAgICAgICAgaWYgKHRoaXMuX2dlbmVyYXRvci5fYm91bmRpbmdJbmZvKSB7CisgICAgICAg
ICAgICBtZXNoQ2VudGVyID0gdGhpcy5fZ2VuZXJhdG9yLl9ib3VuZGluZ0luZm8uYm91bmRpbmdC
b3guY2VudGVyV29ybGQ7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGFscGhhID0gMiAqIE1hdGgu
UEkgLyB0aGlzLl9zZWN0aW9uUG9seWdvblBvaW50c0NvdW50OworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25Qb2x5Z29uUG9pbnRzQ291bnQ7IGkrKykgeworICAgICAg
ICAgICAgcG9zaXRpb25zLnB1c2gobWVzaENlbnRlci54ICsgTWF0aC5jb3MoaSAqIGFscGhhKSAq
IHRoaXMuX2RpYW1ldGVyLCBtZXNoQ2VudGVyLnkgKyBNYXRoLnNpbihpICogYWxwaGEpICogdGhp
cy5fZGlhbWV0ZXIsIG1lc2hDZW50ZXIueik7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIg
aSA9IDE7IGkgPD0gdGhpcy5fbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIGog
PSAwOyBqIDwgdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHNDb3VudDsgaisrKSB7CisgICAgICAg
ICAgICAgICAgcG9zaXRpb25zLnB1c2gobWVzaENlbnRlci54ICsgTWF0aC5jb3MoaiAqIGFscGhh
KSAqIHRoaXMuX2RpYW1ldGVyLCBtZXNoQ2VudGVyLnkgKyBNYXRoLnNpbihqICogYWxwaGEpICog
dGhpcy5fZGlhbWV0ZXIsIG1lc2hDZW50ZXIueik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YXIgbCA9IHBvc2l0aW9ucy5sZW5ndGggLyAzIC0gMiAqIHRoaXMuX3NlY3Rpb25Qb2x5Z29u
UG9pbnRzQ291bnQ7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3NlY3Rp
b25Qb2x5Z29uUG9pbnRzQ291bnQgLSAxOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpbmRpY2Vz
LnB1c2gobCArIGosIGwgKyBqICsgdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHNDb3VudCwgbCAr
IGogKyB0aGlzLl9zZWN0aW9uUG9seWdvblBvaW50c0NvdW50ICsgMSk7CisgICAgICAgICAgICAg
ICAgaW5kaWNlcy5wdXNoKGwgKyBqLCBsICsgaiArIHRoaXMuX3NlY3Rpb25Qb2x5Z29uUG9pbnRz
Q291bnQgKyAxLCBsICsgaiArIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kaWNl
cy5wdXNoKGwgKyB0aGlzLl9zZWN0aW9uUG9seWdvblBvaW50c0NvdW50IC0gMSwgbCArIHRoaXMu
X3NlY3Rpb25Qb2x5Z29uUG9pbnRzQ291bnQgLSAxICsgdGhpcy5fc2VjdGlvblBvbHlnb25Qb2lu
dHNDb3VudCwgbCArIHRoaXMuX3NlY3Rpb25Qb2x5Z29uUG9pbnRzQ291bnQpOworICAgICAgICAg
ICAgaW5kaWNlcy5wdXNoKGwgKyB0aGlzLl9zZWN0aW9uUG9seWdvblBvaW50c0NvdW50IC0gMSwg
bCArIHRoaXMuX3NlY3Rpb25Qb2x5Z29uUG9pbnRzQ291bnQsIGwpOworICAgICAgICB9CisgICAg
ICAgIF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlZlcnRleERhdGEiXS5Db21wdXRlTm9ybWFscyhwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1hbHMp
OworICAgICAgICBkYXRhLnBvc2l0aW9ucyA9IHBvc2l0aW9uczsKKyAgICAgICAgZGF0YS5ub3Jt
YWxzID0gbm9ybWFsczsKKyAgICAgICAgZGF0YS5pbmRpY2VzID0gaW5kaWNlczsKKyAgICAgICAg
ZGF0YS5hcHBseVRvTWVzaCh0aGlzLCB0cnVlKTsKKyAgICAgICAgaWYgKHRoaXMuX2F1dG9TdGFy
dCkgeworICAgICAgICAgICAgdGhpcy5zdGFydCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTdGFydCB0cmFpbGluZyBtZXNoLgorICAgICAqLworICAgIFRyYWlsTWVzaC5w
cm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGlmICghdGhpcy5fcnVubmluZykgeworICAgICAgICAgICAgdGhpcy5fcnVubmlu
ZyA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9iZWZvcmVSZW5kZXJPYnNlcnZlciA9IHRoaXMu
Z2V0U2NlbmUoKS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgICAgICBfdGhpcy51cGRhdGUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTdG9wIHRyYWlsaW5nIG1lc2guCisgICAgICovCisg
ICAgVHJhaWxNZXNoLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5fYmVmb3JlUmVuZGVyT2JzZXJ2ZXIgJiYgdGhpcy5fcnVubmluZykgeworICAgICAgICAg
ICAgdGhpcy5fcnVubmluZyA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5nZXRTY2VuZSgpLm9u
QmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fYmVmb3JlUmVuZGVyT2JzZXJ2ZXIp
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdHJhaWxpbmcgbWVz
aCBnZW9tZXRyeS4KKyAgICAgKi8KKyAgICBUcmFpbE1lc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMuZ2V0VmVydGljZXNEYXRh
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZl
ciJdLlBvc2l0aW9uS2luZCk7CisgICAgICAgIHZhciBub3JtYWxzID0gdGhpcy5nZXRWZXJ0aWNl
c0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
QnVmZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAgIHZhciB3bSA9IHRoaXMuX2dlbmVyYXRvci5n
ZXRXb3JsZE1hdHJpeCgpOworICAgICAgICBpZiAocG9zaXRpb25zICYmIG5vcm1hbHMpIHsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAzICogdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHNDb3Vu
dDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHBvc2l0aW9u
c1tpIC0gMyAqIHRoaXMuX3NlY3Rpb25Qb2x5Z29uUG9pbnRzQ291bnRdID0gcG9zaXRpb25zW2ld
IC0gbm9ybWFsc1tpXSAvIHRoaXMuX2xlbmd0aCAqIHRoaXMuX2RpYW1ldGVyOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDMgKiB0aGlzLl9zZWN0aW9uUG9seWdvblBv
aW50c0NvdW50OyBpIDwgbm9ybWFscy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIG5v
cm1hbHNbaSAtIDMgKiB0aGlzLl9zZWN0aW9uUG9seWdvblBvaW50c0NvdW50XSA9IG5vcm1hbHNb
aV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbCA9IHBvc2l0aW9ucy5sZW5ndGgg
LSAzICogdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHNDb3VudDsKKyAgICAgICAgICAgIHZhciBh
bHBoYSA9IDIgKiBNYXRoLlBJIC8gdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHNDb3VudDsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHND
b3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2VjdGlvblZlY3RvcnNbaV0uY29w
eUZyb21GbG9hdHMoTWF0aC5jb3MoaSAqIGFscGhhKSAqIHRoaXMuX2RpYW1ldGVyLCBNYXRoLnNp
bihpICogYWxwaGEpICogdGhpcy5fZGlhbWV0ZXIsIDApOworICAgICAgICAgICAgICAgIHRoaXMu
X3NlY3Rpb25Ob3JtYWxWZWN0b3JzW2ldLmNvcHlGcm9tRmxvYXRzKE1hdGguY29zKGkgKiBhbHBo
YSksIE1hdGguc2luKGkgKiBhbHBoYSksIDApOworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uVHJhbnNmb3Jt
Q29vcmRpbmF0ZXNUb1JlZih0aGlzLl9zZWN0aW9uVmVjdG9yc1tpXSwgd20sIHRoaXMuX3NlY3Rp
b25WZWN0b3JzW2ldKTsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKHRo
aXMuX3NlY3Rpb25Ob3JtYWxWZWN0b3JzW2ldLCB3bSwgdGhpcy5fc2VjdGlvbk5vcm1hbFZlY3Rv
cnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLl9zZWN0aW9uUG9seWdvblBvaW50c0NvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBw
b3NpdGlvbnNbbCArIDMgKiBpXSA9IHRoaXMuX3NlY3Rpb25WZWN0b3JzW2ldLng7CisgICAgICAg
ICAgICAgICAgcG9zaXRpb25zW2wgKyAzICogaSArIDFdID0gdGhpcy5fc2VjdGlvblZlY3RvcnNb
aV0ueTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbnNbbCArIDMgKiBpICsgMl0gPSB0aGlzLl9z
ZWN0aW9uVmVjdG9yc1tpXS56OworICAgICAgICAgICAgICAgIG5vcm1hbHNbbCArIDMgKiBpXSA9
IHRoaXMuX3NlY3Rpb25Ob3JtYWxWZWN0b3JzW2ldLng7CisgICAgICAgICAgICAgICAgbm9ybWFs
c1tsICsgMyAqIGkgKyAxXSA9IHRoaXMuX3NlY3Rpb25Ob3JtYWxWZWN0b3JzW2ldLnk7CisgICAg
ICAgICAgICAgICAgbm9ybWFsc1tsICsgMyAqIGkgKyAyXSA9IHRoaXMuX3NlY3Rpb25Ob3JtYWxW
ZWN0b3JzW2ldLno7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnVwZGF0ZVZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0
ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHBvc2l0aW9ucywgdHJ1ZSwgZmFsc2UpOworICAgICAg
ICAgICAgdGhpcy51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCwgbm9ybWFscywgdHJ1
ZSwgZmFsc2UpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEg
bmV3IFRyYWlsTWVzaCBvYmplY3QuCisgICAgICogQHBhcmFtIG5hbWUgaXMgYSBzdHJpbmcsIHRo
ZSBuYW1lIGdpdmVuIHRvIHRoZSBuZXcgbWVzaAorICAgICAqIEBwYXJhbSBuZXdHZW5lcmF0b3Ig
dXNlIG5ldyBnZW5lcmF0b3Igb2JqZWN0IGZvciBjbG9uZWQgdHJhaWwgbWVzaAorICAgICAqIEBy
ZXR1cm5zIGEgbmV3IG1lc2gKKyAgICAgKi8KKyAgICBUcmFpbE1lc2gucHJvdG90eXBlLmNsb25l
ID0gZnVuY3Rpb24gKG5hbWUsIG5ld0dlbmVyYXRvcikgeworICAgICAgICBpZiAobmFtZSA9PT0g
dm9pZCAwKSB7IG5hbWUgPSAiIjsgfQorICAgICAgICByZXR1cm4gbmV3IFRyYWlsTWVzaChuYW1l
LCAobmV3R2VuZXJhdG9yID09PSB1bmRlZmluZWQgPyB0aGlzLl9nZW5lcmF0b3IgOiBuZXdHZW5l
cmF0b3IpLCB0aGlzLmdldFNjZW5lKCksIHRoaXMuX2RpYW1ldGVyLCB0aGlzLl9sZW5ndGgsIHRo
aXMuX2F1dG9TdGFydCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoaXMg
dHJhaWwgbWVzaAorICAgICAqIEBwYXJhbSBzZXJpYWxpemF0aW9uT2JqZWN0IG9iamVjdCB0byB3
cml0ZSBzZXJpYWxpemF0aW9uIHRvCisgICAgICovCisgICAgVHJhaWxNZXNoLnByb3RvdHlwZS5z
ZXJpYWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlvbk9iamVjdCkgeworICAgICAgICBfc3Vw
ZXIucHJvdG90eXBlLnNlcmlhbGl6ZS5jYWxsKHRoaXMsIHNlcmlhbGl6YXRpb25PYmplY3QpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2VzIGEgc2VyaWFsaXplZCB0cmFpbCBtZXNoCisg
ICAgICogQHBhcmFtIHBhcnNlZE1lc2ggdGhlIHNlcmlhbGl6ZWQgbWVzaAorICAgICAqIEBwYXJh
bSBzY2VuZSB0aGUgc2NlbmUgdG8gY3JlYXRlIHRoZSB0cmFpbCBtZXNoIGluCisgICAgICogQHJl
dHVybnMgdGhlIGNyZWF0ZWQgdHJhaWwgbWVzaAorICAgICAqLworICAgIFRyYWlsTWVzaC5QYXJz
ZSA9IGZ1bmN0aW9uIChwYXJzZWRNZXNoLCBzY2VuZSkgeworICAgICAgICByZXR1cm4gbmV3IFRy
YWlsTWVzaChwYXJzZWRNZXNoLm5hbWUsIHBhcnNlZE1lc2guX2dlbmVyYXRvciwgc2NlbmUsIHBh
cnNlZE1lc2guX2RpYW1ldGVyLCBwYXJzZWRNZXNoLl9sZW5ndGgsIHBhcnNlZE1lc2guX2F1dG9T
dGFydCk7CisgICAgfTsKKyAgICByZXR1cm4gVHJhaWxNZXNoOworfShfTWVzaGVzX21lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWVzaGVzL3RyYW5zZm9ybU5vZGUudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NZXNoZXMvdHJhbnNmb3JtTm9kZS50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogVHJhbnNmb3JtTm9kZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJUcmFuc2Zvcm1Ob2RlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUcmFuc2Zvcm1Ob2RlOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90
c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICov
ICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3Iu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZSAqLyAiLi9ub2RlLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0
aC5heGlzICovICIuL01hdGhzL21hdGguYXhpcy50cyIpOworCisKKworCisKKworLyoqCisgKiBB
IFRyYW5zZm9ybU5vZGUgaXMgYW4gb2JqZWN0IHRoYXQgaXMgbm90IHJlbmRlcmVkIGJ1dCBjYW4g
YmUgdXNlZCBhcyBhIGNlbnRlciBvZiB0cmFuc2Zvcm1hdGlvbi4gVGhpcyBjYW4gZGVjcmVhc2Ug
bWVtb3J5IHVzYWdlIGFuZCBpbmNyZWFzZSByZW5kZXJpbmcgc3BlZWQgY29tcGFyZWQgdG8gdXNp
bmcgYW4gZW1wdHkgbWVzaCBhcyBhIHBhcmVudCBhbmQgaXMgbGVzcyBjb21wbGljYXRlZCB0aGFu
IHVzaW5nIGEgcGl2b3QgbWF0cml4LgorICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by90cmFuc2Zvcm1ub2RlCisgKi8KK3ZhciBUcmFuc2Zvcm1Ob2RlID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKFRyYW5zZm9ybU5vZGUsIF9zdXBlcik7CisgICAgZnVuY3Rp
b24gVHJhbnNmb3JtTm9kZShuYW1lLCBzY2VuZSwgaXNQdXJlKSB7CisgICAgICAgIGlmIChzY2Vu
ZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICBpZiAoaXNQdXJlID09PSB2
b2lkIDApIHsgaXNQdXJlID0gdHJ1ZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2Fs
bCh0aGlzLCBuYW1lLCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuX2ZvcndhcmQgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXSgwLCAwLCAxKTsKKyAgICAgICAgX3RoaXMuX2ZvcndhcmRJbnZlcnRlZCA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAs
IDAsIC0xKTsKKyAgICAgICAgX3RoaXMuX3VwID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMSwgMCk7CisgICAgICAgIF90
aGlzLl9yaWdodCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdKDEsIDAsIDApOworICAgICAgICBfdGhpcy5fcmlnaHRJbnZlcnRl
ZCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdKC0xLCAwLCAwKTsKKyAgICAgICAgLy8gUHJvcGVydGllcworICAgICAgICBfdGhp
cy5fcG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgX3RoaXMuX3JvdGF0aW9uID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIF90aGlzLl9yb3RhdGlvblF1YXRlcm5pb24gPSBudWxsOworICAgICAgICBf
dGhpcy5fc2NhbGluZyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZWN0b3IzIl0uT25lKCk7CisgICAgICAgIF90aGlzLl9pc0RpcnR5ID0gZmFsc2U7
CisgICAgICAgIF90aGlzLl90cmFuc2Zvcm1Ub0JvbmVSZWZlcmFsID0gbnVsbDsKKyAgICAgICAg
X3RoaXMuX2lzQWJzb2x1dGVTeW5jZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2JpbGxib2Fy
ZE1vZGUgPSBUcmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1PREVfTk9ORTsKKyAgICAgICAgX3RoaXMu
X3ByZXNlcnZlUGFyZW50Um90YXRpb25Gb3JCaWxsYm9hcmQgPSBmYWxzZTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIE11bHRpcGxpY2F0aW9uIGZhY3RvciBvbiBzY2FsZSB4L3kveiB3aGVuIGNv
bXB1dGluZyB0aGUgd29ybGQgbWF0cml4LiBFZy4gZm9yIGEgMXgxeDEgY3ViZSBzZXR0aW5nIHRo
aXMgdG8gMiB3aWxsIG1ha2UgaXQgYSAyeDJ4MiBjdWJlCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5zY2FsaW5nRGV0ZXJtaW5hbnQgPSAxOworICAgICAgICBfdGhpcy5faW5maW5pdGVEaXN0
YW5jZSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9v
bGVhbiBpbmRpY2F0aW5nIHRoYXQgbm9uIHVuaWZvcm0gc2NhbGluZyAod2hlbiBhdCBsZWFzdCBv
bmUgY29tcG9uZW50IGlzIGRpZmZlcmVudCBmcm9tIG90aGVycykgc2hvdWxkIGJlIGlnbm9yZWQu
CisgICAgICAgICAqIEJ5IGRlZmF1bHQgdGhlIHN5c3RlbSB3aWxsIHVwZGF0ZSBub3JtYWxzIHRv
IGNvbXBlbnNhdGUKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmlnbm9yZU5vblVuaWZvcm1T
Y2FsaW5nID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBi
b29sZWFuIGluZGljYXRpbmcgdGhhdCBldmVuIGlmIHJvdGF0aW9uUXVhdGVybmlvbiBpcyBkZWZp
bmVkLCB5b3UgY2FuIGtlZXAgdXBkYXRpbmcgcm90YXRpb24gcHJvcGVydHkgYW5kIEJhYnlsb24u
anMgd2lsbCBqdXN0IG1peCBib3RoCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5yZUludGVn
cmF0ZVJvdGF0aW9uSW50b1JvdGF0aW9uUXVhdGVybmlvbiA9IGZhbHNlOworICAgICAgICAvLyBD
YWNoZQorICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhpcy5fcG9zZU1hdHJpeCA9
IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9sb2NhbE1hdHJp
eCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRy
aXgiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl91c2VQaXZvdE1hdHJpeCA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5fYWJzb2x1dGVQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBfdGhpcy5f
YWJzb2x1dGVTY2FsaW5nID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9hYnNvbHV0ZVJvdGF0
aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJRdWF0ZXJuaW9uIl0uSWRlbnRpdHkoKTsKKyAgICAgICAgX3RoaXMuX3Bpdm90TWF0
cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1h
dHJpeCJdLklkZW50aXR5KCk7CisgICAgICAgIF90aGlzLl9wb3N0TXVsdGlwbHlQaXZvdE1hdHJp
eCA9IGZhbHNlOworICAgICAgICBfdGhpcy5faXNXb3JsZE1hdHJpeEZyb3plbiA9IGZhbHNlOwor
ICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhpcy5faW5kZXhJblNjZW5lVHJhbnNm
b3JtTm9kZXNBcnJheSA9IC0xOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0cmln
Z2VyZWQgYWZ0ZXIgdGhlIHdvcmxkIG1hdHJpeCBpcyB1cGRhdGVkCisgICAgICAgICovCisgICAg
ICAgIF90aGlzLm9uQWZ0ZXJXb3JsZE1hdHJpeFVwZGF0ZU9ic2VydmFibGUgPSBuZXcgX01pc2Nf
b2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsK
KyAgICAgICAgX3RoaXMuX25vblVuaWZvcm1TY2FsaW5nID0gZmFsc2U7CisgICAgICAgIGlmIChp
c1B1cmUpIHsKKyAgICAgICAgICAgIF90aGlzLmdldFNjZW5lKCkuYWRkVHJhbnNmb3JtTm9kZShf
dGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJiaWxsYm9hcmRNb2Rl
IiwgeworICAgICAgICAvKioKKyAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGJpbGxib2FyZCBt
b2RlLiBEZWZhdWx0IGlzIDAuCisgICAgICAgICoKKyAgICAgICAgKiB8IFZhbHVlIHwgVHlwZSB8
IERlc2NyaXB0aW9uIHwKKyAgICAgICAgKiB8IC0tLSB8IC0tLSB8IC0tLSB8CisgICAgICAgICog
fCAwIHwgQklMTEJPQVJETU9ERV9OT05FIHwgIHwKKyAgICAgICAgKiB8IDEgfCBCSUxMQk9BUkRN
T0RFX1ggfCAgfAorICAgICAgICAqIHwgMiB8IEJJTExCT0FSRE1PREVfWSB8ICB8CisgICAgICAg
ICogfCA0IHwgQklMTEJPQVJETU9ERV9aIHwgIHwKKyAgICAgICAgKiB8IDcgfCBCSUxMQk9BUkRN
T0RFX0FMTCB8ICB8CisgICAgICAgICoKKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmlsbGJvYXJkTW9kZTsKKyAgICAgICAg
fSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9iaWxsYm9hcmRNb2RlID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2JpbGxib2FyZE1vZGUgPSB2YWx1ZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybU5vZGUu
cHJvdG90eXBlLCAicHJlc2VydmVQYXJlbnRSb3RhdGlvbkZvckJpbGxib2FyZCIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0
IHBhcmVudCByb3RhdGlvbiBzaG91bGQgYmUgcHJlc2VydmVkIHdoZW4gdXNpbmcgYmlsbGJvYXJk
cy4KKyAgICAgICAgICogVGhpcyBjb3VsZCBiZSB1c2VmdWwgZm9yIGdsVEYgb2JqZWN0cyB3aGVy
ZSBwYXJlbnQgcm90YXRpb24gaGVscHMgY29udmVydGluZyBmcm9tIHJpZ2h0IGhhbmRlZCB0byBs
ZWZ0IGhhbmRlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fcHJlc2VydmVQYXJlbnRSb3RhdGlvbkZvckJpbGxib2FyZDsK
KyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IGlmICh2YWx1ZSA9PT0gdGhpcy5fcHJlc2VydmVQYXJlbnRSb3RhdGlvbkZvckJpbGxib2FyZCkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX3ByZXNlcnZlUGFyZW50Um90YXRpb25Gb3JCaWxsYm9hcmQgPSB2YWx1ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybU5vZGUucHJvdG90
eXBlLCAiaW5maW5pdGVEaXN0YW5jZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
b3Igc2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIG9iamVjdCB0byBtYXgsIG9mdGVuIHVzZWQgYnkg
c2t5Ym94CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9pbmZpbml0ZURpc3RhbmNlOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2luZmluaXRlRGlz
dGFuY2UgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5faW5maW5pdGVEaXN0YW5jZSA9IHZhbHVlOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBu
YW1lIG9mIHRoZSBjbGFzcworICAgICAqIEByZXR1cm5zICJUcmFuc2Zvcm1Ob2RlIiBzdHJpbmcK
KyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiVHJhbnNmb3JtTm9kZSI7CisgICAgfTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJwb3NpdGlvbiIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAgKiBHZXRzIG9yIHNldCB0aGUgbm9kZSBwb3NpdGlv
biAoZGVmYXVsdCBpcyAoMC4wLCAwLjAsIDAuMCkpCisgICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247CisgICAg
ICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Bvc2l0aW9uKSB7CisgICAgICAgICAg
ICB0aGlzLl9wb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworICAgICAgICAgICAgdGhpcy5faXNEaXJ0
eSA9IHRydWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShU
cmFuc2Zvcm1Ob2RlLnByb3RvdHlwZSwgInJvdGF0aW9uIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcm90YXRpb24gcHJvcGVydHkgOiBhIFZlY3RvcjMgZGVm
aW5pbmcgdGhlIHJvdGF0aW9uIHZhbHVlIGluIHJhZGlhbnMgYXJvdW5kIGVhY2ggbG9jYWwgYXhp
cyBYLCBZLCBaICAoZGVmYXVsdCBpcyAoMC4wLCAwLjAsIDAuMCkpLgorICAgICAgICAgICogSWYg
cm90YXRpb24gcXVhdGVybmlvbiBpcyBzZXQsIHRoaXMgVmVjdG9yMyB3aWxsIGJlIGlnbm9yZWQg
YW5kIGNvcHkgZnJvbSB0aGUgcXVhdGVybmlvbgorICAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JvdGF0aW9uOworICAgICAg
ICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdSb3RhdGlvbikgeworICAgICAgICAgICAg
dGhpcy5fcm90YXRpb24gPSBuZXdSb3RhdGlvbjsKKyAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9u
UXVhdGVybmlvbiA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybU5vZGUu
cHJvdG90eXBlLCAic2NhbGluZyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Ig
c2V0cyB0aGUgc2NhbGluZyBwcm9wZXJ0eSA6IGEgVmVjdG9yMyBkZWZpbmluZyB0aGUgbm9kZSBz
Y2FsaW5nIGFsb25nIGVhY2ggbG9jYWwgYXhpcyBYLCBZLCBaIChkZWZhdWx0IGlzICgwLjAsIDAu
MCwgMC4wKSkuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zY2FsaW5nOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uIChuZXdTY2FsaW5nKSB7CisgICAgICAgICAgICB0aGlzLl9zY2FsaW5nID0gbmV3U2Nh
bGluZzsKKyAgICAgICAgICAgIHRoaXMuX2lzRGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJy
b3RhdGlvblF1YXRlcm5pb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNl
dHMgdGhlIHJvdGF0aW9uIFF1YXRlcm5pb24gcHJvcGVydHkgOiB0aGlzIGEgUXVhdGVybmlvbiBv
YmplY3QgZGVmaW5pbmcgdGhlIG5vZGUgcm90YXRpb24gYnkgdXNpbmcgYSB1bml0IHF1YXRlcm5p
b24gKHVuZGVmaW5lZCBieSBkZWZhdWx0LCBidXQgY2FuIGJlIG51bGwpLgorICAgICAgICAgKiBJ
ZiBzZXQsIG9ubHkgdGhlIHJvdGF0aW9uUXVhdGVybmlvbiBpcyB0aGVuIHVzZWQgdG8gY29tcHV0
ZSB0aGUgbm9kZSByb3RhdGlvbiAoaWUuIG5vZGUucm90YXRpb24gd2lsbCBiZSBpZ25vcmVkKQor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uIChxdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICB0aGlzLl9yb3RhdGlvblF1YXRlcm5p
b24gPSBxdWF0ZXJuaW9uOworICAgICAgICAgICAgLy9yZXNldCB0aGUgcm90YXRpb24gdmVjdG9y
LgorICAgICAgICAgICAgaWYgKHF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9y
b3RhdGlvbi5zZXRBbGwoMC4wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2lz
RGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJmb3J3YXJkIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogVGhlIGZvcndhcmQgZGlyZWN0aW9uIG9mIHRoYXQgdHJhbnNmb3JtIGluIHdvcmxk
IHNwYWNlLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlZlY3RvcjMiXS5Ob3JtYWxpemUoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwodGhpcy5nZXRTY2VuZSgp
LnVzZVJpZ2h0SGFuZGVkU3lzdGVtID8gdGhpcy5fZm9yd2FyZEludmVydGVkIDogdGhpcy5fZm9y
d2FyZCwgdGhpcy5nZXRXb3JsZE1hdHJpeCgpKSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZSwgInVwIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogVGhlIHVwIGRpcmVjdGlvbiBvZiB0aGF0IHRyYW5zZm9ybSBp
biB3b3JsZCBzcGFjZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZWN0b3IzIl0uTm9ybWFsaXplKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKHRoaXMuX3Vw
LCB0aGlzLmdldFdvcmxkTWF0cml4KCkpKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLCAicmlnaHQiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBUaGUgcmlnaHQgZGlyZWN0aW9uIG9mIHRoYXQgdHJhbnNmb3Jt
IGluIHdvcmxkIHNwYWNlLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlY3RvcjMiXS5Ob3JtYWxpemUoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwodGhpcy5n
ZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVtID8gdGhpcy5fcmlnaHRJbnZlcnRlZCA6IHRo
aXMuX3JpZ2h0LCB0aGlzLmdldFdvcmxkTWF0cml4KCkpKTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgLyoqCisgICAgICogQ29waWVzIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIE1hdHJpeCBpbnRvIHRo
ZSBtZXNoIFBvc2UgbWF0cml4LgorICAgICAqIEBwYXJhbSBtYXRyaXggdGhlIG1hdHJpeCB0byBj
b3B5IHRoZSBwb3NlIGZyb20KKyAgICAgKiBAcmV0dXJucyB0aGlzIFRyYW5zZm9ybU5vZGUuCisg
ICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUudXBkYXRlUG9zZU1hdHJpeCA9IGZ1
bmN0aW9uIChtYXRyaXgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9wb3NlTWF0cml4KSB7CisgICAg
ICAgICAgICB0aGlzLl9wb3NlTWF0cml4ID0gbWF0cml4LmNsb25lKCk7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9wb3NlTWF0cml4LmNvcHlGcm9t
KG1hdHJpeCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICog
UmV0dXJucyB0aGUgbWVzaCBQb3NlIG1hdHJpeC4KKyAgICAgKiBAcmV0dXJucyB0aGUgcG9zZSBt
YXRyaXgKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5nZXRQb3NlTWF0cml4
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX3Bvc2VNYXRyaXgpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3Bvc2VNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdGhpcy5fcG9zZU1hdHJpeDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUuX2lzU3luY2hyb25pemVkID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTsKKyAgICAgICAgaWYgKHRoaXMuYmls
bGJvYXJkTW9kZSAhPT0gY2FjaGUuYmlsbGJvYXJkTW9kZSB8fCB0aGlzLmJpbGxib2FyZE1vZGUg
IT09IFRyYW5zZm9ybU5vZGUuQklMTEJPQVJETU9ERV9OT05FKSB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhY2hlLnBpdm90TWF0cml4VXBkYXRl
ZCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLmluZmluaXRlRGlzdGFuY2UpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWNhY2hlLnBvc2l0aW9uLmVxdWFscyh0aGlzLl9wb3NpdGlvbikp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy5fcm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICBpZiAoIWNhY2hlLnJvdGF0aW9u
UXVhdGVybmlvbi5lcXVhbHModGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uKSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmICghY2FjaGUucm90YXRpb24uZXF1YWxzKHRoaXMuX3JvdGF0aW9uKSkgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghY2FjaGUuc2NhbGlu
Zy5lcXVhbHModGhpcy5fc2NhbGluZykpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICov
CisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUuX2luaXRDYWNoZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5faW5pdENhY2hlLmNhbGwodGhpcyk7CisgICAgICAg
IHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlOworICAgICAgICBjYWNoZS5sb2NhbE1hdHJpeFVwZGF0
ZWQgPSBmYWxzZTsKKyAgICAgICAgY2FjaGUucG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAg
Y2FjaGUuc2NhbGluZyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBjYWNoZS5yb3RhdGlvbiA9IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVy
bygpOworICAgICAgICBjYWNoZS5yb3RhdGlvblF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXSgwLCAwLCAw
LCAwKTsKKyAgICAgICAgY2FjaGUuYmlsbGJvYXJkTW9kZSA9IC0xOworICAgICAgICBjYWNoZS5p
bmZpbml0ZURpc3RhbmNlID0gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAqIEZsYWcgdGhl
IHRyYW5zZm9ybSBub2RlIGFzIGRpcnR5IChGb3JjaW5nIGl0IHRvIHVwZGF0ZSBldmVyeXRoaW5n
KQorICAgICogQHBhcmFtIHByb3BlcnR5IGlmIHNldCB0byAicm90YXRpb24iIHRoZSBvYmplY3Rz
IHJvdGF0aW9uUXVhdGVybmlvbiB3aWxsIGJlIHNldCB0byBudWxsCisgICAgKiBAcmV0dXJucyB0
aGlzIHRyYW5zZm9ybSBub2RlCisgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5t
YXJrQXNEaXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkgeworICAgICAgICB0aGlzLl9jdXJyZW50
UmVuZGVySWQgPSBOdW1iZXIuTUFYX1ZBTFVFOworICAgICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJhYnNvbHV0ZVBvc2l0aW9uIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBtZXNoIGFic29sdXRlIHBvc2l0
aW9uLgorICAgICAgICAgKiBSZXR1cm5zIGEgVmVjdG9yMy4KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Fic29sdXRlUG9z
aXRpb247CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmFu
c2Zvcm1Ob2RlLnByb3RvdHlwZSwgImFic29sdXRlU2NhbGluZyIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbWVzaCBhYnNvbHV0ZSBzY2FsaW5nLgorICAg
ICAgICAgKiBSZXR1cm5zIGEgVmVjdG9yMy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5fc3luY0Fic29sdXRlU2NhbGluZ0FuZFJvdGF0
aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWJzb2x1dGVTY2FsaW5nOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtTm9kZS5wcm90
b3R5cGUsICJhYnNvbHV0ZVJvdGF0aW9uUXVhdGVybmlvbiIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbWVzaCBhYnNvbHV0ZSByb3RhdGlvbi4KKyAgICAg
ICAgICogUmV0dXJucyBhIFF1YXRlcm5pb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuX3N5bmNBYnNvbHV0ZVNjYWxpbmdBbmRSb3Rh
dGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Fic29sdXRlUm90YXRpb25RdWF0ZXJu
aW9uOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgbmV3IG1hdHJp
eCB0byBhcHBseSBiZWZvcmUgYWxsIG90aGVyIHRyYW5zZm9ybWF0aW9uCisgICAgICogQHBhcmFt
IG1hdHJpeCBkZWZpbmVzIHRoZSB0cmFuc2Zvcm0gbWF0cml4CisgICAgICogQHJldHVybnMgdGhl
IGN1cnJlbnQgVHJhbnNmb3JtTm9kZQorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90
eXBlLnNldFByZVRyYW5zZm9ybU1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuc2V0UGl2b3RNYXRyaXgobWF0cml4LCBmYWxzZSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIGEgbmV3IHBpdm90IG1hdHJpeCB0byB0aGUgY3VycmVudCBub2RlCisg
ICAgICogQHBhcmFtIG1hdHJpeCBkZWZpbmVzIHRoZSBuZXcgcGl2b3QgbWF0cml4IHRvIHVzZQor
ICAgICAqIEBwYXJhbSBwb3N0TXVsdGlwbHlQaXZvdE1hdHJpeCBkZWZpbmVzIGlmIHRoZSBwaXZv
dCBtYXRyaXggbXVzdCBiZSBjYW5jZWxsZWQgaW4gdGhlIHdvcmxkIG1hdHJpeC4gV2hlbiB0aGlz
IHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZSAoZGVmYXVsdCksIHRoZSBpbnZlcnNlIG9mIHRoZSBw
aXZvdCBtYXRyaXggaXMgYWxzbyBhcHBsaWVkIGF0IHRoZSBlbmQgdG8gY2FuY2VsIHRoZSB0cmFu
c2Zvcm1hdGlvbiBlZmZlY3QKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBUcmFuc2Zvcm1O
b2RlCisgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5zZXRQaXZvdE1hdHJpeCA9
IGZ1bmN0aW9uIChtYXRyaXgsIHBvc3RNdWx0aXBseVBpdm90TWF0cml4KSB7CisgICAgICAgIGlm
IChwb3N0TXVsdGlwbHlQaXZvdE1hdHJpeCA9PT0gdm9pZCAwKSB7IHBvc3RNdWx0aXBseVBpdm90
TWF0cml4ID0gdHJ1ZTsgfQorICAgICAgICB0aGlzLl9waXZvdE1hdHJpeC5jb3B5RnJvbShtYXRy
aXgpOworICAgICAgICB0aGlzLl91c2VQaXZvdE1hdHJpeCA9ICF0aGlzLl9waXZvdE1hdHJpeC5p
c0lkZW50aXR5KCk7CisgICAgICAgIHRoaXMuX2NhY2hlLnBpdm90TWF0cml4VXBkYXRlZCA9IHRy
dWU7CisgICAgICAgIHRoaXMuX3Bvc3RNdWx0aXBseVBpdm90TWF0cml4ID0gcG9zdE11bHRpcGx5
UGl2b3RNYXRyaXg7CisgICAgICAgIGlmICh0aGlzLl9wb3N0TXVsdGlwbHlQaXZvdE1hdHJpeCkg
eworICAgICAgICAgICAgaWYgKCF0aGlzLl9waXZvdE1hdHJpeEludmVyc2UpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9waXZvdE1hdHJpeEludmVyc2UgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uSW52ZXJ0KHRoaXMuX3Bpdm90TWF0
cml4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHRoaXMuX3Bpdm90TWF0cml4LmludmVydFRvUmVmKHRoaXMuX3Bpdm90TWF0cml4SW52ZXJzZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBtZXNoIHBpdm90IG1hdHJpeC4KKyAgICAgKiBE
ZWZhdWx0IDogSWRlbnRpdHkuCisgICAgICogQHJldHVybnMgdGhlIG1hdHJpeAorICAgICAqLwor
ICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLmdldFBpdm90TWF0cml4ID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5fcGl2b3RNYXRyaXg7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBJbnN0YW50aWF0ZSAod2hlbiBwb3NzaWJsZSkgb3IgY2xvbmUgdGhhdCBub2RlIHdpdGgg
aXRzIGhpZXJhcmNoeQorICAgICAqIEBwYXJhbSBuZXdQYXJlbnQgZGVmaW5lcyB0aGUgbmV3IHBh
cmVudCB0byB1c2UgZm9yIHRoZSBpbnN0YW5jZSAob3IgY2xvbmUpCisgICAgICogQHJldHVybnMg
YW4gaW5zdGFuY2UgKG9yIGEgY2xvbmUpIG9mIHRoZSBjdXJyZW50IG5vZGUgd2l0aCBpdHMgaGll
YXJjaHkKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5pbnN0YW50aWF0ZUhp
ZXJhcnljaHkgPSBmdW5jdGlvbiAobmV3UGFyZW50KSB7CisgICAgICAgIGlmIChuZXdQYXJlbnQg
PT09IHZvaWQgMCkgeyBuZXdQYXJlbnQgPSBudWxsOyB9CisgICAgICAgIHZhciBjbG9uZSA9IHRo
aXMuY2xvbmUoIkNsb25lIG9mICIgKyAodGhpcy5uYW1lIHx8IHRoaXMuaWQpLCBuZXdQYXJlbnQg
fHwgdGhpcy5wYXJlbnQsIHRydWUpOworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhp
cy5nZXRDaGlsZFRyYW5zZm9ybU5vZGVzKHRydWUpOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewor
ICAgICAgICAgICAgdmFyIGNoaWxkID0gX2FbX2ldOworICAgICAgICAgICAgY2hpbGQuaW5zdGFu
dGlhdGVIaWVyYXJ5Y2h5KGNsb25lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2xvbmU7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcmV2ZW50cyB0aGUgV29ybGQgbWF0cml4IHRvIGJl
IGNvbXB1dGVkIGFueSBsb25nZXIKKyAgICAgKiBAcGFyYW0gbmV3V29ybGRNYXRyaXggZGVmaW5l
cyBhbiBvcHRpb25hbCBtYXRyaXggdG8gdXNlIGFzIHdvcmxkIG1hdHJpeAorICAgICAqIEByZXR1
cm5zIHRoZSBUcmFuc2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90
eXBlLmZyZWV6ZVdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKG5ld1dvcmxkTWF0cml4KSB7CisgICAg
ICAgIGlmIChuZXdXb3JsZE1hdHJpeCA9PT0gdm9pZCAwKSB7IG5ld1dvcmxkTWF0cml4ID0gbnVs
bDsgfQorICAgICAgICBpZiAobmV3V29ybGRNYXRyaXgpIHsKKyAgICAgICAgICAgIHRoaXMuX3dv
cmxkTWF0cml4ID0gdGhpcy5fd29ybGRNYXRyaXg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB0aGlzLl9pc1dvcmxkTWF0cml4RnJvemVuID0gZmFsc2U7IC8vIG5vIGd1
YXJhbnRlZSB3b3JsZCBpcyBub3QgYWxyZWFkeSBmcm96ZW4sIHN3aXRjaCBvZmYgdGVtcG9yYXJp
bHkKKyAgICAgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX2lzV29ybGRNYXRyaXhGcm96ZW4gPSB0cnVlOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFsbG93cyBiYWNrIHRoZSBXb3JsZCBt
YXRyaXggY29tcHV0YXRpb24uCisgICAgICogQHJldHVybnMgdGhlIFRyYW5zZm9ybU5vZGUuCisg
ICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUudW5mcmVlemVXb3JsZE1hdHJpeCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faXNXb3JsZE1hdHJpeEZyb3plbiA9IGZhbHNl
OworICAgICAgICB0aGlzLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtTm9kZS5w
cm90b3R5cGUsICJpc1dvcmxkTWF0cml4RnJvemVuIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogVHJ1ZSBpZiB0aGUgV29ybGQgbWF0cml4IGhhcyBiZWVuIGZyb3plbi4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lz
V29ybGRNYXRyaXhGcm96ZW47CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICogUmV0
dW5zIHRoZSBtZXNoIGFic29sdXRlIHBvc2l0aW9uIGluIHRoZSBXb3JsZC4KKyAgICAqIEByZXR1
cm5zIGEgVmVjdG9yMy4KKyAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLmdldEFi
c29sdXRlUG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxk
TWF0cml4KCk7CisgICAgICAgIHJldHVybiB0aGlzLl9hYnNvbHV0ZVBvc2l0aW9uOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgbWVzaCBhYnNvbHV0ZSBwb3NpdGlvbiBpbiB0aGUg
V29ybGQgZnJvbSBhIFZlY3RvcjMgb3IgYW4gQXJyYXkoMykuCisgICAgICogQHBhcmFtIGFic29s
dXRlUG9zaXRpb24gdGhlIGFic29sdXRlIHBvc2l0aW9uIHRvIHNldAorICAgICAqIEByZXR1cm5z
IHRoZSBUcmFuc2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBl
LnNldEFic29sdXRlUG9zaXRpb24gPSBmdW5jdGlvbiAoYWJzb2x1dGVQb3NpdGlvbikgeworICAg
ICAgICBpZiAoIWFic29sdXRlUG9zaXRpb24pIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICB9CisgICAgICAgIHZhciBhYnNvbHV0ZVBvc2l0aW9uWDsKKyAgICAgICAgdmFyIGFi
c29sdXRlUG9zaXRpb25ZOworICAgICAgICB2YXIgYWJzb2x1dGVQb3NpdGlvblo7CisgICAgICAg
IGlmIChhYnNvbHV0ZVBvc2l0aW9uLnggPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uWCA9IGFyZ3VtZW50c1sw
XTsKKyAgICAgICAgICAgIGFic29sdXRlUG9zaXRpb25ZID0gYXJndW1lbnRzWzFdOworICAgICAg
ICAgICAgYWJzb2x1dGVQb3NpdGlvblogPSBhcmd1bWVudHNbMl07CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uWCA9IGFic29sdXRlUG9zaXRp
b24ueDsKKyAgICAgICAgICAgIGFic29sdXRlUG9zaXRpb25ZID0gYWJzb2x1dGVQb3NpdGlvbi55
OworICAgICAgICAgICAgYWJzb2x1dGVQb3NpdGlvblogPSBhYnNvbHV0ZVBvc2l0aW9uLno7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7CisgICAgICAgICAgICB2YXIgaW52
ZXJ0UGFyZW50V29ybGRNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXTsKKyAgICAgICAgICAgIHRoaXMu
cGFyZW50LmdldFdvcmxkTWF0cml4KCkuaW52ZXJ0VG9SZWYoaW52ZXJ0UGFyZW50V29ybGRNYXRy
aXgpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc0Zyb21GbG9hdHNUb1JlZihh
YnNvbHV0ZVBvc2l0aW9uWCwgYWJzb2x1dGVQb3NpdGlvblksIGFic29sdXRlUG9zaXRpb25aLCBp
bnZlcnRQYXJlbnRXb3JsZE1hdHJpeCwgdGhpcy5wb3NpdGlvbik7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSBhYnNvbHV0ZVBvc2l0aW9u
WDsKKyAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IGFic29sdXRlUG9zaXRpb25ZOworICAg
ICAgICAgICAgdGhpcy5wb3NpdGlvbi56ID0gYWJzb2x1dGVQb3NpdGlvblo7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBt
ZXNoIHBvc2l0aW9uIGluIGl0cyBsb2NhbCBzcGFjZS4KKyAgICAgKiBAcGFyYW0gdmVjdG9yMyB0
aGUgcG9zaXRpb24gdG8gc2V0IGluIGxvY2Fsc3BhY2UKKyAgICAgKiBAcmV0dXJucyB0aGUgVHJh
bnNmb3JtTm9kZS4KKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5zZXRQb3Np
dGlvbldpdGhMb2NhbFZlY3RvciA9IGZ1bmN0aW9uICh2ZWN0b3IzKSB7CisgICAgICAgIHRoaXMu
Y29tcHV0ZVdvcmxkTWF0cml4KCk7CisgICAgICAgIHRoaXMucG9zaXRpb24gPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlRyYW5zZm9y
bU5vcm1hbCh2ZWN0b3IzLCB0aGlzLl9sb2NhbE1hdHJpeCk7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbWVzaCBwb3NpdGlvbiBpbiB0
aGUgbG9jYWwgc3BhY2UgZnJvbSB0aGUgY3VycmVudCBXb3JsZCBtYXRyaXggdmFsdWVzLgorICAg
ICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjMuCisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5w
cm90b3R5cGUuZ2V0UG9zaXRpb25FeHByZXNzZWRJbkxvY2FsU3BhY2UgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxkTWF0cml4KCk7CisgICAgICAgIHZhciBpbnZMb2Nh
bFdvcmxkTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF07CisgICAgICAgIHRoaXMuX2xvY2FsTWF0cml4
LmludmVydFRvUmVmKGludkxvY2FsV29ybGRNYXRyaXgpOworICAgICAgICByZXR1cm4gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFu
c2Zvcm1Ob3JtYWwodGhpcy5wb3NpdGlvbiwgaW52TG9jYWxXb3JsZE1hdHJpeCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBUcmFuc2xhdGVzIHRoZSBtZXNoIGFsb25nIHRoZSBwYXNzZWQgVmVj
dG9yMyBpbiBpdHMgbG9jYWwgc3BhY2UuCisgICAgICogQHBhcmFtIHZlY3RvcjMgdGhlIGRpc3Rh
bmNlIHRvIHRyYW5zbGF0ZSBpbiBsb2NhbHNwYWNlCisgICAgICogQHJldHVybnMgdGhlIFRyYW5z
Zm9ybU5vZGUuCisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUubG9jYWxseVRy
YW5zbGF0ZSA9IGZ1bmN0aW9uICh2ZWN0b3IzKSB7CisgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxk
TWF0cml4KHRydWUpOworICAgICAgICB0aGlzLnBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGlu
YXRlcyh2ZWN0b3IzLCB0aGlzLl9sb2NhbE1hdHJpeCk7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogT3JpZW50cyBhIG1lc2ggdG93YXJkcyBhIHRhcmdldCBw
b2ludC4gTWVzaCBtdXN0IGJlIGRyYXduIGZhY2luZyB1c2VyLgorICAgICAqIEBwYXJhbSB0YXJn
ZXRQb2ludCB0aGUgcG9zaXRpb24gKG11c3QgYmUgaW4gc2FtZSBzcGFjZSBhcyBjdXJyZW50IG1l
c2gpIHRvIGxvb2sgYXQKKyAgICAgKiBAcGFyYW0geWF3Q29yIG9wdGlvbmFsIHlhdyAoeS1heGlz
KSBjb3JyZWN0aW9uIGluIHJhZGlhbnMKKyAgICAgKiBAcGFyYW0gcGl0Y2hDb3Igb3B0aW9uYWwg
cGl0Y2ggKHgtYXhpcykgY29ycmVjdGlvbiBpbiByYWRpYW5zCisgICAgICogQHBhcmFtIHJvbGxD
b3Igb3B0aW9uYWwgcm9sbCAoei1heGlzKSBjb3JyZWN0aW9uIGluIHJhZGlhbnMKKyAgICAgKiBA
cGFyYW0gc3BhY2UgdGhlIGNob29zZW4gc3BhY2Ugb2YgdGhlIHRhcmdldAorICAgICAqIEByZXR1
cm5zIHRoZSBUcmFuc2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90
eXBlLmxvb2tBdCA9IGZ1bmN0aW9uICh0YXJnZXRQb2ludCwgeWF3Q29yLCBwaXRjaENvciwgcm9s
bENvciwgc3BhY2UpIHsKKyAgICAgICAgaWYgKHlhd0NvciA9PT0gdm9pZCAwKSB7IHlhd0NvciA9
IDA7IH0KKyAgICAgICAgaWYgKHBpdGNoQ29yID09PSB2b2lkIDApIHsgcGl0Y2hDb3IgPSAwOyB9
CisgICAgICAgIGlmIChyb2xsQ29yID09PSB2b2lkIDApIHsgcm9sbENvciA9IDA7IH0KKyAgICAg
ICAgaWYgKHNwYWNlID09PSB2b2lkIDApIHsgc3BhY2UgPSBfTWF0aHNfbWF0aF9heGlzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNwYWNlIl0uTE9DQUw7IH0KKyAgICAgICAgdmFyIGR2
ID0gVHJhbnNmb3JtTm9kZS5fbG9va0F0VmVjdG9yQ2FjaGU7CisgICAgICAgIHZhciBwb3MgPSBz
cGFjZSA9PT0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJT
cGFjZSJdLkxPQ0FMID8gdGhpcy5wb3NpdGlvbiA6IHRoaXMuZ2V0QWJzb2x1dGVQb3NpdGlvbigp
OworICAgICAgICB0YXJnZXRQb2ludC5zdWJ0cmFjdFRvUmVmKHBvcywgZHYpOworICAgICAgICB0
aGlzLnNldERpcmVjdGlvbihkdiwgeWF3Q29yLCBwaXRjaENvciwgcm9sbENvcik7CisgICAgICAg
IC8vIENvcnJlY3QgZm9yIHBhcmVudCdzIHJvdGF0aW9uIG9mZnNldAorICAgICAgICBpZiAoc3Bh
Y2UgPT09IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU3Bh
Y2UiXS5XT1JMRCAmJiB0aGlzLnBhcmVudCkgeworICAgICAgICAgICAgaWYgKHRoaXMucm90YXRp
b25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgLy8gR2V0IGxvY2FsIHJvdGF0aW9uIG1h
dHJpeCBvZiB0aGUgbG9va2luZyBvYmplY3QKKyAgICAgICAgICAgICAgICB2YXIgcm90YXRpb25N
YXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VG1wVmVjdG9ycyJdLk1hdHJpeFswXTsKKyAgICAgICAgICAgICAgICB0aGlzLnJvdGF0aW9uUXVh
dGVybmlvbi50b1JvdGF0aW9uTWF0cml4KHJvdGF0aW9uTWF0cml4KTsKKyAgICAgICAgICAgICAg
ICAvLyBPZmZzZXQgcm90YXRpb24gYnkgcGFyZW50J3MgaW52ZXJ0ZWQgcm90YXRpb24gbWF0cml4
IHRvIGNvcnJlY3QgaW4gd29ybGQgc3BhY2UKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50Um90
YXRpb25NYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsxXTsKKyAgICAgICAgICAgICAgICB0aGlzLnBhcmVu
dC5nZXRXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4VG9SZWYocGFyZW50Um90YXRpb25N
YXRyaXgpOworICAgICAgICAgICAgICAgIHBhcmVudFJvdGF0aW9uTWF0cml4LmludmVydCgpOwor
ICAgICAgICAgICAgICAgIHJvdGF0aW9uTWF0cml4Lm11bHRpcGx5VG9SZWYocGFyZW50Um90YXRp
b25NYXRyaXgsIHJvdGF0aW9uTWF0cml4KTsKKyAgICAgICAgICAgICAgICB0aGlzLnJvdGF0aW9u
UXVhdGVybmlvbi5mcm9tUm90YXRpb25NYXRyaXgocm90YXRpb25NYXRyaXgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gR2V0IGxvY2FsIHJv
dGF0aW9uIG1hdHJpeCBvZiB0aGUgbG9va2luZyBvYmplY3QKKyAgICAgICAgICAgICAgICB2YXIg
cXVhdGVybmlvblJvdGF0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5RdWF0ZXJuaW9uWzBdOworICAgICAgICAgICAgICAg
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJu
aW9uIl0uRnJvbUV1bGVyVmVjdG9yVG9SZWYodGhpcy5yb3RhdGlvbiwgcXVhdGVybmlvblJvdGF0
aW9uKTsKKyAgICAgICAgICAgICAgICB2YXIgcm90YXRpb25NYXRyaXggPSBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsw
XTsKKyAgICAgICAgICAgICAgICBxdWF0ZXJuaW9uUm90YXRpb24udG9Sb3RhdGlvbk1hdHJpeChy
b3RhdGlvbk1hdHJpeCk7CisgICAgICAgICAgICAgICAgLy8gT2Zmc2V0IHJvdGF0aW9uIGJ5IHBh
cmVudCdzIGludmVydGVkIHJvdGF0aW9uIG1hdHJpeCB0byBjb3JyZWN0IGluIHdvcmxkIHNwYWNl
CisgICAgICAgICAgICAgICAgdmFyIHBhcmVudFJvdGF0aW9uTWF0cml4ID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhb
MV07CisgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuZ2V0V29ybGRNYXRyaXgoKS5nZXRSb3Rh
dGlvbk1hdHJpeFRvUmVmKHBhcmVudFJvdGF0aW9uTWF0cml4KTsKKyAgICAgICAgICAgICAgICBw
YXJlbnRSb3RhdGlvbk1hdHJpeC5pbnZlcnQoKTsKKyAgICAgICAgICAgICAgICByb3RhdGlvbk1h
dHJpeC5tdWx0aXBseVRvUmVmKHBhcmVudFJvdGF0aW9uTWF0cml4LCByb3RhdGlvbk1hdHJpeCk7
CisgICAgICAgICAgICAgICAgcXVhdGVybmlvblJvdGF0aW9uLmZyb21Sb3RhdGlvbk1hdHJpeChy
b3RhdGlvbk1hdHJpeCk7CisgICAgICAgICAgICAgICAgcXVhdGVybmlvblJvdGF0aW9uLnRvRXVs
ZXJBbmdsZXNUb1JlZih0aGlzLnJvdGF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAgKiBSZXR1cm5zIGEg
bmV3IFZlY3RvcjMgdGhhdCBpcyB0aGUgbG9jYWxBeGlzLCBleHByZXNzZWQgaW4gdGhlIG1lc2gg
bG9jYWwgc3BhY2UsIHJvdGF0ZWQgbGlrZSB0aGUgbWVzaC4KKyAgICAgICogVGhpcyBWZWN0b3Iz
IGlzIGV4cHJlc3NlZCBpbiB0aGUgV29ybGQgc3BhY2UuCisgICAgICAqIEBwYXJhbSBsb2NhbEF4
aXMgYXhpcyB0byByb3RhdGUKKyAgICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMyB0aGF0IGlz
IHRoZSBsb2NhbEF4aXMsIGV4cHJlc3NlZCBpbiB0aGUgbWVzaCBsb2NhbCBzcGFjZSwgcm90YXRl
ZCBsaWtlIHRoZSBtZXNoLgorICAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5n
ZXREaXJlY3Rpb24gPSBmdW5jdGlvbiAobG9jYWxBeGlzKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9y
MyJdLlplcm8oKTsKKyAgICAgICAgdGhpcy5nZXREaXJlY3Rpb25Ub1JlZihsb2NhbEF4aXMsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXRzIHRoZSBWZWN0b3IzICJyZXN1bHQiIGFzIHRoZSByb3RhdGVkIFZlY3RvcjMgImxvY2FsQXhp
cyIgaW4gdGhlIHNhbWUgcm90YXRpb24gdGhhbiB0aGUgbWVzaC4KKyAgICAgKiBsb2NhbEF4aXMg
aXMgZXhwcmVzc2VkIGluIHRoZSBtZXNoIGxvY2FsIHNwYWNlLgorICAgICAqIHJlc3VsdCBpcyBj
b21wdXRlZCBpbiB0aGUgV29yZGwgc3BhY2UgZnJvbSB0aGUgbWVzaCBXb3JsZCBtYXRyaXguCisg
ICAgICogQHBhcmFtIGxvY2FsQXhpcyBheGlzIHRvIHJvdGF0ZQorICAgICAqIEBwYXJhbSByZXN1
bHQgdGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1ub2RlCisgICAgICogQHJldHVybnMgdGhpcyBUcmFu
c2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLmdldERpcmVj
dGlvblRvUmVmID0gZnVuY3Rpb24gKGxvY2FsQXhpcywgcmVzdWx0KSB7CisgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJh
bnNmb3JtTm9ybWFsVG9SZWYobG9jYWxBeGlzLCB0aGlzLmdldFdvcmxkTWF0cml4KCksIHJlc3Vs
dCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0
aGlzIHRyYW5zZm9ybSBub2RlIHJvdGF0aW9uIHRvIHRoZSBnaXZlbiBsb2NhbCBheGlzLgorICAg
ICAqIEBwYXJhbSBsb2NhbEF4aXMgdGhlIGF4aXMgaW4gbG9jYWwgc3BhY2UKKyAgICAgKiBAcGFy
YW0geWF3Q29yIG9wdGlvbmFsIHlhdyAoeS1heGlzKSBjb3JyZWN0aW9uIGluIHJhZGlhbnMKKyAg
ICAgKiBAcGFyYW0gcGl0Y2hDb3Igb3B0aW9uYWwgcGl0Y2ggKHgtYXhpcykgY29ycmVjdGlvbiBp
biByYWRpYW5zCisgICAgICogQHBhcmFtIHJvbGxDb3Igb3B0aW9uYWwgcm9sbCAoei1heGlzKSBj
b3JyZWN0aW9uIGluIHJhZGlhbnMKKyAgICAgKiBAcmV0dXJucyB0aGlzIFRyYW5zZm9ybU5vZGUK
KyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5zZXREaXJlY3Rpb24gPSBmdW5j
dGlvbiAobG9jYWxBeGlzLCB5YXdDb3IsIHBpdGNoQ29yLCByb2xsQ29yKSB7CisgICAgICAgIGlm
ICh5YXdDb3IgPT09IHZvaWQgMCkgeyB5YXdDb3IgPSAwOyB9CisgICAgICAgIGlmIChwaXRjaENv
ciA9PT0gdm9pZCAwKSB7IHBpdGNoQ29yID0gMDsgfQorICAgICAgICBpZiAocm9sbENvciA9PT0g
dm9pZCAwKSB7IHJvbGxDb3IgPSAwOyB9CisgICAgICAgIHZhciB5YXcgPSAtTWF0aC5hdGFuMihs
b2NhbEF4aXMueiwgbG9jYWxBeGlzLngpICsgTWF0aC5QSSAvIDI7CisgICAgICAgIHZhciBsZW4g
PSBNYXRoLnNxcnQobG9jYWxBeGlzLnggKiBsb2NhbEF4aXMueCArIGxvY2FsQXhpcy56ICogbG9j
YWxBeGlzLnopOworICAgICAgICB2YXIgcGl0Y2ggPSAtTWF0aC5hdGFuMihsb2NhbEF4aXMueSwg
bGVuKTsKKyAgICAgICAgaWYgKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAg
ICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVhdGVy
bmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYoeWF3ICsgeWF3Q29yLCBwaXRjaCArIHBp
dGNoQ29yLCByb2xsQ29yLCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLnJvdGF0aW9uLnggPSBwaXRjaCArIHBpdGNo
Q29yOworICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi55ID0geWF3ICsgeWF3Q29yOworICAgICAg
ICAgICAgdGhpcy5yb3RhdGlvbi56ID0gcm9sbENvcjsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYSBuZXcgcGl2b3QgcG9pbnQg
dG8gdGhlIGN1cnJlbnQgbm9kZQorICAgICAqIEBwYXJhbSBwb2ludCBkZWZpbmVzIHRoZSBuZXcg
cGl2b3QgcG9pbnQgdG8gdXNlCisgICAgICogQHBhcmFtIHNwYWNlIGRlZmluZXMgaWYgdGhlIHBv
aW50IGlzIGluIHdvcmxkIG9yIGxvY2FsIHNwYWNlIChsb2NhbCBieSBkZWZhdWx0KQorICAgICAq
IEByZXR1cm5zIHRoZSBjdXJyZW50IFRyYW5zZm9ybU5vZGUKKyAgICAqLworICAgIFRyYW5zZm9y
bU5vZGUucHJvdG90eXBlLnNldFBpdm90UG9pbnQgPSBmdW5jdGlvbiAocG9pbnQsIHNwYWNlKSB7
CisgICAgICAgIGlmIChzcGFjZSA9PT0gdm9pZCAwKSB7IHNwYWNlID0gX01hdGhzX21hdGhfYXhp
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTcGFjZSJdLkxPQ0FMOyB9CisgICAgICAg
IGlmICh0aGlzLmdldFNjZW5lKCkuZ2V0UmVuZGVySWQoKSA9PSAwKSB7CisgICAgICAgICAgICB0
aGlzLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgd20g
PSB0aGlzLmdldFdvcmxkTWF0cml4KCk7CisgICAgICAgIGlmIChzcGFjZSA9PSBfTWF0aHNfbWF0
aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNwYWNlIl0uV09STEQpIHsKKyAg
ICAgICAgICAgIHZhciB0bWF0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF07CisgICAgICAgICAgICB3bS5pbnZl
cnRUb1JlZih0bWF0KTsKKyAgICAgICAgICAgIHBvaW50ID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRl
cyhwb2ludCwgdG1hdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuc2V0UGl2b3RN
YXRyaXgoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1h
dHJpeCJdLlRyYW5zbGF0aW9uKC1wb2ludC54LCAtcG9pbnQueSwgLXBvaW50LnopLCB0cnVlKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgd2l0aCB0
aGUgbWVzaCBwaXZvdCBwb2ludCBjb29yZGluYXRlcyBpbiB0aGUgbG9jYWwgc3BhY2UuCisgICAg
ICogQHJldHVybnMgdGhlIHBpdm90IHBvaW50CisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5w
cm90b3R5cGUuZ2V0UGl2b3RQb2ludCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHBvaW50
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuZ2V0UGl2b3RQb2ludFRvUmVmKHBvaW50KTsKKyAg
ICAgICAgcmV0dXJuIHBvaW50OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgcGFz
c2VkIFZlY3RvcjMgInJlc3VsdCIgd2l0aCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIG1lc2ggcGl2
b3QgcG9pbnQgaW4gdGhlIGxvY2FsIHNwYWNlLgorICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHZl
Y3RvcjMgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoaXMgVHJhbnNmb3Jt
Tm9kZS4KKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5nZXRQaXZvdFBvaW50
VG9SZWYgPSBmdW5jdGlvbiAocmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0gLXRoaXMuX3Bp
dm90TWF0cml4Lm1bMTJdOworICAgICAgICByZXN1bHQueSA9IC10aGlzLl9waXZvdE1hdHJpeC5t
WzEzXTsKKyAgICAgICAgcmVzdWx0LnogPSAtdGhpcy5fcGl2b3RNYXRyaXgubVsxNF07CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBW
ZWN0b3IzIHNldCB3aXRoIHRoZSBtZXNoIHBpdm90IHBvaW50IFdvcmxkIGNvb3JkaW5hdGVzLgor
ICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIG1lc2ggcGl2b3QgcG9p
bnQgV29ybGQgY29vcmRpbmF0ZXMuCisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5
cGUuZ2V0QWJzb2x1dGVQaXZvdFBvaW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcG9p
bnQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMyJdLlplcm8oKTsKKyAgICAgICAgdGhpcy5nZXRBYnNvbHV0ZVBpdm90UG9pbnRUb1JlZihw
b2ludCk7CisgICAgICAgIHJldHVybiBwb2ludDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
dHMgdGhlIFZlY3RvcjMgInJlc3VsdCIgY29vcmRpbmF0ZXMgd2l0aCB0aGUgbWVzaCBwaXZvdCBw
b2ludCBXb3JsZCBjb29yZGluYXRlcy4KKyAgICAgKiBAcGFyYW0gcmVzdWx0IHZlY3RvcjMgdG8g
c3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoaXMgVHJhbnNmb3JtTm9kZS4KKyAg
ICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5nZXRBYnNvbHV0ZVBpdm90UG9pbnRU
b1JlZiA9IGZ1bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnggPSB0aGlzLl9waXZv
dE1hdHJpeC5tWzEyXTsKKyAgICAgICAgcmVzdWx0LnkgPSB0aGlzLl9waXZvdE1hdHJpeC5tWzEz
XTsKKyAgICAgICAgcmVzdWx0LnogPSB0aGlzLl9waXZvdE1hdHJpeC5tWzE0XTsKKyAgICAgICAg
dGhpcy5nZXRQaXZvdFBvaW50VG9SZWYocmVzdWx0KTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29y
ZGluYXRlc1RvUmVmKHJlc3VsdCwgdGhpcy5nZXRXb3JsZE1hdHJpeCgpLCByZXN1bHQpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIHBh
c3NlZCBub2RlIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgKiBUaGUg
bm9kZSB3aWxsIHJlbWFpbiBleGFjdGx5IHdoZXJlIGl0IGlzIGFuZCBpdHMgcG9zaXRpb24gLyBy
b3RhdGlvbiB3aWxsIGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkKKyAgICAgKiBAc2VlIGh0dHBzOi8v
ZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BhcmVudGluZworICAgICAqIEBwYXJhbSBub2RlIHRo
ZSBub2RlIG90IHNldCBhcyB0aGUgcGFyZW50CisgICAgICogQHJldHVybnMgdGhpcyBUcmFuc2Zv
cm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLnNldFBhcmVudCA9
IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgIGlmICghbm9kZSAmJiAhdGhpcy5wYXJlbnQpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZhciBxdWF0Um90
YXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VG1wVmVjdG9ycyJdLlF1YXRlcm5pb25bMF07CisgICAgICAgIHZhciBwb3NpdGlvbiA9IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0u
VmVjdG9yM1swXTsKKyAgICAgICAgdmFyIHNjYWxlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzFdOworICAgICAg
ICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUp
OworICAgICAgICAgICAgdGhpcy5nZXRXb3JsZE1hdHJpeCgpLmRlY29tcG9zZShzY2FsZSwgcXVh
dFJvdGF0aW9uLCBwb3NpdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB2YXIgZGlmZk1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdOworICAgICAgICAgICAgdmFyIGlu
dlBhcmVudE1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzFdOworICAgICAgICAgICAgdGhpcy5jb21wdXRl
V29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgICAgICBub2RlLmNvbXB1dGVXb3JsZE1hdHJpeCh0
cnVlKTsKKyAgICAgICAgICAgIG5vZGUuZ2V0V29ybGRNYXRyaXgoKS5pbnZlcnRUb1JlZihpbnZQ
YXJlbnRNYXRyaXgpOworICAgICAgICAgICAgdGhpcy5nZXRXb3JsZE1hdHJpeCgpLm11bHRpcGx5
VG9SZWYoaW52UGFyZW50TWF0cml4LCBkaWZmTWF0cml4KTsKKyAgICAgICAgICAgIGRpZmZNYXRy
aXguZGVjb21wb3NlKHNjYWxlLCBxdWF0Um90YXRpb24sIHBvc2l0aW9uKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHRoaXMu
cm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHF1YXRSb3RhdGlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBxdWF0Um90YXRpb24udG9FdWxlckFuZ2xlc1RvUmVm
KHRoaXMucm90YXRpb24pOworICAgICAgICB9CisgICAgICAgIHRoaXMuc2NhbGluZy5jb3B5RnJv
bShzY2FsZSk7CisgICAgICAgIHRoaXMucG9zaXRpb24uY29weUZyb20ocG9zaXRpb24pOworICAg
ICAgICB0aGlzLnBhcmVudCA9IG5vZGU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLCAibm9uVW5p
Zm9ybVNjYWxpbmciLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUcnVlIGlmIHRoZSBzY2Fs
aW5nIHByb3BlcnR5IG9mIHRoaXMgb2JqZWN0IGlzIG5vbiB1bmlmb3JtIGVnLiAoMSwyLDEpCisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9ub25Vbmlmb3JtU2NhbGluZzsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5fdXBkYXRlTm9uVW5pZm9ybVNj
YWxpbmdTdGF0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAodGhpcy5fbm9uVW5p
Zm9ybVNjYWxpbmcgPT09IHZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fbm9uVW5pZm9ybVNjYWxpbmcgPSB2YWx1ZTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIGN1cnJlbnQg
VHJhbnNmb3JtTm9kZSB0byBhbm90aGVyIFRyYW5zZm9ybU5vZGUgYXNzb2NpYXRlZCB3aXRoIGEg
Ym9uZQorICAgICAqIEBwYXJhbSBib25lIEJvbmUgYWZmZWN0aW5nIHRoZSBUcmFuc2Zvcm1Ob2Rl
CisgICAgICogQHBhcmFtIGFmZmVjdGVkVHJhbnNmb3JtTm9kZSBUcmFuc2Zvcm1Ob2RlIGFzc29j
aWF0ZWQgd2l0aCB0aGUgYm9uZQorICAgICAqIEByZXR1cm5zIHRoaXMgb2JqZWN0CisgICAgICov
CisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUuYXR0YWNoVG9Cb25lID0gZnVuY3Rpb24gKGJv
bmUsIGFmZmVjdGVkVHJhbnNmb3JtTm9kZSkgeworICAgICAgICB0aGlzLl90cmFuc2Zvcm1Ub0Jv
bmVSZWZlcmFsID0gYWZmZWN0ZWRUcmFuc2Zvcm1Ob2RlOworICAgICAgICB0aGlzLnBhcmVudCA9
IGJvbmU7CisgICAgICAgIGlmIChib25lLmdldFdvcmxkTWF0cml4KCkuZGV0ZXJtaW5hbnQoKSA8
IDApIHsKKyAgICAgICAgICAgIHRoaXMuc2NhbGluZ0RldGVybWluYW50ICo9IC0xOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0YWNo
IHRoZSB0cmFuc2Zvcm0gbm9kZSBpZiBpdHMgYXNzb2NpYXRlZCB3aXRoIGEgYm9uZQorICAgICAq
IEByZXR1cm5zIHRoaXMgb2JqZWN0CisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5
cGUuZGV0YWNoRnJvbUJvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5wYXJl
bnQpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLnBhcmVudC5nZXRXb3JsZE1hdHJpeCgpLmRldGVybWluYW50KCkgPCAwKSB7CisgICAgICAg
ICAgICB0aGlzLnNjYWxpbmdEZXRlcm1pbmFudCAqPSAtMTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl90cmFuc2Zvcm1Ub0JvbmVSZWZlcmFsID0gbnVsbDsKKyAgICAgICAgdGhpcy5wYXJlbnQg
PSBudWxsOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJv
dGF0ZXMgdGhlIG1lc2ggYXJvdW5kIHRoZSBheGlzIHZlY3RvciBmb3IgdGhlIHBhc3NlZCBhbmds
ZSAoYW1vdW50KSBleHByZXNzZWQgaW4gcmFkaWFucywgaW4gdGhlIGdpdmVuIHNwYWNlLgorICAg
ICAqIHNwYWNlIChkZWZhdWx0IExPQ0FMKSBjYW4gYmUgZWl0aGVyIFNwYWNlLkxPQ0FMLCBlaXRo
ZXIgU3BhY2UuV09STEQuCisgICAgICogTm90ZSB0aGF0IHRoZSBwcm9wZXJ0eSBgcm90YXRpb25R
dWF0ZXJuaW9uYCBpcyB0aGVuIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCBhbmQgdGhlIHByb3BlcnR5
IGByb3RhdGlvbmAgaXMgc2V0IHRvICgwLDAsMCkgYW5kIG5vIGxvbmdlciB1c2VkLgorICAgICAq
IFRoZSBwYXNzZWQgYXhpcyBpcyBhbHNvIG5vcm1hbGl6ZWQuCisgICAgICogQHBhcmFtIGF4aXMg
dGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZAorICAgICAqIEBwYXJhbSBhbW91bnQgdGhlIGFtb3Vu
dCB0byByb3RhdGUgaW4gcmFkaWFucworICAgICAqIEBwYXJhbSBzcGFjZSBTcGFjZSB0byByb3Rh
dGUgaW4gKERlZmF1bHQ6IGxvY2FsKQorICAgICAqIEByZXR1cm5zIHRoZSBUcmFuc2Zvcm1Ob2Rl
LgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9u
IChheGlzLCBhbW91bnQsIHNwYWNlKSB7CisgICAgICAgIGF4aXMubm9ybWFsaXplKCk7CisgICAg
ICAgIGlmICghdGhpcy5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHRoaXMucm90
YXRpb25RdWF0ZXJuaW9uID0gdGhpcy5yb3RhdGlvbi50b1F1YXRlcm5pb24oKTsKKyAgICAgICAg
ICAgIHRoaXMucm90YXRpb24uc2V0QWxsKDApOworICAgICAgICB9CisgICAgICAgIHZhciByb3Rh
dGlvblF1YXRlcm5pb247CisgICAgICAgIGlmICghc3BhY2UgfHwgc3BhY2UgPT09IF9NYXRoc19t
YXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU3BhY2UiXS5MT0NBTCkgewor
ICAgICAgICAgICAgcm90YXRpb25RdWF0ZXJuaW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbkF4aXNUb1JlZihh
eGlzLCBhbW91bnQsIFRyYW5zZm9ybU5vZGUuX3JvdGF0aW9uQXhpc0NhY2hlKTsKKyAgICAgICAg
ICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYocm90YXRpb25RdWF0ZXJu
aW9uLCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgaW52
ZXJ0UGFyZW50V29ybGRNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXTsKKyAgICAgICAgICAgICAgICB0
aGlzLnBhcmVudC5nZXRXb3JsZE1hdHJpeCgpLmludmVydFRvUmVmKGludmVydFBhcmVudFdvcmxk
TWF0cml4KTsKKyAgICAgICAgICAgICAgICBheGlzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwoYXhpcywg
aW52ZXJ0UGFyZW50V29ybGRNYXRyaXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcm90
YXRpb25RdWF0ZXJuaW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbkF4aXNUb1JlZihheGlzLCBhbW91bnQsIFRy
YW5zZm9ybU5vZGUuX3JvdGF0aW9uQXhpc0NhY2hlKTsKKyAgICAgICAgICAgIHJvdGF0aW9uUXVh
dGVybmlvbi5tdWx0aXBseVRvUmVmKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uLCB0aGlzLnJvdGF0
aW9uUXVhdGVybmlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSb3RhdGVzIHRoZSBtZXNoIGFyb3VuZCB0aGUgYXhpcyB2ZWN0b3Ig
Zm9yIHRoZSBwYXNzZWQgYW5nbGUgKGFtb3VudCkgZXhwcmVzc2VkIGluIHJhZGlhbnMsIGluIHdv
cmxkIHNwYWNlLgorICAgICAqIE5vdGUgdGhhdCB0aGUgcHJvcGVydHkgYHJvdGF0aW9uUXVhdGVy
bmlvbmAgaXMgdGhlbiBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgYW5kIHRoZSBwcm9wZXJ0eSBgcm90
YXRpb25gIGlzIHNldCB0byAoMCwwLDApIGFuZCBubyBsb25nZXIgdXNlZC4KKyAgICAgKiBUaGUg
cGFzc2VkIGF4aXMgaXMgYWxzbyBub3JtYWxpemVkLiAuCisgICAgICogTWV0aG9kIGlzIGJhc2Vk
IG9uIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2dlb21ldHJ5L2FmZmluZS9h
cm91bmRQb2ludC9pbmRleC5odG0KKyAgICAgKiBAcGFyYW0gcG9pbnQgdGhlIHBvaW50IHRvIHJv
dGF0ZSBhcm91bmQKKyAgICAgKiBAcGFyYW0gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5k
CisgICAgICogQHBhcmFtIGFtb3VudCB0aGUgYW1vdW50IHRvIHJvdGF0ZSBpbiByYWRpYW5zCisg
ICAgICogQHJldHVybnMgdGhlIFRyYW5zZm9ybU5vZGUKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1O
b2RlLnByb3RvdHlwZS5yb3RhdGVBcm91bmQgPSBmdW5jdGlvbiAocG9pbnQsIGF4aXMsIGFtb3Vu
dCkgeworICAgICAgICBheGlzLm5vcm1hbGl6ZSgpOworICAgICAgICBpZiAoIXRoaXMucm90YXRp
b25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbiA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9u
Il0uUm90YXRpb25ZYXdQaXRjaFJvbGwodGhpcy5yb3RhdGlvbi55LCB0aGlzLnJvdGF0aW9uLngs
IHRoaXMucm90YXRpb24ueik7CisgICAgICAgICAgICB0aGlzLnJvdGF0aW9uLnNldEFsbCgwKTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgdG1wVmVjdG9yID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdOworICAg
ICAgICB2YXIgZmluYWxTY2FsZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1sxXTsKKyAgICAgICAgdmFyIGZpbmFs
VHJhbnNsYXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMl07CisgICAgICAgIHZhciBmaW5hbFJvdGF0aW9u
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZl
Y3RvcnMiXS5RdWF0ZXJuaW9uWzBdOworICAgICAgICB2YXIgdHJhbnNsYXRpb25NYXRyaXggPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9y
cyJdLk1hdHJpeFswXTsgLy8gVAorICAgICAgICB2YXIgdHJhbnNsYXRpb25NYXRyaXhJbnYgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9y
cyJdLk1hdHJpeFsxXTsgLy8gVCcKKyAgICAgICAgdmFyIHJvdGF0aW9uTWF0cml4ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5N
YXRyaXhbMl07IC8vIFIKKyAgICAgICAgdmFyIGZpbmFsTWF0cml4ID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbM107
IC8vIFQnIHggUiB4IFQKKyAgICAgICAgcG9pbnQuc3VidHJhY3RUb1JlZih0aGlzLnBvc2l0aW9u
LCB0bXBWZWN0b3IpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siTWF0cml4Il0uVHJhbnNsYXRpb25Ub1JlZih0bXBWZWN0b3IueCwgdG1w
VmVjdG9yLnksIHRtcFZlY3Rvci56LCB0cmFuc2xhdGlvbk1hdHJpeCk7IC8vIFQKKyAgICAgICAg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJd
LlRyYW5zbGF0aW9uVG9SZWYoLXRtcFZlY3Rvci54LCAtdG1wVmVjdG9yLnksIC10bXBWZWN0b3Iu
eiwgdHJhbnNsYXRpb25NYXRyaXhJbnYpOyAvLyBUJworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uUm90YXRpb25BeGlzVG9S
ZWYoYXhpcywgYW1vdW50LCByb3RhdGlvbk1hdHJpeCk7IC8vIFIKKyAgICAgICAgdHJhbnNsYXRp
b25NYXRyaXhJbnYubXVsdGlwbHlUb1JlZihyb3RhdGlvbk1hdHJpeCwgZmluYWxNYXRyaXgpOyAv
LyBUJyB4IFIKKyAgICAgICAgZmluYWxNYXRyaXgubXVsdGlwbHlUb1JlZih0cmFuc2xhdGlvbk1h
dHJpeCwgZmluYWxNYXRyaXgpOyAvLyBUJyB4IFIgeCBUCisgICAgICAgIGZpbmFsTWF0cml4LmRl
Y29tcG9zZShmaW5hbFNjYWxlLCBmaW5hbFJvdGF0aW9uLCBmaW5hbFRyYW5zbGF0aW9uKTsKKyAg
ICAgICAgdGhpcy5wb3NpdGlvbi5hZGRJblBsYWNlKGZpbmFsVHJhbnNsYXRpb24pOworICAgICAg
ICBmaW5hbFJvdGF0aW9uLm11bHRpcGx5VG9SZWYodGhpcy5yb3RhdGlvblF1YXRlcm5pb24sIHRo
aXMucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBUcmFuc2xhdGVzIHRoZSBtZXNoIGFsb25nIHRoZSBheGlzIHZlY3RvciBm
b3IgdGhlIHBhc3NlZCBkaXN0YW5jZSBpbiB0aGUgZ2l2ZW4gc3BhY2UuCisgICAgICogc3BhY2Ug
KGRlZmF1bHQgTE9DQUwpIGNhbiBiZSBlaXRoZXIgU3BhY2UuTE9DQUwsIGVpdGhlciBTcGFjZS5X
T1JMRC4KKyAgICAgKiBAcGFyYW0gYXhpcyB0aGUgYXhpcyB0byB0cmFuc2xhdGUgaW4KKyAgICAg
KiBAcGFyYW0gZGlzdGFuY2UgdGhlIGRpc3RhbmNlIHRvIHRyYW5zbGF0ZQorICAgICAqIEBwYXJh
bSBzcGFjZSBTcGFjZSB0byByb3RhdGUgaW4gKERlZmF1bHQ6IGxvY2FsKQorICAgICAqIEByZXR1
cm5zIHRoZSBUcmFuc2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90
eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChheGlzLCBkaXN0YW5jZSwgc3BhY2UpIHsKKyAgICAg
ICAgdmFyIGRpc3BsYWNlbWVudFZlY3RvciA9IGF4aXMuc2NhbGUoZGlzdGFuY2UpOworICAgICAg
ICBpZiAoIXNwYWNlIHx8IHNwYWNlID09PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIlNwYWNlIl0uTE9DQUwpIHsKKyAgICAgICAgICAgIHZhciB0ZW1wVjMg
PSB0aGlzLmdldFBvc2l0aW9uRXhwcmVzc2VkSW5Mb2NhbFNwYWNlKCkuYWRkKGRpc3BsYWNlbWVu
dFZlY3Rvcik7CisgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uV2l0aExvY2FsVmVjdG9yKHRl
bXBWMyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLnNldEFi
c29sdXRlUG9zaXRpb24odGhpcy5nZXRBYnNvbHV0ZVBvc2l0aW9uKCkuYWRkKGRpc3BsYWNlbWVu
dFZlY3RvcikpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
LyoqCisgICAgICogQWRkcyBhIHJvdGF0aW9uIHN0ZXAgdG8gdGhlIG1lc2ggY3VycmVudCByb3Rh
dGlvbi4KKyAgICAgKiB4LCB5LCB6IGFyZSBFdWxlciBhbmdsZXMgZXhwcmVzc2VkIGluIHJhZGlh
bnMuCisgICAgICogVGhpcyBtZXRob2RzIHVwZGF0ZXMgdGhlIGN1cnJlbnQgbWVzaCByb3RhdGlv
biwgZWl0aGVyIG1lc2gucm90YXRpb24sIGVpdGhlciBtZXNoLnJvdGF0aW9uUXVhdGVybmlvbiBp
ZiBpdCdzIHNldC4KKyAgICAgKiBUaGlzIG1lYW5zIHRoaXMgcm90YXRpb24gaXMgbWFkZSBpbiB0
aGUgbWVzaCBsb2NhbCBzcGFjZSBvbmx5LgorICAgICAqIEl0J3MgdXNlZnVsIHRvIHNldCBhIGN1
c3RvbSByb3RhdGlvbiBvcmRlciBkaWZmZXJlbnQgZnJvbSB0aGUgQkpTIHN0YW5kYXJkIG9uZSBZ
WFouCisgICAgICogRXhhbXBsZSA6IHRoaXMgcm90YXRlcyB0aGUgbWVzaCBmaXJzdCBhcm91bmQg
aXRzIGxvY2FsIFggYXhpcywgdGhlbiBhcm91bmQgaXRzIGxvY2FsIFogYXhpcywgZmluYWxseSBh
cm91bmQgaXRzIGxvY2FsIFkgYXhpcy4KKyAgICAgKiBgYGBqYXZhc2NyaXB0CisgICAgICogbWVz
aC5hZGRSb3RhdGlvbih4MSwgMCwgMCkuYWRkUm90YXRpb24oMCwgMCwgejIpLmFkZFJvdGF0aW9u
KDAsIDAsIHkzKTsKKyAgICAgKiBgYGAKKyAgICAgKiBOb3RlIHRoYXQgYGFkZFJvdGF0aW9uKClg
IGFjY3VtdWxhdGVzIHRoZSBwYXNzZWQgcm90YXRpb24gdmFsdWVzIHRvIHRoZSBjdXJyZW50IG9u
ZXMgYW5kIGNvbXB1dGVzIHRoZSAucm90YXRpb24gb3IgLnJvdGF0aW9uUXVhdGVybmlvbiB1cGRh
dGVkIHZhbHVlcy4KKyAgICAgKiBVbmRlciB0aGUgaG9vZCwgb25seSBxdWF0ZXJuaW9ucyBhcmUg
dXNlZC4gU28gaXQncyBhIGxpdHRsZSBmYXN0ZXIgaXMgeW91IHVzZSAucm90YXRpb25RdWF0ZXJu
aW9uIGJlY2F1c2UgaXQgZG9lc24ndCBuZWVkIHRvIHRyYW5zbGF0ZSB0aGVtIGJhY2sgdG8gRXVs
ZXIgYW5nbGVzLgorICAgICAqIEBwYXJhbSB4IFJvdGF0aW9uIHRvIGFkZAorICAgICAqIEBwYXJh
bSB5IFJvdGF0aW9uIHRvIGFkZAorICAgICAqIEBwYXJhbSB6IFJvdGF0aW9uIHRvIGFkZAorICAg
ICAqIEByZXR1cm5zIHRoZSBUcmFuc2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5v
ZGUucHJvdG90eXBlLmFkZFJvdGF0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHsKKyAgICAgICAg
dmFyIHJvdGF0aW9uUXVhdGVybmlvbjsKKyAgICAgICAgaWYgKHRoaXMucm90YXRpb25RdWF0ZXJu
aW9uKSB7CisgICAgICAgICAgICByb3RhdGlvblF1YXRlcm5pb24gPSB0aGlzLnJvdGF0aW9uUXVh
dGVybmlvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJvdGF0aW9u
UXVhdGVybmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJUbXBWZWN0b3JzIl0uUXVhdGVybmlvblsxXTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0uUm90YXRp
b25ZYXdQaXRjaFJvbGxUb1JlZih0aGlzLnJvdGF0aW9uLnksIHRoaXMucm90YXRpb24ueCwgdGhp
cy5yb3RhdGlvbi56LCByb3RhdGlvblF1YXRlcm5pb24pOworICAgICAgICB9CisgICAgICAgIHZh
ciBhY2N1bXVsYXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVG1wVmVjdG9ycyJdLlF1YXRlcm5pb25bMF07CisgICAgICAgIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0uUm90YXRp
b25ZYXdQaXRjaFJvbGxUb1JlZih5LCB4LCB6LCBhY2N1bXVsYXRpb24pOworICAgICAgICByb3Rh
dGlvblF1YXRlcm5pb24ubXVsdGlwbHlJblBsYWNlKGFjY3VtdWxhdGlvbik7CisgICAgICAgIGlm
ICghdGhpcy5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHJvdGF0aW9uUXVhdGVy
bmlvbi50b0V1bGVyQW5nbGVzVG9SZWYodGhpcy5yb3RhdGlvbik7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICov
CisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUuX2dldEVmZmVjdGl2ZVBhcmVudCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50OworICAgIH07CisgICAgLyoqCisg
ICAgICogQ29tcHV0ZXMgdGhlIHdvcmxkIG1hdHJpeCBvZiB0aGUgbm9kZQorICAgICAqIEBwYXJh
bSBmb3JjZSBkZWZpbmVzIGlmIHRoZSBjYWNoZSB2ZXJzaW9uIHNob3VsZCBiZSBpbnZhbGlkYXRl
ZCBmb3JjaW5nIHRoZSB3b3JsZCBtYXRyaXggdG8gYmUgY3JlYXRlZCBmcm9tIHNjcmF0Y2gKKyAg
ICAgKiBAcmV0dXJucyB0aGUgd29ybGQgbWF0cml4CisgICAgICovCisgICAgVHJhbnNmb3JtTm9k
ZS5wcm90b3R5cGUuY29tcHV0ZVdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKGZvcmNlKSB7CisgICAg
ICAgIGlmICh0aGlzLl9pc1dvcmxkTWF0cml4RnJvemVuICYmICF0aGlzLl9pc0RpcnR5KSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRNYXRyaXg7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGN1cnJlbnRSZW5kZXJJZCA9IHRoaXMuZ2V0U2NlbmUoKS5nZXRSZW5kZXJJZCgpOworICAg
ICAgICBpZiAoIXRoaXMuX2lzRGlydHkgJiYgIWZvcmNlICYmIHRoaXMuaXNTeW5jaHJvbml6ZWQo
KSkgeworICAgICAgICAgICAgdGhpcy5fY3VycmVudFJlbmRlcklkID0gY3VycmVudFJlbmRlcklk
OworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dvcmxkTWF0cml4OworICAgICAgICB9CisgICAg
ICAgIHZhciBjYW1lcmEgPSB0aGlzLmdldFNjZW5lKCkuYWN0aXZlQ2FtZXJhOworICAgICAgICB2
YXIgdXNlQmlsbGJvYXJkUG9zaXRpb24gPSAodGhpcy5fYmlsbGJvYXJkTW9kZSAmIFRyYW5zZm9y
bU5vZGUuQklMTEJPQVJETU9ERV9VU0VfUE9TSVRJT04pICE9PSAwOworICAgICAgICB2YXIgdXNl
QmlsbGJvYXJkUGF0aCA9IHRoaXMuX2JpbGxib2FyZE1vZGUgIT09IFRyYW5zZm9ybU5vZGUuQklM
TEJPQVJETU9ERV9OT05FICYmICF0aGlzLnByZXNlcnZlUGFyZW50Um90YXRpb25Gb3JCaWxsYm9h
cmQ7CisgICAgICAgIC8vIEJpbGxib2FyZGluZyBiYXNlZCBvbiBjYW1lcmEgcG9zaXRpb24KKyAg
ICAgICAgaWYgKHVzZUJpbGxib2FyZFBhdGggJiYgY2FtZXJhICYmIHVzZUJpbGxib2FyZFBvc2l0
aW9uKSB7CisgICAgICAgICAgICB0aGlzLmxvb2tBdChjYW1lcmEucG9zaXRpb24pOworICAgICAg
ICAgICAgaWYgKCh0aGlzLmJpbGxib2FyZE1vZGUgJiBUcmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1P
REVfWCkgIT09IFRyYW5zZm9ybU5vZGUuQklMTEJPQVJETU9ERV9YKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5yb3RhdGlvbi54ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgo
dGhpcy5iaWxsYm9hcmRNb2RlICYgVHJhbnNmb3JtTm9kZS5CSUxMQk9BUkRNT0RFX1kpICE9PSBU
cmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1PREVfWSkgeworICAgICAgICAgICAgICAgIHRoaXMucm90
YXRpb24ueSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHRoaXMuYmlsbGJv
YXJkTW9kZSAmIFRyYW5zZm9ybU5vZGUuQklMTEJPQVJETU9ERV9aKSAhPT0gVHJhbnNmb3JtTm9k
ZS5CSUxMQk9BUkRNT0RFX1opIHsKKyAgICAgICAgICAgICAgICB0aGlzLnJvdGF0aW9uLnogPSAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZUNhY2hlKCk7
CisgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlOworICAgICAgICBjYWNoZS5waXZvdE1h
dHJpeFVwZGF0ZWQgPSBmYWxzZTsKKyAgICAgICAgY2FjaGUuYmlsbGJvYXJkTW9kZSA9IHRoaXMu
YmlsbGJvYXJkTW9kZTsKKyAgICAgICAgY2FjaGUuaW5maW5pdGVEaXN0YW5jZSA9IHRoaXMuaW5m
aW5pdGVEaXN0YW5jZTsKKyAgICAgICAgdGhpcy5fY3VycmVudFJlbmRlcklkID0gY3VycmVudFJl
bmRlcklkOworICAgICAgICB0aGlzLl9jaGlsZFVwZGF0ZUlkKys7CisgICAgICAgIHRoaXMuX2lz
RGlydHkgPSBmYWxzZTsKKyAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMuX2dldEVmZmVjdGl2ZVBh
cmVudCgpOworICAgICAgICAvLyBTY2FsaW5nCisgICAgICAgIHZhciBzY2FsaW5nID0gY2FjaGUu
c2NhbGluZzsKKyAgICAgICAgdmFyIHRyYW5zbGF0aW9uID0gY2FjaGUucG9zaXRpb247CisgICAg
ICAgIC8vIFRyYW5zbGF0aW9uCisgICAgICAgIGlmICh0aGlzLl9pbmZpbml0ZURpc3RhbmNlKSB7
CisgICAgICAgICAgICBpZiAoIXRoaXMucGFyZW50ICYmIGNhbWVyYSkgeworICAgICAgICAgICAg
ICAgIHZhciBjYW1lcmFXb3JsZE1hdHJpeCA9IGNhbWVyYS5nZXRXb3JsZE1hdHJpeCgpOworICAg
ICAgICAgICAgICAgIHZhciBjYW1lcmFHbG9iYWxQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKGNhbWVyYVdvcmxk
TWF0cml4Lm1bMTJdLCBjYW1lcmFXb3JsZE1hdHJpeC5tWzEzXSwgY2FtZXJhV29ybGRNYXRyaXgu
bVsxNF0pOworICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uLmNvcHlGcm9tRmxvYXRzKHRoaXMu
X3Bvc2l0aW9uLnggKyBjYW1lcmFHbG9iYWxQb3NpdGlvbi54LCB0aGlzLl9wb3NpdGlvbi55ICsg
Y2FtZXJhR2xvYmFsUG9zaXRpb24ueSwgdGhpcy5fcG9zaXRpb24ueiArIGNhbWVyYUdsb2JhbFBv
c2l0aW9uLnopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgdHJhbnNsYXRpb24uY29weUZyb20odGhpcy5fcG9zaXRpb24pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdHJhbnNsYXRpb24uY29w
eUZyb20odGhpcy5fcG9zaXRpb24pOworICAgICAgICB9CisgICAgICAgIC8vIFNjYWxpbmcKKyAg
ICAgICAgc2NhbGluZy5jb3B5RnJvbUZsb2F0cyh0aGlzLl9zY2FsaW5nLnggKiB0aGlzLnNjYWxp
bmdEZXRlcm1pbmFudCwgdGhpcy5fc2NhbGluZy55ICogdGhpcy5zY2FsaW5nRGV0ZXJtaW5hbnQs
IHRoaXMuX3NjYWxpbmcueiAqIHRoaXMuc2NhbGluZ0RldGVybWluYW50KTsKKyAgICAgICAgLy8g
Um90YXRpb24KKyAgICAgICAgdmFyIHJvdGF0aW9uID0gY2FjaGUucm90YXRpb25RdWF0ZXJuaW9u
OworICAgICAgICBpZiAodGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5yZUludGVncmF0ZVJvdGF0aW9uSW50b1JvdGF0aW9uUXVhdGVybmlvbikgeworICAg
ICAgICAgICAgICAgIHZhciBsZW4gPSB0aGlzLnJvdGF0aW9uLmxlbmd0aFNxdWFyZWQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAobGVuKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0
aW9uUXVhdGVybmlvbi5tdWx0aXBseUluUGxhY2UoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbllhd1BpdGNoUm9sbCh0
aGlzLl9yb3RhdGlvbi55LCB0aGlzLl9yb3RhdGlvbi54LCB0aGlzLl9yb3RhdGlvbi56KSk7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uLmNvcHlGcm9tRmxvYXRzKDAsIDAsIDAp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJvdGF0aW9u
LmNvcHlGcm9tKHRoaXMuX3JvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siUXVhdGVybmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYodGhpcy5f
cm90YXRpb24ueSwgdGhpcy5fcm90YXRpb24ueCwgdGhpcy5fcm90YXRpb24ueiwgcm90YXRpb24p
OworICAgICAgICAgICAgY2FjaGUucm90YXRpb24uY29weUZyb20odGhpcy5fcm90YXRpb24pOwor
ICAgICAgICB9CisgICAgICAgIC8vIENvbXBvc2UKKyAgICAgICAgaWYgKHRoaXMuX3VzZVBpdm90
TWF0cml4KSB7CisgICAgICAgICAgICB2YXIgc2NhbGVNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsxXTsK
KyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJNYXRyaXgiXS5TY2FsaW5nVG9SZWYoc2NhbGluZy54LCBzY2FsaW5nLnksIHNjYWxpbmcu
eiwgc2NhbGVNYXRyaXgpOworICAgICAgICAgICAgLy8gUm90YXRpb24KKyAgICAgICAgICAgIHZh
ciByb3RhdGlvbk1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdOworICAgICAgICAgICAgcm90YXRpb24u
dG9Sb3RhdGlvbk1hdHJpeChyb3RhdGlvbk1hdHJpeCk7CisgICAgICAgICAgICAvLyBDb21wb3Np
bmcgdHJhbnNmb3JtYXRpb25zCisgICAgICAgICAgICB0aGlzLl9waXZvdE1hdHJpeC5tdWx0aXBs
eVRvUmVmKHNjYWxlTWF0cml4LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFs0XSk7CisgICAgICAgICAgICBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1h
dHJpeFs0XS5tdWx0aXBseVRvUmVmKHJvdGF0aW9uTWF0cml4LCB0aGlzLl9sb2NhbE1hdHJpeCk7
CisgICAgICAgICAgICAvLyBQb3N0IG11bHRpcGx5IGludmVyc2Ugb2YgcGl2b3RNYXRyaXgKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9wb3N0TXVsdGlwbHlQaXZvdE1hdHJpeCkgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2xvY2FsTWF0cml4Lm11bHRpcGx5VG9SZWYodGhpcy5fcGl2b3RNYXRyaXhJ
bnZlcnNlLCB0aGlzLl9sb2NhbE1hdHJpeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aGlzLl9sb2NhbE1hdHJpeC5hZGRUcmFuc2xhdGlvbkZyb21GbG9hdHModHJhbnNsYXRpb24ueCwg
dHJhbnNsYXRpb24ueSwgdHJhbnNsYXRpb24ueik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siTWF0cml4Il0uQ29tcG9zZVRvUmVmKHNjYWxpbmcsIHJvdGF0aW9uLCB0cmFuc2xhdGlv
biwgdGhpcy5fbG9jYWxNYXRyaXgpOworICAgICAgICB9CisgICAgICAgIC8vIFBhcmVudAorICAg
ICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5nZXRXb3JsZE1hdHJpeCkgeworICAgICAgICAgICAg
aWYgKGZvcmNlKSB7CisgICAgICAgICAgICAgICAgcGFyZW50LmNvbXB1dGVXb3JsZE1hdHJpeCgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHVzZUJpbGxib2FyZFBhdGgpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhbnNmb3JtVG9Cb25lUmVmZXJhbCkgeworICAgICAg
ICAgICAgICAgICAgICBwYXJlbnQuZ2V0V29ybGRNYXRyaXgoKS5tdWx0aXBseVRvUmVmKHRoaXMu
X3RyYW5zZm9ybVRvQm9uZVJlZmVyYWwuZ2V0V29ybGRNYXRyaXgoKSwgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbN10p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlRtcFZlY3RvcnMiXS5NYXRyaXhbN10uY29weUZyb20ocGFyZW50LmdldFdvcmxkTWF0cml4KCkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHNjYWxpbmcg
YW5kIHRyYW5zbGF0aW9uIGZyb20gcGFyZW50CisgICAgICAgICAgICAgICAgdmFyIHRyYW5zbGF0
aW9uXzEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VG1wVmVjdG9ycyJdLlZlY3RvcjNbNV07CisgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMi
XS5WZWN0b3IzWzZdOworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzddLmRlY29tcG9zZShz
Y2FsZSwgdW5kZWZpbmVkLCB0cmFuc2xhdGlvbl8xKTsKKyAgICAgICAgICAgICAgICBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uU2NhbGlu
Z1RvUmVmKHNjYWxlLngsIHNjYWxlLnksIHNjYWxlLnosIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzddKTsKKyAgICAg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVG1wVmVjdG9ycyJdLk1hdHJpeFs3XS5zZXRUcmFuc2xhdGlvbih0cmFuc2xhdGlvbl8xKTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9sb2NhbE1hdHJpeC5tdWx0aXBseVRvUmVmKF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0
cml4WzddLCB0aGlzLl93b3JsZE1hdHJpeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhbnNmb3JtVG9Cb25lUmVmZXJhbCkg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2NhbE1hdHJpeC5tdWx0aXBseVRvUmVmKHBh
cmVudC5nZXRXb3JsZE1hdHJpeCgpLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFs2XSk7CisgICAgICAgICAgICAgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBW
ZWN0b3JzIl0uTWF0cml4WzZdLm11bHRpcGx5VG9SZWYodGhpcy5fdHJhbnNmb3JtVG9Cb25lUmVm
ZXJhbC5nZXRXb3JsZE1hdHJpeCgpLCB0aGlzLl93b3JsZE1hdHJpeCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9s
b2NhbE1hdHJpeC5tdWx0aXBseVRvUmVmKHBhcmVudC5nZXRXb3JsZE1hdHJpeCgpLCB0aGlzLl93
b3JsZE1hdHJpeCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fbWFya1N5bmNlZFdpdGhQYXJlbnQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4LmNvcHlGcm9tKHRoaXMuX2xvY2FsTWF0
cml4KTsKKyAgICAgICAgfQorICAgICAgICAvLyBCaWxsYm9hcmRpbmcgYmFzZWQgb24gY2FtZXJh
IG9yaWVudGF0aW9uICh0ZXN0aW5nIFBHOmh0dHA6Ly93d3cuYmFieWxvbmpzLXBsYXlncm91bmQu
Y29tLyNVSkVJTCMxMykKKyAgICAgICAgaWYgKHVzZUJpbGxib2FyZFBhdGggJiYgY2FtZXJhICYm
IHRoaXMuYmlsbGJvYXJkTW9kZSAmJiAhdXNlQmlsbGJvYXJkUG9zaXRpb24pIHsKKyAgICAgICAg
ICAgIHZhciBzdG9yZWRUcmFuc2xhdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1swXTsKKyAgICAgICAgICAg
IHRoaXMuX3dvcmxkTWF0cml4LmdldFRyYW5zbGF0aW9uVG9SZWYoc3RvcmVkVHJhbnNsYXRpb24p
OyAvLyBTYXZlIHRyYW5zbGF0aW9uCisgICAgICAgICAgICAvLyBDYW5jZWwgY2FtZXJhIHJvdGF0
aW9uCisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsxXS5jb3B5RnJvbShjYW1lcmEuZ2V0Vmlld01h
dHJpeCgpKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzFdLnNldFRyYW5zbGF0aW9uRnJvbUZs
b2F0cygwLCAwLCAwKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzFdLmludmVydFRvUmVmKF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3Jz
Il0uTWF0cml4WzBdKTsKKyAgICAgICAgICAgIGlmICgodGhpcy5iaWxsYm9hcmRNb2RlICYgVHJh
bnNmb3JtTm9kZS5CSUxMQk9BUkRNT0RFX0FMTCkgIT09IFRyYW5zZm9ybU5vZGUuQklMTEJPQVJE
TU9ERV9BTEwpIHsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXS5kZWNvbXBvc2UodW5k
ZWZpbmVkLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VG1wVmVjdG9ycyJdLlF1YXRlcm5pb25bMF0sIHVuZGVmaW5lZCk7CisgICAgICAgICAgICAgICAg
dmFyIGV1bGVyQW5nbGVzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzFdOworICAgICAgICAgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0u
UXVhdGVybmlvblswXS50b0V1bGVyQW5nbGVzVG9SZWYoZXVsZXJBbmdsZXMpOworICAgICAgICAg
ICAgICAgIGlmICgodGhpcy5iaWxsYm9hcmRNb2RlICYgVHJhbnNmb3JtTm9kZS5CSUxMQk9BUkRN
T0RFX1gpICE9PSBUcmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1PREVfWCkgeworICAgICAgICAgICAg
ICAgICAgICBldWxlckFuZ2xlcy54ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKCh0aGlzLmJpbGxib2FyZE1vZGUgJiBUcmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1P
REVfWSkgIT09IFRyYW5zZm9ybU5vZGUuQklMTEJPQVJETU9ERV9ZKSB7CisgICAgICAgICAgICAg
ICAgICAgIGV1bGVyQW5nbGVzLnkgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoKHRoaXMuYmlsbGJvYXJkTW9kZSAmIFRyYW5zZm9ybU5vZGUuQklMTEJPQVJETU9E
RV9aKSAhPT0gVHJhbnNmb3JtTm9kZS5CSUxMQk9BUkRNT0RFX1opIHsKKyAgICAgICAgICAgICAg
ICAgICAgZXVsZXJBbmdsZXMueiA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRy
aXgiXS5Sb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKGV1bGVyQW5nbGVzLnksIGV1bGVyQW5nbGVz
LngsIGV1bGVyQW5nbGVzLnosIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX3dvcmxkTWF0cml4LnNldFRyYW5zbGF0aW9uRnJvbUZsb2F0cygwLCAwLCAw
KTsKKyAgICAgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4Lm11bHRpcGx5VG9SZWYoX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRy
aXhbMF0sIHRoaXMuX3dvcmxkTWF0cml4KTsKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgdHJhbnNs
YXRpb24KKyAgICAgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4LnNldFRyYW5zbGF0aW9uKF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0u
VmVjdG9yM1swXSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTm9ybWFsIG1hdHJpeAorICAgICAg
ICBpZiAoIXRoaXMuaWdub3JlTm9uVW5pZm9ybVNjYWxpbmcpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9zY2FsaW5nLmlzTm9uVW5pZm9ybSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0
ZU5vblVuaWZvcm1TY2FsaW5nU3RhdGUodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmIChwYXJlbnQgJiYgcGFyZW50Ll9ub25Vbmlmb3JtU2NhbGluZykgeworICAgICAg
ICAgICAgICAgIHRoaXMuX3VwZGF0ZU5vblVuaWZvcm1TY2FsaW5nU3RhdGUocGFyZW50Ll9ub25V
bmlmb3JtU2NhbGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl91cGRhdGVOb25Vbmlmb3JtU2NhbGluZ1N0YXRlKGZhbHNlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMu
X3VwZGF0ZU5vblVuaWZvcm1TY2FsaW5nU3RhdGUoZmFsc2UpOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX2FmdGVyQ29tcHV0ZVdvcmxkTWF0cml4KCk7CisgICAgICAgIC8vIEFic29sdXRlIHBv
c2l0aW9uCisgICAgICAgIHRoaXMuX2Fic29sdXRlUG9zaXRpb24uY29weUZyb21GbG9hdHModGhp
cy5fd29ybGRNYXRyaXgubVsxMl0sIHRoaXMuX3dvcmxkTWF0cml4Lm1bMTNdLCB0aGlzLl93b3Js
ZE1hdHJpeC5tWzE0XSk7CisgICAgICAgIHRoaXMuX2lzQWJzb2x1dGVTeW5jZWQgPSBmYWxzZTsK
KyAgICAgICAgLy8gQ2FsbGJhY2tzCisgICAgICAgIHRoaXMub25BZnRlcldvcmxkTWF0cml4VXBk
YXRlT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIGlmICghdGhpcy5f
cG9zZU1hdHJpeCkgeworICAgICAgICAgICAgdGhpcy5fcG9zZU1hdHJpeCA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5JbnZlcnQodGhp
cy5fd29ybGRNYXRyaXgpOworICAgICAgICB9CisgICAgICAgIC8vIENhY2hlIHRoZSBkZXRlcm1p
bmFudAorICAgICAgICB0aGlzLl93b3JsZE1hdHJpeERldGVybWluYW50SXNEaXJ0eSA9IHRydWU7
CisgICAgICAgIHJldHVybiB0aGlzLl93b3JsZE1hdHJpeDsKKyAgICB9OworICAgIFRyYW5zZm9y
bU5vZGUucHJvdG90eXBlLl9hZnRlckNvbXB1dGVXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uICgpIHsK
KyAgICB9OworICAgIC8qKgorICAgICogSWYgeW91J2QgbGlrZSB0byBiZSBjYWxsZWQgYmFjayBh
ZnRlciB0aGUgbWVzaCBwb3NpdGlvbiwgcm90YXRpb24gb3Igc2NhbGluZyBoYXMgYmVlbiB1cGRh
dGVkLgorICAgICogQHBhcmFtIGZ1bmMgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYWRkCisgICAgKgor
ICAgICogQHJldHVybnMgdGhlIFRyYW5zZm9ybU5vZGUuCisgICAgKi8KKyAgICBUcmFuc2Zvcm1O
b2RlLnByb3RvdHlwZS5yZWdpc3RlckFmdGVyV29ybGRNYXRyaXhVcGRhdGUgPSBmdW5jdGlvbiAo
ZnVuYykgeworICAgICAgICB0aGlzLm9uQWZ0ZXJXb3JsZE1hdHJpeFVwZGF0ZU9ic2VydmFibGUu
YWRkKGZ1bmMpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJlbW92ZXMgYSByZWdpc3RlcmVkIGNhbGxiYWNrIGZ1bmN0aW9uLgorICAgICAqIEBwYXJhbSBm
dW5jIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5zIHRoZSBUcmFu
c2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLnVucmVnaXN0
ZXJBZnRlcldvcmxkTWF0cml4VXBkYXRlID0gZnVuY3Rpb24gKGZ1bmMpIHsKKyAgICAgICAgdGhp
cy5vbkFmdGVyV29ybGRNYXRyaXhVcGRhdGVPYnNlcnZhYmxlLnJlbW92ZUNhbGxiYWNrKGZ1bmMp
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhl
IHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IG1lc2ggaW4gY2FtZXJhIHNwYWNlCisgICAgICogQHBh
cmFtIGNhbWVyYSBkZWZpbmVzIHRoZSBjYW1lcmEgdG8gdXNlCisgICAgICogQHJldHVybnMgYSBw
b3NpdGlvbgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLmdldFBvc2l0aW9u
SW5DYW1lcmFTcGFjZSA9IGZ1bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgaWYgKGNhbWVyYSA9
PT0gdm9pZCAwKSB7IGNhbWVyYSA9IG51bGw7IH0KKyAgICAgICAgaWYgKCFjYW1lcmEpIHsKKyAg
ICAgICAgICAgIGNhbWVyYSA9IHRoaXMuZ2V0U2NlbmUoKS5hY3RpdmVDYW1lcmE7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXModGhpcy5hYnNvbHV0ZVBv
c2l0aW9uLCBjYW1lcmEuZ2V0Vmlld01hdHJpeCgpKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJldHVybnMgdGhlIGRpc3RhbmNlIGZyb20gdGhlIG1lc2ggdG8gdGhlIGFjdGl2ZSBjYW1lcmEK
KyAgICAgKiBAcGFyYW0gY2FtZXJhIGRlZmluZXMgdGhlIGNhbWVyYSB0byB1c2UKKyAgICAgKiBA
cmV0dXJucyB0aGUgZGlzdGFuY2UKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlw
ZS5nZXREaXN0YW5jZVRvQ2FtZXJhID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICBpZiAo
Y2FtZXJhID09PSB2b2lkIDApIHsgY2FtZXJhID0gbnVsbDsgfQorICAgICAgICBpZiAoIWNhbWVy
YSkgeworICAgICAgICAgICAgY2FtZXJhID0gdGhpcy5nZXRTY2VuZSgpLmFjdGl2ZUNhbWVyYTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5hYnNvbHV0ZVBvc2l0aW9uLnN1YnRyYWN0
KGNhbWVyYS5nbG9iYWxQb3NpdGlvbikubGVuZ3RoKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBDbG9uZSB0aGUgY3VycmVudCB0cmFuc2Zvcm0gbm9kZQorICAgICAqIEBwYXJhbSBuYW1lIE5h
bWUgb2YgdGhlIG5ldyBjbG9uZQorICAgICAqIEBwYXJhbSBuZXdQYXJlbnQgTmV3IHBhcmVudCBm
b3IgdGhlIGNsb25lCisgICAgICogQHBhcmFtIGRvTm90Q2xvbmVDaGlsZHJlbiBEbyBub3QgY2xv
bmUgY2hpbGRyZW4gaGllcmFyY2h5CisgICAgICogQHJldHVybnMgdGhlIG5ldyB0cmFuc2Zvcm0g
bm9kZQorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rp
b24gKG5hbWUsIG5ld1BhcmVudCwgZG9Ob3RDbG9uZUNoaWxkcmVuKSB7CisgICAgICAgIHZhciBf
dGhpcyA9IHRoaXM7CisgICAgICAgIHZhciByZXN1bHQgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5DbG9uZShmdW5j
dGlvbiAoKSB7IHJldHVybiBuZXcgVHJhbnNmb3JtTm9kZShuYW1lLCBfdGhpcy5nZXRTY2VuZSgp
KTsgfSwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5uYW1lID0gbmFtZTsKKyAgICAgICAgcmVzdWx0
LmlkID0gbmFtZTsKKyAgICAgICAgaWYgKG5ld1BhcmVudCkgeworICAgICAgICAgICAgcmVzdWx0
LnBhcmVudCA9IG5ld1BhcmVudDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWRvTm90Q2xvbmVD
aGlsZHJlbikgeworICAgICAgICAgICAgLy8gQ2hpbGRyZW4KKyAgICAgICAgICAgIHZhciBkaXJl
Y3REZXNjZW5kYW50cyA9IHRoaXMuZ2V0RGVzY2VuZGFudHModHJ1ZSk7CisgICAgICAgICAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZGlyZWN0RGVzY2VuZGFudHMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gZGlyZWN0RGVzY2VuZGFudHNbaW5k
ZXhdOworICAgICAgICAgICAgICAgIGlmIChjaGlsZC5jbG9uZSkgeworICAgICAgICAgICAgICAg
ICAgICBjaGlsZC5jbG9uZShuYW1lICsgIi4iICsgY2hpbGQubmFtZSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIG9iamVjdHMgaW5m
b3JtYXRpb24uCisgICAgICogQHBhcmFtIGN1cnJlbnRTZXJpYWxpemF0aW9uT2JqZWN0IGRlZmlu
ZXMgdGhlIG9iamVjdCB0byBzZXJpYWxpemUgaW4KKyAgICAgKiBAcmV0dXJucyB0aGUgc2VyaWFs
aXplZCBvYmplY3QKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5zZXJpYWxp
emUgPSBmdW5jdGlvbiAoY3VycmVudFNlcmlhbGl6YXRpb25PYmplY3QpIHsKKyAgICAgICAgdmFy
IHNlcmlhbGl6YXRpb25PYmplY3QgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5TZXJpYWxpemUodGhpcywgY3VycmVu
dFNlcmlhbGl6YXRpb25PYmplY3QpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnR5cGUg
PSB0aGlzLmdldENsYXNzTmFtZSgpOworICAgICAgICAvLyBQYXJlbnQKKyAgICAgICAgaWYgKHRo
aXMucGFyZW50KSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnBhcmVudElkID0g
dGhpcy5wYXJlbnQuaWQ7CisgICAgICAgIH0KKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5s
b2NhbE1hdHJpeCA9IHRoaXMuZ2V0UGl2b3RNYXRyaXgoKS5hc0FycmF5KCk7CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QuaXNFbmFibGVkID0gdGhpcy5pc0VuYWJsZWQoKTsKKyAgICAgICAg
Ly8gUGFyZW50CisgICAgICAgIGlmICh0aGlzLnBhcmVudCkgeworICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5wYXJlbnRJZCA9IHRoaXMucGFyZW50LmlkOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLy8gU3RhdGljcwor
ICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgVHJhbnNmb3JtTm9kZSBvYmplY3QgcGFyc2Vk
IGZyb20gdGhlIHNvdXJjZSBwcm92aWRlZC4KKyAgICAgKiBAcGFyYW0gcGFyc2VkVHJhbnNmb3Jt
Tm9kZSBpcyB0aGUgc291cmNlLgorICAgICAqIEBwYXJhbSBzY2VuZSB0aGUgc2NuZSB0aGUgb2Jq
ZWN0IGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gcm9vdFVybCBpcyBhIHN0cmluZywgaXQncyB0
aGUgcm9vdCBVUkwgdG8gcHJlZml4IHRoZSBgZGVsYXlMb2FkaW5nRmlsZWAgcHJvcGVydHkgd2l0
aAorICAgICAqIEByZXR1cm5zIGEgbmV3IFRyYW5zZm9ybU5vZGUgb2JqZWN0IHBhcnNlZCBmcm9t
IHRoZSBzb3VyY2UgcHJvdmlkZWQuCisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5QYXJzZSA9
IGZ1bmN0aW9uIChwYXJzZWRUcmFuc2Zvcm1Ob2RlLCBzY2VuZSwgcm9vdFVybCkgeworICAgICAg
ICB2YXIgdHJhbnNmb3JtTm9kZSA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0
dXJuIG5ldyBUcmFuc2Zvcm1Ob2RlKHBhcnNlZFRyYW5zZm9ybU5vZGUubmFtZSwgc2NlbmUpOyB9
LCBwYXJzZWRUcmFuc2Zvcm1Ob2RlLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIGlmIChwYXJz
ZWRUcmFuc2Zvcm1Ob2RlLmxvY2FsTWF0cml4KSB7CisgICAgICAgICAgICB0cmFuc2Zvcm1Ob2Rl
LnNldFByZVRyYW5zZm9ybU1hdHJpeChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siTWF0cml4Il0uRnJvbUFycmF5KHBhcnNlZFRyYW5zZm9ybU5vZGUubG9j
YWxNYXRyaXgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwYXJzZWRUcmFuc2Zvcm1O
b2RlLnBpdm90TWF0cml4KSB7CisgICAgICAgICAgICB0cmFuc2Zvcm1Ob2RlLnNldFBpdm90TWF0
cml4KF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRy
aXgiXS5Gcm9tQXJyYXkocGFyc2VkVHJhbnNmb3JtTm9kZS5waXZvdE1hdHJpeCkpOworICAgICAg
ICB9CisgICAgICAgIHRyYW5zZm9ybU5vZGUuc2V0RW5hYmxlZChwYXJzZWRUcmFuc2Zvcm1Ob2Rl
LmlzRW5hYmxlZCk7CisgICAgICAgIC8vIFBhcmVudAorICAgICAgICBpZiAocGFyc2VkVHJhbnNm
b3JtTm9kZS5wYXJlbnRJZCkgeworICAgICAgICAgICAgdHJhbnNmb3JtTm9kZS5fd2FpdGluZ1Bh
cmVudElkID0gcGFyc2VkVHJhbnNmb3JtTm9kZS5wYXJlbnRJZDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJhbnNmb3JtTm9kZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCBhbGwg
Y2hpbGQtdHJhbnNmb3JtTm9kZXMgb2YgdGhpcyBub2RlCisgICAgICogQHBhcmFtIGRpcmVjdERl
c2NlbmRhbnRzT25seSBkZWZpbmVzIGlmIHRydWUgb25seSBkaXJlY3QgZGVzY2VuZGFudHMgb2Yg
J3RoaXMnIHdpbGwgYmUgY29uc2lkZXJlZCwgaWYgZmFsc2UgZGlyZWN0IGFuZCBhbHNvIGluZGly
ZWN0IChjaGlsZHJlbiBvZiBjaGlsZHJlbiwgYW4gc28gb24gaW4gYSByZWN1cnNpdmUgbWFubmVy
KSBkZXNjZW5kYW50cyBvZiAndGhpcycgd2lsbCBiZSBjb25zaWRlcmVkCisgICAgICogQHBhcmFt
IHByZWRpY2F0ZSBkZWZpbmVzIGFuIG9wdGlvbmFsIHByZWRpY2F0ZSB0aGF0IHdpbGwgYmUgY2Fs
bGVkIG9uIGV2ZXJ5IGV2YWx1YXRlZCBjaGlsZCwgdGhlIHByZWRpY2F0ZSBtdXN0IHJldHVybiB0
cnVlIGZvciBhIGdpdmVuIGNoaWxkIHRvIGJlIHBhcnQgb2YgdGhlIHJlc3VsdCwgb3RoZXJ3aXNl
IGl0IHdpbGwgYmUgaWdub3JlZAorICAgICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIFRyYW5zZm9y
bU5vZGUKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5nZXRDaGlsZFRyYW5z
Zm9ybU5vZGVzID0gZnVuY3Rpb24gKGRpcmVjdERlc2NlbmRhbnRzT25seSwgcHJlZGljYXRlKSB7
CisgICAgICAgIHZhciByZXN1bHRzID0gW107CisgICAgICAgIHRoaXMuX2dldERlc2NlbmRhbnRz
KHJlc3VsdHMsIGRpcmVjdERlc2NlbmRhbnRzT25seSwgZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAg
ICAgICAgIHJldHVybiAoKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKG5vZGUpKSAmJiAobm9kZSBp
bnN0YW5jZW9mIFRyYW5zZm9ybU5vZGUpKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHRzOworICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZXMgcmVzb3VyY2VzIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIHRyYW5zZm9ybSBub2RlLgorICAgICAqIEBwYXJhbSBkb05vdFJlY3Vy
c2UgU2V0IHRvIHRydWUgdG8gbm90IHJlY3Vyc2UgaW50byBlYWNoIGNoaWxkcmVuIChyZWN1cnNl
IGludG8gZWFjaCBjaGlsZHJlbiBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBkaXNwb3NlTWF0
ZXJpYWxBbmRUZXh0dXJlcyBTZXQgdG8gdHJ1ZSB0byBhbHNvIGRpc3Bvc2UgcmVmZXJlbmNlZCBt
YXRlcmlhbHMgYW5kIHRleHR1cmVzIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqLworICAgIFRy
YW5zZm9ybU5vZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZG9Ob3RSZWN1cnNlLCBk
aXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcykgeworICAgICAgICBpZiAoZGlzcG9zZU1hdGVyaWFs
QW5kVGV4dHVyZXMgPT09IHZvaWQgMCkgeyBkaXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcyA9IGZh
bHNlOyB9CisgICAgICAgIC8vIEFuaW1hdGlvbnMKKyAgICAgICAgdGhpcy5nZXRTY2VuZSgpLnN0
b3BBbmltYXRpb24odGhpcyk7CisgICAgICAgIC8vIFJlbW92ZSBmcm9tIHNjZW5lCisgICAgICAg
IHRoaXMuZ2V0U2NlbmUoKS5yZW1vdmVUcmFuc2Zvcm1Ob2RlKHRoaXMpOworICAgICAgICB0aGlz
Lm9uQWZ0ZXJXb3JsZE1hdHJpeFVwZGF0ZU9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgaWYg
KGRvTm90UmVjdXJzZSkgeworICAgICAgICAgICAgdmFyIHRyYW5zZm9ybU5vZGVzID0gdGhpcy5n
ZXRDaGlsZFRyYW5zZm9ybU5vZGVzKHRydWUpOworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAw
LCB0cmFuc2Zvcm1Ob2Rlc18xID0gdHJhbnNmb3JtTm9kZXM7IF9pIDwgdHJhbnNmb3JtTm9kZXNf
MS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtTm9kZSA9IHRy
YW5zZm9ybU5vZGVzXzFbX2ldOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybU5vZGUucGFyZW50
ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ob2RlLmNvbXB1dGVXb3JsZE1hdHJp
eCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBfc3VwZXIucHJvdG90
eXBlLmRpc3Bvc2UuY2FsbCh0aGlzLCBkb05vdFJlY3Vyc2UsIGRpc3Bvc2VNYXRlcmlhbEFuZFRl
eHR1cmVzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVuaWZvcm1seSBzY2FsZXMgdGhlIG1l
c2ggdG8gZml0IGluc2lkZSBvZiBhIHVuaXQgY3ViZSAoMSBYIDEgWCAxIHVuaXRzKQorICAgICAq
IEBwYXJhbSBpbmNsdWRlRGVzY2VuZGFudHMgVXNlIHRoZSBoaWVyYXJjaHkncyBib3VuZGluZyBi
b3ggaW5zdGVhZCBvZiB0aGUgbWVzaCdzIGJvdW5kaW5nIGJveC4gRGVmYXVsdCBpcyBmYWxzZQor
ICAgICAqIEBwYXJhbSBpZ25vcmVSb3RhdGlvbiBpZ25vcmUgcm90YXRpb24gd2hlbiBjb21wdXRp
bmcgdGhlIHNjYWxlIChpZS4gb2JqZWN0IHdpbGwgYmUgYXhpcyBhbGlnbmVkKS4gRGVmYXVsdCBp
cyBmYWxzZQorICAgICAqIEBwYXJhbSBwcmVkaWNhdGUgcHJlZGljYXRlIHRoYXQgaXMgcGFzc2Vk
IGluIHRvIGdldEhpZXJhcmNoeUJvdW5kaW5nVmVjdG9ycyB3aGVuIHNlbGVjdGluZyB3aGljaCBv
YmplY3Qgc2hvdWxkIGJlIGluY2x1ZGVkIHdoZW4gc2NhbGluZworICAgICAqIEByZXR1cm5zIHRo
ZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5ub3Jt
YWxpemVUb1VuaXRDdWJlID0gZnVuY3Rpb24gKGluY2x1ZGVEZXNjZW5kYW50cywgaWdub3JlUm90
YXRpb24sIHByZWRpY2F0ZSkgeworICAgICAgICBpZiAoaW5jbHVkZURlc2NlbmRhbnRzID09PSB2
b2lkIDApIHsgaW5jbHVkZURlc2NlbmRhbnRzID0gdHJ1ZTsgfQorICAgICAgICBpZiAoaWdub3Jl
Um90YXRpb24gPT09IHZvaWQgMCkgeyBpZ25vcmVSb3RhdGlvbiA9IGZhbHNlOyB9CisgICAgICAg
IHZhciBzdG9yZWRSb3RhdGlvbiA9IG51bGw7CisgICAgICAgIHZhciBzdG9yZWRSb3RhdGlvblF1
YXRlcm5pb24gPSBudWxsOworICAgICAgICBpZiAoaWdub3JlUm90YXRpb24pIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIHN0b3Jl
ZFJvdGF0aW9uUXVhdGVybmlvbiA9IHRoaXMucm90YXRpb25RdWF0ZXJuaW9uLmNsb25lKCk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb21GbG9hdHMoMCwg
MCwgMCwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnJvdGF0
aW9uKSB7CisgICAgICAgICAgICAgICAgc3RvcmVkUm90YXRpb24gPSB0aGlzLnJvdGF0aW9uLmNs
b25lKCk7CisgICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi5jb3B5RnJvbUZsb2F0cygwLCAw
LCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgYm91bmRpbmdWZWN0
b3JzID0gdGhpcy5nZXRIaWVyYXJjaHlCb3VuZGluZ1ZlY3RvcnMoaW5jbHVkZURlc2NlbmRhbnRz
LCBwcmVkaWNhdGUpOworICAgICAgICB2YXIgc2l6ZVZlYyA9IGJvdW5kaW5nVmVjdG9ycy5tYXgu
c3VidHJhY3QoYm91bmRpbmdWZWN0b3JzLm1pbik7CisgICAgICAgIHZhciBtYXhEaW1lbnNpb24g
PSBNYXRoLm1heChzaXplVmVjLngsIHNpemVWZWMueSwgc2l6ZVZlYy56KTsKKyAgICAgICAgaWYg
KG1heERpbWVuc2lvbiA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIHNjYWxlID0gMSAvIG1heERpbWVuc2lvbjsKKyAgICAgICAgdGhpcy5z
Y2FsaW5nLnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgICAgIGlmIChpZ25vcmVSb3RhdGlvbikg
eworICAgICAgICAgICAgaWYgKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uICYmIHN0b3JlZFJvdGF0
aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9u
LmNvcHlGcm9tKHN0b3JlZFJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmICh0aGlzLnJvdGF0aW9uICYmIHN0b3JlZFJvdGF0aW9uKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi5jb3B5RnJvbShzdG9yZWRSb3RhdGlvbik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBU
cmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5fc3luY0Fic29sdXRlU2NhbGluZ0FuZFJvdGF0aW9uID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX2lzQWJzb2x1dGVTeW5jZWQpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4LmRlY29tcG9zZSh0aGlzLl9hYnNvbHV0ZVNjYWxp
bmcsIHRoaXMuX2Fic29sdXRlUm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgIHRoaXMu
X2lzQWJzb2x1dGVTeW5jZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfTsKKyAgICAvLyBTdGF0
aWNzCisgICAgLyoqCisgICAgICogT2JqZWN0IHdpbGwgbm90IHJvdGF0ZSB0byBmYWNlIHRoZSBj
YW1lcmEKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1PREVfTk9ORSA9IDA7
CisgICAgLyoqCisgICAgICogT2JqZWN0IHdpbGwgcm90YXRlIHRvIGZhY2UgdGhlIGNhbWVyYSBi
dXQgb25seSBvbiB0aGUgeCBheGlzCisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5CSUxMQk9B
UkRNT0RFX1ggPSAxOworICAgIC8qKgorICAgICAqIE9iamVjdCB3aWxsIHJvdGF0ZSB0byBmYWNl
IHRoZSBjYW1lcmEgYnV0IG9ubHkgb24gdGhlIHkgYXhpcworICAgICAqLworICAgIFRyYW5zZm9y
bU5vZGUuQklMTEJPQVJETU9ERV9ZID0gMjsKKyAgICAvKioKKyAgICAgKiBPYmplY3Qgd2lsbCBy
b3RhdGUgdG8gZmFjZSB0aGUgY2FtZXJhIGJ1dCBvbmx5IG9uIHRoZSB6IGF4aXMKKyAgICAgKi8K
KyAgICBUcmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1PREVfWiA9IDQ7CisgICAgLyoqCisgICAgICog
T2JqZWN0IHdpbGwgcm90YXRlIHRvIGZhY2UgdGhlIGNhbWVyYQorICAgICAqLworICAgIFRyYW5z
Zm9ybU5vZGUuQklMTEJPQVJETU9ERV9BTEwgPSA3OworICAgIC8qKgorICAgICAqIE9iamVjdCB3
aWxsIHJvdGF0ZSB0byBmYWNlIHRoZSBjYW1lcmEncyBwb3NpdGlvbiBpbnN0ZWFkIG9mIG9yaWVu
dGF0aW9uCisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5CSUxMQk9BUkRNT0RFX1VTRV9QT1NJ
VElPTiA9IDEyODsKKyAgICBUcmFuc2Zvcm1Ob2RlLl9sb29rQXRWZWN0b3JDYWNoZSA9IG5ldyBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJd
KDAsIDAsIDApOworICAgIFRyYW5zZm9ybU5vZGUuX3JvdGF0aW9uQXhpc0NhY2hlID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9u
Il0oKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemVBc1ZlY3RvcjMiXSkoInBvc2l0aW9uIikKKyAgICBdLCBUcmFu
c2Zvcm1Ob2RlLnByb3RvdHlwZSwgIl9wb3NpdGlvbiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
QXNWZWN0b3IzIl0pKCJyb3RhdGlvbiIpCisgICAgXSwgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUs
ICJfcm90YXRpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzUXVhdGVybmlvbiJdKSgicm90
YXRpb25RdWF0ZXJuaW9uIikKKyAgICBdLCBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZSwgIl9yb3Rh
dGlvblF1YXRlcm5pb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVmVjdG9yMyJdKSgic2Nh
bGluZyIpCisgICAgXSwgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJfc2NhbGluZyIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCJiaWxsYm9hcmRNb2RlIikKKyAgICBdLCBUcmFuc2Zvcm1O
b2RlLnByb3RvdHlwZSwgIl9iaWxsYm9hcmRNb2RlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLCAic2NhbGluZ0RldGVybWluYW50
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoImluZmluaXRlRGlzdGFuY2UiKQorICAgIF0s
IFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLCAiX2luZmluaXRlRGlzdGFuY2UiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJpZ25v
cmVOb25Vbmlmb3JtU2NhbGluZyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBd
LCBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZSwgInJlSW50ZWdyYXRlUm90YXRpb25JbnRvUm90YXRp
b25RdWF0ZXJuaW9uIiwgdm9pZCAwKTsKKyAgICByZXR1cm4gVHJhbnNmb3JtTm9kZTsKK30oX25v
ZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZSJdKSk7CisKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vTWlzYy9IaWdoRHluYW1pY1JhbmdlL2N1YmVtYXBUb1NwaGVyaWNhbFBv
bHlub21pYWwudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL0hpZ2hEeW5hbWljUmFu
Z2UvY3ViZW1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbC50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbFRvb2xzICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN1YmVNYXBUb1NwaGVyaWNhbFBvbHlu
b21pYWxUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5v
bWlhbFRvb2xzOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRo
LnNjYWxhciAqLyAiLi9NYXRocy9tYXRoLnNjYWxhci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRoc19zcGhlcmljYWxQb2x5bm9taWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9zcGhlcmljYWxQb2x5
bm9taWFsICovICIuL01hdGhzL3NwaGVyaWNhbFBvbHlub21pYWwudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvY29uc3RhbnRzICov
ICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGhzX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLmNvbnN0YW50cyAqLyAiLi9NYXRocy9t
YXRoLmNvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsK
KworCisKKworCisKK3ZhciBGaWxlRmFjZU9yaWVudGF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEZpbGVGYWNlT3JpZW50YXRpb24obmFtZSwgd29ybGRB
eGlzRm9yTm9ybWFsLCB3b3JsZEF4aXNGb3JGaWxlWCwgd29ybGRBeGlzRm9yRmlsZVkpIHsKKyAg
ICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy53b3JsZEF4aXNGb3JOb3JtYWwg
PSB3b3JsZEF4aXNGb3JOb3JtYWw7CisgICAgICAgIHRoaXMud29ybGRBeGlzRm9yRmlsZVggPSB3
b3JsZEF4aXNGb3JGaWxlWDsKKyAgICAgICAgdGhpcy53b3JsZEF4aXNGb3JGaWxlWSA9IHdvcmxk
QXhpc0ZvckZpbGVZOworICAgIH0KKyAgICByZXR1cm4gRmlsZUZhY2VPcmllbnRhdGlvbjsKK30o
KSk7CisvKioKKyAqIEhlbHBlciBjbGFzcyBkZWFsaW5nIHdpdGggdGhlIGV4dHJhY3Rpb24gb2Yg
c3BoZXJpY2FsIHBvbHlub21pYWwgZGF0YUFycmF5CisgKiBmcm9tIGEgY3ViZSBtYXAuCisgKi8K
K3ZhciBDdWJlTWFwVG9TcGhlcmljYWxQb2x5bm9taWFsVG9vbHMgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbFRv
b2xzKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyBhIHRleHR1cmUgdG8gdGhl
IGFjY29yZGluZyBTcGhlcmljYWwgUG9seW5vbWlhbCBkYXRhLgorICAgICAqIFRoaXMgZXh0cmFj
dHMgdGhlIGZpcnN0IDMgb3JkZXJzIG9ubHkgYXMgdGhleSBhcmUgdGhlIG9ubHkgb25lIHVzZWQg
aW4gdGhlIGxpZ2h0aW5nLgorICAgICAqCisgICAgICogQHBhcmFtIHRleHR1cmUgVGhlIHRleHR1
cmUgdG8gZXh0cmFjdCB0aGUgaW5mb3JtYXRpb24gZnJvbS4KKyAgICAgKiBAcmV0dXJuIFRoZSBT
cGhlcmljYWwgUG9seW5vbWlhbCBkYXRhLgorICAgICAqLworICAgIEN1YmVNYXBUb1NwaGVyaWNh
bFBvbHlub21pYWxUb29scy5Db252ZXJ0Q3ViZU1hcFRleHR1cmVUb1NwaGVyaWNhbFBvbHlub21p
YWwgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgICAgICBpZiAoIXRleHR1cmUuaXNDdWJlKSB7
CisgICAgICAgICAgICAvLyBPbmx5IHN1cHBvcnRzIGN1YmUgVGV4dHVyZXMgY3VycmVudGx5Lgor
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNpemUgPSB0
ZXh0dXJlLmdldFNpemUoKS53aWR0aDsKKyAgICAgICAgdmFyIHJpZ2h0ID0gdGV4dHVyZS5yZWFk
UGl4ZWxzKDApOworICAgICAgICB2YXIgbGVmdCA9IHRleHR1cmUucmVhZFBpeGVscygxKTsKKyAg
ICAgICAgdmFyIHVwOworICAgICAgICB2YXIgZG93bjsKKyAgICAgICAgaWYgKHRleHR1cmUuaXNS
ZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHVwID0gdGV4dHVyZS5yZWFkUGl4ZWxzKDMpOwor
ICAgICAgICAgICAgZG93biA9IHRleHR1cmUucmVhZFBpeGVscygyKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVwID0gdGV4dHVyZS5yZWFkUGl4ZWxzKDIpOworICAg
ICAgICAgICAgZG93biA9IHRleHR1cmUucmVhZFBpeGVscygzKTsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgZnJvbnQgPSB0ZXh0dXJlLnJlYWRQaXhlbHMoNCk7CisgICAgICAgIHZhciBiYWNrID0g
dGV4dHVyZS5yZWFkUGl4ZWxzKDUpOworICAgICAgICB2YXIgZ2FtbWFTcGFjZSA9IHRleHR1cmUu
Z2FtbWFTcGFjZTsKKyAgICAgICAgLy8gQWx3YXlzIHJlYWQgYXMgUkdCQS4KKyAgICAgICAgdmFy
IGZvcm1hdCA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJDb25zdGFudHMiXS5URVhUVVJFRk9STUFUX1JHQkE7CisgICAgICAgIHZhciB0eXBlID0gX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJd
LlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsKKyAgICAgICAgaWYgKHRleHR1cmUudGV4dHVyZVR5
cGUgJiYgdGV4dHVyZS50ZXh0dXJlVHlwZSAhPT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lO
VCkgeworICAgICAgICAgICAgdHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9BVDsKKyAgICAgICAg
fQorICAgICAgICB2YXIgY3ViZUluZm8gPSB7CisgICAgICAgICAgICBzaXplOiBzaXplLAorICAg
ICAgICAgICAgcmlnaHQ6IHJpZ2h0LAorICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAgICAgICAg
ICAgIHVwOiB1cCwKKyAgICAgICAgICAgIGRvd246IGRvd24sCisgICAgICAgICAgICBmcm9udDog
ZnJvbnQsCisgICAgICAgICAgICBiYWNrOiBiYWNrLAorICAgICAgICAgICAgZm9ybWF0OiBmb3Jt
YXQsCisgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgZ2FtbWFTcGFjZTogZ2Ft
bWFTcGFjZSwKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIHRoaXMuQ29udmVydEN1YmVNYXBU
b1NwaGVyaWNhbFBvbHlub21pYWwoY3ViZUluZm8pOworICAgIH07CisgICAgLyoqCisgICAgICog
Q29udmVydHMgYSBjdWJlbWFwIHRvIHRoZSBhY2NvcmRpbmcgU3BoZXJpY2FsIFBvbHlub21pYWwg
ZGF0YS4KKyAgICAgKiBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCAzIG9yZGVycyBvbmx5IGFzIHRo
ZXkgYXJlIHRoZSBvbmx5IG9uZSB1c2VkIGluIHRoZSBsaWdodGluZy4KKyAgICAgKgorICAgICAq
IEBwYXJhbSBjdWJlSW5mbyBUaGUgQ3ViZSBtYXAgdG8gZXh0cmFjdCB0aGUgaW5mb3JtYXRpb24g
ZnJvbS4KKyAgICAgKiBAcmV0dXJuIFRoZSBTcGhlcmljYWwgUG9seW5vbWlhbCBkYXRhLgorICAg
ICAqLworICAgIEN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29scy5Db252ZXJ0Q3ViZU1h
cFRvU3BoZXJpY2FsUG9seW5vbWlhbCA9IGZ1bmN0aW9uIChjdWJlSW5mbykgeworICAgICAgICB2
YXIgc3BoZXJpY2FsSGFybW9uaWNzID0gbmV3IF9NYXRoc19zcGhlcmljYWxQb2x5bm9taWFsX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNwaGVyaWNhbEhhcm1vbmljcyJdKCk7CisgICAg
ICAgIHZhciB0b3RhbFNvbGlkQW5nbGUgPSAwLjA7CisgICAgICAgIC8vIFRoZSAodSx2KSByYW5n
ZSBpcyBbLTEsKzFdLCBzbyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIHRleGVsIGlzIDIvU2l6
ZS4KKyAgICAgICAgdmFyIGR1ID0gMi4wIC8gY3ViZUluZm8uc2l6ZTsKKyAgICAgICAgdmFyIGR2
ID0gZHU7CisgICAgICAgIC8vIFRoZSAodSx2KSBvZiB0aGUgZmlyc3QgdGV4ZWwgaXMgaGFsZiBh
IHRleGVsIGZyb20gdGhlIGNvcm5lciAoLTEsLTEpLgorICAgICAgICB2YXIgbWluVVYgPSBkdSAq
IDAuNSAtIDEuMDsKKyAgICAgICAgZm9yICh2YXIgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwg
NjsgZmFjZUluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBmaWxlRmFjZSA9IHRoaXMuRmlsZUZh
Y2VzW2ZhY2VJbmRleF07CisgICAgICAgICAgICB2YXIgZGF0YUFycmF5ID0gY3ViZUluZm9bZmls
ZUZhY2UubmFtZV07CisgICAgICAgICAgICB2YXIgdiA9IG1pblVWOworICAgICAgICAgICAgLy8g
VE9ETzogd2UgY291bGQgcGVyZm9ybSB0aGUgc3VtbWF0aW9uIGRpcmVjdGx5IGludG8gYSBTcGhl
cmljYWxQb2x5bm9taWFsIChTUCksIHdoaWNoIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gU3BoZXJp
Y2FsSGFybW9uaWMgKFNIKS4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgcG9zc2libGUgYmVjYXVz
ZSBkdXJpbmcgdGhlIHN1bW1hdGlvbiB3ZSBkbyBub3QgbmVlZCB0aGUgU0gtc3BlY2lmaWMgcHJv
cGVydGllcywgZS5nLiBvcnRob2dvbmFsaXR5LgorICAgICAgICAgICAgLy8gQmVjYXVzZSBTUCBp
cyBzdGlsbCBsaW5lYXIsIHNvIHN1bW1hdGlvbiBpcyBmaW5lIGluIHRoYXQgYmFzaXMuCisgICAg
ICAgICAgICB2YXIgc3RyaWRlID0gY3ViZUluZm8uZm9ybWF0ID09PSBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1B
VF9SR0JBID8gNCA6IDM7CisgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGN1YmVJbmZv
LnNpemU7IHkrKykgeworICAgICAgICAgICAgICAgIHZhciB1ID0gbWluVVY7CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBjdWJlSW5mby5zaXplOyB4KyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gV29ybGQgZGlyZWN0aW9uIChub3Qgbm9ybWFsaXNlZCkKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHdvcmxkRGlyZWN0aW9uID0gZmlsZUZhY2Uud29ybGRBeGlzRm9yRmls
ZVguc2NhbGUodSkuYWRkKGZpbGVGYWNlLndvcmxkQXhpc0ZvckZpbGVZLnNjYWxlKHYpKS5hZGQo
ZmlsZUZhY2Uud29ybGRBeGlzRm9yTm9ybWFsKTsKKyAgICAgICAgICAgICAgICAgICAgd29ybGRE
aXJlY3Rpb24ubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YVNvbGlk
QW5nbGUgPSBNYXRoLnBvdygxLjAgKyB1ICogdSArIHYgKiB2LCAtMy4wIC8gMi4wKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHIgPSBkYXRhQXJyYXlbKHkgKiBjdWJlSW5mby5zaXplICogc3Ry
aWRlKSArICh4ICogc3RyaWRlKSArIDBdOworICAgICAgICAgICAgICAgICAgICB2YXIgZyA9IGRh
dGFBcnJheVsoeSAqIGN1YmVJbmZvLnNpemUgKiBzdHJpZGUpICsgKHggKiBzdHJpZGUpICsgMV07
CisgICAgICAgICAgICAgICAgICAgIHZhciBiID0gZGF0YUFycmF5Wyh5ICogY3ViZUluZm8uc2l6
ZSAqIHN0cmlkZSkgKyAoeCAqIHN0cmlkZSkgKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
UHJldmVudCBOYU4gaGFybW9uaWNzIHdpdGggZXh0cmVtZSBIRFJJIGRhdGEuCisgICAgICAgICAg
ICAgICAgICAgIGlmIChpc05hTihyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgciA9IDA7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKGcp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oYikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGIgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIEhhbmRsZSBJbnRlZ2VyIHR5cGVzLgorICAgICAgICAgICAgICAgICAgICBpZiAoY3ViZUlu
Zm8udHlwZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgciAvPSAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICBnIC89IDI1NTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGIgLz0gMjU1OworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBHYW1tYSBzcGFjZSB0ZXh0dXJlcy4KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGN1YmVJbmZvLmdhbW1hU3BhY2UpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHIgPSBNYXRoLnBvdyhfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siU2NhbGFyIl0uQ2xhbXAociksIF9NYXRoc19tYXRoX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUb0xpbmVhclNwYWNlIl0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgZyA9IE1hdGgucG93KF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2FsYXIiXS5DbGFtcChnKSwgX01hdGhzX21hdGhfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRvTGluZWFyU3BhY2UiXSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBiID0gTWF0aC5wb3coX01hdGhzX21hdGhfc2NhbGFyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjYWxhciJdLkNsYW1wKGIpLCBfTWF0aHNfbWF0
aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVG9MaW5lYXJTcGFjZSJd
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50
IHRvIGV4cGxvZGUgaW4gY2FzZSBvZiByZWFsbHkgaGlnaCBkeW5hbWljIHJhbmdlcy4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gc2ggMyB3b3VsZCBub3QgYmUgZW5vdWdoIHRvIGFjY3VyYXRlbHkg
cmVwcmVzZW50IGl0LgorICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gNDA5NjsKKyAgICAg
ICAgICAgICAgICAgICAgciA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJTY2FsYXIiXS5DbGFtcChyLCAwLCBtYXgpOworICAgICAgICAgICAgICAgICAg
ICBnID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNj
YWxhciJdLkNsYW1wKGcsIDAsIG1heCk7CisgICAgICAgICAgICAgICAgICAgIGIgPSBfTWF0aHNf
bWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NhbGFyIl0uQ2xhbXAo
YiwgMCwgbWF4KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gbmV3IF9NYXRoc19t
YXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbG9yMyJdKHIsIGcsIGIp
OworICAgICAgICAgICAgICAgICAgICBzcGhlcmljYWxIYXJtb25pY3MuYWRkTGlnaHQod29ybGRE
aXJlY3Rpb24sIGNvbG9yLCBkZWx0YVNvbGlkQW5nbGUpOworICAgICAgICAgICAgICAgICAgICB0
b3RhbFNvbGlkQW5nbGUgKz0gZGVsdGFTb2xpZEFuZ2xlOworICAgICAgICAgICAgICAgICAgICB1
ICs9IGR1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2ICs9IGR2OworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFNvbGlkIGFuZ2xlIGZvciBlbnRpcmUg
c3BoZXJlIGlzIDQqcGkKKyAgICAgICAgdmFyIHNwaGVyZVNvbGlkQW5nbGUgPSA0LjAgKiBNYXRo
LlBJOworICAgICAgICAvLyBBZGp1c3QgdGhlIHNvbGlkIGFuZ2xlIHRvIGFsbG93IGZvciBob3cg
bWFueSBmYWNlcyB3ZSBwcm9jZXNzZWQuCisgICAgICAgIHZhciBmYWNlc1Byb2Nlc3NlZCA9IDYu
MDsKKyAgICAgICAgdmFyIGV4cGVjdGVkU29saWRBbmdsZSA9IHNwaGVyZVNvbGlkQW5nbGUgKiBm
YWNlc1Byb2Nlc3NlZCAvIDYuMDsKKyAgICAgICAgLy8gQWRqdXN0IHRoZSBoYXJtb25pY3Mgc28g
dGhhdCB0aGUgYWNjdW11bGF0ZWQgc29saWQgYW5nbGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgc29s
aWQgYW5nbGUuCisgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIG51bWVyaWNh
bCBpbnRlZ3JhdGlvbiBvdmVyIHRoZSBjdWJlIHVzZXMgYQorICAgICAgICAvLyBzbWFsbCBhbmds
ZSBhcHByb3hpbWF0aW9uIG9mIHNvbGlkIGFuZ2xlIGZvciBlYWNoIHRleGVsIChzZWUgZGVsdGFT
b2xpZEFuZ2xlKSwKKyAgICAgICAgLy8gYW5kIGFsc28gdG8gY29tcGVuc2F0ZSBmb3IgYWNjdW11
bGF0aXZlIGVycm9yIGR1ZSB0byBmbG9hdCBwcmVjaXNpb24gaW4gdGhlIHN1bW1hdGlvbi4KKyAg
ICAgICAgdmFyIGNvcnJlY3Rpb25GYWN0b3IgPSBleHBlY3RlZFNvbGlkQW5nbGUgLyB0b3RhbFNv
bGlkQW5nbGU7CisgICAgICAgIHNwaGVyaWNhbEhhcm1vbmljcy5zY2FsZUluUGxhY2UoY29ycmVj
dGlvbkZhY3Rvcik7CisgICAgICAgIHNwaGVyaWNhbEhhcm1vbmljcy5jb252ZXJ0SW5jaWRlbnRS
YWRpYW5jZVRvSXJyYWRpYW5jZSgpOworICAgICAgICBzcGhlcmljYWxIYXJtb25pY3MuY29udmVy
dElycmFkaWFuY2VUb0xhbWJlcnRpYW5SYWRpYW5jZSgpOworICAgICAgICByZXR1cm4gX01hdGhz
X3NwaGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU3BoZXJp
Y2FsUG9seW5vbWlhbCJdLkZyb21IYXJtb25pY3Moc3BoZXJpY2FsSGFybW9uaWNzKTsKKyAgICB9
OworICAgIEN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29scy5GaWxlRmFjZXMgPSBbCisg
ICAgICAgIG5ldyBGaWxlRmFjZU9yaWVudGF0aW9uKCJyaWdodCIsIG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDEsIDAsIDApLCBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3Rv
cjMiXSgwLCAwLCAtMSksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIC0xLCAwKSksCisgICAgICAgIG5ldyBGaWxlRmFjZU9y
aWVudGF0aW9uKCJsZWZ0IiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oLTEsIDAsIDApLCBuZXcgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAwLCAxKSwgbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0o
MCwgLTEsIDApKSwKKyAgICAgICAgbmV3IEZpbGVGYWNlT3JpZW50YXRpb24oInVwIiwgbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0o
MCwgMSwgMCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMyJdKDEsIDAsIDApLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAwLCAxKSksCisgICAgICAgIG5ldyBG
aWxlRmFjZU9yaWVudGF0aW9uKCJkb3duIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMCwgLTEsIDApLCBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgxLCAwLCAw
KSwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0oMCwgMCwgLTEpKSwKKyAgICAgICAgbmV3IEZpbGVGYWNlT3JpZW50YXRpb24oImZy
b250IiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0oMCwgMCwgMSksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDEsIDAsIDApLCBuZXcgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAtMSwgMCkpLAor
ICAgICAgICBuZXcgRmlsZUZhY2VPcmllbnRhdGlvbigiYmFjayIsIG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIDAsIC0xKSwg
bmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0
b3IzIl0oLTEsIDAsIDApLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAtMSwgMCkpIC8vIC1aIGJvdHRvbQorICAgIF07Cisg
ICAgcmV0dXJuIEN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29sczsKK30oKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9IaWdoRHluYW1pY1JhbmdlL2hkci50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlz
Yy9IaWdoRHluYW1pY1JhbmdlL2hkci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBIRFJUb29scyAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJIRFJUb29scyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gSERSVG9vbHM7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5vcmFtYVRv
Q3ViZW1hcF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9wYW5vcmFtYVRvQ3ViZW1hcCAqLyAiLi9NaXNjL0hpZ2hEeW5hbWljUmFuZ2UvcGFu
b3JhbWFUb0N1YmVtYXAudHMiKTsKKworLyoqCisgKiBUaGlzIGdyb3VwcyB0b29scyB0byBjb252
ZXJ0IEhEUiB0ZXh0dXJlIHRvIG5hdGl2ZSBjb2xvcnMgYXJyYXkuCisgKi8KK3ZhciBIRFJUb29s
cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBIRFJUb29scygp
IHsKKyAgICB9CisgICAgSERSVG9vbHMuTGRleHAgPSBmdW5jdGlvbiAobWFudGlzc2EsIGV4cG9u
ZW50KSB7CisgICAgICAgIGlmIChleHBvbmVudCA+IDEwMjMpIHsKKyAgICAgICAgICAgIHJldHVy
biBtYW50aXNzYSAqIE1hdGgucG93KDIsIDEwMjMpICogTWF0aC5wb3coMiwgZXhwb25lbnQgLSAx
MDIzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXhwb25lbnQgPCAtMTA3NCkgeworICAgICAg
ICAgICAgcmV0dXJuIG1hbnRpc3NhICogTWF0aC5wb3coMiwgLTEwNzQpICogTWF0aC5wb3coMiwg
ZXhwb25lbnQgKyAxMDc0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWFudGlzc2EgKiBN
YXRoLnBvdygyLCBleHBvbmVudCk7CisgICAgfTsKKyAgICBIRFJUb29scy5SZ2JlMmZsb2F0ID0g
ZnVuY3Rpb24gKGZsb2F0MzJhcnJheSwgcmVkLCBncmVlbiwgYmx1ZSwgZXhwb25lbnQsIGluZGV4
KSB7CisgICAgICAgIGlmIChleHBvbmVudCA+IDApIHsgLypub256ZXJvIHBpeGVsKi8KKyAgICAg
ICAgICAgIGV4cG9uZW50ID0gdGhpcy5MZGV4cCgxLjAsIGV4cG9uZW50IC0gKDEyOCArIDgpKTsK
KyAgICAgICAgICAgIGZsb2F0MzJhcnJheVtpbmRleCArIDBdID0gcmVkICogZXhwb25lbnQ7Cisg
ICAgICAgICAgICBmbG9hdDMyYXJyYXlbaW5kZXggKyAxXSA9IGdyZWVuICogZXhwb25lbnQ7Cisg
ICAgICAgICAgICBmbG9hdDMyYXJyYXlbaW5kZXggKyAyXSA9IGJsdWUgKiBleHBvbmVudDsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZsb2F0MzJhcnJheVtpbmRleCAr
IDBdID0gMDsKKyAgICAgICAgICAgIGZsb2F0MzJhcnJheVtpbmRleCArIDFdID0gMDsKKyAgICAg
ICAgICAgIGZsb2F0MzJhcnJheVtpbmRleCArIDJdID0gMDsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgSERSVG9vbHMucmVhZFN0cmluZ0xpbmUgPSBmdW5jdGlvbiAodWludDhhcnJheSwgc3RhcnRJ
bmRleCkgeworICAgICAgICB2YXIgbGluZSA9ICIiOworICAgICAgICB2YXIgY2hhcmFjdGVyID0g
IiI7CisgICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgdWludDhhcnJheS5sZW5n
dGggLSBzdGFydEluZGV4OyBpKyspIHsKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IFN0cmluZy5m
cm9tQ2hhckNvZGUodWludDhhcnJheVtpXSk7CisgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09
ICJcbiIpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGxpbmUgKz0gY2hhcmFjdGVyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsaW5lOwor
ICAgIH07CisgICAgLyoqCisgICAgICogUmVhZHMgaGVhZGVyIGluZm9ybWF0aW9uIGZyb20gYW4g
UkdCRSB0ZXh0dXJlIHN0b3JlZCBpbiBhIG5hdGl2ZSBhcnJheS4KKyAgICAgKiBNb3JlIGluZm9y
bWF0aW9uIG9uIHRoaXMgZm9ybWF0IGFyZSBhdmFpbGFibGUgaGVyZToKKyAgICAgKiBodHRwczov
L2VuLndpa2lwZWRpYS5vcmcvd2lraS9SR0JFX2ltYWdlX2Zvcm1hdAorICAgICAqCisgICAgICog
QHBhcmFtIHVpbnQ4YXJyYXkgVGhlIGJpbmFyeSBmaWxlIHN0b3JlZCBpbiAgbmF0aXZlIGFycmF5
LgorICAgICAqIEByZXR1cm4gVGhlIGhlYWRlciBpbmZvcm1hdGlvbi4KKyAgICAgKi8KKyAgICBI
RFJUb29scy5SR0JFX1JlYWRIZWFkZXIgPSBmdW5jdGlvbiAodWludDhhcnJheSkgeworICAgICAg
ICB2YXIgaGVpZ2h0ID0gMDsKKyAgICAgICAgdmFyIHdpZHRoID0gMDsKKyAgICAgICAgdmFyIGxp
bmUgPSB0aGlzLnJlYWRTdHJpbmdMaW5lKHVpbnQ4YXJyYXksIDApOworICAgICAgICBpZiAobGlu
ZVswXSAhPSAnIycgfHwgbGluZVsxXSAhPSAnPycpIHsKKyAgICAgICAgICAgIHRocm93ICJCYWQg
SERSIEZvcm1hdC4iOworICAgICAgICB9CisgICAgICAgIHZhciBlbmRPZkhlYWRlciA9IGZhbHNl
OworICAgICAgICB2YXIgZmluZEZvcm1hdCA9IGZhbHNlOworICAgICAgICB2YXIgbGluZUluZGV4
ID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgbGluZUluZGV4ICs9IChsaW5lLmxlbmd0
aCArIDEpOworICAgICAgICAgICAgbGluZSA9IHRoaXMucmVhZFN0cmluZ0xpbmUodWludDhhcnJh
eSwgbGluZUluZGV4KTsKKyAgICAgICAgICAgIGlmIChsaW5lID09ICJGT1JNQVQ9MzItYml0X3Js
ZV9yZ2JlIikgeworICAgICAgICAgICAgICAgIGZpbmRGb3JtYXQgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobGluZS5sZW5ndGggPT0gMCkgeworICAgICAgICAg
ICAgICAgIGVuZE9mSGVhZGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGls
ZSAoIWVuZE9mSGVhZGVyKTsKKyAgICAgICAgaWYgKCFmaW5kRm9ybWF0KSB7CisgICAgICAgICAg
ICB0aHJvdyAiSERSIEJhZCBoZWFkZXIgZm9ybWF0LCB1bnN1cHBvcnRlZCBGT1JNQVQiOworICAg
ICAgICB9CisgICAgICAgIGxpbmVJbmRleCArPSAobGluZS5sZW5ndGggKyAxKTsKKyAgICAgICAg
bGluZSA9IHRoaXMucmVhZFN0cmluZ0xpbmUodWludDhhcnJheSwgbGluZUluZGV4KTsKKyAgICAg
ICAgdmFyIHNpemVSZWdleHAgPSAvXlwtWSAoLiopIFwrWCAoLiopJC9nOworICAgICAgICB2YXIg
bWF0Y2ggPSBzaXplUmVnZXhwLmV4ZWMobGluZSk7CisgICAgICAgIC8vIFRPRE8uIFN1cHBvcnQg
K1kgYW5kIC1YIGlmIG5lZWRlZC4KKyAgICAgICAgaWYgKCFtYXRjaCB8fCBtYXRjaC5sZW5ndGgg
PCAzKSB7CisgICAgICAgICAgICB0aHJvdyAiSERSIEJhZCBoZWFkZXIgZm9ybWF0LCBubyBzaXpl
IjsKKyAgICAgICAgfQorICAgICAgICB3aWR0aCA9IHBhcnNlSW50KG1hdGNoWzJdKTsKKyAgICAg
ICAgaGVpZ2h0ID0gcGFyc2VJbnQobWF0Y2hbMV0pOworICAgICAgICBpZiAod2lkdGggPCA4IHx8
IHdpZHRoID4gMHg3ZmZmKSB7CisgICAgICAgICAgICB0aHJvdyAiSERSIEJhZCBoZWFkZXIgZm9y
bWF0LCB1bnN1cHBvcnRlZCBzaXplIjsKKyAgICAgICAgfQorICAgICAgICBsaW5lSW5kZXggKz0g
KGxpbmUubGVuZ3RoICsgMSk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBoZWlnaHQ6
IGhlaWdodCwKKyAgICAgICAgICAgIHdpZHRoOiB3aWR0aCwKKyAgICAgICAgICAgIGRhdGFQb3Np
dGlvbjogbGluZUluZGV4CisgICAgICAgIH07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1
cm5zIHRoZSBjdWJlbWFwIGluZm9ybWF0aW9uIChlYWNoIGZhY2VzIHRleHR1cmUgZGF0YSkgZXh0
cmFjdGVkIGZyb20gYW4gUkdCRSB0ZXh0dXJlLgorICAgICAqIFRoaXMgUkdCRSB0ZXh0dXJlIG5l
ZWRzIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBhcyBhIHBhbm9yYW1hLgorICAgICAqCisgICAg
ICogTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGZvcm1hdCBhcmUgYXZhaWxhYmxlIGhlcmU6Cisg
ICAgICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUkdCRV9pbWFnZV9mb3JtYXQKKyAg
ICAgKgorICAgICAqIEBwYXJhbSBidWZmZXIgVGhlIGJpbmFyeSBmaWxlIHN0b3JlZCBpbiBhbiBh
cnJheSBidWZmZXIuCisgICAgICogQHBhcmFtIHNpemUgVGhlIGV4cGVjdGVkIHNpemUgb2YgdGhl
IGV4dHJhY3RlZCBjdWJlbWFwLgorICAgICAqIEByZXR1cm4gVGhlIEN1YmUgTWFwIGluZm9ybWF0
aW9uLgorICAgICAqLworICAgIEhEUlRvb2xzLkdldEN1YmVNYXBUZXh0dXJlRGF0YSA9IGZ1bmN0
aW9uIChidWZmZXIsIHNpemUpIHsKKyAgICAgICAgdmFyIHVpbnQ4YXJyYXkgPSBuZXcgVWludDhB
cnJheShidWZmZXIpOworICAgICAgICB2YXIgaGRySW5mbyA9IHRoaXMuUkdCRV9SZWFkSGVhZGVy
KHVpbnQ4YXJyYXkpOworICAgICAgICB2YXIgZGF0YSA9IHRoaXMuUkdCRV9SZWFkUGl4ZWxzX1JM
RSh1aW50OGFycmF5LCBoZHJJbmZvKTsKKyAgICAgICAgdmFyIGN1YmVNYXBEYXRhID0gX3Bhbm9y
YW1hVG9DdWJlbWFwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBhbm9yYW1hVG9DdWJl
TWFwVG9vbHMiXS5Db252ZXJ0UGFub3JhbWFUb0N1YmVtYXAoZGF0YSwgaGRySW5mby53aWR0aCwg
aGRySW5mby5oZWlnaHQsIHNpemUpOworICAgICAgICByZXR1cm4gY3ViZU1hcERhdGE7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBwaXhlbHMgZGF0YSBleHRyYWN0ZWQgZnJv
bSBhbiBSR0JFIHRleHR1cmUuCisgICAgICogVGhpcyBwaXhlbHMgd2lsbCBiZSBzdG9yZWQgbGVm
dCB0byByaWdodCB1cCB0byBkb3duIGluIHRoZSBSIEcgQiBvcmRlciBpbiBvbmUgYXJyYXkuCisg
ICAgICoKKyAgICAgKiBNb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZm9ybWF0IGFyZSBhdmFpbGFi
bGUgaGVyZToKKyAgICAgKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SR0JFX2ltYWdl
X2Zvcm1hdAorICAgICAqCisgICAgICogQHBhcmFtIHVpbnQ4YXJyYXkgVGhlIGJpbmFyeSBmaWxl
IHN0b3JlZCBpbiBhbiBhcnJheSBidWZmZXIuCisgICAgICogQHBhcmFtIGhkckluZm8gVGhlIGhl
YWRlciBpbmZvcm1hdGlvbiBvZiB0aGUgZmlsZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBwaXhlbHMg
ZGF0YSBpbiBSR0IgcmlnaHQgdG8gbGVmdCB1cCB0byBkb3duIG9yZGVyLgorICAgICAqLworICAg
IEhEUlRvb2xzLlJHQkVfUmVhZFBpeGVscyA9IGZ1bmN0aW9uICh1aW50OGFycmF5LCBoZHJJbmZv
KSB7CisgICAgICAgIC8vIEtlZXAgZm9yIG11bHRpIGZvcm1hdCBzdXBwb3J0cy4KKyAgICAgICAg
cmV0dXJuIHRoaXMuUkdCRV9SZWFkUGl4ZWxzX1JMRSh1aW50OGFycmF5LCBoZHJJbmZvKTsKKyAg
ICB9OworICAgIEhEUlRvb2xzLlJHQkVfUmVhZFBpeGVsc19STEUgPSBmdW5jdGlvbiAodWludDhh
cnJheSwgaGRySW5mbykgeworICAgICAgICB2YXIgbnVtX3NjYW5saW5lcyA9IGhkckluZm8uaGVp
Z2h0OworICAgICAgICB2YXIgc2NhbmxpbmVfd2lkdGggPSBoZHJJbmZvLndpZHRoOworICAgICAg
ICB2YXIgYSwgYiwgYywgZCwgY291bnQ7CisgICAgICAgIHZhciBkYXRhSW5kZXggPSBoZHJJbmZv
LmRhdGFQb3NpdGlvbjsKKyAgICAgICAgdmFyIGluZGV4ID0gMCwgZW5kSW5kZXggPSAwLCBpID0g
MDsKKyAgICAgICAgdmFyIHNjYW5MaW5lQXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc2Nh
bmxpbmVfd2lkdGggKiA0KTsgLy8gZm91ciBjaGFubmVsIFIgRyBCIEUKKyAgICAgICAgdmFyIHNj
YW5MaW5lQXJyYXkgPSBuZXcgVWludDhBcnJheShzY2FuTGluZUFycmF5QnVmZmVyKTsKKyAgICAg
ICAgLy8gMyBjaGFubmVscyBvZiA0IGJ5dGVzIHBlciBwaXhlbCBpbiBmbG9hdC4KKyAgICAgICAg
dmFyIHJlc3VsdEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihoZHJJbmZvLndpZHRoICogaGRySW5m
by5oZWlnaHQgKiA0ICogMyk7CisgICAgICAgIHZhciByZXN1bHRBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkocmVzdWx0QnVmZmVyKTsKKyAgICAgICAgLy8gcmVhZCBpbiBlYWNoIHN1Y2Nlc3NpdmUg
c2NhbmxpbmUKKyAgICAgICAgd2hpbGUgKG51bV9zY2FubGluZXMgPiAwKSB7CisgICAgICAgICAg
ICBhID0gdWludDhhcnJheVtkYXRhSW5kZXgrK107CisgICAgICAgICAgICBiID0gdWludDhhcnJh
eVtkYXRhSW5kZXgrK107CisgICAgICAgICAgICBjID0gdWludDhhcnJheVtkYXRhSW5kZXgrK107
CisgICAgICAgICAgICBkID0gdWludDhhcnJheVtkYXRhSW5kZXgrK107CisgICAgICAgICAgICBp
ZiAoYSAhPSAyIHx8IGIgIT0gMiB8fCAoYyAmIDB4ODApKSB7CisgICAgICAgICAgICAgICAgLy8g
dGhpcyBmaWxlIGlzIG5vdCBydW4gbGVuZ3RoIGVuY29kZWQKKyAgICAgICAgICAgICAgICB0aHJv
dyAiSERSIEJhZCBoZWFkZXIgZm9ybWF0LCBub3QgUkxFIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICgoKGMgPDwgOCkgfCBkKSAhPSBzY2FubGluZV93aWR0aCkgeworICAgICAgICAg
ICAgICAgIHRocm93ICJIRFIgQmFkIGhlYWRlciBmb3JtYXQsIHdyb25nIHNjYW4gbGluZSB3aWR0
aCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgICAgICAgICAv
LyByZWFkIGVhY2ggb2YgdGhlIGZvdXIgY2hhbm5lbHMgZm9yIHRoZSBzY2FubGluZSBpbnRvIHRo
ZSBidWZmZXIKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBlbmRJbmRleCA9IChpICsgMSkgKiBzY2FubGluZV93aWR0aDsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBlbmRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBhID0g
dWludDhhcnJheVtkYXRhSW5kZXgrK107CisgICAgICAgICAgICAgICAgICAgIGIgPSB1aW50OGFy
cmF5W2RhdGFJbmRleCsrXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGEgPiAxMjgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGEgcnVuIG9mIHRoZSBzYW1lIHZhbHVlCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudCA9IGEgLSAxMjg7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoKGNvdW50ID09IDApIHx8IChjb3VudCA+IGVuZEluZGV4IC0gaW5kZXgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkhEUiBCYWQgRm9ybWF0LCBiYWQgc2Nhbmxp
bmUgZGF0YSAocnVuKSI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoY291bnQtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY2FuTGluZUFycmF5W2luZGV4KytdID0gYjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGEgbm9uLXJ1bgorICAgICAgICAgICAgICAgICAgICAg
ICAgY291bnQgPSBhOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjb3VudCA9PSAwKSB8
fCAoY291bnQgPiBlbmRJbmRleCAtIGluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93ICJIRFIgQmFkIEZvcm1hdCwgYmFkIHNjYW5saW5lIGRhdGEgKG5vbi1ydW4pIjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5M
aW5lQXJyYXlbaW5kZXgrK10gPSBiOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0tY291
bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGog
PCBjb3VudDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5MaW5l
QXJyYXlbaW5kZXgrK10gPSB1aW50OGFycmF5W2RhdGFJbmRleCsrXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBub3cgY29udmVydCBkYXRhIGZyb20gYnVmZmVyIGludG8gZmxvYXRzCisgICAgICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgc2NhbmxpbmVfd2lkdGg7IGkrKykgeworICAgICAgICAgICAgICAgIGEg
PSBzY2FuTGluZUFycmF5W2ldOworICAgICAgICAgICAgICAgIGIgPSBzY2FuTGluZUFycmF5W2kg
KyBzY2FubGluZV93aWR0aF07CisgICAgICAgICAgICAgICAgYyA9IHNjYW5MaW5lQXJyYXlbaSAr
IDIgKiBzY2FubGluZV93aWR0aF07CisgICAgICAgICAgICAgICAgZCA9IHNjYW5MaW5lQXJyYXlb
aSArIDMgKiBzY2FubGluZV93aWR0aF07CisgICAgICAgICAgICAgICAgdGhpcy5SZ2JlMmZsb2F0
KHJlc3VsdEFycmF5LCBhLCBiLCBjLCBkLCAoaGRySW5mby5oZWlnaHQgLSBudW1fc2NhbmxpbmVz
KSAqIHNjYW5saW5lX3dpZHRoICogMyArIGkgKiAzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG51bV9zY2FubGluZXMtLTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0QXJy
YXk7CisgICAgfTsKKyAgICByZXR1cm4gSERSVG9vbHM7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL01pc2MvSGlnaER5bmFtaWNSYW5nZS9pbmRleC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL0hpZ2hE
eW5hbWljUmFuZ2UvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDdWJlTWFwVG9TcGhlcmljYWxQ
b2x5bm9taWFsVG9vbHMsIEhEUlRvb2xzLCBQYW5vcmFtYVRvQ3ViZU1hcFRvb2xzICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY3ViZW1hcFRvU3BoZXJpY2Fs
UG9seW5vbWlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9jdWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsICovICIuL01pc2MvSGlnaER5
bmFtaWNSYW5nZS9jdWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29scyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2N1YmVtYXBUb1NwaGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbFRvb2xzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2hkcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZHIgKi8gIi4vTWlzYy9IaWdoRHluYW1pY1Jhbmdl
L2hkci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJIRFJUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2hkcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJIRFJUb29scyJdOyB9KTsKKwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5vcmFtYVRvQ3ViZW1hcF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wYW5vcmFtYVRvQ3Vi
ZW1hcCAqLyAiLi9NaXNjL0hpZ2hEeW5hbWljUmFuZ2UvcGFub3JhbWFUb0N1YmVtYXAudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUGFub3JhbWFUb0N1YmVNYXBUb29scyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX3Bhbm9yYW1hVG9DdWJlbWFwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBh
bm9yYW1hVG9DdWJlTWFwVG9vbHMiXTsgfSk7CisKKworCisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWlzYy9IaWdoRHluYW1pY1JhbmdlL3Bhbm9yYW1hVG9DdWJlbWFwLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL01pc2MvSGlnaER5bmFtaWNSYW5nZS9wYW5vcmFtYVRvQ3ViZW1hcC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBhbm9yYW1hVG9DdWJlTWFwVG9vbHMgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFub3JhbWFUb0N1YmVNYXBUb29scyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gUGFub3JhbWFUb0N1YmVNYXBUb29sczsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAi
Li9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFu
dHMudHMiKTsKKworCisvKioKKyAqIEhlbHBlciBjbGFzcyB1c2VmdWwgdG8gY29udmVydCBwYW5v
cmFtYSBwaWN0dXJlIHRvIHRoZWlyIGN1YmVtYXAgcmVwcmVzZW50YXRpb24gaW4gNiBmYWNlcy4K
KyAqLwordmFyIFBhbm9yYW1hVG9DdWJlTWFwVG9vbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoKSB7CisgICAgZnVuY3Rpb24gUGFub3JhbWFUb0N1YmVNYXBUb29scygpIHsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogQ29udmVydHMgYSBwYW5vcm1hIHN0b3JlZCBpbiBSR0IgcmlnaHQgdG8g
bGVmdCB1cCB0byBkb3duIGZvcm1hdCBpbnRvIGEgY3ViZW1hcCAoNiBmYWNlcykuCisgICAgICoK
KyAgICAgKiBAcGFyYW0gZmxvYXQzMkFycmF5IFRoZSBzb3VyY2UgZGF0YS4KKyAgICAgKiBAcGFy
YW0gaW5wdXRXaWR0aCBUaGUgd2lkdGggb2YgdGhlIGlucHV0IHBhbm9yYW1hLgorICAgICAqIEBw
YXJhbSBpbnB1dEhlaWdodCBUaGUgaGVpZ2h0IG9mIHRoZSBpbnB1dCBwYW5vcmFtYS4KKyAgICAg
KiBAcGFyYW0gc2l6ZSBUaGUgd2lsbGluZyBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgY3ViZW1hcCAo
ZWFjaCBmYWNlcyB3aWxsIGJlIHNpemUgKiBzaXplIHBpeGVscykKKyAgICAgKiBAcmV0dXJuIFRo
ZSBjdWJlbWFwIGRhdGEKKyAgICAgKi8KKyAgICBQYW5vcmFtYVRvQ3ViZU1hcFRvb2xzLkNvbnZl
cnRQYW5vcmFtYVRvQ3ViZW1hcCA9IGZ1bmN0aW9uIChmbG9hdDMyQXJyYXksIGlucHV0V2lkdGgs
IGlucHV0SGVpZ2h0LCBzaXplKSB7CisgICAgICAgIGlmICghZmxvYXQzMkFycmF5KSB7CisgICAg
ICAgICAgICB0aHJvdyAiQ29udmVydFBhbm9yYW1hVG9DdWJlbWFwOiBpbnB1dCBjYW5ub3QgYmUg
bnVsbCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZsb2F0MzJBcnJheS5sZW5ndGggIT0gaW5w
dXRXaWR0aCAqIGlucHV0SGVpZ2h0ICogMykgeworICAgICAgICAgICAgdGhyb3cgIkNvbnZlcnRQ
YW5vcmFtYVRvQ3ViZW1hcDogaW5wdXQgc2l6ZSBpcyB3cm9uZyI7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHRleHR1cmVGcm9udCA9IHRoaXMuQ3JlYXRlQ3ViZW1hcFRleHR1cmUoc2l6ZSwgdGhp
cy5GQUNFX0ZST05ULCBmbG9hdDMyQXJyYXksIGlucHV0V2lkdGgsIGlucHV0SGVpZ2h0KTsKKyAg
ICAgICAgdmFyIHRleHR1cmVCYWNrID0gdGhpcy5DcmVhdGVDdWJlbWFwVGV4dHVyZShzaXplLCB0
aGlzLkZBQ0VfQkFDSywgZmxvYXQzMkFycmF5LCBpbnB1dFdpZHRoLCBpbnB1dEhlaWdodCk7Cisg
ICAgICAgIHZhciB0ZXh0dXJlTGVmdCA9IHRoaXMuQ3JlYXRlQ3ViZW1hcFRleHR1cmUoc2l6ZSwg
dGhpcy5GQUNFX0xFRlQsIGZsb2F0MzJBcnJheSwgaW5wdXRXaWR0aCwgaW5wdXRIZWlnaHQpOwor
ICAgICAgICB2YXIgdGV4dHVyZVJpZ2h0ID0gdGhpcy5DcmVhdGVDdWJlbWFwVGV4dHVyZShzaXpl
LCB0aGlzLkZBQ0VfUklHSFQsIGZsb2F0MzJBcnJheSwgaW5wdXRXaWR0aCwgaW5wdXRIZWlnaHQp
OworICAgICAgICB2YXIgdGV4dHVyZVVwID0gdGhpcy5DcmVhdGVDdWJlbWFwVGV4dHVyZShzaXpl
LCB0aGlzLkZBQ0VfVVAsIGZsb2F0MzJBcnJheSwgaW5wdXRXaWR0aCwgaW5wdXRIZWlnaHQpOwor
ICAgICAgICB2YXIgdGV4dHVyZURvd24gPSB0aGlzLkNyZWF0ZUN1YmVtYXBUZXh0dXJlKHNpemUs
IHRoaXMuRkFDRV9ET1dOLCBmbG9hdDMyQXJyYXksIGlucHV0V2lkdGgsIGlucHV0SGVpZ2h0KTsK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGZyb250OiB0ZXh0dXJlRnJvbnQsCisgICAg
ICAgICAgICBiYWNrOiB0ZXh0dXJlQmFjaywKKyAgICAgICAgICAgIGxlZnQ6IHRleHR1cmVMZWZ0
LAorICAgICAgICAgICAgcmlnaHQ6IHRleHR1cmVSaWdodCwKKyAgICAgICAgICAgIHVwOiB0ZXh0
dXJlVXAsCisgICAgICAgICAgICBkb3duOiB0ZXh0dXJlRG93biwKKyAgICAgICAgICAgIHNpemU6
IHNpemUsCisgICAgICAgICAgICB0eXBlOiBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfRkxPQVQsCisgICAgICAg
ICAgICBmb3JtYXQ6IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJDb25zdGFudHMiXS5URVhUVVJFRk9STUFUX1JHQiwKKyAgICAgICAgICAgIGdhbW1hU3Bh
Y2U6IGZhbHNlLAorICAgICAgICB9OworICAgIH07CisgICAgUGFub3JhbWFUb0N1YmVNYXBUb29s
cy5DcmVhdGVDdWJlbWFwVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXhTaXplLCBmYWNlRGF0YSwgZmxv
YXQzMkFycmF5LCBpbnB1dFdpZHRoLCBpbnB1dEhlaWdodCkgeworICAgICAgICB2YXIgYnVmZmVy
ID0gbmV3IEFycmF5QnVmZmVyKHRleFNpemUgKiB0ZXhTaXplICogNCAqIDMpOworICAgICAgICB2
YXIgdGV4dHVyZUFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIpOworICAgICAgICB2YXIg
cm90RFgxID0gZmFjZURhdGFbMV0uc3VidHJhY3QoZmFjZURhdGFbMF0pLnNjYWxlKDEgLyB0ZXhT
aXplKTsKKyAgICAgICAgdmFyIHJvdERYMiA9IGZhY2VEYXRhWzNdLnN1YnRyYWN0KGZhY2VEYXRh
WzJdKS5zY2FsZSgxIC8gdGV4U2l6ZSk7CisgICAgICAgIHZhciBkeSA9IDEgLyB0ZXhTaXplOwor
ICAgICAgICB2YXIgZnkgPSAwOworICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHRleFNpemU7
IHkrKykgeworICAgICAgICAgICAgdmFyIHh2MSA9IGZhY2VEYXRhWzBdOworICAgICAgICAgICAg
dmFyIHh2MiA9IGZhY2VEYXRhWzJdOworICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0
ZXhTaXplOyB4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgdiA9IHh2Mi5zdWJ0cmFjdCh4djEp
LnNjYWxlKGZ5KS5hZGQoeHYxKTsKKyAgICAgICAgICAgICAgICB2Lm5vcm1hbGl6ZSgpOworICAg
ICAgICAgICAgICAgIHZhciBjb2xvciA9IHRoaXMuQ2FsY1Byb2plY3Rpb25TcGhlcmljYWwodiwg
ZmxvYXQzMkFycmF5LCBpbnB1dFdpZHRoLCBpbnB1dEhlaWdodCk7CisgICAgICAgICAgICAgICAg
Ly8gMyBjaGFubmVscyBwZXIgcGl4ZWxzCisgICAgICAgICAgICAgICAgdGV4dHVyZUFycmF5W3kg
KiB0ZXhTaXplICogMyArICh4ICogMykgKyAwXSA9IGNvbG9yLnI7CisgICAgICAgICAgICAgICAg
dGV4dHVyZUFycmF5W3kgKiB0ZXhTaXplICogMyArICh4ICogMykgKyAxXSA9IGNvbG9yLmc7Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZUFycmF5W3kgKiB0ZXhTaXplICogMyArICh4ICogMykgKyAy
XSA9IGNvbG9yLmI7CisgICAgICAgICAgICAgICAgeHYxID0geHYxLmFkZChyb3REWDEpOworICAg
ICAgICAgICAgICAgIHh2MiA9IHh2Mi5hZGQocm90RFgyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZ5ICs9IGR5OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0ZXh0dXJlQXJyYXk7
CisgICAgfTsKKyAgICBQYW5vcmFtYVRvQ3ViZU1hcFRvb2xzLkNhbGNQcm9qZWN0aW9uU3BoZXJp
Y2FsID0gZnVuY3Rpb24gKHZEaXIsIGZsb2F0MzJBcnJheSwgaW5wdXRXaWR0aCwgaW5wdXRIZWln
aHQpIHsKKyAgICAgICAgdmFyIHRoZXRhID0gTWF0aC5hdGFuMih2RGlyLnosIHZEaXIueCk7Cisg
ICAgICAgIHZhciBwaGkgPSBNYXRoLmFjb3ModkRpci55KTsKKyAgICAgICAgd2hpbGUgKHRoZXRh
IDwgLU1hdGguUEkpIHsKKyAgICAgICAgICAgIHRoZXRhICs9IDIgKiBNYXRoLlBJOworICAgICAg
ICB9CisgICAgICAgIHdoaWxlICh0aGV0YSA+IE1hdGguUEkpIHsKKyAgICAgICAgICAgIHRoZXRh
IC09IDIgKiBNYXRoLlBJOworICAgICAgICB9CisgICAgICAgIHZhciBkeCA9IHRoZXRhIC8gTWF0
aC5QSTsKKyAgICAgICAgdmFyIGR5ID0gcGhpIC8gTWF0aC5QSTsKKyAgICAgICAgLy8gcmVjZW50
ZXIuCisgICAgICAgIGR4ID0gZHggKiAwLjUgKyAwLjU7CisgICAgICAgIHZhciBweCA9IE1hdGgu
cm91bmQoZHggKiBpbnB1dFdpZHRoKTsKKyAgICAgICAgaWYgKHB4IDwgMCkgeworICAgICAgICAg
ICAgcHggPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB4ID49IGlucHV0V2lkdGgp
IHsKKyAgICAgICAgICAgIHB4ID0gaW5wdXRXaWR0aCAtIDE7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIHB5ID0gTWF0aC5yb3VuZChkeSAqIGlucHV0SGVpZ2h0KTsKKyAgICAgICAgaWYgKHB5IDwg
MCkgeworICAgICAgICAgICAgcHkgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB5
ID49IGlucHV0SGVpZ2h0KSB7CisgICAgICAgICAgICBweSA9IGlucHV0SGVpZ2h0IC0gMTsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgaW5wdXRZID0gKGlucHV0SGVpZ2h0IC0gcHkgLSAxKTsKKyAg
ICAgICAgdmFyIHIgPSBmbG9hdDMyQXJyYXlbaW5wdXRZICogaW5wdXRXaWR0aCAqIDMgKyAocHgg
KiAzKSArIDBdOworICAgICAgICB2YXIgZyA9IGZsb2F0MzJBcnJheVtpbnB1dFkgKiBpbnB1dFdp
ZHRoICogMyArIChweCAqIDMpICsgMV07CisgICAgICAgIHZhciBiID0gZmxvYXQzMkFycmF5W2lu
cHV0WSAqIGlucHV0V2lkdGggKiAzICsgKHB4ICogMykgKyAyXTsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIHI6IHIsCisgICAgICAgICAgICBnOiBnLAorICAgICAgICAgICAgYjogYgor
ICAgICAgICB9OworICAgIH07CisgICAgUGFub3JhbWFUb0N1YmVNYXBUb29scy5GQUNFX0ZST05U
ID0gWworICAgICAgICBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXSgtMS4wLCAtMS4wLCAtMS4wKSwKKyAgICAgICAgbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMS4w
LCAtMS4wLCAtMS4wKSwKKyAgICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oLTEuMCwgMS4wLCAtMS4wKSwKKyAgICAgICAg
bmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0
b3IzIl0oMS4wLCAxLjAsIC0xLjApCisgICAgXTsKKyAgICBQYW5vcmFtYVRvQ3ViZU1hcFRvb2xz
LkZBQ0VfQkFDSyA9IFsKKyAgICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMS4wLCAtMS4wLCAxLjApLAorICAgICAgICBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3Rv
cjMiXSgtMS4wLCAtMS4wLCAxLjApLAorICAgICAgICBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgxLjAsIDEuMCwgMS4wKSwKKyAg
ICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0oLTEuMCwgMS4wLCAxLjApCisgICAgXTsKKyAgICBQYW5vcmFtYVRvQ3ViZU1h
cFRvb2xzLkZBQ0VfUklHSFQgPSBbCisgICAgICAgIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDEuMCwgLTEuMCwgLTEuMCksCisg
ICAgICAgIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdKDEuMCwgLTEuMCwgMS4wKSwKKyAgICAgICAgbmV3IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMS4wLCAxLjAsIC0x
LjApLAorICAgICAgICBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXSgxLjAsIDEuMCwgMS4wKQorICAgIF07CisgICAgUGFub3JhbWFU
b0N1YmVNYXBUb29scy5GQUNFX0xFRlQgPSBbCisgICAgICAgIG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKC0xLjAsIC0xLjAsIDEu
MCksCisgICAgICAgIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVmVjdG9yMyJdKC0xLjAsIC0xLjAsIC0xLjApLAorICAgICAgICBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgtMS4w
LCAxLjAsIDEuMCksCisgICAgICAgIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKC0xLjAsIDEuMCwgLTEuMCkKKyAgICBdOworICAg
IFBhbm9yYW1hVG9DdWJlTWFwVG9vbHMuRkFDRV9ET1dOID0gWworICAgICAgICBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgtMS4w
LCAxLjAsIC0xLjApLAorICAgICAgICBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgxLjAsIDEuMCwgLTEuMCksCisgICAgICAgIG5l
dyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdKC0xLjAsIDEuMCwgMS4wKSwKKyAgICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMS4wLCAxLjAsIDEuMCkKKyAgICBd
OworICAgIFBhbm9yYW1hVG9DdWJlTWFwVG9vbHMuRkFDRV9VUCA9IFsKKyAgICAgICAgbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0o
LTEuMCwgLTEuMCwgMS4wKSwKKyAgICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMS4wLCAtMS4wLCAxLjApLAorICAgICAg
ICBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXSgtMS4wLCAtMS4wLCAtMS4wKSwKKyAgICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMS4wLCAtMS4wLCAtMS4w
KQorICAgIF07CisgICAgcmV0dXJuIFBhbm9yYW1hVG9DdWJlTWFwVG9vbHM7Cit9KCkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2MvYW5kT3JOb3RFdmFsdWF0b3IudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvYW5k
T3JOb3RFdmFsdWF0b3IudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQW5kT3JOb3RFdmFsdWF0b3IgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5kT3JOb3RFdmFsdWF0b3IiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEFuZE9yTm90RXZhbHVhdG9yOyB9KTsKKy8qKgorICogQ2xhc3MgdXNlZCB0
byBldmFsYXV0ZSBxdWVyaWVzIGNvbnRhaW5pbmcgYGFuZGAgYW5kIGBvcmAgb3BlcmF0b3JzCisg
Ki8KK3ZhciBBbmRPck5vdEV2YWx1YXRvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICBmdW5jdGlvbiBBbmRPck5vdEV2YWx1YXRvcigpIHsKKyAgICB9CisgICAgLyoqCisgICAg
ICogRXZhbHVhdGUgYSBxdWVyeQorICAgICAqIEBwYXJhbSBxdWVyeSBkZWZpbmVzIHRoZSBxdWVy
eSB0byBldmFsdWF0ZQorICAgICAqIEBwYXJhbSBldmFsdWF0ZUNhbGxiYWNrIGRlZmluZXMgdGhl
IGNhbGxiYWNrIHVzZWQgdG8gZmlsdGVyIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRydWUgaWYg
dGhlIHF1ZXJ5IG1hdGNoZXMKKyAgICAgKi8KKyAgICBBbmRPck5vdEV2YWx1YXRvci5FdmFsID0g
ZnVuY3Rpb24gKHF1ZXJ5LCBldmFsdWF0ZUNhbGxiYWNrKSB7CisgICAgICAgIGlmICghcXVlcnku
bWF0Y2goL1woW15cKFwpXSpcKS9nKSkgeworICAgICAgICAgICAgcXVlcnkgPSBBbmRPck5vdEV2
YWx1YXRvci5fSGFuZGxlUGFyZW50aGVzaXNDb250ZW50KHF1ZXJ5LCBldmFsdWF0ZUNhbGxiYWNr
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnku
cmVwbGFjZSgvXChbXlwoXCldKlwpL2csIGZ1bmN0aW9uIChyKSB7CisgICAgICAgICAgICAgICAg
Ly8gcmVtb3ZlIHBhcmVudGhlc2lzCisgICAgICAgICAgICAgICAgciA9IHIuc2xpY2UoMSwgci5s
ZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQW5kT3JOb3RFdmFsdWF0b3IuX0hh
bmRsZVBhcmVudGhlc2lzQ29udGVudChyLCBldmFsdWF0ZUNhbGxiYWNrKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIGlmIChxdWVyeSA9PT0gInRydWUiKSB7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocXVlcnkgPT09ICJmYWxz
ZSIpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gQW5kT3JOb3RFdmFsdWF0b3IuRXZhbChxdWVyeSwgZXZhbHVhdGVDYWxsYmFjayk7CisgICAg
fTsKKyAgICBBbmRPck5vdEV2YWx1YXRvci5fSGFuZGxlUGFyZW50aGVzaXNDb250ZW50ID0gZnVu
Y3Rpb24gKHBhcmVudGhlc2lzQ29udGVudCwgZXZhbHVhdGVDYWxsYmFjaykgeworICAgICAgICBl
dmFsdWF0ZUNhbGxiYWNrID0gZXZhbHVhdGVDYWxsYmFjayB8fCAoZnVuY3Rpb24gKHIpIHsKKyAg
ICAgICAgICAgIHJldHVybiByID09PSAidHJ1ZSIgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIH0p
OworICAgICAgICB2YXIgcmVzdWx0OworICAgICAgICB2YXIgb3IgPSBwYXJlbnRoZXNpc0NvbnRl
bnQuc3BsaXQoInx8Iik7CisgICAgICAgIGZvciAodmFyIGkgaW4gb3IpIHsKKyAgICAgICAgICAg
IGlmIChvci5oYXNPd25Qcm9wZXJ0eShpKSkgeworICAgICAgICAgICAgICAgIHZhciBvcmkgPSBB
bmRPck5vdEV2YWx1YXRvci5fU2ltcGxpZnlOZWdhdGlvbihvcltpXS50cmltKCkpOworICAgICAg
ICAgICAgICAgIHZhciBhbmQgPSBvcmkuc3BsaXQoIiYmIik7CisgICAgICAgICAgICAgICAgaWYg
KGFuZC5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgYW5kLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5kaiA9
IEFuZE9yTm90RXZhbHVhdG9yLl9TaW1wbGlmeU5lZ2F0aW9uKGFuZFtqXS50cmltKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFuZGogIT09ICJ0cnVlIiAmJiBhbmRqICE9PSAiZmFs
c2UiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuZGpbMF0gPT09ICIhIikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAhZXZhbHVhdGVDYWxs
YmFjayhhbmRqLnN1YnN0cmluZygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBldmFsdWF0ZUNhbGxiYWNrKGFuZGopOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGFuZGogPT09ICJ0cnVlIiA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7IC8vIG5vIG5lZWQgdG8g
Y29udGludWUgc2luY2UgJ2ZhbHNlICYmIC4uLiAmJiAuLi4nIHdpbGwgYWx3YXlzIHJldHVybiBm
YWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaSA9ICJmYWxzZSI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdCB8fCBvcmkgPT09ICJ0cnVlIikgeyAvLyBubyBuZWVkIHRvIGNvbnRpbnVlIHNp
bmNlICd0cnVlIHx8IC4uLiB8fCAuLi4nIHdpbGwgYWx3YXlzIHJldHVybiB0cnVlCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyByZXN1bHQgZXF1YWxzIGZhbHNl
IChvciB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAgaWYgKG9yaSAhPT0gInRydWUiICYmIG9y
aSAhPT0gImZhbHNlIikgeworICAgICAgICAgICAgICAgICAgICBpZiAob3JpWzBdID09PSAiISIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICFldmFsdWF0ZUNhbGxiYWNrKG9y
aS5zdWJzdHJpbmcoMSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZXZhbHVhdGVDYWxs
YmFjayhvcmkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBvcmkgPT09
ICJ0cnVlIiA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgLy8gdGhlIHdob2xlIHBhcmVudGhlc2lzIHNjb3BlIGlzIHJl
cGxhY2VkIGJ5ICd0cnVlJyBvciAnZmFsc2UnCisgICAgICAgIHJldHVybiByZXN1bHQgPyAidHJ1
ZSIgOiAiZmFsc2UiOworICAgIH07CisgICAgQW5kT3JOb3RFdmFsdWF0b3IuX1NpbXBsaWZ5TmVn
YXRpb24gPSBmdW5jdGlvbiAoYm9vbGVhblN0cmluZykgeworICAgICAgICBib29sZWFuU3RyaW5n
ID0gYm9vbGVhblN0cmluZy5yZXBsYWNlKC9eW1xzIV0rLywgZnVuY3Rpb24gKHIpIHsKKyAgICAg
ICAgICAgIC8vIHJlbW92ZSB3aGl0ZXNwYWNlcworICAgICAgICAgICAgciA9IHIucmVwbGFjZSgv
W1xzXS9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiAiIjsgfSk7CisgICAgICAgICAgICByZXR1cm4g
ci5sZW5ndGggJSAyID8gIiEiIDogIiI7CisgICAgICAgIH0pOworICAgICAgICBib29sZWFuU3Ry
aW5nID0gYm9vbGVhblN0cmluZy50cmltKCk7CisgICAgICAgIGlmIChib29sZWFuU3RyaW5nID09
PSAiIXRydWUiKSB7CisgICAgICAgICAgICBib29sZWFuU3RyaW5nID0gImZhbHNlIjsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChib29sZWFuU3RyaW5nID09PSAiIWZhbHNlIikgeworICAg
ICAgICAgICAgYm9vbGVhblN0cmluZyA9ICJ0cnVlIjsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gYm9vbGVhblN0cmluZzsKKyAgICB9OworICAgIHJldHVybiBBbmRPck5vdEV2YWx1YXRvcjsK
K30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9hcnJheVRvb2xzLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvYXJyYXlU
b29scy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IEFycmF5VG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiQXJyYXlUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXJyYXlUb29sczsgfSk7Cisv
KioKKyAqIENsYXNzIGNvbnRhaW5pbmcgYSBzZXQgb2Ygc3RhdGljIHV0aWxpdGllcyBmdW5jdGlv
bnMgZm9yIGFycmF5cy4KKyAqLwordmFyIEFycmF5VG9vbHMgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgZnVuY3Rpb24gQXJyYXlUb29scygpIHsKKyAgICB9CisgICAgLyoqCisg
ICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB0aGUgZ2l2ZW4gc2l6ZSBmaWxsZWQgd2l0aCBlbGVt
ZW50IGJ1aWx0IGZyb20gdGhlIGdpdmVuIGNvbnN0cnVjdG9yIGFuZCB0aGUgcGFyYW10ZXJzCisg
ICAgICogQHBhcmFtIHNpemUgdGhlIG51bWJlciBvZiBlbGVtZW50IHRvIGNvbnN0cnVjdCBhbmQg
cHV0IGluIHRoZSBhcnJheQorICAgICAqIEBwYXJhbSBpdGVtQnVpbGRlciBhIGNhbGxiYWNrIHJl
c3BvbnNpYmxlIGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2Ugb2YgaXRlbS4gQ2FsbGVkIG9uY2Ug
cGVyIGFycmF5IGVudHJ5LgorICAgICAqIEByZXR1cm5zIGEgbmV3IGFycmF5IGZpbGxlZCB3aXRo
IG5ldyBvYmplY3RzCisgICAgICovCisgICAgQXJyYXlUb29scy5CdWlsZEFycmF5ID0gZnVuY3Rp
b24gKHNpemUsIGl0ZW1CdWlsZGVyKSB7CisgICAgICAgIHZhciBhID0gW107CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBhLnB1c2goaXRlbUJ1
aWxkZXIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGE7CisgICAgfTsKKyAgICByZXR1
cm4gQXJyYXlUb29sczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9h
c3NldHNNYW5hZ2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL01pc2MvYXNzZXRzTWFuYWdlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFzc2V0VGFza1N0YXRlLCBB
YnN0cmFjdEFzc2V0VGFzaywgQXNzZXRzUHJvZ3Jlc3NFdmVudCwgTWVzaEFzc2V0VGFzaywgVGV4
dEZpbGVBc3NldFRhc2ssIEJpbmFyeUZpbGVBc3NldFRhc2ssIEltYWdlQXNzZXRUYXNrLCBUZXh0
dXJlQXNzZXRUYXNrLCBDdWJlVGV4dHVyZUFzc2V0VGFzaywgSERSQ3ViZVRleHR1cmVBc3NldFRh
c2ssIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNzZXRUYXNrLCBBc3NldHNNYW5hZ2VyICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFzc2V0VGFza1N0YXRlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBBc3NldFRhc2tTdGF0ZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJB
YnN0cmFjdEFzc2V0VGFzayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQWJzdHJhY3RBc3NldFRhc2s7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXNzZXRzUHJvZ3Jlc3NFdmVudCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gQXNzZXRzUHJvZ3Jlc3NFdmVudDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNZXNo
QXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNZXNoQXNzZXRUYXNrOyB9KTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlRleHRGaWxlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUZXh0
RmlsZUFzc2V0VGFzazsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCaW5hcnlGaWxlQXNzZXRUYXNr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBCaW5hcnlGaWxlQXNzZXRUYXNrOyB9KTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkltYWdlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJbWFnZUFzc2V0
VGFzazsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUZXh0dXJlQXNzZXRUYXNrIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBUZXh0dXJlQXNzZXRUYXNrOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN1YmVU
ZXh0dXJlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDdWJlVGV4dHVyZUFzc2V0VGFz
azsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJIRFJDdWJlVGV4dHVyZUFzc2V0VGFzayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gSERSQ3ViZVRleHR1cmVBc3NldFRhc2s7IH0pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmVBc3NldFRhc2siLCBmdW5jdGlvbigpIHsg
cmV0dXJuIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNzZXRUYXNrOyB9KTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkFzc2V0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFzc2V0c01hbmFn
ZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9M
b2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9Mb2FkaW5nL3NjZW5lTG9hZGVyICovICIuL0xvYWRpbmcvc2Nl
bmVMb2FkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9vbHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdG9vbHMgKi8g
Ii4vTWlzYy90b29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9vYnNlcnZhYmxl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMv
dGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfY3ViZVRleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFs
cy9UZXh0dXJlcy9jdWJlVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvY3ViZVRleHR1
cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2hk
ckN1YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvaGRyQ3ViZVRleHR1cmUgKi8gIi4vTWF0
ZXJpYWxzL1RleHR1cmVzL2hkckN1YmVUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19lcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
ZXJpYWxzL1RleHR1cmVzL2VxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlICovICIuL01hdGVyaWFs
cy9UZXh0dXJlcy9lcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIu
dHMiKTsKKworCisKKworCisKKworCisKKy8qKgorICogRGVmaW5lcyB0aGUgbGlzdCBvZiBzdGF0
ZXMgYXZhaWxhYmxlIGZvciBhIHRhc2sgaW5zaWRlIGEgQXNzZXRzTWFuYWdlcgorICovCit2YXIg
QXNzZXRUYXNrU3RhdGU7CisoZnVuY3Rpb24gKEFzc2V0VGFza1N0YXRlKSB7CisgICAgLyoqCisg
ICAgICogSW5pdGlhbGl6YXRpb24KKyAgICAgKi8KKyAgICBBc3NldFRhc2tTdGF0ZVtBc3NldFRh
c2tTdGF0ZVsiSU5JVCJdID0gMF0gPSAiSU5JVCI7CisgICAgLyoqCisgICAgICogUnVubmluZwor
ICAgICAqLworICAgIEFzc2V0VGFza1N0YXRlW0Fzc2V0VGFza1N0YXRlWyJSVU5OSU5HIl0gPSAx
XSA9ICJSVU5OSU5HIjsKKyAgICAvKioKKyAgICAgKiBEb25lCisgICAgICovCisgICAgQXNzZXRU
YXNrU3RhdGVbQXNzZXRUYXNrU3RhdGVbIkRPTkUiXSA9IDJdID0gIkRPTkUiOworICAgIC8qKgor
ICAgICAqIEVycm9yCisgICAgICovCisgICAgQXNzZXRUYXNrU3RhdGVbQXNzZXRUYXNrU3RhdGVb
IkVSUk9SIl0gPSAzXSA9ICJFUlJPUiI7Cit9KShBc3NldFRhc2tTdGF0ZSB8fCAoQXNzZXRUYXNr
U3RhdGUgPSB7fSkpOworLyoqCisgKiBEZWZpbmUgYW4gYWJzdHJhY3QgYXNzZXQgdGFzayB1c2Vk
IHdpdGggYSBBc3NldHNNYW5hZ2VyIGNsYXNzIHRvIGxvYWQgYXNzZXRzIGludG8gYSBzY2VuZQor
ICovCit2YXIgQWJzdHJhY3RBc3NldFRhc2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBBc3NldHNNYW5hZ2VyCisgICAgICogQHBh
cmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgdGFzaworICAgICAqLworICAgIGZ1bmN0
aW9uIEFic3RyYWN0QXNzZXRUYXNrKAorICAgIC8qKgorICAgICAqIFRhc2sgbmFtZQorICAgICAq
LyBuYW1lKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMuX2lzQ29t
cGxldGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3Rhc2tTdGF0ZSA9IEFzc2V0VGFza1N0YXRl
LklOSVQ7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdEFzc2V0VGFz
ay5wcm90b3R5cGUsICJpc0NvbXBsZXRlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dCBpZiB0aGUgdGFzayBpcyBjb21wbGV0ZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ29tcGxldGVkOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RBc3NldFRhc2su
cHJvdG90eXBlLCAidGFza1N0YXRlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdGFzaworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFza1N0YXRlOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RBc3NldFRhc2su
cHJvdG90eXBlLCAiZXJyb3JPYmplY3QiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSBjdXJyZW50IGVycm9yIG9iamVjdCAoaWYgdGFzayBpcyBpbiBlcnJvcikKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2Vycm9yT2JqZWN0OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBJbnRlcm5h
bCBvbmx5CisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIEFic3RyYWN0QXNzZXRUYXNrLnBy
b3RvdHlwZS5fc2V0RXJyb3JPYmplY3QgPSBmdW5jdGlvbiAobWVzc2FnZSwgZXhjZXB0aW9uKSB7
CisgICAgICAgIGlmICh0aGlzLl9lcnJvck9iamVjdCkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2Vycm9yT2JqZWN0ID0geworICAgICAgICAgICAgbWVz
c2FnZTogbWVzc2FnZSwKKyAgICAgICAgICAgIGV4Y2VwdGlvbjogZXhjZXB0aW9uCisgICAgICAg
IH07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBh
c3NldHMgdG8gYmUgbG9hZGVkCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNr
IGNhbGxlZCB3aGVuIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBw
YXJhbSBvbkVycm9yIGlzIGEgY2FsbGJhY2sgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAg
ICAqLworICAgIEFic3RyYWN0QXNzZXRUYXNrLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoc2Nl
bmUsIG9uU3VjY2Vzcywgb25FcnJvcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICB0aGlzLl90YXNrU3RhdGUgPSBBc3NldFRhc2tTdGF0ZS5SVU5OSU5HOworICAgICAgICB0
aGlzLnJ1blRhc2soc2NlbmUsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLm9uRG9u
ZUNhbGxiYWNrKG9uU3VjY2Vzcywgb25FcnJvcik7CisgICAgICAgIH0sIGZ1bmN0aW9uIChtc2cs
IGV4Y2VwdGlvbikgeworICAgICAgICAgICAgX3RoaXMub25FcnJvckNhbGxiYWNrKG9uRXJyb3Is
IG1zZywgZXhjZXB0aW9uKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBF
eGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUg
c2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBhc3NldHMgdG8gYmUgbG9hZGVkCisgICAgICogQHBh
cmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSB0YXNrIGlzIHN1Y2Nl
c3NmdWxseSBleGVjdXRlZAorICAgICAqIEBwYXJhbSBvbkVycm9yIGlzIGEgY2FsbGJhY2sgY2Fs
bGVkIGlmIGFuIGVycm9yIG9jY3VycworICAgICAqLworICAgIEFic3RyYWN0QXNzZXRUYXNrLnBy
b3RvdHlwZS5ydW5UYXNrID0gZnVuY3Rpb24gKHNjZW5lLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJydW5UYXNrIGlzIG5vdCBpbXBsZW1lbnRlZCIpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogUmVzZXQgd2lsbCBzZXQgdGhlIHRhc2sgc3RhdGUgYmFj
ayB0byBJTklULCBzbyB0aGUgbmV4dCBsb2FkIGNhbGwgb2YgdGhlIGFzc2V0cyBtYW5hZ2VyIHdp
bGwgZXhlY3V0ZSB0aGlzIHRhc2sgYWdhaW4uCisgICAgICogVGhpcyBjYW4gYmUgdXNlZCB3aXRo
IGZhaWxlZCB0YXNrcyB0aGF0IGhhdmUgdGhlIHJlYXNvbiBmb3IgZmFpbHVyZSBmaXhlZC4KKyAg
ICAgKi8KKyAgICBBYnN0cmFjdEFzc2V0VGFzay5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRoaXMuX3Rhc2tTdGF0ZSA9IEFzc2V0VGFza1N0YXRlLklOSVQ7CisgICAg
fTsKKyAgICBBYnN0cmFjdEFzc2V0VGFzay5wcm90b3R5cGUub25FcnJvckNhbGxiYWNrID0gZnVu
Y3Rpb24gKG9uRXJyb3IsIG1lc3NhZ2UsIGV4Y2VwdGlvbikgeworICAgICAgICB0aGlzLl90YXNr
U3RhdGUgPSBBc3NldFRhc2tTdGF0ZS5FUlJPUjsKKyAgICAgICAgdGhpcy5fZXJyb3JPYmplY3Qg
PSB7CisgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLAorICAgICAgICAgICAgZXhjZXB0aW9u
OiBleGNlcHRpb24KKyAgICAgICAgfTsKKyAgICAgICAgaWYgKHRoaXMub25FcnJvcikgeworICAg
ICAgICAgICAgdGhpcy5vbkVycm9yKHRoaXMsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7CisgICAgICAg
IH0KKyAgICAgICAgb25FcnJvcigpOworICAgIH07CisgICAgQWJzdHJhY3RBc3NldFRhc2sucHJv
dG90eXBlLm9uRG9uZUNhbGxiYWNrID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25FcnJvcikgewor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhpcy5fdGFza1N0YXRlID0gQXNzZXRUYXNrU3Rh
dGUuRE9ORTsKKyAgICAgICAgICAgIHRoaXMuX2lzQ29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGlmICh0aGlzLm9uU3VjY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMub25TdWNjZXNz
KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb25TdWNjZXNzKCk7CisgICAgICAg
IH0KKyAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHRoaXMub25FcnJvckNhbGxiYWNr
KG9uRXJyb3IsICJUYXNrIGlzIGRvbmUsIGVycm9yIGV4ZWN1dGluZyBzdWNjZXNzIGNhbGxiYWNr
KHMpIiwgZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBBYnN0cmFjdEFzc2V0VGFz
azsKK30oKSk7CisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBzaGFyZSBwcm9ncmVzcyBpbmZvcm1h
dGlvbiBhYm91dCBhc3NldHMgbG9hZGluZworICovCit2YXIgQXNzZXRzUHJvZ3Jlc3NFdmVudCA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEg
QXNzZXRzUHJvZ3Jlc3NFdmVudAorICAgICAqIEBwYXJhbSByZW1haW5pbmdDb3VudCBkZWZpbmVz
IHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHRhc2tzIHRvIHByb2Nlc3MKKyAgICAgKiBAcGFyYW0g
dG90YWxDb3VudCBkZWZpbmVzIHRoZSB0b3RhbCBudW1iZXIgb2YgdGFza3MKKyAgICAgKiBAcGFy
YW0gdGFzayBkZWZpbmVzIHRoZSB0YXNrIHRoYXQgd2FzIGp1c3QgcHJvY2Vzc2VkCisgICAgICov
CisgICAgZnVuY3Rpb24gQXNzZXRzUHJvZ3Jlc3NFdmVudChyZW1haW5pbmdDb3VudCwgdG90YWxD
b3VudCwgdGFzaykgeworICAgICAgICB0aGlzLnJlbWFpbmluZ0NvdW50ID0gcmVtYWluaW5nQ291
bnQ7CisgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHRvdGFsQ291bnQ7CisgICAgICAgIHRoaXMu
dGFzayA9IHRhc2s7CisgICAgfQorICAgIHJldHVybiBBc3NldHNQcm9ncmVzc0V2ZW50OworfSgp
KTsKKworLyoqCisgKiBEZWZpbmUgYSB0YXNrIHVzZWQgYnkgQXNzZXRzTWFuYWdlciB0byBsb2Fk
IG1lc2hlcworICovCit2YXIgTWVzaEFzc2V0VGFzayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShNZXNoQXNzZXRUYXNrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgTWVzaEFzc2V0VGFzaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUg
b2YgdGhlIHRhc2sKKyAgICAgKiBAcGFyYW0gbWVzaGVzTmFtZXMgZGVmaW5lcyB0aGUgbGlzdCBv
ZiBtZXNoJ3MgbmFtZXMgeW91IHdhbnQgdG8gbG9hZAorICAgICAqIEBwYXJhbSByb290VXJsIGRl
ZmluZXMgdGhlIHJvb3QgdXJsIHRvIHVzZSBhcyBhIGJhc2UgdG8gbG9hZCB5b3VyIG1lc2hlcyBh
bmQgYXNzb2NpYXRlZCByZXNvdXJjZXMKKyAgICAgKiBAcGFyYW0gc2NlbmVGaWxlbmFtZSBkZWZp
bmVzIHRoZSBmaWxlbmFtZSBvZiB0aGUgc2NlbmUgdG8gbG9hZCBmcm9tCisgICAgICovCisgICAg
ZnVuY3Rpb24gTWVzaEFzc2V0VGFzaygKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBuYW1l
IG9mIHRoZSB0YXNrCisgICAgICovCisgICAgbmFtZSwgCisgICAgLyoqCisgICAgICogRGVmaW5l
cyB0aGUgbGlzdCBvZiBtZXNoJ3MgbmFtZXMgeW91IHdhbnQgdG8gbG9hZAorICAgICAqLworICAg
IG1lc2hlc05hbWVzLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSByb290IHVybCB0byB1
c2UgYXMgYSBiYXNlIHRvIGxvYWQgeW91ciBtZXNoZXMgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2Vz
CisgICAgICovCisgICAgcm9vdFVybCwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgZmls
ZW5hbWUgb2YgdGhlIHNjZW5lIHRvIGxvYWQgZnJvbQorICAgICAqLworICAgIHNjZW5lRmlsZW5h
bWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhp
czsKKyAgICAgICAgX3RoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIF90aGlzLm1lc2hlc05hbWVz
ID0gbWVzaGVzTmFtZXM7CisgICAgICAgIF90aGlzLnJvb3RVcmwgPSByb290VXJsOworICAgICAg
ICBfdGhpcy5zY2VuZUZpbGVuYW1lID0gc2NlbmVGaWxlbmFtZTsKKyAgICAgICAgcmV0dXJuIF90
aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBh
c3NldHMgdG8gYmUgbG9hZGVkCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNr
IGNhbGxlZCB3aGVuIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBw
YXJhbSBvbkVycm9yIGlzIGEgY2FsbGJhY2sgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAg
ICAqLworICAgIE1lc2hBc3NldFRhc2sucHJvdG90eXBlLnJ1blRhc2sgPSBmdW5jdGlvbiAoc2Nl
bmUsIG9uU3VjY2Vzcywgb25FcnJvcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICBfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
Y2VuZUxvYWRlciJdLkltcG9ydE1lc2godGhpcy5tZXNoZXNOYW1lcywgdGhpcy5yb290VXJsLCB0
aGlzLnNjZW5lRmlsZW5hbWUsIHNjZW5lLCBmdW5jdGlvbiAobWVzaGVzLCBwYXJ0aWNsZVN5c3Rl
bXMsIHNrZWxldG9ucywgYW5pbWF0aW9uR3JvdXBzKSB7CisgICAgICAgICAgICBfdGhpcy5sb2Fk
ZWRNZXNoZXMgPSBtZXNoZXM7CisgICAgICAgICAgICBfdGhpcy5sb2FkZWRQYXJ0aWNsZVN5c3Rl
bXMgPSBwYXJ0aWNsZVN5c3RlbXM7CisgICAgICAgICAgICBfdGhpcy5sb2FkZWRTa2VsZXRvbnMg
PSBza2VsZXRvbnM7CisgICAgICAgICAgICBfdGhpcy5sb2FkZWRBbmltYXRpb25Hcm91cHMgPSBh
bmltYXRpb25Hcm91cHM7CisgICAgICAgICAgICBvblN1Y2Nlc3MoKTsKKyAgICAgICAgfSwgbnVs
bCwgZnVuY3Rpb24gKHNjZW5lLCBtZXNzYWdlLCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIG9u
RXJyb3IobWVzc2FnZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICByZXR1
cm4gTWVzaEFzc2V0VGFzazsKK30oQWJzdHJhY3RBc3NldFRhc2spKTsKKworLyoqCisgKiBEZWZp
bmUgYSB0YXNrIHVzZWQgYnkgQXNzZXRzTWFuYWdlciB0byBsb2FkIHRleHQgY29udGVudAorICov
Cit2YXIgVGV4dEZpbGVBc3NldFRhc2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVy
KSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0o
VGV4dEZpbGVBc3NldFRhc2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5l
dyBUZXh0RmlsZUFzc2V0VGFzayBvYmplY3QKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRo
ZSBuYW1lIG9mIHRoZSB0YXNrCisgICAgICogQHBhcmFtIHVybCBkZWZpbmVzIHRoZSBsb2NhdGlv
biBvZiB0aGUgZmlsZSB0byBsb2FkCisgICAgICovCisgICAgZnVuY3Rpb24gVGV4dEZpbGVBc3Nl
dFRhc2soCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgdGFzaworICAg
ICAqLworICAgIG5hbWUsIAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGxvY2F0aW9uIG9m
IHRoZSBmaWxlIHRvIGxvYWQKKyAgICAgKi8KKyAgICB1cmwpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMubmFtZSA9
IG5hbWU7CisgICAgICAgIF90aGlzLnVybCA9IHVybDsKKyAgICAgICAgcmV0dXJuIF90aGlzOwor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAgICAgKiBA
cGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBhc3NldHMg
dG8gYmUgbG9hZGVkCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNrIGNhbGxl
ZCB3aGVuIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBwYXJhbSBv
bkVycm9yIGlzIGEgY2FsbGJhY2sgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAgICAqLwor
ICAgIFRleHRGaWxlQXNzZXRUYXNrLnByb3RvdHlwZS5ydW5UYXNrID0gZnVuY3Rpb24gKHNjZW5l
LCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgc2NlbmUuX2xvYWRGaWxlKHRoaXMudXJsLCBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAg
ICAgX3RoaXMudGV4dCA9IGRhdGE7CisgICAgICAgICAgICBvblN1Y2Nlc3MoKTsKKyAgICAgICAg
fSwgdW5kZWZpbmVkLCBmYWxzZSwgZmFsc2UsIGZ1bmN0aW9uIChyZXF1ZXN0LCBleGNlcHRpb24p
IHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0KSB7CisgICAgICAgICAgICAgICAgb25FcnJvcihy
ZXF1ZXN0LnN0YXR1cyArICIgIiArIHJlcXVlc3Quc3RhdHVzVGV4dCwgZXhjZXB0aW9uKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICByZXR1cm4gVGV4dEZpbGVBc3Nl
dFRhc2s7Cit9KEFic3RyYWN0QXNzZXRUYXNrKSk7CisKKy8qKgorICogRGVmaW5lIGEgdGFzayB1
c2VkIGJ5IEFzc2V0c01hbmFnZXIgdG8gbG9hZCBiaW5hcnkgZGF0YQorICovCit2YXIgQmluYXJ5
RmlsZUFzc2V0VGFzayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShCaW5hcnlGaWxl
QXNzZXRUYXNrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgQmluYXJ5
RmlsZUFzc2V0VGFzayBvYmplY3QKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1l
IG9mIHRoZSBuZXcgdGFzaworICAgICAqIEBwYXJhbSB1cmwgZGVmaW5lcyB0aGUgbG9jYXRpb24g
b2YgdGhlIGZpbGUgdG8gbG9hZAorICAgICAqLworICAgIGZ1bmN0aW9uIEJpbmFyeUZpbGVBc3Nl
dFRhc2soCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgdGFzaworICAg
ICAqLworICAgIG5hbWUsIAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGxvY2F0aW9uIG9m
IHRoZSBmaWxlIHRvIGxvYWQKKyAgICAgKi8KKyAgICB1cmwpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMubmFtZSA9
IG5hbWU7CisgICAgICAgIF90aGlzLnVybCA9IHVybDsKKyAgICAgICAgcmV0dXJuIF90aGlzOwor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAgICAgKiBA
cGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBhc3NldHMg
dG8gYmUgbG9hZGVkCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNrIGNhbGxl
ZCB3aGVuIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBwYXJhbSBv
bkVycm9yIGlzIGEgY2FsbGJhY2sgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAgICAqLwor
ICAgIEJpbmFyeUZpbGVBc3NldFRhc2sucHJvdG90eXBlLnJ1blRhc2sgPSBmdW5jdGlvbiAoc2Nl
bmUsIG9uU3VjY2Vzcywgb25FcnJvcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICBzY2VuZS5fbG9hZEZpbGUodGhpcy51cmwsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAg
ICAgICBfdGhpcy5kYXRhID0gZGF0YTsKKyAgICAgICAgICAgIG9uU3VjY2VzcygpOworICAgICAg
ICB9LCB1bmRlZmluZWQsIHRydWUsIHRydWUsIGZ1bmN0aW9uIChyZXF1ZXN0LCBleGNlcHRpb24p
IHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0KSB7CisgICAgICAgICAgICAgICAgb25FcnJvcihy
ZXF1ZXN0LnN0YXR1cyArICIgIiArIHJlcXVlc3Quc3RhdHVzVGV4dCwgZXhjZXB0aW9uKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICByZXR1cm4gQmluYXJ5RmlsZUFz
c2V0VGFzazsKK30oQWJzdHJhY3RBc3NldFRhc2spKTsKKworLyoqCisgKiBEZWZpbmUgYSB0YXNr
IHVzZWQgYnkgQXNzZXRzTWFuYWdlciB0byBsb2FkIGltYWdlcworICovCit2YXIgSW1hZ2VBc3Nl
dFRhc2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oSW1hZ2VBc3NldFRhc2ssIF9z
dXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBJbWFnZUFzc2V0VGFzaworICAg
ICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHRhc2sKKyAgICAgKiBAcGFy
YW0gdXJsIGRlZmluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBpbWFnZSB0byBsb2FkCisgICAgICov
CisgICAgZnVuY3Rpb24gSW1hZ2VBc3NldFRhc2soCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0
aGUgbmFtZSBvZiB0aGUgdGFzaworICAgICAqLworICAgIG5hbWUsIAorICAgIC8qKgorICAgICAq
IERlZmluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBpbWFnZSB0byBsb2FkCisgICAgICovCisgICAg
dXJsKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRo
aXM7CisgICAgICAgIF90aGlzLm5hbWUgPSBuYW1lOworICAgICAgICBfdGhpcy51cmwgPSB1cmw7
CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogRXhlY3V0ZSB0
aGUgY3VycmVudCB0YXNrCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIHNjZW5lIHdo
ZXJlIHlvdSB3YW50IHlvdXIgYXNzZXRzIHRvIGJlIGxvYWRlZAorICAgICAqIEBwYXJhbSBvblN1
Y2Nlc3MgaXMgYSBjYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgdGFzayBpcyBzdWNjZXNzZnVsbHkg
ZXhlY3V0ZWQKKyAgICAgKiBAcGFyYW0gb25FcnJvciBpcyBhIGNhbGxiYWNrIGNhbGxlZCBpZiBh
biBlcnJvciBvY2N1cnMKKyAgICAgKi8KKyAgICBJbWFnZUFzc2V0VGFzay5wcm90b3R5cGUucnVu
VGFzayA9IGZ1bmN0aW9uIChzY2VuZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAg
X3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRvb2xzIl0uU2V0Q29yc0JlaGF2
aW9yKHRoaXMudXJsLCBpbWcpOworICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgX3RoaXMuaW1hZ2UgPSBpbWc7CisgICAgICAgICAgICBvblN1Y2Nlc3MoKTsK
KyAgICAgICAgfTsKKyAgICAgICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7CisgICAg
ICAgICAgICBvbkVycm9yKCJFcnJvciBsb2FkaW5nIGltYWdlIiwgZXJyKTsKKyAgICAgICAgfTsK
KyAgICAgICAgaW1nLnNyYyA9IHRoaXMudXJsOworICAgIH07CisgICAgcmV0dXJuIEltYWdlQXNz
ZXRUYXNrOworfShBYnN0cmFjdEFzc2V0VGFzaykpOworCisvKioKKyAqIERlZmluZSBhIHRhc2sg
dXNlZCBieSBBc3NldHNNYW5hZ2VyIHRvIGxvYWQgMkQgdGV4dHVyZXMKKyAqLwordmFyIFRleHR1
cmVBc3NldFRhc2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVGV4dHVyZUFzc2V0
VGFzaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFRleHR1cmVBc3Nl
dFRhc2sgb2JqZWN0CisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUg
dGFzaworICAgICAqIEBwYXJhbSB1cmwgZGVmaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUg
dG8gbG9hZAorICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlmIG1pcG1hcCBzaG91bGQg
bm90IGJlIGdlbmVyYXRlZCAoZGVmYXVsdCBpcyBmYWxzZSkKKyAgICAgKiBAcGFyYW0gaW52ZXJ0
WSBkZWZpbmVzIGlmIHRleHR1cmUgbXVzdCBiZSBpbnZlcnRlZCBvbiBZIGF4aXMgKGRlZmF1bHQg
aXMgZmFsc2UpCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBkZWZpbmVzIHRoZSBzYW1wbGlu
ZyBtb2RlIHRvIHVzZSAoZGVmYXVsdCBpcyBUZXh0dXJlLlRSSUxJTkVBUl9TQU1QTElOR01PREUp
CisgICAgICovCisgICAgZnVuY3Rpb24gVGV4dHVyZUFzc2V0VGFzaygKKyAgICAvKioKKyAgICAg
KiBEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSB0YXNrCisgICAgICovCisgICAgbmFtZSwgCisgICAg
LyoqCisgICAgICogRGVmaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gbG9hZAorICAg
ICAqLworICAgIHVybCwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyBpZiBtaXBtYXAgc2hvdWxk
IG5vdCBiZSBnZW5lcmF0ZWQgKGRlZmF1bHQgaXMgZmFsc2UpCisgICAgICovCisgICAgbm9NaXBt
YXAsIAorICAgIC8qKgorICAgICAqIERlZmluZXMgaWYgdGV4dHVyZSBtdXN0IGJlIGludmVydGVk
IG9uIFkgYXhpcyAoZGVmYXVsdCBpcyBmYWxzZSkKKyAgICAgKi8KKyAgICBpbnZlcnRZLCAKKyAg
ICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBzYW1wbGluZyBtb2RlIHRvIHVzZSAoZGVmYXVsdCBp
cyBUZXh0dXJlLlRSSUxJTkVBUl9TQU1QTElOR01PREUpCisgICAgICovCisgICAgc2FtcGxpbmdN
b2RlKSB7CisgICAgICAgIGlmIChzYW1wbGluZ01vZGUgPT09IHZvaWQgMCkgeyBzYW1wbGluZ01v
ZGUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siVGV4dHVyZSJdLlRSSUxJTkVBUl9TQU1QTElOR01PREU7IH0KKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMubmFt
ZSA9IG5hbWU7CisgICAgICAgIF90aGlzLnVybCA9IHVybDsKKyAgICAgICAgX3RoaXMubm9NaXBt
YXAgPSBub01pcG1hcDsKKyAgICAgICAgX3RoaXMuaW52ZXJ0WSA9IGludmVydFk7CisgICAgICAg
IF90aGlzLnNhbXBsaW5nTW9kZSA9IHNhbXBsaW5nTW9kZTsKKyAgICAgICAgcmV0dXJuIF90aGlz
OworICAgIH0KKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAgICAg
KiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBhc3Nl
dHMgdG8gYmUgbG9hZGVkCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNrIGNh
bGxlZCB3aGVuIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBwYXJh
bSBvbkVycm9yIGlzIGEgY2FsbGJhY2sgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAgICAq
LworICAgIFRleHR1cmVBc3NldFRhc2sucHJvdG90eXBlLnJ1blRhc2sgPSBmdW5jdGlvbiAoc2Nl
bmUsIG9uU3VjY2Vzcywgb25FcnJvcikgeworICAgICAgICB2YXIgb25sb2FkID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgb25TdWNjZXNzKCk7CisgICAgICAgIH07CisgICAgICAgIHZhciBv
bmVycm9yID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGV4Y2VwdGlvbikgeworICAgICAgICAgICAgb25F
cnJvcihtZXNzYWdlLCBleGNlcHRpb24pOworICAgICAgICB9OworICAgICAgICB0aGlzLnRleHR1
cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlRleHR1cmUiXSh0aGlzLnVybCwgc2NlbmUsIHRoaXMubm9NaXBtYXAsIHRoaXMu
aW52ZXJ0WSwgdGhpcy5zYW1wbGluZ01vZGUsIG9ubG9hZCwgb25lcnJvcik7CisgICAgfTsKKyAg
ICByZXR1cm4gVGV4dHVyZUFzc2V0VGFzazsKK30oQWJzdHJhY3RBc3NldFRhc2spKTsKKworLyoq
CisgKiBEZWZpbmUgYSB0YXNrIHVzZWQgYnkgQXNzZXRzTWFuYWdlciB0byBsb2FkIGN1YmUgdGV4
dHVyZXMKKyAqLwordmFyIEN1YmVUZXh0dXJlQXNzZXRUYXNrID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKEN1YmVUZXh0dXJlQXNzZXRUYXNrLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBuZXcgQ3ViZVRleHR1cmVBc3NldFRhc2sKKyAgICAgKiBAcGFyYW0gbmFt
ZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSB0YXNrCisgICAgICogQHBhcmFtIHVybCBkZWZpbmVz
IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZXMgdG8gbG9hZCAoWW91IGhhdmUgdG8gc3BlY2lmeSB0
aGUgZm9sZGVyIHdoZXJlIHRoZSBmaWxlcyBhcmUgKyBmaWxlbmFtZSB3aXRoIG5vIGV4dGVuc2lv
bikKKyAgICAgKiBAcGFyYW0gZXh0ZW5zaW9ucyBkZWZpbmVzIHRoZSBleHRlbnNpb25zIHRvIHVz
ZSB0byBsb2FkIGZpbGVzIChbIl9weCIsICJfcHkiLCAiX3B6IiwgIl9ueCIsICJfbnkiLCAiX256
Il0gYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gbm9NaXBtYXAgZGVmaW5lcyBpZiBtaXBtYXBz
IHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkIChkZWZhdWx0IGlzIGZhbHNlKQorICAgICAqIEBwYXJh
bSBmaWxlcyBkZWZpbmVzIHRoZSBleHBsaWNpdCBsaXN0IG9mIGZpbGVzICh1bmRlZmluZWQgYnkg
ZGVmYXVsdCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDdWJlVGV4dHVyZUFzc2V0VGFzaygKKyAg
ICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSB0YXNrCisgICAgICovCisgICAg
bmFtZSwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGVz
IHRvIGxvYWQgKFlvdSBoYXZlIHRvIHNwZWNpZnkgdGhlIGZvbGRlciB3aGVyZSB0aGUgZmlsZXMg
YXJlICsgZmlsZW5hbWUgd2l0aCBubyBleHRlbnNpb24pCisgICAgICovCisgICAgdXJsLCAKKyAg
ICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBleHRlbnNpb25zIHRvIHVzZSB0byBsb2FkIGZpbGVz
IChbIl9weCIsICJfcHkiLCAiX3B6IiwgIl9ueCIsICJfbnkiLCAiX256Il0gYnkgZGVmYXVsdCkK
KyAgICAgKi8KKyAgICBleHRlbnNpb25zLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIGlmIG1p
cG1hcHMgc2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQgKGRlZmF1bHQgaXMgZmFsc2UpCisgICAgICov
CisgICAgbm9NaXBtYXAsIAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGV4cGxpY2l0IGxp
c3Qgb2YgZmlsZXMgKHVuZGVmaW5lZCBieSBkZWZhdWx0KQorICAgICAqLworICAgIGZpbGVzKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7Cisg
ICAgICAgIF90aGlzLm5hbWUgPSBuYW1lOworICAgICAgICBfdGhpcy51cmwgPSB1cmw7CisgICAg
ICAgIF90aGlzLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zOworICAgICAgICBfdGhpcy5ub01pcG1h
cCA9IG5vTWlwbWFwOworICAgICAgICBfdGhpcy5maWxlcyA9IGZpbGVzOworICAgICAgICByZXR1
cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEV4ZWN1dGUgdGhlIGN1cnJlbnQgdGFz
aworICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB3aGVyZSB5b3Ugd2FudCB5
b3VyIGFzc2V0cyB0byBiZSBsb2FkZWQKKyAgICAgKiBAcGFyYW0gb25TdWNjZXNzIGlzIGEgY2Fs
bGJhY2sgY2FsbGVkIHdoZW4gdGhlIHRhc2sgaXMgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkCisgICAg
ICogQHBhcmFtIG9uRXJyb3IgaXMgYSBjYWxsYmFjayBjYWxsZWQgaWYgYW4gZXJyb3Igb2NjdXJz
CisgICAgICovCisgICAgQ3ViZVRleHR1cmVBc3NldFRhc2sucHJvdG90eXBlLnJ1blRhc2sgPSBm
dW5jdGlvbiAoc2NlbmUsIG9uU3VjY2Vzcywgb25FcnJvcikgeworICAgICAgICB2YXIgb25sb2Fk
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgb25TdWNjZXNzKCk7CisgICAgICAgIH07Cisg
ICAgICAgIHZhciBvbmVycm9yID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGV4Y2VwdGlvbikgeworICAg
ICAgICAgICAgb25FcnJvcihtZXNzYWdlLCBleGNlcHRpb24pOworICAgICAgICB9OworICAgICAg
ICB0aGlzLnRleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19jdWJlVGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDdWJlVGV4dHVyZSJdKHRoaXMudXJsLCBzY2VuZSwg
dGhpcy5leHRlbnNpb25zLCB0aGlzLm5vTWlwbWFwLCB0aGlzLmZpbGVzLCBvbmxvYWQsIG9uZXJy
b3IpOworICAgIH07CisgICAgcmV0dXJuIEN1YmVUZXh0dXJlQXNzZXRUYXNrOworfShBYnN0cmFj
dEFzc2V0VGFzaykpOworCisvKioKKyAqIERlZmluZSBhIHRhc2sgdXNlZCBieSBBc3NldHNNYW5h
Z2VyIHRvIGxvYWQgSERSIGN1YmUgdGV4dHVyZXMKKyAqLwordmFyIEhEUkN1YmVUZXh0dXJlQXNz
ZXRUYXNrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEhEUkN1YmVUZXh0dXJlQXNz
ZXRUYXNrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgSERSQ3ViZVRl
eHR1cmVBc3NldFRhc2sgb2JqZWN0CisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFt
ZSBvZiB0aGUgdGFzaworICAgICAqIEBwYXJhbSB1cmwgZGVmaW5lcyB0aGUgbG9jYXRpb24gb2Yg
dGhlIGZpbGUgdG8gbG9hZAorICAgICAqIEBwYXJhbSBzaXplIGRlZmluZXMgdGhlIGRlc2lyZWQg
c2l6ZSAodGhlIG1vcmUgaXQgaW5jcmVhc2VzIHRoZSBsb25nZXIgdGhlIGdlbmVyYXRpb24gd2ls
bCBiZSkgSWYgdGhlIHNpemUgaXMgb21pdHRlZCB0aGlzIGltcGxpZXMgeW91IGFyZSB1c2luZyBh
IHByZXByb2Nlc3NlZCBjdWJlbWFwLgorICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlm
IG1pcG1hcHMgc2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQgKGRlZmF1bHQgaXMgZmFsc2UpCisgICAg
ICogQHBhcmFtIGdlbmVyYXRlSGFybW9uaWNzIHNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRv
IGV4dHJhY3QgdGhlIHBvbHlub21pYWwgaGFybW9uaWNzIGR1cmluZyB0aGUgZ2VuZXJhdGlvbiBw
cm9jZXNzIChkZWZhdWx0IGlzIHRydWUpCisgICAgICogQHBhcmFtIGdhbW1hU3BhY2Ugc3BlY2lm
aWVzIGlmIHRoZSB0ZXh0dXJlIHdpbGwgYmUgdXNlIGluIGdhbW1hIG9yIGxpbmVhciBzcGFjZSAo
dGhlIFBCUiBtYXRlcmlhbCByZXF1aXJlcyB0aG9zZSB0ZXh0dXJlIGluIGxpbmVhciBzcGFjZSwg
YnV0IHRoZSBzdGFuZGFyZCBtYXRlcmlhbCB3b3VsZCByZXF1aXJlIHRoZW0gaW4gR2FtbWEgc3Bh
Y2UpIChkZWZhdWx0IGlzIGZhbHNlKQorICAgICAqIEBwYXJhbSByZXNlcnZlZCBJbnRlcm5hbCB1
c2Ugb25seQorICAgICAqLworICAgIGZ1bmN0aW9uIEhEUkN1YmVUZXh0dXJlQXNzZXRUYXNrKAor
ICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHRhc2sKKyAgICAgKi8KKyAg
ICBuYW1lLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmls
ZSB0byBsb2FkCisgICAgICovCisgICAgdXJsLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRo
ZSBkZXNpcmVkIHNpemUgKHRoZSBtb3JlIGl0IGluY3JlYXNlcyB0aGUgbG9uZ2VyIHRoZSBnZW5l
cmF0aW9uIHdpbGwgYmUpCisgICAgICovCisgICAgc2l6ZSwgCisgICAgLyoqCisgICAgICogRGVm
aW5lcyBpZiBtaXBtYXBzIHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkIChkZWZhdWx0IGlzIGZhbHNl
KQorICAgICAqLworICAgIG5vTWlwbWFwLCAKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgd2hl
dGhlciB5b3Ugd2FudCB0byBleHRyYWN0IHRoZSBwb2x5bm9taWFsIGhhcm1vbmljcyBkdXJpbmcg
dGhlIGdlbmVyYXRpb24gcHJvY2VzcyAoZGVmYXVsdCBpcyB0cnVlKQorICAgICAqLworICAgIGdl
bmVyYXRlSGFybW9uaWNzLCAKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIHRleHR1
cmUgd2lsbCBiZSB1c2UgaW4gZ2FtbWEgb3IgbGluZWFyIHNwYWNlICh0aGUgUEJSIG1hdGVyaWFs
IHJlcXVpcmVzIHRob3NlIHRleHR1cmUgaW4gbGluZWFyIHNwYWNlLCBidXQgdGhlIHN0YW5kYXJk
IG1hdGVyaWFsIHdvdWxkIHJlcXVpcmUgdGhlbSBpbiBHYW1tYSBzcGFjZSkgKGRlZmF1bHQgaXMg
ZmFsc2UpCisgICAgICovCisgICAgZ2FtbWFTcGFjZSwgCisgICAgLyoqCisgICAgICogSW50ZXJu
YWwgVXNlIE9ubHkKKyAgICAgKi8KKyAgICByZXNlcnZlZCkgeworICAgICAgICBpZiAobm9NaXBt
YXAgPT09IHZvaWQgMCkgeyBub01pcG1hcCA9IGZhbHNlOyB9CisgICAgICAgIGlmIChnZW5lcmF0
ZUhhcm1vbmljcyA9PT0gdm9pZCAwKSB7IGdlbmVyYXRlSGFybW9uaWNzID0gdHJ1ZTsgfQorICAg
ICAgICBpZiAoZ2FtbWFTcGFjZSA9PT0gdm9pZCAwKSB7IGdhbW1hU3BhY2UgPSBmYWxzZTsgfQor
ICAgICAgICBpZiAocmVzZXJ2ZWQgPT09IHZvaWQgMCkgeyByZXNlcnZlZCA9IGZhbHNlOyB9Cisg
ICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7CisgICAg
ICAgIF90aGlzLm5hbWUgPSBuYW1lOworICAgICAgICBfdGhpcy51cmwgPSB1cmw7CisgICAgICAg
IF90aGlzLnNpemUgPSBzaXplOworICAgICAgICBfdGhpcy5ub01pcG1hcCA9IG5vTWlwbWFwOwor
ICAgICAgICBfdGhpcy5nZW5lcmF0ZUhhcm1vbmljcyA9IGdlbmVyYXRlSGFybW9uaWNzOworICAg
ICAgICBfdGhpcy5nYW1tYVNwYWNlID0gZ2FtbWFTcGFjZTsKKyAgICAgICAgX3RoaXMucmVzZXJ2
ZWQgPSByZXNlcnZlZDsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5l
cyB0aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBhc3NldHMgdG8gYmUgbG9hZGVkCisgICAg
ICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSB0YXNrIGlz
IHN1Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBwYXJhbSBvbkVycm9yIGlzIGEgY2FsbGJh
Y2sgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAgICAqLworICAgIEhEUkN1YmVUZXh0dXJl
QXNzZXRUYXNrLnByb3RvdHlwZS5ydW5UYXNrID0gZnVuY3Rpb24gKHNjZW5lLCBvblN1Y2Nlc3Ms
IG9uRXJyb3IpIHsKKyAgICAgICAgdmFyIG9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIG9uU3VjY2VzcygpOworICAgICAgICB9OworICAgICAgICB2YXIgb25lcnJvciA9IGZ1bmN0
aW9uIChtZXNzYWdlLCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIG9uRXJyb3IobWVzc2FnZSwg
ZXhjZXB0aW9uKTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy50ZXh0dXJlID0gbmV3IF9NYXRl
cmlhbHNfVGV4dHVyZXNfaGRyQ3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siSERSQ3ViZVRleHR1cmUiXSh0aGlzLnVybCwgc2NlbmUsIHRoaXMuc2l6ZSwgdGhpcy5ub01p
cG1hcCwgdGhpcy5nZW5lcmF0ZUhhcm1vbmljcywgdGhpcy5nYW1tYVNwYWNlLCB0aGlzLnJlc2Vy
dmVkLCBvbmxvYWQsIG9uZXJyb3IpOworICAgIH07CisgICAgcmV0dXJuIEhEUkN1YmVUZXh0dXJl
QXNzZXRUYXNrOworfShBYnN0cmFjdEFzc2V0VGFzaykpOworCisvKioKKyAqIERlZmluZSBhIHRh
c2sgdXNlZCBieSBBc3NldHNNYW5hZ2VyIHRvIGxvYWQgRXF1aXJlY3Rhbmd1bGFyIGN1YmUgdGV4
dHVyZXMKKyAqLwordmFyIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNzZXRUYXNrID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNz
ZXRUYXNrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgRXF1aVJlY3Rh
bmd1bGFyQ3ViZVRleHR1cmVBc3NldFRhc2sgb2JqZWN0CisgICAgICogQHBhcmFtIG5hbWUgZGVm
aW5lcyB0aGUgbmFtZSBvZiB0aGUgdGFzaworICAgICAqIEBwYXJhbSB1cmwgZGVmaW5lcyB0aGUg
bG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gbG9hZAorICAgICAqIEBwYXJhbSBzaXplIGRlZmluZXMg
dGhlIGRlc2lyZWQgc2l6ZSAodGhlIG1vcmUgaXQgaW5jcmVhc2VzIHRoZSBsb25nZXIgdGhlIGdl
bmVyYXRpb24gd2lsbCBiZSkKKyAgICAgKiBJZiB0aGUgc2l6ZSBpcyBvbWl0dGVkIHRoaXMgaW1w
bGllcyB5b3UgYXJlIHVzaW5nIGEgcHJlcHJvY2Vzc2VkIGN1YmVtYXAuCisgICAgICogQHBhcmFt
IG5vTWlwbWFwIGRlZmluZXMgaWYgbWlwbWFwcyBzaG91bGQgbm90IGJlIGdlbmVyYXRlZCAoZGVm
YXVsdCBpcyBmYWxzZSkKKyAgICAgKiBAcGFyYW0gZ2FtbWFTcGFjZSBzcGVjaWZpZXMgaWYgdGhl
IHRleHR1cmUgd2lsbCBiZSB1c2VkIGluIGdhbW1hIG9yIGxpbmVhciBzcGFjZQorICAgICAqICh0
aGUgUEJSIG1hdGVyaWFsIHJlcXVpcmVzIHRob3NlIHRleHR1cmUgaW4gbGluZWFyIHNwYWNlLCBi
dXQgdGhlIHN0YW5kYXJkIG1hdGVyaWFsIHdvdWxkIHJlcXVpcmUgdGhlbSBpbiBHYW1tYSBzcGFj
ZSkKKyAgICAgKiAoZGVmYXVsdCBpcyB0cnVlKQorICAgICAqLworICAgIGZ1bmN0aW9uIEVxdWlS
ZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNzZXRUYXNrKAorICAgIC8qKgorICAgICAqIERlZmluZXMg
dGhlIG5hbWUgb2YgdGhlIHRhc2sKKyAgICAgKi8KKyAgICBuYW1lLCAKKyAgICAvKioKKyAgICAg
KiBEZWZpbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSB0byBsb2FkCisgICAgICovCisgICAg
dXJsLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBkZXNpcmVkIHNpemUgKHRoZSBtb3Jl
IGl0IGluY3JlYXNlcyB0aGUgbG9uZ2VyIHRoZSBnZW5lcmF0aW9uIHdpbGwgYmUpCisgICAgICov
CisgICAgc2l6ZSwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyBpZiBtaXBtYXBzIHNob3VsZCBu
b3QgYmUgZ2VuZXJhdGVkIChkZWZhdWx0IGlzIGZhbHNlKQorICAgICAqLworICAgIG5vTWlwbWFw
LCAKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIHRleHR1cmUgd2lsbCBiZSB1c2Ug
aW4gZ2FtbWEgb3IgbGluZWFyIHNwYWNlICh0aGUgUEJSIG1hdGVyaWFsIHJlcXVpcmVzIHRob3Nl
IHRleHR1cmUgaW4gbGluZWFyIHNwYWNlLAorICAgICAqIGJ1dCB0aGUgc3RhbmRhcmQgbWF0ZXJp
YWwgd291bGQgcmVxdWlyZSB0aGVtIGluIEdhbW1hIHNwYWNlKSAoZGVmYXVsdCBpcyB0cnVlKQor
ICAgICAqLworICAgIGdhbW1hU3BhY2UpIHsKKyAgICAgICAgaWYgKG5vTWlwbWFwID09PSB2b2lk
IDApIHsgbm9NaXBtYXAgPSBmYWxzZTsgfQorICAgICAgICBpZiAoZ2FtbWFTcGFjZSA9PT0gdm9p
ZCAwKSB7IGdhbW1hU3BhY2UgPSB0cnVlOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5j
YWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLm5hbWUgPSBuYW1lOworICAg
ICAgICBfdGhpcy51cmwgPSB1cmw7CisgICAgICAgIF90aGlzLnNpemUgPSBzaXplOworICAgICAg
ICBfdGhpcy5ub01pcG1hcCA9IG5vTWlwbWFwOworICAgICAgICBfdGhpcy5nYW1tYVNwYWNlID0g
Z2FtbWFTcGFjZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAg
KiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0
aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBhc3NldHMgdG8gYmUgbG9hZGVkCisgICAgICog
QHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSB0YXNrIGlzIHN1
Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBwYXJhbSBvbkVycm9yIGlzIGEgY2FsbGJhY2sg
Y2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAgICAqLworICAgIEVxdWlSZWN0YW5ndWxhckN1
YmVUZXh0dXJlQXNzZXRUYXNrLnByb3RvdHlwZS5ydW5UYXNrID0gZnVuY3Rpb24gKHNjZW5lLCBv
blN1Y2Nlc3MsIG9uRXJyb3IpIHsKKyAgICAgICAgdmFyIG9ubG9hZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIG9uU3VjY2VzcygpOworICAgICAgICB9OworICAgICAgICB2YXIgb25lcnJv
ciA9IGZ1bmN0aW9uIChtZXNzYWdlLCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIG9uRXJyb3Io
bWVzc2FnZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy50ZXh0dXJlID0g
bmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfZXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfX1siRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUiXSh0aGlz
LnVybCwgc2NlbmUsIHRoaXMuc2l6ZSwgdGhpcy5ub01pcG1hcCwgdGhpcy5nYW1tYVNwYWNlLCBv
bmxvYWQsIG9uZXJyb3IpOworICAgIH07CisgICAgcmV0dXJuIEVxdWlSZWN0YW5ndWxhckN1YmVU
ZXh0dXJlQXNzZXRUYXNrOworfShBYnN0cmFjdEFzc2V0VGFzaykpOworCisvKioKKyAqIFRoaXMg
Y2xhc3MgY2FuIGJlIHVzZWQgdG8gZWFzaWx5IGltcG9ydCBhc3NldHMgaW50byBhIHNjZW5lCisg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hc3NldHNt
YW5hZ2VyCisgKi8KK3ZhciBBc3NldHNNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgQXNzZXRzTWFuYWdlcgorICAgICAq
IEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0byB3b3JrIG9uCisgICAgICovCisgICAg
ZnVuY3Rpb24gQXNzZXRzTWFuYWdlcihzY2VuZSkgeworICAgICAgICB0aGlzLl9pc0xvYWRpbmcg
PSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdGFza3MgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhp
cy5fd2FpdGluZ1Rhc2tzQ291bnQgPSAwOworICAgICAgICB0aGlzLl90b3RhbFRhc2tzQ291bnQg
PSAwOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSBjYWxsZWQgd2hlbiBhbGwg
dGFza3MgYXJlIHByb2Nlc3NlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vblRhc2tTdWNj
ZXNzT2JzZXJ2YWJsZSA9IG5ldyBfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUg
Y2FsbGVkIHdoZW4gYSB0YXNrIGhhZCBhbiBlcnJvcgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5vblRhc2tFcnJvck9ic2VydmFibGUgPSBuZXcgX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBP
YnNlcnZhYmxlIGNhbGxlZCB3aGVuIGFsbCB0YXNrcyB3ZXJlIGV4ZWN1dGVkCisgICAgICAgICAq
LworICAgICAgICB0aGlzLm9uVGFza3NEb25lT2JzZXJ2YWJsZSA9IG5ldyBfb2JzZXJ2YWJsZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIE9ic2VydmFibGUgY2FsbGVkIHdoZW4gYSB0YXNrIGlzIGRvbmUgKHdoYXRl
dmVyIHRoZSByZXN1bHQgaXMpCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uUHJvZ3Jlc3NP
YnNlcnZhYmxlID0gbmV3IF9vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
Ik9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEg
Ym9vbGVhbiBkZWZpbmluZyBpZiB0aGUgQXNzZXRzTWFuYWdlciBzaG91bGQgdXNlIHRoZSBkZWZh
dWx0IGxvYWRpbmcgc2NyZWVuCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9jcmVhdGluZ19hX2N1c3RvbV9sb2FkaW5nX3NjcmVlbgorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy51c2VEZWZhdWx0TG9hZGluZ1NjcmVlbiA9IHRydWU7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGRlZmluaW5nIGlmIHRoZSBBc3Nl
dHNNYW5hZ2VyIHNob3VsZCBhdXRvbWF0aWNhbGx5IGhpZGUgdGhlIGxvYWRpbmcgc2NyZWVuCisg
ICAgICAgICAqIHdoZW4gYWxsIGFzc2V0cyBoYXZlIGJlZW4gZG93bmxvYWRlZC4KKyAgICAgICAg
ICogSWYgc2V0IHRvIGZhbHNlLCB5b3UgbmVlZCB0byBtYW51YWxseSBjYWxsIGluIGhpZGVMb2Fk
aW5nVUkoKSBvbmNlIHlvdXIgc2NlbmUgaXMgcmVhZHkuCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmF1dG9IaWRlTG9hZGluZ1VJID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2Vu
ZTsKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIGEgTWVzaEFzc2V0VGFzayB0byB0aGUgbGlz
dCBvZiBhY3RpdmUgdGFza3MKKyAgICAgKiBAcGFyYW0gdGFza05hbWUgZGVmaW5lcyB0aGUgbmFt
ZSBvZiB0aGUgbmV3IHRhc2sKKyAgICAgKiBAcGFyYW0gbWVzaGVzTmFtZXMgZGVmaW5lcyB0aGUg
bmFtZSBvZiBtZXNoZXMgdG8gbG9hZAorICAgICAqIEBwYXJhbSByb290VXJsIGRlZmluZXMgdGhl
IHJvb3QgdXJsIHRvIHVzZSB0byBsb2NhdGUgZmlsZXMKKyAgICAgKiBAcGFyYW0gc2NlbmVGaWxl
bmFtZSBkZWZpbmVzIHRoZSBmaWxlbmFtZSBvZiB0aGUgc2NlbmUgZmlsZQorICAgICAqIEByZXR1
cm5zIGEgbmV3IE1lc2hBc3NldFRhc2sgb2JqZWN0CisgICAgICovCisgICAgQXNzZXRzTWFuYWdl
ci5wcm90b3R5cGUuYWRkTWVzaFRhc2sgPSBmdW5jdGlvbiAodGFza05hbWUsIG1lc2hlc05hbWVz
LCByb290VXJsLCBzY2VuZUZpbGVuYW1lKSB7CisgICAgICAgIHZhciB0YXNrID0gbmV3IE1lc2hB
c3NldFRhc2sodGFza05hbWUsIG1lc2hlc05hbWVzLCByb290VXJsLCBzY2VuZUZpbGVuYW1lKTsK
KyAgICAgICAgdGhpcy5fdGFza3MucHVzaCh0YXNrKTsKKyAgICAgICAgcmV0dXJuIHRhc2s7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgYSBUZXh0RmlsZUFzc2V0VGFzayB0byB0aGUgbGlz
dCBvZiBhY3RpdmUgdGFza3MKKyAgICAgKiBAcGFyYW0gdGFza05hbWUgZGVmaW5lcyB0aGUgbmFt
ZSBvZiB0aGUgbmV3IHRhc2sKKyAgICAgKiBAcGFyYW0gdXJsIGRlZmluZXMgdGhlIHVybCBvZiB0
aGUgZmlsZSB0byBsb2FkCisgICAgICogQHJldHVybnMgYSBuZXcgVGV4dEZpbGVBc3NldFRhc2sg
b2JqZWN0CisgICAgICovCisgICAgQXNzZXRzTWFuYWdlci5wcm90b3R5cGUuYWRkVGV4dEZpbGVU
YXNrID0gZnVuY3Rpb24gKHRhc2tOYW1lLCB1cmwpIHsKKyAgICAgICAgdmFyIHRhc2sgPSBuZXcg
VGV4dEZpbGVBc3NldFRhc2sodGFza05hbWUsIHVybCk7CisgICAgICAgIHRoaXMuX3Rhc2tzLnB1
c2godGFzayk7CisgICAgICAgIHJldHVybiB0YXNrOworICAgIH07CisgICAgLyoqCisgICAgICog
QWRkIGEgQmluYXJ5RmlsZUFzc2V0VGFzayB0byB0aGUgbGlzdCBvZiBhY3RpdmUgdGFza3MKKyAg
ICAgKiBAcGFyYW0gdGFza05hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3IHRhc2sKKyAg
ICAgKiBAcGFyYW0gdXJsIGRlZmluZXMgdGhlIHVybCBvZiB0aGUgZmlsZSB0byBsb2FkCisgICAg
ICogQHJldHVybnMgYSBuZXcgQmluYXJ5RmlsZUFzc2V0VGFzayBvYmplY3QKKyAgICAgKi8KKyAg
ICBBc3NldHNNYW5hZ2VyLnByb3RvdHlwZS5hZGRCaW5hcnlGaWxlVGFzayA9IGZ1bmN0aW9uICh0
YXNrTmFtZSwgdXJsKSB7CisgICAgICAgIHZhciB0YXNrID0gbmV3IEJpbmFyeUZpbGVBc3NldFRh
c2sodGFza05hbWUsIHVybCk7CisgICAgICAgIHRoaXMuX3Rhc2tzLnB1c2godGFzayk7CisgICAg
ICAgIHJldHVybiB0YXNrOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGEgSW1hZ2VBc3Nl
dFRhc2sgdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIHRhc2tzCisgICAgICogQHBhcmFtIHRhc2tOYW1l
IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG5ldyB0YXNrCisgICAgICogQHBhcmFtIHVybCBkZWZp
bmVzIHRoZSB1cmwgb2YgdGhlIGZpbGUgdG8gbG9hZAorICAgICAqIEByZXR1cm5zIGEgbmV3IElt
YWdlQXNzZXRUYXNrIG9iamVjdAorICAgICAqLworICAgIEFzc2V0c01hbmFnZXIucHJvdG90eXBl
LmFkZEltYWdlVGFzayA9IGZ1bmN0aW9uICh0YXNrTmFtZSwgdXJsKSB7CisgICAgICAgIHZhciB0
YXNrID0gbmV3IEltYWdlQXNzZXRUYXNrKHRhc2tOYW1lLCB1cmwpOworICAgICAgICB0aGlzLl90
YXNrcy5wdXNoKHRhc2spOworICAgICAgICByZXR1cm4gdGFzazsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFkZCBhIFRleHR1cmVBc3NldFRhc2sgdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIHRhc2tz
CisgICAgICogQHBhcmFtIHRhc2tOYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG5ldyB0YXNr
CisgICAgICogQHBhcmFtIHVybCBkZWZpbmVzIHRoZSB1cmwgb2YgdGhlIGZpbGUgdG8gbG9hZAor
ICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlmIHRoZSB0ZXh0dXJlIG11c3Qgbm90IHJl
Y2VpdmUgbWlwbWFwcyAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBk
ZWZpbmVzIGlmIHlvdSB3YW50IHRvIGludmVydCBZIGF4aXMgb2YgdGhlIGxvYWRlZCB0ZXh0dXJl
IChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgZGVmaW5lcyB0
aGUgc2FtcGxpbmcgbW9kZSB0byB1c2UgKFRleHR1cmUuVFJJTElORUFSX1NBTVBMSU5HTU9ERSBi
eSBkZWZhdWx0KQorICAgICAqIEByZXR1cm5zIGEgbmV3IFRleHR1cmVBc3NldFRhc2sgb2JqZWN0
CisgICAgICovCisgICAgQXNzZXRzTWFuYWdlci5wcm90b3R5cGUuYWRkVGV4dHVyZVRhc2sgPSBm
dW5jdGlvbiAodGFza05hbWUsIHVybCwgbm9NaXBtYXAsIGludmVydFksIHNhbXBsaW5nTW9kZSkg
eworICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0g
X01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIHZhciB0YXNrID0g
bmV3IFRleHR1cmVBc3NldFRhc2sodGFza05hbWUsIHVybCwgbm9NaXBtYXAsIGludmVydFksIHNh
bXBsaW5nTW9kZSk7CisgICAgICAgIHRoaXMuX3Rhc2tzLnB1c2godGFzayk7CisgICAgICAgIHJl
dHVybiB0YXNrOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGEgQ3ViZVRleHR1cmVBc3Nl
dFRhc2sgdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIHRhc2tzCisgICAgICogQHBhcmFtIHRhc2tOYW1l
IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG5ldyB0YXNrCisgICAgICogQHBhcmFtIHVybCBkZWZp
bmVzIHRoZSB1cmwgb2YgdGhlIGZpbGUgdG8gbG9hZAorICAgICAqIEBwYXJhbSBleHRlbnNpb25z
IGRlZmluZXMgdGhlIGV4dGVuc2lvbiB0byB1c2UgdG8gbG9hZCB0aGUgY3ViZSBtYXAgKGNhbiBi
ZSBudWxsKQorICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlmIHRoZSB0ZXh0dXJlIG11
c3Qgbm90IHJlY2VpdmUgbWlwbWFwcyAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0g
ZmlsZXMgZGVmaW5lcyB0aGUgbGlzdCBvZiBmaWxlcyB0byBsb2FkIChjYW4gYmUgbnVsbCkKKyAg
ICAgKiBAcmV0dXJucyBhIG5ldyBDdWJlVGV4dHVyZUFzc2V0VGFzayBvYmplY3QKKyAgICAgKi8K
KyAgICBBc3NldHNNYW5hZ2VyLnByb3RvdHlwZS5hZGRDdWJlVGV4dHVyZVRhc2sgPSBmdW5jdGlv
biAodGFza05hbWUsIHVybCwgZXh0ZW5zaW9ucywgbm9NaXBtYXAsIGZpbGVzKSB7CisgICAgICAg
IHZhciB0YXNrID0gbmV3IEN1YmVUZXh0dXJlQXNzZXRUYXNrKHRhc2tOYW1lLCB1cmwsIGV4dGVu
c2lvbnMsIG5vTWlwbWFwLCBmaWxlcyk7CisgICAgICAgIHRoaXMuX3Rhc2tzLnB1c2godGFzayk7
CisgICAgICAgIHJldHVybiB0YXNrOworICAgIH07CisgICAgLyoqCisgICAgICoKKyAgICAgKiBB
ZGQgYSBIRFJDdWJlVGV4dHVyZUFzc2V0VGFzayB0byB0aGUgbGlzdCBvZiBhY3RpdmUgdGFza3MK
KyAgICAgKiBAcGFyYW0gdGFza05hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3IHRhc2sK
KyAgICAgKiBAcGFyYW0gdXJsIGRlZmluZXMgdGhlIHVybCBvZiB0aGUgZmlsZSB0byBsb2FkCisg
ICAgICogQHBhcmFtIHNpemUgZGVmaW5lcyB0aGUgc2l6ZSB5b3Ugd2FudCBmb3IgdGhlIGN1YmVt
YXAgKGNhbiBiZSBudWxsKQorICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlmIHRoZSB0
ZXh0dXJlIG11c3Qgbm90IHJlY2VpdmUgbWlwbWFwcyAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAg
KiBAcGFyYW0gZ2VuZXJhdGVIYXJtb25pY3MgZGVmaW5lcyBpZiB5b3Ugd2FudCB0byBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlICh0cnVlIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGdhbW1hU3Bh
Y2Ugc3BlY2lmaWVzIGlmIHRoZSB0ZXh0dXJlIHdpbGwgYmUgdXNlIGluIGdhbW1hIG9yIGxpbmVh
ciBzcGFjZSAodGhlIFBCUiBtYXRlcmlhbCByZXF1aXJlcyB0aG9zZSB0ZXh0dXJlIGluIGxpbmVh
ciBzcGFjZSwgYnV0IHRoZSBzdGFuZGFyZCBtYXRlcmlhbCB3b3VsZCByZXF1aXJlIHRoZW0gaW4g
R2FtbWEgc3BhY2UpIChkZWZhdWx0IGlzIGZhbHNlKQorICAgICAqIEBwYXJhbSByZXNlcnZlZCBJ
bnRlcm5hbCB1c2Ugb25seQorICAgICAqIEByZXR1cm5zIGEgbmV3IEhEUkN1YmVUZXh0dXJlQXNz
ZXRUYXNrIG9iamVjdAorICAgICAqLworICAgIEFzc2V0c01hbmFnZXIucHJvdG90eXBlLmFkZEhE
UkN1YmVUZXh0dXJlVGFzayA9IGZ1bmN0aW9uICh0YXNrTmFtZSwgdXJsLCBzaXplLCBub01pcG1h
cCwgZ2VuZXJhdGVIYXJtb25pY3MsIGdhbW1hU3BhY2UsIHJlc2VydmVkKSB7CisgICAgICAgIGlm
IChub01pcG1hcCA9PT0gdm9pZCAwKSB7IG5vTWlwbWFwID0gZmFsc2U7IH0KKyAgICAgICAgaWYg
KGdlbmVyYXRlSGFybW9uaWNzID09PSB2b2lkIDApIHsgZ2VuZXJhdGVIYXJtb25pY3MgPSB0cnVl
OyB9CisgICAgICAgIGlmIChnYW1tYVNwYWNlID09PSB2b2lkIDApIHsgZ2FtbWFTcGFjZSA9IGZh
bHNlOyB9CisgICAgICAgIGlmIChyZXNlcnZlZCA9PT0gdm9pZCAwKSB7IHJlc2VydmVkID0gZmFs
c2U7IH0KKyAgICAgICAgdmFyIHRhc2sgPSBuZXcgSERSQ3ViZVRleHR1cmVBc3NldFRhc2sodGFz
a05hbWUsIHVybCwgc2l6ZSwgbm9NaXBtYXAsIGdlbmVyYXRlSGFybW9uaWNzLCBnYW1tYVNwYWNl
LCByZXNlcnZlZCk7CisgICAgICAgIHRoaXMuX3Rhc2tzLnB1c2godGFzayk7CisgICAgICAgIHJl
dHVybiB0YXNrOworICAgIH07CisgICAgLyoqCisgICAgICoKKyAgICAgKiBBZGQgYSBFcXVpUmVj
dGFuZ3VsYXJDdWJlVGV4dHVyZUFzc2V0VGFzayB0byB0aGUgbGlzdCBvZiBhY3RpdmUgdGFza3MK
KyAgICAgKiBAcGFyYW0gdGFza05hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3IHRhc2sK
KyAgICAgKiBAcGFyYW0gdXJsIGRlZmluZXMgdGhlIHVybCBvZiB0aGUgZmlsZSB0byBsb2FkCisg
ICAgICogQHBhcmFtIHNpemUgZGVmaW5lcyB0aGUgc2l6ZSB5b3Ugd2FudCBmb3IgdGhlIGN1YmVt
YXAgKGNhbiBiZSBudWxsKQorICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlmIHRoZSB0
ZXh0dXJlIG11c3Qgbm90IHJlY2VpdmUgbWlwbWFwcyAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAg
KiBAcGFyYW0gZ2FtbWFTcGFjZSBTcGVjaWZpZXMgaWYgdGhlIHRleHR1cmUgd2lsbCBiZSB1c2Vk
IGluIGdhbW1hIG9yIGxpbmVhciBzcGFjZQorICAgICAqICh0aGUgUEJSIG1hdGVyaWFsIHJlcXVp
cmVzIHRob3NlIHRleHR1cmVzIGluIGxpbmVhciBzcGFjZSwgYnV0IHRoZSBzdGFuZGFyZCBtYXRl
cmlhbCB3b3VsZCByZXF1aXJlIHRoZW0gaW4gR2FtbWEgc3BhY2UpCisgICAgICogQHJldHVybnMg
YSBuZXcgRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmVBc3NldFRhc2sgb2JqZWN0CisgICAgICov
CisgICAgQXNzZXRzTWFuYWdlci5wcm90b3R5cGUuYWRkRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1
cmVBc3NldFRhc2sgPSBmdW5jdGlvbiAodGFza05hbWUsIHVybCwgc2l6ZSwgbm9NaXBtYXAsIGdh
bW1hU3BhY2UpIHsKKyAgICAgICAgaWYgKG5vTWlwbWFwID09PSB2b2lkIDApIHsgbm9NaXBtYXAg
PSBmYWxzZTsgfQorICAgICAgICBpZiAoZ2FtbWFTcGFjZSA9PT0gdm9pZCAwKSB7IGdhbW1hU3Bh
Y2UgPSB0cnVlOyB9CisgICAgICAgIHZhciB0YXNrID0gbmV3IEVxdWlSZWN0YW5ndWxhckN1YmVU
ZXh0dXJlQXNzZXRUYXNrKHRhc2tOYW1lLCB1cmwsIHNpemUsIG5vTWlwbWFwLCBnYW1tYVNwYWNl
KTsKKyAgICAgICAgdGhpcy5fdGFza3MucHVzaCh0YXNrKTsKKyAgICAgICAgcmV0dXJuIHRhc2s7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSB0YXNrIGZyb20gdGhlIGFzc2V0cyBt
YW5hZ2VyLgorICAgICAqIEBwYXJhbSB0YXNrIHRoZSB0YXNrIHRvIHJlbW92ZQorICAgICAqLwor
ICAgIEFzc2V0c01hbmFnZXIucHJvdG90eXBlLnJlbW92ZVRhc2sgPSBmdW5jdGlvbiAodGFzaykg
eworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl90YXNrcy5pbmRleE9mKHRhc2spOworICAgICAg
ICBpZiAoaW5kZXggPiAtMSkgeworICAgICAgICAgICAgdGhpcy5fdGFza3Muc3BsaWNlKGluZGV4
LCAxKTsKKyAgICAgICAgfQorICAgIH07CisgICAgQXNzZXRzTWFuYWdlci5wcm90b3R5cGUuX2Rl
Y3JlYXNlV2FpdGluZ1Rhc2tzQ291bnQgPSBmdW5jdGlvbiAodGFzaykgeworICAgICAgICB0aGlz
Ll93YWl0aW5nVGFza3NDb3VudC0tOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHRo
aXMub25Qcm9ncmVzcykgeworICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh0aGlzLl93
YWl0aW5nVGFza3NDb3VudCwgdGhpcy5fdG90YWxUYXNrc0NvdW50LCB0YXNrKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzc09ic2VydmFibGUubm90aWZ5T2JzZXJ2
ZXJzKG5ldyBBc3NldHNQcm9ncmVzc0V2ZW50KHRoaXMuX3dhaXRpbmdUYXNrc0NvdW50LCB0aGlz
Ll90b3RhbFRhc2tzQ291bnQsIHRhc2spKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoZSkg
eworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IkxvZ2dlciJdLkVycm9yKCJFcnJvciBydW5uaW5nIHByb2dyZXNzIGNhbGxiYWNrcy4iKTsKKyAg
ICAgICAgICAgIGNvbnNvbGUubG9nKGUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl93
YWl0aW5nVGFza3NDb3VudCA9PT0gMCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICBpZiAodGhpcy5vbkZpbmlzaCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRmlu
aXNoKHRoaXMuX3Rhc2tzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
TGV0J3MgcmVtb3ZlIHN1Y2Nlc3NmdWxsIHRhc2tzCisgICAgICAgICAgICAgICAgdmFyIGN1cnJl
bnRUYXNrcyA9IHRoaXMuX3Rhc2tzLnNsaWNlKCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
X2kgPSAwLCBjdXJyZW50VGFza3NfMSA9IGN1cnJlbnRUYXNrczsgX2kgPCBjdXJyZW50VGFza3Nf
MS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBjdXJyZW50
VGFza3NfMVtfaV07CisgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLnRhc2tTdGF0ZSA9PT0g
QXNzZXRUYXNrU3RhdGUuRE9ORSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4
ID0gdGhpcy5fdGFza3MuaW5kZXhPZih0YXNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpbmRleCA+IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza3Mu
c3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLm9uVGFz
a3NEb25lT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcy5fdGFza3MpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTG9nZ2VyIl0uRXJyb3IoIkVycm9yIHJ1
bm5pbmcgdGFza3MtZG9uZSBjYWxsYmFja3MuIik7CisgICAgICAgICAgICAgICAgY29uc29sZS5s
b2coZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLmF1dG9IaWRlTG9hZGluZ1VJKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuaGlkZUxvYWRpbmdVSSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBBc3NldHNNYW5hZ2VyLnByb3RvdHlwZS5fcnVu
VGFzayA9IGZ1bmN0aW9uICh0YXNrKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIHZhciBkb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgICAgICBpZiAoX3RoaXMub25UYXNrU3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBf
dGhpcy5vblRhc2tTdWNjZXNzKHRhc2spOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBfdGhpcy5vblRhc2tTdWNjZXNzT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGFzayk7
CisgICAgICAgICAgICAgICAgX3RoaXMuX2RlY3JlYXNlV2FpdGluZ1Rhc2tzQ291bnQodGFzayk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAg
IGVycm9yKCJFcnJvciBleGVjdXRpbmcgdGFzayBzdWNjZXNzIGNhbGxiYWNrcyIsIGUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB2YXIgZXJyb3IgPSBmdW5jdGlvbiAobWVz
c2FnZSwgZXhjZXB0aW9uKSB7CisgICAgICAgICAgICB0YXNrLl9zZXRFcnJvck9iamVjdChtZXNz
YWdlLCBleGNlcHRpb24pOworICAgICAgICAgICAgaWYgKF90aGlzLm9uVGFza0Vycm9yKSB7Cisg
ICAgICAgICAgICAgICAgX3RoaXMub25UYXNrRXJyb3IodGFzayk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBfdGhpcy5vblRhc2tFcnJvck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRh
c2spOworICAgICAgICAgICAgX3RoaXMuX2RlY3JlYXNlV2FpdGluZ1Rhc2tzQ291bnQodGFzayk7
CisgICAgICAgIH07CisgICAgICAgIHRhc2sucnVuKHRoaXMuX3NjZW5lLCBkb25lLCBlcnJvcik7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXNldCB0aGUgQXNzZXRzTWFuYWdlciBhbmQgcmVt
b3ZlIGFsbCB0YXNrcworICAgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhl
IEFzc2V0c01hbmFnZXIKKyAgICAgKi8KKyAgICBBc3NldHNNYW5hZ2VyLnByb3RvdHlwZS5yZXNl
dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX3Rhc2tzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogU3RhcnQgdGhlIGxvYWRpbmcgcHJvY2VzcworICAgICAqIEBy
ZXR1cm4gdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIEFzc2V0c01hbmFnZXIKKyAgICAgKi8K
KyAgICBBc3NldHNNYW5hZ2VyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAodGhpcy5faXNMb2FkaW5nKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSB0cnVlOworICAgICAgICB0aGlzLl93YWl0
aW5nVGFza3NDb3VudCA9IHRoaXMuX3Rhc2tzLmxlbmd0aDsKKyAgICAgICAgdGhpcy5fdG90YWxU
YXNrc0NvdW50ID0gdGhpcy5fdGFza3MubGVuZ3RoOworICAgICAgICBpZiAodGhpcy5fd2FpdGlu
Z1Rhc2tzQ291bnQgPT09IDApIHsKKyAgICAgICAgICAgIHRoaXMuX2lzTG9hZGluZyA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKHRoaXMub25GaW5pc2gpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Lm9uRmluaXNoKHRoaXMuX3Rhc2tzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
b25UYXNrc0RvbmVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzLl90YXNrcyk7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy51c2VEZWZh
dWx0TG9hZGluZ1NjcmVlbikgeworICAgICAgICAgICAgdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCku
ZGlzcGxheUxvYWRpbmdVSSgpOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGluZGV4ID0g
MDsgaW5kZXggPCB0aGlzLl90YXNrcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZh
ciB0YXNrID0gdGhpcy5fdGFza3NbaW5kZXhdOworICAgICAgICAgICAgaWYgKHRhc2sudGFza1N0
YXRlID09PSBBc3NldFRhc2tTdGF0ZS5JTklUKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcnVu
VGFzayh0YXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIC8qKgorICAgICAqIFN0YXJ0IHRoZSBsb2FkaW5nIHByb2Nlc3MgYXMg
YW4gYXN5bmMgb3BlcmF0aW9uCisgICAgICogQHJldHVybiBhIHByb21pc2UgcmV0dXJuaW5nIHRo
ZSBsaXN0IG9mIGZhaWxlZCB0YXNrcworICAgICAqLworICAgIEFzc2V0c01hbmFnZXIucHJvdG90
eXBlLmxvYWRBc3luYyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsK
KyAgICAgICAgICAgIGlmIChfdGhpcy5faXNMb2FkaW5nKSB7CisgICAgICAgICAgICAgICAgcmVz
b2x2ZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIF90aGlzLm9uVGFza3NEb25lT2JzZXJ2YWJsZS5hZGRPbmNlKGZ1bmN0aW9uIChyZW1haW5p
bmdUYXNrcykgeworICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmdUYXNrcyAmJiByZW1haW5p
bmdUYXNrcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlbWFpbmluZ1Rh
c2tzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIF90aGlzLmxvYWQoKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBy
ZXR1cm4gQXNzZXRzTWFuYWdlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWlzYy9iYXNpcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWlzYy9iYXNpcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBCYXNpc1RyYW5zY29kZUNvbmZpZ3VyYXRpb24sIEJhc2lzVG9vbHMgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzaXNUcmFuc2NvZGVDb25maWd1
cmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCYXNpc1RyYW5zY29kZUNvbmZpZ3VyYXRpb247
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzaXNUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
QmFzaXNUb29sczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Rvb2xzICov
ICIuL01pc2MvdG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVy
aWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9pbnRl
cm5hbFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdp
bmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguc2NhbGFyICovICIuL01hdGhzL21hdGguc2Nh
bGFyLnRzIik7CisKKworCisKKworLyoqCisgKiBJbmZvIGFib3V0IHRoZSAuYmFzaXMgZmlsZXMK
KyAqLwordmFyIEJhc2lzRmlsZUluZm8gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgZnVuY3Rpb24gQmFzaXNGaWxlSW5mbygpIHsKKyAgICB9CisgICAgcmV0dXJuIEJhc2lzRmls
ZUluZm87Cit9KCkpOworLyoqCisgKiBSZXN1bHQgb2YgdHJhbnNjb2RpbmcgYSBiYXNpcyBmaWxl
CisgKi8KK3ZhciBUcmFuc2NvZGVSZXN1bHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgZnVuY3Rpb24gVHJhbnNjb2RlUmVzdWx0KCkgeworICAgIH0KKyAgICByZXR1cm4gVHJh
bnNjb2RlUmVzdWx0OworfSgpKTsKKy8qKgorICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0
aGUgQmFzaXMgdHJhbnNjb2RlcgorICovCit2YXIgQmFzaXNUcmFuc2NvZGVDb25maWd1cmF0aW9u
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEJhc2lzVHJhbnNj
b2RlQ29uZmlndXJhdGlvbigpIHsKKyAgICB9CisgICAgcmV0dXJuIEJhc2lzVHJhbnNjb2RlQ29u
ZmlndXJhdGlvbjsKK30oKSk7CisKKy8qKgorICogQGhpZGRlbgorICogRW51bSBvZiBiYXNpcyB0
cmFuc2NvZGVyIGZvcm1hdHMKKyAqLwordmFyIEJBU0lTX0ZPUk1BVFM7CisoZnVuY3Rpb24gKEJB
U0lTX0ZPUk1BVFMpIHsKKyAgICBCQVNJU19GT1JNQVRTW0JBU0lTX0ZPUk1BVFNbImNURkVUQzEi
XSA9IDBdID0gImNURkVUQzEiOworICAgIEJBU0lTX0ZPUk1BVFNbQkFTSVNfRk9STUFUU1siY1RG
QkMxIl0gPSAxXSA9ICJjVEZCQzEiOworICAgIEJBU0lTX0ZPUk1BVFNbQkFTSVNfRk9STUFUU1si
Y1RGQkM0Il0gPSAyXSA9ICJjVEZCQzQiOworICAgIEJBU0lTX0ZPUk1BVFNbQkFTSVNfRk9STUFU
U1siY1RGUFZSVEMxXzRfT1BBUVVFX09OTFkiXSA9IDNdID0gImNURlBWUlRDMV80X09QQVFVRV9P
TkxZIjsKKyAgICBCQVNJU19GT1JNQVRTW0JBU0lTX0ZPUk1BVFNbImNURkJDN19NNl9PUEFRVUVf
T05MWSJdID0gNF0gPSAiY1RGQkM3X002X09QQVFVRV9PTkxZIjsKKyAgICBCQVNJU19GT1JNQVRT
W0JBU0lTX0ZPUk1BVFNbImNURkVUQzIiXSA9IDVdID0gImNURkVUQzIiOworICAgIEJBU0lTX0ZP
Uk1BVFNbQkFTSVNfRk9STUFUU1siY1RGQkMzIl0gPSA2XSA9ICJjVEZCQzMiOworICAgIEJBU0lT
X0ZPUk1BVFNbQkFTSVNfRk9STUFUU1siY1RGQkM1Il0gPSA3XSA9ICJjVEZCQzUiOworfSkoQkFT
SVNfRk9STUFUUyB8fCAoQkFTSVNfRk9STUFUUyA9IHt9KSk7CisvKioKKyAqIFVzZWQgdG8gbG9h
ZCAuQmFzaXMgZmlsZXMKKyAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vQmlub21pYWxMTEMvYmFz
aXNfdW5pdmVyc2FsL3RyZWUvbWFzdGVyL3dlYmdsCisgKi8KK3ZhciBCYXNpc1Rvb2xzID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEJhc2lzVG9vbHMoKSB7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIEdldCB0aGUgaW50ZXJuYWwgZm9ybWF0IHRvIGJlIHBhc3Nl
ZCB0byB0ZXhJbWFnZTJEIGNvcnJlc3BvbmRpbmcgdG8gdGhlIC5iYXNpcyBmb3JtYXQgdmFsdWUK
KyAgICAgKiBAcGFyYW0gYmFzaXNGb3JtYXQgZm9ybWF0IGNob3NlbiBmcm9tIEdldFN1cHBvcnRl
ZFRyYW5zY29kZUZvcm1hdAorICAgICAqIEByZXR1cm5zIGludGVybmFsIGZvcm1hdCBjb3JyZXNw
b25kaW5nIHRvIHRoZSBCYXNpcyBmb3JtYXQKKyAgICAgKi8KKyAgICBCYXNpc1Rvb2xzLkdldElu
dGVybmFsRm9ybWF0RnJvbUJhc2lzRm9ybWF0ID0gZnVuY3Rpb24gKGJhc2lzRm9ybWF0KSB7Cisg
ICAgICAgIC8vIENvcnJpc3BvbmRpbmcgaW50ZXJuYWwgZm9ybWF0cworICAgICAgICB2YXIgQ09N
UFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCA9IDB4ODNGMDsKKyAgICAgICAgdmFyIENPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDVfRVhUID0gMHg4M0YzOworICAgICAgICB2YXIgUkdCX0VUQzFfRm9y
bWF0ID0gMzYxOTY7CisgICAgICAgIGlmIChiYXNpc0Zvcm1hdCA9PT0gQkFTSVNfRk9STUFUUy5j
VEZFVEMxKSB7CisgICAgICAgICAgICByZXR1cm4gUkdCX0VUQzFfRm9ybWF0OworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGJhc2lzRm9ybWF0ID09PSBCQVNJU19GT1JNQVRTLmNURkJDMSkg
eworICAgICAgICAgICAgcmV0dXJuIENPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYmFzaXNGb3JtYXQgPT09IEJBU0lTX0ZPUk1BVFMuY1RG
QkMzKSB7CisgICAgICAgICAgICByZXR1cm4gQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aHJvdyAiVGhlIGNob3Nl
biBCYXNpcyB0cmFuc2NvZGVyIGZvcm1hdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCI7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIEJhc2lzVG9vbHMuX0NyZWF0ZVdvcmtlckFzeW5jID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoIXRoaXMu
X1dvcmtlclByb21pc2UpIHsKKyAgICAgICAgICAgIHRoaXMuX1dvcmtlclByb21pc2UgPSBuZXcg
UHJvbWlzZShmdW5jdGlvbiAocmVzKSB7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9Xb3Jr
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzKF90aGlzLl9Xb3JrZXIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgX3Rv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRvb2xzIl0uTG9hZEZpbGVBc3luYyhC
YXNpc1Rvb2xzLldhc21Nb2R1bGVVUkwpLnRoZW4oZnVuY3Rpb24gKHdhc21CaW5hcnkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB3b3JrZXJCbG9iVXJsID0gVVJMLmNyZWF0ZU9iamVj
dFVSTChuZXcgQmxvYihbIigiICsgd29ya2VyRnVuYyArICIpKCkiXSwgeyB0eXBlOiAiYXBwbGlj
YXRpb24vamF2YXNjcmlwdCIgfSkpOworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX1dv
cmtlciA9IG5ldyBXb3JrZXIod29ya2VyQmxvYlVybCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgaW5pdEhhbmRsZXIgPSBmdW5jdGlvbiAobXNnKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1zZy5kYXRhLmFjdGlvbiA9PT0gImluaXQiKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl9Xb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVz
c2FnZSIsIGluaXRIYW5kbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
KF90aGlzLl9Xb3JrZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fV29ya2Vy
LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBpbml0SGFuZGxlcik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5fV29ya2VyLnBvc3RNZXNzYWdlKHsgYWN0aW9uOiAiaW5pdCIsIHVy
bDogQmFzaXNUb29scy5KU01vZHVsZVVSTCwgd2FzbUJpbmFyeTogd2FzbUJpbmFyeSB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX1dvcmtlclByb21pc2U7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBUcmFuc2NvZGVzIGEgbG9hZGVkIGltYWdlIGZpbGUgdG8gY29tcHJl
c3NlZCBwaXhlbCBkYXRhCisgICAgICogQHBhcmFtIGltYWdlRGF0YSBpbWFnZSBkYXRhIHRvIHRy
YW5zY29kZQorICAgICAqIEBwYXJhbSBjb25maWcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0
aGUgdHJhbnNjb2RpbmcKKyAgICAgKiBAcmV0dXJucyBhIHByb21pc2UgcmVzdWx0aW5nIGluIHRo
ZSB0cmFuc2NvZGVkIGltYWdlCisgICAgICovCisgICAgQmFzaXNUb29scy5UcmFuc2NvZGVBc3lu
YyA9IGZ1bmN0aW9uIChpbWFnZURhdGEsIGNvbmZpZykgeworICAgICAgICB2YXIgX3RoaXMgPSB0
aGlzOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7Cisg
ICAgICAgICAgICBfdGhpcy5fQ3JlYXRlV29ya2VyQXN5bmMoKS50aGVuKGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgICAgICB2YXIgYWN0aW9uSWQgPSBfdGhpcy5fYWN0aW9uSWQrKzsKKyAgICAg
ICAgICAgICAgICB2YXIgbWVzc2FnZUhhbmRsZXIgPSBmdW5jdGlvbiAobXNnKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtc2cuZGF0YS5hY3Rpb24gPT09ICJ0cmFuc2NvZGUiICYmIG1zZy5k
YXRhLmlkID09PSBhY3Rpb25JZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX1dv
cmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgbWVzc2FnZUhhbmRsZXIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFtc2cuZGF0YS5zdWNjZXNzKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVqKCJUcmFuc2NvZGUgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlz
IGRldmljZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzKG1zZy5kYXRhKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgX3RoaXMuX1dvcmtlci5hZGRFdmVudExpc3Rl
bmVyKCJtZXNzYWdlIiwgbWVzc2FnZUhhbmRsZXIpOworICAgICAgICAgICAgICAgIF90aGlzLl9X
b3JrZXIucG9zdE1lc3NhZ2UoeyBhY3Rpb246ICJ0cmFuc2NvZGUiLCBpZDogYWN0aW9uSWQsIGlt
YWdlRGF0YTogaW1hZ2VEYXRhLCBjb25maWc6IGNvbmZpZywgaWdub3JlU3VwcG9ydGVkRm9ybWF0
czogX3RoaXMuX0lnbm9yZVN1cHBvcnRlZEZvcm1hdHMgfSwgW2ltYWdlRGF0YV0pOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogTG9hZHMgYSB0
ZXh0dXJlIGZyb20gdGhlIHRyYW5zY29kZSByZXN1bHQKKyAgICAgKiBAcGFyYW0gdGV4dHVyZSB0
ZXh0dXJlIGxvYWQgdG8KKyAgICAgKiBAcGFyYW0gdHJhbnNjb2RlUmVzdWx0IHRoZSByZXN1bHQg
b2YgdHJhbnNjb2RpbmcgdGhlIGJhc2lzIGZpbGUgdG8gbG9hZCBmcm9tCisgICAgICovCisgICAg
QmFzaXNUb29scy5Mb2FkVGV4dHVyZUZyb21UcmFuc2NvZGVSZXN1bHQgPSBmdW5jdGlvbiAodGV4
dHVyZSwgdHJhbnNjb2RlUmVzdWx0KSB7CisgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcm9vdEltYWdlID0gdHJhbnNjb2RlUmVzdWx0LmZpbGVJbmZvLmlt
YWdlc1tpXS5sZXZlbHNbMF07CisgICAgICAgICAgICB0ZXh0dXJlLl9pbnZlcnRWU2NhbGUgPSB0
ZXh0dXJlLmludmVydFk7CisgICAgICAgICAgICBpZiAodHJhbnNjb2RlUmVzdWx0LmZvcm1hdCA9
PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvLyBObyBjb21wYXRhYmxlIGNvbXByZXNzZWQgZm9y
bWF0IGZvdW5kLCBmYWxsYmFjayB0byBSR0IKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLnR5cGUg
PSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfU0hPUlRfNV82XzU7CisgICAgICAgICAgICAgICAgdGV4dHVy
ZS5mb3JtYXQgPSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
RW5naW5lIl0uVEVYVFVSRUZPUk1BVF9SR0I7CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUu
Z2V0RW5naW5lKCkud2ViR0xWZXJzaW9uIDwgMiAmJiAoX01hdGhzX21hdGhfc2NhbGFyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjYWxhciJdLkxvZzIocm9vdEltYWdlLndpZHRoKSAl
IDEgIT09IDAgfHwgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIlNjYWxhciJdLkxvZzIocm9vdEltYWdlLmhlaWdodCkgJSAxICE9PSAwKSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBDcmVhdGUgbm9uIHBvd2VyIG9mIHR3byB0ZXh0dXJlCisgICAgICAg
ICAgICAgICAgICAgIHZhciBzb3VyY2VfMSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVy
bmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5hbFRleHR1cmUi
XSh0ZXh0dXJlLmdldEVuZ2luZSgpLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09V
UkNFX1RFTVApOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLl9pbnZlcnRWU2NhbGUgPSB0
ZXh0dXJlLmludmVydFk7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZV8xLnR5cGUgPSBfRW5n
aW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uVEVYVFVS
RVRZUEVfVU5TSUdORURfU0hPUlRfNV82XzU7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZV8x
LmZvcm1hdCA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJF
bmdpbmUiXS5URVhUVVJFRk9STUFUX1JHQjsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmFsbGJh
Y2sgcmVxdWlyZXMgYWxpZ25lZCB3aWR0aC9oZWlnaHQKKyAgICAgICAgICAgICAgICAgICAgc291
cmNlXzEud2lkdGggPSAocm9vdEltYWdlLndpZHRoICsgMykgJiB+MzsKKyAgICAgICAgICAgICAg
ICAgICAgc291cmNlXzEuaGVpZ2h0ID0gKHJvb3RJbWFnZS5oZWlnaHQgKyAzKSAmIH4zOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLmdldEVuZ2luZSgpLl9iaW5kVGV4dHVyZURpcmVjdGx5
KHNvdXJjZV8xLmdldEVuZ2luZSgpLl9nbC5URVhUVVJFXzJELCBzb3VyY2VfMSwgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZ2V0RW5naW5lKCkuX3VwbG9hZERhdGFUb1RleHR1
cmVEaXJlY3RseShzb3VyY2VfMSwgcm9vdEltYWdlLnRyYW5zY29kZWRQaXhlbHMsIGksIDAsIF9F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5URVhU
VVJFRk9STUFUX1JHQiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlc2l6ZSB0byBw
b3dlciBvZiB0d28KKyAgICAgICAgICAgICAgICAgICAgc291cmNlXzEuZ2V0RW5naW5lKCkuX3Jl
c2NhbGVUZXh0dXJlKHNvdXJjZV8xLCB0ZXh0dXJlLCB0ZXh0dXJlLmdldEVuZ2luZSgpLnNjZW5l
c1swXSwgc291cmNlXzEuZ2V0RW5naW5lKCkuX2dldEludGVybmFsRm9ybWF0KF9FbmdpbmVzX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5URVhUVVJFRk9STUFU
X1JHQiksIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV8xLmdl
dEVuZ2luZSgpLl9yZWxlYXNlVGV4dHVyZShzb3VyY2VfMSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzb3VyY2VfMS5nZXRFbmdpbmUoKS5fYmluZFRleHR1cmVEaXJlY3RseShzb3VyY2VfMS5n
ZXRFbmdpbmUoKS5fZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSwgdHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgaXMgYWxyZWFkeSBpbnZlcnRlZAorICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlLl9pbnZlcnRWU2NhbGUgPSAhdGV4dHVyZS5pbnZlcnRZOwor
ICAgICAgICAgICAgICAgICAgICAvLyBVcGxvYWQgZGlyZWN0bHkKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS53aWR0aCA9IChyb290SW1hZ2Uud2lkdGggKyAzKSAmIH4zOworICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLmhlaWdodCA9IChyb290SW1hZ2UuaGVpZ2h0ICsgMykgJiB+MzsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5nZXRFbmdpbmUoKS5fdXBsb2FkRGF0YVRvVGV4
dHVyZURpcmVjdGx5KHRleHR1cmUsIHJvb3RJbWFnZS50cmFuc2NvZGVkUGl4ZWxzLCBpLCAwLCBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uVEVY
VFVSRUZPUk1BVF9SR0IsIHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRleHR1cmUud2lkdGggPSByb290
SW1hZ2Uud2lkdGg7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSByb290SW1hZ2Uu
aGVpZ2h0OworICAgICAgICAgICAgICAgIC8vIFVwbG9hZCBhbGwgbWlwIGxldmVscyBpbiB0aGUg
ZmlsZQorICAgICAgICAgICAgICAgIHRyYW5zY29kZVJlc3VsdC5maWxlSW5mby5pbWFnZXNbaV0u
bGV2ZWxzLmZvckVhY2goZnVuY3Rpb24gKGxldmVsLCBpbmRleCkgeworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLmdldEVuZ2luZSgpLl91cGxvYWRDb21wcmVzc2VkRGF0YVRvVGV4dHVyZURp
cmVjdGx5KHRleHR1cmUsIEJhc2lzVG9vbHMuR2V0SW50ZXJuYWxGb3JtYXRGcm9tQmFzaXNGb3Jt
YXQodHJhbnNjb2RlUmVzdWx0LmZvcm1hdCksIGxldmVsLndpZHRoLCBsZXZlbC5oZWlnaHQsIGxl
dmVsLnRyYW5zY29kZWRQaXhlbHMsIGksIGluZGV4KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICBpZiAodGV4dHVyZS5nZXRFbmdpbmUoKS53ZWJHTFZlcnNpb24gPCAyICYm
IChfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NhbGFy
Il0uTG9nMih0ZXh0dXJlLndpZHRoKSAlIDEgIT09IDAgfHwgX01hdGhzX21hdGhfc2NhbGFyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjYWxhciJdLkxvZzIodGV4dHVyZS5oZWlnaHQp
ICUgMSAhPT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlRvb2xzIl0uV2FybigiTG9hZGVkIC5iYXNpcyB0ZXh0dXJlIHdpZHRo
IGFuZCBoZWlnaHQgYXJlIG5vdCBhIHBvd2VyIG9mIHR3by4gVGV4dHVyZSB3cmFwcGluZyB3aWxs
IGJlIHNldCB0byBUZXh0dXJlLkNMQU1QX0FERFJFU1NNT0RFIGFzIG90aGVyIG1vZGVzIGFyZSBu
b3Qgc3VwcG9ydGVkIHdpdGggbm9uIHBvd2VyIG9mIHR3byBkaW1lbnNpb25zIGluIHdlYkdMIDEu
Iik7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuX2NhY2hlZFdyYXBVID0gX01hdGVyaWFs
c19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRleHR1cmUi
XS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5fY2FjaGVk
V3JhcFYgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHJvb3RJbWFnZTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc2NvZGVSZXN1bHQuZmlsZUluZm8uaW1hZ2VzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICBfbG9vcF8xKCk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIEJhc2lzVG9vbHMuX0lnbm9yZVN1cHBvcnRlZEZvcm1hdHMgPSBmYWxzZTsKKyAgICAvKioK
KyAgICAgKiBVUkwgdG8gdXNlIHdoZW4gbG9hZGluZyB0aGUgYmFzaXMgdHJhbnNjb2RlcgorICAg
ICAqLworICAgIEJhc2lzVG9vbHMuSlNNb2R1bGVVUkwgPSAiaHR0cHM6Ly9wcmV2aWV3LmJhYnls
b25qcy5jb20vYmFzaXNUcmFuc2NvZGVyL2Jhc2lzX3RyYW5zY29kZXIuanMiOworICAgIC8qKgor
ICAgICAqIFVSTCB0byB1c2Ugd2hlbiBsb2FkaW5nIHRoZSB3YXNtIG1vZHVsZSBmb3IgdGhlIHRy
YW5zY29kZXIKKyAgICAgKi8KKyAgICBCYXNpc1Rvb2xzLldhc21Nb2R1bGVVUkwgPSAiaHR0cHM6
Ly9wcmV2aWV3LmJhYnlsb25qcy5jb20vYmFzaXNUcmFuc2NvZGVyL2Jhc2lzX3RyYW5zY29kZXIu
d2FzbSI7CisgICAgQmFzaXNUb29scy5fV29ya2VyUHJvbWlzZSA9IG51bGw7CisgICAgQmFzaXNU
b29scy5fV29ya2VyID0gbnVsbDsKKyAgICBCYXNpc1Rvb2xzLl9hY3Rpb25JZCA9IDA7CisgICAg
cmV0dXJuIEJhc2lzVG9vbHM7Cit9KCkpOworCitmdW5jdGlvbiB3b3JrZXJGdW5jKCkgeworICAg
IHZhciBfQkFTSVNfRk9STUFUID0geworICAgICAgICBjVEZFVEMxOiAwLAorICAgICAgICBjVEZC
QzE6IDEsCisgICAgICAgIGNURkJDNDogMiwKKyAgICAgICAgY1RGUFZSVEMxXzRfT1BBUVVFX09O
TFk6IDMsCisgICAgICAgIGNURkJDN19NNl9PUEFRVUVfT05MWTogNCwKKyAgICAgICAgY1RGRVRD
MjogNSwKKyAgICAgICAgY1RGQkMzOiA2LAorICAgICAgICBjVEZCQzU6IDcsCisgICAgfTsKKyAg
ICB2YXIgdHJhbnNjb2Rlck1vZHVsZVByb21pc2UgPSBudWxsOworICAgIG9ubWVzc2FnZSA9IGZ1
bmN0aW9uIChldmVudCkgeworICAgICAgICBpZiAoZXZlbnQuZGF0YS5hY3Rpb24gPT09ICJpbml0
IikgeworICAgICAgICAgICAgLy8gTG9hZCB0aGUgdHJhbnNjb2RlciBpZiBpdCBoYXNuJ3QgYmVl
biB5ZXQKKyAgICAgICAgICAgIGlmICghdHJhbnNjb2Rlck1vZHVsZVByb21pc2UpIHsKKyAgICAg
ICAgICAgICAgICAvLyBPdmVycmlkZSB3YXNtIGJpbmFyeQorICAgICAgICAgICAgICAgIE1vZHVs
ZSA9IHsgd2FzbUJpbmFyeTogKGV2ZW50LmRhdGEud2FzbUJpbmFyeSkgfTsKKyAgICAgICAgICAg
ICAgICBpbXBvcnRTY3JpcHRzKGV2ZW50LmRhdGEudXJsKTsKKyAgICAgICAgICAgICAgICB0cmFu
c2NvZGVyTW9kdWxlUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgTW9kdWxlLm9uUnVudGltZUluaXRpYWxpemVkID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlLmluaXRpYWxpemVCYXNpcygpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzKCk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cmFuc2NvZGVyTW9k
dWxlUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBwb3N0TWVzc2Fn
ZSh7IGFjdGlvbjogImluaXQiIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoZXZlbnQuZGF0YS5hY3Rpb24gPT09ICJ0cmFuc2NvZGUiKSB7CisgICAgICAg
ICAgICAvLyBUcmFuc2NvZGUgdGhlIGJhc2lzIGltYWdlIGFuZCByZXR1cm4gdGhlIHJlc3VsdGlu
ZyBwaXhlbHMKKyAgICAgICAgICAgIHZhciBjb25maWcgPSBldmVudC5kYXRhLmNvbmZpZzsKKyAg
ICAgICAgICAgIHZhciBpbWdEYXRhID0gZXZlbnQuZGF0YS5pbWFnZURhdGE7CisgICAgICAgICAg
ICB2YXIgbG9hZGVkRmlsZSA9IG5ldyBNb2R1bGUuQmFzaXNGaWxlKG5ldyBVaW50OEFycmF5KGlt
Z0RhdGEpKTsKKyAgICAgICAgICAgIHZhciBmaWxlSW5mbyA9IEdldEZpbGVJbmZvKGxvYWRlZEZp
bGUpOworICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGV2ZW50LmRhdGEuaWdub3JlU3VwcG9ydGVk
Rm9ybWF0cyA/IG51bGwgOiBHZXRTdXBwb3J0ZWRUcmFuc2NvZGVGb3JtYXQoZXZlbnQuZGF0YS5j
b25maWcsIGZpbGVJbmZvKTsKKyAgICAgICAgICAgIHZhciBuZWVkc0NvbnZlcnNpb24gPSBmYWxz
ZTsKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBu
ZWVkc0NvbnZlcnNpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZpbGVJbmZv
Lmhhc0FscGhhID8gX0JBU0lTX0ZPUk1BVC5jVEZCQzMgOiBfQkFTSVNfRk9STUFULmNURkJDMTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEJlZ2luIHRyYW5zY29kZQorICAgICAgICAg
ICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgaWYgKCFsb2FkZWRGaWxlLnN0YXJ0
VHJhbnNjb2RpbmcoKSkgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHZhciBidWZmZXJzID0gW107CisgICAgICAgICAgICBmb3Ig
KHZhciBpbWFnZUluZGV4ID0gMDsgaW1hZ2VJbmRleCA8IGZpbGVJbmZvLmltYWdlcy5sZW5ndGg7
IGltYWdlSW5kZXgrKykgeworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dmFyIGltYWdlID0gZmlsZUluZm8uaW1hZ2VzW2ltYWdlSW5kZXhdOworICAgICAgICAgICAgICAg
IGlmIChjb25maWcubG9hZFNpbmdsZUltYWdlID09PSB1bmRlZmluZWQgfHwgY29uZmlnLmxvYWRT
aW5nbGVJbWFnZSA9PT0gaW1hZ2VJbmRleCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbWlw
Q291bnQgPSBpbWFnZS5sZXZlbHMubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBpZiAoY29u
ZmlnLmxvYWRNaXBtYXBMZXZlbHMgPT09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtaXBDb3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgbGV2ZWxJbmRleCA9IDA7IGxldmVsSW5kZXggPCBtaXBDb3VudDsgbGV2ZWxJ
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWxJbmZvID0gaW1hZ2Uu
bGV2ZWxzW2xldmVsSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpeGVscyA9
IFRyYW5zY29kZUxldmVsKGxvYWRlZEZpbGUsIGltYWdlSW5kZXgsIGxldmVsSW5kZXgsIGZvcm1h
dCwgbmVlZHNDb252ZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGl4ZWxz
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxJbmZvLnRyYW5zY29kZWRQaXhlbHMgPSBwaXhl
bHM7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2gobGV2ZWxJbmZvLnRyYW5z
Y29kZWRQaXhlbHMuYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENsb3NlIGZpbGUKKyAgICAgICAg
ICAgIGxvYWRlZEZpbGUuY2xvc2UoKTsKKyAgICAgICAgICAgIGxvYWRlZEZpbGUuZGVsZXRlKCk7
CisgICAgICAgICAgICBpZiAobmVlZHNDb252ZXJzaW9uKSB7CisgICAgICAgICAgICAgICAgZm9y
bWF0ID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7IGFjdGlvbjogInRyYW5zY29kZSIsIHN1Y2Nlc3M6
IHN1Y2Nlc3MsIGlkOiBldmVudC5kYXRhLmlkIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoeyBhY3Rpb246ICJ0cmFuc2Nv
ZGUiLCBzdWNjZXNzOiBzdWNjZXNzLCBpZDogZXZlbnQuZGF0YS5pZCwgZmlsZUluZm86IGZpbGVJ
bmZvLCBmb3JtYXQ6IGZvcm1hdCB9LCBidWZmZXJzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogRGV0ZWN0cyB0aGUgc3VwcG9ydGVkIHRyYW5zY29k
ZSBmb3JtYXQgZm9yIHRoZSBmaWxlCisgICAgICogQHBhcmFtIGNvbmZpZyB0cmFuc2NvZGUgY29u
ZmlnCisgICAgICogQHBhcmFtIGZpbGVJbmZvIGluZm8gYWJvdXQgdGhlIGZpbGUKKyAgICAgKiBA
cmV0dXJucyB0aGUgY2hvc2VkIGZvcm1hdCBvciBudWxsIGlmIG5vbmUgYXJlIHN1cHBvcnRlZAor
ICAgICAqLworICAgIGZ1bmN0aW9uIEdldFN1cHBvcnRlZFRyYW5zY29kZUZvcm1hdChjb25maWcs
IGZpbGVJbmZvKSB7CisgICAgICAgIHZhciBmb3JtYXQgPSBudWxsOworICAgICAgICBpZiAoY29u
ZmlnLnN1cHBvcnRlZENvbXByZXNzaW9uRm9ybWF0cykgeworICAgICAgICAgICAgaWYgKGNvbmZp
Zy5zdXBwb3J0ZWRDb21wcmVzc2lvbkZvcm1hdHMuZXRjMSkgeworICAgICAgICAgICAgICAgIGZv
cm1hdCA9IF9CQVNJU19GT1JNQVQuY1RGRVRDMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKGNvbmZpZy5zdXBwb3J0ZWRDb21wcmVzc2lvbkZvcm1hdHMuczN0YykgeworICAg
ICAgICAgICAgICAgIGZvcm1hdCA9IGZpbGVJbmZvLmhhc0FscGhhID8gX0JBU0lTX0ZPUk1BVC5j
VEZCQzMgOiBfQkFTSVNfRk9STUFULmNURkJDMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKGNvbmZpZy5zdXBwb3J0ZWRDb21wcmVzc2lvbkZvcm1hdHMucHZydGMpIHsKKyAg
ICAgICAgICAgICAgICAvLyBUT0RPIHVuY29tbWVudCB0aGlzIGFmdGVyIHB2cnRjIGJ1ZyBpcyBm
aXhlZCBpcyBiYXNpcyB0cmFuc2NvZGVyCisgICAgICAgICAgICAgICAgLy8gU2VlIGRpc2N1c3Np
b24gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi90aHJlZS5qcy9pc3N1ZXMvMTY1MjQj
aXNzdWVjb21tZW50LTQ5ODkyOTkyNAorICAgICAgICAgICAgICAgIC8vIGZvcm1hdCA9IF9CQVNJ
U19GT1JNQVQuY1RGUFZSVEMxXzRfT1BBUVVFX09OTFk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChjb25maWcuc3VwcG9ydGVkQ29tcHJlc3Npb25Gb3JtYXRzLmV0YzIpIHsK
KyAgICAgICAgICAgICAgICBmb3JtYXQgPSBfQkFTSVNfRk9STUFULmNURkVUQzI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZvcm1hdDsKKyAgICB9CisgICAgLyoq
CisgICAgICogUmV0cmVpdmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBiYXNpcyBmaWxlIGVnLiBk
aW1lbnNpb25zCisgICAgICogQHBhcmFtIGJhc2lzRmlsZSB0aGUgYmFzaXMgZmlsZSB0byBnZXQg
dGhlIGluZm8gZnJvbQorICAgICAqIEByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBiYXNp
cyBmaWxlCisgICAgICovCisgICAgZnVuY3Rpb24gR2V0RmlsZUluZm8oYmFzaXNGaWxlKSB7Cisg
ICAgICAgIHZhciBoYXNBbHBoYSA9IGJhc2lzRmlsZS5nZXRIYXNBbHBoYSgpOworICAgICAgICB2
YXIgaW1hZ2VDb3VudCA9IGJhc2lzRmlsZS5nZXROdW1JbWFnZXMoKTsKKyAgICAgICAgdmFyIGlt
YWdlcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlQ291bnQ7IGkrKykg
eworICAgICAgICAgICAgdmFyIGltYWdlSW5mbyA9IHsKKyAgICAgICAgICAgICAgICBsZXZlbHM6
IFtdCisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIGxldmVsQ291bnQgPSBiYXNpc0Zp
bGUuZ2V0TnVtTGV2ZWxzKGkpOworICAgICAgICAgICAgZm9yICh2YXIgbGV2ZWwgPSAwOyBsZXZl
bCA8IGxldmVsQ291bnQ7IGxldmVsKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbGV2ZWxJbmZv
ID0geworICAgICAgICAgICAgICAgICAgICB3aWR0aDogYmFzaXNGaWxlLmdldEltYWdlV2lkdGgo
aSwgbGV2ZWwpLAorICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGJhc2lzRmlsZS5nZXRJbWFn
ZUhlaWdodChpLCBsZXZlbCkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlt
YWdlSW5mby5sZXZlbHMucHVzaChsZXZlbEluZm8pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaW1hZ2VzLnB1c2goaW1hZ2VJbmZvKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5mbyA9
IHsgaGFzQWxwaGE6IGhhc0FscGhhLCBpbWFnZXM6IGltYWdlcyB9OworICAgICAgICByZXR1cm4g
aW5mbzsKKyAgICB9CisgICAgZnVuY3Rpb24gVHJhbnNjb2RlTGV2ZWwobG9hZGVkRmlsZSwgaW1h
Z2VJbmRleCwgbGV2ZWxJbmRleCwgZm9ybWF0LCBjb252ZXJ0VG9SZ2I1NjUpIHsKKyAgICAgICAg
dmFyIGRzdFNpemUgPSBsb2FkZWRGaWxlLmdldEltYWdlVHJhbnNjb2RlZFNpemVJbkJ5dGVzKGlt
YWdlSW5kZXgsIGxldmVsSW5kZXgsIGZvcm1hdCk7CisgICAgICAgIHZhciBkc3QgPSBuZXcgVWlu
dDhBcnJheShkc3RTaXplKTsKKyAgICAgICAgaWYgKCFsb2FkZWRGaWxlLnRyYW5zY29kZUltYWdl
KGRzdCwgaW1hZ2VJbmRleCwgbGV2ZWxJbmRleCwgZm9ybWF0LCAxLCAwKSkgeworICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgbm8gc3VwcG9ydGVkIGZv
cm1hdCBpcyBmb3VuZCwgbG9hZCBhcyBkeHQgYW5kIGNvbnZlcnQgdG8gcmdiNTY1CisgICAgICAg
IGlmIChjb252ZXJ0VG9SZ2I1NjUpIHsKKyAgICAgICAgICAgIHZhciBhbGlnbmVkV2lkdGggPSAo
bG9hZGVkRmlsZS5nZXRJbWFnZVdpZHRoKGltYWdlSW5kZXgsIGxldmVsSW5kZXgpICsgMykgJiB+
MzsKKyAgICAgICAgICAgIHZhciBhbGlnbmVkSGVpZ2h0ID0gKGxvYWRlZEZpbGUuZ2V0SW1hZ2VI
ZWlnaHQoaW1hZ2VJbmRleCwgbGV2ZWxJbmRleCkgKyAzKSAmIH4zOworICAgICAgICAgICAgZHN0
ID0gQ29udmVydER4dFRvUmdiNTY1KGRzdCwgMCwgYWxpZ25lZFdpZHRoLCBhbGlnbmVkSGVpZ2h0
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZHN0OworICAgIH0KKyAgICAvKioKKyAgICAg
KiBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9CaW5vbWlhbExMQy9iYXNpc191bml2ZXJzYWwvYmxv
Yi9tYXN0ZXIvd2ViZ2wvdGV4dHVyZS9keHQtdG8tcmdiNTY1LmpzCisgICAgICogQW4gdW5vcHRp
bWl6ZWQgdmVyc2lvbiBvZiBkeHRUb1JnYjU2NS4gIEFsc28sIHRoZSBmbG9hdGluZworICAgICAq
IHBvaW50IG1hdGggdXNlZCB0byBjb21wdXRlIHRoZSBjb2xvcnMgYWN0dWFsbHkgcmVzdWx0cyBp
bgorICAgICAqIHNsaWdodGx5IGRpZmZlcmVudCBjb2xvcnMgY29tcGFyZWQgdG8gaGFyZHdhcmUg
RFhUIGRlY29kZXJzLgorICAgICAqIEBwYXJhbSBzcmMgZHh0IHNyYyBwaXhlbHMKKyAgICAgKiBA
cGFyYW0gc3JjQnl0ZU9mZnNldCBvZmZzZXQgZm9yIHRoZSBzdGFydCBvZiBzcmMKKyAgICAgKiBA
cGFyYW0gIHdpZHRoIGFsaWduZWQgd2lkdGggb2YgdGhlIGltYWdlCisgICAgICogQHBhcmFtICBo
ZWlnaHQgYWxpZ25lZCBoZWlnaHQgb2YgdGhlIGltYWdlCisgICAgICogQHJldHVybiB0aGUgY29u
dmVydGVkIHBpeGVscworICAgICAqLworICAgIGZ1bmN0aW9uIENvbnZlcnREeHRUb1JnYjU2NShz
cmMsIHNyY0J5dGVPZmZzZXQsIHdpZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgdmFyIGMgPSBuZXcg
VWludDE2QXJyYXkoNCk7CisgICAgICAgIHZhciBkc3QgPSBuZXcgVWludDE2QXJyYXkod2lkdGgg
KiBoZWlnaHQpOworICAgICAgICB2YXIgYmxvY2tXaWR0aCA9IHdpZHRoIC8gNDsKKyAgICAgICAg
dmFyIGJsb2NrSGVpZ2h0ID0gaGVpZ2h0IC8gNDsKKyAgICAgICAgZm9yICh2YXIgYmxvY2tZID0g
MDsgYmxvY2tZIDwgYmxvY2tIZWlnaHQ7IGJsb2NrWSsrKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBibG9ja1ggPSAwOyBibG9ja1ggPCBibG9ja1dpZHRoOyBibG9ja1grKykgeworICAgICAgICAg
ICAgICAgIHZhciBpID0gc3JjQnl0ZU9mZnNldCArIDggKiAoYmxvY2tZICogYmxvY2tXaWR0aCAr
IGJsb2NrWCk7CisgICAgICAgICAgICAgICAgY1swXSA9IHNyY1tpXSB8IChzcmNbaSArIDFdIDw8
IDgpOworICAgICAgICAgICAgICAgIGNbMV0gPSBzcmNbaSArIDJdIHwgKHNyY1tpICsgM10gPDwg
OCk7CisgICAgICAgICAgICAgICAgY1syXSA9ICgyICogKGNbMF0gJiAweDFmKSArIDEgKiAoY1sx
XSAmIDB4MWYpKSAvIDMKKyAgICAgICAgICAgICAgICAgICAgfCAoKCgyICogKGNbMF0gJiAweDdl
MCkgKyAxICogKGNbMV0gJiAweDdlMCkpIC8gMykgJiAweDdlMCkKKyAgICAgICAgICAgICAgICAg
ICAgfCAoKCgyICogKGNbMF0gJiAweGY4MDApICsgMSAqIChjWzFdICYgMHhmODAwKSkgLyAzKSAm
IDB4ZjgwMCk7CisgICAgICAgICAgICAgICAgY1szXSA9ICgyICogKGNbMV0gJiAweDFmKSArIDEg
KiAoY1swXSAmIDB4MWYpKSAvIDMKKyAgICAgICAgICAgICAgICAgICAgfCAoKCgyICogKGNbMV0g
JiAweDdlMCkgKyAxICogKGNbMF0gJiAweDdlMCkpIC8gMykgJiAweDdlMCkKKyAgICAgICAgICAg
ICAgICAgICAgfCAoKCgyICogKGNbMV0gJiAweGY4MDApICsgMSAqIChjWzBdICYgMHhmODAwKSkg
LyAzKSAmIDB4ZjgwMCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwg
NDsgcm93KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBzcmNbaSArIDQgKyByb3dd
OworICAgICAgICAgICAgICAgICAgICB2YXIgZHN0SSA9IChibG9ja1kgKiA0ICsgcm93KSAqIHdp
ZHRoICsgYmxvY2tYICogNDsKKyAgICAgICAgICAgICAgICAgICAgZHN0W2RzdEkrK10gPSBjW20g
JiAweDNdOworICAgICAgICAgICAgICAgICAgICBkc3RbZHN0SSsrXSA9IGNbKG0gPj4gMikgJiAw
eDNdOworICAgICAgICAgICAgICAgICAgICBkc3RbZHN0SSsrXSA9IGNbKG0gPj4gNCkgJiAweDNd
OworICAgICAgICAgICAgICAgICAgICBkc3RbZHN0SSsrXSA9IGNbKG0gPj4gNikgJiAweDNdOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZHN0OworICAgIH0KK30KKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9icmRmVGV4
dHVyZVRvb2xzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL01pc2MvYnJkZlRleHR1cmVUb29scy50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJSREZUZXh0dXJl
VG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQlJERlRleHR1cmVU
b29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQlJERlRleHR1cmVUb29sczsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMv
VGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yZ2JkVGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3JnYmRUZXh0dXJlVG9v
bHMgKi8gIi4vTWlzYy9yZ2JkVGV4dHVyZVRvb2xzLnRzIik7CisKKworLyoqCisgKiBDbGFzcyB1
c2VkIHRvIGhvc3QgdGV4dHVyZSBzcGVjaWZpYyB1dGlsaXRpZXMKKyAqLwordmFyIEJSREZUZXh0
dXJlVG9vbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gQlJE
RlRleHR1cmVUb29scygpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBhIGRlZmF1bHQg
ZW52aXJvbm1lbnQgQlJERiBmb3IgTVMtQlJERiBIZWlnaHQgQ29ycmVsYXRlZCBCUkRGCisgICAg
ICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJu
cyB0aGUgZW52aXJvbm1lbnQgQlJERiB0ZXh0dXJlCisgICAgICovCisgICAgQlJERlRleHR1cmVU
b29scy5HZXRFbnZpcm9ubWVudEJSREZUZXh0dXJlID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAg
ICAgIGlmICghc2NlbmUuZW52aXJvbm1lbnRCUkRGVGV4dHVyZSkgeworICAgICAgICAgICAgLy8g
Rm9yY2VzIERlbGF5ZWQgVGV4dHVyZSBMb2FkaW5nIHRvIHByZXZlbnQgdW5kZWZpbmVkIGVycm9y
IHdoaWxzdCBzZXR0aW5nIFJHQkQgdmFsdWVzLgorICAgICAgICAgICAgdmFyIHVzZURlbGF5ZWRU
ZXh0dXJlTG9hZGluZyA9IHNjZW5lLnVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZzsKKyAgICAgICAg
ICAgIHNjZW5lLnVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZyA9IGZhbHNlOworICAgICAgICAgICAg
dmFyIHRleHR1cmUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVGV4dHVyZSJdLkNyZWF0ZUZyb21CYXNlNjRTdHJpbmcodGhpcy5fZW52
aXJvbm1lbnRCUkRGQmFzZTY0VGV4dHVyZSwgIkVudmlyb25tZW50QlJERlRleHR1cmUiLCBzY2Vu
ZSwgdHJ1ZSwgZmFsc2UsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFKTsKKyAgICAg
ICAgICAgIHRleHR1cmUuaXNSR0JEID0gdHJ1ZTsKKyAgICAgICAgICAgIHRleHR1cmUud3JhcFUg
PSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICAgICAgdGV4dHVyZS53cmFw
ViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgICAgICBzY2VuZS5lbnZp
cm9ubWVudEJSREZUZXh0dXJlID0gdGV4dHVyZTsKKyAgICAgICAgICAgIHNjZW5lLnVzZURlbGF5
ZWRUZXh0dXJlTG9hZGluZyA9IHVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZzsKKyAgICAgICAgICAg
IF9yZ2JkVGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlJHQkRUZXh0
dXJlVG9vbHMiXS5FeHBhbmRSR0JEVGV4dHVyZSh0ZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gc2NlbmUuZW52aXJvbm1lbnRCUkRGVGV4dHVyZTsKKyAgICB9OworICAgIEJSREZU
ZXh0dXJlVG9vbHMuX2Vudmlyb25tZW50QlJERkJhc2U2NFRleHR1cmUgPSAiZGF0YTppbWFnZS9w
bmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUVBQ0FZQUFBQmNjcWhtQUFB
Z0FFbEVRVlI0MnUyOXlZNXRXWElsWm5idWlTYVRiWkZVa1pSS3JDS2hFbEFTUUEwRW9RQUJnbjZo
SnZvWHpmVVArZ1A5aFdiNkJnMDBJZ1JvUUphS3FVeG1abVRFZTgvdjB1QjJ1N0ZtMlQ3SEl5SXJu
ejg4dVB2dDNmMmEyV3JNYk92Zi91M1B2dnpQL3NVZi9ONi8vaTh2Zi9sdi8zdjVILy9kLy9TYi8v
VXEvNXU4eWY4aFYvbS81Q3AvTDFmNWhWemxHN25LSjdtS3lKdUlYTi9oUHdxWEkvZysrenE2clBJ
NXU4eitXcWZMcmUrenk3UHJWdjlMOGJyc01pR3ZrOFhMbU0vc2RmSFhhbDRlM2FkNkdYUGR5dTJp
ajh1Lyt1di81Y3VmL09TTGZkdEVmdlVyK2RuZi9kMFgvL3QzSC83YmYvaFAvL04vOTI4aC8wWWcv
NFZBL2tvZ2Z5R1FQNVdyL0lGQXZoYklsd0s1Q0dRVFBQKzl6NXVQZWVQSlNXK3lvMitzL0d0TjMw
Um52MUUrZjV6eG9mOVIvbFNYdi9uci8vbXJyMytpKzVkZnlYN1paUVAwN1RmZnlzLy84Ui9sLzlU
dFg3NzkwVC83ci84RzhwZHkrLzhYQXZubkF2a3pnZnd6Z2Z5eFFQNUFJTDh2a0o4SzVLc21NVnp1
MVU3cDVQQTVBWHhPQUo4VHdQZjdzWC81MVplWGZjZW1xbnA5dy9XNzcvUzdYLzZUL3Z6Zi83Mzgz
UldDWDMvejA1LzlpMy8xMy8wUFgvL2VYLzJGeVA4dEl2K1BpUHk5aVB5L0l2SXpFZm01aVB4Q1JI
NGxJdC9jLzM5My8vOUJSRDZLeUtmN2Y0ODhmUDc0L1BINTQ0ZEpBRjljTGw5OElaZkxCWnR1cXRl
clhyLzdEdDk5ODJ2OTVTOStMditnRi8zaTdTcHYvOGxmL3ZuZi92R2YvZEYvSmZLbkl2TG5Jdkx2
UmVRL05FbmduMFRrbHlMeTYvdi8zNGpJdDAwaUdKT0JseEFzZHZ2NTQvUEg1NDkzU1FDWHk5dDJ1
ZWgydWVpbUtvcnJGYmpxOWVOSCtmRHRiK1RYdi9vbC92SHloWDRGeGZieDdldVBmL0xuZi9QZmlQ
eWVpUHloaVB4eGt3QitmazhBdnh6UWdKY0lyR1R3RnNpQUVYSDQvUEg1NC9QSFVnTFk3d2hndTJD
N2JMcXBRZ0hCMnh2ZVBuNlNEeDgrNkc5Kzg0Mzg0dktGL0lQdThpVlU5WS8rN0MvK2pXeGZmaUh5
dFlqOFZFUitYMFQrb0VFQnZ4cVF3Q01KZUluZ281RUkzZ29Jd1ZNSVBuOTgvdmo4RVNhQWJidHUy
eWJidmw4dTJ5YmJkdGx1U0VDQTY1dThmZnFJRHg4KzZHKysvVlovZWZrVi9zTzI2MWRRWFA3d1Qv
N2tYOHZsOHFYSUZ5THlsYnlTd2UvZEUwQ0xBcjY1Qi85dkduMGdRd1JNTXFnbWhNL0o0ZlBINTQ4
ZUFlemJaZC9sc20zWXRzc05BWWlxaW9nQUFrQ3ZiNS9rNDZjUDh1MkhEL3JyYjcrUi8yL2I5V3U5
eUplLy84ZC85TmV5NlM1eUVaRmRSTDY4LzM4a2hHL3VLT0NuQXdvWWtjQ29FWHdrRWdHRERxN0Nl
UWZ5T1RsOC92aGQxUUN1bTI2eWJadHUyeWFiYnJLcFF2WHVlMXl2dUY2dit2YnBUVDUrL0NEZmZ2
aUFYMSsrMVY5c083N1dYYi82NlIvKzRWL2Rna2JsbFFpK2FCTEJWL2RFOExXUkFMd2tZQ1dDTnlN
WlhFbGt3TFRNZU1rZ2EvUDQvUEg1NDdjY0FWd3VjdGt2ZHhTdzZiYmR0WURiVGZTWkJON2U4UEhU
Ui8zdTR3ZjU1dktkL25MN0RYNm11Mzc5MVU5Ly81Ky9na05GWkd1U2daVVF2bktvd0tnTFdMVEFR
Z1J0RW5pVHVFZndhRUx3ME1KdmYzTFF6eW51ZCs1M3VHK1g2eTNnTjlrdWwrMnk2WFZUMVUyN0pD
REFGVmM4a3NBbi9lN2pSL25ONVlQK2F2dFdmcTZYeTlmN1Z6Lzl3MWRnUlluZ2l5WWhmTmtrZ3pZ
QldIVGc0NEFFTW1xUVVZUUtPbURhaUNJYThUbXNmbXpCK0RuWkRRamdjcEdMYnRpMnkzYlpIalJB
ZFJNVnZiL2RjWVU4a2NEYlBRbHNIL0NyYmRkZmJGOTgrUlBaZnZMRm5BUWVpZUNSREM1RE12anUv
dm1ENEprRXZqUlFnS1VMZUdnZ293ZEhrQUhUWXhpaGc4OXZ1ODhJNVVlR0FQU09BRlRscmdQb3Bp
cWJLUFNtQ0tyZVVvQUFrQ2NTZVB1a0h6NTkwbTh2SCtXYkQ5L0pQMzM1azYvK3RBODZLeEZjaHY4
ak12aGlvZ0U0SlFtOFhoZktxT0FxeDVxUlB5ZUd6eDgvY2dTd2JYY1VvTEp0aW0yN0M0T2k5Mys0
djZWeFF3S0F2bDJ2K0hqOXBCOCtmWkp2dDQveXpmYkY5bFBkdi93Sm5zRTJCb2dteWVDUkVENDB0
R0Z2a3NJWGlTYmdpWVNSUnBETkRaNkJESTZnaE0rSjRmUEhleUtBTyt6WDdjYjl0NHRlZE1NTkFR
anU1VitmMXVBdEJTaXUxenNkdU1ySHk1dDhlUHNrMzM3NktOOThzWC94RTVGUEFubTcvNzgybzBE
aVVJTlhNa0NYQ0I3L1A5NC9lODdBV1VtQVJRV1Z2Z011S2VqOXQxUkxCcCtUdytlUGd3bmdzdXRG
RmR1MjZXWGJibCtyU3ZkZmJucUFpdUEyM1FjQmdDdWdWMXpsN2UxTlBtNXYrTEM5NlhmYkovMVc5
eSsrZmdYakEzYkRZWFYrTXVoUndTUHdMM0pMTUZZQytIUy9MVThIWXJHd0lod3lOT0YxMlN2Z000
U2d6dGRpZlA4NU1YeitLR3NBMkM2WDdhSjZiWFNBT3dyWTVPWUlxR3kzZDV1cTRQNUdoQUJYdVY2
dmVMdlJBZjEwZlpNUGIyL3kzYjd2WDcrZys5djk4L1dPQnE3R0c3Uk5BbFl5K0Rna2hoYitYeHAw
c0U4SUFDNFNHQVAvVGJnVkpLL1BvSlBCbkFpd1BLeHNYZmJiblJnK2kzcy9KQUs0US80YjlOZkx0
b21CQXFDaWNrTUJqeTdCdXl3QVVWeXY4bmE5NHRNakNWemY5S05jTGwvMFNlQTZvQUVZYjFpOWcr
RnRTQUxiL2JLTDgvK3Qrd3hYRk15c3dxaUhvSzRUb0lnS3FzbGdwZzFxVUMwUW9ZYnZKWmcvQi9x
NXY0c3pIbVBYN1lFQXNEMENYMjVPd0VVVm05eGFnMSthZ0tnK254UUFybktqQXREcjlVMCtYZC9r
NC9VcUg3Ykw1WXNld3JjQkJpTUpaUFJBcDZUd1FnV2ZqTTl2Z1JiZ1VZR0w4QXZMV0gyZ3FoZXND
b2tlVW1DU3dQc25oczhmUDJZTllNTzJYZVNtQVd4eTJWUWFYZURtREloQXBmMzNyRDRQVFVDdVYr
RHRDbjI3WHVYVDVpcjhWbUNKMkc1QnBCTTgvci9kRWNKYjgvMGxFUU10SkhBNVRBbHFOdUxSaEpD
aGhFcFNxRmFiSDNkaStHMUFHaitXMS9keUFSNElZSk5ObnVMZjYrdFdDOUNISGlBdEZoQUlGTGpL
Mi9VcW42NVgrU1M2N2FLKzNRZVREb3kvSUcyb2dRN2ZiL2RBdHo1dkJncllHcXJ3TnRDSHNWZmdJ
dndLMDdPVFFCVVJWTkNCRnBLQ09qcUNIbjVMLzY3VGdUTitmcHlTQUM1Nm53U1VpMjU2a1hzU3VG
R0FWeUxvVUlEbzgvUHo3ZmRvRXJyL3YxN2xrMTYySGJnSHZGcElZRGZvQUpKZlc0c0dQamtVNFZO
QUY4WkVjTG1MaGRjN2tsamRZMXkxRHE5eUxpSTRJaVJxY0x1amIxMzhLSVBuODBlakFUd1J3SWJ0
QnZuMWNxdisySjc4LzVFSTVONGNKQThxSVBjbXdSc0tBSERGOVdZUDZtVjdWbXJnTHVUcHhZVGNN
RVcwTEFtb1F4RnN1dkFJOHR2L2EvQzVmVjJaTU1pS2crK0ZDTTdSRFBSdThlYldZN1ZHNlZKaStC
emszNU1JMkxzQWNrTUFnd3ZRMGdDNURRamQzQUJnMkhRTEFQcEVBbFoxQnU3VlY3TUdIREZSQWJv
M1ZLc1RiQVk5c1BXQy91dng4NmdCYkRLM0QxZUVRUzhwYkFlU2dTd21oZXBuSmI2dUJ2L28vUHpI
THp4V0EvWDdUSDc3RGU1ajZBR1FpNm8wQ1VHZkNPRDJYN2NYQWxDRlFBQnRFc0dMRHR4dU95UUIy
VVRRQktaZTVHVVBYZ2tVWUNVQWJaSlJoQkRldXE4eEJmK2Jnd2JlaERtK0JGUWkySUprc09vY3ZB
OHlzSU1meGx1VmNSc1kvZUIzSnpIOEdGREFYUU80OFgvZGNJZjlqeURIcHRJaWdEc0ZrRWUwNjZ0
QlNFVFFVWUY3RWxEZFlFQnl0TjQrcms5VWNCUGZyS2FacUZIV2N3M2k0SjgvWDRldjIvL2JTWHFB
aHdUYXk2T0VJUExEMklwdDhPdEFHenhrd0x3OVdWRlJqVGMvcUM2SDMrWUsvYjFvQUEwS3VPaXpI
ZmllQ0xhSEhpQWI1TllUSUM5RU1FYlpyVkVRdDF4d2hWeTFVZkJoOFBVT3F1TWl6d2FhcDN0UVhm
WTVCLy90ZWEvTlpkZmhzdmJ6K1BVUlFURFNHV0I4N1ZYLzdXU2Q0S3hqVXFySWdFMElVa29LR25o
SXZ3dmF3cEdmNmVFQ1hKN3R2NHFiQTdESmd3cHNLdGhFbW1ZZ2ZhQUFmZllGM0hMeG8wdndOakow
U3dSV01HNGRiNGVoMWdQTm0xOHZRK3VzLzBlR214RGVtdS9mbk0vWDRldnEvODM0MmtzR0hnTFk1
THlUL3pnMHdNOGxjTWpnR0ZYd3FJT1ZGSkJRdzk5ZUN2RjlvWkw5TWZsM1F3QXZJWERzQlJDOVIr
Zno4eDBGUEJMQjB4SkVwd1VvYnJmQWtBUmdJQUY0MWgzd1FnUDZRQW1YNUUvN2VJNDNJeEd3d2Yv
bW9Ja1J5V1JKUUlQZ3Q5Q0E5YjM5bnp0NGJZVVdqQWxDaldEUGd2OElFamdMSmZ6dWFBc3J2OVZk
Vkc0T3dPWFcvZmRvQTM1cUFkTDBCRHd2ZjZBQVVWSGQ4TElFdTk0QTNLK1ErMll4YUI4NE1PSDYy
UC8vcW9vMzhmQ1JERVJFMnpmMEpmbURhK01pZUVsQWpjRFBLeittUktDT3RkZ0d0WGFCamdOSjRI
Mm93U3BOZUFXL3JSSDRDYUhTcE13bkJZWXljamdTSndmaWU5Q1I2bVB1MjBVdjhrQUJGMjA2QXZY
bEJNaUlCUFNsQjl3akJXMWZ3RXVTYjk0Mjk2VkNxZ01hR0N0L0cxQmJFeGkzSUcrcjNhM0o2UDQ4
R3YvSjBZbUVZb2lHWTdWL1N4d0ZDd0dvRS94YTBBSjBDRWlWOVFQQ0piMU9KNUYxVlRqRVkyL01P
OUFFSnZqMUJKVFFwcUxmVGxHd2pBQnV6VDk2MmU0SW9LbnlyZGgzKy82bXpEVko0UEhPeGowSnFH
S295MjArd0JNTjZEMWdMV2k5TlFIZlZQNU1FRVB6akdZeThCTUFPblRBSmdFcjhIVUllalJvNXhy
QTV4a1I1QW5nbWlTSHMrekREQW1NZ1d6VGc1NUdTSkVtSEU4SXZXUEFvWVRmaFdhay9Xbi9iUTBD
R0xTQWp2ODNTVUVmS3A1cTI0TFh1UUlDcHpyanJnV296YTh4VkUwMENRQ09SZGhNSnVUVVQvcmp1
bHMwZ080SWJ5OEJJRWdLNmdTN0JzR3VUdERyU2NIL2ZSNjhiaVVITlZHQm54amVOeUhFdlFlL3Zl
M0xaUXFnRzNyb2Y2Y0VjbHNOZmxHOUo0S3RhUThXSGNWQkhTMUJ0SEU0UVA5T0JNUzk4bXBiS1Rl
RFc3ZEp3UnNuSHBNQlRGSnBWNEkrYjBrWS9OcUluVkZTeUJMQU5ibk1TZ0JNOEYrRnFmeHEvaDY1
Ny9VcCtHYUJud1Y5aFJxYzliWi92QTZ2dStUOUU4S1BKV25zOTRVZlRlQ2oyUVh3Q0hTOWROTDhY
ZjNIby9yZmV3U2VGT0RHRFY2OUFVMHk2TkZBRTFEUDNxSysrcmRCNy8xSFJ4Zjg2Z1QzNzZ6T3I5
OVQvaC9pb0JpWFdRa2dRZ1ZlSXJDQy9Xb21oRG1RSytoQVNJMkFSUVpLb29ITUxkQ0p3R0VCQlhD
Myt1RVJ3ZytWT0haOWlvQXQ5SDgwQUkwNndHZ0ozblFBM0JvQ3V0NkFoeFl3Z2NQT0ZueHVGbnJw
aGsrTklLSUdyV1BRdGd6M2IwaTdZNkQ1cnMxR0txVG9wMG5RWDUydm1RQzRCa2pBK3I0YTdLeDlX
TEVOR2VlZ2toU0VUQkNyTlhJTWRpLzQ0NFJ3MW42RTk2cnk3T1B1ajhVZkx4dFE3OE5BMmlTQmJn
N2dJaUliZERMc2I1YWdQaExDM1JrWUt2OE5EYlMyWUdzYXROUkFHMm9Rd2Y5WklPeWRneTFNQXpC
a0F3OFV3RUVJRHpTQXFkUFE2emEwUGtlSkFNSDNaMHdYbmlVU1pvSHZCWFUybWNqUWd2NTZUZWRJ
S2dsQ3BJb1FmZ3dDSWpPeXRkOFdnTjBiZnhvUjhGbjlHeDBBajVaZ3EwbElaYnNIL2liU0pvRm5T
K0M5OGc5b29IRUVMSTNnbGl5MjV5T05JaUU2cGIwTmZCbHlORVl5RU5vb2RrS3dnbDZJNnM4a0FS
Z0o0Wm9FZnVZV0hMRUphMExoU0JYbTdrSW1HZVNmVmRvSjFETzJHN1dYc2VoQXB0dXBTT295ckNT
RjkwNGsrNnZ0OThYL1pjTTk4SHNkNEpZSVhoUUFJZzMvZjlBQVVZaHNMUUtBdGtIVkJuempDS2hP
b1lsMnltK2lCdHZ6RHpRMkRMWEo0UFVtYkpIQVZuQlFYNGpreGZ2SGhORHFBZEhYR1FKZ3YwYVNE
R0l0Z09zZUhJVStLOWhYbklKemtvR2xFS3pOSGFnVGRKNlZXRVVINGlDS0g0ZmQyQXdEUGFZQm00
V2duZzRnUTlWL0NvR2l1Tm1EMDRBUXROR01HelNBQVEySTJwemZvZ1k5TFJoN0JyYk9oNCtEMzBz
QWVuY2xqRnUyQ1VGcndZOFVBV1JmV3dHdlZPVmZieDJ1SUlMTTBwd0R2MDgyZFVUdzhoWXM4TCt1
SVdpSEdwV2dDbG5BYTFsTVBKb2dvdnZ2YmVQUHMvcTNYcisra2dDc2ZnQjVvUUY5V1lLUEpxRW42
RytPRTNpNUFxb3VGNTlGUU9tYWhRQzhybFBMajM4a2cxYzJmMzB2dytYYW9JWDI0L3BNR0lnU0Jv
WnFvSDN3bzBzSUlHbEE5UFdjQ1ByQXRwUEI4ZUJmNngxbzZjSHJhKzIrdHBJRlA0UGdCZnhadFpV
SmZvNHF4RUxUOTQ4RDl1Y0s4TXQ5K2NjaklRdzZRSmNFYnJELzFnMzQwQVR1RGdEa0ZmeDZ0d1Nm
MWY5eHZ1QkVDWXhxLzd5dGhRUUdtKzVKRHg2QnJ3NENrTUdUM3dnc2NDVW9RNHNVMnQ2RFIyY2lC
alRndGNwZW5Rb1pWWDlOdUw0T3djK2RWYUR1cnNZVmtWQUxYK3NoalNCS0J1dkNZRFVaakU1QmRO
a3hkSEFVQmV4eUh3QjZOUDdJeXc3c3hVRFZpd2dlMXQrbXo4Qi9MQXZWeC9jM1BlQkJDVG9COElV
R09ncUEzaVY0eVVnNlVBT3hhVUZIRHg2Q1lTOFNvck1PdWUwQ0NKR0FmNVlmUmhvQUkrQTFDdnd4
cU5rQVk1eUFJeDJFUW1rRmZlV09YaStuRWRTUVFBMFpITUVJdGlhZ0pBclF4RFhJcmo4bkNmUWk0
SFpQQXR0cklhaHNvOW9QUS8yL0p3VjVKUVU4encrN0k0RDcvc0JuNEVPNnJqdzBGUitpM1o5Zkh0
YWh6c0Z2SmdNMFgrdG1WSDV2YVlpTkRHQWlnZXdBeitneU5MVGhuakNVUlFGUjFiOWQzbFp2blZx
bWo5bUVQREtJVUlDNEtDQ2pCWHl3UzROK290cC9IazNRVnRoT2t3RUtsVjlQUXdYalQ3cy96d0Y0
UWY5dG9BQXpGZGp1YUVCNlM3RDEvL1U1RklRdTJNZXZPMHJRUUg4Wm1vWEU2Qi9Ja2dFNjBYQ2pW
b3E4Z3QyaUNHMFM4TDVHZHhrTTFjR3Nmc0NNQXJTQ0FucnI3ZHpBWnhDRUVwZXB2Qjh0cUhKL3Er
Ym1KR0d0cy9BY0FYRk9NTWVUd0M3UHcwQjZDdEN0QTJ2V2dvbnFCUUpGU3dIMEpRSzI5T0Iya3Zn
ajJISFhBb3llQUlzQ1FPMGtNTkVDQWhGTXFDQmY4bUVsQWt5QmJYMXRKUVAyUkovaGEwZ3BBZlM5
bCsvNW4wMENrclFwcTBNWmJPZEF1eG1Ndkhzd29nNjJqWmo3Qm5ZUWUxOWIxNGt4TnEyRC9laFgv
cDY4SEVjRit4M3lQN3ovVi9BL3EvNURBM2k1QS9kekE1cGRnYktwM3YzL3dRRjRCYjcwV2tDVEhH
UkFBNitLTDBiRmw2RkphRncwSW1ad202aWdTd2Jid1BuOVJNQldmM3NOMkpnQS9CVmgvUmcwa1FC
Z2VQZjZIZ2xBSExGUXdxUVFPd0RqYmRWeE5aalI0aU02UWEzV3h3dk54aDBKRmIzZy9XekZRUVM4
Yi90dEtjRFdvQUJ0VU1BZDhqOWhmME1CMnVEWGh6WDRDSGowM0w5REJVM1FqejBDMGw0bUxTTFFQ
aWNPT3dab1ZDQjZQNmRBN25EYkdrVnV4Y05yOFBVMkpRTzR3WDV0ckVxbWNjWmFIVTRxOG9DREZP
cHpBbk93cXlNSU1rdE5OTkFIb3VER3hPMzdEZ0FyUVp6bG1wLzE0VzFRbHFIVE1hSUl4N1NDeDAr
NXl6YTdBS0ozSVhCck5BSFZEY01aQVUvQlQvdmd2L1VMUE9BK1hpTGdnQVJFREYyZzBjaTZ4TkRS
Z2xlZ2Q3UDdUV1dINW9KZmF5bGlFZzdiU2NRUkJWZ0k0T29rZy9GNnJ2cExXUDI5c3dSRXFBM0Nh
RzgvRnBLcVM4RFRBVjRUaUJxSXF0eGZ6YVFSTHlzNUkwWEVGSUZyUGJaUlFiKzE2RmdpMkx2SnY4
RUZVUFcxZ0dmUXYxVC9GL2QvSEJuY2NQN3JBd25JSXlISTRBcmdXZUdiVTRlSHk2VHgvRWVUWkli
NWJvL0JzTUJqbWpCRTA4Zi9SQjBQSFlCZDllVlJBR1k3Y0hSd2lCZjhXZUNQSFkxYmdCVGE5eEtU
RUx6RWtRWDlDUHRsMGdKaXFzQW1DVDdJOHhiaml2aDNKR0ZJK0QybkJjU0pRSjhhZ0RYK085aUJM
N1VmRzRiekFrY2FJQ3JidFlIejF5Y1NtR21BakpmTDNDTWdUM3RRcG1yZkI3Z3hTekMxRG52ZGhR
TWllRzQ3dTc1K2tUb3VLTmtNOGMvK3ZxL1E3WllqTy9oaFZ2UnE4Ri85Z0dmaFA4YXFFOUVJZFI2
TFR3SjFoMEJJdHlEcUI4aUZ3dU5xQVNzY1JuWWlveE9nOUFwdm5ZQTM1ZjhlOU9oYmZlOEo0cmtu
b0ZrTzBsbUEyZ21BRzBZSzBEa0I0aWVFamlMb01EOHdCem9tMjdBTlpreklvVThFTUhrL3VvMW16
ZVZvRW9SV0tuOEwvNjJFWUFYL2xzQjdEL0xYZzc0dUFNcjlvR2l2SjBDTkpDR0Q2aTlEaFpkUUYr
Z3RPcDRTK05PRFJ6c0RWYmhkZ3Y0QnFUTU55SUw5U0NLd0w5L0ZHUHA1b1FLeElmOEEvVVg2cjIz
MUg3WUlxTE1MMEFlMkd0ckFET3ZSUUg1Yi9NUEU5ZHQ5QkdMTkc4alZUQVF2SWFLNVR0dnZ2V1Fn
RHZ5WElDbFVBNzhTOU5mZzdWdElCbE83Y2JzRVlrUURNb3QreWdRN1F3bU9hd1RIbkFNMlhVU25K
dlBJWVJZTW1ZUFMrc3YzSitjZlAzZDA0SllJWHNGL0V3TWJCS0I5UTlBWStCaVN3Rmo5bXpyU1ht
Y0poRlBWSHlTVGJnSEpDUHZSUS96N0cvU1ZVRVRzZzBaRitpM0NSb0NqaGY3eTFBOW1PaUREN1R3
ZHdFb0VYakx3QXYrYXZMRTJCN0puYitPcURwQm9BY2hvUUpza3hLbnNzMHZ1N1EyWWhjRHY0eVNl
TE9nOUdzQ0tpVUlpaFA3eWZXN3piVHNCaDBUUWZOMGlBV245ZjcyWjU2L0F4OVA3ajVPQUgvUXZ2
My9ReEtmazBEZ0R1UCtSM1VTZzNiekJDN2JPL1FUOUVlaDlRdkRQRzdnbEJRekp3Szc0MGxBRkZn
Rms4UDg4Q3FER0FhMjIzWWNrV1locitjMEJQZHdldGwyb2Nuc2Z6ZVBBV2NWbm5BSXA2Z0RWaERM
eWZWNG5xRkVEUHhIc2JXRDNrNEJEa04rcEFScUtNTFlCUHpZRXZ4cDl4bUNIUVFkZ1dILzlFdEgy
VElGcHUzQUgvY2RHeWR2MWowVFFiUnJxK0QvbUxjWDNaQUNaMTViRjM3OENHME15NktxL3pvR09R
d2hBU0RGd0ZieHlOR0J1U3hiQ0VoUS91RVBlLzZnQUVSV1FPYkNWVmZqUHBRWCtyZXh4WWhZRnhJ
a2dwZ1g3WS92UHMrUHZ4Zjl2d3Q4a0FzN2kzMnQzUUNQKzNTUGFUd0l5dFFYUDM4dTBQRVNtK1lF
UitvOUIzdnI4bUVUQVVmRHJFa1BJODBjazBGWjBkWGg5VStIUmJoZXkwY0FjMkg3QTR5NGVnb0Q2
eThKZmtCaWlnTGRGUDh2MlcwMEU4ZGVUMkllQUt1alovUUFWS3BBdEtJMjBnTFdrc0hlZGZnUGNi
KzArTkVIZWZkOXZCOXJheWk4aDdKOTFnQmJhdzIwTXNuV0FGNXhIa3lEVUNPb1hwK3lyT3d3eGNL
ajBhTDZmRnBwYWFLRHY2T3BIUjVzZ3g1QkFsSy8rZllodVAxRDE5Nm84ZTdsRkJhS3F2NVlJTW5G
UXBkMEZHVlIzNVJKQ25DRGFBQmFYQnRnYmlTd3RJQ010YWxLQysxSlE2YngvUExjRFBRTDkxUUZv
ZFFOS3B3T2dGLzllcWNCeEJCcVJjS0FBVmsrQXJRT014MVJZR2dCNm5hRGhsSyt1UVF3Sll4NG1l
UWJ4dE5uWVF3TWp0L2Q0ZjNNOVpFNFVPbGQxTEFoOTlmYmZ6T3hpRWtLRkNrVEpJVUlNVWVWbkov
OXNEdDgvZTFORUpPaTlvVkhER1loZ25TTHNzOURYMklBcXcxekFMVW5jS2NEcjBGQjVOUCswY0JR
TnJFZXpEaXlpQURQa3Q5cUdwd29QZEwwQUdQeC9OT0tleWYzYjlXSk5kZmNGdjZiS2QyY0xNSlZm
SjZZM0I2d0I5V0ZVZldXRXdLTWZHaVFMKzNiejlYR1F6MkVIS2hGNDFHQ3RaeURpL2dVQ3NOaFlv
QXIzVU5KNThZaWRIS3FuTWIvNkFCNUo0TjczLzRMK3Q3bUFrZWVQM1ArMUxOU0IvbDBTa01FZDhE
Y0V1VWxndUV3NnQyQVUvUENFL3ErK0FrdzZRRmYxdTZTQnJqMVpubmhHNTBBZmtvR0lkZjdnSnYx
S2NTZmd6V1drUTlVMzNaM3RIWFlBU0tKOWUvWWhVOTBydkQrcTlFajY5L3d4WUpWczUwNkVnL3Iz
RGtNRHpFZERCUkdnY1pheTQ5WGloTEEzMFArbDhOK2hmMWY1Ny8wQW94YlFid1lhYW4vckJNaXJF
OURrK3NCelRrQzhKTkRFVWx2NU1jQjhQUDE5WTAxR2F5ZXAraEMvMnp2US8ySEdMQXVyb3dzTkds
QTFjbnFHR3plSDV3ZWlZTFptN2gzUVFDNE8ydFhkaHZNTWsxWlM1ZWJwZ0k4ZU1yUHZQR2t3YXhh
eWs4WWM2UE1PQlBFZEMxWForMlVmYmZPUHR4TE1RUUFHOUJjWkZvRjBncC9SS2p4ZTcrb0F3OVQ3
WlBXaGdlZG9kZ3owZ2Y1S0J0cnRJWmhRQVpwQVYxQmkzNnc2dDk4cVZmSDdocUdJMzE4bExDakxD
VUZseFJId3FZRUg5YTJxYjRYald2RFQ3a0J3ZmJaQTVQMCtQTnVSdVcxeWY0eU5RSDN6end2NmI3
MFFPSjBHOU9UL2Rob1lSVUdUMTV1UUgvNzFNalFMdFFseGZEdWlDWHJ0TStTa0EraWNRZEg2c1Uv
eHo3WmU3Rmx1YlY0VHBvVFEyb3NkcGFFanRxQURtRVU3T2tCRUZvTGVDM0lXRkZlc3dKWEtYemti
b05MK3d6Y0ZIVThoVEdLSWJvTzdDTGkxL1ArNUYrZ3lkUWh1dlJid0VneHZ0QUNtQU5pa2hMVGJq
MGdDWWs4S2RsWWdtais0WW1hb2Q3VHdhaHdhZElDdVgwQ20yZkU1aU5IUEsweC9DRFY2Nkt5ZzFN
bnFqTkZCbmhCb0xRQ2dVVUxmYVZlNW5xLzZFUVdZNjdiWENzelViKzcyMzJmVlB6NTFpR0IxMm93
SzlwZXlQMVQ0cmFNRkYvT0VZSlA3OTJtZ1hZZlowNEdITUFoQmtDU21TaitkS3FSUGdWRkdIYnBM
RUdNaUdGZVFXZlNnclk1MlZ4YWVEVVBTTkpJMFA3Tm9pc0c3MjlISGw3OHo2aHhmczlyVjNtNEpq
Z00vbHN1aTJxbVRoakNmREZTYitJOXZ3VXFHNXd3TDU1VTdDKzZvdDhCKzdOMm82cjNxMzdUOXRy
ZnBqZ21UdnY3UFNRQVRMTGVSQU9aaElKSEJRZkRRUUpQQmRVd0ViVlczK0wwOEVjRUUvOUc0QU5y
Q2VXY25QS1JIRHVwYk55bk14NUFBOUlSWUxtcmMvWUxTaUQ1RWFFQlMvcy9UZ25VOUlMY0gxOW4r
Q3BId2VnTGVqeDdNbi9kMjVmZE4rZTlVLzF2Z2I3YnFmMDhNT3RmOEVYeGFvaCtHWThMNmdEZmh2
czRpNkhRN3NlWUkyc3YxR2NoZE1zQklHM3hsdnhjQ1J6ZGdDUFRuKzZxL1RXMDBWRThROUZhRnYr
UjJWbE9NMXZtL2hoamhEQ2RnTmZsVktNRTVCNDdJOXhUOHowWWdQQUo4bXliL0xxSHkzNmovTXdx
dzlBQUx4dU8xSlZqaXVRQVlMY0Z6SWhpRVBlMDVmazh0UmpHdzd5V1Fic2Z1TEFUMlZxT0lkMW9z
bnIwRjQ5Vk04SU5BQ1BIRG9CejRCNW1xcVNuVWd5aDNBcmpYeGZRSDVCYmdVUzhnUDdhVSt3MHpI
RDlHR0QwQ0dIZitQMXAvRGVpdmxoVTRCYnhSOWEya1lGUjU4WWFEWkNVUjJQMERNbWdFRDJlZzc3
cHVlZ3k2UGdEcGhFQjBDd2xHL2k5ZCsvSHMzNHBCRVFyQm4wVzUxbXFHbkpBazNBQ0NIZWlxa1Ex
WEZRQTVBbEtIN0xrOHlKS1dZMy9ueW0xNGgyQzNKdnhlTXdEOVpWTXowQlBNaTFuMVJiS2wxY1lo
SVZibEYzRzBBVHNSaUNNVXZvSzkvL09nY3dZTW9lK1pLT0xsQzYvWGs1MGJyOU5GejlmYW5xQThV
SVlTcEN3bEJPNGtIYzRXTExCZkJIVmFLd0tnTFFqbVA0VW42MVZxKzNzN0JzeWkwV3p0bUxqSndK
d0ZlRTBJMnZELzFRNk1Wd2VmeGZVZjMyc2tDUGJDbnhRcWYrUU1QRVVESFo3dkdleWowMjBKZ2tQ
WFh3c2xkQTdTWVIxUkUzaDk0TnZOdHVnc3djZ3hYRWtJY0JQQ0daMXJtcmdEQzBBNEs4OG5tMmZu
L2VUbnBRdFd5WmZ5YlJvSzhEcm80ellESU1Hc2Y3c2FUQnp2WDBTTWJrQUQ2bzlDWWJzZk1LMzhj
SktEOWwyRkp0OS9WR3MwaDVHaWIzM3B4TUtXTnNpZ0ZVaDNHMnVuKy9OMVdVZ2xJL0VFeDhmcTI3
dlVObndzaU9vS2VjTDdrUVM4Vm5XQUdDRlVnbjZkQnRRaHY0MENtSVlnZ3dLMHV3REhSR0F1QlhW
ZGZ3ekhValp6QVRMTUFveUo0Rm1CaHphV0JsckhsZDlDQ1dwUEhScW9mQnFNUmVNR1RKNzhxOXJE
ZXMxVHY3LzBtMHYwQUZIWE5SNlA2ZzMwU0hpdmluN1YxQk9oaDNpV1B3dnBzL3lFODM2TDJYaXdu
VVQ4eDJpSGdmcWhud242NjdRSEVFOG9MUWpFdnRFVzdHWUJaRHJEVmt3TklPNEc1R2lCRGY5Zkdv
Rk02bit2YkV0elh3UDZ1OUFkdWFXbkdZU0xBbFZkbC9BVStpa3JTZUVJS2d3ZGFaNEFBQ0FBU1VS
QlZLajQvd3RnSGNIdGRPMm5XS2NCa1BmeGN2bk5RdnNqMk1lOWYwMnI3NlQ4cTBJQm45T0xLZnox
SFg4eVZYUVlHb0FCLzJVZUJRNS81a0NMNitIL09HR29SbkxTd2RkM29IOHI3S2tHVGJnSXhFd1ZX
dm5GOEtPcEhueXpmRjlKb2Q1UHgrSUYxaDhvd3lpdER3L1hFZ1JiNWJQcWJ0MXV2bjdxQklRMTZ2
dFMvdStEUDNjUjdDSDBXV0pnZDVtVEpLWWdOem9HalFyZnZ1OTlOREJDK2JueVcxeC9xaFRhdHYy
T2FNS2dKV1B2djVrd25NZ3hIWUdGUnRKVzhWTWwzdVArTWdvcVNaeVdGS3I3K0tJRHcxZDYrSWlP
Z1pJNCtkNWlZTDNpbXpiZ3lPK3RwaDl0Mm9TQnhPTTN1Z0h0UG9GWjFMTTBoRjRrWE5FQnNzdlZn
UGRqZFhaV0s3dUt2eVMzcTFYYjFXUXd0VkRxU1VnZ3ErVnczdDU2SkEyY3o3UFhPd0dOVzFlY3d4
UGhmZTNRRVVzRHNGYUF6OGpnMG5mK2laTUFITmcvWFNhekR1QzE4SXExSEJSck9zQVE4TkxCKzE2
ZzYxNGptdVNnczNiUk94RTU1RCtXRERRTkE0aXZkTUo5TTFiMzA5VXFrbmFEVThPYlY5L1B3bU1Q
QVR2VE1BeHBBQkxCenVnVXRWOWJMZGhORFFBKzdCOXRRSjA2LzdRTkRIR1N3dGdaT0NJQTQ3SW5J
b0RkUk9RR3R0MFUxSEkzR2FvVW5DbkMvcnpCTVFKdGVOMTcrVmFBellOQTdlK1BGcUhRVXlYUFVZ
QjdpUVlhNVpGanExWnFweDhVcXUvWFQ3KzZCV0MxWGFqMEdsQkl3TW9IdTdVemNJLzYvQWNiOEtJ
cStoem1HV21BWW5BRHJJcHZLUDdUWmVMYWYwTEFlUWtHZ2ViYnE5RlRvSTQ0cDY1NEY0N3Rla0tr
STBMNVBRTlpQc0R3UEJweS9uaSt3S01ONzZWYXY0KzJjRlpGZjgrSndBcmFNdDBERkI3YmVBL3U0
WnovYStSWHgwTS9jdDQvandhTkFTOEcxN2VTd210YTBGaHgwVlJ4SmtITWl2c28rb25NWHIrWXdk
V0tiZ2lveTFqcDR4NEF6SUtnNWxFQTd3dkhFWUNSbWR4MTFUQXVUNmxETFZsNEt2WGtBRVQ5UDRS
VDhIMnUrbGc5RVBRSXB3Ky9OcEo3UndFOEhhRHYvTXU0ZjNPZE5rcS9FZkFpRWlPQU5qRUFMdmNX
TDlnZkZWNE5aYmdiUWM2cVBreTRQbTM1UVp4dEgxZjRqK1Avalh1YVlQY1d3SUVIL2ZtRVBCb0FP
NG00TEd4VjN0eE9RcURVK2RYZ2V5K1V3U3p1cVArK3VJbU8vdS82b2dDYjd3VGMxbjYxc0wrdlpp
ODdyeG5yTmFzK2dpVGc2UUx6YVVDaklwNkpmaHd0R0k3QWpCQkI5SmpEWTRlUFlWUjZaUGdONG93
VnY2UTJONWhoVkh3TmVZck0rdzZkTjZLMXNNSFptL0NlN2JIZTNkektyMXh3MXc0SnJTUU1adGdu
b1FIbHIxOGZ6dW5Bc3pENHF1ck5VZy9URHF6eC9sZkNhTzZ0NHRBQ01VUTZQNmh0V2pEUEMxaENv
WjhrcE9Eeko3ME1VUjlBT0RjZ3d5cXlQaG1FK3dmSFlCL2h2U3F0NnFlWFVTaGhYSCtkOVNSOER6
ckRhWlpkcFNwL0h4cUxNUXVBVGdEVS9xRFBSZ09JZVQ4Y3Z6L2gvWEM2QnRFN0FDTE9XUEUwS0lT
NFVVam1aYUoyZ3JCcGhpV2dUNDFCVVZXWmZQM0FuRUlUNk9yZm9GMTIybDJyTXljQm9VNWkvT1hv
VVo0L2FnbHNYd0x6SE5VKytGVkYzcWlrT2o1SFhtMlBCaXRUMVd1dkpSQUIrNk8vL1cwL1BZOHZR
SDVJckFzTXMvV3VWbUFkSEJyUWdyYk94SlNoWHdSU3N1MDhoOEpNQnBvMCthRFRBTHdWNHRic3dn
ekhyZnRHL2RKS0lBUWI1aDlLQ3NzV0lNZXRvK0dZcUcxMi9IV0dqeDhrenFOSmFhMG5vTVdPcjJL
d1cwMUFNd0pvTnZoTVFkYTIvUktRUC8zZWNBQk0zZzl1RDZCWTY4TnR6OStuRE9NYjVpVitoSUUr
ZFAvWnMvd3dKaEo5bWdCbm9oQnVTdEFCVVhqdWdGM2hrWEY5WlpKQWplZktkSFpDYzM4OUxvU3RL
dklsN1FJRWIxZDlSeWNpUWdGREk5Q2p5Y2NjLzIzQWFtNy9QWkpCaGdEZ2luNUN0UXZiQ3pYOGlw
OVlnSUZ0T0F0K3cwb3dwL2hPaUNXZ0VHYlZIdVlqUmlnUEdSL1lPbkVvcVBEb1Y1ejVZcUIzbVJx
Mm94NUlDbVNTZ0FQMU5lK1hWMk5FKy92dUZiQ1RSQUR4dFM3MFZSQkNqZ0JrMk95RFVRaVVnZmw3
N2I3RHdhSG0yckFaN29zUlNPT1VvSGdLZk5CU0xJNzY3K29EWXJmd1p2cUNoU3BHZmozcEZ3WkZz
Q0pnMmplSVFRQlVpeUk0V2dENjh3dzRxTzhraHVXa2tJdURyeFd2Mm52K1VUQnBKWWlQZDBLZW1U
QThxcUZpdVVGMWpXUzNCb0c2cEFESnE3NTFKcUJJMHd2QVZQeU1RdmpjWDF6YkVMbHRLSyt6QmlY
UkZpUnhHK2I3cTNNOXh1TGR6UjhnMGdDR056U001Z05ZZnFHTzlDQlQ4T0hjdDZvQjNLc1NEQmlz
VW53c0Z1SVNRYVJIeERTdjB2cHR0Mm9lTEhNRVJmUm4vRkcvQ3gwMUVwZ0lRRzhMUCsvaTM3UEt3
NTN4bjZzWUNNNC9Kd1NSckNuSWVCMVprTHNhd0RoYVBLdi9ualUzd25aL2RCZEdFOCtZVEhTRzgr
b2ZHZ0lqc0MxOVlud2RNL0tBblRTc3FqNmlnN3VHZ0lQdzNuWUZ6aGhJSXZyaUF4RlA5Q1FkNEhT
bG56Z3hPTklkckU3QThaRFB4OWZqaWI4aWZnZWdOSWxpUmdkeDk1K0UxVDcrM25RVk5OaEV6RGdH
QTNUMnJFRExkdXd0UHB1dW91UGNzOHN3d1hGamRUYU1LdCtqQTVnVUFRUGNmOTVLSlF4WVUwY1l4
RUR2c0JTbVl1dWtwN0F3bnFuaUM5QWZhNXo4dmJvSTY4SW1UMHQyNkN2d0J6U2dna2o0NDdyOUlv
anZDbjdVOTJKL0h3MFFTZHdaS05OanhQQ2ZTeFJxbkFUa2R3cE93aDg4b2M0SjhLVFNtL3dkYlpq
cmMrNGlGUDhZTzAvNUpKRENmYWlqSzV4VlhldnFmZzZ6R1JyUWY4M2Nodlg0YVJmQUUvLzZ2djUr
NjQ5MFU0QURkTzdRZ00vNWJjSFAvbjRPdENRaEJFRmVEV1N2b3M4RFBxOC9Jd3pMempwYTgvVTZN
TVNrQmtsRG04ZTBtbjNRSVk3WEcxT204d3pONDh5N0h3aE9LM1AwL1p3VVFISHY0cHNiZG9WZWI5
VmxBakNoQkNkdEREcE9LVGg5WmZjYWdPWXEzMVJGak40L2d3Qll6cDhsQXdZTndCRUxoWm94RUNl
WnhNbEF6V0dkQ1JWMGZRV0dIbzgrOEt4K0FBeG5DSXpvd0F4eTlLdk5lcFdmc2ZwNFJSOWtVckQ4
OENQVlR1WFJ5YmhxcVRIY254RUduZHNndWIxR2R1Zzh5ejlmSHQzSHBsNTd4L21mQ09DMjlGT1NR
Ny9ub0FaUjVXM09iMjRVTXB1UFlBWWlRclFnazFnbkZvVUlLcjR2S0ZwVjE1cEhVSk8zWTVyZkgz
VUZIVTRiR2tVK05LSjlmMmhKeU9NeERCRHBqQWd3aVlxdms1VHFObDlFSDJBcmI2ZkEzeWFBNGNC
dFBXZXdoa0VjSVFKQmxHellwNnpSbXIxditlM0Z2Mjd4cHp2eUk0NE5HRGtDSWk3Q0dOVjlEdzBN
OE50SEMydlV3SElOdW1DR05HOGVyeE93dFFJTnNXODhUbHdkb2MrRjg1bkk1NTluZ0VEcHQyRi9V
dTNoaVhZcmtOL3BCRlMyNmhZREFrRmdFck1LNjd5OW1HQkEzTDVvcmU1aXpmOGIzbjgwNU1PcS90
N1hVNFdIdjFEVUYvNWd1Z0NTT0FJVy81OXVNd2w2Q0hXQWliOGJ2ZnhXbDkvckJHRU1UVHdEZkcr
ZXpFWUc0eWs2RnZSUHVQd0Urd3ZjMzlJUmpFTldNKy9jbTViMFc0UGY0V3VLVW53L3ZENmVEYkIx
RVRzNXZsNzdEaG5tLzUxZzZ3UFd3UUFxeG5pdmdRYWVTM2d5L3UvMUg0aHBUUHJJZ0hBTjBtU2dY
VVgxM1lQNVBNSXVRQWZCci9mNzBjZGVFK1FvQ1gzaThuRk1MY0FqSW5Cb0FJWXF0MUxoQzFXZHR2
bVNhYjI4QVlmZmFlaXZDQitvaGRZUWdmVWEvV1M0VG9Nc05MSExjOW5udlBaTHduMS9FZWZQVmYr
VS94dm5DVlNFUUVrRVFFbkVRSk83UzdSdllEeE5lTllLckc3REtNaHRzUThjTW1oZ1BLS0tqK0Y3
Q2lIWUZSNUtJSVB4T21nNUlWQXR1M0FDUVNQaDdDelVRT2dBZWo1Q1dFa0llM3ZneHowUk9HTy8v
cVlmei9kbkxUK1p4RHI0UVcwZU5DSkJvckNGT1ZDMzEyRWMyVGlZNUJrMGNBYVFtaUExVkgxTU93
REhRMGtIZEVERGYrMlVUV2hTNFo4ZGlRTWljTHg4TUxCZnZlckxjUC9qUXpGMFA4RUpqNStOR0s5
UkN6NzU1UzZGL2YxK1gvZ3hlUCtXc2Vkdit2RjgvNTRhU1BKWUZqSVFkNjI0TUR6L1VETFFucjhI
VTN6dEtIUmY4UWVubzF2eUFRSkJhTGNNdFRWM2N2Z1A1NkNPQ3FkL1FQOXhMZ0JrSDRCeE8xM240
aE5VRHRBQ0M2RzFTM3pxb29aNkJhNGxwL3pjQUZiN2lFUktRd1FjRjM5SUZKamRYRUNHQUR3MElF
NGdnNjc0cFlBbms0SG9IUHg1NHRENWRhTzV2eHJ1Z1NrTWpnaWlxYzdUVktBVDZBVDhSNGNrYkhF
UUNZUi9JWkJ4SmdBK1haanNSN3Zhb1JwSXhXcWVxZlh1R0MyQ3h3dWRpY3dlUEVCMWtOa2FaQ3V3
eUYwRHVLdi80c3o5bXpQL1F4ZGczQkRrQlRNQzhRK2xvRDZVR0J6eDBLejZlQVgvS0FyT1FUbFBI
Rm9JNHZWdGY0ck51THJjYTllZFJuNHhCUDdrOHcrOUFnWkNnQmZFVVpXZkVzOGlGTlozVU83VHFt
a2pDTy9yV2RnY28veUlxSGNRV2FDMkVHVHpnejV5L2lYUUF2eXgzcml5eHhWL0plQnJpYUdCOU9y
VEE1ZzkvZW9rTSszN0dzenFmQS9VWms5aVc1VW5DdEJxQmwzWG9OTjZBZy8renk2QTVldlBBcCtU
SUZEbjE1Z1F3OXJqck96RlgwczJKQlZBeGEvblAxYTZBc05XWUdqUE5HUExUUWdCc05VRnZPQTNI
dDlvL3JHRE4wdFdPQ2N4SkdwK2Y3Kytra1A3UHhjR3YxK0dqa2FMdC9mYXdwd3dlclF4QkpOVzRi
K1BKc1lFZ2lBWVlkRUFHSWxETmFBYlJrSWdLM3V0MGpLQnlwKzh5ejIzWDZHdHRtQm1qd0R2Q2hn
aVlMUDVWL3poSDYvMTEwc0djS281Q2tnZ0NuZ3huSVBvUGphMGoyQisxQlJraVlKaXZpYUxKcWdo
REk2M0cybkFnQXhNQ3VEZG5vRDB3SVFtK3VyTUIzVnVBd2JCckZHZ0dnbmhBRnFnOSt1aktzTHhC
M3FHQ1FORUV0UGluSVFsQWo0V2dJdzcvaVhjOVYveC95VVdGczJLSDUwNGJBaDRhWVdmNFRyVExH
VHk5WWJmdHlMZVZPV05mWU55dC9qaTI5bVFucU1BbHRVM2lvVHRiWDM0M3l2LzF1MFlQVUJ6NnpC
NzAydFF1Y25YMGdXYUZoNkRnUGRtaFhhYXBHb3R3MFNGejFxRGlUTWRkOGg0NUhmY3FDUFJVaEEz
K05tS3oxbDl0ZUNQYU1kNHVyR2Fld1JpdE5CRGRhaFI1YzNBZlFtRENGVDl2bXRRRXdxQVlYWDRY
STJuMjNaOUIvWWIxRkwrTFdveDZ3SEdiWlNvNkZSMUx6eUcrM2hyaVNadldUNmpmWGhsMmNtUVpK
RHJBYnVZQXFBSG8xR0EvRU9nRDhlR2NVN0E4ZUR2SDRmUUJ1QWhCTC9acC92YW1QVHJSRU5ER0xU
Vi83RTFXRVBMRGxQL1B3elU0WWh1c0lNVWdmSVBBcjZEaHY1UjR5MnI4bGRGd2lGb1lIbm1yOFRB
SGJoUlFTWk9jdEg1OThaWWhxdDZ3UDdxL291cWU3N1JKeHZ6RllhamkvejR2bmE0djVjVU1EWHFE
QUo1eXRrdHF0QkRja3lqdkpnMDRobDE2TEIweEZmeU1mRDc3UFpqRXJHUVJSallJZlN2b0FYbnRr
czBvazhNc1VDNEtBUlduWVBsSkJlSWdMZUZyVWdET0hZQ2FnMC9YTkFiV2dSd1F1TEFzYVF3SWhD
MWc3K2pDTkt1VDM4SmZuWVN5VGkrUVFFd3dIZVQ0L2RXSFl4SlB4Zk9qNW9BblJRcWdVM1lnR1pT
T2FEeUszbi9xa0RZQktwdHpSM29ENkI0ZnlSS2pwMkF6U2w4MFlSLzNQKy8xdkJqWDE4SmJ1K1lz
ck1SZ2JxUFA4enJETFRBYXVwcGhmZVp0eVBzOUJQenRwTFNCWmpvd0Yzd29ZUndCd09XYXFiZXYx
NWI3WDRSV3NpcVlpWTZaa0ZFSW9Vd1VBMk9ya2VFUUU4SFlOeUQvcmwzbTg4akNHZ08vblBXM3h5
OHg0US9IQmNNMWRZZzVxOE4rQi9TQlNZaHREMEVZMVBSR0xEb0tJQkhGM3lMejRIL2dTWVFKUkVU
Z3FlQjJkNHZDOEwyTlZuUW40UG9WSkpBY1AwaW5haEFmZFhWSThDRnN6alJhZ0NUdFJkVjdTcjg5
NU5CcFJLWElUNjRSTUZ3L2l3NWVDaGhFdm1teVVJSCtrK1F1M2NMek9BTjZJTGxGdmdXbngzWVdG
RHowZjM4emU5R2xmUDZVUTNvakVZMGd0cVJJRWJBNS9XZ1FGaHNFdUllTDc1dVR6dnFIa3RBV2Zq
L09ENnNRWHNzUk9jR2lSZ0ZuMFFWa2xkN096bk1EVDdDSkt6aE1JcXhXOUIrTENPUWRINHV5eElj
RTQ5VlRTZUxqMHdLanpjcDJvRFhRQThZb0RFR0JMTVcwQkp3K2VBeFhlalBWL0lYZDU5L3RwNXJW
eVlYRHc1QmxSZXRTcFFBY3ZnZk93Vk04T2J6QnEvQVEyd1g0bHdrUVYzdk5oWUZmbjJMRmdhb0RV
MW9ncXNmcUdrSlltcmo5VHIyMktRd0JMemJMdXpEZUE5eXp5SmpWUmZ3ZWdXcTBIK0ZUaERQQTZa
aFp3WDJNMktoNHdhb3ZDekFXSlR6RC9xWTAwYys2UE04Y296MDhWTnFnbHp4NTRMZkh1VEpLN3oy
cndYMzVBQkxnMUR6c1o3UXY3bC9mMnlYRGxiZjRDL2lyZzBNSjBhQ3VEMHdQNzRNcnhmZEZsWDd0
cSt2dFJkQ3B2dDU5OUVHOVl6M1YrUCtPai9uNHpMcnVaSGNKN29NdC9NTnA5ZUQ2SEVlRmI2L1RN
ZmJXbzg1UGI3OUhKbzh0MzM3MS9QdUlBWnFNdmpQQzM0blZWNlpCNGhFdUE3QXpBNWNmVTB5Mm42
dXg4OUQvMzUvbjIvdldZNUJmMHF3ZjN0UExJU08xVGFwOXF6RkI2ZWFwL2JlcUk5NE5DQ2JHd2dx
T0l0WTNDR2w0NDZDYVE4aTJROWcwQXZtZ0pPbkJvQUEwZ3UxN3RzS3RLUzdENHVkZ0NZRVJ5MlFJ
Y2VDWC9QN21CVytnLzdEOVM2TW41MENTMGVBb1FQRGNCam9wSUE1K0VjeEVqTHdlUmpYcTBVYkxJ
amNCeHNHeDJJWnZsZjBBVGp6LzZxeXBBbVk3YmhyazRhaHNJaXM2Y2NYS0hkdWVBZlVnaytSV1BD
TGg0MmM2ekVlS3lKcFJUZFJBT3FCYmwvV3EvdVQrcStGeDNGb1RJdUN6YzYraE44ajR2ZUdqdUFu
aFNFNWdLbmNvM0EzWHdZbHEyc3ErbG1QNHlFT3BxRW9HME0rbUdEWXVZVDBwS0NGSGdMSEt0M1Q3
VDlwOEdjV0grbjFVd0dhOFg2a1F0Mng0Q2VxUGV4ZWdUNm8vWjRDcjMxM1BIZGdyc1MyWlJlTGZw
S0lmK0lNRm5tVm13eFE5QWhpdGhZVDczK3AycytKSVZmcmp3aUhucEFaclNzcjlDTXN0UVhQMSsx
KzUxME4vcThFL1lvZWtNTjlPTUZ2aTVMdmtSRHN5OXJnRkNPb1BkcGdhUUlXQlpqZjVLQ1NRc3pa
SjFpdlR2TG9rcGVuNnRzSkFWTkQwTkZxYjZHVUdnMkltNER5eDlQbjcvMGRtNHBBREFzbEp6VHYr
ZEtOckFQUTB3eXlTbTdiajFSUWdiQVhzUmE0UittQkp6cGFRbUhMbXkwQkxvTCtOaDJaUmNhOHVV
YzZQMzdrOTduNDUxZnZUaWVBRThCZFoySXRxRkVLNm9PSklZUHNpVTR3b28xNDBPaCtIL1VDKytn
YXRIWWNPRlQrMnkzQVl2RDFyTS9mcHhkVWNzQWk3MGMwT3hBRVA0NVgvaHltRTlYZW9DMHpmWWhi
Y3FmYmhzMDlIcHduS01EUjZnMG1tWXlLdGgvVWNMbDlJVEdROE4xUzZzK2dBMUh2UUNjMnBsdVB2
TjJCcjhTeVp5Znl4UFAvVmhDaTFMMUhXWDJDUUN1QUU4VElxL3NCWWRBTlptVEl3cXEwc2IwSEl6
aGh1Z0JlVXBCWkxGeUE4eStFRXJzQlVZRFpIWU45UUFBb29Rd093cyt1UWxoZEVTU1NxazVRc2g4
TFNZSTZMRFMxQWJtT3ZMbFJCcVFJZUlUdk0zNitUUDYzVmZFNWhGQ2xDVHI5ekV5VkZ3UzNTVFFC
eTY2RE1IQitQSldJcmZnR25ZQngyZFRib1BhMlg0OUdhQlZsZVBBN0NGeDRpYUdpNG5zMGFMVmpN
R3Z0UFREdG1PNFhFRThFNUtiLzhxWWFpK05IbDYwTGdBSUNjVUNvSlBWZWlZRzZQeHcvWDlWRk5W
YkZuOUZOUHpYb0lSRFR5emNwUkVZQjVGbTFFUVFuM0tSaTl3S0FwUjhUejQ4U3d4blYzcU0wcTda
aHBkS3ZyMHpmWStnTzRvUWYrRUdQRllXL1hmNWh3V3NVZ3hpQmJTaEdvR0l4K0QyZUgxaDJFZVIz
VVFNSDR6TWFVS3I0MDMzbnprU2tmUUFEZWxGYkxPUUNhbHhkeHZOOG1JbmhQYXM5Ynh0R0p3MjlG
eDNZODQyOU1BUzBmTDMzT2VvN3FGWmVpVG9DQzNCL1ZTTll1VTBmZ0Rua2h4R2dNRmR4aVlFWTdN
WWVsK09IUEgzMElNZVZGSzFDNzlsK1FkWFZwRnFIbE1BWEVmM0VZRHlma2tHZE52SjhmM1JBWFUw
anBnTTdqTU5BNXlDcnRmek9pY0tHL005YmdFa0VqcXFQUERFY0RmcVZ3R1p2NnpjTzlhdkRmT2hm
NE9tTEZkOU9MQkhIZHhwNTFIdk9CbG5Bb1Frc1lqQVNBMXhuSWhQc2FwVENQamJzR0IyWWV2cFBw
Z003M0VZZVNZSWZ0Z1BndGU2Q1dlc1ZCQjlRRWdmbldZTWdvZUM4cWw2OWJXb1JJcVlIdlNJdi91
MjZiai9qZHFaOUtTR2s3NEpSbzZRUzlQdVRpU0htNlo2MmtMVUdIMFVPNHJ3V3JodFJFVGtSNGlL
UmRJOGdpSjJEMm5VQ01qc0EwVFhpVkRiOThOQWYvckNNbGFqQTl3ZXNXSFpyQWUxZGx3UnlWSTJq
eDRLa3lVSFN4N1lEZTZZRDR0T0M2WFcwMXB1RWRBSndhRUp6ZjF1QVRIaTZabFNDcEJRc2NzaDZD
MXhSY1dFRzRiQ0ZlS2NBVmhWbER1NTRKUUlrVFQyMWhwdElUL0FmazBrTWNTOUJLZmpCSm96Y0RY
Q3J0Z2JXWHhiTUF3M0lOUUl4dFFKUEFHd1htWWFCYlloNFNDc3VLd0xPQVE1YXdLc2tDTW1SZzhQ
M3h3bEJmYm9zUWFEcXlacUJreVFlMUNMUUFDb1RnTjRxYnlIc1B3a1RpRjJwWWFqNk1BWEJtVW9z
UUhuVUVZQ3NCTDNNVzM5U05LTUo1UGZvQnNUMzNEVkpDRWJGbkJDTU9rSGZ2ajZYcTh1dytkZ1JJ
aEdnQWlVcWY1UWdLREZ5aGU4bm5ZcmxxbjlzRzFHb0FmaXJ1YnlnWDRIKzhJTTFDbVFyTUZBSjVF
eHpLSXA1NG5Qb1ZVMkF1aDZlQlNoRGxUVjR1NWM0SEUvZlZ2akZyc0lJMElrNlFYK0lxNjhqQjE5
emlMb0tDMjdGWWUwZ0MrajFSU1MrQmdCN0F2QU0zbThITGR5NWZWNjBDOFJNVnVoRDFpZVFCMzJN
Q0NxMFFQSnV2dXc1SUhGL2dlTUt3T1BkcG1zeEJ3VkVmR0VPZ2VpbmNKcU5tdVNGSVBoUHEveE04
MUNXSUlpK2dDRkJxRFgzUVBZZDJPY0NSbzZHWkJvQTNBTSswMGFlc0FPUTcvMlBlL3ZCQ1hvZ3VE
NE9CRDFXZlB3Q2x6Y3VpMTJBdUgrZ0MwZ0V3VzcyS2ZqQkNRUkJyMDVEMElRYzdOOFB6T0NNZWhQ
V0szODRNUFZESlFpbTd5RGRvaVJUSXR6ekZWL1pPWDlzWUZldFAwZnNRemI2Tzd3T29GanhrODlZ
b1FYditCbVNOK3lZSFlPK0JzRFJBWEhodUpYc0VGYmRJRUdaUVdVa05WTnpHQTlOWlVWQklRTDdq
QVNSMEFjbEU0UGI3Sk4zQk83Mm1HOTIrbzhVRzNueWJqK21BU2gwRnNMS245R1B4RHJFY1MyQXUz
NUJ6SE8xQmtzcmlJSmRwcVdqS1Ixd2xwUjRmTjk3N3JacUkrWGJZallEZ1ZEcGNZUWFsT1lLTWl1
UWJCM0c2UHUvSGxNYmk5YTBFTWtrc1h0anZ2WFRmZ01LQUVaUk4vaS9PN3lEOERhMlMyQmRoM0lD
V2ZwOHl1TWtZbDVhNGRmNHZWV3Q0VUYweXlxRW5hVDZzd1l5V0I4L2oxMTFZMUVSUzlvQjBTTE10
QkdERUJEMVBFSHd0ZGpVRUFIbnFtb0hVNHdDREFvQVMrbEh3dHU5ZVFMVUFnbXhWdkF1TUI5Y0VM
TVYzbThFVXRjQllZSTlua05JRUVKWXJRZVVIZm56elJ5QzM5ajhDZ1NraXIvRTBQMm9kbkFtQXFE
bkRJaHFydFY5QkROUzJQT2p2LzBwd0tyNnoxaC9QTXozdWY5eWtGWXE5VHRvQVhTd3B6MEhsamR2
QkNWQVBZNnQ3b3N2NmdGaE1wa1gxM3JjZlhRTUlwdVRzZlRpYmtmT1BSQUMybWVMUmlwSTRtRFB3
TUQ1eCt2MytFeStxRWZBQ3dvVUVrS1FTTVp4WUpEejlSNjhQeVA0M3l2bzJhWWY4ODFyTlFiWmdS
VS9qcDgwUW5XL2hkWHFKeE12Q0Z4WFFTTkhwRThRaUY0WEkrd0ZmUWN3N1ZMMk1kN1JSYWpzS2do
MkQrNlNMQUtQRjM1NisvN3lYWUJUVWdGeS8zOFN0VWpGSHdlRCtpaUhoOC9MVi9pL1RTdkdrNEw1
eDdGNkFzSUtiZ2I0QzBZamdkR1JJVG9HVXg3Y2dTM0pLUDhwUmNnYWs5NUJKR1FiamFKZEJZUTFx
SFluWUhMOEY0NVFnSHgyZ0xNUTJjRHhCRC80U2VSMExTRGk1WHpQUU5qTTR5U0UvSEdHNmcrdWds
dExOU0FSbjI4MUJQdE5PNzJlSkxqZFg0SVRTRWdwUXZKWUZFVWcyNGYxcUFZUU5RZHh4NlEvUmNC
ODVqOWYrMDN6ZjJRVjMzSURQSGVnTmdQQUJUZnFGUjhjWks5VEE3L2xsMEVRYlVVSFc4R3IxZCtN
U2FkaWErTFJId2h1bnY4N3lXb0ozaC9wUkR3SkFiRE5RUUZkMlAybUg0a1Avd0RUL1plTjNDSzMr
Wmp2Z1ZwdzRyMjBBTWFmYjU4ajROMVVNa251ajZpQ3g4ODNQVTlnMlZIVkg1SlgyZUVjUGdoU2dS
QkNLUHpLMFEzZmtud1BOMEhrMEN5QzB6Qmt6Ly83ZHVFZXRnRmpWdHlwQVNESTRDc2tuWUpnWURo
cXNCeHh5MjkrZXl4ckFaWDc1RUVmOGYrQ2tPY2lqTURESHg0QVNZR0d1OFdIZ1B3cEhKYzBxT0c4
RmdGVHVWazBjUlpWZVBGd0hFSVVFdTh4U0hvTDVxV2c0STcvSGdPS1hlMmRjbnUyU1NkQ0dJRFRB
K0FjeFkxellMNlE2QUFGdSsvMUd2aktQU2VFb0pWM05pTTREejlDNm9Xa0VhditOV2pQV1hOT0lr
S2dOVGkySThMZUJnYVpISnhxckM0b05Yb0I5cHp6TXdzL09XM2doU3lRSmdqYnlnT1ZFRGhvajRu
SExsZDhIUEQ2VVVNRlZMSWdLclRMN2NGb0JSTFFnRWRYSXNlWjIvSGhGUEtiazRkNXRZV3d3UjBu
SUZRU0QyUDVnUWhzNm1lVmZCK0JreXoyZk9Jdlgvenhxc1NPRHVBR0lPTHRQTm5tSVBDcnY2S3F2
Z3ozcTR0Q3dObDlsV1lmbnNkSGoySFRnUXc1SUJId1VMbWZTdTFqRVYzZ0RGU3hUQm1xU0VWcWlZ
SzJJa1djUmlBa3dWL2N5VzlZaHFIWER3OWRrTlFBY082SEZOSlQ3b0NoZnJQVVljM0tZMTd6QWQr
ZXZBd0YydzVTQ0tMVjRFdUNFS3NLZmpCVldIdTlROUFyaDRDb0JxRU1XWUJzTlg3WWdLUC82OXVD
M003L21PT3oyMzJRVCtveDRpQ3lKR0VGUDRvQkhkK0dWdlhCd1gzNW5xcDdxZUliVjZMNnRkWnVi
M3VlSitnQklLZ0M2UzVnT1FGeERvR3IrQnYybnpxYmtuZDdwaC9FbVh6TzBvK2taZGMvd3F2UWtB
T1VmZlZNekt0WWd4NVZvYjEvK0hBZkNkekhTaVhIZW5YMzUvMkpUcjNLWjlSdWoybFlpTWhMSUZv
TnlNcTloRnJvZVlNVEUwYlNMYmhiNGwzWWxGUGE2aE1kMmprOGRtckRnZFFDbkM0LytBTkZsWVRC
NkFUbHgyR0RHWFAxcnZMK1NuV0h3K2NKZXM1L3JSV3Q0SDJwdzlHa2xENHVTTXB3YXNJUWlhWVI5
MmdJeUZYNVM4ZHRSWnQvbkNBSDQ4VlhXM2hSRS9IS09zR3F1ajhFTTg1UTljZmVBVjRYd05HQWxt
SUZJd1BZcmZMS3V4VjQ3NlJSZXR6Y2RlQXNSU1poaUhpekNLRUlPSG4zRU1PV3k1WDR1SUpuWFg2
c0ZpQkZMYUJtL1RIT1FBa1ZKSzlqNlRLd2lTRFRCV3B3SGtTUFFKWDdVOTU5dUFrb2FUVXV1ZzZv
UUNCejFabHhtME9KU0lvSXcwNE0rN3pDR3VZaXpuQ2ZId3c5QU42SXIrSFhBN2xmbjJvQlNKMkZP
T2g4U3pJTmZtY0F5SVRxOEpYL3NPTVB4NkE5TGVZdFZmd2dDQlpoZHUyNU9COS9YbVdXTlBVRVBE
NWRVdUo2OHdkMUFxRDIrdzFQSTlLeEU5Qlc1dDN6L2lnZFlHV2lMN0wrd1B2OWpnVlk4ZjBaY2JD
S0N1TEFITitjNXdhNjlacHIwSjl0MktucEFHenlpQUlQaUZhbEo4L3hYcnJBNlkrLzhOb0RuV0NQ
TndGSnpmNURwVmtIdGU4aHg3NlArSFUxK0hFeXRFZVNFSXpBc3U1cjZ3UEpHdTZvTHo4VnJLb2ZY
TGNlK3l3SUhoTmEvRG13OExycHRXWFo0TktabTRwci9RUTdRazhlaE1yUHRBRjdQUUNEMzA5UWdS
Z1JaTUtnQWJGUkVBZkJCWE5hbGJIQTljRUhNbzRJZ0lVdVBqakJXRVVGRVFwWVRraFZPNDNlUml5
bkp3OUpqajhUT1VJbEpFeEsrMHdBNGdXZ1F2Y0ZCSEFjN1A0L3U3OC9GZjRDQzVBVEIzUDNvVXdG
Q2xZZ2NBTGN4enAvQjlFejREVVY4UmpCYnNDQnJNSDRkTE53SURhQ0doQTZvM3BYa3NkQnZZQnNr
dHJYRGdOSktBRnkxWitaR0l5NU5YZ1hvQlQ4YTNaZ1ZTUElVQU1WNkRqTHhoc1Y4d1g0bjRpYmJP
Tk9iSE55Q3I4WjRGaW5ORmpnOHppaUY1elNWOEE5OXU3WmRmNU9pc3ZWYUFBQUczVkpSRUZVL2tJ
UEFKTFdYM2hVSUZENm83TUQ0V2tISU1YQms0SWZ0U3JQTkJKVmswT29DN2ljZThIR1M4WEJLRG96
L1lGQkxhUWkzOTJsR3BDTUpmaEQ5eFZreDVYYmo3M1A5VjRtMWowdjczeDlGakREUGxZdkFUa2dG
QVZXY2ROdkpCYW1saU9qQXdSVjBFcGVSeW1BZTcxN2tNWVJ5eS9qNUZ3RkJYMGZQN0R5eDhncTh3
bjJaWGk4R2ZHWVIrbEZjR0pTeGEzWTg0V2d6QkhldGxVNGN2S1k0NFBzNGlQOWZzZ3NQR0VoUVRB
Y0hxd3dHQ2o2MVNvUGV4S3dhc1hGcXR4cThxaEQ5U2l4b0JCWWNKRUROem1Jb2kzSjdRa29KQWN0
VkhvY1RWcFBCQ0RoRWxBdk1ESzFQVC9TcTNEd0IveWdteUI5R05oWURINHNvNEZveTQ4a2tQdFpm
WkV2MVBRVHhZcHlYMEVJM0J1Ky81a3JjTjhmZ3dWZHdXdTJKTlZOV0FrK1BjT09QTU5kR0Z5QVo1
QWo2Z2ljZ3pOZnd1SFpnMEhyTHhCV2ZqU1JsODhmVkNvL2FwWC9JQnJJdmY2NVp4dEVvSzlCZWM0
S1pJUExlNzZvc1FuczQ2TndXMHBVUENQQXlNYzRBL0tYT3daekZMR2JBcUQ1eGhoYmdCY1dmb0pC
QWxhcmNDU1FnZFFKK01vdm5paDRnalpRVHc1MXJ6NTg4eS9aZ3hWVUVBUThzb0NmWDhPUjI2Snd1
akNMR0ZBTXNPam53R3JsUHVRdzlEL1BQdjhCWVZSN3BHL2VlRnRRcHNMelIyS0ZJOFN3S2o5S2xY
KytIZUxPUHVTQktyS2VIQmk3TDRiK0t4MTg0K3B0QXA0VHJjc2N2NjlvQVJWWXpXZ2FLMDFIMVgw
SzN6TlNtQVJLdHhYWUh2d0p1VCs4Z0xHR1dncEhjV09tQmVsakZCMkNrZzZ3aUFZT3FmeEVLM0dN
Q0FqNmtJaVRXZENCQ1hoa2pVS01nSmNMazI3MU45dUxTYnR2dkswUzY5T1hBdm9BNXo5NFZzRnVi
Ym1adng0UUFuWGdCbkp4RU55UWp5Mzh3ZWY4MXVQaHhNcFBKSVF6cjVja3VVVEtlMHdaeU41N2lG
VFdnYThHdkN3bGg1VXF2WWdtYU5WOVhTeEVWV3M0MGtrb3NGd0E3MFJnTk91OG1MWmZSNndEaXdS
YTM1eTdqMDhOa3NxUFFoY2ZrUkJLL0o4Ujc1SXorOUM4Z0pwcXp3aUllWklJM1FuWU9rSldiVkVJ
NWpOdUErbzJCd0s4Mmlmd25wU2dId2FDK0dOQWRtVzJWWGZDK3ZQdTZ3UjZsQmo4NEM5V2Z2aXZa
eVVoWk1KbEpoalN1a0RsRkozZzRBdkdKZkMxaUVwUUovQ2FFZDdHOXdkczdwNzErb2RydUtySGlw
L0M3UmRzeGVWanpJeGhvTmtGR09XLytzay9ZVkFHdGx0ZnpaQUlmeml4OGdjSGhaQ1hwY0dOMnU2
OXFXcUQ5T2xSRkF5N3gyZlFCaEhVaUVUQitEb2NxdkFyWXQ5OGYrQUVBWEFwc0VtRWNOTEMwdDJ1
UEhDcVBRSVh3SFlEZkk0LzkrOExNcGNocXI1SEszOU1KU3JCWHdudXROcWpvdmpIRmRxK2ZjSExw
N1lMUjRtR2dkdVc1aEZwQVhVb0w0Y1RUdVc1SEpTa0I1UEMwUzdBKzhjKzgzN0R5b00xSjlpdi9w
by9vM0J1bmxEcVBqT1NPL1liTEZkK0ZHeTlzeEtGZVQ4YituTE5QcmtBeUQ1M0Z0VDI3eVVTMzJ5
cVVhRUdUTUJpQVNHY1owRm1LOG5XeGJ2akMxcTZXUUM0VmRXZEFjQlk4ZUZvQXpJckMwYjdXdDh3
bFBjSWRFMUZoVVdlS1UxSWd2OFEvMGRsNGsvTm5ZU3hkbERvbjhkaVVEZXVRQjRjOFhWemNhaFJn
eXlabU5DK0xBZ2VDZlNWQUxkZTgvdDFEQ1lhd05vZVBHVDgzd2xPcEZVZE9aS3d4bjg5T3NNRWYw
WDhDeEpDQk4vZHdLYkZ3a1NNZ3gwQUNKSkRKRDRpQzFKRVloNlhjRXFWSHB4NCtKNEk0VWlBbDI2
cjV4NjRzdHR2U2xBbjNMQnVRQ3o2ZWRVOEMrSjVlcEJyQzRZUDUyRUZEZ0hyQ3cxQjBlVTliT2FU
Z2gzd21ZdlFWM09xcWNmNTNYblZOWFVCRUxYMXh0U2dGcmlybElJNWQzSEZ1bHhCQ05FZlp4MGg3
SzJmMzRYd2RIcHVZUWNndU4xODlPdy9uUFhjbGFVY3FNSDVsZUNYaktPamJ2M0YwYTdpMlphUkht
QmU1enduaEE5UzczNlpDOEFIOExIa2cvVDV6bllnbUVTMWR0dXpHbzkycXdISXF1aVdYKzRLZ1ZM
ZDh1dHY5TWwxQlFOaEVKVy9GT2d3ZWlUZ3VDVW9RSGtFd1loamZRSWdtOGVBelBLekhxQUc1eEdp
aVB5eGVHUlJhWWV0VXBEVnBIVkMxVDliSEd5YWtuYi9UUVRudUc3ckRZd1lDVVQ3L2NNanRJTHpB
K0dvL0ZQdzU4MUYvbVdlVGtEdUJzQkNBSzhraStBMjluTXpQbjRSemp2NlFWN3hXVzRmelFGVXhi
OWpRUTFxYzI4a01pNG1EbDFOQnI0dXNJc3o1bHRacU5tN0FlSlhmdVRIZDduaW9MRXlQQklTVSs4
L3RQMUFDNElsL24rWUdtamcyTmlCUmRsNnlDdy8vekc1cGg3YnFhQnV6OEI0Vk1VL1RxU3NOUGJ3
Q2VaQTFjZHh5RzlTZ0t6UlpQTCtHWEZPaUgxL1NGWjl3WDhNM3pVZ3ZIOGE0ck1CalpqL2gxVzlN
cndUaU42TWxzQ0tpSTRneWNCemdWL3hVYVFHakdESHdIaVlpMFZJemVFQWFzQ3BOdUw3NkFDN0JJ
RWw3aTRBSXhuQWZvTXhrMzVlSmJaNjh3V0VVQ2hzOElQei9FRUU5QmtVb05BNFJDV1NMSmtZMWgw
WS9kRzliVkN0VVZQZTdRUmh0U3RYRzRuT0VDRGZVeGM0VXcvSWs4SmtBOW85K2E4M0lyZkhIMTFF
ZEZVV2M0cGhOZ1ZGV2tQc0lIQm5DdkNDWUJTZ3FFTjlxdG9YdXdIaEJ5WW9KSkE3QnhJa2tSd3BE
R2dBSG8rdlEzWkdPd0NGSkNKS1VBeDRNQnBGWld2UmVlTGd0QkJrRERRdTJPSnhYYTdTRS9QNFpp
VVBIQUJqWTFEc0ZJaFBBYXlnV2V3aVhLNzJoSGpvdy9rOGdDTDZnS0VTOHFjRFo3QStFaFlsV0NQ
R0NYMXdYSXd6a1FFS3Q4Y1A2aXFrQzBGRWhGai9aWXR2WEN0d3VCTGNEVDV3WE4rOUg2WkVJa1R3
Vi94L3M3OGZYRlgzc2lXSEVLckMzdHc3RUZaMzFMbDd0dGtuUXlFTUdnQXFDYVZlMWJHazhyOG5G
V0NRUVIwaDdDWTBkc1UvbUllSXVBMUFHQ28wMlEwWVZYeHViMzZzRzFRZ2ZvMENCQlVYeGFwK0VD
RkV5Y1FWeVZpQkVCRlB0MTRUSzlyWkhCOUV3TUc3RFBYT3YwT1ZIa2R0eDdPU0NYZmIzYXY0Q0Za
R1R3UUJ3VDcvaEtQSEU0UHpwSjRMNCtGTTlyMW44QitCKzlSOUk0RnU5YnJZVVpnQ3VuWldOeGRR
Z0lzOG1BU0JRNEY4aEpwRWlhZjRHUGloazhGZEF4aW4va3lialpqVGorbUFReTZpaFo5d2hEdkhB
V0I2QktyQlhRcis1U0JmcVBhSU53aXoxMlVJd29UbWJQQUNaWS9mc2hCQkJLTmxXOFpDSHdIL2NW
S1NPWk1tNE14azRPd0U5SmVCK0VGa24xSXpjUFFvaVNCNHZHZ05lSlNvaWsxQTdtMFRDbUUvSHJn
Z0IrLzFNMTJDMVoxOEFDR29JZUgxcEgySWhBcUZXZ0JxK2tERkVXQXZBM1g4dHBXMGNuU0Q1V0FP
cmlPSGhuWXJhRjFlTFRrUzhQL1FzSFVCZHRNUG5Pck1hQU5KRTlBWmlhS1dJSTVVZS84UFRIbi9V
Y0NTVGdJRjJ4TjR6ZG1BUVlJQUtlQkZsNkZpTzBhS2ZxNWpjSW1IZlB3VHhjRWRSbUQzTGNGb0F2
YTFIZGptOVVnR2dnSTlZT29Qa09CWUxzVDhIbEczbnVjTURHa09PSjhDa05PRUxkU083RDVxcUFl
SllCYjJHcEFCZ1JpMmd4TElUZ3JPUTlDOTM3SGdCKzBpN01lUngzZ2ZQV0NYTHRnYkxKQXUvZ0NG
QlB6Ulg4ZUFESnFDdkEzRlZpQy9CbE9RQzRMWnlyQnE4QmRRQU9VS29LanFSN3Y3RUZmVkZNb2pQ
Z0VvU2xKZXNOSWVQeUxId1c5TlJncTdFNkh2VU44QTB5ajB3eVdESFJaM0oyQTFqSGRNeXUzaENH
d1NEd2RSaXI3aDlWUDdBS0xnUG9NQ2dLemlPRkx0clVtOGFJRkhsZ3hZZno4V0JZVVU1NWlBWGF1
bytldkphSUsvTlRnUkpNOXNVY1pSemNDbk1kTktNSmM3dXNuQXlycHhIWWtUUkhLK24xSHhTMDFM
aGVBSHFSV3dLSURxTHZRQzArUHVwSFpnQmF3ZlZHc2luaVRWSHdaSFJxYlVJL0Q0Q2QrZnRneUxB
UjFlaGtJaXFhS0Z3N01KRXdVSXVLNXpzdTRzdm9GWUNGS2dCSlpBQ0J1cHBPSWQyUkRrUFphczhI
OWtVTGNBOWEwS1RDUURHdHBuelQrUk1KaU9Hc2VIbDRCUTFDMjlBV1VYSUlmL09Jd3dxb05FSzNT
Q3VBN0ZSaUJyRTlCNC9QY3JHSjFPUU5qODNGNFhib2wvVGdWSGZNaUlaTEFkY2FWa2doOHNMcmQr
bGlOUUgvRnFzTlRmajE1bTFKMFgrZmZadXEvZ1RZN1FudklmSno2VXpCSkxzODNJdFFwdDNSZlp6
NWl1R2ZOUGFqcG5nVW0wUjhEb0E1akRsenNPVEF3Wmp6c0MzSmp4ZzdIOTE0UGpsY3NrR2RnaGd4
OUhHNE9PUUgzNHV3UXl6ejYxLzBxaVlOUWpYeEVDdVdZYkdNL0RyanRQSC9Ndy9LK2dCTExTQStj
RWZQcjRNcm9BcnpjRHV5YmJyOFpjNzJpMlVuemVIblRnekQ0VWc3OFN6SXZDb0FSVk9ReGFGRlIz
VHpXbmtrSFVWRlNoRXVxS3habkt6NHA0WVljZjhaaFlodXU4d0ZnU0hjdXV3Q0phZ0k0YmdjaEpR
Sy9xZTljL1JUNm5HY2c2S0dSRUpwYitNSTBFWS9iMGpjc25pM0FKQmVDUU5zQk9GVllvQXBjTTJB
b200VkZnSVJkSHBlSUc4RDNZYXhCRCtxQ2lRK3JCT1NWbmNpOGh6a0FHMXQvcGdIQTR1d0R6bXU4
eEZLa2trSXFDZmtJUnMyMDRyL2hpRGd1dG9BQWNvd0JNWjkrS1MwQ2NYVkJPSEN2Sncyak1RU0p5
ZW9lRXhGMkR1VHVSY3VXQW85c2VmeVVRNi9vQmFJalB0aVJIMUt2UUt2eWdBSGIxNzFkK3ZjNEdS
TURQb3hOL2tMNXB3bFZoMW1CUTFxdVFKQUo1ajBUZ09BaXMraDhkM21uQzh4VEtFMzQrOHNETmp5
VlhFNm5GTU4rSDM5VFFEbW9jSFNjRU52Tjc0TG9HU2NHVTRmN2c2SUczbjNDM3FuRzZKQlMrWjV0
SE9PelJZUXgrdTdNWm1BbDBPU3NSTEFTL1ZJS2ZSQVdVOTIrMTJhYVZQa3NHREJXUXVDTXZnTnky
TTJNdDhFd3Fiam9zWkFlYzV4TEVBbVhtY0ZUSGlPV0FSV2dscE5wamRFdEJRUnhKSlU1Vkw1LzdG
MVg4NlhudFhnVUs0cStLZ2dzVW9JSUs4b0Era2d5NCt6TGFBQ3FRR1RWT1g2TUJXZGVoTDZCeEhu
K3RseUJNREdBcXVmZDdXT1g1V1RKd0tZRGZYSkpQMkdYRFBrN1RqNUVkN0JPRzdETUZhQlJBSmdJ
LytIMk5nZWIyU0tiMHprb0dsUUJIa2VmRHI3eE1BNUhaZUpQdEtJenlBcEk5Z21uUGdmMWMzbXVs
ZmhlMGdGZWtEQ2RORm5yT3dpNEdzNmVUQUNOakIrVWVnY2dvam9nNFYyNVA4YmN0UllZNlJMOEFK
a2xFOUFDRkFHWmRCRWFoZDRkNENtZ2hGaGJ6Y3dhWFlINXFUbFM2RFkrS2ZOSDVBdnpqbzJKSjBw
b0RrU0NNeExuNzNIL2VCK2lmdmd2eUlGQ1dBamk3QldDOGhkMHFqMEZ6aU1kclM3MEJsVmJnYW1J
Z2Ntb3RHWkROUHdtMEw5bDVpSHY3V1JvQUZ4NTdTY0ZTMnIyaXdvdDhvS3U4bCtUT0NPZzJtWjJu
RmRqVGdPRlFFTnpLa0o4T2pFbnNFOGY2QXp5WHdUNk1ORjNSRFJudWowTHdvNndUbEJNREl5cWF6
NkcrUmlMSk1nL0tVclFWL3JoOXVIMHRXZHV3b3hta3kwa1NNUStyblh4WnNHYWRnbnhmZ2sxcENu
c0lzR1lsdHZmZHpUT0JJY2xJc044TUxBR2N6NWdCd2o5NEFFOER1QzlNb2xpcC9KR3dCNTduUnlK
aXlEM3B5azZxNWlqKzNUelJMb2hjcXlxQ0VRQlRlcEYxNStXVm1XOFNFcjVqTVVVa3gzb01Jc3JI
M25kd0FRZ2FuS3p5TXBPSk54TVFvb0dCWXdjQnl3N2F4SWhnUFJHRXI2R1NHSmhrQUVMb1ExWVJn
K2RQZUQ1SUlSRElxcTVQQTJKaDBScTBZY1M4WEJpMGdoR1JGcEN0V1RkdW01K3lMT3NRZjJFdVlZ
OEFmbmJRWkRnQ2pIeEJTS3dUR3B0OFFDSURWSDMvNEg1T3dFdmxkaGxpSU53QUZMc0V5eUlmR0tW
K3ZtM2VFZWhWcUtUZE54dERpUG9MSENSaXV3VEp4Q0VDeE1EcURqVHZaNjNLYVBLdlJnVjJpL0Yz
b2htODhWOExOOGhnSmNYRDVwVkdJUFBObjlFQnFTUUMwSTRBTXhCVWNRTkNrYXJrRmdTbi9vQ3M5
R0NWZXA0ZVVHNUJSQU9jUU9DV2xHU2MzSWYwSUZxUmZVUlFHUnJLZXdQS0VKOXNMbklvd0tDY3cr
ZjQ4TjZVSGpxWXRnSW5hQ0NrQmJQU2o4VkVrQ3IyZzhVNDN3WTF4WC9CTmt3cmVRcnpnK29hSmdo
T0NHVFU4UkJ4dUlwNlZGT0dvRVhnRXNCTElnVjZnQmd4b0xTSTVDZ2lZTlQrR0JIc1UwMUd0aHJj
ZWlNVXR2OUtnQVlrdGdWTmVHckJidGlPUVZpOXg4V2ppQVc3VU5Vbm00VmV0N1d0c0ZnRENEWUV3
US9FVkwxUG5RZi94Q0RMVG93VGg0YzRIUFJEb1FhaXdoS0lBYWU0Qjd4Z0NCeWRJL0NEUE9yZXZL
MEZSNHA2dzNWZm9YZ1FpQjNUMU44WTFQQ0QwWDE5SnFjSEdmekI1V2tRRTRwL2tkZVhCY0VWVVhF
SUZxU2lqODJsTXlyV3EvN2MrTEZIQTd6NS9kd09ISGc4cy9ZOEMyQ21oYm1BTHRhcmUrNFVXTGZi
MjVCbVhBQktBQlRuaUM4Z1JBUDJ5dkRBaVVBc0VsbnJ4RnpJVFFhL3NBRmVjQU9ZN3pQVi84ak1R
SFNiV0FpVVBHa1FOQUJodzg1eHJTQ3YrbU1TekZSOCs3bWp3MDFBOGY0RjhTL3RkNGpuREhZeHBU
OC9PRXlWM2d6MitHVGZkQWVBc3pzd2ZKTkdsUWhFSWpCMEJsczBCS240SXc3V0t1OWYxZ21TYWdt
dnFsZUV3SnduWndqTzducHoxSGRDSjFoUy9tbEJjUlh5RjNpL003TnhxSkZvZUgyN3o3bm5KYUJt
cFVaS0hzVGJHVWMxQUxFb0lHc0dZbDlpeFM1MGdqQVQvVmhCOEl6dkdUckJWZldFejFNekFrUkZU
dGVjVzczMVZkak5RUHVrVmRoZG4wWThkL2E3V1lINmkvVEJQQnpVRndBbEh3dEdIT1FJU3JnYjFB
TVVnREVUVEEzK1RIQWRlUkpoZzU5Vi9Fa3RvZmE5STh3eFZJQ2tDN1FRU0FkMk8zY2Z0elB6ZE1L
NmFBNGlaSTRJTGZZUmJiOVJncUlDdDJBeFZuWVo0a2tCdkhPQnhUL3pOOXliSHgvZjVRbDJma0dD
WDZBTm02RjhXQ2ZxQVMrRXE1QUdjSEpkMklGSGFnVE1IQUFqK21XQm5EWHVjODFDamhzQWk1ZEwy
SzhRQ1lJMWFKL1BKdFNTeEVGWEFTdjdDMkkzWkI5L2Ewai83bkRuL2oxcEhzejlKcjhmTnB4UEJV
QVVVWUQ0d3o1R0JsbXlBaU9SanRBSUdERnd6U1V3cWlOWjFkMXRQaUI3L1E5VmVJOUtlSlUxNi9r
bmtFZVFKRUFMalk0cmtwNzRmQ1ppTURTQS9QZ3ZUL2FUMmdZZ3A1RS9QMjlBS0JRQW82VFJ0aDVU
NFZlc1FGYjBpNEs3UkEyTVpwZ3lGWENFUUhDT2l4dVlNUGd5Mkw3KzQ1ZXpTU0t0Mm9Va1VSbHBY
a0VNT0xTaVhQdURRWmprNjNONWJtek9TeFFkTEhYN0Fod1VFQTBCQWVRUEpJUXprQXVGbE9LL0d0
eUxkaUdES0VCZGxsUTdZb3V4VjJYZHd6YTlTbzRLcDVaMHlBZ1VoVGxKZ0Z6U0Zyem5JSFlJd0tj
Q3UyL0wzTHNDZzZVSTFiMS9DQStBcElWNS8zMkhxT0lqZFF1c0U0YXppcDVXYzFiMHEvUUdJQWxh
V0VKYlhQM3IvTCtBRWlwdy8rQnRrUVZZOWZJTTJpL1poZ1ZFZ0pPNkRaMWtzVnRsWWRvUUFQaFZP
MG9LbVlCbW5BWWNvNERSQ1JCM1R3Q3ppcHRhRTBhdUVSOS9WelJxS05PRVlJTk9RZzJtMWw5R3BH
TlFBaGgxdjZVbXhOUWgyTTQrTG1sVXpsbDBPVGpZUU9hR2xaQUVNQ3JkaG1CcGhhTUJ3QkFEclNR
UWMzLy9IZThLZ0ZFVFQ3cDZCSG5qajJYOUVYc0RqcmdCUzZpaG9BbWNTUVZZbUU0SmdZV0ZwcDF3
YUFRUm9xRHp4RGhVK0h4U25aSHovOUpFWTZZNU1KQStjd29XcnQ5OStVM01jLzlnL05RVEZhaWdB
RXR3QjF5Qnp3enVjWlNYN1JaRUlMaFIxZDVHRENzQkxWVWRJUXZzbGRaZkVKdDVpL01IeDJoR0pa
RmtWVnlLMjQyaUZlaDU4b0JVRnFJUWJrZnAyRFYyWDBDa0FZZ3Yxc1UrUCtJL0htQnU4bkVydWdk
Um5VV2hmcCtBL2RkbGJFSDN1UWxCc05vYlVFTUhhc0sxSE9ZbjhCRUV2Q1VhaXVpZ1hSSUtqK3NH
T1BBNEtBV3o5L3M3V3hjZ0I0K2E2L2ZJMm9zRXd2NHlPRU5BaVBmK3dRaGJjLzVmMGdHaXNXdVFh
UkZtR29JcWd1QVJXc0JRZ1RUb2NETE1UNU9KVVFuaHFkQ0VpZysvRVNoS1NFZ1RWVjBNQk1uejA0
QmNzaFBuTGsvK09hVjAvZHdLekI0UVV0MU5CNnVURGZHT1ArY05tOW1Fc0JBRmlNN0FRaDlBS1ZF
VTc1dnk2OGplT3hyVUM0bURFdVlPMG9McW9TZEhhRUYyZVhZWVNtMFYrb0VPd3BMbVlGT0YzWjRD
bUFlQlRJR3VlaUl3MnhvS1B6REJKVkJYUTVnNU84L3R3d0ErUWd1SWpKdDMrZzBOUUVjRGZVWGdP
NWdzcWxUQkxrUUxkbDg2SzNDV25laXRROHNnLzVvV0FVSlAyQzNWM1JvRXlqaTVuNGI5bEI0dDlw
ejJDQStjQUZuMVo5SS91ellzVS9FTHRFQk9DSFlRUXFHY0ZlalYreWV1UkpYMzF6c0tWNUlHandh
eTl6NlBMRHhLd05FUHNCdU9FaXF3NTdqR2dPdFoxWSsrVDUwQXVNRmw3aFBJYmhza2lPd3NBVHRS
b2M3clM3ZFhycGNnck1DR0pjYTZFTEpvK1kwYmUwQlc1WktHY0Z6NHk4VzlCZHV3Y0RuSzlpTzVm
YWdzS3BwOUFObnZEUHhlUDhUSE55SVZGbzFBTWFzOFFrNXYyWXRtMExDQ1lBWHFuK3dRc1BUQmgv
NUJjbm5lMTRPczN1Q1F0Mjh2c0sxV1VFU0pGdmlCZ0FXLy8zdTlQTHh1c1hjaGNDUjJXc056di9J
bXZnWnp6a1VCeURVQUlyalR2bVNIQW93cEpCUUU0U1VseE14bkFSbFFiSXFrQXJWQUo2cEJCdkVM
Q0NLbGt5Q0RBUDQ1QllmRVBmY1VwZk1jaDNWbjRiaGVZSzRFNjZCeEF4SFNWZDVJTmdFUGdVL05C
Q0RmTlE4SG8xQ29JTkFQUUFXL1FUOE9DSVpsTkZDQjg0WGhvRENoRkJ5SEdqeDM1djlCTGd5aG1v
anFIWWI1UVlYbnVBZWN2dWEwaFplNkJWOWY3djRpYnZndmFtcm1BYzFUbWFFaXIwTFE5aDk3ZVlB
WVZvTS9uV0E2MGk4UTNJZmV6aGE5QnFhYUwzenZxZDZJQXV3d0xTQ0N1Q0x1SldjaDRoMzBnaVB0
eWlBcGhLRUJjQ3U5QlY1d3d6a014SUQ4cmhNd2R3TWhjU0ZnckJUM1JVVFFib0FVZzMrcCtRZTFJ
R2FyT2lvVm5hem1lZlYzbEhwd0EwQWNMV0NhaFVpWHdlUEhXSnNQK0dIMWducC93ZTVLZk9oSkFi
c2owSC9CSUViMDRUYnJUUHNBeWIyTEx1OTNLd2ZDdm41UExBd3JPWEFhNzJlRVFSbzFDTmR3NUlw
cnNBWjNoQXB5OXpsY0lURzJ2cENpaHNSU1l4TlMrSjR2ZEJaNkI1MmVxUmNRL1FYbVNqQVdTZmEv
NUdBNXFFZzRpSkZ0bTYyNEFxWExyU0EyZ3g4cDFNZHFjZ2h2NDFTMGxTcC94QVlzOWdha1FjNEll
MlJUVVl3WWd0NzQ4bVYrRlUxWGdwMTRlVzNYWVo2Y2RxR1ROSHdISUNUd0VlVFBsMGpFWndJZ1A5
Z0RFYW9nZWc1SUhXQ0YrMWVvQWh2RUtQQi9FQWVUUnNNL3BTQVA1d2pXRVVNTTEvTkpSaHdKYnBK
U2dLN1M3ekYzRU9zSTVqQlFCSzlEVjgwWjhZMENPenZtV3pKWGdEbDQwS0VDNmNxdnFnaTRPQjVj
cGdMRllLLzFDdkRpSXRYcUM2L1M4N3dmQVVmUHR4cWZHTnpsWWFPamxmMUlzSFBQdmZmSGdEQW9F
ZUVTVDRaTFpVZC9SU285MS9CalhZNWdnV2dRNEluM2Z5ajRtVXFQckluSE9DTEtPM3dVd1JzZnlY
cHQxbkVJUkxycWNXZVR1azdiaWdzYmlkMXpENGlEUlF0bklkUXN5SVhuRkNuMUk5RDdBRGd4RWhP
dlI1QUpvc29VYnUxRmtKeVlDaTlPaFFFUm9JeCs0QVgvWXFVWFFodFlFd0tONEN5MUhudExNbXRh
QVFwcWZyVC9VQ29MU3hlc3dqQTVVV1BQaTBtamFqVVd4TVRkVnVzTnZ0L0NoTWRtSUxLNUlSTUZ1
OTBCTUV6RllIZGcyR0FnZVlWSE1NSklCVEE3RUZUeC81ZnBnVEZYejl3L2VuMFpqRDhrQ0RvS1BO
R3dsQjAxQm1vV1FiaCtBeFI2ODltQnBvbkdKT3I5T3dtTXUzZHRKL3lsVzFUaWs0RWxVUG1SOVJx
SUkrcFZoRDl5Y2hBQk1RNTFnT0laZysvRys1bUdJekxCMUpKQzVXaHpZamhKN0lXbUxEcEE4anpz
QWFmVVBrQjJXbkZCRjRpU3hrcTF0eTdmMjVydi8rRVFMT3hzMm9VZFRTQTlISVI5c3dkQmxDY0Zl
OW93UEMzWFdEREMwSVNWenNFVmJTQ0Yvc1dkQTVGdTRISnFhbmtwMlNlUUNZWXJJbU5hbGZtaHBW
eFlyR2tVUzRMZVNVamc4ZEQ3K0Q3dy95YklmeTd2bEI5L0hKOTc4enI3LzQ1UWdhanpqKzRFaklL
L1VMSFBSQU9sS3IvYUcwQUZjcUN5dTBHY1c0NUlnaDZKTUptaEE0OS9VK2NFc3NITkpodFhEQzFN
T3lhM2ovc0FpQUdjckV0cXRnakJENndFelNEYzdEOG82QzhySXFBWnlQaytOUW9OTEFaMWhSNjRZ
bDFGQlk2NDhzbVVZS25TZzFYd2svMER5UnlBckJ5TVVvYnlCeWhDY1BuT2FQeW9lZ1JFRlM0ak5m
WUF3K0lIQ2pkQzFKMldEWkJrZS9PeU44NUoyNFdpWHdEWVBvSnlZdUNEMjM4dWx2dXp3dDZLZ0hm
MHNoV0tzcUNGRkdqQi93OEhVOGVlVEVEOXdBQUFBQUJKUlU1RXJrSmdnZz09IjsKKyAgICByZXR1
cm4gQlJERlRleHR1cmVUb29sczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWlzYy9kZHMudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNj
L2Rkcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogRERTVG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRERT
VG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEREU1Rvb2xzOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguc2NhbGFyICovICIuL01h
dGhzL21hdGguc2NhbGFyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX3Nw
aGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGhzL3NwaGVyaWNhbFBvbHlub21pYWwgKi8gIi4vTWF0aHMv
c3BoZXJpY2FsUG9seW5vbWlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMv
ZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJl
cy9pbnRlcm5hbFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVy
ZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dn
ZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlz
Y19IaWdoRHluYW1pY1JhbmdlX2N1YmVtYXBUb1NwaGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvSGln
aER5bmFtaWNSYW5nZS9jdWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsICovICIuL01pc2MvSGln
aER5bmFtaWNSYW5nZS9jdWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19iYXNlVGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL2Jhc2VUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9iYXNlVGV4
dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX0V4dGVuc2lvbnNf
ZW5naW5lX2N1YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLmN1YmVUZXh0dXJl
ICovICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUuY3ViZVRleHR1cmUudHMiKTsKKworCisK
KworCisKKworCisKKy8vIEJhc2VkIG9uIGRlbW8gZG9uZSBieSBCcmFuZG9uIEpvbmVzIC0gaHR0
cDovL21lZGlhLnRvamljb2RlLmNvbS93ZWJnbC1zYW1wbGVzL2Rkcy5odG1sCisvLyBBbGwgdmFs
dWVzIGFuZCBzdHJ1Y3R1cmVzIHJlZmVyZW5jZWQgZnJvbToKKy8vIGh0dHA6Ly9tc2RuLm1pY3Jv
c29mdC5jb20vZW4tdXMvbGlicmFyeS9iYjk0Mzk5MS5hc3B4LwordmFyIEREU19NQUdJQyA9IDB4
MjA1MzQ0NDQ7Cit2YXIgCisvL0REU0RfQ0FQUyA9IDB4MSwKKy8vRERTRF9IRUlHSFQgPSAweDIs
CisvL0REU0RfV0lEVEggPSAweDQsCisvL0REU0RfUElUQ0ggPSAweDgsCisvL0REU0RfUElYRUxG
T1JNQVQgPSAweDEwMDAsCitERFNEX01JUE1BUENPVU5UID0gMHgyMDAwMDsKKy8vRERTRF9MSU5F
QVJTSVpFID0gMHg4MDAwMCwKKy8vRERTRF9ERVBUSCA9IDB4ODAwMDAwOworLy8gdmFyIEREU0NB
UFNfQ09NUExFWCA9IDB4OCwKKy8vICAgICBERFNDQVBTX01JUE1BUCA9IDB4NDAwMDAwLAorLy8g
ICAgIEREU0NBUFNfVEVYVFVSRSA9IDB4MTAwMDsKK3ZhciBERFNDQVBTMl9DVUJFTUFQID0gMHgy
MDA7CisvLyBERFNDQVBTMl9DVUJFTUFQX1BPU0lUSVZFWCA9IDB4NDAwLAorLy8gRERTQ0FQUzJf
Q1VCRU1BUF9ORUdBVElWRVggPSAweDgwMCwKKy8vIEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVZ
ID0gMHgxMDAwLAorLy8gRERTQ0FQUzJfQ1VCRU1BUF9ORUdBVElWRVkgPSAweDIwMDAsCisvLyBE
RFNDQVBTMl9DVUJFTUFQX1BPU0lUSVZFWiA9IDB4NDAwMCwKKy8vIEREU0NBUFMyX0NVQkVNQVBf
TkVHQVRJVkVaID0gMHg4MDAwLAorLy8gRERTQ0FQUzJfVk9MVU1FID0gMHgyMDAwMDA7Cit2YXIg
CisvL0REUEZfQUxQSEFQSVhFTFMgPSAweDEsCisvL0REUEZfQUxQSEEgPSAweDIsCitERFBGX0ZP
VVJDQyA9IDB4NCwgRERQRl9SR0IgPSAweDQwLCAKKy8vRERQRl9ZVVYgPSAweDIwMCwKK0REUEZf
TFVNSU5BTkNFID0gMHgyMDAwMDsKK2Z1bmN0aW9uIEZvdXJDQ1RvSW50MzIodmFsdWUpIHsKKyAg
ICByZXR1cm4gdmFsdWUuY2hhckNvZGVBdCgwKSArCisgICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0
KDEpIDw8IDgpICsKKyAgICAgICAgKHZhbHVlLmNoYXJDb2RlQXQoMikgPDwgMTYpICsKKyAgICAg
ICAgKHZhbHVlLmNoYXJDb2RlQXQoMykgPDwgMjQpOworfQorZnVuY3Rpb24gSW50MzJUb0ZvdXJD
Qyh2YWx1ZSkgeworICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlICYgMHhmZiwg
KHZhbHVlID4+IDgpICYgMHhmZiwgKHZhbHVlID4+IDE2KSAmIDB4ZmYsICh2YWx1ZSA+PiAyNCkg
JiAweGZmKTsKK30KK3ZhciBGT1VSQ0NfRFhUMSA9IEZvdXJDQ1RvSW50MzIoIkRYVDEiKTsKK3Zh
ciBGT1VSQ0NfRFhUMyA9IEZvdXJDQ1RvSW50MzIoIkRYVDMiKTsKK3ZhciBGT1VSQ0NfRFhUNSA9
IEZvdXJDQ1RvSW50MzIoIkRYVDUiKTsKK3ZhciBGT1VSQ0NfRFgxMCA9IEZvdXJDQ1RvSW50MzIo
IkRYMTAiKTsKK3ZhciBGT1VSQ0NfRDNERk1UX1IxNkcxNkIxNkExNkYgPSAxMTM7Cit2YXIgRk9V
UkNDX0QzREZNVF9SMzJHMzJCMzJBMzJGID0gMTE2OwordmFyIERYR0lfRk9STUFUX1IzMkczMkIz
MkEzMl9GTE9BVCA9IDI7Cit2YXIgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUID0gMTA7
Cit2YXIgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk0gPSA4ODsKK3ZhciBoZWFkZXJMZW5ndGhJ
bnQgPSAzMTsgLy8gVGhlIGhlYWRlciBsZW5ndGggaW4gMzIgYml0IGludHMKKy8vIE9mZnNldHMg
aW50byB0aGUgaGVhZGVyIGFycmF5Cit2YXIgb2ZmX21hZ2ljID0gMDsKK3ZhciBvZmZfc2l6ZSA9
IDE7Cit2YXIgb2ZmX2ZsYWdzID0gMjsKK3ZhciBvZmZfaGVpZ2h0ID0gMzsKK3ZhciBvZmZfd2lk
dGggPSA0OwordmFyIG9mZl9taXBtYXBDb3VudCA9IDc7Cit2YXIgb2ZmX3BmRmxhZ3MgPSAyMDsK
K3ZhciBvZmZfcGZGb3VyQ0MgPSAyMTsKK3ZhciBvZmZfUkdCYnBwID0gMjI7Cit2YXIgb2ZmX1JN
YXNrID0gMjM7Cit2YXIgb2ZmX0dNYXNrID0gMjQ7Cit2YXIgb2ZmX0JNYXNrID0gMjU7Cit2YXIg
b2ZmX0FNYXNrID0gMjY7CisvLyB2YXIgb2ZmX2NhcHMxID0gMjc7Cit2YXIgb2ZmX2NhcHMyID0g
Mjg7CisvLyB2YXIgb2ZmX2NhcHMzID0gMjk7CisvLyB2YXIgb2ZmX2NhcHM0ID0gMzA7Cit2YXIg
b2ZmX2R4Z2lGb3JtYXQgPSAzMjsKKy8qKgorICogQ2xhc3MgdXNlZCB0byBwcm92aWRlIEREUyBk
ZWNvbXByZXNzaW9uIHRvb2xzCisgKi8KK3ZhciBERFNUb29scyA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBERFNUb29scygpIHsKKyAgICB9CisgICAgLyoqCisg
ICAgICogR2V0cyBERFMgaW5mb3JtYXRpb24gZnJvbSBhbiBhcnJheSBidWZmZXIKKyAgICAgKiBA
cGFyYW0gYXJyYXlCdWZmZXIgZGVmaW5lcyB0aGUgYXJyYXkgYnVmZmVyIHRvIHJlYWQgZGF0YSBm
cm9tCisgICAgICogQHJldHVybnMgdGhlIEREUyBpbmZvcm1hdGlvbgorICAgICAqLworICAgIERE
U1Rvb2xzLkdldEREU0luZm8gPSBmdW5jdGlvbiAoYXJyYXlCdWZmZXIpIHsKKyAgICAgICAgdmFy
IGhlYWRlciA9IG5ldyBJbnQzMkFycmF5KGFycmF5QnVmZmVyLCAwLCBoZWFkZXJMZW5ndGhJbnQp
OworICAgICAgICB2YXIgZXh0ZW5kZWRIZWFkZXIgPSBuZXcgSW50MzJBcnJheShhcnJheUJ1ZmZl
ciwgMCwgaGVhZGVyTGVuZ3RoSW50ICsgNCk7CisgICAgICAgIHZhciBtaXBtYXBDb3VudCA9IDE7
CisgICAgICAgIGlmIChoZWFkZXJbb2ZmX2ZsYWdzXSAmIEREU0RfTUlQTUFQQ09VTlQpIHsKKyAg
ICAgICAgICAgIG1pcG1hcENvdW50ID0gTWF0aC5tYXgoMSwgaGVhZGVyW29mZl9taXBtYXBDb3Vu
dF0pOworICAgICAgICB9CisgICAgICAgIHZhciBmb3VyQ0MgPSBoZWFkZXJbb2ZmX3BmRm91ckND
XTsKKyAgICAgICAgdmFyIGR4Z2lGb3JtYXQgPSAoZm91ckNDID09PSBGT1VSQ0NfRFgxMCkgPyBl
eHRlbmRlZEhlYWRlcltvZmZfZHhnaUZvcm1hdF0gOiAwOworICAgICAgICB2YXIgdGV4dHVyZVR5
cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICBzd2l0Y2ggKGZvdXJD
QykgeworICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRDNERk1UX1IxNkcxNkIxNkExNkY6CisgICAg
ICAgICAgICAgICAgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfSEFMRl9GTE9BVDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRk9VUkNDX0QzREZNVF9SMzJH
MzJCMzJBMzJGOgorICAgICAgICAgICAgICAgIHRleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBF
X0ZMT0FUOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGT1VSQ0Nf
RFgxMDoKKyAgICAgICAgICAgICAgICBpZiAoZHhnaUZvcm1hdCA9PT0gRFhHSV9GT1JNQVRfUjE2
RzE2QjE2QTE2X0ZMT0FUKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVUeXBlID0gX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJd
LlRFWFRVUkVUWVBFX0hBTEZfRkxPQVQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZHhnaUZvcm1hdCA9PT0gRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVU
eXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNv
bnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIHdpZHRoOiBoZWFkZXJbb2ZmX3dpZHRoXSwKKyAgICAgICAgICAgIGhlaWdodDogaGVhZGVy
W29mZl9oZWlnaHRdLAorICAgICAgICAgICAgbWlwbWFwQ291bnQ6IG1pcG1hcENvdW50LAorICAg
ICAgICAgICAgaXNGb3VyQ0M6IChoZWFkZXJbb2ZmX3BmRmxhZ3NdICYgRERQRl9GT1VSQ0MpID09
PSBERFBGX0ZPVVJDQywKKyAgICAgICAgICAgIGlzUkdCOiAoaGVhZGVyW29mZl9wZkZsYWdzXSAm
IEREUEZfUkdCKSA9PT0gRERQRl9SR0IsCisgICAgICAgICAgICBpc0x1bWluYW5jZTogKGhlYWRl
cltvZmZfcGZGbGFnc10gJiBERFBGX0xVTUlOQU5DRSkgPT09IEREUEZfTFVNSU5BTkNFLAorICAg
ICAgICAgICAgaXNDdWJlOiAoaGVhZGVyW29mZl9jYXBzMl0gJiBERFNDQVBTMl9DVUJFTUFQKSA9
PT0gRERTQ0FQUzJfQ1VCRU1BUCwKKyAgICAgICAgICAgIGlzQ29tcHJlc3NlZDogKGZvdXJDQyA9
PT0gRk9VUkNDX0RYVDEgfHwgZm91ckNDID09PSBGT1VSQ0NfRFhUMyB8fCBmb3VyQ0MgPT09IEZP
VVJDQ19EWFQ1KSwKKyAgICAgICAgICAgIGR4Z2lGb3JtYXQ6IGR4Z2lGb3JtYXQsCisgICAgICAg
ICAgICB0ZXh0dXJlVHlwZTogdGV4dHVyZVR5cGUKKyAgICAgICAgfTsKKyAgICB9OworICAgIERE
U1Rvb2xzLl9Ub0hhbGZGbG9hdCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAoIURE
U1Rvb2xzLl9GbG9hdFZpZXcpIHsKKyAgICAgICAgICAgIEREU1Rvb2xzLl9GbG9hdFZpZXcgPSBu
ZXcgRmxvYXQzMkFycmF5KDEpOworICAgICAgICAgICAgRERTVG9vbHMuX0ludDMyVmlldyA9IG5l
dyBJbnQzMkFycmF5KEREU1Rvb2xzLl9GbG9hdFZpZXcuYnVmZmVyKTsKKyAgICAgICAgfQorICAg
ICAgICBERFNUb29scy5fRmxvYXRWaWV3WzBdID0gdmFsdWU7CisgICAgICAgIHZhciB4ID0gRERT
VG9vbHMuX0ludDMyVmlld1swXTsKKyAgICAgICAgdmFyIGJpdHMgPSAoeCA+PiAxNikgJiAweDgw
MDA7IC8qIEdldCB0aGUgc2lnbiAqLworICAgICAgICB2YXIgbSA9ICh4ID4+IDEyKSAmIDB4MDdm
ZjsgLyogS2VlcCBvbmUgZXh0cmEgYml0IGZvciByb3VuZGluZyAqLworICAgICAgICB2YXIgZSA9
ICh4ID4+IDIzKSAmIDB4ZmY7IC8qIFVzaW5nIGludCBpcyBmYXN0ZXIgaGVyZSAqLworICAgICAg
ICAvKiBJZiB6ZXJvLCBvciBkZW5vcm1hbCwgb3IgZXhwb25lbnQgdW5kZXJmbG93cyB0b28gbXVj
aCBmb3IgYSBkZW5vcm1hbAorICAgICAgICAqIGhhbGYsIHJldHVybiBzaWduZWQgemVyby4gKi8K
KyAgICAgICAgaWYgKGUgPCAxMDMpIHsKKyAgICAgICAgICAgIHJldHVybiBiaXRzOworICAgICAg
ICB9CisgICAgICAgIC8qIElmIE5hTiwgcmV0dXJuIE5hTi4gSWYgSW5mIG9yIGV4cG9uZW50IG92
ZXJmbG93LCByZXR1cm4gSW5mLiAqLworICAgICAgICBpZiAoZSA+IDE0MikgeworICAgICAgICAg
ICAgYml0cyB8PSAweDdjMDA7CisgICAgICAgICAgICAvKiBJZiBleHBvbmVudCB3YXMgMHhmZiBh
bmQgb25lIG1hbnRpc3NhIGJpdCB3YXMgc2V0LCBpdCBtZWFucyBOYU4sCisgICAgICAgICAgICAq
IG5vdCBJbmYsIHNvIG1ha2Ugc3VyZSB3ZSBzZXQgb25lIG1hbnRpc3NhIGJpdCB0b28uICovCisg
ICAgICAgICAgICBiaXRzIHw9ICgoZSA9PSAyNTUpID8gMCA6IDEpICYmICh4ICYgMHgwMDdmZmZm
Zik7CisgICAgICAgICAgICByZXR1cm4gYml0czsKKyAgICAgICAgfQorICAgICAgICAvKiBJZiBl
eHBvbmVudCB1bmRlcmZsb3dzIGJ1dCBub3QgdG9vIG11Y2gsIHJldHVybiBhIGRlbm9ybWFsICov
CisgICAgICAgIGlmIChlIDwgMTEzKSB7CisgICAgICAgICAgICBtIHw9IDB4MDgwMDsKKyAgICAg
ICAgICAgIC8qIEV4dHJhIHJvdW5kaW5nIG1heSBvdmVyZmxvdyBhbmQgc2V0IG1hbnRpc3NhIHRv
IDAgYW5kIGV4cG9uZW50CisgICAgICAgICAgICAqIHRvIDEsIHdoaWNoIGlzIE9LLiAqLworICAg
ICAgICAgICAgYml0cyB8PSAobSA+PiAoMTE0IC0gZSkpICsgKChtID4+ICgxMTMgLSBlKSkgJiAx
KTsKKyAgICAgICAgICAgIHJldHVybiBiaXRzOworICAgICAgICB9CisgICAgICAgIGJpdHMgfD0g
KChlIC0gMTEyKSA8PCAxMCkgfCAobSA+PiAxKTsKKyAgICAgICAgYml0cyArPSBtICYgMTsKKyAg
ICAgICAgcmV0dXJuIGJpdHM7CisgICAgfTsKKyAgICBERFNUb29scy5fRnJvbUhhbGZGbG9hdCA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB2YXIgcyA9ICh2YWx1ZSAmIDB4ODAwMCkgPj4g
MTU7CisgICAgICAgIHZhciBlID0gKHZhbHVlICYgMHg3QzAwKSA+PiAxMDsKKyAgICAgICAgdmFy
IGYgPSB2YWx1ZSAmIDB4MDNGRjsKKyAgICAgICAgaWYgKGUgPT09IDApIHsKKyAgICAgICAgICAg
IHJldHVybiAocyA/IC0xIDogMSkgKiBNYXRoLnBvdygyLCAtMTQpICogKGYgLyBNYXRoLnBvdygy
LCAxMCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGUgPT0gMHgxRikgeworICAgICAg
ICAgICAgcmV0dXJuIGYgPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiAocyA/IC0xIDogMSkgKiBNYXRoLnBvdygyLCBlIC0gMTUpICog
KDEgKyAoZiAvIE1hdGgucG93KDIsIDEwKSkpOworICAgIH07CisgICAgRERTVG9vbHMuX0dldEhh
bGZGbG9hdEFzRmxvYXRSR0JBQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwg
ZGF0YU9mZnNldCwgZGF0YUxlbmd0aCwgYXJyYXlCdWZmZXIsIGxvZCkgeworICAgICAgICB2YXIg
ZGVzdEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShkYXRhTGVuZ3RoKTsKKyAgICAgICAgdmFyIHNy
Y0RhdGEgPSBuZXcgVWludDE2QXJyYXkoYXJyYXlCdWZmZXIsIGRhdGFPZmZzZXQpOworICAgICAg
ICB2YXIgaW5kZXggPSAwOworICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KSB7CisgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAg
ICAgICAgICAgICB2YXIgc3JjUG9zID0gKHggKyB5ICogd2lkdGgpICogNDsKKyAgICAgICAgICAg
ICAgICBkZXN0QXJyYXlbaW5kZXhdID0gRERTVG9vbHMuX0Zyb21IYWxmRmxvYXQoc3JjRGF0YVtz
cmNQb3NdKTsKKyAgICAgICAgICAgICAgICBkZXN0QXJyYXlbaW5kZXggKyAxXSA9IEREU1Rvb2xz
Ll9Gcm9tSGFsZkZsb2F0KHNyY0RhdGFbc3JjUG9zICsgMV0pOworICAgICAgICAgICAgICAgIGRl
c3RBcnJheVtpbmRleCArIDJdID0gRERTVG9vbHMuX0Zyb21IYWxmRmxvYXQoc3JjRGF0YVtzcmNQ
b3MgKyAyXSk7CisgICAgICAgICAgICAgICAgaWYgKEREU1Rvb2xzLlN0b3JlTE9ESW5BbHBoYUNo
YW5uZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdEFycmF5W2luZGV4ICsgM10gPSBsb2Q7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBkZXN0QXJyYXlbaW5kZXggKyAzXSA9IEREU1Rvb2xzLl9Gcm9tSGFsZkZsb2F0KHNy
Y0RhdGFbc3JjUG9zICsgM10pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
bmRleCArPSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBkZXN0
QXJyYXk7CisgICAgfTsKKyAgICBERFNUb29scy5fR2V0SGFsZkZsb2F0UkdCQUFycmF5QnVmZmVy
ID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgsIGFycmF5
QnVmZmVyLCBsb2QpIHsKKyAgICAgICAgaWYgKEREU1Rvb2xzLlN0b3JlTE9ESW5BbHBoYUNoYW5u
ZWwpIHsKKyAgICAgICAgICAgIHZhciBkZXN0QXJyYXkgPSBuZXcgVWludDE2QXJyYXkoZGF0YUxl
bmd0aCk7CisgICAgICAgICAgICB2YXIgc3JjRGF0YSA9IG5ldyBVaW50MTZBcnJheShhcnJheUJ1
ZmZlciwgZGF0YU9mZnNldCk7CisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICAg
ICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAgIGZv
ciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIg
c3JjUG9zID0gKHggKyB5ICogd2lkdGgpICogNDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdEFy
cmF5W2luZGV4XSA9IHNyY0RhdGFbc3JjUG9zXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdEFy
cmF5W2luZGV4ICsgMV0gPSBzcmNEYXRhW3NyY1BvcyArIDFdOworICAgICAgICAgICAgICAgICAg
ICBkZXN0QXJyYXlbaW5kZXggKyAyXSA9IHNyY0RhdGFbc3JjUG9zICsgMl07CisgICAgICAgICAg
ICAgICAgICAgIGRlc3RBcnJheVtpbmRleCArIDNdID0gRERTVG9vbHMuX1RvSGFsZkZsb2F0KGxv
ZCk7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGRlc3RBcnJheTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbmV3IFVpbnQxNkFycmF5KGFycmF5QnVmZmVyLCBkYXRhT2Zmc2V0LCBk
YXRhTGVuZ3RoKTsKKyAgICB9OworICAgIEREU1Rvb2xzLl9HZXRGbG9hdFJHQkFBcnJheUJ1ZmZl
ciA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoLCBhcnJh
eUJ1ZmZlciwgbG9kKSB7CisgICAgICAgIGlmIChERFNUb29scy5TdG9yZUxPREluQWxwaGFDaGFu
bmVsKSB7CisgICAgICAgICAgICB2YXIgZGVzdEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShkYXRh
TGVuZ3RoKTsKKyAgICAgICAgICAgIHZhciBzcmNEYXRhID0gbmV3IEZsb2F0MzJBcnJheShhcnJh
eUJ1ZmZlciwgZGF0YU9mZnNldCk7CisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAg
ICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAg
IGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgICAgICAgICB2
YXIgc3JjUG9zID0gKHggKyB5ICogd2lkdGgpICogNDsKKyAgICAgICAgICAgICAgICAgICAgZGVz
dEFycmF5W2luZGV4XSA9IHNyY0RhdGFbc3JjUG9zXTsKKyAgICAgICAgICAgICAgICAgICAgZGVz
dEFycmF5W2luZGV4ICsgMV0gPSBzcmNEYXRhW3NyY1BvcyArIDFdOworICAgICAgICAgICAgICAg
ICAgICBkZXN0QXJyYXlbaW5kZXggKyAyXSA9IHNyY0RhdGFbc3JjUG9zICsgMl07CisgICAgICAg
ICAgICAgICAgICAgIGRlc3RBcnJheVtpbmRleCArIDNdID0gbG9kOworICAgICAgICAgICAgICAg
ICAgICBpbmRleCArPSA0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBkZXN0QXJyYXk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBG
bG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgpOworICAgIH07
CisgICAgRERTVG9vbHMuX0dldEZsb2F0QXNVSW50UkdCQUFycmF5QnVmZmVyID0gZnVuY3Rpb24g
KHdpZHRoLCBoZWlnaHQsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgsIGFycmF5QnVmZmVyLCBsb2Qp
IHsKKyAgICAgICAgdmFyIGRlc3RBcnJheSA9IG5ldyBVaW50OEFycmF5KGRhdGFMZW5ndGgpOwor
ICAgICAgICB2YXIgc3JjRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIsIGRhdGFP
ZmZzZXQpOworICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICBmb3IgKHZhciB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgc3JjUG9zID0gKHggKyB5ICogd2lkdGgpICog
NDsKKyAgICAgICAgICAgICAgICBkZXN0QXJyYXlbaW5kZXhdID0gX01hdGhzX21hdGhfc2NhbGFy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjYWxhciJdLkNsYW1wKHNyY0RhdGFbc3Jj
UG9zXSkgKiAyNTU7CisgICAgICAgICAgICAgICAgZGVzdEFycmF5W2luZGV4ICsgMV0gPSBfTWF0
aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uQ2xh
bXAoc3JjRGF0YVtzcmNQb3MgKyAxXSkgKiAyNTU7CisgICAgICAgICAgICAgICAgZGVzdEFycmF5
W2luZGV4ICsgMl0gPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siU2NhbGFyIl0uQ2xhbXAoc3JjRGF0YVtzcmNQb3MgKyAyXSkgKiAyNTU7CisgICAgICAg
ICAgICAgICAgaWYgKEREU1Rvb2xzLlN0b3JlTE9ESW5BbHBoYUNoYW5uZWwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGVzdEFycmF5W2luZGV4ICsgM10gPSBsb2Q7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZXN0QXJyYXlb
aW5kZXggKyAzXSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJTY2FsYXIiXS5DbGFtcChzcmNEYXRhW3NyY1BvcyArIDNdKSAqIDI1NTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggKz0gNDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZGVzdEFycmF5OworICAgIH07CisgICAgRERTVG9vbHMu
X0dldEhhbGZGbG9hdEFzVUludFJHQkFBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uICh3aWR0aCwgaGVp
Z2h0LCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoLCBhcnJheUJ1ZmZlciwgbG9kKSB7CisgICAgICAg
IHZhciBkZXN0QXJyYXkgPSBuZXcgVWludDhBcnJheShkYXRhTGVuZ3RoKTsKKyAgICAgICAgdmFy
IHNyY0RhdGEgPSBuZXcgVWludDE2QXJyYXkoYXJyYXlCdWZmZXIsIGRhdGFPZmZzZXQpOworICAg
ICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKSB7CisgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAg
ICAgICAgICAgICAgICB2YXIgc3JjUG9zID0gKHggKyB5ICogd2lkdGgpICogNDsKKyAgICAgICAg
ICAgICAgICBkZXN0QXJyYXlbaW5kZXhdID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlNjYWxhciJdLkNsYW1wKEREU1Rvb2xzLl9Gcm9tSGFsZkZsb2F0
KHNyY0RhdGFbc3JjUG9zXSkpICogMjU1OworICAgICAgICAgICAgICAgIGRlc3RBcnJheVtpbmRl
eCArIDFdID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlNjYWxhciJdLkNsYW1wKEREU1Rvb2xzLl9Gcm9tSGFsZkZsb2F0KHNyY0RhdGFbc3JjUG9zICsg
MV0pKSAqIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0QXJyYXlbaW5kZXggKyAyXSA9IF9NYXRo
c19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5DbGFt
cChERFNUb29scy5fRnJvbUhhbGZGbG9hdChzcmNEYXRhW3NyY1BvcyArIDJdKSkgKiAyNTU7Cisg
ICAgICAgICAgICAgICAgaWYgKEREU1Rvb2xzLlN0b3JlTE9ESW5BbHBoYUNoYW5uZWwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdEFycmF5W2luZGV4ICsgM10gPSBsb2Q7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZXN0
QXJyYXlbaW5kZXggKyAzXSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJTY2FsYXIiXS5DbGFtcChERFNUb29scy5fRnJvbUhhbGZGbG9hdChzcmNEYXRh
W3NyY1BvcyArIDNdKSkgKiAyNTU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGluZGV4ICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRl
c3RBcnJheTsKKyAgICB9OworICAgIEREU1Rvb2xzLl9HZXRSR0JBQXJyYXlCdWZmZXIgPSBmdW5j
dGlvbiAod2lkdGgsIGhlaWdodCwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCwgYXJyYXlCdWZmZXIs
IHJPZmZzZXQsIGdPZmZzZXQsIGJPZmZzZXQsIGFPZmZzZXQpIHsKKyAgICAgICAgdmFyIGJ5dGVB
cnJheSA9IG5ldyBVaW50OEFycmF5KGRhdGFMZW5ndGgpOworICAgICAgICB2YXIgc3JjRGF0YSA9
IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCBkYXRhT2Zmc2V0KTsKKyAgICAgICAgdmFyIGlu
ZGV4ID0gMDsKKyAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAg
ICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHNyY1BvcyA9ICh4ICsgeSAqIHdpZHRoKSAqIDQ7CisgICAgICAgICAgICAgICAgYnl0
ZUFycmF5W2luZGV4XSA9IHNyY0RhdGFbc3JjUG9zICsgck9mZnNldF07CisgICAgICAgICAgICAg
ICAgYnl0ZUFycmF5W2luZGV4ICsgMV0gPSBzcmNEYXRhW3NyY1BvcyArIGdPZmZzZXRdOworICAg
ICAgICAgICAgICAgIGJ5dGVBcnJheVtpbmRleCArIDJdID0gc3JjRGF0YVtzcmNQb3MgKyBiT2Zm
c2V0XTsKKyAgICAgICAgICAgICAgICBieXRlQXJyYXlbaW5kZXggKyAzXSA9IHNyY0RhdGFbc3Jj
UG9zICsgYU9mZnNldF07CisgICAgICAgICAgICAgICAgaW5kZXggKz0gNDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnl0ZUFycmF5OworICAgIH07CisgICAgRERT
VG9vbHMuX0V4dHJhY3RMb25nV29yZE9yZGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
IGlmICh2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gMjU1IHx8IHZhbHVlID09PSAtMTY3NzcyMTYp
IHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAxICsg
RERTVG9vbHMuX0V4dHJhY3RMb25nV29yZE9yZGVyKHZhbHVlID4+IDgpOworICAgIH07CisgICAg
RERTVG9vbHMuX0dldFJHQkFycmF5QnVmZmVyID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIGRh
dGFPZmZzZXQsIGRhdGFMZW5ndGgsIGFycmF5QnVmZmVyLCByT2Zmc2V0LCBnT2Zmc2V0LCBiT2Zm
c2V0KSB7CisgICAgICAgIHZhciBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShkYXRhTGVuZ3Ro
KTsKKyAgICAgICAgdmFyIHNyY0RhdGEgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlciwgZGF0
YU9mZnNldCk7CisgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgIGZvciAodmFyIHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lk
dGg7IHgrKykgeworICAgICAgICAgICAgICAgIHZhciBzcmNQb3MgPSAoeCArIHkgKiB3aWR0aCkg
KiAzOworICAgICAgICAgICAgICAgIGJ5dGVBcnJheVtpbmRleF0gPSBzcmNEYXRhW3NyY1BvcyAr
IHJPZmZzZXRdOworICAgICAgICAgICAgICAgIGJ5dGVBcnJheVtpbmRleCArIDFdID0gc3JjRGF0
YVtzcmNQb3MgKyBnT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICBieXRlQXJyYXlbaW5kZXggKyAy
XSA9IHNyY0RhdGFbc3JjUG9zICsgYk9mZnNldF07CisgICAgICAgICAgICAgICAgaW5kZXggKz0g
MzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnl0ZUFycmF5Owor
ICAgIH07CisgICAgRERTVG9vbHMuX0dldEx1bWluYW5jZUFycmF5QnVmZmVyID0gZnVuY3Rpb24g
KHdpZHRoLCBoZWlnaHQsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgsIGFycmF5QnVmZmVyKSB7Cisg
ICAgICAgIHZhciBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShkYXRhTGVuZ3RoKTsKKyAgICAg
ICAgdmFyIHNyY0RhdGEgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlciwgZGF0YU9mZnNldCk7
CisgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykg
eworICAgICAgICAgICAgICAgIHZhciBzcmNQb3MgPSAoeCArIHkgKiB3aWR0aCk7CisgICAgICAg
ICAgICAgICAgYnl0ZUFycmF5W2luZGV4XSA9IHNyY0RhdGFbc3JjUG9zXTsKKyAgICAgICAgICAg
ICAgICBpbmRleCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBi
eXRlQXJyYXk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGxvYWRzIEREUyBMZXZlbHMgdG8g
YSBCYWJ5bG9uIFRleHR1cmUKKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgRERTVG9vbHMu
VXBsb2FkRERTTGV2ZWxzID0gZnVuY3Rpb24gKGVuZ2luZSwgdGV4dHVyZSwgYXJyYXlCdWZmZXIs
IGluZm8sIGxvYWRNaXBtYXBzLCBmYWNlcywgbG9kSW5kZXgsIGN1cnJlbnRGYWNlKSB7CisgICAg
ICAgIGlmIChsb2RJbmRleCA9PT0gdm9pZCAwKSB7IGxvZEluZGV4ID0gLTE7IH0KKyAgICAgICAg
dmFyIHNwaGVyaWNhbFBvbHlub21pYWxGYWNlcyA9IG51bGw7CisgICAgICAgIGlmIChpbmZvLnNw
aGVyaWNhbFBvbHlub21pYWwpIHsKKyAgICAgICAgICAgIHNwaGVyaWNhbFBvbHlub21pYWxGYWNl
cyA9IG5ldyBBcnJheSgpOworICAgICAgICB9CisgICAgICAgIHZhciBleHQgPSBlbmdpbmUuZ2V0
Q2FwcygpLnMzdGM7CisgICAgICAgIHZhciBoZWFkZXIgPSBuZXcgSW50MzJBcnJheShhcnJheUJ1
ZmZlciwgMCwgaGVhZGVyTGVuZ3RoSW50KTsKKyAgICAgICAgdmFyIGZvdXJDQywgd2lkdGgsIGhl
aWdodCwgZGF0YUxlbmd0aCA9IDAsIGRhdGFPZmZzZXQ7CisgICAgICAgIHZhciBieXRlQXJyYXks
IG1pcG1hcENvdW50LCBtaXA7CisgICAgICAgIHZhciBpbnRlcm5hbENvbXByZXNzZWRGb3JtYXQg
PSAwOworICAgICAgICB2YXIgYmxvY2tCeXRlcyA9IDE7CisgICAgICAgIGlmIChoZWFkZXJbb2Zm
X21hZ2ljXSAhPT0gRERTX01BR0lDKSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siTG9nZ2VyIl0uRXJyb3IoIkludmFsaWQgbWFnaWMgbnVt
YmVyIGluIEREUyBoZWFkZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIWluZm8uaXNGb3VyQ0MgJiYgIWluZm8uaXNSR0IgJiYgIWluZm8uaXNMdW1pbmFu
Y2UpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fWyJMb2dnZXIiXS5FcnJvcigiVW5zdXBwb3J0ZWQgZm9ybWF0LCBtdXN0IGNvbnRhaW4gYSBG
b3VyQ0MsIFJHQiBvciBMVU1JTkFOQ0UgY29kZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmIChpbmZvLmlzQ29tcHJlc3NlZCAmJiAhZXh0KSB7CisgICAgICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTG9nZ2VyIl0u
RXJyb3IoIkNvbXByZXNzZWQgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0
Zm9ybS4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgYnBw
ID0gaGVhZGVyW29mZl9SR0JicHBdOworICAgICAgICBkYXRhT2Zmc2V0ID0gaGVhZGVyW29mZl9z
aXplXSArIDQ7CisgICAgICAgIHZhciBjb21wdXRlRm9ybWF0cyA9IGZhbHNlOworICAgICAgICBp
ZiAoaW5mby5pc0ZvdXJDQykgeworICAgICAgICAgICAgZm91ckNDID0gaGVhZGVyW29mZl9wZkZv
dXJDQ107CisgICAgICAgICAgICBzd2l0Y2ggKGZvdXJDQykgeworICAgICAgICAgICAgICAgIGNh
c2UgRk9VUkNDX0RYVDE6CisgICAgICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSA4OworICAg
ICAgICAgICAgICAgICAgICBpbnRlcm5hbENvbXByZXNzZWRGb3JtYXQgPSBleHQuQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUMV9FWFQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgRk9VUkNDX0RYVDM6CisgICAgICAgICAgICAgICAgICAgIGJsb2NrQnl0
ZXMgPSAxNjsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxDb21wcmVzc2VkRm9ybWF0ID0g
ZXh0LkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZPVVJDQ19EWFQ1OgorICAgICAgICAgICAgICAg
ICAgICBibG9ja0J5dGVzID0gMTY7CisgICAgICAgICAgICAgICAgICAgIGludGVybmFsQ29tcHJl
c3NlZEZvcm1hdCA9IGV4dC5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRDNERk1UX1Ix
NkcxNkIxNkExNkY6CisgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVGb3JtYXRzID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGT1VSQ0Nf
RDNERk1UX1IzMkczMkIzMkEzMkY6CisgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVGb3JtYXRz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBGT1VSQ0NfRFgxMDoKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYW4gYWRkaXRp
b25uYWwgaGVhZGVyIHNvIGRhdGFPZmZzZXQgbmVlZCB0byBiZSBjaGFuZ2VkCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFPZmZzZXQgKz0gNSAqIDQ7IC8vIDUgdWludHMKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHN1cHBvcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGluZm8uZHhnaUZvcm1hdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb21wdXRlRm9ybWF0cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vw
cG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk06CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5pc1JHQiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mby5pc0ZvdXJDQyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJwcCA9IDMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRlZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJVbnN1
cHBvcnRlZCBGb3VyQ0MgY29kZToiLCBJbnQzMlRvRm91ckNDKGZvdXJDQykpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHJPZmZzZXQgPSBERFNUb29scy5fRXh0cmFjdExvbmdXb3JkT3JkZXIoaGVhZGVyW29mZl9STWFz
a10pOworICAgICAgICB2YXIgZ09mZnNldCA9IEREU1Rvb2xzLl9FeHRyYWN0TG9uZ1dvcmRPcmRl
cihoZWFkZXJbb2ZmX0dNYXNrXSk7CisgICAgICAgIHZhciBiT2Zmc2V0ID0gRERTVG9vbHMuX0V4
dHJhY3RMb25nV29yZE9yZGVyKGhlYWRlcltvZmZfQk1hc2tdKTsKKyAgICAgICAgdmFyIGFPZmZz
ZXQgPSBERFNUb29scy5fRXh0cmFjdExvbmdXb3JkT3JkZXIoaGVhZGVyW29mZl9BTWFza10pOwor
ICAgICAgICBpZiAoY29tcHV0ZUZvcm1hdHMpIHsKKyAgICAgICAgICAgIGludGVybmFsQ29tcHJl
c3NlZEZvcm1hdCA9IGVuZ2luZS5fZ2V0UkdCQUJ1ZmZlckludGVybmFsU2l6ZWRGb3JtYXQoaW5m
by50ZXh0dXJlVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgbWlwbWFwQ291bnQgPSAxOworICAg
ICAgICBpZiAoaGVhZGVyW29mZl9mbGFnc10gJiBERFNEX01JUE1BUENPVU5UICYmIGxvYWRNaXBt
YXBzICE9PSBmYWxzZSkgeworICAgICAgICAgICAgbWlwbWFwQ291bnQgPSBNYXRoLm1heCgxLCBo
ZWFkZXJbb2ZmX21pcG1hcENvdW50XSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHN0YXJ0RmFj
ZSA9IGN1cnJlbnRGYWNlIHx8IDA7CisgICAgICAgIGZvciAodmFyIGZhY2UgPSBzdGFydEZhY2U7
IGZhY2UgPCBmYWNlczsgZmFjZSsrKSB7CisgICAgICAgICAgICB3aWR0aCA9IGhlYWRlcltvZmZf
d2lkdGhdOworICAgICAgICAgICAgaGVpZ2h0ID0gaGVhZGVyW29mZl9oZWlnaHRdOworICAgICAg
ICAgICAgZm9yIChtaXAgPSAwOyBtaXAgPCBtaXBtYXBDb3VudDsgKyttaXApIHsKKyAgICAgICAg
ICAgICAgICBpZiAobG9kSW5kZXggPT09IC0xIHx8IGxvZEluZGV4ID09PSBtaXApIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBmaXhlZCBMT0QsIGlmIHRoZSBsb2QgaGFzIGp1
c3QgYmVlbiB1cGxvYWRlZCwgZWFybHkgZXhpdC4KKyAgICAgICAgICAgICAgICAgICAgdmFyIGkg
PSAobG9kSW5kZXggPT09IC0xKSA/IG1pcCA6IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
aW5mby5pc0NvbXByZXNzZWQgJiYgaW5mby5pc0ZvdXJDQykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS5mb3JtYXQgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogNDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBmbG9hdEFycmF5ID0gbnVsbDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChlbmdpbmUuX2JhZE9TIHx8IGVuZ2luZS5fYmFkRGVza3RvcE9TIHx8ICghZW5n
aW5lLmdldENhcHMoKS50ZXh0dXJlSGFsZkZsb2F0ICYmICFlbmdpbmUuZ2V0Q2FwcygpLnRleHR1
cmVGbG9hdCkpIHsgLy8gUmVxdWlyZWQgYmVjYXVzZSBpT1MgaGFzIG1hbnkgaXNzdWVzIHdpdGgg
ZmxvYXQgYW5kIGhhbGYgZmxvYXQgZ2VuZXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChicHAgPT09IDEyOCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdEFycmF5ID0gRERTVG9vbHMuX0dldEZsb2F0QXNVSW50UkdCQUFycmF5QnVmZmVyKHdpZHRo
LCBoZWlnaHQsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgsIGFycmF5QnVmZmVyLCBpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwaGVyaWNhbFBvbHlub21pYWxGYWNlcyAm
JiBpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaGVyaWNh
bFBvbHlub21pYWxGYWNlcy5wdXNoKEREU1Rvb2xzLl9HZXRGbG9hdFJHQkFBcnJheUJ1ZmZlcih3
aWR0aCwgaGVpZ2h0LCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoLCBhcnJheUJ1ZmZlciwgaSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJwcCA9PT0gNjQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRBcnJheSA9IEREU1Rvb2xz
Ll9HZXRIYWxmRmxvYXRBc1VJbnRSR0JBQXJyYXlCdWZmZXIod2lkdGgsIGhlaWdodCwgZGF0YU9m
ZnNldCwgZGF0YUxlbmd0aCwgYXJyYXlCdWZmZXIsIGkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3BoZXJpY2FsUG9seW5vbWlhbEZhY2VzICYmIGkgPT0gMCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BoZXJpY2FsUG9seW5vbWlhbEZhY2Vz
LnB1c2goRERTVG9vbHMuX0dldEhhbGZGbG9hdEFzRmxvYXRSR0JBQXJyYXlCdWZmZXIod2lkdGgs
IGhlaWdodCwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCwgYXJyYXlCdWZmZXIsIGkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLnR5cGUgPSBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJw
cCA9PT0gMTI4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUudHlw
ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9GTE9BVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXRBcnJheSA9IEREU1Rvb2xzLl9HZXRGbG9hdFJHQkFBcnJheUJ1ZmZlcih3aWR0aCwg
aGVpZ2h0LCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoLCBhcnJheUJ1ZmZlciwgaSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGhlcmljYWxQb2x5bm9taWFsRmFjZXMgJiYg
aSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGhlcmljYWxQ
b2x5bm9taWFsRmFjZXMucHVzaChmbG9hdEFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChicHAgPT09IDY0ICYmICFlbmdpbmUuZ2V0Q2FwcygpLnRl
eHR1cmVIYWxmRmxvYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS50eXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdEFycmF5ID0gRERTVG9vbHMuX0dldEhhbGZGbG9hdEFzRmxvYXRSR0JBQXJy
YXlCdWZmZXIod2lkdGgsIGhlaWdodCwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCwgYXJyYXlCdWZm
ZXIsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BoZXJpY2FsUG9s
eW5vbWlhbEZhY2VzICYmIGkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3BoZXJpY2FsUG9seW5vbWlhbEZhY2VzLnB1c2goZmxvYXRBcnJheSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8vIDY0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUudHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZM
T0FUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdEFycmF5ID0gRERTVG9v
bHMuX0dldEhhbGZGbG9hdFJHQkFBcnJheUJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBkYXRhT2Zmc2V0
LCBkYXRhTGVuZ3RoLCBhcnJheUJ1ZmZlciwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzcGhlcmljYWxQb2x5bm9taWFsRmFjZXMgJiYgaSA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGhlcmljYWxQb2x5bm9taWFsRmFjZXMucHVz
aChERFNUb29scy5fR2V0SGFsZkZsb2F0QXNGbG9hdFJHQkFBcnJheUJ1ZmZlcih3aWR0aCwgaGVp
Z2h0LCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoLCBhcnJheUJ1ZmZlciwgaSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZs
b2F0QXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmUuX3VwbG9hZERh
dGFUb1RleHR1cmVEaXJlY3RseSh0ZXh0dXJlLCBmbG9hdEFycmF5LCBmYWNlLCBpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChpbmZvLmlzUkdCKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLnR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGJwcCA9PT0gMjQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLmZvcm1hdCA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFRk9STUFUX1JHQjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gd2lkdGggKiBoZWlnaHQgKiAzOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJ5dGVBcnJheSA9IEREU1Rvb2xzLl9HZXRSR0JBcnJheUJ1ZmZl
cih3aWR0aCwgaGVpZ2h0LCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoLCBhcnJheUJ1ZmZlciwgck9m
ZnNldCwgZ09mZnNldCwgYk9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5n
aW5lLl91cGxvYWREYXRhVG9UZXh0dXJlRGlyZWN0bHkodGV4dHVyZSwgYnl0ZUFycmF5LCBmYWNl
LCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgeyAvLyAzMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZm9ybWF0
ID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0
YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCQTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTGVuZ3RoID0gd2lkdGggKiBoZWlnaHQgKiA0OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJ5dGVBcnJheSA9IEREU1Rvb2xzLl9HZXRSR0JBQXJyYXlCdWZmZXIod2lkdGgsIGhlaWdo
dCwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCwgYXJyYXlCdWZmZXIsIHJPZmZzZXQsIGdPZmZzZXQs
IGJPZmZzZXQsIGFPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS5f
dXBsb2FkRGF0YVRvVGV4dHVyZURpcmVjdGx5KHRleHR1cmUsIGJ5dGVBcnJheSwgZmFjZSwgaSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5mby5pc0x1bWluYW5jZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHVucGFja0FsaWdubWVudCA9IGVuZ2luZS5fZ2V0VW5wYWNrQWxpZ25l
bWVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVucGFkZGVkUm93U2l6ZSA9IHdp
ZHRoOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZGRlZFJvd1NpemUgPSBNYXRoLmZs
b29yKCh3aWR0aCArIHVucGFja0FsaWdubWVudCAtIDEpIC8gdW5wYWNrQWxpZ25tZW50KSAqIHVu
cGFja0FsaWdubWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBwYWRk
ZWRSb3dTaXplICogKGhlaWdodCAtIDEpICsgdW5wYWRkZWRSb3dTaXplOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnl0ZUFycmF5ID0gRERTVG9vbHMuX0dldEx1bWluYW5jZUFycmF5QnVmZmVy
KHdpZHRoLCBoZWlnaHQsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgsIGFycmF5QnVmZmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZm9ybWF0ID0gX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRf
TFVNSU5BTkNFOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS50eXBlID0gX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLlRF
WFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS5f
dXBsb2FkRGF0YVRvVGV4dHVyZURpcmVjdGx5KHRleHR1cmUsIGJ5dGVBcnJheSwgZmFjZSwgaSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gTWF0aC5tYXgoNCwgd2lkdGgpIC8gNCAq
IE1hdGgubWF4KDQsIGhlaWdodCkgLyA0ICogYmxvY2tCeXRlczsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCBkYXRhT2Zmc2V0
LCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUudHlwZSA9IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMi
XS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmdp
bmUuX3VwbG9hZENvbXByZXNzZWREYXRhVG9UZXh0dXJlRGlyZWN0bHkodGV4dHVyZSwgaW50ZXJu
YWxDb21wcmVzc2VkRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBieXRlQXJyYXksIGZhY2UsIGkpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGRhdGFPZmZzZXQgKz0gYnBwID8gKHdpZHRoICogaGVpZ2h0ICogKGJwcCAvIDgpKSA6IGRhdGFM
ZW5ndGg7CisgICAgICAgICAgICAgICAgd2lkdGggKj0gMC41OworICAgICAgICAgICAgICAgIGhl
aWdodCAqPSAwLjU7CisgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heCgxLjAsIHdpZHRo
KTsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1heCgxLjAsIGhlaWdodCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3VycmVudEZhY2UgIT09IHVuZGVmaW5lZCkgewor
ICAgICAgICAgICAgICAgIC8vIExvYWRpbmcgYSBzaW5nbGUgZmFjZQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzcGhlcmljYWxQ
b2x5bm9taWFsRmFjZXMgJiYgc3BoZXJpY2FsUG9seW5vbWlhbEZhY2VzLmxlbmd0aCA+IDApIHsK
KyAgICAgICAgICAgIGluZm8uc3BoZXJpY2FsUG9seW5vbWlhbCA9IF9NaXNjX0hpZ2hEeW5hbWlj
UmFuZ2VfY3ViZW1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fWyJDdWJlTWFwVG9TcGhlcmljYWxQb2x5bm9taWFsVG9vbHMiXS5Db252ZXJ0Q3ViZU1h
cFRvU3BoZXJpY2FsUG9seW5vbWlhbCh7CisgICAgICAgICAgICAgICAgc2l6ZTogaGVhZGVyW29m
Zl93aWR0aF0sCisgICAgICAgICAgICAgICAgcmlnaHQ6IHNwaGVyaWNhbFBvbHlub21pYWxGYWNl
c1swXSwKKyAgICAgICAgICAgICAgICBsZWZ0OiBzcGhlcmljYWxQb2x5bm9taWFsRmFjZXNbMV0s
CisgICAgICAgICAgICAgICAgdXA6IHNwaGVyaWNhbFBvbHlub21pYWxGYWNlc1syXSwKKyAgICAg
ICAgICAgICAgICBkb3duOiBzcGhlcmljYWxQb2x5bm9taWFsRmFjZXNbM10sCisgICAgICAgICAg
ICAgICAgZnJvbnQ6IHNwaGVyaWNhbFBvbHlub21pYWxGYWNlc1s0XSwKKyAgICAgICAgICAgICAg
ICBiYWNrOiBzcGhlcmljYWxQb2x5bm9taWFsRmFjZXNbNV0sCisgICAgICAgICAgICAgICAgZm9y
bWF0OiBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBLAorICAgICAgICAgICAgICAgIHR5cGU6IF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMiXS5U
RVhUVVJFVFlQRV9GTE9BVCwKKyAgICAgICAgICAgICAgICBnYW1tYVNwYWNlOiBmYWxzZSwKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW5m
by5zcGhlcmljYWxQb2x5bm9taWFsID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCBMT0Qg
aW5mbyBpcyBzdG9yZWQgaW4gYWxwaGEgY2hhbm5lbCAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAg
Ki8KKyAgICBERFNUb29scy5TdG9yZUxPREluQWxwaGFDaGFubmVsID0gZmFsc2U7CisgICAgcmV0
dXJuIEREU1Rvb2xzOworfSgpKTsKKworLyoqCisgKiBDcmVhdGUgYSBjdWJlIHRleHR1cmUgZnJv
bSBwcmVmaWx0ZXJlZCBkYXRhIChpZS4gdGhlIG1pcG1hcHMgY29udGFpbiByZWFkeSB0byB1c2Ug
ZGF0YSBmb3IgUEJSIHJlZmxlY3Rpb24pCisgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSB1
cmwgd2hlcmUgdGhlIGZpbGUgdG8gbG9hZCBpcyBsb2NhdGVkCisgKiBAcGFyYW0gc2NlbmUgZGVm
aW5lcyB0aGUgY3VycmVudCBzY2VuZQorICogQHBhcmFtIGxvZFNjYWxlIGRlZmluZXMgc2NhbGUg
dG8gYXBwbHkgdG8gdGhlIG1pcCBtYXAgc2VsZWN0aW9uCisgKiBAcGFyYW0gbG9kT2Zmc2V0IGRl
ZmluZXMgb2Zmc2V0IHRvIGFwcGx5IHRvIHRoZSBtaXAgbWFwIHNlbGVjdGlvbgorICogQHBhcmFt
IG9uTG9hZCBkZWZpbmVzIGFuIG9wdGlvbmFsIGNhbGxiYWNrIHJhaXNlZCB3aGVuIHRoZSB0ZXh0
dXJlIGlzIGxvYWRlZAorICogQHBhcmFtIG9uRXJyb3IgZGVmaW5lcyBhbiBvcHRpb25hbCBjYWxs
YmFjayByYWlzZWQgaWYgdGhlcmUgaXMgYW4gaXNzdWUgdG8gbG9hZCB0aGUgdGV4dHVyZQorICog
QHBhcmFtIGZvcm1hdCBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEKKyAqIEBwYXJhbSBm
b3JjZWRFeHRlbnNpb24gZGVmaW5lcyB0aGUgZXh0ZW5zaW9uIHRvIHVzZSB0byBwaWNrIHRoZSBy
aWdodCBsb2FkZXIKKyAqIEBwYXJhbSBjcmVhdGVQb2x5bm9taWFscyBkZWZpbmVzIHdoZXRlciBv
ciBub3QgdG8gY3JlYXRlIHBvbHlub21haWxzIGhhcm1vbmljcyBmb3IgdGhlIHRleHR1cmUKKyAq
IEByZXR1cm5zIHRoZSBjdWJlIHRleHR1cmUgYXMgYW4gSW50ZXJuYWxUZXh0dXJlCisgKi8KK19F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5wcm90
b3R5cGUuY3JlYXRlUHJlZmlsdGVyZWRDdWJlVGV4dHVyZSA9IGZ1bmN0aW9uIChyb290VXJsLCBz
Y2VuZSwgbG9kU2NhbGUsIGxvZE9mZnNldCwgb25Mb2FkLCBvbkVycm9yLCBmb3JtYXQsIGZvcmNl
ZEV4dGVuc2lvbiwgY3JlYXRlUG9seW5vbWlhbHMpIHsKKyAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgIGlmIChvbkxvYWQgPT09IHZvaWQgMCkgeyBvbkxvYWQgPSBudWxsOyB9CisgICAgaWYgKG9u
RXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbnVsbDsgfQorICAgIGlmIChmb3JjZWRFeHRl
bnNpb24gPT09IHZvaWQgMCkgeyBmb3JjZWRFeHRlbnNpb24gPSBudWxsOyB9CisgICAgaWYgKGNy
ZWF0ZVBvbHlub21pYWxzID09PSB2b2lkIDApIHsgY3JlYXRlUG9seW5vbWlhbHMgPSB0cnVlOyB9
CisgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gKGxvYWREYXRhKSB7CisgICAgICAgIGlmICgh
bG9hZERhdGEpIHsKKyAgICAgICAgICAgIGlmIChvbkxvYWQpIHsKKyAgICAgICAgICAgICAgICBv
bkxvYWQobnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgdmFyIHRleHR1cmUgPSBsb2FkRGF0YS50ZXh0dXJlOworICAgICAgICBpZiAo
IWNyZWF0ZVBvbHlub21pYWxzKSB7CisgICAgICAgICAgICB0ZXh0dXJlLl9zcGhlcmljYWxQb2x5
bm9taWFsID0gbmV3IF9NYXRoc19zcGhlcmljYWxQb2x5bm9taWFsX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlNwaGVyaWNhbFBvbHlub21pYWwiXSgpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGxvYWREYXRhLmluZm8uc3BoZXJpY2FsUG9seW5vbWlhbCkgeworICAgICAgICAg
ICAgdGV4dHVyZS5fc3BoZXJpY2FsUG9seW5vbWlhbCA9IGxvYWREYXRhLmluZm8uc3BoZXJpY2Fs
UG9seW5vbWlhbDsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlLl9kYXRhU291cmNlID0gX01h
dGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9DVUJFUFJFRklMVEVSRUQ7CisgICAg
ICAgIGlmIChfdGhpcy5nZXRDYXBzKCkudGV4dHVyZUxPRCkgeworICAgICAgICAgICAgLy8gRG8g
bm90IGFkZCBleHRyYSBwcm9jZXNzIGlmIHRleHR1cmUgbG9kIGlzIHN1cHBvcnRlZC4KKyAgICAg
ICAgICAgIGlmIChvbkxvYWQpIHsKKyAgICAgICAgICAgICAgICBvbkxvYWQodGV4dHVyZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFy
IG1pcFNsaWNlcyA9IDM7CisgICAgICAgIHZhciBnbCA9IF90aGlzLl9nbDsKKyAgICAgICAgdmFy
IHdpZHRoID0gbG9hZERhdGEud2lkdGg7CisgICAgICAgIGlmICghd2lkdGgpIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgdGV4dHVyZXMgPSBbXTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXBTbGljZXM7IGkrKykgeworICAgICAgICAgICAgLy9j
b21wdXRlIExPRCBmcm9tIGV2ZW4gc3BhY2luZyBpbiBzbW9vdGhuZXNzIChtYXRjaGluZyBzaGFk
ZXIgY2FsY3VsYXRpb24pCisgICAgICAgICAgICB2YXIgc21vb3RobmVzcyA9IGkgLyAobWlwU2xp
Y2VzIC0gMSk7CisgICAgICAgICAgICB2YXIgcm91Z2huZXNzID0gMSAtIHNtb290aG5lc3M7Cisg
ICAgICAgICAgICB2YXIgbWluTE9ESW5kZXggPSBsb2RPZmZzZXQ7IC8vIHJvdWdobmVzcyA9IDAK
KyAgICAgICAgICAgIHZhciBtYXhMT0RJbmRleCA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5Mb2cyKHdpZHRoKSAqIGxvZFNjYWxlICsg
bG9kT2Zmc2V0OyAvLyByb3VnaG5lc3MgPSAxCisgICAgICAgICAgICB2YXIgbG9kSW5kZXggPSBt
aW5MT0RJbmRleCArIChtYXhMT0RJbmRleCAtIG1pbkxPREluZGV4KSAqIHJvdWdobmVzczsKKyAg
ICAgICAgICAgIHZhciBtaXBtYXBJbmRleCA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgo
bG9kSW5kZXgsIDApLCBtYXhMT0RJbmRleCkpOworICAgICAgICAgICAgdmFyIGdsVGV4dHVyZUZy
b21Mb2QgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siSW50ZXJuYWxUZXh0dXJlIl0oX3RoaXMsIF9NYXRlcmlhbHNf
VGV4dHVyZXNfaW50ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIklu
dGVybmFsVGV4dHVyZSJdLkRBVEFTT1VSQ0VfVEVNUCk7CisgICAgICAgICAgICBnbFRleHR1cmVG
cm9tTG9kLnR5cGUgPSB0ZXh0dXJlLnR5cGU7CisgICAgICAgICAgICBnbFRleHR1cmVGcm9tTG9k
LmZvcm1hdCA9IHRleHR1cmUuZm9ybWF0OworICAgICAgICAgICAgZ2xUZXh0dXJlRnJvbUxvZC53
aWR0aCA9IE1hdGgucG93KDIsIE1hdGgubWF4KF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5Mb2cyKHdpZHRoKSAtIG1pcG1hcEluZGV4LCAw
KSk7CisgICAgICAgICAgICBnbFRleHR1cmVGcm9tTG9kLmhlaWdodCA9IGdsVGV4dHVyZUZyb21M
b2Qud2lkdGg7CisgICAgICAgICAgICBnbFRleHR1cmVGcm9tTG9kLmlzQ3ViZSA9IHRydWU7Cisg
ICAgICAgICAgICBfdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQ
LCBnbFRleHR1cmVGcm9tTG9kLCB0cnVlKTsKKyAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmko
Z2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpOwor
ICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFX0NVQkVfTUFQLCBnbC5URVhU
VVJFX01JTl9GSUxURVIsIGdsLkxJTkVBUik7CisgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJp
KGdsLlRFWFRVUkVfQ1VCRV9NQVAsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdF
KTsKKyAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wu
VEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpOworICAgICAgICAgICAgaWYgKGxvYWRE
YXRhLmlzRERTKSB7CisgICAgICAgICAgICAgICAgdmFyIGluZm8gPSBsb2FkRGF0YS5pbmZvOwor
ICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbG9hZERhdGEuZGF0YTsKKyAgICAgICAgICAgICAg
ICBfdGhpcy5fdW5wYWNrRmxpcFkoaW5mby5pc0NvbXByZXNzZWQpOworICAgICAgICAgICAgICAg
IEREU1Rvb2xzLlVwbG9hZEREU0xldmVscyhfdGhpcywgZ2xUZXh0dXJlRnJvbUxvZCwgZGF0YSwg
aW5mbywgdHJ1ZSwgNiwgbWlwbWFwSW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIkxvZ2dlciJdLldhcm4oIkREUyBpcyB0aGUgb25seSBwcmVmaWx0ZXJlZCBjdWJl
IG1hcCBzdXBwb3J0ZWQgc28gZmFyLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgX3Ro
aXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7CisgICAg
ICAgICAgICAvLyBXcmFwIGluIGEgYmFzZSB0ZXh0dXJlIGZvciBlYXN5IGJpbmRpbmcuCisgICAg
ICAgICAgICB2YXIgbG9kVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2Jhc2VUZXh0
dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkJhc2VUZXh0dXJlIl0oc2NlbmUpOwor
ICAgICAgICAgICAgbG9kVGV4dHVyZS5pc0N1YmUgPSB0cnVlOworICAgICAgICAgICAgbG9kVGV4
dHVyZS5fdGV4dHVyZSA9IGdsVGV4dHVyZUZyb21Mb2Q7CisgICAgICAgICAgICBnbFRleHR1cmVG
cm9tTG9kLmlzUmVhZHkgPSB0cnVlOworICAgICAgICAgICAgdGV4dHVyZXMucHVzaChsb2RUZXh0
dXJlKTsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJlSGlnaCA9IHRleHR1
cmVzWzJdOworICAgICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJlTWlkID0gdGV4dHVyZXNbMV07Cisg
ICAgICAgIHRleHR1cmUuX2xvZFRleHR1cmVMb3cgPSB0ZXh0dXJlc1swXTsKKyAgICAgICAgaWYg
KG9uTG9hZCkgeworICAgICAgICAgICAgb25Mb2FkKHRleHR1cmUpOworICAgICAgICB9CisgICAg
fTsKKyAgICByZXR1cm4gdGhpcy5jcmVhdGVDdWJlVGV4dHVyZShyb290VXJsLCBzY2VuZSwgbnVs
bCwgZmFsc2UsIGNhbGxiYWNrLCBvbkVycm9yLCBmb3JtYXQsIGZvcmNlZEV4dGVuc2lvbiwgY3Jl
YXRlUG9seW5vbWlhbHMsIGxvZFNjYWxlLCBsb2RPZmZzZXQpOworfTsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvZGVjb3JhdG9ycy50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGV4cGFuZFRvUHJv
cGVydHksIHNlcmlhbGl6ZSwgc2VyaWFsaXplQXNUZXh0dXJlLCBzZXJpYWxpemVBc0NvbG9yMywg
c2VyaWFsaXplQXNGcmVzbmVsUGFyYW1ldGVycywgc2VyaWFsaXplQXNWZWN0b3IyLCBzZXJpYWxp
emVBc1ZlY3RvcjMsIHNlcmlhbGl6ZUFzTWVzaFJlZmVyZW5jZSwgc2VyaWFsaXplQXNDb2xvckN1
cnZlcywgc2VyaWFsaXplQXNDb2xvcjQsIHNlcmlhbGl6ZUFzSW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbiwgc2VyaWFsaXplQXNRdWF0ZXJuaW9uLCBzZXJpYWxpemVBc01hdHJpeCwgc2VyaWFs
aXplQXNDYW1lcmFSZWZlcmVuY2UsIFNlcmlhbGl6YXRpb25IZWxwZXIgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZXhwYW5kVG9Qcm9wZXJ0eSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gZXhwYW5kVG9Qcm9wZXJ0eTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemUi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJz
ZXJpYWxpemVBc1RleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZUFzVGV4dHVy
ZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0NvbG9yMyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gc2VyaWFsaXplQXNDb2xvcjM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2VyaWFs
aXplQXNGcmVzbmVsUGFyYW1ldGVycyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2VyaWFsaXplQXNG
cmVzbmVsUGFyYW1ldGVyczsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1ZlY3Rv
cjIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZUFzVmVjdG9yMjsgfSk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJzZXJpYWxpemVBc1ZlY3RvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlh
bGl6ZUFzVmVjdG9yMzsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc01lc2hSZWZl
cmVuY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZUFzTWVzaFJlZmVyZW5jZTsgfSk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0NvbG9yQ3VydmVzIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBzZXJpYWxpemVBc0NvbG9yQ3VydmVzOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNl
cmlhbGl6ZUFzQ29sb3I0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXJpYWxpemVBc0NvbG9yNDsg
fSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZUFzSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1F1YXRlcm5pb24i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZUFzUXVhdGVybmlvbjsgfSk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJzZXJpYWxpemVBc01hdHJpeCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2VyaWFs
aXplQXNNYXRyaXg7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2VyaWFsaXplQXNDYW1lcmFSZWZl
cmVuY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZUFzQ2FtZXJhUmVmZXJlbmNlOyB9
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlNlcmlhbGl6YXRpb25IZWxwZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFNlcmlhbGl6YXRpb25IZWxwZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01pc2MvdGFncyAqLyAiLi9NaXNjL3RhZ3MudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIu
L01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RldlRv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL2RldlRvb2xzICovICIuL01pc2MvZGV2VG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9t
YXRoLmNvbG9yLnRzIik7CisKKworCisKK3ZhciBfX2RlY29yYXRvckluaXRpYWxTdG9yZSA9IHt9
OwordmFyIF9fbWVyZ2VkU3RvcmUgPSB7fTsKK3ZhciBfY29weVNvdXJjZSA9IGZ1bmN0aW9uIChj
cmVhdGlvbkZ1bmN0aW9uLCBzb3VyY2UsIGluc3RhbmNpYXRlKSB7CisgICAgdmFyIGRlc3RpbmF0
aW9uID0gY3JlYXRpb25GdW5jdGlvbigpOworICAgIC8vIFRhZ3MKKyAgICBpZiAoX01pc2NfdGFn
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUYWdzIl0pIHsKKyAgICAgICAgX01pc2Nf
dGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUYWdzIl0uQWRkVGFnc1RvKGRlc3Rp
bmF0aW9uLCBzb3VyY2UudGFncyk7CisgICAgfQorICAgIHZhciBjbGFzc1N0b3JlID0gZ2V0TWVy
Z2VkU3RvcmUoZGVzdGluYXRpb24pOworICAgIC8vIFByb3BlcnRpZXMKKyAgICBmb3IgKHZhciBw
cm9wZXJ0eSBpbiBjbGFzc1N0b3JlKSB7CisgICAgICAgIHZhciBwcm9wZXJ0eURlc2NyaXB0b3Ig
PSBjbGFzc1N0b3JlW3Byb3BlcnR5XTsKKyAgICAgICAgdmFyIHNvdXJjZVByb3BlcnR5ID0gc291
cmNlW3Byb3BlcnR5XTsKKyAgICAgICAgdmFyIHByb3BlcnR5VHlwZSA9IHByb3BlcnR5RGVzY3Jp
cHRvci50eXBlOworICAgICAgICBpZiAoc291cmNlUHJvcGVydHkgIT09IHVuZGVmaW5lZCAmJiBz
b3VyY2VQcm9wZXJ0eSAhPT0gbnVsbCAmJiBwcm9wZXJ0eSAhPT0gInVuaXF1ZUlkIikgeworICAg
ICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eVR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6
IC8vIFZhbHVlCisgICAgICAgICAgICAgICAgY2FzZSA2OiAvLyBNZXNoIHJlZmVyZW5jZQorICAg
ICAgICAgICAgICAgIGNhc2UgMTE6IC8vIENhbWVyYSByZWZlcmVuY2UKKyAgICAgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25bcHJvcGVydHldID0gc291cmNlUHJvcGVydHk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gVGV4dHVyZQorICAg
ICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSAoaW5zdGFuY2lhdGUgfHwg
c291cmNlUHJvcGVydHkuaXNSZW5kZXJUYXJnZXQpID8gc291cmNlUHJvcGVydHkgOiBzb3VyY2VQ
cm9wZXJ0eS5jbG9uZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIDI6IC8vIENvbG9yMworICAgICAgICAgICAgICAgIGNhc2UgMzogLy8gRnJlc25l
bFBhcmFtZXRlcnMKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IC8vIFZlY3RvcjIKKyAgICAgICAg
ICAgICAgICBjYXNlIDU6IC8vIFZlY3RvcjMKKyAgICAgICAgICAgICAgICBjYXNlIDc6IC8vIENv
bG9yIEN1cnZlcworICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIFF1YXRlcm5pb24KKyAgICAg
ICAgICAgICAgICBjYXNlIDEyOiAvLyBNYXRyaXgKKyAgICAgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25bcHJvcGVydHldID0gaW5zdGFuY2lhdGUgPyBzb3VyY2VQcm9wZXJ0eSA6IHNvdXJjZVBy
b3BlcnR5LmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBkZXN0aW5hdGlvbjsKK307CitmdW5jdGlv
biBnZXREaXJlY3RTdG9yZSh0YXJnZXQpIHsKKyAgICB2YXIgY2xhc3NLZXkgPSB0YXJnZXQuZ2V0
Q2xhc3NOYW1lKCk7CisgICAgaWYgKCFfX2RlY29yYXRvckluaXRpYWxTdG9yZVtjbGFzc0tleV0p
IHsKKyAgICAgICAgX19kZWNvcmF0b3JJbml0aWFsU3RvcmVbY2xhc3NLZXldID0ge307CisgICAg
fQorICAgIHJldHVybiBfX2RlY29yYXRvckluaXRpYWxTdG9yZVtjbGFzc0tleV07Cit9CisvKioK
KyAqIFJldHVybiB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIGZsYWdnZWQgYXMgc2VyaWFsaXphYmxl
CisgKiBAcGFyYW0gdGFyZ2V0OiBob3N0IG9iamVjdAorICovCitmdW5jdGlvbiBnZXRNZXJnZWRT
dG9yZSh0YXJnZXQpIHsKKyAgICB2YXIgY2xhc3NLZXkgPSB0YXJnZXQuZ2V0Q2xhc3NOYW1lKCk7
CisgICAgaWYgKF9fbWVyZ2VkU3RvcmVbY2xhc3NLZXldKSB7CisgICAgICAgIHJldHVybiBfX21l
cmdlZFN0b3JlW2NsYXNzS2V5XTsKKyAgICB9CisgICAgX19tZXJnZWRTdG9yZVtjbGFzc0tleV0g
PSB7fTsKKyAgICB2YXIgc3RvcmUgPSBfX21lcmdlZFN0b3JlW2NsYXNzS2V5XTsKKyAgICB2YXIg
Y3VycmVudFRhcmdldCA9IHRhcmdldDsKKyAgICB2YXIgY3VycmVudEtleSA9IGNsYXNzS2V5Owor
ICAgIHdoaWxlIChjdXJyZW50S2V5KSB7CisgICAgICAgIHZhciBpbml0aWFsU3RvcmUgPSBfX2Rl
Y29yYXRvckluaXRpYWxTdG9yZVtjdXJyZW50S2V5XTsKKyAgICAgICAgZm9yICh2YXIgcHJvcGVy
dHkgaW4gaW5pdGlhbFN0b3JlKSB7CisgICAgICAgICAgICBzdG9yZVtwcm9wZXJ0eV0gPSBpbml0
aWFsU3RvcmVbcHJvcGVydHldOworICAgICAgICB9CisgICAgICAgIHZhciBwYXJlbnRfMSA9IHZv
aWQgMDsKKyAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgcGFyZW50XzEgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3VycmVudFRhcmdldCk7CisgICAg
ICAgICAgICBpZiAoIXBhcmVudF8xLmdldENsYXNzTmFtZSkgeworICAgICAgICAgICAgICAgIGRv
bmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHBhcmVudF8xLmdldENsYXNzTmFtZSgpICE9PSBjdXJyZW50S2V5KSB7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50VGFy
Z2V0ID0gcGFyZW50XzE7CisgICAgICAgIH0gd2hpbGUgKHBhcmVudF8xKTsKKyAgICAgICAgaWYg
KGRvbmUpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRL
ZXkgPSBwYXJlbnRfMS5nZXRDbGFzc05hbWUoKTsKKyAgICAgICAgY3VycmVudFRhcmdldCA9IHBh
cmVudF8xOworICAgIH0KKyAgICByZXR1cm4gc3RvcmU7Cit9CitmdW5jdGlvbiBnZW5lcmF0ZVNl
cmlhbGl6YWJsZU1lbWJlcih0eXBlLCBzb3VyY2VOYW1lKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9u
ICh0YXJnZXQsIHByb3BlcnR5S2V5KSB7CisgICAgICAgIHZhciBjbGFzc1N0b3JlID0gZ2V0RGly
ZWN0U3RvcmUodGFyZ2V0KTsKKyAgICAgICAgaWYgKCFjbGFzc1N0b3JlW3Byb3BlcnR5S2V5XSkg
eworICAgICAgICAgICAgY2xhc3NTdG9yZVtwcm9wZXJ0eUtleV0gPSB7IHR5cGU6IHR5cGUsIHNv
dXJjZU5hbWU6IHNvdXJjZU5hbWUgfTsKKyAgICAgICAgfQorICAgIH07Cit9CitmdW5jdGlvbiBn
ZW5lcmF0ZUV4cGFuZE1lbWJlcihzZXRDYWxsYmFjaywgdGFyZ2V0S2V5KSB7CisgICAgaWYgKHRh
cmdldEtleSA9PT0gdm9pZCAwKSB7IHRhcmdldEtleSA9IG51bGw7IH0KKyAgICByZXR1cm4gZnVu
Y3Rpb24gKHRhcmdldCwgcHJvcGVydHlLZXkpIHsKKyAgICAgICAgdmFyIGtleSA9IHRhcmdldEtl
eSB8fCAoIl8iICsgcHJvcGVydHlLZXkpOworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
dGFyZ2V0LCBwcm9wZXJ0eUtleSwgeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNba2V5XTsKKyAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzW2tl
eV0gPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdGhpc1trZXldID0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgdGFyZ2V0W3NldENhbGxiYWNrXS5hcHBseSh0aGlzKTsKKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgICAgIH0pOworICAgIH07Cit9CitmdW5jdGlvbiBleHBhbmRUb1Byb3BlcnR5KGNhbGxi
YWNrLCB0YXJnZXRLZXkpIHsKKyAgICBpZiAodGFyZ2V0S2V5ID09PSB2b2lkIDApIHsgdGFyZ2V0
S2V5ID0gbnVsbDsgfQorICAgIHJldHVybiBnZW5lcmF0ZUV4cGFuZE1lbWJlcihjYWxsYmFjaywg
dGFyZ2V0S2V5KTsKK30KK2Z1bmN0aW9uIHNlcmlhbGl6ZShzb3VyY2VOYW1lKSB7CisgICAgcmV0
dXJuIGdlbmVyYXRlU2VyaWFsaXphYmxlTWVtYmVyKDAsIHNvdXJjZU5hbWUpOyAvLyB2YWx1ZSBt
ZW1iZXIKK30KK2Z1bmN0aW9uIHNlcmlhbGl6ZUFzVGV4dHVyZShzb3VyY2VOYW1lKSB7CisgICAg
cmV0dXJuIGdlbmVyYXRlU2VyaWFsaXphYmxlTWVtYmVyKDEsIHNvdXJjZU5hbWUpOyAvLyB0ZXh0
dXJlIG1lbWJlcgorfQorZnVuY3Rpb24gc2VyaWFsaXplQXNDb2xvcjMoc291cmNlTmFtZSkgewor
ICAgIHJldHVybiBnZW5lcmF0ZVNlcmlhbGl6YWJsZU1lbWJlcigyLCBzb3VyY2VOYW1lKTsgLy8g
Y29sb3IzIG1lbWJlcgorfQorZnVuY3Rpb24gc2VyaWFsaXplQXNGcmVzbmVsUGFyYW1ldGVycyhz
b3VyY2VOYW1lKSB7CisgICAgcmV0dXJuIGdlbmVyYXRlU2VyaWFsaXphYmxlTWVtYmVyKDMsIHNv
dXJjZU5hbWUpOyAvLyBmcmVzbmVsIHBhcmFtZXRlcnMgbWVtYmVyCit9CitmdW5jdGlvbiBzZXJp
YWxpemVBc1ZlY3RvcjIoc291cmNlTmFtZSkgeworICAgIHJldHVybiBnZW5lcmF0ZVNlcmlhbGl6
YWJsZU1lbWJlcig0LCBzb3VyY2VOYW1lKTsgLy8gdmVjdG9yMiBtZW1iZXIKK30KK2Z1bmN0aW9u
IHNlcmlhbGl6ZUFzVmVjdG9yMyhzb3VyY2VOYW1lKSB7CisgICAgcmV0dXJuIGdlbmVyYXRlU2Vy
aWFsaXphYmxlTWVtYmVyKDUsIHNvdXJjZU5hbWUpOyAvLyB2ZWN0b3IzIG1lbWJlcgorfQorZnVu
Y3Rpb24gc2VyaWFsaXplQXNNZXNoUmVmZXJlbmNlKHNvdXJjZU5hbWUpIHsKKyAgICByZXR1cm4g
Z2VuZXJhdGVTZXJpYWxpemFibGVNZW1iZXIoNiwgc291cmNlTmFtZSk7IC8vIG1lc2ggcmVmZXJl
bmNlIG1lbWJlcgorfQorZnVuY3Rpb24gc2VyaWFsaXplQXNDb2xvckN1cnZlcyhzb3VyY2VOYW1l
KSB7CisgICAgcmV0dXJuIGdlbmVyYXRlU2VyaWFsaXphYmxlTWVtYmVyKDcsIHNvdXJjZU5hbWUp
OyAvLyBjb2xvciBjdXJ2ZXMKK30KK2Z1bmN0aW9uIHNlcmlhbGl6ZUFzQ29sb3I0KHNvdXJjZU5h
bWUpIHsKKyAgICByZXR1cm4gZ2VuZXJhdGVTZXJpYWxpemFibGVNZW1iZXIoOCwgc291cmNlTmFt
ZSk7IC8vIGNvbG9yIDQKK30KK2Z1bmN0aW9uIHNlcmlhbGl6ZUFzSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbihzb3VyY2VOYW1lKSB7CisgICAgcmV0dXJuIGdlbmVyYXRlU2VyaWFsaXphYmxl
TWVtYmVyKDksIHNvdXJjZU5hbWUpOyAvLyBpbWFnZSBwcm9jZXNzaW5nCit9CitmdW5jdGlvbiBz
ZXJpYWxpemVBc1F1YXRlcm5pb24oc291cmNlTmFtZSkgeworICAgIHJldHVybiBnZW5lcmF0ZVNl
cmlhbGl6YWJsZU1lbWJlcigxMCwgc291cmNlTmFtZSk7IC8vIHF1YXRlcm5pb24gbWVtYmVyCit9
CitmdW5jdGlvbiBzZXJpYWxpemVBc01hdHJpeChzb3VyY2VOYW1lKSB7CisgICAgcmV0dXJuIGdl
bmVyYXRlU2VyaWFsaXphYmxlTWVtYmVyKDEyLCBzb3VyY2VOYW1lKTsgLy8gbWF0cml4IG1lbWJl
cgorfQorLyoqCisgKiBEZWNvcmF0b3IgdXNlZCB0byBkZWZpbmUgcHJvcGVydHkgdGhhdCBjYW4g
YmUgc2VyaWFsaXplZCBhcyByZWZlcmVuY2UgdG8gYSBjYW1lcmEKKyAqIEBwYXJhbSBzb3VyY2VO
YW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRlY29yYXRlCisgKi8KK2Z1
bmN0aW9uIHNlcmlhbGl6ZUFzQ2FtZXJhUmVmZXJlbmNlKHNvdXJjZU5hbWUpIHsKKyAgICByZXR1
cm4gZ2VuZXJhdGVTZXJpYWxpemFibGVNZW1iZXIoMTEsIHNvdXJjZU5hbWUpOyAvLyBjYW1lcmEg
cmVmZXJlbmNlIG1lbWJlcgorfQorLyoqCisgKiBDbGFzcyB1c2VkIHRvIGhlbHAgc2VyaWFsaXph
dGlvbiBvYmplY3RzCisgKi8KK3ZhciBTZXJpYWxpemF0aW9uSGVscGVyID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFNlcmlhbGl6YXRpb25IZWxwZXIoKSB7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIEFwcGVuZHMgdGhlIHNlcmlhbGl6ZWQgYW5pbWF0aW9ucyBm
cm9tIHRoZSBzb3VyY2UgYW5pbWF0aW9ucworICAgICAqIEBwYXJhbSBzb3VyY2UgU291cmNlIGNv
bnRhaW5pbmcgdGhlIGFuaW1hdGlvbnMKKyAgICAgKiBAcGFyYW0gZGVzdGluYXRpb24gVGFyZ2V0
IHRvIHN0b3JlIHRoZSBhbmltYXRpb25zCisgICAgICovCisgICAgU2VyaWFsaXphdGlvbkhlbHBl
ci5BcHBlbmRTZXJpYWxpemVkQW5pbWF0aW9ucyA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3RpbmF0
aW9uKSB7CisgICAgICAgIGlmIChzb3VyY2UuYW5pbWF0aW9ucykgeworICAgICAgICAgICAgZGVz
dGluYXRpb24uYW5pbWF0aW9ucyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgYW5pbWF0aW9u
SW5kZXggPSAwOyBhbmltYXRpb25JbmRleCA8IHNvdXJjZS5hbmltYXRpb25zLmxlbmd0aDsgYW5p
bWF0aW9uSW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSBzb3VyY2Uu
YW5pbWF0aW9uc1thbmltYXRpb25JbmRleF07CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb24u
YW5pbWF0aW9ucy5wdXNoKGFuaW1hdGlvbi5zZXJpYWxpemUoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFN0YXRpYyBmdW5jdGlvbiB1c2VkIHRv
IHNlcmlhbGl6ZWQgYSBzcGVjaWZpYyBlbnRpdHkKKyAgICAgKiBAcGFyYW0gZW50aXR5IGRlZmlu
ZXMgdGhlIGVudGl0eSB0byBzZXJpYWxpemUKKyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlvbk9i
amVjdCBkZWZpbmVzIHRoZSBvcHRpb25hbCB0YXJnZXQgb2JlY2p0IHdoZXJlIHNlcmlhbGl6YXRp
b24gZGF0YSB3aWxsIGJlIHN0b3JlZAorICAgICAqIEByZXR1cm5zIGEgSlNPTiBjb21wYXRpYmxl
IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIGVudGl0eQorICAg
ICAqLworICAgIFNlcmlhbGl6YXRpb25IZWxwZXIuU2VyaWFsaXplID0gZnVuY3Rpb24gKGVudGl0
eSwgc2VyaWFsaXphdGlvbk9iamVjdCkgeworICAgICAgICBpZiAoIXNlcmlhbGl6YXRpb25PYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBUYWdzCisgICAgICAgIGlmIChfTWlzY190YWdzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlRhZ3MiXSkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50
YWdzID0gX01pc2NfdGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUYWdzIl0uR2V0
VGFncyhlbnRpdHkpOworICAgICAgICB9CisgICAgICAgIHZhciBzZXJpYWxpemVkUHJvcGVydGll
cyA9IGdldE1lcmdlZFN0b3JlKGVudGl0eSk7CisgICAgICAgIC8vIFByb3BlcnRpZXMKKyAgICAg
ICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc2VyaWFsaXplZFByb3BlcnRpZXMpIHsKKyAgICAgICAg
ICAgIHZhciBwcm9wZXJ0eURlc2NyaXB0b3IgPSBzZXJpYWxpemVkUHJvcGVydGllc1twcm9wZXJ0
eV07CisgICAgICAgICAgICB2YXIgdGFyZ2V0UHJvcGVydHlOYW1lID0gcHJvcGVydHlEZXNjcmlw
dG9yLnNvdXJjZU5hbWUgfHwgcHJvcGVydHk7CisgICAgICAgICAgICB2YXIgcHJvcGVydHlUeXBl
ID0gcHJvcGVydHlEZXNjcmlwdG9yLnR5cGU7CisgICAgICAgICAgICB2YXIgc291cmNlUHJvcGVy
dHkgPSBlbnRpdHlbcHJvcGVydHldOworICAgICAgICAgICAgaWYgKHNvdXJjZVByb3BlcnR5ICE9
PSB1bmRlZmluZWQgJiYgc291cmNlUHJvcGVydHkgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHByb3BlcnR5VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IC8v
IFZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0W3Rhcmdl
dFByb3BlcnR5TmFtZV0gPSBzb3VyY2VQcm9wZXJ0eTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIFRleHR1cmUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3RbdGFyZ2V0UHJvcGVydHlOYW1lXSA9
IHNvdXJjZVByb3BlcnR5LnNlcmlhbGl6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gQ29sb3IzCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0W3RhcmdldFByb3BlcnR5TmFtZV0gPSBzb3Vy
Y2VQcm9wZXJ0eS5hc0FycmF5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiAvLyBGcmVzbmVsUGFyYW1ldGVycworICAgICAgICAg
ICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdFt0YXJnZXRQcm9wZXJ0eU5hbWVdID0g
c291cmNlUHJvcGVydHkuc2VyaWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiAvLyBWZWN0b3IyCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0W3RhcmdldFByb3BlcnR5TmFtZV0gPSBzb3Vy
Y2VQcm9wZXJ0eS5hc0FycmF5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSA1OiAvLyBWZWN0b3IzCisgICAgICAgICAgICAgICAgICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0W3RhcmdldFByb3BlcnR5TmFtZV0gPSBzb3VyY2VQcm9w
ZXJ0eS5hc0FycmF5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSA2OiAvLyBNZXNoIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdFt0YXJnZXRQcm9wZXJ0eU5hbWVdID0gc291cmNlUHJv
cGVydHkuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSA3OiAvLyBDb2xvciBDdXJ2ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3RbdGFyZ2V0UHJvcGVydHlOYW1lXSA9IHNvdXJjZVByb3BlcnR5LnNl
cmlhbGl6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgODogLy8gQ29sb3IgNAorICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdFt0YXJnZXRQcm9wZXJ0eU5hbWVdID0gc291cmNlUHJvcGVydHkuYXNBcnJh
eSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgOTogLy8gSW1hZ2UgUHJvY2Vzc2luZworICAgICAgICAgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdFt0YXJnZXRQcm9wZXJ0eU5hbWVdID0gc291cmNlUHJvcGVydHkuc2Vy
aWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAxMDogLy8gUXVhdGVybmlvbgorICAgICAgICAgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdFt0YXJnZXRQcm9wZXJ0eU5hbWVdID0gc291cmNlUHJvcGVydHkuYXNB
cnJheSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMTE6IC8vIENhbWVyYSByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNlcmlhbGl6YXRpb25PYmplY3RbdGFyZ2V0UHJvcGVydHlOYW1lXSA9IHNvdXJjZVByb3BlcnR5
LmlkOworICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOiAvLyBNYXRyaXgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3RbdGFyZ2V0UHJvcGVydHlOYW1lXSA9IHNv
dXJjZVByb3BlcnR5LmFzQXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgZW50aXR5IGZyb20gYSBzZXJpYWxpemF0aW9uIGRhdGEgb2JqZWN0CisgICAgICogQHBh
cmFtIGNyZWF0aW9uRnVuY3Rpb24gZGVmaW5lcyBhIGZ1bmN0aW9uIHVzZWQgdG8gaW5zdGFuY2lh
dGVkIHRoZSBuZXcgZW50aXR5CisgICAgICogQHBhcmFtIHNvdXJjZSBkZWZpbmVzIHRoZSBzb3Vy
Y2Ugc2VyaWFsaXphdGlvbiBkYXRhCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhv
c3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSByb290IHVybCBm
b3IgcmVzb3VyY2VzCisgICAgICogQHJldHVybnMgYSBuZXcgZW50aXR5CisgICAgICovCisgICAg
U2VyaWFsaXphdGlvbkhlbHBlci5QYXJzZSA9IGZ1bmN0aW9uIChjcmVhdGlvbkZ1bmN0aW9uLCBz
b3VyY2UsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIGlmIChyb290VXJsID09PSB2b2lkIDAp
IHsgcm9vdFVybCA9IG51bGw7IH0KKyAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gY3JlYXRpb25G
dW5jdGlvbigpOworICAgICAgICBpZiAoIXJvb3RVcmwpIHsKKyAgICAgICAgICAgIHJvb3RVcmwg
PSAiIjsKKyAgICAgICAgfQorICAgICAgICAvLyBUYWdzCisgICAgICAgIGlmIChfTWlzY190YWdz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRhZ3MiXSkgeworICAgICAgICAgICAgX01p
c2NfdGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUYWdzIl0uQWRkVGFnc1RvKGRl
c3RpbmF0aW9uLCBzb3VyY2UudGFncyk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNsYXNzU3Rv
cmUgPSBnZXRNZXJnZWRTdG9yZShkZXN0aW5hdGlvbik7CisgICAgICAgIC8vIFByb3BlcnRpZXMK
KyAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gY2xhc3NTdG9yZSkgeworICAgICAgICAgICAg
dmFyIHByb3BlcnR5RGVzY3JpcHRvciA9IGNsYXNzU3RvcmVbcHJvcGVydHldOworICAgICAgICAg
ICAgdmFyIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW3Byb3BlcnR5RGVzY3JpcHRvci5zb3VyY2VO
YW1lIHx8IHByb3BlcnR5XTsKKyAgICAgICAgICAgIHZhciBwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0
eURlc2NyaXB0b3IudHlwZTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VQcm9wZXJ0eSAhPT0gdW5k
ZWZpbmVkICYmIHNvdXJjZVByb3BlcnR5ICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdmFy
IGRlc3QgPSBkZXN0aW5hdGlvbjsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5VHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IC8vIFZhbHVlCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0W3Byb3BlcnR5XSA9IHNvdXJjZVByb3BlcnR5OworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gVGV4dHVy
ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjZW5lKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFtwcm9wZXJ0eV0gPSBTZXJpYWxpemF0aW9uSGVscGVyLl9UZXh0dXJl
UGFyc2VyKHNvdXJjZVByb3BlcnR5LCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOiAvLyBDb2xvcjMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbcHJv
cGVydHldID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
Q29sb3IzIl0uRnJvbUFycmF5KHNvdXJjZVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IC8vIEZyZXNuZWxQYXJhbWV0
ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3Byb3BlcnR5XSA9IFNlcmlhbGl6YXRp
b25IZWxwZXIuX0ZyZXNuZWxQYXJhbWV0ZXJzUGFyc2VyKHNvdXJjZVByb3BlcnR5KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IC8v
IFZlY3RvcjIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbcHJvcGVydHldID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjIiXS5Gcm9t
QXJyYXkoc291cmNlUHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgNTogLy8gVmVjdG9yMworICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFtwcm9wZXJ0eV0gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJheShzb3VyY2VQcm9wZXJ0eSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiAv
LyBNZXNoIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjZW5lKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtwcm9wZXJ0eV0gPSBzY2VuZS5nZXRMYXN0
TWVzaEJ5SUQoc291cmNlUHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNzog
Ly8gQ29sb3IgQ3VydmVzCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3Byb3BlcnR5XSA9
IFNlcmlhbGl6YXRpb25IZWxwZXIuX0NvbG9yQ3VydmVzUGFyc2VyKHNvdXJjZVByb3BlcnR5KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDg6IC8vIENvbG9yIDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbcHJvcGVydHldID0g
X01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29sb3I0Il0u
RnJvbUFycmF5KHNvdXJjZVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEltYWdlIFByb2Nlc3NpbmcKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RbcHJvcGVydHldID0gU2VyaWFsaXphdGlvbkhlbHBlci5f
SW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvblBhcnNlcihzb3VyY2VQcm9wZXJ0eSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDog
Ly8gUXVhdGVybmlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtwcm9wZXJ0eV0gPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUXVhdGVybmlv
biJdLkZyb21BcnJheShzb3VyY2VQcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTogLy8gQ2FtZXJhIHJlZmVyZW5jZQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjZW5lKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFtwcm9wZXJ0eV0gPSBzY2VuZS5nZXRDYW1lcmFCeUlEKHNvdXJjZVByb3Bl
cnR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAxMjogLy8gTWF0cml4CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3Byb3BlcnR5XSA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgi
XS5Gcm9tQXJyYXkoc291cmNlUHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBkZXN0aW5hdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lcyBhbiBv
YmplY3QKKyAgICAgKiBAcGFyYW0gY3JlYXRpb25GdW5jdGlvbiBkZWZpbmVzIHRoZSBmdW5jdGlv
biB1c2VkIHRvIGluc3RhbmNpYXRlIHRoZSBuZXcgb2JqZWN0CisgICAgICogQHBhcmFtIHNvdXJj
ZSBkZWZpbmVzIHRoZSBzb3VyY2Ugb2JqZWN0CisgICAgICogQHJldHVybnMgdGhlIGNsb25lZCBv
YmplY3QKKyAgICAgKi8KKyAgICBTZXJpYWxpemF0aW9uSGVscGVyLkNsb25lID0gZnVuY3Rpb24g
KGNyZWF0aW9uRnVuY3Rpb24sIHNvdXJjZSkgeworICAgICAgICByZXR1cm4gX2NvcHlTb3VyY2Uo
Y3JlYXRpb25GdW5jdGlvbiwgc291cmNlLCBmYWxzZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBJbnN0YW5jaWF0ZXMgYSBuZXcgb2JqZWN0IGJhc2VkIG9uIGEgc291cmNlIG9uZSAoc29tZSBk
YXRhIHdpbGwgYmUgc2hhcmVkIGJldHdlZW4gYm90aCBvYmplY3QpCisgICAgICogQHBhcmFtIGNy
ZWF0aW9uRnVuY3Rpb24gZGVmaW5lcyB0aGUgZnVuY3Rpb24gdXNlZCB0byBpbnN0YW5jaWF0ZSB0
aGUgbmV3IG9iamVjdAorICAgICAqIEBwYXJhbSBzb3VyY2UgZGVmaW5lcyB0aGUgc291cmNlIG9i
amVjdAorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgb2JqZWN0CisgICAgICovCisgICAgU2VyaWFs
aXphdGlvbkhlbHBlci5JbnN0YW5jaWF0ZSA9IGZ1bmN0aW9uIChjcmVhdGlvbkZ1bmN0aW9uLCBz
b3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIF9jb3B5U291cmNlKGNyZWF0aW9uRnVuY3Rpb24sIHNv
dXJjZSwgdHJ1ZSk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFNlcmlhbGl6YXRp
b25IZWxwZXIuX0ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25QYXJzZXIgPSBmdW5jdGlvbiAo
c291cmNlUHJvcGVydHkpIHsKKyAgICAgICAgdGhyb3cgX2RldlRvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIkltYWdlUHJvY2Vzc2luZ0Nv
bmZpZ3VyYXRpb24iKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgU2VyaWFsaXph
dGlvbkhlbHBlci5fRnJlc25lbFBhcmFtZXRlcnNQYXJzZXIgPSBmdW5jdGlvbiAoc291cmNlUHJv
cGVydHkpIHsKKyAgICAgICAgdGhyb3cgX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIkZyZXNuZWxQYXJhbWV0ZXJzIik7CisgICAg
fTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFNlcmlhbGl6YXRpb25IZWxwZXIuX0NvbG9yQ3Vy
dmVzUGFyc2VyID0gZnVuY3Rpb24gKHNvdXJjZVByb3BlcnR5KSB7CisgICAgICAgIHRocm93IF9k
ZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1w
b3J0KCJDb2xvckN1cnZlcyIpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTZXJp
YWxpemF0aW9uSGVscGVyLl9UZXh0dXJlUGFyc2VyID0gZnVuY3Rpb24gKHNvdXJjZVByb3BlcnR5
LCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICB0aHJvdyBfZGV2VG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiVGV4dHVyZSIpOworICAg
IH07CisgICAgcmV0dXJuIFNlcmlhbGl6YXRpb25IZWxwZXI7Cit9KCkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL01pc2MvZGVlcENvcGllci50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL2RlZXBDb3BpZXIudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBEZWVwQ29w
aWVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlZXBDb3BpZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIERlZXBDb3BpZXI7IH0pOwordmFyIGNsb25lVmFsdWUgPSBmdW5j
dGlvbiAoc291cmNlLCBkZXN0aW5hdGlvbk9iamVjdCkgeworICAgIGlmICghc291cmNlKSB7Cisg
ICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBpZiAoc291cmNlLmdldENsYXNzTmFtZSAm
JiBzb3VyY2UuZ2V0Q2xhc3NOYW1lKCkgPT09ICJNZXNoIikgeworICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9CisgICAgaWYgKHNvdXJjZS5nZXRDbGFzc05hbWUgJiYgc291cmNlLmdldENsYXNz
TmFtZSgpID09PSAiU3ViTWVzaCIpIHsKKyAgICAgICAgcmV0dXJuIHNvdXJjZS5jbG9uZShkZXN0
aW5hdGlvbk9iamVjdCk7CisgICAgfQorICAgIGVsc2UgaWYgKHNvdXJjZS5jbG9uZSkgeworICAg
ICAgICByZXR1cm4gc291cmNlLmNsb25lKCk7CisgICAgfQorICAgIHJldHVybiBudWxsOworfTsK
Ky8qKgorICogQ2xhc3MgY29udGFpbmluZyBhIHNldCBvZiBzdGF0aWMgdXRpbGl0aWVzIGZ1bmN0
aW9ucyBmb3IgZGVlcCBjb3B5LgorICovCit2YXIgRGVlcENvcGllciA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBEZWVwQ29waWVyKCkgeworICAgIH0KKyAgICAv
KioKKyAgICAgKiBUcmllcyB0byBjb3B5IGFuIG9iamVjdCBieSBkdXBsaWNhdGluZyBldmVyeSBw
cm9wZXJ0eQorICAgICAqIEBwYXJhbSBzb3VyY2UgZGVmaW5lcyB0aGUgc291cmNlIG9iamVjdAor
ICAgICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBkZWZpbmVzIHRoZSB0YXJnZXQgb2JqZWN0CisgICAg
ICogQHBhcmFtIGRvTm90Q29weUxpc3QgZGVmaW5lcyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0byBh
dm9pZAorICAgICAqIEBwYXJhbSBtdXN0Q29weUxpc3QgZGVmaW5lcyBhIGxpc3Qgb2YgcHJvcGVy
dGllcyB0byBjb3B5IChldmVuIGlmIHRoZXkgc3RhcnQgd2l0aCBfKQorICAgICAqLworICAgIERl
ZXBDb3BpZXIuRGVlcENvcHkgPSBmdW5jdGlvbiAoc291cmNlLCBkZXN0aW5hdGlvbiwgZG9Ob3RD
b3B5TGlzdCwgbXVzdENvcHlMaXN0KSB7CisgICAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNl
KSB7CisgICAgICAgICAgICBpZiAocHJvcFswXSA9PT0gIl8iICYmICghbXVzdENvcHlMaXN0IHx8
IG11c3RDb3B5TGlzdC5pbmRleE9mKHByb3ApID09PSAtMSkpIHsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkb05vdENvcHlMaXN0ICYm
IGRvTm90Q29weUxpc3QuaW5kZXhPZihwcm9wKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBzb3VyY2VWYWx1ZSA9IHNv
dXJjZVtwcm9wXTsKKyAgICAgICAgICAgIHZhciB0eXBlT2ZTb3VyY2VWYWx1ZSA9IHR5cGVvZiBz
b3VyY2VWYWx1ZTsKKyAgICAgICAgICAgIGlmICh0eXBlT2ZTb3VyY2VWYWx1ZSA9PT0gImZ1bmN0
aW9uIikgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZU9mU291cmNlVmFsdWUgPT09ICJv
YmplY3QiKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VWYWx1ZSBpbnN0YW5jZW9m
IEFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbltwcm9wXSA9IFtd
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVZhbHVlLmxlbmd0aCA+IDApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVZhbHVlWzBdID09
ICJvYmplY3QiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlu
ZGV4ID0gMDsgaW5kZXggPCBzb3VyY2VWYWx1ZS5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbG9uZWRWYWx1ZSA9IGNsb25lVmFsdWUo
c291cmNlVmFsdWVbaW5kZXhdLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZGVzdGluYXRpb25bcHJvcF0uaW5kZXhPZihjbG9uZWRWYWx1ZSkg
PT09IC0xKSB7IC8vIFRlc3QgaWYgYXV0byBpbmplY3Qgd2FzIG5vdCBkb25lCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bcHJvcF0ucHVzaChjbG9u
ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uW3Byb3BdID0gc291cmNlVmFsdWUuc2xpY2UoMCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bcHJvcF0gPSBjbG9uZVZhbHVlKHNvdXJjZVZh
bHVlLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uW3Byb3BdID0gc291cmNlVmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAvLyBKdXN0IGlnbm9y
ZSBlcnJvciAoaXQgY291bGQgYmUgYmVjYXVzZSBvZiBhIHJlYWQtb25seSBwcm9wZXJ0eSkKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIERlZXBDb3BpZXI7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2MvZGVmZXJyZWQudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvZGVmZXJyZWQudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogRGVmZXJyZWQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVmZXJy
ZWQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERlZmVycmVkOyB9KTsKKy8qKgorICogV3JhcHBlciBj
bGFzcyBmb3IgcHJvbWlzZSB3aXRoIGV4dGVybmFsIHJlc29sdmUgYW5kIHJlamVjdC4KKyAqLwor
dmFyIERlZmVycmVkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAg
ICAqIENvbnN0cnVjdG9yIGZvciB0aGlzIGRlZmVycmVkIG9iamVjdC4KKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBEZWZlcnJlZCgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
dGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewor
ICAgICAgICAgICAgX3RoaXMuX3Jlc29sdmUgPSByZXNvbHZlOworICAgICAgICAgICAgX3RoaXMu
X3JlamVjdCA9IHJlamVjdDsKKyAgICAgICAgfSk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShEZWZlcnJlZC5wcm90b3R5cGUsICJyZXNvbHZlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogVGhlIHJlc29sdmUgbWV0aG9kIG9mIHRoZSBwcm9taXNlIGFzc29jaWF0ZWQgd2l0
aCB0aGlzIGRlZmVycmVkIG9iamVjdC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmU7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZlcnJlZC5wcm90b3R5cGUsICJyZWpl
Y3QiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgcmVqZWN0IG1ldGhvZCBvZiB0aGUg
cHJvbWlzZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWZlcnJlZCBvYmplY3QuCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9y
ZWplY3Q7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIHJldHVybiBEZWZlcnJlZDsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9kZXZUb29scy50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlzYy9kZXZUb29scy50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBfRGV2
VG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0RldlRvb2xzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfRGV2VG9vbHM7IH0pOworLyoqIEBoaWRkZW4gKi8KK3ZhciBf
RGV2VG9vbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gX0Rl
dlRvb2xzKCkgeworICAgIH0KKyAgICBfRGV2VG9vbHMuV2FybkltcG9ydCA9IGZ1bmN0aW9uIChu
YW1lKSB7CisgICAgICAgIHJldHVybiBuYW1lICsgIiBuZWVkcyB0byBiZSBpbXBvcnRlZCBiZWZv
cmUgYXMgaXQgY29udGFpbnMgYSBzaWRlLWVmZmVjdCByZXF1aXJlZCBieSB5b3VyIGNvZGUuIjsK
KyAgICB9OworICAgIHJldHVybiBfRGV2VG9vbHM7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL01pc2MvZG9tTWFuYWdlbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL2RvbU1hbmFnZW1lbnQudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBE
b21NYW5hZ2VtZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRvbU1h
bmFnZW1lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERvbU1hbmFnZW1lbnQ7IH0pOworLyoqCisg
KiBTZXRzIG9mIGhlbHBlcnMgZGVhbGluZyB3aXRoIHRoZSBET00gYW5kIHNvbWUgb2YgdGhlIHJl
Y3VycmVudCBmdW5jdGlvbnMgbmVlZGVkIGluCisgKiBCYWJ5bG9uLmpzCisgKi8KK3ZhciBEb21N
YW5hZ2VtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIERv
bU1hbmFnZW1lbnQoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIENoZWNrcyBpZiB0aGUgd2lu
ZG93IG9iamVjdCBleGlzdHMKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB3aW5kb3cgb2Jq
ZWN0IGV4aXN0cworICAgICAqLworICAgIERvbU1hbmFnZW1lbnQuSXNXaW5kb3dPYmplY3RFeGlz
dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICh0eXBlb2Ygd2luZG93KSAhPT0gInVu
ZGVmaW5lZCI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIG5hdmlnYXRv
ciBvYmplY3QgZXhpc3RzCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgbmF2aWdhdG9yIG9i
amVjdCBleGlzdHMKKyAgICAgKi8KKyAgICBEb21NYW5hZ2VtZW50LklzTmF2aWdhdG9yQXZhaWxh
YmxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gKHR5cGVvZiBuYXZpZ2F0b3IpICE9
PSAidW5kZWZpbmVkIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEV4dHJhY3RzIHRleHQgY29u
dGVudCBmcm9tIGEgRE9NIGVsZW1lbnQgaGllcmFyY2h5CisgICAgICogQHBhcmFtIGVsZW1lbnQg
ZGVmaW5lcyB0aGUgcm9vdCBlbGVtZW50CisgICAgICogQHJldHVybnMgYSBzdHJpbmcKKyAgICAg
Ki8KKyAgICBEb21NYW5hZ2VtZW50LkdldERPTVRleHRDb250ZW50ID0gZnVuY3Rpb24gKGVsZW1l
bnQpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9ICIiOworICAgICAgICB2YXIgY2hpbGQgPSBlbGVt
ZW50LmZpcnN0Q2hpbGQ7CisgICAgICAgIHdoaWxlIChjaGlsZCkgeworICAgICAgICAgICAgaWYg
KGNoaWxkLm5vZGVUeXBlID09PSAzKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNoaWxk
LnRleHRDb250ZW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hpbGQgPSAoY2hpbGQu
bmV4dFNpYmxpbmcpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsK
KyAgICByZXR1cm4gRG9tTWFuYWdlbWVudDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWlzYy9lbnZpcm9ubWVudFRleHR1cmVUb29scy50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlzYy9lbnZpcm9ubWVu
dFRleHR1cmVUb29scy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBFbnZpcm9ubWVudFRleHR1cmVUb29s
cyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFbnZpcm9ubWVudFRleHR1
cmVUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRW52aXJvbm1lbnRUZXh0dXJlVG9vbHM7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90b29scyAqLyAiLi9NaXNjL3Rvb2xz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRo
cy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5zY2FsYXIgKi8gIi4v
TWF0aHMvbWF0aC5zY2FsYXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
c3BoZXJpY2FsUG9seW5vbWlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvc3BoZXJpY2FsUG9seW5vbWlhbCAqLyAiLi9NYXRo
cy9zcGhlcmljYWxQb2x5bm9taWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9pbnRl
cm5hbFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfYmFzZVRleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGVyaWFscy9UZXh0dXJlcy9iYXNlVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVy
ZXMvYmFzZVRleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9Q
b3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3Mu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2Vy
ICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2lu
ZXNfRXh0ZW5zaW9uc19lbmdpbmVfcmVuZGVyVGFyZ2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9FeHRlbnNpb25zL2Vu
Z2luZS5yZW5kZXJUYXJnZXQgKi8gIi4vRW5naW5lcy9FeHRlbnNpb25zL2VuZ2luZS5yZW5kZXJU
YXJnZXQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19yZ2JkRW5jb2Rl
X2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vU2hhZGVycy9yZ2JkRW5jb2RlLmZyYWdtZW50ICovICIuL1NoYWRlcnMvcmdi
ZEVuY29kZS5mcmFnbWVudC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJz
X3JnYmREZWNvZGVfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL3JnYmREZWNvZGUuZnJhZ21lbnQgKi8gIi4v
U2hhZGVycy9yZ2JkRGVjb2RlLmZyYWdtZW50LnRzIik7CisKKworCisKKworCisKKworCisKKwor
CisKKy8qKgorICogU2V0cyBvZiBoZWxwZXJzIGFkZHJlc3NpbmcgdGhlIHNlcmlhbGl6YXRpb24g
YW5kIGRlc2VyaWFsaXphdGlvbiBvZiBlbnZpcm9ubWVudCB0ZXh0dXJlCisgKiBzdG9yZWQgaW4g
YSBCYWJ5bG9uSlMgZW52IGZpbGUuCisgKiBUaG9zZSBmaWxlcyBhcmUgdXN1YWxseSBzdG9yZWQg
YXMgLmVudiBmaWxlcy4KKyAqLwordmFyIEVudmlyb25tZW50VGV4dHVyZVRvb2xzID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEVudmlyb25tZW50VGV4dHVyZVRv
b2xzKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBlbnZpcm9ubWVudCBpbmZv
IGZyb20gYW4gZW52IGZpbGUuCisgICAgICogQHBhcmFtIGRhdGEgVGhlIGFycmF5IGJ1ZmZlciBj
b250YWluaW5nIHRoZSAuZW52IGJ5dGVzLgorICAgICAqIEByZXR1cm5zIHRoZSBlbnZpcm9ubWVu
dCBmaWxlIGluZm8gKHRoZSBqc29uIGhlYWRlcikgaWYgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KKyAg
ICAgKi8KKyAgICBFbnZpcm9ubWVudFRleHR1cmVUb29scy5HZXRFbnZJbmZvID0gZnVuY3Rpb24g
KGRhdGEpIHsKKyAgICAgICAgdmFyIGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGRhdGEpOworICAg
ICAgICB2YXIgcG9zID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBFbnZpcm9ubWVu
dFRleHR1cmVUb29scy5fTWFnaWNCeXRlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYg
KGRhdGFWaWV3LmdldFVpbnQ4KHBvcysrKSAhPT0gRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMuX01h
Z2ljQnl0ZXNbaV0pIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siTG9nZ2VyIl0uRXJyb3IoJ05vdCBhIGJhYnlsb24gZW52aXJvbm1l
bnQgbWFwJyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gUmVhZCBqc29uIG1hbmlmZXN0IC0gY29sbGVjdCBjaGFyYWN0
ZXJzIHVwIHRvIG51bGwgdGVybWluYXRvcgorICAgICAgICB2YXIgbWFuaWZlc3RTdHJpbmcgPSAn
JzsKKyAgICAgICAgdmFyIGNoYXJDb2RlID0gMHgwMDsKKyAgICAgICAgd2hpbGUgKChjaGFyQ29k
ZSA9IGRhdGFWaWV3LmdldFVpbnQ4KHBvcysrKSkpIHsKKyAgICAgICAgICAgIG1hbmlmZXN0U3Ry
aW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpOworICAgICAgICB9CisgICAgICAg
IHZhciBtYW5pZmVzdCA9IEpTT04ucGFyc2UobWFuaWZlc3RTdHJpbmcpOworICAgICAgICBpZiAo
bWFuaWZlc3Quc3BlY3VsYXIpIHsKKyAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgaGVhZGVyIHdp
dGggdGhlIHBvc2l0aW9uIG9mIHRoZSBwYXlsb2FkLgorICAgICAgICAgICAgbWFuaWZlc3Quc3Bl
Y3VsYXIuc3BlY3VsYXJEYXRhUG9zaXRpb24gPSBwb3M7CisgICAgICAgICAgICAvLyBGYWxsYmFj
ayB0byAwLjggZXhhY3RseSBpZiBsb2RHZW5lcmF0aW9uU2NhbGUgaXMgbm90IGRlZmluZWQgZm9y
IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgICAgICAgICAgICBtYW5pZmVzdC5zcGVjdWxhci5s
b2RHZW5lcmF0aW9uU2NhbGUgPSBtYW5pZmVzdC5zcGVjdWxhci5sb2RHZW5lcmF0aW9uU2NhbGUg
fHwgMC44OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYW5pZmVzdDsKKyAgICB9OworICAg
IC8qKgorICAgICAqIENyZWF0ZXMgYW4gZW52aXJvbm1lbnQgdGV4dHVyZSBmcm9tIGEgbG9hZGVk
IGN1YmUgdGV4dHVyZS4KKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBkZWZpbmVzIHRoZSBjdWJlIHRl
eHR1cmUgdG8gY29udmVydCBpbiBlbnYgZmlsZQorICAgICAqIEByZXR1cm4gYSBwcm9taXNlIGNv
bnRhaW5pbmcgdGhlIGVudmlyb25tZW50IGRhdGEgaWYgc3VjY2VzZnVsbC4KKyAgICAgKi8KKyAg
ICBFbnZpcm9ubWVudFRleHR1cmVUb29scy5DcmVhdGVFbnZUZXh0dXJlQXN5bmMgPSBmdW5jdGlv
biAodGV4dHVyZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgaW50
ZXJuYWxUZXh0dXJlID0gdGV4dHVyZS5nZXRJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAgICAgaWYg
KCFpbnRlcm5hbFRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgi
VGhlIGN1YmUgdGV4dHVyZSBpcyBpbnZhbGlkLiIpOworICAgICAgICB9CisgICAgICAgIGlmICgh
dGV4dHVyZS5fcHJlZmlsdGVyZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVj
dCgiVGhlIGN1YmUgdGV4dHVyZSBpcyBpbnZhbGlkIChub3QgcHJlZmlsdGVyZWQpLiIpOworICAg
ICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSBpbnRlcm5hbFRleHR1cmUuZ2V0RW5naW5lKCk7
CisgICAgICAgIGlmIChlbmdpbmUgJiYgZW5naW5lLnByZW11bHRpcGxpZWRBbHBoYSkgeworICAg
ICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJFbnYgdGV4dHVyZSBjYW4gb25seSBiZSBj
cmVhdGVkIHdoZW4gdGhlIGVuZ2luZSBpcyBjcmVhdGVkIHdpdGggdGhlIHByZW11bHRpcGxpZWRB
bHBoYSBvcHRpb24gc2V0IHRvIGZhbHNlLiIpOworICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0
dXJlLnRleHR1cmVUeXBlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKSB7CisgICAg
ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoIlRoZSBjdWJlIHRleHR1cmUgc2hvdWxkIGFs
bG93IEhEUiAoRnVsbCBGbG9hdCBvciBIYWxmIEZsb2F0KS4iKTsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgY2FudmFzID0gZW5naW5lLmdldFJlbmRlcmluZ0NhbnZhcygpOworICAgICAgICBpZiAo
IWNhbnZhcykgeworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJFbnYgdGV4dHVy
ZSBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGVuZ2luZSBpcyBhc3NvY2lhdGVkIHRvIGEg
Y2FudmFzLiIpOworICAgICAgICB9CisgICAgICAgIHZhciB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVz
X2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5URVhU
VVJFVFlQRV9GTE9BVDsKKyAgICAgICAgaWYgKCFlbmdpbmUuZ2V0Q2FwcygpLnRleHR1cmVGbG9h
dFJlbmRlcikgeworICAgICAgICAgICAgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfSEFM
Rl9GTE9BVDsKKyAgICAgICAgICAgIGlmICghZW5naW5lLmdldENhcHMoKS50ZXh0dXJlSGFsZkZs
b2F0UmVuZGVyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJFbnYg
dGV4dHVyZSBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgaGFs
ZiBmbG9hdCBvciBmdWxsIGZsb2F0IHJlbmRlcmluZy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB2YXIgY3ViZVdpZHRoID0gaW50ZXJuYWxUZXh0dXJlLndpZHRoOworICAg
ICAgICB2YXIgaG9zdGluZ1NjZW5lID0gbmV3IF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJTY2VuZSJdKGVuZ2luZSk7CisgICAgICAgIHZhciBzcGVjdWxhclRleHR1cmVzID0g
e307CisgICAgICAgIHZhciBwcm9taXNlcyA9IFtdOworICAgICAgICAvLyBSZWFkIGFuZCBjb2xs
ZWN0IGFsbCBtaXBtYXBzIGRhdGEgZnJvbSB0aGUgY3ViZS4KKyAgICAgICAgdmFyIG1pcG1hcHND
b3VudCA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJT
Y2FsYXIiXS5Mb2cyKGludGVybmFsVGV4dHVyZS53aWR0aCk7CisgICAgICAgIG1pcG1hcHNDb3Vu
dCA9IE1hdGgucm91bmQobWlwbWFwc0NvdW50KTsKKyAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5j
dGlvbiAoaSkgeworICAgICAgICAgICAgdmFyIGZhY2VXaWR0aCA9IE1hdGgucG93KDIsIG1pcG1h
cHNDb3VudCAtIGkpOworICAgICAgICAgICAgdmFyIF9sb29wXzIgPSBmdW5jdGlvbiAoZmFjZSkg
eworICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGV4dHVyZS5yZWFkUGl4ZWxzKGZhY2UsIGkp
OworICAgICAgICAgICAgICAgIC8vIENyZWF0ZXMgYSB0ZW1wIHRleHR1cmUgd2l0aCB0aGUgZmFj
ZSBkYXRhLgorICAgICAgICAgICAgICAgIHZhciB0ZW1wVGV4dHVyZSA9IGVuZ2luZS5jcmVhdGVS
YXdUZXh0dXJlKGRhdGEsIGZhY2VXaWR0aCwgZmFjZVdpZHRoLCBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9S
R0JBLCBmYWxzZSwgZmFsc2UsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1RfU0FNUExJTkdNT0RFLCBudWxs
LCB0ZXh0dXJlVHlwZSk7CisgICAgICAgICAgICAgICAgLy8gQW5kIHJnYmRFbmNvZGUgdGhlbS4K
KyAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNv
bHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJnYmRQb3N0UHJvY2VzcyA9
IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJQb3N0UHJvY2VzcyJdKCJyZ2JkRW5jb2RlIiwgInJnYmRFbmNvZGUiLCBudWxsLCBudWxs
LCAxLCBudWxsLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siQ29uc3RhbnRzIl0uVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5HTU9ERSwgZW5naW5lLCBmYWxz
ZSwgdW5kZWZpbmVkLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5ULCB1bmRlZmluZWQsIG51
bGwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmdiZFBvc3RQcm9jZXNzLmdldEVmZmVj
dCgpLmV4ZWN1dGVXaGVuQ29tcGlsZWQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmdiZFBvc3RQcm9jZXNzLm9uQXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0Ll9iaW5kVGV4dHVyZSgidGV4dHVyZVNhbXBs
ZXIiLCB0ZW1wVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQXMgdGhlIHByb2Nlc3MgbmVlZHMgdG8gaGFwcGVuIG9uIHRoZSBt
YWluIGNhbnZhcywga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBzaXplCisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgY3VycmVudFcgPSBlbmdpbmUuZ2V0UmVuZGVyV2lkdGgoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SCA9IGVuZ2luZS5nZXRSZW5kZXJIZWlnaHQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZGVzaXJlZCBzaXplIGZvciB0
aGUgdGV4dHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lLnNldFNpemUoZmFjZVdp
ZHRoLCBmYWNlV2lkdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgaG9zdGluZ1NjZW5lLnBv
c3RQcm9jZXNzTWFuYWdlci5kaXJlY3RSZW5kZXIoW3JnYmRQb3N0UHJvY2Vzc10sIG51bGwpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhZGluZyBkYXRhcyBmcm9tIFdlYkdMCisgICAg
ICAgICAgICAgICAgICAgICAgICBfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VG9vbHMiXS5Ub0Jsb2IoY2FudmFzLCBmdW5jdGlvbiAoYmxvYikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChldmVudCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJyYXlCdWZmZXIgPSBldmVu
dC50YXJnZXQucmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
clRleHR1cmVzW2kgKiA2ICsgZmFjZV0gPSBhcnJheUJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZl
cihibG9iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gUmVhcHBseSB0aGUgcHJldmlvdXMgY2FudmFzIHNpemUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZ2luZS5zZXRTaXplKGN1cnJlbnRXLCBjdXJyZW50SCk7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHByb21p
c2VzLnB1c2gocHJvbWlzZSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgLy8gQWxsIGZh
Y2VzIG9mIHRoZSBjdWJlLgorICAgICAgICAgICAgZm9yICh2YXIgZmFjZSA9IDA7IGZhY2UgPCA2
OyBmYWNlKyspIHsKKyAgICAgICAgICAgICAgICBfbG9vcF8yKGZhY2UpOworICAgICAgICAgICAg
fQorICAgICAgICB9OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBtaXBtYXBzQ291bnQ7
IGkrKykgeworICAgICAgICAgICAgX2xvb3BfMShpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBP
bmNlIGFsbCB0aGUgdGV4dHVyZXMgaGF2ZXMgYmVlbiBjb2xsZWN0ZWQgYXMgUkdCRCBzdG9yZWQg
aW4gUE5HcworICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgLy8gV2UgY2FuIGRlbGV0ZSB0aGUgaG9zdGluZyBzY2VuZSBr
ZWVwaW5nIHRyYWNrIG9mIGFsbCB0aGUgY3JlYXRpb24gb2JqZWN0cworICAgICAgICAgICAgaG9z
dGluZ1NjZW5lLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZXMgdGhlIGpzb24gaGVh
ZGVyIGZvciB0aGUgZW52IHRleHR1cmUKKyAgICAgICAgICAgIHZhciBpbmZvID0geworICAgICAg
ICAgICAgICAgIHZlcnNpb246IDEsCisgICAgICAgICAgICAgICAgd2lkdGg6IGN1YmVXaWR0aCwK
KyAgICAgICAgICAgICAgICBpcnJhZGlhbmNlOiBfdGhpcy5fQ3JlYXRlRW52VGV4dHVyZUlycmFk
aWFuY2UodGV4dHVyZSksCisgICAgICAgICAgICAgICAgc3BlY3VsYXI6IHsKKyAgICAgICAgICAg
ICAgICAgICAgbWlwbWFwczogW10sCisgICAgICAgICAgICAgICAgICAgIGxvZEdlbmVyYXRpb25T
Y2FsZTogdGV4dHVyZS5sb2RHZW5lcmF0aW9uU2NhbGUKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgLy8gU2V0cyB0aGUgc3BlY3VsYXIgaW1hZ2UgZGF0YSBp
bmZvcm1hdGlvbgorICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDw9IG1pcG1hcHNDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGJ5dGVMZW5ndGggPSBzcGVjdWxhclRleHR1cmVzW2kgKiA2ICsgZmFjZV0uYnl0ZUxl
bmd0aDsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5zcGVjdWxhci5taXBtYXBzLnB1c2goewor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBieXRlTGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBieXRlTGVuZ3RoOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEVuY29kZSB0aGUgSlNPTiBhcyBh
biBhcnJheSBidWZmZXIKKyAgICAgICAgICAgIHZhciBpbmZvU3RyaW5nID0gSlNPTi5zdHJpbmdp
ZnkoaW5mbyk7CisgICAgICAgICAgICB2YXIgaW5mb0J1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihp
bmZvU3RyaW5nLmxlbmd0aCArIDEpOworICAgICAgICAgICAgdmFyIGluZm9WaWV3ID0gbmV3IFVp
bnQ4QXJyYXkoaW5mb0J1ZmZlcik7IC8vIExpbWl0ZWQgdG8gYXNjaWkgc3Vic2V0IG1hdGNoaW5n
IHVuaWNvZGUuCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgc3RyTGVuID0gaW5mb1N0cmlu
Zy5sZW5ndGg7IGkgPCBzdHJMZW47IGkrKykgeworICAgICAgICAgICAgICAgIGluZm9WaWV3W2ld
ID0gaW5mb1N0cmluZy5jaGFyQ29kZUF0KGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Ly8gRW5kcyB1cCB3aXRoIGEgbnVsbCB0ZXJtaW5hdG9yIGZvciBlYXNpZXIgcGFyc2luZworICAg
ICAgICAgICAgaW5mb1ZpZXdbaW5mb1N0cmluZy5sZW5ndGhdID0gMHgwMDsKKyAgICAgICAgICAg
IC8vIENvbXB1dGVzIHRoZSBmaW5hbCByZXF1aXJlZCBzaXplIGFuZCBjcmVhdGVzIHRoZSBzdG9y
YWdlCisgICAgICAgICAgICB2YXIgdG90YWxTaXplID0gRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMu
X01hZ2ljQnl0ZXMubGVuZ3RoICsgcG9zaXRpb24gKyBpbmZvQnVmZmVyLmJ5dGVMZW5ndGg7Cisg
ICAgICAgICAgICB2YXIgZmluYWxCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodG90YWxTaXplKTsK
KyAgICAgICAgICAgIHZhciBmaW5hbEJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheShmaW5hbEJ1
ZmZlcik7CisgICAgICAgICAgICB2YXIgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoZmluYWxCdWZm
ZXIpOworICAgICAgICAgICAgLy8gQ29weSB0aGUgbWFnaWMgYnl0ZXMgaWRlbnRpZnlpbmcgdGhl
IGZpbGUgaW4KKyAgICAgICAgICAgIHZhciBwb3MgPSAwOworICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBFbnZpcm9ubWVudFRleHR1cmVUb29scy5fTWFnaWNCeXRlcy5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgIGRhdGFWaWV3LnNldFVpbnQ4KHBvcysrLCBFbnZpcm9ubWVu
dFRleHR1cmVUb29scy5fTWFnaWNCeXRlc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBBZGQgdGhlIGpzb24gaW5mbworICAgICAgICAgICAgZmluYWxCdWZmZXJWaWV3LnNldChu
ZXcgVWludDhBcnJheShpbmZvQnVmZmVyKSwgcG9zKTsKKyAgICAgICAgICAgIHBvcyArPSBpbmZv
QnVmZmVyLmJ5dGVMZW5ndGg7CisgICAgICAgICAgICAvLyBGaW5hbGx5IGluc2VydHMgdGhlIHRl
eHR1cmUgZGF0YQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbWlwbWFwc0NvdW50
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBmYWNlID0gMDsgZmFjZSA8IDY7IGZh
Y2UrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YUJ1ZmZlciA9IHNwZWN1bGFyVGV4
dHVyZXNbaSAqIDYgKyBmYWNlXTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWxCdWZmZXJWaWV3
LnNldChuZXcgVWludDhBcnJheShkYXRhQnVmZmVyKSwgcG9zKTsKKyAgICAgICAgICAgICAgICAg
ICAgcG9zICs9IGRhdGFCdWZmZXIuYnl0ZUxlbmd0aDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBWb2lsYQorICAgICAgICAgICAgcmV0dXJuIGZpbmFs
QnVmZmVyOworICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBK
U09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGhlcmljYWwgZGF0YS4KKyAgICAgKiBAcGFyYW0g
dGV4dHVyZSBkZWZpbmVzIHRoZSB0ZXh0dXJlIGNvbnRhaW5pbmcgdGhlIHBvbHlub21pYWxzCisg
ICAgICogQHJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BoZXJpY2FsIGlu
Zm8KKyAgICAgKi8KKyAgICBFbnZpcm9ubWVudFRleHR1cmVUb29scy5fQ3JlYXRlRW52VGV4dHVy
ZUlycmFkaWFuY2UgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgICAgICB2YXIgcG9seW5taWFs
cyA9IHRleHR1cmUuc3BoZXJpY2FsUG9seW5vbWlhbDsKKyAgICAgICAgaWYgKHBvbHlubWlhbHMg
PT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIHg6IFtwb2x5bm1pYWxzLngueCwgcG9seW5taWFscy54Lnks
IHBvbHlubWlhbHMueC56XSwKKyAgICAgICAgICAgIHk6IFtwb2x5bm1pYWxzLnkueCwgcG9seW5t
aWFscy55LnksIHBvbHlubWlhbHMueS56XSwKKyAgICAgICAgICAgIHo6IFtwb2x5bm1pYWxzLnou
eCwgcG9seW5taWFscy56LnksIHBvbHlubWlhbHMuei56XSwKKyAgICAgICAgICAgIHh4OiBbcG9s
eW5taWFscy54eC54LCBwb2x5bm1pYWxzLnh4LnksIHBvbHlubWlhbHMueHguel0sCisgICAgICAg
ICAgICB5eTogW3BvbHlubWlhbHMueXkueCwgcG9seW5taWFscy55eS55LCBwb2x5bm1pYWxzLnl5
LnpdLAorICAgICAgICAgICAgeno6IFtwb2x5bm1pYWxzLnp6LngsIHBvbHlubWlhbHMuenoueSwg
cG9seW5taWFscy56ei56XSwKKyAgICAgICAgICAgIHl6OiBbcG9seW5taWFscy55ei54LCBwb2x5
bm1pYWxzLnl6LnksIHBvbHlubWlhbHMueXouel0sCisgICAgICAgICAgICB6eDogW3BvbHlubWlh
bHMuengueCwgcG9seW5taWFscy56eC55LCBwb2x5bm1pYWxzLnp4LnpdLAorICAgICAgICAgICAg
eHk6IFtwb2x5bm1pYWxzLnh5LngsIHBvbHlubWlhbHMueHkueSwgcG9seW5taWFscy54eS56XQor
ICAgICAgICB9OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0aGUgQXJyYXlCdWZm
ZXJWaWV3cyB1c2VkIGZvciBpbml0aWFsaXppbmcgZW52aXJvbm1lbnQgdGV4dHVyZSBpbWFnZSBk
YXRhLgorICAgICAqIEBwYXJhbSBhcnJheUJ1ZmZlciB0aGUgdW5kZXJseWluZyBBcnJheUJ1ZmZl
ciB0byB3aGljaCB0aGUgdmlld3MgcmVmZXIKKyAgICAgKiBAcGFyYW0gaW5mbyBwYXJhbWV0ZXJz
IHRoYXQgZGV0ZXJtaW5lIHdoYXQgdmlld3Mgd2lsbCBiZSBjcmVhdGVkIGZvciBhY2Nlc3Npbmcg
dGhlIHVuZGVybHlpbmcgYnVmZmVyCisgICAgICogQHJldHVybiB0aGUgdmlld3MgZGVzY3JpYmVk
IGJ5IGluZm8gcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBidWZmZXIKKyAgICAg
Ki8KKyAgICBFbnZpcm9ubWVudFRleHR1cmVUb29scy5DcmVhdGVJbWFnZURhdGFBcnJheUJ1ZmZl
clZpZXdzID0gZnVuY3Rpb24gKGFycmF5QnVmZmVyLCBpbmZvKSB7CisgICAgICAgIGlmIChpbmZv
LnZlcnNpb24gIT09IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0
ZWQgYmFieWxvbiBlbnZpcm9ubWVudCBtYXAgdmVyc2lvbiBcIiIgKyBpbmZvLnZlcnNpb24gKyAi
XCIiKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgc3BlY3VsYXJJbmZvID0gaW5mby5zcGVjdWxh
cjsKKyAgICAgICAgLy8gRG91YmxlIGNoZWNrcyB0aGUgZW5jbG9zZWQgaW5mbworICAgICAgICB2
YXIgbWlwbWFwc0NvdW50ID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlNjYWxhciJdLkxvZzIoaW5mby53aWR0aCk7CisgICAgICAgIG1pcG1hcHNDb3Vu
dCA9IE1hdGgucm91bmQobWlwbWFwc0NvdW50KSArIDE7CisgICAgICAgIGlmIChzcGVjdWxhcklu
Zm8ubWlwbWFwcy5sZW5ndGggIT09IDYgKiBtaXBtYXBzQ291bnQpIHsKKyAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3BlY3VsYXIgbWlwbWFwcyBudW1iZXIgXCIiICsg
c3BlY3VsYXJJbmZvLm1pcG1hcHMubGVuZ3RoICsgIlwiIik7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGltYWdlRGF0YSA9IG5ldyBBcnJheShtaXBtYXBzQ291bnQpOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1pcG1hcHNDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBpbWFnZURhdGFb
aV0gPSBuZXcgQXJyYXkoNik7CisgICAgICAgICAgICBmb3IgKHZhciBmYWNlID0gMDsgZmFjZSA8
IDY7IGZhY2UrKykgeworICAgICAgICAgICAgICAgIHZhciBpbWFnZUluZm8gPSBzcGVjdWxhcklu
Zm8ubWlwbWFwc1tpICogNiArIGZhY2VdOworICAgICAgICAgICAgICAgIGltYWdlRGF0YVtpXVtm
YWNlXSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCBzcGVjdWxhckluZm8uc3BlY3VsYXJE
YXRhUG9zaXRpb24gKyBpbWFnZUluZm8ucG9zaXRpb24sIGltYWdlSW5mby5sZW5ndGgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBpbWFnZURhdGE7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBVcGxvYWRzIHRoZSB0ZXh0dXJlIGluZm8gY29udGFpbmVkIGluIHRo
ZSBlbnYgZmlsZSB0byB0aGUgR1BVLgorICAgICAqIEBwYXJhbSB0ZXh0dXJlIGRlZmluZXMgdGhl
IGludGVybmFsIHRleHR1cmUgdG8gdXBsb2FkIHRvCisgICAgICogQHBhcmFtIGFycmF5QnVmZmVy
IGRlZmluZXMgdGhlIGJ1ZmZlciBjb3RhaW5pbmcgdGhlIGRhdGEgdG8gbG9hZAorICAgICAqIEBw
YXJhbSBpbmZvIGRlZmluZXMgdGhlIHRleHR1cmUgaW5mbyByZXRyaWV2ZWQgdGhyb3VnaCB0aGUg
R2V0RW52SW5mbyBtZXRob2QKKyAgICAgKiBAcmV0dXJucyBhIHByb21pc2UKKyAgICAgKi8KKyAg
ICBFbnZpcm9ubWVudFRleHR1cmVUb29scy5VcGxvYWRFbnZMZXZlbHNBc3luYyA9IGZ1bmN0aW9u
ICh0ZXh0dXJlLCBhcnJheUJ1ZmZlciwgaW5mbykgeworICAgICAgICBpZiAoaW5mby52ZXJzaW9u
ICE9PSAxKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGJhYnls
b24gZW52aXJvbm1lbnQgbWFwIHZlcnNpb24gXCIiICsgaW5mby52ZXJzaW9uICsgIlwiIik7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHNwZWN1bGFySW5mbyA9IGluZm8uc3BlY3VsYXI7CisgICAg
ICAgIGlmICghc3BlY3VsYXJJbmZvKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIGVsc2UgcGFy
c2VkIHNvIGZhcgorICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICAgICAg
ICB9CisgICAgICAgIHRleHR1cmUuX2xvZEdlbmVyYXRpb25TY2FsZSA9IHNwZWN1bGFySW5mby5s
b2RHZW5lcmF0aW9uU2NhbGU7CisgICAgICAgIHZhciBpbWFnZURhdGEgPSBFbnZpcm9ubWVudFRl
eHR1cmVUb29scy5DcmVhdGVJbWFnZURhdGFBcnJheUJ1ZmZlclZpZXdzKGFycmF5QnVmZmVyLCBp
bmZvKTsKKyAgICAgICAgcmV0dXJuIEVudmlyb25tZW50VGV4dHVyZVRvb2xzLlVwbG9hZExldmVs
c0FzeW5jKHRleHR1cmUsIGltYWdlRGF0YSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGxv
YWRzIHRoZSBsZXZlbHMgb2YgaW1hZ2UgZGF0YSB0byB0aGUgR1BVLgorICAgICAqIEBwYXJhbSB0
ZXh0dXJlIGRlZmluZXMgdGhlIGludGVybmFsIHRleHR1cmUgdG8gdXBsb2FkIHRvCisgICAgICog
QHBhcmFtIGltYWdlRGF0YSBkZWZpbmVzIHRoZSBhcnJheSBidWZmZXIgdmlld3Mgb2YgaW1hZ2Ug
ZGF0YSBbbWlwbWFwXVtmYWNlXQorICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZQorICAgICAqLwor
ICAgIEVudmlyb25tZW50VGV4dHVyZVRvb2xzLlVwbG9hZExldmVsc0FzeW5jID0gZnVuY3Rpb24g
KHRleHR1cmUsIGltYWdlRGF0YSkgeworICAgICAgICBpZiAoIV90b29sc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLklzRXhwb25lbnRPZlR3byh0ZXh0dXJlLndpZHRoKSkg
eworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUZXh0dXJlIHNpemUgbXVzdCBiZSBhIHBv
d2VyIG9mIHR3byIpOworICAgICAgICB9CisgICAgICAgIHZhciBtaXBtYXBzQ291bnQgPSBNYXRo
LnJvdW5kKF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJT
Y2FsYXIiXS5Mb2cyKHRleHR1cmUud2lkdGgpKSArIDE7CisgICAgICAgIC8vIEdldHMgZXZlcnl0
aGluZyByZWFkeS4KKyAgICAgICAgdmFyIGVuZ2luZSA9IHRleHR1cmUuZ2V0RW5naW5lKCk7Cisg
ICAgICAgIHZhciBleHBhbmRUZXh0dXJlID0gZmFsc2U7CisgICAgICAgIHZhciBnZW5lcmF0ZU5v
bkxPRFRleHR1cmVzID0gZmFsc2U7CisgICAgICAgIHZhciByZ2JkUG9zdFByb2Nlc3MgPSBudWxs
OworICAgICAgICB2YXIgY3ViZVJ0dCA9IG51bGw7CisgICAgICAgIHZhciBsb2RUZXh0dXJlcyA9
IG51bGw7CisgICAgICAgIHZhciBjYXBzID0gZW5naW5lLmdldENhcHMoKTsKKyAgICAgICAgdGV4
dHVyZS5mb3JtYXQgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBOworICAgICAgICB0ZXh0dXJlLnR5
cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICB0ZXh0dXJlLmdlbmVy
YXRlTWlwTWFwcyA9IHRydWU7CisgICAgICAgIGVuZ2luZS51cGRhdGVUZXh0dXJlU2FtcGxpbmdN
b2RlKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25z
dGFudHMiXS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01PREUsIHRleHR1cmUpOworICAgICAg
ICAvLyBBZGQgZXh0cmEgcHJvY2VzcyBpZiB0ZXh0dXJlIGxvZCBpcyBub3Qgc3VwcG9ydGVkCisg
ICAgICAgIGlmICghY2Fwcy50ZXh0dXJlTE9EKSB7CisgICAgICAgICAgICBleHBhbmRUZXh0dXJl
ID0gZmFsc2U7CisgICAgICAgICAgICBnZW5lcmF0ZU5vbkxPRFRleHR1cmVzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGxvZFRleHR1cmVzID0ge307CisgICAgICAgIH0KKyAgICAgICAgLy8gaW4gd2Vi
Z2wgMSB0aGVyZSBhcmUgbm8gd2F5cyB0byBlaXRoZXIgcmVuZGVyIG9yIGNvcHkgbG9kIGxldmVs
IGluZm9ybWF0aW9uIGZvciBmbG9hdCB0ZXh0dXJlcy4KKyAgICAgICAgZWxzZSBpZiAoZW5naW5l
LndlYkdMVmVyc2lvbiA8IDIpIHsKKyAgICAgICAgICAgIGV4cGFuZFRleHR1cmUgPSBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICAvLyBJZiBoYWxmIGZsb2F0IGF2YWlsYWJsZSB3ZSBjYW4gdW5j
b21wcmVzcyB0aGUgdGV4dHVyZQorICAgICAgICBlbHNlIGlmIChjYXBzLnRleHR1cmVIYWxmRmxv
YXRSZW5kZXIgJiYgY2Fwcy50ZXh0dXJlSGFsZkZsb2F0TGluZWFyRmlsdGVyaW5nKSB7CisgICAg
ICAgICAgICBleHBhbmRUZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgICAgIHRleHR1cmUudHlwZSA9
IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFu
dHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUOworICAgICAgICB9CisgICAgICAgIC8vIElmIGZ1
bGwgZmxvYXQgYXZhaWxhYmxlIHdlIGNhbiB1bmNvbXByZXNzIHRoZSB0ZXh0dXJlCisgICAgICAg
IGVsc2UgaWYgKGNhcHMudGV4dHVyZUZsb2F0UmVuZGVyICYmIGNhcHMudGV4dHVyZUZsb2F0TGlu
ZWFyRmlsdGVyaW5nKSB7CisgICAgICAgICAgICBleHBhbmRUZXh0dXJlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHRleHR1cmUudHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9BVDsKKyAgICAgICAgfQor
ICAgICAgICAvLyBFeHBhbmQgdGhlIHRleHR1cmUgaWYgcG9zc2libGUKKyAgICAgICAgaWYgKGV4
cGFuZFRleHR1cmUpIHsKKyAgICAgICAgICAgIC8vIFNpbXBseSBydW4gdGhyb3VnaCB0aGUgZGVj
b2RlIFBQCisgICAgICAgICAgICByZ2JkUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNf
cG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3MiXSgi
cmdiZERlY29kZSIsICJyZ2JkRGVjb2RlIiwgbnVsbCwgbnVsbCwgMSwgbnVsbCwgX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlRFWFRV
UkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERSwgZW5naW5lLCBmYWxzZSwgdW5kZWZpbmVkLCB0ZXh0
dXJlLnR5cGUsIHVuZGVmaW5lZCwgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgdGV4dHVyZS5f
aXNSR0JEID0gZmFsc2U7CisgICAgICAgICAgICB0ZXh0dXJlLmludmVydFkgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGN1YmVSdHQgPSBlbmdpbmUuY3JlYXRlUmVuZGVyVGFyZ2V0Q3ViZVRleHR1cmUo
dGV4dHVyZS53aWR0aCwgeworICAgICAgICAgICAgICAgIGdlbmVyYXRlRGVwdGhCdWZmZXI6IGZh
bHNlLAorICAgICAgICAgICAgICAgIGdlbmVyYXRlTWlwTWFwczogdHJ1ZSwKKyAgICAgICAgICAg
ICAgICBnZW5lcmF0ZVN0ZW5jaWxCdWZmZXI6IGZhbHNlLAorICAgICAgICAgICAgICAgIHNhbXBs
aW5nTW9kZTogX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19b
IkNvbnN0YW50cyJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERSwKKyAgICAgICAgICAg
ICAgICB0eXBlOiB0ZXh0dXJlLnR5cGUsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVY
VFVSRUZPUk1BVF9SR0JBCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRleHR1cmUuX2lzUkdCRCA9IHRydWU7CisgICAgICAgICAgICB0ZXh0
dXJlLmludmVydFkgPSB0cnVlOworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBtaXNzaW5nIHN1
cHBvcnQsIGFwcGxpZXMgdGhlIHNhbWUgcGF0Y2ggdGhhbiBERFMgZmlsZXMuCisgICAgICAgICAg
ICBpZiAoZ2VuZXJhdGVOb25MT0RUZXh0dXJlcykgeworICAgICAgICAgICAgICAgIHZhciBtaXBT
bGljZXMgPSAzOworICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IHRleHR1cmUuX2xvZEdlbmVy
YXRpb25TY2FsZTsKKyAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGV4dHVyZS5fbG9kR2Vu
ZXJhdGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcFNs
aWNlczsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vY29tcHV0ZSBMT0QgZnJvbSBldmVu
IHNwYWNpbmcgaW4gc21vb3RobmVzcyAobWF0Y2hpbmcgc2hhZGVyIGNhbGN1bGF0aW9uKQorICAg
ICAgICAgICAgICAgICAgICB2YXIgc21vb3RobmVzcyA9IGkgLyAobWlwU2xpY2VzIC0gMSk7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciByb3VnaG5lc3MgPSAxIC0gc21vb3RobmVzczsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG1pbkxPREluZGV4ID0gb2Zmc2V0OyAvLyByb3VnaG5lc3MgPSAw
CisgICAgICAgICAgICAgICAgICAgIHZhciBtYXhMT0RJbmRleCA9IChtaXBtYXBzQ291bnQgLSAx
KSAqIHNjYWxlICsgb2Zmc2V0OyAvLyByb3VnaG5lc3MgPSAxIChtaXBtYXBzIHN0YXJ0IGZyb20g
MCkKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvZEluZGV4ID0gbWluTE9ESW5kZXggKyAobWF4
TE9ESW5kZXggLSBtaW5MT0RJbmRleCkgKiByb3VnaG5lc3M7CisgICAgICAgICAgICAgICAgICAg
IHZhciBtaXBtYXBJbmRleCA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgobG9kSW5kZXgs
IDApLCBtYXhMT0RJbmRleCkpOworICAgICAgICAgICAgICAgICAgICB2YXIgZ2xUZXh0dXJlRnJv
bUxvZCA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJJbnRlcm5hbFRleHR1cmUiXShlbmdpbmUsIF9NYXRlcmlhbHNf
VGV4dHVyZXNfaW50ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIklu
dGVybmFsVGV4dHVyZSJdLkRBVEFTT1VSQ0VfVEVNUCk7CisgICAgICAgICAgICAgICAgICAgIGds
VGV4dHVyZUZyb21Mb2QuaXNDdWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZ2xUZXh0
dXJlRnJvbUxvZC5pbnZlcnRZID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZ2xUZXh0dXJl
RnJvbUxvZC5nZW5lcmF0ZU1pcE1hcHMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZW5n
aW5lLnVwZGF0ZVRleHR1cmVTYW1wbGluZ01vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfTElORUFSX0xJTkVBUiwg
Z2xUZXh0dXJlRnJvbUxvZCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFdyYXAgaW4gYSBiYXNl
IHRleHR1cmUgZm9yIGVhc3kgYmluZGluZy4KKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvZFRl
eHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19iYXNlVGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJCYXNlVGV4dHVyZSJdKG51bGwpOworICAgICAgICAgICAgICAgICAg
ICBsb2RUZXh0dXJlLmlzQ3ViZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGxvZFRleHR1
cmUuX3RleHR1cmUgPSBnbFRleHR1cmVGcm9tTG9kOworICAgICAgICAgICAgICAgICAgICBsb2RU
ZXh0dXJlc1ttaXBtYXBJbmRleF0gPSBsb2RUZXh0dXJlOworICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJlTG93ID0gbG9kVGV4dHVyZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJl
TWlkID0gbG9kVGV4dHVyZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLl9sb2RUZXh0dXJlSGlnaCA9IGxvZFRleHR1cmU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHByb21pc2VzID0gW107
CisgICAgICAgIHZhciBfbG9vcF8zID0gZnVuY3Rpb24gKGkpIHsKKyAgICAgICAgICAgIHZhciBf
bG9vcF80ID0gZnVuY3Rpb24gKGZhY2UpIHsKKyAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3Rz
IGFuIGltYWdlIGVsZW1lbnQgZnJvbSBpbWFnZSBkYXRhCisgICAgICAgICAgICAgICAgdmFyIGJ5
dGVzID0gaW1hZ2VEYXRhW2ldW2ZhY2VdOworICAgICAgICAgICAgICAgIHZhciBibG9iID0gbmV3
IEJsb2IoW2J5dGVzXSwgeyB0eXBlOiAnaW1hZ2UvcG5nJyB9KTsKKyAgICAgICAgICAgICAgICB2
YXIgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKKyAgICAgICAgICAgICAgICB2YXIg
aW1hZ2UgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgICAgICAgICBpbWFnZS5zcmMgPSB1cmw7Cisg
ICAgICAgICAgICAgICAgLy8gRW5xdWV1ZSBwcm9taXNlIHRvIHVwbG9hZCB0byB0aGUgdGV4dHVy
ZS4KKyAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChy
ZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGFuZFRleHR1cmUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcFRleHR1cmVfMSA9IGVuZ2luZS5j
cmVhdGVUZXh0dXJlKG51bGwsIHRydWUsIHRydWUsIG51bGwsIF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1Rf
U0FNUExJTkdNT0RFLCBudWxsLCBmdW5jdGlvbiAobWVzc2FnZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWplY3QobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwgaW1hZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYmRQb3N0UHJv
Y2Vzcy5nZXRFZmZlY3QoKS5leGVjdXRlV2hlbkNvbXBpbGVkKGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5jb21wcmVzcyB0aGUgZGF0YSB0byBhIFJU
VAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JkUG9zdFByb2Nlc3Mub25BcHBs
eSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVmZmVjdC5fYmluZFRleHR1cmUoInRleHR1cmVTYW1wbGVyIiwgdGVtcFRleHR1cmVfMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCJz
Y2FsZSIsIDEsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmUuc2NlbmVzWzBdLnBvc3RQcm9jZXNzTWFu
YWdlci5kaXJlY3RSZW5kZXIoW3JnYmRQb3N0UHJvY2Vzc10sIGN1YmVSdHQsIHRydWUsIGZhY2Us
IGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhbnVwCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS5yZXN0b3JlRGVmYXVsdEZyYW1lYnVmZmVy
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUZXh0dXJlXzEuZGlzcG9z
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9i
amVjdFVSTCh1cmwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmdpbmUuX3VwbG9hZEltYWdlVG9UZXh0dXJlKHRleHR1cmUsIGltYWdlLCBmYWNl
LCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGxvYWQgdGhlIGZhY2UgdG8g
dGhlIG5vbiBsb2QgdGV4dHVyZSBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGdlbmVyYXRlTm9uTE9EVGV4dHVyZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGxvZFRleHR1cmUgPSBsb2RUZXh0dXJlc1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGxvZFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZ2luZS5fdXBsb2FkSW1hZ2VUb1RleHR1cmUobG9kVGV4dHVyZS5fdGV4
dHVyZSwgaW1hZ2UsIGZhY2UsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2Uub25lcnJvciA9IGZ1bmN0aW9uIChl
cnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKKyAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBwcm9t
aXNlcy5wdXNoKHByb21pc2UpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIC8vIEFsbCBm
YWNlcworICAgICAgICAgICAgZm9yICh2YXIgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspIHsK
KyAgICAgICAgICAgICAgICBfbG9vcF80KGZhY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgICAgICAvLyBBbGwgbWlwbWFwcyB1cCB0byBwcm92aWRlZCBudW1iZXIgb2YgaW1hZ2Vz
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VEYXRhLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICBfbG9vcF8zKGkpOworICAgICAgICB9CisgICAgICAgIC8vIEZpbGwgcmVtYWlu
aW5nIG1pcG1hcHMgd2l0aCBibGFjayB0ZXh0dXJlcy4KKyAgICAgICAgaWYgKGltYWdlRGF0YS5s
ZW5ndGggPCBtaXBtYXBzQ291bnQpIHsKKyAgICAgICAgICAgIHZhciBkYXRhID0gdm9pZCAwOwor
ICAgICAgICAgICAgdmFyIHNpemUgPSBNYXRoLnBvdygyLCBtaXBtYXBzQ291bnQgLSAxIC0gaW1h
Z2VEYXRhLmxlbmd0aCk7CisgICAgICAgICAgICB2YXIgZGF0YUxlbmd0aCA9IHNpemUgKiBzaXpl
ICogNDsKKyAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZS50eXBlKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
Q29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOiB7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlRF
WFRVUkVUWVBFX0hBTEZfRkxPQVQ6IHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG5ldyBV
aW50MTZBcnJheShkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FU
OiB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGFMZW5n
dGgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBpID0gaW1hZ2VEYXRhLmxlbmd0aDsgaSA8
IG1pcG1hcHNDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgZmFjZSA9IDA7
IGZhY2UgPCA2OyBmYWNlKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZW5naW5lLl91cGxvYWRB
cnJheUJ1ZmZlclZpZXdUb1RleHR1cmUodGV4dHVyZSwgZGF0YSwgZmFjZSwgaSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE9uY2UgYWxs
IGRvbmUsIGZpbmlzaGVzIHRoZSBjbGVhbnVwIGFuZCByZXR1cm4KKyAgICAgICAgcmV0dXJuIFBy
b21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIC8vIFJl
bGVhc2UgdGVtcCBSVFQuCisgICAgICAgICAgICBpZiAoY3ViZVJ0dCkgeworICAgICAgICAgICAg
ICAgIGVuZ2luZS5fcmVsZWFzZUZyYW1lYnVmZmVyT2JqZWN0cyhjdWJlUnR0KTsKKyAgICAgICAg
ICAgICAgICBlbmdpbmUuX3JlbGVhc2VUZXh0dXJlKHRleHR1cmUpOworICAgICAgICAgICAgICAg
IGN1YmVSdHQuX3N3YXBBbmREaWUodGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBSZWxlYXNlIHRlbXAgUG9zdCBQcm9jZXNzLgorICAgICAgICAgICAgaWYgKHJnYmRQb3N0
UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHJnYmRQb3N0UHJvY2Vzcy5kaXNwb3NlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGbGFnIGludGVybmFsIHRleHR1cmUgYXMgcmVh
ZHkgaW4gY2FzZSB0aGV5IGFyZSBpbiB1c2UuCisgICAgICAgICAgICBpZiAoZ2VuZXJhdGVOb25M
T0RUZXh0dXJlcykgeworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLl9sb2RUZXh0dXJlSGln
aCAmJiB0ZXh0dXJlLl9sb2RUZXh0dXJlSGlnaC5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJlSGlnaC5fdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUuX2xvZFRleHR1cmVN
aWQgJiYgdGV4dHVyZS5fbG9kVGV4dHVyZU1pZC5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJlTWlkLl90ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5fbG9kVGV4dHVyZUxv
dyAmJiB0ZXh0dXJlLl9sb2RUZXh0dXJlTG93Ll90ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUuX2xvZFRleHR1cmVMb3cuX3RleHR1cmUuaXNSZWFkeSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFVwbG9hZHMgc3BoZXJpY2FsIHBvbHlub21pYWxzIGluZm9ybWF0aW9uIHRvIHRo
ZSB0ZXh0dXJlLgorICAgICAqIEBwYXJhbSB0ZXh0dXJlIGRlZmluZXMgdGhlIHRleHR1cmUgd2Ug
YXJlIHRyeWluZyB0byB1cGxvYWQgdGhlIGluZm9ybWF0aW9uIHRvCisgICAgICogQHBhcmFtIGlu
Zm8gZGVmaW5lcyB0aGUgZW52aXJvbm1lbnQgdGV4dHVyZSBpbmZvIHJldHJpZXZlZCB0aHJvdWdo
IHRoZSBHZXRFbnZJbmZvIG1ldGhvZAorICAgICAqLworICAgIEVudmlyb25tZW50VGV4dHVyZVRv
b2xzLlVwbG9hZEVudlNwaGVyaWNhbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpbmZvKSB7CisgICAg
ICAgIGlmIChpbmZvLnZlcnNpb24gIT09IDEpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJMb2dnZXIiXS5XYXJuKCdVbnN1cHBvcnRlZCBi
YWJ5bG9uIGVudmlyb25tZW50IG1hcCB2ZXJzaW9uICInICsgaW5mby52ZXJzaW9uICsgJyInKTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgaXJyYWRpYW5jZUluZm8gPSBpbmZvLmlycmFkaWFuY2U7
CisgICAgICAgIGlmICghaXJyYWRpYW5jZUluZm8pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgc3AgPSBuZXcgX01hdGhzX3NwaGVyaWNhbFBvbHlub21pYWxf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU3BoZXJpY2FsUG9seW5vbWlhbCJdKCk7Cisg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJW
ZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYoaXJyYWRpYW5jZUluZm8ueCwgMCwgc3AueCk7CisgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0
b3IzIl0uRnJvbUFycmF5VG9SZWYoaXJyYWRpYW5jZUluZm8ueSwgMCwgc3AueSk7CisgICAgICAg
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3Iz
Il0uRnJvbUFycmF5VG9SZWYoaXJyYWRpYW5jZUluZm8ueiwgMCwgc3Aueik7CisgICAgICAgIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0u
RnJvbUFycmF5VG9SZWYoaXJyYWRpYW5jZUluZm8ueHgsIDAsIHNwLnh4KTsKKyAgICAgICAgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5G
cm9tQXJyYXlUb1JlZihpcnJhZGlhbmNlSW5mby55eSwgMCwgc3AueXkpOworICAgICAgICBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZy
b21BcnJheVRvUmVmKGlycmFkaWFuY2VJbmZvLnp6LCAwLCBzcC56eik7CisgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uRnJv
bUFycmF5VG9SZWYoaXJyYWRpYW5jZUluZm8ueXosIDAsIHNwLnl6KTsKKyAgICAgICAgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Gcm9t
QXJyYXlUb1JlZihpcnJhZGlhbmNlSW5mby56eCwgMCwgc3AuengpOworICAgICAgICBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21B
cnJheVRvUmVmKGlycmFkaWFuY2VJbmZvLnh5LCAwLCBzcC54eSk7CisgICAgICAgIHRleHR1cmUu
X3NwaGVyaWNhbFBvbHlub21pYWwgPSBzcDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMuX1VwZGF0ZVJHQkRBc3luYyA9IGZ1bmN0aW9uIChp
bnRlcm5hbFRleHR1cmUsIGRhdGEsIHNwaGVyaWNhbFBvbHlub21pYWwsIGxvZFNjYWxlLCBsb2RP
ZmZzZXQpIHsKKyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLl9kYXRhU291cmNlID0gX01hdGVyaWFs
c19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
SW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9DVUJFUkFXX1JHQkQ7CisgICAgICAgIGludGVy
bmFsVGV4dHVyZS5fYnVmZmVyVmlld0FycmF5QXJyYXkgPSBkYXRhOworICAgICAgICBpbnRlcm5h
bFRleHR1cmUuX2xvZEdlbmVyYXRpb25TY2FsZSA9IGxvZFNjYWxlOworICAgICAgICBpbnRlcm5h
bFRleHR1cmUuX2xvZEdlbmVyYXRpb25PZmZzZXQgPSBsb2RPZmZzZXQ7CisgICAgICAgIGludGVy
bmFsVGV4dHVyZS5fc3BoZXJpY2FsUG9seW5vbWlhbCA9IHNwaGVyaWNhbFBvbHlub21pYWw7Cisg
ICAgICAgIHJldHVybiBFbnZpcm9ubWVudFRleHR1cmVUb29scy5VcGxvYWRMZXZlbHNBc3luYyhp
bnRlcm5hbFRleHR1cmUsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaW50
ZXJuYWxUZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAgICAgICB9KTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIE1hZ2ljIG51bWJlciBpZGVudGlmeWluZyB0aGUgZW52IGZpbGUuCisgICAgICov
CisgICAgRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMuX01hZ2ljQnl0ZXMgPSBbMHg4NiwgMHgxNiwg
MHg4NywgMHg5NiwgMHhmNiwgMHhkNiwgMHg5NiwgMHgzNl07CisgICAgcmV0dXJuIEVudmlyb25t
ZW50VGV4dHVyZVRvb2xzOworfSgpKTsKKworLy8gUmVmZXJlbmNlcyB0aGUgZGVwZW5kZW5jaWVz
LgorX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siSW50ZXJuYWxUZXh0dXJlIl0uX1VwZGF0ZVJHQkRBc3luYyA9IEVudmlyb25t
ZW50VGV4dHVyZVRvb2xzLl9VcGRhdGVSR0JEQXN5bmM7CisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL01pc2MvZmlsZVRvb2xzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vTWlzYy9maWxlVG9vbHMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZpbGVUb29scyAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJGaWxlVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEZpbGVUb29sczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlYlJlcXVlc3RfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2Vi
UmVxdWVzdCAqLyAiLi9NaXNjL3dlYlJlcXVlc3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfbG9hZEZpbGVFcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9sb2FkRmlsZUVycm9yICovICIuL01pc2MvbG9hZEZpbGVFcnJv
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kb21NYW5hZ2VtZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RvbU1hbmFn
ZW1lbnQgKi8gIi4vTWlzYy9kb21NYW5hZ2VtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmlsZXNJbnB1dFN0b3JlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ZpbGVzSW5wdXRTdG9y
ZSAqLyAiLi9NaXNjL2ZpbGVzSW5wdXRTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9yZXRyeVN0cmF0ZWd5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL3JldHJ5U3RyYXRlZ3kgKi8gIi4vTWlzYy9yZXRyeVN0cmF0ZWd5
LnRzIik7CisKKworCisKKworCisvKioKKyAqIEBoaWRkZW4KKyAqLwordmFyIEZpbGVUb29scyA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBGaWxlVG9vbHMoKSB7
CisgICAgfQorICAgIC8qKgorICAgICAqIFJlbW92ZXMgdW53YW50ZWQgY2hhcmFjdGVycyBmcm9t
IGFuIHVybAorICAgICAqIEBwYXJhbSB1cmwgZGVmaW5lcyB0aGUgdXJsIHRvIGNsZWFuCisgICAg
ICogQHJldHVybnMgdGhlIGNsZWFuZWQgdXJsCisgICAgICovCisgICAgRmlsZVRvb2xzLl9DbGVh
blVybCA9IGZ1bmN0aW9uICh1cmwpIHsKKyAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoLyMvbWcs
ICIlMjMiKTsKKyAgICAgICAgcmV0dXJuIHVybDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
dHMgdGhlIGNvcnMgYmVoYXZpb3Igb24gYSBkb20gZWxlbWVudC4gVGhpcyB3aWxsIGFkZCB0aGUg
cmVxdWlyZWQgVG9vbHMuQ29yc0JlaGF2aW9yIHRvIHRoZSBlbGVtZW50LgorICAgICAqIEBwYXJh
bSB1cmwgZGVmaW5lIHRoZSB1cmwgd2UgYXJlIHRyeWluZworICAgICAqIEBwYXJhbSBlbGVtZW50
IGRlZmluZSB0aGUgZG9tIGVsZW1lbnQgd2hlcmUgdG8gY29uZmlndXJlIHRoZSBjb3JzIHBvbGlj
eQorICAgICAqLworICAgIEZpbGVUb29scy5TZXRDb3JzQmVoYXZpb3IgPSBmdW5jdGlvbiAodXJs
LCBlbGVtZW50KSB7CisgICAgICAgIGlmICh1cmwgJiYgdXJsLmluZGV4T2YoImRhdGE6IikgPT09
IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5D
b3JzQmVoYXZpb3IpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoaXMuQ29yc0JlaGF2aW9y
KSA9PT0gJ3N0cmluZycgfHwgdGhpcy5Db3JzQmVoYXZpb3IgaW5zdGFuY2VvZiBTdHJpbmcpIHsK
KyAgICAgICAgICAgICAgICBlbGVtZW50LmNyb3NzT3JpZ2luID0gdGhpcy5Db3JzQmVoYXZpb3I7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIg
cmVzdWx0ID0gdGhpcy5Db3JzQmVoYXZpb3IodXJsKTsKKyAgICAgICAgICAgICAgICBpZiAocmVz
dWx0KSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY3Jvc3NPcmlnaW4gPSByZXN1bHQ7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBMb2FkcyBhbiBpbWFnZSBhcyBhbiBIVE1MSW1hZ2VFbGVtZW50LgorICAg
ICAqIEBwYXJhbSBpbnB1dCB1cmwgc3RyaW5nLCBBcnJheUJ1ZmZlciwgb3IgQmxvYiB0byBsb2Fk
CisgICAgICogQHBhcmFtIG9uTG9hZCBjYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgaW1hZ2Ugc3Vj
Y2Vzc2Z1bGx5IGxvYWRzCisgICAgICogQHBhcmFtIG9uRXJyb3IgY2FsbGJhY2sgY2FsbGVkIHdo
ZW4gdGhlIGltYWdlIGZhaWxzIHRvIGxvYWQKKyAgICAgKiBAcGFyYW0gb2ZmbGluZVByb3ZpZGVy
IG9mZmxpbmUgcHJvdmlkZXIgZm9yIGNhY2hpbmcKKyAgICAgKiBAcmV0dXJucyB0aGUgSFRNTElt
YWdlRWxlbWVudCBvZiB0aGUgbG9hZGVkIGltYWdlCisgICAgICovCisgICAgRmlsZVRvb2xzLkxv
YWRJbWFnZSA9IGZ1bmN0aW9uIChpbnB1dCwgb25Mb2FkLCBvbkVycm9yLCBvZmZsaW5lUHJvdmlk
ZXIpIHsKKyAgICAgICAgdmFyIHVybDsKKyAgICAgICAgdmFyIHVzaW5nT2JqZWN0VVJMID0gZmFs
c2U7CisgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVm
ZmVyLmlzVmlldyhpbnB1dCkpIHsKKyAgICAgICAgICAgIHVybCA9IFVSTC5jcmVhdGVPYmplY3RV
UkwobmV3IEJsb2IoW2lucHV0XSkpOworICAgICAgICAgICAgdXNpbmdPYmplY3RVUkwgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgQmxvYikgewor
ICAgICAgICAgICAgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChpbnB1dCk7CisgICAgICAgICAg
ICB1c2luZ09iamVjdFVSTCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICB1cmwgPSB0aGlzLl9DbGVhblVybChpbnB1dCk7CisgICAgICAgICAgICB1cmwgPSB0
aGlzLlByZXByb2Nlc3NVcmwoaW5wdXQpOworICAgICAgICB9CisgICAgICAgIHZhciBpbWcgPSBu
ZXcgSW1hZ2UoKTsKKyAgICAgICAgdGhpcy5TZXRDb3JzQmVoYXZpb3IodXJsLCBpbWcpOworICAg
ICAgICB2YXIgbG9hZEhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpbWcucmVt
b3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsIGxvYWRIYW5kbGVyKTsKKyAgICAgICAgICAgIGltZy5y
ZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsIGVycm9ySGFuZGxlcik7CisgICAgICAgICAgICBv
bkxvYWQoaW1nKTsKKyAgICAgICAgICAgIC8vIE11c3QgcmV2b2tlIHRoZSBVUkwgYWZ0ZXIgY2Fs
bGluZyBvbkxvYWQgdG8gYXZvaWQgc2VjdXJpdHkgZXhjZXB0aW9ucyBpbgorICAgICAgICAgICAg
Ly8gY2VydGFpbiBzY2VuYXJpb3MgKGUuZy4gd2hlbiBob3N0ZWQgaW4gdnNjb2RlKS4KKyAgICAg
ICAgICAgIGlmICh1c2luZ09iamVjdFVSTCAmJiBpbWcuc3JjKSB7CisgICAgICAgICAgICAgICAg
VVJMLnJldm9rZU9iamVjdFVSTChpbWcuc3JjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KyAgICAgICAgdmFyIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlcnIpIHsKKyAgICAgICAgICAg
IGltZy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIiwgbG9hZEhhbmRsZXIpOworICAgICAgICAg
ICAgaW1nLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIiwgZXJyb3JIYW5kbGVyKTsKKyAgICAg
ICAgICAgIGlmIChvbkVycm9yKSB7CisgICAgICAgICAgICAgICAgb25FcnJvcigiRXJyb3Igd2hp
bGUgdHJ5aW5nIHRvIGxvYWQgaW1hZ2U6ICIgKyBpbnB1dCwgZXJyKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh1c2luZ09iamVjdFVSTCAmJiBpbWcuc3JjKSB7CisgICAgICAgICAg
ICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWcuc3JjKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKyAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBsb2FkSGFuZGxlcik7
CisgICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIGVycm9ySGFuZGxlcik7Cisg
ICAgICAgIHZhciBub09mZmxpbmVTdXBwb3J0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
aW1nLnNyYyA9IHVybDsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIGxvYWRGcm9tT2ZmbGluZVN1
cHBvcnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAob2ZmbGluZVByb3ZpZGVyKSB7
CisgICAgICAgICAgICAgICAgb2ZmbGluZVByb3ZpZGVyLmxvYWRJbWFnZSh1cmwsIGltZyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIGlmICh1cmwuc3Vic3RyKDAsIDUpICE9
PSAiZGF0YToiICYmIG9mZmxpbmVQcm92aWRlciAmJiBvZmZsaW5lUHJvdmlkZXIuZW5hYmxlVGV4
dHVyZXNPZmZsaW5lKSB7CisgICAgICAgICAgICBvZmZsaW5lUHJvdmlkZXIub3Blbihsb2FkRnJv
bU9mZmxpbmVTdXBwb3J0LCBub09mZmxpbmVTdXBwb3J0KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZigiZmlsZToiKSAhPT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgdGV4dHVyZU5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQodXJsLnN1
YnN0cmluZyg1KS50b0xvd2VyQ2FzZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoX2ZpbGVzSW5w
dXRTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJGaWxlc0lucHV0U3RvcmUiXS5G
aWxlc1RvTG9hZFt0ZXh0dXJlTmFtZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9iVVJMOworICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9iVVJMID0gVVJMLmNyZWF0
ZU9iamVjdFVSTChfZmlsZXNJbnB1dFN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkZpbGVzSW5wdXRTdG9yZSJdLkZpbGVzVG9Mb2FkW3RleHR1cmVOYW1lXSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaHJvbWUgZG9lc24ndCBzdXBwb3J0IG9uZVRp
bWVPbmx5IHBhcmFtZXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2JVUkwgPSBV
UkwuY3JlYXRlT2JqZWN0VVJMKF9maWxlc0lucHV0U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siRmlsZXNJbnB1dFN0b3JlIl0uRmlsZXNUb0xvYWRbdGV4dHVyZU5hbWVdKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMg
PSBibG9iVVJMOworICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdPYmplY3RVUkwgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gIiI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltZzsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub09mZmxpbmVTdXBwb3J0KCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGltZzsKKyAgICB9OworICAgIC8qKgorICAgICAqIExvYWRzIGEg
ZmlsZQorICAgICAqIEBwYXJhbSBmaWxlVG9Mb2FkIGRlZmluZXMgdGhlIGZpbGUgdG8gbG9hZAor
ICAgICAqIEBwYXJhbSBjYWxsYmFjayBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4g
ZGF0YSBpcyBsb2FkZWQKKyAgICAgKiBAcGFyYW0gcHJvZ3Jlc3NDYWxsQmFjayBkZWZpbmVzIHRo
ZSBjYWxsYmFjayB0byBjYWxsIGR1cmluZyBsb2FkaW5nIHByb2Nlc3MKKyAgICAgKiBAcGFyYW0g
dXNlQXJyYXlCdWZmZXIgZGVmaW5lcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGRhdGEgbXVz
dCBiZSByZXR1cm5lZCBhcyBhbiBBcnJheUJ1ZmZlcgorICAgICAqIEByZXR1cm5zIGEgZmlsZSBy
ZXF1ZXN0IG9iamVjdAorICAgICAqLworICAgIEZpbGVUb29scy5SZWFkRmlsZSA9IGZ1bmN0aW9u
IChmaWxlVG9Mb2FkLCBjYWxsYmFjaywgcHJvZ3Jlc3NDYWxsQmFjaywgdXNlQXJyYXlCdWZmZXIp
IHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CisgICAgICAgIHZhciBy
ZXF1ZXN0ID0geworICAgICAgICAgICAgb25Db21wbGV0ZU9ic2VydmFibGU6IG5ldyBfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKSwKKyAgICAg
ICAgICAgIGFib3J0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWFkZXIuYWJvcnQoKTsgfSwKKyAg
ICAgICAgfTsKKyAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uIChlKSB7IHJldHVy
biByZXF1ZXN0Lm9uQ29tcGxldGVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhyZXF1ZXN0KTsg
fTsKKyAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAg
Y2FsbGJhY2soSlNPTi5zdHJpbmdpZnkoeyBhdXRvQ2xlYXI6IHRydWUsIGNsZWFyQ29sb3I6IFsx
LCAwLCAwXSwgYW1iaWVudENvbG9yOiBbMCwgMCwgMF0sIGdyYXZpdHk6IFswLCAtOS44MDcsIDBd
LCBtZXNoZXM6IFtdLCBjYW1lcmFzOiBbXSwgbGlnaHRzOiBbXSB9KSk7CisgICAgICAgIH07Cisg
ICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgLy90YXJn
ZXQgZG9lc24ndCBoYXZlIHJlc3VsdCBmcm9tIHRzIDEuMworICAgICAgICAgICAgY2FsbGJhY2so
ZS50YXJnZXRbJ3Jlc3VsdCddKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKHByb2dyZXNzQ2Fs
bEJhY2spIHsKKyAgICAgICAgICAgIHJlYWRlci5vbnByb2dyZXNzID0gcHJvZ3Jlc3NDYWxsQmFj
azsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXVzZUFycmF5QnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBBc3luY2hyb25vdXMgcmVhZAorICAgICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmls
ZVRvTG9hZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZWFkZXIu
cmVhZEFzQXJyYXlCdWZmZXIoZmlsZVRvTG9hZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHJlcXVlc3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBMb2FkcyBhIGZpbGUKKyAgICAgKiBA
cGFyYW0gdXJsIHVybCBzdHJpbmcsIEFycmF5QnVmZmVyLCBvciBCbG9iIHRvIGxvYWQKKyAgICAg
KiBAcGFyYW0gb25TdWNjZXNzIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBmaWxlIHN1Y2Nlc3Nm
dWxseSBsb2FkcworICAgICAqIEBwYXJhbSBvblByb2dyZXNzIGNhbGxiYWNrIGNhbGxlZCB3aGls
ZSBmaWxlIGlzIGxvYWRpbmcgKGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgdGhpcyBtb2RlKQorICAg
ICAqIEBwYXJhbSBvZmZsaW5lUHJvdmlkZXIgZGVmaW5lcyB0aGUgb2ZmbGluZSBwcm92aWRlciBm
b3IgY2FjaGluZworICAgICAqIEBwYXJhbSB1c2VBcnJheUJ1ZmZlciBkZWZpbmVzIGEgYm9vbGVh
biBpbmRpY2F0aW5nIHRoYXQgZGF0ZSBtdXN0IGJlIHJldHVybmVkIGFzIEFycmF5QnVmZmVyCisg
ICAgICogQHBhcmFtIG9uRXJyb3IgY2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIGZpbGUgZmFpbHMg
dG8gbG9hZAorICAgICAqIEByZXR1cm5zIGEgZmlsZSByZXF1ZXN0IG9iamVjdAorICAgICAqLwor
ICAgIEZpbGVUb29scy5Mb2FkRmlsZSA9IGZ1bmN0aW9uICh1cmwsIG9uU3VjY2Vzcywgb25Qcm9n
cmVzcywgb2ZmbGluZVByb3ZpZGVyLCB1c2VBcnJheUJ1ZmZlciwgb25FcnJvcikgeworICAgICAg
ICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB1cmwgPSB0aGlzLl9DbGVhblVybCh1cmwpOwor
ICAgICAgICB1cmwgPSB0aGlzLlByZXByb2Nlc3NVcmwodXJsKTsKKyAgICAgICAgLy8gSWYgZmls
ZSBhbmQgZmlsZSBpbnB1dCBhcmUgc2V0CisgICAgICAgIGlmICh1cmwuaW5kZXhPZigiZmlsZToi
KSAhPT0gLTEpIHsKKyAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVu
dCh1cmwuc3Vic3RyaW5nKDUpLnRvTG93ZXJDYXNlKCkpOworICAgICAgICAgICAgaWYgKF9maWxl
c0lucHV0U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRmlsZXNJbnB1dFN0b3Jl
Il0uRmlsZXNUb0xvYWRbZmlsZU5hbWVdKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
UmVhZEZpbGUoX2ZpbGVzSW5wdXRTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJG
aWxlc0lucHV0U3RvcmUiXS5GaWxlc1RvTG9hZFtmaWxlTmFtZV0sIG9uU3VjY2Vzcywgb25Qcm9n
cmVzcywgdXNlQXJyYXlCdWZmZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHZhciBsb2FkVXJsID0gdGhpcy5CYXNlVXJsICsgdXJsOworICAgICAgICB2YXIgYWJvcnRlZCA9
IGZhbHNlOworICAgICAgICB2YXIgZmlsZVJlcXVlc3QgPSB7CisgICAgICAgICAgICBvbkNvbXBs
ZXRlT2JzZXJ2YWJsZTogbmV3IF9vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk9ic2VydmFibGUiXSgpLAorICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHsgcmV0
dXJuIGFib3J0ZWQgPSB0cnVlOyB9LAorICAgICAgICB9OworICAgICAgICB2YXIgcmVxdWVzdEZp
bGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBfd2ViUmVx
dWVzdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXZWJSZXF1ZXN0Il0oKTsKKyAgICAg
ICAgICAgIHZhciByZXRyeUhhbmRsZSA9IG51bGw7CisgICAgICAgICAgICBmaWxlUmVxdWVzdC5h
Ym9ydCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSAoWE1MSHR0cFJlcXVlc3Qu
RE9ORSB8fCA0KSkgeworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChyZXRyeUhhbmRsZSAhPT0gbnVsbCkg
eworICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmV0cnlIYW5kbGUpOworICAgICAg
ICAgICAgICAgICAgICByZXRyeUhhbmRsZSA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIHZhciByZXRyeUxvb3AgPSBmdW5jdGlvbiAocmV0cnlJ
bmRleCkgeworICAgICAgICAgICAgICAgIHJlcXVlc3Qub3BlbignR0VUJywgbG9hZFVybCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHVzZUFycmF5QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3QucmVzcG9uc2VUeXBlID0gImFycmF5YnVmZmVyIjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsIG9uUHJvZ3Jlc3MpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgb25Mb2FkRW5kID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWRl
bmQiLCBvbkxvYWRFbmQpOworICAgICAgICAgICAgICAgICAgICBmaWxlUmVxdWVzdC5vbkNvbXBs
ZXRlT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoZmlsZVJlcXVlc3QpOworICAgICAgICAgICAg
ICAgICAgICBmaWxlUmVxdWVzdC5vbkNvbXBsZXRlT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJs
b2FkZW5kIiwgb25Mb2FkRW5kKTsKKyAgICAgICAgICAgICAgICB2YXIgb25SZWFkeVN0YXRlQ2hh
bmdlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYWJvcnRlZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgdW5kZWZpbmVkIHN0YXRlIGluIHNvbWUg
YnJvd3NlcnMuCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgPT09
IChYTUxIdHRwUmVxdWVzdC5ET05FIHx8IDQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBTb21lIGJyb3dzZXJzIGhhdmUgaXNzdWVzIHdoZXJlIG9ucmVhZHlzdGF0ZWNoYW5nZSBjYW4g
YmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlIHNhbWUgdmFsdWUuCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFu
Z2UiLCBvblJlYWR5U3RhdGVDaGFuZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChy
ZXF1ZXN0LnN0YXR1cyA+PSAyMDAgJiYgcmVxdWVzdC5zdGF0dXMgPCAzMDApIHx8IChyZXF1ZXN0
LnN0YXR1cyA9PT0gMCAmJiAoIV9kb21NYW5hZ2VtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkRvbU1hbmFnZW1lbnQiXS5Jc1dpbmRvd09iamVjdEV4aXN0KCkgfHwgX3RoaXMuSXNG
aWxlVVJMKCkpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VjY2VzcyghdXNl
QXJyYXlCdWZmZXIgPyByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2UsIHJl
cXVlc3QucmVzcG9uc2VVUkwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBy
ZXRyeVN0cmF0ZWd5ID0gX3RoaXMuRGVmYXVsdFJldHJ5U3RyYXRlZ3k7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmV0cnlTdHJhdGVneSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB3YWl0VGltZSA9IHJldHJ5U3RyYXRlZ3kobG9hZFVybCwgcmVxdWVzdCwgcmV0cnlJ
bmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRUaW1lICE9PSAtMSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHRoZSByZXF1ZXN0
IGZyb20gY29tcGxldGluZyBmb3IgcmV0cnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIsIG9uTG9hZEVuZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBuZXcgX3dlYlJlcXVlc3Rf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siV2ViUmVxdWVzdCJdKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHJ5SGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbiAo
KSB7IHJldHVybiByZXRyeUxvb3AocmV0cnlJbmRleCArIDEpOyB9LCB3YWl0VGltZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgZSA9IG5ldyBfbG9hZEZpbGVFcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJMb2FkRmlsZUVycm9yIl0oIkVycm9yIHN0YXR1czogIiArIHJlcXVlc3Quc3RhdHVzICsg
IiAiICsgcmVxdWVzdC5zdGF0dXNUZXh0ICsgIiAtIFVuYWJsZSB0byBsb2FkICIgKyBsb2FkVXJs
LCByZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvcihyZXF1ZXN0LCBlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
IHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsIG9uUmVhZHlTdGF0
ZUNoYW5nZSk7CisgICAgICAgICAgICAgICAgcmVxdWVzdC5zZW5kKCk7CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgcmV0cnlMb29wKDApOworICAgICAgICB9OworICAgICAgICAvLyBDYWNo
aW5nIGFsbCBmaWxlcworICAgICAgICBpZiAob2ZmbGluZVByb3ZpZGVyICYmIG9mZmxpbmVQcm92
aWRlci5lbmFibGVTY2VuZU9mZmxpbmUpIHsKKyAgICAgICAgICAgIHZhciBub09mZmxpbmVTdXBw
b3J0XzEgPSBmdW5jdGlvbiAocmVxdWVzdCkgeworICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0
ICYmIHJlcXVlc3Quc3RhdHVzID4gNDAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChvbkVy
cm9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHJlcXVlc3QpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWFib3J0ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3RGaWxlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIGxvYWRGcm9tT2ZmbGluZVN1
cHBvcnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETzogZGF0YWJhc2Ug
bmVlZHMgdG8gc3VwcG9ydCBhYm9ydGluZyBhbmQgc2hvdWxkIHJldHVybiBhIElGaWxlUmVxdWVz
dAorICAgICAgICAgICAgICAgIGlmIChhYm9ydGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG9mZmxpbmVQcm92
aWRlcikgeworICAgICAgICAgICAgICAgICAgICBvZmZsaW5lUHJvdmlkZXIubG9hZEZpbGUodXJs
LCBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhYm9ydGVk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TdWNjZXNzKGRhdGEpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVJlcXVlc3Qu
b25Db21wbGV0ZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGZpbGVSZXF1ZXN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgfSwgb25Qcm9ncmVzcyA/IGZ1bmN0aW9uIChldmVudCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhYm9ydGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb25Qcm9ncmVzcyhldmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsIG5vT2ZmbGluZVN1cHBvcnRfMSwgdXNlQXJy
YXlCdWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBvZmZsaW5lUHJvdmlkZXIub3Blbihsb2FkRnJvbU9mZmxpbmVTdXBwb3J0LCBub09mZmxpbmVT
dXBwb3J0XzEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVxdWVz
dEZpbGUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmlsZVJlcXVlc3Q7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIGxvYWRlZCBkb2N1bWVudCB3YXMgYWNjZXNz
ZWQgdmlhIGBmaWxlOmAtUHJvdG9jb2wuCisgICAgICogQHJldHVybnMgYm9vbGVhbgorICAgICAq
LworICAgIEZpbGVUb29scy5Jc0ZpbGVVUkwgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biBsb2NhdGlvbi5wcm90b2NvbCA9PT0gImZpbGU6IjsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEdldHMgb3Igc2V0cyB0aGUgcmV0cnkgc3RyYXRlZ3kgdG8gYXBwbHkgd2hlbiBhbiBlcnJvciBo
YXBwZW5zIHdoaWxlIGxvYWRpbmcgYW4gYXNzZXQKKyAgICAgKi8KKyAgICBGaWxlVG9vbHMuRGVm
YXVsdFJldHJ5U3RyYXRlZ3kgPSBfcmV0cnlTdHJhdGVneV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJSZXRyeVN0cmF0ZWd5Il0uRXhwb25lbnRpYWxCYWNrb2ZmKCk7CisgICAgLyoqCisg
ICAgICogR2V0cyBvciBzZXRzIHRoZSBiYXNlIFVSTCB0byB1c2UgdG8gbG9hZCBhc3NldHMKKyAg
ICAgKi8KKyAgICBGaWxlVG9vbHMuQmFzZVVybCA9ICIiOworICAgIC8qKgorICAgICAqIERlZmF1
bHQgYmVoYXZpb3VyIGZvciBjb3JzIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgKiBJdCBjYW4g
YmUgYSBzdHJpbmcgaWYgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzIGlkZW50aWNhbCBpbiB0aGUg
ZW50aXJlIGFwcC4KKyAgICAgKiBPciBhIGNhbGxiYWNrIHRvIGJlIGFibGUgdG8gc2V0IGl0IHBl
ciB1cmwgb3Igb24gYSBncm91cCBvZiB0aGVtIChpbiBjYXNlIG9mIFZpZGVvIHNvdXJjZSBmb3Ig
aW5zdGFuY2UpCisgICAgICovCisgICAgRmlsZVRvb2xzLkNvcnNCZWhhdmlvciA9ICJhbm9ueW1v
dXMiOworICAgIC8qKgorICAgICAqIEdldHMgb3Igc2V0cyBhIGZ1bmN0aW9uIHVzZWQgdG8gcHJl
LXByb2Nlc3MgdXJsIGJlZm9yZSB1c2luZyB0aGVtIHRvIGxvYWQgYXNzZXRzCisgICAgICovCisg
ICAgRmlsZVRvb2xzLlByZXByb2Nlc3NVcmwgPSBmdW5jdGlvbiAodXJsKSB7CisgICAgICAgIHJl
dHVybiB1cmw7CisgICAgfTsKKyAgICByZXR1cm4gRmlsZVRvb2xzOworfSgpKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9NaXNjL2ZpbGVzSW5wdXQudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlzYy9maWxlc0lucHV0LnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRmls
ZXNJbnB1dCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGaWxlc0lucHV0
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWxlc0lucHV0OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTG9hZGluZy9zY2VuZUxvYWRlciAqLyAiLi9M
b2FkaW5nL3NjZW5lTG9hZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
bG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9maWxlc0lucHV0U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZmlsZXNJbnB1dFN0b3JlICovICIuL01pc2Mv
ZmlsZXNJbnB1dFN0b3JlLnRzIik7CisKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gaGVscCBt
YW5hZ2luZyBmaWxlIHBpY2tpbmcgYW5kIGRyYWcnbidkcm9wCisgKi8KK3ZhciBGaWxlc0lucHV0
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgRmlsZXNJbnB1dAorICAgICAqIEBwYXJhbSBlbmdpbmUgZGVmaW5lcyB0aGUgcmVuZGVy
aW5nIGVuZ2luZQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5l
CisgICAgICogQHBhcmFtIHNjZW5lTG9hZGVkQ2FsbGJhY2sgY2FsbGJhY2sgY2FsbGVkIHdoZW4g
c2NlbmUgaXMgbG9hZGVkCisgICAgICogQHBhcmFtIHByb2dyZXNzQ2FsbGJhY2sgY2FsbGJhY2sg
Y2FsbGVkIHRvIHRyYWNrIHByb2dyZXNzCisgICAgICogQHBhcmFtIGFkZGl0aW9uYWxSZW5kZXJM
b29wTG9naWNDYWxsYmFjayBjYWxsYmFjayBjYWxsZWQgdG8gYWRkIHVzZXIgbG9naWMgdG8gdGhl
IHJlbmRlcmluZyBsb29wCisgICAgICogQHBhcmFtIHRleHR1cmVMb2FkaW5nQ2FsbGJhY2sgY2Fs
bGJhY2sgY2FsbGVkIHdoZW4gYSB0ZXh0dXJlIGlzIGxvYWRpbmcKKyAgICAgKiBAcGFyYW0gc3Rh
cnRpbmdQcm9jZXNzaW5nRmlsZXNDYWxsYmFjayBjYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgc3lz
dGVtIGlzIGFib3V0IHRvIHByb2Nlc3MgYWxsIGZpbGVzCisgICAgICogQHBhcmFtIG9uUmVsb2Fk
Q2FsbGJhY2sgY2FsbGJhY2sgY2FsbGVkIHdoZW4gYSByZWxvYWQgaXMgcmVxdWVzdGVkCisgICAg
ICogQHBhcmFtIGVycm9yQ2FsbGJhY2sgY2FsbGJhY2sgY2FsbCBpZiBhbiBlcnJvciBvY2N1cnMK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBGaWxlc0lucHV0KGVuZ2luZSwgc2NlbmUsIHNjZW5lTG9h
ZGVkQ2FsbGJhY2ssIHByb2dyZXNzQ2FsbGJhY2ssIGFkZGl0aW9uYWxSZW5kZXJMb29wTG9naWND
YWxsYmFjaywgdGV4dHVyZUxvYWRpbmdDYWxsYmFjaywgc3RhcnRpbmdQcm9jZXNzaW5nRmlsZXND
YWxsYmFjaywgb25SZWxvYWRDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykgeworICAgICAgICAvKioK
KyAgICAgICAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gYSBmaWxlIGlzIHByb2Nlc3NlZAorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5vblByb2Nlc3NGaWxlQ2FsbGJhY2sgPSBmdW5jdGlvbiAo
KSB7IHJldHVybiB0cnVlOyB9OworICAgICAgICB0aGlzLl9lbmdpbmUgPSBlbmdpbmU7CisgICAg
ICAgIHRoaXMuX2N1cnJlbnRTY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9zY2VuZUxvYWRl
ZENhbGxiYWNrID0gc2NlbmVMb2FkZWRDYWxsYmFjazsKKyAgICAgICAgdGhpcy5fcHJvZ3Jlc3ND
YWxsYmFjayA9IHByb2dyZXNzQ2FsbGJhY2s7CisgICAgICAgIHRoaXMuX2FkZGl0aW9uYWxSZW5k
ZXJMb29wTG9naWNDYWxsYmFjayA9IGFkZGl0aW9uYWxSZW5kZXJMb29wTG9naWNDYWxsYmFjazsK
KyAgICAgICAgdGhpcy5fdGV4dHVyZUxvYWRpbmdDYWxsYmFjayA9IHRleHR1cmVMb2FkaW5nQ2Fs
bGJhY2s7CisgICAgICAgIHRoaXMuX3N0YXJ0aW5nUHJvY2Vzc2luZ0ZpbGVzQ2FsbGJhY2sgPSBz
dGFydGluZ1Byb2Nlc3NpbmdGaWxlc0NhbGxiYWNrOworICAgICAgICB0aGlzLl9vblJlbG9hZENh
bGxiYWNrID0gb25SZWxvYWRDYWxsYmFjazsKKyAgICAgICAgdGhpcy5fZXJyb3JDYWxsYmFjayA9
IGVycm9yQ2FsbGJhY2s7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlc0lu
cHV0LCAiRmlsZXNUb0xvYWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBMaXN0IG9mIGZp
bGVzIHJlYWR5IHRvIGJlIGxvYWRlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gX2ZpbGVzSW5wdXRTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJGaWxlc0lucHV0U3RvcmUiXS5GaWxlc1RvTG9hZDsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgLyoqCisgICAgICogQ2FsbHMgdGhpcyBmdW5jdGlvbiB0byBsaXN0ZW4g
dG8gZHJhZyduJ2Ryb3AgZXZlbnRzIG9uIGEgc3BlY2lmaWMgRE9NIGVsZW1lbnQKKyAgICAgKiBA
cGFyYW0gZWxlbWVudFRvTW9uaXRvciBkZWZpbmVzIHRoZSBET00gZWxlbWVudCB0byB0cmFjawor
ICAgICAqLworICAgIEZpbGVzSW5wdXQucHJvdG90eXBlLm1vbml0b3JFbGVtZW50Rm9yRHJhZ05E
cm9wID0gZnVuY3Rpb24gKGVsZW1lbnRUb01vbml0b3IpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgaWYgKGVsZW1lbnRUb01vbml0b3IpIHsKKyAgICAgICAgICAgIHRoaXMu
X2VsZW1lbnRUb01vbml0b3IgPSBlbGVtZW50VG9Nb25pdG9yOworICAgICAgICAgICAgdGhpcy5f
ZHJhZ0VudGVySGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7IF90aGlzLmRyYWcoZSk7IH07CisgICAg
ICAgICAgICB0aGlzLl9kcmFnT3ZlckhhbmRsZXIgPSBmdW5jdGlvbiAoZSkgeyBfdGhpcy5kcmFn
KGUpOyB9OworICAgICAgICAgICAgdGhpcy5fZHJvcEhhbmRsZXIgPSBmdW5jdGlvbiAoZSkgeyBf
dGhpcy5kcm9wKGUpOyB9OworICAgICAgICAgICAgdGhpcy5fZWxlbWVudFRvTW9uaXRvci5hZGRF
dmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCB0aGlzLl9kcmFnRW50ZXJIYW5kbGVyLCBmYWxzZSk7
CisgICAgICAgICAgICB0aGlzLl9lbGVtZW50VG9Nb25pdG9yLmFkZEV2ZW50TGlzdGVuZXIoImRy
YWdvdmVyIiwgdGhpcy5fZHJhZ092ZXJIYW5kbGVyLCBmYWxzZSk7CisgICAgICAgICAgICB0aGlz
Ll9lbGVtZW50VG9Nb25pdG9yLmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCB0aGlzLl9kcm9wSGFu
ZGxlciwgZmFsc2UpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNl
IGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcworICAgICAqLworICAgIEZpbGVzSW5wdXQucHJvdG90
eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fZWxlbWVudFRv
TW9uaXRvcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMu
X2VsZW1lbnRUb01vbml0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwgdGhpcy5f
ZHJhZ0VudGVySGFuZGxlcik7CisgICAgICAgIHRoaXMuX2VsZW1lbnRUb01vbml0b3IucmVtb3Zl
RXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCB0aGlzLl9kcmFnT3ZlckhhbmRsZXIpOworICAgICAg
ICB0aGlzLl9lbGVtZW50VG9Nb25pdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyb3AiLCB0aGlz
Ll9kcm9wSGFuZGxlcik7CisgICAgfTsKKyAgICBGaWxlc0lucHV0LnByb3RvdHlwZS5yZW5kZXJG
dW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2FkZGl0aW9uYWxSZW5k
ZXJMb29wTG9naWNDYWxsYmFjaykgeworICAgICAgICAgICAgdGhpcy5fYWRkaXRpb25hbFJlbmRl
ckxvb3BMb2dpY0NhbGxiYWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2N1cnJl
bnRTY2VuZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmVMb2FkaW5nQ2FsbGJhY2sp
IHsKKyAgICAgICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gdGhpcy5fY3VycmVudFNjZW5lLmdl
dFdhaXRpbmdJdGVtc0NvdW50KCk7CisgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA+IDAp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZUxvYWRpbmdDYWxsYmFjayhyZW1h
aW5pbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX2N1cnJlbnRTY2VuZS5yZW5kZXIoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgRmlsZXNJ
bnB1dC5wcm90b3R5cGUuZHJhZyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIGUuc3RvcFByb3Bh
Z2F0aW9uKCk7CisgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICB9OworICAgIEZpbGVz
SW5wdXQucHJvdG90eXBlLmRyb3AgPSBmdW5jdGlvbiAoZXZlbnREcm9wKSB7CisgICAgICAgIGV2
ZW50RHJvcC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgZXZlbnREcm9wLnByZXZlbnREZWZh
dWx0KCk7CisgICAgICAgIHRoaXMubG9hZEZpbGVzKGV2ZW50RHJvcCk7CisgICAgfTsKKyAgICBG
aWxlc0lucHV0LnByb3RvdHlwZS5fdHJhdmVyc2VGb2xkZXIgPSBmdW5jdGlvbiAoZm9sZGVyLCBm
aWxlcywgcmVtYWluaW5nLCBjYWxsYmFjaykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICB2YXIgcmVhZGVyID0gZm9sZGVyLmNyZWF0ZVJlYWRlcigpOworICAgICAgICB2YXIg
cmVsYXRpdmVQYXRoID0gZm9sZGVyLmZ1bGxQYXRoLnJlcGxhY2UoL15cLy8sICIiKS5yZXBsYWNl
KC8oLis/KVwvPyQvLCAiJDEvIik7CisgICAgICAgIHJlYWRlci5yZWFkRW50cmllcyhmdW5jdGlv
biAoZW50cmllcykgeworICAgICAgICAgICAgcmVtYWluaW5nLmNvdW50ICs9IGVudHJpZXMubGVu
Z3RoOworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBlbnRyaWVzXzEgPSBlbnRyaWVzOyBf
aSA8IGVudHJpZXNfMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgZW50cnkg
PSBlbnRyaWVzXzFbX2ldOworICAgICAgICAgICAgICAgIGlmIChlbnRyeS5pc0ZpbGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZW50cnkuZmlsZShmdW5jdGlvbiAoZmlsZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsZS5jb3JyZWN0TmFtZSA9IHJlbGF0aXZlUGF0aCArIGZpbGUubmFt
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoLS1yZW1haW5pbmcuY291bnQgPT09IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoZW50cnkuaXNEaXJlY3RvcnkpIHsKKyAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuX3RyYXZlcnNlRm9sZGVyKGVudHJ5LCBmaWxlcywgcmVtYWluaW5nLCBjYWxsYmFjayk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKC0tcmVtYWlu
aW5nLmNvdW50KSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSk7CisgICAgfTsKKyAgICBGaWxlc0lucHV0LnByb3RvdHlwZS5fcHJvY2Vzc0Zp
bGVzID0gZnVuY3Rpb24gKGZpbGVzKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmls
ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBuYW1lID0gZmlsZXNbaV0uY29ycmVj
dE5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIHZhciBleHRlbnNpb24gPSBuYW1lLnNw
bGl0KCcuJykucG9wKCk7CisgICAgICAgICAgICBpZiAoIXRoaXMub25Qcm9jZXNzRmlsZUNhbGxi
YWNrKGZpbGVzW2ldLCBuYW1lLCBleHRlbnNpb24pKSB7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGV4dGVuc2lvbiA9PT0gImJhYnls
b24iIHx8IGV4dGVuc2lvbiA9PT0gInN0bCIgfHwgZXh0ZW5zaW9uID09PSAib2JqIiB8fCBleHRl
bnNpb24gPT09ICJnbHRmIiB8fCBleHRlbnNpb24gPT09ICJnbGIiKQorICAgICAgICAgICAgICAg
ICYmIG5hbWUuaW5kZXhPZigiLmJpbmFyeS5iYWJ5bG9uIikgPT09IC0xICYmIG5hbWUuaW5kZXhP
ZigiLmluY3JlbWVudGFsLmJhYnlsb24iKSA9PT0gLTEpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9zY2VuZUZpbGVUb0xvYWQgPSBmaWxlc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEZpbGVzSW5wdXQuRmlsZXNUb0xvYWRbbmFtZV0gPSBmaWxlc1tpXTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogTG9hZCBmaWxlcyBmcm9tIGEgZHJvcCBldmVudAorICAgICAq
IEBwYXJhbSBldmVudCBkZWZpbmVzIHRoZSBkcm9wIGV2ZW50IHRvIHVzZSBhcyBzb3VyY2UKKyAg
ICAgKi8KKyAgICBGaWxlc0lucHV0LnByb3RvdHlwZS5sb2FkRmlsZXMgPSBmdW5jdGlvbiAoZXZl
bnQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgLy8gSGFuZGxpbmcgZGF0
YSB0cmFuc2ZlciB2aWEgZHJhZyduJ2Ryb3AKKyAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmRh
dGFUcmFuc2ZlciAmJiBldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMpIHsKKyAgICAgICAgICAgIHRo
aXMuX2ZpbGVzVG9Mb2FkID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzOworICAgICAgICB9Cisg
ICAgICAgIC8vIEhhbmRsaW5nIGZpbGVzIGZyb20gaW5wdXQgZmlsZXMKKyAgICAgICAgaWYgKGV2
ZW50ICYmIGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuZmlsZXMpIHsKKyAgICAgICAgICAg
IHRoaXMuX2ZpbGVzVG9Mb2FkID0gZXZlbnQudGFyZ2V0LmZpbGVzOworICAgICAgICB9CisgICAg
ICAgIGlmICghdGhpcy5fZmlsZXNUb0xvYWQgfHwgdGhpcy5fZmlsZXNUb0xvYWQubGVuZ3RoID09
PSAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X3N0YXJ0aW5nUHJvY2Vzc2luZ0ZpbGVzQ2FsbGJhY2spIHsKKyAgICAgICAgICAgIHRoaXMuX3N0
YXJ0aW5nUHJvY2Vzc2luZ0ZpbGVzQ2FsbGJhY2sodGhpcy5fZmlsZXNUb0xvYWQpOworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl9maWxlc1RvTG9hZCAmJiB0aGlzLl9maWxlc1RvTG9hZC5s
ZW5ndGggPiAwKSB7CisgICAgICAgICAgICB2YXIgZmlsZXNfMSA9IG5ldyBBcnJheSgpOworICAg
ICAgICAgICAgdmFyIGZvbGRlcnMgPSBbXTsKKyAgICAgICAgICAgIHZhciBpdGVtcyA9IGV2ZW50
LmRhdGFUcmFuc2ZlciA/IGV2ZW50LmRhdGFUcmFuc2Zlci5pdGVtcyA6IG51bGw7CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbGVzVG9Mb2FkLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgdmFyIGZpbGVUb0xvYWQgPSB0aGlzLl9maWxlc1RvTG9hZFtpXTsK
KyAgICAgICAgICAgICAgICB2YXIgbmFtZV8xID0gZmlsZVRvTG9hZC5uYW1lLnRvTG93ZXJDYXNl
KCk7CisgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gdm9pZCAwOworICAgICAgICAgICAgICAg
IGZpbGVUb0xvYWQuY29ycmVjdE5hbWUgPSBuYW1lXzE7CisgICAgICAgICAgICAgICAgaWYgKGl0
ZW1zKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVtLmdldEFzRW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVudHJ5ID0gaXRlbS5nZXRBc0VudHJ5KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS53ZWJraXRHZXRBc0VudHJ5KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IGl0ZW0ud2Via2l0R2V0QXNFbnRyeSgpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICghZW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNfMS5wdXNoKGZpbGVUb0xvYWQp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmb2xkZXJzLnB1c2goZW50cnkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNfMS5wdXNoKGZp
bGVUb0xvYWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZvbGRlcnMubGVuZ3RoID09PSAwKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0ZpbGVzKGZpbGVzXzEpOworICAgICAgICAgICAgICAg
IHRoaXMuX3Byb2Nlc3NSZWxvYWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSB7IGNvdW50OiBmb2xkZXJzLmxlbmd0
aCB9OworICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgZm9sZGVyc18xID0gZm9sZGVy
czsgX2kgPCBmb2xkZXJzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBmb2xkZXIgPSBmb2xkZXJzXzFbX2ldOworICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmF2
ZXJzZUZvbGRlcihmb2xkZXIsIGZpbGVzXzEsIHJlbWFpbmluZywgZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NGaWxlcyhmaWxlc18xKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcuY291bnQgPT09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcHJvY2Vzc1JlbG9hZCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIEZpbGVzSW5wdXQucHJvdG90
eXBlLl9wcm9jZXNzUmVsb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fb25S
ZWxvYWRDYWxsYmFjaykgeworICAgICAgICAgICAgdGhpcy5fb25SZWxvYWRDYWxsYmFjayh0aGlz
Ll9zY2VuZUZpbGVUb0xvYWQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5yZWxvYWQoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVs
b2FkIHRoZSBjdXJyZW50IHNjZW5lIGZyb20gdGhlIGxvYWRlZCBmaWxlcworICAgICAqLworICAg
IEZpbGVzSW5wdXQucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IF90aGlzID0gdGhpczsKKyAgICAgICAgLy8gSWYgYSBzY2VuZSBmaWxlIGhhcyBiZWVuIHByb3Zp
ZGVkCisgICAgICAgIGlmICh0aGlzLl9zY2VuZUZpbGVUb0xvYWQpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9jdXJyZW50U2NlbmUpIHsKKyAgICAgICAgICAgICAgICBpZiAoX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLmVycm9yc0NvdW50ID4gMCkg
eworICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siTG9nZ2VyIl0uQ2xlYXJMb2dDYWNoZSgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc3RvcFJlbmRlckxvb3AoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlNjZW5lTG9hZGVyIl0uTG9hZEFzeW5jKCJmaWxlOiIsIHRoaXMuX3NjZW5lRmls
ZVRvTG9hZCwgdGhpcy5fZW5naW5lLCBmdW5jdGlvbiAocHJvZ3Jlc3MpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoX3RoaXMuX3Byb2dyZXNzQ2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAg
X3RoaXMuX3Byb2dyZXNzQ2FsbGJhY2socHJvZ3Jlc3MpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHNjZW5lKSB7CisgICAgICAgICAgICAgICAgaWYg
KF90aGlzLl9jdXJyZW50U2NlbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2N1cnJl
bnRTY2VuZS5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF90
aGlzLl9jdXJyZW50U2NlbmUgPSBzY2VuZTsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX3Nj
ZW5lTG9hZGVkQ2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NjZW5lTG9h
ZGVkQ2FsbGJhY2soX3RoaXMuX3NjZW5lRmlsZVRvTG9hZCwgX3RoaXMuX2N1cnJlbnRTY2VuZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRleHR1cmVz
IGFuZCBzaGFkZXJzIHRvIGJlIHJlYWR5CisgICAgICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnRT
Y2VuZS5leGVjdXRlV2hlblJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAg
X3RoaXMuX2VuZ2luZS5ydW5SZW5kZXJMb29wKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLnJlbmRlckZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVy
cm9yKSB7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9lcnJvckNhbGxiYWNrKSB7CisgICAg
ICAgICAgICAgICAgICAgIF90aGlzLl9lcnJvckNhbGxiYWNrKF90aGlzLl9zY2VuZUZpbGVUb0xv
YWQsIF90aGlzLl9jdXJyZW50U2NlbmUsIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVy
cm9yKCJQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIC5iYWJ5bG9uIGZpbGUuIik7CisgICAgICAgIH0K
KyAgICB9OworICAgIHJldHVybiBGaWxlc0lucHV0OworfSgpKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NaXNjL2ZpbGVzSW5wdXRTdG9yZS50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvZmlsZXNJbnB1dFN0b3JlLnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBGaWxlc0lucHV0U3RvcmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRmlsZXNJbnB1dFN0b3JlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWxlc0lucHV0U3Rv
cmU7IH0pOworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGhlbHAgbWFuYWdpbmcgZmlsZSBwaWNraW5n
IGFuZCBkcmFnJ24nZHJvcAorICogRmlsZSBTdG9yYWdlCisgKi8KK3ZhciBGaWxlc0lucHV0U3Rv
cmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRmlsZXNJbnB1
dFN0b3JlKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBMaXN0IG9mIGZpbGVzIHJlYWR5IHRv
IGJlIGxvYWRlZAorICAgICAqLworICAgIEZpbGVzSW5wdXRTdG9yZS5GaWxlc1RvTG9hZCA9IHt9
OworICAgIHJldHVybiBGaWxlc0lucHV0U3RvcmU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL01pc2MvZ3JhZGllbnRzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vTWlzYy9ncmFkaWVudHMudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbG9yR3JhZGllbnQsIENv
bG9yM0dyYWRpZW50LCBGYWN0b3JHcmFkaWVudCwgR3JhZGllbnRIZWxwZXIgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3JHcmFkaWVudCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gQ29sb3JHcmFkaWVudDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvcjNHcmFkaWVu
dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29sb3IzR3JhZGllbnQ7IH0pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRmFjdG9yR3JhZGllbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZhY3RvckdyYWRpZW50
OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdyYWRpZW50SGVscGVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBHcmFkaWVudEhlbHBlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIp
OworCisvKiogQ2xhc3MgdXNlZCB0byBzdG9yZSBjb2xvcjQgZ3JhZGllbnQgKi8KK3ZhciBDb2xv
ckdyYWRpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIENv
bG9yR3JhZGllbnQoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIFdpbGwgZ2V0IGEgY29sb3Ig
cGlja2VkIHJhbmRvbWx5IGJldHdlZW4gY29sb3IxIGFuZCBjb2xvcjIuCisgICAgICogSWYgY29s
b3IyIGlzIHVuZGVmaW5lZCB0aGVuIGNvbG9yMSB3aWxsIGJlIHVzZWQKKyAgICAgKiBAcGFyYW0g
cmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBDb2xvcjQgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbgor
ICAgICAqLworICAgIENvbG9yR3JhZGllbnQucHJvdG90eXBlLmdldENvbG9yVG9SZWYgPSBmdW5j
dGlvbiAocmVzdWx0KSB7CisgICAgICAgIGlmICghdGhpcy5jb2xvcjIpIHsKKyAgICAgICAgICAg
IHJlc3VsdC5jb3B5RnJvbSh0aGlzLmNvbG9yMSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siQ29sb3I0Il0uTGVycFRvUmVmKHRoaXMuY29sb3IxLCB0aGlzLmNvbG9yMiwgTWF0aC5y
YW5kb20oKSwgcmVzdWx0KTsKKyAgICB9OworICAgIHJldHVybiBDb2xvckdyYWRpZW50OworfSgp
KTsKKworLyoqIENsYXNzIHVzZWQgdG8gc3RvcmUgY29sb3IgMyBncmFkaWVudCAqLwordmFyIENv
bG9yM0dyYWRpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9u
IENvbG9yM0dyYWRpZW50KCkgeworICAgIH0KKyAgICByZXR1cm4gQ29sb3IzR3JhZGllbnQ7Cit9
KCkpOworCisvKiogQ2xhc3MgdXNlZCB0byBzdG9yZSBmYWN0b3IgZ3JhZGllbnQgKi8KK3ZhciBG
YWN0b3JHcmFkaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlv
biBGYWN0b3JHcmFkaWVudCgpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogV2lsbCBnZXQgYSBu
dW1iZXIgcGlja2VkIHJhbmRvbWx5IGJldHdlZW4gZmFjdG9yMSBhbmQgZmFjdG9yMi4KKyAgICAg
KiBJZiBmYWN0b3IyIGlzIHVuZGVmaW5lZCB0aGVuIGZhY3RvcjEgd2lsbCBiZSB1c2VkCisgICAg
ICogQHJldHVybnMgdGhlIHBpY2tlZCBudW1iZXIKKyAgICAgKi8KKyAgICBGYWN0b3JHcmFkaWVu
dC5wcm90b3R5cGUuZ2V0RmFjdG9yID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5m
YWN0b3IyID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZhY3RvcjE7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZmFjdG9yMSArICgodGhpcy5mYWN0b3Iy
IC0gdGhpcy5mYWN0b3IxKSAqIE1hdGgucmFuZG9tKCkpOworICAgIH07CisgICAgcmV0dXJuIEZh
Y3RvckdyYWRpZW50OworfSgpKTsKKworLyoqCisgKiBIZWxwZXIgdXNlZCB0byBzaW1wbGlmeSBz
b21lIGdlbmVyaWMgZ3JhZGllbnQgdGFza3MKKyAqLwordmFyIEdyYWRpZW50SGVscGVyID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEdyYWRpZW50SGVscGVyKCkg
eworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGdyYWRpZW50IGZyb20g
YW4gYXJyYXkgb2YgSVZhbHVlR3JhZGllbnQKKyAgICAgKiBAcGFyYW0gcmF0aW8gZGVmaW5lcyB0
aGUgY3VycmVudCByYXRpbyB0byBnZXQKKyAgICAgKiBAcGFyYW0gZ3JhZGllbnRzIGRlZmluZXMg
dGhlIGFycmF5IG9mIElWYWx1ZUdyYWRpZW50CisgICAgICogQHBhcmFtIHVwZGF0ZUZ1bmMgZGVm
aW5lcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBnZXQgdGhlIGZpbmFsIHZhbHVlIGZy
b20gdGhlIHNlbGVjdGVkIGdyYWRpZW50cworICAgICAqLworICAgIEdyYWRpZW50SGVscGVyLkdl
dEN1cnJlbnRHcmFkaWVudCA9IGZ1bmN0aW9uIChyYXRpbywgZ3JhZGllbnRzLCB1cGRhdGVGdW5j
KSB7CisgICAgICAgIGZvciAodmFyIGdyYWRpZW50SW5kZXggPSAwOyBncmFkaWVudEluZGV4IDwg
Z3JhZGllbnRzLmxlbmd0aCAtIDE7IGdyYWRpZW50SW5kZXgrKykgeworICAgICAgICAgICAgdmFy
IGN1cnJlbnRHcmFkaWVudCA9IGdyYWRpZW50c1tncmFkaWVudEluZGV4XTsKKyAgICAgICAgICAg
IHZhciBuZXh0R3JhZGllbnQgPSBncmFkaWVudHNbZ3JhZGllbnRJbmRleCArIDFdOworICAgICAg
ICAgICAgaWYgKHJhdGlvID49IGN1cnJlbnRHcmFkaWVudC5ncmFkaWVudCAmJiByYXRpbyA8PSBu
ZXh0R3JhZGllbnQuZ3JhZGllbnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAocmF0
aW8gLSBjdXJyZW50R3JhZGllbnQuZ3JhZGllbnQpIC8gKG5leHRHcmFkaWVudC5ncmFkaWVudCAt
IGN1cnJlbnRHcmFkaWVudC5ncmFkaWVudCk7CisgICAgICAgICAgICAgICAgdXBkYXRlRnVuYyhj
dXJyZW50R3JhZGllbnQsIG5leHRHcmFkaWVudCwgc2NhbGUpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBVc2UgbGFzdCBpbmRl
eCBpZiBvdmVyCisgICAgICAgIHZhciBsYXN0SW5kZXggPSBncmFkaWVudHMubGVuZ3RoIC0gMTsK
KyAgICAgICAgdXBkYXRlRnVuYyhncmFkaWVudHNbbGFzdEluZGV4XSwgZ3JhZGllbnRzW2xhc3RJ
bmRleF0sIDEuMCk7CisgICAgfTsKKyAgICByZXR1cm4gR3JhZGllbnRIZWxwZXI7Cit9KCkpOwor
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2MvZ3VpZC50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL2d1aWQudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBHVUlEICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdVSUQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEdVSUQ7
IH0pOworLyoqCisgKiBDbGFzcyB1c2VkIHRvIG1hbmlwdWxhdGUgR1VJRHMKKyAqLwordmFyIEdV
SUQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gR1VJRCgpIHsK
KyAgICB9CisgICAgLyoqCisgICAgICogSW1wbGVtZW50YXRpb24gZnJvbSBodHRwOi8vc3RhY2tv
dmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWlu
LWphdmFzY3JpcHQvMjExNzUyMyNhbnN3ZXItMjExNzUyMworICAgICAqIEJlIGF3YXJlIE1hdGgu
cmFuZG9tKCkgY291bGQgY2F1c2UgY29sbGlzaW9ucywgYnV0OgorICAgICAqICJBbGwgYnV0IDYg
b2YgdGhlIDEyOCBiaXRzIG9mIHRoZSBJRCBhcmUgcmFuZG9tbHkgZ2VuZXJhdGVkLCB3aGljaCBt
ZWFucyB0aGF0IGZvciBhbnkgdHdvIGlkcywgdGhlcmUncyBhIDEgaW4gMl5eMTIyIChvciA1LjN4
MTBeXjM2KSBjaGFuY2UgdGhleSdsbCBjb2xsaWRlIgorICAgICAqIEByZXR1cm5zIGEgcHNldWRv
IHJhbmRvbSBpZAorICAgICAqLworICAgIEdVSUQuUmFuZG9tSWQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBs
YWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7CisgICAgICAgICAgICB2YXIgciA9IE1hdGgucmFu
ZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpOworICAg
ICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpOworICAgICAgICB9KTsKKyAgICB9OworICAg
IHJldHVybiBHVUlEOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NaXNjL2lJ
bnNwZWN0YWJsZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL01pc2MvaUluc3BlY3RhYmxlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBJbnNwZWN0YWJsZVR5cGUgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zcGVjdGFibGVUeXBlIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBJbnNwZWN0YWJsZVR5cGU7IH0pOworLyoqCisgKiBFbnVtIHRoYXQgZGV0
ZXJtaW5lcyB0aGUgdGV4dC13cmFwcGluZyBtb2RlIHRvIHVzZS4KKyAqLwordmFyIEluc3BlY3Rh
YmxlVHlwZTsKKyhmdW5jdGlvbiAoSW5zcGVjdGFibGVUeXBlKSB7CisgICAgLyoqCisgICAgICog
Q2hlY2tib3ggZm9yIGJvb2xlYW5zCisgICAgICovCisgICAgSW5zcGVjdGFibGVUeXBlW0luc3Bl
Y3RhYmxlVHlwZVsiQ2hlY2tib3giXSA9IDBdID0gIkNoZWNrYm94IjsKKyAgICAvKioKKyAgICAg
KiBTbGlkZXJzIGZvciBudW1iZXJzCisgICAgICovCisgICAgSW5zcGVjdGFibGVUeXBlW0luc3Bl
Y3RhYmxlVHlwZVsiU2xpZGVyIl0gPSAxXSA9ICJTbGlkZXIiOworICAgIC8qKgorICAgICAqIFZl
Y3RvcjMKKyAgICAgKi8KKyAgICBJbnNwZWN0YWJsZVR5cGVbSW5zcGVjdGFibGVUeXBlWyJWZWN0
b3IzIl0gPSAyXSA9ICJWZWN0b3IzIjsKKyAgICAvKioKKyAgICAgKiBRdWF0ZXJuaW9ucworICAg
ICAqLworICAgIEluc3BlY3RhYmxlVHlwZVtJbnNwZWN0YWJsZVR5cGVbIlF1YXRlcm5pb24iXSA9
IDNdID0gIlF1YXRlcm5pb24iOworICAgIC8qKgorICAgICAqIENvbG9yMworICAgICAqLworICAg
IEluc3BlY3RhYmxlVHlwZVtJbnNwZWN0YWJsZVR5cGVbIkNvbG9yMyJdID0gNF0gPSAiQ29sb3Iz
IjsKKyAgICAvKioKKyAgICAgKiBTdHJpbmcKKyAgICAgKi8KKyAgICBJbnNwZWN0YWJsZVR5cGVb
SW5zcGVjdGFibGVUeXBlWyJTdHJpbmciXSA9IDVdID0gIlN0cmluZyI7Cit9KShJbnNwZWN0YWJs
ZVR5cGUgfHwgKEluc3BlY3RhYmxlVHlwZSA9IHt9KSk7CisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL01pc2MvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL01pc2MvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogQW5kT3JOb3RFdmFsdWF0b3IsIEFzc2V0VGFza1N0YXRlLCBBYnN0
cmFjdEFzc2V0VGFzaywgQXNzZXRzUHJvZ3Jlc3NFdmVudCwgTWVzaEFzc2V0VGFzaywgVGV4dEZp
bGVBc3NldFRhc2ssIEJpbmFyeUZpbGVBc3NldFRhc2ssIEltYWdlQXNzZXRUYXNrLCBUZXh0dXJl
QXNzZXRUYXNrLCBDdWJlVGV4dHVyZUFzc2V0VGFzaywgSERSQ3ViZVRleHR1cmVBc3NldFRhc2ss
IEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNzZXRUYXNrLCBBc3NldHNNYW5hZ2VyLCBERFNU
b29scywgZXhwYW5kVG9Qcm9wZXJ0eSwgc2VyaWFsaXplLCBzZXJpYWxpemVBc1RleHR1cmUsIHNl
cmlhbGl6ZUFzQ29sb3IzLCBzZXJpYWxpemVBc0ZyZXNuZWxQYXJhbWV0ZXJzLCBzZXJpYWxpemVB
c1ZlY3RvcjIsIHNlcmlhbGl6ZUFzVmVjdG9yMywgc2VyaWFsaXplQXNNZXNoUmVmZXJlbmNlLCBz
ZXJpYWxpemVBc0NvbG9yQ3VydmVzLCBzZXJpYWxpemVBc0NvbG9yNCwgc2VyaWFsaXplQXNJbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLCBzZXJpYWxpemVBc1F1YXRlcm5pb24sIHNlcmlhbGl6
ZUFzTWF0cml4LCBzZXJpYWxpemVBc0NhbWVyYVJlZmVyZW5jZSwgU2VyaWFsaXphdGlvbkhlbHBl
ciwgRGVmZXJyZWQsIEVudmlyb25tZW50VGV4dHVyZVRvb2xzLCBNZXNoRXhwbG9kZXIsIEZpbGVz
SW5wdXQsIEN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29scywgS2hyb25vc1RleHR1cmVD
b250YWluZXIsIEV2ZW50U3RhdGUsIE9ic2VydmVyLCBNdWx0aU9ic2VydmVyLCBPYnNlcnZhYmxl
LCBQZXJmb3JtYW5jZU1vbml0b3IsIFJvbGxpbmdBdmVyYWdlLCBQcm9taXNlUG9seWZpbGwsIFNj
ZW5lT3B0aW1pemF0aW9uLCBUZXh0dXJlT3B0aW1pemF0aW9uLCBIYXJkd2FyZVNjYWxpbmdPcHRp
bWl6YXRpb24sIFNoYWRvd3NPcHRpbWl6YXRpb24sIFBvc3RQcm9jZXNzZXNPcHRpbWl6YXRpb24s
IExlbnNGbGFyZXNPcHRpbWl6YXRpb24sIEN1c3RvbU9wdGltaXphdGlvbiwgUGFydGljbGVzT3B0
aW1pemF0aW9uLCBSZW5kZXJUYXJnZXRzT3B0aW1pemF0aW9uLCBNZXJnZU1lc2hlc09wdGltaXph
dGlvbiwgU2NlbmVPcHRpbWl6ZXJPcHRpb25zLCBTY2VuZU9wdGltaXplciwgU2NlbmVTZXJpYWxp
emVyLCBTbWFydEFycmF5LCBTbWFydEFycmF5Tm9EdXBsaWNhdGUsIFN0cmluZ0RpY3Rpb25hcnks
IFRhZ3MsIFRleHR1cmVUb29scywgVEdBVG9vbHMsIFRvb2xzLCBjbGFzc05hbWUsIEFzeW5jTG9v
cCwgVmlkZW9SZWNvcmRlciwgSm95c3RpY2tBeGlzLCBWaXJ0dWFsSm95c3RpY2ssIFdvcmtlclBv
b2wsIExvZ2dlciwgX1R5cGVTdG9yZSwgRmlsZXNJbnB1dFN0b3JlLCBEZWVwQ29waWVyLCBQaXZv
dFRvb2xzLCBQcmVjaXNpb25EYXRlLCBTY3JlZW5zaG90VG9vbHMsIFdlYlJlcXVlc3QsIEluc3Bl
Y3RhYmxlVHlwZSwgQlJERlRleHR1cmVUb29scywgUkdCRFRleHR1cmVUb29scywgQ29sb3JHcmFk
aWVudCwgQ29sb3IzR3JhZGllbnQsIEZhY3RvckdyYWRpZW50LCBHcmFkaWVudEhlbHBlciwgUGVy
ZkNvdW50ZXIsIFJldHJ5U3RyYXRlZ3ksIExvYWRGaWxlRXJyb3IsIEhEUlRvb2xzLCBQYW5vcmFt
YVRvQ3ViZU1hcFRvb2xzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfYW5kT3JOb3RFdmFsdWF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vYW5kT3JOb3RFdmFsdWF0b3IgKi8gIi4vTWlzYy9hbmRP
ck5vdEV2YWx1YXRvci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmRPck5vdEV2YWx1YXRvciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FuZE9yTm90RXZhbHVhdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkFuZE9yTm90RXZhbHVhdG9yIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2Fzc2V0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vYXNzZXRzTWFuYWdlciAqLyAiLi9NaXNjL2Fzc2V0c01h
bmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXNzZXRUYXNrU3RhdGUiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9hc3NldHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFz
c2V0VGFza1N0YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFic3RyYWN0QXNzZXRUYXNr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYXNzZXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJBYnN0cmFjdEFzc2V0VGFzayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJB
c3NldHNQcm9ncmVzc0V2ZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYXNzZXRzTWFuYWdlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBc3NldHNQcm9ncmVzc0V2ZW50Il07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIk1lc2hBc3NldFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9h
c3NldHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2hBc3NldFRhc2si
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGV4dEZpbGVBc3NldFRhc2siLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9hc3NldHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRl
eHRGaWxlQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJpbmFyeUZpbGVBc3Nl
dFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hc3NldHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIkJpbmFyeUZpbGVBc3NldFRhc2siXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiSW1hZ2VBc3NldFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hc3NldHNNYW5hZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkltYWdlQXNzZXRUYXNrIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlRleHR1cmVBc3NldFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9h
c3NldHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRleHR1cmVBc3NldFRh
c2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3ViZVRleHR1cmVBc3NldFRhc2siLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9hc3NldHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkN1YmVUZXh0dXJlQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhEUkN1
YmVUZXh0dXJlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYXNzZXRzTWFuYWdlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJIRFJDdWJlVGV4dHVyZUFzc2V0VGFzayJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZUFzc2V0VGFz
ayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Fzc2V0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmVBc3NldFRhc2siXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQXNzZXRzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Fz
c2V0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQXNzZXRzTWFuYWdlciJd
OyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGRzICovICIuL01pc2MvZGRz
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkREU1Rvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
ZGRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkREU1Rvb2xzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2Rl
Y29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZXhwYW5kVG9Qcm9wZXJ0eSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
ZXhwYW5kVG9Qcm9wZXJ0eSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bInNlcmlhbGl6ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1RleHR1
cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJz
ZXJpYWxpemVBc0NvbG9yMyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1sic2VyaWFsaXplQXNDb2xvcjMiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAic2VyaWFsaXplQXNGcmVzbmVsUGFyYW1ldGVycyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1sic2VyaWFsaXpl
QXNGcmVzbmVsUGFyYW1ldGVycyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVB
c1ZlY3RvcjIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bInNlcmlhbGl6ZUFzVmVjdG9yMiJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJzZXJpYWxpemVBc1ZlY3RvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInNlcmlhbGl6ZUFzVmVjdG9yMyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc01lc2hSZWZlcmVuY2UiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInNlcmlh
bGl6ZUFzTWVzaFJlZmVyZW5jZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVB
c0NvbG9yQ3VydmVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJzZXJpYWxpemVBc0NvbG9yQ3VydmVzIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgInNlcmlhbGl6ZUFzQ29sb3I0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJzZXJpYWxpemVBc0NvbG9yNCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0ltYWdlUHJvY2Vzc2luZ0NvbmZp
Z3VyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bInNlcmlhbGl6ZUFzSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1F1YXRlcm5pb24iLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInNl
cmlhbGl6ZUFzUXVhdGVybmlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVB
c01hdHJpeCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1sic2VyaWFsaXplQXNNYXRyaXgiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAic2VyaWFsaXplQXNDYW1lcmFSZWZlcmVuY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInNlcmlhbGl6ZUFzQ2FtZXJhUmVm
ZXJlbmNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNlcmlhbGl6YXRpb25IZWxwZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfZGVmZXJyZWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vZGVmZXJyZWQgKi8gIi4vTWlzYy9kZWZlcnJlZC50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJEZWZlcnJlZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RlZmVycmVkX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIkRlZmVycmVkIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2Vudmlyb25tZW50VGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Vudmlyb25tZW50VGV4dHVyZVRvb2xz
ICovICIuL01pc2MvZW52aXJvbm1lbnRUZXh0dXJlVG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lbnZpcm9u
bWVudFRleHR1cmVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFbnZpcm9ubWVu
dFRleHR1cmVUb29scyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoRXhw
bG9kZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vbWVzaEV4cGxvZGVyICovICIuL01pc2MvbWVzaEV4cGxvZGVyLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIk1lc2hFeHBsb2RlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21lc2hFeHBsb2Rl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJNZXNoRXhwbG9kZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmlsZXNJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9maWxlc0lucHV0ICovICIuL01pc2Mv
ZmlsZXNJbnB1dC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGaWxlc0lucHV0IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfZmlsZXNJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJGaWxl
c0lucHV0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0hpZ2hEeW5hbWljUmFu
Z2VfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vSGlnaER5bmFtaWNSYW5nZS9pbmRleCAqLyAiLi9NaXNjL0hpZ2hEeW5hbWljUmFu
Z2UvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5v
bWlhbFRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSGlnaER5bmFtaWNSYW5nZV9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDdWJlTWFwVG9TcGhlcmljYWxQb2x5bm9taWFs
VG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSERSVG9vbHMiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9IaWdoRHluYW1pY1JhbmdlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIkhEUlRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhbm9yYW1hVG9DdWJlTWFw
VG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9IaWdoRHluYW1pY1JhbmdlX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBhbm9yYW1hVG9DdWJlTWFwVG9vbHMiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfa2hyb25vc1RleHR1cmVDb250YWluZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4va2hyb25v
c1RleHR1cmVDb250YWluZXIgKi8gIi4vTWlzYy9raHJvbm9zVGV4dHVyZUNvbnRhaW5lci50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJLaHJvbm9zVGV4dHVyZUNvbnRhaW5lciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2tocm9ub3NUZXh0dXJlQ29udGFpbmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIktocm9ub3NUZXh0dXJlQ29udGFpbmVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkV2ZW50U3RhdGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJFdmVudFN0YXRlIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk9ic2VydmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siT2JzZXJ2ZXIiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTXVsdGlPYnNlcnZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX29i
c2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIk11bHRpT2JzZXJ2ZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT2JzZXJ2YWJsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIk9ic2VydmFibGUiXTsg
fSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGVyZm9ybWFuY2VNb25pdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wZXJm
b3JtYW5jZU1vbml0b3IgKi8gIi4vTWlzYy9wZXJmb3JtYW5jZU1vbml0b3IudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiUGVyZm9ybWFuY2VNb25pdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGVy
Zm9ybWFuY2VNb25pdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJQZXJmb3JtYW5j
ZU1vbml0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUm9sbGluZ0F2ZXJhZ2UiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9wZXJmb3JtYW5jZU1vbml0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzExX19bIlJvbGxpbmdBdmVyYWdlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3Byb21pc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3Byb21pc2UgKi8gIi4vTWlzYy9wcm9taXNlLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlByb21pc2VQb2x5ZmlsbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Byb21pc2VfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlByb21pc2VQb2x5ZmlsbCJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZU9wdGltaXplcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2NlbmVPcHRpbWl6ZXIgKi8g
Ii4vTWlzYy9zY2VuZU9wdGltaXplci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY2VuZU9wdGlt
aXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lT3B0aW1pemVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xM19fWyJTY2VuZU9wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJUZXh0dXJlT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2NlbmVP
cHRpbWl6ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlRleHR1cmVPcHRpbWl6YXRp
b24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSGFyZHdhcmVTY2FsaW5nT3B0aW1pemF0aW9u
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2NlbmVPcHRpbWl6ZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEzX19bIkhhcmR3YXJlU2NhbGluZ09wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTaGFkb3dzT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2Nl
bmVPcHRpbWl6ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlNoYWRvd3NPcHRpbWl6
YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3Nlc09wdGltaXphdGlv
biIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lT3B0aW1pemVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xM19fWyJQb3N0UHJvY2Vzc2VzT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkxlbnNGbGFyZXNPcHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9z
Y2VuZU9wdGltaXplcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siTGVuc0ZsYXJlc09w
dGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDdXN0b21PcHRpbWl6YXRpb24i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zY2VuZU9wdGltaXplcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTNfX1siQ3VzdG9tT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBhcnRpY2xlc09wdGltaXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lT3B0aW1p
emVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJQYXJ0aWNsZXNPcHRpbWl6YXRpb24i
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVuZGVyVGFyZ2V0c09wdGltaXphdGlvbiIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lT3B0aW1pemVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xM19fWyJSZW5kZXJUYXJnZXRzT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk1lcmdlTWVzaGVzT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2NlbmVP
cHRpbWl6ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIk1lcmdlTWVzaGVzT3B0aW1p
emF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lT3B0aW1pemVyT3B0aW9ucyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lT3B0aW1pemVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xM19fWyJTY2VuZU9wdGltaXplck9wdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiU2NlbmVPcHRpbWl6ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zY2VuZU9wdGltaXplcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siU2NlbmVPcHRpbWl6ZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVTZXJpYWxpemVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zY2VuZVNlcmlhbGl6ZXIg
Ki8gIi4vTWlzYy9zY2VuZVNlcmlhbGl6ZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVT
ZXJpYWxpemVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2NlbmVTZXJpYWxpemVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xNF9fWyJTY2VuZVNlcmlhbGl6ZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfc21hcnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc21hcnRBcnJheSAqLyAiLi9NaXNjL3NtYXJ0
QXJyYXkudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU21hcnRBcnJheSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIlNtYXJ0QXJy
YXkiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU21hcnRBcnJheU5vRHVwbGljYXRlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfc21hcnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVf
X1siU21hcnRBcnJheU5vRHVwbGljYXRlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3N0cmluZ0RpY3Rpb25hcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3N0cmluZ0RpY3Rpb25hcnkgKi8gIi4vTWlzYy9zdHJpbmdE
aWN0aW9uYXJ5LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0cmluZ0RpY3Rpb25hcnkiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9zdHJpbmdEaWN0aW9uYXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xNl9fWyJTdHJpbmdEaWN0aW9uYXJ5Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL3RhZ3MgKi8gIi4vTWlzYy90YWdzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRh
Z3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
N19fWyJUYWdzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RleHR1cmVUb29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vdGV4dHVyZVRvb2xzICovICIuL01pc2MvdGV4dHVyZVRvb2xzLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlRleHR1cmVUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3RleHR1cmVUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siVGV4dHVyZVRvb2xzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3RnYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGdhICovICIuL01pc2MvdGdhLnRzIik7CisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlRHQVRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdGdhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xOV9fWyJUR0FUb29scyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF90b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMF9fWyJUb29scyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjbGFzc05h
bWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MjBfX1siY2xhc3NOYW1lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFzeW5jTG9vcCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJB
c3luY0xvb3AiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdmlkZW9SZWNvcmRl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vdmlkZW9SZWNvcmRlciAqLyAiLi9NaXNjL3ZpZGVvUmVjb3JkZXIudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVmlkZW9SZWNvcmRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3ZpZGVvUmVjb3Jk
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIlZpZGVvUmVjb3JkZXIiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdmlydHVhbEpveXN0aWNrX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi92aXJ0dWFsSm95c3Rp
Y2sgKi8gIi4vTWlzYy92aXJ0dWFsSm95c3RpY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSm95
c3RpY2tBeGlzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdmlydHVhbEpveXN0aWNrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yMl9fWyJKb3lzdGlja0F4aXMiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiVmlydHVhbEpveXN0aWNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdmlydHVhbEpveXN0
aWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJWaXJ0dWFsSm95c3RpY2siXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd29ya2VyUG9vbF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd29ya2VyUG9vbCAqLyAi
Li9NaXNjL3dvcmtlclBvb2wudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV29ya2VyUG9vbCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3dvcmtlclBvb2xfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIz
X19bIldvcmtlclBvb2wiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTG9nZ2Vy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
NF9fWyJMb2dnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdHlwZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
X1R5cGVTdG9yZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjVfX1siX1R5cGVTdG9yZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9maWxlc0lucHV0U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ZpbGVzSW5wdXRTdG9yZSAqLyAiLi9NaXNjL2ZpbGVz
SW5wdXRTdG9yZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGaWxlc0lucHV0U3RvcmUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9maWxlc0lucHV0U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI2X19bIkZpbGVzSW5wdXRTdG9yZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9kZWVwQ29waWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yN19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9kZWVwQ29waWVyICovICIuL01pc2MvZGVlcENvcGllci50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJEZWVwQ29waWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVlcENvcGll
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjdfX1siRGVlcENvcGllciJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9waXZvdFRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9waXZvdFRvb2xzICovICIuL01pc2Mv
cGl2b3RUb29scy50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaXZvdFRvb2xzIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfcGl2b3RUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjhfX1siUGl2
b3RUb29scyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcmVjaXNpb25EYXRl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9wcmVjaXNpb25EYXRlICovICIuL01pc2MvcHJlY2lzaW9uRGF0ZS50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQcmVjaXNpb25EYXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcHJlY2lzaW9uRGF0
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjlfX1siUHJlY2lzaW9uRGF0ZSJdOyB9KTsKKwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY3JlZW5zaG90VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzMwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NjcmVlbnNob3RUb29s
cyAqLyAiLi9NaXNjL3NjcmVlbnNob3RUb29scy50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY3Jl
ZW5zaG90VG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zY3JlZW5zaG90VG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzMwX19bIlNjcmVlbnNob3RUb29scyJdOyB9KTsKKworLyogZW1w
dHkvdW51c2VkIGhhcm1vbnkgc3RhciByZWV4cG9ydCAqLy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfd2ViUmVxdWVzdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vd2ViUmVxdWVzdCAqLyAiLi9NaXNjL3dlYlJlcXVlc3QudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiV2ViUmVxdWVzdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3dlYlJlcXVl
c3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMxX19bIldlYlJlcXVlc3QiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaUluc3BlY3RhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pSW5zcGVjdGFibGUgKi8gIi4v
TWlzYy9pSW5zcGVjdGFibGUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zcGVjdGFibGVUeXBl
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaUluc3BlY3RhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zMl9fWyJJbnNwZWN0YWJsZVR5cGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfYnJkZlRleHR1cmVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzNfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vYnJkZlRleHR1cmVUb29scyAqLyAiLi9NaXNjL2JyZGZU
ZXh0dXJlVG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQlJERlRleHR1cmVUb29scyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2JyZGZUZXh0dXJlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzMzX19bIkJSREZUZXh0dXJlVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcmdiZFRleHR1cmVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vcmdiZFRleHR1cmVUb29scyAqLyAiLi9NaXNjL3JnYmRU
ZXh0dXJlVG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUkdCRFRleHR1cmVUb29scyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3JnYmRUZXh0dXJlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzM0X19bIlJHQkRUZXh0dXJlVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfZ3JhZGllbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9ncmFkaWVudHMgKi8gIi4vTWlzYy9ncmFkaWVudHMudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ29sb3JHcmFkaWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2dyYWRp
ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfX1siQ29sb3JHcmFkaWVudCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJDb2xvcjNHcmFkaWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2dyYWRpZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfX1siQ29sb3IzR3JhZGllbnQi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmFjdG9yR3JhZGllbnQiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM1X19bIkZhY3Rvckdy
YWRpZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdyYWRpZW50SGVscGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfZ3JhZGllbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNV9fWyJH
cmFkaWVudEhlbHBlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wZXJmQ291
bnRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vcGVyZkNvdW50ZXIgKi8gIi4vTWlzYy9wZXJmQ291bnRlci50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQZXJmQ291bnRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BlcmZDb3VudGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNl9fWyJQZXJmQ291bnRlciJdOyB9KTsKKworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9yZXRyeVN0cmF0ZWd5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yZXRyeVN0cmF0ZWd5ICovICIuL01p
c2MvcmV0cnlTdHJhdGVneS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZXRyeVN0cmF0ZWd5Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfcmV0cnlTdHJhdGVneV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMzdfX1siUmV0cnlTdHJhdGVneSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9sb2FkRmlsZUVycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zOF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9sb2FkRmlsZUVycm9yICovICIuL01pc2MvbG9hZEZpbGVFcnJvci50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJMb2FkRmlsZUVycm9yIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfbG9hZEZpbGVFcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzhfX1siTG9hZEZpbGVF
cnJvciJdOyB9KTsKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL01pc2MvaW5zdGFudGlhdGlvblRvb2xzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlzYy9pbnN0YW50aWF0aW9uVG9vbHMu
dHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IEluc3RhbnRpYXRpb25Ub29scyAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJJbnN0YW50aWF0aW9uVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEluc3RhbnRpYXRpb25Ub29sczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKy8q
KgorICogQ2xhc3MgdXNlZCB0byBlbmFibGUgaW5zdGF0aXRpb24gb2Ygb2JqZWN0cyBieSBjbGFz
cyBuYW1lCisgKi8KK3ZhciBJbnN0YW50aWF0aW9uVG9vbHMgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgZnVuY3Rpb24gSW5zdGFudGlhdGlvblRvb2xzKCkgeworICAgIH0KKyAg
ICAvKioKKyAgICAgKiBUcmllcyB0byBpbnN0YW50aWF0ZSBhIG5ldyBvYmplY3QgZnJvbSBhIGdp
dmVuIGNsYXNzIG5hbWUKKyAgICAgKiBAcGFyYW0gY2xhc3NOYW1lIGRlZmluZXMgdGhlIGNsYXNz
IG5hbWUgdG8gaW5zdGFudGlhdGUKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IG9iamVjdCBvciBu
dWxsIGlmIHRoZSBzeXN0ZW0gd2FzIG5vdCBhYmxlIHRvIGRvIHRoZSBpbnN0YW50aWF0aW9uCisg
ICAgICovCisgICAgSW5zdGFudGlhdGlvblRvb2xzLkluc3RhbnRpYXRlID0gZnVuY3Rpb24gKGNs
YXNzTmFtZSkgeworICAgICAgICBpZiAodGhpcy5SZWdpc3RlcmVkRXh0ZXJuYWxDbGFzc2VzICYm
IHRoaXMuUmVnaXN0ZXJlZEV4dGVybmFsQ2xhc3Nlc1tjbGFzc05hbWVdKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5SZWdpc3RlcmVkRXh0ZXJuYWxDbGFzc2VzW2NsYXNzTmFtZV07CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGludGVybmFsQ2xhc3MgPSBfdHlwZVN0b3JlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIl9UeXBlU3RvcmUiXS5HZXRDbGFzcyhjbGFzc05hbWUpOworICAg
ICAgICBpZiAoaW50ZXJuYWxDbGFzcykgeworICAgICAgICAgICAgcmV0dXJuIGludGVybmFsQ2xh
c3M7CisgICAgICAgIH0KKyAgICAgICAgX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJMb2dnZXIiXS5XYXJuKGNsYXNzTmFtZSArICIgbm90IGZvdW5kLCB5b3UgbWF5IGhhdmUg
bWlzc2VkIGFuIGltcG9ydC4iKTsKKyAgICAgICAgdmFyIGFyciA9IGNsYXNzTmFtZS5zcGxpdCgi
LiIpOworICAgICAgICB2YXIgZm4gPSAod2luZG93IHx8IHRoaXMpOworICAgICAgICBmb3IgKHZh
ciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBm
biA9IGZuW2FycltpXV07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gImZ1
bmN0aW9uIikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZuOworICAgIH07CisgICAgLyoqCisgICAgICogVXNlIHRoaXMgb2JqZWN0IHRvIHJl
Z2lzdGVyIGV4dGVybmFsIGNsYXNzZXMgbGlrZSBjdXN0b20gdGV4dHVyZXMgb3IgbWF0ZXJpYWwK
KyAgICAgKiB0byBhbGxvdyB0aGUgbGFvZGVycyB0byBpbnN0YW50aWF0ZSB0aGVtCisgICAgICov
CisgICAgSW5zdGFudGlhdGlvblRvb2xzLlJlZ2lzdGVyZWRFeHRlcm5hbENsYXNzZXMgPSB7fTsK
KyAgICByZXR1cm4gSW5zdGFudGlhdGlvblRvb2xzOworfSgpKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NaXNjL2tocm9ub3NUZXh0dXJlQ29udGFpbmVyLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL2tocm9u
b3NUZXh0dXJlQ29udGFpbmVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEtocm9ub3NUZXh0dXJlQ29u
dGFpbmVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktocm9ub3NUZXh0
dXJlQ29udGFpbmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBLaHJvbm9zVGV4dHVyZUNvbnRhaW5l
cjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2xvZ2dl
ciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworCisvKioKKyAqIGZvciBkZXNjcmlwdGlvbiBzZWUg
aHR0cHM6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL3Rvb2xzL0tUWC8KKyAqIGZvciBm
aWxlIGxheW91dCBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL3Rvb2xz
L0tUWC9maWxlX2Zvcm1hdF9zcGVjLworICovCit2YXIgS2hyb25vc1RleHR1cmVDb250YWluZXIg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBh
IG5ldyBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lcgorICAgICAqIEBwYXJhbSBhcnJheUJ1ZmZlciBj
b250ZW50cyBvZiB0aGUgS1RYIGNvbnRhaW5lciBmaWxlCisgICAgICogQHBhcmFtIGZhY2VzRXhw
ZWN0ZWQgc2hvdWxkIGJlIGVpdGhlciAxIG9yIDYsIGJhc2VkIHdoZXRoZXIgYSBjdWJlIHRleHR1
cmUgb3Igb3IKKyAgICAgKiBAcGFyYW0gdGhyZWVERXhwZWN0ZWQgcHJvdmlzaW9uIGZvciBpbmRp
Y2F0aW5nIHRoYXQgZGF0YSBzaG91bGQgYmUgYSAzRCB0ZXh0dXJlLCBub3QgaW1wbGVtZW50ZWQK
KyAgICAgKiBAcGFyYW0gdGV4dHVyZUFycmF5RXhwZWN0ZWQgcHJvdmlzaW9uIGZvciBpbmRpY2F0
aW5nIHRoYXQgZGF0YSBzaG91bGQgYmUgYSB0ZXh0dXJlIGFycmF5LCBub3QgaW1wbGVtZW50ZWQK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lcigKKyAgICAvKiog
Y29udGVudHMgb2YgdGhlIEtUWCBjb250YWluZXIgZmlsZSAqLworICAgIGFycmF5QnVmZmVyLCBm
YWNlc0V4cGVjdGVkLCB0aHJlZURFeHBlY3RlZCwgdGV4dHVyZUFycmF5RXhwZWN0ZWQpIHsKKyAg
ICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGFycmF5QnVmZmVyOworICAgICAgICAvKioKKyAgICAg
ICAgICogSWYgdGhlIGNvbnRhaW5lciBoYXMgYmVlbiBtYWRlIGludmFsaWQgKGVnLiBjb25zdHJ1
Y3RvciBmYWlsZWQgdG8gY29ycmVjdGx5IGxvYWQgYXJyYXkgYnVmZmVyKQorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5pc0ludmFsaWQgPSBmYWxzZTsKKyAgICAgICAgLy8gVGVzdCB0aGF0IGl0
IGlzIGEga3R4IGZvcm1hdHRlZCBmaWxlLCBiYXNlZCBvbiB0aGUgZmlyc3QgMTIgYnl0ZXMsIGNo
YXJhY3RlciByZXByZXNlbnRhdGlvbiBpczoKKyAgICAgICAgLy8gJ++/vScsICdLJywgJ1QnLCAn
WCcsICcgJywgJzEnLCAnMScsICfvv70nLCAnXHInLCAnXG4nLCAnXHgxQScsICdcbicKKyAgICAg
ICAgLy8gMHhBQiwgMHg0QiwgMHg1NCwgMHg1OCwgMHgyMCwgMHgzMSwgMHgzMSwgMHhCQiwgMHgw
RCwgMHgwQSwgMHgxQSwgMHgwQQorICAgICAgICB2YXIgaWRlbnRpZmllciA9IG5ldyBVaW50OEFy
cmF5KHRoaXMuYXJyYXlCdWZmZXIsIDAsIDEyKTsKKyAgICAgICAgaWYgKGlkZW50aWZpZXJbMF0g
IT09IDB4QUIgfHwgaWRlbnRpZmllclsxXSAhPT0gMHg0QiB8fCBpZGVudGlmaWVyWzJdICE9PSAw
eDU0IHx8IGlkZW50aWZpZXJbM10gIT09IDB4NTggfHwgaWRlbnRpZmllcls0XSAhPT0gMHgyMCB8
fCBpZGVudGlmaWVyWzVdICE9PSAweDMxIHx8CisgICAgICAgICAgICBpZGVudGlmaWVyWzZdICE9
PSAweDMxIHx8IGlkZW50aWZpZXJbN10gIT09IDB4QkIgfHwgaWRlbnRpZmllcls4XSAhPT0gMHgw
RCB8fCBpZGVudGlmaWVyWzldICE9PSAweDBBIHx8IGlkZW50aWZpZXJbMTBdICE9PSAweDFBIHx8
IGlkZW50aWZpZXJbMTFdICE9PSAweDBBKSB7CisgICAgICAgICAgICB0aGlzLmlzSW52YWxpZCA9
IHRydWU7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTG9nZ2VyIl0uRXJyb3IoInRleHR1cmUgbWlzc2luZyBLVFggaWRlbnRpZmllciIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIGxvYWQgdGhlIHJlc2V0
IG9mIHRoZSBoZWFkZXIgaW4gbmF0aXZlIDMyIGJpdCB1aW50CisgICAgICAgIHZhciBkYXRhU2l6
ZSA9IFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UOworICAgICAgICB2YXIgaGVhZGVyRGF0
YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5hcnJheUJ1ZmZlciwgMTIsIDEzICogZGF0YVNpemUp
OworICAgICAgICB2YXIgZW5kaWFubmVzcyA9IGhlYWRlckRhdGFWaWV3LmdldFVpbnQzMigwLCB0
cnVlKTsKKyAgICAgICAgdmFyIGxpdHRsZUVuZGlhbiA9IGVuZGlhbm5lc3MgPT09IDB4MDQwMzAy
MDE7CisgICAgICAgIHRoaXMuZ2xUeXBlID0gaGVhZGVyRGF0YVZpZXcuZ2V0VWludDMyKDEgKiBk
YXRhU2l6ZSwgbGl0dGxlRW5kaWFuKTsgLy8gbXVzdCBiZSAwIGZvciBjb21wcmVzc2VkIHRleHR1
cmVzCisgICAgICAgIHRoaXMuZ2xUeXBlU2l6ZSA9IGhlYWRlckRhdGFWaWV3LmdldFVpbnQzMigy
ICogZGF0YVNpemUsIGxpdHRsZUVuZGlhbik7IC8vIG11c3QgYmUgMSBmb3IgY29tcHJlc3NlZCB0
ZXh0dXJlcworICAgICAgICB0aGlzLmdsRm9ybWF0ID0gaGVhZGVyRGF0YVZpZXcuZ2V0VWludDMy
KDMgKiBkYXRhU2l6ZSwgbGl0dGxlRW5kaWFuKTsgLy8gbXVzdCBiZSAwIGZvciBjb21wcmVzc2Vk
IHRleHR1cmVzCisgICAgICAgIHRoaXMuZ2xJbnRlcm5hbEZvcm1hdCA9IGhlYWRlckRhdGFWaWV3
LmdldFVpbnQzMig0ICogZGF0YVNpemUsIGxpdHRsZUVuZGlhbik7IC8vIHRoZSB2YWx1ZSBvZiBh
cmcgcGFzc2VkIHRvIGdsLmNvbXByZXNzZWRUZXhJbWFnZTJEKCwseCwsLCwpCisgICAgICAgIHRo
aXMuZ2xCYXNlSW50ZXJuYWxGb3JtYXQgPSBoZWFkZXJEYXRhVmlldy5nZXRVaW50MzIoNSAqIGRh
dGFTaXplLCBsaXR0bGVFbmRpYW4pOyAvLyBzcGVjaWZ5IEdMX1JHQiwgR0xfUkdCQSwgR0xfQUxQ
SEEsIGV0YyAodW4tY29tcHJlc3NlZCBvbmx5KQorICAgICAgICB0aGlzLnBpeGVsV2lkdGggPSBo
ZWFkZXJEYXRhVmlldy5nZXRVaW50MzIoNiAqIGRhdGFTaXplLCBsaXR0bGVFbmRpYW4pOyAvLyBs
ZXZlbCAwIHZhbHVlIG9mIGFyZyBwYXNzZWQgdG8gZ2wuY29tcHJlc3NlZFRleEltYWdlMkQoLCws
eCwsLCkKKyAgICAgICAgdGhpcy5waXhlbEhlaWdodCA9IGhlYWRlckRhdGFWaWV3LmdldFVpbnQz
Mig3ICogZGF0YVNpemUsIGxpdHRsZUVuZGlhbik7IC8vIGxldmVsIDAgdmFsdWUgb2YgYXJnIHBh
c3NlZCB0byBnbC5jb21wcmVzc2VkVGV4SW1hZ2UyRCgsLCwseCwsKQorICAgICAgICB0aGlzLnBp
eGVsRGVwdGggPSBoZWFkZXJEYXRhVmlldy5nZXRVaW50MzIoOCAqIGRhdGFTaXplLCBsaXR0bGVF
bmRpYW4pOyAvLyBsZXZlbCAwIHZhbHVlIG9mIGFyZyBwYXNzZWQgdG8gZ2wuY29tcHJlc3NlZFRl
eEltYWdlM0QoLCwsLCx4LCwpCisgICAgICAgIHRoaXMubnVtYmVyT2ZBcnJheUVsZW1lbnRzID0g
aGVhZGVyRGF0YVZpZXcuZ2V0VWludDMyKDkgKiBkYXRhU2l6ZSwgbGl0dGxlRW5kaWFuKTsgLy8g
dXNlZCBmb3IgdGV4dHVyZSBhcnJheXMKKyAgICAgICAgdGhpcy5udW1iZXJPZkZhY2VzID0gaGVh
ZGVyRGF0YVZpZXcuZ2V0VWludDMyKDEwICogZGF0YVNpemUsIGxpdHRsZUVuZGlhbik7IC8vIHVz
ZWQgZm9yIGN1YmVtYXAgdGV4dHVyZXMsIHNob3VsZCBlaXRoZXIgYmUgMSBvciA2CisgICAgICAg
IHRoaXMubnVtYmVyT2ZNaXBtYXBMZXZlbHMgPSBoZWFkZXJEYXRhVmlldy5nZXRVaW50MzIoMTEg
KiBkYXRhU2l6ZSwgbGl0dGxlRW5kaWFuKTsgLy8gbnVtYmVyIG9mIGxldmVsczsgZGlzcmVnYXJk
IHBvc3NpYmlsaXR5IG9mIDAgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKKyAgICAgICAgdGhpcy5i
eXRlc09mS2V5VmFsdWVEYXRhID0gaGVhZGVyRGF0YVZpZXcuZ2V0VWludDMyKDEyICogZGF0YVNp
emUsIGxpdHRsZUVuZGlhbik7IC8vIHRoZSBhbW91bnQgb2Ygc3BhY2UgYWZ0ZXIgdGhlIGhlYWRl
ciBmb3IgbWV0YS1kYXRhCisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgY29tcHJlc3Nl
ZCB0eXBlLiAgTm90IG9ubHkgcmVkdWNlcyB3b3JrLCBidXQgcHJvYmFibHkgYmV0dGVyIHRvIGxl
dCBkZXYga25vdyB0aGV5IGFyZSBub3QgY29tcHJlc3NpbmcuCisgICAgICAgIGlmICh0aGlzLmds
VHlwZSAhPT0gMCkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkxvZ2dlciJdLkVycm9yKCJvbmx5IGNvbXByZXNzZWQgZm9ybWF0cyBjdXJy
ZW50bHkgc3VwcG9ydGVkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAvLyB2YWx1ZSBvZiB6ZXJvIGlzIGFuIGluZGljYXRpb24g
dG8gZ2VuZXJhdGUgbWlwbWFwcyBAIHJ1bnRpbWUuICBOb3QgdXN1YWxseSBhbGxvd2VkIGZvciBj
b21wcmVzc2VkLCBzbyBkaXNyZWdhcmQuCisgICAgICAgICAgICB0aGlzLm51bWJlck9mTWlwbWFw
TGV2ZWxzID0gTWF0aC5tYXgoMSwgdGhpcy5udW1iZXJPZk1pcG1hcExldmVscyk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMucGl4ZWxIZWlnaHQgPT09IDAgfHwgdGhpcy5waXhlbERlcHRo
ICE9PSAwKSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTG9nZ2VyIl0uRXJyb3IoIm9ubHkgMkQgdGV4dHVyZXMgY3VycmVudGx5IHN1cHBv
cnRlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
Lm51bWJlck9mQXJyYXlFbGVtZW50cyAhPT0gMCkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLkVycm9yKCJ0ZXh0dXJlIGFy
cmF5cyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLm51bWJlck9mRmFjZXMgIT09IGZhY2VzRXhwZWN0ZWQp
IHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJMb2dnZXIiXS5FcnJvcigibnVtYmVyIG9mIGZhY2VzIGV4cGVjdGVkIiArIGZhY2VzRXhwZWN0
ZWQgKyAiLCBidXQgZm91bmQgIiArIHRoaXMubnVtYmVyT2ZGYWNlcyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gd2Ugbm93IGhhdmUgYSBjb21wbGV0ZWx5IHZh
bGlkYXRlZCBmaWxlLCBzbyBjb3VsZCB1c2UgZXhpc3RlbmNlIG9mIGxvYWRUeXBlIGFzIHN1Y2Nl
c3MKKyAgICAgICAgLy8gd291bGQgbmVlZCB0byBtYWtlIHRoaXMgbW9yZSBlbGFib3JhdGUgJiBh
ZGp1c3QgY2hlY2tzIGFib3ZlIHRvIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBsb2FkIHR5cGUKKyAg
ICAgICAgdGhpcy5sb2FkVHlwZSA9IEtocm9ub3NUZXh0dXJlQ29udGFpbmVyLkNPTVBSRVNTRURf
MkQ7CisgICAgfQorICAgIC8qKgorICAgICAqIFVwbG9hZHMgS1RYIGNvbnRlbnQgdG8gYSBCYWJ5
bG9uIFRleHR1cmUuCisgICAgICogSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB0ZXh0dXJlIGhhcyBh
bHJlYWR5IGJlZW4gY3JlYXRlZCAmIGlzIGN1cnJlbnRseSBib3VuZAorICAgICAqIEBoaWRkZW4K
KyAgICAgKi8KKyAgICBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lci5wcm90b3R5cGUudXBsb2FkTGV2
ZWxzID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvYWRNaXBtYXBzKSB7CisgICAgICAgIHN3aXRjaCAo
dGhpcy5sb2FkVHlwZSkgeworICAgICAgICAgICAgY2FzZSBLaHJvbm9zVGV4dHVyZUNvbnRhaW5l
ci5DT01QUkVTU0VEXzJEOgorICAgICAgICAgICAgICAgIHRoaXMuX3VwbG9hZDJEQ29tcHJlc3Nl
ZExldmVscyh0ZXh0dXJlLCBsb2FkTWlwbWFwcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEtocm9ub3NUZXh0dXJlQ29udGFpbmVyLlRFWF8yRDoKKyAgICAgICAg
ICAgIGNhc2UgS2hyb25vc1RleHR1cmVDb250YWluZXIuQ09NUFJFU1NFRF8zRDoKKyAgICAgICAg
ICAgIGNhc2UgS2hyb25vc1RleHR1cmVDb250YWluZXIuVEVYXzNEOgorICAgICAgICB9CisgICAg
fTsKKyAgICBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lci5wcm90b3R5cGUuX3VwbG9hZDJEQ29tcHJl
c3NlZExldmVscyA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBsb2FkTWlwbWFwcykgeworICAgICAgICAv
LyBpbml0aWFsaXplIHdpZHRoICYgaGVpZ2h0IGZvciBsZXZlbCAxCisgICAgICAgIHZhciBkYXRh
T2Zmc2V0ID0gS2hyb25vc1RleHR1cmVDb250YWluZXIuSEVBREVSX0xFTiArIHRoaXMuYnl0ZXNP
ZktleVZhbHVlRGF0YTsKKyAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5waXhlbFdpZHRoOworICAg
ICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5waXhlbEhlaWdodDsKKyAgICAgICAgdmFyIG1pcG1hcENv
dW50ID0gbG9hZE1pcG1hcHMgPyB0aGlzLm51bWJlck9mTWlwbWFwTGV2ZWxzIDogMTsKKyAgICAg
ICAgZm9yICh2YXIgbGV2ZWwgPSAwOyBsZXZlbCA8IG1pcG1hcENvdW50OyBsZXZlbCsrKSB7Cisg
ICAgICAgICAgICB2YXIgaW1hZ2VTaXplID0gbmV3IEludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZl
ciwgZGF0YU9mZnNldCwgMSlbMF07IC8vIHNpemUgcGVyIGZhY2UsIHNpbmNlIG5vdCBzdXBwb3J0
aW5nIGFycmF5IGN1YmVtYXBzCisgICAgICAgICAgICBkYXRhT2Zmc2V0ICs9IDQ7IC8vaW1hZ2Ug
ZGF0YSBzdGFydHMgZnJvbSBuZXh0IG11bHRpcGxlIG9mIDQgb2Zmc2V0LiBFYWNoIGZhY2UgcmVm
ZXJzIHRvIHNhbWUgaW1hZ2VzaXplIGZpZWxkIGFib3ZlLgorICAgICAgICAgICAgZm9yICh2YXIg
ZmFjZSA9IDA7IGZhY2UgPCB0aGlzLm51bWJlck9mRmFjZXM7IGZhY2UrKykgeworICAgICAgICAg
ICAgICAgIHZhciBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyLCBk
YXRhT2Zmc2V0LCBpbWFnZVNpemUpOworICAgICAgICAgICAgICAgIHZhciBlbmdpbmUgPSB0ZXh0
dXJlLmdldEVuZ2luZSgpOworICAgICAgICAgICAgICAgIGVuZ2luZS5fdXBsb2FkQ29tcHJlc3Nl
ZERhdGFUb1RleHR1cmVEaXJlY3RseSh0ZXh0dXJlLCB0aGlzLmdsSW50ZXJuYWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGJ5dGVBcnJheSwgZmFjZSwgbGV2ZWwpOworICAgICAgICAgICAgICAgIGRh
dGFPZmZzZXQgKz0gaW1hZ2VTaXplOyAvLyBhZGQgc2l6ZSBvZiB0aGUgaW1hZ2UgZm9yIHRoZSBu
ZXh0IGZhY2UvbWlwbWFwCisgICAgICAgICAgICAgICAgZGF0YU9mZnNldCArPSAzIC0gKChpbWFn
ZVNpemUgKyAzKSAlIDQpOyAvLyBhZGQgcGFkZGluZyBmb3Igb2RkIHNpemVkIGltYWdlCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KDEuMCwgd2lkdGggKiAwLjUp
OworICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoMS4wLCBoZWlnaHQgKiAwLjUpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lci5IRUFERVJfTEVOID0g
MTIgKyAoMTMgKiA0KTsgLy8gaWRlbnRpZmllciArIGhlYWRlciBlbGVtZW50cyAobm90IGluY2x1
ZGluZyBrZXkgdmFsdWUgbWV0YS1kYXRhIHBhaXJzKQorICAgIC8vIGxvYWQgdHlwZXMKKyAgICBL
aHJvbm9zVGV4dHVyZUNvbnRhaW5lci5DT01QUkVTU0VEXzJEID0gMDsgLy8gdXNlcyBhIGdsLmNv
bXByZXNzZWRUZXhJbWFnZTJEKCkKKyAgICBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lci5DT01QUkVT
U0VEXzNEID0gMTsgLy8gdXNlcyBhIGdsLmNvbXByZXNzZWRUZXhJbWFnZTNEKCkKKyAgICBLaHJv
bm9zVGV4dHVyZUNvbnRhaW5lci5URVhfMkQgPSAyOyAvLyB1c2VzIGEgZ2wudGV4SW1hZ2UyRCgp
CisgICAgS2hyb25vc1RleHR1cmVDb250YWluZXIuVEVYXzNEID0gMzsgLy8gdXNlcyBhIGdsLnRl
eEltYWdlM0QoKQorICAgIHJldHVybiBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lcjsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9sb2FkRmlsZUVycm9yLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvbG9hZEZpbGVF
cnJvci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IExvYWRGaWxlRXJyb3IgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTG9hZEZpbGVFcnJvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTG9hZEZpbGVF
cnJvcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2Rl
X21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisKKy8qKgorICogQGlnbm9yZQorICogQXBw
bGljYXRpb24gZXJyb3IgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHdoZW4gbG9h
ZGluZyBhIGZpbGUKKyAqLwordmFyIExvYWRGaWxlRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oTG9hZEZpbGVFcnJvciwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IExvYWRGaWxlRXJyb3IKKyAgICAgKiBAcGFyYW0gbWVzc2FnZSBkZWZpbmVzIHRo
ZSBtZXNzYWdlIG9mIHRoZSBlcnJvcgorICAgICAqIEBwYXJhbSByZXF1ZXN0IGRlZmluZXMgdGhl
IG9wdGlvbmFsIHdlYiByZXF1ZXN0CisgICAgICovCisgICAgZnVuY3Rpb24gTG9hZEZpbGVFcnJv
cihtZXNzYWdlLCAKKyAgICAvKiogZGVmaW5lcyB0aGUgb3B0aW9uYWwgd2ViIHJlcXVlc3QgKi8K
KyAgICByZXF1ZXN0KSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1l
c3NhZ2UpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlcXVlc3QgPSByZXF1ZXN0OworICAgICAg
ICBfdGhpcy5uYW1lID0gIkxvYWRGaWxlRXJyb3IiOworICAgICAgICBMb2FkRmlsZUVycm9yLl9z
ZXRQcm90b3R5cGVPZihfdGhpcywgTG9hZEZpbGVFcnJvci5wcm90b3R5cGUpOworICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8vIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29t
L3F1ZXN0aW9ucy8xMjkxNTQxMi9ob3ctZG8taS1leHRlbmQtYS1ob3N0LW9iamVjdC1lLWctZXJy
b3ItaW4tdHlwZXNjcmlwdAorICAgIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0
L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlr
ZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29yaworICAgIC8vIFBvbHlmaWxs
IGZvciBPYmplY3Quc2V0UHJvdG90eXBlT2YgaWYgbmVjZXNzYXJ5LgorICAgIExvYWRGaWxlRXJy
b3IuX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IChmdW5jdGlvbiAo
bywgcHJvdG8pIHsgby5fX3Byb3RvX18gPSBwcm90bzsgcmV0dXJuIG87IH0pOworICAgIHJldHVy
biBMb2FkRmlsZUVycm9yOworfShFcnJvcikpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L01pc2MvbG9nZ2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTWlzYy9sb2dnZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IExvZ2dlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJMb2dnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIExvZ2dlcjsgfSk7CisvKioKKyAq
IExvZ2dlciB1c2VkIHRocm91Z291aHQgdGhlIGFwcGxpY2F0aW9uIHRvIGFsbG93IGNvbmZpZ3Vy
YXRpb24gb2YKKyAqIHRoZSBsb2cgbGV2ZWwgcmVxdWlyZWQgZm9yIHRoZSBtZXNzYWdlcy4KKyAq
LwordmFyIExvZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlv
biBMb2dnZXIoKSB7CisgICAgfQorICAgIExvZ2dlci5fQWRkTG9nRW50cnkgPSBmdW5jdGlvbiAo
ZW50cnkpIHsKKyAgICAgICAgTG9nZ2VyLl9Mb2dDYWNoZSA9IGVudHJ5ICsgTG9nZ2VyLl9Mb2dD
YWNoZTsKKyAgICAgICAgaWYgKExvZ2dlci5Pbk5ld0NhY2hlRW50cnkpIHsKKyAgICAgICAgICAg
IExvZ2dlci5Pbk5ld0NhY2hlRW50cnkoZW50cnkpOworICAgICAgICB9CisgICAgfTsKKyAgICBM
b2dnZXIuX0Zvcm1hdE1lc3NhZ2UgPSBmdW5jdGlvbiAobWVzc2FnZSkgeworICAgICAgICB2YXIg
cGFkU3RyID0gZnVuY3Rpb24gKGkpIHsgcmV0dXJuIChpIDwgMTApID8gIjAiICsgaSA6ICIiICsg
aTsgfTsKKyAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOworICAgICAgICByZXR1cm4gIlsi
ICsgcGFkU3RyKGRhdGUuZ2V0SG91cnMoKSkgKyAiOiIgKyBwYWRTdHIoZGF0ZS5nZXRNaW51dGVz
KCkpICsgIjoiICsgcGFkU3RyKGRhdGUuZ2V0U2Vjb25kcygpKSArICJdOiAiICsgbWVzc2FnZTsK
KyAgICB9OworICAgIExvZ2dlci5fTG9nRGlzYWJsZWQgPSBmdW5jdGlvbiAobWVzc2FnZSkgewor
ICAgICAgICAvLyBub3RoaW5nIHRvIGRvCisgICAgfTsKKyAgICBMb2dnZXIuX0xvZ0VuYWJsZWQg
PSBmdW5jdGlvbiAobWVzc2FnZSkgeworICAgICAgICB2YXIgZm9ybWF0dGVkTWVzc2FnZSA9IExv
Z2dlci5fRm9ybWF0TWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgY29uc29sZS5sb2coIkJKUyAt
ICIgKyBmb3JtYXR0ZWRNZXNzYWdlKTsKKyAgICAgICAgdmFyIGVudHJ5ID0gIjxkaXYgc3R5bGU9
J2NvbG9yOndoaXRlJz4iICsgZm9ybWF0dGVkTWVzc2FnZSArICI8L2Rpdj48YnI+IjsKKyAgICAg
ICAgTG9nZ2VyLl9BZGRMb2dFbnRyeShlbnRyeSk7CisgICAgfTsKKyAgICBMb2dnZXIuX1dhcm5E
aXNhYmxlZCA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7CisgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8K
KyAgICB9OworICAgIExvZ2dlci5fV2FybkVuYWJsZWQgPSBmdW5jdGlvbiAobWVzc2FnZSkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTWVzc2FnZSA9IExvZ2dlci5fRm9ybWF0TWVzc2FnZShtZXNz
YWdlKTsKKyAgICAgICAgY29uc29sZS53YXJuKCJCSlMgLSAiICsgZm9ybWF0dGVkTWVzc2FnZSk7
CisgICAgICAgIHZhciBlbnRyeSA9ICI8ZGl2IHN0eWxlPSdjb2xvcjpvcmFuZ2UnPiIgKyBmb3Jt
YXR0ZWRNZXNzYWdlICsgIjwvZGl2Pjxicj4iOworICAgICAgICBMb2dnZXIuX0FkZExvZ0VudHJ5
KGVudHJ5KTsKKyAgICB9OworICAgIExvZ2dlci5fRXJyb3JEaXNhYmxlZCA9IGZ1bmN0aW9uICht
ZXNzYWdlKSB7CisgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8KKyAgICB9OworICAgIExvZ2dlci5f
RXJyb3JFbmFibGVkID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHsKKyAgICAgICAgTG9nZ2VyLmVycm9y
c0NvdW50Kys7CisgICAgICAgIHZhciBmb3JtYXR0ZWRNZXNzYWdlID0gTG9nZ2VyLl9Gb3JtYXRN
ZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICBjb25zb2xlLmVycm9yKCJCSlMgLSAiICsgZm9ybWF0
dGVkTWVzc2FnZSk7CisgICAgICAgIHZhciBlbnRyeSA9ICI8ZGl2IHN0eWxlPSdjb2xvcjpyZWQn
PiIgKyBmb3JtYXR0ZWRNZXNzYWdlICsgIjwvZGl2Pjxicj4iOworICAgICAgICBMb2dnZXIuX0Fk
ZExvZ0VudHJ5KGVudHJ5KTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2dn
ZXIsICJMb2dDYWNoZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgY3VycmVudCBs
b2cgY2FjaGUgKGxpc3Qgb2YgbG9ncykKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIExvZ2dlci5fTG9nQ2FjaGU7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIC8qKgorICAgICAqIENsZWFycyB0aGUgbG9nIGNhY2hlCisgICAgICovCisg
ICAgTG9nZ2VyLkNsZWFyTG9nQ2FjaGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIExvZ2dlci5f
TG9nQ2FjaGUgPSAiIjsKKyAgICAgICAgTG9nZ2VyLmVycm9yc0NvdW50ID0gMDsKKyAgICB9Owor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2dnZXIsICJMb2dMZXZlbHMiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGxvZyBsZXZlbCAoTWVzc2FnZUxvZ0xl
dmVsIC8gV2FybmluZ0xvZ0xldmVsIC8gRXJyb3JMb2dMZXZlbCkKKyAgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKGxldmVsKSB7CisgICAgICAgICAgICBpZiAoKGxldmVsICYgTG9n
Z2VyLk1lc3NhZ2VMb2dMZXZlbCkgPT09IExvZ2dlci5NZXNzYWdlTG9nTGV2ZWwpIHsKKyAgICAg
ICAgICAgICAgICBMb2dnZXIuTG9nID0gTG9nZ2VyLl9Mb2dFbmFibGVkOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgTG9nZ2VyLkxvZyA9IExvZ2dl
ci5fTG9nRGlzYWJsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGxldmVsICYg
TG9nZ2VyLldhcm5pbmdMb2dMZXZlbCkgPT09IExvZ2dlci5XYXJuaW5nTG9nTGV2ZWwpIHsKKyAg
ICAgICAgICAgICAgICBMb2dnZXIuV2FybiA9IExvZ2dlci5fV2FybkVuYWJsZWQ7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBMb2dnZXIuV2FybiA9
IExvZ2dlci5fV2FybkRpc2FibGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChs
ZXZlbCAmIExvZ2dlci5FcnJvckxvZ0xldmVsKSA9PT0gTG9nZ2VyLkVycm9yTG9nTGV2ZWwpIHsK
KyAgICAgICAgICAgICAgICBMb2dnZXIuRXJyb3IgPSBMb2dnZXIuX0Vycm9yRW5hYmxlZDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIExvZ2dlci5F
cnJvciA9IExvZ2dlci5fRXJyb3JEaXNhYmxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLyoqCisgICAgICogTm8gbG9nCisgICAgICovCisgICAgTG9nZ2VyLk5vbmVM
b2dMZXZlbCA9IDA7CisgICAgLyoqCisgICAgICogT25seSBtZXNzYWdlIGxvZ3MKKyAgICAgKi8K
KyAgICBMb2dnZXIuTWVzc2FnZUxvZ0xldmVsID0gMTsKKyAgICAvKioKKyAgICAgKiBPbmx5IHdh
cm5pbmcgbG9ncworICAgICAqLworICAgIExvZ2dlci5XYXJuaW5nTG9nTGV2ZWwgPSAyOworICAg
IC8qKgorICAgICAqIE9ubHkgZXJyb3IgbG9ncworICAgICAqLworICAgIExvZ2dlci5FcnJvckxv
Z0xldmVsID0gNDsKKyAgICAvKioKKyAgICAgKiBBbGwgbG9ncworICAgICAqLworICAgIExvZ2dl
ci5BbGxMb2dMZXZlbCA9IDc7CisgICAgTG9nZ2VyLl9Mb2dDYWNoZSA9ICIiOworICAgIC8qKgor
ICAgICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgbG9hZGluZyBlcnJv
cnMKKyAgICAgKiBAaWdub3JlbmFtaW5nCisgICAgICovCisgICAgTG9nZ2VyLmVycm9yc0NvdW50
ID0gMDsKKyAgICAvKioKKyAgICAgKiBMb2cgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlCisgICAg
ICovCisgICAgTG9nZ2VyLkxvZyA9IExvZ2dlci5fTG9nRW5hYmxlZDsKKyAgICAvKioKKyAgICAg
KiBXcml0ZSBhIHdhcm5pbmcgbWVzc2FnZSB0byB0aGUgY29uc29sZQorICAgICAqLworICAgIExv
Z2dlci5XYXJuID0gTG9nZ2VyLl9XYXJuRW5hYmxlZDsKKyAgICAvKioKKyAgICAgKiBXcml0ZSBh
biBlcnJvciBtZXNzYWdlIHRvIHRoZSBjb25zb2xlCisgICAgICovCisgICAgTG9nZ2VyLkVycm9y
ID0gTG9nZ2VyLl9FcnJvckVuYWJsZWQ7CisgICAgcmV0dXJuIExvZ2dlcjsKK30oKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9tZXNoRXhwbG9kZXIudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL21lc2hFeHBsb2Rlci50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogTWVzaEV4cGxvZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk1lc2hFeHBsb2RlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWVzaEV4cGxvZGVyOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgu
dmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisKKy8qKgorICogQ2xhc3MgdXNl
ZCB0byBleHBsb2RlIG1lc2hlcyAoaWUuIHRvIGhhdmUgYSBjZW50ZXIgYW5kIG1vdmUgdGhlbSBh
d2F5IGZyb20gdGhhdCBjZW50ZXIgdG8gYmV0dGVyIHNlZSB0aGUgb3ZlcmFsbCBvcmdhbml6YXRp
b24pCisgKi8KK3ZhciBNZXNoRXhwbG9kZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgLyoqCisgICAgICogRXhwbG9kZXMgbWVzaGVzIGZyb20gYSBjZW50ZXIgbWVzaC4KKyAg
ICAgKiBAcGFyYW0gbWVzaGVzIFRoZSBtZXNoZXMgdG8gZXhwbG9kZS4KKyAgICAgKiBAcGFyYW0g
Y2VudGVyTWVzaCBUaGUgbWVzaCB0byBiZSBjZW50ZXIgb2YgZXhwbG9zaW9uLgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIE1lc2hFeHBsb2RlcihtZXNoZXMsIGNlbnRlck1lc2gpIHsKKyAgICAgICAg
dGhpcy5fbWVzaGVzT3JpZ2lucyA9IFtdOworICAgICAgICB0aGlzLl90b0NlbnRlclZlY3RvcnMg
PSBbXTsKKyAgICAgICAgdGhpcy5fc2NhbGVkRGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAg
IHRoaXMuX25ld1Bvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2NlbnRlclBvc2l0
aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX21lc2hlcyA9IG1lc2hlcy5zbGljZSgpOwor
ICAgICAgICBpZiAoY2VudGVyTWVzaCkgeworICAgICAgICAgICAgdGhpcy5fY2VudGVyTWVzaCA9
IGNlbnRlck1lc2g7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlz
Ll9zZXRDZW50ZXJNZXNoKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNlbnRlck1lc2hJbmRl
eCA9IHRoaXMuX21lc2hlcy5pbmRleE9mKHRoaXMuX2NlbnRlck1lc2gpOworICAgICAgICBpZiAo
Y2VudGVyTWVzaEluZGV4ID49IDApIHsKKyAgICAgICAgICAgIHRoaXMuX21lc2hlcy5zcGxpY2Uo
Y2VudGVyTWVzaEluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jZW50ZXJQb3Np
dGlvbiA9IHRoaXMuX2NlbnRlck1lc2guZ2V0QWJzb2x1dGVQb3NpdGlvbigpLmNsb25lKCk7Cisg
ICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9tZXNoZXMubGVuZ3RoOyBp
bmRleCsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fbWVzaGVzW2luZGV4XSkgeworICAgICAg
ICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fbWVzaGVzW2luZGV4XTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9tZXNoZXNPcmlnaW5zW2luZGV4XSA9IG1lc2guZ2V0QWJzb2x1dGVQb3NpdGlvbigp
LmNsb25lKCk7CisgICAgICAgICAgICAgICAgdGhpcy5fdG9DZW50ZXJWZWN0b3JzW2luZGV4XSA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0uWmVybygpOworICAgICAgICAgICAgICAgIGlmIChtZXNoLl9ib3VuZGluZ0luZm8gJiYgdGhp
cy5fY2VudGVyTWVzaC5fYm91bmRpbmdJbmZvKSB7CisgICAgICAgICAgICAgICAgICAgIG1lc2gu
X2JvdW5kaW5nSW5mby5ib3VuZGluZ0JveC5jZW50ZXJXb3JsZC5zdWJ0cmFjdFRvUmVmKHRoaXMu
X2NlbnRlck1lc2guX2JvdW5kaW5nSW5mby5ib3VuZGluZ0JveC5jZW50ZXJXb3JsZCwgdGhpcy5f
dG9DZW50ZXJWZWN0b3JzW2luZGV4XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIE1lc2hFeHBsb2Rlci5wcm90b3R5cGUuX3NldENlbnRl
ck1lc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBhdmVyYWdlQ2VudGVyID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIHZhciB0b3RhbENlbnRlcnMgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgdmFyIHNo
b3J0ZXN0VG9DZW50ZXIgPSBOdW1iZXIuTUFYX1ZBTFVFOworICAgICAgICBmb3IgKHZhciBpbmRl
eCA9IDA7IGluZGV4IDwgdGhpcy5fbWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX21lc2hlc1tpbmRleF0pIHsKKyAgICAgICAgICAgICAgICB2YXIgbWVzaCA9
IHRoaXMuX21lc2hlc1tpbmRleF07CisgICAgICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9
IG1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICAgICAgaWYgKGJvdW5kaW5nSW5m
bykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENlbnRlcnMuYWRkSW5QbGFjZShib3VuZGlu
Z0luZm8uYm91bmRpbmdCb3guY2VudGVyV29ybGQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhdmVyYWdlQ2VudGVyID0gdG90YWxDZW50ZXJz
LnNjYWxlKDEgLyB0aGlzLl9tZXNoZXMubGVuZ3RoKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IHRoaXMuX21lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9tZXNoZXNbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSB0
aGlzLl9tZXNoZXNbaW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBib3VuZGluZ0luZm8gPSBt
ZXNoLmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICAgICAgICAgIGlmIChib3VuZGluZ0luZm8p
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlVG9DZW50ZXIgPSBib3VuZGluZ0lu
Zm8uYm91bmRpbmdCb3guY2VudGVyV29ybGQuc3VidHJhY3QoYXZlcmFnZUNlbnRlcikubGVuZ3Ro
U3F1YXJlZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2VUb0NlbnRlciA8IHNo
b3J0ZXN0VG9DZW50ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NlbnRlck1l
c2ggPSBtZXNoOworICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRlc3RUb0NlbnRlciA9IGRp
c3RhbmNlVG9DZW50ZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCBj
bGFzcyBuYW1lCisgICAgICogQHJldHVybnMgIk1lc2hFeHBsb2RlciIKKyAgICAgKi8KKyAgICBN
ZXNoRXhwbG9kZXIucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICJNZXNoRXhwbG9kZXIiOworICAgIH07CisgICAgLyoqCisgICAgICogIkV4cGxv
ZGVkIG1lc2hlcyIKKyAgICAgKiBAcmV0dXJucyBBcnJheSBvZiBtZXNoZXMgd2l0aCB0aGUgY2Vu
dGVyTWVzaCBhdCBpbmRleCAwLgorICAgICAqLworICAgIE1lc2hFeHBsb2Rlci5wcm90b3R5cGUu
Z2V0TWVzaGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbWVzaEFycmF5ID0gdGhpcy5f
bWVzaGVzLnNsaWNlKCk7CisgICAgICAgIG1lc2hBcnJheS51bnNoaWZ0KHRoaXMuX2NlbnRlck1l
c2gpOworICAgICAgICByZXR1cm4gbWVzaEFycmF5OworICAgIH07CisgICAgLyoqCisgICAgICog
RXhwbG9kZXMgbWVzaGVzIGdpdmluZyBhIHNwZWNpZmljIGRpcmVjdGlvbgorICAgICAqIEBwYXJh
bSBkaXJlY3Rpb24gTnVtYmVyIHRvIG11bHRpcGx5IGRpc3RhbmNlIG9mIGVhY2ggbWVzaCdzIG9y
aWdpbiBmcm9tIGNlbnRlci4gVXNlIGEgbmVnYXRpdmUgbnVtYmVyIHRvIGltcGxvZGUsIG9yIHpl
cm8gdG8gcmVzZXQuCisgICAgICovCisgICAgTWVzaEV4cGxvZGVyLnByb3RvdHlwZS5leHBsb2Rl
ID0gZnVuY3Rpb24gKGRpcmVjdGlvbikgeworICAgICAgICBpZiAoZGlyZWN0aW9uID09PSB2b2lk
IDApIHsgZGlyZWN0aW9uID0gMS4wOyB9CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCB0aGlzLl9tZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBpZiAodGhp
cy5fbWVzaGVzW2luZGV4XSAmJiB0aGlzLl9tZXNoZXNPcmlnaW5zW2luZGV4XSAmJiB0aGlzLl90
b0NlbnRlclZlY3RvcnNbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdG9DZW50ZXJW
ZWN0b3JzW2luZGV4XS5zY2FsZVRvUmVmKGRpcmVjdGlvbiwgdGhpcy5fc2NhbGVkRGlyZWN0aW9u
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9tZXNoZXNPcmlnaW5zW2luZGV4XS5hZGRUb1JlZih0
aGlzLl9zY2FsZWREaXJlY3Rpb24sIHRoaXMuX25ld1Bvc2l0aW9uKTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9tZXNoZXNbaW5kZXhdLnNldEFic29sdXRlUG9zaXRpb24odGhpcy5fbmV3UG9zaXRp
b24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2NlbnRlck1lc2gu
c2V0QWJzb2x1dGVQb3NpdGlvbih0aGlzLl9jZW50ZXJQb3NpdGlvbik7CisgICAgfTsKKyAgICBy
ZXR1cm4gTWVzaEV4cGxvZGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9N
aXNjL29ic2VydmFibGUudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vTWlzYy9vYnNlcnZhYmxlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRXZlbnRTdGF0ZSwgT2JzZXJ2ZXIsIE11
bHRpT2JzZXJ2ZXIsIE9ic2VydmFibGUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRXZlbnRTdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRXZlbnRTdGF0ZTsgfSk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJPYnNlcnZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gT2JzZXJ2ZXI7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTXVsdGlPYnNlcnZlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gTXVsdGlPYnNlcnZlcjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPYnNlcnZhYmxlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBPYnNlcnZhYmxlOyB9KTsKKy8qKgorICogQSBjbGFzcyBzZXJ2ZXMg
YXMgYSBtZWRpdW0gYmV0d2VlbiB0aGUgb2JzZXJ2YWJsZSBhbmQgaXRzIG9ic2VydmVycworICov
Cit2YXIgRXZlbnRTdGF0ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGUgYSBuZXcgRXZlbnRTdGF0ZQorICAgICAqIEBwYXJhbSBtYXNrIGRlZmlu
ZXMgdGhlIG1hc2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3RhdGUKKyAgICAgKiBAcGFyYW0gc2tp
cE5leHRPYnNlcnZlcnMgZGVmaW5lcyBhIGZsYWcgd2hpY2ggd2lsbCBpbnN0cnVjdCB0aGUgb2Jz
ZXJ2YWJsZSB0byBza2lwIGZvbGxvd2luZyBvYnNlcnZlcnMgd2hlbiBzZXQgdG8gdHJ1ZQorICAg
ICAqIEBwYXJhbSB0YXJnZXQgZGVmaW5lcyB0aGUgb3JpZ2luYWwgdGFyZ2V0IG9mIHRoZSBzdGF0
ZQorICAgICAqIEBwYXJhbSBjdXJyZW50VGFyZ2V0IGRlZmluZXMgdGhlIGN1cnJlbnQgdGFyZ2V0
IG9mIHRoZSBzdGF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIEV2ZW50U3RhdGUobWFzaywgc2tp
cE5leHRPYnNlcnZlcnMsIHRhcmdldCwgY3VycmVudFRhcmdldCkgeworICAgICAgICBpZiAoc2tp
cE5leHRPYnNlcnZlcnMgPT09IHZvaWQgMCkgeyBza2lwTmV4dE9ic2VydmVycyA9IGZhbHNlOyB9
CisgICAgICAgIHRoaXMuaW5pdGFsaXplKG1hc2ssIHNraXBOZXh0T2JzZXJ2ZXJzLCB0YXJnZXQs
IGN1cnJlbnRUYXJnZXQpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplIHRoZSBj
dXJyZW50IGV2ZW50IHN0YXRlCisgICAgICogQHBhcmFtIG1hc2sgZGVmaW5lcyB0aGUgbWFzayBh
c3NvY2lhdGVkIHdpdGggdGhpcyBzdGF0ZQorICAgICAqIEBwYXJhbSBza2lwTmV4dE9ic2VydmVy
cyBkZWZpbmVzIGEgZmxhZyB3aGljaCB3aWxsIGluc3RydWN0IHRoZSBvYnNlcnZhYmxlIHRvIHNr
aXAgZm9sbG93aW5nIG9ic2VydmVycyB3aGVuIHNldCB0byB0cnVlCisgICAgICogQHBhcmFtIHRh
cmdldCBkZWZpbmVzIHRoZSBvcmlnaW5hbCB0YXJnZXQgb2YgdGhlIHN0YXRlCisgICAgICogQHBh
cmFtIGN1cnJlbnRUYXJnZXQgZGVmaW5lcyB0aGUgY3VycmVudCB0YXJnZXQgb2YgdGhlIHN0YXRl
CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgZXZlbnQgc3RhdGUKKyAgICAgKi8KKyAgICBF
dmVudFN0YXRlLnByb3RvdHlwZS5pbml0YWxpemUgPSBmdW5jdGlvbiAobWFzaywgc2tpcE5leHRP
YnNlcnZlcnMsIHRhcmdldCwgY3VycmVudFRhcmdldCkgeworICAgICAgICBpZiAoc2tpcE5leHRP
YnNlcnZlcnMgPT09IHZvaWQgMCkgeyBza2lwTmV4dE9ic2VydmVycyA9IGZhbHNlOyB9CisgICAg
ICAgIHRoaXMubWFzayA9IG1hc2s7CisgICAgICAgIHRoaXMuc2tpcE5leHRPYnNlcnZlcnMgPSBz
a2lwTmV4dE9ic2VydmVyczsKKyAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7CisgICAgICAg
IHRoaXMuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgcmV0dXJuIEV2ZW50U3RhdGU7Cit9KCkpOworCisvKioKKyAqIFJlcHJl
c2VudCBhbiBPYnNlcnZlciByZWdpc3RlcmVkIHRvIGEgZ2l2ZW4gT2JzZXJ2YWJsZSBvYmplY3Qu
CisgKi8KK3ZhciBPYnNlcnZlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IG9ic2VydmVyCisgICAgICogQHBhcmFtIGNhbGxiYWNr
IGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgb2JzZXJ2ZXIgaXMgbm90aWZp
ZWQKKyAgICAgKiBAcGFyYW0gbWFzayBkZWZpbmVzIHRoZSBtYXNrIG9mIHRoZSBvYnNlcnZlciAo
dXNlZCB0byBmaWx0ZXIgbm90aWZpY2F0aW9ucykKKyAgICAgKiBAcGFyYW0gc2NvcGUgZGVmaW5l
cyB0aGUgY3VycmVudCBzY29wZSB1c2VkIHRvIHJlc3RvcmUgdGhlIEpTIGNvbnRleHQKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBPYnNlcnZlcigKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBj
YWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIG9ic2VydmVyIGlzIG5vdGlmaWVkCisgICAgICovCisg
ICAgY2FsbGJhY2ssIAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIG1hc2sgb2YgdGhlIG9i
c2VydmVyICh1c2VkIHRvIGZpbHRlciBub3RpZmljYXRpb25zKQorICAgICAqLworICAgIG1hc2ss
IAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGN1cnJlbnQgc2NvcGUgdXNlZCB0byByZXN0
b3JlIHRoZSBKUyBjb250ZXh0CisgICAgICovCisgICAgc2NvcGUpIHsKKyAgICAgICAgaWYgKHNj
b3BlID09PSB2b2lkIDApIHsgc2NvcGUgPSBudWxsOyB9CisgICAgICAgIHRoaXMuY2FsbGJhY2sg
PSBjYWxsYmFjazsKKyAgICAgICAgdGhpcy5tYXNrID0gbWFzazsKKyAgICAgICAgdGhpcy5zY29w
ZSA9IHNjb3BlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl93aWxsQmVV
bnJlZ2lzdGVyZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0
cyBhIHByb3BlcnR5IGRlZmluaW5nIHRoYXQgdGhlIG9ic2VydmVyIGFzIHRvIGJlIHVucmVnaXN0
ZXJlZCBhZnRlciB0aGUgbmV4dCBub3RpZmljYXRpb24KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMudW5yZWdpc3Rlck9uTmV4dENhbGwgPSBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIE9ic2Vy
dmVyOworfSgpKTsKKworLyoqCisgKiBSZXByZXNlbnQgYSBsaXN0IG9mIG9ic2VydmVycyByZWdp
c3RlcmVkIHRvIG11bHRpcGxlIE9ic2VydmFibGVzIG9iamVjdC4KKyAqLwordmFyIE11bHRpT2Jz
ZXJ2ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gTXVsdGlP
YnNlcnZlcigpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogUmVsZWFzZSBhc3NvY2lhdGVkIHJl
c291cmNlcworICAgICAqLworICAgIE11bHRpT2JzZXJ2ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9vYnNlcnZlcnMgJiYgdGhpcy5fb2JzZXJ2
YWJsZXMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9v
YnNlcnZlcnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fb2JzZXJ2
YWJsZXNbaW5kZXhdLnJlbW92ZSh0aGlzLl9vYnNlcnZlcnNbaW5kZXhdKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9vYnNlcnZlcnMgPSBudWxsOworICAgICAgICB0
aGlzLl9vYnNlcnZhYmxlcyA9IG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSYWlzZSBh
IGNhbGxiYWNrIHdoZW4gb25lIG9mIHRoZSBvYnNlcnZhYmxlIHdpbGwgbm90aWZ5CisgICAgICog
QHBhcmFtIG9ic2VydmFibGVzIGRlZmluZXMgYSBsaXN0IG9mIG9ic2VydmFibGVzIHRvIHdhdGNo
CisgICAgICogQHBhcmFtIGNhbGxiYWNrIGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIGNhbGwgb24g
bm90aWZpY2F0aW9uCisgICAgICogQHBhcmFtIG1hc2sgZGVmaW5lcyB0aGUgbWFzayB1c2VkIHRv
IGZpbHRlciBub3RpZmljYXRpb25zCisgICAgICogQHBhcmFtIHNjb3BlIGRlZmluZXMgdGhlIGN1
cnJlbnQgc2NvcGUgdXNlZCB0byByZXN0b3JlIHRoZSBKUyBjb250ZXh0CisgICAgICogQHJldHVy
bnMgdGhlIG5ldyBNdWx0aU9ic2VydmVyCisgICAgICovCisgICAgTXVsdGlPYnNlcnZlci5XYXRj
aCA9IGZ1bmN0aW9uIChvYnNlcnZhYmxlcywgY2FsbGJhY2ssIG1hc2ssIHNjb3BlKSB7CisgICAg
ICAgIGlmIChtYXNrID09PSB2b2lkIDApIHsgbWFzayA9IC0xOyB9CisgICAgICAgIGlmIChzY29w
ZSA9PT0gdm9pZCAwKSB7IHNjb3BlID0gbnVsbDsgfQorICAgICAgICB2YXIgcmVzdWx0ID0gbmV3
IE11bHRpT2JzZXJ2ZXIoKTsKKyAgICAgICAgcmVzdWx0Ll9vYnNlcnZlcnMgPSBuZXcgQXJyYXko
KTsKKyAgICAgICAgcmVzdWx0Ll9vYnNlcnZhYmxlcyA9IG9ic2VydmFibGVzOworICAgICAgICBm
b3IgKHZhciBfaSA9IDAsIG9ic2VydmFibGVzXzEgPSBvYnNlcnZhYmxlczsgX2kgPCBvYnNlcnZh
Ymxlc18xLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIG9ic2VydmFibGUgPSBvYnNl
cnZhYmxlc18xW19pXTsKKyAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IG9ic2VydmFibGUuYWRk
KGNhbGxiYWNrLCBtYXNrLCBmYWxzZSwgc2NvcGUpOworICAgICAgICAgICAgaWYgKG9ic2VydmVy
KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0Ll9vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Owor
ICAgIHJldHVybiBNdWx0aU9ic2VydmVyOworfSgpKTsKKworLyoqCisgKiBUaGUgT2JzZXJ2YWJs
ZSBjbGFzcyBpcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgT2JzZXJ2YWJsZSBwYXR0
ZXJuLgorICoKKyAqIFRoZXJlJ3Mgb25lIHNsaWdodCBwYXJ0aWN1bGFyaXR5IHRob3VnaDogYSBn
aXZlbiBPYnNlcnZhYmxlIGNhbiBub3RpZnkgaXRzIG9ic2VydmVyIHVzaW5nIGEgcGFydGljdWxh
ciBtYXNrIHZhbHVlLCBvbmx5IHRoZSBPYnNlcnZlcnMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbWFz
ayB2YWx1ZSB3aWxsIGJlIG5vdGlmaWVkLgorICogVGhpcyBlbmFibGUgYSBtb3JlIGZpbmUgZ3Jh
aW5lZCBleGVjdXRpb24gd2l0aG91dCBoYXZpbmcgdG8gcmVseSBvbiBtdWx0aXBsZSBkaWZmZXJl
bnQgT2JzZXJ2YWJsZSBvYmplY3RzLgorICogRm9yIGluc3RhbmNlIHlvdSBtYXkgaGF2ZSBhIGdp
dmVuIE9ic2VydmFibGUgdGhhdCBoYXZlIGZvdXIgZGlmZmVyZW50IHR5cGVzIG9mIG5vdGlmaWNh
dGlvbnM6IE1vdmUgKG1hc2sgPSAweDAxKSwgU3RvcCAobWFzayA9IDB4MDIpLCBUdXJuIFJpZ2h0
IChtYXNrID0gMFgwNCksIFR1cm4gTGVmdCAobWFzayA9IDBYMDgpLgorICogQSBnaXZlbiBvYnNl
cnZlciBjYW4gcmVnaXN0ZXIgaXRzZWxmIHdpdGggb25seSBNb3ZlIGFuZCBTdG9wIChtYXNrID0g
MHgwMyksIHRoZW4gaXQgd2lsbCBvbmx5IGJlIG5vdGlmaWVkIHdoZW4gb25lIG9mIHRoZXNlIHR3
byBvY2N1cnMgYW5kIHdpbGwgbmV2ZXIgYmUgZm9yIFR1cm4gTGVmdC9SaWdodC4KKyAqLwordmFy
IE9ic2VydmFibGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIG5ldyBvYnNlcnZhYmxlCisgICAgICogQHBhcmFtIG9uT2JzZXJ2ZXJBZGRl
ZCBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIGEgbmV3IG9ic2VydmVyIGlzIGFkZGVk
CisgICAgICovCisgICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShvbk9ic2VydmVyQWRkZWQpIHsKKyAg
ICAgICAgdGhpcy5fb2JzZXJ2ZXJzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX2V2ZW50
U3RhdGUgPSBuZXcgRXZlbnRTdGF0ZSgwKTsKKyAgICAgICAgaWYgKG9uT2JzZXJ2ZXJBZGRlZCkg
eworICAgICAgICAgICAgdGhpcy5fb25PYnNlcnZlckFkZGVkID0gb25PYnNlcnZlckFkZGVkOwor
ICAgICAgICB9CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYnNlcnZhYmxlLnBy
b3RvdHlwZSwgIm9ic2VydmVycyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhl
IGxpc3Qgb2Ygb2JzZXJ2ZXJzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vYnNlcnZlcnM7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBPYnNlcnZlciB3aXRoIHRoZSBzcGVjaWZp
ZWQgY2FsbGJhY2sKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGNhbGxiYWNrIHRoYXQgd2ls
bCBiZSBleGVjdXRlZCBmb3IgdGhhdCBPYnNlcnZlcgorICAgICAqIEBwYXJhbSBtYXNrIHRoZSBt
YXNrIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycworICAgICAqIEBwYXJhbSBpbnNlcnRGaXJzdCBp
ZiB0cnVlIHRoZSBjYWxsYmFjayB3aWxsIGJlIGluc2VydGVkIGF0IHRoZSBmaXJzdCBwb3NpdGlv
biwgaGVuY2UgZXhlY3V0ZWQgYmVmb3JlIHRoZSBvdGhlcnMgb25lcy4gSWYgZmFsc2UgKGRlZmF1
bHQgYmVoYXZpb3IpIHRoZSBjYWxsYmFjayB3aWxsIGJlIGluc2VydGVkIGF0IHRoZSBsYXN0IHBv
c2l0aW9uLCBleGVjdXRlZCBhZnRlciBhbGwgdGhlIG90aGVycyBhbHJlYWR5IHByZXNlbnQuCisg
ICAgICogQHBhcmFtIHNjb3BlIG9wdGlvbmFsIHNjb3BlIGZvciB0aGUgY2FsbGJhY2sgdG8gYmUg
Y2FsbGVkIGZyb20KKyAgICAgKiBAcGFyYW0gdW5yZWdpc3Rlck9uRmlyc3RDYWxsIGRlZmluZXMg
aWYgdGhlIG9ic2VydmVyIGFzIHRvIGJlIHVucmVnaXN0ZXJlZCBhZnRlciB0aGUgbmV4dCBub3Rp
ZmljYXRpb24KKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IG9ic2VydmVyIGNyZWF0ZWQgZm9yIHRo
ZSBjYWxsYmFjaworICAgICAqLworICAgIE9ic2VydmFibGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0
aW9uIChjYWxsYmFjaywgbWFzaywgaW5zZXJ0Rmlyc3QsIHNjb3BlLCB1bnJlZ2lzdGVyT25GaXJz
dENhbGwpIHsKKyAgICAgICAgaWYgKG1hc2sgPT09IHZvaWQgMCkgeyBtYXNrID0gLTE7IH0KKyAg
ICAgICAgaWYgKGluc2VydEZpcnN0ID09PSB2b2lkIDApIHsgaW5zZXJ0Rmlyc3QgPSBmYWxzZTsg
fQorICAgICAgICBpZiAoc2NvcGUgPT09IHZvaWQgMCkgeyBzY29wZSA9IG51bGw7IH0KKyAgICAg
ICAgaWYgKHVucmVnaXN0ZXJPbkZpcnN0Q2FsbCA9PT0gdm9pZCAwKSB7IHVucmVnaXN0ZXJPbkZp
cnN0Q2FsbCA9IGZhbHNlOyB9CisgICAgICAgIGlmICghY2FsbGJhY2spIHsKKyAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBvYnNlcnZlciA9IG5ldyBPYnNl
cnZlcihjYWxsYmFjaywgbWFzaywgc2NvcGUpOworICAgICAgICBvYnNlcnZlci51bnJlZ2lzdGVy
T25OZXh0Q2FsbCA9IHVucmVnaXN0ZXJPbkZpcnN0Q2FsbDsKKyAgICAgICAgaWYgKGluc2VydEZp
cnN0KSB7CisgICAgICAgICAgICB0aGlzLl9vYnNlcnZlcnMudW5zaGlmdChvYnNlcnZlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9vYnNlcnZlcnMucHVz
aChvYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29uT2JzZXJ2ZXJBZGRl
ZCkgeworICAgICAgICAgICAgdGhpcy5fb25PYnNlcnZlckFkZGVkKG9ic2VydmVyKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gb2JzZXJ2ZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGUgYSBuZXcgT2JzZXJ2ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGFuZCB1bnJl
Z2lzdGVycyBhZnRlciB0aGUgbmV4dCBub3RpZmljYXRpb24KKyAgICAgKiBAcGFyYW0gY2FsbGJh
Y2sgdGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBmb3IgdGhhdCBPYnNlcnZlcgor
ICAgICAqIEByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgY3JlYXRlZCBmb3IgdGhlIGNhbGxiYWNr
CisgICAgICovCisgICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIChj
YWxsYmFjaykgeworICAgICAgICByZXR1cm4gdGhpcy5hZGQoY2FsbGJhY2ssIHVuZGVmaW5lZCwg
dW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVt
b3ZlIGFuIE9ic2VydmVyIGZyb20gdGhlIE9ic2VydmFibGUgb2JqZWN0CisgICAgICogQHBhcmFt
IG9ic2VydmVyIHRoZSBpbnN0YW5jZSBvZiB0aGUgT2JzZXJ2ZXIgdG8gcmVtb3ZlCisgICAgICog
QHJldHVybnMgZmFsc2UgaWYgaXQgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyBPYnNlcnZhYmxlCisg
ICAgICovCisgICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG9ic2Vy
dmVyKSB7CisgICAgICAgIGlmICghb2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9vYnNlcnZlcnMuaW5kZXhP
ZihvYnNlcnZlcik7CisgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgIHRo
aXMuX2RlZmVyVW5yZWdpc3RlcihvYnNlcnZlcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBPYnNlcnZhYmxlIG9iamVjdAorICAgICAqIEBw
YXJhbSBjYWxsYmFjayB0aGUgY2FsbGJhY2sgdG8gcmVtb3ZlCisgICAgICogQHBhcmFtIHNjb3Bl
IG9wdGlvbmFsIHNjb3BlLiBJZiB1c2VkIG9ubHkgdGhlIGNhbGxiYWNrcyB3aXRoIHRoaXMgc2Nv
cGUgd2lsbCBiZSByZW1vdmVkCisgICAgICogQHJldHVybnMgZmFsc2UgaWYgaXQgZG9lc24ndCBi
ZWxvbmcgdG8gdGhpcyBPYnNlcnZhYmxlCisgICAgKi8KKyAgICBPYnNlcnZhYmxlLnByb3RvdHlw
ZS5yZW1vdmVDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaywgc2NvcGUpIHsKKyAgICAgICAg
Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX29ic2VydmVycy5sZW5ndGg7IGluZGV4
KyspIHsKKyAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IHRoaXMuX29ic2VydmVyc1tpbmRleF07
CisgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuX3dpbGxCZVVucmVnaXN0ZXJlZCkgeworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9ic2Vy
dmVyLmNhbGxiYWNrID09PSBjYWxsYmFjayAmJiAoIXNjb3BlIHx8IHNjb3BlID09PSBvYnNlcnZl
ci5zY29wZSkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWZlclVucmVnaXN0ZXIob2JzZXJ2
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIE9ic2VydmFibGUucHJvdG90
eXBlLl9kZWZlclVucmVnaXN0ZXIgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHsKKyAgICAgICAgdmFy
IF90aGlzID0gdGhpczsKKyAgICAgICAgb2JzZXJ2ZXIudW5yZWdpc3Rlck9uTmV4dENhbGwgPSBm
YWxzZTsKKyAgICAgICAgb2JzZXJ2ZXIuX3dpbGxCZVVucmVnaXN0ZXJlZCA9IHRydWU7CisgICAg
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMuX3JlbW92ZShv
YnNlcnZlcik7CisgICAgICAgIH0sIDApOworICAgIH07CisgICAgLy8gVGhpcyBzaG91bGQgb25s
eSBiZSBjYWxsZWQgd2hlbiBub3QgaXRlcmF0aW5nIG92ZXIgX29ic2VydmVycyB0byBhdm9pZCBj
YWxsYmFjayBza2lwcGluZy4KKyAgICAvLyBSZW1vdmVzIGFuIG9ic2VydmVyIGZyb20gdGhlIF9v
YnNlcnZlciBBcnJheS4KKyAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fcmVtb3ZlID0gZnVuY3Rp
b24gKG9ic2VydmVyKSB7CisgICAgICAgIGlmICghb2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9vYnNlcnZl
cnMuaW5kZXhPZihvYnNlcnZlcik7CisgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAg
ICAgICAgIHRoaXMuX29ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAg
LyoqCisgICAgICogTW92ZXMgdGhlIG9ic2VydmFibGUgdG8gdGhlIHRvcCBvZiB0aGUgb2JzZXJ2
ZXIgbGlzdCBtYWtpbmcgaXQgZ2V0IGNhbGxlZCBmaXJzdCB3aGVuIG5vdGlmaWVkCisgICAgICog
QHBhcmFtIG9ic2VydmVyIHRoZSBvYnNlcnZlciB0byBtb3ZlCisgICAgICovCisgICAgT2JzZXJ2
YWJsZS5wcm90b3R5cGUubWFrZU9ic2VydmVyVG9wUHJpb3JpdHkgPSBmdW5jdGlvbiAob2JzZXJ2
ZXIpIHsKKyAgICAgICAgdGhpcy5fcmVtb3ZlKG9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb2Jz
ZXJ2ZXJzLnVuc2hpZnQob2JzZXJ2ZXIpOworICAgIH07CisgICAgLyoqCisgICAgICogTW92ZXMg
dGhlIG9ic2VydmFibGUgdG8gdGhlIGJvdHRvbSBvZiB0aGUgb2JzZXJ2ZXIgbGlzdCBtYWtpbmcg
aXQgZ2V0IGNhbGxlZCBsYXN0IHdoZW4gbm90aWZpZWQKKyAgICAgKiBAcGFyYW0gb2JzZXJ2ZXIg
dGhlIG9ic2VydmVyIHRvIG1vdmUKKyAgICAgKi8KKyAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5t
YWtlT2JzZXJ2ZXJCb3R0b21Qcmlvcml0eSA9IGZ1bmN0aW9uIChvYnNlcnZlcikgeworICAgICAg
ICB0aGlzLl9yZW1vdmUob2JzZXJ2ZXIpOworICAgICAgICB0aGlzLl9vYnNlcnZlcnMucHVzaChv
YnNlcnZlcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBOb3RpZnkgYWxsIE9ic2VydmVycyBi
eSBjYWxsaW5nIHRoZWlyIHJlc3BlY3RpdmUgY2FsbGJhY2sgd2l0aCB0aGUgZ2l2ZW4gZGF0YQor
ICAgICAqIFdpbGwgcmV0dXJuIHRydWUgaWYgYWxsIG9ic2VydmVycyB3ZXJlIGV4ZWN1dGVkLCBm
YWxzZSBpZiBhbiBvYnNlcnZlciBzZXQgc2tpcE5leHRPYnNlcnZlcnMgdG8gdHJ1ZSwgdGhlbiBw
cmV2ZW50IHRoZSBzdWJzZXF1ZW50IG9uZXMgdG8gZXhlY3V0ZQorICAgICAqIEBwYXJhbSBldmVu
dERhdGEgZGVmaW5lcyB0aGUgZGF0YSB0byBzZW5kIHRvIGFsbCBvYnNlcnZlcnMKKyAgICAgKiBA
cGFyYW0gbWFzayBkZWZpbmVzIHRoZSBtYXNrIG9mIHRoZSBjdXJyZW50IG5vdGlmaWNhdGlvbiAo
b2JzZXJ2ZXJzIHdpdGggaW5jb21wYXRpYmxlIG1hc2sgKGllIG1hc2sgJiBvYnNlcnZlci5tYXNr
ID09PSAwKSB3aWxsIG5vdCBiZSBub3RpZmllZCkKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmlu
ZXMgdGhlIG9yaWdpbmFsIHRhcmdldCBvZiB0aGUgc3RhdGUKKyAgICAgKiBAcGFyYW0gY3VycmVu
dFRhcmdldCBkZWZpbmVzIHRoZSBjdXJyZW50IHRhcmdldCBvZiB0aGUgc3RhdGUKKyAgICAgKiBA
cmV0dXJucyBmYWxzZSBpZiB0aGUgY29tcGxldGUgb2JzZXJ2ZXIgY2hhaW4gd2FzIG5vdCBwcm9j
ZXNzZWQgKGJlY2F1c2Ugb25lIG9ic2VydmVyIHNldCB0aGUgc2tpcE5leHRPYnNlcnZlcnMgdG8g
dHJ1ZSkKKyAgICAgKi8KKyAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5ub3RpZnlPYnNlcnZlcnMg
PSBmdW5jdGlvbiAoZXZlbnREYXRhLCBtYXNrLCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQpIHsKKyAg
ICAgICAgaWYgKG1hc2sgPT09IHZvaWQgMCkgeyBtYXNrID0gLTE7IH0KKyAgICAgICAgaWYgKCF0
aGlzLl9vYnNlcnZlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9ldmVudFN0YXRlOworICAgICAgICBzdGF0
ZS5tYXNrID0gbWFzazsKKyAgICAgICAgc3RhdGUudGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICBz
dGF0ZS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDsKKyAgICAgICAgc3RhdGUuc2tpcE5l
eHRPYnNlcnZlcnMgPSBmYWxzZTsKKyAgICAgICAgc3RhdGUubGFzdFJldHVyblZhbHVlID0gZXZl
bnREYXRhOworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fb2JzZXJ2ZXJzOyBf
aSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIG9icyA9IF9hW19pXTsKKyAg
ICAgICAgICAgIGlmIChvYnMuX3dpbGxCZVVucmVnaXN0ZXJlZCkgeworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9icy5tYXNrICYgbWFz
aykgeworICAgICAgICAgICAgICAgIGlmIChvYnMuc2NvcGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUubGFzdFJldHVyblZhbHVlID0gb2JzLmNhbGxiYWNrLmFwcGx5KG9icy5zY29wZSwg
W2V2ZW50RGF0YSwgc3RhdGVdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IG9icy5j
YWxsYmFjayhldmVudERhdGEsIHN0YXRlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKG9icy51bnJlZ2lzdGVyT25OZXh0Q2FsbCkgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9kZWZlclVucmVnaXN0ZXIob2JzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsaW5nIHRoaXMgd2ls
bCBleGVjdXRlIGVhY2ggY2FsbGJhY2ssIGV4cGVjdGluZyBpdCB0byBiZSBhIHByb21pc2Ugb3Ig
cmV0dXJuIGEgdmFsdWUuCisgICAgICogSWYgYXQgYW55IHBvaW50IGluIHRoZSBjaGFpbiBvbmUg
ZnVuY3Rpb24gZmFpbHMsIHRoZSBwcm9taXNlIHdpbGwgZmFpbCBhbmQgdGhlIGV4ZWN1dGlvbiB3
aWxsIG5vdCBjb250aW51ZS4KKyAgICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgY2hhaW4gb2Yg
ZXZlbnRzIChzb21ldGltZXMgYXN5bmMgZXZlbnRzKSBpcyBuZWVkZWQgdG8gaW5pdGlhbGl6ZSBh
IGNlcnRhaW4gb2JqZWN0CisgICAgICogYW5kIGl0IGlzIGNydWNpYWwgdGhhdCBhbGwgY2FsbGJh
Y2tzIHdpbGwgYmUgZXhlY3V0ZWQuCisgICAgICogVGhlIG9yZGVyIG9mIHRoZSBjYWxsYmFja3Mg
aXMga2VwdCwgY2FsbGJhY2tzIGFyZSBub3QgZXhlY3V0ZWQgcGFyYWxsZWwuCisgICAgICoKKyAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIFRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gZWFjaCBjYWxsYmFj
aworICAgICAqIEBwYXJhbSBtYXNrIGlzIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycyBkZWZhdWx0
cyB0byAtMQorICAgICAqIEBwYXJhbSB0YXJnZXQgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdGFyZ2V0
IChzZWUgRXZlbnRTdGF0ZSkKKyAgICAgKiBAcGFyYW0gY3VycmVudFRhcmdldCBkZWZpbmVzIGhl
IGN1cnJlbnQgb2JqZWN0IGluIHRoZSBidWJibGluZyBwaGFzZQorICAgICAqIEByZXR1cm5zIHtQ
cm9taXNlPFQ+fSB3aWxsIHJldHVybiBhIFByb21pc2UgdGhhbiByZXNvbHZlcyB3aGVuIGFsbCBj
YWxsYmFja3MgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAqLworICAgIE9ic2VydmFibGUu
cHJvdG90eXBlLm5vdGlmeU9ic2VydmVyc1dpdGhQcm9taXNlID0gZnVuY3Rpb24gKGV2ZW50RGF0
YSwgbWFzaywgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRo
aXM7CisgICAgICAgIGlmIChtYXNrID09PSB2b2lkIDApIHsgbWFzayA9IC0xOyB9CisgICAgICAg
IC8vIGNyZWF0ZSBhbiBlbXB0eSBwcm9taXNlCisgICAgICAgIHZhciBwID0gUHJvbWlzZS5yZXNv
bHZlKGV2ZW50RGF0YSk7CisgICAgICAgIC8vIG5vIG9ic2VydmVycz8gcmV0dXJuIHRoaXMgcHJv
bWlzZS4KKyAgICAgICAgaWYgKCF0aGlzLl9vYnNlcnZlcnMubGVuZ3RoKSB7CisgICAgICAgICAg
ICByZXR1cm4gcDsKKyAgICAgICAgfQorICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9ldmVudFN0
YXRlOworICAgICAgICBzdGF0ZS5tYXNrID0gbWFzazsKKyAgICAgICAgc3RhdGUudGFyZ2V0ID0g
dGFyZ2V0OworICAgICAgICBzdGF0ZS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDsKKyAg
ICAgICAgc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMgPSBmYWxzZTsKKyAgICAgICAgLy8gZXhlY3V0
ZSBvbmUgY2FsbGJhY2sgYWZ0ZXIgYW5vdGhlciAobm90IHVzaW5nIFByb21pc2UuYWxsLCB0aGUg
b3JkZXIgaXMgaW1wb3J0YW50KQorICAgICAgICB0aGlzLl9vYnNlcnZlcnMuZm9yRWFjaChmdW5j
dGlvbiAob2JzKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
b2JzLl93aWxsQmVVbnJlZ2lzdGVyZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAob2JzLm1hc2sgJiBtYXNrKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG9icy5zY29wZSkgeworICAgICAgICAgICAgICAgICAgICBwID0gcC50aGVuKGZ1
bmN0aW9uIChsYXN0UmV0dXJuZWRWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUubGFzdFJldHVyblZhbHVlID0gbGFzdFJldHVybmVkVmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gb2JzLmNhbGxiYWNrLmFwcGx5KG9icy5zY29wZSwgW2V2ZW50RGF0YSwg
c3RhdGVdKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwID0gcC50aGVuKGZ1bmN0
aW9uIChsYXN0UmV0dXJuZWRWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUu
bGFzdFJldHVyblZhbHVlID0gbGFzdFJldHVybmVkVmFsdWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gb2JzLmNhbGxiYWNrKGV2ZW50RGF0YSwgc3RhdGUpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG9icy51
bnJlZ2lzdGVyT25OZXh0Q2FsbCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZGVmZXJV
bnJlZ2lzdGVyKG9icyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9KTsKKyAgICAgICAgLy8gcmV0dXJuIHRoZSBldmVudERhdGEKKyAgICAgICAgcmV0dXJuIHAu
dGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBldmVudERhdGE7IH0pOworICAgIH07CisgICAgLyoq
CisgICAgICogTm90aWZ5IGEgc3BlY2lmaWMgb2JzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gb2JzZXJ2
ZXIgZGVmaW5lcyB0aGUgb2JzZXJ2ZXIgdG8gbm90aWZ5CisgICAgICogQHBhcmFtIGV2ZW50RGF0
YSBkZWZpbmVzIHRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gZWFjaCBjYWxsYmFjaworICAgICAqIEBw
YXJhbSBtYXNrIGlzIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycyBkZWZhdWx0cyB0byAtMQorICAg
ICAqLworICAgIE9ic2VydmFibGUucHJvdG90eXBlLm5vdGlmeU9ic2VydmVyID0gZnVuY3Rpb24g
KG9ic2VydmVyLCBldmVudERhdGEsIG1hc2spIHsKKyAgICAgICAgaWYgKG1hc2sgPT09IHZvaWQg
MCkgeyBtYXNrID0gLTE7IH0KKyAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fZXZlbnRTdGF0ZTsK
KyAgICAgICAgc3RhdGUubWFzayA9IG1hc2s7CisgICAgICAgIHN0YXRlLnNraXBOZXh0T2JzZXJ2
ZXJzID0gZmFsc2U7CisgICAgICAgIG9ic2VydmVyLmNhbGxiYWNrKGV2ZW50RGF0YSwgc3RhdGUp
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0
aGUgb2JzZXJ2YWJsZSBoYXMgYXQgbGVhc3Qgb25lIG9ic2VydmVyCisgICAgICogQHJldHVybnMg
dHJ1ZSBpcyB0aGUgT2JzZXJ2YWJsZSBoYXMgYXQgbGVhc3Qgb25lIE9ic2VydmVyIHJlZ2lzdGVy
ZWQKKyAgICAgKi8KKyAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5oYXNPYnNlcnZlcnMgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9vYnNlcnZlcnMubGVuZ3RoID4gMDsKKyAg
ICB9OworICAgIC8qKgorICAgICogQ2xlYXIgdGhlIGxpc3Qgb2Ygb2JzZXJ2ZXJzCisgICAgKi8K
KyAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dGhpcy5fb2JzZXJ2ZXJzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX29uT2JzZXJ2ZXJB
ZGRlZCA9IG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZSB0aGUgY3VycmVudCBv
YnNlcnZhYmxlCisgICAgICogQHJldHVybnMgYSBuZXcgb2JzZXJ2YWJsZQorICAgICAqLworICAg
IE9ic2VydmFibGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIg
cmVzdWx0ID0gbmV3IE9ic2VydmFibGUoKTsKKyAgICAgICAgcmVzdWx0Ll9vYnNlcnZlcnMgPSB0
aGlzLl9vYnNlcnZlcnMuc2xpY2UoMCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBEb2VzIHRoaXMgb2JzZXJ2YWJsZSBoYW5kbGVzIG9ic2VydmVyIHJl
Z2lzdGVyZWQgd2l0aCBhIGdpdmVuIG1hc2sKKyAgICAgKiBAcGFyYW0gbWFzayBkZWZpbmVzIHRo
ZSBtYXNrIHRvIGJlIHRlc3RlZAorICAgICAqIEByZXR1cm4gd2hldGhlciBvciBub3Qgb25lIG9i
c2VydmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZ2l2ZW4gbWFzayBpcyBoYW5kZWxlZAorICAgICoq
LworICAgIE9ic2VydmFibGUucHJvdG90eXBlLmhhc1NwZWNpZmljTWFzayA9IGZ1bmN0aW9uICht
YXNrKSB7CisgICAgICAgIGlmIChtYXNrID09PSB2b2lkIDApIHsgbWFzayA9IC0xOyB9CisgICAg
ICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9vYnNlcnZlcnM7IF9pIDwgX2EubGVuZ3Ro
OyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgb2JzID0gX2FbX2ldOworICAgICAgICAgICAgaWYg
KG9icy5tYXNrICYgbWFzayB8fCBvYnMubWFzayA9PT0gbWFzaykgeworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9OworICAgIHJldHVybiBPYnNlcnZhYmxlOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NaXNjL3BlcmZDb3VudGVyLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL3BlcmZDb3VudGVyLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBl
cmZDb3VudGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBlcmZDb3Vu
dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQZXJmQ291bnRlcjsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX3ByZWNpc2lvbkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcHJlY2lzaW9uRGF0ZSAqLyAiLi9NaXNjL3ByZWNp
c2lvbkRhdGUudHMiKTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gdHJhY2sgYSBw
ZXJmb3JtYW5jZSBjb3VudGVyIHdoaWNoIGlzIG51bWJlciBiYXNlZC4KKyAqIFRoZSB1c2VyIGhh
cyBhY2Nlc3MgdG8gbWFueSBwcm9wZXJ0aWVzIHdoaWNoIGdpdmUgc3RhdGlzdGljcyBvZiBkaWZm
ZXJlbnQgbmF0dXJlLgorICoKKyAqIFRoZSBpbXBsZW1lbnRlciBjYW4gdHJhY2sgdHdvIGtpbmRz
IG9mIFBlcmZvcm1hbmNlIENvdW50ZXI6IHRpbWUgYW5kIGNvdW50LgorICogRm9yIHRpbWUgeW91
IGNhbiBvcHRpb25hbGx5IGNhbGwgZmV0Y2hOZXdGcmFtZSgpIHRvIG5vdGlmeSB0aGUgc3RhcnQg
b2YgYSBuZXcgZnJhbWUgdG8gbW9uaXRvciwgdGhlbiBjYWxsIGJlZ2luTW9uaXRvcmluZygpIHRv
IHN0YXJ0IGFuZCBlbmRNb25pdG9yaW5nKCkgdG8gcmVjb3JkIHRoZSBsYXBzZWQgdGltZS4gZW5k
TW9uaXRvcmluZyB0YWtlcyBhIG5ld0ZyYW1lIHBhcmFtZXRlciBmb3IgeW91IHRvIHNwZWNpZnkg
aWYgdGhlIG1vbml0b3JlZCB0aW1lIHNob3VsZCBiZSBzZXQgZm9yIGEgbmV3IGZyYW1lIG9yIGFj
Y3VtdWxhdGVkIHRvIHRoZSBjdXJyZW50IGZyYW1lIGJlaW5nIG1vbml0b3JlZC4KKyAqIEZvciBj
b3VudCB5b3UgZmlyc3QgaGF2ZSB0byBjYWxsIGZldGNoTmV3RnJhbWUoKSB0byBub3RpZnkgdGhl
IHN0YXJ0IG9mIGEgbmV3IGZyYW1lIHRvIG1vbml0b3IsIHRoZW4gY2FsbCBhZGRDb3VudCgpIGhv
dyBtYW55IHRpbWUgcmVxdWlyZWQgdG8gaW5jcmVtZW50IHRoZSBjb3VudCB2YWx1ZSB5b3UgbW9u
aXRvci4KKyAqLwordmFyIFBlcmZDb3VudGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgY291bnRlcgorICAgICAqLworICAgIGZ1
bmN0aW9uIFBlcmZDb3VudGVyKCkgeworICAgICAgICB0aGlzLl9zdGFydE1vbml0b3JpbmdUaW1l
ID0gMDsKKyAgICAgICAgdGhpcy5fbWluID0gMDsKKyAgICAgICAgdGhpcy5fbWF4ID0gMDsKKyAg
ICAgICAgdGhpcy5fYXZlcmFnZSA9IDA7CisgICAgICAgIHRoaXMuX2xhc3RTZWNBdmVyYWdlID0g
MDsKKyAgICAgICAgdGhpcy5fY3VycmVudCA9IDA7CisgICAgICAgIHRoaXMuX3RvdGFsVmFsdWVD
b3VudCA9IDA7CisgICAgICAgIHRoaXMuX3RvdGFsQWNjdW11bGF0ZWQgPSAwOworICAgICAgICB0
aGlzLl9sYXN0U2VjQWNjdW11bGF0ZWQgPSAwOworICAgICAgICB0aGlzLl9sYXN0U2VjVGltZSA9
IDA7CisgICAgICAgIHRoaXMuX2xhc3RTZWNWYWx1ZUNvdW50ID0gMDsKKyAgICB9CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFBlcmZDb3VudGVyLnByb3RvdHlwZSwgIm1pbiIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIHNtYWxsZXN0IHZhbHVlIGV2ZXIKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX21pbjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBl
cmZDb3VudGVyLnByb3RvdHlwZSwgIm1heCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJl
dHVybnMgdGhlIGJpZ2dlc3QgdmFsdWUgZXZlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4OworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGVyZkNvdW50ZXIucHJvdG90eXBlLCAi
YXZlcmFnZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIGF2ZXJhZ2Ug
dmFsdWUgc2luY2UgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgaXMgcnVubmluZworICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
YXZlcmFnZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBl
cmZDb3VudGVyLnByb3RvdHlwZSwgImxhc3RTZWNBdmVyYWdlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogUmV0dXJucyB0aGUgYXZlcmFnZSB2YWx1ZSBvZiB0aGUgbGFzdCBzZWNvbmQgdGhl
IGNvdW50ZXIgd2FzIG1vbml0b3JlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFNlY0F2ZXJhZ2U7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQZXJmQ291bnRlci5wcm90b3R5
cGUsICJjdXJyZW50IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB0aGUgY3Vy
cmVudCB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFBlcmZDb3VudGVyLnByb3RvdHlwZSwgInRvdGFsIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgYWNjdW11bGF0ZWQgdG90YWwKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3RvdGFsQWNjdW11bGF0ZWQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShQZXJmQ291bnRlci5wcm90b3R5cGUsICJjb3VudCIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIHRvdGFsIHZhbHVlIGNvdW50CisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90b3RhbFZhbHVl
Q291bnQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIENhbGwgdGhpcyBtZXRo
b2QgdG8gc3RhcnQgbW9uaXRvcmluZyBhIG5ldyBmcmFtZS4KKyAgICAgKiBUaGlzIHNjZW5hcmlv
IGlzIHR5cGljYWxseSB1c2VkIHdoZW4geW91IGFjY3VtdWxhdGUgbW9uaXRvcmluZyB0aW1lIG1h
bnkgdGltZXMgZm9yIGEgc2luZ2xlIGZyYW1lLCB5b3UgY2FsbCB0aGlzIG1ldGhvZCBhdCB0aGUg
c3RhcnQgb2YgdGhlIGZyYW1lLCB0aGVuIGJlZ2luTW9uaXRvcmluZyB0byBzdGFydCByZWNvcmRp
bmcgYW5kIGVuZE1vbml0b3JpbmcoZmFsc2UpIHRvIGFjY3VtdWxhdGVkIHRoZSByZWNvcmRlZCB0
aW1lIHRvIHRoZSBQZXJmQ291bnRlciBvciBhZGRDb3VudCgpIHRvIGFjY3VtdWxhdGUgYSBtb25p
dG9yZWQgY291bnQuCisgICAgICovCisgICAgUGVyZkNvdW50ZXIucHJvdG90eXBlLmZldGNoTmV3
RnJhbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3RvdGFsVmFsdWVDb3VudCsrOwor
ICAgICAgICB0aGlzLl9jdXJyZW50ID0gMDsKKyAgICAgICAgdGhpcy5fbGFzdFNlY1ZhbHVlQ291
bnQrKzsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGwgdGhpcyBtZXRob2QgdG8gbW9uaXRv
ciBhIGNvdW50IG9mIHNvbWV0aGluZyAoZS5nLiBtZXNoIGRyYXduIGluIHZpZXdwb3J0IGNvdW50
KQorICAgICAqIEBwYXJhbSBuZXdDb3VudCB0aGUgY291bnQgdmFsdWUgdG8gYWRkIHRvIHRoZSBt
b25pdG9yZWQgY291bnQKKyAgICAgKiBAcGFyYW0gZmV0Y2hSZXN1bHQgdHJ1ZSB3aGVuIGl0J3Mg
dGhlIGxhc3QgdGltZSBpbiB0aGUgZnJhbWUgeW91IGFkZCB0byB0aGUgY291bnRlciBhbmQgeW91
IHdpc2ggdG8gdXBkYXRlIHRoZSBzdGF0aXN0aWNzIHByb3BlcnRpZXMgKG1pbi9tYXgvYXZlcmFn
ZSksIGZhbHNlIGlmIHlvdSBvbmx5IHdhbnQgdG8gdXBkYXRlIHN0YXRpc3RpY3MuCisgICAgICov
CisgICAgUGVyZkNvdW50ZXIucHJvdG90eXBlLmFkZENvdW50ID0gZnVuY3Rpb24gKG5ld0NvdW50
LCBmZXRjaFJlc3VsdCkgeworICAgICAgICBpZiAoIVBlcmZDb3VudGVyLkVuYWJsZWQpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50ICs9IG5l
d0NvdW50OworICAgICAgICBpZiAoZmV0Y2hSZXN1bHQpIHsKKyAgICAgICAgICAgIHRoaXMuX2Zl
dGNoUmVzdWx0KCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFN0YXJ0IG1v
bml0b3JpbmcgdGhpcyBwZXJmb3JtYW5jZSBjb3VudGVyCisgICAgICovCisgICAgUGVyZkNvdW50
ZXIucHJvdG90eXBlLmJlZ2luTW9uaXRvcmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KCFQZXJmQ291bnRlci5FbmFibGVkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fc3RhcnRNb25pdG9yaW5nVGltZSA9IF9wcmVjaXNpb25EYXRlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlByZWNpc2lvbkRhdGUiXS5Ob3c7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDb21wdXRlIHRoZSB0aW1lIGxhcHNlZCBzaW5jZSB0aGUgcHJldmlvdXMg
YmVnaW5Nb25pdG9yaW5nKCkgY2FsbC4KKyAgICAgKiBAcGFyYW0gbmV3RnJhbWUgdHJ1ZSBieSBk
ZWZhdWx0IHRvIGZldGNoIHRoZSByZXN1bHQgYW5kIG1vbml0b3IgYSBuZXcgZnJhbWUsIGlmIGZh
bHNlIHRoZSB0aW1lIG1vbml0b3JlZCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IGZyYW1l
IGNvdW50ZXIKKyAgICAgKi8KKyAgICBQZXJmQ291bnRlci5wcm90b3R5cGUuZW5kTW9uaXRvcmlu
ZyA9IGZ1bmN0aW9uIChuZXdGcmFtZSkgeworICAgICAgICBpZiAobmV3RnJhbWUgPT09IHZvaWQg
MCkgeyBuZXdGcmFtZSA9IHRydWU7IH0KKyAgICAgICAgaWYgKCFQZXJmQ291bnRlci5FbmFibGVk
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5ld0ZyYW1l
KSB7CisgICAgICAgICAgICB0aGlzLmZldGNoTmV3RnJhbWUoKTsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgY3VycmVudFRpbWUgPSBfcHJlY2lzaW9uRGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJQcmVjaXNpb25EYXRlIl0uTm93OworICAgICAgICB0aGlzLl9jdXJyZW50ID0gY3Vy
cmVudFRpbWUgLSB0aGlzLl9zdGFydE1vbml0b3JpbmdUaW1lOworICAgICAgICBpZiAobmV3RnJh
bWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2ZldGNoUmVzdWx0KCk7CisgICAgICAgIH0KKyAgICB9
OworICAgIFBlcmZDb3VudGVyLnByb3RvdHlwZS5fZmV0Y2hSZXN1bHQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMuX3RvdGFsQWNjdW11bGF0ZWQgKz0gdGhpcy5fY3VycmVudDsKKyAgICAg
ICAgdGhpcy5fbGFzdFNlY0FjY3VtdWxhdGVkICs9IHRoaXMuX2N1cnJlbnQ7CisgICAgICAgIC8v
IE1pbi9NYXggdXBkYXRlCisgICAgICAgIHRoaXMuX21pbiA9IE1hdGgubWluKHRoaXMuX21pbiwg
dGhpcy5fY3VycmVudCk7CisgICAgICAgIHRoaXMuX21heCA9IE1hdGgubWF4KHRoaXMuX21heCwg
dGhpcy5fY3VycmVudCk7CisgICAgICAgIHRoaXMuX2F2ZXJhZ2UgPSB0aGlzLl90b3RhbEFjY3Vt
dWxhdGVkIC8gdGhpcy5fdG90YWxWYWx1ZUNvdW50OworICAgICAgICAvLyBSZXNldCBsYXN0IHNl
Yz8KKyAgICAgICAgdmFyIG5vdyA9IF9wcmVjaXNpb25EYXRlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlByZWNpc2lvbkRhdGUiXS5Ob3c7CisgICAgICAgIGlmICgobm93IC0gdGhpcy5f
bGFzdFNlY1RpbWUpID4gMTAwMCkgeworICAgICAgICAgICAgdGhpcy5fbGFzdFNlY0F2ZXJhZ2Ug
PSB0aGlzLl9sYXN0U2VjQWNjdW11bGF0ZWQgLyB0aGlzLl9sYXN0U2VjVmFsdWVDb3VudDsKKyAg
ICAgICAgICAgIHRoaXMuX2xhc3RTZWNUaW1lID0gbm93OworICAgICAgICAgICAgdGhpcy5fbGFz
dFNlY0FjY3VtdWxhdGVkID0gMDsKKyAgICAgICAgICAgIHRoaXMuX2xhc3RTZWNWYWx1ZUNvdW50
ID0gMDsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBvciBzZXRzIGEg
Z2xvYmFsIGJvb2xlYW4gdG8gdHVybiBvbiBhbmQgb2ZmIGFsbCB0aGUgY291bnRlcnMKKyAgICAg
Ki8KKyAgICBQZXJmQ291bnRlci5FbmFibGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gUGVyZkNvdW50
ZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2MvcGVyZm9ybWFuY2VN
b25pdG9yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vTWlzYy9wZXJmb3JtYW5jZU1vbml0b3IudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBlcmZvcm1h
bmNlTW9uaXRvciwgUm9sbGluZ0F2ZXJhZ2UgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiUGVyZm9ybWFuY2VNb25pdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQZXJmb3Jt
YW5jZU1vbml0b3I7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUm9sbGluZ0F2ZXJhZ2UiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFJvbGxpbmdBdmVyYWdlOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcHJlY2lzaW9uRGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9wcmVjaXNpb25EYXRlICovICIuL01pc2MvcHJlY2lzaW9uRGF0
ZS50cyIpOworCisvKioKKyAqIFBlcmZvcm1hbmNlIG1vbml0b3IgdHJhY2tzIHJvbGxpbmcgYXZl
cmFnZSBmcmFtZS10aW1lIGFuZCBmcmFtZS10aW1lIHZhcmlhbmNlIG92ZXIgYSB1c2VyIGRlZmlu
ZWQgc2xpZGluZy13aW5kb3cKKyAqLwordmFyIFBlcmZvcm1hbmNlTW9uaXRvciA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBjb25zdHJ1Y3RvcgorICAgICAq
IEBwYXJhbSBmcmFtZVNhbXBsZVNpemUgVGhlIG51bWJlciBvZiBzYW1wbGVzIHJlcXVpcmVkIHRv
IHNhdHVyYXRlIHRoZSBzbGlkaW5nIHdpbmRvdworICAgICAqLworICAgIGZ1bmN0aW9uIFBlcmZv
cm1hbmNlTW9uaXRvcihmcmFtZVNhbXBsZVNpemUpIHsKKyAgICAgICAgaWYgKGZyYW1lU2FtcGxl
U2l6ZSA9PT0gdm9pZCAwKSB7IGZyYW1lU2FtcGxlU2l6ZSA9IDMwOyB9CisgICAgICAgIHRoaXMu
X2VuYWJsZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9yb2xsaW5nRnJhbWVUaW1lID0gbmV3IFJv
bGxpbmdBdmVyYWdlKGZyYW1lU2FtcGxlU2l6ZSk7CisgICAgfQorICAgIC8qKgorICAgICAqIFNh
bXBsZXMgY3VycmVudCBmcmFtZQorICAgICAqIEBwYXJhbSB0aW1lTXMgQSB0aW1lc3RhbXAgaW4g
bWlsbGlzZWNvbmRzIG9mIHRoZSBjdXJyZW50IGZyYW1lIHRvIGNvbXBhcmUgd2l0aCBvdGhlciBm
cmFtZXMKKyAgICAgKi8KKyAgICBQZXJmb3JtYW5jZU1vbml0b3IucHJvdG90eXBlLnNhbXBsZUZy
YW1lID0gZnVuY3Rpb24gKHRpbWVNcykgeworICAgICAgICBpZiAodGltZU1zID09PSB2b2lkIDAp
IHsgdGltZU1zID0gX3ByZWNpc2lvbkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
UHJlY2lzaW9uRGF0ZSJdLk5vdzsgfQorICAgICAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fbGFzdEZyYW1l
VGltZU1zICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBkdCA9IHRpbWVNcyAtIHRoaXMuX2xh
c3RGcmFtZVRpbWVNczsKKyAgICAgICAgICAgIHRoaXMuX3JvbGxpbmdGcmFtZVRpbWUuYWRkKGR0
KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9sYXN0RnJhbWVUaW1lTXMgPSB0aW1lTXM7Cisg
ICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGVyZm9ybWFuY2VNb25pdG9yLnByb3Rv
dHlwZSwgImF2ZXJhZ2VGcmFtZVRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1
cm5zIHRoZSBhdmVyYWdlIGZyYW1lIHRpbWUgaW4gbWlsbGlzZWNvbmRzIG92ZXIgdGhlIHNsaWRp
bmcgd2luZG93IChvciB0aGUgc3Vic2V0IG9mIGZyYW1lcyBzYW1wbGVkIHNvIGZhcikKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3JvbGxpbmdGcmFtZVRpbWUuYXZlcmFnZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFBlcmZvcm1hbmNlTW9uaXRvci5wcm90b3R5cGUsICJhdmVyYWdl
RnJhbWVUaW1lVmFyaWFuY2UiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRo
ZSB2YXJpYW5jZSBmcmFtZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBvdmVyIHRoZSBzbGlkaW5nIHdp
bmRvdyAob3IgdGhlIHN1YnNldCBvZiBmcmFtZXMgc2FtcGxlZCBzbyBmYXIpCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9y
b2xsaW5nRnJhbWVUaW1lLnZhcmlhbmNlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoUGVyZm9ybWFuY2VNb25pdG9yLnByb3RvdHlwZSwgImluc3RhbnRhbmVv
dXNGcmFtZVRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBmcmFt
ZSB0aW1lIG9mIHRoZSBtb3N0IHJlY2VudCBmcmFtZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9sbGluZ0ZyYW1lVGlt
ZS5oaXN0b3J5KDApOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoUGVyZm9ybWFuY2VNb25pdG9yLnByb3RvdHlwZSwgImF2ZXJhZ2VGUFMiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBhdmVyYWdlIGZyYW1lcmF0ZSBpbiBmcmFtZXMg
cGVyIHNlY29uZCBvdmVyIHRoZSBzbGlkaW5nIHdpbmRvdyAob3IgdGhlIHN1YnNldCBvZiBmcmFt
ZXMgc2FtcGxlZCBzbyBmYXIpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiAxMDAwLjAgLyB0aGlzLl9yb2xsaW5nRnJhbWVUaW1lLmF2
ZXJhZ2U7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQZXJm
b3JtYW5jZU1vbml0b3IucHJvdG90eXBlLCAiaW5zdGFudGFuZW91c0ZQUyIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIGF2ZXJhZ2UgZnJhbWVyYXRlIGluIGZyYW1lcyBw
ZXIgc2Vjb25kIHVzaW5nIHRoZSBtb3N0IHJlY2VudCBmcmFtZSB0aW1lCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBoaXN0b3J5ID0gdGhp
cy5fcm9sbGluZ0ZyYW1lVGltZS5oaXN0b3J5KDApOworICAgICAgICAgICAgaWYgKGhpc3Rvcnkg
PT09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiAxMDAwLjAgLyBoaXN0b3J5OworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoUGVyZm9ybWFuY2VNb25pdG9yLnByb3RvdHlwZSwgImlzU2F0
dXJhdGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB0cnVlIGlmIGVub3Vn
aCBzYW1wbGVzIGhhdmUgYmVlbiB0YWtlbiB0byBjb21wbGV0ZWx5IGZpbGwgdGhlIHNsaWRpbmcg
d2luZG93CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9yb2xsaW5nRnJhbWVUaW1lLmlzU2F0dXJhdGVkKCk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEVuYWJsZXMgY29udHJpYnV0aW9ucyB0byB0aGUg
c2xpZGluZyB3aW5kb3cgc2FtcGxlIHNldAorICAgICAqLworICAgIFBlcmZvcm1hbmNlTW9uaXRv
ci5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9lbmFibGVk
ID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc2FibGVzIGNvbnRyaWJ1dGlvbnMg
dG8gdGhlIHNsaWRpbmcgd2luZG93IHNhbXBsZSBzZXQKKyAgICAgKiBTYW1wbGVzIHdpbGwgbm90
IGJlIGludGVycG9sYXRlZCBvdmVyIHRoZSBkaXNhYmxlZCBwZXJpb2QKKyAgICAgKi8KKyAgICBQ
ZXJmb3JtYW5jZU1vbml0b3IucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgLy9jbGVhciBsYXN0IHNhbXBsZSB0
byBhdm9pZCBpbnRlcnBvbGF0aW5nIG92ZXIgdGhlIGRpc2FibGVkIHBlcmlvZCB3aGVuIG5leHQg
ZW5hYmxlZAorICAgICAgICB0aGlzLl9sYXN0RnJhbWVUaW1lTXMgPSBudWxsOworICAgIH07Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBlcmZvcm1hbmNlTW9uaXRvci5wcm90b3R5cGUsICJp
c0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgc2Ft
cGxpbmcgaXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgLyoqCisgICAgICogUmVzZXRzIHBlcmZvcm1hbmNlIG1vbml0b3IKKyAgICAgKi8KKyAgICBQ
ZXJmb3JtYW5jZU1vbml0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAvL2NsZWFyIGxhc3Qgc2FtcGxlIHRvIGF2b2lkIGludGVycG9sYXRpbmcgb3ZlciB0aGUgZGlz
YWJsZWQgcGVyaW9kIHdoZW4gbmV4dCBlbmFibGVkCisgICAgICAgIHRoaXMuX2xhc3RGcmFtZVRp
bWVNcyA9IG51bGw7CisgICAgICAgIC8vd2lwZSByZWNvcmQKKyAgICAgICAgdGhpcy5fcm9sbGlu
Z0ZyYW1lVGltZS5yZXNldCgpOworICAgIH07CisgICAgcmV0dXJuIFBlcmZvcm1hbmNlTW9uaXRv
cjsKK30oKSk7CisKKy8qKgorICogUm9sbGluZ0F2ZXJhZ2UKKyAqCisgKiBVdGlsaXR5IHRvIGVm
ZmljaWVudGx5IGNvbXB1dGUgdGhlIHJvbGxpbmcgYXZlcmFnZSBhbmQgdmFyaWFuY2Ugb3ZlciBh
IHNsaWRpbmcgd2luZG93IG9mIHNhbXBsZXMKKyAqLwordmFyIFJvbGxpbmdBdmVyYWdlID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIGNvbnN0cnVjdG9yCisg
ICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVxdWlyZWQgdG8gc2F0
dXJhdGUgdGhlIHNsaWRpbmcgd2luZG93CisgICAgICovCisgICAgZnVuY3Rpb24gUm9sbGluZ0F2
ZXJhZ2UobGVuZ3RoKSB7CisgICAgICAgIHRoaXMuX3NhbXBsZXMgPSBuZXcgQXJyYXkobGVuZ3Ro
KTsKKyAgICAgICAgdGhpcy5yZXNldCgpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGRzIGEg
c2FtcGxlIHRvIHRoZSBzYW1wbGUgc2V0CisgICAgICogQHBhcmFtIHYgVGhlIHNhbXBsZSB2YWx1
ZQorICAgICAqLworICAgIFJvbGxpbmdBdmVyYWdlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAo
dikgeworICAgICAgICAvL2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWxnb3JpdGhtc19m
b3JfY2FsY3VsYXRpbmdfdmFyaWFuY2UKKyAgICAgICAgdmFyIGRlbHRhOworICAgICAgICAvL3dl
IG5lZWQgdG8gY2hlY2sgaWYgd2UndmUgYWxyZWFkeSB3cmFwcGVkIHJvdW5kCisgICAgICAgIGlm
ICh0aGlzLmlzU2F0dXJhdGVkKCkpIHsKKyAgICAgICAgICAgIC8vcmVtb3ZlIGJvdHRvbSBvZiBz
dGFjayBmcm9tIG1lYW4KKyAgICAgICAgICAgIHZhciBib3R0b21WYWx1ZSA9IHRoaXMuX3NhbXBs
ZXNbdGhpcy5fcG9zXTsKKyAgICAgICAgICAgIGRlbHRhID0gYm90dG9tVmFsdWUgLSB0aGlzLmF2
ZXJhZ2U7CisgICAgICAgICAgICB0aGlzLmF2ZXJhZ2UgLT0gZGVsdGEgLyAodGhpcy5fc2FtcGxl
Q291bnQgLSAxKTsKKyAgICAgICAgICAgIHRoaXMuX20yIC09IGRlbHRhICogKGJvdHRvbVZhbHVl
IC0gdGhpcy5hdmVyYWdlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHRoaXMuX3NhbXBsZUNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgLy9hZGQgbmV3IHZhbHVl
IHRvIG1lYW4KKyAgICAgICAgZGVsdGEgPSB2IC0gdGhpcy5hdmVyYWdlOworICAgICAgICB0aGlz
LmF2ZXJhZ2UgKz0gZGVsdGEgLyAodGhpcy5fc2FtcGxlQ291bnQpOworICAgICAgICB0aGlzLl9t
MiArPSBkZWx0YSAqICh2IC0gdGhpcy5hdmVyYWdlKTsKKyAgICAgICAgLy9zZXQgdGhlIG5ldyB2
YXJpYW5jZQorICAgICAgICB0aGlzLnZhcmlhbmNlID0gdGhpcy5fbTIgLyAodGhpcy5fc2FtcGxl
Q291bnQgLSAxKTsKKyAgICAgICAgdGhpcy5fc2FtcGxlc1t0aGlzLl9wb3NdID0gdjsKKyAgICAg
ICAgdGhpcy5fcG9zKys7CisgICAgICAgIHRoaXMuX3BvcyAlPSB0aGlzLl9zYW1wbGVzLmxlbmd0
aDsgLy9wb3NpdGl2ZSB3cmFwIGFyb3VuZAorICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJu
cyBwcmV2aW91c2x5IGFkZGVkIHZhbHVlcyBvciBudWxsIGlmIG91dHNpZGUgb2YgaGlzdG9yeSBv
ciBvdXRzaWRlIHRoZSBzbGlkaW5nIHdpbmRvdyBkb21haW4KKyAgICAgKiBAcGFyYW0gaSBJbmRl
eCBpbiBoaXN0b3J5LiBGb3IgZXhhbXBsZSwgcGFzcyAwIGZvciB0aGUgbW9zdCByZWNlbnQgdmFs
dWUgYW5kIDEgZm9yIHRoZSB2YWx1ZSBiZWZvcmUgdGhhdAorICAgICAqIEByZXR1cm4gVmFsdWUg
cHJldmlvdXNseSByZWNvcmRlZCB3aXRoIGFkZCgpIG9yIG51bGwgaWYgb3V0c2lkZSBvZiByYW5n
ZQorICAgICAqLworICAgIFJvbGxpbmdBdmVyYWdlLnByb3RvdHlwZS5oaXN0b3J5ID0gZnVuY3Rp
b24gKGkpIHsKKyAgICAgICAgaWYgKChpID49IHRoaXMuX3NhbXBsZUNvdW50KSB8fCAoaSA+PSB0
aGlzLl9zYW1wbGVzLmxlbmd0aCkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9
CisgICAgICAgIHZhciBpMCA9IHRoaXMuX3dyYXBQb3NpdGlvbih0aGlzLl9wb3MgLSAxLjApOwor
ICAgICAgICByZXR1cm4gdGhpcy5fc2FtcGxlc1t0aGlzLl93cmFwUG9zaXRpb24oaTAgLSBpKV07
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgZW5vdWdoIHNhbXBsZXMg
aGF2ZSBiZWVuIHRha2VuIHRvIGNvbXBsZXRlbHkgZmlsbCB0aGUgc2xpZGluZyB3aW5kb3cKKyAg
ICAgKiBAcmV0dXJuIHRydWUgaWYgc2FtcGxlLXNldCBzYXR1cmF0ZWQKKyAgICAgKi8KKyAgICBS
b2xsaW5nQXZlcmFnZS5wcm90b3R5cGUuaXNTYXR1cmF0ZWQgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9zYW1wbGVDb3VudCA+PSB0aGlzLl9zYW1wbGVzLmxlbmd0aDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJlc2V0cyB0aGUgcm9sbGluZyBhdmVyYWdlIChlcXVpdmFs
ZW50IHRvIDAgc2FtcGxlcyB0YWtlbiBzbyBmYXIpCisgICAgICovCisgICAgUm9sbGluZ0F2ZXJh
Z2UucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmF2ZXJhZ2Ug
PSAwOworICAgICAgICB0aGlzLnZhcmlhbmNlID0gMDsKKyAgICAgICAgdGhpcy5fc2FtcGxlQ291
bnQgPSAwOworICAgICAgICB0aGlzLl9wb3MgPSAwOworICAgICAgICB0aGlzLl9tMiA9IDA7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBXcmFwcyBhIHZhbHVlIGFyb3VuZCB0aGUgc2FtcGxlIHJh
bmdlIGJvdW5kYXJpZXMKKyAgICAgKiBAcGFyYW0gaSBQb3NpdGlvbiBpbiBzYW1wbGUgcmFuZ2Us
IGZvciBleGFtcGxlIGlmIHRoZSBzYW1wbGUgbGVuZ3RoIGlzIDUsIGFuZCBpIGlzIC0zLCB0aGVu
IDIgd2lsbCBiZSByZXR1cm5lZC4KKyAgICAgKiBAcmV0dXJuIFdyYXBwZWQgcG9zaXRpb24gaW4g
c2FtcGxlIHJhbmdlCisgICAgICovCisgICAgUm9sbGluZ0F2ZXJhZ2UucHJvdG90eXBlLl93cmFw
UG9zaXRpb24gPSBmdW5jdGlvbiAoaSkgeworICAgICAgICB2YXIgbWF4ID0gdGhpcy5fc2FtcGxl
cy5sZW5ndGg7CisgICAgICAgIHJldHVybiAoKGkgJSBtYXgpICsgbWF4KSAlIG1heDsKKyAgICB9
OworICAgIHJldHVybiBSb2xsaW5nQXZlcmFnZTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWlzYy9waXZvdFRvb2xzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL01pc2MvcGl2b3RUb29scy50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBpdm90VG9vbHMgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGl2b3RUb29scyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gUGl2b3RUb29sczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rv
ci50cyIpOworCisvKioKKyAqIENsYXNzIGNvbnRhaW5pbmcgYSBzZXQgb2Ygc3RhdGljIHV0aWxp
dGllcyBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIFBpdm90cworICogQGhpZGRlbgorICovCit2YXIg
UGl2b3RUb29scyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQ
aXZvdFRvb2xzKCkgeworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBpdm90VG9vbHMu
X1JlbW92ZUFuZFN0b3JlUGl2b3RQb2ludCA9IGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgIGlm
IChtZXNoICYmIFBpdm90VG9vbHMuX1Bpdm90Q2FjaGVkID09PSAwKSB7CisgICAgICAgICAgICAv
LyBTYXZlIG9sZCBwaXZvdCBhbmQgc2V0IHBpdm90IHRvIDAsMCwwCisgICAgICAgICAgICBtZXNo
LmdldFBpdm90UG9pbnRUb1JlZihQaXZvdFRvb2xzLl9PbGRQaXZvdFBvaW50KTsKKyAgICAgICAg
ICAgIGlmICghUGl2b3RUb29scy5fT2xkUGl2b3RQb2ludC5lcXVhbHNUb0Zsb2F0cygwLCAwLCAw
KSkgeworICAgICAgICAgICAgICAgIG1lc2guc2V0UGl2b3RNYXRyaXgoX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLklkZW50aXR5UmVhZE9u
bHkpOworICAgICAgICAgICAgICAgIFBpdm90VG9vbHMuX09sZFBpdm90UG9pbnQuc3VidHJhY3RU
b1JlZihtZXNoLmdldFBpdm90UG9pbnQoKSwgUGl2b3RUb29scy5fUGl2b3RUcmFuc2xhdGlvbik7
CisgICAgICAgICAgICAgICAgUGl2b3RUb29scy5fUGl2b3RUbXBWZWN0b3IuY29weUZyb21GbG9h
dHMoMSwgMSwgMSk7CisgICAgICAgICAgICAgICAgUGl2b3RUb29scy5fUGl2b3RUbXBWZWN0b3Iu
c3VidHJhY3RJblBsYWNlKG1lc2guc2NhbGluZyk7CisgICAgICAgICAgICAgICAgUGl2b3RUb29s
cy5fUGl2b3RUbXBWZWN0b3IubXVsdGlwbHlJblBsYWNlKFBpdm90VG9vbHMuX1Bpdm90VHJhbnNs
YXRpb24pOworICAgICAgICAgICAgICAgIG1lc2gucG9zaXRpb24uYWRkSW5QbGFjZShQaXZvdFRv
b2xzLl9QaXZvdFRtcFZlY3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
UGl2b3RUb29scy5fUGl2b3RDYWNoZWQrKzsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgUGl2b3RUb29scy5fUmVzdG9yZVBpdm90UG9pbnQgPSBmdW5jdGlvbiAobWVzaCkgeworICAg
ICAgICBpZiAobWVzaCAmJiAhUGl2b3RUb29scy5fT2xkUGl2b3RQb2ludC5lcXVhbHNUb0Zsb2F0
cygwLCAwLCAwKSAmJiBQaXZvdFRvb2xzLl9QaXZvdENhY2hlZCA9PT0gMSkgeworICAgICAgICAg
ICAgbWVzaC5zZXRQaXZvdFBvaW50KFBpdm90VG9vbHMuX09sZFBpdm90UG9pbnQpOworICAgICAg
ICAgICAgUGl2b3RUb29scy5fUGl2b3RUbXBWZWN0b3IuY29weUZyb21GbG9hdHMoMSwgMSwgMSk7
CisgICAgICAgICAgICBQaXZvdFRvb2xzLl9QaXZvdFRtcFZlY3Rvci5zdWJ0cmFjdEluUGxhY2Uo
bWVzaC5zY2FsaW5nKTsKKyAgICAgICAgICAgIFBpdm90VG9vbHMuX1Bpdm90VG1wVmVjdG9yLm11
bHRpcGx5SW5QbGFjZShQaXZvdFRvb2xzLl9QaXZvdFRyYW5zbGF0aW9uKTsKKyAgICAgICAgICAg
IG1lc2gucG9zaXRpb24uc3VidHJhY3RJblBsYWNlKFBpdm90VG9vbHMuX1Bpdm90VG1wVmVjdG9y
KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9QaXZvdENhY2hlZC0tOworICAgIH07CisgICAg
Ly8gU3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgcGl2b3QgY2FjaGUgKF9vbGRQaXZvdFBvaW50LCBf
cGl2b3RUcmFuc2xhdGlvbikKKyAgICAvLyBzdG9yZS9yZW1vdmUgcGl2b3QgcG9pbnQgc2hvdWxk
IG9ubHkgYmUgYXBwbGllZCBkdXJpbmcgdGhlaXIgb3V0ZXJtb3N0IGNhbGxzCisgICAgUGl2b3RU
b29scy5fUGl2b3RDYWNoZWQgPSAwOworICAgIFBpdm90VG9vbHMuX09sZFBpdm90UG9pbnQgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3Rv
cjMiXSgpOworICAgIFBpdm90VG9vbHMuX1Bpdm90VHJhbnNsYXRpb24gPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgpOworICAg
IFBpdm90VG9vbHMuX1Bpdm90VG1wVmVjdG9yID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oKTsKKyAgICByZXR1cm4gUGl2b3RU
b29sczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9wcmVjaXNpb25E
YXRlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L01pc2MvcHJlY2lzaW9uRGF0ZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFByZWNpc2lvbkRhdGUgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUHJlY2lzaW9uRGF0ZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gUHJlY2lzaW9uRGF0ZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RvbU1h
bmFnZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vZG9tTWFuYWdlbWVudCAqLyAiLi9NaXNjL2RvbU1hbmFnZW1lbnQudHMiKTsKKwor
LyoqCisgKiBDbGFzcyBjb250YWluaW5nIGEgc2V0IG9mIHN0YXRpYyB1dGlsaXRpZXMgZnVuY3Rp
b25zIGZvciBwcmVjaXNpb24gZGF0ZQorICovCit2YXIgUHJlY2lzaW9uRGF0ZSA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQcmVjaXNpb25EYXRlKCkgeworICAg
IH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUHJlY2lzaW9uRGF0ZSwgIk5vdyIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgZWl0aGVyIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3co
KSBpZiBzdXBwb3J0ZWQgb3IgRGF0ZS5ub3coKSBlbHNlCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChfZG9tTWFuYWdlbWVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEb21NYW5hZ2VtZW50Il0uSXNXaW5kb3dPYmplY3RFeGlz
dCgpICYmIHdpbmRvdy5wZXJmb3JtYW5jZSAmJiB3aW5kb3cucGVyZm9ybWFuY2Uubm93KSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICByZXR1cm4gUHJlY2lzaW9uRGF0ZTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWlzYy9wcm9taXNlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL01pc2MvcHJvbWlzZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFByb21pc2VQb2x5ZmlsbCAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJQcm9taXNlUG9seWZpbGwiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFByb21pc2VQb2x5ZmlsbDsgfSk7Cit2YXIgUHJvbWlzZVN0YXRlczsKKyhmdW5jdGlv
biAoUHJvbWlzZVN0YXRlcykgeworICAgIFByb21pc2VTdGF0ZXNbUHJvbWlzZVN0YXRlc1siUGVu
ZGluZyJdID0gMF0gPSAiUGVuZGluZyI7CisgICAgUHJvbWlzZVN0YXRlc1tQcm9taXNlU3RhdGVz
WyJGdWxmaWxsZWQiXSA9IDFdID0gIkZ1bGZpbGxlZCI7CisgICAgUHJvbWlzZVN0YXRlc1tQcm9t
aXNlU3RhdGVzWyJSZWplY3RlZCJdID0gMl0gPSAiUmVqZWN0ZWQiOworfSkoUHJvbWlzZVN0YXRl
cyB8fCAoUHJvbWlzZVN0YXRlcyA9IHt9KSk7Cit2YXIgRnVsRmlsbG1lbnRBZ3JlZ2F0b3IgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRnVsRmlsbG1lbnRBZ3Jl
Z2F0b3IoKSB7CisgICAgICAgIHRoaXMuY291bnQgPSAwOworICAgICAgICB0aGlzLnRhcmdldCA9
IDA7CisgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdOworICAgIH0KKyAgICByZXR1cm4gRnVsRmls
bG1lbnRBZ3JlZ2F0b3I7Cit9KCkpOwordmFyIEludGVybmFsUHJvbWlzZSA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBJbnRlcm5hbFByb21pc2UocmVzb2x2ZXIp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5fc3RhdGUgPSBQcm9t
aXNlU3RhdGVzLlBlbmRpbmc7CisgICAgICAgIHRoaXMuX2NoaWxkcmVuID0gbmV3IEFycmF5KCk7
CisgICAgICAgIHRoaXMuX3JlamVjdFdhc0NvbnN1bWVkID0gZmFsc2U7CisgICAgICAgIGlmICgh
cmVzb2x2ZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkg
eworICAgICAgICAgICAgcmVzb2x2ZXIoZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgX3RoaXMuX3Jlc29sdmUodmFsdWUpOworICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNv
bikgeworICAgICAgICAgICAgICAgIF90aGlzLl9yZWplY3QocmVhc29uKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChlKSB7CisgICAgICAgICAgICB0aGlzLl9y
ZWplY3QoZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KElu
dGVybmFsUHJvbWlzZS5wcm90b3R5cGUsICJfcmVzdWx0IiwgeworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHRWYWx1ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3Jl
c3VsdFZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50ICYmIHRoaXMu
X3BhcmVudC5fcmVzdWx0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9w
YXJlbnQuX3Jlc3VsdCA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBJbnRlcm5hbFByb21pc2UucHJvdG90eXBlLmNhdGNoID0gZnVuY3Rpb24gKG9uUmVqZWN0
ZWQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpOwor
ICAgIH07CisgICAgSW50ZXJuYWxQcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKG9u
RnVsZmlsbGVkLCBvblJlamVjdGVkKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIHZhciBuZXdQcm9taXNlID0gbmV3IEludGVybmFsUHJvbWlzZSgpOworICAgICAgICBuZXdQ
cm9taXNlLl9vbkZ1bGZpbGxlZCA9IG9uRnVsZmlsbGVkOworICAgICAgICBuZXdQcm9taXNlLl9v
blJlamVjdGVkID0gb25SZWplY3RlZDsKKyAgICAgICAgLy8gQ29tcG9zaXRpb24KKyAgICAgICAg
dGhpcy5fY2hpbGRyZW4ucHVzaChuZXdQcm9taXNlKTsKKyAgICAgICAgbmV3UHJvbWlzZS5fcGFy
ZW50ID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMuX3N0YXRlICE9PSBQcm9taXNlU3RhdGVzLlBl
bmRpbmcpIHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgICAgIGlmIChfdGhpcy5fc3RhdGUgPT09IFByb21pc2VTdGF0ZXMuRnVsZmlsbGVkIHx8IF90
aGlzLl9yZWplY3RXYXNDb25zdW1lZCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcmV0dXJu
ZWRWYWx1ZSA9IG5ld1Byb21pc2UuX3Jlc29sdmUoX3RoaXMuX3Jlc3VsdCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChyZXR1cm5lZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgcmV0dXJuZWRWYWx1
ZSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHVybmVkVmFsdWUu
X3N0YXRlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
cmV0dXJuZWRQcm9taXNlID0gcmV0dXJuZWRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdQcm9taXNlLl9jaGlsZHJlbi5wdXNoKHJldHVybmVkUHJvbWlzZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWRQcm9taXNlLl9wYXJlbnQgPSBuZXdQcm9taXNl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Byb21pc2UgPSByZXR1cm5lZFByb21p
c2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQcm9taXNlLl9yZXN1bHQgPSBy
ZXR1cm5lZFZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBuZXdQcm9taXNlLl9yZWplY3QoX3RoaXMuX3JlYXNvbik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5l
d1Byb21pc2U7CisgICAgfTsKKyAgICBJbnRlcm5hbFByb21pc2UucHJvdG90eXBlLl9tb3ZlQ2hp
bGRyZW4gPSBmdW5jdGlvbiAoY2hpbGRyZW4pIHsKKyAgICAgICAgdmFyIF9hOworICAgICAgICB2
YXIgX3RoaXMgPSB0aGlzOworICAgICAgICAoX2EgPSB0aGlzLl9jaGlsZHJlbikucHVzaC5hcHBs
eShfYSwgY2hpbGRyZW4uc3BsaWNlKDAsIGNoaWxkcmVuLmxlbmd0aCkpOworICAgICAgICB0aGlz
Ll9jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkgeworICAgICAgICAgICAgY2hpbGQu
X3BhcmVudCA9IF90aGlzOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09
PSBQcm9taXNlU3RhdGVzLkZ1bGZpbGxlZCkgeworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAw
LCBfYiA9IHRoaXMuX2NoaWxkcmVuOyBfaSA8IF9iLmxlbmd0aDsgX2krKykgeworICAgICAgICAg
ICAgICAgIHZhciBjaGlsZCA9IF9iW19pXTsKKyAgICAgICAgICAgICAgICBjaGlsZC5fcmVzb2x2
ZSh0aGlzLl9yZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKHRoaXMuX3N0YXRlID09PSBQcm9taXNlU3RhdGVzLlJlamVjdGVkKSB7CisgICAgICAgICAg
ICBmb3IgKHZhciBfYyA9IDAsIF9kID0gdGhpcy5fY2hpbGRyZW47IF9jIDwgX2QubGVuZ3RoOyBf
YysrKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gX2RbX2NdOworICAgICAgICAgICAg
ICAgIGNoaWxkLl9yZWplY3QodGhpcy5fcmVhc29uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgSW50ZXJuYWxQcm9taXNlLnByb3RvdHlwZS5fcmVzb2x2ZSA9IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSBQ
cm9taXNlU3RhdGVzLkZ1bGZpbGxlZDsKKyAgICAgICAgICAgIHZhciByZXR1cm5lZFZhbHVlID0g
bnVsbDsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbkZ1bGZpbGxlZCkgeworICAgICAgICAgICAg
ICAgIHJldHVybmVkVmFsdWUgPSB0aGlzLl9vbkZ1bGZpbGxlZCh2YWx1ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAocmV0dXJuZWRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHJldHVy
bmVkVmFsdWUgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV0dXJuZWRWYWx1ZS5f
c3RhdGUgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUcmFuc21pdCBj
aGlsZHJlbgorICAgICAgICAgICAgICAgICAgICB2YXIgcmV0dXJuZWRQcm9taXNlID0gcmV0dXJu
ZWRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWRQcm9taXNlLl9wYXJlbnQgPSB0
aGlzOworICAgICAgICAgICAgICAgICAgICByZXR1cm5lZFByb21pc2UuX21vdmVDaGlsZHJlbih0
aGlzLl9jaGlsZHJlbik7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcmV0dXJuZWRQcm9t
aXNlLl9yZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJldHVybmVkVmFsdWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fcmVzdWx0ID0gdmFsdWU7Cisg
ICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fY2hpbGRyZW47IF9pIDwgX2Eu
bGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gX2FbX2ldOworICAg
ICAgICAgICAgICAgIGNoaWxkLl9yZXNvbHZlKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA9IDA7CisgICAgICAgICAgICBkZWxldGUgdGhp
cy5fb25GdWxmaWxsZWQ7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fb25SZWplY3RlZDsKKyAg
ICAgICAgfQorICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgdGhpcy5fcmVqZWN0KGUs
IHRydWUpOworICAgICAgICB9CisgICAgfTsKKyAgICBJbnRlcm5hbFByb21pc2UucHJvdG90eXBl
Ll9yZWplY3QgPSBmdW5jdGlvbiAocmVhc29uLCBvbkxvY2FsVGhyb3cpIHsKKyAgICAgICAgaWYg
KG9uTG9jYWxUaHJvdyA9PT0gdm9pZCAwKSB7IG9uTG9jYWxUaHJvdyA9IGZhbHNlOyB9CisgICAg
ICAgIHRoaXMuX3N0YXRlID0gUHJvbWlzZVN0YXRlcy5SZWplY3RlZDsKKyAgICAgICAgdGhpcy5f
cmVhc29uID0gcmVhc29uOworICAgICAgICBpZiAodGhpcy5fb25SZWplY3RlZCAmJiAhb25Mb2Nh
bFRocm93KSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHRoaXMuX29uUmVq
ZWN0ZWQocmVhc29uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZWplY3RXYXNDb25zdW1lZCA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgICAgIHJlYXNvbiA9IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX2NoaWxkcmVuOyBfaSA8IF9hLmxlbmd0aDsgX2krKykg
eworICAgICAgICAgICAgdmFyIGNoaWxkID0gX2FbX2ldOworICAgICAgICAgICAgaWYgKHRoaXMu
X3JlamVjdFdhc0NvbnN1bWVkKSB7CisgICAgICAgICAgICAgICAgY2hpbGQuX3Jlc29sdmUobnVs
bCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBj
aGlsZC5fcmVqZWN0KHJlYXNvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fY2hpbGRyZW4ubGVuZ3RoID0gMDsKKyAgICAgICAgZGVsZXRlIHRoaXMuX29uRnVsZmls
bGVkOworICAgICAgICBkZWxldGUgdGhpcy5fb25SZWplY3RlZDsKKyAgICB9OworICAgIEludGVy
bmFsUHJvbWlzZS5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHZhciBuZXdQ
cm9taXNlID0gbmV3IEludGVybmFsUHJvbWlzZSgpOworICAgICAgICBuZXdQcm9taXNlLl9yZXNv
bHZlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG5ld1Byb21pc2U7CisgICAgfTsKKyAgICBJbnRl
cm5hbFByb21pc2UuX1JlZ2lzdGVyRm9yRnVsZmlsbG1lbnQgPSBmdW5jdGlvbiAocHJvbWlzZSwg
YWdyZWdhdG9yLCBpbmRleCkgeworICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICBhZ3JlZ2F0b3IucmVzdWx0c1tpbmRleF0gPSB2YWx1ZTsKKyAgICAg
ICAgICAgIGFncmVnYXRvci5jb3VudCsrOworICAgICAgICAgICAgaWYgKGFncmVnYXRvci5jb3Vu
dCA9PT0gYWdyZWdhdG9yLnRhcmdldCkgeworICAgICAgICAgICAgICAgIGFncmVnYXRvci5yb290
UHJvbWlzZS5fcmVzb2x2ZShhZ3JlZ2F0b3IucmVzdWx0cyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgeworICAg
ICAgICAgICAgaWYgKGFncmVnYXRvci5yb290UHJvbWlzZS5fc3RhdGUgIT09IFByb21pc2VTdGF0
ZXMuUmVqZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICBhZ3JlZ2F0b3Iucm9vdFByb21pc2UuX3Jl
amVjdChyZWFzb24pOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9OworICAgIElu
dGVybmFsUHJvbWlzZS5hbGwgPSBmdW5jdGlvbiAocHJvbWlzZXMpIHsKKyAgICAgICAgdmFyIG5l
d1Byb21pc2UgPSBuZXcgSW50ZXJuYWxQcm9taXNlKCk7CisgICAgICAgIHZhciBhZ3JlZ2F0b3Ig
PSBuZXcgRnVsRmlsbG1lbnRBZ3JlZ2F0b3IoKTsKKyAgICAgICAgYWdyZWdhdG9yLnRhcmdldCA9
IHByb21pc2VzLmxlbmd0aDsKKyAgICAgICAgYWdyZWdhdG9yLnJvb3RQcm9taXNlID0gbmV3UHJv
bWlzZTsKKyAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCkgeworICAgICAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IHByb21pc2VzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgICAgIEludGVybmFsUHJvbWlzZS5fUmVnaXN0ZXJGb3JGdWxmaWxsbWVudChwcm9taXNl
c1tpbmRleF0sIGFncmVnYXRvciwgaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbmV3UHJvbWlzZS5fcmVzb2x2ZShbXSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG5ld1Byb21pc2U7CisgICAgfTsKKyAgICBJbnRlcm5hbFBy
b21pc2UucmFjZSA9IGZ1bmN0aW9uIChwcm9taXNlcykgeworICAgICAgICB2YXIgbmV3UHJvbWlz
ZSA9IG5ldyBJbnRlcm5hbFByb21pc2UoKTsKKyAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCkg
eworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBwcm9taXNlc18xID0gcHJvbWlzZXM7IF9p
IDwgcHJvbWlzZXNfMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcHJvbWlz
ZSA9IHByb21pc2VzXzFbX2ldOworICAgICAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1Byb21pc2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld1Byb21pc2UuX3Jlc29sdmUodmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3UHJvbWlzZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfSwgZnVu
Y3Rpb24gKHJlYXNvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAobmV3UHJvbWlzZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3UHJvbWlzZS5fcmVqZWN0KHJlYXNvbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdQcm9taXNlID0gbnVsbDsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBuZXdQcm9taXNlOworICAgIH07CisgICAgcmV0dXJuIEludGVybmFsUHJvbWlz
ZTsKK30oKSk7CisvKioKKyAqIEhlbHBlciBjbGFzcyB0aGF0IHByb3ZpZGVzIGEgc21hbGwgcHJv
bWlzZSBwb2x5ZmlsbAorICovCit2YXIgUHJvbWlzZVBvbHlmaWxsID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFByb21pc2VQb2x5ZmlsbCgpIHsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogU3RhdGljIGZ1bmN0aW9uIHVzZWQgdG8gY2hlY2sgaWYgdGhlIHBvbHlm
aWxsIGlzIHJlcXVpcmVkCisgICAgICogSWYgdGhpcyBpcyB0aGUgY2FzZSB0aGVuIHRoZSBmdW5j
dGlvbiB3aWxsIGluamVjdCB0aGUgcG9seWZpbGwgdG8gd2luZG93LlByb21pc2UKKyAgICAgKiBA
cGFyYW0gZm9yY2UgZGVmaW5lcyBhIGJvb2xlYW4gdXNlZCB0byBmb3JjZSB0aGUgaW5qZWN0aW9u
IChtb3N0bHkgZm9yIHRlc3RpbmcgcHVycG9zZXMpCisgICAgICovCisgICAgUHJvbWlzZVBvbHlm
aWxsLkFwcGx5ID0gZnVuY3Rpb24gKGZvcmNlKSB7CisgICAgICAgIGlmIChmb3JjZSA9PT0gdm9p
ZCAwKSB7IGZvcmNlID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGZvcmNlIHx8IHR5cGVvZiBQcm9t
aXNlID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgdmFyIHJvb3QgPSB3aW5kb3c7Cisg
ICAgICAgICAgICByb290LlByb21pc2UgPSBJbnRlcm5hbFByb21pc2U7CisgICAgICAgIH0KKyAg
ICB9OworICAgIHJldHVybiBQcm9taXNlUG9seWZpbGw7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL01pc2MvcmV0cnlTdHJhdGVneS50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL3JldHJ5U3RyYXRlZ3kudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBSZXRyeVN0cmF0ZWd5ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJl
dHJ5U3RyYXRlZ3kiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJldHJ5U3RyYXRlZ3k7IH0pOworLyoq
CisgKiBDbGFzcyB1c2VkIHRvIGRlZmluZSBhIHJldHJ5IHN0cmF0ZWd5IHdoZW4gZXJyb3IgaGFw
cGVucyB3aGlsZSBsb2FkaW5nIGFzc2V0cworICovCit2YXIgUmV0cnlTdHJhdGVneSA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBSZXRyeVN0cmF0ZWd5KCkgewor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRlZmluZXMgYW4gZXhwb25l
bnRpYWwgYmFjayBvZmYgc3RyYXRlZ3kKKyAgICAgKiBAcGFyYW0gbWF4UmV0cmllcyBkZWZpbmVz
IHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzICgzIGJ5IGRlZmF1bHQpCisgICAgICogQHBh
cmFtIGJhc2VJbnRlcnZhbCBkZWZpbmVzIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHJldHJpZXMKKyAg
ICAgKiBAcmV0dXJucyB0aGUgc3RyYXRlZ3kgZnVuY3Rpb24gdG8gdXNlCisgICAgICovCisgICAg
UmV0cnlTdHJhdGVneS5FeHBvbmVudGlhbEJhY2tvZmYgPSBmdW5jdGlvbiAobWF4UmV0cmllcywg
YmFzZUludGVydmFsKSB7CisgICAgICAgIGlmIChtYXhSZXRyaWVzID09PSB2b2lkIDApIHsgbWF4
UmV0cmllcyA9IDM7IH0KKyAgICAgICAgaWYgKGJhc2VJbnRlcnZhbCA9PT0gdm9pZCAwKSB7IGJh
c2VJbnRlcnZhbCA9IDUwMDsgfQorICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHVybCwgcmVxdWVz
dCwgcmV0cnlJbmRleCkgeworICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzICE9PSAwIHx8
IHJldHJ5SW5kZXggPj0gbWF4UmV0cmllcyB8fCB1cmwuaW5kZXhPZigiZmlsZToiKSAhPT0gLTEp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gTWF0aC5wb3coMiwgcmV0cnlJbmRleCkgKiBiYXNlSW50ZXJ2YWw7CisgICAgICAg
IH07CisgICAgfTsKKyAgICByZXR1cm4gUmV0cnlTdHJhdGVneTsKK30oKSk7CisKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vTWlzYy9yZ2JkVGV4dHVyZVRvb2xzLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvcmdiZFRleHR1cmVU
b29scy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFJHQkRUZXh0dXJlVG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUkdCRFRleHR1cmVUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
UkdCRFRleHR1cmVUb29sczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9Q
b3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3Mu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19yZ2JkRGVjb2RlX2ZyYWdt
ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9TaGFkZXJzL3JnYmREZWNvZGUuZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9yZ2JkRGVjb2Rl
LmZyYWdtZW50LnRzIik7CisKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gaG9zdCBSR0JEIHRl
eHR1cmUgc3BlY2lmaWMgdXRpbGl0aWVzCisgKi8KK3ZhciBSR0JEVGV4dHVyZVRvb2xzID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFJHQkRUZXh0dXJlVG9vbHMo
KSB7CisgICAgfQorICAgIC8qKgorICAgICAqIEV4cGFuZCB0aGUgUkdCRCBUZXh0dXJlIGZyb20g
UkdCRCB0byBIYWxmIEZsb2F0IGlmIHBvc3NpYmxlLgorICAgICAqIEBwYXJhbSB0ZXh0dXJlIHRo
ZSB0ZXh0dXJlIHRvIGV4cGFuZC4KKyAgICAgKi8KKyAgICBSR0JEVGV4dHVyZVRvb2xzLkV4cGFu
ZFJHQkRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAgICAgICAgdmFyIGludGVybmFs
VGV4dHVyZSA9IHRleHR1cmUuX3RleHR1cmU7CisgICAgICAgIGlmICghaW50ZXJuYWxUZXh0dXJl
IHx8ICF0ZXh0dXJlLmlzUkdCRCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHRleHR1cmUub25Mb2FkT2JzZXJ2YWJsZS5hZGRPbmNlKGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIC8vIEdldHMgZXZlcnl0aGluZyByZWFkeS4KKyAgICAgICAgICAgIHZhciBlbmdp
bmUgPSBpbnRlcm5hbFRleHR1cmUuZ2V0RW5naW5lKCk7CisgICAgICAgICAgICB2YXIgY2FwcyA9
IGVuZ2luZS5nZXRDYXBzKCk7CisgICAgICAgICAgICB2YXIgZXhwYW5kVGV4dHVyZSA9IGZhbHNl
OworICAgICAgICAgICAgLy8gSWYgaGFsZiBmbG9hdCBhdmFpbGFibGUgd2UgY2FuIHVuY29tcHJl
c3MgdGhlIHRleHR1cmUKKyAgICAgICAgICAgIGlmIChjYXBzLnRleHR1cmVIYWxmRmxvYXRSZW5k
ZXIgJiYgY2Fwcy50ZXh0dXJlSGFsZkZsb2F0TGluZWFyRmlsdGVyaW5nKSB7CisgICAgICAgICAg
ICAgICAgZXhwYW5kVGV4dHVyZSA9IHRydWU7CisgICAgICAgICAgICAgICAgaW50ZXJuYWxUZXh0
dXJlLnR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfSEFMRl9GTE9BVDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIElmIGZ1bGwgZmxvYXQgYXZhaWxhYmxlIHdlIGNhbiB1bmNvbXByZXNzIHRo
ZSB0ZXh0dXJlCisgICAgICAgICAgICBlbHNlIGlmIChjYXBzLnRleHR1cmVGbG9hdFJlbmRlciAm
JiBjYXBzLnRleHR1cmVGbG9hdExpbmVhckZpbHRlcmluZykgeworICAgICAgICAgICAgICAgIGV4
cGFuZFRleHR1cmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGludGVybmFsVGV4dHVyZS50eXBl
ID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbnN0
YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
RXhwYW5kIHRoZSB0ZXh0dXJlIGlmIHBvc3NpYmxlCisgICAgICAgICAgICBpZiAoZXhwYW5kVGV4
dHVyZSkgeworICAgICAgICAgICAgICAgIC8vIERvIG5vdCB1c2UgZHVyaW5nIGRlY29kZS4KKyAg
ICAgICAgICAgICAgICBpbnRlcm5hbFRleHR1cmUuaXNSZWFkeSA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIC8vIFNpbXBseSBydW4gdGhyb3VnaCB0aGUgZGVjb2RlIFBQLgorICAgICAgICAgICAg
ICAgIHZhciByZ2JkUG9zdFByb2Nlc3NfMSA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vz
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb3N0UHJvY2VzcyJdKCJyZ2JkRGVjb2Rl
IiwgInJnYmREZWNvZGUiLCBudWxsLCBudWxsLCAxLCBudWxsLCBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9UUklMSU5F
QVJfU0FNUExJTkdNT0RFLCBlbmdpbmUsIGZhbHNlLCB1bmRlZmluZWQsIGludGVybmFsVGV4dHVy
ZS50eXBlLCB1bmRlZmluZWQsIG51bGwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpbnRlcm5h
bFRleHR1cmUuX2lzUkdCRCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGludGVybmFsVGV4dHVy
ZS5pbnZlcnRZID0gZmFsc2U7CisgICAgICAgICAgICAgICAgLy8gSG9sZCB0aGUgb3V0cHV0IG9m
IHRoZSBkZWNvZGluZy4KKyAgICAgICAgICAgICAgICB2YXIgZXhwYW5kZWRUZXh0dXJlXzEgPSBl
bmdpbmUuY3JlYXRlUmVuZGVyVGFyZ2V0VGV4dHVyZShpbnRlcm5hbFRleHR1cmUud2lkdGgsIHsK
KyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVEZXB0aEJ1ZmZlcjogZmFsc2UsCisgICAgICAg
ICAgICAgICAgICAgIGdlbmVyYXRlTWlwTWFwczogZmFsc2UsCisgICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRlU3RlbmNpbEJ1ZmZlcjogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIHNhbXBs
aW5nTW9kZTogaW50ZXJuYWxUZXh0dXJlLnNhbXBsaW5nTW9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgdHlwZTogaW50ZXJuYWxUZXh0dXJlLnR5cGUsCisgICAgICAgICAgICAgICAgICAgIGZvcm1h
dDogX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbnN0
YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCQQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIHJnYmRQb3N0UHJvY2Vzc18xLmdldEVmZmVjdCgpLmV4ZWN1dGVXaGVuQ29tcGlsZWQo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAvLyBQUCBSZW5kZXIgUGFzcworICAg
ICAgICAgICAgICAgICAgICByZ2JkUG9zdFByb2Nlc3NfMS5vbkFwcGx5ID0gZnVuY3Rpb24gKGVm
ZmVjdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0Ll9iaW5kVGV4dHVyZSgidGV4
dHVyZVNhbXBsZXIiLCBpbnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZWZmZWN0LnNldEZsb2F0Migic2NhbGUiLCAxLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAgICAgZW5naW5lLnNjZW5lc1swXS5wb3N0UHJvY2Vzc01hbmFnZXIu
ZGlyZWN0UmVuZGVyKFtyZ2JkUG9zdFByb2Nlc3NfMV0sIGV4cGFuZGVkVGV4dHVyZV8xLCB0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYW51cAorICAgICAgICAgICAgICAgICAgICBl
bmdpbmUucmVzdG9yZURlZmF1bHRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBl
bmdpbmUuX3JlbGVhc2VUZXh0dXJlKGludGVybmFsVGV4dHVyZSk7CisgICAgICAgICAgICAgICAg
ICAgIGVuZ2luZS5fcmVsZWFzZUZyYW1lYnVmZmVyT2JqZWN0cyhleHBhbmRlZFRleHR1cmVfMSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChyZ2JkUG9zdFByb2Nlc3NfMSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmdiZFBvc3RQcm9jZXNzXzEuZGlzcG9zZSgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIEludGVybmFsIFN3YXAKKyAgICAgICAg
ICAgICAgICAgICAgZXhwYW5kZWRUZXh0dXJlXzEuX3N3YXBBbmREaWUoaW50ZXJuYWxUZXh0dXJl
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVhZHkgdG8gZ2V0IHJvbGxpbmcgYWdhaW4uCisg
ICAgICAgICAgICAgICAgICAgIGludGVybmFsVGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBy
ZXR1cm4gUkdCRFRleHR1cmVUb29sczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vTWlzYy9zY2VuZU9wdGltaXplci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vTWlzYy9zY2VuZU9wdGltaXplci50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTY2Vu
ZU9wdGltaXphdGlvbiwgVGV4dHVyZU9wdGltaXphdGlvbiwgSGFyZHdhcmVTY2FsaW5nT3B0aW1p
emF0aW9uLCBTaGFkb3dzT3B0aW1pemF0aW9uLCBQb3N0UHJvY2Vzc2VzT3B0aW1pemF0aW9uLCBM
ZW5zRmxhcmVzT3B0aW1pemF0aW9uLCBDdXN0b21PcHRpbWl6YXRpb24sIFBhcnRpY2xlc09wdGlt
aXphdGlvbiwgUmVuZGVyVGFyZ2V0c09wdGltaXphdGlvbiwgTWVyZ2VNZXNoZXNPcHRpbWl6YXRp
b24sIFNjZW5lT3B0aW1pemVyT3B0aW9ucywgU2NlbmVPcHRpbWl6ZXIgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVPcHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFNjZW5lT3B0aW1pemF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRleHR1cmVP
cHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRleHR1cmVPcHRpbWl6YXRpb247IH0p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiSGFyZHdhcmVTY2FsaW5nT3B0aW1pemF0aW9uIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBIYXJkd2FyZVNjYWxpbmdPcHRpbWl6YXRpb247IH0pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU2hhZG93c09wdGltaXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2hhZG93
c09wdGltaXphdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3N0UHJvY2Vzc2VzT3B0aW1p
emF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQb3N0UHJvY2Vzc2VzT3B0aW1pemF0aW9uOyB9
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkxlbnNGbGFyZXNPcHRpbWl6YXRpb24iLCBmdW5jdGlvbigp
IHsgcmV0dXJuIExlbnNGbGFyZXNPcHRpbWl6YXRpb247IH0pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Q3VzdG9tT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDdXN0b21PcHRpbWl6YXRp
b247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFydGljbGVzT3B0aW1pemF0aW9uIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBQYXJ0aWNsZXNPcHRpbWl6YXRpb247IH0pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUmVuZGVyVGFyZ2V0c09wdGltaXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmVuZGVy
VGFyZ2V0c09wdGltaXphdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNZXJnZU1lc2hlc09w
dGltaXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWVyZ2VNZXNoZXNPcHRpbWl6YXRpb247
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVPcHRpbWl6ZXJPcHRpb25zIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBTY2VuZU9wdGltaXplck9wdGlvbnM7IH0pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U2NlbmVPcHRpbWl6ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNjZW5lT3B0aW1pemVyOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90
c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19l
bmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3Jl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvbWVz
aCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9vYnNl
cnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisKKworCisKKy8q
KgorICogRGVmaW5lcyB0aGUgcm9vdCBjbGFzcyB1c2VkIHRvIGNyZWF0ZSBzY2VuZSBvcHRpbWl6
YXRpb24gdG8gdXNlIHdpdGggU2NlbmVPcHRpbWl6ZXIKKyAqIEBkZXNjcmlwdGlvbiBNb3JlIGRl
dGFpbHMgYXQgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3NjZW5l
b3B0aW1pemVyCisgKi8KK3ZhciBTY2VuZU9wdGltaXphdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBTY2VuZU9wdGltaXphdGlv
biBvYmplY3QKKyAgICAgKiBAcGFyYW0gcHJpb3JpdHkgZGVmaW5lcyB0aGUgcHJpb3JpdHkgb2Yg
dGhpcyBvcHRpbWl6YXRpb24gKDAgYnkgZGVmYXVsdCB3aGljaCBtZWFucyBmaXJzdCBpbiB0aGUg
bGlzdCkKKyAgICAgKiBAcGFyYW0gZGVzYyBkZWZpbmVzIHRoZSBkZXNjcmlwdGlvbiBhc3NvY2lh
dGVkIHdpdGggdGhlIG9wdGltaXphdGlvbgorICAgICAqLworICAgIGZ1bmN0aW9uIFNjZW5lT3B0
aW1pemF0aW9uKAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIHByaW9yaXR5IG9mIHRoaXMg
b3B0aW1pemF0aW9uICgwIGJ5IGRlZmF1bHQgd2hpY2ggbWVhbnMgZmlyc3QgaW4gdGhlIGxpc3Qp
CisgICAgICovCisgICAgcHJpb3JpdHkpIHsKKyAgICAgICAgaWYgKHByaW9yaXR5ID09PSB2b2lk
IDApIHsgcHJpb3JpdHkgPSAwOyB9CisgICAgICAgIHRoaXMucHJpb3JpdHkgPSBwcmlvcml0eTsK
KyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBhY3Rp
b24gZXhlY3V0ZWQgYnkgdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uCisgICAgICogQHJldHVybnMg
ZGVzY3JpcHRpb24gc3RyaW5nCisgICAgICovCisgICAgU2NlbmVPcHRpbWl6YXRpb24ucHJvdG90
eXBlLmdldERlc2NyaXB0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIiI7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRo
ZSBTY2VuZU9wdGltaXplciB3aGVuIGl0cyBwcmlvcml0eSBpcyByZWFjaGVkIGluIG9yZGVyIHRv
IGFwcGx5IHRoZSBjaGFuZ2UgcmVxdWlyZWQgYnkgdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uCisg
ICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGN1cnJlbnQgc2NlbmUgd2hlcmUgdG8gYXBw
bHkgdGhpcyBvcHRpbWl6YXRpb24KKyAgICAgKiBAcGFyYW0gb3B0aW1pemVyIGRlZmluZXMgdGhl
IGN1cnJlbnQgb3B0aW1pemVyCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBldmVyeXRoaW5nIHRo
YXQgY2FuIGJlIGRvbmUgd2FzIGFwcGxpZWQKKyAgICAgKi8KKyAgICBTY2VuZU9wdGltaXphdGlv
bi5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAoc2NlbmUsIG9wdGltaXplcikgeworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIHJldHVybiBTY2VuZU9wdGltaXphdGlvbjsKK30o
KSk7CisKKy8qKgorICogRGVmaW5lcyBhbiBvcHRpbWl6YXRpb24gdXNlZCB0byByZWR1Y2UgdGhl
IHNpemUgb2YgcmVuZGVyIHRhcmdldCB0ZXh0dXJlcworICogQGRlc2NyaXB0aW9uIE1vcmUgZGV0
YWlscyBhdCBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vfc2NlbmVv
cHRpbWl6ZXIKKyAqLwordmFyIFRleHR1cmVPcHRpbWl6YXRpb24gPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19leHRlbmRzIl0oVGV4dHVyZU9wdGltaXphdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIHRoZSBUZXh0dXJlT3B0aW1pemF0aW9uIG9iamVjdAorICAgICAqIEBwYXJh
bSBwcmlvcml0eSBkZWZpbmVzIHRoZSBwcmlvcml0eSBvZiB0aGlzIG9wdGltaXphdGlvbiAoMCBi
eSBkZWZhdWx0IHdoaWNoIG1lYW5zIGZpcnN0IGluIHRoZSBsaXN0KQorICAgICAqIEBwYXJhbSBt
YXhpbXVtU2l6ZSBkZWZpbmVzIHRoZSBtYXhpbXVtIHNpemVkIGFsbG93ZWQgZm9yIHRleHR1cmVz
ICgxMDI0IGlzIHRoZSBkZWZhdWx0IHZhbHVlKS4gSWYgYSB0ZXh0dXJlIGlzIGJpZ2dlciwgaXQg
d2lsbCBiZSBzY2FsZWQgZG93biB1c2luZyBhIGZhY3RvciBkZWZpbmVkIGJ5IHRoZSBzdGVwIHBh
cmFtZXRlcgorICAgICAqIEBwYXJhbSBzdGVwIGRlZmluZXMgdGhlIGZhY3RvciAoMC41IGJ5IGRl
ZmF1bHQpIHVzZWQgdG8gc2NhbGUgZG93biB0ZXh0dXJlcyBiaWdnZXIgdGhhbiBtYXhpbXVtIHNp
emVkIGFsbG93ZWQuCisgICAgICovCisgICAgZnVuY3Rpb24gVGV4dHVyZU9wdGltaXphdGlvbigK
KyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBwcmlvcml0eSBvZiB0aGlzIG9wdGltaXphdGlv
biAoMCBieSBkZWZhdWx0IHdoaWNoIG1lYW5zIGZpcnN0IGluIHRoZSBsaXN0KQorICAgICAqLwor
ICAgIHByaW9yaXR5LCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBtYXhpbXVtIHNpemVk
IGFsbG93ZWQgZm9yIHRleHR1cmVzICgxMDI0IGlzIHRoZSBkZWZhdWx0IHZhbHVlKS4gSWYgYSB0
ZXh0dXJlIGlzIGJpZ2dlciwgaXQgd2lsbCBiZSBzY2FsZWQgZG93biB1c2luZyBhIGZhY3RvciBk
ZWZpbmVkIGJ5IHRoZSBzdGVwIHBhcmFtZXRlcgorICAgICAqLworICAgIG1heGltdW1TaXplLCAK
KyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBmYWN0b3IgKDAuNSBieSBkZWZhdWx0KSB1c2Vk
IHRvIHNjYWxlIGRvd24gdGV4dHVyZXMgYmlnZ2VyIHRoYW4gbWF4aW11bSBzaXplZCBhbGxvd2Vk
LgorICAgICAqLworICAgIHN0ZXApIHsKKyAgICAgICAgaWYgKHByaW9yaXR5ID09PSB2b2lkIDAp
IHsgcHJpb3JpdHkgPSAwOyB9CisgICAgICAgIGlmIChtYXhpbXVtU2l6ZSA9PT0gdm9pZCAwKSB7
IG1heGltdW1TaXplID0gMTAyNDsgfQorICAgICAgICBpZiAoc3RlcCA9PT0gdm9pZCAwKSB7IHN0
ZXAgPSAwLjU7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJpb3Jp
dHkpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnByaW9yaXR5ID0gcHJpb3JpdHk7CisgICAgICAg
IF90aGlzLm1heGltdW1TaXplID0gbWF4aW11bVNpemU7CisgICAgICAgIF90aGlzLnN0ZXAgPSBz
dGVwOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMg
YSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgYWN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSBjdXJyZW50IG9w
dGltaXphdGlvbgorICAgICAqIEByZXR1cm5zIGRlc2NyaXB0aW9uIHN0cmluZworICAgICAqLwor
ICAgIFRleHR1cmVPcHRpbWl6YXRpb24ucHJvdG90eXBlLmdldERlc2NyaXB0aW9uID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gIlJlZHVjaW5nIHJlbmRlciB0YXJnZXQgdGV4dHVyZSBz
aXplIHRvICIgKyB0aGlzLm1heGltdW1TaXplOworICAgIH07CisgICAgLyoqCisgICAgICogVGhp
cyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSB0aGUgU2NlbmVPcHRpbWl6ZXIgd2hlbiBpdHMg
cHJpb3JpdHkgaXMgcmVhY2hlZCBpbiBvcmRlciB0byBhcHBseSB0aGUgY2hhbmdlIHJlcXVpcmVk
IGJ5IHRoZSBjdXJyZW50IG9wdGltaXphdGlvbgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVz
IHRoZSBjdXJyZW50IHNjZW5lIHdoZXJlIHRvIGFwcGx5IHRoaXMgb3B0aW1pemF0aW9uCisgICAg
ICogQHBhcmFtIG9wdGltaXplciBkZWZpbmVzIHRoZSBjdXJyZW50IG9wdGltaXplcgorICAgICAq
IEByZXR1cm5zIHRydWUgaWYgZXZlcnl0aGluZyB0aGF0IGNhbiBiZSBkb25lIHdhcyBhcHBsaWVk
CisgICAgICovCisgICAgVGV4dHVyZU9wdGltaXphdGlvbi5wcm90b3R5cGUuYXBwbHkgPSBmdW5j
dGlvbiAoc2NlbmUsIG9wdGltaXplcikgeworICAgICAgICB2YXIgYWxsRG9uZSA9IHRydWU7Cisg
ICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzY2VuZS50ZXh0dXJlcy5sZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gc2NlbmUudGV4dHVyZXNbaW5k
ZXhdOworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLmNhblJlc2NhbGUgfHwgdGV4dHVyZS5nZXRD
b250ZXh0KSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB2YXIgY3VycmVudFNpemUgPSB0ZXh0dXJlLmdldFNpemUoKTsKKyAgICAgICAgICAg
IHZhciBtYXhEaW1lbnNpb24gPSBNYXRoLm1heChjdXJyZW50U2l6ZS53aWR0aCwgY3VycmVudFNp
emUuaGVpZ2h0KTsKKyAgICAgICAgICAgIGlmIChtYXhEaW1lbnNpb24gPiB0aGlzLm1heGltdW1T
aXplKSB7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5zY2FsZSh0aGlzLnN0ZXApOworICAgICAg
ICAgICAgICAgIGFsbERvbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gYWxsRG9uZTsKKyAgICB9OworICAgIHJldHVybiBUZXh0dXJlT3B0aW1pemF0
aW9uOworfShTY2VuZU9wdGltaXphdGlvbikpOworCisvKioKKyAqIERlZmluZXMgYW4gb3B0aW1p
emF0aW9uIHVzZWQgdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIHJlbmRlcmluZyByZXNvbHV0
aW9uCisgKiBAZGVzY3JpcHRpb24gTW9yZSBkZXRhaWxzIGF0IGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9zY2VuZW9wdGltaXplcgorICovCit2YXIgSGFyZHdhcmVT
Y2FsaW5nT3B0aW1pemF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgewor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEhhcmR3
YXJlU2NhbGluZ09wdGltaXphdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IHRoZSBIYXJkd2FyZVNjYWxpbmdPcHRpbWl6YXRpb24gb2JqZWN0CisgICAgICogQHBhcmFtIHBy
aW9yaXR5IGRlZmluZXMgdGhlIHByaW9yaXR5IG9mIHRoaXMgb3B0aW1pemF0aW9uICgwIGJ5IGRl
ZmF1bHQgd2hpY2ggbWVhbnMgZmlyc3QgaW4gdGhlIGxpc3QpCisgICAgICogQHBhcmFtIG1heGlt
dW1TY2FsZSBkZWZpbmVzIHRoZSBtYXhpbXVtIHNjYWxlIHRvIHVzZSAoMiBieSBkZWZhdWx0KQor
ICAgICAqIEBwYXJhbSBzdGVwIGRlZmluZXMgdGhlIHN0ZXAgdG8gdXNlIGJldHdlZW4gdHdvIHBh
c3NlcyAoMC41IGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgZnVuY3Rpb24gSGFyZHdhcmVTY2Fs
aW5nT3B0aW1pemF0aW9uKAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIHByaW9yaXR5IG9m
IHRoaXMgb3B0aW1pemF0aW9uICgwIGJ5IGRlZmF1bHQgd2hpY2ggbWVhbnMgZmlyc3QgaW4gdGhl
IGxpc3QpCisgICAgICovCisgICAgcHJpb3JpdHksIAorICAgIC8qKgorICAgICAqIERlZmluZXMg
dGhlIG1heGltdW0gc2NhbGUgdG8gdXNlICgyIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgbWF4
aW11bVNjYWxlLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBzdGVwIHRvIHVzZSBiZXR3
ZWVuIHR3byBwYXNzZXMgKDAuNSBieSBkZWZhdWx0KQorICAgICAqLworICAgIHN0ZXApIHsKKyAg
ICAgICAgaWYgKHByaW9yaXR5ID09PSB2b2lkIDApIHsgcHJpb3JpdHkgPSAwOyB9CisgICAgICAg
IGlmIChtYXhpbXVtU2NhbGUgPT09IHZvaWQgMCkgeyBtYXhpbXVtU2NhbGUgPSAyOyB9CisgICAg
ICAgIGlmIChzdGVwID09PSB2b2lkIDApIHsgc3RlcCA9IDAuMjU7IH0KKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJpb3JpdHkpIHx8IHRoaXM7CisgICAgICAgIF90aGlz
LnByaW9yaXR5ID0gcHJpb3JpdHk7CisgICAgICAgIF90aGlzLm1heGltdW1TY2FsZSA9IG1heGlt
dW1TY2FsZTsKKyAgICAgICAgX3RoaXMuc3RlcCA9IHN0ZXA7CisgICAgICAgIF90aGlzLl9jdXJy
ZW50U2NhbGUgPSAtMTsKKyAgICAgICAgX3RoaXMuX2RpcmVjdGlvbk9mZnNldCA9IDE7CisgICAg
ICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyBk
ZXNjcmliaW5nIHRoZSBhY3Rpb24gZXhlY3V0ZWQgYnkgdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9u
CisgICAgICogQHJldHVybiBkZXNjcmlwdGlvbiBzdHJpbmcKKyAgICAgKi8KKyAgICBIYXJkd2Fy
ZVNjYWxpbmdPcHRpbWl6YXRpb24ucHJvdG90eXBlLmdldERlc2NyaXB0aW9uID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gIlNldHRpbmcgaGFyZHdhcmUgc2NhbGluZyBsZXZlbCB0byAi
ICsgdGhpcy5fY3VycmVudFNjYWxlOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5j
dGlvbiB3aWxsIGJlIGNhbGxlZCBieSB0aGUgU2NlbmVPcHRpbWl6ZXIgd2hlbiBpdHMgcHJpb3Jp
dHkgaXMgcmVhY2hlZCBpbiBvcmRlciB0byBhcHBseSB0aGUgY2hhbmdlIHJlcXVpcmVkIGJ5IHRo
ZSBjdXJyZW50IG9wdGltaXphdGlvbgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBj
dXJyZW50IHNjZW5lIHdoZXJlIHRvIGFwcGx5IHRoaXMgb3B0aW1pemF0aW9uCisgICAgICogQHBh
cmFtIG9wdGltaXplciBkZWZpbmVzIHRoZSBjdXJyZW50IG9wdGltaXplcgorICAgICAqIEByZXR1
cm5zIHRydWUgaWYgZXZlcnl0aGluZyB0aGF0IGNhbiBiZSBkb25lIHdhcyBhcHBsaWVkCisgICAg
ICovCisgICAgSGFyZHdhcmVTY2FsaW5nT3B0aW1pemF0aW9uLnByb3RvdHlwZS5hcHBseSA9IGZ1
bmN0aW9uIChzY2VuZSwgb3B0aW1pemVyKSB7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2Nh
bGUgPT09IC0xKSB7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50U2NhbGUgPSBzY2VuZS5nZXRF
bmdpbmUoKS5nZXRIYXJkd2FyZVNjYWxpbmdMZXZlbCgpOworICAgICAgICAgICAgaWYgKHRoaXMu
X2N1cnJlbnRTY2FsZSA+IHRoaXMubWF4aW11bVNjYWxlKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fZGlyZWN0aW9uT2Zmc2V0ID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fY3VycmVudFNjYWxlICs9IHRoaXMuX2RpcmVjdGlvbk9mZnNldCAqIHRoaXMuc3Rl
cDsKKyAgICAgICAgc2NlbmUuZ2V0RW5naW5lKCkuc2V0SGFyZHdhcmVTY2FsaW5nTGV2ZWwodGhp
cy5fY3VycmVudFNjYWxlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RpcmVjdGlvbk9mZnNldCA9
PT0gMSA/IHRoaXMuX2N1cnJlbnRTY2FsZSA+PSB0aGlzLm1heGltdW1TY2FsZSA6IHRoaXMuX2N1
cnJlbnRTY2FsZSA8PSB0aGlzLm1heGltdW1TY2FsZTsKKyAgICB9OworICAgIHJldHVybiBIYXJk
d2FyZVNjYWxpbmdPcHRpbWl6YXRpb247Cit9KFNjZW5lT3B0aW1pemF0aW9uKSk7CisKKy8qKgor
ICogRGVmaW5lcyBhbiBvcHRpbWl6YXRpb24gdXNlZCB0byByZW1vdmUgc2hhZG93cworICogQGRl
c2NyaXB0aW9uIE1vcmUgZGV0YWlscyBhdCBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3Rv
L2hvd190b191c2Vfc2NlbmVvcHRpbWl6ZXIKKyAqLwordmFyIFNoYWRvd3NPcHRpbWl6YXRpb24g
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU2hhZG93c09wdGltaXphdGlvbiwgX3N1
cGVyKTsKKyAgICBmdW5jdGlvbiBTaGFkb3dzT3B0aW1pemF0aW9uKCkgeworICAgICAgICByZXR1
cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRo
aXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUg
YWN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSBjdXJyZW50IG9wdGltaXphdGlvbgorICAgICAqIEByZXR1
cm4gZGVzY3JpcHRpb24gc3RyaW5nCisgICAgICovCisgICAgU2hhZG93c09wdGltaXphdGlvbi5w
cm90b3R5cGUuZ2V0RGVzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAi
VHVybmluZyBzaGFkb3dzIG9uL29mZiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1
bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBTY2VuZU9wdGltaXplciB3aGVuIGl0cyBwcmlv
cml0eSBpcyByZWFjaGVkIGluIG9yZGVyIHRvIGFwcGx5IHRoZSBjaGFuZ2UgcmVxdWlyZWQgYnkg
dGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhl
IGN1cnJlbnQgc2NlbmUgd2hlcmUgdG8gYXBwbHkgdGhpcyBvcHRpbWl6YXRpb24KKyAgICAgKiBA
cGFyYW0gb3B0aW1pemVyIGRlZmluZXMgdGhlIGN1cnJlbnQgb3B0aW1pemVyCisgICAgICogQHJl
dHVybnMgdHJ1ZSBpZiBldmVyeXRoaW5nIHRoYXQgY2FuIGJlIGRvbmUgd2FzIGFwcGxpZWQKKyAg
ICAgKi8KKyAgICBTaGFkb3dzT3B0aW1pemF0aW9uLnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9u
IChzY2VuZSwgb3B0aW1pemVyKSB7CisgICAgICAgIHNjZW5lLnNoYWRvd3NFbmFibGVkID0gb3B0
aW1pemVyLmlzSW5JbXByb3ZlbWVudE1vZGU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07
CisgICAgcmV0dXJuIFNoYWRvd3NPcHRpbWl6YXRpb247Cit9KFNjZW5lT3B0aW1pemF0aW9uKSk7
CisKKy8qKgorICogRGVmaW5lcyBhbiBvcHRpbWl6YXRpb24gdXNlZCB0byB0dXJuIHBvc3QtcHJv
Y2Vzc2VzIG9mZgorICogQGRlc2NyaXB0aW9uIE1vcmUgZGV0YWlscyBhdCBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vfc2NlbmVvcHRpbWl6ZXIKKyAqLwordmFyIFBv
c3RQcm9jZXNzZXNPcHRpbWl6YXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVy
KSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0o
UG9zdFByb2Nlc3Nlc09wdGltaXphdGlvbiwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBQb3N0UHJv
Y2Vzc2VzT3B0aW1pemF0aW9uKCkgeworICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYm
IF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CisgICAgfQorICAgIC8qKgor
ICAgICAqIEdldHMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgYWN0aW9uIGV4ZWN1dGVkIGJ5IHRo
ZSBjdXJyZW50IG9wdGltaXphdGlvbgorICAgICAqIEByZXR1cm4gZGVzY3JpcHRpb24gc3RyaW5n
CisgICAgICovCisgICAgUG9zdFByb2Nlc3Nlc09wdGltaXphdGlvbi5wcm90b3R5cGUuZ2V0RGVz
Y3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiVHVybmluZyBwb3N0LXBy
b2Nlc3NlcyBvbi9vZmYiOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiB3
aWxsIGJlIGNhbGxlZCBieSB0aGUgU2NlbmVPcHRpbWl6ZXIgd2hlbiBpdHMgcHJpb3JpdHkgaXMg
cmVhY2hlZCBpbiBvcmRlciB0byBhcHBseSB0aGUgY2hhbmdlIHJlcXVpcmVkIGJ5IHRoZSBjdXJy
ZW50IG9wdGltaXphdGlvbgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBjdXJyZW50
IHNjZW5lIHdoZXJlIHRvIGFwcGx5IHRoaXMgb3B0aW1pemF0aW9uCisgICAgICogQHBhcmFtIG9w
dGltaXplciBkZWZpbmVzIHRoZSBjdXJyZW50IG9wdGltaXplcgorICAgICAqIEByZXR1cm5zIHRy
dWUgaWYgZXZlcnl0aGluZyB0aGF0IGNhbiBiZSBkb25lIHdhcyBhcHBsaWVkCisgICAgICovCisg
ICAgUG9zdFByb2Nlc3Nlc09wdGltaXphdGlvbi5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAo
c2NlbmUsIG9wdGltaXplcikgeworICAgICAgICBzY2VuZS5wb3N0UHJvY2Vzc2VzRW5hYmxlZCA9
IG9wdGltaXplci5pc0luSW1wcm92ZW1lbnRNb2RlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9OworICAgIHJldHVybiBQb3N0UHJvY2Vzc2VzT3B0aW1pemF0aW9uOworfShTY2VuZU9wdGlt
aXphdGlvbikpOworCisvKioKKyAqIERlZmluZXMgYW4gb3B0aW1pemF0aW9uIHVzZWQgdG8gdHVy
biBsZW5zIGZsYXJlcyBvZmYKKyAqIEBkZXNjcmlwdGlvbiBNb3JlIGRldGFpbHMgYXQgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3NjZW5lb3B0aW1pemVyCisgKi8K
K3ZhciBMZW5zRmxhcmVzT3B0aW1pemF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9z
dXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5k
cyJdKExlbnNGbGFyZXNPcHRpbWl6YXRpb24sIF9zdXBlcik7CisgICAgZnVuY3Rpb24gTGVuc0Zs
YXJlc09wdGltaXphdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBf
c3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBHZXRzIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGFjdGlvbiBleGVjdXRlZCBieSB0aGUg
Y3VycmVudCBvcHRpbWl6YXRpb24KKyAgICAgKiBAcmV0dXJuIGRlc2NyaXB0aW9uIHN0cmluZwor
ICAgICAqLworICAgIExlbnNGbGFyZXNPcHRpbWl6YXRpb24ucHJvdG90eXBlLmdldERlc2NyaXB0
aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlR1cm5pbmcgbGVucyBmbGFyZXMg
b24vb2ZmIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBj
YWxsZWQgYnkgdGhlIFNjZW5lT3B0aW1pemVyIHdoZW4gaXRzIHByaW9yaXR5IGlzIHJlYWNoZWQg
aW4gb3JkZXIgdG8gYXBwbHkgdGhlIGNoYW5nZSByZXF1aXJlZCBieSB0aGUgY3VycmVudCBvcHRp
bWl6YXRpb24KKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgY3VycmVudCBzY2VuZSB3
aGVyZSB0byBhcHBseSB0aGlzIG9wdGltaXphdGlvbgorICAgICAqIEBwYXJhbSBvcHRpbWl6ZXIg
ZGVmaW5lcyB0aGUgY3VycmVudCBvcHRpbWl6ZXIKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGV2
ZXJ5dGhpbmcgdGhhdCBjYW4gYmUgZG9uZSB3YXMgYXBwbGllZAorICAgICAqLworICAgIExlbnNG
bGFyZXNPcHRpbWl6YXRpb24ucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHNjZW5lLCBvcHRp
bWl6ZXIpIHsKKyAgICAgICAgc2NlbmUubGVuc0ZsYXJlc0VuYWJsZWQgPSBvcHRpbWl6ZXIuaXNJ
bkltcHJvdmVtZW50TW9kZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICByZXR1
cm4gTGVuc0ZsYXJlc09wdGltaXphdGlvbjsKK30oU2NlbmVPcHRpbWl6YXRpb24pKTsKKworLyoq
CisgKiBEZWZpbmVzIGFuIG9wdGltaXphdGlvbiBiYXNlZCBvbiB1c2VyIGRlZmluZWQgY2FsbGJh
Y2suCisgKiBAZGVzY3JpcHRpb24gTW9yZSBkZXRhaWxzIGF0IGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9zY2VuZW9wdGltaXplcgorICovCit2YXIgQ3VzdG9tT3B0
aW1pemF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEN1c3RvbU9wdGltaXph
dGlvbiwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBDdXN0b21PcHRpbWl6YXRpb24oKSB7CisgICAg
ICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cykgfHwgdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyBkZXNjcmli
aW5nIHRoZSBhY3Rpb24gZXhlY3V0ZWQgYnkgdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uCisgICAg
ICogQHJldHVybnMgZGVzY3JpcHRpb24gc3RyaW5nCisgICAgICovCisgICAgQ3VzdG9tT3B0aW1p
emF0aW9uLnByb3RvdHlwZS5nZXREZXNjcmlwdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKHRoaXMub25HZXREZXNjcmlwdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMub25H
ZXREZXNjcmlwdGlvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiUnVubmluZyB1c2Vy
IGRlZmluZWQgY2FsbGJhY2siOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlv
biB3aWxsIGJlIGNhbGxlZCBieSB0aGUgU2NlbmVPcHRpbWl6ZXIgd2hlbiBpdHMgcHJpb3JpdHkg
aXMgcmVhY2hlZCBpbiBvcmRlciB0byBhcHBseSB0aGUgY2hhbmdlIHJlcXVpcmVkIGJ5IHRoZSBj
dXJyZW50IG9wdGltaXphdGlvbgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBjdXJy
ZW50IHNjZW5lIHdoZXJlIHRvIGFwcGx5IHRoaXMgb3B0aW1pemF0aW9uCisgICAgICogQHBhcmFt
IG9wdGltaXplciBkZWZpbmVzIHRoZSBjdXJyZW50IG9wdGltaXplcgorICAgICAqIEByZXR1cm5z
IHRydWUgaWYgZXZlcnl0aGluZyB0aGF0IGNhbiBiZSBkb25lIHdhcyBhcHBsaWVkCisgICAgICov
CisgICAgQ3VzdG9tT3B0aW1pemF0aW9uLnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChzY2Vu
ZSwgb3B0aW1pemVyKSB7CisgICAgICAgIGlmICh0aGlzLm9uQXBwbHkpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLm9uQXBwbHkoc2NlbmUsIG9wdGltaXplcik7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICByZXR1cm4gQ3VzdG9tT3B0aW1pemF0aW9uOwor
fShTY2VuZU9wdGltaXphdGlvbikpOworCisvKioKKyAqIERlZmluZXMgYW4gb3B0aW1pemF0aW9u
IHVzZWQgdG8gdHVybiBwYXJ0aWNsZXMgb2ZmCisgKiBAZGVzY3JpcHRpb24gTW9yZSBkZXRhaWxz
IGF0IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9zY2VuZW9wdGlt
aXplcgorICovCit2YXIgUGFydGljbGVzT3B0aW1pemF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKFBhcnRpY2xlc09wdGltaXphdGlvbiwgX3N1cGVyKTsKKyAgICBmdW5jdGlv
biBQYXJ0aWNsZXNPcHRpbWl6YXRpb24oKSB7CisgICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51
bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpczsKKyAgICB9CisgICAg
LyoqCisgICAgICogR2V0cyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBhY3Rpb24gZXhlY3V0ZWQg
YnkgdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uCisgICAgICogQHJldHVybiBkZXNjcmlwdGlvbiBz
dHJpbmcKKyAgICAgKi8KKyAgICBQYXJ0aWNsZXNPcHRpbWl6YXRpb24ucHJvdG90eXBlLmdldERl
c2NyaXB0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlR1cm5pbmcgcGFydGlj
bGVzIG9uL29mZiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwg
YmUgY2FsbGVkIGJ5IHRoZSBTY2VuZU9wdGltaXplciB3aGVuIGl0cyBwcmlvcml0eSBpcyByZWFj
aGVkIGluIG9yZGVyIHRvIGFwcGx5IHRoZSBjaGFuZ2UgcmVxdWlyZWQgYnkgdGhlIGN1cnJlbnQg
b3B0aW1pemF0aW9uCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGN1cnJlbnQgc2Nl
bmUgd2hlcmUgdG8gYXBwbHkgdGhpcyBvcHRpbWl6YXRpb24KKyAgICAgKiBAcGFyYW0gb3B0aW1p
emVyIGRlZmluZXMgdGhlIGN1cnJlbnQgb3B0aW1pemVyCisgICAgICogQHJldHVybnMgdHJ1ZSBp
ZiBldmVyeXRoaW5nIHRoYXQgY2FuIGJlIGRvbmUgd2FzIGFwcGxpZWQKKyAgICAgKi8KKyAgICBQ
YXJ0aWNsZXNPcHRpbWl6YXRpb24ucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHNjZW5lLCBv
cHRpbWl6ZXIpIHsKKyAgICAgICAgc2NlbmUucGFydGljbGVzRW5hYmxlZCA9IG9wdGltaXplci5p
c0luSW1wcm92ZW1lbnRNb2RlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIHJl
dHVybiBQYXJ0aWNsZXNPcHRpbWl6YXRpb247Cit9KFNjZW5lT3B0aW1pemF0aW9uKSk7CisKKy8q
KgorICogRGVmaW5lcyBhbiBvcHRpbWl6YXRpb24gdXNlZCB0byB0dXJuIHJlbmRlciB0YXJnZXRz
IG9mZgorICogQGRlc2NyaXB0aW9uIE1vcmUgZGV0YWlscyBhdCBodHRwOi8vZG9jLmJhYnlsb25q
cy5jb20vaG93X3RvL2hvd190b191c2Vfc2NlbmVvcHRpbWl6ZXIKKyAqLwordmFyIFJlbmRlclRh
cmdldHNPcHRpbWl6YXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUmVuZGVy
VGFyZ2V0c09wdGltaXphdGlvbiwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBSZW5kZXJUYXJnZXRz
T3B0aW1pemF0aW9uKCkgeworICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBl
ci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CisgICAgfQorICAgIC8qKgorICAgICAq
IEdldHMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgYWN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSBjdXJy
ZW50IG9wdGltaXphdGlvbgorICAgICAqIEByZXR1cm4gZGVzY3JpcHRpb24gc3RyaW5nCisgICAg
ICovCisgICAgUmVuZGVyVGFyZ2V0c09wdGltaXphdGlvbi5wcm90b3R5cGUuZ2V0RGVzY3JpcHRp
b24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiVHVybmluZyByZW5kZXIgdGFyZ2V0
cyBvZmYiOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNh
bGxlZCBieSB0aGUgU2NlbmVPcHRpbWl6ZXIgd2hlbiBpdHMgcHJpb3JpdHkgaXMgcmVhY2hlZCBp
biBvcmRlciB0byBhcHBseSB0aGUgY2hhbmdlIHJlcXVpcmVkIGJ5IHRoZSBjdXJyZW50IG9wdGlt
aXphdGlvbgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBjdXJyZW50IHNjZW5lIHdo
ZXJlIHRvIGFwcGx5IHRoaXMgb3B0aW1pemF0aW9uCisgICAgICogQHBhcmFtIG9wdGltaXplciBk
ZWZpbmVzIHRoZSBjdXJyZW50IG9wdGltaXplcgorICAgICAqIEByZXR1cm5zIHRydWUgaWYgZXZl
cnl0aGluZyB0aGF0IGNhbiBiZSBkb25lIHdhcyBhcHBsaWVkCisgICAgICovCisgICAgUmVuZGVy
VGFyZ2V0c09wdGltaXphdGlvbi5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAoc2NlbmUsIG9w
dGltaXplcikgeworICAgICAgICBzY2VuZS5yZW5kZXJUYXJnZXRzRW5hYmxlZCA9IG9wdGltaXpl
ci5pc0luSW1wcm92ZW1lbnRNb2RlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAg
IHJldHVybiBSZW5kZXJUYXJnZXRzT3B0aW1pemF0aW9uOworfShTY2VuZU9wdGltaXphdGlvbikp
OworCisvKioKKyAqIERlZmluZXMgYW4gb3B0aW1pemF0aW9uIHVzZWQgdG8gbWVyZ2UgbWVzaGVz
IHdpdGggY29tcGF0aWJsZSBtYXRlcmlhbHMKKyAqIEBkZXNjcmlwdGlvbiBNb3JlIGRldGFpbHMg
YXQgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3NjZW5lb3B0aW1p
emVyCisgKi8KK3ZhciBNZXJnZU1lc2hlc09wdGltaXphdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2V4dGVuZHMiXShNZXJnZU1lc2hlc09wdGltaXphdGlvbiwgX3N1cGVyKTsKKyAgICBmdW5j
dGlvbiBNZXJnZU1lc2hlc09wdGltaXphdGlvbigpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1
cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7Cisg
ICAgICAgIF90aGlzLl9jYW5CZU1lcmdlZCA9IGZ1bmN0aW9uIChhYnN0cmFjdE1lc2gpIHsKKyAg
ICAgICAgICAgIGlmICghKGFic3RyYWN0TWVzaCBpbnN0YW5jZW9mIF9NZXNoZXNfbWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0pKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1lc2ggPSBhYnN0cmFj
dE1lc2g7CisgICAgICAgICAgICBpZiAobWVzaC5pc0Rpc3Bvc2VkKCkpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1lc2gu
aXNWaXNpYmxlIHx8ICFtZXNoLmlzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1lc2guaW5zdGFuY2VzLmxl
bmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAobWVzaC5za2VsZXRvbiB8fCBtZXNoLmhhc0xPRExldmVscykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXJnZU1lc2hlc09wdGltaXphdGlvbiwgIlVwZGF0
ZVNlbGVjdGlvblRyZWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMg
YSBib29sZWFuIHdoaWNoIGRlZmluZXMgaWYgb3B0aW1pemF0aW9uIG9jdHJlZSBoYXMgdG8gYmUg
dXBkYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gTWVyZ2VNZXNoZXNPcHRpbWl6YXRpb24uX1VwZGF0ZVNlbGVjdGlvblRyZWU7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29s
ZWFuIHdoaWNoIGRlZmluZXMgaWYgb3B0aW1pemF0aW9uIG9jdHJlZSBoYXMgdG8gYmUgdXBkYXRl
ZAorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIE1lcmdlTWVzaGVzT3B0aW1pemF0aW9uLl9VcGRhdGVTZWxlY3Rpb25UcmVlID0gdmFsdWU7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldHMgYSBzdHJpbmcgZGVzY3Jp
YmluZyB0aGUgYWN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSBjdXJyZW50IG9wdGltaXphdGlvbgorICAg
ICAqIEByZXR1cm4gZGVzY3JpcHRpb24gc3RyaW5nCisgICAgICovCisgICAgTWVyZ2VNZXNoZXNP
cHRpbWl6YXRpb24ucHJvdG90eXBlLmdldERlc2NyaXB0aW9uID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIk1lcmdpbmcgc2ltaWxhciBtZXNoZXMgdG9nZXRoZXIiOworICAgIH07Cisg
ICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSB0aGUgU2NlbmVP
cHRpbWl6ZXIgd2hlbiBpdHMgcHJpb3JpdHkgaXMgcmVhY2hlZCBpbiBvcmRlciB0byBhcHBseSB0
aGUgY2hhbmdlIHJlcXVpcmVkIGJ5IHRoZSBjdXJyZW50IG9wdGltaXphdGlvbgorICAgICAqIEBw
YXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBjdXJyZW50IHNjZW5lIHdoZXJlIHRvIGFwcGx5IHRoaXMg
b3B0aW1pemF0aW9uCisgICAgICogQHBhcmFtIG9wdGltaXplciBkZWZpbmVzIHRoZSBjdXJyZW50
IG9wdGltaXplcgorICAgICAqIEBwYXJhbSB1cGRhdGVTZWxlY3Rpb25UcmVlIGRlZmluZXMgdGhh
dCB0aGUgc2VsZWN0aW9uIG9jdHJlZSBoYXMgdG8gYmUgdXBkYXRlZCAoZmFsc2UgYnkgZGVmYXVs
dCkKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGV2ZXJ5dGhpbmcgdGhhdCBjYW4gYmUgZG9uZSB3
YXMgYXBwbGllZAorICAgICAqLworICAgIE1lcmdlTWVzaGVzT3B0aW1pemF0aW9uLnByb3RvdHlw
ZS5hcHBseSA9IGZ1bmN0aW9uIChzY2VuZSwgb3B0aW1pemVyLCB1cGRhdGVTZWxlY3Rpb25UcmVl
KSB7CisgICAgICAgIHZhciBnbG9iYWxQb29sID0gc2NlbmUubWVzaGVzLnNsaWNlKDApOworICAg
ICAgICB2YXIgZ2xvYmFsTGVuZ3RoID0gZ2xvYmFsUG9vbC5sZW5ndGg7CisgICAgICAgIGZvciAo
dmFyIGluZGV4ID0gMDsgaW5kZXggPCBnbG9iYWxMZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgIHZhciBjdXJyZW50UG9vbCA9IG5ldyBBcnJheSgpOworICAgICAgICAgICAgdmFyIGN1cnJl
bnQgPSBnbG9iYWxQb29sW2luZGV4XTsKKyAgICAgICAgICAgIC8vIENoZWNrcworICAgICAgICAg
ICAgaWYgKCF0aGlzLl9jYW5CZU1lcmdlZChjdXJyZW50KSkgeworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VycmVudFBvb2wucHVzaChjdXJy
ZW50KTsKKyAgICAgICAgICAgIC8vIEZpbmQgY29tcGF0aWJsZSBtZXNoZXMKKyAgICAgICAgICAg
IGZvciAodmFyIHN1YkluZGV4ID0gaW5kZXggKyAxOyBzdWJJbmRleCA8IGdsb2JhbExlbmd0aDsg
c3ViSW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBvdGhlck1lc2ggPSBnbG9iYWxQb29s
W3N1YkluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NhbkJlTWVyZ2VkKG90aGVy
TWVzaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChvdGhlck1lc2gubWF0ZXJpYWwgIT09IGN1cnJlbnQubWF0
ZXJpYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChvdGhlck1lc2guY2hlY2tDb2xsaXNpb25zICE9PSBjdXJy
ZW50LmNoZWNrQ29sbGlzaW9ucykgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VycmVudFBvb2wucHVzaChvdGhlck1l
c2gpOworICAgICAgICAgICAgICAgIGdsb2JhbExlbmd0aC0tOworICAgICAgICAgICAgICAgIGds
b2JhbFBvb2wuc3BsaWNlKHN1YkluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICBzdWJJbmRleC0t
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN1cnJlbnRQb29sLmxlbmd0aCA8IDIp
IHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC8vIE1lcmdlIG1lc2hlcworICAgICAgICAgICAgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk1lc2giXS5NZXJnZU1lc2hlcyhjdXJyZW50UG9vbCwgdW5kZWZpbmVk
LCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDYWxsIHRoZSBvY3RyZWUgc3lzdGVtIG9w
dGltaXphdGlvbiBpZiBpdCBpcyBkZWZpbmVkLgorICAgICAgICB2YXIgc2NlbmVBc0FueSA9IHNj
ZW5lOworICAgICAgICBpZiAoc2NlbmVBc0FueS5jcmVhdGVPclVwZGF0ZVNlbGVjdGlvbk9jdHJl
ZSkgeworICAgICAgICAgICAgaWYgKHVwZGF0ZVNlbGVjdGlvblRyZWUgIT0gdW5kZWZpbmVkKSB7
CisgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZVNlbGVjdGlvblRyZWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2NlbmVBc0FueS5jcmVhdGVPclVwZGF0ZVNlbGVjdGlvbk9jdHJlZSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKE1lcmdl
TWVzaGVzT3B0aW1pemF0aW9uLlVwZGF0ZVNlbGVjdGlvblRyZWUpIHsKKyAgICAgICAgICAgICAg
ICBzY2VuZUFzQW55LmNyZWF0ZU9yVXBkYXRlU2VsZWN0aW9uT2N0cmVlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICBNZXJnZU1l
c2hlc09wdGltaXphdGlvbi5fVXBkYXRlU2VsZWN0aW9uVHJlZSA9IGZhbHNlOworICAgIHJldHVy
biBNZXJnZU1lc2hlc09wdGltaXphdGlvbjsKK30oU2NlbmVPcHRpbWl6YXRpb24pKTsKKworLyoq
CisgKiBEZWZpbmVzIGEgbGlzdCBvZiBvcHRpb25zIHVzZWQgYnkgU2NlbmVPcHRpbWl6ZXIKKyAq
IEBkZXNjcmlwdGlvbiBNb3JlIGRldGFpbHMgYXQgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hv
d190by9ob3dfdG9fdXNlX3NjZW5lb3B0aW1pemVyCisgKi8KK3ZhciBTY2VuZU9wdGltaXplck9w
dGlvbnMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyBhIG5ldyBsaXN0IG9mIG9wdGlvbnMgdXNlZCBieSBTY2VuZU9wdGltaXplcgorICAgICAq
IEBwYXJhbSB0YXJnZXRGcmFtZVJhdGUgZGVmaW5lcyB0aGUgdGFyZ2V0IGZyYW1lIHJhdGUgdG8g
cmVhY2ggKDYwIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIHRyYWNrZXJEdXJhdGlvbiBkZWZp
bmVzIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHR3byBjaGVja2VzICgyMDAwbXMgYnkgZGVmYXVsdCkK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBTY2VuZU9wdGltaXplck9wdGlvbnMoCisgICAgLyoqCisg
ICAgICogRGVmaW5lcyB0aGUgdGFyZ2V0IGZyYW1lIHJhdGUgdG8gcmVhY2ggKDYwIGJ5IGRlZmF1
bHQpCisgICAgICovCisgICAgdGFyZ2V0RnJhbWVSYXRlLCAKKyAgICAvKioKKyAgICAgKiBEZWZp
bmVzIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHR3byBjaGVja2VzICgyMDAwbXMgYnkgZGVmYXVsdCkK
KyAgICAgKi8KKyAgICB0cmFja2VyRHVyYXRpb24pIHsKKyAgICAgICAgaWYgKHRhcmdldEZyYW1l
UmF0ZSA9PT0gdm9pZCAwKSB7IHRhcmdldEZyYW1lUmF0ZSA9IDYwOyB9CisgICAgICAgIGlmICh0
cmFja2VyRHVyYXRpb24gPT09IHZvaWQgMCkgeyB0cmFja2VyRHVyYXRpb24gPSAyMDAwOyB9Cisg
ICAgICAgIHRoaXMudGFyZ2V0RnJhbWVSYXRlID0gdGFyZ2V0RnJhbWVSYXRlOworICAgICAgICB0
aGlzLnRyYWNrZXJEdXJhdGlvbiA9IHRyYWNrZXJEdXJhdGlvbjsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgdGhlIGxpc3Qgb2Ygb3B0aW1pemF0aW9ucyB0byBhcHBseQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5vcHRpbWl6YXRpb25zID0gbmV3IEFycmF5KCk7CisgICAgfQorICAg
IC8qKgorICAgICAqIEFkZCBhIG5ldyBvcHRpbWl6YXRpb24KKyAgICAgKiBAcGFyYW0gb3B0aW1p
emF0aW9uIGRlZmluZXMgdGhlIFNjZW5lT3B0aW1pemF0aW9uIHRvIGFkZCB0byB0aGUgbGlzdCBv
ZiBhY3RpdmUgb3B0aW1pemF0aW9ucworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IFNjZW5l
T3B0aW1pemVyT3B0aW9ucworICAgICAqLworICAgIFNjZW5lT3B0aW1pemVyT3B0aW9ucy5wcm90
b3R5cGUuYWRkT3B0aW1pemF0aW9uID0gZnVuY3Rpb24gKG9wdGltaXphdGlvbikgeworICAgICAg
ICB0aGlzLm9wdGltaXphdGlvbnMucHVzaChvcHRpbWl6YXRpb24pOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBhIG5ldyBjdXN0b20gb3B0aW1pemF0
aW9uCisgICAgICogQHBhcmFtIG9uQXBwbHkgZGVmaW5lcyB0aGUgY2FsbGJhY2sgY2FsbGVkIHRv
IGFwcGx5IHRoZSBjdXN0b20gb3B0aW1pemF0aW9uICh0cnVlIGlmIGV2ZXJ5dGhpbmcgdGhhdCBj
YW4gYmUgZG9uZSB3YXMgYXBwbGllZCkKKyAgICAgKiBAcGFyYW0gb25HZXREZXNjcmlwdGlvbiBk
ZWZpbmVzIHRoZSBjYWxsYmFjayBjYWxsZWQgdG8gZ2V0IHRoZSBkZXNjcmlwdGlvbiBhdHRhY2hl
ZCB3aXRoIHRoZSBvcHRpbWl6YXRpb24uCisgICAgICogQHBhcmFtIHByaW9yaXR5IGRlZmluZXMg
dGhlIHByaW9yaXR5IG9mIHRoaXMgb3B0aW1pemF0aW9uICgwIGJ5IGRlZmF1bHQgd2hpY2ggbWVh
bnMgZmlyc3QgaW4gdGhlIGxpc3QpCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgU2NlbmVP
cHRpbWl6ZXJPcHRpb25zCisgICAgICovCisgICAgU2NlbmVPcHRpbWl6ZXJPcHRpb25zLnByb3Rv
dHlwZS5hZGRDdXN0b21PcHRpbWl6YXRpb24gPSBmdW5jdGlvbiAob25BcHBseSwgb25HZXREZXNj
cmlwdGlvbiwgcHJpb3JpdHkpIHsKKyAgICAgICAgaWYgKHByaW9yaXR5ID09PSB2b2lkIDApIHsg
cHJpb3JpdHkgPSAwOyB9CisgICAgICAgIHZhciBvcHRpbWl6YXRpb24gPSBuZXcgQ3VzdG9tT3B0
aW1pemF0aW9uKHByaW9yaXR5KTsKKyAgICAgICAgb3B0aW1pemF0aW9uLm9uQXBwbHkgPSBvbkFw
cGx5OworICAgICAgICBvcHRpbWl6YXRpb24ub25HZXREZXNjcmlwdGlvbiA9IG9uR2V0RGVzY3Jp
cHRpb247CisgICAgICAgIHRoaXMub3B0aW1pemF0aW9ucy5wdXNoKG9wdGltaXphdGlvbik7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGxp
c3Qgb2YgcHJlLWRlZmluZWQgb3B0aW1pemF0aW9ucyBhaW1lZCB0byByZWR1Y2UgdGhlIHZpc3Vh
bCBpbXBhY3Qgb24gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIHRhcmdldEZyYW1lUmF0ZSBkZWZp
bmVzIHRoZSB0YXJnZXQgZnJhbWUgcmF0ZSAoNjAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcmV0dXJu
cyBhIFNjZW5lT3B0aW1pemVyT3B0aW9ucyBvYmplY3QKKyAgICAgKi8KKyAgICBTY2VuZU9wdGlt
aXplck9wdGlvbnMuTG93RGVncmFkYXRpb25BbGxvd2VkID0gZnVuY3Rpb24gKHRhcmdldEZyYW1l
UmF0ZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFNjZW5lT3B0aW1pemVyT3B0aW9ucyh0
YXJnZXRGcmFtZVJhdGUpOworICAgICAgICB2YXIgcHJpb3JpdHkgPSAwOworICAgICAgICByZXN1
bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBNZXJnZU1lc2hlc09wdGltaXphdGlvbihwcmlvcml0eSkp
OworICAgICAgICByZXN1bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBTaGFkb3dzT3B0aW1pemF0aW9u
KHByaW9yaXR5KSk7CisgICAgICAgIHJlc3VsdC5hZGRPcHRpbWl6YXRpb24obmV3IExlbnNGbGFy
ZXNPcHRpbWl6YXRpb24ocHJpb3JpdHkpKTsKKyAgICAgICAgLy8gTmV4dCBwcmlvcml0eQorICAg
ICAgICBwcmlvcml0eSsrOworICAgICAgICByZXN1bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBQb3N0
UHJvY2Vzc2VzT3B0aW1pemF0aW9uKHByaW9yaXR5KSk7CisgICAgICAgIHJlc3VsdC5hZGRPcHRp
bWl6YXRpb24obmV3IFBhcnRpY2xlc09wdGltaXphdGlvbihwcmlvcml0eSkpOworICAgICAgICAv
LyBOZXh0IHByaW9yaXR5CisgICAgICAgIHByaW9yaXR5Kys7CisgICAgICAgIHJlc3VsdC5hZGRP
cHRpbWl6YXRpb24obmV3IFRleHR1cmVPcHRpbWl6YXRpb24ocHJpb3JpdHksIDEwMjQpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBs
aXN0IG9mIHByZS1kZWZpbmVkIG9wdGltaXphdGlvbnMgYWltZWQgdG8gaGF2ZSBhIG1vZGVyYXRl
IGltcGFjdCBvbiB0aGUgc2NlbmUgdmlzdWFsCisgICAgICogQHBhcmFtIHRhcmdldEZyYW1lUmF0
ZSBkZWZpbmVzIHRoZSB0YXJnZXQgZnJhbWUgcmF0ZSAoNjAgYnkgZGVmYXVsdCkKKyAgICAgKiBA
cmV0dXJucyBhIFNjZW5lT3B0aW1pemVyT3B0aW9ucyBvYmplY3QKKyAgICAgKi8KKyAgICBTY2Vu
ZU9wdGltaXplck9wdGlvbnMuTW9kZXJhdGVEZWdyYWRhdGlvbkFsbG93ZWQgPSBmdW5jdGlvbiAo
dGFyZ2V0RnJhbWVSYXRlKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgU2NlbmVPcHRpbWl6
ZXJPcHRpb25zKHRhcmdldEZyYW1lUmF0ZSk7CisgICAgICAgIHZhciBwcmlvcml0eSA9IDA7Cisg
ICAgICAgIHJlc3VsdC5hZGRPcHRpbWl6YXRpb24obmV3IE1lcmdlTWVzaGVzT3B0aW1pemF0aW9u
KHByaW9yaXR5KSk7CisgICAgICAgIHJlc3VsdC5hZGRPcHRpbWl6YXRpb24obmV3IFNoYWRvd3NP
cHRpbWl6YXRpb24ocHJpb3JpdHkpKTsKKyAgICAgICAgcmVzdWx0LmFkZE9wdGltaXphdGlvbihu
ZXcgTGVuc0ZsYXJlc09wdGltaXphdGlvbihwcmlvcml0eSkpOworICAgICAgICAvLyBOZXh0IHBy
aW9yaXR5CisgICAgICAgIHByaW9yaXR5Kys7CisgICAgICAgIHJlc3VsdC5hZGRPcHRpbWl6YXRp
b24obmV3IFBvc3RQcm9jZXNzZXNPcHRpbWl6YXRpb24ocHJpb3JpdHkpKTsKKyAgICAgICAgcmVz
dWx0LmFkZE9wdGltaXphdGlvbihuZXcgUGFydGljbGVzT3B0aW1pemF0aW9uKHByaW9yaXR5KSk7
CisgICAgICAgIC8vIE5leHQgcHJpb3JpdHkKKyAgICAgICAgcHJpb3JpdHkrKzsKKyAgICAgICAg
cmVzdWx0LmFkZE9wdGltaXphdGlvbihuZXcgVGV4dHVyZU9wdGltaXphdGlvbihwcmlvcml0eSwg
NTEyKSk7CisgICAgICAgIC8vIE5leHQgcHJpb3JpdHkKKyAgICAgICAgcHJpb3JpdHkrKzsKKyAg
ICAgICAgcmVzdWx0LmFkZE9wdGltaXphdGlvbihuZXcgUmVuZGVyVGFyZ2V0c09wdGltaXphdGlv
bihwcmlvcml0eSkpOworICAgICAgICAvLyBOZXh0IHByaW9yaXR5CisgICAgICAgIHByaW9yaXR5
Kys7CisgICAgICAgIHJlc3VsdC5hZGRPcHRpbWl6YXRpb24obmV3IEhhcmR3YXJlU2NhbGluZ09w
dGltaXphdGlvbihwcmlvcml0eSwgMikpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGxpc3Qgb2YgcHJlLWRlZmluZWQgb3B0aW1pemF0
aW9ucyBhaW1lZCB0byBoYXZlIGEgYmlnIGltcGFjdCBvbiB0aGUgc2NlbmUgdmlzdWFsCisgICAg
ICogQHBhcmFtIHRhcmdldEZyYW1lUmF0ZSBkZWZpbmVzIHRoZSB0YXJnZXQgZnJhbWUgcmF0ZSAo
NjAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcmV0dXJucyBhIFNjZW5lT3B0aW1pemVyT3B0aW9ucyBv
YmplY3QKKyAgICAgKi8KKyAgICBTY2VuZU9wdGltaXplck9wdGlvbnMuSGlnaERlZ3JhZGF0aW9u
QWxsb3dlZCA9IGZ1bmN0aW9uICh0YXJnZXRGcmFtZVJhdGUpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IG5ldyBTY2VuZU9wdGltaXplck9wdGlvbnModGFyZ2V0RnJhbWVSYXRlKTsKKyAgICAgICAg
dmFyIHByaW9yaXR5ID0gMDsKKyAgICAgICAgcmVzdWx0LmFkZE9wdGltaXphdGlvbihuZXcgTWVy
Z2VNZXNoZXNPcHRpbWl6YXRpb24ocHJpb3JpdHkpKTsKKyAgICAgICAgcmVzdWx0LmFkZE9wdGlt
aXphdGlvbihuZXcgU2hhZG93c09wdGltaXphdGlvbihwcmlvcml0eSkpOworICAgICAgICByZXN1
bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBMZW5zRmxhcmVzT3B0aW1pemF0aW9uKHByaW9yaXR5KSk7
CisgICAgICAgIC8vIE5leHQgcHJpb3JpdHkKKyAgICAgICAgcHJpb3JpdHkrKzsKKyAgICAgICAg
cmVzdWx0LmFkZE9wdGltaXphdGlvbihuZXcgUG9zdFByb2Nlc3Nlc09wdGltaXphdGlvbihwcmlv
cml0eSkpOworICAgICAgICByZXN1bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBQYXJ0aWNsZXNPcHRp
bWl6YXRpb24ocHJpb3JpdHkpKTsKKyAgICAgICAgLy8gTmV4dCBwcmlvcml0eQorICAgICAgICBw
cmlvcml0eSsrOworICAgICAgICByZXN1bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBUZXh0dXJlT3B0
aW1pemF0aW9uKHByaW9yaXR5LCAyNTYpKTsKKyAgICAgICAgLy8gTmV4dCBwcmlvcml0eQorICAg
ICAgICBwcmlvcml0eSsrOworICAgICAgICByZXN1bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBSZW5k
ZXJUYXJnZXRzT3B0aW1pemF0aW9uKHByaW9yaXR5KSk7CisgICAgICAgIC8vIE5leHQgcHJpb3Jp
dHkKKyAgICAgICAgcHJpb3JpdHkrKzsKKyAgICAgICAgcmVzdWx0LmFkZE9wdGltaXphdGlvbihu
ZXcgSGFyZHdhcmVTY2FsaW5nT3B0aW1pemF0aW9uKHByaW9yaXR5LCA0KSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfTsKKyAgICByZXR1cm4gU2NlbmVPcHRpbWl6ZXJPcHRpb25zOwor
fSgpKTsKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHJ1biBvcHRpbWl6YXRpb25zIGluIG9yZGVy
IHRvIHJlYWNoIGEgdGFyZ2V0IGZyYW1lIHJhdGUKKyAqIEBkZXNjcmlwdGlvbiBNb3JlIGRldGFp
bHMgYXQgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3NjZW5lb3B0
aW1pemVyCisgKi8KK3ZhciBTY2VuZU9wdGltaXplciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFNjZW5lT3B0aW1pemVyCisgICAg
ICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIHNjZW5lIHRvIHdvcmsgb24KKyAgICAgKiBAcGFy
YW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHRvIHVzZSB3aXRoIHRoZSBTY2VuZU9wdGlt
aXplcgorICAgICAqIEBwYXJhbSBhdXRvR2VuZXJhdGVQcmlvcml0aWVzIGRlZmluZXMgaWYgcHJp
b3JpdGllcyBtdXN0IGJlIGdlbmVyYXRlZCBhbmQgbm90IHJlYWQgZnJvbSBTY2VuZU9wdGltaXph
dGlvbiBwcm9wZXJ0eSAodHJ1ZSBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBpbXByb3ZlbWVu
dE1vZGUgZGVmaW5lcyBpZiB0aGUgc2NlbmUgb3B0aW1pemVyIG11c3QgcnVuIHRoZSBtYXhpbXVt
IG9wdGltaXphdGlvbiB3aGlsZSBzdGF5aW5nIG92ZXIgYSB0YXJnZXQgZnJhbWUgaW5zdGVhZCBv
ZiB0cnlpbmcgdG8gcmVhY2ggdGhlIHRhcmdldCBmcmFtZXJhdGUgKGZhbHNlIGJ5IGRlZmF1bHQp
CisgICAgICovCisgICAgZnVuY3Rpb24gU2NlbmVPcHRpbWl6ZXIoc2NlbmUsIG9wdGlvbnMsIGF1
dG9HZW5lcmF0ZVByaW9yaXRpZXMsIGltcHJvdmVtZW50TW9kZSkgeworICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICBpZiAoYXV0b0dlbmVyYXRlUHJpb3JpdGllcyA9PT0gdm9pZCAw
KSB7IGF1dG9HZW5lcmF0ZVByaW9yaXRpZXMgPSB0cnVlOyB9CisgICAgICAgIGlmIChpbXByb3Zl
bWVudE1vZGUgPT09IHZvaWQgMCkgeyBpbXByb3ZlbWVudE1vZGUgPSBmYWxzZTsgfQorICAgICAg
ICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY3VycmVudFByaW9yaXR5
TGV2ZWwgPSAwOworICAgICAgICB0aGlzLl90YXJnZXRGcmFtZVJhdGUgPSA2MDsKKyAgICAgICAg
dGhpcy5fdHJhY2tlckR1cmF0aW9uID0gMjAwMDsKKyAgICAgICAgdGhpcy5fY3VycmVudEZyYW1l
UmF0ZSA9IDA7CisgICAgICAgIHRoaXMuX2ltcHJvdmVtZW50TW9kZSA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogRGVmaW5lcyBhbiBvYnNlcnZhYmxlIGNhbGxlZCB3aGVuIHRoZSBv
cHRpbWl6ZXIgcmVhY2hlcyB0aGUgdGFyZ2V0IGZyYW1lIHJhdGUKKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMub25TdWNjZXNzT2JzZXJ2YWJsZSA9IG5ldyBfb2JzZXJ2YWJsZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERlZmluZXMgYW4gb2JzZXJ2YWJsZSBjYWxsZWQgd2hlbiB0aGUgb3B0aW1pemVyIGVuYWJs
ZXMgYW4gb3B0aW1pemF0aW9uCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uTmV3T3B0aW1p
emF0aW9uQXBwbGllZE9ic2VydmFibGUgPSBuZXcgX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
ZWZpbmVzIGFuIG9ic2VydmFibGUgY2FsbGVkIHdoZW4gdGhlIG9wdGltaXplciBpcyBub3QgYWJs
ZSB0byByZWFjaCB0aGUgdGFyZ2V0IGZyYW1lIHJhdGUKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMub25GYWlsdXJlT2JzZXJ2YWJsZSA9IG5ldyBfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgaWYgKCFvcHRpb25zKSB7Cisg
ICAgICAgICAgICB0aGlzLl9vcHRpb25zID0gbmV3IFNjZW5lT3B0aW1pemVyT3B0aW9ucygpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9w
dGlvbnM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMudGFyZ2V0RnJhbWVS
YXRlKSB7CisgICAgICAgICAgICB0aGlzLl90YXJnZXRGcmFtZVJhdGUgPSB0aGlzLl9vcHRpb25z
LnRhcmdldEZyYW1lUmF0ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy50
cmFja2VyRHVyYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMuX3RyYWNrZXJEdXJhdGlvbiA9IHRo
aXMuX29wdGlvbnMudHJhY2tlckR1cmF0aW9uOworICAgICAgICB9CisgICAgICAgIGlmIChhdXRv
R2VuZXJhdGVQcmlvcml0aWVzKSB7CisgICAgICAgICAgICB2YXIgcHJpb3JpdHkgPSAwOworICAg
ICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX29wdGlvbnMub3B0aW1pemF0aW9u
czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgb3B0aW0gPSBf
YVtfaV07CisgICAgICAgICAgICAgICAgb3B0aW0ucHJpb3JpdHkgPSBwcmlvcml0eSsrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2ltcHJvdmVtZW50TW9kZSA9IGlt
cHJvdmVtZW50TW9kZTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8fCBfRW5naW5lc19l
bmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmVTdG9yZSJdLkxh
c3RDcmVhdGVkU2NlbmU7CisgICAgICAgIHRoaXMuX3NjZW5lRGlzcG9zZU9ic2VydmVyID0gdGhp
cy5fc2NlbmUub25EaXNwb3NlT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgX3RoaXMuX3NjZW5lRGlzcG9zZU9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgIF90aGlz
LmRpc3Bvc2UoKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTY2VuZU9wdGltaXplci5wcm90b3R5cGUsICJpc0luSW1wcm92ZW1lbnRNb2RlIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb3B0
aW1pemVyIGlzIGluIGltcHJvdmVtZW50IG1vZGUKKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ltcHJvdmVtZW50TW9kZTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lT3B0aW1p
emVyLnByb3RvdHlwZSwgImN1cnJlbnRQcmlvcml0eUxldmVsIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgY3VycmVudCBwcmlvcml0eSBsZXZlbCAoMCBhdCBzdGFydCkKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2N1cnJlbnRQcmlvcml0eUxldmVsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoU2NlbmVPcHRpbWl6ZXIucHJvdG90eXBlLCAiY3VycmVudEZyYW1l
UmF0ZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGN1cnJlbnQgZnJhbWUg
cmF0ZSBjaGVja2VkIGJ5IHRoZSBTY2VuZU9wdGltaXplcgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudEZyYW1l
UmF0ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5l
T3B0aW1pemVyLnByb3RvdHlwZSwgInRhcmdldEZyYW1lUmF0ZSIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCB0YXJnZXQgZnJhbWUgcmF0ZSAoNjAg
YnkgZGVmYXVsdCkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldEZyYW1lUmF0ZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCB0YXJnZXQgZnJhbWUg
cmF0ZSAoNjAgYnkgZGVmYXVsdCkKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl90YXJnZXRGcmFtZVJhdGUgPSB2YWx1ZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lT3B0aW1pemVy
LnByb3RvdHlwZSwgInRyYWNrZXJEdXJhdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCBpbnRlcnZhbCBiZXR3ZWVuIHR3byBjaGVja3MgKGV2
ZXJ5IDIwMDBtcyBieSBkZWZhdWx0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2tlckR1cmF0aW9uOworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBjdXJyZW50IGlu
dGVydmFsIGJldHdlZW4gdHdvIGNoZWNrcyAoZXZlcnkgMjAwMG1zIGJ5IGRlZmF1bHQpCisgICAg
ICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhp
cy5fdHJhY2tlckR1cmF0aW9uID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShTY2VuZU9wdGltaXplci5wcm90b3R5cGUsICJvcHRpbWl6YXRpb25z
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBhY3RpdmUgb3B0
aW1pemF0aW9ucworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucy5vcHRpbWl6YXRpb25zOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICAvKioKKyAgICAgKiBTdG9wcyB0aGUgY3VycmVudCBvcHRpbWl6ZXIKKyAgICAg
Ki8KKyAgICBTY2VuZU9wdGltaXplci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXNldCB0aGUgb3B0aW1pemVyIHRvIGluaXRpYWwgc3RlcCAoY3VycmVudCBwcmlvcml0eSBsZXZl
bCA9IDApCisgICAgICovCisgICAgU2NlbmVPcHRpbWl6ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jdXJyZW50UHJpb3JpdHlMZXZlbCA9IDA7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTdGFydCB0aGUgb3B0aW1pemVyLiBCeSBkZWZhdWx0IGl0IHdp
bGwgdHJ5IHRvIHJlYWNoIGEgc3BlY2lmaWMgZnJhbWVyYXRlCisgICAgICogYnV0IGlmIHRoZSBv
cHRpbWl6ZXIgaXMgc2V0IHdpdGggaW1wcm92ZW1lbnRNb2RlID09PSB0cnVlIHRoZW4gaXQgd2ls
bCBydW4gYWxsIG9wdGltaWF0aWF0aW9uIHdoaWxlIGZyYW1lIHJhdGUgaXMgYWJvdmUgdGhlIHRh
cmdldCBmcmFtZSByYXRlCisgICAgICovCisgICAgU2NlbmVPcHRpbWl6ZXIucHJvdG90eXBlLnN0
YXJ0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBp
ZiAodGhpcy5faXNSdW5uaW5nKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5faXNSdW5uaW5nID0gdHJ1ZTsKKyAgICAgICAgLy8gTGV0J3Mgd2FpdCBmb3Ig
dGhlIHNjZW5lIHRvIGJlIHJlYWR5IGJlZm9yZSBydW5uaW5nIG91ciBjaGVjaworICAgICAgICB0
aGlzLl9zY2VuZS5leGVjdXRlV2hlblJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNl
dFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9jaGVja0N1cnJl
bnRTdGF0ZSgpOworICAgICAgICAgICAgfSwgX3RoaXMuX3RyYWNrZXJEdXJhdGlvbik7CisgICAg
ICAgIH0pOworICAgIH07CisgICAgU2NlbmVPcHRpbWl6ZXIucHJvdG90eXBlLl9jaGVja0N1cnJl
bnRTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgaWYgKCF0aGlzLl9pc1J1bm5pbmcpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTsKKyAgICAgICAgdmFyIG9wdGlvbnMg
PSB0aGlzLl9vcHRpb25zOworICAgICAgICB0aGlzLl9jdXJyZW50RnJhbWVSYXRlID0gTWF0aC5y
b3VuZChzY2VuZS5nZXRFbmdpbmUoKS5nZXRGcHMoKSk7CisgICAgICAgIGlmICh0aGlzLl9pbXBy
b3ZlbWVudE1vZGUgJiYgdGhpcy5fY3VycmVudEZyYW1lUmF0ZSA8PSB0aGlzLl90YXJnZXRGcmFt
ZVJhdGUgfHwKKyAgICAgICAgICAgICF0aGlzLl9pbXByb3ZlbWVudE1vZGUgJiYgdGhpcy5fY3Vy
cmVudEZyYW1lUmF0ZSA+PSB0aGlzLl90YXJnZXRGcmFtZVJhdGUpIHsKKyAgICAgICAgICAgIHRo
aXMuX2lzUnVubmluZyA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5vblN1Y2Nlc3NPYnNlcnZh
YmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAvLyBBcHBseSBjdXJyZW50IGxldmVsIG9mIG9wdGltaXphdGlvbnMKKyAgICAg
ICAgdmFyIGFsbERvbmUgPSB0cnVlOworICAgICAgICB2YXIgbm9PcHRpbWl6YXRpb25BcHBsaWVk
ID0gdHJ1ZTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvbnMub3B0
aW1pemF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBvcHRpbWl6YXRp
b24gPSBvcHRpb25zLm9wdGltaXphdGlvbnNbaW5kZXhdOworICAgICAgICAgICAgaWYgKG9wdGlt
aXphdGlvbi5wcmlvcml0eSA9PT0gdGhpcy5fY3VycmVudFByaW9yaXR5TGV2ZWwpIHsKKyAgICAg
ICAgICAgICAgICBub09wdGltaXphdGlvbkFwcGxpZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBhbGxEb25lID0gYWxsRG9uZSAmJiBvcHRpbWl6YXRpb24uYXBwbHkoc2NlbmUsIHRoaXMpOwor
ICAgICAgICAgICAgICAgIHRoaXMub25OZXdPcHRpbWl6YXRpb25BcHBsaWVkT2JzZXJ2YWJsZS5u
b3RpZnlPYnNlcnZlcnMob3B0aW1pemF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAvLyBJZiBubyBvcHRpbWl6YXRpb24gd2FzIGFwcGxpZWQsIHRoaXMgaXMgYSBmYWls
dXJlIDooCisgICAgICAgIGlmIChub09wdGltaXphdGlvbkFwcGxpZWQpIHsKKyAgICAgICAgICAg
IHRoaXMuX2lzUnVubmluZyA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5vbkZhaWx1cmVPYnNl
cnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAvLyBJZiBhbGwgb3B0aW1pemF0aW9ucyB3ZXJlIGRvbmUsIG1vdmUgdG8g
bmV4dCBsZXZlbAorICAgICAgICBpZiAoYWxsRG9uZSkgeworICAgICAgICAgICAgdGhpcy5fY3Vy
cmVudFByaW9yaXR5TGV2ZWwrKzsKKyAgICAgICAgfQorICAgICAgICAvLyBMZXQncyB0aGUgc3lz
dGVtIHJ1bm5pbmcgZm9yIGEgc3BlY2lmaWMgYW1vdW50IG9mIHRpbWUgYmVmb3JlIGNoZWNraW5n
IEZQUworICAgICAgICBzY2VuZS5leGVjdXRlV2hlblJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9j
aGVja0N1cnJlbnRTdGF0ZSgpOworICAgICAgICAgICAgfSwgX3RoaXMuX3RyYWNrZXJEdXJhdGlv
bik7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZSBhbGwgcmVz
b3VyY2VzCisgICAgICovCisgICAgU2NlbmVPcHRpbWl6ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuc3RvcCgpOworICAgICAgICB0aGlzLm9uU3VjY2Vz
c09ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkZhaWx1cmVPYnNlcnZhYmxlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMub25OZXdPcHRpbWl6YXRpb25BcHBsaWVkT2JzZXJ2YWJsZS5j
bGVhcigpOworICAgICAgICBpZiAodGhpcy5fc2NlbmVEaXNwb3NlT2JzZXJ2ZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3NjZW5lLm9uRGlzcG9zZU9ic2VydmFibGUucmVtb3ZlKHRoaXMuX3NjZW5l
RGlzcG9zZU9ic2VydmVyKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogSGVs
cGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIFNjZW5lT3B0aW1pemVyIHdpdGggb25lIHNpbmdsZSBs
aW5lIG9mIGNvZGUKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgdG8gd29y
ayBvbgorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdG8gdXNlIHdp
dGggdGhlIFNjZW5lT3B0aW1pemVyCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBkZWZpbmVzIGEg
Y2FsbGJhY2sgdG8gY2FsbCBvbiBzdWNjZXNzCisgICAgICogQHBhcmFtIG9uRmFpbHVyZSBkZWZp
bmVzIGEgY2FsbGJhY2sgdG8gY2FsbCBvbiBmYWlsdXJlCisgICAgICogQHJldHVybnMgdGhlIG5l
dyBTY2VuZU9wdGltaXplciBvYmplY3QKKyAgICAgKi8KKyAgICBTY2VuZU9wdGltaXplci5PcHRp
bWl6ZUFzeW5jID0gZnVuY3Rpb24gKHNjZW5lLCBvcHRpb25zLCBvblN1Y2Nlc3MsIG9uRmFpbHVy
ZSkgeworICAgICAgICB2YXIgb3B0aW1pemVyID0gbmV3IFNjZW5lT3B0aW1pemVyKHNjZW5lLCBv
cHRpb25zIHx8IFNjZW5lT3B0aW1pemVyT3B0aW9ucy5Nb2RlcmF0ZURlZ3JhZGF0aW9uQWxsb3dl
ZCgpLCBmYWxzZSk7CisgICAgICAgIGlmIChvblN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIG9wdGlt
aXplci5vblN1Y2Nlc3NPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAg
ICAgb25TdWNjZXNzKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
b25GYWlsdXJlKSB7CisgICAgICAgICAgICBvcHRpbWl6ZXIub25GYWlsdXJlT2JzZXJ2YWJsZS5h
ZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIG9uRmFpbHVyZSgpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgb3B0aW1pemVyLnN0YXJ0KCk7CisgICAgICAgIHJl
dHVybiBvcHRpbWl6ZXI7CisgICAgfTsKKyAgICByZXR1cm4gU2NlbmVPcHRpbWl6ZXI7Cit9KCkp
OworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2Mvc2NlbmVTZXJpYWxpemVyLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlzYy9z
Y2VuZVNlcmlhbGl6ZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNjZW5lU2VyaWFsaXplciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY2VuZVNlcmlhbGl6ZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFNjZW5lU2VyaWFsaXplcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01l
c2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8g
Ii4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX211bHRpTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tdWx0aU1hdGVyaWFsICovICIuL01hdGVy
aWFscy9tdWx0aU1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKworCisKKwordmFy
IHNlcmlhbGl6ZWRHZW9tZXRyaWVzID0gW107Cit2YXIgc2VyaWFsaXplR2VvbWV0cnkgPSBmdW5j
dGlvbiAoZ2VvbWV0cnksIHNlcmlhbGl6YXRpb25HZW9tZXRyaWVzKSB7CisgICAgaWYgKHNlcmlh
bGl6ZWRHZW9tZXRyaWVzW2dlb21ldHJ5LmlkXSkgeworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChnZW9tZXRyeS5kb05vdFNlcmlhbGl6ZSkgeworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIHNlcmlhbGl6YXRpb25HZW9tZXRyaWVzLnZlcnRleERhdGEucHVzaChnZW9tZXRyeS5z
ZXJpYWxpemVWZXJ0aWNlRGF0YSgpKTsKKyAgICBzZXJpYWxpemVkR2VvbWV0cmllc1tnZW9tZXRy
eS5pZF0gPSB0cnVlOworfTsKK3ZhciBzZXJpYWxpemVNZXNoID0gZnVuY3Rpb24gKG1lc2gsIHNl
cmlhbGl6YXRpb25TY2VuZSkgeworICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307Cisg
ICAgLy8gR2VvbWV0cnkKKyAgICB2YXIgZ2VvbWV0cnkgPSBtZXNoLl9nZW9tZXRyeTsKKyAgICBp
ZiAoZ2VvbWV0cnkpIHsKKyAgICAgICAgaWYgKCFtZXNoLmdldFNjZW5lKCkuZ2V0R2VvbWV0cnlC
eUlEKGdlb21ldHJ5LmlkKSkgeworICAgICAgICAgICAgLy8gR2VvbWV0cnkgd2FzIGluIHRoZSBt
ZW1vcnkgYnV0IG5vdCBhZGRlZCB0byB0aGUgc2NlbmUsIG5ldmVydGhlbGVzcyBpdCdzIGJldHRl
ciB0byBzZXJpYWxpemUgdG8gYmUgYWJsZSB0byByZWxvYWQgdGhlIG1lc2ggd2l0aCBpdHMgZ2Vv
bWV0cnkKKyAgICAgICAgICAgIHNlcmlhbGl6ZUdlb21ldHJ5KGdlb21ldHJ5LCBzZXJpYWxpemF0
aW9uU2NlbmUuZ2VvbWV0cmllcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gQ3VzdG9tCisg
ICAgaWYgKG1lc2guc2VyaWFsaXplKSB7CisgICAgICAgIG1lc2guc2VyaWFsaXplKHNlcmlhbGl6
YXRpb25PYmplY3QpOworICAgIH0KKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKK307
Cit2YXIgZmluYWxpemVTaW5nbGVNZXNoID0gZnVuY3Rpb24gKG1lc2gsIHNlcmlhbGl6YXRpb25P
YmplY3QpIHsKKyAgICAvL29ubHkgd29ya3MgaWYgdGhlIG1lc2ggaXMgYWxyZWFkeSBsb2FkZWQK
KyAgICBpZiAobWVzaC5kZWxheUxvYWRTdGF0ZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNUQVRFX0xPQURF
RCB8fCBtZXNoLmRlbGF5TG9hZFN0YXRlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siQ29uc3RhbnRzIl0uREVMQVlMT0FEU1RBVEVfTk9ORSkgewor
ICAgICAgICAvL3NlcmlhbGl6ZSBtYXRlcmlhbAorICAgICAgICBpZiAobWVzaC5tYXRlcmlhbCAm
JiAhbWVzaC5tYXRlcmlhbC5kb05vdFNlcmlhbGl6ZSkgeworICAgICAgICAgICAgaWYgKG1lc2gu
bWF0ZXJpYWwgaW5zdGFuY2VvZiBfTWF0ZXJpYWxzX211bHRpTWF0ZXJpYWxfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTXVsdGlNYXRlcmlhbCJdKSB7CisgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5tdWx0aU1hdGVyaWFscyA9IHNlcmlhbGl6YXRpb25PYmplY3QubXVs
dGlNYXRlcmlhbHMgfHwgW107CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5t
YXRlcmlhbHMgPSBzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdGVyaWFscyB8fCBbXTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXNlcmlhbGl6YXRpb25PYmplY3QubXVsdGlNYXRlcmlhbHMuc29tZShmdW5j
dGlvbiAobWF0KSB7IHJldHVybiAobWF0LmlkID09PSBtZXNoLm1hdGVyaWFsLmlkKTsgfSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tdWx0aU1hdGVyaWFscy5w
dXNoKG1lc2gubWF0ZXJpYWwuc2VyaWFsaXplKCkpOworICAgICAgICAgICAgICAgICAgICB2YXIg
X2xvb3BfMSA9IGZ1bmN0aW9uIChzdWJtYXRlcmlhbCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN1Ym1hdGVyaWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
ZXJpYWxpemF0aW9uT2JqZWN0Lm1hdGVyaWFscy5zb21lKGZ1bmN0aW9uIChtYXQpIHsgcmV0dXJu
IChtYXQuaWQgPT09IHN1Ym1hdGVyaWFsLmlkKTsgfSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXRlcmlhbHMucHVzaChzdWJtYXRlcmlh
bC5zZXJpYWxpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gbWVzaC5tYXRlcmlhbC5zdWJNYXRlcmlhbHM7IF9p
IDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VibWF0
ZXJpYWwgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgICAgICAgICBfbG9vcF8xKHN1Ym1hdGVy
aWFsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QubWF0ZXJpYWxzID0gc2VyaWFsaXphdGlvbk9iamVjdC5tYXRlcmlhbHMgfHwgW107Cisg
ICAgICAgICAgICAgICAgaWYgKCFzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdGVyaWFscy5zb21lKGZ1
bmN0aW9uIChtYXQpIHsgcmV0dXJuIChtYXQuaWQgPT09IG1lc2gubWF0ZXJpYWwuaWQpOyB9KSkg
eworICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdGVyaWFscy5wdXNo
KG1lc2gubWF0ZXJpYWwuc2VyaWFsaXplKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAvL3NlcmlhbGl6ZSBnZW9tZXRyeQorICAgICAgICB2
YXIgZ2VvbWV0cnkgPSBtZXNoLl9nZW9tZXRyeTsKKyAgICAgICAgaWYgKGdlb21ldHJ5KSB7Cisg
ICAgICAgICAgICBpZiAoIXNlcmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcykgeworICAgICAg
ICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcyA9IHt9OworICAgICAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcy5ib3hlcyA9IFtdOworICAgICAg
ICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcy5zcGhlcmVzID0gW107Cisg
ICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5nZW9tZXRyaWVzLmN5bGluZGVycyA9
IFtdOworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcy50b3J1
c2VzID0gW107CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5nZW9tZXRyaWVz
Lmdyb3VuZHMgPSBbXTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lmdlb21l
dHJpZXMucGxhbmVzID0gW107CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5n
ZW9tZXRyaWVzLnRvcnVzS25vdHMgPSBbXTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9u
T2JqZWN0Lmdlb21ldHJpZXMudmVydGV4RGF0YSA9IFtdOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2VyaWFsaXplR2VvbWV0cnkoZ2VvbWV0cnksIHNlcmlhbGl6YXRpb25PYmplY3QuZ2Vv
bWV0cmllcyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2tlbGV0b25zCisgICAgICAgIGlmICht
ZXNoLnNrZWxldG9uICYmICFtZXNoLnNrZWxldG9uLmRvTm90U2VyaWFsaXplKSB7CisgICAgICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNrZWxldG9ucyA9IHNlcmlhbGl6YXRpb25PYmplY3Qu
c2tlbGV0b25zIHx8IFtdOworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5za2VsZXRv
bnMucHVzaChtZXNoLnNrZWxldG9uLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAv
L3NlcmlhbGl6ZSB0aGUgYWN0dWFsIG1lc2gKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5t
ZXNoZXMgPSBzZXJpYWxpemF0aW9uT2JqZWN0Lm1lc2hlcyB8fCBbXTsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5tZXNoZXMucHVzaChzZXJpYWxpemVNZXNoKG1lc2gsIHNlcmlhbGl6YXRp
b25PYmplY3QpKTsKKyAgICB9Cit9OworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHNlcmlhbGl6ZSBh
IHNjZW5lIGludG8gYSBzdHJpbmcKKyAqLwordmFyIFNjZW5lU2VyaWFsaXplciA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBTY2VuZVNlcmlhbGl6ZXIoKSB7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIENsZWFyIGNhY2hlIHVzZWQgYnkgYSBwcmV2aW91cyBzZXJp
YWxpemF0aW9uCisgICAgICovCisgICAgU2NlbmVTZXJpYWxpemVyLkNsZWFyQ2FjaGUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHNlcmlhbGl6ZWRHZW9tZXRyaWVzID0gW107CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTZXJpYWxpemUgYSBzY2VuZSBpbnRvIGEgSlNPTiBjb21wYXRpYmxlIG9i
amVjdAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0byBzZXJpYWxpemUK
KyAgICAgKiBAcmV0dXJucyBhIEpTT04gY29tcGF0aWJsZSBvYmplY3QKKyAgICAgKi8KKyAgICBT
Y2VuZVNlcmlhbGl6ZXIuU2VyaWFsaXplID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAgICAgIHZh
ciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIFNjZW5lU2VyaWFsaXplci5DbGVh
ckNhY2hlKCk7CisgICAgICAgIC8vIFNjZW5lCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
dXNlRGVsYXllZFRleHR1cmVMb2FkaW5nID0gc2NlbmUudXNlRGVsYXllZFRleHR1cmVMb2FkaW5n
OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmF1dG9DbGVhciA9IHNjZW5lLmF1dG9DbGVh
cjsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jbGVhckNvbG9yID0gc2NlbmUuY2xlYXJD
b2xvci5hc0FycmF5KCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYW1iaWVudENvbG9y
ID0gc2NlbmUuYW1iaWVudENvbG9yLmFzQXJyYXkoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5ncmF2aXR5ID0gc2NlbmUuZ3Jhdml0eS5hc0FycmF5KCk7CisgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QuY29sbGlzaW9uc0VuYWJsZWQgPSBzY2VuZS5jb2xsaXNpb25zRW5hYmxlZDsK
KyAgICAgICAgLy8gRm9nCisgICAgICAgIGlmIChzY2VuZS5mb2dNb2RlICYmIHNjZW5lLmZvZ01v
ZGUgIT09IDApIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZm9nTW9kZSA9IHNj
ZW5lLmZvZ01vZGU7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmZvZ0NvbG9yID0g
c2NlbmUuZm9nQ29sb3IuYXNBcnJheSgpOworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC5mb2dTdGFydCA9IHNjZW5lLmZvZ1N0YXJ0OworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5mb2dFbmQgPSBzY2VuZS5mb2dFbmQ7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LmZvZ0RlbnNpdHkgPSBzY2VuZS5mb2dEZW5zaXR5OworICAgICAgICB9CisgICAgICAgIC8v
UGh5c2ljcworICAgICAgICBpZiAoc2NlbmUuaXNQaHlzaWNzRW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICB2YXIgcGh5c2ljRW5naW5lID0gc2NlbmUuZ2V0UGh5c2ljc0VuZ2luZSgpOworICAgICAg
ICAgICAgaWYgKHBoeXNpY0VuZ2luZSkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QucGh5c2ljc0VuYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QucGh5c2ljc0dyYXZpdHkgPSBwaHlzaWNFbmdpbmUuZ3Jhdml0eS5hc0FycmF5KCk7
CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5waHlzaWNzRW5naW5lID0gcGh5
c2ljRW5naW5lLmdldFBoeXNpY3NQbHVnaW5OYW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgLy8gTWV0YWRhdGEKKyAgICAgICAgaWYgKHNjZW5lLm1ldGFkYXRhKSB7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1ldGFkYXRhID0gc2NlbmUubWV0YWRhdGE7
CisgICAgICAgIH0KKyAgICAgICAgLy8gTW9ycGggdGFyZ2V0cworICAgICAgICBzZXJpYWxpemF0
aW9uT2JqZWN0Lm1vcnBoVGFyZ2V0TWFuYWdlcnMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgX2kg
PSAwLCBfYSA9IHNjZW5lLm1lc2hlczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAg
ICAgIHZhciBhYnN0cmFjdE1lc2ggPSBfYVtfaV07CisgICAgICAgICAgICB2YXIgbWFuYWdlciA9
IGFic3RyYWN0TWVzaC5tb3JwaFRhcmdldE1hbmFnZXI7CisgICAgICAgICAgICBpZiAobWFuYWdl
cikgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubW9ycGhUYXJnZXRNYW5h
Z2Vycy5wdXNoKG1hbmFnZXIuc2VyaWFsaXplKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIC8vIExpZ2h0cworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmxpZ2h0cyA9
IFtdOworICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIHZhciBsaWdodDsKKyAgICAgICAgZm9y
IChpbmRleCA9IDA7IGluZGV4IDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaW5kZXgrKykgeworICAg
ICAgICAgICAgbGlnaHQgPSBzY2VuZS5saWdodHNbaW5kZXhdOworICAgICAgICAgICAgaWYgKCFs
aWdodC5kb05vdFNlcmlhbGl6ZSkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QubGlnaHRzLnB1c2gobGlnaHQuc2VyaWFsaXplKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIC8vIENhbWVyYXMKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jYW1l
cmFzID0gW107CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNjZW5lLmNhbWVyYXMu
bGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgY2FtZXJhID0gc2NlbmUuY2FtZXJh
c1tpbmRleF07CisgICAgICAgICAgICBpZiAoIWNhbWVyYS5kb05vdFNlcmlhbGl6ZSkgeworICAg
ICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY2FtZXJhcy5wdXNoKGNhbWVyYS5zZXJp
YWxpemUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjZW5lLmFj
dGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hY3RpdmVDYW1l
cmFJRCA9IHNjZW5lLmFjdGl2ZUNhbWVyYS5pZDsKKyAgICAgICAgfQorICAgICAgICAvLyBBbmlt
YXRpb25zCisgICAgICAgIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlNlcmlhbGl6YXRpb25IZWxwZXIiXS5BcHBlbmRTZXJpYWxpemVkQW5pbWF0aW9ucyhzY2VuZSwg
c2VyaWFsaXphdGlvbk9iamVjdCk7CisgICAgICAgIC8vIEFuaW1hdGlvbiBHcm91cHMKKyAgICAg
ICAgaWYgKHNjZW5lLmFuaW1hdGlvbkdyb3VwcyAmJiBzY2VuZS5hbmltYXRpb25Hcm91cHMubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hbmltYXRpb25Hcm91
cHMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGFuaW1hdGlvbkdyb3VwSW5kZXggPSAwOyBh
bmltYXRpb25Hcm91cEluZGV4IDwgc2NlbmUuYW5pbWF0aW9uR3JvdXBzLmxlbmd0aDsgYW5pbWF0
aW9uR3JvdXBJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGFuaW1hdGlvbkdyb3VwID0g
c2NlbmUuYW5pbWF0aW9uR3JvdXBzW2FuaW1hdGlvbkdyb3VwSW5kZXhdOworICAgICAgICAgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYW5pbWF0aW9uR3JvdXBzLnB1c2goYW5pbWF0aW9uR3Jv
dXAuc2VyaWFsaXplKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFJl
ZmxlY3Rpb24gcHJvYmVzCisgICAgICAgIGlmIChzY2VuZS5yZWZsZWN0aW9uUHJvYmVzICYmIHNj
ZW5lLnJlZmxlY3Rpb25Qcm9iZXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgc2VyaWFsaXph
dGlvbk9iamVjdC5yZWZsZWN0aW9uUHJvYmVzID0gW107CisgICAgICAgICAgICBmb3IgKGluZGV4
ID0gMDsgaW5kZXggPCBzY2VuZS5yZWZsZWN0aW9uUHJvYmVzLmxlbmd0aDsgaW5kZXgrKykgewor
ICAgICAgICAgICAgICAgIHZhciByZWZsZWN0aW9uUHJvYmUgPSBzY2VuZS5yZWZsZWN0aW9uUHJv
YmVzW2luZGV4XTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJlZmxlY3Rp
b25Qcm9iZXMucHVzaChyZWZsZWN0aW9uUHJvYmUuc2VyaWFsaXplKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIC8vIE1hdGVyaWFscworICAgICAgICBzZXJpYWxpemF0aW9u
T2JqZWN0Lm1hdGVyaWFscyA9IFtdOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm11bHRp
TWF0ZXJpYWxzID0gW107CisgICAgICAgIHZhciBtYXRlcmlhbDsKKyAgICAgICAgZm9yIChpbmRl
eCA9IDA7IGluZGV4IDwgc2NlbmUubWF0ZXJpYWxzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgbWF0ZXJpYWwgPSBzY2VuZS5tYXRlcmlhbHNbaW5kZXhdOworICAgICAgICAgICAgaWYg
KCFtYXRlcmlhbC5kb05vdFNlcmlhbGl6ZSkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QubWF0ZXJpYWxzLnB1c2gobWF0ZXJpYWwuc2VyaWFsaXplKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE11bHRpTWF0ZXJpYWxzCisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3QubXVsdGlNYXRlcmlhbHMgPSBbXTsKKyAgICAgICAgZm9yIChpbmRleCA9
IDA7IGluZGV4IDwgc2NlbmUubXVsdGlNYXRlcmlhbHMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAg
ICAgICAgICB2YXIgbXVsdGlNYXRlcmlhbCA9IHNjZW5lLm11bHRpTWF0ZXJpYWxzW2luZGV4XTsK
KyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubXVsdGlNYXRlcmlhbHMucHVzaChtdWx0
aU1hdGVyaWFsLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBFbnZpcm9ubWVu
dCB0ZXh0dXJlCisgICAgICAgIGlmIChzY2VuZS5lbnZpcm9ubWVudFRleHR1cmUpIHsKKyAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZW52aXJvbm1lbnRUZXh0dXJlID0gc2NlbmUuZW52
aXJvbm1lbnRUZXh0dXJlLm5hbWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gRW52aXJvbm1lbnQg
SW50ZW5zaXR5CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZW52aXJvbm1lbnRJbnRlbnNp
dHkgPSBzY2VuZS5lbnZpcm9ubWVudEludGVuc2l0eTsKKyAgICAgICAgLy8gU2tlbGV0b25zCisg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc2tlbGV0b25zID0gW107CisgICAgICAgIGZvciAo
aW5kZXggPSAwOyBpbmRleCA8IHNjZW5lLnNrZWxldG9ucy5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgIHZhciBza2VsZXRvbiA9IHNjZW5lLnNrZWxldG9uc1tpbmRleF07CisgICAgICAg
ICAgICBpZiAoIXNrZWxldG9uLmRvTm90U2VyaWFsaXplKSB7CisgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5za2VsZXRvbnMucHVzaChza2VsZXRvbi5zZXJpYWxpemUoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVHJhbnNmb3JtIG5vZGVzCisgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QudHJhbnNmb3JtTm9kZXMgPSBbXTsKKyAgICAgICAgZm9y
IChpbmRleCA9IDA7IGluZGV4IDwgc2NlbmUudHJhbnNmb3JtTm9kZXMubGVuZ3RoOyBpbmRleCsr
KSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRyYW5zZm9ybU5vZGVzLnB1c2go
c2NlbmUudHJhbnNmb3JtTm9kZXNbaW5kZXhdLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBHZW9tZXRyaWVzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmll
cyA9IHt9OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lmdlb21ldHJpZXMuYm94ZXMgPSBb
XTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5nZW9tZXRyaWVzLnNwaGVyZXMgPSBbXTsK
KyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5nZW9tZXRyaWVzLmN5bGluZGVycyA9IFtdOwor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lmdlb21ldHJpZXMudG9ydXNlcyA9IFtdOworICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lmdlb21ldHJpZXMuZ3JvdW5kcyA9IFtdOworICAgICAg
ICBzZXJpYWxpemF0aW9uT2JqZWN0Lmdlb21ldHJpZXMucGxhbmVzID0gW107CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcy50b3J1c0tub3RzID0gW107CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcy52ZXJ0ZXhEYXRhID0gW107CisgICAgICAgIHNl
cmlhbGl6ZWRHZW9tZXRyaWVzID0gW107CisgICAgICAgIHZhciBnZW9tZXRyaWVzID0gc2NlbmUu
Z2V0R2VvbWV0cmllcygpOworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBnZW9tZXRy
aWVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gZ2VvbWV0
cmllc1tpbmRleF07CisgICAgICAgICAgICBpZiAoZ2VvbWV0cnkuaXNSZWFkeSgpKSB7CisgICAg
ICAgICAgICAgICAgc2VyaWFsaXplR2VvbWV0cnkoZ2VvbWV0cnksIHNlcmlhbGl6YXRpb25PYmpl
Y3QuZ2VvbWV0cmllcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gTWVz
aGVzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWVzaGVzID0gW107CisgICAgICAgIGZv
ciAoaW5kZXggPSAwOyBpbmRleCA8IHNjZW5lLm1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgIHZhciBhYnN0cmFjdE1lc2ggPSBzY2VuZS5tZXNoZXNbaW5kZXhdOworICAgICAg
ICAgICAgaWYgKGFic3RyYWN0TWVzaCBpbnN0YW5jZW9mIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0pIHsKKyAgICAgICAgICAgICAgICB2YXIgbWVzaCA9
IGFic3RyYWN0TWVzaDsKKyAgICAgICAgICAgICAgICBpZiAoIW1lc2guZG9Ob3RTZXJpYWxpemUp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2guZGVsYXlMb2FkU3RhdGUgPT09IF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5E
RUxBWUxPQURTVEFURV9MT0FERUQgfHwgbWVzaC5kZWxheUxvYWRTdGF0ZSA9PT0gX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLkRFTEFZ
TE9BRFNUQVRFX05PTkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QubWVzaGVzLnB1c2goc2VyaWFsaXplTWVzaChtZXNoLCBzZXJpYWxpemF0aW9uT2JqZWN0
KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gUGFydGljbGVzIFN5c3RlbXMKKyAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5wYXJ0aWNsZVN5c3RlbXMgPSBbXTsKKyAgICAgICAgZm9yIChpbmRl
eCA9IDA7IGluZGV4IDwgc2NlbmUucGFydGljbGVTeXN0ZW1zLmxlbmd0aDsgaW5kZXgrKykgewor
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5wYXJ0aWNsZVN5c3RlbXMucHVzaChzY2Vu
ZS5wYXJ0aWNsZVN5c3RlbXNbaW5kZXhdLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBBY3Rpb24gTWFuYWdlcgorICAgICAgICBpZiAoc2NlbmUuYWN0aW9uTWFuYWdlcikgewor
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hY3Rpb25zID0gc2NlbmUuYWN0aW9uTWFu
YWdlci5zZXJpYWxpemUoInNjZW5lIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29tcG9uZW50
cworICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gc2NlbmUuX3NlcmlhbGl6YWJsZUNvbXBv
bmVudHM7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7CisgICAgICAgICAgICB2YXIgY29tcG9uZW50
ID0gX2NbX2JdOworICAgICAgICAgICAgY29tcG9uZW50LnNlcmlhbGl6ZShzZXJpYWxpemF0aW9u
T2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSBhIG1lc2ggaW50byBhIEpTT04gY29t
cGF0aWJsZSBvYmplY3QKKyAgICAgKiBAcGFyYW0gdG9TZXJpYWxpemUgZGVmaW5lcyB0aGUgbWVz
aCB0byBzZXJpYWxpemUKKyAgICAgKiBAcGFyYW0gd2l0aFBhcmVudHMgZGVmaW5lcyBpZiBwYXJl
bnRzIG11c3QgYmUgc2VyaWFsaXplZCBhcyB3ZWxsCisgICAgICogQHBhcmFtIHdpdGhDaGlsZHJl
biBkZWZpbmVzIGlmIGNoaWxkcmVuIG11c3QgYmUgc2VyaWFsaXplZCBhcyB3ZWxsCisgICAgICog
QHJldHVybnMgYSBKU09OIGNvbXBhdGlibGUgb2JqZWN0CisgICAgICovCisgICAgU2NlbmVTZXJp
YWxpemVyLlNlcmlhbGl6ZU1lc2ggPSBmdW5jdGlvbiAodG9TZXJpYWxpemUgLyogTWVzaCB8fCBN
ZXNoW10gKi8sIHdpdGhQYXJlbnRzLCB3aXRoQ2hpbGRyZW4pIHsKKyAgICAgICAgaWYgKHdpdGhQ
YXJlbnRzID09PSB2b2lkIDApIHsgd2l0aFBhcmVudHMgPSBmYWxzZTsgfQorICAgICAgICBpZiAo
d2l0aENoaWxkcmVuID09PSB2b2lkIDApIHsgd2l0aENoaWxkcmVuID0gZmFsc2U7IH0KKyAgICAg
ICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAgICAgICAgU2NlbmVTZXJpYWxpemVy
LkNsZWFyQ2FjaGUoKTsKKyAgICAgICAgdG9TZXJpYWxpemUgPSAodG9TZXJpYWxpemUgaW5zdGFu
Y2VvZiBBcnJheSkgPyB0b1NlcmlhbGl6ZSA6IFt0b1NlcmlhbGl6ZV07CisgICAgICAgIGlmICh3
aXRoUGFyZW50cyB8fCB3aXRoQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIC8vZGVsaWJlcmF0ZSBm
b3IgbG9vcCEgbm90IGZvciBlYWNoLCBhcHBlbmRlZCBzaG91bGQgYmUgcHJvY2Vzc2VkIGFzIHdl
bGwuCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvU2VyaWFsaXplLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHdpdGhDaGlsZHJlbikgeworICAgICAgICAgICAg
ICAgICAgICB0b1NlcmlhbGl6ZVtpXS5nZXREZXNjZW5kYW50cygpLmZvckVhY2goZnVuY3Rpb24g
KG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgX01l
c2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXSAmJiAodG9TZXJp
YWxpemUuaW5kZXhPZihub2RlKSA8IDApICYmICFub2RlLmRvTm90U2VyaWFsaXplKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9TZXJpYWxpemUucHVzaChub2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vbWFrZSBzdXJlIHRoZSBhcnJheSBkb2Vzbid0IGNvbnRh
aW4gdGhlIG9iamVjdCBhbHJlYWR5CisgICAgICAgICAgICAgICAgaWYgKHdpdGhQYXJlbnRzICYm
IHRvU2VyaWFsaXplW2ldLnBhcmVudCAmJiAodG9TZXJpYWxpemUuaW5kZXhPZih0b1NlcmlhbGl6
ZVtpXS5wYXJlbnQpIDwgMCkgJiYgIXRvU2VyaWFsaXplW2ldLnBhcmVudC5kb05vdFNlcmlhbGl6
ZSkgeworICAgICAgICAgICAgICAgICAgICB0b1NlcmlhbGl6ZS5wdXNoKHRvU2VyaWFsaXplW2ld
LnBhcmVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHRvU2VyaWFsaXplLmZvckVhY2goZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgICAg
IGZpbmFsaXplU2luZ2xlTWVzaChtZXNoLCBzZXJpYWxpemF0aW9uT2JqZWN0KTsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgcmV0
dXJuIFNjZW5lU2VyaWFsaXplcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWlzYy9zY3JlZW5zaG90VG9vbHMudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9NaXNjL3NjcmVlbnNob3RUb29scy50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2Ny
ZWVuc2hvdFRvb2xzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjcmVl
bnNob3RUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2NyZWVuc2hvdFRvb2xzOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVy
aWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJU
YXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZSAqLyAi
Li9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX2Z4YWFQb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUG9zdFByb2Nl
c3Nlcy9meGFhUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9meGFhUG9zdFByb2Nlc3Mu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2lu
ZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOwor
CisKKworCisKKworLyoqCisgKiBDbGFzcyBjb250YWluaW5nIGEgc2V0IG9mIHN0YXRpYyB1dGls
aXRpZXMgZnVuY3Rpb25zIGZvciBzY3JlZW5zaG90cworICovCit2YXIgU2NyZWVuc2hvdFRvb2xz
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFNjcmVlbnNob3RU
b29scygpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogQ2FwdHVyZXMgYSBzY3JlZW5zaG90IG9m
IHRoZSBjdXJyZW50IHJlbmRlcmluZworICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9yZW5kZXJfc2NlbmVfb25fYV9wbmcKKyAgICAgKiBAcGFyYW0gZW5naW5lIGRl
ZmluZXMgdGhlIHJlbmRlcmluZyBlbmdpbmUKKyAgICAgKiBAcGFyYW0gY2FtZXJhIGRlZmluZXMg
dGhlIHNvdXJjZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gc2l6ZSBUaGlzIHBhcmFtZXRlciBjYW4g
YmUgc2V0IHRvIGEgc2luZ2xlIG51bWJlciBvciB0byBhbiBvYmplY3Qgd2l0aCB0aGUKKyAgICAg
KiBmb2xsb3dpbmcgKG9wdGlvbmFsKSBwcm9wZXJ0aWVzOiBwcmVjaXNpb24sIHdpZHRoLCBoZWln
aHQuIElmIGEgc2luZ2xlIG51bWJlciBpcyBwYXNzZWQsCisgICAgICogaXQgd2lsbCBiZSB1c2Vk
IGZvciBib3RoIHdpZHRoIGFuZCBoZWlnaHQuIElmIGFuIG9iamVjdCBpcyBwYXNzZWQsIHRoZSBz
Y3JlZW5zaG90IHNpemUKKyAgICAgKiB3aWxsIGJlIGRlcml2ZWQgZnJvbSB0aGUgcGFyYW1ldGVy
cy4gVGhlIHByZWNpc2lvbiBwcm9wZXJ0eSBpcyBhIG11bHRpcGxpZXIgYWxsb3dpbmcKKyAgICAg
KiByZW5kZXJpbmcgYXQgYSBoaWdoZXIgb3IgbG93ZXIgcmVzb2x1dGlvbgorICAgICAqIEBwYXJh
bSBzdWNjZXNzQ2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sgcmVjZWl2ZXMgYSBzaW5nbGUg
cGFyYW1ldGVyIHdoaWNoIGNvbnRhaW5zIHRoZQorICAgICAqIHNjcmVlbnNob3QgYXMgYSBzdHJp
bmcgb2YgYmFzZTY0LWVuY29kZWQgY2hhcmFjdGVycy4gVGhpcyBzdHJpbmcgY2FuIGJlIGFzc2ln
bmVkIHRvIHRoZQorICAgICAqIHNyYyBwYXJhbWV0ZXIgb2YgYW4gPGltZz4gdG8gZGlzcGxheSBp
dAorICAgICAqIEBwYXJhbSBtaW1lVHlwZSBkZWZpbmVzIHRoZSBNSU1FIHR5cGUgb2YgdGhlIHNj
cmVlbnNob3QgaW1hZ2UgKGRlZmF1bHQ6IGltYWdlL3BuZykuCisgICAgICogQ2hlY2sgeW91ciBi
cm93c2VyIGZvciBzdXBwb3J0ZWQgTUlNRSB0eXBlcworICAgICAqLworICAgIFNjcmVlbnNob3RU
b29scy5DcmVhdGVTY3JlZW5zaG90ID0gZnVuY3Rpb24gKGVuZ2luZSwgY2FtZXJhLCBzaXplLCBz
dWNjZXNzQ2FsbGJhY2ssIG1pbWVUeXBlKSB7CisgICAgICAgIGlmIChtaW1lVHlwZSA9PT0gdm9p
ZCAwKSB7IG1pbWVUeXBlID0gImltYWdlL3BuZyI7IH0KKyAgICAgICAgdmFyIF9hID0gU2NyZWVu
c2hvdFRvb2xzLl9nZXRTY3JlZW5zaG90U2l6ZShlbmdpbmUsIGNhbWVyYSwgc2l6ZSksIGhlaWdo
dCA9IF9hLmhlaWdodCwgd2lkdGggPSBfYS53aWR0aDsKKyAgICAgICAgaWYgKCEoaGVpZ2h0ICYm
IHdpZHRoKSkgeworICAgICAgICAgICAgX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJMb2dnZXIiXS5FcnJvcigiSW52YWxpZCAnc2l6ZScgcGFyYW1ldGVyICEiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIV90b29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLl9TY3JlZW5zaG90Q2FudmFzKSB7CisgICAgICAg
ICAgICBfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVG9vbHMiXS5fU2NyZWVu
c2hvdENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOworICAgICAgICB9
CisgICAgICAgIF90b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLl9T
Y3JlZW5zaG90Q2FudmFzLndpZHRoID0gd2lkdGg7CisgICAgICAgIF90b29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLl9TY3JlZW5zaG90Q2FudmFzLmhlaWdodCA9IGhl
aWdodDsKKyAgICAgICAgdmFyIHJlbmRlckNvbnRleHQgPSBfdG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siVG9vbHMiXS5fU2NyZWVuc2hvdENhbnZhcy5nZXRDb250ZXh0KCIyZCIp
OworICAgICAgICB2YXIgcmF0aW8gPSBlbmdpbmUuZ2V0UmVuZGVyV2lkdGgoKSAvIGVuZ2luZS5n
ZXRSZW5kZXJIZWlnaHQoKTsKKyAgICAgICAgdmFyIG5ld1dpZHRoID0gd2lkdGg7CisgICAgICAg
IHZhciBuZXdIZWlnaHQgPSBuZXdXaWR0aCAvIHJhdGlvOworICAgICAgICBpZiAobmV3SGVpZ2h0
ID4gaGVpZ2h0KSB7CisgICAgICAgICAgICBuZXdIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAg
ICBuZXdXaWR0aCA9IG5ld0hlaWdodCAqIHJhdGlvOworICAgICAgICB9CisgICAgICAgIHZhciBv
ZmZzZXRYID0gTWF0aC5tYXgoMCwgd2lkdGggLSBuZXdXaWR0aCkgLyAyOworICAgICAgICB2YXIg
b2Zmc2V0WSA9IE1hdGgubWF4KDAsIGhlaWdodCAtIG5ld0hlaWdodCkgLyAyOworICAgICAgICB2
YXIgcmVuZGVyaW5nQ2FudmFzID0gZW5naW5lLmdldFJlbmRlcmluZ0NhbnZhcygpOworICAgICAg
ICBpZiAocmVuZGVyQ29udGV4dCAmJiByZW5kZXJpbmdDYW52YXMpIHsKKyAgICAgICAgICAgIHJl
bmRlckNvbnRleHQuZHJhd0ltYWdlKHJlbmRlcmluZ0NhbnZhcywgb2Zmc2V0WCwgb2Zmc2V0WSwg
bmV3V2lkdGgsIG5ld0hlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgX3Rvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlRvb2xzIl0uRW5jb2RlU2NyZWVuc2hvdENhbnZhc0RhdGEo
c3VjY2Vzc0NhbGxiYWNrLCBtaW1lVHlwZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYXB0
dXJlcyBhIHNjcmVlbnNob3Qgb2YgdGhlIGN1cnJlbnQgcmVuZGVyaW5nCisgICAgICogQHNlZSBo
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3JlbmRlcl9zY2VuZV9vbl9hX3BuZworICAg
ICAqIEBwYXJhbSBlbmdpbmUgZGVmaW5lcyB0aGUgcmVuZGVyaW5nIGVuZ2luZQorICAgICAqIEBw
YXJhbSBjYW1lcmEgZGVmaW5lcyB0aGUgc291cmNlIGNhbWVyYQorICAgICAqIEBwYXJhbSBzaXpl
IFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gYSBzaW5nbGUgbnVtYmVyIG9yIHRvIGFuIG9i
amVjdCB3aXRoIHRoZQorICAgICAqIGZvbGxvd2luZyAob3B0aW9uYWwpIHByb3BlcnRpZXM6IHBy
ZWNpc2lvbiwgd2lkdGgsIGhlaWdodC4gSWYgYSBzaW5nbGUgbnVtYmVyIGlzIHBhc3NlZCwKKyAg
ICAgKiBpdCB3aWxsIGJlIHVzZWQgZm9yIGJvdGggd2lkdGggYW5kIGhlaWdodC4gSWYgYW4gb2Jq
ZWN0IGlzIHBhc3NlZCwgdGhlIHNjcmVlbnNob3Qgc2l6ZQorICAgICAqIHdpbGwgYmUgZGVyaXZl
ZCBmcm9tIHRoZSBwYXJhbWV0ZXJzLiBUaGUgcHJlY2lzaW9uIHByb3BlcnR5IGlzIGEgbXVsdGlw
bGllciBhbGxvd2luZworICAgICAqIHJlbmRlcmluZyBhdCBhIGhpZ2hlciBvciBsb3dlciByZXNv
bHV0aW9uCisgICAgICogQHBhcmFtIG1pbWVUeXBlIGRlZmluZXMgdGhlIE1JTUUgdHlwZSBvZiB0
aGUgc2NyZWVuc2hvdCBpbWFnZSAoZGVmYXVsdDogaW1hZ2UvcG5nKS4KKyAgICAgKiBDaGVjayB5
b3VyIGJyb3dzZXIgZm9yIHN1cHBvcnRlZCBNSU1FIHR5cGVzCisgICAgICogQHJldHVybnMgc2Ny
ZWVuc2hvdCBhcyBhIHN0cmluZyBvZiBiYXNlNjQtZW5jb2RlZCBjaGFyYWN0ZXJzLiBUaGlzIHN0
cmluZyBjYW4gYmUgYXNzaWduZWQKKyAgICAgKiB0byB0aGUgc3JjIHBhcmFtZXRlciBvZiBhbiA8
aW1nPiB0byBkaXNwbGF5IGl0CisgICAgICovCisgICAgU2NyZWVuc2hvdFRvb2xzLkNyZWF0ZVNj
cmVlbnNob3RBc3luYyA9IGZ1bmN0aW9uIChlbmdpbmUsIGNhbWVyYSwgc2l6ZSwgbWltZVR5cGUp
IHsKKyAgICAgICAgaWYgKG1pbWVUeXBlID09PSB2b2lkIDApIHsgbWltZVR5cGUgPSAiaW1hZ2Uv
cG5nIjsgfQorICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJl
amVjdCkgeworICAgICAgICAgICAgU2NyZWVuc2hvdFRvb2xzLkNyZWF0ZVNjcmVlbnNob3QoZW5n
aW5lLCBjYW1lcmEsIHNpemUsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgICAgICAgaWYg
KHR5cGVvZiAoZGF0YSkgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
c29sdmUoZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJEYXRhIGlzIHVuZGVmaW5lZCIp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCBtaW1lVHlwZSk7CisgICAgICAg
IH0pOworICAgIH07CisgICAgLyoqCisgICAgICogR2VuZXJhdGVzIGFuIGltYWdlIHNjcmVlbnNo
b3QgZnJvbSB0aGUgc3BlY2lmaWVkIGNhbWVyYS4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vcmVuZGVyX3NjZW5lX29uX2FfcG5nCisgICAgICogQHBhcmFtIGVu
Z2luZSBUaGUgZW5naW5lIHRvIHVzZSBmb3IgcmVuZGVyaW5nCisgICAgICogQHBhcmFtIGNhbWVy
YSBUaGUgY2FtZXJhIHRvIHVzZSBmb3IgcmVuZGVyaW5nCisgICAgICogQHBhcmFtIHNpemUgVGhp
cyBwYXJhbWV0ZXIgY2FuIGJlIHNldCB0byBhIHNpbmdsZSBudW1iZXIgb3IgdG8gYW4gb2JqZWN0
IHdpdGggdGhlCisgICAgICogZm9sbG93aW5nIChvcHRpb25hbCkgcHJvcGVydGllczogcHJlY2lz
aW9uLCB3aWR0aCwgaGVpZ2h0LiBJZiBhIHNpbmdsZSBudW1iZXIgaXMgcGFzc2VkLAorICAgICAq
IGl0IHdpbGwgYmUgdXNlZCBmb3IgYm90aCB3aWR0aCBhbmQgaGVpZ2h0LiBJZiBhbiBvYmplY3Qg
aXMgcGFzc2VkLCB0aGUgc2NyZWVuc2hvdCBzaXplCisgICAgICogd2lsbCBiZSBkZXJpdmVkIGZy
b20gdGhlIHBhcmFtZXRlcnMuIFRoZSBwcmVjaXNpb24gcHJvcGVydHkgaXMgYSBtdWx0aXBsaWVy
IGFsbG93aW5nCisgICAgICogcmVuZGVyaW5nIGF0IGEgaGlnaGVyIG9yIGxvd2VyIHJlc29sdXRp
b24KKyAgICAgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIFRoZSBjYWxsYmFjayByZWNlaXZlcyBh
IHNpbmdsZSBwYXJhbWV0ZXIgd2hpY2ggY29udGFpbnMgdGhlCisgICAgICogc2NyZWVuc2hvdCBh
cyBhIHN0cmluZyBvZiBiYXNlNjQtZW5jb2RlZCBjaGFyYWN0ZXJzLiBUaGlzIHN0cmluZyBjYW4g
YmUgYXNzaWduZWQgdG8gdGhlCisgICAgICogc3JjIHBhcmFtZXRlciBvZiBhbiA8aW1nPiB0byBk
aXNwbGF5IGl0CisgICAgICogQHBhcmFtIG1pbWVUeXBlIFRoZSBNSU1FIHR5cGUgb2YgdGhlIHNj
cmVlbnNob3QgaW1hZ2UgKGRlZmF1bHQ6IGltYWdlL3BuZykuCisgICAgICogQ2hlY2sgeW91ciBi
cm93c2VyIGZvciBzdXBwb3J0ZWQgTUlNRSB0eXBlcworICAgICAqIEBwYXJhbSBzYW1wbGVzIFRl
eHR1cmUgc2FtcGxlcyAoZGVmYXVsdDogMSkKKyAgICAgKiBAcGFyYW0gYW50aWFsaWFzaW5nIFdo
ZXRoZXIgYW50aWFsaWFzaW5nIHNob3VsZCBiZSB0dXJuZWQgb24gb3Igbm90IChkZWZhdWx0OiBm
YWxzZSkKKyAgICAgKiBAcGFyYW0gZmlsZU5hbWUgQSBuYW1lIGZvciBmb3IgdGhlIGRvd25sb2Fk
ZWQgZmlsZS4KKyAgICAgKi8KKyAgICBTY3JlZW5zaG90VG9vbHMuQ3JlYXRlU2NyZWVuc2hvdFVz
aW5nUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKGVuZ2luZSwgY2FtZXJhLCBzaXplLCBzdWNjZXNz
Q2FsbGJhY2ssIG1pbWVUeXBlLCBzYW1wbGVzLCBhbnRpYWxpYXNpbmcsIGZpbGVOYW1lKSB7Cisg
ICAgICAgIGlmIChtaW1lVHlwZSA9PT0gdm9pZCAwKSB7IG1pbWVUeXBlID0gImltYWdlL3BuZyI7
IH0KKyAgICAgICAgaWYgKHNhbXBsZXMgPT09IHZvaWQgMCkgeyBzYW1wbGVzID0gMTsgfQorICAg
ICAgICBpZiAoYW50aWFsaWFzaW5nID09PSB2b2lkIDApIHsgYW50aWFsaWFzaW5nID0gZmFsc2U7
IH0KKyAgICAgICAgdmFyIF9hID0gU2NyZWVuc2hvdFRvb2xzLl9nZXRTY3JlZW5zaG90U2l6ZShl
bmdpbmUsIGNhbWVyYSwgc2l6ZSksIGhlaWdodCA9IF9hLmhlaWdodCwgd2lkdGggPSBfYS53aWR0
aDsKKyAgICAgICAgdmFyIHRhcmdldFRleHR1cmVTaXplID0geyB3aWR0aDogd2lkdGgsIGhlaWdo
dDogaGVpZ2h0IH07CisgICAgICAgIGlmICghKGhlaWdodCAmJiB3aWR0aCkpIHsKKyAgICAgICAg
ICAgIF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTG9nZ2VyIl0uRXJyb3Io
IkludmFsaWQgJ3NpemUnIHBhcmFtZXRlciAhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIHNjZW5lID0gY2FtZXJhLmdldFNjZW5lKCk7CisgICAgICAgIHZh
ciBwcmV2aW91c0NhbWVyYSA9IG51bGw7CisgICAgICAgIGlmIChzY2VuZS5hY3RpdmVDYW1lcmEg
IT09IGNhbWVyYSkgeworICAgICAgICAgICAgcHJldmlvdXNDYW1lcmEgPSBzY2VuZS5hY3RpdmVD
YW1lcmE7CisgICAgICAgICAgICBzY2VuZS5hY3RpdmVDYW1lcmEgPSBjYW1lcmE7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIHJlbmRlckNhbnZhcyA9IGVuZ2luZS5nZXRSZW5kZXJpbmdDYW52YXMo
KTsKKyAgICAgICAgaWYgKCFyZW5kZXJDYW52YXMpIHsKKyAgICAgICAgICAgIF9sb2dnZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTG9nZ2VyIl0uRXJyb3IoIk5vIHJlbmRlcmluZyBj
YW52YXMgZm91bmQgISIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHZhciBvcmlnaW5hbFNpemUgPSB7IHdpZHRoOiByZW5kZXJDYW52YXMud2lkdGgsIGhlaWdodDog
cmVuZGVyQ2FudmFzLmhlaWdodCB9OworICAgICAgICBlbmdpbmUuc2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgc2NlbmUucmVuZGVyKCk7CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQg
c2l6ZSBjYW4gYmUgYSBudW1iZXIsIG9yIGFuIG9iamVjdCAoYWNjb3JkaW5nIHRvIGVuZ2luZS5w
cm90b3R5cGUuY3JlYXRlUmVuZGVyVGFyZ2V0VGV4dHVyZSBtZXRob2QpCisgICAgICAgIHZhciB0
ZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJSZW5kZXJUYXJnZXRUZXh0dXJlIl0oInNjcmVlblNo
b3QiLCB0YXJnZXRUZXh0dXJlU2l6ZSwgc2NlbmUsIGZhbHNlLCBmYWxzZSwgX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVU
WVBFX1VOU0lHTkVEX0lOVCwgZmFsc2UsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUZXh0dXJlIl0uTkVBUkVTVF9TQU1QTElOR01PREUp
OworICAgICAgICB0ZXh0dXJlLnJlbmRlckxpc3QgPSBudWxsOworICAgICAgICB0ZXh0dXJlLnNh
bXBsZXMgPSBzYW1wbGVzOworICAgICAgICBpZiAoYW50aWFsaWFzaW5nKSB7CisgICAgICAgICAg
ICB0ZXh0dXJlLmFkZFBvc3RQcm9jZXNzKG5ldyBfUG9zdFByb2Nlc3Nlc19meGFhUG9zdFByb2Nl
c3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRnhhYVBvc3RQcm9jZXNzIl0oJ2FudGlh
bGlhc2luZycsIDEuMCwgc2NlbmUuYWN0aXZlQ2FtZXJhKSk7CisgICAgICAgIH0KKyAgICAgICAg
dGV4dHVyZS5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRvb2xzIl0uRHVtcEZy
YW1lYnVmZmVyKHdpZHRoLCBoZWlnaHQsIGVuZ2luZSwgc3VjY2Vzc0NhbGxiYWNrLCBtaW1lVHlw
ZSwgZmlsZU5hbWUpOworICAgICAgICB9KTsKKyAgICAgICAgc2NlbmUuaW5jcmVtZW50UmVuZGVy
SWQoKTsKKyAgICAgICAgc2NlbmUucmVzZXRDYWNoZWRNYXRlcmlhbCgpOworICAgICAgICB0ZXh0
dXJlLnJlbmRlcih0cnVlKTsKKyAgICAgICAgdGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgIGlm
IChwcmV2aW91c0NhbWVyYSkgeworICAgICAgICAgICAgc2NlbmUuYWN0aXZlQ2FtZXJhID0gcHJl
dmlvdXNDYW1lcmE7CisgICAgICAgIH0KKyAgICAgICAgZW5naW5lLnNldFNpemUob3JpZ2luYWxT
aXplLndpZHRoLCBvcmlnaW5hbFNpemUuaGVpZ2h0KTsKKyAgICAgICAgY2FtZXJhLmdldFByb2pl
Y3Rpb25NYXRyaXgodHJ1ZSk7IC8vIEZvcmNlIGNhY2hlIHJlZnJlc2g7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZW5lcmF0ZXMgYW4gaW1hZ2Ugc2NyZWVuc2hvdCBmcm9tIHRoZSBzcGVjaWZp
ZWQgY2FtZXJhLgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9y
ZW5kZXJfc2NlbmVfb25fYV9wbmcKKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgdG8g
dXNlIGZvciByZW5kZXJpbmcKKyAgICAgKiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gdXNl
IGZvciByZW5kZXJpbmcKKyAgICAgKiBAcGFyYW0gc2l6ZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUg
c2V0IHRvIGEgc2luZ2xlIG51bWJlciBvciB0byBhbiBvYmplY3Qgd2l0aCB0aGUKKyAgICAgKiBm
b2xsb3dpbmcgKG9wdGlvbmFsKSBwcm9wZXJ0aWVzOiBwcmVjaXNpb24sIHdpZHRoLCBoZWlnaHQu
IElmIGEgc2luZ2xlIG51bWJlciBpcyBwYXNzZWQsCisgICAgICogaXQgd2lsbCBiZSB1c2VkIGZv
ciBib3RoIHdpZHRoIGFuZCBoZWlnaHQuIElmIGFuIG9iamVjdCBpcyBwYXNzZWQsIHRoZSBzY3Jl
ZW5zaG90IHNpemUKKyAgICAgKiB3aWxsIGJlIGRlcml2ZWQgZnJvbSB0aGUgcGFyYW1ldGVycy4g
VGhlIHByZWNpc2lvbiBwcm9wZXJ0eSBpcyBhIG11bHRpcGxpZXIgYWxsb3dpbmcKKyAgICAgKiBy
ZW5kZXJpbmcgYXQgYSBoaWdoZXIgb3IgbG93ZXIgcmVzb2x1dGlvbgorICAgICAqIEBwYXJhbSBt
aW1lVHlwZSBUaGUgTUlNRSB0eXBlIG9mIHRoZSBzY3JlZW5zaG90IGltYWdlIChkZWZhdWx0OiBp
bWFnZS9wbmcpLgorICAgICAqIENoZWNrIHlvdXIgYnJvd3NlciBmb3Igc3VwcG9ydGVkIE1JTUUg
dHlwZXMKKyAgICAgKiBAcGFyYW0gc2FtcGxlcyBUZXh0dXJlIHNhbXBsZXMgKGRlZmF1bHQ6IDEp
CisgICAgICogQHBhcmFtIGFudGlhbGlhc2luZyBXaGV0aGVyIGFudGlhbGlhc2luZyBzaG91bGQg
YmUgdHVybmVkIG9uIG9yIG5vdCAoZGVmYXVsdDogZmFsc2UpCisgICAgICogQHBhcmFtIGZpbGVO
YW1lIEEgbmFtZSBmb3IgZm9yIHRoZSBkb3dubG9hZGVkIGZpbGUuCisgICAgICogQHJldHVybnMg
c2NyZWVuc2hvdCBhcyBhIHN0cmluZyBvZiBiYXNlNjQtZW5jb2RlZCBjaGFyYWN0ZXJzLiBUaGlz
IHN0cmluZyBjYW4gYmUgYXNzaWduZWQKKyAgICAgKiB0byB0aGUgc3JjIHBhcmFtZXRlciBvZiBh
biA8aW1nPiB0byBkaXNwbGF5IGl0CisgICAgICovCisgICAgU2NyZWVuc2hvdFRvb2xzLkNyZWF0
ZVNjcmVlbnNob3RVc2luZ1JlbmRlclRhcmdldEFzeW5jID0gZnVuY3Rpb24gKGVuZ2luZSwgY2Ft
ZXJhLCBzaXplLCBtaW1lVHlwZSwgc2FtcGxlcywgYW50aWFsaWFzaW5nLCBmaWxlTmFtZSkgewor
ICAgICAgICBpZiAobWltZVR5cGUgPT09IHZvaWQgMCkgeyBtaW1lVHlwZSA9ICJpbWFnZS9wbmci
OyB9CisgICAgICAgIGlmIChzYW1wbGVzID09PSB2b2lkIDApIHsgc2FtcGxlcyA9IDE7IH0KKyAg
ICAgICAgaWYgKGFudGlhbGlhc2luZyA9PT0gdm9pZCAwKSB7IGFudGlhbGlhc2luZyA9IGZhbHNl
OyB9CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0
KSB7CisgICAgICAgICAgICBTY3JlZW5zaG90VG9vbHMuQ3JlYXRlU2NyZWVuc2hvdFVzaW5nUmVu
ZGVyVGFyZ2V0KGVuZ2luZSwgY2FtZXJhLCBzaXplLCBmdW5jdGlvbiAoZGF0YSkgeworICAgICAg
ICAgICAgICAgIGlmICh0eXBlb2YgKGRhdGEpICE9PSAidW5kZWZpbmVkIikgeworICAgICAgICAg
ICAgICAgICAgICByZXNvbHZlKGRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcigiRGF0YSBp
cyB1bmRlZmluZWQiKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgbWltZVR5
cGUsIHNhbXBsZXMsIGFudGlhbGlhc2luZywgZmlsZU5hbWUpOworICAgICAgICB9KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgaGVpZ2h0IGFuZCB3aWR0aCBmb3Igc2NyZWVuc2hvdCBz
aXplCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBTY3JlZW5zaG90VG9vbHMuX2dldFNj
cmVlbnNob3RTaXplID0gZnVuY3Rpb24gKGVuZ2luZSwgY2FtZXJhLCBzaXplKSB7CisgICAgICAg
IHZhciBoZWlnaHQgPSAwOworICAgICAgICB2YXIgd2lkdGggPSAwOworICAgICAgICAvL0lmIGEg
c2l6ZSB2YWx1ZSBkZWZpbmVkIGFzIG9iamVjdAorICAgICAgICBpZiAodHlwZW9mIChzaXplKSA9
PT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgIHZhciBwcmVjaXNpb24gPSBzaXplLnByZWNpc2lv
bgorICAgICAgICAgICAgICAgID8gTWF0aC5hYnMoc2l6ZS5wcmVjaXNpb24pIC8vIHByZXZlbnQg
R0xfSU5WQUxJRF9WQUxVRSA6IGdsVmlld3BvcnQ6IG5lZ2F0aXZlIHdpZHRoL2hlaWdodAorICAg
ICAgICAgICAgICAgIDogMTsKKyAgICAgICAgICAgIC8vSWYgYSB3aWR0aCBhbmQgaGVpZ2h0IHZh
bHVlcyBpcyBzcGVjaWZpZWQKKyAgICAgICAgICAgIGlmIChzaXplLndpZHRoICYmIHNpemUuaGVp
Z2h0KSB7CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQgKiBwcmVjaXNpb247
CisgICAgICAgICAgICAgICAgd2lkdGggPSBzaXplLndpZHRoICogcHJlY2lzaW9uOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy9JZiBwYXNzaW5nIG9ubHkgd2lkdGgsIGNvbXB1dGluZyBo
ZWlnaHQgdG8ga2VlcCBkaXNwbGF5IGNhbnZhcyByYXRpby4KKyAgICAgICAgICAgIGVsc2UgaWYg
KHNpemUud2lkdGggJiYgIXNpemUuaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgd2lkdGggPSBz
aXplLndpZHRoICogcHJlY2lzaW9uOworICAgICAgICAgICAgICAgIGhlaWdodCA9IE1hdGgucm91
bmQod2lkdGggLyBlbmdpbmUuZ2V0QXNwZWN0UmF0aW8oY2FtZXJhKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAvL0lmIHBhc3Npbmcgb25seSBoZWlnaHQsIGNvbXB1dGluZyB3aWR0aCB0
byBrZWVwIGRpc3BsYXkgY2FudmFzIHJhdGlvLgorICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZS5o
ZWlnaHQgJiYgIXNpemUud2lkdGgpIHsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBzaXplLmhl
aWdodCAqIHByZWNpc2lvbjsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IE1hdGgucm91bmQoaGVp
Z2h0ICogZW5naW5lLmdldEFzcGVjdFJhdGlvKGNhbWVyYSkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKGVuZ2lu
ZS5nZXRSZW5kZXJXaWR0aCgpICogcHJlY2lzaW9uKTsKKyAgICAgICAgICAgICAgICBoZWlnaHQg
PSBNYXRoLnJvdW5kKHdpZHRoIC8gZW5naW5lLmdldEFzcGVjdFJhdGlvKGNhbWVyYSkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vQXNzdW1pbmcgaGVyZSB0aGF0ICJzaXpl
IiBwYXJhbWV0ZXIgaXMgYSBudW1iZXIKKyAgICAgICAgZWxzZSBpZiAoIWlzTmFOKHNpemUpKSB7
CisgICAgICAgICAgICBoZWlnaHQgPSBzaXplOworICAgICAgICAgICAgd2lkdGggPSBzaXplOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB7IGhlaWdodDogaGVpZ2h0LCB3aWR0aDogd2lkdGgg
fTsKKyAgICB9OworICAgIHJldHVybiBTY3JlZW5zaG90VG9vbHM7Cit9KCkpOworCitfdG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVG9vbHMiXS5DcmVhdGVTY3JlZW5zaG90ID0g
U2NyZWVuc2hvdFRvb2xzLkNyZWF0ZVNjcmVlbnNob3Q7CitfdG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siVG9vbHMiXS5DcmVhdGVTY3JlZW5zaG90QXN5bmMgPSBTY3JlZW5zaG90
VG9vbHMuQ3JlYXRlU2NyZWVuc2hvdEFzeW5jOworX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlRvb2xzIl0uQ3JlYXRlU2NyZWVuc2hvdFVzaW5nUmVuZGVyVGFyZ2V0ID0gU2Ny
ZWVuc2hvdFRvb2xzLkNyZWF0ZVNjcmVlbnNob3RVc2luZ1JlbmRlclRhcmdldDsKK190b29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLkNyZWF0ZVNjcmVlbnNob3RVc2lu
Z1JlbmRlclRhcmdldEFzeW5jID0gU2NyZWVuc2hvdFRvb2xzLkNyZWF0ZVNjcmVlbnNob3RVc2lu
Z1JlbmRlclRhcmdldEFzeW5jOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NaXNjL3NtYXJ0
QXJyYXkudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWlzYy9zbWFydEFycmF5LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogU21hcnRBcnJheSwgU21hcnRBcnJheU5vRHVwbGljYXRl
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNtYXJ0QXJyYXkiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFNtYXJ0QXJyYXk7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU21hcnRB
cnJheU5vRHVwbGljYXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTbWFydEFycmF5Tm9EdXBsaWNh
dGU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworCisvKioKKyAqIERlZmluZXMgYW4gR0MgRnJp
ZW5kbHkgYXJyYXkgd2hlcmUgdGhlIGJhY2tmaWVsZCBhcnJheSBkbyBub3Qgc2hyaW5rIHRvIHBy
ZXZlbnQgb3ZlciBhbGxvY2F0aW9ucy4KKyAqLwordmFyIFNtYXJ0QXJyYXkgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgU21hcnQg
QXJyYXkuCisgICAgICogQHBhcmFtIGNhcGFjaXR5IGRlZmluZXMgdGhlIGRlZmF1bHQgY2FwYWNp
dHkgb2YgdGhlIGFycmF5LgorICAgICAqLworICAgIGZ1bmN0aW9uIFNtYXJ0QXJyYXkoY2FwYWNp
dHkpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBhY3RpdmUgbGVuZ3RoIG9mIHRoZSBh
cnJheS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubGVuZ3RoID0gMDsKKyAgICAgICAgdGhp
cy5kYXRhID0gbmV3IEFycmF5KGNhcGFjaXR5KTsKKyAgICAgICAgdGhpcy5faWQgPSBTbWFydEFy
cmF5Ll9HbG9iYWxJZCsrOworICAgIH0KKyAgICAvKioKKyAgICAgKiBQdXNoZXMgYSB2YWx1ZSBh
dCB0aGUgZW5kIG9mIHRoZSBhY3RpdmUgZGF0YS4KKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5l
cyB0aGUgb2JqZWN0IHRvIHB1c2ggaW4gdGhlIGFycmF5LgorICAgICAqLworICAgIFNtYXJ0QXJy
YXkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgdGhpcy5kYXRh
W3RoaXMubGVuZ3RoKytdID0gdmFsdWU7CisgICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IHRoaXMu
ZGF0YS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuZGF0YS5sZW5ndGggKj0gMjsKKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogSXRlcmF0ZXMgb3ZlciB0aGUgYWN0aXZlIGRh
dGEgYW5kIGFwcGx5IHRoZSBsYW1iZGEgdG8gdGhlbS4KKyAgICAgKiBAcGFyYW0gZnVuYyBkZWZp
bmVzIHRoZSBhY3Rpb24gdG8gYXBwbHkgb24gZWFjaCB2YWx1ZS4KKyAgICAgKi8KKyAgICBTbWFy
dEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGZ1bmMpIHsKKyAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICBmdW5jKHRoaXMuZGF0YVtpbmRleF0pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTb3J0cyB0aGUgZnVsbCBzZXRzIG9mIGRhdGEuCisgICAgICogQHBhcmFtIGNvbXBh
cmVGbiBkZWZpbmVzIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIGFwcGx5LgorICAgICAqLwor
ICAgIFNtYXJ0QXJyYXkucHJvdG90eXBlLnNvcnQgPSBmdW5jdGlvbiAoY29tcGFyZUZuKSB7Cisg
ICAgICAgIHRoaXMuZGF0YS5zb3J0KGNvbXBhcmVGbik7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZXNldHMgdGhlIGFjdGl2ZSBkYXRhIHRvIGFuIGVtcHR5IGFycmF5LgorICAgICAqLworICAg
IFNtYXJ0QXJyYXkucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlz
Lmxlbmd0aCA9IDA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlcyBhbGwgdGhlIGRh
dGEgZnJvbSB0aGUgYXJyYXkgYXMgd2VsbCBhcyB0aGUgYXJyYXkuCisgICAgICovCisgICAgU21h
cnRBcnJheS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5y
ZXNldCgpOworICAgICAgICBpZiAodGhpcy5kYXRhKSB7CisgICAgICAgICAgICB0aGlzLmRhdGEu
bGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBDb25jYXRzIHRoZSBhY3RpdmUgZGF0YSB3aXRoIGEgZ2l2ZW4g
YXJyYXkuCisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIGRhdGEgdG8gY29uY2F0ZW5h
dGUgd2l0aC4KKyAgICAgKi8KKyAgICBTbWFydEFycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5j
dGlvbiAoYXJyYXkpIHsKKyAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmxlbmd0aCArIGFycmF5
Lmxlbmd0aCA+IHRoaXMuZGF0YS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuZGF0YS5sZW5n
dGggPSAodGhpcy5sZW5ndGggKyBhcnJheS5sZW5ndGgpICogMjsKKyAgICAgICAgfQorICAgICAg
ICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7Cisg
ICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5sZW5ndGgrK10gPSAoYXJyYXkuZGF0YSB8fCBhcnJh
eSlbaW5kZXhdOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSBwb3NpdGlvbiBvZiBhIHZhbHVlIGluIHRoZSBhY3RpdmUgZGF0YS4KKyAgICAgKiBAcGFyYW0g
dmFsdWUgZGVmaW5lcyB0aGUgdmFsdWUgdG8gZmluZCB0aGUgaW5kZXggZm9yCisgICAgICogQHJl
dHVybnMgdGhlIGluZGV4IGlmIGZvdW5kIGluIHRoZSBhY3RpdmUgZGF0YSBvdGhlcndpc2UgLTEK
KyAgICAgKi8KKyAgICBTbWFydEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuZGF0YS5pbmRleE9mKHZhbHVlKTsK
KyAgICAgICAgaWYgKHBvc2l0aW9uID49IHRoaXMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIGFuIGVsZW1lbnQgaXMgcGFydCBvZiB0aGUgYWN0
aXZlIGRhdGEuCisgICAgICogQHBhcmFtIHZhbHVlIGRlZmluZXMgdGhlIHZhbHVlIHRvIGxvb2sg
Zm9yCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBmb3VuZCBpbiB0aGUgYWN0aXZlIGRhdGEgb3Ro
ZXJ3aXNlIGZhbHNlCisgICAgICovCisgICAgU21hcnRBcnJheS5wcm90b3R5cGUuY29udGFpbnMg
PSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWx1ZSkg
IT09IC0xOworICAgIH07CisgICAgLy8gU3RhdGljcworICAgIFNtYXJ0QXJyYXkuX0dsb2JhbElk
ID0gMDsKKyAgICByZXR1cm4gU21hcnRBcnJheTsKK30oKSk7CisKKy8qKgorICogRGVmaW5lcyBh
biBHQyBGcmllbmRseSBhcnJheSB3aGVyZSB0aGUgYmFja2ZpZWxkIGFycmF5IGRvIG5vdCBzaHJp
bmsgdG8gcHJldmVudCBvdmVyIGFsbG9jYXRpb25zLgorICogVGhlIGRhdGEgaW4gdGhpcyBhcnJh
eSBjYW4gb25seSBiZSBwcmVzZW50IG9uY2UKKyAqLwordmFyIFNtYXJ0QXJyYXlOb0R1cGxpY2F0
ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShTbWFydEFycmF5Tm9EdXBsaWNhdGUs
IF9zdXBlcik7CisgICAgZnVuY3Rpb24gU21hcnRBcnJheU5vRHVwbGljYXRlKCkgeworICAgICAg
ICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cykgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuX2R1cGxpY2F0ZUlkID0gMDsKKyAgICAgICAg
cmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBQdXNoZXMgYSB2YWx1ZSBhdCB0
aGUgZW5kIG9mIHRoZSBhY3RpdmUgZGF0YS4KKyAgICAgKiBUSElTIERPRVMgTk9UIFBSRVZFTlQg
RFVQUExJQ0FURSBEQVRBCisgICAgICogQHBhcmFtIHZhbHVlIGRlZmluZXMgdGhlIG9iamVjdCB0
byBwdXNoIGluIHRoZSBhcnJheS4KKyAgICAgKi8KKyAgICBTbWFydEFycmF5Tm9EdXBsaWNhdGUu
cHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgX3N1cGVyLnByb3Rv
dHlwZS5wdXNoLmNhbGwodGhpcywgdmFsdWUpOworICAgICAgICBpZiAoIXZhbHVlLl9fc21hcnRB
cnJheUZsYWdzKSB7CisgICAgICAgICAgICB2YWx1ZS5fX3NtYXJ0QXJyYXlGbGFncyA9IHt9Owor
ICAgICAgICB9CisgICAgICAgIHZhbHVlLl9fc21hcnRBcnJheUZsYWdzW3RoaXMuX2lkXSA9IHRo
aXMuX2R1cGxpY2F0ZUlkOworICAgIH07CisgICAgLyoqCisgICAgICogUHVzaGVzIGEgdmFsdWUg
YXQgdGhlIGVuZCBvZiB0aGUgYWN0aXZlIGRhdGEuCisgICAgICogSWYgdGhlIGRhdGEgaXMgYWxy
ZWFkeSBwcmVzZW50LCBpdCB3b24gdCBiZSBhZGRlZCBhZ2FpbgorICAgICAqIEBwYXJhbSB2YWx1
ZSBkZWZpbmVzIHRoZSBvYmplY3QgdG8gcHVzaCBpbiB0aGUgYXJyYXkuCisgICAgICogQHJldHVy
bnMgdHJ1ZSBpZiBhZGRlZCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBwcmVzZW50CisgICAgICov
CisgICAgU21hcnRBcnJheU5vRHVwbGljYXRlLnByb3RvdHlwZS5wdXNoTm9EdXBsaWNhdGUgPSBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgaWYgKHZhbHVlLl9fc21hcnRBcnJheUZsYWdzICYm
IHZhbHVlLl9fc21hcnRBcnJheUZsYWdzW3RoaXMuX2lkXSA9PT0gdGhpcy5fZHVwbGljYXRlSWQp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnB1
c2godmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJlc2V0cyB0aGUgYWN0aXZlIGRhdGEgdG8gYW4gZW1wdHkgYXJyYXkuCisgICAgICovCisgICAg
U21hcnRBcnJheU5vRHVwbGljYXRlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgX3N1cGVyLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl9k
dXBsaWNhdGVJZCsrOworICAgIH07CisgICAgLyoqCisgICAgICogQ29uY2F0cyB0aGUgYWN0aXZl
IGRhdGEgd2l0aCBhIGdpdmVuIGFycmF5LgorICAgICAqIFRoaXMgZW5zdXJlcyBubyBkdXBwbGlj
YXRlIHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgcmVzdWx0LgorICAgICAqIEBwYXJhbSBhcnJheSBk
ZWZpbmVzIHRoZSBkYXRhIHRvIGNvbmNhdGVuYXRlIHdpdGguCisgICAgICovCisgICAgU21hcnRB
cnJheU5vRHVwbGljYXRlLnByb3RvdHlwZS5jb25jYXRXaXRoTm9EdXBsaWNhdGUgPSBmdW5jdGlv
biAoYXJyYXkpIHsKKyAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmxlbmd0aCArIGFycmF5Lmxl
bmd0aCA+IHRoaXMuZGF0YS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuZGF0YS5sZW5ndGgg
PSAodGhpcy5sZW5ndGggKyBhcnJheS5sZW5ndGgpICogMjsKKyAgICAgICAgfQorICAgICAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7CisgICAg
ICAgICAgICB2YXIgaXRlbSA9IChhcnJheS5kYXRhIHx8IGFycmF5KVtpbmRleF07CisgICAgICAg
ICAgICB0aGlzLnB1c2hOb0R1cGxpY2F0ZShpdGVtKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
cmV0dXJuIFNtYXJ0QXJyYXlOb0R1cGxpY2F0ZTsKK30oU21hcnRBcnJheSkpOworCisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL01pc2Mvc3RyaW5nRGljdGlvbmFyeS50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL3N0cmluZ0RpY3Rp
b25hcnkudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBTdHJpbmdEaWN0aW9uYXJ5ICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlN0cmluZ0RpY3Rpb25hcnkiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFN0cmluZ0RpY3Rpb25hcnk7IH0pOworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudCBhIHR5
cGljYWwgZGljdGlvbmFyeSB1c2luZyBhIHN0cmluZyBhcyBrZXkgYW5kIHRoZSBnZW5lcmljIHR5
cGUgVCBhcyB2YWx1ZS4KKyAqIFRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIHJlbGllcyBv
biBhbiBhc3NvY2lhdGl2ZSBhcnJheSB0byBlbnN1cmUgdGhlIGJlc3QgcGVyZm9ybWFuY2VzLgor
ICogVGhlIHZhbHVlIGNhbiBiZSBhbnl0aGluZyBpbmNsdWRpbmcgJ251bGwnIGJ1dCBleGNlcHQg
J3VuZGVmaW5lZCcKKyAqLwordmFyIFN0cmluZ0RpY3Rpb25hcnkgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gU3RyaW5nRGljdGlvbmFyeSgpIHsKKyAgICAgICAg
dGhpcy5fY291bnQgPSAwOworICAgICAgICB0aGlzLl9kYXRhID0ge307CisgICAgfQorICAgIC8q
KgorICAgICAqIFRoaXMgd2lsbCBjbGVhciB0aGlzIGRpY3Rpb25hcnkgYW5kIGNvcHkgdGhlIGNv
bnRlbnQgZnJvbSB0aGUgJ3NvdXJjZScgb25lLgorICAgICAqIElmIHRoZSBUIHZhbHVlIGlzIGEg
Y3VzdG9tIG9iamVjdCwgaXQgd29uJ3QgYmUgY29waWVkL2Nsb25lZCwgdGhlIHNhbWUgb2JqZWN0
IHdpbGwgYmUgdXNlZAorICAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIGRpY3Rpb25hcnkgdG8gdGFr
ZSB0aGUgY29udGVudCBmcm9tIGFuZCBjb3B5IHRvIHRoaXMgZGljdGlvbmFyeQorICAgICAqLwor
ICAgIFN0cmluZ0RpY3Rpb25hcnkucHJvdG90eXBlLmNvcHlGcm9tID0gZnVuY3Rpb24gKHNvdXJj
ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLmNsZWFyKCk7Cisg
ICAgICAgIHNvdXJjZS5mb3JFYWNoKGZ1bmN0aW9uICh0LCB2KSB7IHJldHVybiBfdGhpcy5hZGQo
dCwgdik7IH0pOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGEgdmFsdWUgYmFzZWQgZnJv
bSBpdHMga2V5CisgICAgICogQHBhcmFtIGtleSB0aGUgZ2l2ZW4ga2V5IHRvIGdldCB0aGUgbWF0
Y2hpbmcgdmFsdWUgZnJvbQorICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIGlmIGZvdW5kLCBvdGhl
cndpc2UgdW5kZWZpbmVkIGlzIHJldHVybmVkCisgICAgICovCisgICAgU3RyaW5nRGljdGlvbmFy
eS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgICB2YXIgdmFsID0gdGhp
cy5fZGF0YVtrZXldOworICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgIHJldHVybiB2YWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldCBhIHZhbHVlIGZyb20gaXRzIGtleSBvciBhZGQgaXQg
aWYgaXQgZG9lc24ndCBleGlzdC4KKyAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGVuc3VyZSB5b3Ug
dGhhdCBhIGdpdmVuIGtleS9kYXRhIHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgZGljdGlvbmFyeS4K
KyAgICAgKiBAcGFyYW0ga2V5IHRoZSBnaXZlbiBrZXkgdG8gZ2V0IHRoZSBtYXRjaGluZyB2YWx1
ZSBmcm9tCisgICAgICogQHBhcmFtIGZhY3RvcnkgdGhlIGZhY3RvcnkgdGhhdCB3aWxsIGNyZWF0
ZSB0aGUgdmFsdWUgaWYgdGhlIGtleSBpcyBub3QgcHJlc2VudCBpbiB0aGUgZGljdGlvbmFyeS4K
KyAgICAgKiBUaGUgZmFjdG9yeSB3aWxsIG9ubHkgYmUgaW52b2tlZCBpZiB0aGVyZSdzIG5vIGRh
dGEgZm9yIHRoZSBnaXZlbiBrZXkuCisgICAgICogQHJldHVybiB0aGUgdmFsdWUgY29ycmVzcG9u
ZGluZyB0byB0aGUga2V5LgorICAgICAqLworICAgIFN0cmluZ0RpY3Rpb25hcnkucHJvdG90eXBl
LmdldE9yQWRkV2l0aEZhY3RvcnkgPSBmdW5jdGlvbiAoa2V5LCBmYWN0b3J5KSB7CisgICAgICAg
IHZhciB2YWwgPSB0aGlzLmdldChrZXkpOworICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgIHJldHVybiB2YWw7CisgICAgICAgIH0KKyAgICAgICAgdmFsID0gZmFj
dG9yeShrZXkpOworICAgICAgICBpZiAodmFsKSB7CisgICAgICAgICAgICB0aGlzLmFkZChrZXks
IHZhbCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEdldCBhIHZhbHVlIGZyb20gaXRzIGtleSBpZiBwcmVzZW50IGluIHRoZSBkaWN0aW9u
YXJ5IG90aGVyd2lzZSBhZGQgaXQKKyAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgdG8gZ2V0IHRo
ZSB2YWx1ZSBmcm9tCisgICAgICogQHBhcmFtIHZhbCBpZiB0aGVyZSdzIG5vIHN1Y2gga2V5L3Zh
bHVlIHBhaXIgaW4gdGhlIGRpY3Rpb25hcnkgYWRkIGl0IHdpdGggdGhpcyB2YWx1ZQorICAgICAq
IEByZXR1cm4gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtleQorICAgICAqLworICAg
IFN0cmluZ0RpY3Rpb25hcnkucHJvdG90eXBlLmdldE9yQWRkID0gZnVuY3Rpb24gKGtleSwgdmFs
KSB7CisgICAgICAgIHZhciBjdXJWYWwgPSB0aGlzLmdldChrZXkpOworICAgICAgICBpZiAoY3Vy
VmFsICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJWYWw7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5hZGQoa2V5LCB2YWwpOworICAgICAgICByZXR1cm4gdmFsOworICAg
IH07CisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgdGhlcmUncyBhIGdpdmVuIGtleSBpbiB0aGUg
ZGljdGlvbmFyeQorICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byBjaGVjayBmb3IKKyAgICAg
KiBAcmV0dXJuIHRydWUgaWYgdGhlIGtleSBpcyBwcmVzZW50LCBmYWxzZSBvdGhlcndpc2UKKyAg
ICAgKi8KKyAgICBTdHJpbmdEaWN0aW9uYXJ5LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9u
IChrZXkpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFba2V5XSAhPT0gdW5kZWZpbmVkOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGEgbmV3IGtleSBhbmQgaXRzIGNvcnJlc3BvbmRp
bmcgdmFsdWUKKyAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgdG8gYWRkCisgICAgICogQHBhcmFt
IHZhbHVlIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBrZXkKKyAgICAgKiBAcmV0dXJu
IHRydWUgaWYgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBpZiB3
ZSBjb3VsZG4ndCBpbnNlcnQgdGhlIGtleS92YWx1ZSBiZWNhdXNlIHRoZXJlIHdhcyBhbHJlYWR5
IHRoaXMga2V5IGluIHRoZSBkaWN0aW9uYXJ5CisgICAgICovCisgICAgU3RyaW5nRGljdGlvbmFy
eS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAgICAgICAgaWYgKHRo
aXMuX2RhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGF0YVtrZXldID0gdmFsdWU7CisgICAgICAgICsr
dGhpcy5fY291bnQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoqCisgICAg
ICogVXBkYXRlIGEgc3BlY2lmaWMgdmFsdWUgYXNzb2NpYXRlZCB0byBhIGtleQorICAgICAqIEBw
YXJhbSBrZXkgZGVmaW5lcyB0aGUga2V5IHRvIHVzZQorICAgICAqIEBwYXJhbSB2YWx1ZSBkZWZp
bmVzIHRoZSB2YWx1ZSB0byBzdG9yZQorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVl
IHdhcyB1cGRhdGVkIChvciBmYWxzZSBpZiB0aGUga2V5IHdhcyBub3QgZm91bmQpCisgICAgICov
CisgICAgU3RyaW5nRGljdGlvbmFyeS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFs
dWUpIHsKKyAgICAgICAgaWYgKHRoaXMuX2RhdGFba2V5XSA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGF0YVtrZXld
ID0gdmFsdWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0IHRoZSBlbGVtZW50IG9mIHRoZSBnaXZlbiBrZXkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBk
aWN0aW9uYXJ5CisgICAgICogQHBhcmFtIGtleSBkZWZpbmVzIHRoZSBrZXkgdG8gc2VhcmNoCisg
ICAgICogQHJldHVybnMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5IG9yIG51bGwg
aWYgbm90IGZvdW5kCisgICAgICovCisgICAgU3RyaW5nRGljdGlvbmFyeS5wcm90b3R5cGUuZ2V0
QW5kUmVtb3ZlID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXQo
a2V5KTsKKyAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBkZWxl
dGUgdGhpcy5fZGF0YVtrZXldOworICAgICAgICAgICAgLS10aGlzLl9jb3VudDsKKyAgICAgICAg
ICAgIHJldHVybiB2YWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBrZXkvdmFsdWUgZnJvbSB0aGUgZGljdGlvbmFyeS4K
KyAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgdG8gcmVtb3ZlCisgICAgICogQHJldHVybiB0cnVl
IGlmIHRoZSBpdGVtIHdhcyBzdWNjZXNzZnVsbHkgZGVsZXRlZCwgZmFsc2UgaWYgbm8gaXRlbSB3
aXRoIHN1Y2gga2V5IGV4aXN0IGluIHRoZSBkaWN0aW9uYXJ5CisgICAgICovCisgICAgU3RyaW5n
RGljdGlvbmFyeS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgICBp
ZiAodGhpcy5jb250YWlucyhrZXkpKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fZGF0YVtr
ZXldOworICAgICAgICAgICAgLS10aGlzLl9jb3VudDsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENsZWFyIHRoZSB3aG9sZSBjb250ZW50IG9mIHRoZSBkaWN0aW9uYXJ5CisgICAgICovCisg
ICAgU3RyaW5nRGljdGlvbmFyeS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX2RhdGEgPSB7fTsKKyAgICAgICAgdGhpcy5fY291bnQgPSAwOworICAgIH07Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0cmluZ0RpY3Rpb25hcnkucHJvdG90eXBlLCAiY291
bnQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNvdW50Cisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9jb3VudDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRXhlY3V0
ZSBhIGNhbGxiYWNrIG9uIGVhY2gga2V5L3ZhbCBvZiB0aGUgZGljdGlvbmFyeS4KKyAgICAgKiBO
b3RlIHRoYXQgeW91IGNhbiByZW1vdmUgYW55IGVsZW1lbnQgaW4gdGhpcyBkaWN0aW9uYXJ5IGlu
IHRoZSBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICAgICAqIEBwYXJhbSBjYWxsYmFjayB0aGUg
Y2FsbGJhY2sgdG8gZXhlY3V0ZSBvbiBhIGdpdmVuIGtleS92YWx1ZSBwYWlyCisgICAgICovCisg
ICAgU3RyaW5nRGljdGlvbmFyeS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFj
aykgeworICAgICAgICBmb3IgKHZhciBjdXIgaW4gdGhpcy5fZGF0YSkgeworICAgICAgICAgICAg
dmFyIHZhbCA9IHRoaXMuX2RhdGFbY3VyXTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGN1ciwgdmFs
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRXhlY3V0ZSBhIGNhbGxiYWNr
IG9uIGV2ZXJ5IG9jY3VycmVuY2Ugb2YgdGhlIGRpY3Rpb25hcnkgdW50aWwgaXQgcmV0dXJucyBh
IHZhbGlkIFRSZXMgb2JqZWN0LgorICAgICAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIG51bGwg
b3IgdW5kZWZpbmVkIHRoZSBtZXRob2Qgd2lsbCBpdGVyYXRlIHRvIHRoZSBuZXh0IGtleS92YWx1
ZSBwYWlyCisgICAgICogTm90ZSB0aGF0IHlvdSBjYW4gcmVtb3ZlIGFueSBlbGVtZW50IGluIHRo
aXMgZGljdGlvbmFyeSBpbiB0aGUgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAgICAgKiBAcGFy
YW0gY2FsbGJhY2sgdGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUsIGlmIGl0IHJldHVybiBhIHZhbGlk
IFQgaW5zdGFuY2VkIG9iamVjdCB0aGUgZW51bWVyYXRpb24gd2lsbCBzdG9wIGFuZCB0aGUgb2Jq
ZWN0IHdpbGwgYmUgcmV0dXJuZWQKKyAgICAgKiBAcmV0dXJucyB0aGUgZmlyc3QgaXRlbQorICAg
ICAqLworICAgIFN0cmluZ0RpY3Rpb25hcnkucHJvdG90eXBlLmZpcnN0ID0gZnVuY3Rpb24gKGNh
bGxiYWNrKSB7CisgICAgICAgIGZvciAodmFyIGN1ciBpbiB0aGlzLl9kYXRhKSB7CisgICAgICAg
ICAgICB2YXIgdmFsID0gdGhpcy5fZGF0YVtjdXJdOworICAgICAgICAgICAgdmFyIHJlcyA9IGNh
bGxiYWNrKGN1ciwgdmFsKTsKKyAgICAgICAgICAgIGlmIChyZXMpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dWxsOworICAgIH07CisgICAgcmV0dXJuIFN0cmluZ0RpY3Rpb25hcnk7Cit9KCkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL01pc2Mvc3RyaW5nVG9vbHMudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2Mvc3RyaW5nVG9vbHMudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogU3RyaW5nVG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3Ry
aW5nVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN0cmluZ1Rvb2xzOyB9KTsKKy8qKgorICog
SGVscGVyIHRvIG1hbmlwdWxhdGUgc3RyaW5ncworICovCit2YXIgU3RyaW5nVG9vbHMgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gU3RyaW5nVG9vbHMoKSB7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIENoZWNrcyBmb3IgYSBtYXRjaGluZyBzdWZmaXggYXQgdGhl
IGVuZCBvZiBhIHN0cmluZyAoZm9yIEVTNSBhbmQgbG93ZXIpCisgICAgICogQHBhcmFtIHN0ciBT
b3VyY2Ugc3RyaW5nCisgICAgICogQHBhcmFtIHN1ZmZpeCBTdWZmaXggdG8gc2VhcmNoIGZvciBp
biB0aGUgc291cmNlIHN0cmluZworICAgICAqIEByZXR1cm5zIEJvb2xlYW4gaW5kaWNhdGluZyB3
aGV0aGVyIHRoZSBzdWZmaXggd2FzIGZvdW5kICh0cnVlKSBvciBub3QgKGZhbHNlKQorICAgICAq
LworICAgIFN0cmluZ1Rvb2xzLkVuZHNXaXRoID0gZnVuY3Rpb24gKHN0ciwgc3VmZml4KSB7Cisg
ICAgICAgIHJldHVybiBzdHIuaW5kZXhPZihzdWZmaXgsIHN0ci5sZW5ndGggLSBzdWZmaXgubGVu
Z3RoKSAhPT0gLTE7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgZm9yIGEgbWF0Y2hp
bmcgc3VmZml4IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcgKGZvciBFUzUgYW5kIGxvd2Vy
KQorICAgICAqIEBwYXJhbSBzdHIgU291cmNlIHN0cmluZworICAgICAqIEBwYXJhbSBzdWZmaXgg
U3VmZml4IHRvIHNlYXJjaCBmb3IgaW4gdGhlIHNvdXJjZSBzdHJpbmcKKyAgICAgKiBAcmV0dXJu
cyBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgc3VmZml4IHdhcyBmb3VuZCAodHJ1ZSkg
b3Igbm90IChmYWxzZSkKKyAgICAgKi8KKyAgICBTdHJpbmdUb29scy5TdGFydHNXaXRoID0gZnVu
Y3Rpb24gKHN0ciwgc3VmZml4KSB7CisgICAgICAgIHJldHVybiBzdHIuaW5kZXhPZihzdWZmaXgp
ID09PSAwOworICAgIH07CisgICAgcmV0dXJuIFN0cmluZ1Rvb2xzOworfSgpKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9NaXNjL3RhZ3MudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vTWlzYy90YWdzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogVGFncyAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJUYWdzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUYWdzOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5kT3JOb3RFdmFsdWF0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYW5kT3JOb3RFdmFsdWF0
b3IgKi8gIi4vTWlzYy9hbmRPck5vdEV2YWx1YXRvci50cyIpOworCisvKioKKyAqIENsYXNzIHVz
ZWQgdG8gc3RvcmUgY3VzdG9tIHRhZ3MKKyAqLwordmFyIFRhZ3MgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gVGFncygpIHsKKyAgICB9CisgICAgLyoqCisgICAg
ICogQWRkcyBzdXBwb3J0IGZvciB0YWdzIG9uIHRoZSBnaXZlbiBvYmplY3QKKyAgICAgKiBAcGFy
YW0gb2JqIGRlZmluZXMgdGhlIG9iamVjdCB0byB1c2UKKyAgICAgKi8KKyAgICBUYWdzLkVuYWJs
ZUZvciA9IGZ1bmN0aW9uIChvYmopIHsKKyAgICAgICAgb2JqLl90YWdzID0gb2JqLl90YWdzIHx8
IHt9OworICAgICAgICBvYmouaGFzVGFncyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiBUYWdzLkhhc1RhZ3Mob2JqKTsKKyAgICAgICAgfTsKKyAgICAgICAgb2JqLmFkZFRhZ3Mg
PSBmdW5jdGlvbiAodGFnc1N0cmluZykgeworICAgICAgICAgICAgcmV0dXJuIFRhZ3MuQWRkVGFn
c1RvKG9iaiwgdGFnc1N0cmluZyk7CisgICAgICAgIH07CisgICAgICAgIG9iai5yZW1vdmVUYWdz
ID0gZnVuY3Rpb24gKHRhZ3NTdHJpbmcpIHsKKyAgICAgICAgICAgIHJldHVybiBUYWdzLlJlbW92
ZVRhZ3NGcm9tKG9iaiwgdGFnc1N0cmluZyk7CisgICAgICAgIH07CisgICAgICAgIG9iai5tYXRj
aGVzVGFnc1F1ZXJ5ID0gZnVuY3Rpb24gKHRhZ3NRdWVyeSkgeworICAgICAgICAgICAgcmV0dXJu
IFRhZ3MuTWF0Y2hlc1F1ZXJ5KG9iaiwgdGFnc1F1ZXJ5KTsKKyAgICAgICAgfTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGFncyBzdXBwb3J0CisgICAgICogQHBhcmFtIG9iaiBk
ZWZpbmVzIHRoZSBvYmplY3QgdG8gdXNlCisgICAgICovCisgICAgVGFncy5EaXNhYmxlRm9yID0g
ZnVuY3Rpb24gKG9iaikgeworICAgICAgICBkZWxldGUgb2JqLl90YWdzOworICAgICAgICBkZWxl
dGUgb2JqLmhhc1RhZ3M7CisgICAgICAgIGRlbGV0ZSBvYmouYWRkVGFnczsKKyAgICAgICAgZGVs
ZXRlIG9iai5yZW1vdmVUYWdzOworICAgICAgICBkZWxldGUgb2JqLm1hdGNoZXNUYWdzUXVlcnk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRo
ZSBnaXZlbiBvYmplY3QgaGFzIHRhZ3MKKyAgICAgKiBAcGFyYW0gb2JqIGRlZmluZXMgdGhlIG9i
amVjdCB0byB1c2UKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4KKyAgICAgKi8KKyAgICBUYWdz
Lkhhc1RhZ3MgPSBmdW5jdGlvbiAob2JqKSB7CisgICAgICAgIGlmICghb2JqLl90YWdzKSB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRhZ3MgPSBv
YmouX3RhZ3M7CisgICAgICAgIGZvciAodmFyIGkgaW4gdGFncykgeworICAgICAgICAgICAgaWYg
KHRhZ3MuaGFzT3duUHJvcGVydHkoaSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0YWdzIGF2YWlsYWJsZSBvbiBhIGdpdmVuIG9iamVj
dAorICAgICAqIEBwYXJhbSBvYmogZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHVzZQorICAgICAqIEBw
YXJhbSBhc1N0cmluZyBkZWZpbmVzIGlmIHRoZSB0YWdzIG11c3QgYmUgcmV0dXJuZWQgYXMgYSBz
dHJpbmcgaW5zdGVhZCBvZiBhbiBhcnJheSBvZiBzdHJpbmdzCisgICAgICogQHJldHVybnMgdGhl
IHRhZ3MKKyAgICAgKi8KKyAgICBUYWdzLkdldFRhZ3MgPSBmdW5jdGlvbiAob2JqLCBhc1N0cmlu
ZykgeworICAgICAgICBpZiAoYXNTdHJpbmcgPT09IHZvaWQgMCkgeyBhc1N0cmluZyA9IHRydWU7
IH0KKyAgICAgICAgaWYgKCFvYmouX3RhZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIGlmIChhc1N0cmluZykgeworICAgICAgICAgICAgdmFyIHRhZ3NB
cnJheSA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgdGFnIGluIG9iai5fdGFncykgeworICAg
ICAgICAgICAgICAgIGlmIChvYmouX3RhZ3MuaGFzT3duUHJvcGVydHkodGFnKSAmJiBvYmouX3Rh
Z3NbdGFnXSA9PT0gdHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICB0YWdzQXJyYXkucHVzaCh0
YWcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0YWdzQXJyYXkuam9pbigiICIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgcmV0dXJuIG9iai5fdGFnczsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogQWRkcyB0YWdzIHRvIGFuIG9iamVjdAorICAgICAqIEBwYXJhbSBvYmogZGVmaW5lcyB0aGUg
b2JqZWN0IHRvIHVzZQorICAgICAqIEBwYXJhbSB0YWdzU3RyaW5nIGRlZmluZXMgdGhlIHRhZyBz
dHJpbmcuIFRoZSB0YWdzICd0cnVlJyBhbmQgJ2ZhbHNlJyBhcmUgcmVzZXJ2ZWQgYW5kIGNhbm5v
dCBiZSB1c2VkIGFzIHRhZ3MuCisgICAgICogQSB0YWcgY2Fubm90IHN0YXJ0IHdpdGggJ3x8Jywg
JyYmJywgYW5kICchJy4gSXQgY2Fubm90IGNvbnRhaW4gd2hpdGVzcGFjZXMKKyAgICAgKi8KKyAg
ICBUYWdzLkFkZFRhZ3NUbyA9IGZ1bmN0aW9uIChvYmosIHRhZ3NTdHJpbmcpIHsKKyAgICAgICAg
aWYgKCF0YWdzU3RyaW5nKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHR5cGVvZiB0YWdzU3RyaW5nICE9PSAic3RyaW5nIikgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHZhciB0YWdzID0gdGFnc1N0cmluZy5zcGxpdCgiICIp
OworICAgICAgICB0YWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZywgaW5kZXgsIGFycmF5KSB7Cisg
ICAgICAgICAgICBUYWdzLl9BZGRUYWdUbyhvYmosIHRhZyk7CisgICAgICAgIH0pOworICAgIH07
CisgICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIFRhZ3MuX0FkZFRhZ1RvID0g
ZnVuY3Rpb24gKG9iaiwgdGFnKSB7CisgICAgICAgIHRhZyA9IHRhZy50cmltKCk7CisgICAgICAg
IGlmICh0YWcgPT09ICIiIHx8IHRhZyA9PT0gInRydWUiIHx8IHRhZyA9PT0gImZhbHNlIikgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0YWcubWF0Y2goL1tc
c10vKSB8fCB0YWcubWF0Y2goL14oWyFdfChbfF18WyZdKXsyfSkvKSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIFRhZ3MuRW5hYmxlRm9yKG9iaik7CisgICAgICAg
IG9iai5fdGFnc1t0YWddID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMg
c3BlY2lmaWMgdGFncyBmcm9tIGEgc3BlY2lmaWMgb2JqZWN0CisgICAgICogQHBhcmFtIG9iaiBk
ZWZpbmVzIHRoZSBvYmplY3QgdG8gdXNlCisgICAgICogQHBhcmFtIHRhZ3NTdHJpbmcgZGVmaW5l
cyB0aGUgdGFncyB0byByZW1vdmUKKyAgICAgKi8KKyAgICBUYWdzLlJlbW92ZVRhZ3NGcm9tID0g
ZnVuY3Rpb24gKG9iaiwgdGFnc1N0cmluZykgeworICAgICAgICBpZiAoIVRhZ3MuSGFzVGFncyhv
YmopKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRhZ3Mg
PSB0YWdzU3RyaW5nLnNwbGl0KCIgIik7CisgICAgICAgIGZvciAodmFyIHQgaW4gdGFncykgewor
ICAgICAgICAgICAgVGFncy5fUmVtb3ZlVGFnRnJvbShvYmosIHRhZ3NbdF0pOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgVGFncy5fUmVt
b3ZlVGFnRnJvbSA9IGZ1bmN0aW9uIChvYmosIHRhZykgeworICAgICAgICBkZWxldGUgb2JqLl90
YWdzW3RhZ107CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIGlmIHRhZ3MgaG9zdGVk
IG9uIGFuIG9iamVjdCBtYXRjaCBhIGdpdmVuIHF1ZXJ5CisgICAgICogQHBhcmFtIG9iaiBkZWZp
bmVzIHRoZSBvYmplY3QgdG8gdXNlCisgICAgICogQHBhcmFtIHRhZ3NRdWVyeSBkZWZpbmVzIHRo
ZSB0YWcgcXVlcnkKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4KKyAgICAgKi8KKyAgICBUYWdz
Lk1hdGNoZXNRdWVyeSA9IGZ1bmN0aW9uIChvYmosIHRhZ3NRdWVyeSkgeworICAgICAgICBpZiAo
dGFnc1F1ZXJ5ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGlmICh0YWdzUXVlcnkgPT09ICIiKSB7CisgICAgICAgICAgICByZXR1
cm4gVGFncy5IYXNUYWdzKG9iaik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF9hbmRPck5v
dEV2YWx1YXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBbmRPck5vdEV2YWx1YXRv
ciJdLkV2YWwodGFnc1F1ZXJ5LCBmdW5jdGlvbiAocikgeyByZXR1cm4gVGFncy5IYXNUYWdzKG9i
aikgJiYgb2JqLl90YWdzW3JdOyB9KTsKKyAgICB9OworICAgIHJldHVybiBUYWdzOworfSgpKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NaXNjL3RleHR1cmVUb29scy50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvdGV4dHVyZVRv
b2xzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBUZXh0dXJlVG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVGV4dHVyZVRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUZXh0dXJlVG9vbHM7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3Rl
eHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVz
X3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0
dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJlLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfcGFzc1Bvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9Q
b3N0UHJvY2Vzc2VzL3Bhc3NQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bhc3NQb3N0
UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKworCisK
KworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGhvc3QgdGV4dHVyZSBzcGVjaWZpYyB1dGlsaXRpZXMK
KyAqLwordmFyIFRleHR1cmVUb29scyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICBmdW5jdGlvbiBUZXh0dXJlVG9vbHMoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIFVzZXMg
dGhlIEdQVSB0byBjcmVhdGUgYSBjb3B5IHRleHR1cmUgcmVzY2FsZWQgYXQgYSBnaXZlbiBzaXpl
CisgICAgICogQHBhcmFtIHRleHR1cmUgVGV4dHVyZSB0byBjb3B5IGZyb20KKyAgICAgKiBAcGFy
YW0gd2lkdGggZGVmaW5lcyB0aGUgZGVzaXJlZCB3aWR0aAorICAgICAqIEBwYXJhbSBoZWlnaHQg
ZGVmaW5lcyB0aGUgZGVzaXJlZCBoZWlnaHQKKyAgICAgKiBAcGFyYW0gdXNlQmlsaW5lYXJNb2Rl
IGRlZmluZXMgaWYgYmlsaW5lYXIgbW9kZSBoYXMgdG8gYmUgdXNlZAorICAgICAqIEByZXR1cm4g
dGhlIGdlbmVyYXRlZCB0ZXh0dXJlCisgICAgICovCisgICAgVGV4dHVyZVRvb2xzLkNyZWF0ZVJl
c2l6ZWRDb3B5ID0gZnVuY3Rpb24gKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQsIHVzZUJpbGluZWFy
TW9kZSkgeworICAgICAgICBpZiAodXNlQmlsaW5lYXJNb2RlID09PSB2b2lkIDApIHsgdXNlQmls
aW5lYXJNb2RlID0gdHJ1ZTsgfQorICAgICAgICB2YXIgc2NlbmUgPSB0ZXh0dXJlLmdldFNjZW5l
KCk7CisgICAgICAgIHZhciBlbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgdmFy
IHJ0dCA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdKCdyZXNpemVkJyAr
IHRleHR1cmUubmFtZSwgeyB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0IH0sIHNjZW5lLCAh
dGV4dHVyZS5ub01pcG1hcCwgdHJ1ZSwgdGV4dHVyZS5fdGV4dHVyZS50eXBlLCBmYWxzZSwgdGV4
dHVyZS5zYW1wbGluZ01vZGUsIGZhbHNlKTsKKyAgICAgICAgcnR0LndyYXBVID0gdGV4dHVyZS53
cmFwVTsKKyAgICAgICAgcnR0LndyYXBWID0gdGV4dHVyZS53cmFwVjsKKyAgICAgICAgcnR0LnVP
ZmZzZXQgPSB0ZXh0dXJlLnVPZmZzZXQ7CisgICAgICAgIHJ0dC52T2Zmc2V0ID0gdGV4dHVyZS52
T2Zmc2V0OworICAgICAgICBydHQudVNjYWxlID0gdGV4dHVyZS51U2NhbGU7CisgICAgICAgIHJ0
dC52U2NhbGUgPSB0ZXh0dXJlLnZTY2FsZTsKKyAgICAgICAgcnR0LnVBbmcgPSB0ZXh0dXJlLnVB
bmc7CisgICAgICAgIHJ0dC52QW5nID0gdGV4dHVyZS52QW5nOworICAgICAgICBydHQud0FuZyA9
IHRleHR1cmUud0FuZzsKKyAgICAgICAgcnR0LmNvb3JkaW5hdGVzSW5kZXggPSB0ZXh0dXJlLmNv
b3JkaW5hdGVzSW5kZXg7CisgICAgICAgIHJ0dC5sZXZlbCA9IHRleHR1cmUubGV2ZWw7CisgICAg
ICAgIHJ0dC5hbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsID0gdGV4dHVyZS5hbmlzb3Ryb3BpY0Zp
bHRlcmluZ0xldmVsOworICAgICAgICBydHQuX3RleHR1cmUuaXNSZWFkeSA9IGZhbHNlOworICAg
ICAgICB0ZXh0dXJlLndyYXBVID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAg
ICAgdGV4dHVyZS53cmFwViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAg
IHZhciBwYXNzUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcGFzc1Bvc3RQcm9jZXNz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBhc3NQb3N0UHJvY2VzcyJdKCJwYXNzIiwg
MSwgbnVsbCwgdXNlQmlsaW5lYXJNb2RlID8gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01P
REUgOiBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVGV4dHVyZSJdLk5FQVJFU1RfU0FNUExJTkdNT0RFLCBlbmdpbmUsIGZhbHNlLCBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAgICAgcGFzc1Bvc3RQcm9jZXNzLmdldEVm
ZmVjdCgpLmV4ZWN1dGVXaGVuQ29tcGlsZWQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcGFz
c1Bvc3RQcm9jZXNzLm9uQXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICAg
ICAgZWZmZWN0LnNldFRleHR1cmUoInRleHR1cmVTYW1wbGVyIiwgdGV4dHVyZSk7CisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgdmFyIGludGVybmFsVGV4dHVyZSA9IHJ0dC5nZXRJbnRlcm5h
bFRleHR1cmUoKTsKKyAgICAgICAgICAgIGlmIChpbnRlcm5hbFRleHR1cmUpIHsKKyAgICAgICAg
ICAgICAgICBzY2VuZS5wb3N0UHJvY2Vzc01hbmFnZXIuZGlyZWN0UmVuZGVyKFtwYXNzUG9zdFBy
b2Nlc3NdLCBpbnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgICAgIGVuZ2luZS51bkJpbmRG
cmFtZWJ1ZmZlcihpbnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgICAgIHJ0dC5kaXNwb3Nl
RnJhbWVidWZmZXJPYmplY3RzKCk7CisgICAgICAgICAgICAgICAgcGFzc1Bvc3RQcm9jZXNzLmRp
c3Bvc2UoKTsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbFRleHR1cmUuaXNSZWFkeSA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcnR0OworICAgIH07
CisgICAgcmV0dXJuIFRleHR1cmVUb29sczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWlzYy90Z2EudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NaXNjL3RnYS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogVEdBVG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiVEdBVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRHQVRvb2xzOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9n
Z2VyLnRzIik7CisKKy8qKgorICogQmFzZWQgb24ganNUR0FMb2FkZXIgLSBKYXZhc2NyaXB0IGxv
YWRlciBmb3IgVEdBIGZpbGUKKyAqIEJ5IFZpbmNlbnQgVGhpYmF1bHQKKyAqIEBzZWUgaHR0cDov
L2Jsb2cucm9icm93c2VyLmNvbS9qYXZhc2NyaXB0LXRnYS1sb2FkZXIuaHRtbAorICovCit2YXIg
VEdBVG9vbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gVEdB
VG9vbHMoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGhlYWRlciBvZiBhIFRH
QSBmaWxlCisgICAgICogQHBhcmFtIGRhdGEgZGVmaW5lcyB0aGUgVEdBIGRhdGEKKyAgICAgKiBA
cmV0dXJucyB0aGUgaGVhZGVyCisgICAgICovCisgICAgVEdBVG9vbHMuR2V0VEdBSGVhZGVyID0g
ZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdmFyIG9mZnNldCA9IDA7CisgICAgICAgIHZhciBo
ZWFkZXIgPSB7CisgICAgICAgICAgICBpZF9sZW5ndGg6IGRhdGFbb2Zmc2V0KytdLAorICAgICAg
ICAgICAgY29sb3JtYXBfdHlwZTogZGF0YVtvZmZzZXQrK10sCisgICAgICAgICAgICBpbWFnZV90
eXBlOiBkYXRhW29mZnNldCsrXSwKKyAgICAgICAgICAgIGNvbG9ybWFwX2luZGV4OiBkYXRhW29m
ZnNldCsrXSB8IGRhdGFbb2Zmc2V0KytdIDw8IDgsCisgICAgICAgICAgICBjb2xvcm1hcF9sZW5n
dGg6IGRhdGFbb2Zmc2V0KytdIHwgZGF0YVtvZmZzZXQrK10gPDwgOCwKKyAgICAgICAgICAgIGNv
bG9ybWFwX3NpemU6IGRhdGFbb2Zmc2V0KytdLAorICAgICAgICAgICAgb3JpZ2luOiBbCisgICAg
ICAgICAgICAgICAgZGF0YVtvZmZzZXQrK10gfCBkYXRhW29mZnNldCsrXSA8PCA4LAorICAgICAg
ICAgICAgICAgIGRhdGFbb2Zmc2V0KytdIHwgZGF0YVtvZmZzZXQrK10gPDwgOAorICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgIHdpZHRoOiBkYXRhW29mZnNldCsrXSB8IGRhdGFbb2Zmc2V0Kytd
IDw8IDgsCisgICAgICAgICAgICBoZWlnaHQ6IGRhdGFbb2Zmc2V0KytdIHwgZGF0YVtvZmZzZXQr
K10gPDwgOCwKKyAgICAgICAgICAgIHBpeGVsX3NpemU6IGRhdGFbb2Zmc2V0KytdLAorICAgICAg
ICAgICAgZmxhZ3M6IGRhdGFbb2Zmc2V0KytdCisgICAgICAgIH07CisgICAgICAgIHJldHVybiBo
ZWFkZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGxvYWRzIFRHQSBjb250ZW50IHRvIGEg
QmFieWxvbiBUZXh0dXJlCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIFRHQVRvb2xzLlVw
bG9hZENvbnRlbnQgPSBmdW5jdGlvbiAodGV4dHVyZSwgZGF0YSkgeworICAgICAgICAvLyBOb3Qg
ZW5vdWdoIGRhdGEgdG8gY29udGFpbiBoZWFkZXIgPworICAgICAgICBpZiAoZGF0YS5sZW5ndGgg
PCAxOSkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkxvZ2dlciJdLkVycm9yKCJVbmFibGUgdG8gbG9hZCBUR0EgZmlsZSAtIE5vdCBlbm91
Z2ggZGF0YSB0byBjb250YWluIGhlYWRlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIC8vIFJlYWQgSGVhZGVyCisgICAgICAgIHZhciBvZmZzZXQgPSAxODsKKyAg
ICAgICAgdmFyIGhlYWRlciA9IFRHQVRvb2xzLkdldFRHQUhlYWRlcihkYXRhKTsKKyAgICAgICAg
Ly8gQXNzdW1lIGl0J3MgYSB2YWxpZCBUYXJnYSBmaWxlLgorICAgICAgICBpZiAoaGVhZGVyLmlk
X2xlbmd0aCArIG9mZnNldCA+IGRhdGEubGVuZ3RoKSB7CisgICAgICAgICAgICBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTG9nZ2VyIl0uRXJyb3IoIlVuYWJsZSB0
byBsb2FkIFRHQSBmaWxlIC0gTm90IGVub3VnaCBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgLy8gU2tpcCBub3QgbmVlZGVkIGRhdGEKKyAgICAgICAgb2Zm
c2V0ICs9IGhlYWRlci5pZF9sZW5ndGg7CisgICAgICAgIHZhciB1c2VfcmxlID0gZmFsc2U7Cisg
ICAgICAgIHZhciB1c2VfcGFsID0gZmFsc2U7CisgICAgICAgIHZhciB1c2VfZ3JleSA9IGZhbHNl
OworICAgICAgICAvLyBHZXQgc29tZSBpbmZvcm1hdGlvbnMuCisgICAgICAgIHN3aXRjaCAoaGVh
ZGVyLmltYWdlX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVEdBVG9vbHMuX1RZUEVfUkxFX0lO
REVYRUQ6CisgICAgICAgICAgICAgICAgdXNlX3JsZSA9IHRydWU7CisgICAgICAgICAgICBjYXNl
IFRHQVRvb2xzLl9UWVBFX0lOREVYRUQ6CisgICAgICAgICAgICAgICAgdXNlX3BhbCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRHQVRvb2xzLl9UWVBF
X1JMRV9SR0I6CisgICAgICAgICAgICAgICAgdXNlX3JsZSA9IHRydWU7CisgICAgICAgICAgICBj
YXNlIFRHQVRvb2xzLl9UWVBFX1JHQjoKKyAgICAgICAgICAgICAgICAvLyB1c2VfcmdiID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVEdBVG9vbHMuX1RZ
UEVfUkxFX0dSRVk6CisgICAgICAgICAgICAgICAgdXNlX3JsZSA9IHRydWU7CisgICAgICAgICAg
ICBjYXNlIFRHQVRvb2xzLl9UWVBFX0dSRVk6CisgICAgICAgICAgICAgICAgdXNlX2dyZXkgPSB0
cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHZhciBwaXhl
bF9kYXRhOworICAgICAgICAvLyB2YXIgbnVtQWxwaGFCaXRzID0gaGVhZGVyLmZsYWdzICYgMHhm
OworICAgICAgICB2YXIgcGl4ZWxfc2l6ZSA9IGhlYWRlci5waXhlbF9zaXplID4+IDM7CisgICAg
ICAgIHZhciBwaXhlbF90b3RhbCA9IGhlYWRlci53aWR0aCAqIGhlYWRlci5oZWlnaHQgKiBwaXhl
bF9zaXplOworICAgICAgICAvLyBSZWFkIHBhbGV0dGVzCisgICAgICAgIHZhciBwYWxldHRlczsK
KyAgICAgICAgaWYgKHVzZV9wYWwpIHsKKyAgICAgICAgICAgIHBhbGV0dGVzID0gZGF0YS5zdWJh
cnJheShvZmZzZXQsIG9mZnNldCArPSBoZWFkZXIuY29sb3JtYXBfbGVuZ3RoICogKGhlYWRlci5j
b2xvcm1hcF9zaXplID4+IDMpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZWFkIExSRQorICAg
ICAgICBpZiAodXNlX3JsZSkgeworICAgICAgICAgICAgcGl4ZWxfZGF0YSA9IG5ldyBVaW50OEFy
cmF5KHBpeGVsX3RvdGFsKTsKKyAgICAgICAgICAgIHZhciBjLCBjb3VudCwgaTsKKyAgICAgICAg
ICAgIHZhciBsb2NhbE9mZnNldCA9IDA7CisgICAgICAgICAgICB2YXIgcGl4ZWxzID0gbmV3IFVp
bnQ4QXJyYXkocGl4ZWxfc2l6ZSk7CisgICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgcGl4ZWxf
dG90YWwgJiYgbG9jYWxPZmZzZXQgPCBwaXhlbF90b3RhbCkgeworICAgICAgICAgICAgICAgIGMg
PSBkYXRhW29mZnNldCsrXTsKKyAgICAgICAgICAgICAgICBjb3VudCA9IChjICYgMHg3ZikgKyAx
OworICAgICAgICAgICAgICAgIC8vIFJMRSBwaXhlbHMKKyAgICAgICAgICAgICAgICBpZiAoYyAm
IDB4ODApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQmluZCBwaXhlbCB0bXAgYXJyYXkKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpeGVsX3NpemU7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzW2ldID0gZGF0YVtvZmZzZXQrK107CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gQ29weSBwaXhlbCBhcnJheQor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxfZGF0YS5zZXQocGl4ZWxzLCBsb2NhbE9mZnNldCArIGkg
KiBwaXhlbF9zaXplKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBsb2NhbE9mZnNldCArPSBwaXhlbF9zaXplICogY291bnQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIC8vIFJhdyBwaXhlbHMKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgY291bnQgKj0gcGl4ZWxfc2l6ZTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBpeGVsX2RhdGFbbG9jYWxPZmZzZXQgKyBpXSA9IGRhdGFbb2Zmc2V0KytdOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxvY2FsT2Zmc2V0ICs9IGNvdW50Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBS
QVcgUGl4ZWxzCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGl4ZWxfZGF0YSA9IGRhdGEu
c3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKz0gKHVzZV9wYWwgPyBoZWFkZXIud2lkdGggKiBoZWFk
ZXIuaGVpZ2h0IDogcGl4ZWxfdG90YWwpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBMb2FkIHRv
IHRleHR1cmUKKyAgICAgICAgdmFyIHhfc3RhcnQsIHlfc3RhcnQsIHhfc3RlcCwgeV9zdGVwLCB5
X2VuZCwgeF9lbmQ7CisgICAgICAgIHN3aXRjaCAoKGhlYWRlci5mbGFncyAmIFRHQVRvb2xzLl9P
UklHSU5fTUFTSykgPj4gVEdBVG9vbHMuX09SSUdJTl9TSElGVCkgeworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGNhc2UgVEdBVG9vbHMuX09SSUdJTl9VTDoKKyAgICAgICAgICAg
ICAgICB4X3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICB4X3N0ZXAgPSAxOworICAgICAgICAg
ICAgICAgIHhfZW5kID0gaGVhZGVyLndpZHRoOworICAgICAgICAgICAgICAgIHlfc3RhcnQgPSAw
OworICAgICAgICAgICAgICAgIHlfc3RlcCA9IDE7CisgICAgICAgICAgICAgICAgeV9lbmQgPSBo
ZWFkZXIuaGVpZ2h0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBU
R0FUb29scy5fT1JJR0lOX0JMOgorICAgICAgICAgICAgICAgIHhfc3RhcnQgPSAwOworICAgICAg
ICAgICAgICAgIHhfc3RlcCA9IDE7CisgICAgICAgICAgICAgICAgeF9lbmQgPSBoZWFkZXIud2lk
dGg7CisgICAgICAgICAgICAgICAgeV9zdGFydCA9IGhlYWRlci5oZWlnaHQgLSAxOworICAgICAg
ICAgICAgICAgIHlfc3RlcCA9IC0xOworICAgICAgICAgICAgICAgIHlfZW5kID0gLTE7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRHQVRvb2xzLl9PUklHSU5fVVI6
CisgICAgICAgICAgICAgICAgeF9zdGFydCA9IGhlYWRlci53aWR0aCAtIDE7CisgICAgICAgICAg
ICAgICAgeF9zdGVwID0gLTE7CisgICAgICAgICAgICAgICAgeF9lbmQgPSAtMTsKKyAgICAgICAg
ICAgICAgICB5X3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICB5X3N0ZXAgPSAxOworICAgICAg
ICAgICAgICAgIHlfZW5kID0gaGVhZGVyLmhlaWdodDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgVEdBVG9vbHMuX09SSUdJTl9CUjoKKyAgICAgICAgICAgICAgICB4
X3N0YXJ0ID0gaGVhZGVyLndpZHRoIC0gMTsKKyAgICAgICAgICAgICAgICB4X3N0ZXAgPSAtMTsK
KyAgICAgICAgICAgICAgICB4X2VuZCA9IC0xOworICAgICAgICAgICAgICAgIHlfc3RhcnQgPSBo
ZWFkZXIuaGVpZ2h0IC0gMTsKKyAgICAgICAgICAgICAgICB5X3N0ZXAgPSAtMTsKKyAgICAgICAg
ICAgICAgICB5X2VuZCA9IC0xOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIC8vIExvYWQgdGhlIHNwZWNpZnkgbWV0aG9kCisgICAgICAgIHZhciBmdW5jID0gJ19n
ZXRJbWFnZURhdGEnICsgKHVzZV9ncmV5ID8gJ0dyZXknIDogJycpICsgKGhlYWRlci5waXhlbF9z
aXplKSArICdiaXRzJzsKKyAgICAgICAgdmFyIGltYWdlRGF0YSA9IFRHQVRvb2xzW2Z1bmNdKGhl
YWRlciwgcGFsZXR0ZXMsIHBpeGVsX2RhdGEsIHlfc3RhcnQsIHlfc3RlcCwgeV9lbmQsIHhfc3Rh
cnQsIHhfc3RlcCwgeF9lbmQpOworICAgICAgICB2YXIgZW5naW5lID0gdGV4dHVyZS5nZXRFbmdp
bmUoKTsKKyAgICAgICAgZW5naW5lLl91cGxvYWREYXRhVG9UZXh0dXJlRGlyZWN0bHkodGV4dHVy
ZSwgaW1hZ2VEYXRhKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgVEdBVG9vbHMu
X2dldEltYWdlRGF0YThiaXRzID0gZnVuY3Rpb24gKGhlYWRlciwgcGFsZXR0ZXMsIHBpeGVsX2Rh
dGEsIHlfc3RhcnQsIHlfc3RlcCwgeV9lbmQsIHhfc3RhcnQsIHhfc3RlcCwgeF9lbmQpIHsKKyAg
ICAgICAgdmFyIGltYWdlID0gcGl4ZWxfZGF0YSwgY29sb3JtYXAgPSBwYWxldHRlczsKKyAgICAg
ICAgdmFyIHdpZHRoID0gaGVhZGVyLndpZHRoLCBoZWlnaHQgPSBoZWFkZXIuaGVpZ2h0OworICAg
ICAgICB2YXIgY29sb3IsIGkgPSAwLCB4LCB5OworICAgICAgICB2YXIgaW1hZ2VEYXRhID0gbmV3
IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICAgICAgZm9yICh5ID0geV9zdGFy
dDsgeSAhPT0geV9lbmQ7IHkgKz0geV9zdGVwKSB7CisgICAgICAgICAgICBmb3IgKHggPSB4X3N0
YXJ0OyB4ICE9PSB4X2VuZDsgeCArPSB4X3N0ZXAsIGkrKykgeworICAgICAgICAgICAgICAgIGNv
bG9yID0gaW1hZ2VbaV07CisgICAgICAgICAgICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5
KSAqIDQgKyAzXSA9IDI1NTsKKyAgICAgICAgICAgICAgICBpbWFnZURhdGFbKHggKyB3aWR0aCAq
IHkpICogNCArIDJdID0gY29sb3JtYXBbKGNvbG9yICogMykgKyAwXTsKKyAgICAgICAgICAgICAg
ICBpbWFnZURhdGFbKHggKyB3aWR0aCAqIHkpICogNCArIDFdID0gY29sb3JtYXBbKGNvbG9yICog
MykgKyAxXTsKKyAgICAgICAgICAgICAgICBpbWFnZURhdGFbKHggKyB3aWR0aCAqIHkpICogNCAr
IDBdID0gY29sb3JtYXBbKGNvbG9yICogMykgKyAyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBUR0FUb29scy5fZ2V0SW1hZ2VEYXRhMTZiaXRzID0gZnVuY3Rpb24gKGhlYWRlciwgcGFs
ZXR0ZXMsIHBpeGVsX2RhdGEsIHlfc3RhcnQsIHlfc3RlcCwgeV9lbmQsIHhfc3RhcnQsIHhfc3Rl
cCwgeF9lbmQpIHsKKyAgICAgICAgdmFyIGltYWdlID0gcGl4ZWxfZGF0YTsKKyAgICAgICAgdmFy
IHdpZHRoID0gaGVhZGVyLndpZHRoLCBoZWlnaHQgPSBoZWFkZXIuaGVpZ2h0OworICAgICAgICB2
YXIgY29sb3IsIGkgPSAwLCB4LCB5OworICAgICAgICB2YXIgaW1hZ2VEYXRhID0gbmV3IFVpbnQ4
QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICAgICAgZm9yICh5ID0geV9zdGFydDsgeSAh
PT0geV9lbmQ7IHkgKz0geV9zdGVwKSB7CisgICAgICAgICAgICBmb3IgKHggPSB4X3N0YXJ0OyB4
ICE9PSB4X2VuZDsgeCArPSB4X3N0ZXAsIGkgKz0gMikgeworICAgICAgICAgICAgICAgIGNvbG9y
ID0gaW1hZ2VbaSArIDBdICsgKGltYWdlW2kgKyAxXSA8PCA4KTsgLy8gSW52ZXJzZWQgPworICAg
ICAgICAgICAgICAgIHZhciByID0gKCgoY29sb3IgJiAweDdDMDApID4+IDEwKSAqIDI1NSkgLyAw
eDFGIHwgMDsKKyAgICAgICAgICAgICAgICB2YXIgZyA9ICgoKGNvbG9yICYgMHgwM0UwKSA+PiA1
KSAqIDI1NSkgLyAweDFGIHwgMDsKKyAgICAgICAgICAgICAgICB2YXIgYiA9ICgoY29sb3IgJiAw
eDAwMUYpICogMjU1KSAvIDB4MUYgfCAwOworICAgICAgICAgICAgICAgIGltYWdlRGF0YVsoeCAr
IHdpZHRoICogeSkgKiA0ICsgMF0gPSByOworICAgICAgICAgICAgICAgIGltYWdlRGF0YVsoeCAr
IHdpZHRoICogeSkgKiA0ICsgMV0gPSBnOworICAgICAgICAgICAgICAgIGltYWdlRGF0YVsoeCAr
IHdpZHRoICogeSkgKiA0ICsgMl0gPSBiOworICAgICAgICAgICAgICAgIGltYWdlRGF0YVsoeCAr
IHdpZHRoICogeSkgKiA0ICsgM10gPSAoY29sb3IgJiAweDgwMDApID8gMCA6IDI1NTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIH07Cisg
ICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUR0FUb29scy5fZ2V0SW1hZ2VEYXRhMjRiaXRzID0gZnVu
Y3Rpb24gKGhlYWRlciwgcGFsZXR0ZXMsIHBpeGVsX2RhdGEsIHlfc3RhcnQsIHlfc3RlcCwgeV9l
bmQsIHhfc3RhcnQsIHhfc3RlcCwgeF9lbmQpIHsKKyAgICAgICAgdmFyIGltYWdlID0gcGl4ZWxf
ZGF0YTsKKyAgICAgICAgdmFyIHdpZHRoID0gaGVhZGVyLndpZHRoLCBoZWlnaHQgPSBoZWFkZXIu
aGVpZ2h0OworICAgICAgICB2YXIgaSA9IDAsIHgsIHk7CisgICAgICAgIHZhciBpbWFnZURhdGEg
PSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgICAgICBmb3IgKHkgPSB5
X3N0YXJ0OyB5ICE9PSB5X2VuZDsgeSArPSB5X3N0ZXApIHsKKyAgICAgICAgICAgIGZvciAoeCA9
IHhfc3RhcnQ7IHggIT09IHhfZW5kOyB4ICs9IHhfc3RlcCwgaSArPSAzKSB7CisgICAgICAgICAg
ICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5KSAqIDQgKyAzXSA9IDI1NTsKKyAgICAgICAg
ICAgICAgICBpbWFnZURhdGFbKHggKyB3aWR0aCAqIHkpICogNCArIDJdID0gaW1hZ2VbaSArIDBd
OworICAgICAgICAgICAgICAgIGltYWdlRGF0YVsoeCArIHdpZHRoICogeSkgKiA0ICsgMV0gPSBp
bWFnZVtpICsgMV07CisgICAgICAgICAgICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5KSAq
IDQgKyAwXSA9IGltYWdlW2kgKyAyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gaW1hZ2VEYXRhOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUR0FU
b29scy5fZ2V0SW1hZ2VEYXRhMzJiaXRzID0gZnVuY3Rpb24gKGhlYWRlciwgcGFsZXR0ZXMsIHBp
eGVsX2RhdGEsIHlfc3RhcnQsIHlfc3RlcCwgeV9lbmQsIHhfc3RhcnQsIHhfc3RlcCwgeF9lbmQp
IHsKKyAgICAgICAgdmFyIGltYWdlID0gcGl4ZWxfZGF0YTsKKyAgICAgICAgdmFyIHdpZHRoID0g
aGVhZGVyLndpZHRoLCBoZWlnaHQgPSBoZWFkZXIuaGVpZ2h0OworICAgICAgICB2YXIgaSA9IDAs
IHgsIHk7CisgICAgICAgIHZhciBpbWFnZURhdGEgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhl
aWdodCAqIDQpOworICAgICAgICBmb3IgKHkgPSB5X3N0YXJ0OyB5ICE9PSB5X2VuZDsgeSArPSB5
X3N0ZXApIHsKKyAgICAgICAgICAgIGZvciAoeCA9IHhfc3RhcnQ7IHggIT09IHhfZW5kOyB4ICs9
IHhfc3RlcCwgaSArPSA0KSB7CisgICAgICAgICAgICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGgg
KiB5KSAqIDQgKyAyXSA9IGltYWdlW2kgKyAwXTsKKyAgICAgICAgICAgICAgICBpbWFnZURhdGFb
KHggKyB3aWR0aCAqIHkpICogNCArIDFdID0gaW1hZ2VbaSArIDFdOworICAgICAgICAgICAgICAg
IGltYWdlRGF0YVsoeCArIHdpZHRoICogeSkgKiA0ICsgMF0gPSBpbWFnZVtpICsgMl07CisgICAg
ICAgICAgICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5KSAqIDQgKyAzXSA9IGltYWdlW2kg
KyAzXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRh
OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUR0FUb29scy5fZ2V0SW1hZ2VEYXRh
R3JleThiaXRzID0gZnVuY3Rpb24gKGhlYWRlciwgcGFsZXR0ZXMsIHBpeGVsX2RhdGEsIHlfc3Rh
cnQsIHlfc3RlcCwgeV9lbmQsIHhfc3RhcnQsIHhfc3RlcCwgeF9lbmQpIHsKKyAgICAgICAgdmFy
IGltYWdlID0gcGl4ZWxfZGF0YTsKKyAgICAgICAgdmFyIHdpZHRoID0gaGVhZGVyLndpZHRoLCBo
ZWlnaHQgPSBoZWFkZXIuaGVpZ2h0OworICAgICAgICB2YXIgY29sb3IsIGkgPSAwLCB4LCB5Owor
ICAgICAgICB2YXIgaW1hZ2VEYXRhID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0
KTsKKyAgICAgICAgZm9yICh5ID0geV9zdGFydDsgeSAhPT0geV9lbmQ7IHkgKz0geV9zdGVwKSB7
CisgICAgICAgICAgICBmb3IgKHggPSB4X3N0YXJ0OyB4ICE9PSB4X2VuZDsgeCArPSB4X3N0ZXAs
IGkrKykgeworICAgICAgICAgICAgICAgIGNvbG9yID0gaW1hZ2VbaV07CisgICAgICAgICAgICAg
ICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5KSAqIDQgKyAwXSA9IGNvbG9yOworICAgICAgICAg
ICAgICAgIGltYWdlRGF0YVsoeCArIHdpZHRoICogeSkgKiA0ICsgMV0gPSBjb2xvcjsKKyAgICAg
ICAgICAgICAgICBpbWFnZURhdGFbKHggKyB3aWR0aCAqIHkpICogNCArIDJdID0gY29sb3I7Cisg
ICAgICAgICAgICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5KSAqIDQgKyAzXSA9IDI1NTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAg
IH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUR0FUb29scy5fZ2V0SW1hZ2VEYXRhR3JleTE2
Yml0cyA9IGZ1bmN0aW9uIChoZWFkZXIsIHBhbGV0dGVzLCBwaXhlbF9kYXRhLCB5X3N0YXJ0LCB5
X3N0ZXAsIHlfZW5kLCB4X3N0YXJ0LCB4X3N0ZXAsIHhfZW5kKSB7CisgICAgICAgIHZhciBpbWFn
ZSA9IHBpeGVsX2RhdGE7CisgICAgICAgIHZhciB3aWR0aCA9IGhlYWRlci53aWR0aCwgaGVpZ2h0
ID0gaGVhZGVyLmhlaWdodDsKKyAgICAgICAgdmFyIGkgPSAwLCB4LCB5OworICAgICAgICB2YXIg
aW1hZ2VEYXRhID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICAgICAg
Zm9yICh5ID0geV9zdGFydDsgeSAhPT0geV9lbmQ7IHkgKz0geV9zdGVwKSB7CisgICAgICAgICAg
ICBmb3IgKHggPSB4X3N0YXJ0OyB4ICE9PSB4X2VuZDsgeCArPSB4X3N0ZXAsIGkgKz0gMikgewor
ICAgICAgICAgICAgICAgIGltYWdlRGF0YVsoeCArIHdpZHRoICogeSkgKiA0ICsgMF0gPSBpbWFn
ZVtpICsgMF07CisgICAgICAgICAgICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5KSAqIDQg
KyAxXSA9IGltYWdlW2kgKyAwXTsKKyAgICAgICAgICAgICAgICBpbWFnZURhdGFbKHggKyB3aWR0
aCAqIHkpICogNCArIDJdID0gaW1hZ2VbaSArIDBdOworICAgICAgICAgICAgICAgIGltYWdlRGF0
YVsoeCArIHdpZHRoICogeSkgKiA0ICsgM10gPSBpbWFnZVtpICsgMV07CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKKyAgICB9OworICAgIC8vcHJp
dmF0ZSBzdGF0aWMgX1RZUEVfTk9fREFUQSA9IDA7CisgICAgVEdBVG9vbHMuX1RZUEVfSU5ERVhF
RCA9IDE7CisgICAgVEdBVG9vbHMuX1RZUEVfUkdCID0gMjsKKyAgICBUR0FUb29scy5fVFlQRV9H
UkVZID0gMzsKKyAgICBUR0FUb29scy5fVFlQRV9STEVfSU5ERVhFRCA9IDk7CisgICAgVEdBVG9v
bHMuX1RZUEVfUkxFX1JHQiA9IDEwOworICAgIFRHQVRvb2xzLl9UWVBFX1JMRV9HUkVZID0gMTE7
CisgICAgVEdBVG9vbHMuX09SSUdJTl9NQVNLID0gMHgzMDsKKyAgICBUR0FUb29scy5fT1JJR0lO
X1NISUZUID0gMHgwNDsKKyAgICBUR0FUb29scy5fT1JJR0lOX0JMID0gMHgwMDsKKyAgICBUR0FU
b29scy5fT1JJR0lOX0JSID0gMHgwMTsKKyAgICBUR0FUb29scy5fT1JJR0lOX1VMID0gMHgwMjsK
KyAgICBUR0FUb29scy5fT1JJR0lOX1VSID0gMHgwMzsKKyAgICByZXR1cm4gVEdBVG9vbHM7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2MvdGltaW5nVG9vbHMudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvdGltaW5n
VG9vbHMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogVGltaW5nVG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVGltaW5nVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRpbWluZ1Rvb2xzOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZG9tTWFuYWdlbWVudF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kb21NYW5hZ2VtZW50
ICovICIuL01pc2MvZG9tTWFuYWdlbWVudC50cyIpOworCisvKioKKyAqIENsYXNzIHVzZWQgdG8g
cHJvdmlkZSBoZWxwZXIgZm9yIHRpbWluZworICovCit2YXIgVGltaW5nVG9vbHMgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gVGltaW5nVG9vbHMoKSB7CisgICAg
fQorICAgIC8qKgorICAgICAqIFBvbHlmaWxsIGZvciBzZXRJbW1lZGlhdGUKKyAgICAgKiBAcGFy
YW0gYWN0aW9uIGRlZmluZXMgdGhlIGFjdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBjdXJyZW50
IGV4ZWN1dGlvbiBibG9jaworICAgICAqLworICAgIFRpbWluZ1Rvb2xzLlNldEltbWVkaWF0ZSA9
IGZ1bmN0aW9uIChhY3Rpb24pIHsKKyAgICAgICAgaWYgKF9kb21NYW5hZ2VtZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkRvbU1hbmFnZW1lbnQiXS5Jc1dpbmRvd09iamVjdEV4aXN0
KCkgJiYgd2luZG93LnNldEltbWVkaWF0ZSkgeworICAgICAgICAgICAgd2luZG93LnNldEltbWVk
aWF0ZShhY3Rpb24pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2V0
VGltZW91dChhY3Rpb24sIDEpOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gVGltaW5n
VG9vbHM7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2MvdG9vbHMudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvdG9vbHMudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
VG9vbHMsIGNsYXNzTmFtZSwgQXN5bmNMb29wICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUb29sczsgfSk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJjbGFzc05hbWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsYXNzTmFtZTsgfSk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJBc3luY0xvb3AiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFzeW5j
TG9vcDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX29ic2VydmFibGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vb2JzZXJ2YWJs
ZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
ZG9tTWFuYWdlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9kb21NYW5hZ2VtZW50ICovICIuL01pc2MvZG9tTWFuYWdlbWVudC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbG9nZ2VyICovICIuL01pc2MvbG9n
Z2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlZXBDb3BpZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVlcENvcGll
ciAqLyAiLi9NaXNjL2RlZXBDb3BpZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cHJlY2lzaW9uRGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9wcmVjaXNpb25EYXRlICovICIuL01pc2MvcHJlY2lzaW9uRGF0ZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZXZUb29scyAqLyAiLi9NaXNj
L2RldlRvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlYlJlcXVlc3RfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2Vi
UmVxdWVzdCAqLyAiLi9NaXNjL3dlYlJlcXVlc3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9Fbmdp
bmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZpbGVUb29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9maWxlVG9vbHMgKi8gIi4vTWlzYy9maWxlVG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfcHJvbWlzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9wcm9taXNlICovICIuL01pc2MvcHJvbWlzZS50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF90aW1pbmdUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGltaW5nVG9vbHMgKi8gIi4vTWlzYy90
aW1pbmdUb29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pbnN0YW50aWF0aW9u
VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL2luc3RhbnRpYXRpb25Ub29scyAqLyAiLi9NaXNjL2luc3RhbnRpYXRpb25Ub29scy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ndWlkX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ndWlkICovICIuL01pc2MvZ3Vp
ZC50cyIpOworCisKKworCisKKworCisKKworCisKKworCisvKioKKyAqIENsYXNzIGNvbnRhaW5p
bmcgYSBzZXQgb2Ygc3RhdGljIHV0aWxpdGllcyBmdW5jdGlvbnMKKyAqLwordmFyIFRvb2xzID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFRvb2xzKCkgeworICAg
IH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9vbHMsICJCYXNlVXJsIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBiYXNlIFVSTCB0byB1c2UgdG8gbG9h
ZCBhc3NldHMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIF9maWxlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siRmls
ZVRvb2xzIl0uQmFzZVVybDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIF9maWxlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
X1siRmlsZVRvb2xzIl0uQmFzZVVybCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoVG9vbHMsICJEZWZhdWx0UmV0cnlTdHJhdGVneSIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcmV0cnkgc3RyYXRlZ3kgdG8g
YXBwbHkgd2hlbiBhbiBlcnJvciBoYXBwZW5zIHdoaWxlIGxvYWRpbmcgYW4gYXNzZXQKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9m
aWxlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siRmlsZVRvb2xzIl0uRGVmYXVs
dFJldHJ5U3RyYXRlZ3k7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHN0cmF0
ZWd5KSB7CisgICAgICAgICAgICBfZmlsZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIkZpbGVUb29scyJdLkRlZmF1bHRSZXRyeVN0cmF0ZWd5ID0gc3RyYXRlZ3k7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb29scywgIlVzZUZhbGxiYWNr
VGV4dHVyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGdsb2Jh
bCB2YXJpYWJsZSBpbmRpY2F0aW5nIGlmIGZhbGxiYWNrIHRleHR1cmUgbXVzdCBiZSB1c2VkIHdo
ZW4gYSB0ZXh0dXJlIGNhbm5vdCBiZSBsb2FkZWQKKyAgICAgICAgICogQGlnbm9yZW5hbWluZwor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRW5n
aW5lU3RvcmUiXS5Vc2VGYWxsYmFja1RleHR1cmU7CisgICAgICAgIH0sCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJFbmdpbmVTdG9yZSJdLlVzZUZhbGxiYWNrVGV4dHVy
ZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
VG9vbHMsICJSZWdpc3RlcmVkRXh0ZXJuYWxDbGFzc2VzIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogVXNlIHRoaXMgb2JqZWN0IHRvIHJlZ2lzdGVyIGV4dGVybmFsIGNsYXNzZXMgbGlrZSBj
dXN0b20gdGV4dHVyZXMgb3IgbWF0ZXJpYWwKKyAgICAgICAgICogdG8gYWxsb3cgdGhlIGxhb2Rl
cnMgdG8gaW5zdGFudGlhdGUgdGhlbQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gX2luc3RhbnRpYXRpb25Ub29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTFfX1siSW5zdGFudGlhdGlvblRvb2xzIl0uUmVnaXN0ZXJlZEV4dGVy
bmFsQ2xhc3NlczsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2xhc3Nlcykg
eworICAgICAgICAgICAgX2luc3RhbnRpYXRpb25Ub29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfX1siSW5zdGFudGlhdGlvblRvb2xzIl0uUmVnaXN0ZXJlZEV4dGVybmFsQ2xhc3NlcyA9
IGNsYXNzZXM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShU
b29scywgImZhbGxiYWNrVGV4dHVyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRleHR1
cmUgY29udGVudCB1c2VkIGlmIGEgdGV4dHVyZSBjYW5ub3QgbG9hZGVkCisgICAgICAgICAqIEBp
Z25vcmVuYW1pbmcKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkVuZ2luZVN0b3JlIl0uRmFsbGJhY2tUZXh0dXJlOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgX0VuZ2luZXNfZW5naW5l
U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRW5naW5lU3RvcmUiXS5GYWxsYmFj
a1RleHR1cmUgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmVh
ZCB0aGUgY29udGVudCBvZiBhIGJ5dGUgYXJyYXkgYXQgYSBzcGVjaWZpZWQgY29vcmRpbmF0ZXMg
KHRha2luZyBpbiBhY2NvdW50IHdyYXBwaW5nKQorICAgICAqIEBwYXJhbSB1IGRlZmluZXMgdGhl
IGNvb3JkaW5hdGUgb24gWCBheGlzCisgICAgICogQHBhcmFtIHYgZGVmaW5lcyB0aGUgY29vcmRp
bmF0ZSBvbiBZIGF4aXMKKyAgICAgKiBAcGFyYW0gd2lkdGggZGVmaW5lcyB0aGUgd2lkdGggb2Yg
dGhlIHNvdXJjZSBkYXRhCisgICAgICogQHBhcmFtIGhlaWdodCBkZWZpbmVzIHRoZSBoZWlnaHQg
b2YgdGhlIHNvdXJjZSBkYXRhCisgICAgICogQHBhcmFtIHBpeGVscyBkZWZpbmVzIHRoZSBzb3Vy
Y2UgYnl0ZSBhcnJheQorICAgICAqIEBwYXJhbSBjb2xvciBkZWZpbmVzIHRoZSBvdXRwdXQgY29s
b3IKKyAgICAgKi8KKyAgICBUb29scy5GZXRjaFRvUmVmID0gZnVuY3Rpb24gKHUsIHYsIHdpZHRo
LCBoZWlnaHQsIHBpeGVscywgY29sb3IpIHsKKyAgICAgICAgdmFyIHdyYXBwZWRVID0gKChNYXRo
LmFicyh1KSAqIHdpZHRoKSAlIHdpZHRoKSB8IDA7CisgICAgICAgIHZhciB3cmFwcGVkViA9ICgo
TWF0aC5hYnModikgKiBoZWlnaHQpICUgaGVpZ2h0KSB8IDA7CisgICAgICAgIHZhciBwb3NpdGlv
biA9ICh3cmFwcGVkVSArIHdyYXBwZWRWICogd2lkdGgpICogNDsKKyAgICAgICAgY29sb3IuciA9
IHBpeGVsc1twb3NpdGlvbl0gLyAyNTU7CisgICAgICAgIGNvbG9yLmcgPSBwaXhlbHNbcG9zaXRp
b24gKyAxXSAvIDI1NTsKKyAgICAgICAgY29sb3IuYiA9IHBpeGVsc1twb3NpdGlvbiArIDJdIC8g
MjU1OworICAgICAgICBjb2xvci5hID0gcGl4ZWxzW3Bvc2l0aW9uICsgM10gLyAyNTU7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBJbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIGFuZCBiIHZpYSBhbHBo
YQorICAgICAqIEBwYXJhbSBhIFRoZSBsb3dlciB2YWx1ZSAocmV0dXJuZWQgd2hlbiBhbHBoYSA9
IDApCisgICAgICogQHBhcmFtIGIgVGhlIHVwcGVyIHZhbHVlIChyZXR1cm5lZCB3aGVuIGFscGhh
ID0gMSkKKyAgICAgKiBAcGFyYW0gYWxwaGEgVGhlIGludGVycG9sYXRpb24tZmFjdG9yCisgICAg
ICogQHJldHVybiBUaGUgbWl4ZWQgdmFsdWUKKyAgICAgKi8KKyAgICBUb29scy5NaXggPSBmdW5j
dGlvbiAoYSwgYiwgYWxwaGEpIHsKKyAgICAgICAgcmV0dXJuIGEgKiAoMSAtIGFscGhhKSArIGIg
KiBhbHBoYTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRyaWVzIHRvIGluc3RhbnRpYXRlIGEg
bmV3IG9iamVjdCBmcm9tIGEgZ2l2ZW4gY2xhc3MgbmFtZQorICAgICAqIEBwYXJhbSBjbGFzc05h
bWUgZGVmaW5lcyB0aGUgY2xhc3MgbmFtZSB0byBpbnN0YW50aWF0ZQorICAgICAqIEByZXR1cm5z
IHRoZSBuZXcgb2JqZWN0IG9yIG51bGwgaWYgdGhlIHN5c3RlbSB3YXMgbm90IGFibGUgdG8gZG8g
dGhlIGluc3RhbnRpYXRpb24KKyAgICAgKi8KKyAgICBUb29scy5JbnN0YW50aWF0ZSA9IGZ1bmN0
aW9uIChjbGFzc05hbWUpIHsKKyAgICAgICAgcmV0dXJuIF9pbnN0YW50aWF0aW9uVG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkluc3RhbnRpYXRpb25Ub29scyJdLkluc3RhbnRp
YXRlKGNsYXNzTmFtZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcm92aWRlcyBhIHNsaWNl
IGZ1bmN0aW9uIHRoYXQgd2lsbCB3b3JrIGV2ZW4gb24gSUUKKyAgICAgKiBAcGFyYW0gZGF0YSBk
ZWZpbmVzIHRoZSBhcnJheSB0byBzbGljZQorICAgICAqIEBwYXJhbSBzdGFydCBkZWZpbmVzIHRo
ZSBzdGFydCBvZiB0aGUgZGF0YSAob3B0aW9uYWwpCisgICAgICogQHBhcmFtIGVuZCBkZWZpbmVz
IHRoZSBlbmQgb2YgdGhlIGRhdGEgKG9wdGlvbmFsKQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcg
c2xpY2VkIGFycmF5CisgICAgICovCisgICAgVG9vbHMuU2xpY2UgPSBmdW5jdGlvbiAoZGF0YSwg
c3RhcnQsIGVuZCkgeworICAgICAgICBpZiAoZGF0YS5zbGljZSkgeworICAgICAgICAgICAgcmV0
dXJuIGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEFy
cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRhdGEsIHN0YXJ0LCBlbmQpOworICAgIH07CisgICAg
LyoqCisgICAgICogUG9seWZpbGwgZm9yIHNldEltbWVkaWF0ZQorICAgICAqIEBwYXJhbSBhY3Rp
b24gZGVmaW5lcyB0aGUgYWN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgdGhlIGN1cnJlbnQgZXhlY3V0
aW9uIGJsb2NrCisgICAgICovCisgICAgVG9vbHMuU2V0SW1tZWRpYXRlID0gZnVuY3Rpb24gKGFj
dGlvbikgeworICAgICAgICBfdGltaW5nVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEw
X19bIlRpbWluZ1Rvb2xzIl0uU2V0SW1tZWRpYXRlKGFjdGlvbik7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBGdW5jdGlvbiBpbmRpY2F0aW5nIGlmIGEgbnVtYmVyIGlzIGFuIGV4cG9uZW50IG9m
IDIKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5lcyB0aGUgdmFsdWUgdG8gdGVzdAorICAgICAq
IEByZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIGV4cG9uZW50IG9mIDIKKyAgICAgKi8K
KyAgICBUb29scy5Jc0V4cG9uZW50T2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
dmFyIGNvdW50ID0gMTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY291bnQgKj0gMjsKKyAg
ICAgICAgfSB3aGlsZSAoY291bnQgPCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjb3VudCA9PT0g
dmFsdWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBuZWFyZXN0IDMyLWJp
dCBzaW5nbGUgcHJlY2lzaW9uIGZsb2F0IHJlcHJlc2VudGF0aW9uIG9mIGEgTnVtYmVyCisgICAg
ICogQHBhcmFtIHZhbHVlIEEgTnVtYmVyLiAgSWYgdGhlIHBhcmFtZXRlciBpcyBvZiBhIGRpZmZl
cmVudCB0eXBlLCBpdCB3aWxsIGdldCBjb252ZXJ0ZWQKKyAgICAgKiB0byBhIG51bWJlciBvciB0
byBOYU4gaWYgaXQgY2Fubm90IGJlIGNvbnZlcnRlZAorICAgICAqIEByZXR1cm5zIG51bWJlcgor
ICAgICAqLworICAgIFRvb2xzLkZsb2F0Um91bmQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg
ICAgaWYgKE1hdGguZnJvdW5kKSB7CisgICAgICAgICAgICByZXR1cm4gTWF0aC5mcm91bmQodmFs
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAoVG9vbHMuX3RtcEZsb2F0QXJyYXlbMF0g
PSB2YWx1ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeHRyYWN0cyB0aGUgZmlsZW5hbWUg
ZnJvbSBhIHBhdGgKKyAgICAgKiBAcGFyYW0gcGF0aCBkZWZpbmVzIHRoZSBwYXRoIHRvIHVzZQor
ICAgICAqIEByZXR1cm5zIHRoZSBmaWxlbmFtZQorICAgICAqLworICAgIFRvb2xzLkdldEZpbGVu
YW1lID0gZnVuY3Rpb24gKHBhdGgpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gcGF0aC5sYXN0SW5k
ZXhPZigiLyIpOworICAgICAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgICAgICByZXR1cm4g
cGF0aDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoaW5kZXggKyAx
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEV4dHJhY3RzIHRoZSAiZm9sZGVyIiBwYXJ0IG9m
IGEgcGF0aCAoZXZlcnl0aGluZyBiZWZvcmUgdGhlIGZpbGVuYW1lKS4KKyAgICAgKiBAcGFyYW0g
dXJpIFRoZSBVUkkgdG8gZXh0cmFjdCB0aGUgaW5mbyBmcm9tCisgICAgICogQHBhcmFtIHJldHVy
blVuY2hhbmdlZElmTm9TbGFzaCBEbyBub3QgdG91Y2ggdGhlIFVSSSBpZiBubyBzbGFzaGVzIGFy
ZSBwcmVzZW50CisgICAgICogQHJldHVybnMgVGhlICJmb2xkZXIiIHBhcnQgb2YgdGhlIHBhdGgK
KyAgICAgKi8KKyAgICBUb29scy5HZXRGb2xkZXJQYXRoID0gZnVuY3Rpb24gKHVyaSwgcmV0dXJu
VW5jaGFuZ2VkSWZOb1NsYXNoKSB7CisgICAgICAgIGlmIChyZXR1cm5VbmNoYW5nZWRJZk5vU2xh
c2ggPT09IHZvaWQgMCkgeyByZXR1cm5VbmNoYW5nZWRJZk5vU2xhc2ggPSBmYWxzZTsgfQorICAg
ICAgICB2YXIgaW5kZXggPSB1cmkubGFzdEluZGV4T2YoIi8iKTsKKyAgICAgICAgaWYgKGluZGV4
IDwgMCkgeworICAgICAgICAgICAgaWYgKHJldHVyblVuY2hhbmdlZElmTm9TbGFzaCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiB1cmk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gIiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVyaS5zdWJzdHJpbmcoMCwgaW5kZXgg
KyAxKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbnZlcnQgYW4gYW5nbGUgaW4gcmFkaWFu
cyB0byBkZWdyZWVzCisgICAgICogQHBhcmFtIGFuZ2xlIGRlZmluZXMgdGhlIGFuZ2xlIHRvIGNv
bnZlcnQKKyAgICAgKiBAcmV0dXJucyB0aGUgYW5nbGUgaW4gZGVncmVlcworICAgICAqLworICAg
IFRvb2xzLlRvRGVncmVlcyA9IGZ1bmN0aW9uIChhbmdsZSkgeworICAgICAgICByZXR1cm4gYW5n
bGUgKiAxODAgLyBNYXRoLlBJOworICAgIH07CisgICAgLyoqCisgICAgICogQ29udmVydCBhbiBh
bmdsZSBpbiBkZWdyZWVzIHRvIHJhZGlhbnMKKyAgICAgKiBAcGFyYW0gYW5nbGUgZGVmaW5lcyB0
aGUgYW5nbGUgdG8gY29udmVydAorICAgICAqIEByZXR1cm5zIHRoZSBhbmdsZSBpbiByYWRpYW5z
CisgICAgICovCisgICAgVG9vbHMuVG9SYWRpYW5zID0gZnVuY3Rpb24gKGFuZ2xlKSB7CisgICAg
ICAgIHJldHVybiBhbmdsZSAqIE1hdGguUEkgLyAxODA7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBFbmNvZGUgYSBidWZmZXIgdG8gYSBiYXNlNjQgc3RyaW5nCisgICAgICogQHBhcmFtIGJ1ZmZl
ciBkZWZpbmVzIHRoZSBidWZmZXIgdG8gZW5jb2RlCisgICAgICogQHJldHVybnMgdGhlIGVuY29k
ZWQgc3RyaW5nCisgICAgICovCisgICAgVG9vbHMuRW5jb2RlQXJyYXlCdWZmZXJUb2Jhc2U2NCA9
IGZ1bmN0aW9uIChidWZmZXIpIHsKKyAgICAgICAgdmFyIGtleVN0ciA9ICJBQkNERUZHSElKS0xN
Tk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7Cisg
ICAgICAgIHZhciBvdXRwdXQgPSAiIjsKKyAgICAgICAgdmFyIGNocjEsIGNocjIsIGNocjMsIGVu
YzEsIGVuYzIsIGVuYzMsIGVuYzQ7CisgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgdmFyIGJ5
dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTsKKyAgICAgICAgd2hpbGUgKGkgPCBieXRlcy5s
ZW5ndGgpIHsKKyAgICAgICAgICAgIGNocjEgPSBieXRlc1tpKytdOworICAgICAgICAgICAgY2hy
MiA9IGkgPCBieXRlcy5sZW5ndGggPyBieXRlc1tpKytdIDogTnVtYmVyLk5hTjsgLy8gTm90IHN1
cmUgaWYgdGhlIGluZGV4CisgICAgICAgICAgICBjaHIzID0gaSA8IGJ5dGVzLmxlbmd0aCA/IGJ5
dGVzW2krK10gOiBOdW1iZXIuTmFOOyAvLyBjaGVja3MgYXJlIG5lZWRlZCBoZXJlCisgICAgICAg
ICAgICBlbmMxID0gY2hyMSA+PiAyOworICAgICAgICAgICAgZW5jMiA9ICgoY2hyMSAmIDMpIDw8
IDQpIHwgKGNocjIgPj4gNCk7CisgICAgICAgICAgICBlbmMzID0gKChjaHIyICYgMTUpIDw8IDIp
IHwgKGNocjMgPj4gNik7CisgICAgICAgICAgICBlbmM0ID0gY2hyMyAmIDYzOworICAgICAgICAg
ICAgaWYgKGlzTmFOKGNocjIpKSB7CisgICAgICAgICAgICAgICAgZW5jMyA9IGVuYzQgPSA2NDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGlzTmFOKGNocjMpKSB7CisgICAg
ICAgICAgICAgICAgZW5jNCA9IDY0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cHV0
ICs9IGtleVN0ci5jaGFyQXQoZW5jMSkgKyBrZXlTdHIuY2hhckF0KGVuYzIpICsKKyAgICAgICAg
ICAgICAgICBrZXlTdHIuY2hhckF0KGVuYzMpICsga2V5U3RyLmNoYXJBdChlbmM0KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwiICsgb3V0cHV0Owor
ICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBhcnJheSBpZiBvYmogaXMgbm90IGFu
IGFycmF5CisgICAgICogQHBhcmFtIG9iaiBkZWZpbmVzIHRoZSBvYmplY3QgdG8gZXZhbHVhdGUg
YXMgYW4gYXJyYXkKKyAgICAgKiBAcGFyYW0gYWxsb3dzTnVsbFVuZGVmaW5lZCBkZWZpbmVzIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIGlmIG9iaiBpcyBhbGxvd2VkIHRvIGJlIG51bGwgb3IgdW5kZWZp
bmVkCisgICAgICogQHJldHVybnMgZWl0aGVyIG9iaiBkaXJlY3RseSBpZiBvYmogaXMgYW4gYXJy
YXkgb3IgYSBuZXcgYXJyYXkgY29udGFpbmluZyBvYmoKKyAgICAgKi8KKyAgICBUb29scy5NYWtl
QXJyYXkgPSBmdW5jdGlvbiAob2JqLCBhbGxvd3NOdWxsVW5kZWZpbmVkKSB7CisgICAgICAgIGlm
IChhbGxvd3NOdWxsVW5kZWZpbmVkICE9PSB0cnVlICYmIChvYmogPT09IHVuZGVmaW5lZCB8fCBv
YmogPT0gbnVsbCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iaikgPyBvYmogOiBbb2JqXTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldHMgdGhlIHBvaW50ZXIgcHJlZml4IHRvIHVzZQorICAgICAqIEByZXR1
cm5zICJwb2ludGVyIiBpZiB0b3VjaCBpcyBlbmFibGVkLiBFbHNlIHJldHVybnMgIm1vdXNlIgor
ICAgICAqLworICAgIFRvb2xzLkdldFBvaW50ZXJQcmVmaXggPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBldmVudFByZWZpeCA9ICJwb2ludGVyIjsKKyAgICAgICAgLy8gQ2hlY2sgaWYgcG9p
bnRlciBldmVudHMgYXJlIHN1cHBvcnRlZAorICAgICAgICBpZiAoX2RvbU1hbmFnZW1lbnRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRG9tTWFuYWdlbWVudCJdLklzV2luZG93T2JqZWN0
RXhpc3QoKSAmJiAhd2luZG93LlBvaW50ZXJFdmVudCAmJiBfZG9tTWFuYWdlbWVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJEb21NYW5hZ2VtZW50Il0uSXNOYXZpZ2F0b3JBdmFpbGFi
bGUoKSAmJiAhbmF2aWdhdG9yLnBvaW50ZXJFbmFibGVkKSB7CisgICAgICAgICAgICBldmVudFBy
ZWZpeCA9ICJtb3VzZSI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGV2ZW50UHJlZml4Owor
ICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY29ycyBiZWhhdmlvciBvbiBhIGRvbSBl
bGVtZW50LiBUaGlzIHdpbGwgYWRkIHRoZSByZXF1aXJlZCBUb29scy5Db3JzQmVoYXZpb3IgdG8g
dGhlIGVsZW1lbnQuCisgICAgICogQHBhcmFtIHVybCBkZWZpbmUgdGhlIHVybCB3ZSBhcmUgdHJ5
aW5nCisgICAgICogQHBhcmFtIGVsZW1lbnQgZGVmaW5lIHRoZSBkb20gZWxlbWVudCB3aGVyZSB0
byBjb25maWd1cmUgdGhlIGNvcnMgcG9saWN5CisgICAgICovCisgICAgVG9vbHMuU2V0Q29yc0Jl
aGF2aW9yID0gZnVuY3Rpb24gKHVybCwgZWxlbWVudCkgeworICAgICAgICBfZmlsZVRvb2xzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkZpbGVUb29scyJdLlNldENvcnNCZWhhdmlvcih1
cmwsIGVsZW1lbnQpOworICAgIH07CisgICAgLy8gRXh0ZXJuYWwgZmlsZXMKKyAgICAvKioKKyAg
ICAgKiBSZW1vdmVzIHVud2FudGVkIGNoYXJhY3RlcnMgZnJvbSBhbiB1cmwKKyAgICAgKiBAcGFy
YW0gdXJsIGRlZmluZXMgdGhlIHVybCB0byBjbGVhbgorICAgICAqIEByZXR1cm5zIHRoZSBjbGVh
bmVkIHVybAorICAgICAqLworICAgIFRvb2xzLkNsZWFuVXJsID0gZnVuY3Rpb24gKHVybCkgewor
ICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgvIy9tZywgIiUyMyIpOworICAgICAgICByZXR1cm4g
dXJsOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvb2xzLCAiUHJlcHJvY2Vz
c1VybCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGZ1bmN0aW9u
IHVzZWQgdG8gcHJlLXByb2Nlc3MgdXJsIGJlZm9yZSB1c2luZyB0aGVtIHRvIGxvYWQgYXNzZXRz
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiBfZmlsZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkZpbGVUb29scyJd
LlByZXByb2Nlc3NVcmw7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2Nl
c3NvcikgeworICAgICAgICAgICAgX2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJGaWxlVG9vbHMiXS5QcmVwcm9jZXNzVXJsID0gcHJvY2Vzc29yOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICAvKioKKyAgICAqIExvYWRzIGFuIGltYWdlIGFzIGFuIEhUTUxJbWFnZUVsZW1l
bnQuCisgICAgKiBAcGFyYW0gaW5wdXQgdXJsIHN0cmluZywgQXJyYXlCdWZmZXIsIG9yIEJsb2Ig
dG8gbG9hZAorICAgICogQHBhcmFtIG9uTG9hZCBjYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgaW1h
Z2Ugc3VjY2Vzc2Z1bGx5IGxvYWRzCisgICAgKiBAcGFyYW0gb25FcnJvciBjYWxsYmFjayBjYWxs
ZWQgd2hlbiB0aGUgaW1hZ2UgZmFpbHMgdG8gbG9hZAorICAgICogQHBhcmFtIG9mZmxpbmVQcm92
aWRlciBvZmZsaW5lIHByb3ZpZGVyIGZvciBjYWNoaW5nCisgICAgKiBAcmV0dXJucyB0aGUgSFRN
TEltYWdlRWxlbWVudCBvZiB0aGUgbG9hZGVkIGltYWdlCisgICAgKi8KKyAgICBUb29scy5Mb2Fk
SW1hZ2UgPSBmdW5jdGlvbiAoaW5wdXQsIG9uTG9hZCwgb25FcnJvciwgb2ZmbGluZVByb3ZpZGVy
KSB7CisgICAgICAgIHJldHVybiBfZmlsZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIkZpbGVUb29scyJdLkxvYWRJbWFnZShpbnB1dCwgb25Mb2FkLCBvbkVycm9yLCBvZmZsaW5l
UHJvdmlkZXIpOworICAgIH07CisgICAgLyoqCisgICAgICogTG9hZHMgYSBmaWxlCisgICAgICog
QHBhcmFtIHVybCB1cmwgc3RyaW5nLCBBcnJheUJ1ZmZlciwgb3IgQmxvYiB0byBsb2FkCisgICAg
ICogQHBhcmFtIG9uU3VjY2VzcyBjYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgZmlsZSBzdWNjZXNz
ZnVsbHkgbG9hZHMKKyAgICAgKiBAcGFyYW0gb25Qcm9ncmVzcyBjYWxsYmFjayBjYWxsZWQgd2hp
bGUgZmlsZSBpcyBsb2FkaW5nIChpZiB0aGUgc2VydmVyIHN1cHBvcnRzIHRoaXMgbW9kZSkKKyAg
ICAgKiBAcGFyYW0gb2ZmbGluZVByb3ZpZGVyIGRlZmluZXMgdGhlIG9mZmxpbmUgcHJvdmlkZXIg
Zm9yIGNhY2hpbmcKKyAgICAgKiBAcGFyYW0gdXNlQXJyYXlCdWZmZXIgZGVmaW5lcyBhIGJvb2xl
YW4gaW5kaWNhdGluZyB0aGF0IGRhdGUgbXVzdCBiZSByZXR1cm5lZCBhcyBBcnJheUJ1ZmZlcgor
ICAgICAqIEBwYXJhbSBvbkVycm9yIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBmaWxlIGZhaWxz
IHRvIGxvYWQKKyAgICAgKiBAcmV0dXJucyBhIGZpbGUgcmVxdWVzdCBvYmplY3QKKyAgICAgKi8K
KyAgICBUb29scy5Mb2FkRmlsZSA9IGZ1bmN0aW9uICh1cmwsIG9uU3VjY2Vzcywgb25Qcm9ncmVz
cywgb2ZmbGluZVByb3ZpZGVyLCB1c2VBcnJheUJ1ZmZlciwgb25FcnJvcikgeworICAgICAgICBy
ZXR1cm4gX2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJGaWxlVG9vbHMi
XS5Mb2FkRmlsZSh1cmwsIG9uU3VjY2Vzcywgb25Qcm9ncmVzcywgb2ZmbGluZVByb3ZpZGVyLCB1
c2VBcnJheUJ1ZmZlciwgb25FcnJvcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBMb2FkcyBh
IGZpbGUgZnJvbSBhIHVybAorICAgICAqIEBwYXJhbSB1cmwgdGhlIGZpbGUgdXJsIHRvIGxvYWQK
KyAgICAgKiBAcmV0dXJucyBhIHByb21pc2UgY29udGFpbmluZyBhbiBBcnJheUJ1ZmZlciBjb3Jy
aXNwb25kaW5nIHRvIHRoZSBsb2FkZWQgZmlsZQorICAgICAqLworICAgIFRvb2xzLkxvYWRGaWxl
QXN5bmMgPSBmdW5jdGlvbiAodXJsKSB7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5j
dGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBfZmlsZVRvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIkZpbGVUb29scyJdLkxvYWRGaWxlKHVybCwgZnVuY3Rpb24g
KGRhdGEpIHsKKyAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpOworICAgICAgICAgICAgfSwg
dW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUsIGZ1bmN0aW9uIChyZXF1ZXN0LCBleGNlcHRpb24p
IHsKKyAgICAgICAgICAgICAgICByZWplY3QoZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIExvYWQgYSBzY3JpcHQgKGlkZW50
aWZpZWQgYnkgYW4gdXJsKS4gV2hlbiB0aGUgdXJsIHJldHVybnMsIHRoZQorICAgICAqIGNvbnRl
bnQgb2YgdGhpcyBmaWxlIGlzIGFkZGVkIGludG8gYSBuZXcgc2NyaXB0IGVsZW1lbnQsIGF0dGFj
aGVkIHRvIHRoZSBET00gKGJvZHkgZWxlbWVudCkKKyAgICAgKiBAcGFyYW0gc2NyaXB0VXJsIGRl
ZmluZXMgdGhlIHVybCBvZiB0aGUgc2NyaXB0IHRvIGxhb2QKKyAgICAgKiBAcGFyYW0gb25TdWNj
ZXNzIGRlZmluZXMgdGhlIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgaXMgbG9hZGVk
CisgICAgICogQHBhcmFtIG9uRXJyb3IgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gY2FsbCBpZiBh
biBlcnJvciBvY2N1cnMKKyAgICAgKiBAcGFyYW0gc2NyaXB0SWQgZGVmaW5lcyB0aGUgaWQgb2Yg
dGhlIHNjcmlwdCBlbGVtZW50CisgICAgICovCisgICAgVG9vbHMuTG9hZFNjcmlwdCA9IGZ1bmN0
aW9uIChzY3JpcHRVcmwsIG9uU3VjY2Vzcywgb25FcnJvciwgc2NyaXB0SWQpIHsKKyAgICAgICAg
aWYgKCFfZG9tTWFuYWdlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJEb21NYW5h
Z2VtZW50Il0uSXNXaW5kb3dPYmplY3RFeGlzdCgpKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgnaGVhZCcpWzBdOworICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnc2NyaXB0Jyk7CisgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9q
YXZhc2NyaXB0Jyk7CisgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsIHNjcmlwdFVy
bCk7CisgICAgICAgIGlmIChzY3JpcHRJZCkgeworICAgICAgICAgICAgc2NyaXB0LmlkID0gc2Ny
aXB0SWQ7CisgICAgICAgIH0KKyAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICBvblN1Y2Nlc3Mo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBm
dW5jdGlvbiAoZSkgeworICAgICAgICAgICAgaWYgKG9uRXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICBvbkVycm9yKCJVbmFibGUgdG8gbG9hZCBzY3JpcHQgJyIgKyBzY3JpcHRVcmwgKyAiJyIsIGUp
OworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNj
cmlwdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBMb2FkIGFuIGFzeW5jaHJvbm91cyBzY3Jp
cHQgKGlkZW50aWZpZWQgYnkgYW4gdXJsKS4gV2hlbiB0aGUgdXJsIHJldHVybnMsIHRoZQorICAg
ICAqIGNvbnRlbnQgb2YgdGhpcyBmaWxlIGlzIGFkZGVkIGludG8gYSBuZXcgc2NyaXB0IGVsZW1l
bnQsIGF0dGFjaGVkIHRvIHRoZSBET00gKGJvZHkgZWxlbWVudCkKKyAgICAgKiBAcGFyYW0gc2Ny
aXB0VXJsIGRlZmluZXMgdGhlIHVybCBvZiB0aGUgc2NyaXB0IHRvIGxhb2QKKyAgICAgKiBAcGFy
YW0gc2NyaXB0SWQgZGVmaW5lcyB0aGUgaWQgb2YgdGhlIHNjcmlwdCBlbGVtZW50CisgICAgICog
QHJldHVybnMgYSBwcm9taXNlIHJlcXVlc3Qgb2JqZWN0CisgICAgICovCisgICAgVG9vbHMuTG9h
ZFNjcmlwdEFzeW5jID0gZnVuY3Rpb24gKHNjcmlwdFVybCwgc2NyaXB0SWQpIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAg
ICAgIGlmICghX2RvbU1hbmFnZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRG9t
TWFuYWdlbWVudCJdLklzV2luZG93T2JqZWN0RXhpc3QoKSkgeworICAgICAgICAgICAgICAgIHJl
c29sdmUoZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQn
KVswXTsKKyAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz
Y3JpcHQnKTsKKyAgICAgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9q
YXZhc2NyaXB0Jyk7CisgICAgICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLCBzY3Jp
cHRVcmwpOworICAgICAgICAgICAgaWYgKHNjcmlwdElkKSB7CisgICAgICAgICAgICAgICAgc2Ny
aXB0LmlkID0gc2NyaXB0SWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzY3JpcHQub25s
b2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7CisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkgewor
ICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpOworICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBMb2FkcyBhIGZpbGUgZnJvbSBhIGJsb2IKKyAgICAgKiBAcGFyYW0gZmlsZVRv
TG9hZCBkZWZpbmVzIHRoZSBibG9iIHRvIHVzZQorICAgICAqIEBwYXJhbSBjYWxsYmFjayBkZWZp
bmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gZGF0YSBpcyBsb2FkZWQKKyAgICAgKiBAcGFy
YW0gcHJvZ3Jlc3NDYWxsYmFjayBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIGR1cmluZyBs
b2FkaW5nIHByb2Nlc3MKKyAgICAgKiBAcmV0dXJucyBhIGZpbGUgcmVxdWVzdCBvYmplY3QKKyAg
ICAgKi8KKyAgICBUb29scy5SZWFkRmlsZUFzRGF0YVVSTCA9IGZ1bmN0aW9uIChmaWxlVG9Mb2Fk
LCBjYWxsYmFjaywgcHJvZ3Jlc3NDYWxsYmFjaykgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3
IEZpbGVSZWFkZXIoKTsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSB7CisgICAgICAgICAgICBvbkNv
bXBsZXRlT2JzZXJ2YWJsZTogbmV3IF9vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIk9ic2VydmFibGUiXSgpLAorICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHsg
cmV0dXJuIHJlYWRlci5hYm9ydCgpOyB9LAorICAgICAgICB9OworICAgICAgICByZWFkZXIub25s
b2FkZW5kID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHJlcXVlc3Qub25Db21wbGV0ZU9i
c2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHJlcXVlc3QpOworICAgICAgICB9OworICAgICAgICBy
ZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIC8vdGFyZ2V0IGRvZXNu
J3QgaGF2ZSByZXN1bHQgZnJvbSB0cyAxLjMKKyAgICAgICAgICAgIGNhbGxiYWNrKGUudGFyZ2V0
WydyZXN1bHQnXSk7CisgICAgICAgIH07CisgICAgICAgIHJlYWRlci5vbnByb2dyZXNzID0gcHJv
Z3Jlc3NDYWxsYmFjazsKKyAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZVRvTG9hZCk7
CisgICAgICAgIHJldHVybiByZXF1ZXN0OworICAgIH07CisgICAgLyoqCisgICAgICogTG9hZHMg
YSBmaWxlCisgICAgICogQHBhcmFtIGZpbGVUb0xvYWQgZGVmaW5lcyB0aGUgZmlsZSB0byBsb2Fk
CisgICAgICogQHBhcmFtIGNhbGxiYWNrIGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hl
biBkYXRhIGlzIGxvYWRlZAorICAgICAqIEBwYXJhbSBwcm9ncmVzc0NhbGxCYWNrIGRlZmluZXMg
dGhlIGNhbGxiYWNrIHRvIGNhbGwgZHVyaW5nIGxvYWRpbmcgcHJvY2VzcworICAgICAqIEBwYXJh
bSB1c2VBcnJheUJ1ZmZlciBkZWZpbmVzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgZGF0YSBt
dXN0IGJlIHJldHVybmVkIGFzIGFuIEFycmF5QnVmZmVyCisgICAgICogQHJldHVybnMgYSBmaWxl
IHJlcXVlc3Qgb2JqZWN0CisgICAgICovCisgICAgVG9vbHMuUmVhZEZpbGUgPSBmdW5jdGlvbiAo
ZmlsZVRvTG9hZCwgY2FsbGJhY2ssIHByb2dyZXNzQ2FsbEJhY2ssIHVzZUFycmF5QnVmZmVyKSB7
CisgICAgICAgIHJldHVybiBfZmlsZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IkZpbGVUb29scyJdLlJlYWRGaWxlKGZpbGVUb0xvYWQsIGNhbGxiYWNrLCBwcm9ncmVzc0NhbGxC
YWNrLCB1c2VBcnJheUJ1ZmZlcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEg
ZGF0YSB1cmwgZnJvbSBhIGdpdmVuIHN0cmluZyBjb250ZW50CisgICAgICogQHBhcmFtIGNvbnRl
bnQgZGVmaW5lcyB0aGUgY29udGVudCB0byBjb252ZXJ0CisgICAgICogQHJldHVybnMgdGhlIG5l
dyBkYXRhIHVybCBsaW5rCisgICAgICovCisgICAgVG9vbHMuRmlsZUFzVVJMID0gZnVuY3Rpb24g
KGNvbnRlbnQpIHsKKyAgICAgICAgdmFyIGZpbGVCbG9iID0gbmV3IEJsb2IoW2NvbnRlbnRdKTsK
KyAgICAgICAgdmFyIHVybCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDsKKyAgICAg
ICAgdmFyIGxpbmsgPSB1cmwuY3JlYXRlT2JqZWN0VVJMKGZpbGVCbG9iKTsKKyAgICAgICAgcmV0
dXJuIGxpbms7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JtYXQgdGhlIGdpdmVuIG51bWJl
ciB0byBhIHNwZWNpZmljIGRlY2ltYWwgZm9ybWF0CisgICAgICogQHBhcmFtIHZhbHVlIGRlZmlu
ZXMgdGhlIG51bWJlciB0byBmb3JtYXQKKyAgICAgKiBAcGFyYW0gZGVjaW1hbHMgZGVmaW5lcyB0
aGUgbnVtYmVyIG9mIGRlY2ltYWxzIHRvIHVzZQorICAgICAqIEByZXR1cm5zIHRoZSBmb3JtYXR0
ZWQgc3RyaW5nCisgICAgICovCisgICAgVG9vbHMuRm9ybWF0ID0gZnVuY3Rpb24gKHZhbHVlLCBk
ZWNpbWFscykgeworICAgICAgICBpZiAoZGVjaW1hbHMgPT09IHZvaWQgMCkgeyBkZWNpbWFscyA9
IDI7IH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoZGVjaW1hbHMpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogVHJpZXMgdG8gY29weSBhbiBvYmplY3QgYnkgZHVwbGljYXRpbmcgZXZl
cnkgcHJvcGVydHkKKyAgICAgKiBAcGFyYW0gc291cmNlIGRlZmluZXMgdGhlIHNvdXJjZSBvYmpl
Y3QKKyAgICAgKiBAcGFyYW0gZGVzdGluYXRpb24gZGVmaW5lcyB0aGUgdGFyZ2V0IG9iamVjdAor
ICAgICAqIEBwYXJhbSBkb05vdENvcHlMaXN0IGRlZmluZXMgYSBsaXN0IG9mIHByb3BlcnRpZXMg
dG8gYXZvaWQKKyAgICAgKiBAcGFyYW0gbXVzdENvcHlMaXN0IGRlZmluZXMgYSBsaXN0IG9mIHBy
b3BlcnRpZXMgdG8gY29weSAoZXZlbiBpZiB0aGV5IHN0YXJ0IHdpdGggXykKKyAgICAgKi8KKyAg
ICBUb29scy5EZWVwQ29weSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3RpbmF0aW9uLCBkb05vdENv
cHlMaXN0LCBtdXN0Q29weUxpc3QpIHsKKyAgICAgICAgX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHNvdXJjZSwgZGVzdGluYXRp
b24sIGRvTm90Q29weUxpc3QsIG11c3RDb3B5TGlzdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIG5vIG93
biBwcm9wZXJ0eQorICAgICAqIEBwYXJhbSBvYmogZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHRlc3QK
KyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIG9iamVjdCBoYXMgbm8gb3duIHByb3BlcnR5CisgICAg
ICovCisgICAgVG9vbHMuSXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHsKKyAgICAgICAgZm9yICh2
YXIgaSBpbiBvYmopIHsKKyAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaSkpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB1
c2VkIHRvIHJlZ2lzdGVyIGV2ZW50cyBhdCB3aW5kb3cgbGV2ZWwKKyAgICAgKiBAcGFyYW0gd2lu
ZG93RWxlbWVudCBkZWZpbmVzIHRoZSBXaW5kb3cgb2JqZWN0IHRvIHVzZQorICAgICAqIEBwYXJh
bSBldmVudHMgZGVmaW5lcyB0aGUgZXZlbnRzIHRvIHJlZ2lzdGVyCisgICAgICovCisgICAgVG9v
bHMuUmVnaXN0ZXJUb3BSb290RXZlbnRzID0gZnVuY3Rpb24gKHdpbmRvd0VsZW1lbnQsIGV2ZW50
cykgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZXZlbnRzLmxlbmd0aDsg
aW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2luZGV4XTsKKyAgICAg
ICAgICAgIHdpbmRvd0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudC5uYW1lLCBldmVudC5o
YW5kbGVyLCBmYWxzZSk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGlmICh3
aW5kb3cucGFyZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQuYWRkRXZl
bnRMaXN0ZW5lcihldmVudC5uYW1lLCBldmVudC5oYW5kbGVyLCBmYWxzZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgICAgICAvLyBTaWxlbnRseSBmYWlscy4uLgorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIHVucmVnaXN0ZXIgZXZlbnRz
IGZyb20gd2luZG93IGxldmVsCisgICAgICogQHBhcmFtIHdpbmRvd0VsZW1lbnQgZGVmaW5lcyB0
aGUgV2luZG93IG9iamVjdCB0byB1c2UKKyAgICAgKiBAcGFyYW0gZXZlbnRzIGRlZmluZXMgdGhl
IGV2ZW50cyB0byB1bnJlZ2lzdGVyCisgICAgICovCisgICAgVG9vbHMuVW5yZWdpc3RlclRvcFJv
b3RFdmVudHMgPSBmdW5jdGlvbiAod2luZG93RWxlbWVudCwgZXZlbnRzKSB7CisgICAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBldmVudHMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAg
ICAgICAgICB2YXIgZXZlbnQgPSBldmVudHNbaW5kZXhdOworICAgICAgICAgICAgd2luZG93RWxl
bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50Lm5hbWUsIGV2ZW50LmhhbmRsZXIpOworICAg
ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93RWxlbWVudC5wYXJlbnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgd2luZG93RWxlbWVudC5wYXJlbnQucmVtb3ZlRXZlbnRM
aXN0ZW5lcihldmVudC5uYW1lLCBldmVudC5oYW5kbGVyKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIC8v
IFNpbGVudGx5IGZhaWxzLi4uCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIER1bXBzIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1lYnVmZmVyCisgICAgICog
QHBhcmFtIHdpZHRoIGRlZmluZXMgdGhlIHJlbmRlcmluZyB3aWR0aAorICAgICAqIEBwYXJhbSBo
ZWlnaHQgZGVmaW5lcyB0aGUgcmVuZGVyaW5nIGhlaWdodAorICAgICAqIEBwYXJhbSBlbmdpbmUg
ZGVmaW5lcyB0aGUgaG9zdGluZyBlbmdpbmUKKyAgICAgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNr
IGRlZmluZXMgdGhlIGNhbGxiYWNrIHRyaWdnZXJlZCBvbmNlIHRoZSBkYXRhIGFyZSBhdmFpbGFi
bGUKKyAgICAgKiBAcGFyYW0gbWltZVR5cGUgZGVmaW5lcyB0aGUgbWltZSB0eXBlIG9mIHRoZSBy
ZXN1bHQKKyAgICAgKiBAcGFyYW0gZmlsZU5hbWUgZGVmaW5lcyB0aGUgZmlsZW5hbWUgdG8gZG93
bmxvYWQuIElmIHByZXNlbnQsIHRoZSByZXN1bHQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGRvd25s
b2FkZWQKKyAgICAgKi8KKyAgICBUb29scy5EdW1wRnJhbWVidWZmZXIgPSBmdW5jdGlvbiAod2lk
dGgsIGhlaWdodCwgZW5naW5lLCBzdWNjZXNzQ2FsbGJhY2ssIG1pbWVUeXBlLCBmaWxlTmFtZSkg
eworICAgICAgICBpZiAobWltZVR5cGUgPT09IHZvaWQgMCkgeyBtaW1lVHlwZSA9ICJpbWFnZS9w
bmciOyB9CisgICAgICAgIC8vIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmcmFtZWJ1ZmZlcgor
ICAgICAgICB2YXIgbnVtYmVyT2ZDaGFubmVsc0J5TGluZSA9IHdpZHRoICogNDsKKyAgICAgICAg
dmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyOworICAgICAgICAvL1JlYWRpbmcgZGF0YXMgZnJv
bSBXZWJHTAorICAgICAgICB2YXIgZGF0YSA9IGVuZ2luZS5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICAvL1RvIGZsaXAgaW1hZ2Ugb24gWSBheGlzLgorICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGhhbGZIZWlnaHQ7IGkrKykgeworICAgICAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCBudW1iZXJPZkNoYW5uZWxzQnlMaW5lOyBqKyspIHsKKyAgICAgICAgICAg
ICAgICB2YXIgY3VycmVudENlbGwgPSBqICsgaSAqIG51bWJlck9mQ2hhbm5lbHNCeUxpbmU7Cisg
ICAgICAgICAgICAgICAgdmFyIHRhcmdldExpbmUgPSBoZWlnaHQgLSBpIC0gMTsKKyAgICAgICAg
ICAgICAgICB2YXIgdGFyZ2V0Q2VsbCA9IGogKyB0YXJnZXRMaW5lICogbnVtYmVyT2ZDaGFubmVs
c0J5TGluZTsKKyAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IGRhdGFbY3VycmVudENlbGxdOwor
ICAgICAgICAgICAgICAgIGRhdGFbY3VycmVudENlbGxdID0gZGF0YVt0YXJnZXRDZWxsXTsKKyAg
ICAgICAgICAgICAgICBkYXRhW3RhcmdldENlbGxdID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAvLyBDcmVhdGUgYSAyRCBjYW52YXMgdG8gc3RvcmUgdGhlIHJlc3Vs
dAorICAgICAgICBpZiAoIVRvb2xzLl9TY3JlZW5zaG90Q2FudmFzKSB7CisgICAgICAgICAgICBU
b29scy5fU2NyZWVuc2hvdENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycp
OworICAgICAgICB9CisgICAgICAgIFRvb2xzLl9TY3JlZW5zaG90Q2FudmFzLndpZHRoID0gd2lk
dGg7CisgICAgICAgIFRvb2xzLl9TY3JlZW5zaG90Q2FudmFzLmhlaWdodCA9IGhlaWdodDsKKyAg
ICAgICAgdmFyIGNvbnRleHQgPSBUb29scy5fU2NyZWVuc2hvdENhbnZhcy5nZXRDb250ZXh0KCcy
ZCcpOworICAgICAgICBpZiAoY29udGV4dCkgeworICAgICAgICAgICAgLy8gQ29weSB0aGUgcGl4
ZWxzIHRvIGEgMkQgY2FudmFzCisgICAgICAgICAgICB2YXIgaW1hZ2VEYXRhID0gY29udGV4dC5j
cmVhdGVJbWFnZURhdGEod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICB2YXIgY2FzdERhdGEg
PSAoaW1hZ2VEYXRhLmRhdGEpOworICAgICAgICAgICAgY2FzdERhdGEuc2V0KGRhdGEpOworICAg
ICAgICAgICAgY29udGV4dC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTsKKyAgICAgICAg
ICAgIFRvb2xzLkVuY29kZVNjcmVlbnNob3RDYW52YXNEYXRhKHN1Y2Nlc3NDYWxsYmFjaywgbWlt
ZVR5cGUsIGZpbGVOYW1lKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ29u
dmVydHMgdGhlIGNhbnZhcyBkYXRhIHRvIGJsb2IuCisgICAgICogVGhpcyBhY3RzIGFzIGEgcG9s
eWZpbGwgZm9yIGJyb3dzZXJzIG5vdCBzdXBwb3J0aW5nIHRoZSB0byBibG9iIGZ1bmN0aW9uLgor
ICAgICAqIEBwYXJhbSBjYW52YXMgRGVmaW5lcyB0aGUgY2FudmFzIHRvIGV4dHJhY3QgdGhlIGRh
dGEgZnJvbQorICAgICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgRGVmaW5lcyB0aGUgY2FsbGJh
Y2sgdHJpZ2dlcmVkIG9uY2UgdGhlIGRhdGEgYXJlIGF2YWlsYWJsZQorICAgICAqIEBwYXJhbSBt
aW1lVHlwZSBEZWZpbmVzIHRoZSBtaW1lIHR5cGUgb2YgdGhlIHJlc3VsdAorICAgICAqLworICAg
IFRvb2xzLlRvQmxvYiA9IGZ1bmN0aW9uIChjYW52YXMsIHN1Y2Nlc3NDYWxsYmFjaywgbWltZVR5
cGUpIHsKKyAgICAgICAgaWYgKG1pbWVUeXBlID09PSB2b2lkIDApIHsgbWltZVR5cGUgPSAiaW1h
Z2UvcG5nIjsgfQorICAgICAgICAvLyBXZSBuZWVkIEhUTUxDYW52YXNFbGVtZW50LnRvQmxvYiBm
b3IgSEQgc2NyZWVuc2hvdHMKKyAgICAgICAgaWYgKCFjYW52YXMudG9CbG9iKSB7CisgICAgICAg
ICAgICAvLyAgbG93IHBlcmZvcm1hbmNlIHBvbHlmaWxsIGJhc2VkIG9uIHRvRGF0YVVSTCAoaHR0
cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxDYW52YXNF
bGVtZW50L3RvQmxvYikKKyAgICAgICAgICAgIGNhbnZhcy50b0Jsb2IgPSBmdW5jdGlvbiAoY2Fs
bGJhY2ssIHR5cGUsIHF1YWxpdHkpIHsKKyAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlz
OworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgYmluU3RyID0gYXRvYihfdGhpcy50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSku
c3BsaXQoJywnKVsxXSksIGxlbiA9IGJpblN0ci5sZW5ndGgsIGFyciA9IG5ldyBVaW50OEFycmF5
KGxlbik7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycltpXSA9IGJpblN0ci5jaGFyQ29kZUF0KGkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5l
dyBCbG9iKFthcnJdKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9OworICAg
ICAgICB9CisgICAgICAgIGNhbnZhcy50b0Jsb2IoZnVuY3Rpb24gKGJsb2IpIHsKKyAgICAgICAg
ICAgIHN1Y2Nlc3NDYWxsYmFjayhibG9iKTsKKyAgICAgICAgfSwgbWltZVR5cGUpOworICAgIH07
CisgICAgLyoqCisgICAgICogRW5jb2RlcyB0aGUgY2FudmFzIGRhdGEgdG8gYmFzZSA2NCBvciBh
dXRvbWF0aWNhbGx5IGRvd25sb2FkIHRoZSByZXN1bHQgaWYgZmlsZW5hbWUgaXMgZGVmaW5lZAor
ICAgICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdHJpZ2dl
cmVkIG9uY2UgdGhlIGRhdGEgYXJlIGF2YWlsYWJsZQorICAgICAqIEBwYXJhbSBtaW1lVHlwZSBk
ZWZpbmVzIHRoZSBtaW1lIHR5cGUgb2YgdGhlIHJlc3VsdAorICAgICAqIEBwYXJhbSBmaWxlTmFt
ZSBkZWZpbmVzIGhlIGZpbGVuYW1lIHRvIGRvd25sb2FkLiBJZiBwcmVzZW50LCB0aGUgcmVzdWx0
IHdpbGwgYXV0b21hdGljYWxseSBiZSBkb3dubG9hZGVkCisgICAgICovCisgICAgVG9vbHMuRW5j
b2RlU2NyZWVuc2hvdENhbnZhc0RhdGEgPSBmdW5jdGlvbiAoc3VjY2Vzc0NhbGxiYWNrLCBtaW1l
VHlwZSwgZmlsZU5hbWUpIHsKKyAgICAgICAgaWYgKG1pbWVUeXBlID09PSB2b2lkIDApIHsgbWlt
ZVR5cGUgPSAiaW1hZ2UvcG5nIjsgfQorICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7Cisg
ICAgICAgICAgICB2YXIgYmFzZTY0SW1hZ2UgPSBUb29scy5fU2NyZWVuc2hvdENhbnZhcy50b0Rh
dGFVUkwobWltZVR5cGUpOworICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGJhc2U2NEltYWdl
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuVG9CbG9iKFRv
b2xzLl9TY3JlZW5zaG90Q2FudmFzLCBmdW5jdGlvbiAoYmxvYikgeworICAgICAgICAgICAgICAg
IC8vQ3JlYXRpbmcgYSBsaW5rIGlmIHRoZSBicm93c2VyIGhhdmUgdGhlIGRvd25sb2FkIGF0dHJp
YnV0ZSBvbiB0aGUgYSB0YWcsIHRvIGF1dG9tYXRpY2FsbHkgc3RhcnQgZG93bmxvYWQgZ2VuZXJh
dGVkIGltYWdlLgorICAgICAgICAgICAgICAgIGlmICgoImRvd25sb2FkIiBpbiBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJhIikpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBzdHJpbmdEYXRlID0gKGRhdGUuZ2V0RnVsbFllYXIoKSAr
ICItIiArIChkYXRlLmdldE1vbnRoKCkgKyAxKSkuc2xpY2UoMikgKyAiLSIgKyBkYXRlLmdldERh
dGUoKSArICJfIiArIGRhdGUuZ2V0SG91cnMoKSArICItIiArICgnMCcgKyBkYXRlLmdldE1pbnV0
ZXMoKSkuc2xpY2UoLTIpOworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSAic2Ny
ZWVuc2hvdF8iICsgc3RyaW5nRGF0ZSArICIucG5nIjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBUb29scy5Eb3dubG9hZChibG9iLCBmaWxlTmFtZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIG5ld1dpbmRvdyA9IHdpbmRvdy5vcGVuKCIiKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFuZXdXaW5kb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YXIgaW1nID0gbmV3V2luZG93
LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOworICAgICAgICAgICAgICAgICAgICBpbWcu
b25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gbG9u
Z2VyIG5lZWQgdG8gcmVhZCB0aGUgYmxvYiBzbyBpdCdzIHJldm9rZWQKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKKyAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IHVybDsKKyAgICAgICAgICAgICAgICAg
ICAgbmV3V2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9LCBtaW1lVHlwZSk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIERvd25sb2FkcyBhIGJsb2IgaW4gdGhlIGJyb3dzZXIKKyAgICAgKiBAcGFy
YW0gYmxvYiBkZWZpbmVzIHRoZSBibG9iIHRvIGRvd25sb2FkCisgICAgICogQHBhcmFtIGZpbGVO
YW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGRvd25sb2FkZWQgZmlsZQorICAgICAqLworICAg
IFRvb2xzLkRvd25sb2FkID0gZnVuY3Rpb24gKGJsb2IsIGZpbGVOYW1lKSB7CisgICAgICAgIGlm
IChuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLm1zU2F2ZUJsb2IpIHsKKyAgICAgICAgICAgIG5hdmln
YXRvci5tc1NhdmVCbG9iKGJsb2IsIGZpbGVOYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxv
Yik7CisgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICAgICAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOworICAgICAgICBhLnN0eWxlLmRpc3BsYXkg
PSAibm9uZSI7CisgICAgICAgIGEuaHJlZiA9IHVybDsKKyAgICAgICAgYS5kb3dubG9hZCA9IGZp
bGVOYW1lOworICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgaWYgKGEucGFyZW50RWxlbWVudCkgeworICAgICAgICAgICAgICAgIGEu
cGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisgICAgICAgIGEuY2xpY2soKTsKKyAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwo
dXJsKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhcHR1cmVzIGEgc2NyZWVuc2hvdCBvZiB0
aGUgY3VycmVudCByZW5kZXJpbmcKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNv
bS9ob3dfdG8vcmVuZGVyX3NjZW5lX29uX2FfcG5nCisgICAgICogQHBhcmFtIGVuZ2luZSBkZWZp
bmVzIHRoZSByZW5kZXJpbmcgZW5naW5lCisgICAgICogQHBhcmFtIGNhbWVyYSBkZWZpbmVzIHRo
ZSBzb3VyY2UgY2FtZXJhCisgICAgICogQHBhcmFtIHNpemUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJl
IHNldCB0byBhIHNpbmdsZSBudW1iZXIgb3IgdG8gYW4gb2JqZWN0IHdpdGggdGhlCisgICAgICog
Zm9sbG93aW5nIChvcHRpb25hbCkgcHJvcGVydGllczogcHJlY2lzaW9uLCB3aWR0aCwgaGVpZ2h0
LiBJZiBhIHNpbmdsZSBudW1iZXIgaXMgcGFzc2VkLAorICAgICAqIGl0IHdpbGwgYmUgdXNlZCBm
b3IgYm90aCB3aWR0aCBhbmQgaGVpZ2h0LiBJZiBhbiBvYmplY3QgaXMgcGFzc2VkLCB0aGUgc2Ny
ZWVuc2hvdCBzaXplCisgICAgICogd2lsbCBiZSBkZXJpdmVkIGZyb20gdGhlIHBhcmFtZXRlcnMu
IFRoZSBwcmVjaXNpb24gcHJvcGVydHkgaXMgYSBtdWx0aXBsaWVyIGFsbG93aW5nCisgICAgICog
cmVuZGVyaW5nIGF0IGEgaGlnaGVyIG9yIGxvd2VyIHJlc29sdXRpb24KKyAgICAgKiBAcGFyYW0g
c3VjY2Vzc0NhbGxiYWNrIGRlZmluZXMgdGhlIGNhbGxiYWNrIHJlY2VpdmVzIGEgc2luZ2xlIHBh
cmFtZXRlciB3aGljaCBjb250YWlucyB0aGUKKyAgICAgKiBzY3JlZW5zaG90IGFzIGEgc3RyaW5n
IG9mIGJhc2U2NC1lbmNvZGVkIGNoYXJhY3RlcnMuIFRoaXMgc3RyaW5nIGNhbiBiZSBhc3NpZ25l
ZCB0byB0aGUKKyAgICAgKiBzcmMgcGFyYW1ldGVyIG9mIGFuIDxpbWc+IHRvIGRpc3BsYXkgaXQK
KyAgICAgKiBAcGFyYW0gbWltZVR5cGUgZGVmaW5lcyB0aGUgTUlNRSB0eXBlIG9mIHRoZSBzY3Jl
ZW5zaG90IGltYWdlIChkZWZhdWx0OiBpbWFnZS9wbmcpLgorICAgICAqIENoZWNrIHlvdXIgYnJv
d3NlciBmb3Igc3VwcG9ydGVkIE1JTUUgdHlwZXMKKyAgICAgKi8KKyAgICBUb29scy5DcmVhdGVT
Y3JlZW5zaG90ID0gZnVuY3Rpb24gKGVuZ2luZSwgY2FtZXJhLCBzaXplLCBzdWNjZXNzQ2FsbGJh
Y2ssIG1pbWVUeXBlKSB7CisgICAgICAgIGlmIChtaW1lVHlwZSA9PT0gdm9pZCAwKSB7IG1pbWVU
eXBlID0gImltYWdlL3BuZyI7IH0KKyAgICAgICAgdGhyb3cgX2RldlRvb2xzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIlNjcmVlbnNob3RUb29s
cyIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ2FwdHVyZXMgYSBzY3JlZW5zaG90IG9mIHRo
ZSBjdXJyZW50IHJlbmRlcmluZworICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9yZW5kZXJfc2NlbmVfb25fYV9wbmcKKyAgICAgKiBAcGFyYW0gZW5naW5lIGRlZmlu
ZXMgdGhlIHJlbmRlcmluZyBlbmdpbmUKKyAgICAgKiBAcGFyYW0gY2FtZXJhIGRlZmluZXMgdGhl
IHNvdXJjZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gc2l6ZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUg
c2V0IHRvIGEgc2luZ2xlIG51bWJlciBvciB0byBhbiBvYmplY3Qgd2l0aCB0aGUKKyAgICAgKiBm
b2xsb3dpbmcgKG9wdGlvbmFsKSBwcm9wZXJ0aWVzOiBwcmVjaXNpb24sIHdpZHRoLCBoZWlnaHQu
IElmIGEgc2luZ2xlIG51bWJlciBpcyBwYXNzZWQsCisgICAgICogaXQgd2lsbCBiZSB1c2VkIGZv
ciBib3RoIHdpZHRoIGFuZCBoZWlnaHQuIElmIGFuIG9iamVjdCBpcyBwYXNzZWQsIHRoZSBzY3Jl
ZW5zaG90IHNpemUKKyAgICAgKiB3aWxsIGJlIGRlcml2ZWQgZnJvbSB0aGUgcGFyYW1ldGVycy4g
VGhlIHByZWNpc2lvbiBwcm9wZXJ0eSBpcyBhIG11bHRpcGxpZXIgYWxsb3dpbmcKKyAgICAgKiBy
ZW5kZXJpbmcgYXQgYSBoaWdoZXIgb3IgbG93ZXIgcmVzb2x1dGlvbgorICAgICAqIEBwYXJhbSBt
aW1lVHlwZSBkZWZpbmVzIHRoZSBNSU1FIHR5cGUgb2YgdGhlIHNjcmVlbnNob3QgaW1hZ2UgKGRl
ZmF1bHQ6IGltYWdlL3BuZykuCisgICAgICogQ2hlY2sgeW91ciBicm93c2VyIGZvciBzdXBwb3J0
ZWQgTUlNRSB0eXBlcworICAgICAqIEByZXR1cm5zIHNjcmVlbnNob3QgYXMgYSBzdHJpbmcgb2Yg
YmFzZTY0LWVuY29kZWQgY2hhcmFjdGVycy4gVGhpcyBzdHJpbmcgY2FuIGJlIGFzc2lnbmVkCisg
ICAgICogdG8gdGhlIHNyYyBwYXJhbWV0ZXIgb2YgYW4gPGltZz4gdG8gZGlzcGxheSBpdAorICAg
ICAqLworICAgIFRvb2xzLkNyZWF0ZVNjcmVlbnNob3RBc3luYyA9IGZ1bmN0aW9uIChlbmdpbmUs
IGNhbWVyYSwgc2l6ZSwgbWltZVR5cGUpIHsKKyAgICAgICAgaWYgKG1pbWVUeXBlID09PSB2b2lk
IDApIHsgbWltZVR5cGUgPSAiaW1hZ2UvcG5nIjsgfQorICAgICAgICB0aHJvdyBfZGV2VG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiU2Ny
ZWVuc2hvdFRvb2xzIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZXMgYW4gaW1h
Z2Ugc2NyZWVuc2hvdCBmcm9tIHRoZSBzcGVjaWZpZWQgY2FtZXJhLgorICAgICAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9yZW5kZXJfc2NlbmVfb25fYV9wbmcKKyAgICAg
KiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgdG8gdXNlIGZvciByZW5kZXJpbmcKKyAgICAgKiBA
cGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gdXNlIGZvciByZW5kZXJpbmcKKyAgICAgKiBAcGFy
YW0gc2l6ZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRvIGEgc2luZ2xlIG51bWJlciBvciB0
byBhbiBvYmplY3Qgd2l0aCB0aGUKKyAgICAgKiBmb2xsb3dpbmcgKG9wdGlvbmFsKSBwcm9wZXJ0
aWVzOiBwcmVjaXNpb24sIHdpZHRoLCBoZWlnaHQuIElmIGEgc2luZ2xlIG51bWJlciBpcyBwYXNz
ZWQsCisgICAgICogaXQgd2lsbCBiZSB1c2VkIGZvciBib3RoIHdpZHRoIGFuZCBoZWlnaHQuIElm
IGFuIG9iamVjdCBpcyBwYXNzZWQsIHRoZSBzY3JlZW5zaG90IHNpemUKKyAgICAgKiB3aWxsIGJl
IGRlcml2ZWQgZnJvbSB0aGUgcGFyYW1ldGVycy4gVGhlIHByZWNpc2lvbiBwcm9wZXJ0eSBpcyBh
IG11bHRpcGxpZXIgYWxsb3dpbmcKKyAgICAgKiByZW5kZXJpbmcgYXQgYSBoaWdoZXIgb3IgbG93
ZXIgcmVzb2x1dGlvbgorICAgICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgVGhlIGNhbGxiYWNr
IHJlY2VpdmVzIGEgc2luZ2xlIHBhcmFtZXRlciB3aGljaCBjb250YWlucyB0aGUKKyAgICAgKiBz
Y3JlZW5zaG90IGFzIGEgc3RyaW5nIG9mIGJhc2U2NC1lbmNvZGVkIGNoYXJhY3RlcnMuIFRoaXMg
c3RyaW5nIGNhbiBiZSBhc3NpZ25lZCB0byB0aGUKKyAgICAgKiBzcmMgcGFyYW1ldGVyIG9mIGFu
IDxpbWc+IHRvIGRpc3BsYXkgaXQKKyAgICAgKiBAcGFyYW0gbWltZVR5cGUgVGhlIE1JTUUgdHlw
ZSBvZiB0aGUgc2NyZWVuc2hvdCBpbWFnZSAoZGVmYXVsdDogaW1hZ2UvcG5nKS4KKyAgICAgKiBD
aGVjayB5b3VyIGJyb3dzZXIgZm9yIHN1cHBvcnRlZCBNSU1FIHR5cGVzCisgICAgICogQHBhcmFt
IHNhbXBsZXMgVGV4dHVyZSBzYW1wbGVzIChkZWZhdWx0OiAxKQorICAgICAqIEBwYXJhbSBhbnRp
YWxpYXNpbmcgV2hldGhlciBhbnRpYWxpYXNpbmcgc2hvdWxkIGJlIHR1cm5lZCBvbiBvciBub3Qg
KGRlZmF1bHQ6IGZhbHNlKQorICAgICAqIEBwYXJhbSBmaWxlTmFtZSBBIG5hbWUgZm9yIGZvciB0
aGUgZG93bmxvYWRlZCBmaWxlLgorICAgICAqLworICAgIFRvb2xzLkNyZWF0ZVNjcmVlbnNob3RV
c2luZ1JlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChlbmdpbmUsIGNhbWVyYSwgc2l6ZSwgc3VjY2Vz
c0NhbGxiYWNrLCBtaW1lVHlwZSwgc2FtcGxlcywgYW50aWFsaWFzaW5nLCBmaWxlTmFtZSkgewor
ICAgICAgICBpZiAobWltZVR5cGUgPT09IHZvaWQgMCkgeyBtaW1lVHlwZSA9ICJpbWFnZS9wbmci
OyB9CisgICAgICAgIGlmIChzYW1wbGVzID09PSB2b2lkIDApIHsgc2FtcGxlcyA9IDE7IH0KKyAg
ICAgICAgaWYgKGFudGlhbGlhc2luZyA9PT0gdm9pZCAwKSB7IGFudGlhbGlhc2luZyA9IGZhbHNl
OyB9CisgICAgICAgIHRocm93IF9kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJTY3JlZW5zaG90VG9vbHMiKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdlbmVyYXRlcyBhbiBpbWFnZSBzY3JlZW5zaG90IGZyb20gdGhlIHNwZWNp
ZmllZCBjYW1lcmEuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3Rv
L3JlbmRlcl9zY2VuZV9vbl9hX3BuZworICAgICAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB0
byB1c2UgZm9yIHJlbmRlcmluZworICAgICAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0byB1
c2UgZm9yIHJlbmRlcmluZworICAgICAqIEBwYXJhbSBzaXplIFRoaXMgcGFyYW1ldGVyIGNhbiBi
ZSBzZXQgdG8gYSBzaW5nbGUgbnVtYmVyIG9yIHRvIGFuIG9iamVjdCB3aXRoIHRoZQorICAgICAq
IGZvbGxvd2luZyAob3B0aW9uYWwpIHByb3BlcnRpZXM6IHByZWNpc2lvbiwgd2lkdGgsIGhlaWdo
dC4gSWYgYSBzaW5nbGUgbnVtYmVyIGlzIHBhc3NlZCwKKyAgICAgKiBpdCB3aWxsIGJlIHVzZWQg
Zm9yIGJvdGggd2lkdGggYW5kIGhlaWdodC4gSWYgYW4gb2JqZWN0IGlzIHBhc3NlZCwgdGhlIHNj
cmVlbnNob3Qgc2l6ZQorICAgICAqIHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBwYXJhbWV0ZXJz
LiBUaGUgcHJlY2lzaW9uIHByb3BlcnR5IGlzIGEgbXVsdGlwbGllciBhbGxvd2luZworICAgICAq
IHJlbmRlcmluZyBhdCBhIGhpZ2hlciBvciBsb3dlciByZXNvbHV0aW9uCisgICAgICogQHBhcmFt
IG1pbWVUeXBlIFRoZSBNSU1FIHR5cGUgb2YgdGhlIHNjcmVlbnNob3QgaW1hZ2UgKGRlZmF1bHQ6
IGltYWdlL3BuZykuCisgICAgICogQ2hlY2sgeW91ciBicm93c2VyIGZvciBzdXBwb3J0ZWQgTUlN
RSB0eXBlcworICAgICAqIEBwYXJhbSBzYW1wbGVzIFRleHR1cmUgc2FtcGxlcyAoZGVmYXVsdDog
MSkKKyAgICAgKiBAcGFyYW0gYW50aWFsaWFzaW5nIFdoZXRoZXIgYW50aWFsaWFzaW5nIHNob3Vs
ZCBiZSB0dXJuZWQgb24gb3Igbm90IChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKiBAcGFyYW0gZmls
ZU5hbWUgQSBuYW1lIGZvciBmb3IgdGhlIGRvd25sb2FkZWQgZmlsZS4KKyAgICAgKiBAcmV0dXJu
cyBzY3JlZW5zaG90IGFzIGEgc3RyaW5nIG9mIGJhc2U2NC1lbmNvZGVkIGNoYXJhY3RlcnMuIFRo
aXMgc3RyaW5nIGNhbiBiZSBhc3NpZ25lZAorICAgICAqIHRvIHRoZSBzcmMgcGFyYW1ldGVyIG9m
IGFuIDxpbWc+IHRvIGRpc3BsYXkgaXQKKyAgICAgKi8KKyAgICBUb29scy5DcmVhdGVTY3JlZW5z
aG90VXNpbmdSZW5kZXJUYXJnZXRBc3luYyA9IGZ1bmN0aW9uIChlbmdpbmUsIGNhbWVyYSwgc2l6
ZSwgbWltZVR5cGUsIHNhbXBsZXMsIGFudGlhbGlhc2luZywgZmlsZU5hbWUpIHsKKyAgICAgICAg
aWYgKG1pbWVUeXBlID09PSB2b2lkIDApIHsgbWltZVR5cGUgPSAiaW1hZ2UvcG5nIjsgfQorICAg
ICAgICBpZiAoc2FtcGxlcyA9PT0gdm9pZCAwKSB7IHNhbXBsZXMgPSAxOyB9CisgICAgICAgIGlm
IChhbnRpYWxpYXNpbmcgPT09IHZvaWQgMCkgeyBhbnRpYWxpYXNpbmcgPSBmYWxzZTsgfQorICAg
ICAgICB0aHJvdyBfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siX0RldlRv
b2xzIl0uV2FybkltcG9ydCgiU2NyZWVuc2hvdFRvb2xzIik7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBJbXBsZW1lbnRhdGlvbiBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlv
bnMvMTA1MDM0L2hvdy10by1jcmVhdGUtYS1ndWlkLXV1aWQtaW4tamF2YXNjcmlwdC8yMTE3NTIz
I2Fuc3dlci0yMTE3NTIzCisgICAgICogQmUgYXdhcmUgTWF0aC5yYW5kb20oKSBjb3VsZCBjYXVz
ZSBjb2xsaXNpb25zLCBidXQ6CisgICAgICogIkFsbCBidXQgNiBvZiB0aGUgMTI4IGJpdHMgb2Yg
dGhlIElEIGFyZSByYW5kb21seSBnZW5lcmF0ZWQsIHdoaWNoIG1lYW5zIHRoYXQgZm9yIGFueSB0
d28gaWRzLCB0aGVyZSdzIGEgMSBpbiAyXl4xMjIgKG9yIDUuM3gxMF5eMzYpIGNoYW5jZSB0aGV5
J2xsIGNvbGxpZGUiCisgICAgICogQHJldHVybnMgYSBwc2V1ZG8gcmFuZG9tIGlkCisgICAgICov
CisgICAgVG9vbHMuUmFuZG9tSWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfZ3Vp
ZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siR1VJRCJdLlJhbmRvbUlkKCk7CisgICAg
fTsKKyAgICAvKioKKyAgICAqIFRlc3QgaWYgdGhlIGdpdmVuIHVyaSBpcyBhIGJhc2U2NCBzdHJp
bmcKKyAgICAqIEBwYXJhbSB1cmkgVGhlIHVyaSB0byB0ZXN0CisgICAgKiBAcmV0dXJuIFRydWUg
aWYgdGhlIHVyaSBpcyBhIGJhc2U2NCBzdHJpbmcgb3IgZmFsc2Ugb3RoZXJ3aXNlCisgICAgKi8K
KyAgICBUb29scy5Jc0Jhc2U2NCA9IGZ1bmN0aW9uICh1cmkpIHsKKyAgICAgICAgcmV0dXJuIHVy
aS5sZW5ndGggPCA1ID8gZmFsc2UgOiB1cmkuc3Vic3RyKDAsIDUpID09PSAiZGF0YToiOworICAg
IH07CisgICAgLyoqCisgICAgKiBEZWNvZGUgdGhlIGdpdmVuIGJhc2U2NCB1cmkuCisgICAgKiBA
cGFyYW0gdXJpIFRoZSB1cmkgdG8gZGVjb2RlCisgICAgKiBAcmV0dXJuIFRoZSBkZWNvZGVkIGJh
c2U2NCBkYXRhLgorICAgICovCisgICAgVG9vbHMuRGVjb2RlQmFzZTY0ID0gZnVuY3Rpb24gKHVy
aSkgeworICAgICAgICB2YXIgZGVjb2RlZFN0cmluZyA9IGF0b2IodXJpLnNwbGl0KCIsIilbMV0p
OworICAgICAgICB2YXIgYnVmZmVyTGVuZ3RoID0gZGVjb2RlZFN0cmluZy5sZW5ndGg7CisgICAg
ICAgIHZhciBidWZmZXJWaWV3ID0gbmV3IFVpbnQ4QXJyYXkobmV3IEFycmF5QnVmZmVyKGJ1ZmZl
ckxlbmd0aCkpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICBidWZmZXJWaWV3W2ldID0gZGVjb2RlZFN0cmluZy5jaGFyQ29kZUF0
KGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidWZmZXJWaWV3LmJ1ZmZlcjsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGFic29sdXRlIHVybC4KKyAgICAgKiBAcGFyYW0g
dXJsIHRoZSBpbnB1dCB1cmwKKyAgICAgKiBAcmV0dXJuIHRoZSBhYnNvbHV0ZSB1cmwKKyAgICAg
Ki8KKyAgICBUb29scy5HZXRBYnNvbHV0ZVVybCA9IGZ1bmN0aW9uICh1cmwpIHsKKyAgICAgICAg
dmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CisgICAgICAgIGEuaHJlZiA9IHVy
bDsKKyAgICAgICAgcmV0dXJuIGEuaHJlZjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShUb29scywgImVycm9yc0NvdW50IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBhIHZhbHVlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBsb2FkaW5nIGVycm9ycworICAgICAg
ICAgKiBAaWdub3JlbmFtaW5nCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiBfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkxvZ2dlciJdLmVycm9yc0NvdW50OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAg
ICAgKiBMb2cgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlCisgICAgICogQHBhcmFtIG1lc3NhZ2Ug
ZGVmaW5lcyB0aGUgbWVzc2FnZSB0byBsb2cKKyAgICAgKi8KKyAgICBUb29scy5Mb2cgPSBmdW5j
dGlvbiAobWVzc2FnZSkgeworICAgICAgICBfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkxvZ2dlciJdLkxvZyhtZXNzYWdlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFdy
aXRlIGEgd2FybmluZyBtZXNzYWdlIHRvIHRoZSBjb25zb2xlCisgICAgICogQHBhcmFtIG1lc3Nh
Z2UgZGVmaW5lcyB0aGUgbWVzc2FnZSB0byBsb2cKKyAgICAgKi8KKyAgICBUb29scy5XYXJuID0g
ZnVuY3Rpb24gKG1lc3NhZ2UpIHsKKyAgICAgICAgX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJMb2dnZXIiXS5XYXJuKG1lc3NhZ2UpOworICAgIH07CisgICAgLyoqCisgICAg
ICogV3JpdGUgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgY29uc29sZQorICAgICAqIEBwYXJhbSBt
ZXNzYWdlIGRlZmluZXMgdGhlIG1lc3NhZ2UgdG8gbG9nCisgICAgICovCisgICAgVG9vbHMuRXJy
b3IgPSBmdW5jdGlvbiAobWVzc2FnZSkgeworICAgICAgICBfbG9nZ2VyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkxvZ2dlciJdLkVycm9yKG1lc3NhZ2UpOworICAgIH07CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFRvb2xzLCAiTG9nQ2FjaGUiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIGN1cnJlbnQgbG9nIGNhY2hlIChsaXN0IG9mIGxvZ3MpCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkxvZ2dlciJdLkxvZ0NhY2hlOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBDbGVhcnMgdGhlIGxvZyBjYWNoZQorICAgICAq
LworICAgIFRvb2xzLkNsZWFyTG9nQ2FjaGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTG9nZ2VyIl0uQ2xlYXJMb2dDYWNoZSgp
OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvb2xzLCAiTG9nTGV2ZWxzIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgY3VycmVudCBsb2cgbGV2ZWwgKE1l
c3NhZ2VMb2dMZXZlbCAvIFdhcm5pbmdMb2dMZXZlbCAvIEVycm9yTG9nTGV2ZWwpCisgICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsZXZlbCkgeworICAgICAgICAgICAgX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5Mb2dMZXZlbHMgPSBsZXZl
bDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvb2xzLCAi
UGVyZm9ybWFuY2VMb2dMZXZlbCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhl
IGN1cnJlbnQgcGVyZm9ybWFuY2UgbG9nIGxldmVsCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uIChsZXZlbCkgeworICAgICAgICAgICAgaWYgKChsZXZlbCAmIFRvb2xzLlBlcmZv
cm1hbmNlVXNlck1hcmtMb2dMZXZlbCkgPT09IFRvb2xzLlBlcmZvcm1hbmNlVXNlck1hcmtMb2dM
ZXZlbCkgeworICAgICAgICAgICAgICAgIFRvb2xzLlN0YXJ0UGVyZm9ybWFuY2VDb3VudGVyID0g
VG9vbHMuX1N0YXJ0VXNlck1hcms7CisgICAgICAgICAgICAgICAgVG9vbHMuRW5kUGVyZm9ybWFu
Y2VDb3VudGVyID0gVG9vbHMuX0VuZFVzZXJNYXJrOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgobGV2ZWwgJiBUb29scy5QZXJmb3JtYW5j
ZUNvbnNvbGVMb2dMZXZlbCkgPT09IFRvb2xzLlBlcmZvcm1hbmNlQ29uc29sZUxvZ0xldmVsKSB7
CisgICAgICAgICAgICAgICAgVG9vbHMuU3RhcnRQZXJmb3JtYW5jZUNvdW50ZXIgPSBUb29scy5f
U3RhcnRQZXJmb3JtYW5jZUNvbnNvbGU7CisgICAgICAgICAgICAgICAgVG9vbHMuRW5kUGVyZm9y
bWFuY2VDb3VudGVyID0gVG9vbHMuX0VuZFBlcmZvcm1hbmNlQ29uc29sZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUb29scy5TdGFydFBlcmZv
cm1hbmNlQ291bnRlciA9IFRvb2xzLl9TdGFydFBlcmZvcm1hbmNlQ291bnRlckRpc2FibGVkOwor
ICAgICAgICAgICAgVG9vbHMuRW5kUGVyZm9ybWFuY2VDb3VudGVyID0gVG9vbHMuX0VuZFBlcmZv
cm1hbmNlQ291bnRlckRpc2FibGVkOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBUb29scy5fU3Rh
cnRQZXJmb3JtYW5jZUNvdW50ZXJEaXNhYmxlZCA9IGZ1bmN0aW9uIChjb3VudGVyTmFtZSwgY29u
ZGl0aW9uKSB7CisgICAgfTsKKyAgICBUb29scy5fRW5kUGVyZm9ybWFuY2VDb3VudGVyRGlzYWJs
ZWQgPSBmdW5jdGlvbiAoY291bnRlck5hbWUsIGNvbmRpdGlvbikgeworICAgIH07CisgICAgVG9v
bHMuX1N0YXJ0VXNlck1hcmsgPSBmdW5jdGlvbiAoY291bnRlck5hbWUsIGNvbmRpdGlvbikgewor
ICAgICAgICBpZiAoY29uZGl0aW9uID09PSB2b2lkIDApIHsgY29uZGl0aW9uID0gdHJ1ZTsgfQor
ICAgICAgICBpZiAoIVRvb2xzLl9wZXJmb3JtYW5jZSkgeworICAgICAgICAgICAgaWYgKCFfZG9t
TWFuYWdlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJEb21NYW5hZ2VtZW50Il0u
SXNXaW5kb3dPYmplY3RFeGlzdCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgVG9vbHMuX3BlcmZvcm1hbmNlID0gd2luZG93LnBlcmZvcm1h
bmNlOworICAgICAgICB9CisgICAgICAgIGlmICghY29uZGl0aW9uIHx8ICFUb29scy5fcGVyZm9y
bWFuY2UubWFyaykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFRv
b2xzLl9wZXJmb3JtYW5jZS5tYXJrKGNvdW50ZXJOYW1lICsgIi1CZWdpbiIpOworICAgIH07Cisg
ICAgVG9vbHMuX0VuZFVzZXJNYXJrID0gZnVuY3Rpb24gKGNvdW50ZXJOYW1lLCBjb25kaXRpb24p
IHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdm9pZCAwKSB7IGNvbmRpdGlvbiA9IHRydWU7
IH0KKyAgICAgICAgaWYgKCFjb25kaXRpb24gfHwgIVRvb2xzLl9wZXJmb3JtYW5jZS5tYXJrKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgVG9vbHMuX3BlcmZvcm1h
bmNlLm1hcmsoY291bnRlck5hbWUgKyAiLUVuZCIpOworICAgICAgICBUb29scy5fcGVyZm9ybWFu
Y2UubWVhc3VyZShjb3VudGVyTmFtZSwgY291bnRlck5hbWUgKyAiLUJlZ2luIiwgY291bnRlck5h
bWUgKyAiLUVuZCIpOworICAgIH07CisgICAgVG9vbHMuX1N0YXJ0UGVyZm9ybWFuY2VDb25zb2xl
ID0gZnVuY3Rpb24gKGNvdW50ZXJOYW1lLCBjb25kaXRpb24pIHsKKyAgICAgICAgaWYgKGNvbmRp
dGlvbiA9PT0gdm9pZCAwKSB7IGNvbmRpdGlvbiA9IHRydWU7IH0KKyAgICAgICAgaWYgKCFjb25k
aXRpb24pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBUb29scy5f
U3RhcnRVc2VyTWFyayhjb3VudGVyTmFtZSwgY29uZGl0aW9uKTsKKyAgICAgICAgaWYgKGNvbnNv
bGUudGltZSkgeworICAgICAgICAgICAgY29uc29sZS50aW1lKGNvdW50ZXJOYW1lKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgVG9vbHMuX0VuZFBlcmZvcm1hbmNlQ29uc29sZSA9IGZ1bmN0aW9u
IChjb3VudGVyTmFtZSwgY29uZGl0aW9uKSB7CisgICAgICAgIGlmIChjb25kaXRpb24gPT09IHZv
aWQgMCkgeyBjb25kaXRpb24gPSB0cnVlOyB9CisgICAgICAgIGlmICghY29uZGl0aW9uKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgVG9vbHMuX0VuZFVzZXJNYXJr
KGNvdW50ZXJOYW1lLCBjb25kaXRpb24pOworICAgICAgICBpZiAoY29uc29sZS50aW1lKSB7Cisg
ICAgICAgICAgICBjb25zb2xlLnRpbWVFbmQoY291bnRlck5hbWUpOworICAgICAgICB9CisgICAg
fTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9vbHMsICJOb3ciLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIGVpdGhlciB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkgaWYgc3Vw
cG9ydGVkIG9yIERhdGUubm93KCkgZWxzZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX3ByZWNpc2lvbkRhdGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siUHJlY2lzaW9uRGF0ZSJdLk5vdzsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIG5hbWUgb2YgdGhl
IGNsYXNzIHVzZWQgdG8gY3JlYXRlIHRoZSBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0Lgor
ICAgICAqIEl0IHdpbGwgd29ya3Mgb25seSBvbiBKYXZhc2NyaXB0IGJhc2ljIGRhdGEgdHlwZXMg
KG51bWJlciwgc3RyaW5nLCAuLi4pIGFuZCBpbnN0YW5jZSBvZiBjbGFzcyBkZWNsYXJlZCB3aXRo
IHRoZSBAY2xhc3NOYW1lIGRlY29yYXRvci4KKyAgICAgKiBAcGFyYW0gb2JqZWN0IHRoZSBvYmpl
Y3QgdG8gZ2V0IHRoZSBjbGFzcyBuYW1lIGZyb20KKyAgICAgKiBAcGFyYW0gaXNUeXBlIGRlZmlu
ZXMgaWYgdGhlIG9iamVjdCBpcyBhY3R1YWxseSBhIHR5cGUKKyAgICAgKiBAcmV0dXJucyB0aGUg
bmFtZSBvZiB0aGUgY2xhc3MsIHdpbGwgYmUgIm9iamVjdCIgZm9yIGEgY3VzdG9tIGRhdGEgdHlw
ZSBub3QgdXNpbmcgdGhlIEBjbGFzc05hbWUgZGVjb3JhdG9yCisgICAgICovCisgICAgVG9vbHMu
R2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKG9iamVjdCwgaXNUeXBlKSB7CisgICAgICAgIGlmIChp
c1R5cGUgPT09IHZvaWQgMCkgeyBpc1R5cGUgPSBmYWxzZTsgfQorICAgICAgICB2YXIgbmFtZSA9
IG51bGw7CisgICAgICAgIGlmICghaXNUeXBlICYmIG9iamVjdC5nZXRDbGFzc05hbWUpIHsKKyAg
ICAgICAgICAgIG5hbWUgPSBvYmplY3QuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgT2JqZWN0KSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGNsYXNzT2JqID0gaXNUeXBlID8gb2JqZWN0IDogT2JqZWN0Lmdl
dFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgICAgICAgICAgICAgbmFtZSA9IGNsYXNzT2JqLmNv
bnN0cnVjdG9yWyJfX2Jqc2NsYXNzTmFtZV9fIl07CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICBuYW1lID0gdHlwZW9mIG9iamVjdDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldHMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkgc2F0aXNmeWlu
ZyBhIGdpdmVuIHByZWRpY2F0ZQorICAgICAqIEBwYXJhbSBhcnJheSBkZWZpbmVzIHRoZSBhcnJh
eSB0byBicm93c2UKKyAgICAgKiBAcGFyYW0gcHJlZGljYXRlIGRlZmluZXMgdGhlIHByZWRpY2F0
ZSB0byB1c2UKKyAgICAgKiBAcmV0dXJucyBudWxsIGlmIG5vdCBmb3VuZCBvciB0aGUgZWxlbWVu
dAorICAgICAqLworICAgIFRvb2xzLkZpcnN0ID0gZnVuY3Rpb24gKGFycmF5LCBwcmVkaWNhdGUp
IHsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBhcnJheV8xID0gYXJyYXk7IF9pIDwgYXJyYXlf
MS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBlbCA9IGFycmF5XzFbX2ldOworICAg
ICAgICAgICAgaWYgKHByZWRpY2F0ZShlbCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWw7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgbmFtZSBvZiB0aGUg
ZnVsbCBuYW1lIG9mIHRoZSBjbGFzcywgaW5jbHVkaW5nIGl0cyBvd25pbmcgbW9kdWxlIChpZiBh
bnkpLgorICAgICAqIEl0IHdpbGwgd29ya3Mgb25seSBvbiBKYXZhc2NyaXB0IGJhc2ljIGRhdGEg
dHlwZXMgKG51bWJlciwgc3RyaW5nLCAuLi4pIGFuZCBpbnN0YW5jZSBvZiBjbGFzcyBkZWNsYXJl
ZCB3aXRoIHRoZSBAY2xhc3NOYW1lIGRlY29yYXRvciBvciBpbXBsZW1lbnRpbmcgYSBtZXRob2Qg
Z2V0Q2xhc3NOYW1lKCk6c3RyaW5nIChpbiB3aGljaCBjYXNlIHRoZSBtb2R1bGUgd29uJ3QgYmUg
c3BlY2lmaWVkKS4KKyAgICAgKiBAcGFyYW0gb2JqZWN0IHRoZSBvYmplY3QgdG8gZ2V0IHRoZSBj
bGFzcyBuYW1lIGZyb20KKyAgICAgKiBAcGFyYW0gaXNUeXBlIGRlZmluZXMgaWYgdGhlIG9iamVj
dCBpcyBhY3R1YWxseSBhIHR5cGUKKyAgICAgKiBAcmV0dXJuIGEgc3RyaW5nIHRoYXQgY2FuIGhh
dmUgdHdvIGZvcm1zOiAibW9kdWxlTmFtZS5jbGFzc05hbWUiIGlmIG1vZHVsZSB3YXMgc3BlY2lm
aWVkIHdoZW4gdGhlIGNsYXNzJyBOYW1lIHdhcyByZWdpc3RlcmVkIG9yICJjbGFzc05hbWUiIGlm
IHRoZXJlIHdhcyBub3QgbW9kdWxlIHNwZWNpZmllZC4KKyAgICAgKiBAaWdub3JlbmFtaW5nCisg
ICAgICovCisgICAgVG9vbHMuZ2V0RnVsbENsYXNzTmFtZSA9IGZ1bmN0aW9uIChvYmplY3QsIGlz
VHlwZSkgeworICAgICAgICBpZiAoaXNUeXBlID09PSB2b2lkIDApIHsgaXNUeXBlID0gZmFsc2U7
IH0KKyAgICAgICAgdmFyIGNsYXNzTmFtZSA9IG51bGw7CisgICAgICAgIHZhciBtb2R1bGVOYW1l
ID0gbnVsbDsKKyAgICAgICAgaWYgKCFpc1R5cGUgJiYgb2JqZWN0LmdldENsYXNzTmFtZSkgewor
ICAgICAgICAgICAgY2xhc3NOYW1lID0gb2JqZWN0LmdldENsYXNzTmFtZSgpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE9iamVj
dCkgeworICAgICAgICAgICAgICAgIHZhciBjbGFzc09iaiA9IGlzVHlwZSA/IG9iamVjdCA6IE9i
amVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9
IGNsYXNzT2JqLmNvbnN0cnVjdG9yWyJfX2Jqc2NsYXNzTmFtZV9fIl07CisgICAgICAgICAgICAg
ICAgbW9kdWxlTmFtZSA9IGNsYXNzT2JqLmNvbnN0cnVjdG9yWyJfX2Jqc21vZHVsZU5hbWVfXyJd
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjbGFzc05hbWUpIHsKKyAgICAgICAg
ICAgICAgICBjbGFzc05hbWUgPSB0eXBlb2Ygb2JqZWN0OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmICghY2xhc3NOYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gKChtb2R1bGVOYW1lICE9IG51bGwpID8gKG1vZHVs
ZU5hbWUgKyAiLiIpIDogIiIpICsgY2xhc3NOYW1lOworICAgIH07CisgICAgLyoqCisgICAgICog
UmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZ2l2ZW4gYW1vdW50IG9m
IHRpbWUuCisgICAgICogQHBhcmFtIGRlbGF5IE51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVs
YXkKKyAgICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGdpdmVu
IGFtb3VudCBvZiB0aW1lCisgICAgICovCisgICAgVG9vbHMuRGVsYXlBc3luYyA9IGZ1bmN0aW9u
IChkZWxheSkgeworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUp
IHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg
IHJlc29sdmUoKTsKKyAgICAgICAgICAgIH0sIGRlbGF5KTsKKyAgICAgICAgfSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBFbmFibGUvRGlzYWJsZSBDdXN0b20gSFRUUCBSZXF1ZXN0IEhlYWRl
cnMgZ2xvYmFsbHkuCisgICAgICogZGVmYXVsdCA9IGZhbHNlCisgICAgICogQHNlZSBDdXN0b21S
ZXF1ZXN0SGVhZGVycworICAgICAqLworICAgIFRvb2xzLlVzZUN1c3RvbVJlcXVlc3RIZWFkZXJz
ID0gZmFsc2U7CisgICAgLyoqCisgICAgICogQ3VzdG9tIEhUVFAgUmVxdWVzdCBIZWFkZXJzIHRv
IGJlIHNlbnQgd2l0aCBYTUxIdHRwUmVxdWVzdHMKKyAgICAgKiBpLmUuIHdoZW4gbG9hZGluZyBm
aWxlcywgd2hlcmUgdGhlIHNlcnZlci9zZXJ2aWNlIGV4cGVjdHMgYW4gQXV0aG9yaXphdGlvbiBo
ZWFkZXIKKyAgICAgKi8KKyAgICBUb29scy5DdXN0b21SZXF1ZXN0SGVhZGVycyA9IF93ZWJSZXF1
ZXN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIldlYlJlcXVlc3QiXS5DdXN0b21SZXF1
ZXN0SGVhZGVyczsKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGJlaGF2aW91ciBmb3IgY29ycyBp
biB0aGUgYXBwbGljYXRpb24uCisgICAgICogSXQgY2FuIGJlIGEgc3RyaW5nIGlmIHRoZSBleHBl
Y3RlZCBiZWhhdmlvciBpcyBpZGVudGljYWwgaW4gdGhlIGVudGlyZSBhcHAuCisgICAgICogT3Ig
YSBjYWxsYmFjayB0byBiZSBhYmxlIHRvIHNldCBpdCBwZXIgdXJsIG9yIG9uIGEgZ3JvdXAgb2Yg
dGhlbSAoaW4gY2FzZSBvZiBWaWRlbyBzb3VyY2UgZm9yIGluc3RhbmNlKQorICAgICAqLworICAg
IFRvb2xzLkNvcnNCZWhhdmlvciA9ICJhbm9ueW1vdXMiOworICAgIFRvb2xzLl90bXBGbG9hdEFy
cmF5ID0gbmV3IEZsb2F0MzJBcnJheSgxKTsKKyAgICAvKioKKyAgICAgKiBFeHRyYWN0cyB0ZXh0
IGNvbnRlbnQgZnJvbSBhIERPTSBlbGVtZW50IGhpZXJhcmNoeQorICAgICAqIEJhY2sgQ29tcGF0
IG9ubHksIHBsZWFzZSB1c2UgRG9tTWFuYWdlbWVudC5HZXRET01UZXh0Q29udGVudCBpbnN0ZWFk
LgorICAgICAqLworICAgIFRvb2xzLkdldERPTVRleHRDb250ZW50ID0gX2RvbU1hbmFnZW1lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRG9tTWFuYWdlbWVudCJdLkdldERPTVRleHRD
b250ZW50OworICAgIC8vIExvZ3MKKyAgICAvKioKKyAgICAgKiBObyBsb2cKKyAgICAgKi8KKyAg
ICBUb29scy5Ob25lTG9nTGV2ZWwgPSBfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkxvZ2dlciJdLk5vbmVMb2dMZXZlbDsKKyAgICAvKioKKyAgICAgKiBPbmx5IG1lc3NhZ2Ug
bG9ncworICAgICAqLworICAgIFRvb2xzLk1lc3NhZ2VMb2dMZXZlbCA9IF9sb2dnZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTG9nZ2VyIl0uTWVzc2FnZUxvZ0xldmVsOworICAgIC8q
KgorICAgICAqIE9ubHkgd2FybmluZyBsb2dzCisgICAgICovCisgICAgVG9vbHMuV2FybmluZ0xv
Z0xldmVsID0gX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5X
YXJuaW5nTG9nTGV2ZWw7CisgICAgLyoqCisgICAgICogT25seSBlcnJvciBsb2dzCisgICAgICov
CisgICAgVG9vbHMuRXJyb3JMb2dMZXZlbCA9IF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTG9nZ2VyIl0uRXJyb3JMb2dMZXZlbDsKKyAgICAvKioKKyAgICAgKiBBbGwgbG9n
cworICAgICAqLworICAgIFRvb2xzLkFsbExvZ0xldmVsID0gX2xvZ2dlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5BbGxMb2dMZXZlbDsKKyAgICAvKioKKyAgICAgKiBD
aGVja3MgaWYgdGhlIHdpbmRvdyBvYmplY3QgZXhpc3RzCisgICAgICogQmFjayBDb21wYXQgb25s
eSwgcGxlYXNlIHVzZSBEb21NYW5hZ2VtZW50LklzV2luZG93T2JqZWN0RXhpc3QgaW5zdGVhZC4K
KyAgICAgKi8KKyAgICBUb29scy5Jc1dpbmRvd09iamVjdEV4aXN0ID0gX2RvbU1hbmFnZW1lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRG9tTWFuYWdlbWVudCJdLklzV2luZG93T2Jq
ZWN0RXhpc3Q7CisgICAgLy8gUGVyZm9ybWFuY2VzCisgICAgLyoqCisgICAgICogTm8gcGVyZm9y
bWFuY2UgbG9nCisgICAgICovCisgICAgVG9vbHMuUGVyZm9ybWFuY2VOb25lTG9nTGV2ZWwgPSAw
OworICAgIC8qKgorICAgICAqIFVzZSB1c2VyIG1hcmtzIHRvIGxvZyBwZXJmb3JtYW5jZQorICAg
ICAqLworICAgIFRvb2xzLlBlcmZvcm1hbmNlVXNlck1hcmtMb2dMZXZlbCA9IDE7CisgICAgLyoq
CisgICAgICogTG9nIHBlcmZvcm1hbmNlIHRvIHRoZSBjb25zb2xlCisgICAgICovCisgICAgVG9v
bHMuUGVyZm9ybWFuY2VDb25zb2xlTG9nTGV2ZWwgPSAyOworICAgIC8qKgorICAgICAqIFN0YXJ0
cyBhIHBlcmZvcm1hbmNlIGNvdW50ZXIKKyAgICAgKi8KKyAgICBUb29scy5TdGFydFBlcmZvcm1h
bmNlQ291bnRlciA9IFRvb2xzLl9TdGFydFBlcmZvcm1hbmNlQ291bnRlckRpc2FibGVkOworICAg
IC8qKgorICAgICAqIEVuZHMgYSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBjb3V0bmVyCisgICAgICov
CisgICAgVG9vbHMuRW5kUGVyZm9ybWFuY2VDb3VudGVyID0gVG9vbHMuX0VuZFBlcmZvcm1hbmNl
Q291bnRlckRpc2FibGVkOworICAgIHJldHVybiBUb29sczsKK30oKSk7CisKKy8qKgorICogVXNl
IHRoaXMgY2xhc3NOYW1lIGFzIGEgZGVjb3JhdG9yIG9uIGEgZ2l2ZW4gY2xhc3MgZGVmaW5pdGlv
biB0byBhZGQgaXQgYSBuYW1lIGFuZCBvcHRpb25hbGx5IGl0cyBtb2R1bGUuCisgKiBZb3UgY2Fu
IHRoZW4gdXNlIHRoZSBUb29scy5nZXRDbGFzc05hbWUob2JqKSBvbiBhbiBpbnN0YW5jZSB0byBy
ZXRyaWV2ZSBpdHMgY2xhc3MgbmFtZS4KKyAqIFRoaXMgbWV0aG9kIGlzIHRoZSBvbmx5IHdheSB0
byBnZXQgaXQgZG9uZSBpbiBhbGwgY2FzZXMsIGV2ZW4gaWYgdGhlIC5qcyBmaWxlIGRlY2xhcmlu
ZyB0aGUgY2xhc3MgaXMgbWluaWZpZWQKKyAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBj
bGFzcywgY2FzZSBzaG91bGQgYmUgcHJlc2VydmVkCisgKiBAcGFyYW0gbW9kdWxlIFRoZSBuYW1l
IG9mIHRoZSBNb2R1bGUgaG9zdGluZyB0aGUgY2xhc3MsIG9wdGlvbmFsLCBidXQgc3Ryb25nbHkg
cmVjb21tZW5kZWQgdG8gc3BlY2lmeSBpZiBwb3NzaWJsZS4gQ2FzZSBzaG91bGQgYmUgcHJlc2Vy
dmVkLgorICovCitmdW5jdGlvbiBjbGFzc05hbWUobmFtZSwgbW9kdWxlKSB7CisgICAgcmV0dXJu
IGZ1bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAgdGFyZ2V0WyJfX2Jqc2NsYXNzTmFtZV9fIl0g
PSBuYW1lOworICAgICAgICB0YXJnZXRbIl9fYmpzbW9kdWxlTmFtZV9fIl0gPSAobW9kdWxlICE9
IG51bGwpID8gbW9kdWxlIDogbnVsbDsKKyAgICB9OworfQorLyoqCisgKiBBbiBpbXBsZW1lbnRh
dGlvbiBvZiBhIGxvb3AgZm9yIGFzeW5jaHJvbm91cyBmdW5jdGlvbnMuCisgKi8KK3ZhciBBc3lu
Y0xvb3AgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ29u
c3RydWN0b3IuCisgICAgICogQHBhcmFtIGl0ZXJhdGlvbnMgdGhlIG51bWJlciBvZiBpdGVyYXRp
b25zLgorICAgICAqIEBwYXJhbSBmdW5jIHRoZSBmdW5jdGlvbiB0byBydW4gZWFjaCBpdGVyYXRp
b24KKyAgICAgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIHRoZSBjYWxsYmFjayB0aGF0IHdpbGwg
YmUgY2FsbGVkIHVwb24gc3VjY2VzZnVsIGV4ZWN1dGlvbgorICAgICAqIEBwYXJhbSBvZmZzZXQg
c3RhcnRpbmcgb2Zmc2V0LgorICAgICAqLworICAgIGZ1bmN0aW9uIEFzeW5jTG9vcCgKKyAgICAv
KioKKyAgICAgKiBEZWZpbmVzIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgdGhlIGxvb3AK
KyAgICAgKi8KKyAgICBpdGVyYXRpb25zLCBmdW5jLCBzdWNjZXNzQ2FsbGJhY2ssIG9mZnNldCkg
eworICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsgb2Zmc2V0ID0gMDsgfQorICAgICAg
ICB0aGlzLml0ZXJhdGlvbnMgPSBpdGVyYXRpb25zOworICAgICAgICB0aGlzLmluZGV4ID0gb2Zm
c2V0IC0gMTsKKyAgICAgICAgdGhpcy5fZG9uZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9mbiA9
IGZ1bmM7CisgICAgICAgIHRoaXMuX3N1Y2Nlc3NDYWxsYmFjayA9IHN1Y2Nlc3NDYWxsYmFjazsK
KyAgICB9CisgICAgLyoqCisgICAgICogRXhlY3V0ZSB0aGUgbmV4dCBpdGVyYXRpb24uIE11c3Qg
YmUgY2FsbGVkIGFmdGVyIHRoZSBsYXN0IGl0ZXJhdGlvbiB3YXMgZmluaXNoZWQuCisgICAgICov
CisgICAgQXN5bmNMb29wLnByb3RvdHlwZS5leGVjdXRlTmV4dCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9kb25lKSB7CisgICAgICAgICAgICBpZiAodGhpcy5pbmRleCArIDEg
PCB0aGlzLml0ZXJhdGlvbnMpIHsKKyAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAg
ICAgICAgICAgICAgdGhpcy5fZm4odGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmJyZWFrTG9vcCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCcmVhayB0aGUgbG9vcCBhbmQgcnVu
IHRoZSBzdWNjZXNzIGNhbGxiYWNrLgorICAgICAqLworICAgIEFzeW5jTG9vcC5wcm90b3R5cGUu
YnJlYWtMb29wID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9kb25lID0gdHJ1ZTsKKyAg
ICAgICAgdGhpcy5fc3VjY2Vzc0NhbGxiYWNrKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGUgYW5kIHJ1biBhbiBhc3luYyBsb29wLgorICAgICAqIEBwYXJhbSBpdGVyYXRpb25zIHRo
ZSBudW1iZXIgb2YgaXRlcmF0aW9ucy4KKyAgICAgKiBAcGFyYW0gZm4gdGhlIGZ1bmN0aW9uIHRv
IHJ1biBlYWNoIGl0ZXJhdGlvbgorICAgICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgdGhlIGNh
bGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgdXBvbiBzdWNjZXNmdWwgZXhlY3V0aW9uCisgICAg
ICogQHBhcmFtIG9mZnNldCBzdGFydGluZyBvZmZzZXQuCisgICAgICogQHJldHVybnMgdGhlIGNy
ZWF0ZWQgYXN5bmMgbG9vcCBvYmplY3QKKyAgICAgKi8KKyAgICBBc3luY0xvb3AuUnVuID0gZnVu
Y3Rpb24gKGl0ZXJhdGlvbnMsIGZuLCBzdWNjZXNzQ2FsbGJhY2ssIG9mZnNldCkgeworICAgICAg
ICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsgb2Zmc2V0ID0gMDsgfQorICAgICAgICB2YXIgbG9v
cCA9IG5ldyBBc3luY0xvb3AoaXRlcmF0aW9ucywgZm4sIHN1Y2Nlc3NDYWxsYmFjaywgb2Zmc2V0
KTsKKyAgICAgICAgbG9vcC5leGVjdXRlTmV4dCgpOworICAgICAgICByZXR1cm4gbG9vcDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEEgZm9yLWxvb3AgdGhhdCB3aWxsIHJ1biBhIGdpdmVuIG51
bWJlciBvZiBpdGVyYXRpb25zIHN5bmNocm9ub3VzIGFuZCB0aGUgcmVzdCBhc3luYy4KKyAgICAg
KiBAcGFyYW0gaXRlcmF0aW9ucyB0b3RhbCBudW1iZXIgb2YgaXRlcmF0aW9ucworICAgICAqIEBw
YXJhbSBzeW5jZWRJdGVyYXRpb25zIG51bWJlciBvZiBzeW5jaHJvbm91cyBpdGVyYXRpb25zIGlu
IGVhY2ggYXN5bmMgaXRlcmF0aW9uLgorICAgICAqIEBwYXJhbSBmbiB0aGUgZnVuY3Rpb24gdG8g
Y2FsbCBlYWNoIGl0ZXJhdGlvbi4KKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgYSBzdWNjZXNzIGNh
bGwgYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gaXRlcmF0aW5nIHN0b3BzLgorICAgICAq
IEBwYXJhbSBicmVha0Z1bmN0aW9uIGEgYnJlYWsgY29uZGl0aW9uIChvcHRpb25hbCkKKyAgICAg
KiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IHNldHRpbmdzIGZvciB0aGUgc2V0VGltZW91dCBmdW5j
dGlvbi4gZGVmYXVsdCAtIDAuCisgICAgICogQHJldHVybnMgdGhlIGNyZWF0ZWQgYXN5bmMgbG9v
cCBvYmplY3QKKyAgICAgKi8KKyAgICBBc3luY0xvb3AuU3luY0FzeW5jRm9yTG9vcCA9IGZ1bmN0
aW9uIChpdGVyYXRpb25zLCBzeW5jZWRJdGVyYXRpb25zLCBmbiwgY2FsbGJhY2ssIGJyZWFrRnVu
Y3Rpb24sIHRpbWVvdXQpIHsKKyAgICAgICAgaWYgKHRpbWVvdXQgPT09IHZvaWQgMCkgeyB0aW1l
b3V0ID0gMDsgfQorICAgICAgICByZXR1cm4gQXN5bmNMb29wLlJ1bihNYXRoLmNlaWwoaXRlcmF0
aW9ucyAvIHN5bmNlZEl0ZXJhdGlvbnMpLCBmdW5jdGlvbiAobG9vcCkgeworICAgICAgICAgICAg
aWYgKGJyZWFrRnVuY3Rpb24gJiYgYnJlYWtGdW5jdGlvbigpKSB7CisgICAgICAgICAgICAgICAg
bG9vcC5icmVha0xvb3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bmNlZEl0ZXJhdGlvbnM7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbiA9IChsb29wLmluZGV4ICogc3luY2VkSXRlcmF0
aW9ucykgKyBpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbiA+PSBpdGVy
YXRpb25zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmbihpdGVyYXRpb24pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrRnVuY3Rpb24gJiYgYnJlYWtGdW5jdGlv
bigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcC5icmVha0xvb3AoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsb29wLmV4ZWN1
dGVOZXh0KCk7CisgICAgICAgICAgICAgICAgfSwgdGltZW91dCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sIGNhbGxiYWNrKTsKKyAgICB9OworICAgIHJldHVybiBBc3luY0xvb3A7Cit9KCkp
OworCisvLyBXaWxsIG9ubHkgYmUgZGVmaW5lIGlmIFRvb2xzIGlzIGltcG9ydGVkIGZyZWVpbmcg
dXAgc29tZSBzcGFjZSB3aGVuIG9ubHkgZW5naW5lIGlzIHJlcXVpcmVkCitfRW5naW5lc19lbmdp
bmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJFbmdpbmVTdG9yZSJdLkZhbGxi
YWNrVGV4dHVyZSA9ICJkYXRhOmltYWdlL2pwZztiYXNlNjQsLzlqLzRBQVFTa1pKUmdBQkFRRUFZ
QUJnQUFELzRRQm1SWGhwWmdBQVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFB
QUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFBRXhBQUlBQUFBUUFBQUFUZ0FBQUFBQUFBQmdBQUFBQVFB
QUFHQUFBQUFCY0dGcGJuUXVibVYwSURRdU1DNDFBUC9iQUVNQUJBSURBd01DQkFNREF3UUVCQVFG
Q1FZRkJRVUZDd2dJQmdrTkN3ME5EUXNNREE0UUZCRU9EeE1QREF3U0dCSVRGUllYRnhjT0VSa2JH
UllhRkJZWEZ2L2JBRU1CQkFRRUJRVUZDZ1lHQ2hZUERBOFdGaFlXRmhZV0ZoWVdGaFlXRmhZV0Zo
WVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRnYvQUFCRUlBUUFCQUFN
QklnQUNFUUVERVFIL3hBQWZBQUFCQlFFQkFRRUJBUUFBQUFBQUFBQUFBUUlEQkFVR0J3Z0pDZ3Yv
eEFDMUVBQUNBUU1EQWdRREJRVUVCQUFBQVgwQkFnTUFCQkVGRWlFeFFRWVRVV0VISW5FVU1vR1Jv
UWdqUXJIQkZWTFI4Q1F6WW5LQ0NRb1dGeGdaR2lVbUp5Z3BLalExTmpjNE9UcERSRVZHUjBoSlNs
TlVWVlpYV0ZsYVkyUmxabWRvYVdwemRIVjJkM2g1ZW9PRWhZYUhpSW1La3BPVWxaYVhtSm1hb3FP
a3BhYW5xS21xc3JPMHRiYTN1TG02d3NQRXhjYkh5TW5LMHRQVTFkYlgyTm5hNGVMajVPWG01K2pw
NnZIeTgvVDE5dmY0K2ZyL3hBQWZBUUFEQVFFQkFRRUJBUUVCQUFBQUFBQUFBUUlEQkFVR0J3Z0pD
Z3YveEFDMUVRQUNBUUlFQkFNRUJ3VUVCQUFCQW5jQUFRSURFUVFGSVRFR0VrRlJCMkZ4RXlJeWdR
Z1VRcEdoc2NFSkl6TlM4QlZpY3RFS0ZpUTA0U1h4RnhnWkdpWW5LQ2txTlRZM09EazZRMFJGUmtk
SVNVcFRWRlZXVjFoWldtTmtaV1puYUdscWMzUjFkbmQ0ZVhxQ2c0U0Zob2VJaVlxU2s1U1ZscGVZ
bVpxaW82U2xwcWVvcWFxeXM3UzF0cmU0dWJyQ3c4VEZ4c2ZJeWNyUzA5VFYxdGZZMmRyaTQrVGw1
dWZvNmVyeTgvVDE5dmY0K2ZyLzJnQU1Bd0VBQWhFREVRQS9BUEg2S0tLK0ZQNzZQbCtpaWl2dWor
QlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3
NlBsK2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9n
VStvS0tLSytGUDc2UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZLS0srNlA0RkNpaWlnRDZnb29v
cjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlp
dnVqK0JUNmdvb29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tL
K0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytnb29vb0Er
WDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2
Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBs
K2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVUtL
S0tBUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBsK2lpaXZ1aitCVDZnb29vcjRV
L3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVq
K0JUNmdvb29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQ
NzZDaWlpZ0Q1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZL
S0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29v
b3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBsK2lp
aXZ1aitCUW9vb29BK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRG
UHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBsK2lpaXZ1aitCVDZnb29vcjRVL3Zv
K1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVqK0JU
Nmdvb29yNFUvdm9LS0tLQVBsK2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2
aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZLS0sr
NlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0
VS92bytYNktLSys2UDRGQ2lpaWdENmdvb29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVm
b29vcjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFD
aWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBsK2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2
S0tLKzZQNEZQcUNpaWl2aFQrK2dvb29vQStYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28v
Z1Urb0tLS0srRlA3NlBsK2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQr
K2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZLS0srNlA0
RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVS0tLS0FQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tL
SytGUDc2UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29v
cjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlp
dmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NkNpaWlnRDVmb29vcjdvL2dVK29LS0tLK0ZQNzZQ
bCtpaWl2dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Ur
b0tLS0srRlA3NlBsK2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1
Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVqK0JRb29vb0Erb0tLS0srRlA3NlBsK2lpaXZ1
aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytG
UDc2UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdv
L2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0VS92b0tLS0tBUGwraWlpdnVqK0JUNmdv
b29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQNzZQbCtp
aWl2dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tL
S0srRlA3NlBsK2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZDaWlpZ0Q2Z29vb3I0VS92
bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBsK2lpaXZ1aitC
VDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2
UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrZ29vb29BK1g2S0tL
KzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVqK0JUNmdvb29y
NFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2
dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1VLS0tLQVBx
Q2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0VS92bytY
NktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBsK2lpaXZ1aitCVDZn
b29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UC8v
WiI7CisvLyBSZWdpc3RlciBwcm9taXNlIGZhbGxiYWNrIGZvciBJRQorX3Byb21pc2VfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfX1siUHJvbWlzZVBvbHlmaWxsIl0uQXBwbHkoKTsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL3R5cGVTdG9yZS50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogX1R5cGVT
dG9yZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfVHlwZVN0b3JlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfVHlwZVN0b3JlOyB9KTsKKy8qKiBAaGlkZGVuICovCit2YXIg
X1R5cGVTdG9yZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBf
VHlwZVN0b3JlKCkgeworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIF9UeXBlU3RvcmUu
R2V0Q2xhc3MgPSBmdW5jdGlvbiAoZnFkbikgeworICAgICAgICBpZiAodGhpcy5SZWdpc3RlcmVk
VHlwZXMgJiYgdGhpcy5SZWdpc3RlcmVkVHlwZXNbZnFkbl0pIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLlJlZ2lzdGVyZWRUeXBlc1tmcWRuXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgX1R5cGVTdG9yZS5SZWdpc3Rl
cmVkVHlwZXMgPSB7fTsKKyAgICByZXR1cm4gX1R5cGVTdG9yZTsKK30oKSk7CisKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vTWlzYy91bmlxdWVJZEdlbmVyYXRvci50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlzYy91bmlxdWVJZEdl
bmVyYXRvci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBVbmlxdWVJZEdlbmVyYXRvciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJVbmlxdWVJZEdlbmVyYXRvciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gVW5pcXVlSWRHZW5lcmF0b3I7IH0pOworLyoqCisgKiBIZWxwZXIgY2xhc3MgdXNlZCB0
byBnZW5lcmF0ZSBzZXNzaW9uIHVuaXF1ZSBJRAorICovCit2YXIgVW5pcXVlSWRHZW5lcmF0b3Ig
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gVW5pcXVlSWRHZW5l
cmF0b3IoKSB7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbmlxdWVJZEdlbmVy
YXRvciwgIlVuaXF1ZUlkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhbiB1bmlx
dWUgKHJlbGF0aXZlbHkgdG8gdGhlIGN1cnJlbnQgc2NlbmUpIElkCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9V
bmlxdWVJZENvdW50ZXI7CisgICAgICAgICAgICB0aGlzLl9VbmlxdWVJZENvdW50ZXIrKzsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8vIFN0YXRp
Y3MKKyAgICBVbmlxdWVJZEdlbmVyYXRvci5fVW5pcXVlSWRDb3VudGVyID0gMDsKKyAgICByZXR1
cm4gVW5pcXVlSWRHZW5lcmF0b3I7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L01pc2MvdmlkZW9SZWNvcmRlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9NaXNjL3ZpZGVvUmVjb3JkZXIudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBWaWRlb1JlY29y
ZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpZGVvUmVjb3JkZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFZpZGVvUmVjb3JkZXI7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5q
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90b29scyAqLyAiLi9NaXNjL3Rv
b2xzLnRzIik7CisKKworLyoqCisgKiBUaGlzIGNhbiBoZWxwIHdpdGggcmVjb3JkaW5nIHZpZGVv
cyBmcm9tIEJhYnlsb25KUy4KKyAqIFRoaXMgaXMgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBXZWJS
VEMgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBicm93c2VyLgorICoKKyAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9yZW5kZXJfc2NlbmVfb25fYV92aWRlbworICovCit2YXIg
VmlkZW9SZWNvcmRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGUgYSBuZXcgVmlkZW9DYXB0dXJlIG9iamVjdCB3aGljaCBjYW4gaGVscCBjb252
ZXJ0aW5nIHdoYXQgeW91IHNlZSBpbiBCYWJ5bG9uIHRvIGEgdmlkZW8gZmlsZS4KKyAgICAgKiBA
cGFyYW0gZW5naW5lIERlZmluZXMgdGhlIEJhYnlsb25KUyBFbmdpbmUgeW91IHdpc2ggdG8gcmVj
b3JkLgorICAgICAqIEBwYXJhbSBvcHRpb25zIERlZmluZXMgb3B0aW9ucyB0aGF0IGNhbiBiZSB1
c2VkIHRvIGN1c3RvbWl6ZSB0aGUgY2FwdHVyZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBWaWRl
b1JlY29yZGVyKGVuZ2luZSwgb3B0aW9ucykgeworICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9p
ZCAwKSB7IG9wdGlvbnMgPSBudWxsOyB9CisgICAgICAgIGlmICghVmlkZW9SZWNvcmRlci5Jc1N1
cHBvcnRlZChlbmdpbmUpKSB7CisgICAgICAgICAgICB0aHJvdyAiWW91ciBicm93c2VyIGRvZXMg
bm90IHN1cHBvcnQgcmVjb3JkaW5nIHNvIGZhci4iOworICAgICAgICB9CisgICAgICAgIHZhciBj
YW52YXMgPSBlbmdpbmUuZ2V0UmVuZGVyaW5nQ2FudmFzKCk7CisgICAgICAgIGlmICghY2FudmFz
KSB7CisgICAgICAgICAgICB0aHJvdyAiVGhlIGJhYnlsb24gZW5naW5lIG11c3QgaGF2ZSBhIGNh
bnZhcyB0byBiZSByZWNvcmRlZCI7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2FudmFzID0g
Y2FudmFzOworICAgICAgICB0aGlzLl9jYW52YXMuaXNSZWNvcmRpbmcgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5fb3B0aW9ucyA9IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
YXNzaWduIl0oe30sIFZpZGVvUmVjb3JkZXIuX2RlZmF1bHRPcHRpb25zLCBvcHRpb25zKTsKKyAg
ICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuX2NhbnZhcy5jYXB0dXJlU3RyZWFtKHRoaXMuX29wdGlv
bnMuZnBzKTsKKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuYXVkaW9UcmFja3MpIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9vcHRpb25zLmF1ZGlvVHJhY2tzOyBf
aSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IF9hW19p
XTsKKyAgICAgICAgICAgICAgICBzdHJlYW0uYWRkVHJhY2sodHJhY2spOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHRoaXMuX21lZGlhUmVjb3JkZXIgPSBuZXcgTWVkaWFSZWNv
cmRlcihzdHJlYW0sIHsgbWltZVR5cGU6IHRoaXMuX29wdGlvbnMubWltZVR5cGUgfSk7CisgICAg
ICAgIHRoaXMuX21lZGlhUmVjb3JkZXIub25kYXRhYXZhaWxhYmxlID0gdGhpcy5faGFuZGxlRGF0
YUF2YWlsYWJsZS5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLl9tZWRpYVJlY29yZGVyLm9uZXJy
b3IgPSB0aGlzLl9oYW5kbGVFcnJvci5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLl9tZWRpYVJl
Y29yZGVyLm9uc3RvcCA9IHRoaXMuX2hhbmRsZVN0b3AuYmluZCh0aGlzKTsKKyAgICB9CisgICAg
LyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgVmlkZW9SZWNvcmRlciBpcyBh
dmFpbGFibGUgaW4geW91ciBicm93c2VyLgorICAgICAqIEBwYXJhbSBlbmdpbmUgRGVmaW5lcyB0
aGUgQmFieWxvbiBFbmdpbmUuCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBzdXBwb3J0ZWQgb3Ro
ZXJ3aXNlIGZhbHNlLgorICAgICAqLworICAgIFZpZGVvUmVjb3JkZXIuSXNTdXBwb3J0ZWQgPSBm
dW5jdGlvbiAoZW5naW5lKSB7CisgICAgICAgIHZhciBjYW52YXMgPSBlbmdpbmUuZ2V0UmVuZGVy
aW5nQ2FudmFzKCk7CisgICAgICAgIHJldHVybiAoISFjYW52YXMgJiYgdHlwZW9mIGNhbnZhcy5j
YXB0dXJlU3RyZWFtID09PSAiZnVuY3Rpb24iKTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShWaWRlb1JlY29yZGVyLnByb3RvdHlwZSwgImlzUmVjb3JkaW5nIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogVHJ1ZSB3aGVuIGEgcmVjb3JkaW5nIGlzIGFscmVhZHkgaW4gcHJv
Z3Jlc3MuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiAhIXRoaXMuX2NhbnZhcyAmJiB0aGlzLl9jYW52YXMuaXNSZWNvcmRpbmc7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFN0b3BzIHRoZSBjdXJyZW50IHJlY29y
ZGluZyBiZWZvcmUgdGhlIGRlZmF1bHQgY2FwdHVyZSB0aW1lb3V0IHBhc3NlZCBpbiB0aGUgc3Rh
cnRSZWNvcmRpbmcgZnVuY3Rpb24uCisgICAgICovCisgICAgVmlkZW9SZWNvcmRlci5wcm90b3R5
cGUuc3RvcFJlY29yZGluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYW52
YXMgfHwgIXRoaXMuX21lZGlhUmVjb3JkZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXRoaXMuaXNSZWNvcmRpbmcpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYW52YXMuaXNSZWNvcmRpbmcgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fbWVkaWFSZWNvcmRlci5zdG9wKCk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTdGFydHMgcmVjb3JkaW5nIHRoZSBjYW52YXMgZm9yIGEgbWF4IGR1cmF0aW9uIHNwZWNp
ZmllZCBpbiBwYXJhbWV0ZXJzLgorICAgICAqIEBwYXJhbSBmaWxlTmFtZSBEZWZpbmVzIHRoZSBu
YW1lIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQgd2hlbiB0aGUgcmVjb3JkaW5nIHN0b3Au
CisgICAgICogSWYgbnVsbCBubyBhdXRvbWF0aWMgZG93bmxvYWQgd2lsbCBzdGFydCBhbmQgeW91
IGNhbiByZWx5IG9uIHRoZSBwcm9taXNlIHRvIGdldCB0aGUgZGF0YSBiYWNrLgorICAgICAqIEBw
YXJhbSBtYXhEdXJhdGlvbiBEZWZpbmVzIHRoZSBtYXhpbXVtIHJlY29yZGluZyB0aW1lIGluIHNl
Y29uZHMuCisgICAgICogSXQgZGVmYXVsdHMgdG8gNyBzZWNvbmRzLiBBIHZhbHVlIG9mIHplcm8g
d2lsbCBub3Qgc3RvcCBhdXRvbWF0aWNhbGx5LCB5b3Ugd291bGQgbmVlZCB0byBjYWxsIHN0b3BS
ZWNvcmRpbmcgbWFudWFsbHkuCisgICAgICogQHJldHVybiBBIHByb21pc2UgY2FsbGJhY2sgYXQg
dGhlIGVuZCBvZiB0aGUgcmVjb3JkaW5nIHdpdGggdGhlIHZpZGVvIGRhdGEgaW4gQmxvYi4KKyAg
ICAgKi8KKyAgICBWaWRlb1JlY29yZGVyLnByb3RvdHlwZS5zdGFydFJlY29yZGluZyA9IGZ1bmN0
aW9uIChmaWxlTmFtZSwgbWF4RHVyYXRpb24pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgaWYgKGZpbGVOYW1lID09PSB2b2lkIDApIHsgZmlsZU5hbWUgPSAiYmFieWxvbmpz
LndlYm0iOyB9CisgICAgICAgIGlmIChtYXhEdXJhdGlvbiA9PT0gdm9pZCAwKSB7IG1heER1cmF0
aW9uID0gNzsgfQorICAgICAgICBpZiAoIXRoaXMuX2NhbnZhcyB8fCAhdGhpcy5fbWVkaWFSZWNv
cmRlcikgeworICAgICAgICAgICAgdGhyb3cgIlJlY29yZGVyIGhhcyBhbHJlYWR5IGJlZW4gZGlz
cG9zZWQiOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7CisgICAg
ICAgICAgICB0aHJvdyAiUmVjb3JkaW5nIGFscmVhZHkgaW4gcHJvZ3Jlc3MiOworICAgICAgICB9
CisgICAgICAgIGlmIChtYXhEdXJhdGlvbiA+IDApIHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLnN0b3BSZWNvcmRpbmcoKTsKKyAg
ICAgICAgICAgIH0sIG1heER1cmF0aW9uICogMTAwMCk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZmlsZU5hbWUgPSBmaWxlTmFtZTsKKyAgICAgICAgdGhpcy5fcmVjb3JkZWRDaHVua3MgPSBb
XTsKKyAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IG51bGw7CisgICAgICAgIHRoaXMuX3JlamVjdCA9
IG51bGw7CisgICAgICAgIHRoaXMuX2NhbnZhcy5pc1JlY29yZGluZyA9IHRydWU7CisgICAgICAg
IHRoaXMuX21lZGlhUmVjb3JkZXIuc3RhcnQodGhpcy5fb3B0aW9ucy5yZWNvcmRDaHVuY2tTaXpl
KTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3Qp
IHsKKyAgICAgICAgICAgIF90aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTsKKyAgICAgICAgICAgIF90
aGlzLl9yZWplY3QgPSByZWplY3Q7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmVsZWFzZXMgaW50ZXJuYWwgcmVzb3VyY2VzIHVzZWQgZHVyaW5nIHRoZSByZWNvcmRpbmcu
CisgICAgICovCisgICAgVmlkZW9SZWNvcmRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5fY2FudmFzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fbWVkaWFS
ZWNvcmRlciA9IG51bGw7CisgICAgICAgIHRoaXMuX3JlY29yZGVkQ2h1bmtzID0gW107CisgICAg
ICAgIHRoaXMuX2ZpbGVOYW1lID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IG51bGw7
CisgICAgICAgIHRoaXMuX3JlamVjdCA9IG51bGw7CisgICAgfTsKKyAgICBWaWRlb1JlY29yZGVy
LnByb3RvdHlwZS5faGFuZGxlRGF0YUF2YWlsYWJsZSA9IGZ1bmN0aW9uIChldmVudCkgeworICAg
ICAgICBpZiAoZXZlbnQuZGF0YS5zaXplID4gMCkgeworICAgICAgICAgICAgdGhpcy5fcmVjb3Jk
ZWRDaHVua3MucHVzaChldmVudC5kYXRhKTsKKyAgICAgICAgfQorICAgIH07CisgICAgVmlkZW9S
ZWNvcmRlci5wcm90b3R5cGUuX2hhbmRsZUVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAg
ICAgIHRoaXMuc3RvcFJlY29yZGluZygpOworICAgICAgICBpZiAodGhpcy5fcmVqZWN0KSB7Cisg
ICAgICAgICAgICB0aGlzLl9yZWplY3QoZXZlbnQuZXJyb3IpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IGV2ZW50LmVycm9yKCk7CisgICAgICAgIH0K
KyAgICB9OworICAgIFZpZGVvUmVjb3JkZXIucHJvdG90eXBlLl9oYW5kbGVTdG9wID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTsKKyAgICAgICAgdmFyIHN1cGVy
QnVmZmVyID0gbmV3IEJsb2IodGhpcy5fcmVjb3JkZWRDaHVua3MpOworICAgICAgICBpZiAodGhp
cy5fcmVzb2x2ZSkgeworICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZShzdXBlckJ1ZmZlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoc3VwZXJCdWZmZXIp
OworICAgICAgICBpZiAodGhpcy5fZmlsZU5hbWUpIHsKKyAgICAgICAgICAgIF90b29sc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb29scyJdLkRvd25sb2FkKHN1cGVyQnVmZmVyLCB0
aGlzLl9maWxlTmFtZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIFZpZGVvUmVjb3JkZXIuX2Rl
ZmF1bHRPcHRpb25zID0geworICAgICAgICBtaW1lVHlwZTogInZpZGVvL3dlYm0iLAorICAgICAg
ICBmcHM6IDI1LAorICAgICAgICByZWNvcmRDaHVuY2tTaXplOiAzMDAwCisgICAgfTsKKyAgICBy
ZXR1cm4gVmlkZW9SZWNvcmRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWlzYy92aXJ0dWFsSm95c3RpY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9NaXNjL3ZpcnR1YWxKb3lzdGljay50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogSm95
c3RpY2tBeGlzLCBWaXJ0dWFsSm95c3RpY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiSm95c3RpY2tBeGlzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBKb3lzdGlja0F4aXM7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlydHVhbEpveXN0aWNrIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBWaXJ0dWFsSm95c3RpY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3Iu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3RyaW5nRGljdGlvbmFyeV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdHJpbmdE
aWN0aW9uYXJ5ICovICIuL01pc2Mvc3RyaW5nRGljdGlvbmFyeS50cyIpOworCisKKy8vIE1haW5s
eSBiYXNlZCBvbiB0aGVzZSAyIGFydGljbGVzIDoKKy8vIENyZWF0aW5nIGFuIHVuaXZlcnNhbCB2
aXJ0dWFsIHRvdWNoIGpveXN0aWNrIHdvcmtpbmcgZm9yIGFsbCBUb3VjaCBtb2RlbHMgdGhhbmtz
IHRvIEhhbmQuSlMgOiBodHRwOi8vYmxvZ3MubXNkbi5jb20vYi9kYXZyb3VzL2FyY2hpdmUvMjAx
My8wMi8yMi9jcmVhdGluZy1hbi11bml2ZXJzYWwtdmlydHVhbC10b3VjaC1qb3lzdGljay13b3Jr
aW5nLWZvci1hbGwtdG91Y2gtbW9kZWxzLXRoYW5rcy10by1oYW5kLWpzLmFzcHgKKy8vICYgb24g
U2ViIExlZS1EZWxpc2xlIG9yaWdpbmFsIHdvcms6IGh0dHA6Ly9zZWIubHkvMjAxMS8wNC9tdWx0
aS10b3VjaC1nYW1lLWNvbnRyb2xsZXItaW4tamF2YXNjcmlwdGh0bWw1LWZvci1pcGFkLworLyoq
CisgKiBEZWZpbmVzIHRoZSBwb3RlbnRpYWwgYXhpcyBvZiBhIEpveXN0aWNrCisgKi8KK3ZhciBK
b3lzdGlja0F4aXM7CisoZnVuY3Rpb24gKEpveXN0aWNrQXhpcykgeworICAgIC8qKiBYIGF4aXMg
Ki8KKyAgICBKb3lzdGlja0F4aXNbSm95c3RpY2tBeGlzWyJYIl0gPSAwXSA9ICJYIjsKKyAgICAv
KiogWSBheGlzICovCisgICAgSm95c3RpY2tBeGlzW0pveXN0aWNrQXhpc1siWSJdID0gMV0gPSAi
WSI7CisgICAgLyoqIFogYXhpcyAqLworICAgIEpveXN0aWNrQXhpc1tKb3lzdGlja0F4aXNbIloi
XSA9IDJdID0gIloiOworfSkoSm95c3RpY2tBeGlzIHx8IChKb3lzdGlja0F4aXMgPSB7fSkpOwor
LyoqCisgKiBDbGFzcyB1c2VkIHRvIGRlZmluZSB2aXJ0dWFsIGpveXN0aWNrICh1c2VkIGluIHRv
dWNoIG1vZGUpCisgKi8KK3ZhciBWaXJ0dWFsSm95c3RpY2sgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyB2aXJ0dWFsIGpveXN0aWNr
CisgICAgICogQHBhcmFtIGxlZnRKb3lzdGljayBkZWZpbmVzIHRoYXQgdGhlIGpveXN0aWNrIGlz
IGZvciBsZWZ0IGhhbmQgKGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgZnVuY3Rpb24g
VmlydHVhbEpveXN0aWNrKGxlZnRKb3lzdGljaykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlz
OworICAgICAgICBpZiAobGVmdEpveXN0aWNrKSB7CisgICAgICAgICAgICB0aGlzLl9sZWZ0Sm95
c3RpY2sgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhp
cy5fbGVmdEpveXN0aWNrID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgVmlydHVhbEpveXN0
aWNrLl9nbG9iYWxKb3lzdGlja0luZGV4Kys7CisgICAgICAgIC8vIEJ5IGRlZmF1bHQgbGVmdCAm
IHJpZ2h0IGFycm93IGtleXMgYXJlIG1vdmluZyB0aGUgWAorICAgICAgICAvLyBhbmQgdXAgJiBk
b3duIGtleXMgYXJlIG1vdmluZyB0aGUgWQorICAgICAgICB0aGlzLl9heGlzVGFyZ2V0ZWRCeUxl
ZnRBbmRSaWdodCA9IEpveXN0aWNrQXhpcy5YOworICAgICAgICB0aGlzLl9heGlzVGFyZ2V0ZWRC
eVVwQW5kRG93biA9IEpveXN0aWNrQXhpcy5ZOworICAgICAgICB0aGlzLnJldmVyc2VMZWZ0Umln
aHQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5yZXZlcnNlVXBEb3duID0gZmFsc2U7CisgICAgICAg
IC8vIGNvbGxlY3Rpb25zIG9mIHBvaW50ZXJzCisgICAgICAgIHRoaXMuX3RvdWNoZXMgPSBuZXcg
X3N0cmluZ0RpY3Rpb25hcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU3RyaW5nRGlj
dGlvbmFyeSJdKCk7CisgICAgICAgIHRoaXMuZGVsdGFQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAg
ICAgICB0aGlzLl9qb3lzdGlja1NlbnNpYmlsaXR5ID0gMjU7CisgICAgICAgIHRoaXMuX2ludmVy
c2VkU2Vuc2liaWxpdHkgPSAxIC8gKHRoaXMuX2pveXN0aWNrU2Vuc2liaWxpdHkgLyAxMDAwKTsK
KyAgICAgICAgdGhpcy5fb25SZXNpemUgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICBW
aXJ0dWFsSm95c3RpY2sudmpDYW52YXNXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOworICAgICAg
ICAgICAgVmlydHVhbEpveXN0aWNrLnZqQ2FudmFzSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0
OworICAgICAgICAgICAgaWYgKFZpcnR1YWxKb3lzdGljay5DYW52YXMpIHsKKyAgICAgICAgICAg
ICAgICBWaXJ0dWFsSm95c3RpY2suQ2FudmFzLndpZHRoID0gVmlydHVhbEpveXN0aWNrLnZqQ2Fu
dmFzV2lkdGg7CisgICAgICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLkNhbnZhcy5oZWlnaHQg
PSBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNIZWlnaHQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBWaXJ0dWFsSm95c3RpY2suaGFsZldpZHRoID0gVmlydHVhbEpveXN0aWNrLnZqQ2FudmFz
V2lkdGggLyAyOworICAgICAgICB9OworICAgICAgICAvLyBpbmplY3RpbmcgYSBjYW52YXMgZWxl
bWVudCBvbiB0b3Agb2YgdGhlIGNhbnZhcyAzRCBnYW1lCisgICAgICAgIGlmICghVmlydHVhbEpv
eXN0aWNrLkNhbnZhcykgeworICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJl
c2l6ZSIsIHRoaXMuX29uUmVzaXplLCBmYWxzZSk7CisgICAgICAgICAgICBWaXJ0dWFsSm95c3Rp
Y2suQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgICAgICAg
ICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOworICAg
ICAgICAgICAgVmlydHVhbEpveXN0aWNrLnZqQ2FudmFzSGVpZ2h0ID0gd2luZG93LmlubmVySGVp
Z2h0OworICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLkNhbnZhcy53aWR0aCA9IHdpbmRvdy5p
bm5lcldpZHRoOworICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLkNhbnZhcy5oZWlnaHQgPSB3
aW5kb3cuaW5uZXJIZWlnaHQ7CisgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2suQ2FudmFzLnN0
eWxlLndpZHRoID0gIjEwMCUiOworICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLkNhbnZhcy5z
dHlsZS5oZWlnaHQgPSAiMTAwJSI7CisgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2suQ2FudmFz
LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKKyAgICAgICAgICAgIFZpcnR1YWxKb3lzdGlj
ay5DYW52YXMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gInRyYW5zcGFyZW50IjsKKyAgICAgICAg
ICAgIFZpcnR1YWxKb3lzdGljay5DYW52YXMuc3R5bGUudG9wID0gIjBweCI7CisgICAgICAgICAg
ICBWaXJ0dWFsSm95c3RpY2suQ2FudmFzLnN0eWxlLmxlZnQgPSAiMHB4IjsKKyAgICAgICAgICAg
IFZpcnR1YWxKb3lzdGljay5DYW52YXMuc3R5bGUuekluZGV4ID0gIjUiOworICAgICAgICAgICAg
VmlydHVhbEpveXN0aWNrLkNhbnZhcy5zdHlsZS5tc1RvdWNoQWN0aW9uID0gIm5vbmUiOworICAg
ICAgICAgICAgLy8gU3VwcG9ydCBmb3IgalF1ZXJ5IFBFUCBwb2x5ZmlsbAorICAgICAgICAgICAg
VmlydHVhbEpveXN0aWNrLkNhbnZhcy5zZXRBdHRyaWJ1dGUoInRvdWNoLWFjdGlvbiIsICJub25l
Iik7CisgICAgICAgICAgICB2YXIgY29udGV4dCA9IFZpcnR1YWxKb3lzdGljay5DYW52YXMuZ2V0
Q29udGV4dCgnMmQnKTsKKyAgICAgICAgICAgIGlmICghY29udGV4dCkgeworICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBjYW52YXMgZm9yIHZpcnR1YWwg
am95c3RpY2siKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay52
akNhbnZhc0NvbnRleHQgPSBjb250ZXh0OworICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLnZq
Q2FudmFzQ29udGV4dC5zdHJva2VTdHlsZSA9ICIjZmZmZmZmIjsKKyAgICAgICAgICAgIFZpcnR1
YWxKb3lzdGljay52akNhbnZhc0NvbnRleHQubGluZVdpZHRoID0gMjsKKyAgICAgICAgICAgIGRv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoVmlydHVhbEpveXN0aWNrLkNhbnZhcyk7CisgICAgICAg
IH0KKyAgICAgICAgVmlydHVhbEpveXN0aWNrLmhhbGZXaWR0aCA9IFZpcnR1YWxKb3lzdGljay5D
YW52YXMud2lkdGggLyAyOworICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTsKKyAgICAgICAg
Ly8gZGVmYXVsdCBqb3lzdGljayBjb2xvcgorICAgICAgICB0aGlzLl9qb3lzdGlja0NvbG9yID0g
ImN5YW4iOworICAgICAgICB0aGlzLl9qb3lzdGlja1BvaW50ZXJJRCA9IC0xOworICAgICAgICAv
LyBjdXJyZW50IGpveXN0aWNrIHBvc2l0aW9uCisgICAgICAgIHRoaXMuX2pveXN0aWNrUG9pbnRl
clBvcyA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMiJdKDAsIDApOworICAgICAgICB0aGlzLl9qb3lzdGlja1ByZXZpb3VzUG9pbnRl
clBvcyA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMiJdKDAsIDApOworICAgICAgICAvLyBvcmlnaW4gam95c3RpY2sgcG9zaXRpb24K
KyAgICAgICAgdGhpcy5fam95c3RpY2tQb2ludGVyU3RhcnRQb3MgPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjIiXSgwLCAwKTsKKyAg
ICAgICAgdGhpcy5fZGVsdGFKb3lzdGlja1ZlY3RvciA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdKDAsIDApOworICAgICAgICB0
aGlzLl9vblBvaW50ZXJEb3duSGFuZGxlclJlZiA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAg
ICAgIF90aGlzLl9vblBvaW50ZXJEb3duKGV2dCk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMu
X29uUG9pbnRlck1vdmVIYW5kbGVyUmVmID0gZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAg
X3RoaXMuX29uUG9pbnRlck1vdmUoZXZ0KTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fb25Q
b2ludGVyVXBIYW5kbGVyUmVmID0gZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgX3RoaXMu
X29uUG9pbnRlclVwKGV2dCk7CisgICAgICAgIH07CisgICAgICAgIFZpcnR1YWxKb3lzdGljay5D
YW52YXMuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLl9vblBvaW50ZXJEb3du
SGFuZGxlclJlZiwgZmFsc2UpOworICAgICAgICBWaXJ0dWFsSm95c3RpY2suQ2FudmFzLmFkZEV2
ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgdGhpcy5fb25Qb2ludGVyTW92ZUhhbmRsZXJSZWYs
IGZhbHNlKTsKKyAgICAgICAgVmlydHVhbEpveXN0aWNrLkNhbnZhcy5hZGRFdmVudExpc3RlbmVy
KCdwb2ludGVydXAnLCB0aGlzLl9vblBvaW50ZXJVcEhhbmRsZXJSZWYsIGZhbHNlKTsKKyAgICAg
ICAgVmlydHVhbEpveXN0aWNrLkNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyb3V0Jywg
dGhpcy5fb25Qb2ludGVyVXBIYW5kbGVyUmVmLCBmYWxzZSk7CisgICAgICAgIFZpcnR1YWxKb3lz
dGljay5DYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCBmdW5jdGlvbiAoZXZ0
KSB7CisgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsgLy8gRGlzYWJsZXMgc3lzdGVt
IG1lbnUKKyAgICAgICAgfSwgZmFsc2UpOworICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
ZnVuY3Rpb24gKCkgeyBfdGhpcy5fZHJhd1ZpcnR1YWxKb3lzdGljaygpOyB9KTsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogRGVmaW5lcyBqb3lzdGljayBzZW5zaWJpbGl0eSAoaWUuIHRoZSByYXRp
byBiZXRlZW4gYSBwaHlzaWNhbCBtb3ZlIGFuZCB2aXJ0dWFsIGpveXN0aWNrIHBvc2l0aW9uIGNo
YW5nZSkKKyAgICAgKiBAcGFyYW0gbmV3Sm95c3RpY2tTZW5zaWJpbGl0eSBkZWZpbmVzIHRoZSBu
ZXcgc2Vuc2liaWxpdHkKKyAgICAgKi8KKyAgICBWaXJ0dWFsSm95c3RpY2sucHJvdG90eXBlLnNl
dEpveXN0aWNrU2Vuc2liaWxpdHkgPSBmdW5jdGlvbiAobmV3Sm95c3RpY2tTZW5zaWJpbGl0eSkg
eworICAgICAgICB0aGlzLl9qb3lzdGlja1NlbnNpYmlsaXR5ID0gbmV3Sm95c3RpY2tTZW5zaWJp
bGl0eTsKKyAgICAgICAgdGhpcy5faW52ZXJzZWRTZW5zaWJpbGl0eSA9IDEgLyAodGhpcy5fam95
c3RpY2tTZW5zaWJpbGl0eSAvIDEwMDApOworICAgIH07CisgICAgVmlydHVhbEpveXN0aWNrLnBy
b3RvdHlwZS5fb25Qb2ludGVyRG93biA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHZhciBwb3Np
dGlvbk9uU2NyZWVuQ29uZGl0aW9uOworICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAg
ICAgIGlmICh0aGlzLl9sZWZ0Sm95c3RpY2sgPT09IHRydWUpIHsKKyAgICAgICAgICAgIHBvc2l0
aW9uT25TY3JlZW5Db25kaXRpb24gPSAoZS5jbGllbnRYIDwgVmlydHVhbEpveXN0aWNrLmhhbGZX
aWR0aCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwb3NpdGlvbk9u
U2NyZWVuQ29uZGl0aW9uID0gKGUuY2xpZW50WCA+IFZpcnR1YWxKb3lzdGljay5oYWxmV2lkdGgp
OworICAgICAgICB9CisgICAgICAgIGlmIChwb3NpdGlvbk9uU2NyZWVuQ29uZGl0aW9uICYmIHRo
aXMuX2pveXN0aWNrUG9pbnRlcklEIDwgMCkgeworICAgICAgICAgICAgLy8gRmlyc3QgY29udGFj
dCB3aWxsIGJlIGRlZGljYXRlZCB0byB0aGUgdmlydHVhbCBqb3lzdGljaworICAgICAgICAgICAg
dGhpcy5fam95c3RpY2tQb2ludGVySUQgPSBlLnBvaW50ZXJJZDsKKyAgICAgICAgICAgIHRoaXMu
X2pveXN0aWNrUG9pbnRlclN0YXJ0UG9zLnggPSBlLmNsaWVudFg7CisgICAgICAgICAgICB0aGlz
Ll9qb3lzdGlja1BvaW50ZXJTdGFydFBvcy55ID0gZS5jbGllbnRZOworICAgICAgICAgICAgdGhp
cy5fam95c3RpY2tQb2ludGVyUG9zID0gdGhpcy5fam95c3RpY2tQb2ludGVyU3RhcnRQb3MuY2xv
bmUoKTsKKyAgICAgICAgICAgIHRoaXMuX2pveXN0aWNrUHJldmlvdXNQb2ludGVyUG9zID0gdGhp
cy5fam95c3RpY2tQb2ludGVyU3RhcnRQb3MuY2xvbmUoKTsKKyAgICAgICAgICAgIHRoaXMuX2Rl
bHRhSm95c3RpY2tWZWN0b3IueCA9IDA7CisgICAgICAgICAgICB0aGlzLl9kZWx0YUpveXN0aWNr
VmVjdG9yLnkgPSAwOworICAgICAgICAgICAgdGhpcy5wcmVzc2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHRoaXMuX3RvdWNoZXMuYWRkKGUucG9pbnRlcklkLnRvU3RyaW5nKCksIGUpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gWW91IGNhbiBvbmx5IHRyaWdnZXIg
dGhlIGFjdGlvbiBidXR0b25zIHdpdGggYSBqb3lzdGljayBkZWNsYXJlZAorICAgICAgICAgICAg
aWYgKFZpcnR1YWxKb3lzdGljay5fZ2xvYmFsSm95c3RpY2tJbmRleCA8IDIgJiYgdGhpcy5fYWN0
aW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYWN0aW9uKCk7CisgICAgICAgICAgICAgICAg
dGhpcy5fdG91Y2hlcy5hZGQoZS5wb2ludGVySWQudG9TdHJpbmcoKSwgeyB4OiBlLmNsaWVudFgs
IHk6IGUuY2xpZW50WSwgcHJldlg6IGUuY2xpZW50WCwgcHJldlk6IGUuY2xpZW50WSB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgVmlydHVhbEpveXN0aWNrLnByb3Rv
dHlwZS5fb25Qb2ludGVyTW92ZSA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIC8vIElmIHRoZSBj
dXJyZW50IHBvaW50ZXIgaXMgdGhlIG9uZSBhc3NvY2lhdGVkIHRvIHRoZSBqb3lzdGljayAoZmly
c3QgdG91Y2ggY29udGFjdCkKKyAgICAgICAgaWYgKHRoaXMuX2pveXN0aWNrUG9pbnRlcklEID09
IGUucG9pbnRlcklkKSB7CisgICAgICAgICAgICB0aGlzLl9qb3lzdGlja1BvaW50ZXJQb3MueCA9
IGUuY2xpZW50WDsKKyAgICAgICAgICAgIHRoaXMuX2pveXN0aWNrUG9pbnRlclBvcy55ID0gZS5j
bGllbnRZOworICAgICAgICAgICAgdGhpcy5fZGVsdGFKb3lzdGlja1ZlY3RvciA9IHRoaXMuX2pv
eXN0aWNrUG9pbnRlclBvcy5jbG9uZSgpOworICAgICAgICAgICAgdGhpcy5fZGVsdGFKb3lzdGlj
a1ZlY3RvciA9IHRoaXMuX2RlbHRhSm95c3RpY2tWZWN0b3Iuc3VidHJhY3QodGhpcy5fam95c3Rp
Y2tQb2ludGVyU3RhcnRQb3MpOworICAgICAgICAgICAgdmFyIGRpcmVjdGlvbkxlZnRSaWdodCA9
IHRoaXMucmV2ZXJzZUxlZnRSaWdodCA/IC0xIDogMTsKKyAgICAgICAgICAgIHZhciBkZWx0YUpv
eXN0aWNrWCA9IGRpcmVjdGlvbkxlZnRSaWdodCAqIHRoaXMuX2RlbHRhSm95c3RpY2tWZWN0b3Iu
eCAvIHRoaXMuX2ludmVyc2VkU2Vuc2liaWxpdHk7CisgICAgICAgICAgICBzd2l0Y2ggKHRoaXMu
X2F4aXNUYXJnZXRlZEJ5TGVmdEFuZFJpZ2h0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBKb3lz
dGlja0F4aXMuWDoKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWx0YVBvc2l0aW9uLnggPSBN
YXRoLm1pbigxLCBNYXRoLm1heCgtMSwgZGVsdGFKb3lzdGlja1gpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBKb3lzdGlja0F4aXMuWToKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5kZWx0YVBvc2l0aW9uLnkgPSBNYXRoLm1pbigxLCBNYXRoLm1h
eCgtMSwgZGVsdGFKb3lzdGlja1gpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBKb3lzdGlja0F4aXMuWjoKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5kZWx0YVBvc2l0aW9uLnogPSBNYXRoLm1pbigxLCBNYXRoLm1heCgtMSwgZGVsdGFKb3lzdGlj
a1gpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgZGlyZWN0aW9uVXBEb3duID0gdGhpcy5yZXZlcnNlVXBEb3duID8gMSA6IC0xOwor
ICAgICAgICAgICAgdmFyIGRlbHRhSm95c3RpY2tZID0gZGlyZWN0aW9uVXBEb3duICogdGhpcy5f
ZGVsdGFKb3lzdGlja1ZlY3Rvci55IC8gdGhpcy5faW52ZXJzZWRTZW5zaWJpbGl0eTsKKyAgICAg
ICAgICAgIHN3aXRjaCAodGhpcy5fYXhpc1RhcmdldGVkQnlVcEFuZERvd24pIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIEpveXN0aWNrQXhpcy5YOgorICAgICAgICAgICAgICAgICAgICB0aGlzLmRl
bHRhUG9zaXRpb24ueCA9IE1hdGgubWluKDEsIE1hdGgubWF4KC0xLCBkZWx0YUpveXN0aWNrWSkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEpveXN0
aWNrQXhpcy5ZOgorICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbHRhUG9zaXRpb24ueSA9IE1h
dGgubWluKDEsIE1hdGgubWF4KC0xLCBkZWx0YUpveXN0aWNrWSkpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEpveXN0aWNrQXhpcy5aOgorICAgICAg
ICAgICAgICAgICAgICB0aGlzLmRlbHRhUG9zaXRpb24ueiA9IE1hdGgubWluKDEsIE1hdGgubWF4
KC0xLCBkZWx0YUpveXN0aWNrWSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBkYXRh
ID0gdGhpcy5fdG91Y2hlcy5nZXQoZS5wb2ludGVySWQudG9TdHJpbmcoKSk7CisgICAgICAgICAg
ICBpZiAoZGF0YSkgeworICAgICAgICAgICAgICAgIGRhdGEueCA9IGUuY2xpZW50WDsKKyAgICAg
ICAgICAgICAgICBkYXRhLnkgPSBlLmNsaWVudFk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworICAgIFZpcnR1YWxKb3lzdGljay5wcm90b3R5cGUuX29uUG9pbnRlclVwID0gZnVu
Y3Rpb24gKGUpIHsKKyAgICAgICAgaWYgKHRoaXMuX2pveXN0aWNrUG9pbnRlcklEID09IGUucG9p
bnRlcklkKSB7CisgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmNs
ZWFyUmVjdCh0aGlzLl9qb3lzdGlja1BvaW50ZXJTdGFydFBvcy54IC0gNjQsIHRoaXMuX2pveXN0
aWNrUG9pbnRlclN0YXJ0UG9zLnkgLSA2NCwgMTI4LCAxMjgpOworICAgICAgICAgICAgVmlydHVh
bEpveXN0aWNrLnZqQ2FudmFzQ29udGV4dC5jbGVhclJlY3QodGhpcy5fam95c3RpY2tQcmV2aW91
c1BvaW50ZXJQb3MueCAtIDQyLCB0aGlzLl9qb3lzdGlja1ByZXZpb3VzUG9pbnRlclBvcy55IC0g
NDIsIDg0LCA4NCk7CisgICAgICAgICAgICB0aGlzLl9qb3lzdGlja1BvaW50ZXJJRCA9IC0xOwor
ICAgICAgICAgICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICB2YXIgdG91Y2ggPSB0aGlzLl90b3VjaGVzLmdldChlLnBvaW50ZXJJ
ZC50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGlmICh0b3VjaCkgeworICAgICAgICAgICAgICAg
IFZpcnR1YWxKb3lzdGljay52akNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KHRvdWNoLnByZXZYIC0g
NDQsIHRvdWNoLnByZXZZIC0gNDQsIDg4LCA4OCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fZGVsdGFKb3lzdGlja1ZlY3Rvci54ID0gMDsKKyAgICAgICAgdGhpcy5f
ZGVsdGFKb3lzdGlja1ZlY3Rvci55ID0gMDsKKyAgICAgICAgdGhpcy5fdG91Y2hlcy5yZW1vdmUo
ZS5wb2ludGVySWQudG9TdHJpbmcoKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAqIENoYW5nZSB0
aGUgY29sb3Igb2YgdGhlIHZpcnR1YWwgam95c3RpY2sKKyAgICAqIEBwYXJhbSBuZXdDb2xvciBh
IHN0cmluZyB0aGF0IG11c3QgYmUgYSBDU1MgY29sb3IgdmFsdWUgKGxpa2UgInJlZCIpIG9yIHRo
ZSBoZXhhIHZhbHVlIChsaWtlICIjRkYwMDAwIikKKyAgICAqLworICAgIFZpcnR1YWxKb3lzdGlj
ay5wcm90b3R5cGUuc2V0Sm95c3RpY2tDb2xvciA9IGZ1bmN0aW9uIChuZXdDb2xvcikgeworICAg
ICAgICB0aGlzLl9qb3lzdGlja0NvbG9yID0gbmV3Q29sb3I7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBEZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBqb3lzdGljayBpcyB0b3Vj
aGVkCisgICAgICogQHBhcmFtIGFjdGlvbiBkZWZpbmVzIHRoZSBjYWxsYmFjaworICAgICAqLwor
ICAgIFZpcnR1YWxKb3lzdGljay5wcm90b3R5cGUuc2V0QWN0aW9uT25Ub3VjaCA9IGZ1bmN0aW9u
IChhY3Rpb24pIHsKKyAgICAgICAgdGhpcy5fYWN0aW9uID0gYWN0aW9uOworICAgIH07CisgICAg
LyoqCisgICAgICogRGVmaW5lcyB3aGljaCBheGlzIHlvdSdkIGxpa2UgdG8gY29udHJvbCBmb3Ig
bGVmdCAmIHJpZ2h0CisgICAgICogQHBhcmFtIGF4aXMgZGVmaW5lcyB0aGUgYXhpcyB0byB1c2UK
KyAgICAgKi8KKyAgICBWaXJ0dWFsSm95c3RpY2sucHJvdG90eXBlLnNldEF4aXNGb3JMZWZ0Umln
aHQgPSBmdW5jdGlvbiAoYXhpcykgeworICAgICAgICBzd2l0Y2ggKGF4aXMpIHsKKyAgICAgICAg
ICAgIGNhc2UgSm95c3RpY2tBeGlzLlg6CisgICAgICAgICAgICBjYXNlIEpveXN0aWNrQXhpcy5Z
OgorICAgICAgICAgICAgY2FzZSBKb3lzdGlja0F4aXMuWjoKKyAgICAgICAgICAgICAgICB0aGlz
Ll9heGlzVGFyZ2V0ZWRCeUxlZnRBbmRSaWdodCA9IGF4aXM7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRoaXMuX2F4aXNUYXJn
ZXRlZEJ5TGVmdEFuZFJpZ2h0ID0gSm95c3RpY2tBeGlzLlg7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmluZXMgd2hpY2ggYXhp
cyB5b3UnZCBsaWtlIHRvIGNvbnRyb2wgZm9yIHVwICYgZG93bgorICAgICAqIEBwYXJhbSBheGlz
IGRlZmluZXMgdGhlIGF4aXMgdG8gdXNlCisgICAgICovCisgICAgVmlydHVhbEpveXN0aWNrLnBy
b3RvdHlwZS5zZXRBeGlzRm9yVXBEb3duID0gZnVuY3Rpb24gKGF4aXMpIHsKKyAgICAgICAgc3dp
dGNoIChheGlzKSB7CisgICAgICAgICAgICBjYXNlIEpveXN0aWNrQXhpcy5YOgorICAgICAgICAg
ICAgY2FzZSBKb3lzdGlja0F4aXMuWToKKyAgICAgICAgICAgIGNhc2UgSm95c3RpY2tBeGlzLlo6
CisgICAgICAgICAgICAgICAgdGhpcy5fYXhpc1RhcmdldGVkQnlVcEFuZERvd24gPSBheGlzOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICB0aGlzLl9heGlzVGFyZ2V0ZWRCeVVwQW5kRG93biA9IEpveXN0aWNrQXhpcy5ZOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfTsKKyAgICBWaXJ0dWFsSm95c3Rp
Y2sucHJvdG90eXBlLl9kcmF3VmlydHVhbEpveXN0aWNrID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy5wcmVzc2VkKSB7CisgICAgICAg
ICAgICB0aGlzLl90b3VjaGVzLmZvckVhY2goZnVuY3Rpb24gKGtleSwgdG91Y2gpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodG91Y2gucG9pbnRlcklkID09PSBfdGhpcy5fam95c3RpY2tQb2ludGVy
SUQpIHsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLnZqQ2FudmFzQ29udGV4
dC5jbGVhclJlY3QoX3RoaXMuX2pveXN0aWNrUG9pbnRlclN0YXJ0UG9zLnggLSA2NCwgX3RoaXMu
X2pveXN0aWNrUG9pbnRlclN0YXJ0UG9zLnkgLSA2NCwgMTI4LCAxMjgpOworICAgICAgICAgICAg
ICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmNsZWFyUmVjdChfdGhpcy5f
am95c3RpY2tQcmV2aW91c1BvaW50ZXJQb3MueCAtIDQyLCBfdGhpcy5fam95c3RpY2tQcmV2aW91
c1BvaW50ZXJQb3MueSAtIDQyLCA4NCwgODQpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
Sm95c3RpY2sudmpDYW52YXNDb250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmxpbmVXaWR0aCA9IDY7CisgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay52akNhbnZhc0NvbnRleHQuc3Ryb2tlU3R5bGUg
PSBfdGhpcy5fam95c3RpY2tDb2xvcjsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbEpveXN0
aWNrLnZqQ2FudmFzQ29udGV4dC5hcmMoX3RoaXMuX2pveXN0aWNrUG9pbnRlclN0YXJ0UG9zLngs
IF90aGlzLl9qb3lzdGlja1BvaW50ZXJTdGFydFBvcy55LCA0MCwgMCwgTWF0aC5QSSAqIDIsIHRy
dWUpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0
LnN0cm9rZSgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXND
b250ZXh0LmNsb3NlUGF0aCgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2su
dmpDYW52YXNDb250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
Sm95c3RpY2sudmpDYW52YXNDb250ZXh0LnN0cm9rZVN0eWxlID0gX3RoaXMuX2pveXN0aWNrQ29s
b3I7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay52akNhbnZhc0NvbnRleHQu
bGluZVdpZHRoID0gMjsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLnZqQ2Fu
dmFzQ29udGV4dC5hcmMoX3RoaXMuX2pveXN0aWNrUG9pbnRlclN0YXJ0UG9zLngsIF90aGlzLl9q
b3lzdGlja1BvaW50ZXJTdGFydFBvcy55LCA2MCwgMCwgTWF0aC5QSSAqIDIsIHRydWUpOworICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LnN0cm9rZSgp
OworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmNs
b3NlUGF0aCgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXND
b250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2su
dmpDYW52YXNDb250ZXh0LnN0cm9rZVN0eWxlID0gX3RoaXMuX2pveXN0aWNrQ29sb3I7CisgICAg
ICAgICAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay52akNhbnZhc0NvbnRleHQuYXJjKF90aGlz
Ll9qb3lzdGlja1BvaW50ZXJQb3MueCwgX3RoaXMuX2pveXN0aWNrUG9pbnRlclBvcy55LCA0MCwg
MCwgTWF0aC5QSSAqIDIsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3Rp
Y2sudmpDYW52YXNDb250ZXh0LnN0cm9rZSgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
Sm95c3RpY2sudmpDYW52YXNDb250ZXh0LmNsb3NlUGF0aCgpOworICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5fam95c3RpY2tQcmV2aW91c1BvaW50ZXJQb3MgPSBfdGhpcy5fam95c3RpY2tQb2lu
dGVyUG9zLmNsb25lKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmNs
ZWFyUmVjdCh0b3VjaC5wcmV2WCAtIDQ0LCB0b3VjaC5wcmV2WSAtIDQ0LCA4OCwgODgpOworICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmJlZ2luUGF0
aCgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0
LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxKb3lzdGlj
ay52akNhbnZhc0NvbnRleHQuYmVnaW5QYXRoKCk7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxKb3lzdGljay52akNhbnZhc0NvbnRleHQuc3Ryb2tlU3R5bGUgPSAicmVkIjsKKyAgICAgICAg
ICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLnZqQ2FudmFzQ29udGV4dC5saW5lV2lkdGggPSA2
OworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmFy
Yyh0b3VjaC54LCB0b3VjaC55LCA0MCwgMCwgTWF0aC5QSSAqIDIsIHRydWUpOworICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LnN0cm9rZSgpOworICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmNsb3NlUGF0
aCgpOworICAgICAgICAgICAgICAgICAgICB0b3VjaC5wcmV2WCA9IHRvdWNoLng7CisgICAgICAg
ICAgICAgICAgICAgIHRvdWNoLnByZXZZID0gdG91Y2gueTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
ZnVuY3Rpb24gKCkgeyBfdGhpcy5fZHJhd1ZpcnR1YWxKb3lzdGljaygpOyB9KTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJlbGVhc2UgaW50ZXJuYWwgSFRNTCBjYW52YXMKKyAgICAgKi8KKyAg
ICBWaXJ0dWFsSm95c3RpY2sucHJvdG90eXBlLnJlbGVhc2VDYW52YXMgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmIChWaXJ0dWFsSm95c3RpY2suQ2FudmFzKSB7CisgICAgICAgICAgICBWaXJ0
dWFsSm95c3RpY2suQ2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhp
cy5fb25Qb2ludGVyRG93bkhhbmRsZXJSZWYpOworICAgICAgICAgICAgVmlydHVhbEpveXN0aWNr
LkNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMuX29uUG9pbnRl
ck1vdmVIYW5kbGVyUmVmKTsKKyAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay5DYW52YXMucmVt
b3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5fb25Qb2ludGVyVXBIYW5kbGVyUmVm
KTsKKyAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay5DYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5l
cigncG9pbnRlcm91dCcsIHRoaXMuX29uUG9pbnRlclVwSGFuZGxlclJlZik7CisgICAgICAgICAg
ICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5fb25SZXNpemUpOwor
ICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChWaXJ0dWFsSm95c3RpY2suQ2Fu
dmFzKTsKKyAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay5DYW52YXMgPSBudWxsOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvLyBVc2VkIHRvIGRyYXcgdGhlIHZpcnR1YWwgam95c3RpY2sgaW5z
aWRlIGEgMkQgY2FudmFzIG9uIHRvcCBvZiB0aGUgV2ViR0wgcmVuZGVyaW5nIGNhbnZhcworICAg
IFZpcnR1YWxKb3lzdGljay5fZ2xvYmFsSm95c3RpY2tJbmRleCA9IDA7CisgICAgcmV0dXJuIFZp
cnR1YWxKb3lzdGljazsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy93
ZWJSZXF1ZXN0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL01pc2Mvd2ViUmVxdWVzdC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFdlYlJlcXVlc3QgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViUmVxdWVzdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2Vi
UmVxdWVzdDsgfSk7CisvKioKKyAqIEV4dGVuZGVkIHZlcnNpb24gb2YgWE1MSHR0cFJlcXVlc3Qg
d2l0aCBzdXBwb3J0IGZvciBjdXN0b21pemF0aW9ucyAoaGVhZGVycywgLi4uKQorICovCit2YXIg
V2ViUmVxdWVzdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBX
ZWJSZXF1ZXN0KCkgeworICAgICAgICB0aGlzLl94aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
KyAgICB9CisgICAgV2ViUmVxdWVzdC5wcm90b3R5cGUuX2luamVjdEN1c3RvbVJlcXVlc3RIZWFk
ZXJzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBrZXkgaW4gV2ViUmVxdWVzdC5D
dXN0b21SZXF1ZXN0SGVhZGVycykgeworICAgICAgICAgICAgdmFyIHZhbCA9IFdlYlJlcXVlc3Qu
Q3VzdG9tUmVxdWVzdEhlYWRlcnNba2V5XTsKKyAgICAgICAgICAgIGlmICh2YWwpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl94aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJS
ZXF1ZXN0LnByb3RvdHlwZSwgIm9ucHJvZ3Jlc3MiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIG9yIHNldHMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBsb2FkaW5nIHByb2dy
ZXNzIGNoYW5nZXMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3hoci5vbnByb2dyZXNzOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5feGhyLm9ucHJvZ3Jl
c3MgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFdlYlJlcXVlc3QucHJvdG90eXBlLCAicmVhZHlTdGF0ZSIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFJldHVybnMgY2xpZW50J3Mgc3RhdGUKKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3hoci5yZWFkeVN0YXRlOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViUmVxdWVzdC5w
cm90b3R5cGUsICJzdGF0dXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIGNs
aWVudCdzIHN0YXR1cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5feGhyLnN0YXR1czsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYlJlcXVlc3QucHJvdG90eXBlLCAic3RhdHVzVGV4
dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgY2xpZW50J3Mgc3RhdHVzIGFz
IGEgdGV4dAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5feGhyLnN0YXR1c1RleHQ7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJSZXF1ZXN0LnByb3RvdHlwZSwgInJlc3BvbnNlIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyBjbGllbnQncyByZXNwb25zZQorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5feGhyLnJlc3BvbnNlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoV2ViUmVxdWVzdC5wcm90b3R5cGUsICJyZXNwb25zZVVSTCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFJldHVybnMgY2xpZW50J3MgcmVzcG9uc2UgdXJsCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl94
aHIucmVzcG9uc2VVUkw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShXZWJSZXF1ZXN0LnByb3RvdHlwZSwgInJlc3BvbnNlVGV4dCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFJldHVybnMgY2xpZW50J3MgcmVzcG9uc2UgYXMgdGV4dAorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
eGhyLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFdlYlJlcXVlc3QucHJvdG90eXBlLCAicmVzcG9uc2VUeXBlIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBleHBlY3RlZCByZXNwb25zZSB0eXBlCisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl94aHIucmVzcG9uc2VUeXBlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5feGhyLnJlc3BvbnNlVHlwZSA9IHZhbHVl
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBXZWJSZXF1ZXN0LnByb3RvdHlwZS5hZGRFdmVudExp
c3RlbmVyID0gZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7CisgICAgICAgIHRo
aXMuX3hoci5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTsKKyAgICB9
OworICAgIFdlYlJlcXVlc3QucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlv
biAodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHsKKyAgICAgICAgdGhpcy5feGhyLnJlbW92ZUV2
ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ2FuY2VscyBhbnkgbmV0d29yayBhY3Rpdml0eQorICAgICAqLworICAgIFdlYlJlcXVl
c3QucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl94aHIuYWJv
cnQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEluaXRpYXRlcyB0aGUgcmVxdWVzdC4gVGhl
IG9wdGlvbmFsIGFyZ3VtZW50IHByb3ZpZGVzIHRoZSByZXF1ZXN0IGJvZHkuIFRoZSBhcmd1bWVu
dCBpcyBpZ25vcmVkIGlmIHJlcXVlc3QgbWV0aG9kIGlzIEdFVCBvciBIRUFECisgICAgICogQHBh
cmFtIGJvZHkgZGVmaW5lcyBhbiBvcHRpb25hbCByZXF1ZXN0IGJvZHkKKyAgICAgKi8KKyAgICBX
ZWJSZXF1ZXN0LnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKGJvZHkpIHsKKyAgICAgICAgaWYg
KFdlYlJlcXVlc3QuQ3VzdG9tUmVxdWVzdEhlYWRlcnMpIHsKKyAgICAgICAgICAgIHRoaXMuX2lu
amVjdEN1c3RvbVJlcXVlc3RIZWFkZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5feGhy
LnNlbmQoYm9keSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSByZXF1ZXN0IG1l
dGhvZCwgcmVxdWVzdCBVUkwKKyAgICAgKiBAcGFyYW0gbWV0aG9kIGRlZmluZXMgdGhlIG1ldGhv
ZCB0byB1c2UgKEdFVCwgUE9TVCwgZXRjLi4pCisgICAgICogQHBhcmFtIHVybCBkZWZpbmVzIHRo
ZSB1cmwgdG8gY29ubmVjdCB3aXRoCisgICAgICovCisgICAgV2ViUmVxdWVzdC5wcm90b3R5cGUu
b3BlbiA9IGZ1bmN0aW9uIChtZXRob2QsIHVybCkgeworICAgICAgICBmb3IgKHZhciBfaSA9IDAs
IF9hID0gV2ViUmVxdWVzdC5DdXN0b21SZXF1ZXN0TW9kaWZpZXJzOyBfaSA8IF9hLmxlbmd0aDsg
X2krKykgeworICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IF9hW19pXTsKKyAgICAgICAgICAgIHVw
ZGF0ZSh0aGlzLl94aHIsIHVybCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2xlYW4gdXJsCisg
ICAgICAgIHVybCA9IHVybC5yZXBsYWNlKCJmaWxlOmh0dHA6IiwgImh0dHA6Iik7CisgICAgICAg
IHVybCA9IHVybC5yZXBsYWNlKCJmaWxlOmh0dHBzOiIsICJodHRwczoiKTsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3hoci5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEN1c3RvbSBIVFRQIFJlcXVlc3QgSGVhZGVycyB0byBiZSBzZW50IHdpdGggWE1MSHR0
cFJlcXVlc3RzCisgICAgICogaS5lLiB3aGVuIGxvYWRpbmcgZmlsZXMsIHdoZXJlIHRoZSBzZXJ2
ZXIvc2VydmljZSBleHBlY3RzIGFuIEF1dGhvcml6YXRpb24gaGVhZGVyCisgICAgICovCisgICAg
V2ViUmVxdWVzdC5DdXN0b21SZXF1ZXN0SGVhZGVycyA9IHt9OworICAgIC8qKgorICAgICAqIEFk
ZCBjYWxsYmFjayBmdW5jdGlvbnMgaW4gdGhpcyBhcnJheSB0byB1cGRhdGUgYWxsIHRoZSByZXF1
ZXN0cyBiZWZvcmUgdGhleSBnZXQgc2VudCB0byB0aGUgbmV0d29yaworICAgICAqLworICAgIFdl
YlJlcXVlc3QuQ3VzdG9tUmVxdWVzdE1vZGlmaWVycyA9IG5ldyBBcnJheSgpOworICAgIHJldHVy
biBXZWJSZXF1ZXN0OworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NaXNjL3dv
cmtlclBvb2wudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTWlzYy93b3JrZXJQb29sLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogV29ya2VyUG9vbCAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJXb3JrZXJQb29sIiwgZnVuY3Rpb24oKSB7IHJldHVybiBXb3Jr
ZXJQb29sOyB9KTsKKy8qKgorICogSGVscGVyIGNsYXNzIHRvIHB1c2ggYWN0aW9ucyB0byBhIHBv
b2wgb2Ygd29ya2Vycy4KKyAqLwordmFyIFdvcmtlclBvb2wgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IKKyAgICAgKiBAcGFyYW0gd29y
a2VycyBBcnJheSBvZiB3b3JrZXJzIHRvIHVzZSBmb3IgYWN0aW9ucworICAgICAqLworICAgIGZ1
bmN0aW9uIFdvcmtlclBvb2wod29ya2VycykgeworICAgICAgICB0aGlzLl9wZW5kaW5nQWN0aW9u
cyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLl93b3JrZXJJbmZvcyA9IHdvcmtlcnMubWFw
KGZ1bmN0aW9uICh3b3JrZXIpIHsgcmV0dXJuICh7CisgICAgICAgICAgICB3b3JrZXI6IHdvcmtl
ciwKKyAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UKKyAgICAgICAgfSk7IH0pOworICAgIH0KKyAg
ICAvKioKKyAgICAgKiBUZXJtaW5hdGVzIGFsbCB3b3JrZXJzIGFuZCBjbGVhcnMgYW55IHBlbmRp
bmcgYWN0aW9ucy4KKyAgICAgKi8KKyAgICBXb3JrZXJQb29sLnByb3RvdHlwZS5kaXNwb3NlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fd29ya2Vy
SW5mb3M7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgd29ya2VySW5m
byA9IF9hW19pXTsKKyAgICAgICAgICAgIHdvcmtlckluZm8ud29ya2VyLnRlcm1pbmF0ZSgpOwor
ICAgICAgICB9CisgICAgICAgIGRlbGV0ZSB0aGlzLl93b3JrZXJJbmZvczsKKyAgICAgICAgZGVs
ZXRlIHRoaXMuX3BlbmRpbmdBY3Rpb25zOworICAgIH07CisgICAgLyoqCisgICAgICogUHVzaGVz
IGFuIGFjdGlvbiB0byB0aGUgd29ya2VyIHBvb2wuIElmIGFsbCB0aGUgd29ya2VycyBhcmUgYWN0
aXZlLCB0aGUgYWN0aW9uIHdpbGwgYmUKKyAgICAgKiBwZW5kZWQgdW50aWwgYSB3b3JrZXIgaGFz
IGNvbXBsZXRlZCBpdHMgYWN0aW9uLgorICAgICAqIEBwYXJhbSBhY3Rpb24gVGhlIGFjdGlvbiB0
byBwZXJmb3JtLiBDYWxsIG9uQ29tcGxldGUgd2hlbiB0aGUgYWN0aW9uIGlzIGNvbXBsZXRlLgor
ICAgICAqLworICAgIFdvcmtlclBvb2wucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoYWN0aW9u
KSB7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl93b3JrZXJJbmZvczsgX2kg
PCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciB3b3JrZXJJbmZvID0gX2FbX2ld
OworICAgICAgICAgICAgaWYgKCF3b3JrZXJJbmZvLmFjdGl2ZSkgeworICAgICAgICAgICAgICAg
IHRoaXMuX2V4ZWN1dGUod29ya2VySW5mbywgYWN0aW9uKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcGVuZGluZ0FjdGlv
bnMucHVzaChhY3Rpb24pOworICAgIH07CisgICAgV29ya2VyUG9vbC5wcm90b3R5cGUuX2V4ZWN1
dGUgPSBmdW5jdGlvbiAod29ya2VySW5mbywgYWN0aW9uKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIHdvcmtlckluZm8uYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgYWN0aW9u
KHdvcmtlckluZm8ud29ya2VyLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB3b3JrZXJJbmZv
LmFjdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAgdmFyIG5leHRBY3Rpb24gPSBfdGhpcy5fcGVu
ZGluZ0FjdGlvbnMuc2hpZnQoKTsKKyAgICAgICAgICAgIGlmIChuZXh0QWN0aW9uKSB7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX2V4ZWN1dGUod29ya2VySW5mbywgbmV4dEFjdGlvbik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgcmV0dXJuIFdvcmtlclBvb2w7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01vcnBoL2luZGV4LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTW9ycGgvaW5kZXgudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE1vcnBo
VGFyZ2V0LCBNb3JwaFRhcmdldE1hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9tb3JwaFRhcmdldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tb3JwaFRhcmdldCAqLyAiLi9Nb3JwaC9tb3Jw
aFRhcmdldC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNb3JwaFRhcmdldCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX21vcnBoVGFyZ2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1vcnBo
VGFyZ2V0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21vcnBoVGFyZ2V0TWFu
YWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9tb3JwaFRhcmdldE1hbmFnZXIgKi8gIi4vTW9ycGgvbW9ycGhUYXJnZXRNYW5hZ2VyLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk1vcnBoVGFyZ2V0TWFuYWdlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX21vcnBoVGFyZ2V0TWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJN
b3JwaFRhcmdldE1hbmFnZXIiXTsgfSk7CisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L01vcnBoL21vcnBoVGFyZ2V0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vTW9ycGgvbW9ycGhUYXJnZXQudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE1vcnBoVGFyZ2V0ICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1vcnBoVGFyZ2V0IiwgZnVuY3Rp
b24oKSB7IHJldHVybiBNb3JwaFRhcmdldDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICov
ICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5l
U3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVz
aGVzL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3Jh
dG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlz
Yy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisKKy8qKgor
ICogRGVmaW5lcyBhIHRhcmdldCB0byB1c2Ugd2l0aCBNb3JwaFRhcmdldE1hbmFnZXIKKyAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX21vcnBodGFyZ2V0
cworICovCit2YXIgTW9ycGhUYXJnZXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBNb3JwaFRhcmdldAorICAgICAqIEBwYXJhbSBu
YW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHRhcmdldAorICAgICAqIEBwYXJhbSBpbmZsdWVu
Y2UgZGVmaW5lcyB0aGUgaW5mbHVlbmNlIHRvIHVzZQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZp
bmVzIHRoZSBzY2VuZSB0aGUgbW9ycGh0YXJnZXQgYmVsb25ncyB0bworICAgICAqLworICAgIGZ1
bmN0aW9uIE1vcnBoVGFyZ2V0KAorICAgIC8qKiBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSB0YXJn
ZXQgKi8KKyAgICBuYW1lLCBpbmZsdWVuY2UsIHNjZW5lKSB7CisgICAgICAgIGlmIChpbmZsdWVu
Y2UgPT09IHZvaWQgMCkgeyBpbmZsdWVuY2UgPSAwOyB9CisgICAgICAgIGlmIChzY2VuZSA9PT0g
dm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBsaXN0IG9mIGFuaW1hdGlvbnMK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuYW5pbWF0aW9ucyA9IG5ldyBBcnJheSgpOworICAg
ICAgICB0aGlzLl9wb3NpdGlvbnMgPSBudWxsOworICAgICAgICB0aGlzLl9ub3JtYWxzID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fdGFuZ2VudHMgPSBudWxsOworICAgICAgICB0aGlzLl91dnMgPSBu
dWxsOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiB0aGUg
aW5mbHVlbmNlIGNoYW5nZXMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25JbmZsdWVuY2VD
aGFuZ2VkID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMu
X29uRGF0YUxheW91dENoYW5nZWQgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgdGhpcy5fYW5pbWF0aW9u
UHJvcGVydGllc092ZXJyaWRlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8
fCBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdp
bmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7CisgICAgICAgIHRoaXMuaW5mbHVlbmNlID0gaW5m
bHVlbmNlOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXQucHJv
dG90eXBlLCAiaW5mbHVlbmNlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBz
ZXRzIHRoZSBpbmZsdWVuY2Ugb2YgdGhpcyB0YXJnZXQgKGllLiBpdHMgd2VpZ2h0IGluIHRoZSBv
dmVyYWxsIG1vcnBoaW5nKQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5mbHVlbmNlOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uIChpbmZsdWVuY2UpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pbmZs
dWVuY2UgPT09IGluZmx1ZW5jZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMuX2luZmx1ZW5jZTsKKyAgICAg
ICAgICAgIHRoaXMuX2luZmx1ZW5jZSA9IGluZmx1ZW5jZTsKKyAgICAgICAgICAgIGlmICh0aGlz
Lm9uSW5mbHVlbmNlQ2hhbmdlZC5oYXNPYnNlcnZlcnMpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Lm9uSW5mbHVlbmNlQ2hhbmdlZC5ub3RpZnlPYnNlcnZlcnMocHJldmlvdXMgPT09IDAgfHwgaW5m
bHVlbmNlID09PSAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KE1vcnBoVGFyZ2V0LnByb3RvdHlwZSwgImFuaW1hdGlvblByb3Bl
cnRpZXNPdmVycmlkZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0
aGUgYW5pbWF0aW9uIHByb3BlcnRpZXMgb3ZlcnJpZGUKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9hbmltYXRpb25Qcm9wZXJ0
aWVzT3ZlcnJpZGUgJiYgdGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fc2NlbmUuYW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2FuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZTsKKyAgICAg
ICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMu
X2FuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXQucHJvdG90eXBlLCAiaGFzUG9z
aXRpb25zIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gZGVmaW5p
bmcgaWYgdGhlIHRhcmdldCBjb250YWlucyBwb3NpdGlvbiBkYXRhCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX3Bvc2l0
aW9uczsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vcnBo
VGFyZ2V0LnByb3RvdHlwZSwgImhhc05vcm1hbHMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIGEgYm9vbGVhbiBkZWZpbmluZyBpZiB0aGUgdGFyZ2V0IGNvbnRhaW5zIG5vcm1hbCBk
YXRhCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiAhIXRoaXMuX25vcm1hbHM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShNb3JwaFRhcmdldC5wcm90b3R5cGUsICJoYXNUYW5nZW50cyIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFuIGRlZmluaW5nIGlmIHRoZSB0YXJn
ZXQgY29udGFpbnMgdGFuZ2VudCBkYXRhCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX3RhbmdlbnRzOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXQucHJvdG90eXBl
LCAiaGFzVVZzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gZGVm
aW5pbmcgaWYgdGhlIHRhcmdldCBjb250YWlucyB0ZXh0dXJlIGNvb3JkaW5hdGVzIGRhdGEKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
ICEhdGhpcy5fdXZzOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBBZmZlY3Rz
IHBvc2l0aW9uIGRhdGEgdG8gdGhpcyB0YXJnZXQKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVz
IHRoZSBwb3NpdGlvbiBkYXRhIHRvIHVzZQorICAgICAqLworICAgIE1vcnBoVGFyZ2V0LnByb3Rv
dHlwZS5zZXRQb3NpdGlvbnMgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB2YXIgaGFkUG9z
aXRpb25zID0gdGhpcy5oYXNQb3NpdGlvbnM7CisgICAgICAgIHRoaXMuX3Bvc2l0aW9ucyA9IGRh
dGE7CisgICAgICAgIGlmIChoYWRQb3NpdGlvbnMgIT09IHRoaXMuaGFzUG9zaXRpb25zKSB7Cisg
ICAgICAgICAgICB0aGlzLl9vbkRhdGFMYXlvdXRDaGFuZ2VkLm5vdGlmeU9ic2VydmVycyh1bmRl
ZmluZWQpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBwb3Np
dGlvbiBkYXRhIHN0b3JlZCBpbiB0aGlzIHRhcmdldAorICAgICAqIEByZXR1cm5zIGEgRmxvYXRB
cnJheSBjb250YWluaW5nIHRoZSBwb3NpdGlvbiBkYXRhIChvciBudWxsIGlmIG5vdCBwcmVzZW50
KQorICAgICAqLworICAgIE1vcnBoVGFyZ2V0LnByb3RvdHlwZS5nZXRQb3NpdGlvbnMgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbnM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBZmZlY3RzIG5vcm1hbCBkYXRhIHRvIHRoaXMgdGFyZ2V0CisgICAgICogQHBh
cmFtIGRhdGEgZGVmaW5lcyB0aGUgbm9ybWFsIGRhdGEgdG8gdXNlCisgICAgICovCisgICAgTW9y
cGhUYXJnZXQucHJvdG90eXBlLnNldE5vcm1hbHMgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAg
ICB2YXIgaGFkTm9ybWFscyA9IHRoaXMuaGFzTm9ybWFsczsKKyAgICAgICAgdGhpcy5fbm9ybWFs
cyA9IGRhdGE7CisgICAgICAgIGlmIChoYWROb3JtYWxzICE9PSB0aGlzLmhhc05vcm1hbHMpIHsK
KyAgICAgICAgICAgIHRoaXMuX29uRGF0YUxheW91dENoYW5nZWQubm90aWZ5T2JzZXJ2ZXJzKHVu
ZGVmaW5lZCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIG5v
cm1hbCBkYXRhIHN0b3JlZCBpbiB0aGlzIHRhcmdldAorICAgICAqIEByZXR1cm5zIGEgRmxvYXRB
cnJheSBjb250YWluaW5nIHRoZSBub3JtYWwgZGF0YSAob3IgbnVsbCBpZiBub3QgcHJlc2VudCkK
KyAgICAgKi8KKyAgICBNb3JwaFRhcmdldC5wcm90b3R5cGUuZ2V0Tm9ybWFscyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vcm1hbHM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZmZlY3RzIHRhbmdlbnQgZGF0YSB0byB0aGlzIHRhcmdldAorICAgICAqIEBwYXJhbSBk
YXRhIGRlZmluZXMgdGhlIHRhbmdlbnQgZGF0YSB0byB1c2UKKyAgICAgKi8KKyAgICBNb3JwaFRh
cmdldC5wcm90b3R5cGUuc2V0VGFuZ2VudHMgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB2
YXIgaGFkVGFuZ2VudHMgPSB0aGlzLmhhc1RhbmdlbnRzOworICAgICAgICB0aGlzLl90YW5nZW50
cyA9IGRhdGE7CisgICAgICAgIGlmIChoYWRUYW5nZW50cyAhPT0gdGhpcy5oYXNUYW5nZW50cykg
eworICAgICAgICAgICAgdGhpcy5fb25EYXRhTGF5b3V0Q2hhbmdlZC5ub3RpZnlPYnNlcnZlcnMo
dW5kZWZpbmVkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
dGFuZ2VudCBkYXRhIHN0b3JlZCBpbiB0aGlzIHRhcmdldAorICAgICAqIEByZXR1cm5zIGEgRmxv
YXRBcnJheSBjb250YWluaW5nIHRoZSB0YW5nZW50IGRhdGEgKG9yIG51bGwgaWYgbm90IHByZXNl
bnQpCisgICAgICovCisgICAgTW9ycGhUYXJnZXQucHJvdG90eXBlLmdldFRhbmdlbnRzID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdGFuZ2VudHM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBZmZlY3RzIHRleHR1cmUgY29vcmRpbmF0ZXMgZGF0YSB0byB0aGlzIHRhcmdl
dAorICAgICAqIEBwYXJhbSBkYXRhIGRlZmluZXMgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgZGF0
YSB0byB1c2UKKyAgICAgKi8KKyAgICBNb3JwaFRhcmdldC5wcm90b3R5cGUuc2V0VVZzID0gZnVu
Y3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdmFyIGhhZFVWcyA9IHRoaXMuaGFzVVZzOworICAgICAg
ICB0aGlzLl91dnMgPSBkYXRhOworICAgICAgICBpZiAoaGFkVVZzICE9PSB0aGlzLmhhc1VWcykg
eworICAgICAgICAgICAgdGhpcy5fb25EYXRhTGF5b3V0Q2hhbmdlZC5ub3RpZnlPYnNlcnZlcnMo
dW5kZWZpbmVkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
dGV4dHVyZSBjb29yZGluYXRlcyBkYXRhIHN0b3JlZCBpbiB0aGlzIHRhcmdldAorICAgICAqIEBy
ZXR1cm5zIGEgRmxvYXRBcnJheSBjb250YWluaW5nIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGRh
dGEgKG9yIG51bGwgaWYgbm90IHByZXNlbnQpCisgICAgICovCisgICAgTW9ycGhUYXJnZXQucHJv
dG90eXBlLmdldFVWcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3V2czsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGN1cnJlbnQgdGFyZ2V0IGlu
dG8gYSBTZXJpYWxpemF0aW9uIG9iamVjdAorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxpemVk
IG9iamVjdAorICAgICAqLworICAgIE1vcnBoVGFyZ2V0LnByb3RvdHlwZS5zZXJpYWxpemUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QubmFtZSA9IHRoaXMubmFtZTsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5pbmZsdWVuY2UgPSB0aGlzLmluZmx1ZW5jZTsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5wb3NpdGlvbnMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlz
LmdldFBvc2l0aW9ucygpKTsKKyAgICAgICAgaWYgKHRoaXMuaWQgIT0gbnVsbCkgeworICAgICAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5pZCA9IHRoaXMuaWQ7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuaGFzTm9ybWFscykgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC5ub3JtYWxzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5nZXROb3JtYWxzKCkp
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmhhc1RhbmdlbnRzKSB7CisgICAgICAgICAg
ICBzZXJpYWxpemF0aW9uT2JqZWN0LnRhbmdlbnRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNh
bGwodGhpcy5nZXRUYW5nZW50cygpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5oYXNV
VnMpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudXZzID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlLmNhbGwodGhpcy5nZXRVVnMoKSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQW5p
bWF0aW9ucworICAgICAgICBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5BcHBlbmRTZXJpYWxpemVkQW5pbWF0aW9ucyh0
aGlzLCBzZXJpYWxpemF0aW9uT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25P
YmplY3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgIk1vcnBo
VGFyZ2V0IgorICAgICAqIEByZXR1cm5zICJNb3JwaFRhcmdldCIKKyAgICAgKi8KKyAgICBNb3Jw
aFRhcmdldC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gIk1vcnBoVGFyZ2V0IjsKKyAgICB9OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgbmV3IHRhcmdldCBmcm9tIHNlcmlhbGl6ZWQgZGF0YQorICAgICAqIEBw
YXJhbSBzZXJpYWxpemF0aW9uT2JqZWN0IGRlZmluZXMgdGhlIHNlcmlhbGl6ZWQgZGF0YSB0byB1
c2UKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBNb3JwaFRhcmdldAorICAgICAqLworICAgIE1vcnBo
VGFyZ2V0LlBhcnNlID0gZnVuY3Rpb24gKHNlcmlhbGl6YXRpb25PYmplY3QpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IG5ldyBNb3JwaFRhcmdldChzZXJpYWxpemF0aW9uT2JqZWN0Lm5hbWUsIHNl
cmlhbGl6YXRpb25PYmplY3QuaW5mbHVlbmNlKTsKKyAgICAgICAgcmVzdWx0LnNldFBvc2l0aW9u
cyhzZXJpYWxpemF0aW9uT2JqZWN0LnBvc2l0aW9ucyk7CisgICAgICAgIGlmIChzZXJpYWxpemF0
aW9uT2JqZWN0LmlkICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJlc3VsdC5pZCA9IHNlcmlhbGl6
YXRpb25PYmplY3QuaWQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlcmlhbGl6YXRpb25PYmpl
Y3Qubm9ybWFscykgeworICAgICAgICAgICAgcmVzdWx0LnNldE5vcm1hbHMoc2VyaWFsaXphdGlv
bk9iamVjdC5ub3JtYWxzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2VyaWFsaXphdGlvbk9i
amVjdC50YW5nZW50cykgeworICAgICAgICAgICAgcmVzdWx0LnNldFRhbmdlbnRzKHNlcmlhbGl6
YXRpb25PYmplY3QudGFuZ2VudHMpOworICAgICAgICB9CisgICAgICAgIGlmIChzZXJpYWxpemF0
aW9uT2JqZWN0LnV2cykgeworICAgICAgICAgICAgcmVzdWx0LnNldFVWcyhzZXJpYWxpemF0aW9u
T2JqZWN0LnV2cyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQW5pbWF0aW9ucworICAgICAgICBp
ZiAoc2VyaWFsaXphdGlvbk9iamVjdC5hbmltYXRpb25zKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBhbmltYXRpb25JbmRleCA9IDA7IGFuaW1hdGlvbkluZGV4IDwgc2VyaWFsaXphdGlvbk9iamVj
dC5hbmltYXRpb25zLmxlbmd0aDsgYW5pbWF0aW9uSW5kZXgrKykgeworICAgICAgICAgICAgICAg
IHZhciBwYXJzZWRBbmltYXRpb24gPSBzZXJpYWxpemF0aW9uT2JqZWN0LmFuaW1hdGlvbnNbYW5p
bWF0aW9uSW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbENsYXNzID0gX01pc2Nf
dHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIl9UeXBlU3RvcmUiXS5HZXRD
bGFzcygiQkFCWUxPTi5BbmltYXRpb24iKTsKKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxD
bGFzcykgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYW5pbWF0aW9ucy5wdXNoKGludGVy
bmFsQ2xhc3MuUGFyc2UocGFyc2VkQW5pbWF0aW9uKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgTW9ycGhUYXJnZXQgZnJvbSBtZXNoIGRhdGEKKyAgICAg
KiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBzb3VyY2UgbWVzaAorICAgICAqIEBwYXJhbSBuYW1l
IGRlZmluZXMgdGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgbmV3IHRhcmdldAorICAgICAqIEBwYXJh
bSBpbmZsdWVuY2UgZGVmaW5lcyB0aGUgaW5mbHVlbmNlIHRvIGF0dGFjaCB0byB0aGUgdGFyZ2V0
CisgICAgICogQHJldHVybnMgYSBuZXcgTW9ycGhUYXJnZXQKKyAgICAgKi8KKyAgICBNb3JwaFRh
cmdldC5Gcm9tTWVzaCA9IGZ1bmN0aW9uIChtZXNoLCBuYW1lLCBpbmZsdWVuY2UpIHsKKyAgICAg
ICAgaWYgKCFuYW1lKSB7CisgICAgICAgICAgICBuYW1lID0gbWVzaC5uYW1lOworICAgICAgICB9
CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgTW9ycGhUYXJnZXQobmFtZSwgaW5mbHVlbmNlLCBt
ZXNoLmdldFNjZW5lKCkpOworICAgICAgICByZXN1bHQuc2V0UG9zaXRpb25zKG1lc2guZ2V0VmVy
dGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
cnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCkpOworICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2Vz
RGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXROb3Jt
YWxzKG1lc2guZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVGFuZ2VudEtpbmQpKSB7Cisg
ICAgICAgICAgICByZXN1bHQuc2V0VGFuZ2VudHMobWVzaC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVGFu
Z2VudEtpbmQpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVBy
ZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
QnVmZmVyIl0uVVZLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0LnNldFVWcyhtZXNoLmdldFZl
cnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZXJ0ZXhCdWZmZXIiXS5VVktpbmQpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBNb3JwaFRhcmdldC5wcm90b3R5
cGUsICJpZCIsIHZvaWQgMCk7CisgICAgcmV0dXJuIE1vcnBoVGFyZ2V0OworfSgpKTsKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9Nb3JwaC9tb3JwaFRhcmdldE1hbmFnZXIudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTW9ycGgv
bW9ycGhUYXJnZXRNYW5hZ2VyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTW9ycGhUYXJnZXRNYW5hZ2VyICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1vcnBoVGFyZ2V0TWFuYWdlciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gTW9ycGhUYXJnZXRNYW5hZ2VyOyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3NtYXJ0QXJyYXkgKi8gIi4vTWlz
Yy9zbWFydEFycmF5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0Vu
Z2luZXMvZW5naW5lU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbW9ycGhU
YXJnZXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vbW9ycGhUYXJnZXQgKi8gIi4vTW9ycGgvbW9ycGhUYXJnZXQudHMiKTsKKworCisKKwor
LyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZGVmb3JtIG1lc2hlcyB1c2luZyBtb3JwaGlu
ZyBiZXR3ZWVuIGRpZmZlcmVudCB0YXJnZXRzCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9tb3JwaHRhcmdldHMKKyAqLwordmFyIE1vcnBoVGFyZ2V0
TWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgbmV3IE1vcnBoVGFyZ2V0TWFuYWdlcgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZp
bmVzIHRoZSBjdXJyZW50IHNjZW5lCisgICAgICovCisgICAgZnVuY3Rpb24gTW9ycGhUYXJnZXRN
YW5hZ2VyKHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0g
bnVsbDsgfQorICAgICAgICB0aGlzLl90YXJnZXRzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRo
aXMuX3RhcmdldEluZmx1ZW5jZUNoYW5nZWRPYnNlcnZlcnMgPSBuZXcgQXJyYXkoKTsKKyAgICAg
ICAgdGhpcy5fdGFyZ2V0RGF0YUxheW91dENoYW5nZWRPYnNlcnZlcnMgPSBuZXcgQXJyYXkoKTsK
KyAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0cyA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNtYXJ0QXJyYXkiXSgxNik7CisgICAgICAgIHRoaXMu
X3N1cHBvcnRzTm9ybWFscyA9IGZhbHNlOworICAgICAgICB0aGlzLl9zdXBwb3J0c1RhbmdlbnRz
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3N1cHBvcnRzVVZzID0gZmFsc2U7CisgICAgICAgIHRo
aXMuX3ZlcnRleENvdW50ID0gMDsKKyAgICAgICAgdGhpcy5fdW5pcXVlSWQgPSAwOworICAgICAg
ICB0aGlzLl90ZW1wSW5mbHVlbmNlcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIG5vcm1hbHMgbXVzdCBi
ZSBtb3JwaGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLmVuYWJsZU5vcm1hbE1vcnBoaW5n
ID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4g
aW5kaWNhdGluZyBpZiB0YW5nZW50cyBtdXN0IGJlIG1vcnBoZWQKKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMuZW5hYmxlVGFuZ2VudE1vcnBoaW5nID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBVViBtdXN0IGJlIG1v
cnBoZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZW5hYmxlVVZNb3JwaGluZyA9IHRydWU7
CisgICAgICAgIGlmICghc2NlbmUpIHsKKyAgICAgICAgICAgIHNjZW5lID0gX0VuZ2luZXNfZW5n
aW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lU3RvcmUiXS5MYXN0
Q3JlYXRlZFNjZW5lOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7Cisg
ICAgICAgIGlmICh0aGlzLl9zY2VuZSkgeworICAgICAgICAgICAgdGhpcy5fc2NlbmUubW9ycGhU
YXJnZXRNYW5hZ2Vycy5wdXNoKHRoaXMpOworICAgICAgICAgICAgdGhpcy5fdW5pcXVlSWQgPSB0
aGlzLl9zY2VuZS5nZXRVbmlxdWVJZCgpOworICAgICAgICB9CisgICAgfQorICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShNb3JwaFRhcmdldE1hbmFnZXIucHJvdG90eXBlLCAidW5pcXVlSWQiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB1bmlxdWUgSUQgb2YgdGhpcyBtYW5h
Z2VyCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl91bmlxdWVJZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KE1vcnBoVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUsICJ2ZXJ0ZXhDb3VudCIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBo
YW5kbGVkIGJ5IHRoaXMgbWFuYWdlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmVydGV4Q291bnQ7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3JwaFRhcmdldE1hbmFnZXIucHJv
dG90eXBlLCAic3VwcG9ydHNOb3JtYWxzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIG1hbmFnZXIgc3VwcG9ydHMgbW9ycGhpbmcg
b2Ygbm9ybWFscworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fc3VwcG9ydHNOb3JtYWxzICYmIHRoaXMuZW5hYmxlTm9ybWFs
TW9ycGhpbmc7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShN
b3JwaFRhcmdldE1hbmFnZXIucHJvdG90eXBlLCAic3VwcG9ydHNUYW5nZW50cyIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhpcyBtYW5h
Z2VyIHN1cHBvcnRzIG1vcnBoaW5nIG9mIHRhbmdlbnRzCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXBwb3J0c1Rhbmdl
bnRzICYmIHRoaXMuZW5hYmxlVGFuZ2VudE1vcnBoaW5nOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRNYW5hZ2VyLnByb3RvdHlwZSwgInN1
cHBvcnRzVVZzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5k
aWNhdGluZyBpZiB0aGlzIG1hbmFnZXIgc3VwcG9ydHMgbW9ycGhpbmcgb2YgdGV4dHVyZSBjb29y
ZGluYXRlcworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fc3VwcG9ydHNVVnMgJiYgdGhpcy5lbmFibGVVVk1vcnBoaW5nOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRN
YW5hZ2VyLnByb3RvdHlwZSwgIm51bVRhcmdldHMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBudW1iZXIgb2YgdGFyZ2V0cyBzdG9yZWQgaW4gdGhpcyBtYW5hZ2VyCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl90YXJnZXRzLmxlbmd0aDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KE1vcnBoVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUsICJudW1JbmZsdWVuY2VycyIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG51bWJlciBvZiBpbmZsdWVuY2Vy
cyAoaWUuIHRoZSBudW1iZXIgb2YgdGFyZ2V0cyB3aXRoIGluZmx1ZW5jZXMgPiAwKQorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fYWN0aXZlVGFyZ2V0cy5sZW5ndGg7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShNb3JwaFRhcmdldE1hbmFnZXIucHJvdG90eXBlLCAiaW5mbHVlbmNlcyIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgaW5mbHVlbmNlcyAo
b25lIHBlciB0YXJnZXQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbmZsdWVuY2VzOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBhY3RpdmUgdGFyZ2V0IGF0IHNwZWNpZmllZCBpbmRl
eC4gQW4gYWN0aXZlIHRhcmdldCBpcyBhIHRhcmdldCB3aXRoIGFuIGluZmx1ZW5jZSA+IDAKKyAg
ICAgKiBAcGFyYW0gaW5kZXggZGVmaW5lcyB0aGUgaW5kZXggdG8gY2hlY2sKKyAgICAgKiBAcmV0
dXJucyB0aGUgcmVxdWVzdGVkIHRhcmdldAorICAgICAqLworICAgIE1vcnBoVGFyZ2V0TWFuYWdl
ci5wcm90b3R5cGUuZ2V0QWN0aXZlVGFyZ2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7CisgICAgICAg
IHJldHVybiB0aGlzLl9hY3RpdmVUYXJnZXRzLmRhdGFbaW5kZXhdOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgdGFyZ2V0IGF0IHNwZWNpZmllZCBpbmRleAorICAgICAqIEBwYXJh
bSBpbmRleCBkZWZpbmVzIHRoZSBpbmRleCB0byBjaGVjaworICAgICAqIEByZXR1cm5zIHRoZSBy
ZXF1ZXN0ZWQgdGFyZ2V0CisgICAgICovCisgICAgTW9ycGhUYXJnZXRNYW5hZ2VyLnByb3RvdHlw
ZS5nZXRUYXJnZXQgPSBmdW5jdGlvbiAoaW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Rh
cmdldHNbaW5kZXhdOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGEgbmV3IHRhcmdldCB0
byB0aGlzIG1hbmFnZXIKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgdGhlIHRhcmdldCB0
byBhZGQKKyAgICAgKi8KKyAgICBNb3JwaFRhcmdldE1hbmFnZXIucHJvdG90eXBlLmFkZFRhcmdl
dCA9IGZ1bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgdGhpcy5fdGFyZ2V0cy5wdXNoKHRhcmdldCk7CisgICAgICAgIHRoaXMuX3RhcmdldEluZmx1
ZW5jZUNoYW5nZWRPYnNlcnZlcnMucHVzaCh0YXJnZXQub25JbmZsdWVuY2VDaGFuZ2VkLmFkZChm
dW5jdGlvbiAobmVlZFVwZGF0ZSkgeworICAgICAgICAgICAgX3RoaXMuX3N5bmNBY3RpdmVUYXJn
ZXRzKG5lZWRVcGRhdGUpOworICAgICAgICB9KSk7CisgICAgICAgIHRoaXMuX3RhcmdldERhdGFM
YXlvdXRDaGFuZ2VkT2JzZXJ2ZXJzLnB1c2godGFyZ2V0Ll9vbkRhdGFMYXlvdXRDaGFuZ2VkLmFk
ZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5fc3luY0FjdGl2ZVRhcmdldHModHJ1
ZSk7CisgICAgICAgIH0pKTsKKyAgICAgICAgdGhpcy5fc3luY0FjdGl2ZVRhcmdldHModHJ1ZSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGEgdGFyZ2V0IGZyb20gdGhlIG1hbmFn
ZXIKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgdGhlIHRhcmdldCB0byByZW1vdmUKKyAg
ICAgKi8KKyAgICBNb3JwaFRhcmdldE1hbmFnZXIucHJvdG90eXBlLnJlbW92ZVRhcmdldCA9IGZ1
bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fdGFyZ2V0cy5pbmRl
eE9mKHRhcmdldCk7CisgICAgICAgIGlmIChpbmRleCA+PSAwKSB7CisgICAgICAgICAgICB0aGlz
Ll90YXJnZXRzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgICAgICB0YXJnZXQub25JbmZsdWVu
Y2VDaGFuZ2VkLnJlbW92ZSh0aGlzLl90YXJnZXRJbmZsdWVuY2VDaGFuZ2VkT2JzZXJ2ZXJzLnNw
bGljZShpbmRleCwgMSlbMF0pOworICAgICAgICAgICAgdGFyZ2V0Ll9vbkRhdGFMYXlvdXRDaGFu
Z2VkLnJlbW92ZSh0aGlzLl90YXJnZXREYXRhTGF5b3V0Q2hhbmdlZE9ic2VydmVycy5zcGxpY2Uo
aW5kZXgsIDEpWzBdKTsKKyAgICAgICAgICAgIHRoaXMuX3N5bmNBY3RpdmVUYXJnZXRzKHRydWUp
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBjdXJy
ZW50IG1hbmFnZXIgaW50byBhIFNlcmlhbGl6YXRpb24gb2JqZWN0CisgICAgICogQHJldHVybnMg
dGhlIHNlcmlhbGl6ZWQgb2JqZWN0CisgICAgICovCisgICAgTW9ycGhUYXJnZXRNYW5hZ2VyLnBy
b3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0
aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaWQgPSB0aGlzLnVu
aXF1ZUlkOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRhcmdldHMgPSBbXTsKKyAgICAg
ICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3RhcmdldHM7IF9pIDwgX2EubGVuZ3RoOyBf
aSsrKSB7CisgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gX2FbX2ldOworICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC50YXJnZXRzLnB1c2godGFyZ2V0LnNlcmlhbGl6ZSgpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIE1v
cnBoVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3N5bmNBY3RpdmVUYXJnZXRzID0gZnVuY3Rpb24g
KG5lZWRVcGRhdGUpIHsKKyAgICAgICAgdmFyIGluZmx1ZW5jZUNvdW50ID0gMDsKKyAgICAgICAg
dGhpcy5fYWN0aXZlVGFyZ2V0cy5yZXNldCgpOworICAgICAgICB0aGlzLl9zdXBwb3J0c05vcm1h
bHMgPSB0cnVlOworICAgICAgICB0aGlzLl9zdXBwb3J0c1RhbmdlbnRzID0gdHJ1ZTsKKyAgICAg
ICAgdGhpcy5fc3VwcG9ydHNVVnMgPSB0cnVlOworICAgICAgICB0aGlzLl92ZXJ0ZXhDb3VudCA9
IDA7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl90YXJnZXRzOyBfaSA8IF9h
Lmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIHRhcmdldCA9IF9hW19pXTsKKyAgICAg
ICAgICAgIGlmICh0YXJnZXQuaW5mbHVlbmNlID09PSAwKSB7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9hY3RpdmVUYXJnZXRzLnB1
c2godGFyZ2V0KTsKKyAgICAgICAgICAgIHRoaXMuX3RlbXBJbmZsdWVuY2VzW2luZmx1ZW5jZUNv
dW50KytdID0gdGFyZ2V0LmluZmx1ZW5jZTsKKyAgICAgICAgICAgIHRoaXMuX3N1cHBvcnRzTm9y
bWFscyA9IHRoaXMuX3N1cHBvcnRzTm9ybWFscyAmJiB0YXJnZXQuaGFzTm9ybWFsczsKKyAgICAg
ICAgICAgIHRoaXMuX3N1cHBvcnRzVGFuZ2VudHMgPSB0aGlzLl9zdXBwb3J0c1RhbmdlbnRzICYm
IHRhcmdldC5oYXNUYW5nZW50czsKKyAgICAgICAgICAgIHRoaXMuX3N1cHBvcnRzVVZzID0gdGhp
cy5fc3VwcG9ydHNVVnMgJiYgdGFyZ2V0Lmhhc1VWczsKKyAgICAgICAgICAgIHZhciBwb3NpdGlv
bnMgPSB0YXJnZXQuZ2V0UG9zaXRpb25zKCk7CisgICAgICAgICAgICBpZiAocG9zaXRpb25zKSB7
CisgICAgICAgICAgICAgICAgdmFyIHZlcnRleENvdW50ID0gcG9zaXRpb25zLmxlbmd0aCAvIDM7
CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZlcnRleENvdW50ID09PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX3ZlcnRleENvdW50ID0gdmVydGV4Q291bnQ7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3ZlcnRleENvdW50ICE9PSB2
ZXJ0ZXhDb3VudCkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uRXJyb3IoIkluY29tcGF0aWJsZSB0YXJnZXQu
IFRhcmdldHMgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSB2ZXJ0aWNlcyBjb3VudC4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2luZmx1ZW5jZXMgfHwgdGhpcy5faW5mbHVl
bmNlcy5sZW5ndGggIT09IGluZmx1ZW5jZUNvdW50KSB7CisgICAgICAgICAgICB0aGlzLl9pbmZs
dWVuY2VzID0gbmV3IEZsb2F0MzJBcnJheShpbmZsdWVuY2VDb3VudCk7CisgICAgICAgIH0KKyAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGluZmx1ZW5jZUNvdW50OyBpbmRleCsr
KSB7CisgICAgICAgICAgICB0aGlzLl9pbmZsdWVuY2VzW2luZGV4XSA9IHRoaXMuX3RlbXBJbmZs
dWVuY2VzW2luZGV4XTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmVlZFVwZGF0ZSkgeworICAg
ICAgICAgICAgdGhpcy5zeW5jaHJvbml6ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTeW5jcmhvbml6ZSB0aGUgdGFyZ2V0cyB3aXRoIGFsbCB0aGUgbWVzaGVzIHVzaW5n
IHRoaXMgbW9ycGggdGFyZ2V0IG1hbmFnZXIKKyAgICAgKi8KKyAgICBNb3JwaFRhcmdldE1hbmFn
ZXIucHJvdG90eXBlLnN5bmNocm9uaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRo
aXMuX3NjZW5lKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8g
RmxhZyBtZXNoZXMgYXMgZGlydHkgdG8gcmVzeW5jIHdpdGggdGhlIGFjdGl2ZSB0YXJnZXRzCisg
ICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9zY2VuZS5tZXNoZXM7IF9pIDwgX2Eu
bGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IF9hW19pXTsKKyAgICAgICAg
ICAgIGlmIChtZXNoLm1vcnBoVGFyZ2V0TWFuYWdlciA9PT0gdGhpcykgeworICAgICAgICAgICAg
ICAgIG1lc2guX3N5bmNHZW9tZXRyeVdpdGhNb3JwaFRhcmdldE1hbmFnZXIoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLy8gU3RhdGljcworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgTW9ycGhUYXJnZXRNYW5hZ2VyIGZyb20gc2VyaWFsaXplZCBkYXRhCisg
ICAgICogQHBhcmFtIHNlcmlhbGl6YXRpb25PYmplY3QgZGVmaW5lcyB0aGUgc2VyaWFsaXplZCBk
YXRhCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAg
KiBAcmV0dXJucyB0aGUgbmV3IE1vcnBoVGFyZ2V0TWFuYWdlcgorICAgICAqLworICAgIE1vcnBo
VGFyZ2V0TWFuYWdlci5QYXJzZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0LCBzY2Vu
ZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IE1vcnBoVGFyZ2V0TWFuYWdlcihzY2VuZSk7
CisgICAgICAgIHJlc3VsdC5fdW5pcXVlSWQgPSBzZXJpYWxpemF0aW9uT2JqZWN0LmlkOworICAg
ICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gc2VyaWFsaXphdGlvbk9iamVjdC50YXJnZXRzOyBf
aSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIHRhcmdldERhdGEgPSBfYVtf
aV07CisgICAgICAgICAgICByZXN1bHQuYWRkVGFyZ2V0KF9tb3JwaFRhcmdldF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJNb3JwaFRhcmdldCJdLlBhcnNlKHRhcmdldERhdGEpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgcmV0dXJuIE1vcnBo
VGFyZ2V0TWFuYWdlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTmF2aWdh
dGlvbi9QbHVnaW5zL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL05hdmlnYXRpb24vUGx1Z2lucy9pbmRleC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IFJlY2FzdEpTUGx1Z2luLCBSZWNhc3RKU0Nyb3dkICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmVjYXN0SlNQbHVnaW5fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmVjYXN0SlNQbHVnaW4g
Ki8gIi4vTmF2aWdhdGlvbi9QbHVnaW5zL3JlY2FzdEpTUGx1Z2luLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlJlY2FzdEpTUGx1Z2luIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcmVjYXN0SlNQbHVn
aW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUmVjYXN0SlNQbHVnaW4iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUmVjYXN0SlNDcm93ZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Jl
Y2FzdEpTUGx1Z2luX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJlY2FzdEpTQ3Jvd2Qi
XTsgfSk7CisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9OYXZpZ2F0aW9uL1BsdWdpbnMv
cmVjYXN0SlNQbHVnaW4udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vTmF2aWdhdGlvbi9QbHVnaW5zL3JlY2FzdEpTUGx1
Z2luLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUmVjYXN0SlNQbHVnaW4sIFJlY2FzdEpTQ3Jv
d2QgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVjYXN0SlNQbHVnaW4i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFJlY2FzdEpTUGx1Z2luOyB9KTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlJlY2FzdEpTQ3Jvd2QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJlY2FzdEpTQ3Jvd2Q7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9sb2dnZXIg
Ki8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVz
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVzL21lc2gudmVydGV4RGF0YSAqLyAiLi9NZXNoZXMv
bWVzaC52ZXJ0ZXhEYXRhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19t
ZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoICovICIuL01hdGhzL21hdGgu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVz
L2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisKKworCisKKworLyoqCisgKiBSZWNh
c3RKUyBuYXZpZ2F0aW9uIHBsdWdpbgorICovCit2YXIgUmVjYXN0SlNQbHVnaW4gPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIHJl
Y2FzdEpTIHBsdWdpbgorICAgICAqIEBwYXJhbSByZWNhc3RJbmplY3Rpb24gY2FuIGJlIHVzZWQg
dG8gaW5qZWN0IHlvdXIgb3duIHJlY2FzdCByZWZlcmVuY2UKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBSZWNhc3RKU1BsdWdpbihyZWNhc3RJbmplY3Rpb24pIHsKKyAgICAgICAgaWYgKHJlY2FzdElu
amVjdGlvbiA9PT0gdm9pZCAwKSB7IHJlY2FzdEluamVjdGlvbiA9IFJlY2FzdDsgfQorICAgICAg
ICAvKioKKyAgICAgICAgICogUmVmZXJlbmNlIHRvIHRoZSBSZWNhc3QgbGlicmFyeQorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5ianNSRUNBU1QgPSB7fTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIHBsdWdpbiBuYW1lCisgICAgICAgICAqLworICAgICAgICB0aGlzLm5hbWUgPSAiUmVjYXN0
SlNQbHVnaW4iOworICAgICAgICBpZiAodHlwZW9mIHJlY2FzdEluamVjdGlvbiA9PT0gImZ1bmN0
aW9uIikgeworICAgICAgICAgICAgcmVjYXN0SW5qZWN0aW9uKHRoaXMuYmpzUkVDQVNUKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuYmpzUkVDQVNUID0gcmVj
YXN0SW5qZWN0aW9uOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCgp
KSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siTG9nZ2VyIl0uRXJyb3IoIlJlY2FzdEpTIGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBtYWtl
IHN1cmUgeW91IGluY2x1ZGVkIHRoZSBqcyBmaWxlLiIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuYXZpZ2F0aW9uIG1l
c2gKKyAgICAgKiBAcGFyYW0gbWVzaGVzIGFycmF5IG9mIGFsbCB0aGUgZ2VvbWV0cnkgdXNlZCB0
byBjb21wdXRlIHRoZSBuYXZpZ2F0aW8gbWVzaAorICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIGJ1
bmNoIG9mIHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgZ2VvbWV0cnkKKyAgICAgKi8KKyAgICBS
ZWNhc3RKU1BsdWdpbi5wcm90b3R5cGUuY3JlYXRlTWF2TWVzaCA9IGZ1bmN0aW9uIChtZXNoZXMs
IHBhcmFtZXRlcnMpIHsKKyAgICAgICAgdmFyIHJjID0gbmV3IHRoaXMuYmpzUkVDQVNULnJjQ29u
ZmlnKCk7CisgICAgICAgIHJjLmNzID0gcGFyYW1ldGVycy5jczsKKyAgICAgICAgcmMuY2ggPSBw
YXJhbWV0ZXJzLmNoOworICAgICAgICByYy5ib3JkZXJTaXplID0gMDsKKyAgICAgICAgcmMudGls
ZVNpemUgPSAwOworICAgICAgICByYy53YWxrYWJsZVNsb3BlQW5nbGUgPSBwYXJhbWV0ZXJzLndh
bGthYmxlU2xvcGVBbmdsZTsKKyAgICAgICAgcmMud2Fsa2FibGVIZWlnaHQgPSBwYXJhbWV0ZXJz
LndhbGthYmxlSGVpZ2h0OworICAgICAgICByYy53YWxrYWJsZUNsaW1iID0gcGFyYW1ldGVycy53
YWxrYWJsZUNsaW1iOworICAgICAgICByYy53YWxrYWJsZVJhZGl1cyA9IHBhcmFtZXRlcnMud2Fs
a2FibGVSYWRpdXM7CisgICAgICAgIHJjLm1heEVkZ2VMZW4gPSBwYXJhbWV0ZXJzLm1heEVkZ2VM
ZW47CisgICAgICAgIHJjLm1heFNpbXBsaWZpY2F0aW9uRXJyb3IgPSBwYXJhbWV0ZXJzLm1heFNp
bXBsaWZpY2F0aW9uRXJyb3I7CisgICAgICAgIHJjLm1pblJlZ2lvbkFyZWEgPSBwYXJhbWV0ZXJz
Lm1pblJlZ2lvbkFyZWE7CisgICAgICAgIHJjLm1lcmdlUmVnaW9uQXJlYSA9IHBhcmFtZXRlcnMu
bWVyZ2VSZWdpb25BcmVhOworICAgICAgICByYy5tYXhWZXJ0c1BlclBvbHkgPSBwYXJhbWV0ZXJz
Lm1heFZlcnRzUGVyUG9seTsKKyAgICAgICAgcmMuZGV0YWlsU2FtcGxlRGlzdCA9IHBhcmFtZXRl
cnMuZGV0YWlsU2FtcGxlRGlzdDsKKyAgICAgICAgcmMuZGV0YWlsU2FtcGxlTWF4RXJyb3IgPSBw
YXJhbWV0ZXJzLmRldGFpbFNhbXBsZU1heEVycm9yOworICAgICAgICB0aGlzLm5hdk1lc2ggPSBu
ZXcgdGhpcy5ianNSRUNBU1QuTmF2TWVzaCgpOworICAgICAgICB2YXIgaW5kZXg7CisgICAgICAg
IHZhciB0cmk7CisgICAgICAgIHZhciBwdDsKKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAg
ICAgICAgdmFyIHBvc2l0aW9ucyA9IFtdOworICAgICAgICB2YXIgb2Zmc2V0ID0gMDsKKyAgICAg
ICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAg
ICAgICAgICAgaWYgKG1lc2hlc1tpbmRleF0pIHsKKyAgICAgICAgICAgICAgICB2YXIgbWVzaCA9
IG1lc2hlc1tpbmRleF07CisgICAgICAgICAgICAgICAgdmFyIG1lc2hJbmRpY2VzID0gbWVzaC5n
ZXRJbmRpY2VzKCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXNoSW5kaWNlcykgeworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdmFyIG1lc2hQb3NpdGlvbnMgPSBtZXNoLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktp
bmQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXNoUG9zaXRpb25zKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB2YXIgd20gPSBtZXNoLmNvbXB1dGVXb3JsZE1hdHJpeChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgZm9yICh0cmkgPSAwOyB0cmkgPCBtZXNoSW5kaWNlcy5sZW5ndGg7IHRyaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChtZXNoSW5kaWNlc1t0cmldICsg
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9y
bWVkID0gX01hdGhzX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJd
Llplcm8oKTsKKyAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBfTWF0aHNfbWF0aF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAgICAg
ICAgIGZvciAocHQgPSAwOyBwdCA8IG1lc2hQb3NpdGlvbnMubGVuZ3RoOyBwdCArPSAzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihtZXNoUG9zaXRpb25zLCBwdCwgcG9zaXRpb24p
OworICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihwb3NpdGlvbiwgd20s
IHRyYW5zZm9ybWVkKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godHJhbnNm
b3JtZWQueCwgdHJhbnNmb3JtZWQueSwgdHJhbnNmb3JtZWQueik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIG9mZnNldCArPSBtZXNoUG9zaXRpb25zLmxlbmd0aCAvIDM7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5uYXZNZXNoLmJ1aWxkKHBvc2l0
aW9ucywgb2Zmc2V0LCBpbmRpY2VzLCBpbmRpY2VzLmxlbmd0aCwgcmMpOworICAgIH07CisgICAg
LyoqCisgICAgICogQ3JlYXRlIGEgbmF2aWdhdGlvbiBtZXNoIGRlYnVnIG1lc2gKKyAgICAgKiBA
cGFyYW0gc2NlbmUgaXMgd2hlcmUgdGhlIG1lc2ggd2lsbCBiZSBhZGRlZAorICAgICAqIEByZXR1
cm5zIGRlYnVnIGRpc3BsYXkgbWVzaAorICAgICAqLworICAgIFJlY2FzdEpTUGx1Z2luLnByb3Rv
dHlwZS5jcmVhdGVEZWJ1Z05hdk1lc2ggPSBmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICAgICAgdmFy
IHRyaTsKKyAgICAgICAgdmFyIHB0OworICAgICAgICB2YXIgZGVidWdOYXZNZXNoID0gdGhpcy5u
YXZNZXNoLmdldERlYnVnTmF2TWVzaCgpOworICAgICAgICB2YXIgdHJpYW5nbGVDb3VudCA9IGRl
YnVnTmF2TWVzaC5nZXRUcmlhbmdsZUNvdW50KCk7CisgICAgICAgIHZhciBpbmRpY2VzID0gW107
CisgICAgICAgIHZhciBwb3NpdGlvbnMgPSBbXTsKKyAgICAgICAgZm9yICh0cmkgPSAwOyB0cmkg
PCB0cmlhbmdsZUNvdW50ICogMzsgdHJpKyspIHsKKyAgICAgICAgICAgIGluZGljZXMucHVzaCh0
cmkpOworICAgICAgICB9CisgICAgICAgIGZvciAodHJpID0gMDsgdHJpIDwgdHJpYW5nbGVDb3Vu
dDsgdHJpKyspIHsKKyAgICAgICAgICAgIGZvciAocHQgPSAwOyBwdCA8IDM7IHB0KyspIHsKKyAg
ICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBkZWJ1Z05hdk1lc2guZ2V0VHJpYW5nbGUodHJpKS5n
ZXRQb2ludChwdCk7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2gocG9pbnQueCwgcG9p
bnQueSwgcG9pbnQueik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIG1l
c2ggPSBuZXcgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1lc2gi
XSgiTmF2TWVzaERlYnVnIiwgc2NlbmUpOworICAgICAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBf
TWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0
ZXhEYXRhIl0oKTsKKyAgICAgICAgdmVydGV4RGF0YS5pbmRpY2VzID0gaW5kaWNlczsKKyAgICAg
ICAgdmVydGV4RGF0YS5wb3NpdGlvbnMgPSBwb3NpdGlvbnM7CisgICAgICAgIHZlcnRleERhdGEu
YXBwbHlUb01lc2gobWVzaCwgZmFsc2UpOworICAgICAgICByZXR1cm4gbWVzaDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIEdldCBhIG5hdmlnYXRpb24gbWVzaCBjb25zdHJhaW5lZCBwb3NpdGlv
biwgY2xvc2VzdCB0byB0aGUgcGFyYW1ldGVyIHBvc2l0aW9uCisgICAgICogQHBhcmFtIHBvc2l0
aW9uIHdvcmxkIHBvc2l0aW9uCisgICAgICogQHJldHVybnMgdGhlIGNsb3Nlc3QgcG9pbnQgdG8g
cG9zaXRpb24gY29uc3RyYWluZWQgYnkgdGhlIG5hdmlnYXRpb24gbWVzaAorICAgICAqLworICAg
IFJlY2FzdEpTUGx1Z2luLnByb3RvdHlwZS5nZXRDbG9zZXN0UG9pbnQgPSBmdW5jdGlvbiAocG9z
aXRpb24pIHsKKyAgICAgICAgdmFyIHAgPSBuZXcgdGhpcy5ianNSRUNBU1QuVmVjMyhwb3NpdGlv
bi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KTsKKyAgICAgICAgdmFyIHJldCA9IHRoaXMubmF2
TWVzaC5nZXRDbG9zZXN0UG9pbnQocCk7CisgICAgICAgIHZhciBwciA9IG5ldyBfTWF0aHNfbWF0
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0ocmV0LngsIHJldC55LCBy
ZXQueik7CisgICAgICAgIHJldHVybiBwcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCBh
IG5hdmlnYXRpb24gbWVzaCBjb25zdHJhaW5lZCBwb3NpdGlvbiwgd2l0aGluIGEgcGFydGljdWxh
ciByYWRpdXMKKyAgICAgKiBAcGFyYW0gcG9zaXRpb24gd29ybGQgcG9zaXRpb24KKyAgICAgKiBA
cGFyYW0gbWF4UmFkaXVzIHRoZSBtYXhpbXVtIGRpc3RhbmNlIHRvIHRoZSBjb25zdHJhaW5lZCB3
b3JsZCBwb3NpdGlvbgorICAgICAqIEByZXR1cm5zIHRoZSBjbG9zZXN0IHBvaW50IHRvIHBvc2l0
aW9uIGNvbnN0cmFpbmVkIGJ5IHRoZSBuYXZpZ2F0aW9uIG1lc2gKKyAgICAgKi8KKyAgICBSZWNh
c3RKU1BsdWdpbi5wcm90b3R5cGUuZ2V0UmFuZG9tUG9pbnRBcm91bmQgPSBmdW5jdGlvbiAocG9z
aXRpb24sIG1heFJhZGl1cykgeworICAgICAgICB2YXIgcCA9IG5ldyB0aGlzLmJqc1JFQ0FTVC5W
ZWMzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopOworICAgICAgICB2YXIgcmV0
ID0gdGhpcy5uYXZNZXNoLmdldFJhbmRvbVBvaW50QXJvdW5kKHAsIG1heFJhZGl1cyk7CisgICAg
ICAgIHZhciBwciA9IG5ldyBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJWZWN0b3IzIl0ocmV0LngsIHJldC55LCByZXQueik7CisgICAgICAgIHJldHVybiBwcjsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIENvbXB1dGUgdGhlIGZpbmFsIHBvc2l0aW9uIGZyb20gYSBz
ZWdtZW50IG1hZGUgb2YgZGVzdGluYXRpb24tcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gcG9zaXRp
b24gd29ybGQgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gZGVzdGluYXRpb24gd29ybGQgcG9zaXRp
b24KKyAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHBvaW50IGFsb25nIHRoZSBuYXZtZXNo
CisgICAgICovCisgICAgUmVjYXN0SlNQbHVnaW4ucHJvdG90eXBlLm1vdmVBbG9uZyA9IGZ1bmN0
aW9uIChwb3NpdGlvbiwgZGVzdGluYXRpb24pIHsKKyAgICAgICAgdmFyIHAgPSBuZXcgdGhpcy5i
anNSRUNBU1QuVmVjMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KTsKKyAgICAg
ICAgdmFyIGQgPSBuZXcgdGhpcy5ianNSRUNBU1QuVmVjMyhkZXN0aW5hdGlvbi54LCBkZXN0aW5h
dGlvbi55LCBkZXN0aW5hdGlvbi56KTsKKyAgICAgICAgdmFyIHJldCA9IHRoaXMubmF2TWVzaC5t
b3ZlQWxvbmcocCwgZCk7CisgICAgICAgIHZhciBwciA9IG5ldyBfTWF0aHNfbWF0aF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0ocmV0LngsIHJldC55LCByZXQueik7Cisg
ICAgICAgIHJldHVybiBwcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXB1dGUgYSBuYXZp
Z2F0aW9uIHBhdGggZnJvbSBzdGFydCB0byBlbmQuIFJldHVybnMgYW4gZW1wdHkgYXJyYXkgaWYg
bm8gcGF0aCBjYW4gYmUgY29tcHV0ZWQKKyAgICAgKiBAcGFyYW0gc3RhcnQgd29ybGQgcG9zaXRp
b24KKyAgICAgKiBAcGFyYW0gZW5kIHdvcmxkIHBvc2l0aW9uCisgICAgICogQHJldHVybnMgYXJy
YXkgY29udGFpbmluZyB3b3JsZCBwb3NpdGlvbiBjb21wb3NpbmcgdGhlIHBhdGgKKyAgICAgKi8K
KyAgICBSZWNhc3RKU1BsdWdpbi5wcm90b3R5cGUuY29tcHV0ZVBhdGggPSBmdW5jdGlvbiAoc3Rh
cnQsIGVuZCkgeworICAgICAgICB2YXIgcHQ7CisgICAgICAgIHZhciBzdGFydFBvcyA9IG5ldyB0
aGlzLmJqc1JFQ0FTVC5WZWMzKHN0YXJ0LngsIHN0YXJ0LnksIHN0YXJ0LnopOworICAgICAgICB2
YXIgZW5kUG9zID0gbmV3IHRoaXMuYmpzUkVDQVNULlZlYzMoZW5kLngsIGVuZC55LCBlbmQueik7
CisgICAgICAgIHZhciBuYXZQYXRoID0gdGhpcy5uYXZNZXNoLmNvbXB1dGVQYXRoKHN0YXJ0UG9z
LCBlbmRQb3MpOworICAgICAgICB2YXIgcG9pbnRDb3VudCA9IG5hdlBhdGguZ2V0UG9pbnRDb3Vu
dCgpOworICAgICAgICB2YXIgcG9zaXRpb25zID0gW107CisgICAgICAgIGZvciAocHQgPSAwOyBw
dCA8IHBvaW50Q291bnQ7IHB0KyspIHsKKyAgICAgICAgICAgIHZhciBwID0gbmF2UGF0aC5nZXRQ
b2ludChwdCk7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChuZXcgX01hdGhzX21hdGhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKHAueCwgcC55LCBwLnopKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcG9zaXRpb25zOworICAgIH07CisgICAgLyoqCisgICAg
ICogQ3JlYXRlIGEgbmV3IENyb3dkIHNvIHlvdSBjYW4gYWRkIGFnZW50cworICAgICAqIEBwYXJh
bSBtYXhBZ2VudHMgdGhlIG1heGltdW0gYWdlbnQgY291bnQgaW4gdGhlIGNyb3dkCisgICAgICog
QHBhcmFtIG1heEFnZW50UmFkaXVzIHRoZSBtYXhpbXVtIHJhZGl1cyBhbiBhZ2VudCBjYW4gaGF2
ZQorICAgICAqIEBwYXJhbSBzY2VuZSB0byBhdHRhY2ggdGhlIGNyb3dkIHRvCisgICAgICogQHJl
dHVybnMgdGhlIGNyb3dkIHlvdSBjYW4gYWRkIGFnZW50cyB0bworICAgICAqLworICAgIFJlY2Fz
dEpTUGx1Z2luLnByb3RvdHlwZS5jcmVhdGVDcm93ZCA9IGZ1bmN0aW9uIChtYXhBZ2VudHMsIG1h
eEFnZW50UmFkaXVzLCBzY2VuZSkgeworICAgICAgICB2YXIgY3Jvd2QgPSBuZXcgUmVjYXN0SlND
cm93ZCh0aGlzLCBtYXhBZ2VudHMsIG1heEFnZW50UmFkaXVzLCBzY2VuZSk7CisgICAgICAgIHJl
dHVybiBjcm93ZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgQm91bmRpbmcgYm94
IGV4dGVudCBmb3IgZG9pbmcgc3BhdGlhbCBxdWVyaWVzIChnZXRDbG9zZXN0UG9pbnQsIGdldFJh
bmRvbVBvaW50QXJvdW5kLCAuLi4pCisgICAgICogVGhlIHF1ZXJpZXMgd2lsbCB0cnkgdG8gZmlu
ZCBhIHNvbHV0aW9uIHdpdGhpbiB0aG9zZSBib3VuZHMKKyAgICAgKiBkZWZhdWx0IGlzICgxLDEs
MSkKKyAgICAgKiBAcGFyYW0gZXh0ZW50IHgseSx6IHZhbHVlIHRoYXQgZGVmaW5lIHRoZSBleHRl
bnQgYXJvdW5kIHRoZSBxdWVyaWVzIHBvaW50IG9mIHJlZmVyZW5jZQorICAgICAqLworICAgIFJl
Y2FzdEpTUGx1Z2luLnByb3RvdHlwZS5zZXREZWZhdWx0UXVlcnlFeHRlbnQgPSBmdW5jdGlvbiAo
ZXh0ZW50KSB7CisgICAgICAgIHZhciBleHQgPSBuZXcgdGhpcy5ianNSRUNBU1QuVmVjMyhleHRl
bnQueCwgZXh0ZW50LnksIGV4dGVudC56KTsKKyAgICAgICAgdGhpcy5uYXZNZXNoLnNldERlZmF1
bHRRdWVyeUV4dGVudChleHQpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBCb3Vu
ZGluZyBib3ggZXh0ZW50IHNwZWNpZmllZCBieSBzZXREZWZhdWx0UXVlcnlFeHRlbnQKKyAgICAg
KiBAcmV0dXJucyB0aGUgYm94IGV4dGVudCB2YWx1ZXMKKyAgICAgKi8KKyAgICBSZWNhc3RKU1Bs
dWdpbi5wcm90b3R5cGUuZ2V0RGVmYXVsdFF1ZXJ5RXh0ZW50ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgcCA9IHRoaXMubmF2TWVzaC5nZXREZWZhdWx0UXVlcnlFeHRlbnQoKTsKKyAgICAg
ICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZWN0b3IzIl0ocC54LCBwLnksIHAueik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3Nl
cworICAgICAqLworICAgIFJlY2FzdEpTUGx1Z2luLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rp
b24gKCkgeworICAgIH07CisgICAgLyoqCisgICAgICogSWYgdGhpcyBwbHVnaW4gaXMgc3VwcG9y
dGVkCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBwbHVnaW4gaXMgc3VwcG9ydGVkCisgICAgICov
CisgICAgUmVjYXN0SlNQbHVnaW4ucHJvdG90eXBlLmlzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5ianNSRUNBU1QgIT09IHVuZGVmaW5lZDsKKyAgICB9Owor
ICAgIHJldHVybiBSZWNhc3RKU1BsdWdpbjsKK30oKSk7CisKKy8qKgorICogUmVjYXN0IGRldG91
ciBjcm93ZCBpbXBsZW1lbnRhdGlvbgorICovCit2YXIgUmVjYXN0SlNDcm93ZCA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvcgorICAgICAq
IEBwYXJhbSBwbHVnaW4gcmVjYXN0SlMgcGx1Z2luCisgICAgICogQHBhcmFtIG1heEFnZW50cyB0
aGUgbWF4aW11bSBhZ2VudCBjb3VudCBpbiB0aGUgY3Jvd2QKKyAgICAgKiBAcGFyYW0gbWF4QWdl
bnRSYWRpdXMgdGhlIG1heGltdW0gcmFkaXVzIGFuIGFnZW50IGNhbiBoYXZlCisgICAgICogQHBh
cmFtIHNjZW5lIHRvIGF0dGFjaCB0aGUgY3Jvd2QgdG8KKyAgICAgKiBAcmV0dXJucyB0aGUgY3Jv
d2QgeW91IGNhbiBhZGQgYWdlbnRzIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gUmVjYXN0SlND
cm93ZChwbHVnaW4sIG1heEFnZW50cywgbWF4QWdlbnRSYWRpdXMsIHNjZW5lKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBMaW5rIHRvIHRoZSBk
ZXRvdXIgY3Jvd2QKKyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVjYXN0Q3Jvd2QgPSB7fTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIE9uZSB0cmFuc2Zvcm0gcGVyIGFnZW50CisgICAgICAg
ICAqLworICAgICAgICB0aGlzLnRyYW5zZm9ybXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEFsbCBhZ2VudHMgY3JlYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5hZ2VudHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmVy
IGZvciBjcm93ZCB1cGRhdGVzCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9vbkJlZm9yZUFu
aW1hdGlvbnNPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuYmpzUkVDQVNUUGx1Z2luID0g
cGx1Z2luOworICAgICAgICB0aGlzLnJlY2FzdENyb3dkID0gbmV3IHRoaXMuYmpzUkVDQVNUUGx1
Z2luLmJqc1JFQ0FTVC5Dcm93ZChtYXhBZ2VudHMsIG1heEFnZW50UmFkaXVzLCB0aGlzLmJqc1JF
Q0FTVFBsdWdpbi5uYXZNZXNoLmdldE5hdk1lc2goKSk7CisgICAgICAgIHRoaXMuX3NjZW5lID0g
c2NlbmU7CisgICAgICAgIHRoaXMuX29uQmVmb3JlQW5pbWF0aW9uc09ic2VydmVyID0gc2NlbmUu
b25CZWZvcmVBbmltYXRpb25zT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgX3RoaXMudXBkYXRlKHNjZW5lLmdldEVuZ2luZSgpLmdldERlbHRhVGltZSgpICogMC4wMDEp
OworICAgICAgICB9KTsKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIGEgbmV3IGFnZW50IHRv
IHRoZSBjcm93ZCB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVyIGEgY29ycmVzcG9uZGluZyB0
cmFuc2Zvcm1Ob2RlLgorICAgICAqIFlvdSBjYW4gYXR0YWNoIGFueXRoaW5nIHRvIHRoYXQgbm9k
ZS4gVGhlIG5vZGUgcG9zaXRpb24gaXMgdXBkYXRlZCBpbiB0aGUgc2NlbmUgdXBkYXRlIHRpY2su
CisgICAgICogQHBhcmFtIHBvcyB3b3JsZCBwb3NpdGlvbiB0aGF0IHdpbGwgYmUgY29uc3RyYWlu
ZWQgYnkgdGhlIG5hdmlnYXRpb24gbWVzaAorICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIGFnZW50
IHBhcmFtZXRlcnMKKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtIGhvb2tlZCB0byB0aGUgYWdlbnQg
dGhhdCB3aWxsIGJlIHVwZGF0ZSBieSB0aGUgc2NlbmUKKyAgICAgKiBAcmV0dXJucyBhZ2VudCBp
bmRleAorICAgICAqLworICAgIFJlY2FzdEpTQ3Jvd2QucHJvdG90eXBlLmFkZEFnZW50ID0gZnVu
Y3Rpb24gKHBvcywgcGFyYW1ldGVycywgdHJhbnNmb3JtKSB7CisgICAgICAgIHZhciBhZ2VudFBh
cmFtcyA9IG5ldyB0aGlzLmJqc1JFQ0FTVFBsdWdpbi5ianNSRUNBU1QuZHRDcm93ZEFnZW50UGFy
YW1zKCk7CisgICAgICAgIGFnZW50UGFyYW1zLnJhZGl1cyA9IHBhcmFtZXRlcnMucmFkaXVzOwor
ICAgICAgICBhZ2VudFBhcmFtcy5oZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodDsKKyAgICAgICAg
YWdlbnRQYXJhbXMubWF4QWNjZWxlcmF0aW9uID0gcGFyYW1ldGVycy5tYXhBY2NlbGVyYXRpb247
CisgICAgICAgIGFnZW50UGFyYW1zLm1heFNwZWVkID0gcGFyYW1ldGVycy5tYXhTcGVlZDsKKyAg
ICAgICAgYWdlbnRQYXJhbXMuY29sbGlzaW9uUXVlcnlSYW5nZSA9IHBhcmFtZXRlcnMuY29sbGlz
aW9uUXVlcnlSYW5nZTsKKyAgICAgICAgYWdlbnRQYXJhbXMucGF0aE9wdGltaXphdGlvblJhbmdl
ID0gcGFyYW1ldGVycy5wYXRoT3B0aW1pemF0aW9uUmFuZ2U7CisgICAgICAgIGFnZW50UGFyYW1z
LnNlcGFyYXRpb25XZWlnaHQgPSBwYXJhbWV0ZXJzLnNlcGFyYXRpb25XZWlnaHQ7CisgICAgICAg
IGFnZW50UGFyYW1zLnVwZGF0ZUZsYWdzID0gNzsKKyAgICAgICAgYWdlbnRQYXJhbXMub2JzdGFj
bGVBdm9pZGFuY2VUeXBlID0gMDsKKyAgICAgICAgYWdlbnRQYXJhbXMucXVlcnlGaWx0ZXJUeXBl
ID0gMDsKKyAgICAgICAgYWdlbnRQYXJhbXMudXNlckRhdGEgPSAwOworICAgICAgICB2YXIgYWdl
bnRJbmRleCA9IHRoaXMucmVjYXN0Q3Jvd2QuYWRkQWdlbnQobmV3IHRoaXMuYmpzUkVDQVNUUGx1
Z2luLmJqc1JFQ0FTVC5WZWMzKHBvcy54LCBwb3MueSwgcG9zLnopLCBhZ2VudFBhcmFtcyk7Cisg
ICAgICAgIHRoaXMudHJhbnNmb3Jtcy5wdXNoKHRyYW5zZm9ybSk7CisgICAgICAgIHRoaXMuYWdl
bnRzLnB1c2goYWdlbnRJbmRleCk7CisgICAgICAgIHJldHVybiBhZ2VudEluZGV4OworICAgIH07
CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYWdlbnQgcG9zaXRpb24gaW4gd29ybGQgc3Bh
Y2UKKyAgICAgKiBAcGFyYW0gaW5kZXggYWdlbnQgaW5kZXggcmV0dXJuZWQgYnkgYWRkQWdlbnQK
KyAgICAgKiBAcmV0dXJucyB3b3JsZCBzcGFjZSBwb3NpdGlvbgorICAgICAqLworICAgIFJlY2Fz
dEpTQ3Jvd2QucHJvdG90eXBlLmdldEFnZW50UG9zaXRpb24gPSBmdW5jdGlvbiAoaW5kZXgpIHsK
KyAgICAgICAgdmFyIGFnZW50UG9zID0gdGhpcy5yZWNhc3RDcm93ZC5nZXRBZ2VudFBvc2l0aW9u
KGluZGV4KTsKKyAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oYWdlbnRQb3MueCwgYWdlbnRQb3MueSwgYWdlbnRQb3Mu
eik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhZ2VudCB2ZWxvY2l0eSBp
biB3b3JsZCBzcGFjZQorICAgICAqIEBwYXJhbSBpbmRleCBhZ2VudCBpbmRleCByZXR1cm5lZCBi
eSBhZGRBZ2VudAorICAgICAqIEByZXR1cm5zIHdvcmxkIHNwYWNlIHZlbG9jaXR5CisgICAgICov
CisgICAgUmVjYXN0SlNDcm93ZC5wcm90b3R5cGUuZ2V0QWdlbnRWZWxvY2l0eSA9IGZ1bmN0aW9u
IChpbmRleCkgeworICAgICAgICB2YXIgYWdlbnRWZWwgPSB0aGlzLnJlY2FzdENyb3dkLmdldEFn
ZW50VmVsb2NpdHkoaW5kZXgpOworICAgICAgICByZXR1cm4gbmV3IF9NYXRoc19tYXRoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXShhZ2VudFZlbC54LCBhZ2VudFZlbC55
LCBhZ2VudFZlbC56KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFza3MgYSBwYXJ0aWN1bGFy
IGFnZW50IHRvIGdvIHRvIGEgZGVzdGluYXRpb24uIFRoYXQgZGVzdGluYXRpb24gaXMgY29uc3Ry
YWluZWQgYnkgdGhlIG5hdmlnYXRpb24gbWVzaAorICAgICAqIEBwYXJhbSBpbmRleCBhZ2VudCBp
bmRleCByZXR1cm5lZCBieSBhZGRBZ2VudAorICAgICAqIEBwYXJhbSBkZXN0aW5hdGlvbiB0YXJn
ZXRlZCB3b3JsZCBwb3NpdGlvbgorICAgICAqLworICAgIFJlY2FzdEpTQ3Jvd2QucHJvdG90eXBl
LmFnZW50R290byA9IGZ1bmN0aW9uIChpbmRleCwgZGVzdGluYXRpb24pIHsKKyAgICAgICAgdGhp
cy5yZWNhc3RDcm93ZC5hZ2VudEdvdG8oaW5kZXgsIG5ldyB0aGlzLmJqc1JFQ0FTVFBsdWdpbi5i
anNSRUNBU1QuVmVjMyhkZXN0aW5hdGlvbi54LCBkZXN0aW5hdGlvbi55LCBkZXN0aW5hdGlvbi56
KSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiByZW1vdmUgYSBwYXJ0aWN1bGFyIGFnZW50IHBy
ZXZpb3VzbHkgY3JlYXRlZAorICAgICAqIEBwYXJhbSBpbmRleCBhZ2VudCBpbmRleCByZXR1cm5l
ZCBieSBhZGRBZ2VudAorICAgICAqLworICAgIFJlY2FzdEpTQ3Jvd2QucHJvdG90eXBlLnJlbW92
ZUFnZW50ID0gZnVuY3Rpb24gKGluZGV4KSB7CisgICAgICAgIHRoaXMucmVjYXN0Q3Jvd2QucmVt
b3ZlQWdlbnQoaW5kZXgpOworICAgICAgICB2YXIgaXRlbSA9IHRoaXMuYWdlbnRzLmluZGV4T2Yo
aW5kZXgpOworICAgICAgICBpZiAoaXRlbSA+IC0xKSB7CisgICAgICAgICAgICB0aGlzLmFnZW50
cy5zcGxpY2UoaXRlbSwgMSk7CisgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybXMuc3BsaWNlKGl0
ZW0sIDEpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBnZXQgdGhlIGxpc3Qg
b2YgYWxsIGFnZW50cyBhdHRhY2hlZCB0byB0aGlzIGNyb3dkCisgICAgICogQHJldHVybnMgbGlz
dCBvZiBhZ2VudCBpbmRpY2VzCisgICAgICovCisgICAgUmVjYXN0SlNDcm93ZC5wcm90b3R5cGUu
Z2V0QWdlbnRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5hZ2VudHM7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBUaWNrIHVwZGF0ZSBkb25lIGJ5IHRoZSBTY2VuZS4gQWdl
bnQgcG9zaXRpb24vdmVsb2NpdHkvYWNjZWxlcmF0aW9uIGlzIHVwZGF0ZWQgYnkgdGhpcyBmdW5j
dGlvbgorICAgICAqIEBwYXJhbSBkZWx0YVRpbWUgaW4gc2Vjb25kcworICAgICAqLworICAgIFJl
Y2FzdEpTQ3Jvd2QucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHsKKyAg
ICAgICAgLy8gdXBkYXRlIGNyb3dkCisgICAgICAgIHRoaXMucmVjYXN0Q3Jvd2QudXBkYXRlKGRl
bHRhVGltZSk7CisgICAgICAgIC8vIHVwZGF0ZSB0cmFuc2Zvcm1zCisgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmFnZW50cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAg
ICAgICAgIHRoaXMudHJhbnNmb3Jtc1tpbmRleF0ucG9zaXRpb24gPSB0aGlzLmdldEFnZW50UG9z
aXRpb24odGhpcy5hZ2VudHNbaW5kZXhdKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0IHRoZSBCb3VuZGluZyBib3ggZXh0ZW50IGZvciBkb2luZyBzcGF0aWFsIHF1ZXJp
ZXMgKGdldENsb3Nlc3RQb2ludCwgZ2V0UmFuZG9tUG9pbnRBcm91bmQsIC4uLikKKyAgICAgKiBU
aGUgcXVlcmllcyB3aWxsIHRyeSB0byBmaW5kIGEgc29sdXRpb24gd2l0aGluIHRob3NlIGJvdW5k
cworICAgICAqIGRlZmF1bHQgaXMgKDEsMSwxKQorICAgICAqIEBwYXJhbSBleHRlbnQgeCx5LHog
dmFsdWUgdGhhdCBkZWZpbmUgdGhlIGV4dGVudCBhcm91bmQgdGhlIHF1ZXJpZXMgcG9pbnQgb2Yg
cmVmZXJlbmNlCisgICAgICovCisgICAgUmVjYXN0SlNDcm93ZC5wcm90b3R5cGUuc2V0RGVmYXVs
dFF1ZXJ5RXh0ZW50ID0gZnVuY3Rpb24gKGV4dGVudCkgeworICAgICAgICB2YXIgZXh0ID0gbmV3
IHRoaXMuYmpzUkVDQVNUUGx1Z2luLmJqc1JFQ0FTVC5WZWMzKGV4dGVudC54LCBleHRlbnQueSwg
ZXh0ZW50LnopOworICAgICAgICB0aGlzLnJlY2FzdENyb3dkLnNldERlZmF1bHRRdWVyeUV4dGVu
dChleHQpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBCb3VuZGluZyBib3ggZXh0
ZW50IHNwZWNpZmllZCBieSBzZXREZWZhdWx0UXVlcnlFeHRlbnQKKyAgICAgKiBAcmV0dXJucyB0
aGUgYm94IGV4dGVudCB2YWx1ZXMKKyAgICAgKi8KKyAgICBSZWNhc3RKU0Nyb3dkLnByb3RvdHlw
ZS5nZXREZWZhdWx0UXVlcnlFeHRlbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBwID0g
dGhpcy5yZWNhc3RDcm93ZC5nZXREZWZhdWx0UXVlcnlFeHRlbnQoKTsKKyAgICAgICAgcmV0dXJu
IG5ldyBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0o
cC54LCBwLnksIHAueik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIGFsbCByZXNv
dXJjZXMKKyAgICAgKi8KKyAgICBSZWNhc3RKU0Nyb3dkLnByb3RvdHlwZS5kaXNwb3NlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB0aGlzLnJlY2FzdENyb3dkLmRlc3Ryb3koKTsKKyAgICAgICAg
dGhpcy5fc2NlbmUub25CZWZvcmVBbmltYXRpb25zT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25C
ZWZvcmVBbmltYXRpb25zT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLl9vbkJlZm9yZUFuaW1hdGlv
bnNPYnNlcnZlciA9IG51bGw7CisgICAgfTsKKyAgICByZXR1cm4gUmVjYXN0SlNDcm93ZDsKK30o
KSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTmF2aWdhdGlvbi9pbmRleC50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTmF2aWdhdGlvbi9p
bmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBSZWNhc3RKU1BsdWdpbiwgUmVjYXN0SlNDcm93ZCAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BsdWdpbnNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vUGx1Z2lucy9p
bmRleCAqLyAiLi9OYXZpZ2F0aW9uL1BsdWdpbnMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUmVjYXN0SlNQbHVnaW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QbHVnaW5zX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJlY2FzdEpTUGx1Z2luIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlJlY2FzdEpTQ3Jvd2QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QbHVnaW5z
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJlY2FzdEpTQ3Jvd2QiXTsgfSk7
CisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9PZmZsaW5lL2RhdGFiYXNlLnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9PZmZsaW5lL2RhdGFi
YXNlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IERhdGFiYXNlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkRhdGFiYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEYXRhYmFzZTsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29s
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dn
ZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlz
Y190Z2FfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01pc2MvdGdhICovICIuL01pc2MvdGdhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2lu
ZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3dlYlJlcXVlc3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mv
d2ViUmVxdWVzdCAqLyAiLi9NaXNjL3dlYlJlcXVlc3QudHMiKTsKKworCisKKworCisvLyBTZXRz
IHRoZSBkZWZhdWx0IG9mZmxpbmUgcHJvdmlkZXIgdG8gQmFieWxvbi5qcworX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLk9mZmxpbmVQcm92aWRl
ckZhY3RvcnkgPSBmdW5jdGlvbiAodXJsVG9TY2VuZSwgY2FsbGJhY2tNYW5pZmVzdENoZWNrZWQs
IGRpc2FibGVNYW5pZmVzdENoZWNrKSB7CisgICAgaWYgKGRpc2FibGVNYW5pZmVzdENoZWNrID09
PSB2b2lkIDApIHsgZGlzYWJsZU1hbmlmZXN0Q2hlY2sgPSBmYWxzZTsgfQorICAgIHJldHVybiBu
ZXcgRGF0YWJhc2UodXJsVG9TY2VuZSwgY2FsbGJhY2tNYW5pZmVzdENoZWNrZWQsIGRpc2FibGVN
YW5pZmVzdENoZWNrKTsKK307CisvKioKKyAqIENsYXNzIHVzZWQgdG8gZW5hYmxlIGFjY2VzcyB0
byBJbmRleGVkREIKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jYWNo
aW5nX3Jlc291cmNlc19pbl9pbmRleGVkZGIKKyAqLwordmFyIERhdGFiYXNlID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgRGF0YWJh
c2UKKyAgICAgKiBAcGFyYW0gdXJsVG9TY2VuZSBkZWZpbmVzIHRoZSB1cmwgdG8gbG9hZCB0aGUg
c2NlbmUKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tNYW5pZmVzdENoZWNrZWQgZGVmaW5lcyB0aGUg
Y2FsbGJhY2sgdG8gdXNlIHdoZW4gbWFuaWZlc3QgaXMgY2hlY2tlZAorICAgICAqIEBwYXJhbSBk
aXNhYmxlTWFuaWZlc3RDaGVjayBkZWZpbmVzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgd2Ug
d2FudCB0byBza2lwIHRoZSBtYW5pZmVzdCB2YWxpZGF0aW9uIChpdCB3aWxsIGJlIGNvbnNpZGVy
ZWQgdmFsaWRhdGVkIGFuZCB1cCB0byBkYXRlKQorICAgICAqLworICAgIGZ1bmN0aW9uIERhdGFi
YXNlKHVybFRvU2NlbmUsIGNhbGxiYWNrTWFuaWZlc3RDaGVja2VkLCBkaXNhYmxlTWFuaWZlc3RD
aGVjaykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoZGlzYWJsZU1h
bmlmZXN0Q2hlY2sgPT09IHZvaWQgMCkgeyBkaXNhYmxlTWFuaWZlc3RDaGVjayA9IGZhbHNlOyB9
CisgICAgICAgIC8vIEhhbmRsaW5nIHZhcmlvdXMgZmxhdm9ycyBvZiBwcmVmaXhlZCB2ZXJzaW9u
IG9mIEluZGV4ZWREQgorICAgICAgICB0aGlzLl9pZGJGYWN0b3J5ID0gKHdpbmRvdy5pbmRleGVk
REIgfHwgd2luZG93Lm1vekluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdp
bmRvdy5tc0luZGV4ZWREQik7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrTWFuaWZlc3RDaGVja2Vk
ID0gY2FsbGJhY2tNYW5pZmVzdENoZWNrZWQ7CisgICAgICAgIHRoaXMuX2N1cnJlbnRTY2VuZVVy
bCA9IERhdGFiYXNlLl9SZXR1cm5GdWxsVXJsTG9jYXRpb24odXJsVG9TY2VuZSk7CisgICAgICAg
IHRoaXMuX2RiID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZW5hYmxlU2NlbmVPZmZsaW5lID0gZmFs
c2U7CisgICAgICAgIHRoaXMuX2VuYWJsZVRleHR1cmVzT2ZmbGluZSA9IGZhbHNlOworICAgICAg
ICB0aGlzLl9tYW5pZmVzdFZlcnNpb25Gb3VuZCA9IDA7CisgICAgICAgIHRoaXMuX211c3RVcGRh
dGVSZXNzb3VyY2VzID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2hhc1JlYWNoZWRRdW90YSA9IGZh
bHNlOworICAgICAgICBpZiAoIURhdGFiYXNlLklEQlN0b3JhZ2VFbmFibGVkKSB7CisgICAgICAg
ICAgICB0aGlzLl9jYWxsYmFja01hbmlmZXN0Q2hlY2tlZCh0cnVlKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChkaXNhYmxlTWFuaWZlc3RDaGVjaykgeworICAg
ICAgICAgICAgICAgIHRoaXMuX2VuYWJsZVNjZW5lT2ZmbGluZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgdGhpcy5fZW5hYmxlVGV4dHVyZXNPZmZsaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9tYW5pZmVzdFZlcnNpb25Gb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgX01pc2Nf
dG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5TZXRJbW1lZGlhdGUo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY2FsbGJhY2tNYW5pZmVz
dENoZWNrZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jaGVja01hbmlmZXN0RmlsZSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShEYXRhYmFzZS5wcm90b3R5cGUsICJlbmFibGVTY2VuZU9mZmxpbmUiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHNjZW5lIG11c3Qg
YmUgc2F2ZWQgaW4gdGhlIGRhdGFiYXNlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVTY2VuZU9mZmxpbmU7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhYmFzZS5wcm90
b3R5cGUsICJlbmFibGVUZXh0dXJlc09mZmxpbmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRleHR1cmVzIG11c3QgYmUgc2F2ZWQgaW4g
dGhlIGRhdGFiYXNlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVUZXh0dXJlc09mZmxpbmU7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIERhdGFiYXNlLnByb3RvdHlwZS5fY2hlY2tNYW5pZmVzdEZpbGUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBub01hbmlm
ZXN0RmlsZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl9lbmFibGVTY2VuZU9m
ZmxpbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIF90aGlzLl9lbmFibGVUZXh0dXJlc09mZmxpbmUg
PSBmYWxzZTsKKyAgICAgICAgICAgIF90aGlzLl9jYWxsYmFja01hbmlmZXN0Q2hlY2tlZChmYWxz
ZSk7CisgICAgICAgIH07CisgICAgICAgIHZhciB0aW1lU3RhbXBVc2VkID0gZmFsc2U7CisgICAg
ICAgIHZhciBtYW5pZmVzdFVSTCA9IHRoaXMuX2N1cnJlbnRTY2VuZVVybCArICIubWFuaWZlc3Qi
OworICAgICAgICB2YXIgeGhyID0gbmV3IF9NaXNjX3dlYlJlcXVlc3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siV2ViUmVxdWVzdCJdKCk7CisgICAgICAgIGlmIChuYXZpZ2F0b3Iub25M
aW5lKSB7CisgICAgICAgICAgICAvLyBBZGRpbmcgYSB0aW1lc3RhbXAgdG8gYnktcGFzcyBicm93
c2VycycgY2FjaGUKKyAgICAgICAgICAgIHRpbWVTdGFtcFVzZWQgPSB0cnVlOworICAgICAgICAg
ICAgbWFuaWZlc3RVUkwgPSBtYW5pZmVzdFVSTCArIChtYW5pZmVzdFVSTC5tYXRjaCgvXD8vKSA9
PSBudWxsID8gIj8iIDogIiYiKSArIERhdGUubm93KCk7CisgICAgICAgIH0KKyAgICAgICAgeGhy
Lm9wZW4oIkdFVCIsIG1hbmlmZXN0VVJMKTsKKyAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIo
ImxvYWQiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAw
IHx8IERhdGFiYXNlLl9WYWxpZGF0ZVhIUkRhdGEoeGhyLCAxKSkgeworICAgICAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtYW5pZmVzdEZpbGUgPSBKU09OLnBhcnNl
KHhoci5yZXNwb25zZSk7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9lbmFibGVTY2VuZU9m
ZmxpbmUgPSBtYW5pZmVzdEZpbGUuZW5hYmxlU2NlbmVPZmZsaW5lOworICAgICAgICAgICAgICAg
ICAgICBfdGhpcy5fZW5hYmxlVGV4dHVyZXNPZmZsaW5lID0gbWFuaWZlc3RGaWxlLmVuYWJsZVRl
eHR1cmVzT2ZmbGluZSAmJiBEYXRhYmFzZS5Jc1VBU3VwcG9ydGluZ0Jsb2JTdG9yYWdlOworICAg
ICAgICAgICAgICAgICAgICBpZiAobWFuaWZlc3RGaWxlLnZlcnNpb24gJiYgIWlzTmFOKHBhcnNl
SW50KG1hbmlmZXN0RmlsZS52ZXJzaW9uKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90
aGlzLl9tYW5pZmVzdFZlcnNpb25Gb3VuZCA9IG1hbmlmZXN0RmlsZS52ZXJzaW9uOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fY2FsbGJhY2tN
YW5pZmVzdENoZWNrZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9jYWxsYmFj
a01hbmlmZXN0Q2hlY2tlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbm9NYW5pZmVzdEZpbGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBub01hbmlmZXN0RmlsZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9LCBmYWxzZSk7CisgICAgICAgIHhoci5hZGRFdmVudExpc3Rl
bmVyKCJlcnJvciIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0aW1lU3RhbXBVc2Vk
KSB7CisgICAgICAgICAgICAgICAgdGltZVN0YW1wVXNlZCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIC8vIExldCdzIHJldHJ5IHdpdGhvdXQgdGhlIHRpbWVTdGFtcAorICAgICAgICAgICAgICAg
IC8vIEl0IGNvdWxkIGZhaWwgd2hlbiBjb3VwbGVkIHdpdGggSFRNTDUgT2ZmbGluZSBBUEkKKyAg
ICAgICAgICAgICAgICB2YXIgcmV0cnlNYW5pZmVzdFVSTCA9IF90aGlzLl9jdXJyZW50U2NlbmVV
cmwgKyAiLm1hbmlmZXN0IjsKKyAgICAgICAgICAgICAgICB4aHIub3BlbigiR0VUIiwgcmV0cnlN
YW5pZmVzdFVSTCk7CisgICAgICAgICAgICAgICAgeGhyLnNlbmQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG5vTWFuaWZlc3RGaWxlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0sIGZhbHNlKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgIHhoci5zZW5kKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKGV4KSB7CisgICAgICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0u
RXJyb3IoIkVycm9yIG9uIFhIUiBzZW5kIHJlcXVlc3QuIik7CisgICAgICAgICAgICB0aGlzLl9j
YWxsYmFja01hbmlmZXN0Q2hlY2tlZChmYWxzZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIE9wZW4gdGhlIGRhdGFiYXNlIGFuZCBtYWtlIGl0IGF2YWlsYWJsZQorICAgICAq
IEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gY2FsbCBvbiBz
dWNjZXNzCisgICAgICogQHBhcmFtIGVycm9yQ2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sg
dG8gY2FsbCBvbiBlcnJvcgorICAgICAqLworICAgIERhdGFiYXNlLnByb3RvdHlwZS5vcGVuID0g
ZnVuY3Rpb24gKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgaGFuZGxlRXJyb3IgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBfdGhpcy5faXNTdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChl
cnJvckNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjaygpOworICAgICAg
ICAgICAgfQorICAgICAgICB9OworICAgICAgICBpZiAoIXRoaXMuX2lkYkZhY3RvcnkgfHwgISh0
aGlzLl9lbmFibGVTY2VuZU9mZmxpbmUgfHwgdGhpcy5fZW5hYmxlVGV4dHVyZXNPZmZsaW5lKSkg
eworICAgICAgICAgICAgLy8gWW91ciBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBJbmRleGVkREIK
KyAgICAgICAgICAgIHRoaXMuX2lzU3VwcG9ydGVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAo
ZXJyb3JDYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHRo
ZSBEQiBoYXNuJ3QgYmVlbiBvcGVuZWQgb3IgY3JlYXRlZCB5ZXQKKyAgICAgICAgICAgIGlmICgh
dGhpcy5fZGIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9oYXNSZWFjaGVkUXVvdGEgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9pc1N1cHBvcnRlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgdmFyIHJlcXVlc3QgPSB0aGlzLl9pZGJGYWN0b3J5Lm9wZW4oImJhYnlsb25qcyIsIDEp
OworICAgICAgICAgICAgICAgIC8vIENvdWxkIG9jY3VyIGlmIHVzZXIgaXMgYmxvY2tpbmcgdGhl
IHF1b3RhIGZvciB0aGUgREIgYW5kL29yIGRvZXNuJ3QgZ3JhbnQgYWNjZXNzIHRvIEluZGV4ZWRE
QgorICAgICAgICAgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIC8vIGV4ZWN1dGVzIHdoZW4gYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiBj
YW5ub3QgY29tcGxldGUgZHVlIHRvIG90aGVyIGFjdGl2ZSB0cmFuc2FjdGlvbnMKKyAgICAgICAg
ICAgICAgICByZXF1ZXN0Lm9uYmxvY2tlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJd
LkVycm9yKCJJREIgcmVxdWVzdCBibG9ja2VkLiBQbGVhc2UgcmVsb2FkIHRoZSBwYWdlLiIpOwor
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcigpOworICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgLy8gREIgaGFzIGJlZW4gb3BlbmVkIHN1Y2Nlc3NmdWxseQorICAgICAg
ICAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5fZGIgPSByZXF1ZXN0LnJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAg
c3VjY2Vzc0NhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAv
LyBJbml0aWFsaXphdGlvbiBvZiB0aGUgREIuIENyZWF0aW5nIFNjZW5lcyAmIFRleHR1cmVzIHN0
b3JlcworICAgICAgICAgICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24g
KGV2ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9kYiA9IChldmVudC50YXJnZXQp
LnJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9kYikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5f
ZGIuY3JlYXRlT2JqZWN0U3RvcmUoInNjZW5lcyIsIHsga2V5UGF0aDogInNjZW5lVXJsIiB9KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZGIuY3JlYXRlT2JqZWN0U3RvcmUo
InZlcnNpb25zIiwgeyBrZXlQYXRoOiAic2NlbmVVcmwiIH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl9kYi5jcmVhdGVPYmplY3RTdG9yZSgidGV4dHVyZXMiLCB7IGtleVBh
dGg6ICJ0ZXh0dXJlVXJsIiB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhdGNoIChleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJv
cigiRXJyb3Igd2hpbGUgY3JlYXRpbmcgb2JqZWN0IHN0b3Jlcy4gRXhjZXB0aW9uOiAiICsgZXgu
bWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBEQiBoYXMgYWxyZWFkeSBi
ZWVuIGNyZWF0ZWQgYW5kIG9wZW5lZAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzQ2Fs
bGJhY2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworICAgIC8qKgorICAgICAqIExvYWRzIGFuIGltYWdlIGZyb20gdGhlIGRhdGFiYXNlCisg
ICAgICogQHBhcmFtIHVybCBkZWZpbmVzIHRoZSB1cmwgdG8gbG9hZCBmcm9tCisgICAgICogQHBh
cmFtIGltYWdlIGRlZmluZXMgdGhlIHRhcmdldCBET00gaW1hZ2UKKyAgICAgKi8KKyAgICBEYXRh
YmFzZS5wcm90b3R5cGUubG9hZEltYWdlID0gZnVuY3Rpb24gKHVybCwgaW1hZ2UpIHsKKyAgICAg
ICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIGNvbXBsZXRlVVJMID0gRGF0YWJhc2Uu
X1JldHVybkZ1bGxVcmxMb2NhdGlvbih1cmwpOworICAgICAgICB2YXIgc2F2ZUFuZExvYWRJbWFn
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghX3RoaXMuX2hhc1JlYWNoZWRRdW90
YSAmJiBfdGhpcy5fZGIgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyB0aGUgdGV4dHVy
ZSBpcyBub3QgeWV0IGluIHRoZSBEQiwgbGV0J3MgdHJ5IHRvIHNhdmUgaXQKKyAgICAgICAgICAg
ICAgICBfdGhpcy5fc2F2ZUltYWdlSW50b0RCQXN5bmMoY29tcGxldGVVUkwsIGltYWdlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIG5vdCBpbiB0aGUg
REIgYW5kIHdlJ3ZlIHJlYWNoZWQgdGhlIERCIHF1b3RhIGxpbWl0CisgICAgICAgICAgICAvLyBs
ZXQncyBsb2FkIGl0IGRpcmVjdGx5IGZyb20gdGhlIHdlYgorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaW1hZ2Uuc3JjID0gdXJsOworICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgICAgICBpZiAoIXRoaXMuX211c3RVcGRhdGVSZXNzb3VyY2VzKSB7CisgICAgICAgICAg
ICB0aGlzLl9sb2FkSW1hZ2VGcm9tREJBc3luYyhjb21wbGV0ZVVSTCwgaW1hZ2UsIHNhdmVBbmRM
b2FkSW1hZ2UpOworICAgICAgICB9CisgICAgICAgIC8vIEZpcnN0IHRpbWUgd2UncmUgZG93bmxv
YWQgdGhlIGltYWdlcyBvciB1cGRhdGUgcmVxdWVzdGVkIGluIHRoZSBtYW5pZmVzdCBmaWxlIGJ5
IGEgdmVyc2lvbiBjaGFuZ2UKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzYXZlQW5kTG9h
ZEltYWdlKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIERhdGFiYXNlLnByb3RvdHlwZS5fbG9h
ZEltYWdlRnJvbURCQXN5bmMgPSBmdW5jdGlvbiAodXJsLCBpbWFnZSwgbm90SW5EQkNhbGxiYWNr
KSB7CisgICAgICAgIGlmICh0aGlzLl9pc1N1cHBvcnRlZCAmJiB0aGlzLl9kYiAhPT0gbnVsbCkg
eworICAgICAgICAgICAgdmFyIHRleHR1cmU7CisgICAgICAgICAgICB2YXIgdHJhbnNhY3Rpb24g
PSB0aGlzLl9kYi50cmFuc2FjdGlvbihbInRleHR1cmVzIl0pOworICAgICAgICAgICAgdHJhbnNh
Y3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpbWFnZS5zcmMg
PSB1cmw7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgYmxvYlRleHR1cmVVUkw7Cisg
ICAgICAgICAgICAgICAgaWYgKHRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIFVS
TCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDsKKyAgICAgICAgICAgICAgICAgICAg
YmxvYlRleHR1cmVVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHRleHR1cmUuZGF0YSk7CisgICAg
ICAgICAgICAgICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TG9nZ2VyIl0uRXJyb3IoIkVycm9yIGxvYWRpbmcgaW1hZ2UgZnJvbSBibG9iIFVSTDogIiArIGJs
b2JUZXh0dXJlVVJMICsgIiBzd2l0Y2hpbmcgYmFjayB0byB3ZWIgdXJsOiAiICsgdXJsKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGltYWdlLnNyYyA9IHVybDsKKyAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2Uuc3JjID0gYmxvYlRleHR1cmVVUkw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBub3RJbkRCQ2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgdmFyIGdldFJlcXVlc3QgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgi
dGV4dHVyZXMiKS5nZXQodXJsKTsKKyAgICAgICAgICAgIGdldFJlcXVlc3Qub25zdWNjZXNzID0g
ZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IChldmVudC50YXJn
ZXQpLnJlc3VsdDsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBnZXRSZXF1ZXN0Lm9uZXJy
b3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVycm9yKCJFcnJvciBsb2FkaW5nIHRleHR1
cmUgIiArIHVybCArICIgZnJvbSBEQi4iKTsKKyAgICAgICAgICAgICAgICBpbWFnZS5zcmMgPSB1
cmw7CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVy
cm9yKCJFcnJvcjogSW5kZXhlZERCIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyIG9yIEJh
Ynlsb25KUyBEYXRhYmFzZSBpcyBub3Qgb3Blbi4iKTsKKyAgICAgICAgICAgIGltYWdlLnNyYyA9
IHVybDsKKyAgICAgICAgfQorICAgIH07CisgICAgRGF0YWJhc2UucHJvdG90eXBlLl9zYXZlSW1h
Z2VJbnRvREJBc3luYyA9IGZ1bmN0aW9uICh1cmwsIGltYWdlKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIGlmICh0aGlzLl9pc1N1cHBvcnRlZCkgeworICAgICAgICAgICAg
Ly8gSW4gY2FzZSBvZiBlcnJvciAodHlwZSBub3Qgc3VwcG9ydGVkIG9yIHF1b3RhIGV4Y2VlZGVk
KSwgd2UncmUgYXQgbGVhc3Qgc2VuZGluZyBiYWNrIFhIUiBkYXRhIHRvIGFsbG93IHRleHR1cmUg
bG9hZGluZyBsYXRlciBvbgorICAgICAgICAgICAgdmFyIGdlbmVyYXRlQmxvYlVybCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgYmxvYlRleHR1cmVVUkw7CisgICAgICAgICAg
ICAgICAgaWYgKGJsb2IpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIFVSTCA9IHdpbmRvdy5V
UkwgfHwgd2luZG93LndlYmtpdFVSTDsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2JUZXh0dXJlVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChi
bG9iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBDaHJv
bWUgaXMgcmFpc2luZyBhIHR5cGUgZXJyb3IgaWYgd2UncmUgc2V0dGluZyB0aGUgb25lVGltZU9u
bHkgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgICAgIGNhdGNoIChleCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvYlRleHR1cmVVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2Ip
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChibG9iVGV4dHVyZVVSTCkgeworICAgICAgICAgICAgICAgICAgICBpbWFnZS5zcmMg
PSBibG9iVGV4dHVyZVVSTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgaWYgKERhdGFiYXNlLklzVUFTdXBwb3J0aW5nQmxvYlN0b3JhZ2UpIHsgLy8gQ3Jl
YXRlIFhIUgorICAgICAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgX01pc2Nfd2ViUmVxdWVzdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJXZWJSZXF1ZXN0Il0oKSwgYmxvYjsKKyAgICAg
ICAgICAgICAgICB4aHIub3BlbigiR0VUIiwgdXJsKTsKKyAgICAgICAgICAgICAgICB4aHIucmVz
cG9uc2VUeXBlID0gImJsb2IiOworICAgICAgICAgICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVy
KCJsb2FkIiwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1
cyA9PT0gMjAwICYmIF90aGlzLl9kYikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmxv
YiBhcyByZXNwb25zZSAoWEhSMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2IgPSB4aHIu
cmVzcG9uc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNhY3Rpb24gPSBfdGhp
cy5fZGIudHJhbnNhY3Rpb24oWyJ0ZXh0dXJlcyJdLCAicmVhZHdyaXRlIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgdHJhbnNhY3Rpb24gY291bGQgYWJvcnQgYmVjYXVzZSBvZiBh
IFF1b3RhRXhjZWVkZWRFcnJvciBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNh
Y3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmFja3dhcmRz
IGNvbXBhdGliaWxpdHkgd2l0aCB0cyAxLjAsIHNyY0VsZW1lbnQgZG9lc24ndCBoYXZlIGFuICJl
cnJvciIgYWNjb3JkaW5nIHRvIHRzIDEuMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgc3JjRWxlbWVudCA9IChldmVudC5zcmNFbGVtZW50IHx8IGV2ZW50LnRhcmdldCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHNyY0VsZW1lbnQuZXJy
b3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5u
YW1lID09PSAiUXVvdGFFeGNlZWRlZEVycm9yIikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX3RoaXMuX2hhc1JlYWNoZWRRdW90YSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7IH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZW5lcmF0ZUJsb2JVcmwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQmxvYlVybCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBu
ZXdUZXh0dXJlID0geyB0ZXh0dXJlVXJsOiB1cmwsIGRhdGE6IGJsb2IgfTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHV0IHRo
ZSBibG9iIGludG8gdGhlIGRhYmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBh
ZGRSZXF1ZXN0ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoInRleHR1cmVzIikucHV0KG5ld1Rl
eHR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJlcXVlc3Qub25zdWNjZXNz
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkUmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUJsb2JVcmwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gIkRhdGFDbG9uZUVycm9yIiBnZW5lcmF0ZWQgYnkgQ2hyb21lIHdoZW4geW91IHRy
eSB0byBpbmplY3QgYmxvYiBpbnRvIEluZGV4ZWREQgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChleC5jb2RlID09PSAyNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEYXRhYmFzZS5Jc1VBU3VwcG9ydGluZ0Jsb2JTdG9yYWdlID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9lbmFibGVUZXh0dXJlc09mZmxpbmUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW1hZ2Uuc3JjID0gdXJsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaW1hZ2Uuc3JjID0gdXJsOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHhoci5hZGRFdmVudExpc3Rl
bmVyKCJlcnJvciIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9n
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVycm9yKCJFcnJvciBp
biBYSFIgcmVxdWVzdCBpbiBCQUJZTE9OLkRhdGFiYXNlLiIpOworICAgICAgICAgICAgICAgICAg
ICBpbWFnZS5zcmMgPSB1cmw7CisgICAgICAgICAgICAgICAgfSwgZmFsc2UpOworICAgICAgICAg
ICAgICAgIHhoci5zZW5kKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpbWFnZS5zcmMgPSB1cmw7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uRXJyb3IoIkVycm9yOiBJbmRleGVkREIgbm90IHN1cHBv
cnRlZCBieSB5b3VyIGJyb3dzZXIgb3IgQmFieWxvbkpTIERhdGFiYXNlIGlzIG5vdCBvcGVuLiIp
OworICAgICAgICAgICAgaW1hZ2Uuc3JjID0gdXJsOworICAgICAgICB9CisgICAgfTsKKyAgICBE
YXRhYmFzZS5wcm90b3R5cGUuX2NoZWNrVmVyc2lvbkZyb21EQiA9IGZ1bmN0aW9uICh1cmwsIHZl
cnNpb25Mb2FkZWQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIHVw
ZGF0ZVZlcnNpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyB0aGUgdmVyc2lvbiBp
cyBub3QgeWV0IGluIHRoZSBEQiBvciB3ZSBuZWVkIHRvIHVwZGF0ZSBpdAorICAgICAgICAgICAg
X3RoaXMuX3NhdmVWZXJzaW9uSW50b0RCQXN5bmModXJsLCB2ZXJzaW9uTG9hZGVkKTsKKyAgICAg
ICAgfTsKKyAgICAgICAgdGhpcy5fbG9hZFZlcnNpb25Gcm9tREJBc3luYyh1cmwsIHZlcnNpb25M
b2FkZWQsIHVwZGF0ZVZlcnNpb24pOworICAgIH07CisgICAgRGF0YWJhc2UucHJvdG90eXBlLl9s
b2FkVmVyc2lvbkZyb21EQkFzeW5jID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2ssIHVwZGF0ZUlu
REJDYWxsYmFjaykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhp
cy5faXNTdXBwb3J0ZWQgJiYgdGhpcy5fZGIpIHsKKyAgICAgICAgICAgIHZhciB2ZXJzaW9uOwor
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgdHJhbnNhY3Rpb24gPSB0aGlz
Ll9kYi50cmFuc2FjdGlvbihbInZlcnNpb25zIl0pOworICAgICAgICAgICAgICAgIHRyYW5zYWN0
aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpbiB0
aGUgSlNPTiBmaWxlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSB2ZXJzaW9uIGluIERCCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX21hbmlmZXN0VmVyc2lvbkZvdW5kICE9PSB2ZXJz
aW9uLmRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbXVzdFVwZGF0
ZVJlc3NvdXJjZXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUlu
REJDYWxsYmFjaygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodmVy
c2lvbi5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAvLyB2ZXJzaW9uIHdhcyBub3QgZm91bmQgaW4gREIK
KyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fbXVzdFVwZGF0ZVJlc3NvdXJjZXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
dXBkYXRlSW5EQkNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKC0xKTsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgIHZhciBnZXRSZXF1ZXN0ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3Rv
cmUoInZlcnNpb25zIikuZ2V0KHVybCk7CisgICAgICAgICAgICAgICAgZ2V0UmVxdWVzdC5vbnN1
Y2Nlc3MgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9
IChldmVudC50YXJnZXQpLnJlc3VsdDsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIGdldFJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVy
cm9yKCJFcnJvciBsb2FkaW5nIHZlcnNpb24gZm9yIHNjZW5lICIgKyB1cmwgKyAiIGZyb20gREIu
Iik7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKC0xKTsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVy
cm9yKCJFcnJvciB3aGlsZSBhY2Nlc3NpbmcgJ3ZlcnNpb25zJyBvYmplY3Qgc3RvcmUgKFJFQUQg
T1ApLiBFeGNlcHRpb246ICIgKyBleC5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFj
aygtMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0u
RXJyb3IoIkVycm9yOiBJbmRleGVkREIgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIgb3Ig
QmFieWxvbkpTIERhdGFiYXNlIGlzIG5vdCBvcGVuLiIpOworICAgICAgICAgICAgY2FsbGJhY2so
LTEpOworICAgICAgICB9CisgICAgfTsKKyAgICBEYXRhYmFzZS5wcm90b3R5cGUuX3NhdmVWZXJz
aW9uSW50b0RCQXN5bmMgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy5faXNTdXBwb3J0ZWQgJiYgIXRoaXMuX2hh
c1JlYWNoZWRRdW90YSAmJiB0aGlzLl9kYikgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgICAgICAvLyBPcGVuIGEgdHJhbnNhY3Rpb24gdG8gdGhlIGRhdGFiYXNlCisgICAgICAgICAg
ICAgICAgdmFyIHRyYW5zYWN0aW9uID0gdGhpcy5fZGIudHJhbnNhY3Rpb24oWyJ2ZXJzaW9ucyJd
LCAicmVhZHdyaXRlIik7CisgICAgICAgICAgICAgICAgLy8gdGhlIHRyYW5zYWN0aW9uIGNvdWxk
IGFib3J0IGJlY2F1c2Ugb2YgYSBRdW90YUV4Y2VlZGVkRXJyb3IgZXJyb3IKKyAgICAgICAgICAg
ICAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAg
ICAgICAgICAgIHRyeSB7IC8vYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB0cyAxLjAsIHNy
Y0VsZW1lbnQgZG9lc24ndCBoYXZlIGFuICJlcnJvciIgYWNjb3JkaW5nIHRvIHRzIDEuMworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gZXZlbnQuc3JjRWxlbWVudFsnZXJyb3In
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5uYW1lID09PSAi
UXVvdGFFeGNlZWRlZEVycm9yIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlz
Ll9oYXNSZWFjaGVkUXVvdGEgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhdGNoIChleCkgeyB9Cisg
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKC0xKTsKKyAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKF90aGlzLl9tYW5pZmVzdFZlcnNpb25Gb3VuZCk7Cisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB2YXIgbmV3VmVyc2lvbiA9IHsgc2Nl
bmVVcmw6IHVybCwgZGF0YTogdGhpcy5fbWFuaWZlc3RWZXJzaW9uRm91bmQgfTsKKyAgICAgICAg
ICAgICAgICAvLyBQdXQgdGhlIHNjZW5lIGludG8gdGhlIGRhdGFiYXNlCisgICAgICAgICAgICAg
ICAgdmFyIGFkZFJlcXVlc3QgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgidmVyc2lvbnMiKS5w
dXQobmV3VmVyc2lvbik7CisgICAgICAgICAgICAgICAgYWRkUmVxdWVzdC5vbnN1Y2Nlc3MgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBhZGRSZXF1
ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIF9NaXNjX2xv
Z2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJvcigiRXJyb3Ig
aW4gREIgYWRkIHZlcnNpb24gcmVxdWVzdCBpbiBCQUJZTE9OLkRhdGFiYXNlLiIpOworICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoZXgpIHsKKyAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TG9nZ2VyIl0uRXJyb3IoIkVycm9yIHdoaWxlIGFjY2Vzc2luZyAndmVyc2lvbnMnIG9iamVjdCBz
dG9yZSAoV1JJVEUgT1ApLiBFeGNlcHRpb246ICIgKyBleC5tZXNzYWdlKTsKKyAgICAgICAgICAg
ICAgICBjYWxsYmFjaygtMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBjYWxsYmFjaygtMSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIExvYWRzIGEgZmlsZSBmcm9tIGRhdGFiYXNlCisgICAgICogQHBhcmFtIHVybCBk
ZWZpbmVzIHRoZSBVUkwgdG8gbG9hZCBmcm9tCisgICAgICogQHBhcmFtIHNjZW5lTG9hZGVkIGRl
ZmluZXMgYSBjYWxsYmFjayB0byBjYWxsIG9uIHN1Y2Nlc3MKKyAgICAgKiBAcGFyYW0gcHJvZ3Jl
c3NDYWxsQmFjayBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHByb2dyZXNzIGNoYW5n
ZWQKKyAgICAgKiBAcGFyYW0gZXJyb3JDYWxsYmFjayBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2Fs
bCBvbiBlcnJvcgorICAgICAqIEBwYXJhbSB1c2VBcnJheUJ1ZmZlciBkZWZpbmVzIGEgYm9vbGVh
biB0byB1c2UgYXJyYXkgYnVmZmVyIGluc3RlYWQgb2YgdGV4dCBzdHJpbmcKKyAgICAgKi8KKyAg
ICBEYXRhYmFzZS5wcm90b3R5cGUubG9hZEZpbGUgPSBmdW5jdGlvbiAodXJsLCBzY2VuZUxvYWRl
ZCwgcHJvZ3Jlc3NDYWxsQmFjaywgZXJyb3JDYWxsYmFjaywgdXNlQXJyYXlCdWZmZXIpIHsKKyAg
ICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIGNvbXBsZXRlVXJsID0gRGF0YWJh
c2UuX1JldHVybkZ1bGxVcmxMb2NhdGlvbih1cmwpOworICAgICAgICB2YXIgc2F2ZUFuZExvYWRG
aWxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgLy8gdGhlIHNjZW5lIGlzIG5vdCB5ZXQg
aW4gdGhlIERCLCBsZXQncyB0cnkgdG8gc2F2ZSBpdAorICAgICAgICAgICAgX3RoaXMuX3NhdmVG
aWxlQXN5bmMoY29tcGxldGVVcmwsIHNjZW5lTG9hZGVkLCBwcm9ncmVzc0NhbGxCYWNrLCB1c2VB
cnJheUJ1ZmZlciwgZXJyb3JDYWxsYmFjayk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMuX2No
ZWNrVmVyc2lvbkZyb21EQihjb21wbGV0ZVVybCwgZnVuY3Rpb24gKHZlcnNpb24pIHsKKyAgICAg
ICAgICAgIGlmICh2ZXJzaW9uICE9PSAtMSkgeworICAgICAgICAgICAgICAgIGlmICghX3RoaXMu
X211c3RVcGRhdGVSZXNzb3VyY2VzKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9sb2Fk
RmlsZUFzeW5jKGNvbXBsZXRlVXJsLCBzY2VuZUxvYWRlZCwgc2F2ZUFuZExvYWRGaWxlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIF90aGlzLl9zYXZlRmlsZUFzeW5jKGNvbXBsZXRlVXJsLCBzY2VuZUxvYWRlZCwgcHJvZ3Jl
c3NDYWxsQmFjaywgdXNlQXJyYXlCdWZmZXIsIGVycm9yQ2FsbGJhY2spOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGlmIChlcnJvckNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2so
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07
CisgICAgRGF0YWJhc2UucHJvdG90eXBlLl9sb2FkRmlsZUFzeW5jID0gZnVuY3Rpb24gKHVybCwg
Y2FsbGJhY2ssIG5vdEluREJDYWxsYmFjaykgeworICAgICAgICBpZiAodGhpcy5faXNTdXBwb3J0
ZWQgJiYgdGhpcy5fZGIpIHsKKyAgICAgICAgICAgIHZhciB0YXJnZXRTdG9yZTsKKyAgICAgICAg
ICAgIGlmICh1cmwuaW5kZXhPZigiLmJhYnlsb24iKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAg
ICB0YXJnZXRTdG9yZSA9ICJzY2VuZXMiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0U3RvcmUgPSAidGV4dHVyZXMiOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIGZpbGU7CisgICAgICAgICAgICB2YXIgdHJhbnNhY3Rpb24g
PSB0aGlzLl9kYi50cmFuc2FjdGlvbihbdGFyZ2V0U3RvcmVdKTsKKyAgICAgICAgICAgIHRyYW5z
YWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaWYgKGZp
bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZmlsZS5kYXRhKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gZmlsZSB3YXMgbm90IGZvdW5kIGluIERCCisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5vdEluREJDYWxsYmFj
aygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB0cmFu
c2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIG5vdEluREJD
YWxsYmFjaygpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHZhciBnZXRSZXF1ZXN0ID0g
dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGFyZ2V0U3RvcmUpLmdldCh1cmwpOworICAgICAgICAg
ICAgZ2V0UmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAg
ICAgICBmaWxlID0gKGV2ZW50LnRhcmdldCkucmVzdWx0OworICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIGdldFJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uRXJy
b3IoIkVycm9yIGxvYWRpbmcgZmlsZSAiICsgdXJsICsgIiBmcm9tIERCLiIpOworICAgICAgICAg
ICAgICAgIG5vdEluREJDYWxsYmFjaygpOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJvcigiRXJyb3I6IEluZGV4ZWREQiBub3Qgc3VwcG9ydGVk
IGJ5IHlvdXIgYnJvd3NlciBvciBCYWJ5bG9uSlMgRGF0YWJhc2UgaXMgbm90IG9wZW4uIik7Cisg
ICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9CisgICAgfTsKKyAgICBEYXRhYmFzZS5w
cm90b3R5cGUuX3NhdmVGaWxlQXN5bmMgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaywgcHJvZ3Jl
c3NDYWxsYmFjaywgdXNlQXJyYXlCdWZmZXIsIGVycm9yQ2FsbGJhY2spIHsKKyAgICAgICAgdmFy
IF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMuX2lzU3VwcG9ydGVkKSB7CisgICAgICAg
ICAgICB2YXIgdGFyZ2V0U3RvcmU7CisgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoIi5iYWJ5
bG9uIikgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0U3RvcmUgPSAic2NlbmVzIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRhcmdl
dFN0b3JlID0gInRleHR1cmVzIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENyZWF0
ZSBYSFIKKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgX01pc2Nfd2ViUmVxdWVzdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJXZWJSZXF1ZXN0Il0oKTsKKyAgICAgICAgICAgIHZhciBm
aWxlRGF0YTsKKyAgICAgICAgICAgIHhoci5vcGVuKCJHRVQiLCB1cmwgKyAiPyIgKyBEYXRlLm5v
dygpKTsKKyAgICAgICAgICAgIGlmICh1c2VBcnJheUJ1ZmZlcikgeworICAgICAgICAgICAgICAg
IHhoci5yZXNwb25zZVR5cGUgPSAiYXJyYXlidWZmZXIiOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHByb2dyZXNzQ2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICB4aHIub25wcm9n
cmVzcyA9IHByb2dyZXNzQ2FsbGJhY2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4aHIu
YWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoeGhyLnN0YXR1cyA9PT0gMjAwIHx8ICh4aHIuc3RhdHVzIDwgNDAwICYmIERhdGFiYXNlLl9W
YWxpZGF0ZVhIUkRhdGEoeGhyLCAhdXNlQXJyYXlCdWZmZXIgPyAxIDogNikpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEJsb2IgYXMgcmVzcG9uc2UgKFhIUjIpCisgICAgICAgICAgICAgICAg
ICAgIGZpbGVEYXRhID0gIXVzZUFycmF5QnVmZmVyID8geGhyLnJlc3BvbnNlVGV4dCA6IHhoci5y
ZXNwb25zZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5faGFzUmVhY2hlZFF1b3Rh
ICYmIF90aGlzLl9kYikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlbiBhIHRyYW5z
YWN0aW9uIHRvIHRoZSBkYXRhYmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5z
YWN0aW9uID0gX3RoaXMuX2RiLnRyYW5zYWN0aW9uKFt0YXJnZXRTdG9yZV0sICJyZWFkd3JpdGUi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb3VsZCBhYm9y
dCBiZWNhdXNlIG9mIGEgUXVvdGFFeGNlZWRlZEVycm9yIGVycm9yCisgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy9iYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHRzIDEuMCwgc3JjRWxlbWVudCBkb2Vz
bid0IGhhdmUgYW4gImVycm9yIiBhY2NvcmRpbmcgdG8gdHMgMS4zCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGV2ZW50LnNyY0VsZW1lbnRbJ2Vycm9yJ107Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5uYW1lID09
PSAiUXVvdGFFeGNlZWRlZEVycm9yIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMuX2hhc1JlYWNoZWRRdW90YSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7IH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayhmaWxlRGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhmaWxlRGF0YSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0Zp
bGU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0U3RvcmUgPT09ICJzY2VuZXMi
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZSA9IHsgc2NlbmVVcmw6IHVy
bCwgZGF0YTogZmlsZURhdGEsIHZlcnNpb246IF90aGlzLl9tYW5pZmVzdFZlcnNpb25Gb3VuZCB9
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZSA9IHsgdGV4dHVyZVVybDog
dXJsLCBkYXRhOiBmaWxlRGF0YSB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQ
dXQgdGhlIHNjZW5lIGludG8gdGhlIGRhdGFiYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGFkZFJlcXVlc3QgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSh0YXJnZXRTdG9yZSku
cHV0KG5ld0ZpbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJlcXVlc3Qub25z
dWNjZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uRXJyb3IoIkVycm9yIGluIERCIGFkZCBm
aWxlIHJlcXVlc3QgaW4gQkFCWUxPTi5EYXRhYmFzZS4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2so
ZmlsZURhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2soZmlsZURhdGEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoeGhy
LnN0YXR1cyA+PSA0MDAgJiYgZXJyb3JDYWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JDYWxsYmFjayh4aHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIGZh
bHNlKTsKKyAgICAgICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siTG9nZ2VyIl0uRXJyb3IoImVycm9yIG9uIFhIUiByZXF1ZXN0LiIpOworICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICB9LCBmYWxzZSk7CisgICAgICAgICAg
ICB4aHIuc2VuZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX01p
c2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVycm9yKCJF
cnJvcjogSW5kZXhlZERCIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyIG9yIEJhYnlsb24u
anMgRGF0YWJhc2UgaXMgbm90IG9wZW4uIik7CisgICAgICAgICAgICBjYWxsYmFjaygpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBWYWxpZGF0ZXMgaWYgeGhyIGRhdGEgaXMg
Y29ycmVjdAorICAgICAqIEBwYXJhbSB4aHIgZGVmaW5lcyB0aGUgcmVxdWVzdCB0byB2YWxpZGF0
ZQorICAgICAqIEBwYXJhbSBkYXRhVHlwZSBkZWZpbmVzIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUK
KyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGRhdGEgaXMgY29ycmVjdAorICAgICAqLworICAgIERh
dGFiYXNlLl9WYWxpZGF0ZVhIUkRhdGEgPSBmdW5jdGlvbiAoeGhyLCBkYXRhVHlwZSkgeworICAg
ICAgICAvLyAxIGZvciB0ZXh0ICguYmFieWxvbiwgbWFuaWZlc3QgYW5kIHNoYWRlcnMpLCAyIGZv
ciBUR0EsIDQgZm9yIEREUywgNyBmb3IgYWxsCisgICAgICAgIGlmIChkYXRhVHlwZSA9PT0gdm9p
ZCAwKSB7IGRhdGFUeXBlID0gNzsgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKGRh
dGFUeXBlICYgMSkgeworICAgICAgICAgICAgICAgIGlmICh4aHIucmVzcG9uc2VUZXh0ICYmIHho
ci5yZXNwb25zZVRleHQubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0YVR5
cGUgPT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkYXRhVHlwZSAmIDIpIHsK
KyAgICAgICAgICAgICAgICAvLyBDaGVjayBoZWFkZXIgd2lkdGggYW5kIGhlaWdodCBzaW5jZSB0
aGVyZSBpcyBubyAiVEdBIiBtYWdpYyBudW1iZXIKKyAgICAgICAgICAgICAgICB2YXIgdGdhSGVh
ZGVyID0gX01pc2NfdGdhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRHQVRvb2xzIl0u
R2V0VEdBSGVhZGVyKHhoci5yZXNwb25zZSk7CisgICAgICAgICAgICAgICAgaWYgKHRnYUhlYWRl
ci53aWR0aCAmJiB0Z2FIZWFkZXIuaGVpZ2h0ICYmIHRnYUhlYWRlci53aWR0aCA+IDAgJiYgdGdh
SGVhZGVyLmhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFUeXBlID09PSAy
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGF0YVR5cGUgJiA0KSB7CisgICAgICAg
ICAgICAgICAgLy8gQ2hlY2sgZm9yIHRoZSAiRERTIiBtYWdpYyBudW1iZXIKKyAgICAgICAgICAg
ICAgICB2YXIgZGRzSGVhZGVyID0gbmV3IFVpbnQ4QXJyYXkoeGhyLnJlc3BvbnNlLCAwLCAzKTsK
KyAgICAgICAgICAgICAgICBpZiAoZGRzSGVhZGVyWzBdID09PSA2OCAmJiBkZHNIZWFkZXJbMV0g
PT09IDY4ICYmIGRkc0hlYWRlclsyXSA9PT0gODMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhdGNoIChlKSB7CisgICAgICAgICAgICAvLyBH
bG9iYWwgcHJvdGVjdGlvbgorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
OworICAgIC8qKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB1c2VyIGFnZW50IHN1
cHBvcnRzIGJsb2Igc3RvcmFnZSAodGhpcyB2YWx1ZSB3aWxsIGJlIHVwZGF0ZWQgYWZ0ZXIgY3Jl
YXRpbmcgdGhlIGZpcnN0IERhdGFiYXNlIG9iamVjdCkgKi8KKyAgICBEYXRhYmFzZS5Jc1VBU3Vw
cG9ydGluZ0Jsb2JTdG9yYWdlID0gdHJ1ZTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVh
biBpbmRpY2F0aW5nIGlmIERhdGFiYXNlIHN0b3JhdGUgaXMgZW5hYmxlZCAob2ZmIGJ5IGRlZmF1
bHQpCisgICAgICovCisgICAgRGF0YWJhc2UuSURCU3RvcmFnZUVuYWJsZWQgPSBmYWxzZTsKKyAg
ICBEYXRhYmFzZS5fUGFyc2VVUkwgPSBmdW5jdGlvbiAodXJsKSB7CisgICAgICAgIHZhciBhID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOworICAgICAgICBhLmhyZWYgPSB1cmw7CisgICAg
ICAgIHZhciB1cmxXaXRob3V0SGFzaCA9IHVybC5zdWJzdHJpbmcoMCwgdXJsLmxhc3RJbmRleE9m
KCIjIikpOworICAgICAgICB2YXIgZmlsZU5hbWUgPSB1cmwuc3Vic3RyaW5nKHVybFdpdGhvdXRI
YXNoLmxhc3RJbmRleE9mKCIvIikgKyAxLCB1cmwubGVuZ3RoKTsKKyAgICAgICAgdmFyIGFic0xv
Y2F0aW9uID0gdXJsLnN1YnN0cmluZygwLCB1cmwuaW5kZXhPZihmaWxlTmFtZSwgMCkpOworICAg
ICAgICByZXR1cm4gYWJzTG9jYXRpb247CisgICAgfTsKKyAgICBEYXRhYmFzZS5fUmV0dXJuRnVs
bFVybExvY2F0aW9uID0gZnVuY3Rpb24gKHVybCkgeworICAgICAgICBpZiAodXJsLmluZGV4T2Yo
Imh0dHA6LyIpID09PSAtMSAmJiB1cmwuaW5kZXhPZigiaHR0cHM6LyIpID09PSAtMSkgeworICAg
ICAgICAgICAgcmV0dXJuIChEYXRhYmFzZS5fUGFyc2VVUkwod2luZG93LmxvY2F0aW9uLmhyZWYp
ICsgdXJsKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB1
cmw7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBEYXRhYmFzZTsKK30oKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vT2ZmbGluZS9pbmRleC50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vT2ZmbGluZS9pbmRleC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBEYXRhYmFz
ZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RhdGFiYXNl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L2RhdGFiYXNlICovICIuL09mZmxpbmUvZGF0YWJhc2UudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
RGF0YWJhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kYXRhYmFzZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJEYXRhYmFzZSJdOyB9KTsKKworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL1BhcnRpY2xlcy9FbWl0dGVyVHlwZXMvYm94UGFydGljbGVFbWl0dGVyLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vUGFydGljbGVzL0VtaXR0ZXJUeXBlcy9ib3hQYXJ0aWNsZUVtaXR0ZXIudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJveFBhcnRpY2xlRW1pdHRlciAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb3hQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEJveFBhcnRpY2xlRW1pdHRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfZGVlcENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWVwQ29waWVyICovICIuL01pc2MvZGVl
cENvcGllci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgu
c2NhbGFyICovICIuL01hdGhzL21hdGguc2NhbGFyLnRzIik7CisKKworCisvKioKKyAqIFBhcnRp
Y2xlIGVtaXR0ZXIgZW1pdHRpbmcgcGFydGljbGVzIGZyb20gdGhlIGluc2lkZSBvZiBhIGJveC4K
KyAqIEl0IGVtaXRzIHRoZSBwYXJ0aWNsZXMgcmFuZG9tbHkgYmV0d2VlbiAyIGdpdmVuIGRpcmVj
dGlvbnMuCisgKi8KK3ZhciBCb3hQYXJ0aWNsZUVtaXR0ZXIgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBCb3hQYXJ0
aWNsZUVtaXR0ZXIKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBCb3hQYXJ0aWNsZUVtaXR0ZXIoKSB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBSYW5kb20gZGlyZWN0aW9uIG9mIGVhY2ggcGFydGlj
bGUgYWZ0ZXIgaXQgaGFzIGJlZW4gZW1pdHRlZCwgYmV0d2VlbiBkaXJlY3Rpb24xIGFuZCBkaXJl
Y3Rpb24yIHZlY3RvcnMuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmRpcmVjdGlvbjEgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3Rv
cjMiXSgwLCAxLjAsIDApOworICAgICAgICAvKioKKyAgICAgICAgICogUmFuZG9tIGRpcmVjdGlv
biBvZiBlYWNoIHBhcnRpY2xlIGFmdGVyIGl0IGhhcyBiZWVuIGVtaXR0ZWQsIGJldHdlZW4gZGly
ZWN0aW9uMSBhbmQgZGlyZWN0aW9uMiB2ZWN0b3JzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5kaXJlY3Rpb24yID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0oMCwgMS4wLCAwKTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IE1pbmltdW0gYm94IHBvaW50IGFyb3VuZCBvdXIgZW1pdHRlci4gT3VyIGVtaXR0ZXIgaXMgdGhl
IGNlbnRlciBvZiBwYXJ0aWNsZXMgc291cmNlLCBidXQgaWYgeW91IHdhbnQgeW91ciBwYXJ0aWNs
ZXMgdG8gZW1pdCBmcm9tIG1vcmUgdGhhbiBvbmUgcG9pbnQsIHRoZW4geW91IGNhbiB0ZWxsIGl0
IHRvIGRvIHNvLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5taW5FbWl0Qm94ID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0o
LTAuNSwgLTAuNSwgLTAuNSk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNYXhpbXVtIGJveCBw
b2ludCBhcm91bmQgb3VyIGVtaXR0ZXIuIE91ciBlbWl0dGVyIGlzIHRoZSBjZW50ZXIgb2YgcGFy
dGljbGVzIHNvdXJjZSwgYnV0IGlmIHlvdSB3YW50IHlvdXIgcGFydGljbGVzIHRvIGVtaXQgZnJv
bSBtb3JlIHRoYW4gb25lIHBvaW50LCB0aGVuIHlvdSBjYW4gdGVsbCBpdCB0byBkbyBzby4KKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMubWF4RW1pdEJveCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAuNSwgMC41LCAwLjUp
OworICAgIH0KKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBhcnRpY2xlIFN5c3RlbSB3
aGVuIHRoZSBkaXJlY3Rpb24gaXMgY29tcHV0ZWQgZm9yIHRoZSBjcmVhdGVkIHBhcnRpY2xlLgor
ICAgICAqIEBwYXJhbSB3b3JsZE1hdHJpeCBpcyB0aGUgd29ybGQgbWF0cml4IG9mIHRoZSBwYXJ0
aWNsZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uVG9VcGRhdGUgaXMgdGhlIGRpcmVj
dGlvbiB2ZWN0b3IgdG8gdXBkYXRlIHdpdGggdGhlIHJlc3VsdAorICAgICAqIEBwYXJhbSBwYXJ0
aWNsZSBpcyB0aGUgcGFydGljbGUgd2UgYXJlIGNvbXB1dGVkIHRoZSBkaXJlY3Rpb24gZm9yCisg
ICAgICovCisgICAgQm94UGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5zdGFydERpcmVjdGlvbkZ1
bmN0aW9uID0gZnVuY3Rpb24gKHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1VwZGF0ZSwgcGFydGlj
bGUpIHsKKyAgICAgICAgdmFyIHJhbmRYID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKHRoaXMuZGlyZWN0aW9uMS54
LCB0aGlzLmRpcmVjdGlvbjIueCk7CisgICAgICAgIHZhciByYW5kWSA9IF9NYXRoc19tYXRoX3Nj
YWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSh0
aGlzLmRpcmVjdGlvbjEueSwgdGhpcy5kaXJlY3Rpb24yLnkpOworICAgICAgICB2YXIgcmFuZFog
PSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFy
Il0uUmFuZG9tUmFuZ2UodGhpcy5kaXJlY3Rpb24xLnosIHRoaXMuZGlyZWN0aW9uMi56KTsKKyAg
ICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZl
Y3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWxGcm9tRmxvYXRzVG9SZWYocmFuZFgsIHJhbmRZLCByYW5k
Wiwgd29ybGRNYXRyaXgsIGRpcmVjdGlvblRvVXBkYXRlKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENhbGxlZCBieSB0aGUgcGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIHBvc2l0aW9uIGlzIGNv
bXB1dGVkIGZvciB0aGUgY3JlYXRlZCBwYXJ0aWNsZS4KKyAgICAgKiBAcGFyYW0gd29ybGRNYXRy
aXggaXMgdGhlIHdvcmxkIG1hdHJpeCBvZiB0aGUgcGFydGljbGUgc3lzdGVtCisgICAgICogQHBh
cmFtIHBvc2l0aW9uVG9VcGRhdGUgaXMgdGhlIHBvc2l0aW9uIHZlY3RvciB0byB1cGRhdGUgd2l0
aCB0aGUgcmVzdWx0CisgICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBwYXJ0aWNsZSB3ZSBh
cmUgY29tcHV0ZWQgdGhlIHBvc2l0aW9uIGZvcgorICAgICAqLworICAgIEJveFBhcnRpY2xlRW1p
dHRlci5wcm90b3R5cGUuc3RhcnRQb3NpdGlvbkZ1bmN0aW9uID0gZnVuY3Rpb24gKHdvcmxkTWF0
cml4LCBwb3NpdGlvblRvVXBkYXRlLCBwYXJ0aWNsZSkgeworICAgICAgICB2YXIgcmFuZFggPSBf
TWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0u
UmFuZG9tUmFuZ2UodGhpcy5taW5FbWl0Qm94LngsIHRoaXMubWF4RW1pdEJveC54KTsKKyAgICAg
ICAgdmFyIHJhbmRZID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKHRoaXMubWluRW1pdEJveC55LCB0aGlzLm1heEVt
aXRCb3gueSk7CisgICAgICAgIHZhciByYW5kWiA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSh0aGlzLm1pbkVtaXRC
b3gueiwgdGhpcy5tYXhFbWl0Qm94LnopOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVz
RnJvbUZsb2F0c1RvUmVmKHJhbmRYLCByYW5kWSwgcmFuZFosIHdvcmxkTWF0cml4LCBwb3NpdGlv
blRvVXBkYXRlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lcyB0aGUgY3VycmVudCBl
bWl0dGVyIGFuZCByZXR1cm5zIGEgY29weSBvZiBpdAorICAgICAqIEByZXR1cm5zIHRoZSBuZXcg
ZW1pdHRlcgorICAgICAqLworICAgIEJveFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuY2xvbmUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBuZXdPbmUgPSBuZXcgQm94UGFydGljbGVFbWl0
dGVyKCk7CisgICAgICAgIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHRoaXMsIG5ld09uZSk7CisgICAgICAgIHJldHVy
biBuZXdPbmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIEdQVVBhcnRp
Y2xlU3lzdGVtIHRvIHNldHVwIHRoZSB1cGRhdGUgc2hhZGVyCisgICAgICogQHBhcmFtIGVmZmVj
dCBkZWZpbmVzIHRoZSB1cGRhdGUgc2hhZGVyCisgICAgICovCisgICAgQm94UGFydGljbGVFbWl0
dGVyLnByb3RvdHlwZS5hcHBseVRvU2hhZGVyID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAg
ICBlZmZlY3Quc2V0VmVjdG9yMygiZGlyZWN0aW9uMSIsIHRoaXMuZGlyZWN0aW9uMSk7CisgICAg
ICAgIGVmZmVjdC5zZXRWZWN0b3IzKCJkaXJlY3Rpb24yIiwgdGhpcy5kaXJlY3Rpb24yKTsKKyAg
ICAgICAgZWZmZWN0LnNldFZlY3RvcjMoIm1pbkVtaXRCb3giLCB0aGlzLm1pbkVtaXRCb3gpOwor
ICAgICAgICBlZmZlY3Quc2V0VmVjdG9yMygibWF4RW1pdEJveCIsIHRoaXMubWF4RW1pdEJveCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHRvIHVzZSB0byB1cGRh
dGUgdGhlIEdQVSBwYXJ0aWNsZXMgdXBkYXRlIHNoYWRlcgorICAgICAqIEByZXR1cm5zIGEgc3Ry
aW5nIGNvbnRhaW5uZyB0aGUgZGVmaW5lcyBzdHJpbmcKKyAgICAgKi8KKyAgICBCb3hQYXJ0aWNs
ZUVtaXR0ZXIucHJvdG90eXBlLmdldEVmZmVjdERlZmluZXMgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiAiI2RlZmluZSBCT1hFTUlUVEVSIjsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJldHVybnMgdGhlIHN0cmluZyAiQm94UGFydGljbGVFbWl0dGVyIgorICAgICAqIEByZXR1cm5z
IGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBCb3hQYXJ0
aWNsZUVtaXR0ZXIucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICJCb3hQYXJ0aWNsZUVtaXR0ZXIiOworICAgIH07CisgICAgLyoqCisgICAgICog
U2VyaWFsaXplcyB0aGUgcGFydGljbGUgc3lzdGVtIHRvIGEgSlNPTiBvYmplY3QuCisgICAgICog
QHJldHVybnMgdGhlIEpTT04gb2JqZWN0CisgICAgICovCisgICAgQm94UGFydGljbGVFbWl0dGVy
LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxp
emF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudHlwZSA9IHRo
aXMuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZGlyZWN0aW9u
MSA9IHRoaXMuZGlyZWN0aW9uMS5hc0FycmF5KCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QuZGlyZWN0aW9uMiA9IHRoaXMuZGlyZWN0aW9uMi5hc0FycmF5KCk7CisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3QubWluRW1pdEJveCA9IHRoaXMubWluRW1pdEJveC5hc0FycmF5KCk7Cisg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF4RW1pdEJveCA9IHRoaXMubWF4RW1pdEJveC5h
c0FycmF5KCk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07Cisg
ICAgLyoqCisgICAgICogUGFyc2UgcHJvcGVydGllcyBmcm9tIGEgSlNPTiBvYmplY3QKKyAgICAg
KiBAcGFyYW0gc2VyaWFsaXphdGlvbk9iamVjdCBkZWZpbmVzIHRoZSBKU09OIG9iamVjdAorICAg
ICAqLworICAgIEJveFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAo
c2VyaWFsaXphdGlvbk9iamVjdCkgeworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKHNlcmlhbGl6
YXRpb25PYmplY3QuZGlyZWN0aW9uMSwgMCwgdGhpcy5kaXJlY3Rpb24xKTsKKyAgICAgICAgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5G
cm9tQXJyYXlUb1JlZihzZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvbjIsIDAsIHRoaXMuZGly
ZWN0aW9uMik7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYoc2VyaWFsaXphdGlvbk9iamVjdC5t
aW5FbWl0Qm94LCAwLCB0aGlzLm1pbkVtaXRCb3gpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVm
KHNlcmlhbGl6YXRpb25PYmplY3QubWF4RW1pdEJveCwgMCwgdGhpcy5tYXhFbWl0Qm94KTsKKyAg
ICB9OworICAgIHJldHVybiBCb3hQYXJ0aWNsZUVtaXR0ZXI7Cit9KCkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL1BhcnRpY2xlcy9FbWl0dGVyVHlwZXMvY29uZVBhcnRpY2xlRW1pdHRl
ci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9QYXJ0aWNsZXMvRW1pdHRlclR5cGVzL2NvbmVQYXJ0aWNs
ZUVtaXR0ZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDb25lUGFydGljbGVF
bWl0dGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbmVQYXJ0aWNs
ZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvbmVQYXJ0aWNsZUVtaXR0ZXI7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVlcENv
cGllciAqLyAiLi9NaXNjL2RlZXBDb3BpZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21h
dGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2Nh
bGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NYXRocy9tYXRoLnNjYWxhciAqLyAiLi9NYXRocy9tYXRoLnNjYWxhci50cyIpOwor
CisKKworLyoqCisgKiBQYXJ0aWNsZSBlbWl0dGVyIGVtaXR0aW5nIHBhcnRpY2xlcyBmcm9tIHRo
ZSBpbnNpZGUgb2YgYSBjb25lLgorICogSXQgZW1pdHMgdGhlIHBhcnRpY2xlcyBhbG9uZ3NpZGUg
dGhlIGNvbmUgdm9sdW1lIGZyb20gdGhlIGJhc2UgdG8gdGhlIHBhcnRpY2xlLgorICogVGhlIGVt
aXNzaW9uIGRpcmVjdGlvbiBtaWdodCBiZSByYW5kb21pemVkLgorICovCit2YXIgQ29uZVBhcnRp
Y2xlRW1pdHRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIENvbmVQYXJ0aWNsZUVtaXR0ZXIKKyAgICAgKiBAcGFy
YW0gcmFkaXVzIHRoZSByYWRpdXMgb2YgdGhlIGVtaXNzaW9uIGNvbmUgKDEgYnkgZGVmYXVsdCkK
KyAgICAgKiBAcGFyYW0gYW5nbGUgdGhlIGNvbmUgYmFzZSBhbmdsZSAoUEkgYnkgZGVmYXVsdCkK
KyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uUmFuZG9taXplciBkZWZpbmVzIGhvdyBtdWNoIHRvIHJh
bmRvbWl6ZSB0aGUgcGFydGljbGUgZGlyZWN0aW9uIFswLTFdIChkZWZhdWx0IGlzIDApCisgICAg
ICovCisgICAgZnVuY3Rpb24gQ29uZVBhcnRpY2xlRW1pdHRlcihyYWRpdXMsIGFuZ2xlLCAKKyAg
ICAvKiogZGVmaW5lcyBob3cgbXVjaCB0byByYW5kb21pemUgdGhlIHBhcnRpY2xlIGRpcmVjdGlv
biBbMC0xXSAoZGVmYXVsdCBpcyAwKSAqLworICAgIGRpcmVjdGlvblJhbmRvbWl6ZXIpIHsKKyAg
ICAgICAgaWYgKHJhZGl1cyA9PT0gdm9pZCAwKSB7IHJhZGl1cyA9IDE7IH0KKyAgICAgICAgaWYg
KGFuZ2xlID09PSB2b2lkIDApIHsgYW5nbGUgPSBNYXRoLlBJOyB9CisgICAgICAgIGlmIChkaXJl
Y3Rpb25SYW5kb21pemVyID09PSB2b2lkIDApIHsgZGlyZWN0aW9uUmFuZG9taXplciA9IDA7IH0K
KyAgICAgICAgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyID0gZGlyZWN0aW9uUmFuZG9taXplcjsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIGluZGljYXRpbmcg
d2hlcmUgb24gdGhlIHJhZGl1cyB0aGUgc3RhcnQgcG9zaXRpb24gc2hvdWxkIGJlIHBpY2tlZCAo
MSA9IGV2ZXJ5d2hlcmUsIDAgPSBvbmx5IHN1cmZhY2UpCisgICAgICAgICAqLworICAgICAgICB0
aGlzLnJhZGl1c1JhbmdlID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0
cyBhIHZhbHVlIGluZGljYXRpbmcgd2hlcmUgb24gdGhlIGhlaWdodCB0aGUgc3RhcnQgcG9zaXRp
b24gc2hvdWxkIGJlIHBpY2tlZCAoMSA9IGV2ZXJ5d2hlcmUsIDAgPSBvbmx5IHN1cmZhY2UpCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmhlaWdodFJhbmdlID0gMTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIGluZGljYXRpbmcgaWYgYWxsIHRoZSBwYXJ0
aWNsZXMgc2hvdWxkIGJlIGVtaXR0ZWQgZnJvbSB0aGUgc3Bhd24gcG9pbnQgb25seSAodGhlIGJh
c2Ugb2YgdGhlIGNvbmUpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmVtaXRGcm9tU3Bhd25Q
b2ludE9ubHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5hbmdsZSA9IGFuZ2xlOworICAgICAgICB0
aGlzLnJhZGl1cyA9IHJhZGl1czsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENv
bmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLCAicmFkaXVzIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBvciBzZXRzIHRoZSByYWRpdXMgb2YgdGhlIGVtaXNzaW9uIGNvbmUKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3JhZGl1czsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIHRoaXMuX3JhZGl1cyA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5f
YnVpbGRIZWlnaHQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KENvbmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLCAiYW5nbGUiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGFuZ2xlIG9mIHRoZSBlbWlzc2lvbiBjb25l
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9hbmdsZTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7CisgICAgICAgICAgICB0aGlz
Ll9idWlsZEhlaWdodCgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBDb25lUGFydGljbGVFbWl0
dGVyLnByb3RvdHlwZS5fYnVpbGRIZWlnaHQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLl9hbmdsZSAhPT0gMCkgeworICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5fcmFk
aXVzIC8gTWF0aC50YW4odGhpcy5fYW5nbGUgLyAyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IDE7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgcGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIGRpcmVj
dGlvbiBpcyBjb21wdXRlZCBmb3IgdGhlIGNyZWF0ZWQgcGFydGljbGUuCisgICAgICogQHBhcmFt
IHdvcmxkTWF0cml4IGlzIHRoZSB3b3JsZCBtYXRyaXggb2YgdGhlIHBhcnRpY2xlIHN5c3RlbQor
ICAgICAqIEBwYXJhbSBkaXJlY3Rpb25Ub1VwZGF0ZSBpcyB0aGUgZGlyZWN0aW9uIHZlY3RvciB0
byB1cGRhdGUgd2l0aCB0aGUgcmVzdWx0CisgICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBw
YXJ0aWNsZSB3ZSBhcmUgY29tcHV0ZWQgdGhlIGRpcmVjdGlvbiBmb3IKKyAgICAgKi8KKyAgICBD
b25lUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5zdGFydERpcmVjdGlvbkZ1bmN0aW9uID0gZnVu
Y3Rpb24gKHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1VwZGF0ZSwgcGFydGljbGUpIHsKKyAgICAg
ICAgaWYgKE1hdGguYWJzKE1hdGguY29zKHRoaXMuX2FuZ2xlKSkgPT09IDEuMCkgeworICAgICAg
ICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZl
Y3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWxGcm9tRmxvYXRzVG9SZWYoMCwgMS4wLCAwLCB3b3JsZE1h
dHJpeCwgZGlyZWN0aW9uVG9VcGRhdGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgLy8gbWVhc3VyZSB0aGUgZGlyZWN0aW9uIFZlY3RvciBmcm9tIHRoZSBlbWl0dGVy
IHRvIHRoZSBwYXJ0aWNsZS4KKyAgICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSBwYXJ0aWNsZS5w
b3NpdGlvbi5zdWJ0cmFjdCh3b3JsZE1hdHJpeC5nZXRUcmFuc2xhdGlvbigpKS5ub3JtYWxpemUo
KTsKKyAgICAgICAgICAgIHZhciByYW5kWCA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSgwLCB0aGlzLmRpcmVjdGlv
blJhbmRvbWl6ZXIpOworICAgICAgICAgICAgdmFyIHJhbmRZID0gX01hdGhzX21hdGhfc2NhbGFy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKDAsIHRo
aXMuZGlyZWN0aW9uUmFuZG9taXplcik7CisgICAgICAgICAgICB2YXIgcmFuZFogPSBfTWF0aHNf
bWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0uUmFuZG9t
UmFuZ2UoMCwgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyKTsKKyAgICAgICAgICAgIGRpcmVjdGlv
bi54ICs9IHJhbmRYOworICAgICAgICAgICAgZGlyZWN0aW9uLnkgKz0gcmFuZFk7CisgICAgICAg
ICAgICBkaXJlY3Rpb24ueiArPSByYW5kWjsKKyAgICAgICAgICAgIGRpcmVjdGlvbi5ub3JtYWxp
emUoKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsRnJvbUZsb2F0c1RvUmVmKGRpcmVj
dGlvbi54LCBkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLnosIHdvcmxkTWF0cml4LCBkaXJlY3Rpb25U
b1VwZGF0ZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0
aGUgcGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIHBvc2l0aW9uIGlzIGNvbXB1dGVkIGZvciB0aGUg
Y3JlYXRlZCBwYXJ0aWNsZS4KKyAgICAgKiBAcGFyYW0gd29ybGRNYXRyaXggaXMgdGhlIHdvcmxk
IG1hdHJpeCBvZiB0aGUgcGFydGljbGUgc3lzdGVtCisgICAgICogQHBhcmFtIHBvc2l0aW9uVG9V
cGRhdGUgaXMgdGhlIHBvc2l0aW9uIHZlY3RvciB0byB1cGRhdGUgd2l0aCB0aGUgcmVzdWx0Cisg
ICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBwYXJ0aWNsZSB3ZSBhcmUgY29tcHV0ZWQgdGhl
IHBvc2l0aW9uIGZvcgorICAgICAqLworICAgIENvbmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBl
LnN0YXJ0UG9zaXRpb25GdW5jdGlvbiA9IGZ1bmN0aW9uICh3b3JsZE1hdHJpeCwgcG9zaXRpb25U
b1VwZGF0ZSwgcGFydGljbGUpIHsKKyAgICAgICAgdmFyIHMgPSBfTWF0aHNfbWF0aF9zY2FsYXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0uUmFuZG9tUmFuZ2UoMCwgTWF0
aC5QSSAqIDIpOworICAgICAgICB2YXIgaDsKKyAgICAgICAgaWYgKCF0aGlzLmVtaXRGcm9tU3Bh
d25Qb2ludE9ubHkpIHsKKyAgICAgICAgICAgIGggPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0uUmFuZG9tUmFuZ2UoMCwgdGhpcy5oZWln
aHRSYW5nZSk7CisgICAgICAgICAgICAvLyBCZXR0ZXIgZGlzdHJpYnV0aW9uIGluIGEgY29uZSBh
dCBub3JtYWwgYW5nbGVzLgorICAgICAgICAgICAgaCA9IDEgLSBoICogaDsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGggPSAwLjAwMDE7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHJhZGl1cyA9IHRoaXMuX3JhZGl1cyAtIF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSgwLCB0aGlzLl9yYWRp
dXMgKiB0aGlzLnJhZGl1c1JhbmdlKTsKKyAgICAgICAgcmFkaXVzID0gcmFkaXVzICogaDsKKyAg
ICAgICAgdmFyIHJhbmRYID0gcmFkaXVzICogTWF0aC5zaW4ocyk7CisgICAgICAgIHZhciByYW5k
WiA9IHJhZGl1cyAqIE1hdGguY29zKHMpOworICAgICAgICB2YXIgcmFuZFkgPSBoICogdGhpcy5f
aGVpZ2h0OworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzRnJvbUZsb2F0c1RvUmVmKHJh
bmRYLCByYW5kWSwgcmFuZFosIHdvcmxkTWF0cml4LCBwb3NpdGlvblRvVXBkYXRlKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENsb25lcyB0aGUgY3VycmVudCBlbWl0dGVyIGFuZCByZXR1cm5z
IGEgY29weSBvZiBpdAorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgZW1pdHRlcgorICAgICAqLwor
ICAgIENvbmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgbmV3T25lID0gbmV3IENvbmVQYXJ0aWNsZUVtaXR0ZXIodGhpcy5fcmFkaXVz
LCB0aGlzLl9hbmdsZSwgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyKTsKKyAgICAgICAgX01pc2Nf
ZGVlcENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEZWVwQ29waWVyIl0uRGVl
cENvcHkodGhpcywgbmV3T25lKTsKKyAgICAgICAgcmV0dXJuIG5ld09uZTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgR1BVUGFydGljbGVTeXN0ZW0gdG8gc2V0dXAgdGhl
IHVwZGF0ZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0gZWZmZWN0IGRlZmluZXMgdGhlIHVwZGF0ZSBz
aGFkZXIKKyAgICAgKi8KKyAgICBDb25lUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5hcHBseVRv
U2hhZGVyID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCJy
YWRpdXMiLCB0aGlzLl9yYWRpdXMsIHRoaXMucmFkaXVzUmFuZ2UpOworICAgICAgICBlZmZlY3Qu
c2V0RmxvYXQoImNvbmVBbmdsZSIsIHRoaXMuX2FuZ2xlKTsKKyAgICAgICAgZWZmZWN0LnNldEZs
b2F0MigiaGVpZ2h0IiwgdGhpcy5faGVpZ2h0LCB0aGlzLmhlaWdodFJhbmdlKTsKKyAgICAgICAg
ZWZmZWN0LnNldEZsb2F0KCJkaXJlY3Rpb25SYW5kb21pemVyIiwgdGhpcy5kaXJlY3Rpb25SYW5k
b21pemVyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgdG8gdXNl
IHRvIHVwZGF0ZSB0aGUgR1BVIHBhcnRpY2xlcyB1cGRhdGUgc2hhZGVyCisgICAgICogQHJldHVy
bnMgYSBzdHJpbmcgY29udGFpbm5nIHRoZSBkZWZpbmVzIHN0cmluZworICAgICAqLworICAgIENv
bmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmdldEVmZmVjdERlZmluZXMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBkZWZpbmVzID0gIiNkZWZpbmUgQ09ORUVNSVRURVIiOworICAgICAg
ICBpZiAodGhpcy5lbWl0RnJvbVNwYXduUG9pbnRPbmx5KSB7CisgICAgICAgICAgICBkZWZpbmVz
ICs9ICJcbiNkZWZpbmUgQ09ORUVNSVRURVJTUEFXTlBPSU5UIjsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZGVmaW5lczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0
cmluZyAiQ29uZVBhcnRpY2xlRW1pdHRlciIKKyAgICAgKiBAcmV0dXJucyBhIHN0cmluZyBjb250
YWluaW5nIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgQ29uZVBhcnRpY2xlRW1pdHRlci5w
cm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkNv
bmVQYXJ0aWNsZUVtaXR0ZXIiOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0
aGUgcGFydGljbGUgc3lzdGVtIHRvIGEgSlNPTiBvYmplY3QuCisgICAgICogQHJldHVybnMgdGhl
IEpTT04gb2JqZWN0CisgICAgICovCisgICAgQ29uZVBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUu
c2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVj
dCA9IHt9OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnR5cGUgPSB0aGlzLmdldENsYXNz
TmFtZSgpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJhZGl1cyA9IHRoaXMuX3JhZGl1
czsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hbmdsZSA9IHRoaXMuX2FuZ2xlOworICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvblJhbmRvbWl6ZXIgPSB0aGlzLmRpcmVj
dGlvblJhbmRvbWl6ZXI7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAg
IH07CisgICAgLyoqCisgICAgICogUGFyc2UgcHJvcGVydGllcyBmcm9tIGEgSlNPTiBvYmplY3QK
KyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlvbk9iamVjdCBkZWZpbmVzIHRoZSBKU09OIG9iamVj
dAorICAgICAqLworICAgIENvbmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnBhcnNlID0gZnVu
Y3Rpb24gKHNlcmlhbGl6YXRpb25PYmplY3QpIHsKKyAgICAgICAgdGhpcy5yYWRpdXMgPSBzZXJp
YWxpemF0aW9uT2JqZWN0LnJhZGl1czsKKyAgICAgICAgdGhpcy5hbmdsZSA9IHNlcmlhbGl6YXRp
b25PYmplY3QuYW5nbGU7CisgICAgICAgIHRoaXMuZGlyZWN0aW9uUmFuZG9taXplciA9IHNlcmlh
bGl6YXRpb25PYmplY3QuZGlyZWN0aW9uUmFuZG9taXplcjsKKyAgICB9OworICAgIHJldHVybiBD
b25lUGFydGljbGVFbWl0dGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Q
YXJ0aWNsZXMvRW1pdHRlclR5cGVzL2N5bGluZGVyUGFydGljbGVFbWl0dGVyLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9QYXJ0aWNsZXMvRW1pdHRlclR5cGVzL2N5bGluZGVyUGFydGljbGVFbWl0
dGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEN5bGluZGVyUGFydGlj
bGVFbWl0dGVyLCBDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN5bGluZGVyUGFydGljbGVFbWl0dGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBDeWxpbmRlclBhcnRpY2xlRW1pdHRlcjsgfSk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhz
L21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnNjYWxhciAqLyAi
Li9NYXRocy9tYXRoLnNjYWxhci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNj
X2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01pc2MvZGVlcENvcGllciAqLyAiLi9NaXNjL2RlZXBDb3BpZXIudHMi
KTsKKworCisKKworLyoqCisgKiBQYXJ0aWNsZSBlbWl0dGVyIGVtaXR0aW5nIHBhcnRpY2xlcyBm
cm9tIHRoZSBpbnNpZGUgb2YgYSBjeWxpbmRlci4KKyAqIEl0IGVtaXRzIHRoZSBwYXJ0aWNsZXMg
YWxvbmdzaWRlIHRoZSBjeWxpbmRlciByYWRpdXMuIFRoZSBlbWlzc2lvbiBkaXJlY3Rpb24gbWln
aHQgYmUgcmFuZG9taXplZC4KKyAqLwordmFyIEN5bGluZGVyUGFydGljbGVFbWl0dGVyID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICogQ3JlYXRlcyBhIG5ldyBp
bnN0YW5jZSBDeWxpbmRlclBhcnRpY2xlRW1pdHRlcgorICAgICogQHBhcmFtIHJhZGl1cyB0aGUg
cmFkaXVzIG9mIHRoZSBlbWlzc2lvbiBjeWxpbmRlciAoMSBieSBkZWZhdWx0KQorICAgICogQHBh
cmFtIGhlaWdodCB0aGUgaGVpZ2h0IG9mIHRoZSBlbWlzc2lvbiBjeWxpbmRlciAoMSBieSBkZWZh
dWx0KQorICAgICogQHBhcmFtIHJhZGl1c1JhbmdlIHRoZSByYW5nZSBvZiB0aGUgZW1pc3Npb24g
Y3lsaW5kZXIgWzAtMV0gMCBTdXJmYWNlIG9ubHksIDEgRW50aXJlIFJhZGl1cyAoMSBieSBkZWZh
dWx0KQorICAgICogQHBhcmFtIGRpcmVjdGlvblJhbmRvbWl6ZXIgZGVmaW5lcyBob3cgbXVjaCB0
byByYW5kb21pemUgdGhlIHBhcnRpY2xlIGRpcmVjdGlvbiBbMC0xXQorICAgICovCisgICAgZnVu
Y3Rpb24gQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIoCisgICAgLyoqCisgICAgICogVGhlIHJhZGl1
cyBvZiB0aGUgZW1pc3Npb24gY3lsaW5kZXIuCisgICAgICovCisgICAgcmFkaXVzLCAKKyAgICAv
KioKKyAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBlbWlzc2lvbiBjeWxpbmRlci4KKyAgICAgKi8K
KyAgICBoZWlnaHQsIAorICAgIC8qKgorICAgICAqIFRoZSByYW5nZSBvZiBlbWlzc2lvbiBbMC0x
XSAwIFN1cmZhY2Ugb25seSwgMSBFbnRpcmUgUmFkaXVzLgorICAgICAqLworICAgIHJhZGl1c1Jh
bmdlLCAKKyAgICAvKioKKyAgICAgKiBIb3cgbXVjaCB0byByYW5kb21pemUgdGhlIHBhcnRpY2xl
IGRpcmVjdGlvbiBbMC0xXS4KKyAgICAgKi8KKyAgICBkaXJlY3Rpb25SYW5kb21pemVyKSB7Cisg
ICAgICAgIGlmIChyYWRpdXMgPT09IHZvaWQgMCkgeyByYWRpdXMgPSAxOyB9CisgICAgICAgIGlm
IChoZWlnaHQgPT09IHZvaWQgMCkgeyBoZWlnaHQgPSAxOyB9CisgICAgICAgIGlmIChyYWRpdXNS
YW5nZSA9PT0gdm9pZCAwKSB7IHJhZGl1c1JhbmdlID0gMTsgfQorICAgICAgICBpZiAoZGlyZWN0
aW9uUmFuZG9taXplciA9PT0gdm9pZCAwKSB7IGRpcmVjdGlvblJhbmRvbWl6ZXIgPSAwOyB9Cisg
ICAgICAgIHRoaXMucmFkaXVzID0gcmFkaXVzOworICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdo
dDsKKyAgICAgICAgdGhpcy5yYWRpdXNSYW5nZSA9IHJhZGl1c1JhbmdlOworICAgICAgICB0aGlz
LmRpcmVjdGlvblJhbmRvbWl6ZXIgPSBkaXJlY3Rpb25SYW5kb21pemVyOworICAgIH0KKyAgICAv
KioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBhcnRpY2xlIFN5c3RlbSB3aGVuIHRoZSBkaXJlY3Rp
b24gaXMgY29tcHV0ZWQgZm9yIHRoZSBjcmVhdGVkIHBhcnRpY2xlLgorICAgICAqIEBwYXJhbSB3
b3JsZE1hdHJpeCBpcyB0aGUgd29ybGQgbWF0cml4IG9mIHRoZSBwYXJ0aWNsZSBzeXN0ZW0KKyAg
ICAgKiBAcGFyYW0gZGlyZWN0aW9uVG9VcGRhdGUgaXMgdGhlIGRpcmVjdGlvbiB2ZWN0b3IgdG8g
dXBkYXRlIHdpdGggdGhlIHJlc3VsdAorICAgICAqIEBwYXJhbSBwYXJ0aWNsZSBpcyB0aGUgcGFy
dGljbGUgd2UgYXJlIGNvbXB1dGVkIHRoZSBkaXJlY3Rpb24gZm9yCisgICAgICovCisgICAgQ3ls
aW5kZXJQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnN0YXJ0RGlyZWN0aW9uRnVuY3Rpb24gPSBm
dW5jdGlvbiAod29ybGRNYXRyaXgsIGRpcmVjdGlvblRvVXBkYXRlLCBwYXJ0aWNsZSkgeworICAg
ICAgICB2YXIgZGlyZWN0aW9uID0gcGFydGljbGUucG9zaXRpb24uc3VidHJhY3Qod29ybGRNYXRy
aXguZ2V0VHJhbnNsYXRpb24oKSkubm9ybWFsaXplKCk7CisgICAgICAgIHZhciByYW5kWSA9IF9N
YXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5S
YW5kb21SYW5nZSgtdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyIC8gMiwgdGhpcy5kaXJlY3Rpb25S
YW5kb21pemVyIC8gMik7CisgICAgICAgIHZhciBhbmdsZSA9IE1hdGguYXRhbjIoZGlyZWN0aW9u
LngsIGRpcmVjdGlvbi56KTsKKyAgICAgICAgYW5nbGUgKz0gX01hdGhzX21hdGhfc2NhbGFyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKC1NYXRoLlBJ
IC8gMiwgTWF0aC5QSSAvIDIpICogdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyOworICAgICAgICBk
aXJlY3Rpb24ueSA9IHJhbmRZOyAvLyBzZXQgZGlyZWN0aW9uIHkgdG8gcmFuZCB5IHRvIG1pcnJv
ciBub3JtYWwgb2YgY3lsaW5kZXIgc3VyZmFjZQorICAgICAgICBkaXJlY3Rpb24ueCA9IE1hdGgu
c2luKGFuZ2xlKTsKKyAgICAgICAgZGlyZWN0aW9uLnogPSBNYXRoLmNvcyhhbmdsZSk7CisgICAg
ICAgIGRpcmVjdGlvbi5ub3JtYWxpemUoKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWxGcm9t
RmxvYXRzVG9SZWYoZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueiwgd29ybGRN
YXRyaXgsIGRpcmVjdGlvblRvVXBkYXRlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxl
ZCBieSB0aGUgcGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIHBvc2l0aW9uIGlzIGNvbXB1dGVkIGZv
ciB0aGUgY3JlYXRlZCBwYXJ0aWNsZS4KKyAgICAgKiBAcGFyYW0gd29ybGRNYXRyaXggaXMgdGhl
IHdvcmxkIG1hdHJpeCBvZiB0aGUgcGFydGljbGUgc3lzdGVtCisgICAgICogQHBhcmFtIHBvc2l0
aW9uVG9VcGRhdGUgaXMgdGhlIHBvc2l0aW9uIHZlY3RvciB0byB1cGRhdGUgd2l0aCB0aGUgcmVz
dWx0CisgICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBwYXJ0aWNsZSB3ZSBhcmUgY29tcHV0
ZWQgdGhlIHBvc2l0aW9uIGZvcgorICAgICAqLworICAgIEN5bGluZGVyUGFydGljbGVFbWl0dGVy
LnByb3RvdHlwZS5zdGFydFBvc2l0aW9uRnVuY3Rpb24gPSBmdW5jdGlvbiAod29ybGRNYXRyaXgs
IHBvc2l0aW9uVG9VcGRhdGUsIHBhcnRpY2xlKSB7CisgICAgICAgIHZhciB5UG9zID0gX01hdGhz
X21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRv
bVJhbmdlKC10aGlzLmhlaWdodCAvIDIsIHRoaXMuaGVpZ2h0IC8gMik7CisgICAgICAgIHZhciBh
bmdsZSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJT
Y2FsYXIiXS5SYW5kb21SYW5nZSgwLCAyICogTWF0aC5QSSk7CisgICAgICAgIC8vIFBpY2sgYSBw
cm9wZXJseSBkaXN0cmlidXRlZCBwb2ludCB3aXRoaW4gdGhlIGNpcmNsZSBodHRwczovL3Byb2dy
YW1taW5nLmd1aWRlL3JhbmRvbS1wb2ludC13aXRoaW4tY2lyY2xlLmh0bWwKKyAgICAgICAgdmFy
IHJhZGl1c0Rpc3RyaWJ1dGlvbiA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSgoMSAtIHRoaXMucmFkaXVzUmFuZ2Up
ICogKDEgLSB0aGlzLnJhZGl1c1JhbmdlKSwgMSk7CisgICAgICAgIHZhciBwb3NpdGlvblJhZGl1
cyA9IE1hdGguc3FydChyYWRpdXNEaXN0cmlidXRpb24pICogdGhpcy5yYWRpdXM7CisgICAgICAg
IHZhciB4UG9zID0gcG9zaXRpb25SYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSk7CisgICAgICAgIHZh
ciB6UG9zID0gcG9zaXRpb25SYWRpdXMgKiBNYXRoLnNpbihhbmdsZSk7CisgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJh
bnNmb3JtQ29vcmRpbmF0ZXNGcm9tRmxvYXRzVG9SZWYoeFBvcywgeVBvcywgelBvcywgd29ybGRN
YXRyaXgsIHBvc2l0aW9uVG9VcGRhdGUpOworICAgIH07CisgICAgLyoqCisgICAgICogQ2xvbmVz
IHRoZSBjdXJyZW50IGVtaXR0ZXIgYW5kIHJldHVybnMgYSBjb3B5IG9mIGl0CisgICAgICogQHJl
dHVybnMgdGhlIG5ldyBlbWl0dGVyCisgICAgICovCisgICAgQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0
ZXIucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbmV3T25lID0g
bmV3IEN5bGluZGVyUGFydGljbGVFbWl0dGVyKHRoaXMucmFkaXVzLCB0aGlzLmRpcmVjdGlvblJh
bmRvbWl6ZXIpOworICAgICAgICBfTWlzY19kZWVwQ29waWVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIkRlZXBDb3BpZXIiXS5EZWVwQ29weSh0aGlzLCBuZXdPbmUpOworICAgICAgICBy
ZXR1cm4gbmV3T25lOworICAgIH07CisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBHUFVQ
YXJ0aWNsZVN5c3RlbSB0byBzZXR1cCB0aGUgdXBkYXRlIHNoYWRlcgorICAgICAqIEBwYXJhbSBl
ZmZlY3QgZGVmaW5lcyB0aGUgdXBkYXRlIHNoYWRlcgorICAgICAqLworICAgIEN5bGluZGVyUGFy
dGljbGVFbWl0dGVyLnByb3RvdHlwZS5hcHBseVRvU2hhZGVyID0gZnVuY3Rpb24gKGVmZmVjdCkg
eworICAgICAgICBlZmZlY3Quc2V0RmxvYXQoInJhZGl1cyIsIHRoaXMucmFkaXVzKTsKKyAgICAg
ICAgZWZmZWN0LnNldEZsb2F0KCJoZWlnaHQiLCB0aGlzLmhlaWdodCk7CisgICAgICAgIGVmZmVj
dC5zZXRGbG9hdCgicmFkaXVzUmFuZ2UiLCB0aGlzLnJhZGl1c1JhbmdlKTsKKyAgICAgICAgZWZm
ZWN0LnNldEZsb2F0KCJkaXJlY3Rpb25SYW5kb21pemVyIiwgdGhpcy5kaXJlY3Rpb25SYW5kb21p
emVyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgdG8gdXNlIHRv
IHVwZGF0ZSB0aGUgR1BVIHBhcnRpY2xlcyB1cGRhdGUgc2hhZGVyCisgICAgICogQHJldHVybnMg
YSBzdHJpbmcgY29udGFpbm5nIHRoZSBkZWZpbmVzIHN0cmluZworICAgICAqLworICAgIEN5bGlu
ZGVyUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5nZXRFZmZlY3REZWZpbmVzID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gIiNkZWZpbmUgQ1lMSU5ERVJFTUlUVEVSIjsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyAiQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0
ZXIiCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2xhc3MgbmFtZQor
ICAgICAqLworICAgIEN5bGluZGVyUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5nZXRDbGFzc05h
bWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0
ZXIiOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgcGFydGljbGUgc3lz
dGVtIHRvIGEgSlNPTiBvYmplY3QuCisgICAgICogQHJldHVybnMgdGhlIEpTT04gb2JqZWN0Cisg
ICAgICovCisgICAgQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnNlcmlhbGl6ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50eXBlID0gdGhpcy5nZXRDbGFzc05hbWUoKTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5yYWRpdXMgPSB0aGlzLnJhZGl1czsKKyAgICAgICAg
c2VyaWFsaXphdGlvbk9iamVjdC5oZWlnaHQgPSB0aGlzLmhlaWdodDsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5yYWRpdXNSYW5nZSA9IHRoaXMucmFkaXVzUmFuZ2U7CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QuZGlyZWN0aW9uUmFuZG9taXplciA9IHRoaXMuZGlyZWN0aW9uUmFu
ZG9taXplcjsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBQYXJzZSBwcm9wZXJ0aWVzIGZyb20gYSBKU09OIG9iamVjdAorICAgICAq
IEBwYXJhbSBzZXJpYWxpemF0aW9uT2JqZWN0IGRlZmluZXMgdGhlIEpTT04gb2JqZWN0CisgICAg
ICovCisgICAgQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rp
b24gKHNlcmlhbGl6YXRpb25PYmplY3QpIHsKKyAgICAgICAgdGhpcy5yYWRpdXMgPSBzZXJpYWxp
emF0aW9uT2JqZWN0LnJhZGl1czsKKyAgICAgICAgdGhpcy5oZWlnaHQgPSBzZXJpYWxpemF0aW9u
T2JqZWN0LmhlaWdodDsKKyAgICAgICAgdGhpcy5yYWRpdXNSYW5nZSA9IHNlcmlhbGl6YXRpb25P
YmplY3QucmFkaXVzUmFuZ2U7CisgICAgICAgIHRoaXMuZGlyZWN0aW9uUmFuZG9taXplciA9IHNl
cmlhbGl6YXRpb25PYmplY3QuZGlyZWN0aW9uUmFuZG9taXplcjsKKyAgICB9OworICAgIHJldHVy
biBDeWxpbmRlclBhcnRpY2xlRW1pdHRlcjsKK30oKSk7CisKKy8qKgorICogUGFydGljbGUgZW1p
dHRlciBlbWl0dGluZyBwYXJ0aWNsZXMgZnJvbSB0aGUgaW5zaWRlIG9mIGEgY3lsaW5kZXIuCisg
KiBJdCBlbWl0cyB0aGUgcGFydGljbGVzIHJhbmRvbWx5IGJldHdlZW4gdHdvIHZlY3RvcnMuCisg
Ki8KK3ZhciBDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZXh0ZW5kcyJdKEN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIsIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBDeWxpbmRlckRpcmVjdGVk
UGFydGljbGVFbWl0dGVyCisgICAgICogQHBhcmFtIHJhZGl1cyB0aGUgcmFkaXVzIG9mIHRoZSBl
bWlzc2lvbiBjeWxpbmRlciAoMSBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBoZWlnaHQgdGhl
IGhlaWdodCBvZiB0aGUgZW1pc3Npb24gY3lsaW5kZXIgKDEgYnkgZGVmYXVsdCkKKyAgICAgKiBA
cGFyYW0gcmFkaXVzUmFuZ2UgdGhlIHJhbmdlIG9mIHRoZSBlbWlzc2lvbiBjeWxpbmRlciBbMC0x
XSAwIFN1cmZhY2Ugb25seSwgMSBFbnRpcmUgUmFkaXVzICgxIGJ5IGRlZmF1bHQpCisgICAgICog
QHBhcmFtIGRpcmVjdGlvbjEgdGhlIG1pbiBsaW1pdCBvZiB0aGUgZW1pc3Npb24gZGlyZWN0aW9u
ICh1cCB2ZWN0b3IgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uMiB0aGUgbWF4
IGxpbWl0IG9mIHRoZSBlbWlzc2lvbiBkaXJlY3Rpb24gKHVwIHZlY3RvciBieSBkZWZhdWx0KQor
ICAgICAqLworICAgIGZ1bmN0aW9uIEN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIocmFk
aXVzLCBoZWlnaHQsIHJhZGl1c1JhbmdlLCAKKyAgICAvKioKKyAgICAgKiBUaGUgbWluIGxpbWl0
IG9mIHRoZSBlbWlzc2lvbiBkaXJlY3Rpb24uCisgICAgICovCisgICAgZGlyZWN0aW9uMSwgCisg
ICAgLyoqCisgICAgICogVGhlIG1heCBsaW1pdCBvZiB0aGUgZW1pc3Npb24gZGlyZWN0aW9uLgor
ICAgICAqLworICAgIGRpcmVjdGlvbjIpIHsKKyAgICAgICAgaWYgKHJhZGl1cyA9PT0gdm9pZCAw
KSB7IHJhZGl1cyA9IDE7IH0KKyAgICAgICAgaWYgKGhlaWdodCA9PT0gdm9pZCAwKSB7IGhlaWdo
dCA9IDE7IH0KKyAgICAgICAgaWYgKHJhZGl1c1JhbmdlID09PSB2b2lkIDApIHsgcmFkaXVzUmFu
Z2UgPSAxOyB9CisgICAgICAgIGlmIChkaXJlY3Rpb24xID09PSB2b2lkIDApIHsgZGlyZWN0aW9u
MSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVjdG9yMyJdKDAsIDEsIDApOyB9CisgICAgICAgIGlmIChkaXJlY3Rpb24yID09PSB2b2lkIDAp
IHsgZGlyZWN0aW9uMiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVjdG9yMyJdKDAsIDEsIDApOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9z
dXBlci5jYWxsKHRoaXMsIHJhZGl1cywgaGVpZ2h0LCByYWRpdXNSYW5nZSkgfHwgdGhpczsKKyAg
ICAgICAgX3RoaXMuZGlyZWN0aW9uMSA9IGRpcmVjdGlvbjE7CisgICAgICAgIF90aGlzLmRpcmVj
dGlvbjIgPSBkaXJlY3Rpb24yOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8q
KgorICAgICAqIENhbGxlZCBieSB0aGUgcGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIGRpcmVjdGlv
biBpcyBjb21wdXRlZCBmb3IgdGhlIGNyZWF0ZWQgcGFydGljbGUuCisgICAgICogQHBhcmFtIHdv
cmxkTWF0cml4IGlzIHRoZSB3b3JsZCBtYXRyaXggb2YgdGhlIHBhcnRpY2xlIHN5c3RlbQorICAg
ICAqIEBwYXJhbSBkaXJlY3Rpb25Ub1VwZGF0ZSBpcyB0aGUgZGlyZWN0aW9uIHZlY3RvciB0byB1
cGRhdGUgd2l0aCB0aGUgcmVzdWx0CisgICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBwYXJ0
aWNsZSB3ZSBhcmUgY29tcHV0ZWQgdGhlIGRpcmVjdGlvbiBmb3IKKyAgICAgKi8KKyAgICBDeWxp
bmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5zdGFydERpcmVjdGlvbkZ1bmN0
aW9uID0gZnVuY3Rpb24gKHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1VwZGF0ZSwgcGFydGljbGUp
IHsKKyAgICAgICAgdmFyIHJhbmRYID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKHRoaXMuZGlyZWN0aW9uMS54LCB0
aGlzLmRpcmVjdGlvbjIueCk7CisgICAgICAgIHZhciByYW5kWSA9IF9NYXRoc19tYXRoX3NjYWxh
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSh0aGlz
LmRpcmVjdGlvbjEueSwgdGhpcy5kaXJlY3Rpb24yLnkpOworICAgICAgICB2YXIgcmFuZFogPSBf
TWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0u
UmFuZG9tUmFuZ2UodGhpcy5kaXJlY3Rpb24xLnosIHRoaXMuZGlyZWN0aW9uMi56KTsKKyAgICAg
ICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3Rv
cjMiXS5UcmFuc2Zvcm1Ob3JtYWxGcm9tRmxvYXRzVG9SZWYocmFuZFgsIHJhbmRZLCByYW5kWiwg
d29ybGRNYXRyaXgsIGRpcmVjdGlvblRvVXBkYXRlKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENsb25lcyB0aGUgY3VycmVudCBlbWl0dGVyIGFuZCByZXR1cm5zIGEgY29weSBvZiBpdAorICAg
ICAqIEByZXR1cm5zIHRoZSBuZXcgZW1pdHRlcgorICAgICAqLworICAgIEN5bGluZGVyRGlyZWN0
ZWRQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgbmV3T25lID0gbmV3IEN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIodGhpcy5y
YWRpdXMsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1c1JhbmdlLCB0aGlzLmRpcmVjdGlvbjEsIHRo
aXMuZGlyZWN0aW9uMik7CisgICAgICAgIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHRoaXMsIG5ld09uZSk7CisgICAg
ICAgIHJldHVybiBuZXdPbmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhl
IEdQVVBhcnRpY2xlU3lzdGVtIHRvIHNldHVwIHRoZSB1cGRhdGUgc2hhZGVyCisgICAgICogQHBh
cmFtIGVmZmVjdCBkZWZpbmVzIHRoZSB1cGRhdGUgc2hhZGVyCisgICAgICovCisgICAgQ3lsaW5k
ZXJEaXJlY3RlZFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuYXBwbHlUb1NoYWRlciA9IGZ1bmN0
aW9uIChlZmZlY3QpIHsKKyAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJyYWRpdXMiLCB0aGlzLnJh
ZGl1cyk7CisgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiaGVpZ2h0IiwgdGhpcy5oZWlnaHQpOwor
ICAgICAgICBlZmZlY3Quc2V0RmxvYXQoInJhZGl1c1JhbmdlIiwgdGhpcy5yYWRpdXNSYW5nZSk7
CisgICAgICAgIGVmZmVjdC5zZXRWZWN0b3IzKCJkaXJlY3Rpb24xIiwgdGhpcy5kaXJlY3Rpb24x
KTsKKyAgICAgICAgZWZmZWN0LnNldFZlY3RvcjMoImRpcmVjdGlvbjIiLCB0aGlzLmRpcmVjdGlv
bjIpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHN0cmluZyB0byB1c2UgdG8g
dXBkYXRlIHRoZSBHUFUgcGFydGljbGVzIHVwZGF0ZSBzaGFkZXIKKyAgICAgKiBAcmV0dXJucyBh
IHN0cmluZyBjb250YWlubmcgdGhlIGRlZmluZXMgc3RyaW5nCisgICAgICovCisgICAgQ3lsaW5k
ZXJEaXJlY3RlZFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuZ2V0RWZmZWN0RGVmaW5lcyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICIjZGVmaW5lIENZTElOREVSRU1JVFRFUlxuI2Rl
ZmluZSBESVJFQ1RFRENZTElOREVSRU1JVFRFUiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIHRoZSBzdHJpbmcgIkN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiCisgICAg
ICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2xhc3MgbmFtZQorICAgICAqLwor
ICAgIEN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmdldENsYXNzTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJDeWxpbmRlckRpcmVjdGVkUGFydGlj
bGVFbWl0dGVyIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIHBhcnRp
Y2xlIHN5c3RlbSB0byBhIEpTT04gb2JqZWN0LgorICAgICAqIEByZXR1cm5zIHRoZSBKU09OIG9i
amVjdAorICAgICAqLworICAgIEN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIucHJvdG90
eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25P
YmplY3QgPSBfc3VwZXIucHJvdG90eXBlLnNlcmlhbGl6ZS5jYWxsKHRoaXMpOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvbjEgPSB0aGlzLmRpcmVjdGlvbjEuYXNBcnJheSgp
OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvbjIgPSB0aGlzLmRpcmVjdGlv
bjIuYXNBcnJheSgpOworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFBhcnNlIHByb3BlcnRpZXMgZnJvbSBhIEpTT04gb2JqZWN0Cisg
ICAgICogQHBhcmFtIHNlcmlhbGl6YXRpb25PYmplY3QgZGVmaW5lcyB0aGUgSlNPTiBvYmplY3QK
KyAgICAgKi8KKyAgICBDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5w
YXJzZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0KSB7CisgICAgICAgIF9zdXBlci5w
cm90b3R5cGUucGFyc2UuY2FsbCh0aGlzLCBzZXJpYWxpemF0aW9uT2JqZWN0KTsKKyAgICAgICAg
dGhpcy5kaXJlY3Rpb24xLmNvcHlGcm9tKHNlcmlhbGl6YXRpb25PYmplY3QuZGlyZWN0aW9uMSk7
CisgICAgICAgIHRoaXMuZGlyZWN0aW9uMi5jb3B5RnJvbShzZXJpYWxpemF0aW9uT2JqZWN0LmRp
cmVjdGlvbjIpOworICAgIH07CisgICAgcmV0dXJuIEN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVt
aXR0ZXI7Cit9KEN5bGluZGVyUGFydGljbGVFbWl0dGVyKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vUGFydGljbGVzL0VtaXR0ZXJUeXBlcy9oZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRl
ci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGFydGljbGVzL0VtaXR0ZXJUeXBlcy9oZW1p
c3BoZXJpY1BhcnRpY2xlRW1pdHRlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gSGVtaXNwaGVyaWNQYXJ0aWNsZUVtaXR0ZXI7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVlcENvcGllciAqLyAiLi9NaXNj
L2RlZXBDb3BpZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9t
YXRoLnNjYWxhciAqLyAiLi9NYXRocy9tYXRoLnNjYWxhci50cyIpOworCisKKworLyoqCisgKiBQ
YXJ0aWNsZSBlbWl0dGVyIGVtaXR0aW5nIHBhcnRpY2xlcyBmcm9tIHRoZSBpbnNpZGUgb2YgYSBo
ZW1pc3BoZXJlLgorICogSXQgZW1pdHMgdGhlIHBhcnRpY2xlcyBhbG9uZ3NpZGUgdGhlIGhlbWlz
cGhlcmUgcmFkaXVzLiBUaGUgZW1pc3Npb24gZGlyZWN0aW9uIG1pZ2h0IGJlIHJhbmRvbWl6ZWQu
CisgKi8KK3ZhciBIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgSGVtaXNw
aGVyaWNQYXJ0aWNsZUVtaXR0ZXIKKyAgICAqIEBwYXJhbSByYWRpdXMgdGhlIHJhZGl1cyBvZiB0
aGUgZW1pc3Npb24gaGVtaXNwaGVyZSAoMSBieSBkZWZhdWx0KQorICAgICogQHBhcmFtIHJhZGl1
c1JhbmdlIHRoZSByYW5nZSBvZiB0aGUgZW1pc3Npb24gaGVtaXNwaGVyZSBbMC0xXSAwIFN1cmZh
Y2Ugb25seSwgMSBFbnRpcmUgUmFkaXVzICgxIGJ5IGRlZmF1bHQpCisgICAgKiBAcGFyYW0gZGly
ZWN0aW9uUmFuZG9taXplciBkZWZpbmVzIGhvdyBtdWNoIHRvIHJhbmRvbWl6ZSB0aGUgcGFydGlj
bGUgZGlyZWN0aW9uIFswLTFdCisgICAgKi8KKyAgICBmdW5jdGlvbiBIZW1pc3BoZXJpY1BhcnRp
Y2xlRW1pdHRlcigKKyAgICAvKioKKyAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlbWlzc2lvbiBo
ZW1pc3BoZXJlLgorICAgICAqLworICAgIHJhZGl1cywgCisgICAgLyoqCisgICAgICogVGhlIHJh
bmdlIG9mIGVtaXNzaW9uIFswLTFdIDAgU3VyZmFjZSBvbmx5LCAxIEVudGlyZSBSYWRpdXMuCisg
ICAgICovCisgICAgcmFkaXVzUmFuZ2UsIAorICAgIC8qKgorICAgICAqIEhvdyBtdWNoIHRvIHJh
bmRvbWl6ZSB0aGUgcGFydGljbGUgZGlyZWN0aW9uIFswLTFdLgorICAgICAqLworICAgIGRpcmVj
dGlvblJhbmRvbWl6ZXIpIHsKKyAgICAgICAgaWYgKHJhZGl1cyA9PT0gdm9pZCAwKSB7IHJhZGl1
cyA9IDE7IH0KKyAgICAgICAgaWYgKHJhZGl1c1JhbmdlID09PSB2b2lkIDApIHsgcmFkaXVzUmFu
Z2UgPSAxOyB9CisgICAgICAgIGlmIChkaXJlY3Rpb25SYW5kb21pemVyID09PSB2b2lkIDApIHsg
ZGlyZWN0aW9uUmFuZG9taXplciA9IDA7IH0KKyAgICAgICAgdGhpcy5yYWRpdXMgPSByYWRpdXM7
CisgICAgICAgIHRoaXMucmFkaXVzUmFuZ2UgPSByYWRpdXNSYW5nZTsKKyAgICAgICAgdGhpcy5k
aXJlY3Rpb25SYW5kb21pemVyID0gZGlyZWN0aW9uUmFuZG9taXplcjsKKyAgICB9CisgICAgLyoq
CisgICAgICogQ2FsbGVkIGJ5IHRoZSBwYXJ0aWNsZSBTeXN0ZW0gd2hlbiB0aGUgZGlyZWN0aW9u
IGlzIGNvbXB1dGVkIGZvciB0aGUgY3JlYXRlZCBwYXJ0aWNsZS4KKyAgICAgKiBAcGFyYW0gd29y
bGRNYXRyaXggaXMgdGhlIHdvcmxkIG1hdHJpeCBvZiB0aGUgcGFydGljbGUgc3lzdGVtCisgICAg
ICogQHBhcmFtIGRpcmVjdGlvblRvVXBkYXRlIGlzIHRoZSBkaXJlY3Rpb24gdmVjdG9yIHRvIHVw
ZGF0ZSB3aXRoIHRoZSByZXN1bHQKKyAgICAgKiBAcGFyYW0gcGFydGljbGUgaXMgdGhlIHBhcnRp
Y2xlIHdlIGFyZSBjb21wdXRlZCB0aGUgZGlyZWN0aW9uIGZvcgorICAgICAqLworICAgIEhlbWlz
cGhlcmljUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5zdGFydERpcmVjdGlvbkZ1bmN0aW9uID0g
ZnVuY3Rpb24gKHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1VwZGF0ZSwgcGFydGljbGUpIHsKKyAg
ICAgICAgdmFyIGRpcmVjdGlvbiA9IHBhcnRpY2xlLnBvc2l0aW9uLnN1YnRyYWN0KHdvcmxkTWF0
cml4LmdldFRyYW5zbGF0aW9uKCkpLm5vcm1hbGl6ZSgpOworICAgICAgICB2YXIgcmFuZFggPSBf
TWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0u
UmFuZG9tUmFuZ2UoMCwgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyKTsKKyAgICAgICAgdmFyIHJh
bmRZID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNj
YWxhciJdLlJhbmRvbVJhbmdlKDAsIHRoaXMuZGlyZWN0aW9uUmFuZG9taXplcik7CisgICAgICAg
IHZhciByYW5kWiA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSgwLCB0aGlzLmRpcmVjdGlvblJhbmRvbWl6ZXIpOwor
ICAgICAgICBkaXJlY3Rpb24ueCArPSByYW5kWDsKKyAgICAgICAgZGlyZWN0aW9uLnkgKz0gcmFu
ZFk7CisgICAgICAgIGRpcmVjdGlvbi56ICs9IHJhbmRaOworICAgICAgICBkaXJlY3Rpb24ubm9y
bWFsaXplKCk7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsRnJvbUZsb2F0c1RvUmVmKGRpcmVj
dGlvbi54LCBkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLnosIHdvcmxkTWF0cml4LCBkaXJlY3Rpb25U
b1VwZGF0ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBhcnRpY2xl
IFN5c3RlbSB3aGVuIHRoZSBwb3NpdGlvbiBpcyBjb21wdXRlZCBmb3IgdGhlIGNyZWF0ZWQgcGFy
dGljbGUuCisgICAgICogQHBhcmFtIHdvcmxkTWF0cml4IGlzIHRoZSB3b3JsZCBtYXRyaXggb2Yg
dGhlIHBhcnRpY2xlIHN5c3RlbQorICAgICAqIEBwYXJhbSBwb3NpdGlvblRvVXBkYXRlIGlzIHRo
ZSBwb3NpdGlvbiB2ZWN0b3IgdG8gdXBkYXRlIHdpdGggdGhlIHJlc3VsdAorICAgICAqIEBwYXJh
bSBwYXJ0aWNsZSBpcyB0aGUgcGFydGljbGUgd2UgYXJlIGNvbXB1dGVkIHRoZSBwb3NpdGlvbiBm
b3IKKyAgICAgKi8KKyAgICBIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuc3Rh
cnRQb3NpdGlvbkZ1bmN0aW9uID0gZnVuY3Rpb24gKHdvcmxkTWF0cml4LCBwb3NpdGlvblRvVXBk
YXRlLCBwYXJ0aWNsZSkgeworICAgICAgICB2YXIgcmFuZFJhZGl1cyA9IHRoaXMucmFkaXVzIC0g
X01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJd
LlJhbmRvbVJhbmdlKDAsIHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXNSYW5nZSk7CisgICAgICAg
IHZhciB2ID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlNjYWxhciJdLlJhbmRvbVJhbmdlKDAsIDEuMCk7CisgICAgICAgIHZhciBwaGkgPSBfTWF0aHNf
bWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0uUmFuZG9t
UmFuZ2UoMCwgMiAqIE1hdGguUEkpOworICAgICAgICB2YXIgdGhldGEgPSBNYXRoLmFjb3MoMiAq
IHYgLSAxKTsKKyAgICAgICAgdmFyIHJhbmRYID0gcmFuZFJhZGl1cyAqIE1hdGguY29zKHBoaSkg
KiBNYXRoLnNpbih0aGV0YSk7CisgICAgICAgIHZhciByYW5kWSA9IHJhbmRSYWRpdXMgKiBNYXRo
LmNvcyh0aGV0YSk7CisgICAgICAgIHZhciByYW5kWiA9IHJhbmRSYWRpdXMgKiBNYXRoLnNpbihw
aGkpICogTWF0aC5zaW4odGhldGEpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzRnJv
bUZsb2F0c1RvUmVmKHJhbmRYLCBNYXRoLmFicyhyYW5kWSksIHJhbmRaLCB3b3JsZE1hdHJpeCwg
cG9zaXRpb25Ub1VwZGF0ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhlIGN1
cnJlbnQgZW1pdHRlciBhbmQgcmV0dXJucyBhIGNvcHkgb2YgaXQKKyAgICAgKiBAcmV0dXJucyB0
aGUgbmV3IGVtaXR0ZXIKKyAgICAgKi8KKyAgICBIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlci5w
cm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBuZXdPbmUgPSBuZXcg
SGVtaXNwaGVyaWNQYXJ0aWNsZUVtaXR0ZXIodGhpcy5yYWRpdXMsIHRoaXMuZGlyZWN0aW9uUmFu
ZG9taXplcik7CisgICAgICAgIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHRoaXMsIG5ld09uZSk7CisgICAgICAgIHJl
dHVybiBuZXdPbmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIEdQVVBh
cnRpY2xlU3lzdGVtIHRvIHNldHVwIHRoZSB1cGRhdGUgc2hhZGVyCisgICAgICogQHBhcmFtIGVm
ZmVjdCBkZWZpbmVzIHRoZSB1cGRhdGUgc2hhZGVyCisgICAgICovCisgICAgSGVtaXNwaGVyaWNQ
YXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmFwcGx5VG9TaGFkZXIgPSBmdW5jdGlvbiAoZWZmZWN0
KSB7CisgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgicmFkaXVzIiwgdGhpcy5yYWRpdXMpOworICAg
ICAgICBlZmZlY3Quc2V0RmxvYXQoInJhZGl1c1JhbmdlIiwgdGhpcy5yYWRpdXNSYW5nZSk7Cisg
ICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiZGlyZWN0aW9uUmFuZG9taXplciIsIHRoaXMuZGlyZWN0
aW9uUmFuZG9taXplcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5n
IHRvIHVzZSB0byB1cGRhdGUgdGhlIEdQVSBwYXJ0aWNsZXMgdXBkYXRlIHNoYWRlcgorICAgICAq
IEByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5uZyB0aGUgZGVmaW5lcyBzdHJpbmcKKyAgICAgKi8K
KyAgICBIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuZ2V0RWZmZWN0RGVmaW5l
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICIjZGVmaW5lIEhFTUlTUEhFUklDRU1J
VFRFUiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgIkhlbWlz
cGhlcmljUGFydGljbGVFbWl0dGVyIgorICAgICAqIEByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRl
ci5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
IkhlbWlzcGhlcmljUGFydGljbGVFbWl0dGVyIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
cmlhbGl6ZXMgdGhlIHBhcnRpY2xlIHN5c3RlbSB0byBhIEpTT04gb2JqZWN0LgorICAgICAqIEBy
ZXR1cm5zIHRoZSBKU09OIG9iamVjdAorICAgICAqLworICAgIEhlbWlzcGhlcmljUGFydGljbGVF
bWl0dGVyLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBz
ZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudHlw
ZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmFk
aXVzID0gdGhpcy5yYWRpdXM7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmFkaXVzUmFu
Z2UgPSB0aGlzLnJhZGl1c1JhbmdlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVj
dGlvblJhbmRvbWl6ZXIgPSB0aGlzLmRpcmVjdGlvblJhbmRvbWl6ZXI7CisgICAgICAgIHJldHVy
biBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2UgcHJv
cGVydGllcyBmcm9tIGEgSlNPTiBvYmplY3QKKyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlvbk9i
amVjdCBkZWZpbmVzIHRoZSBKU09OIG9iamVjdAorICAgICAqLworICAgIEhlbWlzcGhlcmljUGFy
dGljbGVFbWl0dGVyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2Jq
ZWN0KSB7CisgICAgICAgIHRoaXMucmFkaXVzID0gc2VyaWFsaXphdGlvbk9iamVjdC5yYWRpdXM7
CisgICAgICAgIHRoaXMucmFkaXVzUmFuZ2UgPSBzZXJpYWxpemF0aW9uT2JqZWN0LnJhZGl1c1Jh
bmdlOworICAgICAgICB0aGlzLmRpcmVjdGlvblJhbmRvbWl6ZXIgPSBzZXJpYWxpemF0aW9uT2Jq
ZWN0LmRpcmVjdGlvblJhbmRvbWl6ZXI7CisgICAgfTsKKyAgICByZXR1cm4gSGVtaXNwaGVyaWNQ
YXJ0aWNsZUVtaXR0ZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1BhcnRp
Y2xlcy9FbWl0dGVyVHlwZXMvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1BhcnRpY2xlcy9FbWl0dGVyVHlwZXMvaW5k
ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogQm94UGFydGljbGVFbWl0dGVyLCBDb25lUGFydGljbGVF
bWl0dGVyLCBDeWxpbmRlclBhcnRpY2xlRW1pdHRlciwgQ3lsaW5kZXJEaXJlY3RlZFBhcnRpY2xl
RW1pdHRlciwgSGVtaXNwaGVyaWNQYXJ0aWNsZUVtaXR0ZXIsIFBvaW50UGFydGljbGVFbWl0dGVy
LCBTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIsIFNwaGVyZURpcmVjdGVkUGFydGljbGVFbWl0dGVyICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm94UGFydGljbGVF
bWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL2JveFBhcnRpY2xlRW1pdHRlciAqLyAiLi9QYXJ0aWNsZXMvRW1pdHRlclR5cGVzL2Jv
eFBhcnRpY2xlRW1pdHRlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb3hQYXJ0aWNsZUVtaXR0
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ib3hQYXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siQm94UGFydGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2NvbmVQYXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29uZVBhcnRpY2xlRW1pdHRlciAq
LyAiLi9QYXJ0aWNsZXMvRW1pdHRlclR5cGVzL2NvbmVQYXJ0aWNsZUVtaXR0ZXIudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ29uZVBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2NvbmVQYXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29uZVBh
cnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jeWxpbmRl
clBhcnRpY2xlRW1pdHRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9jeWxpbmRlclBhcnRpY2xlRW1pdHRlciAqLyAiLi9QYXJ0aWNsZXMv
RW1pdHRlclR5cGVzL2N5bGluZGVyUGFydGljbGVFbWl0dGVyLnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkN5bGluZGVyUGFydGljbGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY3lsaW5k
ZXJQYXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ3lsaW5kZXJQ
YXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJEaXJlY3Rl
ZFBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2N5bGluZGVyUGFydGljbGVF
bWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkN5bGluZGVyRGlyZWN0ZWRQYXJ0
aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVtaXNwaGVy
aWNQYXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vaGVtaXNwaGVyaWNQYXJ0aWNsZUVtaXR0ZXIgKi8gIi4vUGFydGlj
bGVzL0VtaXR0ZXJUeXBlcy9oZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlci50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2hlbWlzcGhlcmljUGFydGljbGVFbWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIkhlbWlzcGhlcmljUGFydGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3BvaW50UGFydGljbGVFbWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvaW50UGFydGljbGVFbWl0dGVyICovICIu
L1BhcnRpY2xlcy9FbWl0dGVyVHlwZXMvcG9pbnRQYXJ0aWNsZUVtaXR0ZXIudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiUG9pbnRQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9w
b2ludFBhcnRpY2xlRW1pdHRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQb2ludFBh
cnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGhlcmVQ
YXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vc3BoZXJlUGFydGljbGVFbWl0dGVyICovICIuL1BhcnRpY2xlcy9FbWl0
dGVyVHlwZXMvc3BoZXJlUGFydGljbGVFbWl0dGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNw
aGVyZVBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NwaGVyZVBhcnRpY2xl
RW1pdHRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTcGhlcmVQYXJ0aWNsZUVtaXR0
ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zcGhlcmVQYXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7
CisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGFydGljbGVzL0VtaXR0
ZXJUeXBlcy9wb2ludFBhcnRpY2xlRW1pdHRlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGFydGlj
bGVzL0VtaXR0ZXJUeXBlcy9wb2ludFBhcnRpY2xlRW1pdHRlci50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBQb2ludFBhcnRpY2xlRW1pdHRlciAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQb2ludFBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gUG9pbnRQYXJ0aWNsZUVtaXR0ZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVlcENvcGllciAqLyAiLi9NaXNjL2RlZXBDb3Bp
ZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnNjYWxh
ciAqLyAiLi9NYXRocy9tYXRoLnNjYWxhci50cyIpOworCisKKworLyoqCisgKiBQYXJ0aWNsZSBl
bWl0dGVyIGVtaXR0aW5nIHBhcnRpY2xlcyBmcm9tIGEgcG9pbnQuCisgKiBJdCBlbWl0cyB0aGUg
cGFydGljbGVzIHJhbmRvbWx5IGJldHdlZW4gMiBnaXZlbiBkaXJlY3Rpb25zLgorICovCit2YXIg
UG9pbnRQYXJ0aWNsZUVtaXR0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBQb2ludFBhcnRpY2xlRW1pdHRlcgor
ICAgICAqLworICAgIGZ1bmN0aW9uIFBvaW50UGFydGljbGVFbWl0dGVyKCkgeworICAgICAgICAv
KioKKyAgICAgICAgICogUmFuZG9tIGRpcmVjdGlvbiBvZiBlYWNoIHBhcnRpY2xlIGFmdGVyIGl0
IGhhcyBiZWVuIGVtaXR0ZWQsIGJldHdlZW4gZGlyZWN0aW9uMSBhbmQgZGlyZWN0aW9uMiB2ZWN0
b3JzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaXJlY3Rpb24xID0gbmV3IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0oMCwgMS4w
LCAwKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJhbmRvbSBkaXJlY3Rpb24gb2YgZWFjaCBw
YXJ0aWNsZSBhZnRlciBpdCBoYXMgYmVlbiBlbWl0dGVkLCBiZXR3ZWVuIGRpcmVjdGlvbjEgYW5k
IGRpcmVjdGlvbjIgdmVjdG9ycy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGlyZWN0aW9u
MiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVjdG9yMyJdKDAsIDEuMCwgMCk7CisgICAgfQorICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0
aGUgcGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIGRpcmVjdGlvbiBpcyBjb21wdXRlZCBmb3IgdGhl
IGNyZWF0ZWQgcGFydGljbGUuCisgICAgICogQHBhcmFtIHdvcmxkTWF0cml4IGlzIHRoZSB3b3Js
ZCBtYXRyaXggb2YgdGhlIHBhcnRpY2xlIHN5c3RlbQorICAgICAqIEBwYXJhbSBkaXJlY3Rpb25U
b1VwZGF0ZSBpcyB0aGUgZGlyZWN0aW9uIHZlY3RvciB0byB1cGRhdGUgd2l0aCB0aGUgcmVzdWx0
CisgICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBwYXJ0aWNsZSB3ZSBhcmUgY29tcHV0ZWQg
dGhlIGRpcmVjdGlvbiBmb3IKKyAgICAgKi8KKyAgICBQb2ludFBhcnRpY2xlRW1pdHRlci5wcm90
b3R5cGUuc3RhcnREaXJlY3Rpb25GdW5jdGlvbiA9IGZ1bmN0aW9uICh3b3JsZE1hdHJpeCwgZGly
ZWN0aW9uVG9VcGRhdGUsIHBhcnRpY2xlKSB7CisgICAgICAgIHZhciByYW5kWCA9IF9NYXRoc19t
YXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21S
YW5nZSh0aGlzLmRpcmVjdGlvbjEueCwgdGhpcy5kaXJlY3Rpb24yLngpOworICAgICAgICB2YXIg
cmFuZFkgPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
U2NhbGFyIl0uUmFuZG9tUmFuZ2UodGhpcy5kaXJlY3Rpb24xLnksIHRoaXMuZGlyZWN0aW9uMi55
KTsKKyAgICAgICAgdmFyIHJhbmRaID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKHRoaXMuZGlyZWN0aW9uMS56LCB0
aGlzLmRpcmVjdGlvbjIueik7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsRnJvbUZsb2F0c1Rv
UmVmKHJhbmRYLCByYW5kWSwgcmFuZFosIHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1VwZGF0ZSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBhcnRpY2xlIFN5c3RlbSB3
aGVuIHRoZSBwb3NpdGlvbiBpcyBjb21wdXRlZCBmb3IgdGhlIGNyZWF0ZWQgcGFydGljbGUuCisg
ICAgICogQHBhcmFtIHdvcmxkTWF0cml4IGlzIHRoZSB3b3JsZCBtYXRyaXggb2YgdGhlIHBhcnRp
Y2xlIHN5c3RlbQorICAgICAqIEBwYXJhbSBwb3NpdGlvblRvVXBkYXRlIGlzIHRoZSBwb3NpdGlv
biB2ZWN0b3IgdG8gdXBkYXRlIHdpdGggdGhlIHJlc3VsdAorICAgICAqIEBwYXJhbSBwYXJ0aWNs
ZSBpcyB0aGUgcGFydGljbGUgd2UgYXJlIGNvbXB1dGVkIHRoZSBwb3NpdGlvbiBmb3IKKyAgICAg
Ki8KKyAgICBQb2ludFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuc3RhcnRQb3NpdGlvbkZ1bmN0
aW9uID0gZnVuY3Rpb24gKHdvcmxkTWF0cml4LCBwb3NpdGlvblRvVXBkYXRlLCBwYXJ0aWNsZSkg
eworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzRnJvbUZsb2F0c1RvUmVmKDAsIDAsIDAs
IHdvcmxkTWF0cml4LCBwb3NpdGlvblRvVXBkYXRlKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENsb25lcyB0aGUgY3VycmVudCBlbWl0dGVyIGFuZCByZXR1cm5zIGEgY29weSBvZiBpdAorICAg
ICAqIEByZXR1cm5zIHRoZSBuZXcgZW1pdHRlcgorICAgICAqLworICAgIFBvaW50UGFydGljbGVF
bWl0dGVyLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIG5ld09u
ZSA9IG5ldyBQb2ludFBhcnRpY2xlRW1pdHRlcigpOworICAgICAgICBfTWlzY19kZWVwQ29waWVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRlZXBDb3BpZXIiXS5EZWVwQ29weSh0aGlz
LCBuZXdPbmUpOworICAgICAgICByZXR1cm4gbmV3T25lOworICAgIH07CisgICAgLyoqCisgICAg
ICogQ2FsbGVkIGJ5IHRoZSBHUFVQYXJ0aWNsZVN5c3RlbSB0byBzZXR1cCB0aGUgdXBkYXRlIHNo
YWRlcgorICAgICAqIEBwYXJhbSBlZmZlY3QgZGVmaW5lcyB0aGUgdXBkYXRlIHNoYWRlcgorICAg
ICAqLworICAgIFBvaW50UGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5hcHBseVRvU2hhZGVyID0g
ZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICBlZmZlY3Quc2V0VmVjdG9yMygiZGlyZWN0aW9u
MSIsIHRoaXMuZGlyZWN0aW9uMSk7CisgICAgICAgIGVmZmVjdC5zZXRWZWN0b3IzKCJkaXJlY3Rp
b24yIiwgdGhpcy5kaXJlY3Rpb24yKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBzdHJpbmcgdG8gdXNlIHRvIHVwZGF0ZSB0aGUgR1BVIHBhcnRpY2xlcyB1cGRhdGUgc2hhZGVy
CisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbm5nIHRoZSBkZWZpbmVzIHN0cmluZwor
ICAgICAqLworICAgIFBvaW50UGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5nZXRFZmZlY3REZWZp
bmVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIiNkZWZpbmUgUE9JTlRFTUlUVEVS
IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyAiUG9pbnRQYXJ0
aWNsZUVtaXR0ZXIiCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2xh
c3MgbmFtZQorICAgICAqLworICAgIFBvaW50UGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5nZXRD
bGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiUG9pbnRQYXJ0aWNsZUVt
aXR0ZXIiOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgcGFydGljbGUg
c3lzdGVtIHRvIGEgSlNPTiBvYmplY3QuCisgICAgICogQHJldHVybnMgdGhlIEpTT04gb2JqZWN0
CisgICAgICovCisgICAgUG9pbnRQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnNlcmlhbGl6ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50eXBlID0gdGhpcy5nZXRDbGFzc05hbWUoKTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5kaXJlY3Rpb24xID0gdGhpcy5kaXJlY3Rpb24xLmFz
QXJyYXkoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5kaXJlY3Rpb24yID0gdGhpcy5k
aXJlY3Rpb24yLmFzQXJyYXkoKTsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQYXJzZSBwcm9wZXJ0aWVzIGZyb20gYSBKU09OIG9i
amVjdAorICAgICAqIEBwYXJhbSBzZXJpYWxpemF0aW9uT2JqZWN0IGRlZmluZXMgdGhlIEpTT04g
b2JqZWN0CisgICAgICovCisgICAgUG9pbnRQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnBhcnNl
ID0gZnVuY3Rpb24gKHNlcmlhbGl6YXRpb25PYmplY3QpIHsKKyAgICAgICAgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlU
b1JlZihzZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvbjEsIDAsIHRoaXMuZGlyZWN0aW9uMSk7
CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJWZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYoc2VyaWFsaXphdGlvbk9iamVjdC5kaXJlY3Rpb24y
LCAwLCB0aGlzLmRpcmVjdGlvbjIpOworICAgIH07CisgICAgcmV0dXJuIFBvaW50UGFydGljbGVF
bWl0dGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QYXJ0aWNsZXMvRW1p
dHRlclR5cGVzL3NwaGVyZVBhcnRpY2xlRW1pdHRlci50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bh
cnRpY2xlcy9FbWl0dGVyVHlwZXMvc3BoZXJlUGFydGljbGVFbWl0dGVyLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIsIFNwaGVyZURpcmVj
dGVkUGFydGljbGVFbWl0dGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlNwaGVyZVBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3BoZXJlUGFydGlj
bGVFbWl0dGVyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNwaGVyZURpcmVjdGVkUGFydGljbGVF
bWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRl
cjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZl
Y3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3NjYWxhcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWF0aHMvbWF0aC5zY2FsYXIgKi8gIi4vTWF0aHMvbWF0aC5zY2FsYXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWVwQ29waWVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2RlZXBDb3BpZXIg
Ki8gIi4vTWlzYy9kZWVwQ29waWVyLnRzIik7CisKKworCisKKy8qKgorICogUGFydGljbGUgZW1p
dHRlciBlbWl0dGluZyBwYXJ0aWNsZXMgZnJvbSB0aGUgaW5zaWRlIG9mIGEgc3BoZXJlLgorICog
SXQgZW1pdHMgdGhlIHBhcnRpY2xlcyBhbG9uZ3NpZGUgdGhlIHNwaGVyZSByYWRpdXMuIFRoZSBl
bWlzc2lvbiBkaXJlY3Rpb24gbWlnaHQgYmUgcmFuZG9taXplZC4KKyAqLwordmFyIFNwaGVyZVBh
cnRpY2xlRW1pdHRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAg
ICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgU3BoZXJlUGFydGljbGVFbWl0dGVyCisgICAgKiBA
cGFyYW0gcmFkaXVzIHRoZSByYWRpdXMgb2YgdGhlIGVtaXNzaW9uIHNwaGVyZSAoMSBieSBkZWZh
dWx0KQorICAgICogQHBhcmFtIHJhZGl1c1JhbmdlIHRoZSByYW5nZSBvZiB0aGUgZW1pc3Npb24g
c3BoZXJlIFswLTFdIDAgU3VyZmFjZSBvbmx5LCAxIEVudGlyZSBSYWRpdXMgKDEgYnkgZGVmYXVs
dCkKKyAgICAqIEBwYXJhbSBkaXJlY3Rpb25SYW5kb21pemVyIGRlZmluZXMgaG93IG11Y2ggdG8g
cmFuZG9taXplIHRoZSBwYXJ0aWNsZSBkaXJlY3Rpb24gWzAtMV0KKyAgICAqLworICAgIGZ1bmN0
aW9uIFNwaGVyZVBhcnRpY2xlRW1pdHRlcigKKyAgICAvKioKKyAgICAgKiBUaGUgcmFkaXVzIG9m
IHRoZSBlbWlzc2lvbiBzcGhlcmUuCisgICAgICovCisgICAgcmFkaXVzLCAKKyAgICAvKioKKyAg
ICAgKiBUaGUgcmFuZ2Ugb2YgZW1pc3Npb24gWzAtMV0gMCBTdXJmYWNlIG9ubHksIDEgRW50aXJl
IFJhZGl1cy4KKyAgICAgKi8KKyAgICByYWRpdXNSYW5nZSwgCisgICAgLyoqCisgICAgICogSG93
IG11Y2ggdG8gcmFuZG9taXplIHRoZSBwYXJ0aWNsZSBkaXJlY3Rpb24gWzAtMV0uCisgICAgICov
CisgICAgZGlyZWN0aW9uUmFuZG9taXplcikgeworICAgICAgICBpZiAocmFkaXVzID09PSB2b2lk
IDApIHsgcmFkaXVzID0gMTsgfQorICAgICAgICBpZiAocmFkaXVzUmFuZ2UgPT09IHZvaWQgMCkg
eyByYWRpdXNSYW5nZSA9IDE7IH0KKyAgICAgICAgaWYgKGRpcmVjdGlvblJhbmRvbWl6ZXIgPT09
IHZvaWQgMCkgeyBkaXJlY3Rpb25SYW5kb21pemVyID0gMDsgfQorICAgICAgICB0aGlzLnJhZGl1
cyA9IHJhZGl1czsKKyAgICAgICAgdGhpcy5yYWRpdXNSYW5nZSA9IHJhZGl1c1JhbmdlOworICAg
ICAgICB0aGlzLmRpcmVjdGlvblJhbmRvbWl6ZXIgPSBkaXJlY3Rpb25SYW5kb21pemVyOworICAg
IH0KKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBhcnRpY2xlIFN5c3RlbSB3aGVuIHRo
ZSBkaXJlY3Rpb24gaXMgY29tcHV0ZWQgZm9yIHRoZSBjcmVhdGVkIHBhcnRpY2xlLgorICAgICAq
IEBwYXJhbSB3b3JsZE1hdHJpeCBpcyB0aGUgd29ybGQgbWF0cml4IG9mIHRoZSBwYXJ0aWNsZSBz
eXN0ZW0KKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uVG9VcGRhdGUgaXMgdGhlIGRpcmVjdGlvbiB2
ZWN0b3IgdG8gdXBkYXRlIHdpdGggdGhlIHJlc3VsdAorICAgICAqIEBwYXJhbSBwYXJ0aWNsZSBp
cyB0aGUgcGFydGljbGUgd2UgYXJlIGNvbXB1dGVkIHRoZSBkaXJlY3Rpb24gZm9yCisgICAgICov
CisgICAgU3BoZXJlUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5zdGFydERpcmVjdGlvbkZ1bmN0
aW9uID0gZnVuY3Rpb24gKHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1VwZGF0ZSwgcGFydGljbGUp
IHsKKyAgICAgICAgdmFyIGRpcmVjdGlvbiA9IHBhcnRpY2xlLnBvc2l0aW9uLnN1YnRyYWN0KHdv
cmxkTWF0cml4LmdldFRyYW5zbGF0aW9uKCkpLm5vcm1hbGl6ZSgpOworICAgICAgICB2YXIgcmFu
ZFggPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2Nh
bGFyIl0uUmFuZG9tUmFuZ2UoMCwgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyKTsKKyAgICAgICAg
dmFyIHJhbmRZID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKDAsIHRoaXMuZGlyZWN0aW9uUmFuZG9taXplcik7Cisg
ICAgICAgIHZhciByYW5kWiA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSgwLCB0aGlzLmRpcmVjdGlvblJhbmRvbWl6
ZXIpOworICAgICAgICBkaXJlY3Rpb24ueCArPSByYW5kWDsKKyAgICAgICAgZGlyZWN0aW9uLnkg
Kz0gcmFuZFk7CisgICAgICAgIGRpcmVjdGlvbi56ICs9IHJhbmRaOworICAgICAgICBkaXJlY3Rp
b24ubm9ybWFsaXplKCk7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsRnJvbUZsb2F0c1RvUmVm
KGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLnosIHdvcmxkTWF0cml4LCBkaXJl
Y3Rpb25Ub1VwZGF0ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBh
cnRpY2xlIFN5c3RlbSB3aGVuIHRoZSBwb3NpdGlvbiBpcyBjb21wdXRlZCBmb3IgdGhlIGNyZWF0
ZWQgcGFydGljbGUuCisgICAgICogQHBhcmFtIHdvcmxkTWF0cml4IGlzIHRoZSB3b3JsZCBtYXRy
aXggb2YgdGhlIHBhcnRpY2xlIHN5c3RlbQorICAgICAqIEBwYXJhbSBwb3NpdGlvblRvVXBkYXRl
IGlzIHRoZSBwb3NpdGlvbiB2ZWN0b3IgdG8gdXBkYXRlIHdpdGggdGhlIHJlc3VsdAorICAgICAq
IEBwYXJhbSBwYXJ0aWNsZSBpcyB0aGUgcGFydGljbGUgd2UgYXJlIGNvbXB1dGVkIHRoZSBwb3Np
dGlvbiBmb3IKKyAgICAgKi8KKyAgICBTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnN0
YXJ0UG9zaXRpb25GdW5jdGlvbiA9IGZ1bmN0aW9uICh3b3JsZE1hdHJpeCwgcG9zaXRpb25Ub1Vw
ZGF0ZSwgcGFydGljbGUpIHsKKyAgICAgICAgdmFyIHJhbmRSYWRpdXMgPSB0aGlzLnJhZGl1cyAt
IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIi
XS5SYW5kb21SYW5nZSgwLCB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzUmFuZ2UpOworICAgICAg
ICB2YXIgdiA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJTY2FsYXIiXS5SYW5kb21SYW5nZSgwLCAxLjApOworICAgICAgICB2YXIgcGhpID0gX01hdGhz
X21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRv
bVJhbmdlKDAsIDIgKiBNYXRoLlBJKTsKKyAgICAgICAgdmFyIHRoZXRhID0gTWF0aC5hY29zKDIg
KiB2IC0gMSk7CisgICAgICAgIHZhciByYW5kWCA9IHJhbmRSYWRpdXMgKiBNYXRoLmNvcyhwaGkp
ICogTWF0aC5zaW4odGhldGEpOworICAgICAgICB2YXIgcmFuZFkgPSByYW5kUmFkaXVzICogTWF0
aC5jb3ModGhldGEpOworICAgICAgICB2YXIgcmFuZFogPSByYW5kUmFkaXVzICogTWF0aC5zaW4o
cGhpKSAqIE1hdGguc2luKHRoZXRhKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc0Zy
b21GbG9hdHNUb1JlZihyYW5kWCwgcmFuZFksIHJhbmRaLCB3b3JsZE1hdHJpeCwgcG9zaXRpb25U
b1VwZGF0ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhlIGN1cnJlbnQgZW1p
dHRlciBhbmQgcmV0dXJucyBhIGNvcHkgb2YgaXQKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGVt
aXR0ZXIKKyAgICAgKi8KKyAgICBTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmNsb25l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbmV3T25lID0gbmV3IFNwaGVyZVBhcnRpY2xl
RW1pdHRlcih0aGlzLnJhZGl1cywgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyKTsKKyAgICAgICAg
X01pc2NfZGVlcENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJEZWVwQ29waWVy
Il0uRGVlcENvcHkodGhpcywgbmV3T25lKTsKKyAgICAgICAgcmV0dXJuIG5ld09uZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgR1BVUGFydGljbGVTeXN0ZW0gdG8gc2V0
dXAgdGhlIHVwZGF0ZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0gZWZmZWN0IGRlZmluZXMgdGhlIHVw
ZGF0ZSBzaGFkZXIKKyAgICAgKi8KKyAgICBTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBl
LmFwcGx5VG9TaGFkZXIgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgIGVmZmVjdC5zZXRG
bG9hdCgicmFkaXVzIiwgdGhpcy5yYWRpdXMpOworICAgICAgICBlZmZlY3Quc2V0RmxvYXQoInJh
ZGl1c1JhbmdlIiwgdGhpcy5yYWRpdXNSYW5nZSk7CisgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgi
ZGlyZWN0aW9uUmFuZG9taXplciIsIHRoaXMuZGlyZWN0aW9uUmFuZG9taXplcik7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHRvIHVzZSB0byB1cGRhdGUgdGhlIEdQ
VSBwYXJ0aWNsZXMgdXBkYXRlIHNoYWRlcgorICAgICAqIEByZXR1cm5zIGEgc3RyaW5nIGNvbnRh
aW5uZyB0aGUgZGVmaW5lcyBzdHJpbmcKKyAgICAgKi8KKyAgICBTcGhlcmVQYXJ0aWNsZUVtaXR0
ZXIucHJvdG90eXBlLmdldEVmZmVjdERlZmluZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAiI2RlZmluZSBTUEhFUkVFTUlUVEVSIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
dHVybnMgdGhlIHN0cmluZyAiU3BoZXJlUGFydGljbGVFbWl0dGVyIgorICAgICAqIEByZXR1cm5z
IGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBTcGhlcmVQ
YXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuICJTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIiOworICAgIH07CisgICAgLyoqCisg
ICAgICogU2VyaWFsaXplcyB0aGUgcGFydGljbGUgc3lzdGVtIHRvIGEgSlNPTiBvYmplY3QuCisg
ICAgICogQHJldHVybnMgdGhlIEpTT04gb2JqZWN0CisgICAgICovCisgICAgU3BoZXJlUGFydGlj
bGVFbWl0dGVyLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh
ciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
dHlwZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
cmFkaXVzID0gdGhpcy5yYWRpdXM7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmFkaXVz
UmFuZ2UgPSB0aGlzLnJhZGl1c1JhbmdlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmRp
cmVjdGlvblJhbmRvbWl6ZXIgPSB0aGlzLmRpcmVjdGlvblJhbmRvbWl6ZXI7CisgICAgICAgIHJl
dHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2Ug
cHJvcGVydGllcyBmcm9tIGEgSlNPTiBvYmplY3QKKyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlv
bk9iamVjdCBkZWZpbmVzIHRoZSBKU09OIG9iamVjdAorICAgICAqLworICAgIFNwaGVyZVBhcnRp
Y2xlRW1pdHRlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlvbk9iamVj
dCkgeworICAgICAgICB0aGlzLnJhZGl1cyA9IHNlcmlhbGl6YXRpb25PYmplY3QucmFkaXVzOwor
ICAgICAgICB0aGlzLnJhZGl1c1JhbmdlID0gc2VyaWFsaXphdGlvbk9iamVjdC5yYWRpdXNSYW5n
ZTsKKyAgICAgICAgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyID0gc2VyaWFsaXphdGlvbk9iamVj
dC5kaXJlY3Rpb25SYW5kb21pemVyOworICAgIH07CisgICAgcmV0dXJuIFNwaGVyZVBhcnRpY2xl
RW1pdHRlcjsKK30oKSk7CisKKy8qKgorICogUGFydGljbGUgZW1pdHRlciBlbWl0dGluZyBwYXJ0
aWNsZXMgZnJvbSB0aGUgaW5zaWRlIG9mIGEgc3BoZXJlLgorICogSXQgZW1pdHMgdGhlIHBhcnRp
Y2xlcyByYW5kb21seSBiZXR3ZWVuIHR3byB2ZWN0b3JzLgorICovCit2YXIgU3BoZXJlRGlyZWN0
ZWRQYXJ0aWNsZUVtaXR0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU3BoZXJl
RGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRl
cyBhIG5ldyBpbnN0YW5jZSBTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlcgorICAgICAqIEBw
YXJhbSByYWRpdXMgdGhlIHJhZGl1cyBvZiB0aGUgZW1pc3Npb24gc3BoZXJlICgxIGJ5IGRlZmF1
bHQpCisgICAgICogQHBhcmFtIGRpcmVjdGlvbjEgdGhlIG1pbiBsaW1pdCBvZiB0aGUgZW1pc3Np
b24gZGlyZWN0aW9uICh1cCB2ZWN0b3IgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gZGlyZWN0
aW9uMiB0aGUgbWF4IGxpbWl0IG9mIHRoZSBlbWlzc2lvbiBkaXJlY3Rpb24gKHVwIHZlY3RvciBi
eSBkZWZhdWx0KQorICAgICAqLworICAgIGZ1bmN0aW9uIFNwaGVyZURpcmVjdGVkUGFydGljbGVF
bWl0dGVyKHJhZGl1cywgCisgICAgLyoqCisgICAgICogVGhlIG1pbiBsaW1pdCBvZiB0aGUgZW1p
c3Npb24gZGlyZWN0aW9uLgorICAgICAqLworICAgIGRpcmVjdGlvbjEsIAorICAgIC8qKgorICAg
ICAqIFRoZSBtYXggbGltaXQgb2YgdGhlIGVtaXNzaW9uIGRpcmVjdGlvbi4KKyAgICAgKi8KKyAg
ICBkaXJlY3Rpb24yKSB7CisgICAgICAgIGlmIChyYWRpdXMgPT09IHZvaWQgMCkgeyByYWRpdXMg
PSAxOyB9CisgICAgICAgIGlmIChkaXJlY3Rpb24xID09PSB2b2lkIDApIHsgZGlyZWN0aW9uMSA9
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVj
dG9yMyJdKDAsIDEsIDApOyB9CisgICAgICAgIGlmIChkaXJlY3Rpb24yID09PSB2b2lkIDApIHsg
ZGlyZWN0aW9uMiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVjdG9yMyJdKDAsIDEsIDApOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIHJhZGl1cykgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuZGlyZWN0aW9uMSA9
IGRpcmVjdGlvbjE7CisgICAgICAgIF90aGlzLmRpcmVjdGlvbjIgPSBkaXJlY3Rpb24yOworICAg
ICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUg
cGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIGRpcmVjdGlvbiBpcyBjb21wdXRlZCBmb3IgdGhlIGNy
ZWF0ZWQgcGFydGljbGUuCisgICAgICogQHBhcmFtIHdvcmxkTWF0cml4IGlzIHRoZSB3b3JsZCBt
YXRyaXggb2YgdGhlIHBhcnRpY2xlIHN5c3RlbQorICAgICAqIEBwYXJhbSBkaXJlY3Rpb25Ub1Vw
ZGF0ZSBpcyB0aGUgZGlyZWN0aW9uIHZlY3RvciB0byB1cGRhdGUgd2l0aCB0aGUgcmVzdWx0Cisg
ICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBwYXJ0aWNsZSB3ZSBhcmUgY29tcHV0ZWQgdGhl
IGRpcmVjdGlvbiBmb3IKKyAgICAgKi8KKyAgICBTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRl
ci5wcm90b3R5cGUuc3RhcnREaXJlY3Rpb25GdW5jdGlvbiA9IGZ1bmN0aW9uICh3b3JsZE1hdHJp
eCwgZGlyZWN0aW9uVG9VcGRhdGUsIHBhcnRpY2xlKSB7CisgICAgICAgIHZhciByYW5kWCA9IF9N
YXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5S
YW5kb21SYW5nZSh0aGlzLmRpcmVjdGlvbjEueCwgdGhpcy5kaXJlY3Rpb24yLngpOworICAgICAg
ICB2YXIgcmFuZFkgPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siU2NhbGFyIl0uUmFuZG9tUmFuZ2UodGhpcy5kaXJlY3Rpb24xLnksIHRoaXMuZGlyZWN0
aW9uMi55KTsKKyAgICAgICAgdmFyIHJhbmRaID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKHRoaXMuZGlyZWN0aW9u
MS56LCB0aGlzLmRpcmVjdGlvbjIueik7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsRnJvbUZs
b2F0c1RvUmVmKHJhbmRYLCByYW5kWSwgcmFuZFosIHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1Vw
ZGF0ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhlIGN1cnJlbnQgZW1pdHRl
ciBhbmQgcmV0dXJucyBhIGNvcHkgb2YgaXQKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGVtaXR0
ZXIKKyAgICAgKi8KKyAgICBTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUu
Y2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBuZXdPbmUgPSBuZXcgU3BoZXJlRGly
ZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIodGhpcy5yYWRpdXMsIHRoaXMuZGlyZWN0aW9uMSwgdGhpcy5k
aXJlY3Rpb24yKTsKKyAgICAgICAgX01pc2NfZGVlcENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJEZWVwQ29waWVyIl0uRGVlcENvcHkodGhpcywgbmV3T25lKTsKKyAgICAgICAg
cmV0dXJuIG5ld09uZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgR1BV
UGFydGljbGVTeXN0ZW0gdG8gc2V0dXAgdGhlIHVwZGF0ZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0g
ZWZmZWN0IGRlZmluZXMgdGhlIHVwZGF0ZSBzaGFkZXIKKyAgICAgKi8KKyAgICBTcGhlcmVEaXJl
Y3RlZFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuYXBwbHlUb1NoYWRlciA9IGZ1bmN0aW9uIChl
ZmZlY3QpIHsKKyAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJyYWRpdXMiLCB0aGlzLnJhZGl1cyk7
CisgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgicmFkaXVzUmFuZ2UiLCB0aGlzLnJhZGl1c1Jhbmdl
KTsKKyAgICAgICAgZWZmZWN0LnNldFZlY3RvcjMoImRpcmVjdGlvbjEiLCB0aGlzLmRpcmVjdGlv
bjEpOworICAgICAgICBlZmZlY3Quc2V0VmVjdG9yMygiZGlyZWN0aW9uMiIsIHRoaXMuZGlyZWN0
aW9uMik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHRvIHVzZSB0
byB1cGRhdGUgdGhlIEdQVSBwYXJ0aWNsZXMgdXBkYXRlIHNoYWRlcgorICAgICAqIEByZXR1cm5z
IGEgc3RyaW5nIGNvbnRhaW5uZyB0aGUgZGVmaW5lcyBzdHJpbmcKKyAgICAgKi8KKyAgICBTcGhl
cmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuZ2V0RWZmZWN0RGVmaW5lcyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICIjZGVmaW5lIFNQSEVSRUVNSVRURVJcbiNkZWZp
bmUgRElSRUNURURTUEhFUkVFTUlUVEVSIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVy
bnMgdGhlIHN0cmluZyAiU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiCisgICAgICogQHJl
dHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFNw
aGVyZURpcmVjdGVkUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIi
OworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgcGFydGljbGUgc3lzdGVt
IHRvIGEgSlNPTiBvYmplY3QuCisgICAgICogQHJldHVybnMgdGhlIEpTT04gb2JqZWN0CisgICAg
ICovCisgICAgU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnNlcmlhbGl6
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSBfc3Vw
ZXIucHJvdG90eXBlLnNlcmlhbGl6ZS5jYWxsKHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9u
T2JqZWN0LmRpcmVjdGlvbjEgPSB0aGlzLmRpcmVjdGlvbjEuYXNBcnJheSgpOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvbjIgPSB0aGlzLmRpcmVjdGlvbjIuYXNBcnJheSgp
OworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFBhcnNlIHByb3BlcnRpZXMgZnJvbSBhIEpTT04gb2JqZWN0CisgICAgICogQHBhcmFt
IHNlcmlhbGl6YXRpb25PYmplY3QgZGVmaW5lcyB0aGUgSlNPTiBvYmplY3QKKyAgICAgKi8KKyAg
ICBTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlv
biAoc2VyaWFsaXphdGlvbk9iamVjdCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLnBhcnNl
LmNhbGwodGhpcywgc2VyaWFsaXphdGlvbk9iamVjdCk7CisgICAgICAgIHRoaXMuZGlyZWN0aW9u
MS5jb3B5RnJvbShzZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvbjEpOworICAgICAgICB0aGlz
LmRpcmVjdGlvbjIuY29weUZyb20oc2VyaWFsaXphdGlvbk9iamVjdC5kaXJlY3Rpb24yKTsKKyAg
ICB9OworICAgIHJldHVybiBTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlcjsKK30oU3BoZXJl
UGFydGljbGVFbWl0dGVyKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGFydGljbGVz
L2Jhc2VQYXJ0aWNsZVN5c3RlbS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGFydGljbGVzL2Jhc2VQYXJ0aWNsZVN5c3RlbS50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBCYXNlUGFydGljbGVTeXN0ZW0gKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzZVBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBCYXNlUGFydGljbGVTeXN0ZW07IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
ICovICIuL01hdGVyaWFscy9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX1BhcnRpY2xlc19FbWl0dGVyVHlwZXNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1BhcnRp
Y2xlcy9FbWl0dGVyVHlwZXMvaW5kZXggKi8gIi4vUGFydGljbGVzL0VtaXR0ZXJUeXBlcy9pbmRl
eC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5n
aW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9N
YXRocy9tYXRoLmNvbG9yLnRzIik7CisKKworCisKKworLyoqCisgKiBUaGlzIHJlcHJlc2VudHMg
dGhlIGJhc2UgY2xhc3MgZm9yIHBhcnRpY2xlIHN5c3RlbSBpbiBCYWJ5bG9uLgorICogUGFydGlj
bGVzIGFyZSBvZnRlbiBzbWFsbCBzcHJpdGVzIHVzZWQgdG8gc2ltdWxhdGUgaGFyZC10by1yZXBy
b2R1Y2UgcGhlbm9tZW5hIGxpa2UgZmlyZSwgc21va2UsIHdhdGVyLCBvciBhYnN0cmFjdCB2aXN1
YWwgZWZmZWN0cyBsaWtlIG1hZ2ljIGdsaXR0ZXIgYW5kIGZhZXJ5IGR1c3QuCisgKiBQYXJ0aWNs
ZXMgY2FuIHRha2UgZGlmZmVyZW50IHNoYXBlcyB3aGlsZSBlbWl0dGVkIGxpa2UgYm94LCBzcGhl
cmUsIGNvbmUgb3IgeW91IGNhbiB3cml0ZSB5b3VyIGN1c3RvbSBmdW5jdGlvbi4KKyAqIEBleGFt
cGxlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9wYXJ0aWNsZXMKKyAqLwor
dmFyIEJhc2VQYXJ0aWNsZVN5c3RlbSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBwYXJ0aWNsZSBzeXN0ZW0uCisgICAgICogUGFy
dGljbGVzIGFyZSBvZnRlbiBzbWFsbCBzcHJpdGVzIHVzZWQgdG8gc2ltdWxhdGUgaGFyZC10by1y
ZXByb2R1Y2UgcGhlbm9tZW5hIGxpa2UgZmlyZSwgc21va2UsIHdhdGVyLCBvciBhYnN0cmFjdCB2
aXN1YWwgZWZmZWN0cyBsaWtlIG1hZ2ljIGdsaXR0ZXIgYW5kIGZhZXJ5IGR1c3QuCisgICAgICog
QHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcnRpY2xlIHN5c3RlbQorICAgICAqLworICAg
IGZ1bmN0aW9uIEJhc2VQYXJ0aWNsZVN5c3RlbShuYW1lKSB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBMaXN0IG9mIGFuaW1hdGlvbnMgdXNlZCBieSB0aGUgcGFydGljbGUgc3lzdGVtLgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5hbmltYXRpb25zID0gW107CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBUaGUgcmVuZGVyaW5nIGdyb3VwIHVzZWQgYnkgdGhlIFBhcnRpY2xlIHN5c3RlbSB0
byBjaG9zZSB3aGVuIHRvIHJlbmRlci4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVuZGVy
aW5nR3JvdXBJZCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZW1pdHRlciByZXBy
ZXNlbnRzIHRoZSBNZXNoIG9yIHBvc2l0aW9uIHdlIGFyZSBhdHRhY2hpbmcgdGhlIHBhcnRpY2xl
IHN5c3RlbSB0by4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZW1pdHRlciA9IG51bGw7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRv
IGVtaXQgcGVyIGZyYW1lCisgICAgICAgICAqLworICAgICAgICB0aGlzLmVtaXRSYXRlID0gMTA7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB5b3Ugd2FudCB0byBsYXVuY2ggb25seSBhIGZl
dyBwYXJ0aWNsZXMgYXQgb25jZSwgdGhhdCBjYW4gYmUgZG9uZSwgYXMgd2VsbC4KKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMubWFudWFsRW1pdENvdW50ID0gLTE7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBUaGUgb3ZlcmFsbCBtb3Rpb24gc3BlZWQgKDAuMDEgaXMgZGVmYXVsdCB1cGRhdGUg
c3BlZWQsIGZhc3RlciB1cGRhdGVzID0gZmFzdGVyIGFuaW1hdGlvbikKKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMudXBkYXRlU3BlZWQgPSAwLjAxOworICAgICAgICAvKioKKyAgICAgICAgICog
VGhlIGFtb3VudCBvZiB0aW1lIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gaXMgcnVubmluZyAoZGVwZW5k
cyBvZiB0aGUgb3ZlcmFsbCB1cGRhdGUgc3BlZWQpLgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy50YXJnZXRTdG9wRHVyYXRpb24gPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lm
aWVzIHdoZXRoZXIgdGhlIHBhcnRpY2xlIHN5c3RlbSB3aWxsIGJlIGRpc3Bvc2VkIG9uY2UgaXQg
cmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24uCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmRpc3Bvc2VPblN0b3AgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1pbmlt
dW0gcG93ZXIgb2YgZW1pdHRpbmcgcGFydGljbGVzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5taW5FbWl0UG93ZXIgPSAxOworICAgICAgICAvKioKKyAgICAgICAgICogTWF4aW11bSBwb3dl
ciBvZiBlbWl0dGluZyBwYXJ0aWNsZXMuCisgICAgICAgICAqLworICAgICAgICB0aGlzLm1heEVt
aXRQb3dlciA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNaW5pbXVtIGxpZmUgdGltZSBv
ZiBlbWl0dGluZyBwYXJ0aWNsZXMuCisgICAgICAgICAqLworICAgICAgICB0aGlzLm1pbkxpZmVU
aW1lID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1heGltdW0gbGlmZSB0aW1lIG9mIGVt
aXR0aW5nIHBhcnRpY2xlcy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubWF4TGlmZVRpbWUg
PSAxOworICAgICAgICAvKioKKyAgICAgICAgICogTWluaW11bSBTaXplIG9mIGVtaXR0aW5nIHBh
cnRpY2xlcy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubWluU2l6ZSA9IDE7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBNYXhpbXVtIFNpemUgb2YgZW1pdHRpbmcgcGFydGljbGVzLgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5tYXhTaXplID0gMTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIE1pbmltdW0gc2NhbGUgb2YgZW1pdHRpbmcgcGFydGljbGVzIG9uIFggYXhpcy4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMubWluU2NhbGVYID0gMTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIE1heGltdW0gc2NhbGUgb2YgZW1pdHRpbmcgcGFydGljbGVzIG9uIFggYXhpcy4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMubWF4U2NhbGVYID0gMTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIE1pbmltdW0gc2NhbGUgb2YgZW1pdHRpbmcgcGFydGljbGVzIG9uIFkgYXhpcy4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMubWluU2NhbGVZID0gMTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIE1heGltdW0gc2NhbGUgb2YgZW1pdHRpbmcgcGFydGljbGVzIG9uIFkgYXhpcy4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMubWF4U2NhbGVZID0gMTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3Igc2V0cyB0aGUgbWluaW1hbCBpbml0aWFsIHJvdGF0aW9uIGluIHJhZGlhbnMu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLm1pbkluaXRpYWxSb3RhdGlvbiA9IDA7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIG1heGltYWwgaW5pdGlhbCByb3Rh
dGlvbiBpbiByYWRpYW5zLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tYXhJbml0aWFsUm90
YXRpb24gPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogTWluaW11bSBhbmd1bGFyIHNwZWVk
IG9mIGVtaXR0aW5nIHBhcnRpY2xlcyAoWi1heGlzIHJvdGF0aW9uIGZvciBlYWNoIHBhcnRpY2xl
KS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubWluQW5ndWxhclNwZWVkID0gMDsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIE1heGltdW0gYW5ndWxhciBzcGVlZCBvZiBlbWl0dGluZyBwYXJ0
aWNsZXMgKFotYXhpcyByb3RhdGlvbiBmb3IgZWFjaCBwYXJ0aWNsZSkuCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLm1heEFuZ3VsYXJTcGVlZCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBUaGUgbGF5ZXIgbWFzayB3ZSBhcmUgcmVuZGVyaW5nIHRoZSBwYXJ0aWNsZXMgdGhyb3VnaC4K
KyAgICAgICAgICovCisgICAgICAgIHRoaXMubGF5ZXJNYXNrID0gMHgwRkZGRkZGRjsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFRoaXMgY2FuIGhlbHAgdXNpbmcgeW91ciBvd24gc2hhZGVyIHRv
IHJlbmRlciB0aGUgcGFydGljbGUgc3lzdGVtLgorICAgICAgICAgKiBUaGUgYWNjb3JkaW5nIGVm
ZmVjdCB3aWxsIGJlIGNyZWF0ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuY3VzdG9tU2hh
ZGVyID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEJ5IGRlZmF1bHQgcGFydGljbGUg
c3lzdGVtIHN0YXJ0cyBhcyBzb29uIGFzIHRoZXkgYXJlIGNyZWF0ZWQuIFRoaXMgcHJldmVudHMg
dGhlCisgICAgICAgICAqIGF1dG9tYXRpYyBzdGFydCB0byBoYXBwZW4gYW5kIGxldCB5b3UgZGVj
aWRlIHdoZW4gdG8gc3RhcnQgZW1pdHRpbmcgcGFydGljbGVzLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5wcmV2ZW50QXV0b1N0YXJ0ID0gZmFsc2U7CisgICAgICAgIC8qKiBHZXRzIG9yIHNl
dHMgdGhlIHN0cmVuZ3RoIHRvIGFwcGx5IHRvIHRoZSBub2lzZSB2YWx1ZSAoZGVmYXVsdCBpcyAo
MTAsIDEwLCAxMCkpICovCisgICAgICAgIHRoaXMubm9pc2VTdHJlbmd0aCA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDEwLCAx
MCwgMTApOworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4g
dGhlIHBhcnRpY2xlIGFuaW1hdGlvbiBpcyBlbmRpbmcuCisgICAgICAgICAqLworICAgICAgICB0
aGlzLm9uQW5pbWF0aW9uRW5kID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEJsZW5k
IG1vZGUgdXNlIHRvIHJlbmRlciB0aGUgcGFydGljbGUsIGl0IGNhbiBiZSBlaXRoZXIgUGFydGlj
bGVTeXN0ZW0uQkxFTkRNT0RFX09ORU9ORSBvciBQYXJ0aWNsZVN5c3RlbS5CTEVORE1PREVfU1RB
TkRBUkQuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmJsZW5kTW9kZSA9IEJhc2VQYXJ0aWNs
ZVN5c3RlbS5CTEVORE1PREVfT05FT05FOworICAgICAgICAvKioKKyAgICAgICAgICogRm9yY2Vz
IHRoZSBwYXJ0aWNsZSB0byB3cml0ZSB0aGVpciBkZXB0aCBpbmZvcm1hdGlvbiB0byB0aGUgZGVw
dGggYnVmZmVyLiBUaGlzIGNhbiBoZWxwIHByZXZlbnRpbmcgb3RoZXIgZHJhdyBjYWxscworICAg
ICAgICAgKiB0byBvdmVycmlkZSB0aGUgcGFydGljbGVzLgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5mb3JjZURlcHRoV3JpdGUgPSBmYWxzZTsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyBh
IHZhbHVlIGluZGljYXRpbmcgaG93IG1hbnkgY3ljbGVzIChvciBmcmFtZXMpIG11c3QgYmUgZXhl
Y3V0ZWQgYmVmb3JlIGZpcnN0IHJlbmRlcmluZyAodGhpcyB2YWx1ZSBoYXMgdG8gYmUgc2V0IGJl
Zm9yZSBzdGFydGluZyB0aGUgc3lzdGVtKS4gRGVmYXVsdCBpcyAwICovCisgICAgICAgIHRoaXMu
cHJlV2FybUN5Y2xlcyA9IDA7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSBpbmRp
Y2F0aW5nIHRoZSB0aW1lIHN0ZXAgbXVsdGlwbGllciB0byB1c2UgaW4gcHJlLXdhcm0gbW9kZSAo
ZGVmYXVsdCBpcyAxKSAqLworICAgICAgICB0aGlzLnByZVdhcm1TdGVwT2Zmc2V0ID0gMTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIElmIHVzaW5nIGEgc3ByaXRlc2hlZXQgKGlzQW5pbWF0aW9u
U2hlZXRFbmFibGVkKSBkZWZpbmVzIHRoZSBzcGVlZCBvZiB0aGUgc3ByaXRlIGxvb3AgKGRlZmF1
bHQgaXMgMSBtZWFuaW5nIHRoZSBhbmltYXRpb24gd2lsbCBwbGF5IG9uY2UgZHVyaW5nIHRoZSBl
bnRpcmUgcGFydGljbGUgbGlmZXRpbWUpCisgICAgICAgICAqLworICAgICAgICB0aGlzLnNwcml0
ZUNlbGxDaGFuZ2VTcGVlZCA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB1c2luZyBh
IHNwcml0ZXNoZWV0IChpc0FuaW1hdGlvblNoZWV0RW5hYmxlZCkgZGVmaW5lcyB0aGUgZmlyc3Qg
c3ByaXRlIGNlbGwgdG8gZGlzcGxheQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zdGFydFNw
cml0ZUNlbGxJRCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB1c2luZyBhIHNwcml0
ZXNoZWV0IChpc0FuaW1hdGlvblNoZWV0RW5hYmxlZCkgZGVmaW5lcyB0aGUgbGFzdCBzcHJpdGUg
Y2VsbCB0byBkaXNwbGF5CisgICAgICAgICAqLworICAgICAgICB0aGlzLmVuZFNwcml0ZUNlbGxJ
RCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB1c2luZyBhIHNwcml0ZXNoZWV0IChp
c0FuaW1hdGlvblNoZWV0RW5hYmxlZCksIGRlZmluZXMgdGhlIHNwcml0ZSBjZWxsIHdpZHRoIHRv
IHVzZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zcHJpdGVDZWxsV2lkdGggPSAwOworICAg
ICAgICAvKioKKyAgICAgICAgICogSWYgdXNpbmcgYSBzcHJpdGVzaGVldCAoaXNBbmltYXRpb25T
aGVldEVuYWJsZWQpLCBkZWZpbmVzIHRoZSBzcHJpdGUgY2VsbCBoZWlnaHQgdG8gdXNlCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnNwcml0ZUNlbGxIZWlnaHQgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogVGhpcyBhbGxvd3MgdGhlIHN5c3RlbSB0byByYW5kb20gcGljayB0aGUgc3Rh
cnQgY2VsbCBJRCBiZXR3ZWVuIHN0YXJ0U3ByaXRlQ2VsbElEIGFuZCBlbmRTcHJpdGVDZWxsSUQK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuc3ByaXRlUmFuZG9tU3RhcnRDZWxsID0gZmFsc2U7
CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBWZWN0b3IyIHVzZWQgdG8gbW92ZSB0aGUgcGl2
b3QgKGJ5IGRlZmF1bHQgKDAsMCkpICovCisgICAgICAgIHRoaXMudHJhbnNsYXRpb25QaXZvdCA9
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVj
dG9yMiJdKDAsIDApOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9v
bGVhbiBpbmRpY2F0aW5nIHRoYXQgaG9zdGVkIGFuaW1hdGlvbnMgKGluIHRoZSBzeXN0ZW0uYW5p
bWF0aW9ucyBhcnJheSkgbXVzdCBiZSBzdGFydGVkIHdoZW4gc3lzdGVtLnN0YXJ0KCkgaXMgY2Fs
bGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLmJlZ2luQW5pbWF0aW9uT25TdGFydCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBmcmFtZSB0byBz
dGFydCB0aGUgYW5pbWF0aW9uIGZyb20gd2hlbiBiZWdpbkFuaW1hdGlvbk9uU3RhcnQgaXMgdHJ1
ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5iZWdpbkFuaW1hdGlvbkZyb20gPSAwOworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBmcmFtZSB0byBlbmQgdGhlIGFu
aW1hdGlvbiBvbiB3aGVuIGJlZ2luQW5pbWF0aW9uT25TdGFydCBpcyB0cnVlCisgICAgICAgICAq
LworICAgICAgICB0aGlzLmJlZ2luQW5pbWF0aW9uVG8gPSA2MDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhbmltYXRpb25zIG11
c3QgbG9vcCB3aGVuIGJlZ2luQW5pbWF0aW9uT25TdGFydCBpcyB0cnVlCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLmJlZ2luQW5pbWF0aW9uTG9vcCA9IGZhbHNlOworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBvciBzZXRzIGEgd29ybGQgb2Zmc2V0IGFwcGxpZWQgdG8gYWxsIHBhcnRp
Y2xlcworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy53b3JsZE9mZnNldCA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIDAs
IDApOworICAgICAgICAvKioKKyAgICAgICAgICogWW91IGNhbiB1c2UgZ3Jhdml0eSBpZiB5b3Ug
d2FudCB0byBnaXZlIGFuIG9yaWVudGF0aW9uIHRvIHlvdXIgcGFydGljbGVzLgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5ncmF2aXR5ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2NvbG9y
R3JhZGllbnRzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2l6ZUdyYWRpZW50cyA9IG51bGw7Cisg
ICAgICAgIHRoaXMuX2xpZmVUaW1lR3JhZGllbnRzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fYW5n
dWxhclNwZWVkR3JhZGllbnRzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdmVsb2NpdHlHcmFkaWVu
dHMgPSBudWxsOworICAgICAgICB0aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fZHJhZ0dyYWRpZW50cyA9IG51bGw7CisgICAgICAgIHRoaXMuX2VtaXRS
YXRlR3JhZGllbnRzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc3RhcnRTaXplR3JhZGllbnRzID0g
bnVsbDsKKyAgICAgICAgdGhpcy5fcmFtcEdyYWRpZW50cyA9IG51bGw7CisgICAgICAgIHRoaXMu
X2NvbG9yUmVtYXBHcmFkaWVudHMgPSBudWxsOworICAgICAgICB0aGlzLl9hbHBoYVJlbWFwR3Jh
ZGllbnRzID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhlIGRlbGF5
IGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgc3RhcnRpbmcgdGhlIHN5c3RlbSAoMCBieSBkZWZhdWx0
KQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zdGFydERlbGF5ID0gMDsKKyAgICAgICAgLyoq
IEdldHMgb3Igc2V0cyBhIHZhbHVlIGluZGljYXRpbmcgdGhlIGRhbXBpbmcgdG8gYXBwbHkgaWYg
dGhlIGxpbWl0IHZlbG9jaXR5IGZhY3RvciBpcyByZWFjaGVkICovCisgICAgICAgIHRoaXMubGlt
aXRWZWxvY2l0eURhbXBpbmcgPSAwLjQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSYW5kb20g
Y29sb3Igb2YgZWFjaCBwYXJ0aWNsZSBhZnRlciBpdCBoYXMgYmVlbiBlbWl0dGVkLCBiZXR3ZWVu
IGNvbG9yMSBhbmQgY29sb3IyIHZlY3RvcnMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuY29s
b3IxID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkNvbG9yNCJdKDEuMCwgMS4wLCAxLjAsIDEuMCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBS
YW5kb20gY29sb3Igb2YgZWFjaCBwYXJ0aWNsZSBhZnRlciBpdCBoYXMgYmVlbiBlbWl0dGVkLCBi
ZXR3ZWVuIGNvbG9yMSBhbmQgY29sb3IyIHZlY3RvcnMKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuY29sb3IyID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkNvbG9yNCJdKDEuMCwgMS4wLCAxLjAsIDEuMCk7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBDb2xvciB0aGUgcGFydGljbGUgd2lsbCBoYXZlIGF0IHRoZSBlbmQgb2YgaXRzIGxpZmV0
aW1lCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNvbG9yRGVhZCA9IG5ldyBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb2xvcjQiXSgwLCAwLCAwLCAx
LjApOworICAgICAgICAvKioKKyAgICAgICAgICogQW4gb3B0aW9uYWwgbWFzayB0byBmaWx0ZXIg
c29tZSBjb2xvcnMgb3V0IG9mIHRoZSB0ZXh0dXJlLCBvciBmaWx0ZXIgYSBwYXJ0IG9mIHRoZSBh
bHBoYSBjaGFubmVsCisgICAgICAgICAqLworICAgICAgICB0aGlzLnRleHR1cmVNYXNrID0gbmV3
IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yNCJd
KDEuMCwgMS4wLCAxLjAsIDEuMCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRo
aXMuX2lzU3ViRW1pdHRlciA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBv
ciBzZXRzIHRoZSBiaWxsYm9hcmQgbW9kZSB0byB1c2Ugd2hlbiBpc0JpbGxib2FyZEJhc2VkID0g
dHJ1ZS4KKyAgICAgICAgICogVmFsdWUgY2FuIGJlOiBQYXJ0aWNsZVN5c3RlbS5CSUxMQk9BUkRN
T0RFX0FMTCwgUGFydGljbGVTeXN0ZW0uQklMTEJPQVJETU9ERV9ZLCBQYXJ0aWNsZVN5c3RlbS5C
SUxMQk9BUkRNT0RFX1NUUkVUQ0hFRAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5iaWxsYm9h
cmRNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkNvbnN0YW50cyJdLlBBUlRJQ0xFU19CSUxMQk9BUkRNT0RFX0FMTDsKKyAgICAgICAgdGhpcy5f
aXNCaWxsYm9hcmRCYXNlZCA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBMb2NhbCBj
YWNoZSBvZiBkZWZpbmVzIGZvciBpbWFnZSBwcm9jZXNzaW5nLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMgPSBuZXcgX01hdGVy
aWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25EZWZpbmVzIl0oKTsKKyAgICAgICAg
dGhpcy5pZCA9IG5hbWU7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgfQorICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLCAibm9pc2VU
ZXh0dXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgdGV4dHVy
ZSB1c2VkIHRvIGFkZCByYW5kb20gbm9pc2UgdG8gcGFydGljbGUgcG9zaXRpb25zCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9ub2lzZVRleHR1cmU7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fbm9pc2VUZXh0dXJlID09PSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX25v
aXNlVGV4dHVyZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fcmVzZXQoKTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VQYXJ0aWNsZVN5c3RlbS5w
cm90b3R5cGUsICJpc0FuaW1hdGlvblNoZWV0RW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIGFuIGFuaW1hdGlvbiBzcHJpdGUgc2hlZXQgaXMg
ZW5hYmxlZCBvciBub3Qgb24gdGhlIHBhcnRpY2xlIHN5c3RlbQorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNBbmltYXRp
b25TaGVldEVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpb25TaGVldEVuYWJsZWQgPT0gdmFs
dWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0aGlzLl9pc0FuaW1hdGlvblNoZWV0RW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAgdGhp
cy5fcmVzZXQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0IGhvc3Rp
bmcgc2NlbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgc2NlbmUKKyAgICAgKi8KKyAgICBCYXNlUGFy
dGljbGVTeXN0ZW0ucHJvdG90eXBlLmdldFNjZW5lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fc2NlbmU7CisgICAgfTsKKyAgICBCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90
eXBlLl9oYXNUYXJnZXRTdG9wRHVyYXRpb25EZXBlbmRhbnRHcmFkaWVudCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICh0aGlzLl9zdGFydFNpemVHcmFkaWVudHMgJiYgdGhpcy5fc3Rh
cnRTaXplR3JhZGllbnRzLmxlbmd0aCA+IDApCisgICAgICAgICAgICB8fCAodGhpcy5fZW1pdFJh
dGVHcmFkaWVudHMgJiYgdGhpcy5fZW1pdFJhdGVHcmFkaWVudHMubGVuZ3RoID4gMCkKKyAgICAg
ICAgICAgIHx8ICh0aGlzLl9saWZlVGltZUdyYWRpZW50cyAmJiB0aGlzLl9saWZlVGltZUdyYWRp
ZW50cy5sZW5ndGggPiAwKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJl
bnQgbGlzdCBvZiBkcmFnIGdyYWRpZW50cy4KKyAgICAgKiBZb3UgbXVzdCB1c2UgYWRkRHJhZ0dy
YWRpZW50IGFuZCByZW1vdmVEcmFnR3JhZGllbnQgdG8gdWRwYXRlIHRoaXMgbGlzdAorICAgICAq
IEByZXR1cm5zIHRoZSBsaXN0IG9mIGRyYWcgZ3JhZGllbnRzCisgICAgICovCisgICAgQmFzZVBh
cnRpY2xlU3lzdGVtLnByb3RvdHlwZS5nZXREcmFnR3JhZGllbnRzID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ0dyYWRpZW50czsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIGN1cnJlbnQgbGlzdCBvZiBsaW1pdCB2ZWxvY2l0eSBncmFkaWVudHMuCisg
ICAgICogWW91IG11c3QgdXNlIGFkZExpbWl0VmVsb2NpdHlHcmFkaWVudCBhbmQgcmVtb3ZlTGlt
aXRWZWxvY2l0eUdyYWRpZW50IHRvIHVkcGF0ZSB0aGlzIGxpc3QKKyAgICAgKiBAcmV0dXJucyB0
aGUgbGlzdCBvZiBsaW1pdCB2ZWxvY2l0eSBncmFkaWVudHMKKyAgICAgKi8KKyAgICBCYXNlUGFy
dGljbGVTeXN0ZW0ucHJvdG90eXBlLmdldExpbWl0VmVsb2NpdHlHcmFkaWVudHMgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBsaXN0IG9mIGNvbG9yIGdyYWRp
ZW50cy4KKyAgICAgKiBZb3UgbXVzdCB1c2UgYWRkQ29sb3JHcmFkaWVudCBhbmQgcmVtb3ZlQ29s
b3JHcmFkaWVudCB0byB1ZHBhdGUgdGhpcyBsaXN0CisgICAgICogQHJldHVybnMgdGhlIGxpc3Qg
b2YgY29sb3IgZ3JhZGllbnRzCisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3Rv
dHlwZS5nZXRDb2xvckdyYWRpZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2NvbG9yR3JhZGllbnRzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3Vy
cmVudCBsaXN0IG9mIHNpemUgZ3JhZGllbnRzLgorICAgICAqIFlvdSBtdXN0IHVzZSBhZGRTaXpl
R3JhZGllbnQgYW5kIHJlbW92ZVNpemVHcmFkaWVudCB0byB1ZHBhdGUgdGhpcyBsaXN0CisgICAg
ICogQHJldHVybnMgdGhlIGxpc3Qgb2Ygc2l6ZSBncmFkaWVudHMKKyAgICAgKi8KKyAgICBCYXNl
UGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmdldFNpemVHcmFkaWVudHMgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLl9zaXplR3JhZGllbnRzOworICAgIH07CisgICAgLyoqCisg
ICAgICogR2V0cyB0aGUgY3VycmVudCBsaXN0IG9mIGNvbG9yIHJlbWFwIGdyYWRpZW50cy4KKyAg
ICAgKiBZb3UgbXVzdCB1c2UgYWRkQ29sb3JSZW1hcEdyYWRpZW50IGFuZCByZW1vdmVDb2xvclJl
bWFwR3JhZGllbnQgdG8gdWRwYXRlIHRoaXMgbGlzdAorICAgICAqIEByZXR1cm5zIHRoZSBsaXN0
IG9mIGNvbG9yIHJlbWFwIGdyYWRpZW50cworICAgICAqLworICAgIEJhc2VQYXJ0aWNsZVN5c3Rl
bS5wcm90b3R5cGUuZ2V0Q29sb3JSZW1hcEdyYWRpZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2NvbG9yUmVtYXBHcmFkaWVudHM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXRzIHRoZSBjdXJyZW50IGxpc3Qgb2YgYWxwaGEgcmVtYXAgZ3JhZGllbnRzLgorICAg
ICAqIFlvdSBtdXN0IHVzZSBhZGRBbHBoYVJlbWFwR3JhZGllbnQgYW5kIHJlbW92ZUFscGhhUmVt
YXBHcmFkaWVudCB0byB1ZHBhdGUgdGhpcyBsaXN0CisgICAgICogQHJldHVybnMgdGhlIGxpc3Qg
b2YgYWxwaGEgcmVtYXAgZ3JhZGllbnRzCisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVt
LnByb3RvdHlwZS5nZXRBbHBoYVJlbWFwR3JhZGllbnRzID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5fYWxwaGFSZW1hcEdyYWRpZW50czsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIGN1cnJlbnQgbGlzdCBvZiBsaWZlIHRpbWUgZ3JhZGllbnRzLgorICAgICAq
IFlvdSBtdXN0IHVzZSBhZGRMaWZlVGltZUdyYWRpZW50IGFuZCByZW1vdmVMaWZlVGltZUdyYWRp
ZW50IHRvIHVkcGF0ZSB0aGlzIGxpc3QKKyAgICAgKiBAcmV0dXJucyB0aGUgbGlzdCBvZiBsaWZl
IHRpbWUgZ3JhZGllbnRzCisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlw
ZS5nZXRMaWZlVGltZUdyYWRpZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2xpZmVUaW1lR3JhZGllbnRzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
Y3VycmVudCBsaXN0IG9mIGFuZ3VsYXIgc3BlZWQgZ3JhZGllbnRzLgorICAgICAqIFlvdSBtdXN0
IHVzZSBhZGRBbmd1bGFyU3BlZWRHcmFkaWVudCBhbmQgcmVtb3ZlQW5ndWxhclNwZWVkR3JhZGll
bnQgdG8gdWRwYXRlIHRoaXMgbGlzdAorICAgICAqIEByZXR1cm5zIHRoZSBsaXN0IG9mIGFuZ3Vs
YXIgc3BlZWQgZ3JhZGllbnRzCisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3Rv
dHlwZS5nZXRBbmd1bGFyU3BlZWRHcmFkaWVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHM7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBHZXRzIHRoZSBjdXJyZW50IGxpc3Qgb2YgdmVsb2NpdHkgZ3JhZGllbnRzLgorICAgICAqIFlv
dSBtdXN0IHVzZSBhZGRWZWxvY2l0eUdyYWRpZW50IGFuZCByZW1vdmVWZWxvY2l0eUdyYWRpZW50
IHRvIHVkcGF0ZSB0aGlzIGxpc3QKKyAgICAgKiBAcmV0dXJucyB0aGUgbGlzdCBvZiB2ZWxvY2l0
eSBncmFkaWVudHMKKyAgICAgKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmdl
dFZlbG9jaXR5R3JhZGllbnRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5f
dmVsb2NpdHlHcmFkaWVudHM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJy
ZW50IGxpc3Qgb2Ygc3RhcnQgc2l6ZSBncmFkaWVudHMuCisgICAgICogWW91IG11c3QgdXNlIGFk
ZFN0YXJ0U2l6ZUdyYWRpZW50IGFuZCByZW1vdmVTdGFydFNpemVHcmFkaWVudCB0byB1ZHBhdGUg
dGhpcyBsaXN0CisgICAgICogQHJldHVybnMgdGhlIGxpc3Qgb2Ygc3RhcnQgc2l6ZSBncmFkaWVu
dHMKKyAgICAgKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmdldFN0YXJ0U2l6
ZUdyYWRpZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2l6
ZUdyYWRpZW50czsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgbGlz
dCBvZiBlbWl0IHJhdGUgZ3JhZGllbnRzLgorICAgICAqIFlvdSBtdXN0IHVzZSBhZGRFbWl0UmF0
ZUdyYWRpZW50IGFuZCByZW1vdmVFbWl0UmF0ZUdyYWRpZW50IHRvIHVkcGF0ZSB0aGlzIGxpc3QK
KyAgICAgKiBAcmV0dXJucyB0aGUgbGlzdCBvZiBlbWl0IHJhdGUgZ3JhZGllbnRzCisgICAgICov
CisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5nZXRFbWl0UmF0ZUdyYWRpZW50cyA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VtaXRSYXRlR3JhZGllbnRzOwor
ICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VQYXJ0aWNsZVN5c3RlbS5wcm90
b3R5cGUsICJkaXJlY3Rpb24xIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogUmFuZG9tIGRp
cmVjdGlvbiBvZiBlYWNoIHBhcnRpY2xlIGFmdGVyIGl0IGhhcyBiZWVuIGVtaXR0ZWQsIGJldHdl
ZW4gZGlyZWN0aW9uMSBhbmQgZGlyZWN0aW9uMiB2ZWN0b3JzLgorICAgICAgICAgKiBUaGlzIG9u
bHkgd29ya3Mgd2hlbiBwYXJ0aWNsZUVtaXR0ZXJUeXBzIGlzIGEgQm94UGFydGljbGVFbWl0dGVy
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLnBhcnRpY2xlRW1pdHRlclR5cGUuZGlyZWN0aW9uMSkgeworICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLnBhcnRpY2xlRW1pdHRlclR5cGUuZGlyZWN0aW9uMTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnBhcnRpY2xlRW1pdHRl
clR5cGUuZGlyZWN0aW9uMSkgeworICAgICAgICAgICAgICAgIHRoaXMucGFydGljbGVFbWl0dGVy
VHlwZS5kaXJlY3Rpb24xID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBl
LCAiZGlyZWN0aW9uMiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJhbmRvbSBkaXJlY3Rp
b24gb2YgZWFjaCBwYXJ0aWNsZSBhZnRlciBpdCBoYXMgYmVlbiBlbWl0dGVkLCBiZXR3ZWVuIGRp
cmVjdGlvbjEgYW5kIGRpcmVjdGlvbjIgdmVjdG9ycy4KKyAgICAgICAgICogVGhpcyBvbmx5IHdv
cmtzIHdoZW4gcGFydGljbGVFbWl0dGVyVHlwcyBpcyBhIEJveFBhcnRpY2xlRW1pdHRlcgorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhp
cy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLmRpcmVjdGlvbjIpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLmRpcmVjdGlvbjI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBl
LmRpcmVjdGlvbjIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2xlRW1pdHRlclR5cGUu
ZGlyZWN0aW9uMiA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZSwgIm1p
bkVtaXRCb3giLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNaW5pbXVtIGJveCBwb2ludCBh
cm91bmQgb3VyIGVtaXR0ZXIuIE91ciBlbWl0dGVyIGlzIHRoZSBjZW50ZXIgb2YgcGFydGljbGVz
IHNvdXJjZSwgYnV0IGlmIHlvdSB3YW50IHlvdXIgcGFydGljbGVzIHRvIGVtaXQgZnJvbSBtb3Jl
IHRoYW4gb25lIHBvaW50LCB0aGVuIHlvdSBjYW4gdGVsbCBpdCB0byBkbyBzby4KKyAgICAgICAg
ICogVGhpcyBvbmx5IHdvcmtzIHdoZW4gcGFydGljbGVFbWl0dGVyVHlwcyBpcyBhIEJveFBhcnRp
Y2xlRW1pdHRlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLm1pbkVtaXRCb3gpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLm1pbkVtaXRCb3g7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIH0sCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5wYXJ0
aWNsZUVtaXR0ZXJUeXBlLm1pbkVtaXRCb3gpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnBhcnRp
Y2xlRW1pdHRlclR5cGUubWluRW1pdEJveCA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZVBhcnRpY2xlU3lzdGVt
LnByb3RvdHlwZSwgIm1heEVtaXRCb3giLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNYXhp
bXVtIGJveCBwb2ludCBhcm91bmQgb3VyIGVtaXR0ZXIuIE91ciBlbWl0dGVyIGlzIHRoZSBjZW50
ZXIgb2YgcGFydGljbGVzIHNvdXJjZSwgYnV0IGlmIHlvdSB3YW50IHlvdXIgcGFydGljbGVzIHRv
IGVtaXQgZnJvbSBtb3JlIHRoYW4gb25lIHBvaW50LCB0aGVuIHlvdSBjYW4gdGVsbCBpdCB0byBk
byBzby4KKyAgICAgICAgICogVGhpcyBvbmx5IHdvcmtzIHdoZW4gcGFydGljbGVFbWl0dGVyVHlw
cyBpcyBhIEJveFBhcnRpY2xlRW1pdHRlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLm1heEVt
aXRCb3gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBl
Lm1heEVtaXRCb3g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLm1heEVtaXRCb3gpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLnBhcnRpY2xlRW1pdHRlclR5cGUubWF4RW1pdEJveCA9IHZhbHVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFz
ZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZSwgImlzQmlsbGJvYXJkQmFzZWQiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhl
IHBhcnRpY2xlcyBtdXN0IGJlIHJlbmRlcmVkIGFzIGJpbGxib2FyZCBvciBhbGlnbmVkIHdpdGgg
dGhlIGRpcmVjdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5faXNCaWxsYm9hcmRCYXNlZDsKKyAgICAgICAgfSwKKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc0Jp
bGxib2FyZEJhc2VkID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2lzQmlsbGJvYXJkQmFzZWQgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHRoaXMuX3Jlc2V0KCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLCAiaW1hZ2VQcm9jZXNz
aW5nQ29uZmlndXJhdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGlt
YWdlIHByb2Nlc3NpbmcgY29uZmlndXJhdGlvbiB1c2VkIGVpdGhlciBpbiB0aGlzIG1hdGVyaWFs
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbjsKKyAgICAgICAgfSwKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIERlZmF1bHQgaW1hZ2UgcHJvY2Vzc2luZyBj
b25maWd1cmF0aW9uIHVzZWQgZWl0aGVyIGluIHRoZSB0aGlzIG1hdGVyaWFsLgorICAgICAgICAg
KgorICAgICAgICAgKiBJZiBzZXRzIHRvIG51bGwsIHRoZSBzY2VuZSBvbmUgaXMgaW4gdXNlLgor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IHRoaXMuX2F0dGFjaEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24odmFsdWUpOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyBhIG5ldyBpbWFnZSBwcm9jZXNz
aW5nIGNvbmZpZ3VyYXRpb24gdG8gdGhlIFN0YW5kYXJkIE1hdGVyaWFsLgorICAgICAqIEBwYXJh
bSBjb25maWd1cmF0aW9uCisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlw
ZS5fYXR0YWNoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uIChjb25maWd1
cmF0aW9uKSB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09PSB0aGlzLl9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgLy8gUGljayB0aGUgc2NlbmUgY29uZmlndXJhdGlvbiBpZiBuZWVkZWQuCisgICAgICAg
IGlmICghY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbiA9IHRoaXMuX3NjZW5lLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb247
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqIEBoaWRkZW4gKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9yZXNl
dCA9IGZ1bmN0aW9uICgpIHsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQmFzZVBh
cnRpY2xlU3lzdGVtLnByb3RvdHlwZS5fcmVtb3ZlR3JhZGllbnRBbmRUZXh0dXJlID0gZnVuY3Rp
b24gKGdyYWRpZW50LCBncmFkaWVudHMsIHRleHR1cmUpIHsKKyAgICAgICAgaWYgKCFncmFkaWVu
dHMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZhciBp
bmRleCA9IDA7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgZ3JhZGllbnRzXzEgPSBncmFkaWVu
dHM7IF9pIDwgZ3JhZGllbnRzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgdmFs
dWVHcmFkaWVudCA9IGdyYWRpZW50c18xW19pXTsKKyAgICAgICAgICAgIGlmICh2YWx1ZUdyYWRp
ZW50LmdyYWRpZW50ID09PSBncmFkaWVudCkgeworICAgICAgICAgICAgICAgIGdyYWRpZW50cy5z
cGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZSkgewor
ICAgICAgICAgICAgdGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgUG9pbnQgRW1pdHRlciBm
b3IgdGhlIHBhcnRpY2xlIHN5c3RlbSAoZW1pdHMgZGlyZWN0bHkgZnJvbSB0aGUgZW1pdHRlciBw
b3NpdGlvbikKKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uMSBQYXJ0aWNsZXMgYXJlIGVtaXR0ZWQg
YmV0d2VlbiB0aGUgZGlyZWN0aW9uMSBhbmQgZGlyZWN0aW9uMiBmcm9tIHdpdGhpbiB0aGUgYm94
CisgICAgICogQHBhcmFtIGRpcmVjdGlvbjIgUGFydGljbGVzIGFyZSBlbWl0dGVkIGJldHdlZW4g
dGhlIGRpcmVjdGlvbjEgYW5kIGRpcmVjdGlvbjIgZnJvbSB3aXRoaW4gdGhlIGJveAorICAgICAq
IEByZXR1cm5zIHRoZSBlbWl0dGVyCisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnBy
b3RvdHlwZS5jcmVhdGVQb2ludEVtaXR0ZXIgPSBmdW5jdGlvbiAoZGlyZWN0aW9uMSwgZGlyZWN0
aW9uMikgeworICAgICAgICB2YXIgcGFydGljbGVFbWl0dGVyID0gbmV3IF9QYXJ0aWNsZXNfRW1p
dHRlclR5cGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBvaW50UGFydGlj
bGVFbWl0dGVyIl0oKTsKKyAgICAgICAgcGFydGljbGVFbWl0dGVyLmRpcmVjdGlvbjEgPSBkaXJl
Y3Rpb24xOworICAgICAgICBwYXJ0aWNsZUVtaXR0ZXIuZGlyZWN0aW9uMiA9IGRpcmVjdGlvbjI7
CisgICAgICAgIHRoaXMucGFydGljbGVFbWl0dGVyVHlwZSA9IHBhcnRpY2xlRW1pdHRlcjsKKyAg
ICAgICAgcmV0dXJuIHBhcnRpY2xlRW1pdHRlcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBIZW1pc3BoZXJlIEVtaXR0ZXIgZm9yIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gKGVtaXRz
IGFsb25nIHRoZSBoZW1pc3BoZXJlIHJhZGl1cykKKyAgICAgKiBAcGFyYW0gcmFkaXVzIFRoZSBy
YWRpdXMgb2YgdGhlIGhlbWlzcGhlcmUgdG8gZW1pdCBmcm9tCisgICAgICogQHBhcmFtIHJhZGl1
c1JhbmdlIFRoZSByYW5nZSBvZiB0aGUgaGVtaXNwaGVyZSB0byBlbWl0IGZyb20gWzAtMV0gMCBT
dXJmYWNlIE9ubHksIDEgRW50aXJlIFJhZGl1cworICAgICAqIEByZXR1cm5zIHRoZSBlbWl0dGVy
CisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5jcmVhdGVIZW1pc3Bo
ZXJpY0VtaXR0ZXIgPSBmdW5jdGlvbiAocmFkaXVzLCByYWRpdXNSYW5nZSkgeworICAgICAgICBp
ZiAocmFkaXVzID09PSB2b2lkIDApIHsgcmFkaXVzID0gMTsgfQorICAgICAgICBpZiAocmFkaXVz
UmFuZ2UgPT09IHZvaWQgMCkgeyByYWRpdXNSYW5nZSA9IDE7IH0KKyAgICAgICAgdmFyIHBhcnRp
Y2xlRW1pdHRlciA9IG5ldyBfUGFydGljbGVzX0VtaXR0ZXJUeXBlc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlciJdKHJhZGl1cywg
cmFkaXVzUmFuZ2UpOworICAgICAgICB0aGlzLnBhcnRpY2xlRW1pdHRlclR5cGUgPSBwYXJ0aWNs
ZUVtaXR0ZXI7CisgICAgICAgIHJldHVybiBwYXJ0aWNsZUVtaXR0ZXI7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgU3BoZXJlIEVtaXR0ZXIgZm9yIHRoZSBwYXJ0aWNsZSBzeXN0
ZW0gKGVtaXRzIGFsb25nIHRoZSBzcGhlcmUgcmFkaXVzKQorICAgICAqIEBwYXJhbSByYWRpdXMg
VGhlIHJhZGl1cyBvZiB0aGUgc3BoZXJlIHRvIGVtaXQgZnJvbQorICAgICAqIEBwYXJhbSByYWRp
dXNSYW5nZSBUaGUgcmFuZ2Ugb2YgdGhlIHNwaGVyZSB0byBlbWl0IGZyb20gWzAtMV0gMCBTdXJm
YWNlIE9ubHksIDEgRW50aXJlIFJhZGl1cworICAgICAqIEByZXR1cm5zIHRoZSBlbWl0dGVyCisg
ICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5jcmVhdGVTcGhlcmVFbWl0
dGVyID0gZnVuY3Rpb24gKHJhZGl1cywgcmFkaXVzUmFuZ2UpIHsKKyAgICAgICAgaWYgKHJhZGl1
cyA9PT0gdm9pZCAwKSB7IHJhZGl1cyA9IDE7IH0KKyAgICAgICAgaWYgKHJhZGl1c1JhbmdlID09
PSB2b2lkIDApIHsgcmFkaXVzUmFuZ2UgPSAxOyB9CisgICAgICAgIHZhciBwYXJ0aWNsZUVtaXR0
ZXIgPSBuZXcgX1BhcnRpY2xlc19FbWl0dGVyVHlwZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siU3BoZXJlUGFydGljbGVFbWl0dGVyIl0ocmFkaXVzLCByYWRpdXNSYW5nZSk7
CisgICAgICAgIHRoaXMucGFydGljbGVFbWl0dGVyVHlwZSA9IHBhcnRpY2xlRW1pdHRlcjsKKyAg
ICAgICAgcmV0dXJuIHBhcnRpY2xlRW1pdHRlcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBEaXJlY3RlZCBTcGhlcmUgRW1pdHRlciBmb3IgdGhlIHBhcnRpY2xlIHN5c3RlbSAo
ZW1pdHMgYmV0d2VlbiBkaXJlY3Rpb24xIGFuZCBkaXJlY3Rpb24yKQorICAgICAqIEBwYXJhbSBy
YWRpdXMgVGhlIHJhZGl1cyBvZiB0aGUgc3BoZXJlIHRvIGVtaXQgZnJvbQorICAgICAqIEBwYXJh
bSBkaXJlY3Rpb24xIFBhcnRpY2xlcyBhcmUgZW1pdHRlZCBiZXR3ZWVuIHRoZSBkaXJlY3Rpb24x
IGFuZCBkaXJlY3Rpb24yIGZyb20gd2l0aGluIHRoZSBzcGhlcmUKKyAgICAgKiBAcGFyYW0gZGly
ZWN0aW9uMiBQYXJ0aWNsZXMgYXJlIGVtaXR0ZWQgYmV0d2VlbiB0aGUgZGlyZWN0aW9uMSBhbmQg
ZGlyZWN0aW9uMiBmcm9tIHdpdGhpbiB0aGUgc3BoZXJlCisgICAgICogQHJldHVybnMgdGhlIGVt
aXR0ZXIKKyAgICAgKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmNyZWF0ZURp
cmVjdGVkU3BoZXJlRW1pdHRlciA9IGZ1bmN0aW9uIChyYWRpdXMsIGRpcmVjdGlvbjEsIGRpcmVj
dGlvbjIpIHsKKyAgICAgICAgaWYgKHJhZGl1cyA9PT0gdm9pZCAwKSB7IHJhZGl1cyA9IDE7IH0K
KyAgICAgICAgaWYgKGRpcmVjdGlvbjEgPT09IHZvaWQgMCkgeyBkaXJlY3Rpb24xID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0o
MCwgMS4wLCAwKTsgfQorICAgICAgICBpZiAoZGlyZWN0aW9uMiA9PT0gdm9pZCAwKSB7IGRpcmVj
dGlvbjIgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlZlY3RvcjMiXSgwLCAxLjAsIDApOyB9CisgICAgICAgIHZhciBwYXJ0aWNsZUVtaXR0ZXIg
PSBuZXcgX1BhcnRpY2xlc19FbWl0dGVyVHlwZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiXShyYWRpdXMsIGRpcmVjdGlv
bjEsIGRpcmVjdGlvbjIpOworICAgICAgICB0aGlzLnBhcnRpY2xlRW1pdHRlclR5cGUgPSBwYXJ0
aWNsZUVtaXR0ZXI7CisgICAgICAgIHJldHVybiBwYXJ0aWNsZUVtaXR0ZXI7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgQ3lsaW5kZXIgRW1pdHRlciBmb3IgdGhlIHBhcnRpY2xl
IHN5c3RlbSAoZW1pdHMgZnJvbSB0aGUgY3lsaW5kZXIgdG8gdGhlIHBhcnRpY2xlIHBvc2l0aW9u
KQorICAgICAqIEBwYXJhbSByYWRpdXMgVGhlIHJhZGl1cyBvZiB0aGUgZW1pc3Npb24gY3lsaW5k
ZXIKKyAgICAgKiBAcGFyYW0gaGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIGVtaXNzaW9uIGN5bGlu
ZGVyCisgICAgICogQHBhcmFtIHJhZGl1c1JhbmdlIFRoZSByYW5nZSBvZiBlbWlzc2lvbiBbMC0x
XSAwIFN1cmZhY2Ugb25seSwgMSBFbnRpcmUgUmFkaXVzCisgICAgICogQHBhcmFtIGRpcmVjdGlv
blJhbmRvbWl6ZXIgSG93IG11Y2ggdG8gcmFuZG9taXplIHRoZSBwYXJ0aWNsZSBkaXJlY3Rpb24g
WzAtMV0KKyAgICAgKiBAcmV0dXJucyB0aGUgZW1pdHRlcgorICAgICAqLworICAgIEJhc2VQYXJ0
aWNsZVN5c3RlbS5wcm90b3R5cGUuY3JlYXRlQ3lsaW5kZXJFbWl0dGVyID0gZnVuY3Rpb24gKHJh
ZGl1cywgaGVpZ2h0LCByYWRpdXNSYW5nZSwgZGlyZWN0aW9uUmFuZG9taXplcikgeworICAgICAg
ICBpZiAocmFkaXVzID09PSB2b2lkIDApIHsgcmFkaXVzID0gMTsgfQorICAgICAgICBpZiAoaGVp
Z2h0ID09PSB2b2lkIDApIHsgaGVpZ2h0ID0gMTsgfQorICAgICAgICBpZiAocmFkaXVzUmFuZ2Ug
PT09IHZvaWQgMCkgeyByYWRpdXNSYW5nZSA9IDE7IH0KKyAgICAgICAgaWYgKGRpcmVjdGlvblJh
bmRvbWl6ZXIgPT09IHZvaWQgMCkgeyBkaXJlY3Rpb25SYW5kb21pemVyID0gMDsgfQorICAgICAg
ICB2YXIgcGFydGljbGVFbWl0dGVyID0gbmV3IF9QYXJ0aWNsZXNfRW1pdHRlclR5cGVzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkN5bGluZGVyUGFydGljbGVFbWl0dGVyIl0o
cmFkaXVzLCBoZWlnaHQsIHJhZGl1c1JhbmdlLCBkaXJlY3Rpb25SYW5kb21pemVyKTsKKyAgICAg
ICAgdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlID0gcGFydGljbGVFbWl0dGVyOworICAgICAgICBy
ZXR1cm4gcGFydGljbGVFbWl0dGVyOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBh
IERpcmVjdGVkIEN5bGluZGVyIEVtaXR0ZXIgZm9yIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gKGVtaXRz
IGJldHdlZW4gZGlyZWN0aW9uMSBhbmQgZGlyZWN0aW9uMikKKyAgICAgKiBAcGFyYW0gcmFkaXVz
IFRoZSByYWRpdXMgb2YgdGhlIGN5bGluZGVyIHRvIGVtaXQgZnJvbQorICAgICAqIEBwYXJhbSBo
ZWlnaHQgVGhlIGhlaWdodCBvZiB0aGUgZW1pc3Npb24gY3lsaW5kZXIKKyAgICAgKiBAcGFyYW0g
cmFkaXVzUmFuZ2UgdGhlIHJhbmdlIG9mIHRoZSBlbWlzc2lvbiBjeWxpbmRlciBbMC0xXSAwIFN1
cmZhY2Ugb25seSwgMSBFbnRpcmUgUmFkaXVzICgxIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFt
IGRpcmVjdGlvbjEgUGFydGljbGVzIGFyZSBlbWl0dGVkIGJldHdlZW4gdGhlIGRpcmVjdGlvbjEg
YW5kIGRpcmVjdGlvbjIgZnJvbSB3aXRoaW4gdGhlIGN5bGluZGVyCisgICAgICogQHBhcmFtIGRp
cmVjdGlvbjIgUGFydGljbGVzIGFyZSBlbWl0dGVkIGJldHdlZW4gdGhlIGRpcmVjdGlvbjEgYW5k
IGRpcmVjdGlvbjIgZnJvbSB3aXRoaW4gdGhlIGN5bGluZGVyCisgICAgICogQHJldHVybnMgdGhl
IGVtaXR0ZXIKKyAgICAgKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmNyZWF0
ZURpcmVjdGVkQ3lsaW5kZXJFbWl0dGVyID0gZnVuY3Rpb24gKHJhZGl1cywgaGVpZ2h0LCByYWRp
dXNSYW5nZSwgZGlyZWN0aW9uMSwgZGlyZWN0aW9uMikgeworICAgICAgICBpZiAocmFkaXVzID09
PSB2b2lkIDApIHsgcmFkaXVzID0gMTsgfQorICAgICAgICBpZiAoaGVpZ2h0ID09PSB2b2lkIDAp
IHsgaGVpZ2h0ID0gMTsgfQorICAgICAgICBpZiAocmFkaXVzUmFuZ2UgPT09IHZvaWQgMCkgeyBy
YWRpdXNSYW5nZSA9IDE7IH0KKyAgICAgICAgaWYgKGRpcmVjdGlvbjEgPT09IHZvaWQgMCkgeyBk
aXJlY3Rpb24xID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0oMCwgMS4wLCAwKTsgfQorICAgICAgICBpZiAoZGlyZWN0aW9uMiA9
PT0gdm9pZCAwKSB7IGRpcmVjdGlvbjIgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAxLjAsIDApOyB9CisgICAgICAgIHZh
ciBwYXJ0aWNsZUVtaXR0ZXIgPSBuZXcgX1BhcnRpY2xlc19FbWl0dGVyVHlwZXNfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ3lsaW5kZXJEaXJlY3RlZFBhcnRpY2xlRW1pdHRl
ciJdKHJhZGl1cywgaGVpZ2h0LCByYWRpdXNSYW5nZSwgZGlyZWN0aW9uMSwgZGlyZWN0aW9uMik7
CisgICAgICAgIHRoaXMucGFydGljbGVFbWl0dGVyVHlwZSA9IHBhcnRpY2xlRW1pdHRlcjsKKyAg
ICAgICAgcmV0dXJuIHBhcnRpY2xlRW1pdHRlcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBDb25lIEVtaXR0ZXIgZm9yIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gKGVtaXRzIGZyb20g
dGhlIGNvbmUgdG8gdGhlIHBhcnRpY2xlIHBvc2l0aW9uKQorICAgICAqIEBwYXJhbSByYWRpdXMg
VGhlIHJhZGl1cyBvZiB0aGUgY29uZSB0byBlbWl0IGZyb20KKyAgICAgKiBAcGFyYW0gYW5nbGUg
VGhlIGJhc2UgYW5nbGUgb2YgdGhlIGNvbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgZW1pdHRlcgor
ICAgICAqLworICAgIEJhc2VQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuY3JlYXRlQ29uZUVtaXR0
ZXIgPSBmdW5jdGlvbiAocmFkaXVzLCBhbmdsZSkgeworICAgICAgICBpZiAocmFkaXVzID09PSB2
b2lkIDApIHsgcmFkaXVzID0gMTsgfQorICAgICAgICBpZiAoYW5nbGUgPT09IHZvaWQgMCkgeyBh
bmdsZSA9IE1hdGguUEkgLyA0OyB9CisgICAgICAgIHZhciBwYXJ0aWNsZUVtaXR0ZXIgPSBuZXcg
X1BhcnRpY2xlc19FbWl0dGVyVHlwZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQ29uZVBhcnRpY2xlRW1pdHRlciJdKHJhZGl1cywgYW5nbGUpOworICAgICAgICB0aGlzLnBh
cnRpY2xlRW1pdHRlclR5cGUgPSBwYXJ0aWNsZUVtaXR0ZXI7CisgICAgICAgIHJldHVybiBwYXJ0
aWNsZUVtaXR0ZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgQm94IEVtaXR0
ZXIgZm9yIHRoZSBwYXJ0aWNsZSBzeXN0ZW0uIChlbWl0cyBiZXR3ZWVuIGRpcmVjdGlvbjEgYW5k
IGRpcmVjdGlvbjIgZnJvbSB3aXRoaW5nIHRoZSBib3ggZGVmaW5lZCBieSBtaW5FbWl0Qm94IGFu
ZCBtYXhFbWl0Qm94KQorICAgICAqIEBwYXJhbSBkaXJlY3Rpb24xIFBhcnRpY2xlcyBhcmUgZW1p
dHRlZCBiZXR3ZWVuIHRoZSBkaXJlY3Rpb24xIGFuZCBkaXJlY3Rpb24yIGZyb20gd2l0aGluIHRo
ZSBib3gKKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uMiBQYXJ0aWNsZXMgYXJlIGVtaXR0ZWQgYmV0
d2VlbiB0aGUgZGlyZWN0aW9uMSBhbmQgZGlyZWN0aW9uMiBmcm9tIHdpdGhpbiB0aGUgYm94Cisg
ICAgICogQHBhcmFtIG1pbkVtaXRCb3ggUGFydGljbGVzIGFyZSBlbWl0dGVkIGZyb20gdGhlIGJv
eCBiZXR3ZWVuIG1pbkVtaXRCb3ggYW5kIG1heEVtaXRCb3gKKyAgICAgKiBAcGFyYW0gbWF4RW1p
dEJveCAgUGFydGljbGVzIGFyZSBlbWl0dGVkIGZyb20gdGhlIGJveCBiZXR3ZWVuIG1pbkVtaXRC
b3ggYW5kIG1heEVtaXRCb3gKKyAgICAgKiBAcmV0dXJucyB0aGUgZW1pdHRlcgorICAgICAqLwor
ICAgIEJhc2VQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuY3JlYXRlQm94RW1pdHRlciA9IGZ1bmN0
aW9uIChkaXJlY3Rpb24xLCBkaXJlY3Rpb24yLCBtaW5FbWl0Qm94LCBtYXhFbWl0Qm94KSB7Cisg
ICAgICAgIHZhciBwYXJ0aWNsZUVtaXR0ZXIgPSBuZXcgX1BhcnRpY2xlc19FbWl0dGVyVHlwZXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQm94UGFydGljbGVFbWl0dGVyIl0o
KTsKKyAgICAgICAgdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlID0gcGFydGljbGVFbWl0dGVyOwor
ICAgICAgICB0aGlzLmRpcmVjdGlvbjEgPSBkaXJlY3Rpb24xOworICAgICAgICB0aGlzLmRpcmVj
dGlvbjIgPSBkaXJlY3Rpb24yOworICAgICAgICB0aGlzLm1pbkVtaXRCb3ggPSBtaW5FbWl0Qm94
OworICAgICAgICB0aGlzLm1heEVtaXRCb3ggPSBtYXhFbWl0Qm94OworICAgICAgICByZXR1cm4g
cGFydGljbGVFbWl0dGVyOworICAgIH07CisgICAgLyoqCisgICAgICogU291cmNlIGNvbG9yIGlz
IGFkZGVkIHRvIHRoZSBkZXN0aW5hdGlvbiBjb2xvciB3aXRob3V0IGFscGhhIGFmZmVjdGluZyB0
aGUgcmVzdWx0CisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLkJMRU5ETU9ERV9PTkVP
TkUgPSAwOworICAgIC8qKgorICAgICAqIEJsZW5kIGN1cnJlbnQgY29sb3IgYW5kIHBhcnRpY2xl
IGNvbG9yIHVzaW5nIHBhcnRpY2xl4oCZcyBhbHBoYQorICAgICAqLworICAgIEJhc2VQYXJ0aWNs
ZVN5c3RlbS5CTEVORE1PREVfU1RBTkRBUkQgPSAxOworICAgIC8qKgorICAgICAqIEFkZCBjdXJy
ZW50IGNvbG9yIGFuZCBwYXJ0aWNsZSBjb2xvciBtdWx0aXBsaWVkIGJ5IHBhcnRpY2xl4oCZcyBh
bHBoYQorICAgICAqLworICAgIEJhc2VQYXJ0aWNsZVN5c3RlbS5CTEVORE1PREVfQUREID0gMjsK
KyAgICAvKioKKyAgICAgKiBNdWx0aXBseSBjdXJyZW50IGNvbG9yIHdpdGggcGFydGljbGUgY29s
b3IKKyAgICAgKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX01VTFRJUExZID0g
MzsKKyAgICAvKioKKyAgICAgKiBNdWx0aXBseSBjdXJyZW50IGNvbG9yIHdpdGggcGFydGljbGUg
Y29sb3IgdGhlbiBhZGQgY3VycmVudCBjb2xvciBhbmQgcGFydGljbGUgY29sb3IgbXVsdGlwbGll
ZCBieSBwYXJ0aWNsZeKAmXMgYWxwaGEKKyAgICAgKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0u
QkxFTkRNT0RFX01VTFRJUExZQUREID0gNDsKKyAgICByZXR1cm4gQmFzZVBhcnRpY2xlU3lzdGVt
OworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QYXJ0aWNsZXMvZ3B1UGFydGlj
bGVTeXN0ZW0udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vUGFydGljbGVzL2dwdVBhcnRpY2xlU3lzdGVtLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogR1BVUGFydGljbGVTeXN0ZW0gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiR1BVUGFydGljbGVTeXN0ZW0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIEdQVVBhcnRpY2xl
U3lzdGVtOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25v
ZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01pc2MvZ3JhZGllbnRzICovICIuL01pc2MvZ3JhZGllbnRzLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNl
cnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0
aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnNjYWxhciAq
LyAiLi9NYXRocy9tYXRoLnNjYWxhci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZVBhcnRpY2xlU3lzdGVtX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2VQYXJ0aWNsZVN5
c3RlbSAqLyAiLi9QYXJ0aWNsZXMvYmFzZVBhcnRpY2xlU3lzdGVtLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3BhcnRpY2xlU3lzdGVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhcnRpY2xlU3lzdGVtICovICIuL1BhcnRp
Y2xlcy9wYXJ0aWNsZVN5c3RlbS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9QYXJ0
aWNsZXNfRW1pdHRlclR5cGVzX2JveFBhcnRpY2xlRW1pdHRlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUGFydGljbGVzL0VtaXR0ZXJU
eXBlcy9ib3hQYXJ0aWNsZUVtaXR0ZXIgKi8gIi4vUGFydGljbGVzL0VtaXR0ZXJUeXBlcy9ib3hQ
YXJ0aWNsZUVtaXR0ZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMv
bWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbEhl
bHBlciAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRl
cmlhbHMvaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAqLyAiLi9NYXRlcmlhbHMvaW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICov
ICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yYXdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVz
L3Jhd1RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3Jhd1RleHR1cmUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0
YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9Fbmdp
bmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVl
cENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01pc2MvZGVlcENvcGllciAqLyAiLi9NaXNjL2RlZXBDb3BpZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19ncHVVcGRhdGVQYXJ0aWNsZXNfZnJhZ21l
bnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9TaGFkZXJzL2dwdVVwZGF0ZVBhcnRpY2xlcy5mcmFnbWVudCAqLyAiLi9TaGFkZXJzL2dw
dVVwZGF0ZVBhcnRpY2xlcy5mcmFnbWVudC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9TaGFkZXJzX2dwdVVwZGF0ZVBhcnRpY2xlc192ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2dwdVVwZGF0ZVBh
cnRpY2xlcy52ZXJ0ZXggKi8gIi4vU2hhZGVycy9ncHVVcGRhdGVQYXJ0aWNsZXMudmVydGV4LnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfZ3B1UmVuZGVyUGFydGljbGVz
X2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vU2hhZGVycy9ncHVSZW5kZXJQYXJ0aWNsZXMuZnJhZ21lbnQgKi8gIi4vU2hh
ZGVycy9ncHVSZW5kZXJQYXJ0aWNsZXMuZnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfU2hhZGVyc19ncHVSZW5kZXJQYXJ0aWNsZXNfdmVydGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9ncHVS
ZW5kZXJQYXJ0aWNsZXMudmVydGV4ICovICIuL1NoYWRlcnMvZ3B1UmVuZGVyUGFydGljbGVzLnZl
cnRleC50cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
Ky8qKgorICogVGhpcyByZXByZXNlbnRzIGEgR1BVIHBhcnRpY2xlIHN5c3RlbSBpbiBCYWJ5bG9u
CisgKiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHBhcnRpY2xlIHN5c3RlbSBpbiBCYWJ5bG9uIGFzIGl0
IHVzZXMgdGhlIEdQVSB0byB1cGRhdGUgdGhlIGluZGl2aWR1YWwgcGFydGljbGUgZGF0YQorICog
QHNlZSBodHRwczovL3d3dy5iYWJ5bG9uanMtcGxheWdyb3VuZC5jb20vI1BVNFdZSSM0CisgKi8K
K3ZhciBHUFVQYXJ0aWNsZVN5c3RlbSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIp
IHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShH
UFVQYXJ0aWNsZVN5c3RlbSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMg
YSBHUFUgcGFydGljbGUgc3lzdGVtLgorICAgICAqIFBhcnRpY2xlcyBhcmUgb2Z0ZW4gc21hbGwg
c3ByaXRlcyB1c2VkIHRvIHNpbXVsYXRlIGhhcmQtdG8tcmVwcm9kdWNlIHBoZW5vbWVuYSBsaWtl
IGZpcmUsIHNtb2tlLCB3YXRlciwgb3IgYWJzdHJhY3QgdmlzdWFsIGVmZmVjdHMgbGlrZSBtYWdp
YyBnbGl0dGVyIGFuZCBmYWVyeSBkdXN0LgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9m
IHRoZSBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyB1
c2VkIHRvIGNyZWF0ZSB0aGUgc3lzdGVtCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0
aGUgcGFydGljbGUgc3lzdGVtIGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gaXNBbmltYXRpb25T
aGVldEVuYWJsZWQgTXVzdCBiZSB0cnVlIGlmIHVzaW5nIGEgc3ByaXRlc2hlZXQgdG8gYW5pbWF0
ZSB0aGUgcGFydGljbGVzIHRleHR1cmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBHUFVQYXJ0aWNs
ZVN5c3RlbShuYW1lLCBvcHRpb25zLCBzY2VuZSwgaXNBbmltYXRpb25TaGVldEVuYWJsZWQpIHsK
KyAgICAgICAgaWYgKGlzQW5pbWF0aW9uU2hlZXRFbmFibGVkID09PSB2b2lkIDApIHsgaXNBbmlt
YXRpb25TaGVldEVuYWJsZWQgPSBmYWxzZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIu
Y2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGxh
eWVyIG1hc2sgd2UgYXJlIHJlbmRlcmluZyB0aGUgcGFydGljbGVzIHRocm91Z2guCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5sYXllck1hc2sgPSAweDBGRkZGRkZGOworICAgICAgICBfdGhp
cy5fYWNjdW11bGF0ZWRDb3VudCA9IDA7CisgICAgICAgIF90aGlzLl90YXJnZXRJbmRleCA9IDA7
CisgICAgICAgIF90aGlzLl9jdXJyZW50UmVuZGVySWQgPSAtMTsKKyAgICAgICAgX3RoaXMuX3N0
YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX3N0b3BwZWQgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuX3RpbWVEZWx0YSA9IDA7CisgICAgICAgIF90aGlzLl9hY3R1YWxGcmFtZSA9IDA7Cisg
ICAgICAgIF90aGlzLl9yYXdUZXh0dXJlV2lkdGggPSAyNTY7CisgICAgICAgIC8qKgorICAgICAg
ICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgZGlzcG9zZWQuCisgICAg
ICAgICovCisgICAgICAgIF90aGlzLm9uRGlzcG9zZU9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEZvcmNlcyB0aGUgcGFydGljbGUgdG8gd3JpdGUgdGhlaXIg
ZGVwdGggaW5mb3JtYXRpb24gdG8gdGhlIGRlcHRoIGJ1ZmZlci4gVGhpcyBjYW4gaGVscCBwcmV2
ZW50aW5nIG90aGVyIGRyYXcgY2FsbHMKKyAgICAgICAgICogdG8gb3ZlcnJpZGUgdGhlIHBhcnRp
Y2xlcy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmZvcmNlRGVwdGhXcml0ZSA9IGZhbHNl
OworICAgICAgICBfdGhpcy5fcHJlV2FybURvbmUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX3Nj
ZW5lID0gc2NlbmUgfHwgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE3X19bIkVuZ2luZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZTsKKyAgICAgICAgLy8gU2V0
dXAgdGhlIGRlZmF1bHQgcHJvY2Vzc2luZyBjb25maWd1cmF0aW9uIHRvIHRoZSBzY2VuZS4KKyAg
ICAgICAgX3RoaXMuX2F0dGFjaEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24obnVsbCk7Cisg
ICAgICAgIF90aGlzLl9lbmdpbmUgPSBfdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAg
IGlmICghb3B0aW9ucy5yYW5kb21UZXh0dXJlU2l6ZSkgeworICAgICAgICAgICAgZGVsZXRlIG9w
dGlvbnMucmFuZG9tVGV4dHVyZVNpemU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGZ1bGxPcHRp
b25zID0gdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19hc3NpZ24iXSh7IGNh
cGFjaXR5OiA1MDAwMCwgcmFuZG9tVGV4dHVyZVNpemU6IF90aGlzLl9lbmdpbmUuZ2V0Q2Fwcygp
Lm1heFRleHR1cmVTaXplIH0sIG9wdGlvbnMpOworICAgICAgICB2YXIgb3B0aW9uc0FzTnVtYmVy
ID0gb3B0aW9uczsKKyAgICAgICAgaWYgKGlzRmluaXRlKG9wdGlvbnNBc051bWJlcikpIHsKKyAg
ICAgICAgICAgIGZ1bGxPcHRpb25zLmNhcGFjaXR5ID0gb3B0aW9uc0FzTnVtYmVyOworICAgICAg
ICB9CisgICAgICAgIF90aGlzLl9jYXBhY2l0eSA9IGZ1bGxPcHRpb25zLmNhcGFjaXR5OworICAg
ICAgICBfdGhpcy5fYWN0aXZlQ291bnQgPSBmdWxsT3B0aW9ucy5jYXBhY2l0eTsKKyAgICAgICAg
X3RoaXMuX2N1cnJlbnRBY3RpdmVDb3VudCA9IDA7CisgICAgICAgIF90aGlzLl9pc0FuaW1hdGlv
blNoZWV0RW5hYmxlZCA9IGlzQW5pbWF0aW9uU2hlZXRFbmFibGVkOworICAgICAgICBfdGhpcy5f
c2NlbmUucGFydGljbGVTeXN0ZW1zLnB1c2goX3RoaXMpOworICAgICAgICBfdGhpcy5fdXBkYXRl
RWZmZWN0T3B0aW9ucyA9IHsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFsicG9zaXRpb24iLCAi
YWdlIiwgImxpZmUiLCAic2VlZCIsICJzaXplIiwgImNvbG9yIiwgImRpcmVjdGlvbiIsICJpbml0
aWFsRGlyZWN0aW9uIiwgImFuZ2xlIiwgImNlbGxJbmRleCIsICJjZWxsU3RhcnRPZmZzZXQiLCAi
bm9pc2VDb29yZGluYXRlczEiLCAibm9pc2VDb29yZGluYXRlczIiXSwKKyAgICAgICAgICAgIHVu
aWZvcm1zTmFtZXM6IFsiY3VycmVudENvdW50IiwgInRpbWVEZWx0YSIsICJlbWl0dGVyV00iLCAi
bGlmZVRpbWUiLCAiY29sb3IxIiwgImNvbG9yMiIsICJzaXplUmFuZ2UiLCAic2NhbGVSYW5nZSIs
ICJncmF2aXR5IiwgImVtaXRQb3dlciIsCisgICAgICAgICAgICAgICAgImRpcmVjdGlvbjEiLCAi
ZGlyZWN0aW9uMiIsICJtaW5FbWl0Qm94IiwgIm1heEVtaXRCb3giLCAicmFkaXVzIiwgImRpcmVj
dGlvblJhbmRvbWl6ZXIiLCAiaGVpZ2h0IiwgImNvbmVBbmdsZSIsICJzdG9wRmFjdG9yIiwKKyAg
ICAgICAgICAgICAgICAiYW5nbGVSYW5nZSIsICJyYWRpdXNSYW5nZSIsICJjZWxsSW5mb3MiLCAi
bm9pc2VTdHJlbmd0aCIsICJsaW1pdFZlbG9jaXR5RGFtcGluZyJdLAorICAgICAgICAgICAgdW5p
Zm9ybUJ1ZmZlcnNOYW1lczogW10sCisgICAgICAgICAgICBzYW1wbGVyczogWyJyYW5kb21TYW1w
bGVyIiwgInJhbmRvbVNhbXBsZXIyIiwgInNpemVHcmFkaWVudFNhbXBsZXIiLCAiYW5ndWxhclNw
ZWVkR3JhZGllbnRTYW1wbGVyIiwgInZlbG9jaXR5R3JhZGllbnRTYW1wbGVyIiwgImxpbWl0VmVs
b2NpdHlHcmFkaWVudFNhbXBsZXIiLCAibm9pc2VTYW1wbGVyIiwgImRyYWdHcmFkaWVudFNhbXBs
ZXIiXSwKKyAgICAgICAgICAgIGRlZmluZXM6ICIiLAorICAgICAgICAgICAgZmFsbGJhY2tzOiBu
dWxsLAorICAgICAgICAgICAgb25Db21waWxlZDogbnVsbCwKKyAgICAgICAgICAgIG9uRXJyb3I6
IG51bGwsCisgICAgICAgICAgICBpbmRleFBhcmFtZXRlcnM6IG51bGwsCisgICAgICAgICAgICBt
YXhTaW11bHRhbmVvdXNMaWdodHM6IDAsCisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzOiBbXQorICAgICAgICB9OworICAgICAgICBfdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBl
ID0gbmV3IF9QYXJ0aWNsZXNfRW1pdHRlclR5cGVzX2JveFBhcnRpY2xlRW1pdHRlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJCb3hQYXJ0aWNsZUVtaXR0ZXIiXSgpOworICAgICAgICAv
LyBSYW5kb20gZGF0YQorICAgICAgICB2YXIgbWF4VGV4dHVyZVNpemUgPSBNYXRoLm1pbihfdGhp
cy5fZW5naW5lLmdldENhcHMoKS5tYXhUZXh0dXJlU2l6ZSwgZnVsbE9wdGlvbnMucmFuZG9tVGV4
dHVyZVNpemUpOworICAgICAgICB2YXIgZCA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG1heFRleHR1cmVTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGQucHVzaChNYXRoLnJhbmRv
bSgpKTsKKyAgICAgICAgICAgIGQucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIGQu
cHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIGQucHVzaChNYXRoLnJhbmRvbSgpKTsK
KyAgICAgICAgfQorICAgICAgICBfdGhpcy5fcmFuZG9tVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxz
X1RleHR1cmVzX3Jhd1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIlJhd1Rl
eHR1cmUiXShuZXcgRmxvYXQzMkFycmF5KGQpLCBtYXhUZXh0dXJlU2l6ZSwgMSwgX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJDb25zdGFudHMiXS5URVhU
VVJFRk9STUFUX1JHQkEsIF90aGlzLl9zY2VuZSwgZmFsc2UsIGZhbHNlLCBfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkNvbnN0YW50cyJdLlRFWFRVUkVf
TkVBUkVTVF9TQU1QTElOR01PREUsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfRkxPQVQpOworICAgICAgICBf
dGhpcy5fcmFuZG9tVGV4dHVyZS53cmFwVSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siVGV4dHVyZSJdLldSQVBfQUREUkVTU01PREU7
CisgICAgICAgIF90aGlzLl9yYW5kb21UZXh0dXJlLndyYXBWID0gX01hdGVyaWFsc19UZXh0dXJl
c190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJUZXh0dXJlIl0uV1JBUF9B
RERSRVNTTU9ERTsKKyAgICAgICAgZCA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG1heFRleHR1cmVTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGQucHVzaChNYXRoLnJhbmRvbSgp
KTsKKyAgICAgICAgICAgIGQucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIGQucHVz
aChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIGQucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAg
ICAgICAgfQorICAgICAgICBfdGhpcy5fcmFuZG9tVGV4dHVyZTIgPSBuZXcgX01hdGVyaWFsc19U
ZXh0dXJlc19yYXdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJSYXdUZXh0
dXJlIl0obmV3IEZsb2F0MzJBcnJheShkKSwgbWF4VGV4dHVyZVNpemUsIDEsIF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RUZPUk1BVF9SR0JBLCBfdGhpcy5fc2NlbmUsIGZhbHNlLCBmYWxzZSwgX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJDb25zdGFudHMiXS5URVhUVVJFX05F
QVJFU1RfU0FNUExJTkdNT0RFLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE2X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUKTsKKyAgICAgICAgX3Ro
aXMuX3JhbmRvbVRleHR1cmUyLndyYXBVID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJUZXh0dXJlIl0uV1JBUF9BRERSRVNTTU9ERTsK
KyAgICAgICAgX3RoaXMuX3JhbmRvbVRleHR1cmUyLndyYXBWID0gX01hdGVyaWFsc19UZXh0dXJl
c190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJUZXh0dXJlIl0uV1JBUF9B
RERSRVNTTU9ERTsKKyAgICAgICAgX3RoaXMuX3JhbmRvbVRleHR1cmVTaXplID0gbWF4VGV4dHVy
ZVNpemU7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEdQVVBhcnRpY2xlU3lzdGVtLCAiSXNTdXBwb3J0ZWQiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBHUFUgcGFydGljbGVz
IGNhbiBiZSByZW5kZXJlZCBvbiBjdXJyZW50IGJyb3dzZXIKKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCFfRW5naW5lc19lbmdpbmVTdG9y
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRl
ZEVuZ2luZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTdfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZEVuZ2luZS53ZWJHTFZlcnNp
b24gPiAxOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBtYXhp
bXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgYWN0aXZlIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICog
QHJldHVybnMgVGhlIG1heCBudW1iZXIgb2YgYWN0aXZlIHBhcnRpY2xlcy4KKyAgICAgKi8KKyAg
ICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuZ2V0Q2FwYWNpdHkgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLl9jYXBhY2l0eTsKKyAgICB9OworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJhY3RpdmVQYXJ0aWNsZUNv
dW50IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXQgdGhlIG51bWJlciBv
ZiBhY3RpdmUgcGFydGljbGVzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVDb3VudDsKKyAgICAgICAgfSwKKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUNv
dW50ID0gTWF0aC5taW4odmFsdWUsIHRoaXMuX2NhcGFjaXR5KTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgLyoqCisgICAgICogSXMgdGhpcyBzeXN0ZW0gcmVhZHkgdG8gYmUgdXNlZC9yZW5kZXJl
ZAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3lzdGVtIGlzIHJlYWR5CisgICAgICovCisg
ICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmlzUmVhZHkgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGlmICghdGhpcy5fdXBkYXRlRWZmZWN0KSB7CisgICAgICAgICAgICB0aGlzLl9yZWNy
ZWF0ZVVwZGF0ZUVmZmVjdCgpOworICAgICAgICAgICAgdGhpcy5fcmVjcmVhdGVSZW5kZXJFZmZl
Y3QoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IXRoaXMuZW1pdHRlciB8fCAhdGhpcy5fdXBkYXRlRWZmZWN0LmlzUmVhZHkoKSB8fCAhdGhpcy5f
aW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5pc1JlYWR5KCkgfHwgIXRoaXMuX3JlbmRlckVm
ZmVjdC5pc1JlYWR5KCkgfHwgIXRoaXMucGFydGljbGVUZXh0dXJlIHx8ICF0aGlzLnBhcnRpY2xl
VGV4dHVyZS5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgaWYg
dGhlIHN5c3RlbSBoYXMgYmVlbiBzdGFydGVkLiAoTm90ZTogdGhpcyB3aWxsIHN0aWxsIGJlIHRy
dWUgYWZ0ZXIgc3RvcCBpcyBjYWxsZWQpCisgICAgICogQHJldHVybnMgVHJ1ZSBpZiBpdCBoYXMg
YmVlbiBzdGFydGVkLCBvdGhlcndpc2UgZmFsc2UuCisgICAgICovCisgICAgR1BVUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLmlzU3RhcnRlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3N0YXJ0ZWQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTdGFydHMgdGhlIHBhcnRp
Y2xlIHN5c3RlbSBhbmQgYmVnaW5zIHRvIGVtaXQKKyAgICAgKiBAcGFyYW0gZGVsYXkgZGVmaW5l
cyB0aGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSBzdGFydGluZyB0aGUgc3lzdGVtICh0
aGlzLnN0YXJ0RGVsYXkgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3Rl
bS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoZGVsYXkpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSB0aGlzLnN0
YXJ0RGVsYXk7IH0KKyAgICAgICAgaWYgKCF0aGlzLnRhcmdldFN0b3BEdXJhdGlvbiAmJiB0aGlz
Ll9oYXNUYXJnZXRTdG9wRHVyYXRpb25EZXBlbmRhbnRHcmFkaWVudCgpKSB7CisgICAgICAgICAg
ICB0aHJvdyAiUGFydGljbGUgc3lzdGVtIHN0YXJ0ZWQgd2l0aCBhIHRhcmdldFN0b3BEdXJhdGlv
biBkZXBlbmRhbnQgZ3JhZGllbnQgKGVnLiBzdGFydFNpemVHcmFkaWVudHMpIGJ1dCBubyB0YXJn
ZXRTdG9wRHVyYXRpb24gc2V0IjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVsYXkpIHsKKyAg
ICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlz
LnN0YXJ0KDApOworICAgICAgICAgICAgfSwgZGVsYXkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9z
dG9wcGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3ByZVdhcm1Eb25lID0gZmFsc2U7CisgICAg
ICAgIC8vIEFuaW1hdGlvbnMKKyAgICAgICAgaWYgKHRoaXMuYmVnaW5BbmltYXRpb25PblN0YXJ0
ICYmIHRoaXMuYW5pbWF0aW9ucyAmJiB0aGlzLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAg
ICAgICAgICAgdGhpcy5nZXRTY2VuZSgpLmJlZ2luQW5pbWF0aW9uKHRoaXMsIHRoaXMuYmVnaW5B
bmltYXRpb25Gcm9tLCB0aGlzLmJlZ2luQW5pbWF0aW9uVG8sIHRoaXMuYmVnaW5BbmltYXRpb25M
b29wKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU3RvcHMgdGhlIHBhcnRp
Y2xlIHN5c3RlbS4KKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuc3Rv
cCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fc3RvcHBlZCA9IHRydWU7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIGFjdGl2ZSBwYXJ0aWNsZXMKKyAgICAgKi8KKyAg
ICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX3JlbGVhc2VCdWZmZXJzKCk7CisgICAgICAgIHRoaXMuX3JlbGVhc2VWQU9zKCk7
CisgICAgICAgIHRoaXMuX2N1cnJlbnRBY3RpdmVDb3VudCA9IDA7CisgICAgICAgIHRoaXMuX3Rh
cmdldEluZGV4ID0gMDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmlu
ZyAiR1BVUGFydGljbGVTeXN0ZW0iCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbmlu
ZyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlw
ZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiR1BVUGFydGlj
bGVTeXN0ZW0iOworICAgIH07CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9yZW1v
dmVHcmFkaWVudEFuZFRleHR1cmUgPSBmdW5jdGlvbiAoZ3JhZGllbnQsIGdyYWRpZW50cywgdGV4
dHVyZSkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9yZW1vdmVHcmFkaWVudEFuZFRleHR1
cmUuY2FsbCh0aGlzLCBncmFkaWVudCwgZ3JhZGllbnRzLCB0ZXh0dXJlKTsKKyAgICAgICAgdGhp
cy5fcmVsZWFzZUJ1ZmZlcnMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBZGRzIGEgbmV3IGNvbG9yIGdyYWRpZW50CisgICAgICogQHBhcmFtIGdyYWRp
ZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0d2VlbiAwIGFuZCAxKQorICAgICAq
IEBwYXJhbSBjb2xvcjEgZGVmaW5lcyB0aGUgY29sb3IgdG8gYWZmZWN0IHRvIHRoZSBzcGVjaWZp
ZWQgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gY29sb3IyIGRlZmluZXMgYW4gYWRkaXRpb25hbCBj
b2xvciB1c2VkIHRvIGRlZmluZSBhIHJhbmdlIChbY29sb3IsIGNvbG9yMl0pIHdpdGggbWFpbiBj
b2xvciB0byBwaWNrIHRoZSBmaW5hbCBjb2xvciBmcm9tCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJv
dG90eXBlLmFkZENvbG9yR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQsIGNvbG9yMSwgY29s
b3IyKSB7CisgICAgICAgIGlmICghdGhpcy5fY29sb3JHcmFkaWVudHMpIHsKKyAgICAgICAgICAg
IHRoaXMuX2NvbG9yR3JhZGllbnRzID0gW107CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNvbG9y
R3JhZGllbnQgPSBuZXcgX01pc2NfZ3JhZGllbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkNvbG9yR3JhZGllbnQiXSgpOworICAgICAgICBjb2xvckdyYWRpZW50LmdyYWRpZW50ID0g
Z3JhZGllbnQ7CisgICAgICAgIGNvbG9yR3JhZGllbnQuY29sb3IxID0gY29sb3IxOworICAgICAg
ICB0aGlzLl9jb2xvckdyYWRpZW50cy5wdXNoKGNvbG9yR3JhZGllbnQpOworICAgICAgICB0aGlz
Ll9jb2xvckdyYWRpZW50cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICBpZiAo
YS5ncmFkaWVudCA8IGIuZ3JhZGllbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChhLmdyYWRpZW50ID4gYi5ncmFkaWVu
dCkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0pOworICAgICAgICBpZiAodGhpcy5fY29sb3JHcmFkaWVu
dHNUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9jb2xvckdyYWRpZW50c1RleHR1cmUuZGlz
cG9zZSgpOworICAgICAgICAgICAgdGhpcy5fY29sb3JHcmFkaWVudHNUZXh0dXJlID0gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9yZWxlYXNlQnVmZmVycygpOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHNwZWNpZmljIGNvbG9y
IGdyYWRpZW50CisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRv
IHJlbW92ZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAg
ICAqLworICAgIEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5yZW1vdmVDb2xvckdyYWRpZW50
ID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIHRoaXMuX3JlbW92ZUdyYWRpZW50QW5k
VGV4dHVyZShncmFkaWVudCwgdGhpcy5fY29sb3JHcmFkaWVudHMsIHRoaXMuX2NvbG9yR3JhZGll
bnRzVGV4dHVyZSk7CisgICAgICAgIHRoaXMuX2NvbG9yR3JhZGllbnRzVGV4dHVyZSA9IG51bGw7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJv
dG90eXBlLl9hZGRGYWN0b3JHcmFkaWVudCA9IGZ1bmN0aW9uIChmYWN0b3JHcmFkaWVudHMsIGdy
YWRpZW50LCBmYWN0b3IpIHsKKyAgICAgICAgdmFyIHZhbHVlR3JhZGllbnQgPSBuZXcgX01pc2Nf
Z3JhZGllbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkZhY3RvckdyYWRpZW50Il0o
KTsKKyAgICAgICAgdmFsdWVHcmFkaWVudC5ncmFkaWVudCA9IGdyYWRpZW50OworICAgICAgICB2
YWx1ZUdyYWRpZW50LmZhY3RvcjEgPSBmYWN0b3I7CisgICAgICAgIGZhY3RvckdyYWRpZW50cy5w
dXNoKHZhbHVlR3JhZGllbnQpOworICAgICAgICBmYWN0b3JHcmFkaWVudHMuc29ydChmdW5jdGlv
biAoYSwgYikgeworICAgICAgICAgICAgaWYgKGEuZ3JhZGllbnQgPCBiLmdyYWRpZW50KSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoYS5ncmFkaWVudCA+IGIuZ3JhZGllbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy5fcmVsZWFzZUJ1ZmZlcnMoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFk
ZHMgYSBuZXcgc2l6ZSBncmFkaWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRo
ZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0gZmFjdG9y
IGRlZmluZXMgdGhlIHNpemUgZmFjdG9yIHRvIGFmZmVjdCB0byB0aGUgc3BlY2lmaWVkIGdyYWRp
ZW50CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICov
CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFkZFNpemVHcmFkaWVudCA9IGZ1bmN0
aW9uIChncmFkaWVudCwgZmFjdG9yKSB7CisgICAgICAgIGlmICghdGhpcy5fc2l6ZUdyYWRpZW50
cykgeworICAgICAgICAgICAgdGhpcy5fc2l6ZUdyYWRpZW50cyA9IFtdOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2FkZEZhY3RvckdyYWRpZW50KHRoaXMuX3NpemVHcmFkaWVudHMsIGdyYWRp
ZW50LCBmYWN0b3IpOworICAgICAgICBpZiAodGhpcy5fc2l6ZUdyYWRpZW50c1RleHR1cmUpIHsK
KyAgICAgICAgICAgIHRoaXMuX3NpemVHcmFkaWVudHNUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAg
ICAgICAgIHRoaXMuX3NpemVHcmFkaWVudHNUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9yZWxlYXNlQnVmZmVycygpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHNwZWNpZmljIHNpemUgZ3JhZGllbnQKKyAgICAg
KiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAgICog
QHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFy
dGljbGVTeXN0ZW0ucHJvdG90eXBlLnJlbW92ZVNpemVHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFk
aWVudCkgeworICAgICAgICB0aGlzLl9yZW1vdmVHcmFkaWVudEFuZFRleHR1cmUoZ3JhZGllbnQs
IHRoaXMuX3NpemVHcmFkaWVudHMsIHRoaXMuX3NpemVHcmFkaWVudHNUZXh0dXJlKTsKKyAgICAg
ICAgdGhpcy5fc2l6ZUdyYWRpZW50c1RleHR1cmUgPSBudWxsOworICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgYSBuZXcgYW5ndWxhciBzcGVlZCBncmFk
aWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2Ug
KGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0gZmFjdG9yIGRlZmluZXMgdGhlIGFuZ3Vs
YXIgc3BlZWQgdG8gYWZmZWN0IHRvIHRoZSBzcGVjaWZpZWQgZ3JhZGllbnQKKyAgICAgKiBAcmV0
dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNs
ZVN5c3RlbS5wcm90b3R5cGUuYWRkQW5ndWxhclNwZWVkR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3Jh
ZGllbnQsIGZhY3RvcikgeworICAgICAgICBpZiAoIXRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50
cykgeworICAgICAgICAgICAgdGhpcy5fYW5ndWxhclNwZWVkR3JhZGllbnRzID0gW107CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fYW5ndWxhclNwZWVk
R3JhZGllbnRzLCBncmFkaWVudCwgZmFjdG9yKTsKKyAgICAgICAgaWYgKHRoaXMuX2FuZ3VsYXJT
cGVlZEdyYWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2FuZ3VsYXJTcGVlZEdy
YWRpZW50c1RleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fYW5ndWxhclNwZWVk
R3JhZGllbnRzVGV4dHVyZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVsZWFz
ZUJ1ZmZlcnMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZW1vdmUgYSBzcGVjaWZpYyBhbmd1bGFyIHNwZWVkIGdyYWRpZW50CisgICAgICogQHBhcmFt
IGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5z
IHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLworICAgIEdQVVBhcnRpY2xlU3lz
dGVtLnByb3RvdHlwZS5yZW1vdmVBbmd1bGFyU3BlZWRHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFk
aWVudCkgeworICAgICAgICB0aGlzLl9yZW1vdmVHcmFkaWVudEFuZFRleHR1cmUoZ3JhZGllbnQs
IHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50cywgdGhpcy5fYW5ndWxhclNwZWVkR3JhZGllbnRz
VGV4dHVyZSk7CisgICAgICAgIHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50c1RleHR1cmUgPSBu
dWxsOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMg
YSBuZXcgdmVsb2NpdHkgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0
aGUgZ3JhZGllbnQgdG8gdXNlIChiZXR3ZWVuIDAgYW5kIDEpCisgICAgICogQHBhcmFtIGZhY3Rv
ciBkZWZpbmVzIHRoZSB2ZWxvY2l0eSB0byBhZmZlY3QgdG8gdGhlIHNwZWNpZmllZCBncmFkaWVu
dAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLwor
ICAgIEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5hZGRWZWxvY2l0eUdyYWRpZW50ID0gZnVu
Y3Rpb24gKGdyYWRpZW50LCBmYWN0b3IpIHsKKyAgICAgICAgaWYgKCF0aGlzLl92ZWxvY2l0eUdy
YWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fdmVsb2NpdHlHcmFkaWVudHMgPSBbXTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9hZGRGYWN0b3JHcmFkaWVudCh0aGlzLl92ZWxvY2l0eUdy
YWRpZW50cywgZ3JhZGllbnQsIGZhY3Rvcik7CisgICAgICAgIGlmICh0aGlzLl92ZWxvY2l0eUdy
YWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3ZlbG9jaXR5R3JhZGllbnRzVGV4
dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl92ZWxvY2l0eUdyYWRpZW50c1RleHR1
cmUgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3JlbGVhc2VCdWZmZXJzKCk7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlIGEgc3Bl
Y2lmaWMgdmVsb2NpdHkgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0
aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGlj
bGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLnJlbW92
ZVZlbG9jaXR5R3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQpIHsKKyAgICAgICAgdGhpcy5f
cmVtb3ZlR3JhZGllbnRBbmRUZXh0dXJlKGdyYWRpZW50LCB0aGlzLl92ZWxvY2l0eUdyYWRpZW50
cywgdGhpcy5fdmVsb2NpdHlHcmFkaWVudHNUZXh0dXJlKTsKKyAgICAgICAgdGhpcy5fdmVsb2Np
dHlHcmFkaWVudHNUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBZGRzIGEgbmV3IGxpbWl0IHZlbG9jaXR5IGdyYWRpZW50CisgICAg
ICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0d2VlbiAw
IGFuZCAxKQorICAgICAqIEBwYXJhbSBmYWN0b3IgZGVmaW5lcyB0aGUgbGltaXQgdmVsb2NpdHkg
dmFsdWUgdG8gYWZmZWN0IHRvIHRoZSBzcGVjaWZpZWQgZ3JhZGllbnQKKyAgICAgKiBAcmV0dXJu
cyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5
c3RlbS5wcm90b3R5cGUuYWRkTGltaXRWZWxvY2l0eUdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRp
ZW50LCBmYWN0b3IpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRz
KSB7CisgICAgICAgICAgICB0aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzID0gW107CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fbGltaXRWZWxvY2l0
eUdyYWRpZW50cywgZ3JhZGllbnQsIGZhY3Rvcik7CisgICAgICAgIGlmICh0aGlzLl9saW1pdFZl
bG9jaXR5R3JhZGllbnRzVGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5fbGltaXRWZWxvY2l0
eUdyYWRpZW50c1RleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fbGltaXRWZWxv
Y2l0eUdyYWRpZW50c1RleHR1cmUgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Jl
bGVhc2VCdWZmZXJzKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmVtb3ZlIGEgc3BlY2lmaWMgbGltaXQgdmVsb2NpdHkgZ3JhZGllbnQKKyAgICAgKiBA
cGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFydGlj
bGVTeXN0ZW0ucHJvdG90eXBlLnJlbW92ZUxpbWl0VmVsb2NpdHlHcmFkaWVudCA9IGZ1bmN0aW9u
IChncmFkaWVudCkgeworICAgICAgICB0aGlzLl9yZW1vdmVHcmFkaWVudEFuZFRleHR1cmUoZ3Jh
ZGllbnQsIHRoaXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHMsIHRoaXMuX2xpbWl0VmVsb2NpdHlH
cmFkaWVudHNUZXh0dXJlKTsKKyAgICAgICAgdGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50c1Rl
eHR1cmUgPSBudWxsOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEFkZHMgYSBuZXcgZHJhZyBncmFkaWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZp
bmVzIHRoZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0g
ZmFjdG9yIGRlZmluZXMgdGhlIGRyYWcgdmFsdWUgdG8gYWZmZWN0IHRvIHRoZSBzcGVjaWZpZWQg
Z3JhZGllbnQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAg
ICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuYWRkRHJhZ0dyYWRpZW50ID0g
ZnVuY3Rpb24gKGdyYWRpZW50LCBmYWN0b3IpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9kcmFnR3Jh
ZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl9kcmFnR3JhZGllbnRzID0gW107CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fZHJhZ0dyYWRpZW50cywg
Z3JhZGllbnQsIGZhY3Rvcik7CisgICAgICAgIGlmICh0aGlzLl9kcmFnR3JhZGllbnRzVGV4dHVy
ZSkgeworICAgICAgICAgICAgdGhpcy5fZHJhZ0dyYWRpZW50c1RleHR1cmUuZGlzcG9zZSgpOwor
ICAgICAgICAgICAgdGhpcy5fZHJhZ0dyYWRpZW50c1RleHR1cmUgPSBudWxsOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX3JlbGVhc2VCdWZmZXJzKCk7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlIGEgc3BlY2lmaWMgZHJhZyBncmFkaWVudAor
ICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBH
UFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVtb3ZlRHJhZ0dyYWRpZW50ID0gZnVuY3Rpb24g
KGdyYWRpZW50KSB7CisgICAgICAgIHRoaXMuX3JlbW92ZUdyYWRpZW50QW5kVGV4dHVyZShncmFk
aWVudCwgdGhpcy5fZHJhZ0dyYWRpZW50cywgdGhpcy5fZHJhZ0dyYWRpZW50c1RleHR1cmUpOwor
ICAgICAgICB0aGlzLl9kcmFnR3JhZGllbnRzVGV4dHVyZSA9IG51bGw7CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogTm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0
aWNsZVN5c3RlbQorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0
byB1c2UgKGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0gZmFjdG9yIGRlZmluZXMgdGhl
IGVtaXQgcmF0ZSB2YWx1ZSB0byBhZmZlY3QgdG8gdGhlIHNwZWNpZmllZCBncmFkaWVudAorICAg
ICAqIEBwYXJhbSBmYWN0b3IyIGRlZmluZXMgYW4gYWRkaXRpb25hbCBmYWN0b3IgdXNlZCB0byBk
ZWZpbmUgYSByYW5nZSAoW2ZhY3RvciwgZmFjdG9yMl0pIHdpdGggbWFpbiB2YWx1ZSB0byBwaWNr
IHRoZSBmaW5hbCB2YWx1ZSBmcm9tCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGlj
bGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFkZEVt
aXRSYXRlR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQsIGZhY3RvciwgZmFjdG9yMikgewor
ICAgICAgICAvLyBEbyBub3RoaW5nIGFzIGVtaXQgcmF0ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdQ
VVBhcnRpY2xlU3lzdGVtCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogTm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAqIEBwYXJhbSBn
cmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0
aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3Rl
bS5wcm90b3R5cGUucmVtb3ZlRW1pdFJhdGVHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCkg
eworICAgICAgICAvLyBEbyBub3RoaW5nIGFzIGVtaXQgcmF0ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5
IEdQVVBhcnRpY2xlU3lzdGVtCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoq
CisgICAgICogTm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAqIEBwYXJh
bSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQgMSkK
KyAgICAgKiBAcGFyYW0gZmFjdG9yIGRlZmluZXMgdGhlIHN0YXJ0IHNpemUgdmFsdWUgdG8gYWZm
ZWN0IHRvIHRoZSBzcGVjaWZpZWQgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gZmFjdG9yMiBkZWZp
bmVzIGFuIGFkZGl0aW9uYWwgZmFjdG9yIHVzZWQgdG8gZGVmaW5lIGEgcmFuZ2UgKFtmYWN0b3Is
IGZhY3RvcjJdKSB3aXRoIG1haW4gdmFsdWUgdG8gcGljayB0aGUgZmluYWwgdmFsdWUgZnJvbQor
ICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLworICAg
IEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5hZGRTdGFydFNpemVHcmFkaWVudCA9IGZ1bmN0
aW9uIChncmFkaWVudCwgZmFjdG9yLCBmYWN0b3IyKSB7CisgICAgICAgIC8vIERvIG5vdGhpbmcg
YXMgc3RhcnQgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdQVVBhcnRpY2xlU3lzdGVtCisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogTm90IHN1cHBvcnRlZCBi
eSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBn
cmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBz
eXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVtb3ZlU3Rh
cnRTaXplR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQpIHsKKyAgICAgICAgLy8gRG8gbm90
aGluZyBhcyBzdGFydCBzaXplIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR1BVUGFydGljbGVTeXN0ZW0K
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBOb3Qgc3VwcG9y
dGVkIGJ5IEdQVVBhcnRpY2xlU3lzdGVtCisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMg
dGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0d2VlbiAwIGFuZCAxKQorICAgICAqIEBwYXJhbSBtaW4g
ZGVmaW5lcyB0aGUgY29sb3IgcmVtYXAgbWluaW1hbCByYW5nZQorICAgICAqIEBwYXJhbSBtYXgg
ZGVmaW5lcyB0aGUgY29sb3IgcmVtYXAgbWF4aW1hbCByYW5nZQorICAgICAqIEByZXR1cm5zIHRo
ZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLworICAgIEdQVVBhcnRpY2xlU3lzdGVt
LnByb3RvdHlwZS5hZGRDb2xvclJlbWFwR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQsIG1p
biwgbWF4KSB7CisgICAgICAgIC8vIERvIG5vdGhpbmcgYXMgc3RhcnQgc2l6ZSBpcyBub3Qgc3Vw
cG9ydGVkIGJ5IEdQVVBhcnRpY2xlU3lzdGVtCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogTm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAg
ICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQ
YXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVtb3ZlQ29sb3JSZW1hcEdyYWRpZW50ID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAvLyBEbyBub3RoaW5nIGFzIHN0YXJ0IHNpemUgaXMgbm90IHN1cHBv
cnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIE5vdCBzdXBwb3J0ZWQgYnkgR1BVUGFydGljbGVTeXN0ZW0KKyAgICAg
KiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNlIChiZXR3ZWVuIDAg
YW5kIDEpCisgICAgICogQHBhcmFtIG1pbiBkZWZpbmVzIHRoZSBhbHBoYSByZW1hcCBtaW5pbWFs
IHJhbmdlCisgICAgICogQHBhcmFtIG1heCBkZWZpbmVzIHRoZSBhbHBoYSByZW1hcCBtYXhpbWFs
IHJhbmdlCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAg
ICovCisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFkZEFscGhhUmVtYXBHcmFkaWVu
dCA9IGZ1bmN0aW9uIChncmFkaWVudCwgbWluLCBtYXgpIHsKKyAgICAgICAgLy8gRG8gbm90aGlu
ZyBhcyBzdGFydCBzaXplIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR1BVUGFydGljbGVTeXN0ZW0KKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBOb3Qgc3VwcG9ydGVk
IGJ5IEdQVVBhcnRpY2xlU3lzdGVtCisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhl
IGdyYWRpZW50IHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xl
IHN5c3RlbQorICAgICAqLworICAgIEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5yZW1vdmVB
bHBoYVJlbWFwR3JhZGllbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIERvIG5vdGhpbmcg
YXMgc3RhcnQgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdQVVBhcnRpY2xlU3lzdGVtCisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogTm90IHN1cHBvcnRlZCBi
eSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBn
cmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0gY29sb3IgZGVm
aW5lcyB0aGUgY29sb3IgdG8gYWZmZWN0IHRvIHRoZSBzcGVjaWZpZWQgZ3JhZGllbnQKKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQ
YXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuYWRkUmFtcEdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRp
ZW50LCBjb2xvcikgeworICAgICAgICAvL05vdCBzdXBwb3J0ZWQgYnkgR1BVUGFydGljbGVTeXN0
ZW0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBOb3Qgc3Vw
cG9ydGVkIGJ5IEdQVVBhcnRpY2xlU3lzdGVtCisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmlu
ZXMgdGhlIGdyYWRpZW50IHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBh
cnRpY2xlIHN5c3RlbQorICAgICAqLworICAgIEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5y
ZW1vdmVSYW1wR3JhZGllbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vTm90IHN1cHBvcnRl
ZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAg
IC8qKgorICAgICAqIE5vdCBzdXBwb3J0ZWQgYnkgR1BVUGFydGljbGVTeXN0ZW0KKyAgICAgKiBA
cmV0dXJucyB0aGUgbGlzdCBvZiByYW1wIGdyYWRpZW50cworICAgICAqLworICAgIEdQVVBhcnRp
Y2xlU3lzdGVtLnByb3RvdHlwZS5nZXRSYW1wR3JhZGllbnRzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHUFVQ
YXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJ1c2VSYW1wR3JhZGllbnRzIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogTm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAg
ICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCByYW1wIGdyYWRpZW50
cyBtdXN0IGJlIHVzZWQKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
YmFieWxvbjEwMS9wYXJ0aWNsZXMjcmFtcC1ncmFkaWVudHMKKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgLy9Ob3Qgc3VwcG9ydGVkIGJ5IEdQVVBh
cnRpY2xlU3lzdGVtCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICAvL05vdCBzdXBwb3J0ZWQg
YnkgR1BVUGFydGljbGVTeXN0ZW0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICog
Tm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAqIEBwYXJhbSBncmFkaWVu
dCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBA
cGFyYW0gZmFjdG9yIGRlZmluZXMgdGhlIGxpZmUgdGltZSBmYWN0b3IgdG8gYWZmZWN0IHRvIHRo
ZSBzcGVjaWZpZWQgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gZmFjdG9yMiBkZWZpbmVzIGFuIGFk
ZGl0aW9uYWwgZmFjdG9yIHVzZWQgdG8gZGVmaW5lIGEgcmFuZ2UgKFtmYWN0b3IsIGZhY3RvcjJd
KSB3aXRoIG1haW4gdmFsdWUgdG8gcGljayB0aGUgZmluYWwgdmFsdWUgZnJvbQorICAgICAqIEBy
ZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLworICAgIEdQVVBhcnRp
Y2xlU3lzdGVtLnByb3RvdHlwZS5hZGRMaWZlVGltZUdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRp
ZW50LCBmYWN0b3IsIGZhY3RvcjIpIHsKKyAgICAgICAgLy9Ob3Qgc3VwcG9ydGVkIGJ5IEdQVVBh
cnRpY2xlU3lzdGVtCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAg
ICogTm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAqIEBwYXJhbSBncmFk
aWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5w
cm90b3R5cGUucmVtb3ZlTGlmZVRpbWVHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCkgewor
ICAgICAgICAvL05vdCBzdXBwb3J0ZWQgYnkgR1BVUGFydGljbGVTeXN0ZW0KKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX3Jlc2V0
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9yZWxlYXNlQnVmZmVycygpOworICAgIH07
CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9jcmVhdGVVcGRhdGVWQU8gPSBmdW5j
dGlvbiAoc291cmNlKSB7CisgICAgICAgIHZhciB1cGRhdGVWZXJ0ZXhCdWZmZXJzID0ge307Cisg
ICAgICAgIHVwZGF0ZVZlcnRleEJ1ZmZlcnNbInBvc2l0aW9uIl0gPSBzb3VyY2UuY3JlYXRlVmVy
dGV4QnVmZmVyKCJwb3NpdGlvbiIsIDAsIDMpOworICAgICAgICB1cGRhdGVWZXJ0ZXhCdWZmZXJz
WyJhZ2UiXSA9IHNvdXJjZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoImFnZSIsIDMsIDEpOworICAgICAg
ICB1cGRhdGVWZXJ0ZXhCdWZmZXJzWyJsaWZlIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVy
KCJsaWZlIiwgNCwgMSk7CisgICAgICAgIHVwZGF0ZVZlcnRleEJ1ZmZlcnNbInNlZWQiXSA9IHNv
dXJjZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoInNlZWQiLCA1LCA0KTsKKyAgICAgICAgdXBkYXRlVmVy
dGV4QnVmZmVyc1sic2l6ZSJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1ZmZlcigic2l6ZSIsIDks
IDMpOworICAgICAgICB2YXIgb2Zmc2V0ID0gMTI7CisgICAgICAgIGlmICghdGhpcy5fY29sb3JH
cmFkaWVudHNUZXh0dXJlKSB7CisgICAgICAgICAgICB1cGRhdGVWZXJ0ZXhCdWZmZXJzWyJjb2xv
ciJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1ZmZlcigiY29sb3IiLCBvZmZzZXQsIDQpOworICAg
ICAgICAgICAgb2Zmc2V0ICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlVmVydGV4QnVm
ZmVyc1siZGlyZWN0aW9uIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJkaXJlY3Rpb24i
LCBvZmZzZXQsIDMpOworICAgICAgICBvZmZzZXQgKz0gMzsKKyAgICAgICAgaWYgKCF0aGlzLl9p
c0JpbGxib2FyZEJhc2VkKSB7CisgICAgICAgICAgICB1cGRhdGVWZXJ0ZXhCdWZmZXJzWyJpbml0
aWFsRGlyZWN0aW9uIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJpbml0aWFsRGlyZWN0
aW9uIiwgb2Zmc2V0LCAzKTsKKyAgICAgICAgICAgIG9mZnNldCArPSAzOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHNUZXh0dXJlKSB7CisgICAgICAg
ICAgICB1cGRhdGVWZXJ0ZXhCdWZmZXJzWyJhbmdsZSJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1
ZmZlcigiYW5nbGUiLCBvZmZzZXQsIDEpOworICAgICAgICAgICAgb2Zmc2V0ICs9IDE7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1cGRhdGVWZXJ0ZXhCdWZmZXJzWyJh
bmdsZSJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1ZmZlcigiYW5nbGUiLCBvZmZzZXQsIDIpOwor
ICAgICAgICAgICAgb2Zmc2V0ICs9IDI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2lz
QW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICB1cGRhdGVWZXJ0ZXhCdWZmZXJz
WyJjZWxsSW5kZXgiXSA9IHNvdXJjZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoImNlbGxJbmRleCIsIG9m
ZnNldCwgMSk7CisgICAgICAgICAgICBvZmZzZXQgKz0gMTsKKyAgICAgICAgICAgIGlmICh0aGlz
LnNwcml0ZVJhbmRvbVN0YXJ0Q2VsbCkgeworICAgICAgICAgICAgICAgIHVwZGF0ZVZlcnRleEJ1
ZmZlcnNbImNlbGxTdGFydE9mZnNldCJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1ZmZlcigiY2Vs
bFN0YXJ0T2Zmc2V0Iiwgb2Zmc2V0LCAxKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5ub2lzZVRleHR1cmUp
IHsKKyAgICAgICAgICAgIHVwZGF0ZVZlcnRleEJ1ZmZlcnNbIm5vaXNlQ29vcmRpbmF0ZXMxIl0g
PSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJub2lzZUNvb3JkaW5hdGVzMSIsIG9mZnNldCwg
Myk7CisgICAgICAgICAgICBvZmZzZXQgKz0gMzsKKyAgICAgICAgICAgIHVwZGF0ZVZlcnRleEJ1
ZmZlcnNbIm5vaXNlQ29vcmRpbmF0ZXMyIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJu
b2lzZUNvb3JkaW5hdGVzMiIsIG9mZnNldCwgMyk7CisgICAgICAgICAgICBvZmZzZXQgKz0gMzsK
KyAgICAgICAgfQorICAgICAgICB2YXIgdmFvID0gdGhpcy5fZW5naW5lLnJlY29yZFZlcnRleEFy
cmF5T2JqZWN0KHVwZGF0ZVZlcnRleEJ1ZmZlcnMsIG51bGwsIHRoaXMuX3VwZGF0ZUVmZmVjdCk7
CisgICAgICAgIHRoaXMuX2VuZ2luZS5iaW5kQXJyYXlCdWZmZXIobnVsbCk7CisgICAgICAgIHJl
dHVybiB2YW87CisgICAgfTsKKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX2NyZWF0
ZVJlbmRlclZBTyA9IGZ1bmN0aW9uIChzb3VyY2UsIHNwcml0ZVNvdXJjZSkgeworICAgICAgICB2
YXIgcmVuZGVyVmVydGV4QnVmZmVycyA9IHt9OworICAgICAgICByZW5kZXJWZXJ0ZXhCdWZmZXJz
WyJwb3NpdGlvbiJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1ZmZlcigicG9zaXRpb24iLCAwLCAz
LCB0aGlzLl9hdHRyaWJ1dGVzU3RyaWRlU2l6ZSwgdHJ1ZSk7CisgICAgICAgIHJlbmRlclZlcnRl
eEJ1ZmZlcnNbImFnZSJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1ZmZlcigiYWdlIiwgMywgMSwg
dGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUsIHRydWUpOworICAgICAgICByZW5kZXJWZXJ0ZXhC
dWZmZXJzWyJsaWZlIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJsaWZlIiwgNCwgMSwg
dGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUsIHRydWUpOworICAgICAgICByZW5kZXJWZXJ0ZXhC
dWZmZXJzWyJzaXplIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJzaXplIiwgOSwgMywg
dGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUsIHRydWUpOworICAgICAgICB2YXIgb2Zmc2V0ID0g
MTI7CisgICAgICAgIGlmICghdGhpcy5fY29sb3JHcmFkaWVudHNUZXh0dXJlKSB7CisgICAgICAg
ICAgICByZW5kZXJWZXJ0ZXhCdWZmZXJzWyJjb2xvciJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1
ZmZlcigiY29sb3IiLCBvZmZzZXQsIDQsIHRoaXMuX2F0dHJpYnV0ZXNTdHJpZGVTaXplLCB0cnVl
KTsKKyAgICAgICAgICAgIG9mZnNldCArPSA0OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
LmJpbGxib2FyZE1vZGUgPT09IF9wYXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJQYXJ0aWNsZVN5c3RlbSJdLkJJTExCT0FSRE1PREVfU1RSRVRDSEVEKSB7CisgICAg
ICAgICAgICByZW5kZXJWZXJ0ZXhCdWZmZXJzWyJkaXJlY3Rpb24iXSA9IHNvdXJjZS5jcmVhdGVW
ZXJ0ZXhCdWZmZXIoImRpcmVjdGlvbiIsIG9mZnNldCwgMywgdGhpcy5fYXR0cmlidXRlc1N0cmlk
ZVNpemUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIG9mZnNldCArPSAzOyAvLyBEaXJlY3Rp
b24KKyAgICAgICAgaWYgKCF0aGlzLl9pc0JpbGxib2FyZEJhc2VkKSB7CisgICAgICAgICAgICBy
ZW5kZXJWZXJ0ZXhCdWZmZXJzWyJpbml0aWFsRGlyZWN0aW9uIl0gPSBzb3VyY2UuY3JlYXRlVmVy
dGV4QnVmZmVyKCJpbml0aWFsRGlyZWN0aW9uIiwgb2Zmc2V0LCAzLCB0aGlzLl9hdHRyaWJ1dGVz
U3RyaWRlU2l6ZSwgdHJ1ZSk7CisgICAgICAgICAgICBvZmZzZXQgKz0gMzsKKyAgICAgICAgfQor
ICAgICAgICByZW5kZXJWZXJ0ZXhCdWZmZXJzWyJhbmdsZSJdID0gc291cmNlLmNyZWF0ZVZlcnRl
eEJ1ZmZlcigiYW5nbGUiLCBvZmZzZXQsIDEsIHRoaXMuX2F0dHJpYnV0ZXNTdHJpZGVTaXplLCB0
cnVlKTsKKyAgICAgICAgaWYgKHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50c1RleHR1cmUpIHsK
KyAgICAgICAgICAgIG9mZnNldCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgb2Zmc2V0ICs9IDI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0
aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICByZW5kZXJWZXJ0ZXhCdWZmZXJzWyJjZWxs
SW5kZXgiXSA9IHNvdXJjZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoImNlbGxJbmRleCIsIG9mZnNldCwg
MSwgdGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUsIHRydWUpOworICAgICAgICAgICAgb2Zmc2V0
ICs9IDE7CisgICAgICAgICAgICBpZiAodGhpcy5zcHJpdGVSYW5kb21TdGFydENlbGwpIHsKKyAg
ICAgICAgICAgICAgICByZW5kZXJWZXJ0ZXhCdWZmZXJzWyJjZWxsU3RhcnRPZmZzZXQiXSA9IHNv
dXJjZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoImNlbGxTdGFydE9mZnNldCIsIG9mZnNldCwgMSwgdGhp
cy5fYXR0cmlidXRlc1N0cmlkZVNpemUsIHRydWUpOworICAgICAgICAgICAgICAgIG9mZnNldCAr
PSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLm5vaXNlVGV4
dHVyZSkgeworICAgICAgICAgICAgcmVuZGVyVmVydGV4QnVmZmVyc1sibm9pc2VDb29yZGluYXRl
czEiXSA9IHNvdXJjZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoIm5vaXNlQ29vcmRpbmF0ZXMxIiwgb2Zm
c2V0LCAzLCB0aGlzLl9hdHRyaWJ1dGVzU3RyaWRlU2l6ZSwgdHJ1ZSk7CisgICAgICAgICAgICBv
ZmZzZXQgKz0gMzsKKyAgICAgICAgICAgIHJlbmRlclZlcnRleEJ1ZmZlcnNbIm5vaXNlQ29vcmRp
bmF0ZXMyIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJub2lzZUNvb3JkaW5hdGVzMiIs
IG9mZnNldCwgMywgdGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUsIHRydWUpOworICAgICAgICAg
ICAgb2Zmc2V0ICs9IDM7CisgICAgICAgIH0KKyAgICAgICAgcmVuZGVyVmVydGV4QnVmZmVyc1si
b2Zmc2V0Il0gPSBzcHJpdGVTb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJvZmZzZXQiLCAwLCAy
KTsKKyAgICAgICAgcmVuZGVyVmVydGV4QnVmZmVyc1sidXYiXSA9IHNwcml0ZVNvdXJjZS5jcmVh
dGVWZXJ0ZXhCdWZmZXIoInV2IiwgMiwgMik7CisgICAgICAgIHZhciB2YW8gPSB0aGlzLl9lbmdp
bmUucmVjb3JkVmVydGV4QXJyYXlPYmplY3QocmVuZGVyVmVydGV4QnVmZmVycywgbnVsbCwgdGhp
cy5fcmVuZGVyRWZmZWN0KTsKKyAgICAgICAgdGhpcy5fZW5naW5lLmJpbmRBcnJheUJ1ZmZlcihu
dWxsKTsKKyAgICAgICAgcmV0dXJuIHZhbzsKKyAgICB9OworICAgIEdQVVBhcnRpY2xlU3lzdGVt
LnByb3RvdHlwZS5faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIChmb3JjZSkgeworICAgICAgICBpZiAo
Zm9yY2UgPT09IHZvaWQgMCkgeyBmb3JjZSA9IGZhbHNlOyB9CisgICAgICAgIGlmICh0aGlzLl9i
dWZmZXIwICYmICFmb3JjZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgdmFyIGRh
dGEgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUgPSAy
MTsKKyAgICAgICAgdGhpcy5fdGFyZ2V0SW5kZXggPSAwOworICAgICAgICBpZiAoIXRoaXMuaXNC
aWxsYm9hcmRCYXNlZCkgeworICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUg
Kz0gMzsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY29sb3JHcmFkaWVudHNUZXh0dXJl
KSB7CisgICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzU3RyaWRlU2l6ZSAtPSA0OworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHNUZXh0dXJlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzU3RyaWRlU2l6ZSAtPSAxOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGlvblNoZWV0RW5hYmxlZCkgeworICAgICAgICAgICAg
dGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUgKz0gMTsKKyAgICAgICAgICAgIGlmICh0aGlzLnNw
cml0ZVJhbmRvbVN0YXJ0Q2VsbCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXNT
dHJpZGVTaXplICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMubm9pc2VUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzU3RyaWRlU2l6
ZSArPSA2OworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIHBhcnRpY2xlSW5kZXggPSAwOyBw
YXJ0aWNsZUluZGV4IDwgdGhpcy5fY2FwYWNpdHk7IHBhcnRpY2xlSW5kZXgrKykgeworICAgICAg
ICAgICAgLy8gcG9zaXRpb24KKyAgICAgICAgICAgIGRhdGEucHVzaCgwLjApOworICAgICAgICAg
ICAgZGF0YS5wdXNoKDAuMCk7CisgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAgICAg
ICAgIC8vIEFnZSBhbmQgbGlmZQorICAgICAgICAgICAgZGF0YS5wdXNoKDAuMCk7IC8vIGNyZWF0
ZSB0aGUgcGFydGljbGUgYXMgYSBkZWFkIG9uZSB0byBjcmVhdGUgYSBuZXcgb25lIGF0IHN0YXJ0
CisgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAgICAgICAgIC8vIFNlZWQKKyAgICAg
ICAgICAgIGRhdGEucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIGRhdGEucHVzaChN
YXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIGRhdGEucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAg
ICAgICAgICAgIGRhdGEucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIC8vIFNpemUK
KyAgICAgICAgICAgIGRhdGEucHVzaCgwLjApOworICAgICAgICAgICAgZGF0YS5wdXNoKDAuMCk7
CisgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5fY29s
b3JHcmFkaWVudHNUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgLy8gY29sb3IKKyAgICAgICAg
ICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsK
KyAgICAgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAgICAgICAgICAgICBkYXRhLnB1
c2goMC4wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGRpcmVjdGlvbgorICAgICAg
ICAgICAgZGF0YS5wdXNoKDAuMCk7CisgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAg
ICAgICAgIGRhdGEucHVzaCgwLjApOworICAgICAgICAgICAgaWYgKCF0aGlzLmlzQmlsbGJvYXJk
QmFzZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBpbml0aWFsRGlyZWN0aW9uCisgICAgICAgICAg
ICAgICAgZGF0YS5wdXNoKDAuMCk7CisgICAgICAgICAgICAgICAgZGF0YS5wdXNoKDAuMCk7Cisg
ICAgICAgICAgICAgICAgZGF0YS5wdXNoKDAuMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBhbmdsZQorICAgICAgICAgICAgZGF0YS5wdXNoKDAuMCk7CisgICAgICAgICAgICBpZiAo
IXRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBk
YXRhLnB1c2goMC4wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9pc0Fu
aW1hdGlvblNoZWV0RW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGRhdGEucHVzaCgwLjApOwor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLnNwcml0ZVJhbmRvbVN0YXJ0Q2VsbCkgeworICAgICAg
ICAgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5ub2lzZVRleHR1cmUpIHsgLy8gUmFuZG9tIGNv
b3JkaW5hdGVzIGZvciByZWFkaW5nIGludG8gbm9pc2UgdGV4dHVyZQorICAgICAgICAgICAgICAg
IGRhdGEucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgICAgICBkYXRhLnB1c2goTWF0
aC5yYW5kb20oKSk7CisgICAgICAgICAgICAgICAgZGF0YS5wdXNoKE1hdGgucmFuZG9tKCkpOwor
ICAgICAgICAgICAgICAgIGRhdGEucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgICAg
ICBkYXRhLnB1c2goTWF0aC5yYW5kb20oKSk7CisgICAgICAgICAgICAgICAgZGF0YS5wdXNoKE1h
dGgucmFuZG9tKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFNwcml0
ZSBkYXRhCisgICAgICAgIHZhciBzcHJpdGVEYXRhID0gbmV3IEZsb2F0MzJBcnJheShbMC41LCAw
LjUsIDEsIDEsCisgICAgICAgICAgICAtMC41LCAwLjUsIDAsIDEsCisgICAgICAgICAgICAtMC41
LCAtMC41LCAwLCAwLAorICAgICAgICAgICAgMC41LCAtMC41LCAxLCAwXSk7CisgICAgICAgIC8v
IEJ1ZmZlcnMKKyAgICAgICAgdGhpcy5fYnVmZmVyMCA9IG5ldyBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJCdWZmZXIiXShlbmdpbmUsIGRhdGEsIGZhbHNlLCB0
aGlzLl9hdHRyaWJ1dGVzU3RyaWRlU2l6ZSk7CisgICAgICAgIHRoaXMuX2J1ZmZlcjEgPSBuZXcg
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQnVmZmVyIl0oZW5n
aW5lLCBkYXRhLCBmYWxzZSwgdGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUpOworICAgICAgICB0
aGlzLl9zcHJpdGVCdWZmZXIgPSBuZXcgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siQnVmZmVyIl0oZW5naW5lLCBzcHJpdGVEYXRhLCBmYWxzZSwgNCk7CisgICAg
ICAgIC8vIFVwZGF0ZSBWQU8KKyAgICAgICAgdGhpcy5fdXBkYXRlVkFPID0gW107CisgICAgICAg
IHRoaXMuX3VwZGF0ZVZBTy5wdXNoKHRoaXMuX2NyZWF0ZVVwZGF0ZVZBTyh0aGlzLl9idWZmZXIw
KSk7CisgICAgICAgIHRoaXMuX3VwZGF0ZVZBTy5wdXNoKHRoaXMuX2NyZWF0ZVVwZGF0ZVZBTyh0
aGlzLl9idWZmZXIxKSk7CisgICAgICAgIC8vIFJlbmRlciBWQU8KKyAgICAgICAgdGhpcy5fcmVu
ZGVyVkFPID0gW107CisgICAgICAgIHRoaXMuX3JlbmRlclZBTy5wdXNoKHRoaXMuX2NyZWF0ZVJl
bmRlclZBTyh0aGlzLl9idWZmZXIxLCB0aGlzLl9zcHJpdGVCdWZmZXIpKTsKKyAgICAgICAgdGhp
cy5fcmVuZGVyVkFPLnB1c2godGhpcy5fY3JlYXRlUmVuZGVyVkFPKHRoaXMuX2J1ZmZlcjAsIHRo
aXMuX3Nwcml0ZUJ1ZmZlcikpOworICAgICAgICAvLyBMaW5rcworICAgICAgICB0aGlzLl9zb3Vy
Y2VCdWZmZXIgPSB0aGlzLl9idWZmZXIwOworICAgICAgICB0aGlzLl90YXJnZXRCdWZmZXIgPSB0
aGlzLl9idWZmZXIxOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBHUFVQYXJ0aWNs
ZVN5c3RlbS5wcm90b3R5cGUuX3JlY3JlYXRlVXBkYXRlRWZmZWN0ID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgZGVmaW5lcyA9IHRoaXMucGFydGljbGVFbWl0dGVyVHlwZSA/IHRoaXMucGFy
dGljbGVFbWl0dGVyVHlwZS5nZXRFZmZlY3REZWZpbmVzKCkgOiAiIjsKKyAgICAgICAgaWYgKHRo
aXMuX2lzQmlsbGJvYXJkQmFzZWQpIHsKKyAgICAgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmlu
ZSBCSUxMQk9BUkQiOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9jb2xvckdyYWRpZW50
c1RleHR1cmUpIHsKKyAgICAgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmluZSBDT0xPUkdSQURJ
RU5UUyI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3NpemVHcmFkaWVudHNUZXh0dXJl
KSB7CisgICAgICAgICAgICBkZWZpbmVzICs9ICJcbiNkZWZpbmUgU0laRUdSQURJRU5UUyI7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50c1RleHR1cmUp
IHsKKyAgICAgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmluZSBBTkdVTEFSU1BFRURHUkFESUVO
VFMiOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl92ZWxvY2l0eUdyYWRpZW50c1RleHR1
cmUpIHsKKyAgICAgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmluZSBWRUxPQ0lUWUdSQURJRU5U
UyI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHNU
ZXh0dXJlKSB7CisgICAgICAgICAgICBkZWZpbmVzICs9ICJcbiNkZWZpbmUgTElNSVRWRUxPQ0lU
WUdSQURJRU5UUyI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2RyYWdHcmFkaWVudHNU
ZXh0dXJlKSB7CisgICAgICAgICAgICBkZWZpbmVzICs9ICJcbiNkZWZpbmUgRFJBR0dSQURJRU5U
UyI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuaXNBbmltYXRpb25TaGVldEVuYWJsZWQp
IHsKKyAgICAgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmluZSBBTklNQVRFU0hFRVQiOworICAg
ICAgICAgICAgaWYgKHRoaXMuc3ByaXRlUmFuZG9tU3RhcnRDZWxsKSB7CisgICAgICAgICAgICAg
ICAgZGVmaW5lcyArPSAiXG4jZGVmaW5lIEFOSU1BVEVTSEVFVFJBTkRPTVNUQVJUIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5ub2lzZVRleHR1cmUpIHsKKyAg
ICAgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmluZSBOT0lTRSI7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuX3VwZGF0ZUVmZmVjdCAmJiB0aGlzLl91cGRhdGVFZmZlY3RPcHRpb25zLmRl
ZmluZXMgPT09IGRlZmluZXMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl91cGRhdGVFZmZlY3RPcHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3Mg
PSBbIm91dFBvc2l0aW9uIiwgIm91dEFnZSIsICJvdXRMaWZlIiwgIm91dFNlZWQiLCAib3V0U2l6
ZSJdOworICAgICAgICBpZiAoIXRoaXMuX2NvbG9yR3JhZGllbnRzVGV4dHVyZSkgeworICAgICAg
ICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0T3B0aW9ucy50cmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmdz
LnB1c2goIm91dENvbG9yIik7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0
T3B0aW9ucy50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnB1c2goIm91dERpcmVjdGlvbiIpOwor
ICAgICAgICBpZiAoIXRoaXMuX2lzQmlsbGJvYXJkQmFzZWQpIHsKKyAgICAgICAgICAgIHRoaXMu
X3VwZGF0ZUVmZmVjdE9wdGlvbnMudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5wdXNoKCJvdXRJ
bml0aWFsRGlyZWN0aW9uIik7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0
T3B0aW9ucy50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnB1c2goIm91dEFuZ2xlIik7CisgICAg
ICAgIGlmICh0aGlzLmlzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICB0aGlz
Ll91cGRhdGVFZmZlY3RPcHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MucHVzaCgib3V0
Q2VsbEluZGV4Iik7CisgICAgICAgICAgICBpZiAodGhpcy5zcHJpdGVSYW5kb21TdGFydENlbGwp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFZmZlY3RPcHRpb25zLnRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ3MucHVzaCgib3V0Q2VsbFN0YXJ0T2Zmc2V0Iik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubm9pc2VUZXh0dXJlKSB7CisgICAgICAgICAg
ICB0aGlzLl91cGRhdGVFZmZlY3RPcHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MucHVz
aCgib3V0Tm9pc2VDb29yZGluYXRlczEiKTsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVj
dE9wdGlvbnMudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5wdXNoKCJvdXROb2lzZUNvb3JkaW5h
dGVzMiIpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVjdE9wdGlvbnMuZGVm
aW5lcyA9IGRlZmluZXM7CisgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVjdCA9IG5ldyBfTWF0ZXJp
YWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siRWZmZWN0Il0oImdwdVVw
ZGF0ZVBhcnRpY2xlcyIsIHRoaXMuX3VwZGF0ZUVmZmVjdE9wdGlvbnMsIHRoaXMuX3NjZW5lLmdl
dEVuZ2luZSgpKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgR1BVUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLl9yZWNyZWF0ZVJlbmRlckVmZmVjdCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIGRlZmluZXMgPSAiIjsKKyAgICAgICAgaWYgKHRoaXMuX3NjZW5lLmNsaXBQbGFu
ZSkgeworICAgICAgICAgICAgZGVmaW5lcyA9ICJcbiNkZWZpbmUgQ0xJUFBMQU5FIjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5fc2NlbmUuY2xpcFBsYW5lMikgeworICAgICAgICAgICAg
ZGVmaW5lcyA9ICJcbiNkZWZpbmUgQ0xJUFBMQU5FMiI7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX3NjZW5lLmNsaXBQbGFuZTMpIHsKKyAgICAgICAgICAgIGRlZmluZXMgPSAiXG4jZGVm
aW5lIENMSVBQTEFORTMiOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9zY2VuZS5jbGlw
UGxhbmU0KSB7CisgICAgICAgICAgICBkZWZpbmVzID0gIlxuI2RlZmluZSBDTElQUExBTkU0IjsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5ibGVuZE1vZGUgPT09IF9wYXJ0aWNsZVN5c3Rl
bV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQYXJ0aWNsZVN5c3RlbSJdLkJMRU5ETU9E
RV9NVUxUSVBMWSkgeworICAgICAgICAgICAgZGVmaW5lcyA9ICJcbiNkZWZpbmUgQkxFTkRNVUxU
SVBMWU1PREUiOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pc0JpbGxib2FyZEJhc2Vk
KSB7CisgICAgICAgICAgICBkZWZpbmVzICs9ICJcbiNkZWZpbmUgQklMTEJPQVJEIjsKKyAgICAg
ICAgICAgIHN3aXRjaCAodGhpcy5iaWxsYm9hcmRNb2RlKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUGFydGljbGVT
eXN0ZW0iXS5CSUxMQk9BUkRNT0RFX1k6CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgKz0g
IlxuI2RlZmluZSBCSUxMQk9BUkRZIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siUGFydGljbGVTeXN0ZW0iXS5CSUxMQk9BUkRNT0RFX1NUUkVUQ0hFRDoKKyAgICAgICAg
ICAgICAgICAgICAgZGVmaW5lcyArPSAiXG4jZGVmaW5lIEJJTExCT0FSRFNUUkVUQ0hFRCI7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgX3BhcnRpY2xl
U3lzdGVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBhcnRpY2xlU3lzdGVtIl0uQklM
TEJPQVJETU9ERV9BTEw6CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X2NvbG9yR3JhZGllbnRzVGV4dHVyZSkgeworICAgICAgICAgICAgZGVmaW5lcyArPSAiXG4jZGVm
aW5lIENPTE9SR1JBRElFTlRTIjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5pc0FuaW1h
dGlvblNoZWV0RW5hYmxlZCkgeworICAgICAgICAgICAgZGVmaW5lcyArPSAiXG4jZGVmaW5lIEFO
SU1BVEVTSEVFVCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2ltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZp
Z3VyYXRpb24ucHJlcGFyZURlZmluZXModGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bkRlZmluZXMpOworICAgICAgICAgICAgZGVmaW5lcyArPSAiXG4iICsgdGhpcy5faW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAodGhpcy5fcmVuZGVyRWZmZWN0ICYmIHRoaXMuX3JlbmRlckVmZmVjdC5kZWZpbmVzID09
PSBkZWZpbmVzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHVuaWZvcm1zID0gWyJ3b3JsZE9mZnNldCIsICJ2aWV3IiwgInByb2plY3Rpb24iLCAiY29sb3JE
ZWFkIiwgImludlZpZXciLCAidkNsaXBQbGFuZSIsICJ2Q2xpcFBsYW5lMiIsICJ2Q2xpcFBsYW5l
MyIsICJ2Q2xpcFBsYW5lNCIsICJzaGVldEluZm9zIiwgInRyYW5zbGF0aW9uUGl2b3QiLCAiZXll
UG9zaXRpb24iXTsKKyAgICAgICAgdmFyIHNhbXBsZXJzID0gWyJ0ZXh0dXJlU2FtcGxlciIsICJj
b2xvckdyYWRpZW50U2FtcGxlciJdOworICAgICAgICBpZiAoX01hdGVyaWFsc19pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJJbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uIl0pIHsKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfaW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siSW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiJdLlByZXBhcmVVbmlmb3Jtcyh1bmlmb3JtcywgdGhp
cy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMpOworICAgICAgICAgICAgX01h
dGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xM19fWyJJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIl0uUHJlcGFyZVNhbXBsZXJz
KHNhbXBsZXJzLCB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uRGVmaW5lcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVuZGVyRWZmZWN0ID0gbmV3IF9NYXRlcmlhbHNfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJFZmZlY3QiXSgiZ3B1UmVuZGVyUGFy
dGljbGVzIiwgWyJwb3NpdGlvbiIsICJhZ2UiLCAibGlmZSIsICJzaXplIiwgImNvbG9yIiwgIm9m
ZnNldCIsICJ1diIsICJkaXJlY3Rpb24iLCAiaW5pdGlhbERpcmVjdGlvbiIsICJhbmdsZSIsICJj
ZWxsSW5kZXgiXSwgdW5pZm9ybXMsIHNhbXBsZXJzLCB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwg
ZGVmaW5lcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBbmltYXRlcyB0aGUgcGFydGljbGUg
c3lzdGVtIGZvciB0aGUgY3VycmVudCBmcmFtZSBieSBlbWl0dGluZyBuZXcgcGFydGljbGVzIGFu
ZCBvciBhbmltYXRpbmcgdGhlIGxpdmluZyBvbmVzLgorICAgICAqIEBwYXJhbSBwcmVXYXJtIGRl
ZmluZXMgaWYgd2UgYXJlIGluIHRoZSBwcmUtd2FybWltZyBwaGFzZQorICAgICAqLworICAgIEdQ
VVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5hbmltYXRlID0gZnVuY3Rpb24gKHByZVdhcm0pIHsK
KyAgICAgICAgaWYgKHByZVdhcm0gPT09IHZvaWQgMCkgeyBwcmVXYXJtID0gZmFsc2U7IH0KKyAg
ICAgICAgdGhpcy5fdGltZURlbHRhID0gdGhpcy51cGRhdGVTcGVlZCAqIChwcmVXYXJtID8gdGhp
cy5wcmVXYXJtU3RlcE9mZnNldCA6IHRoaXMuX3NjZW5lLmdldEFuaW1hdGlvblJhdGlvKCkpOwor
ICAgICAgICB0aGlzLl9hY3R1YWxGcmFtZSArPSB0aGlzLl90aW1lRGVsdGE7CisgICAgICAgIGlm
ICghdGhpcy5fc3RvcHBlZCkgeworICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0U3RvcER1cmF0
aW9uICYmIHRoaXMuX2FjdHVhbEZyYW1lID49IHRoaXMudGFyZ2V0U3RvcER1cmF0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworICAgIEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5fY3JlYXRlRmFjdG9yR3JhZGll
bnRUZXh0dXJlID0gZnVuY3Rpb24gKGZhY3RvckdyYWRpZW50cywgdGV4dHVyZU5hbWUpIHsKKyAg
ICAgICAgdmFyIHRleHR1cmUgPSB0aGlzW3RleHR1cmVOYW1lXTsKKyAgICAgICAgaWYgKCFmYWN0
b3JHcmFkaWVudHMgfHwgIWZhY3RvckdyYWRpZW50cy5sZW5ndGggfHwgdGV4dHVyZSkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBkYXRhID0gbmV3IEZsb2F0
MzJBcnJheSh0aGlzLl9yYXdUZXh0dXJlV2lkdGgpOworICAgICAgICBmb3IgKHZhciB4ID0gMDsg
eCA8IHRoaXMuX3Jhd1RleHR1cmVXaWR0aDsgeCsrKSB7CisgICAgICAgICAgICB2YXIgcmF0aW8g
PSB4IC8gdGhpcy5fcmF3VGV4dHVyZVdpZHRoOworICAgICAgICAgICAgX01pc2NfZ3JhZGllbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkdyYWRpZW50SGVscGVyIl0uR2V0Q3VycmVu
dEdyYWRpZW50KHJhdGlvLCBmYWN0b3JHcmFkaWVudHMsIGZ1bmN0aW9uIChjdXJyZW50R3JhZGll
bnQsIG5leHRHcmFkaWVudCwgc2NhbGUpIHsKKyAgICAgICAgICAgICAgICBkYXRhW3hdID0gX01h
dGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNjYWxhciJdLkxl
cnAoY3VycmVudEdyYWRpZW50LmZhY3RvcjEsIG5leHRHcmFkaWVudC5mYWN0b3IxLCBzY2FsZSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzW3RleHR1cmVOYW1lXSA9
IF9NYXRlcmlhbHNfVGV4dHVyZXNfcmF3VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTVfX1siUmF3VGV4dHVyZSJdLkNyZWF0ZVJUZXh0dXJlKGRhdGEsIHRoaXMuX3Jhd1RleHR1cmVX
aWR0aCwgMSwgdGhpcy5fc2NlbmUsIGZhbHNlLCBmYWxzZSwgX01hdGVyaWFsc19UZXh0dXJlc190
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJUZXh0dXJlIl0uTkVBUkVTVF9T
QU1QTElOR01PREUpOworICAgIH07CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9j
cmVhdGVTaXplR3JhZGllbnRUZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9j
cmVhdGVGYWN0b3JHcmFkaWVudFRleHR1cmUodGhpcy5fc2l6ZUdyYWRpZW50cywgIl9zaXplR3Jh
ZGllbnRzVGV4dHVyZSIpOworICAgIH07CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBl
Ll9jcmVhdGVBbmd1bGFyU3BlZWRHcmFkaWVudFRleHR1cmUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX2NyZWF0ZUZhY3RvckdyYWRpZW50VGV4dHVyZSh0aGlzLl9hbmd1bGFyU3BlZWRH
cmFkaWVudHMsICJfYW5ndWxhclNwZWVkR3JhZGllbnRzVGV4dHVyZSIpOworICAgIH07CisgICAg
R1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9jcmVhdGVWZWxvY2l0eUdyYWRpZW50VGV4dHVy
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fY3JlYXRlRmFjdG9yR3JhZGllbnRUZXh0
dXJlKHRoaXMuX3ZlbG9jaXR5R3JhZGllbnRzLCAiX3ZlbG9jaXR5R3JhZGllbnRzVGV4dHVyZSIp
OworICAgIH07CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9jcmVhdGVMaW1pdFZl
bG9jaXR5R3JhZGllbnRUZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jcmVh
dGVGYWN0b3JHcmFkaWVudFRleHR1cmUodGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50cywgIl9s
aW1pdFZlbG9jaXR5R3JhZGllbnRzVGV4dHVyZSIpOworICAgIH07CisgICAgR1BVUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLl9jcmVhdGVEcmFnR3JhZGllbnRUZXh0dXJlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB0aGlzLl9jcmVhdGVGYWN0b3JHcmFkaWVudFRleHR1cmUodGhpcy5fZHJhZ0dy
YWRpZW50cywgIl9kcmFnR3JhZGllbnRzVGV4dHVyZSIpOworICAgIH07CisgICAgR1BVUGFydGlj
bGVTeXN0ZW0ucHJvdG90eXBlLl9jcmVhdGVDb2xvckdyYWRpZW50VGV4dHVyZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jb2xvckdyYWRpZW50cyB8fCAhdGhpcy5fY29sb3JH
cmFkaWVudHMubGVuZ3RoIHx8IHRoaXMuX2NvbG9yR3JhZGllbnRzVGV4dHVyZSkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBkYXRhID0gbmV3IFVpbnQ4QXJy
YXkodGhpcy5fcmF3VGV4dHVyZVdpZHRoICogNCk7CisgICAgICAgIHZhciB0bXBDb2xvciA9IF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRtcENvbG9ycyJd
LkNvbG9yNFswXTsKKyAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0aGlzLl9yYXdUZXh0dXJl
V2lkdGg7IHgrKykgeworICAgICAgICAgICAgdmFyIHJhdGlvID0geCAvIHRoaXMuX3Jhd1RleHR1
cmVXaWR0aDsKKyAgICAgICAgICAgIF9NaXNjX2dyYWRpZW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJHcmFkaWVudEhlbHBlciJdLkdldEN1cnJlbnRHcmFkaWVudChyYXRpbywgdGhp
cy5fY29sb3JHcmFkaWVudHMsIGZ1bmN0aW9uIChjdXJyZW50R3JhZGllbnQsIG5leHRHcmFkaWVu
dCwgc2NhbGUpIHsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJDb2xvcjQiXS5MZXJwVG9SZWYoY3VycmVudEdyYWRpZW50LmNv
bG9yMSwgbmV4dEdyYWRpZW50LmNvbG9yMSwgc2NhbGUsIHRtcENvbG9yKTsKKyAgICAgICAgICAg
ICAgICBkYXRhW3ggKiA0XSA9IHRtcENvbG9yLnIgKiAyNTU7CisgICAgICAgICAgICAgICAgZGF0
YVt4ICogNCArIDFdID0gdG1wQ29sb3IuZyAqIDI1NTsKKyAgICAgICAgICAgICAgICBkYXRhW3gg
KiA0ICsgMl0gPSB0bXBDb2xvci5iICogMjU1OworICAgICAgICAgICAgICAgIGRhdGFbeCAqIDQg
KyAzXSA9IHRtcENvbG9yLmEgKiAyNTU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9jb2xvckdyYWRpZW50c1RleHR1cmUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3Jh
d1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIlJhd1RleHR1cmUiXS5DcmVh
dGVSR0JBVGV4dHVyZShkYXRhLCB0aGlzLl9yYXdUZXh0dXJlV2lkdGgsIDEsIHRoaXMuX3NjZW5l
LCBmYWxzZSwgZmFsc2UsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfX1siVGV4dHVyZSJdLk5FQVJFU1RfU0FNUExJTkdNT0RFKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFJlbmRlcnMgdGhlIHBhcnRpY2xlIHN5c3RlbSBpbiBpdHMgY3Vy
cmVudCBzdGF0ZQorICAgICAqIEBwYXJhbSBwcmVXYXJtIGRlZmluZXMgaWYgdGhlIHN5c3RlbSBz
aG91bGQgb25seSB1cGRhdGUgdGhlIHBhcnRpY2xlcyBidXQgbm90IHJlbmRlciB0aGVtCisgICAg
ICogQHJldHVybnMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHBhcnRpY2xlcworICAgICAqLworICAg
IEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAocHJlV2FybSkg
eworICAgICAgICBpZiAocHJlV2FybSA9PT0gdm9pZCAwKSB7IHByZVdhcm0gPSBmYWxzZTsgfQor
ICAgICAgICBpZiAoIXRoaXMuX3N0YXJ0ZWQpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2NyZWF0ZUNvbG9yR3JhZGllbnRUZXh0dXJlKCk7CisgICAg
ICAgIHRoaXMuX2NyZWF0ZVNpemVHcmFkaWVudFRleHR1cmUoKTsKKyAgICAgICAgdGhpcy5fY3Jl
YXRlQW5ndWxhclNwZWVkR3JhZGllbnRUZXh0dXJlKCk7CisgICAgICAgIHRoaXMuX2NyZWF0ZVZl
bG9jaXR5R3JhZGllbnRUZXh0dXJlKCk7CisgICAgICAgIHRoaXMuX2NyZWF0ZUxpbWl0VmVsb2Np
dHlHcmFkaWVudFRleHR1cmUoKTsKKyAgICAgICAgdGhpcy5fY3JlYXRlRHJhZ0dyYWRpZW50VGV4
dHVyZSgpOworICAgICAgICB0aGlzLl9yZWNyZWF0ZVVwZGF0ZUVmZmVjdCgpOworICAgICAgICB0
aGlzLl9yZWNyZWF0ZVJlbmRlckVmZmVjdCgpOworICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSgp
KSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXByZVdh
cm0pIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fcHJlV2FybURvbmUgJiYgdGhpcy5wcmVXYXJt
Q3ljbGVzKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRo
aXMucHJlV2FybUN5Y2xlczsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmFu
aW1hdGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl9wcmVXYXJtRG9uZSA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFJlbmRlcklkID09
PSB0aGlzLl9zY2VuZS5nZXRGcmFtZUlkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRSZW5kZXJJZCA9IHRoaXMu
X3NjZW5lLmdldEZyYW1lSWQoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBHZXQgZXZlcnl0aGlu
ZyByZWFkeSB0byByZW5kZXIKKyAgICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpOworICAgICAgICB0
aGlzLl9hY2N1bXVsYXRlZENvdW50ICs9IHRoaXMuZW1pdFJhdGUgKiB0aGlzLl90aW1lRGVsdGE7
CisgICAgICAgIGlmICh0aGlzLl9hY2N1bXVsYXRlZENvdW50ID4gMSkgeworICAgICAgICAgICAg
dmFyIGludFBhcnQgPSB0aGlzLl9hY2N1bXVsYXRlZENvdW50IHwgMDsKKyAgICAgICAgICAgIHRo
aXMuX2FjY3VtdWxhdGVkQ291bnQgLT0gaW50UGFydDsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJl
bnRBY3RpdmVDb3VudCA9IE1hdGgubWluKHRoaXMuX2FjdGl2ZUNvdW50LCB0aGlzLl9jdXJyZW50
QWN0aXZlQ291bnQgKyBpbnRQYXJ0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2N1
cnJlbnRBY3RpdmVDb3VudCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gRW5hYmxlIHVwZGF0ZSBlZmZlY3QKKyAgICAgICAgdGhpcy5fZW5naW5lLmVuYWJs
ZUVmZmVjdCh0aGlzLl91cGRhdGVFZmZlY3QpOworICAgICAgICB0aGlzLl9lbmdpbmUuc2V0U3Rh
dGUoZmFsc2UpOworICAgICAgICB0aGlzLl91cGRhdGVFZmZlY3Quc2V0RmxvYXQoImN1cnJlbnRD
b3VudCIsIHRoaXMuX2N1cnJlbnRBY3RpdmVDb3VudCk7CisgICAgICAgIHRoaXMuX3VwZGF0ZUVm
ZmVjdC5zZXRGbG9hdCgidGltZURlbHRhIiwgdGhpcy5fdGltZURlbHRhKTsKKyAgICAgICAgdGhp
cy5fdXBkYXRlRWZmZWN0LnNldEZsb2F0KCJzdG9wRmFjdG9yIiwgdGhpcy5fc3RvcHBlZCA/IDAg
OiAxKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldFRleHR1cmUoInJhbmRvbVNhbXBs
ZXIiLCB0aGlzLl9yYW5kb21UZXh0dXJlKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNl
dFRleHR1cmUoInJhbmRvbVNhbXBsZXIyIiwgdGhpcy5fcmFuZG9tVGV4dHVyZTIpOworICAgICAg
ICB0aGlzLl91cGRhdGVFZmZlY3Quc2V0RmxvYXQyKCJsaWZlVGltZSIsIHRoaXMubWluTGlmZVRp
bWUsIHRoaXMubWF4TGlmZVRpbWUpOworICAgICAgICB0aGlzLl91cGRhdGVFZmZlY3Quc2V0Rmxv
YXQyKCJlbWl0UG93ZXIiLCB0aGlzLm1pbkVtaXRQb3dlciwgdGhpcy5tYXhFbWl0UG93ZXIpOwor
ICAgICAgICBpZiAoIXRoaXMuX2NvbG9yR3JhZGllbnRzVGV4dHVyZSkgeworICAgICAgICAgICAg
dGhpcy5fdXBkYXRlRWZmZWN0LnNldERpcmVjdENvbG9yNCgiY29sb3IxIiwgdGhpcy5jb2xvcjEp
OworICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldERpcmVjdENvbG9yNCgiY29sb3Iy
IiwgdGhpcy5jb2xvcjIpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVjdC5z
ZXRGbG9hdDIoInNpemVSYW5nZSIsIHRoaXMubWluU2l6ZSwgdGhpcy5tYXhTaXplKTsKKyAgICAg
ICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldEZsb2F0NCgic2NhbGVSYW5nZSIsIHRoaXMubWluU2Nh
bGVYLCB0aGlzLm1heFNjYWxlWCwgdGhpcy5taW5TY2FsZVksIHRoaXMubWF4U2NhbGVZKTsKKyAg
ICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldEZsb2F0NCgiYW5nbGVSYW5nZSIsIHRoaXMubWlu
QW5ndWxhclNwZWVkLCB0aGlzLm1heEFuZ3VsYXJTcGVlZCwgdGhpcy5taW5Jbml0aWFsUm90YXRp
b24sIHRoaXMubWF4SW5pdGlhbFJvdGF0aW9uKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0
LnNldFZlY3RvcjMoImdyYXZpdHkiLCB0aGlzLmdyYXZpdHkpOworICAgICAgICBpZiAodGhpcy5f
c2l6ZUdyYWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVjdC5z
ZXRUZXh0dXJlKCJzaXplR3JhZGllbnRTYW1wbGVyIiwgdGhpcy5fc2l6ZUdyYWRpZW50c1RleHR1
cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHNU
ZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVFZmZlY3Quc2V0VGV4dHVyZSgiYW5n
dWxhclNwZWVkR3JhZGllbnRTYW1wbGVyIiwgdGhpcy5fYW5ndWxhclNwZWVkR3JhZGllbnRzVGV4
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3ZlbG9jaXR5R3JhZGllbnRzVGV4
dHVyZSkgeworICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldFRleHR1cmUoInZlbG9j
aXR5R3JhZGllbnRTYW1wbGVyIiwgdGhpcy5fdmVsb2NpdHlHcmFkaWVudHNUZXh0dXJlKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50c1RleHR1cmUp
IHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVjdC5zZXRUZXh0dXJlKCJsaW1pdFZlbG9j
aXR5R3JhZGllbnRTYW1wbGVyIiwgdGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50c1RleHR1cmUp
OworICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldEZsb2F0KCJsaW1pdFZlbG9jaXR5
RGFtcGluZyIsIHRoaXMubGltaXRWZWxvY2l0eURhbXBpbmcpOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9kcmFnR3JhZGllbnRzVGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5fdXBk
YXRlRWZmZWN0LnNldFRleHR1cmUoImRyYWdHcmFkaWVudFNhbXBsZXIiLCB0aGlzLl9kcmFnR3Jh
ZGllbnRzVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucGFydGljbGVFbWl0
dGVyVHlwZSkgeworICAgICAgICAgICAgdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLmFwcGx5VG9T
aGFkZXIodGhpcy5fdXBkYXRlRWZmZWN0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5f
aXNBbmltYXRpb25TaGVldEVuYWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVj
dC5zZXRGbG9hdDMoImNlbGxJbmZvcyIsIHRoaXMuc3RhcnRTcHJpdGVDZWxsSUQsIHRoaXMuZW5k
U3ByaXRlQ2VsbElELCB0aGlzLnNwcml0ZUNlbGxDaGFuZ2VTcGVlZCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMubm9pc2VUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVF
ZmZlY3Quc2V0VGV4dHVyZSgibm9pc2VTYW1wbGVyIiwgdGhpcy5ub2lzZVRleHR1cmUpOworICAg
ICAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldFZlY3RvcjMoIm5vaXNlU3RyZW5ndGgiLCB0
aGlzLm5vaXNlU3RyZW5ndGgpOworICAgICAgICB9CisgICAgICAgIHZhciBlbWl0dGVyV007Cisg
ICAgICAgIGlmICh0aGlzLmVtaXR0ZXIucG9zaXRpb24pIHsKKyAgICAgICAgICAgIHZhciBlbWl0
dGVyTWVzaCA9IHRoaXMuZW1pdHRlcjsKKyAgICAgICAgICAgIGVtaXR0ZXJXTSA9IGVtaXR0ZXJN
ZXNoLmdldFdvcmxkTWF0cml4KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB2YXIgZW1pdHRlclBvc2l0aW9uID0gdGhpcy5lbWl0dGVyOworICAgICAgICAgICAgZW1p
dHRlcldNID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
Ik1hdHJpeCJdLlRyYW5zbGF0aW9uKGVtaXR0ZXJQb3NpdGlvbi54LCBlbWl0dGVyUG9zaXRpb24u
eSwgZW1pdHRlclBvc2l0aW9uLnopOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZUVm
ZmVjdC5zZXRNYXRyaXgoImVtaXR0ZXJXTSIsIGVtaXR0ZXJXTSk7CisgICAgICAgIC8vIEJpbmQg
c291cmNlIFZBTworICAgICAgICB0aGlzLl9lbmdpbmUuYmluZFZlcnRleEFycmF5T2JqZWN0KHRo
aXMuX3VwZGF0ZVZBT1t0aGlzLl90YXJnZXRJbmRleF0sIG51bGwpOworICAgICAgICAvLyBVcGRh
dGUKKyAgICAgICAgdGhpcy5fZW5naW5lLmJpbmRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcih0aGlz
Ll90YXJnZXRCdWZmZXIuZ2V0QnVmZmVyKCkpOworICAgICAgICB0aGlzLl9lbmdpbmUuc2V0UmFz
dGVyaXplclN0YXRlKGZhbHNlKTsKKyAgICAgICAgdGhpcy5fZW5naW5lLmJlZ2luVHJhbnNmb3Jt
RmVlZGJhY2sodHJ1ZSk7CisgICAgICAgIHRoaXMuX2VuZ2luZS5kcmF3QXJyYXlzVHlwZShfTWF0
ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbCJd
LlBvaW50TGlzdERyYXdNb2RlLCAwLCB0aGlzLl9jdXJyZW50QWN0aXZlQ291bnQpOworICAgICAg
ICB0aGlzLl9lbmdpbmUuZW5kVHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgdGhpcy5fZW5n
aW5lLnNldFJhc3Rlcml6ZXJTdGF0ZSh0cnVlKTsKKyAgICAgICAgdGhpcy5fZW5naW5lLmJpbmRU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihudWxsKTsKKyAgICAgICAgaWYgKCFwcmVXYXJtKSB7Cisg
ICAgICAgICAgICAvLyBFbmFibGUgcmVuZGVyIGVmZmVjdAorICAgICAgICAgICAgdGhpcy5fZW5n
aW5lLmVuYWJsZUVmZmVjdCh0aGlzLl9yZW5kZXJFZmZlY3QpOworICAgICAgICAgICAgdmFyIHZp
ZXdNYXRyaXggPSB0aGlzLl9zY2VuZS5nZXRWaWV3TWF0cml4KCk7CisgICAgICAgICAgICB0aGlz
Ll9yZW5kZXJFZmZlY3Quc2V0TWF0cml4KCJ2aWV3Iiwgdmlld01hdHJpeCk7CisgICAgICAgICAg
ICB0aGlzLl9yZW5kZXJFZmZlY3Quc2V0TWF0cml4KCJwcm9qZWN0aW9uIiwgdGhpcy5fc2NlbmUu
Z2V0UHJvamVjdGlvbk1hdHJpeCgpKTsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdC5z
ZXRUZXh0dXJlKCJ0ZXh0dXJlU2FtcGxlciIsIHRoaXMucGFydGljbGVUZXh0dXJlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdC5zZXRWZWN0b3IyKCJ0cmFuc2xhdGlvblBpdm90Iiwg
dGhpcy50cmFuc2xhdGlvblBpdm90KTsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdC5z
ZXRWZWN0b3IzKCJ3b3JsZE9mZnNldCIsIHRoaXMud29ybGRPZmZzZXQpOworICAgICAgICAgICAg
aWYgKHRoaXMuX2NvbG9yR3JhZGllbnRzVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMu
X3JlbmRlckVmZmVjdC5zZXRUZXh0dXJlKCJjb2xvckdyYWRpZW50U2FtcGxlciIsIHRoaXMuX2Nv
bG9yR3JhZGllbnRzVGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJFZmZlY3Quc2V0RGlyZWN0Q29sb3I0KCJjb2xv
ckRlYWQiLCB0aGlzLmNvbG9yRGVhZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dGhpcy5faXNBbmltYXRpb25TaGVldEVuYWJsZWQgJiYgdGhpcy5wYXJ0aWNsZVRleHR1cmUpIHsK
KyAgICAgICAgICAgICAgICB2YXIgYmFzZVNpemUgPSB0aGlzLnBhcnRpY2xlVGV4dHVyZS5nZXRC
YXNlU2l6ZSgpOworICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdC5zZXRGbG9hdDMo
InNoZWV0SW5mb3MiLCB0aGlzLnNwcml0ZUNlbGxXaWR0aCAvIGJhc2VTaXplLndpZHRoLCB0aGlz
LnNwcml0ZUNlbGxIZWlnaHQgLyBiYXNlU2l6ZS5oZWlnaHQsIGJhc2VTaXplLndpZHRoIC8gdGhp
cy5zcHJpdGVDZWxsV2lkdGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMu
X2lzQmlsbGJvYXJkQmFzZWQpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5f
c2NlbmUuYWN0aXZlQ2FtZXJhOworICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdC5z
ZXRWZWN0b3IzKCJleWVQb3NpdGlvbiIsIGNhbWVyYS5nbG9iYWxQb3NpdGlvbik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUuY2xpcFBsYW5lIHx8IHRoaXMuX3Nj
ZW5lLmNsaXBQbGFuZTIgfHwgdGhpcy5fc2NlbmUuY2xpcFBsYW5lMyB8fCB0aGlzLl9zY2VuZS5j
bGlwUGxhbmU0KSB7CisgICAgICAgICAgICAgICAgdmFyIGludlZpZXcgPSB2aWV3TWF0cml4LmNs
b25lKCk7CisgICAgICAgICAgICAgICAgaW52Vmlldy5pbnZlcnQoKTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9yZW5kZXJFZmZlY3Quc2V0TWF0cml4KCJpbnZWaWV3IiwgaW52Vmlldyk7CisgICAg
ICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTJfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kQ2xpcFBsYW5lKHRoaXMuX3JlbmRlckVm
ZmVjdCwgdGhpcy5fc2NlbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gaW1hZ2Ug
cHJvY2Vzc2luZworICAgICAgICAgICAgaWYgKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24gJiYgIXRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uYXBwbHlCeVBvc3RQ
cm9jZXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbi5iaW5kKHRoaXMuX3JlbmRlckVmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBEcmF3IG9yZGVyCisgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuYmxlbmRNb2RlKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siUGFydGljbGVTeXN0ZW0iXS5CTEVORE1PREVfQUREOgorICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9lbmdpbmUuc2V0QWxwaGFNb2RlKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTZfX1siQ29uc3RhbnRzIl0uQUxQSEFfQUREKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfcGFydGljbGVTeXN0ZW1f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUGFydGljbGVTeXN0ZW0iXS5CTEVORE1PREVf
T05FT05FOgorICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0QWxwaGFNb2RlKF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siQ29uc3RhbnRz
Il0uQUxQSEFfT05FT05FKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
UGFydGljbGVTeXN0ZW0iXS5CTEVORE1PREVfU1RBTkRBUkQ6CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX2VuZ2luZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xNl9fWyJDb25zdGFudHMiXS5BTFBIQV9DT01CSU5FKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfcGFydGljbGVTeXN0ZW1f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUGFydGljbGVTeXN0ZW0iXS5CTEVORE1PREVf
TVVMVElQTFk6CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5zZXRBbHBoYU1vZGUo
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJDb25zdGFu
dHMiXS5BTFBIQV9NVUxUSVBMWSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuZm9yY2VEZXB0aFdyaXRlKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5fZW5naW5lLnNldERlcHRoV3JpdGUodHJ1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAvLyBCaW5kIHNvdXJjZSBWQU8KKyAgICAgICAgICAgIHRoaXMuX2VuZ2lu
ZS5iaW5kVmVydGV4QXJyYXlPYmplY3QodGhpcy5fcmVuZGVyVkFPW3RoaXMuX3RhcmdldEluZGV4
XSwgbnVsbCk7CisgICAgICAgICAgICAvLyBSZW5kZXIKKyAgICAgICAgICAgIHRoaXMuX2VuZ2lu
ZS5kcmF3QXJyYXlzVHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xMV9fWyJNYXRlcmlhbCJdLlRyaWFuZ2xlRmFuRHJhd01vZGUsIDAsIDQsIHRoaXMuX2N1
cnJlbnRBY3RpdmVDb3VudCk7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0QWxwaGFNb2Rl
KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siQ29uc3Rh
bnRzIl0uQUxQSEFfRElTQUJMRSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU3dpdGNoIFZBT3MK
KyAgICAgICAgdGhpcy5fdGFyZ2V0SW5kZXgrKzsKKyAgICAgICAgaWYgKHRoaXMuX3RhcmdldElu
ZGV4ID09PSAyKSB7CisgICAgICAgICAgICB0aGlzLl90YXJnZXRJbmRleCA9IDA7CisgICAgICAg
IH0KKyAgICAgICAgLy8gU3dpdGNoIGJ1ZmZlcnMKKyAgICAgICAgdmFyIHRtcEJ1ZmZlciA9IHRo
aXMuX3NvdXJjZUJ1ZmZlcjsKKyAgICAgICAgdGhpcy5fc291cmNlQnVmZmVyID0gdGhpcy5fdGFy
Z2V0QnVmZmVyOworICAgICAgICB0aGlzLl90YXJnZXRCdWZmZXIgPSB0bXBCdWZmZXI7CisgICAg
ICAgIHJldHVybiB0aGlzLl9jdXJyZW50QWN0aXZlQ291bnQ7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBSZWJ1aWxkcyB0aGUgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFydGlj
bGVTeXN0ZW0ucHJvdG90eXBlLnJlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMu
X2luaXRpYWxpemUodHJ1ZSk7CisgICAgfTsKKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5
cGUuX3JlbGVhc2VCdWZmZXJzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fYnVm
ZmVyMCkgeworICAgICAgICAgICAgdGhpcy5fYnVmZmVyMC5kaXNwb3NlKCk7CisgICAgICAgICAg
ICB0aGlzLl9idWZmZXIwID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYnVm
ZmVyMSkgeworICAgICAgICAgICAgdGhpcy5fYnVmZmVyMS5kaXNwb3NlKCk7CisgICAgICAgICAg
ICB0aGlzLl9idWZmZXIxID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc3By
aXRlQnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9zcHJpdGVCdWZmZXIuZGlzcG9zZSgpOwor
ICAgICAgICAgICAgdGhpcy5fc3ByaXRlQnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgIH07
CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9yZWxlYXNlVkFPcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl91cGRhdGVWQU8pIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5f
dXBkYXRlVkFPLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdGhpcy5fZW5naW5lLnJl
bGVhc2VWZXJ0ZXhBcnJheU9iamVjdCh0aGlzLl91cGRhdGVWQU9baW5kZXhdKTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLl91cGRhdGVWQU8gPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IHRoaXMuX3JlbmRlclZBTy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgIHRoaXMuX2VuZ2luZS5yZWxlYXNlVmVydGV4QXJyYXlPYmplY3QodGhpcy5fcmVuZGVyVkFP
W2luZGV4XSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVuZGVyVkFPID0gW107CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgcGFydGljbGUgc3lzdGVtIGFuZCBmcmVl
IHRoZSBhc3NvY2lhdGVkIHJlc291cmNlcworICAgICAqIEBwYXJhbSBkaXNwb3NlVGV4dHVyZSBk
ZWZpbmVzIGlmIHRoZSBwYXJ0aWN1bGUgdGV4dHVyZSBtdXN0IGJlIGRpc3Bvc2VkIGFzIHdlbGwg
KHRydWUgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5
cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChkaXNwb3NlVGV4dHVyZSkgeworICAgICAgICBpZiAoZGlz
cG9zZVRleHR1cmUgPT09IHZvaWQgMCkgeyBkaXNwb3NlVGV4dHVyZSA9IHRydWU7IH0KKyAgICAg
ICAgdmFyIGluZGV4ID0gdGhpcy5fc2NlbmUucGFydGljbGVTeXN0ZW1zLmluZGV4T2YodGhpcyk7
CisgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5wYXJ0
aWNsZVN5c3RlbXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9y
ZWxlYXNlQnVmZmVycygpOworICAgICAgICB0aGlzLl9yZWxlYXNlVkFPcygpOworICAgICAgICBp
ZiAodGhpcy5fY29sb3JHcmFkaWVudHNUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9jb2xv
ckdyYWRpZW50c1RleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fY29sb3JHcmFk
aWVudHNUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc2l6ZUdy
YWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3NpemVHcmFkaWVudHNUZXh0dXJl
LmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX3NpemVHcmFkaWVudHNUZXh0dXJlID0gbnVs
bDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYW5ndWxhclNwZWVkR3JhZGllbnRzVGV4
dHVyZSkgeworICAgICAgICAgICAgdGhpcy5fYW5ndWxhclNwZWVkR3JhZGllbnRzVGV4dHVyZS5k
aXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHNUZXh0dXJl
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fdmVsb2NpdHlHcmFkaWVudHNU
ZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl92ZWxvY2l0eUdyYWRpZW50c1RleHR1cmUuZGlz
cG9zZSgpOworICAgICAgICAgICAgdGhpcy5fdmVsb2NpdHlHcmFkaWVudHNUZXh0dXJlID0gbnVs
bDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50c1Rl
eHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHNUZXh0dXJl
LmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHNUZXh0
dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZHJhZ0dyYWRpZW50c1Rl
eHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2RyYWdHcmFkaWVudHNUZXh0dXJlLmRpc3Bvc2Uo
KTsKKyAgICAgICAgICAgIHRoaXMuX2RyYWdHcmFkaWVudHNUZXh0dXJlID0gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5fcmFuZG9tVGV4dHVyZSkgeworICAgICAgICAgICAgdGhp
cy5fcmFuZG9tVGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9yYW5kb21UZXh0
dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmFuZG9tVGV4dHVyZTIp
IHsKKyAgICAgICAgICAgIHRoaXMuX3JhbmRvbVRleHR1cmUyLmRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JhbmRvbVRleHR1cmUyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ZGlzcG9zZVRleHR1cmUgJiYgdGhpcy5wYXJ0aWNsZVRleHR1cmUpIHsKKyAgICAgICAgICAgIHRo
aXMucGFydGljbGVUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMucGFydGljbGVU
ZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGlzcG9zZVRleHR1cmUgJiYg
dGhpcy5ub2lzZVRleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMubm9pc2VUZXh0dXJlLmRpc3Bv
c2UoKTsKKyAgICAgICAgICAgIHRoaXMubm9pc2VUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQor
ICAgICAgICAvLyBDYWxsYmFjaworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUubm90
aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUuY2xl
YXIoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lcyB0aGUgcGFydGljbGUgc3lzdGVt
LgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjbG9uZWQgb2JqZWN0CisgICAg
ICogQHBhcmFtIG5ld0VtaXR0ZXIgVGhlIG5ldyBlbWl0dGVyIHRvIHVzZQorICAgICAqIEByZXR1
cm5zIHRoZSBjbG9uZWQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUsIG5ld0VtaXR0ZXIpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IG5ldyBHUFVQYXJ0aWNsZVN5c3RlbShuYW1lLCB7IGNhcGFjaXR5
OiB0aGlzLl9jYXBhY2l0eSwgcmFuZG9tVGV4dHVyZVNpemU6IHRoaXMuX3JhbmRvbVRleHR1cmVT
aXplIH0sIHRoaXMuX3NjZW5lKTsKKyAgICAgICAgX01pc2NfZGVlcENvcGllcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMThfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHRoaXMsIHJlc3VsdCwg
WyJwYXJ0aWNsZXMiLCAiY3VzdG9tU2hhZGVyIiwgIm5vaXNlVGV4dHVyZSIsICJwYXJ0aWNsZVRl
eHR1cmUiLCAib25EaXNwb3NlT2JzZXJ2YWJsZSJdKTsKKyAgICAgICAgaWYgKG5ld0VtaXR0ZXIg
PT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgbmV3RW1pdHRlciA9IHRoaXMuZW1pdHRlcjsK
KyAgICAgICAgfQorICAgICAgICByZXN1bHQuZW1pdHRlciA9IG5ld0VtaXR0ZXI7CisgICAgICAg
IGlmICh0aGlzLnBhcnRpY2xlVGV4dHVyZSkgeworICAgICAgICAgICAgcmVzdWx0LnBhcnRpY2xl
VGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE0X19bIlRleHR1cmUiXSh0aGlzLnBhcnRpY2xlVGV4dHVyZS51cmwsIHRoaXMu
X3NjZW5lKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQubm9pc2VUZXh0dXJlID0gdGhpcy5u
b2lzZVRleHR1cmU7CisgICAgICAgIHJlc3VsdC5lbWl0dGVyID0gbmV3RW1pdHRlcjsKKyAgICAg
ICAgaWYgKHRoaXMucGFydGljbGVUZXh0dXJlKSB7CisgICAgICAgICAgICByZXN1bHQucGFydGlj
bGVUZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfX1siVGV4dHVyZSJdKHRoaXMucGFydGljbGVUZXh0dXJlLnVybCwgdGhp
cy5fc2NlbmUpOworICAgICAgICB9CisgICAgICAgIC8vIENsb25lIGdyYWRpZW50cworICAgICAg
ICBpZiAodGhpcy5fY29sb3JHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2NvbG9yR3Jh
ZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRk
Q29sb3JHcmFkaWVudCh2LmdyYWRpZW50LCB2LmNvbG9yMSwgdi5jb2xvcjIpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2RyYWdHcmFkaWVudHMpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2RyYWdHcmFkaWVudHMuZm9yRWFjaChmdW5jdGlvbiAodikgeworICAg
ICAgICAgICAgICAgIHJlc3VsdC5hZGREcmFnR3JhZGllbnQodi5ncmFkaWVudCwgdi5mYWN0b3Ix
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9hbmd1bGFy
U3BlZWRHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50
cy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEFuZ3Vs
YXJTcGVlZEdyYWRpZW50KHYuZ3JhZGllbnQsIHYuZmFjdG9yMSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZW1pdFJhdGVHcmFkaWVudHMpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2VtaXRSYXRlR3JhZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYWRkRW1pdFJhdGVHcmFkaWVudCh2LmdyYWRpZW50LCB2LmZh
Y3RvcjEsIHYuZmFjdG9yMik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5fbGlmZVRpbWVHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2xpZmVUaW1l
R3JhZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YWRkTGlmZVRpbWVHcmFkaWVudCh2LmdyYWRpZW50LCB2LmZhY3RvcjEsIHYuZmFjdG9yMik7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fbGltaXRWZWxvY2l0
eUdyYWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50cy5m
b3JFYWNoKGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZExpbWl0VmVs
b2NpdHlHcmFkaWVudCh2LmdyYWRpZW50LCB2LmZhY3RvcjEpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3NpemVHcmFkaWVudHMpIHsKKyAgICAgICAgICAg
IHRoaXMuX3NpemVHcmFkaWVudHMuZm9yRWFjaChmdW5jdGlvbiAodikgeworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hZGRTaXplR3JhZGllbnQodi5ncmFkaWVudCwgdi5mYWN0b3IxKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9zdGFydFNpemVHcmFkaWVu
dHMpIHsKKyAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2l6ZUdyYWRpZW50cy5mb3JFYWNoKGZ1bmN0
aW9uICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN0YXJ0U2l6ZUdyYWRpZW50KHYu
Z3JhZGllbnQsIHYuZmFjdG9yMSwgdi5mYWN0b3IyKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl92ZWxvY2l0eUdyYWRpZW50cykgeworICAgICAgICAgICAg
dGhpcy5fdmVsb2NpdHlHcmFkaWVudHMuZm9yRWFjaChmdW5jdGlvbiAodikgeworICAgICAgICAg
ICAgICAgIHJlc3VsdC5hZGRWZWxvY2l0eUdyYWRpZW50KHYuZ3JhZGllbnQsIHYuZmFjdG9yMSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmFtcEdyYWRp
ZW50cykgeworICAgICAgICAgICAgdGhpcy5fcmFtcEdyYWRpZW50cy5mb3JFYWNoKGZ1bmN0aW9u
ICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFJhbXBHcmFkaWVudCh2LmdyYWRpZW50
LCB2LmNvbG9yKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
Ll9jb2xvclJlbWFwR3JhZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl9jb2xvclJlbWFwR3Jh
ZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRk
Q29sb3JSZW1hcEdyYWRpZW50KHYuZ3JhZGllbnQsIHYuZmFjdG9yMSwgdi5mYWN0b3IyKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9hbHBoYVJlbWFwR3Jh
ZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl9hbHBoYVJlbWFwR3JhZGllbnRzLmZvckVhY2go
ZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkQWxwaGFSZW1hcEdyYWRp
ZW50KHYuZ3JhZGllbnQsIHYuZmFjdG9yMSwgdi5mYWN0b3IyKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXJpYWxpemVzIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gdG8gYSBKU09OIG9iamVjdC4KKyAgICAg
KiBAcmV0dXJucyB0aGUgSlNPTiBvYmplY3QKKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3Rl
bS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFs
aXphdGlvbk9iamVjdCA9IHt9OworICAgICAgICBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzhfX1siUGFydGljbGVTeXN0ZW0iXS5fU2VyaWFsaXplKHNlcmlhbGl6YXRp
b25PYmplY3QsIHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmFjdGl2ZVBhcnRp
Y2xlQ291bnQgPSB0aGlzLmFjdGl2ZVBhcnRpY2xlQ291bnQ7CisgICAgICAgIHJldHVybiBzZXJp
YWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2VzIGEgSlNPTiBv
YmplY3QgdG8gY3JlYXRlIGEgR1BVIHBhcnRpY2xlIHN5c3RlbS4KKyAgICAgKiBAcGFyYW0gcGFy
c2VkUGFydGljbGVTeXN0ZW0gVGhlIEpTT04gb2JqZWN0IHRvIHBhcnNlCisgICAgICogQHBhcmFt
IHNjZW5lIFRoZSBzY2VuZSB0byBjcmVhdGUgdGhlIHBhcnRpY2xlIHN5c3RlbSBpbgorICAgICAq
IEBwYXJhbSByb290VXJsIFRoZSByb290IHVybCB0byB1c2UgdG8gbG9hZCBleHRlcm5hbCBkZXBl
bmRlbmNpZXMgbGlrZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGRvTm90U3RhcnQgSWdub3JlIHRo
ZSBwcmV2ZW50QXV0b1N0YXJ0IGF0dHJpYnV0ZSBhbmQgZG9lcyBub3Qgc3RhcnQKKyAgICAgKiBA
cmV0dXJucyB0aGUgcGFyc2VkIEdQVSBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQ
YXJ0aWNsZVN5c3RlbS5QYXJzZSA9IGZ1bmN0aW9uIChwYXJzZWRQYXJ0aWNsZVN5c3RlbSwgc2Nl
bmUsIHJvb3RVcmwsIGRvTm90U3RhcnQpIHsKKyAgICAgICAgaWYgKGRvTm90U3RhcnQgPT09IHZv
aWQgMCkgeyBkb05vdFN0YXJ0ID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIG5hbWUgPSBwYXJzZWRQ
YXJ0aWNsZVN5c3RlbS5uYW1lOworICAgICAgICB2YXIgcGFydGljbGVTeXN0ZW0gPSBuZXcgR1BV
UGFydGljbGVTeXN0ZW0obmFtZSwgeyBjYXBhY2l0eTogcGFyc2VkUGFydGljbGVTeXN0ZW0uY2Fw
YWNpdHksIHJhbmRvbVRleHR1cmVTaXplOiBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5yYW5kb21UZXh0
dXJlU2l6ZSB9LCBzY2VuZSk7CisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5hY3Rp
dmVQYXJ0aWNsZUNvdW50KSB7CisgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5hY3RpdmVQYXJ0
aWNsZUNvdW50ID0gcGFyc2VkUGFydGljbGVTeXN0ZW0uYWN0aXZlUGFydGljbGVDb3VudDsKKyAg
ICAgICAgfQorICAgICAgICBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siUGFydGljbGVTeXN0ZW0iXS5fUGFyc2UocGFyc2VkUGFydGljbGVTeXN0ZW0sIHBhcnRp
Y2xlU3lzdGVtLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIC8vIEF1dG8gc3RhcnQKKyAgICAg
ICAgaWYgKHBhcnNlZFBhcnRpY2xlU3lzdGVtLnByZXZlbnRBdXRvU3RhcnQpIHsKKyAgICAgICAg
ICAgIHBhcnRpY2xlU3lzdGVtLnByZXZlbnRBdXRvU3RhcnQgPSBwYXJzZWRQYXJ0aWNsZVN5c3Rl
bS5wcmV2ZW50QXV0b1N0YXJ0OworICAgICAgICB9CisgICAgICAgIGlmICghZG9Ob3RTdGFydCAm
JiAhcGFydGljbGVTeXN0ZW0ucHJldmVudEF1dG9TdGFydCkgeworICAgICAgICAgICAgcGFydGlj
bGVTeXN0ZW0uc3RhcnQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFydGljbGVTeXN0
ZW07CisgICAgfTsKKyAgICByZXR1cm4gR1BVUGFydGljbGVTeXN0ZW07Cit9KF9iYXNlUGFydGlj
bGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQmFzZVBhcnRpY2xlU3lzdGVt
Il0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QYXJ0aWNsZXMvaW5kZXgudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGFydGljbGVzL2lu
ZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogQmFzZVBhcnRpY2xlU3lzdGVtLCBHUFVQYXJ0aWNsZVN5c3RlbSwgUGFydGlj
bGUsIFBhcnRpY2xlSGVscGVyLCBQYXJ0aWNsZVN5c3RlbSwgX0lEb05lZWRUb0JlSW5UaGVCdWls
ZCwgUGFydGljbGVTeXN0ZW1TZXQsIFNvbGlkUGFydGljbGUsIE1vZGVsU2hhcGUsIERlcHRoU29y
dGVkUGFydGljbGUsIFNvbGlkUGFydGljbGVTeXN0ZW0sIFN1YkVtaXR0ZXJUeXBlLCBTdWJFbWl0
dGVyLCBCb3hQYXJ0aWNsZUVtaXR0ZXIsIENvbmVQYXJ0aWNsZUVtaXR0ZXIsIEN5bGluZGVyUGFy
dGljbGVFbWl0dGVyLCBDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyLCBIZW1pc3BoZXJp
Y1BhcnRpY2xlRW1pdHRlciwgUG9pbnRQYXJ0aWNsZUVtaXR0ZXIsIFNwaGVyZVBhcnRpY2xlRW1p
dHRlciwgU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlUGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZVBhcnRpY2xl
U3lzdGVtICovICIuL1BhcnRpY2xlcy9iYXNlUGFydGljbGVTeXN0ZW0udHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQmFzZVBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYmFzZVBh
cnRpY2xlU3lzdGVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2VQYXJ0aWNsZVN5
c3RlbSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbWl0dGVyVHlwZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vRW1pdHRlclR5cGVzL2luZGV4ICovICIuL1BhcnRpY2xlcy9FbWl0dGVyVHlwZXMvaW5kZXgu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm94UGFydGljbGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfRW1pdHRlclR5cGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkJveFBhcnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb25lUGFydGlj
bGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRW1pdHRlclR5cGVzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbmVQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9FbWl0dGVyVHlwZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ3ls
aW5kZXJQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJE
aXJlY3RlZFBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0VtaXR0ZXJUeXBl
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDeWxpbmRlckRpcmVjdGVkUGFy
dGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhlbWlzcGhlcmljUGFydGlj
bGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRW1pdHRlclR5cGVzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkhlbWlzcGhlcmljUGFydGljbGVFbWl0dGVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlBvaW50UGFydGljbGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfRW1pdHRlclR5cGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlBvaW50UGFydGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNwaGVyZVBh
cnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0VtaXR0ZXJUeXBlc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9FbWl0dGVyVHlwZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfZ3B1UGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZ3B1UGFydGljbGVTeXN0ZW0gKi8g
Ii4vUGFydGljbGVzL2dwdVBhcnRpY2xlU3lzdGVtLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdQ
VVBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZ3B1UGFydGljbGVTeXN0ZW1f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR1BVUGFydGljbGVTeXN0ZW0iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFydGljbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFydGljbGUgKi8gIi4vUGFydGlj
bGVzL3BhcnRpY2xlLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhcnRpY2xlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfcGFydGljbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUGFydGlj
bGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFydGljbGVIZWxwZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFy
dGljbGVIZWxwZXIgKi8gIi4vUGFydGljbGVzL3BhcnRpY2xlSGVscGVyLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlBhcnRpY2xlSGVscGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGFydGljbGVI
ZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUGFydGljbGVIZWxwZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFydGljbGVTeXN0
ZW0gKi8gIi4vUGFydGljbGVzL3BhcnRpY2xlU3lzdGVtLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGFydGljbGVTeXN0ZW1fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUGFydGljbGVTeXN0ZW0iXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfcGFydGljbGVTeXN0ZW1Db21wb25lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFydGljbGVTeXN0
ZW1Db21wb25lbnQgKi8gIi4vUGFydGljbGVzL3BhcnRpY2xlU3lzdGVtQ29tcG9uZW50LnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIl9JRG9OZWVkVG9CZUluVGhlQnVpbGQiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9wYXJ0aWNsZVN5c3RlbUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fWyJfSURvTmVlZFRvQmVJblRoZUJ1aWxkIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX3BhcnRpY2xlU3lzdGVtU2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhcnRpY2xlU3lzdGVtU2V0ICovICIuL1BhcnRpY2xl
cy9wYXJ0aWNsZVN5c3RlbVNldC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQYXJ0aWNsZVN5c3Rl
bVNldCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BhcnRpY2xlU3lzdGVtU2V0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIlBhcnRpY2xlU3lzdGVtU2V0Il07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3NvbGlkUGFydGljbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc29saWRQYXJ0aWNsZSAqLyAiLi9QYXJ0aWNs
ZXMvc29saWRQYXJ0aWNsZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTb2xpZFBhcnRpY2xlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfc29saWRQYXJ0aWNsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJTb2xpZFBhcnRpY2xlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1vZGVsU2hh
cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zb2xpZFBhcnRpY2xlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV84X19bIk1vZGVsU2hhcGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhT
b3J0ZWRQYXJ0aWNsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NvbGlkUGFydGljbGVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siRGVwdGhTb3J0ZWRQYXJ0aWNsZSJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zb2xpZFBhcnRpY2xlU3lzdGVtX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NvbGlkUGFydGljbGVT
eXN0ZW0gKi8gIi4vUGFydGljbGVzL3NvbGlkUGFydGljbGVTeXN0ZW0udHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU29saWRQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NvbGlk
UGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siU29saWRQYXJ0aWNs
ZVN5c3RlbSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdWJFbWl0dGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9z
dWJFbWl0dGVyICovICIuL1BhcnRpY2xlcy9zdWJFbWl0dGVyLnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlN1YkVtaXR0ZXJUeXBlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3ViRW1pdHRlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siU3ViRW1pdHRlclR5cGUiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiU3ViRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N1YkVtaXR0ZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlN1YkVtaXR0ZXIiXTsgfSk7CisKKworCisK
KworCisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1BhcnRpY2xlcy9wYXJ0
aWNsZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9QYXJ0aWNsZXMvcGFydGljbGUudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQYXJ0aWNsZSAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJQYXJ0aWNsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGFy
dGljbGU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAi
Li9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnNjYWxhciAqLyAiLi9NYXRocy9tYXRoLnNjYWxhci50
cyIpOworCisKKworLyoqCisgKiBBIHBhcnRpY2xlIHJlcHJlc2VudHMgb25lIG9mIHRoZSBlbGVt
ZW50IGVtaXR0ZWQgYnkgYSBwYXJ0aWNsZSBzeXN0ZW0uCisgKiBUaGlzIGlzIG1haW5seSBkZWZp
bmUgYnkgaXRzIGNvb3JkaW5hdGVzLCBkaXJlY3Rpb24sIHZlbG9jaXR5IGFuZCBhZ2UuCisgKi8K
K3ZhciBQYXJ0aWNsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIFBhcnRpY2xlCisgICAgICogQHBhcmFtIHBhcnRp
Y2xlU3lzdGVtIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gdGhlIHBhcnRpY2xlIGJlbG9uZ3MgdG8KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBQYXJ0aWNsZSgKKyAgICAvKioKKyAgICAgKiBUaGUgcGFydGlj
bGUgc3lzdGVtIHRoZSBwYXJ0aWNsZSBiZWxvbmdzIHRvLgorICAgICAqLworICAgIHBhcnRpY2xl
U3lzdGVtKSB7CisgICAgICAgIHRoaXMucGFydGljbGVTeXN0ZW0gPSBwYXJ0aWNsZVN5c3RlbTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB3b3JsZCBwb3NpdGlvbiBvZiB0aGUgcGFydGlj
bGUgaW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5wb3NpdGlvbiA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0u
WmVybygpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHdvcmxkIGRpcmVjdGlvbiBvZiB0
aGUgcGFydGljbGUgaW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaXJl
Y3Rpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjb2xvciBvZiB0
aGUgcGFydGljbGUuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNvbG9yID0gbmV3IF9NYXRo
c19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9yNCJdKDAsIDAs
IDAsIDApOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIGNoYW5nZSBvZiB0aGUg
cGFydGljbGUgcGVyIHN0ZXAuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNvbG9yU3RlcCA9
IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xv
cjQiXSgwLCAwLCAwLCAwKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaG93IGxv
bmcgd2lsbCB0aGUgbGlmZSBvZiB0aGUgcGFydGljbGUgYmUuCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmxpZmVUaW1lID0gMS4wOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGN1cnJl
bnQgYWdlIG9mIHRoZSBwYXJ0aWNsZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYWdlID0g
MDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjdXJyZW50IHNpemUgb2YgdGhlIHBhcnRp
Y2xlLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zaXplID0gMDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFRoZSBjdXJyZW50IHNjYWxlIG9mIHRoZSBwYXJ0aWNsZS4KKyAgICAgICAgICov
CisgICAgICAgIHRoaXMuc2NhbGUgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjIiXSgxLCAxKTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFRoZSBjdXJyZW50IGFuZ2xlIG9mIHRoZSBwYXJ0aWNsZS4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMuYW5nbGUgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBob3cg
ZmFzdCBpcyB0aGUgYW5nbGUgY2hhbmdpbmcuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmFu
Z3VsYXJTcGVlZCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBjZWxs
IGluZGV4IHVzZWQgYnkgdGhlIHBhcnRpY2xlIHRvIGJlIHJlbmRlcmVkIGZyb20gYSBzcHJpdGUu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmNlbGxJbmRleCA9IDA7CisgICAgICAgIC8qKiBA
aGlkZGVuICovCisgICAgICAgIHRoaXMuX2F0dGFjaGVkU3ViRW1pdHRlcnMgPSBudWxsOworICAg
ICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jdXJyZW50Q29sb3IxID0gbmV3IF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9yNCJdKDAs
IDAsIDAsIDApOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jdXJyZW50
Q29sb3IyID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkNvbG9yNCJdKDAsIDAsIDAsIDApOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAg
ICB0aGlzLl9jdXJyZW50U2l6ZTEgPSAwOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAg
ICB0aGlzLl9jdXJyZW50U2l6ZTIgPSAwOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAg
ICB0aGlzLl9jdXJyZW50QW5ndWxhclNwZWVkMSA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIHRoaXMuX2N1cnJlbnRBbmd1bGFyU3BlZWQyID0gMDsKKyAgICAgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICAgICAgdGhpcy5fY3VycmVudFZlbG9jaXR5MSA9IDA7CisgICAgICAgIC8q
KiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2N1cnJlbnRWZWxvY2l0eTIgPSAwOworICAgICAg
ICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jdXJyZW50TGltaXRWZWxvY2l0eTEgPSAw
OworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jdXJyZW50TGltaXRWZWxv
Y2l0eTIgPSAwOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jdXJyZW50
RHJhZzEgPSAwOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jdXJyZW50
RHJhZzIgPSAwOworICAgICAgICB0aGlzLmlkID0gUGFydGljbGUuX0NvdW50Kys7CisgICAgICAg
IGlmICghdGhpcy5wYXJ0aWNsZVN5c3RlbS5pc0FuaW1hdGlvblNoZWV0RW5hYmxlZCkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMudXBkYXRlQ2VsbEluZm9G
cm9tU3lzdGVtKCk7CisgICAgfQorICAgIFBhcnRpY2xlLnByb3RvdHlwZS51cGRhdGVDZWxsSW5m
b0Zyb21TeXN0ZW0gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuY2VsbEluZGV4ID0gdGhp
cy5wYXJ0aWNsZVN5c3RlbS5zdGFydFNwcml0ZUNlbGxJRDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIERlZmluZXMgaG93IHRoZSBzcHJpdGUgY2VsbCBpbmRleCBpcyB1cGRhdGVkIGZvciB0aGUg
cGFydGljbGUKKyAgICAgKi8KKyAgICBQYXJ0aWNsZS5wcm90b3R5cGUudXBkYXRlQ2VsbEluZGV4
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgb2Zmc2V0QWdlID0gdGhpcy5hZ2U7CisgICAg
ICAgIHZhciBjaGFuZ2VTcGVlZCA9IHRoaXMucGFydGljbGVTeXN0ZW0uc3ByaXRlQ2VsbENoYW5n
ZVNwZWVkOworICAgICAgICBpZiAodGhpcy5wYXJ0aWNsZVN5c3RlbS5zcHJpdGVSYW5kb21TdGFy
dENlbGwpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yYW5kb21DZWxsT2Zmc2V0ID09PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yYW5kb21DZWxsT2Zmc2V0ID0gTWF0aC5y
YW5kb20oKSAqIHRoaXMubGlmZVRpbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
Y2hhbmdlU3BlZWQgPT09IDApIHsgLy8gU3BlY2lhbCBjYXNlIHdoZW4gc3BlZWQgPSAwIG1lYW5p
bmcgd2Ugd2FudCB0byBzdGF5IG9uIGluaXRpYWwgY2VsbAorICAgICAgICAgICAgICAgIGNoYW5n
ZVNwZWVkID0gMTsKKyAgICAgICAgICAgICAgICBvZmZzZXRBZ2UgPSB0aGlzLl9yYW5kb21DZWxs
T2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0QWdlICs9IHRoaXMuX3JhbmRvbUNlbGxPZmZzZXQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGRpc3QgPSAodGhpcy5faW5pdGlhbEVuZFNwcml0ZUNlbGxJ
RCAtIHRoaXMuX2luaXRpYWxTdGFydFNwcml0ZUNlbGxJRCk7CisgICAgICAgIHZhciByYXRpbyA9
IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIi
XS5DbGFtcCgoKG9mZnNldEFnZSAqIGNoYW5nZVNwZWVkKSAlIHRoaXMubGlmZVRpbWUpIC8gdGhp
cy5saWZlVGltZSk7CisgICAgICAgIHRoaXMuY2VsbEluZGV4ID0gdGhpcy5faW5pdGlhbFN0YXJ0
U3ByaXRlQ2VsbElEICsgKHJhdGlvICogZGlzdCkgfCAwOworICAgIH07CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBQYXJ0aWNsZS5wcm90b3R5cGUuX2luaGVyaXRQYXJ0aWNsZUluZm9Ub1N1YkVt
aXR0ZXIgPSBmdW5jdGlvbiAoc3ViRW1pdHRlcikgeworICAgICAgICBpZiAoc3ViRW1pdHRlci5w
YXJ0aWNsZVN5c3RlbS5lbWl0dGVyLnBvc2l0aW9uKSB7CisgICAgICAgICAgICB2YXIgZW1pdHRl
ck1lc2ggPSBzdWJFbWl0dGVyLnBhcnRpY2xlU3lzdGVtLmVtaXR0ZXI7CisgICAgICAgICAgICBl
bWl0dGVyTWVzaC5wb3NpdGlvbi5jb3B5RnJvbSh0aGlzLnBvc2l0aW9uKTsKKyAgICAgICAgICAg
IGlmIChzdWJFbWl0dGVyLmluaGVyaXREaXJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBlbWl0
dGVyTWVzaC5wb3NpdGlvbi5zdWJ0cmFjdFRvUmVmKHRoaXMuZGlyZWN0aW9uLCBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLlZlY3Rv
cjNbMF0pOworICAgICAgICAgICAgICAgIC8vIExvb2sgYXQgdXNpbmcgWSBhcyBmb3J3YXJkCisg
ICAgICAgICAgICAgICAgZW1pdHRlck1lc2gubG9va0F0KF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1swXSwgMCwgTWF0
aC5QSSAvIDIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgdmFyIGVtaXR0ZXJQb3NpdGlvbiA9IHN1YkVtaXR0ZXIucGFydGljbGVTeXN0ZW0u
ZW1pdHRlcjsKKyAgICAgICAgICAgIGVtaXR0ZXJQb3NpdGlvbi5jb3B5RnJvbSh0aGlzLnBvc2l0
aW9uKTsKKyAgICAgICAgfQorICAgICAgICAvLyBTZXQgaW5oZXJpdGVkVmVsb2NpdHlPZmZzZXQg
dG8gYmUgdXNlZCB3aGVuIG5ldyBwYXJ0aWNsZXMgYXJlIGNyZWF0ZWQKKyAgICAgICAgdGhpcy5k
aXJlY3Rpb24uc2NhbGVUb1JlZihzdWJFbWl0dGVyLmluaGVyaXRlZFZlbG9jaXR5QW1vdW50IC8g
MiwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRtcFZl
Y3RvcnMiXS5WZWN0b3IzWzBdKTsKKyAgICAgICAgc3ViRW1pdHRlci5wYXJ0aWNsZVN5c3RlbS5f
aW5oZXJpdGVkVmVsb2NpdHlPZmZzZXQuY29weUZyb20oX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdKTsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgUGFydGljbGUucHJvdG90eXBlLl9pbmhlcml0UGFy
dGljbGVJbmZvVG9TdWJFbWl0dGVycyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkU3ViRW1pdHRlcnMgJiYgdGhpcy5f
YXR0YWNoZWRTdWJFbWl0dGVycy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB0aGlzLl9hdHRh
Y2hlZFN1YkVtaXR0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YkVtaXR0ZXIpIHsKKyAgICAgICAg
ICAgICAgICBfdGhpcy5faW5oZXJpdFBhcnRpY2xlSW5mb1RvU3ViRW1pdHRlcihzdWJFbWl0dGVy
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIFBhcnRpY2xlLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuYWdlID0gMDsKKyAgICAgICAgdGhpcy5fY3VycmVudENvbG9yR3JhZGllbnQgPSBudWxs
OworICAgICAgICB0aGlzLl9jdXJyZW50U2l6ZUdyYWRpZW50ID0gbnVsbDsKKyAgICAgICAgdGhp
cy5fY3VycmVudEFuZ3VsYXJTcGVlZEdyYWRpZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY3Vy
cmVudFZlbG9jaXR5R3JhZGllbnQgPSBudWxsOworICAgICAgICB0aGlzLl9jdXJyZW50TGltaXRW
ZWxvY2l0eUdyYWRpZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY3VycmVudERyYWdHcmFkaWVu
dCA9IG51bGw7CisgICAgICAgIHRoaXMuY2VsbEluZGV4ID0gdGhpcy5wYXJ0aWNsZVN5c3RlbS5z
dGFydFNwcml0ZUNlbGxJRDsKKyAgICAgICAgdGhpcy5fcmFuZG9tQ2VsbE9mZnNldCA9IHVuZGVm
aW5lZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvcHkgdGhlIHByb3BlcnRpZXMgb2YgcGFy
dGljbGUgdG8gYW5vdGhlciBvbmUuCisgICAgICogQHBhcmFtIG90aGVyIHRoZSBwYXJ0aWNsZSB0
byBjb3B5IHRoZSBpbmZvcm1hdGlvbiB0by4KKyAgICAgKi8KKyAgICBQYXJ0aWNsZS5wcm90b3R5
cGUuY29weVRvID0gZnVuY3Rpb24gKG90aGVyKSB7CisgICAgICAgIG90aGVyLnBvc2l0aW9uLmNv
cHlGcm9tKHRoaXMucG9zaXRpb24pOworICAgICAgICBpZiAodGhpcy5faW5pdGlhbERpcmVjdGlv
bikgeworICAgICAgICAgICAgaWYgKG90aGVyLl9pbml0aWFsRGlyZWN0aW9uKSB7CisgICAgICAg
ICAgICAgICAgb3RoZXIuX2luaXRpYWxEaXJlY3Rpb24uY29weUZyb20odGhpcy5faW5pdGlhbERp
cmVjdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBvdGhlci5faW5pdGlhbERpcmVjdGlvbiA9IHRoaXMuX2luaXRpYWxEaXJlY3Rpb24uY2xv
bmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIG90aGVyLl9pbml0aWFsRGlyZWN0aW9uID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBv
dGhlci5kaXJlY3Rpb24uY29weUZyb20odGhpcy5kaXJlY3Rpb24pOworICAgICAgICBvdGhlci5j
b2xvci5jb3B5RnJvbSh0aGlzLmNvbG9yKTsKKyAgICAgICAgb3RoZXIuY29sb3JTdGVwLmNvcHlG
cm9tKHRoaXMuY29sb3JTdGVwKTsKKyAgICAgICAgb3RoZXIubGlmZVRpbWUgPSB0aGlzLmxpZmVU
aW1lOworICAgICAgICBvdGhlci5hZ2UgPSB0aGlzLmFnZTsKKyAgICAgICAgb3RoZXIuX3JhbmRv
bUNlbGxPZmZzZXQgPSB0aGlzLl9yYW5kb21DZWxsT2Zmc2V0OworICAgICAgICBvdGhlci5zaXpl
ID0gdGhpcy5zaXplOworICAgICAgICBvdGhlci5zY2FsZS5jb3B5RnJvbSh0aGlzLnNjYWxlKTsK
KyAgICAgICAgb3RoZXIuYW5nbGUgPSB0aGlzLmFuZ2xlOworICAgICAgICBvdGhlci5hbmd1bGFy
U3BlZWQgPSB0aGlzLmFuZ3VsYXJTcGVlZDsKKyAgICAgICAgb3RoZXIucGFydGljbGVTeXN0ZW0g
PSB0aGlzLnBhcnRpY2xlU3lzdGVtOworICAgICAgICBvdGhlci5jZWxsSW5kZXggPSB0aGlzLmNl
bGxJbmRleDsKKyAgICAgICAgb3RoZXIuaWQgPSB0aGlzLmlkOworICAgICAgICBvdGhlci5fYXR0
YWNoZWRTdWJFbWl0dGVycyA9IHRoaXMuX2F0dGFjaGVkU3ViRW1pdHRlcnM7CisgICAgICAgIGlm
ICh0aGlzLl9jdXJyZW50Q29sb3JHcmFkaWVudCkgeworICAgICAgICAgICAgb3RoZXIuX2N1cnJl
bnRDb2xvckdyYWRpZW50ID0gdGhpcy5fY3VycmVudENvbG9yR3JhZGllbnQ7CisgICAgICAgICAg
ICBvdGhlci5fY3VycmVudENvbG9yMS5jb3B5RnJvbSh0aGlzLl9jdXJyZW50Q29sb3IxKTsKKyAg
ICAgICAgICAgIG90aGVyLl9jdXJyZW50Q29sb3IyLmNvcHlGcm9tKHRoaXMuX2N1cnJlbnRDb2xv
cjIpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2l6ZUdyYWRpZW50KSB7
CisgICAgICAgICAgICBvdGhlci5fY3VycmVudFNpemVHcmFkaWVudCA9IHRoaXMuX2N1cnJlbnRT
aXplR3JhZGllbnQ7CisgICAgICAgICAgICBvdGhlci5fY3VycmVudFNpemUxID0gdGhpcy5fY3Vy
cmVudFNpemUxOworICAgICAgICAgICAgb3RoZXIuX2N1cnJlbnRTaXplMiA9IHRoaXMuX2N1cnJl
bnRTaXplMjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY3VycmVudEFuZ3VsYXJTcGVl
ZEdyYWRpZW50KSB7CisgICAgICAgICAgICBvdGhlci5fY3VycmVudEFuZ3VsYXJTcGVlZEdyYWRp
ZW50ID0gdGhpcy5fY3VycmVudEFuZ3VsYXJTcGVlZEdyYWRpZW50OworICAgICAgICAgICAgb3Ro
ZXIuX2N1cnJlbnRBbmd1bGFyU3BlZWQxID0gdGhpcy5fY3VycmVudEFuZ3VsYXJTcGVlZDE7Cisg
ICAgICAgICAgICBvdGhlci5fY3VycmVudEFuZ3VsYXJTcGVlZDIgPSB0aGlzLl9jdXJyZW50QW5n
dWxhclNwZWVkMjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY3VycmVudFZlbG9jaXR5
R3JhZGllbnQpIHsKKyAgICAgICAgICAgIG90aGVyLl9jdXJyZW50VmVsb2NpdHlHcmFkaWVudCA9
IHRoaXMuX2N1cnJlbnRWZWxvY2l0eUdyYWRpZW50OworICAgICAgICAgICAgb3RoZXIuX2N1cnJl
bnRWZWxvY2l0eTEgPSB0aGlzLl9jdXJyZW50VmVsb2NpdHkxOworICAgICAgICAgICAgb3RoZXIu
X2N1cnJlbnRWZWxvY2l0eTIgPSB0aGlzLl9jdXJyZW50VmVsb2NpdHkyOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9jdXJyZW50TGltaXRWZWxvY2l0eUdyYWRpZW50KSB7CisgICAgICAg
ICAgICBvdGhlci5fY3VycmVudExpbWl0VmVsb2NpdHlHcmFkaWVudCA9IHRoaXMuX2N1cnJlbnRM
aW1pdFZlbG9jaXR5R3JhZGllbnQ7CisgICAgICAgICAgICBvdGhlci5fY3VycmVudExpbWl0VmVs
b2NpdHkxID0gdGhpcy5fY3VycmVudExpbWl0VmVsb2NpdHkxOworICAgICAgICAgICAgb3RoZXIu
X2N1cnJlbnRMaW1pdFZlbG9jaXR5MiA9IHRoaXMuX2N1cnJlbnRMaW1pdFZlbG9jaXR5MjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY3VycmVudERyYWdHcmFkaWVudCkgeworICAgICAg
ICAgICAgb3RoZXIuX2N1cnJlbnREcmFnR3JhZGllbnQgPSB0aGlzLl9jdXJyZW50RHJhZ0dyYWRp
ZW50OworICAgICAgICAgICAgb3RoZXIuX2N1cnJlbnREcmFnMSA9IHRoaXMuX2N1cnJlbnREcmFn
MTsKKyAgICAgICAgICAgIG90aGVyLl9jdXJyZW50RHJhZzIgPSB0aGlzLl9jdXJyZW50RHJhZzI7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucGFydGljbGVTeXN0ZW0uaXNBbmltYXRpb25T
aGVldEVuYWJsZWQpIHsKKyAgICAgICAgICAgIG90aGVyLl9pbml0aWFsU3RhcnRTcHJpdGVDZWxs
SUQgPSB0aGlzLl9pbml0aWFsU3RhcnRTcHJpdGVDZWxsSUQ7CisgICAgICAgICAgICBvdGhlci5f
aW5pdGlhbEVuZFNwcml0ZUNlbGxJRCA9IHRoaXMuX2luaXRpYWxFbmRTcHJpdGVDZWxsSUQ7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucGFydGljbGVTeXN0ZW0udXNlUmFtcEdyYWRpZW50
cykgeworICAgICAgICAgICAgb3RoZXIucmVtYXBEYXRhLmNvcHlGcm9tKHRoaXMucmVtYXBEYXRh
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmFuZG9tTm9pc2VDb29yZGluYXRlczEp
IHsKKyAgICAgICAgICAgIGlmIChvdGhlci5fcmFuZG9tTm9pc2VDb29yZGluYXRlczEpIHsKKyAg
ICAgICAgICAgICAgICBvdGhlci5fcmFuZG9tTm9pc2VDb29yZGluYXRlczEuY29weUZyb20odGhp
cy5fcmFuZG9tTm9pc2VDb29yZGluYXRlczEpOworICAgICAgICAgICAgICAgIG90aGVyLl9yYW5k
b21Ob2lzZUNvb3JkaW5hdGVzMi5jb3B5RnJvbSh0aGlzLl9yYW5kb21Ob2lzZUNvb3JkaW5hdGVz
Mik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBv
dGhlci5fcmFuZG9tTm9pc2VDb29yZGluYXRlczEgPSB0aGlzLl9yYW5kb21Ob2lzZUNvb3JkaW5h
dGVzMS5jbG9uZSgpOworICAgICAgICAgICAgICAgIG90aGVyLl9yYW5kb21Ob2lzZUNvb3JkaW5h
dGVzMiA9IHRoaXMuX3JhbmRvbU5vaXNlQ29vcmRpbmF0ZXMyLmNsb25lKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworICAgIFBhcnRpY2xlLl9Db3VudCA9IDA7CisgICAgcmV0
dXJuIFBhcnRpY2xlOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QYXJ0aWNs
ZXMvcGFydGljbGVIZWxwZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vUGFydGljbGVzL3BhcnRpY2xlSGVscGVyLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogUGFydGljbGVIZWxwZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUGFydGljbGVIZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBhcnRpY2xlSGVscGVyOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAi
Li9NaXNjL3Rvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhf
Y29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5l
cy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2dwdVBhcnRpY2xlU3lzdGVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2dwdVBhcnRpY2xlU3lzdGVtICovICIu
L1BhcnRpY2xlcy9ncHVQYXJ0aWNsZVN5c3RlbS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9wYXJ0aWNsZVN5c3RlbVNldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wYXJ0aWNsZVN5c3RlbVNldCAqLyAiLi9QYXJ0aWNsZXMv
cGFydGljbGVTeXN0ZW1TZXQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFydGlj
bGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vcGFydGljbGVTeXN0ZW0gKi8gIi4vUGFydGljbGVzL3BhcnRpY2xlU3lzdGVtLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVz
L2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworCisKKworCisKKworCisK
Ky8qKgorICogVGhpcyBjbGFzcyBpcyBtYWRlIGZvciBvbiBvbmUtbGluZXIgc3RhdGljIG1ldGhv
ZCB0byBoZWxwIGNyZWF0aW5nIHBhcnRpY2xlIHN5c3RlbSBzZXQuCisgKi8KK3ZhciBQYXJ0aWNs
ZUhlbHBlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQYXJ0
aWNsZUhlbHBlcigpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgZGVmYXVsdCBw
YXJ0aWNsZSBzeXN0ZW0gdGhhdCB5b3UgY2FuIHR3ZWFrCisgICAgICogQHBhcmFtIGVtaXR0ZXIg
ZGVmaW5lcyB0aGUgZW1pdHRlciB0byB1c2UKKyAgICAgKiBAcGFyYW0gY2FwYWNpdHkgZGVmaW5l
cyB0aGUgc3lzdGVtIGNhcGFjaXR5IChkZWZhdWx0IGlzIDUwMCBwYXJ0aWNsZXMpCisgICAgICog
QHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gdXNl
R1BVIGRlZmluZXMgaWYgYSBHUFVQYXJ0aWNsZVN5c3RlbSBtdXN0IGJlIGNyZWF0ZWQgKGRlZmF1
bHQgaXMgZmFsc2UpCisgICAgICogQHJldHVybnMgdGhlIG5ldyBQYXJ0aWNsZSBzeXN0ZW0KKyAg
ICAgKi8KKyAgICBQYXJ0aWNsZUhlbHBlci5DcmVhdGVEZWZhdWx0ID0gZnVuY3Rpb24gKGVtaXR0
ZXIsIGNhcGFjaXR5LCBzY2VuZSwgdXNlR1BVKSB7CisgICAgICAgIGlmIChjYXBhY2l0eSA9PT0g
dm9pZCAwKSB7IGNhcGFjaXR5ID0gNTAwOyB9CisgICAgICAgIGlmICh1c2VHUFUgPT09IHZvaWQg
MCkgeyB1c2VHUFUgPSBmYWxzZTsgfQorICAgICAgICB2YXIgc3lzdGVtOworICAgICAgICBpZiAo
dXNlR1BVKSB7CisgICAgICAgICAgICBzeXN0ZW0gPSBuZXcgX2dwdVBhcnRpY2xlU3lzdGVtX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkdQVVBhcnRpY2xlU3lzdGVtIl0oImRlZmF1bHQg
c3lzdGVtIiwgeyBjYXBhY2l0eTogY2FwYWNpdHkgfSwgc2NlbmUpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgc3lzdGVtID0gbmV3IF9wYXJ0aWNsZVN5c3RlbV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQYXJ0aWNsZVN5c3RlbSJdKCJkZWZhdWx0IHN5c3Rl
bSIsIGNhcGFjaXR5LCBzY2VuZSk7CisgICAgICAgIH0KKyAgICAgICAgc3lzdGVtLmVtaXR0ZXIg
PSBlbWl0dGVyOworICAgICAgICBzeXN0ZW0ucGFydGljbGVUZXh0dXJlID0gbmV3IF9NYXRlcmlh
bHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0dXJl
Il0oImh0dHBzOi8vd3d3LmJhYnlsb25qcy5jb20vYXNzZXRzL0ZsYXJlLnBuZyIsIHN5c3RlbS5n
ZXRTY2VuZSgpKTsKKyAgICAgICAgc3lzdGVtLmNyZWF0ZUNvbmVFbWl0dGVyKDAuMSwgTWF0aC5Q
SSAvIDQpOworICAgICAgICAvLyBQYXJ0aWNsZSBjb2xvcgorICAgICAgICBzeXN0ZW0uY29sb3Ix
ID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNv
bG9yNCJdKDEuMCwgMS4wLCAxLjAsIDEuMCk7CisgICAgICAgIHN5c3RlbS5jb2xvcjIgPSBuZXcg
X01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3I0Il0o
MS4wLCAxLjAsIDEuMCwgMS4wKTsKKyAgICAgICAgc3lzdGVtLmNvbG9yRGVhZCA9IG5ldyBfTWF0
aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjQiXSgxLjAs
IDEuMCwgMS4wLCAwLjApOworICAgICAgICAvLyBQYXJ0aWNsZSBTaXplCisgICAgICAgIHN5c3Rl
bS5taW5TaXplID0gMC4xOworICAgICAgICBzeXN0ZW0ubWF4U2l6ZSA9IDAuMTsKKyAgICAgICAg
Ly8gRW1pc3Npb24gc3BlZWQKKyAgICAgICAgc3lzdGVtLm1pbkVtaXRQb3dlciA9IDI7CisgICAg
ICAgIHN5c3RlbS5tYXhFbWl0UG93ZXIgPSAyOworICAgICAgICAvLyBVcGRhdGUgc3BlZWQKKyAg
ICAgICAgc3lzdGVtLnVwZGF0ZVNwZWVkID0gMSAvIDYwOworICAgICAgICBzeXN0ZW0uZW1pdFJh
dGUgPSAzMDsKKyAgICAgICAgcmV0dXJuIHN5c3RlbTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFRoaXMgaXMgdGhlIG1haW4gc3RhdGljIG1ldGhvZCAob25lLWxpbmVyKSBvZiB0aGlzIGhlbHBl
ciB0byBjcmVhdGUgZGlmZmVyZW50IHBhcnRpY2xlIHN5c3RlbXMKKyAgICAgKiBAcGFyYW0gdHlw
ZSBUaGlzIHN0cmluZyByZXByZXNlbnRzIHRoZSB0eXBlIHRvIHRoZSBwYXJ0aWNsZSBzeXN0ZW0g
dG8gY3JlYXRlCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB3aGVyZSB0aGUgcGFydGlj
bGUgc3lzdGVtIHNob3VsZCBsaXZlCisgICAgICogQHBhcmFtIGdwdSBJZiB0aGUgc3lzdGVtIHdp
bGwgdXNlIGdwdQorICAgICAqIEByZXR1cm5zIHRoZSBQYXJ0aWNsZVN5c3RlbVNldCBjcmVhdGVk
CisgICAgICovCisgICAgUGFydGljbGVIZWxwZXIuQ3JlYXRlQXN5bmMgPSBmdW5jdGlvbiAodHlw
ZSwgc2NlbmUsIGdwdSkgeworICAgICAgICBpZiAoZ3B1ID09PSB2b2lkIDApIHsgZ3B1ID0gZmFs
c2U7IH0KKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgc2NlbmUgPSBfRW5naW5l
c19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmVTdG9yZSJd
Lkxhc3RDcmVhdGVkU2NlbmU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRva2VuID0ge307Cisg
ICAgICAgIHNjZW5lLl9hZGRQZW5kaW5nRGF0YSh0b2tlbik7CisgICAgICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBpZiAoZ3B1
ICYmICFfZ3B1UGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siR1BV
UGFydGljbGVTeXN0ZW0iXS5Jc1N1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgIHNjZW5lLl9y
ZW1vdmVQZW5kaW5nRGF0YSh0b2tlbik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCgi
UGFydGljbGUgc3lzdGVtIHdpdGggR1BVIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJUb29scyJdLkxvYWRGaWxlKFBhcnRpY2xlSGVscGVyLkJhc2VBc3NldHNVcmwgKyAiL3N5c3Rl
bXMvIiArIHR5cGUgKyAiLmpzb24iLCBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgICAg
IHNjZW5lLl9yZW1vdmVQZW5kaW5nRGF0YSh0b2tlbik7CisgICAgICAgICAgICAgICAgdmFyIG5l
d0RhdGEgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc29sdmUoX3BhcnRpY2xlU3lzdGVtU2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIlBhcnRpY2xlU3lzdGVtU2V0Il0uUGFyc2UobmV3RGF0YSwgc2NlbmUsIGdwdSkpOworICAg
ICAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgIHNjZW5lLl9yZW1vdmVQZW5kaW5nRGF0YSh0b2tlbik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdCgiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0aGUgY3Jl
YXRpb24gb2YgeW91ciBwYXJ0aWNsZSBzeXN0ZW0uIENoZWNrIGlmIHlvdXIgdHlwZSAnIiArIHR5
cGUgKyAiJyBleGlzdHMuIik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTdGF0aWMgZnVuY3Rpb24gdXNlZCB0byBleHBvcnQgYSBwYXJ0aWNs
ZSBzeXN0ZW0gdG8gYSBQYXJ0aWNsZVN5c3RlbVNldCB2YXJpYWJsZS4KKyAgICAgKiBQbGVhc2Ug
bm90ZSB0aGF0IHRoZSBlbWl0dGVyIHNoYXBlIGlzIG5vdCBleHBvcnRlZAorICAgICAqIEBwYXJh
bSBzeXN0ZW1zIGRlZmluZXMgdGhlIHBhcnRpY2xlIHN5c3RlbXMgdG8gZXhwb3J0CisgICAgICog
QHJldHVybnMgdGhlIGNyZWF0ZWQgcGFydGljbGUgc3lzdGVtIHNldAorICAgICAqLworICAgIFBh
cnRpY2xlSGVscGVyLkV4cG9ydFNldCA9IGZ1bmN0aW9uIChzeXN0ZW1zKSB7CisgICAgICAgIHZh
ciBzZXQgPSBuZXcgX3BhcnRpY2xlU3lzdGVtU2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIlBhcnRpY2xlU3lzdGVtU2V0Il0oKTsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBzeXN0
ZW1zXzEgPSBzeXN0ZW1zOyBfaSA8IHN5c3RlbXNfMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAg
ICAgIHZhciBzeXN0ZW0gPSBzeXN0ZW1zXzFbX2ldOworICAgICAgICAgICAgc2V0LnN5c3RlbXMu
cHVzaChzeXN0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXQ7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXRzIG9yIHNldHMgYmFzZSBBc3NldHMgVVJMCisgICAgICovCisgICAg
UGFydGljbGVIZWxwZXIuQmFzZUFzc2V0c1VybCA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5QQVJUSUNMRVNfQmFzZUFzc2V0c1Vy
bDsKKyAgICByZXR1cm4gUGFydGljbGVIZWxwZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1BhcnRpY2xlcy9wYXJ0aWNsZVN5c3RlbS50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9QYXJ0aWNsZXMvcGFydGljbGVT
eXN0ZW0udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBQYXJ0aWNsZVN5c3RlbSAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
UGFydGljbGVTeXN0ZW07IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2dyYWRpZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9ncmFkaWVudHMgKi8gIi4vTWlzYy9ncmFk
aWVudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
aXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9N
YXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0aHMvbWF0aC5zY2FsYXIgKi8gIi4vTWF0aHMvbWF0aC5zY2FsYXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2J1ZmZl
ciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01l
c2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9hYnN0cmFjdE1lc2ggKi8gIi4vTWVzaGVzL2Fic3Ry
YWN0TWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGVyaWFscy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlh
bHMvbWF0ZXJpYWxIZWxwZXIgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1
cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NYXRlcmlhbHMvaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAqLyAiLi9NYXRl
cmlhbHMvaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJl
cy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yYXdUZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL3Jhd1RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3Jhd1RleHR1
cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX1By
b2NlZHVyYWxzX3Byb2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL1Byb2NlZHVy
YWxzL3Byb2NlZHVyYWxUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1cmFs
cy9wcm9jZWR1cmFsVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2lu
ZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BhcnRpY2xlc19FbWl0dGVy
VHlwZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9QYXJ0aWNsZXMvRW1pdHRlclR5cGVzL2luZGV4ICovICIuL1BhcnRpY2xl
cy9FbWl0dGVyVHlwZXMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFz
ZVBhcnRpY2xlU3lzdGVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9iYXNlUGFydGljbGVTeXN0ZW0gKi8gIi4vUGFydGljbGVzL2Jhc2VQ
YXJ0aWNsZVN5c3RlbS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYXJ0aWNsZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
cGFydGljbGUgKi8gIi4vUGFydGljbGVzL3BhcnRpY2xlLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3N1YkVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1YkVtaXR0ZXIgKi8gIi4vUGFydGljbGVzL3N1YkVtaXR0
ZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9F
bmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4v
TWlzYy9kZWNvcmF0b3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVl
cENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01pc2MvZGVlcENvcGllciAqLyAiLi9NaXNjL2RlZXBDb3BpZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3R5cGVTdG9yZSAq
LyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzX3BhcnRpY2xlc19mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvcGFydGljbGVzLmZyYWdtZW50ICovICIu
L1NoYWRlcnMvcGFydGljbGVzLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNfcGFydGljbGVzX3ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvcGFydGljbGVzLnZlcnRleCAq
LyAiLi9TaGFkZXJzL3BhcnRpY2xlcy52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0
aC5jb2xvci50cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIGEgcGFydGljbGUgc3lzdGVtIGluIEJh
Ynlsb24uCisgKiBQYXJ0aWNsZXMgYXJlIG9mdGVuIHNtYWxsIHNwcml0ZXMgdXNlZCB0byBzaW11
bGF0ZSBoYXJkLXRvLXJlcHJvZHVjZSBwaGVub21lbmEgbGlrZSBmaXJlLCBzbW9rZSwgd2F0ZXIs
IG9yIGFic3RyYWN0IHZpc3VhbCBlZmZlY3RzIGxpa2UgbWFnaWMgZ2xpdHRlciBhbmQgZmFlcnkg
ZHVzdC4KKyAqIFBhcnRpY2xlcyBjYW4gdGFrZSBkaWZmZXJlbnQgc2hhcGVzIHdoaWxlIGVtaXR0
ZWQgbGlrZSBib3gsIHNwaGVyZSwgY29uZSBvciB5b3UgY2FuIHdyaXRlIHlvdXIgY3VzdG9tIGZ1
bmN0aW9uLgorICogQGV4YW1wbGUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAx
L3BhcnRpY2xlcworICovCit2YXIgUGFydGljbGVTeXN0ZW0gPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oUGFydGljbGVTeXN0ZW0sIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5z
dGFudGlhdGVzIGEgcGFydGljbGUgc3lzdGVtLgorICAgICAqIFBhcnRpY2xlcyBhcmUgb2Z0ZW4g
c21hbGwgc3ByaXRlcyB1c2VkIHRvIHNpbXVsYXRlIGhhcmQtdG8tcmVwcm9kdWNlIHBoZW5vbWVu
YSBsaWtlIGZpcmUsIHNtb2tlLCB3YXRlciwgb3IgYWJzdHJhY3QgdmlzdWFsIGVmZmVjdHMgbGlr
ZSBtYWdpYyBnbGl0dGVyIGFuZCBmYWVyeSBkdXN0LgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBu
YW1lIG9mIHRoZSBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gY2FwYWNpdHkgVGhlIG1h
eCBudW1iZXIgb2YgcGFydGljbGVzIGFsaXZlIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAgKiBAcGFy
YW0gc2NlbmUgVGhlIHNjZW5lIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gYmVsb25ncyB0bworICAgICAq
IEBwYXJhbSBjdXN0b21FZmZlY3QgYSBjdXN0b20gZWZmZWN0IHVzZWQgdG8gY2hhbmdlIHRoZSB3
YXkgcGFydGljbGVzIGFyZSByZW5kZXJlZCBieSBkZWZhdWx0CisgICAgICogQHBhcmFtIGlzQW5p
bWF0aW9uU2hlZXRFbmFibGVkIE11c3QgYmUgdHJ1ZSBpZiB1c2luZyBhIHNwcml0ZXNoZWV0IHRv
IGFuaW1hdGUgdGhlIHBhcnRpY2xlcyB0ZXh0dXJlCisgICAgICogQHBhcmFtIGVwc2lsb24gT2Zm
c2V0IHVzZWQgdG8gcmVuZGVyIHRoZSBwYXJ0aWNsZXMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQ
YXJ0aWNsZVN5c3RlbShuYW1lLCBjYXBhY2l0eSwgc2NlbmUsIGN1c3RvbUVmZmVjdCwgaXNBbmlt
YXRpb25TaGVldEVuYWJsZWQsIGVwc2lsb24pIHsKKyAgICAgICAgaWYgKGN1c3RvbUVmZmVjdCA9
PT0gdm9pZCAwKSB7IGN1c3RvbUVmZmVjdCA9IG51bGw7IH0KKyAgICAgICAgaWYgKGlzQW5pbWF0
aW9uU2hlZXRFbmFibGVkID09PSB2b2lkIDApIHsgaXNBbmltYXRpb25TaGVldEVuYWJsZWQgPSBm
YWxzZTsgfQorICAgICAgICBpZiAoZXBzaWxvbiA9PT0gdm9pZCAwKSB7IGVwc2lsb24gPSAwLjAx
OyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5faW5oZXJpdGVkVmVsb2NpdHlPZmZzZXQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgpOworICAgICAgICAvKioKKyAg
ICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGRpc3Bvc2VkCisg
ICAgICAgICovCisgICAgICAgIF90aGlzLm9uRGlzcG9zZU9ic2VydmFibGUgPSBuZXcgX01pc2Nf
b2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsK
KyAgICAgICAgX3RoaXMuX3BhcnRpY2xlcyA9IG5ldyBBcnJheSgpOworICAgICAgICBfdGhpcy5f
c3RvY2tQYXJ0aWNsZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgX3RoaXMuX25ld1BhcnRzRXhj
ZXNzID0gMDsKKyAgICAgICAgX3RoaXMuX3ZlcnRleEJ1ZmZlcnMgPSB7fTsKKyAgICAgICAgX3Ro
aXMuX3NjYWxlZENvbG9yU3RlcCA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjRfX1siQ29sb3I0Il0oMCwgMCwgMCwgMCk7CisgICAgICAgIF90aGlzLl9j
b2xvckRpZmYgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI0X19bIkNvbG9yNCJdKDAsIDAsIDAsIDApOworICAgICAgICBfdGhpcy5fc2NhbGVkRGlyZWN0
aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
Y3RvcjMiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9zY2FsZWRHcmF2aXR5ID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7
CisgICAgICAgIF90aGlzLl9jdXJyZW50UmVuZGVySWQgPSAtMTsKKyAgICAgICAgX3RoaXMuX3Vz
ZUluc3RhbmNpbmcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX3N0YXJ0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgX3RoaXMuX3N0b3BwZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2FjdHVhbEZyYW1l
ID0gMDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2N1cnJlbnRFbWl0
UmF0ZTEgPSAwOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhpcy5fY3VycmVu
dEVtaXRSYXRlMiA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9j
dXJyZW50U3RhcnRTaXplMSA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90
aGlzLl9jdXJyZW50U3RhcnRTaXplMiA9IDA7CisgICAgICAgIF90aGlzLl9yYXdUZXh0dXJlV2lk
dGggPSAyNTY7CisgICAgICAgIF90aGlzLl91c2VSYW1wR3JhZGllbnRzID0gZmFsc2U7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIElmIHRoZSBwYXJ0aWNsZSBz
eXN0ZW1zIGVtaXR0ZXIgc2hvdWxkIGJlIGRpc3Bvc2VkIHdoZW4gdGhlIHBhcnRpY2xlIHN5c3Rl
bSBpcyBkaXNwb3NlZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2Rpc3Bvc2VFbWl0dGVy
T25EaXNwb3NlID0gZmFsc2U7CisgICAgICAgIC8vIHN0YXJ0IG9mIHN1YiBzeXN0ZW0gbWV0aG9k
cworICAgICAgICAvKioKKyAgICAgICAgICogIlJlY3ljbGVzIiBvbmUgb2YgdGhlIHBhcnRpY2xl
IGJ5IGNvcHlpbmcgaXQgYmFjayB0byB0aGUgInN0b2NrIiBvZiBwYXJ0aWNsZXMgYW5kIHJlbW92
aW5nIGl0IGZyb20gdGhlIGFjdGl2ZSBsaXN0LgorICAgICAgICAgKiBJdHMgbGlmZXRpbWUgd2ls
bCBzdGFydCBiYWNrIGF0IDAuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5yZWN5Y2xlUGFy
dGljbGUgPSBmdW5jdGlvbiAocGFydGljbGUpIHsKKyAgICAgICAgICAgIC8vIG1vdmUgcGFydGlj
bGUgZnJvbSBhY3RpdmVQYXJ0aWNsZSBsaXN0IHRvIHN0b2NrIHBhcnRpY2xlcworICAgICAgICAg
ICAgdmFyIGxhc3RQYXJ0aWNsZSA9IF90aGlzLl9wYXJ0aWNsZXMucG9wKCk7CisgICAgICAgICAg
ICBpZiAobGFzdFBhcnRpY2xlICE9PSBwYXJ0aWNsZSkgeworICAgICAgICAgICAgICAgIGxhc3RQ
YXJ0aWNsZS5jb3B5VG8ocGFydGljbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgX3Ro
aXMuX3N0b2NrUGFydGljbGVzLnB1c2gobGFzdFBhcnRpY2xlKTsKKyAgICAgICAgfTsKKyAgICAg
ICAgX3RoaXMuX2NyZWF0ZVBhcnRpY2xlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFy
IHBhcnRpY2xlOworICAgICAgICAgICAgaWYgKF90aGlzLl9zdG9ja1BhcnRpY2xlcy5sZW5ndGgg
IT09IDApIHsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZSA9IF90aGlzLl9zdG9ja1BhcnRpY2xl
cy5wb3AoKTsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fcmVzZXQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBhcnRpY2xlID0gbmV3IF9w
YXJ0aWNsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siUGFydGljbGUiXShfdGhpcyk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBBdHRhY2ggZW1pdHRlcnMKKyAgICAgICAg
ICAgIGlmIChfdGhpcy5fc3ViRW1pdHRlcnMgJiYgX3RoaXMuX3N1YkVtaXR0ZXJzLmxlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgc3ViRW1pdHRlcnMgPSBfdGhpcy5fc3ViRW1pdHRl
cnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogX3RoaXMuX3N1YkVtaXR0ZXJzLmxlbmd0aCld
OworICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9hdHRhY2hlZFN1YkVtaXR0ZXJzID0gW107Cisg
ICAgICAgICAgICAgICAgc3ViRW1pdHRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3ViRW1pdHRlcikg
eworICAgICAgICAgICAgICAgICAgICBpZiAoc3ViRW1pdHRlci50eXBlID09PSBfc3ViRW1pdHRl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siU3ViRW1pdHRlclR5cGUiXS5BVFRBQ0hF
RCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0VtaXR0ZXIgPSBzdWJFbWl0dGVy
LmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fYXR0YWNoZWRTdWJF
bWl0dGVycy5wdXNoKG5ld0VtaXR0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3RW1p
dHRlci5wYXJ0aWNsZVN5c3RlbS5zdGFydCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcGFydGlj
bGU7CisgICAgICAgIH07CisgICAgICAgIF90aGlzLl9lbWl0RnJvbVBhcnRpY2xlID0gZnVuY3Rp
b24gKHBhcnRpY2xlKSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLl9zdWJFbWl0dGVycyB8fCBf
dGhpcy5fc3ViRW1pdHRlcnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHRlbXBsYXRlSW5kZXggPSBNYXRoLmZs
b29yKE1hdGgucmFuZG9tKCkgKiBfdGhpcy5fc3ViRW1pdHRlcnMubGVuZ3RoKTsKKyAgICAgICAg
ICAgIF90aGlzLl9zdWJFbWl0dGVyc1t0ZW1wbGF0ZUluZGV4XS5mb3JFYWNoKGZ1bmN0aW9uIChz
dWJFbWl0dGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKHN1YkVtaXR0ZXIudHlwZSA9PT0gX3N1
YkVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bIlN1YkVtaXR0ZXJUeXBlIl0u
RU5EKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzdWJTeXN0ZW0gPSBzdWJFbWl0dGVyLmNs
b25lKCk7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9pbmhlcml0UGFydGljbGVJbmZv
VG9TdWJFbWl0dGVyKHN1YlN5c3RlbSk7CisgICAgICAgICAgICAgICAgICAgIHN1YlN5c3RlbS5w
YXJ0aWNsZVN5c3RlbS5fcm9vdFBhcnRpY2xlU3lzdGVtID0gX3RoaXM7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLmFjdGl2ZVN1YlN5c3RlbXMucHVzaChzdWJTeXN0ZW0ucGFydGljbGVTeXN0
ZW0pOworICAgICAgICAgICAgICAgICAgICBzdWJTeXN0ZW0ucGFydGljbGVTeXN0ZW0uc3RhcnQo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAgICAg
ICAgX3RoaXMuX2NhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgICAgIF90aGlzLl9lcHNpbG9uID0g
ZXBzaWxvbjsKKyAgICAgICAgX3RoaXMuX2lzQW5pbWF0aW9uU2hlZXRFbmFibGVkID0gaXNBbmlt
YXRpb25TaGVldEVuYWJsZWQ7CisgICAgICAgIF90aGlzLl9zY2VuZSA9IHNjZW5lIHx8IF9Fbmdp
bmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJFbmdpbmVTdG9y
ZSJdLkxhc3RDcmVhdGVkU2NlbmU7CisgICAgICAgIC8vIFNldHVwIHRoZSBkZWZhdWx0IHByb2Nl
c3NpbmcgY29uZmlndXJhdGlvbiB0byB0aGUgc2NlbmUuCisgICAgICAgIF90aGlzLl9hdHRhY2hJ
bWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKG51bGwpOworICAgICAgICBfdGhpcy5fY3VzdG9t
RWZmZWN0ID0gY3VzdG9tRWZmZWN0OworICAgICAgICBfdGhpcy5fc2NlbmUucGFydGljbGVTeXN0
ZW1zLnB1c2goX3RoaXMpOworICAgICAgICBfdGhpcy5fdXNlSW5zdGFuY2luZyA9IF90aGlzLl9z
Y2VuZS5nZXRFbmdpbmUoKS5nZXRDYXBzKCkuaW5zdGFuY2VkQXJyYXlzOworICAgICAgICBfdGhp
cy5fY3JlYXRlSW5kZXhCdWZmZXIoKTsKKyAgICAgICAgX3RoaXMuX2NyZWF0ZVZlcnRleEJ1ZmZl
cnMoKTsKKyAgICAgICAgLy8gRGVmYXVsdCBlbWl0dGVyIHR5cGUKKyAgICAgICAgX3RoaXMucGFy
dGljbGVFbWl0dGVyVHlwZSA9IG5ldyBfUGFydGljbGVzX0VtaXR0ZXJUeXBlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siQm94UGFydGljbGVFbWl0dGVyIl0oKTsKKyAgICAg
ICAgLy8gVXBkYXRlCisgICAgICAgIF90aGlzLnVwZGF0ZUZ1bmN0aW9uID0gZnVuY3Rpb24gKHBh
cnRpY2xlcykgeworICAgICAgICAgICAgdmFyIG5vaXNlVGV4dHVyZVNpemUgPSBudWxsOworICAg
ICAgICAgICAgdmFyIG5vaXNlVGV4dHVyZURhdGEgPSBudWxsOworICAgICAgICAgICAgaWYgKF90
aGlzLm5vaXNlVGV4dHVyZSkgeyAvLyBXZSBuZWVkIHRvIGdldCB0ZXh0dXJlIGRhdGEgYmFjayB0
byBDUFUKKyAgICAgICAgICAgICAgICBub2lzZVRleHR1cmVTaXplID0gX3RoaXMubm9pc2VUZXh0
dXJlLmdldFNpemUoKTsKKyAgICAgICAgICAgICAgICBub2lzZVRleHR1cmVEYXRhID0gKF90aGlz
Lm5vaXNlVGV4dHVyZS5nZXRDb250ZW50KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcGFydGljbGUgPSBw
YXJ0aWNsZXNbaW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBzY2FsZWRVcGRhdGVTcGVlZCA9
IF90aGlzLl9zY2FsZWRVcGRhdGVTcGVlZDsKKyAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNB
Z2UgPSBwYXJ0aWNsZS5hZ2U7CisgICAgICAgICAgICAgICAgcGFydGljbGUuYWdlICs9IHNjYWxl
ZFVwZGF0ZVNwZWVkOworICAgICAgICAgICAgICAgIC8vIEV2YWx1YXRlIHN0ZXAgdG8gZGVhdGgK
KyAgICAgICAgICAgICAgICBpZiAocGFydGljbGUuYWdlID4gcGFydGljbGUubGlmZVRpbWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBwYXJ0aWNsZS5hZ2UgLSBwcmV2aW91c0Fn
ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9sZERpZmYgPSBwYXJ0aWNsZS5saWZlVGltZSAt
IHByZXZpb3VzQWdlOworICAgICAgICAgICAgICAgICAgICBzY2FsZWRVcGRhdGVTcGVlZCA9IChv
bGREaWZmICogc2NhbGVkVXBkYXRlU3BlZWQpIC8gZGlmZjsKKyAgICAgICAgICAgICAgICAgICAg
cGFydGljbGUuYWdlID0gcGFydGljbGUubGlmZVRpbWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHZhciByYXRpbyA9IHBhcnRpY2xlLmFnZSAvIHBhcnRpY2xlLmxpZmVUaW1l
OworICAgICAgICAgICAgICAgIC8vIENvbG9yCisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9j
b2xvckdyYWRpZW50cyAmJiBfdGhpcy5fY29sb3JHcmFkaWVudHMubGVuZ3RoID4gMCkgeworICAg
ICAgICAgICAgICAgICAgICBfTWlzY19ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRDdXJyZW50R3JhZGllbnQocmF0aW8sIF90aGlzLl9j
b2xvckdyYWRpZW50cywgZnVuY3Rpb24gKGN1cnJlbnRHcmFkaWVudCwgbmV4dEdyYWRpZW50LCBz
Y2FsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRHcmFkaWVudCAhPT0g
cGFydGljbGUuX2N1cnJlbnRDb2xvckdyYWRpZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFydGljbGUuX2N1cnJlbnRDb2xvcjEuY29weUZyb20ocGFydGljbGUuX2N1cnJlbnRD
b2xvcjIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRHcmFkaWVudC5nZXRDb2xv
clRvUmVmKHBhcnRpY2xlLl9jdXJyZW50Q29sb3IyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJ0aWNsZS5fY3VycmVudENvbG9yR3JhZGllbnQgPSBjdXJyZW50R3JhZGllbnQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0aHNf
bWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX1siQ29sb3I0Il0uTGVycFRv
UmVmKHBhcnRpY2xlLl9jdXJyZW50Q29sb3IxLCBwYXJ0aWNsZS5fY3VycmVudENvbG9yMiwgc2Nh
bGUsIHBhcnRpY2xlLmNvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXJ0
aWNsZS5jb2xvclN0ZXAuc2NhbGVUb1JlZihzY2FsZWRVcGRhdGVTcGVlZCwgX3RoaXMuX3NjYWxl
ZENvbG9yU3RlcCk7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLmNvbG9yLmFkZEluUGxh
Y2UoX3RoaXMuX3NjYWxlZENvbG9yU3RlcCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0
aWNsZS5jb2xvci5hIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuY29s
b3IuYSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgLy8gQW5ndWxhciBzcGVlZAorICAgICAgICAgICAgICAgIGlmIChfdGhpcy5f
YW5ndWxhclNwZWVkR3JhZGllbnRzICYmIF90aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHMubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19ncmFkaWVudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRDdXJyZW50R3JhZGllbnQo
cmF0aW8sIF90aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHMsIGZ1bmN0aW9uIChjdXJyZW50R3Jh
ZGllbnQsIG5leHRHcmFkaWVudCwgc2NhbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50R3JhZGllbnQgIT09IHBhcnRpY2xlLl9jdXJyZW50QW5ndWxhclNwZWVkR3JhZGll
bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3VycmVudEFuZ3Vs
YXJTcGVlZDEgPSBwYXJ0aWNsZS5fY3VycmVudEFuZ3VsYXJTcGVlZDI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRBbmd1bGFyU3BlZWQyID0gbmV4dEdyYWRp
ZW50LmdldEZhY3RvcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9j
dXJyZW50QW5ndWxhclNwZWVkR3JhZGllbnQgPSBjdXJyZW50R3JhZGllbnQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5hbmd1bGFy
U3BlZWQgPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
U2NhbGFyIl0uTGVycChwYXJ0aWNsZS5fY3VycmVudEFuZ3VsYXJTcGVlZDEsIHBhcnRpY2xlLl9j
dXJyZW50QW5ndWxhclNwZWVkMiwgc2NhbGUpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGFydGljbGUuYW5nbGUgKz0gcGFydGlj
bGUuYW5ndWxhclNwZWVkICogc2NhbGVkVXBkYXRlU3BlZWQ7CisgICAgICAgICAgICAgICAgLy8g
RGlyZWN0aW9uCisgICAgICAgICAgICAgICAgdmFyIGRpcmVjdGlvblNjYWxlID0gc2NhbGVkVXBk
YXRlU3BlZWQ7CisgICAgICAgICAgICAgICAgLy8vIFZlbG9jaXR5CisgICAgICAgICAgICAgICAg
aWYgKF90aGlzLl92ZWxvY2l0eUdyYWRpZW50cyAmJiBfdGhpcy5fdmVsb2NpdHlHcmFkaWVudHMu
bGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19ncmFkaWVudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRDdXJyZW50R3JhZGll
bnQocmF0aW8sIF90aGlzLl92ZWxvY2l0eUdyYWRpZW50cywgZnVuY3Rpb24gKGN1cnJlbnRHcmFk
aWVudCwgbmV4dEdyYWRpZW50LCBzY2FsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnRHcmFkaWVudCAhPT0gcGFydGljbGUuX2N1cnJlbnRWZWxvY2l0eUdyYWRpZW50KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRWZWxvY2l0eTEg
PSBwYXJ0aWNsZS5fY3VycmVudFZlbG9jaXR5MjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJ0aWNsZS5fY3VycmVudFZlbG9jaXR5MiA9IG5leHRHcmFkaWVudC5nZXRGYWN0b3IoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3VycmVudFZlbG9jaXR5R3Jh
ZGllbnQgPSBjdXJyZW50R3JhZGllbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb25TY2FsZSAqPSBfTWF0aHNfbWF0aF9zY2FsYXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NhbGFyIl0uTGVycChwYXJ0aWNsZS5fY3Vy
cmVudFZlbG9jaXR5MSwgcGFydGljbGUuX2N1cnJlbnRWZWxvY2l0eTIsIHNjYWxlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBh
cnRpY2xlLmRpcmVjdGlvbi5zY2FsZVRvUmVmKGRpcmVjdGlvblNjYWxlLCBfdGhpcy5fc2NhbGVk
RGlyZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAvLy8gTGltaXQgdmVsb2NpdHkKKyAgICAgICAg
ICAgICAgICBpZiAoX3RoaXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHMgJiYgX3RoaXMuX2xpbWl0
VmVsb2NpdHlHcmFkaWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICBfTWlz
Y19ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIi
XS5HZXRDdXJyZW50R3JhZGllbnQocmF0aW8sIF90aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRz
LCBmdW5jdGlvbiAoY3VycmVudEdyYWRpZW50LCBuZXh0R3JhZGllbnQsIHNjYWxlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEdyYWRpZW50ICE9PSBwYXJ0aWNsZS5fY3Vy
cmVudExpbWl0VmVsb2NpdHlHcmFkaWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcnRpY2xlLl9jdXJyZW50TGltaXRWZWxvY2l0eTEgPSBwYXJ0aWNsZS5fY3VycmVudExpbWl0
VmVsb2NpdHkyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9jdXJyZW50
TGltaXRWZWxvY2l0eTIgPSBuZXh0R3JhZGllbnQuZ2V0RmFjdG9yKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRMaW1pdFZlbG9jaXR5R3JhZGllbnQgPSBj
dXJyZW50R3JhZGllbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbGltaXRWZWxvY2l0eSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5MZXJwKHBhcnRpY2xlLl9jdXJyZW50TGlt
aXRWZWxvY2l0eTEsIHBhcnRpY2xlLl9jdXJyZW50TGltaXRWZWxvY2l0eTIsIHNjYWxlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VmVsb2NpdHkgPSBwYXJ0aWNsZS5kaXJl
Y3Rpb24ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZlbG9j
aXR5ID4gbGltaXRWZWxvY2l0eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRp
Y2xlLmRpcmVjdGlvbi5zY2FsZUluUGxhY2UoX3RoaXMubGltaXRWZWxvY2l0eURhbXBpbmcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8vIERyYWcKKyAgICAgICAgICAgICAgICBp
ZiAoX3RoaXMuX2RyYWdHcmFkaWVudHMgJiYgX3RoaXMuX2RyYWdHcmFkaWVudHMubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRDdXJyZW50R3JhZGllbnQocmF0aW8s
IF90aGlzLl9kcmFnR3JhZGllbnRzLCBmdW5jdGlvbiAoY3VycmVudEdyYWRpZW50LCBuZXh0R3Jh
ZGllbnQsIHNjYWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEdyYWRp
ZW50ICE9PSBwYXJ0aWNsZS5fY3VycmVudERyYWdHcmFkaWVudCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcnRpY2xlLl9jdXJyZW50RHJhZzEgPSBwYXJ0aWNsZS5fY3VycmVudERy
YWcyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9jdXJyZW50RHJhZzIg
PSBuZXh0R3JhZGllbnQuZ2V0RmFjdG9yKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFydGljbGUuX2N1cnJlbnREcmFnR3JhZGllbnQgPSBjdXJyZW50R3JhZGllbnQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHJhZyA9IF9N
YXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5M
ZXJwKHBhcnRpY2xlLl9jdXJyZW50RHJhZzEsIHBhcnRpY2xlLl9jdXJyZW50RHJhZzIsIHNjYWxl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zY2FsZWREaXJlY3Rpb24uc2NhbGVJ
blBsYWNlKDEuMCAtIGRyYWcpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcGFydGljbGUucG9zaXRpb24uYWRkSW5QbGFjZShfdGhp
cy5fc2NhbGVkRGlyZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAvLyBOb2lzZQorICAgICAgICAg
ICAgICAgIGlmIChub2lzZVRleHR1cmVEYXRhICYmIG5vaXNlVGV4dHVyZVNpemUgJiYgcGFydGlj
bGUuX3JhbmRvbU5vaXNlQ29vcmRpbmF0ZXMxKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBm
ZXRjaGVkQ29sb3JSID0gX3RoaXMuX2ZldGNoUihwYXJ0aWNsZS5fcmFuZG9tTm9pc2VDb29yZGlu
YXRlczEueCwgcGFydGljbGUuX3JhbmRvbU5vaXNlQ29vcmRpbmF0ZXMxLnksIG5vaXNlVGV4dHVy
ZVNpemUud2lkdGgsIG5vaXNlVGV4dHVyZVNpemUuaGVpZ2h0LCBub2lzZVRleHR1cmVEYXRhKTsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGZldGNoZWRDb2xvckcgPSBfdGhpcy5fZmV0Y2hSKHBh
cnRpY2xlLl9yYW5kb21Ob2lzZUNvb3JkaW5hdGVzMS56LCBwYXJ0aWNsZS5fcmFuZG9tTm9pc2VD
b29yZGluYXRlczIueCwgbm9pc2VUZXh0dXJlU2l6ZS53aWR0aCwgbm9pc2VUZXh0dXJlU2l6ZS5o
ZWlnaHQsIG5vaXNlVGV4dHVyZURhdGEpOworICAgICAgICAgICAgICAgICAgICB2YXIgZmV0Y2hl
ZENvbG9yQiA9IF90aGlzLl9mZXRjaFIocGFydGljbGUuX3JhbmRvbU5vaXNlQ29vcmRpbmF0ZXMy
LnksIHBhcnRpY2xlLl9yYW5kb21Ob2lzZUNvb3JkaW5hdGVzMi56LCBub2lzZVRleHR1cmVTaXpl
LndpZHRoLCBub2lzZVRleHR1cmVTaXplLmhlaWdodCwgbm9pc2VUZXh0dXJlRGF0YSk7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBmb3JjZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1swXTsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHNjYWxlZEZvcmNlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzFdOworICAgICAgICAgICAg
ICAgICAgICBmb3JjZS5jb3B5RnJvbUZsb2F0cygoMiAqIGZldGNoZWRDb2xvclIgLSAxKSAqIF90
aGlzLm5vaXNlU3RyZW5ndGgueCwgKDIgKiBmZXRjaGVkQ29sb3JHIC0gMSkgKiBfdGhpcy5ub2lz
ZVN0cmVuZ3RoLnksICgyICogZmV0Y2hlZENvbG9yQiAtIDEpICogX3RoaXMubm9pc2VTdHJlbmd0
aC56KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yY2Uuc2NhbGVUb1JlZihzY2FsZWRVcGRhdGVT
cGVlZCwgc2NhbGVkRm9yY2UpOworICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5kaXJlY3Rp
b24uYWRkSW5QbGFjZShzY2FsZWRGb3JjZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIEdyYXZpdHkKKyAgICAgICAgICAgICAgICBfdGhpcy5ncmF2aXR5LnNjYWxlVG9S
ZWYoc2NhbGVkVXBkYXRlU3BlZWQsIF90aGlzLl9zY2FsZWRHcmF2aXR5KTsKKyAgICAgICAgICAg
ICAgICBwYXJ0aWNsZS5kaXJlY3Rpb24uYWRkSW5QbGFjZShfdGhpcy5fc2NhbGVkR3Jhdml0eSk7
CisgICAgICAgICAgICAgICAgLy8gU2l6ZQorICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fc2l6
ZUdyYWRpZW50cyAmJiBfdGhpcy5fc2l6ZUdyYWRpZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIF9NaXNjX2dyYWRpZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJHcmFkaWVudEhlbHBlciJdLkdldEN1cnJlbnRHcmFkaWVudChyYXRpbywgX3RoaXMuX3NpemVH
cmFkaWVudHMsIGZ1bmN0aW9uIChjdXJyZW50R3JhZGllbnQsIG5leHRHcmFkaWVudCwgc2NhbGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50R3JhZGllbnQgIT09IHBhcnRp
Y2xlLl9jdXJyZW50U2l6ZUdyYWRpZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFydGljbGUuX2N1cnJlbnRTaXplMSA9IHBhcnRpY2xlLl9jdXJyZW50U2l6ZTI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRTaXplMiA9IG5leHRHcmFkaWVu
dC5nZXRGYWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3Vy
cmVudFNpemVHcmFkaWVudCA9IGN1cnJlbnRHcmFkaWVudDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLnNpemUgPSBfTWF0aHNfbWF0
aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NhbGFyIl0uTGVycChwYXJ0
aWNsZS5fY3VycmVudFNpemUxLCBwYXJ0aWNsZS5fY3VycmVudFNpemUyLCBzY2FsZSk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
LyBSZW1hcCBkYXRhCisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl91c2VSYW1wR3JhZGllbnRz
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fY29sb3JSZW1hcEdyYWRpZW50cyAm
JiBfdGhpcy5fY29sb3JSZW1hcEdyYWRpZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBfTWlzY19ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
R3JhZGllbnRIZWxwZXIiXS5HZXRDdXJyZW50R3JhZGllbnQocmF0aW8sIF90aGlzLl9jb2xvclJl
bWFwR3JhZGllbnRzLCBmdW5jdGlvbiAoY3VycmVudEdyYWRpZW50LCBuZXh0R3JhZGllbnQsIHNj
YWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IF9NYXRoc19tYXRo
X3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5MZXJwKGN1cnJl
bnRHcmFkaWVudC5mYWN0b3IxLCBuZXh0R3JhZGllbnQuZmFjdG9yMSwgc2NhbGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NhbGFyIl0uTGVycChjdXJyZW50R3JhZGllbnQuZmFj
dG9yMiwgbmV4dEdyYWRpZW50LmZhY3RvcjIsIHNjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJ0aWNsZS5yZW1hcERhdGEueCA9IG1pbjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJ0aWNsZS5yZW1hcERhdGEueSA9IG1heCAtIG1pbjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmIChfdGhpcy5fYWxwaGFSZW1hcEdyYWRpZW50cyAmJiBfdGhpcy5fYWxwaGFSZW1hcEdyYWRp
ZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWlzY19ncmFkaWVu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRDdXJy
ZW50R3JhZGllbnQocmF0aW8sIF90aGlzLl9hbHBoYVJlbWFwR3JhZGllbnRzLCBmdW5jdGlvbiAo
Y3VycmVudEdyYWRpZW50LCBuZXh0R3JhZGllbnQsIHNjYWxlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIG1pbiA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5MZXJwKGN1cnJlbnRHcmFkaWVudC5mYWN0b3IxLCBuZXh0
R3JhZGllbnQuZmFjdG9yMSwgc2NhbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBtYXggPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
U2NhbGFyIl0uTGVycChjdXJyZW50R3JhZGllbnQuZmFjdG9yMiwgbmV4dEdyYWRpZW50LmZhY3Rv
cjIsIHNjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5yZW1hcERh
dGEueiA9IG1pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5yZW1hcERh
dGEudyA9IG1heCAtIG1pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChfdGhp
cy5faXNBbmltYXRpb25TaGVldEVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFydGlj
bGUudXBkYXRlQ2VsbEluZGV4KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vIFVwZGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGF0dGFjaGVkIHN1Yi1lbWl0dGVycyB0byBt
YXRjaCB0aGVpciBhdHRhY2hlZCBwYXJ0aWNsZQorICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9p
bmhlcml0UGFydGljbGVJbmZvVG9TdWJFbWl0dGVycygpOworICAgICAgICAgICAgICAgIGlmIChw
YXJ0aWNsZS5hZ2UgPj0gcGFydGljbGUubGlmZVRpbWUpIHsgLy8gUmVjeWNsZSBieSBzd2FwcGlu
ZyB3aXRoIGxhc3QgcGFydGljbGUKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2VtaXRGcm9t
UGFydGljbGUocGFydGljbGUpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFydGljbGUuX2F0
dGFjaGVkU3ViRW1pdHRlcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9h
dHRhY2hlZFN1YkVtaXR0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YkVtaXR0ZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdWJFbWl0dGVyLnBhcnRpY2xlU3lzdGVtLmRpc3Bvc2VP
blN0b3AgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkVtaXR0ZXIucGFy
dGljbGVTeXN0ZW0uc3RvcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fYXR0YWNoZWRTdWJFbWl0dGVycyA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVjeWNsZVBh
cnRpY2xlKHBhcnRpY2xlKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgtLTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJjb250aW51ZSI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIHZhciBwYXJ0aWNsZTsKKyAgICAgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0aWNsZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgX2xvb3BfMSgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYXJ0aWNsZVN5
c3RlbS5wcm90b3R5cGUsICJvbkRpc3Bvc2UiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBT
ZXRzIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBzeXN0ZW0gaXMg
ZGlzcG9zZWQKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uRGlzcG9zZU9ic2Vy
dmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX29uRGlzcG9zZU9ic2VydmVy
ID0gdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUs
ICJ1c2VSYW1wR3JhZGllbnRzIiwgeworICAgICAgICAvKiogR2V0cyBvciBzZXRzIGEgYm9vbGVh
biBpbmRpY2F0aW5nIHRoYXQgcmFtcCBncmFkaWVudHMgbXVzdCBiZSB1c2VkCisgICAgICAgICAq
IEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvcGFydGljbGVzI3JhbXAt
Z3JhZGllbnRzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl91c2VSYW1wR3JhZGllbnRzOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3VzZVJhbXBH
cmFkaWVudHMgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fdXNlUmFtcEdyYWRpZW50cyA9IHZhbHVlOworICAgICAg
ICAgICAgdGhpcy5fcmVzZXRFZmZlY3QoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZSwgInBhcnRpY2xlcyIsIHsK
KyAgICAgICAgLy9lbmQgb2YgU3ViLWVtaXR0ZXIKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIGN1cnJlbnQgbGlzdCBvZiBhY3RpdmUgcGFydGljbGVzCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJ0aWNs
ZXM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmlu
ZyAiUGFydGljbGVTeXN0ZW0iCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0
aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5nZXRD
bGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiUGFydGljbGVTeXN0ZW0i
OworICAgIH07CisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9hZGRGYWN0b3JHcmFkaWVu
dCA9IGZ1bmN0aW9uIChmYWN0b3JHcmFkaWVudHMsIGdyYWRpZW50LCBmYWN0b3IsIGZhY3RvcjIp
IHsKKyAgICAgICAgdmFyIG5ld0dyYWRpZW50ID0gbmV3IF9NaXNjX2dyYWRpZW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJGYWN0b3JHcmFkaWVudCJdKCk7CisgICAgICAgIG5ld0dy
YWRpZW50LmdyYWRpZW50ID0gZ3JhZGllbnQ7CisgICAgICAgIG5ld0dyYWRpZW50LmZhY3RvcjEg
PSBmYWN0b3I7CisgICAgICAgIG5ld0dyYWRpZW50LmZhY3RvcjIgPSBmYWN0b3IyOworICAgICAg
ICBmYWN0b3JHcmFkaWVudHMucHVzaChuZXdHcmFkaWVudCk7CisgICAgICAgIGZhY3RvckdyYWRp
ZW50cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICBpZiAoYS5ncmFkaWVudCA8
IGIuZ3JhZGllbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChhLmdyYWRpZW50ID4gYi5ncmFkaWVudCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0pOworICAgIH07CisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9yZW1v
dmVGYWN0b3JHcmFkaWVudCA9IGZ1bmN0aW9uIChmYWN0b3JHcmFkaWVudHMsIGdyYWRpZW50KSB7
CisgICAgICAgIGlmICghZmFjdG9yR3JhZGllbnRzKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGluZGV4ID0gMDsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAw
LCBmYWN0b3JHcmFkaWVudHNfMSA9IGZhY3RvckdyYWRpZW50czsgX2kgPCBmYWN0b3JHcmFkaWVu
dHNfMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBmYWN0b3JHcmFkaWVudCA9IGZh
Y3RvckdyYWRpZW50c18xW19pXTsKKyAgICAgICAgICAgIGlmIChmYWN0b3JHcmFkaWVudC5ncmFk
aWVudCA9PT0gZ3JhZGllbnQpIHsKKyAgICAgICAgICAgICAgICBmYWN0b3JHcmFkaWVudHMuc3Bs
aWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEFk
ZHMgYSBuZXcgbGlmZSB0aW1lIGdyYWRpZW50CisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmlu
ZXMgdGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0d2VlbiAwIGFuZCAxKQorICAgICAqIEBwYXJhbSBm
YWN0b3IgZGVmaW5lcyB0aGUgbGlmZSB0aW1lIGZhY3RvciB0byBhZmZlY3QgdG8gdGhlIHNwZWNp
ZmllZCBncmFkaWVudAorICAgICAqIEBwYXJhbSBmYWN0b3IyIGRlZmluZXMgYW4gYWRkaXRpb25h
bCBmYWN0b3IgdXNlZCB0byBkZWZpbmUgYSByYW5nZSAoW2ZhY3RvciwgZmFjdG9yMl0pIHdpdGgg
bWFpbiB2YWx1ZSB0byBwaWNrIHRoZSBmaW5hbCB2YWx1ZSBmcm9tCisgICAgICogQHJldHVybnMg
dGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0u
cHJvdG90eXBlLmFkZExpZmVUaW1lR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQsIGZhY3Rv
ciwgZmFjdG9yMikgeworICAgICAgICBpZiAoIXRoaXMuX2xpZmVUaW1lR3JhZGllbnRzKSB7Cisg
ICAgICAgICAgICB0aGlzLl9saWZlVGltZUdyYWRpZW50cyA9IFtdOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2FkZEZhY3RvckdyYWRpZW50KHRoaXMuX2xpZmVUaW1lR3JhZGllbnRzLCBncmFk
aWVudCwgZmFjdG9yLCBmYWN0b3IyKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZW1vdmUgYSBzcGVjaWZpYyBsaWZlIHRpbWUgZ3JhZGllbnQKKyAgICAg
KiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAgICog
QHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGlj
bGVTeXN0ZW0ucHJvdG90eXBlLnJlbW92ZUxpZmVUaW1lR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3Jh
ZGllbnQpIHsKKyAgICAgICAgdGhpcy5fcmVtb3ZlRmFjdG9yR3JhZGllbnQodGhpcy5fbGlmZVRp
bWVHcmFkaWVudHMsIGdyYWRpZW50KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBBZGRzIGEgbmV3IHNpemUgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gZ3Jh
ZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNlIChiZXR3ZWVuIDAgYW5kIDEpCisgICAg
ICogQHBhcmFtIGZhY3RvciBkZWZpbmVzIHRoZSBzaXplIGZhY3RvciB0byBhZmZlY3QgdG8gdGhl
IHNwZWNpZmllZCBncmFkaWVudAorICAgICAqIEBwYXJhbSBmYWN0b3IyIGRlZmluZXMgYW4gYWRk
aXRpb25hbCBmYWN0b3IgdXNlZCB0byBkZWZpbmUgYSByYW5nZSAoW2ZhY3RvciwgZmFjdG9yMl0p
IHdpdGggbWFpbiB2YWx1ZSB0byBwaWNrIHRoZSBmaW5hbCB2YWx1ZSBmcm9tCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLmFkZFNpemVHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCwgZmFj
dG9yLCBmYWN0b3IyKSB7CisgICAgICAgIGlmICghdGhpcy5fc2l6ZUdyYWRpZW50cykgeworICAg
ICAgICAgICAgdGhpcy5fc2l6ZUdyYWRpZW50cyA9IFtdOworICAgICAgICB9CisgICAgICAgIHRo
aXMuX2FkZEZhY3RvckdyYWRpZW50KHRoaXMuX3NpemVHcmFkaWVudHMsIGdyYWRpZW50LCBmYWN0
b3IsIGZhY3RvcjIpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlbW92ZSBhIHNwZWNpZmljIHNpemUgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gZ3JhZGll
bnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90
eXBlLnJlbW92ZVNpemVHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCkgeworICAgICAgICB0
aGlzLl9yZW1vdmVGYWN0b3JHcmFkaWVudCh0aGlzLl9zaXplR3JhZGllbnRzLCBncmFkaWVudCk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIG5l
dyBjb2xvciByZW1hcCBncmFkaWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRo
ZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0gbWluIGRl
ZmluZXMgdGhlIGNvbG9yIHJlbWFwIG1pbmltYWwgcmFuZ2UKKyAgICAgKiBAcGFyYW0gbWF4IGRl
ZmluZXMgdGhlIGNvbG9yIHJlbWFwIG1heGltYWwgcmFuZ2UKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90
b3R5cGUuYWRkQ29sb3JSZW1hcEdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRpZW50LCBtaW4sIG1h
eCkgeworICAgICAgICBpZiAoIXRoaXMuX2NvbG9yUmVtYXBHcmFkaWVudHMpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2NvbG9yUmVtYXBHcmFkaWVudHMgPSBbXTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9hZGRGYWN0b3JHcmFkaWVudCh0aGlzLl9jb2xvclJlbWFwR3JhZGllbnRzLCBncmFkaWVu
dCwgbWluLCBtYXgpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlbW92ZSBhIHNwZWNpZmljIGNvbG9yIHJlbWFwIGdyYWRpZW50CisgICAgICogQHBhcmFt
IGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5z
IHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVt
LnByb3RvdHlwZS5yZW1vdmVDb2xvclJlbWFwR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQp
IHsKKyAgICAgICAgdGhpcy5fcmVtb3ZlRmFjdG9yR3JhZGllbnQodGhpcy5fY29sb3JSZW1hcEdy
YWRpZW50cywgZ3JhZGllbnQpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEFkZHMgYSBuZXcgYWxwaGEgcmVtYXAgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0g
Z3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNlIChiZXR3ZWVuIDAgYW5kIDEpCisg
ICAgICogQHBhcmFtIG1pbiBkZWZpbmVzIHRoZSBhbHBoYSByZW1hcCBtaW5pbWFsIHJhbmdlCisg
ICAgICogQHBhcmFtIG1heCBkZWZpbmVzIHRoZSBhbHBoYSByZW1hcCBtYXhpbWFsIHJhbmdlCisg
ICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAg
UGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFkZEFscGhhUmVtYXBHcmFkaWVudCA9IGZ1bmN0aW9u
IChncmFkaWVudCwgbWluLCBtYXgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9hbHBoYVJlbWFwR3Jh
ZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl9hbHBoYVJlbWFwR3JhZGllbnRzID0gW107Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fYWxwaGFSZW1h
cEdyYWRpZW50cywgZ3JhZGllbnQsIG1pbiwgbWF4KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBzcGVjaWZpYyBhbHBoYSByZW1hcCBncmFk
aWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1v
dmUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8K
KyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVtb3ZlQWxwaGFSZW1hcEdyYWRpZW50ID0g
ZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIHRoaXMuX3JlbW92ZUZhY3RvckdyYWRpZW50
KHRoaXMuX2FscGhhUmVtYXBHcmFkaWVudHMsIGdyYWRpZW50KTsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgbmV3IGFuZ3VsYXIgc3BlZWQgZ3Jh
ZGllbnQKKyAgICAgKiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNl
IChiZXR3ZWVuIDAgYW5kIDEpCisgICAgICogQHBhcmFtIGZhY3RvciBkZWZpbmVzIHRoZSBhbmd1
bGFyIHNwZWVkICB0byBhZmZlY3QgdG8gdGhlIHNwZWNpZmllZCBncmFkaWVudAorICAgICAqIEBw
YXJhbSBmYWN0b3IyIGRlZmluZXMgYW4gYWRkaXRpb25hbCBmYWN0b3IgdXNlZCB0byBkZWZpbmUg
YSByYW5nZSAoW2ZhY3RvciwgZmFjdG9yMl0pIHdpdGggbWFpbiB2YWx1ZSB0byBwaWNrIHRoZSBm
aW5hbCB2YWx1ZSBmcm9tCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lz
dGVtCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFkZEFuZ3VsYXJTcGVl
ZEdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRpZW50LCBmYWN0b3IsIGZhY3RvcjIpIHsKKyAgICAg
ICAgaWYgKCF0aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMu
X2FuZ3VsYXJTcGVlZEdyYWRpZW50cyA9IFtdOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Fk
ZEZhY3RvckdyYWRpZW50KHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50cywgZ3JhZGllbnQsIGZh
Y3RvciwgZmFjdG9yMik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmVtb3ZlIGEgc3BlY2lmaWMgYW5ndWxhciBzcGVlZCBncmFkaWVudAorICAgICAqIEBw
YXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0
dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5
c3RlbS5wcm90b3R5cGUucmVtb3ZlQW5ndWxhclNwZWVkR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3Jh
ZGllbnQpIHsKKyAgICAgICAgdGhpcy5fcmVtb3ZlRmFjdG9yR3JhZGllbnQodGhpcy5fYW5ndWxh
clNwZWVkR3JhZGllbnRzLCBncmFkaWVudCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogQWRkcyBhIG5ldyB2ZWxvY2l0eSBncmFkaWVudAorICAgICAqIEBw
YXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQg
MSkKKyAgICAgKiBAcGFyYW0gZmFjdG9yIGRlZmluZXMgdGhlIHZlbG9jaXR5IHRvIGFmZmVjdCB0
byB0aGUgc3BlY2lmaWVkIGdyYWRpZW50CisgICAgICogQHBhcmFtIGZhY3RvcjIgZGVmaW5lcyBh
biBhZGRpdGlvbmFsIGZhY3RvciB1c2VkIHRvIGRlZmluZSBhIHJhbmdlIChbZmFjdG9yLCBmYWN0
b3IyXSkgd2l0aCBtYWluIHZhbHVlIHRvIHBpY2sgdGhlIGZpbmFsIHZhbHVlIGZyb20KKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0
aWNsZVN5c3RlbS5wcm90b3R5cGUuYWRkVmVsb2NpdHlHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFk
aWVudCwgZmFjdG9yLCBmYWN0b3IyKSB7CisgICAgICAgIGlmICghdGhpcy5fdmVsb2NpdHlHcmFk
aWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX3ZlbG9jaXR5R3JhZGllbnRzID0gW107CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fdmVsb2NpdHlHcmFk
aWVudHMsIGdyYWRpZW50LCBmYWN0b3IsIGZhY3RvcjIpOworICAgICAgICByZXR1cm4gdGhpczsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHNwZWNpZmljIHZlbG9jaXR5IGdyYWRp
ZW50CisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHJlbW92
ZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLwor
ICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5yZW1vdmVWZWxvY2l0eUdyYWRpZW50ID0gZnVu
Y3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIHRoaXMuX3JlbW92ZUZhY3RvckdyYWRpZW50KHRo
aXMuX3ZlbG9jaXR5R3JhZGllbnRzLCBncmFkaWVudCk7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIG5ldyBsaW1pdCB2ZWxvY2l0eSBncmFkaWVu
dAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2UgKGJl
dHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0gZmFjdG9yIGRlZmluZXMgdGhlIGxpbWl0IHZl
bG9jaXR5IHZhbHVlIHRvIGFmZmVjdCB0byB0aGUgc3BlY2lmaWVkIGdyYWRpZW50CisgICAgICog
QHBhcmFtIGZhY3RvcjIgZGVmaW5lcyBhbiBhZGRpdGlvbmFsIGZhY3RvciB1c2VkIHRvIGRlZmlu
ZSBhIHJhbmdlIChbZmFjdG9yLCBmYWN0b3IyXSkgd2l0aCBtYWluIHZhbHVlIHRvIHBpY2sgdGhl
IGZpbmFsIHZhbHVlIGZyb20KKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBz
eXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuYWRkTGltaXRWZWxv
Y2l0eUdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRpZW50LCBmYWN0b3IsIGZhY3RvcjIpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzKSB7CisgICAgICAgICAgICB0
aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzID0gW107CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50cywgZ3JhZGll
bnQsIGZhY3RvciwgZmFjdG9yMik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
LyoqCisgICAgICogUmVtb3ZlIGEgc3BlY2lmaWMgbGltaXQgdmVsb2NpdHkgZ3JhZGllbnQKKyAg
ICAgKiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAg
ICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFy
dGljbGVTeXN0ZW0ucHJvdG90eXBlLnJlbW92ZUxpbWl0VmVsb2NpdHlHcmFkaWVudCA9IGZ1bmN0
aW9uIChncmFkaWVudCkgeworICAgICAgICB0aGlzLl9yZW1vdmVGYWN0b3JHcmFkaWVudCh0aGlz
Ll9saW1pdFZlbG9jaXR5R3JhZGllbnRzLCBncmFkaWVudCk7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIG5ldyBkcmFnIGdyYWRpZW50CisgICAg
ICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0d2VlbiAw
IGFuZCAxKQorICAgICAqIEBwYXJhbSBmYWN0b3IgZGVmaW5lcyB0aGUgZHJhZyB2YWx1ZSB0byBh
ZmZlY3QgdG8gdGhlIHNwZWNpZmllZCBncmFkaWVudAorICAgICAqIEBwYXJhbSBmYWN0b3IyIGRl
ZmluZXMgYW4gYWRkaXRpb25hbCBmYWN0b3IgdXNlZCB0byBkZWZpbmUgYSByYW5nZSAoW2ZhY3Rv
ciwgZmFjdG9yMl0pIHdpdGggbWFpbiB2YWx1ZSB0byBwaWNrIHRoZSBmaW5hbCB2YWx1ZSBmcm9t
CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisg
ICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFkZERyYWdHcmFkaWVudCA9IGZ1bmN0aW9uIChn
cmFkaWVudCwgZmFjdG9yLCBmYWN0b3IyKSB7CisgICAgICAgIGlmICghdGhpcy5fZHJhZ0dyYWRp
ZW50cykgeworICAgICAgICAgICAgdGhpcy5fZHJhZ0dyYWRpZW50cyA9IFtdOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX2FkZEZhY3RvckdyYWRpZW50KHRoaXMuX2RyYWdHcmFkaWVudHMsIGdy
YWRpZW50LCBmYWN0b3IsIGZhY3RvcjIpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHNwZWNpZmljIGRyYWcgZ3JhZGllbnQKKyAgICAgKiBA
cGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLnJlbW92ZURyYWdHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCkg
eworICAgICAgICB0aGlzLl9yZW1vdmVGYWN0b3JHcmFkaWVudCh0aGlzLl9kcmFnR3JhZGllbnRz
LCBncmFkaWVudCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAg
ICogQWRkcyBhIG5ldyBlbWl0IHJhdGUgZ3JhZGllbnQgKHBsZWFzZSBub3RlIHRoYXQgdGhpcyB3
aWxsIG9ubHkgd29yayBpZiB5b3Ugc2V0IHRoZSB0YXJnZXRTdG9wRHVyYXRpb24gcHJvcGVydHkp
CisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0
d2VlbiAwIGFuZCAxKQorICAgICAqIEBwYXJhbSBmYWN0b3IgZGVmaW5lcyB0aGUgZW1pdCByYXRl
IHZhbHVlIHRvIGFmZmVjdCB0byB0aGUgc3BlY2lmaWVkIGdyYWRpZW50CisgICAgICogQHBhcmFt
IGZhY3RvcjIgZGVmaW5lcyBhbiBhZGRpdGlvbmFsIGZhY3RvciB1c2VkIHRvIGRlZmluZSBhIHJh
bmdlIChbZmFjdG9yLCBmYWN0b3IyXSkgd2l0aCBtYWluIHZhbHVlIHRvIHBpY2sgdGhlIGZpbmFs
IHZhbHVlIGZyb20KKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0K
KyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuYWRkRW1pdFJhdGVHcmFkaWVu
dCA9IGZ1bmN0aW9uIChncmFkaWVudCwgZmFjdG9yLCBmYWN0b3IyKSB7CisgICAgICAgIGlmICgh
dGhpcy5fZW1pdFJhdGVHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2VtaXRSYXRlR3Jh
ZGllbnRzID0gW107CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQo
dGhpcy5fZW1pdFJhdGVHcmFkaWVudHMsIGdyYWRpZW50LCBmYWN0b3IsIGZhY3RvcjIpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHNwZWNp
ZmljIGVtaXQgcmF0ZSBncmFkaWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRo
ZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNs
ZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVtb3ZlRW1p
dFJhdGVHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCkgeworICAgICAgICB0aGlzLl9yZW1v
dmVGYWN0b3JHcmFkaWVudCh0aGlzLl9lbWl0UmF0ZUdyYWRpZW50cywgZ3JhZGllbnQpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgYSBuZXcgc3Rh
cnQgc2l6ZSBncmFkaWVudCAocGxlYXNlIG5vdGUgdGhhdCB0aGlzIHdpbGwgb25seSB3b3JrIGlm
IHlvdSBzZXQgdGhlIHRhcmdldFN0b3BEdXJhdGlvbiBwcm9wZXJ0eSkKKyAgICAgKiBAcGFyYW0g
Z3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNlIChiZXR3ZWVuIDAgYW5kIDEpCisg
ICAgICogQHBhcmFtIGZhY3RvciBkZWZpbmVzIHRoZSBzdGFydCBzaXplIHZhbHVlIHRvIGFmZmVj
dCB0byB0aGUgc3BlY2lmaWVkIGdyYWRpZW50CisgICAgICogQHBhcmFtIGZhY3RvcjIgZGVmaW5l
cyBhbiBhZGRpdGlvbmFsIGZhY3RvciB1c2VkIHRvIGRlZmluZSBhIHJhbmdlIChbZmFjdG9yLCBm
YWN0b3IyXSkgd2l0aCBtYWluIHZhbHVlIHRvIHBpY2sgdGhlIGZpbmFsIHZhbHVlIGZyb20KKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQ
YXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuYWRkU3RhcnRTaXplR3JhZGllbnQgPSBmdW5jdGlvbiAo
Z3JhZGllbnQsIGZhY3RvciwgZmFjdG9yMikgeworICAgICAgICBpZiAoIXRoaXMuX3N0YXJ0U2l6
ZUdyYWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fc3RhcnRTaXplR3JhZGllbnRzID0gW107
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fc3RhcnRT
aXplR3JhZGllbnRzLCBncmFkaWVudCwgZmFjdG9yLCBmYWN0b3IyKTsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBzcGVjaWZpYyBzdGFydCBz
aXplIGdyYWRpZW50CisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50
IHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQor
ICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5yZW1vdmVTdGFydFNpemVHcmFk
aWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCkgeworICAgICAgICB0aGlzLl9yZW1vdmVGYWN0b3JH
cmFkaWVudCh0aGlzLl9lbWl0UmF0ZUdyYWRpZW50cywgZ3JhZGllbnQpOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5fY3JlYXRlUmFt
cEdyYWRpZW50VGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9yYW1w
R3JhZGllbnRzIHx8ICF0aGlzLl9yYW1wR3JhZGllbnRzLmxlbmd0aCB8fCB0aGlzLl9yYW1wR3Jh
ZGllbnRzVGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5fcmF3VGV4dHVyZVdpZHRoICogNCk7Cisg
ICAgICAgIHZhciB0bXBDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yNF9fWyJUbXBDb2xvcnMiXS5Db2xvcjNbMF07CisgICAgICAgIGZvciAodmFyIHgg
PSAwOyB4IDwgdGhpcy5fcmF3VGV4dHVyZVdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgIHZhciBy
YXRpbyA9IHggLyB0aGlzLl9yYXdUZXh0dXJlV2lkdGg7CisgICAgICAgICAgICBfTWlzY19ncmFk
aWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRD
dXJyZW50R3JhZGllbnQocmF0aW8sIHRoaXMuX3JhbXBHcmFkaWVudHMsIGZ1bmN0aW9uIChjdXJy
ZW50R3JhZGllbnQsIG5leHRHcmFkaWVudCwgc2NhbGUpIHsKKyAgICAgICAgICAgICAgICBfTWF0
aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX1siQ29sb3IzIl0uTGVy
cFRvUmVmKGN1cnJlbnRHcmFkaWVudC5jb2xvciwgbmV4dEdyYWRpZW50LmNvbG9yLCBzY2FsZSwg
dG1wQ29sb3IpOworICAgICAgICAgICAgICAgIGRhdGFbeCAqIDRdID0gdG1wQ29sb3IuciAqIDI1
NTsKKyAgICAgICAgICAgICAgICBkYXRhW3ggKiA0ICsgMV0gPSB0bXBDb2xvci5nICogMjU1Owor
ICAgICAgICAgICAgICAgIGRhdGFbeCAqIDQgKyAyXSA9IHRtcENvbG9yLmIgKiAyNTU7CisgICAg
ICAgICAgICAgICAgZGF0YVt4ICogNCArIDNdID0gMjU1OworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fcmFtcEdyYWRpZW50c1RleHR1cmUgPSBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX3Jhd1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIlJhd1RleHR1
cmUiXS5DcmVhdGVSR0JBVGV4dHVyZShkYXRhLCB0aGlzLl9yYXdUZXh0dXJlV2lkdGgsIDEsIHRo
aXMuX3NjZW5lLCBmYWxzZSwgZmFsc2UsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siVGV4dHVyZSJdLk5FQVJFU1RfU0FNUExJTkdNT0RF
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgbGlzdCBvZiByYW1w
IGdyYWRpZW50cy4KKyAgICAgKiBZb3UgbXVzdCB1c2UgYWRkUmFtcEdyYWRpZW50IGFuZCByZW1v
dmVSYW1wR3JhZGllbnQgdG8gdWRwYXRlIHRoaXMgbGlzdAorICAgICAqIEByZXR1cm5zIHRoZSBs
aXN0IG9mIHJhbXAgZ3JhZGllbnRzCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90
eXBlLmdldFJhbXBHcmFkaWVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9yYW1wR3JhZGllbnRzOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIG5ldyByYW1w
IGdyYWRpZW50IHVzZWQgdG8gcmVtYXAgcGFydGljbGUgY29sb3JzCisgICAgICogQHBhcmFtIGdy
YWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0d2VlbiAwIGFuZCAxKQorICAg
ICAqIEBwYXJhbSBjb2xvciBkZWZpbmVzIHRoZSBjb2xvciB0byBhZmZlY3QgdG8gdGhlIHNwZWNp
ZmllZCBncmFkaWVudAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3Rl
bQorICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5hZGRSYW1wR3JhZGllbnQg
PSBmdW5jdGlvbiAoZ3JhZGllbnQsIGNvbG9yKSB7CisgICAgICAgIGlmICghdGhpcy5fcmFtcEdy
YWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fcmFtcEdyYWRpZW50cyA9IFtdOworICAgICAg
ICB9CisgICAgICAgIHZhciByYW1wR3JhZGllbnQgPSBuZXcgX01pc2NfZ3JhZGllbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9yM0dyYWRpZW50Il0oKTsKKyAgICAgICAgcmFt
cEdyYWRpZW50LmdyYWRpZW50ID0gZ3JhZGllbnQ7CisgICAgICAgIHJhbXBHcmFkaWVudC5jb2xv
ciA9IGNvbG9yOworICAgICAgICB0aGlzLl9yYW1wR3JhZGllbnRzLnB1c2gocmFtcEdyYWRpZW50
KTsKKyAgICAgICAgdGhpcy5fcmFtcEdyYWRpZW50cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7Cisg
ICAgICAgICAgICBpZiAoYS5ncmFkaWVudCA8IGIuZ3JhZGllbnQpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChhLmdyYWRp
ZW50ID4gYi5ncmFkaWVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0pOworICAgICAgICBpZiAodGhp
cy5fcmFtcEdyYWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3JhbXBHcmFkaWVu
dHNUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX3JhbXBHcmFkaWVudHNUZXh0
dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jcmVhdGVSYW1wR3JhZGllbnRU
ZXh0dXJlKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICog
UmVtb3ZlIGEgc3BlY2lmaWMgcmFtcCBncmFkaWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBk
ZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVu
dCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUu
cmVtb3ZlUmFtcEdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIHRoaXMu
X3JlbW92ZUdyYWRpZW50QW5kVGV4dHVyZShncmFkaWVudCwgdGhpcy5fcmFtcEdyYWRpZW50cywg
dGhpcy5fcmFtcEdyYWRpZW50c1RleHR1cmUpOworICAgICAgICB0aGlzLl9yYW1wR3JhZGllbnRz
VGV4dHVyZSA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLl9yYW1wR3JhZGllbnRzICYmIHRoaXMu
X3JhbXBHcmFkaWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdGhpcy5fY3JlYXRlUmFt
cEdyYWRpZW50VGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogQWRkcyBhIG5ldyBjb2xvciBncmFkaWVudAorICAgICAqIEBw
YXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQg
MSkKKyAgICAgKiBAcGFyYW0gY29sb3IxIGRlZmluZXMgdGhlIGNvbG9yIHRvIGFmZmVjdCB0byB0
aGUgc3BlY2lmaWVkIGdyYWRpZW50CisgICAgICogQHBhcmFtIGNvbG9yMiBkZWZpbmVzIGFuIGFk
ZGl0aW9uYWwgY29sb3IgdXNlZCB0byBkZWZpbmUgYSByYW5nZSAoW2NvbG9yLCBjb2xvcjJdKSB3
aXRoIG1haW4gY29sb3IgdG8gcGljayB0aGUgZmluYWwgY29sb3IgZnJvbQorICAgICAqIEByZXR1
cm5zIHRoaXMgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJv
dG90eXBlLmFkZENvbG9yR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQsIGNvbG9yMSwgY29s
b3IyKSB7CisgICAgICAgIGlmICghdGhpcy5fY29sb3JHcmFkaWVudHMpIHsKKyAgICAgICAgICAg
IHRoaXMuX2NvbG9yR3JhZGllbnRzID0gW107CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNvbG9y
R3JhZGllbnQgPSBuZXcgX01pc2NfZ3JhZGllbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkNvbG9yR3JhZGllbnQiXSgpOworICAgICAgICBjb2xvckdyYWRpZW50LmdyYWRpZW50ID0g
Z3JhZGllbnQ7CisgICAgICAgIGNvbG9yR3JhZGllbnQuY29sb3IxID0gY29sb3IxOworICAgICAg
ICBjb2xvckdyYWRpZW50LmNvbG9yMiA9IGNvbG9yMjsKKyAgICAgICAgdGhpcy5fY29sb3JHcmFk
aWVudHMucHVzaChjb2xvckdyYWRpZW50KTsKKyAgICAgICAgdGhpcy5fY29sb3JHcmFkaWVudHMu
c29ydChmdW5jdGlvbiAoYSwgYikgeworICAgICAgICAgICAgaWYgKGEuZ3JhZGllbnQgPCBiLmdy
YWRpZW50KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBpZiAoYS5ncmFkaWVudCA+IGIuZ3JhZGllbnQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZW1vdmUgYSBzcGVjaWZpYyBjb2xvciBncmFkaWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBk
ZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGlzIHBhcnRp
Y2xlIHN5c3RlbQorICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5yZW1vdmVD
b2xvckdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIGlmICghdGhpcy5f
Y29sb3JHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9Cisg
ICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlz
Ll9jb2xvckdyYWRpZW50czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZh
ciBjb2xvckdyYWRpZW50ID0gX2FbX2ldOworICAgICAgICAgICAgaWYgKGNvbG9yR3JhZGllbnQu
Z3JhZGllbnQgPT09IGdyYWRpZW50KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY29sb3JHcmFk
aWVudHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX2ZldGNoUiA9IGZ1bmN0
aW9uICh1LCB2LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpIHsKKyAgICAgICAgdSA9IE1hdGguYWJz
KHUpICogMC41ICsgMC41OworICAgICAgICB2ID0gTWF0aC5hYnModikgKiAwLjUgKyAwLjU7Cisg
ICAgICAgIHZhciB3cmFwcGVkVSA9ICgodSAqIHdpZHRoKSAlIHdpZHRoKSB8IDA7CisgICAgICAg
IHZhciB3cmFwcGVkViA9ICgodiAqIGhlaWdodCkgJSBoZWlnaHQpIHwgMDsKKyAgICAgICAgdmFy
IHBvc2l0aW9uID0gKHdyYXBwZWRVICsgd3JhcHBlZFYgKiB3aWR0aCkgKiA0OworICAgICAgICBy
ZXR1cm4gcGl4ZWxzW3Bvc2l0aW9uXSAvIDI1NTsKKyAgICB9OworICAgIFBhcnRpY2xlU3lzdGVt
LnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3Jlc2V0RWZm
ZWN0KCk7CisgICAgfTsKKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX3Jlc2V0RWZmZWN0
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fdmVydGV4QnVmZmVyKSB7CisgICAg
ICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5f
dmVydGV4QnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc3ByaXRl
QnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9zcHJpdGVCdWZmZXIuZGlzcG9zZSgpOworICAg
ICAgICAgICAgdGhpcy5fc3ByaXRlQnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9jcmVhdGVWZXJ0ZXhCdWZmZXJzKCk7CisgICAgfTsKKyAgICBQYXJ0aWNsZVN5c3RlbS5w
cm90b3R5cGUuX2NyZWF0ZVZlcnRleEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMuX3ZlcnRleEJ1ZmZlclNpemUgPSB0aGlzLl91c2VJbnN0YW5jaW5nID8gMTAgOiAxMjsKKyAg
ICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICB0
aGlzLl92ZXJ0ZXhCdWZmZXJTaXplICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlz
Ll9pc0JpbGxib2FyZEJhc2VkIHx8IHRoaXMuYmlsbGJvYXJkTW9kZSA9PT0gUGFydGljbGVTeXN0
ZW0uQklMTEJPQVJETU9ERV9TVFJFVENIRUQpIHsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleEJ1
ZmZlclNpemUgKz0gMzsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fdXNlUmFtcEdyYWRp
ZW50cykgeworICAgICAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyU2l6ZSArPSA0OworICAgICAg
ICB9CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAg
ICAgdGhpcy5fdmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5fY2FwYWNpdHkgKiB0
aGlzLl92ZXJ0ZXhCdWZmZXJTaXplICogKHRoaXMuX3VzZUluc3RhbmNpbmcgPyAxIDogNCkpOwor
ICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXIgPSBuZXcgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siQnVmZmVyIl0oZW5naW5lLCB0aGlzLl92ZXJ0ZXhEYXRhLCB0
cnVlLCB0aGlzLl92ZXJ0ZXhCdWZmZXJTaXplKTsKKyAgICAgICAgdmFyIGRhdGFPZmZzZXQgPSAw
OworICAgICAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5fdmVydGV4QnVmZmVyLmNyZWF0ZVZlcnRl
eEJ1ZmZlcihfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0
ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIGRhdGFPZmZzZXQsIDMsIHRoaXMuX3ZlcnRleEJ1ZmZl
clNpemUsIHRoaXMuX3VzZUluc3RhbmNpbmcpOworICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJz
W19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlcnRleEJ1ZmZl
ciJdLlBvc2l0aW9uS2luZF0gPSBwb3NpdGlvbnM7CisgICAgICAgIGRhdGFPZmZzZXQgKz0gMzsK
KyAgICAgICAgdmFyIGNvbG9ycyA9IHRoaXMuX3ZlcnRleEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZm
ZXIoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVm
ZmVyIl0uQ29sb3JLaW5kLCBkYXRhT2Zmc2V0LCA0LCB0aGlzLl92ZXJ0ZXhCdWZmZXJTaXplLCB0
aGlzLl91c2VJbnN0YW5jaW5nKTsKKyAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xv
cktpbmRdID0gY29sb3JzOworICAgICAgICBkYXRhT2Zmc2V0ICs9IDQ7CisgICAgICAgIHZhciBv
cHRpb25zID0gdGhpcy5fdmVydGV4QnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcigiYW5nbGUiLCBk
YXRhT2Zmc2V0LCAxLCB0aGlzLl92ZXJ0ZXhCdWZmZXJTaXplLCB0aGlzLl91c2VJbnN0YW5jaW5n
KTsKKyAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1siYW5nbGUiXSA9IG9wdGlvbnM7CisgICAg
ICAgIGRhdGFPZmZzZXQgKz0gMTsKKyAgICAgICAgdmFyIHNpemUgPSB0aGlzLl92ZXJ0ZXhCdWZm
ZXIuY3JlYXRlVmVydGV4QnVmZmVyKCJzaXplIiwgZGF0YU9mZnNldCwgMiwgdGhpcy5fdmVydGV4
QnVmZmVyU2l6ZSwgdGhpcy5fdXNlSW5zdGFuY2luZyk7CisgICAgICAgIHRoaXMuX3ZlcnRleEJ1
ZmZlcnNbInNpemUiXSA9IHNpemU7CisgICAgICAgIGRhdGFPZmZzZXQgKz0gMjsKKyAgICAgICAg
aWYgKHRoaXMuX2lzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICB2YXIgY2Vs
bEluZGV4QnVmZmVyID0gdGhpcy5fdmVydGV4QnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcigiY2Vs
bEluZGV4IiwgZGF0YU9mZnNldCwgMSwgdGhpcy5fdmVydGV4QnVmZmVyU2l6ZSwgdGhpcy5fdXNl
SW5zdGFuY2luZyk7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzWyJjZWxsSW5kZXgi
XSA9IGNlbGxJbmRleEJ1ZmZlcjsKKyAgICAgICAgICAgIGRhdGFPZmZzZXQgKz0gMTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXRoaXMuX2lzQmlsbGJvYXJkQmFzZWQgfHwgdGhpcy5iaWxsYm9h
cmRNb2RlID09PSBQYXJ0aWNsZVN5c3RlbS5CSUxMQk9BUkRNT0RFX1NUUkVUQ0hFRCkgeworICAg
ICAgICAgICAgdmFyIGRpcmVjdGlvbkJ1ZmZlciA9IHRoaXMuX3ZlcnRleEJ1ZmZlci5jcmVhdGVW
ZXJ0ZXhCdWZmZXIoImRpcmVjdGlvbiIsIGRhdGFPZmZzZXQsIDMsIHRoaXMuX3ZlcnRleEJ1ZmZl
clNpemUsIHRoaXMuX3VzZUluc3RhbmNpbmcpOworICAgICAgICAgICAgdGhpcy5fdmVydGV4QnVm
ZmVyc1siZGlyZWN0aW9uIl0gPSBkaXJlY3Rpb25CdWZmZXI7CisgICAgICAgICAgICBkYXRhT2Zm
c2V0ICs9IDM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3VzZVJhbXBHcmFkaWVudHMp
IHsKKyAgICAgICAgICAgIHZhciByYW1wRGF0YUJ1ZmZlciA9IHRoaXMuX3ZlcnRleEJ1ZmZlci5j
cmVhdGVWZXJ0ZXhCdWZmZXIoInJlbWFwRGF0YSIsIGRhdGFPZmZzZXQsIDQsIHRoaXMuX3ZlcnRl
eEJ1ZmZlclNpemUsIHRoaXMuX3VzZUluc3RhbmNpbmcpOworICAgICAgICAgICAgdGhpcy5fdmVy
dGV4QnVmZmVyc1sicmVtYXBEYXRhIl0gPSByYW1wRGF0YUJ1ZmZlcjsKKyAgICAgICAgICAgIGRh
dGFPZmZzZXQgKz0gNDsKKyAgICAgICAgfQorICAgICAgICB2YXIgb2Zmc2V0czsKKyAgICAgICAg
aWYgKHRoaXMuX3VzZUluc3RhbmNpbmcpIHsKKyAgICAgICAgICAgIHZhciBzcHJpdGVEYXRhID0g
bmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMSwgMCwgMSwgMSwgMCwgMV0pOworICAgICAgICAgICAg
dGhpcy5fc3ByaXRlQnVmZmVyID0gbmV3IF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIkJ1ZmZlciJdKGVuZ2luZSwgc3ByaXRlRGF0YSwgZmFsc2UsIDIpOworICAg
ICAgICAgICAgb2Zmc2V0cyA9IHRoaXMuX3Nwcml0ZUJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIo
Im9mZnNldCIsIDAsIDIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
b2Zmc2V0cyA9IHRoaXMuX3ZlcnRleEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoIm9mZnNldCIs
IGRhdGFPZmZzZXQsIDIsIHRoaXMuX3ZlcnRleEJ1ZmZlclNpemUsIHRoaXMuX3VzZUluc3RhbmNp
bmcpOworICAgICAgICAgICAgZGF0YU9mZnNldCArPSAyOworICAgICAgICB9CisgICAgICAgIHRo
aXMuX3ZlcnRleEJ1ZmZlcnNbIm9mZnNldCJdID0gb2Zmc2V0czsKKyAgICB9OworICAgIFBhcnRp
Y2xlU3lzdGVtLnByb3RvdHlwZS5fY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGlmICh0aGlzLl91c2VJbnN0YW5jaW5nKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAgICAgICAgdmFyIGluZGV4ID0g
MDsKKyAgICAgICAgZm9yICh2YXIgY291bnQgPSAwOyBjb3VudCA8IHRoaXMuX2NhcGFjaXR5OyBj
b3VudCsrKSB7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXgpOworICAgICAgICAgICAg
aW5kaWNlcy5wdXNoKGluZGV4ICsgMSk7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXgg
KyAyKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRleCk7CisgICAgICAgICAgICBpbmRp
Y2VzLnB1c2goaW5kZXggKyAyKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRleCArIDMp
OworICAgICAgICAgICAgaW5kZXggKz0gNDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pbmRl
eEJ1ZmZlciA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZUluZGV4QnVmZmVyKGluZGlj
ZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Yg
cGFydGljbGVzIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAqIEByZXR1cm5zIFRoZSBt
YXggbnVtYmVyIG9mIGFjdGl2ZSBwYXJ0aWNsZXMuCisgICAgICovCisgICAgUGFydGljbGVTeXN0
ZW0ucHJvdG90eXBlLmdldENhcGFjaXR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5fY2FwYWNpdHk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHdoZXRoZXIgdGhl
cmUgYXJlIHN0aWxsIGFjdGl2ZSBwYXJ0aWNsZXMgaW4gdGhlIHN5c3RlbS4KKyAgICAgKiBAcmV0
dXJucyBUcnVlIGlmIGl0IGlzIGFsaXZlLCBvdGhlcndpc2UgZmFsc2UuCisgICAgICovCisgICAg
UGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmlzQWxpdmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLl9hbGl2ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgaWYgdGhl
IHN5c3RlbSBoYXMgYmVlbiBzdGFydGVkLiAoTm90ZTogdGhpcyB3aWxsIHN0aWxsIGJlIHRydWUg
YWZ0ZXIgc3RvcCBpcyBjYWxsZWQpCisgICAgICogQHJldHVybnMgVHJ1ZSBpZiBpdCBoYXMgYmVl
biBzdGFydGVkLCBvdGhlcndpc2UgZmFsc2UuCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0u
cHJvdG90eXBlLmlzU3RhcnRlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3N0YXJ0ZWQ7CisgICAgfTsKKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX3ByZXBhcmVT
dWJFbWl0dGVySW50ZXJuYWxBcnJheSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgdGhpcy5fc3ViRW1pdHRlcnMgPSBuZXcgQXJyYXkoKTsKKyAgICAg
ICAgaWYgKHRoaXMuc3ViRW1pdHRlcnMpIHsKKyAgICAgICAgICAgIHRoaXMuc3ViRW1pdHRlcnMu
Zm9yRWFjaChmdW5jdGlvbiAoc3ViRW1pdHRlcikgeworICAgICAgICAgICAgICAgIGlmIChzdWJF
bWl0dGVyIGluc3RhbmNlb2YgUGFydGljbGVTeXN0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
X3RoaXMuX3N1YkVtaXR0ZXJzLnB1c2goW25ldyBfc3ViRW1pdHRlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTdfX1siU3ViRW1pdHRlciJdKHN1YkVtaXR0ZXIpXSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN1YkVtaXR0ZXIgaW5zdGFuY2VvZiBfc3Vi
RW1pdHRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siU3ViRW1pdHRlciJdKSB7Cisg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdWJFbWl0dGVycy5wdXNoKFtzdWJFbWl0dGVyXSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN1YkVtaXR0ZXIg
aW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3ViRW1pdHRl
cnMucHVzaChzdWJFbWl0dGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU3RhcnRzIHRoZSBwYXJ0aWNsZSBz
eXN0ZW0gYW5kIGJlZ2lucyB0byBlbWl0CisgICAgICogQHBhcmFtIGRlbGF5IGRlZmluZXMgdGhl
IGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgc3RhcnRpbmcgdGhlIHN5c3RlbSAodGhpcy5z
dGFydERlbGF5IGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90
eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKGRlbGF5KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gdGhpcy5zdGFydERlbGF5
OyB9CisgICAgICAgIGlmICghdGhpcy50YXJnZXRTdG9wRHVyYXRpb24gJiYgdGhpcy5faGFzVGFy
Z2V0U3RvcER1cmF0aW9uRGVwZW5kYW50R3JhZGllbnQoKSkgeworICAgICAgICAgICAgdGhyb3cg
IlBhcnRpY2xlIHN5c3RlbSBzdGFydGVkIHdpdGggYSB0YXJnZXRTdG9wRHVyYXRpb24gZGVwZW5k
YW50IGdyYWRpZW50IChlZy4gc3RhcnRTaXplR3JhZGllbnRzKSBidXQgbm8gdGFyZ2V0U3RvcER1
cmF0aW9uIHNldCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlbGF5KSB7CisgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5zdGFydCgw
KTsKKyAgICAgICAgICAgIH0sIGRlbGF5KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAvLyBDb252ZXJ0IHRoZSBzdWJFbWl0dGVycyBmaWVsZCB0byB0aGUgY29uc3Rh
bnQgdHlwZSBmaWVsZCBfc3ViRW1pdHRlcnMKKyAgICAgICAgdGhpcy5fcHJlcGFyZVN1YkVtaXR0
ZXJJbnRlcm5hbEFycmF5KCk7CisgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSB0cnVlOworICAgICAg
ICB0aGlzLl9zdG9wcGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2FjdHVhbEZyYW1lID0gMDsK
KyAgICAgICAgaWYgKHRoaXMuX3N1YkVtaXR0ZXJzICYmIHRoaXMuX3N1YkVtaXR0ZXJzLmxlbmd0
aCAhPSAwKSB7CisgICAgICAgICAgICB0aGlzLmFjdGl2ZVN1YlN5c3RlbXMgPSBuZXcgQXJyYXko
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXNldCBlbWl0IGdyYWRpZW50IHNvIGl0IGFjdHMg
dGhlIHNhbWUgb24gZXZlcnkgc3RhcnQKKyAgICAgICAgaWYgKHRoaXMuX2VtaXRSYXRlR3JhZGll
bnRzKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fZW1pdFJhdGVHcmFkaWVudHMubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRFbWl0UmF0ZUdyYWRpZW50ID0gdGhp
cy5fZW1pdFJhdGVHcmFkaWVudHNbMF07CisgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEVt
aXRSYXRlMSA9IHRoaXMuX2N1cnJlbnRFbWl0UmF0ZUdyYWRpZW50LmdldEZhY3RvcigpOworICAg
ICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRFbWl0UmF0ZTIgPSB0aGlzLl9jdXJyZW50RW1pdFJh
dGUxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX2VtaXRSYXRlR3JhZGll
bnRzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50RW1pdFJhdGUy
ID0gdGhpcy5fZW1pdFJhdGVHcmFkaWVudHNbMV0uZ2V0RmFjdG9yKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVzZXQgc3RhcnQgc2l6ZSBncmFkaWVudCBzbyBpdCBh
Y3RzIHRoZSBzYW1lIG9uIGV2ZXJ5IHN0YXJ0CisgICAgICAgIGlmICh0aGlzLl9zdGFydFNpemVH
cmFkaWVudHMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zdGFydFNpemVHcmFkaWVudHMubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGFydFNpemVHcmFkaWVu
dCA9IHRoaXMuX3N0YXJ0U2l6ZUdyYWRpZW50c1swXTsKKyAgICAgICAgICAgICAgICB0aGlzLl9j
dXJyZW50U3RhcnRTaXplMSA9IHRoaXMuX2N1cnJlbnRTdGFydFNpemVHcmFkaWVudC5nZXRGYWN0
b3IoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhcnRTaXplMiA9IHRoaXMuX2N1
cnJlbnRTdGFydFNpemUxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX3N0
YXJ0U2l6ZUdyYWRpZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY3Vy
cmVudFN0YXJ0U2l6ZTIgPSB0aGlzLl9zdGFydFNpemVHcmFkaWVudHNbMV0uZ2V0RmFjdG9yKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucHJlV2FybUN5Y2xl
cykgeworICAgICAgICAgICAgaWYgKHRoaXMuZW1pdHRlciBpbnN0YW5jZW9mIF9NZXNoZXNfYWJz
dHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFic3RyYWN0TWVzaCJdKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBub2lzZVRleHR1cmVBc1Byb2NlZHVyYWxf
MSA9IHRoaXMubm9pc2VUZXh0dXJlOworICAgICAgICAgICAgaWYgKG5vaXNlVGV4dHVyZUFzUHJv
Y2VkdXJhbF8xICYmIG5vaXNlVGV4dHVyZUFzUHJvY2VkdXJhbF8xLm9uR2VuZXJhdGVkT2JzZXJ2
YWJsZSkgeworICAgICAgICAgICAgICAgIG5vaXNlVGV4dHVyZUFzUHJvY2VkdXJhbF8xLm9uR2Vu
ZXJhdGVkT2JzZXJ2YWJsZS5hZGRPbmNlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgX3RoaXMucHJlV2FybUN5Y2xlczsgaW5kZXgrKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmFuaW1hdGUodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9pc2VUZXh0dXJlQXNQcm9jZWR1cmFsXzEucmVuZGVyKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMucHJlV2FybUN5Y2xl
czsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGUodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEFu
aW1hdGlvbnMKKyAgICAgICAgaWYgKHRoaXMuYmVnaW5BbmltYXRpb25PblN0YXJ0ICYmIHRoaXMu
YW5pbWF0aW9ucyAmJiB0aGlzLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAg
dGhpcy5nZXRTY2VuZSgpLmJlZ2luQW5pbWF0aW9uKHRoaXMsIHRoaXMuYmVnaW5BbmltYXRpb25G
cm9tLCB0aGlzLmJlZ2luQW5pbWF0aW9uVG8sIHRoaXMuYmVnaW5BbmltYXRpb25Mb29wKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU3RvcHMgdGhlIHBhcnRpY2xlIHN5c3Rl
bS4KKyAgICAgKiBAcGFyYW0gc3RvcFN1YkVtaXR0ZXJzIGlmIHRydWUgaXQgd2lsbCBzdG9wIHRo
ZSBjdXJyZW50IHN5c3RlbSBhbmQgYWxsIGNyZWF0ZWQgc3ViLVN5c3RlbXMgaWYgZmFsc2UgaXQg
d2lsbCBzdG9wIHRoZSBjdXJyZW50IHJvb3Qgc3lzdGVtIG9ubHksIHRoaXMgcGFyYW0gaXMgdXNl
ZCBieSB0aGUgcm9vdCBwYXJ0aWNsZSBzeXN0ZW0gb25seS4gdGhlIGRlZmF1bHQgdmFsdWUgaXMg
dHJ1ZS4KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0
aW9uIChzdG9wU3ViRW1pdHRlcnMpIHsKKyAgICAgICAgaWYgKHN0b3BTdWJFbWl0dGVycyA9PT0g
dm9pZCAwKSB7IHN0b3BTdWJFbWl0dGVycyA9IHRydWU7IH0KKyAgICAgICAgdGhpcy5fc3RvcHBl
ZCA9IHRydWU7CisgICAgICAgIGlmIChzdG9wU3ViRW1pdHRlcnMpIHsKKyAgICAgICAgICAgIHRo
aXMuX3N0b3BTdWJFbWl0dGVycygpOworICAgICAgICB9CisgICAgfTsKKyAgICAvLyBhbmltYXRp
b24gc2hlZXQKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIGFjdGl2ZSBwYXJ0aWNsZXMKKyAg
ICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMuX3N0b2NrUGFydGljbGVzID0gW107CisgICAgICAgIHRoaXMuX3BhcnRp
Y2xlcyA9IFtdOworICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRlbiAoZm9yIGludGVybmFs
IHVzZSBvbmx5KQorICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5fYXBwZW5k
UGFydGljbGVWZXJ0ZXggPSBmdW5jdGlvbiAoaW5kZXgsIHBhcnRpY2xlLCBvZmZzZXRYLCBvZmZz
ZXRZKSB7CisgICAgICAgIHZhciBvZmZzZXQgPSBpbmRleCAqIHRoaXMuX3ZlcnRleEJ1ZmZlclNp
emU7CisgICAgICAgIHRoaXMuX3ZlcnRleERhdGFbb2Zmc2V0KytdID0gcGFydGljbGUucG9zaXRp
b24ueCArIHRoaXMud29ybGRPZmZzZXQueDsKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZz
ZXQrK10gPSBwYXJ0aWNsZS5wb3NpdGlvbi55ICsgdGhpcy53b3JsZE9mZnNldC55OworICAgICAg
ICB0aGlzLl92ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRpY2xlLnBvc2l0aW9uLnogKyB0aGlz
LndvcmxkT2Zmc2V0Lno7CisgICAgICAgIHRoaXMuX3ZlcnRleERhdGFbb2Zmc2V0KytdID0gcGFy
dGljbGUuY29sb3IucjsKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZzZXQrK10gPSBwYXJ0
aWNsZS5jb2xvci5nOworICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRp
Y2xlLmNvbG9yLmI7CisgICAgICAgIHRoaXMuX3ZlcnRleERhdGFbb2Zmc2V0KytdID0gcGFydGlj
bGUuY29sb3IuYTsKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZzZXQrK10gPSBwYXJ0aWNs
ZS5hbmdsZTsKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZzZXQrK10gPSBwYXJ0aWNsZS5z
Y2FsZS54ICogcGFydGljbGUuc2l6ZTsKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZzZXQr
K10gPSBwYXJ0aWNsZS5zY2FsZS55ICogcGFydGljbGUuc2l6ZTsKKyAgICAgICAgaWYgKHRoaXMu
X2lzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRh
W29mZnNldCsrXSA9IHBhcnRpY2xlLmNlbGxJbmRleDsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IXRoaXMuX2lzQmlsbGJvYXJkQmFzZWQpIHsKKyAgICAgICAgICAgIGlmIChwYXJ0aWNsZS5faW5p
dGlhbERpcmVjdGlvbikgeworICAgICAgICAgICAgICAgIHRoaXMuX3ZlcnRleERhdGFbb2Zmc2V0
KytdID0gcGFydGljbGUuX2luaXRpYWxEaXJlY3Rpb24ueDsKKyAgICAgICAgICAgICAgICB0aGlz
Ll92ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRpY2xlLl9pbml0aWFsRGlyZWN0aW9uLnk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZzZXQrK10gPSBwYXJ0aWNsZS5faW5p
dGlhbERpcmVjdGlvbi56OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZzZXQrK10gPSBwYXJ0aWNsZS5kaXJlY3Rp
b24ueDsKKyAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRp
Y2xlLmRpcmVjdGlvbi55OworICAgICAgICAgICAgICAgIHRoaXMuX3ZlcnRleERhdGFbb2Zmc2V0
KytdID0gcGFydGljbGUuZGlyZWN0aW9uLno7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAodGhpcy5iaWxsYm9hcmRNb2RlID09PSBQYXJ0aWNsZVN5c3RlbS5CSUxM
Qk9BUkRNT0RFX1NUUkVUQ0hFRCkgeworICAgICAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZz
ZXQrK10gPSBwYXJ0aWNsZS5kaXJlY3Rpb24ueDsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleERh
dGFbb2Zmc2V0KytdID0gcGFydGljbGUuZGlyZWN0aW9uLnk7CisgICAgICAgICAgICB0aGlzLl92
ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRpY2xlLmRpcmVjdGlvbi56OworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl91c2VSYW1wR3JhZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl92
ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRpY2xlLnJlbWFwRGF0YS54OworICAgICAgICAgICAg
dGhpcy5fdmVydGV4RGF0YVtvZmZzZXQrK10gPSBwYXJ0aWNsZS5yZW1hcERhdGEueTsKKyAgICAg
ICAgICAgIHRoaXMuX3ZlcnRleERhdGFbb2Zmc2V0KytdID0gcGFydGljbGUucmVtYXBEYXRhLno7
CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRpY2xlLnJlbWFw
RGF0YS53OworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fdXNlSW5zdGFuY2luZykgewor
ICAgICAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG9mZnNldFggPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
WCA9IHRoaXMuX2Vwc2lsb247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG9mZnNldFggPT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WCA9IDEg
LSB0aGlzLl9lcHNpbG9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
b2Zmc2V0WSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXRZID0gdGhpcy5fZXBz
aWxvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2Zmc2V0
WSA9PT0gMSkgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXRZID0gMSAtIHRoaXMuX2Vwc2ls
b247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
dmVydGV4RGF0YVtvZmZzZXQrK10gPSBvZmZzZXRYOworICAgICAgICAgICAgdGhpcy5fdmVydGV4
RGF0YVtvZmZzZXQrK10gPSBvZmZzZXRZOworICAgICAgICB9CisgICAgfTsKKyAgICBQYXJ0aWNs
ZVN5c3RlbS5wcm90b3R5cGUuX3N0b3BTdWJFbWl0dGVycyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgaWYgKCF0aGlzLmFjdGl2ZVN1YlN5c3RlbXMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLmFjdGl2ZVN1YlN5c3RlbXMuZm9yRWFjaChmdW5jdGlvbiAo
c3ViU3lzdGVtKSB7CisgICAgICAgICAgICBzdWJTeXN0ZW0uc3RvcCh0cnVlKTsKKyAgICAgICAg
fSk7CisgICAgICAgIHRoaXMuYWN0aXZlU3ViU3lzdGVtcyA9IG5ldyBBcnJheSgpOworICAgIH07
CisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9yZW1vdmVGcm9tUm9vdCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9yb290UGFydGljbGVTeXN0ZW0pIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9yb290UGFy
dGljbGVTeXN0ZW0uYWN0aXZlU3ViU3lzdGVtcy5pbmRleE9mKHRoaXMpOworICAgICAgICBpZiAo
aW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICB0aGlzLl9yb290UGFydGljbGVTeXN0ZW0uYWN0
aXZlU3ViU3lzdGVtcy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9CisgICAgICAgIHRoaXMu
X3Jvb3RQYXJ0aWNsZVN5c3RlbSA9IG51bGw7CisgICAgfTsKKyAgICAvLyBFbmQgb2Ygc3ViIHN5
c3RlbSBtZXRob2RzCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl91cGRhdGUgPSBmdW5j
dGlvbiAobmV3UGFydGljbGVzKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAg
IC8vIFVwZGF0ZSBjdXJyZW50CisgICAgICAgIHRoaXMuX2FsaXZlID0gdGhpcy5fcGFydGljbGVz
Lmxlbmd0aCA+IDA7CisgICAgICAgIGlmICh0aGlzLmVtaXR0ZXIucG9zaXRpb24pIHsKKyAgICAg
ICAgICAgIHZhciBlbWl0dGVyTWVzaCA9IHRoaXMuZW1pdHRlcjsKKyAgICAgICAgICAgIHRoaXMu
X2VtaXR0ZXJXb3JsZE1hdHJpeCA9IGVtaXR0ZXJNZXNoLmdldFdvcmxkTWF0cml4KCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgZW1pdHRlclBvc2l0aW9uID0g
dGhpcy5lbWl0dGVyOworICAgICAgICAgICAgdGhpcy5fZW1pdHRlcldvcmxkTWF0cml4ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLlRy
YW5zbGF0aW9uKGVtaXR0ZXJQb3NpdGlvbi54LCBlbWl0dGVyUG9zaXRpb24ueSwgZW1pdHRlclBv
c2l0aW9uLnopOworICAgICAgICB9CisgICAgICAgIHRoaXMudXBkYXRlRnVuY3Rpb24odGhpcy5f
cGFydGljbGVzKTsKKyAgICAgICAgLy8gQWRkIG5ldyBvbmVzCisgICAgICAgIHZhciBwYXJ0aWNs
ZTsKKyAgICAgICAgdmFyIF9sb29wXzIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAo
dGhpc18xLl9wYXJ0aWNsZXMubGVuZ3RoID09PSB0aGlzXzEuX2NhcGFjaXR5KSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJicmVhayI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJ0
aWNsZSA9IHRoaXNfMS5fY3JlYXRlUGFydGljbGUoKTsKKyAgICAgICAgICAgIHRoaXNfMS5fcGFy
dGljbGVzLnB1c2gocGFydGljbGUpOworICAgICAgICAgICAgLy8gRW1pdHRlcgorICAgICAgICAg
ICAgdmFyIGVtaXRQb3dlciA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSh0aGlzXzEubWluRW1pdFBvd2VyLCB0aGlz
XzEubWF4RW1pdFBvd2VyKTsKKyAgICAgICAgICAgIGlmICh0aGlzXzEuc3RhcnRQb3NpdGlvbkZ1
bmN0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhpc18xLnN0YXJ0UG9zaXRpb25GdW5jdGlvbih0
aGlzXzEuX2VtaXR0ZXJXb3JsZE1hdHJpeCwgcGFydGljbGUucG9zaXRpb24sIHBhcnRpY2xlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXNf
MS5wYXJ0aWNsZUVtaXR0ZXJUeXBlLnN0YXJ0UG9zaXRpb25GdW5jdGlvbih0aGlzXzEuX2VtaXR0
ZXJXb3JsZE1hdHJpeCwgcGFydGljbGUucG9zaXRpb24sIHBhcnRpY2xlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh0aGlzXzEuc3RhcnREaXJlY3Rpb25GdW5jdGlvbikgeworICAg
ICAgICAgICAgICAgIHRoaXNfMS5zdGFydERpcmVjdGlvbkZ1bmN0aW9uKHRoaXNfMS5fZW1pdHRl
cldvcmxkTWF0cml4LCBwYXJ0aWNsZS5kaXJlY3Rpb24sIHBhcnRpY2xlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXNfMS5wYXJ0aWNsZUVt
aXR0ZXJUeXBlLnN0YXJ0RGlyZWN0aW9uRnVuY3Rpb24odGhpc18xLl9lbWl0dGVyV29ybGRNYXRy
aXgsIHBhcnRpY2xlLmRpcmVjdGlvbiwgcGFydGljbGUpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGVtaXRQb3dlciA9PT0gMCkgeworICAgICAgICAgICAgICAgIGlmICghcGFydGlj
bGUuX2luaXRpYWxEaXJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuX2lu
aXRpYWxEaXJlY3Rpb24gPSBwYXJ0aWNsZS5kaXJlY3Rpb24uY2xvbmUoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnRp
Y2xlLl9pbml0aWFsRGlyZWN0aW9uLmNvcHlGcm9tKHBhcnRpY2xlLmRpcmVjdGlvbik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgcGFydGljbGUuX2luaXRpYWxEaXJlY3Rpb24gPSBudWxsOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcGFydGljbGUuZGlyZWN0aW9uLnNjYWxlSW5QbGFjZShlbWl0UG93ZXIp
OworICAgICAgICAgICAgLy8gTGlmZSB0aW1lCisgICAgICAgICAgICBpZiAodGhpc18xLnRhcmdl
dFN0b3BEdXJhdGlvbiAmJiB0aGlzXzEuX2xpZmVUaW1lR3JhZGllbnRzICYmIHRoaXNfMS5fbGlm
ZVRpbWVHcmFkaWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHZhciByYXRpb18x
ID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjYWxh
ciJdLkNsYW1wKHRoaXNfMS5fYWN0dWFsRnJhbWUgLyB0aGlzXzEudGFyZ2V0U3RvcER1cmF0aW9u
KTsKKyAgICAgICAgICAgICAgICBfTWlzY19ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRDdXJyZW50R3JhZGllbnQocmF0aW9fMSwgdGhp
c18xLl9saWZlVGltZUdyYWRpZW50cywgZnVuY3Rpb24gKGN1cnJlbnRHcmFkaWVudCwgbmV4dEdy
YWRpZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmYWN0b3JHcmFkaWVudDEgPSBjdXJy
ZW50R3JhZGllbnQ7CisgICAgICAgICAgICAgICAgICAgIHZhciBmYWN0b3JHcmFkaWVudDIgPSBu
ZXh0R3JhZGllbnQ7CisgICAgICAgICAgICAgICAgICAgIHZhciBsaWZlVGltZTEgPSBmYWN0b3JH
cmFkaWVudDEuZ2V0RmFjdG9yKCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBsaWZlVGltZTIg
PSBmYWN0b3JHcmFkaWVudDIuZ2V0RmFjdG9yKCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBn
cmFkaWVudCA9IChyYXRpb18xIC0gZmFjdG9yR3JhZGllbnQxLmdyYWRpZW50KSAvIChmYWN0b3JH
cmFkaWVudDIuZ3JhZGllbnQgLSBmYWN0b3JHcmFkaWVudDEuZ3JhZGllbnQpOworICAgICAgICAg
ICAgICAgICAgICBwYXJ0aWNsZS5saWZlVGltZSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5MZXJwKGxpZmVUaW1lMSwgbGlmZVRpbWUy
LCBncmFkaWVudCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZS5saWZlVGltZSA9IF9NYXRoc19t
YXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5SYW5kb21S
YW5nZSh0aGlzXzEubWluTGlmZVRpbWUsIHRoaXNfMS5tYXhMaWZlVGltZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBTaXplCisgICAgICAgICAgICBpZiAoIXRoaXNfMS5fc2l6ZUdy
YWRpZW50cyB8fCB0aGlzXzEuX3NpemVHcmFkaWVudHMubGVuZ3RoID09PSAwKSB7CisgICAgICAg
ICAgICAgICAgcGFydGljbGUuc2l6ZSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSh0aGlzXzEubWluU2l6ZSwgdGhp
c18xLm1heFNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRTaXplR3JhZGllbnQgPSB0aGlzXzEuX3NpemVHcmFk
aWVudHNbMF07CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRTaXplMSA9IHBhcnRp
Y2xlLl9jdXJyZW50U2l6ZUdyYWRpZW50LmdldEZhY3RvcigpOworICAgICAgICAgICAgICAgIHBh
cnRpY2xlLnNpemUgPSBwYXJ0aWNsZS5fY3VycmVudFNpemUxOworICAgICAgICAgICAgICAgIGlm
ICh0aGlzXzEuX3NpemVHcmFkaWVudHMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgICAg
ICBwYXJ0aWNsZS5fY3VycmVudFNpemUyID0gdGhpc18xLl9zaXplR3JhZGllbnRzWzFdLmdldEZh
Y3RvcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRTaXplMiA9IHBhcnRpY2xlLl9jdXJyZW50
U2l6ZTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
U2l6ZSBhbmQgc2NhbGUKKyAgICAgICAgICAgIHBhcnRpY2xlLnNjYWxlLmNvcHlGcm9tRmxvYXRz
KF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIi
XS5SYW5kb21SYW5nZSh0aGlzXzEubWluU2NhbGVYLCB0aGlzXzEubWF4U2NhbGVYKSwgX01hdGhz
X21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjYWxhciJdLlJhbmRv
bVJhbmdlKHRoaXNfMS5taW5TY2FsZVksIHRoaXNfMS5tYXhTY2FsZVkpKTsKKyAgICAgICAgICAg
IC8vIEFkanVzdCBzY2FsZSBieSBzdGFydCBzaXplCisgICAgICAgICAgICBpZiAodGhpc18xLl9z
dGFydFNpemVHcmFkaWVudHMgJiYgdGhpc18xLl9zdGFydFNpemVHcmFkaWVudHNbMF0gJiYgdGhp
c18xLnRhcmdldFN0b3BEdXJhdGlvbikgeworICAgICAgICAgICAgICAgIHZhciByYXRpbyA9IHRo
aXNfMS5fYWN0dWFsRnJhbWUgLyB0aGlzXzEudGFyZ2V0U3RvcER1cmF0aW9uOworICAgICAgICAg
ICAgICAgIF9NaXNjX2dyYWRpZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJHcmFk
aWVudEhlbHBlciJdLkdldEN1cnJlbnRHcmFkaWVudChyYXRpbywgdGhpc18xLl9zdGFydFNpemVH
cmFkaWVudHMsIGZ1bmN0aW9uIChjdXJyZW50R3JhZGllbnQsIG5leHRHcmFkaWVudCwgc2NhbGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRHcmFkaWVudCAhPT0gX3RoaXMuX2N1
cnJlbnRTdGFydFNpemVHcmFkaWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMu
X2N1cnJlbnRTdGFydFNpemUxID0gX3RoaXMuX2N1cnJlbnRTdGFydFNpemUyOworICAgICAgICAg
ICAgICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnRTdGFydFNpemUyID0gbmV4dEdyYWRpZW50Lmdl
dEZhY3RvcigpOworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnRTdGFydFNp
emVHcmFkaWVudCA9IGN1cnJlbnRHcmFkaWVudDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siU2NhbGFyIl0uTGVycChfdGhpcy5fY3VycmVudFN0YXJ0U2l6
ZTEsIF90aGlzLl9jdXJyZW50U3RhcnRTaXplMiwgc2NhbGUpOworICAgICAgICAgICAgICAgICAg
ICBwYXJ0aWNsZS5zY2FsZS5zY2FsZUluUGxhY2UodmFsdWUpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQW5nbGUKKyAgICAgICAgICAgIGlmICgh
dGhpc18xLl9hbmd1bGFyU3BlZWRHcmFkaWVudHMgfHwgdGhpc18xLl9hbmd1bGFyU3BlZWRHcmFk
aWVudHMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgcGFydGljbGUuYW5ndWxhclNw
ZWVkID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNj
YWxhciJdLlJhbmRvbVJhbmdlKHRoaXNfMS5taW5Bbmd1bGFyU3BlZWQsIHRoaXNfMS5tYXhBbmd1
bGFyU3BlZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgcGFydGljbGUuX2N1cnJlbnRBbmd1bGFyU3BlZWRHcmFkaWVudCA9IHRoaXNfMS5fYW5n
dWxhclNwZWVkR3JhZGllbnRzWzBdOworICAgICAgICAgICAgICAgIHBhcnRpY2xlLmFuZ3VsYXJT
cGVlZCA9IHBhcnRpY2xlLl9jdXJyZW50QW5ndWxhclNwZWVkR3JhZGllbnQuZ2V0RmFjdG9yKCk7
CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRBbmd1bGFyU3BlZWQxID0gcGFydGlj
bGUuYW5ndWxhclNwZWVkOworICAgICAgICAgICAgICAgIGlmICh0aGlzXzEuX2FuZ3VsYXJTcGVl
ZEdyYWRpZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9j
dXJyZW50QW5ndWxhclNwZWVkMiA9IHRoaXNfMS5fYW5ndWxhclNwZWVkR3JhZGllbnRzWzFdLmdl
dEZhY3RvcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRBbmd1bGFyU3BlZWQyID0gcGFydGlj
bGUuX2N1cnJlbnRBbmd1bGFyU3BlZWQxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHBhcnRpY2xlLmFuZ2xlID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKHRoaXNfMS5taW5J
bml0aWFsUm90YXRpb24sIHRoaXNfMS5tYXhJbml0aWFsUm90YXRpb24pOworICAgICAgICAgICAg
Ly8gVmVsb2NpdHkKKyAgICAgICAgICAgIGlmICh0aGlzXzEuX3ZlbG9jaXR5R3JhZGllbnRzICYm
IHRoaXNfMS5fdmVsb2NpdHlHcmFkaWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAg
IHBhcnRpY2xlLl9jdXJyZW50VmVsb2NpdHlHcmFkaWVudCA9IHRoaXNfMS5fdmVsb2NpdHlHcmFk
aWVudHNbMF07CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRWZWxvY2l0eTEgPSBw
YXJ0aWNsZS5fY3VycmVudFZlbG9jaXR5R3JhZGllbnQuZ2V0RmFjdG9yKCk7CisgICAgICAgICAg
ICAgICAgaWYgKHRoaXNfMS5fdmVsb2NpdHlHcmFkaWVudHMubGVuZ3RoID4gMSkgeworICAgICAg
ICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3VycmVudFZlbG9jaXR5MiA9IHRoaXNfMS5fdmVsb2Np
dHlHcmFkaWVudHNbMV0uZ2V0RmFjdG9yKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3VycmVudFZlbG9j
aXR5MiA9IHBhcnRpY2xlLl9jdXJyZW50VmVsb2NpdHkxOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIExpbWl0IHZlbG9jaXR5CisgICAgICAgICAgICBp
ZiAodGhpc18xLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzICYmIHRoaXNfMS5fbGltaXRWZWxvY2l0
eUdyYWRpZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJl
bnRMaW1pdFZlbG9jaXR5R3JhZGllbnQgPSB0aGlzXzEuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHNb
MF07CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRMaW1pdFZlbG9jaXR5MSA9IHBh
cnRpY2xlLl9jdXJyZW50TGltaXRWZWxvY2l0eUdyYWRpZW50LmdldEZhY3RvcigpOworICAgICAg
ICAgICAgICAgIGlmICh0aGlzXzEuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHMubGVuZ3RoID4gMSkg
eworICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3VycmVudExpbWl0VmVsb2NpdHkyID0g
dGhpc18xLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzWzFdLmdldEZhY3RvcigpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcGFy
dGljbGUuX2N1cnJlbnRMaW1pdFZlbG9jaXR5MiA9IHBhcnRpY2xlLl9jdXJyZW50TGltaXRWZWxv
Y2l0eTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
RHJhZworICAgICAgICAgICAgaWYgKHRoaXNfMS5fZHJhZ0dyYWRpZW50cyAmJiB0aGlzXzEuX2Ry
YWdHcmFkaWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9jdXJy
ZW50RHJhZ0dyYWRpZW50ID0gdGhpc18xLl9kcmFnR3JhZGllbnRzWzBdOworICAgICAgICAgICAg
ICAgIHBhcnRpY2xlLl9jdXJyZW50RHJhZzEgPSBwYXJ0aWNsZS5fY3VycmVudERyYWdHcmFkaWVu
dC5nZXRGYWN0b3IoKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpc18xLl9kcmFnR3JhZGllbnRz
Lmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnREcmFn
MiA9IHRoaXNfMS5fZHJhZ0dyYWRpZW50c1sxXS5nZXRGYWN0b3IoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xl
Ll9jdXJyZW50RHJhZzIgPSBwYXJ0aWNsZS5fY3VycmVudERyYWcxOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENvbG9yCisgICAgICAgICAgICBpZiAo
IXRoaXNfMS5fY29sb3JHcmFkaWVudHMgfHwgdGhpc18xLl9jb2xvckdyYWRpZW50cy5sZW5ndGgg
PT09IDApIHsKKyAgICAgICAgICAgICAgICBzdGVwID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKDAsIDEuMCk7Cisg
ICAgICAgICAgICAgICAgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI0X19bIkNvbG9yNCJdLkxlcnBUb1JlZih0aGlzXzEuY29sb3IxLCB0aGlzXzEuY29sb3IyLCBz
dGVwLCBwYXJ0aWNsZS5jb2xvcik7CisgICAgICAgICAgICAgICAgdGhpc18xLmNvbG9yRGVhZC5z
dWJ0cmFjdFRvUmVmKHBhcnRpY2xlLmNvbG9yLCB0aGlzXzEuX2NvbG9yRGlmZik7CisgICAgICAg
ICAgICAgICAgdGhpc18xLl9jb2xvckRpZmYuc2NhbGVUb1JlZigxLjAgLyBwYXJ0aWNsZS5saWZl
VGltZSwgcGFydGljbGUuY29sb3JTdGVwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9jdXJyZW50Q29sb3JHcmFkaWVudCA9IHRo
aXNfMS5fY29sb3JHcmFkaWVudHNbMF07CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJl
bnRDb2xvckdyYWRpZW50LmdldENvbG9yVG9SZWYocGFydGljbGUuY29sb3IpOworICAgICAgICAg
ICAgICAgIHBhcnRpY2xlLl9jdXJyZW50Q29sb3IxLmNvcHlGcm9tKHBhcnRpY2xlLmNvbG9yKTsK
KyAgICAgICAgICAgICAgICBpZiAodGhpc18xLl9jb2xvckdyYWRpZW50cy5sZW5ndGggPiAxKSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXNfMS5fY29sb3JHcmFkaWVudHNbMV0uZ2V0Q29sb3JU
b1JlZihwYXJ0aWNsZS5fY3VycmVudENvbG9yMik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3VycmVudENv
bG9yMi5jb3B5RnJvbShwYXJ0aWNsZS5jb2xvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gU2hlZXQKKyAgICAgICAgICAgIGlmICh0aGlzXzEuX2lz
QW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2luaXRp
YWxTdGFydFNwcml0ZUNlbGxJRCA9IHRoaXNfMS5zdGFydFNwcml0ZUNlbGxJRDsKKyAgICAgICAg
ICAgICAgICBwYXJ0aWNsZS5faW5pdGlhbEVuZFNwcml0ZUNlbGxJRCA9IHRoaXNfMS5lbmRTcHJp
dGVDZWxsSUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJbmhlcml0ZWQgVmVsb2Np
dHkKKyAgICAgICAgICAgIHBhcnRpY2xlLmRpcmVjdGlvbi5hZGRJblBsYWNlKHRoaXNfMS5faW5o
ZXJpdGVkVmVsb2NpdHlPZmZzZXQpOworICAgICAgICAgICAgLy8gUmFtcAorICAgICAgICAgICAg
aWYgKHRoaXNfMS5fdXNlUmFtcEdyYWRpZW50cykgeworICAgICAgICAgICAgICAgIHBhcnRpY2xl
LnJlbWFwRGF0YSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yNCJdKDAsIDEsIDAsIDEpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gTm9pc2UgdGV4dHVyZSBjb29yZGluYXRlcworICAgICAgICAgICAgaWYgKHRoaXNfMS5u
b2lzZVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFydGljbGUuX3JhbmRvbU5vaXNl
Q29vcmRpbmF0ZXMxKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9yYW5kb21Ob2lz
ZUNvb3JkaW5hdGVzMS5jb3B5RnJvbUZsb2F0cyhNYXRoLnJhbmRvbSgpLCBNYXRoLnJhbmRvbSgp
LCBNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuX3JhbmRvbU5v
aXNlQ29vcmRpbmF0ZXMyLmNvcHlGcm9tRmxvYXRzKE1hdGgucmFuZG9tKCksIE1hdGgucmFuZG9t
KCksIE1hdGgucmFuZG9tKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuX3JhbmRvbU5vaXNlQ29vcmRpbmF0
ZXMxID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJWZWN0b3IzIl0oTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20oKSk7
CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9yYW5kb21Ob2lzZUNvb3JkaW5hdGVzMiA9
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMyJdKE1hdGgucmFuZG9tKCksIE1hdGgucmFuZG9tKCksIE1hdGgucmFuZG9tKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUg
cG9zaXRpb24gb2YgdGhlIGF0dGFjaGVkIHN1Yi1lbWl0dGVycyB0byBtYXRjaCB0aGVpciBhdHRh
Y2hlZCBwYXJ0aWNsZQorICAgICAgICAgICAgcGFydGljbGUuX2luaGVyaXRQYXJ0aWNsZUluZm9U
b1N1YkVtaXR0ZXJzKCk7CisgICAgICAgIH07CisgICAgICAgIHZhciB0aGlzXzEgPSB0aGlzLCBz
dGVwOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbmV3UGFydGljbGVzOyBp
bmRleCsrKSB7CisgICAgICAgICAgICB2YXIgc3RhdGVfMSA9IF9sb29wXzIoKTsKKyAgICAgICAg
ICAgIGlmIChzdGF0ZV8xID09PSAiYnJlYWsiKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBhcnRpY2xlU3lzdGVtLl9H
ZXRBdHRyaWJ1dGVOYW1lc09yT3B0aW9ucyA9IGZ1bmN0aW9uIChpc0FuaW1hdGlvblNoZWV0RW5h
YmxlZCwgaXNCaWxsYm9hcmRCYXNlZCwgdXNlUmFtcEdyYWRpZW50cykgeworICAgICAgICBpZiAo
aXNBbmltYXRpb25TaGVldEVuYWJsZWQgPT09IHZvaWQgMCkgeyBpc0FuaW1hdGlvblNoZWV0RW5h
YmxlZCA9IGZhbHNlOyB9CisgICAgICAgIGlmIChpc0JpbGxib2FyZEJhc2VkID09PSB2b2lkIDAp
IHsgaXNCaWxsYm9hcmRCYXNlZCA9IGZhbHNlOyB9CisgICAgICAgIGlmICh1c2VSYW1wR3JhZGll
bnRzID09PSB2b2lkIDApIHsgdXNlUmFtcEdyYWRpZW50cyA9IGZhbHNlOyB9CisgICAgICAgIHZh
ciBhdHRyaWJ1dGVOYW1lc09yT3B0aW9ucyA9IFtfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2lu
ZCwgImFuZ2xlIiwgIm9mZnNldCIsICJzaXplIl07CisgICAgICAgIGlmIChpc0FuaW1hdGlvblNo
ZWV0RW5hYmxlZCkgeworICAgICAgICAgICAgYXR0cmlidXRlTmFtZXNPck9wdGlvbnMucHVzaCgi
Y2VsbEluZGV4Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0JpbGxib2FyZEJhc2VkKSB7
CisgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lc09yT3B0aW9ucy5wdXNoKCJkaXJlY3Rpb24iKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodXNlUmFtcEdyYWRpZW50cykgeworICAgICAgICAgICAg
YXR0cmlidXRlTmFtZXNPck9wdGlvbnMucHVzaCgicmVtYXBEYXRhIik7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWVzT3JPcHRpb25zOworICAgIH07CisgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5fR2V0RWZmZWN0Q3JlYXRpb25PcHRpb25zID0g
ZnVuY3Rpb24gKGlzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgIGlmIChpc0FuaW1h
dGlvblNoZWV0RW5hYmxlZCA9PT0gdm9pZCAwKSB7IGlzQW5pbWF0aW9uU2hlZXRFbmFibGVkID0g
ZmFsc2U7IH0KKyAgICAgICAgdmFyIGVmZmVjdENyZWF0aW9uT3B0aW9uID0gWyJpbnZWaWV3Iiwg
InZpZXciLCAicHJvamVjdGlvbiIsICJ2Q2xpcFBsYW5lIiwgInZDbGlwUGxhbmUyIiwgInZDbGlw
UGxhbmUzIiwgInZDbGlwUGxhbmU0IiwgInRleHR1cmVNYXNrIiwgInRyYW5zbGF0aW9uUGl2b3Qi
LCAiZXllUG9zaXRpb24iXTsKKyAgICAgICAgaWYgKGlzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7
CisgICAgICAgICAgICBlZmZlY3RDcmVhdGlvbk9wdGlvbi5wdXNoKCJwYXJ0aWNsZXNJbmZvcyIp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBlZmZlY3RDcmVhdGlvbk9wdGlvbjsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9nZXRF
ZmZlY3QgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKSB7CisgICAgICAgIGlmICh0aGlzLl9jdXN0b21F
ZmZlY3QpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21FZmZlY3Q7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGRlZmluZXMgPSBbXTsKKyAgICAgICAgaWYgKHRoaXMuX3NjZW5lLmNs
aXBQbGFuZSkgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIENMSVBQTEFORSIp
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9zY2VuZS5jbGlwUGxhbmUyKSB7CisgICAg
ICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgQ0xJUFBMQU5FMiIpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9zY2VuZS5jbGlwUGxhbmUzKSB7CisgICAgICAgICAgICBkZWZpbmVz
LnB1c2goIiNkZWZpbmUgQ0xJUFBMQU5FMyIpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
Ll9zY2VuZS5jbGlwUGxhbmU0KSB7CisgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUg
Q0xJUFBMQU5FNCIpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGlvblNo
ZWV0RW5hYmxlZCkgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEFOSU1BVEVT
SEVFVCIpOworICAgICAgICB9CisgICAgICAgIGlmIChibGVuZE1vZGUgPT09IFBhcnRpY2xlU3lz
dGVtLkJMRU5ETU9ERV9NVUxUSVBMWSkgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVm
aW5lIEJMRU5ETVVMVElQTFlNT0RFIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Vz
ZVJhbXBHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBSQU1Q
R1JBRElFTlQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5faXNCaWxsYm9hcmRCYXNl
ZCkgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEJJTExCT0FSRCIpOworICAg
ICAgICAgICAgc3dpdGNoICh0aGlzLmJpbGxib2FyZE1vZGUpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFBhcnRpY2xlU3lzdGVtLkJJTExCT0FSRE1PREVfWToKKyAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEJJTExCT0FSRFkiKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBQYXJ0aWNsZVN5c3RlbS5CSUxMQk9BUkRNT0RF
X1NUUkVUQ0hFRDoKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEJJ
TExCT0FSRFNUUkVUQ0hFRCIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIFBhcnRpY2xlU3lzdGVtLkJJTExCT0FSRE1PREVfQUxMOgorICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0
aW9uKSB7CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnBy
ZXBhcmVEZWZpbmVzKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25EZWZpbmVzKTsK
KyAgICAgICAgICAgIGRlZmluZXMucHVzaCh0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0
aW9uRGVmaW5lcy50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBFZmZlY3QKKyAg
ICAgICAgdmFyIGpvaW4gPSBkZWZpbmVzLmpvaW4oIlxuIik7CisgICAgICAgIGlmICh0aGlzLl9j
YWNoZWREZWZpbmVzICE9PSBqb2luKSB7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWREZWZpbmVz
ID0gam9pbjsKKyAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzTmFtZXNPck9wdGlvbnMgPSBQYXJ0
aWNsZVN5c3RlbS5fR2V0QXR0cmlidXRlTmFtZXNPck9wdGlvbnModGhpcy5faXNBbmltYXRpb25T
aGVldEVuYWJsZWQsIHRoaXMuX2lzQmlsbGJvYXJkQmFzZWQgJiYgdGhpcy5iaWxsYm9hcmRNb2Rl
ICE9PSBQYXJ0aWNsZVN5c3RlbS5CSUxMQk9BUkRNT0RFX1NUUkVUQ0hFRCwgdGhpcy5fdXNlUmFt
cEdyYWRpZW50cyk7CisgICAgICAgICAgICB2YXIgZWZmZWN0Q3JlYXRpb25PcHRpb24gPSBQYXJ0
aWNsZVN5c3RlbS5fR2V0RWZmZWN0Q3JlYXRpb25PcHRpb25zKHRoaXMuX2lzQW5pbWF0aW9uU2hl
ZXRFbmFibGVkKTsKKyAgICAgICAgICAgIHZhciBzYW1wbGVycyA9IFsiZGlmZnVzZVNhbXBsZXIi
LCAicmFtcFNhbXBsZXIiXTsKKyAgICAgICAgICAgIGlmIChfTWF0ZXJpYWxzX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siSW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbiJdKSB7CisgICAgICAgICAgICAgICAgX01hdGVyaWFsc19pbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIklt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iXS5QcmVwYXJlVW5pZm9ybXMoZWZmZWN0Q3JlYXRp
b25PcHRpb24sIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25EZWZpbmVzKTsKKyAg
ICAgICAgICAgICAgICBfTWF0ZXJpYWxzX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiJd
LlByZXBhcmVTYW1wbGVycyhzYW1wbGVycywgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbkRlZmluZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZWZmZWN0ID0g
dGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlRWZmZWN0KCJwYXJ0aWNsZXMiLCBhdHRyaWJ1
dGVzTmFtZXNPck9wdGlvbnMsIGVmZmVjdENyZWF0aW9uT3B0aW9uLCBzYW1wbGVycywgam9pbik7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2VmZmVjdDsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEFuaW1hdGVzIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gZm9yIHRoZSBjdXJyZW50IGZy
YW1lIGJ5IGVtaXR0aW5nIG5ldyBwYXJ0aWNsZXMgYW5kIG9yIGFuaW1hdGluZyB0aGUgbGl2aW5n
IG9uZXMuCisgICAgICogQHBhcmFtIHByZVdhcm1Pbmx5IHdpbGwgcHJldmVudCB0aGUgc3lzdGVt
IGZyb20gdXBkYXRpbmcgdGhlIHZlcnRleCBidWZmZXIgKGRlZmF1bHQgaXMgZmFsc2UpCisgICAg
ICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFuaW1hdGUgPSBmdW5jdGlvbiAocHJl
V2FybU9ubHkpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHByZVdh
cm1Pbmx5ID09PSB2b2lkIDApIHsgcHJlV2FybU9ubHkgPSBmYWxzZTsgfQorICAgICAgICBpZiAo
IXRoaXMuX3N0YXJ0ZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIXByZVdhcm1Pbmx5KSB7CisgICAgICAgICAgICAvLyBDaGVjaworICAgICAgICAgICAg
aWYgKCF0aGlzLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50UmVuZGVySWQgPT09IHRoaXMuX3Nj
ZW5lLmdldEZyYW1lSWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRSZW5kZXJJZCA9IHRoaXMuX3NjZW5lLmdldEZy
YW1lSWQoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zY2FsZWRVcGRhdGVTcGVlZCA9IHRo
aXMudXBkYXRlU3BlZWQgKiAocHJlV2FybU9ubHkgPyB0aGlzLnByZVdhcm1TdGVwT2Zmc2V0IDog
dGhpcy5fc2NlbmUuZ2V0QW5pbWF0aW9uUmF0aW8oKSk7CisgICAgICAgIC8vIERldGVybWluZSB0
aGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB3ZSBuZWVkIHRvIGNyZWF0ZQorICAgICAgICB2YXIgbmV3
UGFydGljbGVzOworICAgICAgICBpZiAodGhpcy5tYW51YWxFbWl0Q291bnQgPiAtMSkgeworICAg
ICAgICAgICAgbmV3UGFydGljbGVzID0gdGhpcy5tYW51YWxFbWl0Q291bnQ7CisgICAgICAgICAg
ICB0aGlzLl9uZXdQYXJ0c0V4Y2VzcyA9IDA7CisgICAgICAgICAgICB0aGlzLm1hbnVhbEVtaXRD
b3VudCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgcmF0
ZV8xID0gdGhpcy5lbWl0UmF0ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9lbWl0UmF0ZUdyYWRp
ZW50cyAmJiB0aGlzLl9lbWl0UmF0ZUdyYWRpZW50cy5sZW5ndGggPiAwICYmIHRoaXMudGFyZ2V0
U3RvcER1cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdmFyIHJhdGlvID0gdGhpcy5fYWN0dWFs
RnJhbWUgLyB0aGlzLnRhcmdldFN0b3BEdXJhdGlvbjsKKyAgICAgICAgICAgICAgICBfTWlzY19n
cmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5H
ZXRDdXJyZW50R3JhZGllbnQocmF0aW8sIHRoaXMuX2VtaXRSYXRlR3JhZGllbnRzLCBmdW5jdGlv
biAoY3VycmVudEdyYWRpZW50LCBuZXh0R3JhZGllbnQsIHNjYWxlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjdXJyZW50R3JhZGllbnQgIT09IF90aGlzLl9jdXJyZW50RW1pdFJhdGVHcmFk
aWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnRFbWl0UmF0ZTEg
PSBfdGhpcy5fY3VycmVudEVtaXRSYXRlMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlz
Ll9jdXJyZW50RW1pdFJhdGUyID0gbmV4dEdyYWRpZW50LmdldEZhY3RvcigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnRFbWl0UmF0ZUdyYWRpZW50ID0gY3VycmVudEdy
YWRpZW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJhdGVf
MSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2Fs
YXIiXS5MZXJwKF90aGlzLl9jdXJyZW50RW1pdFJhdGUxLCBfdGhpcy5fY3VycmVudEVtaXRSYXRl
Miwgc2NhbGUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbmV3UGFydGljbGVzID0gKChyYXRlXzEgKiB0aGlzLl9zY2FsZWRVcGRhdGVTcGVlZCkgPj4g
MCk7CisgICAgICAgICAgICB0aGlzLl9uZXdQYXJ0c0V4Y2VzcyArPSByYXRlXzEgKiB0aGlzLl9z
Y2FsZWRVcGRhdGVTcGVlZCAtIG5ld1BhcnRpY2xlczsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fbmV3UGFydHNFeGNlc3MgPiAxLjApIHsKKyAgICAgICAgICAgIG5ld1BhcnRpY2xlcyAr
PSB0aGlzLl9uZXdQYXJ0c0V4Y2VzcyA+PiAwOworICAgICAgICAgICAgdGhpcy5fbmV3UGFydHNF
eGNlc3MgLT0gdGhpcy5fbmV3UGFydHNFeGNlc3MgPj4gMDsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9hbGl2ZSA9IGZhbHNlOworICAgICAgICBpZiAoIXRoaXMuX3N0b3BwZWQpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2FjdHVhbEZyYW1lICs9IHRoaXMuX3NjYWxlZFVwZGF0ZVNwZWVkOworICAg
ICAgICAgICAgaWYgKHRoaXMudGFyZ2V0U3RvcER1cmF0aW9uICYmIHRoaXMuX2FjdHVhbEZyYW1l
ID49IHRoaXMudGFyZ2V0U3RvcER1cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zdG9w
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBuZXdQYXJ0aWNsZXMgPSAwOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZShuZXdQ
YXJ0aWNsZXMpOworICAgICAgICAvLyBTdG9wcGVkPworICAgICAgICBpZiAodGhpcy5fc3RvcHBl
ZCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9hbGl2ZSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX3N0YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5vbkFuaW1hdGlv
bkVuZCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQW5pbWF0aW9uRW5kKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpc3Bvc2VPblN0b3ApIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuX3RvQmVEaXNwb3NlZC5wdXNoKHRoaXMp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXByZVdhcm1Pbmx5KSB7CisgICAgICAgICAgICAvLyBVcGRhdGUgVkJPCisgICAgICAgICAg
ICB2YXIgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFy
IHBhcnRpY2xlID0gdGhpcy5fcGFydGljbGVzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9hcHBlbmRQYXJ0aWNsZVZlcnRpY2VzKG9mZnNldCwgcGFydGljbGUpOworICAgICAgICAgICAg
ICAgIG9mZnNldCArPSB0aGlzLl91c2VJbnN0YW5jaW5nID8gMSA6IDQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodGhpcy5fdmVydGV4QnVmZmVyKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fdmVydGV4QnVmZmVyLnVwZGF0ZSh0aGlzLl92ZXJ0ZXhEYXRhKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5tYW51YWxFbWl0Q291bnQgPT09IDAgJiYg
dGhpcy5kaXNwb3NlT25TdG9wKSB7CisgICAgICAgICAgICB0aGlzLnN0b3AoKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9hcHBlbmRQYXJ0aWNsZVZl
cnRpY2VzID0gZnVuY3Rpb24gKG9mZnNldCwgcGFydGljbGUpIHsKKyAgICAgICAgdGhpcy5fYXBw
ZW5kUGFydGljbGVWZXJ0ZXgob2Zmc2V0KyssIHBhcnRpY2xlLCAwLCAwKTsKKyAgICAgICAgaWYg
KCF0aGlzLl91c2VJbnN0YW5jaW5nKSB7CisgICAgICAgICAgICB0aGlzLl9hcHBlbmRQYXJ0aWNs
ZVZlcnRleChvZmZzZXQrKywgcGFydGljbGUsIDEsIDApOworICAgICAgICAgICAgdGhpcy5fYXBw
ZW5kUGFydGljbGVWZXJ0ZXgob2Zmc2V0KyssIHBhcnRpY2xlLCAxLCAxKTsKKyAgICAgICAgICAg
IHRoaXMuX2FwcGVuZFBhcnRpY2xlVmVydGV4KG9mZnNldCsrLCBwYXJ0aWNsZSwgMCwgMSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlYnVpbGRzIHRoZSBwYXJ0aWNsZSBz
eXN0ZW0uCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLnJlYnVpbGQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2NyZWF0ZUluZGV4QnVmZmVyKCk7CisgICAgICAg
IGlmICh0aGlzLl92ZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZl
ci5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl92
ZXJ0ZXhCdWZmZXJzKSB7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzW2tleV0uX3Jl
YnVpbGQoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogSXMgdGhpcyBzeXN0
ZW0gcmVhZHkgdG8gYmUgdXNlZC9yZW5kZXJlZAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUg
c3lzdGVtIGlzIHJlYWR5CisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmlz
UmVhZHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5lbWl0dGVyIHx8ICF0aGlz
Ll9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmlzUmVhZHkoKSB8fCAhdGhpcy5wYXJ0aWNs
ZVRleHR1cmUgfHwgIXRoaXMucGFydGljbGVUZXh0dXJlLmlzUmVhZHkoKSkgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmJsZW5kTW9kZSAh
PT0gUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX01VTFRJUExZQUREKSB7CisgICAgICAgICAgICBp
ZiAoIXRoaXMuX2dldEVmZmVjdCh0aGlzLmJsZW5kTW9kZSkuaXNSZWFkeSgpKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9nZXRFZmZlY3QoUGFydGljbGVTeXN0ZW0u
QkxFTkRNT0RFX01VTFRJUExZKS5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXRoaXMuX2dldEVmZmVjdChQ
YXJ0aWNsZVN5c3RlbS5CTEVORE1PREVfQUREKS5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfTsKKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX3JlbmRlciA9IGZ1
bmN0aW9uIChibGVuZE1vZGUpIHsKKyAgICAgICAgdmFyIGVmZmVjdCA9IHRoaXMuX2dldEVmZmVj
dChibGVuZE1vZGUpOworICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5l
KCk7CisgICAgICAgIC8vIFJlbmRlcgorICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KGVmZmVj
dCk7CisgICAgICAgIHZhciB2aWV3TWF0cml4ID0gdGhpcy5fc2NlbmUuZ2V0Vmlld01hdHJpeCgp
OworICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgiZGlmZnVzZVNhbXBsZXIiLCB0aGlzLnBhcnRp
Y2xlVGV4dHVyZSk7CisgICAgICAgIGVmZmVjdC5zZXRNYXRyaXgoInZpZXciLCB2aWV3TWF0cml4
KTsKKyAgICAgICAgZWZmZWN0LnNldE1hdHJpeCgicHJvamVjdGlvbiIsIHRoaXMuX3NjZW5lLmdl
dFByb2plY3Rpb25NYXRyaXgoKSk7CisgICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGlvblNoZWV0
RW5hYmxlZCAmJiB0aGlzLnBhcnRpY2xlVGV4dHVyZSkgeworICAgICAgICAgICAgdmFyIGJhc2VT
aXplID0gdGhpcy5wYXJ0aWNsZVRleHR1cmUuZ2V0QmFzZVNpemUoKTsKKyAgICAgICAgICAgIGVm
ZmVjdC5zZXRGbG9hdDMoInBhcnRpY2xlc0luZm9zIiwgdGhpcy5zcHJpdGVDZWxsV2lkdGggLyBi
YXNlU2l6ZS53aWR0aCwgdGhpcy5zcHJpdGVDZWxsSGVpZ2h0IC8gYmFzZVNpemUuaGVpZ2h0LCBi
YXNlU2l6ZS53aWR0aCAvIHRoaXMuc3ByaXRlQ2VsbFdpZHRoKTsKKyAgICAgICAgfQorICAgICAg
ICBlZmZlY3Quc2V0VmVjdG9yMigidHJhbnNsYXRpb25QaXZvdCIsIHRoaXMudHJhbnNsYXRpb25Q
aXZvdCk7CisgICAgICAgIGVmZmVjdC5zZXRGbG9hdDQoInRleHR1cmVNYXNrIiwgdGhpcy50ZXh0
dXJlTWFzay5yLCB0aGlzLnRleHR1cmVNYXNrLmcsIHRoaXMudGV4dHVyZU1hc2suYiwgdGhpcy50
ZXh0dXJlTWFzay5hKTsKKyAgICAgICAgaWYgKHRoaXMuX2lzQmlsbGJvYXJkQmFzZWQpIHsKKyAg
ICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmE7CisgICAgICAg
ICAgICBlZmZlY3Quc2V0VmVjdG9yMygiZXllUG9zaXRpb24iLCBjYW1lcmEuZ2xvYmFsUG9zaXRp
b24pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9yYW1wR3JhZGllbnRzVGV4dHVyZSkg
eworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInJhbXBTYW1wbGVyIiwgdGhpcy5fcmFt
cEdyYWRpZW50c1RleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9zY2VuZS5j
bGlwUGxhbmUgfHwgdGhpcy5fc2NlbmUuY2xpcFBsYW5lMiB8fCB0aGlzLl9zY2VuZS5jbGlwUGxh
bmUzIHx8IHRoaXMuX3NjZW5lLmNsaXBQbGFuZTQpIHsKKyAgICAgICAgICAgIHZhciBpbnZWaWV3
ID0gdmlld01hdHJpeC5jbG9uZSgpOworICAgICAgICAgICAgaW52Vmlldy5pbnZlcnQoKTsKKyAg
ICAgICAgICAgIGVmZmVjdC5zZXRNYXRyaXgoImludlZpZXciLCBpbnZWaWV3KTsKKyAgICAgICAg
ICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
X1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kQ2xpcFBsYW5lKGVmZmVjdCwgdGhpcy5fc2NlbmUpOwor
ICAgICAgICB9CisgICAgICAgIGVuZ2luZS5iaW5kQnVmZmVycyh0aGlzLl92ZXJ0ZXhCdWZmZXJz
LCB0aGlzLl9pbmRleEJ1ZmZlciwgZWZmZWN0KTsKKyAgICAgICAgLy8gaW1hZ2UgcHJvY2Vzc2lu
ZworICAgICAgICBpZiAodGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiAhdGhp
cy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5hcHBseUJ5UG9zdFByb2Nlc3MpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uYmluZChlZmZlY3Qp
OworICAgICAgICB9CisgICAgICAgIC8vIERyYXcgb3JkZXIKKyAgICAgICAgc3dpdGNoIChibGVu
ZE1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX0FERDoK
KyAgICAgICAgICAgICAgICBlbmdpbmUuc2V0QWxwaGFNb2RlKF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siQ29uc3RhbnRzIl0uQUxQSEFfQUREKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUGFydGljbGVTeXN0ZW0uQkxF
TkRNT0RFX09ORU9ORToKKyAgICAgICAgICAgICAgICBlbmdpbmUuc2V0QWxwaGFNb2RlKF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siQ29uc3RhbnRzIl0u
QUxQSEFfT05FT05FKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
UGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX1NUQU5EQVJEOgorICAgICAgICAgICAgICAgIGVuZ2lu
ZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xOF9fWyJDb25zdGFudHMiXS5BTFBIQV9DT01CSU5FKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX01VTFRJUExZOgor
ICAgICAgICAgICAgICAgIGVuZ2luZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJDb25zdGFudHMiXS5BTFBIQV9NVUxUSVBMWSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Vz
ZUluc3RhbmNpbmcpIHsKKyAgICAgICAgICAgIGVuZ2luZS5kcmF3QXJyYXlzVHlwZShfTWF0ZXJp
YWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsIl0uVHJp
YW5nbGVGYW5EcmF3TW9kZSwgMCwgNCwgdGhpcy5fcGFydGljbGVzLmxlbmd0aCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbmdpbmUuZHJhd0VsZW1lbnRzVHlwZShf
TWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFs
Il0uVHJpYW5nbGVGaWxsTW9kZSwgMCwgdGhpcy5fcGFydGljbGVzLmxlbmd0aCAqIDYpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmVuZGVycyB0aGUgcGFydGljbGUgc3lzdGVtIGluIGl0cyBjdXJyZW50
IHN0YXRlLgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG51bWJlciBvZiBwYXJ0aWNsZXMK
KyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAvLyBDaGVjaworICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSgpIHx8ICF0
aGlzLl9wYXJ0aWNsZXMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAg
IGVuZ2luZS5zZXRTdGF0ZShmYWxzZSk7CisgICAgICAgIGlmICh0aGlzLmZvcmNlRGVwdGhXcml0
ZSkgeworICAgICAgICAgICAgZW5naW5lLnNldERlcHRoV3JpdGUodHJ1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIG91dHBhcnRpY2xlcyA9IDA7CisgICAgICAgIGlmICh0aGlzLmJsZW5kTW9k
ZSA9PT0gUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX01VTFRJUExZQUREKSB7CisgICAgICAgICAg
ICBvdXRwYXJ0aWNsZXMgPSB0aGlzLl9yZW5kZXIoUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX01V
TFRJUExZKSArIHRoaXMuX3JlbmRlcihQYXJ0aWNsZVN5c3RlbS5CTEVORE1PREVfQUREKTsKKyAg
ICAgICAgfQorICAgICAgICBvdXRwYXJ0aWNsZXMgPSB0aGlzLl9yZW5kZXIodGhpcy5ibGVuZE1v
ZGUpOworICAgICAgICBlbmdpbmUudW5iaW5kSW5zdGFuY2VBdHRyaWJ1dGVzKCk7CisgICAgICAg
IGVuZ2luZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xOF9fWyJDb25zdGFudHMiXS5BTFBIQV9ESVNBQkxFKTsKKyAgICAgICAgcmV0dXJu
IG91dHBhcnRpY2xlczsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBwYXJ0
aWNsZSBzeXN0ZW0gYW5kIGZyZWUgdGhlIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgICAgICogQHBh
cmFtIGRpc3Bvc2VUZXh0dXJlIGRlZmluZXMgaWYgdGhlIHBhcnRpY3VsZSB0ZXh0dXJlIG11c3Qg
YmUgZGlzcG9zZWQgYXMgd2VsbCAodHJ1ZSBieSBkZWZhdWx0KQorICAgICAqLworICAgIFBhcnRp
Y2xlU3lzdGVtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGRpc3Bvc2VUZXh0dXJlKSB7
CisgICAgICAgIGlmIChkaXNwb3NlVGV4dHVyZSA9PT0gdm9pZCAwKSB7IGRpc3Bvc2VUZXh0dXJl
ID0gdHJ1ZTsgfQorICAgICAgICBpZiAodGhpcy5fdmVydGV4QnVmZmVyKSB7CisgICAgICAgICAg
ICB0aGlzLl92ZXJ0ZXhCdWZmZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fdmVydGV4
QnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc3ByaXRlQnVmZmVy
KSB7CisgICAgICAgICAgICB0aGlzLl9zcHJpdGVCdWZmZXIuZGlzcG9zZSgpOworICAgICAgICAg
ICAgdGhpcy5fc3ByaXRlQnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy5faW5kZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLl9y
ZWxlYXNlQnVmZmVyKHRoaXMuX2luZGV4QnVmZmVyKTsKKyAgICAgICAgICAgIHRoaXMuX2luZGV4
QnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGlzcG9zZVRleHR1cmUgJiYg
dGhpcy5wYXJ0aWNsZVRleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMucGFydGljbGVUZXh0dXJl
LmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMucGFydGljbGVUZXh0dXJlID0gbnVsbDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZGlzcG9zZVRleHR1cmUgJiYgdGhpcy5ub2lzZVRleHR1cmUp
IHsKKyAgICAgICAgICAgIHRoaXMubm9pc2VUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAg
IHRoaXMubm9pc2VUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5f
cmFtcEdyYWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3JhbXBHcmFkaWVudHNU
ZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX3JhbXBHcmFkaWVudHNUZXh0dXJl
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9yZW1vdmVGcm9tUm9vdCgpOworICAg
ICAgICBpZiAodGhpcy5fc3ViRW1pdHRlcnMgJiYgdGhpcy5fc3ViRW1pdHRlcnMubGVuZ3RoKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fc3ViRW1pdHRl
cnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBf
YSA9IHRoaXMuX3N1YkVtaXR0ZXJzW2luZGV4XTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHN1YkVtaXR0ZXIgPSBfYVtfaV07CisgICAgICAgICAgICAg
ICAgICAgIHN1YkVtaXR0ZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3N1YkVtaXR0ZXJzID0gW107CisgICAgICAgICAgICB0
aGlzLnN1YkVtaXR0ZXJzID0gW107CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2Rpc3Bv
c2VFbWl0dGVyT25EaXNwb3NlICYmIHRoaXMuZW1pdHRlciAmJiB0aGlzLmVtaXR0ZXIuZGlzcG9z
ZSkgeworICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmRpc3Bvc2UodHJ1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgLy8gUmVtb3ZlIGZyb20gc2NlbmUKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5f
c2NlbmUucGFydGljbGVTeXN0ZW1zLmluZGV4T2YodGhpcyk7CisgICAgICAgIGlmIChpbmRleCA+
IC0xKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5wYXJ0aWNsZVN5c3RlbXMuc3BsaWNlKGlu
ZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zY2VuZS5fYWN0aXZlUGFydGljbGVT
eXN0ZW1zLmRpc3Bvc2UoKTsKKyAgICAgICAgLy8gQ2FsbGJhY2sKKyAgICAgICAgdGhpcy5vbkRp
c3Bvc2VPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgdGhpcy5vbkRp
c3Bvc2VPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICB9Owor
ICAgIC8vIENsb25lCisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBwYXJ0aWNsZSBzeXN0ZW0u
CisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsb25lZCBvYmplY3QKKyAgICAg
KiBAcGFyYW0gbmV3RW1pdHRlciBUaGUgbmV3IGVtaXR0ZXIgdG8gdXNlCisgICAgICogQHJldHVy
bnMgdGhlIGNsb25lZCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3Rl
bS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAobmFtZSwgbmV3RW1pdHRlcikgeworICAgICAg
ICB2YXIgY3VzdG9tID0gbnVsbDsKKyAgICAgICAgdmFyIHByb2dyYW0gPSBudWxsOworICAgICAg
ICBpZiAodGhpcy5jdXN0b21TaGFkZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgcHJvZ3JhbSA9
IHRoaXMuY3VzdG9tU2hhZGVyOworICAgICAgICAgICAgdmFyIGRlZmluZXMgPSAocHJvZ3JhbS5z
aGFkZXJPcHRpb25zLmRlZmluZXMubGVuZ3RoID4gMCkgPyBwcm9ncmFtLnNoYWRlck9wdGlvbnMu
ZGVmaW5lcy5qb2luKCJcbiIpIDogIiI7CisgICAgICAgICAgICBjdXN0b20gPSB0aGlzLl9zY2Vu
ZS5nZXRFbmdpbmUoKS5jcmVhdGVFZmZlY3RGb3JQYXJ0aWNsZXMocHJvZ3JhbS5zaGFkZXJQYXRo
LmZyYWdtZW50RWxlbWVudCwgcHJvZ3JhbS5zaGFkZXJPcHRpb25zLnVuaWZvcm1zLCBwcm9ncmFt
LnNoYWRlck9wdGlvbnMuc2FtcGxlcnMsIGRlZmluZXMpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKHRoaXMuX2N1c3RvbUVmZmVjdCkgeworICAgICAgICAgICAgY3VzdG9tID0gdGhpcy5f
Y3VzdG9tRWZmZWN0OworICAgICAgICB9CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgUGFydGlj
bGVTeXN0ZW0obmFtZSwgdGhpcy5fY2FwYWNpdHksIHRoaXMuX3NjZW5lLCBjdXN0b20pOworICAg
ICAgICByZXN1bHQuY3VzdG9tU2hhZGVyID0gcHJvZ3JhbTsKKyAgICAgICAgX01pc2NfZGVlcENv
cGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siRGVlcENvcGllciJdLkRlZXBDb3B5
KHRoaXMsIHJlc3VsdCwgWyJwYXJ0aWNsZXMiLCAiY3VzdG9tU2hhZGVyIiwgIm5vaXNlVGV4dHVy
ZSIsICJwYXJ0aWNsZVRleHR1cmUiLCAib25EaXNwb3NlT2JzZXJ2YWJsZSJdKTsKKyAgICAgICAg
aWYgKG5ld0VtaXR0ZXIgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgbmV3RW1pdHRlciA9
IHRoaXMuZW1pdHRlcjsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQubm9pc2VUZXh0dXJlID0g
dGhpcy5ub2lzZVRleHR1cmU7CisgICAgICAgIHJlc3VsdC5lbWl0dGVyID0gbmV3RW1pdHRlcjsK
KyAgICAgICAgaWYgKHRoaXMucGFydGljbGVUZXh0dXJlKSB7CisgICAgICAgICAgICByZXN1bHQu
cGFydGljbGVUZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTBfX1siVGV4dHVyZSJdKHRoaXMucGFydGljbGVUZXh0dXJlLnVy
bCwgdGhpcy5fc2NlbmUpOworICAgICAgICB9CisgICAgICAgIC8vIENsb25lIGdyYWRpZW50cwor
ICAgICAgICBpZiAodGhpcy5fY29sb3JHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2Nv
bG9yR3JhZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICByZXN1
bHQuYWRkQ29sb3JHcmFkaWVudCh2LmdyYWRpZW50LCB2LmNvbG9yMSwgdi5jb2xvcjIpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2RyYWdHcmFkaWVudHMp
IHsKKyAgICAgICAgICAgIHRoaXMuX2RyYWdHcmFkaWVudHMuZm9yRWFjaChmdW5jdGlvbiAodikg
eworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGREcmFnR3JhZGllbnQodi5ncmFkaWVudCwgdi5m
YWN0b3IxLCB2LmZhY3RvcjIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fYW5n
dWxhclNwZWVkR3JhZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYWRkQW5ndWxhclNwZWVkR3JhZGllbnQodi5ncmFkaWVudCwgdi5mYWN0b3IxLCB2
LmZhY3RvcjIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X2VtaXRSYXRlR3JhZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl9lbWl0UmF0ZUdyYWRpZW50
cy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVtaXRS
YXRlR3JhZGllbnQodi5ncmFkaWVudCwgdi5mYWN0b3IxLCB2LmZhY3RvcjIpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xpZmVUaW1lR3JhZGllbnRzKSB7
CisgICAgICAgICAgICB0aGlzLl9saWZlVGltZUdyYWRpZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh2
KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZExpZmVUaW1lR3JhZGllbnQodi5ncmFkaWVu
dCwgdi5mYWN0b3IxLCB2LmZhY3RvcjIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRo
aXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHMuZm9yRWFjaChmdW5jdGlvbiAodikgeworICAgICAg
ICAgICAgICAgIHJlc3VsdC5hZGRMaW1pdFZlbG9jaXR5R3JhZGllbnQodi5ncmFkaWVudCwgdi5m
YWN0b3IxLCB2LmZhY3RvcjIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX3NpemVHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX3NpemVHcmFkaWVu
dHMuZm9yRWFjaChmdW5jdGlvbiAodikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTaXpl
R3JhZGllbnQodi5ncmFkaWVudCwgdi5mYWN0b3IxLCB2LmZhY3RvcjIpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3N0YXJ0U2l6ZUdyYWRpZW50cykgewor
ICAgICAgICAgICAgdGhpcy5fc3RhcnRTaXplR3JhZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYp
IHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3RhcnRTaXplR3JhZGllbnQodi5ncmFkaWVu
dCwgdi5mYWN0b3IxLCB2LmZhY3RvcjIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuX3ZlbG9jaXR5R3JhZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl92
ZWxvY2l0eUdyYWRpZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAgICAgICAg
cmVzdWx0LmFkZFZlbG9jaXR5R3JhZGllbnQodi5ncmFkaWVudCwgdi5mYWN0b3IxLCB2LmZhY3Rv
cjIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3JhbXBH
cmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX3JhbXBHcmFkaWVudHMuZm9yRWFjaChmdW5j
dGlvbiAodikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRSYW1wR3JhZGllbnQodi5ncmFk
aWVudCwgdi5jb2xvcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fY29sb3JSZW1hcEdyYWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fY29sb3JSZW1h
cEdyYWRpZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0
LmFkZENvbG9yUmVtYXBHcmFkaWVudCh2LmdyYWRpZW50LCB2LmZhY3RvcjEsIHYuZmFjdG9yMik7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYWxwaGFSZW1h
cEdyYWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fYWxwaGFSZW1hcEdyYWRpZW50cy5mb3JF
YWNoKGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEFscGhhUmVtYXBH
cmFkaWVudCh2LmdyYWRpZW50LCB2LmZhY3RvcjEsIHYuZmFjdG9yMik7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMucHJldmVudEF1dG9TdGFydCkgeworICAg
ICAgICAgICAgcmVzdWx0LnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIHBhcnRpY2xlIHN5c3Rl
bSB0byBhIEpTT04gb2JqZWN0LgorICAgICAqIEByZXR1cm5zIHRoZSBKU09OIG9iamVjdAorICAg
ICAqLworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIFBhcnRp
Y2xlU3lzdGVtLl9TZXJpYWxpemUoc2VyaWFsaXphdGlvbk9iamVjdCwgdGhpcyk7CisgICAgICAg
IHNlcmlhbGl6YXRpb25PYmplY3QudGV4dHVyZU1hc2sgPSB0aGlzLnRleHR1cmVNYXNrLmFzQXJy
YXkoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21TaGFkZXIgPSB0aGlzLmN1
c3RvbVNoYWRlcjsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5wcmV2ZW50QXV0b1N0YXJ0
ID0gdGhpcy5wcmV2ZW50QXV0b1N0YXJ0OworICAgICAgICAvLyBTdWJFbWl0dGVycworICAgICAg
ICBpZiAodGhpcy5zdWJFbWl0dGVycykgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC5zdWJFbWl0dGVycyA9IFtdOworICAgICAgICAgICAgaWYgKCF0aGlzLl9zdWJFbWl0dGVycykg
eworICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTdWJFbWl0dGVySW50ZXJuYWxBcnJheSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMu
X3N1YkVtaXR0ZXJzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZh
ciBzdWJzID0gX2FbX2ldOworICAgICAgICAgICAgICAgIHZhciBjZWxsID0gW107CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBzdWJzXzEgPSBzdWJzOyBfYiA8IHN1YnNfMS5sZW5n
dGg7IF9iKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN1YiA9IHN1YnNfMVtfYl07Cisg
ICAgICAgICAgICAgICAgICAgIGNlbGwucHVzaChzdWIuc2VyaWFsaXplKCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnN1YkVtaXR0ZXJz
LnB1c2goY2VsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBhcnRp
Y2xlU3lzdGVtLl9TZXJpYWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlvbk9iamVjdCwgcGFy
dGljbGVTeXN0ZW0pIHsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5uYW1lID0gcGFydGlj
bGVTeXN0ZW0ubmFtZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5pZCA9IHBhcnRpY2xl
U3lzdGVtLmlkOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNhcGFjaXR5ID0gcGFydGlj
bGVTeXN0ZW0uZ2V0Q2FwYWNpdHkoKTsKKyAgICAgICAgLy8gRW1pdHRlcgorICAgICAgICBpZiAo
cGFydGljbGVTeXN0ZW0uZW1pdHRlci5wb3NpdGlvbikgeworICAgICAgICAgICAgdmFyIGVtaXR0
ZXJNZXNoID0gcGFydGljbGVTeXN0ZW0uZW1pdHRlcjsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QuZW1pdHRlcklkID0gZW1pdHRlck1lc2guaWQ7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICB2YXIgZW1pdHRlclBvc2l0aW9uID0gcGFydGljbGVTeXN0ZW0u
ZW1pdHRlcjsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZW1pdHRlciA9IGVtaXR0
ZXJQb3NpdGlvbi5hc0FycmF5KCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRW1pdHRlcgorICAg
ICAgICBpZiAocGFydGljbGVTeXN0ZW0ucGFydGljbGVFbWl0dGVyVHlwZSkgeworICAgICAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC5wYXJ0aWNsZUVtaXR0ZXJUeXBlID0gcGFydGljbGVTeXN0
ZW0ucGFydGljbGVFbWl0dGVyVHlwZS5zZXJpYWxpemUoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocGFydGljbGVTeXN0ZW0ucGFydGljbGVUZXh0dXJlKSB7CisgICAgICAgICAgICBzZXJpYWxp
emF0aW9uT2JqZWN0LnRleHR1cmVOYW1lID0gcGFydGljbGVTeXN0ZW0ucGFydGljbGVUZXh0dXJl
Lm5hbWU7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmludmVydFkgPSBwYXJ0aWNs
ZVN5c3RlbS5wYXJ0aWNsZVRleHR1cmUuX2ludmVydFk7CisgICAgICAgIH0KKyAgICAgICAgLy8g
QW5pbWF0aW9ucworICAgICAgICBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xOV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uQXBwZW5kU2VyaWFsaXplZEFuaW1hdGlv
bnMocGFydGljbGVTeXN0ZW0sIHNlcmlhbGl6YXRpb25PYmplY3QpOworICAgICAgICBzZXJpYWxp
emF0aW9uT2JqZWN0LmJlZ2luQW5pbWF0aW9uT25TdGFydCA9IHBhcnRpY2xlU3lzdGVtLmJlZ2lu
QW5pbWF0aW9uT25TdGFydDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5iZWdpbkFuaW1h
dGlvbkZyb20gPSBwYXJ0aWNsZVN5c3RlbS5iZWdpbkFuaW1hdGlvbkZyb207CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QuYmVnaW5BbmltYXRpb25UbyA9IHBhcnRpY2xlU3lzdGVtLmJlZ2lu
QW5pbWF0aW9uVG87CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYmVnaW5BbmltYXRpb25M
b29wID0gcGFydGljbGVTeXN0ZW0uYmVnaW5BbmltYXRpb25Mb29wOworICAgICAgICAvLyBQYXJ0
aWNsZSBzeXN0ZW0KKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5zdGFydERlbGF5ID0gcGFy
dGljbGVTeXN0ZW0uc3RhcnREZWxheTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5yZW5k
ZXJpbmdHcm91cElkID0gcGFydGljbGVTeXN0ZW0ucmVuZGVyaW5nR3JvdXBJZDsKKyAgICAgICAg
c2VyaWFsaXphdGlvbk9iamVjdC5pc0JpbGxib2FyZEJhc2VkID0gcGFydGljbGVTeXN0ZW0uaXNC
aWxsYm9hcmRCYXNlZDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5iaWxsYm9hcmRNb2Rl
ID0gcGFydGljbGVTeXN0ZW0uYmlsbGJvYXJkTW9kZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5taW5Bbmd1bGFyU3BlZWQgPSBwYXJ0aWNsZVN5c3RlbS5taW5Bbmd1bGFyU3BlZWQ7Cisg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF4QW5ndWxhclNwZWVkID0gcGFydGljbGVTeXN0
ZW0ubWF4QW5ndWxhclNwZWVkOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1pblNpemUg
PSBwYXJ0aWNsZVN5c3RlbS5taW5TaXplOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1h
eFNpemUgPSBwYXJ0aWNsZVN5c3RlbS5tYXhTaXplOworICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0Lm1pblNjYWxlWCA9IHBhcnRpY2xlU3lzdGVtLm1pblNjYWxlWDsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5tYXhTY2FsZVggPSBwYXJ0aWNsZVN5c3RlbS5tYXhTY2FsZVg7CisgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWluU2NhbGVZID0gcGFydGljbGVTeXN0ZW0ubWluU2Nh
bGVZOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1heFNjYWxlWSA9IHBhcnRpY2xlU3lz
dGVtLm1heFNjYWxlWTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5taW5FbWl0UG93ZXIg
PSBwYXJ0aWNsZVN5c3RlbS5taW5FbWl0UG93ZXI7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QubWF4RW1pdFBvd2VyID0gcGFydGljbGVTeXN0ZW0ubWF4RW1pdFBvd2VyOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0Lm1pbkxpZmVUaW1lID0gcGFydGljbGVTeXN0ZW0ubWluTGlmZVRp
bWU7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF4TGlmZVRpbWUgPSBwYXJ0aWNsZVN5
c3RlbS5tYXhMaWZlVGltZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5lbWl0UmF0ZSA9
IHBhcnRpY2xlU3lzdGVtLmVtaXRSYXRlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lmdy
YXZpdHkgPSBwYXJ0aWNsZVN5c3RlbS5ncmF2aXR5LmFzQXJyYXkoKTsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5ub2lzZVN0cmVuZ3RoID0gcGFydGljbGVTeXN0ZW0ubm9pc2VTdHJlbmd0
aC5hc0FycmF5KCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29sb3IxID0gcGFydGlj
bGVTeXN0ZW0uY29sb3IxLmFzQXJyYXkoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5j
b2xvcjIgPSBwYXJ0aWNsZVN5c3RlbS5jb2xvcjIuYXNBcnJheSgpOworICAgICAgICBzZXJpYWxp
emF0aW9uT2JqZWN0LmNvbG9yRGVhZCA9IHBhcnRpY2xlU3lzdGVtLmNvbG9yRGVhZC5hc0FycmF5
KCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudXBkYXRlU3BlZWQgPSBwYXJ0aWNsZVN5
c3RlbS51cGRhdGVTcGVlZDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50YXJnZXRTdG9w
RHVyYXRpb24gPSBwYXJ0aWNsZVN5c3RlbS50YXJnZXRTdG9wRHVyYXRpb247CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QuYmxlbmRNb2RlID0gcGFydGljbGVTeXN0ZW0uYmxlbmRNb2RlOwor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnByZVdhcm1DeWNsZXMgPSBwYXJ0aWNsZVN5c3Rl
bS5wcmVXYXJtQ3ljbGVzOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnByZVdhcm1TdGVw
T2Zmc2V0ID0gcGFydGljbGVTeXN0ZW0ucHJlV2FybVN0ZXBPZmZzZXQ7CisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3QubWluSW5pdGlhbFJvdGF0aW9uID0gcGFydGljbGVTeXN0ZW0ubWluSW5p
dGlhbFJvdGF0aW9uOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1heEluaXRpYWxSb3Rh
dGlvbiA9IHBhcnRpY2xlU3lzdGVtLm1heEluaXRpYWxSb3RhdGlvbjsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5zdGFydFNwcml0ZUNlbGxJRCA9IHBhcnRpY2xlU3lzdGVtLnN0YXJ0U3By
aXRlQ2VsbElEOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmVuZFNwcml0ZUNlbGxJRCA9
IHBhcnRpY2xlU3lzdGVtLmVuZFNwcml0ZUNlbGxJRDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5zcHJpdGVDZWxsQ2hhbmdlU3BlZWQgPSBwYXJ0aWNsZVN5c3RlbS5zcHJpdGVDZWxsQ2hh
bmdlU3BlZWQ7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc3ByaXRlQ2VsbFdpZHRoID0g
cGFydGljbGVTeXN0ZW0uc3ByaXRlQ2VsbFdpZHRoOworICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LnNwcml0ZUNlbGxIZWlnaHQgPSBwYXJ0aWNsZVN5c3RlbS5zcHJpdGVDZWxsSGVpZ2h0Owor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNwcml0ZVJhbmRvbVN0YXJ0Q2VsbCA9IHBhcnRp
Y2xlU3lzdGVtLnNwcml0ZVJhbmRvbVN0YXJ0Q2VsbDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5pc0FuaW1hdGlvblNoZWV0RW5hYmxlZCA9IHBhcnRpY2xlU3lzdGVtLmlzQW5pbWF0aW9u
U2hlZXRFbmFibGVkOworICAgICAgICB2YXIgY29sb3JHcmFkaWVudHMgPSBwYXJ0aWNsZVN5c3Rl
bS5nZXRDb2xvckdyYWRpZW50cygpOworICAgICAgICBpZiAoY29sb3JHcmFkaWVudHMpIHsKKyAg
ICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29sb3JHcmFkaWVudHMgPSBbXTsKKyAgICAg
ICAgICAgIGZvciAodmFyIF9pID0gMCwgY29sb3JHcmFkaWVudHNfMSA9IGNvbG9yR3JhZGllbnRz
OyBfaSA8IGNvbG9yR3JhZGllbnRzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAg
dmFyIGNvbG9yR3JhZGllbnQgPSBjb2xvckdyYWRpZW50c18xW19pXTsKKyAgICAgICAgICAgICAg
ICB2YXIgc2VyaWFsaXplZEdyYWRpZW50ID0geworICAgICAgICAgICAgICAgICAgICBncmFkaWVu
dDogY29sb3JHcmFkaWVudC5ncmFkaWVudCwKKyAgICAgICAgICAgICAgICAgICAgY29sb3IxOiBj
b2xvckdyYWRpZW50LmNvbG9yMS5hc0FycmF5KCkKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIGlmIChjb2xvckdyYWRpZW50LmNvbG9yMikgeworICAgICAgICAgICAgICAgICAg
ICBzZXJpYWxpemVkR3JhZGllbnQuY29sb3IyID0gY29sb3JHcmFkaWVudC5jb2xvcjIuYXNBcnJh
eSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LmNvbG9yR3JhZGllbnRzLnB1c2goc2VyaWFsaXplZEdyYWRpZW50KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICB2YXIgcmFtcEdyYWRpZW50cyA9IHBhcnRpY2xlU3lzdGVt
LmdldFJhbXBHcmFkaWVudHMoKTsKKyAgICAgICAgaWYgKHJhbXBHcmFkaWVudHMpIHsKKyAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmFtcEdyYWRpZW50cyA9IFtdOworICAgICAgICAg
ICAgZm9yICh2YXIgX2EgPSAwLCByYW1wR3JhZGllbnRzXzEgPSByYW1wR3JhZGllbnRzOyBfYSA8
IHJhbXBHcmFkaWVudHNfMS5sZW5ndGg7IF9hKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcmFt
cEdyYWRpZW50ID0gcmFtcEdyYWRpZW50c18xW19hXTsKKyAgICAgICAgICAgICAgICB2YXIgc2Vy
aWFsaXplZEdyYWRpZW50ID0geworICAgICAgICAgICAgICAgICAgICBncmFkaWVudDogcmFtcEdy
YWRpZW50LmdyYWRpZW50LAorICAgICAgICAgICAgICAgICAgICBjb2xvcjogcmFtcEdyYWRpZW50
LmNvbG9yLmFzQXJyYXkoKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5yYW1wR3JhZGllbnRzLnB1c2goc2VyaWFsaXplZEdyYWRpZW50KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudXNlUmFtcEdy
YWRpZW50cyA9IHBhcnRpY2xlU3lzdGVtLnVzZVJhbXBHcmFkaWVudHM7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGNvbG9yUmVtYXBHcmFkaWVudHMgPSBwYXJ0aWNsZVN5c3RlbS5nZXRDb2xvclJl
bWFwR3JhZGllbnRzKCk7CisgICAgICAgIGlmIChjb2xvclJlbWFwR3JhZGllbnRzKSB7CisgICAg
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvbG9yUmVtYXBHcmFkaWVudHMgPSBbXTsKKyAg
ICAgICAgICAgIGZvciAodmFyIF9iID0gMCwgY29sb3JSZW1hcEdyYWRpZW50c18xID0gY29sb3JS
ZW1hcEdyYWRpZW50czsgX2IgPCBjb2xvclJlbWFwR3JhZGllbnRzXzEubGVuZ3RoOyBfYisrKSB7
CisgICAgICAgICAgICAgICAgdmFyIGNvbG9yUmVtYXBHcmFkaWVudCA9IGNvbG9yUmVtYXBHcmFk
aWVudHNfMVtfYl07CisgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRHcmFkaWVudCA9IHsK
KyAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQ6IGNvbG9yUmVtYXBHcmFkaWVudC5ncmFkaWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgZmFjdG9yMTogY29sb3JSZW1hcEdyYWRpZW50LmZhY3Rv
cjEKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlmIChjb2xvclJlbWFwR3Jh
ZGllbnQuZmFjdG9yMiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgIHNlcmlh
bGl6ZWRHcmFkaWVudC5mYWN0b3IyID0gY29sb3JSZW1hcEdyYWRpZW50LmZhY3RvcjI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29sb3JS
ZW1hcEdyYWRpZW50cy5wdXNoKHNlcmlhbGl6ZWRHcmFkaWVudCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGFscGhhUmVtYXBHcmFkaWVudHMgPSBwYXJ0aWNsZVN5c3Rl
bS5nZXRBbHBoYVJlbWFwR3JhZGllbnRzKCk7CisgICAgICAgIGlmIChhbHBoYVJlbWFwR3JhZGll
bnRzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmFscGhhUmVtYXBHcmFkaWVu
dHMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIF9jID0gMCwgYWxwaGFSZW1hcEdyYWRpZW50
c18xID0gYWxwaGFSZW1hcEdyYWRpZW50czsgX2MgPCBhbHBoYVJlbWFwR3JhZGllbnRzXzEubGVu
Z3RoOyBfYysrKSB7CisgICAgICAgICAgICAgICAgdmFyIGFscGhhUmVtYXBHcmFkaWVudCA9IGFs
cGhhUmVtYXBHcmFkaWVudHNfMVtfY107CisgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRH
cmFkaWVudCA9IHsKKyAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQ6IGFscGhhUmVtYXBHcmFk
aWVudC5ncmFkaWVudCwKKyAgICAgICAgICAgICAgICAgICAgZmFjdG9yMTogYWxwaGFSZW1hcEdy
YWRpZW50LmZhY3RvcjEKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlmIChh
bHBoYVJlbWFwR3JhZGllbnQuZmFjdG9yMiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIHNlcmlhbGl6ZWRHcmFkaWVudC5mYWN0b3IyID0gYWxwaGFSZW1hcEdyYWRpZW50LmZh
Y3RvcjI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QuYWxwaGFSZW1hcEdyYWRpZW50cy5wdXNoKHNlcmlhbGl6ZWRHcmFkaWVudCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNpemVHcmFkaWVudHMgPSBwYXJ0aWNs
ZVN5c3RlbS5nZXRTaXplR3JhZGllbnRzKCk7CisgICAgICAgIGlmIChzaXplR3JhZGllbnRzKSB7
CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNpemVHcmFkaWVudHMgPSBbXTsKKyAg
ICAgICAgICAgIGZvciAodmFyIF9kID0gMCwgc2l6ZUdyYWRpZW50c18xID0gc2l6ZUdyYWRpZW50
czsgX2QgPCBzaXplR3JhZGllbnRzXzEubGVuZ3RoOyBfZCsrKSB7CisgICAgICAgICAgICAgICAg
dmFyIHNpemVHcmFkaWVudCA9IHNpemVHcmFkaWVudHNfMVtfZF07CisgICAgICAgICAgICAgICAg
dmFyIHNlcmlhbGl6ZWRHcmFkaWVudCA9IHsKKyAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQ6
IHNpemVHcmFkaWVudC5ncmFkaWVudCwKKyAgICAgICAgICAgICAgICAgICAgZmFjdG9yMTogc2l6
ZUdyYWRpZW50LmZhY3RvcjEKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlm
IChzaXplR3JhZGllbnQuZmFjdG9yMiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNlcmlhbGl6ZWRHcmFkaWVudC5mYWN0b3IyID0gc2l6ZUdyYWRpZW50LmZhY3RvcjI7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc2l6
ZUdyYWRpZW50cy5wdXNoKHNlcmlhbGl6ZWRHcmFkaWVudCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGFuZ3VsYXJTcGVlZEdyYWRpZW50cyA9IHBhcnRpY2xlU3lzdGVt
LmdldEFuZ3VsYXJTcGVlZEdyYWRpZW50cygpOworICAgICAgICBpZiAoYW5ndWxhclNwZWVkR3Jh
ZGllbnRzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmFuZ3VsYXJTcGVlZEdy
YWRpZW50cyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgX2UgPSAwLCBhbmd1bGFyU3BlZWRH
cmFkaWVudHNfMSA9IGFuZ3VsYXJTcGVlZEdyYWRpZW50czsgX2UgPCBhbmd1bGFyU3BlZWRHcmFk
aWVudHNfMS5sZW5ndGg7IF9lKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgYW5ndWxhclNwZWVk
R3JhZGllbnQgPSBhbmd1bGFyU3BlZWRHcmFkaWVudHNfMVtfZV07CisgICAgICAgICAgICAgICAg
dmFyIHNlcmlhbGl6ZWRHcmFkaWVudCA9IHsKKyAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQ6
IGFuZ3VsYXJTcGVlZEdyYWRpZW50LmdyYWRpZW50LAorICAgICAgICAgICAgICAgICAgICBmYWN0
b3IxOiBhbmd1bGFyU3BlZWRHcmFkaWVudC5mYWN0b3IxCisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICBpZiAoYW5ndWxhclNwZWVkR3JhZGllbnQuZmFjdG9yMiAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRHcmFkaWVudC5mYWN0b3IyID0g
YW5ndWxhclNwZWVkR3JhZGllbnQuZmFjdG9yMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hbmd1bGFyU3BlZWRHcmFkaWVudHMucHVzaChz
ZXJpYWxpemVkR3JhZGllbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZh
ciB2ZWxvY2l0eUdyYWRpZW50cyA9IHBhcnRpY2xlU3lzdGVtLmdldFZlbG9jaXR5R3JhZGllbnRz
KCk7CisgICAgICAgIGlmICh2ZWxvY2l0eUdyYWRpZW50cykgeworICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC52ZWxvY2l0eUdyYWRpZW50cyA9IFtdOworICAgICAgICAgICAgZm9yICh2
YXIgX2YgPSAwLCB2ZWxvY2l0eUdyYWRpZW50c18xID0gdmVsb2NpdHlHcmFkaWVudHM7IF9mIDwg
dmVsb2NpdHlHcmFkaWVudHNfMS5sZW5ndGg7IF9mKyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
dmVsb2NpdHlHcmFkaWVudCA9IHZlbG9jaXR5R3JhZGllbnRzXzFbX2ZdOworICAgICAgICAgICAg
ICAgIHZhciBzZXJpYWxpemVkR3JhZGllbnQgPSB7CisgICAgICAgICAgICAgICAgICAgIGdyYWRp
ZW50OiB2ZWxvY2l0eUdyYWRpZW50LmdyYWRpZW50LAorICAgICAgICAgICAgICAgICAgICBmYWN0
b3IxOiB2ZWxvY2l0eUdyYWRpZW50LmZhY3RvcjEKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIGlmICh2ZWxvY2l0eUdyYWRpZW50LmZhY3RvcjIgIT09IHVuZGVmaW5lZCkgewor
ICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkR3JhZGllbnQuZmFjdG9yMiA9IHZlbG9jaXR5
R3JhZGllbnQuZmFjdG9yMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC52ZWxvY2l0eUdyYWRpZW50cy5wdXNoKHNlcmlhbGl6ZWRHcmFkaWVu
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRyYWdHcmFkaWVudHMg
PSBwYXJ0aWNsZVN5c3RlbS5nZXREcmFnR3JhZGllbnRzKCk7CisgICAgICAgIGlmIChkcmFnR3Jh
ZGllbnRzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmRyYWdHcmFkaWVudHMg
PSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIF9nID0gMCwgZHJhZ0dyYWRpZW50c18xID0gZHJh
Z0dyYWRpZW50czsgX2cgPCBkcmFnR3JhZGllbnRzXzEubGVuZ3RoOyBfZysrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGRyYWdHcmFkaWVudCA9IGRyYWdHcmFkaWVudHNfMVtfZ107CisgICAgICAg
ICAgICAgICAgdmFyIHNlcmlhbGl6ZWRHcmFkaWVudCA9IHsKKyAgICAgICAgICAgICAgICAgICAg
Z3JhZGllbnQ6IGRyYWdHcmFkaWVudC5ncmFkaWVudCwKKyAgICAgICAgICAgICAgICAgICAgZmFj
dG9yMTogZHJhZ0dyYWRpZW50LmZhY3RvcjEKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgIGlmIChkcmFnR3JhZGllbnQuZmFjdG9yMiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIHNlcmlhbGl6ZWRHcmFkaWVudC5mYWN0b3IyID0gZHJhZ0dyYWRpZW50LmZh
Y3RvcjI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QuZHJhZ0dyYWRpZW50cy5wdXNoKHNlcmlhbGl6ZWRHcmFkaWVudCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVtaXRSYXRlR3JhZGllbnRzID0gcGFydGljbGVT
eXN0ZW0uZ2V0RW1pdFJhdGVHcmFkaWVudHMoKTsKKyAgICAgICAgaWYgKGVtaXRSYXRlR3JhZGll
bnRzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmVtaXRSYXRlR3JhZGllbnRz
ID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBfaCA9IDAsIGVtaXRSYXRlR3JhZGllbnRzXzEg
PSBlbWl0UmF0ZUdyYWRpZW50czsgX2ggPCBlbWl0UmF0ZUdyYWRpZW50c18xLmxlbmd0aDsgX2gr
KykgeworICAgICAgICAgICAgICAgIHZhciBlbWl0UmF0ZUdyYWRpZW50ID0gZW1pdFJhdGVHcmFk
aWVudHNfMVtfaF07CisgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRHcmFkaWVudCA9IHsK
KyAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQ6IGVtaXRSYXRlR3JhZGllbnQuZ3JhZGllbnQs
CisgICAgICAgICAgICAgICAgICAgIGZhY3RvcjE6IGVtaXRSYXRlR3JhZGllbnQuZmFjdG9yMQor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgaWYgKGVtaXRSYXRlR3JhZGllbnQu
ZmFjdG9yMiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRH
cmFkaWVudC5mYWN0b3IyID0gZW1pdFJhdGVHcmFkaWVudC5mYWN0b3IyOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmVtaXRSYXRlR3JhZGll
bnRzLnB1c2goc2VyaWFsaXplZEdyYWRpZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICB2YXIgc3RhcnRTaXplR3JhZGllbnRzID0gcGFydGljbGVTeXN0ZW0uZ2V0U3RhcnRT
aXplR3JhZGllbnRzKCk7CisgICAgICAgIGlmIChzdGFydFNpemVHcmFkaWVudHMpIHsKKyAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc3RhcnRTaXplR3JhZGllbnRzID0gW107CisgICAg
ICAgICAgICBmb3IgKHZhciBfaiA9IDAsIHN0YXJ0U2l6ZUdyYWRpZW50c18xID0gc3RhcnRTaXpl
R3JhZGllbnRzOyBfaiA8IHN0YXJ0U2l6ZUdyYWRpZW50c18xLmxlbmd0aDsgX2orKykgeworICAg
ICAgICAgICAgICAgIHZhciBzdGFydFNpemVHcmFkaWVudCA9IHN0YXJ0U2l6ZUdyYWRpZW50c18x
W19qXTsKKyAgICAgICAgICAgICAgICB2YXIgc2VyaWFsaXplZEdyYWRpZW50ID0geworICAgICAg
ICAgICAgICAgICAgICBncmFkaWVudDogc3RhcnRTaXplR3JhZGllbnQuZ3JhZGllbnQsCisgICAg
ICAgICAgICAgICAgICAgIGZhY3RvcjE6IHN0YXJ0U2l6ZUdyYWRpZW50LmZhY3RvcjEKKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlmIChzdGFydFNpemVHcmFkaWVudC5mYWN0
b3IyICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZEdyYWRp
ZW50LmZhY3RvcjIgPSBzdGFydFNpemVHcmFkaWVudC5mYWN0b3IyOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnN0YXJ0U2l6ZUdyYWRpZW50
cy5wdXNoKHNlcmlhbGl6ZWRHcmFkaWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGxpZmVUaW1lR3JhZGllbnRzID0gcGFydGljbGVTeXN0ZW0uZ2V0TGlmZVRpbWVH
cmFkaWVudHMoKTsKKyAgICAgICAgaWYgKGxpZmVUaW1lR3JhZGllbnRzKSB7CisgICAgICAgICAg
ICBzZXJpYWxpemF0aW9uT2JqZWN0LmxpZmVUaW1lR3JhZGllbnRzID0gW107CisgICAgICAgICAg
ICBmb3IgKHZhciBfayA9IDAsIGxpZmVUaW1lR3JhZGllbnRzXzEgPSBsaWZlVGltZUdyYWRpZW50
czsgX2sgPCBsaWZlVGltZUdyYWRpZW50c18xLmxlbmd0aDsgX2srKykgeworICAgICAgICAgICAg
ICAgIHZhciBsaWZlVGltZUdyYWRpZW50ID0gbGlmZVRpbWVHcmFkaWVudHNfMVtfa107CisgICAg
ICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRHcmFkaWVudCA9IHsKKyAgICAgICAgICAgICAgICAg
ICAgZ3JhZGllbnQ6IGxpZmVUaW1lR3JhZGllbnQuZ3JhZGllbnQsCisgICAgICAgICAgICAgICAg
ICAgIGZhY3RvcjE6IGxpZmVUaW1lR3JhZGllbnQuZmFjdG9yMQorICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgaWYgKGxpZmVUaW1lR3JhZGllbnQuZmFjdG9yMiAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRHcmFkaWVudC5mYWN0b3IyID0g
bGlmZVRpbWVHcmFkaWVudC5mYWN0b3IyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmxpZmVUaW1lR3JhZGllbnRzLnB1c2goc2VyaWFsaXpl
ZEdyYWRpZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgbGltaXRW
ZWxvY2l0eUdyYWRpZW50cyA9IHBhcnRpY2xlU3lzdGVtLmdldExpbWl0VmVsb2NpdHlHcmFkaWVu
dHMoKTsKKyAgICAgICAgaWYgKGxpbWl0VmVsb2NpdHlHcmFkaWVudHMpIHsKKyAgICAgICAgICAg
IHNlcmlhbGl6YXRpb25PYmplY3QubGltaXRWZWxvY2l0eUdyYWRpZW50cyA9IFtdOworICAgICAg
ICAgICAgZm9yICh2YXIgX2wgPSAwLCBsaW1pdFZlbG9jaXR5R3JhZGllbnRzXzEgPSBsaW1pdFZl
bG9jaXR5R3JhZGllbnRzOyBfbCA8IGxpbWl0VmVsb2NpdHlHcmFkaWVudHNfMS5sZW5ndGg7IF9s
KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbGltaXRWZWxvY2l0eUdyYWRpZW50ID0gbGltaXRW
ZWxvY2l0eUdyYWRpZW50c18xW19sXTsKKyAgICAgICAgICAgICAgICB2YXIgc2VyaWFsaXplZEdy
YWRpZW50ID0geworICAgICAgICAgICAgICAgICAgICBncmFkaWVudDogbGltaXRWZWxvY2l0eUdy
YWRpZW50LmdyYWRpZW50LAorICAgICAgICAgICAgICAgICAgICBmYWN0b3IxOiBsaW1pdFZlbG9j
aXR5R3JhZGllbnQuZmFjdG9yMQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
aWYgKGxpbWl0VmVsb2NpdHlHcmFkaWVudC5mYWN0b3IyICE9PSB1bmRlZmluZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2VyaWFsaXplZEdyYWRpZW50LmZhY3RvcjIgPSBsaW1pdFZlbG9jaXR5
R3JhZGllbnQuZmFjdG9yMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5saW1pdFZlbG9jaXR5R3JhZGllbnRzLnB1c2goc2VyaWFsaXplZEdy
YWRpZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
bGltaXRWZWxvY2l0eURhbXBpbmcgPSBwYXJ0aWNsZVN5c3RlbS5saW1pdFZlbG9jaXR5RGFtcGlu
ZzsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFydGljbGVTeXN0ZW0ubm9pc2VUZXh0dXJlKSB7
CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm5vaXNlVGV4dHVyZSA9IHBhcnRpY2xl
U3lzdGVtLm5vaXNlVGV4dHVyZS5zZXJpYWxpemUoKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5fUGFyc2UgPSBmdW5jdGlvbiAocGFy
c2VkUGFydGljbGVTeXN0ZW0sIHBhcnRpY2xlU3lzdGVtLCBzY2VuZSwgcm9vdFVybCkgeworICAg
ICAgICAvLyBUZXh0dXJlCisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS50ZXh0dXJl
TmFtZSkgeworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0ucGFydGljbGVUZXh0dXJlID0gbmV3
IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBf
X1siVGV4dHVyZSJdKHJvb3RVcmwgKyBwYXJzZWRQYXJ0aWNsZVN5c3RlbS50ZXh0dXJlTmFtZSwg
c2NlbmUsIGZhbHNlLCBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5pbnZlcnRZICE9PSB1bmRlZmluZWQg
PyBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5pbnZlcnRZIDogdHJ1ZSk7CisgICAgICAgICAgICBwYXJ0
aWNsZVN5c3RlbS5wYXJ0aWNsZVRleHR1cmUubmFtZSA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnRl
eHR1cmVOYW1lOworICAgICAgICB9CisgICAgICAgIC8vIEVtaXR0ZXIKKyAgICAgICAgaWYgKCFw
YXJzZWRQYXJ0aWNsZVN5c3RlbS5lbWl0dGVySWQgJiYgcGFyc2VkUGFydGljbGVTeXN0ZW0uZW1p
dHRlcklkICE9PSAwICYmIHBhcnNlZFBhcnRpY2xlU3lzdGVtLmVtaXR0ZXIgPT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0uZW1pdHRlciA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZFBhcnRpY2xlU3lzdGVtLmVtaXR0ZXJJZCkg
eworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0uZW1pdHRlciA9IHNjZW5lLmdldExhc3RNZXNo
QnlJRChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5lbWl0dGVySWQpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0uZW1pdHRlciA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uRnJvbUFycmF5
KHBhcnNlZFBhcnRpY2xlU3lzdGVtLmVtaXR0ZXIpOworICAgICAgICB9CisgICAgICAgIC8vIE1p
c2MuCisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5yZW5kZXJpbmdHcm91cElkICE9
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLnJlbmRlcmluZ0dyb3Vw
SWQgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5yZW5kZXJpbmdHcm91cElkOworICAgICAgICB9Cisg
ICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5pc0JpbGxib2FyZEJhc2VkICE9PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmlzQmlsbGJvYXJkQmFzZWQgPSBw
YXJzZWRQYXJ0aWNsZVN5c3RlbS5pc0JpbGxib2FyZEJhc2VkOworICAgICAgICB9CisgICAgICAg
IGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5iaWxsYm9hcmRNb2RlICE9PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmJpbGxib2FyZE1vZGUgPSBwYXJzZWRQYXJ0aWNs
ZVN5c3RlbS5iaWxsYm9hcmRNb2RlOworICAgICAgICB9CisgICAgICAgIC8vIEFuaW1hdGlvbnMK
KyAgICAgICAgaWYgKHBhcnNlZFBhcnRpY2xlU3lzdGVtLmFuaW1hdGlvbnMpIHsKKyAgICAgICAg
ICAgIGZvciAodmFyIGFuaW1hdGlvbkluZGV4ID0gMDsgYW5pbWF0aW9uSW5kZXggPCBwYXJzZWRQ
YXJ0aWNsZVN5c3RlbS5hbmltYXRpb25zLmxlbmd0aDsgYW5pbWF0aW9uSW5kZXgrKykgeworICAg
ICAgICAgICAgICAgIHZhciBwYXJzZWRBbmltYXRpb24gPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5h
bmltYXRpb25zW2FuaW1hdGlvbkluZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxD
bGFzcyA9IF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX1R5
cGVTdG9yZSJdLkdldENsYXNzKCJCQUJZTE9OLkFuaW1hdGlvbiIpOworICAgICAgICAgICAgICAg
IGlmIChpbnRlcm5hbENsYXNzKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVt
LmFuaW1hdGlvbnMucHVzaChpbnRlcm5hbENsYXNzLlBhcnNlKHBhcnNlZEFuaW1hdGlvbikpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcnRpY2xlU3lz
dGVtLmJlZ2luQW5pbWF0aW9uT25TdGFydCA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLmJlZ2luQW5p
bWF0aW9uT25TdGFydDsKKyAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmJlZ2luQW5pbWF0aW9u
RnJvbSA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLmJlZ2luQW5pbWF0aW9uRnJvbTsKKyAgICAgICAg
ICAgIHBhcnRpY2xlU3lzdGVtLmJlZ2luQW5pbWF0aW9uVG8gPSBwYXJzZWRQYXJ0aWNsZVN5c3Rl
bS5iZWdpbkFuaW1hdGlvblRvOworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0uYmVnaW5Bbmlt
YXRpb25Mb29wID0gcGFyc2VkUGFydGljbGVTeXN0ZW0uYmVnaW5BbmltYXRpb25Mb29wOworICAg
ICAgICB9CisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5hdXRvQW5pbWF0ZSkgewor
ICAgICAgICAgICAgc2NlbmUuYmVnaW5BbmltYXRpb24ocGFydGljbGVTeXN0ZW0sIHBhcnNlZFBh
cnRpY2xlU3lzdGVtLmF1dG9BbmltYXRlRnJvbSwgcGFyc2VkUGFydGljbGVTeXN0ZW0uYXV0b0Fu
aW1hdGVUbywgcGFyc2VkUGFydGljbGVTeXN0ZW0uYXV0b0FuaW1hdGVMb29wLCBwYXJzZWRQYXJ0
aWNsZVN5c3RlbS5hdXRvQW5pbWF0ZVNwZWVkIHx8IDEuMCk7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gUGFydGljbGUgc3lzdGVtCisgICAgICAgIHBhcnRpY2xlU3lzdGVtLnN0YXJ0RGVsYXkgPSBw
YXJzZWRQYXJ0aWNsZVN5c3RlbS5zdGFydERlbGF5IHwgMDsKKyAgICAgICAgcGFydGljbGVTeXN0
ZW0ubWluQW5ndWxhclNwZWVkID0gcGFyc2VkUGFydGljbGVTeXN0ZW0ubWluQW5ndWxhclNwZWVk
OworICAgICAgICBwYXJ0aWNsZVN5c3RlbS5tYXhBbmd1bGFyU3BlZWQgPSBwYXJzZWRQYXJ0aWNs
ZVN5c3RlbS5tYXhBbmd1bGFyU3BlZWQ7CisgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1pblNpemUg
PSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5taW5TaXplOworICAgICAgICBwYXJ0aWNsZVN5c3RlbS5t
YXhTaXplID0gcGFyc2VkUGFydGljbGVTeXN0ZW0ubWF4U2l6ZTsKKyAgICAgICAgaWYgKHBhcnNl
ZFBhcnRpY2xlU3lzdGVtLm1pblNjYWxlWCkgeworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0u
bWluU2NhbGVYID0gcGFyc2VkUGFydGljbGVTeXN0ZW0ubWluU2NhbGVYOworICAgICAgICAgICAg
cGFydGljbGVTeXN0ZW0ubWF4U2NhbGVYID0gcGFyc2VkUGFydGljbGVTeXN0ZW0ubWF4U2NhbGVY
OworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0ubWluU2NhbGVZID0gcGFyc2VkUGFydGljbGVT
eXN0ZW0ubWluU2NhbGVZOworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0ubWF4U2NhbGVZID0g
cGFyc2VkUGFydGljbGVTeXN0ZW0ubWF4U2NhbGVZOworICAgICAgICB9CisgICAgICAgIGlmIChw
YXJzZWRQYXJ0aWNsZVN5c3RlbS5wcmVXYXJtQ3ljbGVzICE9PSB1bmRlZmluZWQpIHsKKyAgICAg
ICAgICAgIHBhcnRpY2xlU3lzdGVtLnByZVdhcm1DeWNsZXMgPSBwYXJzZWRQYXJ0aWNsZVN5c3Rl
bS5wcmVXYXJtQ3ljbGVzOworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0ucHJlV2FybVN0ZXBP
ZmZzZXQgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5wcmVXYXJtU3RlcE9mZnNldDsKKyAgICAgICAg
fQorICAgICAgICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0ubWluSW5pdGlhbFJvdGF0aW9uICE9
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1pbkluaXRpYWxSb3Rh
dGlvbiA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLm1pbkluaXRpYWxSb3RhdGlvbjsKKyAgICAgICAg
ICAgIHBhcnRpY2xlU3lzdGVtLm1heEluaXRpYWxSb3RhdGlvbiA9IHBhcnNlZFBhcnRpY2xlU3lz
dGVtLm1heEluaXRpYWxSb3RhdGlvbjsKKyAgICAgICAgfQorICAgICAgICBwYXJ0aWNsZVN5c3Rl
bS5taW5MaWZlVGltZSA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLm1pbkxpZmVUaW1lOworICAgICAg
ICBwYXJ0aWNsZVN5c3RlbS5tYXhMaWZlVGltZSA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLm1heExp
ZmVUaW1lOworICAgICAgICBwYXJ0aWNsZVN5c3RlbS5taW5FbWl0UG93ZXIgPSBwYXJzZWRQYXJ0
aWNsZVN5c3RlbS5taW5FbWl0UG93ZXI7CisgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1heEVtaXRQ
b3dlciA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLm1heEVtaXRQb3dlcjsKKyAgICAgICAgcGFydGlj
bGVTeXN0ZW0uZW1pdFJhdGUgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5lbWl0UmF0ZTsKKyAgICAg
ICAgcGFydGljbGVTeXN0ZW0uZ3Jhdml0eSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uRnJvbUFycmF5KHBhcnNlZFBhcnRpY2xlU3lz
dGVtLmdyYXZpdHkpOworICAgICAgICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0ubm9pc2VTdHJl
bmd0aCkgeworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0ubm9pc2VTdHJlbmd0aCA9IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uRnJv
bUFycmF5KHBhcnNlZFBhcnRpY2xlU3lzdGVtLm5vaXNlU3RyZW5ndGgpOworICAgICAgICB9Cisg
ICAgICAgIHBhcnRpY2xlU3lzdGVtLmNvbG9yMSA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yNF9fWyJDb2xvcjQiXS5Gcm9tQXJyYXkocGFyc2VkUGFydGljbGVT
eXN0ZW0uY29sb3IxKTsKKyAgICAgICAgcGFydGljbGVTeXN0ZW0uY29sb3IyID0gX01hdGhzX21h
dGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X19bIkNvbG9yNCJdLkZyb21BcnJh
eShwYXJzZWRQYXJ0aWNsZVN5c3RlbS5jb2xvcjIpOworICAgICAgICBwYXJ0aWNsZVN5c3RlbS5j
b2xvckRlYWQgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRf
X1siQ29sb3I0Il0uRnJvbUFycmF5KHBhcnNlZFBhcnRpY2xlU3lzdGVtLmNvbG9yRGVhZCk7Cisg
ICAgICAgIHBhcnRpY2xlU3lzdGVtLnVwZGF0ZVNwZWVkID0gcGFyc2VkUGFydGljbGVTeXN0ZW0u
dXBkYXRlU3BlZWQ7CisgICAgICAgIHBhcnRpY2xlU3lzdGVtLnRhcmdldFN0b3BEdXJhdGlvbiA9
IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnRhcmdldFN0b3BEdXJhdGlvbjsKKyAgICAgICAgcGFydGlj
bGVTeXN0ZW0uYmxlbmRNb2RlID0gcGFyc2VkUGFydGljbGVTeXN0ZW0uYmxlbmRNb2RlOworICAg
ICAgICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0uY29sb3JHcmFkaWVudHMpIHsKKyAgICAgICAg
ICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5jb2xvckdyYWRp
ZW50czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY29sb3JH
cmFkaWVudCA9IF9hW19pXTsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5hZGRDb2xv
ckdyYWRpZW50KGNvbG9yR3JhZGllbnQuZ3JhZGllbnQsIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJDb2xvcjQiXS5Gcm9tQXJyYXkoY29sb3JHcmFkaWVu
dC5jb2xvcjEpLCBjb2xvckdyYWRpZW50LmNvbG9yMiA/IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJDb2xvcjQiXS5Gcm9tQXJyYXkoY29sb3JHcmFkaWVu
dC5jb2xvcjIpIDogdW5kZWZpbmVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0ucmFtcEdyYWRpZW50cykgeworICAgICAgICAgICAg
Zm9yICh2YXIgX2IgPSAwLCBfYyA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnJhbXBHcmFkaWVudHM7
IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7CisgICAgICAgICAgICAgICAgdmFyIHJhbXBHcmFkaWVu
dCA9IF9jW19iXTsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5hZGRSYW1wR3JhZGll
bnQocmFtcEdyYWRpZW50LmdyYWRpZW50LCBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjRfX1siQ29sb3IzIl0uRnJvbUFycmF5KHJhbXBHcmFkaWVudC5jb2xvcikp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0udXNlUmFtcEdyYWRp
ZW50cyA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnVzZVJhbXBHcmFkaWVudHM7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHBhcnNlZFBhcnRpY2xlU3lzdGVtLmNvbG9yUmVtYXBHcmFkaWVudHMpIHsK
KyAgICAgICAgICAgIGZvciAodmFyIF9kID0gMCwgX2UgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5j
b2xvclJlbWFwR3JhZGllbnRzOyBfZCA8IF9lLmxlbmd0aDsgX2QrKykgeworICAgICAgICAgICAg
ICAgIHZhciBjb2xvclJlbWFwR3JhZGllbnQgPSBfZVtfZF07CisgICAgICAgICAgICAgICAgcGFy
dGljbGVTeXN0ZW0uYWRkQ29sb3JSZW1hcEdyYWRpZW50KGNvbG9yUmVtYXBHcmFkaWVudC5ncmFk
aWVudCwgY29sb3JSZW1hcEdyYWRpZW50LmZhY3RvcjEgIT09IHVuZGVmaW5lZCA/IGNvbG9yUmVt
YXBHcmFkaWVudC5mYWN0b3IxIDogY29sb3JSZW1hcEdyYWRpZW50LmZhY3RvciwgY29sb3JSZW1h
cEdyYWRpZW50LmZhY3RvcjIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
IChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5hbHBoYVJlbWFwR3JhZGllbnRzKSB7CisgICAgICAgICAg
ICBmb3IgKHZhciBfZiA9IDAsIF9nID0gcGFyc2VkUGFydGljbGVTeXN0ZW0uYWxwaGFSZW1hcEdy
YWRpZW50czsgX2YgPCBfZy5sZW5ndGg7IF9mKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgYWxw
aGFSZW1hcEdyYWRpZW50ID0gX2dbX2ZdOworICAgICAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVt
LmFkZEFscGhhUmVtYXBHcmFkaWVudChhbHBoYVJlbWFwR3JhZGllbnQuZ3JhZGllbnQsIGFscGhh
UmVtYXBHcmFkaWVudC5mYWN0b3IxICE9PSB1bmRlZmluZWQgPyBhbHBoYVJlbWFwR3JhZGllbnQu
ZmFjdG9yMSA6IGFscGhhUmVtYXBHcmFkaWVudC5mYWN0b3IsIGFscGhhUmVtYXBHcmFkaWVudC5m
YWN0b3IyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkUGFy
dGljbGVTeXN0ZW0uc2l6ZUdyYWRpZW50cykgeworICAgICAgICAgICAgZm9yICh2YXIgX2ggPSAw
LCBfaiA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnNpemVHcmFkaWVudHM7IF9oIDwgX2oubGVuZ3Ro
OyBfaCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHNpemVHcmFkaWVudCA9IF9qW19oXTsKKyAg
ICAgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5hZGRTaXplR3JhZGllbnQoc2l6ZUdyYWRpZW50
LmdyYWRpZW50LCBzaXplR3JhZGllbnQuZmFjdG9yMSAhPT0gdW5kZWZpbmVkID8gc2l6ZUdyYWRp
ZW50LmZhY3RvcjEgOiBzaXplR3JhZGllbnQuZmFjdG9yLCBzaXplR3JhZGllbnQuZmFjdG9yMik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZFBhcnRpY2xlU3lz
dGVtLmFuZ3VsYXJTcGVlZEdyYWRpZW50cykgeworICAgICAgICAgICAgZm9yICh2YXIgX2sgPSAw
LCBfbCA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLmFuZ3VsYXJTcGVlZEdyYWRpZW50czsgX2sgPCBf
bC5sZW5ndGg7IF9rKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgYW5ndWxhclNwZWVkR3JhZGll
bnQgPSBfbFtfa107CisgICAgICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0uYWRkQW5ndWxhclNw
ZWVkR3JhZGllbnQoYW5ndWxhclNwZWVkR3JhZGllbnQuZ3JhZGllbnQsIGFuZ3VsYXJTcGVlZEdy
YWRpZW50LmZhY3RvcjEgIT09IHVuZGVmaW5lZCA/IGFuZ3VsYXJTcGVlZEdyYWRpZW50LmZhY3Rv
cjEgOiBhbmd1bGFyU3BlZWRHcmFkaWVudC5mYWN0b3IsIGFuZ3VsYXJTcGVlZEdyYWRpZW50LmZh
Y3RvcjIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwYXJzZWRQYXJ0
aWNsZVN5c3RlbS52ZWxvY2l0eUdyYWRpZW50cykgeworICAgICAgICAgICAgZm9yICh2YXIgX20g
PSAwLCBfbyA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnZlbG9jaXR5R3JhZGllbnRzOyBfbSA8IF9v
Lmxlbmd0aDsgX20rKykgeworICAgICAgICAgICAgICAgIHZhciB2ZWxvY2l0eUdyYWRpZW50ID0g
X29bX21dOworICAgICAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmFkZFZlbG9jaXR5R3JhZGll
bnQodmVsb2NpdHlHcmFkaWVudC5ncmFkaWVudCwgdmVsb2NpdHlHcmFkaWVudC5mYWN0b3IxICE9
PSB1bmRlZmluZWQgPyB2ZWxvY2l0eUdyYWRpZW50LmZhY3RvcjEgOiB2ZWxvY2l0eUdyYWRpZW50
LmZhY3RvciwgdmVsb2NpdHlHcmFkaWVudC5mYWN0b3IyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0uZHJhZ0dyYWRpZW50cykgewor
ICAgICAgICAgICAgZm9yICh2YXIgX3AgPSAwLCBfcSA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLmRy
YWdHcmFkaWVudHM7IF9wIDwgX3EubGVuZ3RoOyBfcCsrKSB7CisgICAgICAgICAgICAgICAgdmFy
IGRyYWdHcmFkaWVudCA9IF9xW19wXTsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5h
ZGREcmFnR3JhZGllbnQoZHJhZ0dyYWRpZW50LmdyYWRpZW50LCBkcmFnR3JhZGllbnQuZmFjdG9y
MSAhPT0gdW5kZWZpbmVkID8gZHJhZ0dyYWRpZW50LmZhY3RvcjEgOiBkcmFnR3JhZGllbnQuZmFj
dG9yLCBkcmFnR3JhZGllbnQuZmFjdG9yMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHBhcnNlZFBhcnRpY2xlU3lzdGVtLmVtaXRSYXRlR3JhZGllbnRzKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBfciA9IDAsIF9zID0gcGFyc2VkUGFydGljbGVTeXN0ZW0uZW1pdFJh
dGVHcmFkaWVudHM7IF9yIDwgX3MubGVuZ3RoOyBfcisrKSB7CisgICAgICAgICAgICAgICAgdmFy
IGVtaXRSYXRlR3JhZGllbnQgPSBfc1tfcl07CisgICAgICAgICAgICAgICAgcGFydGljbGVTeXN0
ZW0uYWRkRW1pdFJhdGVHcmFkaWVudChlbWl0UmF0ZUdyYWRpZW50LmdyYWRpZW50LCBlbWl0UmF0
ZUdyYWRpZW50LmZhY3RvcjEgIT09IHVuZGVmaW5lZCA/IGVtaXRSYXRlR3JhZGllbnQuZmFjdG9y
MSA6IGVtaXRSYXRlR3JhZGllbnQuZmFjdG9yLCBlbWl0UmF0ZUdyYWRpZW50LmZhY3RvcjIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3Rl
bS5zdGFydFNpemVHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIF90ID0gMCwgX3Ug
PSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5zdGFydFNpemVHcmFkaWVudHM7IF90IDwgX3UubGVuZ3Ro
OyBfdCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0U2l6ZUdyYWRpZW50ID0gX3VbX3Rd
OworICAgICAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmFkZFN0YXJ0U2l6ZUdyYWRpZW50KHN0
YXJ0U2l6ZUdyYWRpZW50LmdyYWRpZW50LCBzdGFydFNpemVHcmFkaWVudC5mYWN0b3IxICE9PSB1
bmRlZmluZWQgPyBzdGFydFNpemVHcmFkaWVudC5mYWN0b3IxIDogc3RhcnRTaXplR3JhZGllbnQu
ZmFjdG9yLCBzdGFydFNpemVHcmFkaWVudC5mYWN0b3IyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0ubGlmZVRpbWVHcmFkaWVudHMp
IHsKKyAgICAgICAgICAgIGZvciAodmFyIF92ID0gMCwgX3cgPSBwYXJzZWRQYXJ0aWNsZVN5c3Rl
bS5saWZlVGltZUdyYWRpZW50czsgX3YgPCBfdy5sZW5ndGg7IF92KyspIHsKKyAgICAgICAgICAg
ICAgICB2YXIgbGlmZVRpbWVHcmFkaWVudCA9IF93W192XTsKKyAgICAgICAgICAgICAgICBwYXJ0
aWNsZVN5c3RlbS5hZGRMaWZlVGltZUdyYWRpZW50KGxpZmVUaW1lR3JhZGllbnQuZ3JhZGllbnQs
IGxpZmVUaW1lR3JhZGllbnQuZmFjdG9yMSAhPT0gdW5kZWZpbmVkID8gbGlmZVRpbWVHcmFkaWVu
dC5mYWN0b3IxIDogbGlmZVRpbWVHcmFkaWVudC5mYWN0b3IsIGxpZmVUaW1lR3JhZGllbnQuZmFj
dG9yMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZFBhcnRp
Y2xlU3lzdGVtLmxpbWl0VmVsb2NpdHlHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIGZvciAodmFy
IF94ID0gMCwgX3kgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5saW1pdFZlbG9jaXR5R3JhZGllbnRz
OyBfeCA8IF95Lmxlbmd0aDsgX3grKykgeworICAgICAgICAgICAgICAgIHZhciBsaW1pdFZlbG9j
aXR5R3JhZGllbnQgPSBfeVtfeF07CisgICAgICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0uYWRk
TGltaXRWZWxvY2l0eUdyYWRpZW50KGxpbWl0VmVsb2NpdHlHcmFkaWVudC5ncmFkaWVudCwgbGlt
aXRWZWxvY2l0eUdyYWRpZW50LmZhY3RvcjEgIT09IHVuZGVmaW5lZCA/IGxpbWl0VmVsb2NpdHlH
cmFkaWVudC5mYWN0b3IxIDogbGltaXRWZWxvY2l0eUdyYWRpZW50LmZhY3RvciwgbGltaXRWZWxv
Y2l0eUdyYWRpZW50LmZhY3RvcjIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFydGlj
bGVTeXN0ZW0ubGltaXRWZWxvY2l0eURhbXBpbmcgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5saW1p
dFZlbG9jaXR5RGFtcGluZzsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkUGFydGljbGVT
eXN0ZW0ubm9pc2VUZXh0dXJlKSB7CisgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5ub2lzZVRl
eHR1cmUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX1Byb2NlZHVyYWxzX3Byb2NlZHVyYWxUZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJQcm9jZWR1cmFsVGV4dHVyZSJdLlBhcnNl
KHBhcnNlZFBhcnRpY2xlU3lzdGVtLm5vaXNlVGV4dHVyZSwgc2NlbmUsIHJvb3RVcmwpOworICAg
ICAgICB9CisgICAgICAgIC8vIEVtaXR0ZXIKKyAgICAgICAgdmFyIGVtaXR0ZXJUeXBlOworICAg
ICAgICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0ucGFydGljbGVFbWl0dGVyVHlwZSkgeworICAg
ICAgICAgICAgc3dpdGNoIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5wYXJ0aWNsZUVtaXR0ZXJUeXBl
LnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlICJTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIiOgor
ICAgICAgICAgICAgICAgICAgICBlbWl0dGVyVHlwZSA9IG5ldyBfUGFydGljbGVzX0VtaXR0ZXJU
eXBlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siU3BoZXJlUGFydGljbGVF
bWl0dGVyIl0oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSAiU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiOgorICAgICAgICAgICAgICAgICAg
ICBlbWl0dGVyVHlwZSA9IG5ldyBfUGFydGljbGVzX0VtaXR0ZXJUeXBlc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTRfX1siU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiXSgp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJDb25l
RW1pdHRlciI6CisgICAgICAgICAgICAgICAgY2FzZSAiQ29uZVBhcnRpY2xlRW1pdHRlciI6Cisg
ICAgICAgICAgICAgICAgICAgIGVtaXR0ZXJUeXBlID0gbmV3IF9QYXJ0aWNsZXNfRW1pdHRlclR5
cGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJDb25lUGFydGljbGVFbWl0
dGVyIl0oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSAiQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIiOgorICAgICAgICAgICAgICAgICAgICBlbWl0dGVy
VHlwZSA9IG5ldyBfUGFydGljbGVzX0VtaXR0ZXJUeXBlc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTRfX1siQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIiXSgpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJIZW1pc3BoZXJpY1BhcnRpY2xl
RW1pdHRlciI6CisgICAgICAgICAgICAgICAgICAgIGVtaXR0ZXJUeXBlID0gbmV3IF9QYXJ0aWNs
ZXNfRW1pdHRlclR5cGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJIZW1p
c3BoZXJpY1BhcnRpY2xlRW1pdHRlciJdKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgIkJveEVtaXR0ZXIiOgorICAgICAgICAgICAgICAgIGNhc2Ug
IkJveFBhcnRpY2xlRW1pdHRlciI6CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdHRlclR5cGUgPSBuZXcgX1BhcnRpY2xlc19FbWl0dGVyVHlwZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkJveFBhcnRpY2xlRW1pdHRlciJdKCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZW1pdHRlclR5cGUucGFyc2UocGFyc2VkUGFydGljbGVTeXN0ZW0ucGFydGljbGVFbWl0dGVyVHlw
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbWl0dGVyVHlwZSA9
IG5ldyBfUGFydGljbGVzX0VtaXR0ZXJUeXBlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTRfX1siQm94UGFydGljbGVFbWl0dGVyIl0oKTsKKyAgICAgICAgICAgIGVtaXR0ZXJUeXBl
LnBhcnNlKHBhcnNlZFBhcnRpY2xlU3lzdGVtKTsKKyAgICAgICAgfQorICAgICAgICBwYXJ0aWNs
ZVN5c3RlbS5wYXJ0aWNsZUVtaXR0ZXJUeXBlID0gZW1pdHRlclR5cGU7CisgICAgICAgIC8vIEFu
aW1hdGlvbiBzaGVldAorICAgICAgICBwYXJ0aWNsZVN5c3RlbS5zdGFydFNwcml0ZUNlbGxJRCA9
IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnN0YXJ0U3ByaXRlQ2VsbElEOworICAgICAgICBwYXJ0aWNs
ZVN5c3RlbS5lbmRTcHJpdGVDZWxsSUQgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5lbmRTcHJpdGVD
ZWxsSUQ7CisgICAgICAgIHBhcnRpY2xlU3lzdGVtLnNwcml0ZUNlbGxXaWR0aCA9IHBhcnNlZFBh
cnRpY2xlU3lzdGVtLnNwcml0ZUNlbGxXaWR0aDsKKyAgICAgICAgcGFydGljbGVTeXN0ZW0uc3By
aXRlQ2VsbEhlaWdodCA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnNwcml0ZUNlbGxIZWlnaHQ7Cisg
ICAgICAgIHBhcnRpY2xlU3lzdGVtLnNwcml0ZUNlbGxDaGFuZ2VTcGVlZCA9IHBhcnNlZFBhcnRp
Y2xlU3lzdGVtLnNwcml0ZUNlbGxDaGFuZ2VTcGVlZDsKKyAgICAgICAgcGFydGljbGVTeXN0ZW0u
c3ByaXRlUmFuZG9tU3RhcnRDZWxsID0gcGFyc2VkUGFydGljbGVTeXN0ZW0uc3ByaXRlUmFuZG9t
U3RhcnRDZWxsOworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2VzIGEgSlNPTiBvYmplY3Qg
dG8gY3JlYXRlIGEgcGFydGljbGUgc3lzdGVtLgorICAgICAqIEBwYXJhbSBwYXJzZWRQYXJ0aWNs
ZVN5c3RlbSBUaGUgSlNPTiBvYmplY3QgdG8gcGFyc2UKKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhl
IHNjZW5lIHRvIGNyZWF0ZSB0aGUgcGFydGljbGUgc3lzdGVtIGluCisgICAgICogQHBhcmFtIHJv
b3RVcmwgVGhlIHJvb3QgdXJsIHRvIHVzZSB0byBsb2FkIGV4dGVybmFsIGRlcGVuZGVuY2llcyBs
aWtlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gZG9Ob3RTdGFydCBJZ25vcmUgdGhlIHByZXZlbnRB
dXRvU3RhcnQgYXR0cmlidXRlIGFuZCBkb2VzIG5vdCBzdGFydAorICAgICAqIEByZXR1cm5zIHRo
ZSBQYXJzZWQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0uUGFy
c2UgPSBmdW5jdGlvbiAocGFyc2VkUGFydGljbGVTeXN0ZW0sIHNjZW5lLCByb290VXJsLCBkb05v
dFN0YXJ0KSB7CisgICAgICAgIGlmIChkb05vdFN0YXJ0ID09PSB2b2lkIDApIHsgZG9Ob3RTdGFy
dCA9IGZhbHNlOyB9CisgICAgICAgIHZhciBuYW1lID0gcGFyc2VkUGFydGljbGVTeXN0ZW0ubmFt
ZTsKKyAgICAgICAgdmFyIGN1c3RvbSA9IG51bGw7CisgICAgICAgIHZhciBwcm9ncmFtID0gbnVs
bDsKKyAgICAgICAgaWYgKHBhcnNlZFBhcnRpY2xlU3lzdGVtLmN1c3RvbVNoYWRlcikgeworICAg
ICAgICAgICAgcHJvZ3JhbSA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLmN1c3RvbVNoYWRlcjsKKyAg
ICAgICAgICAgIHZhciBkZWZpbmVzID0gKHByb2dyYW0uc2hhZGVyT3B0aW9ucy5kZWZpbmVzLmxl
bmd0aCA+IDApID8gcHJvZ3JhbS5zaGFkZXJPcHRpb25zLmRlZmluZXMuam9pbigiXG4iKSA6ICIi
OworICAgICAgICAgICAgY3VzdG9tID0gc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlRWZmZWN0Rm9y
UGFydGljbGVzKHByb2dyYW0uc2hhZGVyUGF0aC5mcmFnbWVudEVsZW1lbnQsIHByb2dyYW0uc2hh
ZGVyT3B0aW9ucy51bmlmb3JtcywgcHJvZ3JhbS5zaGFkZXJPcHRpb25zLnNhbXBsZXJzLCBkZWZp
bmVzKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcGFydGljbGVTeXN0ZW0gPSBuZXcgUGFydGlj
bGVTeXN0ZW0obmFtZSwgcGFyc2VkUGFydGljbGVTeXN0ZW0uY2FwYWNpdHksIHNjZW5lLCBjdXN0
b20sIHBhcnNlZFBhcnRpY2xlU3lzdGVtLmlzQW5pbWF0aW9uU2hlZXRFbmFibGVkKTsKKyAgICAg
ICAgcGFydGljbGVTeXN0ZW0uY3VzdG9tU2hhZGVyID0gcHJvZ3JhbTsKKyAgICAgICAgaWYgKHBh
cnNlZFBhcnRpY2xlU3lzdGVtLmlkKSB7CisgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5pZCA9
IHBhcnNlZFBhcnRpY2xlU3lzdGVtLmlkOworICAgICAgICB9CisgICAgICAgIC8vIFN1YkVtaXR0
ZXJzCisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5zdWJFbWl0dGVycykgeworICAg
ICAgICAgICAgcGFydGljbGVTeXN0ZW0uc3ViRW1pdHRlcnMgPSBbXTsKKyAgICAgICAgICAgIGZv
ciAodmFyIF9pID0gMCwgX2EgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5zdWJFbWl0dGVyczsgX2kg
PCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IF9hW19pXTsK
KyAgICAgICAgICAgICAgICB2YXIgY2VsbEFycmF5ID0gW107CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgX2IgPSAwLCBjZWxsXzEgPSBjZWxsOyBfYiA8IGNlbGxfMS5sZW5ndGg7IF9iKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHN1YiA9IGNlbGxfMVtfYl07CisgICAgICAgICAgICAg
ICAgICAgIGNlbGxBcnJheS5wdXNoKF9zdWJFbWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xN19fWyJTdWJFbWl0dGVyIl0uUGFyc2Uoc3ViLCBzY2VuZSwgcm9vdFVybCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5zdWJFbWl0dGVycy5w
dXNoKGNlbGxBcnJheSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUGFydGlj
bGVTeXN0ZW0uX1BhcnNlKHBhcnNlZFBhcnRpY2xlU3lzdGVtLCBwYXJ0aWNsZVN5c3RlbSwgc2Nl
bmUsIHJvb3RVcmwpOworICAgICAgICBwYXJ0aWNsZVN5c3RlbS50ZXh0dXJlTWFzayA9IF9NYXRo
c19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJDb2xvcjQiXS5Gcm9t
QXJyYXkocGFyc2VkUGFydGljbGVTeXN0ZW0udGV4dHVyZU1hc2spOworICAgICAgICAvLyBBdXRv
IHN0YXJ0CisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5wcmV2ZW50QXV0b1N0YXJ0
KSB7CisgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5wcmV2ZW50QXV0b1N0YXJ0ID0gcGFyc2Vk
UGFydGljbGVTeXN0ZW0ucHJldmVudEF1dG9TdGFydDsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IWRvTm90U3RhcnQgJiYgIXBhcnRpY2xlU3lzdGVtLnByZXZlbnRBdXRvU3RhcnQpIHsKKyAgICAg
ICAgICAgIHBhcnRpY2xlU3lzdGVtLnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHBhcnRpY2xlU3lzdGVtOworICAgIH07CisgICAgLyoqCisgICAgICogQmlsbGJvYXJkIG1vZGUg
d2lsbCBvbmx5IGFwcGx5IHRvIFkgYXhpcworICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVtLkJJ
TExCT0FSRE1PREVfWSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMThfX1siQ29uc3RhbnRzIl0uUEFSVElDTEVTX0JJTExCT0FSRE1PREVfWTsKKyAgICAvKioK
KyAgICAgKiBCaWxsYm9hcmQgbW9kZSB3aWxsIGFwcGx5IHRvIGFsbCBheGVzCisgICAgICovCisg
ICAgUGFydGljbGVTeXN0ZW0uQklMTEJPQVJETU9ERV9BTEwgPSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIkNvbnN0YW50cyJdLlBBUlRJQ0xFU19CSUxM
Qk9BUkRNT0RFX0FMTDsKKyAgICAvKioKKyAgICAgKiBTcGVjaWFsIGJpbGxib2FyZCBtb2RlIHdo
ZXJlIHRoZSBwYXJ0aWNsZSB3aWxsIGJlIGJpaWxib2FyZCB0byB0aGUgY2FtZXJhIGJ1dCByb3Rh
dGVkIHRvIGFsaWduIHdpdGggZGlyZWN0aW9uCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0u
QklMTEJPQVJETU9ERV9TVFJFVENIRUQgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE4X19bIkNvbnN0YW50cyJdLlBBUlRJQ0xFU19CSUxMQk9BUkRNT0RFX1NU
UkVUQ0hFRDsKKyAgICByZXR1cm4gUGFydGljbGVTeXN0ZW07Cit9KF9iYXNlUGFydGljbGVTeXN0
ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIkJhc2VQYXJ0aWNsZVN5c3RlbSJdKSk7
CisKK19zdWJFbWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJTdWJFbWl0dGVy
Il0uX1BhcnNlUGFydGljbGVTeXN0ZW0gPSBQYXJ0aWNsZVN5c3RlbS5QYXJzZTsKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vUGFydGljbGVzL3BhcnRpY2xlU3lzdGVtQ29tcG9uZW50LnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1BhcnRpY2xlcy9wYXJ0aWNsZVN5c3RlbUNvbXBvbmVudC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IF9JRG9OZWVkVG9CZUluVGhlQnVpbGQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiX0lEb05lZWRUb0JlSW5UaGVCdWlsZCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0lEb05lZWRUb0JlSW5UaGVCdWlsZDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9ncHVQYXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ncHVQYXJ0aWNsZVN5c3RlbSAq
LyAiLi9QYXJ0aWNsZXMvZ3B1UGFydGljbGVTeXN0ZW0udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfYWJzdHJhY3RTY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vYWJzdHJhY3RTY2VuZSAqLyAiLi9hYnN0cmFjdFNjZW5l
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVz
L2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9wYXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9wYXJ0aWNsZVN5c3RlbSAqLyAiLi9QYXJ0aWNsZXMvcGFydGlj
bGVTeXN0ZW0udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1NoYWRlcnNfcGFydGljbGVzX3ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9wYXJ0aWNsZXMu
dmVydGV4ICovICIuL1NoYWRlcnMvcGFydGljbGVzLnZlcnRleC50cyIpOworCisKKworCisKKwor
CisvLyBBZGRzIHRoZSBwYXJzZXJzIHRvIHRoZSBzY2VuZSBwYXJzZXJzLgorX2Fic3RyYWN0U2Nl
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQWJzdHJhY3RTY2VuZSJdLkFkZFBhcnNl
cihfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2NlbmVDb21w
b25lbnRDb25zdGFudHMiXS5OQU1FX1BBUlRJQ0xFU1lTVEVNLCBmdW5jdGlvbiAocGFyc2VkRGF0
YSwgc2NlbmUsIGNvbnRhaW5lciwgcm9vdFVybCkgeworICAgIHZhciBpbmRpdmlkdWFsUGFyc2Vy
ID0gX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQWJzdHJhY3RT
Y2VuZSJdLkdldEluZGl2aWR1YWxQYXJzZXIoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uTkFNRV9QQVJUSUNMRVNZ
U1RFTSk7CisgICAgaWYgKCFpbmRpdmlkdWFsUGFyc2VyKSB7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgLy8gUGFydGljbGVzIFN5c3RlbXMKKyAgICBpZiAocGFyc2VkRGF0YS5wYXJ0aWNs
ZVN5c3RlbXMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLnBhcnRpY2xlU3lzdGVtcyAhPT0g
bnVsbCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGNhY2hlID0gcGFyc2VkRGF0YS5w
YXJ0aWNsZVN5c3RlbXMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICB2YXIgcGFyc2VkUGFydGljbGVTeXN0ZW0gPSBwYXJzZWREYXRhLnBhcnRpY2xlU3lzdGVt
c1tpbmRleF07CisgICAgICAgICAgICBjb250YWluZXIucGFydGljbGVTeXN0ZW1zLnB1c2goaW5k
aXZpZHVhbFBhcnNlcihwYXJzZWRQYXJ0aWNsZVN5c3RlbSwgc2NlbmUsIHJvb3RVcmwpKTsKKyAg
ICAgICAgfQorICAgIH0KK30pOworX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siQWJzdHJhY3RTY2VuZSJdLkFkZEluZGl2aWR1YWxQYXJzZXIoX3NjZW5lQ29tcG9u
ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRz
Il0uTkFNRV9QQVJUSUNMRVNZU1RFTSwgZnVuY3Rpb24gKHBhcnNlZFBhcnRpY2xlU3lzdGVtLCBz
Y2VuZSwgcm9vdFVybCkgeworICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5hY3RpdmVQYXJ0
aWNsZUNvdW50KSB7CisgICAgICAgIHZhciBwcyA9IF9ncHVQYXJ0aWNsZVN5c3RlbV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJHUFVQYXJ0aWNsZVN5c3RlbSJdLlBhcnNlKHBhcnNlZFBh
cnRpY2xlU3lzdGVtLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIHJldHVybiBwczsKKyAgICB9
CisgICAgZWxzZSB7CisgICAgICAgIHZhciBwcyA9IF9wYXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJQYXJ0aWNsZVN5c3RlbSJdLlBhcnNlKHBhcnNlZFBhcnRpY2xl
U3lzdGVtLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIHJldHVybiBwczsKKyAgICB9Cit9KTsK
K19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5w
cm90b3R5cGUuY3JlYXRlRWZmZWN0Rm9yUGFydGljbGVzID0gZnVuY3Rpb24gKGZyYWdtZW50TmFt
ZSwgdW5pZm9ybXNOYW1lcywgc2FtcGxlcnMsIGRlZmluZXMsIGZhbGxiYWNrcywgb25Db21waWxl
ZCwgb25FcnJvcikgeworICAgIGlmICh1bmlmb3Jtc05hbWVzID09PSB2b2lkIDApIHsgdW5pZm9y
bXNOYW1lcyA9IFtdOyB9CisgICAgaWYgKHNhbXBsZXJzID09PSB2b2lkIDApIHsgc2FtcGxlcnMg
PSBbXTsgfQorICAgIGlmIChkZWZpbmVzID09PSB2b2lkIDApIHsgZGVmaW5lcyA9ICIiOyB9Cisg
ICAgdmFyIGF0dHJpYnV0ZXNOYW1lc09yT3B0aW9ucyA9IF9wYXJ0aWNsZVN5c3RlbV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQYXJ0aWNsZVN5c3RlbSJdLl9HZXRBdHRyaWJ1dGVOYW1l
c09yT3B0aW9ucygpOworICAgIHZhciBlZmZlY3RDcmVhdGlvbk9wdGlvbiA9IF9wYXJ0aWNsZVN5
c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQYXJ0aWNsZVN5c3RlbSJdLl9HZXRF
ZmZlY3RDcmVhdGlvbk9wdGlvbnMoKTsKKyAgICBpZiAoZGVmaW5lcy5pbmRleE9mKCIgQklMTEJP
QVJEIikgPT09IC0xKSB7CisgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmluZSBCSUxMQk9BUkRc
biI7CisgICAgfQorICAgIGlmIChzYW1wbGVycy5pbmRleE9mKCJkaWZmdXNlU2FtcGxlciIpID09
PSAtMSkgeworICAgICAgICBzYW1wbGVycy5wdXNoKCJkaWZmdXNlU2FtcGxlciIpOworICAgIH0K
KyAgICByZXR1cm4gdGhpcy5jcmVhdGVFZmZlY3QoeworICAgICAgICB2ZXJ0ZXg6ICJwYXJ0aWNs
ZXMiLAorICAgICAgICBmcmFnbWVudEVsZW1lbnQ6IGZyYWdtZW50TmFtZQorICAgIH0sIGF0dHJp
YnV0ZXNOYW1lc09yT3B0aW9ucywgZWZmZWN0Q3JlYXRpb25PcHRpb24uY29uY2F0KHVuaWZvcm1z
TmFtZXMpLCBzYW1wbGVycywgZGVmaW5lcywgZmFsbGJhY2tzLCBvbkNvbXBpbGVkLCBvbkVycm9y
KTsKK307CitfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJd
LnByb3RvdHlwZS5nZXRFbWl0dGVkUGFydGljbGVTeXN0ZW1zID0gZnVuY3Rpb24gKCkgeworICAg
IHZhciByZXN1bHRzID0gbmV3IEFycmF5KCk7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IHRoaXMuZ2V0U2NlbmUoKS5wYXJ0aWNsZVN5c3RlbXMubGVuZ3RoOyBpbmRleCsrKSB7Cisg
ICAgICAgIHZhciBwYXJ0aWNsZVN5c3RlbSA9IHRoaXMuZ2V0U2NlbmUoKS5wYXJ0aWNsZVN5c3Rl
bXNbaW5kZXhdOworICAgICAgICBpZiAocGFydGljbGVTeXN0ZW0uZW1pdHRlciA9PT0gdGhpcykg
eworICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHBhcnRpY2xlU3lzdGVtKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0czsKK307CitfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siTWVzaCJdLnByb3RvdHlwZS5nZXRIaWVyYXJjaHlFbWl0dGVkUGFy
dGljbGVTeXN0ZW1zID0gZnVuY3Rpb24gKCkgeworICAgIHZhciByZXN1bHRzID0gbmV3IEFycmF5
KCk7CisgICAgdmFyIGRlc2NlbmRhbnRzID0gdGhpcy5nZXREZXNjZW5kYW50cygpOworICAgIGRl
c2NlbmRhbnRzLnB1c2godGhpcyk7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRo
aXMuZ2V0U2NlbmUoKS5wYXJ0aWNsZVN5c3RlbXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
IHZhciBwYXJ0aWNsZVN5c3RlbSA9IHRoaXMuZ2V0U2NlbmUoKS5wYXJ0aWNsZVN5c3RlbXNbaW5k
ZXhdOworICAgICAgICB2YXIgZW1pdHRlciA9IHBhcnRpY2xlU3lzdGVtLmVtaXR0ZXI7CisgICAg
ICAgIGlmIChlbWl0dGVyLnBvc2l0aW9uICYmIGRlc2NlbmRhbnRzLmluZGV4T2YoZW1pdHRlcikg
IT09IC0xKSB7CisgICAgICAgICAgICByZXN1bHRzLnB1c2gocGFydGljbGVTeXN0ZW0pOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHRzOworfTsKKy8qKgorICogQGhpZGRlbgor
ICovCit2YXIgX0lEb05lZWRUb0JlSW5UaGVCdWlsZCA9IDQyOworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9QYXJ0aWNsZXMvcGFydGljbGVTeXN0ZW1TZXQudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGFydGljbGVzL3BhcnRp
Y2xlU3lzdGVtU2V0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUGFydGljbGVTeXN0ZW1TZXQgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFydGljbGVTeXN0ZW1TZXQiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFBhcnRpY2xlU3lzdGVtU2V0OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9t
YXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWlsZGVy
c19zcGhlcmVCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlciAqLyAiLi9NZXNo
ZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9ncHVQYXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9ncHVQYXJ0aWNsZVN5c3RlbSAqLyAiLi9QYXJ0aWNsZXMvZ3B1
UGFydGljbGVTeXN0ZW0udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19l
bmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3Jl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BhcnRpY2xlc19wYXJ0aWNsZVN5c3Rl
bV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vUGFydGljbGVzL3BhcnRpY2xlU3lzdGVtICovICIuL1BhcnRpY2xlcy9wYXJ0aWNsZVN5c3Rl
bS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRl
cmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWF0ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL3N0YW5kYXJk
TWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisKKwor
CisKKworCisKKy8qKiBJbnRlcm5hbCBjbGFzcyB1c2VkIHRvIHN0b3JlIHNoYXBlcyBmb3IgZW1p
dHRlcnMgKi8KK3ZhciBQYXJ0aWNsZVN5c3RlbVNldEVtaXR0ZXJDcmVhdGlvbk9wdGlvbnMgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gUGFydGljbGVTeXN0ZW1T
ZXRFbWl0dGVyQ3JlYXRpb25PcHRpb25zKCkgeworICAgIH0KKyAgICByZXR1cm4gUGFydGljbGVT
eXN0ZW1TZXRFbWl0dGVyQ3JlYXRpb25PcHRpb25zOworfSgpKTsKKy8qKgorICogUmVwcmVzZW50
cyBhIHNldCBvZiBwYXJ0aWNsZSBzeXN0ZW1zIHdvcmtpbmcgdG9nZXRoZXIgdG8gY3JlYXRlIGEg
c3BlY2lmaWMgZWZmZWN0CisgKi8KK3ZhciBQYXJ0aWNsZVN5c3RlbVNldCA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQYXJ0aWNsZVN5c3RlbVNldCgpIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBhcnRpY2xlIHN5c3RlbSBsaXN0CisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnN5c3RlbXMgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFBhcnRpY2xlU3lzdGVtU2V0LnByb3RvdHlwZSwgImVtaXR0
ZXJOb2RlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZW1pdHRlciBub2Rl
IHVzZWQgd2l0aCB0aGlzIHNldAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZW1pdHRlck5vZGU7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgZW1pdHRlciBtZXNoIGFzIGEgc3Bo
ZXJlCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNy
ZWF0ZSB0aGUgc3BoZXJlCisgICAgICogQHBhcmFtIHJlbmRlcmluZ0dyb3VwSWQgZGVmaW5lcyB0
aGUgcmVuZGVyaW5nR3JvdXBJZCB0byB1c2UgZm9yIHRoZSBzcGhlcmUKKyAgICAgKiBAcGFyYW0g
c2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqLworICAgIFBhcnRpY2xlU3lz
dGVtU2V0LnByb3RvdHlwZS5zZXRFbWl0dGVyQXNTcGhlcmUgPSBmdW5jdGlvbiAob3B0aW9ucywg
cmVuZGVyaW5nR3JvdXBJZCwgc2NlbmUpIHsKKyAgICAgICAgaWYgKHRoaXMuX2VtaXR0ZXJOb2Rl
KSB7CisgICAgICAgICAgICB0aGlzLl9lbWl0dGVyTm9kZS5kaXNwb3NlKCk7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fZW1pdHRlckNyZWF0aW9uT3B0aW9ucyA9IHsKKyAgICAgICAgICAgIGtp
bmQ6ICJTcGhlcmUiLAorICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucywKKyAgICAgICAgICAg
IHJlbmRlcmluZ0dyb3VwSWQ6IHJlbmRlcmluZ0dyb3VwSWQKKyAgICAgICAgfTsKKyAgICAgICAg
dmFyIGVtaXR0ZXJNZXNoID0gX01lc2hlc19CdWlsZGVyc19zcGhlcmVCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlNwaGVyZUJ1aWxkZXIiXS5DcmVhdGVTcGhlcmUoImVtaXR0
ZXJTcGhlcmUiLCB7IGRpYW1ldGVyOiBvcHRpb25zLmRpYW1ldGVyLCBzZWdtZW50czogb3B0aW9u
cy5zZWdtZW50cyB9LCBzY2VuZSk7CisgICAgICAgIGVtaXR0ZXJNZXNoLnJlbmRlcmluZ0dyb3Vw
SWQgPSByZW5kZXJpbmdHcm91cElkOworICAgICAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgX01hdGVy
aWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlN0YW5k
YXJkTWF0ZXJpYWwiXSgiZW1pdHRlclNwaGVyZU1hdGVyaWFsIiwgc2NlbmUpOworICAgICAgICBt
YXRlcmlhbC5lbWlzc2l2ZUNvbG9yID0gb3B0aW9ucy5jb2xvcjsKKyAgICAgICAgZW1pdHRlck1l
c2gubWF0ZXJpYWwgPSBtYXRlcmlhbDsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRo
aXMuc3lzdGVtczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBzeXN0
ZW0gPSBfYVtfaV07CisgICAgICAgICAgICBzeXN0ZW0uZW1pdHRlciA9IGVtaXR0ZXJNZXNoOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2VtaXR0ZXJOb2RlID0gZW1pdHRlck1lc2g7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTdGFydHMgYWxsIHBhcnRpY2xlIHN5c3RlbXMgb2YgdGhlIHNl
dAorICAgICAqIEBwYXJhbSBlbWl0dGVyIGRlZmluZXMgYW4gb3B0aW9uYWwgbWVzaCB0byB1c2Ug
YXMgZW1pdHRlciBmb3IgdGhlIHBhcnRpY2xlIHN5c3RlbXMKKyAgICAgKi8KKyAgICBQYXJ0aWNs
ZVN5c3RlbVNldC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoZW1pdHRlcikgeworICAgICAg
ICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5zeXN0ZW1zOyBfaSA8IF9hLmxlbmd0aDsgX2kr
KykgeworICAgICAgICAgICAgdmFyIHN5c3RlbSA9IF9hW19pXTsKKyAgICAgICAgICAgIGlmIChl
bWl0dGVyKSB7CisgICAgICAgICAgICAgICAgc3lzdGVtLmVtaXR0ZXIgPSBlbWl0dGVyOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc3lzdGVtLnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIFJlbGVhc2UgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgICAg
ICovCisgICAgUGFydGljbGVTeXN0ZW1TZXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLnN5c3RlbXM7IF9pIDwgX2Eu
bGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgc3lzdGVtID0gX2FbX2ldOworICAgICAg
ICAgICAgc3lzdGVtLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnN5c3RlbXMg
PSBbXTsKKyAgICAgICAgaWYgKHRoaXMuX2VtaXR0ZXJOb2RlKSB7CisgICAgICAgICAgICB0aGlz
Ll9lbWl0dGVyTm9kZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9lbWl0dGVyTm9kZSA9
IG51bGw7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUg
c2V0IGludG8gYSBKU09OIGNvbXBhdGlibGUgb2JqZWN0CisgICAgICogQHJldHVybnMgYSBKU09O
IGNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNldAorICAgICAqLworICAgIFBhcnRp
Y2xlU3lzdGVtU2V0LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSB7fTsKKyAgICAgICAgcmVzdWx0LnN5c3RlbXMgPSBbXTsKKyAgICAgICAg
Zm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuc3lzdGVtczsgX2kgPCBfYS5sZW5ndGg7IF9pKysp
IHsKKyAgICAgICAgICAgIHZhciBzeXN0ZW0gPSBfYVtfaV07CisgICAgICAgICAgICByZXN1bHQu
c3lzdGVtcy5wdXNoKHN5c3RlbS5zZXJpYWxpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX2VtaXR0ZXJOb2RlKSB7CisgICAgICAgICAgICByZXN1bHQuZW1pdHRlciA9IHRoaXMu
X2VtaXR0ZXJDcmVhdGlvbk9wdGlvbnM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlIGEgbmV3IFBhcnRpY2xlU3lzdGVtU2V0
IGZyb20gYSBzZXJpYWxpemVkIHNvdXJjZQorICAgICAqIEBwYXJhbSBkYXRhIGRlZmluZXMgYSBK
U09OIGNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNldAorICAgICAqIEBwYXJhbSBz
Y2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIGdwdSBkZWZpbmVz
IGlmIHdlIHdhbnQgR1BVIHBhcnRpY2xlcyBvciBDUFUgcGFydGljbGVzCisgICAgICogQHJldHVy
bnMgYSBuZXcgUGFydGljbGVTeXN0ZW1TZXQKKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbVNl
dC5QYXJzZSA9IGZ1bmN0aW9uIChkYXRhLCBzY2VuZSwgZ3B1KSB7CisgICAgICAgIGlmIChncHUg
PT09IHZvaWQgMCkgeyBncHUgPSBmYWxzZTsgfQorICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFBh
cnRpY2xlU3lzdGVtU2V0KCk7CisgICAgICAgIHZhciByb290VXJsID0gX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlBBUlRJQ0xFU19C
YXNlQXNzZXRzVXJsICsgIi90ZXh0dXJlcy8iOworICAgICAgICBzY2VuZSA9IHNjZW5lIHx8IF9F
bmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZVN0
b3JlIl0uTGFzdENyZWF0ZWRTY2VuZTsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IGRh
dGEuc3lzdGVtczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBzeXN0
ZW0gPSBfYVtfaV07CisgICAgICAgICAgICByZXN1bHQuc3lzdGVtcy5wdXNoKGdwdSA/IF9ncHVQ
YXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHUFVQYXJ0aWNsZVN5
c3RlbSJdLlBhcnNlKHN5c3RlbSwgc2NlbmUsIHJvb3RVcmwsIHRydWUpIDogX1BhcnRpY2xlc19w
YXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQYXJ0aWNsZVN5c3Rl
bSJdLlBhcnNlKHN5c3RlbSwgc2NlbmUsIHJvb3RVcmwsIHRydWUpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoZGF0YS5lbWl0dGVyKSB7CisgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IGRhdGEu
ZW1pdHRlci5vcHRpb25zOworICAgICAgICAgICAgc3dpdGNoIChkYXRhLmVtaXR0ZXIua2luZCkg
eworICAgICAgICAgICAgICAgIGNhc2UgIlNwaGVyZSI6CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5zZXRFbWl0dGVyQXNTcGhlcmUoeworICAgICAgICAgICAgICAgICAgICAgICAgZGlhbWV0
ZXI6IG9wdGlvbnMuZGlhbWV0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50czog
b3B0aW9ucy5zZWdtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBfTWF0aHNf
bWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb2xvcjMiXS5Gcm9tQXJy
YXkob3B0aW9ucy5jb2xvcikKKyAgICAgICAgICAgICAgICAgICAgfSwgZGF0YS5lbWl0dGVyLnJl
bmRlcmluZ0dyb3VwSWQsIHNjZW5lKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAg
IHJldHVybiBQYXJ0aWNsZVN5c3RlbVNldDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vUGFydGljbGVzL3NvbGlkUGFydGljbGUudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9QYXJ0aWNsZXMvc29saWRQYXJ0aWNsZS50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogU29saWRQYXJ0aWNsZSwgTW9kZWxTaGFwZSwgRGVwdGhTb3J0ZWRQYXJ0
aWNsZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTb2xpZFBhcnRpY2xl
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBTb2xpZFBhcnRpY2xlOyB9KTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk1vZGVsU2hhcGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1vZGVsU2hhcGU7IH0pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRGVwdGhTb3J0ZWRQYXJ0aWNsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
RGVwdGhTb3J0ZWRQYXJ0aWNsZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9t
YXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0N1bGxpbmcvYm91bmRpbmdJbmZvICovICIu
L0N1bGxpbmcvYm91bmRpbmdJbmZvLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0N1
bGxpbmdfYm91bmRpbmdTcGhlcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL0N1bGxpbmcvYm91bmRpbmdTcGhlcmUgKi8gIi4vQ3VsbGlu
Zy9ib3VuZGluZ1NwaGVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNf
YWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1l
c2gudHMiKTsKKworCisKKworCisvKioKKyAqIFJlcHJlc2VudHMgb25lIHBhcnRpY2xlIG9mIGEg
c29saWQgcGFydGljbGUgc3lzdGVtLgorICovCit2YXIgU29saWRQYXJ0aWNsZSA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgU29saWQgUGFy
dGljbGUgb2JqZWN0LgorICAgICAqIERvbid0IGNyZWF0ZSBwYXJ0aWNsZXMgbWFudWFsbHksIHVz
ZSBpbnN0ZWFkIHRoZSBTb2xpZCBQYXJ0aWNsZSBTeXN0ZW0gaW50ZXJuYWwgdG9vbHMgbGlrZSBf
YWRkUGFydGljbGUoKQorICAgICAqIEBwYXJhbSBwYXJ0aWNsZUluZGV4IChpbnRlZ2VyKSBpcyB0
aGUgcGFydGljbGUgaW5kZXggaW4gdGhlIFNvbGlkIFBhcnRpY2xlIFN5c3RlbSBwb29sLiBJdCdz
IGFsc28gdGhlIHBhcnRpY2xlIGlkZW50aWZpZXIuCisgICAgICogQHBhcmFtIHBvc2l0aW9uSW5k
ZXggKGludGVnZXIpIGlzIHRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgcGFydGljbGUgdmVydGlj
ZXMgaW4gdGhlIFNQUyAicG9zaXRpb25zIiBhcnJheS4KKyAgICAgKiBAcGFyYW0gaW5kaWNlSW5k
ZXggKGludGVnZXIpIGlzIHRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgcGFydGljbGUgaW5kaWNl
cyBpbiB0aGUgU1BTICJpbmRpY2VzIiBhcnJheS4KKyAgICAgKiBAcGFyYW0gbW9kZWwgKE1vZGVs
U2hhcGUpIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2RlbCBzaGFwZSBvbiB3aGF0IHRoZSBwYXJ0
aWNsZSBpcyBkZXNpZ25lZC4KKyAgICAgKiBAcGFyYW0gc2hhcGVJZCAoaW50ZWdlcikgaXMgdGhl
IG1vZGVsIHNoYXBlIGlkZW50aWZpZXIgaW4gdGhlIFNQUy4KKyAgICAgKiBAcGFyYW0gaWR4SW5T
aGFwZSAoaW50ZWdlcikgaXMgdGhlIGluZGV4IG9mIHRoZSBwYXJ0aWNsZSBpbiB0aGUgY3VycmVu
dCBtb2RlbCAoZXg6IHRoZSAxMHRoIGJveCBvZiBhZGRTaGFwZShib3gsIDMwKSkKKyAgICAgKiBA
cGFyYW0gc3BzIGRlZmluZXMgdGhlIHNwcyBpdCBpcyBhc3NvY2lhdGVkIHRvCisgICAgICogQHBh
cmFtIG1vZGVsQm91bmRpbmdJbmZvIGlzIHRoZSByZWZlcmVuY2UgdG8gdGhlIG1vZGVsIEJvdW5k
aW5nSW5mbyB1c2VkIGZvciBpbnRlcnNlY3Rpb24gY29tcHV0YXRpb25zLgorICAgICAqLworICAg
IGZ1bmN0aW9uIFNvbGlkUGFydGljbGUocGFydGljbGVJbmRleCwgcG9zaXRpb25JbmRleCwgaW5k
aWNlSW5kZXgsIG1vZGVsLCBzaGFwZUlkLCBpZHhJblNoYXBlLCBzcHMsIG1vZGVsQm91bmRpbmdJ
bmZvKSB7CisgICAgICAgIGlmIChtb2RlbEJvdW5kaW5nSW5mbyA9PT0gdm9pZCAwKSB7IG1vZGVs
Qm91bmRpbmdJbmZvID0gbnVsbDsgfQorICAgICAgICAvKioKKyAgICAgICAgICogcGFydGljbGUg
Z2xvYmFsIGluZGV4CisgICAgICAgICAqLworICAgICAgICB0aGlzLmlkeCA9IDA7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBUaGUgY29sb3Igb2YgdGhlIHBhcnRpY2xlCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLmNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIkNvbG9yNCJdKDEuMCwgMS4wLCAxLjAsIDEuMCk7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBUaGUgd29ybGQgc3BhY2UgcG9zaXRpb24gb2YgdGhlIHBhcnRpY2xlLgor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5wb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAv
KioKKyAgICAgICAgICogVGhlIHdvcmxkIHNwYWNlIHJvdGF0aW9uIG9mIHRoZSBwYXJ0aWNsZS4g
KE5vdCB1c2UgaWYgcm90YXRpb25RdWF0ZXJuaW9uIGlzIHNldCkKKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMucm90YXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRo
ZSBzY2FsaW5nIG9mIHRoZSBwYXJ0aWNsZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc2Nh
bGluZyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0uT25lKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgdXZzIG9mIHRoZSBw
YXJ0aWNsZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMudXZzID0gbmV3IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3I0Il0oMC4wLCAwLjAs
IDEuMCwgMS4wKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjdXJyZW50IHNwZWVkIG9m
IHRoZSBwYXJ0aWNsZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMudmVsb2NpdHkgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlpl
cm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBwaXZvdCBwb2ludCBpbiB0aGUgcGFy
dGljbGUgbG9jYWwgc3BhY2UuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnBpdm90ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNdXN0IHRoZSBwYXJ0aWNsZSBiZSB0cmFu
c2xhdGVkIGZyb20gaXRzIHBpdm90IHBvaW50IGluIGl0cyBsb2NhbCBzcGFjZSA/CisgICAgICAg
ICAqIEluIHRoaXMgY2FzZSwgdGhlIHBpdm90IHBvaW50IGlzIHNldCBhdCB0aGUgb3JpZ2luIG9m
IHRoZSBwYXJ0aWNsZSBsb2NhbCBzcGFjZSBhbmQgdGhlIHBhcnRpY2xlIGlzIHRyYW5zbGF0ZWQu
CisgICAgICAgICAqIERlZmF1bHQgOiBmYWxzZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy50
cmFuc2xhdGVGcm9tUGl2b3QgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElzIHRo
ZSBwYXJ0aWNsZSBhY3RpdmUgb3Igbm90ID8KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYWxp
dmUgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogSXMgdGhlIHBhcnRpY2xlIHZpc2li
bGUgb3Igbm90ID8KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEluZGV4IG9mIHRoaXMgcGFydGljbGUgaW4gdGhlIGds
b2JhbCAicG9zaXRpb25zIiBhcnJheSAoSW50ZXJuYWwgdXNlKQorICAgICAgICAgKiBAaGlkZGVu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLl9wb3MgPSAwOworICAgICAgICAvKioKKyAgICAg
ICAgICogQGhpZGRlbiBJbmRleCBvZiB0aGlzIHBhcnRpY2xlIGluIHRoZSBnbG9iYWwgImluZGlj
ZXMiIGFycmF5IChJbnRlcm5hbCB1c2UpCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9pbmQg
PSAwOworICAgICAgICAvKioKKyAgICAgICAgICogTW9kZWxTaGFwZSBpZCBvZiB0aGlzIHBhcnRp
Y2xlCisgICAgICAgICAqLworICAgICAgICB0aGlzLnNoYXBlSWQgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogSW5kZXggb2YgdGhlIHBhcnRpY2xlIGluIGl0cyBzaGFwZSBpZAorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5pZHhJblNoYXBlID0gMDsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEBoaWRkZW4gU3RpbGwgc2V0IGFzIGludmlzaWJsZSBpbiBvcmRlciB0byBza2lwIHVzZWxl
c3MgY29tcHV0YXRpb25zIChJbnRlcm5hbCB1c2UpCisgICAgICAgICAqLworICAgICAgICB0aGlz
Ll9zdGlsbEludmlzaWJsZSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRl
biBMYXN0IGNvbXB1dGVkIHBhcnRpY2xlIHJvdGF0aW9uIG1hdHJpeAorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5fcm90YXRpb25NYXRyaXggPSBbMS4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIDAu
MCwgMC4wLCAwLjAsIDEuMF07CisgICAgICAgIC8qKgorICAgICAgICAgKiBQYXJlbnQgcGFydGlj
bGUgSWQsIGlmIGFueS4KKyAgICAgICAgICogRGVmYXVsdCBudWxsLgorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5wYXJlbnRJZCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
Y3VsbGluZyBzdHJhdGVneSB0byB1c2UgdG8gY2hlY2sgd2hldGhlciB0aGUgc29saWQgcGFydGlj
bGUgbXVzdCBiZSBjdWxsZWQgb3Igbm90IHdoZW4gdXNpbmcgaXNJbkZydXN0dW0oKS4KKyAgICAg
ICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUgOgorICAgICAgICAgKiAtIEFic3RyYWN0TWVz
aC5DVUxMSU5HU1RSQVRFR1lfU1RBTkRBUkQKKyAgICAgICAgICogLSBBYnN0cmFjdE1lc2guQ1VM
TElOR1NUUkFURUdZX0JPVU5ESU5HU1BIRVJFX09OTFkKKyAgICAgICAgICogLSBBYnN0cmFjdE1l
c2guQ1VMTElOR1NUUkFURUdZX09QVElNSVNUSUNfSU5DTFVTSU9OCisgICAgICAgICAqIC0gQWJz
dHJhY3RNZXNoLkNVTExJTkdTVFJBVEVHWV9PUFRJTUlTVElDX0lOQ0xVU0lPTl9USEVOX0JTUEhF
UkVfT05MWQorICAgICAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3Igc29saWQgcGFydGljbGVz
IGlzIEFic3RyYWN0TWVzaC5DVUxMSU5HU1RSQVRFR1lfQk9VTkRJTkdTUEhFUkVfT05MWQorICAg
ICAgICAgKiBQbGVhc2UgcmVhZCBlYWNoIHN0YXRpYyB2YXJpYWJsZSBkb2N1bWVudGF0aW9uIGlu
IHRoZSBjbGFzcyBBYnN0cmFjdE1lc2ggdG8gZ2V0IGRldGFpbHMgYWJvdXQgdGhlIGN1bGxpbmcg
cHJvY2Vzcy4KKyAgICAgICAgICogKi8KKyAgICAgICAgdGhpcy5jdWxsaW5nU3RyYXRlZ3kgPSBf
TWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBYnN0cmFj
dE1lc2giXS5DVUxMSU5HU1RSQVRFR1lfQk9VTkRJTkdTUEhFUkVfT05MWTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEBoaWRkZW4gSW50ZXJuYWwgZ2xvYmFsIHBvc2l0aW9uIGluIHRoZSBTUFMu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLl9nbG9iYWxQb3NpdGlvbiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICB0aGlzLmlkeCA9IHBhcnRpY2xlSW5kZXg7CisgICAgICAgIHRoaXMuX3BvcyA9IHBv
c2l0aW9uSW5kZXg7CisgICAgICAgIHRoaXMuX2luZCA9IGluZGljZUluZGV4OworICAgICAgICB0
aGlzLl9tb2RlbCA9IG1vZGVsOworICAgICAgICB0aGlzLnNoYXBlSWQgPSBzaGFwZUlkOworICAg
ICAgICB0aGlzLmlkeEluU2hhcGUgPSBpZHhJblNoYXBlOworICAgICAgICB0aGlzLl9zcHMgPSBz
cHM7CisgICAgICAgIGlmIChtb2RlbEJvdW5kaW5nSW5mbykgeworICAgICAgICAgICAgdGhpcy5f
bW9kZWxCb3VuZGluZ0luZm8gPSBtb2RlbEJvdW5kaW5nSW5mbzsKKyAgICAgICAgICAgIHRoaXMu
X2JvdW5kaW5nSW5mbyA9IG5ldyBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siQm91bmRpbmdJbmZvIl0obW9kZWxCb3VuZGluZ0luZm8ubWluaW11bSwg
bW9kZWxCb3VuZGluZ0luZm8ubWF4aW11bSk7CisgICAgICAgIH0KKyAgICB9CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFNvbGlkUGFydGljbGUucHJvdG90eXBlLCAic2NhbGUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBMZWdhY3kgc3VwcG9ydCwgY2hhbmdlZCBzY2FsZSB0byBzY2Fs
aW5nCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLnNjYWxpbmc7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAg
KiBMZWdhY3kgc3VwcG9ydCwgY2hhbmdlZCBzY2FsZSB0byBzY2FsaW5nCisgICAgICAgICAqLwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzY2FsZSkgeworICAgICAgICAgICAgdGhpcy5zY2FsaW5n
ID0gc2NhbGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShT
b2xpZFBhcnRpY2xlLnByb3RvdHlwZSwgInF1YXRlcm5pb24iLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBMZWdhY3kgc3VwcG9ydCwgY2hhbmdlZCBxdWF0ZXJuaW9uIHRvIHJvdGF0aW9uUXVh
dGVybmlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5yb3RhdGlvblF1YXRlcm5pb247CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBMZWdhY3kgc3VwcG9ydCwgY2hhbmdlZCBxdWF0ZXJuaW9uIHRvIHJv
dGF0aW9uUXVhdGVybmlvbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAocSkg
eworICAgICAgICAgICAgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24gPSBxOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbi4gVHJ1ZSBpZiB0aGUgcGFy
dGljbGUgaW50ZXJzZWN0cyBhbm90aGVyIHBhcnRpY2xlIG9yIGFub3RoZXIgbWVzaCwgZWxzZSBm
YWxzZS4KKyAgICAgKiBUaGUgaW50ZXJzZWN0aW9uIGlzIGNvbXB1dGVkIG9uIHRoZSBwYXJ0aWNs
ZSBib3VuZGluZyBzcGhlcmUgYW5kIEF4aXMgQWxpZ25lZCBCb3VuZGluZyBCb3ggKEFBQkIpCisg
ICAgICogQHBhcmFtIHRhcmdldCBpcyB0aGUgb2JqZWN0IChzb2xpZCBwYXJ0aWNsZSBvciBtZXNo
KSB3aGF0IHRoZSBpbnRlcnNlY3Rpb24gaXMgY29tcHV0ZWQgYWdhaW5zdC4KKyAgICAgKiBAcmV0
dXJucyB0cnVlIGlmIGl0IGludGVyc2VjdHMKKyAgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlLnBy
b3RvdHlwZS5pbnRlcnNlY3RzTWVzaCA9IGZ1bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9ib3VuZGluZ0luZm8gfHwgIXRhcmdldC5fYm91bmRpbmdJbmZvKSB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Nwcy5fYlNw
aGVyZU9ubHkpIHsKKyAgICAgICAgICAgIHJldHVybiBfQ3VsbGluZ19ib3VuZGluZ1NwaGVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJCb3VuZGluZ1NwaGVyZSJdLkludGVyc2VjdHMo
dGhpcy5fYm91bmRpbmdJbmZvLmJvdW5kaW5nU3BoZXJlLCB0YXJnZXQuX2JvdW5kaW5nSW5mby5i
b3VuZGluZ1NwaGVyZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kaW5n
SW5mby5pbnRlcnNlY3RzKHRhcmdldC5fYm91bmRpbmdJbmZvLCBmYWxzZSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc29saWQgcGFydGljbGUgaXMgd2l0
aGluIHRoZSBmcnVzdHVtIGRlZmluZWQgYnkgdGhlIHBhc3NlZCBhcnJheSBvZiBwbGFuZXMuCisg
ICAgICogQSBwYXJ0aWNsZSBpcyBpbiB0aGUgZnJ1c3R1bSBpZiBpdHMgYm91bmRpbmcgYm94IGlu
dGVyc2VjdHMgdGhlIGZydXN0dW0KKyAgICAgKiBAcGFyYW0gZnJ1c3R1bVBsYW5lcyBkZWZpbmVz
IHRoZSBmcnVzdHVtIHRvIHRlc3QKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBwYXJ0aWNs
ZSBpcyBpbiB0aGUgZnJ1c3R1bSBwbGFuZXMKKyAgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlLnBy
b3RvdHlwZS5pc0luRnJ1c3R1bSA9IGZ1bmN0aW9uIChmcnVzdHVtUGxhbmVzKSB7CisgICAgICAg
IHJldHVybiB0aGlzLl9ib3VuZGluZ0luZm8gIT09IG51bGwgJiYgdGhpcy5fYm91bmRpbmdJbmZv
LmlzSW5GcnVzdHVtKGZydXN0dW1QbGFuZXMsIHRoaXMuY3VsbGluZ1N0cmF0ZWd5KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIGdldCB0aGUgcm90YXRpb24gbWF0cml4IG9mIHRoZSBwYXJ0aWNs
ZQorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlLnByb3RvdHlwZS5n
ZXRSb3RhdGlvbk1hdHJpeCA9IGZ1bmN0aW9uIChtKSB7CisgICAgICAgIHZhciBxdWF0ZXJuaW9u
OworICAgICAgICBpZiAodGhpcy5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHF1
YXRlcm5pb24gPSB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbjsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHF1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLlF1YXRlcm5pb25bMF07CisgICAg
ICAgICAgICB2YXIgcm90YXRpb24gPSB0aGlzLnJvdGF0aW9uOworICAgICAgICAgICAgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlF1YXRlcm5pb24iXS5S
b3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKHJvdGF0aW9uLnksIHJvdGF0aW9uLngsIHJvdGF0aW9u
LnosIHF1YXRlcm5pb24pOworICAgICAgICB9CisgICAgICAgIHF1YXRlcm5pb24udG9Sb3RhdGlv
bk1hdHJpeChtKTsKKyAgICB9OworICAgIHJldHVybiBTb2xpZFBhcnRpY2xlOworfSgpKTsKKwor
LyoqCisgKiBSZXByZXNlbnRzIHRoZSBzaGFwZSBvZiB0aGUgbW9kZWwgdXNlZCBieSBvbmUgcGFy
dGljbGUgb2YgYSBzb2xpZCBwYXJ0aWNsZSBzeXN0ZW0uCisgKiBTUFMgaW50ZXJuYWwgdG9vbCwg
ZG9uJ3QgdXNlIGl0IG1hbnVhbGx5LgorICovCit2YXIgTW9kZWxTaGFwZSA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgTW9kZWxTaGFwZSBv
YmplY3QuIFRoaXMgaXMgYW4gaW50ZXJuYWwgc2ltcGxpZmllZCByZWZlcmVuY2UgdG8gYSBtZXNo
IHVzZWQgYXMgZm9yIGEgbW9kZWwgdG8gcmVwbGljYXRlIHBhcnRpY2xlcyBmcm9tIGJ5IHRoZSBT
UFMuCisgICAgICogU1BTIGludGVybmFsIHRvb2wsIGRvbid0IHVzZSBpdCBtYW51YWxseS4KKyAg
ICAgKiBAaGlkZGVuCisgICAgICovCisgICAgZnVuY3Rpb24gTW9kZWxTaGFwZShpZCwgc2hhcGUs
IGluZGljZXNMZW5ndGgsIHNoYXBlVVYsIHBvc0Z1bmN0aW9uLCB2dHhGdW5jdGlvbikgeworICAg
ICAgICAvKioKKyAgICAgICAgICogbGVuZ3RoIG9mIHRoZSBzaGFwZSBpbiB0aGUgbW9kZWwgaW5k
aWNlcyBhcnJheSAoaW50ZXJuYWwgdXNlKQorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAq
LworICAgICAgICB0aGlzLl9pbmRpY2VzTGVuZ3RoID0gMDsKKyAgICAgICAgdGhpcy5zaGFwZUlE
ID0gaWQ7CisgICAgICAgIHRoaXMuX3NoYXBlID0gc2hhcGU7CisgICAgICAgIHRoaXMuX2luZGlj
ZXNMZW5ndGggPSBpbmRpY2VzTGVuZ3RoOworICAgICAgICB0aGlzLl9zaGFwZVVWID0gc2hhcGVV
VjsKKyAgICAgICAgdGhpcy5fcG9zaXRpb25GdW5jdGlvbiA9IHBvc0Z1bmN0aW9uOworICAgICAg
ICB0aGlzLl92ZXJ0ZXhGdW5jdGlvbiA9IHZ0eEZ1bmN0aW9uOworICAgIH0KKyAgICByZXR1cm4g
TW9kZWxTaGFwZTsKK30oKSk7CisKKy8qKgorICogUmVwcmVzZW50cyBhIERlcHRoIFNvcnRlZCBQ
YXJ0aWNsZSBpbiB0aGUgc29saWQgcGFydGljbGUgc3lzdGVtLgorICovCit2YXIgRGVwdGhTb3J0
ZWRQYXJ0aWNsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBE
ZXB0aFNvcnRlZFBhcnRpY2xlKCkgeworICAgICAgICAvKioKKyAgICAgICAgICogSW5kZXggb2Yg
dGhlIHBhcnRpY2xlIGluIHRoZSAiaW5kaWNlcyIgYXJyYXkKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuaW5kID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExlbmd0aCBvZiB0aGUgcGFy
dGljbGUgc2hhcGUgaW4gdGhlICJpbmRpY2VzIiBhcnJheQorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5pbmRpY2VzTGVuZ3RoID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNxdWFyZWQg
ZGlzdGFuY2UgZnJvbSB0aGUgcGFydGljbGUgdG8gdGhlIGNhbWVyYQorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5zcURpc3RhbmNlID0gMC4wOworICAgIH0KKyAgICByZXR1cm4gRGVwdGhTb3J0
ZWRQYXJ0aWNsZTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGFydGljbGVz
L3NvbGlkUGFydGljbGVTeXN0ZW0udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9QYXJ0aWNsZXMvc29saWRQYXJ0aWNsZVN5c3Rl
bS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogU29saWRQYXJ0aWNsZVN5c3RlbSAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTb2xpZFBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBTb2xpZFBhcnRpY2xlU3lzdGVtOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21h
dGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01l
c2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWVzaGVzL21lc2gudmVydGV4RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0
ZXhEYXRhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNo
ZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NZXNoZXNfQnVpbGRlcnNfZGlzY0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9CdWlsZGVycy9kaXNjQnVpbGRl
ciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvZGlzY0J1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAi
Li9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Nv
bGlkUGFydGljbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vc29saWRQYXJ0aWNsZSAqLyAiLi9QYXJ0aWNsZXMvc29saWRQYXJ0aWNsZS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DdWxsaW5nX2JvdW5kaW5nSW5mb19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ3Vs
bGluZy9ib3VuZGluZ0luZm8gKi8gIi4vQ3VsbGluZy9ib3VuZGluZ0luZm8udHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmF4aXMgKi8g
Ii4vTWF0aHMvbWF0aC5heGlzLnRzIik7CisKKworCisKKworCisKKworCisKK3ZhciBkZXB0aFNv
cnRGdW5jdGlvbiA9IGZ1bmN0aW9uIChwMSwgcDIpIHsgcmV0dXJuIHAyLnNxRGlzdGFuY2UgLSBw
MS5zcURpc3RhbmNlOyB9OworLyoqCisgKiBUaGUgU1BTIGlzIGEgc2luZ2xlIHVwZGF0YWJsZSBt
ZXNoLiBUaGUgc29saWQgcGFydGljbGVzIGFyZSBzaW1wbHkgc2VwYXJhdGUgcGFydHMgb3IgZmFj
ZXMgZm8gdGhpcyBiaWcgbWVzaC4KKyAqQXMgaXQgaXMganVzdCBhIG1lc2gsIHRoZSBTUFMgaGFz
IGFsbCB0aGUgc2FtZSBwcm9wZXJ0aWVzIHRoYW4gYW55IG90aGVyIEJKUyBtZXNoIDogbm90IG1v
cmUsIG5vdCBsZXNzLiBJdCBjYW4gYmUgc2NhbGVkLCByb3RhdGVkLCB0cmFuc2xhdGVkLCBlbmxp
Z2h0ZWQsIHRleHR1cmVkLCBtb3ZlZCwgZXRjLgorCisgKiBUaGUgU1BTIGlzIGFsc28gYSBwYXJ0
aWNsZSBzeXN0ZW0uIEl0IHByb3ZpZGVzIHNvbWUgbWV0aG9kcyB0byBtYW5hZ2UgdGhlIHBhcnRp
Y2xlcy4KKyAqIEhvd2V2ZXIgaXQgaXMgYmVoYXZpb3IgYWdub3N0aWMuIFRoaXMgbWVhbnMgaXQg
aGFzIG5vIGVtaXR0ZXIsIG5vIHBhcnRpY2xlIHBoeXNpY3MsIG5vIHBhcnRpY2xlIHJlY3ljbGVy
LiBZb3UgaGF2ZSB0byBpbXBsZW1lbnQgeW91ciBvd24gYmVoYXZpb3IuCisgKgorICogRnVsbCBk
b2N1bWVudGF0aW9uIGhlcmUgOiBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL1NvbGlk
X1BhcnRpY2xlX1N5c3RlbQorICovCit2YXIgU29saWRQYXJ0aWNsZVN5c3RlbSA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgU1BTIChTb2xp
ZCBQYXJ0aWNsZSBTeXN0ZW0pIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gbmFtZSAoU3RyaW5nKSBp
cyB0aGUgU1BTIG5hbWUsIHRoaXMgd2lsbCBiZSB0aGUgdW5kZXJseWluZyBtZXNoIG5hbWUuCisg
ICAgICogQHBhcmFtIHNjZW5lIChTY2VuZSkgaXMgdGhlIHNjZW5lIGluIHdoaWNoIHRoZSBTUFMg
aXMgYWRkZWQuCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyBvZiB0
aGUgc3BzIGUuZy4KKyAgICAgKiAqIHVwZGF0YWJsZSAob3B0aW9uYWwgYm9vbGVhbiwgZGVmYXVs
dCB0cnVlKSA6IGlmIHRoZSBTUFMgbXVzdCBiZSB1cGRhdGFibGUgb3IgaW1tdXRhYmxlLgorICAg
ICAqICogaXNQaWNrYWJsZSAob3B0aW9uYWwgYm9vbGVhbiwgZGVmYXVsdCBmYWxzZSkgOiBpZiB0
aGUgc29saWQgcGFydGljbGVzIG11c3QgYmUgcGlja2FibGUuCisgICAgICogKiBlbmFibGVEZXB0
aFNvcnQgKG9wdGlvbmFsIGJvb2xlYW4sIGRlZmF1bHQgZmFsc2UpIDogaWYgdGhlIHNvbGlkIHBh
cnRpY2xlcyBtdXN0IGJlIHNvcnRlZCBpbiB0aGUgZ2VvbWV0cnkgYWNjb3JkaW5nIHRvIHRoZWly
IGRpc3RhbmNlIHRvIHRoZSBjYW1lcmEuCisgICAgICogKiBwYXJ0aWNsZUludGVyc2VjdGlvbiAo
b3B0aW9uYWwgYm9vbGVhbiwgZGVmYXVsdCBmYWxzZSkgOiBpZiB0aGUgc29saWQgcGFydGljbGUg
aW50ZXJzZWN0aW9ucyBtdXN0IGJlIGNvbXB1dGVkLgorICAgICAqICogYm91bmRpbmdTcGhlcmVP
bmx5IChvcHRpb25hbCBib29sZWFuLCBkZWZhdWx0IGZhbHNlKSA6IGlmIHRoZSBwYXJ0aWNsZSBp
bnRlcnNlY3Rpb24gbXVzdCBiZSBjb21wdXRlZCBvbmx5IHdpdGggdGhlIGJvdW5kaW5nIHNwaGVy
ZSAobm8gYm91bmRpbmcgYm94IGNvbXB1dGF0aW9uLCBzbyBmYXN0ZXIpLgorICAgICAqICogYlNw
aGVyZVJhZGl1c0ZhY3RvciAob3B0aW9uYWwgZmxvYXQsIGRlZmF1bHQgMS4wKSA6IGEgbnVtYmVy
IHRvIG11bHRpcGx5IHRoZSBib3VuZGluZCBzcGhlcmUgcmFkaXVzIGJ5IGluIG9yZGVyIHRvIHJl
ZHVjZSBpdCBmb3IgaW5zdGFuY2UuCisgICAgICogQGV4YW1wbGUgYlNwaGVyZVJhZGl1c0ZhY3Rv
ciA9IDEuMCAvIE1hdGguc3FydCgzLjApID0+IHRoZSBib3VuZGluZyBzcGhlcmUgZXhhY3RseSBt
YXRjaGVzIGEgc3BoZXJpY2FsIG1lc2guCisgICAgICovCisgICAgZnVuY3Rpb24gU29saWRQYXJ0
aWNsZVN5c3RlbShuYW1lLCBzY2VuZSwgb3B0aW9ucykgeworICAgICAgICAvKioKKyAgICAgICAg
ICogIFRoZSBTUFMgYXJyYXkgb2YgU29saWQgUGFydGljbGUgb2JqZWN0cy4gSnVzdCBhY2Nlc3Mg
ZWFjaCBwYXJ0aWNsZSBhcyB3aXRoIGFueSBjbGFzc2ljIGFycmF5LgorICAgICAgICAgKiAgRXhh
bXBsZSA6IHZhciBwID0gU1BTLnBhcnRpY2xlc1tpXTsKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMucGFydGljbGVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
U1BTIHRvdGFsIG51bWJlciBvZiBwYXJ0aWNsZXMuIFJlYWQgb25seS4gVXNlIFNQUy5jb3VudGVy
IGluc3RlYWQgaWYgeW91IG5lZWQgdG8gc2V0IHlvdXIgb3duIHZhbHVlLgorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5uYlBhcnRpY2xlcyA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJ
ZiB0aGUgcGFydGljbGVzIG11c3QgZXZlciBmYWNlIHRoZSBjYW1lcmEgKGRlZmF1bHQgZmFsc2Up
LiBVc2VmdWwgZm9yIHBsYW5hciBwYXJ0aWNsZXMuCisgICAgICAgICAqLworICAgICAgICB0aGlz
LmJpbGxib2FyZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogUmVjb21wdXRlIG5v
cm1hbHMgd2hlbiBhZGRpbmcgYSBzaGFwZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZWNv
bXB1dGVOb3JtYWxzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgYSBjb3Vu
dGVyIG9mciB5b3VyIG93biB1c2FnZS4gSXQncyBub3Qgc2V0IGJ5IGFueSBTUFMgZnVuY3Rpb25z
LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5jb3VudGVyID0gMDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFRoaXMgZW1wdHkgb2JqZWN0IGlzIGludGVuZGVkIHRvIHN0b3JlIHNvbWUgU1BT
IHNwZWNpZmljIG9yIHRlbXBvcmFyeSB2YWx1ZXMgaW4gb3JkZXIgdG8gbG93ZXIgdGhlIEdhcmJh
Z2UgQ29sbGVjdG9yIGFjdGl2aXR5LgorICAgICAgICAgKiBQbGVhc2UgcmVhZCA6IGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI2dhcmJhZ2UtY29s
bGVjdG9yLWNvbmNlcm5zCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZhcnMgPSB7fTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBwYXJ0aWNsZSBpbnRlcnNlY3Rpb24gbXVzdCBi
ZSBjb21wdXRlZCBvbmx5IHdpdGggdGhlIGJvdW5kaW5nIHNwaGVyZSAobm8gYm91bmRpbmcgYm94
IGNvbXB1dGF0aW9uLCBzbyBmYXN0ZXIpLiAoSW50ZXJuYWwgdXNlIG9ubHkpCisgICAgICAgICAq
IEBoaWRkZW4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX2JTcGhlcmVPbmx5ID0gZmFsc2U7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBBIG51bWJlciB0byBtdWx0aXBseSB0aGUgYm91bmRp
bmQgc3BoZXJlIHJhZGl1cyBieSBpbiBvcmRlciB0byByZWR1Y2UgaXQgZm9yIGluc3RhbmNlLiAo
SW50ZXJuYWwgdXNlIG9ubHkpCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMuX2JTcGhlcmVSYWRpdXNGYWN0b3IgPSAxLjA7CisgICAgICAgIHRoaXMuX3Bvc2l0
aW9ucyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLl9pbmRpY2VzID0gbmV3IEFycmF5KCk7
CisgICAgICAgIHRoaXMuX25vcm1hbHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fY29s
b3JzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX3V2cyA9IG5ldyBBcnJheSgpOworICAg
ICAgICB0aGlzLl9pbmRleCA9IDA7IC8vIGluZGljZXMgaW5kZXgKKyAgICAgICAgdGhpcy5fdXBk
YXRhYmxlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fcGlja2FibGUgPSBmYWxzZTsKKyAgICAgICAg
dGhpcy5faXNWaXNpYmlsaXR5Qm94TG9ja2VkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2Fsd2F5
c1Zpc2libGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZGVwdGhTb3J0ID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX3NoYXBlQ291bnRlciA9IDA7CisgICAgICAgIHRoaXMuX2NvcHkgPSBuZXcgX3Nv
bGlkUGFydGljbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siU29saWRQYXJ0aWNsZSJd
KDAsIDAsIDAsIG51bGwsIDAsIDAsIHRoaXMpOworICAgICAgICB0aGlzLl9jb2xvciA9IG5ldyBf
TWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjQiXSgw
LCAwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fY29tcHV0ZVBhcnRpY2xlQ29sb3IgPSB0cnVlOwor
ICAgICAgICB0aGlzLl9jb21wdXRlUGFydGljbGVUZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgdGhp
cy5fY29tcHV0ZVBhcnRpY2xlUm90YXRpb24gPSB0cnVlOworICAgICAgICB0aGlzLl9jb21wdXRl
UGFydGljbGVWZXJ0ZXggPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY29tcHV0ZUJvdW5kaW5nQm94
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2RlcHRoU29ydFBhcnRpY2xlcyA9IHRydWU7CisgICAg
ICAgIHRoaXMuX211c3RVbnJvdGF0ZUZpeGVkTm9ybWFscyA9IGZhbHNlOworICAgICAgICB0aGlz
Ll9wYXJ0aWNsZXNJbnRlcnNlY3QgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbmVlZHMzMkJpdHMg
PSBmYWxzZTsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5fc2NlbmUg
PSBzY2VuZSB8fCBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7CisgICAgICAgIHRoaXMuX2NhbWVy
YSA9IHNjZW5lLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAgdGhpcy5fcGlja2FibGUgPSBvcHRpb25z
ID8gb3B0aW9ucy5pc1BpY2thYmxlIDogZmFsc2U7CisgICAgICAgIHRoaXMuX2RlcHRoU29ydCA9
IG9wdGlvbnMgPyBvcHRpb25zLmVuYWJsZURlcHRoU29ydCA6IGZhbHNlOworICAgICAgICB0aGlz
Ll9wYXJ0aWNsZXNJbnRlcnNlY3QgPSBvcHRpb25zID8gb3B0aW9ucy5wYXJ0aWNsZUludGVyc2Vj
dGlvbiA6IGZhbHNlOworICAgICAgICB0aGlzLl9iU3BoZXJlT25seSA9IG9wdGlvbnMgPyBvcHRp
b25zLmJvdW5kaW5nU3BoZXJlT25seSA6IGZhbHNlOworICAgICAgICB0aGlzLl9iU3BoZXJlUmFk
aXVzRmFjdG9yID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5iU3BoZXJlUmFkaXVzRmFjdG9yKSA/IG9w
dGlvbnMuYlNwaGVyZVJhZGl1c0ZhY3RvciA6IDEuMDsKKyAgICAgICAgaWYgKG9wdGlvbnMgJiYg
b3B0aW9ucy51cGRhdGFibGUgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdGhpcy5fdXBk
YXRhYmxlID0gb3B0aW9ucy51cGRhdGFibGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICB0aGlzLl91cGRhdGFibGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLl9waWNrYWJsZSkgeworICAgICAgICAgICAgdGhpcy5waWNrZWRQYXJ0aWNsZXMgPSBb
XTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZGVwdGhTb3J0KSB7CisgICAgICAgICAg
ICB0aGlzLmRlcHRoU29ydGVkUGFydGljbGVzID0gW107CisgICAgICAgIH0KKyAgICB9CisgICAg
LyoqCisgICAgICogQnVpbGRzIHRoZSBTUFMgdW5kZXJseWluZyBtZXNoLiBSZXR1cm5zIGEgc3Rh
bmRhcmQgTWVzaC4KKyAgICAgKiBJZiBubyBtb2RlbCBzaGFwZSB3YXMgYWRkZWQgdG8gdGhlIFNQ
UywgdGhlIHJldHVybmVkIG1lc2ggaXMganVzdCBhIHNpbmdsZSB0cmlhbmd1bGFyIHBsYW5lLgor
ICAgICAqIEByZXR1cm5zIHRoZSBjcmVhdGVkIG1lc2gKKyAgICAgKi8KKyAgICBTb2xpZFBhcnRp
Y2xlU3lzdGVtLnByb3RvdHlwZS5idWlsZE1lc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlm
ICh0aGlzLm5iUGFydGljbGVzID09PSAwKSB7CisgICAgICAgICAgICB2YXIgdHJpYW5nbGUgPSBf
TWVzaGVzX0J1aWxkZXJzX2Rpc2NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19b
IkRpc2NCdWlsZGVyIl0uQ3JlYXRlRGlzYygiIiwgeyByYWRpdXM6IDEsIHRlc3NlbGxhdGlvbjog
MyB9LCB0aGlzLl9zY2VuZSk7CisgICAgICAgICAgICB0aGlzLmFkZFNoYXBlKHRyaWFuZ2xlLCAx
KTsKKyAgICAgICAgICAgIHRyaWFuZ2xlLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9pbmRpY2VzMzIgPSAodGhpcy5fbmVlZHMzMkJpdHMpID8gbmV3IFVpbnQzMkFycmF5KHRo
aXMuX2luZGljZXMpIDogbmV3IFVpbnQxNkFycmF5KHRoaXMuX2luZGljZXMpOworICAgICAgICB0
aGlzLl9wb3NpdGlvbnMzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5fcG9zaXRpb25zKTsKKyAg
ICAgICAgdGhpcy5fdXZzMzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuX3V2cyk7CisgICAgICAg
IHRoaXMuX2NvbG9yczMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLl9jb2xvcnMpOworICAgICAg
ICBpZiAodGhpcy5yZWNvbXB1dGVOb3JtYWxzKSB7CisgICAgICAgICAgICBfTWVzaGVzX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ29t
cHV0ZU5vcm1hbHModGhpcy5fcG9zaXRpb25zMzIsIHRoaXMuX2luZGljZXMzMiwgdGhpcy5fbm9y
bWFscyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbm9ybWFsczMyID0gbmV3IEZsb2F0MzJB
cnJheSh0aGlzLl9ub3JtYWxzKTsKKyAgICAgICAgdGhpcy5fZml4ZWROb3JtYWwzMiA9IG5ldyBG
bG9hdDMyQXJyYXkodGhpcy5fbm9ybWFscyk7CisgICAgICAgIGlmICh0aGlzLl9tdXN0VW5yb3Rh
dGVGaXhlZE5vcm1hbHMpIHsgLy8gdGhlIHBhcnRpY2xlcyBjb3VsZCBiZSBjcmVhdGVkIGFscmVh
ZHkgcm90YXRlZCBpbiB0aGUgbWVzaCB3aXRoIGEgcG9zaXRpb25GdW5jdGlvbgorICAgICAgICAg
ICAgdGhpcy5fdW5yb3RhdGVGaXhlZE5vcm1hbHMoKTsKKyAgICAgICAgfQorICAgICAgICB2YXIg
dmVydGV4RGF0YSA9IG5ldyBfTWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAgICAgICAgdmVydGV4RGF0YS5pbmRpY2Vz
ID0gKHRoaXMuX2RlcHRoU29ydCkgPyB0aGlzLl9pbmRpY2VzIDogdGhpcy5faW5kaWNlczMyOwor
ICAgICAgICB2ZXJ0ZXhEYXRhLnNldCh0aGlzLl9wb3NpdGlvbnMzMiwgX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5k
KTsKKyAgICAgICAgdmVydGV4RGF0YS5zZXQodGhpcy5fbm9ybWFsczMyLCBfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5k
KTsKKyAgICAgICAgaWYgKHRoaXMuX3V2czMyLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHZl
cnRleERhdGEuc2V0KHRoaXMuX3V2czMyLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9jb2xvcnMzMi5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB2ZXJ0ZXhEYXRh
LnNldCh0aGlzLl9jb2xvcnMzMiwgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAgICAgfQorICAgICAgICB2
YXIgbWVzaCA9IG5ldyBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
TWVzaCJdKHRoaXMubmFtZSwgdGhpcy5fc2NlbmUpOworICAgICAgICB2ZXJ0ZXhEYXRhLmFwcGx5
VG9NZXNoKG1lc2gsIHRoaXMuX3VwZGF0YWJsZSk7CisgICAgICAgIHRoaXMubWVzaCA9IG1lc2g7
CisgICAgICAgIHRoaXMubWVzaC5pc1BpY2thYmxlID0gdGhpcy5fcGlja2FibGU7CisgICAgICAg
IC8vIGZyZWUgbWVtb3J5CisgICAgICAgIGlmICghdGhpcy5fZGVwdGhTb3J0KSB7CisgICAgICAg
ICAgICB0aGlzLl9pbmRpY2VzID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9wb3Np
dGlvbnMgPSBudWxsOworICAgICAgICB0aGlzLl9ub3JtYWxzID0gbnVsbDsKKyAgICAgICAgdGhp
cy5fdXZzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY29sb3JzID0gbnVsbDsKKyAgICAgICAgaWYg
KCF0aGlzLl91cGRhdGFibGUpIHsKKyAgICAgICAgICAgIHRoaXMucGFydGljbGVzLmxlbmd0aCA9
IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1lc2g7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBEaWdlc3RzIHRoZSBtZXNoIGFuZCBnZW5lcmF0ZXMgYXMgbWFueSBzb2xpZCBwYXJ0aWNs
ZXMgaW4gdGhlIHN5c3RlbSBhcyB3YW50ZWQuIFJldHVybnMgdGhlIFNQUy4KKyAgICAgKiBUaGVz
ZSBwYXJ0aWNsZXMgd2lsbCBoYXZlIHRoZSBzYW1lIGdlb21ldHJ5IHRoYW4gdGhlIG1lc2ggcGFy
dHMgYW5kIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgc2FtZSBsb2NhbGlzYXRpb24gdGhhbiB0
aGUgbWVzaCBvcmlnaW5hbCBwbGFjZXMuCisgICAgICogVGh1cyB0aGUgcGFydGljbGVzIGdlbmVy
YXRlZCBmcm9tIGBkaWdlc3QoKWAgaGF2ZSB0aGVpciBwcm9wZXJ0eSBgcG9zaXRpb25gIHNldCB5
ZXQuCisgICAgICogQHBhcmFtIG1lc2ggKCBNZXNoICkgaXMgdGhlIG1lc2ggdG8gYmUgZGlnZXN0
ZWQKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyB7ZmFjZXROYn0gKG9wdGlvbmFsIGludGVnZXIsIGRl
ZmF1bHQgMSkgaXMgdGhlIG51bWJlciBvZiBtZXNoIGZhY2V0cyBwZXIgcGFydGljbGUsIHRoaXMg
cGFyYW1ldGVyIGlzIG92ZXJyaWRlbiBieSB0aGUgcGFyYW1ldGVyIGBudW1iZXJgIGlmIGFueQor
ICAgICAqIHtkZWx0YX0gKG9wdGlvbmFsIGludGVnZXIsIGRlZmF1bHQgMCkgaXMgdGhlIHJhbmRv
bSBleHRyYSBudW1iZXIgb2YgZmFjZXRzIHBlciBwYXJ0aWNsZSAsIGVhY2ggcGFydGljbGUgd2ls
bCBoYXZlIGJldHdlZW4gYGZhY2V0TmJgIGFuZCBgZmFjZXROYiArIGRlbHRhYCBmYWNldHMKKyAg
ICAgKiB7bnVtYmVyfSAob3B0aW9uYWwgcG9zaXRpdmUgaW50ZWdlcikgaXMgdGhlIHdhbnRlZCBu
dW1iZXIgb2YgcGFydGljbGVzIDogZWFjaCBwYXJ0aWNsZSBpcyBidWlsdCB3aXRoIGBtZXNoX3Rv
dGFsX2ZhY2V0cyAvIG51bWJlcmAgZmFjZXRzCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQg
U1BTCisgICAgICovCisgICAgU29saWRQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuZGlnZXN0ID0g
ZnVuY3Rpb24gKG1lc2gsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIHNpemUgPSAob3B0aW9ucyAm
JiBvcHRpb25zLmZhY2V0TmIpIHx8IDE7CisgICAgICAgIHZhciBudW1iZXIgPSAob3B0aW9ucyAm
JiBvcHRpb25zLm51bWJlcikgfHwgMDsKKyAgICAgICAgdmFyIGRlbHRhID0gKG9wdGlvbnMgJiYg
b3B0aW9ucy5kZWx0YSkgfHwgMDsKKyAgICAgICAgdmFyIG1lc2hQb3MgPSBtZXNoLmdldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0
ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpOworICAgICAgICB2YXIgbWVzaEluZCA9IG1lc2guZ2V0
SW5kaWNlcygpOworICAgICAgICB2YXIgbWVzaFVWID0gbWVzaC5nZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0u
VVZLaW5kKTsKKyAgICAgICAgdmFyIG1lc2hDb2wgPSBtZXNoLmdldFZlcnRpY2VzRGF0YShfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5D
b2xvcktpbmQpOworICAgICAgICB2YXIgbWVzaE5vciA9IG1lc2guZ2V0VmVydGljZXNEYXRhKF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJd
Lk5vcm1hbEtpbmQpOworICAgICAgICB2YXIgZiA9IDA7IC8vIGZhY2V0IGNvdW50ZXIKKyAgICAg
ICAgdmFyIHRvdGFsRmFjZXRzID0gbWVzaEluZC5sZW5ndGggLyAzOyAvLyBhIGZhY2V0IGlzIGEg
dHJpYW5nbGUsIHNvIDMgaW5kaWNlcworICAgICAgICAvLyBjb21wdXRlIHNpemUgZnJvbSBudW1i
ZXIKKyAgICAgICAgaWYgKG51bWJlcikgeworICAgICAgICAgICAgbnVtYmVyID0gKG51bWJlciA+
IHRvdGFsRmFjZXRzKSA/IHRvdGFsRmFjZXRzIDogbnVtYmVyOworICAgICAgICAgICAgc2l6ZSA9
IE1hdGgucm91bmQodG90YWxGYWNldHMgLyBudW1iZXIpOworICAgICAgICAgICAgZGVsdGEgPSAw
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2l6ZSA9IChzaXplID4g
dG90YWxGYWNldHMpID8gdG90YWxGYWNldHMgOiBzaXplOworICAgICAgICB9CisgICAgICAgIHZh
ciBmYWNldFBvcyA9IFtdOyAvLyBzdWJtZXNoIHBvc2l0aW9ucworICAgICAgICB2YXIgZmFjZXRJ
bmQgPSBbXTsgLy8gc3VibWVzaCBpbmRpY2VzCisgICAgICAgIHZhciBmYWNldFVWID0gW107IC8v
IHN1Ym1lc2ggVVYKKyAgICAgICAgdmFyIGZhY2V0Q29sID0gW107IC8vIHN1Ym1lc2ggY29sb3Jz
CisgICAgICAgIHZhciBiYXJ5Y2VudGVyID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHZhciBzaXplTyA9
IHNpemU7CisgICAgICAgIHdoaWxlIChmIDwgdG90YWxGYWNldHMpIHsKKyAgICAgICAgICAgIHNp
emUgPSBzaXplTyArIE1hdGguZmxvb3IoKDEgKyBkZWx0YSkgKiBNYXRoLnJhbmRvbSgpKTsKKyAg
ICAgICAgICAgIGlmIChmID4gdG90YWxGYWNldHMgLSBzaXplKSB7CisgICAgICAgICAgICAgICAg
c2l6ZSA9IHRvdGFsRmFjZXRzIC0gZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHJl
c2V0IHRlbXAgYXJyYXlzCisgICAgICAgICAgICBmYWNldFBvcy5sZW5ndGggPSAwOworICAgICAg
ICAgICAgZmFjZXRJbmQubGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGZhY2V0VVYubGVuZ3RoID0g
MDsKKyAgICAgICAgICAgIGZhY2V0Q29sLmxlbmd0aCA9IDA7CisgICAgICAgICAgICAvLyBpdGVy
YXRlIG92ZXIgInNpemUiIGZhY2V0cworICAgICAgICAgICAgdmFyIGZpID0gMDsKKyAgICAgICAg
ICAgIGZvciAodmFyIGogPSBmICogMzsgaiA8IChmICsgc2l6ZSkgKiAzOyBqKyspIHsKKyAgICAg
ICAgICAgICAgICBmYWNldEluZC5wdXNoKGZpKTsKKyAgICAgICAgICAgICAgICB2YXIgaSA9IG1l
c2hJbmRbal07CisgICAgICAgICAgICAgICAgZmFjZXRQb3MucHVzaChtZXNoUG9zW2kgKiAzXSwg
bWVzaFBvc1tpICogMyArIDFdLCBtZXNoUG9zW2kgKiAzICsgMl0pOworICAgICAgICAgICAgICAg
IGlmIChtZXNoVVYpIHsKKyAgICAgICAgICAgICAgICAgICAgZmFjZXRVVi5wdXNoKG1lc2hVVltp
ICogMl0sIG1lc2hVVltpICogMiArIDFdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKG1lc2hDb2wpIHsKKyAgICAgICAgICAgICAgICAgICAgZmFjZXRDb2wucHVzaCht
ZXNoQ29sW2kgKiA0XSwgbWVzaENvbFtpICogNCArIDFdLCBtZXNoQ29sW2kgKiA0ICsgMl0sIG1l
c2hDb2xbaSAqIDQgKyAzXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZp
Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBjcmVhdGUgYSBtb2RlbCBzaGFwZSBm
b3IgZWFjaCBzaW5nbGUgcGFydGljbGUKKyAgICAgICAgICAgIHZhciBpZHggPSB0aGlzLm5iUGFy
dGljbGVzOworICAgICAgICAgICAgdmFyIHNoYXBlID0gdGhpcy5fcG9zVG9TaGFwZShmYWNldFBv
cyk7CisgICAgICAgICAgICB2YXIgc2hhcGVVViA9IHRoaXMuX3V2c1RvU2hhcGVVVihmYWNldFVW
KTsKKyAgICAgICAgICAgIC8vIGNvbXB1dGUgdGhlIGJhcnljZW50ZXIgb2YgdGhlIHNoYXBlCisg
ICAgICAgICAgICBiYXJ5Y2VudGVyLmNvcHlGcm9tRmxvYXRzKDAsIDAsIDApOworICAgICAgICAg
ICAgdmFyIHY7CisgICAgICAgICAgICBmb3IgKHYgPSAwOyB2IDwgc2hhcGUubGVuZ3RoOyB2Kysp
IHsKKyAgICAgICAgICAgICAgICBiYXJ5Y2VudGVyLmFkZEluUGxhY2Uoc2hhcGVbdl0pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYmFyeWNlbnRlci5zY2FsZUluUGxhY2UoMSAvIHNoYXBl
Lmxlbmd0aCk7CisgICAgICAgICAgICAvLyBzaGlmdCB0aGUgc2hhcGUgZnJvbSBpdHMgYmFyeWNl
bnRlciB0byB0aGUgb3JpZ2luCisgICAgICAgICAgICAvLyBhbmQgY29tcHV0ZSB0aGUgQkJveCBy
ZXF1aXJlZCBmb3IgaW50ZXJzZWN0aW9uLgorICAgICAgICAgICAgdmFyIG1pbmltdW0gPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMi
XShJbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5KTsKKyAgICAgICAgICAgIHZhciBtYXhpbXVt
ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0oLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7CisgICAgICAgICAgICBm
b3IgKHYgPSAwOyB2IDwgc2hhcGUubGVuZ3RoOyB2KyspIHsKKyAgICAgICAgICAgICAgICBzaGFw
ZVt2XS5zdWJ0cmFjdEluUGxhY2UoYmFyeWNlbnRlcik7CisgICAgICAgICAgICAgICAgbWluaW11
bS5taW5pbWl6ZUluUGxhY2VGcm9tRmxvYXRzKHNoYXBlW3ZdLngsIHNoYXBlW3ZdLnksIHNoYXBl
W3ZdLnopOworICAgICAgICAgICAgICAgIG1heGltdW0ubWF4aW1pemVJblBsYWNlRnJvbUZsb2F0
cyhzaGFwZVt2XS54LCBzaGFwZVt2XS55LCBzaGFwZVt2XS56KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBiSW5mbzsKKyAgICAgICAgICAgIGlmICh0aGlzLl9wYXJ0aWNsZXNJbnRl
cnNlY3QpIHsKKyAgICAgICAgICAgICAgICBiSW5mbyA9IG5ldyBfQ3VsbGluZ19ib3VuZGluZ0lu
Zm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQm91bmRpbmdJbmZvIl0obWluaW11bSwg
bWF4aW11bSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbW9kZWxTaGFwZSA9IG5l
dyBfc29saWRQYXJ0aWNsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJNb2RlbFNoYXBl
Il0odGhpcy5fc2hhcGVDb3VudGVyLCBzaGFwZSwgc2l6ZSAqIDMsIHNoYXBlVVYsIG51bGwsIG51
bGwpOworICAgICAgICAgICAgLy8gYWRkIHRoZSBwYXJ0aWNsZSBpbiB0aGUgU1BTCisgICAgICAg
ICAgICB2YXIgY3VycmVudFBvcyA9IHRoaXMuX3Bvc2l0aW9ucy5sZW5ndGg7CisgICAgICAgICAg
ICB2YXIgY3VycmVudEluZCA9IHRoaXMuX2luZGljZXMubGVuZ3RoOworICAgICAgICAgICAgdGhp
cy5fbWVzaEJ1aWxkZXIodGhpcy5faW5kZXgsIHNoYXBlLCB0aGlzLl9wb3NpdGlvbnMsIGZhY2V0
SW5kLCB0aGlzLl9pbmRpY2VzLCBmYWNldFVWLCB0aGlzLl91dnMsIGZhY2V0Q29sLCB0aGlzLl9j
b2xvcnMsIG1lc2hOb3IsIHRoaXMuX25vcm1hbHMsIGlkeCwgMCwgbnVsbCk7CisgICAgICAgICAg
ICB0aGlzLl9hZGRQYXJ0aWNsZShpZHgsIGN1cnJlbnRQb3MsIGN1cnJlbnRJbmQsIG1vZGVsU2hh
cGUsIHRoaXMuX3NoYXBlQ291bnRlciwgMCwgYkluZm8pOworICAgICAgICAgICAgLy8gaW5pdGlh
bGl6ZSB0aGUgcGFydGljbGUgcG9zaXRpb24KKyAgICAgICAgICAgIHRoaXMucGFydGljbGVzW3Ro
aXMubmJQYXJ0aWNsZXNdLnBvc2l0aW9uLmFkZEluUGxhY2UoYmFyeWNlbnRlcik7CisgICAgICAg
ICAgICB0aGlzLl9pbmRleCArPSBzaGFwZS5sZW5ndGg7CisgICAgICAgICAgICBpZHgrKzsKKyAg
ICAgICAgICAgIHRoaXMubmJQYXJ0aWNsZXMrKzsKKyAgICAgICAgICAgIHRoaXMuX3NoYXBlQ291
bnRlcisrOworICAgICAgICAgICAgZiArPSBzaXplOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLy8gdW5yb3RhdGUgdGhlIGZpeGVkIG5vcm1hbHMgaW4gY2Fz
ZSB0aGUgbWVzaCB3YXMgYnVpbHQgd2l0aCBwcmUtcm90YXRlZCBwYXJ0aWNsZXMsIGV4IDogdXNl
IG9mIHBvc2l0aW9uRnVuY3Rpb24gaW4gYWRkU2hhcGUoKQorICAgIFNvbGlkUGFydGljbGVTeXN0
ZW0ucHJvdG90eXBlLl91bnJvdGF0ZUZpeGVkTm9ybWFscyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIGluZGV4ID0gMDsKKyAgICAgICAgdmFyIGlkeCA9IDA7CisgICAgICAgIHZhciB0bXBO
b3JtYWwgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VG1wVmVjdG9ycyJdLlZlY3RvcjNbMF07CisgICAgICAgIHZhciBxdWF0ZXJuaW9uID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRtcFZlY3RvcnMiXS5R
dWF0ZXJuaW9uWzBdOworICAgICAgICB2YXIgaW52ZXJ0ZWRSb3RNYXRyaXggPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLk1hdHJp
eFswXTsKKyAgICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCB0aGlzLnBhcnRpY2xlcy5sZW5ndGg7
IHArKykgeworICAgICAgICAgICAgdmFyIHBhcnRpY2xlID0gdGhpcy5wYXJ0aWNsZXNbcF07Cisg
ICAgICAgICAgICB2YXIgc2hhcGUgPSBwYXJ0aWNsZS5fbW9kZWwuX3NoYXBlOworICAgICAgICAg
ICAgLy8gY29tcHV0aW5nIHRoZSBpbnZlcnNlIG9mIHRoZSByb3RhdGlvbiBtYXRyaXggZnJvbSB0
aGUgcXVhdGVybmlvbgorICAgICAgICAgICAgLy8gaXMgZXF1aXZhbGVudCB0byBjb21wdXRpbmcg
dGhlIG1hdHJpeCBvZiB0aGUgaW52ZXJzZSBxdWF0ZXJuaW9uLCBpLmUgb2YgdGhlIGNvbmp1Z2F0
ZSBxdWF0ZXJuaW9uCisgICAgICAgICAgICBpZiAocGFydGljbGUucm90YXRpb25RdWF0ZXJuaW9u
KSB7CisgICAgICAgICAgICAgICAgcGFydGljbGUucm90YXRpb25RdWF0ZXJuaW9uLmNvbmp1Z2F0
ZVRvUmVmKHF1YXRlcm5pb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHJvdGF0aW9uID0gcGFydGljbGUucm90YXRpb247CisgICAgICAg
ICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlF1YXRlcm5pb24iXS5Sb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKHJvdGF0aW9uLnksIHJvdGF0
aW9uLngsIHJvdGF0aW9uLnosIHF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgIHF1YXRlcm5p
b24uY29uanVnYXRlSW5QbGFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcXVhdGVy
bmlvbi50b1JvdGF0aW9uTWF0cml4KGludmVydGVkUm90TWF0cml4KTsKKyAgICAgICAgICAgIGZv
ciAodmFyIHB0ID0gMDsgcHQgPCBzaGFwZS5sZW5ndGg7IHB0KyspIHsKKyAgICAgICAgICAgICAg
ICBpZHggPSBpbmRleCArIHB0ICogMzsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1h
bEZyb21GbG9hdHNUb1JlZih0aGlzLl9ub3JtYWxzMzJbaWR4XSwgdGhpcy5fbm9ybWFsczMyW2lk
eCArIDFdLCB0aGlzLl9ub3JtYWxzMzJbaWR4ICsgMl0sIGludmVydGVkUm90TWF0cml4LCB0bXBO
b3JtYWwpOworICAgICAgICAgICAgICAgIHRtcE5vcm1hbC50b0FycmF5KHRoaXMuX2ZpeGVkTm9y
bWFsMzIsIGlkeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IGlkeCArIDM7
CisgICAgICAgIH0KKyAgICB9OworICAgIC8vcmVzZXQgY29weQorICAgIFNvbGlkUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLl9yZXNldENvcHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBj
b3B5ID0gdGhpcy5fY29weTsKKyAgICAgICAgY29weS5wb3NpdGlvbi5zZXRBbGwoMCk7CisgICAg
ICAgIGNvcHkucm90YXRpb24uc2V0QWxsKDApOworICAgICAgICBjb3B5LnJvdGF0aW9uUXVhdGVy
bmlvbiA9IG51bGw7CisgICAgICAgIGNvcHkuc2NhbGluZy5zZXRBbGwoMSk7CisgICAgICAgIGNv
cHkudXZzLmNvcHlGcm9tRmxvYXRzKDAuMCwgMC4wLCAxLjAsIDEuMCk7CisgICAgICAgIGNvcHku
Y29sb3IgPSBudWxsOworICAgICAgICBjb3B5LnRyYW5zbGF0ZUZyb21QaXZvdCA9IGZhbHNlOwor
ICAgIH07CisgICAgLy8gX21lc2hCdWlsZGVyIDogaW5zZXJ0cyB0aGUgc2hhcGUgbW9kZWwgaW4g
dGhlIGdsb2JhbCBTUFMgbWVzaAorICAgIFNvbGlkUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9t
ZXNoQnVpbGRlciA9IGZ1bmN0aW9uIChwLCBzaGFwZSwgcG9zaXRpb25zLCBtZXNoSW5kLCBpbmRp
Y2VzLCBtZXNoVVYsIHV2cywgbWVzaENvbCwgY29sb3JzLCBtZXNoTm9yLCBub3JtYWxzLCBpZHgs
IGlkeEluU2hhcGUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIHZhciB1ID0g
MDsKKyAgICAgICAgdmFyIGMgPSAwOworICAgICAgICB2YXIgbiA9IDA7CisgICAgICAgIHRoaXMu
X3Jlc2V0Q29weSgpOworICAgICAgICB2YXIgY29weSA9IHRoaXMuX2NvcHk7CisgICAgICAgIGNv
cHkuaWR4ID0gaWR4OworICAgICAgICBjb3B5LmlkeEluU2hhcGUgPSBpZHhJblNoYXBlOworICAg
ICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBvc2l0aW9uRnVuY3Rpb24pIHsgLy8gY2FsbCB0
byBjdXN0b20gcG9zaXRpb25GdW5jdGlvbgorICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvbkZ1
bmN0aW9uKGNvcHksIGlkeCwgaWR4SW5TaGFwZSk7CisgICAgICAgICAgICB0aGlzLl9tdXN0VW5y
b3RhdGVGaXhlZE5vcm1hbHMgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHZhciByb3RNYXRy
aXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1w
VmVjdG9ycyJdLk1hdHJpeFswXTsKKyAgICAgICAgdmFyIHRtcFZlcnRleCA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uVmVjdG9y
M1swXTsKKyAgICAgICAgdmFyIHRtcFJvdGF0ZWQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMV07CisgICAgICAg
IHZhciBwaXZvdEJhY2tUcmFuc2xhdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1syXTsKKyAgICAgICAgdmFy
IHNjYWxlZFBpdm90ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzNdOworICAgICAgICBjb3B5LmdldFJvdGF0aW9u
TWF0cml4KHJvdE1hdHJpeCk7CisgICAgICAgIGNvcHkucGl2b3QubXVsdGlwbHlUb1JlZihjb3B5
LnNjYWxpbmcsIHNjYWxlZFBpdm90KTsKKyAgICAgICAgaWYgKGNvcHkudHJhbnNsYXRlRnJvbVBp
dm90KSB7CisgICAgICAgICAgICBwaXZvdEJhY2tUcmFuc2xhdGlvbi5zZXRBbGwoMC4wKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBpdm90QmFja1RyYW5zbGF0aW9u
LmNvcHlGcm9tKHNjYWxlZFBpdm90KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgc2hhcGUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRtcFZlcnRleC5jb3B5RnJvbShz
aGFwZVtpXSk7CisgICAgICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnZlcnRleEZ1bmN0
aW9uKSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy52ZXJ0ZXhGdW5jdGlvbihjb3B5LCB0bXBW
ZXJ0ZXgsIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG1wVmVydGV4Lm11bHRpcGx5
SW5QbGFjZShjb3B5LnNjYWxpbmcpLnN1YnRyYWN0SW5QbGFjZShzY2FsZWRQaXZvdCk7CisgICAg
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYodG1wVmVydGV4LCByb3RNYXRyaXgs
IHRtcFJvdGF0ZWQpOworICAgICAgICAgICAgdG1wUm90YXRlZC5hZGRJblBsYWNlKHBpdm90QmFj
a1RyYW5zbGF0aW9uKS5hZGRJblBsYWNlKGNvcHkucG9zaXRpb24pOworICAgICAgICAgICAgcG9z
aXRpb25zLnB1c2godG1wUm90YXRlZC54LCB0bXBSb3RhdGVkLnksIHRtcFJvdGF0ZWQueik7Cisg
ICAgICAgICAgICBpZiAobWVzaFVWKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvcHlVdnMgPSBj
b3B5LnV2czsKKyAgICAgICAgICAgICAgICB1dnMucHVzaCgoY29weVV2cy56IC0gY29weVV2cy54
KSAqIG1lc2hVVlt1XSArIGNvcHlVdnMueCwgKGNvcHlVdnMudyAtIGNvcHlVdnMueSkgKiBtZXNo
VVZbdSArIDFdICsgY29weVV2cy55KTsKKyAgICAgICAgICAgICAgICB1ICs9IDI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoY29weS5jb2xvcikgeworICAgICAgICAgICAgICAgIHRo
aXMuX2NvbG9yID0gY29weS5jb2xvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHRoaXMuX2NvbG9yOworICAgICAgICAgICAg
ICAgIGlmIChtZXNoQ29sICYmIG1lc2hDb2xbY10gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgICAgICAgICBjb2xvci5yID0gbWVzaENvbFtjXTsKKyAgICAgICAgICAgICAgICAgICAgY29s
b3IuZyA9IG1lc2hDb2xbYyArIDFdOworICAgICAgICAgICAgICAgICAgICBjb2xvci5iID0gbWVz
aENvbFtjICsgMl07CisgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEgPSBtZXNoQ29sW2MgKyAz
XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbG9yLnIgPSAxLjA7CisgICAgICAgICAgICAgICAgICAgIGNvbG9yLmcgPSAx
LjA7CisgICAgICAgICAgICAgICAgICAgIGNvbG9yLmIgPSAxLjA7CisgICAgICAgICAgICAgICAg
ICAgIGNvbG9yLmEgPSAxLjA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY29sb3JzLnB1c2godGhpcy5fY29sb3IuciwgdGhpcy5fY29sb3IuZywgdGhpcy5f
Y29sb3IuYiwgdGhpcy5fY29sb3IuYSk7CisgICAgICAgICAgICBjICs9IDQ7CisgICAgICAgICAg
ICBpZiAoIXRoaXMucmVjb21wdXRlTm9ybWFscyAmJiBtZXNoTm9yKSB7CisgICAgICAgICAgICAg
ICAgdG1wVmVydGV4LnggPSBtZXNoTm9yW25dOworICAgICAgICAgICAgICAgIHRtcFZlcnRleC55
ID0gbWVzaE5vcltuICsgMV07CisgICAgICAgICAgICAgICAgdG1wVmVydGV4LnogPSBtZXNoTm9y
W24gKyAyXTsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKHRtcFZlcnRl
eCwgcm90TWF0cml4LCB0bXBWZXJ0ZXgpOworICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaCh0
bXBWZXJ0ZXgueCwgdG1wVmVydGV4LnksIHRtcFZlcnRleC56KTsKKyAgICAgICAgICAgICAgICBu
ICs9IDM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8
IG1lc2hJbmQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjdXJyZW50X2luZCA9IHAg
KyBtZXNoSW5kW2ldOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGN1cnJlbnRfaW5kKTsKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50X2luZCA+IDY1NTM1KSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fbmVlZHMzMkJpdHMgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9waWNrYWJsZSkgeworICAgICAgICAgICAgdmFyIG5iZmFjZXMgPSBtZXNoSW5k
Lmxlbmd0aCAvIDM7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmJmYWNlczsgaSsrKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5waWNrZWRQYXJ0aWNsZXMucHVzaCh7IGlkeDogaWR4LCBm
YWNlSWQ6IGkgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X2RlcHRoU29ydCkgeworICAgICAgICAgICAgdGhpcy5kZXB0aFNvcnRlZFBhcnRpY2xlcy5wdXNo
KG5ldyBfc29saWRQYXJ0aWNsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJEZXB0aFNv
cnRlZFBhcnRpY2xlIl0oKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAg
fTsKKyAgICAvLyByZXR1cm5zIGEgc2hhcGUgYXJyYXkgZnJvbSBwb3NpdGlvbnMgYXJyYXkKKyAg
ICBTb2xpZFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5fcG9zVG9TaGFwZSA9IGZ1bmN0aW9uIChw
b3NpdGlvbnMpIHsKKyAgICAgICAgdmFyIHNoYXBlID0gW107CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSArPSAzKSB7CisgICAgICAgICAgICBzaGFwZS5w
dXNoKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0
b3IzIl0uRnJvbUFycmF5KHBvc2l0aW9ucywgaSkpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBzaGFwZTsKKyAgICB9OworICAgIC8vIHJldHVybnMgYSBzaGFwZVVWIGFycmF5IGZyb20gYSBW
ZWN0b3I0IHV2cworICAgIFNvbGlkUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl91dnNUb1NoYXBl
VVYgPSBmdW5jdGlvbiAodXZzKSB7CisgICAgICAgIHZhciBzaGFwZVVWID0gW107CisgICAgICAg
IGlmICh1dnMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXZzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgc2hhcGVVVi5wdXNoKHV2c1tpXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNoYXBlVVY7CisgICAgfTsKKyAgICAvLyBh
ZGRzIGEgbmV3IHBhcnRpY2xlIG9iamVjdCBpbiB0aGUgcGFydGljbGVzIGFycmF5CisgICAgU29s
aWRQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX2FkZFBhcnRpY2xlID0gZnVuY3Rpb24gKGlkeCwg
aWR4cG9zLCBpZHhpbmQsIG1vZGVsLCBzaGFwZUlkLCBpZHhJblNoYXBlLCBiSW5mbykgeworICAg
ICAgICBpZiAoYkluZm8gPT09IHZvaWQgMCkgeyBiSW5mbyA9IG51bGw7IH0KKyAgICAgICAgdmFy
IHNwID0gbmV3IF9zb2xpZFBhcnRpY2xlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlNv
bGlkUGFydGljbGUiXShpZHgsIGlkeHBvcywgaWR4aW5kLCBtb2RlbCwgc2hhcGVJZCwgaWR4SW5T
aGFwZSwgdGhpcywgYkluZm8pOworICAgICAgICB0aGlzLnBhcnRpY2xlcy5wdXNoKHNwKTsKKyAg
ICAgICAgcmV0dXJuIHNwOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBzb21lIHBhcnRp
Y2xlcyB0byB0aGUgU1BTIGZyb20gdGhlIG1vZGVsIHNoYXBlLiBSZXR1cm5zIHRoZSBzaGFwZSBp
ZC4KKyAgICAgKiBQbGVhc2UgcmVhZCB0aGUgZG9jIDogaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9Tb2xpZF9QYXJ0aWNsZV9TeXN0ZW0jY3JlYXRlLWFuLWltbXV0YWJsZS1zcHMKKyAg
ICAgKiBAcGFyYW0gbWVzaCBpcyBhbnkgTWVzaCBvYmplY3QgdGhhdCB3aWxsIGJlIHVzZWQgYXMg
YSBtb2RlbCBmb3IgdGhlIHNvbGlkIHBhcnRpY2xlcy4KKyAgICAgKiBAcGFyYW0gbmIgKHBvc2l0
aXZlIGludGVnZXIpIHRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRvIGJlIGNyZWF0ZWQgZnJvbSB0
aGlzIG1vZGVsCisgICAgICogQHBhcmFtIG9wdGlvbnMge3Bvc2l0aW9uRnVuY3Rpb259IGlzIGFu
IG9wdGlvbmFsIGphdmFzY3JpcHQgZnVuY3Rpb24gdG8gY2FsbGVkIGZvciBlYWNoIHBhcnRpY2xl
IG9uIFNQUyBjcmVhdGlvbi4KKyAgICAgKiB7dmVydGV4RnVuY3Rpb259IGlzIGFuIG9wdGlvbmFs
IGphdmFzY3JpcHQgZnVuY3Rpb24gdG8gY2FsbGVkIGZvciBlYWNoIHZlcnRleCBvZiBlYWNoIHBh
cnRpY2xlIG9uIFNQUyBjcmVhdGlvbgorICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2hh
cGVzIGluIHRoZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlU3lzdGVtLnByb3Rv
dHlwZS5hZGRTaGFwZSA9IGZ1bmN0aW9uIChtZXNoLCBuYiwgb3B0aW9ucykgeworICAgICAgICB2
YXIgbWVzaFBvcyA9IG1lc2guZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7CisgICAg
ICAgIHZhciBtZXNoSW5kID0gbWVzaC5nZXRJbmRpY2VzKCk7CisgICAgICAgIHZhciBtZXNoVVYg
PSBtZXNoLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICB2YXIgbWVzaENvbCA9
IG1lc2guZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCk7CisgICAgICAgIHZhciBtZXNoTm9y
ID0gbWVzaC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAgIHZhciBiYklu
Zm87CisgICAgICAgIGlmICh0aGlzLl9wYXJ0aWNsZXNJbnRlcnNlY3QpIHsKKyAgICAgICAgICAg
IGJiSW5mbyA9IG1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHNoYXBlID0gdGhpcy5fcG9zVG9TaGFwZShtZXNoUG9zKTsKKyAgICAgICAgdmFyIHNoYXBlVVYg
PSB0aGlzLl91dnNUb1NoYXBlVVYobWVzaFVWKTsKKyAgICAgICAgdmFyIHBvc2Z1bmMgPSBvcHRp
b25zID8gb3B0aW9ucy5wb3NpdGlvbkZ1bmN0aW9uIDogbnVsbDsKKyAgICAgICAgdmFyIHZ0eGZ1
bmMgPSBvcHRpb25zID8gb3B0aW9ucy52ZXJ0ZXhGdW5jdGlvbiA6IG51bGw7CisgICAgICAgIHZh
ciBtb2RlbFNoYXBlID0gbmV3IF9zb2xpZFBhcnRpY2xlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIk1vZGVsU2hhcGUiXSh0aGlzLl9zaGFwZUNvdW50ZXIsIHNoYXBlLCBtZXNoSW5kLmxl
bmd0aCwgc2hhcGVVViwgcG9zZnVuYywgdnR4ZnVuYyk7CisgICAgICAgIC8vIHBhcnRpY2xlcwor
ICAgICAgICB2YXIgc3A7CisgICAgICAgIHZhciBjdXJyZW50Q29weTsKKyAgICAgICAgdmFyIGlk
eCA9IHRoaXMubmJQYXJ0aWNsZXM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmI7IGkr
KykgeworICAgICAgICAgICAgdmFyIGN1cnJlbnRQb3MgPSB0aGlzLl9wb3NpdGlvbnMubGVuZ3Ro
OworICAgICAgICAgICAgdmFyIGN1cnJlbnRJbmQgPSB0aGlzLl9pbmRpY2VzLmxlbmd0aDsKKyAg
ICAgICAgICAgIGN1cnJlbnRDb3B5ID0gdGhpcy5fbWVzaEJ1aWxkZXIodGhpcy5faW5kZXgsIHNo
YXBlLCB0aGlzLl9wb3NpdGlvbnMsIG1lc2hJbmQsIHRoaXMuX2luZGljZXMsIG1lc2hVViwgdGhp
cy5fdXZzLCBtZXNoQ29sLCB0aGlzLl9jb2xvcnMsIG1lc2hOb3IsIHRoaXMuX25vcm1hbHMsIGlk
eCwgaSwgb3B0aW9ucyk7CisgICAgICAgICAgICBpZiAodGhpcy5fdXBkYXRhYmxlKSB7CisgICAg
ICAgICAgICAgICAgc3AgPSB0aGlzLl9hZGRQYXJ0aWNsZShpZHgsIGN1cnJlbnRQb3MsIGN1cnJl
bnRJbmQsIG1vZGVsU2hhcGUsIHRoaXMuX3NoYXBlQ291bnRlciwgaSwgYmJJbmZvKTsKKyAgICAg
ICAgICAgICAgICBzcC5wb3NpdGlvbi5jb3B5RnJvbShjdXJyZW50Q29weS5wb3NpdGlvbik7Cisg
ICAgICAgICAgICAgICAgc3Aucm90YXRpb24uY29weUZyb20oY3VycmVudENvcHkucm90YXRpb24p
OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29weS5yb3RhdGlvblF1YXRlcm5pb24gJiYg
c3Aucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHNwLnJvdGF0aW9u
UXVhdGVybmlvbi5jb3B5RnJvbShjdXJyZW50Q29weS5yb3RhdGlvblF1YXRlcm5pb24pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvcHkuY29sb3IgJiYg
c3AuY29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgc3AuY29sb3IuY29weUZyb20oY3VycmVu
dENvcHkuY29sb3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcC5zY2Fs
aW5nLmNvcHlGcm9tKGN1cnJlbnRDb3B5LnNjYWxpbmcpOworICAgICAgICAgICAgICAgIHNwLnV2
cy5jb3B5RnJvbShjdXJyZW50Q29weS51dnMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5faW5kZXggKz0gc2hhcGUubGVuZ3RoOworICAgICAgICAgICAgaWR4Kys7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5uYlBhcnRpY2xlcyArPSBuYjsKKyAgICAgICAgdGhpcy5fc2hhcGVD
b3VudGVyKys7CisgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZUNvdW50ZXIgLSAxOworICAgIH07
CisgICAgLy8gcmVidWlsZHMgYSBwYXJ0aWNsZSBiYWNrIHRvIGl0cyBqdXN0IGJ1aWx0IHN0YXR1
cyA6IGlmIG5lZWRlZCwgcmVjb21wdXRlcyB0aGUgY3VzdG9tIHBvc2l0aW9ucyBhbmQgdmVydGlj
ZXMKKyAgICBTb2xpZFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5fcmVidWlsZFBhcnRpY2xlID0g
ZnVuY3Rpb24gKHBhcnRpY2xlKSB7CisgICAgICAgIHRoaXMuX3Jlc2V0Q29weSgpOworICAgICAg
ICB2YXIgY29weSA9IHRoaXMuX2NvcHk7CisgICAgICAgIGlmIChwYXJ0aWNsZS5fbW9kZWwuX3Bv
c2l0aW9uRnVuY3Rpb24pIHsgLy8gcmVjYWxsIHRvIHN0b3JlZCBjdXN0b20gcG9zaXRpb25GdW5j
dGlvbgorICAgICAgICAgICAgcGFydGljbGUuX21vZGVsLl9wb3NpdGlvbkZ1bmN0aW9uKGNvcHks
IHBhcnRpY2xlLmlkeCwgcGFydGljbGUuaWR4SW5TaGFwZSk7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIHJvdE1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdOworICAgICAgICB2YXIgdG1wVmVydGV4ID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRtcFZlY3Rv
cnMiXS5WZWN0b3IzWzBdOworICAgICAgICB2YXIgdG1wUm90YXRlZCA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1sx
XTsKKyAgICAgICAgdmFyIHBpdm90QmFja1RyYW5zbGF0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzJdOwor
ICAgICAgICB2YXIgc2NhbGVkUGl2b3QgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbM107CisgICAgICAgIGNvcHku
Z2V0Um90YXRpb25NYXRyaXgocm90TWF0cml4KTsKKyAgICAgICAgcGFydGljbGUucGl2b3QubXVs
dGlwbHlUb1JlZihwYXJ0aWNsZS5zY2FsaW5nLCBzY2FsZWRQaXZvdCk7CisgICAgICAgIGlmIChj
b3B5LnRyYW5zbGF0ZUZyb21QaXZvdCkgeworICAgICAgICAgICAgcGl2b3RCYWNrVHJhbnNsYXRp
b24uY29weUZyb21GbG9hdHMoMC4wLCAwLjAsIDAuMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBwaXZvdEJhY2tUcmFuc2xhdGlvbi5jb3B5RnJvbShzY2FsZWRQaXZv
dCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNoYXBlID0gcGFydGljbGUuX21vZGVsLl9zaGFw
ZTsKKyAgICAgICAgZm9yICh2YXIgcHQgPSAwOyBwdCA8IHNoYXBlLmxlbmd0aDsgcHQrKykgewor
ICAgICAgICAgICAgdG1wVmVydGV4LmNvcHlGcm9tKHNoYXBlW3B0XSk7CisgICAgICAgICAgICBp
ZiAocGFydGljbGUuX21vZGVsLl92ZXJ0ZXhGdW5jdGlvbikgeworICAgICAgICAgICAgICAgIHBh
cnRpY2xlLl9tb2RlbC5fdmVydGV4RnVuY3Rpb24oY29weSwgdG1wVmVydGV4LCBwdCk7IC8vIHJl
Y2FsbCB0byBzdG9yZWQgdmVydGV4RnVuY3Rpb24KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRtcFZlcnRleC5tdWx0aXBseUluUGxhY2UoY29weS5zY2FsaW5nKS5zdWJ0cmFjdEluUGxhY2Uo
c2NhbGVkUGl2b3QpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHRt
cFZlcnRleCwgcm90TWF0cml4LCB0bXBSb3RhdGVkKTsKKyAgICAgICAgICAgIHRtcFJvdGF0ZWQu
YWRkSW5QbGFjZShwaXZvdEJhY2tUcmFuc2xhdGlvbikuYWRkSW5QbGFjZShjb3B5LnBvc2l0aW9u
KS50b0FycmF5KHRoaXMuX3Bvc2l0aW9uczMyLCBwYXJ0aWNsZS5fcG9zICsgcHQgKiAzKTsKKyAg
ICAgICAgfQorICAgICAgICBwYXJ0aWNsZS5wb3NpdGlvbi5zZXRBbGwoMC4wKTsKKyAgICAgICAg
cGFydGljbGUucm90YXRpb24uc2V0QWxsKDAuMCk7CisgICAgICAgIHBhcnRpY2xlLnJvdGF0aW9u
UXVhdGVybmlvbiA9IG51bGw7CisgICAgICAgIHBhcnRpY2xlLnNjYWxpbmcuc2V0QWxsKDEuMCk7
CisgICAgICAgIHBhcnRpY2xlLnV2cy5zZXRBbGwoMC4wKTsKKyAgICAgICAgcGFydGljbGUucGl2
b3Quc2V0QWxsKDAuMCk7CisgICAgICAgIHBhcnRpY2xlLnRyYW5zbGF0ZUZyb21QaXZvdCA9IGZh
bHNlOworICAgICAgICBwYXJ0aWNsZS5wYXJlbnRJZCA9IG51bGw7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZWJ1aWxkcyB0aGUgd2hvbGUgbWVzaCBhbmQgdXBkYXRlcyB0aGUgVkJPIDogY3Vz
dG9tIHBvc2l0aW9ucyBhbmQgdmVydGljZXMgYXJlIHJlY29tcHV0ZWQgaWYgbmVlZGVkLgorICAg
ICAqIEByZXR1cm5zIHRoZSBTUFMuCisgICAgICovCisgICAgU29saWRQYXJ0aWNsZVN5c3RlbS5w
cm90b3R5cGUucmVidWlsZE1lc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFyIHAg
PSAwOyBwIDwgdGhpcy5wYXJ0aWNsZXMubGVuZ3RoOyBwKyspIHsKKyAgICAgICAgICAgIHRoaXMu
X3JlYnVpbGRQYXJ0aWNsZSh0aGlzLnBhcnRpY2xlc1twXSk7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5tZXNoLnVwZGF0ZVZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHRoaXMuX3Bvc2l0
aW9uczMyLCBmYWxzZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAg
IC8qKgorICAgICAqICBTZXRzIGFsbCB0aGUgcGFydGljbGVzIDogdGhpcyBtZXRob2QgYWN0dWFs
bHkgcmVhbGx5IHVwZGF0ZXMgdGhlIG1lc2ggYWNjb3JkaW5nIHRvIHRoZSBwYXJ0aWNsZSBwb3Np
dGlvbnMsIHJvdGF0aW9ucywgY29sb3JzLCB0ZXh0dXJlcywgZXRjLgorICAgICAqICBUaGlzIG1l
dGhvZCBjYWxscyBgdXBkYXRlUGFydGljbGUoKWAgZm9yIGVhY2ggcGFydGljbGUgb2YgdGhlIFNQ
Uy4KKyAgICAgKiAgRm9yIGFuIGFuaW1hdGVkIFNQUywgaXQgaXMgdXN1YWxseSBjYWxsZWQgd2l0
aGluIHRoZSByZW5kZXIgbG9vcC4KKyAgICAgKiBAcGFyYW0gc3RhcnQgVGhlIHBhcnRpY2xlIGlu
ZGV4IGluIHRoZSBwYXJ0aWNsZSBhcnJheSB3aGVyZSB0byBzdGFydCB0byBjb21wdXRlIHRoZSBw
YXJ0aWNsZSBwcm9wZXJ0eSB2YWx1ZXMgXyhkZWZhdWx0IDApXworICAgICAqIEBwYXJhbSBlbmQg
VGhlIHBhcnRpY2xlIGluZGV4IGluIHRoZSBwYXJ0aWNsZSBhcnJheSB3aGVyZSB0byBzdG9wIHRv
IGNvbXB1dGUgdGhlIHBhcnRpY2xlIHByb3BlcnR5IHZhbHVlcyBfKGRlZmF1bHQgbmJQYXJ0aWNs
ZSAtIDEpXworICAgICAqIEBwYXJhbSB1cGRhdGUgSWYgdGhlIG1lc2ggbXVzdCBiZSBmaW5hbGx5
IHVwZGF0ZWQgb24gdGhpcyBjYWxsIGFmdGVyIGFsbCB0aGUgcGFydGljbGUgY29tcHV0YXRpb25z
IF8oZGVmYXVsdCB0cnVlKV8KKyAgICAgKiBAcmV0dXJucyB0aGUgU1BTLgorICAgICAqLworICAg
IFNvbGlkUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLnNldFBhcnRpY2xlcyA9IGZ1bmN0aW9uIChz
dGFydCwgZW5kLCB1cGRhdGUpIHsKKyAgICAgICAgaWYgKHN0YXJ0ID09PSB2b2lkIDApIHsgc3Rh
cnQgPSAwOyB9CisgICAgICAgIGlmIChlbmQgPT09IHZvaWQgMCkgeyBlbmQgPSB0aGlzLm5iUGFy
dGljbGVzIC0gMTsgfQorICAgICAgICBpZiAodXBkYXRlID09PSB2b2lkIDApIHsgdXBkYXRlID0g
dHJ1ZTsgfQorICAgICAgICBpZiAoIXRoaXMuX3VwZGF0YWJsZSkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgLy8gY3VzdG9tIGJlZm9yZVVwZGF0ZQorICAg
ICAgICB0aGlzLmJlZm9yZVVwZGF0ZVBhcnRpY2xlcyhzdGFydCwgZW5kLCB1cGRhdGUpOworICAg
ICAgICB2YXIgcm90TWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF07CisgICAgICAgIHZhciBpbnZlcnRl
ZE1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJUbXBWZWN0b3JzIl0uTWF0cml4WzFdOworICAgICAgICB2YXIgbWVzaCA9IHRoaXMubWVzaDsK
KyAgICAgICAgdmFyIGNvbG9yczMyID0gdGhpcy5fY29sb3JzMzI7CisgICAgICAgIHZhciBwb3Np
dGlvbnMzMiA9IHRoaXMuX3Bvc2l0aW9uczMyOworICAgICAgICB2YXIgbm9ybWFsczMyID0gdGhp
cy5fbm9ybWFsczMyOworICAgICAgICB2YXIgdXZzMzIgPSB0aGlzLl91dnMzMjsKKyAgICAgICAg
dmFyIGluZGljZXMzMiA9IHRoaXMuX2luZGljZXMzMjsKKyAgICAgICAgdmFyIGluZGljZXMgPSB0
aGlzLl9pbmRpY2VzOworICAgICAgICB2YXIgZml4ZWROb3JtYWwzMiA9IHRoaXMuX2ZpeGVkTm9y
bWFsMzI7CisgICAgICAgIHZhciB0ZW1wVmVjdG9ycyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yMzsKKyAgICAgICAg
dmFyIGNhbUF4aXNYID0gdGVtcFZlY3RvcnNbNV0uY29weUZyb21GbG9hdHMoMS4wLCAwLjAsIDAu
MCk7CisgICAgICAgIHZhciBjYW1BeGlzWSA9IHRlbXBWZWN0b3JzWzZdLmNvcHlGcm9tRmxvYXRz
KDAuMCwgMS4wLCAwLjApOworICAgICAgICB2YXIgY2FtQXhpc1ogPSB0ZW1wVmVjdG9yc1s3XS5j
b3B5RnJvbUZsb2F0cygwLjAsIDAuMCwgMS4wKTsKKyAgICAgICAgdmFyIG1pbmltdW0gPSB0ZW1w
VmVjdG9yc1s4XS5zZXRBbGwoTnVtYmVyLk1BWF9WQUxVRSk7CisgICAgICAgIHZhciBtYXhpbXVt
ID0gdGVtcFZlY3RvcnNbOV0uc2V0QWxsKC1OdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICAgICAgdmFy
IGNhbUludmVydGVkUG9zaXRpb24gPSB0ZW1wVmVjdG9yc1sxMF0uc2V0QWxsKDApOworICAgICAg
ICAvLyBjYXNlcyB3aGVuIHRoZSBXb3JsZCBNYXRyaXggaXMgdG8gYmUgY29tcHV0ZWQgZmlyc3QK
KyAgICAgICAgaWYgKHRoaXMuYmlsbGJvYXJkIHx8IHRoaXMuX2RlcHRoU29ydCkgeworICAgICAg
ICAgICAgdGhpcy5tZXNoLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAgICAgICAgICAgIHRo
aXMubWVzaC5fd29ybGRNYXRyaXguaW52ZXJ0VG9SZWYoaW52ZXJ0ZWRNYXRyaXgpOworICAgICAg
ICB9CisgICAgICAgIC8vIGlmIHRoZSBwYXJ0aWNsZXMgd2lsbCBhbHdheXMgZmFjZSB0aGUgY2Ft
ZXJhCisgICAgICAgIGlmICh0aGlzLmJpbGxib2FyZCkgeworICAgICAgICAgICAgLy8gY29tcHV0
ZSB0aGUgY2FtZXJhIHBvc2l0aW9uIGFuZCB1bi1yb3RhdGUgaXQgYnkgdGhlIGN1cnJlbnQgbWVz
aCByb3RhdGlvbgorICAgICAgICAgICAgdmFyIHRtcFZlcnRleCA9IHRlbXBWZWN0b3JzWzBdOwor
ICAgICAgICAgICAgdGhpcy5fY2FtZXJhLmdldERpcmVjdGlvblRvUmVmKF9NYXRoc19tYXRoX2F4
aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQXhpcyJdLlosIHRtcFZlcnRleCk7Cisg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKHRtcFZlcnRleCwgaW52ZXJ0ZWRNYXRy
aXgsIGNhbUF4aXNaKTsKKyAgICAgICAgICAgIGNhbUF4aXNaLm5vcm1hbGl6ZSgpOworICAgICAg
ICAgICAgLy8gc2FtZSBmb3IgY2FtZXJhIHVwIHZlY3RvciBleHRyYWN0ZWQgZnJvbSB0aGUgY2Ft
IHZpZXcgbWF0cml4CisgICAgICAgICAgICB2YXIgdmlldyA9IHRoaXMuX2NhbWVyYS5nZXRWaWV3
TWF0cml4KHRydWUpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWxGcm9tRmxvYXRzVG9S
ZWYodmlldy5tWzFdLCB2aWV3Lm1bNV0sIHZpZXcubVs5XSwgaW52ZXJ0ZWRNYXRyaXgsIGNhbUF4
aXNZKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZihjYW1BeGlzWSwgY2FtQXhpc1osIGNhbUF4
aXNYKTsKKyAgICAgICAgICAgIGNhbUF4aXNZLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgY2Ft
QXhpc1gubm9ybWFsaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gaWYgZGVwdGhTb3J0LCBj
b21wdXRlIHRoZSBjYW1lcmEgZ2xvYmFsIHBvc2l0aW9uIGluIHRoZSBtZXNoIGxvY2FsIHN5c3Rl
bQorICAgICAgICBpZiAodGhpcy5fZGVwdGhTb3J0KSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9y
bUNvb3JkaW5hdGVzVG9SZWYodGhpcy5fY2FtZXJhLmdsb2JhbFBvc2l0aW9uLCBpbnZlcnRlZE1h
dHJpeCwgY2FtSW52ZXJ0ZWRQb3NpdGlvbik7IC8vIHRoZW4gdW4tcm90YXRlIHRoZSBjYW1lcmEK
KyAgICAgICAgfQorICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siTWF0cml4Il0uSWRlbnRpdHlUb1JlZihyb3RNYXRyaXgpOworICAgICAgICB2
YXIgaWR4ID0gMDsgLy8gY3VycmVudCBwb3NpdGlvbiBpbmRleCBpbiB0aGUgZ2xvYmFsIGFycmF5
IHBvc2l0aW9uczMyCisgICAgICAgIHZhciBpbmRleCA9IDA7IC8vIHBvc2l0aW9uIHN0YXJ0IGlu
ZGV4IGluIHRoZSBnbG9iYWwgYXJyYXkgcG9zaXRpb25zMzIgb2YgdGhlIGN1cnJlbnQgcGFydGlj
bGUKKyAgICAgICAgdmFyIGNvbGlkeCA9IDA7IC8vIGN1cnJlbnQgY29sb3IgaW5kZXggaW4gdGhl
IGdsb2JhbCBhcnJheSBjb2xvcnMzMgorICAgICAgICB2YXIgY29sb3JJbmRleCA9IDA7IC8vIGNv
bG9yIHN0YXJ0IGluZGV4IGluIHRoZSBnbG9iYWwgYXJyYXkgY29sb3JzMzIgb2YgdGhlIGN1cnJl
bnQgcGFydGljbGUKKyAgICAgICAgdmFyIHV2aWR4ID0gMDsgLy8gY3VycmVudCB1diBpbmRleCBp
biB0aGUgZ2xvYmFsIGFycmF5IHV2czMyCisgICAgICAgIHZhciB1dkluZGV4ID0gMDsgLy8gdXYg
c3RhcnQgaW5kZXggaW4gdGhlIGdsb2JhbCBhcnJheSB1dnMzMiBvZiB0aGUgY3VycmVudCBwYXJ0
aWNsZQorICAgICAgICB2YXIgcHQgPSAwOyAvLyBjdXJyZW50IGluZGV4IGluIHRoZSBwYXJ0aWNs
ZSBtb2RlbCBzaGFwZQorICAgICAgICBpZiAodGhpcy5tZXNoLmlzRmFjZXREYXRhRW5hYmxlZCkg
eworICAgICAgICAgICAgdGhpcy5fY29tcHV0ZUJvdW5kaW5nQm94ID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBlbmQgPSAoZW5kID49IHRoaXMubmJQYXJ0aWNsZXMpID8gdGhpcy5uYlBhcnRp
Y2xlcyAtIDEgOiBlbmQ7CisgICAgICAgIGlmICh0aGlzLl9jb21wdXRlQm91bmRpbmdCb3gpIHsK
KyAgICAgICAgICAgIGlmIChzdGFydCAhPSAwIHx8IGVuZCAhPSB0aGlzLm5iUGFydGljbGVzIC0g
MSkgeyAvLyBvbmx5IHNvbWUgcGFydGljbGVzIGFyZSB1cGRhdGVkLCB0aGVuIHVzZSB0aGUgY3Vy
cmVudCBleGlzdGluZyBCQm94IGJhc2lzLiBOb3RlIDogaXQgY2FuIG9ubHkgaW5jcmVhc2UuCisg
ICAgICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9IHRoaXMubWVzaC5fYm91bmRpbmdJbmZv
OworICAgICAgICAgICAgICAgIGlmIChib3VuZGluZ0luZm8pIHsKKyAgICAgICAgICAgICAgICAg
ICAgbWluaW11bS5jb3B5RnJvbShib3VuZGluZ0luZm8ubWluaW11bSk7CisgICAgICAgICAgICAg
ICAgICAgIG1heGltdW0uY29weUZyb20oYm91bmRpbmdJbmZvLm1heGltdW0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBwYXJ0aWNsZSBs
b29wCisgICAgICAgIGluZGV4ID0gdGhpcy5wYXJ0aWNsZXNbc3RhcnRdLl9wb3M7CisgICAgICAg
IHZhciB2cG9zID0gKGluZGV4IC8gMykgfCAwOworICAgICAgICBjb2xvckluZGV4ID0gdnBvcyAq
IDQ7CisgICAgICAgIHV2SW5kZXggPSB2cG9zICogMjsKKyAgICAgICAgZm9yICh2YXIgcCA9IHN0
YXJ0OyBwIDw9IGVuZDsgcCsrKSB7CisgICAgICAgICAgICB2YXIgcGFydGljbGUgPSB0aGlzLnBh
cnRpY2xlc1twXTsKKyAgICAgICAgICAgIC8vIGNhbGwgdG8gY3VzdG9tIHVzZXIgZnVuY3Rpb24g
dG8gdXBkYXRlIHRoZSBwYXJ0aWNsZSBwcm9wZXJ0aWVzCisgICAgICAgICAgICB0aGlzLnVwZGF0
ZVBhcnRpY2xlKHBhcnRpY2xlKTsKKyAgICAgICAgICAgIHZhciBzaGFwZSA9IHBhcnRpY2xlLl9t
b2RlbC5fc2hhcGU7CisgICAgICAgICAgICB2YXIgc2hhcGVVViA9IHBhcnRpY2xlLl9tb2RlbC5f
c2hhcGVVVjsKKyAgICAgICAgICAgIHZhciBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4ID0gcGFydGlj
bGUuX3JvdGF0aW9uTWF0cml4OworICAgICAgICAgICAgdmFyIHBhcnRpY2xlUG9zaXRpb24gPSBw
YXJ0aWNsZS5wb3NpdGlvbjsKKyAgICAgICAgICAgIHZhciBwYXJ0aWNsZVJvdGF0aW9uID0gcGFy
dGljbGUucm90YXRpb247CisgICAgICAgICAgICB2YXIgcGFydGljbGVTY2FsaW5nID0gcGFydGlj
bGUuc2NhbGluZzsKKyAgICAgICAgICAgIHZhciBwYXJ0aWNsZUdsb2JhbFBvc2l0aW9uID0gcGFy
dGljbGUuX2dsb2JhbFBvc2l0aW9uOworICAgICAgICAgICAgLy8gY2FtZXJhLXBhcnRpY2xlIGRp
c3RhbmNlIGZvciBkZXB0aCBzb3J0aW5nCisgICAgICAgICAgICBpZiAodGhpcy5fZGVwdGhTb3J0
ICYmIHRoaXMuX2RlcHRoU29ydFBhcnRpY2xlcykgeworICAgICAgICAgICAgICAgIHZhciBkc3Ag
PSB0aGlzLmRlcHRoU29ydGVkUGFydGljbGVzW3BdOworICAgICAgICAgICAgICAgIGRzcC5pbmQg
PSBwYXJ0aWNsZS5faW5kOworICAgICAgICAgICAgICAgIGRzcC5pbmRpY2VzTGVuZ3RoID0gcGFy
dGljbGUuX21vZGVsLl9pbmRpY2VzTGVuZ3RoOworICAgICAgICAgICAgICAgIGRzcC5zcURpc3Rh
bmNlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXS5EaXN0YW5jZVNxdWFyZWQocGFydGljbGUucG9zaXRpb24sIGNhbUludmVydGVkUG9z
aXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gc2tpcCB0aGUgY29tcHV0YXRp
b25zIGZvciBpbmFjdGl2ZSBvciBhbHJlYWR5IGludmlzaWJsZSBwYXJ0aWNsZXMKKyAgICAgICAg
ICAgIGlmICghcGFydGljbGUuYWxpdmUgfHwgKHBhcnRpY2xlLl9zdGlsbEludmlzaWJsZSAmJiAh
cGFydGljbGUuaXNWaXNpYmxlKSkgeworICAgICAgICAgICAgICAgIC8vIGluY3JlbWVudCBpbmRl
eGVzIGZvciB0aGUgbmV4dCBwYXJ0aWNsZQorICAgICAgICAgICAgICAgIHB0ID0gc2hhcGUubGVu
Z3RoOworICAgICAgICAgICAgICAgIGluZGV4ICs9IHB0ICogMzsKKyAgICAgICAgICAgICAgICBj
b2xvckluZGV4ICs9IHB0ICogNDsKKyAgICAgICAgICAgICAgICB1dkluZGV4ICs9IHB0ICogMjsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChwYXJ0aWNsZS5pc1Zpc2libGUpIHsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fc3RpbGxJ
bnZpc2libGUgPSBmYWxzZTsgLy8gdW4tbWFyayBwZXJtYW5lbnQgaW52aXNpYmlsaXR5CisgICAg
ICAgICAgICAgICAgdmFyIHNjYWxlZFBpdm90ID0gdGVtcFZlY3RvcnNbMTJdOworICAgICAgICAg
ICAgICAgIHBhcnRpY2xlLnBpdm90Lm11bHRpcGx5VG9SZWYocGFydGljbGVTY2FsaW5nLCBzY2Fs
ZWRQaXZvdCk7CisgICAgICAgICAgICAgICAgLy8gcGFydGljbGUgcm90YXRpb24gbWF0cml4Cisg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuYmlsbGJvYXJkKSB7CisgICAgICAgICAgICAgICAgICAg
IHBhcnRpY2xlUm90YXRpb24ueCA9IDAuMDsKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGVS
b3RhdGlvbi55ID0gMC4wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fY29tcHV0ZVBhcnRpY2xlUm90YXRpb24gfHwgdGhpcy5iaWxsYm9hcmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcGFydGljbGUuZ2V0Um90YXRpb25NYXRyaXgocm90TWF0cml4KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHBhcnRpY2xlSGFzUGFyZW50ID0g
KHBhcnRpY2xlLnBhcmVudElkICE9PSBudWxsKTsKKyAgICAgICAgICAgICAgICBpZiAocGFydGlj
bGVIYXNQYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gdGhpcy5w
YXJ0aWNsZXNbcGFydGljbGUucGFyZW50SWRdOworICAgICAgICAgICAgICAgICAgICB2YXIgcGFy
ZW50Um90YXRpb25NYXRyaXggPSBwYXJlbnRfMS5fcm90YXRpb25NYXRyaXg7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBwYXJlbnRHbG9iYWxQb3NpdGlvbiA9IHBhcmVudF8xLl9nbG9iYWxQb3Np
dGlvbjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJvdGF0ZWRZID0gcGFydGljbGVQb3NpdGlv
bi54ICogcGFyZW50Um90YXRpb25NYXRyaXhbMV0gKyBwYXJ0aWNsZVBvc2l0aW9uLnkgKiBwYXJl
bnRSb3RhdGlvbk1hdHJpeFs0XSArIHBhcnRpY2xlUG9zaXRpb24ueiAqIHBhcmVudFJvdGF0aW9u
TWF0cml4WzddOworICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRlZFggPSBwYXJ0aWNsZVBv
c2l0aW9uLnggKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFswXSArIHBhcnRpY2xlUG9zaXRpb24ueSAq
IHBhcmVudFJvdGF0aW9uTWF0cml4WzNdICsgcGFydGljbGVQb3NpdGlvbi56ICogcGFyZW50Um90
YXRpb25NYXRyaXhbNl07CisgICAgICAgICAgICAgICAgICAgIHZhciByb3RhdGVkWiA9IHBhcnRp
Y2xlUG9zaXRpb24ueCAqIHBhcmVudFJvdGF0aW9uTWF0cml4WzJdICsgcGFydGljbGVQb3NpdGlv
bi55ICogcGFyZW50Um90YXRpb25NYXRyaXhbNV0gKyBwYXJ0aWNsZVBvc2l0aW9uLnogKiBwYXJl
bnRSb3RhdGlvbk1hdHJpeFs4XTsKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGVHbG9iYWxQ
b3NpdGlvbi54ID0gcGFyZW50R2xvYmFsUG9zaXRpb24ueCArIHJvdGF0ZWRYOworICAgICAgICAg
ICAgICAgICAgICBwYXJ0aWNsZUdsb2JhbFBvc2l0aW9uLnkgPSBwYXJlbnRHbG9iYWxQb3NpdGlv
bi55ICsgcm90YXRlZFk7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlR2xvYmFsUG9zaXRp
b24ueiA9IHBhcmVudEdsb2JhbFBvc2l0aW9uLnogKyByb3RhdGVkWjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX2NvbXB1dGVQYXJ0aWNsZVJvdGF0aW9uIHx8IHRoaXMuYmlsbGJvYXJk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90TWF0cml4VmFsdWVzID0gcm90TWF0
cml4Lm07CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4WzBd
ID0gcm90TWF0cml4VmFsdWVzWzBdICogcGFyZW50Um90YXRpb25NYXRyaXhbMF0gKyByb3RNYXRy
aXhWYWx1ZXNbMV0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFszXSArIHJvdE1hdHJpeFZhbHVlc1sy
XSAqIHBhcmVudFJvdGF0aW9uTWF0cml4WzZdOworICAgICAgICAgICAgICAgICAgICAgICAgcGFy
dGljbGVSb3RhdGlvbk1hdHJpeFsxXSA9IHJvdE1hdHJpeFZhbHVlc1swXSAqIHBhcmVudFJvdGF0
aW9uTWF0cml4WzFdICsgcm90TWF0cml4VmFsdWVzWzFdICogcGFyZW50Um90YXRpb25NYXRyaXhb
NF0gKyByb3RNYXRyaXhWYWx1ZXNbMl0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFs3XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbMl0gPSByb3RNYXRyaXhW
YWx1ZXNbMF0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFsyXSArIHJvdE1hdHJpeFZhbHVlc1sxXSAq
IHBhcmVudFJvdGF0aW9uTWF0cml4WzVdICsgcm90TWF0cml4VmFsdWVzWzJdICogcGFyZW50Um90
YXRpb25NYXRyaXhbOF07CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVJvdGF0aW9u
TWF0cml4WzNdID0gcm90TWF0cml4VmFsdWVzWzRdICogcGFyZW50Um90YXRpb25NYXRyaXhbMF0g
KyByb3RNYXRyaXhWYWx1ZXNbNV0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFszXSArIHJvdE1hdHJp
eFZhbHVlc1s2XSAqIHBhcmVudFJvdGF0aW9uTWF0cml4WzZdOworICAgICAgICAgICAgICAgICAg
ICAgICAgcGFydGljbGVSb3RhdGlvbk1hdHJpeFs0XSA9IHJvdE1hdHJpeFZhbHVlc1s0XSAqIHBh
cmVudFJvdGF0aW9uTWF0cml4WzFdICsgcm90TWF0cml4VmFsdWVzWzVdICogcGFyZW50Um90YXRp
b25NYXRyaXhbNF0gKyByb3RNYXRyaXhWYWx1ZXNbNl0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFs3
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbNV0gPSBy
b3RNYXRyaXhWYWx1ZXNbNF0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFsyXSArIHJvdE1hdHJpeFZh
bHVlc1s1XSAqIHBhcmVudFJvdGF0aW9uTWF0cml4WzVdICsgcm90TWF0cml4VmFsdWVzWzZdICog
cGFyZW50Um90YXRpb25NYXRyaXhbOF07CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNs
ZVJvdGF0aW9uTWF0cml4WzZdID0gcm90TWF0cml4VmFsdWVzWzhdICogcGFyZW50Um90YXRpb25N
YXRyaXhbMF0gKyByb3RNYXRyaXhWYWx1ZXNbOV0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFszXSAr
IHJvdE1hdHJpeFZhbHVlc1sxMF0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFs2XTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbN10gPSByb3RNYXRyaXhWYWx1
ZXNbOF0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFsxXSArIHJvdE1hdHJpeFZhbHVlc1s5XSAqIHBh
cmVudFJvdGF0aW9uTWF0cml4WzRdICsgcm90TWF0cml4VmFsdWVzWzEwXSAqIHBhcmVudFJvdGF0
aW9uTWF0cml4WzddOworICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljbGVSb3RhdGlvbk1h
dHJpeFs4XSA9IHJvdE1hdHJpeFZhbHVlc1s4XSAqIHBhcmVudFJvdGF0aW9uTWF0cml4WzJdICsg
cm90TWF0cml4VmFsdWVzWzldICogcGFyZW50Um90YXRpb25NYXRyaXhbNV0gKyByb3RNYXRyaXhW
YWx1ZXNbMTBdICogcGFyZW50Um90YXRpb25NYXRyaXhbOF07CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHBhcnRpY2xlR2xvYmFsUG9zaXRpb24ueCA9IHBhcnRpY2xlUG9zaXRpb24ueDsK
KyAgICAgICAgICAgICAgICAgICAgcGFydGljbGVHbG9iYWxQb3NpdGlvbi55ID0gcGFydGljbGVQ
b3NpdGlvbi55OworICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZUdsb2JhbFBvc2l0aW9uLnog
PSBwYXJ0aWNsZVBvc2l0aW9uLno7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21w
dXRlUGFydGljbGVSb3RhdGlvbiB8fCB0aGlzLmJpbGxib2FyZCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHJvdE1hdHJpeFZhbHVlcyA9IHJvdE1hdHJpeC5tOworICAgICAgICAgICAg
ICAgICAgICAgICAgcGFydGljbGVSb3RhdGlvbk1hdHJpeFswXSA9IHJvdE1hdHJpeFZhbHVlc1sw
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbMV0gPSBy
b3RNYXRyaXhWYWx1ZXNbMV07CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVJvdGF0
aW9uTWF0cml4WzJdID0gcm90TWF0cml4VmFsdWVzWzJdOworICAgICAgICAgICAgICAgICAgICAg
ICAgcGFydGljbGVSb3RhdGlvbk1hdHJpeFszXSA9IHJvdE1hdHJpeFZhbHVlc1s0XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbNF0gPSByb3RNYXRyaXhW
YWx1ZXNbNV07CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4
WzVdID0gcm90TWF0cml4VmFsdWVzWzZdOworICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlj
bGVSb3RhdGlvbk1hdHJpeFs2XSA9IHJvdE1hdHJpeFZhbHVlc1s4XTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbN10gPSByb3RNYXRyaXhWYWx1ZXNbOV07
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4WzhdID0gcm90
TWF0cml4VmFsdWVzWzEwXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB2YXIgcGl2b3RCYWNrVHJhbnNsYXRpb24gPSB0ZW1wVmVjdG9y
c1sxMV07CisgICAgICAgICAgICAgICAgaWYgKHBhcnRpY2xlLnRyYW5zbGF0ZUZyb21QaXZvdCkg
eworICAgICAgICAgICAgICAgICAgICBwaXZvdEJhY2tUcmFuc2xhdGlvbi5zZXRBbGwoMC4wKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHBpdm90QmFja1RyYW5zbGF0aW9uLmNvcHlGcm9tKHNjYWxlZFBpdm90KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gcGFydGljbGUgdmVydGV4IGxvb3AKKyAg
ICAgICAgICAgICAgICBmb3IgKHB0ID0gMDsgcHQgPCBzaGFwZS5sZW5ndGg7IHB0KyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWR4ID0gaW5kZXggKyBwdCAqIDM7CisgICAgICAgICAgICAgICAg
ICAgIGNvbGlkeCA9IGNvbG9ySW5kZXggKyBwdCAqIDQ7CisgICAgICAgICAgICAgICAgICAgIHV2
aWR4ID0gdXZJbmRleCArIHB0ICogMjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRtcFZlcnRl
eCA9IHRlbXBWZWN0b3JzWzBdOworICAgICAgICAgICAgICAgICAgICB0bXBWZXJ0ZXguY29weUZy
b20oc2hhcGVbcHRdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbXB1dGVQYXJ0
aWNsZVZlcnRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJ0aWNs
ZVZlcnRleChwYXJ0aWNsZSwgdG1wVmVydGV4LCBwdCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb25zCisgICAgICAgICAgICAgICAgICAgIHZh
ciB2ZXJ0ZXhYID0gdG1wVmVydGV4LnggKiBwYXJ0aWNsZVNjYWxpbmcueCAtIHNjYWxlZFBpdm90
Lng7CisgICAgICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXhZID0gdG1wVmVydGV4LnkgKiBwYXJ0
aWNsZVNjYWxpbmcueSAtIHNjYWxlZFBpdm90Lnk7CisgICAgICAgICAgICAgICAgICAgIHZhciB2
ZXJ0ZXhaID0gdG1wVmVydGV4LnogKiBwYXJ0aWNsZVNjYWxpbmcueiAtIHNjYWxlZFBpdm90Lno7
CisgICAgICAgICAgICAgICAgICAgIHZhciByb3RhdGVkWCA9IHZlcnRleFggKiBwYXJ0aWNsZVJv
dGF0aW9uTWF0cml4WzBdICsgdmVydGV4WSAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbM10gKyB2
ZXJ0ZXhaICogcGFydGljbGVSb3RhdGlvbk1hdHJpeFs2XTsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHJvdGF0ZWRZID0gdmVydGV4WCAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbMV0gKyB2ZXJ0
ZXhZICogcGFydGljbGVSb3RhdGlvbk1hdHJpeFs0XSArIHZlcnRleFogKiBwYXJ0aWNsZVJvdGF0
aW9uTWF0cml4WzddOworICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRlZFogPSB2ZXJ0ZXhY
ICogcGFydGljbGVSb3RhdGlvbk1hdHJpeFsyXSArIHZlcnRleFkgKiBwYXJ0aWNsZVJvdGF0aW9u
TWF0cml4WzVdICsgdmVydGV4WiAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbOF07CisgICAgICAg
ICAgICAgICAgICAgIHJvdGF0ZWRYICs9IHBpdm90QmFja1RyYW5zbGF0aW9uLng7CisgICAgICAg
ICAgICAgICAgICAgIHJvdGF0ZWRZICs9IHBpdm90QmFja1RyYW5zbGF0aW9uLnk7CisgICAgICAg
ICAgICAgICAgICAgIHJvdGF0ZWRaICs9IHBpdm90QmFja1RyYW5zbGF0aW9uLno7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBweCA9IHBvc2l0aW9uczMyW2lkeF0gPSBwYXJ0aWNsZUdsb2JhbFBv
c2l0aW9uLnggKyBjYW1BeGlzWC54ICogcm90YXRlZFggKyBjYW1BeGlzWS54ICogcm90YXRlZFkg
KyBjYW1BeGlzWi54ICogcm90YXRlZFo7CisgICAgICAgICAgICAgICAgICAgIHZhciBweSA9IHBv
c2l0aW9uczMyW2lkeCArIDFdID0gcGFydGljbGVHbG9iYWxQb3NpdGlvbi55ICsgY2FtQXhpc1gu
eSAqIHJvdGF0ZWRYICsgY2FtQXhpc1kueSAqIHJvdGF0ZWRZICsgY2FtQXhpc1oueSAqIHJvdGF0
ZWRaOworICAgICAgICAgICAgICAgICAgICB2YXIgcHogPSBwb3NpdGlvbnMzMltpZHggKyAyXSA9
IHBhcnRpY2xlR2xvYmFsUG9zaXRpb24ueiArIGNhbUF4aXNYLnogKiByb3RhdGVkWCArIGNhbUF4
aXNZLnogKiByb3RhdGVkWSArIGNhbUF4aXNaLnogKiByb3RhdGVkWjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX2NvbXB1dGVCb3VuZGluZ0JveCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbWluaW11bS5taW5pbWl6ZUluUGxhY2VGcm9tRmxvYXRzKHB4LCBweSwgcHopOworICAg
ICAgICAgICAgICAgICAgICAgICAgbWF4aW11bS5tYXhpbWl6ZUluUGxhY2VGcm9tRmxvYXRzKHB4
LCBweSwgcHopOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8v
IG5vcm1hbHMgOiBpZiB0aGUgcGFydGljbGVzIGNhbid0IGJlIG1vcnBoZWQgdGhlbiBqdXN0IHJv
dGF0ZSB0aGUgbm9ybWFscywgd2hhdCBpcyBtdWNoIG1vcmUgZmFzdGVyIHRoYW4gQ29tcHV0ZU5v
cm1hbHMoKQorICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NvbXB1dGVQYXJ0aWNsZVZl
cnRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vcm1hbHggPSBmaXhlZE5vcm1h
bDMyW2lkeF07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFseSA9IGZpeGVkTm9y
bWFsMzJbaWR4ICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFseiA9IGZp
eGVkTm9ybWFsMzJbaWR4ICsgMl07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRl
ZHggPSBub3JtYWx4ICogcGFydGljbGVSb3RhdGlvbk1hdHJpeFswXSArIG5vcm1hbHkgKiBwYXJ0
aWNsZVJvdGF0aW9uTWF0cml4WzNdICsgbm9ybWFseiAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhb
Nl07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRlZHkgPSBub3JtYWx4ICogcGFy
dGljbGVSb3RhdGlvbk1hdHJpeFsxXSArIG5vcm1hbHkgKiBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4
WzRdICsgbm9ybWFseiAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbN107CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcm90YXRlZHogPSBub3JtYWx4ICogcGFydGljbGVSb3RhdGlvbk1hdHJp
eFsyXSArIG5vcm1hbHkgKiBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4WzVdICsgbm9ybWFseiAqIHBh
cnRpY2xlUm90YXRpb25NYXRyaXhbOF07CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxz
MzJbaWR4XSA9IGNhbUF4aXNYLnggKiByb3RhdGVkeCArIGNhbUF4aXNZLnggKiByb3RhdGVkeSAr
IGNhbUF4aXNaLnggKiByb3RhdGVkejsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHMz
MltpZHggKyAxXSA9IGNhbUF4aXNYLnkgKiByb3RhdGVkeCArIGNhbUF4aXNZLnkgKiByb3RhdGVk
eSArIGNhbUF4aXNaLnkgKiByb3RhdGVkejsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1h
bHMzMltpZHggKyAyXSA9IGNhbUF4aXNYLnogKiByb3RhdGVkeCArIGNhbUF4aXNZLnogKiByb3Rh
dGVkeSArIGNhbUF4aXNaLnogKiByb3RhdGVkejsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcHV0ZVBhcnRpY2xlQ29sb3IgJiYgcGFydGlj
bGUuY29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHBhcnRpY2xl
LmNvbG9yOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yczMyXzEgPSB0aGlzLl9j
b2xvcnMzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yczMyXzFbY29saWR4XSA9IGNv
bG9yLnI7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMzMl8xW2NvbGlkeCArIDFdID0g
Y29sb3IuZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yczMyXzFbY29saWR4ICsgMl0g
PSBjb2xvci5iOworICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzMzJfMVtjb2xpZHggKyAz
XSA9IGNvbG9yLmE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX2NvbXB1dGVQYXJ0aWNsZVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB1dnMgPSBwYXJ0aWNsZS51dnM7CisgICAgICAgICAgICAgICAgICAgICAgICB1dnMz
Mlt1dmlkeF0gPSBzaGFwZVVWW3B0ICogMl0gKiAodXZzLnogLSB1dnMueCkgKyB1dnMueDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHV2czMyW3V2aWR4ICsgMV0gPSBzaGFwZVVWW3B0ICogMiAr
IDFdICogKHV2cy53IC0gdXZzLnkpICsgdXZzLnk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBwYXJ0aWNsZSBq
dXN0IHNldCBpbnZpc2libGUgOiBzY2FsZWQgdG8gemVybyBhbmQgcG9zaXRpb25lZCBhdCB0aGUg
b3JpZ2luCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fc3Rp
bGxJbnZpc2libGUgPSB0cnVlOyAvLyBtYXJrIHRoZSBwYXJ0aWNsZSBhcyBpbnZpc2libGUKKyAg
ICAgICAgICAgICAgICBmb3IgKHB0ID0gMDsgcHQgPCBzaGFwZS5sZW5ndGg7IHB0KyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWR4ID0gaW5kZXggKyBwdCAqIDM7CisgICAgICAgICAgICAgICAg
ICAgIGNvbGlkeCA9IGNvbG9ySW5kZXggKyBwdCAqIDQ7CisgICAgICAgICAgICAgICAgICAgIHV2
aWR4ID0gdXZJbmRleCArIHB0ICogMjsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zMzJb
aWR4XSA9IHBvc2l0aW9uczMyW2lkeCArIDFdID0gcG9zaXRpb25zMzJbaWR4ICsgMl0gPSAwOwor
ICAgICAgICAgICAgICAgICAgICBub3JtYWxzMzJbaWR4XSA9IG5vcm1hbHMzMltpZHggKyAxXSA9
IG5vcm1hbHMzMltpZHggKyAyXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9j
b21wdXRlUGFydGljbGVDb2xvciAmJiBwYXJ0aWNsZS5jb2xvcikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGNvbG9yID0gcGFydGljbGUuY29sb3I7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb2xvcnMzMltjb2xpZHhdID0gY29sb3IucjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yczMyW2NvbGlkeCArIDFdID0gY29sb3IuZzsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yczMyW2NvbGlkeCArIDJdID0gY29sb3IuYjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yczMyW2NvbGlkeCArIDNdID0gY29sb3IuYTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcHV0ZVBhcnRpY2xlVGV4dHVyZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHV2cyA9IHBhcnRpY2xlLnV2czsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHV2czMyW3V2aWR4XSA9IHNoYXBlVVZbcHQgKiAyXSAqICh1dnMueiAt
IHV2cy54KSArIHV2cy54OworICAgICAgICAgICAgICAgICAgICAgICAgdXZzMzJbdXZpZHggKyAx
XSA9IHNoYXBlVVZbcHQgKiAyICsgMV0gKiAodXZzLncgLSB1dnMueSkgKyB1dnMueTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIGlmIHRoZSBwYXJ0aWNsZSBpbnRlcnNlY3Rpb25zIG11c3QgYmUgY29tcHV0ZWQg
OiB1cGRhdGUgdGhlIGJiSW5mbworICAgICAgICAgICAgaWYgKHRoaXMuX3BhcnRpY2xlc0ludGVy
c2VjdCkgeworICAgICAgICAgICAgICAgIHZhciBiSW5mbyA9IHBhcnRpY2xlLl9ib3VuZGluZ0lu
Zm87CisgICAgICAgICAgICAgICAgdmFyIGJCb3ggPSBiSW5mby5ib3VuZGluZ0JveDsKKyAgICAg
ICAgICAgICAgICB2YXIgYlNwaGVyZSA9IGJJbmZvLmJvdW5kaW5nU3BoZXJlOworICAgICAgICAg
ICAgICAgIHZhciBtb2RlbEJvdW5kaW5nSW5mbyA9IHBhcnRpY2xlLl9tb2RlbEJvdW5kaW5nSW5m
bzsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2JTcGhlcmVPbmx5KSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIHBsYWNlLCBzY2FsZSBhbmQgcm90YXRlIHRoZSBwYXJ0aWNsZSBiYm94IHdp
dGhpbiB0aGUgU1BTIGxvY2FsIHN5c3RlbSwgdGhlbiB1cGRhdGUgaXQKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIG1vZGVsQm91bmRpbmdJbmZvVmVjdG9ycyA9IG1vZGVsQm91bmRpbmdJbmZvLmJv
dW5kaW5nQm94LnZlY3RvcnM7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wTWluID0gdGVt
cFZlY3RvcnNbMV07CisgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wTWF4ID0gdGVtcFZlY3Rv
cnNbMl07CisgICAgICAgICAgICAgICAgICAgIHRlbXBNaW4uc2V0QWxsKE51bWJlci5NQVhfVkFM
VUUpOworICAgICAgICAgICAgICAgICAgICB0ZW1wTWF4LnNldEFsbCgtTnVtYmVyLk1BWF9WQUxV
RSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDwgODsgYisrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGVkWCA9IG1vZGVsQm91bmRpbmdJbmZvVmVj
dG9yc1tiXS54ICogcGFydGljbGVTY2FsaW5nLng7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgc2NhbGVkWSA9IG1vZGVsQm91bmRpbmdJbmZvVmVjdG9yc1tiXS55ICogcGFydGljbGVTY2Fs
aW5nLnk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGVkWiA9IG1vZGVsQm91bmRp
bmdJbmZvVmVjdG9yc1tiXS56ICogcGFydGljbGVTY2FsaW5nLno7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcm90YXRlZFggPSBzY2FsZWRYICogcGFydGljbGVSb3RhdGlvbk1hdHJpeFsw
XSArIHNjYWxlZFkgKiBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4WzNdICsgc2NhbGVkWiAqIHBhcnRp
Y2xlUm90YXRpb25NYXRyaXhbNl07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRl
ZFkgPSBzY2FsZWRYICogcGFydGljbGVSb3RhdGlvbk1hdHJpeFsxXSArIHNjYWxlZFkgKiBwYXJ0
aWNsZVJvdGF0aW9uTWF0cml4WzRdICsgc2NhbGVkWiAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhb
N107CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRlZFogPSBzY2FsZWRYICogcGFy
dGljbGVSb3RhdGlvbk1hdHJpeFsyXSArIHNjYWxlZFkgKiBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4
WzVdICsgc2NhbGVkWiAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbOF07CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgeCA9IHBhcnRpY2xlUG9zaXRpb24ueCArIGNhbUF4aXNYLnggKiByb3Rh
dGVkWCArIGNhbUF4aXNZLnggKiByb3RhdGVkWSArIGNhbUF4aXNaLnggKiByb3RhdGVkWjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB5ID0gcGFydGljbGVQb3NpdGlvbi55ICsgY2FtQXhp
c1gueSAqIHJvdGF0ZWRYICsgY2FtQXhpc1kueSAqIHJvdGF0ZWRZICsgY2FtQXhpc1oueSAqIHJv
dGF0ZWRaOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHogPSBwYXJ0aWNsZVBvc2l0aW9u
LnogKyBjYW1BeGlzWC56ICogcm90YXRlZFggKyBjYW1BeGlzWS56ICogcm90YXRlZFkgKyBjYW1B
eGlzWi56ICogcm90YXRlZFo7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTWluLm1pbmlt
aXplSW5QbGFjZUZyb21GbG9hdHMoeCwgeSwgeik7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZW1wTWF4Lm1heGltaXplSW5QbGFjZUZyb21GbG9hdHMoeCwgeSwgeik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYkJveC5yZUNvbnN0cnVjdCh0ZW1wTWluLCB0
ZW1wTWF4LCBtZXNoLl93b3JsZE1hdHJpeCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIHBsYWNlIGFuZCBzY2FsZSB0aGUgcGFydGljbGUgYm91ZGluZyBzcGhlcmUgaW4g
dGhlIFNQUyBsb2NhbCBzeXN0ZW0sIHRoZW4gdXBkYXRlIGl0CisgICAgICAgICAgICAgICAgdmFy
IG1pbkJib3ggPSBtb2RlbEJvdW5kaW5nSW5mby5taW5pbXVtLm11bHRpcGx5VG9SZWYocGFydGlj
bGVTY2FsaW5nLCB0ZW1wVmVjdG9yc1sxXSk7CisgICAgICAgICAgICAgICAgdmFyIG1heEJib3gg
PSBtb2RlbEJvdW5kaW5nSW5mby5tYXhpbXVtLm11bHRpcGx5VG9SZWYocGFydGljbGVTY2FsaW5n
LCB0ZW1wVmVjdG9yc1syXSk7CisgICAgICAgICAgICAgICAgdmFyIGJTcGhlcmVDZW50ZXIgPSBt
YXhCYm94LmFkZFRvUmVmKG1pbkJib3gsIHRlbXBWZWN0b3JzWzNdKS5zY2FsZUluUGxhY2UoMC41
KS5hZGRJblBsYWNlKHBhcnRpY2xlR2xvYmFsUG9zaXRpb24pOworICAgICAgICAgICAgICAgIHZh
ciBoYWxmRGlhZyA9IG1heEJib3guc3VidHJhY3RUb1JlZihtaW5CYm94LCB0ZW1wVmVjdG9yc1s0
XSkuc2NhbGVJblBsYWNlKDAuNSAqIHRoaXMuX2JTcGhlcmVSYWRpdXNGYWN0b3IpOworICAgICAg
ICAgICAgICAgIHZhciBiU3BoZXJlTWluQmJveCA9IGJTcGhlcmVDZW50ZXIuc3VidHJhY3RUb1Jl
ZihoYWxmRGlhZywgdGVtcFZlY3RvcnNbMV0pOworICAgICAgICAgICAgICAgIHZhciBiU3BoZXJl
TWF4QmJveCA9IGJTcGhlcmVDZW50ZXIuYWRkVG9SZWYoaGFsZkRpYWcsIHRlbXBWZWN0b3JzWzJd
KTsKKyAgICAgICAgICAgICAgICBiU3BoZXJlLnJlQ29uc3RydWN0KGJTcGhlcmVNaW5CYm94LCBi
U3BoZXJlTWF4QmJveCwgbWVzaC5fd29ybGRNYXRyaXgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gaW5jcmVtZW50IGluZGV4ZXMgZm9yIHRoZSBuZXh0IHBhcnRpY2xlCisgICAgICAg
ICAgICBpbmRleCA9IGlkeCArIDM7CisgICAgICAgICAgICBjb2xvckluZGV4ID0gY29saWR4ICsg
NDsKKyAgICAgICAgICAgIHV2SW5kZXggPSB1dmlkeCArIDI7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gaWYgdGhlIFZCTyBtdXN0IGJlIHVwZGF0ZWQKKyAgICAgICAgaWYgKHVwZGF0ZSkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX2NvbXB1dGVQYXJ0aWNsZUNvbG9yKSB7CisgICAgICAgICAgICAg
ICAgbWVzaC51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kLCBjb2xvcnMzMiwgZmFsc2Us
IGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9jb21wdXRlUGFy
dGljbGVUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgbWVzaC51cGRhdGVWZXJ0aWNlc0RhdGEo
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVy
Il0uVVZLaW5kLCB1dnMzMiwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1lc2gudXBkYXRlVmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgcG9zaXRpb25zMzIs
IGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBpZiAoIW1lc2guYXJlTm9ybWFsc0Zyb3plbiB8
fCBtZXNoLmlzRmFjZXREYXRhRW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9j
b21wdXRlUGFydGljbGVWZXJ0ZXggfHwgbWVzaC5pc0ZhY2V0RGF0YUVuYWJsZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gcmVjb21wdXRlIHRoZSBub3JtYWxzIG9ubHkgaWYgdGhlIHBhcnRp
Y2xlcyBjYW4gYmUgbW9ycGhlZCwgdXBkYXRlIHRoZW4gYWxzbyB0aGUgbm9ybWFsIHJlZmVyZW5j
ZSBhcnJheSBfZml4ZWROb3JtYWwzMltdCisgICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbXMg
PSBtZXNoLmlzRmFjZXREYXRhRW5hYmxlZCA/IG1lc2guZ2V0RmFjZXREYXRhUGFyYW1ldGVycygp
IDogbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgX01lc2hlc19tZXNoX3ZlcnRleERhdGFfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdLkNvbXB1dGVOb3JtYWxzKHBv
c2l0aW9uczMyLCBpbmRpY2VzMzIsIG5vcm1hbHMzMiwgcGFyYW1zKTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3JtYWxzMzIubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZpeGVkTm9ybWFsMzJbaV0gPSBub3JtYWxzMzJbaV07CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KCFtZXNoLmFyZU5vcm1hbHNGcm96ZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzaC51cGRh
dGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCwgbm9ybWFsczMyLCBmYWxzZSwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9k
ZXB0aFNvcnQgJiYgdGhpcy5fZGVwdGhTb3J0UGFydGljbGVzKSB7CisgICAgICAgICAgICAgICAg
dmFyIGRlcHRoU29ydGVkUGFydGljbGVzID0gdGhpcy5kZXB0aFNvcnRlZFBhcnRpY2xlczsKKyAg
ICAgICAgICAgICAgICBkZXB0aFNvcnRlZFBhcnRpY2xlcy5zb3J0KGRlcHRoU29ydEZ1bmN0aW9u
KTsKKyAgICAgICAgICAgICAgICB2YXIgZHNwbCA9IGRlcHRoU29ydGVkUGFydGljbGVzLmxlbmd0
aDsKKyAgICAgICAgICAgICAgICB2YXIgc2lkID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBzb3J0ZWQgPSAwOyBzb3J0ZWQgPCBkc3BsOyBzb3J0ZWQrKykgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgbGluZCA9IGRlcHRoU29ydGVkUGFydGljbGVzW3NvcnRlZF0uaW5kaWNlc0xlbmd0
aDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNpbmQgPSBkZXB0aFNvcnRlZFBhcnRpY2xlc1tz
b3J0ZWRdLmluZDsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5k
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMzMltzaWRdID0gaW5kaWNl
c1tzaW5kICsgaV07CisgICAgICAgICAgICAgICAgICAgICAgICBzaWQrKzsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtZXNoLnVwZGF0
ZUluZGljZXMoaW5kaWNlczMyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5fY29tcHV0ZUJvdW5kaW5nQm94KSB7CisgICAgICAgICAgICBpZiAobWVzaC5fYm91
bmRpbmdJbmZvKSB7CisgICAgICAgICAgICAgICAgbWVzaC5fYm91bmRpbmdJbmZvLnJlQ29uc3Ry
dWN0KG1pbmltdW0sIG1heGltdW0sIG1lc2guX3dvcmxkTWF0cml4KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1lc2guX2JvdW5kaW5nSW5mbyA9
IG5ldyBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
Qm91bmRpbmdJbmZvIl0obWluaW11bSwgbWF4aW11bSwgbWVzaC5fd29ybGRNYXRyaXgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuYWZ0ZXJVcGRhdGVQYXJ0aWNsZXMo
c3RhcnQsIGVuZCwgdXBkYXRlKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv
KioKKyAgICAqIERpc3Bvc2VzIHRoZSBTUFMuCisgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlU3lz
dGVtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLm1lc2gu
ZGlzcG9zZSgpOworICAgICAgICB0aGlzLnZhcnMgPSBudWxsOworICAgICAgICAvLyBkcm9wIHJl
ZmVyZW5jZXMgdG8gaW50ZXJuYWwgYmlnIGFycmF5cyBmb3IgdGhlIEdDCisgICAgICAgIHRoaXMu
X3Bvc2l0aW9ucyA9IG51bGw7CisgICAgICAgIHRoaXMuX2luZGljZXMgPSBudWxsOworICAgICAg
ICB0aGlzLl9ub3JtYWxzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdXZzID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fY29sb3JzID0gbnVsbDsKKyAgICAgICAgdGhpcy5faW5kaWNlczMyID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fcG9zaXRpb25zMzIgPSBudWxsOworICAgICAgICB0aGlzLl9ub3JtYWxz
MzIgPSBudWxsOworICAgICAgICB0aGlzLl9maXhlZE5vcm1hbDMyID0gbnVsbDsKKyAgICAgICAg
dGhpcy5fdXZzMzIgPSBudWxsOworICAgICAgICB0aGlzLl9jb2xvcnMzMiA9IG51bGw7CisgICAg
ICAgIHRoaXMucGlja2VkUGFydGljbGVzID0gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFZpc2liaWx0eSBoZWxwZXIgOiBSZWNvbXB1dGVzIHRoZSB2aXNpYmxlIHNpemUgYWNjb3JkaW5n
IHRvIHRoZSBtZXNoIGJvdW5kaW5nIGJveAorICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFieWxv
bmpzLmNvbS9ob3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI3Nwcy12aXNpYmlsaXR5CisgICAg
ICogQHJldHVybnMgdGhlIFNQUy4KKyAgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlU3lzdGVtLnBy
b3RvdHlwZS5yZWZyZXNoVmlzaWJsZVNpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICgh
dGhpcy5faXNWaXNpYmlsaXR5Qm94TG9ja2VkKSB7CisgICAgICAgICAgICB0aGlzLm1lc2gucmVm
cmVzaEJvdW5kaW5nSW5mbygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogVmlzaWJpbGl0eSBoZWxwZXIgOiBTZXRzIHRoZSBzaXplIG9m
IGEgdmlzaWJpbGl0eSBib3gsIHRoaXMgc2V0cyB0aGUgdW5kZXJseWluZyBtZXNoIGJvdW5kaW5n
IGJveC4KKyAgICAgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSAoZmxvYXQpIG9mIHRoZSB2aXNpYmls
aXR5IGJveAorICAgICAqIG5vdGUgOiB0aGlzIGRvZXNuJ3QgbG9jayB0aGUgU1BTIG1lc2ggYm91
bmRpbmcgYm94LgorICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
U29saWRfUGFydGljbGVfU3lzdGVtI3Nwcy12aXNpYmlsaXR5CisgICAgICovCisgICAgU29saWRQ
YXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuc2V0VmlzaWJpbGl0eUJveCA9IGZ1bmN0aW9uIChzaXpl
KSB7CisgICAgICAgIHZhciB2aXMgPSBzaXplIC8gMjsKKyAgICAgICAgdGhpcy5tZXNoLl9ib3Vu
ZGluZ0luZm8gPSBuZXcgX0N1bGxpbmdfYm91bmRpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIkJvdW5kaW5nSW5mbyJdKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKC12aXMsIC12aXMsIC12aXMpLCBuZXcgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSh2
aXMsIHZpcywgdmlzKSk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU29saWRQ
YXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJpc0Fsd2F5c1Zpc2libGUiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIFNQUyBhcyBhbHdheXMgdmlzaWJsZSBvciBu
b3QKKyAgICAgICAgICogZG9jIDogaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9Tb2xp
ZF9QYXJ0aWNsZV9TeXN0ZW0jc3BzLXZpc2liaWxpdHkKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Fsd2F5c1Zpc2libGU7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBTUFMgYXMgYWx3
YXlzIHZpc2libGUgb3Igbm90CisgICAgICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI3Nwcy12aXNpYmlsaXR5CisgICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAgICAgIHRoaXMuX2Fs
d2F5c1Zpc2libGUgPSB2YWw7CisgICAgICAgICAgICB0aGlzLm1lc2guYWx3YXlzU2VsZWN0QXNB
Y3RpdmVNZXNoID0gdmFsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoU29saWRQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJpc1Zpc2liaWxpdHlCb3hMb2Nr
ZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGlmIHRoZSBTUFMgdmlzaWJpbGl0
eSBib3ggYXMgbG9ja2VkIG9yIG5vdC4gVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSB1bmRlcmx5
aW5nIG1lc2ggYm91bmRpbmcgYm94IHVwZGF0ZXMuCisgICAgICAgICAqIGRvYyA6IGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI3Nwcy12aXNpYmls
aXR5CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9pc1Zpc2liaWxpdHlCb3hMb2NrZWQ7CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBTUFMgdmlzaWJpbGl0eSBib3ggYXMgbG9ja2VkIG9y
IG5vdC4gVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSB1bmRlcmx5aW5nIG1lc2ggYm91bmRpbmcg
Ym94IHVwZGF0ZXMuCisgICAgICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9o
b3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI3Nwcy12aXNpYmlsaXR5CisgICAgICAgICAqLwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAgICAgIHRoaXMuX2lzVmlzaWJp
bGl0eUJveExvY2tlZCA9IHZhbDsKKyAgICAgICAgICAgIHZhciBib3VuZGluZ0luZm8gPSB0aGlz
Lm1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICBib3VuZGluZ0luZm8uaXNMb2Nr
ZWQgPSB2YWw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShT
b2xpZFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZSwgImNvbXB1dGVQYXJ0aWNsZVJvdGF0aW9uIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBpZiBgc2V0UGFydGljbGVzKClgIGNvbXB1
dGVzIHRoZSBwYXJ0aWNsZSByb3RhdGlvbnMgb3Igbm90LgorICAgICAgICAgKiBEZWZhdWx0IHZh
bHVlIDogdHJ1ZS4gVGhlIFNQUyBpcyBmYXN0ZXIgd2hlbiBpdCdzIHNldCB0byBmYWxzZS4KKyAg
ICAgICAgICogTm90ZSA6IHRoZSBwYXJ0aWNsZSByb3RhdGlvbnMgYXJlbid0IHN0b3JlZCB2YWx1
ZXMsIHNvIHNldHRpbmcgYGNvbXB1dGVQYXJ0aWNsZVJvdGF0aW9uYCB0byBmYWxzZSB3aWxsIHBy
ZXZlbnRzIHRoZSBwYXJ0aWNsZSB0byByb3RhdGUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb21wdXRlUGFydGljbGVS
b3RhdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRlbGxzIHRvIGBz
ZXRQYXJ0aWNsZXMoKWAgdG8gY29tcHV0ZSB0aGUgcGFydGljbGUgcm90YXRpb25zIG9yIG5vdC4K
KyAgICAgICAgICogRGVmYXVsdCB2YWx1ZSA6IHRydWUuIFRoZSBTUFMgaXMgZmFzdGVyIHdoZW4g
aXQncyBzZXQgdG8gZmFsc2UuCisgICAgICAgICAqIE5vdGUgOiB0aGUgcGFydGljbGUgcm90YXRp
b25zIGFyZW4ndCBzdG9yZWQgdmFsdWVzLCBzbyBzZXR0aW5nIGBjb21wdXRlUGFydGljbGVSb3Rh
dGlvbmAgdG8gZmFsc2Ugd2lsbCBwcmV2ZW50cyB0aGUgcGFydGljbGUgdG8gcm90YXRlLgorICAg
ICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7CisgICAgICAgICAgICB0aGlz
Ll9jb21wdXRlUGFydGljbGVSb3RhdGlvbiA9IHZhbDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFNvbGlkUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLCAiY29t
cHV0ZVBhcnRpY2xlQ29sb3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGlmIGBz
ZXRQYXJ0aWNsZXMoKWAgY29tcHV0ZXMgdGhlIHBhcnRpY2xlIGNvbG9ycyBvciBub3QuCisgICAg
ICAgICAqIERlZmF1bHQgdmFsdWUgOiB0cnVlLiBUaGUgU1BTIGlzIGZhc3RlciB3aGVuIGl0J3Mg
c2V0IHRvIGZhbHNlLgorICAgICAgICAgKiBOb3RlIDogdGhlIHBhcnRpY2xlIGNvbG9ycyBhcmUg
c3RvcmVkIHZhbHVlcywgc28gc2V0dGluZyBgY29tcHV0ZVBhcnRpY2xlQ29sb3JgIHRvIGZhbHNl
IHdpbGwga2VlcCB5ZXQgdGhlIGxhc3QgY29sb3JzIHNldC4KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVQYXJ0
aWNsZUNvbG9yOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGVsbHMgdG8g
YHNldFBhcnRpY2xlcygpYCB0byBjb21wdXRlIHRoZSBwYXJ0aWNsZSBjb2xvcnMgb3Igbm90Lgor
ICAgICAgICAgKiBEZWZhdWx0IHZhbHVlIDogdHJ1ZS4gVGhlIFNQUyBpcyBmYXN0ZXIgd2hlbiBp
dCdzIHNldCB0byBmYWxzZS4KKyAgICAgICAgICogTm90ZSA6IHRoZSBwYXJ0aWNsZSBjb2xvcnMg
YXJlIHN0b3JlZCB2YWx1ZXMsIHNvIHNldHRpbmcgYGNvbXB1dGVQYXJ0aWNsZUNvbG9yYCB0byBm
YWxzZSB3aWxsIGtlZXAgeWV0IHRoZSBsYXN0IGNvbG9ycyBzZXQuCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVQYXJ0
aWNsZUNvbG9yID0gdmFsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoU29saWRQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJjb21wdXRlUGFydGljbGVUZXh0
dXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBpZiBgc2V0UGFydGljbGVzKClg
IGNvbXB1dGVzIHRoZSBwYXJ0aWNsZSB0ZXh0dXJlcyBvciBub3QuCisgICAgICAgICAqIERlZmF1
bHQgdmFsdWUgOiB0cnVlLiBUaGUgU1BTIGlzIGZhc3RlciB3aGVuIGl0J3Mgc2V0IHRvIGZhbHNl
LgorICAgICAgICAgKiBOb3RlIDogdGhlIHBhcnRpY2xlIHRleHR1cmVzIGFyZSBzdG9yZWQgdmFs
dWVzLCBzbyBzZXR0aW5nIGBjb21wdXRlUGFydGljbGVUZXh0dXJlYCB0byBmYWxzZSB3aWxsIGtl
ZXAgeWV0IHRoZSBsYXN0IGNvbG9ycyBzZXQuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb21wdXRlUGFydGljbGVUZXh0
dXJlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2NvbXB1dGVQYXJ0aWNsZVRleHR1cmUgPSB2YWw7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb2xpZFBhcnRpY2xlU3lzdGVtLnByb3RvdHlw
ZSwgImNvbXB1dGVQYXJ0aWNsZVZlcnRleCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgaWYgYHNldFBhcnRpY2xlcygpYCBjYWxscyB0aGUgdmVydGV4IGZ1bmN0aW9uIGZvciBlYWNo
IHZlcnRleCBvZiBlYWNoIHBhcnRpY2xlLCBvciBub3QuCisgICAgICAgICAqIERlZmF1bHQgdmFs
dWUgOiBmYWxzZS4gVGhlIFNQUyBpcyBmYXN0ZXIgd2hlbiBpdCdzIHNldCB0byBmYWxzZS4KKyAg
ICAgICAgICogTm90ZSA6IHRoZSBwYXJ0aWNsZSBjdXN0b20gdmVydGV4IHBvc2l0aW9ucyBhcmVu
J3Qgc3RvcmVkIHZhbHVlcy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVQYXJ0aWNsZVZlcnRleDsKKyAgICAg
ICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRlbGxzIHRvIGBzZXRQYXJ0aWNsZXMoKWAg
dG8gY2FsbCB0aGUgdmVydGV4IGZ1bmN0aW9uIGZvciBlYWNoIHZlcnRleCBvZiBlYWNoIHBhcnRp
Y2xlLCBvciBub3QuCisgICAgICAgICAqIERlZmF1bHQgdmFsdWUgOiBmYWxzZS4gVGhlIFNQUyBp
cyBmYXN0ZXIgd2hlbiBpdCdzIHNldCB0byBmYWxzZS4KKyAgICAgICAgICogTm90ZSA6IHRoZSBw
YXJ0aWNsZSBjdXN0b20gdmVydGV4IHBvc2l0aW9ucyBhcmVuJ3Qgc3RvcmVkIHZhbHVlcy4KKyAg
ICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkgeworICAgICAgICAgICAgdGhp
cy5fY29tcHV0ZVBhcnRpY2xlVmVydGV4ID0gdmFsOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoU29saWRQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJjb21w
dXRlQm91bmRpbmdCb3giLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGlmIGBzZXRQ
YXJ0aWNsZXMoKWAgY29tcHV0ZXMgb3Igbm90IHRoZSBtZXNoIGJvdW5kaW5nIGJveCB3aGVuIGNv
bXB1dGluZyB0aGUgcGFydGljbGUgcG9zaXRpb25zLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUJvdW5kaW5n
Qm94OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGVsbHMgdG8gYHNldFBh
cnRpY2xlcygpYCB0byBjb21wdXRlIG9yIG5vdCB0aGUgbWVzaCBib3VuZGluZyBib3ggd2hlbiBj
b21wdXRpbmcgdGhlIHBhcnRpY2xlIHBvc2l0aW9ucy4KKyAgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbCkgeworICAgICAgICAgICAgdGhpcy5fY29tcHV0ZUJvdW5kaW5nQm94
ID0gdmFsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU29s
aWRQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJkZXB0aFNvcnRQYXJ0aWNsZXMiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIGlmIGBzZXRQYXJ0aWNsZXMoKWAgc29ydHMgb3Igbm90
IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcGFydGljbGUgYW5kIHRoZSBjYW1lcmEuCisgICAg
ICAgICAqIFNraXBwZWQgd2hlbiBgZW5hYmxlRGVwdGhTb3J0YCBpcyBzZXQgdG8gYGZhbHNlYCAo
ZGVmYXVsdCkgYXQgY29uc3RydWN0aW9uIHRpbWUuCisgICAgICAgICAqIERlZmF1bHQgOiBgdHJ1
ZWAKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2RlcHRoU29ydFBhcnRpY2xlczsKKyAgICAgICAgfSwKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFRlbGxzIHRvIGBzZXRQYXJ0aWNsZXMoKWAgdG8gc29ydCBvciBub3QgdGhl
IGRpc3RhbmNlIGJldHdlZW4gZWFjaCBwYXJ0aWNsZSBhbmQgdGhlIGNhbWVyYS4KKyAgICAgICAg
ICogU2tpcHBlZCB3aGVuIGBlbmFibGVEZXB0aFNvcnRgIGlzIHNldCB0byBgZmFsc2VgIChkZWZh
dWx0KSBhdCBjb25zdHJ1Y3Rpb24gdGltZS4KKyAgICAgICAgICogRGVmYXVsdCA6IGB0cnVlYAor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7CisgICAgICAgICAgICB0
aGlzLl9kZXB0aFNvcnRQYXJ0aWNsZXMgPSB2YWw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisgICAgLy8gUGFydGljbGUgYmVoYXZpb3IgbG9naWMKKyAgICAvLyB0
aGVzZSBmb2xsb3dpbmcgbWV0aG9kcyBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIHVzZXIgdG8g
Zml0IGhpcyBuZWVkcworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5n
LiBJdCBtYXkgYmUgb3ZlcndyaXR0ZW4gdG8gc2V0IGFsbCB0aGUgcGFydGljbGUgZmlyc3QgdmFs
dWVzLgorICAgICAqIFRoZSBTUFMgZG9lc24ndCBjYWxsIHRoaXMgZnVuY3Rpb24sIHlvdSBtYXkg
aGF2ZSB0byBjYWxsIGl0IGJ5IHlvdXIgb3duLgorICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI3BhcnRpY2xlLW1hbmFnZW1l
bnQKKyAgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5pbml0UGFydGlj
bGVzID0gZnVuY3Rpb24gKCkgeworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlv
biBkb2VzIG5vdGhpbmcuIEl0IG1heSBiZSBvdmVyd3JpdHRlbiB0byByZWN5Y2xlIGEgcGFydGlj
bGUuCisgICAgICogVGhlIFNQUyBkb2Vzbid0IGNhbGwgdGhpcyBmdW5jdGlvbiwgeW91IG1heSBo
YXZlIHRvIGNhbGwgaXQgYnkgeW91ciBvd24uCisgICAgICogZG9jIDogaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9Tb2xpZF9QYXJ0aWNsZV9TeXN0ZW0jcGFydGljbGUtbWFuYWdlbWVu
dAorICAgICAqIEBwYXJhbSBwYXJ0aWNsZSBUaGUgcGFydGljbGUgdG8gcmVjeWNsZQorICAgICAq
IEByZXR1cm5zIHRoZSByZWN5Y2xlZCBwYXJ0aWNsZQorICAgICAqLworICAgIFNvbGlkUGFydGlj
bGVTeXN0ZW0ucHJvdG90eXBlLnJlY3ljbGVQYXJ0aWNsZSA9IGZ1bmN0aW9uIChwYXJ0aWNsZSkg
eworICAgICAgICByZXR1cm4gcGFydGljbGU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRh
dGVzIGEgcGFydGljbGUgOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCAgYmUgb3ZlcndyaXR0ZW4gYnkg
dGhlIHVzZXIuCisgICAgICogSXQgaXMgY2FsbGVkIG9uIGVhY2ggcGFydGljbGUgYnkgYHNldFBh
cnRpY2xlcygpYC4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gY29kZSBlYWNoIHBhcnRpY2xlIGJlaGF2
aW9yLgorICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vU29saWRf
UGFydGljbGVfU3lzdGVtI3BhcnRpY2xlLW1hbmFnZW1lbnQKKyAgICAgKiBAZXhhbXBsZSA6IGp1
c3Qgc2V0IGEgcGFydGljbGUgcG9zaXRpb24gb3IgdmVsb2NpdHkgYW5kIHJlY3ljbGUgY29uZGl0
aW9ucworICAgICAqIEBwYXJhbSBwYXJ0aWNsZSBUaGUgcGFydGljbGUgdG8gdXBkYXRlCisgICAg
ICogQHJldHVybnMgdGhlIHVwZGF0ZWQgcGFydGljbGUKKyAgICAgKi8KKyAgICBTb2xpZFBhcnRp
Y2xlU3lzdGVtLnByb3RvdHlwZS51cGRhdGVQYXJ0aWNsZSA9IGZ1bmN0aW9uIChwYXJ0aWNsZSkg
eworICAgICAgICByZXR1cm4gcGFydGljbGU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRh
dGVzIGEgdmVydGV4IG9mIGEgcGFydGljbGUgOiBpdCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhl
IHVzZXIuCisgICAgICogVGhpcyB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIHZlcnRleCBwYXJ0aWNs
ZSBieSBgc2V0UGFydGljbGVzKClgIGlmIGBjb21wdXRlUGFydGljbGVWZXJ0ZXhgIGlzIHNldCB0
byB0cnVlIG9ubHkuCisgICAgICogQHBhcmFtIHBhcnRpY2xlIHRoZSBjdXJyZW50IHBhcnRpY2xl
CisgICAgICogQHBhcmFtIHZlcnRleCB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgY3VycmVudCBw
YXJ0aWNsZQorICAgICAqIEBwYXJhbSBwdCB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgdmVydGV4
IGluIHRoZSBwYXJ0aWNsZSBzaGFwZQorICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI3VwZGF0ZS1lYWNoLXBhcnRpY2xlLXNo
YXBlCisgICAgICogQGV4YW1wbGUgOiBqdXN0IHNldCBhIHZlcnRleCBwYXJ0aWNsZSBwb3NpdGlv
bgorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIHZlcnRleAorICAgICAqLworICAgIFNvbGlk
UGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLnVwZGF0ZVBhcnRpY2xlVmVydGV4ID0gZnVuY3Rpb24g
KHBhcnRpY2xlLCB2ZXJ0ZXgsIHB0KSB7CisgICAgICAgIHJldHVybiB2ZXJ0ZXg7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgdHJl
YXRtZW50IGJ5IGBzZXRQYXJ0aWNsZXMoKWAgYW5kIHdpbGwgYmUgcGFzc2VkIHRocmVlIHBhcmFt
ZXRlcnMuCisgICAgICogVGhpcyBkb2VzIG5vdGhpbmcgYW5kIG1heSBiZSBvdmVyd3JpdHRlbiBi
eSB0aGUgdXNlci4KKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIHBhcnRpY2xlIGluZGV4IGluIHRo
ZSBwYXJ0aWNsZSBhcnJheSB3aGVyZSB0byBzdG9wIHRvIGl0ZXJhdGUsIHNhbWUgdGhhbiB0aGUg
dmFsdWUgcGFzc2VkIHRvIHNldFBhcnRpY2xlKCkKKyAgICAgKiBAcGFyYW0gc3RvcCB0aGUgcGFy
dGljbGUgaW5kZXggaW4gdGhlIHBhcnRpY2xlIGFycmF5IHdoZXJlIHRvIHN0b3AgdG8gaXRlcmF0
ZSwgc2FtZSB0aGFuIHRoZSB2YWx1ZSBwYXNzZWQgdG8gc2V0UGFydGljbGUoKQorICAgICAqIEBw
YXJhbSB1cGRhdGUgdGhlIGJvb2xlYW4gdXBkYXRlIHZhbHVlIGFjdHVhbGx5IHBhc3NlZCB0byBz
ZXRQYXJ0aWNsZXMoKQorICAgICAqLworICAgIFNvbGlkUGFydGljbGVTeXN0ZW0ucHJvdG90eXBl
LmJlZm9yZVVwZGF0ZVBhcnRpY2xlcyA9IGZ1bmN0aW9uIChzdGFydCwgc3RvcCwgdXBkYXRlKSB7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIHdpbGwgYmUgY2FsbGVkICBieSBgc2V0UGFy
dGljbGVzKClgIGFmdGVyIGFsbCB0aGUgb3RoZXIgdHJlYXRtZW50cyBhbmQganVzdCBiZWZvcmUg
dGhlIGFjdHVhbCBtZXNoIHVwZGF0ZS4KKyAgICAgKiBUaGlzIHdpbGwgYmUgcGFzc2VkIHRocmVl
IHBhcmFtZXRlcnMuCisgICAgICogVGhpcyBkb2VzIG5vdGhpbmcgYW5kIG1heSBiZSBvdmVyd3Jp
dHRlbiBieSB0aGUgdXNlci4KKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIHBhcnRpY2xlIGluZGV4
IGluIHRoZSBwYXJ0aWNsZSBhcnJheSB3aGVyZSB0byBzdG9wIHRvIGl0ZXJhdGUsIHNhbWUgdGhh
biB0aGUgdmFsdWUgcGFzc2VkIHRvIHNldFBhcnRpY2xlKCkKKyAgICAgKiBAcGFyYW0gc3RvcCB0
aGUgcGFydGljbGUgaW5kZXggaW4gdGhlIHBhcnRpY2xlIGFycmF5IHdoZXJlIHRvIHN0b3AgdG8g
aXRlcmF0ZSwgc2FtZSB0aGFuIHRoZSB2YWx1ZSBwYXNzZWQgdG8gc2V0UGFydGljbGUoKQorICAg
ICAqIEBwYXJhbSB1cGRhdGUgdGhlIGJvb2xlYW4gdXBkYXRlIHZhbHVlIGFjdHVhbGx5IHBhc3Nl
ZCB0byBzZXRQYXJ0aWNsZXMoKQorICAgICAqLworICAgIFNvbGlkUGFydGljbGVTeXN0ZW0ucHJv
dG90eXBlLmFmdGVyVXBkYXRlUGFydGljbGVzID0gZnVuY3Rpb24gKHN0YXJ0LCBzdG9wLCB1cGRh
dGUpIHsKKyAgICB9OworICAgIHJldHVybiBTb2xpZFBhcnRpY2xlU3lzdGVtOworfSgpKTsKKwor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QYXJ0aWNsZXMvc3ViRW1pdHRlci50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1BhcnRpY2xlcy9z
dWJFbWl0dGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBTdWJFbWl0dGVyVHlwZSwgU3ViRW1pdHRlciAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdWJFbWl0dGVyVHlwZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gU3ViRW1pdHRlclR5cGU7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3ViRW1p
dHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3ViRW1pdHRlcjsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9N
YXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNf
YWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1l
c2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9t
ZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01pc2MvZGV2VG9vbHMgKi8gIi4vTWlzYy9kZXZUb29scy50cyIpOworCisK
KworCisvKioKKyAgICAgKiBUeXBlIG9mIHN1YiBlbWl0dGVyCisgICAgICovCit2YXIgU3ViRW1p
dHRlclR5cGU7CisoZnVuY3Rpb24gKFN1YkVtaXR0ZXJUeXBlKSB7CisgICAgLyoqCisgICAgICog
QXR0YWNoZWQgdG8gdGhlIHBhcnRpY2xlIG92ZXIgaXQncyBsaWZldGltZQorICAgICAqLworICAg
IFN1YkVtaXR0ZXJUeXBlW1N1YkVtaXR0ZXJUeXBlWyJBVFRBQ0hFRCJdID0gMF0gPSAiQVRUQUNI
RUQiOworICAgIC8qKgorICAgICAqIENyZWF0ZWQgd2hlbiB0aGUgcGFydGljbGUgZGllcworICAg
ICAqLworICAgIFN1YkVtaXR0ZXJUeXBlW1N1YkVtaXR0ZXJUeXBlWyJFTkQiXSA9IDFdID0gIkVO
RCI7Cit9KShTdWJFbWl0dGVyVHlwZSB8fCAoU3ViRW1pdHRlclR5cGUgPSB7fSkpOworLyoqCisg
KiBTdWIgZW1pdHRlciBjbGFzcyB1c2VkIHRvIGVtaXQgcGFydGljbGVzIGZyb20gYW4gZXhpc3Rp
bmcgcGFydGljbGUKKyAqLwordmFyIFN1YkVtaXR0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHN1YiBlbWl0dGVyCisgICAgICogQHBh
cmFtIHBhcnRpY2xlU3lzdGVtIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gdG8gYmUgdXNlZCBieSB0aGUg
c3ViIGVtaXR0ZXIKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdWJFbWl0dGVyKAorICAgIC8qKgor
ICAgICAqIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gdG8gYmUgdXNlZCBieSB0aGUgc3ViIGVtaXR0ZXIK
KyAgICAgKi8KKyAgICBwYXJ0aWNsZVN5c3RlbSkgeworICAgICAgICB0aGlzLnBhcnRpY2xlU3lz
dGVtID0gcGFydGljbGVTeXN0ZW07CisgICAgICAgIC8qKgorICAgICAgICAgKiBUeXBlIG9mIHRo
ZSBzdWJtaXR0ZXIgKERlZmF1bHQ6IEVORCkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudHlw
ZSA9IFN1YkVtaXR0ZXJUeXBlLkVORDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBw
YXJ0aWNsZSBzaG91bGQgaW5oZXJpdCB0aGUgZGlyZWN0aW9uIGZyb20gdGhlIHBhcnRpY2xlIGl0
J3MgYXR0YWNoZWQgdG8uICgrWSB3aWxsIGZhY2UgdGhlIGRpcmVjdGlvbiB0aGUgcGFydGljbGUg
aXMgbW92aW5nKSAoRGVmYXVsdDogZmFsc2UpCisgICAgICAgICAqIE5vdGU6IFRoaXMgb25seSBp
cyBzdXBwb3J0ZWQgd2hlbiB1c2luZyBhbiBlbWl0dGVyIG9mIHR5cGUgTWVzaAorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5pbmhlcml0RGlyZWN0aW9uID0gZmFsc2U7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBIb3cgbXVjaCBvZiB0aGUgYXR0YWNoZWQgcGFydGljbGVzIHNwZWVkIHNob3Vs
ZCBiZSBhZGRlZCB0byB0aGUgc3ViIGVtaXR0ZWQgcGFydGljbGUgKGRlZmF1bHQ6IDApCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLmluaGVyaXRlZFZlbG9jaXR5QW1vdW50ID0gMDsKKyAgICAg
ICAgLy8gQ3JlYXRlIG1lc2ggYXMgZW1pdHRlciB0byBzdXBwb3J0IHJvdGF0aW9uCisgICAgICAg
IGlmICghcGFydGljbGVTeXN0ZW0uZW1pdHRlciB8fCAhcGFydGljbGVTeXN0ZW0uZW1pdHRlci5k
aXNwb3NlKSB7CisgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5lbWl0dGVyID0gbmV3IF9NZXNo
ZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFic3RyYWN0TWVz
aCJdKCJTdWJlbWl0dGVyU3lzdGVtRW1pdHRlciIsIHBhcnRpY2xlU3lzdGVtLmdldFNjZW5lKCkp
OworICAgICAgICB9CisgICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgZGlzcG9zZSBvZiBzdWJlbWl0
dGVyIHdoZW4gc3lzdGVtIGlzIGRpc3Bvc2VkCisgICAgICAgIHBhcnRpY2xlU3lzdGVtLm9uRGlz
cG9zZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChwYXJ0aWNs
ZVN5c3RlbS5lbWl0dGVyICYmIHBhcnRpY2xlU3lzdGVtLmVtaXR0ZXIuZGlzcG9zZSkgeworICAg
ICAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmVtaXR0ZXIuZGlzcG9zZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICB9CisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBzdWIg
ZW1pdHRlcgorICAgICAqIEByZXR1cm5zIHRoZSBjbG9uZWQgc3ViIGVtaXR0ZXIKKyAgICAgKi8K
KyAgICBTdWJFbWl0dGVyLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
Ly8gQ2xvbmUgcGFydGljbGUgc3lzdGVtCisgICAgICAgIHZhciBlbWl0dGVyID0gdGhpcy5wYXJ0
aWNsZVN5c3RlbS5lbWl0dGVyOworICAgICAgICBpZiAoIWVtaXR0ZXIpIHsKKyAgICAgICAgICAg
IGVtaXR0ZXIgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlZlY3RvcjMiXSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVtaXR0ZXIg
aW5zdGFuY2VvZiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdKSB7CisgICAgICAgICAgICBlbWl0dGVyID0gZW1pdHRlci5jbG9uZSgpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVtaXR0ZXIgaW5zdGFuY2VvZiBfTWVzaGVzX2Fi
c3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdE1lc2giXSkg
eworICAgICAgICAgICAgZW1pdHRlciA9IG5ldyBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTWVzaCJdKCIiLCBlbWl0dGVyLmdldFNjZW5lKCkpOworICAgICAgICAg
ICAgZW1pdHRlci5pc1Zpc2libGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgY2xv
bmUgPSBuZXcgU3ViRW1pdHRlcih0aGlzLnBhcnRpY2xlU3lzdGVtLmNsb25lKCIiLCBlbWl0dGVy
KSk7CisgICAgICAgIC8vIENsb25lIHByb3BlcnRpZXMKKyAgICAgICAgY2xvbmUucGFydGljbGVT
eXN0ZW0ubmFtZSArPSAiQ2xvbmUiOworICAgICAgICBjbG9uZS50eXBlID0gdGhpcy50eXBlOwor
ICAgICAgICBjbG9uZS5pbmhlcml0RGlyZWN0aW9uID0gdGhpcy5pbmhlcml0RGlyZWN0aW9uOwor
ICAgICAgICBjbG9uZS5pbmhlcml0ZWRWZWxvY2l0eUFtb3VudCA9IHRoaXMuaW5oZXJpdGVkVmVs
b2NpdHlBbW91bnQ7CisgICAgICAgIGNsb25lLnBhcnRpY2xlU3lzdGVtLl9kaXNwb3NlRW1pdHRl
ck9uRGlzcG9zZSA9IHRydWU7CisgICAgICAgIGNsb25lLnBhcnRpY2xlU3lzdGVtLmRpc3Bvc2VP
blN0b3AgPSB0cnVlOworICAgICAgICByZXR1cm4gY2xvbmU7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXJpYWxpemUgY3VycmVudCBvYmplY3QgdG8gYSBKU09OIG9iamVjdAorICAgICAqIEBy
ZXR1cm5zIHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIFN1YkVtaXR0ZXIucHJv
dG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRp
b25PYmplY3QgPSB7fTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50eXBlID0gdGhpcy50
eXBlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmluaGVyaXREaXJlY3Rpb24gPSB0aGlz
LmluaGVyaXREaXJlY3Rpb247CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaW5oZXJpdGVk
VmVsb2NpdHlBbW91bnQgPSB0aGlzLmluaGVyaXRlZFZlbG9jaXR5QW1vdW50OworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LnBhcnRpY2xlU3lzdGVtID0gdGhpcy5wYXJ0aWNsZVN5c3RlbS5z
ZXJpYWxpemUoKTsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIFN1YkVtaXR0ZXIuX1BhcnNlUGFydGljbGVTeXN0ZW0g
PSBmdW5jdGlvbiAoc3lzdGVtLCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICB0aHJvdyBfTWlz
Y19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJfRGV2VG9vbHMiXS5XYXJu
SW1wb3J0KCJQYXJzZVBhcnRpY2xlIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgbmV3IFN1YkVtaXR0ZXIgZnJvbSBhIHNlcmlhbGl6ZWQgSlNPTiB2ZXJzaW9uCisgICAgICog
QHBhcmFtIHNlcmlhbGl6YXRpb25PYmplY3QgZGVmaW5lcyB0aGUgSlNPTiBvYmplY3QgdG8gcmVh
ZCBmcm9tCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAg
ICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSByb290VXJsIGZvciBkYXRhIGxvYWRpbmcK
KyAgICAgKiBAcmV0dXJucyBhIG5ldyBTdWJFbWl0dGVyCisgICAgICovCisgICAgU3ViRW1pdHRl
ci5QYXJzZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCkg
eworICAgICAgICB2YXIgc3lzdGVtID0gc2VyaWFsaXphdGlvbk9iamVjdC5wYXJ0aWNsZVN5c3Rl
bTsKKyAgICAgICAgdmFyIHN1YkVtaXR0ZXIgPSBuZXcgU3ViRW1pdHRlcihTdWJFbWl0dGVyLl9Q
YXJzZVBhcnRpY2xlU3lzdGVtKHN5c3RlbSwgc2NlbmUsIHJvb3RVcmwpKTsKKyAgICAgICAgc3Vi
RW1pdHRlci50eXBlID0gc2VyaWFsaXphdGlvbk9iamVjdC50eXBlOworICAgICAgICBzdWJFbWl0
dGVyLmluaGVyaXREaXJlY3Rpb24gPSBzZXJpYWxpemF0aW9uT2JqZWN0LmluaGVyaXREaXJlY3Rp
b247CisgICAgICAgIHN1YkVtaXR0ZXIuaW5oZXJpdGVkVmVsb2NpdHlBbW91bnQgPSBzZXJpYWxp
emF0aW9uT2JqZWN0LmluaGVyaXRlZFZlbG9jaXR5QW1vdW50OworICAgICAgICBzdWJFbWl0dGVy
LnBhcnRpY2xlU3lzdGVtLl9pc1N1YkVtaXR0ZXIgPSB0cnVlOworICAgICAgICByZXR1cm4gc3Vi
RW1pdHRlcjsKKyAgICB9OworICAgIC8qKiBSZWxlYXNlIGFzc29jaWF0ZWQgcmVzb3VyY2VzICov
CisgICAgU3ViRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5kaXNwb3NlKCk7CisgICAgfTsKKyAgICByZXR1cm4gU3Vi
RW1pdHRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGh5c2ljcy9QbHVn
aW5zL2FtbW9KU1BsdWdpbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vUGh5c2ljcy9QbHVnaW5zL2FtbW9KU1BsdWdpbi50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBBbW1vSlNQbHVnaW4gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQW1tb0pTUGx1Z2luIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBbW1vSlNQbHVn
aW47IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvbG9nZ2VyICovICIuL01pc2Mv
bG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BoeXNpY3NfcGh5c2ljc0lt
cG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9QaHlzaWNzL3BoeXNpY3NJbXBvc3RvciAqLyAiLi9QaHlzaWNzL3BoeXNpY3NJ
bXBvc3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9QaHlzaWNzX3BoeXNpY3NK
b2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vUGh5c2ljcy9waHlzaWNzSm9pbnQgKi8gIi4vUGh5c2ljcy9waHlzaWNzSm9pbnQu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVz
L2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01lc2hlc19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9tZXNoLnZlcnRleERhdGEgKi8g
Ii4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NZXNoZXNfQnVpbGRlcnNfc2hhcGVCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NZXNoZXMvQnVpbGRlcnMvc2hhcGVC
dWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9zaGFwZUJ1aWxkZXIudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVz
L0J1aWxkZXJzL2xpbmVzQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvbGluZXNCdWlsZGVy
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BoeXNpY3NSYXljYXN0UmVzdWx0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9w
aHlzaWNzUmF5Y2FzdFJlc3VsdCAqLyAiLi9QaHlzaWNzL3BoeXNpY3NSYXljYXN0UmVzdWx0LnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRo
cy9tYXRoLnNjYWxhciAqLyAiLi9NYXRocy9tYXRoLnNjYWxhci50cyIpOworCisKKworCisKKwor
CisKKworCisvKioKKyAqIEFtbW9KUyBQaHlzaWNzIHBsdWdpbgorICogQHNlZSBodHRwczovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by91c2luZ190aGVfcGh5c2ljc19lbmdpbmUKKyAqIEBzZWUg
aHR0cHM6Ly9naXRodWIuY29tL2tyaXBrZW4vYW1tby5qcy8KKyAqLwordmFyIEFtbW9KU1BsdWdp
biA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBJbml0aWFs
aXplcyB0aGUgYW1tb0pTIHBsdWdpbgorICAgICAqIEBwYXJhbSBfdXNlRGVsdGFGb3JXb3JsZFN0
ZXAgaWYgdGhlIHRpbWUgYmV0d2VlbiBmcmFtZXMgc2hvdWxkIGJlIHVzZWQgd2hlbiBjYWxjdWxh
dGluZyBwaHlzaWNzIHN0ZXBzIChEZWZhdWx0OiB0cnVlKQorICAgICAqIEBwYXJhbSBhbW1vSW5q
ZWN0aW9uIGNhbiBiZSB1c2VkIHRvIGluamVjdCB5b3VyIG93biBhbW1vIHJlZmVyZW5jZQorICAg
ICAqIEBwYXJhbSBvdmVybGFwcGluZ1BhaXJDYWNoZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHlv
dXIgb3duIG92ZXJsYXBwaW5nIHBhaXIgY2FjaGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBBbW1v
SlNQbHVnaW4oX3VzZURlbHRhRm9yV29ybGRTdGVwLCBhbW1vSW5qZWN0aW9uLCBvdmVybGFwcGlu
Z1BhaXJDYWNoZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoX3Vz
ZURlbHRhRm9yV29ybGRTdGVwID09PSB2b2lkIDApIHsgX3VzZURlbHRhRm9yV29ybGRTdGVwID0g
dHJ1ZTsgfQorICAgICAgICBpZiAoYW1tb0luamVjdGlvbiA9PT0gdm9pZCAwKSB7IGFtbW9Jbmpl
Y3Rpb24gPSBBbW1vOyB9CisgICAgICAgIGlmIChvdmVybGFwcGluZ1BhaXJDYWNoZSA9PT0gdm9p
ZCAwKSB7IG92ZXJsYXBwaW5nUGFpckNhY2hlID0gbnVsbDsgfQorICAgICAgICB0aGlzLl91c2VE
ZWx0YUZvcldvcmxkU3RlcCA9IF91c2VEZWx0YUZvcldvcmxkU3RlcDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgQW1tbyBsaWJyYXJ5CisgICAgICAgICAqLworICAg
ICAgICB0aGlzLmJqc0FNTU8gPSB7fTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE5hbWUgb2Yg
dGhlIHBsdWdpbgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5uYW1lID0gIkFtbW9KU1BsdWdp
biI7CisgICAgICAgIHRoaXMuX3RpbWVTdGVwID0gMSAvIDYwOworICAgICAgICB0aGlzLl9maXhl
ZFRpbWVTdGVwID0gMSAvIDYwOworICAgICAgICB0aGlzLl9tYXhTdGVwcyA9IDU7CisgICAgICAg
IHRoaXMuX3RtcFF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlF1YXRlcm5pb24iXSgpOworICAgICAgICB0aGlzLl90bXBDb250
YWN0Q2FsbGJhY2tSZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdG1wVmVjdG9yID0gbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0oKTsKKyAgICAgICAgdGhpcy5fdG1wTWF0cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXSgpOworICAgICAgICBpZiAodHlw
ZW9mIGFtbW9JbmplY3Rpb24gPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgIGFtbW9Jbmpl
Y3Rpb24odGhpcy5ianNBTU1PKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHRoaXMuYmpzQU1NTyA9IGFtbW9JbmplY3Rpb247CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCF0aGlzLmlzU3VwcG9ydGVkKCkpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJvcigiQW1tb0pTIGlzIG5vdCBhdmFp
bGFibGUuIFBsZWFzZSBtYWtlIHN1cmUgeW91IGluY2x1ZGVkIHRoZSBqcyBmaWxlLiIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHBo
eXNpY3Mgd29ybGQKKyAgICAgICAgdGhpcy5fY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IG5ldyB0
aGlzLmJqc0FNTU8uYnRTb2Z0Qm9keVJpZ2lkQm9keUNvbGxpc2lvbkNvbmZpZ3VyYXRpb24oKTsK
KyAgICAgICAgdGhpcy5fZGlzcGF0Y2hlciA9IG5ldyB0aGlzLmJqc0FNTU8uYnRDb2xsaXNpb25E
aXNwYXRjaGVyKHRoaXMuX2NvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOworICAgICAgICB0aGlzLl9v
dmVybGFwcGluZ1BhaXJDYWNoZSA9IG92ZXJsYXBwaW5nUGFpckNhY2hlIHx8IG5ldyB0aGlzLmJq
c0FNTU8uYnREYnZ0QnJvYWRwaGFzZSgpOworICAgICAgICB0aGlzLl9zb2x2ZXIgPSBuZXcgdGhp
cy5ianNBTU1PLmJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyKCk7CisgICAgICAg
IHRoaXMuX3NvZnRCb2R5U29sdmVyID0gbmV3IHRoaXMuYmpzQU1NTy5idERlZmF1bHRTb2Z0Qm9k
eVNvbHZlcigpOworICAgICAgICB0aGlzLndvcmxkID0gbmV3IHRoaXMuYmpzQU1NTy5idFNvZnRS
aWdpZER5bmFtaWNzV29ybGQodGhpcy5fZGlzcGF0Y2hlciwgdGhpcy5fb3ZlcmxhcHBpbmdQYWly
Q2FjaGUsIHRoaXMuX3NvbHZlciwgdGhpcy5fY29sbGlzaW9uQ29uZmlndXJhdGlvbiwgdGhpcy5f
c29mdEJvZHlTb2x2ZXIpOworICAgICAgICB0aGlzLl90bXBBbW1vQ29uY3JldGVDb250YWN0UmVz
dWx0Q2FsbGJhY2sgPSBuZXcgdGhpcy5ianNBTU1PLkNvbmNyZXRlQ29udGFjdFJlc3VsdENhbGxi
YWNrKCk7CisgICAgICAgIHRoaXMuX3RtcEFtbW9Db25jcmV0ZUNvbnRhY3RSZXN1bHRDYWxsYmFj
ay5hZGRTaW5nbGVSZXN1bHQgPSBmdW5jdGlvbiAoKSB7IF90aGlzLl90bXBDb250YWN0Q2FsbGJh
Y2tSZXN1bHQgPSB0cnVlOyB9OworICAgICAgICB0aGlzLl9yYXljYXN0UmVzdWx0ID0gbmV3IF9w
aHlzaWNzUmF5Y2FzdFJlc3VsdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQaHlzaWNz
UmF5Y2FzdFJlc3VsdCJdKCk7CisgICAgICAgIC8vIENyZWF0ZSB0ZW1wIGFtbW8gdmFyaWFibGVz
CisgICAgICAgIHRoaXMuX3RtcEFtbW9UcmFuc2Zvcm0gPSBuZXcgdGhpcy5ianNBTU1PLmJ0VHJh
bnNmb3JtKCk7CisgICAgICAgIHRoaXMuX3RtcEFtbW9UcmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsK
KyAgICAgICAgdGhpcy5fdG1wQW1tb1F1YXRlcm5pb24gPSBuZXcgdGhpcy5ianNBTU1PLmJ0UXVh
dGVybmlvbigwLCAwLCAwLCAxKTsKKyAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckEgPSBuZXcg
dGhpcy5ianNBTU1PLmJ0VmVjdG9yMygwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fdG1wQW1tb1Zl
Y3RvckIgPSBuZXcgdGhpcy5ianNBTU1PLmJ0VmVjdG9yMygwLCAwLCAwKTsKKyAgICAgICAgdGhp
cy5fdG1wQW1tb1ZlY3RvckMgPSBuZXcgdGhpcy5ianNBTU1PLmJ0VmVjdG9yMygwLCAwLCAwKTsK
KyAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckQgPSBuZXcgdGhpcy5ianNBTU1PLmJ0VmVjdG9y
MygwLCAwLCAwKTsKKyAgICB9CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ3Jhdml0eSBvZiB0
aGUgcGh5c2ljcyB3b3JsZCAobS8oc14yKSkKKyAgICAgKiBAcGFyYW0gZ3Jhdml0eSBHcmF2aXR5
IHRvIHNldAorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuc2V0R3Jhdml0eSA9
IGZ1bmN0aW9uIChncmF2aXR5KSB7CisgICAgICAgIHRoaXMuX3RtcEFtbW9WZWN0b3JBLnNldFZh
bHVlKGdyYXZpdHkueCwgZ3Jhdml0eS55LCBncmF2aXR5LnopOworICAgICAgICB0aGlzLndvcmxk
LnNldEdyYXZpdHkodGhpcy5fdG1wQW1tb1ZlY3RvckEpOworICAgICAgICB0aGlzLndvcmxkLmdl
dFdvcmxkSW5mbygpLnNldF9tX2dyYXZpdHkodGhpcy5fdG1wQW1tb1ZlY3RvckEpOworICAgIH07
CisgICAgLyoqCisgICAgICogQW1vdW50IG9mIHRpbWUgdG8gc3RlcCBmb3J3YXJkIG9uIGVhY2gg
ZnJhbWUgKG9ubHkgdXNlZCBpZiB1c2VEZWx0YUZvcldvcmxkU3RlcCBpcyBmYWxzZSBpbiB0aGUg
Y29uc3RydWN0b3IpCisgICAgICogQHBhcmFtIHRpbWVTdGVwIHRpbWVzdGVwIHRvIHVzZSBpbiBz
ZWNvbmRzCisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5zZXRUaW1lU3RlcCA9
IGZ1bmN0aW9uICh0aW1lU3RlcCkgeworICAgICAgICB0aGlzLl90aW1lU3RlcCA9IHRpbWVTdGVw
OworICAgIH07CisgICAgLyoqCisgICAgICogSW5jcmVtZW50IHRvIHN0ZXAgZm9yd2FyZCBpbiB0
aGUgcGh5c2ljcyBlbmdpbmUgKElmIHRpbWVTdGVwIGlzIHNldCB0byAxLzYwIGFuZCBmaXhlZFRp
bWVTdGVwIGlzIHNldCB0byAxLzEyMCB0aGUgcGh5c2ljcyBlbmdpbmUgc2hvdWxkIHJ1biAyIHN0
ZXBzIHBlciBmcmFtZSkgKERlZmF1bHQ6IDEvNjApCisgICAgICogQHBhcmFtIGZpeGVkVGltZVN0
ZXAgZml4ZWRUaW1lU3RlcCB0byB1c2UgaW4gc2Vjb25kcworICAgICAqLworICAgIEFtbW9KU1Bs
dWdpbi5wcm90b3R5cGUuc2V0Rml4ZWRUaW1lU3RlcCA9IGZ1bmN0aW9uIChmaXhlZFRpbWVTdGVw
KSB7CisgICAgICAgIHRoaXMuX2ZpeGVkVGltZVN0ZXAgPSBmaXhlZFRpbWVTdGVwOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3RlcHMgYnkgdGhl
IHBoeXNpY3MgZW5naW5lIHBlciBmcmFtZSAoRGVmYXVsdDogNSkKKyAgICAgKiBAcGFyYW0gbWF4
U3RlcHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN0ZXBzIGJ5IHRoZSBwaHlzaWNzIGVuZ2luZSBw
ZXIgZnJhbWUKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLnNldE1heFN0ZXBz
ID0gZnVuY3Rpb24gKG1heFN0ZXBzKSB7CisgICAgICAgIHRoaXMuX21heFN0ZXBzID0gbWF4U3Rl
cHM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHRpbWVzdGVwIChv
bmx5IHVzZWQgaWYgdXNlRGVsdGFGb3JXb3JsZFN0ZXAgaXMgZmFsc2UgaW4gdGhlIGNvbnN0cnVj
dG9yKQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHRpbWVzdGVwIGluIHNlY29uZHMKKyAg
ICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLmdldFRpbWVTdGVwID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdGltZVN0ZXA7CisgICAgfTsKKyAgICAvLyBBbW1v
J3MgY29udGFjdFRlc3QgYW5kIGNvbnRhY3RQYWlyVGVzdCB0YWtlIGEgY2FsbGJhY2sgdGhhdCBy
dW5zIHN5bmNocm9ub3VzbHksIHdyYXAgdGhlbSBzbyB0aGF0IHRoZXkgYXJlIGVhc2llciB0byBj
b25zdW1lCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5faXNJbXBvc3RvckluQ29udGFjdCA9
IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICB0aGlzLl90bXBDb250YWN0Q2FsbGJhY2tS
ZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy53b3JsZC5jb250YWN0VGVzdChpbXBvc3Rvci5w
aHlzaWNzQm9keSwgdGhpcy5fdG1wQW1tb0NvbmNyZXRlQ29udGFjdFJlc3VsdENhbGxiYWNrKTsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3RtcENvbnRhY3RDYWxsYmFja1Jlc3VsdDsKKyAgICB9Owor
ICAgIC8vIEFtbW8ncyBjb2xsaXNpb24gZXZlbnRzIGhhdmUgc29tZSB3ZWlyZCBxdWlya3MKKyAg
ICAvLyBjb250YWN0UGFpclRlc3QgZmlyZXMgdG9vIG1hbnkgZXZlbnRzIGFzIGl0IGZpcmVzIGV2
ZW50cyBldmVuIHdoZW4gb2JqZWN0cyBhcmUgY2xvc2UgdG9nZXRoZXIgYnV0IGNvbnRhY3RUZXN0
IGRvZXMgbm90CisgICAgLy8gc28gb25seSBmaXJlIGV2ZW50IGlmIGJvdGggY29udGFjdFRlc3Qg
YW5kIGNvbnRhY3RQYWlyVGVzdCBoYXZlIGEgaGl0CisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlw
ZS5faXNJbXBvc3RvclBhaXJJbkNvbnRhY3QgPSBmdW5jdGlvbiAoaW1wb3N0b3JBLCBpbXBvc3Rv
ckIpIHsKKyAgICAgICAgdGhpcy5fdG1wQ29udGFjdENhbGxiYWNrUmVzdWx0ID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMud29ybGQuY29udGFjdFBhaXJUZXN0KGltcG9zdG9yQS5waHlzaWNzQm9keSwg
aW1wb3N0b3JCLnBoeXNpY3NCb2R5LCB0aGlzLl90bXBBbW1vQ29uY3JldGVDb250YWN0UmVzdWx0
Q2FsbGJhY2spOworICAgICAgICByZXR1cm4gdGhpcy5fdG1wQ29udGFjdENhbGxiYWNrUmVzdWx0
OworICAgIH07CisgICAgLy8gQW1tbydzIGJlaGF2aW9yIHdoZW4gbWF4U3RlcHMgPiAwIGRvZXMg
bm90IGJlaGF2ZSBhcyBkZXNjcmliZWQgaW4gZG9jcworICAgIC8vIEBzZWUgaHR0cDovL3d3dy5i
dWxsZXRwaHlzaWNzLm9yZy9tZWRpYXdpa2ktMS41LjgvaW5kZXgucGhwL1N0ZXBwaW5nX1RoZV9X
b3JsZAorICAgIC8vCisgICAgLy8gV2hlbiBtYXhTdGVwcyBpcyAwIGRvIHRoZSBlbnRpcmUgc2lt
dWxhdGlvbiBpbiBvbmUgc3RlcAorICAgIC8vIFdoZW4gbWF4U3RlcHMgaXMgPiAwLCBydW4gdXAg
dG8gbWF4U3RlcCB0aW1lcywgaWYgb24gdGhlIGxhc3Qgc3RlcCB0aGUgKHJlbWFpbmluZyBzdGVw
IC0gZml4ZWRUaW1lU3RlcCkgaXMgPCBmaXhlZFRpbWVTdGVwLCB0aGUgcmVtYWluZGVyIHdpbGwg
YmUgdXNlZCBmb3IgdGhlIHN0ZXAuIChlZy4gaWYgcmVtYWluZGVyIGlzIDEuMDAxIGFuZCBmaXhl
ZFRpbWVTdGVwIGlzIDEgdGhlIGxhc3Qgc3RlcCB3aWxsIGJlIDEuMDAxLCBpZiBpbnN0ZWFkIGl0
IGRpZCAyIHN0ZXBzICgxLCAwLjAwMSkgaXNzdWVzIG9jY3VlcmVkIHdoZW4gaGF2aW5nIGEgdGlu
eSBzdGVwIGluIGFtbW8pCisgICAgLy8gTm90ZTogVG8gZ2V0IGRldGVybWluaXN0aWMgcGh5c2lj
cywgdGltZVN0ZXAgd291bGQgYWx3YXlzIG5lZWQgdG8gYmUgZGl2aXNpYmxlIGJ5IGZpeGVkVGlt
ZVN0ZXAKKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLl9zdGVwU2ltdWxhdGlvbiA9IGZ1bmN0
aW9uICh0aW1lU3RlcCwgbWF4U3RlcHMsIGZpeGVkVGltZVN0ZXApIHsKKyAgICAgICAgaWYgKHRp
bWVTdGVwID09PSB2b2lkIDApIHsgdGltZVN0ZXAgPSAxIC8gNjA7IH0KKyAgICAgICAgaWYgKG1h
eFN0ZXBzID09PSB2b2lkIDApIHsgbWF4U3RlcHMgPSAxMDsgfQorICAgICAgICBpZiAoZml4ZWRU
aW1lU3RlcCA9PT0gdm9pZCAwKSB7IGZpeGVkVGltZVN0ZXAgPSAxIC8gNjA7IH0KKyAgICAgICAg
aWYgKG1heFN0ZXBzID09IDApIHsKKyAgICAgICAgICAgIHRoaXMud29ybGQuc3RlcFNpbXVsYXRp
b24odGltZVN0ZXAsIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
d2hpbGUgKG1heFN0ZXBzID4gMCAmJiB0aW1lU3RlcCA+IDApIHsKKyAgICAgICAgICAgICAgICBp
ZiAodGltZVN0ZXAgLSBmaXhlZFRpbWVTdGVwIDwgZml4ZWRUaW1lU3RlcCkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLndvcmxkLnN0ZXBTaW11bGF0aW9uKHRpbWVTdGVwLCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGltZVN0ZXAgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGltZVN0ZXAgLT0gZml4ZWRUaW1l
U3RlcDsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JsZC5zdGVwU2ltdWxhdGlvbihmaXhl
ZFRpbWVTdGVwLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWF4U3Rl
cHMtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
TW92ZXMgdGhlIHBoeXNpY3Mgc2ltdWxhdGlvbiBmb3J3YXJkIGRlbHRhIHNlY29uZHMgYW5kIHVw
ZGF0ZXMgdGhlIGdpdmVuIHBoeXNpY3MgaW1wb3N0ZXJzCisgICAgICogUHJpb3IgdG8gdGhlIHN0
ZXAgdGhlIGltcG9zdGVycyBwaHlzaWNzIGxvY2F0aW9uIGlzIHNldCB0byB0aGUgcG9zaXRpb24g
b2YgdGhlIGJhYnlsb24gbWVzaGVzCisgICAgICogQWZ0ZXIgdGhlIHN0ZXAgdGhlIGJhYnlsb24g
bWVzaGVzIGFyZSBzZXQgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBwaHlzaWNzIGltcG9zdGVycwor
ICAgICAqIEBwYXJhbSBkZWx0YSBhbW91bnQgb2YgdGltZSB0byBzdGVwIGZvcndhcmQKKyAgICAg
KiBAcGFyYW0gaW1wb3N0b3JzIGFycmF5IG9mIGltcG9zdGVycyB0byB1cGRhdGUgYmVmb3JlL2Fm
dGVyIHRoZSBzdGVwCisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5leGVjdXRl
U3RlcCA9IGZ1bmN0aW9uIChkZWx0YSwgaW1wb3N0b3JzKSB7CisgICAgICAgIGZvciAodmFyIF9p
ID0gMCwgaW1wb3N0b3JzXzEgPSBpbXBvc3RvcnM7IF9pIDwgaW1wb3N0b3JzXzEubGVuZ3RoOyBf
aSsrKSB7CisgICAgICAgICAgICB2YXIgaW1wb3N0b3IgPSBpbXBvc3RvcnNfMVtfaV07CisgICAg
ICAgICAgICAvLyBVcGRhdGUgcGh5c2ljcyB3b3JsZCBvYmplY3RzIHRvIG1hdGNoIGJhYnlsb24g
d29ybGQKKyAgICAgICAgICAgIGlmICghaW1wb3N0b3Iuc29mdCkgeworICAgICAgICAgICAgICAg
IGltcG9zdG9yLmJlZm9yZVN0ZXAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9zdGVwU2ltdWxhdGlvbih0aGlzLl91c2VEZWx0YUZvcldvcmxkU3RlcCA/IGRlbHRh
IDogdGhpcy5fdGltZVN0ZXAsIHRoaXMuX21heFN0ZXBzLCB0aGlzLl9maXhlZFRpbWVTdGVwKTsK
KyAgICAgICAgZm9yICh2YXIgX2EgPSAwLCBpbXBvc3RvcnNfMiA9IGltcG9zdG9yczsgX2EgPCBp
bXBvc3RvcnNfMi5sZW5ndGg7IF9hKyspIHsKKyAgICAgICAgICAgIHZhciBtYWluSW1wb3N0b3Ig
PSBpbXBvc3RvcnNfMltfYV07CisgICAgICAgICAgICAvLyBBZnRlciBwaHlzaWNzIHVwZGF0ZSBt
YWtlIGJhYnlsb24gd29ybGQgb2JqZWN0cyBtYXRjaCBwaHlzaWNzIHdvcmxkIG9iamVjdHMKKyAg
ICAgICAgICAgIGlmIChtYWluSW1wb3N0b3Iuc29mdCkgeworICAgICAgICAgICAgICAgIHRoaXMu
X2FmdGVyU29mdFN0ZXAobWFpbkltcG9zdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIG1haW5JbXBvc3Rvci5hZnRlclN0ZXAoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIC8vIEhhbmRsZSBjb2xsaXNpb24gZXZlbnQKKyAgICAgICAg
ICAgIGlmIChtYWluSW1wb3N0b3IuX29uUGh5c2ljc0NvbGxpZGVDYWxsYmFja3MubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ltcG9zdG9ySW5Db250YWN0KG1haW5J
bXBvc3RvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBfYyA9IG1h
aW5JbXBvc3Rvci5fb25QaHlzaWNzQ29sbGlkZUNhbGxiYWNrczsgX2IgPCBfYy5sZW5ndGg7IF9i
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xsaWRlQ2FsbGJhY2sgPSBfY1tf
Yl07CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IDAsIF9lID0gY29sbGlk
ZUNhbGxiYWNrLm90aGVySW1wb3N0b3JzOyBfZCA8IF9lLmxlbmd0aDsgX2QrKykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBvdGhlckltcG9zdG9yID0gX2VbX2RdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWluSW1wb3N0b3IucGh5c2ljc0JvZHkuaXNBY3Rp
dmUoKSB8fCBvdGhlckltcG9zdG9yLnBoeXNpY3NCb2R5LmlzQWN0aXZlKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW1wb3N0b3JQYWlySW5Db250YWN0
KG1haW5JbXBvc3Rvciwgb3RoZXJJbXBvc3RvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1haW5JbXBvc3Rvci5vbkNvbGxpZGUoeyBib2R5OiBvdGhlckltcG9zdG9y
LnBoeXNpY3NCb2R5IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ro
ZXJJbXBvc3Rvci5vbkNvbGxpZGUoeyBib2R5OiBtYWluSW1wb3N0b3IucGh5c2ljc0JvZHkgfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFVwZGF0ZSBiYWJ5bG9uIG1lc2ggdG8gbWF0Y2ggcGh5c2ljcyB3b3Js
ZCBvYmplY3QKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0ZXIgdG8gbWF0Y2gKKyAgICAg
Ki8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLl9hZnRlclNvZnRTdGVwID0gZnVuY3Rpb24g
KGltcG9zdG9yKSB7CisgICAgICAgIGlmIChpbXBvc3Rvci50eXBlID09PSBfUGh5c2ljc19waHlz
aWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUGh5c2ljc0ltcG9zdG9y
Il0uUm9wZUltcG9zdG9yKSB7CisgICAgICAgICAgICB0aGlzLl9yb3BlU3RlcChpbXBvc3Rvcik7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9zb2Z0Ym9keU9y
Q2xvdGhTdGVwKGltcG9zdG9yKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
VXBkYXRlIGJhYnlsb24gbWVzaCB2ZXJ0aWNlcyB2ZXJ0aWNlcyB0byBtYXRjaCBwaHlzaWNzIHdv
cmxkIHNvZnRib2R5IG9yIGNsb3RoCisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdGVyIHRv
IG1hdGNoCisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5fcm9wZVN0ZXAgPSBm
dW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgdmFyIGJvZHlWZXJ0aWNlcyA9IGltcG9zdG9y
LnBoeXNpY3NCb2R5LmdldF9tX25vZGVzKCk7CisgICAgICAgIHZhciBuYlZlcnRpY2VzID0gYm9k
eVZlcnRpY2VzLnNpemUoKTsKKyAgICAgICAgdmFyIG5vZGU7CisgICAgICAgIHZhciBub2RlUG9z
aXRpb25zOworICAgICAgICB2YXIgeCwgeSwgejsKKyAgICAgICAgdmFyIHBhdGggPSBuZXcgQXJy
YXkoKTsKKyAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBuYlZlcnRpY2VzOyBuKyspIHsKKyAg
ICAgICAgICAgIG5vZGUgPSBib2R5VmVydGljZXMuYXQobik7CisgICAgICAgICAgICBub2RlUG9z
aXRpb25zID0gbm9kZS5nZXRfbV94KCk7CisgICAgICAgICAgICB4ID0gbm9kZVBvc2l0aW9ucy54
KCk7CisgICAgICAgICAgICB5ID0gbm9kZVBvc2l0aW9ucy55KCk7CisgICAgICAgICAgICB6ID0g
bm9kZVBvc2l0aW9ucy56KCk7CisgICAgICAgICAgICBwYXRoLnB1c2gobmV3IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oeCwgeSwgeikp
OworICAgICAgICB9CisgICAgICAgIHZhciBvYmplY3QgPSBpbXBvc3Rvci5vYmplY3Q7CisgICAg
ICAgIHZhciBzaGFwZSA9IGltcG9zdG9yLmdldFBhcmFtKCJzaGFwZSIpOworICAgICAgICBpZiAo
aW1wb3N0b3IuX2lzRnJvbUxpbmUpIHsKKyAgICAgICAgICAgIGltcG9zdG9yLm9iamVjdCA9IF9N
ZXNoZXNfQnVpbGRlcnNfbGluZXNCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19b
IkxpbmVzQnVpbGRlciJdLkNyZWF0ZUxpbmVzKCJsaW5lcyIsIHsgcG9pbnRzOiBwYXRoLCBpbnN0
YW5jZTogb2JqZWN0IH0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aW1wb3N0b3Iub2JqZWN0ID0gX01lc2hlc19CdWlsZGVyc19zaGFwZUJ1aWxkZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siU2hhcGVCdWlsZGVyIl0uRXh0cnVkZVNoYXBlKCJleHQiLCB7
IHNoYXBlOiBzaGFwZSwgcGF0aDogcGF0aCwgaW5zdGFuY2U6IG9iamVjdCB9KTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIGJhYnlsb24gbWVzaCB2ZXJ0aWNlcyB2
ZXJ0aWNlcyB0byBtYXRjaCBwaHlzaWNzIHdvcmxkIHNvZnRib2R5IG9yIGNsb3RoCisgICAgICog
QHBhcmFtIGltcG9zdG9yIGltcG9zdGVyIHRvIG1hdGNoCisgICAgICovCisgICAgQW1tb0pTUGx1
Z2luLnByb3RvdHlwZS5fc29mdGJvZHlPckNsb3RoU3RlcCA9IGZ1bmN0aW9uIChpbXBvc3Rvcikg
eworICAgICAgICB2YXIgbm9ybWFsRGlyZWN0aW9uID0gKGltcG9zdG9yLnR5cGUgPT09IF9QaHlz
aWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQaHlzaWNz
SW1wb3N0b3IiXS5DbG90aEltcG9zdG9yKSA/IDEgOiAtMTsKKyAgICAgICAgdmFyIG9iamVjdCA9
IGltcG9zdG9yLm9iamVjdDsKKyAgICAgICAgdmFyIHZlcnRleFBvc2l0aW9ucyA9IG9iamVjdC5n
ZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCF2ZXJ0ZXhQb3Np
dGlvbnMpIHsKKyAgICAgICAgICAgIHZlcnRleFBvc2l0aW9ucyA9IFtdOworICAgICAgICB9Cisg
ICAgICAgIHZhciB2ZXJ0ZXhOb3JtYWxzID0gb2JqZWN0LmdldFZlcnRpY2VzRGF0YShfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3Jt
YWxLaW5kKTsKKyAgICAgICAgaWYgKCF2ZXJ0ZXhOb3JtYWxzKSB7CisgICAgICAgICAgICB2ZXJ0
ZXhOb3JtYWxzID0gW107CisgICAgICAgIH0KKyAgICAgICAgdmFyIG5iVmVydGljZXMgPSB2ZXJ0
ZXhQb3NpdGlvbnMubGVuZ3RoIC8gMzsKKyAgICAgICAgdmFyIGJvZHlWZXJ0aWNlcyA9IGltcG9z
dG9yLnBoeXNpY3NCb2R5LmdldF9tX25vZGVzKCk7CisgICAgICAgIHZhciBub2RlOworICAgICAg
ICB2YXIgbm9kZVBvc2l0aW9uczsKKyAgICAgICAgdmFyIG5vZGVOb3JtYWxzOworICAgICAgICB2
YXIgeCwgeSwgejsKKyAgICAgICAgdmFyIG54LCBueSwgbno7CisgICAgICAgIGZvciAodmFyIG4g
PSAwOyBuIDwgbmJWZXJ0aWNlczsgbisrKSB7CisgICAgICAgICAgICBub2RlID0gYm9keVZlcnRp
Y2VzLmF0KG4pOworICAgICAgICAgICAgbm9kZVBvc2l0aW9ucyA9IG5vZGUuZ2V0X21feCgpOwor
ICAgICAgICAgICAgeCA9IG5vZGVQb3NpdGlvbnMueCgpOworICAgICAgICAgICAgeSA9IG5vZGVQ
b3NpdGlvbnMueSgpOworICAgICAgICAgICAgeiA9IG5vZGVQb3NpdGlvbnMueigpICogbm9ybWFs
RGlyZWN0aW9uOworICAgICAgICAgICAgdmFyIG5vZGVOb3JtYWxzID0gbm9kZS5nZXRfbV9uKCk7
CisgICAgICAgICAgICBueCA9IG5vZGVOb3JtYWxzLngoKTsKKyAgICAgICAgICAgIG55ID0gbm9k
ZU5vcm1hbHMueSgpOworICAgICAgICAgICAgbnogPSBub2RlTm9ybWFscy56KCkgKiBub3JtYWxE
aXJlY3Rpb247CisgICAgICAgICAgICB2ZXJ0ZXhQb3NpdGlvbnNbMyAqIG5dID0geDsKKyAgICAg
ICAgICAgIHZlcnRleFBvc2l0aW9uc1szICogbiArIDFdID0geTsKKyAgICAgICAgICAgIHZlcnRl
eFBvc2l0aW9uc1szICogbiArIDJdID0gejsKKyAgICAgICAgICAgIHZlcnRleE5vcm1hbHNbMyAq
IG5dID0gbng7CisgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxzWzMgKiBuICsgMV0gPSBueTsKKyAg
ICAgICAgICAgIHZlcnRleE5vcm1hbHNbMyAqIG4gKyAyXSA9IG56OworICAgICAgICB9CisgICAg
ICAgIHZhciB2ZXJ0ZXhfZGF0YSA9IG5ldyBfTWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAgICAgICAgdmVydGV4X2Rh
dGEucG9zaXRpb25zID0gdmVydGV4UG9zaXRpb25zOworICAgICAgICB2ZXJ0ZXhfZGF0YS5ub3Jt
YWxzID0gdmVydGV4Tm9ybWFsczsKKyAgICAgICAgdmVydGV4X2RhdGEudXZzID0gb2JqZWN0Lmdl
dFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICB2ZXJ0ZXhfZGF0YS5jb2xvcnMgPSBv
YmplY3QuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCk7CisgICAgICAgIGlmIChvYmplY3Qg
JiYgb2JqZWN0LmdldEluZGljZXMpIHsKKyAgICAgICAgICAgIHZlcnRleF9kYXRhLmluZGljZXMg
PSBvYmplY3QuZ2V0SW5kaWNlcygpOworICAgICAgICB9CisgICAgICAgIHZlcnRleF9kYXRhLmFw
cGx5VG9NZXNoKG9iamVjdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBcHBsaWVzIGFuIGlt
cHVsc2Ugb24gdGhlIGltcG9zdGVyCisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdGVyIHRv
IGFwcGx5IGltcHVsc2UgdG8KKyAgICAgKiBAcGFyYW0gZm9yY2UgYW1vdW50IG9mIGZvcmNlIHRv
IGJlIGFwcGxpZWQgdG8gdGhlIGltcG9zdGVyCisgICAgICogQHBhcmFtIGNvbnRhY3RQb2ludCB0
aGUgbG9jYXRpb24gdG8gYXBwbHkgdGhlIGltcHVsc2Ugb24gdGhlIGltcG9zdGVyCisgICAgICov
CisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5hcHBseUltcHVsc2UgPSBmdW5jdGlvbiAoaW1w
b3N0b3IsIGZvcmNlLCBjb250YWN0UG9pbnQpIHsKKyAgICAgICAgaWYgKCFpbXBvc3Rvci5zb2Z0
KSB7CisgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5hY3RpdmF0ZSgpOworICAgICAg
ICAgICAgdmFyIHdvcmxkUG9pbnQgPSB0aGlzLl90bXBBbW1vVmVjdG9yQTsKKyAgICAgICAgICAg
IHZhciBpbXB1bHNlID0gdGhpcy5fdG1wQW1tb1ZlY3RvckI7CisgICAgICAgICAgICAvLyBDb252
ZXJ0IGNvbnRhY3RQb2ludCBpbnRvIHdvcmxkIHNwYWNlCisgICAgICAgICAgICBpZiAoaW1wb3N0
b3Iub2JqZWN0ICYmIGltcG9zdG9yLm9iamVjdC5nZXRXb3JsZE1hdHJpeCkgeworICAgICAgICAg
ICAgICAgIGltcG9zdG9yLm9iamVjdC5nZXRXb3JsZE1hdHJpeCgpLmludmVydFRvUmVmKHRoaXMu
X3RtcE1hdHJpeCk7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVm
KGNvbnRhY3RQb2ludCwgdGhpcy5fdG1wTWF0cml4LCB0aGlzLl90bXBWZWN0b3IpOworICAgICAg
ICAgICAgICAgIGNvbnRhY3RQb2ludCA9IHRoaXMuX3RtcFZlY3RvcjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHdvcmxkUG9pbnQuc2V0VmFsdWUoY29udGFjdFBvaW50LngsIGNvbnRhY3RQ
b2ludC55LCBjb250YWN0UG9pbnQueik7CisgICAgICAgICAgICBpbXB1bHNlLnNldFZhbHVlKGZv
cmNlLngsIGZvcmNlLnksIGZvcmNlLnopOworICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0Jv
ZHkuYXBwbHlJbXB1bHNlKGltcHVsc2UsIHdvcmxkUG9pbnQpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkxvZ2dlciJdLldhcm4oIkNhbm5vdCBiZSBhcHBsaWVkIHRvIGEgc29mdCBib2R5Iik7
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEFwcGxpZXMgYSBmb3JjZSBvbiB0
aGUgaW1wb3N0ZXIKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0ZXIgdG8gYXBwbHkgZm9y
Y2UKKyAgICAgKiBAcGFyYW0gZm9yY2UgYW1vdW50IG9mIGZvcmNlIHRvIGJlIGFwcGxpZWQgdG8g
dGhlIGltcG9zdGVyCisgICAgICogQHBhcmFtIGNvbnRhY3RQb2ludCB0aGUgbG9jYXRpb24gdG8g
YXBwbHkgdGhlIGZvcmNlIG9uIHRoZSBpbXBvc3RlcgorICAgICAqLworICAgIEFtbW9KU1BsdWdp
bi5wcm90b3R5cGUuYXBwbHlGb3JjZSA9IGZ1bmN0aW9uIChpbXBvc3RvciwgZm9yY2UsIGNvbnRh
Y3RQb2ludCkgeworICAgICAgICBpZiAoIWltcG9zdG9yLnNvZnQpIHsKKyAgICAgICAgICAgIGlt
cG9zdG9yLnBoeXNpY3NCb2R5LmFjdGl2YXRlKCk7CisgICAgICAgICAgICB2YXIgd29ybGRQb2lu
dCA9IHRoaXMuX3RtcEFtbW9WZWN0b3JBOworICAgICAgICAgICAgdmFyIGltcHVsc2UgPSB0aGlz
Ll90bXBBbW1vVmVjdG9yQjsKKyAgICAgICAgICAgIC8vIENvbnZlcnQgY29udGFjdFBvaW50IGlu
dG8gd29ybGQgc3BhY2UKKyAgICAgICAgICAgIGlmIChpbXBvc3Rvci5vYmplY3QgJiYgaW1wb3N0
b3Iub2JqZWN0LmdldFdvcmxkTWF0cml4KSB7CisgICAgICAgICAgICAgICAgaW1wb3N0b3Iub2Jq
ZWN0LmdldFdvcmxkTWF0cml4KCkuaW52ZXJ0VG9SZWYodGhpcy5fdG1wTWF0cml4KTsKKyAgICAg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYoY29udGFjdFBvaW50LCB0aGlz
Ll90bXBNYXRyaXgsIHRoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgY29udGFjdFBv
aW50ID0gdGhpcy5fdG1wVmVjdG9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd29ybGRQ
b2ludC5zZXRWYWx1ZShjb250YWN0UG9pbnQueCwgY29udGFjdFBvaW50LnksIGNvbnRhY3RQb2lu
dC56KTsKKyAgICAgICAgICAgIGltcHVsc2Uuc2V0VmFsdWUoZm9yY2UueCwgZm9yY2UueSwgZm9y
Y2Uueik7CisgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5hcHBseUZvcmNlKGltcHVs
c2UsIHdvcmxkUG9pbnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
X01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4o
IkNhbm5vdCBiZSBhcHBsaWVkIHRvIGEgc29mdCBib2R5Iik7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBwaHlzaWNzIGJvZHkgdXNpbmcgdGhlIHBsdWdpbgor
ICAgICAqIEBwYXJhbSBpbXBvc3RvciB0aGUgaW1wb3N0ZXIgdG8gY3JlYXRlIHRoZSBwaHlzaWNz
IGJvZHkgb24KKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLmdlbmVyYXRlUGh5
c2ljc0JvZHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgLy8gTm90ZTogdGhpcyBt
ZXRob2Qgd2lsbCBub3QgYmUgY2FsbGVkIG9uIGNoaWxkIGltcG9zb3RycyBmb3IgY29tcG91bmQg
aW1wb3N0b3JzCisgICAgICAgIGltcG9zdG9yLl9wbHVnaW5EYXRhLnRvRGlzcG9zZSA9IFtdOwor
ICAgICAgICAvL3BhcmVudC1jaGlsZCByZWxhdGlvbnNoaXAKKyAgICAgICAgaWYgKGltcG9zdG9y
LnBhcmVudCkgeworICAgICAgICAgICAgaWYgKGltcG9zdG9yLnBoeXNpY3NCb2R5KSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5yZW1vdmVQaHlzaWNzQm9keShpbXBvc3Rvcik7CisgICAgICAgICAg
ICAgICAgaW1wb3N0b3IuZm9yY2VVcGRhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW1wb3N0b3IuaXNCb2R5SW5pdFJlcXVp
cmVkKCkpIHsKKyAgICAgICAgICAgIHZhciBjb2xTaGFwZSA9IHRoaXMuX2NyZWF0ZVNoYXBlKGlt
cG9zdG9yKTsKKyAgICAgICAgICAgIHZhciBtYXNzID0gaW1wb3N0b3IuZ2V0UGFyYW0oIm1hc3Mi
KTsKKyAgICAgICAgICAgIGltcG9zdG9yLl9wbHVnaW5EYXRhLm1hc3MgPSBtYXNzOworICAgICAg
ICAgICAgaWYgKGltcG9zdG9yLnNvZnQpIHsKKyAgICAgICAgICAgICAgICBjb2xTaGFwZS5nZXRf
bV9jZmcoKS5zZXRfY29sbGlzaW9ucygweDExKTsKKyAgICAgICAgICAgICAgICBjb2xTaGFwZS5n
ZXRfbV9jZmcoKS5zZXRfa0RQKGltcG9zdG9yLmdldFBhcmFtKCJkYW1waW5nIikpOworICAgICAg
ICAgICAgICAgIEFtbW8uY2FzdE9iamVjdChjb2xTaGFwZSwgQW1tby5idENvbGxpc2lvbk9iamVj
dCkuZ2V0Q29sbGlzaW9uU2hhcGUoKS5zZXRNYXJnaW4oaW1wb3N0b3IuZ2V0UGFyYW0oIm1hcmdp
biIpKTsKKyAgICAgICAgICAgICAgICBjb2xTaGFwZS5zZXRBY3RpdmF0aW9uU3RhdGUoQW1tb0pT
UGx1Z2luLkRJU0FCTEVfREVBQ1RJVkFUSU9OX0ZMQUcpOworICAgICAgICAgICAgICAgIHRoaXMu
d29ybGQuYWRkU29mdEJvZHkoY29sU2hhcGUsIDEsIC0xKTsKKyAgICAgICAgICAgICAgICBpbXBv
c3Rvci5waHlzaWNzQm9keSA9IGNvbFNoYXBlOworICAgICAgICAgICAgICAgIGltcG9zdG9yLl9w
bHVnaW5EYXRhLnRvRGlzcG9zZS5wdXNoKGNvbFNoYXBlKTsKKyAgICAgICAgICAgICAgICB0aGlz
LnNldEJvZHlQcmVzc3VyZShpbXBvc3RvciwgMCk7CisgICAgICAgICAgICAgICAgaWYgKGltcG9z
dG9yLnR5cGUgPT09IF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJQaHlzaWNzSW1wb3N0b3IiXS5Tb2Z0Ym9keUltcG9zdG9yKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2V0Qm9keVByZXNzdXJlKGltcG9zdG9yLCBpbXBvc3Rvci5nZXRQ
YXJhbSgicHJlc3N1cmUiKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRo
aXMuc2V0Qm9keVN0aWZmbmVzcyhpbXBvc3RvciwgaW1wb3N0b3IuZ2V0UGFyYW0oInN0aWZmbmVz
cyIpKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNldEJvZHlWZWxvY2l0eUl0ZXJhdGlvbnMoaW1w
b3N0b3IsIGltcG9zdG9yLmdldFBhcmFtKCJ2ZWxvY2l0eUl0ZXJhdGlvbnMiKSk7CisgICAgICAg
ICAgICAgICAgdGhpcy5zZXRCb2R5UG9zaXRpb25JdGVyYXRpb25zKGltcG9zdG9yLCBpbXBvc3Rv
ci5nZXRQYXJhbSgicG9zaXRpb25JdGVyYXRpb25zIikpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1v
LmJ0VmVjdG9yMygwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICB2YXIgc3RhcnRUcmFuc2Zvcm0g
PSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOworICAgICAgICAgICAgICAgIHN0YXJ0VHJhbnNmb3Jt
LnNldElkZW50aXR5KCk7CisgICAgICAgICAgICAgICAgaWYgKG1hc3MgIT09IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29sU2hhcGUuY2FsY3VsYXRlTG9jYWxJbmVydGlhKG1hc3MsIGxvY2Fs
SW5lcnRpYSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX3RtcEFt
bW9WZWN0b3JBLnNldFZhbHVlKGltcG9zdG9yLm9iamVjdC5wb3NpdGlvbi54LCBpbXBvc3Rvci5v
YmplY3QucG9zaXRpb24ueSwgaW1wb3N0b3Iub2JqZWN0LnBvc2l0aW9uLnopOworICAgICAgICAg
ICAgICAgIHRoaXMuX3RtcEFtbW9RdWF0ZXJuaW9uLnNldFZhbHVlKGltcG9zdG9yLm9iamVjdC5y
b3RhdGlvblF1YXRlcm5pb24ueCwgaW1wb3N0b3Iub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbi55
LCBpbXBvc3Rvci5vYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uLnosIGltcG9zdG9yLm9iamVjdC5y
b3RhdGlvblF1YXRlcm5pb24udyk7CisgICAgICAgICAgICAgICAgc3RhcnRUcmFuc2Zvcm0uc2V0
T3JpZ2luKHRoaXMuX3RtcEFtbW9WZWN0b3JBKTsKKyAgICAgICAgICAgICAgICBzdGFydFRyYW5z
Zm9ybS5zZXRSb3RhdGlvbih0aGlzLl90bXBBbW1vUXVhdGVybmlvbik7CisgICAgICAgICAgICAg
ICAgdmFyIG15TW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZShzdGFy
dFRyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgdmFyIHJiSW5mbyA9IG5ldyBBbW1vLmJ0Umln
aWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBteU1vdGlvblN0YXRlLCBjb2xTaGFwZSwgbG9j
YWxJbmVydGlhKTsKKyAgICAgICAgICAgICAgICB2YXIgYm9keSA9IG5ldyBBbW1vLmJ0UmlnaWRC
b2R5KHJiSW5mbyk7CisgICAgICAgICAgICAgICAgLy8gTWFrZSBvYmplY3RzIGtpbmVtYXRpYyBp
ZiBpdCdzIG1hc3MgaXMgMAorICAgICAgICAgICAgICAgIGlmIChtYXNzID09PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIGJvZHkuc2V0Q29sbGlzaW9uRmxhZ3MoYm9keS5nZXRDb2xsaXNpb25G
bGFncygpIHwgQW1tb0pTUGx1Z2luLktJTkVNQVRJQ19GTEFHKTsKKyAgICAgICAgICAgICAgICAg
ICAgYm9keS5zZXRBY3RpdmF0aW9uU3RhdGUoQW1tb0pTUGx1Z2luLkRJU0FCTEVfREVBQ1RJVkFU
SU9OX0ZMQUcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBEaXNhYmxl
IGNvbGxpc2lvbiBpZiBOb0ltcG9zdG9yLCBidXQga2VlcCBjb2xsaXNpb24gaWYgc2hhcGUgaXMg
YnRDb21wb3VuZFNoYXBlCisgICAgICAgICAgICAgICAgaWYgKGltcG9zdG9yLnR5cGUgPT0gX1Bo
eXNpY3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNp
Y3NJbXBvc3RvciJdLk5vSW1wb3N0b3IgJiYgIWNvbFNoYXBlLmdldENoaWxkU2hhcGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYm9keS5zZXRDb2xsaXNpb25GbGFncyhib2R5LmdldENvbGxpc2lv
bkZsYWdzKCkgfCBBbW1vSlNQbHVnaW4uRElTQUJMRV9DT0xMSVNJT05fRkxBRyk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMud29ybGQuYWRkUmlnaWRCb2R5KGJvZHkp
OworICAgICAgICAgICAgICAgIGltcG9zdG9yLnBoeXNpY3NCb2R5ID0gYm9keTsKKyAgICAgICAg
ICAgICAgICBpbXBvc3Rvci5fcGx1Z2luRGF0YS50b0Rpc3Bvc2UgPSBpbXBvc3Rvci5fcGx1Z2lu
RGF0YS50b0Rpc3Bvc2UuY29uY2F0KFtib2R5LCByYkluZm8sIG15TW90aW9uU3RhdGUsIHN0YXJ0
VHJhbnNmb3JtLCBsb2NhbEluZXJ0aWEsIGNvbFNoYXBlXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLnNldEJvZHlSZXN0aXR1dGlvbihpbXBvc3RvciwgaW1wb3N0b3IuZ2V0UGFy
YW0oInJlc3RpdHV0aW9uIikpOworICAgICAgICAgICAgdGhpcy5zZXRCb2R5RnJpY3Rpb24oaW1w
b3N0b3IsIGltcG9zdG9yLmdldFBhcmFtKCJmcmljdGlvbiIpKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgcGh5c2ljcyBib2R5IGZyb20gdGhlIGltcG9z
dGVyIGFuZCBkaXNwb3NlcyBvZiB0aGUgYm9keSdzIG1lbW9yeQorICAgICAqIEBwYXJhbSBpbXBv
c3RvciBpbXBvc3RlciB0byByZW1vdmUgdGhlIHBoeXNpY3MgYm9keSBmcm9tCisgICAgICovCisg
ICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5yZW1vdmVQaHlzaWNzQm9keSA9IGZ1bmN0aW9uIChp
bXBvc3RvcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy53
b3JsZCkgeworICAgICAgICAgICAgaWYgKGltcG9zdG9yLnNvZnQpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLndvcmxkLnJlbW92ZVNvZnRCb2R5KGltcG9zdG9yLnBoeXNpY3NCb2R5KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMud29ybGQu
cmVtb3ZlUmlnaWRCb2R5KGltcG9zdG9yLnBoeXNpY3NCb2R5KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChpbXBvc3Rvci5fcGx1Z2luRGF0YSkgeworICAgICAgICAgICAgICAgIGlt
cG9zdG9yLl9wbHVnaW5EYXRhLnRvRGlzcG9zZS5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7CisgICAg
ICAgICAgICAgICAgICAgIF90aGlzLmJqc0FNTU8uZGVzdHJveShkKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICBpbXBvc3Rvci5fcGx1Z2luRGF0YS50b0Rpc3Bvc2UgPSBb
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2Vu
ZXJhdGVzIGEgam9pbnQKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3JKb2ludCB0aGUgaW1wb3N0ZXIg
am9pbnQgdG8gY3JlYXRlIHRoZSBqb2ludCB3aXRoCisgICAgICovCisgICAgQW1tb0pTUGx1Z2lu
LnByb3RvdHlwZS5nZW5lcmF0ZUpvaW50ID0gZnVuY3Rpb24gKGltcG9zdG9ySm9pbnQpIHsKKyAg
ICAgICAgdmFyIG1haW5Cb2R5ID0gaW1wb3N0b3JKb2ludC5tYWluSW1wb3N0b3IucGh5c2ljc0Jv
ZHk7CisgICAgICAgIHZhciBjb25uZWN0ZWRCb2R5ID0gaW1wb3N0b3JKb2ludC5jb25uZWN0ZWRJ
bXBvc3Rvci5waHlzaWNzQm9keTsKKyAgICAgICAgaWYgKCFtYWluQm9keSB8fCAhY29ubmVjdGVk
Qm9keSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBqb2lu
dERhdGEgPSBpbXBvc3RvckpvaW50LmpvaW50LmpvaW50RGF0YTsKKyAgICAgICAgaWYgKCFqb2lu
dERhdGEubWFpblBpdm90KSB7CisgICAgICAgICAgICBqb2ludERhdGEubWFpblBpdm90ID0gbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0oMCwgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFqb2ludERhdGEuY29ubmVjdGVk
UGl2b3QpIHsKKyAgICAgICAgICAgIGpvaW50RGF0YS5jb25uZWN0ZWRQaXZvdCA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAs
IDAsIDApOworICAgICAgICB9CisgICAgICAgIHZhciBqb2ludDsKKyAgICAgICAgc3dpdGNoIChp
bXBvc3RvckpvaW50LmpvaW50LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5
c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBoeXNpY3NKb2ludCJdLkRp
c3RhbmNlSm9pbnQ6CisgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gam9pbnREYXRhLm1h
eERpc3RhbmNlOworICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSkgeworICAgICAgICAgICAg
ICAgICAgICBqb2ludERhdGEubWFpblBpdm90ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMCwgLWRpc3RhbmNlIC8gMiwgMCk7
CisgICAgICAgICAgICAgICAgICAgIGpvaW50RGF0YS5jb25uZWN0ZWRQaXZvdCA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAs
IGRpc3RhbmNlIC8gMiwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGpv
aW50ID0gbmV3IEFtbW8uYnRQb2ludDJQb2ludENvbnN0cmFpbnQobWFpbkJvZHksIGNvbm5lY3Rl
ZEJvZHksIG5ldyBBbW1vLmJ0VmVjdG9yMyhqb2ludERhdGEubWFpblBpdm90LngsIGpvaW50RGF0
YS5tYWluUGl2b3QueSwgam9pbnREYXRhLm1haW5QaXZvdC56KSwgbmV3IEFtbW8uYnRWZWN0b3Iz
KGpvaW50RGF0YS5jb25uZWN0ZWRQaXZvdC54LCBqb2ludERhdGEuY29ubmVjdGVkUGl2b3QueSwg
am9pbnREYXRhLmNvbm5lY3RlZFBpdm90LnopKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlBoeXNpY3NKb2ludCJdLkhpbmdlSm9pbnQ6CisgICAgICAgICAgICAgICAgaWYg
KCFqb2ludERhdGEubWFpbkF4aXMpIHsKKyAgICAgICAgICAgICAgICAgICAgam9pbnREYXRhLm1h
aW5BeGlzID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJWZWN0b3IzIl0oMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICgham9pbnREYXRhLmNvbm5lY3RlZEF4aXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
am9pbnREYXRhLmNvbm5lY3RlZEF4aXMgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdmFyIG1haW5BeGlzID0gbmV3IEFtbW8uYnRWZWN0b3IzKGpv
aW50RGF0YS5tYWluQXhpcy54LCBqb2ludERhdGEubWFpbkF4aXMueSwgam9pbnREYXRhLm1haW5B
eGlzLnopOworICAgICAgICAgICAgICAgIHZhciBjb25uZWN0ZWRBeGlzID0gbmV3IEFtbW8uYnRW
ZWN0b3IzKGpvaW50RGF0YS5jb25uZWN0ZWRBeGlzLngsIGpvaW50RGF0YS5jb25uZWN0ZWRBeGlz
LnksIGpvaW50RGF0YS5jb25uZWN0ZWRBeGlzLnopOworICAgICAgICAgICAgICAgIGpvaW50ID0g
bmV3IEFtbW8uYnRIaW5nZUNvbnN0cmFpbnQobWFpbkJvZHksIGNvbm5lY3RlZEJvZHksIG5ldyBB
bW1vLmJ0VmVjdG9yMyhqb2ludERhdGEubWFpblBpdm90LngsIGpvaW50RGF0YS5tYWluUGl2b3Qu
eSwgam9pbnREYXRhLm1haW5QaXZvdC56KSwgbmV3IEFtbW8uYnRWZWN0b3IzKGpvaW50RGF0YS5j
b25uZWN0ZWRQaXZvdC54LCBqb2ludERhdGEuY29ubmVjdGVkUGl2b3QueSwgam9pbnREYXRhLmNv
bm5lY3RlZFBpdm90LnopLCBtYWluQXhpcywgY29ubmVjdGVkQXhpcyk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NKb2ludF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaHlzaWNzSm9pbnQiXS5CYWxsQW5kU29ja2V0Sm9pbnQ6
CisgICAgICAgICAgICAgICAgam9pbnQgPSBuZXcgQW1tby5idFBvaW50MlBvaW50Q29uc3RyYWlu
dChtYWluQm9keSwgY29ubmVjdGVkQm9keSwgbmV3IEFtbW8uYnRWZWN0b3IzKGpvaW50RGF0YS5t
YWluUGl2b3QueCwgam9pbnREYXRhLm1haW5QaXZvdC55LCBqb2ludERhdGEubWFpblBpdm90Lnop
LCBuZXcgQW1tby5idFZlY3RvcjMoam9pbnREYXRhLmNvbm5lY3RlZFBpdm90LngsIGpvaW50RGF0
YS5jb25uZWN0ZWRQaXZvdC55LCBqb2ludERhdGEuY29ubmVjdGVkUGl2b3QueikpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBf
TWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uV2Fybigi
Sm9pbnRUeXBlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSBBbW1vIHBsdWdpbiwgZmFs
bGluZyBiYWNrIHRvIFBoeXNpY3NKb2ludC5CYWxsQW5kU29ja2V0Sm9pbnQiKTsKKyAgICAgICAg
ICAgICAgICBqb2ludCA9IG5ldyBBbW1vLmJ0UG9pbnQyUG9pbnRDb25zdHJhaW50KG1haW5Cb2R5
LCBjb25uZWN0ZWRCb2R5LCBuZXcgQW1tby5idFZlY3RvcjMoam9pbnREYXRhLm1haW5QaXZvdC54
LCBqb2ludERhdGEubWFpblBpdm90LnksIGpvaW50RGF0YS5tYWluUGl2b3QueiksIG5ldyBBbW1v
LmJ0VmVjdG9yMyhqb2ludERhdGEuY29ubmVjdGVkUGl2b3QueCwgam9pbnREYXRhLmNvbm5lY3Rl
ZFBpdm90LnksIGpvaW50RGF0YS5jb25uZWN0ZWRQaXZvdC56KSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy53b3JsZC5hZGRDb25zdHJhaW50KGpvaW50
LCAhaW1wb3N0b3JKb2ludC5qb2ludC5qb2ludERhdGEuY29sbGlzaW9uKTsKKyAgICAgICAgaW1w
b3N0b3JKb2ludC5qb2ludC5waHlzaWNzSm9pbnQgPSBqb2ludDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJlbW92ZXMgYSBqb2ludAorICAgICAqIEBwYXJhbSBpbXBvc3RvckpvaW50IHRoZSBp
bXBvc3RlciBqb2ludCB0byByZW1vdmUgdGhlIGpvaW50IGZyb20KKyAgICAgKi8KKyAgICBBbW1v
SlNQbHVnaW4ucHJvdG90eXBlLnJlbW92ZUpvaW50ID0gZnVuY3Rpb24gKGltcG9zdG9ySm9pbnQp
IHsKKyAgICAgICAgaWYgKHRoaXMud29ybGQpIHsKKyAgICAgICAgICAgIHRoaXMud29ybGQucmVt
b3ZlQ29uc3RyYWludChpbXBvc3RvckpvaW50LmpvaW50LnBoeXNpY3NKb2ludCk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8vIGFkZHMgYWxsIHZlcnRpY2llcyAoaW5jbHVkaW5nIGNoaWxkIHZl
cnRpY2llcykgdG8gdGhlIHRyaWFuZ2xlIG1lc2gKKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBl
Ll9hZGRNZXNoVmVydHMgPSBmdW5jdGlvbiAoYnRUcmlhbmdsZU1lc2gsIHRvcExldmVsT2JqZWN0
LCBvYmplY3QpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIHRyaWFu
Z2xlQ291bnQgPSAwOworICAgICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC5nZXRJbmRpY2VzICYm
IG9iamVjdC5nZXRXb3JsZE1hdHJpeCAmJiBvYmplY3QuZ2V0Q2hpbGRNZXNoZXMpIHsKKyAgICAg
ICAgICAgIHZhciBpbmRpY2VzID0gb2JqZWN0LmdldEluZGljZXMoKTsKKyAgICAgICAgICAgIGlm
ICghaW5kaWNlcykgeworICAgICAgICAgICAgICAgIGluZGljZXMgPSBbXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciB2ZXJ0ZXhQb3NpdGlvbnMgPSBvYmplY3QuZ2V0VmVydGljZXNE
YXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1
ZmZlciJdLlBvc2l0aW9uS2luZCk7CisgICAgICAgICAgICBpZiAoIXZlcnRleFBvc2l0aW9ucykg
eworICAgICAgICAgICAgICAgIHZlcnRleFBvc2l0aW9ucyA9IFtdOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgb2JqZWN0LmNvbXB1dGVXb3JsZE1hdHJpeChmYWxzZSk7CisgICAgICAgICAg
ICB2YXIgZmFjZUNvdW50ID0gaW5kaWNlcy5sZW5ndGggLyAzOworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBmYWNlQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciB0cmlQ
b2ludHMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBwb2ludCA9IDA7IHBvaW50IDwg
MzsgcG9pbnQrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKHZlcnRleFBv
c2l0aW9uc1soaW5kaWNlc1soaSAqIDMpICsgcG9pbnRdICogMykgKyAwXSwgdmVydGV4UG9zaXRp
b25zWyhpbmRpY2VzWyhpICogMykgKyBwb2ludF0gKiAzKSArIDFdLCB2ZXJ0ZXhQb3NpdGlvbnNb
KGluZGljZXNbKGkgKiAzKSArIHBvaW50XSAqIDMpICsgMl0pOworICAgICAgICAgICAgICAgICAg
ICAvLyBBZGp1c3QgZm9yIGluaXRpYWwgc2NhbGluZworICAgICAgICAgICAgICAgICAgICBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWF0cml4Il0uU2Nh
bGluZ1RvUmVmKG9iamVjdC5zY2FsaW5nLngsIG9iamVjdC5zY2FsaW5nLnksIG9iamVjdC5zY2Fs
aW5nLnosIHRoaXMuX3RtcE1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgIHYgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5z
Zm9ybUNvb3JkaW5hdGVzKHYsIHRoaXMuX3RtcE1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAg
IHZhciB2ZWM7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludCA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2ZWMgPSB0aGlzLl90bXBBbW1vVmVjdG9yQTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwb2ludCA9PSAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2ZWMgPSB0aGlzLl90bXBBbW1vVmVjdG9yQjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZlYyA9IHRoaXMuX3RtcEFtbW9WZWN0b3JDOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZlYy5zZXRWYWx1ZSh2LngsIHYueSwgdi56KTsK
KyAgICAgICAgICAgICAgICAgICAgdHJpUG9pbnRzLnB1c2godmVjKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnRUcmlhbmdsZU1lc2guYWRkVHJpYW5nbGUodHJpUG9pbnRz
WzBdLCB0cmlQb2ludHNbMV0sIHRyaVBvaW50c1syXSk7CisgICAgICAgICAgICAgICAgdHJpYW5n
bGVDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2JqZWN0LmdldENoaWxkTWVz
aGVzKCkuZm9yRWFjaChmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgICAgIHRyaWFuZ2xlQ291
bnQgKz0gX3RoaXMuX2FkZE1lc2hWZXJ0cyhidFRyaWFuZ2xlTWVzaCwgdG9wTGV2ZWxPYmplY3Qs
IG0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRyaWFuZ2xl
Q291bnQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXNlIHRoZSBzb2Z0IGJvZHkg
dmVydGljZXMgdG8gbWF0Y2ggaXRzIG9iamVjdCdzIChtZXNoKSB2ZXJ0aWNlcworICAgICAqIFNv
ZnRib2R5IHZlcnRpY2VzIChub2RlcykgYXJlIGluIHdvcmxkIHNwYWNlIGFuZCB0byBtYXRjaCB0
aGlzCisgICAgICogVGhlIG9iamVjdCdzIHBvc2l0aW9uIGFuZCByb3RhdGlvbiBpcyBzZXQgdG8g
emVybyBhbmQgc28gaXRzIHZlcnRpY2VzIGFyZSBhbHNvIHRoZW4gc2V0IGluIHdvcmxkIHNwYWNl
CisgICAgICogQHBhcmFtIGltcG9zdG9yIHRvIGNyZWF0ZSB0aGUgc29mdGJvZHkgZm9yCisgICAg
ICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5fc29mdFZlcnRleERhdGEgPSBmdW5jdGlv
biAoaW1wb3N0b3IpIHsKKyAgICAgICAgdmFyIG9iamVjdCA9IGltcG9zdG9yLm9iamVjdDsKKyAg
ICAgICAgaWYgKG9iamVjdCAmJiBvYmplY3QuZ2V0SW5kaWNlcyAmJiBvYmplY3QuZ2V0V29ybGRN
YXRyaXggJiYgb2JqZWN0LmdldENoaWxkTWVzaGVzKSB7CisgICAgICAgICAgICB2YXIgaW5kaWNl
cyA9IG9iamVjdC5nZXRJbmRpY2VzKCk7CisgICAgICAgICAgICBpZiAoIWluZGljZXMpIHsKKyAg
ICAgICAgICAgICAgICBpbmRpY2VzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2
YXIgdmVydGV4UG9zaXRpb25zID0gb2JqZWN0LmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktp
bmQpOworICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhQb3NpdGlvbnMpIHsKKyAgICAgICAgICAgICAg
ICB2ZXJ0ZXhQb3NpdGlvbnMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB2
ZXJ0ZXhOb3JtYWxzID0gb2JqZWN0LmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKTsKKyAg
ICAgICAgICAgIGlmICghdmVydGV4Tm9ybWFscykgeworICAgICAgICAgICAgICAgIHZlcnRleE5v
cm1hbHMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9iamVjdC5jb21wdXRlV29y
bGRNYXRyaXgoZmFsc2UpOworICAgICAgICAgICAgdmFyIG5ld1BvaW50cyA9IFtdOworICAgICAg
ICAgICAgdmFyIG5ld05vcm1zID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHZlcnRleFBvc2l0aW9ucy5sZW5ndGg7IGkgKz0gMykgeworICAgICAgICAgICAgICAgIHZhciB2
ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0odmVydGV4UG9zaXRpb25zW2ldLCB2ZXJ0ZXhQb3NpdGlvbnNbaSArIDFdLCB2ZXJ0
ZXhQb3NpdGlvbnNbaSArIDJdKTsKKyAgICAgICAgICAgICAgICB2YXIgbiA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKHZlcnRl
eE5vcm1hbHNbaV0sIHZlcnRleE5vcm1hbHNbaSArIDFdLCB2ZXJ0ZXhOb3JtYWxzW2kgKyAyXSk7
CisgICAgICAgICAgICAgICAgdiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXModiwgb2JqZWN0Lmdl
dFdvcmxkTWF0cml4KCkpOworICAgICAgICAgICAgICAgIG4gPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbChu
LCBvYmplY3QuZ2V0V29ybGRNYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgbmV3UG9pbnRzLnB1
c2godi54LCB2LnksIHYueik7CisgICAgICAgICAgICAgICAgbmV3Tm9ybXMucHVzaChuLngsIG4u
eSwgbi56KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB2ZXJ0ZXhfZGF0YSA9IG5l
dyBfTWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJW
ZXJ0ZXhEYXRhIl0oKTsKKyAgICAgICAgICAgIHZlcnRleF9kYXRhLnBvc2l0aW9ucyA9IG5ld1Bv
aW50czsKKyAgICAgICAgICAgIHZlcnRleF9kYXRhLm5vcm1hbHMgPSBuZXdOb3JtczsKKyAgICAg
ICAgICAgIHZlcnRleF9kYXRhLnV2cyA9IG9iamVjdC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5k
KTsKKyAgICAgICAgICAgIHZlcnRleF9kYXRhLmNvbG9ycyA9IG9iamVjdC5nZXRWZXJ0aWNlc0Rh
dGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVydGV4QnVm
ZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAgICAgICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LmdldElu
ZGljZXMpIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5pbmRpY2VzID0gb2JqZWN0Lmdl
dEluZGljZXMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZlcnRleF9kYXRhLmFwcGx5
VG9NZXNoKG9iamVjdCk7CisgICAgICAgICAgICBvYmplY3QucG9zaXRpb24gPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsK
KyAgICAgICAgICAgIG9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24gPSBudWxsOworICAgICAgICAg
ICAgb2JqZWN0LnJvdGF0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICBvYmplY3QuY29tcHV0
ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHZlcnRleF9kYXRhOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBfTWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhEYXRhIl0uRXh0cmFjdEZyb21NZXNoKG9iamVjdCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYW4gaW1wb3N0b3IncyBzb2Z0IGJvZHkK
KyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgdG8gY3JlYXRlIHRoZSBzb2Z0Ym9keSBmb3IKKyAgICAg
Ki8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLl9jcmVhdGVTb2Z0Ym9keSA9IGZ1bmN0aW9u
IChpbXBvc3RvcikgeworICAgICAgICB2YXIgb2JqZWN0ID0gaW1wb3N0b3Iub2JqZWN0OworICAg
ICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC5nZXRJbmRpY2VzKSB7CisgICAgICAgICAgICB2YXIg
aW5kaWNlcyA9IG9iamVjdC5nZXRJbmRpY2VzKCk7CisgICAgICAgICAgICBpZiAoIWluZGljZXMp
IHsKKyAgICAgICAgICAgICAgICBpbmRpY2VzID0gW107CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgdmVydGV4X2RhdGEgPSB0aGlzLl9zb2Z0VmVydGV4RGF0YShpbXBvc3Rvcik7Cisg
ICAgICAgICAgICB2YXIgdmVydGV4UG9zaXRpb25zID0gdmVydGV4X2RhdGEucG9zaXRpb25zOwor
ICAgICAgICAgICAgdmFyIHZlcnRleE5vcm1hbHMgPSB2ZXJ0ZXhfZGF0YS5ub3JtYWxzOworICAg
ICAgICAgICAgaWYgKHZlcnRleFBvc2l0aW9ucyA9PT0gbnVsbCB8fCB2ZXJ0ZXhOb3JtYWxzID09
PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBbW1vLmJ0Q29tcG91bmRTaGFw
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
dmFyIHRyaVBvaW50cyA9IFtdOworICAgICAgICAgICAgICAgIHZhciB0cmlOb3JtcyA9IFtdOwor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmVydGV4UG9zaXRpb25zLmxlbmd0
aDsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB2ID0gbmV3IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0odmVydGV4UG9z
aXRpb25zW2ldLCB2ZXJ0ZXhQb3NpdGlvbnNbaSArIDFdLCB2ZXJ0ZXhQb3NpdGlvbnNbaSArIDJd
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSh2ZXJ0ZXhOb3JtYWxzW2ldLCB2
ZXJ0ZXhOb3JtYWxzW2kgKyAxXSwgdmVydGV4Tm9ybWFsc1tpICsgMl0pOworICAgICAgICAgICAg
ICAgICAgICB0cmlQb2ludHMucHVzaCh2LngsIHYueSwgLXYueik7CisgICAgICAgICAgICAgICAg
ICAgIHRyaU5vcm1zLnB1c2gobi54LCBuLnksIC1uLnopOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB2YXIgc29mdEJvZHkgPSBuZXcgQW1tby5idFNvZnRCb2R5SGVscGVycygp
LkNyZWF0ZUZyb21UcmlNZXNoKHRoaXMud29ybGQuZ2V0V29ybGRJbmZvKCksIHRyaVBvaW50cywg
b2JqZWN0LmdldEluZGljZXMoKSwgaW5kaWNlcy5sZW5ndGggLyAzLCB0cnVlKTsKKyAgICAgICAg
ICAgICAgICB2YXIgbmJWZXJ0aWNlcyA9IHZlcnRleFBvc2l0aW9ucy5sZW5ndGggLyAzOworICAg
ICAgICAgICAgICAgIHZhciBib2R5VmVydGljZXMgPSBzb2Z0Qm9keS5nZXRfbV9ub2RlcygpOwor
ICAgICAgICAgICAgICAgIHZhciBub2RlOworICAgICAgICAgICAgICAgIHZhciBub2RlTm9ybWFs
czsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5iVmVydGljZXM7IGkrKykg
eworICAgICAgICAgICAgICAgICAgICBub2RlID0gYm9keVZlcnRpY2VzLmF0KGkpOworICAgICAg
ICAgICAgICAgICAgICB2YXIgbm9kZU5vcm1hbHMgPSBub2RlLmdldF9tX24oKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZU5vcm1hbHMuc2V0WCh0cmlOb3Jtc1szICogaV0pOworICAgICAgICAg
ICAgICAgICAgICBub2RlTm9ybWFscy5zZXRZKHRyaU5vcm1zWzMgKiBpICsgMV0pOworICAgICAg
ICAgICAgICAgICAgICBub2RlTm9ybWFscy5zZXRaKHRyaU5vcm1zWzMgKiBpICsgMl0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gc29mdEJvZHk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZSBjbG90aCBm
b3IgYW4gaW1wb3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgdG8gY3JlYXRlIHRoZSBzb2Z0
Ym9keSBmb3IKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLl9jcmVhdGVDbG90
aCA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICB2YXIgb2JqZWN0ID0gaW1wb3N0b3Iu
b2JqZWN0OworICAgICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC5nZXRJbmRpY2VzKSB7CisgICAg
ICAgICAgICB2YXIgaW5kaWNlcyA9IG9iamVjdC5nZXRJbmRpY2VzKCk7CisgICAgICAgICAgICBp
ZiAoIWluZGljZXMpIHsKKyAgICAgICAgICAgICAgICBpbmRpY2VzID0gW107CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YXIgdmVydGV4X2RhdGEgPSB0aGlzLl9zb2Z0VmVydGV4RGF0YShp
bXBvc3Rvcik7CisgICAgICAgICAgICB2YXIgdmVydGV4UG9zaXRpb25zID0gdmVydGV4X2RhdGEu
cG9zaXRpb25zOworICAgICAgICAgICAgdmFyIHZlcnRleE5vcm1hbHMgPSB2ZXJ0ZXhfZGF0YS5u
b3JtYWxzOworICAgICAgICAgICAgaWYgKHZlcnRleFBvc2l0aW9ucyA9PT0gbnVsbCB8fCB2ZXJ0
ZXhOb3JtYWxzID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBbW1vLmJ0
Q29tcG91bmRTaGFwZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgdmFyIGxlbiA9IHZlcnRleFBvc2l0aW9ucy5sZW5ndGg7CisgICAgICAgICAg
ICAgICAgdmFyIHNlZ21lbnRzID0gTWF0aC5zcXJ0KGxlbiAvIDMpOworICAgICAgICAgICAgICAg
IGltcG9zdG9yLnNlZ21lbnRzID0gc2VnbWVudHM7CisgICAgICAgICAgICAgICAgdmFyIHNlZ3Mg
PSBzZWdtZW50cyAtIDE7CisgICAgICAgICAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckEuc2V0
VmFsdWUodmVydGV4UG9zaXRpb25zWzBdLCB2ZXJ0ZXhQb3NpdGlvbnNbMV0sIHZlcnRleFBvc2l0
aW9uc1syXSk7CisgICAgICAgICAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckIuc2V0VmFsdWUo
dmVydGV4UG9zaXRpb25zWzMgKiBzZWdzXSwgdmVydGV4UG9zaXRpb25zWzMgKiBzZWdzICsgMV0s
IHZlcnRleFBvc2l0aW9uc1szICogc2VncyArIDJdKTsKKyAgICAgICAgICAgICAgICB0aGlzLl90
bXBBbW1vVmVjdG9yRC5zZXRWYWx1ZSh2ZXJ0ZXhQb3NpdGlvbnNbbGVuIC0gM10sIHZlcnRleFBv
c2l0aW9uc1tsZW4gLSAyXSwgdmVydGV4UG9zaXRpb25zW2xlbiAtIDFdKTsKKyAgICAgICAgICAg
ICAgICB0aGlzLl90bXBBbW1vVmVjdG9yQy5zZXRWYWx1ZSh2ZXJ0ZXhQb3NpdGlvbnNbbGVuIC0g
MyAtIDMgKiBzZWdzXSwgdmVydGV4UG9zaXRpb25zW2xlbiAtIDIgLSAzICogc2Vnc10sIHZlcnRl
eFBvc2l0aW9uc1tsZW4gLSAxIC0gMyAqIHNlZ3NdKTsKKyAgICAgICAgICAgICAgICB2YXIgY2xv
dGhCb2R5ID0gbmV3IEFtbW8uYnRTb2Z0Qm9keUhlbHBlcnMoKS5DcmVhdGVQYXRjaCh0aGlzLndv
cmxkLmdldFdvcmxkSW5mbygpLCB0aGlzLl90bXBBbW1vVmVjdG9yQSwgdGhpcy5fdG1wQW1tb1Zl
Y3RvckIsIHRoaXMuX3RtcEFtbW9WZWN0b3JDLCB0aGlzLl90bXBBbW1vVmVjdG9yRCwgc2VnbWVu
dHMsIHNlZ21lbnRzLCBpbXBvc3Rvci5nZXRQYXJhbSgiZml4ZWRQb2ludHMiKSwgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNsb3RoQm9keTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlIHJvcGUgZm9yIGFuIGltcG9zdG9yCisg
ICAgICogQHBhcmFtIGltcG9zdG9yIHRvIGNyZWF0ZSB0aGUgc29mdGJvZHkgZm9yCisgICAgICov
CisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5fY3JlYXRlUm9wZSA9IGZ1bmN0aW9uIChpbXBv
c3RvcikgeworICAgICAgICB2YXIgbGVuOworICAgICAgICB2YXIgc2VnbWVudHM7CisgICAgICAg
IHZhciB2ZXJ0ZXhfZGF0YSA9IHRoaXMuX3NvZnRWZXJ0ZXhEYXRhKGltcG9zdG9yKTsKKyAgICAg
ICAgdmFyIHZlcnRleFBvc2l0aW9ucyA9IHZlcnRleF9kYXRhLnBvc2l0aW9uczsKKyAgICAgICAg
dmFyIHZlcnRleE5vcm1hbHMgPSB2ZXJ0ZXhfZGF0YS5ub3JtYWxzOworICAgICAgICBpZiAodmVy
dGV4UG9zaXRpb25zID09PSBudWxsIHx8IHZlcnRleE5vcm1hbHMgPT09IG51bGwpIHsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgQW1tby5idENvbXBvdW5kU2hhcGUoKTsKKyAgICAgICAgfQorICAg
ICAgICAvL2ZvcmNlIHRoZSBtZXNoIHRvIGJlIHVwZGF0YWJsZQorICAgICAgICB2ZXJ0ZXhfZGF0
YS5hcHBseVRvTWVzaChpbXBvc3Rvci5vYmplY3QsIHRydWUpOworICAgICAgICBpbXBvc3Rvci5f
aXNGcm9tTGluZSA9IHRydWU7CisgICAgICAgIC8vIElmIGluIGxpbmVzIG1lc2ggYWxsIG5vcm1h
bHMgd2lsbCBiZSB6ZXJvCisgICAgICAgIHZhciB2ZXJ0ZXhTcXVhcmVkID0gdmVydGV4Tm9ybWFs
cy5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggKiB4OyB9KTsKKyAgICAgICAgdmFyIHJlZHVj
ZXIgPSBmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgeyByZXR1cm4gYWNjdW11
bGF0b3IgKyBjdXJyZW50VmFsdWU7IH07CisgICAgICAgIHZhciByZWR1Y2VkID0gdmVydGV4U3F1
YXJlZC5yZWR1Y2UocmVkdWNlcik7CisgICAgICAgIGlmIChyZWR1Y2VkID09PSAwKSB7IC8vIGxp
bmUgbWVzaAorICAgICAgICAgICAgbGVuID0gdmVydGV4UG9zaXRpb25zLmxlbmd0aDsKKyAgICAg
ICAgICAgIHNlZ21lbnRzID0gbGVuIC8gMyAtIDE7CisgICAgICAgICAgICB0aGlzLl90bXBBbW1v
VmVjdG9yQS5zZXRWYWx1ZSh2ZXJ0ZXhQb3NpdGlvbnNbMF0sIHZlcnRleFBvc2l0aW9uc1sxXSwg
dmVydGV4UG9zaXRpb25zWzJdKTsKKyAgICAgICAgICAgIHRoaXMuX3RtcEFtbW9WZWN0b3JCLnNl
dFZhbHVlKHZlcnRleFBvc2l0aW9uc1tsZW4gLSAzXSwgdmVydGV4UG9zaXRpb25zW2xlbiAtIDJd
LCB2ZXJ0ZXhQb3NpdGlvbnNbbGVuIC0gMV0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAv
L2V4dHJ1ZGVkIG1lc2gKKyAgICAgICAgICAgIGltcG9zdG9yLl9pc0Zyb21MaW5lID0gZmFsc2U7
CisgICAgICAgICAgICB2YXIgcGF0aFZlY3RvcnMgPSBpbXBvc3Rvci5nZXRQYXJhbSgicGF0aCIp
OworICAgICAgICAgICAgdmFyIHNoYXBlID0gaW1wb3N0b3IuZ2V0UGFyYW0oInNoYXBlIik7Cisg
ICAgICAgICAgICBpZiAoc2hhcGUgPT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19s
b2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uV2FybigiTm8gc2hh
cGUgYXZhaWxhYmxlIGZvciBleHRydWRlZCBtZXNoIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG5ldyBBbW1vLmJ0Q29tcG91bmRTaGFwZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKCh2ZXJ0ZXhQb3NpdGlvbnMubGVuZ3RoICUgKDMgKiBwYXRoVmVjdG9ycy5sZW5ndGgpKSAh
PT0gMCkgeworICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCJQYXRoIGRvZXMgbm90IG1hdGNoIGV4dHJ1c2lvbiIp
OworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQW1tby5idENvbXBvdW5kU2hhcGUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbiA9IHBhdGhWZWN0b3JzLmxlbmd0aDsKKyAgICAg
ICAgICAgIHNlZ21lbnRzID0gbGVuIC0gMTsKKyAgICAgICAgICAgIHRoaXMuX3RtcEFtbW9WZWN0
b3JBLnNldFZhbHVlKHBhdGhWZWN0b3JzWzBdLngsIHBhdGhWZWN0b3JzWzBdLnksIHBhdGhWZWN0
b3JzWzBdLnopOworICAgICAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckIuc2V0VmFsdWUocGF0
aFZlY3RvcnNbbGVuIC0gMV0ueCwgcGF0aFZlY3RvcnNbbGVuIC0gMV0ueSwgcGF0aFZlY3RvcnNb
bGVuIC0gMV0ueik7CisgICAgICAgIH0KKyAgICAgICAgaW1wb3N0b3Iuc2VnbWVudHMgPSBzZWdt
ZW50czsKKyAgICAgICAgdmFyIGZpeGVkUG9pbnRzID0gaW1wb3N0b3IuZ2V0UGFyYW0oImZpeGVk
UG9pbnRzIik7CisgICAgICAgIGZpeGVkUG9pbnRzID0gKGZpeGVkUG9pbnRzID4gMykgPyAzIDog
Zml4ZWRQb2ludHM7CisgICAgICAgIHZhciByb3BlQm9keSA9IG5ldyBBbW1vLmJ0U29mdEJvZHlI
ZWxwZXJzKCkuQ3JlYXRlUm9wZSh0aGlzLndvcmxkLmdldFdvcmxkSW5mbygpLCB0aGlzLl90bXBB
bW1vVmVjdG9yQSwgdGhpcy5fdG1wQW1tb1ZlY3RvckIsIHNlZ21lbnRzIC0gMSwgZml4ZWRQb2lu
dHMpOworICAgICAgICByb3BlQm9keS5nZXRfbV9jZmcoKS5zZXRfY29sbGlzaW9ucygweDExKTsK
KyAgICAgICAgcmV0dXJuIHJvcGVCb2R5OworICAgIH07CisgICAgLy8gYWRkcyBhbGwgdmVydGlj
aWVzIChpbmNsdWRpbmcgY2hpbGQgdmVydGljaWVzKSB0byB0aGUgY29udmV4IGh1bGwgc2hhcGUK
KyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLl9hZGRIdWxsVmVydHMgPSBmdW5jdGlvbiAoYnRD
b252ZXhIdWxsU2hhcGUsIHRvcExldmVsT2JqZWN0LCBvYmplY3QpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gdGhpczsKKyAgICAgICAgdmFyIHRyaWFuZ2xlQ291bnQgPSAwOworICAgICAgICBpZiAo
b2JqZWN0ICYmIG9iamVjdC5nZXRJbmRpY2VzICYmIG9iamVjdC5nZXRXb3JsZE1hdHJpeCAmJiBv
YmplY3QuZ2V0Q2hpbGRNZXNoZXMpIHsKKyAgICAgICAgICAgIHZhciBpbmRpY2VzID0gb2JqZWN0
LmdldEluZGljZXMoKTsKKyAgICAgICAgICAgIGlmICghaW5kaWNlcykgeworICAgICAgICAgICAg
ICAgIGluZGljZXMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB2ZXJ0ZXhQ
b3NpdGlvbnMgPSBvYmplY3QuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7CisgICAg
ICAgICAgICBpZiAoIXZlcnRleFBvc2l0aW9ucykgeworICAgICAgICAgICAgICAgIHZlcnRleFBv
c2l0aW9ucyA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2JqZWN0LmNvbXB1dGVX
b3JsZE1hdHJpeChmYWxzZSk7CisgICAgICAgICAgICB2YXIgZmFjZUNvdW50ID0gaW5kaWNlcy5s
ZW5ndGggLyAzOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWNlQ291bnQ7IGkr
KykgeworICAgICAgICAgICAgICAgIHZhciB0cmlQb2ludHMgPSBbXTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHZhciBwb2ludCA9IDA7IHBvaW50IDwgMzsgcG9pbnQrKykgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgdiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdKHZlcnRleFBvc2l0aW9uc1soaW5kaWNlc1soaSAqIDMpICsg
cG9pbnRdICogMykgKyAwXSwgdmVydGV4UG9zaXRpb25zWyhpbmRpY2VzWyhpICogMykgKyBwb2lu
dF0gKiAzKSArIDFdLCB2ZXJ0ZXhQb3NpdGlvbnNbKGluZGljZXNbKGkgKiAzKSArIHBvaW50XSAq
IDMpICsgMl0pOworICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgZm9yIGluaXRpYWwgc2Nh
bGluZworICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siTWF0cml4Il0uU2NhbGluZ1RvUmVmKG9iamVjdC5zY2FsaW5nLngs
IG9iamVjdC5zY2FsaW5nLnksIG9iamVjdC5zY2FsaW5nLnosIHRoaXMuX3RtcE1hdHJpeCk7Cisg
ICAgICAgICAgICAgICAgICAgIHYgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzKHYsIHRoaXMuX3Rt
cE1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgIHZhciB2ZWM7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChwb2ludCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZWMgPSB0aGlz
Ll90bXBBbW1vVmVjdG9yQTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChwb2ludCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZWMg
PSB0aGlzLl90bXBBbW1vVmVjdG9yQjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlYyA9IHRoaXMuX3Rt
cEFtbW9WZWN0b3JDOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHZlYy5zZXRWYWx1ZSh2LngsIHYueSwgdi56KTsKKyAgICAgICAgICAgICAgICAgICAgdHJpUG9p
bnRzLnB1c2godmVjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnRDb252
ZXhIdWxsU2hhcGUuYWRkUG9pbnQodHJpUG9pbnRzWzBdLCB0cnVlKTsKKyAgICAgICAgICAgICAg
ICBidENvbnZleEh1bGxTaGFwZS5hZGRQb2ludCh0cmlQb2ludHNbMV0sIHRydWUpOworICAgICAg
ICAgICAgICAgIGJ0Q29udmV4SHVsbFNoYXBlLmFkZFBvaW50KHRyaVBvaW50c1syXSwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgdHJpYW5nbGVDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgb2JqZWN0LmdldENoaWxkTWVzaGVzKCkuZm9yRWFjaChmdW5jdGlvbiAobSkgeworICAg
ICAgICAgICAgICAgIHRyaWFuZ2xlQ291bnQgKz0gX3RoaXMuX2FkZEh1bGxWZXJ0cyhidENvbnZl
eEh1bGxTaGFwZSwgdG9wTGV2ZWxPYmplY3QsIG0pOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRyaWFuZ2xlQ291bnQ7CisgICAgfTsKKyAgICBBbW1vSlNQbHVn
aW4ucHJvdG90eXBlLl9jcmVhdGVTaGFwZSA9IGZ1bmN0aW9uIChpbXBvc3RvciwgaWdub3JlQ2hp
bGRyZW4pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKGlnbm9yZUNo
aWxkcmVuID09PSB2b2lkIDApIHsgaWdub3JlQ2hpbGRyZW4gPSBmYWxzZTsgfQorICAgICAgICB2
YXIgb2JqZWN0ID0gaW1wb3N0b3Iub2JqZWN0OworICAgICAgICB2YXIgcmV0dXJuVmFsdWU7Cisg
ICAgICAgIHZhciBleHRlbmRTaXplID0gaW1wb3N0b3IuZ2V0T2JqZWN0RXh0ZW5kU2l6ZSgpOwor
ICAgICAgICBpZiAoIWlnbm9yZUNoaWxkcmVuKSB7CisgICAgICAgICAgICB2YXIgbWVzaENoaWxk
cmVuID0gaW1wb3N0b3Iub2JqZWN0LmdldENoaWxkTWVzaGVzID8gaW1wb3N0b3Iub2JqZWN0Lmdl
dENoaWxkTWVzaGVzKHRydWUpIDogW107CisgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyBB
bW1vLmJ0Q29tcG91bmRTaGFwZSgpOworICAgICAgICAgICAgLy8gQWRkIHNoYXBlIG9mIGFsbCBj
aGlsZHJlbiB0byB0aGUgY29tcG91bmQgc2hhcGUKKyAgICAgICAgICAgIHZhciBjaGlsZHJlbkFk
ZGVkID0gMDsKKyAgICAgICAgICAgIG1lc2hDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGls
ZE1lc2gpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGRJbXBvc3RvciA9IGNoaWxkTWVzaC5n
ZXRQaHlzaWNzSW1wb3N0b3IoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbXBvc3Rvcikg
eworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbXBvc3Rvci50eXBlID09IF9QaHlzaWNz
X3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQaHlzaWNzSW1w
b3N0b3IiXS5NZXNoSW1wb3N0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93ICJB
IGNoaWxkIE1lc2hJbXBvc3RvciBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5IHByaW1pdGl2ZSBpbXBv
c3RvcnMgYXJlIHN1cHBvcnRlZCBhcyBjaGlsZHJlbiAoZWcuIGJveCBvciBzcGhlcmUpIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YXIgc2hhcGUgPSBfdGhp
cy5fY3JlYXRlU2hhcGUoY2hpbGRJbXBvc3Rvcik7CisgICAgICAgICAgICAgICAgICAgIC8vIFBv
c2l0aW9uIG5lZWRzIHRvIGJlIHNjYWxlZCBiYXNlZCBvbiBwYXJlbnQncyBzY2FsaW5nCisgICAg
ICAgICAgICAgICAgICAgIHZhciBwYXJlbnRNYXQgPSBjaGlsZE1lc2gucGFyZW50LmdldFdvcmxk
TWF0cml4KCkuY2xvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgpOwor
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRNYXQuZGVjb21wb3NlKHMpOworICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5fdG1wQW1tb1RyYW5zZm9ybS5nZXRPcmlnaW4oKS5zZXRWYWx1ZShjaGls
ZE1lc2gucG9zaXRpb24ueCAqIHMueCwgY2hpbGRNZXNoLnBvc2l0aW9uLnkgKiBzLnksIGNoaWxk
TWVzaC5wb3NpdGlvbi56ICogcy56KTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcEFt
bW9RdWF0ZXJuaW9uLnNldFZhbHVlKGNoaWxkTWVzaC5yb3RhdGlvblF1YXRlcm5pb24ueCwgY2hp
bGRNZXNoLnJvdGF0aW9uUXVhdGVybmlvbi55LCBjaGlsZE1lc2gucm90YXRpb25RdWF0ZXJuaW9u
LnosIGNoaWxkTWVzaC5yb3RhdGlvblF1YXRlcm5pb24udyk7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLl90bXBBbW1vVHJhbnNmb3JtLnNldFJvdGF0aW9uKF90aGlzLl90bXBBbW1vUXVhdGVy
bmlvbik7CisgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLmFkZENoaWxkU2hhcGUoX3Ro
aXMuX3RtcEFtbW9UcmFuc2Zvcm0sIHNoYXBlKTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRJ
bXBvc3Rvci5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQWRkZWQrKzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChjaGls
ZHJlbkFkZGVkID4gMCkgeworICAgICAgICAgICAgICAgIC8vIEFkZCBwYXJlbnRzIHNoYXBlIGFz
IGEgY2hpbGQgaWYgcHJlc2VudAorICAgICAgICAgICAgICAgIGlmIChpbXBvc3Rvci50eXBlICE9
IF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQ
aHlzaWNzSW1wb3N0b3IiXS5Ob0ltcG9zdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBz
aGFwZSA9IHRoaXMuX2NyZWF0ZVNoYXBlKGltcG9zdG9yLCB0cnVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNoYXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90bXBBbW1v
VHJhbnNmb3JtLmdldE9yaWdpbigpLnNldFZhbHVlKDAsIDAsIDApOworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fdG1wQW1tb1F1YXRlcm5pb24uc2V0VmFsdWUoMCwgMCwgMCwgMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90bXBBbW1vVHJhbnNmb3JtLnNldFJvdGF0aW9u
KHRoaXMuX3RtcEFtbW9RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlLmFkZENoaWxkU2hhcGUodGhpcy5fdG1wQW1tb1RyYW5zZm9ybSwgc2hhcGUpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIElmIG5vIGNoaWxkcmVuIHdpdGggaW1wb3N0b3JzIGNyZWF0ZSB0aGUg
YWN0dWFsIHNoYXBlIGJlbG93IGluc3RlYWQKKyAgICAgICAgICAgICAgICBBbW1vLmRlc3Ryb3ko
cmV0dXJuVmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gbnVsbDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKGltcG9zdG9yLnR5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlBoeXNpY3NJbXBvc3RvciJdLlNwaGVyZUltcG9zdG9yOgorICAgICAgICAg
ICAgICAgIC8vIElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBjb21wYXJlIGZsb2F0cyBudW1iZXI/
IFdpdGggYW4gZXBzeWxvbiBvciB3aXRoIGEgTWF0aCBmdW5jdGlvbgorICAgICAgICAgICAgICAg
IGlmIChfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siU2Nh
bGFyIl0uV2l0aGluRXBzaWxvbihleHRlbmRTaXplLngsIGV4dGVuZFNpemUueSwgMC4wMDAxKSAm
JiBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siU2NhbGFy
Il0uV2l0aGluRXBzaWxvbihleHRlbmRTaXplLngsIGV4dGVuZFNpemUueiwgMC4wMDAxKSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUo
ZXh0ZW5kU2l6ZS54IC8gMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYSBidE11bHRpU3BoZXJlU2hhcGUg
YmVjYXVzZSBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZXQgYSBsb2NhbCBzY2FsaW5nIG9uIGEgYnRT
cGhlcmVTaGFwZQorICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gW25ldyBBbW1v
LmJ0VmVjdG9yMygwLCAwLCAwKV07CisgICAgICAgICAgICAgICAgICAgIHZhciByYWRpaSA9IFsx
XTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBuZXcgQW1tby5idE11bHRpU3Bo
ZXJlU2hhcGUocG9zaXRpb25zLCByYWRpaSwgMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlLnNldExvY2FsU2NhbGluZyhuZXcgQW1tby5idFZlY3RvcjMoZXh0ZW5kU2l6ZS54IC8g
MiwgZXh0ZW5kU2l6ZS55IC8gMiwgZXh0ZW5kU2l6ZS56IC8gMikpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5
c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNpY3NJbXBvc3Rv
ciJdLkNhcHN1bGVJbXBvc3RvcjoKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyBB
bW1vLmJ0Q2Fwc3VsZVNoYXBlKGV4dGVuZFNpemUueCAvIDIsIGV4dGVuZFNpemUueSAvIDIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNz
SW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUGh5c2ljc0ltcG9zdG9yIl0u
Q3lsaW5kZXJJbXBvc3RvcjoKKyAgICAgICAgICAgICAgICB0aGlzLl90bXBBbW1vVmVjdG9yQS5z
ZXRWYWx1ZShleHRlbmRTaXplLnggLyAyLCBleHRlbmRTaXplLnkgLyAyLCBleHRlbmRTaXplLnog
LyAyKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyBBbW1vLmJ0Q3lsaW5kZXJT
aGFwZSh0aGlzLl90bXBBbW1vVmVjdG9yQSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJQaHlzaWNzSW1wb3N0b3IiXS5QbGFuZUltcG9zdG9yOgorICAgICAgICAgICAg
Y2FzZSBfUGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siUGh5c2ljc0ltcG9zdG9yIl0uQm94SW1wb3N0b3I6CisgICAgICAgICAgICAgICAgdGhpcy5f
dG1wQW1tb1ZlY3RvckEuc2V0VmFsdWUoZXh0ZW5kU2l6ZS54IC8gMiwgZXh0ZW5kU2l6ZS55IC8g
MiwgZXh0ZW5kU2l6ZS56IC8gMik7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBuZXcg
QW1tby5idEJveFNoYXBlKHRoaXMuX3RtcEFtbW9WZWN0b3JBKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNpY3NJbXBvc3RvciJdLk1lc2hJbXBvc3RvcjoKKyAg
ICAgICAgICAgICAgICBpZiAoaW1wb3N0b3IuZ2V0UGFyYW0oIm1hc3MiKSA9PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIE9ubHkgY3JlYXRlIGJ0QnZoVHJpYW5nbGVNZXNoU2hhcGUgaW1w
b3N0b3IgaXMgc3RhdGljCisgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL3B5YnVs
bGV0Lm9yZy9CdWxsZXQvcGhwQkIzL3ZpZXd0b3BpYy5waHA/dD03MjgzCisgICAgICAgICAgICAg
ICAgICAgIHZhciB0ZXRyYU1lc2ggPSBuZXcgQW1tby5idFRyaWFuZ2xlTWVzaCgpOworICAgICAg
ICAgICAgICAgICAgICBpbXBvc3Rvci5fcGx1Z2luRGF0YS50b0Rpc3Bvc2UucHVzaCh0ZXRyYU1l
c2gpOworICAgICAgICAgICAgICAgICAgICB2YXIgdHJpYW5nZUNvdW50ID0gdGhpcy5fYWRkTWVz
aFZlcnRzKHRldHJhTWVzaCwgb2JqZWN0LCBvYmplY3QpOworICAgICAgICAgICAgICAgICAgICBp
ZiAodHJpYW5nZUNvdW50ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZh
bHVlID0gbmV3IEFtbW8uYnRDb21wb3VuZFNoYXBlKCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm5WYWx1ZSA9IG5ldyBBbW1vLmJ0QnZoVHJpYW5nbGVNZXNoU2hhcGUodGV0cmFNZXNoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBPdGhlcndpc2UgY3JlYXRlIGNvbnZleEh1bGxJbXBv
c3RvcgorICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siUGh5c2ljc0ltcG9zdG9yIl0uQ29udmV4SHVsbEltcG9zdG9y
OgorICAgICAgICAgICAgICAgIHZhciBjb252ZXhNZXNoID0gbmV3IEFtbW8uYnRDb252ZXhIdWxs
U2hhcGUoKTsKKyAgICAgICAgICAgICAgICB2YXIgdHJpYW5nZUNvdW50ID0gdGhpcy5fYWRkSHVs
bFZlcnRzKGNvbnZleE1lc2gsIG9iamVjdCwgb2JqZWN0KTsKKyAgICAgICAgICAgICAgICBpZiAo
dHJpYW5nZUNvdW50ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYW51cCBVbnVz
ZWQgQ29udmV4IEh1bGwgU2hhcGUKKyAgICAgICAgICAgICAgICAgICAgaW1wb3N0b3IuX3BsdWdp
bkRhdGEudG9EaXNwb3NlLnB1c2goY29udmV4TWVzaCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVyblZhbHVlID0gbmV3IEFtbW8uYnRDb21wb3VuZFNoYXBlKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1
ZSA9IGNvbnZleE1lc2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siUGh5c2ljc0ltcG9zdG9yIl0uTm9JbXBvc3RvcjoKKyAgICAgICAg
ICAgICAgICAvLyBGaWxsIHdpdGggc3BoZXJlIGJ1dCBjb2xsaXNpb24gaXMgZGlzYWJsZWQgb24g
dGhlIHJpZ2lkIGJvZHkgaW4gZ2VuZXJhdGVQaHlzaWNzQm9keSwgdXNpbmcgYW4gZW1wdHkgc2hh
cGUgY2F1c2VkIHVuZXhwZWN0ZWQgbW92ZW1lbnQgd2l0aCBqb2ludHMKKyAgICAgICAgICAgICAg
ICByZXR1cm5WYWx1ZSA9IG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUoZXh0ZW5kU2l6ZS54IC8gMik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNp
Y3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQaHlzaWNzSW1wb3N0b3Ii
XS5Tb2Z0Ym9keUltcG9zdG9yOgorICAgICAgICAgICAgICAgIC8vIE9ubHkgdXNhYmxlIHdpdGgg
YSBtZXNoIHRoYXQgaGFzIHN1ZmZpY2llbnQgYW5kIHNoYXJlZCB2ZXJ0aWNlcworICAgICAgICAg
ICAgICAgIHJldHVyblZhbHVlID0gdGhpcy5fY3JlYXRlU29mdGJvZHkoaW1wb3N0b3IpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSW1w
b3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUGh5c2ljc0ltcG9zdG9yIl0uQ2xv
dGhJbXBvc3RvcjoKKyAgICAgICAgICAgICAgICAvLyBPbmx5IHVzYWJsZSB3aXRoIGEgZ3JvdW5k
IG1lc2ggdGhhdCBoYXMgc3VmZmljaWVudCBhbmQgc2hhcmVkIHZlcnRpY2VzCisgICAgICAgICAg
ICAgICAgcmV0dXJuVmFsdWUgPSB0aGlzLl9jcmVhdGVDbG90aChpbXBvc3Rvcik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQaHlzaWNzSW1wb3N0b3IiXS5Sb3BlSW1w
b3N0b3I6CisgICAgICAgICAgICAgICAgLy8gT25seSB1c2FibGUgd2l0aCBhIGxpbmUgbWVzaCBv
ciBhbiBleHRydWRlZCBtZXNoIHRoYXQgaXMgdXBkYXRhYmxlCisgICAgICAgICAgICAgICAgcmV0
dXJuVmFsdWUgPSB0aGlzLl9jcmVhdGVSb3BlKGltcG9zdG9yKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4oIlRoZSBpbXBvc3Rv
ciB0eXBlIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSBhbW1vIHBsdWdpbi4iKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBwaHlzaWNzIGJvZHkgcG9z
aXRpb24vcm90YXRpb24gZnJvbSB0aGUgYmFieWxvbiBtZXNoJ3MgcG9zaXRpb24vcm90YXRpb24K
KyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0ZXIgY29udGFpbmluZyB0aGUgcGh5c2ljcyBi
b2R5IGFuZCBiYWJ5bG9uIG9iamVjdAorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5
cGUuc2V0VHJhbnNmb3JtYXRpb25Gcm9tUGh5c2ljc0JvZHkgPSBmdW5jdGlvbiAoaW1wb3N0b3Ip
IHsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuZ2V0TW90aW9uU3RhdGUoKS5nZXRXb3Js
ZFRyYW5zZm9ybSh0aGlzLl90bXBBbW1vVHJhbnNmb3JtKTsKKyAgICAgICAgaW1wb3N0b3Iub2Jq
ZWN0LnBvc2l0aW9uLnNldCh0aGlzLl90bXBBbW1vVHJhbnNmb3JtLmdldE9yaWdpbigpLngoKSwg
dGhpcy5fdG1wQW1tb1RyYW5zZm9ybS5nZXRPcmlnaW4oKS55KCksIHRoaXMuX3RtcEFtbW9UcmFu
c2Zvcm0uZ2V0T3JpZ2luKCkueigpKTsKKyAgICAgICAgaWYgKCFpbXBvc3Rvci5vYmplY3Qucm90
YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICBpZiAoaW1wb3N0b3Iub2JqZWN0LnJvdGF0
aW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdG1wUXVhdGVybmlvbi5zZXQodGhpcy5fdG1w
QW1tb1RyYW5zZm9ybS5nZXRSb3RhdGlvbigpLngoKSwgdGhpcy5fdG1wQW1tb1RyYW5zZm9ybS5n
ZXRSb3RhdGlvbigpLnkoKSwgdGhpcy5fdG1wQW1tb1RyYW5zZm9ybS5nZXRSb3RhdGlvbigpLnoo
KSwgdGhpcy5fdG1wQW1tb1RyYW5zZm9ybS5nZXRSb3RhdGlvbigpLncoKSk7CisgICAgICAgICAg
ICAgICAgdGhpcy5fdG1wUXVhdGVybmlvbi50b0V1bGVyQW5nbGVzVG9SZWYoaW1wb3N0b3Iub2Jq
ZWN0LnJvdGF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGltcG9zdG9yLm9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24uc2V0KHRoaXMu
X3RtcEFtbW9UcmFuc2Zvcm0uZ2V0Um90YXRpb24oKS54KCksIHRoaXMuX3RtcEFtbW9UcmFuc2Zv
cm0uZ2V0Um90YXRpb24oKS55KCksIHRoaXMuX3RtcEFtbW9UcmFuc2Zvcm0uZ2V0Um90YXRpb24o
KS56KCksIHRoaXMuX3RtcEFtbW9UcmFuc2Zvcm0uZ2V0Um90YXRpb24oKS53KCkpOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBiYWJ5bG9uIG9iamVjdCdzIHBv
c2l0aW9uL3JvdGF0aW9uIGZyb20gdGhlIHBoeXNpY3MgYm9keSdzIHBvc2l0aW9uL3JvdGF0aW9u
CisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdGVyIGNvbnRhaW5pbmcgdGhlIHBoeXNpY3Mg
Ym9keSBhbmQgYmFieWxvbiBvYmplY3QKKyAgICAgKiBAcGFyYW0gbmV3UG9zaXRpb24gbmV3IHBv
c2l0aW9uCisgICAgICogQHBhcmFtIG5ld1JvdGF0aW9uIG5ldyByb3RhdGlvbgorICAgICAqLwor
ICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuc2V0UGh5c2ljc0JvZHlUcmFuc2Zvcm1hdGlvbiA9
IGZ1bmN0aW9uIChpbXBvc3RvciwgbmV3UG9zaXRpb24sIG5ld1JvdGF0aW9uKSB7CisgICAgICAg
IHZhciB0cmFucyA9IGltcG9zdG9yLnBoeXNpY3NCb2R5LmdldFdvcmxkVHJhbnNmb3JtKCk7Cisg
ICAgICAgIC8vIElmIHJvdGF0aW9uL3Bvc2l0aW9uIGhhcyBjaGFuZ2VkIHVwZGF0ZSBhbmQgYWN0
aXZhdGUgcmlnZWQgYm9keQorICAgICAgICBpZiAodHJhbnMuZ2V0T3JpZ2luKCkueCgpICE9IG5l
d1Bvc2l0aW9uLnggfHwKKyAgICAgICAgICAgIHRyYW5zLmdldE9yaWdpbigpLnkoKSAhPSBuZXdQ
b3NpdGlvbi55IHx8CisgICAgICAgICAgICB0cmFucy5nZXRPcmlnaW4oKS56KCkgIT0gbmV3UG9z
aXRpb24ueiB8fAorICAgICAgICAgICAgdHJhbnMuZ2V0Um90YXRpb24oKS54KCkgIT0gbmV3Um90
YXRpb24ueCB8fAorICAgICAgICAgICAgdHJhbnMuZ2V0Um90YXRpb24oKS55KCkgIT0gbmV3Um90
YXRpb24ueSB8fAorICAgICAgICAgICAgdHJhbnMuZ2V0Um90YXRpb24oKS56KCkgIT0gbmV3Um90
YXRpb24ueiB8fAorICAgICAgICAgICAgdHJhbnMuZ2V0Um90YXRpb24oKS53KCkgIT0gbmV3Um90
YXRpb24udykgeworICAgICAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckEuc2V0VmFsdWUobmV3
UG9zaXRpb24ueCwgbmV3UG9zaXRpb24ueSwgbmV3UG9zaXRpb24ueik7CisgICAgICAgICAgICB0
cmFucy5zZXRPcmlnaW4odGhpcy5fdG1wQW1tb1ZlY3RvckEpOworICAgICAgICAgICAgdGhpcy5f
dG1wQW1tb1F1YXRlcm5pb24uc2V0VmFsdWUobmV3Um90YXRpb24ueCwgbmV3Um90YXRpb24ueSwg
bmV3Um90YXRpb24ueiwgbmV3Um90YXRpb24udyk7CisgICAgICAgICAgICB0cmFucy5zZXRSb3Rh
dGlvbih0aGlzLl90bXBBbW1vUXVhdGVybmlvbik7CisgICAgICAgICAgICBpbXBvc3Rvci5waHlz
aWNzQm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFucyk7CisgICAgICAgICAgICBpZiAoaW1wb3N0
b3IubWFzcyA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gS2luZW1hdGljIG9iamVjdHMgbXVz
dCBiZSB1cGRhdGVkIHVzaW5nIG1vdGlvbiBzdGF0ZQorICAgICAgICAgICAgICAgIHZhciBtb3Rp
b25TdGF0ZSA9IGltcG9zdG9yLnBoeXNpY3NCb2R5LmdldE1vdGlvblN0YXRlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CisgICAgICAgICAgICAgICAgICAgIG1vdGlvblN0
YXRlLnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbXBvc3Rvci5waHlz
aWNzQm9keS5hY3RpdmF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBJZiB0aGlzIHBsdWdpbiBpcyBzdXBwb3J0ZWQKKyAgICAgKiBAcmV0dXJu
cyB0cnVlIGlmIGl0cyBzdXBwb3J0ZWQKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90
eXBlLmlzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5ianNB
TU1PICE9PSB1bmRlZmluZWQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBsaW5l
YXIgdmVsb2NpdHkgb2YgdGhlIHBoeXNpY3MgYm9keQorICAgICAqIEBwYXJhbSBpbXBvc3RvciBp
bXBvc3RlciB0byBzZXQgdGhlIHZlbG9jaXR5IG9uCisgICAgICogQHBhcmFtIHZlbG9jaXR5IHZl
bG9jaXR5IHRvIHNldAorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuc2V0TGlu
ZWFyVmVsb2NpdHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIHZlbG9jaXR5KSB7CisgICAgICAgIHRo
aXMuX3RtcEFtbW9WZWN0b3JBLnNldFZhbHVlKHZlbG9jaXR5LngsIHZlbG9jaXR5LnksIHZlbG9j
aXR5LnopOworICAgICAgICBpZiAoaW1wb3N0b3Iuc29mdCkgeworICAgICAgICAgICAgaW1wb3N0
b3IucGh5c2ljc0JvZHkubGluZWFyVmVsb2NpdHkodGhpcy5fdG1wQW1tb1ZlY3RvckEpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHku
c2V0TGluZWFyVmVsb2NpdHkodGhpcy5fdG1wQW1tb1ZlY3RvckEpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBhbmd1bGFyIHZlbG9jaXR5IG9mIHRoZSBwaHlz
aWNzIGJvZHkKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0ZXIgdG8gc2V0IHRoZSB2ZWxv
Y2l0eSBvbgorICAgICAqIEBwYXJhbSB2ZWxvY2l0eSB2ZWxvY2l0eSB0byBzZXQKKyAgICAgKi8K
KyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLnNldEFuZ3VsYXJWZWxvY2l0eSA9IGZ1bmN0aW9u
IChpbXBvc3RvciwgdmVsb2NpdHkpIHsKKyAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckEuc2V0
VmFsdWUodmVsb2NpdHkueCwgdmVsb2NpdHkueSwgdmVsb2NpdHkueik7CisgICAgICAgIGlmIChp
bXBvc3Rvci5zb2Z0KSB7CisgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5hbmd1bGFy
VmVsb2NpdHkodGhpcy5fdG1wQW1tb1ZlY3RvckEpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuc2V0QW5ndWxhclZlbG9jaXR5KHRo
aXMuX3RtcEFtbW9WZWN0b3JBKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
Z2V0cyB0aGUgbGluZWFyIHZlbG9jaXR5CisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdGVy
IHRvIGdldCBsaW5lYXIgdmVsb2NpdHkgZnJvbQorICAgICAqIEByZXR1cm5zIGxpbmVhciB2ZWxv
Y2l0eQorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2V0TGluZWFyVmVsb2Np
dHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgaWYgKGltcG9zdG9yLnNvZnQpIHsK
KyAgICAgICAgICAgIHZhciB2ID0gaW1wb3N0b3IucGh5c2ljc0JvZHkubGluZWFyVmVsb2NpdHko
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciB2ID0gaW1wb3N0
b3IucGh5c2ljc0JvZHkuZ2V0TGluZWFyVmVsb2NpdHkoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXYpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZh
ciByZXN1bHQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlZlY3RvcjMiXSh2LngoKSwgdi55KCksIHYueigpKTsKKyAgICAgICAgQW1tby5kZXN0
cm95KHYpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICog
Z2V0cyB0aGUgYW5ndWxhciB2ZWxvY2l0eQorICAgICAqIEBwYXJhbSBpbXBvc3RvciBpbXBvc3Rl
ciB0byBnZXQgYW5ndWxhciB2ZWxvY2l0eSBmcm9tCisgICAgICogQHJldHVybnMgYW5ndWxhciB2
ZWxvY2l0eQorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2V0QW5ndWxhclZl
bG9jaXR5ID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIGlmIChpbXBvc3Rvci5zb2Z0
KSB7CisgICAgICAgICAgICB2YXIgdiA9IGltcG9zdG9yLnBoeXNpY3NCb2R5LmFuZ3VsYXJWZWxv
Y2l0eSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIHYgPSBp
bXBvc3Rvci5waHlzaWNzQm9keS5nZXRBbmd1bGFyVmVsb2NpdHkoKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIXYpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAg
ICAgIHZhciByZXN1bHQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXSh2LngoKSwgdi55KCksIHYueigpKTsKKyAgICAgICAgQW1t
by5kZXN0cm95KHYpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0cyB0aGUgbWFzcyBvZiBwaHlzaWNzIGJvZHkKKyAgICAgKiBAcGFyYW0gaW1wb3N0
b3IgaW1wb3N0ZXIgdG8gc2V0IHRoZSBtYXNzIG9uCisgICAgICogQHBhcmFtIG1hc3MgbWFzcyB0
byBzZXQKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLnNldEJvZHlNYXNzID0g
ZnVuY3Rpb24gKGltcG9zdG9yLCBtYXNzKSB7CisgICAgICAgIGlmIChpbXBvc3Rvci5zb2Z0KSB7
CisgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5zZXRUb3RhbE1hc3MobWFzcywgZmFs
c2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW1wb3N0b3IucGh5
c2ljc0JvZHkuc2V0TWFzc1Byb3BzKG1hc3MpOworICAgICAgICB9CisgICAgICAgIGltcG9zdG9y
Ll9wbHVnaW5EYXRhLm1hc3MgPSBtYXNzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0
aGUgbWFzcyBvZiB0aGUgcGh5c2ljcyBib2R5CisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9z
dGVyIHRvIGdldCB0aGUgbWFzcyBmcm9tCisgICAgICogQHJldHVybnMgbWFzcworICAgICAqLwor
ICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2V0Qm9keU1hc3MgPSBmdW5jdGlvbiAoaW1wb3N0
b3IpIHsKKyAgICAgICAgcmV0dXJuIGltcG9zdG9yLl9wbHVnaW5EYXRhLm1hc3MgfHwgMDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgZnJpY3Rpb24gb2YgdGhlIGltcG9zdG9yCisgICAg
ICogQHBhcmFtIGltcG9zdG9yIGltcG9zdG9yIHRvIGdldCBmcmljdGlvbiBmcm9tCisgICAgICog
QHJldHVybnMgZnJpY3Rpb24gdmFsdWUKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90
eXBlLmdldEJvZHlGcmljdGlvbiA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICByZXR1
cm4gaW1wb3N0b3IuX3BsdWdpbkRhdGEuZnJpY3Rpb24gfHwgMDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldHMgZnJpY3Rpb24gb2YgdGhlIGltcG9zdG9yCisgICAgICogQHBhcmFtIGltcG9z
dG9yIGltcG9zdG9yIHRvIHNldCBmcmljdGlvbiBvbgorICAgICAqIEBwYXJhbSBmcmljdGlvbiBm
cmljdGlvbiB2YWx1ZQorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuc2V0Qm9k
eUZyaWN0aW9uID0gZnVuY3Rpb24gKGltcG9zdG9yLCBmcmljdGlvbikgeworICAgICAgICBpZiAo
aW1wb3N0b3Iuc29mdCkgeworICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuZ2V0X21f
Y2ZnKCkuc2V0X2tERihmcmljdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5zZXRGcmljdGlvbihmcmljdGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgaW1wb3N0b3IuX3BsdWdpbkRhdGEuZnJpY3Rpb24gPSBmcmljdGlvbjsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgcmVzdGl0dXRpb24gb2YgdGhlIGltcG9zdG9y
CisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdG9yIHRvIGdldCByZXN0aXR1dGlvbiBmcm9t
CisgICAgICogQHJldHVybnMgcmVzdGl0dXRpb24gdmFsdWUKKyAgICAgKi8KKyAgICBBbW1vSlNQ
bHVnaW4ucHJvdG90eXBlLmdldEJvZHlSZXN0aXR1dGlvbiA9IGZ1bmN0aW9uIChpbXBvc3Rvcikg
eworICAgICAgICByZXR1cm4gaW1wb3N0b3IuX3BsdWdpbkRhdGEucmVzdGl0dXRpb24gfHwgMDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgcmVzaXR1dGlvbiBvZiB0aGUgaW1wb3N0b3IK
KyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3IgdG8gc2V0IHJlc2l0dXRpb24gb24KKyAg
ICAgKiBAcGFyYW0gcmVzdGl0dXRpb24gcmVzaXR1dGlvbiB2YWx1ZQorICAgICAqLworICAgIEFt
bW9KU1BsdWdpbi5wcm90b3R5cGUuc2V0Qm9keVJlc3RpdHV0aW9uID0gZnVuY3Rpb24gKGltcG9z
dG9yLCByZXN0aXR1dGlvbikgeworICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5zZXRSZXN0
aXR1dGlvbihyZXN0aXR1dGlvbik7CisgICAgICAgIGltcG9zdG9yLl9wbHVnaW5EYXRhLnJlc3Rp
dHV0aW9uID0gcmVzdGl0dXRpb247CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHByZXNz
dXJlIGluc2lkZSB0aGUgaW1wb3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3Ig
dG8gZ2V0IHByZXNzdXJlIGZyb20KKyAgICAgKiBAcmV0dXJucyBwcmVzc3VyZSB2YWx1ZQorICAg
ICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2V0Qm9keVByZXNzdXJlID0gZnVuY3Rp
b24gKGltcG9zdG9yKSB7CisgICAgICAgIGlmICghaW1wb3N0b3Iuc29mdCkgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldh
cm4oIlByZXNzdXJlIGlzIG5vdCBhIHByb3BlcnR5IG9mIGEgcmlnaWQgYm9keSIpOworICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGltcG9zdG9yLl9wbHVn
aW5EYXRhLnByZXNzdXJlIHx8IDA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHByZXNz
dXJlIGluc2lkZSBhIHNvZnQgYm9keSBpbXBvc3RvcgorICAgICAqIENsb3RoIGFuZCByb3BlIG11
c3QgcmVtYWluIDAgcHJlc3N1cmUKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3IgdG8g
c2V0IHByZXNzdXJlIG9uCisgICAgICogQHBhcmFtIHByZXNzdXJlIHByZXNzdXJlIHZhbHVlCisg
ICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5zZXRCb2R5UHJlc3N1cmUgPSBmdW5j
dGlvbiAoaW1wb3N0b3IsIHByZXNzdXJlKSB7CisgICAgICAgIGlmIChpbXBvc3Rvci5zb2Z0KSB7
CisgICAgICAgICAgICBpZiAoaW1wb3N0b3IudHlwZSA9PT0gX1BoeXNpY3NfcGh5c2ljc0ltcG9z
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNpY3NJbXBvc3RvciJdLlNvZnRi
b2R5SW1wb3N0b3IpIHsKKyAgICAgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5nZXRf
bV9jZmcoKS5zZXRfa1BSKHByZXNzdXJlKTsKKyAgICAgICAgICAgICAgICBpbXBvc3Rvci5fcGx1
Z2luRGF0YS5wcmVzc3VyZSA9IHByZXNzdXJlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuZ2V0X21fY2ZnKCku
c2V0X2tQUigwKTsKKyAgICAgICAgICAgICAgICBpbXBvc3Rvci5fcGx1Z2luRGF0YS5wcmVzc3Vy
ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0u
V2FybigiUHJlc3N1cmUgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhIHNvZnRib2R5Iik7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgc3RpZmZuZXNzIG9mIHRoZSBpbXBv
c3RvcgorICAgICAqIEBwYXJhbSBpbXBvc3RvciBpbXBvc3RvciB0byBnZXQgc3RpZmZuZXNzIGZy
b20KKyAgICAgKiBAcmV0dXJucyBwcmVzc3VyZSB2YWx1ZQorICAgICAqLworICAgIEFtbW9KU1Bs
dWdpbi5wcm90b3R5cGUuZ2V0Qm9keVN0aWZmbmVzcyA9IGZ1bmN0aW9uIChpbXBvc3Rvcikgewor
ICAgICAgICBpZiAoIWltcG9zdG9yLnNvZnQpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCJTdGlmZm5lc3MgaXMg
bm90IGEgcHJvcGVydHkgb2YgYSByaWdpZCBib2R5Iik7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW1wb3N0b3IuX3BsdWdpbkRhdGEuc3RpZmZuZXNz
IHx8IDA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHN0aWZmbmVzcyBvZiB0aGUgaW1w
b3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3IgdG8gc2V0IHN0aWZmbmVzcyBv
bgorICAgICAqIEBwYXJhbSBzdGlmZm5lc3Mgc3RpZmZuZXNzIHZhbHVlIGZyb20gMCB0byAxCisg
ICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5zZXRCb2R5U3RpZmZuZXNzID0gZnVu
Y3Rpb24gKGltcG9zdG9yLCBzdGlmZm5lc3MpIHsKKyAgICAgICAgaWYgKGltcG9zdG9yLnNvZnQp
IHsKKyAgICAgICAgICAgIHN0aWZmbmVzcyA9IHN0aWZmbmVzcyA8IDAgPyAwIDogc3RpZmZuZXNz
OworICAgICAgICAgICAgc3RpZmZuZXNzID0gc3RpZmZuZXNzID4gMSA/IDEgOiBzdGlmZm5lc3M7
CisgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5nZXRfbV9tYXRlcmlhbHMoKS5hdCgw
KS5zZXRfbV9rTFNUKHN0aWZmbmVzcyk7CisgICAgICAgICAgICBpbXBvc3Rvci5fcGx1Z2luRGF0
YS5zdGlmZm5lc3MgPSBzdGlmZm5lc3M7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2Vy
Il0uV2FybigiU3RpZmZuZXNzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIGEgcmlnaWQgYm9keSIpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHZlbG9jaXR5SXRlcmF0aW9u
cyBvZiB0aGUgaW1wb3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3IgdG8gZ2V0
IHZlbG9jaXR5IGl0ZXJhdGlvbnMgZnJvbQorICAgICAqIEByZXR1cm5zIHZlbG9jaXR5SXRlcmF0
aW9ucyB2YWx1ZQorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2V0Qm9keVZl
bG9jaXR5SXRlcmF0aW9ucyA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBpZiAoIWlt
cG9zdG9yLnNvZnQpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCJWZWxvY2l0eSBpdGVyYXRpb25zIGlzIG5vdCBh
IHByb3BlcnR5IG9mIGEgcmlnaWQgYm9keSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGltcG9zdG9yLl9wbHVnaW5EYXRhLnZlbG9jaXR5SXRlcmF0
aW9ucyB8fCAwOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB2ZWxvY2l0eUl0ZXJhdGlv
bnMgb2YgdGhlIGltcG9zdG9yCisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdG9yIHRvIHNl
dCB2ZWxvY2l0eSBpdGVyYXRpb25zIG9uCisgICAgICogQHBhcmFtIHZlbG9jaXR5SXRlcmF0aW9u
cyB2ZWxvY2l0eUl0ZXJhdGlvbnMgdmFsdWUKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJv
dG90eXBlLnNldEJvZHlWZWxvY2l0eUl0ZXJhdGlvbnMgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIHZl
bG9jaXR5SXRlcmF0aW9ucykgeworICAgICAgICBpZiAoaW1wb3N0b3Iuc29mdCkgeworICAgICAg
ICAgICAgdmVsb2NpdHlJdGVyYXRpb25zID0gdmVsb2NpdHlJdGVyYXRpb25zIDwgMCA/IDAgOiB2
ZWxvY2l0eUl0ZXJhdGlvbnM7CisgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5nZXRf
bV9jZmcoKS5zZXRfdml0ZXJhdGlvbnModmVsb2NpdHlJdGVyYXRpb25zKTsKKyAgICAgICAgICAg
IGltcG9zdG9yLl9wbHVnaW5EYXRhLnZlbG9jaXR5SXRlcmF0aW9ucyA9IHZlbG9jaXR5SXRlcmF0
aW9uczsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCJWZWxvY2l0eSBp
dGVyYXRpb25zIGNhbm5vdCBiZSBhcHBsaWVkIHRvIGEgcmlnaWQgYm9keSIpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHBvc2l0aW9uSXRlcmF0aW9ucyBvZiB0aGUg
aW1wb3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3IgdG8gZ2V0IHBvc2l0aW9u
IGl0ZXJhdGlvbnMgZnJvbQorICAgICAqIEByZXR1cm5zIHBvc2l0aW9uSXRlcmF0aW9ucyB2YWx1
ZQorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2V0Qm9keVBvc2l0aW9uSXRl
cmF0aW9ucyA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBpZiAoIWltcG9zdG9yLnNv
ZnQpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJMb2dnZXIiXS5XYXJuKCJQb3NpdGlvbiBpdGVyYXRpb25zIGlzIG5vdCBhIHByb3BlcnR5
IG9mIGEgcmlnaWQgYm9keSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGltcG9zdG9yLl9wbHVnaW5EYXRhLnBvc2l0aW9uSXRlcmF0aW9ucyB8fCAw
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBwb3NpdGlvbkl0ZXJhdGlvbnMgb2YgdGhl
IGltcG9zdG9yCisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdG9yIHRvIHNldCBwb3NpdGlv
biBvbgorICAgICAqIEBwYXJhbSBwb3NpdGlvbkl0ZXJhdGlvbnMgcG9zaXRpb25JdGVyYXRpb25z
IHZhbHVlCisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5zZXRCb2R5UG9zaXRp
b25JdGVyYXRpb25zID0gZnVuY3Rpb24gKGltcG9zdG9yLCBwb3NpdGlvbkl0ZXJhdGlvbnMpIHsK
KyAgICAgICAgaWYgKGltcG9zdG9yLnNvZnQpIHsKKyAgICAgICAgICAgIHBvc2l0aW9uSXRlcmF0
aW9ucyA9IHBvc2l0aW9uSXRlcmF0aW9ucyA8IDAgPyAwIDogcG9zaXRpb25JdGVyYXRpb25zOwor
ICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuZ2V0X21fY2ZnKCkuc2V0X3BpdGVyYXRp
b25zKHBvc2l0aW9uSXRlcmF0aW9ucyk7CisgICAgICAgICAgICBpbXBvc3Rvci5fcGx1Z2luRGF0
YS5wb3NpdGlvbkl0ZXJhdGlvbnMgPSBwb3NpdGlvbkl0ZXJhdGlvbnM7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTG9nZ2VyIl0uV2FybigiUG9zaXRpb24gaXRlcmF0aW9ucyBjYW5ub3QgYmUg
YXBwbGllZCB0byBhIHJpZ2lkIGJvZHkiKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgKiBBcHBlbmQgYW4gYW5jaG9yIHRvIGEgY2xvdGggb2JqZWN0CisgICAgKiBAcGFyYW0gaW1w
b3N0b3IgaXMgdGhlIGNsb3RoIGltcG9zdG9yIHRvIGFkZCBhbmNob3IgdG8KKyAgICAqIEBwYXJh
bSBvdGhlckltcG9zdG9yIGlzIHRoZSByaWdpZCBpbXBvc3RvciB0byBhbmNob3IgdG8KKyAgICAq
IEBwYXJhbSB3aWR0aCByYXRpbyBhY3Jvc3Mgd2lkdGggZnJvbSAwIHRvIDEKKyAgICAqIEBwYXJh
bSBoZWlnaHQgcmF0aW8gdXAgaGVpZ2h0IGZyb20gMCB0byAxCisgICAgKiBAcGFyYW0gaW5mbHVl
bmNlIHRoZSBlbGFzdGljaXR5IGJldHdlZW4gY2xvdGggaW1wb3N0b3IgYW5kIGFuY2hvciBmcm9t
IDAsIHZlcnkgc3RyZXRjaHkgdG8gMSwgbGl0dGxlIHN0cmVjaAorICAgICogQHBhcmFtIG5vQ29s
bGlzaW9uQmV0d2VlbkxpbmtlZEJvZGllcyB3aGVuIHRydWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNv
ZnQgaW1wb3N0b3IgYW5kIGFuY2hvciBhcmUgaWdub3JlZDsgZGVmYXVsdCBmYWxzZQorICAgICov
CisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5hcHBlbmRBbmNob3IgPSBmdW5jdGlvbiAoaW1w
b3N0b3IsIG90aGVySW1wb3N0b3IsIHdpZHRoLCBoZWlnaHQsIGluZmx1ZW5jZSwgbm9Db2xsaXNp
b25CZXR3ZWVuTGlua2VkQm9kaWVzKSB7CisgICAgICAgIGlmIChpbmZsdWVuY2UgPT09IHZvaWQg
MCkgeyBpbmZsdWVuY2UgPSAxOyB9CisgICAgICAgIGlmIChub0NvbGxpc2lvbkJldHdlZW5MaW5r
ZWRCb2RpZXMgPT09IHZvaWQgMCkgeyBub0NvbGxpc2lvbkJldHdlZW5MaW5rZWRCb2RpZXMgPSBm
YWxzZTsgfQorICAgICAgICB2YXIgc2VncyA9IGltcG9zdG9yLnNlZ21lbnRzOworICAgICAgICB2
YXIgbmJBY3Jvc3MgPSBNYXRoLnJvdW5kKChzZWdzIC0gMSkgKiB3aWR0aCk7CisgICAgICAgIHZh
ciBuYlVwID0gTWF0aC5yb3VuZCgoc2VncyAtIDEpICogaGVpZ2h0KTsKKyAgICAgICAgdmFyIG5i
RG93biA9IHNlZ3MgLSAxIC0gbmJVcDsKKyAgICAgICAgdmFyIG5vZGUgPSBuYkFjcm9zcyArIHNl
Z3MgKiBuYkRvd247CisgICAgICAgIGltcG9zdG9yLnBoeXNpY3NCb2R5LmFwcGVuZEFuY2hvcihu
b2RlLCBvdGhlckltcG9zdG9yLnBoeXNpY3NCb2R5LCBub0NvbGxpc2lvbkJldHdlZW5MaW5rZWRC
b2RpZXMsIGluZmx1ZW5jZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBcHBlbmQgYW4gaG9v
ayB0byBhIHJvcGUgb2JqZWN0CisgICAgICogQHBhcmFtIGltcG9zdG9yIGlzIHRoZSByb3BlIGlt
cG9zdG9yIHRvIGFkZCBob29rIHRvCisgICAgICogQHBhcmFtIG90aGVySW1wb3N0b3IgaXMgdGhl
IHJpZ2lkIGltcG9zdG9yIHRvIGhvb2sgdG8KKyAgICAgKiBAcGFyYW0gbGVuZ3RoIHJhdGlvIGFs
b25nIHRoZSByb3BlIGZyb20gMCB0byAxCisgICAgICogQHBhcmFtIGluZmx1ZW5jZSB0aGUgZWxh
c3RpY2l0eSBiZXR3ZWVuIHNvZnQgaW1wb3N0b3IgYW5kIGFuY2hvciBmcm9tIDAsIHZlcnkgc3Ry
ZXRjaHkgdG8gMSwgbGl0dGxlIHN0cmVjaAorICAgICAqIEBwYXJhbSBub0NvbGxpc2lvbkJldHdl
ZW5MaW5rZWRCb2RpZXMgd2hlbiB0cnVlIGNvbGxpc2lvbnMgYmV0d2VlbiBzb2Z0IGltcG9zdG9y
IGFuZCBhbmNob3IgYXJlIGlnbm9yZWQ7IGRlZmF1bHQgZmFsc2UKKyAgICAgKi8KKyAgICBBbW1v
SlNQbHVnaW4ucHJvdG90eXBlLmFwcGVuZEhvb2sgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIG90aGVy
SW1wb3N0b3IsIGxlbmd0aCwgaW5mbHVlbmNlLCBub0NvbGxpc2lvbkJldHdlZW5MaW5rZWRCb2Rp
ZXMpIHsKKyAgICAgICAgaWYgKGluZmx1ZW5jZSA9PT0gdm9pZCAwKSB7IGluZmx1ZW5jZSA9IDE7
IH0KKyAgICAgICAgaWYgKG5vQ29sbGlzaW9uQmV0d2VlbkxpbmtlZEJvZGllcyA9PT0gdm9pZCAw
KSB7IG5vQ29sbGlzaW9uQmV0d2VlbkxpbmtlZEJvZGllcyA9IGZhbHNlOyB9CisgICAgICAgIHZh
ciBub2RlID0gTWF0aC5yb3VuZChpbXBvc3Rvci5zZWdtZW50cyAqIGxlbmd0aCk7CisgICAgICAg
IGltcG9zdG9yLnBoeXNpY3NCb2R5LmFwcGVuZEFuY2hvcihub2RlLCBvdGhlckltcG9zdG9yLnBo
eXNpY3NCb2R5LCBub0NvbGxpc2lvbkJldHdlZW5MaW5rZWRCb2RpZXMsIGluZmx1ZW5jZSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTbGVlcHMgdGhlIHBoeXNpY3MgYm9keSBhbmQgc3RvcHMg
aXQgZnJvbSBiZWluZyBhY3RpdmUKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3IgdG8g
c2xlZXAKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLnNsZWVwQm9keSA9IGZ1
bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uV2Fybigic2xlZXBCb2R5IGlzIG5vdCBjdXJyZW50bHkg
c3VwcG9ydGVkIGJ5IHRoZSBBbW1vIHBoeXNpY3MgcGx1Z2luIik7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBBY3RpdmF0ZXMgdGhlIHBoeXNpY3MgYm9keQorICAgICAqIEBwYXJhbSBpbXBvc3Rv
ciBpbXBvc3RvciB0byBhY3RpdmF0ZQorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5
cGUud2FrZVVwQm9keSA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBpbXBvc3Rvci5w
aHlzaWNzQm9keS5hY3RpdmF0ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0
aGUgZGlzdGFuY2UgcGFyYW1ldGVycyBvZiB0aGUgam9pbnQKKyAgICAgKiBAcGFyYW0gam9pbnQg
am9pbnQgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIG1heERpc3RhbmNlIG1heGltdW0gZGlzdGFu
Y2Ugb2YgdGhlIGpvaW50CisgICAgICogQHBhcmFtIG1pbkRpc3RhbmNlIG1pbmltdW0gZGlzdGFu
Y2Ugb2YgdGhlIGpvaW50CisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS51cGRh
dGVEaXN0YW5jZUpvaW50ID0gZnVuY3Rpb24gKGpvaW50LCBtYXhEaXN0YW5jZSwgbWluRGlzdGFu
Y2UpIHsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkxvZ2dlciJdLldhcm4oInVwZGF0ZURpc3RhbmNlSm9pbnQgaXMgbm90IGN1cnJlbnRseSBzdXBw
b3J0ZWQgYnkgdGhlIEFtbW8gcGh5c2ljcyBwbHVnaW4iKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldHMgYSBtb3RvciBvbiB0aGUgam9pbnQKKyAgICAgKiBAcGFyYW0gam9pbnQgam9pbnQg
dG8gc2V0IG1vdG9yIG9uCisgICAgICogQHBhcmFtIHNwZWVkIHNwZWVkIG9mIHRoZSBtb3Rvcgor
ICAgICAqIEBwYXJhbSBtYXhGb3JjZSBtYXhpbXVtIGZvcmNlIG9mIHRoZSBtb3RvcgorICAgICAq
IEBwYXJhbSBtb3RvckluZGV4IGluZGV4IG9mIHRoZSBtb3RvcgorICAgICAqLworICAgIEFtbW9K
U1BsdWdpbi5wcm90b3R5cGUuc2V0TW90b3IgPSBmdW5jdGlvbiAoam9pbnQsIHNwZWVkLCBtYXhG
b3JjZSwgbW90b3JJbmRleCkgeworICAgICAgICBqb2ludC5waHlzaWNzSm9pbnQuZW5hYmxlQW5n
dWxhck1vdG9yKHRydWUsIHNwZWVkLCBtYXhGb3JjZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSBtb3RvcnMgbGltaXQKKyAgICAgKiBAcGFyYW0gam9pbnQgam9pbnQgdG8gc2V0
IGxpbWl0IG9uCisgICAgICogQHBhcmFtIHVwcGVyTGltaXQgdXBwZXIgbGltaXQKKyAgICAgKiBA
cGFyYW0gbG93ZXJMaW1pdCBsb3dlciBsaW1pdAorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5w
cm90b3R5cGUuc2V0TGltaXQgPSBmdW5jdGlvbiAoam9pbnQsIHVwcGVyTGltaXQsIGxvd2VyTGlt
aXQpIHsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkxvZ2dlciJdLldhcm4oInNldExpbWl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRo
ZSBBbW1vIHBoeXNpY3MgcGx1Z2luIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTeW5jcyB0
aGUgcG9zaXRpb24gYW5kIHJvdGF0aW9uIG9mIGEgbWVzaCB3aXRoIHRoZSBpbXBvc3RvcgorICAg
ICAqIEBwYXJhbSBtZXNoIG1lc2ggdG8gc3luYworICAgICAqIEBwYXJhbSBpbXBvc3RvciBpbXBv
c3RvciB0byB1cGRhdGUgdGhlIG1lc2ggd2l0aAorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5w
cm90b3R5cGUuc3luY01lc2hXaXRoSW1wb3N0b3IgPSBmdW5jdGlvbiAobWVzaCwgaW1wb3N0b3Ip
IHsKKyAgICAgICAgdmFyIGJvZHkgPSBpbXBvc3Rvci5waHlzaWNzQm9keTsKKyAgICAgICAgYm9k
eS5nZXRNb3Rpb25TdGF0ZSgpLmdldFdvcmxkVHJhbnNmb3JtKHRoaXMuX3RtcEFtbW9UcmFuc2Zv
cm0pOworICAgICAgICBtZXNoLnBvc2l0aW9uLnggPSB0aGlzLl90bXBBbW1vVHJhbnNmb3JtLmdl
dE9yaWdpbigpLngoKTsKKyAgICAgICAgbWVzaC5wb3NpdGlvbi55ID0gdGhpcy5fdG1wQW1tb1Ry
YW5zZm9ybS5nZXRPcmlnaW4oKS55KCk7CisgICAgICAgIG1lc2gucG9zaXRpb24ueiA9IHRoaXMu
X3RtcEFtbW9UcmFuc2Zvcm0uZ2V0T3JpZ2luKCkueigpOworICAgICAgICBpZiAobWVzaC5yb3Rh
dGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJuaW9uLngg
PSB0aGlzLl90bXBBbW1vVHJhbnNmb3JtLmdldFJvdGF0aW9uKCkueCgpOworICAgICAgICAgICAg
bWVzaC5yb3RhdGlvblF1YXRlcm5pb24ueSA9IHRoaXMuX3RtcEFtbW9UcmFuc2Zvcm0uZ2V0Um90
YXRpb24oKS55KCk7CisgICAgICAgICAgICBtZXNoLnJvdGF0aW9uUXVhdGVybmlvbi56ID0gdGhp
cy5fdG1wQW1tb1RyYW5zZm9ybS5nZXRSb3RhdGlvbigpLnooKTsKKyAgICAgICAgICAgIG1lc2gu
cm90YXRpb25RdWF0ZXJuaW9uLncgPSB0aGlzLl90bXBBbW1vVHJhbnNmb3JtLmdldFJvdGF0aW9u
KCkudygpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByYWRp
dXMgb2YgdGhlIGltcG9zdG9yCisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdG9yIHRvIGdl
dCByYWRpdXMgZnJvbQorICAgICAqIEByZXR1cm5zIHRoZSByYWRpdXMKKyAgICAgKi8KKyAgICBB
bW1vSlNQbHVnaW4ucHJvdG90eXBlLmdldFJhZGl1cyA9IGZ1bmN0aW9uIChpbXBvc3Rvcikgewor
ICAgICAgICB2YXIgZXhudGVuZCA9IGltcG9zdG9yLmdldE9iamVjdEV4dGVuZFNpemUoKTsKKyAg
ICAgICAgcmV0dXJuIGV4bnRlbmQueCAvIDI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRz
IHRoZSBib3ggc2l6ZSBvZiB0aGUgaW1wb3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1w
b3N0b3IgdG8gZ2V0IGJveCBzaXplIGZyb20KKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1
bHRpbmcgYm94IHNpemUKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLmdldEJv
eFNpemVUb1JlZiA9IGZ1bmN0aW9uIChpbXBvc3RvciwgcmVzdWx0KSB7CisgICAgICAgIHZhciBl
eG50ZW5kID0gaW1wb3N0b3IuZ2V0T2JqZWN0RXh0ZW5kU2l6ZSgpOworICAgICAgICByZXN1bHQu
eCA9IGV4bnRlbmQueDsKKyAgICAgICAgcmVzdWx0LnkgPSBleG50ZW5kLnk7CisgICAgICAgIHJl
c3VsdC56ID0gZXhudGVuZC56OworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2Yg
dGhlIGltcG9zdG9yCisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5kaXNwb3Nl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBEaXNwb3NlIG9mIHdvcmxkCisgICAgICAgIEFt
bW8uZGVzdHJveSh0aGlzLndvcmxkKTsKKyAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuX3NvbHZl
cik7CisgICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLl9vdmVybGFwcGluZ1BhaXJDYWNoZSk7Cisg
ICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLl9kaXNwYXRjaGVyKTsKKyAgICAgICAgQW1tby5kZXN0
cm95KHRoaXMuX2NvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOworICAgICAgICAvLyBEaXNwb3NlIG9m
IHRtcCB2YXJpYWJsZXMKKyAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuX3RtcEFtbW9WZWN0b3JB
KTsKKyAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuX3RtcEFtbW9WZWN0b3JCKTsKKyAgICAgICAg
QW1tby5kZXN0cm95KHRoaXMuX3RtcEFtbW9WZWN0b3JDKTsKKyAgICAgICAgQW1tby5kZXN0cm95
KHRoaXMuX3RtcEFtbW9UcmFuc2Zvcm0pOworICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5fdG1w
QW1tb1F1YXRlcm5pb24pOworICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5fdG1wQW1tb0NvbmNy
ZXRlQ29udGFjdFJlc3VsdENhbGxiYWNrKTsKKyAgICAgICAgdGhpcy53b3JsZCA9IG51bGw7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBEb2VzIGEgcmF5Y2FzdCBpbiB0aGUgcGh5c2ljcyB3b3Js
ZAorICAgICAqIEBwYXJhbSBmcm9tIHdoZW4gc2hvdWxkIHRoZSByYXkgc3RhcnQ/CisgICAgICog
QHBhcmFtIHRvIHdoZW4gc2hvdWxkIHRoZSByYXkgZW5kPworICAgICAqIEByZXR1cm5zIFBoeXNp
Y3NSYXljYXN0UmVzdWx0CisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5yYXlj
YXN0ID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7CisgICAgICAgIHRoaXMuX3RtcEFtbW9WZWN0b3JS
Q0EgPSBuZXcgdGhpcy5ianNBTU1PLmJ0VmVjdG9yMyhmcm9tLngsIGZyb20ueSwgZnJvbS56KTsK
KyAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvclJDQiA9IG5ldyB0aGlzLmJqc0FNTU8uYnRWZWN0
b3IzKHRvLngsIHRvLnksIHRvLnopOworICAgICAgICB2YXIgcmF5Q2FsbGJhY2sgPSBuZXcgdGhp
cy5ianNBTU1PLkNsb3Nlc3RSYXlSZXN1bHRDYWxsYmFjayh0aGlzLl90bXBBbW1vVmVjdG9yUkNB
LCB0aGlzLl90bXBBbW1vVmVjdG9yUkNCKTsKKyAgICAgICAgdGhpcy53b3JsZC5yYXlUZXN0KHRo
aXMuX3RtcEFtbW9WZWN0b3JSQ0EsIHRoaXMuX3RtcEFtbW9WZWN0b3JSQ0IsIHJheUNhbGxiYWNr
KTsKKyAgICAgICAgdGhpcy5fcmF5Y2FzdFJlc3VsdC5yZXNldChmcm9tLCB0byk7CisgICAgICAg
IGlmIChyYXlDYWxsYmFjay5oYXNIaXQoKSkgeworICAgICAgICAgICAgLy8gVE9ETzogZG8gd2Ug
d2FudC9uZWVkIHRoZSBib2R5PyBJZiBzbywgc2V0IGFsbCB0aGUgZGF0YQorICAgICAgICAgICAg
LyoKKyAgICAgICAgICAgIHZhciByaWdpZEJvZHkgPSB0aGlzLmJqc0FNTU8uYnRSaWdpZEJvZHku
cHJvdG90eXBlLnVwY2FzdCgKKyAgICAgICAgICAgICAgICByYXlDYWxsYmFjay5nZXRfbV9jb2xs
aXNpb25PYmplY3QoKQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHZhciBib2R5ID0ge307
CisgICAgICAgICAgICAqLworICAgICAgICAgICAgdGhpcy5fcmF5Y2FzdFJlc3VsdC5zZXRIaXRE
YXRhKHsKKyAgICAgICAgICAgICAgICB4OiByYXlDYWxsYmFjay5nZXRfbV9oaXROb3JtYWxXb3Js
ZCgpLngoKSwKKyAgICAgICAgICAgICAgICB5OiByYXlDYWxsYmFjay5nZXRfbV9oaXROb3JtYWxX
b3JsZCgpLnkoKSwKKyAgICAgICAgICAgICAgICB6OiByYXlDYWxsYmFjay5nZXRfbV9oaXROb3Jt
YWxXb3JsZCgpLnooKSwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB4OiByYXlD
YWxsYmFjay5nZXRfbV9oaXRQb2ludFdvcmxkKCkueCgpLAorICAgICAgICAgICAgICAgIHk6IHJh
eUNhbGxiYWNrLmdldF9tX2hpdFBvaW50V29ybGQoKS55KCksCisgICAgICAgICAgICAgICAgejog
cmF5Q2FsbGJhY2suZ2V0X21faGl0UG9pbnRXb3JsZCgpLnooKSwKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgdGhpcy5fcmF5Y2FzdFJlc3VsdC5jYWxjdWxhdGVIaXREaXN0YW5jZSgpOwor
ICAgICAgICB9CisgICAgICAgIEFtbW8uZGVzdHJveShyYXlDYWxsYmFjayk7CisgICAgICAgIEFt
bW8uZGVzdHJveSh0aGlzLl90bXBBbW1vVmVjdG9yUkNBKTsKKyAgICAgICAgQW1tby5kZXN0cm95
KHRoaXMuX3RtcEFtbW9WZWN0b3JSQ0IpOworICAgICAgICByZXR1cm4gdGhpcy5fcmF5Y2FzdFJl
c3VsdDsKKyAgICB9OworICAgIEFtbW9KU1BsdWdpbi5ESVNBQkxFX0NPTExJU0lPTl9GTEFHID0g
NDsKKyAgICBBbW1vSlNQbHVnaW4uS0lORU1BVElDX0ZMQUcgPSAyOworICAgIEFtbW9KU1BsdWdp
bi5ESVNBQkxFX0RFQUNUSVZBVElPTl9GTEFHID0gNDsKKyAgICByZXR1cm4gQW1tb0pTUGx1Z2lu
OworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QaHlzaWNzL1BsdWdpbnMvY2Fu
bm9uSlNQbHVnaW4udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vUGh5c2ljcy9QbHVnaW5zL2Nhbm5vbkpTUGx1Z2luLnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogQ2Fubm9uSlNQbHVnaW4gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ2Fubm9uSlNQbHVnaW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIENhbm5v
bkpTUGx1Z2luOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfUGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL1BoeXNpY3MvcGh5
c2ljc0ltcG9zdG9yICovICIuL1BoeXNpY3MvcGh5c2ljc0ltcG9zdG9yLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1BoeXNpY3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9QaHlzaWNzL3BoeXNp
Y3NKb2ludCAqLyAiLi9QaHlzaWNzL3BoeXNpY3NKb2ludC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9QaHlzaWNzX3BoeXNpY3NFbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL1BoeXNpY3MvcGh5c2ljc0VuZ2lu
ZSAqLyAiLi9QaHlzaWNzL3BoeXNpY3NFbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcGh5c2ljc1JheWNhc3RSZXN1bHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3BoeXNpY3NSYXljYXN0UmVzdWx0ICovICIuL1Bo
eXNpY3MvcGh5c2ljc1JheWNhc3RSZXN1bHQudHMiKTsKKworCisKKworCisKKworLyoqIEBoaWRk
ZW4gKi8KK3ZhciBDYW5ub25KU1BsdWdpbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICBmdW5jdGlvbiBDYW5ub25KU1BsdWdpbihfdXNlRGVsdGFGb3JXb3JsZFN0ZXAsIGl0ZXJh
dGlvbnMsIGNhbm5vbkluamVjdGlvbikgeworICAgICAgICBpZiAoX3VzZURlbHRhRm9yV29ybGRT
dGVwID09PSB2b2lkIDApIHsgX3VzZURlbHRhRm9yV29ybGRTdGVwID0gdHJ1ZTsgfQorICAgICAg
ICBpZiAoaXRlcmF0aW9ucyA9PT0gdm9pZCAwKSB7IGl0ZXJhdGlvbnMgPSAxMDsgfQorICAgICAg
ICBpZiAoY2Fubm9uSW5qZWN0aW9uID09PSB2b2lkIDApIHsgY2Fubm9uSW5qZWN0aW9uID0gQ0FO
Tk9OOyB9CisgICAgICAgIHRoaXMuX3VzZURlbHRhRm9yV29ybGRTdGVwID0gX3VzZURlbHRhRm9y
V29ybGRTdGVwOworICAgICAgICB0aGlzLm5hbWUgPSAiQ2Fubm9uSlNQbHVnaW4iOworICAgICAg
ICB0aGlzLl9waHlzaWNzTWF0ZXJpYWxzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX2Zp
eGVkVGltZVN0ZXAgPSAxIC8gNjA7CisgICAgICAgIHRoaXMuX3BoeXNpY3NCb2R5c1RvUmVtb3Zl
QWZ0ZXJTdGVwID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX21pbnVzOTBYID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9u
Il0oLTAuNzA3MTA2NzgxMTg2NTQ3NSwgMCwgMCwgMC43MDcxMDY3ODExODY1NDc1KTsKKyAgICAg
ICAgdGhpcy5fcGx1czkwWCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdKDAuNzA3MTA2NzgxMTg2NTQ3NSwgMCwgMCwgMC43
MDcxMDY3ODExODY1NDc1KTsKKyAgICAgICAgdGhpcy5fdG1wUG9zaXRpb24gPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsK
KyAgICAgICAgdGhpcy5fdG1wRGVsdGFQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlz
Ll90bXBVbml0eVJvdGF0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl0oKTsKKyAgICAgICAgdGhpcy5CSlNDQU5OT04g
PSBjYW5ub25JbmplY3Rpb247CisgICAgICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCgpKSB7Cisg
ICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTG9n
Z2VyIl0uRXJyb3IoIkNhbm5vbkpTIGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBtYWtlIHN1cmUg
eW91IGluY2x1ZGVkIHRoZSBqcyBmaWxlLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX2V4dGVuZE5hbWVzcGFjZSgpOworICAgICAgICB0aGlzLndvcmxk
ID0gbmV3IHRoaXMuQkpTQ0FOTk9OLldvcmxkKCk7CisgICAgICAgIHRoaXMud29ybGQuYnJvYWRw
aGFzZSA9IG5ldyB0aGlzLkJKU0NBTk5PTi5OYWl2ZUJyb2FkcGhhc2UoKTsKKyAgICAgICAgdGhp
cy53b3JsZC5zb2x2ZXIuaXRlcmF0aW9ucyA9IGl0ZXJhdGlvbnM7CisgICAgICAgIHRoaXMuX2Nh
bm5vblJheWNhc3RSZXN1bHQgPSBuZXcgdGhpcy5CSlNDQU5OT04uUmF5Y2FzdFJlc3VsdCgpOwor
ICAgICAgICB0aGlzLl9yYXljYXN0UmVzdWx0ID0gbmV3IF9waHlzaWNzUmF5Y2FzdFJlc3VsdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQaHlzaWNzUmF5Y2FzdFJlc3VsdCJdKCk7Cisg
ICAgfQorICAgIENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5zZXRHcmF2aXR5ID0gZnVuY3Rpb24g
KGdyYXZpdHkpIHsKKyAgICAgICAgdGhpcy53b3JsZC5ncmF2aXR5LmNvcHkoZ3Jhdml0eSk7Cisg
ICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5cGUuc2V0VGltZVN0ZXAgPSBmdW5jdGlv
biAodGltZVN0ZXApIHsKKyAgICAgICAgdGhpcy5fZml4ZWRUaW1lU3RlcCA9IHRpbWVTdGVwOwor
ICAgIH07CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLmdldFRpbWVTdGVwID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fZml4ZWRUaW1lU3RlcDsKKyAgICB9OworICAg
IENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5leGVjdXRlU3RlcCA9IGZ1bmN0aW9uIChkZWx0YSkg
eworICAgICAgICB0aGlzLndvcmxkLnN0ZXAodGhpcy5fZml4ZWRUaW1lU3RlcCwgdGhpcy5fdXNl
RGVsdGFGb3JXb3JsZFN0ZXAgPyBkZWx0YSA6IDAsIDMpOworICAgICAgICB0aGlzLl9yZW1vdmVN
YXJrZWRQaHlzaWNzQm9kaWVzRnJvbVdvcmxkKCk7CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdp
bi5wcm90b3R5cGUuX3JlbW92ZU1hcmtlZFBoeXNpY3NCb2RpZXNGcm9tV29ybGQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmICh0aGlzLl9waHlz
aWNzQm9keXNUb1JlbW92ZUFmdGVyU3RlcC5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB0aGlz
Ll9waHlzaWNzQm9keXNUb1JlbW92ZUFmdGVyU3RlcC5mb3JFYWNoKGZ1bmN0aW9uIChwaHlzaWNz
Qm9keSkgeworICAgICAgICAgICAgICAgIF90aGlzLndvcmxkLnJlbW92ZShwaHlzaWNzQm9keSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMuX3BoeXNpY3NCb2R5c1RvUmVtb3Zl
QWZ0ZXJTdGVwID0gW107CisgICAgICAgIH0KKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnBy
b3RvdHlwZS5hcHBseUltcHVsc2UgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIGZvcmNlLCBjb250YWN0
UG9pbnQpIHsKKyAgICAgICAgdmFyIHdvcmxkUG9pbnQgPSBuZXcgdGhpcy5CSlNDQU5OT04uVmVj
Myhjb250YWN0UG9pbnQueCwgY29udGFjdFBvaW50LnksIGNvbnRhY3RQb2ludC56KTsKKyAgICAg
ICAgdmFyIGltcHVsc2UgPSBuZXcgdGhpcy5CSlNDQU5OT04uVmVjMyhmb3JjZS54LCBmb3JjZS55
LCBmb3JjZS56KTsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuYXBwbHlJbXB1bHNlKGlt
cHVsc2UsIHdvcmxkUG9pbnQpOworICAgIH07CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBl
LmFwcGx5Rm9yY2UgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIGZvcmNlLCBjb250YWN0UG9pbnQpIHsK
KyAgICAgICAgdmFyIHdvcmxkUG9pbnQgPSBuZXcgdGhpcy5CSlNDQU5OT04uVmVjMyhjb250YWN0
UG9pbnQueCwgY29udGFjdFBvaW50LnksIGNvbnRhY3RQb2ludC56KTsKKyAgICAgICAgdmFyIGlt
cHVsc2UgPSBuZXcgdGhpcy5CSlNDQU5OT04uVmVjMyhmb3JjZS54LCBmb3JjZS55LCBmb3JjZS56
KTsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuYXBwbHlGb3JjZShpbXB1bHNlLCB3b3Js
ZFBvaW50KTsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5nZW5lcmF0ZVBo
eXNpY3NCb2R5ID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIC8vIFdoZW4gY2FsbGlu
ZyBmb3JjZVVwZGF0ZSBnZW5lcmF0ZVBoeXNpY3NCb2R5IGlzIGNhbGxlZCBhZ2FpbiwgZW5zdXJl
IHRoYXQgdGhlIHVwZGF0ZWQgYm9keSBkb2VzIG5vdCBpbnN0YW50bHkgY29sbGlkZSB3aXRoIHJl
bW92ZWQgYm9keQorICAgICAgICB0aGlzLl9yZW1vdmVNYXJrZWRQaHlzaWNzQm9kaWVzRnJvbVdv
cmxkKCk7CisgICAgICAgIC8vcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcC4gRG9lcyB0aGlzIGlt
cG9zdG9yIGhhcyBhIHBhcmVudCBpbXBvc3Rvcj8KKyAgICAgICAgaWYgKGltcG9zdG9yLnBhcmVu
dCkgeworICAgICAgICAgICAgaWYgKGltcG9zdG9yLnBoeXNpY3NCb2R5KSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5yZW1vdmVQaHlzaWNzQm9keShpbXBvc3Rvcik7CisgICAgICAgICAgICAgICAg
Ly9UT0RPIGlzIHRoYXQgbmVlZGVkPworICAgICAgICAgICAgICAgIGltcG9zdG9yLmZvcmNlVXBk
YXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgLy9zaG91bGQgYSBuZXcgYm9keSBiZSBjcmVhdGVkIGZvciB0aGlzIGltcG9zdG9yPwor
ICAgICAgICBpZiAoaW1wb3N0b3IuaXNCb2R5SW5pdFJlcXVpcmVkKCkpIHsKKyAgICAgICAgICAg
IHZhciBzaGFwZSA9IHRoaXMuX2NyZWF0ZVNoYXBlKGltcG9zdG9yKTsKKyAgICAgICAgICAgIC8v
dW5yZWdpc3RlciBldmVudHMsIGlmIGJvZHkgaXMgYmVpbmcgY2hhbmdlZAorICAgICAgICAgICAg
dmFyIG9sZEJvZHkgPSBpbXBvc3Rvci5waHlzaWNzQm9keTsKKyAgICAgICAgICAgIGlmIChvbGRC
b2R5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQaHlzaWNzQm9keShpbXBvc3Rvcik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL2NyZWF0ZSB0aGUgYm9keSBhbmQgbWF0ZXJp
YWwKKyAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHRoaXMuX2FkZE1hdGVyaWFsKCJtYXQtIiAr
IGltcG9zdG9yLnVuaXF1ZUlkLCBpbXBvc3Rvci5nZXRQYXJhbSgiZnJpY3Rpb24iKSwgaW1wb3N0
b3IuZ2V0UGFyYW0oInJlc3RpdHV0aW9uIikpOworICAgICAgICAgICAgdmFyIGJvZHlDcmVhdGlv
bk9iamVjdCA9IHsKKyAgICAgICAgICAgICAgICBtYXNzOiBpbXBvc3Rvci5nZXRQYXJhbSgibWFz
cyIpLAorICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbAorICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIC8vIEEgc2ltcGxlIGV4dGVuZCwgaW4gY2FzZSBuYXRpdmUgb3B0aW9ucyB3
ZXJlIHVzZWQuCisgICAgICAgICAgICB2YXIgbmF0aXZlT3B0aW9ucyA9IGltcG9zdG9yLmdldFBh
cmFtKCJuYXRpdmVPcHRpb25zIik7CisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbmF0aXZl
T3B0aW9ucykgeworICAgICAgICAgICAgICAgIGlmIChuYXRpdmVPcHRpb25zLmhhc093blByb3Bl
cnR5KGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9keUNyZWF0aW9uT2JqZWN0W2tleV0g
PSBuYXRpdmVPcHRpb25zW2tleV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkgPSBuZXcgdGhpcy5CSlNDQU5OT04uQm9k
eShib2R5Q3JlYXRpb25PYmplY3QpOworICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHku
YWRkRXZlbnRMaXN0ZW5lcigiY29sbGlkZSIsIGltcG9zdG9yLm9uQ29sbGlkZSk7CisgICAgICAg
ICAgICB0aGlzLndvcmxkLmFkZEV2ZW50TGlzdGVuZXIoInByZVN0ZXAiLCBpbXBvc3Rvci5iZWZv
cmVTdGVwKTsKKyAgICAgICAgICAgIHRoaXMud29ybGQuYWRkRXZlbnRMaXN0ZW5lcigicG9zdFN0
ZXAiLCBpbXBvc3Rvci5hZnRlclN0ZXApOworICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0Jv
ZHkuYWRkU2hhcGUoc2hhcGUpOworICAgICAgICAgICAgdGhpcy53b3JsZC5hZGQoaW1wb3N0b3Iu
cGh5c2ljc0JvZHkpOworICAgICAgICAgICAgLy90cnkgdG8ga2VlcCB0aGUgYm9keSBtb3Zpbmcg
aW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiBieSB0YWtpbmcgb2xkIHByb3BlcnRpZXMuCisgICAgICAg
ICAgICAvL1Nob3VsZCBiZSB0ZXN0ZWQhCisgICAgICAgICAgICBpZiAob2xkQm9keSkgeworICAg
ICAgICAgICAgICAgIFsnZm9yY2UnLCAndG9ycXVlJywgJ3ZlbG9jaXR5JywgJ2FuZ3VsYXJWZWxv
Y2l0eSddLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7CisgICAgICAgICAgICAgICAgICAgIGlt
cG9zdG9yLnBoeXNpY3NCb2R5W3BhcmFtXS5jb3B5KG9sZEJvZHlbcGFyYW1dKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NDaGls
ZE1lc2hlcyhpbXBvc3Rvcik7CisgICAgICAgIH0KKyAgICAgICAgLy9ub3cgdXBkYXRlIHRoZSBi
b2R5J3MgdHJhbnNmb3JtYXRpb24KKyAgICAgICAgdGhpcy5fdXBkYXRlUGh5c2ljc0JvZHlUcmFu
c2Zvcm1hdGlvbihpbXBvc3Rvcik7CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5
cGUuX3Byb2Nlc3NDaGlsZE1lc2hlcyA9IGZ1bmN0aW9uIChtYWluSW1wb3N0b3IpIHsKKyAgICAg
ICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIG1lc2hDaGlsZHJlbiA9IG1haW5JbXBv
c3Rvci5vYmplY3QuZ2V0Q2hpbGRNZXNoZXMgPyBtYWluSW1wb3N0b3Iub2JqZWN0LmdldENoaWxk
TWVzaGVzKHRydWUpIDogW107CisgICAgICAgIHZhciBjdXJyZW50Um90YXRpb24gPSBtYWluSW1w
b3N0b3Iub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbjsKKyAgICAgICAgaWYgKG1lc2hDaGlsZHJl
bi5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciBwcm9jZXNzTWVzaCA9IGZ1bmN0aW9uIChsb2Nh
bFBvc2l0aW9uLCBtZXNoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Um90YXRpb24g
fHwgIW1lc2gucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkSW1wb3N0b3Ig
PSBtZXNoLmdldFBoeXNpY3NJbXBvc3RvcigpOworICAgICAgICAgICAgICAgIGlmIChjaGlsZElt
cG9zdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjaGlsZEltcG9zdG9y
LnBhcmVudDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPT0gbWFpbkltcG9zdG9y
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcFBvc2l0aW9uID0gbWVzaC5nZXRBYnNv
bHV0ZVBvc2l0aW9uKCkuc3VidHJhY3QobWFpbkltcG9zdG9yLm9iamVjdC5nZXRBYnNvbHV0ZVBv
c2l0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2FsUm90YXRpb24gPSBt
ZXNoLnJvdGF0aW9uUXVhdGVybmlvbi5tdWx0aXBseShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdLkludmVyc2UoY3VycmVudFJvdGF0
aW9uKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbXBvc3Rvci5waHlzaWNz
Qm9keSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZVBoeXNpY3NC
b2R5KGNoaWxkSW1wb3N0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW1w
b3N0b3IucGh5c2ljc0JvZHkgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGRJbXBvc3Rvci5wYXJlbnQgPSBtYWluSW1wb3N0b3I7
CisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEltcG9zdG9yLnJlc2V0VXBkYXRlRmxhZ3Mo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1haW5JbXBvc3Rvci5waHlzaWNzQm9keS5hZGRT
aGFwZShfdGhpcy5fY3JlYXRlU2hhcGUoY2hpbGRJbXBvc3RvciksIG5ldyBfdGhpcy5CSlNDQU5O
T04uVmVjMyhwUG9zaXRpb24ueCwgcFBvc2l0aW9uLnksIHBQb3NpdGlvbi56KSwgbmV3IF90aGlz
LkJKU0NBTk5PTi5RdWF0ZXJuaW9uKGxvY2FsUm90YXRpb24ueCwgbG9jYWxSb3RhdGlvbi55LCBs
b2NhbFJvdGF0aW9uLnosIGxvY2FsUm90YXRpb24udykpOworICAgICAgICAgICAgICAgICAgICAg
ICAgLy9BZGQgdGhlIG1hc3Mgb2YgdGhlIGNoaWxkcmVuLgorICAgICAgICAgICAgICAgICAgICAg
ICAgbWFpbkltcG9zdG9yLnBoeXNpY3NCb2R5Lm1hc3MgKz0gY2hpbGRJbXBvc3Rvci5nZXRQYXJh
bSgibWFzcyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGN1cnJlbnRSb3RhdGlvbi5tdWx0aXBseUluUGxhY2UobWVzaC5yb3RhdGlv
blF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgIG1lc2guZ2V0Q2hpbGRNZXNoZXModHJ1ZSku
ZmlsdGVyKGZ1bmN0aW9uIChtKSB7IHJldHVybiAhIW0ucGh5c2ljc0ltcG9zdG9yOyB9KS5mb3JF
YWNoKHByb2Nlc3NNZXNoLmJpbmQoX3RoaXMsIG1lc2guZ2V0QWJzb2x1dGVQb3NpdGlvbigpKSk7
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgbWVzaENoaWxkcmVuLmZpbHRlcihmdW5jdGlv
biAobSkgeyByZXR1cm4gISFtLnBoeXNpY3NJbXBvc3RvcjsgfSkuZm9yRWFjaChwcm9jZXNzTWVz
aC5iaW5kKHRoaXMsIG1haW5JbXBvc3Rvci5vYmplY3QuZ2V0QWJzb2x1dGVQb3NpdGlvbigpKSk7
CisgICAgICAgIH0KKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5yZW1vdmVQ
aHlzaWNzQm9keSA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBpbXBvc3Rvci5waHlz
aWNzQm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJjb2xsaWRlIiwgaW1wb3N0b3Iub25Db2xsaWRl
KTsKKyAgICAgICAgdGhpcy53b3JsZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcmVTdGVwIiwgaW1w
b3N0b3IuYmVmb3JlU3RlcCk7CisgICAgICAgIHRoaXMud29ybGQucmVtb3ZlRXZlbnRMaXN0ZW5l
cigicG9zdFN0ZXAiLCBpbXBvc3Rvci5hZnRlclN0ZXApOworICAgICAgICAvLyBPbmx5IHJlbW92
ZSB0aGUgcGh5c2ljcyBib2R5IGFmdGVyIHRoZSBwaHlzaWNzIHN0ZXAgdG8gYXZvaWQgZGlzcnVw
dGluZyBjYW5ub24ncyBpbnRlcm5hbCBzdGF0ZQorICAgICAgICBpZiAodGhpcy5fcGh5c2ljc0Jv
ZHlzVG9SZW1vdmVBZnRlclN0ZXAuaW5kZXhPZihpbXBvc3Rvci5waHlzaWNzQm9keSkgPT09IC0x
KSB7CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzQm9keXNUb1JlbW92ZUFmdGVyU3RlcC5wdXNo
KGltcG9zdG9yLnBoeXNpY3NCb2R5KTsKKyAgICAgICAgfQorICAgIH07CisgICAgQ2Fubm9uSlNQ
bHVnaW4ucHJvdG90eXBlLmdlbmVyYXRlSm9pbnQgPSBmdW5jdGlvbiAoaW1wb3N0b3JKb2ludCkg
eworICAgICAgICB2YXIgbWFpbkJvZHkgPSBpbXBvc3RvckpvaW50Lm1haW5JbXBvc3Rvci5waHlz
aWNzQm9keTsKKyAgICAgICAgdmFyIGNvbm5lY3RlZEJvZHkgPSBpbXBvc3RvckpvaW50LmNvbm5l
Y3RlZEltcG9zdG9yLnBoeXNpY3NCb2R5OworICAgICAgICBpZiAoIW1haW5Cb2R5IHx8ICFjb25u
ZWN0ZWRCb2R5KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFy
IGNvbnN0cmFpbnQ7CisgICAgICAgIHZhciBqb2ludERhdGEgPSBpbXBvc3RvckpvaW50LmpvaW50
LmpvaW50RGF0YTsKKyAgICAgICAgLy9UT0RPIC0gaHR0cHM6Ly9naXRodWIuY29tL3NjaHRlcHBl
L3RoaXMuQkpTQ0FOTk9OLmpzL2Jsb2IvZ2gtcGFnZXMvZGVtb3MvY29sbGlzaW9uRmlsdGVyLmh0
bWwKKyAgICAgICAgdmFyIGNvbnN0cmFpbnREYXRhID0geworICAgICAgICAgICAgcGl2b3RBOiBq
b2ludERhdGEubWFpblBpdm90ID8gbmV3IHRoaXMuQkpTQ0FOTk9OLlZlYzMoKS5jb3B5KGpvaW50
RGF0YS5tYWluUGl2b3QpIDogbnVsbCwKKyAgICAgICAgICAgIHBpdm90Qjogam9pbnREYXRhLmNv
bm5lY3RlZFBpdm90ID8gbmV3IHRoaXMuQkpTQ0FOTk9OLlZlYzMoKS5jb3B5KGpvaW50RGF0YS5j
b25uZWN0ZWRQaXZvdCkgOiBudWxsLAorICAgICAgICAgICAgYXhpc0E6IGpvaW50RGF0YS5tYWlu
QXhpcyA/IG5ldyB0aGlzLkJKU0NBTk5PTi5WZWMzKCkuY29weShqb2ludERhdGEubWFpbkF4aXMp
IDogbnVsbCwKKyAgICAgICAgICAgIGF4aXNCOiBqb2ludERhdGEuY29ubmVjdGVkQXhpcyA/IG5l
dyB0aGlzLkJKU0NBTk5PTi5WZWMzKCkuY29weShqb2ludERhdGEuY29ubmVjdGVkQXhpcykgOiBu
dWxsLAorICAgICAgICAgICAgbWF4Rm9yY2U6IGpvaW50RGF0YS5uYXRpdmVQYXJhbXMubWF4Rm9y
Y2UsCisgICAgICAgICAgICBjb2xsaWRlQ29ubmVjdGVkOiAhIWpvaW50RGF0YS5jb2xsaXNpb24K
KyAgICAgICAgfTsKKyAgICAgICAgc3dpdGNoIChpbXBvc3RvckpvaW50LmpvaW50LnR5cGUpIHsK
KyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIlBoeXNpY3NKb2ludCJdLkhpbmdlSm9pbnQ6CisgICAgICAgICAgICBjYXNl
IF9QaHlzaWNzX3BoeXNpY3NKb2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQaHlz
aWNzSm9pbnQiXS5IaW5nZTJKb2ludDoKKyAgICAgICAgICAgICAgICBjb25zdHJhaW50ID0gbmV3
IHRoaXMuQkpTQ0FOTk9OLkhpbmdlQ29uc3RyYWludChtYWluQm9keSwgY29ubmVjdGVkQm9keSwg
Y29uc3RyYWludERhdGEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBfUGh5c2ljc19waHlzaWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUGh5
c2ljc0pvaW50Il0uRGlzdGFuY2VKb2ludDoKKyAgICAgICAgICAgICAgICBjb25zdHJhaW50ID0g
bmV3IHRoaXMuQkpTQ0FOTk9OLkRpc3RhbmNlQ29uc3RyYWludChtYWluQm9keSwgY29ubmVjdGVk
Qm9keSwgam9pbnREYXRhLm1heERpc3RhbmNlIHx8IDIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siUGh5c2ljc0pvaW50Il0uU3ByaW5nSm9pbnQ6CisgICAgICAgICAgICAg
ICAgdmFyIHNwcmluZ0RhdGEgPSBqb2ludERhdGE7CisgICAgICAgICAgICAgICAgY29uc3RyYWlu
dCA9IG5ldyB0aGlzLkJKU0NBTk5PTi5TcHJpbmcobWFpbkJvZHksIGNvbm5lY3RlZEJvZHksIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdExlbmd0aDogc3ByaW5nRGF0YS5sZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgIHN0aWZmbmVzczogc3ByaW5nRGF0YS5zdGlmZm5lc3MsCisgICAgICAg
ICAgICAgICAgICAgIGRhbXBpbmc6IHNwcmluZ0RhdGEuZGFtcGluZywKKyAgICAgICAgICAgICAg
ICAgICAgbG9jYWxBbmNob3JBOiBjb25zdHJhaW50RGF0YS5waXZvdEEsCisgICAgICAgICAgICAg
ICAgICAgIGxvY2FsQW5jaG9yQjogY29uc3RyYWludERhdGEucGl2b3RCCisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNz
X3BoeXNpY3NKb2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQaHlzaWNzSm9pbnQi
XS5Mb2NrSm9pbnQ6CisgICAgICAgICAgICAgICAgY29uc3RyYWludCA9IG5ldyB0aGlzLkJKU0NB
Tk5PTi5Mb2NrQ29uc3RyYWludChtYWluQm9keSwgY29ubmVjdGVkQm9keSwgY29uc3RyYWludERh
dGEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19w
aHlzaWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUGh5c2ljc0pvaW50Il0u
UG9pbnRUb1BvaW50Sm9pbnQ6CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NKb2lu
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQaHlzaWNzSm9pbnQiXS5CYWxsQW5kU29j
a2V0Sm9pbnQ6CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGNvbnN0cmFp
bnQgPSBuZXcgdGhpcy5CSlNDQU5OT04uUG9pbnRUb1BvaW50Q29uc3RyYWludChtYWluQm9keSwg
Y29uc3RyYWludERhdGEucGl2b3RBLCBjb25uZWN0ZWRCb2R5LCBjb25zdHJhaW50RGF0YS5waXZv
dEIsIGNvbnN0cmFpbnREYXRhLm1heEZvcmNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAvL3NldCB0aGUgY29sbGlkZUNvbm5lY3RlZCBmbGFnIGFmdGVyIHRo
ZSBjcmVhdGlvbiwgc2luY2UgRGlzdGFuY2VKb2ludCBpZ25vcmVzIGl0LgorICAgICAgICBjb25z
dHJhaW50LmNvbGxpZGVDb25uZWN0ZWQgPSAhIWpvaW50RGF0YS5jb2xsaXNpb247CisgICAgICAg
IGltcG9zdG9ySm9pbnQuam9pbnQucGh5c2ljc0pvaW50ID0gY29uc3RyYWludDsKKyAgICAgICAg
Ly9kb24ndCBhZGQgc3ByaW5nIGFzIGNvbnN0cmFpbnQsIGFzIGl0IGlzIG5vdCBvbmUuCisgICAg
ICAgIGlmIChpbXBvc3RvckpvaW50LmpvaW50LnR5cGUgIT09IF9QaHlzaWNzX3BoeXNpY3NKb2lu
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQaHlzaWNzSm9pbnQiXS5TcHJpbmdKb2lu
dCkgeworICAgICAgICAgICAgdGhpcy53b3JsZC5hZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW1wb3N0b3JKb2ludC5qb2lu
dC5qb2ludERhdGEuZm9yY2VBcHBsaWNhdGlvbkNhbGxiYWNrID0gaW1wb3N0b3JKb2ludC5qb2lu
dC5qb2ludERhdGEuZm9yY2VBcHBsaWNhdGlvbkNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdHJhaW50LmFwcGx5Rm9yY2UoKTsKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBpbXBvc3RvckpvaW50Lm1haW5JbXBvc3Rvci5yZWdpc3RlckFmdGVyUGh5c2lj
c1N0ZXAoaW1wb3N0b3JKb2ludC5qb2ludC5qb2ludERhdGEuZm9yY2VBcHBsaWNhdGlvbkNhbGxi
YWNrKTsKKyAgICAgICAgfQorICAgIH07CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLnJl
bW92ZUpvaW50ID0gZnVuY3Rpb24gKGltcG9zdG9ySm9pbnQpIHsKKyAgICAgICAgaWYgKGltcG9z
dG9ySm9pbnQuam9pbnQudHlwZSAhPT0gX1BoeXNpY3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlBoeXNpY3NKb2ludCJdLlNwcmluZ0pvaW50KSB7CisgICAgICAg
ICAgICB0aGlzLndvcmxkLnJlbW92ZUNvbnN0cmFpbnQoaW1wb3N0b3JKb2ludC5qb2ludC5waHlz
aWNzSm9pbnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW1wb3N0
b3JKb2ludC5tYWluSW1wb3N0b3IudW5yZWdpc3RlckFmdGVyUGh5c2ljc1N0ZXAoaW1wb3N0b3JK
b2ludC5qb2ludC5qb2ludERhdGEuZm9yY2VBcHBsaWNhdGlvbkNhbGxiYWNrKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLl9hZGRNYXRlcmlhbCA9IGZ1
bmN0aW9uIChuYW1lLCBmcmljdGlvbiwgcmVzdGl0dXRpb24pIHsKKyAgICAgICAgdmFyIGluZGV4
OworICAgICAgICB2YXIgbWF0OworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0aGlz
Ll9waHlzaWNzTWF0ZXJpYWxzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgbWF0ID0g
dGhpcy5fcGh5c2ljc01hdGVyaWFsc1tpbmRleF07CisgICAgICAgICAgICBpZiAobWF0LmZyaWN0
aW9uID09PSBmcmljdGlvbiAmJiBtYXQucmVzdGl0dXRpb24gPT09IHJlc3RpdHV0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB2YXIgY3VycmVudE1hdCA9IG5ldyB0aGlzLkJKU0NBTk5PTi5NYXRlcmlhbChuYW1lKTsK
KyAgICAgICAgY3VycmVudE1hdC5mcmljdGlvbiA9IGZyaWN0aW9uOworICAgICAgICBjdXJyZW50
TWF0LnJlc3RpdHV0aW9uID0gcmVzdGl0dXRpb247CisgICAgICAgIHRoaXMuX3BoeXNpY3NNYXRl
cmlhbHMucHVzaChjdXJyZW50TWF0KTsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRNYXQ7CisgICAg
fTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5cGUuX2NoZWNrV2l0aEVwc2lsb24gPSBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgX1BoeXNpY3NfcGh5c2ljc0Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJQaHlzaWNzRW5naW5lIl0uRXBzaWxv
biA/IF9QaHlzaWNzX3BoeXNpY3NFbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
UGh5c2ljc0VuZ2luZSJdLkVwc2lsb24gOiB2YWx1ZTsKKyAgICB9OworICAgIENhbm5vbkpTUGx1
Z2luLnByb3RvdHlwZS5fY3JlYXRlU2hhcGUgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAg
ICAgdmFyIG9iamVjdCA9IGltcG9zdG9yLm9iamVjdDsKKyAgICAgICAgdmFyIHJldHVyblZhbHVl
OworICAgICAgICB2YXIgZXh0ZW5kU2l6ZSA9IGltcG9zdG9yLmdldE9iamVjdEV4dGVuZFNpemUo
KTsKKyAgICAgICAgc3dpdGNoIChpbXBvc3Rvci50eXBlKSB7CisgICAgICAgICAgICBjYXNlIF9Q
aHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaHlz
aWNzSW1wb3N0b3IiXS5TcGhlcmVJbXBvc3RvcjoKKyAgICAgICAgICAgICAgICB2YXIgcmFkaXVz
WCA9IGV4dGVuZFNpemUueDsKKyAgICAgICAgICAgICAgICB2YXIgcmFkaXVzWSA9IGV4dGVuZFNp
emUueTsKKyAgICAgICAgICAgICAgICB2YXIgcmFkaXVzWiA9IGV4dGVuZFNpemUuejsKKyAgICAg
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyB0aGlzLkJKU0NBTk5PTi5TcGhlcmUoTWF0aC5t
YXgodGhpcy5fY2hlY2tXaXRoRXBzaWxvbihyYWRpdXNYKSwgdGhpcy5fY2hlY2tXaXRoRXBzaWxv
bihyYWRpdXNZKSwgdGhpcy5fY2hlY2tXaXRoRXBzaWxvbihyYWRpdXNaKSkgLyAyKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vVE1QIGFsc28gZm9yIGN5bGluZGVyIC0g
VE9ETyBDYW5ub24gc3VwcG9ydHMgY3lsaW5kZXIgbmF0aXZlbHkuCisgICAgICAgICAgICBjYXNl
IF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQ
aHlzaWNzSW1wb3N0b3IiXS5DeWxpbmRlckltcG9zdG9yOgorICAgICAgICAgICAgICAgIHZhciBu
YXRpdmVQYXJhbXMgPSBpbXBvc3Rvci5nZXRQYXJhbSgibmF0aXZlT3B0aW9ucyIpOworICAgICAg
ICAgICAgICAgIGlmICghbmF0aXZlUGFyYW1zKSB7CisgICAgICAgICAgICAgICAgICAgIG5hdGl2
ZVBhcmFtcyA9IHt9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgcmFk
aXVzVG9wID0gbmF0aXZlUGFyYW1zLnJhZGl1c1RvcCAhPT0gdW5kZWZpbmVkID8gbmF0aXZlUGFy
YW1zLnJhZGl1c1RvcCA6IHRoaXMuX2NoZWNrV2l0aEVwc2lsb24oZXh0ZW5kU2l6ZS54KSAvIDI7
CisgICAgICAgICAgICAgICAgdmFyIHJhZGl1c0JvdHRvbSA9IG5hdGl2ZVBhcmFtcy5yYWRpdXNC
b3R0b20gIT09IHVuZGVmaW5lZCA/IG5hdGl2ZVBhcmFtcy5yYWRpdXNCb3R0b20gOiB0aGlzLl9j
aGVja1dpdGhFcHNpbG9uKGV4dGVuZFNpemUueCkgLyAyOworICAgICAgICAgICAgICAgIHZhciBo
ZWlnaHQgPSBuYXRpdmVQYXJhbXMuaGVpZ2h0ICE9PSB1bmRlZmluZWQgPyBuYXRpdmVQYXJhbXMu
aGVpZ2h0IDogdGhpcy5fY2hlY2tXaXRoRXBzaWxvbihleHRlbmRTaXplLnkpOworICAgICAgICAg
ICAgICAgIHZhciBudW1TZWdtZW50cyA9IG5hdGl2ZVBhcmFtcy5udW1TZWdtZW50cyAhPT0gdW5k
ZWZpbmVkID8gbmF0aXZlUGFyYW1zLm51bVNlZ21lbnRzIDogMTY7CisgICAgICAgICAgICAgICAg
cmV0dXJuVmFsdWUgPSBuZXcgdGhpcy5CSlNDQU5OT04uQ3lsaW5kZXIocmFkaXVzVG9wLCByYWRp
dXNCb3R0b20sIGhlaWdodCwgbnVtU2VnbWVudHMpOworICAgICAgICAgICAgICAgIC8vIFJvdGF0
ZSA5MCBkZWdyZWVzIGFzIHRoaXMgc2hhcGUgaXMgaG9yaXpvbnRhbCBpbiBjYW5ub24KKyAgICAg
ICAgICAgICAgICB2YXIgcXVhdCA9IG5ldyB0aGlzLkJKU0NBTk5PTi5RdWF0ZXJuaW9uKCk7Cisg
ICAgICAgICAgICAgICAgcXVhdC5zZXRGcm9tQXhpc0FuZ2xlKG5ldyB0aGlzLkJKU0NBTk5PTi5W
ZWMzKDEsIDAsIDApLCAtTWF0aC5QSSAvIDIpOworICAgICAgICAgICAgICAgIHZhciB0cmFuc2xh
dGlvbiA9IG5ldyB0aGlzLkJKU0NBTk5PTi5WZWMzKDAsIDAsIDApOworICAgICAgICAgICAgICAg
IHJldHVyblZhbHVlLnRyYW5zZm9ybUFsbFBvaW50cyh0cmFuc2xhdGlvbiwgcXVhdCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NJbXBv
c3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaHlzaWNzSW1wb3N0b3IiXS5Cb3hJ
bXBvc3RvcjoKKyAgICAgICAgICAgICAgICB2YXIgYm94ID0gZXh0ZW5kU2l6ZS5zY2FsZSgwLjUp
OworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gbmV3IHRoaXMuQkpTQ0FOTk9OLkJveChu
ZXcgdGhpcy5CSlNDQU5OT04uVmVjMyh0aGlzLl9jaGVja1dpdGhFcHNpbG9uKGJveC54KSwgdGhp
cy5fY2hlY2tXaXRoRXBzaWxvbihib3gueSksIHRoaXMuX2NoZWNrV2l0aEVwc2lsb24oYm94Lnop
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3Bo
eXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaHlzaWNzSW1wb3N0
b3IiXS5QbGFuZUltcG9zdG9yOgorICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMb2dnZXIiXS5XYXJuKCJBdHRlbnRpb24sIFBsYW5lSW1w
b3N0ZXIgbWlnaHQgbm90IGJlaGF2ZSBhcyB5b3UgZXhwZWN0LiBDb25zaWRlciB1c2luZyBCb3hJ
bXBvc3RlciBpbnN0ZWFkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBuZXcgdGhp
cy5CSlNDQU5OT04uUGxhbmUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlBoeXNpY3NJbXBvc3RvciJdLk1lc2hJbXBvc3RvcjoKKyAgICAgICAgICAgICAgICAvLyBz
aG91bGQgdHJhbnNmb3JtIHRoZSB2ZXJ0ZXggZGF0YSB0byB3b3JsZCBjb29yZGluYXRlcyEhCisg
ICAgICAgICAgICAgICAgdmFyIHJhd1ZlcnRzID0gb2JqZWN0LmdldFZlcnRpY2VzRGF0YSA/IG9i
amVjdC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSA6IFtdOworICAgICAgICAgICAg
ICAgIHZhciByYXdGYWNlcyA9IG9iamVjdC5nZXRJbmRpY2VzID8gb2JqZWN0LmdldEluZGljZXMo
KSA6IFtdOworICAgICAgICAgICAgICAgIGlmICghcmF3VmVydHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBnZXQg
b25seSBzY2FsZSEgc28gdGhlIG9iamVjdCBjb3VsZCB0cmFuc2Zvcm0gY29ycmVjdGx5LgorICAg
ICAgICAgICAgICAgIHZhciBvbGRQb3NpdGlvbiA9IG9iamVjdC5wb3NpdGlvbi5jbG9uZSgpOwor
ICAgICAgICAgICAgICAgIHZhciBvbGRSb3RhdGlvbiA9IG9iamVjdC5yb3RhdGlvbiAmJiBvYmpl
Y3Qucm90YXRpb24uY2xvbmUoKTsKKyAgICAgICAgICAgICAgICB2YXIgb2xkUXVhdGVybmlvbiA9
IG9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24gJiYgb2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbi5j
bG9uZSgpOworICAgICAgICAgICAgICAgIG9iamVjdC5wb3NpdGlvbi5jb3B5RnJvbUZsb2F0cygw
LCAwLCAwKTsKKyAgICAgICAgICAgICAgICBvYmplY3Qucm90YXRpb24gJiYgb2JqZWN0LnJvdGF0
aW9uLmNvcHlGcm9tRmxvYXRzKDAsIDAsIDApOworICAgICAgICAgICAgICAgIG9iamVjdC5yb3Rh
dGlvblF1YXRlcm5pb24gJiYgb2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbShpbXBv
c3Rvci5nZXRQYXJlbnRzUm90YXRpb24oKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LnJvdGF0
aW9uUXVhdGVybmlvbiAmJiBvYmplY3QucGFyZW50ICYmIG9iamVjdC5yb3RhdGlvblF1YXRlcm5p
b24uY29uanVnYXRlSW5QbGFjZSgpOworICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm0gPSBv
YmplY3QuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAgICAgICAgICAgIC8vIGNvbnZl
cnQgcmF3VmVydHMgdG8gb2JqZWN0IHNwYWNlCisgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBu
ZXcgQXJyYXkoKTsKKyAgICAgICAgICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgICAgICAgICAg
Zm9yIChpbmRleCA9IDA7IGluZGV4IDwgcmF3VmVydHMubGVuZ3RoOyBpbmRleCArPSAzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXMoX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocmF3
VmVydHMsIGluZGV4KSwgdHJhbnNmb3JtKS50b0FycmF5KHRlbXAsIGluZGV4KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkxvZ2dlciJdLldhcm4oIk1lc2hJbXBvc3RvciBvbmx5IGNvbGxpZGVzIGFn
YWluc3Qgc3BoZXJlcy4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyB0aGlz
LkJKU0NBTk5PTi5UcmltZXNoKHRlbXAsIHJhd0ZhY2VzKTsKKyAgICAgICAgICAgICAgICAvL25v
dyBzZXQgYmFjayB0aGUgdHJhbnNmb3JtYXRpb24hCisgICAgICAgICAgICAgICAgb2JqZWN0LnBv
c2l0aW9uLmNvcHlGcm9tKG9sZFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBvbGRSb3RhdGlv
biAmJiBvYmplY3Qucm90YXRpb24gJiYgb2JqZWN0LnJvdGF0aW9uLmNvcHlGcm9tKG9sZFJvdGF0
aW9uKTsKKyAgICAgICAgICAgICAgICBvbGRRdWF0ZXJuaW9uICYmIG9iamVjdC5yb3RhdGlvblF1
YXRlcm5pb24gJiYgb2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbShvbGRRdWF0ZXJu
aW9uKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3Nf
cGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBoeXNpY3NJbXBv
c3RvciJdLkhlaWdodG1hcEltcG9zdG9yOgorICAgICAgICAgICAgICAgIHZhciBvbGRQb3NpdGlv
bjIgPSBvYmplY3QucG9zaXRpb24uY2xvbmUoKTsKKyAgICAgICAgICAgICAgICB2YXIgb2xkUm90
YXRpb24yID0gb2JqZWN0LnJvdGF0aW9uICYmIG9iamVjdC5yb3RhdGlvbi5jbG9uZSgpOworICAg
ICAgICAgICAgICAgIHZhciBvbGRRdWF0ZXJuaW9uMiA9IG9iamVjdC5yb3RhdGlvblF1YXRlcm5p
b24gJiYgb2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbi5jbG9uZSgpOworICAgICAgICAgICAgICAg
IG9iamVjdC5wb3NpdGlvbi5jb3B5RnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICBvYmplY3Qucm90YXRpb24gJiYgb2JqZWN0LnJvdGF0aW9uLmNvcHlGcm9tRmxvYXRzKDAsIDAs
IDApOworICAgICAgICAgICAgICAgIG9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24gJiYgb2JqZWN0
LnJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbShpbXBvc3Rvci5nZXRQYXJlbnRzUm90YXRpb24o
KSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbiAmJiBvYmplY3Qu
cGFyZW50ICYmIG9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24uY29uanVnYXRlSW5QbGFjZSgpOwor
ICAgICAgICAgICAgICAgIG9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24gJiYgb2JqZWN0LnJvdGF0
aW9uUXVhdGVybmlvbi5tdWx0aXBseUluUGxhY2UodGhpcy5fbWludXM5MFgpOworICAgICAgICAg
ICAgICAgIHJldHVyblZhbHVlID0gdGhpcy5fY3JlYXRlSGVpZ2h0bWFwKG9iamVjdCk7CisgICAg
ICAgICAgICAgICAgb2JqZWN0LnBvc2l0aW9uLmNvcHlGcm9tKG9sZFBvc2l0aW9uMik7CisgICAg
ICAgICAgICAgICAgb2xkUm90YXRpb24yICYmIG9iamVjdC5yb3RhdGlvbiAmJiBvYmplY3Qucm90
YXRpb24uY29weUZyb20ob2xkUm90YXRpb24yKTsKKyAgICAgICAgICAgICAgICBvbGRRdWF0ZXJu
aW9uMiAmJiBvYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uICYmIG9iamVjdC5yb3RhdGlvblF1YXRl
cm5pb24uY29weUZyb20ob2xkUXVhdGVybmlvbjIpOworICAgICAgICAgICAgICAgIG9iamVjdC5j
b21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJQaHlzaWNzSW1wb3N0b3IiXS5QYXJ0aWNsZUltcG9zdG9yOgorICAgICAgICAgICAg
ICAgIHJldHVyblZhbHVlID0gbmV3IHRoaXMuQkpTQ0FOTk9OLlBhcnRpY2xlKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaHlzaWNzSW1wb3N0b3IiXS5Ob0ltcG9z
dG9yOgorICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gbmV3IHRoaXMuQkpTQ0FOTk9OLkJv
eChuZXcgdGhpcy5CSlNDQU5OT04uVmVjMygwLCAwLCAwKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH07CisgICAg
Q2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLl9jcmVhdGVIZWlnaHRtYXAgPSBmdW5jdGlvbiAob2Jq
ZWN0LCBwb2ludERlcHRoKSB7CisgICAgICAgIHZhciBwb3MgPSAob2JqZWN0LmdldFZlcnRpY2Vz
RGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhC
dWZmZXIiXS5Qb3NpdGlvbktpbmQpKTsKKyAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG9iamVjdC5j
b21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgIC8vIGNvbnZlcnQgcmF3VmVydHMgdG8g
b2JqZWN0IHNwYWNlCisgICAgICAgIHZhciB0ZW1wID0gbmV3IEFycmF5KCk7CisgICAgICAgIHZh
ciBpbmRleDsKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcG9zLmxlbmd0aDsgaW5k
ZXggKz0gMykgeworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlcyhfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJh
eShwb3MsIGluZGV4KSwgdHJhbnNmb3JtKS50b0FycmF5KHRlbXAsIGluZGV4KTsKKyAgICAgICAg
fQorICAgICAgICBwb3MgPSB0ZW1wOworICAgICAgICB2YXIgbWF0cml4ID0gbmV3IEFycmF5KCk7
CisgICAgICAgIC8vRm9yIG5vdyBwb2ludERlcHRoIHdpbGwgbm90IGJlIHVzZWQgYW5kIHdpbGwg
YmUgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorICAgICAgICAvL0Z1dHVyZSByZWZlcmVuY2Ug
LSB0cnkgYW5kIGZpbmQgdGhlIGJlc3QgcGxhY2UgdG8gYWRkIGEgcmVmZXJlbmNlIHRvIHRoZSBw
b2ludERlcHRoIHZhcmlhYmxlLgorICAgICAgICB2YXIgYXJyYXlTaXplID0gcG9pbnREZXB0aCB8
fCB+fihNYXRoLnNxcnQocG9zLmxlbmd0aCAvIDMpIC0gMSk7CisgICAgICAgIHZhciBib3VuZGlu
Z0luZm8gPSBvYmplY3QuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIHZhciBkaW0gPSBNYXRo
Lm1pbihib3VuZGluZ0luZm8uYm91bmRpbmdCb3guZXh0ZW5kU2l6ZVdvcmxkLngsIGJvdW5kaW5n
SW5mby5ib3VuZGluZ0JveC5leHRlbmRTaXplV29ybGQueSk7CisgICAgICAgIHZhciBtaW5ZID0g
Ym91bmRpbmdJbmZvLmJvdW5kaW5nQm94LmV4dGVuZFNpemVXb3JsZC56OworICAgICAgICB2YXIg
ZWxlbWVudFNpemUgPSBkaW0gKiAyIC8gYXJyYXlTaXplOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHBvcy5sZW5ndGg7IGkgPSBpICsgMykgeworICAgICAgICAgICAgdmFyIHggPSBNYXRo
LnJvdW5kKChwb3NbaSArIDBdKSAvIGVsZW1lbnRTaXplICsgYXJyYXlTaXplIC8gMik7CisgICAg
ICAgICAgICB2YXIgeiA9IE1hdGgucm91bmQoKChwb3NbaSArIDFdKSAvIGVsZW1lbnRTaXplIC0g
YXJyYXlTaXplIC8gMikgKiAtMSk7CisgICAgICAgICAgICB2YXIgeSA9IC1wb3NbaSArIDJdICsg
bWluWTsKKyAgICAgICAgICAgIGlmICghbWF0cml4W3hdKSB7CisgICAgICAgICAgICAgICAgbWF0
cml4W3hdID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1hdHJpeFt4XVt6
XSkgeworICAgICAgICAgICAgICAgIG1hdHJpeFt4XVt6XSA9IHk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtYXRyaXhbeF1bel0gPSBNYXRoLm1heCh5LCBtYXRyaXhbeF1bel0pOworICAg
ICAgICB9CisgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDw9IGFycmF5U2l6ZTsgKyt4KSB7Cisg
ICAgICAgICAgICBpZiAoIW1hdHJpeFt4XSkgeworICAgICAgICAgICAgICAgIHZhciBsb2MgPSAx
OworICAgICAgICAgICAgICAgIHdoaWxlICghbWF0cml4Wyh4ICsgbG9jKSAlIGFycmF5U2l6ZV0p
IHsKKyAgICAgICAgICAgICAgICAgICAgbG9jKys7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG1hdHJpeFt4XSA9IG1hdHJpeFsoeCArIGxvYykgJSBhcnJheVNpemVdLnNsaWNl
KCk7CisgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygibWlzc2luZyB4IiwgeCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciB6ID0gMDsgeiA8PSBhcnJheVNpemU7ICsr
eikgeworICAgICAgICAgICAgICAgIGlmICghbWF0cml4W3hdW3pdKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBsb2MgPSAxOworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3VmFsdWU7Cisg
ICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IG1hdHJpeFt4XVsoeiArIGxvYysrKSAlIGFy
cmF5U2l6ZV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbWF0
cml4W3hdW3pdID0gbmV3VmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHZhciBzaGFwZSA9IG5ldyB0aGlzLkJKU0NBTk5PTi5IZWlnaHRm
aWVsZChtYXRyaXgsIHsKKyAgICAgICAgICAgIGVsZW1lbnRTaXplOiBlbGVtZW50U2l6ZQorICAg
ICAgICB9KTsKKyAgICAgICAgLy9Gb3IgZnV0dXJlIHJlZmVyZW5jZSwgbmVlZGVkIGZvciBib2R5
IHRyYW5zZm9ybWF0aW9uCisgICAgICAgIHNoYXBlLm1pblkgPSBtaW5ZOworICAgICAgICByZXR1
cm4gc2hhcGU7CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5cGUuX3VwZGF0ZVBo
eXNpY3NCb2R5VHJhbnNmb3JtYXRpb24gPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAg
dmFyIG9iamVjdCA9IGltcG9zdG9yLm9iamVjdDsKKyAgICAgICAgLy9tYWtlIHN1cmUgaXQgaXMg
dXBkYXRlZC4uLgorICAgICAgICBvYmplY3QuY29tcHV0ZVdvcmxkTWF0cml4ICYmIG9iamVjdC5j
b21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgIC8vIFRoZSBkZWx0YSBiZXR3ZWVuIHRo
ZSBtZXNoIHBvc2l0aW9uIGFuZCB0aGUgbWVzaCBib3VuZGluZyBib3ggY2VudGVyCisgICAgICAg
IHZhciBiSW5mbyA9IG9iamVjdC5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgaWYgKCFiSW5m
bykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBjZW50ZXIg
PSBpbXBvc3Rvci5nZXRPYmplY3RDZW50ZXIoKTsKKyAgICAgICAgLy9tLmdldEFic29sdXRlUG9z
aXRpb24oKS5zdWJ0cmFjdChtLmdldEJvdW5kaW5nSW5mbygpLmJvdW5kaW5nQm94LmNlbnRlcldv
cmxkKQorICAgICAgICB0aGlzLl90bXBEZWx0YVBvc2l0aW9uLmNvcHlGcm9tKG9iamVjdC5nZXRB
YnNvbHV0ZVBpdm90UG9pbnQoKS5zdWJ0cmFjdChjZW50ZXIpKTsKKyAgICAgICAgdGhpcy5fdG1w
RGVsdGFQb3NpdGlvbi5kaXZpZGVJblBsYWNlKGltcG9zdG9yLm9iamVjdC5zY2FsaW5nKTsKKyAg
ICAgICAgdGhpcy5fdG1wUG9zaXRpb24uY29weUZyb20oY2VudGVyKTsKKyAgICAgICAgdmFyIHF1
YXRlcm5pb24gPSBvYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uOworICAgICAgICBpZiAoIXF1YXRl
cm5pb24pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvL2lzIHNo
YXBlIGlzIGEgcGxhbmUgb3IgYSBoZWlnaHRtYXAsIGl0IG11c3QgYmUgcm90YXRlZCA5MCBkZWdz
IGluIHRoZSBYIGF4aXMuCisgICAgICAgIC8vaWRlYWxseSB0aGVzZSB3b3VsZCBiZSByb3RhdGVk
IGF0IHRpbWUgb2YgY3JlYXRpb24gbGlrZSBjeWxpbmRlciBidXQgdGhleSBkb250IGV4dGVuZCBD
b252ZXhQb2x5aGVkcm9uCisgICAgICAgIGlmIChpbXBvc3Rvci50eXBlID09PSBfUGh5c2ljc19w
aHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUGh5c2ljc0ltcG9z
dG9yIl0uUGxhbmVJbXBvc3RvciB8fCBpbXBvc3Rvci50eXBlID09PSBfUGh5c2ljc19waHlzaWNz
SW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUGh5c2ljc0ltcG9zdG9yIl0u
SGVpZ2h0bWFwSW1wb3N0b3IpIHsKKyAgICAgICAgICAgIC8vLTkwIERFRyBpbiBYLCBwcmVjYWxj
dWxhdGVkCisgICAgICAgICAgICBxdWF0ZXJuaW9uID0gcXVhdGVybmlvbi5tdWx0aXBseSh0aGlz
Ll9taW51czkwWCk7CisgICAgICAgICAgICAvL0ludmVydCEgKFByZWNhbGN1bGF0ZWQsIDkwIGRl
ZyBpbiBYKQorICAgICAgICAgICAgLy9ObyBuZWVkIHRvIGNsb25lLiB0aGlzIHdpbGwgbmV2ZXIg
Y2hhbmdlLgorICAgICAgICAgICAgaW1wb3N0b3Iuc2V0RGVsdGFSb3RhdGlvbih0aGlzLl9wbHVz
OTBYKTsKKyAgICAgICAgfQorICAgICAgICAvL0lmIGl0IGlzIGEgaGVpZ2h0ZmllbGQsIGlmIHNo
b3VsZCBiZSBjZW50ZXJlZC4KKyAgICAgICAgaWYgKGltcG9zdG9yLnR5cGUgPT09IF9QaHlzaWNz
X3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaHlzaWNzSW1w
b3N0b3IiXS5IZWlnaHRtYXBJbXBvc3RvcikgeworICAgICAgICAgICAgdmFyIG1lc2ggPSBvYmpl
Y3Q7CisgICAgICAgICAgICB2YXIgYm91bmRpbmdJbmZvID0gbWVzaC5nZXRCb3VuZGluZ0luZm8o
KTsKKyAgICAgICAgICAgIC8vY2FsY3VsYXRlIHRoZSBjb3JyZWN0IGJvZHkgcG9zaXRpb246Cisg
ICAgICAgICAgICB2YXIgcm90YXRpb25RdWF0ZXJuaW9uID0gbWVzaC5yb3RhdGlvblF1YXRlcm5p
b247CisgICAgICAgICAgICBtZXNoLnJvdGF0aW9uUXVhdGVybmlvbiA9IHRoaXMuX3RtcFVuaXR5
Um90YXRpb247CisgICAgICAgICAgICBtZXNoLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAg
ICAgICAgICAgIC8vZ2V0IG9yaWdpbmFsIGNlbnRlciB3aXRoIG5vIHJvdGF0aW9uCisgICAgICAg
ICAgICB2YXIgYyA9IGNlbnRlci5jbG9uZSgpOworICAgICAgICAgICAgdmFyIG9sZFBpdm90ID0g
bWVzaC5nZXRQaXZvdE1hdHJpeCgpOworICAgICAgICAgICAgaWYgKG9sZFBpdm90KSB7CisgICAg
ICAgICAgICAgICAgLy8gY3JlYXRlIGEgY29weSB0aGUgcGl2b3QgTWF0cml4IGFzIGl0IGlzIG1v
ZGlmaWVkIGluIHBsYWNlCisgICAgICAgICAgICAgICAgb2xkUGl2b3QgPSBvbGRQaXZvdC5jbG9u
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
b2xkUGl2b3QgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vY2Fs
Y3VsYXRlIHRoZSBuZXcgY2VudGVyIHVzaW5nIGEgcGl2b3QgKHNpbmNlIHRoaXMuQkpTQ0FOTk9O
LmpzIGRvZXNuJ3QgY2VudGVyIGhlaWdodCBtYXBzKQorICAgICAgICAgICAgdmFyIHAgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uVHJh
bnNsYXRpb24oYm91bmRpbmdJbmZvLmJvdW5kaW5nQm94LmV4dGVuZFNpemVXb3JsZC54LCAwLCAt
Ym91bmRpbmdJbmZvLmJvdW5kaW5nQm94LmV4dGVuZFNpemVXb3JsZC56KTsKKyAgICAgICAgICAg
IG1lc2guc2V0UHJlVHJhbnNmb3JtTWF0cml4KHApOworICAgICAgICAgICAgbWVzaC5jb21wdXRl
V29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgICAgICAvL2NhbGN1bGF0ZSB0aGUgdHJhbnNsYXRp
b24KKyAgICAgICAgICAgIHZhciB0cmFuc2xhdGlvbiA9IGJvdW5kaW5nSW5mby5ib3VuZGluZ0Jv
eC5jZW50ZXJXb3JsZC5zdWJ0cmFjdChjZW50ZXIpLnN1YnRyYWN0KG1lc2gucG9zaXRpb24pLm5l
Z2F0ZSgpOworICAgICAgICAgICAgdGhpcy5fdG1wUG9zaXRpb24uY29weUZyb21GbG9hdHModHJh
bnNsYXRpb24ueCwgdHJhbnNsYXRpb24ueSAtIGJvdW5kaW5nSW5mby5ib3VuZGluZ0JveC5leHRl
bmRTaXplV29ybGQueSwgdHJhbnNsYXRpb24ueik7CisgICAgICAgICAgICAvL2FkZCBpdCBpbnZl
cnRlZCB0byB0aGUgZGVsdGEKKyAgICAgICAgICAgIHRoaXMuX3RtcERlbHRhUG9zaXRpb24uY29w
eUZyb20oYm91bmRpbmdJbmZvLmJvdW5kaW5nQm94LmNlbnRlcldvcmxkLnN1YnRyYWN0KGMpKTsK
KyAgICAgICAgICAgIHRoaXMuX3RtcERlbHRhUG9zaXRpb24ueSArPSBib3VuZGluZ0luZm8uYm91
bmRpbmdCb3guZXh0ZW5kU2l6ZVdvcmxkLnk7CisgICAgICAgICAgICAvL3JvdGF0aW9uIGlzIGJh
Y2sKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJuaW9uID0gcm90YXRpb25RdWF0ZXJu
aW9uOworICAgICAgICAgICAgbWVzaC5zZXRQcmVUcmFuc2Zvcm1NYXRyaXgob2xkUGl2b3QpOwor
ICAgICAgICAgICAgbWVzaC5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoaW1wb3N0b3IudHlwZSA9PT0gX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBoeXNpY3NJbXBvc3RvciJdLk1lc2hJbXBv
c3RvcikgeworICAgICAgICAgICAgdGhpcy5fdG1wRGVsdGFQb3NpdGlvbi5jb3B5RnJvbUZsb2F0
cygwLCAwLCAwKTsKKyAgICAgICAgICAgIC8vdGhpcy5fdG1wUG9zaXRpb24uY29weUZyb20ob2Jq
ZWN0LnBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBpbXBvc3Rvci5zZXREZWx0YVBvc2l0
aW9uKHRoaXMuX3RtcERlbHRhUG9zaXRpb24pOworICAgICAgICAvL05vdyB1cGRhdGUgdGhlIGlt
cG9zdG9yIG9iamVjdAorICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5wb3NpdGlvbi5jb3B5
KHRoaXMuX3RtcFBvc2l0aW9uKTsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkucXVhdGVy
bmlvbi5jb3B5KHF1YXRlcm5pb24pOworICAgIH07CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90
eXBlLnNldFRyYW5zZm9ybWF0aW9uRnJvbVBoeXNpY3NCb2R5ID0gZnVuY3Rpb24gKGltcG9zdG9y
KSB7CisgICAgICAgIGltcG9zdG9yLm9iamVjdC5wb3NpdGlvbi5jb3B5RnJvbShpbXBvc3Rvci5w
aHlzaWNzQm9keS5wb3NpdGlvbik7CisgICAgICAgIGlmIChpbXBvc3Rvci5vYmplY3Qucm90YXRp
b25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICBpbXBvc3Rvci5vYmplY3Qucm90YXRpb25RdWF0
ZXJuaW9uLmNvcHlGcm9tKGltcG9zdG9yLnBoeXNpY3NCb2R5LnF1YXRlcm5pb24pOworICAgICAg
ICB9CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5cGUuc2V0UGh5c2ljc0JvZHlU
cmFuc2Zvcm1hdGlvbiA9IGZ1bmN0aW9uIChpbXBvc3RvciwgbmV3UG9zaXRpb24sIG5ld1JvdGF0
aW9uKSB7CisgICAgICAgIGltcG9zdG9yLnBoeXNpY3NCb2R5LnBvc2l0aW9uLmNvcHkobmV3UG9z
aXRpb24pOworICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5xdWF0ZXJuaW9uLmNvcHkobmV3
Um90YXRpb24pOworICAgIH07CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLmlzU3VwcG9y
dGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5CSlNDQU5OT04gIT09IHVu
ZGVmaW5lZDsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5zZXRMaW5lYXJW
ZWxvY2l0eSA9IGZ1bmN0aW9uIChpbXBvc3RvciwgdmVsb2NpdHkpIHsKKyAgICAgICAgaW1wb3N0
b3IucGh5c2ljc0JvZHkudmVsb2NpdHkuY29weSh2ZWxvY2l0eSk7CisgICAgfTsKKyAgICBDYW5u
b25KU1BsdWdpbi5wcm90b3R5cGUuc2V0QW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24gKGltcG9z
dG9yLCB2ZWxvY2l0eSkgeworICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5hbmd1bGFyVmVs
b2NpdHkuY29weSh2ZWxvY2l0eSk7CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5
cGUuZ2V0TGluZWFyVmVsb2NpdHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgdmFy
IHYgPSBpbXBvc3Rvci5waHlzaWNzQm9keS52ZWxvY2l0eTsKKyAgICAgICAgaWYgKCF2KSB7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0o
di54LCB2LnksIHYueik7CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5cGUuZ2V0
QW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIHZhciB2ID0g
aW1wb3N0b3IucGh5c2ljc0JvZHkuYW5ndWxhclZlbG9jaXR5OworICAgICAgICBpZiAoIXYpIHsK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMi
XSh2LngsIHYueSwgdi56KTsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5z
ZXRCb2R5TWFzcyA9IGZ1bmN0aW9uIChpbXBvc3RvciwgbWFzcykgeworICAgICAgICBpbXBvc3Rv
ci5waHlzaWNzQm9keS5tYXNzID0gbWFzczsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHku
dXBkYXRlTWFzc1Byb3BlcnRpZXMoKTsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3Rv
dHlwZS5nZXRCb2R5TWFzcyA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICByZXR1cm4g
aW1wb3N0b3IucGh5c2ljc0JvZHkubWFzczsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnBy
b3RvdHlwZS5nZXRCb2R5RnJpY3Rpb24gPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAg
cmV0dXJuIGltcG9zdG9yLnBoeXNpY3NCb2R5Lm1hdGVyaWFsLmZyaWN0aW9uOworICAgIH07Cisg
ICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLnNldEJvZHlGcmljdGlvbiA9IGZ1bmN0aW9uIChp
bXBvc3RvciwgZnJpY3Rpb24pIHsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkubWF0ZXJp
YWwuZnJpY3Rpb24gPSBmcmljdGlvbjsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3Rv
dHlwZS5nZXRCb2R5UmVzdGl0dXRpb24gPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAg
cmV0dXJuIGltcG9zdG9yLnBoeXNpY3NCb2R5Lm1hdGVyaWFsLnJlc3RpdHV0aW9uOworICAgIH07
CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLnNldEJvZHlSZXN0aXR1dGlvbiA9IGZ1bmN0
aW9uIChpbXBvc3RvciwgcmVzdGl0dXRpb24pIHsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0Jv
ZHkubWF0ZXJpYWwucmVzdGl0dXRpb24gPSByZXN0aXR1dGlvbjsKKyAgICB9OworICAgIENhbm5v
bkpTUGx1Z2luLnByb3RvdHlwZS5zbGVlcEJvZHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAg
ICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuc2xlZXAoKTsKKyAgICB9OworICAgIENhbm5vbkpT
UGx1Z2luLnByb3RvdHlwZS53YWtlVXBCb2R5ID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAg
ICAgIGltcG9zdG9yLnBoeXNpY3NCb2R5Lndha2VVcCgpOworICAgIH07CisgICAgQ2Fubm9uSlNQ
bHVnaW4ucHJvdG90eXBlLnVwZGF0ZURpc3RhbmNlSm9pbnQgPSBmdW5jdGlvbiAoam9pbnQsIG1h
eERpc3RhbmNlKSB7CisgICAgICAgIGpvaW50LnBoeXNpY3NKb2ludC5kaXN0YW5jZSA9IG1heERp
c3RhbmNlOworICAgIH07CisgICAgLy8gcHJpdmF0ZSBlbmFibGVNb3Rvcihqb2ludDogSU1vdG9y
RW5hYmxlZEpvaW50LCBtb3RvckluZGV4PzogbnVtYmVyKSB7CisgICAgLy8gICAgIGlmICghbW90
b3JJbmRleCkgeworICAgIC8vICAgICAgICAgam9pbnQucGh5c2ljc0pvaW50LmVuYWJsZU1vdG9y
KCk7CisgICAgLy8gICAgIH0KKyAgICAvLyB9CisgICAgLy8gcHJpdmF0ZSBkaXNhYmxlTW90b3Io
am9pbnQ6IElNb3RvckVuYWJsZWRKb2ludCwgbW90b3JJbmRleD86IG51bWJlcikgeworICAgIC8v
ICAgICBpZiAoIW1vdG9ySW5kZXgpIHsKKyAgICAvLyAgICAgICAgIGpvaW50LnBoeXNpY3NKb2lu
dC5kaXNhYmxlTW90b3IoKTsKKyAgICAvLyAgICAgfQorICAgIC8vIH0KKyAgICBDYW5ub25KU1Bs
dWdpbi5wcm90b3R5cGUuc2V0TW90b3IgPSBmdW5jdGlvbiAoam9pbnQsIHNwZWVkLCBtYXhGb3Jj
ZSwgbW90b3JJbmRleCkgeworICAgICAgICBpZiAoIW1vdG9ySW5kZXgpIHsKKyAgICAgICAgICAg
IGpvaW50LnBoeXNpY3NKb2ludC5lbmFibGVNb3RvcigpOworICAgICAgICAgICAgam9pbnQucGh5
c2ljc0pvaW50LnNldE1vdG9yU3BlZWQoc3BlZWQpOworICAgICAgICAgICAgaWYgKG1heEZvcmNl
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5zZXRMaW1pdChqb2ludCwgbWF4Rm9yY2UpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5
cGUuc2V0TGltaXQgPSBmdW5jdGlvbiAoam9pbnQsIHVwcGVyTGltaXQsIGxvd2VyTGltaXQpIHsK
KyAgICAgICAgam9pbnQucGh5c2ljc0pvaW50Lm1vdG9yRXF1YXRpb24ubWF4Rm9yY2UgPSB1cHBl
ckxpbWl0OworICAgICAgICBqb2ludC5waHlzaWNzSm9pbnQubW90b3JFcXVhdGlvbi5taW5Gb3Jj
ZSA9IGxvd2VyTGltaXQgPT09IHZvaWQgMCA/IC11cHBlckxpbWl0IDogbG93ZXJMaW1pdDsKKyAg
ICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5zeW5jTWVzaFdpdGhJbXBvc3RvciA9
IGZ1bmN0aW9uIChtZXNoLCBpbXBvc3RvcikgeworICAgICAgICB2YXIgYm9keSA9IGltcG9zdG9y
LnBoeXNpY3NCb2R5OworICAgICAgICBtZXNoLnBvc2l0aW9uLnggPSBib2R5LnBvc2l0aW9uLng7
CisgICAgICAgIG1lc2gucG9zaXRpb24ueSA9IGJvZHkucG9zaXRpb24ueTsKKyAgICAgICAgbWVz
aC5wb3NpdGlvbi56ID0gYm9keS5wb3NpdGlvbi56OworICAgICAgICBpZiAobWVzaC5yb3RhdGlv
blF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJuaW9uLnggPSBi
b2R5LnF1YXRlcm5pb24ueDsKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJuaW9uLnkg
PSBib2R5LnF1YXRlcm5pb24ueTsKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJuaW9u
LnogPSBib2R5LnF1YXRlcm5pb24uejsKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJu
aW9uLncgPSBib2R5LnF1YXRlcm5pb24udzsKKyAgICAgICAgfQorICAgIH07CisgICAgQ2Fubm9u
SlNQbHVnaW4ucHJvdG90eXBlLmdldFJhZGl1cyA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAg
ICAgICB2YXIgc2hhcGUgPSBpbXBvc3Rvci5waHlzaWNzQm9keS5zaGFwZXNbMF07CisgICAgICAg
IHJldHVybiBzaGFwZS5ib3VuZGluZ1NwaGVyZVJhZGl1czsKKyAgICB9OworICAgIENhbm5vbkpT
UGx1Z2luLnByb3RvdHlwZS5nZXRCb3hTaXplVG9SZWYgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIHJl
c3VsdCkgeworICAgICAgICB2YXIgc2hhcGUgPSBpbXBvc3Rvci5waHlzaWNzQm9keS5zaGFwZXNb
MF07CisgICAgICAgIHJlc3VsdC54ID0gc2hhcGUuaGFsZkV4dGVudHMueCAqIDI7CisgICAgICAg
IHJlc3VsdC55ID0gc2hhcGUuaGFsZkV4dGVudHMueSAqIDI7CisgICAgICAgIHJlc3VsdC56ID0g
c2hhcGUuaGFsZkV4dGVudHMueiAqIDI7CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90
b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2lu
LnByb3RvdHlwZS5fZXh0ZW5kTmFtZXNwYWNlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvL3Ro
aXMgd2lsbCBmb3JjZSBjYW5ub24gdG8gZXhlY3V0ZSBhdCBsZWFzdCBvbmUgc3RlcCB3aGVuIHVz
aW5nIGludGVycG9sYXRpb24KKyAgICAgICAgdmFyIHN0ZXBfdG1wMSA9IG5ldyB0aGlzLkJKU0NB
Tk5PTi5WZWMzKCk7CisgICAgICAgIHZhciBFbmdpbmUgPSB0aGlzLkJKU0NBTk5PTjsKKyAgICAg
ICAgdGhpcy5CSlNDQU5OT04uV29ybGQucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAoZHQsIHRp
bWVTaW5jZUxhc3RDYWxsZWQsIG1heFN1YlN0ZXBzKSB7CisgICAgICAgICAgICBtYXhTdWJTdGVw
cyA9IG1heFN1YlN0ZXBzIHx8IDEwOworICAgICAgICAgICAgdGltZVNpbmNlTGFzdENhbGxlZCA9
IHRpbWVTaW5jZUxhc3RDYWxsZWQgfHwgMDsKKyAgICAgICAgICAgIGlmICh0aW1lU2luY2VMYXN0
Q2FsbGVkID09PSAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFN0ZXAoZHQpOwor
ICAgICAgICAgICAgICAgIHRoaXMudGltZSArPSBkdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbFN0ZXBzID0gTWF0aC5mbG9v
cigodGhpcy50aW1lICsgdGltZVNpbmNlTGFzdENhbGxlZCkgLyBkdCkgLSBNYXRoLmZsb29yKHRo
aXMudGltZSAvIGR0KTsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbFN0ZXBzID0gTWF0aC5taW4o
aW50ZXJuYWxTdGVwcywgbWF4U3ViU3RlcHMpIHx8IDE7CisgICAgICAgICAgICAgICAgdmFyIHQw
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
IT09IGludGVybmFsU3RlcHM7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVy
bmFsU3RlcChkdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwZXJmb3JtYW5jZS5ub3coKSAt
IHQwID4gZHQgKiAxMDAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlz
LnRpbWUgKz0gdGltZVNpbmNlTGFzdENhbGxlZDsKKyAgICAgICAgICAgICAgICB2YXIgaCA9IHRo
aXMudGltZSAlIGR0OworICAgICAgICAgICAgICAgIHZhciBoX2Rpdl9kdCA9IGggLyBkdDsKKyAg
ICAgICAgICAgICAgICB2YXIgaW50ZXJwdmVsbyA9IHN0ZXBfdG1wMTsKKyAgICAgICAgICAgICAg
ICB2YXIgYm9kaWVzID0gdGhpcy5ib2RpZXM7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogIT09IGJvZGllcy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICB2YXIg
YiA9IGJvZGllc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGIudHlwZSAhPT0gRW5naW5l
LkJvZHkuU1RBVElDICYmIGIuc2xlZXBTdGF0ZSAhPT0gRW5naW5lLkJvZHkuU0xFRVBJTkcpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGIucG9zaXRpb24udnN1YihiLnByZXZpb3VzUG9zaXRp
b24sIGludGVycHZlbG8pOworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwdmVsby5zY2Fs
ZShoX2Rpdl9kdCwgaW50ZXJwdmVsbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBiLnBvc2l0
aW9uLnZhZGQoaW50ZXJwdmVsbywgYi5pbnRlcnBvbGF0ZWRQb3NpdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBiLmludGVycG9sYXRlZFBvc2l0aW9uLmNvcHkoYi5wb3NpdGlvbik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBiLmludGVycG9sYXRlZFF1YXRlcm5pb24uY29weShiLnF1YXRlcm5p
b24pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9OworICAgIH07CisgICAgLyoqCisgICAgICogRG9lcyBhIHJheWNhc3Qg
aW4gdGhlIHBoeXNpY3Mgd29ybGQKKyAgICAgKiBAcGFyYW0gZnJvbSB3aGVuIHNob3VsZCB0aGUg
cmF5IHN0YXJ0PworICAgICAqIEBwYXJhbSB0byB3aGVuIHNob3VsZCB0aGUgcmF5IGVuZD8KKyAg
ICAgKiBAcmV0dXJucyBQaHlzaWNzUmF5Y2FzdFJlc3VsdAorICAgICAqLworICAgIENhbm5vbkpT
UGx1Z2luLnByb3RvdHlwZS5yYXljYXN0ID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7CisgICAgICAg
IHRoaXMuX2Nhbm5vblJheWNhc3RSZXN1bHQucmVzZXQoKTsKKyAgICAgICAgdGhpcy53b3JsZC5y
YXljYXN0Q2xvc2VzdChmcm9tLCB0bywge30sIHRoaXMuX2Nhbm5vblJheWNhc3RSZXN1bHQpOwor
ICAgICAgICB0aGlzLl9yYXljYXN0UmVzdWx0LnJlc2V0KGZyb20sIHRvKTsKKyAgICAgICAgaWYg
KHRoaXMuX2Nhbm5vblJheWNhc3RSZXN1bHQuaGFzSGl0KSB7CisgICAgICAgICAgICAvLyBUT0RP
OiBkbyB3ZSBhbHNvIHdhbnQgdG8gZ2V0IHRoZSBib2R5IGl0IGhpdD8KKyAgICAgICAgICAgIHRo
aXMuX3JheWNhc3RSZXN1bHQuc2V0SGl0RGF0YSh7CisgICAgICAgICAgICAgICAgeDogdGhpcy5f
Y2Fubm9uUmF5Y2FzdFJlc3VsdC5oaXROb3JtYWxXb3JsZC54LAorICAgICAgICAgICAgICAgIHk6
IHRoaXMuX2Nhbm5vblJheWNhc3RSZXN1bHQuaGl0Tm9ybWFsV29ybGQueSwKKyAgICAgICAgICAg
ICAgICB6OiB0aGlzLl9jYW5ub25SYXljYXN0UmVzdWx0LmhpdE5vcm1hbFdvcmxkLnosCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgeDogdGhpcy5fY2Fubm9uUmF5Y2FzdFJlc3Vs
dC5oaXRQb2ludFdvcmxkLngsCisgICAgICAgICAgICAgICAgeTogdGhpcy5fY2Fubm9uUmF5Y2Fz
dFJlc3VsdC5oaXRQb2ludFdvcmxkLnksCisgICAgICAgICAgICAgICAgejogdGhpcy5fY2Fubm9u
UmF5Y2FzdFJlc3VsdC5oaXRQb2ludFdvcmxkLnosCisgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIHRoaXMuX3JheWNhc3RSZXN1bHQuc2V0SGl0RGlzdGFuY2UodGhpcy5fY2Fubm9uUmF5Y2Fz
dFJlc3VsdC5kaXN0YW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3JheWNh
c3RSZXN1bHQ7CisgICAgfTsKKyAgICByZXR1cm4gQ2Fubm9uSlNQbHVnaW47Cit9KCkpOworCitf
UGh5c2ljc19waHlzaWNzRW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlBoeXNp
Y3NFbmdpbmUiXS5EZWZhdWx0UGx1Z2luRmFjdG9yeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5l
dyBDYW5ub25KU1BsdWdpbigpOyB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QaHlzaWNz
L1BsdWdpbnMvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vUGh5c2ljcy9QbHVnaW5zL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQ2Fubm9u
SlNQbHVnaW4sIEFtbW9KU1BsdWdpbiwgT2ltb0pTUGx1Z2luICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2Fubm9uSlNQbHVnaW5fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2Fubm9uSlNQbHVnaW4g
Ki8gIi4vUGh5c2ljcy9QbHVnaW5zL2Nhbm5vbkpTUGx1Z2luLnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkNhbm5vbkpTUGx1Z2luIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2Fubm9uSlNQbHVnaW5f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ2Fubm9uSlNQbHVnaW4iXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW1tb0pTUGx1Z2luX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FtbW9KU1BsdWdpbiAqLyAiLi9Q
aHlzaWNzL1BsdWdpbnMvYW1tb0pTUGx1Z2luLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFtbW9K
U1BsdWdpbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FtbW9KU1BsdWdpbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJBbW1vSlNQbHVnaW4iXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfb2ltb0pTUGx1Z2luX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL29pbW9KU1BsdWdpbiAqLyAiLi9QaHlzaWNzL1BsdWdpbnMv
b2ltb0pTUGx1Z2luLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9pbW9KU1BsdWdpbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX29pbW9KU1BsdWdpbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJPaW1vSlNQbHVnaW4iXTsgfSk7CisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
UGh5c2ljcy9QbHVnaW5zL29pbW9KU1BsdWdpbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGh5c2ljcy9QbHVnaW5zL29pbW9K
U1BsdWdpbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBPaW1vSlNQbHVnaW4gKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT2ltb0pTUGx1Z2luIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBPaW1vSlNQbHVnaW47IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9QaHlzaWNzX3Bo
eXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vUGh5c2ljcy9waHlzaWNzSW1wb3N0b3IgKi8gIi4vUGh5c2ljcy9w
aHlzaWNzSW1wb3N0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUGh5c2ljc19w
aHlzaWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL1BoeXNpY3MvcGh5c2ljc0pvaW50ICovICIuL1BoeXNpY3MvcGh5c2lj
c0pvaW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BoeXNpY3NfcGh5c2ljc0Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vUGh5c2ljcy9waHlzaWNzRW5naW5lICovICIuL1BoeXNpY3MvcGh5c2ljc0VuZ2lu
ZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvbG9nZ2VyICovICIuL01pc2Mv
bG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BoeXNpY3NSYXljYXN0UmVz
dWx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9waHlzaWNzUmF5Y2FzdFJlc3VsdCAqLyAiLi9QaHlzaWNzL3BoeXNpY3NSYXljYXN0UmVz
dWx0LnRzIik7CisKKworCisKKworCisvKiogQGhpZGRlbiAqLwordmFyIE9pbW9KU1BsdWdpbiA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBPaW1vSlNQbHVnaW4o
aXRlcmF0aW9ucywgb2ltb0luamVjdGlvbikgeworICAgICAgICBpZiAob2ltb0luamVjdGlvbiA9
PT0gdm9pZCAwKSB7IG9pbW9JbmplY3Rpb24gPSBPSU1POyB9CisgICAgICAgIHRoaXMubmFtZSA9
ICJPaW1vSlNQbHVnaW4iOworICAgICAgICB0aGlzLl90bXBJbXBvc3RvcnNBcnJheSA9IFtdOwor
ICAgICAgICB0aGlzLl90bXBQb3NpdGlvblZlY3RvciA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlz
LkJKU09JTU8gPSBvaW1vSW5qZWN0aW9uOworICAgICAgICB0aGlzLndvcmxkID0gbmV3IHRoaXMu
QkpTT0lNTy5Xb3JsZCh7CisgICAgICAgICAgICBpdGVyYXRpb25zOiBpdGVyYXRpb25zCisgICAg
ICAgIH0pOworICAgICAgICB0aGlzLndvcmxkLmNsZWFyKCk7CisgICAgICAgIHRoaXMuX3JheWNh
c3RSZXN1bHQgPSBuZXcgX3BoeXNpY3NSYXljYXN0UmVzdWx0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlBoeXNpY3NSYXljYXN0UmVzdWx0Il0oKTsKKyAgICB9CisgICAgT2ltb0pTUGx1
Z2luLnByb3RvdHlwZS5zZXRHcmF2aXR5ID0gZnVuY3Rpb24gKGdyYXZpdHkpIHsKKyAgICAgICAg
dGhpcy53b3JsZC5ncmF2aXR5LmNvcHkoZ3Jhdml0eSk7CisgICAgfTsKKyAgICBPaW1vSlNQbHVn
aW4ucHJvdG90eXBlLnNldFRpbWVTdGVwID0gZnVuY3Rpb24gKHRpbWVTdGVwKSB7CisgICAgICAg
IHRoaXMud29ybGQudGltZVN0ZXAgPSB0aW1lU3RlcDsKKyAgICB9OworICAgIE9pbW9KU1BsdWdp
bi5wcm90b3R5cGUuZ2V0VGltZVN0ZXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0
aGlzLndvcmxkLnRpbWVTdGVwOworICAgIH07CisgICAgT2ltb0pTUGx1Z2luLnByb3RvdHlwZS5l
eGVjdXRlU3RlcCA9IGZ1bmN0aW9uIChkZWx0YSwgaW1wb3N0b3JzKSB7CisgICAgICAgIHZhciBf
dGhpcyA9IHRoaXM7CisgICAgICAgIGltcG9zdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChpbXBvc3Rv
cikgeworICAgICAgICAgICAgaW1wb3N0b3IuYmVmb3JlU3RlcCgpOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy53b3JsZC5zdGVwKCk7CisgICAgICAgIGltcG9zdG9ycy5mb3JFYWNoKGZ1bmN0
aW9uIChpbXBvc3RvcikgeworICAgICAgICAgICAgaW1wb3N0b3IuYWZ0ZXJTdGVwKCk7CisgICAg
ICAgICAgICAvL3VwZGF0ZSB0aGUgb3JkZXJlZCBpbXBvc3RvcnMgYXJyYXkKKyAgICAgICAgICAg
IF90aGlzLl90bXBJbXBvc3RvcnNBcnJheVtpbXBvc3Rvci51bmlxdWVJZF0gPSBpbXBvc3RvcjsK
KyAgICAgICAgfSk7CisgICAgICAgIC8vY2hlY2sgZm9yIGNvbGxpc2lvbnMKKyAgICAgICAgdmFy
IGNvbnRhY3QgPSB0aGlzLndvcmxkLmNvbnRhY3RzOworICAgICAgICB3aGlsZSAoY29udGFjdCAh
PT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKGNvbnRhY3QudG91Y2hpbmcgJiYgIWNvbnRhY3Qu
Ym9keTEuc2xlZXBpbmcgJiYgIWNvbnRhY3QuYm9keTIuc2xlZXBpbmcpIHsKKyAgICAgICAgICAg
ICAgICBjb250YWN0ID0gY29udGFjdC5uZXh0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy9pcyB0aGlzIGJvZHkgY29sbGlkaW5nIHdpdGgg
YW55IG90aGVyPyBnZXQgdGhlIGltcG9zdG9yCisgICAgICAgICAgICB2YXIgbWFpbkltcG9zdG9y
ID0gdGhpcy5fdG1wSW1wb3N0b3JzQXJyYXlbK2NvbnRhY3QuYm9keTEubmFtZV07CisgICAgICAg
ICAgICB2YXIgY29sbGlkaW5nSW1wb3N0b3IgPSB0aGlzLl90bXBJbXBvc3RvcnNBcnJheVsrY29u
dGFjdC5ib2R5Mi5uYW1lXTsKKyAgICAgICAgICAgIGlmICghbWFpbkltcG9zdG9yIHx8ICFjb2xs
aWRpbmdJbXBvc3RvcikgeworICAgICAgICAgICAgICAgIGNvbnRhY3QgPSBjb250YWN0Lm5leHQ7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
YWluSW1wb3N0b3Iub25Db2xsaWRlKHsgYm9keTogY29sbGlkaW5nSW1wb3N0b3IucGh5c2ljc0Jv
ZHkgfSk7CisgICAgICAgICAgICBjb2xsaWRpbmdJbXBvc3Rvci5vbkNvbGxpZGUoeyBib2R5OiBt
YWluSW1wb3N0b3IucGh5c2ljc0JvZHkgfSk7CisgICAgICAgICAgICBjb250YWN0ID0gY29udGFj
dC5uZXh0OworICAgICAgICB9CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLmFw
cGx5SW1wdWxzZSA9IGZ1bmN0aW9uIChpbXBvc3RvciwgZm9yY2UsIGNvbnRhY3RQb2ludCkgewor
ICAgICAgICB2YXIgbWFzcyA9IGltcG9zdG9yLnBoeXNpY3NCb2R5Lm1hc3M7CisgICAgICAgIGlt
cG9zdG9yLnBoeXNpY3NCb2R5LmFwcGx5SW1wdWxzZShjb250YWN0UG9pbnQuc2NhbGUodGhpcy53
b3JsZC5pbnZTY2FsZSksIGZvcmNlLnNjYWxlKHRoaXMud29ybGQuaW52U2NhbGUgKiBtYXNzKSk7
CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLmFwcGx5Rm9yY2UgPSBmdW5jdGlv
biAoaW1wb3N0b3IsIGZvcmNlLCBjb250YWN0UG9pbnQpIHsKKyAgICAgICAgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkxvZ2dlciJdLldhcm4oIk9pbW8gZG9lc24n
dCBzdXBwb3J0IGFwcGx5aW5nIGZvcmNlLiBVc2luZyBpbXB1bGUgaW5zdGVhZC4iKTsKKyAgICAg
ICAgdGhpcy5hcHBseUltcHVsc2UoaW1wb3N0b3IsIGZvcmNlLCBjb250YWN0UG9pbnQpOworICAg
IH07CisgICAgT2ltb0pTUGx1Z2luLnByb3RvdHlwZS5nZW5lcmF0ZVBoeXNpY3NCb2R5ID0gZnVu
Y3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIC8v
cGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcC4gRG9lcyB0aGlzIGltcG9zdG9yIGhhcyBhIHBhcmVu
dCBpbXBvc3Rvcj8KKyAgICAgICAgaWYgKGltcG9zdG9yLnBhcmVudCkgeworICAgICAgICAgICAg
aWYgKGltcG9zdG9yLnBoeXNpY3NCb2R5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQ
aHlzaWNzQm9keShpbXBvc3Rvcik7CisgICAgICAgICAgICAgICAgLy9UT0RPIGlzIHRoYXQgbmVl
ZGVkPworICAgICAgICAgICAgICAgIGltcG9zdG9yLmZvcmNlVXBkYXRlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGltcG9zdG9y
LmlzQm9keUluaXRSZXF1aXJlZCgpKSB7CisgICAgICAgICAgICB2YXIgYm9keUNvbmZpZyA9IHsK
KyAgICAgICAgICAgICAgICBuYW1lOiBpbXBvc3Rvci51bmlxdWVJZCwKKyAgICAgICAgICAgICAg
ICAvL09pbW8gbXVzdCBoYXZlIG1hc3MsIGFsc28gZm9yIHN0YXRpYyBvYmplY3RzLgorICAgICAg
ICAgICAgICAgIGNvbmZpZzogW2ltcG9zdG9yLmdldFBhcmFtKCJtYXNzIikgfHwgMSwgaW1wb3N0
b3IuZ2V0UGFyYW0oImZyaWN0aW9uIiksIGltcG9zdG9yLmdldFBhcmFtKCJyZXN0aXR1dGlvbiIp
XSwKKyAgICAgICAgICAgICAgICBzaXplOiBbXSwKKyAgICAgICAgICAgICAgICB0eXBlOiBbXSwK
KyAgICAgICAgICAgICAgICBwb3M6IFtdLAorICAgICAgICAgICAgICAgIHBvc1NoYXBlOiBbXSwK
KyAgICAgICAgICAgICAgICByb3Q6IFtdLAorICAgICAgICAgICAgICAgIHJvdFNoYXBlOiBbXSwK
KyAgICAgICAgICAgICAgICBtb3ZlOiBpbXBvc3Rvci5nZXRQYXJhbSgibWFzcyIpICE9PSAwLAor
ICAgICAgICAgICAgICAgIGRlbnNpdHk6IGltcG9zdG9yLmdldFBhcmFtKCJtYXNzIiksCisgICAg
ICAgICAgICAgICAgZnJpY3Rpb246IGltcG9zdG9yLmdldFBhcmFtKCJmcmljdGlvbiIpLAorICAg
ICAgICAgICAgICAgIHJlc3RpdHV0aW9uOiBpbXBvc3Rvci5nZXRQYXJhbSgicmVzdGl0dXRpb24i
KSwKKyAgICAgICAgICAgICAgICAvL1N1cHBvcnRpbmcgb2xkZXIgdmVyc2lvbnMgb2YgT2ltbwor
ICAgICAgICAgICAgICAgIHdvcmxkOiB0aGlzLndvcmxkCisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgdmFyIGltcG9zdG9ycyA9IFtpbXBvc3Rvcl07CisgICAgICAgICAgICB2YXIgYWRkVG9B
cnJheSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcmVudC5n
ZXRDaGlsZE1lc2hlcykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHBhcmVudC5nZXRDaGlsZE1lc2hlcygpLmZvckVhY2go
ZnVuY3Rpb24gKG0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG0ucGh5c2ljc0ltcG9zdG9y
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbXBvc3RvcnMucHVzaChtLnBoeXNpY3NJbXBv
c3Rvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAvL20ucGh5c2ljc0ltcG9zdG9yLl9pbml0
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBhZGRUb0FycmF5KGltcG9zdG9yLm9iamVjdCk7CisgICAgICAg
ICAgICB2YXIgY2hlY2tXaXRoRXBzaWxvbl8xID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHZhbHVlLCBfUGh5c2ljc19waHlzaWNzRW5naW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNpY3NFbmdpbmUiXS5FcHNpbG9uKTsKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICB2YXIgZ2xvYmFsUXVhdGVybmlvbl8xID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9u
Il0oKTsKKyAgICAgICAgICAgIGltcG9zdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFpLm9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
L2dldCB0aGUgY29ycmVjdCBib3VuZGluZyBib3gKKyAgICAgICAgICAgICAgICB2YXIgb2xkUXVh
dGVybmlvbiA9IGkub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbjsKKyAgICAgICAgICAgICAgICBn
bG9iYWxRdWF0ZXJuaW9uXzEgPSBvbGRRdWF0ZXJuaW9uLmNsb25lKCk7CisgICAgICAgICAgICAg
ICAgdmFyIHJvdCA9IG9sZFF1YXRlcm5pb24udG9FdWxlckFuZ2xlcygpOworICAgICAgICAgICAg
ICAgIHZhciBleHRlbmRTaXplID0gaS5nZXRPYmplY3RFeHRlbmRTaXplKCk7CisgICAgICAgICAg
ICAgICAgdmFyIHJhZFRvRGVnID0gNTcuMjk1Nzc5NTEzMDgyMzIwODc2OworICAgICAgICAgICAg
ICAgIGlmIChpID09PSBpbXBvc3RvcikgeworICAgICAgICAgICAgICAgICAgICB2YXIgY2VudGVy
ID0gaW1wb3N0b3IuZ2V0T2JqZWN0Q2VudGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGltcG9z
dG9yLm9iamVjdC5nZXRBYnNvbHV0ZVBpdm90UG9pbnQoKS5zdWJ0cmFjdFRvUmVmKGNlbnRlciwg
X3RoaXMuX3RtcFBvc2l0aW9uVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Rt
cFBvc2l0aW9uVmVjdG9yLmRpdmlkZUluUGxhY2UoaW1wb3N0b3Iub2JqZWN0LnNjYWxpbmcpOwor
ICAgICAgICAgICAgICAgICAgICAvL0NhbiBhbHNvIHVzZSBBcnJheS5wcm90b3R5cGUucHVzaC5h
cHBseQorICAgICAgICAgICAgICAgICAgICBib2R5Q29uZmlnLnBvcy5wdXNoKGNlbnRlci54KTsK
KyAgICAgICAgICAgICAgICAgICAgYm9keUNvbmZpZy5wb3MucHVzaChjZW50ZXIueSk7CisgICAg
ICAgICAgICAgICAgICAgIGJvZHlDb25maWcucG9zLnB1c2goY2VudGVyLnopOworICAgICAgICAg
ICAgICAgICAgICBib2R5Q29uZmlnLnBvc1NoYXBlLnB1c2goMCwgMCwgMCk7CisgICAgICAgICAg
ICAgICAgICAgIGJvZHlDb25maWcucm90U2hhcGUucHVzaCgwLCAwLCAwKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBs
b2NhbFBvc2l0aW9uID0gaS5vYmplY3QuZ2V0QWJzb2x1dGVQb3NpdGlvbigpLnN1YnRyYWN0KGlt
cG9zdG9yLm9iamVjdC5nZXRBYnNvbHV0ZVBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgICAg
ICBib2R5Q29uZmlnLnBvc1NoYXBlLnB1c2gobG9jYWxQb3NpdGlvbi54KTsKKyAgICAgICAgICAg
ICAgICAgICAgYm9keUNvbmZpZy5wb3NTaGFwZS5wdXNoKGxvY2FsUG9zaXRpb24ueSk7CisgICAg
ICAgICAgICAgICAgICAgIGJvZHlDb25maWcucG9zU2hhcGUucHVzaChsb2NhbFBvc2l0aW9uLnop
OworICAgICAgICAgICAgICAgICAgICBib2R5Q29uZmlnLnBvcy5wdXNoKDAsIDAsIDApOworICAg
ICAgICAgICAgICAgICAgICBib2R5Q29uZmlnLnJvdFNoYXBlLnB1c2gocm90LnggKiByYWRUb0Rl
Zyk7CisgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcucm90U2hhcGUucHVzaChyb3QueSAq
IHJhZFRvRGVnKTsKKyAgICAgICAgICAgICAgICAgICAgYm9keUNvbmZpZy5yb3RTaGFwZS5wdXNo
KHJvdC56ICogcmFkVG9EZWcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
LyByZWdpc3RlciBtZXNoCisgICAgICAgICAgICAgICAgc3dpdGNoIChpLnR5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siUGh5c2ljc0ltcG9zdG9yIl0uUGFydGljbGVJbXBvc3RvcjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJMb2dnZXIiXS5XYXJuKCJObyBQYXJ0aWNsZSBzdXBwb3J0IGluIE9JTU8uanMuIHVz
aW5nIFNwaGVyZUltcG9zdG9yIGluc3RlYWQiKTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBf
UGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGh5
c2ljc0ltcG9zdG9yIl0uU3BoZXJlSW1wb3N0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcmFkaXVzWCA9IGV4dGVuZFNpemUueDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBy
YWRpdXNZID0gZXh0ZW5kU2l6ZS55OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGl1
c1ogPSBleHRlbmRTaXplLno7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IE1h
dGgubWF4KGNoZWNrV2l0aEVwc2lsb25fMShyYWRpdXNYKSwgY2hlY2tXaXRoRXBzaWxvbl8xKHJh
ZGl1c1kpLCBjaGVja1dpdGhFcHNpbG9uXzEocmFkaXVzWikpIC8gMjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJvZHlDb25maWcudHlwZS5wdXNoKCdzcGhlcmUnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vZHVlIHRvIHRoZSB3YXkgb2ltbyB3b3JrcyB3aXRoIGNvbXBvdW5kcywgYWRk
IDMgdGltZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKHNp
emUpOworICAgICAgICAgICAgICAgICAgICAgICAgYm9keUNvbmZpZy5zaXplLnB1c2goc2l6ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBib2R5Q29uZmlnLnNpemUucHVzaChzaXplKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIF9Q
aHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQaHlz
aWNzSW1wb3N0b3IiXS5DeWxpbmRlckltcG9zdG9yOgorICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHNpemVYID0gY2hlY2tXaXRoRXBzaWxvbl8xKGV4dGVuZFNpemUueCkgLyAyOworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHNpemVZID0gY2hlY2tXaXRoRXBzaWxvbl8xKGV4dGVuZFNp
emUueSk7CisgICAgICAgICAgICAgICAgICAgICAgICBib2R5Q29uZmlnLnR5cGUucHVzaCgnY3ls
aW5kZXInKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKHNp
emVYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKHNpemVZ
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZHVlIHRvIHRoZSB3YXkgb2ltbyB3b3JrcyB3
aXRoIGNvbXBvdW5kcywgYWRkIG9uZSBtb3JlIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAg
ICAgYm9keUNvbmZpZy5zaXplLnB1c2goc2l6ZVkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBoeXNpY3NJbXBvc3RvciJdLlBsYW5lSW1w
b3N0b3I6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBoeXNpY3NJbXBvc3RvciJdLkJveEltcG9z
dG9yOgorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHNpemVYID0gY2hlY2tXaXRoRXBzaWxvbl8xKGV4dGVuZFNpemUueCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgc2l6ZVkgPSBjaGVja1dpdGhFcHNpbG9uXzEoZXh0ZW5kU2l6
ZS55KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplWiA9IGNoZWNrV2l0aEVwc2ls
b25fMShleHRlbmRTaXplLnopOworICAgICAgICAgICAgICAgICAgICAgICAgYm9keUNvbmZpZy50
eXBlLnB1c2goJ2JveCcpOworICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAoaSA9PT0gaW1w
b3N0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKHNp
emVYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKHNpemVZ
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKHNpemVaKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKDAsMCwwKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vYWN0dWFsbHkgbm90IG5lZWRlZCwgYnV0IGhleS4uLgor
ICAgICAgICAgICAgICAgIGkub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbiA9IG9sZFF1YXRlcm5p
b247CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGltcG9zdG9yLnBoeXNpY3NCb2R5ID0g
dGhpcy53b3JsZC5hZGQoYm9keUNvbmZpZyk7CisgICAgICAgICAgICAvLyBzZXQgdGhlIHF1YXRl
cm5pb24sIGlnbm9yaW5nIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgKGV1bGVyKSByb3RhdGlvbgor
ICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkucmVzZXRRdWF0ZXJuaW9uKGdsb2JhbFF1
YXRlcm5pb25fMSk7CisgICAgICAgICAgICAvLyB1cGRhdGUgd2l0aCBkZWx0YSAwLCBzbyB0aGUg
Ym9keSB3aWxsIHJldmVpdmUgdGhlIG5ldyByb3RhdGlvbi4KKyAgICAgICAgICAgIGltcG9zdG9y
LnBoeXNpY3NCb2R5LnVwZGF0ZVBvc2l0aW9uKDApOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgdGhpcy5fdG1wUG9zaXRpb25WZWN0b3IuY29weUZyb21GbG9hdHMoMCwg
MCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgaW1wb3N0b3Iuc2V0RGVsdGFQb3NpdGlvbih0aGlz
Ll90bXBQb3NpdGlvblZlY3Rvcik7CisgICAgICAgIC8vdGhpcy5fdG1wUG9zaXRpb25WZWN0b3Iu
YWRkSW5QbGFjZShpbXBvc3Rvci5tZXNoLmdldEJvdW5kaW5nSW5mbygpLmJvdW5kaW5nQm94LmNl
bnRlcik7CisgICAgICAgIC8vdGhpcy5zZXRQaHlzaWNzQm9keVRyYW5zZm9ybWF0aW9uKGltcG9z
dG9yLCB0aGlzLl90bXBQb3NpdGlvblZlY3RvciwgaW1wb3N0b3IubWVzaC5yb3RhdGlvblF1YXRl
cm5pb24pOworICAgIH07CisgICAgT2ltb0pTUGx1Z2luLnByb3RvdHlwZS5yZW1vdmVQaHlzaWNz
Qm9keSA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICAvL2ltcG9zdG9yLnBoeXNpY3NC
b2R5LmRpc3Bvc2UoKTsKKyAgICAgICAgLy9TYW1lIGFzIDogKG9sZGVyIG9pbW8gdmVyc2lvbnMp
CisgICAgICAgIHRoaXMud29ybGQucmVtb3ZlUmlnaWRCb2R5KGltcG9zdG9yLnBoeXNpY3NCb2R5
KTsKKyAgICB9OworICAgIE9pbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2VuZXJhdGVKb2ludCA9IGZ1
bmN0aW9uIChpbXBvc3RvckpvaW50KSB7CisgICAgICAgIHZhciBtYWluQm9keSA9IGltcG9zdG9y
Sm9pbnQubWFpbkltcG9zdG9yLnBoeXNpY3NCb2R5OworICAgICAgICB2YXIgY29ubmVjdGVkQm9k
eSA9IGltcG9zdG9ySm9pbnQuY29ubmVjdGVkSW1wb3N0b3IucGh5c2ljc0JvZHk7CisgICAgICAg
IGlmICghbWFpbkJvZHkgfHwgIWNvbm5lY3RlZEJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB2YXIgam9pbnREYXRhID0gaW1wb3N0b3JKb2ludC5qb2ludC5q
b2ludERhdGE7CisgICAgICAgIHZhciBvcHRpb25zID0gam9pbnREYXRhLm5hdGl2ZVBhcmFtcyB8
fCB7fTsKKyAgICAgICAgdmFyIHR5cGU7CisgICAgICAgIHZhciBuYXRpdmVKb2ludERhdGEgPSB7
CisgICAgICAgICAgICBib2R5MTogbWFpbkJvZHksCisgICAgICAgICAgICBib2R5MjogY29ubmVj
dGVkQm9keSwKKyAgICAgICAgICAgIGF4ZTE6IG9wdGlvbnMuYXhlMSB8fCAoam9pbnREYXRhLm1h
aW5BeGlzID8gam9pbnREYXRhLm1haW5BeGlzLmFzQXJyYXkoKSA6IG51bGwpLAorICAgICAgICAg
ICAgYXhlMjogb3B0aW9ucy5heGUyIHx8IChqb2ludERhdGEuY29ubmVjdGVkQXhpcyA/IGpvaW50
RGF0YS5jb25uZWN0ZWRBeGlzLmFzQXJyYXkoKSA6IG51bGwpLAorICAgICAgICAgICAgcG9zMTog
b3B0aW9ucy5wb3MxIHx8IChqb2ludERhdGEubWFpblBpdm90ID8gam9pbnREYXRhLm1haW5QaXZv
dC5hc0FycmF5KCkgOiBudWxsKSwKKyAgICAgICAgICAgIHBvczI6IG9wdGlvbnMucG9zMiB8fCAo
am9pbnREYXRhLmNvbm5lY3RlZFBpdm90ID8gam9pbnREYXRhLmNvbm5lY3RlZFBpdm90LmFzQXJy
YXkoKSA6IG51bGwpLAorICAgICAgICAgICAgbWluOiBvcHRpb25zLm1pbiwKKyAgICAgICAgICAg
IG1heDogb3B0aW9ucy5tYXgsCisgICAgICAgICAgICBjb2xsaXNpb246IG9wdGlvbnMuY29sbGlz
aW9uIHx8IGpvaW50RGF0YS5jb2xsaXNpb24sCisgICAgICAgICAgICBzcHJpbmc6IG9wdGlvbnMu
c3ByaW5nLAorICAgICAgICAgICAgLy9zdXBwb3J0aW5nIG9sZGVyIHZlcnNpb24gb2YgT2ltbwor
ICAgICAgICAgICAgd29ybGQ6IHRoaXMud29ybGQKKyAgICAgICAgfTsKKyAgICAgICAgc3dpdGNo
IChpbXBvc3RvckpvaW50LmpvaW50LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3Nf
cGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBoeXNpY3NKb2ludCJd
LkJhbGxBbmRTb2NrZXRKb2ludDoKKyAgICAgICAgICAgICAgICB0eXBlID0gImpvaW50QmFsbCI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNp
Y3NKb2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQaHlzaWNzSm9pbnQiXS5TcHJp
bmdKb2ludDoKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siTG9nZ2VyIl0uV2FybigiT0lNTy5qcyBkb2Vzbid0IHN1cHBvcnQgU3ByaW5n
IENvbnN0cmFpbnQuIFNpbXVsYXRpbmcgdXNpbmcgRGlzdGFuY2VKb2ludCBpbnN0ZWFkIik7Cisg
ICAgICAgICAgICAgICAgdmFyIHNwcmluZ0RhdGEgPSBqb2ludERhdGE7CisgICAgICAgICAgICAg
ICAgbmF0aXZlSm9pbnREYXRhLm1pbiA9IHNwcmluZ0RhdGEubGVuZ3RoIHx8IG5hdGl2ZUpvaW50
RGF0YS5taW47CisgICAgICAgICAgICAgICAgLy9NYXggc2hvdWxkIGFsc28gYmUgc2V0LCBqdXN0
IG1ha2Ugc3VyZSBpdCBpcyBhdCBsZWFzdCBtaW4KKyAgICAgICAgICAgICAgICBuYXRpdmVKb2lu
dERhdGEubWF4ID0gTWF0aC5tYXgobmF0aXZlSm9pbnREYXRhLm1pbiwgbmF0aXZlSm9pbnREYXRh
Lm1heCk7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NKb2ludF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJQaHlzaWNzSm9pbnQiXS5EaXN0YW5jZUpvaW50OgorICAgICAg
ICAgICAgICAgIHR5cGUgPSAiam9pbnREaXN0YW5jZSI7CisgICAgICAgICAgICAgICAgbmF0aXZl
Sm9pbnREYXRhLm1heCA9IGpvaW50RGF0YS5tYXhEaXN0YW5jZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlBoeXNpY3NKb2ludCJdLlByaXNtYXRpY0pvaW50OgorICAgICAg
ICAgICAgICAgIHR5cGUgPSAiam9pbnRQcmlzbWUiOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siUGh5c2ljc0pvaW50Il0uU2xpZGVySm9pbnQ6CisgICAgICAgICAgICAgICAg
dHlwZSA9ICJqb2ludFNsaWRlIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgX1BoeXNpY3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlBoeXNpY3NKb2ludCJdLldoZWVsSm9pbnQ6CisgICAgICAgICAgICAgICAgdHlwZSA9ICJqb2lu
dFdoZWVsIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNp
Y3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBoeXNpY3NKb2lu
dCJdLkhpbmdlSm9pbnQ6CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHR5
cGUgPSAiam9pbnRIaW5nZSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgbmF0aXZlSm9pbnREYXRhLnR5cGUgPSB0eXBlOworICAgICAgICBpbXBvc3RvckpvaW50
LmpvaW50LnBoeXNpY3NKb2ludCA9IHRoaXMud29ybGQuYWRkKG5hdGl2ZUpvaW50RGF0YSk7Cisg
ICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLnJlbW92ZUpvaW50ID0gZnVuY3Rpb24g
KGltcG9zdG9ySm9pbnQpIHsKKyAgICAgICAgLy9CdWcgaW4gT2ltbyBwcmV2ZW50cyB1cyBmcm9t
IGRpc3Bvc2luZyBhIGpvaW50IGluIHRoZSBwbGF5Z3JvdW5kCisgICAgICAgIC8vam9pbnQuam9p
bnQucGh5c2ljc0pvaW50LmRpc3Bvc2UoKTsKKyAgICAgICAgLy9TbyB3ZSB3aWxsIGJydXRlZm9y
Y2UgaXQhCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aGlzLndvcmxkLnJlbW92ZUpvaW50
KGltcG9zdG9ySm9pbnQuam9pbnQucGh5c2ljc0pvaW50KTsKKyAgICAgICAgfQorICAgICAgICBj
YXRjaCAoZSkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIkxvZ2dlciJdLldhcm4oZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIE9pbW9K
U1BsdWdpbi5wcm90b3R5cGUuaXNTdXBwb3J0ZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLkJKU09JTU8gIT09IHVuZGVmaW5lZDsKKyAgICB9OworICAgIE9pbW9KU1BsdWdp
bi5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Gcm9tUGh5c2ljc0JvZHkgPSBmdW5jdGlvbiAo
aW1wb3N0b3IpIHsKKyAgICAgICAgaWYgKCFpbXBvc3Rvci5waHlzaWNzQm9keS5zbGVlcGluZykg
eworICAgICAgICAgICAgLy9UT0RPIGNoZWNrIHRoYXQKKyAgICAgICAgICAgIC8qaWYgKGltcG9z
dG9yLnBoeXNpY3NCb2R5LnNoYXBlcy5uZXh0KSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmVu
dFNoYXBlID0gdGhpcy5fZ2V0TGFzdFNoYXBlKGltcG9zdG9yLnBoeXNpY3NCb2R5KTsKKyAgICAg
ICAgICAgICAgICBpbXBvc3Rvci5vYmplY3QucG9zaXRpb24uY29weUZyb20ocGFyZW50U2hhcGUu
cG9zaXRpb24pOworICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHBhcmVudFNoYXBlLnBvc2l0
aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Ki8KKyAgICAgICAgICAgIGltcG9zdG9yLm9iamVj
dC5wb3NpdGlvbi5jb3B5RnJvbShpbXBvc3Rvci5waHlzaWNzQm9keS5nZXRQb3NpdGlvbigpKTsK
KyAgICAgICAgICAgIC8vfQorICAgICAgICAgICAgaWYgKGltcG9zdG9yLm9iamVjdC5yb3RhdGlv
blF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgICAgICBpbXBvc3Rvci5vYmplY3Qucm90YXRpb25R
dWF0ZXJuaW9uLmNvcHlGcm9tKGltcG9zdG9yLnBoeXNpY3NCb2R5LmdldFF1YXRlcm5pb24oKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIE9pbW9KU1BsdWdpbi5wcm90
b3R5cGUuc2V0UGh5c2ljc0JvZHlUcmFuc2Zvcm1hdGlvbiA9IGZ1bmN0aW9uIChpbXBvc3Rvciwg
bmV3UG9zaXRpb24sIG5ld1JvdGF0aW9uKSB7CisgICAgICAgIHZhciBib2R5ID0gaW1wb3N0b3Iu
cGh5c2ljc0JvZHk7CisgICAgICAgIGJvZHkucG9zaXRpb24uY29weShuZXdQb3NpdGlvbik7Cisg
ICAgICAgIGJvZHkub3JpZW50YXRpb24uY29weShuZXdSb3RhdGlvbik7CisgICAgICAgIGJvZHku
c3luY1NoYXBlcygpOworICAgICAgICBib2R5LmF3YWtlKCk7CisgICAgfTsKKyAgICAvKnByaXZh
dGUgX2dldExhc3RTaGFwZShib2R5OiBhbnkpOiBhbnkgeworICAgICAgICB2YXIgbGFzdFNoYXBl
ID0gYm9keS5zaGFwZXM7CisgICAgICAgIHdoaWxlIChsYXN0U2hhcGUubmV4dCkgeworICAgICAg
ICAgICAgbGFzdFNoYXBlID0gbGFzdFNoYXBlLm5leHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGxhc3RTaGFwZTsKKyAgICB9Ki8KKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLnNldExp
bmVhclZlbG9jaXR5ID0gZnVuY3Rpb24gKGltcG9zdG9yLCB2ZWxvY2l0eSkgeworICAgICAgICBp
bXBvc3Rvci5waHlzaWNzQm9keS5saW5lYXJWZWxvY2l0eS5jb3B5KHZlbG9jaXR5KTsKKyAgICB9
OworICAgIE9pbW9KU1BsdWdpbi5wcm90b3R5cGUuc2V0QW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rp
b24gKGltcG9zdG9yLCB2ZWxvY2l0eSkgeworICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5h
bmd1bGFyVmVsb2NpdHkuY29weSh2ZWxvY2l0eSk7CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4u
cHJvdG90eXBlLmdldExpbmVhclZlbG9jaXR5ID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAg
ICAgIHZhciB2ID0gaW1wb3N0b3IucGh5c2ljc0JvZHkubGluZWFyVmVsb2NpdHk7CisgICAgICAg
IGlmICghdikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVjdG9yMyJdKHYueCwgdi55LCB2LnopOworICAgIH07CisgICAgT2ltb0pTUGx1Z2luLnBy
b3RvdHlwZS5nZXRBbmd1bGFyVmVsb2NpdHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAg
ICAgdmFyIHYgPSBpbXBvc3Rvci5waHlzaWNzQm9keS5hbmd1bGFyVmVsb2NpdHk7CisgICAgICAg
IGlmICghdikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVjdG9yMyJdKHYueCwgdi55LCB2LnopOworICAgIH07CisgICAgT2ltb0pTUGx1Z2luLnBy
b3RvdHlwZS5zZXRCb2R5TWFzcyA9IGZ1bmN0aW9uIChpbXBvc3RvciwgbWFzcykgeworICAgICAg
ICB2YXIgc3RhdGljQm9keSA9IG1hc3MgPT09IDA7CisgICAgICAgIC8vdGhpcyB3aWxsIGFjdHVh
bGx5IHNldCB0aGUgYm9keSdzIGRlbnNpdHkgYW5kIG5vdCBpdHMgbWFzcy4KKyAgICAgICAgLy9C
dXQgdGhpcyBpcyBob3cgb2ltbyB0cmVhdHMgdGhlIG1hc3MgdmFyaWFibGUuCisgICAgICAgIGlt
cG9zdG9yLnBoeXNpY3NCb2R5LnNoYXBlcy5kZW5zaXR5ID0gc3RhdGljQm9keSA/IDEgOiBtYXNz
OworICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5zZXR1cE1hc3Moc3RhdGljQm9keSA/IDB4
MiA6IDB4MSk7CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLmdldEJvZHlNYXNz
ID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIHJldHVybiBpbXBvc3Rvci5waHlzaWNz
Qm9keS5zaGFwZXMuZGVuc2l0eTsKKyAgICB9OworICAgIE9pbW9KU1BsdWdpbi5wcm90b3R5cGUu
Z2V0Qm9keUZyaWN0aW9uID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIHJldHVybiBp
bXBvc3Rvci5waHlzaWNzQm9keS5zaGFwZXMuZnJpY3Rpb247CisgICAgfTsKKyAgICBPaW1vSlNQ
bHVnaW4ucHJvdG90eXBlLnNldEJvZHlGcmljdGlvbiA9IGZ1bmN0aW9uIChpbXBvc3RvciwgZnJp
Y3Rpb24pIHsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuc2hhcGVzLmZyaWN0aW9uID0g
ZnJpY3Rpb247CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLmdldEJvZHlSZXN0
aXR1dGlvbiA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICByZXR1cm4gaW1wb3N0b3Iu
cGh5c2ljc0JvZHkuc2hhcGVzLnJlc3RpdHV0aW9uOworICAgIH07CisgICAgT2ltb0pTUGx1Z2lu
LnByb3RvdHlwZS5zZXRCb2R5UmVzdGl0dXRpb24gPSBmdW5jdGlvbiAoaW1wb3N0b3IsIHJlc3Rp
dHV0aW9uKSB7CisgICAgICAgIGltcG9zdG9yLnBoeXNpY3NCb2R5LnNoYXBlcy5yZXN0aXR1dGlv
biA9IHJlc3RpdHV0aW9uOworICAgIH07CisgICAgT2ltb0pTUGx1Z2luLnByb3RvdHlwZS5zbGVl
cEJvZHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0Jv
ZHkuc2xlZXAoKTsKKyAgICB9OworICAgIE9pbW9KU1BsdWdpbi5wcm90b3R5cGUud2FrZVVwQm9k
eSA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5h
d2FrZSgpOworICAgIH07CisgICAgT2ltb0pTUGx1Z2luLnByb3RvdHlwZS51cGRhdGVEaXN0YW5j
ZUpvaW50ID0gZnVuY3Rpb24gKGpvaW50LCBtYXhEaXN0YW5jZSwgbWluRGlzdGFuY2UpIHsKKyAg
ICAgICAgam9pbnQucGh5c2ljc0pvaW50LmxpbWl0TW90b3IudXBwZXJMaW1pdCA9IG1heERpc3Rh
bmNlOworICAgICAgICBpZiAobWluRGlzdGFuY2UgIT09IHZvaWQgMCkgeworICAgICAgICAgICAg
am9pbnQucGh5c2ljc0pvaW50LmxpbWl0TW90b3IubG93ZXJMaW1pdCA9IG1pbkRpc3RhbmNlOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLnNldE1vdG9yID0g
ZnVuY3Rpb24gKGpvaW50LCBzcGVlZCwgZm9yY2UsIG1vdG9ySW5kZXgpIHsKKyAgICAgICAgaWYg
KGZvcmNlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJMb2dnZXIiXS5XYXJuKCJPaW1vSlMgcGx1Z2luIGN1cnJl
bnRseSBoYXMgdW5leHBlY3RlZCBiZWhhdmlvciB3aGVuIHVzaW5nIHNldE1vdG9yIHdpdGggZm9y
Y2UgcGFyYW1ldGVyIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBm
b3JjZSA9IDFlNjsKKyAgICAgICAgfQorICAgICAgICBzcGVlZCAqPSAtMTsKKyAgICAgICAgLy9U
T0RPIHNlcGFyYXRlIHJvdGF0aW9uYWwgYW5kIHRyYW5zYXRpb25hbCBtb3RvcnMuCisgICAgICAg
IHZhciBtb3RvciA9IG1vdG9ySW5kZXggPyBqb2ludC5waHlzaWNzSm9pbnQucm90YXRpb25hbExp
bWl0TW90b3IyIDogam9pbnQucGh5c2ljc0pvaW50LnJvdGF0aW9uYWxMaW1pdE1vdG9yMSB8fCBq
b2ludC5waHlzaWNzSm9pbnQucm90YXRpb25hbExpbWl0TW90b3IgfHwgam9pbnQucGh5c2ljc0pv
aW50LmxpbWl0TW90b3I7CisgICAgICAgIGlmIChtb3RvcikgeworICAgICAgICAgICAgbW90b3Iu
c2V0TW90b3Ioc3BlZWQsIGZvcmNlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2ltb0pTUGx1
Z2luLnByb3RvdHlwZS5zZXRMaW1pdCA9IGZ1bmN0aW9uIChqb2ludCwgdXBwZXJMaW1pdCwgbG93
ZXJMaW1pdCwgbW90b3JJbmRleCkgeworICAgICAgICAvL1RPRE8gc2VwYXJhdGUgcm90YXRpb25h
bCBhbmQgdHJhbnNhdGlvbmFsIG1vdG9ycy4KKyAgICAgICAgdmFyIG1vdG9yID0gbW90b3JJbmRl
eCA/IGpvaW50LnBoeXNpY3NKb2ludC5yb3RhdGlvbmFsTGltaXRNb3RvcjIgOiBqb2ludC5waHlz
aWNzSm9pbnQucm90YXRpb25hbExpbWl0TW90b3IxIHx8IGpvaW50LnBoeXNpY3NKb2ludC5yb3Rh
dGlvbmFsTGltaXRNb3RvciB8fCBqb2ludC5waHlzaWNzSm9pbnQubGltaXRNb3RvcjsKKyAgICAg
ICAgaWYgKG1vdG9yKSB7CisgICAgICAgICAgICBtb3Rvci5zZXRMaW1pdCh1cHBlckxpbWl0LCBs
b3dlckxpbWl0ID09PSB2b2lkIDAgPyAtdXBwZXJMaW1pdCA6IGxvd2VyTGltaXQpOworICAgICAg
ICB9CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLnN5bmNNZXNoV2l0aEltcG9z
dG9yID0gZnVuY3Rpb24gKG1lc2gsIGltcG9zdG9yKSB7CisgICAgICAgIHZhciBib2R5ID0gaW1w
b3N0b3IucGh5c2ljc0JvZHk7CisgICAgICAgIG1lc2gucG9zaXRpb24ueCA9IGJvZHkucG9zaXRp
b24ueDsKKyAgICAgICAgbWVzaC5wb3NpdGlvbi55ID0gYm9keS5wb3NpdGlvbi55OworICAgICAg
ICBtZXNoLnBvc2l0aW9uLnogPSBib2R5LnBvc2l0aW9uLno7CisgICAgICAgIGlmIChtZXNoLnJv
dGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgbWVzaC5yb3RhdGlvblF1YXRlcm5pb24u
eCA9IGJvZHkub3JpZW50YXRpb24ueDsKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJu
aW9uLnkgPSBib2R5Lm9yaWVudGF0aW9uLnk7CisgICAgICAgICAgICBtZXNoLnJvdGF0aW9uUXVh
dGVybmlvbi56ID0gYm9keS5vcmllbnRhdGlvbi56OworICAgICAgICAgICAgbWVzaC5yb3RhdGlv
blF1YXRlcm5pb24udyA9IGJvZHkub3JpZW50YXRpb24uczsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgT2ltb0pTUGx1Z2luLnByb3RvdHlwZS5nZXRSYWRpdXMgPSBmdW5jdGlvbiAoaW1wb3N0b3Ip
IHsKKyAgICAgICAgcmV0dXJuIGltcG9zdG9yLnBoeXNpY3NCb2R5LnNoYXBlcy5yYWRpdXM7Cisg
ICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLmdldEJveFNpemVUb1JlZiA9IGZ1bmN0
aW9uIChpbXBvc3RvciwgcmVzdWx0KSB7CisgICAgICAgIHZhciBzaGFwZSA9IGltcG9zdG9yLnBo
eXNpY3NCb2R5LnNoYXBlczsKKyAgICAgICAgcmVzdWx0LnggPSBzaGFwZS5oYWxmV2lkdGggKiAy
OworICAgICAgICByZXN1bHQueSA9IHNoYXBlLmhhbGZIZWlnaHQgKiAyOworICAgICAgICByZXN1
bHQueiA9IHNoYXBlLmhhbGZEZXB0aCAqIDI7CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJv
dG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMud29ybGQuY2xlYXIo
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERvZXMgYSByYXljYXN0IGluIHRoZSBwaHlzaWNz
IHdvcmxkCisgICAgICogQHBhcmFtIGZyb20gd2hlbiBzaG91bGQgdGhlIHJheSBzdGFydD8KKyAg
ICAgKiBAcGFyYW0gdG8gd2hlbiBzaG91bGQgdGhlIHJheSBlbmQ/CisgICAgICogQHJldHVybnMg
UGh5c2ljc1JheWNhc3RSZXN1bHQKKyAgICAgKi8KKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBl
LnJheWNhc3QgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkxvZ2dlciJdLldhcm4oInJheWNhc3QgaXMgbm90
IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhlIE9pbW8gcGh5c2ljcyBwbHVnaW4iKTsKKyAgICAg
ICAgdGhpcy5fcmF5Y2FzdFJlc3VsdC5yZXNldChmcm9tLCB0byk7CisgICAgICAgIHJldHVybiB0
aGlzLl9yYXljYXN0UmVzdWx0OworICAgIH07CisgICAgcmV0dXJuIE9pbW9KU1BsdWdpbjsKK30o
KSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGh5c2ljcy9pbmRleC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGh5c2ljcy9pbmRleC50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBQaHlzaWNzRW5naW5lLCBQaHlzaWNzRW5naW5lU2NlbmVDb21wb25lbnQsIFBoeXNpY3NIZWxw
ZXIsIFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnMsIFBoeXNpY3NVcGRyYWZ0RXZl
bnRPcHRpb25zLCBQaHlzaWNzVm9ydGV4RXZlbnRPcHRpb25zLCBQaHlzaWNzUmFkaWFsSW1wdWxz
ZUZhbGxvZmYsIFBoeXNpY3NVcGRyYWZ0TW9kZSwgUGh5c2ljc0ltcG9zdG9yLCBQaHlzaWNzSm9p
bnQsIERpc3RhbmNlSm9pbnQsIE1vdG9yRW5hYmxlZEpvaW50LCBIaW5nZUpvaW50LCBIaW5nZTJK
b2ludCwgQ2Fubm9uSlNQbHVnaW4sIEFtbW9KU1BsdWdpbiwgT2ltb0pTUGx1Z2luICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGh5c2ljc0VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9waHlz
aWNzRW5naW5lICovICIuL1BoeXNpY3MvcGh5c2ljc0VuZ2luZS50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJQaHlzaWNzRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGh5c2ljc0VuZ2luZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQaHlzaWNzRW5naW5lIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3BoeXNpY3NFbmdpbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGh5c2ljc0VuZ2lu
ZUNvbXBvbmVudCAqLyAiLi9QaHlzaWNzL3BoeXNpY3NFbmdpbmVDb21wb25lbnQudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiUGh5c2ljc0VuZ2luZVNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfcGh5c2ljc0VuZ2luZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJQaHlzaWNzRW5naW5lU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfcGh5c2ljc0hlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9waHlzaWNzSGVscGVyICovICIuL1BoeXNpY3MvcGh5
c2ljc0hlbHBlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzSGVscGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfcGh5c2ljc0hlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJQaHlzaWNzSGVscGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NSYWRpYWxF
eHBsb3Npb25FdmVudE9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9waHlzaWNzSGVscGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVu
dE9wdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1VwZHJhZnRFdmVudE9w
dGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9waHlzaWNzSGVscGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlBoeXNpY3NVcGRyYWZ0RXZlbnRPcHRpb25zIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlBoeXNpY3NWb3J0ZXhFdmVudE9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9waHlzaWNzSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNpY3NW
b3J0ZXhFdmVudE9wdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1JhZGlh
bEltcHVsc2VGYWxsb2ZmIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGh5c2ljc0hlbHBlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQaHlzaWNzUmFkaWFsSW1wdWxzZUZhbGxvZmYiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1VwZHJhZnRNb2RlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfcGh5c2ljc0hlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQaHlz
aWNzVXBkcmFmdE1vZGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGh5c2lj
c0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL3BoeXNpY3NJbXBvc3RvciAqLyAiLi9QaHlzaWNzL3BoeXNpY3NJbXBvc3Rvci50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzSW1wb3N0b3IiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUGh5c2lj
c0ltcG9zdG9yIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BoeXNpY3NKb2lu
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9waHlzaWNzSm9pbnQgKi8gIi4vUGh5c2ljcy9waHlzaWNzSm9pbnQudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiUGh5c2ljc0pvaW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGh5c2ljc0pvaW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBoeXNpY3NKb2ludCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJEaXN0YW5jZUpvaW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGh5c2lj
c0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkRpc3RhbmNlSm9pbnQiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiTW90b3JFbmFibGVkSm9pbnQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9waHlzaWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTW90b3JFbmFi
bGVkSm9pbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSGluZ2VKb2ludCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX3BoeXNpY3NKb2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJI
aW5nZUpvaW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhpbmdlMkpvaW50IiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkhpbmdlMkpvaW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BsdWdpbnNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vUGx1Z2lucy9pbmRleCAqLyAiLi9QaHlzaWNzL1BsdWdpbnMvaW5kZXgudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ2Fubm9uSlNQbHVnaW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QbHVn
aW5zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNhbm5vbkpTUGx1Z2luIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFtbW9KU1BsdWdpbiIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX1BsdWdpbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQW1tb0pTUGx1
Z2luIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9pbW9KU1BsdWdpbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX1BsdWdpbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siT2lt
b0pTUGx1Z2luIl07IH0pOworCisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L1BoeXNpY3MvcGh5c2ljc0VuZ2luZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9QaHlzaWNzL3BoeXNpY3NFbmdpbmUudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBQaHlzaWNzRW5naW5lICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBo
eXNpY3NFbmdpbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBoeXNpY3NFbmdpbmU7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0
b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZXZUb29scyAqLyAiLi9NaXNjL2RldlRvb2xzLnRzIik7
CisKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGNvbnRyb2wgcGh5c2ljcyBlbmdpbmUKKyAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by91c2luZ190aGVfcGh5c2ljc19lbmdp
bmUKKyAqLwordmFyIFBoeXNpY3NFbmdpbmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBQaHlzaWNzIEVuZ2luZQorICAgICAqIEBw
YXJhbSBncmF2aXR5IGRlZmluZXMgdGhlIGdyYXZpdHkgdmVjdG9yIHVzZWQgYnkgdGhlIHNpbXVs
YXRpb24KKyAgICAgKiBAcGFyYW0gX3BoeXNpY3NQbHVnaW4gZGVmaW5lcyB0aGUgcGx1Z2luIHRv
IHVzZSAoQ2Fubm9uSlMgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQaHlzaWNz
RW5naW5lKGdyYXZpdHksIF9waHlzaWNzUGx1Z2luKSB7CisgICAgICAgIGlmIChfcGh5c2ljc1Bs
dWdpbiA9PT0gdm9pZCAwKSB7IF9waHlzaWNzUGx1Z2luID0gUGh5c2ljc0VuZ2luZS5EZWZhdWx0
UGx1Z2luRmFjdG9yeSgpOyB9CisgICAgICAgIHRoaXMuX3BoeXNpY3NQbHVnaW4gPSBfcGh5c2lj
c1BsdWdpbjsKKyAgICAgICAgdGhpcy5faW1wb3N0b3JzID0gW107CisgICAgICAgIHRoaXMuX2pv
aW50cyA9IFtdOworICAgICAgICBpZiAoIXRoaXMuX3BoeXNpY3NQbHVnaW4uaXNTdXBwb3J0ZWQo
KSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJQaHlzaWNzIEVuZ2luZSAiICsgdGhp
cy5fcGh5c2ljc1BsdWdpbi5uYW1lICsgIiBjYW5ub3QgYmUgZm91bmQuICIKKyAgICAgICAgICAg
ICAgICArICJQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGluY2x1ZGVkLiIpOworICAgICAgICB9Cisg
ICAgICAgIGdyYXZpdHkgPSBncmF2aXR5IHx8IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIC05LjgwNywgMCk7CisgICAgICAg
IHRoaXMuc2V0R3Jhdml0eShncmF2aXR5KTsKKyAgICAgICAgdGhpcy5zZXRUaW1lU3RlcCgpOwor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBGYWN0b3J5IHVzZWQgdG8gY3JlYXRlIHRoZSBkZWZhdWx0
IHBoeXNpY3MgcGx1Z2luLgorICAgICAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHBoeXNpY3MgcGx1
Z2luCisgICAgICovCisgICAgUGh5c2ljc0VuZ2luZS5EZWZhdWx0UGx1Z2luRmFjdG9yeSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiQ2Fubm9uSlNQbHVnaW4iKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGdyYXZpdHkgdmVjdG9yIHVzZWQgYnkg
dGhlIHNpbXVsYXRpb24KKyAgICAgKiBAcGFyYW0gZ3Jhdml0eSBkZWZpbmVzIHRoZSBncmF2aXR5
IHZlY3RvciB0byB1c2UKKyAgICAgKi8KKyAgICBQaHlzaWNzRW5naW5lLnByb3RvdHlwZS5zZXRH
cmF2aXR5ID0gZnVuY3Rpb24gKGdyYXZpdHkpIHsKKyAgICAgICAgdGhpcy5ncmF2aXR5ID0gZ3Jh
dml0eTsKKyAgICAgICAgdGhpcy5fcGh5c2ljc1BsdWdpbi5zZXRHcmF2aXR5KHRoaXMuZ3Jhdml0
eSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHRpbWUgc3RlcCBvZiB0aGUgcGh5
c2ljcyBlbmdpbmUuCisgICAgICogRGVmYXVsdCBpcyAxLzYwLgorICAgICAqIFRvIHNsb3cgaXQg
ZG93biwgZW50ZXIgMS82MDAgZm9yIGV4YW1wbGUuCisgICAgICogVG8gc3BlZWQgaXQgdXAsIDEv
MzAKKyAgICAgKiBAcGFyYW0gbmV3VGltZVN0ZXAgZGVmaW5lcyB0aGUgbmV3IHRpbWVzdGVwIHRv
IGFwcGx5IHRvIHRoaXMgd29ybGQuCisgICAgICovCisgICAgUGh5c2ljc0VuZ2luZS5wcm90b3R5
cGUuc2V0VGltZVN0ZXAgPSBmdW5jdGlvbiAobmV3VGltZVN0ZXApIHsKKyAgICAgICAgaWYgKG5l
d1RpbWVTdGVwID09PSB2b2lkIDApIHsgbmV3VGltZVN0ZXAgPSAxIC8gNjA7IH0KKyAgICAgICAg
dGhpcy5fcGh5c2ljc1BsdWdpbi5zZXRUaW1lU3RlcChuZXdUaW1lU3RlcCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXQgdGhlIHRpbWUgc3RlcCBvZiB0aGUgcGh5c2ljcyBlbmdpbmUuCisg
ICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdGltZSBzdGVwCisgICAgICovCisgICAgUGh5c2lj
c0VuZ2luZS5wcm90b3R5cGUuZ2V0VGltZVN0ZXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9waHlzaWNzUGx1Z2luLmdldFRpbWVTdGVwKCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZWxlYXNlIGFsbCByZXNvdXJjZXMKKyAgICAgKi8KKyAgICBQaHlzaWNzRW5naW5l
LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9pbXBvc3Rv
cnMuZm9yRWFjaChmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgICAgIGltcG9zdG9yLmRp
c3Bvc2UoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3BoeXNpY3NQbHVnaW4uZGlzcG9z
ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgY3VycmVu
dCBwaHlzaWNzIHBsdWdpbgorICAgICAqIEByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4K
KyAgICAgKi8KKyAgICBQaHlzaWNzRW5naW5lLnByb3RvdHlwZS5nZXRQaHlzaWNzUGx1Z2luTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BoeXNpY3NQbHVnaW4ubmFt
ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZGluZyBhIG5ldyBpbXBvc3RvciBmb3IgdGhl
IGltcG9zdG9yIHRyYWNraW5nLgorICAgICAqIFRoaXMgd2lsbCBiZSBkb25lIGJ5IHRoZSBpbXBv
c3RvciBpdHNlbGYuCisgICAgICogQHBhcmFtIGltcG9zdG9yIHRoZSBpbXBvc3RvciB0byBhZGQK
KyAgICAgKi8KKyAgICBQaHlzaWNzRW5naW5lLnByb3RvdHlwZS5hZGRJbXBvc3RvciA9IGZ1bmN0
aW9uIChpbXBvc3RvcikgeworICAgICAgICBpbXBvc3Rvci51bmlxdWVJZCA9IHRoaXMuX2ltcG9z
dG9ycy5wdXNoKGltcG9zdG9yKTsKKyAgICAgICAgLy9pZiBubyBwYXJlbnQsIGdlbmVyYXRlIHRo
ZSBib2R5CisgICAgICAgIGlmICghaW1wb3N0b3IucGFyZW50KSB7CisgICAgICAgICAgICB0aGlz
Ll9waHlzaWNzUGx1Z2luLmdlbmVyYXRlUGh5c2ljc0JvZHkoaW1wb3N0b3IpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYW4gaW1wb3N0b3IgZnJvbSB0aGUgZW5n
aW5lLgorICAgICAqIFRoaXMgaW1wb3N0b3IgYW5kIGl0cyBtZXNoIHdpbGwgbm90IGxvbmdlciBi
ZSB1cGRhdGVkIGJ5IHRoZSBwaHlzaWNzIGVuZ2luZS4KKyAgICAgKiBAcGFyYW0gaW1wb3N0b3Ig
dGhlIGltcG9zdG9yIHRvIHJlbW92ZQorICAgICAqLworICAgIFBoeXNpY3NFbmdpbmUucHJvdG90
eXBlLnJlbW92ZUltcG9zdG9yID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIHZhciBp
bmRleCA9IHRoaXMuX2ltcG9zdG9ycy5pbmRleE9mKGltcG9zdG9yKTsKKyAgICAgICAgaWYgKGlu
ZGV4ID4gLTEpIHsKKyAgICAgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5faW1wb3N0b3JzLnNw
bGljZShpbmRleCwgMSk7CisgICAgICAgICAgICAvL0lzIGl0IG5lZWRlZD8KKyAgICAgICAgICAg
IGlmIChyZW1vdmVkLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGh5c2ljc1Bs
dWdpbigpLnJlbW92ZVBoeXNpY3NCb2R5KGltcG9zdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGEgam9pbnQgdG8gdGhlIHBoeXNpY3Mg
ZW5naW5lCisgICAgICogQHBhcmFtIG1haW5JbXBvc3RvciBkZWZpbmVzIHRoZSBtYWluIGltcG9z
dG9yIHRvIHdoaWNoIHRoZSBqb2ludCBpcyBhZGRlZC4KKyAgICAgKiBAcGFyYW0gY29ubmVjdGVk
SW1wb3N0b3IgZGVmaW5lcyB0aGUgaW1wb3N0b3IgdGhhdCBpcyBjb25uZWN0ZWQgdG8gdGhlIG1h
aW4gaW1wb3N0b3IgdXNpbmcgdGhpcyBqb2ludAorICAgICAqIEBwYXJhbSBqb2ludCBkZWZpbmVz
IHRoZSBqb2ludCB0aGF0IHdpbGwgY29ubmVjdCBib3RoIGltcG9zdG9ycy4KKyAgICAgKi8KKyAg
ICBQaHlzaWNzRW5naW5lLnByb3RvdHlwZS5hZGRKb2ludCA9IGZ1bmN0aW9uIChtYWluSW1wb3N0
b3IsIGNvbm5lY3RlZEltcG9zdG9yLCBqb2ludCkgeworICAgICAgICB2YXIgaW1wb3N0b3JKb2lu
dCA9IHsKKyAgICAgICAgICAgIG1haW5JbXBvc3RvcjogbWFpbkltcG9zdG9yLAorICAgICAgICAg
ICAgY29ubmVjdGVkSW1wb3N0b3I6IGNvbm5lY3RlZEltcG9zdG9yLAorICAgICAgICAgICAgam9p
bnQ6IGpvaW50CisgICAgICAgIH07CisgICAgICAgIGpvaW50LnBoeXNpY3NQbHVnaW4gPSB0aGlz
Ll9waHlzaWNzUGx1Z2luOworICAgICAgICB0aGlzLl9qb2ludHMucHVzaChpbXBvc3RvckpvaW50
KTsKKyAgICAgICAgdGhpcy5fcGh5c2ljc1BsdWdpbi5nZW5lcmF0ZUpvaW50KGltcG9zdG9ySm9p
bnQpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhIGpvaW50IGZyb20gdGhlIHNp
bXVsYXRpb24KKyAgICAgKiBAcGFyYW0gbWFpbkltcG9zdG9yIGRlZmluZXMgdGhlIGltcG9zdG9y
IHVzZWQgd2l0aCB0aGUgam9pbnQKKyAgICAgKiBAcGFyYW0gY29ubmVjdGVkSW1wb3N0b3IgZGVm
aW5lcyB0aGUgb3RoZXIgaW1wb3N0b3IgY29ubmVjdGVkIHRvIHRoZSBtYWluIG9uZSBieSB0aGUg
am9pbnQKKyAgICAgKiBAcGFyYW0gam9pbnQgZGVmaW5lcyB0aGUgam9pbnQgdG8gcmVtb3ZlCisg
ICAgICovCisgICAgUGh5c2ljc0VuZ2luZS5wcm90b3R5cGUucmVtb3ZlSm9pbnQgPSBmdW5jdGlv
biAobWFpbkltcG9zdG9yLCBjb25uZWN0ZWRJbXBvc3Rvciwgam9pbnQpIHsKKyAgICAgICAgdmFy
IG1hdGNoaW5nSm9pbnRzID0gdGhpcy5fam9pbnRzLmZpbHRlcihmdW5jdGlvbiAoaW1wb3N0b3JK
b2ludCkgeworICAgICAgICAgICAgcmV0dXJuIChpbXBvc3RvckpvaW50LmNvbm5lY3RlZEltcG9z
dG9yID09PSBjb25uZWN0ZWRJbXBvc3RvcgorICAgICAgICAgICAgICAgICYmIGltcG9zdG9ySm9p
bnQuam9pbnQgPT09IGpvaW50CisgICAgICAgICAgICAgICAgJiYgaW1wb3N0b3JKb2ludC5tYWlu
SW1wb3N0b3IgPT09IG1haW5JbXBvc3Rvcik7CisgICAgICAgIH0pOworICAgICAgICBpZiAobWF0
Y2hpbmdKb2ludHMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzUGx1Z2luLnJl
bW92ZUpvaW50KG1hdGNoaW5nSm9pbnRzWzBdKTsKKyAgICAgICAgICAgIC8vVE9ETyByZW1vdmUg
aXQgZnJvbSB0aGUgbGlzdCBhcyB3ZWxsCisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIENhbGxlZCBieSB0aGUgc2NlbmUuIE5vIG5lZWQgdG8gY2FsbCBpdC4KKyAgICAgKiBAcGFy
YW0gZGVsdGEgZGVmaW5lcyB0aGUgdGltZXNwYW0gYmV0d2VlbiBmcmFtZXMKKyAgICAgKi8KKyAg
ICBQaHlzaWNzRW5naW5lLnByb3RvdHlwZS5fc3RlcCA9IGZ1bmN0aW9uIChkZWx0YSkgeworICAg
ICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICAvL2NoZWNrIGlmIGFueSBtZXNoIGhhcyBu
byBib2R5IC8gcmVxdWlyZXMgYW4gdXBkYXRlCisgICAgICAgIHRoaXMuX2ltcG9zdG9ycy5mb3JF
YWNoKGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICAgICAgaWYgKGltcG9zdG9yLmlzQm9k
eUluaXRSZXF1aXJlZCgpKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3BoeXNpY3NQbHVnaW4u
Z2VuZXJhdGVQaHlzaWNzQm9keShpbXBvc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgICAgICBpZiAoZGVsdGEgPiAwLjEpIHsKKyAgICAgICAgICAgIGRlbHRhID0gMC4xOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRlbHRhIDw9IDApIHsKKyAgICAgICAgICAgIGRl
bHRhID0gMS4wIC8gNjAuMDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9waHlzaWNzUGx1Z2lu
LmV4ZWN1dGVTdGVwKGRlbHRhLCB0aGlzLl9pbXBvc3RvcnMpOworICAgIH07CisgICAgLyoqCisg
ICAgICogR2V0cyB0aGUgY3VycmVudCBwbHVnaW4gdXNlZCB0byBydW4gdGhlIHNpbXVsYXRpb24K
KyAgICAgKiBAcmV0dXJucyBjdXJyZW50IHBsdWdpbgorICAgICAqLworICAgIFBoeXNpY3NFbmdp
bmUucHJvdG90eXBlLmdldFBoeXNpY3NQbHVnaW4gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9waHlzaWNzUGx1Z2luOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0
aGUgbGlzdCBvZiBwaHlzaWMgaW1wb3N0b3JzCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgb2Yg
UGh5c2ljc0ltcG9zdG9yCisgICAgICovCisgICAgUGh5c2ljc0VuZ2luZS5wcm90b3R5cGUuZ2V0
SW1wb3N0b3JzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5faW1wb3N0b3Jz
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgaW1wb3N0b3IgZm9yIGEgcGh5c2lj
cyBlbmFibGVkIG9iamVjdAorICAgICAqIEBwYXJhbSBvYmplY3QgZGVmaW5lcyB0aGUgb2JqZWN0
IGltcGVyc29uYXRlZCBieSB0aGUgaW1wb3N0b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgUGh5c2lj
c0ltcG9zdG9yIG9yIG51bGwgaWYgbm90IGZvdW5kCisgICAgICovCisgICAgUGh5c2ljc0VuZ2lu
ZS5wcm90b3R5cGUuZ2V0SW1wb3N0b3JGb3JQaHlzaWNzT2JqZWN0ID0gZnVuY3Rpb24gKG9iamVj
dCkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ltcG9zdG9ycy5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2ltcG9zdG9yc1tpXS5vYmplY3QgPT09IG9i
amVjdCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbXBvc3RvcnNbaV07CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBpbXBvc3RvciBmb3IgYSBwaHlzaWNzIGJvZHkgb2JqZWN0Cisg
ICAgICogQHBhcmFtIGJvZHkgZGVmaW5lcyBwaHlzaWNzIGJvZHkgdXNlZCBieSB0aGUgaW1wb3N0
b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgUGh5c2ljc0ltcG9zdG9yIG9yIG51bGwgaWYgbm90IGZv
dW5kCisgICAgICovCisgICAgUGh5c2ljc0VuZ2luZS5wcm90b3R5cGUuZ2V0SW1wb3N0b3JXaXRo
UGh5c2ljc0JvZHkgPSBmdW5jdGlvbiAoYm9keSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMuX2ltcG9zdG9ycy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHRoaXMu
X2ltcG9zdG9yc1tpXS5waHlzaWNzQm9keSA9PT0gYm9keSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9pbXBvc3RvcnNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEb2VzIGEgcmF5Y2FzdCBp
biB0aGUgcGh5c2ljcyB3b3JsZAorICAgICAqIEBwYXJhbSBmcm9tIHdoZW4gc2hvdWxkIHRoZSBy
YXkgc3RhcnQ/CisgICAgICogQHBhcmFtIHRvIHdoZW4gc2hvdWxkIHRoZSByYXkgZW5kPworICAg
ICAqIEByZXR1cm5zIFBoeXNpY3NSYXljYXN0UmVzdWx0CisgICAgICovCisgICAgUGh5c2ljc0Vu
Z2luZS5wcm90b3R5cGUucmF5Y2FzdCA9IGZ1bmN0aW9uIChmcm9tLCB0bykgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fcGh5c2ljc1BsdWdpbi5yYXljYXN0KGZyb20sIHRvKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdsb2JhbCB2YWx1ZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHNtYWxsZXN0IG51
bWJlciBzdXBwb3J0ZWQgYnkgdGhlIHNpbXVsYXRpb24KKyAgICAgKi8KKyAgICBQaHlzaWNzRW5n
aW5lLkVwc2lsb24gPSAwLjAwMTsKKyAgICByZXR1cm4gUGh5c2ljc0VuZ2luZTsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGh5c2ljcy9waHlzaWNzRW5naW5lQ29tcG9uZW50
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL1BoeXNpY3MvcGh5c2ljc0VuZ2luZUNvbXBvbmVudC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IFBoeXNpY3NFbmdpbmVTY2VuZUNvbXBvbmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQaHlzaWNzRW5naW5lU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFBoeXNpY3NFbmdpbmVTY2VuZUNvbXBvbmVudDsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2Jz
ZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2Fic3RyYWN0TWVzaCAqLyAiLi9NZXNo
ZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lQ29t
cG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9zY2VuZUNvbXBvbmVudCAqLyAiLi9zY2VuZUNvbXBvbmVudC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vc2NlbmUgKi8gIi4vc2NlbmUudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfcGh5c2ljc0VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9waHlzaWNzRW5naW5lICovICIuL1Bo
eXNpY3MvcGh5c2ljc0VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9waHlz
aWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vcGh5c2ljc0pvaW50ICovICIuL1BoeXNpY3MvcGh5c2ljc0pvaW50LnRzIik7CisK
KworCisKKworCisKKy8qKgorICogR2V0cyB0aGUgY3VycmVudCBwaHlzaWNzIGVuZ2luZQorICog
QHJldHVybnMgYSBJUGh5c2ljc0VuZ2luZSBvciBudWxsIGlmIG5vbmUgYXR0YWNoZWQKKyAqLwor
X3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjZW5lIl0ucHJvdG90eXBlLmdl
dFBoeXNpY3NFbmdpbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMuX3BoeXNpY3NF
bmdpbmU7Cit9OworLyoqCisgKiBFbmFibGVzIHBoeXNpY3MgdG8gdGhlIGN1cnJlbnQgc2NlbmUK
KyAqIEBwYXJhbSBncmF2aXR5IGRlZmluZXMgdGhlIHNjZW5lJ3MgZ3Jhdml0eSBmb3IgdGhlIHBo
eXNpY3MgZW5naW5lCisgKiBAcGFyYW0gcGx1Z2luIGRlZmluZXMgdGhlIHBoeXNpY3MgZW5naW5l
IHRvIGJlIHVzZWQuIGRlZmF1bHRzIHRvIE9pbW9KUy4KKyAqIEByZXR1cm4gYSBib29sZWFuIGlu
ZGljYXRpbmcgaWYgdGhlIHBoeXNpY3MgZW5naW5lIHdhcyBpbml0aWFsaXplZAorICovCitfc2Nl
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NlbmUiXS5wcm90b3R5cGUuZW5hYmxl
UGh5c2ljcyA9IGZ1bmN0aW9uIChncmF2aXR5LCBwbHVnaW4pIHsKKyAgICBpZiAoZ3Jhdml0eSA9
PT0gdm9pZCAwKSB7IGdyYXZpdHkgPSBudWxsOyB9CisgICAgaWYgKHRoaXMuX3BoeXNpY3NFbmdp
bmUpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIC8vIFJlZ2lzdGVyIHRoZSBj
b21wb25lbnQgdG8gdGhlIHNjZW5lCisgICAgdmFyIGNvbXBvbmVudCA9IHRoaXMuX2dldENvbXBv
bmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmVD
b21wb25lbnRDb25zdGFudHMiXS5OQU1FX1BIWVNJQ1NFTkdJTkUpOworICAgIGlmICghY29tcG9u
ZW50KSB7CisgICAgICAgIGNvbXBvbmVudCA9IG5ldyBQaHlzaWNzRW5naW5lU2NlbmVDb21wb25l
bnQodGhpcyk7CisgICAgICAgIHRoaXMuX2FkZENvbXBvbmVudChjb21wb25lbnQpOworICAgIH0K
KyAgICB0cnkgeworICAgICAgICB0aGlzLl9waHlzaWNzRW5naW5lID0gbmV3IF9waHlzaWNzRW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlBoeXNpY3NFbmdpbmUiXShncmF2aXR5
LCBwbHVnaW4pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2F0Y2ggKGUpIHsK
KyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dl
ciJdLkVycm9yKGUubWVzc2FnZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9Owor
LyoqCisgKiBEaXNhYmxlcyBhbmQgZGlzcG9zZXMgdGhlIHBoeXNpY3MgZW5naW5lIGFzc29jaWF0
ZWQgd2l0aCB0aGUgc2NlbmUKKyAqLworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIlNjZW5lIl0ucHJvdG90eXBlLmRpc2FibGVQaHlzaWNzRW5naW5lID0gZnVuY3Rpb24gKCkg
eworICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZGlzcG9zZSgpOworICAgIHRoaXMuX3BoeXNpY3NF
bmdpbmUgPSBudWxsOworfTsKKy8qKgorICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0
aGVyZSBpcyBhbiBhY3RpdmUgcGh5c2ljcyBlbmdpbmUKKyAqIEByZXR1cm5zIGEgYm9vbGVhbiBp
bmRpY2F0aW5nIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBwaHlzaWNzIGVuZ2luZQorICovCitfc2Nl
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NlbmUiXS5wcm90b3R5cGUuaXNQaHlz
aWNzRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gdGhpcy5fcGh5c2ljc0VuZ2lu
ZSAhPT0gdW5kZWZpbmVkOworfTsKKy8qKgorICogRGVsZXRlcyBhIHBoeXNpY3MgY29tcG91bmQg
aW1wb3N0b3IKKyAqIEBwYXJhbSBjb21wb3VuZCBkZWZpbmVzIHRoZSBjb21wb3VuZCB0byBkZWxl
dGUKKyAqLworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjZW5lIl0ucHJv
dG90eXBlLmRlbGV0ZUNvbXBvdW5kSW1wb3N0b3IgPSBmdW5jdGlvbiAoY29tcG91bmQpIHsKKyAg
ICB2YXIgbWVzaCA9IGNvbXBvdW5kLnBhcnRzWzBdLm1lc2g7CisgICAgaWYgKG1lc2gucGh5c2lj
c0ltcG9zdG9yKSB7CisgICAgICAgIG1lc2gucGh5c2ljc0ltcG9zdG9yLmRpc3Bvc2UoIC8qdHJ1
ZSovKTsKKyAgICAgICAgbWVzaC5waHlzaWNzSW1wb3N0b3IgPSBudWxsOworICAgIH0KK307Cisv
KiogQGhpZGRlbiAqLworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjZW5l
Il0ucHJvdG90eXBlLl9hZHZhbmNlUGh5c2ljc0VuZ2luZVN0ZXAgPSBmdW5jdGlvbiAoc3RlcCkg
eworICAgIGlmICh0aGlzLl9waHlzaWNzRW5naW5lKSB7CisgICAgICAgIHRoaXMub25CZWZvcmVQ
aHlzaWNzT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIHRoaXMuX3Bo
eXNpY3NFbmdpbmUuX3N0ZXAoc3RlcCAvIDEwMDApOworICAgICAgICB0aGlzLm9uQWZ0ZXJQaHlz
aWNzT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgfQorfTsKK09iamVjdC5k
ZWZpbmVQcm9wZXJ0eShfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJBYnN0cmFjdE1lc2giXS5wcm90b3R5cGUsICJwaHlzaWNzSW1wb3N0b3IiLCB7Cisg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9waHlzaWNzSW1wb3N0
b3I7CisgICAgfSwKKyAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy5fcGh5c2ljc0ltcG9zdG9yID09PSB2YWx1ZSkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9kaXNw
b3NlUGh5c2ljc09ic2VydmVyKSB7CisgICAgICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFi
bGUucmVtb3ZlKHRoaXMuX2Rpc3Bvc2VQaHlzaWNzT2JzZXJ2ZXIpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX3BoeXNpY3NJbXBvc3RvciA9IHZhbHVlOworICAgICAgICBpZiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2VQaHlzaWNzT2JzZXJ2ZXIgPSB0aGlzLm9uRGlzcG9z
ZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAvLyBQaHlzaWNz
CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLnBoeXNpY3NJbXBvc3RvcikgeworICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5waHlzaWNzSW1wb3N0b3IuZGlzcG9zZSggLyohZG9Ob3RSZWN1cnNl
Ki8pOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5waHlzaWNzSW1wb3N0b3IgPSBudWxsOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfSwKKyAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorfSk7CisvKioKKyAq
IEdldHMgdGhlIGN1cnJlbnQgcGh5c2ljcyBpbXBvc3RvcgorICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vZmVhdHVyZXMvcGh5c2ljc19lbmdpbmUKKyAqIEByZXR1cm5zIGEgcGh5c2lj
cyBpbXBvc3RvciBvciBudWxsCisgKi8KK19NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIkFic3RyYWN0TWVzaCJdLnByb3RvdHlwZS5nZXRQaHlzaWNzSW1w
b3N0b3IgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMucGh5c2ljc0ltcG9zdG9yOwor
fTsKKy8qKgorICogQXBwbHkgYSBwaHlzaWMgaW1wdWxzZSB0byB0aGUgbWVzaAorICogQHBhcmFt
IGZvcmNlIGRlZmluZXMgdGhlIGZvcmNlIHRvIGFwcGx5CisgKiBAcGFyYW0gY29udGFjdFBvaW50
IGRlZmluZXMgd2hlcmUgdG8gYXBwbHkgdGhlIGZvcmNlCisgKiBAcmV0dXJucyB0aGUgY3VycmVu
dCBtZXNoCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vdXNpbmdfdGhl
X3BoeXNpY3NfZW5naW5lCisgKi8KK19NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkFic3RyYWN0TWVzaCJdLnByb3RvdHlwZS5hcHBseUltcHVsc2UgPSBm
dW5jdGlvbiAoZm9yY2UsIGNvbnRhY3RQb2ludCkgeworICAgIGlmICghdGhpcy5waHlzaWNzSW1w
b3N0b3IpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICAgIHRoaXMucGh5c2ljc0lt
cG9zdG9yLmFwcGx5SW1wdWxzZShmb3JjZSwgY29udGFjdFBvaW50KTsKKyAgICByZXR1cm4gdGhp
czsKK307CisvKioKKyAqIENyZWF0ZXMgYSBwaHlzaWMgam9pbnQgYmV0d2VlbiB0d28gbWVzaGVz
CisgKiBAcGFyYW0gb3RoZXJNZXNoIGRlZmluZXMgdGhlIG90aGVyIG1lc2ggdG8gdXNlCisgKiBA
cGFyYW0gcGl2b3QxIGRlZmluZXMgdGhlIHBpdm90IHRvIHVzZSBvbiB0aGlzIG1lc2gKKyAqIEBw
YXJhbSBwaXZvdDIgZGVmaW5lcyB0aGUgcGl2b3QgdG8gdXNlIG9uIHRoZSBvdGhlciBtZXNoCisg
KiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIGFkZGl0aW9uYWwgb3B0aW9ucyAoY2FuIGJlIHBsdWdp
biBkZXBlbmRlbnQpCisgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgKiBAc2VlIGh0dHBz
Oi8vd3d3LmJhYnlsb25qcy1wbGF5Z3JvdW5kLmNvbS8jMEJTNVUwIzAKKyAqLworX01lc2hlc19h
YnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQWJzdHJhY3RNZXNoIl0u
cHJvdG90eXBlLnNldFBoeXNpY3NMaW5rV2l0aCA9IGZ1bmN0aW9uIChvdGhlck1lc2gsIHBpdm90
MSwgcGl2b3QyLCBvcHRpb25zKSB7CisgICAgaWYgKCF0aGlzLnBoeXNpY3NJbXBvc3RvciB8fCAh
b3RoZXJNZXNoLnBoeXNpY3NJbXBvc3RvcikgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
CisgICAgdGhpcy5waHlzaWNzSW1wb3N0b3IuY3JlYXRlSm9pbnQob3RoZXJNZXNoLnBoeXNpY3NJ
bXBvc3RvciwgX3BoeXNpY3NKb2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQaHlz
aWNzSm9pbnQiXS5IaW5nZUpvaW50LCB7CisgICAgICAgIG1haW5QaXZvdDogcGl2b3QxLAorICAg
ICAgICBjb25uZWN0ZWRQaXZvdDogcGl2b3QyLAorICAgICAgICBuYXRpdmVQYXJhbXM6IG9wdGlv
bnMKKyAgICB9KTsKKyAgICByZXR1cm4gdGhpczsKK307CisvKioKKyAqIERlZmluZXMgdGhlIHBo
eXNpY3MgZW5naW5lIHNjZW5lIGNvbXBvbmVudCByZXNwb25zaWJsZSB0byBtYW5hZ2UgYSBwaHlz
aWNzIGVuZ2luZQorICovCit2YXIgUGh5c2ljc0VuZ2luZVNjZW5lQ29tcG9uZW50ID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaW5z
dGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBmb3IgdGhlIGdpdmVuIHNjZW5lCisgICAgICogQHBhcmFt
IHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRvIHJlZ2lzdGVyIHRoZSBjb21wb25lbnQgaW4KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBQaHlzaWNzRW5naW5lU2NlbmVDb21wb25lbnQoc2NlbmUpIHsK
KyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBj
b21wb25lbnQgbmFtZSBoZWxwZnVsIHRvIGlkZW50aWZ5IHRoZSBjb21wb25lbnQgaW4gdGhlIGxp
c3Qgb2Ygc2NlbmUgY29tcG9uZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubmFtZSA9
IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZUNvbXBv
bmVudENvbnN0YW50cyJdLk5BTUVfUEhZU0lDU0VOR0lORTsKKyAgICAgICAgdGhpcy5zY2VuZSA9
IHNjZW5lOworICAgICAgICB0aGlzLnNjZW5lLm9uQmVmb3JlUGh5c2ljc09ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgdGhpcy5zY2VuZS5vbkFmdGVyUGh5c2ljc09ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUgZnVuY3Rpb24gdXNlZCB0byBnZXQgdGhl
IGRldGVybWluaXN0aWMgZnJhbWUgdGltZQorICAgICAgICB0aGlzLnNjZW5lLmdldERldGVybWlu
aXN0aWNGcmFtZVRpbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuc2Nl
bmUuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuc2NlbmUu
X3BoeXNpY3NFbmdpbmUuZ2V0VGltZVN0ZXAoKSAqIDEwMDA7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gMTAwMC4wIC8gNjAuMDsKKyAgICAgICAgfTsKKyAgICB9CisgICAgLyoq
CisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25lbnQgaW4gYSBnaXZlbiBzY2VuZQorICAgICAq
LworICAgIFBoeXNpY3NFbmdpbmVTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVnaXN0ZXIgPSBm
dW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWJ1aWxkcyB0aGUgZWxlbWVu
dHMgcmVsYXRlZCB0byB0aGlzIGNvbXBvbmVudCBpbiBjYXNlIG9mCisgICAgICogY29udGV4dCBs
b3N0IGZvciBpbnN0YW5jZS4KKyAgICAgKi8KKyAgICBQaHlzaWNzRW5naW5lU2NlbmVDb21wb25l
bnQucHJvdG90eXBlLnJlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE5vdGhpbmcg
dG8gZG8gZm9yIHRoaXMgY29tcG9uZW50CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3Nl
cyB0aGUgY29tcG9uZW50IGFuZCB0aGUgYXNzb2NpYXRlZCByZXNzb3VyY2VzCisgICAgICovCisg
ICAgUGh5c2ljc0VuZ2luZVNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB0aGlzLnNjZW5lLm9uQmVmb3JlUGh5c2ljc09ic2VydmFibGUuY2xl
YXIoKTsKKyAgICAgICAgdGhpcy5zY2VuZS5vbkFmdGVyUGh5c2ljc09ic2VydmFibGUuY2xlYXIo
KTsKKyAgICAgICAgaWYgKHRoaXMuc2NlbmUuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAg
IHRoaXMuc2NlbmUuZGlzYWJsZVBoeXNpY3NFbmdpbmUoKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgcmV0dXJuIFBoeXNpY3NFbmdpbmVTY2VuZUNvbXBvbmVudDsKK30oKSk7CisKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vUGh5c2ljcy9waHlzaWNzSGVscGVyLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1BoeXNpY3MvcGh5c2ljc0hl
bHBlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFBoeXNpY3NIZWxwZXIsIFBoeXNpY3NSYWRpYWxFeHBsb3Npb25F
dmVudE9wdGlvbnMsIFBoeXNpY3NVcGRyYWZ0RXZlbnRPcHRpb25zLCBQaHlzaWNzVm9ydGV4RXZl
bnRPcHRpb25zLCBQaHlzaWNzUmFkaWFsSW1wdWxzZUZhbGxvZmYsIFBoeXNpY3NVcGRyYWZ0TW9k
ZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzSGVscGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBQaHlzaWNzSGVscGVyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnM7IH0pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUGh5c2ljc1VwZHJhZnRFdmVudE9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBoeXNp
Y3NVcGRyYWZ0RXZlbnRPcHRpb25zOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NWb3J0
ZXhFdmVudE9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBoeXNpY3NWb3J0ZXhFdmVudE9w
dGlvbnM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1JhZGlhbEltcHVsc2VGYWxsb2Zm
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBQaHlzaWNzUmFkaWFsSW1wdWxzZUZhbGxvZmY7IH0pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1VwZHJhZnRNb2RlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBQaHlzaWNzVXBkcmFmdE1vZGU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0
c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlzYy9sb2dn
ZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWlsZGVyc19zcGhlcmVCdWlsZGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVp
bGRlcnMvc3BoZXJlQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfY3lsaW5kZXJC
dWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvY3lsaW5kZXJCdWlsZGVyICovICIuL01lc2hlcy9CdWls
ZGVycy9jeWxpbmRlckJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ3Vs
bGluZ19yYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL0N1bGxpbmcvcmF5ICovICIuL0N1bGxpbmcvcmF5LnRzIik7CisKKworCisKKwor
CisvKioKKyAqIEEgaGVscGVyIGZvciBwaHlzaWNzIHNpbXVsYXRpb25zCisgKiBAc2VlIGh0dHBz
Oi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3VzaW5nX3RoZV9waHlzaWNzX2VuZ2luZSNmdXJ0
aGVyLWZ1bmN0aW9uYWxpdHktb2YtdGhlLWltcG9zdG9yLWNsYXNzCisgKi8KK3ZhciBQaHlzaWNz
SGVscGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIElu
aXRpYWxpemVzIHRoZSBQaHlzaWNzIGhlbHBlcgorICAgICAqIEBwYXJhbSBzY2VuZSBCYWJ5bG9u
LmpzIHNjZW5lCisgICAgICovCisgICAgZnVuY3Rpb24gUGh5c2ljc0hlbHBlcihzY2VuZSkgewor
ICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9waHlzaWNzRW5naW5l
ID0gdGhpcy5fc2NlbmUuZ2V0UGh5c2ljc0VuZ2luZSgpOworICAgICAgICBpZiAoIXRoaXMuX3Bo
eXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCdQaHlzaWNzIGVuZ2luZSBub3QgZW5hYmxlZC4g
UGxlYXNlIGVuYWJsZSB0aGUgcGh5c2ljcyBiZWZvcmUgeW91IGNhbiB1c2UgdGhlIG1ldGhvZHMu
Jyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgLyoqCisgICAg
ICogQXBwbGllcyBhIHJhZGlhbCBleHBsb3Npb24gaW1wdWxzZQorICAgICAqIEBwYXJhbSBvcmln
aW4gdGhlIG9yaWdpbiBvZiB0aGUgZXhwbG9zaW9uCisgICAgICogQHBhcmFtIHJhZGl1c09yRXZl
bnRPcHRpb25zIHRoZSByYWRpdXMgb3IgdGhlIG9wdGlvbnMgb2YgcmFkaWFsIGV4cGxvc2lvbgor
ICAgICAqIEBwYXJhbSBzdHJlbmd0aCB0aGUgZXhwbG9zaW9uIHN0cmVuZ3RoCisgICAgICogQHBh
cmFtIGZhbGxvZmYgcG9zc2libGUgb3B0aW9uczogQ29uc3RhbnQgJiBMaW5lYXIuIERlZmF1bHRz
IHRvIENvbnN0YW50CisgICAgICogQHJldHVybnMgQSBwaHlzaWNzIHJhZGlhbCBleHBsb3Npb24g
ZXZlbnQsIG9yIG51bGwKKyAgICAgKi8KKyAgICBQaHlzaWNzSGVscGVyLnByb3RvdHlwZS5hcHBs
eVJhZGlhbEV4cGxvc2lvbkltcHVsc2UgPSBmdW5jdGlvbiAob3JpZ2luLCByYWRpdXNPckV2ZW50
T3B0aW9ucywgc3RyZW5ndGgsIGZhbGxvZmYpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9waHlzaWNz
RW5naW5lKSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siTG9nZ2VyIl0uV2FybignUGh5c2ljcyBlbmdpbmUgbm90IGVuYWJsZWQuIFBsZWFz
ZSBlbmFibGUgdGhlIHBoeXNpY3MgYmVmb3JlIHlvdSBjYWxsIHRoaXMgbWV0aG9kLicpOworICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGltcG9zdG9ycyA9
IHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0SW1wb3N0b3JzKCk7CisgICAgICAgIGlmIChpbXBvc3Rv
cnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodHlwZW9mIHJhZGl1c09yRXZlbnRPcHRpb25zID09PSAnbnVtYmVyJykgewor
ICAgICAgICAgICAgcmFkaXVzT3JFdmVudE9wdGlvbnMgPSBuZXcgUGh5c2ljc1JhZGlhbEV4cGxv
c2lvbkV2ZW50T3B0aW9ucygpOworICAgICAgICAgICAgcmFkaXVzT3JFdmVudE9wdGlvbnMucmFk
aXVzID0gcmFkaXVzT3JFdmVudE9wdGlvbnM7CisgICAgICAgICAgICByYWRpdXNPckV2ZW50T3B0
aW9ucy5zdHJlbmd0aCA9IHN0cmVuZ3RoIHx8IHJhZGl1c09yRXZlbnRPcHRpb25zLnN0cmVuZ3Ro
OworICAgICAgICAgICAgcmFkaXVzT3JFdmVudE9wdGlvbnMuZmFsbG9mZiA9IGZhbGxvZmYgfHwg
cmFkaXVzT3JFdmVudE9wdGlvbnMuZmFsbG9mZjsKKyAgICAgICAgfQorICAgICAgICB2YXIgZXZl
bnQgPSBuZXcgUGh5c2ljc1JhZGlhbEV4cGxvc2lvbkV2ZW50KHRoaXMuX3NjZW5lLCByYWRpdXNP
ckV2ZW50T3B0aW9ucyk7CisgICAgICAgIHZhciBhZmZlY3RlZEltcG9zdG9yc1dpdGhEYXRhID0g
QXJyYXkoKTsKKyAgICAgICAgaW1wb3N0b3JzLmZvckVhY2goZnVuY3Rpb24gKGltcG9zdG9yKSB7
CisgICAgICAgICAgICB2YXIgaW1wb3N0b3JIaXREYXRhID0gZXZlbnQuZ2V0SW1wb3N0b3JIaXRE
YXRhKGltcG9zdG9yLCBvcmlnaW4pOworICAgICAgICAgICAgaWYgKCFpbXBvc3RvckhpdERhdGEp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
bXBvc3Rvci5hcHBseUltcHVsc2UoaW1wb3N0b3JIaXREYXRhLmZvcmNlLCBpbXBvc3RvckhpdERh
dGEuY29udGFjdFBvaW50KTsKKyAgICAgICAgICAgIGFmZmVjdGVkSW1wb3N0b3JzV2l0aERhdGEu
cHVzaCh7CisgICAgICAgICAgICAgICAgaW1wb3N0b3I6IGltcG9zdG9yLAorICAgICAgICAgICAg
ICAgIGhpdERhdGE6IGltcG9zdG9ySGl0RGF0YSwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKyAgICAgICAgZXZlbnQudHJpZ2dlckFmZmVjdGVkSW1wb3N0b3JzQ2FsbGJhY2soYWZmZWN0
ZWRJbXBvc3RvcnNXaXRoRGF0YSk7CisgICAgICAgIGV2ZW50LmRpc3Bvc2UoZmFsc2UpOworICAg
ICAgICByZXR1cm4gZXZlbnQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBcHBsaWVzIGEgcmFk
aWFsIGV4cGxvc2lvbiBmb3JjZQorICAgICAqIEBwYXJhbSBvcmlnaW4gdGhlIG9yaWdpbiBvZiB0
aGUgZXhwbG9zaW9uCisgICAgICogQHBhcmFtIHJhZGl1c09yRXZlbnRPcHRpb25zIHRoZSByYWRp
dXMgb3IgdGhlIG9wdGlvbnMgb2YgcmFkaWFsIGV4cGxvc2lvbgorICAgICAqIEBwYXJhbSBzdHJl
bmd0aCB0aGUgZXhwbG9zaW9uIHN0cmVuZ3RoCisgICAgICogQHBhcmFtIGZhbGxvZmYgcG9zc2li
bGUgb3B0aW9uczogQ29uc3RhbnQgJiBMaW5lYXIuIERlZmF1bHRzIHRvIENvbnN0YW50CisgICAg
ICogQHJldHVybnMgQSBwaHlzaWNzIHJhZGlhbCBleHBsb3Npb24gZXZlbnQsIG9yIG51bGwKKyAg
ICAgKi8KKyAgICBQaHlzaWNzSGVscGVyLnByb3RvdHlwZS5hcHBseVJhZGlhbEV4cGxvc2lvbkZv
cmNlID0gZnVuY3Rpb24gKG9yaWdpbiwgcmFkaXVzT3JFdmVudE9wdGlvbnMsIHN0cmVuZ3RoLCBm
YWxsb2ZmKSB7CisgICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldh
cm4oJ1BoeXNpY3MgZW5naW5lIG5vdCBlbmFibGVkLiBQbGVhc2UgZW5hYmxlIHRoZSBwaHlzaWNz
IGJlZm9yZSB5b3UgY2FsbCB0aGUgUGh5c2ljc0hlbHBlci4nKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBpbXBvc3RvcnMgPSB0aGlzLl9waHlzaWNz
RW5naW5lLmdldEltcG9zdG9ycygpOworICAgICAgICBpZiAoaW1wb3N0b3JzLmxlbmd0aCA9PT0g
MCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5
cGVvZiByYWRpdXNPckV2ZW50T3B0aW9ucyA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgIHJh
ZGl1c09yRXZlbnRPcHRpb25zID0gbmV3IFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlv
bnMoKTsKKyAgICAgICAgICAgIHJhZGl1c09yRXZlbnRPcHRpb25zLnJhZGl1cyA9IHJhZGl1c09y
RXZlbnRPcHRpb25zOworICAgICAgICAgICAgcmFkaXVzT3JFdmVudE9wdGlvbnMuc3RyZW5ndGgg
PSBzdHJlbmd0aCB8fCByYWRpdXNPckV2ZW50T3B0aW9ucy5zdHJlbmd0aDsKKyAgICAgICAgICAg
IHJhZGl1c09yRXZlbnRPcHRpb25zLmZhbGxvZmYgPSBmYWxsb2ZmIHx8IHJhZGl1c09yRXZlbnRP
cHRpb25zLmZhbGxvZmY7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFBoeXNp
Y3NSYWRpYWxFeHBsb3Npb25FdmVudCh0aGlzLl9zY2VuZSwgcmFkaXVzT3JFdmVudE9wdGlvbnMp
OworICAgICAgICB2YXIgYWZmZWN0ZWRJbXBvc3RvcnNXaXRoRGF0YSA9IEFycmF5KCk7CisgICAg
ICAgIGltcG9zdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICAgICAg
dmFyIGltcG9zdG9ySGl0RGF0YSA9IGV2ZW50LmdldEltcG9zdG9ySGl0RGF0YShpbXBvc3Rvciwg
b3JpZ2luKTsKKyAgICAgICAgICAgIGlmICghaW1wb3N0b3JIaXREYXRhKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW1wb3N0b3IuYXBwbHlG
b3JjZShpbXBvc3RvckhpdERhdGEuZm9yY2UsIGltcG9zdG9ySGl0RGF0YS5jb250YWN0UG9pbnQp
OworICAgICAgICAgICAgYWZmZWN0ZWRJbXBvc3RvcnNXaXRoRGF0YS5wdXNoKHsKKyAgICAgICAg
ICAgICAgICBpbXBvc3RvcjogaW1wb3N0b3IsCisgICAgICAgICAgICAgICAgaGl0RGF0YTogaW1w
b3N0b3JIaXREYXRhLAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBldmVu
dC50cmlnZ2VyQWZmZWN0ZWRJbXBvc3RvcnNDYWxsYmFjayhhZmZlY3RlZEltcG9zdG9yc1dpdGhE
YXRhKTsKKyAgICAgICAgZXZlbnQuZGlzcG9zZShmYWxzZSk7CisgICAgICAgIHJldHVybiBldmVu
dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBncmF2aXRhdGlvbmFsIGZpZWxk
CisgICAgICogQHBhcmFtIG9yaWdpbiB0aGUgb3JpZ2luIG9mIHRoZSBleHBsb3Npb24KKyAgICAg
KiBAcGFyYW0gcmFkaXVzT3JFdmVudE9wdGlvbnMgdGhlIHJhZGl1cyBvciB0aGUgb3B0aW9ucyBv
ZiByYWRpYWwgZXhwbG9zaW9uCisgICAgICogQHBhcmFtIHN0cmVuZ3RoIHRoZSBleHBsb3Npb24g
c3RyZW5ndGgKKyAgICAgKiBAcGFyYW0gZmFsbG9mZiBwb3NzaWJsZSBvcHRpb25zOiBDb25zdGFu
dCAmIExpbmVhci4gRGVmYXVsdHMgdG8gQ29uc3RhbnQKKyAgICAgKiBAcmV0dXJucyBBIHBoeXNp
Y3MgZ3Jhdml0YXRpb25hbCBmaWVsZCBldmVudCwgb3IgbnVsbAorICAgICAqLworICAgIFBoeXNp
Y3NIZWxwZXIucHJvdG90eXBlLmdyYXZpdGF0aW9uYWxGaWVsZCA9IGZ1bmN0aW9uIChvcmlnaW4s
IHJhZGl1c09yRXZlbnRPcHRpb25zLCBzdHJlbmd0aCwgZmFsbG9mZikgeworICAgICAgICBpZiAo
IXRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCdQaHlzaWNzIGVuZ2luZSBub3Qg
ZW5hYmxlZC4gUGxlYXNlIGVuYWJsZSB0aGUgcGh5c2ljcyBiZWZvcmUgeW91IGNhbGwgdGhlIFBo
eXNpY3NIZWxwZXIuJyk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgaW1wb3N0b3JzID0gdGhpcy5fcGh5c2ljc0VuZ2luZS5nZXRJbXBvc3RvcnMoKTsK
KyAgICAgICAgaWYgKGltcG9zdG9ycy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2YgcmFkaXVzT3JFdmVudE9wdGlv
bnMgPT09ICdudW1iZXInKSB7CisgICAgICAgICAgICByYWRpdXNPckV2ZW50T3B0aW9ucyA9IG5l
dyBQaHlzaWNzUmFkaWFsRXhwbG9zaW9uRXZlbnRPcHRpb25zKCk7CisgICAgICAgICAgICByYWRp
dXNPckV2ZW50T3B0aW9ucy5yYWRpdXMgPSByYWRpdXNPckV2ZW50T3B0aW9uczsKKyAgICAgICAg
ICAgIHJhZGl1c09yRXZlbnRPcHRpb25zLnN0cmVuZ3RoID0gc3RyZW5ndGggfHwgcmFkaXVzT3JF
dmVudE9wdGlvbnMuc3RyZW5ndGg7CisgICAgICAgICAgICByYWRpdXNPckV2ZW50T3B0aW9ucy5m
YWxsb2ZmID0gZmFsbG9mZiB8fCByYWRpdXNPckV2ZW50T3B0aW9ucy5mYWxsb2ZmOworICAgICAg
ICB9CisgICAgICAgIHZhciBldmVudCA9IG5ldyBQaHlzaWNzR3Jhdml0YXRpb25hbEZpZWxkRXZl
bnQodGhpcywgdGhpcy5fc2NlbmUsIG9yaWdpbiwgcmFkaXVzT3JFdmVudE9wdGlvbnMpOworICAg
ICAgICBldmVudC5kaXNwb3NlKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgIH07
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHBoeXNpY3MgdXBkcmFmdCBldmVudAorICAgICAq
IEBwYXJhbSBvcmlnaW4gdGhlIG9yaWdpbiBvZiB0aGUgdXBkcmFmdAorICAgICAqIEBwYXJhbSBy
YWRpdXNPckV2ZW50T3B0aW9ucyB0aGUgcmFkaXVzIG9yIHRoZSBvcHRpb25zIG9mIHRoZSB1cGRy
YWZ0CisgICAgICogQHBhcmFtIHN0cmVuZ3RoIHRoZSBzdHJlbmd0aCBvZiB0aGUgdXBkcmFmdAor
ICAgICAqIEBwYXJhbSBoZWlnaHQgdGhlIGhlaWdodCBvZiB0aGUgdXBkcmFmdAorICAgICAqIEBw
YXJhbSB1cGRyYWZ0TW9kZSBwb3NzaWJsZSBvcHRpb25zOiBDZW50ZXIgJiBQZXJwZW5kaWN1bGFy
LiBEZWZhdWx0cyB0byBDZW50ZXIKKyAgICAgKiBAcmV0dXJucyBBIHBoeXNpY3MgdXBkcmFmdCBl
dmVudCwgb3IgbnVsbAorICAgICAqLworICAgIFBoeXNpY3NIZWxwZXIucHJvdG90eXBlLnVwZHJh
ZnQgPSBmdW5jdGlvbiAob3JpZ2luLCByYWRpdXNPckV2ZW50T3B0aW9ucywgc3RyZW5ndGgsIGhl
aWdodCwgdXBkcmFmdE1vZGUpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9waHlzaWNzRW5naW5lKSB7
CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TG9nZ2VyIl0uV2FybignUGh5c2ljcyBlbmdpbmUgbm90IGVuYWJsZWQuIFBsZWFzZSBlbmFibGUg
dGhlIHBoeXNpY3MgYmVmb3JlIHlvdSBjYWxsIHRoZSBQaHlzaWNzSGVscGVyLicpOworICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3BoeXNpY3NF
bmdpbmUuZ2V0SW1wb3N0b3JzKCkubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZW9mIHJhZGl1c09yRXZlbnRPcHRpb25z
ID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgcmFkaXVzT3JFdmVudE9wdGlvbnMgPSBuZXcg
UGh5c2ljc1VwZHJhZnRFdmVudE9wdGlvbnMoKTsKKyAgICAgICAgICAgIHJhZGl1c09yRXZlbnRP
cHRpb25zLnJhZGl1cyA9IHJhZGl1c09yRXZlbnRPcHRpb25zOworICAgICAgICAgICAgcmFkaXVz
T3JFdmVudE9wdGlvbnMuc3RyZW5ndGggPSBzdHJlbmd0aCB8fCByYWRpdXNPckV2ZW50T3B0aW9u
cy5zdHJlbmd0aDsKKyAgICAgICAgICAgIHJhZGl1c09yRXZlbnRPcHRpb25zLmhlaWdodCA9IGhl
aWdodCB8fCByYWRpdXNPckV2ZW50T3B0aW9ucy5oZWlnaHQ7CisgICAgICAgICAgICByYWRpdXNP
ckV2ZW50T3B0aW9ucy51cGRyYWZ0TW9kZSA9IHVwZHJhZnRNb2RlIHx8IHJhZGl1c09yRXZlbnRP
cHRpb25zLnVwZHJhZnRNb2RlOworICAgICAgICB9CisgICAgICAgIHZhciBldmVudCA9IG5ldyBQ
aHlzaWNzVXBkcmFmdEV2ZW50KHRoaXMuX3NjZW5lLCBvcmlnaW4sIHJhZGl1c09yRXZlbnRPcHRp
b25zKTsKKyAgICAgICAgZXZlbnQuZGlzcG9zZShmYWxzZSk7CisgICAgICAgIHJldHVybiBldmVu
dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBwaHlzaWNzIHZvcnRleCBldmVu
dAorICAgICAqIEBwYXJhbSBvcmlnaW4gdGhlIG9mIHRoZSB2b3J0ZXgKKyAgICAgKiBAcGFyYW0g
cmFkaXVzT3JFdmVudE9wdGlvbnMgdGhlIHJhZGl1cyBvciB0aGUgb3B0aW9ucyBvZiB0aGUgdm9y
dGV4CisgICAgICogQHBhcmFtIHN0cmVuZ3RoIHRoZSBzdHJlbmd0aCBvZiB0aGUgdm9ydGV4Cisg
ICAgICogQHBhcmFtIGhlaWdodCAgIHRoZSBoZWlnaHQgb2YgdGhlIHZvcnRleAorICAgICAqIEBy
ZXR1cm5zIGEgUGh5c2ljcyB2b3J0ZXggZXZlbnQsIG9yIG51bGwKKyAgICAgKiBBIHBoeXNpY3Mg
dm9ydGV4IGV2ZW50IG9yIG51bGwKKyAgICAgKi8KKyAgICBQaHlzaWNzSGVscGVyLnByb3RvdHlw
ZS52b3J0ZXggPSBmdW5jdGlvbiAob3JpZ2luLCByYWRpdXNPckV2ZW50T3B0aW9ucywgc3RyZW5n
dGgsIGhlaWdodCkgeworICAgICAgICBpZiAoIXRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAg
ICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIi
XS5XYXJuKCdQaHlzaWNzIGVuZ2luZSBub3QgZW5hYmxlZC4gUGxlYXNlIGVuYWJsZSB0aGUgcGh5
c2ljcyBiZWZvcmUgeW91IGNhbGwgdGhlIFBoeXNpY3NIZWxwZXIuJyk7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcGh5c2ljc0VuZ2luZS5n
ZXRJbXBvc3RvcnMoKS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2YgcmFkaXVzT3JFdmVudE9wdGlvbnMgPT09ICdu
dW1iZXInKSB7CisgICAgICAgICAgICByYWRpdXNPckV2ZW50T3B0aW9ucyA9IG5ldyBQaHlzaWNz
Vm9ydGV4RXZlbnRPcHRpb25zKCk7CisgICAgICAgICAgICByYWRpdXNPckV2ZW50T3B0aW9ucy5y
YWRpdXMgPSByYWRpdXNPckV2ZW50T3B0aW9uczsKKyAgICAgICAgICAgIHJhZGl1c09yRXZlbnRP
cHRpb25zLnN0cmVuZ3RoID0gc3RyZW5ndGggfHwgcmFkaXVzT3JFdmVudE9wdGlvbnMuc3RyZW5n
dGg7CisgICAgICAgICAgICByYWRpdXNPckV2ZW50T3B0aW9ucy5oZWlnaHQgPSBoZWlnaHQgfHwg
cmFkaXVzT3JFdmVudE9wdGlvbnMuaGVpZ2h0OworICAgICAgICB9CisgICAgICAgIHZhciBldmVu
dCA9IG5ldyBQaHlzaWNzVm9ydGV4RXZlbnQodGhpcy5fc2NlbmUsIG9yaWdpbiwgcmFkaXVzT3JF
dmVudE9wdGlvbnMpOworICAgICAgICBldmVudC5kaXNwb3NlKGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIGV2ZW50OworICAgIH07CisgICAgcmV0dXJuIFBoeXNpY3NIZWxwZXI7Cit9KCkpOworCisv
KioKKyAqIFJlcHJlc2VudHMgYSBwaHlzaWNzIHJhZGlhbCBleHBsb3Npb24gZXZlbnQKKyAqLwor
dmFyIFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyBhIHJhZGlhbCBleHBsb3Npb2luIGV2
ZW50CisgICAgICogQHBhcmFtIF9zY2VuZSBCYWJ5bG9uSlMgc2NlbmUKKyAgICAgKiBAcGFyYW0g
X29wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSB2b3J0ZXggZXZlbnQKKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBQaHlzaWNzUmFkaWFsRXhwbG9zaW9uRXZlbnQoX3NjZW5lLCBfb3B0aW9ucykgewor
ICAgICAgICB0aGlzLl9zY2VuZSA9IF9zY2VuZTsKKyAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9v
cHRpb25zOworICAgICAgICB0aGlzLl9kYXRhRmV0Y2hlZCA9IGZhbHNlOyAvLyBjaGVjayBpZiB0
aGUgZGF0YSBoYXMgYmVlbiBmZXRjaGVkLiBJZiBub3QsIGRvIGNsZWFudXAKKyAgICAgICAgdGhp
cy5fb3B0aW9ucyA9IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXNzaWdu
Il0oe30sIChuZXcgUGh5c2ljc1JhZGlhbEV4cGxvc2lvbkV2ZW50T3B0aW9ucygpKSwgdGhpcy5f
b3B0aW9ucyk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGRhdGEgcmVsYXRl
ZCB0byB0aGUgcmFkaWFsIGV4cGxvc2lvbiBldmVudCAoc3BoZXJlKS4KKyAgICAgKiBAcmV0dXJu
cyBUaGUgcmFkaWFsIGV4cGxvc2lvbiBldmVudCBkYXRhCisgICAgICovCisgICAgUGh5c2ljc1Jh
ZGlhbEV4cGxvc2lvbkV2ZW50LnByb3RvdHlwZS5nZXREYXRhID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB0aGlzLl9kYXRhRmV0Y2hlZCA9IHRydWU7CisgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICBzcGhlcmU6IHRoaXMuX3NwaGVyZSwKKyAgICAgICAgfTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJldHVybnMgdGhlIGZvcmNlIGFuZCBjb250YWN0IHBvaW50IG9mIHRoZSBpbXBvc3Rv
ciBvciBmYWxzZSwgaWYgdGhlIGltcG9zdG9yIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgZm9yY2Uv
aW1wdWxzZS4KKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgQSBwaHlzaWNzIGltcG9zdGVyCisgICAg
ICogQHBhcmFtIG9yaWdpbiB0aGUgb3JpZ2luIG9mIHRoZSBleHBsb3Npb24KKyAgICAgKiBAcmV0
dXJucyB7TnVsbGFibGU8UGh5c2ljc0hpdERhdGE+fSBBIHBoeXNpY3MgZm9yY2UgYW5kIGNvbnRh
Y3QgcG9pbnQsIG9yIG51bGwKKyAgICAgKi8KKyAgICBQaHlzaWNzUmFkaWFsRXhwbG9zaW9uRXZl
bnQucHJvdG90eXBlLmdldEltcG9zdG9ySGl0RGF0YSA9IGZ1bmN0aW9uIChpbXBvc3Rvciwgb3Jp
Z2luKSB7CisgICAgICAgIGlmIChpbXBvc3Rvci5tYXNzID09PSAwKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2ludGVyc2VjdHNXaXRo
U3BoZXJlKGltcG9zdG9yLCBvcmlnaW4sIHRoaXMuX29wdGlvbnMucmFkaXVzKSkgeworICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGltcG9zdG9yLm9iamVj
dC5nZXRDbGFzc05hbWUoKSAhPT0gJ01lc2gnICYmIGltcG9zdG9yLm9iamVjdC5nZXRDbGFzc05h
bWUoKSAhPT0gJ0luc3RhbmNlZE1lc2gnKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgaW1wb3N0b3JPYmplY3RDZW50ZXIgPSBpbXBvc3Rvci5nZXRP
YmplY3RDZW50ZXIoKTsKKyAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGltcG9zdG9yT2JqZWN0Q2Vu
dGVyLnN1YnRyYWN0KG9yaWdpbik7CisgICAgICAgIHZhciByYXkgPSBuZXcgX0N1bGxpbmdfcmF5
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlJheSJdKG9yaWdpbiwgZGlyZWN0aW9uLCB0
aGlzLl9vcHRpb25zLnJhZGl1cyk7CisgICAgICAgIHZhciBoaXQgPSByYXkuaW50ZXJzZWN0c01l
c2goaW1wb3N0b3Iub2JqZWN0KTsKKyAgICAgICAgdmFyIGNvbnRhY3RQb2ludCA9IGhpdC5waWNr
ZWRQb2ludDsKKyAgICAgICAgaWYgKCFjb250YWN0UG9pbnQpIHsKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBkaXN0YW5jZUZyb21PcmlnaW4gPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLkRp
c3RhbmNlKG9yaWdpbiwgY29udGFjdFBvaW50KTsKKyAgICAgICAgaWYgKGRpc3RhbmNlRnJvbU9y
aWdpbiA+IHRoaXMuX29wdGlvbnMucmFkaXVzKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICB2YXIgbXVsdGlwbGllciA9IHRoaXMuX29wdGlvbnMuZmFsbG9m
ZiA9PT0gUGh5c2ljc1JhZGlhbEltcHVsc2VGYWxsb2ZmLkNvbnN0YW50CisgICAgICAgICAgICA/
IHRoaXMuX29wdGlvbnMuc3RyZW5ndGgKKyAgICAgICAgICAgIDogdGhpcy5fb3B0aW9ucy5zdHJl
bmd0aCAqICgxIC0gKGRpc3RhbmNlRnJvbU9yaWdpbiAvIHRoaXMuX29wdGlvbnMucmFkaXVzKSk7
CisgICAgICAgIHZhciBmb3JjZSA9IGRpcmVjdGlvbi5tdWx0aXBseUJ5RmxvYXRzKG11bHRpcGxp
ZXIsIG11bHRpcGxpZXIsIG11bHRpcGxpZXIpOworICAgICAgICByZXR1cm4geyBmb3JjZTogZm9y
Y2UsIGNvbnRhY3RQb2ludDogY29udGFjdFBvaW50LCBkaXN0YW5jZUZyb21PcmlnaW46IGRpc3Rh
bmNlRnJvbU9yaWdpbiB9OworICAgIH07CisgICAgLyoqCisgICAgICogVHJpZ2dlcnMgYWZmZWN0
ZXJkIGltcG9zdG9ycyBjYWxsYmFja3MKKyAgICAgKiBAcGFyYW0gYWZmZWN0ZWRJbXBvc3RvcnNX
aXRoRGF0YSBkZWZpbmVzIHRoZSBsaXN0IG9mIGFmZmVjdGVkIGltcG9zdG9ycyAoaW5jbHVkaW5n
IGFzc29jaWF0ZWQgZGF0YSkKKyAgICAgKi8KKyAgICBQaHlzaWNzUmFkaWFsRXhwbG9zaW9uRXZl
bnQucHJvdG90eXBlLnRyaWdnZXJBZmZlY3RlZEltcG9zdG9yc0NhbGxiYWNrID0gZnVuY3Rpb24g
KGFmZmVjdGVkSW1wb3N0b3JzV2l0aERhdGEpIHsKKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMu
YWZmZWN0ZWRJbXBvc3RvcnNDYWxsYmFjaykgeworICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5h
ZmZlY3RlZEltcG9zdG9yc0NhbGxiYWNrKGFmZmVjdGVkSW1wb3N0b3JzV2l0aERhdGEpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgc3BoZXJlLgorICAg
ICAqIEBwYXJhbSBmb3JjZSBTcGVjaWZpZXMgaWYgdGhlIHNwaGVyZSBzaG91bGQgYmUgZGlzcG9z
ZWQgYnkgZm9yY2UKKyAgICAgKi8KKyAgICBQaHlzaWNzUmFkaWFsRXhwbG9zaW9uRXZlbnQucHJv
dG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZm9yY2UpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgaWYgKGZvcmNlID09PSB2b2lkIDApIHsgZm9yY2UgPSB0cnVlOyB9Cisg
ICAgICAgIGlmIChmb3JjZSkgeworICAgICAgICAgICAgdGhpcy5fc3BoZXJlLmRpc3Bvc2UoKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIGlmICghX3RoaXMuX2RhdGFGZXRjaGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgIF90aGlzLl9zcGhlcmUuZGlzcG9zZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioqIEhlbHBl
cnMgKioqLworICAgIFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudC5wcm90b3R5cGUuX3ByZXBh
cmVTcGhlcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fc3BoZXJlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9zcGhlcmUgPSBfTWVzaGVzX0J1aWxkZXJzX3NwaGVyZUJ1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU3BoZXJlQnVpbGRlciJdLkNyZWF0ZVNwaGVy
ZSgicmFkaWFsRXhwbG9zaW9uRXZlbnRTcGhlcmUiLCB0aGlzLl9vcHRpb25zLnNwaGVyZSwgdGhp
cy5fc2NlbmUpOworICAgICAgICAgICAgdGhpcy5fc3BoZXJlLmlzVmlzaWJsZSA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBQaHlzaWNzUmFkaWFsRXhwbG9zaW9uRXZlbnQucHJvdG90
eXBlLl9pbnRlcnNlY3RzV2l0aFNwaGVyZSA9IGZ1bmN0aW9uIChpbXBvc3Rvciwgb3JpZ2luLCBy
YWRpdXMpIHsKKyAgICAgICAgdmFyIGltcG9zdG9yT2JqZWN0ID0gaW1wb3N0b3Iub2JqZWN0Owor
ICAgICAgICB0aGlzLl9wcmVwYXJlU3BoZXJlKCk7CisgICAgICAgIHRoaXMuX3NwaGVyZS5wb3Np
dGlvbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5fc3BoZXJlLnNjYWxpbmcgPSBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXShyYWRp
dXMgKiAyLCByYWRpdXMgKiAyLCByYWRpdXMgKiAyKTsKKyAgICAgICAgdGhpcy5fc3BoZXJlLl91
cGRhdGVCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgdGhpcy5fc3BoZXJlLmNvbXB1dGVXb3JsZE1h
dHJpeCh0cnVlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NwaGVyZS5pbnRlcnNlY3RzTWVzaChp
bXBvc3Rvck9iamVjdCwgdHJ1ZSk7CisgICAgfTsKKyAgICByZXR1cm4gUGh5c2ljc1JhZGlhbEV4
cGxvc2lvbkV2ZW50OworfSgpKTsKKy8qKgorICogUmVwcmVzZW50cyBhIGdyYXZpdGF0aW9uYWwg
ZmllbGQgZXZlbnQKKyAqLwordmFyIFBoeXNpY3NHcmF2aXRhdGlvbmFsRmllbGRFdmVudCA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0
aGUgcGh5c2ljcyBncmF2aXRhdGlvbmFsIGZpZWxkIGV2ZW50CisgICAgICogQHBhcmFtIF9waHlz
aWNzSGVscGVyIEEgcGh5c2ljcyBoZWxwZXIKKyAgICAgKiBAcGFyYW0gX3NjZW5lIEJhYnlsb25K
UyBzY2VuZQorICAgICAqIEBwYXJhbSBfb3JpZ2luIFRoZSBvcmlnaW4gcG9zaXRpb24gb2YgdGhl
IGdyYXZpdGF0aW9uYWwgZmllbGQgZXZlbnQKKyAgICAgKiBAcGFyYW0gX29wdGlvbnMgVGhlIG9w
dGlvbnMgZm9yIHRoZSB2b3J0ZXggZXZlbnQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQaHlzaWNz
R3Jhdml0YXRpb25hbEZpZWxkRXZlbnQoX3BoeXNpY3NIZWxwZXIsIF9zY2VuZSwgX29yaWdpbiwg
X29wdGlvbnMpIHsKKyAgICAgICAgdGhpcy5fcGh5c2ljc0hlbHBlciA9IF9waHlzaWNzSGVscGVy
OworICAgICAgICB0aGlzLl9zY2VuZSA9IF9zY2VuZTsKKyAgICAgICAgdGhpcy5fb3JpZ2luID0g
X29yaWdpbjsKKyAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zOworICAgICAgICB0aGlz
Ll9kYXRhRmV0Y2hlZCA9IGZhbHNlOyAvLyBjaGVjayBpZiB0aGUgaGFzIGJlZW4gZmV0Y2hlZCB0
aGUgZGF0YS4gSWYgbm90LCBkbyBjbGVhbnVwCisgICAgICAgIHRoaXMuX29wdGlvbnMgPSB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fzc2lnbiJdKHt9LCAobmV3IFBoeXNp
Y3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnMoKSksIHRoaXMuX29wdGlvbnMpOworICAgICAg
ICB0aGlzLl90aWNrQ2FsbGJhY2sgPSB0aGlzLl90aWNrLmJpbmQodGhpcyk7CisgICAgICAgIHRo
aXMuX29wdGlvbnMuc3RyZW5ndGggPSB0aGlzLl9vcHRpb25zLnN0cmVuZ3RoICogLTE7CisgICAg
fQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGRhdGEgcmVsYXRlZCB0byB0aGUgZ3Jhdml0
YXRpb25hbCBmaWVsZCBldmVudCAoc3BoZXJlKS4KKyAgICAgKiBAcmV0dXJucyBBIGdyYXZpdGF0
aW9uYWwgZmllbGQgZXZlbnQKKyAgICAgKi8KKyAgICBQaHlzaWNzR3Jhdml0YXRpb25hbEZpZWxk
RXZlbnQucHJvdG90eXBlLmdldERhdGEgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2Rh
dGFGZXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHNwaGVyZTog
dGhpcy5fc3BoZXJlLAorICAgICAgICB9OworICAgIH07CisgICAgLyoqCisgICAgICogRW5hYmxl
cyB0aGUgZ3Jhdml0YXRpb25hbCBmaWVsZC4KKyAgICAgKi8KKyAgICBQaHlzaWNzR3Jhdml0YXRp
b25hbEZpZWxkRXZlbnQucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dGhpcy5fdGlja0NhbGxiYWNrLmNhbGwodGhpcyk7CisgICAgICAgIHRoaXMuX3NjZW5lLnJlZ2lz
dGVyQmVmb3JlUmVuZGVyKHRoaXMuX3RpY2tDYWxsYmFjayk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBEaXNhYmxlcyB0aGUgZ3Jhdml0YXRpb25hbCBmaWVsZC4KKyAgICAgKi8KKyAgICBQaHlz
aWNzR3Jhdml0YXRpb25hbEZpZWxkRXZlbnQucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRoaXMuX3NjZW5lLnVucmVnaXN0ZXJCZWZvcmVSZW5kZXIodGhpcy5fdGlj
a0NhbGxiYWNrKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBzcGhlcmUu
CisgICAgICogQHBhcmFtIGZvcmNlIFRoZSBmb3JjZSB0byBkaXNwb3NlIGZyb20gdGhlIGdyYXZp
dGF0aW9uYWwgZmllbGQgZXZlbnQKKyAgICAgKi8KKyAgICBQaHlzaWNzR3Jhdml0YXRpb25hbEZp
ZWxkRXZlbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZm9yY2UpIHsKKyAgICAgICAg
dmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKGZvcmNlID09PSB2b2lkIDApIHsgZm9yY2Ug
PSB0cnVlOyB9CisgICAgICAgIGlmIChmb3JjZSkgeworICAgICAgICAgICAgdGhpcy5fc3BoZXJl
LmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGlmICghX3RoaXMuX2RhdGFGZXRj
aGVkKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zcGhlcmUuZGlzcG9zZSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgfTsKKyAg
ICBQaHlzaWNzR3Jhdml0YXRpb25hbEZpZWxkRXZlbnQucHJvdG90eXBlLl90aWNrID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAvLyBTaW5jZSB0aGUgcGFyYW1zIHdvbid0IGNoYW5nZSwgd2UgZmV0
Y2ggdGhlIGV2ZW50IG9ubHkgb25jZQorICAgICAgICBpZiAodGhpcy5fc3BoZXJlKSB7CisgICAg
ICAgICAgICB0aGlzLl9waHlzaWNzSGVscGVyLmFwcGx5UmFkaWFsRXhwbG9zaW9uRm9yY2UodGhp
cy5fb3JpZ2luLCB0aGlzLl9vcHRpb25zKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHZhciByYWRpYWxFeHBsb3Npb25FdmVudCA9IHRoaXMuX3BoeXNpY3NIZWxwZXIu
YXBwbHlSYWRpYWxFeHBsb3Npb25Gb3JjZSh0aGlzLl9vcmlnaW4sIHRoaXMuX29wdGlvbnMpOwor
ICAgICAgICAgICAgaWYgKHJhZGlhbEV4cGxvc2lvbkV2ZW50KSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fc3BoZXJlID0gcmFkaWFsRXhwbG9zaW9uRXZlbnQuZ2V0RGF0YSgpLnNwaGVyZS5jbG9u
ZSgncmFkaWFsRXhwbG9zaW9uRXZlbnRTcGhlcmVDbG9uZScpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gUGh5c2ljc0dyYXZpdGF0aW9uYWxGaWVsZEV2ZW50
OworfSgpKTsKKy8qKgorICogUmVwcmVzZW50cyBhIHBoeXNpY3MgdXBkcmFmdCBldmVudAorICov
Cit2YXIgUGh5c2ljc1VwZHJhZnRFdmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUgcGh5c2ljcyB1cGRyYWZ0IGV2ZW50Cisg
ICAgICogQHBhcmFtIF9zY2VuZSBCYWJ5bG9uSlMgc2NlbmUKKyAgICAgKiBAcGFyYW0gX29yaWdp
biBUaGUgb3JpZ2luIHBvc2l0aW9uIG9mIHRoZSB1cGRyYWZ0CisgICAgICogQHBhcmFtIF9vcHRp
b25zIFRoZSBvcHRpb25zIGZvciB0aGUgdXBkcmFmdCBldmVudAorICAgICAqLworICAgIGZ1bmN0
aW9uIFBoeXNpY3NVcGRyYWZ0RXZlbnQoX3NjZW5lLCBfb3JpZ2luLCBfb3B0aW9ucykgeworICAg
ICAgICB0aGlzLl9zY2VuZSA9IF9zY2VuZTsKKyAgICAgICAgdGhpcy5fb3JpZ2luID0gX29yaWdp
bjsKKyAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zOworICAgICAgICB0aGlzLl9vcmln
aW5Ub3AgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
VmVjdG9yMyJdLlplcm8oKTsgLy8gdGhlIG1vc3QgdXBwZXIgcGFydCBvZiB0aGUgY3lsaW5kZXIK
KyAgICAgICAgdGhpcy5fb3JpZ2luRGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7IC8vIHVzZWQgaWYgdGhl
IHVwZHJhZnRNb2RlIGlzIHBlcnBlbmRpY3VsYXIKKyAgICAgICAgdGhpcy5fY3lsaW5kZXJQb3Np
dGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJW
ZWN0b3IzIl0uWmVybygpOyAvLyB0byBrZWVwIHRoZSBjeWxpbmRlcnMgcG9zaXRpb24sIGJlY2F1
c2Ugbm9ybWFsbHkgdGhlIG9yaWdpbiBpcyBpbiB0aGUgY2VudGVyIGFuZCBub3Qgb24gdGhlIGJv
dHRvbQorICAgICAgICB0aGlzLl9kYXRhRmV0Y2hlZCA9IGZhbHNlOyAvLyBjaGVjayBpZiB0aGUg
aGFzIGJlZW4gZmV0Y2hlZCB0aGUgZGF0YS4gSWYgbm90LCBkbyBjbGVhbnVwCisgICAgICAgIHRo
aXMuX3BoeXNpY3NFbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRQaHlzaWNzRW5naW5lKCk7CisgICAg
ICAgIHRoaXMuX29wdGlvbnMgPSB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2Fzc2lnbiJdKHt9LCAobmV3IFBoeXNpY3NVcGRyYWZ0RXZlbnRPcHRpb25zKCkpLCB0aGlzLl9v
cHRpb25zKTsKKyAgICAgICAgdGhpcy5fb3JpZ2luLmFkZFRvUmVmKG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKDAsIHRoaXMuX29w
dGlvbnMuaGVpZ2h0IC8gMiwgMCksIHRoaXMuX2N5bGluZGVyUG9zaXRpb24pOworICAgICAgICB0
aGlzLl9vcmlnaW4uYWRkVG9SZWYobmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0oMCwgdGhpcy5fb3B0aW9ucy5oZWlnaHQsIDApLCB0
aGlzLl9vcmlnaW5Ub3ApOworICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy51cGRyYWZ0TW9kZSA9
PT0gUGh5c2ljc1VwZHJhZnRNb2RlLlBlcnBlbmRpY3VsYXIpIHsKKyAgICAgICAgICAgIHRoaXMu
X29yaWdpbkRpcmVjdGlvbiA9IHRoaXMuX29yaWdpbi5zdWJ0cmFjdCh0aGlzLl9vcmlnaW5Ub3Ap
Lm5vcm1hbGl6ZSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3RpY2tDYWxsYmFjayA9IHRo
aXMuX3RpY2suYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5fcHJlcGFyZUN5bGluZGVyKCk7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGRhdGEgcmVsYXRlZCB0byB0aGUgdXBk
cmFmdCBldmVudCAoY3lsaW5kZXIpLgorICAgICAqIEByZXR1cm5zIEEgcGh5c2ljcyB1cGRyYWZ0
IGV2ZW50CisgICAgICovCisgICAgUGh5c2ljc1VwZHJhZnRFdmVudC5wcm90b3R5cGUuZ2V0RGF0
YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fZGF0YUZldGNoZWQgPSB0cnVlOworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgY3lsaW5kZXI6IHRoaXMuX2N5bGluZGVyLAorICAg
ICAgICB9OworICAgIH07CisgICAgLyoqCisgICAgICogRW5hYmxlcyB0aGUgdXBkcmFmdC4KKyAg
ICAgKi8KKyAgICBQaHlzaWNzVXBkcmFmdEV2ZW50LnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRoaXMuX3RpY2tDYWxsYmFjay5jYWxsKHRoaXMpOworICAgICAgICB0
aGlzLl9zY2VuZS5yZWdpc3RlckJlZm9yZVJlbmRlcih0aGlzLl90aWNrQ2FsbGJhY2spOworICAg
IH07CisgICAgLyoqCisgICAgICogRGlzYWJsZXMgdGhlIHVwZHJhZnQuCisgICAgICovCisgICAg
UGh5c2ljc1VwZHJhZnRFdmVudC5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5fc2NlbmUudW5yZWdpc3RlckJlZm9yZVJlbmRlcih0aGlzLl90aWNrQ2FsbGJh
Y2spOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhlIGN5bGluZGVyLgorICAg
ICAqIEBwYXJhbSBmb3JjZSBTcGVjaWZpZXMgaWYgdGhlIHVwZHJhZnQgc2hvdWxkIGJlIGRpc3Bv
c2VkIGJ5IGZvcmNlCisgICAgICovCisgICAgUGh5c2ljc1VwZHJhZnRFdmVudC5wcm90b3R5cGUu
ZGlzcG9zZSA9IGZ1bmN0aW9uIChmb3JjZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICBpZiAoZm9yY2UgPT09IHZvaWQgMCkgeyBmb3JjZSA9IHRydWU7IH0KKyAgICAgICAg
aWYgKCF0aGlzLl9jeWxpbmRlcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmb3JjZSkgeworICAgICAgICAgICAgdGhpcy5fY3lsaW5kZXIuZGlzcG9zZSgp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2V0VGltZW91dChmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5fZGF0YUZldGNoZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgX3RoaXMuX2N5bGluZGVyLmRpc3Bvc2UoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAgIH07CisgICAgUGh5c2lj
c1VwZHJhZnRFdmVudC5wcm90b3R5cGUuZ2V0SW1wb3N0b3JIaXREYXRhID0gZnVuY3Rpb24gKGlt
cG9zdG9yKSB7CisgICAgICAgIGlmIChpbXBvc3Rvci5tYXNzID09PSAwKSB7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2ludGVyc2VjdHNX
aXRoQ3lsaW5kZXIoaW1wb3N0b3IpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgaW1wb3N0b3JPYmplY3RDZW50ZXIgPSBpbXBvc3Rvci5nZXRPYmpl
Y3RDZW50ZXIoKTsKKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMudXBkcmFmdE1vZGUgPT09IFBo
eXNpY3NVcGRyYWZ0TW9kZS5QZXJwZW5kaWN1bGFyKSB7CisgICAgICAgICAgICB2YXIgZGlyZWN0
aW9uID0gdGhpcy5fb3JpZ2luRGlyZWN0aW9uOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGltcG9zdG9yT2JqZWN0Q2VudGVyLnN1YnRyYWN0
KHRoaXMuX29yaWdpblRvcCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRpc3RhbmNlRnJvbU9y
aWdpbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJW
ZWN0b3IzIl0uRGlzdGFuY2UodGhpcy5fb3JpZ2luLCBpbXBvc3Rvck9iamVjdENlbnRlcik7Cisg
ICAgICAgIHZhciBtdWx0aXBsaWVyID0gdGhpcy5fb3B0aW9ucy5zdHJlbmd0aCAqIC0xOworICAg
ICAgICB2YXIgZm9yY2UgPSBkaXJlY3Rpb24ubXVsdGlwbHlCeUZsb2F0cyhtdWx0aXBsaWVyLCBt
dWx0aXBsaWVyLCBtdWx0aXBsaWVyKTsKKyAgICAgICAgcmV0dXJuIHsgZm9yY2U6IGZvcmNlLCBj
b250YWN0UG9pbnQ6IGltcG9zdG9yT2JqZWN0Q2VudGVyLCBkaXN0YW5jZUZyb21PcmlnaW46IGRp
c3RhbmNlRnJvbU9yaWdpbiB9OworICAgIH07CisgICAgUGh5c2ljc1VwZHJhZnRFdmVudC5wcm90
b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0SW1wb3N0b3JzKCkuZm9yRWFjaChmdW5jdGlv
biAoaW1wb3N0b3IpIHsKKyAgICAgICAgICAgIHZhciBpbXBvc3RvckhpdERhdGEgPSBfdGhpcy5n
ZXRJbXBvc3RvckhpdERhdGEoaW1wb3N0b3IpOworICAgICAgICAgICAgaWYgKCFpbXBvc3Rvckhp
dERhdGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpbXBvc3Rvci5hcHBseUZvcmNlKGltcG9zdG9ySGl0RGF0YS5mb3JjZSwgaW1wb3N0b3JI
aXREYXRhLmNvbnRhY3RQb2ludCk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqKiBIZWxw
ZXJzICoqKi8KKyAgICBQaHlzaWNzVXBkcmFmdEV2ZW50LnByb3RvdHlwZS5fcHJlcGFyZUN5bGlu
ZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX2N5bGluZGVyKSB7CisgICAg
ICAgICAgICB0aGlzLl9jeWxpbmRlciA9IF9NZXNoZXNfQnVpbGRlcnNfY3lsaW5kZXJCdWlsZGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkN5bGluZGVyQnVpbGRlciJdLkNyZWF0ZUN5
bGluZGVyKCJ1cGRyYWZ0RXZlbnRDeWxpbmRlciIsIHsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6
IHRoaXMuX29wdGlvbnMuaGVpZ2h0LAorICAgICAgICAgICAgICAgIGRpYW1ldGVyOiB0aGlzLl9v
cHRpb25zLnJhZGl1cyAqIDIsCisgICAgICAgICAgICB9LCB0aGlzLl9zY2VuZSk7CisgICAgICAg
ICAgICB0aGlzLl9jeWxpbmRlci5pc1Zpc2libGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07
CisgICAgUGh5c2ljc1VwZHJhZnRFdmVudC5wcm90b3R5cGUuX2ludGVyc2VjdHNXaXRoQ3lsaW5k
ZXIgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgdmFyIGltcG9zdG9yT2JqZWN0ID0g
aW1wb3N0b3Iub2JqZWN0OworICAgICAgICB0aGlzLl9jeWxpbmRlci5wb3NpdGlvbiA9IHRoaXMu
X2N5bGluZGVyUG9zaXRpb247CisgICAgICAgIHJldHVybiB0aGlzLl9jeWxpbmRlci5pbnRlcnNl
Y3RzTWVzaChpbXBvc3Rvck9iamVjdCwgdHJ1ZSk7CisgICAgfTsKKyAgICByZXR1cm4gUGh5c2lj
c1VwZHJhZnRFdmVudDsKK30oKSk7CisvKioKKyAqIFJlcHJlc2VudHMgYSBwaHlzaWNzIHZvcnRl
eCBldmVudAorICovCit2YXIgUGh5c2ljc1ZvcnRleEV2ZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBwaHlzaWNzIHZvcnRl
eCBldmVudAorICAgICAqIEBwYXJhbSBfc2NlbmUgVGhlIEJhYnlsb25KUyBzY2VuZQorICAgICAq
IEBwYXJhbSBfb3JpZ2luIFRoZSBvcmlnaW4gcG9zaXRpb24gb2YgdGhlIHZvcnRleAorICAgICAq
IEBwYXJhbSBfb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIHZvcnRleCBldmVudAorICAgICAq
LworICAgIGZ1bmN0aW9uIFBoeXNpY3NWb3J0ZXhFdmVudChfc2NlbmUsIF9vcmlnaW4sIF9vcHRp
b25zKSB7CisgICAgICAgIHRoaXMuX3NjZW5lID0gX3NjZW5lOworICAgICAgICB0aGlzLl9vcmln
aW4gPSBfb3JpZ2luOworICAgICAgICB0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7CisgICAgICAg
IHRoaXMuX29yaWdpblRvcCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpOyAvLyB0aGUgbW9zdCB1cHBlciBwYXJ0IG9mIHRo
ZSBjeWxpbmRlcgorICAgICAgICB0aGlzLl9jeWxpbmRlclBvc2l0aW9uID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7IC8v
IHRvIGtlZXAgdGhlIGN5bGluZGVycyBwb3NpdGlvbiwgYmVjYXVzZSBub3JtYWxseSB0aGUgb3Jp
Z2luIGlzIGluIHRoZSBjZW50ZXIgYW5kIG5vdCBvbiB0aGUgYm90dG9tCisgICAgICAgIHRoaXMu
X2RhdGFGZXRjaGVkID0gZmFsc2U7IC8vIGNoZWNrIGlmIHRoZSBoYXMgYmVlbiBmZXRjaGVkIHRo
ZSBkYXRhLiBJZiBub3QsIGRvIGNsZWFudXAKKyAgICAgICAgdGhpcy5fcGh5c2ljc0VuZ2luZSA9
IHRoaXMuX3NjZW5lLmdldFBoeXNpY3NFbmdpbmUoKTsKKyAgICAgICAgdGhpcy5fb3B0aW9ucyA9
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXNzaWduIl0oe30sIChuZXcg
UGh5c2ljc1ZvcnRleEV2ZW50T3B0aW9ucygpKSwgdGhpcy5fb3B0aW9ucyk7CisgICAgICAgIHRo
aXMuX29yaWdpbi5hZGRUb1JlZihuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgwLCB0aGlzLl9vcHRpb25zLmhlaWdodCAvIDIsIDAp
LCB0aGlzLl9jeWxpbmRlclBvc2l0aW9uKTsKKyAgICAgICAgdGhpcy5fb3JpZ2luLmFkZFRvUmVm
KG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVj
dG9yMyJdKDAsIHRoaXMuX29wdGlvbnMuaGVpZ2h0LCAwKSwgdGhpcy5fb3JpZ2luVG9wKTsKKyAg
ICAgICAgdGhpcy5fdGlja0NhbGxiYWNrID0gdGhpcy5fdGljay5iaW5kKHRoaXMpOworICAgICAg
ICB0aGlzLl9wcmVwYXJlQ3lsaW5kZXIoKTsKKyAgICB9CisgICAgLyoqCisgICAgICogUmV0dXJu
cyB0aGUgZGF0YSByZWxhdGVkIHRvIHRoZSB2b3J0ZXggZXZlbnQgKGN5bGluZGVyKS4KKyAgICAg
KiBAcmV0dXJucyBUaGUgcGh5c2ljcyB2b3J0ZXggZXZlbnQgZGF0YQorICAgICAqLworICAgIFBo
eXNpY3NWb3J0ZXhFdmVudC5wcm90b3R5cGUuZ2V0RGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdGhpcy5fZGF0YUZldGNoZWQgPSB0cnVlOworICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgY3lsaW5kZXI6IHRoaXMuX2N5bGluZGVyLAorICAgICAgICB9OworICAgIH07CisgICAgLyoq
CisgICAgICogRW5hYmxlcyB0aGUgdm9ydGV4LgorICAgICAqLworICAgIFBoeXNpY3NWb3J0ZXhF
dmVudC5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl90aWNr
Q2FsbGJhY2suY2FsbCh0aGlzKTsKKyAgICAgICAgdGhpcy5fc2NlbmUucmVnaXN0ZXJCZWZvcmVS
ZW5kZXIodGhpcy5fdGlja0NhbGxiYWNrKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc2Fi
bGVzIHRoZSBjb3J0ZXguCisgICAgICovCisgICAgUGh5c2ljc1ZvcnRleEV2ZW50LnByb3RvdHlw
ZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9zY2VuZS51bnJlZ2lzdGVy
QmVmb3JlUmVuZGVyKHRoaXMuX3RpY2tDYWxsYmFjayk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBEaXNwb3NlcyB0aGUgc3BoZXJlLgorICAgICAqIEBwYXJhbSBmb3JjZQorICAgICAqLworICAg
IFBoeXNpY3NWb3J0ZXhFdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChmb3JjZSkg
eworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoZm9yY2UgPT09IHZvaWQg
MCkgeyBmb3JjZSA9IHRydWU7IH0KKyAgICAgICAgaWYgKGZvcmNlKSB7CisgICAgICAgICAgICB0
aGlzLl9jeWxpbmRlci5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIV90
aGlzLl9kYXRhRmV0Y2hlZCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY3lsaW5kZXIu
ZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIDApOworICAgICAg
ICB9CisgICAgfTsKKyAgICBQaHlzaWNzVm9ydGV4RXZlbnQucHJvdG90eXBlLmdldEltcG9zdG9y
SGl0RGF0YSA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBpZiAoaW1wb3N0b3IubWFz
cyA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCF0aGlzLl9pbnRlcnNlY3RzV2l0aEN5bGluZGVyKGltcG9zdG9yKSkgeworICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGltcG9zdG9yLm9iamVjdC5n
ZXRDbGFzc05hbWUoKSAhPT0gJ01lc2gnICYmIGltcG9zdG9yLm9iamVjdC5nZXRDbGFzc05hbWUo
KSAhPT0gJ0luc3RhbmNlZE1lc2gnKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgaW1wb3N0b3JPYmplY3RDZW50ZXIgPSBpbXBvc3Rvci5nZXRPYmpl
Y3RDZW50ZXIoKTsKKyAgICAgICAgdmFyIG9yaWdpbk9uUGxhbmUgPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSh0aGlzLl9vcmln
aW4ueCwgaW1wb3N0b3JPYmplY3RDZW50ZXIueSwgdGhpcy5fb3JpZ2luLnopOyAvLyB0aGUgZGlz
dGFuY2UgdG8gdGhlIG9yaWdpbiBhcyBpZiBib3RoIG9iamVjdHMgd2VyZSBvbiBhIHBsYW5lIChZ
LWF4aXMpCisgICAgICAgIHZhciBvcmlnaW5Ub0ltcG9zdG9yRGlyZWN0aW9uID0gaW1wb3N0b3JP
YmplY3RDZW50ZXIuc3VidHJhY3Qob3JpZ2luT25QbGFuZSk7CisgICAgICAgIHZhciByYXkgPSBu
ZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlJheSJdKG9yaWdp
bk9uUGxhbmUsIG9yaWdpblRvSW1wb3N0b3JEaXJlY3Rpb24sIHRoaXMuX29wdGlvbnMucmFkaXVz
KTsKKyAgICAgICAgdmFyIGhpdCA9IHJheS5pbnRlcnNlY3RzTWVzaChpbXBvc3Rvci5vYmplY3Qp
OworICAgICAgICB2YXIgY29udGFjdFBvaW50ID0gaGl0LnBpY2tlZFBvaW50OworICAgICAgICBp
ZiAoIWNvbnRhY3RQb2ludCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIGFic29sdXRlRGlzdGFuY2VGcm9tT3JpZ2luID0gaGl0LmRpc3RhbmNlIC8g
dGhpcy5fb3B0aW9ucy5yYWRpdXM7CisgICAgICAgIHZhciBkaXJlY3Rpb25Ub09yaWdpbiA9IGNv
bnRhY3RQb2ludC5ub3JtYWxpemUoKTsKKyAgICAgICAgaWYgKGFic29sdXRlRGlzdGFuY2VGcm9t
T3JpZ2luID4gdGhpcy5fb3B0aW9ucy5jZW50cmlwZXRhbEZvcmNlVGhyZXNob2xkKSB7CisgICAg
ICAgICAgICBkaXJlY3Rpb25Ub09yaWdpbiA9IGRpcmVjdGlvblRvT3JpZ2luLm5lZ2F0ZSgpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChhYnNvbHV0ZURpc3RhbmNlRnJvbU9yaWdpbiA+IHRoaXMu
X29wdGlvbnMuY2VudHJpcGV0YWxGb3JjZVRocmVzaG9sZCkgeworICAgICAgICAgICAgdmFyIGZv
cmNlWCA9IGRpcmVjdGlvblRvT3JpZ2luLnggKiB0aGlzLl9vcHRpb25zLmNlbnRyaXBldGFsRm9y
Y2VNdWx0aXBsaWVyOworICAgICAgICAgICAgdmFyIGZvcmNlWSA9IGRpcmVjdGlvblRvT3JpZ2lu
LnkgKiB0aGlzLl9vcHRpb25zLnVwZHJhZnRGb3JjZU11bHRpcGxpZXI7CisgICAgICAgICAgICB2
YXIgZm9yY2VaID0gZGlyZWN0aW9uVG9PcmlnaW4ueiAqIHRoaXMuX29wdGlvbnMuY2VudHJpcGV0
YWxGb3JjZU11bHRpcGxpZXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICB2YXIgcGVycGVuZGljdWxhckRpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uQ3Jvc3Mob3JpZ2luT25QbGFuZSwgaW1w
b3N0b3JPYmplY3RDZW50ZXIpLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgdmFyIGZvcmNlWCA9
IChwZXJwZW5kaWN1bGFyRGlyZWN0aW9uLnggKyBkaXJlY3Rpb25Ub09yaWdpbi54KSAqIHRoaXMu
X29wdGlvbnMuY2VudHJpZnVnYWxGb3JjZU11bHRpcGxpZXI7CisgICAgICAgICAgICB2YXIgZm9y
Y2VZID0gdGhpcy5fb3JpZ2luVG9wLnkgKiB0aGlzLl9vcHRpb25zLnVwZHJhZnRGb3JjZU11bHRp
cGxpZXI7CisgICAgICAgICAgICB2YXIgZm9yY2VaID0gKHBlcnBlbmRpY3VsYXJEaXJlY3Rpb24u
eiArIGRpcmVjdGlvblRvT3JpZ2luLnopICogdGhpcy5fb3B0aW9ucy5jZW50cmlmdWdhbEZvcmNl
TXVsdGlwbGllcjsKKyAgICAgICAgfQorICAgICAgICB2YXIgZm9yY2UgPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXShmb3JjZVgs
IGZvcmNlWSwgZm9yY2VaKTsKKyAgICAgICAgZm9yY2UgPSBmb3JjZS5tdWx0aXBseUJ5RmxvYXRz
KHRoaXMuX29wdGlvbnMuc3RyZW5ndGgsIHRoaXMuX29wdGlvbnMuc3RyZW5ndGgsIHRoaXMuX29w
dGlvbnMuc3RyZW5ndGgpOworICAgICAgICByZXR1cm4geyBmb3JjZTogZm9yY2UsIGNvbnRhY3RQ
b2ludDogaW1wb3N0b3JPYmplY3RDZW50ZXIsIGRpc3RhbmNlRnJvbU9yaWdpbjogYWJzb2x1dGVE
aXN0YW5jZUZyb21PcmlnaW4gfTsKKyAgICB9OworICAgIFBoeXNpY3NWb3J0ZXhFdmVudC5wcm90
b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0SW1wb3N0b3JzKCkuZm9yRWFjaChmdW5jdGlv
biAoaW1wb3N0b3IpIHsKKyAgICAgICAgICAgIHZhciBpbXBvc3RvckhpdERhdGEgPSBfdGhpcy5n
ZXRJbXBvc3RvckhpdERhdGEoaW1wb3N0b3IpOworICAgICAgICAgICAgaWYgKCFpbXBvc3Rvckhp
dERhdGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpbXBvc3Rvci5hcHBseUZvcmNlKGltcG9zdG9ySGl0RGF0YS5mb3JjZSwgaW1wb3N0b3JI
aXREYXRhLmNvbnRhY3RQb2ludCk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqKiBIZWxw
ZXJzICoqKi8KKyAgICBQaHlzaWNzVm9ydGV4RXZlbnQucHJvdG90eXBlLl9wcmVwYXJlQ3lsaW5k
ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fY3lsaW5kZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2N5bGluZGVyID0gX01lc2hlc19CdWlsZGVyc19jeWxpbmRlckJ1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ3lsaW5kZXJCdWlsZGVyIl0uQ3JlYXRlQ3ls
aW5kZXIoInZvcnRleEV2ZW50Q3lsaW5kZXIiLCB7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiB0
aGlzLl9vcHRpb25zLmhlaWdodCwKKyAgICAgICAgICAgICAgICBkaWFtZXRlcjogdGhpcy5fb3B0
aW9ucy5yYWRpdXMgKiAyLAorICAgICAgICAgICAgfSwgdGhpcy5fc2NlbmUpOworICAgICAgICAg
ICAgdGhpcy5fY3lsaW5kZXIuaXNWaXNpYmxlID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIFBoeXNpY3NWb3J0ZXhFdmVudC5wcm90b3R5cGUuX2ludGVyc2VjdHNXaXRoQ3lsaW5kZXIg
PSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgdmFyIGltcG9zdG9yT2JqZWN0ID0gaW1w
b3N0b3Iub2JqZWN0OworICAgICAgICB0aGlzLl9jeWxpbmRlci5wb3NpdGlvbiA9IHRoaXMuX2N5
bGluZGVyUG9zaXRpb247CisgICAgICAgIHJldHVybiB0aGlzLl9jeWxpbmRlci5pbnRlcnNlY3Rz
TWVzaChpbXBvc3Rvck9iamVjdCwgdHJ1ZSk7CisgICAgfTsKKyAgICByZXR1cm4gUGh5c2ljc1Zv
cnRleEV2ZW50OworfSgpKTsKKy8qKgorICogT3B0aW9ucyBmb3QgdGhlIHJhZGlhbCBleHBsb3Np
b24gZXZlbnQKKyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vdXNpbmdf
dGhlX3BoeXNpY3NfZW5naW5lI2Z1cnRoZXItZnVuY3Rpb25hbGl0eS1vZi10aGUtaW1wb3N0b3It
Y2xhc3MKKyAqLwordmFyIFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnMgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gUGh5c2ljc1JhZGlhbEV4cGxv
c2lvbkV2ZW50T3B0aW9ucygpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSByYWRpdXMg
b2YgdGhlIHNwaGVyZSBmb3IgdGhlIHJhZGlhbCBleHBsb3Npb24uCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLnJhZGl1cyA9IDU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc3RyZW50
aCBvZiB0aGUgZXhwbG9zaW9uLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zdHJlbmd0aCA9
IDEwOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHN0cmVuZ2h0IG9mIHRoZSBmb3JjZSBp
biBjb3JyZXNwb25kZW5jZSB0byB0aGUgZGlzdGFuY2Ugb2YgdGhlIGFmZmVjdGVkIG9iamVjdAor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5mYWxsb2ZmID0gUGh5c2ljc1JhZGlhbEltcHVsc2VG
YWxsb2ZmLkNvbnN0YW50OworICAgICAgICAvKioKKyAgICAgICAgICogU3BoZXJlIG9wdGlvbnMg
Zm9yIHRoZSByYWRpYWwgZXhwbG9zaW9uLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zcGhl
cmUgPSB7IHNlZ21lbnRzOiAzMiwgZGlhbWV0ZXI6IDEgfTsKKyAgICB9CisgICAgcmV0dXJuIFBo
eXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnM7Cit9KCkpOworCisvKioKKyAqIE9wdGlv
bnMgZm90IHRoZSB1cGRyYWZ0IGV2ZW50CisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL3VzaW5nX3RoZV9waHlzaWNzX2VuZ2luZSNmdXJ0aGVyLWZ1bmN0aW9uYWxpdHkt
b2YtdGhlLWltcG9zdG9yLWNsYXNzCisgKi8KK3ZhciBQaHlzaWNzVXBkcmFmdEV2ZW50T3B0aW9u
cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQaHlzaWNzVXBk
cmFmdEV2ZW50T3B0aW9ucygpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSByYWRpdXMg
b2YgdGhlIGN5bGluZGVyIGZvciB0aGUgdm9ydGV4CisgICAgICAgICAqLworICAgICAgICB0aGlz
LnJhZGl1cyA9IDU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc3RyZW50aCBvZiB0aGUg
dXBkcmFmdC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc3RyZW5ndGggPSAxMDsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGN5bGluZGVyIGZvciB0aGUgdXBk
cmFmdC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaGVpZ2h0ID0gMTA7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBUaGUgbW9kZSBmb3IgdGhlIHRoZSB1cGRyYWZ0LgorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy51cGRyYWZ0TW9kZSA9IFBoeXNpY3NVcGRyYWZ0TW9kZS5DZW50ZXI7Cisg
ICAgfQorICAgIHJldHVybiBQaHlzaWNzVXBkcmFmdEV2ZW50T3B0aW9uczsKK30oKSk7CisKKy8q
KgorICogT3B0aW9ucyBmb3QgdGhlIHZvcnRleCBldmVudAorICogQHNlZSBodHRwczovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by91c2luZ190aGVfcGh5c2ljc19lbmdpbmUjZnVydGhlci1mdW5j
dGlvbmFsaXR5LW9mLXRoZS1pbXBvc3Rvci1jbGFzcworICovCit2YXIgUGh5c2ljc1ZvcnRleEV2
ZW50T3B0aW9ucyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQ
aHlzaWNzVm9ydGV4RXZlbnRPcHRpb25zKCkgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhl
IHJhZGl1cyBvZiB0aGUgY3lsaW5kZXIgZm9yIHRoZSB2b3J0ZXgKKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMucmFkaXVzID0gNTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBzdHJlbnRo
IG9mIHRoZSB2b3J0ZXguCisgICAgICAgICAqLworICAgICAgICB0aGlzLnN0cmVuZ3RoID0gMTA7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjeWxpbmRlciBmb3Ig
dGhlIHZvcnRleC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaGVpZ2h0ID0gMTA7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBBdCB3aGljaCBkaXN0YW5jZSwgcmVsYXRpdmUgdG8gdGhlIHJh
ZGl1cyB0aGUgY2VudHJpcGV0YWwgZm9yY2VzIHNob3VsZCBraWNrIGluPyBSYW5nZTogMC0xCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmNlbnRyaXBldGFsRm9yY2VUaHJlc2hvbGQgPSAwLjc7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIG11bHRpcGxpZXIgZGV0ZXJtaW5lcyB3aXRo
IGhvdyBtdWNoIGZvcmNlIHRoZSBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIHNpZGV3YXlzL2Fyb3Vu
ZCB0aGUgdm9ydGV4LCB3aGVuIGJlbG93IHRoZSB0cmVzaG9sZC4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMuY2VudHJpcGV0YWxGb3JjZU11bHRpcGxpZXIgPSA1OworICAgICAgICAvKioKKyAg
ICAgICAgICogVGhpcyBtdWx0aXBsaWVyIGRldGVybWluZXMgd2l0aCBob3cgbXVjaCBmb3JjZSB0
aGUgb2JqZWN0cyB3aWxsIGJlIHB1c2hlZCBzaWRld2F5cy9hcm91bmQgdGhlIHZvcnRleCwgd2hl
biBhYm92ZSB0aGUgdHJlc2hvbGQuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNlbnRyaWZ1
Z2FsRm9yY2VNdWx0aXBsaWVyID0gMC41OworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBt
dWx0aXBsaWVyIGRldGVybWluZXMgd2l0aCBob3cgbXVjaCBmb3JjZSB0aGUgb2JqZWN0cyB3aWxs
IGJlIHB1c2hlZCB1cHdhcmRzLCB3aGVuIGluIHRoZSB2b3J0ZXguCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLnVwZHJhZnRGb3JjZU11bHRpcGxpZXIgPSAwLjAyOworICAgIH0KKyAgICByZXR1
cm4gUGh5c2ljc1ZvcnRleEV2ZW50T3B0aW9uczsKK30oKSk7CisKKy8qKgorKiBUaGUgc3RyZW5n
aHQgb2YgdGhlIGZvcmNlIGluIGNvcnJlc3BvbmRlbmNlIHRvIHRoZSBkaXN0YW5jZSBvZiB0aGUg
YWZmZWN0ZWQgb2JqZWN0CisqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
dXNpbmdfdGhlX3BoeXNpY3NfZW5naW5lI2Z1cnRoZXItZnVuY3Rpb25hbGl0eS1vZi10aGUtaW1w
b3N0b3ItY2xhc3MKKyovCit2YXIgUGh5c2ljc1JhZGlhbEltcHVsc2VGYWxsb2ZmOworKGZ1bmN0
aW9uIChQaHlzaWNzUmFkaWFsSW1wdWxzZUZhbGxvZmYpIHsKKyAgICAvKiogRGVmaW5lcyB0aGF0
IGltcHVsc2UgaXMgY29uc3RhbnQgaW4gc3RyZW5ndGggYWNyb3NzIGl0J3Mgd2hvbGUgcmFkaXVz
ICovCisgICAgUGh5c2ljc1JhZGlhbEltcHVsc2VGYWxsb2ZmW1BoeXNpY3NSYWRpYWxJbXB1bHNl
RmFsbG9mZlsiQ29uc3RhbnQiXSA9IDBdID0gIkNvbnN0YW50IjsKKyAgICAvKiogRGVmaW5lcyB0
aGF0IGltcHVsc2UgZ2V0cyB3ZWFrZXIgaWYgaXQncyBmdXJ0aGVyIGZyb20gdGhlIG9yaWdpbiAq
LworICAgIFBoeXNpY3NSYWRpYWxJbXB1bHNlRmFsbG9mZltQaHlzaWNzUmFkaWFsSW1wdWxzZUZh
bGxvZmZbIkxpbmVhciJdID0gMV0gPSAiTGluZWFyIjsKK30pKFBoeXNpY3NSYWRpYWxJbXB1bHNl
RmFsbG9mZiB8fCAoUGh5c2ljc1JhZGlhbEltcHVsc2VGYWxsb2ZmID0ge30pKTsKKy8qKgorICog
VGhlIHN0cmVuZ3RoIG9mIHRoZSBmb3JjZSBpbiBjb3JyZXNwb25kZW5jZSB0byB0aGUgZGlzdGFu
Y2Ugb2YgdGhlIGFmZmVjdGVkIG9iamVjdAorICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by91c2luZ190aGVfcGh5c2ljc19lbmdpbmUjZnVydGhlci1mdW5jdGlvbmFsaXR5
LW9mLXRoZS1pbXBvc3Rvci1jbGFzcworICovCit2YXIgUGh5c2ljc1VwZHJhZnRNb2RlOworKGZ1
bmN0aW9uIChQaHlzaWNzVXBkcmFmdE1vZGUpIHsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRoZSB1
cHN0cmVhbSBmb3JjZXMgd2lsbCBwdWxsIHRvd2FyZHMgdGhlIHRvcCBjZW50ZXIgb2YgdGhlIGN5
bGluZGVyICovCisgICAgUGh5c2ljc1VwZHJhZnRNb2RlW1BoeXNpY3NVcGRyYWZ0TW9kZVsiQ2Vu
dGVyIl0gPSAwXSA9ICJDZW50ZXIiOworICAgIC8qKiBEZWZpbmVzIHRoYXQgb25jZSBhIGltcG9z
dG9yIGlzIGluc2lkZSB0aGUgY3lsaW5kZXIsIGl0IHdpbGwgc2hvb3Qgb3V0IHBlcnBlbmRpY3Vs
YXIgZnJvbSB0aGUgZ3JvdW5kIG9mIHRoZSBjeWxpbmRlciAqLworICAgIFBoeXNpY3NVcGRyYWZ0
TW9kZVtQaHlzaWNzVXBkcmFmdE1vZGVbIlBlcnBlbmRpY3VsYXIiXSA9IDFdID0gIlBlcnBlbmRp
Y3VsYXIiOworfSkoUGh5c2ljc1VwZHJhZnRNb2RlIHx8IChQaHlzaWNzVXBkcmFmdE1vZGUgPSB7
fSkpOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QaHlzaWNzL3BoeXNpY3NJbXBvc3Rvci50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L1BoeXNpY3MvcGh5c2ljc0ltcG9zdG9yLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQaHlzaWNzSW1wb3N0b3Ig
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc0ltcG9zdG9yIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBQaHlzaWNzSW1wb3N0b3I7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2FycmF5
VG9vbHMgKi8gIi4vTWlzYy9hcnJheVRvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRo
LnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYWJzdHJhY3RN
ZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NZXNoZXMvYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1lc2gudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9tZXNoICovICIu
L01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BoeXNpY3NKb2lu
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9waHlzaWNzSm9pbnQgKi8gIi4vUGh5c2ljcy9waHlzaWNzSm9pbnQudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmF4aXMgKi8gIi4v
TWF0aHMvbWF0aC5heGlzLnRzIik7CisKKworCisKKworCisKK19NZXNoZXNfbWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0uX1BoeXNpY3NJbXBvc3RvclBhcnNlciA9IGZ1
bmN0aW9uIChzY2VuZSwgcGh5c2ljT2JqZWN0LCBqc29uT2JqZWN0KSB7CisgICAgcmV0dXJuIG5l
dyBQaHlzaWNzSW1wb3N0b3IocGh5c2ljT2JqZWN0LCBqc29uT2JqZWN0LnBoeXNpY3NJbXBvc3Rv
ciwgeworICAgICAgICBtYXNzOiBqc29uT2JqZWN0LnBoeXNpY3NNYXNzLAorICAgICAgICBmcmlj
dGlvbjoganNvbk9iamVjdC5waHlzaWNzRnJpY3Rpb24sCisgICAgICAgIHJlc3RpdHV0aW9uOiBq
c29uT2JqZWN0LnBoeXNpY3NSZXN0aXR1dGlvbgorICAgIH0sIHNjZW5lKTsKK307CisvKioKKyAq
IFJlcHJlc2VudHMgYSBwaHlzaWNzIGltcG9zdGVyCisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vaG93X3RvL3VzaW5nX3RoZV9waHlzaWNzX2VuZ2luZQorICovCit2YXIgUGh5c2lj
c0ltcG9zdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAq
IEluaXRpYWxpemVzIHRoZSBwaHlzaWNzIGltcG9zdGVyCisgICAgICogQHBhcmFtIG9iamVjdCBU
aGUgcGh5c2ljcy1lbmFibGVkIG9iamVjdCB1c2VkIGFzIHRoZSBwaHlzaWNzIGltcG9zdGVyCisg
ICAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIHBoeXNpY3MgaW1wb3N0ZXIKKyAgICAg
KiBAcGFyYW0gX29wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSBwaHlzaWNzIGltcG9zdGVyCisg
ICAgICogQHBhcmFtIF9zY2VuZSBUaGUgQmFieWxvbiBzY2VuZQorICAgICAqLworICAgIGZ1bmN0
aW9uIFBoeXNpY3NJbXBvc3RvcigKKyAgICAvKioKKyAgICAgKiBUaGUgcGh5c2ljcy1lbmFibGVk
IG9iamVjdCB1c2VkIGFzIHRoZSBwaHlzaWNzIGltcG9zdGVyCisgICAgICovCisgICAgb2JqZWN0
LCAKKyAgICAvKioKKyAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcGh5c2ljcyBpbXBvc3RlcgorICAg
ICAqLworICAgIHR5cGUsIF9vcHRpb25zLCBfc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgaWYgKF9vcHRpb25zID09PSB2b2lkIDApIHsgX29wdGlvbnMgPSB7IG1h
c3M6IDAgfTsgfQorICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDsKKyAgICAgICAgdGhpcy50
eXBlID0gdHlwZTsKKyAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zOworICAgICAgICB0
aGlzLl9zY2VuZSA9IF9zY2VuZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhp
cy5fcGx1Z2luRGF0YSA9IHt9OworICAgICAgICB0aGlzLl9ib2R5VXBkYXRlUmVxdWlyZWQgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5fb25CZWZvcmVQaHlzaWNzU3RlcENhbGxiYWNrcyA9IG5ldyBB
cnJheSgpOworICAgICAgICB0aGlzLl9vbkFmdGVyUGh5c2ljc1N0ZXBDYWxsYmFja3MgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fb25QaHlzaWNz
Q29sbGlkZUNhbGxiYWNrcyA9IFtdOworICAgICAgICB0aGlzLl9kZWx0YVBvc2l0aW9uID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIHRoaXMuX2lzRGlzcG9zZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc29mdCA9IGZhbHNl
OworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5zZWdtZW50cyA9IDA7CisgICAgICAgIC8vdGVtcCB2YXJpYWJsZXMgZm9yIHBhcmVudCBy
b3RhdGlvbiBjYWxjdWxhdGlvbnMKKyAgICAgICAgLy9wcml2YXRlIF9tYXRzOiBBcnJheTxNYXRy
aXg+ID0gW25ldyBNYXRyaXgoKSwgbmV3IE1hdHJpeCgpXTsKKyAgICAgICAgdGhpcy5fdG1wUXVh
dCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
UXVhdGVybmlvbiJdKCk7CisgICAgICAgIHRoaXMuX3RtcFF1YXQyID0gbmV3IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJRdWF0ZXJuaW9uIl0oKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYnkgdGhlIHBo
eXNpY3MgZW5naW5lLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5iZWZvcmVTdGVwID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCFfdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLm9i
amVjdC50cmFuc2xhdGUoX3RoaXMuX2RlbHRhUG9zaXRpb24sIC0xKTsKKyAgICAgICAgICAgIF90
aGlzLl9kZWx0YVJvdGF0aW9uQ29uanVnYXRlZCAmJiBfdGhpcy5vYmplY3Qucm90YXRpb25RdWF0
ZXJuaW9uICYmIF90aGlzLm9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24ubXVsdGlwbHlUb1JlZihf
dGhpcy5fZGVsdGFSb3RhdGlvbkNvbmp1Z2F0ZWQsIF90aGlzLm9iamVjdC5yb3RhdGlvblF1YXRl
cm5pb24pOworICAgICAgICAgICAgX3RoaXMub2JqZWN0LmNvbXB1dGVXb3JsZE1hdHJpeChmYWxz
ZSk7CisgICAgICAgICAgICBpZiAoX3RoaXMub2JqZWN0LnBhcmVudCAmJiBfdGhpcy5vYmplY3Qu
cm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuZ2V0UGFyZW50c1Jv
dGF0aW9uKCk7CisgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFF1YXQubXVsdGlwbHlUb1JlZihf
dGhpcy5vYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uLCBfdGhpcy5fdG1wUXVhdCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdG1wUXVh
dC5jb3B5RnJvbShfdGhpcy5vYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uIHx8IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJdKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFfdGhpcy5fb3B0aW9ucy5kaXNhYmxl
QmlkaXJlY3Rpb25hbFRyYW5zZm9ybWF0aW9uKSB7CisgICAgICAgICAgICAgICAgX3RoaXMub2Jq
ZWN0LnJvdGF0aW9uUXVhdGVybmlvbiAmJiBfdGhpcy5fcGh5c2ljc0VuZ2luZS5nZXRQaHlzaWNz
UGx1Z2luKCkuc2V0UGh5c2ljc0JvZHlUcmFuc2Zvcm1hdGlvbihfdGhpcywgLypiSW5mby5ib3Vu
ZGluZ0JveC5jZW50ZXJXb3JsZCovIF90aGlzLm9iamVjdC5nZXRBYnNvbHV0ZVBvc2l0aW9uKCks
IF90aGlzLl90bXBRdWF0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl9vbkJl
Zm9yZVBoeXNpY3NTdGVwQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGZ1bmMpIHsKKyAgICAg
ICAgICAgICAgICBmdW5jKF90aGlzKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9OworICAg
ICAgICAvKioKKyAgICAgICAgICogdGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBieSB0aGUgcGh5
c2ljcyBlbmdpbmUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYWZ0ZXJTdGVwID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgaWYgKCFfdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl9vbkFm
dGVyUGh5c2ljc1N0ZXBDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbiAoZnVuYykgeworICAgICAg
ICAgICAgICAgIGZ1bmMoX3RoaXMpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBfdGhp
cy5fcGh5c2ljc0VuZ2luZS5nZXRQaHlzaWNzUGx1Z2luKCkuc2V0VHJhbnNmb3JtYXRpb25Gcm9t
UGh5c2ljc0JvZHkoX3RoaXMpOworICAgICAgICAgICAgLy8gb2JqZWN0IGhhcyBub3cgaXRzIHdv
cmxkIHJvdGF0aW9uLiBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gbG9jYWwuCisgICAgICAgICAg
ICBpZiAoX3RoaXMub2JqZWN0LnBhcmVudCAmJiBfdGhpcy5vYmplY3Qucm90YXRpb25RdWF0ZXJu
aW9uKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuZ2V0UGFyZW50c1JvdGF0aW9uKCk7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX3RtcFF1YXQuY29uanVnYXRlSW5QbGFjZSgpOworICAgICAgICAg
ICAgICAgIF90aGlzLl90bXBRdWF0Lm11bHRpcGx5VG9SZWYoX3RoaXMub2JqZWN0LnJvdGF0aW9u
UXVhdGVybmlvbiwgX3RoaXMub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyB0YWtlIHRoZSBwb3NpdGlvbiBzZXQgYW5kIG1ha2UgaXQgdGhl
IGFic29sdXRlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0LgorICAgICAgICAgICAgX3RoaXMub2Jq
ZWN0LnNldEFic29sdXRlUG9zaXRpb24oX3RoaXMub2JqZWN0LnBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIF90aGlzLl9kZWx0YVJvdGF0aW9uICYmIF90aGlzLm9iamVjdC5yb3RhdGlvblF1YXRlcm5p
b24gJiYgX3RoaXMub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbi5tdWx0aXBseVRvUmVmKF90aGlz
Ll9kZWx0YVJvdGF0aW9uLCBfdGhpcy5vYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAg
ICAgICAgIF90aGlzLm9iamVjdC50cmFuc2xhdGUoX3RoaXMuX2RlbHRhUG9zaXRpb24sIDEpOwor
ICAgICAgICB9OworICAgICAgICAvKioKKyAgICAgICAgICogTGVnYWN5IGNvbGxpc2lvbiBkZXRl
Y3Rpb24gZXZlbnQgc3VwcG9ydAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkNvbGxpZGVF
dmVudCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBldmVudCBhbmQgYm9keSBvYmpl
Y3QgZHVlIHRvIGNhbm5vbidzIGV2ZW50LWJhc2VkIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICov
CisgICAgICAgIHRoaXMub25Db2xsaWRlID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGlm
ICghX3RoaXMuX29uUGh5c2ljc0NvbGxpZGVDYWxsYmFja3MubGVuZ3RoICYmICFfdGhpcy5vbkNv
bGxpZGVFdmVudCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghX3RoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgb3RoZXJJbXBvc3RvciA9IF90
aGlzLl9waHlzaWNzRW5naW5lLmdldEltcG9zdG9yV2l0aFBoeXNpY3NCb2R5KGUuYm9keSk7Cisg
ICAgICAgICAgICBpZiAob3RoZXJJbXBvc3RvcikgeworICAgICAgICAgICAgICAgIC8vIExlZ2Fj
eSBjb2xsaXNpb24gZGV0ZWN0aW9uIGV2ZW50IHN1cHBvcnQKKyAgICAgICAgICAgICAgICBpZiAo
X3RoaXMub25Db2xsaWRlRXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25Db2xs
aWRlRXZlbnQoX3RoaXMsIG90aGVySW1wb3N0b3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBfdGhpcy5fb25QaHlzaWNzQ29sbGlkZUNhbGxiYWNrcy5maWx0ZXIoZnVuY3Rp
b24gKG9iaikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLm90aGVySW1wb3N0b3Jz
LmluZGV4T2Yob3RoZXJJbXBvc3RvcikgIT09IC0xOworICAgICAgICAgICAgICAgIH0pLmZvckVh
Y2goZnVuY3Rpb24gKG9iaikgeworICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soX3Ro
aXMsIG90aGVySW1wb3N0b3IpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9OworICAgICAgICAvL3Nhbml0eSBjaGVjayEKKyAgICAgICAgaWYgKCF0aGlzLm9i
amVjdCkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkxvZ2dlciJdLkVycm9yKCJObyBvYmplY3Qgd2FzIHByb3ZpZGVkLiBBIHBoeXNpY3Mg
b2JqZWN0IGlzIG9ibGlnYXRvcnkiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5vYmplY3QucGFyZW50ICYmIF9vcHRpb25zLm1hc3MgIT09IDApIHsK
KyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJM
b2dnZXIiXS5XYXJuKCJBIHBoeXNpY3MgaW1wb3N0b3IgaGFzIGJlZW4gY3JlYXRlZCBmb3IgYW4g
b2JqZWN0IHdoaWNoIGhhcyBhIHBhcmVudC4gQmFieWxvbiBwaHlzaWNzIGN1cnJlbnRseSB3b3Jr
cyBpbiBsb2NhbCBzcGFjZSBzbyB1bmV4cGVjdGVkIGlzc3VlcyBtYXkgb2NjdXIuIik7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gTGVnYWN5IHN1cHBvcnQgZm9yIG9sZCBzeW50YXguCisgICAgICAg
IGlmICghdGhpcy5fc2NlbmUgJiYgb2JqZWN0LmdldFNjZW5lKSB7CisgICAgICAgICAgICB0aGlz
Ll9zY2VuZSA9IG9iamVjdC5nZXRTY2VuZSgpOworICAgICAgICB9CisgICAgICAgIGlmICghdGhp
cy5fc2NlbmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy50eXBlID4gMTAwKSB7CisgICAgICAgICAgICB0aGlzLnNvZnQgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRQaHlzaWNz
RW5naW5lKCk7CisgICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLkVy
cm9yKCJQaHlzaWNzIG5vdCBlbmFibGVkLiBQbGVhc2UgdXNlIHNjZW5lLmVuYWJsZVBoeXNpY3Mo
Li4uKSBiZWZvcmUgY3JlYXRpbmcgaW1wb3N0b3JzLiIpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgLy9zZXQgdGhlIG9iamVjdCdzIHF1YXRlcm5pb24sIGlmIG5vdCBz
ZXQKKyAgICAgICAgICAgIGlmICghdGhpcy5vYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHRoaXMub2JqZWN0LnJvdGF0aW9uKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQ
aXRjaFJvbGwodGhpcy5vYmplY3Qucm90YXRpb24ueSwgdGhpcy5vYmplY3Qucm90YXRpb24ueCwg
dGhpcy5vYmplY3Qucm90YXRpb24ueik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9iamVjdC5yb3RhdGlvblF1YXRl
cm5pb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlF1YXRlcm5pb24iXSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vZGVmYXVsdCBvcHRpb25zIHBhcmFtcworICAgICAgICAgICAgdGhpcy5fb3B0
aW9ucy5tYXNzID0gKF9vcHRpb25zLm1hc3MgPT09IHZvaWQgMCkgPyAwIDogX29wdGlvbnMubWFz
czsKKyAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuZnJpY3Rpb24gPSAoX29wdGlvbnMuZnJpY3Rp
b24gPT09IHZvaWQgMCkgPyAwLjIgOiBfb3B0aW9ucy5mcmljdGlvbjsKKyAgICAgICAgICAgIHRo
aXMuX29wdGlvbnMucmVzdGl0dXRpb24gPSAoX29wdGlvbnMucmVzdGl0dXRpb24gPT09IHZvaWQg
MCkgPyAwLjIgOiBfb3B0aW9ucy5yZXN0aXR1dGlvbjsKKyAgICAgICAgICAgIGlmICh0aGlzLnNv
ZnQpIHsKKyAgICAgICAgICAgICAgICAvL3NvZnRib2R5IG1hc3MgbXVzdCBiZSBhYm92ZSAwOwor
ICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMubWFzcyA9IHRoaXMuX29wdGlvbnMubWFzcyA+
IDAgPyB0aGlzLl9vcHRpb25zLm1hc3MgOiAxOworICAgICAgICAgICAgICAgIHRoaXMuX29wdGlv
bnMucHJlc3N1cmUgPSAoX29wdGlvbnMucHJlc3N1cmUgPT09IHZvaWQgMCkgPyAyMDAgOiBfb3B0
aW9ucy5wcmVzc3VyZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zLnN0aWZmbmVzcyA9
IChfb3B0aW9ucy5zdGlmZm5lc3MgPT09IHZvaWQgMCkgPyAxIDogX29wdGlvbnMuc3RpZmZuZXNz
OworICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMudmVsb2NpdHlJdGVyYXRpb25zID0gKF9v
cHRpb25zLnZlbG9jaXR5SXRlcmF0aW9ucyA9PT0gdm9pZCAwKSA/IDIwIDogX29wdGlvbnMudmVs
b2NpdHlJdGVyYXRpb25zOworICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMucG9zaXRpb25J
dGVyYXRpb25zID0gKF9vcHRpb25zLnBvc2l0aW9uSXRlcmF0aW9ucyA9PT0gdm9pZCAwKSA/IDIw
IDogX29wdGlvbnMucG9zaXRpb25JdGVyYXRpb25zOworICAgICAgICAgICAgICAgIHRoaXMuX29w
dGlvbnMuZml4ZWRQb2ludHMgPSAoX29wdGlvbnMuZml4ZWRQb2ludHMgPT09IHZvaWQgMCkgPyAw
IDogX29wdGlvbnMuZml4ZWRQb2ludHM7CisgICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5t
YXJnaW4gPSAoX29wdGlvbnMubWFyZ2luID09PSB2b2lkIDApID8gMCA6IF9vcHRpb25zLm1hcmdp
bjsKKyAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zLmRhbXBpbmcgPSAoX29wdGlvbnMuZGFt
cGluZyA9PT0gdm9pZCAwKSA/IDAgOiBfb3B0aW9ucy5kYW1waW5nOworICAgICAgICAgICAgICAg
IHRoaXMuX29wdGlvbnMucGF0aCA9IChfb3B0aW9ucy5wYXRoID09PSB2b2lkIDApID8gbnVsbCA6
IF9vcHRpb25zLnBhdGg7CisgICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5zaGFwZSA9IChf
b3B0aW9ucy5zaGFwZSA9PT0gdm9pZCAwKSA/IG51bGwgOiBfb3B0aW9ucy5zaGFwZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2pvaW50cyA9IFtdOworICAgICAgICAgICAgLy9J
ZiB0aGUgbWVzaCBoYXMgYSBwYXJlbnQsIGRvbid0IGluaXRpYWxpemUgdGhlIHBoeXNpY3NCb2R5
LiBJbnN0ZWFkIHdhaXQgZm9yIHRoZSBwYXJlbnQgdG8gZG8gdGhhdC4KKyAgICAgICAgICAgIGlm
ICghdGhpcy5vYmplY3QucGFyZW50IHx8IHRoaXMuX29wdGlvbnMuaWdub3JlUGFyZW50KSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5faW5pdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAodGhpcy5vYmplY3QucGFyZW50LnBoeXNpY3NJbXBvc3RvcikgeworICAgICAgICAg
ICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMb2dnZXIi
XS5XYXJuKCJZb3UgbXVzdCBhZmZlY3QgaW1wb3N0b3JzIHRvIGNoaWxkcmVuIGJlZm9yZSBhZmZl
Y3RpbmcgaW1wb3N0b3IgdG8gcGFyZW50LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQaHlzaWNzSW1wb3N0b3IucHJvdG90eXBl
LCAiaXNEaXNwb3NlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0
aGUgcGh5c2ljcyBpbXBvc3RlciBpcyBkaXNwb3NlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEaXNwb3NlZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBoeXNpY3NJbXBvc3Rv
ci5wcm90b3R5cGUsICJtYXNzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUg
bWFzcyBvZiB0aGUgcGh5c2ljcyBpbXBvc3RlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGh5c2ljc0VuZ2luZSA/IHRo
aXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1BsdWdpbigpLmdldEJvZHlNYXNzKHRoaXMpIDog
MDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIHRoaXMuc2V0TWFzcyh2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShQaHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLCAiZnJpY3Rpb24iLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjb2VmZmljaWVudCBvZiBmcmljdGlvbgor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fcGh5c2ljc0VuZ2luZSA/IHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1Bs
dWdpbigpLmdldEJvZHlGcmljdGlvbih0aGlzKSA6IDA7CisgICAgICAgIH0sCisgICAgICAgIC8q
KgorICAgICAgICAgKiBTZXRzIHRoZSBjb2VmZmljaWVudCBvZiBmcmljdGlvbgorICAgICAgICAg
Ki8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghdGhp
cy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1BsdWdpbigpLnNl
dEJvZHlGcmljdGlvbih0aGlzLCB2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShQaHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLCAicmVzdGl0dXRpb24i
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjb2VmZmljaWVudCBvZiByZXN0
aXR1dGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fcGh5c2ljc0VuZ2luZSA/IHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0
UGh5c2ljc1BsdWdpbigpLmdldEJvZHlSZXN0aXR1dGlvbih0aGlzKSA6IDA7CisgICAgICAgIH0s
CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBjb2VmZmljaWVudCBvZiByZXN0aXR1
dGlvbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg
ICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5
c2ljc1BsdWdpbigpLnNldEJvZHlSZXN0aXR1dGlvbih0aGlzLCB2YWx1ZSk7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQaHlzaWNzSW1wb3N0b3IucHJvdG90
eXBlLCAicHJlc3N1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBwcmVz
c3VyZSBvZiBhIHNvZnQgYm9keTsgb25seSBzdXBwb3J0ZWQgYnkgdGhlIEFtbW9KU1BsdWdpbgor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAo
IXRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHZhciBwbHVnaW4gPSB0aGlzLl9waHlzaWNzRW5naW5lLmdl
dFBoeXNpY3NQbHVnaW4oKTsKKyAgICAgICAgICAgIGlmICghcGx1Z2luLnNldEJvZHlQcmVzc3Vy
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHBsdWdpbi5nZXRCb2R5UHJlc3N1cmUodGhpcyk7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBwcmVzc3VyZSBvZiBhIHNvZnQgYm9keTsgb25s
eSBzdXBwb3J0ZWQgYnkgdGhlIEFtbW9KU1BsdWdpbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2lu
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciBwbHVnaW4gPSB0aGlzLl9waHlzaWNzRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKTsKKyAg
ICAgICAgICAgIGlmICghcGx1Z2luLnNldEJvZHlQcmVzc3VyZSkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBsdWdpbi5zZXRCb2R5UHJlc3N1
cmUodGhpcywgdmFsdWUpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZSwgInN0aWZmbmVzcyIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIHN0aWZmbmVzcyBvZiBhIHNvZnQgYm9keTsgb25seSBz
dXBwb3J0ZWQgYnkgdGhlIEFtbW9KU1BsdWdpbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBw
bHVnaW4gPSB0aGlzLl9waHlzaWNzRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKTsKKyAgICAgICAg
ICAgIGlmICghcGx1Z2luLmdldEJvZHlTdGlmZm5lc3MpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwbHVnaW4uZ2V0Qm9keVN0
aWZmbmVzcyh0aGlzKTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMg
dGhlIHN0aWZmbmVzcyBvZiBhIHNvZnQgYm9keTsgb25seSBzdXBwb3J0ZWQgYnkgdGhlIEFtbW9K
U1BsdWdpbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBwbHVnaW4gPSB0aGlzLl9waHlz
aWNzRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKTsKKyAgICAgICAgICAgIGlmICghcGx1Z2luLnNl
dEJvZHlTdGlmZm5lc3MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBwbHVnaW4uc2V0Qm9keVN0aWZmbmVzcyh0aGlzLCB2YWx1ZSk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQaHlzaWNzSW1wb3N0b3Iu
cHJvdG90eXBlLCAidmVsb2NpdHlJdGVyYXRpb25zIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgdmVsb2NpdHlJdGVyYXRpb25zIG9mIGEgc29mdCBib2R5OyBvbmx5IHN1cHBv
cnRlZCBieSB0aGUgQW1tb0pTUGx1Z2luCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHBsdWdp
biA9IHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1BsdWdpbigpOworICAgICAgICAgICAg
aWYgKCFwbHVnaW4uZ2V0Qm9keVZlbG9jaXR5SXRlcmF0aW9ucykgeworICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi5nZXRC
b2R5VmVsb2NpdHlJdGVyYXRpb25zKHRoaXMpOworICAgICAgICB9LAorICAgICAgICAvKioKKyAg
ICAgICAgICogU2V0cyB0aGUgdmVsb2NpdHlJdGVyYXRpb25zIG9mIGEgc29mdCBib2R5OyBvbmx5
IHN1cHBvcnRlZCBieSB0aGUgQW1tb0pTUGx1Z2luCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9waHlzaWNzRW5naW5l
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIHBsdWdpbiA9IHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1BsdWdpbigpOworICAg
ICAgICAgICAgaWYgKCFwbHVnaW4uc2V0Qm9keVZlbG9jaXR5SXRlcmF0aW9ucykgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBsdWdpbi5zZXRC
b2R5VmVsb2NpdHlJdGVyYXRpb25zKHRoaXMsIHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUsICJwb3Np
dGlvbkl0ZXJhdGlvbnMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBwb3Np
dGlvbkl0ZXJhdGlvbnMgb2YgYSBzb2Z0IGJvZHk7IG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBBbW1v
SlNQbHVnaW4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgaWYgKCF0aGlzLl9waHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcGx1Z2luID0gdGhpcy5fcGh5c2lj
c0VuZ2luZS5nZXRQaHlzaWNzUGx1Z2luKCk7CisgICAgICAgICAgICBpZiAoIXBsdWdpbi5nZXRC
b2R5UG9zaXRpb25JdGVyYXRpb25zKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcGx1Z2luLmdldEJvZHlQb3NpdGlvbkl0ZXJh
dGlvbnModGhpcyk7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRo
ZSBwb3NpdGlvbkl0ZXJhdGlvbnMgb2YgYSBzb2Z0IGJvZHk7IG9ubHkgc3VwcG9ydGVkIGJ5IHRo
ZSBBbW1vSlNQbHVnaW4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcGx1Z2luID0gdGhp
cy5fcGh5c2ljc0VuZ2luZS5nZXRQaHlzaWNzUGx1Z2luKCk7CisgICAgICAgICAgICBpZiAoIXBs
dWdpbi5zZXRCb2R5UG9zaXRpb25JdGVyYXRpb25zKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGx1Z2luLnNldEJvZHlQb3NpdGlvbkl0ZXJh
dGlvbnModGhpcywgdmFsdWUpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBU
aGlzIGZ1bmN0aW9uIHdpbGwgY29tcGxldGx5IGluaXRpYWxpemUgdGhpcyBpbXBvc3Rvci4KKyAg
ICAgKiBJdCB3aWxsIGNyZWF0ZSBhIG5ldyBib2R5IC0gYnV0IG9ubHkgaWYgdGhpcyBtZXNoIGhh
cyBubyBwYXJlbnQuCisgICAgICogSWYgaXQgaGFzLCB0aGlzIGltcG9zdG9yIHdpbGwgbm90IGJl
IHVzZWQgb3RoZXIgdGhhbiB0byBkZWZpbmUgdGhlIGltcG9zdG9yCisgICAgICogb2YgdGhlIGNo
aWxkIG1lc2guCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5w
cm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fcGh5c2lj
c0VuZ2luZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMu
X3BoeXNpY3NFbmdpbmUucmVtb3ZlSW1wb3N0b3IodGhpcyk7CisgICAgICAgIHRoaXMucGh5c2lj
c0JvZHkgPSBudWxsOworICAgICAgICB0aGlzLl9wYXJlbnQgPSB0aGlzLl9wYXJlbnQgfHwgdGhp
cy5fZ2V0UGh5c2ljc1BhcmVudCgpOworICAgICAgICBpZiAoIXRoaXMuX2lzRGlzcG9zZWQgJiYg
KCF0aGlzLnBhcmVudCB8fCB0aGlzLl9vcHRpb25zLmlnbm9yZVBhcmVudCkpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuYWRkSW1wb3N0b3IodGhpcyk7CisgICAgICAgIH0KKyAg
ICB9OworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuX2dldFBoeXNpY3NQYXJlbnQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLm9iamVjdC5wYXJlbnQgaW5zdGFuY2VvZiBf
TWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJBYnN0cmFj
dE1lc2giXSkgeworICAgICAgICAgICAgdmFyIHBhcmVudE1lc2ggPSB0aGlzLm9iamVjdC5wYXJl
bnQ7CisgICAgICAgICAgICByZXR1cm4gcGFyZW50TWVzaC5waHlzaWNzSW1wb3N0b3I7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTaG91
bGQgYSBuZXcgYm9keSBiZSBnZW5lcmF0ZWQuCisgICAgICogQHJldHVybnMgYm9vbGVhbiBzcGVj
aWZ5aW5nIGlmIGJvZHkgaW5pdGlhbGl6YXRpb24gaXMgcmVxdWlyZWQKKyAgICAgKi8KKyAgICBQ
aHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLmlzQm9keUluaXRSZXF1aXJlZCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2JvZHlVcGRhdGVSZXF1aXJlZCB8fCAoIXRoaXMuX3Bo
eXNpY3NCb2R5ICYmICF0aGlzLl9wYXJlbnQpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
cyB0aGUgdXBkYXRlZCBzY2FsaW5nCisgICAgICogQHBhcmFtIHVwZGF0ZWQgU3BlY2lmaWVzIGlm
IHRoZSBzY2FsaW5nIGlzIHVwZGF0ZWQKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IucHJv
dG90eXBlLnNldFNjYWxpbmdVcGRhdGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmZv
cmNlVXBkYXRlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSBhIHJlZ2VuZXJhdGlv
biBvZiB0aGlzIG9yIHRoZSBwYXJlbnQncyBpbXBvc3RvcidzIGJvZHkuCisgICAgICogVXNlIHVu
ZGVyIGNhdXRpb3VzIC0gVGhpcyB3aWxsIHJlbW92ZSBhbGwgam9pbnRzIGFscmVhZHkgaW1wbGVt
ZW50ZWQuCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5mb3JjZVVwZGF0
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW5pdCgpOworICAgICAgICBpZiAodGhp
cy5wYXJlbnQgJiYgIXRoaXMuX29wdGlvbnMuaWdub3JlUGFyZW50KSB7CisgICAgICAgICAgICB0
aGlzLnBhcmVudC5mb3JjZVVwZGF0ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZSwgInBoeXNpY3NCb2R5Iiwg
eworICAgICAgICAvKnB1YmxpYyBnZXQgbWVzaCgpOiBBYnN0cmFjdE1lc2ggeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX21lc2g7CisgICAgICAgIH0qLworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgYm9keSB0aGF0IGhvbGRzIHRoaXMgaW1wb3N0b3IuIEVpdGhlciBpdHMgb3du
LCBvciBpdHMgcGFyZW50LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gKHRoaXMuX3BhcmVudCAmJiAhdGhpcy5fb3B0aW9ucy5pZ25v
cmVQYXJlbnQpID8gdGhpcy5fcGFyZW50LnBoeXNpY3NCb2R5IDogdGhpcy5fcGh5c2ljc0JvZHk7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIHBoeXNpY3MgYm9k
eS4gVXNlZCBtYWlubHkgYnkgdGhlIHBoeXNpY3MgZW5naW5lL3BsdWdpbgorICAgICAgICAgKi8K
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAocGh5c2ljc0JvZHkpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9waHlzaWNzQm9keSAmJiB0aGlzLl9waHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fcGh5c2ljc0VuZ2luZS5nZXRQaHlzaWNzUGx1Z2luKCkucmVtb3ZlUGh5c2ljc0Jv
ZHkodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzQm9keSA9
IHBoeXNpY3NCb2R5OworICAgICAgICAgICAgdGhpcy5yZXNldFVwZGF0ZUZsYWdzKCk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQaHlzaWNzSW1wb3N0b3Iu
cHJvdG90eXBlLCAicGFyZW50IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSBw
YXJlbnQgb2YgdGhlIHBoeXNpY3MgaW1wb3N0ZXIKKyAgICAgICAgICogQHJldHVybnMgUGh5c2lj
cyBpbXBvc3RlciBvciBudWxsCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiAhdGhpcy5fb3B0aW9ucy5pZ25vcmVQYXJlbnQgJiYgdGhp
cy5fcGFyZW50ID8gdGhpcy5fcGFyZW50IDogbnVsbDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFNldHMgdGhlIHBhcmVudCBvZiB0aGUgcGh5c2ljcyBpbXBvc3RlcgorICAg
ICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRo
aXMuX3BhcmVudCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBS
ZXNldHMgdGhlIHVwZGF0ZSBmbGFncworICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90
b3R5cGUucmVzZXRVcGRhdGVGbGFncyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fYm9k
eVVwZGF0ZVJlcXVpcmVkID0gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRo
ZSBvYmplY3QgZXh0ZW5kIHNpemUKKyAgICAgKiBAcmV0dXJucyB0aGUgb2JqZWN0IGV4dGVuZCBz
aXplCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5nZXRPYmplY3RFeHRl
bmRTaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5vYmplY3QuZ2V0Qm91bmRp
bmdJbmZvKSB7CisgICAgICAgICAgICB2YXIgcSA9IHRoaXMub2JqZWN0LnJvdGF0aW9uUXVhdGVy
bmlvbjsKKyAgICAgICAgICAgIC8vcmVzZXQgcm90YXRpb24KKyAgICAgICAgICAgIHRoaXMub2Jq
ZWN0LnJvdGF0aW9uUXVhdGVybmlvbiA9IFBoeXNpY3NJbXBvc3Rvci5JREVOVElUWV9RVUFURVJO
SU9OOworICAgICAgICAgICAgLy9jYWxjdWxhdGUgdGhlIHdvcmxkIG1hdHJpeCB3aXRoIG5vIHJv
dGF0aW9uCisgICAgICAgICAgICB0aGlzLm9iamVjdC5jb21wdXRlV29ybGRNYXRyaXggJiYgdGhp
cy5vYmplY3QuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAgICAgICAgdmFyIGJvdW5k
aW5nSW5mbyA9IHRoaXMub2JqZWN0LmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICAgICAgdmFy
IHNpemUgPSBib3VuZGluZ0luZm8uYm91bmRpbmdCb3guZXh0ZW5kU2l6ZVdvcmxkLnNjYWxlKDIp
OworICAgICAgICAgICAgLy9icmluZyBiYWNrIHRoZSByb3RhdGlvbgorICAgICAgICAgICAgdGhp
cy5vYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uID0gcTsKKyAgICAgICAgICAgIC8vY2FsY3VsYXRl
IHRoZSB3b3JsZCBtYXRyaXggd2l0aCB0aGUgbmV3IHJvdGF0aW9uCisgICAgICAgICAgICB0aGlz
Lm9iamVjdC5jb21wdXRlV29ybGRNYXRyaXggJiYgdGhpcy5vYmplY3QuY29tcHV0ZVdvcmxkTWF0
cml4KHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHNpemU7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gUGh5c2ljc0ltcG9zdG9yLkRFRkFVTFRfT0JKRUNU
X1NJWkU7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIG9iamVj
dCBjZW50ZXIKKyAgICAgKiBAcmV0dXJucyBUaGUgb2JqZWN0IGNlbnRlcgorICAgICAqLworICAg
IFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuZ2V0T2JqZWN0Q2VudGVyID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBpZiAodGhpcy5vYmplY3QuZ2V0Qm91bmRpbmdJbmZvKSB7CisgICAgICAgICAg
ICB2YXIgYm91bmRpbmdJbmZvID0gdGhpcy5vYmplY3QuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAg
ICAgICAgICByZXR1cm4gYm91bmRpbmdJbmZvLmJvdW5kaW5nQm94LmNlbnRlcldvcmxkOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0LnBv
c2l0aW9uOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgYSBzcGVjaWZp
YyBwYXJhbWV0ZXMgZnJvbSB0aGUgb3B0aW9ucyBwYXJhbWV0ZXIKKyAgICAgKiBAcGFyYW0gcGFy
YW1OYW1lIFRoZSBvYmplY3QgcGFyYW1ldGVyIG5hbWUKKyAgICAgKiBAcmV0dXJucyBUaGUgb2Jq
ZWN0IHBhcmFtZXRlcgorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuZ2V0
UGFyYW0gPSBmdW5jdGlvbiAocGFyYW1OYW1lKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9vcHRp
b25zW3BhcmFtTmFtZV07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgc3BlY2lmaWMg
cGFyYW1ldGVyIGluIHRoZSBvcHRpb25zIGdpdmVuIHRvIHRoZSBwaHlzaWNzIHBsdWdpbgorICAg
ICAqIEBwYXJhbSBwYXJhbU5hbWUgVGhlIHBhcmFtZXRlciBuYW1lCisgICAgICogQHBhcmFtIHZh
bHVlIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyCisgICAgICovCisgICAgUGh5c2ljc0ltcG9z
dG9yLnByb3RvdHlwZS5zZXRQYXJhbSA9IGZ1bmN0aW9uIChwYXJhbU5hbWUsIHZhbHVlKSB7Cisg
ICAgICAgIHRoaXMuX29wdGlvbnNbcGFyYW1OYW1lXSA9IHZhbHVlOworICAgICAgICB0aGlzLl9i
b2R5VXBkYXRlUmVxdWlyZWQgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lm
aWNhbGx5IGNoYW5nZSB0aGUgYm9keSdzIG1hc3Mgb3B0aW9uLiBXb24ndCByZWNyZWF0ZSB0aGUg
cGh5c2ljcyBib2R5IG9iamVjdAorICAgICAqIEBwYXJhbSBtYXNzIFRoZSBtYXNzIG9mIHRoZSBw
aHlzaWNzIGltcG9zdGVyCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5z
ZXRNYXNzID0gZnVuY3Rpb24gKG1hc3MpIHsKKyAgICAgICAgaWYgKHRoaXMuZ2V0UGFyYW0oIm1h
c3MiKSAhPT0gbWFzcykgeworICAgICAgICAgICAgdGhpcy5zZXRQYXJhbSgibWFzcyIsIG1hc3Mp
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9waHlzaWNzRW5naW5lKSB7CisgICAgICAg
ICAgICB0aGlzLl9waHlzaWNzRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKS5zZXRCb2R5TWFzcyh0
aGlzLCBtYXNzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
bGluZWFyIHZlbG9jaXR5CisgICAgICogQHJldHVybnMgIGxpbmVhciB2ZWxvY2l0eSBvciBudWxs
CisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5nZXRMaW5lYXJWZWxvY2l0
eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BoeXNpY3NFbmdpbmUgPyB0
aGlzLl9waHlzaWNzRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKS5nZXRMaW5lYXJWZWxvY2l0eSh0
aGlzKSA6IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJW
ZWN0b3IzIl0uWmVybygpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgbGluZWFy
IHZlbG9jaXR5CisgICAgICogQHBhcmFtIHZlbG9jaXR5ICBsaW5lYXIgdmVsb2NpdHkgb3IgbnVs
bAorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuc2V0TGluZWFyVmVsb2Np
dHkgPSBmdW5jdGlvbiAodmVsb2NpdHkpIHsKKyAgICAgICAgaWYgKHRoaXMuX3BoeXNpY3NFbmdp
bmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1BsdWdpbigp
LnNldExpbmVhclZlbG9jaXR5KHRoaXMsIHZlbG9jaXR5KTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgYW5ndWxhciB2ZWxvY2l0eQorICAgICAqIEByZXR1cm5z
IGFuZ3VsYXIgdmVsb2NpdHkgb3IgbnVsbAorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5w
cm90b3R5cGUuZ2V0QW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fcGh5c2ljc0VuZ2luZSA/IHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1Bs
dWdpbigpLmdldEFuZ3VsYXJWZWxvY2l0eSh0aGlzKSA6IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpOworICAgIH07CisgICAg
LyoqCisgICAgICogU2V0cyB0aGUgYW5ndWxhciB2ZWxvY2l0eQorICAgICAqIEBwYXJhbSB2ZWxv
Y2l0eSBUaGUgdmVsb2NpdHkgb3IgbnVsbAorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5w
cm90b3R5cGUuc2V0QW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24gKHZlbG9jaXR5KSB7CisgICAg
ICAgIGlmICh0aGlzLl9waHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICB0aGlzLl9waHlzaWNz
RW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKS5zZXRBbmd1bGFyVmVsb2NpdHkodGhpcywgdmVsb2Np
dHkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIGEgZnVuY3Rp
b24gd2l0aCB0aGUgcGh5c2ljcyBwbHVnaW4gbmF0aXZlIGNvZGUKKyAgICAgKiBQcm92aWRlIGEg
ZnVuY3Rpb24gdGhlIHdpbGwgaGF2ZSB0d28gdmFyaWFibGVzIC0gdGhlIHdvcmxkIG9iamVjdCBh
bmQgdGhlIHBoeXNpY3MgYm9keSBvYmplY3QKKyAgICAgKiBAcGFyYW0gZnVuYyBUaGUgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aXRoIHRoZSBwaHlzaWNzIHBsdWdpbiBuYXRpdmUgY29kZQorICAgICAq
LworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuZXhlY3V0ZU5hdGl2ZUZ1bmN0aW9uID0g
ZnVuY3Rpb24gKGZ1bmMpIHsKKyAgICAgICAgaWYgKHRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAg
ICAgICAgICAgIGZ1bmModGhpcy5fcGh5c2ljc0VuZ2luZS5nZXRQaHlzaWNzUGx1Z2luKCkud29y
bGQsIHRoaXMucGh5c2ljc0JvZHkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHBo
eXNpY3Mgd29ybGQgaXMgc3RlcHBpbmcgZm9yd2FyZAorICAgICAqIEBwYXJhbSBmdW5jIFRoZSBm
dW5jdGlvbiB0byBleGVjdXRlIGJlZm9yZSB0aGUgcGh5c2ljcyB3b3JsZCBpcyBzdGVwcGVkIGZv
cndhcmQKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLnJlZ2lzdGVyQmVm
b3JlUGh5c2ljc1N0ZXAgPSBmdW5jdGlvbiAoZnVuYykgeworICAgICAgICB0aGlzLl9vbkJlZm9y
ZVBoeXNpY3NTdGVwQ2FsbGJhY2tzLnB1c2goZnVuYyk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBVbnJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUg
cGh5c2ljcyB3b3JsZCBpcyBzdGVwcGluZyBmb3J3YXJkCisgICAgICogQHBhcmFtIGZ1bmMgVGhl
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYmVmb3JlIHRoZSBwaHlzaWNzIHdvcmxkIGlzIHN0ZXBwZWQg
Zm9yd2FyZAorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUudW5yZWdpc3Rl
ckJlZm9yZVBoeXNpY3NTdGVwID0gZnVuY3Rpb24gKGZ1bmMpIHsKKyAgICAgICAgdmFyIGluZGV4
ID0gdGhpcy5fb25CZWZvcmVQaHlzaWNzU3RlcENhbGxiYWNrcy5pbmRleE9mKGZ1bmMpOworICAg
ICAgICBpZiAoaW5kZXggPiAtMSkgeworICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVQaHlzaWNz
U3RlcENhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkxvZ2dlciJdLldhcm4oIkZ1bmN0aW9uIHRvIHJlbW92ZSB3YXMgbm90IGZvdW5kIik7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCB3
aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBwaHlzaWNzIHN0ZXAKKyAgICAgKiBAcGFyYW0gZnVu
YyBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciBwaHlzaWNzIHN0ZXAKKyAgICAgKi8KKyAg
ICBQaHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLnJlZ2lzdGVyQWZ0ZXJQaHlzaWNzU3RlcCA9IGZ1
bmN0aW9uIChmdW5jKSB7CisgICAgICAgIHRoaXMuX29uQWZ0ZXJQaHlzaWNzU3RlcENhbGxiYWNr
cy5wdXNoKGZ1bmMpOworICAgIH07CisgICAgLyoqCisgICAgICogVW5yZWdpc3RlcnMgYSBmdW5j
dGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHBoeXNpY3Mgc3RlcAorICAgICAq
IEBwYXJhbSBmdW5jIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHBoeXNpY3Mgc3RlcAor
ICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUudW5yZWdpc3RlckFmdGVyUGh5
c2ljc1N0ZXAgPSBmdW5jdGlvbiAoZnVuYykgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9v
bkFmdGVyUGh5c2ljc1N0ZXBDYWxsYmFja3MuaW5kZXhPZihmdW5jKTsKKyAgICAgICAgaWYgKGlu
ZGV4ID4gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJQaHlzaWNzU3RlcENhbGxiYWNr
cy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLldh
cm4oIkZ1bmN0aW9uIHRvIHJlbW92ZSB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIHJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1
dGVkIHdoZW4gdGhpcyBpbXBvc3RvciBjb2xsaWRlcyBhZ2FpbnN0IGEgZGlmZmVyZW50IGJvZHkK
KyAgICAgKiBAcGFyYW0gY29sbGlkZUFnYWluc3QgUGh5c2ljcyBpbXBvc3Rlciwgb3IgYXJyYXkg
b2YgcGh5c2ljcyBpbXBvc3RlcnMgdG8gY29sbGlkZSBhZ2FpbnN0CisgICAgICogQHBhcmFtIGZ1
bmMgQ2FsbGJhY2sgdGhhdCBpcyBleGVjdXRlZCBvbiBjb2xsaXNpb24KKyAgICAgKi8KKyAgICBQ
aHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLnJlZ2lzdGVyT25QaHlzaWNzQ29sbGlkZSA9IGZ1bmN0
aW9uIChjb2xsaWRlQWdhaW5zdCwgZnVuYykgeworICAgICAgICB2YXIgY29sbGlkZWRBZ2FpbnN0
TGlzdCA9IGNvbGxpZGVBZ2FpbnN0IGluc3RhbmNlb2YgQXJyYXkgPyBjb2xsaWRlQWdhaW5zdCA6
IFtjb2xsaWRlQWdhaW5zdF07CisgICAgICAgIHRoaXMuX29uUGh5c2ljc0NvbGxpZGVDYWxsYmFj
a3MucHVzaCh7IGNhbGxiYWNrOiBmdW5jLCBvdGhlckltcG9zdG9yczogY29sbGlkZWRBZ2FpbnN0
TGlzdCB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVucmVnaXN0ZXJzIHRoZSBwaHlzaWNz
IGltcG9zdGVyIG9uIGNvbnRhY3QKKyAgICAgKiBAcGFyYW0gY29sbGlkZUFnYWluc3QgVGhlIHBo
eXNpY3Mgb2JqZWN0IHRvIGNvbGxpZGUgYWdhaW5zdAorICAgICAqIEBwYXJhbSBmdW5jIENhbGxi
YWNrIHRvIGV4ZWN1dGUgb24gY29sbGlzaW9uCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9y
LnByb3RvdHlwZS51bnJlZ2lzdGVyT25QaHlzaWNzQ29sbGlkZSA9IGZ1bmN0aW9uIChjb2xsaWRl
QWdhaW5zdCwgZnVuYykgeworICAgICAgICB2YXIgY29sbGlkZWRBZ2FpbnN0TGlzdCA9IGNvbGxp
ZGVBZ2FpbnN0IGluc3RhbmNlb2YgQXJyYXkgPyBjb2xsaWRlQWdhaW5zdCA6IFtjb2xsaWRlQWdh
aW5zdF07CisgICAgICAgIHZhciBpbmRleCA9IC0xOworICAgICAgICB2YXIgZm91bmQgPSB0aGlz
Ll9vblBoeXNpY3NDb2xsaWRlQ2FsbGJhY2tzLnNvbWUoZnVuY3Rpb24gKGNiRGVmLCBpZHgpIHsK
KyAgICAgICAgICAgIGlmIChjYkRlZi5jYWxsYmFjayA9PT0gZnVuYyAmJiBjYkRlZi5vdGhlcklt
cG9zdG9ycy5sZW5ndGggPT09IGNvbGxpZGVkQWdhaW5zdExpc3QubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgLy8gY2hjZWsgdGhlIGFycmF5cyBtYXRjaAorICAgICAgICAgICAgICAgIHZhciBz
YW1lTGlzdCA9IGNiRGVmLm90aGVySW1wb3N0b3JzLmV2ZXJ5KGZ1bmN0aW9uIChpbXBvc3Rvcikg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGlkZWRBZ2FpbnN0TGlzdC5pbmRleE9m
KGltcG9zdG9yKSA+IC0xOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlm
IChzYW1lTGlzdCkgeworICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGlkeDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHNhbWVMaXN0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGZv
dW5kKSB7CisgICAgICAgICAgICB0aGlzLl9vblBoeXNpY3NDb2xsaWRlQ2FsbGJhY2tzLnNwbGlj
ZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfTWlz
Y19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTG9nZ2VyIl0uV2FybigiRnVu
Y3Rpb24gdG8gcmVtb3ZlIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqCisgICAgICogR2V0IHRoZSBwYXJlbnQgcm90YXRpb24KKyAgICAgKiBAcmV0dXJucyBUaGUg
cGFyZW50IHJvdGF0aW9uCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5n
ZXRQYXJlbnRzUm90YXRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBwYXJlbnQgPSB0
aGlzLm9iamVjdC5wYXJlbnQ7CisgICAgICAgIHRoaXMuX3RtcFF1YXQuY29weUZyb21GbG9hdHMo
MCwgMCwgMCwgMSk7CisgICAgICAgIHdoaWxlIChwYXJlbnQpIHsKKyAgICAgICAgICAgIGlmIChw
YXJlbnQucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdG1wUXVh
dDIuY29weUZyb20ocGFyZW50LnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hS
b2xsVG9SZWYocGFyZW50LnJvdGF0aW9uLnksIHBhcmVudC5yb3RhdGlvbi54LCBwYXJlbnQucm90
YXRpb24ueiwgdGhpcy5fdG1wUXVhdDIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5fdG1wUXVhdC5tdWx0aXBseVRvUmVmKHRoaXMuX3RtcFF1YXQyLCB0aGlzLl90bXBRdWF0KTsK
KyAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRoaXMuX3RtcFF1YXQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBcHBseSBhIGZv
cmNlCisgICAgICogQHBhcmFtIGZvcmNlIFRoZSBmb3JjZSB0byBhcHBseQorICAgICAqIEBwYXJh
bSBjb250YWN0UG9pbnQgVGhlIGNvbnRhY3QgcG9pbnQgZm9yIHRoZSBmb3JjZQorICAgICAqIEBy
ZXR1cm5zIFRoZSBwaHlzaWNzIGltcG9zdGVyCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9y
LnByb3RvdHlwZS5hcHBseUZvcmNlID0gZnVuY3Rpb24gKGZvcmNlLCBjb250YWN0UG9pbnQpIHsK
KyAgICAgICAgaWYgKHRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3Bo
eXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1BsdWdpbigpLmFwcGx5Rm9yY2UodGhpcywgZm9yY2UsIGNv
bnRhY3RQb2ludCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBBcHBseSBhbiBpbXB1bHNlCisgICAgICogQHBhcmFtIGZvcmNlIFRoZSBp
bXB1bHNlIGZvcmNlCisgICAgICogQHBhcmFtIGNvbnRhY3RQb2ludCBUaGUgY29udGFjdCBwb2lu
dCBmb3IgdGhlIGltcHVsc2UgZm9yY2UKKyAgICAgKiBAcmV0dXJucyBUaGUgcGh5c2ljcyBpbXBv
c3RlcgorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuYXBwbHlJbXB1bHNl
ID0gZnVuY3Rpb24gKGZvcmNlLCBjb250YWN0UG9pbnQpIHsKKyAgICAgICAgaWYgKHRoaXMuX3Bo
eXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2lj
c1BsdWdpbigpLmFwcGx5SW1wdWxzZSh0aGlzLCBmb3JjZSwgY29udGFjdFBvaW50KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEEgaGVs
cCBmdW5jdGlvbiB0byBjcmVhdGUgYSBqb2ludAorICAgICAqIEBwYXJhbSBvdGhlckltcG9zdG9y
IEEgcGh5c2ljcyBpbXBvc3RlciB1c2VkIHRvIGNyZWF0ZSBhIGpvaW50CisgICAgICogQHBhcmFt
IGpvaW50VHlwZSBUaGUgdHlwZSBvZiBqb2ludAorICAgICAqIEBwYXJhbSBqb2ludERhdGEgVGhl
IGRhdGEgZm9yIHRoZSBqb2ludAorICAgICAqIEByZXR1cm5zIFRoZSBwaHlzaWNzIGltcG9zdGVy
CisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5jcmVhdGVKb2ludCA9IGZ1
bmN0aW9uIChvdGhlckltcG9zdG9yLCBqb2ludFR5cGUsIGpvaW50RGF0YSkgeworICAgICAgICB2
YXIgam9pbnQgPSBuZXcgX3BoeXNpY3NKb2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJQaHlzaWNzSm9pbnQiXShqb2ludFR5cGUsIGpvaW50RGF0YSk7CisgICAgICAgIHRoaXMuYWRk
Sm9pbnQob3RoZXJJbXBvc3Rvciwgam9pbnQpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEFkZCBhIGpvaW50IHRvIHRoaXMgaW1wb3N0b3Igd2l0aCBhIGRp
ZmZlcmVudCBpbXBvc3RvcgorICAgICAqIEBwYXJhbSBvdGhlckltcG9zdG9yIEEgcGh5c2ljcyBp
bXBvc3RlciB1c2VkIHRvIGFkZCBhIGpvaW50CisgICAgICogQHBhcmFtIGpvaW50IFRoZSBqb2lu
dCB0byBhZGQKKyAgICAgKiBAcmV0dXJucyBUaGUgcGh5c2ljcyBpbXBvc3RlcgorICAgICAqLwor
ICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuYWRkSm9pbnQgPSBmdW5jdGlvbiAob3RoZXJJ
bXBvc3Rvciwgam9pbnQpIHsKKyAgICAgICAgdGhpcy5fam9pbnRzLnB1c2goeworICAgICAgICAg
ICAgb3RoZXJJbXBvc3Rvcjogb3RoZXJJbXBvc3RvciwKKyAgICAgICAgICAgIGpvaW50OiBqb2lu
dAorICAgICAgICB9KTsKKyAgICAgICAgaWYgKHRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuYWRkSm9pbnQodGhpcywgb3RoZXJJbXBvc3Rvciwg
am9pbnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoq
CisgICAgICogQWRkIGFuIGFuY2hvciB0byBhIGNsb3RoIGltcG9zdG9yCisgICAgICogQHBhcmFt
IG90aGVySW1wb3N0b3IgcmlnaWQgaW1wb3N0b3IgdG8gYW5jaG9yIHRvCisgICAgICogQHBhcmFt
IHdpZHRoIHJhdGlvIGFjcm9zcyB3aWR0aCBmcm9tIDAgdG8gMQorICAgICAqIEBwYXJhbSBoZWln
aHQgcmF0aW8gdXAgaGVpZ2h0IGZyb20gMCB0byAxCisgICAgICogQHBhcmFtIGluZmx1ZW5jZSB0
aGUgZWxhc3RpY2l0eSBiZXR3ZWVuIGNsb3RoIGltcG9zdG9yIGFuZCBhbmNob3IgZnJvbSAwLCB2
ZXJ5IHN0cmV0Y2h5IHRvIDEsIGxpdHRsZSBzdHJlY2gKKyAgICAgKiBAcGFyYW0gbm9Db2xsaXNp
b25CZXR3ZWVuTGlua2VkQm9kaWVzIHdoZW4gdHJ1ZSBjb2xsaXNpb25zIGJldHdlZW4gY2xvdGgg
aW1wb3N0b3IgYW5kIGFuY2hvciBhcmUgaWdub3JlZDsgZGVmYXVsdCBmYWxzZQorICAgICAqIEBy
ZXR1cm5zIGltcG9zdG9yIHRoZSBzb2Z0IGltcG9zdGVyCisgICAgICovCisgICAgUGh5c2ljc0lt
cG9zdG9yLnByb3RvdHlwZS5hZGRBbmNob3IgPSBmdW5jdGlvbiAob3RoZXJJbXBvc3Rvciwgd2lk
dGgsIGhlaWdodCwgaW5mbHVlbmNlLCBub0NvbGxpc2lvbkJldHdlZW5MaW5rZWRCb2RpZXMpIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9waHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgfQorICAgICAgICB2YXIgcGx1Z2luID0gdGhpcy5fcGh5c2ljc0VuZ2lu
ZS5nZXRQaHlzaWNzUGx1Z2luKCk7CisgICAgICAgIGlmICghcGx1Z2luLmFwcGVuZEFuY2hvcikg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgIHBsdWdpbi5hcHBlbmRBbmNob3IodGhpcywg
b3RoZXJJbXBvc3Rvciwgd2lkdGgsIGhlaWdodCwgaW5mbHVlbmNlLCBub0NvbGxpc2lvbkJldHdl
ZW5MaW5rZWRCb2RpZXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogQWRkIGEgaG9vayB0byBhIHJvcGUgaW1wb3N0b3IKKyAgICAgKiBA
cGFyYW0gb3RoZXJJbXBvc3RvciByaWdpZCBpbXBvc3RvciB0byBhbmNob3IgdG8KKyAgICAgKiBA
cGFyYW0gbGVuZ3RoIHJhdGlvIGFjcm9zcyByb3BlIGZyb20gMCB0byAxCisgICAgICogQHBhcmFt
IGluZmx1ZW5jZSB0aGUgZWxhc3RpY2l0eSBiZXR3ZWVuIHJvcGUgaW1wb3N0b3IgYW5kIGFuY2hv
ciBmcm9tIDAsIHZlcnkgc3RyZXRjaHkgdG8gMSwgbGl0dGxlIHN0cmVjaAorICAgICAqIEBwYXJh
bSBub0NvbGxpc2lvbkJldHdlZW5MaW5rZWRCb2RpZXMgd2hlbiB0cnVlIGNvbGxpc2lvbnMgYmV0
d2VlbiBzb2Z0IGltcG9zdG9yIGFuZCBhbmNob3IgYXJlIGlnbm9yZWQ7IGRlZmF1bHQgZmFsc2UK
KyAgICAgKiBAcmV0dXJucyBpbXBvc3RvciB0aGUgcm9wZSBpbXBvc3RlcgorICAgICAqLworICAg
IFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuYWRkSG9vayA9IGZ1bmN0aW9uIChvdGhlckltcG9z
dG9yLCBsZW5ndGgsIGluZmx1ZW5jZSwgbm9Db2xsaXNpb25CZXR3ZWVuTGlua2VkQm9kaWVzKSB7
CisgICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHBsdWdpbiA9IHRoaXMuX3BoeXNpY3NFbmdp
bmUuZ2V0UGh5c2ljc1BsdWdpbigpOworICAgICAgICBpZiAoIXBsdWdpbi5hcHBlbmRBbmNob3Ip
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
Ll9waHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICBwbHVnaW4uYXBwZW5kSG9vayh0aGlzLCBv
dGhlckltcG9zdG9yLCBsZW5ndGgsIGluZmx1ZW5jZSwgbm9Db2xsaXNpb25CZXR3ZWVuTGlua2Vk
Qm9kaWVzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFdpbGwga2VlcCB0aGlzIGJvZHkgc3RpbGwsIGluIGEgc2xlZXAgbW9kZS4KKyAg
ICAgKiBAcmV0dXJucyB0aGUgcGh5c2ljcyBpbXBvc3RlcgorICAgICAqLworICAgIFBoeXNpY3NJ
bXBvc3Rvci5wcm90b3R5cGUuc2xlZXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
Ll9waHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzRW5naW5lLmdldFBo
eXNpY3NQbHVnaW4oKS5zbGVlcEJvZHkodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBXYWtlIHRoZSBib2R5IHVwLgorICAgICAq
IEByZXR1cm5zIFRoZSBwaHlzaWNzIGltcG9zdGVyCisgICAgICovCisgICAgUGh5c2ljc0ltcG9z
dG9yLnByb3RvdHlwZS53YWtlVXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9w
aHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzRW5naW5lLmdldFBoeXNp
Y3NQbHVnaW4oKS53YWtlVXBCb2R5KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBwaHlzaWNzIGltcG9zdGVy
CisgICAgICogQHBhcmFtIG5ld09iamVjdCBUaGUgcGh5c2ljcyBpbXBvc3RlciBjbG9uZXMgdG8g
dGhpcyBwaHlzaWNzLWVuYWJsZWQgb2JqZWN0CisgICAgICogQHJldHVybnMgQSBudWxsYWJsZSBw
aHlzaWNzIGltcG9zdGVyCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5j
bG9uZSA9IGZ1bmN0aW9uIChuZXdPYmplY3QpIHsKKyAgICAgICAgaWYgKCFuZXdPYmplY3QpIHsK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcg
UGh5c2ljc0ltcG9zdG9yKG5ld09iamVjdCwgdGhpcy50eXBlLCB0aGlzLl9vcHRpb25zLCB0aGlz
Ll9zY2VuZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgcGh5c2ljcyBp
bXBvc3RlcgorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuZGlzcG9zZSA9
IGZ1bmN0aW9uICggLypkaXNwb3NlQ2hpbGRyZW46IGJvb2xlYW4gPSB0cnVlKi8pIHsKKyAgICAg
ICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgLy9ubyBkaXNwb3NlIGlmIG5vIHBoeXNpY3Mg
ZW5naW5lIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgKCF0aGlzLl9waHlzaWNzRW5naW5lKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fam9pbnRzLmZv
ckVhY2goZnVuY3Rpb24gKGopIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fcGh5c2ljc0VuZ2lu
ZSkgeworICAgICAgICAgICAgICAgIF90aGlzLl9waHlzaWNzRW5naW5lLnJlbW92ZUpvaW50KF90
aGlzLCBqLm90aGVySW1wb3N0b3IsIGouam9pbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICAgICAgLy9kaXNwb3NlIHRoZSBwaHlzaWNzIGJvZHkKKyAgICAgICAgdGhpcy5fcGh5
c2ljc0VuZ2luZS5yZW1vdmVJbXBvc3Rvcih0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMucGFyZW50
KSB7CisgICAgICAgICAgICB0aGlzLnBhcmVudC5mb3JjZVVwZGF0ZSgpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyp0aGlzLl9vYmplY3QuZ2V0Q2hpbGRNZXNoZXMo
KS5mb3JFYWNoKGZ1bmN0aW9uKG1lc2gpIHsKKyAgICAgICAgICAgICAgICBpZiAobWVzaC5waHlz
aWNzSW1wb3N0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3Bvc2VDaGlsZHJlbikg
eworICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5waHlzaWNzSW1wb3N0b3IuZGlzcG9zZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5waHlzaWNzSW1wb3N0b3IgPSBudWxsOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkq
LworICAgICAgICB9CisgICAgICAgIHRoaXMuX2lzRGlzcG9zZWQgPSB0cnVlOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU2V0cyB0aGUgZGVsdGEgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gcG9z
aXRpb24gVGhlIGRlbHRhIHBvc2l0aW9uIGFtb3VudAorICAgICAqLworICAgIFBoeXNpY3NJbXBv
c3Rvci5wcm90b3R5cGUuc2V0RGVsdGFQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb3NpdGlvbikgewor
ICAgICAgICB0aGlzLl9kZWx0YVBvc2l0aW9uLmNvcHlGcm9tKHBvc2l0aW9uKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNldHMgdGhlIGRlbHRhIHJvdGF0aW9uCisgICAgICogQHBhcmFtIHJv
dGF0aW9uIFRoZSBkZWx0YSByb3RhdGlvbiBhbW91bnQKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1w
b3N0b3IucHJvdG90eXBlLnNldERlbHRhUm90YXRpb24gPSBmdW5jdGlvbiAocm90YXRpb24pIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9kZWx0YVJvdGF0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl9k
ZWx0YVJvdGF0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJRdWF0ZXJuaW9uIl0oKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9kZWx0
YVJvdGF0aW9uLmNvcHlGcm9tKHJvdGF0aW9uKTsKKyAgICAgICAgdGhpcy5fZGVsdGFSb3RhdGlv
bkNvbmp1Z2F0ZWQgPSB0aGlzLl9kZWx0YVJvdGF0aW9uLmNvbmp1Z2F0ZSgpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgYm94IHNpemUgb2YgdGhlIHBoeXNpY3MgaW1wb3N0ZXIg
YW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBpbnB1dCBwYXJhbWV0ZXIKKyAgICAgKiBAcGFy
YW0gcmVzdWx0IFN0b3JlcyB0aGUgYm94IHNpemUKKyAgICAgKiBAcmV0dXJucyBUaGUgcGh5c2lj
cyBpbXBvc3RlcgorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuZ2V0Qm94
U2l6ZVRvUmVmID0gZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICBpZiAodGhpcy5fcGh5c2lj
c0VuZ2luZSkgeworICAgICAgICAgICAgdGhpcy5fcGh5c2ljc0VuZ2luZS5nZXRQaHlzaWNzUGx1
Z2luKCkuZ2V0Qm94U2l6ZVRvUmVmKHRoaXMsIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByYWRpdXMgb2Yg
dGhlIHBoeXNpY3MgaW1wb3N0ZXIKKyAgICAgKiBAcmV0dXJucyBSYWRpdXMgb2YgdGhlIHBoeXNp
Y3MgaW1wb3N0ZXIKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLmdldFJh
ZGl1cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BoeXNpY3NFbmdpbmUg
PyB0aGlzLl9waHlzaWNzRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKS5nZXRSYWRpdXModGhpcykg
OiAwOworICAgIH07CisgICAgLyoqCisgICAgICogU3luYyBhIGJvbmUgd2l0aCB0aGlzIGltcG9z
dG9yCisgICAgICogQHBhcmFtIGJvbmUgVGhlIGJvbmUgdG8gc3luYyB0byB0aGUgaW1wb3N0b3Iu
CisgICAgICogQHBhcmFtIGJvbmVNZXNoIFRoZSBtZXNoIHRoYXQgdGhlIGJvbmUgaXMgaW5mbHVl
bmNpbmcuCisgICAgICogQHBhcmFtIGpvaW50UGl2b3QgVGhlIHBpdm90IG9mIHRoZSBqb2ludCAv
IGJvbmUgaW4gbG9jYWwgc3BhY2UuCisgICAgICogQHBhcmFtIGRpc3RUb0pvaW50IE9wdGlvbmFs
IGRpc3RhbmNlIGZyb20gdGhlIGltcG9zdG9yIHRvIHRoZSBqb2ludC4KKyAgICAgKiBAcGFyYW0g
YWRqdXN0Um90YXRpb24gT3B0aW9uYWwgcXVhdGVybmlvbiBmb3IgYWRqdXN0aW5nIHRoZSBsb2Nh
bCByb3RhdGlvbiBvZiB0aGUgYm9uZS4KKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IucHJv
dG90eXBlLnN5bmNCb25lV2l0aEltcG9zdG9yID0gZnVuY3Rpb24gKGJvbmUsIGJvbmVNZXNoLCBq
b2ludFBpdm90LCBkaXN0VG9Kb2ludCwgYWRqdXN0Um90YXRpb24pIHsKKyAgICAgICAgdmFyIHRl
bXBWZWMgPSBQaHlzaWNzSW1wb3N0b3IuX3RtcFZlY3NbMF07CisgICAgICAgIHZhciBtZXNoID0g
dGhpcy5vYmplY3Q7CisgICAgICAgIGlmIChtZXNoLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAg
ICAgICAgICAgaWYgKGFkanVzdFJvdGF0aW9uKSB7CisgICAgICAgICAgICAgICAgdmFyIHRlbXBR
dWF0ID0gUGh5c2ljc0ltcG9zdG9yLl90bXBRdWF0OworICAgICAgICAgICAgICAgIG1lc2gucm90
YXRpb25RdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYoYWRqdXN0Um90YXRpb24sIHRlbXBRdWF0KTsK
KyAgICAgICAgICAgICAgICBib25lLnNldFJvdGF0aW9uUXVhdGVybmlvbih0ZW1wUXVhdCwgX01h
dGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTcGFjZSJdLldPUkxE
LCBib25lTWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBib25lLnNldFJvdGF0aW9uUXVhdGVybmlvbihtZXNoLnJvdGF0aW9uUXVhdGVybmlv
biwgX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTcGFjZSJd
LldPUkxELCBib25lTWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGVt
cFZlYy54ID0gMDsKKyAgICAgICAgdGVtcFZlYy55ID0gMDsKKyAgICAgICAgdGVtcFZlYy56ID0g
MDsKKyAgICAgICAgaWYgKGpvaW50UGl2b3QpIHsKKyAgICAgICAgICAgIHRlbXBWZWMueCA9IGpv
aW50UGl2b3QueDsKKyAgICAgICAgICAgIHRlbXBWZWMueSA9IGpvaW50UGl2b3QueTsKKyAgICAg
ICAgICAgIHRlbXBWZWMueiA9IGpvaW50UGl2b3QuejsKKyAgICAgICAgICAgIGJvbmUuZ2V0RGly
ZWN0aW9uVG9SZWYodGVtcFZlYywgYm9uZU1lc2gsIHRlbXBWZWMpOworICAgICAgICAgICAgaWYg
KGRpc3RUb0pvaW50ID09PSB1bmRlZmluZWQgfHwgZGlzdFRvSm9pbnQgPT09IG51bGwpIHsKKyAg
ICAgICAgICAgICAgICBkaXN0VG9Kb2ludCA9IGpvaW50UGl2b3QubGVuZ3RoKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0ZW1wVmVjLnggKj0gZGlzdFRvSm9pbnQ7CisgICAgICAgICAg
ICB0ZW1wVmVjLnkgKj0gZGlzdFRvSm9pbnQ7CisgICAgICAgICAgICB0ZW1wVmVjLnogKj0gZGlz
dFRvSm9pbnQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJvbmUuZ2V0UGFyZW50KCkpIHsKKyAg
ICAgICAgICAgIHRlbXBWZWMuYWRkSW5QbGFjZShtZXNoLmdldEFic29sdXRlUG9zaXRpb24oKSk7
CisgICAgICAgICAgICBib25lLnNldEFic29sdXRlUG9zaXRpb24odGVtcFZlYywgYm9uZU1lc2gp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYm9uZU1lc2guc2V0QWJz
b2x1dGVQb3NpdGlvbihtZXNoLmdldEFic29sdXRlUG9zaXRpb24oKSk7CisgICAgICAgICAgICBi
b25lTWVzaC5wb3NpdGlvbi54IC09IHRlbXBWZWMueDsKKyAgICAgICAgICAgIGJvbmVNZXNoLnBv
c2l0aW9uLnkgLT0gdGVtcFZlYy55OworICAgICAgICAgICAgYm9uZU1lc2gucG9zaXRpb24ueiAt
PSB0ZW1wVmVjLno7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFN5bmMgaW1w
b3N0b3IgdG8gYSBib25lCisgICAgICogQHBhcmFtIGJvbmUgVGhlIGJvbmUgdGhhdCB0aGUgaW1w
b3N0b3Igd2lsbCBiZSBzeW5jZWQgdG8uCisgICAgICogQHBhcmFtIGJvbmVNZXNoIFRoZSBtZXNo
IHRoYXQgdGhlIGJvbmUgaXMgaW5mbHVlbmNpbmcuCisgICAgICogQHBhcmFtIGpvaW50UGl2b3Qg
VGhlIHBpdm90IG9mIHRoZSBqb2ludCAvIGJvbmUgaW4gbG9jYWwgc3BhY2UuCisgICAgICogQHBh
cmFtIGRpc3RUb0pvaW50IE9wdGlvbmFsIGRpc3RhbmNlIGZyb20gdGhlIGltcG9zdG9yIHRvIHRo
ZSBqb2ludC4KKyAgICAgKiBAcGFyYW0gYWRqdXN0Um90YXRpb24gT3B0aW9uYWwgcXVhdGVybmlv
biBmb3IgYWRqdXN0aW5nIHRoZSBsb2NhbCByb3RhdGlvbiBvZiB0aGUgYm9uZS4KKyAgICAgKiBA
cGFyYW0gYm9uZUF4aXMgT3B0aW9uYWwgdmVjdG9yMyBheGlzIHRoZSBib25lIGlzIGFsaWduZWQg
d2l0aAorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuc3luY0ltcG9zdG9y
V2l0aEJvbmUgPSBmdW5jdGlvbiAoYm9uZSwgYm9uZU1lc2gsIGpvaW50UGl2b3QsIGRpc3RUb0pv
aW50LCBhZGp1c3RSb3RhdGlvbiwgYm9uZUF4aXMpIHsKKyAgICAgICAgdmFyIG1lc2ggPSB0aGlz
Lm9iamVjdDsKKyAgICAgICAgaWYgKG1lc2gucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAg
ICAgICBpZiAoYWRqdXN0Um90YXRpb24pIHsKKyAgICAgICAgICAgICAgICB2YXIgdGVtcFF1YXQg
PSBQaHlzaWNzSW1wb3N0b3IuX3RtcFF1YXQ7CisgICAgICAgICAgICAgICAgYm9uZS5nZXRSb3Rh
dGlvblF1YXRlcm5pb25Ub1JlZihfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV82X19bIlNwYWNlIl0uV09STEQsIGJvbmVNZXNoLCB0ZW1wUXVhdCk7CisgICAgICAgICAg
ICAgICAgdGVtcFF1YXQubXVsdGlwbHlUb1JlZihhZGp1c3RSb3RhdGlvbiwgbWVzaC5yb3RhdGlv
blF1YXRlcm5pb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgYm9uZS5nZXRSb3RhdGlvblF1YXRlcm5pb25Ub1JlZihfTWF0aHNfbWF0aF9heGlz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNwYWNlIl0uV09STEQsIGJvbmVNZXNoLCBt
ZXNoLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHBvcyA9IFBoeXNpY3NJbXBvc3Rvci5fdG1wVmVjc1swXTsKKyAgICAgICAgdmFyIGJv
bmVEaXIgPSBQaHlzaWNzSW1wb3N0b3IuX3RtcFZlY3NbMV07CisgICAgICAgIGlmICghYm9uZUF4
aXMpIHsKKyAgICAgICAgICAgIGJvbmVBeGlzID0gUGh5c2ljc0ltcG9zdG9yLl90bXBWZWNzWzJd
OworICAgICAgICAgICAgYm9uZUF4aXMueCA9IDA7CisgICAgICAgICAgICBib25lQXhpcy55ID0g
MTsKKyAgICAgICAgICAgIGJvbmVBeGlzLnogPSAwOworICAgICAgICB9CisgICAgICAgIGJvbmUu
Z2V0RGlyZWN0aW9uVG9SZWYoYm9uZUF4aXMsIGJvbmVNZXNoLCBib25lRGlyKTsKKyAgICAgICAg
Ym9uZS5nZXRBYnNvbHV0ZVBvc2l0aW9uVG9SZWYoYm9uZU1lc2gsIHBvcyk7CisgICAgICAgIGlm
ICgoZGlzdFRvSm9pbnQgPT09IHVuZGVmaW5lZCB8fCBkaXN0VG9Kb2ludCA9PT0gbnVsbCkgJiYg
am9pbnRQaXZvdCkgeworICAgICAgICAgICAgZGlzdFRvSm9pbnQgPSBqb2ludFBpdm90Lmxlbmd0
aCgpOworICAgICAgICB9CisgICAgICAgIGlmIChkaXN0VG9Kb2ludCAhPT0gdW5kZWZpbmVkICYm
IGRpc3RUb0pvaW50ICE9PSBudWxsKSB7CisgICAgICAgICAgICBwb3MueCArPSBib25lRGlyLngg
KiBkaXN0VG9Kb2ludDsKKyAgICAgICAgICAgIHBvcy55ICs9IGJvbmVEaXIueSAqIGRpc3RUb0pv
aW50OworICAgICAgICAgICAgcG9zLnogKz0gYm9uZURpci56ICogZGlzdFRvSm9pbnQ7CisgICAg
ICAgIH0KKyAgICAgICAgbWVzaC5zZXRBYnNvbHV0ZVBvc2l0aW9uKHBvcyk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBUaGUgZGVmYXVsdCBvYmplY3Qgc2l6ZSBvZiB0aGUgaW1wb3N0ZXIKKyAg
ICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IuREVGQVVMVF9PQkpFQ1RfU0laRSA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKDEs
IDEsIDEpOworICAgIC8qKgorICAgICAqIFRoZSBpZGVudGl0eSBxdWF0ZXJuaW9uIG9mIHRoZSBp
bXBvc3RlcgorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5JREVOVElUWV9RVUFURVJOSU9O
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRl
cm5pb24iXS5JZGVudGl0eSgpOworICAgIFBoeXNpY3NJbXBvc3Rvci5fdG1wVmVjcyA9IF9NaXNj
X2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQXJyYXlUb29scyJdLkJ1
aWxkQXJyYXkoMywgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlY3RvcjMiXS5aZXJvKTsKKyAgICBQaHlzaWNzSW1wb3N0b3IuX3RtcFF1YXQgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJd
LklkZW50aXR5KCk7CisgICAgLy9JbXBvc3RvciB0eXBlcworICAgIC8qKgorICAgICAqIE5vLUlt
cG9zdGVyIHR5cGUKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IuTm9JbXBvc3RvciA9IDA7
CisgICAgLyoqCisgICAgICogU3BoZXJlLUltcG9zdGVyIHR5cGUKKyAgICAgKi8KKyAgICBQaHlz
aWNzSW1wb3N0b3IuU3BoZXJlSW1wb3N0b3IgPSAxOworICAgIC8qKgorICAgICAqIEJveC1JbXBv
c3RlciB0eXBlCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLkJveEltcG9zdG9yID0gMjsK
KyAgICAvKioKKyAgICAgKiBQbGFuZS1JbXBvc3RlciB0eXBlCisgICAgICovCisgICAgUGh5c2lj
c0ltcG9zdG9yLlBsYW5lSW1wb3N0b3IgPSAzOworICAgIC8qKgorICAgICAqIE1lc2gtaW1wb3N0
ZXIgdHlwZQorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5NZXNoSW1wb3N0b3IgPSA0Owor
ICAgIC8qKgorICAgICAqIENhcHN1bGUtSW1wb3N0b3IgdHlwZSAoQW1tby5qcyBwbHVnaW4gb25s
eSkKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IuQ2Fwc3VsZUltcG9zdG9yID0gNjsKKyAg
ICAvKioKKyAgICAgKiBDeWxpbmRlci1JbXBvc3RlciB0eXBlCisgICAgICovCisgICAgUGh5c2lj
c0ltcG9zdG9yLkN5bGluZGVySW1wb3N0b3IgPSA3OworICAgIC8qKgorICAgICAqIFBhcnRpY2xl
LUltcG9zdGVyIHR5cGUKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IuUGFydGljbGVJbXBv
c3RvciA9IDg7CisgICAgLyoqCisgICAgICogSGVpZ2h0bWFwLUltcG9zdGVyIHR5cGUKKyAgICAg
Ki8KKyAgICBQaHlzaWNzSW1wb3N0b3IuSGVpZ2h0bWFwSW1wb3N0b3IgPSA5OworICAgIC8qKgor
ICAgICAqIENvbnZleEh1bGwtSW1wb3N0b3IgdHlwZSAoQW1tby5qcyBwbHVnaW4gb25seSkKKyAg
ICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IuQ29udmV4SHVsbEltcG9zdG9yID0gMTA7CisgICAg
LyoqCisgICAgICogUm9wZS1JbXBvc3RlciB0eXBlCisgICAgICovCisgICAgUGh5c2ljc0ltcG9z
dG9yLlJvcGVJbXBvc3RvciA9IDEwMTsKKyAgICAvKioKKyAgICAgKiBDbG90aC1JbXBvc3RlciB0
eXBlCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLkNsb3RoSW1wb3N0b3IgPSAxMDI7Cisg
ICAgLyoqCisgICAgICogU29mdGJvZHktSW1wb3N0ZXIgdHlwZQorICAgICAqLworICAgIFBoeXNp
Y3NJbXBvc3Rvci5Tb2Z0Ym9keUltcG9zdG9yID0gMTAzOworICAgIHJldHVybiBQaHlzaWNzSW1w
b3N0b3I7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1BoeXNpY3MvcGh5c2lj
c0pvaW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vUGh5c2ljcy9waHlzaWNzSm9pbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBoeXNpY3NKb2ludCwgRGlz
dGFuY2VKb2ludCwgTW90b3JFbmFibGVkSm9pbnQsIEhpbmdlSm9pbnQsIEhpbmdlMkpvaW50ICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NKb2ludCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gUGh5c2ljc0pvaW50OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRpc3Rh
bmNlSm9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERpc3RhbmNlSm9pbnQ7IH0pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTW90b3JFbmFibGVkSm9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1vdG9y
RW5hYmxlZEpvaW50OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhpbmdlSm9pbnQiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEhpbmdlSm9pbnQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSGluZ2UySm9p
bnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEhpbmdlMkpvaW50OyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKworLyoqCisgKiBUaGlzIGlzIGEgaG9sZGVyIGNsYXNzIGZvciB0aGUgcGh5c2ljcyBq
b2ludCBjcmVhdGVkIGJ5IHRoZSBwaHlzaWNzIHBsdWdpbgorICogSXQgaG9sZHMgYSBzZXQgb2Yg
ZnVuY3Rpb25zIHRvIGNvbnRyb2wgdGhlIHVuZGVybHlpbmcgam9pbnQKKyAqIEBzZWUgaHR0cHM6
Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vdXNpbmdfdGhlX3BoeXNpY3NfZW5naW5lCisgKi8K
K3ZhciBQaHlzaWNzSm9pbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoq
CisgICAgICogSW5pdGlhbGl6ZXMgdGhlIHBoeXNpY3Mgam9pbnQKKyAgICAgKiBAcGFyYW0gdHlw
ZSBUaGUgdHlwZSBvZiB0aGUgcGh5c2ljcyBqb2ludAorICAgICAqIEBwYXJhbSBqb2ludERhdGEg
VGhlIGRhdGEgZm9yIHRoZSBwaHlzaWNzIGpvaW50CisgICAgICovCisgICAgZnVuY3Rpb24gUGh5
c2ljc0pvaW50KAorICAgIC8qKgorICAgICAqIFRoZSB0eXBlIG9mIHRoZSBwaHlzaWNzIGpvaW50
CisgICAgICovCisgICAgdHlwZSwgCisgICAgLyoqCisgICAgICogVGhlIGRhdGEgZm9yIHRoZSBw
aHlzaWNzIGpvaW50CisgICAgICovCisgICAgam9pbnREYXRhKSB7CisgICAgICAgIHRoaXMudHlw
ZSA9IHR5cGU7CisgICAgICAgIHRoaXMuam9pbnREYXRhID0gam9pbnREYXRhOworICAgICAgICBq
b2ludERhdGEubmF0aXZlUGFyYW1zID0gam9pbnREYXRhLm5hdGl2ZVBhcmFtcyB8fCB7fTsKKyAg
ICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBoeXNpY3NKb2ludC5wcm90b3R5cGUsICJw
aHlzaWNzSm9pbnQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBwaHlzaWNz
IGpvaW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9waHlzaWNzSm9pbnQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgor
ICAgICAgICAgKiBTZXRzIHRoZSBwaHlzaWNzIGpvaW50CisgICAgICAgICAqLworICAgICAgICBz
ZXQ6IGZ1bmN0aW9uIChuZXdKb2ludCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3BoeXNpY3NK
b2ludCkgeworICAgICAgICAgICAgICAgIC8vcmVtb3ZlIGZyb20gdGhlIHdvbHJkCisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzSm9pbnQgPSBuZXdKb2ludDsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBoeXNpY3NKb2ludC5wcm90
b3R5cGUsICJwaHlzaWNzUGx1Z2luIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0
aGUgcGh5c2ljcyBwbHVnaW4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHBo
eXNpY3NQbHVnaW4pIHsKKyAgICAgICAgICAgIHRoaXMuX3BoeXNpY3NQbHVnaW4gPSBwaHlzaWNz
UGx1Z2luOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIGEgZnVu
Y3Rpb24gdGhhdCBpcyBwaHlzaWNzLXBsdWdpbiBzcGVjaWZpYy4KKyAgICAgKiBAcGFyYW0ge0Z1
bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuCisgICAgICog
ICAgICAgICAgICAgICAgICAgICAgICBJdCBhY2NlcHRzIHR3byBwYXJhbWV0ZXJzOiB0aGUgcGh5
c2ljcyB3b3JsZCBhbmQgdGhlIHBoeXNpY3Mgam9pbnQKKyAgICAgKi8KKyAgICBQaHlzaWNzSm9p
bnQucHJvdG90eXBlLmV4ZWN1dGVOYXRpdmVGdW5jdGlvbiA9IGZ1bmN0aW9uIChmdW5jKSB7Cisg
ICAgICAgIGZ1bmModGhpcy5fcGh5c2ljc1BsdWdpbi53b3JsZCwgdGhpcy5fcGh5c2ljc0pvaW50
KTsKKyAgICB9OworICAgIC8vVE9ETyBjaGVjayBpZiB0aGUgbmF0aXZlIGpvaW50cyBhcmUgdGhl
IHNhbWUKKyAgICAvL0pvaW50IFR5cGVzCisgICAgLyoqCisgICAgICogRGlzdGFuY2UtSm9pbnQg
dHlwZQorICAgICAqLworICAgIFBoeXNpY3NKb2ludC5EaXN0YW5jZUpvaW50ID0gMDsKKyAgICAv
KioKKyAgICAgKiBIaW5nZS1Kb2ludCB0eXBlCisgICAgICovCisgICAgUGh5c2ljc0pvaW50Lkhp
bmdlSm9pbnQgPSAxOworICAgIC8qKgorICAgICAqIEJhbGwtYW5kLVNvY2tldCBqb2ludCB0eXBl
CisgICAgICovCisgICAgUGh5c2ljc0pvaW50LkJhbGxBbmRTb2NrZXRKb2ludCA9IDI7CisgICAg
LyoqCisgICAgICogV2hlZWwtSm9pbnQgdHlwZQorICAgICAqLworICAgIFBoeXNpY3NKb2ludC5X
aGVlbEpvaW50ID0gMzsKKyAgICAvKioKKyAgICAgKiBTbGlkZXItSm9pbnQgdHlwZQorICAgICAq
LworICAgIFBoeXNpY3NKb2ludC5TbGlkZXJKb2ludCA9IDQ7CisgICAgLy9PSU1PCisgICAgLyoq
CisgICAgICogUHJpc21hdGljLUpvaW50IHR5cGUKKyAgICAgKi8KKyAgICBQaHlzaWNzSm9pbnQu
UHJpc21hdGljSm9pbnQgPSA1OworICAgIC8vCisgICAgLyoqCisgICAgICogVW5pdmVyc2FsLUpv
aW50IHR5cGUKKyAgICAgKiBFTkVSR1kgRlRXISAoY29tcGFyZSB3aXRoIHRoaXMgLSBAc2VlIGh0
dHA6Ly9vZGUtd2lraS5vcmcvd2lraS9pbmRleC5waHA/dGl0bGU9TWFudWFsOl9Kb2ludF9UeXBl
c19hbmRfRnVuY3Rpb25zKQorICAgICAqLworICAgIFBoeXNpY3NKb2ludC5Vbml2ZXJzYWxKb2lu
dCA9IDY7CisgICAgLyoqCisgICAgICogSGluZ2UtSm9pbnQgMiB0eXBlCisgICAgICovCisgICAg
UGh5c2ljc0pvaW50LkhpbmdlMkpvaW50ID0gUGh5c2ljc0pvaW50LldoZWVsSm9pbnQ7CisgICAg
Ly9DYW5ub24KKyAgICAvKioKKyAgICAgKiBQb2ludCB0byBQb2ludCBKb2ludCB0eXBlLiAgU2lt
aWxhciB0byBhIEJhbGwtSm9pbnQuICBEaWZmZXJlbnQgaW4gcGFyYW1ldGVycworICAgICAqLwor
ICAgIFBoeXNpY3NKb2ludC5Qb2ludFRvUG9pbnRKb2ludCA9IDg7CisgICAgLy9DYW5ub24gb25s
eSBhdCB0aGUgbW9tZW50CisgICAgLyoqCisgICAgICogU3ByaW5nLUpvaW50IHR5cGUKKyAgICAg
Ki8KKyAgICBQaHlzaWNzSm9pbnQuU3ByaW5nSm9pbnQgPSA5OworICAgIC8qKgorICAgICAqIExv
Y2stSm9pbnQgdHlwZQorICAgICAqLworICAgIFBoeXNpY3NKb2ludC5Mb2NrSm9pbnQgPSAxMDsK
KyAgICByZXR1cm4gUGh5c2ljc0pvaW50OworfSgpKTsKKworLyoqCisgKiBBIGNsYXNzIHJlcHJl
c2VudGluZyBhIHBoeXNpY3MgZGlzdGFuY2Ugam9pbnQKKyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vdXNpbmdfdGhlX3BoeXNpY3NfZW5naW5lCisgKi8KK3ZhciBEaXN0
YW5jZUpvaW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKERpc3RhbmNlSm9pbnQs
IF9zdXBlcik7CisgICAgLyoqCisgICAgICoKKyAgICAgKiBAcGFyYW0gam9pbnREYXRhIFRoZSBk
YXRhIGZvciB0aGUgRGlzdGFuY2UtSm9pbnQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBEaXN0YW5j
ZUpvaW50KGpvaW50RGF0YSkgeworICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgUGh5
c2ljc0pvaW50LkRpc3RhbmNlSm9pbnQsIGpvaW50RGF0YSkgfHwgdGhpczsKKyAgICB9CisgICAg
LyoqCisgICAgICogVXBkYXRlIHRoZSBwcmVkZWZpbmVkIGRpc3RhbmNlLgorICAgICAqIEBwYXJh
bSBtYXhEaXN0YW5jZSBUaGUgbWF4aW11bSBwcmVmZXJyZWQgZGlzdGFuY2UKKyAgICAgKiBAcGFy
YW0gbWluRGlzdGFuY2UgVGhlIG1pbmltdW0gcHJlZmVycmVkIGRpc3RhbmNlCisgICAgICovCisg
ICAgRGlzdGFuY2VKb2ludC5wcm90b3R5cGUudXBkYXRlRGlzdGFuY2UgPSBmdW5jdGlvbiAobWF4
RGlzdGFuY2UsIG1pbkRpc3RhbmNlKSB7CisgICAgICAgIHRoaXMuX3BoeXNpY3NQbHVnaW4udXBk
YXRlRGlzdGFuY2VKb2ludCh0aGlzLCBtYXhEaXN0YW5jZSwgbWluRGlzdGFuY2UpOworICAgIH07
CisgICAgcmV0dXJuIERpc3RhbmNlSm9pbnQ7Cit9KFBoeXNpY3NKb2ludCkpOworCisvKioKKyAq
IFJlcHJlc2VudHMgYSBNb3Rvci1FbmFibGVkIEpvaW50CisgKiBAc2VlIGh0dHBzOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL3VzaW5nX3RoZV9waHlzaWNzX2VuZ2luZQorICovCit2YXIgTW90
b3JFbmFibGVkSm9pbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTW90b3JFbmFi
bGVkSm9pbnQsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIE1vdG9y
LUVuYWJsZWQgSm9pbnQKKyAgICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgam9pbnQK
KyAgICAgKiBAcGFyYW0gam9pbnREYXRhIFRoZSBwaHlzaWNhIGpvaW50IGRhdGEgZm9yIHRoZSBq
b2ludAorICAgICAqLworICAgIGZ1bmN0aW9uIE1vdG9yRW5hYmxlZEpvaW50KHR5cGUsIGpvaW50
RGF0YSkgeworICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgdHlwZSwgam9pbnREYXRh
KSB8fCB0aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIG1vdG9yIHZhbHVlcy4K
KyAgICAgKiBBdHRlbnRpb24sIHRoaXMgZnVuY3Rpb24gaXMgcGx1Z2luIHNwZWNpZmljLiBFbmdp
bmVzIHdvbid0IHJlYWN0IDEwMCUgdGhlIHNhbWUuCisgICAgICogQHBhcmFtIGZvcmNlIHRoZSBm
b3JjZSB0byBhcHBseQorICAgICAqIEBwYXJhbSBtYXhGb3JjZSBtYXggZm9yY2UgZm9yIHRoaXMg
bW90b3IuCisgICAgICovCisgICAgTW90b3JFbmFibGVkSm9pbnQucHJvdG90eXBlLnNldE1vdG9y
ID0gZnVuY3Rpb24gKGZvcmNlLCBtYXhGb3JjZSkgeworICAgICAgICB0aGlzLl9waHlzaWNzUGx1
Z2luLnNldE1vdG9yKHRoaXMsIGZvcmNlIHx8IDAsIG1heEZvcmNlKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFNldCB0aGUgbW90b3IncyBsaW1pdHMuCisgICAgICogQXR0ZW50aW9uLCB0aGlz
IGZ1bmN0aW9uIGlzIHBsdWdpbiBzcGVjaWZpYy4gRW5naW5lcyB3b24ndCByZWFjdCAxMDAlIHRo
ZSBzYW1lLgorICAgICAqIEBwYXJhbSB1cHBlckxpbWl0IFRoZSB1cHBlciBsaW1pdCBvZiB0aGUg
bW90b3IKKyAgICAgKiBAcGFyYW0gbG93ZXJMaW1pdCBUaGUgbG93ZXIgbGltaXQgb2YgdGhlIG1v
dG9yCisgICAgICovCisgICAgTW90b3JFbmFibGVkSm9pbnQucHJvdG90eXBlLnNldExpbWl0ID0g
ZnVuY3Rpb24gKHVwcGVyTGltaXQsIGxvd2VyTGltaXQpIHsKKyAgICAgICAgdGhpcy5fcGh5c2lj
c1BsdWdpbi5zZXRMaW1pdCh0aGlzLCB1cHBlckxpbWl0LCBsb3dlckxpbWl0KTsKKyAgICB9Owor
ICAgIHJldHVybiBNb3RvckVuYWJsZWRKb2ludDsKK30oUGh5c2ljc0pvaW50KSk7CisKKy8qKgor
ICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc2luZ2xlIHBoeXNpY3MgSGluZ2UtSm9pbnQKKyAq
IEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vdXNpbmdfdGhlX3BoeXNpY3Nf
ZW5naW5lCisgKi8KK3ZhciBIaW5nZUpvaW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9z
dXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5k
cyJdKEhpbmdlSm9pbnQsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhl
IEhpbmdlLUpvaW50CisgICAgICogQHBhcmFtIGpvaW50RGF0YSBUaGUgam9pbnQgZGF0YSBmb3Ig
dGhlIEhpbmdlLUpvaW50CisgICAgICovCisgICAgZnVuY3Rpb24gSGluZ2VKb2ludChqb2ludERh
dGEpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIFBoeXNpY3NKb2ludC5IaW5n
ZUpvaW50LCBqb2ludERhdGEpIHx8IHRoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIFNldCB0
aGUgbW90b3IgdmFsdWVzLgorICAgICAqIEF0dGVudGlvbiwgdGhpcyBmdW5jdGlvbiBpcyBwbHVn
aW4gc3BlY2lmaWMuIEVuZ2luZXMgd29uJ3QgcmVhY3QgMTAwJSB0aGUgc2FtZS4KKyAgICAgKiBA
cGFyYW0ge251bWJlcn0gZm9yY2UgdGhlIGZvcmNlIHRvIGFwcGx5CisgICAgICogQHBhcmFtIHtu
dW1iZXJ9IG1heEZvcmNlIG1heCBmb3JjZSBmb3IgdGhpcyBtb3Rvci4KKyAgICAgKi8KKyAgICBI
aW5nZUpvaW50LnByb3RvdHlwZS5zZXRNb3RvciA9IGZ1bmN0aW9uIChmb3JjZSwgbWF4Rm9yY2Up
IHsKKyAgICAgICAgdGhpcy5fcGh5c2ljc1BsdWdpbi5zZXRNb3Rvcih0aGlzLCBmb3JjZSB8fCAw
LCBtYXhGb3JjZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIG1vdG9yJ3MgbGlt
aXRzLgorICAgICAqIEF0dGVudGlvbiwgdGhpcyBmdW5jdGlvbiBpcyBwbHVnaW4gc3BlY2lmaWMu
IEVuZ2luZXMgd29uJ3QgcmVhY3QgMTAwJSB0aGUgc2FtZS4KKyAgICAgKiBAcGFyYW0gdXBwZXJM
aW1pdCBUaGUgdXBwZXIgbGltaXQgb2YgdGhlIG1vdG9yCisgICAgICogQHBhcmFtIGxvd2VyTGlt
aXQgVGhlIGxvd2VyIGxpbWl0IG9mIHRoZSBtb3RvcgorICAgICAqLworICAgIEhpbmdlSm9pbnQu
cHJvdG90eXBlLnNldExpbWl0ID0gZnVuY3Rpb24gKHVwcGVyTGltaXQsIGxvd2VyTGltaXQpIHsK
KyAgICAgICAgdGhpcy5fcGh5c2ljc1BsdWdpbi5zZXRMaW1pdCh0aGlzLCB1cHBlckxpbWl0LCBs
b3dlckxpbWl0KTsKKyAgICB9OworICAgIHJldHVybiBIaW5nZUpvaW50OworfShNb3RvckVuYWJs
ZWRKb2ludCkpOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIGR1YWwgaGluZ2Ug
cGh5c2ljcyBqb2ludCAoc2FtZSBhcyB3aGVlbCBqb2ludCkKKyAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vdXNpbmdfdGhlX3BoeXNpY3NfZW5naW5lCisgKi8KK3ZhciBI
aW5nZTJKb2ludCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShIaW5nZTJKb2ludCwg
X3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUgSGluZ2UyLUpvaW50Cisg
ICAgICogQHBhcmFtIGpvaW50RGF0YSBUaGUgam9pbnQgZGF0YSBmb3IgdGhlIEhpbmdlMi1Kb2lu
dAorICAgICAqLworICAgIGZ1bmN0aW9uIEhpbmdlMkpvaW50KGpvaW50RGF0YSkgeworICAgICAg
ICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgUGh5c2ljc0pvaW50LkhpbmdlMkpvaW50LCBqb2lu
dERhdGEpIHx8IHRoaXM7CisgICAgfQorICAgIC8qKgorICAgICogU2V0IHRoZSBtb3RvciB2YWx1
ZXMuCisgICAgKiBBdHRlbnRpb24sIHRoaXMgZnVuY3Rpb24gaXMgcGx1Z2luIHNwZWNpZmljLiBF
bmdpbmVzIHdvbid0IHJlYWN0IDEwMCUgdGhlIHNhbWUuCisgICAgKiBAcGFyYW0ge251bWJlcn0g
dGFyZ2V0U3BlZWQgdGhlIHNwZWVkIHRoZSBtb3RvciBpcyB0byByZWFjaAorICAgICogQHBhcmFt
IHtudW1iZXJ9IG1heEZvcmNlIG1heCBmb3JjZSBmb3IgdGhpcyBtb3Rvci4KKyAgICAqIEBwYXJh
bSB7bW90b3JJbmRleH0gdGhlIG1vdG9yJ3MgaW5kZXgsIDAgb3IgMS4KKyAgICAqLworICAgIEhp
bmdlMkpvaW50LnByb3RvdHlwZS5zZXRNb3RvciA9IGZ1bmN0aW9uICh0YXJnZXRTcGVlZCwgbWF4
Rm9yY2UsIG1vdG9ySW5kZXgpIHsKKyAgICAgICAgaWYgKG1vdG9ySW5kZXggPT09IHZvaWQgMCkg
eyBtb3RvckluZGV4ID0gMDsgfQorICAgICAgICB0aGlzLl9waHlzaWNzUGx1Z2luLnNldE1vdG9y
KHRoaXMsIHRhcmdldFNwZWVkIHx8IDAsIG1heEZvcmNlLCBtb3RvckluZGV4KTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNldCB0aGUgbW90b3IgbGltaXRzLgorICAgICAqIEF0dGVudGlvbiwg
dGhpcyBmdW5jdGlvbiBpcyBwbHVnaW4gc3BlY2lmaWMuIEVuZ2luZXMgd29uJ3QgcmVhY3QgMTAw
JSB0aGUgc2FtZS4KKyAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXJMaW1pdCB0aGUgdXBwZXIg
bGltaXQKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbG93ZXJMaW1pdCBsb3dlciBsaW1pdAorICAg
ICAqIEBwYXJhbSB7bW90b3JJbmRleH0gdGhlIG1vdG9yJ3MgaW5kZXgsIDAgb3IgMS4KKyAgICAg
Ki8KKyAgICBIaW5nZTJKb2ludC5wcm90b3R5cGUuc2V0TGltaXQgPSBmdW5jdGlvbiAodXBwZXJM
aW1pdCwgbG93ZXJMaW1pdCwgbW90b3JJbmRleCkgeworICAgICAgICBpZiAobW90b3JJbmRleCA9
PT0gdm9pZCAwKSB7IG1vdG9ySW5kZXggPSAwOyB9CisgICAgICAgIHRoaXMuX3BoeXNpY3NQbHVn
aW4uc2V0TGltaXQodGhpcywgdXBwZXJMaW1pdCwgbG93ZXJMaW1pdCwgbW90b3JJbmRleCk7Cisg
ICAgfTsKKyAgICByZXR1cm4gSGluZ2UySm9pbnQ7Cit9KE1vdG9yRW5hYmxlZEpvaW50KSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGh5c2ljcy9waHlzaWNzUmF5Y2FzdFJlc3VsdC50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vUGh5c2ljcy9waHlzaWNzUmF5Y2FzdFJlc3VsdC50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQ
aHlzaWNzUmF5Y2FzdFJlc3VsdCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJQaHlzaWNzUmF5Y2FzdFJlc3VsdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGh5c2ljc1JheWNh
c3RSZXN1bHQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKworLyoq
CisgKiBIb2xkcyB0aGUgZGF0YSBmb3IgdGhlIHJheWNhc3QgcmVzdWx0CisgKiBAc2VlIGh0dHBz
Oi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3VzaW5nX3RoZV9waHlzaWNzX2VuZ2luZQorICov
Cit2YXIgUGh5c2ljc1JheWNhc3RSZXN1bHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgZnVuY3Rpb24gUGh5c2ljc1JheWNhc3RSZXN1bHQoKSB7CisgICAgICAgIHRoaXMuX2hh
c0hpdCA9IGZhbHNlOworICAgICAgICB0aGlzLl9oaXREaXN0YW5jZSA9IDA7CisgICAgICAgIHRo
aXMuX2hpdE5vcm1hbFdvcmxkID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2hpdFBvaW50V29y
bGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVj
dG9yMyJdLlplcm8oKTsKKyAgICAgICAgdGhpcy5fcmF5RnJvbVdvcmxkID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7Cisg
ICAgICAgIHRoaXMuX3JheVRvV29ybGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICB9CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFBoeXNpY3NSYXljYXN0UmVzdWx0LnByb3RvdHlwZSwgImhhc0hpdCIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgaWYgdGhlcmUgd2FzIGEgaGl0CisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9oYXNIaXQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQ
aHlzaWNzUmF5Y2FzdFJlc3VsdC5wcm90b3R5cGUsICJoaXREaXN0YW5jZSIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGhpdAorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
aGl0RGlzdGFuY2U7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShQaHlzaWNzUmF5Y2FzdFJlc3VsdC5wcm90b3R5cGUsICJoaXROb3JtYWxXb3JsZCIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGhpdCBub3JtYWwvZGlyZWN0aW9uIGluIHRo
ZSB3b3JsZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5faGl0Tm9ybWFsV29ybGQ7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQaHlzaWNzUmF5Y2FzdFJlc3VsdC5wcm90b3R5cGUsICJo
aXRQb2ludFdvcmxkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgaGl0IHBv
aW50IGluIHRoZSB3b3JsZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faGl0UG9pbnRXb3JsZDsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBoeXNpY3NSYXljYXN0UmVzdWx0LnByb3Rv
dHlwZSwgInJheUZyb21Xb3JsZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhl
IHJheSAic3RhcnQgcG9pbnQiIG9mIHRoZSByYXkgaW4gdGhlIHdvcmxkCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yYXlG
cm9tV29ybGQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQ
aHlzaWNzUmF5Y2FzdFJlc3VsdC5wcm90b3R5cGUsICJyYXlUb1dvcmxkIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyB0aGUgcmF5ICJlbmQgcG9pbnQiIG9mIHRoZSByYXkgaW4gdGhl
IHdvcmxkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9yYXlUb1dvcmxkOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioK
KyAgICAgKiBTZXRzIHRoZSBoaXQgZGF0YSAobm9ybWFsICYgcG9pbnQgaW4gd29ybGQgc3BhY2Up
CisgICAgICogQHBhcmFtIGhpdE5vcm1hbFdvcmxkIGRlZmluZXMgdGhlIG5vcm1hbCBpbiB3b3Js
ZCBzcGFjZQorICAgICAqIEBwYXJhbSBoaXRQb2ludFdvcmxkIGRlZmluZXMgdGhlIHBvaW50IGlu
IHdvcmxkIHNwYWNlCisgICAgICovCisgICAgUGh5c2ljc1JheWNhc3RSZXN1bHQucHJvdG90eXBl
LnNldEhpdERhdGEgPSBmdW5jdGlvbiAoaGl0Tm9ybWFsV29ybGQsIGhpdFBvaW50V29ybGQpIHsK
KyAgICAgICAgdGhpcy5faGFzSGl0ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5faGl0Tm9ybWFsV29y
bGQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlZlY3RvcjMiXShoaXROb3JtYWxXb3JsZC54LCBoaXROb3JtYWxXb3JsZC55LCBoaXROb3JtYWxX
b3JsZC56KTsKKyAgICAgICAgdGhpcy5faGl0UG9pbnRXb3JsZCA9IG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKGhpdFBvaW50V29y
bGQueCwgaGl0UG9pbnRXb3JsZC55LCBoaXRQb2ludFdvcmxkLnopOworICAgIH07CisgICAgLyoq
CisgICAgICogU2V0cyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgc3RhcnQgcG9pbnQgdG8gdGhlIGhp
dCBwb2ludAorICAgICAqIEBwYXJhbSBkaXN0YW5jZQorICAgICAqLworICAgIFBoeXNpY3NSYXlj
YXN0UmVzdWx0LnByb3RvdHlwZS5zZXRIaXREaXN0YW5jZSA9IGZ1bmN0aW9uIChkaXN0YW5jZSkg
eworICAgICAgICB0aGlzLl9oaXREaXN0YW5jZSA9IGRpc3RhbmNlOworICAgIH07CisgICAgLyoq
CisgICAgICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2UgbWFudWFsbHkKKyAgICAgKi8KKyAgICBQ
aHlzaWNzUmF5Y2FzdFJlc3VsdC5wcm90b3R5cGUuY2FsY3VsYXRlSGl0RGlzdGFuY2UgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2hpdERpc3RhbmNlID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5EaXN0YW5jZSh0aGlzLl9y
YXlGcm9tV29ybGQsIHRoaXMuX2hpdFBvaW50V29ybGQpOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmVzZXRzIGFsbCB0aGUgdmFsdWVzIHRvIGRlZmF1bHQKKyAgICAgKiBAcGFyYW0gZnJvbSBU
aGUgZnJvbSBwb2ludCBvbiB3b3JsZCBzcGFjZQorICAgICAqIEBwYXJhbSB0byBUaGUgdG8gcG9p
bnQgb24gd29ybGQgc3BhY2UKKyAgICAgKi8KKyAgICBQaHlzaWNzUmF5Y2FzdFJlc3VsdC5wcm90
b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHsKKyAgICAgICAgaWYgKGZyb20gPT09
IHZvaWQgMCkgeyBmcm9tID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7IH0KKyAgICAgICAgaWYgKHRvID09PSB2b2lkIDAp
IHsgdG8gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLlplcm8oKTsgfQorICAgICAgICB0aGlzLl9yYXlGcm9tV29ybGQgPSBmcm9tOwor
ICAgICAgICB0aGlzLl9yYXlUb1dvcmxkID0gdG87CisgICAgICAgIHRoaXMuX2hhc0hpdCA9IGZh
bHNlOworICAgICAgICB0aGlzLl9oaXREaXN0YW5jZSA9IDA7CisgICAgICAgIHRoaXMuX2hpdE5v
cm1hbFdvcmxkID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2hpdFBvaW50V29ybGQgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlpl
cm8oKTsKKyAgICB9OworICAgIHJldHVybiBQaHlzaWNzUmF5Y2FzdFJlc3VsdDsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9Q
aXBlbGluZXMvZGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvUGlwZWxpbmVz
L2RlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZSAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZTsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIv
dHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy9sb2dnZXIgKi8g
Ii4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIu
L01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9Fbmdp
bmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9MYXllcnNfZ2xv
d0xheWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9MYXllcnMvZ2xvd0xheWVyICovICIuL0xheWVycy9nbG93TGF5ZXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19zaGFycGVuUG9zdFBy
b2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uLy4uL1Bvc3RQcm9jZXNzZXMvc2hhcnBlblBvc3RQcm9jZXNzICovICIuL1Bvc3RQ
cm9jZXNzZXMvc2hhcnBlblBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1Bvc3RQcm9jZXNzZXNfaW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQ
cm9jZXNzZXMvaW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9p
bWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9Qb3N0UHJvY2Vzc2VzX2Nocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vUG9z
dFByb2Nlc3Nlcy9jaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nl
c3Nlcy9jaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19ncmFpblBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9Qb3N0UHJv
Y2Vzc2VzL2dyYWluUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9ncmFpblBvc3RQcm9j
ZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfZnhhYVBv
c3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9meGFhUG9zdFByb2Nlc3MgKi8gIi4vUG9z
dFByb2Nlc3Nlcy9meGFhUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlclBp
cGVsaW5lICovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5k
ZXJQaXBlbGluZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2Vz
X1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vUG9zdFByb2Nl
c3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCAqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0LnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfZGVwdGhPZkZpZWxkRWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vLi4vUG9zdFByb2Nlc3Nlcy9kZXB0aE9mRmllbGRFZmZlY3QgKi8gIi4vUG9zdFByb2Nlc3Nl
cy9kZXB0aE9mRmllbGRFZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9z
dFByb2Nlc3Nlc19ibG9vbUVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQcm9jZXNzZXMvYmxvb21FZmZlY3Qg
Ki8gIi4vUG9zdFByb2Nlc3Nlcy9ibG9vbUVmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2Mv
dHlwZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5l
U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5lU3Rv
cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQ
aXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vLi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlclBpcGVs
aW5lTWFuYWdlclNjZW5lQ29tcG9uZW50ICovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxp
bmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVudC50cyIpOwor
CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworLyoqCisgKiBUaGUgZGVmYXVsdCBy
ZW5kZXJpbmcgcGlwZWxpbmUgY2FuIGJlIGFkZGVkIHRvIGEgc2NlbmUgdG8gYXBwbHkgY29tbW9u
IHBvc3QgcHJvY2Vzc2luZyBlZmZlY3RzIHN1Y2ggYXMgYW50aS1hbGlhc2luZyBvciBkZXB0aCBv
ZiBmaWVsZC4KKyAqIFNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by91c2luZ19k
ZWZhdWx0X3JlbmRlcmluZ19waXBlbGluZQorICovCit2YXIgRGVmYXVsdFJlbmRlcmluZ1BpcGVs
aW5lID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKERlZmF1bHRSZW5kZXJpbmdQaXBl
bGluZSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBAY29uc3RydWN0b3IKKyAgICAgKiBAcGFy
YW0gbmFtZSAtIFRoZSByZW5kZXJpbmcgcGlwZWxpbmUgbmFtZSAoZGVmYXVsdDogIiIpCisgICAg
ICogQHBhcmFtIGhkciAtIElmIGhpZ2ggZHluYW1pYyByYW5nZSB0ZXh0dXJlcyBzaG91bGQgYmUg
dXNlZCAoZGVmYXVsdDogdHJ1ZSkKKyAgICAgKiBAcGFyYW0gc2NlbmUgLSBUaGUgc2NlbmUgbGlu
a2VkIHRvIHRoaXMgcGlwZWxpbmUgKGRlZmF1bHQ6IHRoZSBsYXN0IGNyZWF0ZWQgc2NlbmUpCisg
ICAgICogQHBhcmFtIGNhbWVyYXMgLSBUaGUgYXJyYXkgb2YgY2FtZXJhcyB0aGF0IHRoZSByZW5k
ZXJpbmcgcGlwZWxpbmUgd2lsbCBiZSBhdHRhY2hlZCB0byAoZGVmYXVsdDogc2NlbmUuY2FtZXJh
cykKKyAgICAgKiBAcGFyYW0gYXV0b21hdGljQnVpbGQgLSBpZiBmYWxzZSwgeW91IHdpbGwgaGF2
ZSB0byBtYW51YWxseSBjYWxsIHByZXBhcmUoKSB0byB1cGRhdGUgdGhlIHBpcGVsaW5lIChkZWZh
dWx0OiB0cnVlKQorICAgICAqLworICAgIGZ1bmN0aW9uIERlZmF1bHRSZW5kZXJpbmdQaXBlbGlu
ZShuYW1lLCBoZHIsIHNjZW5lLCBjYW1lcmFzLCBhdXRvbWF0aWNCdWlsZCkgeworICAgICAgICBp
ZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSAiIjsgfQorICAgICAgICBpZiAoaGRyID09PSB2
b2lkIDApIHsgaGRyID0gdHJ1ZTsgfQorICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBz
Y2VuZSA9IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9f
WyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7IH0KKyAgICAgICAgaWYgKGF1dG9tYXRp
Y0J1aWxkID09PSB2b2lkIDApIHsgYXV0b21hdGljQnVpbGQgPSB0cnVlOyB9CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjZW5lLmdldEVuZ2luZSgpLCBuYW1lKSB8fCB0
aGlzOworICAgICAgICBfdGhpcy5fY2FtZXJhc1RvQmVBdHRhY2hlZCA9IFtdOworICAgICAgICAv
KioKKyAgICAgICAgICogSUQgb2YgdGhlIHNoYXJwZW4gcG9zdCBwcm9jZXNzLAorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuU2hhcnBlblBvc3RQcm9jZXNzSWQgPSAiU2hhcnBlblBvc3RQcm9j
ZXNzRWZmZWN0IjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgICog
SUQgb2YgdGhlIGltYWdlIHByb2Nlc3NpbmcgcG9zdCBwcm9jZXNzOworICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMuSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3NJZCA9ICJJbWFnZVByb2Nlc3Np
bmdQb3N0UHJvY2Vzc0VmZmVjdCI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaWdub3JlCisg
ICAgICAgICAqIElEIG9mIHRoZSBGYXN0IEFwcHJveGltYXRlIEFudGktQWxpYXNpbmcgcG9zdCBw
cm9jZXNzOworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuRnhhYVBvc3RQcm9jZXNzSWQgPSAi
RnhhYVBvc3RQcm9jZXNzRWZmZWN0IjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElEIG9mIHRo
ZSBjaHJvbWF0aWMgYWJlcnJhdGlvbiBwb3N0IHByb2Nlc3MsCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5DaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3NJZCA9ICJDaHJvbWF0aWNBYmVy
cmF0aW9uUG9zdFByb2Nlc3NFZmZlY3QiOworICAgICAgICAvKioKKyAgICAgICAgICogSUQgb2Yg
dGhlIGdyYWluIHBvc3QgcHJvY2VzcworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuR3JhaW5Q
b3N0UHJvY2Vzc0lkID0gIkdyYWluUG9zdFByb2Nlc3NFZmZlY3QiOworICAgICAgICAvKioKKyAg
ICAgICAgICogR2xvdyBwb3N0IHByb2Nlc3Mgd2hpY2ggYWRkcyBhIGdsb3cgdG8gZW1pc3NpdmUg
YXJlYXMgb2YgdGhlIGltYWdlCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fZ2xvd0xheWVy
ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFuaW1hdGlvbnMgd2hpY2ggY2FuIGJl
IHVzZWQgdG8gdHdlYWsgc2V0dGluZ3Mgb3ZlciBhIHBlcmlvZCBvZiB0aW1lCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5hbmltYXRpb25zID0gW107CisgICAgICAgIF90aGlzLl9pbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAvLyBWYWx1ZXMK
KyAgICAgICAgX3RoaXMuX3NoYXJwZW5FbmFibGVkID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9i
bG9vbUVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2RlcHRoT2ZGaWVsZEVuYWJsZWQg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2RlcHRoT2ZGaWVsZEJsdXJMZXZlbCA9IF9Qb3N0UHJv
Y2Vzc2VzX2RlcHRoT2ZGaWVsZEVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1si
RGVwdGhPZkZpZWxkRWZmZWN0Qmx1ckxldmVsIl0uTG93OworICAgICAgICBfdGhpcy5fZnhhYUVu
YWJsZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2ltYWdlUHJvY2Vzc2luZ0VuYWJsZWQgPSB0
cnVlOworICAgICAgICBfdGhpcy5fYmxvb21TY2FsZSA9IDAuNTsKKyAgICAgICAgX3RoaXMuX2No
cm9tYXRpY0FiZXJyYXRpb25FbmFibGVkID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9ncmFpbkVu
YWJsZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2J1aWxkQWxsb3dlZCA9IHRydWU7CisgICAg
ICAgIF90aGlzLl9yZXNpemVPYnNlcnZlciA9IG51bGw7CisgICAgICAgIF90aGlzLl9oYXJkd2Fy
ZVNjYWxlTGV2ZWwgPSAxLjA7CisgICAgICAgIF90aGlzLl9ibG9vbUtlcm5lbCA9IDY0OworICAg
ICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIHRoZSB3ZWlnaHQgb2YgdGhlIGJsb29tIGlu
IHRoZSBmaW5hbCByZW5kZXJpbmcKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9ibG9vbVdl
aWdodCA9IDAuMTU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGx1bWEg
dGhyZXNob2xkIGZvciB0aGUgYXJlYSB0aGF0IHdpbGwgYmUgYmx1cnJlZCBieSB0aGUgYmxvb20K
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9ibG9vbVRocmVzaG9sZCA9IDAuOTsKKyAgICAg
ICAgX3RoaXMuX3NhbXBsZXMgPSAxOworICAgICAgICBfdGhpcy5faGFzQ2xlYXJlZCA9IGZhbHNl
OworICAgICAgICBfdGhpcy5fcHJldlBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgX3RoaXMu
X3ByZXZQcmV2UG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICBfdGhpcy5fZGVwdGhPZkZpZWxk
U2NlbmVPYnNlcnZlciA9IG51bGw7CisgICAgICAgIF90aGlzLl9jYW1lcmFzID0gY2FtZXJhcyB8
fCBzY2VuZS5jYW1lcmFzOworICAgICAgICBfdGhpcy5fY2FtZXJhcyA9IF90aGlzLl9jYW1lcmFz
LnNsaWNlKCk7CisgICAgICAgIF90aGlzLl9jYW1lcmFzVG9CZUF0dGFjaGVkID0gX3RoaXMuX2Nh
bWVyYXMuc2xpY2UoKTsKKyAgICAgICAgX3RoaXMuX2J1aWxkQWxsb3dlZCA9IGF1dG9tYXRpY0J1
aWxkOworICAgICAgICAvLyBJbml0aWFsaXplCisgICAgICAgIF90aGlzLl9zY2VuZSA9IHNjZW5l
OworICAgICAgICB2YXIgY2FwcyA9IF90aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5nZXRDYXBzKCk7
CisgICAgICAgIF90aGlzLl9oZHIgPSBoZHIgJiYgKGNhcHMudGV4dHVyZUhhbGZGbG9hdFJlbmRl
ciB8fCBjYXBzLnRleHR1cmVGbG9hdFJlbmRlcik7CisgICAgICAgIC8vIE1pc2MKKyAgICAgICAg
aWYgKF90aGlzLl9oZHIpIHsKKyAgICAgICAgICAgIGlmIChjYXBzLnRleHR1cmVIYWxmRmxvYXRS
ZW5kZXIpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fZGVmYXVsdFBpcGVsaW5lVGV4dHVyZVR5
cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfSEFMRl9GTE9BVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKGNhcHMudGV4dHVyZUZsb2F0UmVuZGVyKSB7CisgICAgICAgICAgICAgICAg
X3RoaXMuX2RlZmF1bHRQaXBlbGluZVRleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FU
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
X3RoaXMuX2RlZmF1bHRQaXBlbGluZVRleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lH
TkVEX0lOVDsKKyAgICAgICAgfQorICAgICAgICAvLyBBdHRhY2gKKyAgICAgICAgc2NlbmUucG9z
dFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIuYWRkUGlwZWxpbmUoX3RoaXMpOworICAgICAg
ICB2YXIgZW5naW5lID0gX3RoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICAvLyBDcmVh
dGUgcG9zdCBwcm9jZXNzZXMgYmVmb3JlIGhhbmQgc28gdGhleSBjYW4gYmUgbW9kaWZpZWQgYmVm
b3JlIGVuYWJsZWQuCisgICAgICAgIC8vIEJsb2NrIGNvbXBpbGF0aW9uIGZsYWcgaXMgc2V0IHRv
IHRydWUgdG8gYXZvaWQgY29tcGlsYXRpb24gcHJpb3IgdG8gdXNlLCB0aGVzZSB3aWxsIGJlIHVw
ZGF0ZWQgb24gZmlyc3QgdXNlIGluIGJ1aWxkIHBpcGVsaW5lLgorICAgICAgICBfdGhpcy5zaGFy
cGVuID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3NoYXJwZW5Qb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fWyJTaGFycGVuUG9zdFByb2Nlc3MiXSgic2hhcnBlbiIsIDEuMCwgbnVs
bCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIGVuZ2luZSwgZmFsc2UsIF90aGlz
Ll9kZWZhdWx0UGlwZWxpbmVUZXh0dXJlVHlwZSwgdHJ1ZSk7CisgICAgICAgIF90aGlzLl9zaGFy
cGVuRWZmZWN0ID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNz
UmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJQb3N0UHJvY2Vzc1Jl
bmRlckVmZmVjdCJdKGVuZ2luZSwgX3RoaXMuU2hhcnBlblBvc3RQcm9jZXNzSWQsIGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIF90aGlzLnNoYXJwZW47IH0sIHRydWUpOworICAgICAgICBfdGhpcy5kZXB0
aE9mRmllbGQgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfZGVwdGhPZkZpZWxkRWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xM19fWyJEZXB0aE9mRmllbGRFZmZlY3QiXShfdGhpcy5fc2NlbmUs
IG51bGwsIF90aGlzLl9kZXB0aE9mRmllbGRCbHVyTGV2ZWwsIF90aGlzLl9kZWZhdWx0UGlwZWxp
bmVUZXh0dXJlVHlwZSwgdHJ1ZSk7CisgICAgICAgIF90aGlzLmJsb29tID0gbmV3IF9Qb3N0UHJv
Y2Vzc2VzX2Jsb29tRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJCbG9vbUVm
ZmVjdCJdKF90aGlzLl9zY2VuZSwgX3RoaXMuX2Jsb29tU2NhbGUsIF90aGlzLl9ibG9vbVdlaWdo
dCwgX3RoaXMuYmxvb21LZXJuZWwsIF90aGlzLl9kZWZhdWx0UGlwZWxpbmVUZXh0dXJlVHlwZSwg
dHJ1ZSk7CisgICAgICAgIF90aGlzLmNocm9tYXRpY0FiZXJyYXRpb24gPSBuZXcgX1Bvc3RQcm9j
ZXNzZXNfY2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIkNocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2VzcyJdKCJDaHJvbWF0aWNBYmVy
cmF0aW9uIiwgZW5naW5lLmdldFJlbmRlcldpZHRoKCksIGVuZ2luZS5nZXRSZW5kZXJIZWlnaHQo
KSwgMS4wLCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgZW5naW5lLCBm
YWxzZSwgX3RoaXMuX2RlZmF1bHRQaXBlbGluZVRleHR1cmVUeXBlLCB0cnVlKTsKKyAgICAgICAg
X3RoaXMuX2Nocm9tYXRpY0FiZXJyYXRpb25FZmZlY3QgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfUmVu
ZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEyX19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oZW5naW5lLCBfdGhpcy5DaHJvbWF0
aWNBYmVycmF0aW9uUG9zdFByb2Nlc3NJZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuY2hy
b21hdGljQWJlcnJhdGlvbjsgfSwgdHJ1ZSk7CisgICAgICAgIF90aGlzLmdyYWluID0gbmV3IF9Q
b3N0UHJvY2Vzc2VzX2dyYWluUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siR3JhaW5Qb3N0UHJvY2VzcyJdKCJHcmFpbiIsIDEuMCwgbnVsbCwgX01hdGVyaWFsc19UZXh0
dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRleHR1cmUiXS5CSUxJ
TkVBUl9TQU1QTElOR01PREUsIGVuZ2luZSwgZmFsc2UsIF90aGlzLl9kZWZhdWx0UGlwZWxpbmVU
ZXh0dXJlVHlwZSwgdHJ1ZSk7CisgICAgICAgIF90aGlzLl9ncmFpbkVmZmVjdCA9IG5ldyBfUG9z
dFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTJfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShlbmdpbmUs
IF90aGlzLkdyYWluUG9zdFByb2Nlc3NJZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuZ3Jh
aW47IH0sIHRydWUpOworICAgICAgICBfdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBlbmdpbmUub25S
ZXNpemVPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5faGFy
ZHdhcmVTY2FsZUxldmVsID0gZW5naW5lLmdldEhhcmR3YXJlU2NhbGluZ0xldmVsKCk7CisgICAg
ICAgICAgICBfdGhpcy5ibG9vbUtlcm5lbCA9IF90aGlzLmJsb29tS2VybmVsOworICAgICAgICB9
KTsKKyAgICAgICAgX3RoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25PYnNlcnZlciA9
IF90aGlzLl9zY2VuZS5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLm9uVXBkYXRlUGFyYW1l
dGVycy5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMuYmxvb20uX2Rvd25zY2Fs
ZS5fZXhwb3N1cmUgPSBfdGhpcy5fc2NlbmUuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5l
eHBvc3VyZTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLl9idWlsZFBpcGVsaW5lKCk7Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERl
ZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJzY2VuZSIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgYWN0aXZlIHNjZW5lCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERlZmF1bHRSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUsICJzaGFycGVuRW5hYmxlZCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcnBlbkVuYWJsZWQ7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgc2hhcnBl
biBwcm9jZXNzIGZyb20gdGhlIHBpcGVsaW5lCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uIChlbmFibGVkKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fc2hhcnBlbkVuYWJsZWQg
PT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl9zaGFycGVuRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgICAgICAgICB0
aGlzLl9idWlsZFBpcGVsaW5lKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiYmxvb21LZXJu
ZWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhl
IGJsb29tIGJsdXIga2VybmVsLCByZWxhdGl2ZSB0byB0aGUgZmluYWwgb3V0cHV0IHNpemUKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2Jsb29tS2VybmVsOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYmxvb21LZXJuZWwgPSB2YWx1ZTsKKyAgICAgICAg
ICAgIHRoaXMuYmxvb20ua2VybmVsID0gdmFsdWUgLyB0aGlzLl9oYXJkd2FyZVNjYWxlTGV2ZWw7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVu
ZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiYmxvb21XZWlnaHQiLCB7CisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Jsb29tV2VpZ2h0OworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibG9v
bS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fYmxvb21XZWlnaHQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5ibG9vbS53ZWlnaHQgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2Jsb29tV2VpZ2h0ID0gdmFsdWU7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlwZWxp
bmUucHJvdG90eXBlLCAiYmxvb21UaHJlc2hvbGQiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Jsb29tVGhyZXNob2xkOworICAgICAgICB9
LAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibG9vbS4KKyAg
ICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fYmxvb21UaHJlc2hvbGQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5ibG9vbS50aHJlc2hvbGQgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2Jsb29tVGhyZXNob2xkID0gdmFsdWU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlw
ZWxpbmUucHJvdG90eXBlLCAiYmxvb21TY2FsZSIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmxvb21TY2FsZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgYmxvb20sIGxvd2VyIHZhbHVl
IHdpbGwgcHJvdmlkZSBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgICAgICAqLworICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2Jsb29tU2NhbGUg
PT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhpcy5fYmxvb21TY2FsZSA9IHZhbHVlOworICAgICAgICAgICAgLy8gcmVjcmVh
dGUgYmxvb20gYW5kIGRpc3Bvc2Ugb2xkIGFzIHRoaXMgc2V0dGluZyBpcyBub3QgZHluYW1pYwor
ICAgICAgICAgICAgdGhpcy5fcmVidWlsZEJsb29tKCk7CisgICAgICAgICAgICB0aGlzLl9idWls
ZFBpcGVsaW5lKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiYmxvb21FbmFibGVkIiwgewor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9ibG9v
bUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3Ig
ZGlzYWJsZSB0aGUgYmxvb20gZnJvbSB0aGUgcGlwZWxpbmUKKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKGVuYWJsZWQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9ibG9vbUVu
YWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9ibG9vbUVuYWJsZWQgPSBlbmFibGVkOworICAgICAgICAg
ICAgdGhpcy5fYnVpbGRQaXBlbGluZSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBEZWZhdWx0
UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLl9yZWJ1aWxkQmxvb20gPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIC8vIHJlY3JlYXRlIGJsb29tIGFuZCBkaXNwb3NlIG9sZCBhcyB0aGlzIHNldHRp
bmcgaXMgbm90IGR5bmFtaWMKKyAgICAgICAgdmFyIG9sZEJsb29tID0gdGhpcy5ibG9vbTsKKyAg
ICAgICAgdGhpcy5ibG9vbSA9IG5ldyBfUG9zdFByb2Nlc3Nlc19ibG9vbUVmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTRfX1siQmxvb21FZmZlY3QiXSh0aGlzLl9zY2VuZSwgdGhpcy5i
bG9vbVNjYWxlLCB0aGlzLl9ibG9vbVdlaWdodCwgdGhpcy5ibG9vbUtlcm5lbCwgdGhpcy5fZGVm
YXVsdFBpcGVsaW5lVGV4dHVyZVR5cGUsIGZhbHNlKTsKKyAgICAgICAgdGhpcy5ibG9vbS50aHJl
c2hvbGQgPSBvbGRCbG9vbS50aHJlc2hvbGQ7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5fY2FtZXJhcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgb2xkQmxvb20uZGlzcG9z
ZUVmZmVjdHModGhpcy5fY2FtZXJhc1tpXSk7CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiZGVw
dGhPZkZpZWxkRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBkZXB0
aCBvZiBmaWVsZCBpcyBlbmFibGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGhPZkZpZWxkRW5hYmxlZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5hYmxlZCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX2RlcHRoT2ZGaWVsZEVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9kZXB0aE9mRmll
bGRFbmFibGVkID0gZW5hYmxlZDsKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkUGlwZWxpbmUoKTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERlZmF1bHRSZW5k
ZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJkZXB0aE9mRmllbGRCbHVyTGV2ZWwiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBCbHVyIGxldmVsIG9mIHRoZSBkZXB0aCBvZiBmaWVsZCBlZmZl
Y3QuIChIaWdoZXIgYmx1ciB3aWxsIGVmZmVjdCBwZXJmb3JtYW5jZSkKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlcHRo
T2ZGaWVsZEJsdXJMZXZlbDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9kZXB0aE9mRmllbGRCbHVyTGV2ZWwgPT09IHZh
bHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fZGVwdGhPZkZpZWxkQmx1ckxldmVsID0gdmFsdWU7CisgICAgICAgICAgICAvLyBy
ZWNyZWF0ZSBkb2YgYW5kIGRpc3Bvc2Ugb2xkIGFzIHRoaXMgc2V0dGluZyBpcyBub3QgZHluYW1p
YworICAgICAgICAgICAgdmFyIG9sZERvZiA9IHRoaXMuZGVwdGhPZkZpZWxkOworICAgICAgICAg
ICAgdGhpcy5kZXB0aE9mRmllbGQgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfZGVwdGhPZkZpZWxkRWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJEZXB0aE9mRmllbGRFZmZlY3QiXSh0
aGlzLl9zY2VuZSwgbnVsbCwgdGhpcy5fZGVwdGhPZkZpZWxkQmx1ckxldmVsLCB0aGlzLl9kZWZh
dWx0UGlwZWxpbmVUZXh0dXJlVHlwZSwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5kZXB0aE9m
RmllbGQuZm9jYWxMZW5ndGggPSBvbGREb2YuZm9jYWxMZW5ndGg7CisgICAgICAgICAgICB0aGlz
LmRlcHRoT2ZGaWVsZC5mb2N1c0Rpc3RhbmNlID0gb2xkRG9mLmZvY3VzRGlzdGFuY2U7CisgICAg
ICAgICAgICB0aGlzLmRlcHRoT2ZGaWVsZC5mU3RvcCA9IG9sZERvZi5mU3RvcDsKKyAgICAgICAg
ICAgIHRoaXMuZGVwdGhPZkZpZWxkLmxlbnNTaXplID0gb2xkRG9mLmxlbnNTaXplOworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jYW1lcmFzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgb2xkRG9mLmRpc3Bvc2VFZmZlY3RzKHRoaXMuX2NhbWVyYXNbaV0pOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYnVpbGRQaXBlbGluZSgpOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGVmYXVsdFJlbmRlcmluZ1Bp
cGVsaW5lLnByb3RvdHlwZSwgImZ4YWFFbmFibGVkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9meGFhRW5hYmxlZDsKKyAgICAgICAgfSwK
KyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBhbnRpIGFsaWFzaW5nIGlzIGVuYWJsZWQu
CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmFibGVkKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fZnhhYUVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9meGFhRW5hYmxlZCA9
IGVuYWJsZWQ7CisgICAgICAgICAgICB0aGlzLl9idWlsZFBpcGVsaW5lKCk7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlwZWxp
bmUucHJvdG90eXBlLCAic2FtcGxlcyIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fc2FtcGxlczsKKyAgICAgICAgfSwKKyAgICAgICAgLyoq
CisgICAgICAgICAqIE1TQUEgc2FtcGxlIGNvdW50LCBzZXR0aW5nIHRoaXMgdG8gNCB3aWxsIHBy
b3ZpZGUgNHggYW50aSBhbGlhc2luZy4gKGRlZmF1bHQ6IDEpCisgICAgICAgICAqLworICAgICAg
ICBzZXQ6IGZ1bmN0aW9uIChzYW1wbGVDb3VudCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3Nh
bXBsZXMgPT09IHNhbXBsZUNvdW50KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2FtcGxlcyA9IHNhbXBsZUNvdW50OworICAgICAg
ICAgICAgdGhpcy5fYnVpbGRQaXBlbGluZSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImlt
YWdlUHJvY2Vzc2luZ0VuYWJsZWQiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0VuYWJsZWQ7CisgICAgICAgIH0s
CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBpbWFnZSBwcm9jZXNzaW5nIGlzIGVuYWJsZWQu
CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmFibGVkKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5faW1hZ2VQcm9jZXNzaW5nRW5hYmxlZCA9PT0gZW5hYmxlZCkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2lt
YWdlUHJvY2Vzc2luZ0VuYWJsZWQgPSBlbmFibGVkOworICAgICAgICAgICAgdGhpcy5fYnVpbGRQ
aXBlbGluZSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
RGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImdsb3dMYXllckVuYWJsZWQiLCB7
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ds
b3dMYXllciAhPSBudWxsOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogSWYg
Z2xvdyBsYXllciBpcyBlbmFibGVkLiAoQWRkcyBhIGdsb3cgZWZmZWN0IHRvIGVtbWlzc2l2ZSBt
YXRlcmlhbHMpCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmFibGVkKSB7
CisgICAgICAgICAgICBpZiAoZW5hYmxlZCAmJiAhdGhpcy5fZ2xvd0xheWVyKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5fZ2xvd0xheWVyID0gbmV3IF9MYXllcnNfZ2xvd0xheWVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIkdsb3dMYXllciJdKCIiLCB0aGlzLl9zY2VuZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghZW5hYmxlZCAmJiB0aGlzLl9nbG93TGF5
ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9nbG93TGF5ZXIuZGlzcG9zZSgpOworICAgICAg
ICAgICAgICAgIHRoaXMuX2dsb3dMYXllciA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlw
ZWxpbmUucHJvdG90eXBlLCAiZ2xvd0xheWVyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgZ2xvdyBsYXllciAob3IgbnVsbCBpZiBub3QgZGVmaW5lZCkKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ds
b3dMYXllcjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERl
ZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJjaHJvbWF0aWNBYmVycmF0aW9uRW5h
YmxlZCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fY2hyb21hdGljQWJlcnJhdGlvbkVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8q
KgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgY2hyb21hdGljQWJlcnJhdGlvbiBw
cm9jZXNzIGZyb20gdGhlIHBpcGVsaW5lCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uIChlbmFibGVkKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fY2hyb21hdGljQWJlcnJhdGlv
bkVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl9jaHJvbWF0aWNBYmVycmF0aW9uRW5hYmxlZCA9IGVu
YWJsZWQ7CisgICAgICAgICAgICB0aGlzLl9idWlsZFBpcGVsaW5lKCk7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLCAiZ3JhaW5FbmFibGVkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9ncmFpbkVuYWJsZWQ7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgZ3JhaW4gcHJvY2VzcyBm
cm9tIHRoZSBwaXBlbGluZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5h
YmxlZCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2dyYWluRW5hYmxlZCA9PT0gZW5hYmxlZCkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX2dyYWluRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgICAgICAgICB0aGlzLl9idWlsZFBpcGVs
aW5lKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldCB0aGUgY2xhc3Mg
bmFtZQorICAgICAqIEByZXR1cm5zICJEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUiCisgICAgICov
CisgICAgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lIjsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEZvcmNlIHRoZSBjb21waWxhdGlvbiBvZiB0aGUgZW50
aXJlIHBpcGVsaW5lLgorICAgICAqLworICAgIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90
b3R5cGUucHJlcGFyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzU3RhdGUg
PSB0aGlzLl9idWlsZEFsbG93ZWQ7CisgICAgICAgIHRoaXMuX2J1aWxkQWxsb3dlZCA9IHRydWU7
CisgICAgICAgIHRoaXMuX2J1aWxkUGlwZWxpbmUoKTsKKyAgICAgICAgdGhpcy5fYnVpbGRBbGxv
d2VkID0gcHJldmlvdXNTdGF0ZTsKKyAgICB9OworICAgIERlZmF1bHRSZW5kZXJpbmdQaXBlbGlu
ZS5wcm90b3R5cGUuX3NldEF1dG9DbGVhckFuZFRleHR1cmVTaGFyaW5nID0gZnVuY3Rpb24gKHBv
c3RQcm9jZXNzLCBza2lwVGV4dHVyZVNoYXJpbmcpIHsKKyAgICAgICAgaWYgKHNraXBUZXh0dXJl
U2hhcmluZyA9PT0gdm9pZCAwKSB7IHNraXBUZXh0dXJlU2hhcmluZyA9IGZhbHNlOyB9CisgICAg
ICAgIGlmICh0aGlzLl9oYXNDbGVhcmVkKSB7CisgICAgICAgICAgICBwb3N0UHJvY2Vzcy5hdXRv
Q2xlYXIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBv
c3RQcm9jZXNzLmF1dG9DbGVhciA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5hdXRv
Q2xlYXIgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2hhc0NsZWFyZWQgPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGlmICghc2tpcFRleHR1cmVTaGFyaW5nKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fcHJldlByZXZQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHBvc3RQcm9j
ZXNzLnNoYXJlT3V0cHV0V2l0aCh0aGlzLl9wcmV2UHJldlBvc3RQcm9jZXNzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBvc3RQcm9jZXNzLnVz
ZU93bk91dHB1dCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZQ
b3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZQcmV2UG9zdFByb2Nlc3Mg
PSB0aGlzLl9wcmV2UG9zdFByb2Nlc3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9wcmV2UG9zdFByb2Nlc3MgPSBwb3N0UHJvY2VzczsKKyAgICAgICAgfQorICAgIH07CisgICAg
RGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fYnVpbGRQaXBlbGluZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKCF0aGlzLl9i
dWlsZEFsbG93ZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9zY2VuZS5hdXRvQ2xlYXIgPSB0cnVlOworICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5f
c2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3N0UHJvY2Vzc2VzKCk7
CisgICAgICAgIGlmICh0aGlzLl9jYW1lcmFzICE9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlz
Ll9zY2VuZS5wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5kZXRhY2hDYW1lcmFzRnJv
bVJlbmRlclBpcGVsaW5lKHRoaXMuX25hbWUsIHRoaXMuX2NhbWVyYXMpOworICAgICAgICAgICAg
Ly8gZ2V0IGJhY2sgY2FtZXJhcyB0byBiZSB1c2VkIHRvIHJlYXR0YWNoIHBpcGVsaW5lCisgICAg
ICAgICAgICB0aGlzLl9jYW1lcmFzID0gdGhpcy5fY2FtZXJhc1RvQmVBdHRhY2hlZC5zbGljZSgp
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Jlc2V0KCk7CisgICAgICAgIHRoaXMuX3ByZXZQ
b3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIHRoaXMuX3ByZXZQcmV2UG9zdFByb2Nlc3MgPSBu
dWxsOworICAgICAgICB0aGlzLl9oYXNDbGVhcmVkID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlz
LmRlcHRoT2ZGaWVsZEVuYWJsZWQpIHsKKyAgICAgICAgICAgIC8vIE11bHRpIGNhbWVyYSBzdXBv
cnQKKyAgICAgICAgICAgIGlmICh0aGlzLl9jYW1lcmFzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fY2FtZXJhczsgX2kgPCBfYS5sZW5n
dGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNhbWVyYSA9IF9hW19pXTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGRlcHRoUmVuZGVyZXIgPSB0aGlzLl9zY2VuZS5lbmFibGVE
ZXB0aFJlbmRlcmVyKGNhbWVyYSk7CisgICAgICAgICAgICAgICAgICAgIGRlcHRoUmVuZGVyZXIu
dXNlT25seUluQWN0aXZlQ2FtZXJhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdGhpcy5fZGVwdGhPZkZpZWxkU2NlbmVPYnNlcnZlciA9IHRoaXMuX3NjZW5lLm9u
QWZ0ZXJSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHNjZW5lKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fY2FtZXJhcy5pbmRleE9mKHNjZW5lLmFj
dGl2ZUNhbWVyYSkgPiAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZGVwdGhP
ZkZpZWxkLmRlcHRoVGV4dHVyZSA9IHNjZW5lLmVuYWJsZURlcHRoUmVuZGVyZXIoc2NlbmUuYWN0
aXZlQ2FtZXJhKS5nZXREZXB0aE1hcCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9zY2VuZS5vbkFmdGVyUmVuZGVyVGFyZ2V0c1JlbmRlck9ic2VydmFibGUu
cmVtb3ZlKHRoaXMuX2RlcHRoT2ZGaWVsZFNjZW5lT2JzZXJ2ZXIpOworICAgICAgICAgICAgICAg
IHZhciBkZXB0aFJlbmRlcmVyID0gdGhpcy5fc2NlbmUuZW5hYmxlRGVwdGhSZW5kZXJlcih0aGlz
Ll9jYW1lcmFzWzBdKTsKKyAgICAgICAgICAgICAgICB0aGlzLmRlcHRoT2ZGaWVsZC5kZXB0aFRl
eHR1cmUgPSBkZXB0aFJlbmRlcmVyLmdldERlcHRoTWFwKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoIXRoaXMuZGVwdGhPZkZpZWxkLl9pc1JlYWR5KCkpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLmRlcHRoT2ZGaWVsZC5fdXBkYXRlRWZmZWN0cygpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5hZGRFZmZlY3QodGhpcy5kZXB0aE9mRmllbGQpOworICAgICAgICAg
ICAgdGhpcy5fc2V0QXV0b0NsZWFyQW5kVGV4dHVyZVNoYXJpbmcodGhpcy5kZXB0aE9mRmllbGQu
X2VmZmVjdHNbMF0sIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5fc2NlbmUub25BZnRlclJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZhYmxlLnJlbW92
ZSh0aGlzLl9kZXB0aE9mRmllbGRTY2VuZU9ic2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5ibG9vbUVuYWJsZWQpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5ibG9vbS5faXNS
ZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5ibG9vbS5fdXBkYXRlRWZmZWN0cygpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5hZGRFZmZlY3QodGhpcy5ibG9vbSk7Cisg
ICAgICAgICAgICB0aGlzLl9zZXRBdXRvQ2xlYXJBbmRUZXh0dXJlU2hhcmluZyh0aGlzLmJsb29t
Ll9lZmZlY3RzWzBdLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5faW1hZ2VQ
cm9jZXNzaW5nRW5hYmxlZCkgeworICAgICAgICAgICAgdGhpcy5pbWFnZVByb2Nlc3NpbmcgPSBu
ZXcgX1Bvc3RQcm9jZXNzZXNfaW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MiXSgiaW1hZ2VQcm9j
ZXNzaW5nIiwgMS4wLCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgZW5n
aW5lLCBmYWxzZSwgdGhpcy5fZGVmYXVsdFBpcGVsaW5lVGV4dHVyZVR5cGUpOworICAgICAgICAg
ICAgaWYgKHRoaXMuX2hkcikgeworICAgICAgICAgICAgICAgIHRoaXMuYWRkRWZmZWN0KG5ldyBf
UG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShlbmdp
bmUsIHRoaXMuSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3NJZCwgZnVuY3Rpb24gKCkgeyByZXR1
cm4gX3RoaXMuaW1hZ2VQcm9jZXNzaW5nOyB9LCB0cnVlKSk7CisgICAgICAgICAgICAgICAgdGhp
cy5fc2V0QXV0b0NsZWFyQW5kVGV4dHVyZVNoYXJpbmcodGhpcy5pbWFnZVByb2Nlc3NpbmcpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
c2NlbmUuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5hcHBseUJ5UG9zdFByb2Nlc3MgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5zaGFycGVu
RW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJwZW4uaXNSZWFkeSgpKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5zaGFycGVuLnVwZGF0ZUVmZmVjdCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5hZGRFZmZlY3QodGhpcy5fc2hhcnBlbkVmZmVjdCk7CisgICAg
ICAgICAgICB0aGlzLl9zZXRBdXRvQ2xlYXJBbmRUZXh0dXJlU2hhcmluZyh0aGlzLnNoYXJwZW4p
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmdyYWluRW5hYmxlZCkgeworICAgICAgICAg
ICAgaWYgKCF0aGlzLmdyYWluLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHRoaXMuZ3Jh
aW4udXBkYXRlRWZmZWN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmFkZEVm
ZmVjdCh0aGlzLl9ncmFpbkVmZmVjdCk7CisgICAgICAgICAgICB0aGlzLl9zZXRBdXRvQ2xlYXJB
bmRUZXh0dXJlU2hhcmluZyh0aGlzLmdyYWluKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy5jaHJvbWF0aWNBYmVycmF0aW9uRW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLmNo
cm9tYXRpY0FiZXJyYXRpb24uaXNSZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5jaHJv
bWF0aWNBYmVycmF0aW9uLnVwZGF0ZUVmZmVjdCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5hZGRFZmZlY3QodGhpcy5fY2hyb21hdGljQWJlcnJhdGlvbkVmZmVjdCk7CisgICAg
ICAgICAgICB0aGlzLl9zZXRBdXRvQ2xlYXJBbmRUZXh0dXJlU2hhcmluZyh0aGlzLmNocm9tYXRp
Y0FiZXJyYXRpb24pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmZ4YWFFbmFibGVkKSB7
CisgICAgICAgICAgICB0aGlzLmZ4YWEgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfZnhhYVBvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJGeGFhUG9zdFByb2Nlc3MiXSgiZnhh
YSIsIDEuMCwgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIGVuZ2luZSwg
ZmFsc2UsIHRoaXMuX2RlZmF1bHRQaXBlbGluZVRleHR1cmVUeXBlKTsKKyAgICAgICAgICAgIHRo
aXMuYWRkRWZmZWN0KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vz
c1JlbmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siUG9zdFByb2Nlc3NS
ZW5kZXJFZmZlY3QiXShlbmdpbmUsIHRoaXMuRnhhYVBvc3RQcm9jZXNzSWQsIGZ1bmN0aW9uICgp
IHsgcmV0dXJuIF90aGlzLmZ4YWE7IH0sIHRydWUpKTsKKyAgICAgICAgICAgIHRoaXMuX3NldEF1
dG9DbGVhckFuZFRleHR1cmVTaGFyaW5nKHRoaXMuZnhhYSwgdHJ1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuX2NhbWVyYXMgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuX3Nj
ZW5lLnBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyLmF0dGFjaENhbWVyYXNUb1JlbmRl
clBpcGVsaW5lKHRoaXMuX25hbWUsIHRoaXMuX2NhbWVyYXMpOworICAgICAgICB9CisgICAgICAg
IC8vIEluIG11bHRpY2FtZXJhIG1vZGUsIHRoZSBzY2VuZSBuZWVkcyB0byBhdXRvY2xlYXIgaW4g
YmV0d2VlbiBjYW1lcmFzLgorICAgICAgICBpZiAodGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhcyAm
JiB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmFzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIHRo
aXMuX3NjZW5lLmF1dG9DbGVhciA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlz
Ll9lbmFibGVNU0FBT25GaXJzdFBvc3RQcm9jZXNzKHRoaXMuc2FtcGxlcykgJiYgdGhpcy5zYW1w
bGVzID4gMSkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIkxvZ2dlciJdLldhcm4oIk1TQUEgZmFpbGVkIHRvIGVuYWJsZSwgTVNBQSBpcyBv
bmx5IHN1cHBvcnRlZCBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wgPj0gMi4wIik7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUu
X2Rpc3Bvc2VQb3N0UHJvY2Vzc2VzID0gZnVuY3Rpb24gKGRpc3Bvc2VOb25SZWNyZWF0ZWQpIHsK
KyAgICAgICAgaWYgKGRpc3Bvc2VOb25SZWNyZWF0ZWQgPT09IHZvaWQgMCkgeyBkaXNwb3NlTm9u
UmVjcmVhdGVkID0gZmFsc2U7IH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9j
YW1lcmFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fY2Ft
ZXJhc1tpXTsKKyAgICAgICAgICAgIGlmICh0aGlzLmltYWdlUHJvY2Vzc2luZykgeworICAgICAg
ICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLmZ4YWEpIHsKKyAgICAgICAgICAgICAgICB0aGlz
LmZ4YWEuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVGhl
c2UgYXJlIGNyZWF0ZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGFuZCBzaG91bGQgbm90IGJlIGRpc3Bv
c2VkIG9uIGV2ZXJ5IHBpcGVsaW5lIGNoYW5nZQorICAgICAgICAgICAgaWYgKGRpc3Bvc2VOb25S
ZWNyZWF0ZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFycGVuKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2hhcnBlbi5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlcHRoT2ZGaWVsZCkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9zY2VuZS5vbkFmdGVyUmVuZGVyVGFyZ2V0c1JlbmRlck9ic2VydmFi
bGUucmVtb3ZlKHRoaXMuX2RlcHRoT2ZGaWVsZFNjZW5lT2JzZXJ2ZXIpOworICAgICAgICAgICAg
ICAgICAgICB0aGlzLmRlcHRoT2ZGaWVsZC5kaXNwb3NlRWZmZWN0cyhjYW1lcmEpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5ibG9vbSkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLmJsb29tLmRpc3Bvc2VFZmZlY3RzKGNhbWVyYSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLmNocm9tYXRpY0FiZXJyYXRpb24pIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5jaHJvbWF0aWNBYmVycmF0aW9uLmRpc3Bvc2UoY2Ft
ZXJhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JhaW4p
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFpbi5kaXNwb3NlKGNhbWVyYSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9nbG93TGF5ZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fZ2xvd0xheWVyLmRpc3Bvc2UoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5pbWFnZVByb2Nl
c3NpbmcgPSBudWxsOworICAgICAgICB0aGlzLmZ4YWEgPSBudWxsOworICAgICAgICBpZiAoZGlz
cG9zZU5vblJlY3JlYXRlZCkgeworICAgICAgICAgICAgdGhpcy5zaGFycGVuID0gbnVsbDsKKyAg
ICAgICAgICAgIHRoaXMuX3NoYXJwZW5FZmZlY3QgPSBudWxsOworICAgICAgICAgICAgdGhpcy5k
ZXB0aE9mRmllbGQgPSBudWxsOworICAgICAgICAgICAgdGhpcy5ibG9vbSA9IG51bGw7CisgICAg
ICAgICAgICB0aGlzLmNocm9tYXRpY0FiZXJyYXRpb24gPSBudWxsOworICAgICAgICAgICAgdGhp
cy5fY2hyb21hdGljQWJlcnJhdGlvbkVmZmVjdCA9IG51bGw7CisgICAgICAgICAgICB0aGlzLmdy
YWluID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX2dyYWluRWZmZWN0ID0gbnVsbDsKKyAgICAg
ICAgICAgIHRoaXMuX2dsb3dMYXllciA9IG51bGw7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIEFkZHMgYSBjYW1lcmEgdG8gdGhlIHBpcGVsaW5lCisgICAgICogQHBhcmFtIGNh
bWVyYSB0aGUgY2FtZXJhIHRvIGJlIGFkZGVkCisgICAgICovCisgICAgRGVmYXVsdFJlbmRlcmlu
Z1BpcGVsaW5lLnByb3RvdHlwZS5hZGRDYW1lcmEgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAg
ICAgIHRoaXMuX2NhbWVyYXNUb0JlQXR0YWNoZWQucHVzaChjYW1lcmEpOworICAgICAgICB0aGlz
Ll9idWlsZFBpcGVsaW5lKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGEgY2Ft
ZXJhIGZyb20gdGhlIHBpcGVsaW5lCisgICAgICogQHBhcmFtIGNhbWVyYSB0aGUgY2FtZXJhIHRv
IHJlbW92ZQorICAgICAqLworICAgIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUu
cmVtb3ZlQ2FtZXJhID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICB2YXIgaW5kZXggPSB0
aGlzLl9jYW1lcmFzVG9CZUF0dGFjaGVkLmluZGV4T2YoY2FtZXJhKTsKKyAgICAgICAgdGhpcy5f
Y2FtZXJhc1RvQmVBdHRhY2hlZC5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB0aGlzLl9idWls
ZFBpcGVsaW5lKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlIG9mIHRoZSBwaXBl
bGluZSBhbmQgc3RvcCBhbGwgcG9zdCBwcm9jZXNzZXMKKyAgICAgKi8KKyAgICBEZWZhdWx0UmVu
ZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX2Rpc3Bvc2VQb3N0UHJvY2Vzc2VzKHRydWUpOworICAgICAgICB0aGlzLl9zY2VuZS5w
b3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5kZXRhY2hDYW1lcmFzRnJvbVJlbmRlclBp
cGVsaW5lKHRoaXMuX25hbWUsIHRoaXMuX2NhbWVyYXMpOworICAgICAgICB0aGlzLl9zY2VuZS5h
dXRvQ2xlYXIgPSB0cnVlOworICAgICAgICBpZiAodGhpcy5fcmVzaXplT2JzZXJ2ZXIpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLm9uUmVzaXplT2JzZXJ2YWJsZS5yZW1v
dmUodGhpcy5fcmVzaXplT2JzZXJ2ZXIpOworICAgICAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2
ZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5lLmltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24ub25VcGRhdGVQYXJhbWV0ZXJzLnJlbW92ZSh0aGlzLl9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uT2JzZXJ2ZXIpOworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRp
c3Bvc2UuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUg
cmVuZGVyaW5nIHBpcGVsaW5lIChVc2VkIHdoZW4gZXhwb3J0aW5nKQorICAgICAqIEByZXR1cm5z
IHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIERlZmF1bHRSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2Vy
aWFsaXphdGlvbk9iamVjdCA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlNlcmlhbGl6ZSh0aGlzKTsKKyAgICAgICAg
c2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21UeXBlID0gIkRlZmF1bHRSZW5kZXJpbmdQaXBlbGlu
ZSI7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLyoq
CisgICAgICogUGFyc2UgdGhlIHNlcmlhbGl6ZWQgcGlwZWxpbmUKKyAgICAgKiBAcGFyYW0gc291
cmNlIFNvdXJjZSBwaXBlbGluZS4KKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRvIGxv
YWQgdGhlIHBpcGVsaW5lIHRvLgorICAgICAqIEBwYXJhbSByb290VXJsIFRoZSBVUkwgb2YgdGhl
IHNlcmlhbGl6ZWQgcGlwZWxpbmUuCisgICAgICogQHJldHVybnMgQW4gaW5zdGFudGlhdGVkIHBp
cGVsaW5lIGZyb20gdGhlIHNlcmlhbGl6ZWQgb2JqZWN0LgorICAgICAqLworICAgIERlZmF1bHRS
ZW5kZXJpbmdQaXBlbGluZS5QYXJzZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHNjZW5lLCByb290VXJs
KSB7CisgICAgICAgIHJldHVybiBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5QYXJzZShmdW5jdGlvbiAoKSB7IHJldHVy
biBuZXcgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lKHNvdXJjZS5fbmFtZSwgc291cmNlLl9uYW1l
Ll9oZHIsIHNjZW5lKTsgfSwgc291cmNlLCBzY2VuZSwgcm9vdFVybCk7CisgICAgfTsKKyAgICB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAg
ICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJz
ZXJpYWxpemUiXSkoKQorICAgIF0sIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUs
ICJzaGFycGVuRW5hYmxlZCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRGVm
YXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImJsb29tS2VybmVsIiwgbnVsbCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90
eXBlLCAiX2Jsb29tV2VpZ2h0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJfYmxvb21UaHJlc2hvbGQiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRGVmYXVsdFJlbmRlcmluZ1BpcGVs
aW5lLnByb3RvdHlwZSwgIl9oZHIiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImJsb29tV2VpZ2h0IiwgbnVs
bCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLCAiYmxvb21UaHJlc2hvbGQiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJibG9vbVNjYWxlIiwg
bnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBEZWZhdWx0UmVuZGVyaW5nUGlwZWxp
bmUucHJvdG90eXBlLCAiYmxvb21FbmFibGVkIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkK
KyAgICBdLCBEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiZGVwdGhPZkZpZWxk
RW5hYmxlZCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRGVmYXVsdFJlbmRl
cmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImRlcHRoT2ZGaWVsZEJsdXJMZXZlbCIsIG51bGwpOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3Rv
dHlwZSwgImZ4YWFFbmFibGVkIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBE
ZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAic2FtcGxlcyIsIG51bGwpOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlw
ZSwgImltYWdlUHJvY2Vzc2luZ0VuYWJsZWQiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJnbG93TGF5ZXJFbmFi
bGVkIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBEZWZhdWx0UmVuZGVyaW5n
UGlwZWxpbmUucHJvdG90eXBlLCAiY2hyb21hdGljQWJlcnJhdGlvbkVuYWJsZWQiLCBudWxsKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90
b3R5cGUsICJncmFpbkVuYWJsZWQiLCBudWxsKTsKKyAgICByZXR1cm4gRGVmYXVsdFJlbmRlcmlu
Z1BpcGVsaW5lOworfShfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJQb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNV9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLkRlZmF1bHRS
ZW5kZXJpbmdQaXBlbGluZSJdID0gRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lOworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL1BpcGVsaW5lcy9p
bmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUv
UGlwZWxpbmVzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBEZWZh
dWx0UmVuZGVyaW5nUGlwZWxpbmUsIExlbnNSZW5kZXJpbmdQaXBlbGluZSwgU1NBTzJSZW5kZXJp
bmdQaXBlbGluZSwgU1NBT1JlbmRlcmluZ1BpcGVsaW5lLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVs
aW5lICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVmYXVs
dFJlbmRlcmluZ1BpcGVsaW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2RlZmF1bHRSZW5kZXJpbmdQaXBlbGluZSAqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL1JlbmRlclBpcGVsaW5lL1BpcGVsaW5lcy9kZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfZGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkRlZmF1bHRSZW5kZXJpbmdQaXBlbGluZSJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9sZW5zUmVuZGVyaW5nUGlwZWxpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbGVuc1JlbmRlcmluZ1BpcGVs
aW5lICovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvUGlwZWxpbmVzL2xlbnNSZW5k
ZXJpbmdQaXBlbGluZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zUmVuZGVyaW5nUGlwZWxp
bmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9sZW5zUmVuZGVyaW5nUGlwZWxpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTGVuc1JlbmRlcmluZ1BpcGVsaW5lIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3NzYW8yUmVuZGVyaW5nUGlwZWxpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3NhbzJSZW5kZXJp
bmdQaXBlbGluZSAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL1BpcGVsaW5lcy9z
c2FvMlJlbmRlcmluZ1BpcGVsaW5lLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNTQU8yUmVuZGVy
aW5nUGlwZWxpbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zc2FvMlJlbmRlcmluZ1BpcGVsaW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNTQU8yUmVuZGVyaW5nUGlwZWxpbmUiXTsg
fSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3Nhb1JlbmRlcmluZ1BpcGVsaW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Nz
YW9SZW5kZXJpbmdQaXBlbGluZSAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL1Bp
cGVsaW5lcy9zc2FvUmVuZGVyaW5nUGlwZWxpbmUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU1NB
T1JlbmRlcmluZ1BpcGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3Nhb1JlbmRlcmluZ1Bp
cGVsaW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlNTQU9SZW5kZXJpbmdQaXBlbGlu
ZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdGFuZGFyZFJlbmRlcmluZ1Bp
cGVsaW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL3N0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUgKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5k
ZXJQaXBlbGluZS9QaXBlbGluZXMvc3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfc3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lIl07IH0pOworCisKKworCisKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL1BpcGVsaW5l
cy9sZW5zUmVuZGVyaW5nUGlwZWxpbmUudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9QaXBlbGluZXMvbGVuc1JlbmRlcmlu
Z1BpcGVsaW5lLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogTGVuc1JlbmRlcmluZ1BpcGVsaW5lICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkxlbnNSZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTGVu
c1JlbmRlcmluZ1BpcGVsaW5lOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNs
aWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGVyaWFs
cy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19keW5hbWljVGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2R5bmFtaWNUZXh0dXJlICovICIuL01hdGVy
aWFscy9UZXh0dXJlcy9keW5hbWljVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQ
cm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi8uLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQcm9j
ZXNzUmVuZGVyUGlwZWxpbmUgKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0
UHJvY2Vzc1JlbmRlclBpcGVsaW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bv
c3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4u
L1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QgKi8g
Ii4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVs
aW5lX3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4u
L1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1h
bmFnZXJTY2VuZUNvbXBvbmVudCAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bv
c3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19jaHJvbWF0aWNBYmVycmF0aW9uX2ZyYWdtZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi8uLi9TaGFkZXJzL2Nocm9tYXRpY0FiZXJyYXRpb24uZnJhZ21lbnQgKi8gIi4vU2hhZGVy
cy9jaHJvbWF0aWNBYmVycmF0aW9uLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1NoYWRlcnNfbGVuc0hpZ2hsaWdodHNfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1NoYWRlcnMvbGVu
c0hpZ2hsaWdodHMuZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9sZW5zSGlnaGxpZ2h0cy5mcmFnbWVu
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2RlcHRoT2ZGaWVsZF9m
cmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vLi4vU2hhZGVycy9kZXB0aE9mRmllbGQuZnJhZ21lbnQgKi8gIi4vU2hhZGVy
cy9kZXB0aE9mRmllbGQuZnJhZ21lbnQudHMiKTsKKworCisKKworCisKKworCisKKworLyoqCisg
KiBCQUJZTE9OLkpTIENocm9tYXRpYyBBYmVycmF0aW9uIEdMU0wgU2hhZGVyCisgKiBBdXRob3I6
IE9saXZpZXIgR3V5b3QKKyAqIFNlcGFyYXRlcyB2ZXJ5IHNsaWdodGx5IFIsIEcgYW5kIEIgY29s
b3JzIG9uIHRoZSBlZGdlcyBvZiB0aGUgc2NyZWVuCisgKiBJbnNwaXJlZCBieSBGcmFuY29pcyBU
YXJsaWVyICYgTWFydGlucyBVcGl0aXMKKyAqLwordmFyIExlbnNSZW5kZXJpbmdQaXBlbGluZSA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShMZW5zUmVuZGVyaW5nUGlwZWxpbmUsIF9z
dXBlcik7CisgICAgLyoqCisgICAgICogQGNvbnN0cnVjdG9yCisgICAgICoKKyAgICAgKiBFZmZl
Y3QgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93OgorICAgICAqIHsKKyAgICAgKiAgICAgIGNocm9t
YXRpY19hYmVycmF0aW9uOiBudW1iZXI7ICAgICAgIC8vIGZyb20gMCB0byB4ICgxIGZvciByZWFs
aXNtKQorICAgICAqICAgICAgZWRnZV9ibHVyOiBudW1iZXI7ICAgICAgICAgICAgICAgICAgLy8g
ZnJvbSAwIHRvIHggKDEgZm9yIHJlYWxpc20pCisgICAgICogICAgICBkaXN0b3J0aW9uOiBudW1i
ZXI7ICAgICAgICAgICAgICAgICAvLyBmcm9tIDAgdG8geCAoMSBmb3IgcmVhbGlzbSkKKyAgICAg
KiAgICAgIGdyYWluX2Ftb3VudDogbnVtYmVyOyAgICAgICAgICAgICAgIC8vIGZyb20gMCB0byAx
CisgICAgICogICAgICBncmFpbl90ZXh0dXJlOiBCQUJZTE9OLlRleHR1cmU7ICAgICAvLyB0ZXh0
dXJlIHRvIHVzZSBmb3IgZ3JhaW4gZWZmZWN0OyBpZiB1bnNldCwgdXNlIHJhbmRvbSBCJlcgbm9p
c2UKKyAgICAgKiAgICAgIGRvZl9mb2N1c19kaXN0YW5jZTogbnVtYmVyOyAgICAgICAgIC8vIGRl
cHRoLW9mLWZpZWxkOiBmb2N1cyBkaXN0YW5jZTsgdW5zZXQgdG8gZGlzYWJsZSAoZGlzYWJsZWQg
YnkgZGVmYXVsdCkKKyAgICAgKiAgICAgIGRvZl9hcGVydHVyZTogbnVtYmVyOyAgICAgICAgICAg
ICAgIC8vIGRlcHRoLW9mLWZpZWxkOiBmb2N1cyBibHVyIGJpYXMgKGRlZmF1bHQ6IDEpCisgICAg
ICogICAgICBkb2ZfZGFya2VuOiBudW1iZXI7ICAgICAgICAgICAgICAgICAvLyBkZXB0aC1vZi1m
aWVsZDogZGFya2VuIHRoYXQgd2hpY2ggaXMgb3V0IG9mIGZvY3VzIChmcm9tIDAgdG8gMSwgZGlz
YWJsZWQgYnkgZGVmYXVsdCkKKyAgICAgKiAgICAgIGRvZl9wZW50YWdvbjogYm9vbGVhbjsgICAg
ICAgICAgICAgIC8vIGRlcHRoLW9mLWZpZWxkOiBtYWtlcyBhIHBlbnRhZ29uLWxpa2UgImJva2Vo
IiBlZmZlY3QKKyAgICAgKiAgICAgIGRvZl9nYWluOiBudW1iZXI7ICAgICAgICAgICAgICAgICAg
IC8vIGRlcHRoLW9mLWZpZWxkOiBoaWdobGlnaHRzIGdhaW47IHVuc2V0IHRvIGRpc2FibGUgKGRp
c2FibGVkIGJ5IGRlZmF1bHQpCisgICAgICogICAgICBkb2ZfdGhyZXNob2xkOiBudW1iZXI7ICAg
ICAgICAgICAgICAvLyBkZXB0aC1vZi1maWVsZDogaGlnaGxpZ2h0cyB0aHJlc2hvbGQgKGRlZmF1
bHQ6IDEpCisgICAgICogICAgICBibHVyX25vaXNlOiBib29sZWFuOyAgICAgICAgICAgICAgICAv
LyBhZGQgYSBsaXR0bGUgYml0IG9mIG5vaXNlIHRvIHRoZSBibHVyIChkZWZhdWx0OiB0cnVlKQor
ICAgICAqIH0KKyAgICAgKiBOb3RlOiBpZiBhbiBlZmZlY3QgcGFyYW1ldGVyIGlzIHVuc2V0LCBl
ZmZlY3QgaXMgZGlzYWJsZWQKKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSByZW5kZXJp
bmcgcGlwZWxpbmUgbmFtZQorICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIC0gQW4gb2JqZWN0IGNv
bnRhaW5pbmcgYWxsIHBhcmFtZXRlcnMgKHNlZSBhYm92ZSkKKyAgICAgKiBAcGFyYW0gc2NlbmUg
VGhlIHNjZW5lIGxpbmtlZCB0byB0aGlzIHBpcGVsaW5lCisgICAgICogQHBhcmFtIHJhdGlvIFRo
ZSBzaXplIG9mIHRoZSBwb3N0cHJvY2Vzc2VzICgwLjUgbWVhbnMgdGhhdCB5b3VyIHBvc3Rwcm9j
ZXNzIHdpbGwgaGF2ZSBhIHdpZHRoID0gY2FudmFzLndpZHRoIDAuNSBhbmQgYSBoZWlnaHQgPSBj
YW52YXMuaGVpZ2h0IDAuNSkKKyAgICAgKiBAcGFyYW0gY2FtZXJhcyBUaGUgYXJyYXkgb2YgY2Ft
ZXJhcyB0aGF0IHRoZSByZW5kZXJpbmcgcGlwZWxpbmUgd2lsbCBiZSBhdHRhY2hlZCB0bworICAg
ICAqLworICAgIGZ1bmN0aW9uIExlbnNSZW5kZXJpbmdQaXBlbGluZShuYW1lLCBwYXJhbWV0ZXJz
LCBzY2VuZSwgcmF0aW8sIGNhbWVyYXMpIHsKKyAgICAgICAgaWYgKHJhdGlvID09PSB2b2lkIDAp
IHsgcmF0aW8gPSAxLjA7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywg
c2NlbmUuZ2V0RW5naW5lKCksIG5hbWUpIHx8IHRoaXM7CisgICAgICAgIC8vIExlbnMgZWZmZWN0
cyBjYW4gYmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgLy8gLSBjaHJvbWF0aWMgYWJlcnJh
dGlvbiAoc2xpZ2h0IHNoaWZ0IG9mIFJHQiBjb2xvcnMpCisgICAgICAgIC8vIC0gYmx1ciBvbiB0
aGUgZWRnZSBvZiB0aGUgbGVucworICAgICAgICAvLyAtIGxlbnMgZGlzdG9ydGlvbgorICAgICAg
ICAvLyAtIGRlcHRoLW9mLWZpZWxkIGJsdXIgJiBoaWdobGlnaHRzIGVuaGFuY2luZworICAgICAg
ICAvLyAtIGRlcHRoLW9mLWZpZWxkICdib2tlaCcgZWZmZWN0IChzaGFwZXMgYXBwZWFyaW5nIGlu
IGJsdXJyZWQgYXJlYXMpCisgICAgICAgIC8vIC0gZ3JhaW4gZWZmZWN0IChub2lzZSBvciBjdXN0
b20gdGV4dHVyZSkKKyAgICAgICAgLy8gVHdvIGFkZGl0aW9uYWwgdGV4dHVyZSBzYW1wbGVycyBh
cmUgbmVlZGVkOgorICAgICAgICAvLyAtIGRlcHRoIG1hcCAoZm9yIGRlcHRoLW9mLWZpZWxkKQor
ICAgICAgICAvLyAtIGdyYWluIHRleHR1cmUKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBpZ25v
cmUKKyAgICAgICAgICogVGhlIGNocm9tYXRpYyBhYmVycmF0aW9uIFBvc3RQcm9jZXNzIGlkIGlu
IHRoZSBwaXBlbGluZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuTGVuc0Nocm9tYXRpY0Fi
ZXJyYXRpb25FZmZlY3QgPSAiTGVuc0Nocm9tYXRpY0FiZXJyYXRpb25FZmZlY3QiOworICAgICAg
ICAvKioKKyAgICAgICAgICogQGlnbm9yZQorICAgICAgICAgKiBUaGUgaGlnaGxpZ2h0cyBlbmhh
bmNpbmcgUG9zdFByb2Nlc3MgaWQgaW4gdGhlIHBpcGVsaW5lCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5IaWdobGlnaHRzRW5oYW5jaW5nRWZmZWN0ID0gIkhpZ2hsaWdodHNFbmhhbmNpbmdF
ZmZlY3QiOworICAgICAgICAvKioKKyAgICAgICAgICogQGlnbm9yZQorICAgICAgICAqIFRoZSBk
ZXB0aC1vZi1maWVsZCBQb3N0UHJvY2VzcyBpZCBpbiB0aGUgcGlwZWxpbmUKKyAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMuTGVuc0RlcHRoT2ZGaWVsZEVmZmVjdCA9ICJMZW5zRGVwdGhPZkZpZWxk
RWZmZWN0IjsKKyAgICAgICAgX3RoaXMuX3BlbnRhZ29uQm9rZWhJc0VuYWJsZWQgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuX3NjZW5lID0gc2NlbmU7CisgICAgICAgIC8vIEZldGNoIHRleHR1cmUg
c2FtcGxlcnMKKyAgICAgICAgX3RoaXMuX2RlcHRoVGV4dHVyZSA9IHNjZW5lLmVuYWJsZURlcHRo
UmVuZGVyZXIoKS5nZXREZXB0aE1hcCgpOyAvLyBGb3JjZSBkZXB0aCByZW5kZXJlciAib24iCisg
ICAgICAgIGlmIChwYXJhbWV0ZXJzLmdyYWluX3RleHR1cmUpIHsKKyAgICAgICAgICAgIF90aGlz
Ll9ncmFpblRleHR1cmUgPSBwYXJhbWV0ZXJzLmdyYWluX3RleHR1cmU7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBfdGhpcy5fY3JlYXRlR3JhaW5UZXh0dXJlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gc2F2ZSBwYXJhbWV0ZXJzCisgICAgICAgIF90aGlzLl9lZGdl
Qmx1ciA9IHBhcmFtZXRlcnMuZWRnZV9ibHVyID8gcGFyYW1ldGVycy5lZGdlX2JsdXIgOiAwOwor
ICAgICAgICBfdGhpcy5fZ3JhaW5BbW91bnQgPSBwYXJhbWV0ZXJzLmdyYWluX2Ftb3VudCA/IHBh
cmFtZXRlcnMuZ3JhaW5fYW1vdW50IDogMDsKKyAgICAgICAgX3RoaXMuX2Nocm9tYXRpY0FiZXJy
YXRpb24gPSBwYXJhbWV0ZXJzLmNocm9tYXRpY19hYmVycmF0aW9uID8gcGFyYW1ldGVycy5jaHJv
bWF0aWNfYWJlcnJhdGlvbiA6IDA7CisgICAgICAgIF90aGlzLl9kaXN0b3J0aW9uID0gcGFyYW1l
dGVycy5kaXN0b3J0aW9uID8gcGFyYW1ldGVycy5kaXN0b3J0aW9uIDogMDsKKyAgICAgICAgX3Ro
aXMuX2hpZ2hsaWdodHNHYWluID0gcGFyYW1ldGVycy5kb2ZfZ2FpbiAhPT0gdW5kZWZpbmVkID8g
cGFyYW1ldGVycy5kb2ZfZ2FpbiA6IC0xOworICAgICAgICBfdGhpcy5faGlnaGxpZ2h0c1RocmVz
aG9sZCA9IHBhcmFtZXRlcnMuZG9mX3RocmVzaG9sZCA/IHBhcmFtZXRlcnMuZG9mX3RocmVzaG9s
ZCA6IDE7CisgICAgICAgIF90aGlzLl9kb2ZEaXN0YW5jZSA9IHBhcmFtZXRlcnMuZG9mX2ZvY3Vz
X2Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmRvZl9mb2N1c19kaXN0YW5jZSA6
IC0xOworICAgICAgICBfdGhpcy5fZG9mQXBlcnR1cmUgPSBwYXJhbWV0ZXJzLmRvZl9hcGVydHVy
ZSA/IHBhcmFtZXRlcnMuZG9mX2FwZXJ0dXJlIDogMTsKKyAgICAgICAgX3RoaXMuX2RvZkRhcmtl
biA9IHBhcmFtZXRlcnMuZG9mX2RhcmtlbiA/IHBhcmFtZXRlcnMuZG9mX2RhcmtlbiA6IDA7Cisg
ICAgICAgIF90aGlzLl9kb2ZQZW50YWdvbiA9IHBhcmFtZXRlcnMuZG9mX3BlbnRhZ29uICE9PSB1
bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmRvZl9wZW50YWdvbiA6IHRydWU7CisgICAgICAgIF90aGlz
Ll9ibHVyTm9pc2UgPSBwYXJhbWV0ZXJzLmJsdXJfbm9pc2UgIT09IHVuZGVmaW5lZCA/IHBhcmFt
ZXRlcnMuYmx1cl9ub2lzZSA6IHRydWU7CisgICAgICAgIC8vIENyZWF0ZSBlZmZlY3RzCisgICAg
ICAgIF90aGlzLl9jcmVhdGVDaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MocmF0aW8pOwor
ICAgICAgICBfdGhpcy5fY3JlYXRlSGlnaGxpZ2h0c1Bvc3RQcm9jZXNzKHJhdGlvKTsKKyAgICAg
ICAgX3RoaXMuX2NyZWF0ZURlcHRoT2ZGaWVsZFBvc3RQcm9jZXNzKHJhdGlvIC8gNCk7CisgICAg
ICAgIC8vIFNldCB1cCBwaXBlbGluZQorICAgICAgICBfdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0
UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0
RW5naW5lKCksIF90aGlzLkxlbnNDaHJvbWF0aWNBYmVycmF0aW9uRWZmZWN0LCBmdW5jdGlvbiAo
KSB7IHJldHVybiBfdGhpcy5fY2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzOyB9LCB0cnVl
KSk7CisgICAgICAgIF90aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlw
ZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgX3RoaXMuSGln
aGxpZ2h0c0VuaGFuY2luZ0VmZmVjdCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX2hpZ2hs
aWdodHNQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICBfdGhpcy5hZGRFZmZlY3QobmV3
IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2Nl
bmUuZ2V0RW5naW5lKCksIF90aGlzLkxlbnNEZXB0aE9mRmllbGRFZmZlY3QsIGZ1bmN0aW9uICgp
IHsgcmV0dXJuIF90aGlzLl9kZXB0aE9mRmllbGRQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAg
ICAgICBpZiAoX3RoaXMuX2hpZ2hsaWdodHNHYWluID09PSAtMSkgeworICAgICAgICAgICAgX3Ro
aXMuX2Rpc2FibGVFZmZlY3QoX3RoaXMuSGlnaGxpZ2h0c0VuaGFuY2luZ0VmZmVjdCwgbnVsbCk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gRmluaXNoCisgICAgICAgIHNjZW5lLnBvc3RQcm9jZXNz
UmVuZGVyUGlwZWxpbmVNYW5hZ2VyLmFkZFBpcGVsaW5lKF90aGlzKTsKKyAgICAgICAgaWYgKGNh
bWVyYXMpIHsKKyAgICAgICAgICAgIHNjZW5lLnBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5h
Z2VyLmF0dGFjaENhbWVyYXNUb1JlbmRlclBpcGVsaW5lKG5hbWUsIGNhbWVyYXMpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0IHRo
ZSBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgIkxlbnNSZW5kZXJpbmdQaXBlbGluZSIKKyAg
ICAgKi8KKyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmdldENsYXNzTmFtZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJMZW5zUmVuZGVyaW5nUGlwZWxpbmUiOwor
ICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlbnNSZW5kZXJpbmdQaXBlbGluZS5w
cm90b3R5cGUsICJzY2VuZSIsIHsKKyAgICAgICAgLy8gUHJvcGVydGllcworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBhc3NvY2lhdGVkIHNjZW5lCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlbnNSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUsICJlZGdlQmx1ciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgb3Igc2V0cyB0aGUgZWRnZSBibHVyCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9lZGdlQmx1cjsKKyAgICAgICAgfSwK
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0RWRn
ZUJsdXIodmFsdWUpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoTGVuc1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImdyYWluQW1vdW50IiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBncmFpbiBhbW91bnQKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2dyYWluQW1vdW50OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdGhpcy5zZXRHcmFpbkFtb3VudCh2YWx1ZSk7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZW5zUmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLCAiY2hyb21hdGljQWJlcnJhdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3Igc2V0cyB0aGUgY2hyb21hdGljIGFiZXJyYXRpb24gYW1vdW50CisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9jaHJvbWF0aWNBYmVycmF0aW9uOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5zZXRDaHJvbWF0aWNBYmVycmF0aW9uKHZhbHVl
KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlbnNSZW5k
ZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJkb2ZBcGVydHVyZSIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgZGVwdGggb2YgZmllbGQgYXBlcnR1cmUKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2RvZkFwZXJ0dXJlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdGhpcy5zZXRBcGVydHVyZSh2YWx1ZSk7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJv
dG90eXBlLCAiZWRnZURpc3RvcnRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IG9yIHNldHMgdGhlIGVkZ2UgZGlzdG9ydGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzdG9ydGlvbjsKKyAgICAg
ICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMu
c2V0RWRnZURpc3RvcnRpb24odmFsdWUpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoTGVuc1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImRvZkRpc3Rv
cnRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGRlcHRo
IG9mIGZpZWxkIGRpc3RvcnRpb24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RvZkRpc3RhbmNlOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5zZXRGb2N1
c0Rpc3RhbmNlKHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJkYXJrZW5PdXRPZkZvY3Vz
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBkYXJrZW4gb3V0
IG9mIGZvY3VzIGFtb3VudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZG9mRGFya2VuOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5zZXREYXJrZW5PdXRP
ZkZvY3VzKHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJibHVyTm9pc2UiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYg
Ymx1ciBub2lzZSBpcyBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9ibHVyTm9pc2U7CisgICAgICAgIH0sCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9ibHVyTm9p
c2UgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJwZW50YWdvbkJva2VoIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlm
IHBlbnRhZ29uIGJva2VoIGlzIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BlbnRhZ29uQm9rZWhJc0VuYWJs
ZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVBlbnRhZ29uQm9r
ZWgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHRoaXMuZGlzYWJsZVBlbnRhZ29uQm9rZWgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlbnNSZW5kZXJpbmdQaXBlbGluZS5w
cm90b3R5cGUsICJoaWdobGlnaHRzR2FpbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgb3Igc2V0cyB0aGUgaGlnaGxpZ2h0IGdyYWluIGFtb3VudAorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0
c0dhaW47CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICB0aGlzLnNldEhpZ2hsaWdodHNHYWluKHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5
cGUsICJoaWdobGlnaHRzVGhyZXNob2xkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBvciBzZXRzIHRoZSBoaWdobGlnaHQgdGhyZXNob2xkCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHRzVGhy
ZXNob2xkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgdGhpcy5zZXRIaWdobGlnaHRzVGhyZXNob2xkKHZhbHVlKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLy8gcHVibGljIG1ldGhvZHMgKHNlbGYgZXhwbGFuYXRvcnkpCisgICAgLyoq
CisgICAgICogU2V0cyB0aGUgYW1vdW50IG9mIGJsdXIgYXQgdGhlIGVkZ2VzCisgICAgICogQHBh
cmFtIGFtb3VudCBibHVyIGFtb3VudAorICAgICAqLworICAgIExlbnNSZW5kZXJpbmdQaXBlbGlu
ZS5wcm90b3R5cGUuc2V0RWRnZUJsdXIgPSBmdW5jdGlvbiAoYW1vdW50KSB7IHRoaXMuX2VkZ2VC
bHVyID0gYW1vdW50OyB9OworICAgIC8qKgorICAgICAqIFNldHMgZWRnZSBibHVyIHRvIDAKKyAg
ICAgKi8KKyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc2FibGVFZGdlQmx1
ciA9IGZ1bmN0aW9uICgpIHsgdGhpcy5fZWRnZUJsdXIgPSAwOyB9OworICAgIC8qKgorICAgICAq
IFNldHMgdGhlIGFtb3V0IG9mIGdyYWluCisgICAgICogQHBhcmFtIGFtb3VudCBBbW91bnQgb2Yg
Z3JhaW4KKyAgICAgKi8KKyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLnNldEdy
YWluQW1vdW50ID0gZnVuY3Rpb24gKGFtb3VudCkgeyB0aGlzLl9ncmFpbkFtb3VudCA9IGFtb3Vu
dDsgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgZ3JhaW4gYW1vdW50IHRvIDAKKyAgICAgKi8KKyAg
ICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc2FibGVHcmFpbiA9IGZ1bmN0aW9u
ICgpIHsgdGhpcy5fZ3JhaW5BbW91bnQgPSAwOyB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IGNocm9tYXRpYyBhYmVycmF0aW9uIGFtb3VudAorICAgICAqIEBwYXJhbSBhbW91bnQgYW1vdW50
IG9mIGNocm9tYXRpYyBhYmVycmF0aW9uCisgICAgICovCisgICAgTGVuc1JlbmRlcmluZ1BpcGVs
aW5lLnByb3RvdHlwZS5zZXRDaHJvbWF0aWNBYmVycmF0aW9uID0gZnVuY3Rpb24gKGFtb3VudCkg
eyB0aGlzLl9jaHJvbWF0aWNBYmVycmF0aW9uID0gYW1vdW50OyB9OworICAgIC8qKgorICAgICAq
IFNldHMgY2hyb21hdGljIGFiZXJyYXRpb24gYW1vdW50IHRvIDAKKyAgICAgKi8KKyAgICBMZW5z
UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc2FibGVDaHJvbWF0aWNBYmVycmF0aW9uID0g
ZnVuY3Rpb24gKCkgeyB0aGlzLl9jaHJvbWF0aWNBYmVycmF0aW9uID0gMDsgfTsKKyAgICAvKioK
KyAgICAgKiBTZXRzIHRoZSBFZGdlRGlzdG9ydGlvbiBhbW91bnQKKyAgICAgKiBAcGFyYW0gYW1v
dW50IGFtb3VudCBvZiBFZGdlRGlzdG9ydGlvbgorICAgICAqLworICAgIExlbnNSZW5kZXJpbmdQ
aXBlbGluZS5wcm90b3R5cGUuc2V0RWRnZURpc3RvcnRpb24gPSBmdW5jdGlvbiAoYW1vdW50KSB7
IHRoaXMuX2Rpc3RvcnRpb24gPSBhbW91bnQ7IH07CisgICAgLyoqCisgICAgICogU2V0cyBlZGdl
IGRpc3RvcnRpb24gdG8gMAorICAgICAqLworICAgIExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90
b3R5cGUuZGlzYWJsZUVkZ2VEaXN0b3J0aW9uID0gZnVuY3Rpb24gKCkgeyB0aGlzLl9kaXN0b3J0
aW9uID0gMDsgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBGb2N1c0Rpc3RhbmNlIGFtb3Vu
dAorICAgICAqIEBwYXJhbSBhbW91bnQgYW1vdW50IG9mIEZvY3VzRGlzdGFuY2UKKyAgICAgKi8K
KyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLnNldEZvY3VzRGlzdGFuY2UgPSBm
dW5jdGlvbiAoYW1vdW50KSB7IHRoaXMuX2RvZkRpc3RhbmNlID0gYW1vdW50OyB9OworICAgIC8q
KgorICAgICogRGlzYWJsZXMgZGVwdGggb2YgZmllbGQKKyAgICAqLworICAgIExlbnNSZW5kZXJp
bmdQaXBlbGluZS5wcm90b3R5cGUuZGlzYWJsZURlcHRoT2ZGaWVsZCA9IGZ1bmN0aW9uICgpIHsg
dGhpcy5fZG9mRGlzdGFuY2UgPSAtMTsgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBBcGVy
dHVyZSBhbW91bnQKKyAgICAgKiBAcGFyYW0gYW1vdW50IGFtb3VudCBvZiBBcGVydHVyZQorICAg
ICAqLworICAgIExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuc2V0QXBlcnR1cmUgPSBm
dW5jdGlvbiAoYW1vdW50KSB7IHRoaXMuX2RvZkFwZXJ0dXJlID0gYW1vdW50OyB9OworICAgIC8q
KgorICAgICAqIFNldHMgdGhlIERhcmtlbk91dE9mRm9jdXMgYW1vdW50CisgICAgICogQHBhcmFt
IGFtb3VudCBhbW91bnQgb2YgRGFya2VuT3V0T2ZGb2N1cworICAgICAqLworICAgIExlbnNSZW5k
ZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuc2V0RGFya2VuT3V0T2ZGb2N1cyA9IGZ1bmN0aW9uIChh
bW91bnQpIHsgdGhpcy5fZG9mRGFya2VuID0gYW1vdW50OyB9OworICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBwZW50YWdvbiBib2tlaCBlZmZlY3QKKyAgICAgKi8KKyAgICBMZW5zUmVuZGVyaW5n
UGlwZWxpbmUucHJvdG90eXBlLmVuYWJsZVBlbnRhZ29uQm9rZWggPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuX2hpZ2hsaWdodHNQb3N0UHJvY2Vzcy51cGRhdGVFZmZlY3QoIiNkZWZpbmUg
UEVOVEFHT05cbiIpOworICAgICAgICB0aGlzLl9wZW50YWdvbkJva2VoSXNFbmFibGVkID0gdHJ1
ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc2FibGVzIHRoZSBwZW50YWdvbiBib2tlaCBl
ZmZlY3QKKyAgICAgKi8KKyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc2Fi
bGVQZW50YWdvbkJva2VoID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9wZW50YWdvbkJv
a2VoSXNFbmFibGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodHNQb3N0UHJvY2Vz
cy51cGRhdGVFZmZlY3QoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEVuYWJsZXMgbm9pc2Ug
Ymx1cgorICAgICAqLworICAgIExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuZW5hYmxl
Tm9pc2VCbHVyID0gZnVuY3Rpb24gKCkgeyB0aGlzLl9ibHVyTm9pc2UgPSB0cnVlOyB9OworICAg
IC8qKgorICAgICAqIERpc2FibGVzIG5vaXNlIGJsdXIKKyAgICAgKi8KKyAgICBMZW5zUmVuZGVy
aW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc2FibGVOb2lzZUJsdXIgPSBmdW5jdGlvbiAoKSB7IHRo
aXMuX2JsdXJOb2lzZSA9IGZhbHNlOyB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIEhpZ2hs
aWdodHNHYWluIGFtb3VudAorICAgICAqIEBwYXJhbSBhbW91bnQgYW1vdW50IG9mIEhpZ2hsaWdo
dHNHYWluCisgICAgICovCisgICAgTGVuc1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5zZXRI
aWdobGlnaHRzR2FpbiA9IGZ1bmN0aW9uIChhbW91bnQpIHsKKyAgICAgICAgdGhpcy5faGlnaGxp
Z2h0c0dhaW4gPSBhbW91bnQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBIaWdo
bGlnaHRzVGhyZXNob2xkIGFtb3VudAorICAgICAqIEBwYXJhbSBhbW91bnQgYW1vdW50IG9mIEhp
Z2hsaWdodHNUaHJlc2hvbGQKKyAgICAgKi8KKyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJv
dG90eXBlLnNldEhpZ2hsaWdodHNUaHJlc2hvbGQgPSBmdW5jdGlvbiAoYW1vdW50KSB7CisgICAg
ICAgIGlmICh0aGlzLl9oaWdobGlnaHRzR2FpbiA9PT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMu
X2hpZ2hsaWdodHNHYWluID0gMS4wOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2hpZ2hsaWdo
dHNUaHJlc2hvbGQgPSBhbW91bnQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNhYmxlcyBo
aWdobGlnaHRzCisgICAgICovCisgICAgTGVuc1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5k
aXNhYmxlSGlnaGxpZ2h0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0
c0dhaW4gPSAtMTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGhlIGludGVybmFs
IHBpcGVsaW5lIGFzc2V0cyBhbmQgZGV0YWNoZXMgdGhlIHBpcGVsaW5lIGZyb20gdGhlIHNjZW5l
IGNhbWVyYXMKKyAgICAgKiBAcGFyYW0gZGlzYWJsZURlcHRoUmVuZGVyIElmIHRoZSBzY2VucyBk
ZXB0aCByZW5kZXJpbmcgc2hvdWxkIGJlIGRpc2FibGVkIChkZWZhdWx0OiBmYWxzZSkKKyAgICAg
Ki8KKyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlv
biAoZGlzYWJsZURlcHRoUmVuZGVyKSB7CisgICAgICAgIGlmIChkaXNhYmxlRGVwdGhSZW5kZXIg
PT09IHZvaWQgMCkgeyBkaXNhYmxlRGVwdGhSZW5kZXIgPSBmYWxzZTsgfQorICAgICAgICB0aGlz
Ll9zY2VuZS5wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5kZXRhY2hDYW1lcmFzRnJv
bVJlbmRlclBpcGVsaW5lKHRoaXMuX25hbWUsIHRoaXMuX3NjZW5lLmNhbWVyYXMpOworICAgICAg
ICB0aGlzLl9jaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICB0
aGlzLl9oaWdobGlnaHRzUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICB0aGlzLl9kZXB0aE9m
RmllbGRQb3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIHRoaXMuX2dyYWluVGV4dHVyZS5kaXNw
b3NlKCk7CisgICAgICAgIGlmIChkaXNhYmxlRGVwdGhSZW5kZXIpIHsKKyAgICAgICAgICAgIHRo
aXMuX3NjZW5lLmRpc2FibGVEZXB0aFJlbmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8vIGNvbG9ycyBzaGlmdGluZyBhbmQgZGlzdG9ydGlvbgorICAgIExlbnNSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUuX2NyZWF0ZUNocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2VzcyA9IGZ1
bmN0aW9uIChyYXRpbykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlz
Ll9jaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9z
dFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9zdFByb2Nlc3MiXSgiTGVu
c0Nocm9tYXRpY0FiZXJyYXRpb24iLCAiY2hyb21hdGljQWJlcnJhdGlvbiIsIFsiY2hyb21hdGlj
X2FiZXJyYXRpb24iLCAic2NyZWVuX3dpZHRoIiwgInNjcmVlbl9oZWlnaHQiLCAiZGlyZWN0aW9u
IiwgInJhZGlhbEludGVuc2l0eSIsICJjZW50ZXJQb3NpdGlvbiJdLCAvLyB1bmlmb3JtcworICAg
ICAgICBbXSwgLy8gc2FtcGxlcnMKKyAgICAgICAgcmF0aW8sIG51bGwsIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0uVFJJ
TElORUFSX1NBTVBMSU5HTU9ERSwgdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCksIGZhbHNlKTsKKyAg
ICAgICAgdGhpcy5fY2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzLm9uQXBwbHkgPSBmdW5j
dGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoJ2Nocm9tYXRpY19h
YmVycmF0aW9uJywgX3RoaXMuX2Nocm9tYXRpY0FiZXJyYXRpb24pOworICAgICAgICAgICAgZWZm
ZWN0LnNldEZsb2F0KCdzY3JlZW5fd2lkdGgnLCBfdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZ2V0
UmVuZGVyV2lkdGgoKSk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoJ3NjcmVlbl9oZWln
aHQnLCBfdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZ2V0UmVuZGVySGVpZ2h0KCkpOworICAgICAg
ICAgICAgZWZmZWN0LnNldEZsb2F0KCdyYWRpYWxJbnRlbnNpdHknLCAxKTsKKyAgICAgICAgICAg
IGVmZmVjdC5zZXRGbG9hdDIoJ2RpcmVjdGlvbicsIDE3LCAxNyk7CisgICAgICAgICAgICBlZmZl
Y3Quc2V0RmxvYXQyKCdjZW50ZXJQb3NpdGlvbicsIDAuNSwgMC41KTsKKyAgICAgICAgfTsKKyAg
ICB9OworICAgIC8vIGhpZ2hsaWdodHMgZW5oYW5jaW5nCisgICAgTGVuc1JlbmRlcmluZ1BpcGVs
aW5lLnByb3RvdHlwZS5fY3JlYXRlSGlnaGxpZ2h0c1Bvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHJh
dGlvKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdo
dHNQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJQb3N0UHJvY2VzcyJdKCJMZW5zSGlnaGxpZ2h0cyIsICJsZW5z
SGlnaGxpZ2h0cyIsIFsiZ2FpbiIsICJ0aHJlc2hvbGQiLCAic2NyZWVuX3dpZHRoIiwgInNjcmVl
bl9oZWlnaHQiXSwgLy8gdW5pZm9ybXMKKyAgICAgICAgW10sIC8vIHNhbXBsZXJzCisgICAgICAg
IHJhdGlvLCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVGV4dHVyZSJdLlRSSUxJTkVBUl9TQU1QTElOR01PREUsIHRoaXMuX3Nj
ZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgdGhpcy5fZG9mUGVudGFnb24gPyAiI2RlZmluZSBQRU5U
QUdPTlxuIiA6ICIiKTsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0c1Bvc3RQcm9jZXNzLm9uQXBw
bHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoJ2dh
aW4nLCBfdGhpcy5faGlnaGxpZ2h0c0dhaW4pOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0
KCd0aHJlc2hvbGQnLCBfdGhpcy5faGlnaGxpZ2h0c1RocmVzaG9sZCk7CisgICAgICAgICAgICBl
ZmZlY3Quc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2VzcygidGV4dHVyZVNhbXBsZXIiLCBfdGhpcy5f
Y2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRG
bG9hdCgnc2NyZWVuX3dpZHRoJywgX3RoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldFJlbmRlcldp
ZHRoKCkpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdzY3JlZW5faGVpZ2h0JywgX3Ro
aXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldFJlbmRlckhlaWdodCgpKTsKKyAgICAgICAgfTsKKyAg
ICB9OworICAgIC8vIGNvbG9ycyBzaGlmdGluZyBhbmQgZGlzdG9ydGlvbgorICAgIExlbnNSZW5k
ZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2NyZWF0ZURlcHRoT2ZGaWVsZFBvc3RQcm9jZXNzID0g
ZnVuY3Rpb24gKHJhdGlvKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRo
aXMuX2RlcHRoT2ZGaWVsZFBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBvc3RQcm9jZXNzIl0oIkxlbnNEZXB0
aE9mRmllbGQiLCAiZGVwdGhPZkZpZWxkIiwgWworICAgICAgICAgICAgImdyYWluX2Ftb3VudCIs
ICJibHVyX25vaXNlIiwgInNjcmVlbl93aWR0aCIsICJzY3JlZW5faGVpZ2h0IiwgImRpc3RvcnRp
b24iLCAiZG9mX2VuYWJsZWQiLAorICAgICAgICAgICAgInNjcmVlbl9kaXN0YW5jZSIsICJhcGVy
dHVyZSIsICJkYXJrZW4iLCAiZWRnZV9ibHVyIiwgImhpZ2hsaWdodHMiLCAibmVhciIsICJmYXIi
CisgICAgICAgIF0sIFsiZGVwdGhTYW1wbGVyIiwgImdyYWluU2FtcGxlciIsICJoaWdobGlnaHRz
U2FtcGxlciJdLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RF
LCB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UpOworICAgICAgICB0aGlzLl9kZXB0aE9m
RmllbGRQb3N0UHJvY2Vzcy5vbkFwcGx5ID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAg
ICAgZWZmZWN0LnNldFRleHR1cmUoImRlcHRoU2FtcGxlciIsIF90aGlzLl9kZXB0aFRleHR1cmUp
OworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoImdyYWluU2FtcGxlciIsIF90aGlzLl9n
cmFpblRleHR1cmUpOworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nl
c3MoInRleHR1cmVTYW1wbGVyIiwgX3RoaXMuX2hpZ2hsaWdodHNQb3N0UHJvY2Vzcyk7CisgICAg
ICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2VzcygiaGlnaGxpZ2h0c1NhbXBs
ZXIiLCBfdGhpcy5fZGVwdGhPZkZpZWxkUG9zdFByb2Nlc3MpOworICAgICAgICAgICAgZWZmZWN0
LnNldEZsb2F0KCdncmFpbl9hbW91bnQnLCBfdGhpcy5fZ3JhaW5BbW91bnQpOworICAgICAgICAg
ICAgZWZmZWN0LnNldEJvb2woJ2JsdXJfbm9pc2UnLCBfdGhpcy5fYmx1ck5vaXNlKTsKKyAgICAg
ICAgICAgIGVmZmVjdC5zZXRGbG9hdCgnc2NyZWVuX3dpZHRoJywgX3RoaXMuX3NjZW5lLmdldEVu
Z2luZSgpLmdldFJlbmRlcldpZHRoKCkpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdz
Y3JlZW5faGVpZ2h0JywgX3RoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldFJlbmRlckhlaWdodCgp
KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgnZGlzdG9ydGlvbicsIF90aGlzLl9kaXN0
b3J0aW9uKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRCb29sKCdkb2ZfZW5hYmxlZCcsIChfdGhp
cy5fZG9mRGlzdGFuY2UgIT09IC0xKSk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoJ3Nj
cmVlbl9kaXN0YW5jZScsIDEuMCAvICgwLjEgLSAxLjAgLyBfdGhpcy5fZG9mRGlzdGFuY2UpKTsK
KyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgnYXBlcnR1cmUnLCBfdGhpcy5fZG9mQXBlcnR1
cmUpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdkYXJrZW4nLCBfdGhpcy5fZG9mRGFy
a2VuKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgnZWRnZV9ibHVyJywgX3RoaXMuX2Vk
Z2VCbHVyKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRCb29sKCdoaWdobGlnaHRzJywgKF90aGlz
Ll9oaWdobGlnaHRzR2FpbiAhPT0gLTEpKTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fc2NlbmUu
YWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCduZWFyJywg
X3RoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5taW5aKTsKKyAgICAgICAgICAgICAgICBlZmZlY3Qu
c2V0RmxvYXQoJ2ZhcicsIF90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEubWF4Wik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisgICAgfTsKKyAgICAvLyBjcmVhdGVzIGEgYmxhY2sgYW5kIHdo
aXRlIHJhbmRvbSBub2lzZSB0ZXh0dXJlLCA1MTJ4NTEyCisgICAgTGVuc1JlbmRlcmluZ1BpcGVs
aW5lLnByb3RvdHlwZS5fY3JlYXRlR3JhaW5UZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgc2l6ZSA9IDUxMjsKKyAgICAgICAgdGhpcy5fZ3JhaW5UZXh0dXJlID0gbmV3IF9NYXRl
cmlhbHNfVGV4dHVyZXNfZHluYW1pY1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siRHluYW1pY1RleHR1cmUiXSgiTGVuc05vaXNlVGV4dHVyZSIsIHNpemUsIHRoaXMuX3NjZW5l
LCBmYWxzZSwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUpOworICAgICAgICB0aGlz
Ll9ncmFpblRleHR1cmUud3JhcFUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVGV4dHVyZSJdLldSQVBfQUREUkVTU01PREU7CisgICAg
ICAgIHRoaXMuX2dyYWluVGV4dHVyZS53cmFwViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0uV1JBUF9BRERSRVNTTU9E
RTsKKyAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLl9ncmFpblRleHR1cmUuZ2V0Q29udGV4dCgp
OworICAgICAgICB2YXIgcmFuZCA9IGZ1bmN0aW9uIChtaW4sIG1heCkgeworICAgICAgICAgICAg
cmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjsKKyAgICAgICAgfTsKKyAg
ICAgICAgdmFyIHZhbHVlOworICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHNpemU7IHgrKykg
eworICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBzaXplOyB5KyspIHsKKyAgICAgICAg
ICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IocmFuZCgwLjQyLCAwLjU4KSAqIDI1NSk7CisgICAg
ICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAncmdiKCcgKyB2YWx1ZSArICcsICcgKyB2
YWx1ZSArICcsICcgKyB2YWx1ZSArICcpJzsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxS
ZWN0KHgsIHksIDEsIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMu
X2dyYWluVGV4dHVyZS51cGRhdGUoZmFsc2UpOworICAgIH07CisgICAgcmV0dXJuIExlbnNSZW5k
ZXJpbmdQaXBlbGluZTsKK30oX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nl
c3NSZW5kZXJQaXBlbGluZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQb3N0UHJvY2Vz
c1JlbmRlclBpcGVsaW5lIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL1JlbmRlclBpcGVsaW5lL1BpcGVsaW5lcy9zc2FvMlJlbmRlcmluZ1BpcGVsaW5lLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2VzL1JlbmRl
clBpcGVsaW5lL1BpcGVsaW5lcy9zc2FvMlJlbmRlcmluZ1BpcGVsaW5lLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNTQU8yUmVuZGVyaW5nUGlw
ZWxpbmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU1NBTzJSZW5kZXJp
bmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1NBTzJSZW5kZXJpbmdQaXBlbGluZTsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVs
ZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
bG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvZGVjb3JhdG9y
cyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21h
dGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0
dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRl
cmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRlcmlhbHNfVGV4dHVyZXNfZHluYW1pY1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGVyaWFscy9UZXh0dXJl
cy9keW5hbWljVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvZHluYW1pY1RleHR1cmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vz
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bv
c3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNf
UmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vUG9zdFByb2Nl
c3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lICovICIuL1Bvc3RQ
cm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bv
c3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5l
L3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0ICovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxp
bmUvcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfUG9zdFByb2Nlc3Nlc19wYXNzUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQcm9jZXNzZXMvcGFz
c1Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcGFzc1Bvc3RQcm9jZXNzLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy90eXBl
U3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL0VuZ2luZXMvZW5naW5lU3RvcmUgKi8gIi4v
RW5naW5lcy9lbmdpbmVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0
UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2Vy
U2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi8uLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQ
cm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQgKi8gIi4vUG9zdFByb2Nl
c3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5l
Q29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfc3NhbzJf
ZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi8uLi9TaGFkZXJzL3NzYW8yLmZyYWdtZW50ICovICIuL1NoYWRlcnMvc3Nh
bzIuZnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19zc2Fv
Q29tYmluZV9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1NoYWRlcnMvc3Nhb0NvbWJpbmUuZnJhZ21lbnQgKi8g
Ii4vU2hhZGVycy9zc2FvQ29tYmluZS5mcmFnbWVudC50cyIpOworCisKKworCisKKworCisKKwor
CisKKworCisKKworLyoqCisgKiBSZW5kZXIgcGlwZWxpbmUgdG8gcHJvZHVjZSBzc2FvIGVmZmVj
dAorICovCit2YXIgU1NBTzJSZW5kZXJpbmdQaXBlbGluZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIEBjb25zdHJ1Y3RvcgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSByZW5kZXJpbmcgcGlwZWxp
bmUgbmFtZQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgbGlua2VkIHRvIHRoaXMgcGlw
ZWxpbmUKKyAgICAgKiBAcGFyYW0gcmF0aW8gVGhlIHNpemUgb2YgdGhlIHBvc3Rwcm9jZXNzZXMu
IENhbiBiZSBhIG51bWJlciBzaGFyZWQgYmV0d2VlbiBwYXNzZXMgb3IgYW4gb2JqZWN0IGZvciBt
b3JlIHByZWNpc2lvbjogeyBzc2FvUmF0aW86IDAuNSwgYmx1clJhdGlvOiAxLjAgfQorICAgICAq
IEBwYXJhbSBjYW1lcmFzIFRoZSBhcnJheSBvZiBjYW1lcmFzIHRoYXQgdGhlIHJlbmRlcmluZyBw
aXBlbGluZSB3aWxsIGJlIGF0dGFjaGVkIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gU1NBTzJS
ZW5kZXJpbmdQaXBlbGluZShuYW1lLCBzY2VuZSwgcmF0aW8sIGNhbWVyYXMpIHsKKyAgICAgICAg
dmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NlbmUuZ2V0RW5naW5lKCksIG5hbWUpIHx8
IHRoaXM7CisgICAgICAgIC8vIE1lbWJlcnMKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBpZ25v
cmUKKyAgICAgICAgKiBUaGUgUGFzc1Bvc3RQcm9jZXNzIGlkIGluIHRoZSBwaXBlbGluZSB0aGF0
IGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBzY2VuZSBjb2xvcgorICAgICAgICAqLworICAgICAgICBf
dGhpcy5TU0FPT3JpZ2luYWxTY2VuZUNvbG9yRWZmZWN0ID0gIlNTQU9PcmlnaW5hbFNjZW5lQ29s
b3JFZmZlY3QiOworICAgICAgICAvKioKKyAgICAgICAgICogQGlnbm9yZQorICAgICAgICAqIFRo
ZSBTU0FPIFBvc3RQcm9jZXNzIGlkIGluIHRoZSBwaXBlbGluZQorICAgICAgICAqLworICAgICAg
ICBfdGhpcy5TU0FPUmVuZGVyRWZmZWN0ID0gIlNTQU9SZW5kZXJFZmZlY3QiOworICAgICAgICAv
KioKKyAgICAgICAgICogQGlnbm9yZQorICAgICAgICAqIFRoZSBob3Jpem9udGFsIGJsdXIgUG9z
dFByb2Nlc3MgaWQgaW4gdGhlIHBpcGVsaW5lCisgICAgICAgICovCisgICAgICAgIF90aGlzLlNT
QU9CbHVySFJlbmRlckVmZmVjdCA9ICJTU0FPQmx1ckhSZW5kZXJFZmZlY3QiOworICAgICAgICAv
KioKKyAgICAgICAgICogQGlnbm9yZQorICAgICAgICAqIFRoZSB2ZXJ0aWNhbCBibHVyIFBvc3RQ
cm9jZXNzIGlkIGluIHRoZSBwaXBlbGluZQorICAgICAgICAqLworICAgICAgICBfdGhpcy5TU0FP
Qmx1clZSZW5kZXJFZmZlY3QgPSAiU1NBT0JsdXJWUmVuZGVyRWZmZWN0IjsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgKiBUaGUgUG9zdFByb2Nlc3MgaWQgaW4gdGhl
IHBpcGVsaW5lIHRoYXQgY29tYmluZXMgdGhlIFNTQU8tQmx1ciBvdXRwdXQgd2l0aCB0aGUgb3Jp
Z2luYWwgc2NlbmUgY29sb3IgKFNTQU9PcmlnaW5hbFNjZW5lQ29sb3JFZmZlY3QpCisgICAgICAg
ICovCisgICAgICAgIF90aGlzLlNTQU9Db21iaW5lUmVuZGVyRWZmZWN0ID0gIlNTQU9Db21iaW5l
UmVuZGVyRWZmZWN0IjsKKyAgICAgICAgLyoqCisgICAgICAgICogVGhlIG91dHB1dCBzdHJlbmd0
aCBvZiB0aGUgU1NBTyBwb3N0LXByb2Nlc3MuIERlZmF1bHQgdmFsdWUgaXMgMS4wLgorICAgICAg
ICAqLworICAgICAgICBfdGhpcy50b3RhbFN0cmVuZ3RoID0gMS4wOworICAgICAgICAvKioKKyAg
ICAgICAgKiBNYXhpbXVtIGRlcHRoIHZhbHVlIHRvIHN0aWxsIHJlbmRlciBBTy4gQSBzbW9vdGgg
ZmFsbG9mZiBtYWtlcyB0aGUgZGltbWluZyBtb3JlIG5hdHVyYWwsIHNvIHRoZXJlIHdpbGwgYmUg
bm8gYWJydXB0IHNoYWRpbmcgY2hhbmdlLgorICAgICAgICAqLworICAgICAgICBfdGhpcy5tYXha
ID0gMTAwLjA7CisgICAgICAgIC8qKgorICAgICAgICAqIEluIG9yZGVyIHRvIHNhdmUgcGVyZm9y
bWFuY2VzLCBTU0FPIHJhZGl1cyBpcyBjbGFtcGVkIG9uIGNsb3NlIGdlb21ldHJ5LiBUaGlzIHJh
dGlvIGNoYW5nZXMgYnkgaG93IG11Y2gKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubWluWkFz
cGVjdCA9IDAuMjsKKyAgICAgICAgX3RoaXMuX3NhbXBsZXMgPSA4OworICAgICAgICBfdGhpcy5f
dGV4dHVyZVNhbXBsZXMgPSAxOworICAgICAgICBfdGhpcy5fZXhwZW5zaXZlQmx1ciA9IHRydWU7
CisgICAgICAgIC8qKgorICAgICAgICAqIFRoZSByYWRpdXMgYXJvdW5kIHRoZSBhbmFseXplZCBw
aXhlbCB1c2VkIGJ5IHRoZSBTU0FPIHBvc3QtcHJvY2Vzcy4gRGVmYXVsdCB2YWx1ZSBpcyAyLjAK
KyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucmFkaXVzID0gMi4wOworICAgICAgICAvKioKKyAg
ICAgICAgKiBUaGUgYmFzZSBjb2xvciBvZiB0aGUgU1NBTyBwb3N0LXByb2Nlc3MKKyAgICAgICAg
KiBUaGUgZmluYWwgcmVzdWx0IGlzICJiYXNlICsgc3NhbyIgYmV0d2VlbiBbMCwgMV0KKyAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMuYmFzZSA9IDA7CisgICAgICAgIF90aGlzLl9maXJzdFVwZGF0
ZSA9IHRydWU7CisgICAgICAgIF90aGlzLl9iaXRzID0gbmV3IFVpbnQzMkFycmF5KDEpOworICAg
ICAgICBfdGhpcy5fc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgX3RoaXMuX3JhdGlvID0gcmF0aW87
CisgICAgICAgIGlmICghX3RoaXMuaXNTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgIF9NaXNjX2xv
Z2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJvcigiU1NBTyAy
IG5lZWRzIFdlYkdMIDIgc3VwcG9ydC4iKTsKKyAgICAgICAgICAgIHJldHVybiBfdGhpczsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgc3Nhb1JhdGlvID0gX3RoaXMuX3JhdGlvLnNzYW9SYXRpbyB8
fCByYXRpbzsKKyAgICAgICAgdmFyIGJsdXJSYXRpbyA9IF90aGlzLl9yYXRpby5ibHVyUmF0aW8g
fHwgcmF0aW87CisgICAgICAgIC8vIFNldCB1cCBhc3NldHMKKyAgICAgICAgdmFyIGdlb21ldHJ5
QnVmZmVyUmVuZGVyZXIgPSBzY2VuZS5lbmFibGVHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyKCk7Cisg
ICAgICAgIF90aGlzLl9jcmVhdGVSYW5kb21UZXh0dXJlKCk7CisgICAgICAgIF90aGlzLl9kZXB0
aFRleHR1cmUgPSBnZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLmdldEdCdWZmZXIoKS50ZXh0dXJlc1sw
XTsKKyAgICAgICAgX3RoaXMuX25vcm1hbFRleHR1cmUgPSBnZW9tZXRyeUJ1ZmZlclJlbmRlcmVy
LmdldEdCdWZmZXIoKS50ZXh0dXJlc1sxXTsKKyAgICAgICAgX3RoaXMuX29yaWdpbmFsQ29sb3JQ
b3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wYXNzUG9zdFByb2Nlc3NfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siUGFzc1Bvc3RQcm9jZXNzIl0oIlNTQU9PcmlnaW5hbFNjZW5l
Q29sb3IiLCAxLjAsIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2Vu
ZS5nZXRFbmdpbmUoKSwgZmFsc2UpOworICAgICAgICBfdGhpcy5fb3JpZ2luYWxDb2xvclBvc3RQ
cm9jZXNzLnNhbXBsZXMgPSBfdGhpcy50ZXh0dXJlU2FtcGxlczsKKyAgICAgICAgX3RoaXMuX2Ny
ZWF0ZVNTQU9Qb3N0UHJvY2VzcygxLjApOworICAgICAgICBfdGhpcy5fY3JlYXRlQmx1clBvc3RQ
cm9jZXNzKHNzYW9SYXRpbywgYmx1clJhdGlvKTsKKyAgICAgICAgX3RoaXMuX2NyZWF0ZVNTQU9D
b21iaW5lUG9zdFByb2Nlc3MoYmx1clJhdGlvKTsKKyAgICAgICAgLy8gU2V0IHVwIHBpcGVsaW5l
CisgICAgICAgIF90aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxp
bmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
UG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgX3RoaXMuU1NBT09y
aWdpbmFsU2NlbmVDb2xvckVmZmVjdCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX29yaWdp
bmFsQ29sb3JQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICBfdGhpcy5hZGRFZmZlY3Qo
bmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0o
c2NlbmUuZ2V0RW5naW5lKCksIF90aGlzLlNTQU9SZW5kZXJFZmZlY3QsIGZ1bmN0aW9uICgpIHsg
cmV0dXJuIF90aGlzLl9zc2FvUG9zdFByb2Nlc3M7IH0sIHRydWUpKTsKKyAgICAgICAgX3RoaXMu
YWRkRWZmZWN0KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1Jl
bmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQb3N0UHJvY2Vzc1JlbmRl
ckVmZmVjdCJdKHNjZW5lLmdldEVuZ2luZSgpLCBfdGhpcy5TU0FPQmx1ckhSZW5kZXJFZmZlY3Qs
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9ibHVySFBvc3RQcm9jZXNzOyB9LCB0cnVlKSk7
CisgICAgICAgIF90aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxp
bmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
UG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgX3RoaXMuU1NBT0Js
dXJWUmVuZGVyRWZmZWN0LCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fYmx1clZQb3N0UHJv
Y2VzczsgfSwgdHJ1ZSkpOworICAgICAgICBfdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vz
c2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV84X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5l
KCksIF90aGlzLlNTQU9Db21iaW5lUmVuZGVyRWZmZWN0LCBmdW5jdGlvbiAoKSB7IHJldHVybiBf
dGhpcy5fc3Nhb0NvbWJpbmVQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICAvLyBGaW5p
c2gKKyAgICAgICAgc2NlbmUucG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIuYWRkUGlw
ZWxpbmUoX3RoaXMpOworICAgICAgICBpZiAoY2FtZXJhcykgeworICAgICAgICAgICAgc2NlbmUu
cG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIuYXR0YWNoQ2FtZXJhc1RvUmVuZGVyUGlw
ZWxpbmUobmFtZSwgY2FtZXJhcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF90aGlzOwor
ICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5w
cm90b3R5cGUsICJzYW1wbGVzIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zYW1wbGVzOworICAgICAgICB9LAorICAgICAgICAvKioKKyAg
ICAgICAgKiBOdW1iZXIgb2Ygc2FtcGxlcyB1c2VkIGZvciB0aGUgU1NBTyBjYWxjdWxhdGlvbnMu
IERlZmF1bHQgdmFsdWUgaXMgOAorICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChu
KSB7CisgICAgICAgICAgICB0aGlzLl9zc2FvUG9zdFByb2Nlc3MudXBkYXRlRWZmZWN0KCIjZGVm
aW5lIFNBTVBMRVMgIiArIG4gKyAiXG4jZGVmaW5lIFNTQU8iKTsKKyAgICAgICAgICAgIHRoaXMu
X3NhbXBsZXMgPSBuOworICAgICAgICAgICAgdGhpcy5fc2FtcGxlU3BoZXJlID0gdGhpcy5fZ2Vu
ZXJhdGVIZW1pc3BoZXJlKCk7CisgICAgICAgICAgICB0aGlzLl9maXJzdFVwZGF0ZSA9IHRydWU7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTU0FPMlJlbmRl
cmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgInRleHR1cmVTYW1wbGVzIiwgeworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlU2FtcGxlczsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICogTnVtYmVyIG9mIHNhbXBsZXMgdG8g
dXNlIGZvciBhbnRpYWxpYXNpbmcKKyAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
bikgeworICAgICAgICAgICAgdGhpcy5fdGV4dHVyZVNhbXBsZXMgPSBuOworICAgICAgICAgICAg
dGhpcy5fb3JpZ2luYWxDb2xvclBvc3RQcm9jZXNzLnNhbXBsZXMgPSBuOworICAgICAgICAgICAg
dGhpcy5fYmx1ckhQb3N0UHJvY2Vzcy5zYW1wbGVzID0gbjsKKyAgICAgICAgICAgIHRoaXMuX2Js
dXJWUG9zdFByb2Nlc3Muc2FtcGxlcyA9IG47CisgICAgICAgICAgICB0aGlzLl9zc2FvUG9zdFBy
b2Nlc3Muc2FtcGxlcyA9IG47CisgICAgICAgICAgICB0aGlzLl9zc2FvQ29tYmluZVBvc3RQcm9j
ZXNzLnNhbXBsZXMgPSBuOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJleHBlbnNpdmVCbHVyIiwg
eworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9l
eHBlbnNpdmVCbHVyOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgKiBJZiBiaWxh
dGVyYWwgYmx1ciBzaG91bGQgYmUgdXNlZAorICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uIChiKSB7CisgICAgICAgICAgICB0aGlzLl9ibHVySFBvc3RQcm9jZXNzLnVwZGF0ZUVmZmVj
dCgiI2RlZmluZSBCSUxBVEVSQUxfQkxVUlxuI2RlZmluZSBCSUxBVEVSQUxfQkxVUl9IXG4jZGVm
aW5lIFNBTVBMRVMgMTZcbiNkZWZpbmUgRVhQRU5TSVZFICIgKyAoYiA/ICIxIiA6ICIwIikgKyAi
XG4iLCBudWxsLCBbInRleHR1cmVTYW1wbGVyIiwgImRlcHRoU2FtcGxlciJdKTsKKyAgICAgICAg
ICAgIHRoaXMuX2JsdXJWUG9zdFByb2Nlc3MudXBkYXRlRWZmZWN0KCIjZGVmaW5lIEJJTEFURVJB
TF9CTFVSXG4jZGVmaW5lIFNBTVBMRVMgMTZcbiNkZWZpbmUgRVhQRU5TSVZFICIgKyAoYiA/ICIx
IiA6ICIwIikgKyAiXG4iLCBudWxsLCBbInRleHR1cmVTYW1wbGVyIiwgImRlcHRoU2FtcGxlciJd
KTsKKyAgICAgICAgICAgIHRoaXMuX2V4cGVuc2l2ZUJsdXIgPSBiOworICAgICAgICAgICAgdGhp
cy5fZmlyc3RVcGRhdGUgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoU1NBTzJSZW5kZXJpbmdQaXBlbGluZSwgIklzU3VwcG9ydGVkIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgKiAgU3VwcG9ydCB0ZXN0LgorICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBlbmdpbmUgPSBfRW5naW5lc19lbmdp
bmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siRW5naW5lU3RvcmUiXS5MYXN0
Q3JlYXRlZEVuZ2luZTsKKyAgICAgICAgICAgIGlmICghZW5naW5lKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGVuZ2lu
ZS5nZXRDYXBzKCkuZHJhd0J1ZmZlcnNFeHRlbnNpb247CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwg
InNjZW5lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhY3RpdmUgc2NlbmUKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3NjZW5lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvLyBQdWJsaWMgTWV0aG9kcwor
ICAgIC8qKgorICAgICAqIEdldCB0aGUgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zICJTU0FP
MlJlbmRlcmluZ1BpcGVsaW5lIgorICAgICAqLworICAgIFNTQU8yUmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJT
U0FPMlJlbmRlcmluZ1BpcGVsaW5lIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMg
dGhlIGludGVybmFsIHBpcGVsaW5lIGFzc2V0cyBhbmQgZGV0YXRjaGVzIHRoZSBwaXBlbGluZSBm
cm9tIHRoZSBzY2VuZSBjYW1lcmFzCisgICAgICovCisgICAgU1NBTzJSZW5kZXJpbmdQaXBlbGlu
ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChkaXNhYmxlR2VvbWV0cnlCdWZmZXJSZW5k
ZXJlcikgeworICAgICAgICBpZiAoZGlzYWJsZUdlb21ldHJ5QnVmZmVyUmVuZGVyZXIgPT09IHZv
aWQgMCkgeyBkaXNhYmxlR2VvbWV0cnlCdWZmZXJSZW5kZXJlciA9IGZhbHNlOyB9CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2NlbmUuY2FtZXJhcy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX3NjZW5lLmNhbWVyYXNbaV07CisgICAgICAg
ICAgICB0aGlzLl9vcmlnaW5hbENvbG9yUG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAg
ICAgICAgICAgdGhpcy5fc3Nhb1Bvc3RQcm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAg
ICAgIHRoaXMuX2JsdXJIUG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAg
dGhpcy5fYmx1clZQb3N0UHJvY2Vzcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB0aGlz
Ll9zc2FvQ29tYmluZVBvc3RQcm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9yYW5kb21UZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgaWYgKGRpc2FibGVH
ZW9tZXRyeUJ1ZmZlclJlbmRlcmVyKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5kaXNhYmxl
R2VvbWV0cnlCdWZmZXJSZW5kZXJlcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5l
LnBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyLmRldGFjaENhbWVyYXNGcm9tUmVuZGVy
UGlwZWxpbmUodGhpcy5fbmFtZSwgdGhpcy5fc2NlbmUuY2FtZXJhcyk7CisgICAgICAgIF9zdXBl
ci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOworICAgIH07CisgICAgLy8gUHJpdmF0ZSBN
ZXRob2RzCisgICAgU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2NyZWF0ZUJsdXJQ
b3N0UHJvY2VzcyA9IGZ1bmN0aW9uIChzc2FvUmF0aW8sIGJsdXJSYXRpbykgeworICAgICAgICB2
YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl9zYW1wbGVyT2Zmc2V0cyA9IFtdOworICAg
ICAgICB2YXIgZXhwZW5zaXZlID0gdGhpcy5leHBlbnNpdmVCbHVyOworICAgICAgICBmb3IgKHZh
ciBpID0gLTg7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMuX3NhbXBsZXJPZmZzZXRz
LnB1c2goaSAqIDIgKyAwLjUpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2JsdXJIUG9zdFBy
b2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siUG9zdFByb2Nlc3MiXSgiQmx1ckgiLCAic3NhbzIiLCBbIm91dFNpemUiLCAi
c2FtcGxlck9mZnNldHMiLCAibmVhciIsICJmYXIiLCAicmFkaXVzIl0sIFsiZGVwdGhTYW1wbGVy
Il0sIHNzYW9SYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFLCB0
aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsICIjZGVmaW5lIEJJTEFURVJBTF9CTFVSXG4j
ZGVmaW5lIEJJTEFURVJBTF9CTFVSX0hcbiNkZWZpbmUgU0FNUExFUyAxNlxuI2RlZmluZSBFWFBF
TlNJVkUgIiArIChleHBlbnNpdmUgPyAiMSIgOiAiMCIpICsgIlxuIik7CisgICAgICAgIHRoaXMu
X2JsdXJIUG9zdFByb2Nlc3Mub25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAg
ICAgIGlmICghX3RoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgib3V0U2l6
ZSIsIF90aGlzLl9zc2FvQ29tYmluZVBvc3RQcm9jZXNzLndpZHRoID4gMCA/IF90aGlzLl9zc2Fv
Q29tYmluZVBvc3RQcm9jZXNzLndpZHRoIDogX3RoaXMuX29yaWdpbmFsQ29sb3JQb3N0UHJvY2Vz
cy53aWR0aCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoIm5lYXIiLCBfdGhpcy5fc2Nl
bmUuYWN0aXZlQ2FtZXJhLm1pblopOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJmYXIi
LCBfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLm1heFopOworICAgICAgICAgICAgZWZmZWN0LnNl
dEZsb2F0KCJyYWRpdXMiLCBfdGhpcy5yYWRpdXMpOworICAgICAgICAgICAgZWZmZWN0LnNldFRl
eHR1cmUoImRlcHRoU2FtcGxlciIsIF90aGlzLl9kZXB0aFRleHR1cmUpOworICAgICAgICAgICAg
aWYgKF90aGlzLl9maXJzdFVwZGF0ZSkgeworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRBcnJh
eSgic2FtcGxlck9mZnNldHMiLCBfdGhpcy5fc2FtcGxlck9mZnNldHMpOworICAgICAgICAgICAg
fQorICAgICAgICB9OworICAgICAgICB0aGlzLl9ibHVyVlBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0
UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQ
cm9jZXNzIl0oIkJsdXJWIiwgInNzYW8yIiwgWyJvdXRTaXplIiwgInNhbXBsZXJPZmZzZXRzIiwg
Im5lYXIiLCAiZmFyIiwgInJhZGl1cyJdLCBbImRlcHRoU2FtcGxlciJdLCBibHVyUmF0aW8sIG51
bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJUZXh0dXJlIl0uVFJJTElORUFSX1NBTVBMSU5HTU9ERSwgdGhpcy5fc2NlbmUuZ2V0RW5n
aW5lKCksIGZhbHNlLCAiI2RlZmluZSBCSUxBVEVSQUxfQkxVUlxuI2RlZmluZSBCSUxBVEVSQUxf
QkxVUl9WXG4jZGVmaW5lIFNBTVBMRVMgMTZcbiNkZWZpbmUgRVhQRU5TSVZFICIgKyAoZXhwZW5z
aXZlID8gIjEiIDogIjAiKSArICJcbiIpOworICAgICAgICB0aGlzLl9ibHVyVlBvc3RQcm9jZXNz
Lm9uQXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLl9z
Y2VuZS5hY3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoIm91dFNpemUiLCBfdGhpcy5fc3Nhb0Nv
bWJpbmVQb3N0UHJvY2Vzcy5oZWlnaHQgPiAwID8gX3RoaXMuX3NzYW9Db21iaW5lUG9zdFByb2Nl
c3MuaGVpZ2h0IDogX3RoaXMuX29yaWdpbmFsQ29sb3JQb3N0UHJvY2Vzcy5oZWlnaHQpOworICAg
ICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJuZWFyIiwgX3RoaXMuX3NjZW5lLmFjdGl2ZUNhbWVy
YS5taW5aKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiZmFyIiwgX3RoaXMuX3NjZW5l
LmFjdGl2ZUNhbWVyYS5tYXhaKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgicmFkaXVz
IiwgX3RoaXMucmFkaXVzKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJkZXB0aFNh
bXBsZXIiLCBfdGhpcy5fZGVwdGhUZXh0dXJlKTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fZmly
c3RVcGRhdGUpIHsKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0QXJyYXkoInNhbXBsZXJPZmZz
ZXRzIiwgX3RoaXMuX3NhbXBsZXJPZmZzZXRzKTsKKyAgICAgICAgICAgICAgICBfdGhpcy5fZmly
c3RVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgdGhp
cy5fYmx1ckhQb3N0UHJvY2Vzcy5zYW1wbGVzID0gdGhpcy50ZXh0dXJlU2FtcGxlczsKKyAgICAg
ICAgdGhpcy5fYmx1clZQb3N0UHJvY2Vzcy5zYW1wbGVzID0gdGhpcy50ZXh0dXJlU2FtcGxlczsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5w
cm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2ZpcnN0VXBk
YXRlID0gdHJ1ZTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fcmVidWlsZC5jYWxsKHRoaXMp
OworICAgIH07CisgICAgLy9WYW4gZGVyIENvcnB1dCByYWRpY2FsIGludmVyc2UKKyAgICBTU0FP
MlJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fcmFkaWNhbEludmVyc2VfVmRDID0gZnVuY3Rp
b24gKGkpIHsKKyAgICAgICAgdGhpcy5fYml0c1swXSA9IGk7CisgICAgICAgIHRoaXMuX2JpdHNb
MF0gPSAoKHRoaXMuX2JpdHNbMF0gPDwgMTYpIHwgKHRoaXMuX2JpdHNbMF0gPj4gMTYpKSA+Pj4g
MDsKKyAgICAgICAgdGhpcy5fYml0c1swXSA9ICgodGhpcy5fYml0c1swXSAmIDB4NTU1NTU1NTUp
IDw8IDEpIHwgKCh0aGlzLl9iaXRzWzBdICYgMHhBQUFBQUFBQSkgPj4+IDEpID4+PiAwOworICAg
ICAgICB0aGlzLl9iaXRzWzBdID0gKCh0aGlzLl9iaXRzWzBdICYgMHgzMzMzMzMzMykgPDwgMikg
fCAoKHRoaXMuX2JpdHNbMF0gJiAweENDQ0NDQ0NDKSA+Pj4gMikgPj4+IDA7CisgICAgICAgIHRo
aXMuX2JpdHNbMF0gPSAoKHRoaXMuX2JpdHNbMF0gJiAweDBGMEYwRjBGKSA8PCA0KSB8ICgodGhp
cy5fYml0c1swXSAmIDB4RjBGMEYwRjApID4+PiA0KSA+Pj4gMDsKKyAgICAgICAgdGhpcy5fYml0
c1swXSA9ICgodGhpcy5fYml0c1swXSAmIDB4MDBGRjAwRkYpIDw8IDgpIHwgKCh0aGlzLl9iaXRz
WzBdICYgMHhGRjAwRkYwMCkgPj4+IDgpID4+PiAwOworICAgICAgICByZXR1cm4gdGhpcy5fYml0
c1swXSAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIC8gMHgxMDAwMDAwMDAgb3IgLyA0Mjk0
OTY3Mjk2CisgICAgfTsKKyAgICBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5faGFt
bWVyc2xleSA9IGZ1bmN0aW9uIChpLCBuKSB7CisgICAgICAgIHJldHVybiBbaSAvIG4sIHRoaXMu
X3JhZGljYWxJbnZlcnNlX1ZkQyhpKV07CisgICAgfTsKKyAgICBTU0FPMlJlbmRlcmluZ1BpcGVs
aW5lLnByb3RvdHlwZS5faGVtaXNwaGVyZVNhbXBsZV91bmlmb3JtID0gZnVuY3Rpb24gKHUsIHYp
IHsKKyAgICAgICAgdmFyIHBoaSA9IHYgKiAyLjAgKiBNYXRoLlBJOworICAgICAgICAvLyByZWpl
Y3Rpbmcgc2FtcGxlcyB0aGF0IGFyZSBjbG9zZSB0byB0YW5nZW50IHBsYW5lIHRvIGF2b2lkIHot
ZmlnaHRpbmcgYXJ0aWZhY3RzCisgICAgICAgIHZhciBjb3NUaGV0YSA9IDEuMCAtICh1ICogMC44
NSArIDAuMTUpOworICAgICAgICB2YXIgc2luVGhldGEgPSBNYXRoLnNxcnQoMS4wIC0gY29zVGhl
dGEgKiBjb3NUaGV0YSk7CisgICAgICAgIHJldHVybiBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXShNYXRoLmNvcyhwaGkpICogc2lu
VGhldGEsIE1hdGguc2luKHBoaSkgKiBzaW5UaGV0YSwgY29zVGhldGEpOworICAgIH07CisgICAg
U1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2dlbmVyYXRlSGVtaXNwaGVyZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIG51bVNhbXBsZXMgPSB0aGlzLnNhbXBsZXM7CisgICAg
ICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICAgICAgdmFyIHZlY3RvcjsKKyAgICAgICAgdmFyIGkg
PSAwOworICAgICAgICB3aGlsZSAoaSA8IG51bVNhbXBsZXMpIHsKKyAgICAgICAgICAgIGlmIChu
dW1TYW1wbGVzIDwgMTYpIHsKKyAgICAgICAgICAgICAgICB2ZWN0b3IgPSB0aGlzLl9oZW1pc3Bo
ZXJlU2FtcGxlX3VuaWZvcm0oTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20oKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZCA9IHRo
aXMuX2hhbW1lcnNsZXkoaSwgbnVtU2FtcGxlcyk7CisgICAgICAgICAgICAgICAgdmVjdG9yID0g
dGhpcy5faGVtaXNwaGVyZVNhbXBsZV91bmlmb3JtKHJhbmRbMF0sIHJhbmRbMV0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmVzdWx0LnB1c2godmVjdG9yLngsIHZlY3Rvci55LCB2ZWN0
b3Iueik7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9OworICAgIFNTQU8yUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLl9jcmVhdGVT
U0FPUG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAocmF0aW8pIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgdmFyIG51bVNhbXBsZXMgPSB0aGlzLnNhbXBsZXM7CisgICAgICAgIHRo
aXMuX3NhbXBsZVNwaGVyZSA9IHRoaXMuX2dlbmVyYXRlSGVtaXNwaGVyZSgpOworICAgICAgICB0
aGlzLl9zc2FvUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUG9zdFByb2Nlc3MiXSgic3NhbzIiLCAic3NhbzIi
LCBbCisgICAgICAgICAgICAic2FtcGxlU3BoZXJlIiwgInNhbXBsZXNGYWN0b3IiLCAicmFuZFRl
eHR1cmVUaWxlcyIsICJ0b3RhbFN0cmVuZ3RoIiwgInJhZGl1cyIsCisgICAgICAgICAgICAiYmFz
ZSIsICJyYW5nZSIsICJwcm9qZWN0aW9uIiwgIm5lYXIiLCAiZmFyIiwgInRleGVsU2l6ZSIsCisg
ICAgICAgICAgICAieFZpZXdwb3J0IiwgInlWaWV3cG9ydCIsICJtYXhaIiwgIm1pblpBc3BlY3Qi
CisgICAgICAgIF0sIFsicmFuZG9tU2FtcGxlciIsICJub3JtYWxTYW1wbGVyIl0sIHJhdGlvLCBu
dWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgdGhpcy5fc2NlbmUuZ2V0RW5n
aW5lKCksIGZhbHNlLCAiI2RlZmluZSBTQU1QTEVTICIgKyBudW1TYW1wbGVzICsgIlxuI2RlZmlu
ZSBTU0FPIik7CisgICAgICAgIHRoaXMuX3NzYW9Qb3N0UHJvY2Vzcy5vbkFwcGx5ID0gZnVuY3Rp
b24gKGVmZmVjdCkgeworICAgICAgICAgICAgaWYgKF90aGlzLl9maXJzdFVwZGF0ZSkgeworICAg
ICAgICAgICAgICAgIGVmZmVjdC5zZXRBcnJheTMoInNhbXBsZVNwaGVyZSIsIF90aGlzLl9zYW1w
bGVTcGhlcmUpOworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgicmFuZFRleHR1cmVU
aWxlcyIsIDMyLjApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFfdGhpcy5fc2Nl
bmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJzYW1wbGVzRmFjdG9yIiwgMSAvIF90aGlz
LnNhbXBsZXMpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJ0b3RhbFN0cmVuZ3RoIiwg
X3RoaXMudG90YWxTdHJlbmd0aCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCJ0ZXhl
bFNpemUiLCAxIC8gX3RoaXMuX3NzYW9Qb3N0UHJvY2Vzcy53aWR0aCwgMSAvIF90aGlzLl9zc2Fv
UG9zdFByb2Nlc3MuaGVpZ2h0KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgicmFkaXVz
IiwgX3RoaXMucmFkaXVzKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgibWF4WiIsIF90
aGlzLm1heFopOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJtaW5aQXNwZWN0IiwgX3Ro
aXMubWluWkFzcGVjdCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImJhc2UiLCBfdGhp
cy5iYXNlKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgibmVhciIsIF90aGlzLl9zY2Vu
ZS5hY3RpdmVDYW1lcmEubWluWik7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImZhciIs
IF90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEubWF4Wik7CisgICAgICAgICAgICBlZmZlY3Quc2V0
RmxvYXQoInhWaWV3cG9ydCIsIE1hdGgudGFuKF90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEuZm92
IC8gMikgKiBfdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZ2V0QXNwZWN0UmF0aW8oX3RoaXMuX3Nj
ZW5lLmFjdGl2ZUNhbWVyYSwgdHJ1ZSkpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJ5
Vmlld3BvcnQiLCBNYXRoLnRhbihfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLmZvdiAvIDIpKTsK
KyAgICAgICAgICAgIGVmZmVjdC5zZXRNYXRyaXgoInByb2plY3Rpb24iLCBfdGhpcy5fc2NlbmUu
Z2V0UHJvamVjdGlvbk1hdHJpeCgpKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJ0
ZXh0dXJlU2FtcGxlciIsIF90aGlzLl9kZXB0aFRleHR1cmUpOworICAgICAgICAgICAgZWZmZWN0
LnNldFRleHR1cmUoIm5vcm1hbFNhbXBsZXIiLCBfdGhpcy5fbm9ybWFsVGV4dHVyZSk7CisgICAg
ICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgicmFuZG9tU2FtcGxlciIsIF90aGlzLl9yYW5kb21U
ZXh0dXJlKTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fc3Nhb1Bvc3RQcm9jZXNzLnNhbXBs
ZXMgPSB0aGlzLnRleHR1cmVTYW1wbGVzOworICAgIH07CisgICAgU1NBTzJSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUuX2NyZWF0ZVNTQU9Db21iaW5lUG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAo
cmF0aW8pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5fc3Nhb0Nv
bWJpbmVQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQb3N0UHJvY2VzcyJdKCJzc2FvQ29tYmluZSIsICJzc2Fv
Q29tYmluZSIsIFtdLCBbIm9yaWdpbmFsQ29sb3IiLCAidmlld3BvcnQiXSwgcmF0aW8sIG51bGws
IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0aGlzLl9zY2VuZS5nZXRFbmdpbmUo
KSwgZmFsc2UpOworICAgICAgICB0aGlzLl9zc2FvQ29tYmluZVBvc3RQcm9jZXNzLm9uQXBwbHkg
PSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICB2YXIgdmlld3BvcnQgPSBfdGhpcy5f
c2NlbmUuYWN0aXZlQ2FtZXJhLnZpZXdwb3J0OworICAgICAgICAgICAgZWZmZWN0LnNldFZlY3Rv
cjQoInZpZXdwb3J0IiwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3I0WzBdLmNvcHlGcm9tRmxvYXRzKHZpZXdwb3J0Lngs
IHZpZXdwb3J0LnksIHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQpKTsKKyAgICAgICAg
ICAgIGVmZmVjdC5zZXRUZXh0dXJlRnJvbVBvc3RQcm9jZXNzKCJvcmlnaW5hbENvbG9yIiwgX3Ro
aXMuX29yaWdpbmFsQ29sb3JQb3N0UHJvY2Vzcyk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMu
X3NzYW9Db21iaW5lUG9zdFByb2Nlc3Muc2FtcGxlcyA9IHRoaXMudGV4dHVyZVNhbXBsZXM7Cisg
ICAgfTsKKyAgICBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fY3JlYXRlUmFuZG9t
VGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNpemUgPSAxMjg7CisgICAgICAg
IHRoaXMuX3JhbmRvbVRleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19keW5hbWljVGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJEeW5hbWljVGV4dHVyZSJdKCJTU0FP
UmFuZG9tVGV4dHVyZSIsIHNpemUsIHRoaXMuX3NjZW5lLCBmYWxzZSwgX01hdGVyaWFsc19UZXh0
dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXS5UUklM
SU5FQVJfU0FNUExJTkdNT0RFKTsKKyAgICAgICAgdGhpcy5fcmFuZG9tVGV4dHVyZS53cmFwVSA9
IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJUZXh0dXJlIl0uV1JBUF9BRERSRVNTTU9ERTsKKyAgICAgICAgdGhpcy5fcmFuZG9tVGV4dHVy
ZS53cmFwViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJUZXh0dXJlIl0uV1JBUF9BRERSRVNTTU9ERTsKKyAgICAgICAgdmFyIGNvbnRl
eHQgPSB0aGlzLl9yYW5kb21UZXh0dXJlLmdldENvbnRleHQoKTsKKyAgICAgICAgdmFyIHJhbmQg
PSBmdW5jdGlvbiAobWluLCBtYXgpIHsKKyAgICAgICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgp
ICogKG1heCAtIG1pbikgKyBtaW47CisgICAgICAgIH07CisgICAgICAgIHZhciByYW5kVmVjdG9y
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXS5aZXJvKCk7CisgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgc2l6ZTsgeCsrKSB7Cisg
ICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHNpemU7IHkrKykgeworICAgICAgICAgICAg
ICAgIHJhbmRWZWN0b3IueCA9IHJhbmQoMC4wLCAxLjApOworICAgICAgICAgICAgICAgIHJhbmRW
ZWN0b3IueSA9IHJhbmQoMC4wLCAxLjApOworICAgICAgICAgICAgICAgIHJhbmRWZWN0b3IueiA9
IDAuMDsKKyAgICAgICAgICAgICAgICByYW5kVmVjdG9yLm5vcm1hbGl6ZSgpOworICAgICAgICAg
ICAgICAgIHJhbmRWZWN0b3Iuc2NhbGVJblBsYWNlKDI1NSk7CisgICAgICAgICAgICAgICAgcmFu
ZFZlY3Rvci54ID0gTWF0aC5mbG9vcihyYW5kVmVjdG9yLngpOworICAgICAgICAgICAgICAgIHJh
bmRWZWN0b3IueSA9IE1hdGguZmxvb3IocmFuZFZlY3Rvci55KTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LmZpbGxTdHlsZSA9ICdyZ2IoJyArIHJhbmRWZWN0b3IueCArICcsICcgKyByYW5kVmVj
dG9yLnkgKyAnLCAnICsgcmFuZFZlY3Rvci56ICsgJyknOworICAgICAgICAgICAgICAgIGNvbnRl
eHQuZmlsbFJlY3QoeCwgeSwgMSwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fcmFuZG9tVGV4dHVyZS51cGRhdGUoZmFsc2UpOworICAgIH07CisgICAgLyoqCisg
ICAgICogU2VyaWFsaXplIHRoZSByZW5kZXJpbmcgcGlwZWxpbmUgKFVzZWQgd2hlbiBleHBvcnRp
bmcpCisgICAgICogQHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgb2JqZWN0CisgICAgICovCisgICAg
U1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlNlcmlhbGl6
ZSh0aGlzKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21UeXBlID0gIlNTQU8y
UmVuZGVyaW5nUGlwZWxpbmUiOworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlIHRoZSBzZXJpYWxpemVkIHBpcGVsaW5lCisg
ICAgICogQHBhcmFtIHNvdXJjZSBTb3VyY2UgcGlwZWxpbmUuCisgICAgICogQHBhcmFtIHNjZW5l
IFRoZSBzY2VuZSB0byBsb2FkIHRoZSBwaXBlbGluZSB0by4KKyAgICAgKiBAcGFyYW0gcm9vdFVy
bCBUaGUgVVJMIG9mIHRoZSBzZXJpYWxpemVkIHBpcGVsaW5lLgorICAgICAqIEByZXR1cm5zIEFu
IGluc3RhbnRpYXRlZCBwaXBlbGluZSBmcm9tIHRoZSBzZXJpYWxpemVkIG9iamVjdC4KKyAgICAg
Ki8KKyAgICBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLlBhcnNlID0gZnVuY3Rpb24gKHNvdXJjZSwg
c2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlBhcnNlKGZ1bmN0
aW9uICgpIHsgcmV0dXJuIG5ldyBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lKHNvdXJjZS5fbmFtZSwg
c2NlbmUsIHNvdXJjZS5fcmF0aW8pOyB9LCBzb3VyY2UsIHNjZW5lLCByb290VXJsKTsKKyAgICB9
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90
b3R5cGUsICJ0b3RhbFN0cmVuZ3RoIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIFNTQU8yUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAibWF4WiIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlw
ZSwgIm1pblpBc3BlY3QiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInNlcmlhbGl6ZSJdKSgic2FtcGxlcyIpCisg
ICAgXSwgU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJfc2FtcGxlcyIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1sic2VyaWFsaXplIl0pKCJ0ZXh0dXJlU2FtcGxlcyIpCisgICAgXSwgU1NBTzJSZW5k
ZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJfdGV4dHVyZVNhbXBsZXMiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUs
ICJfcmF0aW8iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInNlcmlhbGl6ZSJdKSgiZXhwZW5zaXZlQmx1ciIpCisg
ICAgXSwgU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJfZXhwZW5zaXZlQmx1ciIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTU0FPMlJlbmRlcmluZ1BpcGVs
aW5lLnByb3RvdHlwZSwgInJhZGl1cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAg
ICBdLCBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImJhc2UiLCB2b2lkIDApOwor
ICAgIHJldHVybiBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lOworfShfUG9zdFByb2Nlc3Nlc19SZW5k
ZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUiXSkpOworCitfTWlzY190eXBlU3Rv
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVk
VHlwZXNbIkJBQllMT04uU1NBTzJSZW5kZXJpbmdQaXBlbGluZSJdID0gU1NBTzJSZW5kZXJpbmdQ
aXBlbGluZTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQ
aXBlbGluZS9QaXBlbGluZXMvc3Nhb1JlbmRlcmluZ1BpcGVsaW5lLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvUGlwZWxp
bmVzL3NzYW9SZW5kZXJpbmdQaXBlbGluZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNTQU9SZW5kZXJpbmdQaXBlbGluZSAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTU0FPUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFNTQU9SZW5kZXJpbmdQaXBlbGluZTsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lmpz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9N
YXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2R5bmFtaWNU
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvZHluYW1pY1RleHR1cmUgKi8gIi4vTWF0
ZXJpYWxzL1RleHR1cmVzL2R5bmFtaWNUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQcm9jZXNzZXMvcG9z
dFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNz
UmVuZGVyUGlwZWxpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFBy
b2Nlc3NSZW5kZXJQaXBlbGluZSAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bv
c3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
UG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
Li4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCAq
LyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfcGFzc1Bvc3RQ
cm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9Qb3N0UHJvY2Vzc2VzL3Bhc3NQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL3Bhc3NQb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Q
b3N0UHJvY2Vzc2VzX2JsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9ibHVyUG9z
dFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9ibHVyUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL0VuZ2luZXMvY29u
c3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNj
L2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nl
c19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29t
cG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50ICovICIuL1Bvc3RQcm9jZXNzZXMvUmVu
ZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVu
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX3NzYW9fZnJhZ21lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi8uLi9TaGFkZXJzL3NzYW8uZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9zc2FvLmZyYWdtZW50
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfc3Nhb0NvbWJpbmVfZnJh
Z21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9TaGFkZXJzL3NzYW9Db21iaW5lLmZyYWdtZW50ICovICIuL1NoYWRlcnMv
c3Nhb0NvbWJpbmUuZnJhZ21lbnQudHMiKTsKKworCisKKworCisKKworCisKKworCisKKworCisv
KioKKyAqIFJlbmRlciBwaXBlbGluZSB0byBwcm9kdWNlIHNzYW8gZWZmZWN0CisgKi8KK3ZhciBT
U0FPUmVuZGVyaW5nUGlwZWxpbmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU1NB
T1JlbmRlcmluZ1BpcGVsaW5lLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEBjb25zdHJ1Y3Rv
cgorICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIHJlbmRlcmluZyBwaXBlbGluZSBuYW1lCisgICAg
ICogQHBhcmFtIHNjZW5lIC0gVGhlIHNjZW5lIGxpbmtlZCB0byB0aGlzIHBpcGVsaW5lCisgICAg
ICogQHBhcmFtIHJhdGlvIC0gVGhlIHNpemUgb2YgdGhlIHBvc3Rwcm9jZXNzZXMuIENhbiBiZSBh
IG51bWJlciBzaGFyZWQgYmV0d2VlbiBwYXNzZXMgb3IgYW4gb2JqZWN0IGZvciBtb3JlIHByZWNp
c2lvbjogeyBzc2FvUmF0aW86IDAuNSwgY29tYmluZVJhdGlvOiAxLjAgfQorICAgICAqIEBwYXJh
bSBjYW1lcmFzIC0gVGhlIGFycmF5IG9mIGNhbWVyYXMgdGhhdCB0aGUgcmVuZGVyaW5nIHBpcGVs
aW5lIHdpbGwgYmUgYXR0YWNoZWQgdG8KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTU0FPUmVuZGVy
aW5nUGlwZWxpbmUobmFtZSwgc2NlbmUsIHJhdGlvLCBjYW1lcmFzKSB7CisgICAgICAgIHZhciBf
dGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjZW5lLmdldEVuZ2luZSgpLCBuYW1lKSB8fCB0aGlz
OworICAgICAgICAvLyBNZW1iZXJzCisgICAgICAgIC8qKgorICAgICAgICAgKiBAaWdub3JlCisg
ICAgICAgICogVGhlIFBhc3NQb3N0UHJvY2VzcyBpZCBpbiB0aGUgcGlwZWxpbmUgdGhhdCBjb250
YWlucyB0aGUgb3JpZ2luYWwgc2NlbmUgY29sb3IKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
U1NBT09yaWdpbmFsU2NlbmVDb2xvckVmZmVjdCA9ICJTU0FPT3JpZ2luYWxTY2VuZUNvbG9yRWZm
ZWN0IjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgKiBUaGUgU1NB
TyBQb3N0UHJvY2VzcyBpZCBpbiB0aGUgcGlwZWxpbmUKKyAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMuU1NBT1JlbmRlckVmZmVjdCA9ICJTU0FPUmVuZGVyRWZmZWN0IjsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBibHVyIFBvc3RQcm9j
ZXNzIGlkIGluIHRoZSBwaXBlbGluZQorICAgICAgICAqLworICAgICAgICBfdGhpcy5TU0FPQmx1
ckhSZW5kZXJFZmZlY3QgPSAiU1NBT0JsdXJIUmVuZGVyRWZmZWN0IjsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgKiBUaGUgdmVydGljYWwgYmx1ciBQb3N0UHJvY2Vz
cyBpZCBpbiB0aGUgcGlwZWxpbmUKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuU1NBT0JsdXJW
UmVuZGVyRWZmZWN0ID0gIlNTQU9CbHVyVlJlbmRlckVmZmVjdCI7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBAaWdub3JlCisgICAgICAgICogVGhlIFBvc3RQcm9jZXNzIGlkIGluIHRoZSBwaXBl
bGluZSB0aGF0IGNvbWJpbmVzIHRoZSBTU0FPLUJsdXIgb3V0cHV0IHdpdGggdGhlIG9yaWdpbmFs
IHNjZW5lIGNvbG9yIChTU0FPT3JpZ2luYWxTY2VuZUNvbG9yRWZmZWN0KQorICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5TU0FPQ29tYmluZVJlbmRlckVmZmVjdCA9ICJTU0FPQ29tYmluZVJlbmRl
ckVmZmVjdCI7CisgICAgICAgIC8qKgorICAgICAgICAqIFRoZSBvdXRwdXQgc3RyZW5ndGggb2Yg
dGhlIFNTQU8gcG9zdC1wcm9jZXNzLiBEZWZhdWx0IHZhbHVlIGlzIDEuMC4KKyAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMudG90YWxTdHJlbmd0aCA9IDEuMDsKKyAgICAgICAgLyoqCisgICAgICAg
ICogVGhlIHJhZGl1cyBhcm91bmQgdGhlIGFuYWx5emVkIHBpeGVsIHVzZWQgYnkgdGhlIFNTQU8g
cG9zdC1wcm9jZXNzLiBEZWZhdWx0IHZhbHVlIGlzIDAuMDAwNgorICAgICAgICAqLworICAgICAg
ICBfdGhpcy5yYWRpdXMgPSAwLjAwMDE7CisgICAgICAgIC8qKgorICAgICAgICAqIFJlbGF0ZWQg
dG8gZmFsbE9mZiwgdXNlZCB0byBpbnRlcnBvbGF0ZSBTU0FPIHNhbXBsZXMgKGZpcnN0IGludGVy
cG9sYXRlIGZ1bmN0aW9uIGlucHV0KSBiYXNlZCBvbiB0aGUgb2NjbHVzaW9uIGRpZmZlcmVuY2Ug
b2YgZWFjaCBwaXhlbAorICAgICAgICAqIE11c3Qgbm90IGJlIGVxdWFsIHRvIGZhbGxPZmYgYW5k
IHN1cGVyaW9yIHRvIGZhbGxPZmYuCisgICAgICAgICogRGVmYXVsdCB2YWx1ZSBpcyAwLjAwNzUK
KyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXJlYSA9IDAuMDA3NTsKKyAgICAgICAgLyoqCisg
ICAgICAgICogUmVsYXRlZCB0byBhcmVhLCB1c2VkIHRvIGludGVycG9sYXRlIFNTQU8gc2FtcGxl
cyAoc2Vjb25kIGludGVycG9sYXRlIGZ1bmN0aW9uIGlucHV0KSBiYXNlZCBvbiB0aGUgb2NjbHVz
aW9uIGRpZmZlcmVuY2Ugb2YgZWFjaCBwaXhlbAorICAgICAgICAqIE11c3Qgbm90IGJlIGVxdWFs
IHRvIGFyZWEgYW5kIGluZmVyaW9yIHRvIGFyZWEuCisgICAgICAgICogRGVmYXVsdCB2YWx1ZSBp
cyAwLjAwMDAwMQorICAgICAgICAqLworICAgICAgICBfdGhpcy5mYWxsT2ZmID0gMC4wMDAwMDE7
CisgICAgICAgIC8qKgorICAgICAgICAqIFRoZSBiYXNlIGNvbG9yIG9mIHRoZSBTU0FPIHBvc3Qt
cHJvY2VzcworICAgICAgICAqIFRoZSBmaW5hbCByZXN1bHQgaXMgImJhc2UgKyBzc2FvIiBiZXR3
ZWVuIFswLCAxXQorICAgICAgICAqLworICAgICAgICBfdGhpcy5iYXNlID0gMC41OworICAgICAg
ICBfdGhpcy5fZmlyc3RVcGRhdGUgPSB0cnVlOworICAgICAgICBfdGhpcy5fc2NlbmUgPSBzY2Vu
ZTsKKyAgICAgICAgLy8gU2V0IHVwIGFzc2V0cworICAgICAgICBfdGhpcy5fY3JlYXRlUmFuZG9t
VGV4dHVyZSgpOworICAgICAgICBfdGhpcy5fZGVwdGhUZXh0dXJlID0gc2NlbmUuZW5hYmxlRGVw
dGhSZW5kZXJlcigpLmdldERlcHRoTWFwKCk7IC8vIEZvcmNlIGRlcHRoIHJlbmRlcmVyICJvbiIK
KyAgICAgICAgdmFyIHNzYW9SYXRpbyA9IHJhdGlvLnNzYW9SYXRpbyB8fCByYXRpbzsKKyAgICAg
ICAgdmFyIGNvbWJpbmVSYXRpbyA9IHJhdGlvLmNvbWJpbmVSYXRpbyB8fCByYXRpbzsKKyAgICAg
ICAgX3RoaXMuX29yaWdpbmFsQ29sb3JQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19w
YXNzUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUGFzc1Bvc3RQcm9j
ZXNzIl0oIlNTQU9PcmlnaW5hbFNjZW5lQ29sb3IiLCBjb21iaW5lUmF0aW8sIG51bGwsIF9NYXRl
cmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0
dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UpOwor
ICAgICAgICBfdGhpcy5fY3JlYXRlU1NBT1Bvc3RQcm9jZXNzKHNzYW9SYXRpbyk7CisgICAgICAg
IF90aGlzLl9jcmVhdGVCbHVyUG9zdFByb2Nlc3Moc3Nhb1JhdGlvKTsKKyAgICAgICAgX3RoaXMu
X2NyZWF0ZVNTQU9Db21iaW5lUG9zdFByb2Nlc3MoY29tYmluZVJhdGlvKTsKKyAgICAgICAgLy8g
U2V0IHVwIHBpcGVsaW5lCisgICAgICAgIF90aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNz
ZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUo
KSwgX3RoaXMuU1NBT09yaWdpbmFsU2NlbmVDb2xvckVmZmVjdCwgZnVuY3Rpb24gKCkgeyByZXR1
cm4gX3RoaXMuX29yaWdpbmFsQ29sb3JQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICBf
dGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9j
ZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQcm9jZXNz
UmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5lKCksIF90aGlzLlNTQU9SZW5kZXJFZmZlY3Qs
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9zc2FvUG9zdFByb2Nlc3M7IH0sIHRydWUpKTsK
KyAgICAgICAgX3RoaXMuYWRkRWZmZWN0KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGlu
ZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQ
b3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJdKHNjZW5lLmdldEVuZ2luZSgpLCBfdGhpcy5TU0FPQmx1
ckhSZW5kZXJFZmZlY3QsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9ibHVySFBvc3RQcm9j
ZXNzOyB9LCB0cnVlKSk7CisgICAgICAgIF90aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNz
ZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUo
KSwgX3RoaXMuU1NBT0JsdXJWUmVuZGVyRWZmZWN0LCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhp
cy5fYmx1clZQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICBfdGhpcy5hZGRFZmZlY3Qo
bmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0o
c2NlbmUuZ2V0RW5naW5lKCksIF90aGlzLlNTQU9Db21iaW5lUmVuZGVyRWZmZWN0LCBmdW5jdGlv
biAoKSB7IHJldHVybiBfdGhpcy5fc3Nhb0NvbWJpbmVQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOwor
ICAgICAgICAvLyBGaW5pc2gKKyAgICAgICAgc2NlbmUucG9zdFByb2Nlc3NSZW5kZXJQaXBlbGlu
ZU1hbmFnZXIuYWRkUGlwZWxpbmUoX3RoaXMpOworICAgICAgICBpZiAoY2FtZXJhcykgeworICAg
ICAgICAgICAgc2NlbmUucG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIuYXR0YWNoQ2Ft
ZXJhc1RvUmVuZGVyUGlwZWxpbmUobmFtZSwgY2FtZXJhcyk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU1NBT1JlbmRl
cmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgInNjZW5lIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyBhY3RpdmUgc2NlbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvLyBQdWJsaWMgTWV0aG9kcworICAgIC8qKgorICAgICAqIEdldCB0aGUgY2xhc3MgbmFt
ZQorICAgICAqIEByZXR1cm5zICJTU0FPUmVuZGVyaW5nUGlwZWxpbmUiCisgICAgICovCisgICAg
U1NBT1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiAiU1NBT1JlbmRlcmluZ1BpcGVsaW5lIjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFJlbW92ZXMgdGhlIGludGVybmFsIHBpcGVsaW5lIGFzc2V0cyBhbmQgZGV0
YXRjaGVzIHRoZSBwaXBlbGluZSBmcm9tIHRoZSBzY2VuZSBjYW1lcmFzCisgICAgICovCisgICAg
U1NBT1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGRpc2Fi
bGVEZXB0aFJlbmRlcikgeworICAgICAgICBpZiAoZGlzYWJsZURlcHRoUmVuZGVyID09PSB2b2lk
IDApIHsgZGlzYWJsZURlcHRoUmVuZGVyID0gZmFsc2U7IH0KKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLl9zY2VuZS5jYW1lcmFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2
YXIgY2FtZXJhID0gdGhpcy5fc2NlbmUuY2FtZXJhc1tpXTsKKyAgICAgICAgICAgIHRoaXMuX29y
aWdpbmFsQ29sb3JQb3N0UHJvY2Vzcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB0aGlz
Ll9zc2FvUG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgdGhpcy5fYmx1
ckhQb3N0UHJvY2Vzcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB0aGlzLl9ibHVyVlBv
c3RQcm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAgICAgIHRoaXMuX3NzYW9Db21iaW5l
UG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Jh
bmRvbVRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICBpZiAoZGlzYWJsZURlcHRoUmVuZGVyKSB7
CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5kaXNhYmxlRGVwdGhSZW5kZXJlcigpOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX3NjZW5lLnBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2Vy
LmRldGFjaENhbWVyYXNGcm9tUmVuZGVyUGlwZWxpbmUodGhpcy5fbmFtZSwgdGhpcy5fc2NlbmUu
Y2FtZXJhcyk7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOwor
ICAgIH07CisgICAgLy8gUHJpdmF0ZSBNZXRob2RzCisgICAgU1NBT1JlbmRlcmluZ1BpcGVsaW5l
LnByb3RvdHlwZS5fY3JlYXRlQmx1clBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHJhdGlvKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBzaXplID0gMTY7CisgICAgICAg
IHRoaXMuX2JsdXJIUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkJsdXJQb3N0UHJvY2VzcyJdKCJCbHVy
SCIsIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVjdG9yMiJdKDEsIDApLCBzaXplLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5CSUxJTkVBUl9T
QU1QTElOR01PREUsIHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNvbnN0YW50cyJdLlRFWFRVUkVU
WVBFX1VOU0lHTkVEX0lOVCk7CisgICAgICAgIHRoaXMuX2JsdXJWUG9zdFByb2Nlc3MgPSBuZXcg
X1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIkJsdXJQb3N0UHJvY2VzcyJdKCJCbHVyViIsIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKDAsIDEpLCBzaXplLCByYXRpbywg
bnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHRoaXMuX3NjZW5lLmdldEVu
Z2luZSgpLCBmYWxzZSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCk7CisgICAgICAgIHRo
aXMuX2JsdXJIUG9zdFByb2Nlc3Mub25BY3RpdmF0ZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHZhciBkdyA9IF90aGlzLl9ibHVySFBvc3RQcm9jZXNzLndpZHRoIC8g
X3RoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldFJlbmRlcldpZHRoKCk7CisgICAgICAgICAgICBf
dGhpcy5fYmx1ckhQb3N0UHJvY2Vzcy5rZXJuZWwgPSBzaXplICogZHc7CisgICAgICAgIH0pOwor
ICAgICAgICB0aGlzLl9ibHVyVlBvc3RQcm9jZXNzLm9uQWN0aXZhdGVPYnNlcnZhYmxlLmFkZChm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgZHcgPSBfdGhpcy5fYmx1clZQb3N0UHJvY2Vz
cy5oZWlnaHQgLyBfdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZ2V0UmVuZGVySGVpZ2h0KCk7Cisg
ICAgICAgICAgICBfdGhpcy5fYmx1clZQb3N0UHJvY2Vzcy5rZXJuZWwgPSBzaXplICogZHc7Cisg
ICAgICAgIH0pOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTU0FPUmVuZGVyaW5n
UGlwZWxpbmUucHJvdG90eXBlLl9yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlz
Ll9maXJzdFVwZGF0ZSA9IHRydWU7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX3JlYnVpbGQu
Y2FsbCh0aGlzKTsKKyAgICB9OworICAgIFNTQU9SZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUu
X2NyZWF0ZVNTQU9Qb3N0UHJvY2VzcyA9IGZ1bmN0aW9uIChyYXRpbykgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgbnVtU2FtcGxlcyA9IDE2OworICAgICAgICB2YXIg
c2FtcGxlU3BoZXJlID0gWworICAgICAgICAgICAgMC41MzgxLCAwLjE4NTYsIC0wLjQzMTksCisg
ICAgICAgICAgICAwLjEzNzksIDAuMjQ4NiwgMC40NDMwLAorICAgICAgICAgICAgMC4zMzcxLCAw
LjU2NzksIC0wLjAwNTcsCisgICAgICAgICAgICAtMC42OTk5LCAtMC4wNDUxLCAtMC4wMDE5LAor
ICAgICAgICAgICAgMC4wNjg5LCAtMC4xNTk4LCAtMC44NTQ3LAorICAgICAgICAgICAgMC4wNTYw
LCAwLjAwNjksIC0wLjE4NDMsCisgICAgICAgICAgICAtMC4wMTQ2LCAwLjE0MDIsIDAuMDc2MiwK
KyAgICAgICAgICAgIDAuMDEwMCwgLTAuMTkyNCwgLTAuMDM0NCwKKyAgICAgICAgICAgIC0wLjM1
NzcsIC0wLjUzMDEsIC0wLjQzNTgsCisgICAgICAgICAgICAtMC4zMTY5LCAwLjEwNjMsIDAuMDE1
OCwKKyAgICAgICAgICAgIDAuMDEwMywgLTAuNTg2OSwgMC4wMDQ2LAorICAgICAgICAgICAgLTAu
MDg5NywgLTAuNDk0MCwgMC4zMjg3LAorICAgICAgICAgICAgMC43MTE5LCAtMC4wMTU0LCAtMC4w
OTE4LAorICAgICAgICAgICAgLTAuMDUzMywgMC4wNTk2LCAtMC41NDExLAorICAgICAgICAgICAg
MC4wMzUyLCAtMC4wNjMxLCAwLjU0NjAsCisgICAgICAgICAgICAtMC40Nzc2LCAwLjI4NDcsIC0w
LjAyNzEKKyAgICAgICAgXTsKKyAgICAgICAgdmFyIHNhbXBsZXNGYWN0b3IgPSAxLjAgLyBudW1T
YW1wbGVzOworICAgICAgICB0aGlzLl9zc2FvUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNz
ZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUG9zdFByb2Nlc3Mi
XSgic3NhbyIsICJzc2FvIiwgWworICAgICAgICAgICAgInNhbXBsZVNwaGVyZSIsICJzYW1wbGVz
RmFjdG9yIiwgInJhbmRUZXh0dXJlVGlsZXMiLCAidG90YWxTdHJlbmd0aCIsICJyYWRpdXMiLAor
ICAgICAgICAgICAgImFyZWEiLCAiZmFsbE9mZiIsICJiYXNlIiwgInJhbmdlIiwgInZpZXdwb3J0
IgorICAgICAgICBdLCBbInJhbmRvbVNhbXBsZXIiXSwgcmF0aW8sIG51bGwsIF9NYXRlcmlhbHNf
VGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0dXJlIl0u
QklMSU5FQVJfU0FNUExJTkdNT0RFLCB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsICIj
ZGVmaW5lIFNBTVBMRVMgIiArIG51bVNhbXBsZXMgKyAiXG4jZGVmaW5lIFNTQU8iKTsKKyAgICAg
ICAgdGhpcy5fc3Nhb1Bvc3RQcm9jZXNzLm9uQXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7Cisg
ICAgICAgICAgICBpZiAoX3RoaXMuX2ZpcnN0VXBkYXRlKSB7CisgICAgICAgICAgICAgICAgZWZm
ZWN0LnNldEFycmF5Mygic2FtcGxlU3BoZXJlIiwgc2FtcGxlU3BoZXJlKTsKKyAgICAgICAgICAg
ICAgICBlZmZlY3Quc2V0RmxvYXQoInNhbXBsZXNGYWN0b3IiLCBzYW1wbGVzRmFjdG9yKTsKKyAg
ICAgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoInJhbmRUZXh0dXJlVGlsZXMiLCA0LjApOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJ0b3RhbFN0cmVuZ3Ro
IiwgX3RoaXMudG90YWxTdHJlbmd0aCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoInJh
ZGl1cyIsIF90aGlzLnJhZGl1cyk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImFyZWEi
LCBfdGhpcy5hcmVhKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiZmFsbE9mZiIsIF90
aGlzLmZhbGxPZmYpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJiYXNlIiwgX3RoaXMu
YmFzZSk7CisgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgidGV4dHVyZVNhbXBsZXIiLCBf
dGhpcy5fZGVwdGhUZXh0dXJlKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJyYW5k
b21TYW1wbGVyIiwgX3RoaXMuX3JhbmRvbVRleHR1cmUpOworICAgICAgICB9OworICAgIH07Cisg
ICAgU1NBT1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fY3JlYXRlU1NBT0NvbWJpbmVQb3N0
UHJvY2VzcyA9IGZ1bmN0aW9uIChyYXRpbykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICB0aGlzLl9zc2FvQ29tYmluZVBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2Vz
X3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvc3RQcm9jZXNzIl0o
InNzYW9Db21iaW5lIiwgInNzYW9Db21iaW5lIiwgW10sIFsib3JpZ2luYWxDb2xvciIsICJ2aWV3
cG9ydCJdLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHRo
aXMuX3NjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSk7CisgICAgICAgIHRoaXMuX3NzYW9Db21iaW5l
UG9zdFByb2Nlc3Mub25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGVm
ZmVjdC5zZXRWZWN0b3I0KCJ2aWV3cG9ydCIsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yNFswXS5jb3B5RnJvbUZsb2F0
cygwLCAwLCAxLjAsIDEuMCkpOworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9z
dFByb2Nlc3MoIm9yaWdpbmFsQ29sb3IiLCBfdGhpcy5fb3JpZ2luYWxDb2xvclBvc3RQcm9jZXNz
KTsKKyAgICAgICAgfTsKKyAgICB9OworICAgIFNTQU9SZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5
cGUuX2NyZWF0ZVJhbmRvbVRleHR1cmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzaXpl
ID0gNTEyOworICAgICAgICB0aGlzLl9yYW5kb21UZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4
dHVyZXNfZHluYW1pY1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRHluYW1p
Y1RleHR1cmUiXSgiU1NBT1JhbmRvbVRleHR1cmUiLCBzaXplLCB0aGlzLl9zY2VuZSwgZmFsc2Us
IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJUZXh0dXJlIl0uVFJJTElORUFSX1NBTVBMSU5HTU9ERSk7CisgICAgICAgIHRoaXMuX3JhbmRv
bVRleHR1cmUud3JhcFUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVGV4dHVyZSJdLldSQVBfQUREUkVTU01PREU7CisgICAgICAgIHRo
aXMuX3JhbmRvbVRleHR1cmUud3JhcFYgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVGV4dHVyZSJdLldSQVBfQUREUkVTU01PREU7Cisg
ICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5fcmFuZG9tVGV4dHVyZS5nZXRDb250ZXh0KCk7Cisg
ICAgICAgIHZhciByYW5kID0gZnVuY3Rpb24gKG1pbiwgbWF4KSB7CisgICAgICAgICAgICByZXR1
cm4gTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluOworICAgICAgICB9OworICAgICAg
ICB2YXIgcmFuZFZlY3RvciA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8
IHNpemU7IHgrKykgeworICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBzaXplOyB5Kysp
IHsKKyAgICAgICAgICAgICAgICByYW5kVmVjdG9yLnggPSBNYXRoLmZsb29yKHJhbmQoLTEuMCwg
MS4wKSAqIDI1NSk7CisgICAgICAgICAgICAgICAgcmFuZFZlY3Rvci55ID0gTWF0aC5mbG9vcihy
YW5kKC0xLjAsIDEuMCkgKiAyNTUpOworICAgICAgICAgICAgICAgIHJhbmRWZWN0b3IueiA9IE1h
dGguZmxvb3IocmFuZCgtMS4wLCAxLjApICogMjU1KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LmZpbGxTdHlsZSA9ICdyZ2IoJyArIHJhbmRWZWN0b3IueCArICcsICcgKyByYW5kVmVjdG9yLnkg
KyAnLCAnICsgcmFuZFZlY3Rvci56ICsgJyknOworICAgICAgICAgICAgICAgIGNvbnRleHQuZmls
bFJlY3QoeCwgeSwgMSwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fcmFuZG9tVGV4dHVyZS51cGRhdGUoZmFsc2UpOworICAgIH07CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bInNlcmlhbGl6ZSJd
KSgpCisgICAgXSwgU1NBT1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgInRvdGFsU3RyZW5n
dGgiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMF9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFNTQU9SZW5kZXJpbmdQ
aXBlbGluZS5wcm90b3R5cGUsICJyYWRpdXMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIFNTQU9SZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJhcmVhIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTBfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTU0FPUmVuZGVyaW5nUGlwZWxpbmUucHJv
dG90eXBlLCAiZmFsbE9mZiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
U1NBT1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImJhc2UiLCB2b2lkIDApOworICAgIHJl
dHVybiBTU0FPUmVuZGVyaW5nUGlwZWxpbmU7Cit9KF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVs
aW5lX3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZSJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9QaXBlbGluZXMvc3RhbmRhcmRSZW5k
ZXJpbmdQaXBlbGluZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
UG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9QaXBlbGluZXMvc3RhbmRhcmRSZW5kZXJpbmdQ
aXBlbGluZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2Mv
ZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2Vy
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8u
Li9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWF0aHMvbWF0aC5z
Y2FsYXIgKi8gIi4vTWF0aHMvbWF0aC5zY2FsYXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGVyaWFscy9UZXh0dXJl
cy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQ
cm9jZXNzZXMvcG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2Vzcy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5l
X3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlw
ZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZSAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRl
clBpcGVsaW5lL3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRl
ckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1Jl
bmRlckVmZmVjdCAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQcm9jZXNz
UmVuZGVyRWZmZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNz
ZXNfYmx1clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9Qb3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2VzcyAq
LyAiLi9Qb3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX2Z4YWFQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQcm9j
ZXNzZXMvZnhhYVBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvZnhhYVBvc3RQcm9jZXNz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
Li4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9y
ZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9t
b3Rpb25CbHVyUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tb3Rpb25CbHVyUG9zdFByb2Nlc3MgKi8gIi4vUG9z
dFByb2Nlc3Nlcy9tb3Rpb25CbHVyUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlclBp
cGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQ
aXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50ICov
ICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGlu
ZU1hbmFnZXJTY2VuZUNvbXBvbmVudC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9T
aGFkZXJzX3N0YW5kYXJkX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vU2hhZGVycy9zdGFuZGFyZC5mcmFnbWVu
dCAqLyAiLi9TaGFkZXJzL3N0YW5kYXJkLmZyYWdtZW50LnRzIik7CisKKworCisKKworCisKKwor
CisKKworCisKKworCisKKy8qKgorICogU3RhbmRhcmQgcmVuZGVyaW5nIHBpcGVsaW5lCisgKiBE
ZWZhdWx0IHBpcGVsaW5lIHNob3VsZCBiZSB1c2VkIGdvaW5nIGZvcndhcmQgYnV0IHRoZSBzdGFu
ZGFyZCBwaXBlbGluZSB3aWxsIGJlIGtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Lgor
ICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by91c2luZ19zdGFuZGFyZF9y
ZW5kZXJpbmdfcGlwZWxpbmUKKyAqLwordmFyIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZSwg
X3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IHBpcGVsaW5lIHNob3VsZCBiZSB1c2Vk
IGdvaW5nIGZvcndhcmQgYnV0IHRoZSBzdGFuZGFyZCBwaXBlbGluZSB3aWxsIGJlIGtlcHQgZm9y
IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorICAgICAqIEBjb25zdHJ1Y3RvcgorICAgICAqIEBw
YXJhbSBuYW1lIFRoZSByZW5kZXJpbmcgcGlwZWxpbmUgbmFtZQorICAgICAqIEBwYXJhbSBzY2Vu
ZSBUaGUgc2NlbmUgbGlua2VkIHRvIHRoaXMgcGlwZWxpbmUKKyAgICAgKiBAcGFyYW0gcmF0aW8g
VGhlIHNpemUgb2YgdGhlIHBvc3Rwcm9jZXNzZXMgKDAuNSBtZWFucyB0aGF0IHlvdXIgcG9zdHBy
b2Nlc3Mgd2lsbCBoYXZlIGEgd2lkdGggPSBjYW52YXMud2lkdGggMC41IGFuZCBhIGhlaWdodCA9
IGNhbnZhcy5oZWlnaHQgMC41KQorICAgICAqIEBwYXJhbSBvcmlnaW5hbFBvc3RQcm9jZXNzIHRo
ZSBjdXN0b20gb3JpZ2luYWwgY29sb3IgcG9zdC1wcm9jZXNzLiBNdXN0IGJlICJyZXVzYWJsZSIu
IENhbiBiZSBudWxsLgorICAgICAqIEBwYXJhbSBjYW1lcmFzIFRoZSBhcnJheSBvZiBjYW1lcmFz
IHRoYXQgdGhlIHJlbmRlcmluZyBwaXBlbGluZSB3aWxsIGJlIGF0dGFjaGVkIHRvCisgICAgICov
CisgICAgZnVuY3Rpb24gU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZShuYW1lLCBzY2VuZSwgcmF0
aW8sIG9yaWdpbmFsUG9zdFByb2Nlc3MsIGNhbWVyYXMpIHsKKyAgICAgICAgaWYgKG9yaWdpbmFs
UG9zdFByb2Nlc3MgPT09IHZvaWQgMCkgeyBvcmlnaW5hbFBvc3RQcm9jZXNzID0gbnVsbDsgfQor
ICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2VuZS5nZXRFbmdpbmUoKSwg
bmFtZSkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3QtcHJvY2VzcyB1c2Vk
IHRvIGRvd24gc2NhbGUgYW4gaW1hZ2UgeDQKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmRv
d25TYW1wbGVYNFBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBv
c3QtcHJvY2VzcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaWxsdW1pbmF0ZWQgc3VyZmFjZXMgY29u
dHJvbGxlZCBieSBhIHRocmVzaG9sZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYnJpZ2h0
UGFzc1Bvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3QtcHJv
Y2VzcyBhcnJheSBzdG9yaW5nIGFsbCB0aGUgaG9yaXpvbnRhbCBibHVyIHBvc3QtcHJvY2Vzc2Vz
IHVzZWQgYnkgdGhlIHBpcGVsaW5lCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5ibHVySFBv
c3RQcm9jZXNzZXMgPSBbXTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3QtcHJvY2VzcyBh
cnJheSBzdG9yaW5nIGFsbCB0aGUgdmVydGljYWwgYmx1ciBwb3N0LXByb2Nlc3NlcyB1c2VkIGJ5
IHRoZSBwaXBlbGluZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYmx1clZQb3N0UHJvY2Vz
c2VzID0gW107CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb3N0LXByb2Nlc3MgdXNlZCB0byBh
ZGQgY29sb3JzIG9mIDIgdGV4dHVyZXMgKHR5cGljYWxseSBicmlnaHRuZXNzICsgcmVhbCBzY2Vu
ZSBjb2xvcikKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnRleHR1cmVBZGRlclBvc3RQcm9j
ZXNzID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3QtcHJvY2VzcyB1c2VkIHRv
IGNyZWF0ZSB2b2x1bWV0cmljIGxpZ2h0aW5nIGVmZmVjdAorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMudm9sdW1ldHJpY0xpZ2h0UG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICAvKioKKyAg
ICAgICAgICogUG9zdC1wcm9jZXNzIHVzZWQgdG8gc21vb3RoIHRoZSBwcmV2aW91cyB2b2x1bWV0
cmljIGxpZ2h0IHBvc3QtcHJvY2VzcyBvbiB0aGUgWCBheGlzCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy52b2x1bWV0cmljTGlnaHRTbW9vdGhYUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAg
ICAvKioKKyAgICAgICAgICogUG9zdC1wcm9jZXNzIHVzZWQgdG8gc21vb3RoIHRoZSBwcmV2aW91
cyB2b2x1bWV0cmljIGxpZ2h0IHBvc3QtcHJvY2VzcyBvbiB0aGUgWSBheGlzCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy52b2x1bWV0cmljTGlnaHRTbW9vdGhZUG9zdFByb2Nlc3MgPSBudWxs
OworICAgICAgICAvKioKKyAgICAgICAgICogUG9zdC1wcm9jZXNzIHVzZWQgdG8gbWVyZ2UgdGhl
IHZvbHVtZXRyaWMgbGlnaHQgZWZmZWN0IGFuZCB0aGUgcmVhbCBzY2VuZSBjb2xvcgorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMudm9sdW1ldHJpY0xpZ2h0TWVyZ2VQb3N0UHJvY2VzID0gbnVs
bDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3QtcHJvY2VzcyB1c2VkIHRvIHN0b3JlIHRo
ZSBmaW5hbCB2b2x1bWV0cmljIGxpZ2h0IHBvc3QtcHJvY2VzcyAoYXR0YWNoL2RldGFjaCBmb3Ig
ZGVidWcgcHVycG9zZSkKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnZvbHVtZXRyaWNMaWdo
dEZpbmFsUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogQmFzZSBw
b3N0LXByb2Nlc3MgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF2ZXJhZ2UgbHVtaW5hbmNlIG9mIHRo
ZSBmaW5hbCBpbWFnZSBmb3IgSERSCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5sdW1pbmFu
Y2VQb3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb3N0LXByb2Nl
c3NlcyB1c2VkIHRvIGNyZWF0ZSBkb3duIHNhbXBsZSBwb3N0LXByb2Nlc3NlcyBpbiBvcmRlciB0
byBnZXQKKyAgICAgICAgICogdGhlIGF2ZXJhZ2UgbHVtaW5hbmNlIG9mIHRoZSBmaW5hbCBpbWFn
ZSBmb3IgSERSCisgICAgICAgICAqIEFycmF5IG9mIGxlbmd0aCAiU3RhbmRhcmRSZW5kZXJpbmdQ
aXBlbGluZS5MdW1pbmFuY2VTdGVwcyIKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmx1bWlu
YW5jZURvd25TYW1wbGVQb3N0UHJvY2Vzc2VzID0gW107CisgICAgICAgIC8qKgorICAgICAgICAg
KiBQb3N0LXByb2Nlc3MgdXNlZCB0byBjcmVhdGUgYSBIRFIgZWZmZWN0IChsaWdodCBhZGFwdGF0
aW9uKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaGRyUG9zdFByb2Nlc3MgPSBudWxsOwor
ICAgICAgICAvKioKKyAgICAgICAgICogUG9zdC1wcm9jZXNzIHVzZWQgdG8gc3RvcmUgdGhlIGZp
bmFsIHRleHR1cmUgYWRkZXIgcG9zdC1wcm9jZXNzIChhdHRhY2gvZGV0YWNoIGZvciBkZWJ1ZyBw
dXJwb3NlKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudGV4dHVyZUFkZGVyRmluYWxQb3N0
UHJvY2VzcyA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb3N0LXByb2Nlc3MgdXNl
ZCB0byBzdG9yZSB0aGUgZmluYWwgbGVucyBmbGFyZSBwb3N0LXByb2Nlc3MgKGF0dGFjaC9kZXRh
Y2ggZm9yIGRlYnVnIHB1cnBvc2UpCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5sZW5zRmxh
cmVGaW5hbFBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3Qt
cHJvY2VzcyB1c2VkIHRvIG1lcmdlIHRoZSBmaW5hbCBIRFIgcG9zdC1wcm9jZXNzIGFuZCB0aGUg
cmVhbCBzY2VuZSBjb2xvcgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaGRyRmluYWxQb3N0
UHJvY2VzcyA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb3N0LXByb2Nlc3MgdXNl
ZCB0byBjcmVhdGUgYSBsZW5zIGZsYXJlIGVmZmVjdAorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMubGVuc0ZsYXJlUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICog
UG9zdC1wcm9jZXNzIHRoYXQgbWVyZ2VzIHRoZSByZXN1bHQgb2YgdGhlIGxlbnMgZmxhcmUgcG9z
dC1wcm9jZXNzIGFuZCB0aGUgcmVhbCBzY2VuZSBjb2xvcgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMubGVuc0ZsYXJlQ29tcG9zZVBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFBvc3QtcHJvY2VzcyB1c2VkIHRvIGNyZWF0ZSBhIG1vdGlvbiBibHVyIGVmZmVj
dAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubW90aW9uQmx1clBvc3RQcm9jZXNzID0gbnVs
bDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3QtcHJvY2VzcyB1c2VkIHRvIGNyZWF0ZSBh
IGRlcHRoIG9mIGZpZWxkIGVmZmVjdAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZGVwdGhP
ZkZpZWxkUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIEZh
c3QgQXBwcm94aW1hdGUgQW50aS1BbGlhc2luZyBwb3N0IHByb2Nlc3Mgd2hpY2ggYXR0ZW1wcyB0
byByZW1vdmUgYWxpYXNpbmcgZnJvbSBhbiBpbWFnZS4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLmZ4YWFQb3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIC8vIFZhbHVlcworICAgICAgICAv
KioKKyAgICAgICAgICogUmVwcmVzZW50cyB0aGUgYnJpZ2h0bmVzcyB0aHJlc2hvbGQgaW4gb3Jk
ZXIgdG8gY29uZmlndXJlIHRoZSBpbGx1bWluYXRlZCBzdXJmYWNlcworICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMuYnJpZ2h0VGhyZXNob2xkID0gMS4wOworICAgICAgICAvKioKKyAgICAgICAg
ICogQ29uZmlndXJlcyB0aGUgYmx1ciBpbnRlbnNpdHkgdXNlZCBmb3Igc3VyZXhwb3NlZCBzdXJm
YWNlcyBhcmUgaGlnaGxpZ2h0ZWQgc3VyZmFjZXMgKGxpZ2h0IGhhbG8pCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5ibHVyV2lkdGggPSA1MTIuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFNldHMgaWYgdGhlIGJsdXIgZm9yIGhpZ2hsaWdodGVkIHN1cmZhY2VzIG11c3QgYmUgb25seSBo
b3Jpem9udGFsCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5ob3Jpem9udGFsQmx1ciA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogVGV4dHVyZSB1c2VkIHR5cGljYWxseSB0byBz
aW11bGF0ZSAiZGlydHkiIG9uIGNhbWVyYSBsZW5zCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5sZW5zVGV4dHVyZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXByZXNlbnRz
IHRoZSBvZmZzZXQgY29lZmZpY2llbnQgYmFzZWQgb24gUmF5bGVpZ2ggcHJpbmNpcGxlLiBUeXBp
Y2FsbHkgaW4gaW50ZXJ2YWwgWy0wLjIsIDAuMl0KKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LnZvbHVtZXRyaWNMaWdodENvZWZmaWNpZW50ID0gMC4yOworICAgICAgICAvKioKKyAgICAgICAg
ICogVGhlIG92ZXJhbGwgcG93ZXIgb2Ygdm9sdW1ldHJpYyBsaWdodHMsIHR5cGljYWxseSBpbiBp
bnRlcnZhbCBbMCwgMTBdIG1heGltdW0KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnZvbHVt
ZXRyaWNMaWdodFBvd2VyID0gNC4wOworICAgICAgICAvKioKKyAgICAgICAgICogVXNlZCB0aGUg
c2V0IHRoZSBibHVyIGludGVuc2l0eSB0byBzbW9vdGggdGhlIHZvbHVtZXRyaWMgbGlnaHRzCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy52b2x1bWV0cmljTGlnaHRCbHVyU2NhbGUgPSA2NC4w
OworICAgICAgICAvKioKKyAgICAgICAgICogTGlnaHQgKHNwb3Qgb3IgZGlyZWN0aW9uYWwpIHVz
ZWQgdG8gZ2VuZXJhdGUgdGhlIHZvbHVtZXRyaWMgbGlnaHRzIHJheXMKKyAgICAgICAgICogVGhl
IHNvdXJjZSBsaWdodCBtdXN0IGhhdmUgYSBzaGFkb3cgZ2VuZXJhdGUgc28gdGhlIHBpcGVsaW5l
IGNhbiBnZXQgaXRzCisgICAgICAgICAqIGRlcHRoIG1hcAorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuc291cmNlTGlnaHQgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogRm9yIGV5
ZSBhZGFwdGF0aW9uLCByZXByZXNlbnRzIHRoZSBtaW5pbXVtIGx1bWluYW5jZSB0aGUgZXllIGNh
biBzZWUKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmhkck1pbmltdW1MdW1pbmFuY2UgPSAx
LjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGb3IgZXllIGFkYXB0YXRpb24sIHJlcHJlc2Vu
dHMgdGhlIGRlY3JlYXNlIGx1bWluYW5jZSBzcGVlZAorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMuaGRyRGVjcmVhc2VSYXRlID0gMC41OworICAgICAgICAvKioKKyAgICAgICAgICogRm9yIGV5
ZSBhZGFwdGF0aW9uLCByZXByZXNlbnRzIHRoZSBpbmNyZWFzZSBsdW1pbmFuY2Ugc3BlZWQKKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLmhkckluY3JlYXNlUmF0ZSA9IDAuNTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIExlbnMgY29sb3IgdGV4dHVyZSB1c2VkIGJ5IHRoZSBsZW5zIGZsYXJl
IGVmZmVjdC4gTWFuZGF0b3J5IGlmIGxlbnMgZmxhcmUgZWZmZWN0IGVuYWJsZWQKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLmxlbnNDb2xvclRleHR1cmUgPSBudWxsOworICAgICAgICAvKioK
KyAgICAgICAgICogVGhlIG92ZXJhbGwgc3RyZW5naCBmb3IgdGhlIGxlbnMgZmxhcmUgZWZmZWN0
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5sZW5zRmxhcmVTdHJlbmd0aCA9IDIwLjA7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBEaXNwZXJzaW9uIGNvZWZmaWNpZW50IGZvciBsZW5zIGZs
YXJlIGdob3N0cworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubGVuc0ZsYXJlR2hvc3REaXNw
ZXJzYWwgPSAxLjQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNYWluIGxlbnMgZmxhcmUgaGFs
byB3aWR0aAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubGVuc0ZsYXJlSGFsb1dpZHRoID0g
MC43OworICAgICAgICAvKioKKyAgICAgICAgICogQmFzZWQgb24gdGhlIGxlbnMgZGlzdG9ydGlv
biBlZmZlY3QsIGRlZmluZXMgaG93IG11Y2ggdGhlIGxlbnMgZmxhcmUgcmVzdWx0CisgICAgICAg
ICAqIGlzIGRpc3RvcnRlZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubGVuc0ZsYXJlRGlz
dG9ydGlvblN0cmVuZ3RoID0gMTYuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbmZpZ3Vy
ZXMgdGhlIGJsdXIgaW50ZW5zaXR5IHVzZWQgZm9yIGZvciBsZW5zIGZsYXJlIChoYWxvKQorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMubGVuc0ZsYXJlQmx1cldpZHRoID0gNTEyLjA7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBMZW5zIHN0YXIgdGV4dHVyZSBtdXN0IGJlIHVzZWQgdG8gc2lt
dWxhdGUgcmF5cyBvbiB0aGUgZmxhcmVzIGFuZCBpcyBhdmFpbGFibGUKKyAgICAgICAgICogaW4g
dGhlIGRvY3VtZW50YXRpb24KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmxlbnNTdGFyVGV4
dHVyZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBcyB0aGUgImxlbnNUZXh0dXJl
IiAoY2FuIGJlIHRoZSBzYW1lIHRleHR1cmUgb3IgZGlmZmVyZW50KSwgaXQgaXMgdXNlZCB0byBh
cHBseSB0aGUgbGVucworICAgICAgICAgKiBmbGFyZSBlZmZlY3QgYnkgdGFraW5nIGFjY291bnQg
b2YgdGhlIGRpcnQgdGV4dHVyZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubGVuc0ZsYXJl
RGlydFRleHR1cmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogUmVwcmVzZW50cyB0
aGUgZm9jYWwgbGVuZ3RoIGZvciB0aGUgZGVwdGggb2YgZmllbGQgZWZmZWN0CisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5kZXB0aE9mRmllbGREaXN0YW5jZSA9IDEwLjA7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBSZXByZXNlbnRzIHRoZSBibHVyIGludGVuc2l0eSBmb3IgdGhlIGJsdXJy
ZWQgcGFydCBvZiB0aGUgZGVwdGggb2YgZmllbGQgZWZmZWN0CisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5kZXB0aE9mRmllbGRCbHVyV2lkdGggPSA2NC4wOworICAgICAgICAvKioKKyAgICAg
ICAgICogTGlzdCBvZiBhbmltYXRpb25zIGZvciB0aGUgcGlwZWxpbmUgKElBbmltYXRhYmxlIGlt
cGxlbWVudGF0aW9uKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYW5pbWF0aW9ucyA9IFtd
OworICAgICAgICBfdGhpcy5fY3VycmVudERlcHRoT2ZGaWVsZFNvdXJjZSA9IG51bGw7CisgICAg
ICAgIF90aGlzLl9maXhlZEV4cG9zdXJlID0gMS4wOworICAgICAgICBfdGhpcy5fY3VycmVudEV4
cG9zdXJlID0gMS4wOworICAgICAgICBfdGhpcy5faGRyQXV0b0V4cG9zdXJlID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLl9oZHJDdXJyZW50THVtaW5hbmNlID0gMS4wOworICAgICAgICBfdGhpcy5f
bW90aW9uU3RyZW5ndGggPSAxLjA7CisgICAgICAgIF90aGlzLl9pc09iamVjdEJhc2VkTW90aW9u
Qmx1ciA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2FtZXJhc1RvQmVBdHRhY2hlZCA9IFtdOwor
ICAgICAgICAvLyBHZXR0ZXJzIGFuZCBzZXR0ZXJzCisgICAgICAgIF90aGlzLl9ibG9vbUVuYWJs
ZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2RlcHRoT2ZGaWVsZEVuYWJsZWQgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuX3Zsc0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2xlbnNG
bGFyZUVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2hkckVuYWJsZWQgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuX21vdGlvbkJsdXJFbmFibGVkID0gZmFsc2U7CisgICAgICAgIF90aGlz
Ll9meGFhRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBfdGhpcy5fbW90aW9uQmx1clNhbXBsZXMg
PSA2NC4wOworICAgICAgICBfdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U3RlcHNDb3VudCA9IDUwLjA7
CisgICAgICAgIF90aGlzLl9zYW1wbGVzID0gMTsKKyAgICAgICAgX3RoaXMuX2NhbWVyYXMgPSBj
YW1lcmFzIHx8IHNjZW5lLmNhbWVyYXM7CisgICAgICAgIF90aGlzLl9jYW1lcmFzID0gX3RoaXMu
X2NhbWVyYXMuc2xpY2UoKTsKKyAgICAgICAgX3RoaXMuX2NhbWVyYXNUb0JlQXR0YWNoZWQgPSBf
dGhpcy5fY2FtZXJhcy5zbGljZSgpOworICAgICAgICAvLyBJbml0aWFsaXplCisgICAgICAgIF90
aGlzLl9zY2VuZSA9IHNjZW5lOworICAgICAgICBfdGhpcy5fYmFzZVBvc3RQcm9jZXNzID0gb3Jp
Z2luYWxQb3N0UHJvY2VzczsKKyAgICAgICAgX3RoaXMuX3JhdGlvID0gcmF0aW87CisgICAgICAg
IC8vIE1pc2MKKyAgICAgICAgX3RoaXMuX2Zsb2F0VGV4dHVyZVR5cGUgPSBzY2VuZS5nZXRFbmdp
bmUoKS5nZXRDYXBzKCkudGV4dHVyZUZsb2F0UmVuZGVyID8gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9B
VCA6IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfSEFMRl9GTE9BVDsKKyAgICAgICAgLy8gRmluaXNoCisgICAg
ICAgIHNjZW5lLnBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyLmFkZFBpcGVsaW5lKF90
aGlzKTsKKyAgICAgICAgX3RoaXMuX2J1aWxkUGlwZWxpbmUoKTsKKyAgICAgICAgcmV0dXJuIF90
aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRSZW5kZXJpbmdQ
aXBlbGluZS5wcm90b3R5cGUsICJleHBvc3VyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIG92ZXJhbGwgZXhwb3N1cmUgdXNlZCBieSB0aGUgcGlwZWxpbmUKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2ZpeGVkRXhwb3N1cmU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRz
IHRoZSBvdmVyYWxsIGV4cG9zdXJlIHVzZWQgYnkgdGhlIHBpcGVsaW5lCisgICAgICAgICAqLwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fZml4ZWRF
eHBvc3VyZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fY3VycmVudEV4cG9zdXJlID0gdmFs
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFy
ZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImhkckF1dG9FeHBvc3VyZSIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0aGVyIG9yIG5vdCB0aGUgZXhwb3N1cmUgb2YgdGhl
IG92ZXJhbGwgcGlwZWxpbmUgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgYWRqdXN0ZWQgYnkgdGhl
IEhEUiBwb3N0LXByb2Nlc3MKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hkckF1dG9FeHBvc3VyZTsKKyAgICAgICAgfSwK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgd2V0aGVyIG9yIG5vdCB0aGUgZXhwb3N1cmUg
b2YgdGhlIG92ZXJhbGwgcGlwZWxpbmUgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgYWRqdXN0ZWQg
YnkgdGhlIEhEUiBwb3N0LXByb2Nlc3MKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9oZHJBdXRvRXhwb3N1cmUgPSB2YWx1ZTsK
KyAgICAgICAgICAgIGlmICh0aGlzLmhkclBvc3RQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAg
dmFyIGRlZmluZXMgPSBbIiNkZWZpbmUgSERSIl07CisgICAgICAgICAgICAgICAgaWYgKHZhbHVl
KSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBBVVRPX0VYUE9T
VVJFIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuaGRyUG9zdFBy
b2Nlc3MudXBkYXRlRWZmZWN0KGRlZmluZXMuam9pbigiXG4iKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZFJlbmRl
cmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgIm1vdGlvblN0cmVuZ3RoIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBob3cgbXVjaCB0aGUgaW1hZ2UgaXMgYmx1cnJlZCBieSB0aGUgbW92
ZW1lbnQgd2hpbGUgdXNpbmcgdGhlIG1vdGlvbiBibHVyIHBvc3QtcHJvY2VzcworICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
bW90aW9uU3RyZW5ndGg7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRz
IGhvdyBtdWNoIHRoZSBpbWFnZSBpcyBibHVycmVkIGJ5IHRoZSBtb3ZlbWVudCB3aGlsZSB1c2lu
ZyB0aGUgbW90aW9uIGJsdXIgcG9zdC1wcm9jZXNzCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uIChzdHJlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5fbW90aW9uU3RyZW5ndGgg
PSBzdHJlbmd0aDsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc09iamVjdEJhc2VkTW90aW9uQmx1
ciAmJiB0aGlzLm1vdGlvbkJsdXJQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMu
bW90aW9uQmx1clBvc3RQcm9jZXNzLm1vdGlvblN0cmVuZ3RoID0gc3RyZW5ndGg7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFu
ZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgIm9iamVjdEJhc2VkTW90aW9uQmx1ciIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0aGVyIG9yIG5vdCB0aGUgbW90aW9u
IGJsdXIgcG9zdC1wcm9jZXNzIGlzIG9iamVjdCBiYXNlZCBvciBzY3JlZW4gYmFzZWQuCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9pc09iamVjdEJhc2VkTW90aW9uQmx1cjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNldHMgd2V0aGVyIG9yIG5vdCB0aGUgbW90aW9uIGJsdXIgcG9zdC1wcm9jZXNz
IHNob3VsZCBiZSBvYmplY3QgYmFzZWQgb3Igc2NyZWVuIGJhc2VkCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIHNob3VsZFJlYnVp
bGQgPSB0aGlzLl9pc09iamVjdEJhc2VkTW90aW9uQmx1ciAhPT0gdmFsdWU7CisgICAgICAgICAg
ICB0aGlzLl9pc09iamVjdEJhc2VkTW90aW9uQmx1ciA9IHZhbHVlOworICAgICAgICAgICAgaWYg
KHNob3VsZFJlYnVpbGQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9idWlsZFBpcGVsaW5lKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgIkJsb29tRW5hYmxlZCIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgICogU3BlY2lmaWVz
IGlmIHRoZSBibG9vbSBwaXBlbGluZSBpcyBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9ibG9vbUVuYWJsZWQ7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKGVuYWJsZWQpIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9ibG9vbUVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9ibG9vbUVuYWJsZWQg
PSBlbmFibGVkOworICAgICAgICAgICAgdGhpcy5fYnVpbGRQaXBlbGluZSgpOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUsICJEZXB0aE9mRmllbGRFbmFibGVkIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogQGlnbm9yZQorICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGRlcHRoIG9mIGZp
ZWxkIHBpcGVsaW5lIGlzIGVuYWJlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGhPZkZpZWxkRW5hYmxlZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5hYmxlZCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX2RlcHRoT2ZGaWVsZEVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9kZXB0aE9mRmll
bGRFbmFibGVkID0gZW5hYmxlZDsKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkUGlwZWxpbmUoKTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkUmVu
ZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiTGVuc0ZsYXJlRW5hYmxlZCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBsZW5z
IGZsYXJlIHBpcGVsaW5lIGlzIGVuYWJlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVuc0ZsYXJlRW5hYmxlZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5hYmxlZCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX2xlbnNGbGFyZUVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9sZW5zRmxhcmVFbmFi
bGVkID0gZW5hYmxlZDsKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkUGlwZWxpbmUoKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkUmVuZGVyaW5n
UGlwZWxpbmUucHJvdG90eXBlLCAiSERSRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEBpZ25vcmUKKyAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBIRFIgcGlwZWxpbmUgaXMg
ZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5faGRyRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAoZW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2hkckVuYWJsZWQgPT09
IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9oZHJFbmFibGVkID0gZW5hYmxlZDsKKyAgICAgICAgICAgIHRoaXMuX2J1
aWxkUGlwZWxpbmUoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiVkxTRW5hYmxlZCIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgICogU3BlY2lmaWVzIGlm
IHRoZSB2b2x1bWV0cmljIGxpZ2h0cyBzY2F0dGVyaW5nIGVmZmVjdCBpcyBlbmFibGVkCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl92bHNFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmFi
bGVkKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdmxzRW5hYmxlZCA9PT0gZW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChl
bmFibGVkKSB7CisgICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5fc2NlbmUuZW5h
YmxlR2VvbWV0cnlCdWZmZXJSZW5kZXJlcigpOworICAgICAgICAgICAgICAgIGlmICghZ2VvbWV0
cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkxvZ2dlciJdLldhcm4oIkdlb21ldHJ5IHJlbmRlcmVyIGlzIG5vdCBzdXBw
b3J0ZWQsIGNhbm5vdCBjcmVhdGUgdm9sdW1ldHJpYyBsaWdodHMgaW4gU3RhbmRhcmQgUmVuZGVy
aW5nIFBpcGVsaW5lIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl92bHNFbmFibGVkID0gZW5h
YmxlZDsKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkUGlwZWxpbmUoKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLCAiTW90aW9uQmx1ckVuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBAaWdub3JlCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbW90aW9uIGJsdXIgZWZmZWN0
IGlzIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX21vdGlvbkJsdXJFbmFibGVkOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uIChlbmFibGVkKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fbW90
aW9uQmx1ckVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9tb3Rpb25CbHVyRW5hYmxlZCA9IGVuYWJs
ZWQ7CisgICAgICAgICAgICB0aGlzLl9idWlsZFBpcGVsaW5lKCk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnBy
b3RvdHlwZSwgImZ4YWFFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lm
aWVzIGlmIGFudGktYWxpYXNpbmcgaXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnhhYUVuYWJsZWQ7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKGVuYWJsZWQpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9meGFhRW5hYmxlZCA9PT0gZW5hYmxlZCkgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2Z4YWFFbmFibGVkID0gZW5h
YmxlZDsKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkUGlwZWxpbmUoKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLCAidm9sdW1ldHJpY0xpZ2h0U3RlcHNDb3VudCIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHN0ZXBzIHVzZWQgdG8gY2FsY3VsYXRl
IHRoZSB2b2x1bWV0cmljIGxpZ2h0cworICAgICAgICAgKiBUeXBpY2FsbHkgaW4gaW50ZXJ2YWwg
WzUwLCAyMDBdCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl92b2x1bWV0cmljTGlnaHRTdGVwc0NvdW50OworICAgICAgICB9
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb3VudCkgeworICAgICAgICAgICAgaWYgKHRoaXMu
dm9sdW1ldHJpY0xpZ2h0UG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnZvbHVt
ZXRyaWNMaWdodFBvc3RQcm9jZXNzLnVwZGF0ZUVmZmVjdCgiI2RlZmluZSBWTFNcbiNkZWZpbmUg
TkJfU1RFUFMgIiArIGNvdW50LnRvRml4ZWQoMSkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U3RlcHNDb3VudCA9IGNvdW50OworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGlu
ZS5wcm90b3R5cGUsICJtb3Rpb25CbHVyU2FtcGxlcyIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdXNlZCBmb3IgdGhlIG1vdGlvbiBi
bHVyIGVmZmVjdAorICAgICAgICAgKiBUeXBpY2FsbHkgaW4gaW50ZXJ2YWwgWzE2LCA2NF0KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX21vdGlvbkJsdXJTYW1wbGVzOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0
aW9uIChzYW1wbGVzKSB7CisgICAgICAgICAgICBpZiAodGhpcy5tb3Rpb25CbHVyUG9zdFByb2Nl
c3MpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNPYmplY3RCYXNlZE1vdGlvbkJsdXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3Rpb25CbHVyUG9zdFByb2Nlc3MubW90aW9u
Qmx1clNhbXBsZXMgPSBzYW1wbGVzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3Rpb25CbHVyUG9zdFByb2Nlc3Mu
dXBkYXRlRWZmZWN0KCIjZGVmaW5lIE1PVElPTl9CTFVSXG4jZGVmaW5lIE1BWF9NT1RJT05fU0FN
UExFUyAiICsgc2FtcGxlcy50b0ZpeGVkKDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl9tb3Rpb25CbHVyU2FtcGxlcyA9IHNhbXBsZXM7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZFJlbmRl
cmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgInNhbXBsZXMiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBTcGVjaWZpZXMgTVNBQSBzYW1wbGUgY291bnQsIHNldHRpbmcgdGhpcyB0byA0IHdpbGwg
cHJvdmlkZSA0eCBhbnRpIGFsaWFzaW5nLiAoZGVmYXVsdDogMSkKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NhbXBsZXM7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHNhbXBsZUNvdW50KSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5fc2FtcGxlcyA9PT0gc2FtcGxlQ291bnQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zYW1wbGVzID0g
c2FtcGxlQ291bnQ7CisgICAgICAgICAgICB0aGlzLl9idWlsZFBpcGVsaW5lKCk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLl9idWls
ZFBpcGVsaW5lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICB2YXIgcmF0aW8gPSB0aGlzLl9yYXRpbzsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5f
c2NlbmU7CisgICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3N0UHJvY2Vzc2VzKCk7CisgICAgICAgIGlm
ICh0aGlzLl9jYW1lcmFzICE9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5wb3N0
UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5kZXRhY2hDYW1lcmFzRnJvbVJlbmRlclBpcGVs
aW5lKHRoaXMuX25hbWUsIHRoaXMuX2NhbWVyYXMpOworICAgICAgICAgICAgLy8gZ2V0IGJhY2sg
Y2FtZXJhcyB0byBiZSB1c2VkIHRvIHJlYXR0YWNoIHBpcGVsaW5lCisgICAgICAgICAgICB0aGlz
Ll9jYW1lcmFzID0gdGhpcy5fY2FtZXJhc1RvQmVBdHRhY2hlZC5zbGljZSgpOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX3Jlc2V0KCk7CisgICAgICAgIC8vIENyZWF0ZSBwYXNzIHBvc3QtcHJv
Y2VzcworICAgICAgICBpZiAoIXRoaXMuX2Jhc2VQb3N0UHJvY2VzcykgeworICAgICAgICAgICAg
dGhpcy5vcmlnaW5hbFBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQcm9jZXNzIl0oIkhEUlBhc3MiLCAi
c3RhbmRhcmQiLCBbXSwgW10sIHJhdGlvLCBudWxsLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzExX19bIkNvbnN0YW50cyJdLlRFWFRVUkVfQklMSU5FQVJfU0FN
UExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsICIjZGVmaW5lIFBBU1NfUE9TVF9Q
Uk9DRVNTIiwgdGhpcy5fZmxvYXRUZXh0dXJlVHlwZSk7CisgICAgICAgICAgICB0aGlzLm9yaWdp
bmFsUG9zdFByb2Nlc3Mub25BcHBseSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBf
dGhpcy5fY3VycmVudERlcHRoT2ZGaWVsZFNvdXJjZSA9IF90aGlzLm9yaWdpbmFsUG9zdFByb2Nl
c3M7CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5vcmlnaW5hbFBvc3RQcm9jZXNzID0gdGhpcy5fYmFzZVBvc3RQcm9jZXNzOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLl9ibG9vbUVuYWJsZWQgfHwgdGhpcy5fdmxzRW5hYmxl
ZCB8fCB0aGlzLl9sZW5zRmxhcmVFbmFibGVkIHx8IHRoaXMuX2RlcHRoT2ZGaWVsZEVuYWJsZWQg
fHwgdGhpcy5fbW90aW9uQmx1ckVuYWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuYWRkRWZmZWN0
KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJd
KHNjZW5lLmdldEVuZ2luZSgpLCAiSERSUGFzc1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24gKCkgeyBy
ZXR1cm4gX3RoaXMub3JpZ2luYWxQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnREZXB0aE9mRmllbGRTb3VyY2UgPSB0aGlzLm9yaWdpbmFsUG9z
dFByb2Nlc3M7CisgICAgICAgIGlmICh0aGlzLl9ibG9vbUVuYWJsZWQpIHsKKyAgICAgICAgICAg
IC8vIENyZWF0ZSBkb3duIHNhbXBsZSBYNCBwb3N0LXByb2Nlc3MKKyAgICAgICAgICAgIHRoaXMu
X2NyZWF0ZURvd25TYW1wbGVYNFBvc3RQcm9jZXNzKHNjZW5lLCByYXRpbyAvIDIpOworICAgICAg
ICAgICAgLy8gQ3JlYXRlIGJyaWdodCBwYXNzIHBvc3QtcHJvY2VzcworICAgICAgICAgICAgdGhp
cy5fY3JlYXRlQnJpZ2h0UGFzc1Bvc3RQcm9jZXNzKHNjZW5lLCByYXRpbyAvIDIpOworICAgICAg
ICAgICAgLy8gQ3JlYXRlIGdhdXNzaWFuIGJsdXIgcG9zdC1wcm9jZXNzZXMgKGRvd24gc2FtcGxp
bmcgYmx1cnMpCisgICAgICAgICAgICB0aGlzLl9jcmVhdGVCbHVyUG9zdFByb2Nlc3NlcyhzY2Vu
ZSwgcmF0aW8gLyA0LCAxKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0ZXh0dXJlIGFkZGVyIHBv
c3QtcHJvY2VzcworICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGV4dHVyZUFkZGVyUG9zdFByb2Nl
c3Moc2NlbmUsIHJhdGlvKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBkZXB0aC1vZi1maWVsZCBz
b3VyY2UgcG9zdC1wcm9jZXNzCisgICAgICAgICAgICB0aGlzLnRleHR1cmVBZGRlckZpbmFsUG9z
dFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siUG9zdFByb2Nlc3MiXSgiSERSRGVwdGhPZkZpZWxkU291cmNlIiwgInN0
YW5kYXJkIiwgW10sIFtdLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElO
R01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgIiNkZWZpbmUgUEFTU19QT1NUX1BST0NF
U1MiLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkNv
bnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCk7CisgICAgICAgICAgICB0aGlzLmFk
ZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5k
ZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3NSZW5kZXJF
ZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgIkhEUkJhc2VEZXB0aE9mRmllbGRTb3VyY2UiLCBm
dW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy50ZXh0dXJlQWRkZXJGaW5hbFBvc3RQcm9jZXNzOyB9
LCB0cnVlKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Zsc0VuYWJsZWQpIHsKKyAg
ICAgICAgICAgIC8vIENyZWF0ZSB2b2x1bWV0cmljIGxpZ2h0CisgICAgICAgICAgICB0aGlzLl9j
cmVhdGVWb2x1bWV0cmljTGlnaHRQb3N0UHJvY2VzcyhzY2VuZSwgcmF0aW8pOworICAgICAgICAg
ICAgLy8gQ3JlYXRlIHZvbHVtZXRyaWMgbGlnaHQgZmluYWwgcG9zdC1wcm9jZXNzCisgICAgICAg
ICAgICB0aGlzLnZvbHVtZXRyaWNMaWdodEZpbmFsUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9j
ZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUG9zdFByb2Nl
c3MiXSgiSERSVkxTRmluYWwiLCAic3RhbmRhcmQiLCBbXSwgW10sIHJhdGlvLCBudWxsLCBfTWF0
ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVGV4
dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgc2NlbmUuZ2V0RW5naW5lKCksIGZhbHNlLCAi
I2RlZmluZSBQQVNTX1BPU1RfUFJPQ0VTUyIsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5U
KTsKKyAgICAgICAgICAgIHRoaXMuYWRkRWZmZWN0KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQ
aXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJdKHNjZW5lLmdldEVuZ2luZSgpLCAiSERSVkxT
RmluYWwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy52b2x1bWV0cmljTGlnaHRGaW5hbFBv
c3RQcm9jZXNzOyB9LCB0cnVlKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xlbnNG
bGFyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBsZW5zIGZsYXJlIHBvc3QtcHJv
Y2VzcworICAgICAgICAgICAgdGhpcy5fY3JlYXRlTGVuc0ZsYXJlUG9zdFByb2Nlc3Moc2NlbmUs
IHJhdGlvKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBkZXB0aC1vZi1maWVsZCBzb3VyY2UgcG9z
dC1wcm9jZXNzIHBvc3QgbGVucy1mbGFyZSBhbmQgZGlzYWJsZSBpdCBub3cKKyAgICAgICAgICAg
IHRoaXMubGVuc0ZsYXJlRmluYWxQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQb3N0UHJvY2VzcyJdKCJIRFJQ
b3N0TGVuc0ZsYXJlRGVwdGhPZkZpZWxkU291cmNlIiwgInN0YW5kYXJkIiwgW10sIFtdLCByYXRp
bywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2lu
ZSgpLCBmYWxzZSwgIiNkZWZpbmUgUEFTU19QT1NUX1BST0NFU1MiLCBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBF
X1VOU0lHTkVEX0lOVCk7CisgICAgICAgICAgICB0aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9j
ZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdp
bmUoKSwgIkhEUlBvc3RMZW5zRmxhcmVEZXB0aE9mRmllbGRTb3VyY2UiLCBmdW5jdGlvbiAoKSB7
IHJldHVybiBfdGhpcy5sZW5zRmxhcmVGaW5hbFBvc3RQcm9jZXNzOyB9LCB0cnVlKSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2hkckVuYWJsZWQpIHsKKyAgICAgICAgICAgIC8vIENy
ZWF0ZSBsdW1pbmFuY2UKKyAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUx1bWluYW5jZVBvc3RQcm9j
ZXNzZXMoc2NlbmUsIHRoaXMuX2Zsb2F0VGV4dHVyZVR5cGUpOworICAgICAgICAgICAgLy8gQ3Jl
YXRlIEhEUgorICAgICAgICAgICAgdGhpcy5fY3JlYXRlSGRyUG9zdFByb2Nlc3Moc2NlbmUsIHJh
dGlvKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBkZXB0aC1vZi1maWVsZCBzb3VyY2UgcG9zdC1w
cm9jZXNzIHBvc3QgaGRyIGFuZCBkaXNhYmxlIGl0IG5vdworICAgICAgICAgICAgdGhpcy5oZHJG
aW5hbFBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQcm9jZXNzIl0oIkhEUlBvc3RIRFJlRGVwdGhPZkZp
ZWxkU291cmNlIiwgInN0YW5kYXJkIiwgW10sIFtdLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19U
ZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRleHR1cmUiXS5C
SUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgIiNkZWZpbmUg
UEFTU19QT1NUX1BST0NFU1MiLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzExX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCk7CisgICAg
ICAgICAgICB0aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVf
cG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9z
dFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgIkhEUlBvc3RIRFJlRGVw
dGhPZkZpZWxkU291cmNlIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuaGRyRmluYWxQb3N0
UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9kZXB0aE9m
RmllbGRFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgZ2F1c3NpYW4gYmx1ciB1c2Vk
IGJ5IGRlcHRoLW9mLWZpZWxkCisgICAgICAgICAgICB0aGlzLl9jcmVhdGVCbHVyUG9zdFByb2Nl
c3NlcyhzY2VuZSwgcmF0aW8gLyAyLCAzLCAiZGVwdGhPZkZpZWxkQmx1cldpZHRoIik7CisgICAg
ICAgICAgICAvLyBDcmVhdGUgZGVwdGgtb2YtZmllbGQgcG9zdC1wcm9jZXNzCisgICAgICAgICAg
ICB0aGlzLl9jcmVhdGVEZXB0aE9mRmllbGRQb3N0UHJvY2VzcyhzY2VuZSwgcmF0aW8pOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLl9tb3Rpb25CbHVyRW5hYmxlZCkgeworICAgICAgICAg
ICAgLy8gQ3JlYXRlIG1vdGlvbiBibHVyIHBvc3QtcHJvY2VzcworICAgICAgICAgICAgdGhpcy5f
Y3JlYXRlTW90aW9uQmx1clBvc3RQcm9jZXNzKHNjZW5lLCByYXRpbyk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuX2Z4YWFFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgZnhh
YSBwb3N0LXByb2Nlc3MKKyAgICAgICAgICAgIHRoaXMuZnhhYVBvc3RQcm9jZXNzID0gbmV3IF9Q
b3N0UHJvY2Vzc2VzX2Z4YWFQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBf
X1siRnhhYVBvc3RQcm9jZXNzIl0oImZ4YWEiLCAxLjAsIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVy
ZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0uQklMSU5F
QVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsIF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZ
UEVfVU5TSUdORURfSU5UKTsKKyAgICAgICAgICAgIHRoaXMuYWRkRWZmZWN0KG5ldyBfUG9zdFBy
b2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fWyJQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJdKHNjZW5lLmdldEVu
Z2luZSgpLCAiSERSRnhhYSIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmZ4YWFQb3N0UHJv
Y2VzczsgfSwgdHJ1ZSkpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9jYW1lcmFzICE9
PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5wb3N0UHJvY2Vzc1JlbmRlclBpcGVs
aW5lTWFuYWdlci5hdHRhY2hDYW1lcmFzVG9SZW5kZXJQaXBlbGluZSh0aGlzLl9uYW1lLCB0aGlz
Ll9jYW1lcmFzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2VuYWJsZU1TQUFPbkZp
cnN0UG9zdFByb2Nlc3ModGhpcy5fc2FtcGxlcykgJiYgdGhpcy5fc2FtcGxlcyA+IDEpIHsKKyAg
ICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMb2dn
ZXIiXS5XYXJuKCJNU0FBIGZhaWxlZCB0byBlbmFibGUsIE1TQUEgaXMgb25seSBzdXBwb3J0ZWQg
aW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMID49IDIuMCIpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvLyBEb3duIFNhbXBsZSBYNCBQb3N0LVByb2Nlc3NzCisgICAgU3RhbmRhcmRSZW5k
ZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2NyZWF0ZURvd25TYW1wbGVYNFBvc3RQcm9jZXNzID0g
ZnVuY3Rpb24gKHNjZW5lLCByYXRpbykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICB2YXIgZG93blNhbXBsZVg0T2Zmc2V0cyA9IG5ldyBBcnJheSgzMik7CisgICAgICAgIHRo
aXMuZG93blNhbXBsZVg0UG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nl
c3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUG9zdFByb2Nlc3MiXSgiSERSRG93blNh
bXBsZVg0IiwgInN0YW5kYXJkIiwgWyJkc09mZnNldHMiXSwgW10sIHJhdGlvLCBudWxsLCBfTWF0
ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVGV4
dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgc2NlbmUuZ2V0RW5naW5lKCksIGZhbHNlLCAi
I2RlZmluZSBET1dOX1NBTVBMRV9YNCIsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsK
KyAgICAgICAgdGhpcy5kb3duU2FtcGxlWDRQb3N0UHJvY2Vzcy5vbkFwcGx5ID0gZnVuY3Rpb24g
KGVmZmVjdCkgeworICAgICAgICAgICAgdmFyIGlkID0gMDsKKyAgICAgICAgICAgIHZhciB3aWR0
aCA9IF90aGlzLmRvd25TYW1wbGVYNFBvc3RQcm9jZXNzLndpZHRoOworICAgICAgICAgICAgdmFy
IGhlaWdodCA9IF90aGlzLmRvd25TYW1wbGVYNFBvc3RQcm9jZXNzLmhlaWdodDsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAtMjsgaSA8IDI7IGkrKykgeworICAgICAgICAgICAgICAgIGZvciAo
dmFyIGogPSAtMjsgaiA8IDI7IGorKykgeworICAgICAgICAgICAgICAgICAgICBkb3duU2FtcGxl
WDRPZmZzZXRzW2lkXSA9IChpICsgMC41KSAqICgxLjAgLyB3aWR0aCk7CisgICAgICAgICAgICAg
ICAgICAgIGRvd25TYW1wbGVYNE9mZnNldHNbaWQgKyAxXSA9IChqICsgMC41KSAqICgxLjAgLyBo
ZWlnaHQpOworICAgICAgICAgICAgICAgICAgICBpZCArPSAyOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVmZmVjdC5zZXRBcnJheTIoImRzT2Zmc2V0cyIs
IGRvd25TYW1wbGVYNE9mZnNldHMpOworICAgICAgICB9OworICAgICAgICAvLyBBZGQgdG8gcGlw
ZWxpbmUKKyAgICAgICAgdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBp
cGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5lKCksICJIRFJEb3du
U2FtcGxlWDQiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5kb3duU2FtcGxlWDRQb3N0UHJv
Y2VzczsgfSwgdHJ1ZSkpOworICAgIH07CisgICAgLy8gQnJpZ2h0cGFzcyBQb3N0LVByb2Nlc3MK
KyAgICBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fY3JlYXRlQnJpZ2h0UGFz
c1Bvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHNjZW5lLCByYXRpbykgeworICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICB2YXIgYnJpZ2h0T2Zmc2V0cyA9IG5ldyBBcnJheSg4KTsKKyAg
ICAgICAgdGhpcy5icmlnaHRQYXNzUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9z
dFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUG9zdFByb2Nlc3MiXSgiSERS
QnJpZ2h0UGFzcyIsICJzdGFuZGFyZCIsIFsiZHNPZmZzZXRzIiwgImJyaWdodFRocmVzaG9sZCJd
LCBbXSwgcmF0aW8sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2Vu
ZS5nZXRFbmdpbmUoKSwgZmFsc2UsICIjZGVmaW5lIEJSSUdIVF9QQVNTIiwgX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5URVhUVVJF
VFlQRV9VTlNJR05FRF9JTlQpOworICAgICAgICB0aGlzLmJyaWdodFBhc3NQb3N0UHJvY2Vzcy5v
bkFwcGx5ID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAgdmFyIHNVID0gKDEuMCAv
IF90aGlzLmJyaWdodFBhc3NQb3N0UHJvY2Vzcy53aWR0aCk7CisgICAgICAgICAgICB2YXIgc1Yg
PSAoMS4wIC8gX3RoaXMuYnJpZ2h0UGFzc1Bvc3RQcm9jZXNzLmhlaWdodCk7CisgICAgICAgICAg
ICBicmlnaHRPZmZzZXRzWzBdID0gLTAuNSAqIHNVOworICAgICAgICAgICAgYnJpZ2h0T2Zmc2V0
c1sxXSA9IDAuNSAqIHNWOworICAgICAgICAgICAgYnJpZ2h0T2Zmc2V0c1syXSA9IDAuNSAqIHNV
OworICAgICAgICAgICAgYnJpZ2h0T2Zmc2V0c1szXSA9IDAuNSAqIHNWOworICAgICAgICAgICAg
YnJpZ2h0T2Zmc2V0c1s0XSA9IC0wLjUgKiBzVTsKKyAgICAgICAgICAgIGJyaWdodE9mZnNldHNb
NV0gPSAtMC41ICogc1Y7CisgICAgICAgICAgICBicmlnaHRPZmZzZXRzWzZdID0gMC41ICogc1U7
CisgICAgICAgICAgICBicmlnaHRPZmZzZXRzWzddID0gLTAuNSAqIHNWOworICAgICAgICAgICAg
ZWZmZWN0LnNldEFycmF5MigiZHNPZmZzZXRzIiwgYnJpZ2h0T2Zmc2V0cyk7CisgICAgICAgICAg
ICBlZmZlY3Quc2V0RmxvYXQoImJyaWdodFRocmVzaG9sZCIsIF90aGlzLmJyaWdodFRocmVzaG9s
ZCk7CisgICAgICAgIH07CisgICAgICAgIC8vIEFkZCB0byBwaXBlbGluZQorICAgICAgICB0aGlz
LmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NS
ZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3NSZW5k
ZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgIkhEUkJyaWdodFBhc3MiLCBmdW5jdGlvbiAo
KSB7IHJldHVybiBfdGhpcy5icmlnaHRQYXNzUG9zdFByb2Nlc3M7IH0sIHRydWUpKTsKKyAgICB9
OworICAgIC8vIENyZWF0ZSBibHVyIEgmViBwb3N0LXByb2Nlc3NlcworICAgIFN0YW5kYXJkUmVu
ZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLl9jcmVhdGVCbHVyUG9zdFByb2Nlc3NlcyA9IGZ1bmN0
aW9uIChzY2VuZSwgcmF0aW8sIGluZGljZSwgYmx1cldpZHRoS2V5KSB7CisgICAgICAgIHZhciBf
dGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChibHVyV2lkdGhLZXkgPT09IHZvaWQgMCkgeyBibHVy
V2lkdGhLZXkgPSAiYmx1cldpZHRoIjsgfQorICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0
RW5naW5lKCk7CisgICAgICAgIHZhciBibHVyWCA9IG5ldyBfUG9zdFByb2Nlc3Nlc19ibHVyUG9z
dFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQmx1clBvc3RQcm9jZXNzIl0o
IkhEUkJsdXJIIiArICJfIiArIGluZGljZSwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IyIl0oMSwgMCksIHRoaXNbYmx1cldpZHRoS2V5
XSwgcmF0aW8sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5n
ZXRFbmdpbmUoKSwgZmFsc2UsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAg
ICAgdmFyIGJsdXJZID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX2JsdXJQb3N0UHJvY2Vzc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJCbHVyUG9zdFByb2Nlc3MiXSgiSERSQmx1clYiICsgIl8i
ICsgaW5kaWNlLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlY3RvcjIiXSgwLCAxKSwgdGhpc1tibHVyV2lkdGhLZXldLCByYXRpbywgbnVsbCwg
X01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19b
IlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxz
ZSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQpOworICAgICAgICBibHVyWC5vbkFjdGl2
YXRlT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGR3ID0gYmx1
clgud2lkdGggLyBlbmdpbmUuZ2V0UmVuZGVyV2lkdGgoKTsKKyAgICAgICAgICAgIGJsdXJYLmtl
cm5lbCA9IF90aGlzW2JsdXJXaWR0aEtleV0gKiBkdzsKKyAgICAgICAgfSk7CisgICAgICAgIGJs
dXJZLm9uQWN0aXZhdGVPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2
YXIgZHcgPSBibHVyWS5oZWlnaHQgLyBlbmdpbmUuZ2V0UmVuZGVySGVpZ2h0KCk7CisgICAgICAg
ICAgICBibHVyWS5rZXJuZWwgPSBfdGhpcy5ob3Jpem9udGFsQmx1ciA/IDY0ICogZHcgOiBfdGhp
c1tibHVyV2lkdGhLZXldICogZHc7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLmFkZEVmZmVj
dChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3Qi
XShzY2VuZS5nZXRFbmdpbmUoKSwgIkhEUkJsdXJIIiArIGluZGljZSwgZnVuY3Rpb24gKCkgeyBy
ZXR1cm4gYmx1clg7IH0sIHRydWUpKTsKKyAgICAgICAgdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0
UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0
RW5naW5lKCksICJIRFJCbHVyViIgKyBpbmRpY2UsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJsdXJZ
OyB9LCB0cnVlKSk7CisgICAgICAgIHRoaXMuYmx1ckhQb3N0UHJvY2Vzc2VzLnB1c2goYmx1clgp
OworICAgICAgICB0aGlzLmJsdXJWUG9zdFByb2Nlc3Nlcy5wdXNoKGJsdXJZKTsKKyAgICB9Owor
ICAgIC8vIENyZWF0ZSB0ZXh0dXJlIGFkZGVyIHBvc3QtcHJvY2VzcworICAgIFN0YW5kYXJkUmVu
ZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLl9jcmVhdGVUZXh0dXJlQWRkZXJQb3N0UHJvY2VzcyA9
IGZ1bmN0aW9uIChzY2VuZSwgcmF0aW8pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAg
ICAgICAgdGhpcy50ZXh0dXJlQWRkZXJQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19w
b3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQb3N0UHJvY2VzcyJdKCJI
RFJUZXh0dXJlQWRkZXIiLCAic3RhbmRhcmQiLCBbImV4cG9zdXJlIl0sIFsib3RoZXJTYW1wbGVy
IiwgImxlbnNTYW1wbGVyIl0sIHJhdGlvLCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBM
SU5HTU9ERSwgc2NlbmUuZ2V0RW5naW5lKCksIGZhbHNlLCAiI2RlZmluZSBURVhUVVJFX0FEREVS
IiwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQpOworICAgICAgICB0aGlzLnRleHR1cmVB
ZGRlclBvc3RQcm9jZXNzLm9uQXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAg
ICBlZmZlY3Quc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2Vzcygib3RoZXJTYW1wbGVyIiwgX3RoaXMu
X3Zsc0VuYWJsZWQgPyBfdGhpcy5fY3VycmVudERlcHRoT2ZGaWVsZFNvdXJjZSA6IF90aGlzLm9y
aWdpbmFsUG9zdFByb2Nlc3MpOworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoImxlbnNT
YW1wbGVyIiwgX3RoaXMubGVuc1RleHR1cmUpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0
KCJleHBvc3VyZSIsIF90aGlzLl9jdXJyZW50RXhwb3N1cmUpOworICAgICAgICAgICAgX3RoaXMu
X2N1cnJlbnREZXB0aE9mRmllbGRTb3VyY2UgPSBfdGhpcy50ZXh0dXJlQWRkZXJGaW5hbFBvc3RQ
cm9jZXNzOworICAgICAgICB9OworICAgICAgICAvLyBBZGQgdG8gcGlwZWxpbmUKKyAgICAgICAg
dGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9j
ZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBvc3RQcm9jZXNz
UmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5lKCksICJIRFJUZXh0dXJlQWRkZXIiLCBmdW5j
dGlvbiAoKSB7IHJldHVybiBfdGhpcy50ZXh0dXJlQWRkZXJQb3N0UHJvY2VzczsgfSwgdHJ1ZSkp
OworICAgIH07CisgICAgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2NyZWF0
ZVZvbHVtZXRyaWNMaWdodFBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHNjZW5lLCByYXRpbykgewor
ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgZ2VvbWV0cnlSZW5kZXJlciA9
IHNjZW5lLmVuYWJsZUdlb21ldHJ5QnVmZmVyUmVuZGVyZXIoKTsKKyAgICAgICAgZ2VvbWV0cnlS
ZW5kZXJlci5lbmFibGVQb3NpdGlvbiA9IHRydWU7CisgICAgICAgIHZhciBnZW9tZXRyeSA9IGdl
b21ldHJ5UmVuZGVyZXIuZ2V0R0J1ZmZlcigpOworICAgICAgICAvLyBCYXNlIHBvc3QtcHJvY2Vz
cworICAgICAgICB0aGlzLnZvbHVtZXRyaWNMaWdodFBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJv
Y2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQcm9j
ZXNzIl0oIkhEUlZMUyIsICJzdGFuZGFyZCIsIFsic2hhZG93Vmlld1Byb2plY3Rpb24iLCAiY2Ft
ZXJhUG9zaXRpb24iLCAic3VuRGlyZWN0aW9uIiwgInN1bkNvbG9yIiwgInNjYXR0ZXJpbmdDb2Vm
ZmljaWVudCIsICJzY2F0dGVyaW5nUG93ZXIiLCAiZGVwdGhWYWx1ZXMiXSwgWyJzaGFkb3dNYXBT
YW1wbGVyIiwgInBvc2l0aW9uU2FtcGxlciJdLCByYXRpbyAvIDgsIG51bGwsIF9NYXRlcmlhbHNf
VGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0u
QklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsICIjZGVmaW5l
IFZMU1xuI2RlZmluZSBOQl9TVEVQUyAiICsgdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U3RlcHNDb3Vu
dC50b0ZpeGVkKDEpKTsKKyAgICAgICAgdmFyIGRlcHRoVmFsdWVzID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjIiXS5aZXJvKCk7CisgICAg
ICAgIHRoaXMudm9sdW1ldHJpY0xpZ2h0UG9zdFByb2Nlc3Mub25BcHBseSA9IGZ1bmN0aW9uIChl
ZmZlY3QpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5zb3VyY2VMaWdodCAmJiBfdGhpcy5zb3Vy
Y2VMaWdodC5nZXRTaGFkb3dHZW5lcmF0b3IoKSAmJiBfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJh
KSB7CisgICAgICAgICAgICAgICAgdmFyIGdlbmVyYXRvciA9IF90aGlzLnNvdXJjZUxpZ2h0Lmdl
dFNoYWRvd0dlbmVyYXRvcigpOworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJz
aGFkb3dNYXBTYW1wbGVyIiwgZ2VuZXJhdG9yLmdldFNoYWRvd01hcCgpKTsKKyAgICAgICAgICAg
ICAgICBlZmZlY3Quc2V0VGV4dHVyZSgicG9zaXRpb25TYW1wbGVyIiwgZ2VvbWV0cnkudGV4dHVy
ZXNbMl0pOworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRDb2xvcjMoInN1bkNvbG9yIiwgX3Ro
aXMuc291cmNlTGlnaHQuZGlmZnVzZSk7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldFZlY3Rv
cjMoInN1bkRpcmVjdGlvbiIsIF90aGlzLnNvdXJjZUxpZ2h0LmdldFNoYWRvd0RpcmVjdGlvbigp
KTsKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0VmVjdG9yMygiY2FtZXJhUG9zaXRpb24iLCBf
dGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLmdsb2JhbFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAg
ICBlZmZlY3Quc2V0TWF0cml4KCJzaGFkb3dWaWV3UHJvamVjdGlvbiIsIGdlbmVyYXRvci5nZXRU
cmFuc2Zvcm1NYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJzY2F0
dGVyaW5nQ29lZmZpY2llbnQiLCBfdGhpcy52b2x1bWV0cmljTGlnaHRDb2VmZmljaWVudCk7Cisg
ICAgICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJzY2F0dGVyaW5nUG93ZXIiLCBfdGhpcy52
b2x1bWV0cmljTGlnaHRQb3dlcik7CisgICAgICAgICAgICAgICAgZGVwdGhWYWx1ZXMueCA9IF90
aGlzLnNvdXJjZUxpZ2h0LmdldERlcHRoTWluWihfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhKTsK
KyAgICAgICAgICAgICAgICBkZXB0aFZhbHVlcy55ID0gX3RoaXMuc291cmNlTGlnaHQuZ2V0RGVw
dGhNYXhaKF90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEpOworICAgICAgICAgICAgICAgIGVmZmVj
dC5zZXRWZWN0b3IyKCJkZXB0aFZhbHVlcyIsIGRlcHRoVmFsdWVzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vzc2VzX1Jl
bmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5lKCksICJI
RFJWTFMiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy52b2x1bWV0cmljTGlnaHRQb3N0UHJv
Y2VzczsgfSwgdHJ1ZSkpOworICAgICAgICAvLyBTbW9vdGgKKyAgICAgICAgdGhpcy5fY3JlYXRl
Qmx1clBvc3RQcm9jZXNzZXMoc2NlbmUsIHJhdGlvIC8gNCwgMCwgInZvbHVtZXRyaWNMaWdodEJs
dXJTY2FsZSIpOworICAgICAgICAvLyBNZXJnZQorICAgICAgICB0aGlzLnZvbHVtZXRyaWNMaWdo
dE1lcmdlUG9zdFByb2NlcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQb3N0UHJvY2VzcyJdKCJIRFJWTFNNZXJnZSIsICJzdGFu
ZGFyZCIsIFtdLCBbIm9yaWdpbmFsU2FtcGxlciJdLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19U
ZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRleHR1cmUiXS5C
SUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgIiNkZWZpbmUg
VkxTTUVSR0UiKTsKKyAgICAgICAgdGhpcy52b2x1bWV0cmljTGlnaHRNZXJnZVBvc3RQcm9jZXMu
b25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0
dXJlRnJvbVBvc3RQcm9jZXNzKCJvcmlnaW5hbFNhbXBsZXIiLCBfdGhpcy5fYmxvb21FbmFibGVk
ID8gX3RoaXMudGV4dHVyZUFkZGVyRmluYWxQb3N0UHJvY2VzcyA6IF90aGlzLm9yaWdpbmFsUG9z
dFByb2Nlc3MpOworICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnREZXB0aE9mRmllbGRTb3VyY2Ug
PSBfdGhpcy52b2x1bWV0cmljTGlnaHRGaW5hbFBvc3RQcm9jZXNzOworICAgICAgICB9OworICAg
ICAgICB0aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9z
dFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFBy
b2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgIkhEUlZMU01lcmdlIiwgZnVu
Y3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudm9sdW1ldHJpY0xpZ2h0TWVyZ2VQb3N0UHJvY2VzOyB9
LCB0cnVlKSk7CisgICAgfTsKKyAgICAvLyBDcmVhdGUgbHVtaW5hbmNlCisgICAgU3RhbmRhcmRS
ZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2NyZWF0ZUx1bWluYW5jZVBvc3RQcm9jZXNzZXMg
PSBmdW5jdGlvbiAoc2NlbmUsIHRleHR1cmVUeXBlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRo
aXM7CisgICAgICAgIC8vIENyZWF0ZSBsdW1pbmFuY2UKKyAgICAgICAgdmFyIHNpemUgPSBNYXRo
LnBvdygzLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLkx1bWluYW5jZVN0ZXBzKTsKKyAgICAg
ICAgdGhpcy5sdW1pbmFuY2VQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJv
Y2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQb3N0UHJvY2VzcyJdKCJIRFJMdW1p
bmFuY2UiLCAic3RhbmRhcmQiLCBbImx1bU9mZnNldHMiXSwgW10sIHsgd2lkdGg6IHNpemUsIGhl
aWdodDogc2l6ZSB9LCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgc2Nl
bmUuZ2V0RW5naW5lKCksIGZhbHNlLCAiI2RlZmluZSBMVU1JTkFOQ0UiLCB0ZXh0dXJlVHlwZSk7
CisgICAgICAgIHZhciBvZmZzZXRzID0gW107CisgICAgICAgIHRoaXMubHVtaW5hbmNlUG9zdFBy
b2Nlc3Mub25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIHZhciBzVSA9
ICgxLjAgLyBfdGhpcy5sdW1pbmFuY2VQb3N0UHJvY2Vzcy53aWR0aCk7CisgICAgICAgICAgICB2
YXIgc1YgPSAoMS4wIC8gX3RoaXMubHVtaW5hbmNlUG9zdFByb2Nlc3MuaGVpZ2h0KTsKKyAgICAg
ICAgICAgIG9mZnNldHNbMF0gPSAtMC41ICogc1U7CisgICAgICAgICAgICBvZmZzZXRzWzFdID0g
MC41ICogc1Y7CisgICAgICAgICAgICBvZmZzZXRzWzJdID0gMC41ICogc1U7CisgICAgICAgICAg
ICBvZmZzZXRzWzNdID0gMC41ICogc1Y7CisgICAgICAgICAgICBvZmZzZXRzWzRdID0gLTAuNSAq
IHNVOworICAgICAgICAgICAgb2Zmc2V0c1s1XSA9IC0wLjUgKiBzVjsKKyAgICAgICAgICAgIG9m
ZnNldHNbNl0gPSAwLjUgKiBzVTsKKyAgICAgICAgICAgIG9mZnNldHNbN10gPSAtMC41ICogc1Y7
CisgICAgICAgICAgICBlZmZlY3Quc2V0QXJyYXkyKCJsdW1PZmZzZXRzIiwgb2Zmc2V0cyk7Cisg
ICAgICAgIH07CisgICAgICAgIC8vIEFkZCB0byBwaXBlbGluZQorICAgICAgICB0aGlzLmFkZEVm
ZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJF
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZl
Y3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgIkhEUkx1bWluYW5jZSIsIGZ1bmN0aW9uICgpIHsgcmV0
dXJuIF90aGlzLmx1bWluYW5jZVBvc3RQcm9jZXNzOyB9LCB0cnVlKSk7CisgICAgICAgIC8vIENy
ZWF0ZSBkb3duIHNhbXBsZSBsdW1pbmFuY2UKKyAgICAgICAgZm9yICh2YXIgaSA9IFN0YW5kYXJk
UmVuZGVyaW5nUGlwZWxpbmUuTHVtaW5hbmNlU3RlcHMgLSAxOyBpID49IDA7IGktLSkgeworICAg
ICAgICAgICAgdmFyIHNpemUgPSBNYXRoLnBvdygzLCBpKTsKKyAgICAgICAgICAgIHZhciBkZWZp
bmVzID0gIiNkZWZpbmUgTFVNSU5BTkNFX0RPV05fU0FNUExFXG4iOworICAgICAgICAgICAgaWYg
KGkgPT09IDApIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzICs9ICIjZGVmaW5lIEZJTkFMX0RP
V05fU0FNUExFUiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcG9zdFByb2Nlc3Mg
PSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfX1siUG9zdFByb2Nlc3MiXSgiSERSTHVtaW5hbmNlRG93blNhbXBsZSIgKyBpLCAic3RhbmRh
cmQiLCBbImRzT2Zmc2V0cyIsICJoYWxmRGVzdFBpeGVsU2l6ZSJdLCBbXSwgeyB3aWR0aDogc2l6
ZSwgaGVpZ2h0OiBzaXplIH0sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RF
LCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsIGRlZmluZXMsIHRleHR1cmVUeXBlKTsKKyAgICAg
ICAgICAgIHRoaXMubHVtaW5hbmNlRG93blNhbXBsZVBvc3RQcm9jZXNzZXMucHVzaChwb3N0UHJv
Y2Vzcyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ3JlYXRlIGNhbGxiYWNrcyBhbmQgYWRkIGVm
ZmVjdHMKKyAgICAgICAgdmFyIGxhc3RMdW1pbmFuY2UgPSB0aGlzLmx1bWluYW5jZVBvc3RQcm9j
ZXNzOworICAgICAgICB0aGlzLmx1bWluYW5jZURvd25TYW1wbGVQb3N0UHJvY2Vzc2VzLmZvckVh
Y2goZnVuY3Rpb24gKHBwLCBpbmRleCkgeworICAgICAgICAgICAgdmFyIGRvd25TYW1wbGVPZmZz
ZXRzID0gbmV3IEFycmF5KDE4KTsKKyAgICAgICAgICAgIHBwLm9uQXBwbHkgPSBmdW5jdGlvbiAo
ZWZmZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKCFsYXN0THVtaW5hbmNlKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dmFyIGlkID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gLTE7IHggPCAyOyB4Kysp
IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IC0xOyB5IDwgMjsgeSsrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkb3duU2FtcGxlT2Zmc2V0c1tpZF0gPSB4IC8gbGFzdEx1
bWluYW5jZS53aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvd25TYW1wbGVPZmZzZXRz
W2lkICsgMV0gPSB5IC8gbGFzdEx1bWluYW5jZS5oZWlnaHQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZCArPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRBcnJheTIoImRzT2Zmc2V0cyIsIGRvd25TYW1wbGVP
ZmZzZXRzKTsKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImhhbGZEZXN0UGl4ZWxT
aXplIiwgMC41IC8gbGFzdEx1bWluYW5jZS53aWR0aCk7CisgICAgICAgICAgICAgICAgaWYgKGlu
ZGV4ID09PSBfdGhpcy5sdW1pbmFuY2VEb3duU2FtcGxlUG9zdFByb2Nlc3Nlcy5sZW5ndGggLSAx
KSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3RMdW1pbmFuY2UgPSBfdGhpcy5sdW1pbmFuY2VQ
b3N0UHJvY2VzczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGxhc3RMdW1pbmFuY2UgPSBwcDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKGluZGV4ID09PSBfdGhpcy5sdW1pbmFu
Y2VEb3duU2FtcGxlUG9zdFByb2Nlc3Nlcy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAg
cHAub25BZnRlclJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHBpeGVsID0gc2NlbmUuZ2V0RW5naW5lKCkucmVhZFBpeGVscygwLCAwLCAxLCAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGJpdF9zaGlmdCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yNCJdKDEuMCAvICgyNTUuMCAqIDI1NS4w
ICogMjU1LjApLCAxLjAgLyAoMjU1LjAgKiAyNTUuMCksIDEuMCAvIDI1NS4wLCAxLjApOworICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5faGRyQ3VycmVudEx1bWluYW5jZSA9IChwaXhlbFswXSAq
IGJpdF9zaGlmdC54ICsgcGl4ZWxbMV0gKiBiaXRfc2hpZnQueSArIHBpeGVsWzJdICogYml0X3No
aWZ0LnogKyBwaXhlbFszXSAqIGJpdF9zaGlmdC53KSAvIDEwMC4wOworICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0
UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0
RW5naW5lKCksICJIRFJMdW1pbmFuY2VEb3duU2FtcGxlIiArIGluZGV4LCBmdW5jdGlvbiAoKSB7
IHJldHVybiBwcDsgfSwgdHJ1ZSkpOworICAgICAgICB9KTsKKyAgICB9OworICAgIC8vIENyZWF0
ZSBIRFIgcG9zdC1wcm9jZXNzCisgICAgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5
cGUuX2NyZWF0ZUhkclBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHNjZW5lLCByYXRpbykgeworICAg
ICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgZGVmaW5lcyA9IFsiI2RlZmluZSBI
RFIiXTsKKyAgICAgICAgaWYgKHRoaXMuX2hkckF1dG9FeHBvc3VyZSkgeworICAgICAgICAgICAg
ZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEFVVE9fRVhQT1NVUkUiKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLmhkclBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQcm9jZXNzIl0oIkhEUiIsICJzdGFuZGFy
ZCIsIFsiYXZlcmFnZUx1bWluYW5jZSJdLCBbInRleHR1cmVBZGRlclNhbXBsZXIiXSwgcmF0aW8s
IG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUo
KSwgZmFsc2UsIGRlZmluZXMuam9pbigiXG4iKSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9J
TlQpOworICAgICAgICB2YXIgb3V0cHV0TGltaW5hbmNlID0gMTsKKyAgICAgICAgdmFyIHRpbWUg
PSAwOworICAgICAgICB2YXIgbGFzdFRpbWUgPSAwOworICAgICAgICB0aGlzLmhkclBvc3RQcm9j
ZXNzLm9uQXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0
VGV4dHVyZUZyb21Qb3N0UHJvY2VzcygidGV4dHVyZUFkZGVyU2FtcGxlciIsIF90aGlzLl9jdXJy
ZW50RGVwdGhPZkZpZWxkU291cmNlKTsKKyAgICAgICAgICAgIHRpbWUgKz0gc2NlbmUuZ2V0RW5n
aW5lKCkuZ2V0RGVsdGFUaW1lKCk7CisgICAgICAgICAgICBpZiAob3V0cHV0TGltaW5hbmNlIDwg
MCkgeworICAgICAgICAgICAgICAgIG91dHB1dExpbWluYW5jZSA9IF90aGlzLl9oZHJDdXJyZW50
THVtaW5hbmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgdmFyIGR0ID0gKGxhc3RUaW1lIC0gdGltZSkgLyAxMDAwLjA7CisgICAgICAgICAgICAg
ICAgaWYgKF90aGlzLl9oZHJDdXJyZW50THVtaW5hbmNlIDwgb3V0cHV0TGltaW5hbmNlICsgX3Ro
aXMuaGRyRGVjcmVhc2VSYXRlICogZHQpIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0TGlt
aW5hbmNlICs9IF90aGlzLmhkckRlY3JlYXNlUmF0ZSAqIGR0OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5faGRyQ3VycmVudEx1bWluYW5jZSA+IG91
dHB1dExpbWluYW5jZSAtIF90aGlzLmhkckluY3JlYXNlUmF0ZSAqIGR0KSB7CisgICAgICAgICAg
ICAgICAgICAgIG91dHB1dExpbWluYW5jZSAtPSBfdGhpcy5oZHJJbmNyZWFzZVJhdGUgKiBkdDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIG91dHB1dExpbWluYW5jZSA9IF90aGlzLl9oZHJDdXJyZW50THVtaW5hbmNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfdGhpcy5oZHJB
dXRvRXhwb3N1cmUpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fY3VycmVudEV4cG9zdXJlID0g
X3RoaXMuX2ZpeGVkRXhwb3N1cmUgLyBvdXRwdXRMaW1pbmFuY2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRMaW1pbmFuY2UgPSBfTWF0
aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NhbGFyIl0uQ2xh
bXAob3V0cHV0TGltaW5hbmNlLCBfdGhpcy5oZHJNaW5pbXVtTHVtaW5hbmNlLCAxZTIwKTsKKyAg
ICAgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImF2ZXJhZ2VMdW1pbmFuY2UiLCBvdXRwdXRM
aW1pbmFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGFzdFRpbWUgPSB0aW1lOwor
ICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnREZXB0aE9mRmllbGRTb3VyY2UgPSBfdGhpcy5oZHJG
aW5hbFBvc3RQcm9jZXNzOworICAgICAgICB9OworICAgICAgICB0aGlzLmFkZEVmZmVjdChuZXcg
X1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2Vu
ZS5nZXRFbmdpbmUoKSwgIkhEUiIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmhkclBvc3RQ
cm9jZXNzOyB9LCB0cnVlKSk7CisgICAgfTsKKyAgICAvLyBDcmVhdGUgbGVucyBmbGFyZSBwb3N0
LXByb2Nlc3MKKyAgICBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fY3JlYXRl
TGVuc0ZsYXJlUG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAoc2NlbmUsIHJhdGlvKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMubGVuc0ZsYXJlUG9zdFByb2Nlc3MgPSBu
ZXcgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siUG9zdFByb2Nlc3MiXSgiSERSTGVuc0ZsYXJlIiwgInN0YW5kYXJkIiwgWyJzdHJlbmd0aCIs
ICJnaG9zdERpc3BlcnNhbCIsICJoYWxvV2lkdGgiLCAicmVzb2x1dGlvbiIsICJkaXN0b3J0aW9u
U3RyZW5ndGgiXSwgWyJsZW5zQ29sb3JTYW1wbGVyIl0sIHJhdGlvIC8gMiwgbnVsbCwgX01hdGVy
aWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRleHR1
cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgIiNk
ZWZpbmUgTEVOU19GTEFSRSIsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAg
ICAgdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQ
cm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBvc3RQcm9j
ZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5lKCksICJIRFJMZW5zRmxhcmUiLCBmdW5j
dGlvbiAoKSB7IHJldHVybiBfdGhpcy5sZW5zRmxhcmVQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOwor
ICAgICAgICB0aGlzLl9jcmVhdGVCbHVyUG9zdFByb2Nlc3NlcyhzY2VuZSwgcmF0aW8gLyA0LCAy
LCAibGVuc0ZsYXJlQmx1cldpZHRoIik7CisgICAgICAgIHRoaXMubGVuc0ZsYXJlQ29tcG9zZVBv
c3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIlBvc3RQcm9jZXNzIl0oIkhEUkxlbnNGbGFyZUNvbXBvc2UiLCAic3Rh
bmRhcmQiLCBbImxlbnNTdGFyTWF0cml4Il0sIFsib3RoZXJTYW1wbGVyIiwgImxlbnNEaXJ0U2Ft
cGxlciIsICJsZW5zU3RhclNhbXBsZXIiXSwgcmF0aW8sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVy
ZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0uQklMSU5F
QVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsICIjZGVmaW5lIExFTlNf
RkxBUkVfQ09NUE9TRSIsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAgICAg
dGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9j
ZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBvc3RQcm9jZXNz
UmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5lKCksICJIRFJMZW5zRmxhcmVDb21wb3NlIiwg
ZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMubGVuc0ZsYXJlQ29tcG9zZVBvc3RQcm9jZXNzOyB9
LCB0cnVlKSk7CisgICAgICAgIHZhciByZXNvbHV0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IyIl0oMCwgMCk7CisgICAgICAg
IC8vIExlbnMgZmxhcmUKKyAgICAgICAgdGhpcy5sZW5zRmxhcmVQb3N0UHJvY2Vzcy5vbkFwcGx5
ID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9t
UG9zdFByb2Nlc3MoInRleHR1cmVTYW1wbGVyIiwgX3RoaXMuX2Jsb29tRW5hYmxlZCA/IF90aGlz
LmJsdXJIUG9zdFByb2Nlc3Nlc1swXSA6IF90aGlzLm9yaWdpbmFsUG9zdFByb2Nlc3MpOworICAg
ICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoImxlbnNDb2xvclNhbXBsZXIiLCBfdGhpcy5sZW5z
Q29sb3JUZXh0dXJlKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgic3RyZW5ndGgiLCBf
dGhpcy5sZW5zRmxhcmVTdHJlbmd0aCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImdo
b3N0RGlzcGVyc2FsIiwgX3RoaXMubGVuc0ZsYXJlR2hvc3REaXNwZXJzYWwpOworICAgICAgICAg
ICAgZWZmZWN0LnNldEZsb2F0KCJoYWxvV2lkdGgiLCBfdGhpcy5sZW5zRmxhcmVIYWxvV2lkdGgp
OworICAgICAgICAgICAgLy8gU2hpZnQKKyAgICAgICAgICAgIHJlc29sdXRpb24ueCA9IF90aGlz
LmxlbnNGbGFyZVBvc3RQcm9jZXNzLndpZHRoOworICAgICAgICAgICAgcmVzb2x1dGlvbi55ID0g
X3RoaXMubGVuc0ZsYXJlUG9zdFByb2Nlc3MuaGVpZ2h0OworICAgICAgICAgICAgZWZmZWN0LnNl
dFZlY3RvcjIoInJlc29sdXRpb24iLCByZXNvbHV0aW9uKTsKKyAgICAgICAgICAgIGVmZmVjdC5z
ZXRGbG9hdCgiZGlzdG9ydGlvblN0cmVuZ3RoIiwgX3RoaXMubGVuc0ZsYXJlRGlzdG9ydGlvblN0
cmVuZ3RoKTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gQ29tcG9zZQorICAgICAgICB2YXIgc2Nh
bGVCaWFzMSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJNYXRyaXgiXS5Gcm9tVmFsdWVzKDIuMCwgMC4wLCAtMS4wLCAwLjAsIDAuMCwgMi4wLCAtMS4w
LCAwLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4wKTsKKyAgICAgICAg
dmFyIHNjYWxlQmlhczIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siTWF0cml4Il0uRnJvbVZhbHVlcygwLjUsIDAuMCwgMC41LCAwLjAsIDAuMCwgMC41
LCAwLjUsIDAuMCwgMC4wLCAwLjAsIDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjApOworICAg
ICAgICB0aGlzLmxlbnNGbGFyZUNvbXBvc2VQb3N0UHJvY2Vzcy5vbkFwcGx5ID0gZnVuY3Rpb24g
KGVmZmVjdCkgeworICAgICAgICAgICAgaWYgKCFfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWZm
ZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3MoIm90aGVyU2FtcGxlciIsIF90aGlzLl9jdXJy
ZW50RGVwdGhPZkZpZWxkU291cmNlKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJs
ZW5zRGlydFNhbXBsZXIiLCBfdGhpcy5sZW5zRmxhcmVEaXJ0VGV4dHVyZSk7CisgICAgICAgICAg
ICBlZmZlY3Quc2V0VGV4dHVyZSgibGVuc1N0YXJTYW1wbGVyIiwgX3RoaXMubGVuc1N0YXJUZXh0
dXJlKTsKKyAgICAgICAgICAgIC8vIExlbnMgc3RhcnQgcm90YXRpb24gbWF0cml4CisgICAgICAg
ICAgICB2YXIgY2FtZXJheCA9IF90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEuZ2V0Vmlld01hdHJp
eCgpLmdldFJvdygwKTsKKyAgICAgICAgICAgIHZhciBjYW1lcmF6ID0gX3RoaXMuX3NjZW5lLmFj
dGl2ZUNhbWVyYS5nZXRWaWV3TWF0cml4KCkuZ2V0Um93KDIpOworICAgICAgICAgICAgdmFyIGNh
bVJvdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZWN0b3IzIl0uRG90KGNhbWVyYXgudG9WZWN0b3IzKCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDEuMCwgMC4wLCAwLjApKSAr
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3Iz
Il0uRG90KGNhbWVyYXoudG9WZWN0b3IzKCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAuMCwgMC4wLCAxLjApKTsKKyAgICAg
ICAgICAgIGNhbVJvdCAqPSA0LjA7CisgICAgICAgICAgICB2YXIgc3RhclJvdGF0aW9uID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLkZy
b21WYWx1ZXMoTWF0aC5jb3MoY2FtUm90KSAqIDAuNSwgLU1hdGguc2luKGNhbVJvdCksIDAuMCwg
MC4wLCBNYXRoLnNpbihjYW1Sb3QpLCBNYXRoLmNvcyhjYW1Sb3QpICogMC41LCAwLjAsIDAuMCwg
MC4wLCAwLjAsIDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjApOworICAgICAgICAgICAgdmFy
IGxlbnNTdGFyTWF0cml4ID0gc2NhbGVCaWFzMi5tdWx0aXBseShzdGFyUm90YXRpb24pLm11bHRp
cGx5KHNjYWxlQmlhczEpOworICAgICAgICAgICAgZWZmZWN0LnNldE1hdHJpeCgibGVuc1N0YXJN
YXRyaXgiLCBsZW5zU3Rhck1hdHJpeCk7CisgICAgICAgICAgICBfdGhpcy5fY3VycmVudERlcHRo
T2ZGaWVsZFNvdXJjZSA9IF90aGlzLmxlbnNGbGFyZUZpbmFsUG9zdFByb2Nlc3M7CisgICAgICAg
IH07CisgICAgfTsKKyAgICAvLyBDcmVhdGUgZGVwdGgtb2YtZmllbGQgcG9zdC1wcm9jZXNzCisg
ICAgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2NyZWF0ZURlcHRoT2ZGaWVs
ZFBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHNjZW5lLCByYXRpbykgeworICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICB0aGlzLmRlcHRoT2ZGaWVsZFBvc3RQcm9jZXNzID0gbmV3IF9Q
b3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBv
c3RQcm9jZXNzIl0oIkhEUkRlcHRoT2ZGaWVsZCIsICJzdGFuZGFyZCIsIFsiZGlzdGFuY2UiXSwg
WyJvdGhlclNhbXBsZXIiLCAiZGVwdGhTYW1wbGVyIl0sIHJhdGlvLCBudWxsLCBfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVGV4dHVyZSJd
LkJJTElORUFSX1NBTVBMSU5HTU9ERSwgc2NlbmUuZ2V0RW5naW5lKCksIGZhbHNlLCAiI2RlZmlu
ZSBERVBUSF9PRl9GSUVMRCIsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAg
ICAgdGhpcy5kZXB0aE9mRmllbGRQb3N0UHJvY2Vzcy5vbkFwcGx5ID0gZnVuY3Rpb24gKGVmZmVj
dCkgeworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3MoIm90aGVy
U2FtcGxlciIsIF90aGlzLl9jdXJyZW50RGVwdGhPZkZpZWxkU291cmNlKTsKKyAgICAgICAgICAg
IGVmZmVjdC5zZXRUZXh0dXJlKCJkZXB0aFNhbXBsZXIiLCBfdGhpcy5fZ2V0RGVwdGhUZXh0dXJl
KCkpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJkaXN0YW5jZSIsIF90aGlzLmRlcHRo
T2ZGaWVsZERpc3RhbmNlKTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gQWRkIHRvIHBpcGVsaW5l
CisgICAgICAgIHRoaXMuYWRkRWZmZWN0KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGlu
ZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQ
b3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJdKHNjZW5lLmdldEVuZ2luZSgpLCAiSERSRGVwdGhPZkZp
ZWxkIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuZGVwdGhPZkZpZWxkUG9zdFByb2Nlc3M7
IH0sIHRydWUpKTsKKyAgICB9OworICAgIC8vIENyZWF0ZSBtb3Rpb24gYmx1ciBwb3N0LXByb2Nl
c3MKKyAgICBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fY3JlYXRlTW90aW9u
Qmx1clBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHNjZW5lLCByYXRpbykgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy5faXNPYmplY3RCYXNlZE1vdGlvbkJsdXIp
IHsKKyAgICAgICAgICAgIHZhciBtYiA9IG5ldyBfbW90aW9uQmx1clBvc3RQcm9jZXNzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJNb3Rpb25CbHVyUG9zdFByb2Nlc3MiXSgiSERSTW90
aW9uQmx1ciIsIHNjZW5lLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElO
R01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05F
RF9JTlQpOworICAgICAgICAgICAgbWIubW90aW9uU3RyZW5ndGggPSB0aGlzLm1vdGlvblN0cmVu
Z3RoOworICAgICAgICAgICAgbWIubW90aW9uQmx1clNhbXBsZXMgPSB0aGlzLm1vdGlvbkJsdXJT
YW1wbGVzOworICAgICAgICAgICAgdGhpcy5tb3Rpb25CbHVyUG9zdFByb2Nlc3MgPSBtYjsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMubW90aW9uQmx1clBvc3RQ
cm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X19bIlBvc3RQcm9jZXNzIl0oIkhEUk1vdGlvbkJsdXIiLCAic3RhbmRhcmQiLCBb
ImludmVyc2VWaWV3UHJvamVjdGlvbiIsICJwcmV2Vmlld1Byb2plY3Rpb24iLCAic2NyZWVuU2l6
ZSIsICJtb3Rpb25TY2FsZSIsICJtb3Rpb25TdHJlbmd0aCJdLCBbImRlcHRoU2FtcGxlciJdLCBy
YXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVu
Z2luZSgpLCBmYWxzZSwgIiNkZWZpbmUgTU9USU9OX0JMVVJcbiNkZWZpbmUgTUFYX01PVElPTl9T
QU1QTEVTICIgKyB0aGlzLm1vdGlvbkJsdXJTYW1wbGVzLnRvRml4ZWQoMSksIF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAgICAgICAgIHZhciBtb3Rpb25TY2FsZSA9IDA7Cisg
ICAgICAgICAgICB2YXIgcHJldlZpZXdQcm9qZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgICAg
ICAgICB2YXIgaW52Vmlld1Byb2plY3Rpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIHZh
ciB2aWV3UHJvamVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJNYXRyaXgiXS5JZGVudGl0eSgpOworICAgICAgICAgICAgdmFyIHNjcmVlblNp
emUgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMiJdLlplcm8oKTsKKyAgICAgICAgICAgIHRoaXMubW90aW9uQmx1clBvc3RQcm9jZXNzLm9u
QXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICAgICAgdmlld1Byb2plY3Rp
b24gPSBzY2VuZS5nZXRQcm9qZWN0aW9uTWF0cml4KCkubXVsdGlwbHkoc2NlbmUuZ2V0Vmlld01h
dHJpeCgpKTsKKyAgICAgICAgICAgICAgICB2aWV3UHJvamVjdGlvbi5pbnZlcnRUb1JlZihpbnZW
aWV3UHJvamVjdGlvbik7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldE1hdHJpeCgiaW52ZXJz
ZVZpZXdQcm9qZWN0aW9uIiwgaW52Vmlld1Byb2plY3Rpb24pOworICAgICAgICAgICAgICAgIGVm
ZmVjdC5zZXRNYXRyaXgoInByZXZWaWV3UHJvamVjdGlvbiIsIHByZXZWaWV3UHJvamVjdGlvbik7
CisgICAgICAgICAgICAgICAgcHJldlZpZXdQcm9qZWN0aW9uID0gdmlld1Byb2plY3Rpb247Cisg
ICAgICAgICAgICAgICAgc2NyZWVuU2l6ZS54ID0gX3RoaXMubW90aW9uQmx1clBvc3RQcm9jZXNz
LndpZHRoOworICAgICAgICAgICAgICAgIHNjcmVlblNpemUueSA9IF90aGlzLm1vdGlvbkJsdXJQ
b3N0UHJvY2Vzcy5oZWlnaHQ7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldFZlY3RvcjIoInNj
cmVlblNpemUiLCBzY3JlZW5TaXplKTsKKyAgICAgICAgICAgICAgICBtb3Rpb25TY2FsZSA9IHNj
ZW5lLmdldEVuZ2luZSgpLmdldEZwcygpIC8gNjAuMDsKKyAgICAgICAgICAgICAgICBlZmZlY3Qu
c2V0RmxvYXQoIm1vdGlvblNjYWxlIiwgbW90aW9uU2NhbGUpOworICAgICAgICAgICAgICAgIGVm
ZmVjdC5zZXRGbG9hdCgibW90aW9uU3RyZW5ndGgiLCBfdGhpcy5tb3Rpb25TdHJlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoImRlcHRoU2FtcGxlciIsIF90aGlzLl9n
ZXREZXB0aFRleHR1cmUoKSk7CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHRo
aXMuYWRkRWZmZWN0KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vz
c1JlbmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQb3N0UHJvY2Vzc1Jl
bmRlckVmZmVjdCJdKHNjZW5lLmdldEVuZ2luZSgpLCAiSERSTW90aW9uQmx1ciIsIGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIF90aGlzLm1vdGlvbkJsdXJQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAg
IH07CisgICAgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2dldERlcHRoVGV4
dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3NjZW5lLmdldEVuZ2luZSgp
LmdldENhcHMoKS5kcmF3QnVmZmVyc0V4dGVuc2lvbikgeworICAgICAgICAgICAgdmFyIHJlbmRl
cmVyID0gdGhpcy5fc2NlbmUuZW5hYmxlR2VvbWV0cnlCdWZmZXJSZW5kZXJlcigpOworICAgICAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyLmdldEdCdWZmZXIoKS50ZXh0dXJlc1swXTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpcy5fc2NlbmUuZW5hYmxlRGVwdGhSZW5kZXJlcigpLmdldERl
cHRoTWFwKCk7CisgICAgfTsKKyAgICBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlw
ZS5fZGlzcG9zZVBvc3RQcm9jZXNzZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5fY2FtZXJhcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFy
IGNhbWVyYSA9IHRoaXMuX2NhbWVyYXNbaV07CisgICAgICAgICAgICBpZiAodGhpcy5vcmlnaW5h
bFBvc3RQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFBvc3RQcm9jZXNz
LmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLmRv
d25TYW1wbGVYNFBvc3RQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5kb3duU2FtcGxl
WDRQb3N0UHJvY2Vzcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodGhpcy5icmlnaHRQYXNzUG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlz
LmJyaWdodFBhc3NQb3N0UHJvY2Vzcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAodGhpcy50ZXh0dXJlQWRkZXJQb3N0UHJvY2VzcykgeworICAgICAgICAg
ICAgICAgIHRoaXMudGV4dHVyZUFkZGVyUG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMudGV4dHVyZUFkZGVyRmluYWxQb3N0UHJv
Y2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZUFkZGVyRmluYWxQb3N0UHJvY2Vz
cy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy52
b2x1bWV0cmljTGlnaHRQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMudm9sdW1l
dHJpY0xpZ2h0UG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHRoaXMudm9sdW1ldHJpY0xpZ2h0U21vb3RoWFBvc3RQcm9jZXNzKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy52b2x1bWV0cmljTGlnaHRTbW9vdGhYUG9zdFByb2Nlc3MuZGlz
cG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMudm9sdW1l
dHJpY0xpZ2h0U21vb3RoWVBvc3RQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy52b2x1
bWV0cmljTGlnaHRTbW9vdGhZUG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHRoaXMudm9sdW1ldHJpY0xpZ2h0TWVyZ2VQb3N0UHJvY2Vz
KSB7CisgICAgICAgICAgICAgICAgdGhpcy52b2x1bWV0cmljTGlnaHRNZXJnZVBvc3RQcm9jZXMu
ZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMudm9s
dW1ldHJpY0xpZ2h0RmluYWxQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMudm9s
dW1ldHJpY0xpZ2h0RmluYWxQb3N0UHJvY2Vzcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodGhpcy5sZW5zRmxhcmVQb3N0UHJvY2VzcykgeworICAgICAg
ICAgICAgICAgIHRoaXMubGVuc0ZsYXJlUG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMubGVuc0ZsYXJlQ29tcG9zZVBvc3RQcm9j
ZXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5sZW5zRmxhcmVDb21wb3NlUG9zdFByb2Nlc3Mu
ZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCB0aGlzLmx1bWluYW5jZURvd25TYW1wbGVQb3N0UHJvY2Vzc2VzLmxlbmd0aDsgaisr
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5sdW1pbmFuY2VEb3duU2FtcGxlUG9zdFByb2Nlc3Nl
c1tqXS5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhp
cy5sdW1pbmFuY2VQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMubHVtaW5hbmNl
UG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHRoaXMuaGRyUG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmhkclBvc3RQ
cm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0
aGlzLmhkckZpbmFsUG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmhkckZpbmFs
UG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHRoaXMuZGVwdGhPZkZpZWxkUG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlz
LmRlcHRoT2ZGaWVsZFBvc3RQcm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0aGlzLm1vdGlvbkJsdXJQb3N0UHJvY2VzcykgeworICAgICAgICAg
ICAgICAgIHRoaXMubW90aW9uQmx1clBvc3RQcm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLmZ4YWFQb3N0UHJvY2VzcykgeworICAgICAg
ICAgICAgICAgIHRoaXMuZnhhYVBvc3RQcm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5ibHVySFBvc3RQcm9j
ZXNzZXMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICB0aGlzLmJsdXJIUG9zdFByb2Nl
c3Nlc1tqXS5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IHRoaXMuYmx1clZQb3N0UHJvY2Vzc2VzLmxlbmd0aDsgaisrKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5ibHVyVlBvc3RQcm9jZXNzZXNbal0uZGlzcG9zZShjYW1lcmEp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMub3JpZ2luYWxQb3N0UHJv
Y2VzcyA9IG51bGw7CisgICAgICAgIHRoaXMuZG93blNhbXBsZVg0UG9zdFByb2Nlc3MgPSBudWxs
OworICAgICAgICB0aGlzLmJyaWdodFBhc3NQb3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIHRo
aXMudGV4dHVyZUFkZGVyUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICB0aGlzLnRleHR1cmVB
ZGRlckZpbmFsUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICB0aGlzLnZvbHVtZXRyaWNMaWdo
dFBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgdGhpcy52b2x1bWV0cmljTGlnaHRTbW9vdGhY
UG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICB0aGlzLnZvbHVtZXRyaWNMaWdodFNtb290aFlQ
b3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIHRoaXMudm9sdW1ldHJpY0xpZ2h0TWVyZ2VQb3N0
UHJvY2VzID0gbnVsbDsKKyAgICAgICAgdGhpcy52b2x1bWV0cmljTGlnaHRGaW5hbFBvc3RQcm9j
ZXNzID0gbnVsbDsKKyAgICAgICAgdGhpcy5sZW5zRmxhcmVQb3N0UHJvY2VzcyA9IG51bGw7Cisg
ICAgICAgIHRoaXMubGVuc0ZsYXJlQ29tcG9zZVBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAg
dGhpcy5sdW1pbmFuY2VQb3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIHRoaXMuaGRyUG9zdFBy
b2Nlc3MgPSBudWxsOworICAgICAgICB0aGlzLmhkckZpbmFsUG9zdFByb2Nlc3MgPSBudWxsOwor
ICAgICAgICB0aGlzLmRlcHRoT2ZGaWVsZFBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgdGhp
cy5tb3Rpb25CbHVyUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICB0aGlzLmZ4YWFQb3N0UHJv
Y2VzcyA9IG51bGw7CisgICAgICAgIHRoaXMubHVtaW5hbmNlRG93blNhbXBsZVBvc3RQcm9jZXNz
ZXMgPSBbXTsKKyAgICAgICAgdGhpcy5ibHVySFBvc3RQcm9jZXNzZXMgPSBbXTsKKyAgICAgICAg
dGhpcy5ibHVyVlBvc3RQcm9jZXNzZXMgPSBbXTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERp
c3Bvc2Ugb2YgdGhlIHBpcGVsaW5lIGFuZCBzdG9wIGFsbCBwb3N0IHByb2Nlc3NlcworICAgICAq
LworICAgIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3N0UHJvY2Vzc2VzKCk7CisgICAgICAg
IHRoaXMuX3NjZW5lLnBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyLmRldGFjaENhbWVy
YXNGcm9tUmVuZGVyUGlwZWxpbmUodGhpcy5fbmFtZSwgdGhpcy5fY2FtZXJhcyk7CisgICAgICAg
IF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoqCisg
ICAgICogU2VyaWFsaXplIHRoZSByZW5kZXJpbmcgcGlwZWxpbmUgKFVzZWQgd2hlbiBleHBvcnRp
bmcpCisgICAgICogQHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgb2JqZWN0CisgICAgICovCisgICAg
U3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24g
KCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlNlcmlh
bGl6ZSh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMuc291cmNlTGlnaHQpIHsKKyAgICAgICAgICAg
IHNlcmlhbGl6YXRpb25PYmplY3Quc291cmNlTGlnaHRJZCA9IHRoaXMuc291cmNlTGlnaHQuaWQ7
CisgICAgICAgIH0KKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21UeXBlID0gIlN0
YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUiOworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9i
amVjdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlIHRoZSBzZXJpYWxpemVkIHBpcGVs
aW5lCisgICAgICogQHBhcmFtIHNvdXJjZSBTb3VyY2UgcGlwZWxpbmUuCisgICAgICogQHBhcmFt
IHNjZW5lIFRoZSBzY2VuZSB0byBsb2FkIHRoZSBwaXBlbGluZSB0by4KKyAgICAgKiBAcGFyYW0g
cm9vdFVybCBUaGUgVVJMIG9mIHRoZSBzZXJpYWxpemVkIHBpcGVsaW5lLgorICAgICAqIEByZXR1
cm5zIEFuIGluc3RhbnRpYXRlZCBwaXBlbGluZSBmcm9tIHRoZSBzZXJpYWxpemVkIG9iamVjdC4K
KyAgICAgKi8KKyAgICBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLlBhcnNlID0gZnVuY3Rpb24g
KHNvdXJjZSwgc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgdmFyIHAgPSBfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5Q
YXJzZShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZShz
b3VyY2UuX25hbWUsIHNjZW5lLCBzb3VyY2UuX3JhdGlvKTsgfSwgc291cmNlLCBzY2VuZSwgcm9v
dFVybCk7CisgICAgICAgIGlmIChzb3VyY2Uuc291cmNlTGlnaHRJZCkgeworICAgICAgICAgICAg
cC5zb3VyY2VMaWdodCA9IHNjZW5lLmdldExpZ2h0QnlJRChzb3VyY2Uuc291cmNlTGlnaHRJZCk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBM
dW1pbmFuY2Ugc3RlcHMKKyAgICAgKi8KKyAgICBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLkx1
bWluYW5jZVN0ZXBzID0gNjsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVu
ZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiYnJpZ2h0VGhyZXNob2xkIiwgdm9pZCAwKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90
eXBlLCAiYmx1cldpZHRoIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0
YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiaG9yaXpvbnRhbEJsdXIiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGlu
ZS5wcm90b3R5cGUsICJleHBvc3VyZSIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJd
KSgibGVuc1RleHR1cmUiKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90
eXBlLCAibGVuc1RleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
U3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJ2b2x1bWV0cmljTGlnaHRDb2Vm
ZmljaWVudCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZFJl
bmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgInZvbHVtZXRyaWNMaWdodFBvd2VyIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLCAidm9sdW1ldHJpY0xpZ2h0Qmx1clNjYWxlIiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAi
aGRyTWluaW11bUx1bWluYW5jZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBd
LCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImhkckRlY3JlYXNlUmF0ZSIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZFJlbmRlcmluZ1Bp
cGVsaW5lLnByb3RvdHlwZSwgImhkckluY3JlYXNlUmF0ZSIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImhk
ckF1dG9FeHBvc3VyZSIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgibGVuc0Nv
bG9yVGV4dHVyZSIpCisgICAgXSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUs
ICJsZW5zQ29sb3JUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAibGVuc0ZsYXJlU3RyZW5ndGgi
LCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVj
b3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3RhbmRhcmRSZW5kZXJpbmdQ
aXBlbGluZS5wcm90b3R5cGUsICJsZW5zRmxhcmVHaG9zdERpc3BlcnNhbCIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3Rv
dHlwZSwgImxlbnNGbGFyZUhhbG9XaWR0aCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkK
KyAgICBdLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImxlbnNGbGFyZURp
c3RvcnRpb25TdHJlbmd0aCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBT
dGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImxlbnNGbGFyZUJsdXJXaWR0aCIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCJsZW5zU3RhclRleHR1cmUiKQor
ICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAibGVuc1N0YXJUZXh0
dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoImxlbnNGbGFyZURpcnRU
ZXh0dXJlIikKKyAgICBdLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImxl
bnNGbGFyZURpcnRUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiZGVwdGhPZkZpZWxkRGlzdGFu
Y2UiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3RhbmRhcmRSZW5kZXJp
bmdQaXBlbGluZS5wcm90b3R5cGUsICJkZXB0aE9mRmllbGRCbHVyV2lkdGgiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90
b3R5cGUsICJtb3Rpb25TdHJlbmd0aCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJvYmplY3RCYXNlZE1vdGlv
bkJsdXIiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVy
aW5nUGlwZWxpbmUucHJvdG90eXBlLCAiX3JhdGlvIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiQmxvb21F
bmFibGVkIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZFJlbmRl
cmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgIkRlcHRoT2ZGaWVsZEVuYWJsZWQiLCBudWxsKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90
eXBlLCAiTGVuc0ZsYXJlRW5hYmxlZCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJIRFJFbmFibGVkIiwgbnVs
bCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5l
LnByb3RvdHlwZSwgIlZMU0VuYWJsZWQiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiTW90aW9uQmx1ckVuYWJs
ZWQiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5n
UGlwZWxpbmUucHJvdG90eXBlLCAiZnhhYUVuYWJsZWQiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAidm9sdW1l
dHJpY0xpZ2h0U3RlcHNDb3VudCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
U3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJtb3Rpb25CbHVyU2FtcGxlcyIs
IG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUsICJzYW1wbGVzIiwgbnVsbCk7CisgICAgcmV0dXJuIFN0YW5kYXJkUmVu
ZGVyaW5nUGlwZWxpbmU7Cit9KF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9j
ZXNzUmVuZGVyUGlwZWxpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUG9zdFByb2Nl
c3NSZW5kZXJQaXBlbGluZSJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTJfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5TdGFu
ZGFyZFJlbmRlcmluZ1BpcGVsaW5lIl0gPSBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lOworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL2luZGV4
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL2luZGV4LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0LCBQb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lLCBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlciwgUG9zdFByb2Nl
c3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVudCwgRGVmYXVsdFJlbmRlcmluZ1Bp
cGVsaW5lLCBMZW5zUmVuZGVyaW5nUGlwZWxpbmUsIFNTQU8yUmVuZGVyaW5nUGlwZWxpbmUsIFNT
QU9SZW5kZXJpbmdQaXBlbGluZSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZSAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BpcGVsaW5lc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9QaXBl
bGluZXMvaW5kZXggKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9QaXBlbGluZXMv
aW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfUGlwZWxpbmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkRlZmF1bHRSZW5kZXJpbmdQaXBlbGluZSJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJMZW5zUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QaXBlbGlu
ZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTGVuc1JlbmRlcmluZ1BpcGVs
aW5lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNTQU8yUmVuZGVyaW5nUGlwZWxpbmUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9QaXBlbGluZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siU1NBTzJSZW5kZXJpbmdQaXBlbGluZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTU0FPUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QaXBlbGluZXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU1NBT1JlbmRlcmluZ1BpcGVsaW5l
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9QaXBlbGluZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZSJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2Vzc1JlbmRlckVm
ZmVjdCAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQcm9jZXNzUmVuZGVy
RWZmZWN0LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2Vz
c1JlbmRlclBpcGVsaW5lICovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFBy
b2Nlc3NSZW5kZXJQaXBlbGluZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9zdFByb2Nlc3NSZW5kZXJQaXBl
bGluZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQb3N0UHJvY2Vzc1JlbmRlclBpcGVs
aW5lIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNzUmVuZGVy
UGlwZWxpbmVNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyICovICIuL1Bv
c3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFn
ZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFn
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5l
TWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxp
bmVNYW5hZ2VyU2NlbmVDb21wb25lbnQgKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGlu
ZS9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50LnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21w
b25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFu
YWdlclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvc3RQcm9j
ZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKworCisKKwor
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUv
cG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bv
c3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9zdFByb2Nlc3NSZW5kZXJF
ZmZlY3QgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3NS
ZW5kZXJFZmZlY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy90b29s
cyAqLyAiLi9NaXNjL3Rvb2xzLnRzIik7CisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIGEgc2V0
IG9mIG9uZSBvciBtb3JlIHBvc3QgcHJvY2Vzc2VzIGluIEJhYnlsb24uCisgKiBBIHBvc3QgcHJv
Y2VzcyBjYW4gYmUgdXNlZCB0byBhcHBseSBhIHNoYWRlciB0byBhIHRleHR1cmUgYWZ0ZXIgaXQg
aXMgcmVuZGVyZWQuCisgKiBAZXhhbXBsZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNzcmVuZGVycGlwZWxpbmUKKyAqLwordmFyIFBvc3RQcm9j
ZXNzUmVuZGVyRWZmZWN0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgor
ICAgICAqIEluc3RhbnRpYXRlcyBhIHBvc3QgcHJvY2VzcyByZW5kZXIgZWZmZWN0LgorICAgICAq
IEEgcG9zdCBwcm9jZXNzIGNhbiBiZSB1c2VkIHRvIGFwcGx5IGEgc2hhZGVyIHRvIGEgdGV4dHVy
ZSBhZnRlciBpdCBpcyByZW5kZXJlZC4KKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUg
dGhlIGVmZmVjdCBpcyB0aWVkIHRvCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhl
IGVmZmVjdAorICAgICAqIEBwYXJhbSBnZXRQb3N0UHJvY2Vzc2VzIEEgZnVuY3Rpb24gdGhhdCBy
ZXR1cm5zIGEgc2V0IG9mIHBvc3QgcHJvY2Vzc2VzIHdoaWNoIHRoZSBlZmZlY3Qgd2lsbCBydW4g
aW4gb3JkZXIgdG8gYmUgcnVuLgorICAgICAqIEBwYXJhbSBzaW5nbGVJbnN0YW5jZSBGYWxzZSBp
ZiB0aGlzIHBvc3QgcHJvY2VzcyBjYW4gYmUgcnVuIG9uIG11bHRpcGxlIGNhbWVyYXMuIChkZWZh
dWx0OiB0cnVlKQorICAgICAqLworICAgIGZ1bmN0aW9uIFBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0
KGVuZ2luZSwgbmFtZSwgZ2V0UG9zdFByb2Nlc3Nlcywgc2luZ2xlSW5zdGFuY2UpIHsKKyAgICAg
ICAgdGhpcy5fbmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMuX3NpbmdsZUluc3RhbmNlID0gc2lu
Z2xlSW5zdGFuY2UgfHwgdHJ1ZTsKKyAgICAgICAgdGhpcy5fZ2V0UG9zdFByb2Nlc3NlcyA9IGdl
dFBvc3RQcm9jZXNzZXM7CisgICAgICAgIHRoaXMuX2NhbWVyYXMgPSB7fTsKKyAgICAgICAgdGhp
cy5faW5kaWNlc0ZvckNhbWVyYSA9IHt9OworICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2VzID0g
e307CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3N0UHJvY2Vzc1JlbmRlckVm
ZmVjdC5wcm90b3R5cGUsICJpc1N1cHBvcnRlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IENoZWNrcyBpZiBhbGwgdGhlIHBvc3QgcHJvY2Vzc2VzIGluIHRoZSBlZmZlY3QgYXJlIHN1cHBv
cnRlZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgZm9yICh2YXIgaW5kZXggaW4gdGhpcy5fcG9zdFByb2Nlc3NlcykgeworICAgICAgICAgICAg
ICAgIGlmICh0aGlzLl9wb3N0UHJvY2Vzc2VzLmhhc093blByb3BlcnR5KGluZGV4KSkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgcHBzID0gdGhpcy5fcG9zdFByb2Nlc3Nlc1tpbmRleF07Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHBwSW5kZXggPSAwOyBwcEluZGV4IDwgcHBzLmxl
bmd0aDsgcHBJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBwc1twcElu
ZGV4XS5pc1N1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50
IHN0YXRlIG9mIHRoZSBlZmZlY3QKKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgUG9zdFBy
b2Nlc3NSZW5kZXJFZmZlY3QucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyB0aGUgZWZmZWN0IG9uIGNhbWVyYXMKKyAgICAg
KiBAcGFyYW0gY2FtZXJhcyBUaGUgY2FtZXJhIHRvIGF0dGFjaCB0by4KKyAgICAgKiBAaGlkZGVu
CisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QucHJvdG90eXBlLl9hdHRhY2hD
YW1lcmFzID0gZnVuY3Rpb24gKGNhbWVyYXMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgdmFyIGNhbWVyYUtleTsKKyAgICAgICAgdmFyIGNhbXMgPSBfTWlzY190b29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLk1ha2VBcnJheShjYW1lcmFzIHx8
IHRoaXMuX2NhbWVyYXMpOworICAgICAgICBpZiAoIWNhbXMpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbXMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSBjYW1zW2ldOworICAgICAgICAgICAgdmFy
IGNhbWVyYU5hbWUgPSBjYW1lcmEubmFtZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zaW5nbGVJ
bnN0YW5jZSkgeworICAgICAgICAgICAgICAgIGNhbWVyYUtleSA9IDA7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjYW1lcmFLZXkgPSBjYW1lcmFO
YW1lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0aGlzLl9wb3N0UHJvY2Vzc2Vz
W2NhbWVyYUtleV0pIHsKKyAgICAgICAgICAgICAgICB2YXIgcG9zdFByb2Nlc3MgPSB0aGlzLl9n
ZXRQb3N0UHJvY2Vzc2VzKCk7CisgICAgICAgICAgICAgICAgaWYgKHBvc3RQcm9jZXNzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzZXNbY2FtZXJhS2V5XSA9IEFycmF5
LmlzQXJyYXkocG9zdFByb2Nlc3MpID8gcG9zdFByb2Nlc3MgOiBbcG9zdFByb2Nlc3NdOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdGhpcy5faW5k
aWNlc0ZvckNhbWVyYVtjYW1lcmFOYW1lXSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2luZGlj
ZXNGb3JDYW1lcmFbY2FtZXJhTmFtZV0gPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX3Bvc3RQcm9jZXNzZXNbY2FtZXJhS2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChwb3N0UHJv
Y2VzcykgeworICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGNhbWVyYS5hdHRhY2hQb3N0UHJv
Y2Vzcyhwb3N0UHJvY2Vzcyk7CisgICAgICAgICAgICAgICAgX3RoaXMuX2luZGljZXNGb3JDYW1l
cmFbY2FtZXJhTmFtZV0ucHVzaChpbmRleCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGlmICghdGhpcy5fY2FtZXJhc1tjYW1lcmFOYW1lXSkgeworICAgICAgICAgICAgICAgIHRoaXMu
X2NhbWVyYXNbY2FtZXJhTmFtZV0gPSBjYW1lcmE7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKgorICAgICAqIERldGF0Y2hlcyB0aGUgZWZmZWN0IG9uIGNhbWVyYXMK
KyAgICAgKiBAcGFyYW0gY2FtZXJhcyBUaGUgY2FtZXJhIHRvIGRldGF0Y2ggZnJvbS4KKyAgICAg
KiBAaGlkZGVuCisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QucHJvdG90eXBl
Ll9kZXRhY2hDYW1lcmFzID0gZnVuY3Rpb24gKGNhbWVyYXMpIHsKKyAgICAgICAgdmFyIGNhbXMg
PSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLk1ha2VB
cnJheShjYW1lcmFzIHx8IHRoaXMuX2NhbWVyYXMpOworICAgICAgICBpZiAoIWNhbXMpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNhbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSBjYW1zW2ldOwor
ICAgICAgICAgICAgdmFyIGNhbWVyYU5hbWUgPSBjYW1lcmEubmFtZTsKKyAgICAgICAgICAgIHZh
ciBwb3N0UHJvY2Vzc2VzID0gdGhpcy5fcG9zdFByb2Nlc3Nlc1t0aGlzLl9zaW5nbGVJbnN0YW5j
ZSA/IDAgOiBjYW1lcmFOYW1lXTsKKyAgICAgICAgICAgIGlmIChwb3N0UHJvY2Vzc2VzKSB7Cisg
ICAgICAgICAgICAgICAgcG9zdFByb2Nlc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChwb3N0UHJvY2Vz
cykgeworICAgICAgICAgICAgICAgICAgICBjYW1lcmEuZGV0YWNoUG9zdFByb2Nlc3MocG9zdFBy
b2Nlc3MpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHRoaXMuX2NhbWVyYXNbY2FtZXJhTmFtZV0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9j
YW1lcmFzW2NhbWVyYU5hbWVdID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogRW5hYmxlcyB0aGUgZWZmZWN0IG9uIGdpdmVuIGNhbWVyYXMK
KyAgICAgKiBAcGFyYW0gY2FtZXJhcyBUaGUgY2FtZXJhIHRvIGVuYWJsZS4KKyAgICAgKiBAaGlk
ZGVuCisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QucHJvdG90eXBlLl9lbmFi
bGUgPSBmdW5jdGlvbiAoY2FtZXJhcykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICB2YXIgY2FtcyA9IF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlRvb2xzIl0uTWFrZUFycmF5KGNhbWVyYXMgfHwgdGhpcy5fY2FtZXJhcyk7CisgICAgICAgIGlm
ICghY2FtcykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgY2Ftcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGNhbWVy
YSA9IGNhbXNbaV07CisgICAgICAgICAgICB2YXIgY2FtZXJhTmFtZSA9IGNhbWVyYS5uYW1lOwor
ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9pbmRpY2VzRm9yQ2FtZXJhW2Nh
bWVyYU5hbWVdLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbWVyYS5fcG9z
dFByb2Nlc3Nlc1t0aGlzLl9pbmRpY2VzRm9yQ2FtZXJhW2NhbWVyYU5hbWVdW2pdXSA9PT0gdW5k
ZWZpbmVkIHx8IGNhbWVyYS5fcG9zdFByb2Nlc3Nlc1t0aGlzLl9pbmRpY2VzRm9yQ2FtZXJhW2Nh
bWVyYU5hbWVdW2pdXSA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3N0
UHJvY2Vzc2VzW3RoaXMuX3NpbmdsZUluc3RhbmNlID8gMCA6IGNhbWVyYU5hbWVdLmZvckVhY2go
ZnVuY3Rpb24gKHBvc3RQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW1zW2ld
LmF0dGFjaFBvc3RQcm9jZXNzKHBvc3RQcm9jZXNzLCBfdGhpcy5faW5kaWNlc0ZvckNhbWVyYVtj
YW1lcmFOYW1lXVtqXSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGlz
YWJsZXMgdGhlIGVmZmVjdCBvbiB0aGUgZ2l2ZW4gY2FtZXJhcworICAgICAqIEBwYXJhbSBjYW1l
cmFzIFRoZSBjYW1lcmEgdG8gZGlzYWJsZS4KKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAg
UG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QucHJvdG90eXBlLl9kaXNhYmxlID0gZnVuY3Rpb24gKGNh
bWVyYXMpIHsKKyAgICAgICAgdmFyIGNhbXMgPSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJUb29scyJdLk1ha2VBcnJheShjYW1lcmFzIHx8IHRoaXMuX2NhbWVyYXMp
OworICAgICAgICBpZiAoIWNhbXMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIHZhciBjYW1lcmEgPSBjYW1zW2ldOworICAgICAgICAgICAgdmFyIGNhbWVyYU5hbWUgPSBj
YW1lcmEubmFtZTsKKyAgICAgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzZXNbdGhpcy5fc2luZ2xl
SW5zdGFuY2UgPyAwIDogY2FtZXJhTmFtZV0uZm9yRWFjaChmdW5jdGlvbiAocG9zdFByb2Nlc3Mp
IHsKKyAgICAgICAgICAgICAgICBjYW1lcmEuZGV0YWNoUG9zdFByb2Nlc3MocG9zdFByb2Nlc3Mp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdl
dHMgYSBsaXN0IG9mIHRoZSBwb3N0IHByb2Nlc3NlcyBjb250YWluZWQgaW4gdGhlIGVmZmVjdC4K
KyAgICAgKiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gZ2V0IHRoZSBwb3N0IHByb2Nlc3Nl
cyBvbi4KKyAgICAgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiB0aGUgcG9zdCBwcm9jZXNzZXMgaW4g
dGhlIGVmZmVjdC4KKyAgICAgKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdC5wcm90b3R5
cGUuZ2V0UG9zdFByb2Nlc3NlcyA9IGZ1bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgaWYgKHRo
aXMuX3NpbmdsZUluc3RhbmNlKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zdFByb2Nl
c3Nlc1swXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICghY2Ft
ZXJhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fcG9zdFByb2Nlc3Nlc1tjYW1lcmEubmFtZV07CisgICAgICAg
IH0KKyAgICB9OworICAgIHJldHVybiBQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdDsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9w
b3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZS50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBvc3RQcm9jZXNz
UmVuZGVyUGlwZWxpbmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9z
dFByb2Nlc3NSZW5kZXJQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUG9zdFByb2Nlc3NS
ZW5kZXJQaXBlbGluZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVj
b3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKworCisKKy8qKgorICogUG9zdFBy
b2Nlc3NSZW5kZXJQaXBlbGluZQorICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hv
d190by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNzcmVuZGVycGlwZWxpbmUKKyAqLwordmFyIFBvc3RQ
cm9jZXNzUmVuZGVyUGlwZWxpbmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
LyoqCisgICAgICogSW5pdGlhbGl6ZXMgYSBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lCisgICAg
ICogQHBhcmFtIGVuZ2luZSBlbmdpbmUgdG8gYWRkIHRoZSBwaXBlbGluZSB0bworICAgICAqIEBw
YXJhbSBuYW1lIG5hbWUgb2YgdGhlIHBpcGVsaW5lCisgICAgICovCisgICAgZnVuY3Rpb24gUG9z
dFByb2Nlc3NSZW5kZXJQaXBlbGluZShlbmdpbmUsIG5hbWUpIHsKKyAgICAgICAgdGhpcy5lbmdp
bmUgPSBlbmdpbmU7CisgICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOworICAgICAgICB0aGlzLl9y
ZW5kZXJFZmZlY3RzID0ge307CisgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdHNGb3JJc29sYXRl
ZFBhc3MgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fY2FtZXJhcyA9IFtdOworICAgIH0K
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZS5wcm90
b3R5cGUsICJuYW1lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBwaXBlbGluZSBu
YW1lCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9uYW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIHRoZSBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgIlBvc3RQcm9jZXNzUmVuZGVyUGlw
ZWxpbmUiCisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZS5wcm90b3R5cGUu
Z2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlBvc3RQcm9jZXNz
UmVuZGVyUGlwZWxpbmUiOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvc3RQ
cm9jZXNzUmVuZGVyUGlwZWxpbmUucHJvdG90eXBlLCAiaXNTdXBwb3J0ZWQiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBJZiBhbGwgdGhlIHJlbmRlciBlZmZlY3RzIGluIHRoZSBwaXBlbGlu
ZSBhcmUgc3VwcG9ydGVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGZvciAodmFyIHJlbmRlckVmZmVjdE5hbWUgaW4gdGhpcy5fcmVuZGVyRWZm
ZWN0cykgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZW5kZXJFZmZlY3RzLmhhc093blBy
b3BlcnR5KHJlbmRlckVmZmVjdE5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhp
cy5fcmVuZGVyRWZmZWN0c1tyZW5kZXJFZmZlY3ROYW1lXS5pc1N1cHBvcnRlZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEFkZHMgYW4gZWZmZWN0IHRvIHRo
ZSBwaXBlbGluZQorICAgICAqIEBwYXJhbSByZW5kZXJFZmZlY3QgdGhlIGVmZmVjdCB0byBhZGQK
KyAgICAgKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLnByb3RvdHlwZS5hZGRFZmZl
Y3QgPSBmdW5jdGlvbiAocmVuZGVyRWZmZWN0KSB7CisgICAgICAgIHRoaXMuX3JlbmRlckVmZmVj
dHNbcmVuZGVyRWZmZWN0Ll9uYW1lXSA9IHJlbmRlckVmZmVjdDsKKyAgICB9OworICAgIC8vIHBy
aXZhdGUKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUu
cHJvdG90eXBlLl9yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgIH07CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLnByb3RvdHlwZS5fZW5hYmxlRWZm
ZWN0ID0gZnVuY3Rpb24gKHJlbmRlckVmZmVjdE5hbWUsIGNhbWVyYXMpIHsKKyAgICAgICAgdmFy
IHJlbmRlckVmZmVjdHMgPSB0aGlzLl9yZW5kZXJFZmZlY3RzW3JlbmRlckVmZmVjdE5hbWVdOwor
ICAgICAgICBpZiAoIXJlbmRlckVmZmVjdHMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICByZW5kZXJFZmZlY3RzLl9lbmFibGUoX01pc2NfdG9vbHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVG9vbHMiXS5NYWtlQXJyYXkoY2FtZXJhcyB8fCB0aGlzLl9j
YW1lcmFzKSk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBvc3RQcm9jZXNzUmVu
ZGVyUGlwZWxpbmUucHJvdG90eXBlLl9kaXNhYmxlRWZmZWN0ID0gZnVuY3Rpb24gKHJlbmRlckVm
ZmVjdE5hbWUsIGNhbWVyYXMpIHsKKyAgICAgICAgdmFyIHJlbmRlckVmZmVjdHMgPSB0aGlzLl9y
ZW5kZXJFZmZlY3RzW3JlbmRlckVmZmVjdE5hbWVdOworICAgICAgICBpZiAoIXJlbmRlckVmZmVj
dHMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZW5kZXJFZmZl
Y3RzLl9kaXNhYmxlKF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRv
b2xzIl0uTWFrZUFycmF5KGNhbWVyYXMgfHwgdGhpcy5fY2FtZXJhcykpOworICAgIH07CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLnByb3RvdHlwZS5f
YXR0YWNoQ2FtZXJhcyA9IGZ1bmN0aW9uIChjYW1lcmFzLCB1bmlxdWUpIHsKKyAgICAgICAgdmFy
IGNhbXMgPSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb29scyJd
Lk1ha2VBcnJheShjYW1lcmFzIHx8IHRoaXMuX2NhbWVyYXMpOworICAgICAgICBpZiAoIWNhbXMp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5kaWNlc1Rv
RGVsZXRlID0gW107CisgICAgICAgIHZhciBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2Ft
cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGNhbWVyYSA9IGNhbXNbaV07CisgICAg
ICAgICAgICB2YXIgY2FtZXJhTmFtZSA9IGNhbWVyYS5uYW1lOworICAgICAgICAgICAgaWYgKHRo
aXMuX2NhbWVyYXMuaW5kZXhPZihjYW1lcmEpID09PSAtMSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX2NhbWVyYXNbY2FtZXJhTmFtZV0gPSBjYW1lcmE7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmICh1bmlxdWUpIHsKKyAgICAgICAgICAgICAgICBpbmRpY2VzVG9EZWxldGUu
cHVzaChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgaW5kaWNlc1RvRGVsZXRlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBjYW1lcmFzLnNw
bGljZShpbmRpY2VzVG9EZWxldGVbaV0sIDEpOworICAgICAgICB9CisgICAgICAgIGZvciAodmFy
IHJlbmRlckVmZmVjdE5hbWUgaW4gdGhpcy5fcmVuZGVyRWZmZWN0cykgeworICAgICAgICAgICAg
aWYgKHRoaXMuX3JlbmRlckVmZmVjdHMuaGFzT3duUHJvcGVydHkocmVuZGVyRWZmZWN0TmFtZSkp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJFZmZlY3RzW3JlbmRlckVmZmVjdE5hbWVd
Ll9hdHRhY2hDYW1lcmFzKGNhbXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUucHJvdG90
eXBlLl9kZXRhY2hDYW1lcmFzID0gZnVuY3Rpb24gKGNhbWVyYXMpIHsKKyAgICAgICAgdmFyIGNh
bXMgPSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb29scyJdLk1h
a2VBcnJheShjYW1lcmFzIHx8IHRoaXMuX2NhbWVyYXMpOworICAgICAgICBpZiAoIWNhbXMpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciByZW5kZXJF
ZmZlY3ROYW1lIGluIHRoaXMuX3JlbmRlckVmZmVjdHMpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9yZW5kZXJFZmZlY3RzLmhhc093blByb3BlcnR5KHJlbmRlckVmZmVjdE5hbWUpKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fcmVuZGVyRWZmZWN0c1tyZW5kZXJFZmZlY3ROYW1lXS5fZGV0YWNo
Q2FtZXJhcyhjYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNhbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMuX2NhbWVy
YXMuc3BsaWNlKHRoaXMuX2NhbWVyYXMuaW5kZXhPZihjYW1zW2ldKSwgMSk7CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGlu
ZS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgcmVu
ZGVyRWZmZWN0TmFtZSBpbiB0aGlzLl9yZW5kZXJFZmZlY3RzKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fcmVuZGVyRWZmZWN0cy5oYXNPd25Qcm9wZXJ0eShyZW5kZXJFZmZlY3ROYW1lKSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdHNbcmVuZGVyRWZmZWN0TmFtZV0uX3Vw
ZGF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5fY2FtZXJhcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGNhbWVy
YU5hbWUgPSB0aGlzLl9jYW1lcmFzW2ldLm5hbWU7CisgICAgICAgICAgICBpZiAodGhpcy5fcmVu
ZGVyRWZmZWN0c0Zvcklzb2xhdGVkUGFzc1tjYW1lcmFOYW1lXSkgeworICAgICAgICAgICAgICAg
IHRoaXMuX3JlbmRlckVmZmVjdHNGb3JJc29sYXRlZFBhc3NbY2FtZXJhTmFtZV0uX3VwZGF0ZSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5fcmVuZGVyRWZmZWN0cyA9IHt9OworICAgICAgICB0aGlzLl9y
ZW5kZXJFZmZlY3RzRm9ySXNvbGF0ZWRQYXNzID0gbmV3IEFycmF5KCk7CisgICAgfTsKKyAgICBQ
b3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLnByb3RvdHlwZS5fZW5hYmxlTVNBQU9uRmlyc3RQb3N0
UHJvY2VzcyA9IGZ1bmN0aW9uIChzYW1wbGVDb3VudCkgeworICAgICAgICBpZiAodGhpcy5lbmdp
bmUud2ViR0xWZXJzaW9uID09PSAxKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gU2V0IHNhbXBsZXMgb2YgdGhlIHZlcnkgZmlyc3QgcG9zdCBwcm9j
ZXNzIHRvIDQgdG8gZW5hYmxlIG5hdGl2ZSBhbnRpLWFsaWFzaW5nIGluIGJyb3dzZXJzIHRoYXQg
c3VwcG9ydCB3ZWJHTCAyLjAgKFNlZTogaHR0cHM6Ly9naXRodWIuY29tL0JhYnlsb25KUy9CYWJ5
bG9uLmpzL2lzc3Vlcy8zNzU0KQorICAgICAgICB2YXIgZWZmZWN0S2V5cyA9IE9iamVjdC5rZXlz
KHRoaXMuX3JlbmRlckVmZmVjdHMpOworICAgICAgICBpZiAoZWZmZWN0S2V5cy5sZW5ndGggPiAw
KSB7CisgICAgICAgICAgICB2YXIgcG9zdFByb2Nlc3NlcyA9IHRoaXMuX3JlbmRlckVmZmVjdHNb
ZWZmZWN0S2V5c1swXV0uZ2V0UG9zdFByb2Nlc3NlcygpOworICAgICAgICAgICAgaWYgKHBvc3RQ
cm9jZXNzZXMpIHsKKyAgICAgICAgICAgICAgICBwb3N0UHJvY2Vzc2VzWzBdLnNhbXBsZXMgPSBz
YW1wbGVDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIG9mIHRoZSBwaXBlbGluZQorICAg
ICAqLworICAgIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgY2hpbGRyZW4K
KyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgUG9zdFByb2Nlc3NSZW5kZXJQaXBl
bGluZS5wcm90b3R5cGUsICJfbmFtZSIsIHZvaWQgMCk7CisgICAgcmV0dXJuIFBvc3RQcm9jZXNz
UmVuZGVyUGlwZWxpbmU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQ
cm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvUmVu
ZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9zdFByb2Nlc3NSZW5k
ZXJQaXBlbGluZU1hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
UG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBv
c3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyOyB9KTsKKy8qKgorICogUG9zdFByb2Nlc3NS
ZW5kZXJQaXBlbGluZU1hbmFnZXIgY2xhc3MKKyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9wb3N0cHJvY2Vzc3JlbmRlcnBpcGVsaW5lCisgKi8KK3Zh
ciBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyBhIFBvc3RQcm9jZXNzUmVuZGVy
UGlwZWxpbmVNYW5hZ2VyCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hv
d190by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNzcmVuZGVycGlwZWxpbmUKKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlcigpIHsKKyAgICAgICAgdGhp
cy5fcmVuZGVyUGlwZWxpbmVzID0ge307CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5wcm90b3R5cGUsICJzdXBwb3J0ZWRQ
aXBlbGluZXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIHN1
cHBvcnRlZCByZW5kZXIgcGlwZWxpbmVzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICAgICAgICAgIGZvciAo
dmFyIHJlbmRlclBpcGVsaW5lTmFtZSBpbiB0aGlzLl9yZW5kZXJQaXBlbGluZXMpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyUGlwZWxpbmVzLmhhc093blByb3BlcnR5KHJlbmRl
clBpcGVsaW5lTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBpcGVsaW5lID0gdGhp
cy5fcmVuZGVyUGlwZWxpbmVzW3JlbmRlclBpcGVsaW5lTmFtZV07CisgICAgICAgICAgICAgICAg
ICAgIGlmIChwaXBlbGluZS5pc1N1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnB1c2gocGlwZWxpbmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQWRkcyBhIHBpcGVsaW5lIHRvIHRoZSBtYW5h
Z2VyCisgICAgICogQHBhcmFtIHJlbmRlclBpcGVsaW5lIFRoZSBwaXBlbGluZSB0byBhZGQKKyAg
ICAgKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5wcm90b3R5cGUuYWRk
UGlwZWxpbmUgPSBmdW5jdGlvbiAocmVuZGVyUGlwZWxpbmUpIHsKKyAgICAgICAgdGhpcy5fcmVu
ZGVyUGlwZWxpbmVzW3JlbmRlclBpcGVsaW5lLl9uYW1lXSA9IHJlbmRlclBpcGVsaW5lOworICAg
IH07CisgICAgLyoqCisgICAgICogQXR0YWNoZXMgYSBjYW1lcmEgdG8gdGhlIHBpcGVsaW5lCisg
ICAgICogQHBhcmFtIHJlbmRlclBpcGVsaW5lTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGlwZWxpbmUg
dG8gYXR0YWNoIHRvCisgICAgICogQHBhcmFtIGNhbWVyYXMgdGhlIGNhbWVyYSB0byBhdHRhY2gK
KyAgICAgKiBAcGFyYW0gdW5pcXVlIGlmIHRoZSBjYW1lcmEgY2FuIGJlIGF0dGFjaGVkIG11bHRp
cGxlIHRpbWVzIHRvIHRoZSBwaXBlbGluZQorICAgICAqLworICAgIFBvc3RQcm9jZXNzUmVuZGVy
UGlwZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5hdHRhY2hDYW1lcmFzVG9SZW5kZXJQaXBlbGluZSA9
IGZ1bmN0aW9uIChyZW5kZXJQaXBlbGluZU5hbWUsIGNhbWVyYXMsIHVuaXF1ZSkgeworICAgICAg
ICBpZiAodW5pcXVlID09PSB2b2lkIDApIHsgdW5pcXVlID0gZmFsc2U7IH0KKyAgICAgICAgdmFy
IHJlbmRlclBpcGVsaW5lID0gdGhpcy5fcmVuZGVyUGlwZWxpbmVzW3JlbmRlclBpcGVsaW5lTmFt
ZV07CisgICAgICAgIGlmICghcmVuZGVyUGlwZWxpbmUpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICByZW5kZXJQaXBlbGluZS5fYXR0YWNoQ2FtZXJhcyhjYW1lcmFz
LCB1bmlxdWUpOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0YWNoZXMgYSBjYW1lcmEgZnJv
bSB0aGUgcGlwZWxpbmUKKyAgICAgKiBAcGFyYW0gcmVuZGVyUGlwZWxpbmVOYW1lIFRoZSBuYW1l
IG9mIHRoZSBwaXBlbGluZSB0byBkZXRhY2ggZnJvbQorICAgICAqIEBwYXJhbSBjYW1lcmFzIHRo
ZSBjYW1lcmEgdG8gZGV0YWNoCisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGlu
ZU1hbmFnZXIucHJvdG90eXBlLmRldGFjaENhbWVyYXNGcm9tUmVuZGVyUGlwZWxpbmUgPSBmdW5j
dGlvbiAocmVuZGVyUGlwZWxpbmVOYW1lLCBjYW1lcmFzKSB7CisgICAgICAgIHZhciByZW5kZXJQ
aXBlbGluZSA9IHRoaXMuX3JlbmRlclBpcGVsaW5lc1tyZW5kZXJQaXBlbGluZU5hbWVdOworICAg
ICAgICBpZiAoIXJlbmRlclBpcGVsaW5lKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgcmVuZGVyUGlwZWxpbmUuX2RldGFjaENhbWVyYXMoY2FtZXJhcyk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBFbmFibGVzIGFuIGVmZmVjdCBieSBuYW1lIG9uIGEgcGlwZWxp
bmUKKyAgICAgKiBAcGFyYW0gcmVuZGVyUGlwZWxpbmVOYW1lIHRoZSBuYW1lIG9mIHRoZSBwaXBl
bGluZSB0byBlbmFibGUgdGhlIGVmZmVjdCBpbgorICAgICAqIEBwYXJhbSByZW5kZXJFZmZlY3RO
YW1lIHRoZSBuYW1lIG9mIHRoZSBlZmZlY3QgdG8gZW5hYmxlCisgICAgICogQHBhcmFtIGNhbWVy
YXMgdGhlIGNhbWVyYXMgdGhhdCB0aGUgZWZmZWN0IHNob3VsZCBiZSBlbmFibGVkIG9uCisgICAg
ICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIucHJvdG90eXBlLmVuYWJs
ZUVmZmVjdEluUGlwZWxpbmUgPSBmdW5jdGlvbiAocmVuZGVyUGlwZWxpbmVOYW1lLCByZW5kZXJF
ZmZlY3ROYW1lLCBjYW1lcmFzKSB7CisgICAgICAgIHZhciByZW5kZXJQaXBlbGluZSA9IHRoaXMu
X3JlbmRlclBpcGVsaW5lc1tyZW5kZXJQaXBlbGluZU5hbWVdOworICAgICAgICBpZiAoIXJlbmRl
clBpcGVsaW5lKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVu
ZGVyUGlwZWxpbmUuX2VuYWJsZUVmZmVjdChyZW5kZXJFZmZlY3ROYW1lLCBjYW1lcmFzKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIERpc2FibGVzIGFuIGVmZmVjdCBieSBuYW1lIG9uIGEgcGlw
ZWxpbmUKKyAgICAgKiBAcGFyYW0gcmVuZGVyUGlwZWxpbmVOYW1lIHRoZSBuYW1lIG9mIHRoZSBw
aXBlbGluZSB0byBkaXNhYmxlIHRoZSBlZmZlY3QgaW4KKyAgICAgKiBAcGFyYW0gcmVuZGVyRWZm
ZWN0TmFtZSB0aGUgbmFtZSBvZiB0aGUgZWZmZWN0IHRvIGRpc2FibGUKKyAgICAgKiBAcGFyYW0g
Y2FtZXJhcyB0aGUgY2FtZXJhcyB0aGF0IHRoZSBlZmZlY3Qgc2hvdWxkIGJlIGRpc2FibGVkIG9u
CisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIucHJvdG90eXBl
LmRpc2FibGVFZmZlY3RJblBpcGVsaW5lID0gZnVuY3Rpb24gKHJlbmRlclBpcGVsaW5lTmFtZSwg
cmVuZGVyRWZmZWN0TmFtZSwgY2FtZXJhcykgeworICAgICAgICB2YXIgcmVuZGVyUGlwZWxpbmUg
PSB0aGlzLl9yZW5kZXJQaXBlbGluZXNbcmVuZGVyUGlwZWxpbmVOYW1lXTsKKyAgICAgICAgaWYg
KCFyZW5kZXJQaXBlbGluZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHJlbmRlclBpcGVsaW5lLl9kaXNhYmxlRWZmZWN0KHJlbmRlckVmZmVjdE5hbWUsIGNhbWVy
YXMpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgYWxsIGNv
bnRhaW5lZCByZW5kZXIgcGlwZWxpbmVzIGFuZCBkaXNwb3NlcyBvZiBhbnkgbm9uIHN1cHBvcnRl
ZCBwaXBlbGluZXMKKyAgICAgKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdl
ci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciByZW5k
ZXJQaXBlbGluZU5hbWUgaW4gdGhpcy5fcmVuZGVyUGlwZWxpbmVzKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fcmVuZGVyUGlwZWxpbmVzLmhhc093blByb3BlcnR5KHJlbmRlclBpcGVsaW5lTmFt
ZSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLl9yZW5kZXJQaXBlbGlu
ZXNbcmVuZGVyUGlwZWxpbmVOYW1lXTsKKyAgICAgICAgICAgICAgICBpZiAoIXBpcGVsaW5lLmlz
U3VwcG9ydGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lLmRpc3Bvc2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3JlbmRlclBpcGVsaW5lc1tyZW5kZXJQaXBl
bGluZU5hbWVdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgcGlwZWxpbmUuX3VwZGF0ZSgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5wcm90b3R5cGUuX3JlYnVpbGQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFyIHJlbmRlclBpcGVsaW5lTmFtZSBpbiB0aGlz
Ll9yZW5kZXJQaXBlbGluZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZW5kZXJQaXBlbGlu
ZXMuaGFzT3duUHJvcGVydHkocmVuZGVyUGlwZWxpbmVOYW1lKSkgeworICAgICAgICAgICAgICAg
IHZhciBwaXBlbGluZSA9IHRoaXMuX3JlbmRlclBpcGVsaW5lc1tyZW5kZXJQaXBlbGluZU5hbWVd
OworICAgICAgICAgICAgICAgIHBpcGVsaW5lLl9yZWJ1aWxkKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIG9mIHRoZSBtYW5hZ2Vy
IGFuZCBwaXBlbGluZXMKKyAgICAgKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFu
YWdlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIg
cmVuZGVyUGlwZWxpbmVOYW1lIGluIHRoaXMuX3JlbmRlclBpcGVsaW5lcykgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX3JlbmRlclBpcGVsaW5lcy5oYXNPd25Qcm9wZXJ0eShyZW5kZXJQaXBlbGlu
ZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgdmFyIHBpcGVsaW5lID0gdGhpcy5fcmVuZGVyUGlw
ZWxpbmVzW3JlbmRlclBpcGVsaW5lTmFtZV07CisgICAgICAgICAgICAgICAgcGlwZWxpbmUuZGlz
cG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gUG9z
dFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQ
aXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bv
c3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQ
b3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50ICovCisvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5h
Z2VyU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvc3RQcm9jZXNzUmVuZGVy
UGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc2NlbmVDb21wb25lbnQgKi8gIi4vc2NlbmVDb21wb25l
bnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3NSZW5kZXJQaXBl
bGluZU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIgKi8gIi4vUG9zdFBy
b2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc2NlbmUgKi8gIi4vc2Nl
bmUudHMiKTsKKworCisKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShfc2NlbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siU2NlbmUiXS5wcm90b3R5cGUsICJwb3N0UHJvY2Vzc1JlbmRlclBp
cGVsaW5lTWFuYWdlciIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0
aGlzLl9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlcikgeworICAgICAgICAgICAgLy8g
UmVnaXN0ZXIgdGhlIEcgQnVmZmVyIGNvbXBvbmVudCB0byB0aGUgc2NlbmUuCisgICAgICAgICAg
ICB2YXIgY29tcG9uZW50ID0gdGhpcy5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVf
UE9TVFBST0NFU1NSRU5ERVJQSVBFTElORU1BTkFHRVIpOworICAgICAgICAgICAgaWYgKCFjb21w
b25lbnQpIHsKKyAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBuZXcgUG9zdFByb2Nlc3NSZW5k
ZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVudCh0aGlzKTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9hZGRDb21wb25lbnQoY29tcG9uZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyID0gbmV3IF9wb3N0UHJvY2Vz
c1JlbmRlclBpcGVsaW5lTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb3N0
UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlciJdKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMuX3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyOworICAgIH0sCisgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRydWUKK30pOworLyoqCisgKiBE
ZWZpbmVzIHRoZSBSZW5kZXIgUGlwZWxpbmUgc2NlbmUgY29tcG9uZW50IHJlc3BvbnNpYmxlIHRv
IHJlbmRlcmluZyBwaXBlbGluZXMKKyAqLwordmFyIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVN
YW5hZ2VyU2NlbmVDb21wb25lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50IGZvciB0
aGUgZ2l2ZW4gc2NlbmUKKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lcyB0aGUgc2NlbmUgdG8g
cmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBpbgorICAgICAqLworICAgIGZ1bmN0aW9uIFBvc3RQcm9j
ZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQoc2NlbmUpIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFRoZSBjb21wb25lbnQgbmFtZSBoZWxwZnVsbCB0byBpZGVudGlmeSB0
aGUgY29tcG9uZW50IGluIHRoZSBsaXN0IG9mIHNjZW5lIGNvbXBvbmVudHMuCisgICAgICAgICAq
LworICAgICAgICB0aGlzLm5hbWUgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX1BPU1RQUk9DRVNTUkVO
REVSUElQRUxJTkVNQU5BR0VSOworICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7CisgICAgfQor
ICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyB0aGUgY29tcG9uZW50IGluIGEgZ2l2ZW4gc2NlbmUK
KyAgICAgKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9u
ZW50LnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2Vu
ZS5fZ2F0aGVyUmVuZGVyVGFyZ2V0c1N0YWdlLnJlZ2lzdGVyU3RlcChfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5T
VEVQX0dBVEhFUlJFTkRFUlRBUkdFVFNfUE9TVFBST0NFU1NSRU5ERVJQSVBFTElORU1BTkFHRVIs
IHRoaXMsIHRoaXMuX2dhdGhlclJlbmRlclRhcmdldHMpOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmVidWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4gY2Fz
ZSBvZgorICAgICAqIGNvbnRleHQgbG9zdCBmb3IgaW5zdGFuY2UuCisgICAgICovCisgICAgUG9z
dFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVi
dWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuc2NlbmUuX3Bvc3RQcm9jZXNz
UmVuZGVyUGlwZWxpbmVNYW5hZ2VyKSB7CisgICAgICAgICAgICB0aGlzLnNjZW5lLl9wb3N0UHJv
Y2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgY29tcG9uZW50IGFuZCB0aGUgYXNzb2NpYXRl
ZCByZXNzb3VyY2VzCisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFn
ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgaWYgKHRoaXMuc2NlbmUuX3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyKSB7Cisg
ICAgICAgICAgICB0aGlzLnNjZW5lLl9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5k
aXNwb3NlKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxp
bmVNYW5hZ2VyU2NlbmVDb21wb25lbnQucHJvdG90eXBlLl9nYXRoZXJSZW5kZXJUYXJnZXRzID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5zY2VuZS5fcG9zdFByb2Nlc3NSZW5kZXJQ
aXBlbGluZU1hbmFnZXIpIHsKKyAgICAgICAgICAgIHRoaXMuc2NlbmUuX3Bvc3RQcm9jZXNzUmVu
ZGVyUGlwZWxpbmVNYW5hZ2VyLnVwZGF0ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1
cm4gUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVudDsKK30oKSk7
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9hbmFnbHlwaFBvc3RQ
cm9jZXNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvYW5hZ2x5cGhQb3N0UHJvY2Vzcy50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuYWdseXBoUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5hZ2x5cGhQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gQW5hZ2x5cGhQb3N0UHJvY2VzczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bv
c3RQcm9jZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
U2hhZGVyc19hbmFnbHlwaF9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9hbmFnbHlwaC5mcmFnbWVudCAqLyAi
Li9TaGFkZXJzL2FuYWdseXBoLmZyYWdtZW50LnRzIik7CisKKworCisvKioKKyAqIFBvc3Rwcm9j
ZXNzIHVzZWQgdG8gZ2VuZXJhdGUgYW5hZ2x5cGhpYyByZW5kZXJpbmcKKyAqLwordmFyIEFuYWds
eXBoUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oQW5hZ2x5cGhQ
b3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEFuYWds
eXBoUG9zdFByb2Nlc3MKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHBvc3Rwcm9jZXNzIG5h
bWUKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIGNyZWF0aW9uIG9wdGlvbnMgb3IgdGFy
Z2V0IHJhdGlvIHNjYWxlCisgICAgICogQHBhcmFtIHJpZ0NhbWVyYXMgZGVmaW5lcyBjYW1lcmFz
IHVzaW5nIHRoaXMgcG9zdHByb2Nlc3MKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmlu
ZXMgcmVxdWlyZWQgc2FtcGxpbmcgbW9kZSAoQkFCWUxPTi5UZXh0dXJlLk5FQVJFU1RfU0FNUExJ
TkdNT0RFIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGVuZ2luZSBkZWZpbmVzIGhvc3Rpbmcg
ZW5naW5lCisgICAgICogQHBhcmFtIHJldXNhYmxlIGRlZmluZXMgaWYgdGhlIHBvc3Rwcm9jZXNz
IHdpbGwgYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzIHBlciBmcmFtZQorICAgICAqLworICAgIGZ1
bmN0aW9uIEFuYWdseXBoUG9zdFByb2Nlc3MobmFtZSwgb3B0aW9ucywgcmlnQ2FtZXJhcywgc2Ft
cGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIG5hbWUsICJhbmFnbHlwaCIsIG51bGwsIFsibGVmdFNhbXBsZXIiXSwgb3B0
aW9ucywgcmlnQ2FtZXJhc1sxXSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB8fCB0
aGlzOworICAgICAgICBfdGhpcy5fcGFzc2VkUHJvY2VzcyA9IHJpZ0NhbWVyYXNbMF0uX3JpZ1Bv
c3RQcm9jZXNzOworICAgICAgICBfdGhpcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24g
KGVmZmVjdCkgeworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3Mo
ImxlZnRTYW1wbGVyIiwgX3RoaXMuX3Bhc3NlZFByb2Nlc3MpOworICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICByZXR1cm4gQW5hZ2x5cGhQb3N0UHJvY2VzczsK
K30oX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNz
Il0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2JsYWNrQW5k
V2hpdGVQb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvYmxhY2tBbmRX
aGl0ZVBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBCbGFja0FuZFdo
aXRlUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmxh
Y2tBbmRXaGl0ZVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCbGFja0FuZFdoaXRl
UG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAi
Li4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQ
cm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfYmxhY2tBbmRX
aGl0ZV9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vU2hhZGVycy9ibGFja0FuZFdoaXRlLmZyYWdtZW50ICovICIuL1NoYWRl
cnMvYmxhY2tBbmRXaGl0ZS5mcmFnbWVudC50cyIpOworCisKKworLyoqCisgKiBQb3N0IHByb2Nl
c3MgdXNlZCB0byByZW5kZXIgaW4gYmxhY2sgYW5kIHdoaXRlCisgKi8KK3ZhciBCbGFja0FuZFdo
aXRlUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oQmxhY2tBbmRX
aGl0ZVBvc3RQcm9jZXNzLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBibGFj
ayBhbmQgd2hpdGUgcG9zdCBwcm9jZXNzCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNzZXMjYmxhY2stYW5kLXdoaXRlCisg
ICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0g
b3B0aW9ucyBUaGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlvIHRvIGRvd25zaXplIHRvIGJl
Zm9yZSBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzLgorICAgICAqIEBwYXJhbSBjYW1lcmEgVGhl
IGNhbWVyYSB0byBhcHBseSB0aGUgcmVuZGVyIHBhc3MgdG8uCisgICAgICogQHBhcmFtIHNhbXBs
aW5nTW9kZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBw
YXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgd2hpY2gg
dGhlIHBvc3QgcHJvY2VzcyB3aWxsIGJlIGFwcGxpZWQuIChkZWZhdWx0OiBjdXJyZW50IGVuZ2lu
ZSkKKyAgICAgKiBAcGFyYW0gcmV1c2FibGUgSWYgdGhlIHBvc3QgcHJvY2VzcyBjYW4gYmUgcmV1
c2VkIG9uIHRoZSBzYW1lIGZyYW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgZnVu
Y3Rpb24gQmxhY2tBbmRXaGl0ZVBvc3RQcm9jZXNzKG5hbWUsIG9wdGlvbnMsIGNhbWVyYSwgc2Ft
cGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIG5hbWUsICJibGFja0FuZFdoaXRlIiwgWyJkZWdyZWUiXSwgbnVsbCwgb3B0
aW9ucywgY2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUpIHx8IHRoaXM7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBMaW5lYXIgYWJvdXQgdG8gY29udmVydCBoZSByZXN1bHQg
dG8gYmxhY2sgYW5kIHdoaXRlIChkZWZhdWx0OiAxKQorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMuZGVncmVlID0gMTsKKyAgICAgICAgX3RoaXMub25BcHBseU9ic2VydmFibGUuYWRkKGZ1bmN0
aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiZGVncmVlIiwgX3Ro
aXMuZGVncmVlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9Cisg
ICAgcmV0dXJuIEJsYWNrQW5kV2hpdGVQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2Jsb29tRWZmZWN0LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2Vz
L2Jsb29tRWZmZWN0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJsb29tRWZmZWN0ICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJsb29tRWZmZWN0IiwgZnVuY3Rpb24oKSB7IHJldHVy
biBCbG9vbUVmZmVjdDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJF
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJFZmZl
Y3QgKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlckVm
ZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9leHRyYWN0SGlnaGxpZ2h0c1Bv
c3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2V4dHJhY3RIaWdobGlnaHRzUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nl
cy9leHRyYWN0SGlnaGxpZ2h0c1Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2JsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ibHVyUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nl
cy9ibHVyUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmxvb21N
ZXJnZVBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL2Jsb29tTWVyZ2VQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2Vz
L2Jsb29tTWVyZ2VQb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3Rl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJl
cy90ZXh0dXJlLnRzIik7CisKKworCisKKworCisKKy8qKgorICogVGhlIGJsb29tIGVmZmVjdCBz
cHJlYWRzIGJyaWdodCBhcmVhcyBvZiBhbiBpbWFnZSB0byBzaW11bGF0ZSBhcnRpZmFjdHMgc2Vl
biBpbiBjYW1lcmFzCisgKi8KK3ZhciBCbG9vbUVmZmVjdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShCbG9vbUVmZmVjdCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgbmV3IGluc3RhbmNlIG9mIEBzZWUgQmxvb21FZmZlY3QKKyAgICAgKiBAcGFyYW0gc2NlbmUg
VGhlIHNjZW5lIHRoZSBlZmZlY3QgYmVsb25ncyB0by4KKyAgICAgKiBAcGFyYW0gYmxvb21TY2Fs
ZSBUaGUgcmF0aW8gb2YgdGhlIGJsdXIgdGV4dHVyZSB0byB0aGUgaW5wdXQgdGV4dHVyZSB0aGF0
IHNob3VsZCBiZSB1c2VkIHRvIGNvbXB1dGUgdGhlIGJsb29tLgorICAgICAqIEBwYXJhbSBibG9v
bUtlcm5lbCBUaGUgc2l6ZSBvZiB0aGUga2VybmVsIHRvIGJlIHVzZWQgd2hlbiBhcHBseWluZyB0
aGUgYmx1ci4KKyAgICAgKiBAcGFyYW0gYmxvb21XZWlnaHQgVGhlIHRoZSBzdHJlbmd0aCBvZiBi
bG9vbS4KKyAgICAgKiBAcGFyYW0gcGlwZWxpbmVUZXh0dXJlVHlwZSBUaGUgdHlwZSBvZiB0ZXh0
dXJlIHRvIGJlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIHRoZSBwb3N0IHByb2Nlc3NpbmcuCisgICAg
ICogQHBhcmFtIGJsb2NrQ29tcGlsYXRpb24gSWYgY29tcGlsYXRpb24gb2YgdGhlIHNoYWRlciBz
aG91bGQgbm90IGJlIGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLiBUaGUgdXBkYXRlRWZmZWN0IG1l
dGhvZCBjYW4gYmUgdXNlZCB0byBjb21waWxlIHRoZSBzaGFkZXIgYXQgYSBsYXRlciB0aW1lLiAo
ZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgZnVuY3Rpb24gQmxvb21FZmZlY3Qoc2NlbmUs
IGJsb29tU2NhbGUsIGJsb29tV2VpZ2h0LCBibG9vbUtlcm5lbCwgcGlwZWxpbmVUZXh0dXJlVHlw
ZSwgYmxvY2tDb21waWxhdGlvbikgeworICAgICAgICBpZiAocGlwZWxpbmVUZXh0dXJlVHlwZSA9
PT0gdm9pZCAwKSB7IHBpcGVsaW5lVGV4dHVyZVR5cGUgPSAwOyB9CisgICAgICAgIGlmIChibG9j
a0NvbXBpbGF0aW9uID09PSB2b2lkIDApIHsgYmxvY2tDb21waWxhdGlvbiA9IGZhbHNlOyB9Cisg
ICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjZW5lLmdldEVuZ2luZSgpLCAi
Ymxvb20iLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2VmZmVjdHM7
CisgICAgICAgIH0sIHRydWUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmJsb29tU2NhbGUgPSBi
bG9vbVNjYWxlOworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbiBJbnRlcm5hbAorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2VmZmVjdHMgPSBbXTsKKyAgICAgICAgX3RoaXMuX2Rv
d25zY2FsZSA9IG5ldyBfZXh0cmFjdEhpZ2hsaWdodHNQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJFeHRyYWN0SGlnaGxpZ2h0c1Bvc3RQcm9jZXNzIl0oImhpZ2hsaWdo
dHMiLCAxLjAsIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5n
ZXRFbmdpbmUoKSwgZmFsc2UsIHBpcGVsaW5lVGV4dHVyZVR5cGUsIGJsb2NrQ29tcGlsYXRpb24p
OworICAgICAgICBfdGhpcy5fYmx1clggPSBuZXcgX2JsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJCbHVyUG9zdFByb2Nlc3MiXSgiaG9yaXpvbnRhbCBibHVyIiwg
bmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0
b3IyIl0oMS4wLCAwKSwgMTAuMCwgYmxvb21TY2FsZSwgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJl
c190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRleHR1cmUiXS5CSUxJTkVB
Ul9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgcGlwZWxpbmVUZXh0dXJl
VHlwZSwgdW5kZWZpbmVkLCBibG9ja0NvbXBpbGF0aW9uKTsKKyAgICAgICAgX3RoaXMuX2JsdXJY
LmFsd2F5c0ZvcmNlUE9UID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX2JsdXJYLmF1dG9DbGVhciA9
IGZhbHNlOworICAgICAgICBfdGhpcy5fYmx1clkgPSBuZXcgX2JsdXJQb3N0UHJvY2Vzc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJCbHVyUG9zdFByb2Nlc3MiXSgidmVydGljYWwgYmx1
ciIsIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
VmVjdG9yMiJdKDAsIDEuMCksIDEwLjAsIGJsb29tU2NhbGUsIG51bGwsIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJUZXh0dXJlIl0uQklM
SU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsIHBpcGVsaW5lVGV4
dHVyZVR5cGUsIHVuZGVmaW5lZCwgYmxvY2tDb21waWxhdGlvbik7CisgICAgICAgIF90aGlzLl9i
bHVyWS5hbHdheXNGb3JjZVBPVCA9IHRydWU7CisgICAgICAgIF90aGlzLl9ibHVyWS5hdXRvQ2xl
YXIgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMua2VybmVsID0gYmxvb21LZXJuZWw7CisgICAgICAg
IF90aGlzLl9lZmZlY3RzID0gW190aGlzLl9kb3duc2NhbGUsIF90aGlzLl9ibHVyWCwgX3RoaXMu
X2JsdXJZXTsKKyAgICAgICAgX3RoaXMuX21lcmdlID0gbmV3IF9ibG9vbU1lcmdlUG9zdFByb2Nl
c3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQmxvb21NZXJnZVBvc3RQcm9jZXNzIl0o
ImJsb29tTWVyZ2UiLCBfdGhpcy5fZG93bnNjYWxlLCBfdGhpcy5fYmx1clksIGJsb29tV2VpZ2h0
LCBibG9vbVNjYWxlLCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgc2Nl
bmUuZ2V0RW5naW5lKCksIGZhbHNlLCBwaXBlbGluZVRleHR1cmVUeXBlLCBibG9ja0NvbXBpbGF0
aW9uKTsKKyAgICAgICAgX3RoaXMuX21lcmdlLmF1dG9DbGVhciA9IGZhbHNlOworICAgICAgICBf
dGhpcy5fZWZmZWN0cy5wdXNoKF90aGlzLl9tZXJnZSk7CisgICAgICAgIHJldHVybiBfdGhpczsK
KyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJsb29tRWZmZWN0LnByb3RvdHlwZSwg
InRocmVzaG9sZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBsdW1pbmFuY2UgdGhy
ZXNob2xkIHRvIGZpbmQgYnJpZ2h0IGFyZWFzIG9mIHRoZSBpbWFnZSB0byBibG9vbS4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2Rvd25zY2FsZS50aHJlc2hvbGQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9kb3duc2NhbGUudGhyZXNob2xkID0gdmFs
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCbG9vbUVm
ZmVjdC5wcm90b3R5cGUsICJ3ZWlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
c3RyZW5ndGggb2YgdGhlIGJsb29tLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWVyZ2Uud2VpZ2h0OworICAgICAgICB9
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbWVy
Z2Uud2VpZ2h0ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShCbG9vbUVmZmVjdC5wcm90b3R5cGUsICJrZXJuZWwiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIGJsb29tIGJsdXIga2VybmVsLCBy
ZWxhdGl2ZSB0byB0aGUgZmluYWwgb3V0cHV0IHNpemUKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JsdXJYLmtlcm5lbCAv
IHRoaXMuYmxvb21TY2FsZTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2JsdXJYLmtlcm5lbCA9IHZhbHVlICogdGhpcy5ibG9v
bVNjYWxlOworICAgICAgICAgICAgdGhpcy5fYmx1clkua2VybmVsID0gdmFsdWUgKiB0aGlzLmJs
b29tU2NhbGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIGVh
Y2ggb2YgdGhlIGludGVybmFsIGVmZmVjdHMgZm9yIGEgZ2l2ZW4gY2FtZXJhLgorICAgICAqIEBw
YXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0byBkaXNwb3NlIHRoZSBlZmZlY3Qgb24uCisgICAgICov
CisgICAgQmxvb21FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2VFZmZlY3RzID0gZnVuY3Rpb24gKGNh
bWVyYSkgeworICAgICAgICBmb3IgKHZhciBlZmZlY3RJbmRleCA9IDA7IGVmZmVjdEluZGV4IDwg
dGhpcy5fZWZmZWN0cy5sZW5ndGg7IGVmZmVjdEluZGV4KyspIHsKKyAgICAgICAgICAgIHRoaXMu
X2VmZmVjdHNbZWZmZWN0SW5kZXhdLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogQGhpZGRlbiBJbnRlcm5hbAorICAgICAqLworICAgIEJsb29tRWZm
ZWN0LnByb3RvdHlwZS5fdXBkYXRlRWZmZWN0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9y
ICh2YXIgZWZmZWN0SW5kZXggPSAwOyBlZmZlY3RJbmRleCA8IHRoaXMuX2VmZmVjdHMubGVuZ3Ro
OyBlZmZlY3RJbmRleCsrKSB7CisgICAgICAgICAgICB0aGlzLl9lZmZlY3RzW2VmZmVjdEluZGV4
XS51cGRhdGVFZmZlY3QoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogSW50
ZXJuYWwKKyAgICAgKiBAcmV0dXJucyBpZiBhbGwgdGhlIGNvbnRhaW5lZCBwb3N0IHByb2Nlc3Nl
cyBhcmUgcmVhZHkuCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIEJsb29tRWZmZWN0LnBy
b3RvdHlwZS5faXNSZWFkeSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgZWZmZWN0
SW5kZXggPSAwOyBlZmZlY3RJbmRleCA8IHRoaXMuX2VmZmVjdHMubGVuZ3RoOyBlZmZlY3RJbmRl
eCsrKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2VmZmVjdHNbZWZmZWN0SW5kZXhdLmlzUmVh
ZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIHJldHVybiBCbG9vbUVm
ZmVjdDsKK30oX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJF
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZl
Y3QiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvYmxvb21N
ZXJnZVBvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9ibG9vbU1lcmdlUG9z
dFByb2Nlc3MudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJsb29tTWVyZ2VQb3N0UHJvY2Vz
cyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCbG9vbU1lcmdlUG9zdFBy
b2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJsb29tTWVyZ2VQb3N0UHJvY2VzczsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRz
ICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNfYmxvb21NZXJnZV9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9ibG9vbU1lcmdlLmZyYWdtZW50
ICovICIuL1NoYWRlcnMvYmxvb21NZXJnZS5mcmFnbWVudC50cyIpOworCisKKworCisvKioKKyAq
IFRoZSBCbG9vbU1lcmdlUG9zdFByb2Nlc3MgbWVyZ2VzIGJsdXJyZWQgaW1hZ2VzIHdpdGggdGhl
IG9yaWdpbmFsIGJhc2VkIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGNpcmNsZSBvZiBjb25mdXNpb24u
CisgKi8KK3ZhciBCbG9vbU1lcmdlUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19l
eHRlbmRzIl0oQmxvb21NZXJnZVBvc3RQcm9jZXNzLCBfc3VwZXIpOworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgQHNlZSBCbG9vbU1lcmdlUG9zdFByb2Nlc3MKKyAg
ICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZWZmZWN0LgorICAgICAqIEBwYXJhbSBv
cmlnaW5hbEZyb21JbnB1dCBQb3N0IHByb2Nlc3Mgd2hpY2gncyBpbnB1dCB3aWxsIGJlIHVzZWQg
Zm9yIHRoZSBtZXJnZS4KKyAgICAgKiBAcGFyYW0gYmx1cnJlZCBCbHVycmVkIGhpZ2hsaWdodHMg
cG9zdCBwcm9jZXNzIHdoaWNoJ3Mgb3V0cHV0IHdpbGwgYmUgdXNlZC4KKyAgICAgKiBAcGFyYW0g
d2VpZ2h0IFdlaWdodCBvZiB0aGUgYmxvb20gdG8gYmUgYWRkZWQgdG8gdGhlIG9yaWdpbmFsIGlu
cHV0LgorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQgcmF0
aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisgICAg
ICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4K
KyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVzZWQg
d2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChkZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBlbmdp
bmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9zdCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4gKGRl
ZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAgICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUgcG9z
dCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24gdGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBmYWxz
ZSkKKyAgICAgKiBAcGFyYW0gdGV4dHVyZVR5cGUgVHlwZSBvZiB0ZXh0dXJlcyB1c2VkIHdoZW4g
cGVyZm9ybWluZyB0aGUgcG9zdCBwcm9jZXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0g
YmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxhdGlvbiBvZiB0aGUgc2hhZGVyIHNob3VsZCBub3Qg
YmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSB1cGRhdGVFZmZlY3QgbWV0aG9kIGNhbiBi
ZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRlciBhdCBhIGxhdGVyIHRpbWUuIChkZWZhdWx0OiBm
YWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBCbG9vbU1lcmdlUG9zdFByb2Nlc3MobmFtZSwg
b3JpZ2luYWxGcm9tSW5wdXQsIGJsdXJyZWQsIAorICAgIC8qKiBXZWlnaHQgb2YgdGhlIGJsb29t
IHRvIGJlIGFkZGVkIHRvIHRoZSBvcmlnaW5hbCBpbnB1dC4gKi8KKyAgICB3ZWlnaHQsIG9wdGlv
bnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlLCB0ZXh0dXJlVHlwZSwg
YmxvY2tDb21waWxhdGlvbikgeworICAgICAgICBpZiAodGV4dHVyZVR5cGUgPT09IHZvaWQgMCkg
eyB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7IH0KKyAgICAgICAg
aWYgKGJsb2NrQ29tcGlsYXRpb24gPT09IHZvaWQgMCkgeyBibG9ja0NvbXBpbGF0aW9uID0gZmFs
c2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgImJsb29t
TWVyZ2UiLCBbImJsb29tV2VpZ2h0Il0sIFsiY2lyY2xlT2ZDb25mdXNpb25TYW1wbGVyIiwgImJs
dXJTdGVwMCIsICJibHVyU3RlcDEiLCAiYmx1clN0ZXAyIiwgImJsb29tQmx1ciJdLCBvcHRpb25z
LCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgbnVsbCwgdGV4dHVyZVR5
cGUsIHVuZGVmaW5lZCwgbnVsbCwgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMud2VpZ2h0
ID0gd2VpZ2h0OworICAgICAgICBfdGhpcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24g
KGVmZmVjdCkgeworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3Mo
InRleHR1cmVTYW1wbGVyIiwgb3JpZ2luYWxGcm9tSW5wdXQpOworICAgICAgICAgICAgZWZmZWN0
LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3NPdXRwdXQoImJsb29tQmx1ciIsIGJsdXJyZWQpOwor
ICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJibG9vbVdlaWdodCIsIF90aGlzLndlaWdodCk7
CisgICAgICAgIH0pOworICAgICAgICBpZiAoIWJsb2NrQ29tcGlsYXRpb24pIHsKKyAgICAgICAg
ICAgIF90aGlzLnVwZGF0ZUVmZmVjdCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgcmV0dXJuIEJsb29tTWVyZ2VQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2Vzcy50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL1Bvc3RQcm9jZXNzZXMvYmx1clBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBC
bHVyUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmx1
clBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCbHVyUG9zdFByb2Nlc3M7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3Rz
bGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vz
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlh
bHMvVGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfU2hhZGVyc19rZXJuZWxCbHVyX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2tlcm5lbEJsdXIu
ZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9rZXJuZWxCbHVyLmZyYWdtZW50LnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfa2VybmVsQmx1cl92ZXJ0ZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMva2Vy
bmVsQmx1ci52ZXJ0ZXggKi8gIi4vU2hhZGVycy9rZXJuZWxCbHVyLnZlcnRleC50cyIpOworCisK
KworCisKKworLyoqCisgKiBUaGUgQmx1ciBQb3N0IFByb2Nlc3Mgd2hpY2ggYmx1cnMgYW4gaW1h
Z2UgYmFzZWQgb24gYSBrZXJuZWwgYW5kIGRpcmVjdGlvbi4KKyAqIENhbiBiZSB1c2VkIHR3aWNl
IGluIHggYW5kIHkgZGlyZWN0aW9ucyB0byBwZXJmb3JtIGEgZ3Vhc3NpYW4gYmx1ciBpbiB0d28g
cGFzc2VzLgorICovCit2YXIgQmx1clBvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZXh0ZW5kcyJdKEJsdXJQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IGluc3RhbmNlIEJsdXJQb3N0UHJvY2VzcworICAgICAqIEBwYXJhbSBuYW1lIFRo
ZSBuYW1lIG9mIHRoZSBlZmZlY3QuCisgICAgICogQHBhcmFtIGRpcmVjdGlvbiBUaGUgZGlyZWN0
aW9uIGluIHdoaWNoIHRvIGJsdXIgdGhlIGltYWdlLgorICAgICAqIEBwYXJhbSBrZXJuZWwgVGhl
IHNpemUgb2YgdGhlIGtlcm5lbCB0byBiZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBibHVyLiBl
Zy4gU2l6ZSBvZiAzIHdpbGwgYmx1ciB0aGUgY2VudGVyIHBpeGVsIGJ5IDIgcGl4ZWxzIHN1cnJv
dW5kaW5nIGl0LgorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSByZXF1aXJlZCB3aWR0aC9oZWln
aHQgcmF0aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3Mu
IChVc2UgMS4wIGZvciBmdWxsIHNpemUpCisgICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJh
IHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2Rl
IFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChk
ZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9z
dCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAg
ICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24g
dGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKiBAcGFyYW0gdGV4dHVyZVR5
cGUgVHlwZSBvZiB0ZXh0dXJlcyB1c2VkIHdoZW4gcGVyZm9ybWluZyB0aGUgcG9zdCBwcm9jZXNz
LiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gYmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxh
dGlvbiBvZiB0aGUgc2hhZGVyIHNob3VsZCBub3QgYmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3Iu
IFRoZSB1cGRhdGVFZmZlY3QgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRl
ciBhdCBhIGxhdGVyIHRpbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBCbHVyUG9zdFByb2Nlc3MobmFtZSwgCisgICAgLyoqIFRoZSBkaXJlY3Rpb24gaW4gd2hpY2gg
dG8gYmx1ciB0aGUgaW1hZ2UuICovCisgICAgZGlyZWN0aW9uLCBrZXJuZWwsIG9wdGlvbnMsIGNh
bWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlLCB0ZXh0dXJlVHlwZSwgZGVmaW5l
cywgYmxvY2tDb21waWxhdGlvbikgeworICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lk
IDApIHsgc2FtcGxpbmdNb2RlID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREU7IH0K
KyAgICAgICAgaWYgKHRleHR1cmVUeXBlID09PSB2b2lkIDApIHsgdGV4dHVyZVR5cGUgPSBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAgIGlmIChkZWZpbmVzID09PSB2b2lk
IDApIHsgZGVmaW5lcyA9ICIiOyB9CisgICAgICAgIGlmIChibG9ja0NvbXBpbGF0aW9uID09PSB2
b2lkIDApIHsgYmxvY2tDb21waWxhdGlvbiA9IGZhbHNlOyB9CisgICAgICAgIHZhciBfdGhpcyA9
IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsICJrZXJuZWxCbHVyIiwgWyJkZWx0YSIsICJkaXJlY3Rp
b24iLCAiY2FtZXJhTWluTWF4WiJdLCBbImNpcmNsZU9mQ29uZnVzaW9uU2FtcGxlciJdLCBvcHRp
b25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgbnVsbCwgdGV4dHVy
ZVR5cGUsICJrZXJuZWxCbHVyIiwgeyB2YXJ5aW5nQ291bnQ6IDAsIGRlcENvdW50OiAwIH0sIHRy
dWUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKyAgICAg
ICAgX3RoaXMuYmxvY2tDb21waWxhdGlvbiA9IGJsb2NrQ29tcGlsYXRpb247CisgICAgICAgIF90
aGlzLl9wYWNrZWRGbG9hdCA9IGZhbHNlOworICAgICAgICBfdGhpcy5fc3RhdGljRGVmaW5lcyA9
ICIiOworICAgICAgICBfdGhpcy5fc3RhdGljRGVmaW5lcyA9IGRlZmluZXM7CisgICAgICAgIF90
aGlzLm9uQXBwbHlPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAg
ICBpZiAoX3RoaXMuX291dHB1dFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0
RmxvYXQyKCdkZWx0YScsICgxIC8gX3RoaXMuX291dHB1dFRleHR1cmUud2lkdGgpICogX3RoaXMu
ZGlyZWN0aW9uLngsICgxIC8gX3RoaXMuX291dHB1dFRleHR1cmUuaGVpZ2h0KSAqIF90aGlzLmRp
cmVjdGlvbi55KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIGVmZmVjdC5zZXRGbG9hdDIoJ2RlbHRhJywgKDEgLyBfdGhpcy53aWR0aCkgKiBfdGhp
cy5kaXJlY3Rpb24ueCwgKDEgLyBfdGhpcy5oZWlnaHQpICogX3RoaXMuZGlyZWN0aW9uLnkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgX3RoaXMua2VybmVsID0ga2VybmVs
OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShCbHVyUG9zdFByb2Nlc3MucHJvdG90eXBlLCAia2VybmVsIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgbGVuZ3RoIGluIHBpeGVscyBvZiB0aGUgYmx1ciBzYW1wbGUgcmVn
aW9uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9pZGVhbEtlcm5lbDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFNldHMgdGhlIGxlbmd0aCBpbiBwaXhlbHMgb2YgdGhlIGJsdXIgc2FtcGxlIHJlZ2lv
bgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodikgeworICAgICAgICAgICAg
aWYgKHRoaXMuX2lkZWFsS2VybmVsID09PSB2KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdiA9IE1hdGgubWF4KHYsIDEpOworICAgICAgICAg
ICAgdGhpcy5faWRlYWxLZXJuZWwgPSB2OworICAgICAgICAgICAgdGhpcy5fa2VybmVsID0gdGhp
cy5fbmVhcmVzdEJlc3RLZXJuZWwodik7CisgICAgICAgICAgICBpZiAoIXRoaXMuYmxvY2tDb21w
aWxhdGlvbikgeworICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBhcmFtZXRlcnMoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEJsdXJQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJwYWNrZWRGbG9hdCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgd2V0aGVyIG9yIG5vdCB0aGUgYmx1ciBpcyB1bnBhY2tpbmcvcmVw
YWNraW5nIGZsb2F0cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFja2VkRmxvYXQ7CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHdldGhlciBvciBub3QgdGhlIGJsdXIgbmVlZHMgdG8gdW5w
YWNrL3JlcGFjayBmbG9hdHMKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHYp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9wYWNrZWRGbG9hdCA9PT0gdikgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3BhY2tlZEZs
b2F0ID0gdjsKKyAgICAgICAgICAgIGlmICghdGhpcy5ibG9ja0NvbXBpbGF0aW9uKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFyYW1ldGVycygpOworICAgICAgICAgICAgfQorICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBlZmZlY3Qgd2l0aCB0
aGUgY3VycmVudCBwb3N0IHByb2Nlc3MgY29tcGlsZSB0aW1lIHZhbHVlcyBhbmQgcmVjb21waWxl
cyB0aGUgc2hhZGVyLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIERlZmluZSBzdGF0ZW1lbnRzIHRo
YXQgc2hvdWxkIGJlIGFkZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNoYWRlci4gKGRlZmF1
bHQ6IG51bGwpCisgICAgICogQHBhcmFtIHVuaWZvcm1zIFNldCBvZiB1bmlmb3JtIHZhcmlhYmxl
cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzaGFkZXIuIChkZWZhdWx0OiBudWxsKQorICAg
ICAqIEBwYXJhbSBzYW1wbGVycyBTZXQgb2YgVGV4dHVyZTJEIHZhcmlhYmxlcyB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBzaGFkZXIuIChkZWZhdWx0OiBudWxsKQorICAgICAqIEBwYXJhbSBp
bmRleFBhcmFtZXRlcnMgVGhlIGluZGV4IHBhcmFtZXRlcnMgdG8gYmUgdXNlZCBmb3IgYmFieWxv
bnMgaW5jbHVkZSBzeW50YXggIiNpbmNsdWRlPGtlcm5lbEJsdXJWYXJ5aW5nRGVjbGFyYXRpb24+
WzAuLnZhcnlpbmdDb3VudF0iLiAoZGVmYXVsdDogdW5kZWZpbmVkKSBTZWUgdXNhZ2UgaW4gYmFi
eWxvbi5ibHVyUG9zdFByb2Nlc3MudHMgYW5kIGtlcm5lbEJsdXIudmVydGV4LmZ4CisgICAgICog
QHBhcmFtIG9uQ29tcGlsZWQgQ2FsbGVkIHdoZW4gdGhlIHNoYWRlciBoYXMgYmVlbiBjb21waWxl
ZC4KKyAgICAgKiBAcGFyYW0gb25FcnJvciBDYWxsZWQgaWYgdGhlcmUgaXMgYW4gZXJyb3Igd2hl
biBjb21waWxpbmcgYSBzaGFkZXIuCisgICAgICovCisgICAgQmx1clBvc3RQcm9jZXNzLnByb3Rv
dHlwZS51cGRhdGVFZmZlY3QgPSBmdW5jdGlvbiAoZGVmaW5lcywgdW5pZm9ybXMsIHNhbXBsZXJz
LCBpbmRleFBhcmFtZXRlcnMsIG9uQ29tcGlsZWQsIG9uRXJyb3IpIHsKKyAgICAgICAgaWYgKGRl
ZmluZXMgPT09IHZvaWQgMCkgeyBkZWZpbmVzID0gbnVsbDsgfQorICAgICAgICBpZiAodW5pZm9y
bXMgPT09IHZvaWQgMCkgeyB1bmlmb3JtcyA9IG51bGw7IH0KKyAgICAgICAgaWYgKHNhbXBsZXJz
ID09PSB2b2lkIDApIHsgc2FtcGxlcnMgPSBudWxsOyB9CisgICAgICAgIHRoaXMuX3VwZGF0ZVBh
cmFtZXRlcnMob25Db21waWxlZCwgb25FcnJvcik7CisgICAgfTsKKyAgICBCbHVyUG9zdFByb2Nl
c3MucHJvdG90eXBlLl91cGRhdGVQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKG9uQ29tcGlsZWQsIG9u
RXJyb3IpIHsKKyAgICAgICAgLy8gR2VuZXJhdGUgc2FtcGxpbmcgb2Zmc2V0cyBhbmQgd2VpZ2h0
cworICAgICAgICB2YXIgTiA9IHRoaXMuX2tlcm5lbDsKKyAgICAgICAgdmFyIGNlbnRlckluZGV4
ID0gKE4gLSAxKSAvIDI7CisgICAgICAgIC8vIEdlbmVyYXRlIEdhdXNzaWFuIHNhbXBsaW5nIHdl
aWdodHMgb3ZlciBrZXJuZWwKKyAgICAgICAgdmFyIG9mZnNldHMgPSBbXTsKKyAgICAgICAgdmFy
IHdlaWdodHMgPSBbXTsKKyAgICAgICAgdmFyIHRvdGFsV2VpZ2h0ID0gMDsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgIHZhciB1ID0gaSAvIChOIC0g
MSk7CisgICAgICAgICAgICB2YXIgdyA9IHRoaXMuX2dhdXNzaWFuV2VpZ2h0KHUgKiAyLjAgLSAx
KTsKKyAgICAgICAgICAgIG9mZnNldHNbaV0gPSAoaSAtIGNlbnRlckluZGV4KTsKKyAgICAgICAg
ICAgIHdlaWdodHNbaV0gPSB3OworICAgICAgICAgICAgdG90YWxXZWlnaHQgKz0gdzsKKyAgICAg
ICAgfQorICAgICAgICAvLyBOb3JtYWxpemUgd2VpZ2h0cworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHdlaWdodHNbaV0gLz0g
dG90YWxXZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gT3B0aW1pemU6IGNvbWJpbmUgc2Ft
cGxlcyB0byB0YWtlIGFkdmFudGFnZSBvZiBoYXJkd2FyZSBsaW5lYXIgc2FtcGxpbmcKKyAgICAg
ICAgLy8gV2FsayBmcm9tIGxlZnQgdG8gY2VudGVyLCBjb21iaW5pbmcgcGFpcnMgKHN5bW1ldHJp
Y2FsbHkpCisgICAgICAgIHZhciBsaW5lYXJTYW1wbGluZ1dlaWdodHMgPSBbXTsKKyAgICAgICAg
dmFyIGxpbmVhclNhbXBsaW5nT2Zmc2V0cyA9IFtdOworICAgICAgICB2YXIgbGluZWFyU2FtcGxp
bmdNYXAgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gY2VudGVySW5kZXg7IGkg
Kz0gMikgeworICAgICAgICAgICAgdmFyIGogPSBNYXRoLm1pbihpICsgMSwgTWF0aC5mbG9vcihj
ZW50ZXJJbmRleCkpOworICAgICAgICAgICAgdmFyIHNpbmdsZUNlbnRlclNhbXBsZSA9IGkgPT09
IGo7CisgICAgICAgICAgICBpZiAoc2luZ2xlQ2VudGVyU2FtcGxlKSB7CisgICAgICAgICAgICAg
ICAgbGluZWFyU2FtcGxpbmdNYXAucHVzaCh7IG86IG9mZnNldHNbaV0sIHc6IHdlaWdodHNbaV0g
fSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2
YXIgc2hhcmVkQ2VsbCA9IGogPT09IGNlbnRlckluZGV4OworICAgICAgICAgICAgICAgIHZhciB3
ZWlnaHRMaW5lYXIgPSAod2VpZ2h0c1tpXSArIHdlaWdodHNbal0gKiAoc2hhcmVkQ2VsbCA/IC41
IDogMS4pKTsKKyAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0TGluZWFyID0gb2Zmc2V0c1tpXSAr
IDEgLyAoMSArIHdlaWdodHNbaV0gLyB3ZWlnaHRzW2pdKTsKKyAgICAgICAgICAgICAgICBpZiAo
b2Zmc2V0TGluZWFyID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmVhclNhbXBsaW5n
TWFwLnB1c2goeyBvOiBvZmZzZXRzW2ldLCB3OiB3ZWlnaHRzW2ldIH0pOworICAgICAgICAgICAg
ICAgICAgICBsaW5lYXJTYW1wbGluZ01hcC5wdXNoKHsgbzogb2Zmc2V0c1tpICsgMV0sIHc6IHdl
aWdodHNbaSArIDFdIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgbGluZWFyU2FtcGxpbmdNYXAucHVzaCh7IG86IG9mZnNl
dExpbmVhciwgdzogd2VpZ2h0TGluZWFyIH0pOworICAgICAgICAgICAgICAgICAgICBsaW5lYXJT
YW1wbGluZ01hcC5wdXNoKHsgbzogLW9mZnNldExpbmVhciwgdzogd2VpZ2h0TGluZWFyIH0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxpbmVhclNhbXBsaW5nTWFwLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICBsaW5lYXJTYW1wbGluZ09mZnNldHNbaV0gPSBsaW5lYXJTYW1wbGluZ01hcFtpXS5vOwor
ICAgICAgICAgICAgbGluZWFyU2FtcGxpbmdXZWlnaHRzW2ldID0gbGluZWFyU2FtcGxpbmdNYXBb
aV0udzsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXBsYWNlIHdpdGggb3B0aW1pemVkCisgICAg
ICAgIG9mZnNldHMgPSBsaW5lYXJTYW1wbGluZ09mZnNldHM7CisgICAgICAgIHdlaWdodHMgPSBs
aW5lYXJTYW1wbGluZ1dlaWdodHM7CisgICAgICAgIC8vIEdlbmVyYXRlIHNoYWRlcnMKKyAgICAg
ICAgdmFyIG1heFZhcnlpbmdSb3dzID0gdGhpcy5nZXRFbmdpbmUoKS5nZXRDYXBzKCkubWF4VmFy
eWluZ1ZlY3RvcnM7CisgICAgICAgIHZhciBmcmVlVmFyeWluZ1ZlYzIgPSBNYXRoLm1heChtYXhW
YXJ5aW5nUm93cywgMC4pIC0gMTsgLy8gQmVjYXVzZSBvZiBzYW1wbGVDZW50ZXIKKyAgICAgICAg
dmFyIHZhcnlpbmdDb3VudCA9IE1hdGgubWluKG9mZnNldHMubGVuZ3RoLCBmcmVlVmFyeWluZ1Zl
YzIpOworICAgICAgICB2YXIgZGVmaW5lcyA9ICIiOworICAgICAgICBkZWZpbmVzICs9IHRoaXMu
X3N0YXRpY0RlZmluZXM7CisgICAgICAgIC8vIFRoZSBET0YgZnJhZ21lbnQgc2hvdWxkIGlnbm9y
ZSB0aGUgY2VudGVyIHBpeGVsIHdoZW4gbG9vcGluZyBhcyBpdCBpcyBoYW5kbGVkIG1hbnVhbHkg
aW4gdGhlIGZyYWdtZW50IHNoYWRlci4KKyAgICAgICAgaWYgKHRoaXMuX3N0YXRpY0RlZmluZXMu
aW5kZXhPZigiRE9GIikgIT0gLTEpIHsKKyAgICAgICAgICAgIGRlZmluZXMgKz0gIiNkZWZpbmUg
Q0VOVEVSX1dFSUdIVCAiICsgdGhpcy5fZ2xzbEZsb2F0KHdlaWdodHNbdmFyeWluZ0NvdW50IC0g
MV0pICsgIlxyXG4iOworICAgICAgICAgICAgdmFyeWluZ0NvdW50LS07CisgICAgICAgIH0KKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YXJ5aW5nQ291bnQ7IGkrKykgeworICAgICAgICAg
ICAgZGVmaW5lcyArPSAiI2RlZmluZSBLRVJORUxfT0ZGU0VUIiArIGkgKyAiICIgKyB0aGlzLl9n
bHNsRmxvYXQob2Zmc2V0c1tpXSkgKyAiXHJcbiI7CisgICAgICAgICAgICBkZWZpbmVzICs9ICIj
ZGVmaW5lIEtFUk5FTF9XRUlHSFQiICsgaSArICIgIiArIHRoaXMuX2dsc2xGbG9hdCh3ZWlnaHRz
W2ldKSArICJcclxuIjsKKyAgICAgICAgfQorICAgICAgICB2YXIgZGVwQ291bnQgPSAwOworICAg
ICAgICBmb3IgKHZhciBpID0gZnJlZVZhcnlpbmdWZWMyOyBpIDwgb2Zmc2V0cy5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgZGVmaW5lcyArPSAiI2RlZmluZSBLRVJORUxfREVQX09GRlNFVCIg
KyBkZXBDb3VudCArICIgIiArIHRoaXMuX2dsc2xGbG9hdChvZmZzZXRzW2ldKSArICJcclxuIjsK
KyAgICAgICAgICAgIGRlZmluZXMgKz0gIiNkZWZpbmUgS0VSTkVMX0RFUF9XRUlHSFQiICsgZGVw
Q291bnQgKyAiICIgKyB0aGlzLl9nbHNsRmxvYXQod2VpZ2h0c1tpXSkgKyAiXHJcbiI7CisgICAg
ICAgICAgICBkZXBDb3VudCsrOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnBhY2tlZEZs
b2F0KSB7CisgICAgICAgICAgICBkZWZpbmVzICs9ICIjZGVmaW5lIFBBQ0tFREZMT0FUIDEiOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuYmxvY2tDb21waWxhdGlvbiA9IGZhbHNlOworICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLnVwZGF0ZUVmZmVjdC5jYWxsKHRoaXMsIGRlZmluZXMsIG51bGws
IG51bGwsIHsKKyAgICAgICAgICAgIHZhcnlpbmdDb3VudDogdmFyeWluZ0NvdW50LAorICAgICAg
ICAgICAgZGVwQ291bnQ6IGRlcENvdW50CisgICAgICAgIH0sIG9uQ29tcGlsZWQsIG9uRXJyb3Ip
OworICAgIH07CisgICAgLyoqCisgICAgICogQmVzdCBrZXJuZWxzIGFyZSBvZGQgbnVtYmVycyB0
aGF0IHdoZW4gZGl2aWRlZCBieSAyLCB0aGVpciBpbnRlZ2VyIHBhcnQgaXMgZXZlbiwgc28gNSwg
OSBvciAxMy4KKyAgICAgKiBPdGhlciBvZGQga2VybmVscyBvcHRpbWl6ZSBjb3JyZWN0bHkgYnV0
IHJlcXVpcmUgcHJvcG9ydGlvbmFsbHkgbW9yZSBzYW1wbGVzLCBldmVuIGtlcm5lbHMgYXJlCisg
ICAgICogcG9zc2libGUgYnV0IHdpbGwgcHJvZHVjZSBtaW5vciB2aXN1YWwgYXJ0aWZhY3RzLiBT
aW5jZSBlYWNoIG5ldyBrZXJuZWwgcmVxdWlyZXMgYSBuZXcgc2hhZGVyIHdlCisgICAgICogd2Fu
dCB0byBtaW5pbWl6ZSBrZXJuZWwgY2hhbmdlcywgaGF2aW5nIGdhcHMgYmV0d2VlbiBwaHlzaWNh
bCBrZXJuZWxzIGlzIGhlbHBmdWwgaW4gdGhhdCByZWdhcmQuCisgICAgICogVGhlIGdhcHMgYmV0
d2VlbiBwaHlzaWNhbCBrZXJuZWxzIGFyZSBjb21wZW5zYXRlZCBmb3IgaW4gdGhlIHdlaWdodGlu
ZyBvZiB0aGUgc2FtcGxlcworICAgICAqIEBwYXJhbSBpZGVhbEtlcm5lbCBJZGVhbCBibHVyIGtl
cm5lbC4KKyAgICAgKiBAcmV0dXJuIE5lYXJlc3QgYmVzdCBrZXJuZWwuCisgICAgICovCisgICAg
Qmx1clBvc3RQcm9jZXNzLnByb3RvdHlwZS5fbmVhcmVzdEJlc3RLZXJuZWwgPSBmdW5jdGlvbiAo
aWRlYWxLZXJuZWwpIHsKKyAgICAgICAgdmFyIHYgPSBNYXRoLnJvdW5kKGlkZWFsS2VybmVsKTsK
KyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IFt2LCB2IC0gMSwgdiArIDEsIHYgLSAyLCB2
ICsgMl07IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgayA9IF9hW19p
XTsKKyAgICAgICAgICAgIGlmICgoKGsgJSAyKSAhPT0gMCkgJiYgKChNYXRoLmZsb29yKGsgLyAy
KSAlIDIpID09PSAwKSAmJiBrID4gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1h
eChrLCAzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTWF0aC5t
YXgodiwgMyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxjdWxhdGVzIHRoZSB2YWx1ZSBv
ZiBhIEdhdXNzaWFuIGRpc3RyaWJ1dGlvbiB3aXRoIHNpZ21hIDMgYXQgYSBnaXZlbiBwb2ludC4K
KyAgICAgKiBAcGFyYW0geCBUaGUgcG9pbnQgb24gdGhlIEdhdXNzaWFuIGRpc3RyaWJ1dGlvbiB0
byBzYW1wbGUuCisgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIEdhdXNzaWFuIGZ1bmN0
aW9uIGF0IHguCisgICAgICovCisgICAgQmx1clBvc3RQcm9jZXNzLnByb3RvdHlwZS5fZ2F1c3Np
YW5XZWlnaHQgPSBmdW5jdGlvbiAoeCkgeworICAgICAgICAvL3JlZmVyZW5jZTogRW5naW5lcy9J
bWFnZVByb2Nlc3NpbmdCbHVyLmNwcCAjZGNjNzYwCisgICAgICAgIC8vIFdlIGFyZSBldmFsdWF0
aW5nIHRoZSBHYXVzc2lhbiAobm9ybWFsKSBkaXN0cmlidXRpb24gb3ZlciBhIGtlcm5lbCBwYXJh
bWV0ZXIgc3BhY2Ugb2YgWy0xLDFdLAorICAgICAgICAvLyBzbyB3ZSB0cnVuY2F0ZSBhdCB0aHJl
ZSBzdGFuZGFyZCBkZXZpYXRpb25zIGJ5IHNldHRpbmcgc3RkZGV2IChzaWdtYSkgdG8gMS8zLgor
ICAgICAgICAvLyBUaGUgY2hvaWNlIG9mIDMtc2lnbWEgdHJ1bmNhdGlvbiBpcyBjb21tb24gYnV0
IGFyYml0cmFyeSwgYW5kIG1lYW5zIHRoYXQgdGhlIHNpZ25hbCBpcworICAgICAgICAvLyB0cnVu
Y2F0ZWQgYXQgYXJvdW5kIDEuMyUgb2YgcGVhayBzdHJlbmd0aC4KKyAgICAgICAgLy90aGUgZGlz
dHJpYnV0aW9uIGlzIHNjYWxlZCB0byBhY2NvdW50IGZvciB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVu
IHRoZSBhY3R1YWwga2VybmVsIHNpemUgYW5kIHRoZSByZXF1ZXN0ZWQga2VybmVsIHNpemUKKyAg
ICAgICAgdmFyIHNpZ21hID0gKDEgLyAzKTsKKyAgICAgICAgdmFyIGRlbm9taW5hdG9yID0gTWF0
aC5zcXJ0KDIuMCAqIE1hdGguUEkpICogc2lnbWE7CisgICAgICAgIHZhciBleHBvbmVudCA9IC0o
KHggKiB4KSAvICgyLjAgKiBzaWdtYSAqIHNpZ21hKSk7CisgICAgICAgIHZhciB3ZWlnaHQgPSAo
MS4wIC8gZGVub21pbmF0b3IpICogTWF0aC5leHAoZXhwb25lbnQpOworICAgICAgICByZXR1cm4g
d2VpZ2h0OworICAgIH07CisgICAgLyoqCisgICAgICAqIEdlbmVyYXRlcyBhIHN0cmluZyB0aGF0
IGNhbiBiZSB1c2VkIGFzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGluIEdMU0wuCisgICAgICAq
IEBwYXJhbSB4IFZhbHVlIHRvIHByaW50LgorICAgICAgKiBAcGFyYW0gZGVjaW1hbEZpZ3VyZXMg
TnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHByaW50IHRoZSBudW1iZXIgdG8gKGV4Y2x1ZGlu
ZyB0cmFpbGluZyAwcykuCisgICAgICAqIEByZXR1cm4gR0xTTCBmbG9hdCBzdHJpbmcuCisgICAg
ICAqLworICAgIEJsdXJQb3N0UHJvY2Vzcy5wcm90b3R5cGUuX2dsc2xGbG9hdCA9IGZ1bmN0aW9u
ICh4LCBkZWNpbWFsRmlndXJlcykgeworICAgICAgICBpZiAoZGVjaW1hbEZpZ3VyZXMgPT09IHZv
aWQgMCkgeyBkZWNpbWFsRmlndXJlcyA9IDg7IH0KKyAgICAgICAgcmV0dXJuIHgudG9GaXhlZChk
ZWNpbWFsRmlndXJlcykucmVwbGFjZSgvMCskLywgJycpOworICAgIH07CisgICAgcmV0dXJuIEJs
dXJQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL2Nocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL1Bvc3RQcm9jZXNzZXMvY2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nl
c3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2hyb21hdGljQWJlcnJh
dGlvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDaHJvbWF0aWNBYmVycmF0aW9u
UG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAi
Li4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMv
bWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
cG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2Vzcy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMg
Ki8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
U2hhZGVyc19jaHJvbWF0aWNBYmVycmF0aW9uX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2Nocm9tYXRpY0Fi
ZXJyYXRpb24uZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9jaHJvbWF0aWNBYmVycmF0aW9uLmZyYWdt
ZW50LnRzIik7CisKKworCisKKworLyoqCisgKiBUaGUgQ2hyb21hdGljQWJlcnJhdGlvblBvc3RQ
cm9jZXNzIHNlcGFyYXRlcyB0aGUgcmdiIGNoYW5uZWxzIGluIGFuIGltYWdlIHRvIHByb2R1Y2Ug
Y2hyb21hdGljIGRpc3RvcnRpb24gYXJvdW5kIHRoZSBlZGdlcyBvZiB0aGUgc2NyZWVuCisgKi8K
K3ZhciBDaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oQ2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzLCBfc3VwZXIpOworICAg
IC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgQ2hyb21hdGljQWJlcnJhdGlvblBv
c3RQcm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAg
ICAgKiBAcGFyYW0gc2NyZWVuV2lkdGggVGhlIHdpZHRoIG9mIHRoZSBzY3JlZW4gdG8gYXBwbHkg
dGhlIGVmZmVjdCBvbi4KKyAgICAgKiBAcGFyYW0gc2NyZWVuSGVpZ2h0IFRoZSBoZWlnaHQgb2Yg
dGhlIHNjcmVlbiB0byBhcHBseSB0aGUgZWZmZWN0IG9uLgorICAgICAqIEBwYXJhbSBvcHRpb25z
IFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQgcmF0aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNv
bXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisgICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJh
IHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2Rl
IFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChk
ZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9z
dCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAg
ICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24g
dGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKiBAcGFyYW0gdGV4dHVyZVR5
cGUgVHlwZSBvZiB0ZXh0dXJlcyB1c2VkIHdoZW4gcGVyZm9ybWluZyB0aGUgcG9zdCBwcm9jZXNz
LiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gYmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxh
dGlvbiBvZiB0aGUgc2hhZGVyIHNob3VsZCBub3QgYmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3Iu
IFRoZSB1cGRhdGVFZmZlY3QgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRl
ciBhdCBhIGxhdGVyIHRpbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBDaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MobmFtZSwgc2NyZWVuV2lkdGgsIHNjcmVl
bkhlaWdodCwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUs
IHRleHR1cmVUeXBlLCBibG9ja0NvbXBpbGF0aW9uKSB7CisgICAgICAgIGlmICh0ZXh0dXJlVHlw
ZSA9PT0gdm9pZCAwKSB7IHRleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lO
VDsgfQorICAgICAgICBpZiAoYmxvY2tDb21waWxhdGlvbiA9PT0gdm9pZCAwKSB7IGJsb2NrQ29t
cGlsYXRpb24gPSBmYWxzZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlz
LCBuYW1lLCAiY2hyb21hdGljQWJlcnJhdGlvbiIsIFsiY2hyb21hdGljX2FiZXJyYXRpb24iLCAi
c2NyZWVuX3dpZHRoIiwgInNjcmVlbl9oZWlnaHQiLCAiZGlyZWN0aW9uIiwgInJhZGlhbEludGVu
c2l0eSIsICJjZW50ZXJQb3NpdGlvbiJdLCBbXSwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01v
ZGUsIGVuZ2luZSwgcmV1c2FibGUsIG51bGwsIHRleHR1cmVUeXBlLCB1bmRlZmluZWQsIG51bGws
IGJsb2NrQ29tcGlsYXRpb24pIHx8IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
YW1vdW50IG9mIHNlcGVyYXRpb24gb2YgcmdiIGNoYW5uZWxzIChkZWZhdWx0OiAzMCkKKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLmFiZXJyYXRpb25BbW91bnQgPSAzMDsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFRoZSBhbW91bnQgdGhlIGVmZmVjdCB3aWxsIGluY3JlYXNlIGZvciBwaXhl
bHMgY2xvc2VyIHRvIHRoZSBlZGdlIG9mIHRoZSBzY3JlZW4uIChkZWZhdWx0OiAwKQorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMucmFkaWFsSW50ZW5zaXR5ID0gMDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFRoZSBub3JtaWxpemVkIGRpcmVjdGlvbiBpbiB3aGljaCB0aGUgcmdiIGNoYW5u
ZWxzIHNob3VsZCBiZSBzZXBlcmF0ZWQuIElmIHNldCB0byAwLDAgcmFkaWFsIGRpcmVjdGlvbiB3
aWxsIGJlIHVzZWQuIChkZWZhdWx0OiBWZWN0b3IyKDAuNzA3LDAuNzA3KSkKKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLmRpcmVjdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKDAuNzA3LCAwLjcwNyk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBUaGUgY2VudGVyIHBvc2l0aW9uIHdoZXJlIHRoZSByYWRpYWxJbnRl
bnNpdHkgc2hvdWxkIGJlIGFyb3VuZC4gWzAuNSwwLjUgaXMgY2VudGVyIG9mIHNjcmVlbiwgMSwx
IGlzIHRvcCByaWdodCBjb3JkZXJdIChkZWZhdWx0OiBWZWN0b3IyKDAuNSAsMC41KSkKKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLmNlbnRlclBvc2l0aW9uID0gbmV3IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0oMC41LCAwLjUpOwor
ICAgICAgICBfdGhpcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgewor
ICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdjaHJvbWF0aWNfYWJlcnJhdGlvbicsIF90aGlz
LmFiZXJyYXRpb25BbW91bnQpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdzY3JlZW5f
d2lkdGgnLCBzY3JlZW5XaWR0aCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoJ3NjcmVl
bl9oZWlnaHQnLCBzY3JlZW5IZWlnaHQpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdy
YWRpYWxJbnRlbnNpdHknLCBfdGhpcy5yYWRpYWxJbnRlbnNpdHkpOworICAgICAgICAgICAgZWZm
ZWN0LnNldEZsb2F0MignZGlyZWN0aW9uJywgX3RoaXMuZGlyZWN0aW9uLngsIF90aGlzLmRpcmVj
dGlvbi55KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDIoJ2NlbnRlclBvc2l0aW9uJywg
X3RoaXMuY2VudGVyUG9zaXRpb24ueCwgX3RoaXMuY2VudGVyUG9zaXRpb24ueSk7CisgICAgICAg
IH0pOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIHJldHVybiBDaHJvbWF0aWNB
YmVycmF0aW9uUG9zdFByb2Nlc3M7Cit9KF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJQb3N0UHJvY2VzcyJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
UG9zdFByb2Nlc3Nlcy9jaXJjbGVPZkNvbmZ1c2lvblBvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1Bvc3RQcm9jZXNzZXMvY2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJvY2Vzcy50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nlc3Mg
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2lyY2xlT2ZDb25mdXNpb25Q
b3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJv
Y2VzczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2Rl
X21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3Mu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2Vy
ICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2NpcmNsZU9mQ29uZnVzaW9u
X2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9TaGFkZXJzL2NpcmNsZU9mQ29uZnVzaW9uLmZyYWdtZW50ICovICIuL1NoYWRl
cnMvY2lyY2xlT2ZDb25mdXNpb24uZnJhZ21lbnQudHMiKTsKKworCisKKworCisvKioKKyAqIFRo
ZSBDaXJjbGVPZkNvbmZ1c2lvblBvc3RQcm9jZXNzIGNvbXB1dGVzIHRoZSBjaXJjbGUgb2YgY29u
ZnVzaW9uIHZhbHVlIGZvciBlYWNoIHBpeGVsIGdpdmVuIHJlcXVpcmVkIGxlbnMgcGFyYW1ldGVy
cy4gU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NpcmNsZV9vZl9jb25mdXNpb24K
KyAqLwordmFyIENpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19leHRlbmRzIl0oQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIENpcmNsZU9mQ29uZnVzaW9uUG9z
dFByb2Nlc3MKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZWZmZWN0LgorICAg
ICAqIEBwYXJhbSBkZXB0aFRleHR1cmUgVGhlIGRlcHRoIHRleHR1cmUgb2YgdGhlIHNjZW5lIHRv
IGNvbXB1dGUgdGhlIGNpcmNsZSBvZiBjb25mdXNpb24uIFRoaXMgbXVzdCBiZSBzZXQgaW4gb3Jk
ZXIgZm9yIHRoaXMgdG8gZnVuY3Rpb24gYnV0IG1heSBiZSBzZXQgYWZ0ZXIgaW5pdGlhbGl6YXRp
b24gaWYgbmVlZGVkLgorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSByZXF1aXJlZCB3aWR0aC9o
ZWlnaHQgcmF0aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBh
c3MuCisgICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIg
cGFzcyB0by4KKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIFRoZSBzYW1wbGluZyBtb2RlIHRv
IGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChkZWZhdWx0OiAwKQorICAgICAqIEBw
YXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9zdCBwcm9jZXNzIHdpbGwgYmUgYXBw
bGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAgICAqIEBwYXJhbSByZXVzYWJsZSBJ
ZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24gdGhlIHNhbWUgZnJhbWUuIChkZWZh
dWx0OiBmYWxzZSkKKyAgICAgKiBAcGFyYW0gdGV4dHVyZVR5cGUgVHlwZSBvZiB0ZXh0dXJlcyB1
c2VkIHdoZW4gcGVyZm9ybWluZyB0aGUgcG9zdCBwcm9jZXNzLiAoZGVmYXVsdDogMCkKKyAgICAg
KiBAcGFyYW0gYmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxhdGlvbiBvZiB0aGUgc2hhZGVyIHNo
b3VsZCBub3QgYmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSB1cGRhdGVFZmZlY3QgbWV0
aG9kIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRlciBhdCBhIGxhdGVyIHRpbWUuIChk
ZWZhdWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDaXJjbGVPZkNvbmZ1c2lvblBv
c3RQcm9jZXNzKG5hbWUsIGRlcHRoVGV4dHVyZSwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01v
ZGUsIGVuZ2luZSwgcmV1c2FibGUsIHRleHR1cmVUeXBlLCBibG9ja0NvbXBpbGF0aW9uKSB7Cisg
ICAgICAgIGlmICh0ZXh0dXJlVHlwZSA9PT0gdm9pZCAwKSB7IHRleHR1cmVUeXBlID0gX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRF
WFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICBpZiAoYmxvY2tDb21waWxhdGlvbiA9
PT0gdm9pZCAwKSB7IGJsb2NrQ29tcGlsYXRpb24gPSBmYWxzZTsgfQorICAgICAgICB2YXIgX3Ro
aXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCAiY2lyY2xlT2ZDb25mdXNpb24iLCBbImNhbWVy
YU1pbk1heFoiLCAiZm9jdXNEaXN0YW5jZSIsICJjb2NQcmVjYWxjdWxhdGlvbiJdLCBbImRlcHRo
U2FtcGxlciJdLCBvcHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJs
ZSwgbnVsbCwgdGV4dHVyZVR5cGUsIHVuZGVmaW5lZCwgbnVsbCwgYmxvY2tDb21waWxhdGlvbikg
fHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1heCBsZW5zIHNpemUgaW4gc2NlbmUg
dW5pdHMvMTAwMCAoZWcuIG1pbGxpbWV0ZXIpLiBTdGFuZGFyZCBjYW1lcmFzIGFyZSA1MG1tLiAo
ZGVmYXVsdDogNTApIFRoZSBkaWFtYXRlciBvZiB0aGUgcmVzdWx0aW5nIGFwZXJ0dXJlIGNhbiBi
ZSBjb21wdXRlZCBieSBsZW5zU2l6ZS9mU3RvcC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LmxlbnNTaXplID0gNTA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGLVN0b3Agb2YgdGhlIGVm
ZmVjdCdzIGNhbWVyYS4gVGhlIGRpYW1hdGVyIG9mIHRoZSByZXN1bHRpbmcgYXBlcnR1cmUgY2Fu
IGJlIGNvbXB1dGVkIGJ5IGxlbnNTaXplL2ZTdG9wLiAoZGVmYXVsdDogMS40KQorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuZlN0b3AgPSAxLjQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
aXN0YW5jZSBhd2F5IGZyb20gdGhlIGNhbWVyYSB0byBmb2N1cyBvbiBpbiBzY2VuZSB1bml0cy8x
MDAwIChlZy4gbWlsbGltZXRlcikuIChkZWZhdWx0OiAyMDAwKQorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuZm9jdXNEaXN0YW5jZSA9IDIwMDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBG
b2NhbCBsZW5ndGggb2YgdGhlIGVmZmVjdCdzIGNhbWVyYSBpbiBzY2VuZSB1bml0cy8xMDAwIChl
Zy4gbWlsbGltZXRlcikuIChkZWZhdWx0OiA1MCkKKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LmZvY2FsTGVuZ3RoID0gNTA7CisgICAgICAgIF90aGlzLl9kZXB0aFRleHR1cmUgPSBudWxsOwor
ICAgICAgICBfdGhpcy5fZGVwdGhUZXh0dXJlID0gZGVwdGhUZXh0dXJlOworICAgICAgICBfdGhp
cy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAg
aWYgKCFfdGhpcy5fZGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkxvZ2dlciJdLldhcm4oIk5vIGRlcHRoIHRl
eHR1cmUgc2V0IG9uIENpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nlc3MiKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVy
ZSgiZGVwdGhTYW1wbGVyIiwgX3RoaXMuX2RlcHRoVGV4dHVyZSk7CisgICAgICAgICAgICAvLyBD
aXJjbGUgb2YgY29uZnVzaW9uIGNhbGN1bGF0aW9uLCBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubnZp
ZGlhLmNvbS9ncHVnZW1zL0dQVUdlbXMvZ3B1Z2Vtc19jaDIzLmh0bWwKKyAgICAgICAgICAgIHZh
ciBhcGVydHVyZSA9IF90aGlzLmxlbnNTaXplIC8gX3RoaXMuZlN0b3A7CisgICAgICAgICAgICB2
YXIgY29jUHJlY2FsY3VsYXRpb24gPSAoKGFwZXJ0dXJlICogX3RoaXMuZm9jYWxMZW5ndGgpIC8g
KChfdGhpcy5mb2N1c0Rpc3RhbmNlIC0gX3RoaXMuZm9jYWxMZW5ndGgpKSk7IC8vICogKCh0aGlz
LmZvY3VzRGlzdGFuY2UgLSBwaXhlbERpc3RhbmNlKS9waXhlbERpc3RhbmNlKSBbVGhpcyBwYXJ0
IGlzIGRvbmUgaW4gc2hhZGVyXQorICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdmb2N1c0Rp
c3RhbmNlJywgX3RoaXMuZm9jdXNEaXN0YW5jZSk7CisgICAgICAgICAgICBlZmZlY3Quc2V0Rmxv
YXQoJ2NvY1ByZWNhbGN1bGF0aW9uJywgY29jUHJlY2FsY3VsYXRpb24pOworICAgICAgICAgICAg
ZWZmZWN0LnNldEZsb2F0MignY2FtZXJhTWluTWF4WicsIF90aGlzLl9kZXB0aFRleHR1cmUuYWN0
aXZlQ2FtZXJhLm1pblosIF90aGlzLl9kZXB0aFRleHR1cmUuYWN0aXZlQ2FtZXJhLm1heFopOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJkZXB0
aFRleHR1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZXB0aCB0ZXh0dXJlIHRvIGJl
IHVzZWQgdG8gY29tcHV0ZSB0aGUgY2lyY2xlIG9mIGNvbmZ1c2lvbi4gVGhpcyBtdXN0IGJlIHNl
dCBoZXJlIG9yIGluIHRoZSBjb25zdHJ1Y3RvciBpbiBvcmRlciBmb3IgdGhlIHBvc3QgcHJvY2Vz
cyB0byBmdW5jdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9kZXB0aFRleHR1cmUgPSB2YWx1ZTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgcmV0dXJuIENpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nlc3M7Cit9KF9wb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb3N0UHJvY2VzcyJdKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9jb2xvckNvcnJlY3Rpb25Q
b3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9jb2xvckNvcnJlY3Rp
b25Qb3N0UHJvY2Vzcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDb2xvckNvcnJl
Y3Rpb25Qb3N0UHJvY2VzcyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJD
b2xvckNvcnJlY3Rpb25Qb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29sb3JDb3Jy
ZWN0aW9uUG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xp
YiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2Vz
L3Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19U
ZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlh
bHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzX2NvbG9yQ29ycmVjdGlvbl9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9jb2xvckNvcnJlY3Rpb24uZnJh
Z21lbnQgKi8gIi4vU2hhZGVycy9jb2xvckNvcnJlY3Rpb24uZnJhZ21lbnQudHMiKTsKKworCisK
KworLyoqCisgKgorICogVGhpcyBwb3N0LXByb2Nlc3MgYWxsb3dzIHRoZSBtb2RpZmljYXRpb24g
b2YgcmVuZGVyZWQgY29sb3JzIGJ5IHVzaW5nCisgKiBhICdsb29rLXVwIHRhYmxlJyAoTFVUKS4g
VGhpcyBlZmZlY3QgaXMgYWxzbyBjYWxsZWQgQ29sb3IgR3JhZGluZy4KKyAqCisgKiBUaGUgb2Jq
ZWN0IG5lZWRzIHRvIGJlIHByb3ZpZGVkIGFuIHVybCB0byBhIHRleHR1cmUgY29udGFpbmluZyB0
aGUgY29sb3IKKyAqIGxvb2stdXAgdGFibGU6IHRoZSB0ZXh0dXJlIG11c3QgYmUgMjU2IHBpeGVs
cyB3aWRlIGFuZCAxNiBwaXhlbHMgaGlnaC4KKyAqIFVzZSBhbiBpbWFnZSBlZGl0aW5nIHNvZnR3
YXJlIHRvIHR3ZWFrIHRoZSBMVVQgdG8gbWF0Y2ggeW91ciBuZWVkcy4KKyAqCisgKiBGb3IgYW4g
ZXhhbXBsZSBvZiBhIGNvbG9yIExVVCwgc2VlIGhlcmU6CisgKiBAc2VlIGh0dHA6Ly91ZG4uZXBp
Y2dhbWVzLmNvbS9UaHJlZS9yc3JjL1RocmVlL0NvbG9yR3JhZGluZy9SR0JUYWJsZTE2eDEucG5n
CisgKiBGb3IgZXhwbGFuYXRpb25zIG9uIGNvbG9yIGdyYWRpbmcsIHNlZSBoZXJlOgorICogQHNl
ZSBodHRwOi8vdWRuLmVwaWNnYW1lcy5jb20vVGhyZWUvQ29sb3JHcmFkaW5nLmh0bWwKKyAqCisg
Ki8KK3ZhciBDb2xvckNvcnJlY3Rpb25Qb3N0UHJvY2VzcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShDb2xvckNvcnJlY3Rpb25Qb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICBmdW5j
dGlvbiBDb2xvckNvcnJlY3Rpb25Qb3N0UHJvY2VzcyhuYW1lLCBjb2xvclRhYmxlVXJsLCBvcHRp
b25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSkgeworICAgICAgICB2
YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCAnY29sb3JDb3JyZWN0aW9uJywgbnVs
bCwgWydjb2xvclRhYmxlJ10sIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUs
IHJldXNhYmxlKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fY29sb3JUYWJsZVRleHR1cmUgPSBu
ZXcgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlRleHR1cmUiXShjb2xvclRhYmxlVXJsLCBjYW1lcmEuZ2V0U2NlbmUoKSwgdHJ1ZSwgZmFs
c2UsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJUZXh0dXJlIl0uVFJJTElORUFSX1NBTVBMSU5HTU9ERSk7CisgICAgICAgIF90aGlzLl9j
b2xvclRhYmxlVGV4dHVyZS5hbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsID0gMTsKKyAgICAgICAg
X3RoaXMuX2NvbG9yVGFibGVUZXh0dXJlLndyYXBVID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0
dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNT
TU9ERTsKKyAgICAgICAgX3RoaXMuX2NvbG9yVGFibGVUZXh0dXJlLndyYXBWID0gX01hdGVyaWFs
c19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUi
XS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgX3RoaXMub25BcHBseSA9IGZ1bmN0aW9uIChl
ZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJjb2xvclRhYmxlIiwgX3Ro
aXMuX2NvbG9yVGFibGVUZXh0dXJlKTsKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIF90aGlz
OworICAgIH0KKyAgICByZXR1cm4gQ29sb3JDb3JyZWN0aW9uUG9zdFByb2Nlc3M7Cit9KF9wb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb3N0UHJvY2VzcyJdKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9jb252b2x1dGlvblBvc3RQ
cm9jZXNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvY29udm9sdXRpb25Qb3N0UHJvY2Vz
cy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbnZvbHV0aW9uUG9zdFByb2Nlc3MgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29udm9sdXRpb25Qb3N0UHJvY2Vz
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29udm9sdXRpb25Qb3N0UHJvY2VzczsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIv
dHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bv
c3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICov
ICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1No
YWRlcnNfY29udm9sdXRpb25fZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvY29udm9sdXRpb24uZnJhZ21lbnQg
Ki8gIi4vU2hhZGVycy9jb252b2x1dGlvbi5mcmFnbWVudC50cyIpOworCisKKworCisvKioKKyAq
IFRoZSBDb252b2x1dGlvblBvc3RQcm9jZXNzIGFwcGxpZXMgYSAzeDMga2VybmVsIHRvIGV2ZXJ5
IHBpeGVsIG9mIHRoZQorICogaW5wdXQgdGV4dHVyZSB0byBwZXJmb3JtIGVmZmVjdHMgc3VjaCBh
cyBlZGdlIGRldGVjdGlvbiBvciBzaGFycGVuaW5nCisgKiBTZWUgaHR0cDovL2VuLndpa2lwZWRp
YS5vcmcvd2lraS9LZXJuZWxfKGltYWdlX3Byb2Nlc3NpbmcpCisgKi8KK3ZhciBDb252b2x1dGlv
blBvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKENvbnZvbHV0aW9u
UG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0
YW5jZSBDb252b2x1dGlvblBvc3RQcm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUg
b2YgdGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0ga2VybmVsIEFycmF5IG9mIDkgdmFsdWVzIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIDN4MyBrZXJuZWwgdG8gYmUgYXBwbGllZAorICAgICAqIEBwYXJh
bSBvcHRpb25zIFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQgcmF0aW8gdG8gZG93bnNpemUgdG8g
YmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisgICAgICogQHBhcmFtIGNhbWVyYSBU
aGUgY2FtZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAgICAgKiBAcGFyYW0gc2Ft
cGxpbmdNb2RlIFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhl
IHBhc3MuIChkZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3aGlj
aCB0aGUgcG9zdCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQgZW5n
aW5lKQorICAgICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBiZSBy
ZXVzZWQgb24gdGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKiBAcGFyYW0g
dGV4dHVyZVR5cGUgVHlwZSBvZiB0ZXh0dXJlcyB1c2VkIHdoZW4gcGVyZm9ybWluZyB0aGUgcG9z
dCBwcm9jZXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDb252b2x1dGlv
blBvc3RQcm9jZXNzKG5hbWUsIAorICAgIC8qKiBBcnJheSBvZiA5IHZhbHVlcyBjb3JyZXNwb25k
aW5nIHRvIHRoZSAzeDMga2VybmVsIHRvIGJlIGFwcGxpZWQgKi8KKyAgICBrZXJuZWwsIG9wdGlv
bnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlLCB0ZXh0dXJlVHlwZSkg
eworICAgICAgICBpZiAodGV4dHVyZVR5cGUgPT09IHZvaWQgMCkgeyB0ZXh0dXJlVHlwZSA9IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMi
XS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgImNvbnZvbHV0aW9uIiwgWyJrZXJuZWwiLCAic2NyZWVuU2l6ZSJd
LCBudWxsLCBvcHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwg
bnVsbCwgdGV4dHVyZVR5cGUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmtlcm5lbCA9IGtlcm5l
bDsKKyAgICAgICAgX3RoaXMub25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAg
ICAgIGVmZmVjdC5zZXRGbG9hdDIoInNjcmVlblNpemUiLCBfdGhpcy53aWR0aCwgX3RoaXMuaGVp
Z2h0KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRBcnJheSgia2VybmVsIiwgX3RoaXMua2VybmVs
KTsKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvLyBTdGF0
aWNzCisgICAgLyoqCisgICAgICogRWRnZSBkZXRlY3Rpb24gMCBzZWUgaHR0cHM6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvS2VybmVsXyhpbWFnZV9wcm9jZXNzaW5nKQorICAgICAqLworICAgIENv
bnZvbHV0aW9uUG9zdFByb2Nlc3MuRWRnZURldGVjdDBLZXJuZWwgPSBbMSwgMCwgLTEsIDAsIDAs
IDAsIC0xLCAwLCAxXTsKKyAgICAvKioKKyAgICAgKiBFZGdlIGRldGVjdGlvbiAxIHNlZSBodHRw
czovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9LZXJuZWxfKGltYWdlX3Byb2Nlc3NpbmcpCisgICAg
ICovCisgICAgQ29udm9sdXRpb25Qb3N0UHJvY2Vzcy5FZGdlRGV0ZWN0MUtlcm5lbCA9IFswLCAx
LCAwLCAxLCAtNCwgMSwgMCwgMSwgMF07CisgICAgLyoqCisgICAgICogRWRnZSBkZXRlY3Rpb24g
MiBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvS2VybmVsXyhpbWFnZV9wcm9jZXNz
aW5nKQorICAgICAqLworICAgIENvbnZvbHV0aW9uUG9zdFByb2Nlc3MuRWRnZURldGVjdDJLZXJu
ZWwgPSBbLTEsIC0xLCAtMSwgLTEsIDgsIC0xLCAtMSwgLTEsIC0xXTsKKyAgICAvKioKKyAgICAg
KiBLZXJuZWwgdG8gc2hhcnBlbiBhbiBpbWFnZSBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3Jn
L3dpa2kvS2VybmVsXyhpbWFnZV9wcm9jZXNzaW5nKQorICAgICAqLworICAgIENvbnZvbHV0aW9u
UG9zdFByb2Nlc3MuU2hhcnBlbktlcm5lbCA9IFswLCAtMSwgMCwgLTEsIDUsIC0xLCAwLCAtMSwg
MF07CisgICAgLyoqCisgICAgICogS2VybmVsIHRvIGVtYm9zcyBhbiBpbWFnZSBzZWUgaHR0cHM6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvS2VybmVsXyhpbWFnZV9wcm9jZXNzaW5nKQorICAgICAq
LworICAgIENvbnZvbHV0aW9uUG9zdFByb2Nlc3MuRW1ib3NzS2VybmVsID0gWy0yLCAtMSwgMCwg
LTEsIDEsIDEsIDAsIDEsIDJdOworICAgIC8qKgorICAgICAqIEtlcm5lbCB0byBibHVyIGFuIGlt
YWdlIHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9LZXJuZWxfKGltYWdlX3Byb2Nl
c3NpbmcpCisgICAgICovCisgICAgQ29udm9sdXRpb25Qb3N0UHJvY2Vzcy5HYXVzc2lhbktlcm5l
bCA9IFswLCAxLCAwLCAxLCAxLCAxLCAwLCAxLCAwXTsKKyAgICByZXR1cm4gQ29udm9sdXRpb25Q
b3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vz
c2VzL2RlcHRoT2ZGaWVsZEJsdXJQb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQ
cm9jZXNzZXMvZGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBEZXB0aE9mRmllbGRCbHVyUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBEZXB0aE9mRmllbGRCbHVyUG9zdFByb2Nlc3M7IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3Rz
bGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVy
ZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1Rl
eHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmx1clBvc3RQ
cm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL2JsdXJQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2Vz
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5n
aW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKworCisKKworLyoq
CisgKiBUaGUgRGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzIGFwcGxpZWQgYSBibHVyIGluIGEg
Z2l2ZSBkaXJlY3Rpb24uCisgKiBUaGlzIGJsdXIgZGlmZmVycyBmcm9tIHRoZSBzdGFuZGFyZCBC
bHVyUG9zdFByb2Nlc3MgYXMgaXQgYXR0ZW1wdHMgdG8gYXZvaWQgYmx1cnJpbmcgcGl4ZWxzCisg
KiBiYXNlZCBvbiBzYW1wbGVzIHRoYXQgaGF2ZSBhIGxhcmdlIGRpZmZlcmVuY2UgaW4gZGlzdGFu
Y2UgdGhhbiB0aGUgY2VudGVyIHBpeGVsLgorICogU2VlIHNlY3Rpb24gMi42LjIgaHR0cDovL2Zp
bGVhZG1pbi5jcy5sdGguc2UvY3MvZWR1Y2F0aW9uL2VkYW4zNS9sZWN0dXJlcy8xMmRvZi5wZGYK
KyAqLwordmFyIERlcHRoT2ZGaWVsZEJsdXJQb3N0UHJvY2VzcyA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2V4dGVuZHMiXShEZXB0aE9mRmllbGRCbHVyUG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBDaXJjbGVPZkNvbmZ1c2lvblBvc3RQ
cm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAgICAg
KiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRoZSBlZmZlY3QgYmVsb25ncyB0by4KKyAgICAgKiBA
cGFyYW0gZGlyZWN0aW9uIFRoZSBkaXJlY3Rpb24gdGhlIGJsdXIgc2hvdWxkIGJlIGFwcGxpZWQu
CisgICAgICogQHBhcmFtIGtlcm5lbCBUaGUgc2l6ZSBvZiB0aGUga2VybmVsIHVzZWQgdG8gYmx1
ci4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlv
IHRvIGRvd25zaXplIHRvIGJlZm9yZSBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzLgorICAgICAq
IEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0byBhcHBseSB0aGUgcmVuZGVyIHBhc3MgdG8uCisg
ICAgICogQHBhcmFtIGNpcmNsZU9mQ29uZnVzaW9uIFRoZSBjaXJjbGUgb2YgY29uZnVzaW9uICsg
ZGVwdGggbWFwIHRvIGJlIHVzZWQgdG8gYXZvaWQgYmx1cnJpbmcgYWNjcm9zcyBlZGdlcworICAg
ICAqIEBwYXJhbSBpbWFnZVRvQmx1ciBUaGUgaW1hZ2UgdG8gYXBwbHkgdGhlIGJsdXIgdG8gKGRl
ZmF1bHQ6IEN1cnJlbnQgcmVuZGVyZWQgZnJhbWUpCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9k
ZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBwYXNzLiAo
ZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgd2hpY2ggdGhlIHBv
c3QgcHJvY2VzcyB3aWxsIGJlIGFwcGxpZWQuIChkZWZhdWx0OiBjdXJyZW50IGVuZ2luZSkKKyAg
ICAgKiBAcGFyYW0gcmV1c2FibGUgSWYgdGhlIHBvc3QgcHJvY2VzcyBjYW4gYmUgcmV1c2VkIG9u
IHRoZSBzYW1lIGZyYW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICogQHBhcmFtIHRleHR1cmVU
eXBlIFR5cGUgb2YgdGV4dHVyZXMgdXNlZCB3aGVuIHBlcmZvcm1pbmcgdGhlIHBvc3QgcHJvY2Vz
cy4gKGRlZmF1bHQ6IDApCisgICAgICogQHBhcmFtIGJsb2NrQ29tcGlsYXRpb24gSWYgY29tcGls
YXRpb24gb2YgdGhlIHNoYWRlciBzaG91bGQgbm90IGJlIGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9y
LiBUaGUgdXBkYXRlRWZmZWN0IG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjb21waWxlIHRoZSBzaGFk
ZXIgYXQgYSBsYXRlciB0aW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgZnVuY3Rp
b24gRGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzKG5hbWUsIHNjZW5lLCBkaXJlY3Rpb24sIGtl
cm5lbCwgb3B0aW9ucywgY2FtZXJhLCBjaXJjbGVPZkNvbmZ1c2lvbiwgaW1hZ2VUb0JsdXIsIHNh
bXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgdGV4dHVyZVR5cGUsIGJsb2NrQ29tcGlsYXRp
b24pIHsKKyAgICAgICAgaWYgKGltYWdlVG9CbHVyID09PSB2b2lkIDApIHsgaW1hZ2VUb0JsdXIg
PSBudWxsOyB9CisgICAgICAgIGlmIChzYW1wbGluZ01vZGUgPT09IHZvaWQgMCkgeyBzYW1wbGlu
Z01vZGUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERTsgfQorICAgICAgICBpZiAo
dGV4dHVyZVR5cGUgPT09IHZvaWQgMCkgeyB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9V
TlNJR05FRF9JTlQ7IH0KKyAgICAgICAgaWYgKGJsb2NrQ29tcGlsYXRpb24gPT09IHZvaWQgMCkg
eyBibG9ja0NvbXBpbGF0aW9uID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgZGlyZWN0aW9uLCBrZXJuZWwsIG9wdGlvbnMsIGNhbWVyYSwgc2Ft
cGxpbmdNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfQklMSU5FQVJfU0FNUExJTkdNT0RFLCBlbmdpbmUsIHJl
dXNhYmxlLCB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQsICIjZGVm
aW5lIERPRiAxXHJcbiIsIGJsb2NrQ29tcGlsYXRpb24pIHx8IHRoaXM7CisgICAgICAgIF90aGlz
LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKyAgICAgICAgX3RoaXMub25BcHBseU9ic2VydmFibGUu
YWRkKGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGlmIChpbWFnZVRvQmx1ciAhPSBu
dWxsKSB7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3Mo
InRleHR1cmVTYW1wbGVyIiwgaW1hZ2VUb0JsdXIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3NPdXRwdXQoImNpcmNsZU9mQ29uZnVz
aW9uU2FtcGxlciIsIGNpcmNsZU9mQ29uZnVzaW9uKTsKKyAgICAgICAgICAgIGlmIChzY2VuZS5h
Y3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCdjYW1lcmFN
aW5NYXhaJywgc2NlbmUuYWN0aXZlQ2FtZXJhLm1pblosIHNjZW5lLmFjdGl2ZUNhbWVyYS5tYXha
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAg
ICB9CisgICAgcmV0dXJuIERlcHRoT2ZGaWVsZEJsdXJQb3N0UHJvY2VzczsKK30oX2JsdXJQb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJCbHVyUG9zdFByb2Nlc3MiXSkp
OworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvZGVwdGhPZkZpZWxk
RWZmZWN0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9kZXB0aE9mRmllbGRFZmZlY3QudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IERlcHRoT2ZGaWVsZEVmZmVjdEJsdXJMZXZlbCwgRGVwdGhPZkZp
ZWxkRWZmZWN0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoT2ZG
aWVsZEVmZmVjdEJsdXJMZXZlbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGVwdGhPZkZpZWxkRWZm
ZWN0Qmx1ckxldmVsOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoT2ZGaWVsZEVmZmVjdCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gRGVwdGhPZkZpZWxkRWZmZWN0OyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5l
czYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4
dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQ
cm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQcm9j
ZXNzUmVuZGVyRWZmZWN0ICovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFBy
b2Nlc3NSZW5kZXJFZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2lyY2xl
T2ZDb25mdXNpb25Qb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jaXJjbGVPZkNvbmZ1c2lvblBvc3RQcm9jZXNzICovICIu
L1Bvc3RQcm9jZXNzZXMvY2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJvY2Vzcy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9kZXB0aE9mRmllbGRCbHVyUG9zdFByb2Nlc3NfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVwdGhPZkZp
ZWxkQmx1clBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvZGVwdGhPZkZpZWxkQmx1clBv
c3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlcHRoT2ZGaWVsZE1l
cmdlUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vZGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL2RlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3MudHMiKTsKKworCisKKworCisKKwor
LyoqCisgKiBTcGVjaWZpZXMgdGhlIGxldmVsIG9mIG1heCBibHVyIHRoYXQgc2hvdWxkIGJlIGFw
cGxpZWQgd2hlbiB1c2luZyB0aGUgZGVwdGggb2YgZmllbGQgZWZmZWN0CisgKi8KK3ZhciBEZXB0
aE9mRmllbGRFZmZlY3RCbHVyTGV2ZWw7CisoZnVuY3Rpb24gKERlcHRoT2ZGaWVsZEVmZmVjdEJs
dXJMZXZlbCkgeworICAgIC8qKgorICAgICAqIFN1YnRsZSBibHVyCisgICAgICovCisgICAgRGVw
dGhPZkZpZWxkRWZmZWN0Qmx1ckxldmVsW0RlcHRoT2ZGaWVsZEVmZmVjdEJsdXJMZXZlbFsiTG93
Il0gPSAwXSA9ICJMb3ciOworICAgIC8qKgorICAgICAqIE1lZGl1bSBibHVyCisgICAgICovCisg
ICAgRGVwdGhPZkZpZWxkRWZmZWN0Qmx1ckxldmVsW0RlcHRoT2ZGaWVsZEVmZmVjdEJsdXJMZXZl
bFsiTWVkaXVtIl0gPSAxXSA9ICJNZWRpdW0iOworICAgIC8qKgorICAgICAqIExhcmdlIGJsdXIK
KyAgICAgKi8KKyAgICBEZXB0aE9mRmllbGRFZmZlY3RCbHVyTGV2ZWxbRGVwdGhPZkZpZWxkRWZm
ZWN0Qmx1ckxldmVsWyJIaWdoIl0gPSAyXSA9ICJIaWdoIjsKK30pKERlcHRoT2ZGaWVsZEVmZmVj
dEJsdXJMZXZlbCB8fCAoRGVwdGhPZkZpZWxkRWZmZWN0Qmx1ckxldmVsID0ge30pKTsKKy8qKgor
ICogVGhlIGRlcHRoIG9mIGZpZWxkIGVmZmVjdCBhcHBsaWVzIGEgYmx1ciB0byBvYmplY3RzIHRo
YXQgYXJlIGNsb3NlciBvciBmdXJ0aGVyIGZyb20gd2hlcmUgdGhlIGNhbWVyYSBpcyBmb2N1c2lu
Zy4KKyAqLwordmFyIERlcHRoT2ZGaWVsZEVmZmVjdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShEZXB0aE9mRmllbGRFZmZlY3QsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyBhIG5ldyBpbnN0YW5jZSBEZXB0aE9mRmllbGRFZmZlY3QKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgVGhlIHNjZW5lIHRoZSBlZmZlY3QgYmVsb25ncyB0by4KKyAgICAgKiBAcGFyYW0gZGVwdGhU
ZXh0dXJlIFRoZSBkZXB0aCB0ZXh0dXJlIG9mIHRoZSBzY2VuZSB0byBjb21wdXRlIHRoZSBjaXJj
bGUgb2YgY29uZnVzaW9uLlRoaXMgbXVzdCBiZSBzZXQgaW4gb3JkZXIgZm9yIHRoaXMgdG8gZnVu
Y3Rpb24gYnV0IG1heSBiZSBzZXQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gaWYgbmVlZGVkLgorICAg
ICAqIEBwYXJhbSBwaXBlbGluZVRleHR1cmVUeXBlIFRoZSB0eXBlIG9mIHRleHR1cmUgdG8gYmUg
dXNlZCB3aGVuIHBlcmZvcm1pbmcgdGhlIHBvc3QgcHJvY2Vzc2luZy4KKyAgICAgKiBAcGFyYW0g
YmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxhdGlvbiBvZiB0aGUgc2hhZGVyIHNob3VsZCBub3Qg
YmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSB1cGRhdGVFZmZlY3QgbWV0aG9kIGNhbiBi
ZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRlciBhdCBhIGxhdGVyIHRpbWUuIChkZWZhdWx0OiBm
YWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBEZXB0aE9mRmllbGRFZmZlY3Qoc2NlbmUsIGRl
cHRoVGV4dHVyZSwgYmx1ckxldmVsLCBwaXBlbGluZVRleHR1cmVUeXBlLCBibG9ja0NvbXBpbGF0
aW9uKSB7CisgICAgICAgIGlmIChibHVyTGV2ZWwgPT09IHZvaWQgMCkgeyBibHVyTGV2ZWwgPSBE
ZXB0aE9mRmllbGRFZmZlY3RCbHVyTGV2ZWwuTG93OyB9CisgICAgICAgIGlmIChwaXBlbGluZVRl
eHR1cmVUeXBlID09PSB2b2lkIDApIHsgcGlwZWxpbmVUZXh0dXJlVHlwZSA9IDA7IH0KKyAgICAg
ICAgaWYgKGJsb2NrQ29tcGlsYXRpb24gPT09IHZvaWQgMCkgeyBibG9ja0NvbXBpbGF0aW9uID0g
ZmFsc2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NlbmUuZ2V0
RW5naW5lKCksICJkZXB0aCBvZiBmaWVsZCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiBfdGhpcy5fZWZmZWN0czsKKyAgICAgICAgfSwgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEBoaWRkZW4gSW50ZXJuYWwgcG9zdCBwcm9jZXNzZXMgaW4gZGVwdGgg
b2YgZmllbGQgZWZmZWN0CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fZWZmZWN0cyA9IFtd
OworICAgICAgICAvLyBDaXJjbGUgb2YgY29uZnVzaW9uIHZhbHVlIGZvciBlYWNoIHBpeGVsIGlz
IHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIHRvIGJsdXIgdGhhdCBwaXhlbAorICAgICAgICBf
dGhpcy5fY2lyY2xlT2ZDb25mdXNpb24gPSBuZXcgX2NpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nl
c3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJv
Y2VzcyJdKCJjaXJjbGVPZkNvbmZ1c2lvbiIsIGRlcHRoVGV4dHVyZSwgMSwgbnVsbCwgX01hdGVy
aWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1
cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgcGlw
ZWxpbmVUZXh0dXJlVHlwZSwgYmxvY2tDb21waWxhdGlvbik7CisgICAgICAgIC8vIENyZWF0ZSBh
IHB5cmFtaWQgb2YgYmx1cnJlZCBpbWFnZXMgKGVnLiBmdWxsU2l6ZSAxLzQgYmx1ciwgaGFsZiBz
aXplIDEvMiBibHVyLCBxdWFydGVyIHNpemUgMy80IGJsdXIsIGVpdGggc2l6ZSA0LzQgYmx1cikK
KyAgICAgICAgLy8gQmx1ciB0aGUgaW1hZ2UgYnV0IGRvIG5vdCBibHVyIG9uIHNoYXJwIGZhciB0
byBuZWFyIGRpc3RhbmNlIGNoYW5nZXMgdG8gYXZvaWQgYmxlZWRpbmcgYXJ0aWZhY3RzCisgICAg
ICAgIC8vIFNlZSBzZWN0aW9uIDIuNi4yIGh0dHA6Ly9maWxlYWRtaW4uY3MubHRoLnNlL2NzL2Vk
dWNhdGlvbi9lZGFuMzUvbGVjdHVyZXMvMTJkb2YucGRmCisgICAgICAgIF90aGlzLl9kZXB0aE9m
RmllbGRCbHVyWSA9IFtdOworICAgICAgICBfdGhpcy5fZGVwdGhPZkZpZWxkQmx1clggPSBbXTsK
KyAgICAgICAgdmFyIGJsdXJDb3VudCA9IDE7CisgICAgICAgIHZhciBrZXJuZWxTaXplID0gMTU7
CisgICAgICAgIHN3aXRjaCAoYmx1ckxldmVsKSB7CisgICAgICAgICAgICBjYXNlIERlcHRoT2ZG
aWVsZEVmZmVjdEJsdXJMZXZlbC5IaWdoOiB7CisgICAgICAgICAgICAgICAgYmx1ckNvdW50ID0g
MzsKKyAgICAgICAgICAgICAgICBrZXJuZWxTaXplID0gNTE7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIERlcHRoT2ZGaWVsZEVmZmVjdEJs
dXJMZXZlbC5NZWRpdW06IHsKKyAgICAgICAgICAgICAgICBibHVyQ291bnQgPSAyOworICAgICAg
ICAgICAgICAgIGtlcm5lbFNpemUgPSAzMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICBrZXJuZWxT
aXplID0gMTU7CisgICAgICAgICAgICAgICAgYmx1ckNvdW50ID0gMTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgYWRqdXN0ZWRL
ZXJuZWxTaXplID0ga2VybmVsU2l6ZSAvIE1hdGgucG93KDIsIGJsdXJDb3VudCAtIDEpOworICAg
ICAgICB2YXIgcmF0aW8gPSAxLjA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmx1ckNv
dW50OyBpKyspIHsKKyAgICAgICAgICAgIHZhciBibHVyWSA9IG5ldyBfZGVwdGhPZkZpZWxkQmx1
clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkRlcHRoT2ZGaWVsZEJs
dXJQb3N0UHJvY2VzcyJdKCJ2ZXJ0aWNsZSBibHVyIiwgc2NlbmUsIG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKDAsIDEuMCksIGFk
anVzdGVkS2VybmVsU2l6ZSwgcmF0aW8sIG51bGwsIF90aGlzLl9jaXJjbGVPZkNvbmZ1c2lvbiwg
aSA9PSAwID8gX3RoaXMuX2NpcmNsZU9mQ29uZnVzaW9uIDogbnVsbCwgX01hdGVyaWFsc19UZXh0
dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5CSUxJ
TkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgcGlwZWxpbmVUZXh0
dXJlVHlwZSwgYmxvY2tDb21waWxhdGlvbik7CisgICAgICAgICAgICBibHVyWS5hdXRvQ2xlYXIg
PSBmYWxzZTsKKyAgICAgICAgICAgIHJhdGlvID0gMC43NSAvIE1hdGgucG93KDIsIGkpOworICAg
ICAgICAgICAgdmFyIGJsdXJYID0gbmV3IF9kZXB0aE9mRmllbGRCbHVyUG9zdFByb2Nlc3NfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzIl0o
Imhvcml6b250YWwgYmx1ciIsIHNjZW5lLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjIiXSgxLjAsIDApLCBhZGp1c3RlZEtlcm5lbFNp
emUsIHJhdGlvLCBudWxsLCBfdGhpcy5fY2lyY2xlT2ZDb25mdXNpb24sIG51bGwsIF9NYXRlcmlh
bHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0dXJl
Il0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsIHBpcGVs
aW5lVGV4dHVyZVR5cGUsIGJsb2NrQ29tcGlsYXRpb24pOworICAgICAgICAgICAgYmx1clguYXV0
b0NsZWFyID0gZmFsc2U7CisgICAgICAgICAgICBfdGhpcy5fZGVwdGhPZkZpZWxkQmx1clkucHVz
aChibHVyWSk7CisgICAgICAgICAgICBfdGhpcy5fZGVwdGhPZkZpZWxkQmx1clgucHVzaChibHVy
WCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2V0IGFsbCBwb3N0IHByb2Nlc3NlcyBvbiB0aGUg
ZWZmZWN0LgorICAgICAgICBfdGhpcy5fZWZmZWN0cyA9IFtfdGhpcy5fY2lyY2xlT2ZDb25mdXNp
b25dOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF90aGlzLl9kZXB0aE9mRmllbGRCbHVy
WC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgX3RoaXMuX2VmZmVjdHMucHVzaChfdGhpcy5f
ZGVwdGhPZkZpZWxkQmx1cllbaV0pOworICAgICAgICAgICAgX3RoaXMuX2VmZmVjdHMucHVzaChf
dGhpcy5fZGVwdGhPZkZpZWxkQmx1clhbaV0pOworICAgICAgICB9CisgICAgICAgIC8vIE1lcmdl
IGJsdXJyZWQgaW1hZ2VzIHdpdGggb3JpZ2luYWwgaW1hZ2UgYmFzZWQgb24gY2lyY2xlT2ZDb25m
dXNpb24KKyAgICAgICAgX3RoaXMuX2RvZk1lcmdlID0gbmV3IF9kZXB0aE9mRmllbGRNZXJnZVBv
c3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkRlcHRoT2ZGaWVsZE1lcmdl
UG9zdFByb2Nlc3MiXSgiZG9mTWVyZ2UiLCBfdGhpcy5fY2lyY2xlT2ZDb25mdXNpb24sIF90aGlz
Ll9jaXJjbGVPZkNvbmZ1c2lvbiwgX3RoaXMuX2RlcHRoT2ZGaWVsZEJsdXJYLCByYXRpbywgbnVs
bCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBm
YWxzZSwgcGlwZWxpbmVUZXh0dXJlVHlwZSwgYmxvY2tDb21waWxhdGlvbik7CisgICAgICAgIF90
aGlzLl9kb2ZNZXJnZS5hdXRvQ2xlYXIgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2VmZmVjdHMu
cHVzaChfdGhpcy5fZG9mTWVyZ2UpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZXB0aE9mRmllbGRFZmZlY3QucHJvdG90eXBlLCAiZm9j
YWxMZW5ndGgiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2NpcmNsZU9mQ29uZnVzaW9uLmZvY2FsTGVuZ3RoOworICAgICAgICB9LAorICAg
ICAgICAvKioKKyAgICAgICAgICogVGhlIGZvY2FsIHRoZSBsZW5ndGggb2YgdGhlIGNhbWVyYSB1
c2VkIGluIHRoZSBlZmZlY3QgaW4gc2NlbmUgdW5pdHMvMTAwMCAoZWcuIG1pbGxpbWV0ZXIpCisg
ICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAg
dGhpcy5fY2lyY2xlT2ZDb25mdXNpb24uZm9jYWxMZW5ndGggPSB2YWx1ZTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERlcHRoT2ZGaWVsZEVmZmVjdC5wcm90
b3R5cGUsICJmU3RvcCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fY2lyY2xlT2ZDb25mdXNpb24uZlN0b3A7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBGLVN0b3Agb2YgdGhlIGVmZmVjdCdzIGNhbWVyYS4gVGhlIGRp
YW1ldGVyIG9mIHRoZSByZXN1bHRpbmcgYXBlcnR1cmUgY2FuIGJlIGNvbXB1dGVkIGJ5IGxlbnNT
aXplL2ZTdG9wLiAoZGVmYXVsdDogMS40KQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2NpcmNsZU9mQ29uZnVzaW9uLmZTdG9w
ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShE
ZXB0aE9mRmllbGRFZmZlY3QucHJvdG90eXBlLCAiZm9jdXNEaXN0YW5jZSIsIHsKKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2lyY2xlT2ZDb25m
dXNpb24uZm9jdXNEaXN0YW5jZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERpc3RhbmNlIGF3YXkgZnJvbSB0aGUgY2FtZXJhIHRvIGZvY3VzIG9uIGluIHNjZW5lIHVuaXRz
LzEwMDAgKGVnLiBtaWxsaW1ldGVyKS4gKGRlZmF1bHQ6IDIwMDApCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fY2lyY2xlT2ZD
b25mdXNpb24uZm9jdXNEaXN0YW5jZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoRGVwdGhPZkZpZWxkRWZmZWN0LnByb3RvdHlwZSwgImxlbnNT
aXplIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9jaXJjbGVPZkNvbmZ1c2lvbi5sZW5zU2l6ZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoq
CisgICAgICAgICAqIE1heCBsZW5zIHNpemUgaW4gc2NlbmUgdW5pdHMvMTAwMCAoZWcuIG1pbGxp
bWV0ZXIpLiBTdGFuZGFyZCBjYW1lcmFzIGFyZSA1MG1tLiAoZGVmYXVsdDogNTApIFRoZSBkaWFt
YXRlciBvZiB0aGUgcmVzdWx0aW5nIGFwZXJ0dXJlIGNhbiBiZSBjb21wdXRlZCBieSBsZW5zU2l6
ZS9mU3RvcC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9jaXJjbGVPZkNvbmZ1c2lvbi5sZW5zU2l6ZSA9IHZhbHVlOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAqIEdldCB0aGUgY3VycmVudCBjbGFzcyBuYW1l
IG9mIHRoZSBjdXJyZW50IGVmZmV0CisgICAgKiBAcmV0dXJucyAiRGVwdGhPZkZpZWxkRWZmZWN0
IgorICAgICovCisgICAgRGVwdGhPZkZpZWxkRWZmZWN0LnByb3RvdHlwZS5nZXRDbGFzc05hbWUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiRGVwdGhPZkZpZWxkRWZmZWN0IjsKKyAg
ICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZXB0aE9mRmllbGRFZmZlY3QucHJvdG90
eXBlLCAiZGVwdGhUZXh0dXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVwdGggdGV4
dHVyZSB0byBiZSB1c2VkIHRvIGNvbXB1dGUgdGhlIGNpcmNsZSBvZiBjb25mdXNpb24uIFRoaXMg
bXVzdCBiZSBzZXQgaGVyZSBvciBpbiB0aGUgY29uc3RydWN0b3IgaW4gb3JkZXIgZm9yIHRoZSBw
b3N0IHByb2Nlc3MgdG8gZnVuY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fY2lyY2xlT2ZDb25mdXNpb24uZGVwdGhU
ZXh0dXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIERpc3Bv
c2VzIGVhY2ggb2YgdGhlIGludGVybmFsIGVmZmVjdHMgZm9yIGEgZ2l2ZW4gY2FtZXJhLgorICAg
ICAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0byBkaXNwb3NlIHRoZSBlZmZlY3Qgb24uCisg
ICAgICovCisgICAgRGVwdGhPZkZpZWxkRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlRWZmZWN0cyA9
IGZ1bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgZm9yICh2YXIgZWZmZWN0SW5kZXggPSAwOyBl
ZmZlY3RJbmRleCA8IHRoaXMuX2VmZmVjdHMubGVuZ3RoOyBlZmZlY3RJbmRleCsrKSB7CisgICAg
ICAgICAgICB0aGlzLl9lZmZlY3RzW2VmZmVjdEluZGV4XS5kaXNwb3NlKGNhbWVyYSk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEBoaWRkZW4gSW50ZXJuYWwKKyAgICAgKi8K
KyAgICBEZXB0aE9mRmllbGRFZmZlY3QucHJvdG90eXBlLl91cGRhdGVFZmZlY3RzID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBmb3IgKHZhciBlZmZlY3RJbmRleCA9IDA7IGVmZmVjdEluZGV4IDwg
dGhpcy5fZWZmZWN0cy5sZW5ndGg7IGVmZmVjdEluZGV4KyspIHsKKyAgICAgICAgICAgIHRoaXMu
X2VmZmVjdHNbZWZmZWN0SW5kZXhdLnVwZGF0ZUVmZmVjdCgpOworICAgICAgICB9CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBJbnRlcm5hbAorICAgICAqIEByZXR1cm5zIGlmIGFsbCB0aGUgY29u
dGFpbmVkIHBvc3QgcHJvY2Vzc2VzIGFyZSByZWFkeS4KKyAgICAgKiBAaGlkZGVuCisgICAgICov
CisgICAgRGVwdGhPZkZpZWxkRWZmZWN0LnByb3RvdHlwZS5faXNSZWFkeSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgZm9yICh2YXIgZWZmZWN0SW5kZXggPSAwOyBlZmZlY3RJbmRleCA8IHRoaXMu
X2VmZmVjdHMubGVuZ3RoOyBlZmZlY3RJbmRleCsrKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMu
X2VmZmVjdHNbZWZmZWN0SW5kZXhdLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9OworICAgIHJldHVybiBEZXB0aE9mRmllbGRFZmZlY3Q7Cit9KF9Qb3N0UHJvY2Vzc2Vz
X1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0pKTsKKworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2RlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3Mu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9kZXB0aE9mRmllbGRNZXJnZVBvc3RQ
cm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRGVwdGhPZkZpZWxkTWVy
Z2VQb3N0UHJvY2Vzc09wdGlvbnMsIERlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3MgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJv
Y2Vzc09wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERlcHRoT2ZGaWVsZE1lcmdlUG9zdFBy
b2Nlc3NPcHRpb25zOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoT2ZGaWVsZE1lcmdlUG9z
dFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nl
c3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9w
b3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVz
L2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9TaGFkZXJzX2RlcHRoT2ZGaWVsZE1lcmdlX2ZyYWdtZW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2Rl
cHRoT2ZGaWVsZE1lcmdlLmZyYWdtZW50ICovICIuL1NoYWRlcnMvZGVwdGhPZkZpZWxkTWVyZ2Uu
ZnJhZ21lbnQudHMiKTsKKworCisKKworLyoqCisgKiBPcHRpb25zIHRvIGJlIHNldCB3aGVuIG1l
cmdpbmcgb3V0cHV0cyBmcm9tIHRoZSBkZWZhdWx0IHBpcGVsaW5lLgorICovCit2YXIgRGVwdGhP
ZkZpZWxkTWVyZ2VQb3N0UHJvY2Vzc09wdGlvbnMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisgICAgZnVuY3Rpb24gRGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2Vzc09wdGlvbnMoKSB7
CisgICAgfQorICAgIHJldHVybiBEZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNzT3B0aW9uczsK
K30oKSk7CisKKy8qKgorICogVGhlIERlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3MgbWVyZ2Vz
IGJsdXJyZWQgaW1hZ2VzIHdpdGggdGhlIG9yaWdpbmFsIGJhc2VkIG9uIHRoZSB2YWx1ZXMgb2Yg
dGhlIGNpcmNsZSBvZiBjb25mdXNpb24uCisgKi8KK3ZhciBEZXB0aE9mRmllbGRNZXJnZVBvc3RQ
cm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKERlcHRoT2ZGaWVsZE1lcmdl
UG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0
YW5jZSBvZiBEZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUg
VGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0gb3JpZ2luYWxGcm9tSW5wdXQg
UG9zdCBwcm9jZXNzIHdoaWNoJ3MgaW5wdXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgbWVyZ2UuCisg
ICAgICogQHBhcmFtIGNpcmNsZU9mQ29uZnVzaW9uIENpcmNsZSBvZiBjb25mdXNpb24gcG9zdCBw
cm9jZXNzIHdoaWNoJ3Mgb3V0cHV0IHdpbGwgYmUgdXNlZCB0byBibHVyIGVhY2ggcGl4ZWwuCisg
ICAgICogQHBhcmFtIGJsdXJTdGVwcyBCbHVyIHBvc3QgcHJvY2Vzc2VzIGZyb20gbG93IHRvIGhp
Z2ggd2hpY2ggd2lsbCBiZSBtaXhlZCB3aXRoIHRoZSBvcmlnaW5hbCBpbWFnZS4KKyAgICAgKiBA
cGFyYW0gb3B0aW9ucyBUaGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlvIHRvIGRvd25zaXpl
IHRvIGJlZm9yZSBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzLgorICAgICAqIEBwYXJhbSBjYW1l
cmEgVGhlIGNhbWVyYSB0byBhcHBseSB0aGUgcmVuZGVyIHBhc3MgdG8uCisgICAgICogQHBhcmFt
IHNhbXBsaW5nTW9kZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2VkIHdoZW4gY29tcHV0aW5n
IHRoZSBwYXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUg
d2hpY2ggdGhlIHBvc3QgcHJvY2VzcyB3aWxsIGJlIGFwcGxpZWQuIChkZWZhdWx0OiBjdXJyZW50
IGVuZ2luZSkKKyAgICAgKiBAcGFyYW0gcmV1c2FibGUgSWYgdGhlIHBvc3QgcHJvY2VzcyBjYW4g
YmUgcmV1c2VkIG9uIHRoZSBzYW1lIGZyYW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICogQHBh
cmFtIHRleHR1cmVUeXBlIFR5cGUgb2YgdGV4dHVyZXMgdXNlZCB3aGVuIHBlcmZvcm1pbmcgdGhl
IHBvc3QgcHJvY2Vzcy4gKGRlZmF1bHQ6IDApCisgICAgICogQHBhcmFtIGJsb2NrQ29tcGlsYXRp
b24gSWYgY29tcGlsYXRpb24gb2YgdGhlIHNoYWRlciBzaG91bGQgbm90IGJlIGRvbmUgaW4gdGhl
IGNvbnN0cnVjdG9yLiBUaGUgdXBkYXRlRWZmZWN0IG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjb21w
aWxlIHRoZSBzaGFkZXIgYXQgYSBsYXRlciB0aW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICov
CisgICAgZnVuY3Rpb24gRGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2VzcyhuYW1lLCBvcmlnaW5h
bEZyb21JbnB1dCwgY2lyY2xlT2ZDb25mdXNpb24sIGJsdXJTdGVwcywgb3B0aW9ucywgY2FtZXJh
LCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUsIHRleHR1cmVUeXBlLCBibG9ja0NvbXBp
bGF0aW9uKSB7CisgICAgICAgIGlmICh0ZXh0dXJlVHlwZSA9PT0gdm9pZCAwKSB7IHRleHR1cmVU
eXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNv
bnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICBpZiAoYmxvY2tD
b21waWxhdGlvbiA9PT0gdm9pZCAwKSB7IGJsb2NrQ29tcGlsYXRpb24gPSBmYWxzZTsgfQorICAg
ICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCAiZGVwdGhPZkZpZWxkTWVy
Z2UiLCBbXSwgWyJjaXJjbGVPZkNvbmZ1c2lvblNhbXBsZXIiLCAiYmx1clN0ZXAwIiwgImJsdXJT
dGVwMSIsICJibHVyU3RlcDIiXSwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2lu
ZSwgcmV1c2FibGUsIG51bGwsIHRleHR1cmVUeXBlLCB1bmRlZmluZWQsIG51bGwsIHRydWUpIHx8
IHRoaXM7CisgICAgICAgIF90aGlzLmJsdXJTdGVwcyA9IGJsdXJTdGVwczsKKyAgICAgICAgX3Ro
aXMub25BcHBseU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAg
IGVmZmVjdC5zZXRUZXh0dXJlRnJvbVBvc3RQcm9jZXNzKCJ0ZXh0dXJlU2FtcGxlciIsIG9yaWdp
bmFsRnJvbUlucHV0KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlRnJvbVBvc3RQcm9j
ZXNzT3V0cHV0KCJjaXJjbGVPZkNvbmZ1c2lvblNhbXBsZXIiLCBjaXJjbGVPZkNvbmZ1c2lvbik7
CisgICAgICAgICAgICBibHVyU3RlcHMuZm9yRWFjaChmdW5jdGlvbiAoc3RlcCwgaW5kZXgpIHsK
KyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2Vzc091dHB1dCgi
Ymx1clN0ZXAiICsgKGJsdXJTdGVwcy5sZW5ndGggLSBpbmRleCAtIDEpLCBzdGVwKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFibG9ja0NvbXBpbGF0aW9uKSB7
CisgICAgICAgICAgICBfdGhpcy51cGRhdGVFZmZlY3QoKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGVmZmVjdCB3
aXRoIHRoZSBjdXJyZW50IHBvc3QgcHJvY2VzcyBjb21waWxlIHRpbWUgdmFsdWVzIGFuZCByZWNv
bXBpbGVzIHRoZSBzaGFkZXIuCisgICAgICogQHBhcmFtIGRlZmluZXMgRGVmaW5lIHN0YXRlbWVu
dHMgdGhhdCBzaG91bGQgYmUgYWRkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2hhZGVyLiAo
ZGVmYXVsdDogbnVsbCkKKyAgICAgKiBAcGFyYW0gdW5pZm9ybXMgU2V0IG9mIHVuaWZvcm0gdmFy
aWFibGVzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHNoYWRlci4gKGRlZmF1bHQ6IG51bGwp
CisgICAgICogQHBhcmFtIHNhbXBsZXJzIFNldCBvZiBUZXh0dXJlMkQgdmFyaWFibGVzIHRoYXQg
d2lsbCBiZSBwYXNzZWQgdG8gdGhlIHNoYWRlci4gKGRlZmF1bHQ6IG51bGwpCisgICAgICogQHBh
cmFtIGluZGV4UGFyYW1ldGVycyBUaGUgaW5kZXggcGFyYW1ldGVycyB0byBiZSB1c2VkIGZvciBi
YWJ5bG9ucyBpbmNsdWRlIHN5bnRheCAiI2luY2x1ZGU8a2VybmVsQmx1clZhcnlpbmdEZWNsYXJh
dGlvbj5bMC4udmFyeWluZ0NvdW50XSIuIChkZWZhdWx0OiB1bmRlZmluZWQpIFNlZSB1c2FnZSBp
biBiYWJ5bG9uLmJsdXJQb3N0UHJvY2Vzcy50cyBhbmQga2VybmVsQmx1ci52ZXJ0ZXguZngKKyAg
ICAgKiBAcGFyYW0gb25Db21waWxlZCBDYWxsZWQgd2hlbiB0aGUgc2hhZGVyIGhhcyBiZWVuIGNv
bXBpbGVkLgorICAgICAqIEBwYXJhbSBvbkVycm9yIENhbGxlZCBpZiB0aGVyZSBpcyBhbiBlcnJv
ciB3aGVuIGNvbXBpbGluZyBhIHNoYWRlci4KKyAgICAgKi8KKyAgICBEZXB0aE9mRmllbGRNZXJn
ZVBvc3RQcm9jZXNzLnByb3RvdHlwZS51cGRhdGVFZmZlY3QgPSBmdW5jdGlvbiAoZGVmaW5lcywg
dW5pZm9ybXMsIHNhbXBsZXJzLCBpbmRleFBhcmFtZXRlcnMsIG9uQ29tcGlsZWQsIG9uRXJyb3Ip
IHsKKyAgICAgICAgaWYgKGRlZmluZXMgPT09IHZvaWQgMCkgeyBkZWZpbmVzID0gbnVsbDsgfQor
ICAgICAgICBpZiAodW5pZm9ybXMgPT09IHZvaWQgMCkgeyB1bmlmb3JtcyA9IG51bGw7IH0KKyAg
ICAgICAgaWYgKHNhbXBsZXJzID09PSB2b2lkIDApIHsgc2FtcGxlcnMgPSBudWxsOyB9CisgICAg
ICAgIGlmICghZGVmaW5lcykgeworICAgICAgICAgICAgZGVmaW5lcyA9ICIiOworICAgICAgICAg
ICAgZGVmaW5lcyArPSAiI2RlZmluZSBCTFVSX0xFVkVMICIgKyAodGhpcy5ibHVyU3RlcHMubGVu
Z3RoIC0gMSkgKyAiXG4iOworICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUudXBk
YXRlRWZmZWN0LmNhbGwodGhpcywgZGVmaW5lcywgdW5pZm9ybXMsIHNhbXBsZXJzLCBpbmRleFBh
cmFtZXRlcnMsIG9uQ29tcGlsZWQsIG9uRXJyb3IpOworICAgIH07CisgICAgcmV0dXJuIERlcHRo
T2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3M7Cit9KF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJQb3N0UHJvY2VzcyJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vUG9zdFByb2Nlc3Nlcy9kaXNwbGF5UGFzc1Bvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bv
c3RQcm9jZXNzZXMvZGlzcGxheVBhc3NQb3N0UHJvY2Vzcy50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IERpc3BsYXlQYXNzUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiRGlzcGxheVBhc3NQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
RGlzcGxheVBhc3NQb3N0UHJvY2VzczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9j
ZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVy
c19kaXNwbGF5UGFzc19mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9kaXNwbGF5UGFzcy5mcmFnbWVudCAqLyAi
Li9TaGFkZXJzL2Rpc3BsYXlQYXNzLmZyYWdtZW50LnRzIik7CisKKworCisvKioKKyAqIERpc3Bs
YXlQYXNzUG9zdFByb2Nlc3Mgd2hpY2ggcHJvZHVjZXMgYW4gb3V0cHV0IHRoZSBzYW1lIGFzIGl0
J3MgaW5wdXQKKyAqLwordmFyIERpc3BsYXlQYXNzUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19leHRlbmRzIl0oRGlzcGxheVBhc3NQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIHRoZSBEaXNwbGF5UGFzc1Bvc3RQcm9jZXNzCisgICAgICogQHBh
cmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBU
aGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlvIHRvIGRvd25zaXplIHRvIGJlZm9yZSBjb21w
dXRpbmcgdGhlIHJlbmRlciBwYXNzLgorICAgICAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0
byBhcHBseSB0aGUgcmVuZGVyIHBhc3MgdG8uCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBU
aGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBwYXNzLiAoZGVm
YXVsdDogMCkKKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgd2hpY2ggdGhlIHBvc3Qg
cHJvY2VzcyB3aWxsIGJlIGFwcGxpZWQuIChkZWZhdWx0OiBjdXJyZW50IGVuZ2luZSkKKyAgICAg
KiBAcGFyYW0gcmV1c2FibGUgSWYgdGhlIHBvc3QgcHJvY2VzcyBjYW4gYmUgcmV1c2VkIG9uIHRo
ZSBzYW1lIGZyYW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgZnVuY3Rpb24gRGlz
cGxheVBhc3NQb3N0UHJvY2VzcyhuYW1lLCBvcHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwg
ZW5naW5lLCByZXVzYWJsZSkgeworICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgbmFt
ZSwgImRpc3BsYXlQYXNzIiwgWyJwYXNzU2FtcGxlciJdLCBbInBhc3NTYW1wbGVyIl0sIG9wdGlv
bnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB8fCB0aGlzOworICAg
IH0KKyAgICByZXR1cm4gRGlzcGxheVBhc3NQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2V4dHJhY3RIaWdobGlnaHRzUG9zdFByb2Nl
c3MudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9leHRyYWN0SGlnaGxpZ2h0c1Bv
c3RQcm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRXh0cmFjdEhpZ2hs
aWdodHNQb3N0UHJvY2VzcyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJF
eHRyYWN0SGlnaGxpZ2h0c1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFeHRyYWN0
SGlnaGxpZ2h0c1Bvc3RQcm9jZXNzOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
dHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nl
c3Nlcy9wb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb25zdGFudHMgKi8gIi4vTWF0aHMvbWF0aC5jb25z
dGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfZXh0cmFjdEhpZ2hsaWdodHNfZnJhZ21lbnRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1No
YWRlcnMvZXh0cmFjdEhpZ2hsaWdodHMuZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9leHRyYWN0SGln
aGxpZ2h0cy5mcmFnbWVudC50cyIpOworCisKKworCisKKy8qKgorICogVGhlIGV4dHJhY3QgaGln
aGxpZ2h0cyBwb3N0IHByb2Nlc3Mgc2V0cyBhbGwgcGl4ZWxzIHRvIGJsYWNrIGV4Y2VwdCBwaXhl
bHMgYWJvdmUgdGhlIHNwZWNpZmllZCBsdW1pbmFuY2UgdGhyZXNob2xkLiBVc2VkIGFzIHRoZSBm
aXJzdCBzdGVwIGZvciBhIGJsb29tIGVmZmVjdC4KKyAqLwordmFyIEV4dHJhY3RIaWdobGlnaHRz
UG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oRXh0cmFjdEhpZ2hs
aWdodHNQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBFeHRyYWN0SGlnaGxpZ2h0
c1Bvc3RQcm9jZXNzKG5hbWUsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUs
IHJldXNhYmxlLCB0ZXh0dXJlVHlwZSwgYmxvY2tDb21waWxhdGlvbikgeworICAgICAgICBpZiAo
dGV4dHVyZVR5cGUgPT09IHZvaWQgMCkgeyB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9V
TlNJR05FRF9JTlQ7IH0KKyAgICAgICAgaWYgKGJsb2NrQ29tcGlsYXRpb24gPT09IHZvaWQgMCkg
eyBibG9ja0NvbXBpbGF0aW9uID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgImV4dHJhY3RIaWdobGlnaHRzIiwgWyJ0aHJlc2hvbGQiLCAiZXhw
b3N1cmUiXSwgbnVsbCwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgcmV1
c2FibGUsIG51bGwsIHRleHR1cmVUeXBlLCB1bmRlZmluZWQsIG51bGwsIGJsb2NrQ29tcGlsYXRp
b24pIHx8IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbHVtaW5hbmNlIHRocmVz
aG9sZCwgcGl4ZWxzIGJlbG93IHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gYmxhY2suCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy50aHJlc2hvbGQgPSAwLjk7CisgICAgICAgIC8qKiBAaGlk
ZGVuICovCisgICAgICAgIF90aGlzLl9leHBvc3VyZSA9IDE7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBQb3N0IHByb2Nlc3Mgd2hpY2ggaGFzIHRoZSBpbnB1dCB0ZXh0dXJlIHRvIGJlIHVzZWQg
d2hlbiBwZXJmb3JtaW5nIGhpZ2hsaWdodCBleHRyYWN0aW9uCisgICAgICAgICAqIEBoaWRkZW4K
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9pbnB1dFBvc3RQcm9jZXNzID0gbnVsbDsKKyAg
ICAgICAgX3RoaXMub25BcHBseU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAg
ICAgICAgICAgIGlmIChfdGhpcy5faW5wdXRQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAg
IGVmZmVjdC5zZXRUZXh0dXJlRnJvbVBvc3RQcm9jZXNzKCJ0ZXh0dXJlU2FtcGxlciIsIF90aGlz
Ll9pbnB1dFBvc3RQcm9jZXNzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVmZmVjdC5z
ZXRGbG9hdCgndGhyZXNob2xkJywgTWF0aC5wb3coX3RoaXMudGhyZXNob2xkLCBfTWF0aHNfbWF0
aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9HYW1tYVNwYWNlIl0p
KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgnZXhwb3N1cmUnLCBfdGhpcy5fZXhwb3N1
cmUpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICByZXR1
cm4gRXh0cmFjdEhpZ2hsaWdodHNQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2ZpbHRlclBvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0
UHJvY2Vzc2VzL2ZpbHRlclBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZpbHRl
clBvc3RQcm9jZXNzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZpbHRl
clBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWx0ZXJQb3N0UHJvY2VzczsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19maWx0ZXJfZnJhZ21lbnRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMv
ZmlsdGVyLmZyYWdtZW50ICovICIuL1NoYWRlcnMvZmlsdGVyLmZyYWdtZW50LnRzIik7CisKKwor
CisvKioKKyAqIEFwcGxpZXMgYSBrZXJuZWwgZmlsdGVyIHRvIHRoZSBpbWFnZQorICovCit2YXIg
RmlsdGVyUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oRmlsdGVy
UG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAgLyoqCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFt
ZSBUaGUgbmFtZSBvZiB0aGUgZWZmZWN0LgorICAgICAqIEBwYXJhbSBrZXJuZWxNYXRyaXggVGhl
IG1hdHJpeCB0byBiZSBhcHBsaWVkIHRvIHRoZSBpbWFnZQorICAgICAqIEBwYXJhbSBvcHRpb25z
IFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQgcmF0aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNv
bXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisgICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJh
IHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2Rl
IFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChk
ZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9z
dCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAg
ICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24g
dGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBG
aWx0ZXJQb3N0UHJvY2VzcyhuYW1lLCAKKyAgICAvKiogVGhlIG1hdHJpeCB0byBiZSBhcHBsaWVk
IHRvIHRoZSBpbWFnZSAqLworICAgIGtlcm5lbE1hdHJpeCwgb3B0aW9ucywgY2FtZXJhLCBzYW1w
bGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgImZpbHRlciIsIFsia2VybmVsTWF0cml4Il0sIG51bGwsIG9wdGlv
bnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB8fCB0aGlzOworICAg
ICAgICBfdGhpcy5rZXJuZWxNYXRyaXggPSBrZXJuZWxNYXRyaXg7CisgICAgICAgIF90aGlzLm9u
QXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0TWF0cml4
KCJrZXJuZWxNYXRyaXgiLCBfdGhpcy5rZXJuZWxNYXRyaXgpOworICAgICAgICB9OworICAgICAg
ICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIHJldHVybiBGaWx0ZXJQb3N0UHJvY2VzczsKK30o
X3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0p
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2Z4YWFQb3N0UHJv
Y2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvZnhhYVBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBGeGFhUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRnhhYVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGeGFhUG9zdFByb2Nl
c3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8g
Ii4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vcG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJv
Y2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
RW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19meGFhX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2Z4YWEuZnJh
Z21lbnQgKi8gIi4vU2hhZGVycy9meGFhLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1NoYWRlcnNfZnhhYV92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZnhhYS52ZXJ0ZXggKi8gIi4v
U2hhZGVycy9meGFhLnZlcnRleC50cyIpOworCisKKworCisKKworLyoqCisgKiBGeGFhIHBvc3Qg
cHJvY2VzcworICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9f
dXNlX3Bvc3Rwcm9jZXNzZXMjZnhhYQorICovCit2YXIgRnhhYVBvc3RQcm9jZXNzID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEZ4YWFQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICBm
dW5jdGlvbiBGeGFhUG9zdFByb2Nlc3MobmFtZSwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01v
ZGUsIGVuZ2luZSwgcmV1c2FibGUsIHRleHR1cmVUeXBlKSB7CisgICAgICAgIGlmIChjYW1lcmEg
PT09IHZvaWQgMCkgeyBjYW1lcmEgPSBudWxsOyB9CisgICAgICAgIGlmICh0ZXh0dXJlVHlwZSA9
PT0gdm9pZCAwKSB7IHRleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsg
fQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCAiZnhhYSIsIFsi
dGV4ZWxTaXplIl0sIG51bGwsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlIHx8IF9NYXRl
cmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0
dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBlbmdpbmUsIHJldXNhYmxlLCBudWxsLCB0ZXh0
dXJlVHlwZSwgImZ4YWEiLCB1bmRlZmluZWQsIHRydWUpIHx8IHRoaXM7CisgICAgICAgIHZhciBk
ZWZpbmVzID0gX3RoaXMuX2dldERlZmluZXMoKTsKKyAgICAgICAgX3RoaXMudXBkYXRlRWZmZWN0
KGRlZmluZXMpOworICAgICAgICBfdGhpcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24g
KGVmZmVjdCkgeworICAgICAgICAgICAgdmFyIHRleGVsU2l6ZSA9IF90aGlzLnRleGVsU2l6ZTsK
KyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDIoInRleGVsU2l6ZSIsIHRleGVsU2l6ZS54LCB0
ZXhlbFNpemUueSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQor
ICAgIEZ4YWFQb3N0UHJvY2Vzcy5wcm90b3R5cGUuX2dldERlZmluZXMgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLmdldEVuZ2luZSgpOworICAgICAgICBpZiAoIWVu
Z2luZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IGdsSW5mbyA9IGVuZ2luZS5nZXRHbEluZm8oKTsKKyAgICAgICAgaWYgKGdsSW5mbyAmJiBnbElu
Zm8ucmVuZGVyZXIgJiYgZ2xJbmZvLnJlbmRlcmVyLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigibWFs
aSIpID4gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiAiI2RlZmluZSBNQUxJIDFcbiI7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICByZXR1cm4gRnhhYVBvc3RQ
cm9jZXNzOworfShfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUG9z
dFByb2Nlc3MiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMv
Z3JhaW5Qb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2VzL2dyYWluUG9zdFByb2Nlc3Mu
dHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBHcmFpblBvc3RQcm9jZXNzICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkdyYWluUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIEdyYWluUG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0
c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vz
c2VzL3Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2dyYWluX2ZyYWdtZW50X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFk
ZXJzL2dyYWluLmZyYWdtZW50ICovICIuL1NoYWRlcnMvZ3JhaW4uZnJhZ21lbnQudHMiKTsKKwor
CisKKworLyoqCisgKiBUaGUgR3JhaW5Qb3N0UHJvY2VzcyBhZGRzIG5vaXNlIHRvIHRoZSBpbWFn
ZSBhdCBtaWQgbHVtaW5hbmNlIGxldmVscworICovCit2YXIgR3JhaW5Qb3N0UHJvY2VzcyA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShHcmFpblBvc3RQcm9jZXNzLCBfc3VwZXIpOwor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgQHNlZSBHcmFpblBvc3RQ
cm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAgICAg
KiBAcGFyYW0gb3B0aW9ucyBUaGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlvIHRvIGRvd25z
aXplIHRvIGJlZm9yZSBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzLgorICAgICAqIEBwYXJhbSBj
YW1lcmEgVGhlIGNhbWVyYSB0byBhcHBseSB0aGUgcmVuZGVyIHBhc3MgdG8uCisgICAgICogQHBh
cmFtIHNhbXBsaW5nTW9kZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2VkIHdoZW4gY29tcHV0
aW5nIHRoZSBwYXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdp
bmUgd2hpY2ggdGhlIHBvc3QgcHJvY2VzcyB3aWxsIGJlIGFwcGxpZWQuIChkZWZhdWx0OiBjdXJy
ZW50IGVuZ2luZSkKKyAgICAgKiBAcGFyYW0gcmV1c2FibGUgSWYgdGhlIHBvc3QgcHJvY2VzcyBj
YW4gYmUgcmV1c2VkIG9uIHRoZSBzYW1lIGZyYW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICog
QHBhcmFtIHRleHR1cmVUeXBlIFR5cGUgb2YgdGV4dHVyZXMgdXNlZCB3aGVuIHBlcmZvcm1pbmcg
dGhlIHBvc3QgcHJvY2Vzcy4gKGRlZmF1bHQ6IDApCisgICAgICogQHBhcmFtIGJsb2NrQ29tcGls
YXRpb24gSWYgY29tcGlsYXRpb24gb2YgdGhlIHNoYWRlciBzaG91bGQgbm90IGJlIGRvbmUgaW4g
dGhlIGNvbnN0cnVjdG9yLiBUaGUgdXBkYXRlRWZmZWN0IG1ldGhvZCBjYW4gYmUgdXNlZCB0byBj
b21waWxlIHRoZSBzaGFkZXIgYXQgYSBsYXRlciB0aW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAg
ICovCisgICAgZnVuY3Rpb24gR3JhaW5Qb3N0UHJvY2VzcyhuYW1lLCBvcHRpb25zLCBjYW1lcmEs
IHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgdGV4dHVyZVR5cGUsIGJsb2NrQ29tcGls
YXRpb24pIHsKKyAgICAgICAgaWYgKHRleHR1cmVUeXBlID09PSB2b2lkIDApIHsgdGV4dHVyZVR5
cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAgIGlmIChibG9ja0Nv
bXBpbGF0aW9uID09PSB2b2lkIDApIHsgYmxvY2tDb21waWxhdGlvbiA9IGZhbHNlOyB9CisgICAg
ICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsICJncmFpbiIsIFsiaW50ZW5z
aXR5IiwgImFuaW1hdGVkU2VlZCJdLCBbXSwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01vZGUs
IGVuZ2luZSwgcmV1c2FibGUsIG51bGwsIHRleHR1cmVUeXBlLCB1bmRlZmluZWQsIG51bGwsIGJs
b2NrQ29tcGlsYXRpb24pIHx8IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgaW50
ZW5zaXR5IG9mIHRoZSBncmFpbiBhZGRlZCAoZGVmYXVsdDogMzApCisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5pbnRlbnNpdHkgPSAzMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRo
ZSBncmFpbiBzaG91bGQgYmUgcmFuZG9taXplZCBvbiBldmVyeSBmcmFtZQorICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMuYW5pbWF0ZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMub25BcHBseU9i
c2VydmFibGUuYWRkKGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRG
bG9hdCgnaW50ZW5zaXR5JywgX3RoaXMuaW50ZW5zaXR5KTsKKyAgICAgICAgICAgIGVmZmVjdC5z
ZXRGbG9hdCgnYW5pbWF0ZWRTZWVkJywgX3RoaXMuYW5pbWF0ZWQgPyBNYXRoLnJhbmRvbSgpICsg
MSA6IDEpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBy
ZXR1cm4gR3JhaW5Qb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9Qb3N0UHJvY2Vzc2VzL2hpZ2hsaWdodHNQb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQ
cm9jZXNzZXMvaGlnaGxpZ2h0c1Bvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBIaWdobGlnaHRzUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiSGlnaGxpZ2h0c1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBIaWdobGln
aHRzUG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bv
c3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2hpZ2hsaWdodHNfZnJhZ21lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRl
cnMvaGlnaGxpZ2h0cy5mcmFnbWVudCAqLyAiLi9TaGFkZXJzL2hpZ2hsaWdodHMuZnJhZ21lbnQu
dHMiKTsKKworCisKKworLyoqCisgKiBFeHRyYWN0cyBoaWdobGlnaHRzIGZyb20gdGhlIGltYWdl
CisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfcG9z
dHByb2Nlc3NlcworICovCit2YXIgSGlnaGxpZ2h0c1Bvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZXh0ZW5kcyJdKEhpZ2hsaWdodHNQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICAv
KioKKyAgICAgKiBFeHRyYWN0cyBoaWdobGlnaHRzIGZyb20gdGhlIGltYWdlCisgICAgICogQHNl
ZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNz
ZXMKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZWZmZWN0LgorICAgICAqIEBw
YXJhbSBvcHRpb25zIFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQgcmF0aW8gdG8gZG93bnNpemUg
dG8gYmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisgICAgICogQHBhcmFtIGNhbWVy
YSBUaGUgY2FtZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAgICAgKiBAcGFyYW0g
c2FtcGxpbmdNb2RlIFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcg
dGhlIHBhc3MuIChkZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3
aGljaCB0aGUgcG9zdCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQg
ZW5naW5lKQorICAgICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBi
ZSByZXVzZWQgb24gdGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKiBAcGFy
YW0gdGV4dHVyZVR5cGUgVHlwZSBvZiB0ZXh0dXJlIGZvciB0aGUgcG9zdCBwcm9jZXNzIChkZWZh
dWx0OiBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKQorICAgICAqLworICAgIGZ1bmN0
aW9uIEhpZ2hsaWdodHNQb3N0UHJvY2VzcyhuYW1lLCBvcHRpb25zLCBjYW1lcmEsIHNhbXBsaW5n
TW9kZSwgZW5naW5lLCByZXVzYWJsZSwgdGV4dHVyZVR5cGUpIHsKKyAgICAgICAgaWYgKHRleHR1
cmVUeXBlID09PSB2b2lkIDApIHsgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdO
RURfSU5UOyB9CisgICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCAiaGlnaGxp
Z2h0cyIsIG51bGwsIG51bGwsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUs
IHJldXNhYmxlLCBudWxsLCB0ZXh0dXJlVHlwZSkgfHwgdGhpczsKKyAgICB9CisgICAgcmV0dXJu
IEhpZ2hsaWdodHNQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9Qb3N0UHJvY2Vzc2VzL2ltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9Qb3N0UHJvY2Vzc2VzL2ltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2VzczsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0ZXJpYWxzL2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gKi8gIi4vTWF0ZXJpYWxz
L2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vcG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJv
Y2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5lU3RvcmUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3Rh
bnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNfaW1hZ2VQcm9jZXNzaW5nX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2ltYWdlUHJvY2Vz
c2luZy5mcmFnbWVudCAqLyAiLi9TaGFkZXJzL2ltYWdlUHJvY2Vzc2luZy5mcmFnbWVudC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX3Bvc3Rwcm9jZXNzX3ZlcnRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
U2hhZGVycy9wb3N0cHJvY2Vzcy52ZXJ0ZXggKi8gIi4vU2hhZGVycy9wb3N0cHJvY2Vzcy52ZXJ0
ZXgudHMiKTsKKworCisKKworCisKKworCisvKioKKyAqIEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9j
ZXNzCisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vf
cG9zdHByb2Nlc3NlcyNpbWFnZXByb2Nlc3NpbmcKKyAqLwordmFyIEltYWdlUHJvY2Vzc2luZ1Bv
c3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEltYWdlUHJvY2Vzc2lu
Z1Bvc3RQcm9jZXNzLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIEltYWdlUHJvY2Vzc2luZ1Bvc3RQ
cm9jZXNzKG5hbWUsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNh
YmxlLCB0ZXh0dXJlVHlwZSwgaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbikgeworICAgICAg
ICBpZiAoY2FtZXJhID09PSB2b2lkIDApIHsgY2FtZXJhID0gbnVsbDsgfQorICAgICAgICBpZiAo
dGV4dHVyZVR5cGUgPT09IHZvaWQgMCkgeyB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9V
TlNJR05FRF9JTlQ7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFt
ZSwgImltYWdlUHJvY2Vzc2luZyIsIFtdLCBbXSwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01v
ZGUsIGVuZ2luZSwgcmV1c2FibGUsIG51bGwsIHRleHR1cmVUeXBlLCAicG9zdHByb2Nlc3MiLCBu
dWxsLCB0cnVlKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fZnJvbUxpbmVhclNwYWNlID0gdHJ1
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgY2FjaGUgcHJldmVudGluZyBHQy4K
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9kZWZpbmVzID0geworICAgICAgICAgICAgSU1B
R0VQUk9DRVNTSU5HOiBmYWxzZSwKKyAgICAgICAgICAgIFZJR05FVFRFOiBmYWxzZSwKKyAgICAg
ICAgICAgIFZJR05FVFRFQkxFTkRNT0RFTVVMVElQTFk6IGZhbHNlLAorICAgICAgICAgICAgVklH
TkVUVEVCTEVORE1PREVPUEFRVUU6IGZhbHNlLAorICAgICAgICAgICAgVE9ORU1BUFBJTkc6IGZh
bHNlLAorICAgICAgICAgICAgVE9ORU1BUFBJTkdfQUNFUzogZmFsc2UsCisgICAgICAgICAgICBD
T05UUkFTVDogZmFsc2UsCisgICAgICAgICAgICBDT0xPUkNVUlZFUzogZmFsc2UsCisgICAgICAg
ICAgICBDT0xPUkdSQURJTkc6IGZhbHNlLAorICAgICAgICAgICAgQ09MT1JHUkFESU5HM0Q6IGZh
bHNlLAorICAgICAgICAgICAgRlJPTUxJTkVBUlNQQUNFOiBmYWxzZSwKKyAgICAgICAgICAgIFNB
TVBMRVIzREdSRUVOREVQVEg6IGZhbHNlLAorICAgICAgICAgICAgU0FNUExFUjNEQkdSTUFQOiBm
YWxzZSwKKyAgICAgICAgICAgIElNQUdFUFJPQ0VTU0lOR1BPU1RQUk9DRVNTOiBmYWxzZSwKKyAg
ICAgICAgICAgIEVYUE9TVVJFOiBmYWxzZSwKKyAgICAgICAgfTsKKyAgICAgICAgLy8gU2V0dXAg
dGhlIGNvbmZpZ3VyYXRpb24gYXMgZm9yY2VkIGJ5IHRoZSBjb25zdHJ1Y3Rvci4gVGhpcyB3b3Vs
ZCB0aGVuIG5vdCBmb3JjZSB0aGUKKyAgICAgICAgLy8gc2NlbmUgbWF0ZXJpYWxzIG91dHB1dCBp
biBsaW5lYXIgc3BhY2UgYW5kIGxldCB1bnRvdWNoZWQgdGhlIGRlZmF1bHQgZm9yd2FyZCBwYXNz
LgorICAgICAgICBpZiAoaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbikgeworICAgICAgICAg
ICAgaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5hcHBseUJ5UG9zdFByb2Nlc3MgPSB0cnVl
OworICAgICAgICAgICAgX3RoaXMuX2F0dGFjaEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24o
aW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiwgdHJ1ZSk7CisgICAgICAgICAgICAvLyBUaGlz
IHdpbGwgY2F1c2UgdGhlIHNoYWRlciB0byBiZSBjb21waWxlZAorICAgICAgICAgICAgX3RoaXMu
ZnJvbUxpbmVhclNwYWNlID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2V0dXAgdGhl
IGRlZmF1bHQgcHJvY2Vzc2luZyBjb25maWd1cmF0aW9uIHRvIHRoZSBzY2VuZS4KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBfdGhpcy5fYXR0YWNoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbihudWxsLCB0cnVlKTsKKyAgICAgICAgICAgIF90aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZp
Z3VyYXRpb24uYXBwbHlCeVBvc3RQcm9jZXNzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBf
dGhpcy5vbkFwcGx5ID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAgX3RoaXMuaW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5iaW5kKGVmZmVjdCwgX3RoaXMuYXNwZWN0UmF0aW8p
OworICAgICAgICB9OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJpbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgaW1hZ2UgcHJvY2Vzc2luZyBjb25maWd1cmF0aW9uIHVzZWQgZWl0aGVyIGluIHRoaXMg
bWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uOworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgRGVmYXVsdCBpbWFnZSBwcm9j
ZXNzaW5nIGNvbmZpZ3VyYXRpb24gdXNlZCBlaXRoZXIgaW4gdGhlIHRoaXMgbWF0ZXJpYWwuCisg
ICAgICAgICAqCisgICAgICAgICAqIElmIHNldHMgdG8gbnVsbCwgdGhlIHNjZW5lIG9uZSBpcyBp
biB1c2UuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgLy8gV2UgYXJlIGFsbW9zdCBzdXJlIGl0IGlzIGFwcGxpZWQgYnkgcG9zdCBwcm9j
ZXNzIGFzCisgICAgICAgICAgICAvLyBXZSBhcmUgaW4gdGhlIHBvc3QgcHJvY2VzcyA6LSkKKyAg
ICAgICAgICAgIHZhbHVlLmFwcGx5QnlQb3N0UHJvY2VzcyA9IHRydWU7CisgICAgICAgICAgICB0
aGlzLl9hdHRhY2hJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKHZhbHVlKTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgLyoqCisgICAgICogQXR0YWNoZXMgYSBuZXcgaW1hZ2UgcHJvY2Vzc2lu
ZyBjb25maWd1cmF0aW9uIHRvIHRoZSBQQlIgTWF0ZXJpYWwuCisgICAgICogQHBhcmFtIGNvbmZp
Z3VyYXRpb24KKyAgICAgKi8KKyAgICBJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90b3R5
cGUuX2F0dGFjaEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbiAoY29uZmln
dXJhdGlvbiwgZG9Ob3RCdWlsZCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAg
ICBpZiAoZG9Ob3RCdWlsZCA9PT0gdm9pZCAwKSB7IGRvTm90QnVpbGQgPSBmYWxzZTsgfQorICAg
ICAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIERldGFj
aGVzIG9ic2VydmVyLgorICAgICAgICBpZiAodGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbiAmJiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdPYnNlcnZlcikgeworICAgICAgICAgICAgdGhp
cy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5vblVwZGF0ZVBhcmFtZXRlcnMucmVtb3Zl
KHRoaXMuX2ltYWdlUHJvY2Vzc2luZ09ic2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICAvLyBQ
aWNrIHRoZSBzY2VuZSBjb25maWd1cmF0aW9uIGlmIG5lZWRlZC4KKyAgICAgICAgaWYgKCFjb25m
aWd1cmF0aW9uKSB7CisgICAgICAgICAgICB2YXIgc2NlbmUgPSBudWxsOworICAgICAgICAgICAg
dmFyIGVuZ2luZSA9IHRoaXMuZ2V0RW5naW5lKCk7CisgICAgICAgICAgICB2YXIgY2FtZXJhID0g
dGhpcy5nZXRDYW1lcmEoKTsKKyAgICAgICAgICAgIGlmIChjYW1lcmEpIHsKKyAgICAgICAgICAg
ICAgICBzY2VuZSA9IGNhbWVyYS5nZXRTY2VuZSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAoZW5naW5lICYmIGVuZ2luZS5zY2VuZXMpIHsKKyAgICAgICAgICAgICAgICB2
YXIgc2NlbmVzID0gZW5naW5lLnNjZW5lczsKKyAgICAgICAgICAgICAgICBzY2VuZSA9IHNjZW5l
c1tzY2VuZXMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzY2VuZSA9IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIkVuZ2luZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24g
PSBzY2VuZS5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiA9
IGNvbmZpZ3VyYXRpb247CisgICAgICAgIH0KKyAgICAgICAgLy8gQXR0YWNoZXMgb2JzZXJ2ZXIu
CisgICAgICAgIGlmICh0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKSB7CisgICAg
ICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdPYnNlcnZlciA9IHRoaXMuX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24ub25VcGRhdGVQYXJhbWV0ZXJzLmFkZChmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAgICAgX3RoaXMuX3VwZGF0ZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9CisgICAgICAgIC8vIEVuc3VyZSB0aGUgZWZmZWN0IHdpbGwgYmUgcmVidWls
dC4KKyAgICAgICAgaWYgKCFkb05vdEJ1aWxkKSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVQ
YXJhbWV0ZXJzKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJjb2xvckN1cnZlcyIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgQ29sb3IgY3VydmVzIHNldHVwIHVzZWQgaW4g
dGhlIGVmZmVjdCBpZiBjb2xvckN1cnZlc0VuYWJsZWQgaXMgc2V0IHRvIHRydWUgLgorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yQ3VydmVzOworICAgICAgICB9LAor
ICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyBDb2xvciBjdXJ2ZXMgc2V0dXAgdXNlZCBpbiB0
aGUgZWZmZWN0IGlmIGNvbG9yQ3VydmVzRW5hYmxlZCBpcyBzZXQgdG8gdHJ1ZSAuCisgICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5p
bWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yQ3VydmVzID0gdmFsdWU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdQb3N0
UHJvY2Vzcy5wcm90b3R5cGUsICJjb2xvckN1cnZlc0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHdldGhlciB0aGUgY29sb3IgY3VydmVzIGVmZmVjdCBpcyBlbmFibGVk
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yQ3VydmVzRW5hYmxl
ZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgd2V0aGVyIHRoZSBj
b2xvciBjdXJ2ZXMgZWZmZWN0IGlzIGVuYWJsZWQuCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25m
aWd1cmF0aW9uLmNvbG9yQ3VydmVzRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MucHJv
dG90eXBlLCAiY29sb3JHcmFkaW5nVGV4dHVyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgQ29sb3IgZ3JhZGluZyBMVVQgdGV4dHVyZSB1c2VkIGluIHRoZSBlZmZlY3QgaWYgY29s
b3JHcmFkaW5nRW5hYmxlZCBpcyBzZXQgdG8gdHJ1ZS4KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbi5jb2xvckdyYWRpbmdUZXh0dXJlOworICAgICAgICB9LAorICAgICAgICAv
KioKKyAgICAgICAgICogU2V0cyBDb2xvciBncmFkaW5nIExVVCB0ZXh0dXJlIHVzZWQgaW4gdGhl
IGVmZmVjdCBpZiBjb2xvckdyYWRpbmdFbmFibGVkIGlzIHNldCB0byB0cnVlLgorICAgICAgICAg
Ki8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckdyYWRpbmdUZXh0dXJlID0gdmFsdWU7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3Np
bmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJjb2xvckdyYWRpbmdFbmFibGVkIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGdyYWRpbmcgZWZmZWN0IGlz
IGVuYWJsZWQuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uY29sb3JHcmFk
aW5nRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0
aGVyIHRoZSBjb2xvciBncmFkaW5nIGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckdyYWRpbmdFbmFibGVkID0gdmFsdWU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdQb3N0
UHJvY2Vzcy5wcm90b3R5cGUsICJleHBvc3VyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgZXhwb3N1cmUgdXNlZCBpbiB0aGUgZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3Np
bmdDb25maWd1cmF0aW9uLmV4cG9zdXJlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAg
ICAgICogU2V0cyBleHBvc3VyZSB1c2VkIGluIHRoZSBlZmZlY3QuCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uLmV4cG9zdXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90
b3R5cGUsICJ0b25lTWFwcGluZ0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHdldGhlciB0b25lbWFwcGluZyBpcyBlbmFibGVkIG9yIG5vdC4KKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udG9uZU1hcHBpbmdFbmFibGVkOworICAgICAgICB9LAor
ICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3ZXRoZXIgdG9uZW1hcHBpbmcgaXMgZW5hYmxl
ZCBvciBub3QKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnRvbmVNYXBwaW5n
RW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MucHJvdG90eXBlLCAidG9uZU1hcHBpbmdU
eXBlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdHlwZSBvZiB0b25lIG1h
cHBpbmcgZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi50b25l
TWFwcGluZ1R5cGU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRo
ZSB0eXBlIG9mIHRvbmUgbWFwcGluZyBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbi50b25lTWFwcGluZ1R5cGUgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3Rv
dHlwZSwgImNvbnRyYXN0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBjb250cmFz
dCB1c2VkIGluIHRoZSBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRp
b24uY29udHJhc3Q7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIGNv
bnRyYXN0IHVzZWQgaW4gdGhlIGVmZmVjdC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24uY29udHJhc3QgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgInZpZ25l
dHRlU3RyZXRjaCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgVmlnbmV0dGUgc3Ry
ZXRjaCBzaXplLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnZpZ25ldHRl
U3RyZXRjaDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgVmlnbmV0
dGUgc3RyZXRjaCBzaXplLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi52aWdu
ZXR0ZVN0cmV0Y2ggPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgInZpZ25ldHRl
Q2VudHJlWCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgVmlnbmV0dGUgY2VudHJl
IFggT2Zmc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnZpZ25ldHRl
Q2VudHJlWDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgVmlnbmV0
dGUgY2VudHJlIFggT2Zmc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi52
aWduZXR0ZUNlbnRyZVggPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgInZpZ25l
dHRlQ2VudHJlWSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgVmlnbmV0dGUgY2Vu
dHJlIFkgT2Zmc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnZpZ25l
dHRlQ2VudHJlWTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgVmln
bmV0dGUgY2VudHJlIFkgT2Zmc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bi52aWduZXR0ZUNlbnRyZVkgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgInZp
Z25ldHRlV2VpZ2h0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBWaWduZXR0ZSB3
ZWlnaHQgb3IgaW50ZW5zaXR5IG9mIHRoZSB2aWduZXR0ZSBlZmZlY3QuCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udmlnbmV0dGVXZWlnaHQ7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBTZXRzIFZpZ25ldHRlIHdlaWdodCBvciBpbnRlbnNpdHkgb2Yg
dGhlIHZpZ25ldHRlIGVmZmVjdC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24u
dmlnbmV0dGVXZWlnaHQgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgInZpZ25l
dHRlQ29sb3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIENvbG9yIG9mIHRoZSB2
aWduZXR0ZSBhcHBsaWVkIG9uIHRoZSBzY3JlZW4gdGhyb3VnaCB0aGUgY2hvc2VuIGJsZW5kIG1v
ZGUgKHZpZ25ldHRlQmxlbmRNb2RlKQorICAgICAgICAgKiBpZiB2aWduZXR0ZUVuYWJsZWQgaXMg
c2V0IHRvIHRydWUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udmlnbmV0
dGVDb2xvcjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgQ29sb3Ig
b2YgdGhlIHZpZ25ldHRlIGFwcGxpZWQgb24gdGhlIHNjcmVlbiB0aHJvdWdoIHRoZSBjaG9zZW4g
YmxlbmQgbW9kZSAodmlnbmV0dGVCbGVuZE1vZGUpCisgICAgICAgICAqIGlmIHZpZ25ldHRlRW5h
YmxlZCBpcyBzZXQgdG8gdHJ1ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24u
dmlnbmV0dGVDb2xvciA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MucHJvdG90eXBlLCAidmlnbmV0
dGVDYW1lcmFGb3YiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIENhbWVyYSBmaWVs
ZCBvZiB2aWV3IHVzZWQgYnkgdGhlIFZpZ25ldHRlIGVmZmVjdC4KKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbi52aWduZXR0ZUNhbWVyYUZvdjsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNldHMgQ2FtZXJhIGZpZWxkIG9mIHZpZXcgdXNlZCBieSB0aGUg
VmlnbmV0dGUgZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi52aWdu
ZXR0ZUNhbWVyYUZvdiA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MucHJvdG90eXBlLCAidmlnbmV0
dGVCbGVuZE1vZGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2aWduZXR0
ZSBibGVuZCBtb2RlIGFsbG93aW5nIGRpZmZlcmVudCBraW5kIG9mIGVmZmVjdC4KKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
aW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi52aWduZXR0ZUJsZW5kTW9kZTsKKyAgICAgICAg
fSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHZpZ25ldHRlIGJsZW5kIG1vZGUg
YWxsb3dpbmcgZGlmZmVyZW50IGtpbmQgb2YgZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbi52aWduZXR0ZUJsZW5kTW9kZSA9IHZhbHVlOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3Mu
cHJvdG90eXBlLCAidmlnbmV0dGVFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB3ZXRoZXIgdGhlIHZpZ25ldHRlIGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnZpZ25ldHRlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFNldHMgd2V0aGVyIHRoZSB2aWduZXR0ZSBlZmZlY3QgaXMg
ZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgICAgICB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udmlnbmV0dGVFbmFi
bGVkID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJmcm9tTGluZWFyU3BhY2Ui
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdldGhlciB0aGUgaW5wdXQgb2YgdGhl
IHByb2Nlc3NpbmcgaXMgaW4gR2FtbWEgb3IgTGluZWFyIFNwYWNlLgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJvbUxp
bmVhclNwYWNlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3ZXRo
ZXIgdGhlIGlucHV0IG9mIHRoZSBwcm9jZXNzaW5nIGlzIGluIEdhbW1hIG9yIExpbmVhciBTcGFj
ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fZnJvbUxpbmVhclNwYWNlID09PSB2YWx1ZSkgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2Zyb21MaW5lYXJT
cGFjZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFyYW1ldGVycygpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiAgIkltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9j
ZXNzIgorICAgICAqIEByZXR1cm5zICJJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2VzcyIKKyAgICAg
Ki8KKyAgICBJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9j
ZXNzIjsKKyAgICB9OworICAgIEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZS5f
dXBkYXRlUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fZGVmaW5lcy5G
Uk9NTElORUFSU1BBQ0UgPSB0aGlzLl9mcm9tTGluZWFyU3BhY2U7CisgICAgICAgIHRoaXMuaW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcmVwYXJlRGVmaW5lcyh0aGlzLl9kZWZpbmVzLCB0
cnVlKTsKKyAgICAgICAgdmFyIGRlZmluZXMgPSAiIjsKKyAgICAgICAgZm9yICh2YXIgZGVmaW5l
IGluIHRoaXMuX2RlZmluZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9kZWZpbmVzW2RlZmlu
ZV0pIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzICs9ICIjZGVmaW5lICIgKyBkZWZpbmUgKyAi
O1xyXG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBzYW1wbGVycyA9
IFsidGV4dHVyZVNhbXBsZXIiXTsKKyAgICAgICAgdmFyIHVuaWZvcm1zID0gWyJzY2FsZSJdOwor
ICAgICAgICBpZiAoX01hdGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iXSkg
eworICAgICAgICAgICAgX01hdGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24i
XS5QcmVwYXJlU2FtcGxlcnMoc2FtcGxlcnMsIHRoaXMuX2RlZmluZXMpOworICAgICAgICAgICAg
X01hdGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iXS5QcmVwYXJlVW5pZm9y
bXModW5pZm9ybXMsIHRoaXMuX2RlZmluZXMpOworICAgICAgICB9CisgICAgICAgIHRoaXMudXBk
YXRlRWZmZWN0KGRlZmluZXMsIHVuaWZvcm1zLCBzYW1wbGVycyk7CisgICAgfTsKKyAgICBJbWFn
ZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChjYW1l
cmEpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcywgY2FtZXJh
KTsKKyAgICAgICAgaWYgKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gJiYgdGhp
cy5faW1hZ2VQcm9jZXNzaW5nT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJv
Y2Vzc2luZ0NvbmZpZ3VyYXRpb24ub25VcGRhdGVQYXJhbWV0ZXJzLnJlbW92ZSh0aGlzLl9pbWFn
ZVByb2Nlc3NpbmdPYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2ltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNz
aW5nQ29uZmlndXJhdGlvbi5hcHBseUJ5UG9zdFByb2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBJbWFnZVByb2Nlc3NpbmdQb3N0UHJv
Y2Vzcy5wcm90b3R5cGUsICJfZnJvbUxpbmVhclNwYWNlIiwgdm9pZCAwKTsKKyAgICByZXR1cm4g
SW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3M7Cit9KF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJQb3N0UHJvY2VzcyJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vUG9zdFByb2Nlc3Nlcy9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9pbmRleC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBB
bmFnbHlwaFBvc3RQcm9jZXNzLCBCbGFja0FuZFdoaXRlUG9zdFByb2Nlc3MsIEJsb29tRWZmZWN0
LCBCbG9vbU1lcmdlUG9zdFByb2Nlc3MsIEJsdXJQb3N0UHJvY2VzcywgQ2hyb21hdGljQWJlcnJh
dGlvblBvc3RQcm9jZXNzLCBDaXJjbGVPZkNvbmZ1c2lvblBvc3RQcm9jZXNzLCBDb2xvckNvcnJl
Y3Rpb25Qb3N0UHJvY2VzcywgQ29udm9sdXRpb25Qb3N0UHJvY2VzcywgRGVwdGhPZkZpZWxkQmx1
clBvc3RQcm9jZXNzLCBEZXB0aE9mRmllbGRFZmZlY3RCbHVyTGV2ZWwsIERlcHRoT2ZGaWVsZEVm
ZmVjdCwgRGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2Vzc09wdGlvbnMsIERlcHRoT2ZGaWVsZE1l
cmdlUG9zdFByb2Nlc3MsIERpc3BsYXlQYXNzUG9zdFByb2Nlc3MsIEV4dHJhY3RIaWdobGlnaHRz
UG9zdFByb2Nlc3MsIEZpbHRlclBvc3RQcm9jZXNzLCBGeGFhUG9zdFByb2Nlc3MsIEdyYWluUG9z
dFByb2Nlc3MsIEhpZ2hsaWdodHNQb3N0UHJvY2VzcywgSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nl
c3MsIE1vdGlvbkJsdXJQb3N0UHJvY2VzcywgUGFzc1Bvc3RQcm9jZXNzLCBQYXNzQ3ViZVBvc3RQ
cm9jZXNzLCBQb3N0UHJvY2VzcywgUG9zdFByb2Nlc3NNYW5hZ2VyLCBSZWZyYWN0aW9uUG9zdFBy
b2Nlc3MsIFNoYXJwZW5Qb3N0UHJvY2VzcywgU3RlcmVvc2NvcGljSW50ZXJsYWNlUG9zdFByb2Nl
c3MsIFRvbmVtYXBwaW5nT3BlcmF0b3IsIFRvbmVtYXBQb3N0UHJvY2VzcywgVm9sdW1ldHJpY0xp
Z2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLCBWUkRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFByb2Nl
c3MsIFZSTXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MsIFBvc3RQcm9jZXNzUmVuZGVy
RWZmZWN0LCBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLCBQb3N0UHJvY2Vzc1JlbmRlclBpcGVs
aW5lTWFuYWdlciwgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVu
dCwgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLCBMZW5zUmVuZGVyaW5nUGlwZWxpbmUsIFNTQU8y
UmVuZGVyaW5nUGlwZWxpbmUsIFNTQU9SZW5kZXJpbmdQaXBlbGluZSwgU3RhbmRhcmRSZW5kZXJp
bmdQaXBlbGluZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2FuYWdseXBoUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vYW5hZ2x5cGhQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vz
c2VzL2FuYWdseXBoUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5hZ2x5cGhQ
b3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FuYWdseXBoUG9zdFByb2Nlc3NfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQW5hZ2x5cGhQb3N0UHJvY2VzcyJdOyB9KTsKKwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ibGFja0FuZFdoaXRlUG9zdFByb2Nlc3NfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmxhY2tB
bmRXaGl0ZVBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvYmxhY2tBbmRXaGl0ZVBvc3RQ
cm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJsYWNrQW5kV2hpdGVQb3N0UHJvY2VzcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2JsYWNrQW5kV2hpdGVQb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJCbGFja0FuZFdoaXRlUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmxvb21FZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmxvb21FZmZlY3QgKi8gIi4vUG9z
dFByb2Nlc3Nlcy9ibG9vbUVmZmVjdC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCbG9vbUVmZmVj
dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Jsb29tRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIkJsb29tRWZmZWN0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2Jsb29tTWVyZ2VQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ibG9vbU1lcmdlUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFBy
b2Nlc3Nlcy9ibG9vbU1lcmdlUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmxv
b21NZXJnZVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYmxvb21NZXJnZVBvc3RQ
cm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkJsb29tTWVyZ2VQb3N0UHJvY2Vz
cyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ibHVyUG9zdFByb2Nlc3NfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmx1
clBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvYmx1clBvc3RQcm9jZXNzLnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkJsdXJQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Js
dXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJCbHVyUG9zdFByb2Nl
c3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2hyb21hdGljQWJlcnJhdGlv
blBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2Nocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL2Nocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJDaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9jaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siQ2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2NpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2lyY2xlT2ZDb25m
dXNpb25Qb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL2NpcmNsZU9mQ29uZnVzaW9uUG9z
dFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJv
Y2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nlc3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJvY2Vz
cyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb2xvckNvcnJlY3Rpb25Qb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9jb2xvckNvcnJlY3Rpb25Qb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL2Nv
bG9yQ29ycmVjdGlvblBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yQ29y
cmVjdGlvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29sb3JDb3JyZWN0aW9u
UG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29sb3JDb3JyZWN0aW9u
UG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29udm9sdXRp
b25Qb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9jb252b2x1dGlvblBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMv
Y29udm9sdXRpb25Qb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb252b2x1dGlv
blBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29udm9sdXRpb25Qb3N0UHJvY2Vz
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb252b2x1dGlvblBvc3RQcm9jZXNzIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlcHRoT2ZGaWVsZEJsdXJQb3N0UHJv
Y2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9kZXB0aE9mRmllbGRCbHVyUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9kZXB0
aE9mRmllbGRCbHVyUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhPZkZp
ZWxkQmx1clBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVwdGhPZkZpZWxkQmx1
clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkRlcHRoT2ZGaWVsZEJs
dXJQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZXB0aE9m
RmllbGRFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2RlcHRoT2ZGaWVsZEVmZmVjdCAqLyAiLi9Qb3N0UHJvY2Vzc2VzL2RlcHRo
T2ZGaWVsZEVmZmVjdC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aE9mRmllbGRFZmZlY3RC
bHVyTGV2ZWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZXB0aE9mRmllbGRFZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkRlcHRoT2ZGaWVsZEVmZmVjdEJsdXJMZXZlbCJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aE9mRmllbGRFZmZlY3QiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9kZXB0aE9mRmllbGRFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19b
IkRlcHRoT2ZGaWVsZEVmZmVjdCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9k
ZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNz
ICovICIuL1Bvc3RQcm9jZXNzZXMvZGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2Vzcy50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJEZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNzT3B0aW9ucyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2RlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3NfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzExX19bIkRlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3NPcHRpb25z
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3Mi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJEZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNzIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Rpc3BsYXlQYXNzUG9zdFByb2Nlc3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L2Rpc3BsYXlQYXNzUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9kaXNwbGF5UGFzc1Bv
c3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRpc3BsYXlQYXNzUG9zdFByb2Nlc3Mi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kaXNwbGF5UGFzc1Bvc3RQcm9jZXNzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMl9fWyJEaXNwbGF5UGFzc1Bvc3RQcm9jZXNzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2V4dHJhY3RIaWdobGlnaHRzUG9zdFByb2Nlc3NfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2V4dHJh
Y3RIaWdobGlnaHRzUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9leHRyYWN0SGlnaGxp
Z2h0c1Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkV4dHJhY3RIaWdobGlnaHRz
UG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9leHRyYWN0SGlnaGxpZ2h0c1Bvc3RQ
cm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJFeHRyYWN0SGlnaGxpZ2h0c1Bv
c3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZpbHRlclBvc3RQ
cm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9maWx0ZXJQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL2ZpbHRlclBvc3RQ
cm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZpbHRlclBvc3RQcm9jZXNzIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfZmlsdGVyUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE0X19bIkZpbHRlclBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2Z4YWFQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vZnhhYVBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMv
ZnhhYVBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZ4YWFQb3N0UHJvY2VzcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Z4YWFQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTVfX1siRnhhYVBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2dyYWluUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2dyYWluUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nl
c3Nlcy9ncmFpblBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdyYWluUG9zdFBy
b2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ncmFpblBvc3RQcm9jZXNzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xNl9fWyJHcmFpblBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2hpZ2hsaWdodHNQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaGlnaGxpZ2h0c1Bvc3RQcm9j
ZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvaGlnaGxpZ2h0c1Bvc3RQcm9jZXNzLnRzIik7CisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkhpZ2hsaWdodHNQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2hpZ2hsaWdodHNQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siSGln
aGxpZ2h0c1Bvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2lt
YWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2VzcyAqLyAi
Li9Qb3N0UHJvY2Vzc2VzL2ltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4
X19bIkltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX21vdGlvbkJsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbW90aW9uQmx1clBvc3RQcm9jZXNzICov
ICIuL1Bvc3RQcm9jZXNzZXMvbW90aW9uQmx1clBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIk1vdGlvbkJsdXJQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21vdGlv
bkJsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siTW90aW9uQmx1
clBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bhc3NQb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vcGFzc1Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcGFzc1Bvc3RQcm9j
ZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhc3NQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX3Bhc3NQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1si
UGFzc1Bvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhc3NDdWJlUG9zdFBy
b2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYXNzUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIwX19bIlBhc3NDdWJlUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIx
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9j
ZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3MiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MjFfX1siUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9z
dFByb2Nlc3NNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2Vzc01hbmFnZXIgKi8gIi4vUG9zdFByb2Nlc3Nlcy9w
b3N0UHJvY2Vzc01hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3NNYW5h
Z2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9zdFByb2Nlc3NNYW5hZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yMl9fWyJQb3N0UHJvY2Vzc01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfcmVmcmFjdGlvblBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yZWZyYWN0aW9uUG9zdFBy
b2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9yZWZyYWN0aW9uUG9zdFByb2Nlc3MudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiUmVmcmFjdGlvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfcmVmcmFjdGlvblBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJS
ZWZyYWN0aW9uUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
UmVuZGVyUGlwZWxpbmVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL1JlbmRlclBpcGVsaW5lL2luZGV4ICovICIuL1Bvc3RQcm9j
ZXNzZXMvUmVuZGVyUGlwZWxpbmUvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFBy
b2Nlc3NSZW5kZXJFZmZlY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9SZW5kZXJQaXBlbGluZV9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZl
Y3QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1JlbmRlclBpcGVsaW5lX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yNF9fWyJQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfUmVuZGVyUGlwZWxpbmVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI0X19bIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9SZW5kZXJQaXBlbGluZV9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjRfX1siUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNv
bXBvbmVudCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWZhdWx0UmVuZGVyaW5nUGlwZWxp
bmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9SZW5kZXJQaXBlbGluZV9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjRfX1siRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkxlbnNSZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX1JlbmRlclBpcGVsaW5lX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJM
ZW5zUmVuZGVyaW5nUGlwZWxpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU1NBTzJSZW5k
ZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1JlbmRlclBpcGVsaW5lX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJTU0FPMlJlbmRlcmluZ1BpcGVsaW5lIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNTQU9SZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX1JlbmRlclBpcGVsaW5lX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yNF9fWyJTU0FPUmVuZGVyaW5nUGlwZWxpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1JlbmRlclBp
cGVsaW5lX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJTdGFuZGFyZFJlbmRl
cmluZ1BpcGVsaW5lIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NoYXJwZW5Q
b3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vc2hhcnBlblBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvc2hhcnBl
blBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNoYXJwZW5Qb3N0UHJvY2VzcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NoYXJwZW5Qb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjVfX1siU2hhcnBlblBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX3N0ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdGVyZW9zY29w
aWNJbnRlcmxhY2VQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3N0ZXJlb3Njb3BpY0lu
dGVybGFjZVBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Njb3BpY0lu
dGVybGFjZVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3RlcmVvc2NvcGljSW50
ZXJsYWNlUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19bIlN0ZXJlb3Nj
b3BpY0ludGVybGFjZVBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3RvbmVtYXBQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjdfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vdG9uZW1hcFBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9j
ZXNzZXMvdG9uZW1hcFBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvbmVtYXBw
aW5nT3BlcmF0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90b25lbWFwUG9zdFByb2Nlc3NfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzI3X19bIlRvbmVtYXBwaW5nT3BlcmF0b3IiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiVG9uZW1hcFBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfdG9uZW1hcFBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yN19fWyJUb25l
bWFwUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdm9sdW1l
dHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5n
UG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5n
UG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVm9sdW1ldHJpY0xpZ2h0U2NhdHRl
cmluZ1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdm9sdW1ldHJpY0xpZ2h0U2Nh
dHRlcmluZ1Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fWyJWb2x1bWV0
cmljTGlnaHRTY2F0dGVyaW5nUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfdnJEaXN0b3J0aW9uQ29ycmVjdGlvblBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi92ckRpc3RvcnRpb25D
b3JyZWN0aW9uUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy92ckRpc3RvcnRpb25Db3Jy
ZWN0aW9uUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVlJEaXN0b3J0aW9uQ29y
cmVjdGlvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnJEaXN0b3J0aW9uQ29y
cmVjdGlvblBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fWyJWUkRpc3Rv
cnRpb25Db3JyZWN0aW9uUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfdnJNdWx0aXZpZXdUb1NpbmdsZXZpZXdQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdnJNdWx0aXZpZXdUb1Np
bmdsZXZpZXdQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3ZyTXVsdGl2aWV3VG9TaW5n
bGV2aWV3UG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVlJNdWx0aXZpZXdUb1Np
bmdsZXZpZXdQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3ZyTXVsdGl2aWV3VG9T
aW5nbGV2aWV3UG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIlZSTXVs
dGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MiXTsgfSk7CisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL21vdGlvbkJsdXJQb3N0UHJvY2Vzcy50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1Bvc3RQcm9jZXNzZXMvbW90aW9uQmx1clBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBNb3Rpb25CbHVyUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTW90aW9uQmx1clBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBNb3Rpb25CbHVyUG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlz
Yy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQ
cm9jZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1JlbmRlcmluZ19nZW9tZXRyeUJ1ZmZl
clJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9SZW5kZXJpbmcvZ2VvbWV0cnlCdWZmZXJSZW5kZXJlciAqLyAiLi9SZW5kZXJp
bmcvZ2VvbWV0cnlCdWZmZXJSZW5kZXJlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9BbmltYXRpb25zX2FuaW1hdGFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL0FuaW1hdGlvbnMvYW5pbWF0YWJsZSAqLyAiLi9Bbmlt
YXRpb25zL2FuaW1hdGFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUmVuZGVy
aW5nX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmVuZGVyaW5nL2dlb21l
dHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudCAqLyAiLi9SZW5kZXJpbmcvZ2VvbWV0cnlC
dWZmZXJSZW5kZXJlclNjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNfbW90aW9uQmx1cl9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9tb3Rpb25CbHVyLmZyYWdt
ZW50ICovICIuL1NoYWRlcnMvbW90aW9uQmx1ci5mcmFnbWVudC50cyIpOworCisKKworCisKKwor
CisKKworLyoqCisgKiBUaGUgTW90aW9uIEJsdXIgUG9zdCBQcm9jZXNzIHdoaWNoIGJsdXJzIGFu
IGltYWdlIGJhc2VkIG9uIHRoZSBvYmplY3RzIHZlbG9jaXR5IGluIHNjZW5lLgorICogVmVsb2Np
dHkgY2FuIGJlIGFmZmVjdGVkIGJ5IGVhY2ggb2JqZWN0J3Mgcm90YXRpb24sIHBvc2l0aW9uIGFu
ZCBzY2FsZSBkZXBlbmRpbmcgb24gdGhlIHRyYW5zZm9ybWF0aW9uIHNwZWVkLgorICogQXMgYW4g
ZXhhbXBsZSwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHRvIGNyZWF0ZSB0aGUgcG9zdC1wcm9jZXNz
OgorICogIHZhciBtYiA9IG5ldyBCQUJZTE9OLk1vdGlvbkJsdXJQb3N0UHJvY2VzcygKKyAqICAg
ICAgJ21iJywgLy8gVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAqICAgICAgc2NlbmUsIC8vIFRo
ZSBzY2VuZSBjb250YWluaW5nIHRoZSBvYmplY3RzIHRvIGJsdXIgYWNjb3JkaW5nIHRvIHRoZWly
IHZlbG9jaXR5LgorICogICAgICAxLjAsIC8vIFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQgcmF0
aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisgKiAg
ICAgIGNhbWVyYSAvLyBUaGUgY2FtZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAq
ICk7CisgKiBUaGVuLCBhbGwgb2JqZWN0cyBtb3ZpbmcsIHJvdGF0aW5nIGFuZC9vciBzY2FsaW5n
IHdpbGwgYmUgYmx1cnJlZCBkZXBlbmRpbmcgb24gdGhlIHRyYW5zZm9ybWF0aW9uIHNwZWVkLgor
ICovCit2YXIgTW90aW9uQmx1clBvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0
ZW5kcyJdKE1vdGlvbkJsdXJQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgbmV3IGluc3RhbmNlIE1vdGlvbkJsdXJQb3N0UHJvY2VzcworICAgICAqIEBwYXJh
bSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBlZmZlY3QuCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBz
Y2VuZSBjb250YWluaW5nIHRoZSBvYmplY3RzIHRvIGJsdXIgYWNjb3JkaW5nIHRvIHRoZWlyIHZl
bG9jaXR5LgorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQg
cmF0aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisg
ICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0
by4KKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVz
ZWQgd2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChkZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBl
bmdpbmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9zdCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4g
KGRlZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAgICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUg
cG9zdCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24gdGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBm
YWxzZSkKKyAgICAgKiBAcGFyYW0gdGV4dHVyZVR5cGUgVHlwZSBvZiB0ZXh0dXJlcyB1c2VkIHdo
ZW4gcGVyZm9ybWluZyB0aGUgcG9zdCBwcm9jZXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFy
YW0gYmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxhdGlvbiBvZiB0aGUgc2hhZGVyIHNob3VsZCBu
b3QgYmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSB1cGRhdGVFZmZlY3QgbWV0aG9kIGNh
biBiZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRlciBhdCBhIGxhdGVyIHRpbWUuIChkZWZhdWx0
OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBNb3Rpb25CbHVyUG9zdFByb2Nlc3MobmFt
ZSwgc2NlbmUsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxl
LCB0ZXh0dXJlVHlwZSwgYmxvY2tDb21waWxhdGlvbikgeworICAgICAgICBpZiAodGV4dHVyZVR5
cGUgPT09IHZvaWQgMCkgeyB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9J
TlQ7IH0KKyAgICAgICAgaWYgKGJsb2NrQ29tcGlsYXRpb24gPT09IHZvaWQgMCkgeyBibG9ja0Nv
bXBpbGF0aW9uID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgbmFtZSwgIm1vdGlvbkJsdXIiLCBbIm1vdGlvblN0cmVuZ3RoIiwgIm1vdGlvblNjYWxlIiwg
InNjcmVlblNpemUiXSwgWyJ2ZWxvY2l0eVNhbXBsZXIiXSwgb3B0aW9ucywgY2FtZXJhLCBzYW1w
bGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUsICIjZGVmaW5lIEdFT01FVFJZX1NVUFBPUlRFRFxu
I2RlZmluZSBTQU1QTEVTIDY0LjAiLCB0ZXh0dXJlVHlwZSwgdW5kZWZpbmVkLCBudWxsLCBibG9j
a0NvbXBpbGF0aW9uKSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBo
b3cgbXVjaCB0aGUgaW1hZ2UgaXMgYmx1cnJlZCBieSB0aGUgbW92ZW1lbnQuIERlZmF1bHQgdmFs
dWUgaXMgZXF1YWwgdG8gMQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubW90aW9uU3RyZW5n
dGggPSAxOworICAgICAgICBfdGhpcy5fbW90aW9uQmx1clNhbXBsZXMgPSAzMjsKKyAgICAgICAg
X3RoaXMuX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXIgPSBzY2VuZS5lbmFibGVHZW9tZXRyeUJ1ZmZl
clJlbmRlcmVyKCk7CisgICAgICAgIGlmICghX3RoaXMuX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXIp
IHsKKyAgICAgICAgICAgIC8vIEdlb21ldHJ5IGJ1ZmZlciByZW5kZXJlciBpcyBub3Qgc3VwcG9y
dGVkLiBTbywgd29yayBhcyBhIHBhc3N0aHJvdWdoLgorICAgICAgICAgICAgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4oIk11bHRpcGxlIFJl
bmRlciBUYXJnZXQgc3VwcG9ydCBuZWVkZWQgdG8gY29tcHV0ZSBvYmplY3QgYmFzZWQgbW90aW9u
IGJsdXIiKTsKKyAgICAgICAgICAgIF90aGlzLnVwZGF0ZUVmZmVjdCgpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gR2VvbWV0cnkgYnVmZmVyIHJlbmRlcmVyIGlz
IHN1cHBvcnRlZC4KKyAgICAgICAgICAgIF90aGlzLl9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLmVu
YWJsZVZlbG9jaXR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIF90aGlzLm9uQXBwbHkgPSBmdW5jdGlv
biAoZWZmZWN0KSB7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldFZlY3RvcjIoInNjcmVlblNp
emUiLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlY3RvcjIiXShfdGhpcy53aWR0aCwgX3RoaXMuaGVpZ2h0KSk7CisgICAgICAgICAgICAgICAg
ZWZmZWN0LnNldEZsb2F0KCJtb3Rpb25TY2FsZSIsIHNjZW5lLmdldEFuaW1hdGlvblJhdGlvKCkp
OworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgibW90aW9uU3RyZW5ndGgiLCBfdGhp
cy5tb3Rpb25TdHJlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9nZW9tZXRyeUJ1
ZmZlclJlbmRlcmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB2ZWxvY2l0eUluZGV4ID0g
X3RoaXMuX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXIuZ2V0VGV4dHVyZUluZGV4KF9SZW5kZXJpbmdf
Z2VvbWV0cnlCdWZmZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJHZW9t
ZXRyeUJ1ZmZlclJlbmRlcmVyIl0uVkVMT0NJVFlfVEVYVFVSRV9UWVBFKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInZlbG9jaXR5U2FtcGxlciIsIF90aGlzLl9nZW9t
ZXRyeUJ1ZmZlclJlbmRlcmVyLmdldEdCdWZmZXIoKS50ZXh0dXJlc1t2ZWxvY2l0eUluZGV4XSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3Rpb25CbHVy
UG9zdFByb2Nlc3MucHJvdG90eXBlLCAibW90aW9uQmx1clNhbXBsZXMiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBhcmUgdXNlZCBmb3Ig
bW90aW9uIGJsdXIgcXVhbGl0eS4gRGVmYXVsdCB2YWx1ZSBpcyBlcXVhbCB0byAzMgorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fbW90aW9uQmx1clNhbXBsZXM7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAg
KiBTZXRzIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBiZSB1c2VkIGZvciBtb3Rpb24gYmx1
ciBxdWFsaXR5CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzYW1wbGVzKSB7
CisgICAgICAgICAgICB0aGlzLl9tb3Rpb25CbHVyU2FtcGxlcyA9IHNhbXBsZXM7CisgICAgICAg
ICAgICBpZiAodGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlcikgeworICAgICAgICAgICAgICAg
IHRoaXMudXBkYXRlRWZmZWN0KCIjZGVmaW5lIEdFT01FVFJZX1NVUFBPUlRFRFxuI2RlZmluZSBT
QU1QTEVTICIgKyBzYW1wbGVzLnRvRml4ZWQoMSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBFeGNsdWRlcyB0aGUgZ2l2ZW4gc2tpbm5lZCBtZXNo
IGZyb20gY29tcHV0aW5nIGJvbmVzIHZlbG9jaXRpZXMuCisgICAgICogQ29tcHV0aW5nIGJvbmVz
IHZlbG9jaXRpZXMgY2FuIGhhdmUgYSBjb3N0IGFuZCB0aGF0IGNvc3QuIFRoZSBjb3N0IGNhbiBi
ZSBzYXZlZCBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIGJ5IHBhc3NpbmcgdGhlIHNraW5u
ZWQgbWVzaCByZWZlcmVuY2UgdG8gaWdub3JlLgorICAgICAqIEBwYXJhbSBza2lubmVkTWVzaCBU
aGUgbWVzaCBjb250YWluaW5nIHRoZSBza2VsZXRvbiB0byBpZ25vcmUgd2hlbiBjb21wdXRpbmcg
dGhlIHZlbG9jaXR5IG1hcC4KKyAgICAgKi8KKyAgICBNb3Rpb25CbHVyUG9zdFByb2Nlc3MucHJv
dG90eXBlLmV4Y2x1ZGVTa2lubmVkTWVzaCA9IGZ1bmN0aW9uIChza2lubmVkTWVzaCkgeworICAg
ICAgICBpZiAodGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlciAmJiBza2lubmVkTWVzaC5za2Vs
ZXRvbikgeworICAgICAgICAgICAgdGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlci5leGNsdWRl
ZFNraW5uZWRNZXNoZXNGcm9tVmVsb2NpdHkucHVzaChza2lubmVkTWVzaCk7CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIHNraW5uZWQgbWVzaCBm
cm9tIHRoZSBleGNsdWRlZCBtZXNoZXMgdG8gaW50ZWdyYXRlIGJvbmVzIHZlbG9jaXRpZXMgd2hp
bGUgcmVuZGVyaW5nIHRoZSB2ZWxvY2l0eSBtYXAuCisgICAgICogQHBhcmFtIHNraW5uZWRNZXNo
IFRoZSBtZXNoIGNvbnRhaW5pbmcgdGhlIHNrZWxldG9uIHRoYXQgaGFzIGJlZW4gaWdub3JlZCBw
cmV2aW91c2x5LgorICAgICAqIEBzZWUgZXhjbHVkZVNraW5uZWRNZXNoIHRvIGV4Y2x1ZGUgYSBz
a2lubmVkIG1lc2ggZnJvbSBib25lcyB2ZWxvY2l0eSBjb21wdXRhdGlvbi4KKyAgICAgKi8KKyAg
ICBNb3Rpb25CbHVyUG9zdFByb2Nlc3MucHJvdG90eXBlLnJlbW92ZUV4Y2x1ZGVkU2tpbm5lZE1l
c2ggPSBmdW5jdGlvbiAoc2tpbm5lZE1lc2gpIHsKKyAgICAgICAgaWYgKHRoaXMuX2dlb21ldHJ5
QnVmZmVyUmVuZGVyZXIgJiYgc2tpbm5lZE1lc2guc2tlbGV0b24pIHsKKyAgICAgICAgICAgIHZh
ciBpbmRleCA9IHRoaXMuX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXIuZXhjbHVkZWRTa2lubmVkTWVz
aGVzRnJvbVZlbG9jaXR5LmluZGV4T2Yoc2tpbm5lZE1lc2gpOworICAgICAgICAgICAgaWYgKGlu
ZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2dlb21ldHJ5QnVmZmVyUmVuZGVy
ZXIuZXhjbHVkZWRTa2lubmVkTWVzaGVzRnJvbVZlbG9jaXR5LnNwbGljZShpbmRleCwgMSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2Vz
IHRoZSBwb3N0IHByb2Nlc3MuCisgICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJhIHRvIGRp
c3Bvc2UgdGhlIHBvc3QgcHJvY2VzcyBvbi4KKyAgICAgKi8KKyAgICBNb3Rpb25CbHVyUG9zdFBy
b2Nlc3MucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAgICAgIGlm
ICh0aGlzLl9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyKSB7CisgICAgICAgICAgICAvLyBDbGVhciBw
cmV2aW91cyB0cmFuc2Zvcm1hdGlvbiBtYXRyaWNlcyBkaWN0aW9uYXJ5IHVzZWQgdG8gY29tcHV0
ZSBvYmplY3RzIHZlbG9jaXRpZXMKKyAgICAgICAgICAgIHRoaXMuX2dlb21ldHJ5QnVmZmVyUmVu
ZGVyZXIuX3ByZXZpb3VzVHJhbnNmb3JtYXRpb25NYXRyaWNlcyA9IHt9OworICAgICAgICAgICAg
dGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlci5fcHJldmlvdXNCb25lc1RyYW5zZm9ybWF0aW9u
TWF0cmljZXMgPSB7fTsKKyAgICAgICAgICAgIHRoaXMuX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXIu
ZXhjbHVkZWRTa2lubmVkTWVzaGVzRnJvbVZlbG9jaXR5ID0gW107CisgICAgICAgIH0KKyAgICAg
ICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcywgY2FtZXJhKTsKKyAgICB9Owor
ICAgIHJldHVybiBNb3Rpb25CbHVyUG9zdFByb2Nlc3M7Cit9KF9wb3N0UHJvY2Vzc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb3N0UHJvY2VzcyJdKSk7CisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9wYXNzUG9zdFByb2Nlc3MudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0UHJv
Y2Vzc2VzL3Bhc3NQb3N0UHJvY2Vzcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUGFzc1Bvc3RQcm9j
ZXNzLCBQYXNzQ3ViZVBvc3RQcm9jZXNzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBhc3NQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGFzc1Bvc3RQcm9j
ZXNzOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhc3NDdWJlUG9zdFByb2Nlc3MiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFBhc3NDdWJlUG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vcG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0
UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
RW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfU2hhZGVyc19wYXNzX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL3Bhc3MuZnJhZ21lbnQg
Ki8gIi4vU2hhZGVycy9wYXNzLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNfcGFzc0N1YmVfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvcGFzc0N1YmUuZnJhZ21lbnQg
Ki8gIi4vU2hhZGVycy9wYXNzQ3ViZS5mcmFnbWVudC50cyIpOworCisKKworCisKKworLyoqCisg
KiBQYXNzUG9zdFByb2Nlc3Mgd2hpY2ggcHJvZHVjZXMgYW4gb3V0cHV0IHRoZSBzYW1lIGFzIGl0
J3MgaW5wdXQKKyAqLwordmFyIFBhc3NQb3N0UHJvY2VzcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShQYXNzUG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyB0aGUgUGFzc1Bvc3RQcm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2Yg
dGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgcmVxdWlyZWQgd2lkdGgvaGVp
Z2h0IHJhdGlvIHRvIGRvd25zaXplIHRvIGJlZm9yZSBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNz
LgorICAgICAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0byBhcHBseSB0aGUgcmVuZGVyIHBh
c3MgdG8uCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBi
ZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBwYXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFy
YW0gZW5naW5lIFRoZSBlbmdpbmUgd2hpY2ggdGhlIHBvc3QgcHJvY2VzcyB3aWxsIGJlIGFwcGxp
ZWQuIChkZWZhdWx0OiBjdXJyZW50IGVuZ2luZSkKKyAgICAgKiBAcGFyYW0gcmV1c2FibGUgSWYg
dGhlIHBvc3QgcHJvY2VzcyBjYW4gYmUgcmV1c2VkIG9uIHRoZSBzYW1lIGZyYW1lLiAoZGVmYXVs
dDogZmFsc2UpCisgICAgICogQHBhcmFtIHRleHR1cmVUeXBlIFRoZSB0eXBlIG9mIHRleHR1cmUg
dG8gYmUgdXNlZCB3aGVuIHBlcmZvcm1pbmcgdGhlIHBvc3QgcHJvY2Vzc2luZy4KKyAgICAgKiBA
cGFyYW0gYmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxhdGlvbiBvZiB0aGUgc2hhZGVyIHNob3Vs
ZCBub3QgYmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSB1cGRhdGVFZmZlY3QgbWV0aG9k
IGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRlciBhdCBhIGxhdGVyIHRpbWUuIChkZWZh
dWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQYXNzUG9zdFByb2Nlc3MobmFtZSwg
b3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUsIHRleHR1cmVU
eXBlLCBibG9ja0NvbXBpbGF0aW9uKSB7CisgICAgICAgIGlmIChjYW1lcmEgPT09IHZvaWQgMCkg
eyBjYW1lcmEgPSBudWxsOyB9CisgICAgICAgIGlmICh0ZXh0dXJlVHlwZSA9PT0gdm9pZCAwKSB7
IHRleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICBp
ZiAoYmxvY2tDb21waWxhdGlvbiA9PT0gdm9pZCAwKSB7IGJsb2NrQ29tcGlsYXRpb24gPSBmYWxz
ZTsgfQorICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgInBhc3MiLCBudWxs
LCBudWxsLCBvcHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwg
dW5kZWZpbmVkLCB0ZXh0dXJlVHlwZSwgdW5kZWZpbmVkLCBudWxsLCBibG9ja0NvbXBpbGF0aW9u
KSB8fCB0aGlzOworICAgIH0KKyAgICByZXR1cm4gUGFzc1Bvc3RQcm9jZXNzOworfShfcG9zdFBy
b2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUG9zdFByb2Nlc3MiXSkpOworCisv
KioKKyAqIFBhc3NDdWJlUG9zdFByb2Nlc3Mgd2hpY2ggcHJvZHVjZXMgYW4gb3V0cHV0IHRoZSBz
YW1lIGFzIGl0J3MgaW5wdXQgKHdoaWNoIG11c3QgYmUgYSBjdWJlIHRleHR1cmUpCisgKi8KK3Zh
ciBQYXNzQ3ViZVBvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikg
eworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFBh
c3NDdWJlUG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0aGUg
UGFzc0N1YmVQb3N0UHJvY2VzcworICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBl
ZmZlY3QuCisgICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIHJlcXVpcmVkIHdpZHRoL2hlaWdodCBy
YXRpbyB0byBkb3duc2l6ZSB0byBiZWZvcmUgY29tcHV0aW5nIHRoZSByZW5kZXIgcGFzcy4KKyAg
ICAgKiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gYXBwbHkgdGhlIHJlbmRlciBwYXNzIHRv
LgorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgVGhlIHNhbXBsaW5nIG1vZGUgdG8gYmUgdXNl
ZCB3aGVuIGNvbXB1dGluZyB0aGUgcGFzcy4gKGRlZmF1bHQ6IDApCisgICAgICogQHBhcmFtIGVu
Z2luZSBUaGUgZW5naW5lIHdoaWNoIHRoZSBwb3N0IHByb2Nlc3Mgd2lsbCBiZSBhcHBsaWVkLiAo
ZGVmYXVsdDogY3VycmVudCBlbmdpbmUpCisgICAgICogQHBhcmFtIHJldXNhYmxlIElmIHRoZSBw
b3N0IHByb2Nlc3MgY2FuIGJlIHJldXNlZCBvbiB0aGUgc2FtZSBmcmFtZS4gKGRlZmF1bHQ6IGZh
bHNlKQorICAgICAqIEBwYXJhbSB0ZXh0dXJlVHlwZSBUaGUgdHlwZSBvZiB0ZXh0dXJlIHRvIGJl
IHVzZWQgd2hlbiBwZXJmb3JtaW5nIHRoZSBwb3N0IHByb2Nlc3NpbmcuCisgICAgICogQHBhcmFt
IGJsb2NrQ29tcGlsYXRpb24gSWYgY29tcGlsYXRpb24gb2YgdGhlIHNoYWRlciBzaG91bGQgbm90
IGJlIGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLiBUaGUgdXBkYXRlRWZmZWN0IG1ldGhvZCBjYW4g
YmUgdXNlZCB0byBjb21waWxlIHRoZSBzaGFkZXIgYXQgYSBsYXRlciB0aW1lLiAoZGVmYXVsdDog
ZmFsc2UpCisgICAgICovCisgICAgZnVuY3Rpb24gUGFzc0N1YmVQb3N0UHJvY2VzcyhuYW1lLCBv
cHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgdGV4dHVyZVR5
cGUsIGJsb2NrQ29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKGNhbWVyYSA9PT0gdm9pZCAwKSB7
IGNhbWVyYSA9IG51bGw7IH0KKyAgICAgICAgaWYgKHRleHR1cmVUeXBlID09PSB2b2lkIDApIHsg
dGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAgIGlm
IChibG9ja0NvbXBpbGF0aW9uID09PSB2b2lkIDApIHsgYmxvY2tDb21waWxhdGlvbiA9IGZhbHNl
OyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsICJwYXNzQ3Vi
ZSIsIG51bGwsIG51bGwsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJl
dXNhYmxlLCAiI2RlZmluZSBQT1NJVElWRVgiLCB0ZXh0dXJlVHlwZSwgdW5kZWZpbmVkLCBudWxs
LCBibG9ja0NvbXBpbGF0aW9uKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fZmFjZSA9IDA7Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBh
c3NDdWJlUG9zdFByb2Nlc3MucHJvdG90eXBlLCAiZmFjZSIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY3ViZSBmYWNlIHRvIGRpc3BsYXkuCisgICAgICAgICAq
ICAqIDAgaXMgK1gKKyAgICAgICAgICogICogMSBpcyAtWAorICAgICAgICAgKiAgKiAyIGlzICtZ
CisgICAgICAgICAqICAqIDMgaXMgLVkKKyAgICAgICAgICogICogNCBpcyArWgorICAgICAgICAg
KiAgKiA1IGlzIC1aCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9mYWNlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDUp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aGlzLl9mYWNlID0gdmFsdWU7CisgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX2ZhY2UpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWZm
ZWN0KCIjZGVmaW5lIFBPU0lUSVZFWCIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWZm
ZWN0KCIjZGVmaW5lIE5FR0FUSVZFWCIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWZm
ZWN0KCIjZGVmaW5lIFBPU0lUSVZFWSIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWZm
ZWN0KCIjZGVmaW5lIE5FR0FUSVZFWSIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWZm
ZWN0KCIjZGVmaW5lIFBPU0lUSVZFWiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWZm
ZWN0KCIjZGVmaW5lIE5FR0FUSVZFWiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgcmV0dXJuIFBhc3NDdWJlUG9zdFBy
b2Nlc3M7Cit9KF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQb3N0
UHJvY2VzcyJdKSk7CisKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJFbmdpbmUiXS5fUmVzY2FsZVBvc3RQcm9jZXNzRmFjdG9yeSA9IGZ1bmN0aW9uIChlbmdp
bmUpIHsKKyAgICByZXR1cm4gbmV3IFBhc3NQb3N0UHJvY2VzcygicmVzY2FsZSIsIDEsIG51bGws
IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5U
RVhUVVJFX0JJTElORUFSX1NBTVBMSU5HTU9ERSwgZW5naW5lLCBmYWxzZSwgX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLlRFWFRVUkVUWVBFX1VO
U0lHTkVEX0lOVCk7Cit9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2Vz
L3Bvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IFBvc3RQcm9jZXNzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBv
c3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQb3N0UHJvY2VzczsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2Nfc21hcnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9zbWFydEFycmF5ICovICIu
L01pc2Mvc21hcnRBcnJheS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29i
c2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVj
dG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2Nv
bnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX3Bvc3Rwcm9j
ZXNzX3ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vU2hhZGVycy9wb3N0cHJvY2Vzcy52ZXJ0ZXggKi8gIi4vU2hhZGVycy9wb3N0
cHJvY2Vzcy52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisKKworCisK
KworCisvKioKKyAqIFBvc3RQcm9jZXNzIGNhbiBiZSB1c2VkIHRvIGFwcGx5IGEgc2hhZGVyIHRv
IGEgdGV4dHVyZSBhZnRlciBpdCBoYXMgYmVlbiByZW5kZXJlZAorICogU2VlIGh0dHBzOi8vZG9j
LmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfcG9zdHByb2Nlc3NlcworICovCit2YXIg
UG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBQb3N0UHJvY2VzcworICAgICAqIEBwYXJhbSBuYW1l
IFRoZSBuYW1lIG9mIHRoZSBQb3N0UHJvY2Vzcy4KKyAgICAgKiBAcGFyYW0gZnJhZ21lbnRVcmwg
VGhlIHVybCBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyIHRvIGJlIHVzZWQuCisgICAgICogQHBhcmFt
IHBhcmFtZXRlcnMgQXJyYXkgb2YgdGhlIG5hbWVzIG9mIHVuaWZvcm0gbm9uLXNhbXBsZXIyRCB2
YXJpYWJsZXMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgc2hhZGVyLgorICAgICAqIEBwYXJh
bSBzYW1wbGVycyBBcnJheSBvZiB0aGUgbmFtZXMgb2YgdW5pZm9ybSBzYW1wbGVyMkQgdmFyaWFi
bGVzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0gb3B0
aW9ucyBUaGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlvIHRvIGRvd25zaXplIHRvIGJlZm9y
ZSBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzLiAoVXNlIDEuMCBmb3IgZnVsbCBzaXplKQorICAg
ICAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0byBhcHBseSB0aGUgcmVuZGVyIHBhc3MgdG8u
CisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2Vk
IHdoZW4gY29tcHV0aW5nIHRoZSBwYXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gZW5n
aW5lIFRoZSBlbmdpbmUgd2hpY2ggdGhlIHBvc3QgcHJvY2VzcyB3aWxsIGJlIGFwcGxpZWQuIChk
ZWZhdWx0OiBjdXJyZW50IGVuZ2luZSkKKyAgICAgKiBAcGFyYW0gcmV1c2FibGUgSWYgdGhlIHBv
c3QgcHJvY2VzcyBjYW4gYmUgcmV1c2VkIG9uIHRoZSBzYW1lIGZyYW1lLiAoZGVmYXVsdDogZmFs
c2UpCisgICAgICogQHBhcmFtIGRlZmluZXMgU3RyaW5nIG9mIGRlZmluZXMgdGhhdCB3aWxsIGJl
IHNldCB3aGVuIHJ1bm5pbmcgdGhlIGZyYWdtZW50IHNoYWRlci4gKGRlZmF1bHQ6IG51bGwpCisg
ICAgICogQHBhcmFtIHRleHR1cmVUeXBlIFR5cGUgb2YgdGV4dHVyZXMgdXNlZCB3aGVuIHBlcmZv
cm1pbmcgdGhlIHBvc3QgcHJvY2Vzcy4gKGRlZmF1bHQ6IDApCisgICAgICogQHBhcmFtIHZlcnRl
eFVybCBUaGUgdXJsIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyIHRvIGJlIHVzZWQuIChkZWZhdWx0OiAi
cG9zdHByb2Nlc3MiKQorICAgICAqIEBwYXJhbSBpbmRleFBhcmFtZXRlcnMgVGhlIGluZGV4IHBh
cmFtZXRlcnMgdG8gYmUgdXNlZCBmb3IgYmFieWxvbnMgaW5jbHVkZSBzeW50YXggIiNpbmNsdWRl
PGtlcm5lbEJsdXJWYXJ5aW5nRGVjbGFyYXRpb24+WzAuLnZhcnlpbmdDb3VudF0iLiAoZGVmYXVs
dDogdW5kZWZpbmVkKSBTZWUgdXNhZ2UgaW4gYmFieWxvbi5ibHVyUG9zdFByb2Nlc3MudHMgYW5k
IGtlcm5lbEJsdXIudmVydGV4LmZ4CisgICAgICogQHBhcmFtIGJsb2NrQ29tcGlsYXRpb24gSWYg
dGhlIHNoYWRlciBzaG91bGQgbm90IGJlIGNvbXBpbGVkIGltZWRpYXRseS4gKGRlZmF1bHQ6IGZh
bHNlKQorICAgICAqLworICAgIGZ1bmN0aW9uIFBvc3RQcm9jZXNzKAorICAgIC8qKiBOYW1lIG9m
IHRoZSBQb3N0UHJvY2Vzcy4gKi8KKyAgICBuYW1lLCBmcmFnbWVudFVybCwgcGFyYW1ldGVycywg
c2FtcGxlcnMsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxl
LCBkZWZpbmVzLCB0ZXh0dXJlVHlwZSwgdmVydGV4VXJsLCBpbmRleFBhcmFtZXRlcnMsIGJsb2Nr
Q29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKHNhbXBsaW5nTW9kZSA9PT0gdm9pZCAwKSB7IHNh
bXBsaW5nTW9kZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1RfU0FNUExJTkdNT0RFOyB9CisgICAgICAg
IGlmIChkZWZpbmVzID09PSB2b2lkIDApIHsgZGVmaW5lcyA9IG51bGw7IH0KKyAgICAgICAgaWYg
KHRleHR1cmVUeXBlID09PSB2b2lkIDApIHsgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVf
VU5TSUdORURfSU5UOyB9CisgICAgICAgIGlmICh2ZXJ0ZXhVcmwgPT09IHZvaWQgMCkgeyB2ZXJ0
ZXhVcmwgPSAicG9zdHByb2Nlc3MiOyB9CisgICAgICAgIGlmIChibG9ja0NvbXBpbGF0aW9uID09
PSB2b2lkIDApIHsgYmxvY2tDb21waWxhdGlvbiA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMubmFt
ZSA9IG5hbWU7CisgICAgICAgIC8qKgorICAgICAgICAqIFdpZHRoIG9mIHRoZSB0ZXh0dXJlIHRv
IGFwcGx5IHRoZSBwb3N0IHByb2Nlc3Mgb24KKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy53aWR0
aCA9IC0xOworICAgICAgICAvKioKKyAgICAgICAgKiBIZWlnaHQgb2YgdGhlIHRleHR1cmUgdG8g
YXBwbHkgdGhlIHBvc3QgcHJvY2VzcyBvbgorICAgICAgICAqLworICAgICAgICB0aGlzLmhlaWdo
dCA9IC0xOworICAgICAgICAvKioKKyAgICAgICAgKiBJbnRlcm5hbCwgcmVmZXJlbmNlIHRvIHRo
ZSBsb2NhdGlvbiB3aGVyZSB0aGlzIHBvc3Rwcm9jZXNzIHdhcyBvdXRwdXQgdG8uIChUeXBpY2Fs
bHkgdGhlIHRleHR1cmUgb24gdGhlIG5leHQgcG9zdHByb2Nlc3MgaW4gdGhlIGNoYWluKQorICAg
ICAgICAqIEBoaWRkZW4KKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZSA9
IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAqIElmIHRoZSBidWZmZXIgbmVlZHMgdG8gYmUg
Y2xlYXJlZCBiZWZvcmUgYXBwbHlpbmcgdGhlIHBvc3QgcHJvY2Vzcy4gKGRlZmF1bHQ6IHRydWUp
CisgICAgICAgICogU2hvdWxkIGJlIHNldCB0byBmYWxzZSBpZiBzaGFkZXIgd2lsbCBvdmVyd3Jp
dGUgYWxsIHByZXZpb3VzIHBpeGVscy4KKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5hdXRvQ2xl
YXIgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgKiBUeXBlIG9mIGFscGhhIG1vZGUgdG8g
dXNlIHdoZW4gcGVyZm9ybWluZyB0aGUgcG9zdCBwcm9jZXNzIChkZWZhdWx0OiBFbmdpbmUuQUxQ
SEFfRElTQUJMRSkKKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5hbHBoYU1vZGUgPSBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUxQ
SEFfRElTQUJMRTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW5pbWF0aW9ucyB0byBiZSB1c2Vk
IGZvciB0aGUgcG9zdCBwcm9jZXNzaW5nCisgICAgICAgICovCisgICAgICAgIHRoaXMuYW5pbWF0
aW9ucyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogRW5hYmxlIFBpeGVs
IFBlcmZlY3QgbW9kZSB3aGVyZSB0ZXh0dXJlIGlzIG5vdCBzY2FsZWQgdG8gYmUgcG93ZXIgb2Yg
Mi4KKyAgICAgICAgICogQ2FuIG9ubHkgYmUgdXNlZCBvbiBhIHNpbmdsZSBwb3N0cHJvY2VzcyBv
ciBvbiB0aGUgbGFzdCBvbmUgb2YgYSBjaGFpbi4gKGRlZmF1bHQ6IGZhbHNlKQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5lbmFibGVQaXhlbFBlcmZlY3RNb2RlID0gZmFsc2U7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBGb3JjZSB0aGUgcG9zdHByb2Nlc3MgdG8gYmUgYXBwbGllZCB3aXRo
b3V0IHRha2luZyBpbiBhY2NvdW50IHZpZXdwb3J0CisgICAgICAgICAqLworICAgICAgICB0aGlz
LmZvcmNlRnVsbHNjcmVlblZpZXdwb3J0ID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFNjYWxlIG1vZGUgZm9yIHRoZSBwb3N0IHByb2Nlc3MgKGRlZmF1bHQ6IEVuZ2luZS5TQ0FMRU1P
REVfRkxPT1IpCisgICAgICAgICAqCisgICAgICAgICAqIHwgVmFsdWUgfCBUeXBlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uIHwKKyAgICAgICAgICogfCAtLS0t
LSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfAor
ICAgICAgICAgKiB8IDEgICAgIHwgU0NBTEVNT0RFX0ZMT09SICAgICAgICAgICAgICAgICAgICAg
fCBbZW5naW5lLnNjYWxlbW9kZV9mbG9vcl0oaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2FwaS9j
bGFzc2VzL2JhYnlsb24uZW5naW5lI3NjYWxlbW9kZV9mbG9vcikgfAorICAgICAgICAgKiB8IDIg
ICAgIHwgU0NBTEVNT0RFX05FQVJFU1QgICAgICAgICAgICAgICAgICAgfCBbZW5naW5lLnNjYWxl
bW9kZV9uZWFyZXN0XShodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYXBpL2NsYXNzZXMvYmFieWxv
bi5lbmdpbmUjc2NhbGVtb2RlX25lYXJlc3QpIHwKKyAgICAgICAgICogfCAzICAgICB8IFNDQUxF
TU9ERV9DRUlMSU5HICAgICAgICAgICAgICAgICAgIHwgW2VuZ2luZS5zY2FsZW1vZGVfY2VpbGlu
Z10oaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2FwaS9jbGFzc2VzL2JhYnlsb24uZW5naW5lI3Nj
YWxlbW9kZV9jZWlsaW5nKSB8CisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICB0aGlz
LnNjYWxlTW9kZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJFbmdpbmUiXS5TQ0FMRU1PREVfRkxPT1I7CisgICAgICAgIC8qKgorICAgICAgICAqIEZvcmNl
IHRleHR1cmVzIHRvIGJlIGEgcG93ZXIgb2YgdHdvIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5hbHdheXNGb3JjZVBPVCA9IGZhbHNlOworICAgICAgICB0aGlzLl9z
YW1wbGVzID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICogTW9kaWZ5IHRoZSBzY2FsZSBvZiB0
aGUgcG9zdCBwcm9jZXNzIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSB2aWV3cG9ydCAoZGVmYXVsdDog
ZmFsc2UpCisgICAgICAgICovCisgICAgICAgIHRoaXMuYWRhcHRTY2FsZVRvQ3VycmVudFZpZXdw
b3J0ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3JldXNhYmxlID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAqIFNtYXJ0IGFycmF5IG9mIGlucHV0IGFuZCBvdXRwdXQgdGV4dHVyZXMgZm9y
IHRoZSBwb3N0IHByb2Nlc3MuCisgICAgICAgICogQGhpZGRlbgorICAgICAgICAqLworICAgICAg
ICB0aGlzLl90ZXh0dXJlcyA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlNtYXJ0QXJyYXkiXSgyKTsKKyAgICAgICAgLyoqCisgICAgICAgICogVGhl
IGluZGV4IGluIF90ZXh0dXJlcyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBvdXRwdXQgdGV4dHVy
ZS4KKyAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICovCisgICAgICAgIHRoaXMuX2N1cnJlbnRS
ZW5kZXJUZXh0dXJlSW5kID0gMDsKKyAgICAgICAgdGhpcy5fc2NhbGVSYXRpbyA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMiJdKDEs
IDEpOworICAgICAgICB0aGlzLl90ZXhlbFNpemUgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMiJdLlplcm8oKTsKKyAgICAgICAgLy8gRXZl
bnRzCisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBw
b3N0cHJvY2VzcyBpcyBhY3RpdmF0ZWQuCisgICAgICAgICovCisgICAgICAgIHRoaXMub25BY3Rp
dmF0ZU9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZl
bnQgdHJpZ2dlcmVkIHdoZW4gdGhlIHBvc3Rwcm9jZXNzIGNoYW5nZXMgaXRzIHNpemUuCisgICAg
ICAgICovCisgICAgICAgIHRoaXMub25TaXplQ2hhbmdlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nf
b2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsK
KyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIHBvc3Rw
cm9jZXNzIGFwcGxpZXMgaXRzIGVmZmVjdC4KKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkFw
cGx5T2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVu
dCB0cmlnZ2VyZWQgYmVmb3JlIHJlbmRlcmluZyB0aGUgcG9zdHByb2Nlc3MKKyAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGFmdGVyIHJlbmRlcmluZyB0aGUg
cG9zdHByb2Nlc3MKKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2
YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
Ik9ic2VydmFibGUiXSgpOworICAgICAgICBpZiAoY2FtZXJhICE9IG51bGwpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2NhbWVyYSA9IGNhbWVyYTsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lID0gY2Ft
ZXJhLmdldFNjZW5lKCk7CisgICAgICAgICAgICBjYW1lcmEuYXR0YWNoUG9zdFByb2Nlc3ModGhp
cyk7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKTsK
KyAgICAgICAgICAgIHRoaXMuX3NjZW5lLnBvc3RQcm9jZXNzZXMucHVzaCh0aGlzKTsKKyAgICAg
ICAgICAgIHRoaXMudW5pcXVlSWQgPSB0aGlzLl9zY2VuZS5nZXRVbmlxdWVJZCgpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGVuZ2luZSkgeworICAgICAgICAgICAgdGhpcy5fZW5naW5l
ID0gZW5naW5lOworICAgICAgICAgICAgdGhpcy5fZW5naW5lLnBvc3RQcm9jZXNzZXMucHVzaCh0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9uczsKKyAgICAg
ICAgdGhpcy5yZW5kZXJUYXJnZXRTYW1wbGluZ01vZGUgPSBzYW1wbGluZ01vZGUgPyBzYW1wbGlu
Z01vZGUgOiBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
Q29uc3RhbnRzIl0uVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5HTU9ERTsKKyAgICAgICAgdGhpcy5f
cmV1c2FibGUgPSByZXVzYWJsZSB8fCBmYWxzZTsKKyAgICAgICAgdGhpcy5fdGV4dHVyZVR5cGUg
PSB0ZXh0dXJlVHlwZTsKKyAgICAgICAgdGhpcy5fc2FtcGxlcnMgPSBzYW1wbGVycyB8fCBbXTsK
KyAgICAgICAgdGhpcy5fc2FtcGxlcnMucHVzaCgidGV4dHVyZVNhbXBsZXIiKTsKKyAgICAgICAg
dGhpcy5fZnJhZ21lbnRVcmwgPSBmcmFnbWVudFVybDsKKyAgICAgICAgdGhpcy5fdmVydGV4VXJs
ID0gdmVydGV4VXJsOworICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCBb
XTsKKyAgICAgICAgdGhpcy5fcGFyYW1ldGVycy5wdXNoKCJzY2FsZSIpOworICAgICAgICB0aGlz
Ll9pbmRleFBhcmFtZXRlcnMgPSBpbmRleFBhcmFtZXRlcnM7CisgICAgICAgIGlmICghYmxvY2tD
b21waWxhdGlvbikgeworICAgICAgICAgICAgdGhpcy51cGRhdGVFZmZlY3QoZGVmaW5lcyk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvc3RQcm9jZXNzLnBy
b3RvdHlwZSwgInNhbXBsZXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIE51bWJlciBvZiBz
YW1wbGUgdGV4dHVyZXMgKGRlZmF1bHQ6IDEpCisgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NhbXBsZXM7CisgICAgICAgIH0s
CisgICAgICAgIHNldDogZnVuY3Rpb24gKG4pIHsKKyAgICAgICAgICAgIHZhciBfdGhpcyA9IHRo
aXM7CisgICAgICAgICAgICB0aGlzLl9zYW1wbGVzID0gTWF0aC5taW4obiwgdGhpcy5fZW5naW5l
LmdldENhcHMoKS5tYXhNU0FBU2FtcGxlcyk7CisgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5m
b3JFYWNoKGZ1bmN0aW9uICh0ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUu
c2FtcGxlcyAhPT0gX3RoaXMuX3NhbXBsZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMu
X2VuZ2luZS51cGRhdGVSZW5kZXJUYXJnZXRUZXh0dXJlU2FtcGxlQ291bnQodGV4dHVyZSwgX3Ro
aXMuX3NhbXBsZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBmcmFnbWVudCB1cmwgb3Ig
c2hhZGVyIG5hbWUgdXNlZCBpbiB0aGUgcG9zdCBwcm9jZXNzLgorICAgICAqIEByZXR1cm5zIHRo
ZSBmcmFnbWVudCB1cmwgb3IgbmFtZSBpbiB0aGUgc2hhZGVyIHN0b3JlLgorICAgICAqLworICAg
IFBvc3RQcm9jZXNzLnByb3RvdHlwZS5nZXRFZmZlY3ROYW1lID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5fZnJhZ21lbnRVcmw7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoUG9zdFByb2Nlc3MucHJvdG90eXBlLCAib25BY3RpdmF0ZSIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICogQSBmdW5jdGlvbiB0aGF0IGlzIGFkZGVkIHRvIHRoZSBvbkFjdGl2YXRl
T2JzZXJ2YWJsZQorICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjYWxsYmFjaykg
eworICAgICAgICAgICAgaWYgKHRoaXMuX29uQWN0aXZhdGVPYnNlcnZlcikgeworICAgICAgICAg
ICAgICAgIHRoaXMub25BY3RpdmF0ZU9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQWN0aXZhdGVP
YnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9vbkFjdGl2YXRlT2JzZXJ2ZXIgPSB0aGlzLm9uQWN0aXZhdGVP
YnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJvblNp
emVDaGFuZ2VkIiwgeworICAgICAgICAvKioKKyAgICAgICAgKiBBIGZ1bmN0aW9uIHRoYXQgaXMg
YWRkZWQgdG8gdGhlIG9uU2l6ZUNoYW5nZWRPYnNlcnZhYmxlCisgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb25TaXpl
Q2hhbmdlZE9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vblNpemVDaGFuZ2VkT2Jz
ZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25TaXplQ2hhbmdlZE9ic2VydmVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuX29uU2l6ZUNoYW5nZWRPYnNlcnZlciA9IHRoaXMub25TaXpl
Q2hhbmdlZE9ic2VydmFibGUuYWRkKGNhbGxiYWNrKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFBvc3RQcm9jZXNzLnByb3RvdHlwZSwgIm9uQXBwbHkiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAqIEEgZnVuY3Rpb24gdGhhdCBpcyBhZGRlZCB0byB0aGUg
b25BcHBseU9ic2VydmFibGUKKyAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2Fs
bGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbkFwcGx5T2JzZXJ2ZXIpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLm9uQXBwbHlPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFwcGx5T2Jz
ZXJ2ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fb25BcHBseU9ic2VydmVy
ID0gdGhpcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoY2FsbGJhY2spOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9zdFByb2Nlc3MucHJvdG90eXBlLCAib25C
ZWZvcmVSZW5kZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIEEgZnVuY3Rpb24gdGhhdCBp
cyBhZGRlZCB0byB0aGUgb25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlCisgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb25C
ZWZvcmVSZW5kZXJPYnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMub25CZWZvcmVSZW5k
ZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkJlZm9yZVJlbmRlck9ic2VydmVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX29uQmVmb3JlUmVuZGVyT2JzZXJ2ZXIgPSB0aGlz
Lm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5hZGQoY2FsbGJhY2spOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9zdFByb2Nlc3MucHJvdG90eXBlLCAib25B
ZnRlclJlbmRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICogQSBmdW5jdGlvbiB0aGF0IGlz
IGFkZGVkIHRvIHRoZSBvbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZQorICAgICAgICAqLworICAgICAg
ICBzZXQ6IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX29uQWZ0
ZXJSZW5kZXJPYnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMub25BZnRlclJlbmRlck9i
c2VydmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJSZW5kZXJPYnNlcnZlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9vbkFmdGVyUmVuZGVyT2JzZXJ2ZXIgPSB0aGlzLm9uQWZ0
ZXJSZW5kZXJPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJpbnB1dFRleHR1
cmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIFRoZSBpbnB1dCB0ZXh0dXJlIGZvciB0aGlz
IHBvc3QgcHJvY2VzcyBhbmQgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHRoZSBwcmV2aW91cyBwb3N0
IHByb2Nlc3MuIFdoZW4gYWRkZWQgdG8gYSBwaXBlbGluZSB0aGUgcHJldmlvdXMgcG9zdCBwcm9j
ZXNzIHdpbGwKKyAgICAgICAgKiByZW5kZXIgaXQncyBvdXRwdXQgaW50byB0aGlzIHRleHR1cmUg
YW5kIHRoaXMgdGV4dHVyZSB3aWxsIGJlIHVzZWQgYXMgdGV4dHVyZVNhbXBsZXIgaW4gdGhlIGZy
YWdtZW50IHNoYWRlciBvZiB0aGlzIHBvc3QgcHJvY2Vzcy4KKyAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXMuZGF0
YVt0aGlzLl9jdXJyZW50UmVuZGVyVGV4dHVyZUluZF07CisgICAgICAgIH0sCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9mb3JjZWRPdXRwdXRUZXh0
dXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICogR2V0cyB0aGUg
Y2FtZXJhIHdoaWNoIHBvc3QgcHJvY2VzcyBpcyBhcHBsaWVkIHRvLgorICAgICogQHJldHVybnMg
VGhlIGNhbWVyYSB0aGUgcG9zdCBwcm9jZXNzIGlzIGFwcGxpZWQgdG8uCisgICAgKi8KKyAgICBQ
b3N0UHJvY2Vzcy5wcm90b3R5cGUuZ2V0Q2FtZXJhID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fY2FtZXJhOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBv
c3RQcm9jZXNzLnByb3RvdHlwZSwgInRleGVsU2l6ZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICogR2V0cyB0aGUgdGV4ZWwgc2l6ZSBvZiB0aGUgcG9zdHByb2Nlc3MuCisgICAgICAgICogU2Vl
IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RleGVsXyhncmFwaGljcykKKyAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fc2hh
cmVPdXRwdXRXaXRoUG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
c2hhcmVPdXRwdXRXaXRoUG9zdFByb2Nlc3MudGV4ZWxTaXplOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHRoaXMuX2ZvcmNlZE91dHB1dFRleHR1cmUpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl90ZXhlbFNpemUuY29weUZyb21GbG9hdHMoMS4wIC8gdGhpcy5fZm9yY2VkT3V0cHV0
VGV4dHVyZS53aWR0aCwgMS4wIC8gdGhpcy5fZm9yY2VkT3V0cHV0VGV4dHVyZS5oZWlnaHQpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleGVsU2l6ZTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyBpZGVuZmlmeWluZyB0
aGUgbmFtZSBvZiB0aGUgY2xhc3MKKyAgICAgKiBAcmV0dXJucyAiUG9zdFByb2Nlc3MiIHN0cmlu
ZworICAgICAqLworICAgIFBvc3RQcm9jZXNzLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiUG9zdFByb2Nlc3MiOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgZW5naW5lIHdoaWNoIHRoaXMgcG9zdCBwcm9jZXNzIGJlbG9uZ3Mg
dG8uCisgICAgICogQHJldHVybnMgVGhlIGVuZ2luZSB0aGUgcG9zdCBwcm9jZXNzIHdhcyBlbmFi
bGVkIHdpdGguCisgICAgICovCisgICAgUG9zdFByb2Nlc3MucHJvdG90eXBlLmdldEVuZ2luZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuZ2luZTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFRoZSBlZmZlY3QgdGhhdCBpcyBjcmVhdGVkIHdoZW4gaW5pdGlhbGl6aW5n
IHRoZSBwb3N0IHByb2Nlc3MuCisgICAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgZWZmZWN0IGNv
cnJlc3BvbmRpbmcgdGhlIHRoZSBwb3N0cHJvY2Vzcy4KKyAgICAgKi8KKyAgICBQb3N0UHJvY2Vz
cy5wcm90b3R5cGUuZ2V0RWZmZWN0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5fZWZmZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogVG8gYXZvaWQgbXVsdGlwbGUgcmVk
dW5kYW50IHRleHR1cmVzIGZvciBtdWx0aXBsZSBwb3N0IHByb2Nlc3MsIHRoZSBvdXRwdXQgdGhl
IG91dHB1dCB0ZXh0dXJlIGZvciB0aGlzIHBvc3QgcHJvY2VzcyBjYW4gYmUgc2hhcmVkIHdpdGgg
YW5vdGhlci4KKyAgICAgKiBAcGFyYW0gcG9zdFByb2Nlc3MgVGhlIHBvc3QgcHJvY2VzcyB0byBz
aGFyZSB0aGUgb3V0cHV0IHdpdGguCisgICAgICogQHJldHVybnMgVGhpcyBwb3N0IHByb2Nlc3Mu
CisgICAgICovCisgICAgUG9zdFByb2Nlc3MucHJvdG90eXBlLnNoYXJlT3V0cHV0V2l0aCA9IGZ1
bmN0aW9uIChwb3N0UHJvY2VzcykgeworICAgICAgICB0aGlzLl9kaXNwb3NlVGV4dHVyZXMoKTsK
KyAgICAgICAgdGhpcy5fc2hhcmVPdXRwdXRXaXRoUG9zdFByb2Nlc3MgPSBwb3N0UHJvY2VzczsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXZlcnNlcyB0
aGUgZWZmZWN0IG9mIGNhbGxpbmcgc2hhcmVPdXRwdXRXaXRoIGFuZCByZXR1cm5zIHRoZSBwb3N0
IHByb2Nlc3MgYmFjayB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCisgICAgICogVGhpcyBzaG91bGQg
YmUgY2FsbGVkIGlmIHRoZSBwb3N0IHByb2Nlc3MgdGhhdCBzaGFyZXMgb3V0cHV0IHdpdGggdGhp
cyBwb3N0IHByb2Nlc3MgaXMgZGlzYWJsZWQvZGlzcG9zZWQuCisgICAgICovCisgICAgUG9zdFBy
b2Nlc3MucHJvdG90eXBlLnVzZU93bk91dHB1dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMuX3RleHR1cmVzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICB0aGlzLl90ZXh0dXJl
cyA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNt
YXJ0QXJyYXkiXSgyKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zaGFyZU91dHB1dFdpdGhQ
b3N0UHJvY2VzcyA9IG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBl
ZmZlY3Qgd2l0aCB0aGUgY3VycmVudCBwb3N0IHByb2Nlc3MgY29tcGlsZSB0aW1lIHZhbHVlcyBh
bmQgcmVjb21waWxlcyB0aGUgc2hhZGVyLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIERlZmluZSBz
dGF0ZW1lbnRzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNo
YWRlci4gKGRlZmF1bHQ6IG51bGwpCisgICAgICogQHBhcmFtIHVuaWZvcm1zIFNldCBvZiB1bmlm
b3JtIHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzaGFkZXIuIChkZWZhdWx0
OiBudWxsKQorICAgICAqIEBwYXJhbSBzYW1wbGVycyBTZXQgb2YgVGV4dHVyZTJEIHZhcmlhYmxl
cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzaGFkZXIuIChkZWZhdWx0OiBudWxsKQorICAg
ICAqIEBwYXJhbSBpbmRleFBhcmFtZXRlcnMgVGhlIGluZGV4IHBhcmFtZXRlcnMgdG8gYmUgdXNl
ZCBmb3IgYmFieWxvbnMgaW5jbHVkZSBzeW50YXggIiNpbmNsdWRlPGtlcm5lbEJsdXJWYXJ5aW5n
RGVjbGFyYXRpb24+WzAuLnZhcnlpbmdDb3VudF0iLiAoZGVmYXVsdDogdW5kZWZpbmVkKSBTZWUg
dXNhZ2UgaW4gYmFieWxvbi5ibHVyUG9zdFByb2Nlc3MudHMgYW5kIGtlcm5lbEJsdXIudmVydGV4
LmZ4CisgICAgICogQHBhcmFtIG9uQ29tcGlsZWQgQ2FsbGVkIHdoZW4gdGhlIHNoYWRlciBoYXMg
YmVlbiBjb21waWxlZC4KKyAgICAgKiBAcGFyYW0gb25FcnJvciBDYWxsZWQgaWYgdGhlcmUgaXMg
YW4gZXJyb3Igd2hlbiBjb21waWxpbmcgYSBzaGFkZXIuCisgICAgICovCisgICAgUG9zdFByb2Nl
c3MucHJvdG90eXBlLnVwZGF0ZUVmZmVjdCA9IGZ1bmN0aW9uIChkZWZpbmVzLCB1bmlmb3Jtcywg
c2FtcGxlcnMsIGluZGV4UGFyYW1ldGVycywgb25Db21waWxlZCwgb25FcnJvcikgeworICAgICAg
ICBpZiAoZGVmaW5lcyA9PT0gdm9pZCAwKSB7IGRlZmluZXMgPSBudWxsOyB9CisgICAgICAgIGlm
ICh1bmlmb3JtcyA9PT0gdm9pZCAwKSB7IHVuaWZvcm1zID0gbnVsbDsgfQorICAgICAgICBpZiAo
c2FtcGxlcnMgPT09IHZvaWQgMCkgeyBzYW1wbGVycyA9IG51bGw7IH0KKyAgICAgICAgdGhpcy5f
ZWZmZWN0ID0gdGhpcy5fZW5naW5lLmNyZWF0ZUVmZmVjdCh7IHZlcnRleDogdGhpcy5fdmVydGV4
VXJsLCBmcmFnbWVudDogdGhpcy5fZnJhZ21lbnRVcmwgfSwgWyJwb3NpdGlvbiJdLCB1bmlmb3Jt
cyB8fCB0aGlzLl9wYXJhbWV0ZXJzLCBzYW1wbGVycyB8fCB0aGlzLl9zYW1wbGVycywgZGVmaW5l
cyAhPT0gbnVsbCA/IGRlZmluZXMgOiAiIiwgdW5kZWZpbmVkLCBvbkNvbXBpbGVkLCBvbkVycm9y
LCBpbmRleFBhcmFtZXRlcnMgfHwgdGhpcy5faW5kZXhQYXJhbWV0ZXJzKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFRoZSBwb3N0IHByb2Nlc3MgaXMgcmV1c2FibGUgaWYgaXQgY2FuIGJlIHVz
ZWQgbXVsdGlwbGUgdGltZXMgd2l0aGluIG9uZSBmcmFtZS4KKyAgICAgKiBAcmV0dXJucyBJZiB0
aGUgcG9zdCBwcm9jZXNzIGlzIHJldXNhYmxlCisgICAgICovCisgICAgUG9zdFByb2Nlc3MucHJv
dG90eXBlLmlzUmV1c2FibGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9y
ZXVzYWJsZTsKKyAgICB9OworICAgIC8qKiBpbnZhbGlkYXRlIGZyYW1lQnVmZmVyIHRvIGhpbnQg
dGhlIHBvc3Rwcm9jZXNzIHRvIGNyZWF0ZSBhIGRlcHRoIGJ1ZmZlciAqLworICAgIFBvc3RQcm9j
ZXNzLnByb3RvdHlwZS5tYXJrVGV4dHVyZURpcnR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0
aGlzLndpZHRoID0gLTE7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBY3RpdmF0ZXMgdGhlIHBv
c3QgcHJvY2VzcyBieSBpbnRpYWxpemluZyB0aGUgdGV4dHVyZXMgdG8gYmUgdXNlZCB3aGVuIGV4
ZWN1dGVkLiBOb3RpZmllcyBvbkFjdGl2YXRlT2JzZXJ2YWJsZS4KKyAgICAgKiBXaGVuIHRoaXMg
cG9zdCBwcm9jZXNzIGlzIHVzZWQgaW4gYSBwaXBlbGluZSwgdGhpcyBpcyBjYWxsIHdpbGwgYmlu
ZCB0aGUgaW5wdXQgdGV4dHVyZSBvZiB0aGlzIHBvc3QgcHJvY2VzcyB0byB0aGUgb3V0cHV0IG9m
IHRoZSBwcmV2aW91cy4KKyAgICAgKiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdGhhdCB3aWxs
IGJlIHVzZWQgaW4gdGhlIHBvc3QgcHJvY2Vzcy4gVGhpcyBjYW1lcmEgd2lsbCBiZSB1c2VkIHdo
ZW4gY2FsbGluZyBvbkFjdGl2YXRlT2JzZXJ2YWJsZS4KKyAgICAgKiBAcGFyYW0gc291cmNlVGV4
dHVyZSBUaGUgc291cmNlIHRleHR1cmUgdG8gYmUgaW5zcGVjdGVkIHRvIGdldCB0aGUgd2lkdGgg
YW5kIGhlaWdodCBpZiBub3Qgc3BlY2lmaWVkIGluIHRoZSBwb3N0IHByb2Nlc3MgY29uc3RydWN0
b3IuIChkZWZhdWx0OiBudWxsKQorICAgICAqIEBwYXJhbSBmb3JjZURlcHRoU3RlbmNpbCBJZiB0
cnVlLCBhIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciB3aWxsIGJlIGdlbmVyYXRlZC4gKGRlZmF1
bHQ6IGZhbHNlKQorICAgICAqIEByZXR1cm5zIFRoZSB0YXJnZXQgdGV4dHVyZSB0aGF0IHdhcyBi
b3VuZCB0byBiZSB3cml0dGVuIHRvLgorICAgICAqLworICAgIFBvc3RQcm9jZXNzLnByb3RvdHlw
ZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChjYW1lcmEsIHNvdXJjZVRleHR1cmUsIGZvcmNlRGVwdGhT
dGVuY2lsKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChzb3VyY2VU
ZXh0dXJlID09PSB2b2lkIDApIHsgc291cmNlVGV4dHVyZSA9IG51bGw7IH0KKyAgICAgICAgY2Ft
ZXJhID0gY2FtZXJhIHx8IHRoaXMuX2NhbWVyYTsKKyAgICAgICAgdmFyIHNjZW5lID0gY2FtZXJh
LmdldFNjZW5lKCk7CisgICAgICAgIHZhciBlbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAg
ICAgICAgdmFyIG1heFNpemUgPSBlbmdpbmUuZ2V0Q2FwcygpLm1heFRleHR1cmVTaXplOworICAg
ICAgICB2YXIgcmVxdWlyZWRXaWR0aCA9ICgoc291cmNlVGV4dHVyZSA/IHNvdXJjZVRleHR1cmUu
d2lkdGggOiB0aGlzLl9lbmdpbmUuZ2V0UmVuZGVyV2lkdGgodHJ1ZSkpICogdGhpcy5fb3B0aW9u
cykgfCAwOworICAgICAgICB2YXIgcmVxdWlyZWRIZWlnaHQgPSAoKHNvdXJjZVRleHR1cmUgPyBz
b3VyY2VUZXh0dXJlLmhlaWdodCA6IHRoaXMuX2VuZ2luZS5nZXRSZW5kZXJIZWlnaHQodHJ1ZSkp
ICogdGhpcy5fb3B0aW9ucykgfCAwOworICAgICAgICAvLyBJZiByZW5kZXJpbmcgdG8gYSB3ZWJ2
ciBjYW1lcmEncyBsZWZ0IG9yIHJpZ2h0IGV5ZSBvbmx5IGhhbGYgdGhlIHdpZHRoIHNob3VsZCBi
ZSB1c2VkIHRvIGF2b2lkIHJlc2l6ZSB3aGVuIHJlbmRlcmVkIHRvIHNjcmVlbgorICAgICAgICB2
YXIgd2ViVlJDYW1lcmEgPSBjYW1lcmEucGFyZW50OworICAgICAgICBpZiAod2ViVlJDYW1lcmEg
JiYgKHdlYlZSQ2FtZXJhLmxlZnRDYW1lcmEgPT0gY2FtZXJhIHx8IHdlYlZSQ2FtZXJhLnJpZ2h0
Q2FtZXJhID09IGNhbWVyYSkpIHsKKyAgICAgICAgICAgIHJlcXVpcmVkV2lkdGggLz0gMjsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgZGVzaXJlZFdpZHRoID0gKHRoaXMuX29wdGlvbnMud2lkdGgg
fHwgcmVxdWlyZWRXaWR0aCk7CisgICAgICAgIHZhciBkZXNpcmVkSGVpZ2h0ID0gdGhpcy5fb3B0
aW9ucy5oZWlnaHQgfHwgcmVxdWlyZWRIZWlnaHQ7CisgICAgICAgIGlmICghdGhpcy5fc2hhcmVP
dXRwdXRXaXRoUG9zdFByb2Nlc3MgJiYgIXRoaXMuX2ZvcmNlZE91dHB1dFRleHR1cmUpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmFkYXB0U2NhbGVUb0N1cnJlbnRWaWV3cG9ydCkgeworICAgICAg
ICAgICAgICAgIHZhciBjdXJyZW50Vmlld3BvcnQgPSBlbmdpbmUuY3VycmVudFZpZXdwb3J0Owor
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Vmlld3BvcnQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZGVzaXJlZFdpZHRoICo9IGN1cnJlbnRWaWV3cG9ydC53aWR0aDsKKyAgICAgICAgICAgICAg
ICAgICAgZGVzaXJlZEhlaWdodCAqPSBjdXJyZW50Vmlld3BvcnQuaGVpZ2h0OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlclRhcmdl
dFNhbXBsaW5nTW9kZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERSB8fCB0
aGlzLmFsd2F5c0ZvcmNlUE9UKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9vcHRpb25z
LndpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRXaWR0aCA9IGVuZ2luZS5uZWVk
UE9UVGV4dHVyZXMgPyBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siRW5naW5lIl0uR2V0RXhwb25lbnRPZlR3byhkZXNpcmVkV2lkdGgsIG1heFNpemUsIHRoaXMu
c2NhbGVNb2RlKSA6IGRlc2lyZWRXaWR0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLmhlaWdodCkgeworICAgICAgICAgICAgICAgICAgICBk
ZXNpcmVkSGVpZ2h0ID0gZW5naW5lLm5lZWRQT1RUZXh0dXJlcyA/IF9FbmdpbmVzX2VuZ2luZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFbmdpbmUiXS5HZXRFeHBvbmVudE9mVHdvKGRl
c2lyZWRIZWlnaHQsIG1heFNpemUsIHRoaXMuc2NhbGVNb2RlKSA6IGRlc2lyZWRIZWlnaHQ7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMud2lk
dGggIT09IGRlc2lyZWRXaWR0aCB8fCB0aGlzLmhlaWdodCAhPT0gZGVzaXJlZEhlaWdodCkgewor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlcy5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dHVyZXMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5fcmVsZWFzZVRleHR1
cmUodGhpcy5fdGV4dHVyZXMuZGF0YVtpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucmVzZXQoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IGRlc2lyZWRXaWR0aDsKKyAgICAgICAgICAg
ICAgICB0aGlzLmhlaWdodCA9IGRlc2lyZWRIZWlnaHQ7CisgICAgICAgICAgICAgICAgdmFyIHRl
eHR1cmVTaXplID0geyB3aWR0aDogdGhpcy53aWR0aCwgaGVpZ2h0OiB0aGlzLmhlaWdodCB9Owor
ICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlT3B0aW9ucyA9IHsKKyAgICAgICAgICAgICAgICAg
ICAgZ2VuZXJhdGVNaXBNYXBzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVE
ZXB0aEJ1ZmZlcjogZm9yY2VEZXB0aFN0ZW5jaWwgfHwgY2FtZXJhLl9wb3N0UHJvY2Vzc2VzLmlu
ZGV4T2YodGhpcykgPT09IDAsCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlU3RlbmNpbEJ1
ZmZlcjogKGZvcmNlRGVwdGhTdGVuY2lsIHx8IGNhbWVyYS5fcG9zdFByb2Nlc3Nlcy5pbmRleE9m
KHRoaXMpID09PSAwKSAmJiB0aGlzLl9lbmdpbmUuaXNTdGVuY2lsRW5hYmxlLAorICAgICAgICAg
ICAgICAgICAgICBzYW1wbGluZ01vZGU6IHRoaXMucmVuZGVyVGFyZ2V0U2FtcGxpbmdNb2RlLAor
ICAgICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLl90ZXh0dXJlVHlwZQorICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh0aGlzLl9lbmdpbmUu
Y3JlYXRlUmVuZGVyVGFyZ2V0VGV4dHVyZSh0ZXh0dXJlU2l6ZSwgdGV4dHVyZU9wdGlvbnMpKTsK
KyAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmV1c2FibGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fdGV4dHVyZXMucHVzaCh0aGlzLl9lbmdpbmUuY3JlYXRlUmVuZGVyVGFyZ2V0VGV4
dHVyZSh0ZXh0dXJlU2l6ZSwgdGV4dHVyZU9wdGlvbnMpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdGhpcy5fdGV4ZWxTaXplLmNvcHlGcm9tRmxvYXRzKDEuMCAvIHRoaXMu
d2lkdGgsIDEuMCAvIHRoaXMuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB0aGlzLm9uU2l6ZUNo
YW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX3RleHR1cmVzLmZvckVhY2goZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodGV4dHVyZS5zYW1wbGVzICE9PSBfdGhpcy5zYW1wbGVzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl9lbmdpbmUudXBkYXRlUmVuZGVyVGFyZ2V0VGV4dHVy
ZVNhbXBsZUNvdW50KHRleHR1cmUsIF90aGlzLnNhbXBsZXMpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHZhciB0YXJnZXQ7CisgICAgICAg
IGlmICh0aGlzLl9zaGFyZU91dHB1dFdpdGhQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgdGFy
Z2V0ID0gdGhpcy5fc2hhcmVPdXRwdXRXaXRoUG9zdFByb2Nlc3MuaW5wdXRUZXh0dXJlOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX2ZvcmNlZE91dHB1dFRleHR1cmUpIHsKKyAg
ICAgICAgICAgIHRhcmdldCA9IHRoaXMuX2ZvcmNlZE91dHB1dFRleHR1cmU7CisgICAgICAgICAg
ICB0aGlzLndpZHRoID0gdGhpcy5fZm9yY2VkT3V0cHV0VGV4dHVyZS53aWR0aDsKKyAgICAgICAg
ICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5fZm9yY2VkT3V0cHV0VGV4dHVyZS5oZWlnaHQ7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmlucHV0VGV4
dHVyZTsKKyAgICAgICAgfQorICAgICAgICAvLyBCaW5kIHRoZSBpbnB1dCBvZiB0aGlzIHBvc3Qg
cHJvY2VzcyB0byBiZSB1c2VkIGFzIHRoZSBvdXRwdXQgb2YgdGhlIHByZXZpb3VzIHBvc3QgcHJv
Y2Vzcy4KKyAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGl4ZWxQZXJmZWN0TW9kZSkgeworICAgICAg
ICAgICAgdGhpcy5fc2NhbGVSYXRpby5jb3B5RnJvbUZsb2F0cyhyZXF1aXJlZFdpZHRoIC8gZGVz
aXJlZFdpZHRoLCByZXF1aXJlZEhlaWdodCAvIGRlc2lyZWRIZWlnaHQpOworICAgICAgICAgICAg
dGhpcy5fZW5naW5lLmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIDAsIHJlcXVpcmVkV2lkdGgsIHJl
cXVpcmVkSGVpZ2h0LCB0aGlzLmZvcmNlRnVsbHNjcmVlblZpZXdwb3J0KTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3NjYWxlUmF0aW8uY29weUZyb21GbG9h
dHMoMSwgMSk7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUuYmluZEZyYW1lYnVmZmVyKHRhcmdl
dCwgMCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMuZm9yY2VGdWxsc2NyZWVuVmlld3BvcnQp
OworICAgICAgICB9CisgICAgICAgIHRoaXMub25BY3RpdmF0ZU9ic2VydmFibGUubm90aWZ5T2Jz
ZXJ2ZXJzKGNhbWVyYSk7CisgICAgICAgIC8vIENsZWFyCisgICAgICAgIGlmICh0aGlzLmF1dG9D
bGVhciAmJiB0aGlzLmFscGhhTW9kZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLkFMUEhBX0RJU0FCTEUpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2VuZ2luZS5jbGVhcih0aGlzLmNsZWFyQ29sb3IgPyB0aGlzLmNsZWFyQ29sb3Ig
OiBzY2VuZS5jbGVhckNvbG9yLCBzY2VuZS5fYWxsb3dQb3N0UHJvY2Vzc0NsZWFyQ29sb3IsIHRy
dWUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9yZXVzYWJsZSkgeworICAg
ICAgICAgICAgdGhpcy5fY3VycmVudFJlbmRlclRleHR1cmVJbmQgPSAodGhpcy5fY3VycmVudFJl
bmRlclRleHR1cmVJbmQgKyAxKSAlIDI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdl
dDsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3N0UHJvY2Vzcy5wcm90b3R5
cGUsICJpc1N1cHBvcnRlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBwb3N0
IHByb2Nlc3MgaXMgc3VwcG9ydGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZWZmZWN0LmlzU3VwcG9ydGVkOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9zdFByb2Nlc3MucHJv
dG90eXBlLCAiYXNwZWN0UmF0aW8iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgYXNw
ZWN0IHJhdGlvIG9mIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3NoYXJlT3V0cHV0V2l0aFBv
c3RQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXJlT3V0cHV0V2l0
aFBvc3RQcm9jZXNzLmFzcGVjdFJhdGlvOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHRoaXMuX2ZvcmNlZE91dHB1dFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fZm9yY2VkT3V0cHV0VGV4dHVyZS53aWR0aCAvIHRoaXMuX2ZvcmNlZE91dHB1dFRleHR1cmUu
aGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMud2lkdGggLyB0
aGlzLmhlaWdodDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0IGEgdmFs
dWUgaW5kaWNhdGluZyBpZiB0aGUgcG9zdC1wcm9jZXNzIGlzIHJlYWR5IHRvIGJlIHVzZWQKKyAg
ICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBwb3N0LXByb2Nlc3MgaXMgcmVhZHkgKHNoYWRlciBp
cyBjb21waWxlZCkKKyAgICAgKi8KKyAgICBQb3N0UHJvY2Vzcy5wcm90b3R5cGUuaXNSZWFkeSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VmZmVjdCAmJiB0aGlzLl9lZmZl
Y3QuaXNSZWFkeSgpOworICAgIH07CisgICAgLyoqCisgICAgICogQmluZHMgYWxsIHRleHR1cmVz
IGFuZCB1bmlmb3JtcyB0byB0aGUgc2hhZGVyLCB0aGlzIHdpbGwgYmUgcnVuIG9uIGV2ZXJ5IHBh
c3MuCisgICAgICogQHJldHVybnMgdGhlIGVmZmVjdCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcG9z
dCBwcm9jZXNzLiBOdWxsIGlmIG5vdCBjb21waWxlZCBvciBub3QgcmVhZHkuCisgICAgICovCisg
ICAgUG9zdFByb2Nlc3MucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAv
LyBDaGVjaworICAgICAgICBpZiAoIXRoaXMuX2VmZmVjdCB8fCAhdGhpcy5fZWZmZWN0LmlzUmVh
ZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8g
U3RhdGVzCisgICAgICAgIHRoaXMuX2VuZ2luZS5lbmFibGVFZmZlY3QodGhpcy5fZWZmZWN0KTsK
KyAgICAgICAgdGhpcy5fZW5naW5lLnNldFN0YXRlKGZhbHNlKTsKKyAgICAgICAgdGhpcy5fZW5n
aW5lLnNldERlcHRoQnVmZmVyKGZhbHNlKTsKKyAgICAgICAgdGhpcy5fZW5naW5lLnNldERlcHRo
V3JpdGUoZmFsc2UpOworICAgICAgICAvLyBBbHBoYQorICAgICAgICB0aGlzLl9lbmdpbmUuc2V0
QWxwaGFNb2RlKHRoaXMuYWxwaGFNb2RlKTsKKyAgICAgICAgaWYgKHRoaXMuYWxwaGFDb25zdGFu
dHMpIHsKKyAgICAgICAgICAgIHRoaXMuZ2V0RW5naW5lKCkuc2V0QWxwaGFDb25zdGFudHModGhp
cy5hbHBoYUNvbnN0YW50cy5yLCB0aGlzLmFscGhhQ29uc3RhbnRzLmcsIHRoaXMuYWxwaGFDb25z
dGFudHMuYiwgdGhpcy5hbHBoYUNvbnN0YW50cy5hKTsKKyAgICAgICAgfQorICAgICAgICAvLyBC
aW5kIHRoZSBvdXRwdXQgdGV4dHVyZSBvZiB0aGUgcHJlaXZvdXMgcG9zdCBwcm9jZXNzIGFzIHRo
ZSBpbnB1dCB0byB0aGlzIHBvc3QgcHJvY2Vzcy4KKyAgICAgICAgdmFyIHNvdXJjZTsKKyAgICAg
ICAgaWYgKHRoaXMuX3NoYXJlT3V0cHV0V2l0aFBvc3RQcm9jZXNzKSB7CisgICAgICAgICAgICBz
b3VyY2UgPSB0aGlzLl9zaGFyZU91dHB1dFdpdGhQb3N0UHJvY2Vzcy5pbnB1dFRleHR1cmU7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9yY2VkT3V0cHV0VGV4dHVyZSkgewor
ICAgICAgICAgICAgc291cmNlID0gdGhpcy5fZm9yY2VkT3V0cHV0VGV4dHVyZTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNvdXJjZSA9IHRoaXMuaW5wdXRUZXh0dXJl
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VmZmVjdC5fYmluZFRleHR1cmUoInRleHR1cmVT
YW1wbGVyIiwgc291cmNlKTsKKyAgICAgICAgLy8gUGFyYW1ldGVycworICAgICAgICB0aGlzLl9l
ZmZlY3Quc2V0VmVjdG9yMigic2NhbGUiLCB0aGlzLl9zY2FsZVJhdGlvKTsKKyAgICAgICAgdGhp
cy5vbkFwcGx5T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcy5fZWZmZWN0KTsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2VmZmVjdDsKKyAgICB9OworICAgIFBvc3RQcm9jZXNzLnByb3RvdHlw
ZS5fZGlzcG9zZVRleHR1cmVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fc2hh
cmVPdXRwdXRXaXRoUG9zdFByb2Nlc3MgfHwgdGhpcy5fZm9yY2VkT3V0cHV0VGV4dHVyZSkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl90ZXh0dXJl
cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Rl
eHR1cmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZW5naW5lLl9yZWxl
YXNlVGV4dHVyZSh0aGlzLl90ZXh0dXJlcy5kYXRhW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl90ZXh0dXJlcy5kaXNwb3NlKCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBEaXNwb3NlcyB0aGUgcG9zdCBwcm9jZXNzLgorICAgICAqIEBwYXJhbSBjYW1lcmEg
VGhlIGNhbWVyYSB0byBkaXNwb3NlIHRoZSBwb3N0IHByb2Nlc3Mgb24uCisgICAgICovCisgICAg
UG9zdFByb2Nlc3MucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAg
ICAgIGNhbWVyYSA9IGNhbWVyYSB8fCB0aGlzLl9jYW1lcmE7CisgICAgICAgIHRoaXMuX2Rpc3Bv
c2VUZXh0dXJlcygpOworICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgIHZh
ciBpbmRleF8xID0gdGhpcy5fc2NlbmUucG9zdFByb2Nlc3Nlcy5pbmRleE9mKHRoaXMpOworICAg
ICAgICAgICAgaWYgKGluZGV4XzEgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2Nl
bmUucG9zdFByb2Nlc3Nlcy5zcGxpY2UoaW5kZXhfMSwgMSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgaW5kZXhfMiA9IHRoaXMuX2Vu
Z2luZS5wb3N0UHJvY2Vzc2VzLmluZGV4T2YodGhpcyk7CisgICAgICAgICAgICBpZiAoaW5kZXhf
MiAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUucG9zdFByb2Nlc3Nlcy5z
cGxpY2UoaW5kZXhfMiwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFjYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYW1l
cmEuZGV0YWNoUG9zdFByb2Nlc3ModGhpcyk7CisgICAgICAgIHZhciBpbmRleCA9IGNhbWVyYS5f
cG9zdFByb2Nlc3Nlcy5pbmRleE9mKHRoaXMpOworICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYg
Y2FtZXJhLl9wb3N0UHJvY2Vzc2VzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHZhciBmaXJz
dFBvc3RQcm9jZXNzID0gdGhpcy5fY2FtZXJhLl9nZXRGaXJzdFBvc3RQcm9jZXNzKCk7CisgICAg
ICAgICAgICBpZiAoZmlyc3RQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIGZpcnN0UG9z
dFByb2Nlc3MubWFya1RleHR1cmVEaXJ0eSgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHRoaXMub25BY3RpdmF0ZU9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5v
bkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQXBwbHlPYnNl
cnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMub25TaXplQ2hhbmdlZE9ic2VydmFibGUuY2xlYXIoKTsKKyAg
ICB9OworICAgIHJldHVybiBQb3N0UHJvY2VzczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2Vzc01hbmFnZXIudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0
UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzTWFuYWdlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9z
dFByb2Nlc3NNYW5hZ2VyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBv
c3RQcm9jZXNzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUG9zdFByb2Nlc3NNYW5hZ2Vy
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRl
cmlhbHMvbWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVz
L2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKworCisK
Ky8qKgorICogUG9zdFByb2Nlc3NNYW5hZ2VyIGlzIHVzZWQgdG8gbWFuYWdlIG9uZSBvciBtb3Jl
IHBvc3QgcHJvY2Vzc2VzIG9yIHBvc3QgcHJvY2VzcyBwaXBlbGluZXMKKyAqIFNlZSBodHRwczov
L2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNzZXMKKyAqLwor
dmFyIFBvc3RQcm9jZXNzTWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIFBvc3RQcm9jZXNzCisgICAgICog
QHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0aGF0IHRoZSBwb3N0IHByb2Nlc3MgaXMgYXNzb2NpYXRl
ZCB3aXRoLgorICAgICAqLworICAgIGZ1bmN0aW9uIFBvc3RQcm9jZXNzTWFuYWdlcihzY2VuZSkg
eworICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzID0ge307CisgICAgICAgIHRoaXMuX3NjZW5l
ID0gc2NlbmU7CisgICAgfQorICAgIFBvc3RQcm9jZXNzTWFuYWdlci5wcm90b3R5cGUuX3ByZXBh
cmVCdWZmZXJzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fdmVydGV4QnVmZmVy
c1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZm
ZXIiXS5Qb3NpdGlvbktpbmRdKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgLy8gVkJPCisgICAgICAgIHZhciB2ZXJ0aWNlcyA9IFtdOworICAgICAgICB2ZXJ0aWNl
cy5wdXNoKDEsIDEpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKC0xLCAxKTsKKyAgICAgICAgdmVy
dGljZXMucHVzaCgtMSwgLTEpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKDEsIC0xKTsKKyAgICAg
ICAgdGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdID0gbmV3IF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdKHRoaXMuX3Nj
ZW5lLmdldEVuZ2luZSgpLCB2ZXJ0aWNlcywgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kLCBmYWxzZSwgZmFsc2Us
IDIpOworICAgICAgICB0aGlzLl9idWlsZEluZGV4QnVmZmVyKCk7CisgICAgfTsKKyAgICBQb3N0
UHJvY2Vzc01hbmFnZXIucHJvdG90eXBlLl9idWlsZEluZGV4QnVmZmVyID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAvLyBJbmRpY2VzCisgICAgICAgIHZhciBpbmRpY2VzID0gW107CisgICAgICAg
IGluZGljZXMucHVzaCgwKTsKKyAgICAgICAgaW5kaWNlcy5wdXNoKDEpOworICAgICAgICBpbmRp
Y2VzLnB1c2goMik7CisgICAgICAgIGluZGljZXMucHVzaCgwKTsKKyAgICAgICAgaW5kaWNlcy5w
dXNoKDIpOworICAgICAgICBpbmRpY2VzLnB1c2goMyk7CisgICAgICAgIHRoaXMuX2luZGV4QnVm
ZmVyID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlSW5kZXhCdWZmZXIoaW5kaWNlcyk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWJ1aWxkcyB0aGUgdmVydGV4IGJ1ZmZlcnMgb2Yg
dGhlIG1hbmFnZXIuCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIFBvc3RQcm9jZXNzTWFu
YWdlci5wcm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB2YiA9
IHRoaXMuX3ZlcnRleEJ1ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgaWYgKCF2Yikg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZiLl9yZWJ1aWxkKCk7
CisgICAgICAgIHRoaXMuX2J1aWxkSW5kZXhCdWZmZXIoKTsKKyAgICB9OworICAgIC8vIE1ldGhv
ZHMKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyBhIGZyYW1lIHRvIGJlIHJ1biB0aHJvdWdoIGEg
cG9zdCBwcm9jZXNzLgorICAgICAqIEBwYXJhbSBzb3VyY2VUZXh0dXJlIFRoZSBpbnB1dCB0ZXh0
dXJlIHRvIHRoZSBwb3N0IHByb2Nlc2Vzcy4gKGRlZmF1bHQ6IG51bGwpCisgICAgICogQHBhcmFt
IHBvc3RQcm9jZXNzZXMgQW4gYXJyYXkgb2YgcG9zdCBwcm9jZXNzZXMgdG8gYmUgcnVuLiAoZGVm
YXVsdDogbnVsbCkKKyAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwb3N0IHByb2Nlc3NlcyB3
ZXJlIGFibGUgdG8gYmUgcnVuLgorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBQb3N0UHJv
Y2Vzc01hbmFnZXIucHJvdG90eXBlLl9wcmVwYXJlRnJhbWUgPSBmdW5jdGlvbiAoc291cmNlVGV4
dHVyZSwgcG9zdFByb2Nlc3NlcykgeworICAgICAgICBpZiAoc291cmNlVGV4dHVyZSA9PT0gdm9p
ZCAwKSB7IHNvdXJjZVRleHR1cmUgPSBudWxsOyB9CisgICAgICAgIGlmIChwb3N0UHJvY2Vzc2Vz
ID09PSB2b2lkIDApIHsgcG9zdFByb2Nlc3NlcyA9IG51bGw7IH0KKyAgICAgICAgdmFyIGNhbWVy
YSA9IHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAgaWYgKCFjYW1lcmEpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBwb3N0UHJvY2Vzc2Vz
ID0gcG9zdFByb2Nlc3NlcyB8fCBjYW1lcmEuX3Bvc3RQcm9jZXNzZXMuZmlsdGVyKGZ1bmN0aW9u
IChwcCkgeyByZXR1cm4gcHAgIT0gbnVsbDsgfSk7CisgICAgICAgIGlmICghcG9zdFByb2Nlc3Nl
cyB8fCBwb3N0UHJvY2Vzc2VzLmxlbmd0aCA9PT0gMCB8fCAhdGhpcy5fc2NlbmUucG9zdFByb2Nl
c3Nlc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBwb3N0UHJvY2Vzc2VzWzBdLmFjdGl2YXRlKGNhbWVyYSwgc291cmNlVGV4dHVyZSwgcG9z
dFByb2Nlc3NlcyAhPT0gbnVsbCAmJiBwb3N0UHJvY2Vzc2VzICE9PSB1bmRlZmluZWQpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1hbnVhbGx5IHJlbmRl
ciBhIHNldCBvZiBwb3N0IHByb2Nlc3NlcyB0byBhIHRleHR1cmUuCisgICAgICogQHBhcmFtIHBv
c3RQcm9jZXNzZXMgQW4gYXJyYXkgb2YgcG9zdCBwcm9jZXNzZXMgdG8gYmUgcnVuLgorICAgICAq
IEBwYXJhbSB0YXJnZXRUZXh0dXJlIFRoZSB0YXJnZXQgdGV4dHVyZSB0byByZW5kZXIgdG8uCisg
ICAgICogQHBhcmFtIGZvcmNlRnVsbHNjcmVlblZpZXdwb3J0IGZvcmNlIGdsLnZpZXdwb3J0IHRv
IGJlIGZ1bGwgc2NyZWVuIGVnLiAwLDAsdGV4dHVyZVdpZHRoLHRleHR1cmVIZWlnaHQKKyAgICAg
KiBAcGFyYW0gZmFjZUluZGV4IGRlZmluZXMgdGhlIGZhY2UgdG8gcmVuZGVyIHRvIGlmIGEgY3Vi
ZW1hcCBpcyBkZWZpbmVkIGFzIHRoZSB0YXJnZXQKKyAgICAgKiBAcGFyYW0gbG9kTGV2ZWwgZGVm
aW5lcyB3aGljaCBsb2Qgb2YgdGhlIHRleHR1cmUgdG8gcmVuZGVyIHRvCisgICAgICovCisgICAg
UG9zdFByb2Nlc3NNYW5hZ2VyLnByb3RvdHlwZS5kaXJlY3RSZW5kZXIgPSBmdW5jdGlvbiAocG9z
dFByb2Nlc3NlcywgdGFyZ2V0VGV4dHVyZSwgZm9yY2VGdWxsc2NyZWVuVmlld3BvcnQsIGZhY2VJ
bmRleCwgbG9kTGV2ZWwpIHsKKyAgICAgICAgaWYgKHRhcmdldFRleHR1cmUgPT09IHZvaWQgMCkg
eyB0YXJnZXRUZXh0dXJlID0gbnVsbDsgfQorICAgICAgICBpZiAoZm9yY2VGdWxsc2NyZWVuVmll
d3BvcnQgPT09IHZvaWQgMCkgeyBmb3JjZUZ1bGxzY3JlZW5WaWV3cG9ydCA9IGZhbHNlOyB9Cisg
ICAgICAgIGlmIChmYWNlSW5kZXggPT09IHZvaWQgMCkgeyBmYWNlSW5kZXggPSAwOyB9CisgICAg
ICAgIGlmIChsb2RMZXZlbCA9PT0gdm9pZCAwKSB7IGxvZExldmVsID0gMDsgfQorICAgICAgICB2
YXIgZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIGZvciAodmFyIGlu
ZGV4ID0gMDsgaW5kZXggPCBwb3N0UHJvY2Vzc2VzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgaWYgKGluZGV4IDwgcG9zdFByb2Nlc3Nlcy5sZW5ndGggLSAxKSB7CisgICAgICAgICAg
ICAgICAgcG9zdFByb2Nlc3Nlc1tpbmRleCArIDFdLmFjdGl2YXRlKHRoaXMuX3NjZW5lLmFjdGl2
ZUNhbWVyYSwgdGFyZ2V0VGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VGV4dHVyZSkgeworICAgICAgICAgICAgICAg
ICAgICBlbmdpbmUuYmluZEZyYW1lYnVmZmVyKHRhcmdldFRleHR1cmUsIGZhY2VJbmRleCwgdW5k
ZWZpbmVkLCB1bmRlZmluZWQsIGZvcmNlRnVsbHNjcmVlblZpZXdwb3J0LCB1bmRlZmluZWQsIGxv
ZExldmVsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGVuZ2luZS5yZXN0b3JlRGVmYXVsdEZyYW1lYnVmZmVyKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHBwID0gcG9zdFBy
b2Nlc3Nlc1tpbmRleF07CisgICAgICAgICAgICB2YXIgZWZmZWN0ID0gcHAuYXBwbHkoKTsKKyAg
ICAgICAgICAgIGlmIChlZmZlY3QpIHsKKyAgICAgICAgICAgICAgICBwcC5vbkJlZm9yZVJlbmRl
ck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGVmZmVjdCk7CisgICAgICAgICAgICAgICAgLy8g
VkJPcworICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVCdWZmZXJzKCk7CisgICAgICAgICAg
ICAgICAgZW5naW5lLmJpbmRCdWZmZXJzKHRoaXMuX3ZlcnRleEJ1ZmZlcnMsIHRoaXMuX2luZGV4
QnVmZmVyLCBlZmZlY3QpOworICAgICAgICAgICAgICAgIC8vIERyYXcgb3JkZXIKKyAgICAgICAg
ICAgICAgICBlbmdpbmUuZHJhd0VsZW1lbnRzVHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdGVyaWFsIl0uVHJpYW5nbGVGaWxsTW9kZSwgMCwg
Nik7CisgICAgICAgICAgICAgICAgcHAub25BZnRlclJlbmRlck9ic2VydmFibGUubm90aWZ5T2Jz
ZXJ2ZXJzKGVmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVz
dG9yZSBkZXB0aCBidWZmZXIKKyAgICAgICAgZW5naW5lLnNldERlcHRoQnVmZmVyKHRydWUpOwor
ICAgICAgICBlbmdpbmUuc2V0RGVwdGhXcml0ZSh0cnVlKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEZpbmFsaXplIHRoZSByZXN1bHQgb2YgdGhlIG91dHB1dCBvZiB0aGUgcG9zdHByb2Nlc3Nl
cy4KKyAgICAgKiBAcGFyYW0gZG9Ob3RQcmVzZW50IElmIHRydWUgdGhlIHJlc3VsdCB3aWxsIG5v
dCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHNjcmVlbi4KKyAgICAgKiBAcGFyYW0gdGFyZ2V0VGV4dHVy
ZSBUaGUgdGFyZ2V0IHRleHR1cmUgdG8gcmVuZGVyIHRvLgorICAgICAqIEBwYXJhbSBmYWNlSW5k
ZXggVGhlIGluZGV4IG9mIHRoZSBmYWNlIHRvIGJpbmQgdGhlIHRhcmdldCB0ZXh0dXJlIHRvLgor
ICAgICAqIEBwYXJhbSBwb3N0UHJvY2Vzc2VzIFRoZSBhcnJheSBvZiBwb3N0IHByb2Nlc3NlcyB0
byByZW5kZXIuCisgICAgICogQHBhcmFtIGZvcmNlRnVsbHNjcmVlblZpZXdwb3J0IGZvcmNlIGds
LnZpZXdwb3J0IHRvIGJlIGZ1bGwgc2NyZWVuIGVnLiAwLDAsdGV4dHVyZVdpZHRoLHRleHR1cmVI
ZWlnaHQgKGRlZmF1bHQ6IGZhbHNlKQorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBQb3N0
UHJvY2Vzc01hbmFnZXIucHJvdG90eXBlLl9maW5hbGl6ZUZyYW1lID0gZnVuY3Rpb24gKGRvTm90
UHJlc2VudCwgdGFyZ2V0VGV4dHVyZSwgZmFjZUluZGV4LCBwb3N0UHJvY2Vzc2VzLCBmb3JjZUZ1
bGxzY3JlZW5WaWV3cG9ydCkgeworICAgICAgICBpZiAoZm9yY2VGdWxsc2NyZWVuVmlld3BvcnQg
PT09IHZvaWQgMCkgeyBmb3JjZUZ1bGxzY3JlZW5WaWV3cG9ydCA9IGZhbHNlOyB9CisgICAgICAg
IHZhciBjYW1lcmEgPSB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmE7CisgICAgICAgIGlmICghY2Ft
ZXJhKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcG9zdFByb2Nl
c3NlcyA9IHBvc3RQcm9jZXNzZXMgfHwgY2FtZXJhLl9wb3N0UHJvY2Vzc2VzLmZpbHRlcihmdW5j
dGlvbiAocHApIHsgcmV0dXJuIHBwICE9IG51bGw7IH0pOworICAgICAgICBpZiAocG9zdFByb2Nl
c3Nlcy5sZW5ndGggPT09IDAgfHwgIXRoaXMuX3NjZW5lLnBvc3RQcm9jZXNzZXNFbmFibGVkKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHRo
aXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbiA9
IHBvc3RQcm9jZXNzZXMubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgeworICAgICAgICAg
ICAgdmFyIHBwID0gcG9zdFByb2Nlc3Nlc1tpbmRleF07CisgICAgICAgICAgICBpZiAoaW5kZXgg
PCBsZW4gLSAxKSB7CisgICAgICAgICAgICAgICAgcHAuX291dHB1dFRleHR1cmUgPSBwb3N0UHJv
Y2Vzc2VzW2luZGV4ICsgMV0uYWN0aXZhdGUoY2FtZXJhLCB0YXJnZXRUZXh0dXJlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0YXJnZXRU
ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIGVuZ2luZS5iaW5kRnJhbWVidWZmZXIodGFy
Z2V0VGV4dHVyZSwgZmFjZUluZGV4LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZm9yY2VGdWxsc2Ny
ZWVuVmlld3BvcnQpOworICAgICAgICAgICAgICAgICAgICBwcC5fb3V0cHV0VGV4dHVyZSA9IHRh
cmdldFRleHR1cmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBlbmdpbmUucmVzdG9yZURlZmF1bHRGcmFtZWJ1ZmZlcigpOwor
ICAgICAgICAgICAgICAgICAgICBwcC5fb3V0cHV0VGV4dHVyZSA9IG51bGw7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRvTm90UHJlc2VudCkgewor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGVm
ZmVjdCA9IHBwLmFwcGx5KCk7CisgICAgICAgICAgICBpZiAoZWZmZWN0KSB7CisgICAgICAgICAg
ICAgICAgcHAub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhlZmZlY3Qp
OworICAgICAgICAgICAgICAgIC8vIFZCT3MKKyAgICAgICAgICAgICAgICB0aGlzLl9wcmVwYXJl
QnVmZmVycygpOworICAgICAgICAgICAgICAgIGVuZ2luZS5iaW5kQnVmZmVycyh0aGlzLl92ZXJ0
ZXhCdWZmZXJzLCB0aGlzLl9pbmRleEJ1ZmZlciwgZWZmZWN0KTsKKyAgICAgICAgICAgICAgICAv
LyBEcmF3IG9yZGVyCisgICAgICAgICAgICAgICAgZW5naW5lLmRyYXdFbGVtZW50c1R5cGUoX01h
dGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRlcmlhbCJd
LlRyaWFuZ2xlRmlsbE1vZGUsIDAsIDYpOworICAgICAgICAgICAgICAgIHBwLm9uQWZ0ZXJSZW5k
ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhlZmZlY3QpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIC8vIFJlc3RvcmUgc3RhdGVzCisgICAgICAgIGVuZ2luZS5zZXREZXB0
aEJ1ZmZlcih0cnVlKTsKKyAgICAgICAgZW5naW5lLnNldERlcHRoV3JpdGUodHJ1ZSk7CisgICAg
ICAgIGVuZ2luZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLkFMUEhBX0RJU0FCTEUpOworICAgIH07CisgICAg
LyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIHBvc3QgcHJvY2VzcyBtYW5hZ2VyLgorICAgICAq
LworICAgIFBvc3RQcm9jZXNzTWFuYWdlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX3ZlcnRleEJ1ZmZlcnNbX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25L
aW5kXTsKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmRpc3Bvc2Uo
KTsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXSA9IG51
bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2luZGV4QnVmZmVyKSB7CisgICAgICAg
ICAgICB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5fcmVsZWFzZUJ1ZmZlcih0aGlzLl9pbmRleEJ1
ZmZlcik7CisgICAgICAgICAgICB0aGlzLl9pbmRleEJ1ZmZlciA9IG51bGw7CisgICAgICAgIH0K
KyAgICB9OworICAgIHJldHVybiBQb3N0UHJvY2Vzc01hbmFnZXI7Cit9KCkpOworCisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvcmVmcmFjdGlvblBvc3RQcm9jZXNzLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9yZWZyYWN0aW9uUG9zdFByb2Nlc3MudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFJlZnJhY3Rpb25Qb3N0UHJvY2VzcyAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJSZWZyYWN0aW9uUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFJlZnJhY3Rpb25Qb3N0UHJvY2VzczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVy
ZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2Vz
cyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1NoYWRlcnNfcmVmcmFjdGlvbl9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9yZWZyYWN0aW9u
LmZyYWdtZW50ICovICIuL1NoYWRlcnMvcmVmcmFjdGlvbi5mcmFnbWVudC50cyIpOworCisKKwor
CisvKioKKyAqIFBvc3QgcHJvY2VzcyB3aGljaCBhcHBsaWVzIGEgcmVmcmFjdGluIHRleHR1cmUK
KyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9wb3N0
cHJvY2Vzc2VzI3JlZnJhY3Rpb24KKyAqLwordmFyIFJlZnJhY3Rpb25Qb3N0UHJvY2VzcyA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShSZWZyYWN0aW9uUG9zdFByb2Nlc3MsIF9zdXBl
cik7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIFJlZnJhY3Rpb25Qb3N0UHJvY2Vz
cworICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3Vz
ZV9wb3N0cHJvY2Vzc2VzI3JlZnJhY3Rpb24KKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBv
ZiB0aGUgZWZmZWN0LgorICAgICAqIEBwYXJhbSByZWZyYWN0aW9uVGV4dHVyZVVybCBVcmwgb2Yg
dGhlIHJlZnJhY3Rpb24gdGV4dHVyZSB0byB1c2UKKyAgICAgKiBAcGFyYW0gY29sb3IgdGhlIGJh
c2UgY29sb3Igb2YgdGhlIHJlZnJhY3Rpb24gKHVzZWQgdG8gdGFpbnQgdGhlIHJlbmRlcmluZykK
KyAgICAgKiBAcGFyYW0gZGVwdGggc2ltdWxhdGVkIHJlZnJhY3Rpb24gZGVwdGgKKyAgICAgKiBA
cGFyYW0gY29sb3JMZXZlbCB0aGUgY29lZmZpY2llbnQgb2YgdGhlIGJhc2UgY29sb3IgKDAgdG8g
cmVtb3ZlIGJhc2UgY29sb3IgdGFpbnRpbmcpCisgICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2Ft
ZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBU
aGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlvIHRvIGRvd25zaXplIHRvIGJlZm9yZSBjb21w
dXRpbmcgdGhlIHJlbmRlciBwYXNzLgorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgVGhlIHNh
bXBsaW5nIG1vZGUgdG8gYmUgdXNlZCB3aGVuIGNvbXB1dGluZyB0aGUgcGFzcy4gKGRlZmF1bHQ6
IDApCisgICAgICogQHBhcmFtIGVuZ2luZSBUaGUgZW5naW5lIHdoaWNoIHRoZSBwb3N0IHByb2Nl
c3Mgd2lsbCBiZSBhcHBsaWVkLiAoZGVmYXVsdDogY3VycmVudCBlbmdpbmUpCisgICAgICogQHBh
cmFtIHJldXNhYmxlIElmIHRoZSBwb3N0IHByb2Nlc3MgY2FuIGJlIHJldXNlZCBvbiB0aGUgc2Ft
ZSBmcmFtZS4gKGRlZmF1bHQ6IGZhbHNlKQorICAgICAqLworICAgIGZ1bmN0aW9uIFJlZnJhY3Rp
b25Qb3N0UHJvY2VzcyhuYW1lLCByZWZyYWN0aW9uVGV4dHVyZVVybCwgCisgICAgLyoqIHRoZSBi
YXNlIGNvbG9yIG9mIHRoZSByZWZyYWN0aW9uICh1c2VkIHRvIHRhaW50IHRoZSByZW5kZXJpbmcp
ICovCisgICAgY29sb3IsIAorICAgIC8qKiBzaW11bGF0ZWQgcmVmcmFjdGlvbiBkZXB0aCAqLwor
ICAgIGRlcHRoLCAKKyAgICAvKiogdGhlIGNvZWZmaWNpZW50IG9mIHRoZSBiYXNlIGNvbG9yICgw
IHRvIHJlbW92ZSBiYXNlIGNvbG9yIHRhaW50aW5nKSAqLworICAgIGNvbG9yTGV2ZWwsIG9wdGlv
bnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsICJyZWZyYWN0aW9uIiwgWyJiYXNlQ29s
b3IiLCAiZGVwdGgiLCAiY29sb3JMZXZlbCJdLCBbInJlZnJhY3Rpb25TYW1wbGVyIl0sIG9wdGlv
bnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB8fCB0aGlzOworICAg
ICAgICBfdGhpcy5jb2xvciA9IGNvbG9yOworICAgICAgICBfdGhpcy5kZXB0aCA9IGRlcHRoOwor
ICAgICAgICBfdGhpcy5jb2xvckxldmVsID0gY29sb3JMZXZlbDsKKyAgICAgICAgX3RoaXMuX293
blJlZnJhY3Rpb25UZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMub25BY3RpdmF0ZU9ic2Vy
dmFibGUuYWRkKGZ1bmN0aW9uIChjYW0pIHsKKyAgICAgICAgICAgIF90aGlzLl9yZWZUZXh0dXJl
ID0gX3RoaXMuX3JlZlRleHR1cmUgfHwgbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0ocmVmcmFjdGlvblRleHR1cmVV
cmwsIGNhbS5nZXRTY2VuZSgpKTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLm9uQXBwbHlP
YnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0
Q29sb3IzKCJiYXNlQ29sb3IiLCBfdGhpcy5jb2xvcik7CisgICAgICAgICAgICBlZmZlY3Quc2V0
RmxvYXQoImRlcHRoIiwgX3RoaXMuZGVwdGgpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0
KCJjb2xvckxldmVsIiwgX3RoaXMuY29sb3JMZXZlbCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0
VGV4dHVyZSgicmVmcmFjdGlvblNhbXBsZXIiLCBfdGhpcy5fcmVmVGV4dHVyZSk7CisgICAgICAg
IH0pOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShSZWZyYWN0aW9uUG9zdFByb2Nlc3MucHJvdG90eXBlLCAicmVmcmFjdGlvblRleHR1cmUi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHJlZnJhY3Rpb24g
dGV4dHVyZQorICAgICAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHlvdSBhcmUgcmVzcG9uc2libGUg
Zm9yIGRpc3Bvc2luZyB0aGUgdGV4dHVyZSBpZiB5b3Ugc2V0IGl0IG1hbnVhbGx5CisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9yZWZUZXh0dXJlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgaWYgKHRoaXMuX3JlZlRleHR1cmUgJiYgdGhpcy5fb3duUmVmcmFjdGlv
blRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZWZUZXh0dXJlLmRpc3Bvc2UoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3JlZlRleHR1cmUgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHRoaXMuX293blJlZnJhY3Rpb25UZXh0dXJlID0gZmFsc2U7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIC8vIE1ldGhvZHMKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyBvZiB0aGUg
cG9zdCBwcm9jZXNzCisgICAgICogQHBhcmFtIGNhbWVyYSBDYW1lcmEgdG8gZGlzcG9zZSBwb3N0
IHByb2Nlc3Mgb24KKyAgICAgKi8KKyAgICBSZWZyYWN0aW9uUG9zdFByb2Nlc3MucHJvdG90eXBl
LmRpc3Bvc2UgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAgICAgIGlmICh0aGlzLl9yZWZUZXh0
dXJlICYmIHRoaXMuX293blJlZnJhY3Rpb25UZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9y
ZWZUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX3JlZlRleHR1cmUgPSBudWxs
OworICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMs
IGNhbWVyYSk7CisgICAgfTsKKyAgICByZXR1cm4gUmVmcmFjdGlvblBvc3RQcm9jZXNzOworfShf
cG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUG9zdFByb2Nlc3MiXSkp
OworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvc2hhcnBlblBvc3RQ
cm9jZXNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9zaGFycGVuUG9zdFByb2Nlc3MudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFNoYXJwZW5Qb3N0UHJvY2VzcyAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTaGFycGVuUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIFNoYXJwZW5Qb3N0UHJvY2VzczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9j
ZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfc2hhcnBlbl9mcmFnbWVudF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
U2hhZGVycy9zaGFycGVuLmZyYWdtZW50ICovICIuL1NoYWRlcnMvc2hhcnBlbi5mcmFnbWVudC50
cyIpOworCisKKworCisvKioKKyAqIFRoZSBTaGFycGVuUG9zdFByb2Nlc3MgYXBwbGllcyBhIHNo
YXJwZW4ga2VybmVsIHRvIGV2ZXJ5IHBpeGVsCisgKiBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9LZXJuZWxfKGltYWdlX3Byb2Nlc3NpbmcpCisgKi8KK3ZhciBTaGFycGVuUG9zdFBy
b2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU2hhcnBlblBvc3RQcm9jZXNz
LCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgQ29udm9s
dXRpb25Qb3N0UHJvY2VzcworICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBlZmZl
Y3QuCisgICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIHJlcXVpcmVkIHdpZHRoL2hlaWdodCByYXRp
byB0byBkb3duc2l6ZSB0byBiZWZvcmUgY29tcHV0aW5nIHRoZSByZW5kZXIgcGFzcy4KKyAgICAg
KiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gYXBwbHkgdGhlIHJlbmRlciBwYXNzIHRvLgor
ICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgVGhlIHNhbXBsaW5nIG1vZGUgdG8gYmUgdXNlZCB3
aGVuIGNvbXB1dGluZyB0aGUgcGFzcy4gKGRlZmF1bHQ6IDApCisgICAgICogQHBhcmFtIGVuZ2lu
ZSBUaGUgZW5naW5lIHdoaWNoIHRoZSBwb3N0IHByb2Nlc3Mgd2lsbCBiZSBhcHBsaWVkLiAoZGVm
YXVsdDogY3VycmVudCBlbmdpbmUpCisgICAgICogQHBhcmFtIHJldXNhYmxlIElmIHRoZSBwb3N0
IHByb2Nlc3MgY2FuIGJlIHJldXNlZCBvbiB0aGUgc2FtZSBmcmFtZS4gKGRlZmF1bHQ6IGZhbHNl
KQorICAgICAqIEBwYXJhbSB0ZXh0dXJlVHlwZSBUeXBlIG9mIHRleHR1cmVzIHVzZWQgd2hlbiBw
ZXJmb3JtaW5nIHRoZSBwb3N0IHByb2Nlc3MuIChkZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBi
bG9ja0NvbXBpbGF0aW9uIElmIGNvbXBpbGF0aW9uIG9mIHRoZSBzaGFkZXIgc2hvdWxkIG5vdCBi
ZSBkb25lIGluIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIHVwZGF0ZUVmZmVjdCBtZXRob2QgY2FuIGJl
IHVzZWQgdG8gY29tcGlsZSB0aGUgc2hhZGVyIGF0IGEgbGF0ZXIgdGltZS4gKGRlZmF1bHQ6IGZh
bHNlKQorICAgICAqLworICAgIGZ1bmN0aW9uIFNoYXJwZW5Qb3N0UHJvY2VzcyhuYW1lLCBvcHRp
b25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgdGV4dHVyZVR5cGUs
IGJsb2NrQ29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKHRleHR1cmVUeXBlID09PSB2b2lkIDAp
IHsgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAg
IGlmIChibG9ja0NvbXBpbGF0aW9uID09PSB2b2lkIDApIHsgYmxvY2tDb21waWxhdGlvbiA9IGZh
bHNlOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsICJzaGFy
cGVuIiwgWyJzaGFycG5lc3NBbW91bnRzIiwgInNjcmVlblNpemUiXSwgbnVsbCwgb3B0aW9ucywg
Y2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUsIG51bGwsIHRleHR1cmVUeXBl
LCB1bmRlZmluZWQsIG51bGwsIGJsb2NrQ29tcGlsYXRpb24pIHx8IHRoaXM7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBIb3cgbXVjaCBvZiB0aGUgb3JpZ2luYWwgY29sb3Igc2hvdWxkIGJlIGFw
cGxpZWQuIFNldHRpbmcgdGhpcyB0byAwIHdpbGwgZGlzcGxheSBlZGdlIGRldGVjdGlvbi4gKGRl
ZmF1bHQ6IDEpCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5jb2xvckFtb3VudCA9IDEuMDsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEhvdyBtdWNoIHNoYXJwbmVzcyBzaG91bGQgYmUgYXBw
bGllZCAoZGVmYXVsdDogMC4zKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZWRnZUFtb3Vu
dCA9IDAuMzsKKyAgICAgICAgX3RoaXMub25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAg
ICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDIoInNjcmVlblNpemUiLCBfdGhpcy53aWR0aCwgX3Ro
aXMuaGVpZ2h0KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDIoInNoYXJwbmVzc0Ftb3Vu
dHMiLCBfdGhpcy5lZGdlQW1vdW50LCBfdGhpcy5jb2xvckFtb3VudCk7CisgICAgICAgIH07Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgcmV0dXJuIFNoYXJwZW5Qb3N0UHJvY2Vz
czsKK30oX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9j
ZXNzIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL3N0ZXJl
b3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0
UHJvY2Vzc2VzL3N0ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN0ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNz
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Njb3BpY0ludGVy
bGFjZVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdGVyZW9zY29waWNJbnRlcmxh
Y2VQb3N0UHJvY2VzczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vz
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfc3RlcmVvc2NvcGljSW50ZXJsYWNlX2ZyYWdt
ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9TaGFkZXJzL3N0ZXJlb3Njb3BpY0ludGVybGFjZS5mcmFnbWVudCAqLyAiLi9TaGFkZXJz
L3N0ZXJlb3Njb3BpY0ludGVybGFjZS5mcmFnbWVudC50cyIpOworCisKKworCisvKioKKyAqIFN0
ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNzIHVzZWQgdG8gcmVuZGVyIHN0ZXJlbyB2aWV3
cyBmcm9tIGEgcmlnZ2VkIGNhbWVyYQorICovCit2YXIgU3RlcmVvc2NvcGljSW50ZXJsYWNlUG9z
dFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU3RlcmVvc2NvcGljSW50
ZXJsYWNlUG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMg
YSBTdGVyZW9zY29waWNJbnRlcmxhY2VQb3N0UHJvY2VzcworICAgICAqIEBwYXJhbSBuYW1lIFRo
ZSBuYW1lIG9mIHRoZSBlZmZlY3QuCisgICAgICogQHBhcmFtIHJpZ0NhbWVyYXMgVGhlIHJpZyBj
YW1lcmFzIHRvIGJlIGFwcGxlZCB0byB0aGUgcG9zdCBwcm9jZXNzCisgICAgICogQHBhcmFtIGlz
U3RlcmVvc2NvcGljSG9yaXogSWYgdGhlIHJlbmRlcmVkIHJlc3VsdHMgYXJlIGhvcml6b250YWwg
b3IgdmVydGljbGUKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIFRoZSBzYW1wbGluZyBtb2Rl
IHRvIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChkZWZhdWx0OiAwKQorICAgICAq
IEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9zdCBwcm9jZXNzIHdpbGwgYmUg
YXBwbGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAgICAqIEBwYXJhbSByZXVzYWJs
ZSBJZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24gdGhlIHNhbWUgZnJhbWUuIChk
ZWZhdWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdGVyZW9zY29waWNJbnRlcmxh
Y2VQb3N0UHJvY2VzcyhuYW1lLCByaWdDYW1lcmFzLCBpc1N0ZXJlb3Njb3BpY0hvcml6LCBzYW1w
bGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgInN0ZXJlb3Njb3BpY0ludGVybGFjZSIsIFsnc3RlcFNpemUnXSwg
WydjYW1BU2FtcGxlciddLCAxLCByaWdDYW1lcmFzWzFdLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwg
cmV1c2FibGUsIGlzU3RlcmVvc2NvcGljSG9yaXogPyAiI2RlZmluZSBJU19TVEVSRU9TQ09QSUNf
SE9SSVogMSIgOiB1bmRlZmluZWQpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9wYXNzZWRQcm9j
ZXNzID0gcmlnQ2FtZXJhc1swXS5fcmlnUG9zdFByb2Nlc3M7CisgICAgICAgIF90aGlzLl9zdGVw
U2l6ZSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siVmVjdG9yMiJdKDEgLyBfdGhpcy53aWR0aCwgMSAvIF90aGlzLmhlaWdodCk7CisgICAgICAg
IF90aGlzLm9uU2l6ZUNoYW5nZWRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICBfdGhpcy5fc3RlcFNpemUgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjIiXSgxIC8gX3RoaXMud2lkdGgsIDEgLyBfdGhpcy5o
ZWlnaHQpOworICAgICAgICB9KTsKKyAgICAgICAgX3RoaXMub25BcHBseU9ic2VydmFibGUuYWRk
KGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlRnJvbVBv
c3RQcm9jZXNzKCJjYW1BU2FtcGxlciIsIF90aGlzLl9wYXNzZWRQcm9jZXNzKTsKKyAgICAgICAg
ICAgIGVmZmVjdC5zZXRGbG9hdDIoInN0ZXBTaXplIiwgX3RoaXMuX3N0ZXBTaXplLngsIF90aGlz
Ll9zdGVwU2l6ZS55KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9
CisgICAgcmV0dXJuIFN0ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNzOworfShfcG9zdFBy
b2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUG9zdFByb2Nlc3MiXSkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvdG9uZW1hcFBvc3RQcm9jZXNz
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy90b25lbWFwUG9zdFByb2Nlc3MudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFRvbmVtYXBwaW5nT3BlcmF0b3IsIFRvbmVtYXBQb3N0UHJvY2VzcyAqLwor
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUb25lbWFwcGluZ09wZXJhdG9yIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBUb25lbWFwcGluZ09wZXJhdG9yOyB9KTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlRvbmVtYXBQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVG9uZW1hcFBv
c3RQcm9jZXNzOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4u
L25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vcG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJv
Y2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
RW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc190b25lbWFwX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL3RvbmVt
YXAuZnJhZ21lbnQgKi8gIi4vU2hhZGVycy90b25lbWFwLmZyYWdtZW50LnRzIik7CisKKworCisK
Ky8qKiBEZWZpbmVzIG9wZXJhdG9yIHVzZWQgZm9yIHRvbmVtYXBwaW5nICovCit2YXIgVG9uZW1h
cHBpbmdPcGVyYXRvcjsKKyhmdW5jdGlvbiAoVG9uZW1hcHBpbmdPcGVyYXRvcikgeworICAgIC8q
KiBIYWJsZSAqLworICAgIFRvbmVtYXBwaW5nT3BlcmF0b3JbVG9uZW1hcHBpbmdPcGVyYXRvclsi
SGFibGUiXSA9IDBdID0gIkhhYmxlIjsKKyAgICAvKiogUmVpbmhhcmQgKi8KKyAgICBUb25lbWFw
cGluZ09wZXJhdG9yW1RvbmVtYXBwaW5nT3BlcmF0b3JbIlJlaW5oYXJkIl0gPSAxXSA9ICJSZWlu
aGFyZCI7CisgICAgLyoqIEhlamlEYXdzb24gKi8KKyAgICBUb25lbWFwcGluZ09wZXJhdG9yW1Rv
bmVtYXBwaW5nT3BlcmF0b3JbIkhlamlEYXdzb24iXSA9IDJdID0gIkhlamlEYXdzb24iOworICAg
IC8qKiBQaG90b2dyYXBoaWMgKi8KKyAgICBUb25lbWFwcGluZ09wZXJhdG9yW1RvbmVtYXBwaW5n
T3BlcmF0b3JbIlBob3RvZ3JhcGhpYyJdID0gM10gPSAiUGhvdG9ncmFwaGljIjsKK30pKFRvbmVt
YXBwaW5nT3BlcmF0b3IgfHwgKFRvbmVtYXBwaW5nT3BlcmF0b3IgPSB7fSkpOworLyoqCisgKiBE
ZWZpbmVzIGEgcG9zdCBwcm9jZXNzIHRvIGFwcGx5IHRvbmUgbWFwcGluZworICovCit2YXIgVG9u
ZW1hcFBvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFRvbmVtYXBQ
b3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFRvbmVt
YXBQb3N0UHJvY2VzcworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhl
IHBvc3Rwcm9jZXNzCisgICAgICogQHBhcmFtIF9vcGVyYXRvciBkZWZpbmVzIHRoZSBvcGVyYXRv
ciB0byB1c2UKKyAgICAgKiBAcGFyYW0gZXhwb3N1cmVBZGp1c3RtZW50IGRlZmluZXMgdGhlIHJl
cXVpcmVkIGV4cG9zdXJlIGFkanVzdGVtZW50CisgICAgICogQHBhcmFtIGNhbWVyYSBkZWZpbmVz
IHRoZSBjYW1lcmEgdG8gdXNlIChjYW4gYmUgbnVsbCkKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdN
b2RlIGRlZmluZXMgdGhlIHJlcXVpcmVkIHNhbXBsaW5nIG1vZGUgKEJBQllMT04uVGV4dHVyZS5C
SUxJTkVBUl9TQU1QTElOR01PREUgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gZW5naW5lIGRl
ZmluZXMgdGhlIGhvc3RpbmcgZW5naW5lIChjYW4gYmUgaWdub3JlIGlmIGNhbWVyYSBpcyBzZXQp
CisgICAgICogQHBhcmFtIHRleHR1cmVGb3JtYXQgZGVmaW5lcyB0aGUgdGV4dHVyZSBmb3JtYXQg
dG8gdXNlIChCQUJZTE9OLkVuZ2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQgYnkgZGVmYXVs
dCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBUb25lbWFwUG9zdFByb2Nlc3MobmFtZSwgX29wZXJh
dG9yLCAKKyAgICAvKiogRGVmaW5lcyB0aGUgcmVxdWlyZWQgZXhwb3N1cmUgYWRqdXN0ZW1lbnQg
Ki8KKyAgICBleHBvc3VyZUFkanVzdG1lbnQsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUs
IHRleHR1cmVGb3JtYXQpIHsKKyAgICAgICAgaWYgKHNhbXBsaW5nTW9kZSA9PT0gdm9pZCAwKSB7
IHNhbXBsaW5nTW9kZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFX0JJTElORUFSX1NBTVBMSU5HTU9ERTsgfQorICAg
ICAgICBpZiAodGV4dHVyZUZvcm1hdCA9PT0gdm9pZCAwKSB7IHRleHR1cmVGb3JtYXQgPSBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5j
YWxsKHRoaXMsIG5hbWUsICJ0b25lbWFwIiwgWyJfRXhwb3N1cmVBZGp1c3RtZW50Il0sIG51bGws
IDEuMCwgY2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgdHJ1ZSwgbnVsbCwgdGV4dHVyZUZv
cm1hdCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuX29wZXJhdG9yID0gX29wZXJhdG9yOworICAg
ICAgICBfdGhpcy5leHBvc3VyZUFkanVzdG1lbnQgPSBleHBvc3VyZUFkanVzdG1lbnQ7CisgICAg
ICAgIHZhciBkZWZpbmVzID0gIiNkZWZpbmUgIjsKKyAgICAgICAgaWYgKF90aGlzLl9vcGVyYXRv
ciA9PT0gVG9uZW1hcHBpbmdPcGVyYXRvci5IYWJsZSkgeworICAgICAgICAgICAgZGVmaW5lcyAr
PSAiSEFCTEVfVE9ORU1BUFBJTkciOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKF90aGlz
Ll9vcGVyYXRvciA9PT0gVG9uZW1hcHBpbmdPcGVyYXRvci5SZWluaGFyZCkgeworICAgICAgICAg
ICAgZGVmaW5lcyArPSAiUkVJTkhBUkRfVE9ORU1BUFBJTkciOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKF90aGlzLl9vcGVyYXRvciA9PT0gVG9uZW1hcHBpbmdPcGVyYXRvci5IZWppRGF3
c29uKSB7CisgICAgICAgICAgICBkZWZpbmVzICs9ICJPUFRJTUlaRURfSEVKSURBV1NPTl9UT05F
TUFQUElORyI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoX3RoaXMuX29wZXJhdG9yID09
PSBUb25lbWFwcGluZ09wZXJhdG9yLlBob3RvZ3JhcGhpYykgeworICAgICAgICAgICAgZGVmaW5l
cyArPSAiUEhPVE9HUkFQSElDX1RPTkVNQVBQSU5HIjsKKyAgICAgICAgfQorICAgICAgICAvL3Nh
ZGx5IGEgc2Vjb25kIGNhbGwgdG8gY3JlYXRlIHRoZSBlZmZlY3QuCisgICAgICAgIF90aGlzLnVw
ZGF0ZUVmZmVjdChkZWZpbmVzKTsKKyAgICAgICAgX3RoaXMub25BcHBseSA9IGZ1bmN0aW9uIChl
ZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiX0V4cG9zdXJlQWRqdXN0bWVu
dCIsIF90aGlzLmV4cG9zdXJlQWRqdXN0bWVudCk7CisgICAgICAgIH07CisgICAgICAgIHJldHVy
biBfdGhpczsKKyAgICB9CisgICAgcmV0dXJuIFRvbmVtYXBQb3N0UHJvY2VzczsKK30oX3Bvc3RQ
cm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKwor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL3ZvbHVtZXRyaWNMaWdodFNj
YXR0ZXJpbmdQb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9j
ZXNzZXMvdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUG9z
dFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVm9sdW1ldHJp
Y0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBWb2x1bWV0
cmljTGlnaHRTY2F0dGVyaW5nUG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGVjb3JhdG9y
cyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAq
LyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2Fic3Ry
YWN0TWVzaCAqLyAiLi9NZXNoZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFs
cy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvbWF0ZXJpYWxI
ZWxwZXIgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc3RhbmRh
cmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFs
cy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJn
ZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRlclRhcmdldFRleHR1cmUgKi8gIi4v
TWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRlclRhcmdldFRleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNz
ZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfcGxhbmVCdWlsZGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWVzaGVzL0J1aWxkZXJzL3BsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvcGxh
bmVCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfZGVwdGhf
dmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vU2hhZGVycy9kZXB0aC52ZXJ0ZXggKi8gIi4vU2hhZGVycy9kZXB0aC52ZXJ0ZXgu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc192b2x1bWV0cmljTGlnaHRT
Y2F0dGVyaW5nX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nLmZy
YWdtZW50ICovICIuL1NoYWRlcnMvdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZy5mcmFnbWVudC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX3ZvbHVtZXRyaWNMaWdodFNj
YXR0ZXJpbmdQYXNzX3ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bh
c3MudmVydGV4ICovICIuL1NoYWRlcnMvdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3MudmVy
dGV4LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfdm9sdW1ldHJpY0xp
Z2h0U2NhdHRlcmluZ1Bhc3NfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL3ZvbHVtZXRyaWNMaWdodFNjYXR0
ZXJpbmdQYXNzLmZyYWdtZW50ICovICIuL1NoYWRlcnMvdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmlu
Z1Bhc3MuZnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZpZXdwb3J0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0
aC52aWV3cG9ydCAqLyAiLi9NYXRocy9tYXRoLnZpZXdwb3J0LnRzIik7CisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisvKioKKyAqICBJbnNwaXJlZCBieSBodHRwOi8v
aHR0cC5kZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMy9ncHVnZW1zM19jaDEzLmh0bWwKKyAq
LwordmFyIFZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzcyA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2V4dGVuZHMiXShWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUG9zdFByb2Nlc3Ms
IF9zdXBlcik7CisgICAgLyoqCisgICAgICogQGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFtIG5h
bWUgVGhlIHBvc3QtcHJvY2VzcyBuYW1lCisgICAgICogQHBhcmFtIHJhdGlvIFRoZSBzaXplIG9m
IHRoZSBwb3N0LXByb2Nlc3MgYW5kL29yIGludGVybmFsIHBhc3MgKDAuNSBtZWFucyB0aGF0IHlv
dXIgcG9zdHByb2Nlc3Mgd2lsbCBoYXZlIGEgd2lkdGggPSBjYW52YXMud2lkdGggMC41IGFuZCBh
IGhlaWdodCA9IGNhbnZhcy5oZWlnaHQgMC41KQorICAgICAqIEBwYXJhbSBjYW1lcmEgVGhlIGNh
bWVyYSB0aGF0IHRoZSBwb3N0LXByb2Nlc3Mgd2lsbCBiZSBhdHRhY2hlZCB0bworICAgICAqIEBw
YXJhbSBtZXNoIFRoZSBtZXNoIHVzZWQgdG8gY3JlYXRlIHRoZSBsaWdodCBzY2F0dGVyaW5nCisg
ICAgICogQHBhcmFtIHNhbXBsZXMgVGhlIHBvc3QtcHJvY2VzcyBxdWFsaXR5LCBkZWZhdWx0IDEw
MAorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGVUaGUgcG9zdC1wcm9jZXNzIGZpbHRlcmluZyBt
b2RlCisgICAgICogQHBhcmFtIGVuZ2luZSBUaGUgYmFieWxvbiBlbmdpbmUKKyAgICAgKiBAcGFy
YW0gcmV1c2FibGUgSWYgdGhlIHBvc3QtcHJvY2VzcyBpcyByZXVzYWJsZQorICAgICAqIEBwYXJh
bSBzY2VuZSBUaGUgY29uc3RydWN0b3IgbmVlZHMgYSBzY2VuZSByZWZlcmVuY2UgdG8gaW5pdGlh
bGl6ZSBpbnRlcm5hbCBjb21wb25lbnRzLiBJZiAiY2FtZXJhIiBpcyBudWxsIGEgInNjZW5lIiBt
dXN0IGJlIHByb3ZpZGVkCisgICAgICovCisgICAgZnVuY3Rpb24gVm9sdW1ldHJpY0xpZ2h0U2Nh
dHRlcmluZ1Bvc3RQcm9jZXNzKG5hbWUsIHJhdGlvLCBjYW1lcmEsIG1lc2gsIHNhbXBsZXMsIHNh
bXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNhbXBs
ZXMgPT09IHZvaWQgMCkgeyBzYW1wbGVzID0gMTAwOyB9CisgICAgICAgIGlmIChzYW1wbGluZ01v
ZGUgPT09IHZvaWQgMCkgeyBzYW1wbGluZ01vZGUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1Q
TElOR01PREU7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwg
InZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmciLCBbImRlY2F5IiwgImV4cG9zdXJlIiwgIndlaWdo
dCIsICJtZXNoUG9zaXRpb25PblNjcmVlbiIsICJkZW5zaXR5Il0sIFsibGlnaHRTY2F0dGVyaW5n
U2FtcGxlciJdLCByYXRpby5wb3N0UHJvY2Vzc1JhdGlvIHx8IHJhdGlvLCBjYW1lcmEsIHNhbXBs
aW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgIiNkZWZpbmUgTlVNX1NBTVBMRVMgIiArIHNhbXBs
ZXMpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9zY3JlZW5Db29yZGluYXRlcyA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IyIl0uWmVybygp
OworICAgICAgICAvKioKKyAgICAgICAgKiBDdXN0b20gcG9zaXRpb24gb2YgdGhlIG1lc2guIFVz
ZWQgaWYgInVzZUN1c3RvbU1lc2hQb3NpdGlvbiIgaXMgc2V0IHRvICJ0cnVlIgorICAgICAgICAq
LworICAgICAgICBfdGhpcy5jdXN0b21NZXNoUG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAg
LyoqCisgICAgICAgICogU2V0IGlmIHRoZSBwb3N0LXByb2Nlc3Mgc2hvdWxkIHVzZSBhIGN1c3Rv
bSBwb3NpdGlvbiBmb3IgdGhlIGxpZ2h0IHNvdXJjZSAodHJ1ZSkgb3IgdGhlIGludGVybmFsIG1l
c2ggcG9zaXRpb24gKGZhbHNlKQorICAgICAgICAqLworICAgICAgICBfdGhpcy51c2VDdXN0b21N
ZXNoUG9zaXRpb24gPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICogSWYgdGhlIHBvc3Qt
cHJvY2VzcyBzaG91bGQgaW52ZXJzZSB0aGUgbGlnaHQgc2NhdHRlcmluZyBkaXJlY3Rpb24KKyAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuaW52ZXJ0ID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAg
ICAgICogQXJyYXkgY29udGFpbmluZyB0aGUgZXhjbHVkZWQgbWVzaGVzIG5vdCByZW5kZXJlZCBp
biB0aGUgaW50ZXJuYWwgcGFzcworICAgICAgICAqLworICAgICAgICBfdGhpcy5leGNsdWRlZE1l
c2hlcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBDb250cm9scyB0aGUg
b3ZlcmFsbCBpbnRlbnNpdHkgb2YgdGhlIHBvc3QtcHJvY2VzcworICAgICAgICAqLworICAgICAg
ICBfdGhpcy5leHBvc3VyZSA9IDAuMzsKKyAgICAgICAgLyoqCisgICAgICAgICogRGlzc2lwYXRl
cyBlYWNoIHNhbXBsZSdzIGNvbnRyaWJ1dGlvbiBpbiByYW5nZSBbMCwgMV0KKyAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMuZGVjYXkgPSAwLjk2ODE1OworICAgICAgICAvKioKKyAgICAgICAgKiBD
b250cm9scyB0aGUgb3ZlcmFsbCBpbnRlbnNpdHkgb2YgZWFjaCBzYW1wbGUKKyAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMud2VpZ2h0ID0gMC41ODc2NzsKKyAgICAgICAgLyoqCisgICAgICAgICog
Q29udHJvbHMgdGhlIGRlbnNpdHkgb2YgZWFjaCBzYW1wbGUKKyAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuZGVuc2l0eSA9IDAuOTI2OworICAgICAgICBzY2VuZSA9ICgoY2FtZXJhID09PSBudWxs
KSA/IHNjZW5lIDogY2FtZXJhLmdldFNjZW5lKCkpOyAvLyBwYXJhbWV0ZXIgInNjZW5lIiBjYW4g
YmUgbnVsbC4KKyAgICAgICAgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIF90
aGlzLl92aWV3UG9ydCA9IG5ldyBfTWF0aHNfbWF0aF92aWV3cG9ydF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjBfX1siVmlld3BvcnQiXSgwLCAwLCAxLCAxKS50b0dsb2JhbChlbmdpbmUuZ2V0
UmVuZGVyV2lkdGgoKSwgZW5naW5lLmdldFJlbmRlckhlaWdodCgpKTsKKyAgICAgICAgLy8gQ29u
ZmlndXJlIG1lc2gKKyAgICAgICAgX3RoaXMubWVzaCA9ICgobWVzaCAhPT0gbnVsbCkgPyBtZXNo
IDogVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLkNyZWF0ZURlZmF1bHRNZXNo
KCJWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nTWVzaCIsIHNjZW5lKSk7CisgICAgICAgIC8vIENv
bmZpZ3VyZQorICAgICAgICBfdGhpcy5fY3JlYXRlUGFzcyhzY2VuZSwgcmF0aW8ucGFzc1JhdGlv
IHx8IHJhdGlvKTsKKyAgICAgICAgX3RoaXMub25BY3RpdmF0ZSA9IGZ1bmN0aW9uIChjYW1lcmEp
IHsKKyAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgICAg
ICBfdGhpcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfdGhp
cy5vbkFjdGl2YXRlID0gbnVsbDsKKyAgICAgICAgfTsKKyAgICAgICAgX3RoaXMub25BcHBseU9i
c2VydmFibGUuYWRkKGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIF90aGlzLl91cGRh
dGVNZXNoU2NyZWVuQ29vcmRpbmF0ZXMoc2NlbmUpOworICAgICAgICAgICAgZWZmZWN0LnNldFRl
eHR1cmUoImxpZ2h0U2NhdHRlcmluZ1NhbXBsZXIiLCBfdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U2Nh
dHRlcmluZ1JUVCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImV4cG9zdXJlIiwgX3Ro
aXMuZXhwb3N1cmUpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJkZWNheSIsIF90aGlz
LmRlY2F5KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgid2VpZ2h0IiwgX3RoaXMud2Vp
Z2h0KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiZGVuc2l0eSIsIF90aGlzLmRlbnNp
dHkpOworICAgICAgICAgICAgZWZmZWN0LnNldFZlY3RvcjIoIm1lc2hQb3NpdGlvbk9uU2NyZWVu
IiwgX3RoaXMuX3NjcmVlbkNvb3JkaW5hdGVzKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZvbHVtZXRyaWNMaWdo
dFNjYXR0ZXJpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJ1c2VEaWZmdXNlQ29sb3IiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIFZvbHVtZXRyaWNMaWdo
dFNjYXR0ZXJpbmdQb3N0UHJvY2Vzcy51c2VEaWZmdXNlQ29sb3IgaXMgbm8gbG9uZ2VyIHVzZWQs
IHVzZSB0aGUgbWVzaCBtYXRlcmlhbCBkaXJlY3RseSBpbnN0ZWFkCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5XYXJuKCJWb2x1bWV0cmljTGlnaHRTY2F0
dGVyaW5nUG9zdFByb2Nlc3MudXNlRGlmZnVzZUNvbG9yIGlzIG5vIGxvbmdlciB1c2VkLCB1c2Ug
dGhlIG1lc2ggbWF0ZXJpYWwgZGlyZWN0bHkgaW5zdGVhZCIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh1c2VEaWZmdXNlQ29s
b3IpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJMb2dnZXIiXS5XYXJuKCJWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUG9zdFByb2Nlc3Mu
dXNlRGlmZnVzZUNvbG9yIGlzIG5vIGxvbmdlciB1c2VkLCB1c2UgdGhlIG1lc2ggbWF0ZXJpYWwg
ZGlyZWN0bHkgaW5zdGVhZCIpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIHRoZSBzdHJpbmcgIlZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzcyIK
KyAgICAgKiBAcmV0dXJucyAiVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzIgor
ICAgICAqLworICAgIFZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2Vzcy5wcm90b3R5
cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlZvbHVtZXRy
aWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzcyI7CisgICAgfTsKKyAgICBWb2x1bWV0cmljTGln
aHRTY2F0dGVyaW5nUG9zdFByb2Nlc3MucHJvdG90eXBlLl9pc1JlYWR5ID0gZnVuY3Rpb24gKHN1
Yk1lc2gsIHVzZUluc3RhbmNlcykgeworICAgICAgICB2YXIgbWVzaCA9IHN1Yk1lc2guZ2V0TWVz
aCgpOworICAgICAgICAvLyBSZW5kZXIgdGhpcy5tZXNoIGFzIGRlZmF1bHQKKyAgICAgICAgaWYg
KG1lc2ggPT09IHRoaXMubWVzaCAmJiBtZXNoLm1hdGVyaWFsKSB7CisgICAgICAgICAgICByZXR1
cm4gbWVzaC5tYXRlcmlhbC5pc1JlYWR5KG1lc2gpOworICAgICAgICB9CisgICAgICAgIHZhciBk
ZWZpbmVzID0gW107CisgICAgICAgIHZhciBhdHRyaWJzID0gW19NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07Cisg
ICAgICAgIHZhciBtYXRlcmlhbCA9IHN1Yk1lc2guZ2V0TWF0ZXJpYWwoKTsKKyAgICAgICAgLy8g
QWxwaGEgdGVzdAorICAgICAgICBpZiAobWF0ZXJpYWwpIHsKKyAgICAgICAgICAgIGlmIChtYXRl
cmlhbC5uZWVkQWxwaGFUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2go
IiNkZWZpbmUgQUxQSEFURVNUIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWVz
aC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kKSkgeworICAgICAgICAgICAgICAgIGF0
dHJpYnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJW
ZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2Rl
ZmluZSBVVjEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtZXNoLmlzVmVydGlj
ZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJWZXJ0ZXhCdWZmZXIiXS5VVjJLaW5kKSkgeworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVz
aChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZm
ZXIiXS5VVjJLaW5kKTsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgVVYy
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQm9uZXMKKyAgICAgICAg
aWYgKG1lc2gudXNlQm9uZXMgJiYgbWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMpIHsKKyAg
ICAgICAgICAgIGF0dHJpYnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNLaW5kKTsKKyAgICAgICAg
ICAgIGF0dHJpYnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKTsKKyAgICAgICAgICAgIGRl
ZmluZXMucHVzaCgiI2RlZmluZSBOVU1fQk9ORV9JTkZMVUVOQ0VSUyAiICsgbWVzaC5udW1Cb25l
SW5mbHVlbmNlcnMpOworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEJvbmVzUGVy
TWVzaCAiICsgKG1lc2guc2tlbGV0b24gPyAobWVzaC5za2VsZXRvbi5ib25lcy5sZW5ndGggKyAx
KSA6IDApKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlZmluZXMu
cHVzaCgiI2RlZmluZSBOVU1fQk9ORV9JTkZMVUVOQ0VSUyAwIik7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gSW5zdGFuY2VzCisgICAgICAgIGlmICh1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgICAg
IGRlZmluZXMucHVzaCgiI2RlZmluZSBJTlNUQU5DRVMiKTsKKyAgICAgICAgICAgIF9NYXRlcmlh
bHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTWF0ZXJpYWxI
ZWxwZXIiXS5QdXNoQXR0cmlidXRlc0Zvckluc3RhbmNlcyhhdHRyaWJzKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBHZXQgY29ycmVjdCBlZmZlY3QKKyAgICAgICAgdmFyIGpvaW4gPSBkZWZpbmVz
LmpvaW4oIlxuIik7CisgICAgICAgIGlmICh0aGlzLl9jYWNoZWREZWZpbmVzICE9PSBqb2luKSB7
CisgICAgICAgICAgICB0aGlzLl9jYWNoZWREZWZpbmVzID0gam9pbjsKKyAgICAgICAgICAgIHRo
aXMuX3ZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQYXNzID0gbWVzaC5nZXRTY2VuZSgpLmdldEVu
Z2luZSgpLmNyZWF0ZUVmZmVjdCgidm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3MiLCBhdHRy
aWJzLCBbIndvcmxkIiwgIm1Cb25lcyIsICJ2aWV3UHJvamVjdGlvbiIsICJkaWZmdXNlTWF0cml4
Il0sIFsiZGlmZnVzZVNhbXBsZXIiXSwgam9pbiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVm
aW5lZCwgeyBtYXhTaW11bHRhbmVvdXNNb3JwaFRhcmdldHM6IG1lc2gubnVtQm9uZUluZmx1ZW5j
ZXJzIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWV0cmljTGlnaHRT
Y2F0dGVyaW5nUGFzcy5pc1JlYWR5KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRo
ZSBuZXcgbGlnaHQgcG9zaXRpb24gZm9yIGxpZ2h0IHNjYXR0ZXJpbmcgZWZmZWN0CisgICAgICog
QHBhcmFtIHBvc2l0aW9uIFRoZSBuZXcgY3VzdG9tIGxpZ2h0IHBvc2l0aW9uCisgICAgICovCisg
ICAgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZS5zZXRDdXN0
b21NZXNoUG9zaXRpb24gPSBmdW5jdGlvbiAocG9zaXRpb24pIHsKKyAgICAgICAgdGhpcy5jdXN0
b21NZXNoUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVy
bnMgdGhlIGxpZ2h0IHBvc2l0aW9uIGZvciBsaWdodCBzY2F0dGVyaW5nIGVmZmVjdAorICAgICAq
IEByZXR1cm4gVmVjdG9yMyBUaGUgY3VzdG9tIGxpZ2h0IHBvc2l0aW9uCisgICAgICovCisgICAg
Vm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZS5nZXRDdXN0b21N
ZXNoUG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbU1l
c2hQb3NpdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBpbnRlcm5h
bCBhc3NldHMgYW5kIGRldGFjaGVzIHRoZSBwb3N0LXByb2Nlc3MgZnJvbSB0aGUgY2FtZXJhCisg
ICAgICovCisgICAgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlw
ZS5kaXNwb3NlID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICB2YXIgcnR0SW5kZXggPSBj
YW1lcmEuZ2V0U2NlbmUoKS5jdXN0b21SZW5kZXJUYXJnZXRzLmluZGV4T2YodGhpcy5fdm9sdW1l
dHJpY0xpZ2h0U2NhdHRlcmluZ1JUVCk7CisgICAgICAgIGlmIChydHRJbmRleCAhPT0gLTEpIHsK
KyAgICAgICAgICAgIGNhbWVyYS5nZXRTY2VuZSgpLmN1c3RvbVJlbmRlclRhcmdldHMuc3BsaWNl
KHJ0dEluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl92b2x1bWV0cmljTGlnaHRT
Y2F0dGVyaW5nUlRULmRpc3Bvc2UoKTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3Nl
LmNhbGwodGhpcywgY2FtZXJhKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhl
IHJlbmRlciB0YXJnZXQgdGV4dHVyZSB1c2VkIGJ5IHRoZSBwb3N0LXByb2Nlc3MKKyAgICAgKiBA
cmV0dXJuIHRoZSByZW5kZXIgdGFyZ2V0IHRleHR1cmUgdXNlZCBieSB0aGUgcG9zdC1wcm9jZXNz
CisgICAgICovCisgICAgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3Rv
dHlwZS5nZXRQYXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1l
dHJpY0xpZ2h0U2NhdHRlcmluZ1JUVDsKKyAgICB9OworICAgIC8vIFByaXZhdGUgbWV0aG9kcwor
ICAgIFZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUuX21lc2hF
eGNsdWRlZCA9IGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkTWVz
aGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5leGNsdWRlZE1lc2hlcy5pbmRleE9mKG1lc2gpICE9PSAt
MSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH07CisgICAgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNz
LnByb3RvdHlwZS5fY3JlYXRlUGFzcyA9IGZ1bmN0aW9uIChzY2VuZSwgcmF0aW8pIHsKKyAgICAg
ICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2lu
ZSgpOworICAgICAgICB0aGlzLl92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUlRUID0gbmV3IF9N
YXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdKCJ2b2x1bWV0cmljTGlnaHRTY2F0dGVy
aW5nTWFwIiwgeyB3aWR0aDogZW5naW5lLmdldFJlbmRlcldpZHRoKCkgKiByYXRpbywgaGVpZ2h0
OiBlbmdpbmUuZ2V0UmVuZGVySGVpZ2h0KCkgKiByYXRpbyB9LCBzY2VuZSwgZmFsc2UsIHRydWUs
IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siQ29uc3Rh
bnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAgICAgdGhpcy5fdm9sdW1ldHJp
Y0xpZ2h0U2NhdHRlcmluZ1JUVC53cmFwVSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RF
OworICAgICAgICB0aGlzLl92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUlRULndyYXBWID0gX01h
dGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJU
ZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgIHRoaXMuX3ZvbHVtZXRyaWNMaWdo
dFNjYXR0ZXJpbmdSVFQucmVuZGVyTGlzdCA9IG51bGw7CisgICAgICAgIHRoaXMuX3ZvbHVtZXRy
aWNMaWdodFNjYXR0ZXJpbmdSVFQucmVuZGVyUGFydGljbGVzID0gZmFsc2U7CisgICAgICAgIHRo
aXMuX3ZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdSVFQuaWdub3JlQ2FtZXJhVmlld3BvcnQgPSB0
cnVlOworICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5nZXRDYW1lcmEoKTsKKyAgICAgICAgaWYg
KGNhbWVyYSkgeworICAgICAgICAgICAgY2FtZXJhLmN1c3RvbVJlbmRlclRhcmdldHMucHVzaCh0
aGlzLl92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUlRUKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHNjZW5lLmN1c3RvbVJlbmRlclRhcmdldHMucHVzaCh0aGlzLl92
b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUlRUKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDdXN0
b20gcmVuZGVyIGZ1bmN0aW9uIGZvciBzdWJtZXNoZXMKKyAgICAgICAgdmFyIHJlbmRlclN1Yk1l
c2ggPSBmdW5jdGlvbiAoc3ViTWVzaCkgeworICAgICAgICAgICAgdmFyIG1lc2ggPSBzdWJNZXNo
LmdldFJlbmRlcmluZ01lc2goKTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fbWVzaEV4Y2x1ZGVk
KG1lc2gpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbWVzaC5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5faXNBY3RpdmVJbnRlcm1l
ZGlhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHN1Yk1lc2guZ2V0TWF0
ZXJpYWwoKTsKKyAgICAgICAgICAgIGlmICghbWF0ZXJpYWwpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc2NlbmUgPSBtZXNoLmdldFNj
ZW5lKCk7CisgICAgICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAg
ICAgICAgICAvLyBDdWxsaW5nCisgICAgICAgICAgICBlbmdpbmUuc2V0U3RhdGUobWF0ZXJpYWwu
YmFja0ZhY2VDdWxsaW5nKTsKKyAgICAgICAgICAgIC8vIE1hbmFnaW5nIGluc3RhbmNlcworICAg
ICAgICAgICAgdmFyIGJhdGNoID0gbWVzaC5fZ2V0SW5zdGFuY2VzUmVuZGVyTGlzdChzdWJNZXNo
Ll9pZCk7CisgICAgICAgICAgICBpZiAoYmF0Y2gubXVzdFJldHVybikgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBoYXJkd2FyZUluc3Rh
bmNlZFJlbmRlcmluZyA9IChlbmdpbmUuZ2V0Q2FwcygpLmluc3RhbmNlZEFycmF5cykgJiYgKGJh
dGNoLnZpc2libGVJbnN0YW5jZXNbc3ViTWVzaC5faWRdICE9PSBudWxsKTsKKyAgICAgICAgICAg
IGlmIChfdGhpcy5faXNSZWFkeShzdWJNZXNoLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZykp
IHsKKyAgICAgICAgICAgICAgICB2YXIgZWZmZWN0ID0gX3RoaXMuX3ZvbHVtZXRyaWNMaWdodFNj
YXR0ZXJpbmdQYXNzOworICAgICAgICAgICAgICAgIGlmIChtZXNoID09PSBfdGhpcy5tZXNoKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzdWJNZXNoLmVmZmVjdCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZWZmZWN0ID0gc3ViTWVzaC5lZmZlY3Q7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBl
ZmZlY3QgPSBtYXRlcmlhbC5nZXRFZmZlY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KGVmZmVj
dCk7CisgICAgICAgICAgICAgICAgbWVzaC5fYmluZChzdWJNZXNoLCBlZmZlY3QsIF9NYXRlcmlh
bHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTWF0ZXJpYWwiXS5Ucmlh
bmdsZUZpbGxNb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAobWVzaCA9PT0gX3RoaXMubWVzaCkg
eworICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5iaW5kKG1lc2guZ2V0V29ybGRNYXRyaXgo
KSwgbWVzaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3Muc2V0
TWF0cml4KCJ2aWV3UHJvamVjdGlvbiIsIHNjZW5lLmdldFRyYW5zZm9ybU1hdHJpeCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gQWxwaGEgdGVzdAorICAgICAgICAgICAgICAgICAgICBpZiAo
bWF0ZXJpYWwgJiYgbWF0ZXJpYWwubmVlZEFscGhhVGVzdGluZygpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgYWxwaGFUZXh0dXJlID0gbWF0ZXJpYWwuZ2V0QWxwaGFUZXN0VGV4dHVy
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ZvbHVtZXRyaWNMaWdodFNjYXR0
ZXJpbmdQYXNzLnNldFRleHR1cmUoImRpZmZ1c2VTYW1wbGVyIiwgYWxwaGFUZXh0dXJlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYVRleHR1cmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3Muc2V0TWF0
cml4KCJkaWZmdXNlTWF0cml4IiwgYWxwaGFUZXh0dXJlLmdldFRleHR1cmVNYXRyaXgoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgLy8gQm9uZXMKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gudXNlQm9u
ZXMgJiYgbWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgJiYgbWVzaC5za2VsZXRvbikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQ
YXNzLnNldE1hdHJpY2VzKCJtQm9uZXMiLCBtZXNoLnNrZWxldG9uLmdldFRyYW5zZm9ybU1hdHJp
Y2VzKG1lc2gpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyBEcmF3CisgICAgICAgICAgICAgICAgbWVzaC5fcHJvY2Vzc1JlbmRl
cmluZyhzdWJNZXNoLCBfdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3MsIF9NYXRl
cmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTWF0ZXJpYWwiXS5U
cmlhbmdsZUZpbGxNb2RlLCBiYXRjaCwgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcsIGZ1bmN0
aW9uIChpc0luc3RhbmNlLCB3b3JsZCkgeyByZXR1cm4gZWZmZWN0LnNldE1hdHJpeCgid29ybGQi
LCB3b3JsZCk7IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICAvLyBSZW5k
ZXIgdGFyZ2V0IHRleHR1cmUgY2FsbGJhY2tzCisgICAgICAgIHZhciBzYXZlZFNjZW5lQ2xlYXJD
b2xvcjsKKyAgICAgICAgdmFyIHNjZW5lQ2xlYXJDb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siQ29sb3I0Il0oMC4wLCAwLjAsIDAuMCwg
MS4wKTsKKyAgICAgICAgdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1JUVC5vbkJlZm9y
ZVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNhdmVkU2Nl
bmVDbGVhckNvbG9yID0gc2NlbmUuY2xlYXJDb2xvcjsKKyAgICAgICAgICAgIHNjZW5lLmNsZWFy
Q29sb3IgPSBzY2VuZUNsZWFyQ29sb3I7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl92b2x1
bWV0cmljTGlnaHRTY2F0dGVyaW5nUlRULm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLmFkZChmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICBzY2VuZS5jbGVhckNvbG9yID0gc2F2ZWRTY2VuZUNsZWFy
Q29sb3I7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl92b2x1bWV0cmljTGlnaHRTY2F0dGVy
aW5nUlRULmN1c3RvbVJlbmRlckZ1bmN0aW9uID0gZnVuY3Rpb24gKG9wYXF1ZVN1Yk1lc2hlcywg
YWxwaGFUZXN0U3ViTWVzaGVzLCB0cmFuc3BhcmVudFN1Yk1lc2hlcywgZGVwdGhPbmx5U3ViTWVz
aGVzKSB7CisgICAgICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAg
ICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgICAgICBpZiAoZGVwdGhPbmx5U3ViTWVzaGVzLmxl
bmd0aCkgeworICAgICAgICAgICAgICAgIGVuZ2luZS5zZXRDb2xvcldyaXRlKGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBkZXB0aE9ubHlTdWJNZXNoZXMu
bGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1Yk1lc2goZGVw
dGhPbmx5U3ViTWVzaGVzLmRhdGFbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZW5naW5lLnNldENvbG9yV3JpdGUodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBvcGFxdWVTdWJNZXNoZXMubGVuZ3RoOyBp
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgcmVuZGVyU3ViTWVzaChvcGFxdWVTdWJNZXNoZXMu
ZGF0YVtpbmRleF0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7
IGluZGV4IDwgYWxwaGFUZXN0U3ViTWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgICAgIHJlbmRlclN1Yk1lc2goYWxwaGFUZXN0U3ViTWVzaGVzLmRhdGFbaW5kZXhdKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0cmFuc3BhcmVudFN1Yk1lc2hlcy5sZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICAvLyBTb3J0IHN1YiBtZXNoZXMKKyAgICAgICAgICAgICAgICBm
b3IgKGluZGV4ID0gMDsgaW5kZXggPCB0cmFuc3BhcmVudFN1Yk1lc2hlcy5sZW5ndGg7IGluZGV4
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN1Ym1lc2ggPSB0cmFuc3BhcmVudFN1Yk1l
c2hlcy5kYXRhW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9
IHN1Ym1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChib3Vu
ZGluZ0luZm8gJiYgc2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdWJtZXNoLl9hbHBoYUluZGV4ID0gc3VibWVzaC5nZXRNZXNoKCkuYWxwaGFJbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN1Ym1lc2guX2Rpc3RhbmNlVG9DYW1lcmEgPSBib3VuZGlu
Z0luZm8uYm91bmRpbmdTcGhlcmUuY2VudGVyV29ybGQuc3VidHJhY3Qoc2NlbmUuYWN0aXZlQ2Ft
ZXJhLnBvc2l0aW9uKS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgc29ydGVkQXJyYXkgPSB0cmFuc3BhcmVudFN1
Yk1lc2hlcy5kYXRhLnNsaWNlKDAsIHRyYW5zcGFyZW50U3ViTWVzaGVzLmxlbmd0aCk7CisgICAg
ICAgICAgICAgICAgc29ydGVkQXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikgeworICAgICAgICAg
ICAgICAgICAgICAvLyBBbHBoYSBpbmRleCBmaXJzdAorICAgICAgICAgICAgICAgICAgICBpZiAo
YS5fYWxwaGFJbmRleCA+IGIuX2FscGhhSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
IChhLl9hbHBoYUluZGV4IDwgYi5fYWxwaGFJbmRleCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIFRoZW4gZGlzdGFuY2UgdG8gY2FtZXJhCisgICAgICAgICAgICAgICAgICAgIGlmIChhLl9k
aXN0YW5jZVRvQ2FtZXJhIDwgYi5fZGlzdGFuY2VUb0NhbWVyYSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGEuX2Rpc3RhbmNlVG9DYW1lcmEgPiBiLl9kaXN0YW5jZVRvQ2FtZXJhKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgLy8gUmVuZGVyIHN1YiBtZXNoZXMKKyAgICAgICAgICAgICAgICBlbmdpbmUu
c2V0QWxwaGFNb2RlKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTNfX1siQ29uc3RhbnRzIl0uQUxQSEFfQ09NQklORSk7CisgICAgICAgICAgICAgICAgZm9yIChp
bmRleCA9IDA7IGluZGV4IDwgc29ydGVkQXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJlbmRlclN1Yk1lc2goc29ydGVkQXJyYXlbaW5kZXhdKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5naW5lLnNldEFscGhhTW9kZShfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkNvbnN0YW50cyJdLkFMUEhB
X0RJU0FCTEUpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH07CisgICAgVm9sdW1l
dHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZS5fdXBkYXRlTWVzaFNjcmVl
bkNvb3JkaW5hdGVzID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAgICAgIHZhciB0cmFuc2Zvcm0g
PSBzY2VuZS5nZXRUcmFuc2Zvcm1NYXRyaXgoKTsKKyAgICAgICAgdmFyIG1lc2hQb3NpdGlvbjsK
KyAgICAgICAgaWYgKHRoaXMudXNlQ3VzdG9tTWVzaFBvc2l0aW9uKSB7CisgICAgICAgICAgICBt
ZXNoUG9zaXRpb24gPSB0aGlzLmN1c3RvbU1lc2hQb3NpdGlvbjsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICh0aGlzLmF0dGFjaGVkTm9kZSkgeworICAgICAgICAgICAgbWVzaFBvc2l0aW9u
ID0gdGhpcy5hdHRhY2hlZE5vZGUucG9zaXRpb247CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBtZXNoUG9zaXRpb24gPSB0aGlzLm1lc2gucGFyZW50ID8gdGhpcy5tZXNo
LmdldEFic29sdXRlUG9zaXRpb24oKSA6IHRoaXMubWVzaC5wb3NpdGlvbjsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgcG9zID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXS5Qcm9qZWN0KG1lc2hQb3NpdGlvbiwgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLklkZW50aXR5KCksIHRy
YW5zZm9ybSwgdGhpcy5fdmlld1BvcnQpOworICAgICAgICB0aGlzLl9zY3JlZW5Db29yZGluYXRl
cy54ID0gcG9zLnggLyB0aGlzLl92aWV3UG9ydC53aWR0aDsKKyAgICAgICAgdGhpcy5fc2NyZWVu
Q29vcmRpbmF0ZXMueSA9IHBvcy55IC8gdGhpcy5fdmlld1BvcnQuaGVpZ2h0OworICAgICAgICBp
ZiAodGhpcy5pbnZlcnQpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjcmVlbkNvb3JkaW5hdGVzLnkg
PSAxLjAgLSB0aGlzLl9zY3JlZW5Db29yZGluYXRlcy55OworICAgICAgICB9CisgICAgfTsKKyAg
ICAvLyBTdGF0aWMgbWV0aG9kcworICAgIC8qKgorICAgICogQ3JlYXRlcyBhIGRlZmF1bHQgbWVz
aCBmb3IgdGhlIFZvbHVtZXJpYyBMaWdodCBTY2F0dGVyaW5nIHBvc3QtcHJvY2VzcworICAgICog
QHBhcmFtIG5hbWUgVGhlIG1lc2ggbmFtZQorICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB3
aGVyZSB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAqIEByZXR1cm4gdGhlIGRlZmF1bHQgbWVzaAor
ICAgICovCisgICAgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLkNyZWF0ZURl
ZmF1bHRNZXNoID0gZnVuY3Rpb24gKG5hbWUsIHNjZW5lKSB7CisgICAgICAgIHZhciBtZXNoID0g
X01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIk1lc2giXS5DcmVhdGVQ
bGFuZShuYW1lLCAxLCBzY2VuZSk7CisgICAgICAgIG1lc2guYmlsbGJvYXJkTW9kZSA9IF9NZXNo
ZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkFic3RyYWN0TWVz
aCJdLkJJTExCT0FSRE1PREVfQUxMOworICAgICAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgX01hdGVy
aWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlN0YW5k
YXJkTWF0ZXJpYWwiXShuYW1lICsgIk1hdGVyaWFsIiwgc2NlbmUpOworICAgICAgICBtYXRlcmlh
bC5lbWlzc2l2ZUNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xOV9fWyJDb2xvcjMiXSgxLCAxLCAxKTsKKyAgICAgICAgbWVzaC5tYXRlcmlhbCA9
IG1hdGVyaWFsOworICAgICAgICByZXR1cm4gbWVzaDsKKyAgICB9OworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFz
VmVjdG9yMyJdKSgpCisgICAgXSwgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNz
LnByb3RvdHlwZSwgImN1c3RvbU1lc2hQb3NpdGlvbiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUG9zdFByb2Nlc3MucHJvdG90
eXBlLCAidXNlQ3VzdG9tTWVzaFBvc2l0aW9uIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIFZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUs
ICJpbnZlcnQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzTWVzaFJlZmVyZW5jZSJdKSgpCisg
ICAgXSwgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgIm1l
c2giLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVm9sdW1ldHJpY0xpZ2h0
U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgImV4Y2x1ZGVkTWVzaGVzIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQ
b3N0UHJvY2Vzcy5wcm90b3R5cGUsICJleHBvc3VyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUG9zdFByb2Nlc3MucHJvdG90
eXBlLCAiZGVjYXkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVm9sdW1l
dHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgIndlaWdodCIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5n
UG9zdFByb2Nlc3MucHJvdG90eXBlLCAiZGVuc2l0eSIsIHZvaWQgMCk7CisgICAgcmV0dXJuIFZv
bHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJQb3N0UHJvY2VzcyJdKSk7CisKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy92ckRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFBy
b2Nlc3MudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2VzL3ZyRGlzdG9ydGlv
bkNvcnJlY3Rpb25Qb3N0UHJvY2Vzcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogVlJEaXN0b3J0aW9uQ29ycmVjdGlvblBvc3RQcm9jZXNzICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0UHJvY2VzcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gVlJEaXN0b3J0aW9uQ29ycmVjdGlvblBvc3RQcm9jZXNzOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxl
cy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4
dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vzc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJv
Y2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1NoYWRlcnNfdnJEaXN0b3J0aW9uQ29ycmVjdGlvbl9mcmFnbWVudF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hh
ZGVycy92ckRpc3RvcnRpb25Db3JyZWN0aW9uLmZyYWdtZW50ICovICIuL1NoYWRlcnMvdnJEaXN0
b3J0aW9uQ29ycmVjdGlvbi5mcmFnbWVudC50cyIpOworCisKKworCisKKy8qKgorICogVlJEaXN0
b3J0aW9uQ29ycmVjdGlvblBvc3RQcm9jZXNzIHVzZWQgZm9yIG1vYmlsZSBWUgorICovCit2YXIg
VlJEaXN0b3J0aW9uQ29ycmVjdGlvblBvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZXh0ZW5kcyJdKFZSRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAg
ICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUgVlJEaXN0b3J0aW9uQ29ycmVjdGlvblBvc3RQ
cm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAgICAg
KiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gYXBwbHkgdGhlIHJlbmRlciBwYXNzIHRvLgor
ICAgICAqIEBwYXJhbSBpc1JpZ2h0RXllIElmIHRoaXMgaXMgZm9yIHRoZSByaWdodCBleWUgZGlz
dG9ydGlvbgorICAgICAqIEBwYXJhbSB2ck1ldHJpY3MgQWxsIHRoZSByZXF1aXJlZCBtZXRyaWNz
IGZvciB0aGUgVlIgY2FtZXJhCisgICAgICovCisgICAgZnVuY3Rpb24gVlJEaXN0b3J0aW9uQ29y
cmVjdGlvblBvc3RQcm9jZXNzKG5hbWUsIGNhbWVyYSwgaXNSaWdodEV5ZSwgdnJNZXRyaWNzKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsICJ2ckRpc3RvcnRp
b25Db3JyZWN0aW9uIiwgWworICAgICAgICAgICAgJ0xlbnNDZW50ZXInLAorICAgICAgICAgICAg
J1NjYWxlJywKKyAgICAgICAgICAgICdTY2FsZUluJywKKyAgICAgICAgICAgICdIbWRXYXJwUGFy
YW0nCisgICAgICAgIF0sIG51bGwsIHZyTWV0cmljcy5wb3N0UHJvY2Vzc1NjYWxlRmFjdG9yLCBj
YW1lcmEsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFKSB8fCB0aGlzOworICAgICAg
ICBfdGhpcy5faXNSaWdodEV5ZSA9IGlzUmlnaHRFeWU7CisgICAgICAgIF90aGlzLl9kaXN0b3J0
aW9uRmFjdG9ycyA9IHZyTWV0cmljcy5kaXN0b3J0aW9uSzsKKyAgICAgICAgX3RoaXMuX3Bvc3RQ
cm9jZXNzU2NhbGVGYWN0b3IgPSB2ck1ldHJpY3MucG9zdFByb2Nlc3NTY2FsZUZhY3RvcjsKKyAg
ICAgICAgX3RoaXMuX2xlbnNDZW50ZXJPZmZzZXQgPSB2ck1ldHJpY3MubGVuc0NlbnRlck9mZnNl
dDsKKyAgICAgICAgX3RoaXMuYWRhcHRTY2FsZVRvQ3VycmVudFZpZXdwb3J0ID0gdHJ1ZTsKKyAg
ICAgICAgX3RoaXMub25TaXplQ2hhbmdlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIF90aGlzLl9zY2FsZUluID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0oMiwgMiAvIF90aGlzLmFzcGVjdFJhdGlv
KTsKKyAgICAgICAgICAgIF90aGlzLl9zY2FsZUZhY3RvciA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKC41ICogKDEgLyBfdGhp
cy5fcG9zdFByb2Nlc3NTY2FsZUZhY3RvciksIC41ICogKDEgLyBfdGhpcy5fcG9zdFByb2Nlc3NT
Y2FsZUZhY3RvcikgKiBfdGhpcy5hc3BlY3RSYXRpbyk7CisgICAgICAgICAgICBfdGhpcy5fbGVu
c0NlbnRlciA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVjdG9yMiJdKF90aGlzLl9pc1JpZ2h0RXllID8gMC41IC0gX3RoaXMuX2xlbnNDZW50
ZXJPZmZzZXQgKiAwLjUgOiAwLjUgKyBfdGhpcy5fbGVuc0NlbnRlck9mZnNldCAqIDAuNSwgMC41
KTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLm9uQXBwbHlPYnNlcnZhYmxlLmFkZChmdW5j
dGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCJMZW5zQ2VudGVy
IiwgX3RoaXMuX2xlbnNDZW50ZXIueCwgX3RoaXMuX2xlbnNDZW50ZXIueSk7CisgICAgICAgICAg
ICBlZmZlY3Quc2V0RmxvYXQyKCJTY2FsZSIsIF90aGlzLl9zY2FsZUZhY3Rvci54LCBfdGhpcy5f
c2NhbGVGYWN0b3IueSk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCJTY2FsZUluIiwg
X3RoaXMuX3NjYWxlSW4ueCwgX3RoaXMuX3NjYWxlSW4ueSk7CisgICAgICAgICAgICBlZmZlY3Qu
c2V0RmxvYXQ0KCJIbWRXYXJwUGFyYW0iLCBfdGhpcy5fZGlzdG9ydGlvbkZhY3RvcnNbMF0sIF90
aGlzLl9kaXN0b3J0aW9uRmFjdG9yc1sxXSwgX3RoaXMuX2Rpc3RvcnRpb25GYWN0b3JzWzJdLCBf
dGhpcy5fZGlzdG9ydGlvbkZhY3RvcnNbM10pOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJu
IF90aGlzOworICAgIH0KKyAgICByZXR1cm4gVlJEaXN0b3J0aW9uQ29ycmVjdGlvblBvc3RQcm9j
ZXNzOworfShfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9zdFBy
b2Nlc3MiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvdnJN
dWx0aXZpZXdUb1NpbmdsZXZpZXdQb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9Qb3N0UHJvY2Vzc2VzL3ZyTXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBWUk11bHRpdmlld1RvU2luZ2xldmll
d1Bvc3RQcm9jZXNzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSTXVs
dGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFZSTXVs
dGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9zdFByb2Nlc3Mg
Ki8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzX3ZyTXVsdGl2aWV3VG9TaW5nbGV2aWV3X2ZyYWdtZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJz
L3ZyTXVsdGl2aWV3VG9TaW5nbGV2aWV3LmZyYWdtZW50ICovICIuL1NoYWRlcnMvdnJNdWx0aXZp
ZXdUb1NpbmdsZXZpZXcuZnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
RW5naW5lc19FeHRlbnNpb25zX2VuZ2luZV9tdWx0aXZpZXdfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvRXh0ZW5zaW9ucy9l
bmdpbmUubXVsdGl2aWV3ICovICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUubXVsdGl2aWV3
LnRzIik7CisKKworCisKKworLyoqCisgKiBWUk11bHRpdmlld1RvU2luZ2xldmlldyB1c2VkIHRv
IGNvbnZlcnQgbXVsdGl2aWV3IHRleHR1cmUgYXJyYXlzIHRvIHN0YW5kYXJkIHRleHR1cmVzIGZv
ciBzY2VuYXJpb3Mgc3VjaCBhcyB3ZWJWUgorICogVGhpcyB3aWxsIG5vdCBiZSB1c2VkIGZvciB3
ZWJYUiBhcyBpdCBzdXBwb3J0cyBkaXNwbGF5aW5nIHRleHR1cmUgYXJyYXlzIGRpcmVjdGx5Cisg
Ki8KK3ZhciBWUk11bHRpdmlld1RvU2luZ2xldmlld1Bvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZXh0ZW5kcyJdKFZSTXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MsIF9z
dXBlcik7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgYSBWUk11bHRpdmlld1RvU2luZ2xl
dmlldworICAgICAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIHBvc3QgcHJvY2VzcworICAgICAq
IEBwYXJhbSBjYW1lcmEgY2FtZXJhIHRvIGJlIGFwcGxpZWQgdG8KKyAgICAgKiBAcGFyYW0gc2Nh
bGVGYWN0b3Igc2NhbGluZyBmYWN0b3IgdG8gdGhlIHNpemUgb2YgdGhlIG91dHB1dCB0ZXh0dXJl
CisgICAgICovCisgICAgZnVuY3Rpb24gVlJNdWx0aXZpZXdUb1NpbmdsZXZpZXdQb3N0UHJvY2Vz
cyhuYW1lLCBjYW1lcmEsIHNjYWxlRmFjdG9yKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIG5hbWUsICJ2ck11bHRpdmlld1RvU2luZ2xldmlldyIsIFsiaW1hZ2VJbmRl
eCJdLCBbIm11bHRpdmlld1NhbXBsZXIiXSwgc2NhbGVGYWN0b3IsIGNhbWVyYSwgX01hdGVyaWFs
c19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRleHR1cmUi
XS5CSUxJTkVBUl9TQU1QTElOR01PREUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLm9uU2l6ZUNo
YW5nZWRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgIH0pOworICAgICAgICBf
dGhpcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAg
ICAgaWYgKGNhbWVyYS5fc2NlbmUuYWN0aXZlQ2FtZXJhICYmIGNhbWVyYS5fc2NlbmUuYWN0aXZl
Q2FtZXJhLmlzTGVmdENhbWVyYSkgeworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRJbnQoImlt
YWdlSW5kZXgiLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGVmZmVjdC5zZXRJbnQoImltYWdlSW5kZXgiLCAxKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJtdWx0aXZpZXdTYW1wbGVyIiwgY2FtZXJh
Ll9tdWx0aXZpZXdUZXh0dXJlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBfdGhpczsK
KyAgICB9CisgICAgcmV0dXJuIFZSTXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3M7Cit9
KF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQb3N0UHJvY2VzcyJd
KSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUHJvYmVzL2luZGV4LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Byb2Jlcy9pbmRleC50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJl
ZmxlY3Rpb25Qcm9iZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3JlZmxlY3Rpb25Qcm9iZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9yZWZsZWN0aW9uUHJvYmUgKi8gIi4vUHJvYmVzL3JlZmxlY3Rp
b25Qcm9iZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZsZWN0aW9uUHJvYmUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9yZWZsZWN0aW9uUHJvYmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUmVmbGVjdGlvblByb2JlIl07IH0pOworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
UHJvYmVzL3JlZmxlY3Rpb25Qcm9iZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vUHJvYmVzL3JlZmxlY3Rpb25Qcm9iZS50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBSZWZsZWN0aW9uUHJvYmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUmVmbGVjdGlvblByb2JlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSZWZsZWN0aW9uUHJvYmU7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1
bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdl
dFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJlICovICIuL01h
dGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9N
YXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hYnN0cmFj
dFNjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9hYnN0cmFjdFNjZW5lICovICIuL2Fic3RyYWN0U2NlbmUudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICov
ICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisKKworCisKKworCitfYWJzdHJhY3RTY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBYnN0cmFjdFNjZW5lIl0ucHJvdG90eXBlLnJl
bW92ZVJlZmxlY3Rpb25Qcm9iZSA9IGZ1bmN0aW9uICh0b1JlbW92ZSkgeworICAgIGlmICghdGhp
cy5yZWZsZWN0aW9uUHJvYmVzKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgdmFy
IGluZGV4ID0gdGhpcy5yZWZsZWN0aW9uUHJvYmVzLmluZGV4T2YodG9SZW1vdmUpOworICAgIGlm
IChpbmRleCAhPT0gLTEpIHsKKyAgICAgICAgdGhpcy5yZWZsZWN0aW9uUHJvYmVzLnNwbGljZShp
bmRleCwgMSk7CisgICAgfQorICAgIHJldHVybiBpbmRleDsKK307CitfYWJzdHJhY3RTY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBYnN0cmFjdFNjZW5lIl0ucHJvdG90eXBlLmFk
ZFJlZmxlY3Rpb25Qcm9iZSA9IGZ1bmN0aW9uIChuZXdSZWZsZWN0aW9uUHJvYmUpIHsKKyAgICBp
ZiAoIXRoaXMucmVmbGVjdGlvblByb2JlcykgeworICAgICAgICB0aGlzLnJlZmxlY3Rpb25Qcm9i
ZXMgPSBbXTsKKyAgICB9CisgICAgdGhpcy5yZWZsZWN0aW9uUHJvYmVzLnB1c2gobmV3UmVmbGVj
dGlvblByb2JlKTsKK307CisvKioKKyAqIENsYXNzIHVzZWQgdG8gZ2VuZXJhdGUgcmVhbHRpbWUg
cmVmbGVjdGlvbiAvIHJlZnJhY3Rpb24gY3ViZSB0ZXh0dXJlcworICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfcmVmbGVjdGlvbl9wcm9iZXMKKyAqLwor
dmFyIFJlZmxlY3Rpb25Qcm9iZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHJlZmxlY3Rpb24gcHJvYmUKKyAgICAgKiBAcGFyYW0g
bmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBwcm9iZQorICAgICAqIEBwYXJhbSBzaXplIGRl
ZmluZXMgdGhlIHRleHR1cmUgcmVzb2x1dGlvbiAoZm9yIGVhY2ggZmFjZSkKKyAgICAgKiBAcGFy
YW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSBnZW5lcmF0
ZU1pcE1hcHMgZGVmaW5lcyBpZiBtaXAgbWFwcyBzaG91bGQgYmUgZ2VuZXJhdGVkIGF1dG9tYXRp
Y2FsbHkgKHRydWUgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gdXNlRmxvYXQgZGVmaW5lcyBp
ZiBIRFIgZGF0YSAoZmxhb3QgZGF0YSkgc2hvdWxkIGJlIHVzZWQgdG8gc3RvcmUgY29sb3JzIChm
YWxzZSBieSBkZWZhdWx0KQorICAgICAqLworICAgIGZ1bmN0aW9uIFJlZmxlY3Rpb25Qcm9iZSgK
KyAgICAvKiogZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgcHJvYmUgKi8KKyAgICBuYW1lLCBzaXpl
LCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzLCB1c2VGbG9hdCkgeworICAgICAgICB2YXIgX3RoaXMg
PSB0aGlzOworICAgICAgICBpZiAoZ2VuZXJhdGVNaXBNYXBzID09PSB2b2lkIDApIHsgZ2VuZXJh
dGVNaXBNYXBzID0gdHJ1ZTsgfQorICAgICAgICBpZiAodXNlRmxvYXQgPT09IHZvaWQgMCkgeyB1
c2VGbG9hdCA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRo
aXMuX3ZpZXdNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgdGhpcy5fdGFyZ2V0ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIHRoaXMuX2FkZCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlzLl9pbnZl
cnRZQXhpcyA9IGZhbHNlOworICAgICAgICAvKiogR2V0cyBvciBzZXRzIHByb2JlIHBvc2l0aW9u
IChjZW50ZXIgb2YgdGhlIGN1YmUgbWFwKSAqLworICAgICAgICB0aGlzLnBvc2l0aW9uID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7CisgICAgICAgIC8vIENyZWF0ZSB0
aGUgc2NlbmUgZmllbGQgaWYgbm90IGV4aXN0LgorICAgICAgICBpZiAoIXRoaXMuX3NjZW5lLnJl
ZmxlY3Rpb25Qcm9iZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLnJlZmxlY3Rpb25Qcm9i
ZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zY2VuZS5yZWZsZWN0
aW9uUHJvYmVzLnB1c2godGhpcyk7CisgICAgICAgIHRoaXMuX3JlbmRlclRhcmdldFRleHR1cmUg
PSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlJlbmRlclRhcmdldFRleHR1cmUiXShuYW1lLCBzaXplLCBzY2Vu
ZSwgZ2VuZXJhdGVNaXBNYXBzLCB0cnVlLCB1c2VGbG9hdCA/IF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9B
VCA6IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQsIHRydWUpOworICAgICAgICB0aGlzLl9y
ZW5kZXJUYXJnZXRUZXh0dXJlLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24g
KGZhY2VJbmRleCkgeworICAgICAgICAgICAgc3dpdGNoIChmYWNlSW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9hZGQuY29weUZyb21G
bG9hdHMoMSwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FkZC5jb3B5RnJvbUZsb2F0
cygtMSwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FkZC5jb3B5RnJvbUZsb2F0cygw
LCBfdGhpcy5faW52ZXJ0WUF4aXMgPyAxIDogLTEsIDApOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgIF90aGlz
Ll9hZGQuY29weUZyb21GbG9hdHMoMCwgX3RoaXMuX2ludmVydFlBeGlzID8gLTEgOiAxLCAwKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5fYWRkLmNvcHlGcm9tRmxvYXRzKDAsIDAsIDEpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl9hZGQuY29weUZyb21GbG9hdHMoMCwgMCwgLTEpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfdGhp
cy5fYXR0YWNoZWRNZXNoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMucG9zaXRpb24uY29weUZy
b20oX3RoaXMuX2F0dGFjaGVkTWVzaC5nZXRBYnNvbHV0ZVBvc2l0aW9uKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgX3RoaXMucG9zaXRpb24uYWRkVG9SZWYoX3RoaXMuX2FkZCwgX3Ro
aXMuX3RhcmdldCk7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uTG9va0F0TEhUb1JlZihfdGhpcy5wb3NpdGlvbiwg
X3RoaXMuX3RhcmdldCwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlY3RvcjMiXS5VcCgpLCBfdGhpcy5fdmlld01hdHJpeCk7CisgICAgICAgICAgICBp
ZiAoc2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3Byb2plY3Rp
b25NYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siTWF0cml4Il0uUGVyc3BlY3RpdmVGb3ZMSChNYXRoLlBJIC8gMiwgMSwgc2NlbmUuYWN0aXZl
Q2FtZXJhLm1pblosIHNjZW5lLmFjdGl2ZUNhbWVyYS5tYXhaKTsKKyAgICAgICAgICAgICAgICBz
Y2VuZS5zZXRUcmFuc2Zvcm1NYXRyaXgoX3RoaXMuX3ZpZXdNYXRyaXgsIF90aGlzLl9wcm9qZWN0
aW9uTWF0cml4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNjZW5lLl9mb3JjZWRWaWV3
UG9zaXRpb24gPSBfdGhpcy5wb3NpdGlvbjsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3Jl
bmRlclRhcmdldFRleHR1cmUub25BZnRlclVuYmluZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHNjZW5lLl9mb3JjZWRWaWV3UG9zaXRpb24gPSBudWxsOworICAgICAg
ICAgICAgc2NlbmUudXBkYXRlVHJhbnNmb3JtTWF0cml4KHRydWUpOworICAgICAgICB9KTsKKyAg
ICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3Rpb25Qcm9iZS5wcm90b3R5cGUs
ICJzYW1wbGVzIiwgeworICAgICAgICAvKiogR2V0cyBvciBzZXRzIHRoZSBudW1iZXIgb2Ygc2Ft
cGxlcyB0byB1c2UgZm9yIG11bHRpLXNhbXBsaW5nICgwIGJ5IGRlZmF1bHQpLiBSZXF1aXJlZCBX
ZWJHTDIgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fcmVuZGVyVGFyZ2V0VGV4dHVyZS5zYW1wbGVzOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fcmVuZGVyVGFyZ2V0VGV4
dHVyZS5zYW1wbGVzID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShSZWZsZWN0aW9uUHJvYmUucHJvdG90eXBlLCAicmVmcmVzaFJhdGUiLCB7Cisg
ICAgICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIHJlZnJlc2ggcmF0ZSB0byB1c2UgKG9uIGV2ZXJ5
IGZyYW1lIGJ5IGRlZmF1bHQpICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclRhcmdldFRleHR1cmUucmVmcmVzaFJhdGU7CisgICAg
ICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlz
Ll9yZW5kZXJUYXJnZXRUZXh0dXJlLnJlZnJlc2hSYXRlID0gdmFsdWU7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0
dXJucyBhIFNjZW5lCisgICAgICovCisgICAgUmVmbGVjdGlvblByb2JlLnByb3RvdHlwZS5nZXRT
Y2VuZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lOworICAgIH07
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3Rpb25Qcm9iZS5wcm90b3R5cGUsICJj
dWJlVGV4dHVyZSIsIHsKKyAgICAgICAgLyoqIEdldHMgdGhlIGludGVybmFsIEN1YmVUZXh0dXJl
IHVzZWQgdG8gcmVuZGVyIHRvICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclRhcmdldFRleHR1cmU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWZsZWN0aW9uUHJvYmUucHJvdG90eXBlLCAi
cmVuZGVyTGlzdCIsIHsKKyAgICAgICAgLyoqIEdldHMgdGhlIGxpc3Qgb2YgbWVzaGVzIHRvIHJl
bmRlciAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9yZW5kZXJUYXJnZXRUZXh0dXJlLnJlbmRlckxpc3Q7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIC8qKgorICAgICAqIEF0dGFjaCB0aGUgcHJvYmUgdG8gYSBzcGVjaWZpYyBtZXNoIChSZW5k
ZXJpbmcgd2lsbCBiZSBkb25lIGZyb20gYXR0YWNoZWQgbWVzaCdzIHBvc2l0aW9uKQorICAgICAq
IEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIG1lc2ggdG8gYXR0YWNoIHRvCisgICAgICovCisgICAg
UmVmbGVjdGlvblByb2JlLnByb3RvdHlwZS5hdHRhY2hUb01lc2ggPSBmdW5jdGlvbiAobWVzaCkg
eworICAgICAgICB0aGlzLl9hdHRhY2hlZE1lc2ggPSBtZXNoOworICAgIH07CisgICAgLyoqCisg
ICAgICogU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBzdGVuY2lsIGFuZCBkZXB0aCBidWZm
ZXIgYXJlIGNsZWFyZWQgYmV0d2VlbiB0d28gcmVuZGVyaW5nIGdyb3VwcworICAgICAqIEBwYXJh
bSByZW5kZXJpbmdHcm91cElkIFRoZSByZW5kZXJpbmcgZ3JvdXAgaWQgY29ycmVzcG9uZGluZyB0
byBpdHMgaW5kZXgKKyAgICAgKiBAcGFyYW0gYXV0b0NsZWFyRGVwdGhTdGVuY2lsIEF1dG9tYXRp
Y2FsbHkgY2xlYXJzIGRlcHRoIGFuZCBzdGVuY2lsIGJldHdlZW4gZ3JvdXBzIGlmIHRydWUuCisg
ICAgICovCisgICAgUmVmbGVjdGlvblByb2JlLnByb3RvdHlwZS5zZXRSZW5kZXJpbmdBdXRvQ2xl
YXJEZXB0aFN0ZW5jaWwgPSBmdW5jdGlvbiAocmVuZGVyaW5nR3JvdXBJZCwgYXV0b0NsZWFyRGVw
dGhTdGVuY2lsKSB7CisgICAgICAgIHRoaXMuX3JlbmRlclRhcmdldFRleHR1cmUuc2V0UmVuZGVy
aW5nQXV0b0NsZWFyRGVwdGhTdGVuY2lsKHJlbmRlcmluZ0dyb3VwSWQsIGF1dG9DbGVhckRlcHRo
U3RlbmNpbCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbGVhbiBhbGwgYXNzb2NpYXRlZCBy
ZXNvdXJjZXMKKyAgICAgKi8KKyAgICBSZWZsZWN0aW9uUHJvYmUucHJvdG90eXBlLmRpc3Bvc2Ug
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NjZW5lLnJlZmxlY3Rp
b25Qcm9iZXMuaW5kZXhPZih0aGlzKTsKKyAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAg
ICAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIHNjZW5lIGlmIGZvdW5kCisgICAgICAgICAgICB0
aGlzLl9zY2VuZS5yZWZsZWN0aW9uUHJvYmVzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuX3JlbmRlclRhcmdldFRleHR1cmUpIHsKKyAgICAgICAgICAgIHRo
aXMuX3JlbmRlclRhcmdldFRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fcmVu
ZGVyVGFyZ2V0VGV4dHVyZSA9IG51bGw7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIENvbnZlcnRzIHRoZSByZWZsZWN0aW9uIHByb2JlIGluZm9ybWF0aW9uIHRvIGEgcmVhZGFi
bGUgc3RyaW5nIGZvciBkZWJ1ZyBwdXJwb3NlLgorICAgICAqIEBwYXJhbSBmdWxsRGV0YWlscyBT
dXBwb3J0cyBmb3IgbXVsdGlwbGUgbGV2ZWxzIG9mIGxvZ2dpbmcgd2l0aGluIHNjZW5lIGxvYWRp
bmcKKyAgICAgKiBAcmV0dXJucyB0aGUgaHVtYW4gcmVhZGFibGUgcmVmbGVjdGlvbiBwcm9iZSBp
bmZvCisgICAgICovCisgICAgUmVmbGVjdGlvblByb2JlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1
bmN0aW9uIChmdWxsRGV0YWlscykgeworICAgICAgICB2YXIgcmV0ID0gIk5hbWU6ICIgKyB0aGlz
Lm5hbWU7CisgICAgICAgIGlmIChmdWxsRGV0YWlscykgeworICAgICAgICAgICAgcmV0ICs9ICIs
IHBvc2l0aW9uOiAiICsgdGhpcy5wb3NpdGlvbi50b1N0cmluZygpOworICAgICAgICAgICAgaWYg
KHRoaXMuX2F0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgICAgIHJldCArPSAiLCBhdHRhY2hl
ZCBtZXNoOiAiICsgdGhpcy5fYXR0YWNoZWRNZXNoLm5hbWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCB0
aGUgY2xhc3MgbmFtZSBvZiB0aGUgcmVsZmVjdGlvbiBwcm9iZS4KKyAgICAgKiBAcmV0dXJucyAi
UmVmbGVjdGlvblByb2JlIgorICAgICAqLworICAgIFJlZmxlY3Rpb25Qcm9iZS5wcm90b3R5cGUu
Z2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlJlZmxlY3Rpb25Q
cm9iZSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgdGhlIHJlZmxlY3Rpb24g
cHJvYmUgdG8gYSBKU09OIHJlcHJlc2VudGF0aW9uIHdlIGNhbiBlYXNpbHkgdXNlIGluIHRoZSBy
ZXNlcGVjdGl2ZSBQYXJzZSBmdW5jdGlvbi4KKyAgICAgKiBAcmV0dXJucyBUaGUgSlNPTiByZXBy
ZXNlbnRhdGlvbiBvZiB0aGUgdGV4dHVyZQorICAgICAqLworICAgIFJlZmxlY3Rpb25Qcm9iZS5w
cm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXph
dGlvbk9iamVjdCA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlNlcmlhbGl6ZSh0aGlzLCB0aGlzLl9yZW5kZXJUYXJn
ZXRUZXh0dXJlLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5pc1Jl
ZmxlY3Rpb25Qcm9iZSA9IHRydWU7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0
OworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2UgdGhlIEpTT04gcmVwcmVzZW50YXRpb24g
b2YgYSByZWZsZWN0aW9uIHByb2JlIGluIG9yZGVyIHRvIHJlY3JlYXRlIHRoZSByZWZsZWN0aW9u
IHByb2JlIGluIHRoZSBnaXZlbiBzY2VuZS4KKyAgICAgKiBAcGFyYW0gcGFyc2VkUmVmbGVjdGlv
blByb2JlIERlZmluZSB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVmbGVjdGlvbiBw
cm9iZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSBwYXJzZWQgcmVm
bGVjdGlvbiBwcm9iZSBzaG91bGQgYmUgaW5zdGFudGlhdGVkIGluCisgICAgICogQHBhcmFtIHJv
b3RVcmwgRGVmaW5lIHRoZSByb290IHVybCBvZiB0aGUgcGFyc2luZyBzZXF1ZW5jZSBpbiB0aGUg
Y2FzZSBvZiByZWxhdGl2ZSBkZXBlbmRlbmNpZXMKKyAgICAgKiBAcmV0dXJucyBUaGUgcGFyc2Vk
IHJlZmxlY3Rpb24gcHJvYmUgaWYgc3VjY2Vzc2Z1bAorICAgICAqLworICAgIFJlZmxlY3Rpb25Q
cm9iZS5QYXJzZSA9IGZ1bmN0aW9uIChwYXJzZWRSZWZsZWN0aW9uUHJvYmUsIHNjZW5lLCByb290
VXJsKSB7CisgICAgICAgIHZhciByZWZsZWN0aW9uUHJvYmUgPSBudWxsOworICAgICAgICBpZiAo
c2NlbmUucmVmbGVjdGlvblByb2JlcykgeworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAw
OyBpbmRleCA8IHNjZW5lLnJlZmxlY3Rpb25Qcm9iZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHJwID0gc2NlbmUucmVmbGVjdGlvblByb2Jlc1tpbmRleF07CisgICAg
ICAgICAgICAgICAgaWYgKHJwLm5hbWUgPT09IHBhcnNlZFJlZmxlY3Rpb25Qcm9iZS5uYW1lKSB7
CisgICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb25Qcm9iZSA9IHJwOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmVmbGVjdGlvblByb2JlID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoZnVuY3Rpb24g
KCkgeyByZXR1cm4gcmVmbGVjdGlvblByb2JlIHx8IG5ldyBSZWZsZWN0aW9uUHJvYmUocGFyc2Vk
UmVmbGVjdGlvblByb2JlLm5hbWUsIHBhcnNlZFJlZmxlY3Rpb25Qcm9iZS5yZW5kZXJUYXJnZXRT
aXplLCBzY2VuZSwgcGFyc2VkUmVmbGVjdGlvblByb2JlLl9nZW5lcmF0ZU1pcE1hcHMpOyB9LCBw
YXJzZWRSZWZsZWN0aW9uUHJvYmUsIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgcmVmbGVjdGlv
blByb2JlLmN1YmVUZXh0dXJlLl93YWl0aW5nUmVuZGVyTGlzdCA9IHBhcnNlZFJlZmxlY3Rpb25Q
cm9iZS5yZW5kZXJMaXN0OworICAgICAgICBpZiAocGFyc2VkUmVmbGVjdGlvblByb2JlLl9hdHRh
Y2hlZE1lc2gpIHsKKyAgICAgICAgICAgIHJlZmxlY3Rpb25Qcm9iZS5hdHRhY2hUb01lc2goc2Nl
bmUuZ2V0TWVzaEJ5SUQocGFyc2VkUmVmbGVjdGlvblByb2JlLl9hdHRhY2hlZE1lc2gpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmVmbGVjdGlvblByb2JlOworICAgIH07CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplQXNNZXNoUmVmZXJlbmNlIl0pKCkKKyAgICBdLCBSZWZsZWN0aW9uUHJvYmUucHJvdG90
eXBlLCAiX2F0dGFjaGVkTWVzaCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNWZWN0b3IzIl0p
KCkKKyAgICBdLCBSZWZsZWN0aW9uUHJvYmUucHJvdG90eXBlLCAicG9zaXRpb24iLCB2b2lkIDAp
OworICAgIHJldHVybiBSZWZsZWN0aW9uUHJvYmU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1JlbmRlcmluZy9ib3VuZGluZ0JveFJlbmRlcmVyLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUmVuZGVyaW5n
L2JvdW5kaW5nQm94UmVuZGVyZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJvdW5kaW5nQm94UmVu
ZGVyZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmRpbmdCb3hS
ZW5kZXJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQm91bmRpbmdCb3hSZW5kZXJlcjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICov
ICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVz
X2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWVzaGVzL2Fic3RyYWN0TWVzaCAqLyAiLi9NZXNoZXMvYWJzdHJhY3RN
ZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX3ZlcnRleERh
dGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01lc2hlcy9tZXNoLnZlcnRleERhdGEgKi8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMv
bWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3NtYXJ0QXJyYXkgKi8gIi4vTWlzYy9z
bWFydEFycmF5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lQ29tcG9uZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9zY2VuZUNvbXBvbmVudCAqLyAiLi9zY2VuZUNvbXBvbmVudC50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbCAqLyAi
Li9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX3NoYWRlck1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc2hhZGVyTWF0ZXJpYWwgKi8gIi4vTWF0
ZXJpYWxzL3NoYWRlck1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01l
c2hlc19CdWlsZGVyc19ib3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvYm94QnVpbGRlciAqLyAi
Li9NZXNoZXMvQnVpbGRlcnMvYm94QnVpbGRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzX2NvbG9yX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9jb2xvci5mcmFnbWVudCAqLyAi
Li9TaGFkZXJzL2NvbG9yLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNfY29sb3JfdmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9jb2xvci52ZXJ0ZXggKi8gIi4vU2hhZGVy
cy9jb2xvci52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOwor
CisKKworCisKKworCisKKworCisKKworCitPYmplY3QuZGVmaW5lUHJvcGVydHkoX3NjZW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lIl0ucHJvdG90eXBlLCAiZm9yY2VTaG93
Qm91bmRpbmdCb3hlcyIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2ZvcmNlU2hvd0JvdW5kaW5nQm94ZXMgfHwgZmFsc2U7CisgICAgfSwKKyAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB0aGlzLl9mb3JjZVNob3dCb3VuZGluZ0JveGVz
ID0gdmFsdWU7CisgICAgICAgIC8vIExhenlseSBjcmVhdGVzIGEgQkIgcmVuZGVyZXIgaWYgbmVl
ZGVkLgorICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuZ2V0Qm91bmRpbmdC
b3hSZW5kZXJlcigpOworICAgICAgICB9CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorfSk7Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siU2NlbmUiXS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3hSZW5kZXJlciA9IGZ1bmN0
aW9uICgpIHsKKyAgICBpZiAoIXRoaXMuX2JvdW5kaW5nQm94UmVuZGVyZXIpIHsKKyAgICAgICAg
dGhpcy5fYm91bmRpbmdCb3hSZW5kZXJlciA9IG5ldyBCb3VuZGluZ0JveFJlbmRlcmVyKHRoaXMp
OworICAgIH0KKyAgICByZXR1cm4gdGhpcy5fYm91bmRpbmdCb3hSZW5kZXJlcjsKK307CitPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siQWJzdHJhY3RNZXNoIl0ucHJvdG90eXBlLCAic2hvd0JvdW5kaW5nQm94Iiwg
eworICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0JvdW5k
aW5nQm94IHx8IGZhbHNlOworICAgIH0sCisgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgdGhpcy5fc2hvd0JvdW5kaW5nQm94ID0gdmFsdWU7CisgICAgICAgIC8vIExhenlseSBj
cmVhdGVzIGEgQkIgcmVuZGVyZXIgaWYgbmVlZGVkLgorICAgICAgICBpZiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5nZXRCb3VuZGluZ0JveFJlbmRlcmVyKCk7CisgICAg
ICAgIH0KKyAgICB9LAorICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgY29uZmlndXJhYmxlOiB0
cnVlCit9KTsKKy8qKgorICogQ29tcG9uZW50IHJlc3BvbnNpYmxlIG9mIHJlbmRlcmluZyB0aGUg
Ym91bmRpbmcgYm94IG9mIHRoZSBtZXNoZXMgaW4gYSBzY2VuZS4KKyAqIFRoaXMgaXMgdXN1YWxs
eSB1c2VkIHRocm91Z2ggdGhlIG1lc2guc2hvd0JvdW5kaW5nQm94IG9yIHRoZSBzY2VuZS5mb3Jj
ZVNob3dCb3VuZGluZ0JveGVzIHByb3BlcnRpZXMKKyAqLwordmFyIEJvdW5kaW5nQm94UmVuZGVy
ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFu
dGlhdGVzIGEgbmV3IGJvdW5kaW5nIGJveCByZW5kZXJlciBpbiBhIHNjZW5lLgorICAgICAqIEBw
YXJhbSBzY2VuZSB0aGUgc2NlbmUgdGhlICByZW5kZXJlciByZW5kZXJzIGluCisgICAgICovCisg
ICAgZnVuY3Rpb24gQm91bmRpbmdCb3hSZW5kZXJlcihzY2VuZSkgeworICAgICAgICAvKioKKyAg
ICAgICAgICogVGhlIGNvbXBvbmVudCBuYW1lIGhlbHBmdWxsIHRvIGlkZW50aWZ5IHRoZSBjb21w
b25lbnQgaW4gdGhlIGxpc3Qgb2Ygc2NlbmUgY29tcG9uZW50cy4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMubmFtZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfQk9VTkRJTkdCT1hSRU5ERVJFUjsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIENvbG9yIG9mIHRoZSBib3VuZGluZyBib3ggbGluZXMg
cGxhY2VkIGluIGZyb250IG9mIGFuIG9iamVjdAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5m
cm9udENvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMl9fWyJDb2xvcjMiXSgxLCAxLCAxKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbG9y
IG9mIHRoZSBib3VuZGluZyBib3ggbGluZXMgcGxhY2VkIGJlaGluZCBhbiBvYmplY3QKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuYmFja0NvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJDb2xvcjMiXSgwLjEsIDAuMSwgMC4xKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaWYgdGhlIHJlbmRlcmVyIHNob3VsZCBzaG93
IHRoZSBiYWNrIGxpbmVzIG9yIG5vdAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zaG93QmFj
a0xpbmVzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMucmVuZGVyTGlzdCA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNtYXJ0QXJyYXkiXSgzMik7CisgICAgICAgIHRoaXMu
X3ZlcnRleEJ1ZmZlcnMgPSB7fTsKKyAgICAgICAgdGhpcy5fZmlsbEluZGV4QnVmZmVyID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fZmlsbEluZGV4RGF0YSA9IG51bGw7CisgICAgICAgIHRoaXMuc2Nl
bmUgPSBzY2VuZTsKKyAgICAgICAgc2NlbmUuX2FkZENvbXBvbmVudCh0aGlzKTsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25lbnQgaW4gYSBnaXZlbiBzY2VuZQor
ICAgICAqLworICAgIEJvdW5kaW5nQm94UmVuZGVyZXIucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB0aGlzLnNjZW5lLl9iZWZvcmVFdmFsdWF0ZUFjdGl2ZU1lc2hT
dGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9CRUZPUkVFVkFMVUFURUFDVElW
RU1FU0hfQk9VTkRJTkdCT1hSRU5ERVJFUiwgdGhpcywgdGhpcy5yZXNldCk7CisgICAgICAgIHRo
aXMuc2NlbmUuX2FjdGl2ZU1lc2hTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RF
UF9BQ1RJVkVNRVNIX0JPVU5ESU5HQk9YUkVOREVSRVIsIHRoaXMsIHRoaXMuX2FjdGl2ZU1lc2gp
OworICAgICAgICB0aGlzLnNjZW5lLl9ldmFsdWF0ZVN1Yk1lc2hTdGFnZS5yZWdpc3RlclN0ZXAo
X3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNjZW5lQ29tcG9u
ZW50Q29uc3RhbnRzIl0uU1RFUF9FVkFMVUFURVNVQk1FU0hfQk9VTkRJTkdCT1hSRU5ERVJFUiwg
dGhpcywgdGhpcy5fZXZhbHVhdGVTdWJNZXNoKTsKKyAgICAgICAgdGhpcy5zY2VuZS5fYWZ0ZXJS
ZW5kZXJpbmdHcm91cERyYXdTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9B
RlRFUlJFTkRFUklOR0dST1VQRFJBV19CT1VORElOR0JPWFJFTkRFUkVSLCB0aGlzLCB0aGlzLnJl
bmRlcik7CisgICAgfTsKKyAgICBCb3VuZGluZ0JveFJlbmRlcmVyLnByb3RvdHlwZS5fZXZhbHVh
dGVTdWJNZXNoID0gZnVuY3Rpb24gKG1lc2gsIHN1Yk1lc2gpIHsKKyAgICAgICAgaWYgKG1lc2gu
c2hvd1N1Yk1lc2hlc0JvdW5kaW5nQm94KSB7CisgICAgICAgICAgICB2YXIgYm91bmRpbmdJbmZv
ID0gc3ViTWVzaC5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgICAgIGlmIChib3VuZGluZ0lu
Zm8gIT09IG51bGwgJiYgYm91bmRpbmdJbmZvICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
ICAgICBib3VuZGluZ0luZm8uYm91bmRpbmdCb3guX3RhZyA9IG1lc2gucmVuZGVyaW5nR3JvdXBJ
ZDsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckxpc3QucHVzaChib3VuZGluZ0luZm8uYm91
bmRpbmdCb3gpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBCb3VuZGlu
Z0JveFJlbmRlcmVyLnByb3RvdHlwZS5fYWN0aXZlTWVzaCA9IGZ1bmN0aW9uIChzb3VyY2VNZXNo
LCBtZXNoKSB7CisgICAgICAgIGlmIChzb3VyY2VNZXNoLnNob3dCb3VuZGluZ0JveCB8fCB0aGlz
LnNjZW5lLmZvcmNlU2hvd0JvdW5kaW5nQm94ZXMpIHsKKyAgICAgICAgICAgIHZhciBib3VuZGlu
Z0luZm8gPSBzb3VyY2VNZXNoLmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICAgICAgYm91bmRp
bmdJbmZvLmJvdW5kaW5nQm94Ll90YWcgPSBtZXNoLnJlbmRlcmluZ0dyb3VwSWQ7CisgICAgICAg
ICAgICB0aGlzLnJlbmRlckxpc3QucHVzaChib3VuZGluZ0luZm8uYm91bmRpbmdCb3gpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBCb3VuZGluZ0JveFJlbmRlcmVyLnByb3RvdHlwZS5fcHJlcGFy
ZVJlc3NvdXJjZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9jb2xvclNoYWRl
cikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NvbG9y
U2hhZGVyID0gbmV3IF9NYXRlcmlhbHNfc2hhZGVyTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzhfX1siU2hhZGVyTWF0ZXJpYWwiXSgiY29sb3JTaGFkZXIiLCB0aGlzLnNjZW5lLCAi
Y29sb3IiLCB7CisgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXSwKKyAg
ICAgICAgICAgIHVuaWZvcm1zOiBbIndvcmxkIiwgInZpZXdQcm9qZWN0aW9uIiwgImNvbG9yIl0K
KyAgICAgICAgfSk7CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLnNjZW5lLmdldEVuZ2luZSgp
OworICAgICAgICB2YXIgYm94ZGF0YSA9IF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5DcmVhdGVCb3goeyBzaXplOiAxLjAg
fSk7CisgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXSA9IG5ldyBf
TWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIi
XShlbmdpbmUsIGJveGRhdGEucG9zaXRpb25zLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIGZhbHNlKTsKKyAg
ICAgICAgdGhpcy5fY3JlYXRlSW5kZXhCdWZmZXIoKTsKKyAgICAgICAgdGhpcy5fZmlsbEluZGV4
RGF0YSA9IGJveGRhdGEuaW5kaWNlczsKKyAgICB9OworICAgIEJvdW5kaW5nQm94UmVuZGVyZXIu
cHJvdG90eXBlLl9jcmVhdGVJbmRleEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IGVuZ2luZSA9IHRoaXMuc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIHRoaXMuX2luZGV4QnVm
ZmVyID0gZW5naW5lLmNyZWF0ZUluZGV4QnVmZmVyKFswLCAxLCAxLCAyLCAyLCAzLCAzLCAwLCA0
LCA1LCA1LCA2LCA2LCA3LCA3LCA0LCAwLCA3LCAxLCA2LCAyLCA1LCAzLCA0XSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZWJ1aWxkcyB0aGUgZWxlbWVudHMgcmVsYXRlZCB0byB0aGlzIGNv
bXBvbmVudCBpbiBjYXNlIG9mCisgICAgICogY29udGV4dCBsb3N0IGZvciBpbnN0YW5jZS4KKyAg
ICAgKi8KKyAgICBCb3VuZGluZ0JveFJlbmRlcmVyLnByb3RvdHlwZS5yZWJ1aWxkID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB2YXIgdmIgPSB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9u
S2luZF07CisgICAgICAgIGlmICh2YikgeworICAgICAgICAgICAgdmIuX3JlYnVpbGQoKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9jcmVhdGVJbmRleEJ1ZmZlcigpOworICAgIH07CisgICAg
LyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIEJvdW5kaW5nQm94UmVuZGVyZXIucHJv
dG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLnJlbmRlckxpc3QucmVz
ZXQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbmRlciB0aGUgYm91bmRpbmcgYm94ZXMg
b2YgYSBzcGVjaWZpYyByZW5kZXJpbmcgZ3JvdXAKKyAgICAgKiBAcGFyYW0gcmVuZGVyaW5nR3Jv
dXBJZCBkZWZpbmVzIHRoZSByZW5kZXJpbmcgZ3JvdXAgdG8gcmVuZGVyCisgICAgICovCisgICAg
Qm91bmRpbmdCb3hSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlcmlu
Z0dyb3VwSWQpIHsKKyAgICAgICAgaWYgKHRoaXMucmVuZGVyTGlzdC5sZW5ndGggPT09IDApIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9wcmVwYXJlUmVz
c291cmNlcygpOworICAgICAgICBpZiAoIXRoaXMuX2NvbG9yU2hhZGVyLmlzUmVhZHkoKSkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlz
LnNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBlbmdpbmUuc2V0RGVwdGhXcml0ZShmYWxzZSk7
CisgICAgICAgIHRoaXMuX2NvbG9yU2hhZGVyLl9wcmVCaW5kKCk7CisgICAgICAgIGZvciAodmFy
IGJvdW5kaW5nQm94SW5kZXggPSAwOyBib3VuZGluZ0JveEluZGV4IDwgdGhpcy5yZW5kZXJMaXN0
Lmxlbmd0aDsgYm91bmRpbmdCb3hJbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgYm91bmRpbmdC
b3ggPSB0aGlzLnJlbmRlckxpc3QuZGF0YVtib3VuZGluZ0JveEluZGV4XTsKKyAgICAgICAgICAg
IGlmIChib3VuZGluZ0JveC5fdGFnICE9PSByZW5kZXJpbmdHcm91cElkKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbWluID0gYm91
bmRpbmdCb3gubWluaW11bTsKKyAgICAgICAgICAgIHZhciBtYXggPSBib3VuZGluZ0JveC5tYXhp
bXVtOworICAgICAgICAgICAgdmFyIGRpZmYgPSBtYXguc3VidHJhY3QobWluKTsKKyAgICAgICAg
ICAgIHZhciBtZWRpYW4gPSBtaW4uYWRkKGRpZmYuc2NhbGUoMC41KSk7CisgICAgICAgICAgICB2
YXIgd29ybGRNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siTWF0cml4Il0uU2NhbGluZyhkaWZmLngsIGRpZmYueSwgZGlmZi56KQorICAgICAg
ICAgICAgICAgIC5tdWx0aXBseShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siTWF0cml4Il0uVHJhbnNsYXRpb24obWVkaWFuLngsIG1lZGlhbi55LCBtZWRp
YW4ueikpCisgICAgICAgICAgICAgICAgLm11bHRpcGx5KGJvdW5kaW5nQm94LmdldFdvcmxkTWF0
cml4KCkpOworICAgICAgICAgICAgLy8gVkJPcworICAgICAgICAgICAgZW5naW5lLmJpbmRCdWZm
ZXJzKHRoaXMuX3ZlcnRleEJ1ZmZlcnMsIHRoaXMuX2luZGV4QnVmZmVyLCB0aGlzLl9jb2xvclNo
YWRlci5nZXRFZmZlY3QoKSk7CisgICAgICAgICAgICBpZiAodGhpcy5zaG93QmFja0xpbmVzKSB7
CisgICAgICAgICAgICAgICAgLy8gQmFjaworICAgICAgICAgICAgICAgIGVuZ2luZS5zZXREZXB0
aEZ1bmN0aW9uVG9HcmVhdGVyT3JFcXVhbCgpOworICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUu
cmVzZXRDYWNoZWRNYXRlcmlhbCgpOworICAgICAgICAgICAgICAgIHRoaXMuX2NvbG9yU2hhZGVy
LnNldENvbG9yNCgiY29sb3IiLCB0aGlzLmJhY2tDb2xvci50b0NvbG9yNCgpKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9jb2xvclNoYWRlci5iaW5kKHdvcmxkTWF0cml4KTsKKyAgICAgICAgICAg
ICAgICAvLyBEcmF3IG9yZGVyCisgICAgICAgICAgICAgICAgZW5naW5lLmRyYXdFbGVtZW50c1R5
cGUoX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJNYXRl
cmlhbCJdLkxpbmVMaXN0RHJhd01vZGUsIDAsIDI0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIC8vIEZyb250CisgICAgICAgICAgICBlbmdpbmUuc2V0RGVwdGhGdW5jdGlvblRvTGVzcygp
OworICAgICAgICAgICAgdGhpcy5zY2VuZS5yZXNldENhY2hlZE1hdGVyaWFsKCk7CisgICAgICAg
ICAgICB0aGlzLl9jb2xvclNoYWRlci5zZXRDb2xvcjQoImNvbG9yIiwgdGhpcy5mcm9udENvbG9y
LnRvQ29sb3I0KCkpOworICAgICAgICAgICAgdGhpcy5fY29sb3JTaGFkZXIuYmluZCh3b3JsZE1h
dHJpeCk7CisgICAgICAgICAgICAvLyBEcmF3IG9yZGVyCisgICAgICAgICAgICBlbmdpbmUuZHJh
d0VsZW1lbnRzVHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIk1hdGVyaWFsIl0uTGluZUxpc3REcmF3TW9kZSwgMCwgMjQpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2NvbG9yU2hhZGVyLnVuYmluZCgpOworICAgICAgICBlbmdpbmUuc2V0RGVw
dGhGdW5jdGlvblRvTGVzc09yRXF1YWwoKTsKKyAgICAgICAgZW5naW5lLnNldERlcHRoV3JpdGUo
dHJ1ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbiBjYXNlIG9mIG9jY2x1c2lvbiBxdWVy
aWVzLCB3ZSBjYW4gcmVuZGVyIHRoZSBvY2NsdXNpb24gYm91bmRpbmcgYm94IHRocm91Z2ggdGhp
cyBtZXRob2QKKyAgICAgKiBAcGFyYW0gbWVzaCBEZWZpbmUgdGhlIG1lc2ggdG8gcmVuZGVyIHRo
ZSBvY2NsdXNpb24gYm91bmRpbmcgYm94IGZvcgorICAgICAqLworICAgIEJvdW5kaW5nQm94UmVu
ZGVyZXIucHJvdG90eXBlLnJlbmRlck9jY2x1c2lvbkJvdW5kaW5nQm94ID0gZnVuY3Rpb24gKG1l
c2gpIHsKKyAgICAgICAgdGhpcy5fcHJlcGFyZVJlc3NvdXJjZXMoKTsKKyAgICAgICAgaWYgKCF0
aGlzLl9jb2xvclNoYWRlci5pc1JlYWR5KCkgfHwgIW1lc2guX2JvdW5kaW5nSW5mbykgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLnNj
ZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAoIXRoaXMuX2ZpbGxJbmRleEJ1ZmZlcikgewor
ICAgICAgICAgICAgdGhpcy5fZmlsbEluZGV4QnVmZmVyID0gZW5naW5lLmNyZWF0ZUluZGV4QnVm
ZmVyKHRoaXMuX2ZpbGxJbmRleERhdGEpOworICAgICAgICB9CisgICAgICAgIGVuZ2luZS5zZXRE
ZXB0aFdyaXRlKGZhbHNlKTsKKyAgICAgICAgZW5naW5lLnNldENvbG9yV3JpdGUoZmFsc2UpOwor
ICAgICAgICB0aGlzLl9jb2xvclNoYWRlci5fcHJlQmluZCgpOworICAgICAgICB2YXIgYm91bmRp
bmdCb3ggPSBtZXNoLl9ib3VuZGluZ0luZm8uYm91bmRpbmdCb3g7CisgICAgICAgIHZhciBtaW4g
PSBib3VuZGluZ0JveC5taW5pbXVtOworICAgICAgICB2YXIgbWF4ID0gYm91bmRpbmdCb3gubWF4
aW11bTsKKyAgICAgICAgdmFyIGRpZmYgPSBtYXguc3VidHJhY3QobWluKTsKKyAgICAgICAgdmFy
IG1lZGlhbiA9IG1pbi5hZGQoZGlmZi5zY2FsZSgwLjUpKTsKKyAgICAgICAgdmFyIHdvcmxkTWF0
cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1h
dHJpeCJdLlNjYWxpbmcoZGlmZi54LCBkaWZmLnksIGRpZmYueikKKyAgICAgICAgICAgIC5tdWx0
aXBseShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0
cml4Il0uVHJhbnNsYXRpb24obWVkaWFuLngsIG1lZGlhbi55LCBtZWRpYW4ueikpCisgICAgICAg
ICAgICAubXVsdGlwbHkoYm91bmRpbmdCb3guZ2V0V29ybGRNYXRyaXgoKSk7CisgICAgICAgIGVu
Z2luZS5iaW5kQnVmZmVycyh0aGlzLl92ZXJ0ZXhCdWZmZXJzLCB0aGlzLl9maWxsSW5kZXhCdWZm
ZXIsIHRoaXMuX2NvbG9yU2hhZGVyLmdldEVmZmVjdCgpKTsKKyAgICAgICAgZW5naW5lLnNldERl
cHRoRnVuY3Rpb25Ub0xlc3MoKTsKKyAgICAgICAgdGhpcy5zY2VuZS5yZXNldENhY2hlZE1hdGVy
aWFsKCk7CisgICAgICAgIHRoaXMuX2NvbG9yU2hhZGVyLmJpbmQod29ybGRNYXRyaXgpOworICAg
ICAgICBlbmdpbmUuZHJhd0VsZW1lbnRzVHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsIl0uVHJpYW5nbGVGaWxsTW9kZSwgMCwgMzYp
OworICAgICAgICB0aGlzLl9jb2xvclNoYWRlci51bmJpbmQoKTsKKyAgICAgICAgZW5naW5lLnNl
dERlcHRoRnVuY3Rpb25Ub0xlc3NPckVxdWFsKCk7CisgICAgICAgIGVuZ2luZS5zZXREZXB0aFdy
aXRlKHRydWUpOworICAgICAgICBlbmdpbmUuc2V0Q29sb3JXcml0ZSh0cnVlKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIERpc3Bvc2UgYW5kIHJlbGVhc2UgdGhlIHJlc291cmNlcyBhdHRhY2hl
ZCB0byB0aGlzIHJlbmRlcmVyLgorICAgICAqLworICAgIEJvdW5kaW5nQm94UmVuZGVyZXIucHJv
dG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fY29sb3JT
aGFkZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnJl
bmRlckxpc3QuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9jb2xvclNoYWRlci5kaXNwb3NlKCk7
CisgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2lu
ZF07CisgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5kaXNwb3NlKCk7
CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0gPSBudWxs
OworICAgICAgICB9CisgICAgICAgIHRoaXMuc2NlbmUuZ2V0RW5naW5lKCkuX3JlbGVhc2VCdWZm
ZXIodGhpcy5faW5kZXhCdWZmZXIpOworICAgICAgICBpZiAodGhpcy5fZmlsbEluZGV4QnVmZmVy
KSB7CisgICAgICAgICAgICB0aGlzLnNjZW5lLmdldEVuZ2luZSgpLl9yZWxlYXNlQnVmZmVyKHRo
aXMuX2ZpbGxJbmRleEJ1ZmZlcik7CisgICAgICAgICAgICB0aGlzLl9maWxsSW5kZXhCdWZmZXIg
PSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gQm91bmRpbmdCb3hSZW5kZXJl
cjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUmVuZGVyaW5nL2RlcHRoUmVu
ZGVyZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9SZW5kZXJpbmcvZGVwdGhSZW5kZXJlci50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRGVwdGhSZW5k
ZXJlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aFJlbmRlcmVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBEZXB0aFJlbmRlcmVyOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRo
cy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1
cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJlICovICIuL01hdGVyaWFs
cy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL21hdGVyaWFsICovICIuL01hdGVy
aWFscy9tYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
bWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbEhlbHBlciAqLyAiLi9NYXRlcmlhbHMv
bWF0ZXJpYWxIZWxwZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfZGVwdGhfZnJhZ21lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRl
cnMvZGVwdGguZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9kZXB0aC5mcmFnbWVudC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2RlcHRoX3ZlcnRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9kZXB0
aC52ZXJ0ZXggKi8gIi4vU2hhZGVycy9kZXB0aC52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZXZUb29scyAqLyAiLi9NaXNjL2RldlRv
b2xzLnRzIik7CisKKworCisKKworCisKKworCisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIGEg
ZGVwdGggcmVuZGVyZXIgaW4gQmFieWxvbi4KKyAqIEEgZGVwdGggcmVuZGVyZXIgd2lsbCByZW5k
ZXIgdG8gaXQncyBkZXB0aCBtYXAgZXZlcnkgZnJhbWUgd2hpY2ggY2FuIGJlIGRpc3BsYXllZCBv
ciB1c2VkIGluIHBvc3QgcHJvY2Vzc2luZworICovCit2YXIgRGVwdGhSZW5kZXJlciA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBk
ZXB0aCByZW5kZXJlcgorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhlIHJlbmRlcmVy
IGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gdHlwZSBUaGUgdGV4dHVyZSB0eXBlIG9mIHRoZSBk
ZXB0aCBtYXAgKGRlZmF1bHQ6IEVuZ2luZS5URVhUVVJFVFlQRV9GTE9BVCkKKyAgICAgKiBAcGFy
YW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gYmUgdXNlZCB0byByZW5kZXIgdGhlIGRlcHRoIG1hcCAo
ZGVmYXVsdDogc2NlbmUncyBhY3RpdmUgY2FtZXJhKQorICAgICAqIEBwYXJhbSBzdG9yZU5vbkxp
bmVhckRlcHRoIERlZmluZXMgd2hldGhlciB0aGUgZGVwdGggaXMgc3RvcmVkIGxpbmVhcmx5IGxp
a2UgaW4gQmFieWxvbiBTaGFkb3dzIG9yIGRpcmVjdGx5IGxpa2UgZ2xGcmFnQ29vcmQuegorICAg
ICAqLworICAgIGZ1bmN0aW9uIERlcHRoUmVuZGVyZXIoc2NlbmUsIHR5cGUsIGNhbWVyYSwgc3Rv
cmVOb25MaW5lYXJEZXB0aCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBp
ZiAodHlwZSA9PT0gdm9pZCAwKSB7IHR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfRkxPQVQ7IH0KKyAg
ICAgICAgaWYgKGNhbWVyYSA9PT0gdm9pZCAwKSB7IGNhbWVyYSA9IG51bGw7IH0KKyAgICAgICAg
aWYgKHN0b3JlTm9uTGluZWFyRGVwdGggPT09IHZvaWQgMCkgeyBzdG9yZU5vbkxpbmVhckRlcHRo
ID0gZmFsc2U7IH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllc3MgdGhhdCB0aGUg
ZGVwdGggcmVuZGVyZXIgd2lsbCBvbmx5IGJlIHVzZWQgd2l0aGluCisgICAgICAgICAqIHRoZSBj
YW1lcmEgaXQgaXMgY3JlYXRlZCBmb3IuCisgICAgICAgICAqIFRoaXMgY2FuIGhlbHAgZm9yY2lu
ZyBpdHMgcmVuZGVyaW5nIGR1cmluZyB0aGUgY2FtZXJhIHByb2Nlc3NpbmcuCisgICAgICAgICAq
LworICAgICAgICB0aGlzLnVzZU9ubHlJbkFjdGl2ZUNhbWVyYSA9IGZhbHNlOworICAgICAgICB0
aGlzLl9zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9zdG9yZU5vbkxpbmVhckRlcHRoID0g
c3RvcmVOb25MaW5lYXJEZXB0aDsKKyAgICAgICAgdGhpcy5pc1BhY2tlZCA9IHR5cGUgPT09IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMi
XS5URVhUVVJFVFlQRV9VTlNJR05FRF9CWVRFOworICAgICAgICBpZiAodGhpcy5pc1BhY2tlZCkg
eworICAgICAgICAgICAgdGhpcy5fY2xlYXJDb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb2xvcjQiXSgxLjAsIDEuMCwgMS4wLCAxLjAp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fY2xlYXJDb2xv
ciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJD
b2xvcjQiXSgxLjAsIDAuMCwgMC4wLCAxLjApOworICAgICAgICB9CisgICAgICAgIERlcHRoUmVu
ZGVyZXIuX1NjZW5lQ29tcG9uZW50SW5pdGlhbGl6YXRpb24odGhpcy5fc2NlbmUpOworICAgICAg
ICB0aGlzLl9jYW1lcmEgPSBjYW1lcmE7CisgICAgICAgIHZhciBlbmdpbmUgPSBzY2VuZS5nZXRF
bmdpbmUoKTsKKyAgICAgICAgLy8gUmVuZGVyIHRhcmdldAorICAgICAgICB2YXIgZm9ybWF0ID0g
KHRoaXMuaXNQYWNrZWQgfHwgZW5naW5lLndlYkdMVmVyc2lvbiA9PT0gMSkgPyBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RUZPUk1BVF9SR0JBIDogX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfUjsKKyAgICAgICAgdGhpcy5fZGVwdGhN
YXAgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlJlbmRlclRhcmdldFRleHR1cmUiXSgiZGVwdGhNYXAiLCB7
IHdpZHRoOiBlbmdpbmUuZ2V0UmVuZGVyV2lkdGgoKSwgaGVpZ2h0OiBlbmdpbmUuZ2V0UmVuZGVy
SGVpZ2h0KCkgfSwgdGhpcy5fc2NlbmUsIGZhbHNlLCB0cnVlLCB0eXBlLCBmYWxzZSwgdW5kZWZp
bmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmb3JtYXQpOworICAgICAgICB0
aGlzLl9kZXB0aE1hcC53cmFwVSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAg
ICAgIHRoaXMuX2RlcHRoTWFwLndyYXBWID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsK
KyAgICAgICAgdGhpcy5fZGVwdGhNYXAucmVmcmVzaFJhdGUgPSAxOworICAgICAgICB0aGlzLl9k
ZXB0aE1hcC5yZW5kZXJQYXJ0aWNsZXMgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZGVwdGhNYXAu
cmVuZGVyTGlzdCA9IG51bGw7CisgICAgICAgIC8vIENhbWVyYSB0byBnZXQgZGVwdGggbWFwIGZy
b20gdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IGNhbWVyYXMKKyAgICAgICAgdGhpcy5f
ZGVwdGhNYXAuYWN0aXZlQ2FtZXJhID0gdGhpcy5fY2FtZXJhOworICAgICAgICB0aGlzLl9kZXB0
aE1hcC5pZ25vcmVDYW1lcmFWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIHRoaXMuX2RlcHRoTWFw
LnVzZUNhbWVyYVBvc3RQcm9jZXNzZXMgPSBmYWxzZTsKKyAgICAgICAgLy8gc2V0IGRlZmF1bHQg
ZGVwdGggdmFsdWUgdG8gMS4wIChmYXIgYXdheSkKKyAgICAgICAgdGhpcy5fZGVwdGhNYXAub25D
bGVhck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlbmdpbmUpIHsKKyAgICAgICAgICAgIGVuZ2lu
ZS5jbGVhcihfdGhpcy5fY2xlYXJDb2xvciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIH0p
OworICAgICAgICAvLyBDdXN0b20gcmVuZGVyIGZ1bmN0aW9uCisgICAgICAgIHZhciByZW5kZXJT
dWJNZXNoID0gZnVuY3Rpb24gKHN1Yk1lc2gpIHsKKyAgICAgICAgICAgIHZhciBtZXNoID0gc3Vi
TWVzaC5nZXRSZW5kZXJpbmdNZXNoKCk7CisgICAgICAgICAgICB2YXIgc2NlbmUgPSBfdGhpcy5f
c2NlbmU7CisgICAgICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAg
ICAgICAgICB2YXIgbWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7CisgICAgICAgICAg
ICBtZXNoLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9pc0FjdGl2ZUludGVybWVkaWF0
ZSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEN1bGxpbmcgYW5kIHJldmVy
c2UgKHJpZ2h0IGhhbmRlZCBzeXN0ZW0pCisgICAgICAgICAgICBlbmdpbmUuc2V0U3RhdGUobWF0
ZXJpYWwuYmFja0ZhY2VDdWxsaW5nLCAwLCBmYWxzZSwgc2NlbmUudXNlUmlnaHRIYW5kZWRTeXN0
ZW0pOworICAgICAgICAgICAgLy8gTWFuYWdpbmcgaW5zdGFuY2VzCisgICAgICAgICAgICB2YXIg
YmF0Y2ggPSBtZXNoLl9nZXRJbnN0YW5jZXNSZW5kZXJMaXN0KHN1Yk1lc2guX2lkKTsKKyAgICAg
ICAgICAgIGlmIChiYXRjaC5tdXN0UmV0dXJuKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5n
ID0gKGVuZ2luZS5nZXRDYXBzKCkuaW5zdGFuY2VkQXJyYXlzKSAmJiAoYmF0Y2gudmlzaWJsZUlu
c3RhbmNlc1tzdWJNZXNoLl9pZF0gIT09IG51bGwpOworICAgICAgICAgICAgdmFyIGNhbWVyYSA9
IF90aGlzLl9jYW1lcmEgfHwgc2NlbmUuYWN0aXZlQ2FtZXJhOworICAgICAgICAgICAgaWYgKF90
aGlzLmlzUmVhZHkoc3ViTWVzaCwgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcpICYmIGNhbWVy
YSkgeworICAgICAgICAgICAgICAgIGVuZ2luZS5lbmFibGVFZmZlY3QoX3RoaXMuX2VmZmVjdCk7
CisgICAgICAgICAgICAgICAgbWVzaC5fYmluZChzdWJNZXNoLCBfdGhpcy5fZWZmZWN0LCBfTWF0
ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdGVyaWFsIl0u
VHJpYW5nbGVGaWxsTW9kZSk7CisgICAgICAgICAgICAgICAgX3RoaXMuX2VmZmVjdC5zZXRNYXRy
aXgoInZpZXdQcm9qZWN0aW9uIiwgc2NlbmUuZ2V0VHJhbnNmb3JtTWF0cml4KCkpOworICAgICAg
ICAgICAgICAgIF90aGlzLl9lZmZlY3Quc2V0RmxvYXQyKCJkZXB0aFZhbHVlcyIsIGNhbWVyYS5t
aW5aLCBjYW1lcmEubWluWiArIGNhbWVyYS5tYXhaKTsKKyAgICAgICAgICAgICAgICAvLyBBbHBo
YSB0ZXN0CisgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsICYmIG1hdGVyaWFsLm5lZWRBbHBo
YVRlc3RpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgYWxwaGFUZXh0dXJlID0gbWF0
ZXJpYWwuZ2V0QWxwaGFUZXN0VGV4dHVyZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxw
aGFUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZWZmZWN0LnNldFRl
eHR1cmUoImRpZmZ1c2VTYW1wbGVyIiwgYWxwaGFUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl9lZmZlY3Quc2V0TWF0cml4KCJkaWZmdXNlTWF0cml4IiwgYWxwaGFUZXh0
dXJlLmdldFRleHR1cmVNYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQm9uZXMKKyAgICAgICAgICAgICAgICBpZiAo
bWVzaC51c2VCb25lcyAmJiBtZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBtZXNoLnNr
ZWxldG9uKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9lZmZlY3Quc2V0TWF0cmljZXMo
Im1Cb25lcyIsIG1lc2guc2tlbGV0b24uZ2V0VHJhbnNmb3JtTWF0cmljZXMobWVzaCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBNb3JwaCB0YXJnZXRzCisgICAgICAg
ICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRNb3JwaFRhcmdldFBhcmFtZXRlcnMobWVzaCwg
X3RoaXMuX2VmZmVjdCk7CisgICAgICAgICAgICAgICAgLy8gRHJhdworICAgICAgICAgICAgICAg
IG1lc2guX3Byb2Nlc3NSZW5kZXJpbmcoc3ViTWVzaCwgX3RoaXMuX2VmZmVjdCwgX01hdGVyaWFs
c19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRlcmlhbCJdLlRyaWFu
Z2xlRmlsbE1vZGUsIGJhdGNoLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZywgZnVuY3Rpb24g
KGlzSW5zdGFuY2UsIHdvcmxkKSB7IHJldHVybiBfdGhpcy5fZWZmZWN0LnNldE1hdHJpeCgid29y
bGQiLCB3b3JsZCk7IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB0aGlz
Ll9kZXB0aE1hcC5jdXN0b21SZW5kZXJGdW5jdGlvbiA9IGZ1bmN0aW9uIChvcGFxdWVTdWJNZXNo
ZXMsIGFscGhhVGVzdFN1Yk1lc2hlcywgdHJhbnNwYXJlbnRTdWJNZXNoZXMsIGRlcHRoT25seVN1
Yk1lc2hlcykgeworICAgICAgICAgICAgdmFyIGluZGV4OworICAgICAgICAgICAgaWYgKGRlcHRo
T25seVN1Yk1lc2hlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBlbmdpbmUuc2V0Q29sb3JX
cml0ZShmYWxzZSk7CisgICAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZGVw
dGhPbmx5U3ViTWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICBy
ZW5kZXJTdWJNZXNoKGRlcHRoT25seVN1Yk1lc2hlcy5kYXRhW2luZGV4XSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVuZ2luZS5zZXRDb2xvcldyaXRlKHRydWUpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgb3BhcXVlU3Vi
TWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHJlbmRlclN1Yk1lc2go
b3BhcXVlU3ViTWVzaGVzLmRhdGFbaW5kZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFscGhhVGVzdFN1Yk1lc2hlcy5sZW5ndGg7IGluZGV4
KyspIHsKKyAgICAgICAgICAgICAgICByZW5kZXJTdWJNZXNoKGFscGhhVGVzdFN1Yk1lc2hlcy5k
YXRhW2luZGV4XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgdGhlIGRlcHRoIHJlbmRlcmluZyBlZmZlY3QgYW5kIGNoZWNrcyBpZiB0
aGUgZWZmZWN0IGlzIHJlYWR5LgorICAgICAqIEBwYXJhbSBzdWJNZXNoIFRoZSBzdWJtZXNoIHRv
IGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBkZXB0aCBtYXAgb2YKKyAgICAgKiBAcGFyYW0gdXNlSW5z
dGFuY2VzIElmIG11bHRpcGxlIHdvcmxkIGluc3RhbmNlcyBzaG91bGQgYmUgdXNlZAorICAgICAq
IEByZXR1cm5zIGlmIHRoZSBkZXB0aCByZW5kZXJlciBpcyByZWFkeSB0byByZW5kZXIgdGhlIGRl
cHRoIG1hcAorICAgICAqLworICAgIERlcHRoUmVuZGVyZXIucHJvdG90eXBlLmlzUmVhZHkgPSBm
dW5jdGlvbiAoc3ViTWVzaCwgdXNlSW5zdGFuY2VzKSB7CisgICAgICAgIHZhciBtYXRlcmlhbCA9
IHN1Yk1lc2guZ2V0TWF0ZXJpYWwoKTsKKyAgICAgICAgaWYgKG1hdGVyaWFsLmRpc2FibGVEZXB0
aFdyaXRlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGRlZmluZXMgPSBbXTsKKyAgICAgICAgdmFyIGF0dHJpYnMgPSBbX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5k
XTsKKyAgICAgICAgdmFyIG1lc2ggPSBzdWJNZXNoLmdldE1lc2goKTsKKyAgICAgICAgLy8gQWxw
aGEgdGVzdAorICAgICAgICBpZiAobWF0ZXJpYWwgJiYgbWF0ZXJpYWwubmVlZEFscGhhVGVzdGlu
ZygpICYmIG1hdGVyaWFsLmdldEFscGhhVGVzdFRleHR1cmUoKSkgeworICAgICAgICAgICAgZGVm
aW5lcy5wdXNoKCIjZGVmaW5lIEFMUEhBVEVTVCIpOworICAgICAgICAgICAgaWYgKG1lc2guaXNW
ZXJ0aWNlc0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCkpIHsKKyAgICAgICAgICAgICAgICBhdHRyaWJz
LnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4
QnVmZmVyIl0uVVZLaW5kKTsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUg
VVYxIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0
YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVy
dGV4QnVmZmVyIl0uVVYyS2luZCkpIHsKKyAgICAgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0u
VVYyS2luZCk7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIFVWMiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEJvbmVzCisgICAgICAgIGlmICht
ZXNoLnVzZUJvbmVzICYmIG1lc2guY29tcHV0ZUJvbmVzVXNpbmdTaGFkZXJzKSB7CisgICAgICAg
ICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCk7CisgICAgICAgICAgICBh
dHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCk7CisgICAgICAgICAgICBpZiAobWVz
aC5udW1Cb25lSW5mbHVlbmNlcnMgPiA0KSB7CisgICAgICAgICAgICAgICAgYXR0cmlicy5wdXNo
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZl
ciJdLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZCk7CisgICAgICAgICAgICAgICAgYXR0cmlicy5w
dXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1
ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0V4dHJhS2luZCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgTlVNX0JPTkVfSU5GTFVFTkNFUlMgIiArIG1lc2gu
bnVtQm9uZUluZmx1ZW5jZXJzKTsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBC
b25lc1Blck1lc2ggIiArIChtZXNoLnNrZWxldG9uID8gbWVzaC5za2VsZXRvbi5ib25lcy5sZW5n
dGggKyAxIDogMCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVm
aW5lcy5wdXNoKCIjZGVmaW5lIE5VTV9CT05FX0lORkxVRU5DRVJTIDAiKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBNb3JwaCB0YXJnZXRzCisgICAgICAgIHZhciBtb3JwaFRhcmdldE1hbmFnZXIg
PSBtZXNoLm1vcnBoVGFyZ2V0TWFuYWdlcjsKKyAgICAgICAgdmFyIG51bU1vcnBoSW5mbHVlbmNl
cnMgPSAwOworICAgICAgICBpZiAobW9ycGhUYXJnZXRNYW5hZ2VyKSB7CisgICAgICAgICAgICBp
ZiAobW9ycGhUYXJnZXRNYW5hZ2VyLm51bUluZmx1ZW5jZXJzID4gMCkgeworICAgICAgICAgICAg
ICAgIG51bU1vcnBoSW5mbHVlbmNlcnMgPSBtb3JwaFRhcmdldE1hbmFnZXIubnVtSW5mbHVlbmNl
cnM7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIE1PUlBIVEFSR0VUUyIp
OworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBOVU1fTU9SUEhfSU5GTFVF
TkNFUlMgIiArIG51bU1vcnBoSW5mbHVlbmNlcnMpOworICAgICAgICAgICAgICAgIF9NYXRlcmlh
bHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWxI
ZWxwZXIiXS5QcmVwYXJlQXR0cmlidXRlc0Zvck1vcnBoVGFyZ2V0c0luZmx1ZW5jZXJzKGF0dHJp
YnMsIG1lc2gsIG51bU1vcnBoSW5mbHVlbmNlcnMpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIC8vIEluc3RhbmNlcworICAgICAgICBpZiAodXNlSW5zdGFuY2VzKSB7CisgICAg
ICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgSU5TVEFOQ0VTIik7CisgICAgICAgICAgICBf
TWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1h
dGVyaWFsSGVscGVyIl0uUHVzaEF0dHJpYnV0ZXNGb3JJbnN0YW5jZXMoYXR0cmlicyk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gTm9uZSBsaW5lYXIgZGVwdGgKKyAgICAgICAgaWYgKHRoaXMuX3N0
b3JlTm9uTGluZWFyRGVwdGgpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBO
T05MSU5FQVJERVBUSCIpOworICAgICAgICB9CisgICAgICAgIC8vIEZsb2F0IE1vZGUKKyAgICAg
ICAgaWYgKHRoaXMuaXNQYWNrZWQpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmlu
ZSBQQUNLRUQiKTsKKyAgICAgICAgfQorICAgICAgICAvLyBHZXQgY29ycmVjdCBlZmZlY3QKKyAg
ICAgICAgdmFyIGpvaW4gPSBkZWZpbmVzLmpvaW4oIlxuIik7CisgICAgICAgIGlmICh0aGlzLl9j
YWNoZWREZWZpbmVzICE9PSBqb2luKSB7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWREZWZpbmVz
ID0gam9pbjsKKyAgICAgICAgICAgIHRoaXMuX2VmZmVjdCA9IHRoaXMuX3NjZW5lLmdldEVuZ2lu
ZSgpLmNyZWF0ZUVmZmVjdCgiZGVwdGgiLCBhdHRyaWJzLCBbIndvcmxkIiwgIm1Cb25lcyIsICJ2
aWV3UHJvamVjdGlvbiIsICJkaWZmdXNlTWF0cml4IiwgImRlcHRoVmFsdWVzIiwgIm1vcnBoVGFy
Z2V0SW5mbHVlbmNlcyJdLCBbImRpZmZ1c2VTYW1wbGVyIl0sIGpvaW4sIHVuZGVmaW5lZCwgdW5k
ZWZpbmVkLCB1bmRlZmluZWQsIHsgbWF4U2ltdWx0YW5lb3VzTW9ycGhUYXJnZXRzOiBudW1Nb3Jw
aEluZmx1ZW5jZXJzIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9lZmZlY3Qu
aXNSZWFkeSgpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdGV4dHVyZSB3aGlj
aCB0aGUgZGVwdGggbWFwIHdpbGwgYmUgd3JpdHRlbiB0by4KKyAgICAgKiBAcmV0dXJucyBUaGUg
ZGVwdGggbWFwIHRleHR1cmUKKyAgICAgKi8KKyAgICBEZXB0aFJlbmRlcmVyLnByb3RvdHlwZS5n
ZXREZXB0aE1hcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RlcHRoTWFw
OworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIGRlcHRoIHJlbmRlcmVy
LgorICAgICAqLworICAgIERlcHRoUmVuZGVyZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRoaXMuX2RlcHRoTWFwLmRpc3Bvc2UoKTsKKyAgICB9OworICAgIC8q
KiBAaGlkZGVuICovCisgICAgRGVwdGhSZW5kZXJlci5fU2NlbmVDb21wb25lbnRJbml0aWFsaXph
dGlvbiA9IGZ1bmN0aW9uIChfKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV85X19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIkRlcHRoUmVu
ZGVyZXJTY2VuZUNvbXBvbmVudCIpOworICAgIH07CisgICAgcmV0dXJuIERlcHRoUmVuZGVyZXI7
Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1JlbmRlcmluZy9kZXB0aFJlbmRl
cmVyU2NlbmVDb21wb25lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1JlbmRlcmluZy9kZXB0aFJlbmRlcmVy
U2NlbmVDb21wb25lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRGVwdGhSZW5kZXJl
clNjZW5lQ29tcG9uZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRl
cHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGVwdGhSZW5k
ZXJlclNjZW5lQ29tcG9uZW50OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlcHRo
UmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vZGVwdGhSZW5kZXJlciAqLyAiLi9SZW5kZXJpbmcvZGVwdGhSZW5kZXJlci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9u
ZW50LnRzIik7CisKKworCisKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJT
Y2VuZSJdLnByb3RvdHlwZS5lbmFibGVEZXB0aFJlbmRlcmVyID0gZnVuY3Rpb24gKGNhbWVyYSwg
c3RvcmVOb25MaW5lYXJEZXB0aCkgeworICAgIGlmIChzdG9yZU5vbkxpbmVhckRlcHRoID09PSB2
b2lkIDApIHsgc3RvcmVOb25MaW5lYXJEZXB0aCA9IGZhbHNlOyB9CisgICAgY2FtZXJhID0gY2Ft
ZXJhIHx8IHRoaXMuYWN0aXZlQ2FtZXJhOworICAgIGlmICghY2FtZXJhKSB7CisgICAgICAgIHRo
cm93ICJObyBjYW1lcmEgYXZhaWxhYmxlIHRvIGVuYWJsZSBkZXB0aCByZW5kZXJlciI7CisgICAg
fQorICAgIGlmICghdGhpcy5fZGVwdGhSZW5kZXJlcikgeworICAgICAgICB0aGlzLl9kZXB0aFJl
bmRlcmVyID0ge307CisgICAgfQorICAgIGlmICghdGhpcy5fZGVwdGhSZW5kZXJlcltjYW1lcmEu
aWRdKSB7CisgICAgICAgIHZhciB0ZXh0dXJlVHlwZSA9IDA7CisgICAgICAgIGlmICh0aGlzLmdl
dEVuZ2luZSgpLmdldENhcHMoKS50ZXh0dXJlSGFsZkZsb2F0UmVuZGVyKSB7CisgICAgICAgICAg
ICB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHRoaXMuZ2V0RW5naW5lKCkuZ2V0Q2FwcygpLnRleHR1cmVGbG9hdFJl
bmRlcikgeworICAgICAgICAgICAgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfRkxPQVQ7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0ZXh0dXJlVHlwZSA9IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMi
XS5URVhUVVJFVFlQRV9VTlNJR05FRF9CWVRFOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Rl
cHRoUmVuZGVyZXJbY2FtZXJhLmlkXSA9IG5ldyBfZGVwdGhSZW5kZXJlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJEZXB0aFJlbmRlcmVyIl0odGhpcywgdGV4dHVyZVR5cGUsIGNhbWVy
YSwgc3RvcmVOb25MaW5lYXJEZXB0aCk7CisgICAgfQorICAgIHJldHVybiB0aGlzLl9kZXB0aFJl
bmRlcmVyW2NhbWVyYS5pZF07Cit9OworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlNjZW5lIl0ucHJvdG90eXBlLmRpc2FibGVEZXB0aFJlbmRlcmVyID0gZnVuY3Rpb24gKGNh
bWVyYSkgeworICAgIGNhbWVyYSA9IGNhbWVyYSB8fCB0aGlzLmFjdGl2ZUNhbWVyYTsKKyAgICBp
ZiAoIWNhbWVyYSB8fCAhdGhpcy5fZGVwdGhSZW5kZXJlciB8fCAhdGhpcy5fZGVwdGhSZW5kZXJl
cltjYW1lcmEuaWRdKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGhpcy5fZGVwdGhS
ZW5kZXJlcltjYW1lcmEuaWRdLmRpc3Bvc2UoKTsKKyAgICBkZWxldGUgdGhpcy5fZGVwdGhSZW5k
ZXJlcltjYW1lcmEuaWRdOworfTsKKy8qKgorICogRGVmaW5lcyB0aGUgRGVwdGggUmVuZGVyZXIg
c2NlbmUgY29tcG9uZW50IHJlc3BvbnNpYmxlIHRvIG1hbmFnZSBhIGRlcHRoIGJ1ZmZlciB1c2Vm
dWwKKyAqIGluIHNldmVyYWwgcmVuZGVyaW5nIHRlY2huaXF1ZXMuCisgKi8KK3ZhciBEZXB0aFJl
bmRlcmVyU2NlbmVDb21wb25lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50IGZvciB0
aGUgZ2l2ZW4gc2NlbmUKKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lcyB0aGUgc2NlbmUgdG8g
cmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBpbgorICAgICAqLworICAgIGZ1bmN0aW9uIERlcHRoUmVu
ZGVyZXJTY2VuZUNvbXBvbmVudChzY2VuZSkgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhl
IGNvbXBvbmVudCBuYW1lIGhlbHBmdWxsIHRvIGlkZW50aWZ5IHRoZSBjb21wb25lbnQgaW4gdGhl
IGxpc3Qgb2Ygc2NlbmUgY29tcG9uZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubmFt
ZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZUNv
bXBvbmVudENvbnN0YW50cyJdLk5BTUVfREVQVEhSRU5ERVJFUjsKKyAgICAgICAgdGhpcy5zY2Vu
ZSA9IHNjZW5lOworICAgIH0KKyAgICAvKioKKyAgICAgKiBSZWdpc3RlcnMgdGhlIGNvbXBvbmVu
dCBpbiBhIGdpdmVuIHNjZW5lCisgICAgICovCisgICAgRGVwdGhSZW5kZXJlclNjZW5lQ29tcG9u
ZW50LnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2Vu
ZS5fZ2F0aGVyUmVuZGVyVGFyZ2V0c1N0YWdlLnJlZ2lzdGVyU3RlcChfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5T
VEVQX0dBVEhFUlJFTkRFUlRBUkdFVFNfREVQVEhSRU5ERVJFUiwgdGhpcywgdGhpcy5fZ2F0aGVy
UmVuZGVyVGFyZ2V0cyk7CisgICAgICAgIHRoaXMuc2NlbmUuX2dhdGhlckFjdGl2ZUNhbWVyYVJl
bmRlclRhcmdldHNTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9HQVRIRVJB
Q1RJVkVDQU1FUkFSRU5ERVJUQVJHRVRTX0RFUFRIUkVOREVSRVIsIHRoaXMsIHRoaXMuX2dhdGhl
ckFjdGl2ZUNhbWVyYVJlbmRlclRhcmdldHMpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVi
dWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4gY2FzZSBvZgor
ICAgICAqIGNvbnRleHQgbG9zdCBmb3IgaW5zdGFuY2UuCisgICAgICovCisgICAgRGVwdGhSZW5k
ZXJlclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICAvLyBOb3RoaW5nIHRvIGRvIGZvciB0aGlzIGNvbXBvbmVudAorICAgIH07CisgICAgLyoq
CisgICAgICogRGlzcG9zZXMgdGhlIGNvbXBvbmVudCBhbmQgdGhlIGFzc29jaWF0ZWQgcmVzc291
cmNlcworICAgICAqLworICAgIERlcHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUu
ZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuc2Nl
bmUuX2RlcHRoUmVuZGVyZXIpIHsKKyAgICAgICAgICAgIHRoaXMuc2NlbmUuX2RlcHRoUmVuZGVy
ZXJba2V5XS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIERlcHRoUmVuZGVyZXJT
Y2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX2dhdGhlclJlbmRlclRhcmdldHMgPSBmdW5jdGlvbiAo
cmVuZGVyVGFyZ2V0cykgeworICAgICAgICBpZiAodGhpcy5zY2VuZS5fZGVwdGhSZW5kZXJlcikg
eworICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuc2NlbmUuX2RlcHRoUmVuZGVyZXIp
IHsKKyAgICAgICAgICAgICAgICB2YXIgZGVwdGhSZW5kZXJlciA9IHRoaXMuc2NlbmUuX2RlcHRo
UmVuZGVyZXJba2V5XTsKKyAgICAgICAgICAgICAgICBpZiAoIWRlcHRoUmVuZGVyZXIudXNlT25s
eUluQWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldHMucHVz
aChkZXB0aFJlbmRlcmVyLmdldERlcHRoTWFwKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgRGVwdGhSZW5kZXJlclNjZW5lQ29tcG9u
ZW50LnByb3RvdHlwZS5fZ2F0aGVyQWN0aXZlQ2FtZXJhUmVuZGVyVGFyZ2V0cyA9IGZ1bmN0aW9u
IChyZW5kZXJUYXJnZXRzKSB7CisgICAgICAgIGlmICh0aGlzLnNjZW5lLl9kZXB0aFJlbmRlcmVy
KSB7CisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5zY2VuZS5fZGVwdGhSZW5kZXJl
cikgeworICAgICAgICAgICAgICAgIHZhciBkZXB0aFJlbmRlcmVyID0gdGhpcy5zY2VuZS5fZGVw
dGhSZW5kZXJlcltrZXldOworICAgICAgICAgICAgICAgIGlmIChkZXB0aFJlbmRlcmVyLnVzZU9u
bHlJbkFjdGl2ZUNhbWVyYSAmJiB0aGlzLnNjZW5lLmFjdGl2ZUNhbWVyYS5pZCA9PT0ga2V5KSB7
CisgICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldHMucHVzaChkZXB0aFJlbmRlcmVyLmdl
dERlcHRoTWFwKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgcmV0dXJuIERlcHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudDsKK30oKSk7
CisKK19kZXB0aFJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkRlcHRoUmVu
ZGVyZXIiXS5fU2NlbmVDb21wb25lbnRJbml0aWFsaXphdGlvbiA9IGZ1bmN0aW9uIChzY2VuZSkg
eworICAgIC8vIFJlZ2lzdGVyIHRoZSBHIEJ1ZmZlciBjb21wb25lbnQgdG8gdGhlIHNjZW5lLgor
ICAgIHZhciBjb21wb25lbnQgPSBzY2VuZS5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5B
TUVfREVQVEhSRU5ERVJFUik7CisgICAgaWYgKCFjb21wb25lbnQpIHsKKyAgICAgICAgY29tcG9u
ZW50ID0gbmV3IERlcHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudChzY2VuZSk7CisgICAgICAgIHNj
ZW5lLl9hZGRDb21wb25lbnQoY29tcG9uZW50KTsKKyAgICB9Cit9OworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9SZW5kZXJpbmcvZWRnZXNSZW5kZXJlci50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1JlbmRlcmluZy9lZGdlc1JlbmRl
cmVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBFZGdlc1JlbmRlcmVyLCBMaW5lRWRnZXNSZW5kZXJlciAqLwor
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFZGdlc1JlbmRlcmVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBFZGdlc1JlbmRlcmVyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxpbmVF
ZGdlc1JlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBMaW5lRWRnZXNSZW5kZXJlcjsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYWJzdHJhY3RNZXNo
ICovICIuL01lc2hlcy9hYnN0cmFjdE1lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWVzaGVzX2xpbmVzTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2xpbmVzTWVzaCAqLyAiLi9NZXNoZXMvbGluZXNN
ZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbCAq
LyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX3NoYWRlck1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc2hhZGVyTWF0ZXJpYWwgKi8gIi4v
TWF0ZXJpYWxzL3NoYWRlck1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL2NhbWVyYSAqLyAiLi9DYW1lcmFzL2NhbWVyYS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfU2hhZGVyc19saW5lX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2xpbmUuZnJhZ21lbnQgKi8g
Ii4vU2hhZGVycy9saW5lLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNfbGluZV92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2xpbmUudmVydGV4ICovICIuL1NoYWRlcnMv
bGluZS52ZXJ0ZXgudHMiKTsKKworCisKKworCisKKworCisKKworCitfTWVzaGVzX2Fic3RyYWN0
TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBYnN0cmFjdE1lc2giXS5wcm90b3R5
cGUuZGlzYWJsZUVkZ2VzUmVuZGVyaW5nID0gZnVuY3Rpb24gKCkgeworICAgIGlmICh0aGlzLl9l
ZGdlc1JlbmRlcmVyKSB7CisgICAgICAgIHRoaXMuX2VkZ2VzUmVuZGVyZXIuZGlzcG9zZSgpOwor
ICAgICAgICB0aGlzLl9lZGdlc1JlbmRlcmVyID0gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIHRo
aXM7Cit9OworX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQWJzdHJhY3RNZXNoIl0ucHJvdG90eXBlLmVuYWJsZUVkZ2VzUmVuZGVyaW5nID0gZnVuY3Rp
b24gKGVwc2lsb24sIGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2VzKSB7CisgICAgaWYgKGVw
c2lsb24gPT09IHZvaWQgMCkgeyBlcHNpbG9uID0gMC45NTsgfQorICAgIGlmIChjaGVja1ZlcnRp
Y2VzSW5zdGVhZE9mSW5kaWNlcyA9PT0gdm9pZCAwKSB7IGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJ
bmRpY2VzID0gZmFsc2U7IH0KKyAgICB0aGlzLmRpc2FibGVFZGdlc1JlbmRlcmluZygpOworICAg
IHRoaXMuX2VkZ2VzUmVuZGVyZXIgPSBuZXcgRWRnZXNSZW5kZXJlcih0aGlzLCBlcHNpbG9uLCBj
aGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcyk7CisgICAgcmV0dXJuIHRoaXM7Cit9OworT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkFic3RyYWN0TWVzaCJdLnByb3RvdHlwZSwgImVkZ2VzUmVuZGVyZXIiLCB7
CisgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9lZGdlc1JlbmRl
cmVyOworICAgIH0sCisgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRy
dWUKK30pOworX01lc2hlc19saW5lc01lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
TGluZXNNZXNoIl0ucHJvdG90eXBlLmVuYWJsZUVkZ2VzUmVuZGVyaW5nID0gZnVuY3Rpb24gKGVw
c2lsb24sIGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2VzKSB7CisgICAgaWYgKGVwc2lsb24g
PT09IHZvaWQgMCkgeyBlcHNpbG9uID0gMC45NTsgfQorICAgIGlmIChjaGVja1ZlcnRpY2VzSW5z
dGVhZE9mSW5kaWNlcyA9PT0gdm9pZCAwKSB7IGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2Vz
ID0gZmFsc2U7IH0KKyAgICB0aGlzLmRpc2FibGVFZGdlc1JlbmRlcmluZygpOworICAgIHRoaXMu
X2VkZ2VzUmVuZGVyZXIgPSBuZXcgTGluZUVkZ2VzUmVuZGVyZXIodGhpcywgZXBzaWxvbiwgY2hl
Y2tWZXJ0aWNlc0luc3RlYWRPZkluZGljZXMpOworICAgIHJldHVybiB0aGlzOworfTsKK19NZXNo
ZXNfbGluZXNNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkluc3RhbmNlZExpbmVz
TWVzaCJdLnByb3RvdHlwZS5lbmFibGVFZGdlc1JlbmRlcmluZyA9IGZ1bmN0aW9uIChlcHNpbG9u
LCBjaGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcykgeworICAgIGlmIChlcHNpbG9uID09PSB2
b2lkIDApIHsgZXBzaWxvbiA9IDAuOTU7IH0KKyAgICBpZiAoY2hlY2tWZXJ0aWNlc0luc3RlYWRP
ZkluZGljZXMgPT09IHZvaWQgMCkgeyBjaGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcyA9IGZh
bHNlOyB9CisgICAgX01lc2hlc19saW5lc01lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siTGluZXNNZXNoIl0ucHJvdG90eXBlLmVuYWJsZUVkZ2VzUmVuZGVyaW5nLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIHRoaXM7Cit9OworLyoqCisgKiBGYWNlQWRqYWNlbmNp
ZXMgSGVscGVyIGNsYXNzIHRvIGdlbmVyYXRlIGVkZ2VzCisgKi8KK3ZhciBGYWNlQWRqYWNlbmNp
ZXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRmFjZUFkamFj
ZW5jaWVzKCkgeworICAgICAgICB0aGlzLmVkZ2VzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRo
aXMuZWRnZXNDb25uZWN0ZWRDb3VudCA9IDA7CisgICAgfQorICAgIHJldHVybiBGYWNlQWRqYWNl
bmNpZXM7Cit9KCkpOworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgZWRn
ZXMgb2YgdGhlIG1lc2ggdGhhdCBjb3VsZCB0aGVuIGVhc2lseSBiZSByZW5kZXJlZCBpbiBhIHNj
ZW5lLgorICovCit2YXIgRWRnZXNSZW5kZXJlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgp
IHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBFZGdlc1JlbmRl
cmVyLiBJdCBpcyBwcmltYXJpbHkgdXNlIHRvIGRpc3BsYXkgZWRnZXMgb2YgYSBtZXNoLgorICAg
ICAqIEJld2FyZSB3aGVuIHlvdSB1c2UgdGhpcyBjbGFzcyB3aXRoIGNvbXBsZXggb2JqZWN0cyBh
cyB0aGUgYWRqYWNlbmNpZXMgY29tcHV0YXRpb24gY2FuIGJlIHJlYWxseSBsb25nCisgICAgICog
QHBhcmFtICBzb3VyY2UgTWVzaCB1c2VkIHRvIGNyZWF0ZSBlZGdlcworICAgICAqIEBwYXJhbSAg
ZXBzaWxvbiBzdW0gb2YgYW5nbGVzIGluIGFkamFjZW5jeSB0byBjaGVjayBmb3IgZWRnZQorICAg
ICAqIEBwYXJhbSAgY2hlY2tWZXJ0aWNlc0luc3RlYWRPZkluZGljZXMgYmFzZXMgdGhlIGVkZ2Vz
IGRldGVjdGlvbiBvbiB2ZXJ0aWNlcyB2cyBpbmRpY2VzCisgICAgICogQHBhcmFtICBnZW5lcmF0
ZUVkZ2VzTGluZXMgLSBzaG91bGQgZ2VuZXJhdGUgTGluZXMgb3Igb25seSBwcmVwYXJlIHJlc291
cmNlcy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBFZGdlc1JlbmRlcmVyKHNvdXJjZSwgZXBzaWxv
biwgY2hlY2tWZXJ0aWNlc0luc3RlYWRPZkluZGljZXMsIGdlbmVyYXRlRWRnZXNMaW5lcykgewor
ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoZXBzaWxvbiA9PT0gdm9pZCAw
KSB7IGVwc2lsb24gPSAwLjk1OyB9CisgICAgICAgIGlmIChjaGVja1ZlcnRpY2VzSW5zdGVhZE9m
SW5kaWNlcyA9PT0gdm9pZCAwKSB7IGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2VzID0gZmFs
c2U7IH0KKyAgICAgICAgaWYgKGdlbmVyYXRlRWRnZXNMaW5lcyA9PT0gdm9pZCAwKSB7IGdlbmVy
YXRlRWRnZXNMaW5lcyA9IHRydWU7IH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0
aGUgc2l6ZSBvZiB0aGUgZWRnZXMgd2l0aCBhbiBvcnRob2dyYXBoaWMgY2FtZXJhCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmVkZ2VzV2lkdGhTY2FsZXJGb3JPcnRob2dyYXBoaWMgPSAxMDAw
LjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIHNpemUgb2YgdGhlIGVkZ2Vz
IHdpdGggYSBwZXJzcGVjdGl2ZSBjYW1lcmEKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZWRn
ZXNXaWR0aFNjYWxlckZvclBlcnNwZWN0aXZlID0gNTAuMDsKKyAgICAgICAgdGhpcy5fbGluZXNQ
b3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fbGluZXNOb3JtYWxzID0gbmV3
IEFycmF5KCk7CisgICAgICAgIHRoaXMuX2xpbmVzSW5kaWNlcyA9IG5ldyBBcnJheSgpOworICAg
ICAgICB0aGlzLl9idWZmZXJzID0ge307CisgICAgICAgIHRoaXMuX2NoZWNrVmVydGljZXNJbnN0
ZWFkT2ZJbmRpY2VzID0gZmFsc2U7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFu
IGluZGljYXRpbmcgaWYgdGhlIGVkZ2VzUmVuZGVyZXIgaXMgYWN0aXZlICovCisgICAgICAgIHRo
aXMuaXNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc291cmNlID0gc291cmNlOworICAg
ICAgICB0aGlzLl9jaGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcyA9IGNoZWNrVmVydGljZXNJ
bnN0ZWFkT2ZJbmRpY2VzOworICAgICAgICB0aGlzLl9lcHNpbG9uID0gZXBzaWxvbjsKKyAgICAg
ICAgdGhpcy5fcHJlcGFyZVJlc3NvdXJjZXMoKTsKKyAgICAgICAgaWYgKGdlbmVyYXRlRWRnZXNM
aW5lcykgeworICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVFZGdlc0xpbmVzKCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fbWVzaFJlYnVpbGRPYnNlcnZlciA9IHRoaXMuX3NvdXJjZS5vblJl
YnVpbGRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5fcmVi
dWlsZCgpOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fbWVzaERpc3Bvc2VPYnNlcnZlciA9
IHRoaXMuX3NvdXJjZS5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICBfdGhpcy5kaXNwb3NlKCk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBFZGdlc1Jl
bmRlcmVyLnByb3RvdHlwZS5fcHJlcGFyZVJlc3NvdXJjZXMgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICh0aGlzLl9saW5lU2hhZGVyKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fbGluZVNoYWRlciA9IG5ldyBfTWF0ZXJpYWxzX3NoYWRlck1hdGVy
aWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNoYWRlck1hdGVyaWFsIl0oImxpbmVT
aGFkZXIiLCB0aGlzLl9zb3VyY2UuZ2V0U2NlbmUoKSwgImxpbmUiLCB7CisgICAgICAgICAgICBh
dHRyaWJ1dGVzOiBbInBvc2l0aW9uIiwgIm5vcm1hbCJdLAorICAgICAgICAgICAgdW5pZm9ybXM6
IFsid29ybGRWaWV3UHJvamVjdGlvbiIsICJjb2xvciIsICJ3aWR0aCIsICJhc3BlY3RSYXRpbyJd
CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9saW5lU2hhZGVyLmRpc2FibGVEZXB0aFdyaXRl
ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fbGluZVNoYWRlci5iYWNrRmFjZUN1bGxpbmcgPSBmYWxz
ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRWRnZXNSZW5kZXJlci5wcm90b3R5
cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9i
dWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAg
ICAgIGJ1ZmZlci5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgICAgIGJ1ZmZlciA9IHRoaXMu
X2J1ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVy
dGV4QnVmZmVyIl0uTm9ybWFsS2luZF07CisgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAg
ICAgIGJ1ZmZlci5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgICAgIHZhciBzY2VuZSA9IHRo
aXMuX3NvdXJjZS5nZXRTY2VuZSgpOworICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5n
aW5lKCk7CisgICAgICAgIHRoaXMuX2liID0gZW5naW5lLmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMu
X2xpbmVzSW5kaWNlcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlcyB0aGUgcmVx
dWlyZWQgcmVzb3VyY2VzIGZvciB0aGUgZWRnZXMgcmVuZGVyZXIKKyAgICAgKi8KKyAgICBFZGdl
c1JlbmRlcmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlz
Ll9zb3VyY2Uub25SZWJ1aWxkT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fbWVzaFJlYnVpbGRPYnNl
cnZlcik7CisgICAgICAgIHRoaXMuX3NvdXJjZS5vbkRpc3Bvc2VPYnNlcnZhYmxlLnJlbW92ZSh0
aGlzLl9tZXNoRGlzcG9zZU9ic2VydmVyKTsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX2J1
ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4
QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAg
ICAgYnVmZmVyLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRp
b25LaW5kXSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyID0gdGhpcy5fYnVmZmVy
c1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZm
ZXIiXS5Ob3JtYWxLaW5kXTsKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgYnVm
ZmVyLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZF0g
PSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pYikgeworICAgICAgICAgICAg
dGhpcy5fc291cmNlLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuX3JlbGVhc2VCdWZmZXIodGhpcy5f
aWIpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2xpbmVTaGFkZXIuZGlzcG9zZSgpOworICAg
IH07CisgICAgRWRnZXNSZW5kZXJlci5wcm90b3R5cGUuX3Byb2Nlc3NFZGdlRm9yQWRqYWNlbmNp
ZXMgPSBmdW5jdGlvbiAocGEsIHBiLCBwMCwgcDEsIHAyKSB7CisgICAgICAgIGlmIChwYSA9PT0g
cDAgJiYgcGIgPT09IHAxIHx8IHBhID09PSBwMSAmJiBwYiA9PT0gcDApIHsKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChwYSA9PT0gcDEgJiYgcGIgPT09IHAy
IHx8IHBhID09PSBwMiAmJiBwYiA9PT0gcDEpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICB9CisgICAgICAgIGlmIChwYSA9PT0gcDIgJiYgcGIgPT09IHAwIHx8IHBhID09PSBwMCAm
JiBwYiA9PT0gcDIpIHsKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICB9CisgICAgICAg
IHJldHVybiAtMTsKKyAgICB9OworICAgIEVkZ2VzUmVuZGVyZXIucHJvdG90eXBlLl9wcm9jZXNz
RWRnZUZvckFkamFjZW5jaWVzV2l0aFZlcnRpY2VzID0gZnVuY3Rpb24gKHBhLCBwYiwgcDAsIHAx
LCBwMikgeworICAgICAgICBpZiAocGEuZXF1YWxzV2l0aEVwc2lsb24ocDApICYmIHBiLmVxdWFs
c1dpdGhFcHNpbG9uKHAxKSB8fCBwYS5lcXVhbHNXaXRoRXBzaWxvbihwMSkgJiYgcGIuZXF1YWxz
V2l0aEVwc2lsb24ocDApKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocGEuZXF1YWxzV2l0aEVwc2lsb24ocDEpICYmIHBiLmVxdWFsc1dpdGhFcHNpbG9u
KHAyKSB8fCBwYS5lcXVhbHNXaXRoRXBzaWxvbihwMikgJiYgcGIuZXF1YWxzV2l0aEVwc2lsb24o
cDEpKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGEu
ZXF1YWxzV2l0aEVwc2lsb24ocDIpICYmIHBiLmVxdWFsc1dpdGhFcHNpbG9uKHAwKSB8fCBwYS5l
cXVhbHNXaXRoRXBzaWxvbihwMCkgJiYgcGIuZXF1YWxzV2l0aEVwc2lsb24ocDIpKSB7CisgICAg
ICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIHBhaXIgb2YgcDAgYW5kIHAxIGlzIGVuIGVk
Z2UKKyAgICAgKiBAcGFyYW0gZmFjZUluZGV4CisgICAgICogQHBhcmFtIGVkZ2UKKyAgICAgKiBA
cGFyYW0gZmFjZU5vcm1hbHMKKyAgICAgKiBAcGFyYW0gIHAwCisgICAgICogQHBhcmFtICBwMQor
ICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgRWRnZXNSZW5kZXJlci5wcm90b3R5cGUuX2No
ZWNrRWRnZSA9IGZ1bmN0aW9uIChmYWNlSW5kZXgsIGVkZ2UsIGZhY2VOb3JtYWxzLCBwMCwgcDEp
IHsKKyAgICAgICAgdmFyIG5lZWRUb0NyZWF0ZUxpbmU7CisgICAgICAgIGlmIChlZGdlID09PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgICAgIG5lZWRUb0NyZWF0ZUxpbmUgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGRvdFByb2R1Y3QgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdLkRvdChm
YWNlTm9ybWFsc1tmYWNlSW5kZXhdLCBmYWNlTm9ybWFsc1tlZGdlXSk7CisgICAgICAgICAgICBu
ZWVkVG9DcmVhdGVMaW5lID0gZG90UHJvZHVjdCA8IHRoaXMuX2Vwc2lsb247CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG5lZWRUb0NyZWF0ZUxpbmUpIHsKKyAgICAgICAgICAgIHRoaXMuY3JlYXRl
TGluZShwMCwgcDEsIHRoaXMuX2xpbmVzUG9zaXRpb25zLmxlbmd0aCAvIDMpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBwdXNoIGxpbmUgaW50byB0aGUgcG9zaXRpb24sIG5v
cm1hbCBhbmQgaW5kZXggYnVmZmVyCisgICAgICogQHByb3RlY3RlZAorICAgICAqLworICAgIEVk
Z2VzUmVuZGVyZXIucHJvdG90eXBlLmNyZWF0ZUxpbmUgPSBmdW5jdGlvbiAocDAsIHAxLCBvZmZz
ZXQpIHsKKyAgICAgICAgLy8gUG9zaXRpb25zCisgICAgICAgIHRoaXMuX2xpbmVzUG9zaXRpb25z
LnB1c2gocDAueCwgcDAueSwgcDAueiwgcDAueCwgcDAueSwgcDAueiwgcDEueCwgcDEueSwgcDEu
eiwgcDEueCwgcDEueSwgcDEueik7CisgICAgICAgIC8vIE5vcm1hbHMKKyAgICAgICAgdGhpcy5f
bGluZXNOb3JtYWxzLnB1c2gocDEueCwgcDEueSwgcDEueiwgLTEsIHAxLngsIHAxLnksIHAxLnos
IDEsIHAwLngsIHAwLnksIHAwLnosIC0xLCBwMC54LCBwMC55LCBwMC56LCAxKTsKKyAgICAgICAg
Ly8gSW5kaWNlcworICAgICAgICB0aGlzLl9saW5lc0luZGljZXMucHVzaChvZmZzZXQsIG9mZnNl
dCArIDEsIG9mZnNldCArIDIsIG9mZnNldCwgb2Zmc2V0ICsgMiwgb2Zmc2V0ICsgMyk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZXMgbGluZXMgZWRnZXMgZnJvbSBhZGphY2VuY2pl
cworICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgRWRnZXNSZW5kZXJlci5wcm90b3R5cGUu
X2dlbmVyYXRlRWRnZXNMaW5lcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHBvc2l0aW9u
cyA9IHRoaXMuX3NvdXJjZS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKTsKKyAgICAg
ICAgdmFyIGluZGljZXMgPSB0aGlzLl9zb3VyY2UuZ2V0SW5kaWNlcygpOworICAgICAgICBpZiAo
IWluZGljZXMgfHwgIXBvc2l0aW9ucykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIC8vIEZpcnN0IGxldCdzIGZpbmQgYWRqYWNlbmNpZXMKKyAgICAgICAgdmFyIGFk
amFjZW5jaWVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHZhciBmYWNlTm9ybWFscyA9IG5ldyBB
cnJheSgpOworICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIHZhciBmYWNlQWRqYWNlbmNpZXM7
CisgICAgICAgIC8vIFByZXBhcmUgZmFjZXMKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4
IDwgaW5kaWNlcy5sZW5ndGg7IGluZGV4ICs9IDMpIHsKKyAgICAgICAgICAgIGZhY2VBZGphY2Vu
Y2llcyA9IG5ldyBGYWNlQWRqYWNlbmNpZXMoKTsKKyAgICAgICAgICAgIHZhciBwMEluZGV4ID0g
aW5kaWNlc1tpbmRleF07CisgICAgICAgICAgICB2YXIgcDFJbmRleCA9IGluZGljZXNbaW5kZXgg
KyAxXTsKKyAgICAgICAgICAgIHZhciBwMkluZGV4ID0gaW5kaWNlc1tpbmRleCArIDJdOworICAg
ICAgICAgICAgZmFjZUFkamFjZW5jaWVzLnAwID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZWN0b3IzIl0ocG9zaXRpb25zW3AwSW5kZXggKiAz
XSwgcG9zaXRpb25zW3AwSW5kZXggKiAzICsgMV0sIHBvc2l0aW9uc1twMEluZGV4ICogMyArIDJd
KTsKKyAgICAgICAgICAgIGZhY2VBZGphY2VuY2llcy5wMSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdKHBvc2l0aW9uc1twMUlu
ZGV4ICogM10sIHBvc2l0aW9uc1twMUluZGV4ICogMyArIDFdLCBwb3NpdGlvbnNbcDFJbmRleCAq
IDMgKyAyXSk7CisgICAgICAgICAgICBmYWNlQWRqYWNlbmNpZXMucDIgPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3RvcjMiXShwb3NpdGlv
bnNbcDJJbmRleCAqIDNdLCBwb3NpdGlvbnNbcDJJbmRleCAqIDMgKyAxXSwgcG9zaXRpb25zW3Ay
SW5kZXggKiAzICsgMl0pOworICAgICAgICAgICAgdmFyIGZhY2VOb3JtYWwgPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdLkNyb3NzKGZh
Y2VBZGphY2VuY2llcy5wMS5zdWJ0cmFjdChmYWNlQWRqYWNlbmNpZXMucDApLCBmYWNlQWRqYWNl
bmNpZXMucDIuc3VidHJhY3QoZmFjZUFkamFjZW5jaWVzLnAxKSk7CisgICAgICAgICAgICBmYWNl
Tm9ybWFsLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgZmFjZU5vcm1hbHMucHVzaChmYWNlTm9y
bWFsKTsKKyAgICAgICAgICAgIGFkamFjZW5jaWVzLnB1c2goZmFjZUFkamFjZW5jaWVzKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBTY2FuCisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8
IGFkamFjZW5jaWVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgZmFjZUFkamFjZW5j
aWVzID0gYWRqYWNlbmNpZXNbaW5kZXhdOworICAgICAgICAgICAgZm9yICh2YXIgb3RoZXJJbmRl
eCA9IGluZGV4ICsgMTsgb3RoZXJJbmRleCA8IGFkamFjZW5jaWVzLmxlbmd0aDsgb3RoZXJJbmRl
eCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIG90aGVyRmFjZUFkamFjZW5jaWVzID0gYWRqYWNl
bmNpZXNbb3RoZXJJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGZhY2VBZGphY2VuY2llcy5l
ZGdlc0Nvbm5lY3RlZENvdW50ID09PSAzKSB7IC8vIEZ1bGwKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChvdGhlckZhY2VB
ZGphY2VuY2llcy5lZGdlc0Nvbm5lY3RlZENvdW50ID09PSAzKSB7IC8vIEZ1bGwKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHZhciBvdGhlclAwID0gaW5kaWNlc1tvdGhlckluZGV4ICogM107CisgICAgICAgICAgICAgICAg
dmFyIG90aGVyUDEgPSBpbmRpY2VzW290aGVySW5kZXggKiAzICsgMV07CisgICAgICAgICAgICAg
ICAgdmFyIG90aGVyUDIgPSBpbmRpY2VzW290aGVySW5kZXggKiAzICsgMl07CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgZWRnZUluZGV4ID0gMDsgZWRnZUluZGV4IDwgMzsgZWRnZUluZGV4Kysp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyRWRnZUluZGV4ID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGZhY2VBZGphY2VuY2llcy5lZGdlc1tlZGdlSW5kZXhdICE9PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZWRnZUluZGV4KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX2NoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2VzKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG90aGVyRWRnZUluZGV4ID0gdGhpcy5fcHJvY2Vzc0VkZ2VGb3JB
ZGphY2VuY2llc1dpdGhWZXJ0aWNlcyhmYWNlQWRqYWNlbmNpZXMucDAsIGZhY2VBZGphY2VuY2ll
cy5wMSwgb3RoZXJGYWNlQWRqYWNlbmNpZXMucDAsIG90aGVyRmFjZUFkamFjZW5jaWVzLnAxLCBv
dGhlckZhY2VBZGphY2VuY2llcy5wMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdGhlckVkZ2VJbmRleCA9IHRoaXMuX3Byb2Nlc3NFZGdlRm9yQWRqYWNlbmNp
ZXMoaW5kaWNlc1tpbmRleCAqIDNdLCBpbmRpY2VzW2luZGV4ICogMyArIDFdLCBvdGhlclAwLCBv
dGhlclAxLCBvdGhlclAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoZWNrVmVydGljZXNJ
bnN0ZWFkT2ZJbmRpY2VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVy
RWRnZUluZGV4ID0gdGhpcy5fcHJvY2Vzc0VkZ2VGb3JBZGphY2VuY2llc1dpdGhWZXJ0aWNlcyhm
YWNlQWRqYWNlbmNpZXMucDEsIGZhY2VBZGphY2VuY2llcy5wMiwgb3RoZXJGYWNlQWRqYWNlbmNp
ZXMucDAsIG90aGVyRmFjZUFkamFjZW5jaWVzLnAxLCBvdGhlckZhY2VBZGphY2VuY2llcy5wMik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlckVkZ2VJbmRl
eCA9IHRoaXMuX3Byb2Nlc3NFZGdlRm9yQWRqYWNlbmNpZXMoaW5kaWNlc1tpbmRleCAqIDMgKyAx
XSwgaW5kaWNlc1tpbmRleCAqIDMgKyAyXSwgb3RoZXJQMCwgb3RoZXJQMSwgb3RoZXJQMik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9jaGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlckVkZ2VJbmRleCA9IHRoaXMuX3By
b2Nlc3NFZGdlRm9yQWRqYWNlbmNpZXNXaXRoVmVydGljZXMoZmFjZUFkamFjZW5jaWVzLnAyLCBm
YWNlQWRqYWNlbmNpZXMucDAsIG90aGVyRmFjZUFkamFjZW5jaWVzLnAwLCBvdGhlckZhY2VBZGph
Y2VuY2llcy5wMSwgb3RoZXJGYWNlQWRqYWNlbmNpZXMucDIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJFZGdlSW5kZXggPSB0aGlzLl9wcm9jZXNzRWRn
ZUZvckFkamFjZW5jaWVzKGluZGljZXNbaW5kZXggKiAzICsgMl0sIGluZGljZXNbaW5kZXggKiAz
XSwgb3RoZXJQMCwgb3RoZXJQMSwgb3RoZXJQMik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlckVkZ2VJbmRleCA9PT0gLTEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGZhY2VBZGphY2VuY2llcy5lZGdlc1tlZGdlSW5kZXhdID0g
b3RoZXJJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgb3RoZXJGYWNlQWRqYWNlbmNpZXMuZWRn
ZXNbb3RoZXJFZGdlSW5kZXhdID0gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGZhY2VBZGph
Y2VuY2llcy5lZGdlc0Nvbm5lY3RlZENvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIG90aGVy
RmFjZUFkamFjZW5jaWVzLmVkZ2VzQ29ubmVjdGVkQ291bnQrKzsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGZhY2VBZGphY2VuY2llcy5lZGdlc0Nvbm5lY3RlZENvdW50ID09PSAzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBDcmVhdGUg
bGluZXMKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYWRqYWNlbmNpZXMubGVuZ3Ro
OyBpbmRleCsrKSB7CisgICAgICAgICAgICAvLyBXZSBuZWVkIGEgbGluZSB3aGVuIGEgZmFjZSBo
YXMgbm8gYWRqYWNlbmN5IG9uIGEgc3BlY2lmaWMgZWRnZSBvciBpZiBhbGwgdGhlIGFkamFjZW5j
aWVzIGhhcyBhbiBhbmdsZSBncmVhdGVyIHRoYW4gZXBzaWxvbgorICAgICAgICAgICAgdmFyIGN1
cnJlbnQgPSBhZGphY2VuY2llc1tpbmRleF07CisgICAgICAgICAgICB0aGlzLl9jaGVja0VkZ2Uo
aW5kZXgsIGN1cnJlbnQuZWRnZXNbMF0sIGZhY2VOb3JtYWxzLCBjdXJyZW50LnAwLCBjdXJyZW50
LnAxKTsKKyAgICAgICAgICAgIHRoaXMuX2NoZWNrRWRnZShpbmRleCwgY3VycmVudC5lZGdlc1sx
XSwgZmFjZU5vcm1hbHMsIGN1cnJlbnQucDEsIGN1cnJlbnQucDIpOworICAgICAgICAgICAgdGhp
cy5fY2hlY2tFZGdlKGluZGV4LCBjdXJyZW50LmVkZ2VzWzJdLCBmYWNlTm9ybWFscywgY3VycmVu
dC5wMiwgY3VycmVudC5wMCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTWVyZ2UgaW50byBhIHNp
bmdsZSBtZXNoCisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zb3VyY2UuZ2V0U2NlbmUoKS5n
ZXRFbmdpbmUoKTsKKyAgICAgICAgdGhpcy5fYnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdID0gbmV3
IF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZl
ciJdKGVuZ2luZSwgdGhpcy5fbGluZXNQb3NpdGlvbnMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgZmFsc2Up
OworICAgICAgICB0aGlzLl9idWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmRdID0gbmV3IF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdKGVuZ2luZSwg
dGhpcy5fbGluZXNOb3JtYWxzLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBmYWxzZSwgZmFsc2UsIDQpOworICAg
ICAgICB0aGlzLl9pYiA9IGVuZ2luZS5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLl9saW5lc0luZGlj
ZXMpOworICAgICAgICB0aGlzLl9pbmRpY2VzQ291bnQgPSB0aGlzLl9saW5lc0luZGljZXMubGVu
Z3RoOworICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2tzIHdldGhlciBvciBub3QgdGhlIGVk
Z2VzIHJlbmRlcmVyIGlzIHJlYWR5IHRvIHJlbmRlci4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYg
cmVhZHksIG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKi8KKyAgICBFZGdlc1JlbmRlcmVyLnByb3Rv
dHlwZS5pc1JlYWR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fbGluZVNo
YWRlci5pc1JlYWR5KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIHRoZSBlZGdl
cyBvZiB0aGUgYXR0YWNoZWQgbWVzaCwKKyAgICAgKi8KKyAgICBFZGdlc1JlbmRlcmVyLnByb3Rv
dHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3Nv
dXJjZS5nZXRTY2VuZSgpOworICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSgpIHx8ICFzY2VuZS5h
Y3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2
YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIHRoaXMuX2xpbmVTaGFkZXIu
X3ByZUJpbmQoKTsKKyAgICAgICAgaWYgKHRoaXMuX3NvdXJjZS5lZGdlc0NvbG9yLmEgIT09IDEp
IHsKKyAgICAgICAgICAgIGVuZ2luZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLkFMUEhBX0NPTUJJTkUpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW5naW5lLnNldEFscGhhTW9k
ZShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3Rh
bnRzIl0uQUxQSEFfRElTQUJMRSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVkJPcworICAgICAg
ICBlbmdpbmUuYmluZEJ1ZmZlcnModGhpcy5fYnVmZmVycywgdGhpcy5faWIsIHRoaXMuX2xpbmVT
aGFkZXIuZ2V0RWZmZWN0KCkpOworICAgICAgICBzY2VuZS5yZXNldENhY2hlZE1hdGVyaWFsKCk7
CisgICAgICAgIHRoaXMuX2xpbmVTaGFkZXIuc2V0Q29sb3I0KCJjb2xvciIsIHRoaXMuX3NvdXJj
ZS5lZGdlc0NvbG9yKTsKKyAgICAgICAgaWYgKHNjZW5lLmFjdGl2ZUNhbWVyYS5tb2RlID09PSBf
Q2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ2FtZXJhIl0uT1JU
SE9HUkFQSElDX0NBTUVSQSkgeworICAgICAgICAgICAgdGhpcy5fbGluZVNoYWRlci5zZXRGbG9h
dCgid2lkdGgiLCB0aGlzLl9zb3VyY2UuZWRnZXNXaWR0aCAvIHRoaXMuZWRnZXNXaWR0aFNjYWxl
ckZvck9ydGhvZ3JhcGhpYyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICB0aGlzLl9saW5lU2hhZGVyLnNldEZsb2F0KCJ3aWR0aCIsIHRoaXMuX3NvdXJjZS5lZGdlc1dp
ZHRoIC8gdGhpcy5lZGdlc1dpZHRoU2NhbGVyRm9yUGVyc3BlY3RpdmUpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2xpbmVTaGFkZXIuc2V0RmxvYXQoImFzcGVjdFJhdGlvIiwgZW5naW5lLmdl
dEFzcGVjdFJhdGlvKHNjZW5lLmFjdGl2ZUNhbWVyYSkpOworICAgICAgICB0aGlzLl9saW5lU2hh
ZGVyLmJpbmQodGhpcy5fc291cmNlLmdldFdvcmxkTWF0cml4KCkpOworICAgICAgICAvLyBEcmF3
IG9yZGVyCisgICAgICAgIGVuZ2luZS5kcmF3RWxlbWVudHNUeXBlKF9NYXRlcmlhbHNfbWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWwiXS5UcmlhbmdsZUZpbGxN
b2RlLCAwLCB0aGlzLl9pbmRpY2VzQ291bnQpOworICAgICAgICB0aGlzLl9saW5lU2hhZGVyLnVu
YmluZCgpOworICAgIH07CisgICAgcmV0dXJuIEVkZ2VzUmVuZGVyZXI7Cit9KCkpOworCisvKioK
KyAqIExpbmVFZGdlc1JlbmRlcmVyIGZvciBMaW5lTWVzaGVzIHRvIHJlbW92ZSB1bm5lY2Vzc2Fy
eSB0cmlhbmd1bGF0aW9uCisgKi8KK3ZhciBMaW5lRWRnZXNSZW5kZXJlciA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2V4dGVuZHMiXShMaW5lRWRnZXNSZW5kZXJlciwgX3N1cGVyKTsKKyAgICAvKioK
KyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIHR1cm5zIG9mZiBhdXRvIGdlbmVyYXRpbmcgZWRnZXMg
bGluZSBpbiBFZGdlcyBSZW5kZXJlciB0byBtYWtlIGl0IGhlcmUuCisgICAgICogQHBhcmFtICBz
b3VyY2UgTGluZU1lc2ggdXNlZCB0byBnZW5lcmF0ZSBlZGdlcworICAgICAqIEBwYXJhbSAgZXBz
aWxvbiBub3QgaW1wb3J0YW50IChzcGVjaWZpZWQgYW5nbGUgZm9yIGVkZ2UgZGV0ZWN0aW9uKQor
ICAgICAqIEBwYXJhbSAgY2hlY2tWZXJ0aWNlc0luc3RlYWRPZkluZGljZXMgbm90IGltcG9ydGFu
dCBmb3IgTGluZU1lc2gKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBMaW5lRWRnZXNSZW5kZXJlcihz
b3VyY2UsIGVwc2lsb24sIGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2VzKSB7CisgICAgICAg
IGlmIChlcHNpbG9uID09PSB2b2lkIDApIHsgZXBzaWxvbiA9IDAuOTU7IH0KKyAgICAgICAgaWYg
KGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2VzID09PSB2b2lkIDApIHsgY2hlY2tWZXJ0aWNl
c0luc3RlYWRPZkluZGljZXMgPSBmYWxzZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIu
Y2FsbCh0aGlzLCBzb3VyY2UsIGVwc2lsb24sIGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2Vz
LCBmYWxzZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuX2dlbmVyYXRlRWRnZXNMaW5lcygpOwor
ICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdlbmVyYXRlIGVk
Z2VzIGZvciBlYWNoIGxpbmUgaW4gTGluZXNNZXNoLiBFdmVyeSBMaW5lIHNob3VsZCBiZSByZW5k
ZXJlZCBhcyBlZGdlLgorICAgICAqLworICAgIExpbmVFZGdlc1JlbmRlcmVyLnByb3RvdHlwZS5f
Z2VuZXJhdGVFZGdlc0xpbmVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcG9zaXRpb25z
ID0gdGhpcy5fc291cmNlLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpOworICAgICAg
ICB2YXIgaW5kaWNlcyA9IHRoaXMuX3NvdXJjZS5nZXRJbmRpY2VzKCk7CisgICAgICAgIGlmICgh
aW5kaWNlcyB8fCAhcG9zaXRpb25zKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdmFyIHAwID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdOworICAgICAgICB2YXIgcDEgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVG1wVmVjdG9ycyJd
LlZlY3RvcjNbMV07CisgICAgICAgIHZhciBsZW4gPSBpbmRpY2VzLmxlbmd0aCAtIDE7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBvZmZzZXQgPSAwOyBpIDwgbGVuOyBpICs9IDIsIG9mZnNldCAr
PSA0KSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKHBvc2l0aW9ucywgMyAqIGluZGlj
ZXNbaV0sIHAwKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYocG9zaXRpb25zLCAzICog
aW5kaWNlc1tpICsgMV0sIHAxKTsKKyAgICAgICAgICAgIHRoaXMuY3JlYXRlTGluZShwMCwgcDEs
IG9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTWVyZ2UgaW50byBhIHNpbmdsZSBtZXNo
CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zb3VyY2UuZ2V0U2NlbmUoKS5nZXRFbmdpbmUo
KTsKKyAgICAgICAgdGhpcy5fYnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdID0gbmV3IF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdKGVuZ2lu
ZSwgdGhpcy5fbGluZXNQb3NpdGlvbnMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgZmFsc2UpOworICAgICAg
ICB0aGlzLl9idWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmRdID0gbmV3IF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdKGVuZ2luZSwgdGhpcy5fbGlu
ZXNOb3JtYWxzLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJW
ZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBmYWxzZSwgZmFsc2UsIDQpOworICAgICAgICB0aGlz
Ll9pYiA9IGVuZ2luZS5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLl9saW5lc0luZGljZXMpOworICAg
ICAgICB0aGlzLl9pbmRpY2VzQ291bnQgPSB0aGlzLl9saW5lc0luZGljZXMubGVuZ3RoOworICAg
IH07CisgICAgcmV0dXJuIExpbmVFZGdlc1JlbmRlcmVyOworfShFZGdlc1JlbmRlcmVyKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUmVuZGVyaW5nL2dlb21ldHJ5QnVmZmVyUmVuZGVy
ZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9SZW5kZXJpbmcvZ2VvbWV0cnlCdWZmZXJSZW5kZXJlci50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogR2VvbWV0cnlCdWZmZXJSZW5kZXJlciAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21h
dGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5n
aW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVy
aWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19UZXh0dXJlc19tdWx0aVJlbmRlclRhcmdldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL211
bHRpUmVuZGVyVGFyZ2V0ICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9tdWx0aVJlbmRlclRhcmdl
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGVyaWFscy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvbWF0
ZXJpYWxIZWxwZXIgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfZ2VvbWV0cnlfZnJhZ21lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZ2Vv
bWV0cnkuZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9nZW9tZXRyeS5mcmFnbWVudC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2dlb21ldHJ5X3ZlcnRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9n
ZW9tZXRyeS52ZXJ0ZXggKi8gIi4vU2hhZGVycy9nZW9tZXRyeS52ZXJ0ZXgudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZXZUb29scyAqLyAiLi9N
aXNjL2RldlRvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhf
Y29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKwor
CisKKworCisKKworCisKKworCisvKioKKyAqIFRoaXMgcmVuZGVyZXIgaXMgaGVscGZ1bGwgdG8g
ZmlsbCBvbmUgb2YgdGhlIHJlbmRlciB0YXJnZXQgd2l0aCBhIGdlb21ldHJ5IGJ1ZmZlci4KKyAq
LwordmFyIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBHIEJ1ZmZlciBmb3IgdGhlIHNjZW5l
CisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0aGUgYnVmZmVyIGJlbG9uZ3MgdG8KKyAg
ICAgKiBAcGFyYW0gcmF0aW8gSG93IGJpZyBpcyB0aGUgYnVmZmVyIHJlbGF0ZWQgdG8gdGhlIG1h
aW4gY2FudmFzLgorICAgICAqLworICAgIGZ1bmN0aW9uIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXIo
c2NlbmUsIHJhdGlvKSB7CisgICAgICAgIGlmIChyYXRpbyA9PT0gdm9pZCAwKSB7IHJhdGlvID0g
MTsgfQorICAgICAgICAvKioKKyAgICAgICAgICogRGljdGlvbmFyeSB1c2VkIHRvIHN0b3JlIHRo
ZSBwcmV2aW91cyB0cmFuc2Zvcm1hdGlvbiBtYXRyaWNlcyBvZiBlYWNoIHJlbmRlcmVkIG1lc2gK
KyAgICAgICAgICogaW4gb3JkZXIgdG8gY29tcHV0ZSBvYmplY3RzIHZlbG9jaXRpZXMgd2hlbiBl
bmFibGVWZWxvY2l0eSBpcyBzZXQgdG8gInRydWUiCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuX3ByZXZpb3VzVHJhbnNmb3JtYXRpb25NYXRyaWNlcyA9IHt9
OworICAgICAgICAvKioKKyAgICAgICAgICogRGljdGlvbmFyeSB1c2VkIHRvIHN0b3JlIHRoZSBw
cmV2aW91cyBib25lcyB0cmFuc2Zvcm1hdGlvbiBtYXRyaWNlcyBvZiBlYWNoIHJlbmRlcmVkIG1l
c2gKKyAgICAgICAgICogaW4gb3JkZXIgdG8gY29tcHV0ZSBvYmplY3RzIHZlbG9jaXRpZXMgd2hl
biBlbmFibGVWZWxvY2l0eSBpcyBzZXQgdG8gInRydWUiCisgICAgICAgICAqIEBoaWRkZW4KKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuX3ByZXZpb3VzQm9uZXNUcmFuc2Zvcm1hdGlvbk1hdHJp
Y2VzID0ge307CisgICAgICAgIC8qKgorICAgICAgICAgKiBBcnJheSB1c2VkIHRvIHN0b3JlIHRo
ZSBpZ25vcmVkIHNraW5uZWQgbWVzaGVzIHdoaWxlIGNvbXB1dGluZyB2ZWxvY2l0eSBtYXAgKHR5
cGljYWxseSB1c2VkIGJ5IHRoZSBtb3Rpb24gYmx1ciBwb3N0LXByb2Nlc3MpLgorICAgICAgICAg
KiBBdm9pZHMgY29tcHV0aW5nIGJvbmVzIHZlbG9jaXRpZXMgYW5kIGNvbXB1dGVzIG9ubHkgbWVz
aCdzIHZlbG9jaXR5IGl0c2VsZiAocG9zaXRpb24sIHJvdGF0aW9uLCBzY2FsaW5nKS4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuZXhjbHVkZWRTa2lubmVkTWVzaGVzRnJvbVZlbG9jaXR5ID0g
W107CisgICAgICAgIHRoaXMuX2VuYWJsZVBvc2l0aW9uID0gZmFsc2U7CisgICAgICAgIHRoaXMu
X2VuYWJsZVZlbG9jaXR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3Bvc2l0aW9uSW5kZXggPSAt
MTsKKyAgICAgICAgdGhpcy5fdmVsb2NpdHlJbmRleCA9IC0xOworICAgICAgICB0aGlzLl9zY2Vu
ZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9yYXRpbyA9IHJhdGlvOworICAgICAgICBHZW9tZXRy
eUJ1ZmZlclJlbmRlcmVyLl9TY2VuZUNvbXBvbmVudEluaXRpYWxpemF0aW9uKHRoaXMuX3NjZW5l
KTsKKyAgICAgICAgLy8gUmVuZGVyIHRhcmdldAorICAgICAgICB0aGlzLl9jcmVhdGVSZW5kZXJU
YXJnZXRzKCk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeUJ1ZmZl
clJlbmRlcmVyLnByb3RvdHlwZSwgInJlbmRlckxpc3QiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBTZXQgdGhlIHJlbmRlciBsaXN0IChtZXNoZXMgdG8gYmUgcmVuZGVyZWQpIHVzZWQgaW4g
dGhlIEcgYnVmZmVyLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAobWVzaGVz
KSB7CisgICAgICAgICAgICB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC5yZW5kZXJMaXN0ID0gbWVz
aGVzOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0
cnlCdWZmZXJSZW5kZXJlci5wcm90b3R5cGUsICJpc1N1cHBvcnRlZCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgd2V0aGVyIG9yIG5vdCBHIGJ1ZmZlciBhcmUgc3VwcG9ydGVkIGJ5
IHRoZSBydW5uaW5nIGhhcmR3YXJlLgorICAgICAgICAgKiBUaGlzIHJlcXVpcmVzIGRyYXcgYnVm
ZmVyIHN1cHBvcnRzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC5pc1N1cHBvcnRlZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhl
IGdpdmVuIHRleHR1cmUgdHlwZSBpbiB0aGUgRy1CdWZmZXIgdGV4dHVyZXMgYXJyYXkKKyAgICAg
KiBAcGFyYW0gdGV4dHVyZVR5cGUgVGhlIHRleHR1cmUgdHlwZSBjb25zdGFudC4gRm9yIGV4YW1w
bGUgR2VvbWV0cnlCdWZmZXJSZW5kZXJlci5QT1NJVElPTl9URVhUVVJFX0lOREVYCisgICAgICog
QHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiB0ZXh0dXJlIHR5cGUgaW4gdGhlIEctQnVm
ZmVyIHRleHR1cmVzIGFycmF5CisgICAgICovCisgICAgR2VvbWV0cnlCdWZmZXJSZW5kZXJlci5w
cm90b3R5cGUuZ2V0VGV4dHVyZUluZGV4ID0gZnVuY3Rpb24gKHRleHR1cmVUeXBlKSB7CisgICAg
ICAgIHN3aXRjaCAodGV4dHVyZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgR2VvbWV0cnlCdWZm
ZXJSZW5kZXJlci5QT1NJVElPTl9URVhUVVJFX1RZUEU6IHJldHVybiB0aGlzLl9wb3NpdGlvbklu
ZGV4OworICAgICAgICAgICAgY2FzZSBHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLlZFTE9DSVRZX1RF
WFRVUkVfVFlQRTogcmV0dXJuIHRoaXMuX3ZlbG9jaXR5SW5kZXg7CisgICAgICAgICAgICBkZWZh
dWx0OiByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLnByb3RvdHlwZSwgImVuYWJsZVBvc2l0aW9uIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBv
YmplY3RzIHBvc2l0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhlIEcgYnVmZmVyLgorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
ZW5hYmxlUG9zaXRpb247CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRz
IHdoZXRoZXIgb3Igbm90IG9iamVjdHMgcG9zaXRpb25zIGFyZSBlbmFibGVkIGZvciB0aGUgRyBi
dWZmZXIuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmFibGUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2VuYWJsZVBvc2l0aW9uID0gZW5hYmxlOworICAgICAgICAgICAgdGhp
cy5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9jcmVhdGVSZW5kZXJUYXJnZXRzKCk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeUJ1ZmZl
clJlbmRlcmVyLnByb3RvdHlwZSwgImVuYWJsZVZlbG9jaXR5IiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBvYmplY3RzIHZlbG9jaXRpZXMg
YXJlIGVuYWJsZWQgZm9yIHRoZSBHIGJ1ZmZlci4KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZVZlbG9jaXR5Owor
ICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3ZXRoZXIgb3Igbm90IG9i
amVjdHMgdmVsb2NpdGllcyBhcmUgZW5hYmxlZCBmb3IgdGhlIEcgYnVmZmVyLgorICAgICAgICAg
Ki8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5hYmxlKSB7CisgICAgICAgICAgICB0aGlzLl9l
bmFibGVWZWxvY2l0eSA9IGVuYWJsZTsKKyAgICAgICAgICAgIGlmICghZW5hYmxlKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzID0ge307Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRo
aXMuX2NyZWF0ZVJlbmRlclRhcmdldHMoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEdlb21ldHJ5QnVmZmVyUmVuZGVyZXIucHJvdG90eXBlLCAic2NlbmUi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBzY2VuZSBhc3NvY2lhdGVkIHdp
dGggdGhlIGJ1ZmZlci4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0cnlCdWZmZXJSZW5kZXJlci5wcm90b3R5cGUsICJy
YXRpbyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHJhdGlvIHVzZWQgYnkg
dGhlIGJ1ZmZlciBkdXJpbmcgaXRzIGNyZWF0aW9uLgorICAgICAgICAgKiBIb3cgYmlnIGlzIHRo
ZSBidWZmZXIgcmVsYXRlZCB0byB0aGUgbWFpbiBjYW52YXMuCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yYXRpbzsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQ2hlY2tzIHdldGhlciBldmVyeXRoaW5n
IGlzIHJlYWR5IHRvIHJlbmRlciBhIHN1Ym1lc2ggdG8gdGhlIEcgYnVmZmVyLgorICAgICAqIEBw
YXJhbSBzdWJNZXNoIHRoZSBzdWJtZXNoIHRvIGNoZWNrIHJlYWRpbmVzcyBmb3IKKyAgICAgKiBA
cGFyYW0gdXNlSW5zdGFuY2VzIGlzIHRoZSBtZXNoIGRyYXduIHVzaW5nIGluc3RhbmNlIG9yIG5v
dAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgcmVhZHkgb3RoZXJ3aXNlIGZhbHNlCisgICAgICov
CisgICAgR2VvbWV0cnlCdWZmZXJSZW5kZXJlci5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9u
IChzdWJNZXNoLCB1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgdmFyIG1hdGVyaWFsID0gc3ViTWVz
aC5nZXRNYXRlcmlhbCgpOworICAgICAgICBpZiAobWF0ZXJpYWwgJiYgbWF0ZXJpYWwuZGlzYWJs
ZURlcHRoV3JpdGUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgZGVmaW5lcyA9IFtdOworICAgICAgICB2YXIgYXR0cmlicyA9IFtfTWVzaGVzX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlv
bktpbmQsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLk5vcm1hbEtpbmRdOworICAgICAgICB2YXIgbWVzaCA9IHN1Yk1lc2guZ2V0TWVz
aCgpOworICAgICAgICAvLyBBbHBoYSB0ZXN0CisgICAgICAgIGlmIChtYXRlcmlhbCAmJiBtYXRl
cmlhbC5uZWVkQWxwaGFUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2Rl
ZmluZSBBTFBIQVRFU1QiKTsKKyAgICAgICAgICAgIGlmIChtZXNoLmlzVmVydGljZXNEYXRhUHJl
c2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhC
dWZmZXIiXS5VVktpbmQpKSB7CisgICAgICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWS2lu
ZCk7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIFVWMSIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKG1lc2guaXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9NZXNo
ZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVW
MktpbmQpKSB7CisgICAgICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWMktpbmQpOworICAg
ICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBVVjIiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAvLyBCdWZmZXJzCisgICAgICAgIGlmICh0aGlzLl9lbmFibGVQ
b3NpdGlvbikgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIFBPU0lUSU9OIik7
CisgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgUE9TSVRJT05fSU5ERVggIiArIHRo
aXMuX3Bvc2l0aW9uSW5kZXgpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9lbmFibGVW
ZWxvY2l0eSkgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIFZFTE9DSVRZIik7
CisgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgVkVMT0NJVFlfSU5ERVggIiArIHRo
aXMuX3ZlbG9jaXR5SW5kZXgpOworICAgICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZWRTa2lubmVk
TWVzaGVzRnJvbVZlbG9jaXR5LmluZGV4T2YobWVzaCkgPT09IC0xKSB7CisgICAgICAgICAgICAg
ICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEJPTkVTX1ZFTE9DSVRZX0VOQUJMRUQiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBCb25lcworICAgICAgICBpZiAobWVzaC51
c2VCb25lcyAmJiBtZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycykgeworICAgICAgICAgICAg
YXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0tpbmQpOworICAgICAgICAgICAgYXR0cmli
cy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpOworICAgICAgICAgICAgaWYgKG1lc2gubnVt
Qm9uZUluZmx1ZW5jZXJzID4gNCkgeworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVzaChfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5N
YXRyaWNlc0luZGljZXNFeHRyYUtpbmQpOworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVzaChf
TWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIi
XS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGVmaW5lcy5wdXNoKCIjZGVmaW5lIE5VTV9CT05FX0lORkxVRU5DRVJTICIgKyBtZXNoLm51bUJv
bmVJbmZsdWVuY2Vycyk7CisgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgQm9uZXNQ
ZXJNZXNoICIgKyAobWVzaC5za2VsZXRvbiA/IG1lc2guc2tlbGV0b24uYm9uZXMubGVuZ3RoICsg
MSA6IDApKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlZmluZXMu
cHVzaCgiI2RlZmluZSBOVU1fQk9ORV9JTkZMVUVOQ0VSUyAwIik7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gTW9ycGggdGFyZ2V0cworICAgICAgICB2YXIgbW9ycGhUYXJnZXRNYW5hZ2VyID0gbWVz
aC5tb3JwaFRhcmdldE1hbmFnZXI7CisgICAgICAgIHZhciBudW1Nb3JwaEluZmx1ZW5jZXJzID0g
MDsKKyAgICAgICAgaWYgKG1vcnBoVGFyZ2V0TWFuYWdlcikgeworICAgICAgICAgICAgaWYgKG1v
cnBoVGFyZ2V0TWFuYWdlci5udW1JbmZsdWVuY2VycyA+IDApIHsKKyAgICAgICAgICAgICAgICBu
dW1Nb3JwaEluZmx1ZW5jZXJzID0gbW9ycGhUYXJnZXRNYW5hZ2VyLm51bUluZmx1ZW5jZXJzOwor
ICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBNT1JQSFRBUkdFVFMiKTsKKyAg
ICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgTlVNX01PUlBIX0lORkxVRU5DRVJT
ICIgKyBudW1Nb3JwaEluZmx1ZW5jZXJzKTsKKyAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21h
dGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIk1hdGVyaWFsSGVscGVy
Il0uUHJlcGFyZUF0dHJpYnV0ZXNGb3JNb3JwaFRhcmdldHNJbmZsdWVuY2VycyhhdHRyaWJzLCBt
ZXNoLCBudW1Nb3JwaEluZmx1ZW5jZXJzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAvLyBJbnN0YW5jZXMKKyAgICAgICAgaWYgKHVzZUluc3RhbmNlcykgeworICAgICAgICAg
ICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIElOU1RBTkNFUyIpOworICAgICAgICAgICAgX01hdGVy
aWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJNYXRlcmlh
bEhlbHBlciJdLlB1c2hBdHRyaWJ1dGVzRm9ySW5zdGFuY2VzKGF0dHJpYnMpOworICAgICAgICB9
CisgICAgICAgIC8vIFNldHVwIHRleHR1cmVzIGNvdW50CisgICAgICAgIGRlZmluZXMucHVzaCgi
I2RlZmluZSBSRU5ERVJfVEFSR0VUX0NPVU5UICIgKyB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC50
ZXh0dXJlcy5sZW5ndGgpOworICAgICAgICAvLyBHZXQgY29ycmVjdCBlZmZlY3QKKyAgICAgICAg
dmFyIGpvaW4gPSBkZWZpbmVzLmpvaW4oIlxuIik7CisgICAgICAgIGlmICh0aGlzLl9jYWNoZWRE
ZWZpbmVzICE9PSBqb2luKSB7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWREZWZpbmVzID0gam9p
bjsKKyAgICAgICAgICAgIHRoaXMuX2VmZmVjdCA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmNy
ZWF0ZUVmZmVjdCgiZ2VvbWV0cnkiLCBhdHRyaWJzLCBbIndvcmxkIiwgIm1Cb25lcyIsICJ2aWV3
UHJvamVjdGlvbiIsICJkaWZmdXNlTWF0cml4IiwgInZpZXciLCAicHJldmlvdXNXb3JsZCIsICJw
cmV2aW91c1ZpZXdQcm9qZWN0aW9uIiwgIm1QcmV2aW91c0JvbmVzIiwgIm1vcnBoVGFyZ2V0SW5m
bHVlbmNlcyJdLCBbImRpZmZ1c2VTYW1wbGVyIl0sIGpvaW4sIHVuZGVmaW5lZCwgdW5kZWZpbmVk
LCB1bmRlZmluZWQsIHsgYnVmZmVyc0NvdW50OiB0aGlzLl9lbmFibGVQb3NpdGlvbiA/IDMgOiAy
LCBtYXhTaW11bHRhbmVvdXNNb3JwaFRhcmdldHM6IG51bU1vcnBoSW5mbHVlbmNlcnMgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2VmZmVjdC5pc1JlYWR5KCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHVuZGVybHlpbmcgRyBCdWZmZXIuCisg
ICAgICogQHJldHVybnMgdGhlIGJ1ZmZlcgorICAgICAqLworICAgIEdlb21ldHJ5QnVmZmVyUmVu
ZGVyZXIucHJvdG90eXBlLmdldEdCdWZmZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biB0aGlzLl9tdWx0aVJlbmRlclRhcmdldDsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLnByb3RvdHlwZSwgInNhbXBsZXMiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB1c2VkIHRvIHJl
bmRlciB0aGUgYnVmZmVyIChhbnRpIGFsaWFzaW5nKS4KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX211bHRpUmVuZGVyVGFy
Z2V0LnNhbXBsZXM7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRo
ZSBudW1iZXIgb2Ygc2FtcGxlcyB1c2VkIHRvIHJlbmRlciB0aGUgYnVmZmVyIChhbnRpIGFsaWFz
aW5nKS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC5zYW1wbGVzID0gdmFsdWU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSByZW5kZXJlciBhbmQgZnJl
ZXMgdXAgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgICAgICovCisgICAgR2VvbWV0cnlCdWZmZXJS
ZW5kZXJlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5n
ZXRHQnVmZmVyKCkuZGlzcG9zZSgpOworICAgIH07CisgICAgR2VvbWV0cnlCdWZmZXJSZW5kZXJl
ci5wcm90b3R5cGUuX2NyZWF0ZVJlbmRlclRhcmdldHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRF
bmdpbmUoKTsKKyAgICAgICAgdmFyIGNvdW50ID0gMjsKKyAgICAgICAgaWYgKHRoaXMuX2VuYWJs
ZVBvc2l0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl9wb3NpdGlvbkluZGV4ID0gY291bnQ7Cisg
ICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9lbmFibGVW
ZWxvY2l0eSkgeworICAgICAgICAgICAgdGhpcy5fdmVsb2NpdHlJbmRleCA9IGNvdW50OworICAg
ICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9tdWx0aVJlbmRlclRh
cmdldCA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX211bHRpUmVuZGVyVGFyZ2V0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIk11bHRpUmVuZGVyVGFyZ2V0Il0oImdCdWZmZXIiLCB7IHdp
ZHRoOiBlbmdpbmUuZ2V0UmVuZGVyV2lkdGgoKSAqIHRoaXMuX3JhdGlvLCBoZWlnaHQ6IGVuZ2lu
ZS5nZXRSZW5kZXJIZWlnaHQoKSAqIHRoaXMuX3JhdGlvIH0sIGNvdW50LCB0aGlzLl9zY2VuZSwg
eyBnZW5lcmF0ZU1pcE1hcHM6IGZhbHNlLCBnZW5lcmF0ZURlcHRoVGV4dHVyZTogdHJ1ZSwgZGVm
YXVsdFR5cGU6IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9BVCB9KTsKKyAgICAgICAgaWYgKCF0aGlzLmlz
U3VwcG9ydGVkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fbXVsdGlSZW5kZXJUYXJnZXQud3JhcFUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RF
OworICAgICAgICB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC53cmFwViA9IF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUZXh0dXJlIl0uQ0xB
TVBfQUREUkVTU01PREU7CisgICAgICAgIHRoaXMuX211bHRpUmVuZGVyVGFyZ2V0LnJlZnJlc2hS
YXRlID0gMTsKKyAgICAgICAgdGhpcy5fbXVsdGlSZW5kZXJUYXJnZXQucmVuZGVyUGFydGljbGVz
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX211bHRpUmVuZGVyVGFyZ2V0LnJlbmRlckxpc3QgPSBu
dWxsOworICAgICAgICAvLyBzZXQgZGVmYXVsdCBkZXB0aCB2YWx1ZSB0byAxLjAgKGZhciBhd2F5
KQorICAgICAgICB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC5vbkNsZWFyT2JzZXJ2YWJsZS5hZGQo
ZnVuY3Rpb24gKGVuZ2luZSkgeworICAgICAgICAgICAgZW5naW5lLmNsZWFyKG5ldyBfTWF0aHNf
bWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQ29sb3I0Il0oMC4wLCAw
LjAsIDAuMCwgMS4wKSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIH0pOworICAgICAgICAv
LyBDdXN0b20gcmVuZGVyIGZ1bmN0aW9uCisgICAgICAgIHZhciByZW5kZXJTdWJNZXNoID0gZnVu
Y3Rpb24gKHN1Yk1lc2gpIHsKKyAgICAgICAgICAgIHZhciBtZXNoID0gc3ViTWVzaC5nZXRSZW5k
ZXJpbmdNZXNoKCk7CisgICAgICAgICAgICB2YXIgc2NlbmUgPSBfdGhpcy5fc2NlbmU7CisgICAg
ICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgICAgICB2YXIg
bWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7CisgICAgICAgICAgICBpZiAoIW1hdGVy
aWFsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbWVzaC5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5faXNBY3RpdmVJbnRlcm1lZGlh
dGUgPSBmYWxzZTsKKyAgICAgICAgICAgIC8vIFZlbG9jaXR5CisgICAgICAgICAgICBpZiAoX3Ro
aXMuX2VuYWJsZVZlbG9jaXR5ICYmICFfdGhpcy5fcHJldmlvdXNUcmFuc2Zvcm1hdGlvbk1hdHJp
Y2VzW21lc2gudW5pcXVlSWRdKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3ByZXZpb3VzVHJh
bnNmb3JtYXRpb25NYXRyaWNlc1ttZXNoLnVuaXF1ZUlkXSA9IHsKKyAgICAgICAgICAgICAgICAg
ICAgd29ybGQ6IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJNYXRyaXgiXS5JZGVudGl0eSgpLAorICAgICAgICAgICAgICAgICAgICB2aWV3UHJvamVjdGlv
bjogc2NlbmUuZ2V0VHJhbnNmb3JtTWF0cml4KCkKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIGlmIChtZXNoLnNrZWxldG9uKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBi
b25lc1RyYW5zZm9ybWF0aW9ucyA9IG1lc2guc2tlbGV0b24uZ2V0VHJhbnNmb3JtTWF0cmljZXMo
bWVzaCk7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wcmV2aW91c0JvbmVzVHJhbnNmb3Jt
YXRpb25NYXRyaWNlc1ttZXNoLnVuaXF1ZUlkXSA9IF90aGlzLl9jb3B5Qm9uZXNUcmFuc2Zvcm1h
dGlvbk1hdHJpY2VzKGJvbmVzVHJhbnNmb3JtYXRpb25zLCBuZXcgRmxvYXQzMkFycmF5KGJvbmVz
VHJhbnNmb3JtYXRpb25zLmxlbmd0aCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIEN1bGxpbmcKKyAgICAgICAgICAgIGVuZ2luZS5zZXRTdGF0ZSht
YXRlcmlhbC5iYWNrRmFjZUN1bGxpbmcsIDAsIGZhbHNlLCBzY2VuZS51c2VSaWdodEhhbmRlZFN5
c3RlbSk7CisgICAgICAgICAgICAvLyBNYW5hZ2luZyBpbnN0YW5jZXMKKyAgICAgICAgICAgIHZh
ciBiYXRjaCA9IG1lc2guX2dldEluc3RhbmNlc1JlbmRlckxpc3Qoc3ViTWVzaC5faWQpOworICAg
ICAgICAgICAgaWYgKGJhdGNoLm11c3RSZXR1cm4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJp
bmcgPSAoZW5naW5lLmdldENhcHMoKS5pbnN0YW5jZWRBcnJheXMpICYmIChiYXRjaC52aXNpYmxl
SW5zdGFuY2VzW3N1Yk1lc2guX2lkXSAhPT0gbnVsbCk7CisgICAgICAgICAgICBpZiAoX3RoaXMu
aXNSZWFkeShzdWJNZXNoLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZykpIHsKKyAgICAgICAg
ICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KF90aGlzLl9lZmZlY3QpOworICAgICAgICAgICAg
ICAgIG1lc2guX2JpbmQoc3ViTWVzaCwgX3RoaXMuX2VmZmVjdCwgX01hdGVyaWFsc19tYXRlcmlh
bF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlhbCJdLlRyaWFuZ2xlRmlsbE1v
ZGUpOworICAgICAgICAgICAgICAgIF90aGlzLl9lZmZlY3Quc2V0TWF0cml4KCJ2aWV3UHJvamVj
dGlvbiIsIHNjZW5lLmdldFRyYW5zZm9ybU1hdHJpeCgpKTsKKyAgICAgICAgICAgICAgICBfdGhp
cy5fZWZmZWN0LnNldE1hdHJpeCgidmlldyIsIHNjZW5lLmdldFZpZXdNYXRyaXgoKSk7CisgICAg
ICAgICAgICAgICAgLy8gQWxwaGEgdGVzdAorICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbCAm
JiBtYXRlcmlhbC5uZWVkQWxwaGFUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGFscGhhVGV4dHVyZSA9IG1hdGVyaWFsLmdldEFscGhhVGVzdFRleHR1cmUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFscGhhVGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
X3RoaXMuX2VmZmVjdC5zZXRUZXh0dXJlKCJkaWZmdXNlU2FtcGxlciIsIGFscGhhVGV4dHVyZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZWZmZWN0LnNldE1hdHJpeCgiZGlmZnVz
ZU1hdHJpeCIsIGFscGhhVGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEJvbmVzCisg
ICAgICAgICAgICAgICAgaWYgKG1lc2gudXNlQm9uZXMgJiYgbWVzaC5jb21wdXRlQm9uZXNVc2lu
Z1NoYWRlcnMgJiYgbWVzaC5za2VsZXRvbikgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5f
ZWZmZWN0LnNldE1hdHJpY2VzKCJtQm9uZXMiLCBtZXNoLnNrZWxldG9uLmdldFRyYW5zZm9ybU1h
dHJpY2VzKG1lc2gpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9lbmFibGVWZWxv
Y2l0eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2VmZmVjdC5zZXRNYXRyaWNl
cygibVByZXZpb3VzQm9uZXMiLCBfdGhpcy5fcHJldmlvdXNCb25lc1RyYW5zZm9ybWF0aW9uTWF0
cmljZXNbbWVzaC51bmlxdWVJZF0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE1vcnBoIHRhcmdldHMKKyAgICAgICAgICAgICAg
ICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19b
Ik1hdGVyaWFsSGVscGVyIl0uQmluZE1vcnBoVGFyZ2V0UGFyYW1ldGVycyhtZXNoLCBfdGhpcy5f
ZWZmZWN0KTsKKyAgICAgICAgICAgICAgICAvLyBWZWxvY2l0eQorICAgICAgICAgICAgICAgIGlm
IChfdGhpcy5fZW5hYmxlVmVsb2NpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2Vm
ZmVjdC5zZXRNYXRyaXgoInByZXZpb3VzV29ybGQiLCBfdGhpcy5fcHJldmlvdXNUcmFuc2Zvcm1h
dGlvbk1hdHJpY2VzW21lc2gudW5pcXVlSWRdLndvcmxkKTsKKyAgICAgICAgICAgICAgICAgICAg
X3RoaXMuX2VmZmVjdC5zZXRNYXRyaXgoInByZXZpb3VzVmlld1Byb2plY3Rpb24iLCBfdGhpcy5f
cHJldmlvdXNUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzW21lc2gudW5pcXVlSWRdLnZpZXdQcm9qZWN0
aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gRHJhdworICAgICAg
ICAgICAgICAgIG1lc2guX3Byb2Nlc3NSZW5kZXJpbmcoc3ViTWVzaCwgX3RoaXMuX2VmZmVjdCwg
X01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlh
bCJdLlRyaWFuZ2xlRmlsbE1vZGUsIGJhdGNoLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZywg
ZnVuY3Rpb24gKGlzSW5zdGFuY2UsIHdvcmxkKSB7IHJldHVybiBfdGhpcy5fZWZmZWN0LnNldE1h
dHJpeCgid29ybGQiLCB3b3JsZCk7IH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
VmVsb2NpdHkKKyAgICAgICAgICAgIGlmIChfdGhpcy5fZW5hYmxlVmVsb2NpdHkpIHsKKyAgICAg
ICAgICAgICAgICBfdGhpcy5fcHJldmlvdXNUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzW21lc2gudW5p
cXVlSWRdLndvcmxkID0gbWVzaC5nZXRXb3JsZE1hdHJpeCgpLmNsb25lKCk7CisgICAgICAgICAg
ICAgICAgX3RoaXMuX3ByZXZpb3VzVHJhbnNmb3JtYXRpb25NYXRyaWNlc1ttZXNoLnVuaXF1ZUlk
XS52aWV3UHJvamVjdGlvbiA9IF90aGlzLl9zY2VuZS5nZXRUcmFuc2Zvcm1NYXRyaXgoKS5jbG9u
ZSgpOworICAgICAgICAgICAgICAgIGlmIChtZXNoLnNrZWxldG9uKSB7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl9jb3B5Qm9uZXNUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzKG1lc2guc2tlbGV0
b24uZ2V0VHJhbnNmb3JtTWF0cmljZXMobWVzaCksIF90aGlzLl9wcmV2aW91c0JvbmVzVHJhbnNm
b3JtYXRpb25NYXRyaWNlc1ttZXNoLnVuaXF1ZUlkXSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC5j
dXN0b21SZW5kZXJGdW5jdGlvbiA9IGZ1bmN0aW9uIChvcGFxdWVTdWJNZXNoZXMsIGFscGhhVGVz
dFN1Yk1lc2hlcywgdHJhbnNwYXJlbnRTdWJNZXNoZXMsIGRlcHRoT25seVN1Yk1lc2hlcykgewor
ICAgICAgICAgICAgdmFyIGluZGV4OworICAgICAgICAgICAgaWYgKGRlcHRoT25seVN1Yk1lc2hl
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBlbmdpbmUuc2V0Q29sb3JXcml0ZShmYWxzZSk7
CisgICAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZGVwdGhPbmx5U3ViTWVz
aGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICByZW5kZXJTdWJNZXNo
KGRlcHRoT25seVN1Yk1lc2hlcy5kYXRhW2luZGV4XSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVuZ2luZS5zZXRDb2xvcldyaXRlKHRydWUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgb3BhcXVlU3ViTWVzaGVzLmxlbmd0
aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHJlbmRlclN1Yk1lc2gob3BhcXVlU3ViTWVz
aGVzLmRhdGFbaW5kZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW5kZXgg
PSAwOyBpbmRleCA8IGFscGhhVGVzdFN1Yk1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAg
ICAgICAgICAgICByZW5kZXJTdWJNZXNoKGFscGhhVGVzdFN1Yk1lc2hlcy5kYXRhW2luZGV4XSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfTsKKyAgICAvLyBDb3BpZXMgdGhlIGJv
bmVzIHRyYW5zZm9ybWF0aW9uIG1hdHJpY2VzIGludG8gdGhlIHRhcmdldCBhcnJheSBhbmQgcmV0
dXJucyB0aGUgdGFyZ2V0J3MgcmVmZXJlbmNlCisgICAgR2VvbWV0cnlCdWZmZXJSZW5kZXJlci5w
cm90b3R5cGUuX2NvcHlCb25lc1RyYW5zZm9ybWF0aW9uTWF0cmljZXMgPSBmdW5jdGlvbiAoc291
cmNlLCB0YXJnZXQpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIHRhcmdldFtpXSA9IHNvdXJjZVtpXTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH07CisgICAgLyoqCisgICAgICogQ29uc3RhbnQg
dXNlZCB0byByZXRyaWV2ZSB0aGUgcG9zaXRpb24gdGV4dHVyZSBpbmRleCBpbiB0aGUgRy1CdWZm
ZXIgdGV4dHVyZXMgYXJyYXkKKyAgICAgKiB1c2luZyBnZXRJbmRleChHZW9tZXRyeUJ1ZmZlclJl
bmRlcmVyLlBPU0lUSU9OX1RFWFRVUkVfSU5ERVgpCisgICAgICovCisgICAgR2VvbWV0cnlCdWZm
ZXJSZW5kZXJlci5QT1NJVElPTl9URVhUVVJFX1RZUEUgPSAxOworICAgIC8qKgorICAgICAqIENv
bnN0YW50IHVzZWQgdG8gcmV0cmlldmUgdGhlIHZlbG9jaXR5IHRleHR1cmUgaW5kZXggaW4gdGhl
IEctQnVmZmVyIHRleHR1cmVzIGFycmF5CisgICAgICogdXNpbmcgZ2V0SW5kZXgoR2VvbWV0cnlC
dWZmZXJSZW5kZXJlci5WRUxPQ0lUWV9URVhUVVJFX0lOREVYKQorICAgICAqLworICAgIEdlb21l
dHJ5QnVmZmVyUmVuZGVyZXIuVkVMT0NJVFlfVEVYVFVSRV9UWVBFID0gMjsKKyAgICAvKiogQGhp
ZGRlbiAqLworICAgIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXIuX1NjZW5lQ29tcG9uZW50SW5pdGlh
bGl6YXRpb24gPSBmdW5jdGlvbiAoXykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJHZW9t
ZXRyeUJ1ZmZlclJlbmRlcmVyU2NlbmVDb21wb25lbnQiKTsKKyAgICB9OworICAgIHJldHVybiBH
ZW9tZXRyeUJ1ZmZlclJlbmRlcmVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9SZW5kZXJpbmcvZ2VvbWV0cnlCdWZmZXJSZW5kZXJlclNjZW5lQ29tcG9uZW50LnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9SZW5kZXJpbmcvZ2VvbWV0cnlCdWZmZXJSZW5kZXJlclNjZW5lQ29t
cG9uZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEdlb21ldHJ5QnVm
ZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudDsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vc2NlbmVDb21wb25lbnQgKi8g
Ii4vc2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZ2VvbWV0
cnlCdWZmZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyICovICIuL1JlbmRlcmluZy9n
ZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLnRzIik7CisKKworCitPYmplY3QuZGVmaW5lUHJvcGVydHko
X3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lIl0ucHJvdG90eXBlLCAi
Z2VvbWV0cnlCdWZmZXJSZW5kZXJlciIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlcjsKKyAgICB9LAorICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1N1cHBvcnRlZCkgewor
ICAgICAgICAgICAgdGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlciA9IHZhbHVlOworICAgICAg
ICB9CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorfSk7Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NlbmUiXS5wcm90
b3R5cGUuZW5hYmxlR2VvbWV0cnlCdWZmZXJSZW5kZXJlciA9IGZ1bmN0aW9uIChyYXRpbykgewor
ICAgIGlmIChyYXRpbyA9PT0gdm9pZCAwKSB7IHJhdGlvID0gMTsgfQorICAgIGlmICh0aGlzLl9n
ZW9tZXRyeUJ1ZmZlclJlbmRlcmVyKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9nZW9tZXRyeUJ1
ZmZlclJlbmRlcmVyOworICAgIH0KKyAgICB0aGlzLl9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyID0g
bmV3IF9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ikdlb21ldHJ5QnVmZmVyUmVuZGVyZXIiXSh0aGlzLCByYXRpbyk7CisgICAgaWYgKCF0aGlzLl9n
ZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLmlzU3VwcG9ydGVkKSB7CisgICAgICAgIHRoaXMuX2dlb21l
dHJ5QnVmZmVyUmVuZGVyZXIgPSBudWxsOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5fZ2VvbWV0
cnlCdWZmZXJSZW5kZXJlcjsKK307Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siU2NlbmUiXS5wcm90b3R5cGUuZGlzYWJsZUdlb21ldHJ5QnVmZmVyUmVuZGVyZXIgPSBmdW5j
dGlvbiAoKSB7CisgICAgaWYgKCF0aGlzLl9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyKSB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgdGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlci5kaXNw
b3NlKCk7CisgICAgdGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlciA9IG51bGw7Cit9OworLyoq
CisgKiBEZWZpbmVzIHRoZSBHZW9tZXRyeSBCdWZmZXIgc2NlbmUgY29tcG9uZW50IHJlc3BvbnNp
YmxlIHRvIG1hbmFnZSBhIEctQnVmZmVyIHVzZWZ1bAorICogaW4gc2V2ZXJhbCByZW5kZXJpbmcg
dGVjaG5pcXVlcy4KKyAqLwordmFyIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVu
dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgZm9yIHRoZSBnaXZlbiBzY2VuZQorICAg
ICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0byByZWdpc3RlciB0aGUgY29tcG9u
ZW50IGluCisgICAgICovCisgICAgZnVuY3Rpb24gR2VvbWV0cnlCdWZmZXJSZW5kZXJlclNjZW5l
Q29tcG9uZW50KHNjZW5lKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY29tcG9uZW50
IG5hbWUgaGVscGZ1bCB0byBpZGVudGlmeSB0aGUgY29tcG9uZW50IGluIHRoZSBsaXN0IG9mIHNj
ZW5lIGNvbXBvbmVudHMuCisgICAgICAgICAqLworICAgICAgICB0aGlzLm5hbWUgPSBfc2NlbmVD
b21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25z
dGFudHMiXS5OQU1FX0dFT01FVFJZQlVGRkVSUkVOREVSRVI7CisgICAgICAgIHRoaXMuc2NlbmUg
PSBzY2VuZTsKKyAgICB9CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25lbnQg
aW4gYSBnaXZlbiBzY2VuZQorICAgICAqLworICAgIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2Vu
ZUNvbXBvbmVudC5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMuc2NlbmUuX2dhdGhlclJlbmRlclRhcmdldHNTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29t
cG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lQ29tcG9uZW50Q29uc3Rh
bnRzIl0uU1RFUF9HQVRIRVJSRU5ERVJUQVJHRVRTX0dFT01FVFJZQlVGRkVSUkVOREVSRVIsIHRo
aXMsIHRoaXMuX2dhdGhlclJlbmRlclRhcmdldHMpOworICAgIH07CisgICAgLyoqCisgICAgICog
UmVidWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4gY2FzZSBv
ZgorICAgICAqIGNvbnRleHQgbG9zdCBmb3IgaW5zdGFuY2UuCisgICAgICovCisgICAgR2VvbWV0
cnlCdWZmZXJSZW5kZXJlclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWJ1aWxkID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGZvciB0aGlzIGNvbXBvbmVudAorICAg
IH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhlIGNvbXBvbmVudCBhbmQgdGhlIGFzc29j
aWF0ZWQgcmVzc291cmNlcworICAgICAqLworICAgIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2Vu
ZUNvbXBvbmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8g
Tm90aGluZyB0byBkbyBmb3IgdGhpcyBjb21wb25lbnQKKyAgICB9OworICAgIEdlb21ldHJ5QnVm
ZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX2dhdGhlclJlbmRlclRhcmdldHMg
PSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0cykgeworICAgICAgICBpZiAodGhpcy5zY2VuZS5fZ2Vv
bWV0cnlCdWZmZXJSZW5kZXJlcikgeworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0cy5wdXNoKHRo
aXMuc2NlbmUuX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXIuZ2V0R0J1ZmZlcigpKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgcmV0dXJuIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVu
dDsKK30oKSk7CisKK19nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIkdlb21ldHJ5QnVmZmVyUmVuZGVyZXIiXS5fU2NlbmVDb21wb25lbnRJbml0aWFs
aXphdGlvbiA9IGZ1bmN0aW9uIChzY2VuZSkgeworICAgIC8vIFJlZ2lzdGVyIHRoZSBHIEJ1ZmZl
ciBjb21wb25lbnQgdG8gdGhlIHNjZW5lLgorICAgIHZhciBjb21wb25lbnQgPSBzY2VuZS5fZ2V0
Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
Y2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfR0VPTUVUUllCVUZGRVJSRU5ERVJFUik7Cisg
ICAgaWYgKCFjb21wb25lbnQpIHsKKyAgICAgICAgY29tcG9uZW50ID0gbmV3IEdlb21ldHJ5QnVm
ZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudChzY2VuZSk7CisgICAgICAgIHNjZW5lLl9hZGRDb21w
b25lbnQoY29tcG9uZW50KTsKKyAgICB9Cit9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9S
ZW5kZXJpbmcvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vUmVuZGVyaW5nL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQm91bmRpbmdCb3hSZW5kZXJlciwgRGVw
dGhSZW5kZXJlciwgRGVwdGhSZW5kZXJlclNjZW5lQ29tcG9uZW50LCBFZGdlc1JlbmRlcmVyLCBM
aW5lRWRnZXNSZW5kZXJlciwgR2VvbWV0cnlCdWZmZXJSZW5kZXJlciwgR2VvbWV0cnlCdWZmZXJS
ZW5kZXJlclNjZW5lQ29tcG9uZW50LCBPdXRsaW5lUmVuZGVyZXIsIFJlbmRlcmluZ0dyb3VwLCBS
ZW5kZXJpbmdHcm91cEluZm8sIFJlbmRlcmluZ01hbmFnZXIsIFV0aWxpdHlMYXllclJlbmRlcmVy
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm91bmRpbmdC
b3hSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9ib3VuZGluZ0JveFJlbmRlcmVyICovICIuL1JlbmRlcmluZy9ib3VuZGluZ0Jv
eFJlbmRlcmVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvdW5kaW5nQm94UmVuZGVyZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9ib3VuZGluZ0JveFJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkJvdW5kaW5nQm94UmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfZGVwdGhSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZXB0aFJlbmRlcmVyICovICIuL1JlbmRlcmluZy9k
ZXB0aFJlbmRlcmVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoUmVuZGVyZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9kZXB0aFJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkRlcHRoUmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVw
dGhSZW5kZXJlclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RlcHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudCAqLyAi
Li9SZW5kZXJpbmcvZGVwdGhSZW5kZXJlclNjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkRlcHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2RlcHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJEZXB0aFJlbmRlcmVyU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfZWRnZXNSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lZGdlc1JlbmRlcmVyICovICIuL1JlbmRlcmluZy9lZGdl
c1JlbmRlcmVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVkZ2VzUmVuZGVyZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9lZGdlc1JlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkVkZ2VzUmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGluZUVkZ2VzUmVuZGVy
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lZGdlc1JlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkxpbmVFZGdlc1JlbmRlcmVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZ2VvbWV0cnlCdWZmZXJSZW5kZXJlciAq
LyAiLi9SZW5kZXJpbmcvZ2VvbWV0cnlCdWZmZXJSZW5kZXJlci50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZ2VvbWV0
cnlCdWZmZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJHZW9tZXRyeUJ1
ZmZlclJlbmRlcmVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2dlb21ldHJ5
QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyU2NlbmVD
b21wb25lbnQgKi8gIi4vUmVuZGVyaW5nL2dlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBv
bmVudC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyU2NlbmVD
b21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyU2Nl
bmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siR2VvbWV0cnlCdWZmZXJS
ZW5kZXJlclNjZW5lQ29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X291dGxpbmVSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9vdXRsaW5lUmVuZGVyZXIgKi8gIi4vUmVuZGVyaW5nL291dGxpbmVS
ZW5kZXJlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPdXRsaW5lUmVuZGVyZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9vdXRsaW5lUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siT3V0bGluZVJlbmRlcmVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Jl
bmRlcmluZ0dyb3VwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3JlbmRlcmluZ0dyb3VwICovICIuL1JlbmRlcmluZy9yZW5kZXJpbmdHcm91
cC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJpbmdHcm91cCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX3JlbmRlcmluZ0dyb3VwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlJlbmRl
cmluZ0dyb3VwIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JlbmRlcmluZ01h
bmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vcmVuZGVyaW5nTWFuYWdlciAqLyAiLi9SZW5kZXJpbmcvcmVuZGVyaW5nTWFuYWdlci50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJpbmdHcm91cEluZm8iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9yZW5kZXJpbmdNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlJl
bmRlcmluZ0dyb3VwSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJpbmdNYW5h
Z2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcmVuZGVyaW5nTWFuYWdlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJSZW5kZXJpbmdNYW5hZ2VyIl07IH0pOworCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX3V0aWxpdHlMYXllclJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxpdHlMYXllclJlbmRlcmVyICov
ICIuL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlci50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJVdGlsaXR5TGF5ZXJSZW5kZXJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3V0aWxpdHlMYXll
clJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlV0aWxpdHlMYXllclJlbmRl
cmVyIl07IH0pOworCisKKworCisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vUmVuZGVyaW5nL291dGxpbmVSZW5kZXJlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUmVuZGVyaW5nL291dGxpbmVSZW5kZXJl
ci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBPdXRsaW5lUmVuZGVyZXIgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiT3V0bGluZVJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBP
dXRsaW5lUmVuZGVyZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2Fic3RyYWN0TWVzaCAq
LyAiLi9NZXNoZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25z
dGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Nj
ZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL21hdGVyaWFsICovICIuL01h
dGVyaWFscy9tYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlh
bHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbEhlbHBlciAqLyAiLi9NYXRlcmlh
bHMvbWF0ZXJpYWxIZWxwZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVy
c19vdXRsaW5lX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL291dGxpbmUuZnJhZ21lbnQgKi8gIi4vU2hhZGVy
cy9vdXRsaW5lLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRl
cnNfb3V0bGluZV92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvb3V0bGluZS52ZXJ0ZXggKi8gIi4vU2hhZGVycy9v
dXRsaW5lLnZlcnRleC50cyIpOworCisKKworCisKKworCisKKworLyoqCisgKiBHZXRzIHRoZSBv
dXRsaW5lIHJlbmRlcmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NlbmUKKyAqIEByZXR1cm5zIGEg
T3V0bGluZVJlbmRlcmVyCisgKi8KK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJTY2VuZSJdLnByb3RvdHlwZS5nZXRPdXRsaW5lUmVuZGVyZXIgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgaWYgKCF0aGlzLl9vdXRsaW5lUmVuZGVyZXIpIHsKKyAgICAgICAgdGhpcy5fb3V0bGluZVJl
bmRlcmVyID0gbmV3IE91dGxpbmVSZW5kZXJlcih0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuIHRo
aXMuX291dGxpbmVSZW5kZXJlcjsKK307CitPYmplY3QuZGVmaW5lUHJvcGVydHkoX01lc2hlc19h
YnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJzdHJhY3RNZXNoIl0u
cHJvdG90eXBlLCAicmVuZGVyT3V0bGluZSIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlck91dGxpbmU7CisgICAgfSwKKyAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIC8vIExhenkg
TG9hZCB0aGUgY29tcG9uZW50LgorICAgICAgICAgICAgdGhpcy5nZXRTY2VuZSgpLmdldE91dGxp
bmVSZW5kZXJlcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3JlbmRlck91dGxpbmUgPSB2
YWx1ZTsKKyAgICB9LAorICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgY29uZmlndXJhYmxlOiB0
cnVlCit9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdE1lc2giXS5wcm90b3R5cGUsICJyZW5k
ZXJPdmVybGF5IiwgeworICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5fcmVuZGVyT3ZlcmxheTsKKyAgICB9LAorICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgLy8gTGF6eSBMb2FkIHRoZSBjb21wb25l
bnQuCisgICAgICAgICAgICB0aGlzLmdldFNjZW5lKCkuZ2V0T3V0bGluZVJlbmRlcmVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVuZGVyT3ZlcmxheSA9IHZhbHVlOworICAgIH0sCisg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRydWUKK30pOworLyoqCisg
KiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIHRvIGRyYXcgYm90aGUgb3V0bGluZS9vdmVybGF5
IG9mIG1lc2hlcy4KKyAqIEl0IHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseSBidXQgdGhyb3Vn
aCB0aGUgYXZhaWxhYmxlIG1ldGhvZCBvbiBtZXNoLgorICovCit2YXIgT3V0bGluZVJlbmRlcmVy
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRp
YXRlcyBhIG5ldyBvdXRsaW5lIHJlbmRlcmVyLiAoVGhlcmUgY291bGQgYmUgb25seSBvbmUgcGVy
IHNjZW5lKS4KKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lcyB0aGUgc2NlbmUgaXQgYmVsb25n
cyB0bworICAgICAqLworICAgIGZ1bmN0aW9uIE91dGxpbmVSZW5kZXJlcihzY2VuZSkgeworICAg
ICAgICAvKioKKyAgICAgICAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudC4gRWFjaCBjb21w
b25lbnQgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuCisgICAgICAgICAqLworICAgICAgICB0aGlz
Lm5hbWUgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2Nl
bmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX09VVExJTkVSRU5ERVJFUjsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIERlZmluZXMgYSB6T2Zmc2V0IHRvIHByZXZlbnQgekZpZ2h0aW5nIGJldHdl
ZW4gdGhlIG92ZXJsYXkgYW5kIHRoZSBtZXNoLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy56
T2Zmc2V0ID0gMTsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9l
bmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgdGhpcy5zY2VuZS5fYWRkQ29tcG9u
ZW50KHRoaXMpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBSZWdpc3RlciB0aGUgY29tcG9uZW50
IHRvIG9uZSBpbnN0YW5jZSBvZiBhIHNjZW5lLgorICAgICAqLworICAgIE91dGxpbmVSZW5kZXJl
ci5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuc2NlbmUu
X2JlZm9yZVJlbmRlcmluZ01lc2hTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RF
UF9CRUZPUkVSRU5ERVJJTkdNRVNIX09VVExJTkUsIHRoaXMsIHRoaXMuX2JlZm9yZVJlbmRlcmlu
Z01lc2gpOworICAgICAgICB0aGlzLnNjZW5lLl9hZnRlclJlbmRlcmluZ01lc2hTdGFnZS5yZWdp
c3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNj
ZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9BRlRFUlJFTkRFUklOR01FU0hfT1VUTElORSwg
dGhpcywgdGhpcy5fYWZ0ZXJSZW5kZXJpbmdNZXNoKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJlYnVpbGRzIHRoZSBlbGVtZW50cyByZWxhdGVkIHRvIHRoaXMgY29tcG9uZW50IGluIGNhc2Ug
b2YKKyAgICAgKiBjb250ZXh0IGxvc3QgZm9yIGluc3RhbmNlLgorICAgICAqLworICAgIE91dGxp
bmVSZW5kZXJlci5wcm90b3R5cGUucmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8g
Tm90aGluZyB0byBkbyBoZXJlLgorICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhl
IGNvbXBvbmVudCBhbmQgdGhlIGFzc29jaWF0ZWQgcmVzc291cmNlcy4KKyAgICAgKi8KKyAgICBP
dXRsaW5lUmVuZGVyZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbmRlcnMg
dGhlIG91dGxpbmUgaW4gdGhlIGNhbnZhcy4KKyAgICAgKiBAcGFyYW0gc3ViTWVzaCBEZWZpbmVz
IHRoZSBzdW1lc2ggdG8gcmVuZGVyCisgICAgICogQHBhcmFtIGJhdGNoIERlZmluZXMgdGhlIGJh
dGNoIG9mIG1lc2hlcyBpbiBjYXNlIG9mIGluc3RhbmNlcworICAgICAqIEBwYXJhbSB1c2VPdmVy
bGF5IERlZmluZXMgaWYgdGhlIHJlbmRlcmluZyBpcyBmb3IgdGhlIG92ZXJsYXkgb3IgdGhlIG91
dGxpbmUKKyAgICAgKi8KKyAgICBPdXRsaW5lUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1
bmN0aW9uIChzdWJNZXNoLCBiYXRjaCwgdXNlT3ZlcmxheSkgeworICAgICAgICB2YXIgX3RoaXMg
PSB0aGlzOworICAgICAgICBpZiAodXNlT3ZlcmxheSA9PT0gdm9pZCAwKSB7IHVzZU92ZXJsYXkg
PSBmYWxzZTsgfQorICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lOworICAgICAgICB2YXIg
ZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIHZhciBoYXJkd2FyZUluc3RhbmNl
ZFJlbmRlcmluZyA9IChlbmdpbmUuZ2V0Q2FwcygpLmluc3RhbmNlZEFycmF5cykgJiYgKGJhdGNo
LnZpc2libGVJbnN0YW5jZXNbc3ViTWVzaC5faWRdICE9PSBudWxsKSAmJiAoYmF0Y2gudmlzaWJs
ZUluc3RhbmNlc1tzdWJNZXNoLl9pZF0gIT09IHVuZGVmaW5lZCk7CisgICAgICAgIGlmICghdGhp
cy5pc1JlYWR5KHN1Yk1lc2gsIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nKSkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBtZXNoID0gc3ViTWVzaC5nZXRS
ZW5kZXJpbmdNZXNoKCk7CisgICAgICAgIHZhciBtYXRlcmlhbCA9IHN1Yk1lc2guZ2V0TWF0ZXJp
YWwoKTsKKyAgICAgICAgaWYgKCFtYXRlcmlhbCB8fCAhc2NlbmUuYWN0aXZlQ2FtZXJhKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZW5naW5lLmVuYWJsZUVmZmVj
dCh0aGlzLl9lZmZlY3QpOworICAgICAgICAvLyBMb2dhcml0aG1pYyBkZXB0aAorICAgICAgICBp
ZiAobWF0ZXJpYWwudXNlTG9nYXJpdGhtaWNEZXB0aCkgeworICAgICAgICAgICAgdGhpcy5fZWZm
ZWN0LnNldEZsb2F0KCJsb2dhcml0aG1pY0RlcHRoQ29uc3RhbnQiLCAyLjAgLyAoTWF0aC5sb2co
c2NlbmUuYWN0aXZlQ2FtZXJhLm1heFogKyAxLjApIC8gTWF0aC5MTjIpKTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9lZmZlY3Quc2V0RmxvYXQoIm9mZnNldCIsIHVzZU92ZXJsYXkgPyAwIDog
bWVzaC5vdXRsaW5lV2lkdGgpOworICAgICAgICB0aGlzLl9lZmZlY3Quc2V0Q29sb3I0KCJjb2xv
ciIsIHVzZU92ZXJsYXkgPyBtZXNoLm92ZXJsYXlDb2xvciA6IG1lc2gub3V0bGluZUNvbG9yLCB1
c2VPdmVybGF5ID8gbWVzaC5vdmVybGF5QWxwaGEgOiBtYXRlcmlhbC5hbHBoYSk7CisgICAgICAg
IHRoaXMuX2VmZmVjdC5zZXRNYXRyaXgoInZpZXdQcm9qZWN0aW9uIiwgc2NlbmUuZ2V0VHJhbnNm
b3JtTWF0cml4KCkpOworICAgICAgICAvLyBCb25lcworICAgICAgICBpZiAobWVzaC51c2VCb25l
cyAmJiBtZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBtZXNoLnNrZWxldG9uKSB7Cisg
ICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0TWF0cmljZXMoIm1Cb25lcyIsIG1lc2guc2tlbGV0
b24uZ2V0VHJhbnNmb3JtTWF0cmljZXMobWVzaCkpOworICAgICAgICB9CisgICAgICAgIC8vIE1v
cnBoIHRhcmdldHMKKyAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRNb3JwaFRhcmdldFBhcmFt
ZXRlcnMobWVzaCwgdGhpcy5fZWZmZWN0KTsKKyAgICAgICAgbWVzaC5fYmluZChzdWJNZXNoLCB0
aGlzLl9lZmZlY3QsIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siTWF0ZXJpYWwiXS5UcmlhbmdsZUZpbGxNb2RlKTsKKyAgICAgICAgLy8gQWxwaGEgdGVz
dAorICAgICAgICBpZiAobWF0ZXJpYWwgJiYgbWF0ZXJpYWwubmVlZEFscGhhVGVzdGluZygpKSB7
CisgICAgICAgICAgICB2YXIgYWxwaGFUZXh0dXJlID0gbWF0ZXJpYWwuZ2V0QWxwaGFUZXN0VGV4
dHVyZSgpOworICAgICAgICAgICAgaWYgKGFscGhhVGV4dHVyZSkgeworICAgICAgICAgICAgICAg
IHRoaXMuX2VmZmVjdC5zZXRUZXh0dXJlKCJkaWZmdXNlU2FtcGxlciIsIGFscGhhVGV4dHVyZSk7
CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldE1hdHJpeCgiZGlmZnVzZU1hdHJpeCIs
IGFscGhhVGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVuZ2luZS5zZXRaT2Zmc2V0KC10aGlzLnpPZmZzZXQpOworICAgICAgICBt
ZXNoLl9wcm9jZXNzUmVuZGVyaW5nKHN1Yk1lc2gsIHRoaXMuX2VmZmVjdCwgX01hdGVyaWFsc19t
YXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlhbCJdLlRyaWFuZ2xl
RmlsbE1vZGUsIGJhdGNoLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZywgZnVuY3Rpb24gKGlz
SW5zdGFuY2UsIHdvcmxkKSB7IF90aGlzLl9lZmZlY3Quc2V0TWF0cml4KCJ3b3JsZCIsIHdvcmxk
KTsgfSk7CisgICAgICAgIGVuZ2luZS5zZXRaT2Zmc2V0KDApOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgb3V0bGluZSByZW5kZXJlciBpcyByZWFk
eSBmb3IgYSBnaXZlbiBzdWJtZXNoLgorICAgICAqIEFsbCB0aGUgZGVwZW5kZW5jaWVzIGUuZy4g
c3VibWVzaGVzLCB0ZXh0dXJlLCBlZmZlY3QuLi4gbXVzIGJlIHJlYWR5CisgICAgICogQHBhcmFt
IHN1Yk1lc2ggRGVmaW5lcyB0aGUgc3VibWVzaCB0byBjaGVjayByZWFkeW5lc3MgZm9yCisgICAg
ICogQHBhcmFtIHVzZUluc3RhbmNlcyBEZWZpbmVzIHdoZXRlciB3ZWUgYXJlIHRyeWluZyB0byBy
ZW5kZXIgaW5zdGFuY2VzIG9yIG5vdAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgcmVhZHkgb3Ro
ZXJ3aXNlIGZhbHNlCisgICAgICovCisgICAgT3V0bGluZVJlbmRlcmVyLnByb3RvdHlwZS5pc1Jl
YWR5ID0gZnVuY3Rpb24gKHN1Yk1lc2gsIHVzZUluc3RhbmNlcykgeworICAgICAgICB2YXIgZGVm
aW5lcyA9IFtdOworICAgICAgICB2YXIgYXR0cmlicyA9IFtfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIF9NZXNo
ZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlcnRleEJ1ZmZlciJdLk5v
cm1hbEtpbmRdOworICAgICAgICB2YXIgbWVzaCA9IHN1Yk1lc2guZ2V0TWVzaCgpOworICAgICAg
ICB2YXIgbWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7CisgICAgICAgIGlmIChtYXRl
cmlhbCkgeworICAgICAgICAgICAgLy8gQWxwaGEgdGVzdAorICAgICAgICAgICAgaWYgKG1hdGVy
aWFsLm5lZWRBbHBoYVRlc3RpbmcoKSkgeworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgi
I2RlZmluZSBBTFBIQVRFU1QiKTsKKyAgICAgICAgICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2Vz
RGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVydGV4QnVmZmVyIl0uVVZLaW5kKSkgeworICAgICAgICAgICAgICAgICAgICBhdHRyaWJzLnB1
c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVydGV4QnVm
ZmVyIl0uVVZLaW5kKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5l
IFVWMSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobWVzaC5pc1Zl
cnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVydGV4QnVmZmVyIl0uVVYyS2luZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXR0
cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
cnRleEJ1ZmZlciJdLlVWMktpbmQpOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2go
IiNkZWZpbmUgVVYyIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy9Mb2dhcml0aG1pYyBkZXB0aAorICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnVzZUxv
Z2FyaXRobWljRGVwdGgpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUg
TE9HQVJJVEhNSUNERVBUSCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IEJvbmVzCisgICAgICAgIGlmIChtZXNoLnVzZUJvbmVzICYmIG1lc2guY29tcHV0ZUJvbmVzVXNp
bmdTaGFkZXJzKSB7CisgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2Vz
S2luZCk7CisgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCk7
CisgICAgICAgICAgICBpZiAobWVzaC5udW1Cb25lSW5mbHVlbmNlcnMgPiA0KSB7CisgICAgICAg
ICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZCk7CisgICAg
ICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0V4dHJhS2luZCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgTlVNX0JPTkVf
SU5GTFVFTkNFUlMgIiArIG1lc2gubnVtQm9uZUluZmx1ZW5jZXJzKTsKKyAgICAgICAgICAgIGRl
ZmluZXMucHVzaCgiI2RlZmluZSBCb25lc1Blck1lc2ggIiArIChtZXNoLnNrZWxldG9uID8gbWVz
aC5za2VsZXRvbi5ib25lcy5sZW5ndGggKyAxIDogMCkpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIE5VTV9CT05FX0lORkxVRU5D
RVJTIDAiKTsKKyAgICAgICAgfQorICAgICAgICAvLyBNb3JwaCB0YXJnZXRzCisgICAgICAgIHZh
ciBtb3JwaFRhcmdldE1hbmFnZXIgPSBtZXNoLm1vcnBoVGFyZ2V0TWFuYWdlcjsKKyAgICAgICAg
dmFyIG51bU1vcnBoSW5mbHVlbmNlcnMgPSAwOworICAgICAgICBpZiAobW9ycGhUYXJnZXRNYW5h
Z2VyKSB7CisgICAgICAgICAgICBpZiAobW9ycGhUYXJnZXRNYW5hZ2VyLm51bUluZmx1ZW5jZXJz
ID4gMCkgeworICAgICAgICAgICAgICAgIG51bU1vcnBoSW5mbHVlbmNlcnMgPSBtb3JwaFRhcmdl
dE1hbmFnZXIubnVtSW5mbHVlbmNlcnM7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIj
ZGVmaW5lIE1PUlBIVEFSR0VUUyIpOworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2Rl
ZmluZSBOVU1fTU9SUEhfSU5GTFVFTkNFUlMgIiArIG51bU1vcnBoSW5mbHVlbmNlcnMpOworICAg
ICAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlQXR0cmlidXRlc0Zvck1vcnBoVGFy
Z2V0c0luZmx1ZW5jZXJzKGF0dHJpYnMsIG1lc2gsIG51bU1vcnBoSW5mbHVlbmNlcnMpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEluc3RhbmNlcworICAgICAgICBpZiAo
dXNlSW5zdGFuY2VzKSB7CisgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgSU5TVEFO
Q0VTIik7CisgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV82X19bIk1hdGVyaWFsSGVscGVyIl0uUHVzaEF0dHJpYnV0ZXNGb3JJbnN0
YW5jZXMoYXR0cmlicyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gR2V0IGNvcnJlY3QgZWZmZWN0
CisgICAgICAgIHZhciBqb2luID0gZGVmaW5lcy5qb2luKCJcbiIpOworICAgICAgICBpZiAodGhp
cy5fY2FjaGVkRGVmaW5lcyAhPT0gam9pbikgeworICAgICAgICAgICAgdGhpcy5fY2FjaGVkRGVm
aW5lcyA9IGpvaW47CisgICAgICAgICAgICB0aGlzLl9lZmZlY3QgPSB0aGlzLnNjZW5lLmdldEVu
Z2luZSgpLmNyZWF0ZUVmZmVjdCgib3V0bGluZSIsIGF0dHJpYnMsIFsid29ybGQiLCAibUJvbmVz
IiwgInZpZXdQcm9qZWN0aW9uIiwgImRpZmZ1c2VNYXRyaXgiLCAib2Zmc2V0IiwgImNvbG9yIiwg
ImxvZ2FyaXRobWljRGVwdGhDb25zdGFudCIsICJtb3JwaFRhcmdldEluZmx1ZW5jZXMiXSwgWyJk
aWZmdXNlU2FtcGxlciJdLCBqb2luLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7
IG1heFNpbXVsdGFuZW91c01vcnBoVGFyZ2V0czogbnVtTW9ycGhJbmZsdWVuY2VycyB9KTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fZWZmZWN0LmlzUmVhZHkoKTsKKyAgICB9Owor
ICAgIE91dGxpbmVSZW5kZXJlci5wcm90b3R5cGUuX2JlZm9yZVJlbmRlcmluZ01lc2ggPSBmdW5j
dGlvbiAobWVzaCwgc3ViTWVzaCwgYmF0Y2gpIHsKKyAgICAgICAgLy8gT3V0bGluZSAtIHN0ZXAg
MQorICAgICAgICB0aGlzLl9zYXZlZERlcHRoV3JpdGUgPSB0aGlzLl9lbmdpbmUuZ2V0RGVwdGhX
cml0ZSgpOworICAgICAgICBpZiAobWVzaC5yZW5kZXJPdXRsaW5lKSB7CisgICAgICAgICAgICB2
YXIgbWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7CisgICAgICAgICAgICBpZiAobWF0
ZXJpYWwgJiYgbWF0ZXJpYWwubmVlZEFscGhhQmxlbmRpbmcoKSkgeworICAgICAgICAgICAgICAg
IHRoaXMuX2VuZ2luZS5jYWNoZVN0ZW5jaWxTdGF0ZSgpOworICAgICAgICAgICAgICAgIC8vIERy
YXcgb25seSB0byBzdGVuY2lsIGJ1ZmZlciBmb3IgdGhlIG9yaWdpbmFsIG1lc2gKKyAgICAgICAg
ICAgICAgICAvLyBUaGUgcmVzdWx0aW5nIHN0ZW5jaWwgYnVmZmVyIHdpbGwgYmUgdXNlZCBzbyB0
aGUgb3V0bGluZSBpcyBub3QgdmlzaWJsZSBpbnNpZGUgdGhlIG1lc2ggd2hlbiB0aGUgbWVzaCBp
cyB0cmFuc3BhcmVudAorICAgICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5zZXREZXB0aFdyaXRl
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0Q29sb3JXcml0ZShmYWxz
ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5fZW5naW5lLnNldFN0ZW5jaWxCdWZmZXIodHJ1ZSk7
CisgICAgICAgICAgICAgICAgdGhpcy5fZW5naW5lLnNldFN0ZW5jaWxPcGVyYXRpb25QYXNzKF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMi
XS5SRVBMQUNFKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0U3RlbmNpbEZ1bmN0
aW9uKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25z
dGFudHMiXS5BTFdBWVMpOworICAgICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5zZXRTdGVuY2ls
TWFzayhPdXRsaW5lUmVuZGVyZXIuX1N0ZW5jaWxSZWZlcmVuY2UpOworICAgICAgICAgICAgICAg
IHRoaXMuX2VuZ2luZS5zZXRTdGVuY2lsRnVuY3Rpb25SZWZlcmVuY2UoT3V0bGluZVJlbmRlcmVy
Ll9TdGVuY2lsUmVmZXJlbmNlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcihzdWJNZXNo
LCBiYXRjaCwgLyogVGhpcyBzZXRzIG9mZnNldCB0byAwICovIHRydWUpOworICAgICAgICAgICAg
ICAgIHRoaXMuX2VuZ2luZS5zZXRDb2xvcldyaXRlKHRydWUpOworICAgICAgICAgICAgICAgIHRo
aXMuX2VuZ2luZS5zZXRTdGVuY2lsRnVuY3Rpb24oX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLk5PVEVRVUFMKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIERyYXcgdGhlIG91dGxpbmUgdXNpbmcgdGhlIGFib3ZlIHN0ZW5j
aWwgaWYgbmVlZGVkIHRvIGF2b2lkIGRyYXdpbmcgd2l0aGluIHRoZSBtZXNoCisgICAgICAgICAg
ICB0aGlzLl9lbmdpbmUuc2V0RGVwdGhXcml0ZShmYWxzZSk7CisgICAgICAgICAgICB0aGlzLnJl
bmRlcihzdWJNZXNoLCBiYXRjaCk7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0RGVwdGhX
cml0ZSh0aGlzLl9zYXZlZERlcHRoV3JpdGUpOworICAgICAgICAgICAgaWYgKG1hdGVyaWFsICYm
IG1hdGVyaWFsLm5lZWRBbHBoYUJsZW5kaW5nKCkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9l
bmdpbmUucmVzdG9yZVN0ZW5jaWxTdGF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKyAgICBPdXRsaW5lUmVuZGVyZXIucHJvdG90eXBlLl9hZnRlclJlbmRlcmluZ01lc2gg
PSBmdW5jdGlvbiAobWVzaCwgc3ViTWVzaCwgYmF0Y2gpIHsKKyAgICAgICAgLy8gT3ZlcmxheQor
ICAgICAgICBpZiAobWVzaC5yZW5kZXJPdmVybGF5KSB7CisgICAgICAgICAgICB2YXIgY3VycmVu
dE1vZGUgPSB0aGlzLl9lbmdpbmUuZ2V0QWxwaGFNb2RlKCk7CisgICAgICAgICAgICB0aGlzLl9l
bmdpbmUuc2V0QWxwaGFNb2RlKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJDb25zdGFudHMiXS5BTFBIQV9DT01CSU5FKTsKKyAgICAgICAgICAgIHRoaXMu
cmVuZGVyKHN1Yk1lc2gsIGJhdGNoLCB0cnVlKTsKKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5z
ZXRBbHBoYU1vZGUoY3VycmVudE1vZGUpOworICAgICAgICB9CisgICAgICAgIC8vIE91dGxpbmUg
LSBzdGVwIDIKKyAgICAgICAgaWYgKG1lc2gucmVuZGVyT3V0bGluZSAmJiB0aGlzLl9zYXZlZERl
cHRoV3JpdGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5zZXREZXB0aFdyaXRlKHRydWUp
OworICAgICAgICAgICAgdGhpcy5fZW5naW5lLnNldENvbG9yV3JpdGUoZmFsc2UpOworICAgICAg
ICAgICAgdGhpcy5yZW5kZXIoc3ViTWVzaCwgYmF0Y2gpOworICAgICAgICAgICAgdGhpcy5fZW5n
aW5lLnNldENvbG9yV3JpdGUodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIFN0ZW5jaWwgdmFsdWUgdXNlZCB0byBhdm9pZCBvdXRsaW5lIGJlaW5nIHNlZW4gd2l0aGlu
IHRoZSBtZXNoIHdoZW4gdGhlIG1lc2ggaXMgdHJhbnNwYXJlbnQKKyAgICAgKi8KKyAgICBPdXRs
aW5lUmVuZGVyZXIuX1N0ZW5jaWxSZWZlcmVuY2UgPSAweDA0OworICAgIHJldHVybiBPdXRsaW5l
UmVuZGVyZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1JlbmRlcmluZy9y
ZW5kZXJpbmdHcm91cC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9SZW5kZXJpbmcvcmVuZGVyaW5nR3JvdXAudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBSZW5kZXJpbmdHcm91cCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJS
ZW5kZXJpbmdHcm91cCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmVuZGVyaW5nR3JvdXA7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvc21hcnRBcnJh
eSAqLyAiLi9NaXNjL3NtYXJ0QXJyYXkudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVj
dG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9F
bmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworCisKKworLyoq
CisgKiBUaGlzIHJlcHJlc2VudHMgdGhlIG9iamVjdCBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgcmVu
ZGVyaW5nIGdyb3VwLgorICogVGhpcyBpcyBleGNsdXNpdmVseSB1c2VkIGFuZCBjcmVhdGVkIGJ5
IHRoZSByZW5kZXJpbmcgbWFuYWdlci4KKyAqIFRvIG1vZGlmeSB0aGUgYmVoYXZpb3IsIHlvdSB1
c2UgdGhlIGF2YWlsYWJsZSBoZWxwZXJzIGluIHlvdXIgc2NlbmUgb3IgbWVzaGVzLgorICogQGhp
ZGRlbgorICovCit2YXIgUmVuZGVyaW5nR3JvdXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyByZW5kZXJpbmcgZ3JvdXAuCisgICAg
ICogQHBhcmFtIGluZGV4IFRoZSByZW5kZXJpbmcgZ3JvdXAgaW5kZXgKKyAgICAgKiBAcGFyYW0g
b3BhcXVlU29ydENvbXBhcmVGbiBUaGUgb3BhcXVlIHNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbi4g
SWYgbnVsbCBubyBvcmRlciBpcyBhcHBsaWVkCisgICAgICogQHBhcmFtIGFscGhhVGVzdFNvcnRD
b21wYXJlRm4gVGhlIGFscGhhIHRlc3Qgc29ydCBjb21wYXJpc29uIGZ1bmN0aW9uLiBJZiBudWxs
IG5vIG9yZGVyIGlzIGFwcGxpZWQKKyAgICAgKiBAcGFyYW0gdHJhbnNwYXJlbnRTb3J0Q29tcGFy
ZUZuIFRoZSB0cmFuc3BhcmVudCBzb3J0IGNvbXBhcmlzb24gZnVuY3Rpb24uIElmIG51bGwgYmFj
ayB0byBmcm9udCArIGFscGhhIGluZGV4IHNvcnQgaXMgYXBwbGllZAorICAgICAqLworICAgIGZ1
bmN0aW9uIFJlbmRlcmluZ0dyb3VwKGluZGV4LCBzY2VuZSwgb3BhcXVlU29ydENvbXBhcmVGbiwg
YWxwaGFUZXN0U29ydENvbXBhcmVGbiwgdHJhbnNwYXJlbnRTb3J0Q29tcGFyZUZuKSB7CisgICAg
ICAgIGlmIChvcGFxdWVTb3J0Q29tcGFyZUZuID09PSB2b2lkIDApIHsgb3BhcXVlU29ydENvbXBh
cmVGbiA9IG51bGw7IH0KKyAgICAgICAgaWYgKGFscGhhVGVzdFNvcnRDb21wYXJlRm4gPT09IHZv
aWQgMCkgeyBhbHBoYVRlc3RTb3J0Q29tcGFyZUZuID0gbnVsbDsgfQorICAgICAgICBpZiAodHJh
bnNwYXJlbnRTb3J0Q29tcGFyZUZuID09PSB2b2lkIDApIHsgdHJhbnNwYXJlbnRTb3J0Q29tcGFy
ZUZuID0gbnVsbDsgfQorICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7CisgICAgICAgIHRoaXMu
X29wYXF1ZVN1Yk1lc2hlcyA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlNtYXJ0QXJyYXkiXSgyNTYpOworICAgICAgICB0aGlzLl90cmFuc3BhcmVu
dFN1Yk1lc2hlcyA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlNtYXJ0QXJyYXkiXSgyNTYpOworICAgICAgICB0aGlzLl9hbHBoYVRlc3RTdWJNZXNo
ZXMgPSBuZXcgX01pc2Nfc21hcnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJT
bWFydEFycmF5Il0oMjU2KTsKKyAgICAgICAgdGhpcy5fZGVwdGhPbmx5U3ViTWVzaGVzID0gbmV3
IF9NaXNjX3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU21hcnRBcnJh
eSJdKDI1Nik7CisgICAgICAgIHRoaXMuX3BhcnRpY2xlU3lzdGVtcyA9IG5ldyBfTWlzY19zbWFy
dEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNtYXJ0QXJyYXkiXSgyNTYpOwor
ICAgICAgICB0aGlzLl9zcHJpdGVNYW5hZ2VycyA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNtYXJ0QXJyYXkiXSgyNTYpOworICAgICAgICAvKiog
QGhpZGRlbiAqLworICAgICAgICB0aGlzLl9lZGdlc1JlbmRlcmVycyA9IG5ldyBfTWlzY19zbWFy
dEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNtYXJ0QXJyYXkiXSgxNik7Cisg
ICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7CisgICAgICAgIHRoaXMub3BhcXVlU29ydENvbXBh
cmVGbiA9IG9wYXF1ZVNvcnRDb21wYXJlRm47CisgICAgICAgIHRoaXMuYWxwaGFUZXN0U29ydENv
bXBhcmVGbiA9IGFscGhhVGVzdFNvcnRDb21wYXJlRm47CisgICAgICAgIHRoaXMudHJhbnNwYXJl
bnRTb3J0Q29tcGFyZUZuID0gdHJhbnNwYXJlbnRTb3J0Q29tcGFyZUZuOworICAgIH0KKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoUmVuZGVyaW5nR3JvdXAucHJvdG90eXBlLCAib3BhcXVlU29y
dENvbXBhcmVGbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldCB0aGUgb3BhcXVlIHNv
cnQgY29tcGFyaXNvbiBmdW5jdGlvbi4KKyAgICAgICAgICogSWYgbnVsbCB0aGUgc3ViIG1lc2hl
cyB3aWxsIGJlIHJlbmRlciBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGNyZWF0ZWQKKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9v
cGFxdWVTb3J0Q29tcGFyZUZuID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJPcGFxdWUgPSB0aGlzLnJlbmRlck9wYXF1ZVNvcnRl
ZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRo
aXMuX3JlbmRlck9wYXF1ZSA9IFJlbmRlcmluZ0dyb3VwLnJlbmRlclVuc29ydGVkOworICAgICAg
ICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVu
ZGVyaW5nR3JvdXAucHJvdG90eXBlLCAiYWxwaGFUZXN0U29ydENvbXBhcmVGbiIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNldCB0aGUgYWxwaGEgdGVzdCBzb3J0IGNvbXBhcmlzb24gZnVu
Y3Rpb24uCisgICAgICAgICAqIElmIG51bGwgdGhlIHN1YiBtZXNoZXMgd2lsbCBiZSByZW5kZXIg
aW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBjcmVhdGVkCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYWxwaGFUZXN0U29ydENvbXBh
cmVGbiA9IHZhbHVlOworICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fcmVuZGVyQWxwaGFUZXN0ID0gdGhpcy5yZW5kZXJBbHBoYVRlc3RTb3J0ZWQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZW5k
ZXJBbHBoYVRlc3QgPSBSZW5kZXJpbmdHcm91cC5yZW5kZXJVbnNvcnRlZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlbmRlcmlu
Z0dyb3VwLnByb3RvdHlwZSwgInRyYW5zcGFyZW50U29ydENvbXBhcmVGbiIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFNldCB0aGUgdHJhbnNwYXJlbnQgc29ydCBjb21wYXJpc29uIGZ1bmN0
aW9uLgorICAgICAgICAgKiBJZiBudWxsIHRoZSBzdWIgbWVzaGVzIHdpbGwgYmUgcmVuZGVyIGlu
IHRoZSBvcmRlciB0aGV5IHdlcmUgY3JlYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAg
ICAgIHRoaXMuX3RyYW5zcGFyZW50U29ydENvbXBhcmVGbiA9IHZhbHVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNwYXJlbnRT
b3J0Q29tcGFyZUZuID0gUmVuZGVyaW5nR3JvdXAuZGVmYXVsdFRyYW5zcGFyZW50U29ydENvbXBh
cmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJUcmFuc3BhcmVudCA9
IHRoaXMucmVuZGVyVHJhbnNwYXJlbnRTb3J0ZWQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8q
KgorICAgICAqIFJlbmRlciBhbGwgdGhlIHN1YiBtZXNoZXMgY29udGFpbmVkIGluIHRoZSBncm91
cC4KKyAgICAgKiBAcGFyYW0gY3VzdG9tUmVuZGVyRnVuY3Rpb24gVXNlZCB0byBvdmVycmlkZSB0
aGUgZGVmYXVsdCByZW5kZXIgYmVoYXZpb3VyIG9mIHRoZSBncm91cC4KKyAgICAgKiBAcmV0dXJu
cyB0cnVlIGlmIHJlbmRlcmVkIHNvbWUgc3VibWVzaGVzLgorICAgICAqLworICAgIFJlbmRlcmlu
Z0dyb3VwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY3VzdG9tUmVuZGVyRnVuY3Rpb24s
IHJlbmRlclNwcml0ZXMsIHJlbmRlclBhcnRpY2xlcywgYWN0aXZlTWVzaGVzKSB7CisgICAgICAg
IGlmIChjdXN0b21SZW5kZXJGdW5jdGlvbikgeworICAgICAgICAgICAgY3VzdG9tUmVuZGVyRnVu
Y3Rpb24odGhpcy5fb3BhcXVlU3ViTWVzaGVzLCB0aGlzLl9hbHBoYVRlc3RTdWJNZXNoZXMsIHRo
aXMuX3RyYW5zcGFyZW50U3ViTWVzaGVzLCB0aGlzLl9kZXB0aE9ubHlTdWJNZXNoZXMpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9z
Y2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgLy8gRGVwdGggb25seQorICAgICAgICBpZiAodGhp
cy5fZGVwdGhPbmx5U3ViTWVzaGVzLmxlbmd0aCAhPT0gMCkgeworICAgICAgICAgICAgZW5naW5l
LnNldENvbG9yV3JpdGUoZmFsc2UpOworICAgICAgICAgICAgdGhpcy5fcmVuZGVyQWxwaGFUZXN0
KHRoaXMuX2RlcHRoT25seVN1Yk1lc2hlcyk7CisgICAgICAgICAgICBlbmdpbmUuc2V0Q29sb3JX
cml0ZSh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBPcGFxdWUKKyAgICAgICAgaWYgKHRo
aXMuX29wYXF1ZVN1Yk1lc2hlcy5sZW5ndGggIT09IDApIHsKKyAgICAgICAgICAgIHRoaXMuX3Jl
bmRlck9wYXF1ZSh0aGlzLl9vcGFxdWVTdWJNZXNoZXMpOworICAgICAgICB9CisgICAgICAgIC8v
IEFscGhhIHRlc3QKKyAgICAgICAgaWYgKHRoaXMuX2FscGhhVGVzdFN1Yk1lc2hlcy5sZW5ndGgg
IT09IDApIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlckFscGhhVGVzdCh0aGlzLl9hbHBoYVRl
c3RTdWJNZXNoZXMpOworICAgICAgICB9CisgICAgICAgIHZhciBzdGVuY2lsU3RhdGUgPSBlbmdp
bmUuZ2V0U3RlbmNpbEJ1ZmZlcigpOworICAgICAgICBlbmdpbmUuc2V0U3RlbmNpbEJ1ZmZlcihm
YWxzZSk7CisgICAgICAgIC8vIFNwcml0ZXMKKyAgICAgICAgaWYgKHJlbmRlclNwcml0ZXMpIHsK
KyAgICAgICAgICAgIHRoaXMuX3JlbmRlclNwcml0ZXMoKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBQYXJ0aWNsZXMKKyAgICAgICAgaWYgKHJlbmRlclBhcnRpY2xlcykgeworICAgICAgICAgICAg
dGhpcy5fcmVuZGVyUGFydGljbGVzKGFjdGl2ZU1lc2hlcyk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMub25CZWZvcmVUcmFuc3BhcmVudFJlbmRlcmluZykgeworICAgICAgICAgICAgdGhp
cy5vbkJlZm9yZVRyYW5zcGFyZW50UmVuZGVyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8g
VHJhbnNwYXJlbnQKKyAgICAgICAgaWYgKHRoaXMuX3RyYW5zcGFyZW50U3ViTWVzaGVzLmxlbmd0
aCAhPT0gMCkgeworICAgICAgICAgICAgdGhpcy5fcmVuZGVyVHJhbnNwYXJlbnQodGhpcy5fdHJh
bnNwYXJlbnRTdWJNZXNoZXMpOworICAgICAgICAgICAgZW5naW5lLnNldEFscGhhTW9kZShfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0u
QUxQSEFfRElTQUJMRSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2V0IGJhY2sgc3RlbmNpbCB0
byBmYWxzZSBpbiBjYXNlIGl0IGNoYW5nZXMgYmVmb3JlIHRoZSBlZGdlIHJlbmRlcmVyLgorICAg
ICAgICBlbmdpbmUuc2V0U3RlbmNpbEJ1ZmZlcihmYWxzZSk7CisgICAgICAgIC8vIEVkZ2VzCisg
ICAgICAgIGlmICh0aGlzLl9lZGdlc1JlbmRlcmVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIGVkZ2VzUmVuZGVyZXJJbmRleCA9IDA7IGVkZ2VzUmVuZGVyZXJJbmRleCA8IHRoaXMu
X2VkZ2VzUmVuZGVyZXJzLmxlbmd0aDsgZWRnZXNSZW5kZXJlckluZGV4KyspIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9lZGdlc1JlbmRlcmVycy5kYXRhW2VkZ2VzUmVuZGVyZXJJbmRleF0ucmVu
ZGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbmdpbmUuc2V0QWxwaGFNb2RlKF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMi
XS5BTFBIQV9ESVNBQkxFKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXN0b3JlIFN0ZW5jaWwg
c3RhdGUuCisgICAgICAgIGVuZ2luZS5zZXRTdGVuY2lsQnVmZmVyKHN0ZW5jaWxTdGF0ZSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIHRoZSBvcGFxdWUgc3VibWVzaGVzIGluIHRo
ZSBvcmRlciBmcm9tIHRoZSBvcGFxdWVTb3J0Q29tcGFyZUZuLgorICAgICAqIEBwYXJhbSBzdWJN
ZXNoZXMgVGhlIHN1Ym1lc2hlcyB0byByZW5kZXIKKyAgICAgKi8KKyAgICBSZW5kZXJpbmdHcm91
cC5wcm90b3R5cGUucmVuZGVyT3BhcXVlU29ydGVkID0gZnVuY3Rpb24gKHN1Yk1lc2hlcykgewor
ICAgICAgICByZXR1cm4gUmVuZGVyaW5nR3JvdXAucmVuZGVyU29ydGVkKHN1Yk1lc2hlcywgdGhp
cy5fb3BhcXVlU29ydENvbXBhcmVGbiwgdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLCBmYWxzZSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIHRoZSBvcGFxdWUgc3VibWVzaGVzIGlu
IHRoZSBvcmRlciBmcm9tIHRoZSBhbHBoYXRlc3RTb3J0Q29tcGFyZUZuLgorICAgICAqIEBwYXJh
bSBzdWJNZXNoZXMgVGhlIHN1Ym1lc2hlcyB0byByZW5kZXIKKyAgICAgKi8KKyAgICBSZW5kZXJp
bmdHcm91cC5wcm90b3R5cGUucmVuZGVyQWxwaGFUZXN0U29ydGVkID0gZnVuY3Rpb24gKHN1Yk1l
c2hlcykgeworICAgICAgICByZXR1cm4gUmVuZGVyaW5nR3JvdXAucmVuZGVyU29ydGVkKHN1Yk1l
c2hlcywgdGhpcy5fYWxwaGFUZXN0U29ydENvbXBhcmVGbiwgdGhpcy5fc2NlbmUuYWN0aXZlQ2Ft
ZXJhLCBmYWxzZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIHRoZSBvcGFxdWUg
c3VibWVzaGVzIGluIHRoZSBvcmRlciBmcm9tIHRoZSB0cmFuc3BhcmVudFNvcnRDb21wYXJlRm4u
CisgICAgICogQHBhcmFtIHN1Yk1lc2hlcyBUaGUgc3VibWVzaGVzIHRvIHJlbmRlcgorICAgICAq
LworICAgIFJlbmRlcmluZ0dyb3VwLnByb3RvdHlwZS5yZW5kZXJUcmFuc3BhcmVudFNvcnRlZCA9
IGZ1bmN0aW9uIChzdWJNZXNoZXMpIHsKKyAgICAgICAgcmV0dXJuIFJlbmRlcmluZ0dyb3VwLnJl
bmRlclNvcnRlZChzdWJNZXNoZXMsIHRoaXMuX3RyYW5zcGFyZW50U29ydENvbXBhcmVGbiwgdGhp
cy5fc2NlbmUuYWN0aXZlQ2FtZXJhLCB0cnVlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
bmRlcnMgdGhlIHN1Ym1lc2hlcyBpbiBhIHNwZWNpZmllZCBvcmRlci4KKyAgICAgKiBAcGFyYW0g
c3ViTWVzaGVzIFRoZSBzdWJtZXNoZXMgdG8gc29ydCBiZWZvcmUgcmVuZGVyCisgICAgICogQHBh
cmFtIHNvcnRDb21wYXJlRm4gVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gdXNlIHRvIHNvcnQKKyAg
ICAgKiBAcGFyYW0gY2FtZXJhUG9zaXRpb24gVGhlIGNhbWVyYSBwb3NpdGlvbiB1c2UgdG8gcHJl
cHJvY2VzcyB0aGUgc3VibWVzaGVzIHRvIGhlbHAgc29ydGluZworICAgICAqIEBwYXJhbSB0cmFu
c3BhcmVudCBTcGVjaWZpZXMgdG8gYWN0aXZhdGUgYmxlbmRpbmcgaWYgdHJ1ZQorICAgICAqLwor
ICAgIFJlbmRlcmluZ0dyb3VwLnJlbmRlclNvcnRlZCA9IGZ1bmN0aW9uIChzdWJNZXNoZXMsIHNv
cnRDb21wYXJlRm4sIGNhbWVyYSwgdHJhbnNwYXJlbnQpIHsKKyAgICAgICAgdmFyIHN1YkluZGV4
ID0gMDsKKyAgICAgICAgdmFyIHN1Yk1lc2g7CisgICAgICAgIHZhciBjYW1lcmFQb3NpdGlvbiA9
IGNhbWVyYSA/IGNhbWVyYS5nbG9iYWxQb3NpdGlvbiA6IFJlbmRlcmluZ0dyb3VwLl96ZXJvVmVj
dG9yOworICAgICAgICBmb3IgKDsgc3ViSW5kZXggPCBzdWJNZXNoZXMubGVuZ3RoOyBzdWJJbmRl
eCsrKSB7CisgICAgICAgICAgICBzdWJNZXNoID0gc3ViTWVzaGVzLmRhdGFbc3ViSW5kZXhdOwor
ICAgICAgICAgICAgc3ViTWVzaC5fYWxwaGFJbmRleCA9IHN1Yk1lc2guZ2V0TWVzaCgpLmFscGhh
SW5kZXg7CisgICAgICAgICAgICBzdWJNZXNoLl9kaXN0YW5jZVRvQ2FtZXJhID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5EaXN0YW5j
ZShzdWJNZXNoLmdldEJvdW5kaW5nSW5mbygpLmJvdW5kaW5nU3BoZXJlLmNlbnRlcldvcmxkLCBj
YW1lcmFQb3NpdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNvcnRlZEFycmF5ID0gc3Vi
TWVzaGVzLmRhdGEuc2xpY2UoMCwgc3ViTWVzaGVzLmxlbmd0aCk7CisgICAgICAgIGlmIChzb3J0
Q29tcGFyZUZuKSB7CisgICAgICAgICAgICBzb3J0ZWRBcnJheS5zb3J0KHNvcnRDb21wYXJlRm4p
OworICAgICAgICB9CisgICAgICAgIGZvciAoc3ViSW5kZXggPSAwOyBzdWJJbmRleCA8IHNvcnRl
ZEFycmF5Lmxlbmd0aDsgc3ViSW5kZXgrKykgeworICAgICAgICAgICAgc3ViTWVzaCA9IHNvcnRl
ZEFycmF5W3N1YkluZGV4XTsKKyAgICAgICAgICAgIGlmICh0cmFuc3BhcmVudCkgeworICAgICAg
ICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHN1Yk1lc2guZ2V0TWF0ZXJpYWwoKTsKKyAgICAgICAg
ICAgICAgICBpZiAobWF0ZXJpYWwgJiYgbWF0ZXJpYWwubmVlZERlcHRoUHJlUGFzcykgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgZW5naW5lID0gbWF0ZXJpYWwuZ2V0U2NlbmUoKS5nZXRFbmdp
bmUoKTsKKyAgICAgICAgICAgICAgICAgICAgZW5naW5lLnNldENvbG9yV3JpdGUoZmFsc2UpOwor
ICAgICAgICAgICAgICAgICAgICBlbmdpbmUuc2V0QWxwaGFNb2RlKF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMiXS5BTFBIQV9ESVNBQkxF
KTsKKyAgICAgICAgICAgICAgICAgICAgc3ViTWVzaC5yZW5kZXIoZmFsc2UpOworICAgICAgICAg
ICAgICAgICAgICBlbmdpbmUuc2V0Q29sb3JXcml0ZSh0cnVlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdWJNZXNoLnJlbmRlcih0cmFuc3BhcmVudCk7
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbmRlcnMgdGhlIHN1Ym1lc2hl
cyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGRpc3BhdGNoZWQgKG5vIHNvcnQgYXBwbGllZCkuCisg
ICAgICogQHBhcmFtIHN1Yk1lc2hlcyBUaGUgc3VibWVzaGVzIHRvIHJlbmRlcgorICAgICAqLwor
ICAgIFJlbmRlcmluZ0dyb3VwLnJlbmRlclVuc29ydGVkID0gZnVuY3Rpb24gKHN1Yk1lc2hlcykg
eworICAgICAgICBmb3IgKHZhciBzdWJJbmRleCA9IDA7IHN1YkluZGV4IDwgc3ViTWVzaGVzLmxl
bmd0aDsgc3ViSW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHN1Ym1lc2ggPSBzdWJNZXNoZXMu
ZGF0YVtzdWJJbmRleF07CisgICAgICAgICAgICBzdWJtZXNoLnJlbmRlcihmYWxzZSk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEJ1aWxkIGluIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBhcHBsaWVkIHRvIGVuc3VyZSBtZXNoZXMgb2YgYSBzcGVjaWFsIHF1ZXVlIChvcGFxdWUs
IGFscGhhIHRlc3QsIHRyYW5zcGFyZW50KQorICAgICAqIGFyZSByZW5kZXJlZCBiYWNrIHRvIGZy
b250IGlmIGluIHRoZSBzYW1lIGFscGhhIGluZGV4LgorICAgICAqCisgICAgICogQHBhcmFtIGEg
VGhlIGZpcnN0IHN1Ym1lc2gKKyAgICAgKiBAcGFyYW0gYiBUaGUgc2Vjb25kIHN1Ym1lc2gKKyAg
ICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uCisgICAgICovCisgICAg
UmVuZGVyaW5nR3JvdXAuZGVmYXVsdFRyYW5zcGFyZW50U29ydENvbXBhcmUgPSBmdW5jdGlvbiAo
YSwgYikgeworICAgICAgICAvLyBBbHBoYSBpbmRleCBmaXJzdAorICAgICAgICBpZiAoYS5fYWxw
aGFJbmRleCA+IGIuX2FscGhhSW5kZXgpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAg
ICB9CisgICAgICAgIGlmIChhLl9hbHBoYUluZGV4IDwgYi5fYWxwaGFJbmRleCkgeworICAgICAg
ICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIC8vIFRoZW4gZGlzdGFuY2UgdG8g
Y2FtZXJhCisgICAgICAgIHJldHVybiBSZW5kZXJpbmdHcm91cC5iYWNrVG9Gcm9udFNvcnRDb21w
YXJlKGEsIGIpOworICAgIH07CisgICAgLyoqCisgICAgICogQnVpbGQgaW4gZnVuY3Rpb24gd2hp
Y2ggY2FuIGJlIGFwcGxpZWQgdG8gZW5zdXJlIG1lc2hlcyBvZiBhIHNwZWNpYWwgcXVldWUgKG9w
YXF1ZSwgYWxwaGEgdGVzdCwgdHJhbnNwYXJlbnQpCisgICAgICogYXJlIHJlbmRlcmVkIGJhY2sg
dG8gZnJvbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYSBUaGUgZmlyc3Qgc3VibWVzaAorICAg
ICAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgc3VibWVzaAorICAgICAqIEByZXR1cm5zIFRoZSByZXN1
bHQgb2YgdGhlIGNvbXBhcmlzb24KKyAgICAgKi8KKyAgICBSZW5kZXJpbmdHcm91cC5iYWNrVG9G
cm9udFNvcnRDb21wYXJlID0gZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAgICAgLy8gVGhlbiBkaXN0
YW5jZSB0byBjYW1lcmEKKyAgICAgICAgaWYgKGEuX2Rpc3RhbmNlVG9DYW1lcmEgPCBiLl9kaXN0
YW5jZVRvQ2FtZXJhKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoYS5fZGlzdGFuY2VUb0NhbWVyYSA+IGIuX2Rpc3RhbmNlVG9DYW1lcmEpIHsKKyAgICAg
ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIEJ1aWxkIGluIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBhcHBsaWVkIHRv
IGVuc3VyZSBtZXNoZXMgb2YgYSBzcGVjaWFsIHF1ZXVlIChvcGFxdWUsIGFscGhhIHRlc3QsIHRy
YW5zcGFyZW50KQorICAgICAqIGFyZSByZW5kZXJlZCBmcm9udCB0byBiYWNrIChwcmV2ZW50IG92
ZXJkcmF3KS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhIFRoZSBmaXJzdCBzdWJtZXNoCisgICAg
ICogQHBhcmFtIGIgVGhlIHNlY29uZCBzdWJtZXNoCisgICAgICogQHJldHVybnMgVGhlIHJlc3Vs
dCBvZiB0aGUgY29tcGFyaXNvbgorICAgICAqLworICAgIFJlbmRlcmluZ0dyb3VwLmZyb250VG9C
YWNrU29ydENvbXBhcmUgPSBmdW5jdGlvbiAoYSwgYikgeworICAgICAgICAvLyBUaGVuIGRpc3Rh
bmNlIHRvIGNhbWVyYQorICAgICAgICBpZiAoYS5fZGlzdGFuY2VUb0NhbWVyYSA8IGIuX2Rpc3Rh
bmNlVG9DYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoYS5fZGlzdGFuY2VUb0NhbWVyYSA+IGIuX2Rpc3RhbmNlVG9DYW1lcmEpIHsKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmVzZXRzIHRoZSBkaWZmZXJlbnQgbGlzdHMgb2Ygc3VibWVzaGVzIHRv
IHByZXBhcmUgYSBuZXcgZnJhbWUuCisgICAgICovCisgICAgUmVuZGVyaW5nR3JvdXAucHJvdG90
eXBlLnByZXBhcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX29wYXF1ZVN1Yk1lc2hl
cy5yZXNldCgpOworICAgICAgICB0aGlzLl90cmFuc3BhcmVudFN1Yk1lc2hlcy5yZXNldCgpOwor
ICAgICAgICB0aGlzLl9hbHBoYVRlc3RTdWJNZXNoZXMucmVzZXQoKTsKKyAgICAgICAgdGhpcy5f
ZGVwdGhPbmx5U3ViTWVzaGVzLnJlc2V0KCk7CisgICAgICAgIHRoaXMuX3BhcnRpY2xlU3lzdGVt
cy5yZXNldCgpOworICAgICAgICB0aGlzLl9zcHJpdGVNYW5hZ2Vycy5yZXNldCgpOworICAgICAg
ICB0aGlzLl9lZGdlc1JlbmRlcmVycy5yZXNldCgpOworICAgIH07CisgICAgUmVuZGVyaW5nR3Jv
dXAucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX29wYXF1
ZVN1Yk1lc2hlcy5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMuX3RyYW5zcGFyZW50U3ViTWVzaGVz
LmRpc3Bvc2UoKTsKKyAgICAgICAgdGhpcy5fYWxwaGFUZXN0U3ViTWVzaGVzLmRpc3Bvc2UoKTsK
KyAgICAgICAgdGhpcy5fZGVwdGhPbmx5U3ViTWVzaGVzLmRpc3Bvc2UoKTsKKyAgICAgICAgdGhp
cy5fcGFydGljbGVTeXN0ZW1zLmRpc3Bvc2UoKTsKKyAgICAgICAgdGhpcy5fc3ByaXRlTWFuYWdl
cnMuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9lZGdlc1JlbmRlcmVycy5kaXNwb3NlKCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnNlcnRzIHRoZSBzdWJtZXNoIGluIGl0cyBjb3JyZWN0
IHF1ZXVlIGRlcGVuZGluZyBvbiBpdHMgbWF0ZXJpYWwuCisgICAgICogQHBhcmFtIHN1Yk1lc2gg
VGhlIHN1Ym1lc2ggdG8gZGlzcGF0Y2gKKyAgICAgKiBAcGFyYW0gW21lc2hdIE9wdGlvbmFsIHJl
ZmVyZW5jZSB0byB0aGUgc3VibWVzaGVzJ3MgbWVzaC4gUHJvdmlkZSBpZiB5b3UgaGF2ZSBhbiBl
eGl0aW5nIHJlZmVyZW5jZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgorICAgICAqIEBwYXJhbSBb
bWF0ZXJpYWxdIE9wdGlvbmFsIHJlZmVyZW5jZSB0byB0aGUgc3VibWVzaGVzJ3MgbWF0ZXJpYWwu
IFByb3ZpZGUgaWYgeW91IGhhdmUgYW4gZXhpdGluZyByZWZlcmVuY2UgdG8gaW1wcm92ZSBwZXJm
b3JtYW5jZS4KKyAgICAgKi8KKyAgICBSZW5kZXJpbmdHcm91cC5wcm90b3R5cGUuZGlzcGF0Y2gg
PSBmdW5jdGlvbiAoc3ViTWVzaCwgbWVzaCwgbWF0ZXJpYWwpIHsKKyAgICAgICAgLy8gR2V0IG1l
c2ggYW5kIG1hdGVyaWFscyBpZiBub3QgcHJvdmlkZWQKKyAgICAgICAgaWYgKG1lc2ggPT09IHVu
ZGVmaW5lZCkgeworICAgICAgICAgICAgbWVzaCA9IHN1Yk1lc2guZ2V0TWVzaCgpOworICAgICAg
ICB9CisgICAgICAgIGlmIChtYXRlcmlhbCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBt
YXRlcmlhbCA9IHN1Yk1lc2guZ2V0TWF0ZXJpYWwoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
bWF0ZXJpYWwgPT09IG51bGwgfHwgbWF0ZXJpYWwgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtYXRlcmlhbC5uZWVkQWxwaGFCbGVu
ZGluZ0Zvck1lc2gobWVzaCkpIHsgLy8gVHJhbnNwYXJlbnQKKyAgICAgICAgICAgIHRoaXMuX3Ry
YW5zcGFyZW50U3ViTWVzaGVzLnB1c2goc3ViTWVzaCk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAobWF0ZXJpYWwubmVlZEFscGhhVGVzdGluZygpKSB7IC8vIEFscGhhIHRlc3QKKyAgICAg
ICAgICAgIGlmIChtYXRlcmlhbC5uZWVkRGVwdGhQcmVQYXNzKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fZGVwdGhPbmx5U3ViTWVzaGVzLnB1c2goc3ViTWVzaCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl9hbHBoYVRlc3RTdWJNZXNoZXMucHVzaChzdWJNZXNoKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtYXRlcmlhbC5uZWVkRGVwdGhQ
cmVQYXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZGVwdGhPbmx5U3ViTWVzaGVzLnB1c2go
c3ViTWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vcGFxdWVTdWJNZXNo
ZXMucHVzaChzdWJNZXNoKTsgLy8gT3BhcXVlCisgICAgICAgIH0KKyAgICAgICAgbWVzaC5fcmVu
ZGVyaW5nR3JvdXAgPSB0aGlzOworICAgICAgICBpZiAobWVzaC5fZWRnZXNSZW5kZXJlciAmJiBt
ZXNoLl9lZGdlc1JlbmRlcmVyLmlzRW5hYmxlZCkgeworICAgICAgICAgICAgdGhpcy5fZWRnZXNS
ZW5kZXJlcnMucHVzaChtZXNoLl9lZGdlc1JlbmRlcmVyKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgUmVuZGVyaW5nR3JvdXAucHJvdG90eXBlLmRpc3BhdGNoU3ByaXRlcyA9IGZ1bmN0aW9uIChz
cHJpdGVNYW5hZ2VyKSB7CisgICAgICAgIHRoaXMuX3Nwcml0ZU1hbmFnZXJzLnB1c2goc3ByaXRl
TWFuYWdlcik7CisgICAgfTsKKyAgICBSZW5kZXJpbmdHcm91cC5wcm90b3R5cGUuZGlzcGF0Y2hQ
YXJ0aWNsZXMgPSBmdW5jdGlvbiAocGFydGljbGVTeXN0ZW0pIHsKKyAgICAgICAgdGhpcy5fcGFy
dGljbGVTeXN0ZW1zLnB1c2gocGFydGljbGVTeXN0ZW0pOworICAgIH07CisgICAgUmVuZGVyaW5n
R3JvdXAucHJvdG90eXBlLl9yZW5kZXJQYXJ0aWNsZXMgPSBmdW5jdGlvbiAoYWN0aXZlTWVzaGVz
KSB7CisgICAgICAgIGlmICh0aGlzLl9wYXJ0aWNsZVN5c3RlbXMubGVuZ3RoID09PSAwKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gUGFydGljbGVzCisgICAg
ICAgIHZhciBhY3RpdmVDYW1lcmEgPSB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmE7CisgICAgICAg
IHRoaXMuX3NjZW5lLm9uQmVmb3JlUGFydGljbGVzUmVuZGVyaW5nT2JzZXJ2YWJsZS5ub3RpZnlP
YnNlcnZlcnModGhpcy5fc2NlbmUpOworICAgICAgICBmb3IgKHZhciBwYXJ0aWNsZUluZGV4ID0g
MDsgcGFydGljbGVJbmRleCA8IHRoaXMuX3BhcnRpY2xlU3lzdGVtcy5sZW5ndGg7IHBhcnRpY2xl
SW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHBhcnRpY2xlU3lzdGVtID0gdGhpcy5fcGFydGlj
bGVTeXN0ZW1zLmRhdGFbcGFydGljbGVJbmRleF07CisgICAgICAgICAgICBpZiAoKGFjdGl2ZUNh
bWVyYSAmJiBhY3RpdmVDYW1lcmEubGF5ZXJNYXNrICYgcGFydGljbGVTeXN0ZW0ubGF5ZXJNYXNr
KSA9PT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdmFyIGVtaXR0ZXIgPSBwYXJ0aWNsZVN5c3RlbS5lbWl0dGVyOworICAgICAgICAg
ICAgaWYgKCFlbWl0dGVyLnBvc2l0aW9uIHx8ICFhY3RpdmVNZXNoZXMgfHwgYWN0aXZlTWVzaGVz
LmluZGV4T2YoZW1pdHRlcikgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUu
X2FjdGl2ZVBhcnRpY2xlcy5hZGRDb3VudChwYXJ0aWNsZVN5c3RlbS5yZW5kZXIoKSwgZmFsc2Up
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5lLm9uQWZ0ZXJQ
YXJ0aWNsZXNSZW5kZXJpbmdPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzLl9zY2VuZSk7
CisgICAgfTsKKyAgICBSZW5kZXJpbmdHcm91cC5wcm90b3R5cGUuX3JlbmRlclNwcml0ZXMgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fc2NlbmUuc3ByaXRlc0VuYWJsZWQgfHwg
dGhpcy5fc3ByaXRlTWFuYWdlcnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgLy8gU3ByaXRlcworICAgICAgICB2YXIgYWN0aXZlQ2FtZXJh
ID0gdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhOworICAgICAgICB0aGlzLl9zY2VuZS5vbkJlZm9y
ZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzLl9zY2VuZSk7
CisgICAgICAgIGZvciAodmFyIGlkID0gMDsgaWQgPCB0aGlzLl9zcHJpdGVNYW5hZ2Vycy5sZW5n
dGg7IGlkKyspIHsKKyAgICAgICAgICAgIHZhciBzcHJpdGVNYW5hZ2VyID0gdGhpcy5fc3ByaXRl
TWFuYWdlcnMuZGF0YVtpZF07CisgICAgICAgICAgICBpZiAoKChhY3RpdmVDYW1lcmEgJiYgYWN0
aXZlQ2FtZXJhLmxheWVyTWFzayAmIHNwcml0ZU1hbmFnZXIubGF5ZXJNYXNrKSAhPT0gMCkpIHsK
KyAgICAgICAgICAgICAgICBzcHJpdGVNYW5hZ2VyLnJlbmRlcigpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5lLm9uQWZ0ZXJTcHJpdGVzUmVuZGVyaW5nT2Jz
ZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcy5fc2NlbmUpOworICAgIH07CisgICAgUmVuZGVy
aW5nR3JvdXAuX3plcm9WZWN0b3IgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICByZXR1cm4gUmVuZGVyaW5nR3Jv
dXA7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1JlbmRlcmluZy9yZW5kZXJp
bmdNYW5hZ2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vUmVuZGVyaW5nL3JlbmRlcmluZ01hbmFnZXIudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IFJlbmRlcmluZ0dyb3VwSW5mbywgUmVuZGVyaW5nTWFuYWdlciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJpbmdHcm91cEluZm8iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFJlbmRlcmluZ0dyb3VwSW5mbzsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJp
bmdNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSZW5kZXJpbmdNYW5hZ2VyOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmVuZGVyaW5nR3JvdXBfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmVuZGVyaW5nR3JvdXAgKi8g
Ii4vUmVuZGVyaW5nL3JlbmRlcmluZ0dyb3VwLnRzIik7CisKKy8qKgorICogVGhpcyBjbGFzcyBp
cyB1c2VkIGJ5IHRoZSBvblJlbmRlcmluZ0dyb3VwT2JzZXJ2YWJsZQorICovCit2YXIgUmVuZGVy
aW5nR3JvdXBJbmZvID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9u
IFJlbmRlcmluZ0dyb3VwSW5mbygpIHsKKyAgICB9CisgICAgcmV0dXJuIFJlbmRlcmluZ0dyb3Vw
SW5mbzsKK30oKSk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgbWFuYWdlciByZXNwb25zaWJsZSBv
ZiBhbGwgdGhlIHJlbmRlcmluZyBmb3IgbWVzaGVzIHNwcml0ZXMgYW5kIHBhcnRpY2xlcy4KKyAq
IEl0IGlzIGVuYWJsZSB0byBtYW5hZ2UgdGhlIGRpZmZlcmVudCBncm91cHMgYXMgd2VsbCBhcyB0
aGUgZGlmZmVyZW50IG5lY2Vzc2FyeSBzb3J0IGZ1bmN0aW9ucy4KKyAqIFRoaXMgc2hvdWxkIG5v
dCBiZSB1c2VkIGRpcmVjdGx5IGFzaWRlIG9mIHRoZSBmZXcgc3RhdGljIGNvbmZpZ3VyYXRpb25z
CisgKi8KK3ZhciBSZW5kZXJpbmdNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyByZW5kZXJpbmcgZ3JvdXAgZm9y
IGEgcGFydGljdWxhciBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2Vu
ZSB0aGUgZ3JvdXBzIGJlbG9uZ3MgdG8KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBSZW5kZXJpbmdN
YW5hZ2VyKHNjZW5lKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLl91c2VTY2VuZUF1dG9DbGVhclNldHVwID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX3JlbmRlcmluZ0dyb3VwcyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLl9h
dXRvQ2xlYXJEZXB0aFN0ZW5jaWwgPSB7fTsKKyAgICAgICAgdGhpcy5fY3VzdG9tT3BhcXVlU29y
dENvbXBhcmVGbiA9IHt9OworICAgICAgICB0aGlzLl9jdXN0b21BbHBoYVRlc3RTb3J0Q29tcGFy
ZUZuID0ge307CisgICAgICAgIHRoaXMuX2N1c3RvbVRyYW5zcGFyZW50U29ydENvbXBhcmVGbiA9
IHt9OworICAgICAgICB0aGlzLl9yZW5kZXJpbmdHcm91cEluZm8gPSBuZXcgUmVuZGVyaW5nR3Jv
dXBJbmZvKCk7CisgICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7CisgICAgICAgIGZvciAodmFy
IGkgPSBSZW5kZXJpbmdNYW5hZ2VyLk1JTl9SRU5ERVJJTkdHUk9VUFM7IGkgPCBSZW5kZXJpbmdN
YW5hZ2VyLk1BWF9SRU5ERVJJTkdHUk9VUFM7IGkrKykgeworICAgICAgICAgICAgdGhpcy5fYXV0
b0NsZWFyRGVwdGhTdGVuY2lsW2ldID0geyBhdXRvQ2xlYXI6IHRydWUsIGRlcHRoOiB0cnVlLCBz
dGVuY2lsOiB0cnVlIH07CisgICAgICAgIH0KKyAgICB9CisgICAgUmVuZGVyaW5nTWFuYWdlci5w
cm90b3R5cGUuX2NsZWFyRGVwdGhTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24gKGRlcHRoLCBzdGVu
Y2lsKSB7CisgICAgICAgIGlmIChkZXB0aCA9PT0gdm9pZCAwKSB7IGRlcHRoID0gdHJ1ZTsgfQor
ICAgICAgICBpZiAoc3RlbmNpbCA9PT0gdm9pZCAwKSB7IHN0ZW5jaWwgPSB0cnVlOyB9CisgICAg
ICAgIGlmICh0aGlzLl9kZXB0aFN0ZW5jaWxCdWZmZXJBbHJlYWR5Q2xlYW5lZCkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5lLmdldEVuZ2luZSgp
LmNsZWFyKG51bGwsIGZhbHNlLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgICAgIHRoaXMuX2RlcHRo
U3RlbmNpbEJ1ZmZlckFscmVhZHlDbGVhbmVkID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlbmRlcnMgdGhlIGVudGlyZSBtYW5hZ2VkIGdyb3Vwcy4gVGhpcyBpcyB1c2VkIGJ5IHRo
ZSBzY2VuZSBvciB0aGUgZGlmZmVyZW50IHJlbm5kZXIgdGFyZ2V0cy4KKyAgICAgKiBAaGlkZGVu
CisgICAgICovCisgICAgUmVuZGVyaW5nTWFuYWdlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rp
b24gKGN1c3RvbVJlbmRlckZ1bmN0aW9uLCBhY3RpdmVNZXNoZXMsIHJlbmRlclBhcnRpY2xlcywg
cmVuZGVyU3ByaXRlcykgeworICAgICAgICAvLyBVcGRhdGUgdGhlIG9ic2VydmFibGUgY29udGV4
dCAobm90IG51bGwgYXMgaXQgb25seSBnb2VzIGF3YXkgb24gZGlzcG9zZSkKKyAgICAgICAgdmFy
IGluZm8gPSB0aGlzLl9yZW5kZXJpbmdHcm91cEluZm87CisgICAgICAgIGluZm8uc2NlbmUgPSB0
aGlzLl9zY2VuZTsKKyAgICAgICAgaW5mby5jYW1lcmEgPSB0aGlzLl9zY2VuZS5hY3RpdmVDYW1l
cmE7CisgICAgICAgIC8vIERpc3BhdGNoIHNwcml0ZXMKKyAgICAgICAgaWYgKHRoaXMuX3NjZW5l
LnNwcml0ZU1hbmFnZXJzICYmIHJlbmRlclNwcml0ZXMpIHsKKyAgICAgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9zY2VuZS5zcHJpdGVNYW5hZ2Vycy5sZW5ndGg7IGlu
ZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbWFuYWdlciA9IHRoaXMuX3NjZW5lLnNwcml0
ZU1hbmFnZXJzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoU3ByaXRlcyht
YW5hZ2VyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBSZW5kZXIKKyAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSBSZW5kZXJpbmdNYW5hZ2VyLk1JTl9SRU5ERVJJTkdHUk9V
UFM7IGluZGV4IDwgUmVuZGVyaW5nTWFuYWdlci5NQVhfUkVOREVSSU5HR1JPVVBTOyBpbmRleCsr
KSB7CisgICAgICAgICAgICB0aGlzLl9kZXB0aFN0ZW5jaWxCdWZmZXJBbHJlYWR5Q2xlYW5lZCA9
IGluZGV4ID09PSBSZW5kZXJpbmdNYW5hZ2VyLk1JTl9SRU5ERVJJTkdHUk9VUFM7CisgICAgICAg
ICAgICB2YXIgcmVuZGVyaW5nR3JvdXAgPSB0aGlzLl9yZW5kZXJpbmdHcm91cHNbaW5kZXhdOwor
ICAgICAgICAgICAgaWYgKCFyZW5kZXJpbmdHcm91cCkgeworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJlbmRlcmluZ0dyb3VwTWFzayA9
IE1hdGgucG93KDIsIGluZGV4KTsKKyAgICAgICAgICAgIGluZm8ucmVuZGVyaW5nR3JvdXBJZCA9
IGluZGV4OworICAgICAgICAgICAgLy8gQmVmb3JlIE9ic2VydmFibGUKKyAgICAgICAgICAgIHRo
aXMuX3NjZW5lLm9uQmVmb3JlUmVuZGVyaW5nR3JvdXBPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyhpbmZvLCByZW5kZXJpbmdHcm91cE1hc2spOworICAgICAgICAgICAgLy8gQ2xlYXIgZGVwdGgv
c3RlbmNpbCBpZiBuZWVkZWQKKyAgICAgICAgICAgIGlmIChSZW5kZXJpbmdNYW5hZ2VyLkFVVE9D
TEVBUikgeworICAgICAgICAgICAgICAgIHZhciBhdXRvQ2xlYXIgPSB0aGlzLl91c2VTY2VuZUF1
dG9DbGVhclNldHVwID8KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuZ2V0QXV0b0Ns
ZWFyRGVwdGhTdGVuY2lsU2V0dXAoaW5kZXgpIDoKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
YXV0b0NsZWFyRGVwdGhTdGVuY2lsW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0b0Ns
ZWFyICYmIGF1dG9DbGVhci5hdXRvQ2xlYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
Y2xlYXJEZXB0aFN0ZW5jaWxCdWZmZXIoYXV0b0NsZWFyLmRlcHRoLCBhdXRvQ2xlYXIuc3RlbmNp
bCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUmVu
ZGVyCisgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fc2NlbmUuX2JlZm9y
ZVJlbmRlcmluZ0dyb3VwRHJhd1N0YWdlOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAg
ICAgICAgICAgIHZhciBzdGVwID0gX2FbX2ldOworICAgICAgICAgICAgICAgIHN0ZXAuYWN0aW9u
KGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbmRlcmluZ0dyb3VwLnJlbmRl
cihjdXN0b21SZW5kZXJGdW5jdGlvbiwgcmVuZGVyU3ByaXRlcywgcmVuZGVyUGFydGljbGVzLCBh
Y3RpdmVNZXNoZXMpOworICAgICAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBfYyA9IHRoaXMuX3Nj
ZW5lLl9hZnRlclJlbmRlcmluZ0dyb3VwRHJhd1N0YWdlOyBfYiA8IF9jLmxlbmd0aDsgX2IrKykg
eworICAgICAgICAgICAgICAgIHZhciBzdGVwID0gX2NbX2JdOworICAgICAgICAgICAgICAgIHN0
ZXAuYWN0aW9uKGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEFmdGVyIE9i
c2VydmFibGUKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLm9uQWZ0ZXJSZW5kZXJpbmdHcm91cE9i
c2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGluZm8sIHJlbmRlcmluZ0dyb3VwTWFzayk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlc2V0cyB0aGUgZGlmZmVyZW50IGluZm9y
bWF0aW9uIG9mIHRoZSBncm91cCB0byBwcmVwYXJlIGEgbmV3IGZyYW1lCisgICAgICogQGhpZGRl
bgorICAgICAqLworICAgIFJlbmRlcmluZ01hbmFnZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IFJlbmRlcmluZ01hbmFnZXIuTUlOX1JF
TkRFUklOR0dST1VQUzsgaW5kZXggPCBSZW5kZXJpbmdNYW5hZ2VyLk1BWF9SRU5ERVJJTkdHUk9V
UFM7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciByZW5kZXJpbmdHcm91cCA9IHRoaXMuX3Jl
bmRlcmluZ0dyb3Vwc1tpbmRleF07CisgICAgICAgICAgICBpZiAocmVuZGVyaW5nR3JvdXApIHsK
KyAgICAgICAgICAgICAgICByZW5kZXJpbmdHcm91cC5wcmVwYXJlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2UgYW5kIHJlbGVhc2Ug
dGhlIGdyb3VwIGFuZCBpdHMgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgICAgICogQGhpZGRlbgor
ICAgICAqLworICAgIFJlbmRlcmluZ01hbmFnZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRoaXMuZnJlZVJlbmRlcmluZ0dyb3VwcygpOworICAgICAgICB0aGlz
Ll9yZW5kZXJpbmdHcm91cHMubGVuZ3RoID0gMDsKKyAgICAgICAgdGhpcy5fcmVuZGVyaW5nR3Jv
dXBJbmZvID0gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsZWFyIHRoZSBpbmZvIHJl
bGF0ZWQgdG8gcmVuZGVyaW5nIGdyb3VwcyBwcmV2ZW50aW5nIHJldGVudGlvbiBwb2ludHMgZHVy
aW5nIGRpc3Bvc2UuCisgICAgICovCisgICAgUmVuZGVyaW5nTWFuYWdlci5wcm90b3R5cGUuZnJl
ZVJlbmRlcmluZ0dyb3VwcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSBSZW5kZXJpbmdNYW5hZ2VyLk1JTl9SRU5ERVJJTkdHUk9VUFM7IGluZGV4IDwgUmVuZGVyaW5n
TWFuYWdlci5NQVhfUkVOREVSSU5HR1JPVVBTOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIg
cmVuZGVyaW5nR3JvdXAgPSB0aGlzLl9yZW5kZXJpbmdHcm91cHNbaW5kZXhdOworICAgICAgICAg
ICAgaWYgKHJlbmRlcmluZ0dyb3VwKSB7CisgICAgICAgICAgICAgICAgcmVuZGVyaW5nR3JvdXAu
ZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBSZW5kZXJp
bmdNYW5hZ2VyLnByb3RvdHlwZS5fcHJlcGFyZVJlbmRlcmluZ0dyb3VwID0gZnVuY3Rpb24gKHJl
bmRlcmluZ0dyb3VwSWQpIHsKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmluZ0dyb3Vwc1tyZW5k
ZXJpbmdHcm91cElkXSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJp
bmdHcm91cHNbcmVuZGVyaW5nR3JvdXBJZF0gPSBuZXcgX3JlbmRlcmluZ0dyb3VwX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlJlbmRlcmluZ0dyb3VwIl0ocmVuZGVyaW5nR3JvdXBJZCwg
dGhpcy5fc2NlbmUsIHRoaXMuX2N1c3RvbU9wYXF1ZVNvcnRDb21wYXJlRm5bcmVuZGVyaW5nR3Jv
dXBJZF0sIHRoaXMuX2N1c3RvbUFscGhhVGVzdFNvcnRDb21wYXJlRm5bcmVuZGVyaW5nR3JvdXBJ
ZF0sIHRoaXMuX2N1c3RvbVRyYW5zcGFyZW50U29ydENvbXBhcmVGbltyZW5kZXJpbmdHcm91cElk
XSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBhIHNwcml0ZSBtYW5h
Z2VyIHRvIHRoZSByZW5kZXJpbmcgbWFuYWdlciBpbiBvcmRlciB0byByZW5kZXIgaXQgdGhpcyBm
cmFtZS4KKyAgICAgKiBAcGFyYW0gc3ByaXRlTWFuYWdlciBEZWZpbmUgdGhlIHNwcml0ZSBtYW5h
Z2VyIHRvIHJlbmRlcgorICAgICAqLworICAgIFJlbmRlcmluZ01hbmFnZXIucHJvdG90eXBlLmRp
c3BhdGNoU3ByaXRlcyA9IGZ1bmN0aW9uIChzcHJpdGVNYW5hZ2VyKSB7CisgICAgICAgIHZhciBy
ZW5kZXJpbmdHcm91cElkID0gc3ByaXRlTWFuYWdlci5yZW5kZXJpbmdHcm91cElkIHx8IDA7Cisg
ICAgICAgIHRoaXMuX3ByZXBhcmVSZW5kZXJpbmdHcm91cChyZW5kZXJpbmdHcm91cElkKTsKKyAg
ICAgICAgdGhpcy5fcmVuZGVyaW5nR3JvdXBzW3JlbmRlcmluZ0dyb3VwSWRdLmRpc3BhdGNoU3By
aXRlcyhzcHJpdGVNYW5hZ2VyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBhIHBhcnRp
Y2xlIHN5c3RlbSB0byB0aGUgcmVuZGVyaW5nIG1hbmFnZXIgaW4gb3JkZXIgdG8gcmVuZGVyIGl0
IHRoaXMgZnJhbWUuCisgICAgICogQHBhcmFtIHBhcnRpY2xlU3lzdGVtIERlZmluZSB0aGUgcGFy
dGljbGUgc3lzdGVtIHRvIHJlbmRlcgorICAgICAqLworICAgIFJlbmRlcmluZ01hbmFnZXIucHJv
dG90eXBlLmRpc3BhdGNoUGFydGljbGVzID0gZnVuY3Rpb24gKHBhcnRpY2xlU3lzdGVtKSB7Cisg
ICAgICAgIHZhciByZW5kZXJpbmdHcm91cElkID0gcGFydGljbGVTeXN0ZW0ucmVuZGVyaW5nR3Jv
dXBJZCB8fCAwOworICAgICAgICB0aGlzLl9wcmVwYXJlUmVuZGVyaW5nR3JvdXAocmVuZGVyaW5n
R3JvdXBJZCk7CisgICAgICAgIHRoaXMuX3JlbmRlcmluZ0dyb3Vwc1tyZW5kZXJpbmdHcm91cElk
XS5kaXNwYXRjaFBhcnRpY2xlcyhwYXJ0aWNsZVN5c3RlbSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGQgYSBzdWJtZXNoIHRvIHRoZSBtYW5hZ2VyIGluIG9yZGVyIHRvIHJlbmRlciBpdCB0
aGlzIGZyYW1lCisgICAgICogQHBhcmFtIHN1Yk1lc2ggVGhlIHN1Ym1lc2ggdG8gZGlzcGF0Y2gK
KyAgICAgKiBAcGFyYW0gbWVzaCBPcHRpb25hbCByZWZlcmVuY2UgdG8gdGhlIHN1Ym1lc2hlcydz
IG1lc2guIFByb3ZpZGUgaWYgeW91IGhhdmUgYW4gZXhpdGluZyByZWZlcmVuY2UgdG8gaW1wcm92
ZSBwZXJmb3JtYW5jZS4KKyAgICAgKiBAcGFyYW0gbWF0ZXJpYWwgT3B0aW9uYWwgcmVmZXJlbmNl
IHRvIHRoZSBzdWJtZXNoZXMncyBtYXRlcmlhbC4gUHJvdmlkZSBpZiB5b3UgaGF2ZSBhbiBleGl0
aW5nIHJlZmVyZW5jZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgorICAgICAqLworICAgIFJlbmRl
cmluZ01hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoID0gZnVuY3Rpb24gKHN1Yk1lc2gsIG1lc2gs
IG1hdGVyaWFsKSB7CisgICAgICAgIGlmIChtZXNoID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgIG1lc2ggPSBzdWJNZXNoLmdldE1lc2goKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcmVu
ZGVyaW5nR3JvdXBJZCA9IG1lc2gucmVuZGVyaW5nR3JvdXBJZCB8fCAwOworICAgICAgICB0aGlz
Ll9wcmVwYXJlUmVuZGVyaW5nR3JvdXAocmVuZGVyaW5nR3JvdXBJZCk7CisgICAgICAgIHRoaXMu
X3JlbmRlcmluZ0dyb3Vwc1tyZW5kZXJpbmdHcm91cElkXS5kaXNwYXRjaChzdWJNZXNoLCBtZXNo
LCBtYXRlcmlhbCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1
bHQgc29ydCBmdW5jdGlvbiBhcHBsaWVkIGluIHRoZSByZW5kZXJnaW5nIGdyb3VwIHRvIHByZXBh
cmUgdGhlIG1lc2hlcy4KKyAgICAgKiBUaGlzIGFsbG93ZWQgY29udHJvbCBmb3IgZnJvbnQgdG8g
YmFjayByZW5kZXJpbmcgb3IgcmV2ZXJzbHkgZGVwZW5kaW5nIG9mIHRoZSBzcGVjaWFsIG5lZWRz
LgorICAgICAqCisgICAgICogQHBhcmFtIHJlbmRlcmluZ0dyb3VwSWQgVGhlIHJlbmRlcmluZyBn
cm91cCBpZCBjb3JyZXNwb25kaW5nIHRvIGl0cyBpbmRleAorICAgICAqIEBwYXJhbSBvcGFxdWVT
b3J0Q29tcGFyZUZuIFRoZSBvcGFxdWUgcXVldWUgY29tcGFyaXNvbiBmdW5jdGlvbiB1c2UgdG8g
c29ydC4KKyAgICAgKiBAcGFyYW0gYWxwaGFUZXN0U29ydENvbXBhcmVGbiBUaGUgYWxwaGEgdGVz
dCBxdWV1ZSBjb21wYXJpc29uIGZ1bmN0aW9uIHVzZSB0byBzb3J0LgorICAgICAqIEBwYXJhbSB0
cmFuc3BhcmVudFNvcnRDb21wYXJlRm4gVGhlIHRyYW5zcGFyZW50IHF1ZXVlIGNvbXBhcmlzb24g
ZnVuY3Rpb24gdXNlIHRvIHNvcnQuCisgICAgICovCisgICAgUmVuZGVyaW5nTWFuYWdlci5wcm90
b3R5cGUuc2V0UmVuZGVyaW5nT3JkZXIgPSBmdW5jdGlvbiAocmVuZGVyaW5nR3JvdXBJZCwgb3Bh
cXVlU29ydENvbXBhcmVGbiwgYWxwaGFUZXN0U29ydENvbXBhcmVGbiwgdHJhbnNwYXJlbnRTb3J0
Q29tcGFyZUZuKSB7CisgICAgICAgIGlmIChvcGFxdWVTb3J0Q29tcGFyZUZuID09PSB2b2lkIDAp
IHsgb3BhcXVlU29ydENvbXBhcmVGbiA9IG51bGw7IH0KKyAgICAgICAgaWYgKGFscGhhVGVzdFNv
cnRDb21wYXJlRm4gPT09IHZvaWQgMCkgeyBhbHBoYVRlc3RTb3J0Q29tcGFyZUZuID0gbnVsbDsg
fQorICAgICAgICBpZiAodHJhbnNwYXJlbnRTb3J0Q29tcGFyZUZuID09PSB2b2lkIDApIHsgdHJh
bnNwYXJlbnRTb3J0Q29tcGFyZUZuID0gbnVsbDsgfQorICAgICAgICB0aGlzLl9jdXN0b21PcGFx
dWVTb3J0Q29tcGFyZUZuW3JlbmRlcmluZ0dyb3VwSWRdID0gb3BhcXVlU29ydENvbXBhcmVGbjsK
KyAgICAgICAgdGhpcy5fY3VzdG9tQWxwaGFUZXN0U29ydENvbXBhcmVGbltyZW5kZXJpbmdHcm91
cElkXSA9IGFscGhhVGVzdFNvcnRDb21wYXJlRm47CisgICAgICAgIHRoaXMuX2N1c3RvbVRyYW5z
cGFyZW50U29ydENvbXBhcmVGbltyZW5kZXJpbmdHcm91cElkXSA9IHRyYW5zcGFyZW50U29ydENv
bXBhcmVGbjsKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmluZ0dyb3Vwc1tyZW5kZXJpbmdHcm91
cElkXSkgeworICAgICAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5fcmVuZGVyaW5nR3JvdXBzW3Jl
bmRlcmluZ0dyb3VwSWRdOworICAgICAgICAgICAgZ3JvdXAub3BhcXVlU29ydENvbXBhcmVGbiA9
IHRoaXMuX2N1c3RvbU9wYXF1ZVNvcnRDb21wYXJlRm5bcmVuZGVyaW5nR3JvdXBJZF07CisgICAg
ICAgICAgICBncm91cC5hbHBoYVRlc3RTb3J0Q29tcGFyZUZuID0gdGhpcy5fY3VzdG9tQWxwaGFU
ZXN0U29ydENvbXBhcmVGbltyZW5kZXJpbmdHcm91cElkXTsKKyAgICAgICAgICAgIGdyb3VwLnRy
YW5zcGFyZW50U29ydENvbXBhcmVGbiA9IHRoaXMuX2N1c3RvbVRyYW5zcGFyZW50U29ydENvbXBh
cmVGbltyZW5kZXJpbmdHcm91cElkXTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBzdGVuY2lsIGFuZCBkZXB0aCBidWZmZXIg
YXJlIGNsZWFyZWQgYmV0d2VlbiB0d28gcmVuZGVyaW5nIGdyb3Vwcy4KKyAgICAgKgorICAgICAq
IEBwYXJhbSByZW5kZXJpbmdHcm91cElkIFRoZSByZW5kZXJpbmcgZ3JvdXAgaWQgY29ycmVzcG9u
ZGluZyB0byBpdHMgaW5kZXgKKyAgICAgKiBAcGFyYW0gYXV0b0NsZWFyRGVwdGhTdGVuY2lsIEF1
dG9tYXRpY2FsbHkgY2xlYXJzIGRlcHRoIGFuZCBzdGVuY2lsIGJldHdlZW4gZ3JvdXBzIGlmIHRy
dWUuCisgICAgICogQHBhcmFtIGRlcHRoIEF1dG9tYXRpY2FsbHkgY2xlYXJzIGRlcHRoIGJldHdl
ZW4gZ3JvdXBzIGlmIHRydWUgYW5kIGF1dG9DbGVhciBpcyB0cnVlLgorICAgICAqIEBwYXJhbSBz
dGVuY2lsIEF1dG9tYXRpY2FsbHkgY2xlYXJzIHN0ZW5jaWwgYmV0d2VlbiBncm91cHMgaWYgdHJ1
ZSBhbmQgYXV0b0NsZWFyIGlzIHRydWUuCisgICAgICovCisgICAgUmVuZGVyaW5nTWFuYWdlci5w
cm90b3R5cGUuc2V0UmVuZGVyaW5nQXV0b0NsZWFyRGVwdGhTdGVuY2lsID0gZnVuY3Rpb24gKHJl
bmRlcmluZ0dyb3VwSWQsIGF1dG9DbGVhckRlcHRoU3RlbmNpbCwgZGVwdGgsIHN0ZW5jaWwpIHsK
KyAgICAgICAgaWYgKGRlcHRoID09PSB2b2lkIDApIHsgZGVwdGggPSB0cnVlOyB9CisgICAgICAg
IGlmIChzdGVuY2lsID09PSB2b2lkIDApIHsgc3RlbmNpbCA9IHRydWU7IH0KKyAgICAgICAgdGhp
cy5fYXV0b0NsZWFyRGVwdGhTdGVuY2lsW3JlbmRlcmluZ0dyb3VwSWRdID0geworICAgICAgICAg
ICAgYXV0b0NsZWFyOiBhdXRvQ2xlYXJEZXB0aFN0ZW5jaWwsCisgICAgICAgICAgICBkZXB0aDog
ZGVwdGgsCisgICAgICAgICAgICBzdGVuY2lsOiBzdGVuY2lsCisgICAgICAgIH07CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGF1dG8gY2xlYXIgY29uZmlndXJhdGlv
biBmb3Igb25lIHJlbmRlcmluZyBncm91cCBvZiB0aGUgcmVuZGVyaW5nCisgICAgICogbWFuYWdl
ci4KKyAgICAgKiBAcGFyYW0gaW5kZXggdGhlIHJlbmRlcmluZyBncm91cCBpbmRleCB0byBnZXQg
dGhlIGluZm9ybWF0aW9uIGZvcgorICAgICAqIEByZXR1cm5zIFRoZSBhdXRvIGNsZWFyIHNldHVw
IGZvciB0aGUgcmVxdWVzdGVkIHJlbmRlcmluZyBncm91cAorICAgICAqLworICAgIFJlbmRlcmlu
Z01hbmFnZXIucHJvdG90eXBlLmdldEF1dG9DbGVhckRlcHRoU3RlbmNpbFNldHVwID0gZnVuY3Rp
b24gKGluZGV4KSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hdXRvQ2xlYXJEZXB0aFN0ZW5jaWxb
aW5kZXhdOworICAgIH07CisgICAgLyoqCisgICAgICogVGhlIG1heCBpZCB1c2VkIGZvciByZW5k
ZXJpbmcgZ3JvdXBzIChub3QgaW5jbHVkZWQpCisgICAgICovCisgICAgUmVuZGVyaW5nTWFuYWdl
ci5NQVhfUkVOREVSSU5HR1JPVVBTID0gNDsKKyAgICAvKioKKyAgICAgKiBUaGUgbWluIGlkIHVz
ZWQgZm9yIHJlbmRlcmluZyBncm91cHMgKGluY2x1ZGVkKQorICAgICAqLworICAgIFJlbmRlcmlu
Z01hbmFnZXIuTUlOX1JFTkRFUklOR0dST1VQUyA9IDA7CisgICAgLyoqCisgICAgICogVXNlZCB0
byBnbG9iYWxseSBwcmV2ZW50IGF1dG9jbGVhcmluZyBzY2VuZXMuCisgICAgICovCisgICAgUmVu
ZGVyaW5nTWFuYWdlci5BVVRPQ0xFQVIgPSB0cnVlOworICAgIHJldHVybiBSZW5kZXJpbmdNYW5h
Z2VyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9SZW5kZXJpbmcvdXRpbGl0
eUxheWVyUmVuZGVyZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJlbmRlcmVyLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogVXRpbGl0eUxheWVyUmVuZGVyZXIgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVXRpbGl0eUxheWVyUmVuZGVyZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFV0aWxpdHlMYXllclJlbmRlcmVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2
YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FdmVudHNfcG9pbnRlckV2ZW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vRXZlbnRzL3BvaW50ZXJFdmVudHMgKi8gIi4vRXZlbnRzL3BvaW50ZXJFdmVudHMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9l
bmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0xpZ2h0c19oZW1pc3BoZXJpY0xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9MaWdodHMvaGVtaXNwaGVyaWNM
aWdodCAqLyAiLi9MaWdodHMvaGVtaXNwaGVyaWNMaWdodC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0
aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisK
KworCisKKworCisKKy8qKgorICogUmVuZGVycyBhIGxheWVyIG9uIHRvcCBvZiBhbiBleGlzdGlu
ZyBzY2VuZQorICovCit2YXIgVXRpbGl0eUxheWVyUmVuZGVyZXIgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgVXRpbGl0eUxheWVy
UmVuZGVyZXIKKyAgICAgKiBAcGFyYW0gb3JpZ2luYWxTY2VuZSB0aGUgb3JpZ2luYWwgc2NlbmUg
dGhhdCB3aWxsIGJlIHJlbmRlcmVkIG9uIHRvcCBvZgorICAgICAqIEBwYXJhbSBoYW5kbGVFdmVu
dHMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB1dGlsaXR5IGxheWVyIHNob3VsZCBoYW5kbGUg
ZXZlbnRzCisgICAgICovCisgICAgZnVuY3Rpb24gVXRpbGl0eUxheWVyUmVuZGVyZXIoCisgICAg
LyoqIHRoZSBvcmlnaW5hbCBzY2VuZSB0aGF0IHdpbGwgYmUgcmVuZGVyZWQgb24gdG9wIG9mICov
CisgICAgb3JpZ2luYWxTY2VuZSwgaGFuZGxlRXZlbnRzKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIGlmIChoYW5kbGVFdmVudHMgPT09IHZvaWQgMCkgeyBoYW5kbGVFdmVu
dHMgPSB0cnVlOyB9CisgICAgICAgIHRoaXMub3JpZ2luYWxTY2VuZSA9IG9yaWdpbmFsU2NlbmU7
CisgICAgICAgIHRoaXMuX3BvaW50ZXJDYXB0dXJlcyA9IHt9OworICAgICAgICB0aGlzLl9sYXN0
UG9pbnRlckV2ZW50cyA9IHt9OworICAgICAgICB0aGlzLl9zaGFyZWRHaXptb0xpZ2h0ID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fcmVuZGVyQ2FtZXJhID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIElmIHRoZSBwaWNraW5nIHNob3VsZCBiZSBkb25lIG9uIHRoZSB1dGlsaXR5IGxheWVy
IHByaW9yIHRvIHRoZSBhY3R1YWwgc2NlbmUgKERlZmF1bHQ6IHRydWUpCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLnBpY2tVdGlsaXR5U2NlbmVGaXJzdCA9IHRydWU7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiAgSWYgdGhlIHV0aWxpdHkgbGF5ZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgYmUg
cmVuZGVyZWQgb24gdG9wIG9mIGV4aXN0aW5nIHNjZW5lCisgICAgICAgICovCisgICAgICAgIHRo
aXMuc2hvdWxkUmVuZGVyID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHNldCB0
byB0cnVlLCBvbmx5IHBvaW50ZXIgZG93biBvblBvaW50ZXJPYnNlcnZhYmxlIGV2ZW50cyB3aWxs
IGJlIGJsb2NrZWQgd2hlbiBwaWNraW5nIGlzIG9jY2x1ZGVkIGJ5IG9yaWdpbmFsIHNjZW5lCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLm9ubHlDaGVja1BvaW50ZXJEb3duRXZlbnRzID0gdHJ1
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHNldCB0byBmYWxzZSwgb25seSBwb2ludGVy
VXAsIHBvaW50ZXJEb3duIGFuZCBwb2ludGVyTW92ZSB3aWxsIGJlIHNlbnQgdG8gdGhlIHV0aWxp
dHlMYXllclNjZW5lIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5wcm9jZXNzQWxsRXZlbnRzID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBPYnNl
cnZhYmxlIHJhaXNlZCB3aGVuIHRoZSBwb2ludGVyIG1vdmUgZnJvbSB0aGUgdXRpbGl0eSBsYXll
ciBzY2VuZSB0byB0aGUgbWFpbiBzY2VuZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vblBv
aW50ZXJPdXRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8vIENyZWF0ZSBzY2VuZSB3
aGljaCB3aWxsIGJlIHJlbmRlcmVkIGluIHRoZSBmb3JlZ3JvdW5kIGFuZCByZW1vdmUgaXQgZnJv
bSBiZWluZyByZWZlcmVuY2VkIGJ5IGVuZ2luZSB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIGV4
aXN0aW5nIGFwcAorICAgICAgICB0aGlzLnV0aWxpdHlMYXllclNjZW5lID0gbmV3IF9zY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2VuZSJdKG9yaWdpbmFsU2NlbmUuZ2V0RW5n
aW5lKCksIHsgdmlydHVhbDogdHJ1ZSB9KTsKKyAgICAgICAgdGhpcy51dGlsaXR5TGF5ZXJTY2Vu
ZS51c2VSaWdodEhhbmRlZFN5c3RlbSA9IG9yaWdpbmFsU2NlbmUudXNlUmlnaHRIYW5kZWRTeXN0
ZW07CisgICAgICAgIHRoaXMudXRpbGl0eUxheWVyU2NlbmUuX2FsbG93UG9zdFByb2Nlc3NDbGVh
ckNvbG9yID0gZmFsc2U7CisgICAgICAgIC8vIERldGFjaCBjb250cm9scyBvbiB1dGlsaXR5IHNj
ZW5lLCBldmVudHMgd2lsbCBiZSBmaXJlZCBieSBsb2dpYyBiZWxvdyB0byBoYW5kbGUgcGlja2lu
ZyBwcmlvcml0eQorICAgICAgICB0aGlzLnV0aWxpdHlMYXllclNjZW5lLmRldGFjaENvbnRyb2wo
KTsKKyAgICAgICAgaWYgKGhhbmRsZUV2ZW50cykgeworICAgICAgICAgICAgdGhpcy5fb3JpZ2lu
YWxQb2ludGVyT2JzZXJ2ZXIgPSBvcmlnaW5hbFNjZW5lLm9uUHJlUG9pbnRlck9ic2VydmFibGUu
YWRkKGZ1bmN0aW9uIChwcmVQb2ludGVySW5mbywgZXZlbnRTdGF0ZSkgeworICAgICAgICAgICAg
ICAgIGlmICghX3RoaXMudXRpbGl0eUxheWVyU2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKCFfdGhpcy5wcm9jZXNzQWxsRXZlbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChw
cmVQb2ludGVySW5mby50eXBlICE9PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRQorICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgcHJlUG9pbnRlckluZm8udHlwZSAhPT0gX0V2ZW50c19wb2lu
dGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBvaW50ZXJFdmVudFR5cGVz
Il0uUE9JTlRFUlVQCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmVQb2ludGVySW5mby50
eXBlICE9PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9XTikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIF90aGlzLnV0aWxpdHlMYXllclNjZW5lLnBvaW50ZXJYID0gb3JpZ2lu
YWxTY2VuZS5wb2ludGVyWDsKKyAgICAgICAgICAgICAgICBfdGhpcy51dGlsaXR5TGF5ZXJTY2Vu
ZS5wb2ludGVyWSA9IG9yaWdpbmFsU2NlbmUucG9pbnRlclk7CisgICAgICAgICAgICAgICAgdmFy
IHBvaW50ZXJFdmVudCA9IChwcmVQb2ludGVySW5mby5ldmVudCk7CisgICAgICAgICAgICAgICAg
aWYgKG9yaWdpbmFsU2NlbmUuaXNQb2ludGVyQ2FwdHVyZWQocG9pbnRlckV2ZW50LnBvaW50ZXJJ
ZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3BvaW50ZXJDYXB0dXJlc1twb2ludGVy
RXZlbnQucG9pbnRlcklkXSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciB1dGlsaXR5U2NlbmVQaWNrID0g
cHJlUG9pbnRlckluZm8ucmF5ID8gX3RoaXMudXRpbGl0eUxheWVyU2NlbmUucGlja1dpdGhSYXko
cHJlUG9pbnRlckluZm8ucmF5KSA6IF90aGlzLnV0aWxpdHlMYXllclNjZW5lLnBpY2sob3JpZ2lu
YWxTY2VuZS5wb2ludGVyWCwgb3JpZ2luYWxTY2VuZS5wb2ludGVyWSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFwcmVQb2ludGVySW5mby5yYXkgJiYgdXRpbGl0eVNjZW5lUGljaykgeworICAgICAg
ICAgICAgICAgICAgICBwcmVQb2ludGVySW5mby5yYXkgPSB1dGlsaXR5U2NlbmVQaWNrLnJheTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gYWx3YXlzIGZpcmUgdGhlIHBy
ZXBvaW50ZXIgb3ZlcnN2YWJsZQorICAgICAgICAgICAgICAgIF90aGlzLnV0aWxpdHlMYXllclNj
ZW5lLm9uUHJlUG9pbnRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHByZVBvaW50ZXJJbmZv
KTsKKyAgICAgICAgICAgICAgICAvLyBhbGxvdyBldmVyeSBub24gcG9pbnRlciBkb3duIGV2ZW50
IHRvIGZsb3cgdG8gdGhlIHV0aWxpdHkgbGF5ZXIKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMu
b25seUNoZWNrUG9pbnRlckRvd25FdmVudHMgJiYgcHJlUG9pbnRlckluZm8udHlwZSAhPSBfRXZl
bnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUG9pbnRlckV2
ZW50VHlwZXMiXS5QT0lOVEVSRE9XTikgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXByZVBv
aW50ZXJJbmZvLnNraXBPblBvaW50ZXJPYnNlcnZhYmxlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBfdGhpcy51dGlsaXR5TGF5ZXJTY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLm5vdGlmeU9i
c2VydmVycyhuZXcgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlBvaW50ZXJJbmZvIl0ocHJlUG9pbnRlckluZm8udHlwZSwgcHJlUG9pbnRlckluZm8u
ZXZlbnQsIHV0aWxpdHlTY2VuZVBpY2spKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlUG9pbnRlckluZm8udHlwZSA9PT0gX0V2ZW50c19wb2ludGVy
RXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBvaW50ZXJFdmVudFR5cGVzIl0u
UE9JTlRFUlVQICYmIF90aGlzLl9wb2ludGVyQ2FwdHVyZXNbcG9pbnRlckV2ZW50LnBvaW50ZXJJ
ZF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wb2ludGVyQ2FwdHVyZXNbcG9p
bnRlckV2ZW50LnBvaW50ZXJJZF0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChfdGhpcy51dGlsaXR5TGF5ZXJTY2VuZS5hdXRvQ2xlYXJEZXB0aEFuZFN0ZW5jaWwg
fHwgX3RoaXMucGlja1V0aWxpdHlTY2VuZUZpcnN0KSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IElmIHRoaXMgbGF5ZXIgaXMgYW4gb3ZlcmxheSwgY2hlY2sgaWYgdGhpcyBsYXllciB3YXMgaGl0
IGFuZCBpZiBzbywgc2tpcCBwb2ludGVyIGV2ZW50cyBmb3IgdGhlIG1haW4gc2NlbmUKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHV0aWxpdHlTY2VuZVBpY2sgJiYgdXRpbGl0eVNjZW5lUGljay5o
aXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJlUG9pbnRlckluZm8uc2tpcE9u
UG9pbnRlck9ic2VydmFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy51
dGlsaXR5TGF5ZXJTY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhuZXcg
X0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBvaW50
ZXJJbmZvIl0ocHJlUG9pbnRlckluZm8udHlwZSwgcHJlUG9pbnRlckluZm8uZXZlbnQsIHV0aWxp
dHlTY2VuZVBpY2spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByZVBvaW50ZXJJbmZvLnNraXBPblBvaW50ZXJPYnNlcnZhYmxlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsU2NlbmVQaWNrID0gcHJl
UG9pbnRlckluZm8ucmF5ID8gb3JpZ2luYWxTY2VuZS5waWNrV2l0aFJheShwcmVQb2ludGVySW5m
by5yYXkpIDogb3JpZ2luYWxTY2VuZS5waWNrKG9yaWdpbmFsU2NlbmUucG9pbnRlclgsIG9yaWdp
bmFsU2NlbmUucG9pbnRlclkpOworICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnRlckV2ZW50
XzEgPSAocHJlUG9pbnRlckluZm8uZXZlbnQpOworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0
aGUgbGF5ZXIgY2FuIGJlIG9jY2x1ZGVkIGJ5IHRoZSBvcmlnaW5hbCBzY2VuZSwgb25seSBmaXJl
IHBvaW50ZXIgZXZlbnRzIHRvIHRoZSBmaXJzdCBsYXllciB0aGF0IGhpdCB0aGV5IHJheQorICAg
ICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxTY2VuZVBpY2sgJiYgdXRpbGl0eVNjZW5lUGlj
aykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gcGljayBpbiB1dGlsaXR5IHNjZW5l
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbGl0eVNjZW5lUGljay5kaXN0YW5jZSA9
PT0gMCAmJiBvcmlnaW5hbFNjZW5lUGljay5waWNrZWRNZXNoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKF90aGlzLm1haW5TY2VuZVRyYWNrZXJQcmVkaWNhdGUgJiYgX3RoaXMu
bWFpblNjZW5lVHJhY2tlclByZWRpY2F0ZShvcmlnaW5hbFNjZW5lUGljay5waWNrZWRNZXNoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB0b3VjaGVkIGFuIHV0aWxp
dHkgbWVzaCBwcmVzZW50IGluIHRoZSBtYWluIHNjZW5lCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl9ub3RpZnlPYnNlcnZlcnMocHJlUG9pbnRlckluZm8sIG9yaWdpbmFs
U2NlbmVQaWNrLCBwb2ludGVyRXZlbnRfMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZVBvaW50ZXJJbmZvLnNraXBPblBvaW50ZXJPYnNlcnZhYmxlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAocHJlUG9pbnRlckluZm8udHlwZSA9PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3BvaW50ZXJDYXB0dXJl
c1twb2ludGVyRXZlbnRfMS5wb2ludGVySWRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX3RoaXMuX2xh
c3RQb2ludGVyRXZlbnRzW3BvaW50ZXJFdmVudF8xLnBvaW50ZXJJZF0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzZW5kIGEgbGFzdCBwb2ludGVydXAg
dG8gdGhlIHV0aWxpdHlMYXllclNjZW5lIHRvIG1ha2Ugc3VyZSBhbmltYXRpb25zIGNhbiBjb21w
bGV0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5vblBvaW50ZXJPdXRP
YnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhwb2ludGVyRXZlbnRfMS5wb2ludGVySWQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX3RoaXMuX2xhc3RQb2ludGVyRXZl
bnRzW3BvaW50ZXJFdmVudF8xLnBvaW50ZXJJZF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoIV90aGlzLl9wb2ludGVyQ2FwdHVyZXNbcG9pbnRlckV2ZW50XzEucG9pbnRlcklk
XSAmJiAodXRpbGl0eVNjZW5lUGljay5kaXN0YW5jZSA8IG9yaWdpbmFsU2NlbmVQaWNrLmRpc3Rh
bmNlIHx8IG9yaWdpbmFsU2NlbmVQaWNrLmRpc3RhbmNlID09PSAwKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIHBpY2sgc29tZXRoaW5nIGluIHV0aWxpdHkgc2NlbmUgb3Ig
dGhlIHBpY2sgaW4gdXRpbGl0eSBpcyBjbG9zZXIgdGhhbiB0aGUgb25lIGluIG1haW4gc2NlbmUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbm90aWZ5T2JzZXJ2ZXJzKHByZVBv
aW50ZXJJbmZvLCB1dGlsaXR5U2NlbmVQaWNrLCBwb2ludGVyRXZlbnRfMSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgYSBwcmV2aW91cyB1dGlsaXR5IGxheWVyIHNldCB0aGlz
LCBkbyBub3QgdW5zZXQgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJl
UG9pbnRlckluZm8uc2tpcE9uUG9pbnRlck9ic2VydmFibGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJlUG9pbnRlckluZm8uc2tpcE9uUG9pbnRlck9ic2VydmFibGUgPSB1
dGlsaXR5U2NlbmVQaWNrLmRpc3RhbmNlID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmICghX3RoaXMuX3BvaW50ZXJDYXB0dXJlc1twb2ludGVyRXZlbnRfMS5wb2ludGVySWRd
ICYmICh1dGlsaXR5U2NlbmVQaWNrLmRpc3RhbmNlID4gb3JpZ2luYWxTY2VuZVBpY2suZGlzdGFu
Y2UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHBpY2sgaW4g
Ym90aCBzY2VuZXMgYnV0IG1haW4gaXMgY2xvc2VyIHRoYW4gdXRpbGl0eQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIHRvdWNoZWQgYW4gdXRpbGl0eSBtZXNoIHByZXNlbnQgaW4g
dGhlIG1haW4gc2NlbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMubWFp
blNjZW5lVHJhY2tlclByZWRpY2F0ZSAmJiBfdGhpcy5tYWluU2NlbmVUcmFja2VyUHJlZGljYXRl
KG9yaWdpbmFsU2NlbmVQaWNrLnBpY2tlZE1lc2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl9ub3RpZnlPYnNlcnZlcnMocHJlUG9pbnRlckluZm8sIG9yaWdpbmFs
U2NlbmVQaWNrLCBwb2ludGVyRXZlbnRfMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZVBvaW50ZXJJbmZvLnNraXBPblBvaW50ZXJPYnNlcnZhYmxlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoX3RoaXMuX2xhc3RQb2ludGVyRXZlbnRzW3BvaW50ZXJFdmVudF8xLnBvaW50ZXJJZF0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzZW5kIGEg
bGFzdCBwb2ludGVydXAgdG8gdGhlIHV0aWxpdHlMYXllclNjZW5lIHRvIG1ha2Ugc3VyZSBhbmlt
YXRpb25zIGNhbiBjb21wbGV0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5vblBvaW50ZXJPdXRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhwb2ludGVyRXZlbnRfMS5w
b2ludGVySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX3RoaXMu
X2xhc3RQb2ludGVyRXZlbnRzW3BvaW50ZXJFdmVudF8xLnBvaW50ZXJJZF07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHByZVBvaW50ZXJJbmZvLnR5cGUgPT09IF9FdmVudHNfcG9pbnRl
ckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQb2ludGVyRXZlbnRUeXBlcyJd
LlBPSU5URVJVUCAmJiBfdGhpcy5fcG9pbnRlckNhcHR1cmVzW3BvaW50ZXJFdmVudF8xLnBvaW50
ZXJJZF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcG9pbnRlckNhcHR1
cmVzW3BvaW50ZXJFdmVudF8xLnBvaW50ZXJJZF0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgLy8gQXMgYSBuZXdseSBhZGRlZCB1dGlsaXR5IGxheWVy
IHdpbGwgYmUgcmVuZGVyZWQgb3ZlciB0aGUgc2NyZWVuIGxhc3QsIGl0J3MgcG9pbnRlciBldmVu
dHMgc2hvdWxkIGJlIHByb2Nlc3NlZCBmaXJzdAorICAgICAgICAgICAgaWYgKHRoaXMuX29yaWdp
bmFsUG9pbnRlck9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAgb3JpZ2luYWxTY2VuZS5vblBy
ZVBvaW50ZXJPYnNlcnZhYmxlLm1ha2VPYnNlcnZlclRvcFByaW9yaXR5KHRoaXMuX29yaWdpbmFs
UG9pbnRlck9ic2VydmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBS
ZW5kZXIgZGlyZWN0bHkgb24gdG9wIG9mIGV4aXN0aW5nIHNjZW5lIHdpdGhvdXQgY2xlYXJpbmcK
KyAgICAgICAgdGhpcy51dGlsaXR5TGF5ZXJTY2VuZS5hdXRvQ2xlYXIgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5fYWZ0ZXJSZW5kZXJPYnNlcnZlciA9IHRoaXMub3JpZ2luYWxTY2VuZS5vbkFmdGVy
Q2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICAg
ICAgLy8gT25seSByZW5kZXIgd2hlbiB0aGUgcmVuZGVyIGNhbWVyYSBmaW5pc2hlcyByZW5kZXJp
bmcKKyAgICAgICAgICAgIGlmIChfdGhpcy5zaG91bGRSZW5kZXIgJiYgY2FtZXJhID09IF90aGlz
LmdldFJlbmRlckNhbWVyYSgpKSB7CisgICAgICAgICAgICAgICAgX3RoaXMucmVuZGVyKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9zY2VuZURpc3Bvc2VPYnNl
cnZlciA9IHRoaXMub3JpZ2luYWxTY2VuZS5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBfdGhpcy5kaXNwb3NlKCk7CisgICAgICAgIH0pOworICAgICAg
ICB0aGlzLl91cGRhdGVDYW1lcmEoKTsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
Y2FtZXJhIHRoYXQgaXMgdXNlZCB0byByZW5kZXIgdGhlIHV0aWxpdHkgbGF5ZXIgKHdoZW4gbm90
IHNldCwgdGhpcyB3aWxsIGJlIHRoZSBsYXN0IGFjdGl2ZSBjYW1lcmEpCisgICAgICogQHJldHVy
bnMgdGhlIGNhbWVyYSB0aGF0IGlzIHVzZWQgd2hlbiByZW5kZXJpbmcgdGhlIHV0aWxpdHkgbGF5
ZXIKKyAgICAgKi8KKyAgICBVdGlsaXR5TGF5ZXJSZW5kZXJlci5wcm90b3R5cGUuZ2V0UmVuZGVy
Q2FtZXJhID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fcmVuZGVyQ2FtZXJhKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyQ2FtZXJhOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHRoaXMub3JpZ2luYWxTY2VuZS5hY3RpdmVDYW1lcmFzLmxlbmd0aCA+IDEp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsU2NlbmUuYWN0aXZlQ2FtZXJhc1t0
aGlzLm9yaWdpbmFsU2NlbmUuYWN0aXZlQ2FtZXJhcy5sZW5ndGggLSAxXTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsU2NlbmUuYWN0
aXZlQ2FtZXJhOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBj
YW1lcmEgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHJlbmRlcmluZyB0aGUgdXRpbGl0eSBsYXll
ciAoSWYgc2V0IHRvIG51bGwgdGhlIGxhc3QgYWN0aXZlIGNhbWVyYSB3aWxsIGJlIHVzZWQpCisg
ICAgICogQHBhcmFtIGNhbSB0aGUgY2FtZXJhIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5k
ZXJpbmcgdGhlIHV0aWxpdHkgbGF5ZXIKKyAgICAgKi8KKyAgICBVdGlsaXR5TGF5ZXJSZW5kZXJl
ci5wcm90b3R5cGUuc2V0UmVuZGVyQ2FtZXJhID0gZnVuY3Rpb24gKGNhbSkgeworICAgICAgICB0
aGlzLl9yZW5kZXJDYW1lcmEgPSBjYW07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVu
CisgICAgICogTGlnaHQgd2hpY2ggdXNlZCBieSBnaXptb3MgdG8gZ2V0IGxpZ2h0IHNoYWRpbmcK
KyAgICAgKi8KKyAgICBVdGlsaXR5TGF5ZXJSZW5kZXJlci5wcm90b3R5cGUuX2dldFNoYXJlZEdp
em1vTGlnaHQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fc2hhcmVkR2l6bW9M
aWdodCkgeworICAgICAgICAgICAgdGhpcy5fc2hhcmVkR2l6bW9MaWdodCA9IG5ldyBfTGlnaHRz
X2hlbWlzcGhlcmljTGlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siSGVtaXNwaGVy
aWNMaWdodCJdKCJzaGFyZWQgZ2l6bW8gbGlnaHQiLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXSgwLCAxLCAwKSwgdGhpcy51dGls
aXR5TGF5ZXJTY2VuZSk7CisgICAgICAgICAgICB0aGlzLl9zaGFyZWRHaXptb0xpZ2h0LmludGVu
c2l0eSA9IDI7CisgICAgICAgICAgICB0aGlzLl9zaGFyZWRHaXptb0xpZ2h0Lmdyb3VuZENvbG9y
ID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29sb3Iz
Il0uR3JheSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9zaGFyZWRHaXptb0xp
Z2h0OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFV0aWxpdHlMYXllclJlbmRl
cmVyLCAiRGVmYXVsdFV0aWxpdHlMYXllciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEg
c2hhcmVkIHV0aWxpdHkgbGF5ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVybGF5IG9iamVjdHMg
aW50byBhIHNjZW5lIChEZXB0aCBtYXAgb2YgdGhlIHByZXZpb3VzIHNjZW5lIGlzIGNsZWFyZWQg
YmVmb3JlIGRyYXdpbmcgb24gdG9wIG9mIGl0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoVXRpbGl0eUxheWVyUmVuZGVyZXIuX0RlZmF1
bHRVdGlsaXR5TGF5ZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIFV0aWxpdHlMYXllclJl
bmRlcmVyLl9EZWZhdWx0VXRpbGl0eUxheWVyID0gbmV3IFV0aWxpdHlMYXllclJlbmRlcmVyKF9F
bmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZVN0
b3JlIl0uTGFzdENyZWF0ZWRTY2VuZSk7CisgICAgICAgICAgICAgICAgVXRpbGl0eUxheWVyUmVu
ZGVyZXIuX0RlZmF1bHRVdGlsaXR5TGF5ZXIub3JpZ2luYWxTY2VuZS5vbkRpc3Bvc2VPYnNlcnZh
YmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBVdGlsaXR5TGF5
ZXJSZW5kZXJlci5fRGVmYXVsdFV0aWxpdHlMYXllciA9IG51bGw7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gVXRpbGl0eUxheWVyUmVuZGVy
ZXIuX0RlZmF1bHRVdGlsaXR5TGF5ZXI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShVdGlsaXR5TGF5ZXJSZW5kZXJlciwgIkRlZmF1bHRLZWVwRGVwdGhVdGls
aXR5TGF5ZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBIHNoYXJlZCB1dGlsaXR5IGxh
eWVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gZW1iZWQgb2JqZWN0cyBpbnRvIGEgc2NlbmUgKERlcHRo
IG1hcCBvZiB0aGUgcHJldmlvdXMgc2NlbmUgaXMgbm90IGNsZWFyZWQgYmVmb3JlIGRyYXdpbmcg
b24gdG9wIG9mIGl0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBpZiAoVXRpbGl0eUxheWVyUmVuZGVyZXIuX0RlZmF1bHRLZWVwRGVwdGhVdGls
aXR5TGF5ZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIFV0aWxpdHlMYXllclJlbmRlcmVy
Ll9EZWZhdWx0S2VlcERlcHRoVXRpbGl0eUxheWVyID0gbmV3IFV0aWxpdHlMYXllclJlbmRlcmVy
KF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2lu
ZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZSk7CisgICAgICAgICAgICAgICAgVXRpbGl0eUxheWVy
UmVuZGVyZXIuX0RlZmF1bHRLZWVwRGVwdGhVdGlsaXR5TGF5ZXIudXRpbGl0eUxheWVyU2NlbmUu
YXV0b0NsZWFyRGVwdGhBbmRTdGVuY2lsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgVXRpbGl0
eUxheWVyUmVuZGVyZXIuX0RlZmF1bHRLZWVwRGVwdGhVdGlsaXR5TGF5ZXIub3JpZ2luYWxTY2Vu
ZS5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgICAgICBVdGlsaXR5TGF5ZXJSZW5kZXJlci5fRGVmYXVsdEtlZXBEZXB0aFV0aWxpdHlMYXll
ciA9IG51bGw7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gVXRpbGl0eUxheWVyUmVuZGVyZXIuX0RlZmF1bHRLZWVwRGVwdGhVdGlsaXR5TGF5
ZXI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIFV0aWxpdHlMYXllclJlbmRlcmVyLnByb3RvdHlw
ZS5fbm90aWZ5T2JzZXJ2ZXJzID0gZnVuY3Rpb24gKHByZVBvaW50ZXJJbmZvLCBwaWNrSW5mbywg
cG9pbnRlckV2ZW50KSB7CisgICAgICAgIGlmICghcHJlUG9pbnRlckluZm8uc2tpcE9uUG9pbnRl
ck9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIHRoaXMudXRpbGl0eUxheWVyU2NlbmUub25Qb2lu
dGVyT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMobmV3IF9FdmVudHNfcG9pbnRlckV2ZW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQb2ludGVySW5mbyJdKHByZVBvaW50ZXJJbmZv
LnR5cGUsIHByZVBvaW50ZXJJbmZvLmV2ZW50LCBwaWNrSW5mbykpOworICAgICAgICAgICAgdGhp
cy5fbGFzdFBvaW50ZXJFdmVudHNbcG9pbnRlckV2ZW50LnBvaW50ZXJJZF0gPSB0cnVlOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIHRoZSB1dGlsaXR5IGxheWVy
cyBzY2VuZSBvbiB0b3Agb2YgdGhlIG9yaWdpbmFsIHNjZW5lCisgICAgICovCisgICAgVXRpbGl0
eUxheWVyUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dGhpcy5fdXBkYXRlQ2FtZXJhKCk7CisgICAgICAgIGlmICh0aGlzLnV0aWxpdHlMYXllclNjZW5l
LmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgLy8gU2V0IHRoZSBjYW1lcmEncyBzY2VuZSB0
byB1dGlsaXR5IGxheWVycyBzY2VuZQorICAgICAgICAgICAgdmFyIG9sZFNjZW5lID0gdGhpcy51
dGlsaXR5TGF5ZXJTY2VuZS5hY3RpdmVDYW1lcmEuZ2V0U2NlbmUoKTsKKyAgICAgICAgICAgIHZh
ciBjYW1lcmEgPSB0aGlzLnV0aWxpdHlMYXllclNjZW5lLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAg
ICAgIGNhbWVyYS5fc2NlbmUgPSB0aGlzLnV0aWxpdHlMYXllclNjZW5lOworICAgICAgICAgICAg
aWYgKGNhbWVyYS5sZWZ0Q2FtZXJhKSB7CisgICAgICAgICAgICAgICAgY2FtZXJhLmxlZnRDYW1l
cmEuX3NjZW5lID0gdGhpcy51dGlsaXR5TGF5ZXJTY2VuZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChjYW1lcmEucmlnaHRDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICBjYW1lcmEu
cmlnaHRDYW1lcmEuX3NjZW5lID0gdGhpcy51dGlsaXR5TGF5ZXJTY2VuZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMudXRpbGl0eUxheWVyU2NlbmUucmVuZGVyKGZhbHNlKTsKKyAg
ICAgICAgICAgIC8vIFJlc2V0IGNhbWVyYSdzIHNjZW5lIGJhY2sgdG8gb3JpZ2luYWwKKyAgICAg
ICAgICAgIGNhbWVyYS5fc2NlbmUgPSBvbGRTY2VuZTsKKyAgICAgICAgICAgIGlmIChjYW1lcmEu
bGVmdENhbWVyYSkgeworICAgICAgICAgICAgICAgIGNhbWVyYS5sZWZ0Q2FtZXJhLl9zY2VuZSA9
IG9sZFNjZW5lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNhbWVyYS5yaWdodENh
bWVyYSkgeworICAgICAgICAgICAgICAgIGNhbWVyYS5yaWdodENhbWVyYS5fc2NlbmUgPSBvbGRT
Y2VuZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
RGlzcG9zZXMgb2YgdGhlIHJlbmRlcmVyCisgICAgICovCisgICAgVXRpbGl0eUxheWVyUmVuZGVy
ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMub25Qb2lu
dGVyT3V0T2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICBpZiAodGhpcy5fYWZ0ZXJSZW5kZXJP
YnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFNjZW5lLm9uQWZ0ZXJDYW1lcmFS
ZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9hZnRlclJlbmRlck9ic2VydmVyKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5fc2NlbmVEaXNwb3NlT2JzZXJ2ZXIpIHsKKyAgICAgICAg
ICAgIHRoaXMub3JpZ2luYWxTY2VuZS5vbkRpc3Bvc2VPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9z
Y2VuZURpc3Bvc2VPYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29yaWdp
bmFsUG9pbnRlck9ic2VydmVyKSB7CisgICAgICAgICAgICB0aGlzLm9yaWdpbmFsU2NlbmUub25Q
cmVQb2ludGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb3JpZ2luYWxQb2ludGVyT2JzZXJ2ZXIp
OworICAgICAgICB9CisgICAgICAgIHRoaXMudXRpbGl0eUxheWVyU2NlbmUuZGlzcG9zZSgpOwor
ICAgIH07CisgICAgVXRpbGl0eUxheWVyUmVuZGVyZXIucHJvdG90eXBlLl91cGRhdGVDYW1lcmEg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMudXRpbGl0eUxheWVyU2NlbmUuY2FtZXJhVG9V
c2VGb3JQb2ludGVycyA9IHRoaXMuZ2V0UmVuZGVyQ2FtZXJhKCk7CisgICAgICAgIHRoaXMudXRp
bGl0eUxheWVyU2NlbmUuYWN0aXZlQ2FtZXJhID0gdGhpcy5nZXRSZW5kZXJDYW1lcmEoKTsKKyAg
ICB9OworICAgIFV0aWxpdHlMYXllclJlbmRlcmVyLl9EZWZhdWx0VXRpbGl0eUxheWVyID0gbnVs
bDsKKyAgICBVdGlsaXR5TGF5ZXJSZW5kZXJlci5fRGVmYXVsdEtlZXBEZXB0aFV0aWxpdHlMYXll
ciA9IG51bGw7CisgICAgcmV0dXJuIFV0aWxpdHlMYXllclJlbmRlcmVyOworfSgpKTsKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2JhY2tncm91bmRG
cmFnbWVudERlY2xhcmF0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL2JhY2tncm91bmRGcmFnbWVudERlY2xhcmF0aW9uLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGJhY2tncm91bmRGcmFnbWVudERlY2xh
cmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImJhY2tncm91bmRG
cmFnbWVudERlY2xhcmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBiYWNrZ3JvdW5kRnJhZ21l
bnREZWNsYXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
Cit2YXIgbmFtZSA9ICdiYWNrZ3JvdW5kRnJhZ21lbnREZWNsYXJhdGlvbic7Cit2YXIgc2hhZGVy
ID0gIiB1bmlmb3JtIHZlYzQgdlByaW1hcnlDb2xvcjtcbiNpZmRlZiBVU0VISUdITElHSFRBTkRT
SEFET1dDT0xPUlNcbnVuaWZvcm0gdmVjNCB2UHJpbWFyeUNvbG9yU2hhZG93O1xuI2VuZGlmXG51
bmlmb3JtIGZsb2F0IHNoYWRvd0xldmVsO1xudW5pZm9ybSBmbG9hdCBhbHBoYTtcbiNpZmRlZiBE
SUZGVVNFXG51bmlmb3JtIHZlYzIgdkRpZmZ1c2VJbmZvcztcbiNlbmRpZlxuI2lmZGVmIFJFRkxF
Q1RJT05cbnVuaWZvcm0gdmVjMiB2UmVmbGVjdGlvbkluZm9zO1xudW5pZm9ybSBtYXQ0IHJlZmxl
Y3Rpb25NYXRyaXg7XG51bmlmb3JtIHZlYzMgdlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcztc
biNlbmRpZlxuI2lmIGRlZmluZWQoUkVGTEVDVElPTkZSRVNORUwpIHx8IGRlZmluZWQoT1BBQ0lU
WUZSRVNORUwpXG51bmlmb3JtIHZlYzMgdkJhY2tncm91bmRDZW50ZXI7XG4jZW5kaWZcbiNpZmRl
ZiBSRUZMRUNUSU9ORlJFU05FTFxudW5pZm9ybSB2ZWM0IHZSZWZsZWN0aW9uQ29udHJvbDtcbiNl
bmRpZlxuI2lmIGRlZmluZWQoUkVGTEVDVElPTk1BUF9TUEhFUklDQUwpIHx8IGRlZmluZWQoUkVG
TEVDVElPTk1BUF9QUk9KRUNUSU9OKSB8fCBkZWZpbmVkKFJFRlJBQ1RJT04pXG51bmlmb3JtIG1h
dDQgdmlldztcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsK
Ky8qKiBAaGlkZGVuICovCit2YXIgYmFja2dyb3VuZEZyYWdtZW50RGVjbGFyYXRpb24gPSB7IG5h
bWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvYmFja2dyb3VuZFVib0RlY2xhcmF0aW9uLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9iYWNrZ3JvdW5kVWJvRGVjbGFy
YXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGJhY2tncm91bmRV
Ym9EZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJiYWNr
Z3JvdW5kVWJvRGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJhY2tncm91bmRVYm9E
ZWNsYXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2
YXIgbmFtZSA9ICdiYWNrZ3JvdW5kVWJvRGVjbGFyYXRpb24nOwordmFyIHNoYWRlciA9ICJsYXlv
dXQoc3RkMTQwLGNvbHVtbl9tYWpvcikgdW5pZm9ybTtcbnVuaWZvcm0gTWF0ZXJpYWxcbntcbnVu
aWZvcm0gdmVjNCB2UHJpbWFyeUNvbG9yO1xudW5pZm9ybSB2ZWM0IHZQcmltYXJ5Q29sb3JTaGFk
b3c7XG51bmlmb3JtIHZlYzIgdkRpZmZ1c2VJbmZvcztcbnVuaWZvcm0gdmVjMiB2UmVmbGVjdGlv
bkluZm9zO1xudW5pZm9ybSBtYXQ0IGRpZmZ1c2VNYXRyaXg7XG51bmlmb3JtIG1hdDQgcmVmbGVj
dGlvbk1hdHJpeDtcbnVuaWZvcm0gdmVjMyB2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zO1xu
dW5pZm9ybSBmbG9hdCBmRm92TXVsdGlwbGllcjtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xu
dW5pZm9ybSBmbG9hdCBzaGFkb3dMZXZlbDtcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XG4jaWYgZGVm
aW5lZChSRUZMRUNUSU9ORlJFU05FTCkgfHwgZGVmaW5lZChPUEFDSVRZRlJFU05FTClcbnVuaWZv
cm0gdmVjMyB2QmFja2dyb3VuZENlbnRlcjtcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJT05GUkVT
TkVMXG51bmlmb3JtIHZlYzQgdlJlZmxlY3Rpb25Db250cm9sO1xuI2VuZGlmXG59O1xudW5pZm9y
bSBTY2VuZSB7XG5tYXQ0IHZpZXdQcm9qZWN0aW9uO1xuI2lmZGVmIE1VTFRJVklFV1xubWF0NCB2
aWV3UHJvamVjdGlvblI7XG4jZW5kaWZcbm1hdDQgdmlldztcbn07IjsKK19NYXRlcmlhbHNfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVy
c1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBiYWNrZ3JvdW5kVWJv
RGVjbGFyYXRpb24gPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYmFja2dyb3VuZFZlcnRleERl
Y2xhcmF0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9iYWNrZ3JvdW5kVmVydGV4RGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IGJhY2tncm91bmRWZXJ0ZXhEZWNsYXJhdGlvbiAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJiYWNrZ3JvdW5kVmVydGV4RGVjbGFyYXRpb24i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIGJhY2tncm91bmRWZXJ0ZXhEZWNsYXJhdGlvbjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9l
ZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdiYWNrZ3Jv
dW5kVmVydGV4RGVjbGFyYXRpb24nOwordmFyIHNoYWRlciA9ICJ1bmlmb3JtIG1hdDQgdmlldztc
bnVuaWZvcm0gbWF0NCB2aWV3UHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgc2hhZG93TGV2ZWw7
XG4jaWZkZWYgRElGRlVTRVxudW5pZm9ybSBtYXQ0IGRpZmZ1c2VNYXRyaXg7XG51bmlmb3JtIHZl
YzIgdkRpZmZ1c2VJbmZvcztcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJT05cbnVuaWZvcm0gdmVj
MiB2UmVmbGVjdGlvbkluZm9zO1xudW5pZm9ybSBtYXQ0IHJlZmxlY3Rpb25NYXRyaXg7XG51bmlm
b3JtIHZlYzMgdlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcztcbnVuaWZvcm0gZmxvYXQgZkZv
dk11bHRpcGxpZXI7XG4jZW5kaWZcbiNpZmRlZiBQT0lOVFNJWkVcbnVuaWZvcm0gZmxvYXQgcG9p
bnRTaXplO1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOwor
LyoqIEBoaWRkZW4gKi8KK3ZhciBiYWNrZ3JvdW5kVmVydGV4RGVjbGFyYXRpb24gPSB7IG5hbWU6
IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRl
cnMvU2hhZGVyc0luY2x1ZGUvYm9uZXNEZWNsYXJhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBib25lc0RlY2xhcmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgImJvbmVzRGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJvbmVzRGVj
bGFyYXRpb247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFy
IG5hbWUgPSAnYm9uZXNEZWNsYXJhdGlvbic7Cit2YXIgc2hhZGVyID0gIiNpZiBOVU1fQk9ORV9J
TkZMVUVOQ0VSUz4wXG4jaWZkZWYgQk9ORVRFWFRVUkVcbnVuaWZvcm0gc2FtcGxlcjJEIGJvbmVT
YW1wbGVyO1xudW5pZm9ybSBmbG9hdCBib25lVGV4dHVyZVdpZHRoO1xuI2Vsc2VcbnVuaWZvcm0g
bWF0NCBtQm9uZXNbQm9uZXNQZXJNZXNoXTtcbiNlbmRpZlxuYXR0cmlidXRlIHZlYzQgbWF0cmlj
ZXNJbmRpY2VzO1xuYXR0cmlidXRlIHZlYzQgbWF0cmljZXNXZWlnaHRzO1xuI2lmIE5VTV9CT05F
X0lORkxVRU5DRVJTPjRcbmF0dHJpYnV0ZSB2ZWM0IG1hdHJpY2VzSW5kaWNlc0V4dHJhO1xuYXR0
cmlidXRlIHZlYzQgbWF0cmljZXNXZWlnaHRzRXh0cmE7XG4jZW5kaWZcbiNpZmRlZiBCT05FVEVY
VFVSRVxubWF0NCByZWFkTWF0cml4RnJvbVJhd1NhbXBsZXIoc2FtcGxlcjJEIHNtcCxmbG9hdCBp
bmRleClcbntcbmZsb2F0IG9mZnNldD1pbmRleCo0LjA7XG5mbG9hdCBkeD0xLjAvYm9uZVRleHR1
cmVXaWR0aDtcbnZlYzQgbTA9dGV4dHVyZTJEKHNtcCx2ZWMyKGR4KihvZmZzZXQrMC41KSwwLikp
O1xudmVjNCBtMT10ZXh0dXJlMkQoc21wLHZlYzIoZHgqKG9mZnNldCsxLjUpLDAuKSk7XG52ZWM0
IG0yPXRleHR1cmUyRChzbXAsdmVjMihkeCoob2Zmc2V0KzIuNSksMC4pKTtcbnZlYzQgbTM9dGV4
dHVyZTJEKHNtcCx2ZWMyKGR4KihvZmZzZXQrMy41KSwwLikpO1xucmV0dXJuIG1hdDQobTAsbTEs
bTIsbTMpO1xufVxuI2VuZGlmXG4jZW5kaWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0g
PSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGJvbmVzRGVjbGFyYXRpb24gPSB7IG5hbWU6
IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRl
cnMvU2hhZGVyc0luY2x1ZGUvYm9uZXNWZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvYm9uZXNWZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogYm9uZXNWZXJ0
ZXggKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYm9uZXNWZXJ0ZXgiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIGJvbmVzVmVydGV4OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlh
bHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2JvbmVzVmVydGV4JzsKK3ZhciBzaGFkZXIg
PSAiI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjBcbm1hdDQgaW5mbHVlbmNlO1xuI2lmZGVmIEJP
TkVURVhUVVJFXG5pbmZsdWVuY2U9cmVhZE1hdHJpeEZyb21SYXdTYW1wbGVyKGJvbmVTYW1wbGVy
LG1hdHJpY2VzSW5kaWNlc1swXSkqbWF0cmljZXNXZWlnaHRzWzBdO1xuI2lmIE5VTV9CT05FX0lO
RkxVRU5DRVJTPjFcbmluZmx1ZW5jZSs9cmVhZE1hdHJpeEZyb21SYXdTYW1wbGVyKGJvbmVTYW1w
bGVyLG1hdHJpY2VzSW5kaWNlc1sxXSkqbWF0cmljZXNXZWlnaHRzWzFdO1xuI2VuZGlmXG4jaWYg
TlVNX0JPTkVfSU5GTFVFTkNFUlM+MlxuaW5mbHVlbmNlKz1yZWFkTWF0cml4RnJvbVJhd1NhbXBs
ZXIoYm9uZVNhbXBsZXIsbWF0cmljZXNJbmRpY2VzWzJdKSptYXRyaWNlc1dlaWdodHNbMl07XG4j
ZW5kaWZcbiNpZiBOVU1fQk9ORV9JTkZMVUVOQ0VSUz4zXG5pbmZsdWVuY2UrPXJlYWRNYXRyaXhG
cm9tUmF3U2FtcGxlcihib25lU2FtcGxlcixtYXRyaWNlc0luZGljZXNbM10pKm1hdHJpY2VzV2Vp
Z2h0c1szXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjRcbmluZmx1ZW5jZSs9
cmVhZE1hdHJpeEZyb21SYXdTYW1wbGVyKGJvbmVTYW1wbGVyLG1hdHJpY2VzSW5kaWNlc0V4dHJh
WzBdKSptYXRyaWNlc1dlaWdodHNFeHRyYVswXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxV
RU5DRVJTPjVcbmluZmx1ZW5jZSs9cmVhZE1hdHJpeEZyb21SYXdTYW1wbGVyKGJvbmVTYW1wbGVy
LG1hdHJpY2VzSW5kaWNlc0V4dHJhWzFdKSptYXRyaWNlc1dlaWdodHNFeHRyYVsxXTtcbiNlbmRp
ZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjZcbmluZmx1ZW5jZSs9cmVhZE1hdHJpeEZyb21S
YXdTYW1wbGVyKGJvbmVTYW1wbGVyLG1hdHJpY2VzSW5kaWNlc0V4dHJhWzJdKSptYXRyaWNlc1dl
aWdodHNFeHRyYVsyXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjdcbmluZmx1
ZW5jZSs9cmVhZE1hdHJpeEZyb21SYXdTYW1wbGVyKGJvbmVTYW1wbGVyLG1hdHJpY2VzSW5kaWNl
c0V4dHJhWzNdKSptYXRyaWNlc1dlaWdodHNFeHRyYVszXTtcbiNlbmRpZlxuI2Vsc2VcbmluZmx1
ZW5jZT1tQm9uZXNbaW50KG1hdHJpY2VzSW5kaWNlc1swXSldKm1hdHJpY2VzV2VpZ2h0c1swXTtc
biNpZiBOVU1fQk9ORV9JTkZMVUVOQ0VSUz4xXG5pbmZsdWVuY2UrPW1Cb25lc1tpbnQobWF0cmlj
ZXNJbmRpY2VzWzFdKV0qbWF0cmljZXNXZWlnaHRzWzFdO1xuI2VuZGlmXG4jaWYgTlVNX0JPTkVf
SU5GTFVFTkNFUlM+MlxuaW5mbHVlbmNlKz1tQm9uZXNbaW50KG1hdHJpY2VzSW5kaWNlc1syXSld
Km1hdHJpY2VzV2VpZ2h0c1syXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjNc
bmluZmx1ZW5jZSs9bUJvbmVzW2ludChtYXRyaWNlc0luZGljZXNbM10pXSptYXRyaWNlc1dlaWdo
dHNbM107XG4jZW5kaWZcbiNpZiBOVU1fQk9ORV9JTkZMVUVOQ0VSUz40XG5pbmZsdWVuY2UrPW1C
b25lc1tpbnQobWF0cmljZXNJbmRpY2VzRXh0cmFbMF0pXSptYXRyaWNlc1dlaWdodHNFeHRyYVsw
XTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjVcbmluZmx1ZW5jZSs9bUJvbmVz
W2ludChtYXRyaWNlc0luZGljZXNFeHRyYVsxXSldKm1hdHJpY2VzV2VpZ2h0c0V4dHJhWzFdO1xu
I2VuZGlmXG4jaWYgTlVNX0JPTkVfSU5GTFVFTkNFUlM+NlxuaW5mbHVlbmNlKz1tQm9uZXNbaW50
KG1hdHJpY2VzSW5kaWNlc0V4dHJhWzJdKV0qbWF0cmljZXNXZWlnaHRzRXh0cmFbMl07XG4jZW5k
aWZcbiNpZiBOVU1fQk9ORV9JTkZMVUVOQ0VSUz43XG5pbmZsdWVuY2UrPW1Cb25lc1tpbnQobWF0
cmljZXNJbmRpY2VzRXh0cmFbM10pXSptYXRyaWNlc1dlaWdodHNFeHRyYVszXTtcbiNlbmRpZlxu
I2VuZGlmXG5maW5hbFdvcmxkPWZpbmFsV29ybGQqaW5mbHVlbmNlO1xuI2VuZGlmIjsKK19NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1
ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBib25l
c1ZlcnRleCA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9idW1wRnJhZ21lbnQudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2J1bXBGcmFnbWVudC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogYnVtcEZyYWdtZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgImJ1bXBGcmFnbWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYnVtcEZyYWdtZW50OyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJp
YWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2J1
bXBGcmFnbWVudCc7Cit2YXIgc2hhZGVyID0gInZlYzIgdXZPZmZzZXQ9dmVjMigwLjAsMC4wKTtc
biNpZiBkZWZpbmVkKEJVTVApIHx8IGRlZmluZWQoUEFSQUxMQVgpXG4jaWZkZWYgTk9STUFMWFlT
Q0FMRVxuZmxvYXQgbm9ybWFsU2NhbGU9MS4wO1xuI2Vsc2VcbmZsb2F0IG5vcm1hbFNjYWxlPXZC
dW1wSW5mb3MueTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoVEFOR0VOVCkgJiYgZGVmaW5lZChOT1JN
QUwpXG5tYXQzIFRCTj12VEJOO1xuI2Vsc2Vcbm1hdDMgVEJOPWNvdGFuZ2VudF9mcmFtZShub3Jt
YWxXKm5vcm1hbFNjYWxlLHZQb3NpdGlvblcsdkJ1bXBVVik7XG4jZW5kaWZcbiNlbGlmIGRlZmlu
ZWQoQU5JU09UUk9QSUMpXG4jaWYgZGVmaW5lZChUQU5HRU5UKSAmJiBkZWZpbmVkKE5PUk1BTClc
bm1hdDMgVEJOPXZUQk47XG4jZWxzZVxubWF0MyBUQk49Y290YW5nZW50X2ZyYW1lKG5vcm1hbFcs
dlBvc2l0aW9uVyx2TWFpblVWMSx2ZWMyKDEuLDEuKSk7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVm
IFBBUkFMTEFYXG5tYXQzIGludlRCTj10cmFuc3Bvc2VNYXQzKFRCTik7XG4jaWZkZWYgUEFSQUxM
QVhPQ0NMVVNJT05cbnV2T2Zmc2V0PXBhcmFsbGF4T2NjbHVzaW9uKGludlRCTiotdmlld0RpcmVj
dGlvblcsaW52VEJOKm5vcm1hbFcsdkJ1bXBVVix2QnVtcEluZm9zLnopO1xuI2Vsc2VcbnV2T2Zm
c2V0PXBhcmFsbGF4T2Zmc2V0KGludlRCTip2aWV3RGlyZWN0aW9uVyx2QnVtcEluZm9zLnopO1xu
I2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBCVU1QXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQ
XG5ub3JtYWxXPW5vcm1hbGl6ZSh0ZXh0dXJlMkQoYnVtcFNhbXBsZXIsdkJ1bXBVVikueHl6KjIu
MC0xLjApO1xubm9ybWFsVz1ub3JtYWxpemUobWF0Myhub3JtYWxNYXRyaXgpKm5vcm1hbFcpO1xu
I2Vsc2Vcbm5vcm1hbFc9cGVydHVyYk5vcm1hbChUQk4sdkJ1bXBVVit1dk9mZnNldCk7XG4jZW5k
aWZcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBA
aGlkZGVuICovCit2YXIgYnVtcEZyYWdtZW50ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRl
ciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2J1
bXBGcmFnbWVudEZ1bmN0aW9ucy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvYnVtcEZyYWdtZW50RnVuY3Rpb25zLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBidW1wRnJhZ21lbnRGdW5jdGlvbnMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiYnVtcEZyYWdtZW50RnVuY3Rpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBidW1wRnJhZ21lbnRGdW5jdGlvbnM7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZl
Y3QudHMiKTsKKwordmFyIG5hbWUgPSAnYnVtcEZyYWdtZW50RnVuY3Rpb25zJzsKK3ZhciBzaGFk
ZXIgPSAiI2lmIGRlZmluZWQoQlVNUCkgfHwgZGVmaW5lZChDTEVBUkNPQVRfQlVNUCkgfHwgZGVm
aW5lZChBTklTT1RST1BJQylcbiNpZiBkZWZpbmVkKFRBTkdFTlQpICYmIGRlZmluZWQoTk9STUFM
KVxudmFyeWluZyBtYXQzIHZUQk47XG4jZW5kaWZcbiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxN
QVBcbnVuaWZvcm0gbWF0NCBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbnZlYzMgcGVydHVyYk5vcm1h
bChtYXQzIGNvdGFuZ2VudEZyYW1lLHZlYzMgdGV4dHVyZVNhbXBsZSxmbG9hdCBzY2FsZSlcbntc
bnRleHR1cmVTYW1wbGU9dGV4dHVyZVNhbXBsZSoyLjAtMS4wO1xuI2lmZGVmIE5PUk1BTFhZU0NB
TEVcbnRleHR1cmVTYW1wbGU9bm9ybWFsaXplKHRleHR1cmVTYW1wbGUqdmVjMyhzY2FsZSxzY2Fs
ZSwxLjApKTtcbiNlbmRpZlxucmV0dXJuIG5vcm1hbGl6ZShjb3RhbmdlbnRGcmFtZSp0ZXh0dXJl
U2FtcGxlKTtcbn1cblxubWF0MyBjb3RhbmdlbnRfZnJhbWUodmVjMyBub3JtYWwsdmVjMyBwLHZl
YzIgdXYsdmVjMiB0YW5nZW50U3BhY2VQYXJhbXMpXG57XG5cbnV2PWdsX0Zyb250RmFjaW5nID8g
dXYgOiAtdXY7XG5cbnZlYzMgZHAxPWRGZHgocCk7XG52ZWMzIGRwMj1kRmR5KHApO1xudmVjMiBk
dXYxPWRGZHgodXYpO1xudmVjMiBkdXYyPWRGZHkodXYpO1xuXG52ZWMzIGRwMnBlcnA9Y3Jvc3Mo
ZHAyLG5vcm1hbCk7XG52ZWMzIGRwMXBlcnA9Y3Jvc3Mobm9ybWFsLGRwMSk7XG52ZWMzIHRhbmdl
bnQ9ZHAycGVycCpkdXYxLngrZHAxcGVycCpkdXYyLng7XG52ZWMzIGJpdGFuZ2VudD1kcDJwZXJw
KmR1djEueStkcDFwZXJwKmR1djIueTtcblxudGFuZ2VudCo9dGFuZ2VudFNwYWNlUGFyYW1zLng7
XG5iaXRhbmdlbnQqPXRhbmdlbnRTcGFjZVBhcmFtcy55O1xuXG5mbG9hdCBpbnZtYXg9aW52ZXJz
ZXNxcnQobWF4KGRvdCh0YW5nZW50LHRhbmdlbnQpLGRvdChiaXRhbmdlbnQsYml0YW5nZW50KSkp
O1xucmV0dXJuIG1hdDModGFuZ2VudCppbnZtYXgsYml0YW5nZW50Kmludm1heCxub3JtYWwpO1xu
fVxuI2VuZGlmXG4jaWZkZWYgQlVNUFxuI2lmbmRlZiBQQlJcbiNpZiBCVU1QRElSRUNUVVYgPT0g
MVxuI2RlZmluZSB2QnVtcFVWIHZNYWluVVYxXG4jZWxpZiBCVU1QRElSRUNUVVYgPT0gMlxuI2Rl
ZmluZSB2QnVtcFVWIHZNYWluVVYyXG4jZWxzZVxudmFyeWluZyB2ZWMyIHZCdW1wVVY7XG4jZW5k
aWZcbnVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBTYW1wbGVyO1xuI2VuZGlmXG52ZWMzIHBlcnR1cmJO
b3JtYWwobWF0MyBjb3RhbmdlbnRGcmFtZSx2ZWMyIHV2KVxue1xucmV0dXJuIHBlcnR1cmJOb3Jt
YWwoY290YW5nZW50RnJhbWUsdGV4dHVyZTJEKGJ1bXBTYW1wbGVyLHV2KS54eXosdkJ1bXBJbmZv
cy55KTtcbn1cbnZlYzMgcGVydHVyYk5vcm1hbChtYXQzIGNvdGFuZ2VudEZyYW1lLHZlYzMgY29s
b3IpXG57XG5yZXR1cm4gcGVydHVyYk5vcm1hbChjb3RhbmdlbnRGcmFtZSxjb2xvcix2QnVtcElu
Zm9zLnkpO1xufVxuXG5tYXQzIGNvdGFuZ2VudF9mcmFtZSh2ZWMzIG5vcm1hbCx2ZWMzIHAsdmVj
MiB1dilcbntcbnJldHVybiBjb3RhbmdlbnRfZnJhbWUobm9ybWFsLHAsdXYsdlRhbmdlbnRTcGFj
ZVBhcmFtcyk7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKEJVTVApICYmIGRlZmluZWQoUEFSQUxM
QVgpXG5jb25zdCBmbG9hdCBtaW5TYW1wbGVzPTQuO1xuY29uc3QgZmxvYXQgbWF4U2FtcGxlcz0x
NS47XG5jb25zdCBpbnQgaU1heFNhbXBsZXM9MTU7XG5cbnZlYzIgcGFyYWxsYXhPY2NsdXNpb24o
dmVjMyB2Vmlld0RpckNvVCx2ZWMzIHZOb3JtYWxDb1QsdmVjMiB0ZXhDb29yZCxmbG9hdCBwYXJh
bGxheFNjYWxlKSB7XG5mbG9hdCBwYXJhbGxheExpbWl0PWxlbmd0aCh2Vmlld0RpckNvVC54eSkv
dlZpZXdEaXJDb1QuejtcbnBhcmFsbGF4TGltaXQqPXBhcmFsbGF4U2NhbGU7XG52ZWMyIHZPZmZz
ZXREaXI9bm9ybWFsaXplKHZWaWV3RGlyQ29ULnh5KTtcbnZlYzIgdk1heE9mZnNldD12T2Zmc2V0
RGlyKnBhcmFsbGF4TGltaXQ7XG5mbG9hdCBudW1TYW1wbGVzPW1heFNhbXBsZXMrKGRvdCh2Vmll
d0RpckNvVCx2Tm9ybWFsQ29UKSoobWluU2FtcGxlcy1tYXhTYW1wbGVzKSk7XG5mbG9hdCBzdGVw
U2l6ZT0xLjAvbnVtU2FtcGxlcztcblxuZmxvYXQgY3VyclJheUhlaWdodD0xLjA7XG52ZWMyIHZD
dXJyT2Zmc2V0PXZlYzIoMCwwKTtcbnZlYzIgdkxhc3RPZmZzZXQ9dmVjMigwLDApO1xuZmxvYXQg
bGFzdFNhbXBsZWRIZWlnaHQ9MS4wO1xuZmxvYXQgY3VyclNhbXBsZWRIZWlnaHQ9MS4wO1xuZm9y
IChpbnQgaT0wOyBpPGlNYXhTYW1wbGVzOyBpKyspXG57XG5jdXJyU2FtcGxlZEhlaWdodD10ZXh0
dXJlMkQoYnVtcFNhbXBsZXIsdkJ1bXBVVit2Q3Vyck9mZnNldCkudztcblxuaWYgKGN1cnJTYW1w
bGVkSGVpZ2h0PmN1cnJSYXlIZWlnaHQpXG57XG5mbG9hdCBkZWx0YTE9Y3VyclNhbXBsZWRIZWln
aHQtY3VyclJheUhlaWdodDtcbmZsb2F0IGRlbHRhMj0oY3VyclJheUhlaWdodCtzdGVwU2l6ZSkt
bGFzdFNhbXBsZWRIZWlnaHQ7XG5mbG9hdCByYXRpbz1kZWx0YTEvKGRlbHRhMStkZWx0YTIpO1xu
dkN1cnJPZmZzZXQ9KHJhdGlvKSogdkxhc3RPZmZzZXQrKDEuMC1yYXRpbykqdkN1cnJPZmZzZXQ7
XG5cbmJyZWFrO1xufVxuZWxzZVxue1xuY3VyclJheUhlaWdodC09c3RlcFNpemU7XG52TGFzdE9m
ZnNldD12Q3Vyck9mZnNldDtcbnZDdXJyT2Zmc2V0Kz1zdGVwU2l6ZSp2TWF4T2Zmc2V0O1xubGFz
dFNhbXBsZWRIZWlnaHQ9Y3VyclNhbXBsZWRIZWlnaHQ7XG59XG59XG5yZXR1cm4gdkN1cnJPZmZz
ZXQ7XG59XG52ZWMyIHBhcmFsbGF4T2Zmc2V0KHZlYzMgdmlld0RpcixmbG9hdCBoZWlnaHRTY2Fs
ZSlcbntcblxuZmxvYXQgaGVpZ2h0PXRleHR1cmUyRChidW1wU2FtcGxlcix2QnVtcFVWKS53O1xu
dmVjMiB0ZXhDb29yZE9mZnNldD1oZWlnaHRTY2FsZSp2aWV3RGlyLnh5KmhlaWdodDtcbnJldHVy
biAtdGV4Q29vcmRPZmZzZXQ7XG59XG4jZW5kaWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGJ1bXBGcmFnbWVudEZ1bmN0aW9ucyA9
IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9idW1wVmVydGV4LnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMv
U2hhZGVyc0luY2x1ZGUvYnVtcFZlcnRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGJ1bXBW
ZXJ0ZXggKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYnVtcFZlcnRleCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gYnVtcFZlcnRleDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJp
YWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdidW1wVmVydGV4JzsKK3ZhciBzaGFkZXIg
PSAiI2lmIGRlZmluZWQoQlVNUCkgfHwgZGVmaW5lZChQQVJBTExBWCkgfHwgZGVmaW5lZChDTEVB
UkNPQVRfQlVNUClcbiNpZiBkZWZpbmVkKFRBTkdFTlQpICYmIGRlZmluZWQoTk9STUFMKVxudmVj
MyB0Ym5Ob3JtYWw9bm9ybWFsaXplKG5vcm1hbFVwZGF0ZWQpO1xudmVjMyB0Ym5UYW5nZW50PW5v
cm1hbGl6ZSh0YW5nZW50VXBkYXRlZC54eXopO1xudmVjMyB0Ym5CaXRhbmdlbnQ9Y3Jvc3ModGJu
Tm9ybWFsLHRiblRhbmdlbnQpKnRhbmdlbnRVcGRhdGVkLnc7XG52VEJOPW1hdDMoZmluYWxXb3Js
ZCkqbWF0Myh0Ym5UYW5nZW50LHRibkJpdGFuZ2VudCx0Ym5Ob3JtYWwpO1xuI2VuZGlmXG4jZW5k
aWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZm
ZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAq
LwordmFyIGJ1bXBWZXJ0ZXggPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYnVtcFZlcnRleERl
Y2xhcmF0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9i
dW1wVmVydGV4RGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IGJ1bXBWZXJ0ZXhEZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJidW1wVmVydGV4RGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJ1bXBWZXJ0
ZXhEZWNsYXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
Cit2YXIgbmFtZSA9ICdidW1wVmVydGV4RGVjbGFyYXRpb24nOwordmFyIHNoYWRlciA9ICIjaWYg
ZGVmaW5lZChCVU1QKSB8fCBkZWZpbmVkKFBBUkFMTEFYKSB8fCBkZWZpbmVkKENMRUFSQ09BVF9C
VU1QKVxuI2lmIGRlZmluZWQoVEFOR0VOVCkgJiYgZGVmaW5lZChOT1JNQUwpXG52YXJ5aW5nIG1h
dDMgdlRCTjtcbiNlbmRpZlxuI2VuZGlmXG4iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0g
PSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGJ1bXBWZXJ0ZXhEZWNsYXJhdGlvbiA9IHsg
bmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVudC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVudC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBjbGlwUGxhbmVGcmFnbWVudCAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJjbGlwUGxhbmVGcmFnbWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gY2xpcFBsYW5lRnJhZ21lbnQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3Qu
dHMiKTsKKwordmFyIG5hbWUgPSAnY2xpcFBsYW5lRnJhZ21lbnQnOwordmFyIHNoYWRlciA9ICIj
aWZkZWYgQ0xJUFBMQU5FXG5pZiAoZkNsaXBEaXN0YW5jZT4wLjApXG57XG5kaXNjYXJkO1xufVxu
I2VuZGlmXG4jaWZkZWYgQ0xJUFBMQU5FMlxuaWYgKGZDbGlwRGlzdGFuY2UyPjAuMClcbntcbmRp
c2NhcmQ7XG59XG4jZW5kaWZcbiNpZmRlZiBDTElQUExBTkUzXG5pZiAoZkNsaXBEaXN0YW5jZTM+
MC4wKVxue1xuZGlzY2FyZDtcbn1cbiNlbmRpZlxuI2lmZGVmIENMSVBQTEFORTRcbmlmIChmQ2xp
cERpc3RhbmNlND4wLjApXG57XG5kaXNjYXJkO1xufVxuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVy
c1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBjbGlwUGxhbmVGcmFn
bWVudCA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0
aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
Y2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IGNsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRpb24gKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9l
ZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdjbGlwUGxh
bmVGcmFnbWVudERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIENMSVBQTEFORVxu
dmFyeWluZyBmbG9hdCBmQ2xpcERpc3RhbmNlO1xuI2VuZGlmXG4jaWZkZWYgQ0xJUFBMQU5FMlxu
dmFyeWluZyBmbG9hdCBmQ2xpcERpc3RhbmNlMjtcbiNlbmRpZlxuI2lmZGVmIENMSVBQTEFORTNc
bnZhcnlpbmcgZmxvYXQgZkNsaXBEaXN0YW5jZTM7XG4jZW5kaWZcbiNpZmRlZiBDTElQUExBTkU0
XG52YXJ5aW5nIGZsb2F0IGZDbGlwRGlzdGFuY2U0O1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVy
c1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBjbGlwUGxhbmVGcmFn
bWVudERlY2xhcmF0aW9uID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZUZyYWdt
ZW50RGVjbGFyYXRpb24yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1No
YWRlcnNJbmNsdWRlL2NsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRpb24yLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGNsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRp
b24yICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNsaXBQbGFuZUZyYWdt
ZW50RGVjbGFyYXRpb24yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGlwUGxhbmVGcmFnbWVudERl
Y2xhcmF0aW9uMjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2
YXIgbmFtZSA9ICdjbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uMic7Cit2YXIgc2hhZGVyID0g
IiNpZmRlZiBDTElQUExBTkVcbmluIGZsb2F0IGZDbGlwRGlzdGFuY2U7XG4jZW5kaWZcbiNpZmRl
ZiBDTElQUExBTkUyXG5pbiBmbG9hdCBmQ2xpcERpc3RhbmNlMjtcbiNlbmRpZlxuI2lmZGVmIENM
SVBQTEFORTNcbmluIGZsb2F0IGZDbGlwRGlzdGFuY2UzO1xuI2VuZGlmXG4jaWZkZWYgQ0xJUFBM
QU5FNFxuaW4gZmxvYXQgZkNsaXBEaXN0YW5jZTQ7XG4jZW5kaWYiOworX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJz
U3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGNsaXBQbGFuZUZyYWdt
ZW50RGVjbGFyYXRpb24yID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRl
eC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lVmVydGV4
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBjbGlwUGxhbmVWZXJ0ZXggKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY2xpcFBsYW5lVmVydGV4IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBjbGlwUGxhbmVWZXJ0ZXg7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9l
ZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnY2xpcFBsYW5lVmVydGV4JzsKK3ZhciBzaGFkZXIg
PSAiI2lmZGVmIENMSVBQTEFORVxuZkNsaXBEaXN0YW5jZT1kb3Qod29ybGRQb3MsdkNsaXBQbGFu
ZSk7XG4jZW5kaWZcbiNpZmRlZiBDTElQUExBTkUyXG5mQ2xpcERpc3RhbmNlMj1kb3Qod29ybGRQ
b3MsdkNsaXBQbGFuZTIpO1xuI2VuZGlmXG4jaWZkZWYgQ0xJUFBMQU5FM1xuZkNsaXBEaXN0YW5j
ZTM9ZG90KHdvcmxkUG9zLHZDbGlwUGxhbmUzKTtcbiNlbmRpZlxuI2lmZGVmIENMSVBQTEFORTRc
bmZDbGlwRGlzdGFuY2U0PWRvdCh3b3JsZFBvcyx2Q2xpcFBsYW5lNCk7XG4jZW5kaWYiOworX01h
dGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5j
bHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGNs
aXBQbGFuZVZlcnRleCA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVWZXJ0ZXhE
ZWNsYXJhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9jbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBjbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJjbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbiIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gY2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb247IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0
ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnY2xpcFBsYW5lVmVy
dGV4RGVjbGFyYXRpb24nOwordmFyIHNoYWRlciA9ICIjaWZkZWYgQ0xJUFBMQU5FXG51bmlmb3Jt
IHZlYzQgdkNsaXBQbGFuZTtcbnZhcnlpbmcgZmxvYXQgZkNsaXBEaXN0YW5jZTtcbiNlbmRpZlxu
I2lmZGVmIENMSVBQTEFORTJcbnVuaWZvcm0gdmVjNCB2Q2xpcFBsYW5lMjtcbnZhcnlpbmcgZmxv
YXQgZkNsaXBEaXN0YW5jZTI7XG4jZW5kaWZcbiNpZmRlZiBDTElQUExBTkUzXG51bmlmb3JtIHZl
YzQgdkNsaXBQbGFuZTM7XG52YXJ5aW5nIGZsb2F0IGZDbGlwRGlzdGFuY2UzO1xuI2VuZGlmXG4j
aWZkZWYgQ0xJUFBMQU5FNFxudW5pZm9ybSB2ZWM0IHZDbGlwUGxhbmU0O1xudmFyeWluZyBmbG9h
dCBmQ2xpcERpc3RhbmNlNDtcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9
IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgY2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb24g
PSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb24yLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9jbGlwUGxh
bmVWZXJ0ZXhEZWNsYXJhdGlvbjIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IGNsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uMiAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJjbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbjIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIGNsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uMjsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4v
TWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdjbGlwUGxhbmVWZXJ0ZXhEZWNs
YXJhdGlvbjInOwordmFyIHNoYWRlciA9ICIjaWZkZWYgQ0xJUFBMQU5FXG51bmlmb3JtIHZlYzQg
dkNsaXBQbGFuZTtcbm91dCBmbG9hdCBmQ2xpcERpc3RhbmNlO1xuI2VuZGlmXG4jaWZkZWYgQ0xJ
UFBMQU5FMlxudW5pZm9ybSB2ZWM0IHZDbGlwUGxhbmUyO1xub3V0IGZsb2F0IGZDbGlwRGlzdGFu
Y2UyO1xuI2VuZGlmXG4jaWZkZWYgQ0xJUFBMQU5FM1xudW5pZm9ybSB2ZWM0IHZDbGlwUGxhbmUz
O1xub3V0IGZsb2F0IGZDbGlwRGlzdGFuY2UzO1xuI2VuZGlmXG4jaWZkZWYgQ0xJUFBMQU5FNFxu
dW5pZm9ybSB2ZWM0IHZDbGlwUGxhbmU0O1xub3V0IGZsb2F0IGZDbGlwRGlzdGFuY2U0O1xuI2Vu
ZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVm
ZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4g
Ki8KK3ZhciBjbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbjIgPSB7IG5hbWU6IG5hbWUsIHNoYWRl
cjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0lu
Y2x1ZGUvZGVmYXVsdEZyYWdtZW50RGVjbGFyYXRpb24udHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZGVmYXVsdEZyYWdtZW50RGVjbGFyYXRpb24udHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdEZyYWdtZW50RGVj
bGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZGVmYXVsdEZy
YWdtZW50RGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRlZmF1bHRGcmFnbWVudERl
Y2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3Zh
ciBuYW1lID0gJ2RlZmF1bHRGcmFnbWVudERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAidW5p
Zm9ybSB2ZWM0IHZEaWZmdXNlQ29sb3I7XG4jaWZkZWYgU1BFQ1VMQVJURVJNXG51bmlmb3JtIHZl
YzQgdlNwZWN1bGFyQ29sb3I7XG4jZW5kaWZcbnVuaWZvcm0gdmVjMyB2RW1pc3NpdmVDb2xvcjtc
bnVuaWZvcm0gZmxvYXQgdmlzaWJpbGl0eTtcblxuI2lmZGVmIERJRkZVU0VcbnVuaWZvcm0gdmVj
MiB2RGlmZnVzZUluZm9zO1xuI2VuZGlmXG4jaWZkZWYgQU1CSUVOVFxudW5pZm9ybSB2ZWMyIHZB
bWJpZW50SW5mb3M7XG4jZW5kaWZcbiNpZmRlZiBPUEFDSVRZXG51bmlmb3JtIHZlYzIgdk9wYWNp
dHlJbmZvcztcbiNlbmRpZlxuI2lmZGVmIEVNSVNTSVZFXG51bmlmb3JtIHZlYzIgdkVtaXNzaXZl
SW5mb3M7XG4jZW5kaWZcbiNpZmRlZiBMSUdIVE1BUFxudW5pZm9ybSB2ZWMyIHZMaWdodG1hcElu
Zm9zO1xuI2VuZGlmXG4jaWZkZWYgQlVNUFxudW5pZm9ybSB2ZWMzIHZCdW1wSW5mb3M7XG51bmlm
b3JtIHZlYzIgdlRhbmdlbnRTcGFjZVBhcmFtcztcbiNlbmRpZlxuI2lmIGRlZmluZWQoUkVGTEVD
VElPTk1BUF9TUEhFUklDQUwpIHx8IGRlZmluZWQoUkVGTEVDVElPTk1BUF9QUk9KRUNUSU9OKSB8
fCBkZWZpbmVkKFJFRlJBQ1RJT04pXG51bmlmb3JtIG1hdDQgdmlldztcbiNlbmRpZlxuI2lmZGVm
IFJFRlJBQ1RJT05cbnVuaWZvcm0gdmVjNCB2UmVmcmFjdGlvbkluZm9zO1xuI2lmbmRlZiBSRUZS
QUNUSU9OTUFQXzNEXG51bmlmb3JtIG1hdDQgcmVmcmFjdGlvbk1hdHJpeDtcbiNlbmRpZlxuI2lm
ZGVmIFJFRlJBQ1RJT05GUkVTTkVMXG51bmlmb3JtIHZlYzQgcmVmcmFjdGlvbkxlZnRDb2xvcjtc
bnVuaWZvcm0gdmVjNCByZWZyYWN0aW9uUmlnaHRDb2xvcjtcbiNlbmRpZlxuI2VuZGlmXG4jaWYg
ZGVmaW5lZChTUEVDVUxBUikgJiYgZGVmaW5lZChTUEVDVUxBUlRFUk0pXG51bmlmb3JtIHZlYzIg
dlNwZWN1bGFySW5mb3M7XG4jZW5kaWZcbiNpZmRlZiBESUZGVVNFRlJFU05FTFxudW5pZm9ybSB2
ZWM0IGRpZmZ1c2VMZWZ0Q29sb3I7XG51bmlmb3JtIHZlYzQgZGlmZnVzZVJpZ2h0Q29sb3I7XG4j
ZW5kaWZcbiNpZmRlZiBPUEFDSVRZRlJFU05FTFxudW5pZm9ybSB2ZWM0IG9wYWNpdHlQYXJ0cztc
biNlbmRpZlxuI2lmZGVmIEVNSVNTSVZFRlJFU05FTFxudW5pZm9ybSB2ZWM0IGVtaXNzaXZlTGVm
dENvbG9yO1xudW5pZm9ybSB2ZWM0IGVtaXNzaXZlUmlnaHRDb2xvcjtcbiNlbmRpZlxuXG4jaWZk
ZWYgUkVGTEVDVElPTlxudW5pZm9ybSB2ZWMyIHZSZWZsZWN0aW9uSW5mb3M7XG4jaWYgZGVmaW5l
ZChSRUZMRUNUSU9OTUFQX1BMQU5BUikgfHwgZGVmaW5lZChSRUZMRUNUSU9OTUFQX0NVQklDKSB8
fCBkZWZpbmVkKFJFRkxFQ1RJT05NQVBfUFJPSkVDVElPTikgfHwgZGVmaW5lZChSRUZMRUNUSU9O
TUFQX0VRVUlSRUNUQU5HVUxBUikgfHwgZGVmaW5lZChSRUZMRUNUSU9OTUFQX1NQSEVSSUNBTCkg
fHwgZGVmaW5lZChSRUZMRUNUSU9OTUFQX1NLWUJPWClcbnVuaWZvcm0gbWF0NCByZWZsZWN0aW9u
TWF0cml4O1xuI2VuZGlmXG4jaWZuZGVmIFJFRkxFQ1RJT05NQVBfU0tZQk9YXG4jaWYgZGVmaW5l
ZChVU0VfTE9DQUxfUkVGTEVDVElPTk1BUF9DVUJJQykgJiYgZGVmaW5lZChSRUZMRUNUSU9OTUFQ
X0NVQklDKVxudW5pZm9ybSB2ZWMzIHZSZWZsZWN0aW9uUG9zaXRpb247XG51bmlmb3JtIHZlYzMg
dlJlZmxlY3Rpb25TaXplO1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9ORlJFU05F
TFxudW5pZm9ybSB2ZWM0IHJlZmxlY3Rpb25MZWZ0Q29sb3I7XG51bmlmb3JtIHZlYzQgcmVmbGVj
dGlvblJpZ2h0Q29sb3I7XG4jZW5kaWZcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtu
YW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZGVmYXVsdEZyYWdtZW50RGVjbGFy
YXRpb24gPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZGVmYXVsdFVib0RlY2xhcmF0aW9uLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0VWJvRGVj
bGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHRVYm9E
ZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJkZWZhdWx0
VWJvRGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRlZmF1bHRVYm9EZWNsYXJhdGlv
bjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9
ICdkZWZhdWx0VWJvRGVjbGFyYXRpb24nOwordmFyIHNoYWRlciA9ICJsYXlvdXQoc3RkMTQwLGNv
bHVtbl9tYWpvcikgdW5pZm9ybTtcbnVuaWZvcm0gTWF0ZXJpYWxcbntcbnZlYzQgZGlmZnVzZUxl
ZnRDb2xvcjtcbnZlYzQgZGlmZnVzZVJpZ2h0Q29sb3I7XG52ZWM0IG9wYWNpdHlQYXJ0cztcbnZl
YzQgcmVmbGVjdGlvbkxlZnRDb2xvcjtcbnZlYzQgcmVmbGVjdGlvblJpZ2h0Q29sb3I7XG52ZWM0
IHJlZnJhY3Rpb25MZWZ0Q29sb3I7XG52ZWM0IHJlZnJhY3Rpb25SaWdodENvbG9yO1xudmVjNCBl
bWlzc2l2ZUxlZnRDb2xvcjtcbnZlYzQgZW1pc3NpdmVSaWdodENvbG9yO1xudmVjMiB2RGlmZnVz
ZUluZm9zO1xudmVjMiB2QW1iaWVudEluZm9zO1xudmVjMiB2T3BhY2l0eUluZm9zO1xudmVjMiB2
UmVmbGVjdGlvbkluZm9zO1xudmVjMyB2UmVmbGVjdGlvblBvc2l0aW9uO1xudmVjMyB2UmVmbGVj
dGlvblNpemU7XG52ZWMyIHZFbWlzc2l2ZUluZm9zO1xudmVjMiB2TGlnaHRtYXBJbmZvcztcbnZl
YzIgdlNwZWN1bGFySW5mb3M7XG52ZWMzIHZCdW1wSW5mb3M7XG5tYXQ0IGRpZmZ1c2VNYXRyaXg7
XG5tYXQ0IGFtYmllbnRNYXRyaXg7XG5tYXQ0IG9wYWNpdHlNYXRyaXg7XG5tYXQ0IHJlZmxlY3Rp
b25NYXRyaXg7XG5tYXQ0IGVtaXNzaXZlTWF0cml4O1xubWF0NCBsaWdodG1hcE1hdHJpeDtcbm1h
dDQgc3BlY3VsYXJNYXRyaXg7XG5tYXQ0IGJ1bXBNYXRyaXg7XG52ZWMyIHZUYW5nZW50U3BhY2VQ
YXJhbXM7XG5mbG9hdCBwb2ludFNpemU7XG5tYXQ0IHJlZnJhY3Rpb25NYXRyaXg7XG52ZWM0IHZS
ZWZyYWN0aW9uSW5mb3M7XG52ZWM0IHZTcGVjdWxhckNvbG9yO1xudmVjMyB2RW1pc3NpdmVDb2xv
cjtcbmZsb2F0IHZpc2liaWxpdHk7XG52ZWM0IHZEaWZmdXNlQ29sb3I7XG59O1xudW5pZm9ybSBT
Y2VuZSB7XG5tYXQ0IHZpZXdQcm9qZWN0aW9uO1xuI2lmZGVmIE1VTFRJVklFV1xubWF0NCB2aWV3
UHJvamVjdGlvblI7XG4jZW5kaWZcbm1hdDQgdmlldztcbn07XG4iOworX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJz
U3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGRlZmF1bHRVYm9EZWNs
YXJhdGlvbiA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0VmVydGV4RGVjbGFyYXRp
b24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2RlZmF1
bHRWZXJ0ZXhEZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogZGVmYXVsdFZlcnRleERlY2xhcmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgImRlZmF1bHRWZXJ0ZXhEZWNsYXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
ZGVmYXVsdFZlcnRleERlY2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZm
ZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2RlZmF1bHRWZXJ0ZXhEZWNsYXJhdGlvbic7Cit2YXIg
c2hhZGVyID0gIlxudW5pZm9ybSBtYXQ0IHZpZXdQcm9qZWN0aW9uO1xudW5pZm9ybSBtYXQ0IHZp
ZXc7XG4jaWZkZWYgRElGRlVTRVxudW5pZm9ybSBtYXQ0IGRpZmZ1c2VNYXRyaXg7XG51bmlmb3Jt
IHZlYzIgdkRpZmZ1c2VJbmZvcztcbiNlbmRpZlxuI2lmZGVmIEFNQklFTlRcbnVuaWZvcm0gbWF0
NCBhbWJpZW50TWF0cml4O1xudW5pZm9ybSB2ZWMyIHZBbWJpZW50SW5mb3M7XG4jZW5kaWZcbiNp
ZmRlZiBPUEFDSVRZXG51bmlmb3JtIG1hdDQgb3BhY2l0eU1hdHJpeDtcbnVuaWZvcm0gdmVjMiB2
T3BhY2l0eUluZm9zO1xuI2VuZGlmXG4jaWZkZWYgRU1JU1NJVkVcbnVuaWZvcm0gdmVjMiB2RW1p
c3NpdmVJbmZvcztcbnVuaWZvcm0gbWF0NCBlbWlzc2l2ZU1hdHJpeDtcbiNlbmRpZlxuI2lmZGVm
IExJR0hUTUFQXG51bmlmb3JtIHZlYzIgdkxpZ2h0bWFwSW5mb3M7XG51bmlmb3JtIG1hdDQgbGln
aHRtYXBNYXRyaXg7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKFNQRUNVTEFSKSAmJiBkZWZpbmVkKFNQ
RUNVTEFSVEVSTSlcbnVuaWZvcm0gdmVjMiB2U3BlY3VsYXJJbmZvcztcbnVuaWZvcm0gbWF0NCBz
cGVjdWxhck1hdHJpeDtcbiNlbmRpZlxuI2lmZGVmIEJVTVBcbnVuaWZvcm0gdmVjMyB2QnVtcElu
Zm9zO1xudW5pZm9ybSBtYXQ0IGJ1bXBNYXRyaXg7XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9O
XG51bmlmb3JtIG1hdDQgcmVmbGVjdGlvbk1hdHJpeDtcbiNlbmRpZlxuI2lmZGVmIFBPSU5UU0la
RVxudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XG4jZW5kaWZcbiI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNT
dG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZGVmYXVsdFZlcnRleERl
Y2xhcmF0aW9uID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2RlcHRoUHJlUGFzcy50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZGVwdGhQcmVQYXNzLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBkZXB0aFByZVBhc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiZGVwdGhQcmVQYXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZXB0aFByZVBhc3M7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRl
cmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAn
ZGVwdGhQcmVQYXNzJzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIERFUFRIUFJFUEFTU1xuZ2xfRnJh
Z0NvbG9yPXZlYzQoMC4sMC4sMC4sMS4wKTtcbnJldHVybjtcbiNlbmRpZiI7CitfTWF0ZXJpYWxz
X2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1No
YWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZGVwdGhQcmVQ
YXNzID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ZvZ0ZyYWdtZW50LnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ZvZ0ZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IGZvZ0ZyYWdtZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImZv
Z0ZyYWdtZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb2dGcmFnbWVudDsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdmb2dGcmFnbWVudCc7
Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBGT0dcbmZsb2F0IGZvZz1DYWxjRm9nRmFjdG9yKCk7XG5j
b2xvci5yZ2I9Zm9nKmNvbG9yLnJnYisoMS4wLWZvZykqdkZvZ0NvbG9yO1xuI2VuZGlmIjsKK19N
YXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLklu
Y2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBm
b2dGcmFnbWVudCA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9mb2dGcmFnbWVudERlY2xhcmF0
aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZm9nRnJh
Z21lbnREZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGZv
Z0ZyYWdtZW50RGVjbGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiZm9nRnJhZ21lbnREZWNsYXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZm9nRnJhZ21l
bnREZWNsYXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
Cit2YXIgbmFtZSA9ICdmb2dGcmFnbWVudERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAiI2lm
ZGVmIEZPR1xuI2RlZmluZSBGT0dNT0RFX05PTkUgMC5cbiNkZWZpbmUgRk9HTU9ERV9FWFAgMS5c
biNkZWZpbmUgRk9HTU9ERV9FWFAyIDIuXG4jZGVmaW5lIEZPR01PREVfTElORUFSIDMuXG4jZGVm
aW5lIEUgMi43MTgyOFxudW5pZm9ybSB2ZWM0IHZGb2dJbmZvcztcbnVuaWZvcm0gdmVjMyB2Rm9n
Q29sb3I7XG52YXJ5aW5nIHZlYzMgdkZvZ0Rpc3RhbmNlO1xuZmxvYXQgQ2FsY0ZvZ0ZhY3Rvcigp
XG57XG5mbG9hdCBmb2dDb2VmZj0xLjA7XG5mbG9hdCBmb2dTdGFydD12Rm9nSW5mb3MueTtcbmZs
b2F0IGZvZ0VuZD12Rm9nSW5mb3MuejtcbmZsb2F0IGZvZ0RlbnNpdHk9dkZvZ0luZm9zLnc7XG5m
bG9hdCBmb2dEaXN0YW5jZT1sZW5ndGgodkZvZ0Rpc3RhbmNlKTtcbmlmIChGT0dNT0RFX0xJTkVB
UiA9PSB2Rm9nSW5mb3MueClcbntcbmZvZ0NvZWZmPShmb2dFbmQtZm9nRGlzdGFuY2UpLyhmb2dF
bmQtZm9nU3RhcnQpO1xufVxuZWxzZSBpZiAoRk9HTU9ERV9FWFAgPT0gdkZvZ0luZm9zLngpXG57
XG5mb2dDb2VmZj0xLjAvcG93KEUsZm9nRGlzdGFuY2UqZm9nRGVuc2l0eSk7XG59XG5lbHNlIGlm
IChGT0dNT0RFX0VYUDIgPT0gdkZvZ0luZm9zLngpXG57XG5mb2dDb2VmZj0xLjAvcG93KEUsZm9n
RGlzdGFuY2UqZm9nRGlzdGFuY2UqZm9nRGVuc2l0eSpmb2dEZW5zaXR5KTtcbn1cbnJldHVybiBj
bGFtcChmb2dDb2VmZiwwLjAsMS4wKTtcbn1cbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9y
ZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZm9nRnJhZ21lbnREZWNsYXJh
dGlvbiA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9mb2dWZXJ0ZXgudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2ZvZ1ZlcnRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZm9n
VmVydGV4ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImZvZ1ZlcnRleCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gZm9nVmVydGV4OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlh
bHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2ZvZ1ZlcnRleCc7Cit2YXIgc2hhZGVyID0g
IiNpZmRlZiBGT0dcbnZGb2dEaXN0YW5jZT0odmlldyp3b3JsZFBvcykueHl6O1xuI2VuZGlmIjsK
K19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJd
LkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3Zh
ciBmb2dWZXJ0ZXggPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZm9nVmVydGV4RGVjbGFyYXRp
b24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZm9nVmVydGV4
RGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZm9nVmVydGV4
RGVjbGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZm9nVmVy
dGV4RGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvZ1ZlcnRleERlY2xhcmF0aW9u
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0
ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0g
J2ZvZ1ZlcnRleERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIEZPR1xudmFyeWlu
ZyB2ZWMzIHZGb2dEaXN0YW5jZTtcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1l
XSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZm9nVmVydGV4RGVjbGFyYXRpb24gPSB7
IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZnJlc25lbEZ1bmN0aW9uLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9mcmVzbmVsRnVuY3Rpb24udHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IGZyZXNuZWxGdW5jdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJmcmVzbmVsRnVuY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZyZXNuZWxG
dW5jdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3Rf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIg
bmFtZSA9ICdmcmVzbmVsRnVuY3Rpb24nOwordmFyIHNoYWRlciA9ICIjaWZkZWYgRlJFU05FTFxu
ZmxvYXQgY29tcHV0ZUZyZXNuZWxUZXJtKHZlYzMgdmlld0RpcmVjdGlvbix2ZWMzIHdvcmxkTm9y
bWFsLGZsb2F0IGJpYXMsZmxvYXQgcG93ZXIpXG57XG5mbG9hdCBmcmVzbmVsVGVybT1wb3coYmlh
cythYnMoZG90KHZpZXdEaXJlY3Rpb24sd29ybGROb3JtYWwpKSxwb3dlcik7XG5yZXR1cm4gY2xh
bXAoZnJlc25lbFRlcm0sMC4sMS4pO1xufVxuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3Jl
W25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBmcmVzbmVsRnVuY3Rpb24gPSB7
IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaGFybW9uaWNzRnVuY3Rpb25zLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9oYXJtb25pY3NGdW5jdGlvbnMudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGhhcm1vbmljc0Z1bmN0aW9ucyAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJoYXJtb25pY3NGdW5jdGlvbnMiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIGhhcm1vbmljc0Z1bmN0aW9uczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxz
L2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdoYXJtb25pY3NGdW5jdGlvbnMnOwordmFyIHNo
YWRlciA9ICIjaWZkZWYgVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05NQVBcbiNpZmRlZiBTUEhF
UklDQUxfSEFSTU9OSUNTXG5cblxuXG5cblxuXG5cbnZlYzMgY29tcHV0ZUVudmlyb25tZW50SXJy
YWRpYW5jZSh2ZWMzIG5vcm1hbCkge1xucmV0dXJuIHZTcGhlcmljYWxMMDBcbit2U3BoZXJpY2Fs
TDFfMSoobm9ybWFsLnkpXG4rdlNwaGVyaWNhbEwxMCoobm9ybWFsLnopXG4rdlNwaGVyaWNhbEwx
MSoobm9ybWFsLngpXG4rdlNwaGVyaWNhbEwyXzIqKG5vcm1hbC55Km5vcm1hbC54KVxuK3ZTcGhl
cmljYWxMMl8xKihub3JtYWwueSpub3JtYWwueilcbit2U3BoZXJpY2FsTDIwKigoMy4wKm5vcm1h
bC56Km5vcm1hbC56KS0xLjApXG4rdlNwaGVyaWNhbEwyMSoobm9ybWFsLnoqbm9ybWFsLngpXG4r
dlNwaGVyaWNhbEwyMioobm9ybWFsLngqbm9ybWFsLngtKG5vcm1hbC55Km5vcm1hbC55KSk7XG59
XG4jZWxzZVxuXG52ZWMzIGNvbXB1dGVFbnZpcm9ubWVudElycmFkaWFuY2UodmVjMyBub3JtYWwp
IHtcblxuXG5cblxuXG5cblxuXG5cbmZsb2F0IE54PW5vcm1hbC54O1xuZmxvYXQgTnk9bm9ybWFs
Lnk7XG5mbG9hdCBOej1ub3JtYWwuejtcbnZlYzMgQzE9dlNwaGVyaWNhbFpaLnJnYjtcbnZlYzMg
Q3g9dlNwaGVyaWNhbFgucmdiO1xudmVjMyBDeT12U3BoZXJpY2FsWS5yZ2I7XG52ZWMzIEN6PXZT
cGhlcmljYWxaLnJnYjtcbnZlYzMgQ3h4X3p6PXZTcGhlcmljYWxYWF9aWi5yZ2I7XG52ZWMzIEN5
eV96ej12U3BoZXJpY2FsWVlfWloucmdiO1xudmVjMyBDeHk9dlNwaGVyaWNhbFhZLnJnYjtcbnZl
YzMgQ3l6PXZTcGhlcmljYWxZWi5yZ2I7XG52ZWMzIEN6eD12U3BoZXJpY2FsWlgucmdiO1xudmVj
MyBhMT1DeXlfenoqTnkrQ3k7XG52ZWMzIGEyPUN5eipOeithMTtcbnZlYzMgYjE9Q3p4Kk56K0N4
O1xudmVjMyBiMj1DeHkqTnkrYjE7XG52ZWMzIGIzPUN4eF96eipOeCtiMjtcbnZlYzMgdDE9Q3oq
TnorQzE7XG52ZWMzIHQyPWEyKk55K3QxO1xudmVjMyB0Mz1iMypOeCt0MjtcbnJldHVybiB0Mztc
bn1cbiNlbmRpZlxuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVy
OworLyoqIEBoaWRkZW4gKi8KK3ZhciBoYXJtb25pY3NGdW5jdGlvbnMgPSB7IG5hbWU6IG5hbWUs
IHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hh
ZGVyc0luY2x1ZGUvaGVscGVyRnVuY3Rpb25zLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFk
ZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IGhlbHBlckZ1bmN0aW9ucyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJo
ZWxwZXJGdW5jdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhlbHBlckZ1bmN0aW9uczsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFs
cy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdoZWxw
ZXJGdW5jdGlvbnMnOwordmFyIHNoYWRlciA9ICJjb25zdCBmbG9hdCBQST0zLjE0MTU5MjY1MzU4
OTc5MzIzODQ2MjY0MzM4MzI3OTU7XG5jb25zdCBmbG9hdCBMaW5lYXJFbmNvZGVQb3dlckFwcHJv
eD0yLjI7XG5jb25zdCBmbG9hdCBHYW1tYUVuY29kZVBvd2VyQXBwcm94PTEuMC9MaW5lYXJFbmNv
ZGVQb3dlckFwcHJveDtcbmNvbnN0IHZlYzMgTHVtaW5hbmNlRW5jb2RlQXBwcm94PXZlYzMoMC4y
MTI2LDAuNzE1MiwwLjA3MjIpO1xuY29uc3QgZmxvYXQgRXBzaWxvbj0wLjAwMDAwMDE7XG4jZGVm
aW5lIHNhdHVyYXRlKHgpIGNsYW1wKHgsMC4wLDEuMClcbiNkZWZpbmUgYWJzRXBzKHgpIGFicyh4
KStFcHNpbG9uXG4jZGVmaW5lIG1heEVwcyh4KSBtYXgoeCxFcHNpbG9uKVxuI2RlZmluZSBzYXR1
cmF0ZUVwcyh4KSBjbGFtcCh4LEVwc2lsb24sMS4wKVxubWF0MyB0cmFuc3Bvc2VNYXQzKG1hdDMg
aW5NYXRyaXgpIHtcbnZlYzMgaTA9aW5NYXRyaXhbMF07XG52ZWMzIGkxPWluTWF0cml4WzFdO1xu
dmVjMyBpMj1pbk1hdHJpeFsyXTtcbm1hdDMgb3V0TWF0cml4PW1hdDMoXG52ZWMzKGkwLngsaTEu
eCxpMi54KSxcbnZlYzMoaTAueSxpMS55LGkyLnkpLFxudmVjMyhpMC56LGkxLnosaTIueilcbik7
XG5yZXR1cm4gb3V0TWF0cml4O1xufVxuXG5tYXQzIGludmVyc2VNYXQzKG1hdDMgaW5NYXRyaXgp
IHtcbmZsb2F0IGEwMD1pbk1hdHJpeFswXVswXSxhMDE9aW5NYXRyaXhbMF1bMV0sYTAyPWluTWF0
cml4WzBdWzJdO1xuZmxvYXQgYTEwPWluTWF0cml4WzFdWzBdLGExMT1pbk1hdHJpeFsxXVsxXSxh
MTI9aW5NYXRyaXhbMV1bMl07XG5mbG9hdCBhMjA9aW5NYXRyaXhbMl1bMF0sYTIxPWluTWF0cml4
WzJdWzFdLGEyMj1pbk1hdHJpeFsyXVsyXTtcbmZsb2F0IGIwMT1hMjIqYTExLWExMiphMjE7XG5m
bG9hdCBiMTE9LWEyMiphMTArYTEyKmEyMDtcbmZsb2F0IGIyMT1hMjEqYTEwLWExMSphMjA7XG5m
bG9hdCBkZXQ9YTAwKmIwMSthMDEqYjExK2EwMipiMjE7XG5yZXR1cm4gbWF0MyhiMDEsKC1hMjIq
YTAxK2EwMiphMjEpLChhMTIqYTAxLWEwMiphMTEpLFxuYjExLChhMjIqYTAwLWEwMiphMjApLCgt
YTEyKmEwMCthMDIqYTEwKSxcbmIyMSwoLWEyMSphMDArYTAxKmEyMCksKGExMSphMDAtYTAxKmEx
MCkpL2RldDtcbn1cbnZlYzMgdG9MaW5lYXJTcGFjZSh2ZWMzIGNvbG9yKVxue1xucmV0dXJuIHBv
dyhjb2xvcix2ZWMzKExpbmVhckVuY29kZVBvd2VyQXBwcm94KSk7XG59XG52ZWMzIHRvR2FtbWFT
cGFjZSh2ZWMzIGNvbG9yKVxue1xucmV0dXJuIHBvdyhjb2xvcix2ZWMzKEdhbW1hRW5jb2RlUG93
ZXJBcHByb3gpKTtcbn1cbmZsb2F0IHNxdWFyZShmbG9hdCB2YWx1ZSlcbntcbnJldHVybiB2YWx1
ZSp2YWx1ZTtcbn1cbmZsb2F0IHBvdzUoZmxvYXQgdmFsdWUpIHtcbmZsb2F0IHNxPXZhbHVlKnZh
bHVlO1xucmV0dXJuIHNxKnNxKnZhbHVlO1xufVxuZmxvYXQgZ2V0THVtaW5hbmNlKHZlYzMgY29s
b3IpXG57XG5yZXR1cm4gY2xhbXAoZG90KGNvbG9yLEx1bWluYW5jZUVuY29kZUFwcHJveCksMC4s
MS4pO1xufVxuXG5mbG9hdCBnZXRSYW5kKHZlYzIgc2VlZCkge1xucmV0dXJuIGZyYWN0KHNpbihk
b3Qoc2VlZC54eSAsdmVjMigxMi45ODk4LDc4LjIzMykpKSo0Mzc1OC41NDUzKTtcbn1cbmZsb2F0
IGRpdGhlcih2ZWMyIHNlZWQsZmxvYXQgdmFyaWFuY2VBbW91bnQpIHtcbmZsb2F0IHJhbmQ9Z2V0
UmFuZChzZWVkKTtcbmZsb2F0IGRpdGhlcj1taXgoLXZhcmlhbmNlQW1vdW50LzI1NS4wLHZhcmlh
bmNlQW1vdW50LzI1NS4wLHJhbmQpO1xucmV0dXJuIGRpdGhlcjtcbn1cblxuY29uc3QgZmxvYXQg
cmdiZE1heFJhbmdlPTI1NS4wO1xudmVjNCB0b1JHQkQodmVjMyBjb2xvcikge1xuZmxvYXQgbWF4
UkdCPW1heEVwcyhtYXgoY29sb3IucixtYXgoY29sb3IuZyxjb2xvci5iKSkpO1xuZmxvYXQgRD1t
YXgocmdiZE1heFJhbmdlL21heFJHQiwxLik7XG5EPWNsYW1wKGZsb29yKEQpLzI1NS4wLDAuLDEu
KTtcblxudmVjMyByZ2I9Y29sb3IucmdiKkQ7XG5cbnJnYj10b0dhbW1hU3BhY2UocmdiKTtcbnJl
dHVybiB2ZWM0KHJnYixEKTtcbn1cbnZlYzMgZnJvbVJHQkQodmVjNCByZ2JkKSB7XG5cbnJnYmQu
cmdiPXRvTGluZWFyU3BhY2UocmdiZC5yZ2IpO1xuXG5yZXR1cm4gcmdiZC5yZ2IvcmdiZC5hO1xu
fSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZl
Y3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICov
Cit2YXIgaGVscGVyRnVuY3Rpb25zID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9Owor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJv
Y2Vzc2luZ0RlY2xhcmF0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1No
YWRlcnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0
aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbWFnZVByb2Nlc3NpbmdEZWNsYXJhdGlvbjsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFs
cy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdpbWFn
ZVByb2Nlc3NpbmdEZWNsYXJhdGlvbic7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBFWFBPU1VSRVxu
dW5pZm9ybSBmbG9hdCBleHBvc3VyZUxpbmVhcjtcbiNlbmRpZlxuI2lmZGVmIENPTlRSQVNUXG51
bmlmb3JtIGZsb2F0IGNvbnRyYXN0O1xuI2VuZGlmXG4jaWZkZWYgVklHTkVUVEVcbnVuaWZvcm0g
dmVjMiB2SW52ZXJzZVNjcmVlblNpemU7XG51bmlmb3JtIHZlYzQgdmlnbmV0dGVTZXR0aW5nczE7
XG51bmlmb3JtIHZlYzQgdmlnbmV0dGVTZXR0aW5nczI7XG4jZW5kaWZcbiNpZmRlZiBDT0xPUkNV
UlZFU1xudW5pZm9ybSB2ZWM0IHZDYW1lcmFDb2xvckN1cnZlTmVnYXRpdmU7XG51bmlmb3JtIHZl
YzQgdkNhbWVyYUNvbG9yQ3VydmVOZXV0cmFsO1xudW5pZm9ybSB2ZWM0IHZDYW1lcmFDb2xvckN1
cnZlUG9zaXRpdmU7XG4jZW5kaWZcbiNpZmRlZiBDT0xPUkdSQURJTkdcbiNpZmRlZiBDT0xPUkdS
QURJTkczRFxudW5pZm9ybSBoaWdocCBzYW1wbGVyM0QgdHhDb2xvclRyYW5zZm9ybTtcbiNlbHNl
XG51bmlmb3JtIHNhbXBsZXIyRCB0eENvbG9yVHJhbnNmb3JtO1xuI2VuZGlmXG51bmlmb3JtIHZl
YzQgY29sb3JUcmFuc2Zvcm1TZXR0aW5ncztcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9y
ZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgaW1hZ2VQcm9jZXNzaW5nRGVj
bGFyYXRpb24gPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVuY3Rp
b25zLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbWFn
ZVByb2Nlc3NpbmdGdW5jdGlvbnMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IGltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9ucyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJpbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9uczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2Vm
ZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdpbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnMnOwordmFy
IHNoYWRlciA9ICIjaWYgZGVmaW5lZChDT0xPUkdSQURJTkcpICYmICFkZWZpbmVkKENPTE9SR1JB
RElORzNEKVxuXG52ZWMzIHNhbXBsZVRleHR1cmUzRChzYW1wbGVyMkQgY29sb3JUcmFuc2Zvcm0s
dmVjMyBjb2xvcix2ZWMyIHNhbXBsZXIzZFNldHRpbmcpXG57XG5mbG9hdCBzbGljZVNpemU9Mi4w
KnNhbXBsZXIzZFNldHRpbmcueDtcbiNpZmRlZiBTQU1QTEVSM0RHUkVFTkRFUFRIXG5mbG9hdCBz
bGljZUNvbnRpbnVvdXM9KGNvbG9yLmctc2FtcGxlcjNkU2V0dGluZy54KSpzYW1wbGVyM2RTZXR0
aW5nLnk7XG4jZWxzZVxuZmxvYXQgc2xpY2VDb250aW51b3VzPShjb2xvci5iLXNhbXBsZXIzZFNl
dHRpbmcueCkqc2FtcGxlcjNkU2V0dGluZy55O1xuI2VuZGlmXG5mbG9hdCBzbGljZUludGVnZXI9
Zmxvb3Ioc2xpY2VDb250aW51b3VzKTtcblxuXG5mbG9hdCBzbGljZUZyYWN0aW9uPXNsaWNlQ29u
dGludW91cy1zbGljZUludGVnZXI7XG4jaWZkZWYgU0FNUExFUjNER1JFRU5ERVBUSFxudmVjMiBz
bGljZVVWPWNvbG9yLnJiO1xuI2Vsc2VcbnZlYzIgc2xpY2VVVj1jb2xvci5yZztcbiNlbmRpZlxu
c2xpY2VVVi54Kj1zbGljZVNpemU7XG5zbGljZVVWLngrPXNsaWNlSW50ZWdlcipzbGljZVNpemU7
XG5zbGljZVVWPXNhdHVyYXRlKHNsaWNlVVYpO1xudmVjNCBzbGljZTBDb2xvcj10ZXh0dXJlMkQo
Y29sb3JUcmFuc2Zvcm0sc2xpY2VVVik7XG5zbGljZVVWLngrPXNsaWNlU2l6ZTtcbnNsaWNlVVY9
c2F0dXJhdGUoc2xpY2VVVik7XG52ZWM0IHNsaWNlMUNvbG9yPXRleHR1cmUyRChjb2xvclRyYW5z
Zm9ybSxzbGljZVVWKTtcbnZlYzMgcmVzdWx0PW1peChzbGljZTBDb2xvci5yZ2Isc2xpY2UxQ29s
b3IucmdiLHNsaWNlRnJhY3Rpb24pO1xuI2lmZGVmIFNBTVBMRVIzREJHUk1BUFxuY29sb3Iucmdi
PXJlc3VsdC5yZ2I7XG4jZWxzZVxuY29sb3IucmdiPXJlc3VsdC5iZ3I7XG4jZW5kaWZcbnJldHVy
biBjb2xvcjtcbn1cbiNlbmRpZlxuI2lmZGVmIFRPTkVNQVBQSU5HX0FDRVNcblxuXG5cblxuXG5j
b25zdCBtYXQzIEFDRVNJbnB1dE1hdD1tYXQzKFxudmVjMygwLjU5NzE5LDAuMDc2MDAsMC4wMjg0
MCksXG52ZWMzKDAuMzU0NTgsMC45MDgzNCwwLjEzMzgzKSxcbnZlYzMoMC4wNDgyMywwLjAxNTY2
LDAuODM3NzcpXG4pO1xuXG5jb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQ9bWF0MyhcbnZlYzMoIDEu
NjA0NzUsLTAuMTAyMDgsLTAuMDAzMjcpLFxudmVjMygtMC41MzEwOCwxLjEwODEzLC0wLjA3Mjc2
KSxcbnZlYzMoLTAuMDczNjcsLTAuMDA2MDUsMS4wNzYwMilcbik7XG52ZWMzIFJSVEFuZE9EVEZp
dCh2ZWMzIHYpXG57XG52ZWMzIGE9dioodiswLjAyNDU3ODYpLTAuMDAwMDkwNTM3O1xudmVjMyBi
PXYqKDAuOTgzNzI5KnYrMC40MzI5NTEwKSswLjIzODA4MTtcbnJldHVybiBhL2I7XG59XG52ZWMz
IEFDRVNGaXR0ZWQodmVjMyBjb2xvcilcbntcbmNvbG9yPUFDRVNJbnB1dE1hdCpjb2xvcjtcblxu
Y29sb3I9UlJUQW5kT0RURml0KGNvbG9yKTtcbmNvbG9yPUFDRVNPdXRwdXRNYXQqY29sb3I7XG5c
bmNvbG9yPXNhdHVyYXRlKGNvbG9yKTtcbnJldHVybiBjb2xvcjtcbn1cbiNlbmRpZlxudmVjNCBh
cHBseUltYWdlUHJvY2Vzc2luZyh2ZWM0IHJlc3VsdCkge1xuI2lmZGVmIEVYUE9TVVJFXG5yZXN1
bHQucmdiKj1leHBvc3VyZUxpbmVhcjtcbiNlbmRpZlxuI2lmZGVmIFZJR05FVFRFXG5cbnZlYzIg
dmlld3BvcnRYWT1nbF9GcmFnQ29vcmQueHkqdkludmVyc2VTY3JlZW5TaXplO1xudmlld3BvcnRY
WT12aWV3cG9ydFhZKjIuMC0xLjA7XG52ZWMzIHZpZ25ldHRlWFkxPXZlYzModmlld3BvcnRYWSp2
aWduZXR0ZVNldHRpbmdzMS54eSt2aWduZXR0ZVNldHRpbmdzMS56dywxLjApO1xuZmxvYXQgdmln
bmV0dGVUZXJtPWRvdCh2aWduZXR0ZVhZMSx2aWduZXR0ZVhZMSk7XG5mbG9hdCB2aWduZXR0ZT1w
b3codmlnbmV0dGVUZXJtLHZpZ25ldHRlU2V0dGluZ3MyLncpO1xuXG52ZWMzIHZpZ25ldHRlQ29s
b3I9dmlnbmV0dGVTZXR0aW5nczIucmdiO1xuI2lmZGVmIFZJR05FVFRFQkxFTkRNT0RFTVVMVElQ
TFlcbnZlYzMgdmlnbmV0dGVDb2xvck11bHRpcGxpZXI9bWl4KHZpZ25ldHRlQ29sb3IsdmVjMygx
LDEsMSksdmlnbmV0dGUpO1xucmVzdWx0LnJnYio9dmlnbmV0dGVDb2xvck11bHRpcGxpZXI7XG4j
ZW5kaWZcbiNpZmRlZiBWSUdORVRURUJMRU5ETU9ERU9QQVFVRVxucmVzdWx0LnJnYj1taXgodmln
bmV0dGVDb2xvcixyZXN1bHQucmdiLHZpZ25ldHRlKTtcbiNlbmRpZlxuI2VuZGlmXG4jaWZkZWYg
VE9ORU1BUFBJTkdcbiNpZmRlZiBUT05FTUFQUElOR19BQ0VTXG5yZXN1bHQucmdiPUFDRVNGaXR0
ZWQocmVzdWx0LnJnYik7XG4jZWxzZVxuY29uc3QgZmxvYXQgdG9uZW1hcHBpbmdDYWxpYnJhdGlv
bj0xLjU5MDU3OTtcbnJlc3VsdC5yZ2I9MS4wLWV4cDIoLXRvbmVtYXBwaW5nQ2FsaWJyYXRpb24q
cmVzdWx0LnJnYik7XG4jZW5kaWZcbiNlbmRpZlxuXG5yZXN1bHQucmdiPXRvR2FtbWFTcGFjZShy
ZXN1bHQucmdiKTtcbnJlc3VsdC5yZ2I9c2F0dXJhdGUocmVzdWx0LnJnYik7XG4jaWZkZWYgQ09O
VFJBU1RcblxudmVjMyByZXN1bHRIaWdoQ29udHJhc3Q9cmVzdWx0LnJnYipyZXN1bHQucmdiKigz
LjAtMi4wKnJlc3VsdC5yZ2IpO1xuaWYgKGNvbnRyYXN0PDEuMCkge1xuXG5yZXN1bHQucmdiPW1p
eCh2ZWMzKDAuNSwwLjUsMC41KSxyZXN1bHQucmdiLGNvbnRyYXN0KTtcbn0gZWxzZSB7XG5cbnJl
c3VsdC5yZ2I9bWl4KHJlc3VsdC5yZ2IscmVzdWx0SGlnaENvbnRyYXN0LGNvbnRyYXN0LTEuMCk7
XG59XG4jZW5kaWZcblxuI2lmZGVmIENPTE9SR1JBRElOR1xudmVjMyBjb2xvclRyYW5zZm9ybUlu
cHV0PXJlc3VsdC5yZ2IqY29sb3JUcmFuc2Zvcm1TZXR0aW5ncy54eHgrY29sb3JUcmFuc2Zvcm1T
ZXR0aW5ncy55eXk7XG4jaWZkZWYgQ09MT1JHUkFESU5HM0RcbnZlYzMgY29sb3JUcmFuc2Zvcm1P
dXRwdXQ9dGV4dHVyZSh0eENvbG9yVHJhbnNmb3JtLGNvbG9yVHJhbnNmb3JtSW5wdXQpLnJnYjtc
biNlbHNlXG52ZWMzIGNvbG9yVHJhbnNmb3JtT3V0cHV0PXNhbXBsZVRleHR1cmUzRCh0eENvbG9y
VHJhbnNmb3JtLGNvbG9yVHJhbnNmb3JtSW5wdXQsY29sb3JUcmFuc2Zvcm1TZXR0aW5ncy55eiku
cmdiO1xuI2VuZGlmXG5yZXN1bHQucmdiPW1peChyZXN1bHQucmdiLGNvbG9yVHJhbnNmb3JtT3V0
cHV0LGNvbG9yVHJhbnNmb3JtU2V0dGluZ3Mud3d3KTtcbiNlbmRpZlxuI2lmZGVmIENPTE9SQ1VS
VkVTXG5cbmZsb2F0IGx1bWE9Z2V0THVtaW5hbmNlKHJlc3VsdC5yZ2IpO1xudmVjMiBjdXJ2ZU1p
eD1jbGFtcCh2ZWMyKGx1bWEqMy4wLTEuNSxsdW1hKi0zLjArMS41KSx2ZWMyKDAuMCksdmVjMigx
LjApKTtcbnZlYzQgY29sb3JDdXJ2ZT12Q2FtZXJhQ29sb3JDdXJ2ZU5ldXRyYWwrY3VydmVNaXgu
eCp2Q2FtZXJhQ29sb3JDdXJ2ZVBvc2l0aXZlLWN1cnZlTWl4LnkqdkNhbWVyYUNvbG9yQ3VydmVO
ZWdhdGl2ZTtcbnJlc3VsdC5yZ2IqPWNvbG9yQ3VydmUucmdiO1xucmVzdWx0LnJnYj1taXgodmVj
MyhsdW1hKSxyZXN1bHQucmdiLGNvbG9yQ3VydmUuYSk7XG4jZW5kaWZcbnJldHVybiByZXN1bHQ7
XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVm
ZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4g
Ki8KK3ZhciBpbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnMgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjog
c2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1
ZGUvaW5zdGFuY2VzRGVjbGFyYXRpb24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hh
ZGVyc0luY2x1ZGUvaW5zdGFuY2VzRGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogaW5zdGFuY2VzRGVjbGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiaW5zdGFuY2VzRGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGluc3RhbmNlc0RlY2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0
LnRzIik7CisKK3ZhciBuYW1lID0gJ2luc3RhbmNlc0RlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIg
PSAiI2lmZGVmIElOU1RBTkNFU1xuYXR0cmlidXRlIHZlYzQgd29ybGQwO1xuYXR0cmlidXRlIHZl
YzQgd29ybGQxO1xuYXR0cmlidXRlIHZlYzQgd29ybGQyO1xuYXR0cmlidXRlIHZlYzQgd29ybGQz
O1xuI2Vsc2VcbnVuaWZvcm0gbWF0NCB3b3JsZDtcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNT
dG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgaW5zdGFuY2VzRGVjbGFy
YXRpb24gPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzVmVydGV4LnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IGluc3RhbmNlc1ZlcnRleCAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJpbnN0YW5jZXNWZXJ0ZXgiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGluc3RhbmNlc1ZlcnRleDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFs
c19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIp
OworCit2YXIgbmFtZSA9ICdpbnN0YW5jZXNWZXJ0ZXgnOwordmFyIHNoYWRlciA9ICIjaWZkZWYg
SU5TVEFOQ0VTXG5tYXQ0IGZpbmFsV29ybGQ9bWF0NCh3b3JsZDAsd29ybGQxLHdvcmxkMix3b3Js
ZDMpO1xuI2Vsc2Vcbm1hdDQgZmluYWxXb3JsZD13b3JsZDtcbiNlbmRpZiI7CitfTWF0ZXJpYWxz
X2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1No
YWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgaW5zdGFuY2Vz
VmVydGV4ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJGcmFnbWVudC50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUva2VybmVsQmx1ckZyYWdtZW50
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBrZXJuZWxCbHVyRnJhZ21lbnQgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAia2VybmVsQmx1ckZyYWdtZW50Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBrZXJuZWxCbHVyRnJhZ21lbnQ7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIu
L01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAna2VybmVsQmx1ckZyYWdtZW50
JzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIERPRlxuZmFjdG9yPXNhbXBsZUNvQyhzYW1wbGVDb29y
ZHtYfSk7XG5jb21wdXRlZFdlaWdodD1LRVJORUxfV0VJR0hUe1h9KmZhY3RvcjtcbnN1bU9mV2Vp
Z2h0cys9Y29tcHV0ZWRXZWlnaHQ7XG4jZWxzZVxuY29tcHV0ZWRXZWlnaHQ9S0VSTkVMX1dFSUdI
VHtYfTtcbiNlbmRpZlxuI2lmZGVmIFBBQ0tFREZMT0FUXG5ibGVuZCs9dW5wYWNrKHRleHR1cmUy
RCh0ZXh0dXJlU2FtcGxlcixzYW1wbGVDb29yZHtYfSkpKmNvbXB1dGVkV2VpZ2h0O1xuI2Vsc2Vc
bmJsZW5kKz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsc2FtcGxlQ29vcmR7WH0pKmNvbXB1dGVk
V2VpZ2h0O1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOwor
LyoqIEBoaWRkZW4gKi8KK3ZhciBrZXJuZWxCbHVyRnJhZ21lbnQgPSB7IG5hbWU6IG5hbWUsIHNo
YWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUva2VybmVsQmx1ckZyYWdtZW50Mi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJGcmFnbWVudDIudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBrZXJuZWxCbHVyRnJhZ21lbnQyICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgImtlcm5lbEJsdXJGcmFnbWVudDIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGtlcm5lbEJsdXJGcmFnbWVudDI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3Qu
dHMiKTsKKwordmFyIG5hbWUgPSAna2VybmVsQmx1ckZyYWdtZW50Mic7Cit2YXIgc2hhZGVyID0g
IiNpZmRlZiBET0ZcbmZhY3Rvcj1zYW1wbGVDb0Moc2FtcGxlQ2VudGVyK2RlbHRhKktFUk5FTF9E
RVBfT0ZGU0VUe1h9KTtcbmNvbXB1dGVkV2VpZ2h0PUtFUk5FTF9ERVBfV0VJR0hUe1h9KmZhY3Rv
cjtcbnN1bU9mV2VpZ2h0cys9Y29tcHV0ZWRXZWlnaHQ7XG4jZWxzZVxuY29tcHV0ZWRXZWlnaHQ9
S0VSTkVMX0RFUF9XRUlHSFR7WH07XG4jZW5kaWZcbiNpZmRlZiBQQUNLRURGTE9BVFxuYmxlbmQr
PXVucGFjayh0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsc2FtcGxlQ2VudGVyK2RlbHRhKktFUk5F
TF9ERVBfT0ZGU0VUe1h9KSkqY29tcHV0ZWRXZWlnaHQ7XG4jZWxzZVxuYmxlbmQrPXRleHR1cmUy
RCh0ZXh0dXJlU2FtcGxlcixzYW1wbGVDZW50ZXIrZGVsdGEqS0VSTkVMX0RFUF9PRkZTRVR7WH0p
KmNvbXB1dGVkV2VpZ2h0O1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0g
c2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBrZXJuZWxCbHVyRnJhZ21lbnQyID0geyBuYW1l
OiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJWYXJ5aW5nRGVjbGFyYXRpb24udHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9rZXJuZWxCbHVyVmFy
eWluZ0RlY2xhcmF0aW9uLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDoga2VybmVsQmx1clZhcnlpbmdEZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJrZXJuZWxCbHVyVmFyeWluZ0RlY2xhcmF0aW9uIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBrZXJuZWxCbHVyVmFyeWluZ0RlY2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9N
YXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2tlcm5lbEJsdXJWYXJ5aW5nRGVj
bGFyYXRpb24nOwordmFyIHNoYWRlciA9ICJ2YXJ5aW5nIHZlYzIgc2FtcGxlQ29vcmR7WH07IjsK
K19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJd
LkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3Zh
ciBrZXJuZWxCbHVyVmFyeWluZ0RlY2xhcmF0aW9uID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNo
YWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRl
L2tlcm5lbEJsdXJWZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVk
ZS9rZXJuZWxCbHVyVmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDoga2VybmVs
Qmx1clZlcnRleCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJrZXJuZWxC
bHVyVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBrZXJuZWxCbHVyVmVydGV4OyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2Vm
ZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2tlcm5lbEJs
dXJWZXJ0ZXgnOwordmFyIHNoYWRlciA9ICJzYW1wbGVDb29yZHtYfT1zYW1wbGVDZW50ZXIrZGVs
dGEqS0VSTkVMX09GRlNFVHtYfTsiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFk
ZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGtlcm5lbEJsdXJWZXJ0ZXggPSB7IG5hbWU6IG5hbWUs
IHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hh
ZGVyc0luY2x1ZGUvbGlnaHRGcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJ
bmNsdWRlL2xpZ2h0RnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBsaWdodEZy
YWdtZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImxpZ2h0RnJhZ21l
bnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGxpZ2h0RnJhZ21lbnQ7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIu
L01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnbGlnaHRGcmFnbWVudCc7Cit2
YXIgc2hhZGVyID0gIiNpZmRlZiBMSUdIVHtYfVxuI2lmIGRlZmluZWQoU0hBRE9XT05MWSkgfHwg
ZGVmaW5lZChMSUdIVE1BUCkgJiYgZGVmaW5lZChMSUdIVE1BUEVYQ0xVREVEe1h9KSAmJiBkZWZp
bmVkKExJR0hUTUFQTk9TUEVDVUxBUntYfSlcblxuI2Vsc2VcbiNpZmRlZiBQQlJcblxuI2lmZGVm
IFNQT1RMSUdIVHtYfVxucHJlSW5mbz1jb21wdXRlUG9pbnRBbmRTcG90UHJlTGlnaHRpbmdJbmZv
KGxpZ2h0e1h9LnZMaWdodERhdGEsdmlld0RpcmVjdGlvblcsbm9ybWFsVyk7XG4jZWxpZiBkZWZp
bmVkKFBPSU5UTElHSFR7WH0pXG5wcmVJbmZvPWNvbXB1dGVQb2ludEFuZFNwb3RQcmVMaWdodGlu
Z0luZm8obGlnaHR7WH0udkxpZ2h0RGF0YSx2aWV3RGlyZWN0aW9uVyxub3JtYWxXKTtcbiNlbGlm
IGRlZmluZWQoSEVNSUxJR0hUe1h9KVxucHJlSW5mbz1jb21wdXRlSGVtaXNwaGVyaWNQcmVMaWdo
dGluZ0luZm8obGlnaHR7WH0udkxpZ2h0RGF0YSx2aWV3RGlyZWN0aW9uVyxub3JtYWxXKTtcbiNl
bGlmIGRlZmluZWQoRElSTElHSFR7WH0pXG5wcmVJbmZvPWNvbXB1dGVEaXJlY3Rpb25hbFByZUxp
Z2h0aW5nSW5mbyhsaWdodHtYfS52TGlnaHREYXRhLHZpZXdEaXJlY3Rpb25XLG5vcm1hbFcpO1xu
I2VuZGlmXG5wcmVJbmZvLk5kb3RWPU5kb3RWO1xuXG4jaWZkZWYgU1BPVExJR0hUe1h9XG4jaWZk
ZWYgTElHSFRfRkFMTE9GRl9HTFRGe1h9XG5wcmVJbmZvLmF0dGVudWF0aW9uPWNvbXB1dGVEaXN0
YW5jZUxpZ2h0RmFsbG9mZl9HTFRGKHByZUluZm8ubGlnaHREaXN0YW5jZVNxdWFyZWQsbGlnaHR7
WH0udkxpZ2h0RmFsbG9mZi55KTtcbnByZUluZm8uYXR0ZW51YXRpb24qPWNvbXB1dGVEaXJlY3Rp
b25hbExpZ2h0RmFsbG9mZl9HTFRGKGxpZ2h0e1h9LnZMaWdodERpcmVjdGlvbi54eXoscHJlSW5m
by5MLGxpZ2h0e1h9LnZMaWdodEZhbGxvZmYueixsaWdodHtYfS52TGlnaHRGYWxsb2ZmLncpO1xu
I2VsaWYgZGVmaW5lZChMSUdIVF9GQUxMT0ZGX1BIWVNJQ0FMe1h9KVxucHJlSW5mby5hdHRlbnVh
dGlvbj1jb21wdXRlRGlzdGFuY2VMaWdodEZhbGxvZmZfUGh5c2ljYWwocHJlSW5mby5saWdodERp
c3RhbmNlU3F1YXJlZCk7XG5wcmVJbmZvLmF0dGVudWF0aW9uKj1jb21wdXRlRGlyZWN0aW9uYWxM
aWdodEZhbGxvZmZfUGh5c2ljYWwobGlnaHR7WH0udkxpZ2h0RGlyZWN0aW9uLnh5eixwcmVJbmZv
LkwsbGlnaHR7WH0udkxpZ2h0RGlyZWN0aW9uLncpO1xuI2VsaWYgZGVmaW5lZChMSUdIVF9GQUxM
T0ZGX1NUQU5EQVJEe1h9KVxucHJlSW5mby5hdHRlbnVhdGlvbj1jb21wdXRlRGlzdGFuY2VMaWdo
dEZhbGxvZmZfU3RhbmRhcmQocHJlSW5mby5saWdodE9mZnNldCxsaWdodHtYfS52TGlnaHRGYWxs
b2ZmLngpO1xucHJlSW5mby5hdHRlbnVhdGlvbio9Y29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxs
b2ZmX1N0YW5kYXJkKGxpZ2h0e1h9LnZMaWdodERpcmVjdGlvbi54eXoscHJlSW5mby5MLGxpZ2h0
e1h9LnZMaWdodERpcmVjdGlvbi53LGxpZ2h0e1h9LnZMaWdodERhdGEudyk7XG4jZWxzZVxucHJl
SW5mby5hdHRlbnVhdGlvbj1jb21wdXRlRGlzdGFuY2VMaWdodEZhbGxvZmYocHJlSW5mby5saWdo
dE9mZnNldCxwcmVJbmZvLmxpZ2h0RGlzdGFuY2VTcXVhcmVkLGxpZ2h0e1h9LnZMaWdodEZhbGxv
ZmYueCxsaWdodHtYfS52TGlnaHRGYWxsb2ZmLnkpO1xucHJlSW5mby5hdHRlbnVhdGlvbio9Y29t
cHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmKGxpZ2h0e1h9LnZMaWdodERpcmVjdGlvbi54eXos
cHJlSW5mby5MLGxpZ2h0e1h9LnZMaWdodERpcmVjdGlvbi53LGxpZ2h0e1h9LnZMaWdodERhdGEu
dyxsaWdodHtYfS52TGlnaHRGYWxsb2ZmLnosbGlnaHR7WH0udkxpZ2h0RmFsbG9mZi53KTtcbiNl
bmRpZlxuI2VsaWYgZGVmaW5lZChQT0lOVExJR0hUe1h9KVxuI2lmZGVmIExJR0hUX0ZBTExPRkZf
R0xURntYfVxucHJlSW5mby5hdHRlbnVhdGlvbj1jb21wdXRlRGlzdGFuY2VMaWdodEZhbGxvZmZf
R0xURihwcmVJbmZvLmxpZ2h0RGlzdGFuY2VTcXVhcmVkLGxpZ2h0e1h9LnZMaWdodEZhbGxvZmYu
eSk7XG4jZWxpZiBkZWZpbmVkKExJR0hUX0ZBTExPRkZfUEhZU0lDQUx7WH0pXG5wcmVJbmZvLmF0
dGVudWF0aW9uPWNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9QaHlzaWNhbChwcmVJbmZvLmxp
Z2h0RGlzdGFuY2VTcXVhcmVkKTtcbiNlbGlmIGRlZmluZWQoTElHSFRfRkFMTE9GRl9TVEFOREFS
RHtYfSlcbnByZUluZm8uYXR0ZW51YXRpb249Y29tcHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX1N0
YW5kYXJkKHByZUluZm8ubGlnaHRPZmZzZXQsbGlnaHR7WH0udkxpZ2h0RmFsbG9mZi54KTtcbiNl
bHNlXG5wcmVJbmZvLmF0dGVudWF0aW9uPWNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZihwcmVJ
bmZvLmxpZ2h0T2Zmc2V0LHByZUluZm8ubGlnaHREaXN0YW5jZVNxdWFyZWQsbGlnaHR7WH0udkxp
Z2h0RmFsbG9mZi54LGxpZ2h0e1h9LnZMaWdodEZhbGxvZmYueSk7XG4jZW5kaWZcbiNlbHNlXG5w
cmVJbmZvLmF0dGVudWF0aW9uPTEuMDtcbiNlbmRpZlxuXG5cbiNpZmRlZiBIRU1JTElHSFR7WH1c
bnByZUluZm8ucm91Z2huZXNzPXJvdWdobmVzcztcbiNlbHNlXG5wcmVJbmZvLnJvdWdobmVzcz1h
ZGp1c3RSb3VnaG5lc3NGcm9tTGlnaHRQcm9wZXJ0aWVzKHJvdWdobmVzcyxsaWdodHtYfS52TGln
aHREaWZmdXNlLmEscHJlSW5mby5saWdodERpc3RhbmNlKTtcbiNlbmRpZlxuXG4jaWZkZWYgSEVN
SUxJR0hUe1h9XG5pbmZvLmRpZmZ1c2U9Y29tcHV0ZUhlbWlzcGhlcmljRGlmZnVzZUxpZ2h0aW5n
KHByZUluZm8sbGlnaHR7WH0udkxpZ2h0RGlmZnVzZS5yZ2IsbGlnaHR7WH0udkxpZ2h0R3JvdW5k
KTtcbiNlbGlmIGRlZmluZWQoU1NfVFJBTlNMVUNFTkNZKVxuaW5mby5kaWZmdXNlPWNvbXB1dGVE
aWZmdXNlQW5kVHJhbnNtaXR0ZWRMaWdodGluZyhwcmVJbmZvLGxpZ2h0e1h9LnZMaWdodERpZmZ1
c2UucmdiLHRyYW5zbWl0dGFuY2UpO1xuI2Vsc2VcbmluZm8uZGlmZnVzZT1jb21wdXRlRGlmZnVz
ZUxpZ2h0aW5nKHByZUluZm8sbGlnaHR7WH0udkxpZ2h0RGlmZnVzZS5yZ2IpO1xuI2VuZGlmXG5c
biNpZmRlZiBTUEVDVUxBUlRFUk1cbiNpZmRlZiBBTklTT1RST1BJQ1xuaW5mby5zcGVjdWxhcj1j
b21wdXRlQW5pc290cm9waWNTcGVjdWxhckxpZ2h0aW5nKHByZUluZm8sdmlld0RpcmVjdGlvblcs
bm9ybWFsVyxhbmlzb3Ryb3BpY1RhbmdlbnQsYW5pc290cm9waWNCaXRhbmdlbnQsYW5pc290cm9w
eSxzcGVjdWxhckVudmlyb25tZW50UjAsc3BlY3VsYXJFbnZpcm9ubWVudFI5MCxBQVJvdWdobmVz
c0ZhY3RvcnMueCxsaWdodHtYfS52TGlnaHREaWZmdXNlLnJnYik7XG4jZWxzZVxuaW5mby5zcGVj
dWxhcj1jb21wdXRlU3BlY3VsYXJMaWdodGluZyhwcmVJbmZvLG5vcm1hbFcsc3BlY3VsYXJFbnZp
cm9ubWVudFIwLHNwZWN1bGFyRW52aXJvbm1lbnRSOTAsQUFSb3VnaG5lc3NGYWN0b3JzLngsbGln
aHR7WH0udkxpZ2h0RGlmZnVzZS5yZ2IpO1xuI2VuZGlmXG4jZW5kaWZcblxuI2lmZGVmIFNIRUVO
XG4jaWZkZWYgU0hFRU5fTElOS1dJVEhBTEJFRE9cblxucHJlSW5mby5yb3VnaG5lc3M9c2hlZW5J
bnRlbnNpdHk7XG4jZW5kaWZcbmluZm8uc2hlZW49Y29tcHV0ZVNoZWVuTGlnaHRpbmcocHJlSW5m
byxub3JtYWxXLHNoZWVuQ29sb3Isc3BlY3VsYXJFbnZpcm9ubWVudFI5MCxBQVJvdWdobmVzc0Zh
Y3RvcnMueCxsaWdodHtYfS52TGlnaHREaWZmdXNlLnJnYik7XG4jZW5kaWZcblxuI2lmZGVmIENM
RUFSQ09BVFxuXG4jaWZkZWYgSEVNSUxJR0hUe1h9XG5wcmVJbmZvLnJvdWdobmVzcz1jbGVhckNv
YXRSb3VnaG5lc3M7XG4jZWxzZVxucHJlSW5mby5yb3VnaG5lc3M9YWRqdXN0Um91Z2huZXNzRnJv
bUxpZ2h0UHJvcGVydGllcyhjbGVhckNvYXRSb3VnaG5lc3MsbGlnaHR7WH0udkxpZ2h0RGlmZnVz
ZS5hLHByZUluZm8ubGlnaHREaXN0YW5jZSk7XG4jZW5kaWZcbmluZm8uY2xlYXJDb2F0PWNvbXB1
dGVDbGVhckNvYXRMaWdodGluZyhwcmVJbmZvLGNsZWFyQ29hdE5vcm1hbFcsY2xlYXJDb2F0QUFS
b3VnaG5lc3NGYWN0b3JzLngsY2xlYXJDb2F0SW50ZW5zaXR5LGxpZ2h0e1h9LnZMaWdodERpZmZ1
c2UucmdiKTtcbiNpZmRlZiBDTEVBUkNPQVRfVElOVFxuXG5hYnNvcnB0aW9uPWNvbXB1dGVDbGVh
ckNvYXRMaWdodGluZ0Fic29ycHRpb24oY2xlYXJDb2F0TmRvdFZSZWZyYWN0LHByZUluZm8uTCxj
bGVhckNvYXROb3JtYWxXLGNsZWFyQ29hdENvbG9yLGNsZWFyQ29hdFRoaWNrbmVzcyxjbGVhckNv
YXRJbnRlbnNpdHkpO1xuaW5mby5kaWZmdXNlKj1hYnNvcnB0aW9uO1xuI2lmZGVmIFNQRUNVTEFS
VEVSTVxuaW5mby5zcGVjdWxhcio9YWJzb3JwdGlvbjtcbiNlbmRpZlxuI2VuZGlmXG5cbmluZm8u
ZGlmZnVzZSo9aW5mby5jbGVhckNvYXQudztcbiNpZmRlZiBTUEVDVUxBUlRFUk1cbmluZm8uc3Bl
Y3VsYXIqPWluZm8uY2xlYXJDb2F0LncqaW5mby5jbGVhckNvYXQudztcbiNlbmRpZlxuI2lmZGVm
IFNIRUVOXG5pbmZvLnNoZWVuKj1pbmZvLmNsZWFyQ29hdC53KmluZm8uY2xlYXJDb2F0Lnc7XG4j
ZW5kaWZcbiNlbmRpZlxuI2Vsc2VcbiNpZmRlZiBTUE9UTElHSFR7WH1cbmluZm89Y29tcHV0ZVNw
b3RMaWdodGluZyh2aWV3RGlyZWN0aW9uVyxub3JtYWxXLGxpZ2h0e1h9LnZMaWdodERhdGEsbGln
aHR7WH0udkxpZ2h0RGlyZWN0aW9uLGxpZ2h0e1h9LnZMaWdodERpZmZ1c2UucmdiLGxpZ2h0e1h9
LnZMaWdodFNwZWN1bGFyLGxpZ2h0e1h9LnZMaWdodERpZmZ1c2UuYSxnbG9zc2luZXNzKTtcbiNl
bGlmIGRlZmluZWQoSEVNSUxJR0hUe1h9KVxuaW5mbz1jb21wdXRlSGVtaXNwaGVyaWNMaWdodGlu
Zyh2aWV3RGlyZWN0aW9uVyxub3JtYWxXLGxpZ2h0e1h9LnZMaWdodERhdGEsbGlnaHR7WH0udkxp
Z2h0RGlmZnVzZS5yZ2IsbGlnaHR7WH0udkxpZ2h0U3BlY3VsYXIsbGlnaHR7WH0udkxpZ2h0R3Jv
dW5kLGdsb3NzaW5lc3MpO1xuI2VsaWYgZGVmaW5lZChQT0lOVExJR0hUe1h9KSB8fCBkZWZpbmVk
KERJUkxJR0hUe1h9KVxuaW5mbz1jb21wdXRlTGlnaHRpbmcodmlld0RpcmVjdGlvblcsbm9ybWFs
VyxsaWdodHtYfS52TGlnaHREYXRhLGxpZ2h0e1h9LnZMaWdodERpZmZ1c2UucmdiLGxpZ2h0e1h9
LnZMaWdodFNwZWN1bGFyLGxpZ2h0e1h9LnZMaWdodERpZmZ1c2UuYSxnbG9zc2luZXNzKTtcbiNl
bmRpZlxuI2VuZGlmXG4jaWZkZWYgUFJPSkVDVEVETElHSFRURVhUVVJFe1h9XG5pbmZvLmRpZmZ1
c2UqPXRleHR1cmUyRChwcm9qZWN0aW9uTGlnaHRTYW1wbGVye1h9LGNvbXB1dGVQcm9qZWN0aW9u
VGV4dHVyZURpZmZ1c2VMaWdodGluZ1VWKHRleHR1cmVQcm9qZWN0aW9uTWF0cml4e1h9KSkucmdi
O1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBTSEFET1d7WH1cbiNpZmRlZiBTSEFET1dDTE9TRUVT
TXtYfVxuI2lmIGRlZmluZWQoU0hBRE9XQ1VCRXtYfSlcbnNoYWRvdz1jb21wdXRlU2hhZG93V2l0
aENsb3NlRVNNQ3ViZShsaWdodHtYfS52TGlnaHREYXRhLnh5eixzaGFkb3dTYW1wbGVye1h9LGxp
Z2h0e1h9LnNoYWRvd3NJbmZvLngsbGlnaHR7WH0uc2hhZG93c0luZm8ueixsaWdodHtYfS5kZXB0
aFZhbHVlcyk7XG4jZWxzZVxuc2hhZG93PWNvbXB1dGVTaGFkb3dXaXRoQ2xvc2VFU00odlBvc2l0
aW9uRnJvbUxpZ2h0e1h9LHZEZXB0aE1ldHJpY3tYfSxzaGFkb3dTYW1wbGVye1h9LGxpZ2h0e1h9
LnNoYWRvd3NJbmZvLngsbGlnaHR7WH0uc2hhZG93c0luZm8ueixsaWdodHtYfS5zaGFkb3dzSW5m
by53KTtcbiNlbmRpZlxuI2VsaWYgZGVmaW5lZChTSEFET1dFU017WH0pXG4jaWYgZGVmaW5lZChT
SEFET1dDVUJFe1h9KVxuc2hhZG93PWNvbXB1dGVTaGFkb3dXaXRoRVNNQ3ViZShsaWdodHtYfS52
TGlnaHREYXRhLnh5eixzaGFkb3dTYW1wbGVye1h9LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLngsbGln
aHR7WH0uc2hhZG93c0luZm8ueixsaWdodHtYfS5kZXB0aFZhbHVlcyk7XG4jZWxzZVxuc2hhZG93
PWNvbXB1dGVTaGFkb3dXaXRoRVNNKHZQb3NpdGlvbkZyb21MaWdodHtYfSx2RGVwdGhNZXRyaWN7
WH0sc2hhZG93U2FtcGxlcntYfSxsaWdodHtYfS5zaGFkb3dzSW5mby54LGxpZ2h0e1h9LnNoYWRv
d3NJbmZvLnosbGlnaHR7WH0uc2hhZG93c0luZm8udyk7XG4jZW5kaWZcbiNlbGlmIGRlZmluZWQo
U0hBRE9XUE9JU1NPTntYfSlcbiNpZiBkZWZpbmVkKFNIQURPV0NVQkV7WH0pXG5zaGFkb3c9Y29t
cHV0ZVNoYWRvd1dpdGhQb2lzc29uU2FtcGxpbmdDdWJlKGxpZ2h0e1h9LnZMaWdodERhdGEueHl6
LHNoYWRvd1NhbXBsZXJ7WH0sbGlnaHR7WH0uc2hhZG93c0luZm8ueSxsaWdodHtYfS5zaGFkb3dz
SW5mby54LGxpZ2h0e1h9LmRlcHRoVmFsdWVzKTtcbiNlbHNlXG5zaGFkb3c9Y29tcHV0ZVNoYWRv
d1dpdGhQb2lzc29uU2FtcGxpbmcodlBvc2l0aW9uRnJvbUxpZ2h0e1h9LHZEZXB0aE1ldHJpY3tY
fSxzaGFkb3dTYW1wbGVye1h9LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLnksbGlnaHR7WH0uc2hhZG93
c0luZm8ueCxsaWdodHtYfS5zaGFkb3dzSW5mby53KTtcbiNlbmRpZlxuI2VsaWYgZGVmaW5lZChT
SEFET1dQQ0Z7WH0pXG4jaWYgZGVmaW5lZChTSEFET1dMT1dRVUFMSVRZe1h9KVxuc2hhZG93PWNv
bXB1dGVTaGFkb3dXaXRoUENGMSh2UG9zaXRpb25Gcm9tTGlnaHR7WH0sdkRlcHRoTWV0cmlje1h9
LHNoYWRvd1NhbXBsZXJ7WH0sbGlnaHR7WH0uc2hhZG93c0luZm8ueCxsaWdodHtYfS5zaGFkb3dz
SW5mby53KTtcbiNlbGlmIGRlZmluZWQoU0hBRE9XTUVESVVNUVVBTElUWXtYfSlcbnNoYWRvdz1j
b21wdXRlU2hhZG93V2l0aFBDRjModlBvc2l0aW9uRnJvbUxpZ2h0e1h9LHZEZXB0aE1ldHJpY3tY
fSxzaGFkb3dTYW1wbGVye1h9LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLnl6LGxpZ2h0e1h9LnNoYWRv
d3NJbmZvLngsbGlnaHR7WH0uc2hhZG93c0luZm8udyk7XG4jZWxzZVxuc2hhZG93PWNvbXB1dGVT
aGFkb3dXaXRoUENGNSh2UG9zaXRpb25Gcm9tTGlnaHR7WH0sdkRlcHRoTWV0cmlje1h9LHNoYWRv
d1NhbXBsZXJ7WH0sbGlnaHR7WH0uc2hhZG93c0luZm8ueXosbGlnaHR7WH0uc2hhZG93c0luZm8u
eCxsaWdodHtYfS5zaGFkb3dzSW5mby53KTtcbiNlbmRpZlxuI2VsaWYgZGVmaW5lZChTSEFET1dQ
Q1NTe1h9KVxuI2lmIGRlZmluZWQoU0hBRE9XTE9XUVVBTElUWXtYfSlcbnNoYWRvdz1jb21wdXRl
U2hhZG93V2l0aFBDU1MxNih2UG9zaXRpb25Gcm9tTGlnaHR7WH0sdkRlcHRoTWV0cmlje1h9LGRl
cHRoU2FtcGxlcntYfSxzaGFkb3dTYW1wbGVye1h9LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLnksbGln
aHR7WH0uc2hhZG93c0luZm8ueixsaWdodHtYfS5zaGFkb3dzSW5mby54LGxpZ2h0e1h9LnNoYWRv
d3NJbmZvLncpO1xuI2VsaWYgZGVmaW5lZChTSEFET1dNRURJVU1RVUFMSVRZe1h9KVxuc2hhZG93
PWNvbXB1dGVTaGFkb3dXaXRoUENTUzMyKHZQb3NpdGlvbkZyb21MaWdodHtYfSx2RGVwdGhNZXRy
aWN7WH0sZGVwdGhTYW1wbGVye1h9LHNoYWRvd1NhbXBsZXJ7WH0sbGlnaHR7WH0uc2hhZG93c0lu
Zm8ueSxsaWdodHtYfS5zaGFkb3dzSW5mby56LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLngsbGlnaHR7
WH0uc2hhZG93c0luZm8udyk7XG4jZWxzZVxuc2hhZG93PWNvbXB1dGVTaGFkb3dXaXRoUENTUzY0
KHZQb3NpdGlvbkZyb21MaWdodHtYfSx2RGVwdGhNZXRyaWN7WH0sZGVwdGhTYW1wbGVye1h9LHNo
YWRvd1NhbXBsZXJ7WH0sbGlnaHR7WH0uc2hhZG93c0luZm8ueSxsaWdodHtYfS5zaGFkb3dzSW5m
by56LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLngsbGlnaHR7WH0uc2hhZG93c0luZm8udyk7XG4jZW5k
aWZcbiNlbHNlXG4jaWYgZGVmaW5lZChTSEFET1dDVUJFe1h9KVxuc2hhZG93PWNvbXB1dGVTaGFk
b3dDdWJlKGxpZ2h0e1h9LnZMaWdodERhdGEueHl6LHNoYWRvd1NhbXBsZXJ7WH0sbGlnaHR7WH0u
c2hhZG93c0luZm8ueCxsaWdodHtYfS5kZXB0aFZhbHVlcyk7XG4jZWxzZVxuc2hhZG93PWNvbXB1
dGVTaGFkb3codlBvc2l0aW9uRnJvbUxpZ2h0e1h9LHZEZXB0aE1ldHJpY3tYfSxzaGFkb3dTYW1w
bGVye1h9LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLngsbGlnaHR7WH0uc2hhZG93c0luZm8udyk7XG4j
ZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFNIQURPV09OTFlcbiNpZm5kZWYgU0hBRE9XSU5VU0VcbiNk
ZWZpbmUgU0hBRE9XSU5VU0VcbiNlbmRpZlxuZ2xvYmFsU2hhZG93Kz1zaGFkb3c7XG5zaGFkb3dM
aWdodENvdW50Kz0xLjA7XG4jZW5kaWZcbiNlbHNlXG5zaGFkb3c9MS47XG4jZW5kaWZcbiNpZm5k
ZWYgU0hBRE9XT05MWVxuI2lmZGVmIENVU1RPTVVTRVJMSUdIVElOR1xuZGlmZnVzZUJhc2UrPWNv
bXB1dGVDdXN0b21EaWZmdXNlTGlnaHRpbmcoaW5mbyxkaWZmdXNlQmFzZSxzaGFkb3cpO1xuI2lm
ZGVmIFNQRUNVTEFSVEVSTVxuc3BlY3VsYXJCYXNlKz1jb21wdXRlQ3VzdG9tU3BlY3VsYXJMaWdo
dGluZyhpbmZvLHNwZWN1bGFyQmFzZSxzaGFkb3cpO1xuI2VuZGlmXG4jZWxpZiBkZWZpbmVkKExJ
R0hUTUFQKSAmJiBkZWZpbmVkKExJR0hUTUFQRVhDTFVERUR7WH0pXG5kaWZmdXNlQmFzZSs9bGln
aHRtYXBDb2xvci5yZ2Iqc2hhZG93O1xuI2lmZGVmIFNQRUNVTEFSVEVSTVxuI2lmbmRlZiBMSUdI
VE1BUE5PU1BFQ1VMQVJ7WH1cbnNwZWN1bGFyQmFzZSs9aW5mby5zcGVjdWxhcipzaGFkb3cqbGln
aHRtYXBDb2xvci5yZ2I7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVFxuI2lmbmRl
ZiBMSUdIVE1BUE5PU1BFQ1VMQVJ7WH1cbmNsZWFyQ29hdEJhc2UrPWluZm8uY2xlYXJDb2F0LnJn
YipzaGFkb3cqbGlnaHRtYXBDb2xvci5yZ2I7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFNIRUVO
XG4jaWZuZGVmIExJR0hUTUFQTk9TUEVDVUxBUntYfVxuc2hlZW5CYXNlKz1pbmZvLnNoZWVuLnJn
YipzaGFkb3c7XG4jZW5kaWZcbiNlbmRpZlxuI2Vsc2VcbmRpZmZ1c2VCYXNlKz1pbmZvLmRpZmZ1
c2Uqc2hhZG93O1xuI2lmZGVmIFNQRUNVTEFSVEVSTVxuc3BlY3VsYXJCYXNlKz1pbmZvLnNwZWN1
bGFyKnNoYWRvdztcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVFxuY2xlYXJDb2F0QmFzZSs9aW5m
by5jbGVhckNvYXQucmdiKnNoYWRvdztcbiNlbmRpZlxuI2lmZGVmIFNIRUVOXG5zaGVlbkJhc2Ur
PWluZm8uc2hlZW4ucmdiKnNoYWRvdztcbiNlbmRpZlxuI2VuZGlmXG4jZW5kaWZcbiNlbmRpZiI7
CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3Qi
XS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2
YXIgbGlnaHRGcmFnbWVudCA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9saWdodEZyYWdtZW50
RGVjbGFyYXRpb24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL2xpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogbGlnaHRGcmFnbWVudERlY2xhcmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgImxpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gbGlnaHRGcmFnbWVudERlY2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRl
cmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2xpZ2h0RnJhZ21lbnREZWNsYXJhdGlv
bic7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBMSUdIVHtYfVxudW5pZm9ybSB2ZWM0IHZMaWdodERh
dGF7WH07XG51bmlmb3JtIHZlYzQgdkxpZ2h0RGlmZnVzZXtYfTtcbiNpZmRlZiBTUEVDVUxBUlRF
Uk1cbnVuaWZvcm0gdmVjMyB2TGlnaHRTcGVjdWxhcntYfTtcbiNlbHNlXG52ZWMzIHZMaWdodFNw
ZWN1bGFye1h9PXZlYzMoMC4pO1xuI2VuZGlmXG4jaWZkZWYgU0hBRE9Xe1h9XG4jaWYgZGVmaW5l
ZChTSEFET1dDVUJFe1h9KVxudW5pZm9ybSBzYW1wbGVyQ3ViZSBzaGFkb3dTYW1wbGVye1h9O1xu
I2Vsc2VcbnZhcnlpbmcgdmVjNCB2UG9zaXRpb25Gcm9tTGlnaHR7WH07XG52YXJ5aW5nIGZsb2F0
IHZEZXB0aE1ldHJpY3tYfTtcbiNpZiBkZWZpbmVkKFNIQURPV1BDU1N7WH0pXG51bmlmb3JtIGhp
Z2hwIHNhbXBsZXIyRFNoYWRvdyBzaGFkb3dTYW1wbGVye1h9O1xudW5pZm9ybSBoaWdocCBzYW1w
bGVyMkQgZGVwdGhTYW1wbGVye1h9O1xuI2VsaWYgZGVmaW5lZChTSEFET1dQQ0Z7WH0pXG51bmlm
b3JtIGhpZ2hwIHNhbXBsZXIyRFNoYWRvdyBzaGFkb3dTYW1wbGVye1h9O1xuI2Vsc2VcbnVuaWZv
cm0gc2FtcGxlcjJEIHNoYWRvd1NhbXBsZXJ7WH07XG4jZW5kaWZcbnVuaWZvcm0gbWF0NCBsaWdo
dE1hdHJpeHtYfTtcbiNlbmRpZlxudW5pZm9ybSB2ZWM0IHNoYWRvd3NJbmZve1h9O1xudW5pZm9y
bSB2ZWMyIGRlcHRoVmFsdWVze1h9O1xuI2VuZGlmXG4jaWZkZWYgU1BPVExJR0hUe1h9XG51bmlm
b3JtIHZlYzQgdkxpZ2h0RGlyZWN0aW9ue1h9O1xudW5pZm9ybSB2ZWM0IHZMaWdodEZhbGxvZmZ7
WH07XG4jZWxpZiBkZWZpbmVkKFBPSU5UTElHSFR7WH0pXG51bmlmb3JtIHZlYzQgdkxpZ2h0RmFs
bG9mZntYfTtcbiNlbGlmIGRlZmluZWQoSEVNSUxJR0hUe1h9KVxudW5pZm9ybSB2ZWMzIHZMaWdo
dEdyb3VuZHtYfTtcbiNlbmRpZlxuI2lmZGVmIFBST0pFQ1RFRExJR0hUVEVYVFVSRXtYfVxudW5p
Zm9ybSBtYXQ0IHRleHR1cmVQcm9qZWN0aW9uTWF0cml4e1h9O1xudW5pZm9ybSBzYW1wbGVyMkQg
cHJvamVjdGlvbkxpZ2h0U2FtcGxlcntYfTtcbiNlbmRpZlxuI2VuZGlmIjsKK19NYXRlcmlhbHNf
ZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hh
ZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBsaWdodEZyYWdt
ZW50RGVjbGFyYXRpb24gPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbGlnaHRVYm9EZWNsYXJh
dGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0VWJv
RGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBsaWdodFVib0Rl
Y2xhcmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImxpZ2h0VWJv
RGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGxpZ2h0VWJvRGVjbGFyYXRpb247IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlh
bHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnbGln
aHRVYm9EZWNsYXJhdGlvbic7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBMSUdIVHtYfVxudW5pZm9y
bSBMaWdodHtYfVxue1xudmVjNCB2TGlnaHREYXRhO1xudmVjNCB2TGlnaHREaWZmdXNlO1xudmVj
MyB2TGlnaHRTcGVjdWxhcjtcbiNpZmRlZiBTUE9UTElHSFR7WH1cbnZlYzQgdkxpZ2h0RGlyZWN0
aW9uO1xudmVjNCB2TGlnaHRGYWxsb2ZmO1xuI2VsaWYgZGVmaW5lZChQT0lOVExJR0hUe1h9KVxu
dmVjNCB2TGlnaHRGYWxsb2ZmO1xuI2VsaWYgZGVmaW5lZChIRU1JTElHSFR7WH0pXG52ZWMzIHZM
aWdodEdyb3VuZDtcbiNlbmRpZlxudmVjNCBzaGFkb3dzSW5mbztcbnZlYzIgZGVwdGhWYWx1ZXM7
XG59IGxpZ2h0e1h9O1xuI2lmZGVmIFBST0pFQ1RFRExJR0hUVEVYVFVSRXtYfVxudW5pZm9ybSBt
YXQ0IHRleHR1cmVQcm9qZWN0aW9uTWF0cml4e1h9O1xudW5pZm9ybSBzYW1wbGVyMkQgcHJvamVj
dGlvbkxpZ2h0U2FtcGxlcntYfTtcbiNlbmRpZlxuI2lmZGVmIFNIQURPV3tYfVxuI2lmIGRlZmlu
ZWQoU0hBRE9XQ1VCRXtYfSlcbnVuaWZvcm0gc2FtcGxlckN1YmUgc2hhZG93U2FtcGxlcntYfTtc
biNlbHNlXG52YXJ5aW5nIHZlYzQgdlBvc2l0aW9uRnJvbUxpZ2h0e1h9O1xudmFyeWluZyBmbG9h
dCB2RGVwdGhNZXRyaWN7WH07XG4jaWYgZGVmaW5lZChTSEFET1dQQ1NTe1h9KVxudW5pZm9ybSBo
aWdocCBzYW1wbGVyMkRTaGFkb3cgc2hhZG93U2FtcGxlcntYfTtcbnVuaWZvcm0gaGlnaHAgc2Ft
cGxlcjJEIGRlcHRoU2FtcGxlcntYfTtcbiNlbGlmIGRlZmluZWQoU0hBRE9XUENGe1h9KVxudW5p
Zm9ybSBoaWdocCBzYW1wbGVyMkRTaGFkb3cgc2hhZG93U2FtcGxlcntYfTtcbiNlbHNlXG51bmlm
b3JtIHNhbXBsZXIyRCBzaGFkb3dTYW1wbGVye1h9O1xuI2VuZGlmXG51bmlmb3JtIG1hdDQgbGln
aHRNYXRyaXh7WH07XG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0
b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBsaWdodFVib0RlY2xhcmF0
aW9uID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0c0ZyYWdtZW50RnVuY3Rpb25zLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0c0ZyYWdt
ZW50RnVuY3Rpb25zLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGxpZ2h0
c0ZyYWdtZW50RnVuY3Rpb25zICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
ImxpZ2h0c0ZyYWdtZW50RnVuY3Rpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBsaWdodHNGcmFn
bWVudEZ1bmN0aW9uczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
Cit2YXIgbmFtZSA9ICdsaWdodHNGcmFnbWVudEZ1bmN0aW9ucyc7Cit2YXIgc2hhZGVyID0gIlxu
c3RydWN0IGxpZ2h0aW5nSW5mb1xue1xudmVjMyBkaWZmdXNlO1xuI2lmZGVmIFNQRUNVTEFSVEVS
TVxudmVjMyBzcGVjdWxhcjtcbiNlbmRpZlxuI2lmZGVmIE5ET1RMXG5mbG9hdCBuZGw7XG4jZW5k
aWZcbn07XG5saWdodGluZ0luZm8gY29tcHV0ZUxpZ2h0aW5nKHZlYzMgdmlld0RpcmVjdGlvblcs
dmVjMyB2Tm9ybWFsLHZlYzQgbGlnaHREYXRhLHZlYzMgZGlmZnVzZUNvbG9yLHZlYzMgc3BlY3Vs
YXJDb2xvcixmbG9hdCByYW5nZSxmbG9hdCBnbG9zc2luZXNzKSB7XG5saWdodGluZ0luZm8gcmVz
dWx0O1xudmVjMyBsaWdodFZlY3Rvclc7XG5mbG9hdCBhdHRlbnVhdGlvbj0xLjA7XG5pZiAobGln
aHREYXRhLncgPT0gMC4pXG57XG52ZWMzIGRpcmVjdGlvbj1saWdodERhdGEueHl6LXZQb3NpdGlv
blc7XG5hdHRlbnVhdGlvbj1tYXgoMC4sMS4wLWxlbmd0aChkaXJlY3Rpb24pL3JhbmdlKTtcbmxp
Z2h0VmVjdG9yVz1ub3JtYWxpemUoZGlyZWN0aW9uKTtcbn1cbmVsc2VcbntcbmxpZ2h0VmVjdG9y
Vz1ub3JtYWxpemUoLWxpZ2h0RGF0YS54eXopO1xufVxuXG5mbG9hdCBuZGw9bWF4KDAuLGRvdCh2
Tm9ybWFsLGxpZ2h0VmVjdG9yVykpO1xuI2lmZGVmIE5ET1RMXG5yZXN1bHQubmRsPW5kbDtcbiNl
bmRpZlxucmVzdWx0LmRpZmZ1c2U9bmRsKmRpZmZ1c2VDb2xvciphdHRlbnVhdGlvbjtcbiNpZmRl
ZiBTUEVDVUxBUlRFUk1cblxudmVjMyBhbmdsZVc9bm9ybWFsaXplKHZpZXdEaXJlY3Rpb25XK2xp
Z2h0VmVjdG9yVyk7XG5mbG9hdCBzcGVjQ29tcD1tYXgoMC4sZG90KHZOb3JtYWwsYW5nbGVXKSk7
XG5zcGVjQ29tcD1wb3coc3BlY0NvbXAsbWF4KDEuLGdsb3NzaW5lc3MpKTtcbnJlc3VsdC5zcGVj
dWxhcj1zcGVjQ29tcCpzcGVjdWxhckNvbG9yKmF0dGVudWF0aW9uO1xuI2VuZGlmXG5yZXR1cm4g
cmVzdWx0O1xufVxubGlnaHRpbmdJbmZvIGNvbXB1dGVTcG90TGlnaHRpbmcodmVjMyB2aWV3RGly
ZWN0aW9uVyx2ZWMzIHZOb3JtYWwsdmVjNCBsaWdodERhdGEsdmVjNCBsaWdodERpcmVjdGlvbix2
ZWMzIGRpZmZ1c2VDb2xvcix2ZWMzIHNwZWN1bGFyQ29sb3IsZmxvYXQgcmFuZ2UsZmxvYXQgZ2xv
c3NpbmVzcykge1xubGlnaHRpbmdJbmZvIHJlc3VsdDtcbnZlYzMgZGlyZWN0aW9uPWxpZ2h0RGF0
YS54eXotdlBvc2l0aW9uVztcbnZlYzMgbGlnaHRWZWN0b3JXPW5vcm1hbGl6ZShkaXJlY3Rpb24p
O1xuZmxvYXQgYXR0ZW51YXRpb249bWF4KDAuLDEuMC1sZW5ndGgoZGlyZWN0aW9uKS9yYW5nZSk7
XG5cbmZsb2F0IGNvc0FuZ2xlPW1heCgwLixkb3QobGlnaHREaXJlY3Rpb24ueHl6LC1saWdodFZl
Y3RvclcpKTtcbmlmIChjb3NBbmdsZT49bGlnaHREaXJlY3Rpb24udylcbntcbmNvc0FuZ2xlPW1h
eCgwLixwb3coY29zQW5nbGUsbGlnaHREYXRhLncpKTtcbmF0dGVudWF0aW9uKj1jb3NBbmdsZTtc
blxuZmxvYXQgbmRsPW1heCgwLixkb3Qodk5vcm1hbCxsaWdodFZlY3RvclcpKTtcbiNpZmRlZiBO
RE9UTFxucmVzdWx0Lm5kbD1uZGw7XG4jZW5kaWZcbnJlc3VsdC5kaWZmdXNlPW5kbCpkaWZmdXNl
Q29sb3IqYXR0ZW51YXRpb247XG4jaWZkZWYgU1BFQ1VMQVJURVJNXG5cbnZlYzMgYW5nbGVXPW5v
cm1hbGl6ZSh2aWV3RGlyZWN0aW9uVytsaWdodFZlY3RvclcpO1xuZmxvYXQgc3BlY0NvbXA9bWF4
KDAuLGRvdCh2Tm9ybWFsLGFuZ2xlVykpO1xuc3BlY0NvbXA9cG93KHNwZWNDb21wLG1heCgxLixn
bG9zc2luZXNzKSk7XG5yZXN1bHQuc3BlY3VsYXI9c3BlY0NvbXAqc3BlY3VsYXJDb2xvciphdHRl
bnVhdGlvbjtcbiNlbmRpZlxucmV0dXJuIHJlc3VsdDtcbn1cbnJlc3VsdC5kaWZmdXNlPXZlYzMo
MC4pO1xuI2lmZGVmIFNQRUNVTEFSVEVSTVxucmVzdWx0LnNwZWN1bGFyPXZlYzMoMC4pO1xuI2Vu
ZGlmXG4jaWZkZWYgTkRPVExcbnJlc3VsdC5uZGw9MC47XG4jZW5kaWZcbnJldHVybiByZXN1bHQ7
XG59XG5saWdodGluZ0luZm8gY29tcHV0ZUhlbWlzcGhlcmljTGlnaHRpbmcodmVjMyB2aWV3RGly
ZWN0aW9uVyx2ZWMzIHZOb3JtYWwsdmVjNCBsaWdodERhdGEsdmVjMyBkaWZmdXNlQ29sb3IsdmVj
MyBzcGVjdWxhckNvbG9yLHZlYzMgZ3JvdW5kQ29sb3IsZmxvYXQgZ2xvc3NpbmVzcykge1xubGln
aHRpbmdJbmZvIHJlc3VsdDtcblxuZmxvYXQgbmRsPWRvdCh2Tm9ybWFsLGxpZ2h0RGF0YS54eXop
KjAuNSswLjU7XG4jaWZkZWYgTkRPVExcbnJlc3VsdC5uZGw9bmRsO1xuI2VuZGlmXG5yZXN1bHQu
ZGlmZnVzZT1taXgoZ3JvdW5kQ29sb3IsZGlmZnVzZUNvbG9yLG5kbCk7XG4jaWZkZWYgU1BFQ1VM
QVJURVJNXG5cbnZlYzMgYW5nbGVXPW5vcm1hbGl6ZSh2aWV3RGlyZWN0aW9uVytsaWdodERhdGEu
eHl6KTtcbmZsb2F0IHNwZWNDb21wPW1heCgwLixkb3Qodk5vcm1hbCxhbmdsZVcpKTtcbnNwZWND
b21wPXBvdyhzcGVjQ29tcCxtYXgoMS4sZ2xvc3NpbmVzcykpO1xucmVzdWx0LnNwZWN1bGFyPXNw
ZWNDb21wKnNwZWN1bGFyQ29sb3I7XG4jZW5kaWZcbnJldHVybiByZXN1bHQ7XG59XG52ZWMyIGNv
bXB1dGVQcm9qZWN0aW9uVGV4dHVyZURpZmZ1c2VMaWdodGluZ1VWKG1hdDQgdGV4dHVyZVByb2pl
Y3Rpb25NYXRyaXgpe1xudmVjNCBzdHJxPXRleHR1cmVQcm9qZWN0aW9uTWF0cml4KnZlYzQodlBv
c2l0aW9uVywxLjApO1xuc3RycS89c3RycS53O1xucmV0dXJuIHN0cnEueHk7XG59IjsKK19NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1
ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBsaWdo
dHNGcmFnbWVudEZ1bmN0aW9ucyA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aERl
Y2xhcmF0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbG9n
RGVwdGhEZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGxvZ0Rl
cHRoRGVjbGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibG9n
RGVwdGhEZWNsYXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbG9nRGVwdGhEZWNsYXJhdGlv
bjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9
ICdsb2dEZXB0aERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIExPR0FSSVRITUlD
REVQVEhcbnVuaWZvcm0gZmxvYXQgbG9nYXJpdGhtaWNEZXB0aENvbnN0YW50O1xudmFyeWluZyBm
bG9hdCB2RnJhZ21lbnREZXB0aDtcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1l
XSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgbG9nRGVwdGhEZWNsYXJhdGlvbiA9IHsg
bmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aEZyYWdtZW50LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbG9nRGVwdGhGcmFnbWVudC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IGxvZ0RlcHRoRnJhZ21lbnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAibG9nRGVwdGhGcmFnbWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbG9n
RGVwdGhGcmFnbWVudDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
Cit2YXIgbmFtZSA9ICdsb2dEZXB0aEZyYWdtZW50JzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIExP
R0FSSVRITUlDREVQVEhcbmdsX0ZyYWdEZXB0aEVYVD1sb2cyKHZGcmFnbWVudERlcHRoKSpsb2dh
cml0aG1pY0RlcHRoQ29uc3RhbnQqMC41O1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3Jl
W25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBsb2dEZXB0aEZyYWdtZW50ID0g
eyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xvZ0RlcHRoVmVydGV4LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xvZ0RlcHRoVmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IGxvZ0RlcHRoVmVydGV4ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgImxvZ0RlcHRoVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBsb2dEZXB0aFZlcnRl
eDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9
ICdsb2dEZXB0aFZlcnRleCc7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBMT0dBUklUSE1JQ0RFUFRI
XG52RnJhZ21lbnREZXB0aD0xLjArZ2xfUG9zaXRpb24udztcbmdsX1Bvc2l0aW9uLno9bG9nMiht
YXgoMC4wMDAwMDEsdkZyYWdtZW50RGVwdGgpKSpsb2dhcml0aG1pY0RlcHRoQ29uc3RhbnQ7XG4j
ZW5kaWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRl
biAqLwordmFyIGxvZ0RlcHRoVmVydGV4ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9
OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL21vcnBo
VGFyZ2V0c1ZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
bW9ycGhUYXJnZXRzVmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBtb3Jw
aFRhcmdldHNWZXJ0ZXggKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibW9y
cGhUYXJnZXRzVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBtb3JwaFRhcmdldHNWZXJ0ZXg7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRl
cmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAn
bW9ycGhUYXJnZXRzVmVydGV4JzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIE1PUlBIVEFSR0VUU1xu
cG9zaXRpb25VcGRhdGVkKz0ocG9zaXRpb257WH0tcG9zaXRpb24pKm1vcnBoVGFyZ2V0SW5mbHVl
bmNlc1t7WH1dO1xuI2lmZGVmIE1PUlBIVEFSR0VUU19OT1JNQUxcbm5vcm1hbFVwZGF0ZWQrPShu
b3JtYWx7WH0tbm9ybWFsKSptb3JwaFRhcmdldEluZmx1ZW5jZXNbe1h9XTtcbiNlbmRpZlxuI2lm
ZGVmIE1PUlBIVEFSR0VUU19UQU5HRU5UXG50YW5nZW50VXBkYXRlZC54eXorPSh0YW5nZW50e1h9
LXRhbmdlbnQueHl6KSptb3JwaFRhcmdldEluZmx1ZW5jZXNbe1h9XTtcbiNlbmRpZlxuI2lmZGVm
IE1PUlBIVEFSR0VUU19VVlxudXZVcGRhdGVkKz0odXZfe1h9LXV2KSptb3JwaFRhcmdldEluZmx1
ZW5jZXNbe1h9XTtcbiNlbmRpZlxuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVd
ID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBtb3JwaFRhcmdldHNWZXJ0ZXggPSB7IG5h
bWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24udHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJn
ZXRzVmVydGV4RGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogbW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAibW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIG1vcnBoVGFyZ2V0c1ZlcnRleERlY2xhcmF0aW9uOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVj
dCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ21vcnBoVGFyZ2V0
c1ZlcnRleERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIE1PUlBIVEFSR0VUU1xu
YXR0cmlidXRlIHZlYzMgcG9zaXRpb257WH07XG4jaWZkZWYgTU9SUEhUQVJHRVRTX05PUk1BTFxu
YXR0cmlidXRlIHZlYzMgbm9ybWFse1h9O1xuI2VuZGlmXG4jaWZkZWYgTU9SUEhUQVJHRVRTX1RB
TkdFTlRcbmF0dHJpYnV0ZSB2ZWMzIHRhbmdlbnR7WH07XG4jZW5kaWZcbiNpZmRlZiBNT1JQSFRB
UkdFVFNfVVZcbmF0dHJpYnV0ZSB2ZWMyIHV2X3tYfTtcbiNlbmRpZlxuI2VuZGlmIjsKK19NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1
ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBtb3Jw
aFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbiA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIg
fTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3Jw
aFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9i
YWxEZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBtb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJtb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJh
dGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFy
YXRpb247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5h
bWUgPSAnbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFyYXRpb24nOwordmFyIHNoYWRlciA9
ICIjaWZkZWYgTU9SUEhUQVJHRVRTXG51bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNl
c1tOVU1fTU9SUEhfSU5GTFVFTkNFUlNdO1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3Jl
W25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBtb3JwaFRhcmdldHNWZXJ0ZXhH
bG9iYWxEZWNsYXJhdGlvbiA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tcnRGcmFnbWVudERl
Y2xhcmF0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
bXJ0RnJhZ21lbnREZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IG1ydEZyYWdtZW50RGVjbGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAibXJ0RnJhZ21lbnREZWNsYXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbXJ0
RnJhZ21lbnREZWNsYXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVy
aWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50
cyIpOworCit2YXIgbmFtZSA9ICdtcnRGcmFnbWVudERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIg
PSAiI2lmIF9fVkVSU0lPTl9fPj0yMDBcbmxheW91dChsb2NhdGlvbj0wKSBvdXQgdmVjNCBnbEZy
YWdEYXRhW3tYfV07XG4jZW5kaWZcbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNo
YWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgbXJ0RnJhZ21lbnREZWNsYXJhdGlvbiA9IHsgbmFt
ZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hh
ZGVycy9TaGFkZXJzSW5jbHVkZS9wYWNraW5nRnVuY3Rpb25zLnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvcGFja2luZ0Z1bmN0aW9ucy50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IHBhY2tpbmdGdW5jdGlvbnMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAicGFja2luZ0Z1bmN0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcGFja2lu
Z0Z1bmN0aW9uczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2
YXIgbmFtZSA9ICdwYWNraW5nRnVuY3Rpb25zJzsKK3ZhciBzaGFkZXIgPSAidmVjNCBwYWNrKGZs
b2F0IGRlcHRoKVxue1xuY29uc3QgdmVjNCBiaXRfc2hpZnQ9dmVjNCgyNTUuMCoyNTUuMCoyNTUu
MCwyNTUuMCoyNTUuMCwyNTUuMCwxLjApO1xuY29uc3QgdmVjNCBiaXRfbWFzaz12ZWM0KDAuMCwx
LjAvMjU1LjAsMS4wLzI1NS4wLDEuMC8yNTUuMCk7XG52ZWM0IHJlcz1mcmFjdChkZXB0aCpiaXRf
c2hpZnQpO1xucmVzLT1yZXMueHh5eipiaXRfbWFzaztcbnJldHVybiByZXM7XG59XG5mbG9hdCB1
bnBhY2sodmVjNCBjb2xvcilcbntcbmNvbnN0IHZlYzQgYml0X3NoaWZ0PXZlYzQoMS4wLygyNTUu
MCoyNTUuMCoyNTUuMCksMS4wLygyNTUuMCoyNTUuMCksMS4wLzI1NS4wLDEuMCk7XG5yZXR1cm4g
ZG90KGNvbG9yLGJpdF9zaGlmdCk7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0g
c2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBwYWNraW5nRnVuY3Rpb25zID0geyBuYW1lOiBu
YW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL3BickJSREZGdW5jdGlvbnMudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVy
cy9TaGFkZXJzSW5jbHVkZS9wYnJCUkRGRnVuY3Rpb25zLnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogcGJyQlJERkZ1bmN0aW9ucyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJwYnJCUkRGRnVuY3Rpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwYnJCUkRGRnVu
Y3Rpb25zOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBu
YW1lID0gJ3BickJSREZGdW5jdGlvbnMnOwordmFyIHNoYWRlciA9ICJcbiNkZWZpbmUgRlJFU05F
TF9NQVhJTVVNX09OX1JPVUdIIDAuMjVcblxuXG5cblxuI2lmZGVmIE1TX0JSREZfRU5FUkdZX0NP
TlNFUlZBVElPTlxuXG5cbnZlYzMgZ2V0RW5lcmd5Q29uc2VydmF0aW9uRmFjdG9yKGNvbnN0IHZl
YzMgc3BlY3VsYXJFbnZpcm9ubWVudFIwLGNvbnN0IHZlYzMgZW52aXJvbm1lbnRCcmRmKSB7XG5y
ZXR1cm4gMS4wK3NwZWN1bGFyRW52aXJvbm1lbnRSMCooMS4wL2Vudmlyb25tZW50QnJkZi55LTEu
MCk7XG59XG4jZW5kaWZcbiNpZmRlZiBFTlZJUk9OTUVOVEJSREZcbnZlYzMgZ2V0QlJERkxvb2t1
cChmbG9hdCBOZG90VixmbG9hdCBwZXJjZXB0dWFsUm91Z2huZXNzKSB7XG5cbnZlYzIgVVY9dmVj
MihOZG90VixwZXJjZXB0dWFsUm91Z2huZXNzKTtcblxudmVjNCBicmRmTG9va3VwPXRleHR1cmUy
RChlbnZpcm9ubWVudEJyZGZTYW1wbGVyLFVWKTtcbiNpZmRlZiBFTlZJUk9OTUVOVEJSREZfUkdC
RFxuYnJkZkxvb2t1cC5yZ2I9ZnJvbVJHQkQoYnJkZkxvb2t1cC5yZ2JhKTtcbiNlbmRpZlxucmV0
dXJuIGJyZGZMb29rdXAucmdiO1xufVxudmVjMyBnZXRSZWZsZWN0YW5jZUZyb21CUkRGTG9va3Vw
KGNvbnN0IHZlYzMgc3BlY3VsYXJFbnZpcm9ubWVudFIwLGNvbnN0IHZlYzMgZW52aXJvbm1lbnRC
cmRmKSB7XG4jaWZkZWYgQlJERl9WX0hFSUdIVF9DT1JSRUxBVEVEXG52ZWMzIHJlZmxlY3RhbmNl
PW1peChlbnZpcm9ubWVudEJyZGYueHh4LGVudmlyb25tZW50QnJkZi55eXksc3BlY3VsYXJFbnZp
cm9ubWVudFIwKTtcbiNlbHNlXG52ZWMzIHJlZmxlY3RhbmNlPXNwZWN1bGFyRW52aXJvbm1lbnRS
MCplbnZpcm9ubWVudEJyZGYueCtlbnZpcm9ubWVudEJyZGYueTtcbiNlbmRpZlxucmV0dXJuIHJl
ZmxlY3RhbmNlO1xufVxuI2VuZGlmXG4jaWYgIWRlZmluZWQoRU5WSVJPTk1FTlRCUkRGKSB8fCBk
ZWZpbmVkKFJFRkxFQ1RJT05NQVBfU0tZQk9YKSB8fCBkZWZpbmVkKEFMUEhBRlJFU05FTClcbnZl
YzMgZ2V0UmVmbGVjdGFuY2VGcm9tQW5hbHl0aWNhbEJSREZMb29rdXBfSm9uZXMoZmxvYXQgVmRv
dE4sdmVjMyByZWZsZWN0YW5jZTAsdmVjMyByZWZsZWN0YW5jZTkwLGZsb2F0IHNtb290aG5lc3Mp
XG57XG5cbmZsb2F0IHdlaWdodD1taXgoRlJFU05FTF9NQVhJTVVNX09OX1JPVUdILDEuMCxzbW9v
dGhuZXNzKTtcbnJldHVybiByZWZsZWN0YW5jZTArd2VpZ2h0KihyZWZsZWN0YW5jZTkwLXJlZmxl
Y3RhbmNlMCkqcG93NShzYXR1cmF0ZSgxLjAtVmRvdE4pKTtcbn1cbiNlbmRpZlxuI2lmIGRlZmlu
ZWQoU0hFRU4pICYmIGRlZmluZWQoUkVGTEVDVElPTilcblxudmVjMyBnZXRTaGVlblJlZmxlY3Rh
bmNlRnJvbUJSREZMb29rdXAoY29uc3QgdmVjMyByZWZsZWN0YW5jZTAsY29uc3QgdmVjMyBlbnZp
cm9ubWVudEJyZGYpIHtcbnZlYzMgc2hlZW5FbnZpcm9ubWVudFJlZmxlY3RhbmNlPXJlZmxlY3Rh
bmNlMCplbnZpcm9ubWVudEJyZGYuYjtcbnJldHVybiBzaGVlbkVudmlyb25tZW50UmVmbGVjdGFu
Y2U7XG59XG4jZW5kaWZcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5c
blxuXG52ZWMzIGZyZXNuZWxTY2hsaWNrR0dYKGZsb2F0IFZkb3RILHZlYzMgcmVmbGVjdGFuY2Uw
LHZlYzMgcmVmbGVjdGFuY2U5MClcbntcbnJldHVybiByZWZsZWN0YW5jZTArKHJlZmxlY3RhbmNl
OTAtcmVmbGVjdGFuY2UwKSpwb3c1KDEuMC1WZG90SCk7XG59XG5mbG9hdCBmcmVzbmVsU2NobGlj
a0dHWChmbG9hdCBWZG90SCxmbG9hdCByZWZsZWN0YW5jZTAsZmxvYXQgcmVmbGVjdGFuY2U5MClc
bntcbnJldHVybiByZWZsZWN0YW5jZTArKHJlZmxlY3RhbmNlOTAtcmVmbGVjdGFuY2UwKSpwb3c1
KDEuMC1WZG90SCk7XG59XG4jaWZkZWYgQ0xFQVJDT0FUXG5cblxuXG5cblxudmVjMyBnZXRSMFJl
bWFwcGVkRm9yQ2xlYXJDb2F0KHZlYzMgZjApIHtcbiNpZmRlZiBDTEVBUkNPQVRfREVGQVVMVElP
UlxuI2lmZGVmIE1PQklMRVxucmV0dXJuIHNhdHVyYXRlKGYwKihmMCowLjUyNjg2OCswLjUyOTMy
NCktMC4wNDgyMjU2KTtcbiNlbHNlXG5yZXR1cm4gc2F0dXJhdGUoZjAqKGYwKigwLjk0MTg5Mi0w
LjI2MzAwOCpmMCkrMC4zNDY0NzkpLTAuMDI4NTk5OCk7XG4jZW5kaWZcbiNlbHNlXG52ZWMzIHM9
c3FydChmMCk7XG52ZWMzIHQ9KHZDbGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zLnordkNsZWFyQ29h
dFJlZnJhY3Rpb25QYXJhbXMudypzKS8odkNsZWFyQ29hdFJlZnJhY3Rpb25QYXJhbXMudyt2Q2xl
YXJDb2F0UmVmcmFjdGlvblBhcmFtcy56KnMpO1xucmV0dXJuIHQqdDtcbiNlbmRpZlxufVxuI2Vu
ZGlmXG5cblxuXG5cblxuXG5mbG9hdCBub3JtYWxEaXN0cmlidXRpb25GdW5jdGlvbl9Ucm93YnJp
ZGdlUmVpdHpHR1goZmxvYXQgTmRvdEgsZmxvYXQgYWxwaGFHKVxue1xuXG5cblxuZmxvYXQgYTI9
c3F1YXJlKGFscGhhRyk7XG5mbG9hdCBkPU5kb3RIKk5kb3RIKihhMi0xLjApKzEuMDtcbnJldHVy
biBhMi8oUEkqZCpkKTtcbn1cbiNpZmRlZiBTSEVFTlxuXG5mbG9hdCBub3JtYWxEaXN0cmlidXRp
b25GdW5jdGlvbl9DaGFybGllU2hlZW4oZmxvYXQgTmRvdEgsZmxvYXQgYWxwaGFHKVxue1xuZmxv
YXQgaW52Uj0xLi9hbHBoYUc7XG5mbG9hdCBjb3MyaD1OZG90SCpOZG90SDtcbmZsb2F0IHNpbjJo
PTEuLWNvczJoO1xucmV0dXJuICgyLitpbnZSKSpwb3coc2luMmgsaW52UiouNSkvKDIuKlBJKTtc
bn1cbiNlbmRpZlxuI2lmZGVmIEFOSVNPVFJPUElDXG5cblxuZmxvYXQgbm9ybWFsRGlzdHJpYnV0
aW9uRnVuY3Rpb25fQnVybGV5R0dYX0FuaXNvdHJvcGljKGZsb2F0IE5kb3RILGZsb2F0IFRkb3RI
LGZsb2F0IEJkb3RILGNvbnN0IHZlYzIgYWxwaGFUQikge1xuZmxvYXQgYTI9YWxwaGFUQi54KmFs
cGhhVEIueTtcbnZlYzMgdj12ZWMzKGFscGhhVEIueSpUZG90SCxhbHBoYVRCLngqQmRvdEgsYTIq
TmRvdEgpO1xuZmxvYXQgdjI9ZG90KHYsdik7XG5mbG9hdCB3Mj1hMi92MjtcbnJldHVybiBhMip3
Mip3MipSRUNJUFJPQ0FMX1BJO1xufVxuI2VuZGlmXG5cblxuXG5cbiNpZmRlZiBCUkRGX1ZfSEVJ
R0hUX0NPUlJFTEFURURcblxuXG5cbmZsb2F0IHNtaXRoVmlzaWJpbGl0eV9HR1hDb3JyZWxhdGVk
KGZsb2F0IE5kb3RMLGZsb2F0IE5kb3RWLGZsb2F0IGFscGhhRykge1xuI2lmZGVmIE1PQklMRVxu
XG5mbG9hdCBHR1hWPU5kb3RMKihOZG90ViooMS4wLWFscGhhRykrYWxwaGFHKTtcbmZsb2F0IEdH
WEw9TmRvdFYqKE5kb3RMKigxLjAtYWxwaGFHKSthbHBoYUcpO1xucmV0dXJuIDAuNS8oR0dYVitH
R1hMKTtcbiNlbHNlXG5mbG9hdCBhMj1hbHBoYUcqYWxwaGFHO1xuZmxvYXQgR0dYVj1OZG90TCpz
cXJ0KE5kb3RWKihOZG90Vi1hMipOZG90VikrYTIpO1xuZmxvYXQgR0dYTD1OZG90VipzcXJ0KE5k
b3RMKihOZG90TC1hMipOZG90TCkrYTIpO1xucmV0dXJuIDAuNS8oR0dYVitHR1hMKTtcbiNlbmRp
ZlxufVxuI2Vsc2VcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmZsb2F0IHNtaXRoVmlz
aWJpbGl0eUcxX1Ryb3dicmlkZ2VSZWl0ekdHWEZhc3QoZmxvYXQgZG90LGZsb2F0IGFscGhhRylc
bntcbiNpZmRlZiBNT0JJTEVcblxucmV0dXJuIDEuMC8oZG90K2FscGhhRysoMS4wLWFscGhhRykq
ZG90ICkpO1xuI2Vsc2VcbmZsb2F0IGFscGhhU3F1YXJlZD1hbHBoYUcqYWxwaGFHO1xucmV0dXJu
IDEuMC8oZG90K3NxcnQoYWxwaGFTcXVhcmVkKygxLjAtYWxwaGFTcXVhcmVkKSpkb3QqZG90KSk7
XG4jZW5kaWZcbn1cbmZsb2F0IHNtaXRoVmlzaWJpbGl0eV9Ucm93YnJpZGdlUmVpdHpHR1hGYXN0
KGZsb2F0IE5kb3RMLGZsb2F0IE5kb3RWLGZsb2F0IGFscGhhRylcbntcbmZsb2F0IHZpc2liaWxp
dHk9c21pdGhWaXNpYmlsaXR5RzFfVHJvd2JyaWRnZVJlaXR6R0dYRmFzdChOZG90TCxhbHBoYUcp
KnNtaXRoVmlzaWJpbGl0eUcxX1Ryb3dicmlkZ2VSZWl0ekdHWEZhc3QoTmRvdFYsYWxwaGFHKTtc
blxucmV0dXJuIHZpc2liaWxpdHk7XG59XG4jZW5kaWZcbiNpZmRlZiBBTklTT1RST1BJQ1xuXG5c
bmZsb2F0IHNtaXRoVmlzaWJpbGl0eV9HR1hDb3JyZWxhdGVkX0FuaXNvdHJvcGljKGZsb2F0IE5k
b3RMLGZsb2F0IE5kb3RWLGZsb2F0IFRkb3RWLGZsb2F0IEJkb3RWLGZsb2F0IFRkb3RMLGZsb2F0
IEJkb3RMLGNvbnN0IHZlYzIgYWxwaGFUQikge1xuZmxvYXQgbGFtYmRhVj1OZG90TCpsZW5ndGgo
dmVjMyhhbHBoYVRCLngqVGRvdFYsYWxwaGFUQi55KkJkb3RWLE5kb3RWKSk7XG5mbG9hdCBsYW1i
ZGFMPU5kb3RWKmxlbmd0aCh2ZWMzKGFscGhhVEIueCpUZG90TCxhbHBoYVRCLnkqQmRvdEwsTmRv
dEwpKTtcbmZsb2F0IHY9MC41LyhsYW1iZGFWK2xhbWJkYUwpO1xucmV0dXJuIHY7XG59XG4jZW5k
aWZcbiNpZmRlZiBDTEVBUkNPQVRcbmZsb2F0IHZpc2liaWxpdHlfS2VsZW1lbihmbG9hdCBWZG90
SCkge1xuXG5cblxucmV0dXJuIDAuMjUvKFZkb3RIKlZkb3RIKTtcbn1cbiNlbmRpZlxuI2lmZGVm
IFNIRUVOXG5cblxuXG5mbG9hdCB2aXNpYmlsaXR5X0FzaGlraG1pbihmbG9hdCBOZG90TCxmbG9h
dCBOZG90VilcbntcbnJldHVybiAxLi8oNC4qKE5kb3RMK05kb3RWLU5kb3RMKk5kb3RWKSk7XG59
XG4jZW5kaWZcblxuXG5cblxuXG5cblxuZmxvYXQgZGlmZnVzZUJSREZfQnVybGV5KGZsb2F0IE5k
b3RMLGZsb2F0IE5kb3RWLGZsb2F0IFZkb3RILGZsb2F0IHJvdWdobmVzcykge1xuXG5cbmZsb2F0
IGRpZmZ1c2VGcmVzbmVsTlY9cG93NShzYXR1cmF0ZUVwcygxLjAtTmRvdEwpKTtcbmZsb2F0IGRp
ZmZ1c2VGcmVzbmVsTkw9cG93NShzYXR1cmF0ZUVwcygxLjAtTmRvdFYpKTtcbmZsb2F0IGRpZmZ1
c2VGcmVzbmVsOTA9MC41KzIuMCpWZG90SCpWZG90SCpyb3VnaG5lc3M7XG5mbG9hdCBmcmVzbmVs
ID1cbigxLjArKGRpZmZ1c2VGcmVzbmVsOTAtMS4wKSpkaWZmdXNlRnJlc25lbE5MKSAqXG4oMS4w
KyhkaWZmdXNlRnJlc25lbDkwLTEuMCkqZGlmZnVzZUZyZXNuZWxOVik7XG5yZXR1cm4gZnJlc25l
bC9QSTtcbn1cbiNpZmRlZiBTU19UUkFOU0xVQ0VOQ1lcblxuXG52ZWMzIHRyYW5zbWl0dGFuY2VC
UkRGX0J1cmxleShjb25zdCB2ZWMzIHRpbnRDb2xvcixjb25zdCB2ZWMzIGRpZmZ1c2lvbkRpc3Rh
bmNlLGZsb2F0IHRoaWNrbmVzcykge1xudmVjMyBTPTEuL21heEVwcyhkaWZmdXNpb25EaXN0YW5j
ZSk7XG52ZWMzIHRlbXA9ZXhwKCgtMC4zMzMzMzMzMzMqdGhpY2tuZXNzKSpTKTtcbnJldHVybiB0
aW50Q29sb3IucmdiKjAuMjUqKHRlbXAqdGVtcCp0ZW1wKzMuMCp0ZW1wKTtcbn1cblxuXG5mbG9h
dCBjb21wdXRlV3JhcHBlZERpZmZ1c2VOZG90TChmbG9hdCBOZG90TCxmbG9hdCB3KSB7XG5mbG9h
dCB0PTEuMCt3O1xuZmxvYXQgaW52dDI9MS4wL3NxdWFyZSh0KTtcbnJldHVybiBzYXR1cmF0ZSgo
TmRvdEwrdykqaW52dDIpO1xufVxuI2VuZGlmXG4iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHBickJSREZGdW5jdGlvbnMgPSB7IG5h
bWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJyRGVidWcudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0lu
Y2x1ZGUvcGJyRGVidWcudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogcGJyRGVidWcgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicGJyRGVidWciLCBmdW5jdGlvbigpIHsgcmV0
dXJuIHBickRlYnVnOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisK
K3ZhciBuYW1lID0gJ3BickRlYnVnJzsKK3ZhciBzaGFkZXIgPSAiI2lmIERFQlVHTU9ERT4wXG5p
ZiAodkNsaXBTcGFjZVBvc2l0aW9uLngvdkNsaXBTcGFjZVBvc2l0aW9uLnc8dkRlYnVnTW9kZS54
KSB7XG5yZXR1cm47XG59XG5cbiNpZiBERUJVR01PREUgPT0gMVxuZ2xfRnJhZ0NvbG9yLnJnYj12
UG9zaXRpb25XLnJnYjtcbiNkZWZpbmUgREVCVUdNT0RFX05PUk1BTElaRVxuI2VsaWYgREVCVUdN
T0RFID09IDIgJiYgZGVmaW5lZChOT1JNQUwpXG5nbF9GcmFnQ29sb3IucmdiPXZOb3JtYWxXLnJn
YjtcbiNkZWZpbmUgREVCVUdNT0RFX05PUk1BTElaRVxuI2VsaWYgREVCVUdNT0RFID09IDMgJiYg
KGRlZmluZWQoQlVNUCkgfHwgZGVmaW5lZChQQVJBTExBWCkgfHwgZGVmaW5lZChBTklTT1RST1BJ
QykpXG5cbmdsX0ZyYWdDb2xvci5yZ2I9VEJOWzBdO1xuI2RlZmluZSBERUJVR01PREVfTk9STUFM
SVpFXG4jZWxpZiBERUJVR01PREUgPT0gNCAmJiAoZGVmaW5lZChCVU1QKSB8fCBkZWZpbmVkKFBB
UkFMTEFYKSB8fCBkZWZpbmVkKEFOSVNPVFJPUElDKSlcblxuZ2xfRnJhZ0NvbG9yLnJnYj1UQk5b
MV07XG4jZGVmaW5lIERFQlVHTU9ERV9OT1JNQUxJWkVcbiNlbGlmIERFQlVHTU9ERSA9PSA1XG5c
bmdsX0ZyYWdDb2xvci5yZ2I9bm9ybWFsVztcbiNkZWZpbmUgREVCVUdNT0RFX05PUk1BTElaRVxu
I2VsaWYgREVCVUdNT0RFID09IDYgJiYgZGVmaW5lZChNQUlOVVYxKVxuZ2xfRnJhZ0NvbG9yLnJn
Yj12ZWMzKHZNYWluVVYxLDAuMCk7XG4jZWxpZiBERUJVR01PREUgPT0gNyAmJiBkZWZpbmVkKE1B
SU5VVjIpXG5nbF9GcmFnQ29sb3IucmdiPXZlYzModk1haW5VVjIsMC4wKTtcbiNlbGlmIERFQlVH
TU9ERSA9PSA4ICYmIGRlZmluZWQoQ0xFQVJDT0FUKSAmJiBkZWZpbmVkKENMRUFSQ09BVF9CVU1Q
KVxuXG5nbF9GcmFnQ29sb3IucmdiPVRCTkNsZWFyQ29hdFswXTtcbiNkZWZpbmUgREVCVUdNT0RF
X05PUk1BTElaRVxuI2VsaWYgREVCVUdNT0RFID09IDkgJiYgZGVmaW5lZChDTEVBUkNPQVQpICYm
IGRlZmluZWQoQ0xFQVJDT0FUX0JVTVApXG5cbmdsX0ZyYWdDb2xvci5yZ2I9VEJOQ2xlYXJDb2F0
WzFdO1xuI2RlZmluZSBERUJVR01PREVfTk9STUFMSVpFXG4jZWxpZiBERUJVR01PREUgPT0gMTAg
JiYgZGVmaW5lZChDTEVBUkNPQVQpXG5cbmdsX0ZyYWdDb2xvci5yZ2I9Y2xlYXJDb2F0Tm9ybWFs
VztcbiNkZWZpbmUgREVCVUdNT0RFX05PUk1BTElaRVxuI2VsaWYgREVCVUdNT0RFID09IDExICYm
IGRlZmluZWQoQU5JU09UUk9QSUMpXG5nbF9GcmFnQ29sb3IucmdiPWFuaXNvdHJvcGljTm9ybWFs
O1xuI2RlZmluZSBERUJVR01PREVfTk9STUFMSVpFXG4jZWxpZiBERUJVR01PREUgPT0gMTIgJiYg
ZGVmaW5lZChBTklTT1RST1BJQylcbmdsX0ZyYWdDb2xvci5yZ2I9YW5pc290cm9waWNUYW5nZW50
O1xuI2RlZmluZSBERUJVR01PREVfTk9STUFMSVpFXG4jZWxpZiBERUJVR01PREUgPT0gMTMgJiYg
ZGVmaW5lZChBTklTT1RST1BJQylcbmdsX0ZyYWdDb2xvci5yZ2I9YW5pc290cm9waWNCaXRhbmdl
bnQ7XG4jZGVmaW5lIERFQlVHTU9ERV9OT1JNQUxJWkVcblxuI2VsaWYgREVCVUdNT0RFID09IDIw
ICYmIGRlZmluZWQoQUxCRURPKVxuZ2xfRnJhZ0NvbG9yLnJnYj1hbGJlZG9UZXh0dXJlLnJnYjtc
biNlbGlmIERFQlVHTU9ERSA9PSAyMSAmJiBkZWZpbmVkKEFNQklFTlQpXG5nbF9GcmFnQ29sb3Iu
cmdiPWFtYmllbnRPY2NsdXNpb25Db2xvck1hcC5yZ2I7XG4jZWxpZiBERUJVR01PREUgPT0gMjIg
JiYgZGVmaW5lZChPUEFDSVRZKVxuZ2xfRnJhZ0NvbG9yLnJnYj1vcGFjaXR5TWFwLnJnYjtcbiNl
bGlmIERFQlVHTU9ERSA9PSAyMyAmJiBkZWZpbmVkKEVNSVNTSVZFKVxuZ2xfRnJhZ0NvbG9yLnJn
Yj1lbWlzc2l2ZUNvbG9yVGV4LnJnYjtcbiNkZWZpbmUgREVCVUdNT0RFX0dBTU1BXG4jZWxpZiBE
RUJVR01PREUgPT0gMjQgJiYgZGVmaW5lZChMSUdIVE1BUClcbmdsX0ZyYWdDb2xvci5yZ2I9bGln
aHRtYXBDb2xvci5yZ2I7XG4jZGVmaW5lIERFQlVHTU9ERV9HQU1NQVxuI2VsaWYgREVCVUdNT0RF
ID09IDI1ICYmIGRlZmluZWQoUkVGTEVDVElWSVRZKSAmJiBkZWZpbmVkKE1FVEFMTElDV09SS0ZM
T1cpXG5nbF9GcmFnQ29sb3IucmdiPXN1cmZhY2VNZXRhbGxpY0NvbG9yTWFwLnJnYjtcbiNlbGlm
IERFQlVHTU9ERSA9PSAyNiAmJiBkZWZpbmVkKFJFRkxFQ1RJVklUWSkgJiYgIWRlZmluZWQoTUVU
QUxMSUNXT1JLRkxPVylcbmdsX0ZyYWdDb2xvci5yZ2I9c3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9y
TWFwLnJnYjtcbiNkZWZpbmUgREVCVUdNT0RFX0dBTU1BXG4jZWxpZiBERUJVR01PREUgPT0gMjcg
JiYgZGVmaW5lZChDTEVBUkNPQVQpICYmIGRlZmluZWQoQ0xFQVJDT0FUX1RFWFRVUkUpXG5nbF9G
cmFnQ29sb3IucmdiPXZlYzMoY2xlYXJDb2F0TWFwRGF0YS5yZywwLjApO1xuI2VsaWYgREVCVUdN
T0RFID09IDI4ICYmIGRlZmluZWQoQ0xFQVJDT0FUKSAmJiBkZWZpbmVkKENMRUFSQ09BVF9USU5U
KSAmJiBkZWZpbmVkKENMRUFSQ09BVF9USU5UX1RFWFRVUkUpXG5nbF9GcmFnQ29sb3IucmdiPWNs
ZWFyQ29hdFRpbnRNYXBEYXRhLnJnYjtcbiNlbGlmIERFQlVHTU9ERSA9PSAyOSAmJiBkZWZpbmVk
KFNIRUVOKSAmJiBkZWZpbmVkKFNIRUVOX1RFWFRVUkUpXG5nbF9GcmFnQ29sb3IucmdiPXNoZWVu
TWFwRGF0YS5yZ2I7XG4jZWxpZiBERUJVR01PREUgPT0gMzAgJiYgZGVmaW5lZChBTklTT1RST1BJ
QykgJiYgZGVmaW5lZChBTklTT1RST1BJQ19URVhUVVJFKVxuZ2xfRnJhZ0NvbG9yLnJnYj1hbmlz
b3Ryb3B5TWFwRGF0YS5yZ2I7XG4jZWxpZiBERUJVR01PREUgPT0gMzEgJiYgZGVmaW5lZChTVUJT
VVJGQUNFKSAmJiBkZWZpbmVkKFNTX1RISUNLTkVTU0FORE1BU0tfVEVYVFVSRSlcbmdsX0ZyYWdD
b2xvci5yZ2I9dGhpY2tuZXNzTWFwLnJnYjtcblxuI2VsaWYgREVCVUdNT0RFID09IDQwICYmIGRl
ZmluZWQoU1NfUkVGUkFDVElPTilcblxuZ2xfRnJhZ0NvbG9yLnJnYj1lbnZpcm9ubWVudFJlZnJh
Y3Rpb24ucmdiO1xuI2RlZmluZSBERUJVR01PREVfR0FNTUFcbiNlbGlmIERFQlVHTU9ERSA9PSA0
MSAmJiBkZWZpbmVkKFJFRkxFQ1RJT04pXG5nbF9GcmFnQ29sb3IucmdiPWVudmlyb25tZW50UmFk
aWFuY2UucmdiO1xuI2RlZmluZSBERUJVR01PREVfR0FNTUFcbiNlbGlmIERFQlVHTU9ERSA9PSA0
MiAmJiBkZWZpbmVkKENMRUFSQ09BVCkgJiYgZGVmaW5lZChSRUZMRUNUSU9OKVxuZ2xfRnJhZ0Nv
bG9yLnJnYj1lbnZpcm9ubWVudENsZWFyQ29hdFJhZGlhbmNlO1xuI2RlZmluZSBERUJVR01PREVf
R0FNTUFcblxuI2VsaWYgREVCVUdNT0RFID09IDUwXG5nbF9GcmFnQ29sb3IucmdiPWRpZmZ1c2VC
YXNlLnJnYjtcbiNkZWZpbmUgREVCVUdNT0RFX0dBTU1BXG4jZWxpZiBERUJVR01PREUgPT0gNTEg
JiYgZGVmaW5lZChTUEVDVUxBUlRFUk0pXG5nbF9GcmFnQ29sb3IucmdiPXNwZWN1bGFyQmFzZS5y
Z2I7XG4jZGVmaW5lIERFQlVHTU9ERV9HQU1NQVxuI2VsaWYgREVCVUdNT0RFID09IDUyICYmIGRl
ZmluZWQoQ0xFQVJDT0FUKVxuZ2xfRnJhZ0NvbG9yLnJnYj1jbGVhckNvYXRCYXNlLnJnYjtcbiNk
ZWZpbmUgREVCVUdNT0RFX0dBTU1BXG4jZWxpZiBERUJVR01PREUgPT0gNTMgJiYgZGVmaW5lZChT
SEVFTilcbmdsX0ZyYWdDb2xvci5yZ2I9c2hlZW5CYXNlLnJnYjtcbiNkZWZpbmUgREVCVUdNT0RF
X0dBTU1BXG4jZWxpZiBERUJVR01PREUgPT0gNTQgJiYgZGVmaW5lZChSRUZMRUNUSU9OKVxuZ2xf
RnJhZ0NvbG9yLnJnYj1lbnZpcm9ubWVudElycmFkaWFuY2UucmdiO1xuI2RlZmluZSBERUJVR01P
REVfR0FNTUFcblxuI2VsaWYgREVCVUdNT0RFID09IDYwXG5nbF9GcmFnQ29sb3IucmdiPXN1cmZh
Y2VBbGJlZG8ucmdiO1xuI2RlZmluZSBERUJVR01PREVfR0FNTUFcbiNlbGlmIERFQlVHTU9ERSA9
PSA2MVxuZ2xfRnJhZ0NvbG9yLnJnYj1zcGVjdWxhckVudmlyb25tZW50UjA7XG4jZGVmaW5lIERF
QlVHTU9ERV9HQU1NQVxuI2VsaWYgREVCVUdNT0RFID09IDYyICYmIGRlZmluZWQoTUVUQUxMSUNX
T1JLRkxPVylcbmdsX0ZyYWdDb2xvci5yZ2I9dmVjMyhtZXRhbGxpY1JvdWdobmVzcy5yKTtcbiNl
bGlmIERFQlVHTU9ERSA9PSA2M1xuZ2xfRnJhZ0NvbG9yLnJnYj12ZWMzKHJvdWdobmVzcyk7XG4j
ZWxpZiBERUJVR01PREUgPT0gNjRcbmdsX0ZyYWdDb2xvci5yZ2I9dmVjMyhhbHBoYUcpO1xuI2Vs
aWYgREVCVUdNT0RFID09IDY1XG5nbF9GcmFnQ29sb3IucmdiPXZlYzMoTmRvdFYpO1xuI2VsaWYg
REVCVUdNT0RFID09IDY2ICYmIGRlZmluZWQoQ0xFQVJDT0FUKSAmJiBkZWZpbmVkKENMRUFSQ09B
VF9USU5UKVxuZ2xfRnJhZ0NvbG9yLnJnYj1jbGVhckNvYXRDb2xvci5yZ2I7XG4jZGVmaW5lIERF
QlVHTU9ERV9HQU1NQVxuI2VsaWYgREVCVUdNT0RFID09IDY3ICYmIGRlZmluZWQoQ0xFQVJDT0FU
KVxuZ2xfRnJhZ0NvbG9yLnJnYj12ZWMzKGNsZWFyQ29hdFJvdWdobmVzcyk7XG4jZWxpZiBERUJV
R01PREUgPT0gNjggJiYgZGVmaW5lZChDTEVBUkNPQVQpXG5nbF9GcmFnQ29sb3IucmdiPXZlYzMo
Y2xlYXJDb2F0TmRvdFYpO1xuI2VsaWYgREVCVUdNT0RFID09IDY5ICYmIGRlZmluZWQoU1VCU1VS
RkFDRSkgJiYgZGVmaW5lZChTU19UUkFOU0xVQ0VOQ1kpXG5nbF9GcmFnQ29sb3IucmdiPXRyYW5z
bWl0dGFuY2U7XG4jZWxpZiBERUJVR01PREUgPT0gNzAgJiYgZGVmaW5lZChTVUJTVVJGQUNFKSAm
JiBkZWZpbmVkKFNTX1JFRlJBQ1RJT04pXG5nbF9GcmFnQ29sb3IucmdiPXJlZnJhY3Rpb25UcmFu
c21pdHRhbmNlO1xuXG4jZWxpZiBERUJVR01PREUgPT0gODAgJiYgZGVmaW5lZChSQURJQU5DRU9D
Q0xVU0lPTilcbmdsX0ZyYWdDb2xvci5yZ2I9dmVjMyhzZW8pO1xuI2VsaWYgREVCVUdNT0RFID09
IDgxICYmIGRlZmluZWQoSE9SSVpPTk9DQ0xVU0lPTilcbmdsX0ZyYWdDb2xvci5yZ2I9dmVjMyhl
aG8pO1xuI2VsaWYgREVCVUdNT0RFID09IDgyICYmIGRlZmluZWQoTVNfQlJERl9FTkVSR1lfQ09O
U0VSVkFUSU9OKVxuZ2xfRnJhZ0NvbG9yLnJnYj12ZWMzKGVuZXJneUNvbnNlcnZhdGlvbkZhY3Rv
cik7XG4jZWxpZiBERUJVR01PREUgPT0gODMgJiYgZGVmaW5lZChFTlZJUk9OTUVOVEJSREYpICYm
ICFkZWZpbmVkKFJFRkxFQ1RJT05NQVBfU0tZQk9YKVxuZ2xfRnJhZ0NvbG9yLnJnYj1zcGVjdWxh
ckVudmlyb25tZW50UmVmbGVjdGFuY2U7XG4jZGVmaW5lIERFQlVHTU9ERV9HQU1NQVxuI2VsaWYg
REVCVUdNT0RFID09IDg0ICYmIGRlZmluZWQoQ0xFQVJDT0FUKSAmJiBkZWZpbmVkKEVOVklST05N
RU5UQlJERikgJiYgIWRlZmluZWQoUkVGTEVDVElPTk1BUF9TS1lCT1gpXG5nbF9GcmFnQ29sb3Iu
cmdiPWNsZWFyQ29hdEVudmlyb25tZW50UmVmbGVjdGFuY2U7XG4jZGVmaW5lIERFQlVHTU9ERV9H
QU1NQVxuI2VsaWYgREVCVUdNT0RFID09IDg1ICYmIGRlZmluZWQoU0hFRU4pICYmIGRlZmluZWQo
UkVGTEVDVElPTilcbmdsX0ZyYWdDb2xvci5yZ2I9c2hlZW5FbnZpcm9ubWVudFJlZmxlY3RhbmNl
O1xuI2RlZmluZSBERUJVR01PREVfR0FNTUFcbiNlbGlmIERFQlVHTU9ERSA9PSA4NiAmJiBkZWZp
bmVkKEFMUEhBQkxFTkQpXG5nbF9GcmFnQ29sb3IucmdiPXZlYzMobHVtaW5hbmNlT3ZlckFscGhh
KTtcbiNlbGlmIERFQlVHTU9ERSA9PSA4N1xuZ2xfRnJhZ0NvbG9yLnJnYj12ZWMzKGFscGhhKTtc
biNlbmRpZlxuZ2xfRnJhZ0NvbG9yLnJnYio9dkRlYnVnTW9kZS55O1xuI2lmZGVmIERFQlVHTU9E
RV9OT1JNQUxJWkVcbmdsX0ZyYWdDb2xvci5yZ2I9bm9ybWFsaXplKGdsX0ZyYWdDb2xvci5yZ2Ip
KjAuNSswLjU7XG4jZW5kaWZcbiNpZmRlZiBERUJVR01PREVfR0FNTUFcbmdsX0ZyYWdDb2xvci5y
Z2I9dG9HYW1tYVNwYWNlKGdsX0ZyYWdDb2xvci5yZ2IpO1xuI2VuZGlmXG5nbF9GcmFnQ29sb3Iu
YT0xLjA7XG4jZW5kaWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7Cisv
KiogQGhpZGRlbiAqLwordmFyIHBickRlYnVnID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRl
ciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3Bi
ckRpcmVjdExpZ2h0aW5nRmFsbG9mZkZ1bmN0aW9ucy50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJyRGlyZWN0TGlnaHRpbmdGYWxsb2Zm
RnVuY3Rpb25zLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBwYnJEaXJlY3RMaWdodGluZ0ZhbGxvZmZGdW5jdGlvbnMgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAicGJyRGlyZWN0TGlnaHRpbmdGYWxsb2ZmRnVuY3Rpb25zIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBwYnJEaXJlY3RMaWdodGluZ0ZhbGxvZmZGdW5jdGlvbnM7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMv
ZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAncGJyRGly
ZWN0TGlnaHRpbmdGYWxsb2ZmRnVuY3Rpb25zJzsKK3ZhciBzaGFkZXIgPSAiZmxvYXQgY29tcHV0
ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX1N0YW5kYXJkKHZlYzMgbGlnaHRPZmZzZXQsZmxvYXQgcmFu
Z2UpXG57XG5yZXR1cm4gbWF4KDAuLDEuMC1sZW5ndGgobGlnaHRPZmZzZXQpL3JhbmdlKTtcbn1c
bmZsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9QaHlzaWNhbChmbG9hdCBsaWdodERp
c3RhbmNlU3F1YXJlZClcbntcbnJldHVybiAxLjAvbWF4RXBzKGxpZ2h0RGlzdGFuY2VTcXVhcmVk
KTtcbn1cbmZsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9HTFRGKGZsb2F0IGxpZ2h0
RGlzdGFuY2VTcXVhcmVkLGZsb2F0IGludmVyc2VTcXVhcmVkUmFuZ2UpXG57XG5mbG9hdCBsaWdo
dERpc3RhbmNlRmFsbG9mZj0xLjAvbWF4RXBzKGxpZ2h0RGlzdGFuY2VTcXVhcmVkKTtcbmZsb2F0
IGZhY3Rvcj1saWdodERpc3RhbmNlU3F1YXJlZCppbnZlcnNlU3F1YXJlZFJhbmdlO1xuZmxvYXQg
YXR0ZW51YXRpb249c2F0dXJhdGUoMS4wLWZhY3RvcipmYWN0b3IpO1xuYXR0ZW51YXRpb24qPWF0
dGVudWF0aW9uO1xuXG5saWdodERpc3RhbmNlRmFsbG9mZio9YXR0ZW51YXRpb247XG5yZXR1cm4g
bGlnaHREaXN0YW5jZUZhbGxvZmY7XG59XG5mbG9hdCBjb21wdXRlRGlzdGFuY2VMaWdodEZhbGxv
ZmYodmVjMyBsaWdodE9mZnNldCxmbG9hdCBsaWdodERpc3RhbmNlU3F1YXJlZCxmbG9hdCByYW5n
ZSxmbG9hdCBpbnZlcnNlU3F1YXJlZFJhbmdlKVxue1xuI2lmZGVmIFVTRVBIWVNJQ0FMTElHSFRG
QUxMT0ZGXG5yZXR1cm4gY29tcHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGxpZ2h0
RGlzdGFuY2VTcXVhcmVkKTtcbiNlbGlmIGRlZmluZWQoVVNFR0xURkxJR0hURkFMTE9GRilcbnJl
dHVybiBjb21wdXRlRGlzdGFuY2VMaWdodEZhbGxvZmZfR0xURihsaWdodERpc3RhbmNlU3F1YXJl
ZCxpbnZlcnNlU3F1YXJlZFJhbmdlKTtcbiNlbHNlXG5yZXR1cm4gY29tcHV0ZURpc3RhbmNlTGln
aHRGYWxsb2ZmX1N0YW5kYXJkKGxpZ2h0T2Zmc2V0LHJhbmdlKTtcbiNlbmRpZlxufVxuZmxvYXQg
Y29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmX1N0YW5kYXJkKHZlYzMgbGlnaHREaXJlY3Rp
b24sdmVjMyBkaXJlY3Rpb25Ub0xpZ2h0Q2VudGVyVyxmbG9hdCBjb3NIYWxmQW5nbGUsZmxvYXQg
ZXhwb25lbnQpXG57XG5mbG9hdCBmYWxsb2ZmPTAuMDtcbmZsb2F0IGNvc0FuZ2xlPW1heEVwcyhk
b3QoLWxpZ2h0RGlyZWN0aW9uLGRpcmVjdGlvblRvTGlnaHRDZW50ZXJXKSk7XG5pZiAoY29zQW5n
bGU+PWNvc0hhbGZBbmdsZSlcbntcbmZhbGxvZmY9bWF4KDAuLHBvdyhjb3NBbmdsZSxleHBvbmVu
dCkpO1xufVxucmV0dXJuIGZhbGxvZmY7XG59XG5mbG9hdCBjb21wdXRlRGlyZWN0aW9uYWxMaWdo
dEZhbGxvZmZfUGh5c2ljYWwodmVjMyBsaWdodERpcmVjdGlvbix2ZWMzIGRpcmVjdGlvblRvTGln
aHRDZW50ZXJXLGZsb2F0IGNvc0hhbGZBbmdsZSlcbntcbmNvbnN0IGZsb2F0IGtNaW51c0xvZzJD
b25lQW5nbGVJbnRlbnNpdHlSYXRpbz02LjY0Mzg1NjE4OTc3O1xuXG5cblxuXG5cbmZsb2F0IGNv
bmNlbnRyYXRpb25LYXBwYT1rTWludXNMb2cyQ29uZUFuZ2xlSW50ZW5zaXR5UmF0aW8vKDEuMC1j
b3NIYWxmQW5nbGUpO1xuXG5cbnZlYzQgbGlnaHREaXJlY3Rpb25TcHJlYWRTRz12ZWM0KC1saWdo
dERpcmVjdGlvbipjb25jZW50cmF0aW9uS2FwcGEsLWNvbmNlbnRyYXRpb25LYXBwYSk7XG5mbG9h
dCBmYWxsb2ZmPWV4cDIoZG90KHZlYzQoZGlyZWN0aW9uVG9MaWdodENlbnRlclcsMS4wKSxsaWdo
dERpcmVjdGlvblNwcmVhZFNHKSk7XG5yZXR1cm4gZmFsbG9mZjtcbn1cbmZsb2F0IGNvbXB1dGVE
aXJlY3Rpb25hbExpZ2h0RmFsbG9mZl9HTFRGKHZlYzMgbGlnaHREaXJlY3Rpb24sdmVjMyBkaXJl
Y3Rpb25Ub0xpZ2h0Q2VudGVyVyxmbG9hdCBsaWdodEFuZ2xlU2NhbGUsZmxvYXQgbGlnaHRBbmds
ZU9mZnNldClcbntcblxuXG5cbmZsb2F0IGNkPWRvdCgtbGlnaHREaXJlY3Rpb24sZGlyZWN0aW9u
VG9MaWdodENlbnRlclcpO1xuZmxvYXQgZmFsbG9mZj1zYXR1cmF0ZShjZCpsaWdodEFuZ2xlU2Nh
bGUrbGlnaHRBbmdsZU9mZnNldCk7XG5cbmZhbGxvZmYqPWZhbGxvZmY7XG5yZXR1cm4gZmFsbG9m
Zjtcbn1cbmZsb2F0IGNvbXB1dGVEaXJlY3Rpb25hbExpZ2h0RmFsbG9mZih2ZWMzIGxpZ2h0RGly
ZWN0aW9uLHZlYzMgZGlyZWN0aW9uVG9MaWdodENlbnRlclcsZmxvYXQgY29zSGFsZkFuZ2xlLGZs
b2F0IGV4cG9uZW50LGZsb2F0IGxpZ2h0QW5nbGVTY2FsZSxmbG9hdCBsaWdodEFuZ2xlT2Zmc2V0
KVxue1xuI2lmZGVmIFVTRVBIWVNJQ0FMTElHSFRGQUxMT0ZGXG5yZXR1cm4gY29tcHV0ZURpcmVj
dGlvbmFsTGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGxpZ2h0RGlyZWN0aW9uLGRpcmVjdGlvblRvTGln
aHRDZW50ZXJXLGNvc0hhbGZBbmdsZSk7XG4jZWxpZiBkZWZpbmVkKFVTRUdMVEZMSUdIVEZBTExP
RkYpXG5yZXR1cm4gY29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmX0dMVEYobGlnaHREaXJl
Y3Rpb24sZGlyZWN0aW9uVG9MaWdodENlbnRlclcsbGlnaHRBbmdsZVNjYWxlLGxpZ2h0QW5nbGVP
ZmZzZXQpO1xuI2Vsc2VcbnJldHVybiBjb21wdXRlRGlyZWN0aW9uYWxMaWdodEZhbGxvZmZfU3Rh
bmRhcmQobGlnaHREaXJlY3Rpb24sZGlyZWN0aW9uVG9MaWdodENlbnRlclcsY29zSGFsZkFuZ2xl
LGV4cG9uZW50KTtcbiNlbmRpZlxufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNo
YWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgcGJyRGlyZWN0TGlnaHRpbmdGYWxsb2ZmRnVuY3Rp
b25zID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickRpcmVjdExpZ2h0aW5nRnVuY3Rpb25z
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickRp
cmVjdExpZ2h0aW5nRnVuY3Rpb25zLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IHBickRpcmVjdExpZ2h0aW5nRnVuY3Rpb25zICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgInBickRpcmVjdExpZ2h0aW5nRnVuY3Rpb25zIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBwYnJEaXJlY3RMaWdodGluZ0Z1bmN0aW9uczsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0
ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdwYnJEaXJlY3RMaWdodGluZ0Z1bmN0
aW9ucyc7Cit2YXIgc2hhZGVyID0gIiNkZWZpbmUgQ0xFQVJDT0FUUkVGTEVDVEFOQ0U5MCAxLjBc
blxuc3RydWN0IGxpZ2h0aW5nSW5mb1xue1xudmVjMyBkaWZmdXNlO1xuI2lmZGVmIFNQRUNVTEFS
VEVSTVxudmVjMyBzcGVjdWxhcjtcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVFxuXG5cbnZlYzQg
Y2xlYXJDb2F0O1xuI2VuZGlmXG4jaWZkZWYgU0hFRU5cbnZlYzMgc2hlZW47XG4jZW5kaWZcbn07
XG5cbmZsb2F0IGFkanVzdFJvdWdobmVzc0Zyb21MaWdodFByb3BlcnRpZXMoZmxvYXQgcm91Z2hu
ZXNzLGZsb2F0IGxpZ2h0UmFkaXVzLGZsb2F0IGxpZ2h0RGlzdGFuY2UpIHtcbiNpZiBkZWZpbmVk
KFVTRVBIWVNJQ0FMTElHSFRGQUxMT0ZGKSB8fCBkZWZpbmVkKFVTRUdMVEZMSUdIVEZBTExPRkYp
XG5cbmZsb2F0IGxpZ2h0Um91Z2huZXNzPWxpZ2h0UmFkaXVzL2xpZ2h0RGlzdGFuY2U7XG5cbmZs
b2F0IHRvdGFsUm91Z2huZXNzPXNhdHVyYXRlKGxpZ2h0Um91Z2huZXNzK3JvdWdobmVzcyk7XG5y
ZXR1cm4gdG90YWxSb3VnaG5lc3M7XG4jZWxzZVxucmV0dXJuIHJvdWdobmVzcztcbiNlbmRpZlxu
fVxudmVjMyBjb21wdXRlSGVtaXNwaGVyaWNEaWZmdXNlTGlnaHRpbmcocHJlTGlnaHRpbmdJbmZv
IGluZm8sdmVjMyBsaWdodENvbG9yLHZlYzMgZ3JvdW5kQ29sb3IpIHtcbnJldHVybiBtaXgoZ3Jv
dW5kQ29sb3IsbGlnaHRDb2xvcixpbmZvLk5kb3RMKTtcbn1cbnZlYzMgY29tcHV0ZURpZmZ1c2VM
aWdodGluZyhwcmVMaWdodGluZ0luZm8gaW5mbyx2ZWMzIGxpZ2h0Q29sb3IpIHtcbmZsb2F0IGRp
ZmZ1c2VUZXJtPWRpZmZ1c2VCUkRGX0J1cmxleShpbmZvLk5kb3RMLGluZm8uTmRvdFYsaW5mby5W
ZG90SCxpbmZvLnJvdWdobmVzcyk7XG5yZXR1cm4gZGlmZnVzZVRlcm0qaW5mby5hdHRlbnVhdGlv
bippbmZvLk5kb3RMKmxpZ2h0Q29sb3I7XG59XG52ZWMyIGNvbXB1dGVQcm9qZWN0aW9uVGV4dHVy
ZURpZmZ1c2VMaWdodGluZ1VWKG1hdDQgdGV4dHVyZVByb2plY3Rpb25NYXRyaXgpe1xudmVjNCBz
dHJxPXRleHR1cmVQcm9qZWN0aW9uTWF0cml4KnZlYzQodlBvc2l0aW9uVywxLjApO1xuc3RycS89
c3RycS53O1xucmV0dXJuIHN0cnEueHk7XG59XG4jaWZkZWYgU1NfVFJBTlNMVUNFTkNZXG52ZWMz
IGNvbXB1dGVEaWZmdXNlQW5kVHJhbnNtaXR0ZWRMaWdodGluZyhwcmVMaWdodGluZ0luZm8gaW5m
byx2ZWMzIGxpZ2h0Q29sb3IsdmVjMyB0cmFuc21pdHRhbmNlKSB7XG5mbG9hdCBOZG90TD1hYnNF
cHMoaW5mby5OZG90TFVuY2xhbXBlZCk7XG5cbmZsb2F0IHdyYXBOZG90TD1jb21wdXRlV3JhcHBl
ZERpZmZ1c2VOZG90TChOZG90TCwwLjAyKTtcblxuZmxvYXQgdHJBZGFwdD1zdGVwKDAuLGluZm8u
TmRvdExVbmNsYW1wZWQpO1xudmVjMyB0cmFuc21pdHRhbmNlTmRvdEw9bWl4KHRyYW5zbWl0dGFu
Y2Uqd3JhcE5kb3RMLHZlYzMod3JhcE5kb3RMKSx0ckFkYXB0KTtcbmZsb2F0IGRpZmZ1c2VUZXJt
PWRpZmZ1c2VCUkRGX0J1cmxleShOZG90TCxpbmZvLk5kb3RWLGluZm8uVmRvdEgsaW5mby5yb3Vn
aG5lc3MpO1xucmV0dXJuIGRpZmZ1c2VUZXJtKnRyYW5zbWl0dGFuY2VOZG90TCppbmZvLmF0dGVu
dWF0aW9uKmxpZ2h0Q29sb3I7XG59XG4jZW5kaWZcbiNpZmRlZiBTUEVDVUxBUlRFUk1cbnZlYzMg
Y29tcHV0ZVNwZWN1bGFyTGlnaHRpbmcocHJlTGlnaHRpbmdJbmZvIGluZm8sdmVjMyBOLHZlYzMg
cmVmbGVjdGFuY2UwLHZlYzMgcmVmbGVjdGFuY2U5MCxmbG9hdCBnZW9tZXRyaWNSb3VnaG5lc3NG
YWN0b3IsdmVjMyBsaWdodENvbG9yKSB7XG5mbG9hdCBOZG90SD1zYXR1cmF0ZUVwcyhkb3QoTixp
bmZvLkgpKTtcbmZsb2F0IHJvdWdobmVzcz1tYXgoaW5mby5yb3VnaG5lc3MsZ2VvbWV0cmljUm91
Z2huZXNzRmFjdG9yKTtcbmZsb2F0IGFscGhhRz1jb252ZXJ0Um91Z2huZXNzVG9BdmVyYWdlU2xv
cGUocm91Z2huZXNzKTtcbnZlYzMgZnJlc25lbD1mcmVzbmVsU2NobGlja0dHWChpbmZvLlZkb3RI
LHJlZmxlY3RhbmNlMCxyZWZsZWN0YW5jZTkwKTtcbmZsb2F0IGRpc3RyaWJ1dGlvbj1ub3JtYWxE
aXN0cmlidXRpb25GdW5jdGlvbl9Ucm93YnJpZGdlUmVpdHpHR1goTmRvdEgsYWxwaGFHKTtcbiNp
ZmRlZiBCUkRGX1ZfSEVJR0hUX0NPUlJFTEFURURcbmZsb2F0IHZpc2liaWxpdHk9c21pdGhWaXNp
YmlsaXR5X0dHWENvcnJlbGF0ZWQoaW5mby5OZG90TCxpbmZvLk5kb3RWLGFscGhhRyk7XG4jZWxz
ZVxuZmxvYXQgdmlzaWJpbGl0eT1zbWl0aFZpc2liaWxpdHlfVHJvd2JyaWRnZVJlaXR6R0dYRmFz
dChpbmZvLk5kb3RMLGluZm8uTmRvdFYsYWxwaGFHKTtcbiNlbmRpZlxudmVjMyBzcGVjVGVybT1m
cmVzbmVsKmRpc3RyaWJ1dGlvbip2aXNpYmlsaXR5O1xucmV0dXJuIHNwZWNUZXJtKmluZm8uYXR0
ZW51YXRpb24qaW5mby5OZG90TCpsaWdodENvbG9yO1xufVxuI2VuZGlmXG4jaWZkZWYgQU5JU09U
Uk9QSUNcbnZlYzMgY29tcHV0ZUFuaXNvdHJvcGljU3BlY3VsYXJMaWdodGluZyhwcmVMaWdodGlu
Z0luZm8gaW5mbyx2ZWMzIFYsdmVjMyBOLHZlYzMgVCx2ZWMzIEIsZmxvYXQgYW5pc290cm9weSx2
ZWMzIHJlZmxlY3RhbmNlMCx2ZWMzIHJlZmxlY3RhbmNlOTAsZmxvYXQgZ2VvbWV0cmljUm91Z2hu
ZXNzRmFjdG9yLHZlYzMgbGlnaHRDb2xvcikge1xuZmxvYXQgTmRvdEg9c2F0dXJhdGVFcHMoZG90
KE4saW5mby5IKSk7XG5mbG9hdCBUZG90SD1kb3QoVCxpbmZvLkgpO1xuZmxvYXQgQmRvdEg9ZG90
KEIsaW5mby5IKTtcbmZsb2F0IFRkb3RWPWRvdChULFYpO1xuZmxvYXQgQmRvdFY9ZG90KEIsVik7
XG5mbG9hdCBUZG90TD1kb3QoVCxpbmZvLkwpO1xuZmxvYXQgQmRvdEw9ZG90KEIsaW5mby5MKTtc
bmZsb2F0IGFscGhhRz1jb252ZXJ0Um91Z2huZXNzVG9BdmVyYWdlU2xvcGUoaW5mby5yb3VnaG5l
c3MpO1xudmVjMiBhbHBoYVRCPWdldEFuaXNvdHJvcGljUm91Z2huZXNzKGFscGhhRyxhbmlzb3Ry
b3B5KTtcbmFscGhhVEI9bWF4KGFscGhhVEIsc3F1YXJlKGdlb21ldHJpY1JvdWdobmVzc0ZhY3Rv
cikpO1xudmVjMyBmcmVzbmVsPWZyZXNuZWxTY2hsaWNrR0dYKGluZm8uVmRvdEgscmVmbGVjdGFu
Y2UwLHJlZmxlY3RhbmNlOTApO1xuZmxvYXQgZGlzdHJpYnV0aW9uPW5vcm1hbERpc3RyaWJ1dGlv
bkZ1bmN0aW9uX0J1cmxleUdHWF9Bbmlzb3Ryb3BpYyhOZG90SCxUZG90SCxCZG90SCxhbHBoYVRC
KTtcbmZsb2F0IHZpc2liaWxpdHk9c21pdGhWaXNpYmlsaXR5X0dHWENvcnJlbGF0ZWRfQW5pc290
cm9waWMoaW5mby5OZG90TCxpbmZvLk5kb3RWLFRkb3RWLEJkb3RWLFRkb3RMLEJkb3RMLGFscGhh
VEIpO1xudmVjMyBzcGVjVGVybT1mcmVzbmVsKmRpc3RyaWJ1dGlvbip2aXNpYmlsaXR5O1xucmV0
dXJuIHNwZWNUZXJtKmluZm8uYXR0ZW51YXRpb24qaW5mby5OZG90TCpsaWdodENvbG9yO1xufVxu
I2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG52ZWM0IGNvbXB1dGVDbGVhckNvYXRMaWdodGluZyhw
cmVMaWdodGluZ0luZm8gaW5mbyx2ZWMzIE5jYyxmbG9hdCBnZW9tZXRyaWNSb3VnaG5lc3NGYWN0
b3IsZmxvYXQgY2xlYXJDb2F0SW50ZW5zaXR5LHZlYzMgbGlnaHRDb2xvcikge1xuZmxvYXQgTmNj
ZG90TD1zYXR1cmF0ZUVwcyhkb3QoTmNjLGluZm8uTCkpO1xuZmxvYXQgTmNjZG90SD1zYXR1cmF0
ZUVwcyhkb3QoTmNjLGluZm8uSCkpO1xuZmxvYXQgY2xlYXJDb2F0Um91Z2huZXNzPW1heChpbmZv
LnJvdWdobmVzcyxnZW9tZXRyaWNSb3VnaG5lc3NGYWN0b3IpO1xuZmxvYXQgYWxwaGFHPWNvbnZl
cnRSb3VnaG5lc3NUb0F2ZXJhZ2VTbG9wZShjbGVhckNvYXRSb3VnaG5lc3MpO1xuZmxvYXQgZnJl
c25lbD1mcmVzbmVsU2NobGlja0dHWChpbmZvLlZkb3RILHZDbGVhckNvYXRSZWZyYWN0aW9uUGFy
YW1zLngsQ0xFQVJDT0FUUkVGTEVDVEFOQ0U5MCk7XG5mcmVzbmVsKj1jbGVhckNvYXRJbnRlbnNp
dHk7XG5mbG9hdCBkaXN0cmlidXRpb249bm9ybWFsRGlzdHJpYnV0aW9uRnVuY3Rpb25fVHJvd2Jy
aWRnZVJlaXR6R0dYKE5jY2RvdEgsYWxwaGFHKTtcbmZsb2F0IHZpc2liaWxpdHk9dmlzaWJpbGl0
eV9LZWxlbWVuKGluZm8uVmRvdEgpO1xuZmxvYXQgY2xlYXJDb2F0VGVybT1mcmVzbmVsKmRpc3Ry
aWJ1dGlvbip2aXNpYmlsaXR5O1xucmV0dXJuIHZlYzQoXG5jbGVhckNvYXRUZXJtKmluZm8uYXR0
ZW51YXRpb24qTmNjZG90TCpsaWdodENvbG9yLFxuMS4wLWZyZXNuZWxcbik7XG59XG52ZWMzIGNv
bXB1dGVDbGVhckNvYXRMaWdodGluZ0Fic29ycHRpb24oZmxvYXQgTmRvdFZSZWZyYWN0LHZlYzMg
TCx2ZWMzIE5jYyx2ZWMzIGNsZWFyQ29hdENvbG9yLGZsb2F0IGNsZWFyQ29hdFRoaWNrbmVzcyxm
bG9hdCBjbGVhckNvYXRJbnRlbnNpdHkpIHtcbnZlYzMgTFJlZnJhY3Q9LXJlZnJhY3QoTCxOY2Ms
dkNsZWFyQ29hdFJlZnJhY3Rpb25QYXJhbXMueSk7XG5mbG9hdCBOZG90TFJlZnJhY3Q9c2F0dXJh
dGVFcHMoZG90KE5jYyxMUmVmcmFjdCkpO1xudmVjMyBhYnNvcnB0aW9uPWNvbXB1dGVDbGVhckNv
YXRBYnNvcnB0aW9uKE5kb3RWUmVmcmFjdCxOZG90TFJlZnJhY3QsY2xlYXJDb2F0Q29sb3IsY2xl
YXJDb2F0VGhpY2tuZXNzLGNsZWFyQ29hdEludGVuc2l0eSk7XG5yZXR1cm4gYWJzb3JwdGlvbjtc
bn1cbiNlbmRpZlxuI2lmZGVmIFNIRUVOXG52ZWMzIGNvbXB1dGVTaGVlbkxpZ2h0aW5nKHByZUxp
Z2h0aW5nSW5mbyBpbmZvLHZlYzMgTix2ZWMzIHJlZmxlY3RhbmNlMCx2ZWMzIHJlZmxlY3RhbmNl
OTAsZmxvYXQgZ2VvbWV0cmljUm91Z2huZXNzRmFjdG9yLHZlYzMgbGlnaHRDb2xvcikge1xuZmxv
YXQgTmRvdEg9c2F0dXJhdGVFcHMoZG90KE4saW5mby5IKSk7XG5mbG9hdCByb3VnaG5lc3M9bWF4
KGluZm8ucm91Z2huZXNzLGdlb21ldHJpY1JvdWdobmVzc0ZhY3Rvcik7XG5mbG9hdCBhbHBoYUc9
Y29udmVydFJvdWdobmVzc1RvQXZlcmFnZVNsb3BlKHJvdWdobmVzcyk7XG5cblxudmVjMyBmcmVz
bmVsPXJlZmxlY3RhbmNlMDtcbmZsb2F0IGRpc3RyaWJ1dGlvbj1ub3JtYWxEaXN0cmlidXRpb25G
dW5jdGlvbl9DaGFybGllU2hlZW4oTmRvdEgsYWxwaGFHKTtcbmZsb2F0IHZpc2liaWxpdHk9dmlz
aWJpbGl0eV9Bc2hpa2htaW4oaW5mby5OZG90TCxpbmZvLk5kb3RWKTtcbnZlYzMgc2hlZW5UZXJt
PWZyZXNuZWwqZGlzdHJpYnV0aW9uKnZpc2liaWxpdHk7XG5yZXR1cm4gc2hlZW5UZXJtKmluZm8u
YXR0ZW51YXRpb24qaW5mby5OZG90TCpsaWdodENvbG9yO1xufVxuI2VuZGlmXG4iOworX01hdGVy
aWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVk
ZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHBickRp
cmVjdExpZ2h0aW5nRnVuY3Rpb25zID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9Owor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickRpcmVj
dExpZ2h0aW5nU2V0dXBGdW5jdGlvbnMudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYnJEaXJlY3RMaWdodGluZ1NldHVwRnVuY3Rpb25zLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogcGJyRGlyZWN0TGln
aHRpbmdTZXR1cEZ1bmN0aW9ucyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJwYnJEaXJlY3RMaWdodGluZ1NldHVwRnVuY3Rpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBw
YnJEaXJlY3RMaWdodGluZ1NldHVwRnVuY3Rpb25zOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlh
bHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3BickRpcmVjdExpZ2h0aW5nU2V0dXBGdW5j
dGlvbnMnOwordmFyIHNoYWRlciA9ICJcbnN0cnVjdCBwcmVMaWdodGluZ0luZm9cbntcblxudmVj
MyBsaWdodE9mZnNldDtcbmZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkO1xuZmxvYXQgbGlnaHRE
aXN0YW5jZTtcblxuZmxvYXQgYXR0ZW51YXRpb247XG5cbnZlYzMgTDtcbnZlYzMgSDtcbmZsb2F0
IE5kb3RWO1xuZmxvYXQgTmRvdExVbmNsYW1wZWQ7XG5mbG9hdCBOZG90TDtcbmZsb2F0IFZkb3RI
O1xuZmxvYXQgcm91Z2huZXNzO1xufTtcbnByZUxpZ2h0aW5nSW5mbyBjb21wdXRlUG9pbnRBbmRT
cG90UHJlTGlnaHRpbmdJbmZvKHZlYzQgbGlnaHREYXRhLHZlYzMgVix2ZWMzIE4pIHtcbnByZUxp
Z2h0aW5nSW5mbyByZXN1bHQ7XG5cbnJlc3VsdC5saWdodE9mZnNldD1saWdodERhdGEueHl6LXZQ
b3NpdGlvblc7XG5yZXN1bHQubGlnaHREaXN0YW5jZVNxdWFyZWQ9ZG90KHJlc3VsdC5saWdodE9m
ZnNldCxyZXN1bHQubGlnaHRPZmZzZXQpO1xuXG5yZXN1bHQubGlnaHREaXN0YW5jZT1zcXJ0KHJl
c3VsdC5saWdodERpc3RhbmNlU3F1YXJlZCk7XG5cbnJlc3VsdC5MPW5vcm1hbGl6ZShyZXN1bHQu
bGlnaHRPZmZzZXQpO1xucmVzdWx0Lkg9bm9ybWFsaXplKFYrcmVzdWx0LkwpO1xucmVzdWx0LlZk
b3RIPXNhdHVyYXRlKGRvdChWLHJlc3VsdC5IKSk7XG5yZXN1bHQuTmRvdExVbmNsYW1wZWQ9ZG90
KE4scmVzdWx0LkwpO1xucmVzdWx0Lk5kb3RMPXNhdHVyYXRlRXBzKHJlc3VsdC5OZG90TFVuY2xh
bXBlZCk7XG5yZXR1cm4gcmVzdWx0O1xufVxucHJlTGlnaHRpbmdJbmZvIGNvbXB1dGVEaXJlY3Rp
b25hbFByZUxpZ2h0aW5nSW5mbyh2ZWM0IGxpZ2h0RGF0YSx2ZWMzIFYsdmVjMyBOKSB7XG5wcmVM
aWdodGluZ0luZm8gcmVzdWx0O1xuXG5yZXN1bHQubGlnaHREaXN0YW5jZT1sZW5ndGgoLWxpZ2h0
RGF0YS54eXopO1xuXG5yZXN1bHQuTD1ub3JtYWxpemUoLWxpZ2h0RGF0YS54eXopO1xucmVzdWx0
Lkg9bm9ybWFsaXplKFYrcmVzdWx0LkwpO1xucmVzdWx0LlZkb3RIPXNhdHVyYXRlKGRvdChWLHJl
c3VsdC5IKSk7XG5yZXN1bHQuTmRvdExVbmNsYW1wZWQ9ZG90KE4scmVzdWx0LkwpO1xucmVzdWx0
Lk5kb3RMPXNhdHVyYXRlRXBzKHJlc3VsdC5OZG90TFVuY2xhbXBlZCk7XG5yZXR1cm4gcmVzdWx0
O1xufVxucHJlTGlnaHRpbmdJbmZvIGNvbXB1dGVIZW1pc3BoZXJpY1ByZUxpZ2h0aW5nSW5mbyh2
ZWM0IGxpZ2h0RGF0YSx2ZWMzIFYsdmVjMyBOKSB7XG5wcmVMaWdodGluZ0luZm8gcmVzdWx0O1xu
XG5cbnJlc3VsdC5OZG90TD1kb3QoTixsaWdodERhdGEueHl6KSowLjUrMC41O1xucmVzdWx0Lk5k
b3RMPXNhdHVyYXRlRXBzKHJlc3VsdC5OZG90TCk7XG5yZXN1bHQuTmRvdExVbmNsYW1wZWQ9cmVz
dWx0Lk5kb3RMO1xuI2lmZGVmIFNQRUNVTEFSVEVSTVxucmVzdWx0Lkw9bm9ybWFsaXplKGxpZ2h0
RGF0YS54eXopO1xucmVzdWx0Lkg9bm9ybWFsaXplKFYrcmVzdWx0LkwpO1xucmVzdWx0LlZkb3RI
PXNhdHVyYXRlKGRvdChWLHJlc3VsdC5IKSk7XG4jZW5kaWZcbnJldHVybiByZXN1bHQ7XG59IjsK
K19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJd
LkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3Zh
ciBwYnJEaXJlY3RMaWdodGluZ1NldHVwRnVuY3Rpb25zID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6
IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL3BickZyYWdtZW50RGVjbGFyYXRpb24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVy
cy9TaGFkZXJzSW5jbHVkZS9wYnJGcmFnbWVudERlY2xhcmF0aW9uLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogcGJyRnJhZ21lbnREZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJwYnJGcmFnbWVudERlY2xhcmF0aW9uIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBwYnJGcmFnbWVudERlY2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9N
YXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3BickZyYWdtZW50RGVjbGFyYXRp
b24nOwordmFyIHNoYWRlciA9ICJ1bmlmb3JtIHZlYzMgdlJlZmxlY3Rpb25Db2xvcjtcbnVuaWZv
cm0gdmVjNCB2QWxiZWRvQ29sb3I7XG5cbnVuaWZvcm0gdmVjNCB2TGlnaHRpbmdJbnRlbnNpdHk7
XG51bmlmb3JtIHZlYzQgdlJlZmxlY3Rpdml0eUNvbG9yO1xudW5pZm9ybSB2ZWMzIHZFbWlzc2l2
ZUNvbG9yO1xudW5pZm9ybSBmbG9hdCB2aXNpYmlsaXR5O1xudW5pZm9ybSB2ZWM0IHZFeWVQb3Np
dGlvbjtcbnVuaWZvcm0gdmVjMyB2QW1iaWVudENvbG9yO1xuXG4jaWZkZWYgQUxCRURPXG51bmlm
b3JtIHZlYzIgdkFsYmVkb0luZm9zO1xuI2VuZGlmXG4jaWZkZWYgQU1CSUVOVFxudW5pZm9ybSB2
ZWM0IHZBbWJpZW50SW5mb3M7XG4jZW5kaWZcbiNpZmRlZiBCVU1QXG51bmlmb3JtIHZlYzMgdkJ1
bXBJbmZvcztcbnVuaWZvcm0gdmVjMiB2VGFuZ2VudFNwYWNlUGFyYW1zO1xuI2VuZGlmXG4jaWZk
ZWYgT1BBQ0lUWVxudW5pZm9ybSB2ZWMyIHZPcGFjaXR5SW5mb3M7XG4jZW5kaWZcbiNpZmRlZiBF
TUlTU0lWRVxudW5pZm9ybSB2ZWMyIHZFbWlzc2l2ZUluZm9zO1xuI2VuZGlmXG4jaWZkZWYgTElH
SFRNQVBcbnVuaWZvcm0gdmVjMiB2TGlnaHRtYXBJbmZvcztcbiNlbmRpZlxuI2lmZGVmIFJFRkxF
Q1RJVklUWVxudW5pZm9ybSB2ZWMzIHZSZWZsZWN0aXZpdHlJbmZvcztcbiNlbmRpZlxuI2lmZGVm
IE1JQ1JPU1VSRkFDRU1BUFxudW5pZm9ybSB2ZWMyIHZNaWNyb1N1cmZhY2VTYW1wbGVySW5mb3M7
XG4jZW5kaWZcblxuI2lmIGRlZmluZWQoUkVGTEVDVElPTk1BUF9TUEhFUklDQUwpIHx8IGRlZmlu
ZWQoUkVGTEVDVElPTk1BUF9QUk9KRUNUSU9OKSB8fCBkZWZpbmVkKFNTX1JFRlJBQ1RJT04pXG51
bmlmb3JtIG1hdDQgdmlldztcbiNlbmRpZlxuXG4jaWZkZWYgUkVGTEVDVElPTlxudW5pZm9ybSB2
ZWMyIHZSZWZsZWN0aW9uSW5mb3M7XG51bmlmb3JtIG1hdDQgcmVmbGVjdGlvbk1hdHJpeDtcbnVu
aWZvcm0gdmVjMyB2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zO1xuI2lmIGRlZmluZWQoVVNF
X0xPQ0FMX1JFRkxFQ1RJT05NQVBfQ1VCSUMpICYmIGRlZmluZWQoUkVGTEVDVElPTk1BUF9DVUJJ
QylcbnVuaWZvcm0gdmVjMyB2UmVmbGVjdGlvblBvc2l0aW9uO1xudW5pZm9ybSB2ZWMzIHZSZWZs
ZWN0aW9uU2l6ZTtcbiNlbmRpZlxuI2VuZGlmXG5cbiNpZmRlZiBDTEVBUkNPQVRcbnVuaWZvcm0g
dmVjMiB2Q2xlYXJDb2F0UGFyYW1zO1xudW5pZm9ybSB2ZWM0IHZDbGVhckNvYXRSZWZyYWN0aW9u
UGFyYW1zO1xuI2lmZGVmIENMRUFSQ09BVF9URVhUVVJFXG51bmlmb3JtIHZlYzIgdkNsZWFyQ29h
dEluZm9zO1xudW5pZm9ybSBtYXQ0IGNsZWFyQ29hdE1hdHJpeDtcbiNlbmRpZlxuI2lmZGVmIENM
RUFSQ09BVF9CVU1QXG51bmlmb3JtIHZlYzIgdkNsZWFyQ29hdEJ1bXBJbmZvcztcbnVuaWZvcm0g
dmVjMiB2Q2xlYXJDb2F0VGFuZ2VudFNwYWNlUGFyYW1zO1xudW5pZm9ybSBtYXQ0IGNsZWFyQ29h
dEJ1bXBNYXRyaXg7XG4jZW5kaWZcbiNpZmRlZiBDTEVBUkNPQVRfVElOVFxudW5pZm9ybSB2ZWM0
IHZDbGVhckNvYXRUaW50UGFyYW1zO1xudW5pZm9ybSBmbG9hdCBjbGVhckNvYXRDb2xvckF0RGlz
dGFuY2U7XG4jaWZkZWYgQ0xFQVJDT0FUX1RJTlRfVEVYVFVSRVxudW5pZm9ybSB2ZWMyIHZDbGVh
ckNvYXRUaW50SW5mb3M7XG51bmlmb3JtIG1hdDQgY2xlYXJDb2F0VGludE1hdHJpeDtcbiNlbmRp
ZlxuI2VuZGlmXG4jZW5kaWZcblxuI2lmZGVmIEFOSVNPVFJPUElDXG51bmlmb3JtIHZlYzMgdkFu
aXNvdHJvcHk7XG4jaWZkZWYgQU5JU09UUk9QSUNfVEVYVFVSRVxudW5pZm9ybSB2ZWMyIHZBbmlz
b3Ryb3B5SW5mb3M7XG51bmlmb3JtIG1hdDQgYW5pc290cm9weU1hdHJpeDtcbiNlbmRpZlxuI2Vu
ZGlmXG5cbiNpZmRlZiBTSEVFTlxudW5pZm9ybSB2ZWM0IHZTaGVlbkNvbG9yO1xuI2lmZGVmIFNI
RUVOX1RFWFRVUkVcbnVuaWZvcm0gdmVjMiB2U2hlZW5JbmZvcztcbnVuaWZvcm0gbWF0NCBzaGVl
bk1hdHJpeDtcbiNlbmRpZlxuI2VuZGlmXG5cbiNpZmRlZiBTVUJTVVJGQUNFXG4jaWZkZWYgU1Nf
UkVGUkFDVElPTlxudW5pZm9ybSB2ZWMzIHZSZWZyYWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7XG51
bmlmb3JtIHZlYzQgdlJlZnJhY3Rpb25JbmZvcztcbnVuaWZvcm0gbWF0NCByZWZyYWN0aW9uTWF0
cml4O1xuI2VuZGlmXG4jaWZkZWYgU1NfVEhJQ0tORVNTQU5ETUFTS19URVhUVVJFXG51bmlmb3Jt
IHZlYzIgdlRoaWNrbmVzc0luZm9zO1xudW5pZm9ybSBtYXQ0IHRoaWNrbmVzc01hdHJpeDs7XG4j
ZW5kaWZcbnVuaWZvcm0gdmVjMiB2VGhpY2tuZXNzUGFyYW07XG51bmlmb3JtIHZlYzMgdkRpZmZ1
c2lvbkRpc3RhbmNlO1xudW5pZm9ybSB2ZWM0IHZUaW50Q29sb3I7XG51bmlmb3JtIHZlYzMgdlN1
YlN1cmZhY2VJbnRlbnNpdHk7XG4jZW5kaWZcbiNpZiBERUJVR01PREU+MFxudW5pZm9ybSB2ZWMy
IHZEZWJ1Z01vZGU7XG4jZW5kaWZcbiNpZmRlZiBVU0VTUEhFUklDQUxGUk9NUkVGTEVDVElPTk1B
UFxuI2lmZGVmIFNQSEVSSUNBTF9IQVJNT05JQ1NcbnVuaWZvcm0gdmVjMyB2U3BoZXJpY2FsTDAw
O1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxMMV8xO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxM
MTA7XG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbEwxMTtcbnVuaWZvcm0gdmVjMyB2U3BoZXJpY2Fs
TDJfMjtcbnVuaWZvcm0gdmVjMyB2U3BoZXJpY2FsTDJfMTtcbnVuaWZvcm0gdmVjMyB2U3BoZXJp
Y2FsTDIwO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxMMjE7XG51bmlmb3JtIHZlYzMgdlNwaGVy
aWNhbEwyMjtcbiNlbHNlXG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbFg7XG51bmlmb3JtIHZlYzMg
dlNwaGVyaWNhbFk7XG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbFo7XG51bmlmb3JtIHZlYzMgdlNw
aGVyaWNhbFhYX1paO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxZWV9aWjtcbnVuaWZvcm0gdmVj
MyB2U3BoZXJpY2FsWlo7XG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbFhZO1xudW5pZm9ybSB2ZWMz
IHZTcGhlcmljYWxZWjtcbnVuaWZvcm0gdmVjMyB2U3BoZXJpY2FsWlg7XG4jZW5kaWZcbiNlbmRp
ZlxuIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVm
ZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4g
Ki8KK3ZhciBwYnJGcmFnbWVudERlY2xhcmF0aW9uID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNo
YWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRl
L3BickZyYWdtZW50RXh0cmFEZWNsYXJhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJyRnJhZ21lbnRFeHRyYURlY2xhcmF0aW9uLnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBwYnJGcmFnbWVudEV4dHJhRGVj
bGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicGJyRnJhZ21l
bnRFeHRyYURlY2xhcmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwYnJGcmFnbWVudEV4dHJh
RGVjbGFyYXRpb247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwor
dmFyIG5hbWUgPSAncGJyRnJhZ21lbnRFeHRyYURlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAi
XG52YXJ5aW5nIHZlYzMgdlBvc2l0aW9uVztcbiNpZmRlZiBOT1JNQUxcbnZhcnlpbmcgdmVjMyB2
Tm9ybWFsVztcbiNpZiBkZWZpbmVkKFVTRVNQSEVSSUNBTEZST01SRUZMRUNUSU9OTUFQKSAmJiBk
ZWZpbmVkKFVTRVNQSEVSSUNBTElOVkVSVEVYKVxudmFyeWluZyB2ZWMzIHZFbnZpcm9ubWVudEly
cmFkaWFuY2U7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFZFUlRFWENPTE9SXG52YXJ5aW5nIHZl
YzQgdkNvbG9yO1xuI2VuZGlmXG4jaWYgREVCVUdNT0RFPjBcbnZhcnlpbmcgdmVjNCB2Q2xpcFNw
YWNlUG9zaXRpb247XG4jZW5kaWZcbiNpZmRlZiBNQUlOVVYxXG52YXJ5aW5nIHZlYzIgdk1haW5V
VjE7XG4jZW5kaWZcbiNpZmRlZiBNQUlOVVYyXG52YXJ5aW5nIHZlYzIgdk1haW5VVjI7XG4jZW5k
aWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZm
ZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAq
LwordmFyIHBickZyYWdtZW50RXh0cmFEZWNsYXJhdGlvbiA9IHsgbmFtZTogbmFtZSwgc2hhZGVy
OiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9wYnJGcmFnbWVudFNhbXBsZXJzRGVjbGFyYXRpb24udHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickZyYWdtZW50U2FtcGxlcnNEZWNs
YXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogcGJy
RnJhZ21lbnRTYW1wbGVyc0RlY2xhcmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgInBickZyYWdtZW50U2FtcGxlcnNEZWNsYXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gcGJyRnJhZ21lbnRTYW1wbGVyc0RlY2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9N
YXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3BickZyYWdtZW50U2FtcGxlcnNE
ZWNsYXJhdGlvbic7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBFTlZJUk9OTUVOVEJSREZcbnVuaWZv
cm0gc2FtcGxlcjJEIGVudmlyb25tZW50QnJkZlNhbXBsZXI7XG4jZW5kaWZcblxuI2lmZGVmIFJF
RkxFQ1RJT05cbiNpZmRlZiBSRUZMRUNUSU9OTUFQXzNEXG4jZGVmaW5lIHNhbXBsZVJlZmxlY3Rp
b24ocyxjKSB0ZXh0dXJlQ3ViZShzLGMpXG51bmlmb3JtIHNhbXBsZXJDdWJlIHJlZmxlY3Rpb25T
YW1wbGVyO1xuI2lmZGVmIExPREJBU0VETUlDUk9TRlVSQUNFXG4jZGVmaW5lIHNhbXBsZVJlZmxl
Y3Rpb25Mb2QocyxjLGwpIHRleHR1cmVDdWJlTG9kRVhUKHMsYyxsKVxuI2Vsc2VcbnVuaWZvcm0g
c2FtcGxlckN1YmUgcmVmbGVjdGlvblNhbXBsZXJMb3c7XG51bmlmb3JtIHNhbXBsZXJDdWJlIHJl
ZmxlY3Rpb25TYW1wbGVySGlnaDtcbiNlbmRpZlxuI2lmZGVmIFVTRUlSUkFESUFOQ0VNQVBcbnVu
aWZvcm0gc2FtcGxlckN1YmUgaXJyYWRpYW5jZVNhbXBsZXI7XG4jZW5kaWZcbiNlbHNlXG4jZGVm
aW5lIHNhbXBsZVJlZmxlY3Rpb24ocyxjKSB0ZXh0dXJlMkQocyxjKVxudW5pZm9ybSBzYW1wbGVy
MkQgcmVmbGVjdGlvblNhbXBsZXI7XG4jaWZkZWYgTE9EQkFTRURNSUNST1NGVVJBQ0VcbiNkZWZp
bmUgc2FtcGxlUmVmbGVjdGlvbkxvZChzLGMsbCkgdGV4dHVyZTJETG9kRVhUKHMsYyxsKVxuI2Vs
c2VcbnVuaWZvcm0gc2FtcGxlckN1YmUgcmVmbGVjdGlvblNhbXBsZXJMb3c7XG51bmlmb3JtIHNh
bXBsZXJDdWJlIHJlZmxlY3Rpb25TYW1wbGVySGlnaDtcbiNlbmRpZlxuI2lmZGVmIFVTRUlSUkFE
SUFOQ0VNQVBcbnVuaWZvcm0gc2FtcGxlckN1YmUgaXJyYWRpYW5jZVNhbXBsZXI7XG4jZW5kaWZc
biNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfU0tZQk9YXG52YXJ5aW5nIHZlYzMgdlBvc2l0
aW9uVVZXO1xuI2Vsc2VcbiNpZiBkZWZpbmVkKFJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFS
X0ZJWEVEKSB8fCBkZWZpbmVkKFJFRkxFQ1RJT05NQVBfTUlSUk9SRURFUVVJUkVDVEFOR1VMQVJf
RklYRUQpXG52YXJ5aW5nIHZlYzMgdkRpcmVjdGlvblc7XG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlm
XG4jaWZkZWYgQUxCRURPXG4jaWYgQUxCRURPRElSRUNUVVYgPT0gMVxuI2RlZmluZSB2QWxiZWRv
VVYgdk1haW5VVjFcbiNlbGlmIEFMQkVET0RJUkVDVFVWID09IDJcbiNkZWZpbmUgdkFsYmVkb1VW
IHZNYWluVVYyXG4jZWxzZVxudmFyeWluZyB2ZWMyIHZBbGJlZG9VVjtcbiNlbmRpZlxudW5pZm9y
bSBzYW1wbGVyMkQgYWxiZWRvU2FtcGxlcjtcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJVklUWVxu
I2lmIFJFRkxFQ1RJVklUWURJUkVDVFVWID09IDFcbiNkZWZpbmUgdlJlZmxlY3Rpdml0eVVWIHZN
YWluVVYxXG4jZWxpZiBSRUZMRUNUSVZJVFlESVJFQ1RVViA9PSAyXG4jZGVmaW5lIHZSZWZsZWN0
aXZpdHlVViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcgdmVjMiB2UmVmbGVjdGl2aXR5VVY7XG4j
ZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIHJlZmxlY3Rpdml0eVNhbXBsZXI7XG4jZW5kaWZcbiNp
ZmRlZiBBTUJJRU5UXG4jaWYgQU1CSUVOVERJUkVDVFVWID09IDFcbiNkZWZpbmUgdkFtYmllbnRV
ViB2TWFpblVWMVxuI2VsaWYgQU1CSUVOVERJUkVDVFVWID09IDJcbiNkZWZpbmUgdkFtYmllbnRV
ViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcgdmVjMiB2QW1iaWVudFVWO1xuI2VuZGlmXG51bmlm
b3JtIHNhbXBsZXIyRCBhbWJpZW50U2FtcGxlcjtcbiNlbmRpZlxuI2lmZGVmIEVNSVNTSVZFXG4j
aWYgRU1JU1NJVkVESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZFbWlzc2l2ZVVWIHZNYWluVVYxXG4j
ZWxpZiBFTUlTU0lWRURJUkVDVFVWID09IDJcbiNkZWZpbmUgdkVtaXNzaXZlVVYgdk1haW5VVjJc
biNlbHNlXG52YXJ5aW5nIHZlYzIgdkVtaXNzaXZlVVY7XG4jZW5kaWZcbnVuaWZvcm0gc2FtcGxl
cjJEIGVtaXNzaXZlU2FtcGxlcjtcbiNlbmRpZlxuI2lmZGVmIEJVTVBcbiNpZiBCVU1QRElSRUNU
VVYgPT0gMVxuI2RlZmluZSB2QnVtcFVWIHZNYWluVVYxXG4jZWxpZiBCVU1QRElSRUNUVVYgPT0g
MlxuI2RlZmluZSB2QnVtcFVWIHZNYWluVVYyXG4jZWxzZVxudmFyeWluZyB2ZWMyIHZCdW1wVVY7
XG4jZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBTYW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYg
T1BBQ0lUWVxuI2lmIE9QQUNJVFlESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZPcGFjaXR5VVYgdk1h
aW5VVjFcbiNlbGlmIE9QQUNJVFlESVJFQ1RVViA9PSAyXG4jZGVmaW5lIHZPcGFjaXR5VVYgdk1h
aW5VVjJcbiNlbHNlXG52YXJ5aW5nIHZlYzIgdk9wYWNpdHlVVjtcbiNlbmRpZlxudW5pZm9ybSBz
YW1wbGVyMkQgb3BhY2l0eVNhbXBsZXI7XG4jZW5kaWZcbiNpZmRlZiBMSUdIVE1BUFxuI2lmIExJ
R0hUTUFQRElSRUNUVVYgPT0gMVxuI2RlZmluZSB2TGlnaHRtYXBVViB2TWFpblVWMVxuI2VsaWYg
TElHSFRNQVBESVJFQ1RVViA9PSAyXG4jZGVmaW5lIHZMaWdodG1hcFVWIHZNYWluVVYyXG4jZWxz
ZVxudmFyeWluZyB2ZWMyIHZMaWdodG1hcFVWO1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCBs
aWdodG1hcFNhbXBsZXI7XG4jZW5kaWZcbiNpZmRlZiBNSUNST1NVUkZBQ0VNQVBcbiNpZiBNSUNS
T1NVUkZBQ0VNQVBESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZNaWNyb1N1cmZhY2VTYW1wbGVyVVYg
dk1haW5VVjFcbiNlbGlmIE1JQ1JPU1VSRkFDRU1BUERJUkVDVFVWID09IDJcbiNkZWZpbmUgdk1p
Y3JvU3VyZmFjZVNhbXBsZXJVViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcgdmVjMiB2TWljcm9T
dXJmYWNlU2FtcGxlclVWO1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCBtaWNyb1N1cmZhY2VT
YW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG4jaWZkZWYgQ0xFQVJDT0FUX1RFWFRV
UkVcbiNpZiBDTEVBUkNPQVRfVEVYVFVSRURJUkVDVFVWID09IDFcbiNkZWZpbmUgdkNsZWFyQ29h
dFVWIHZNYWluVVYxXG4jZWxpZiBDTEVBUkNPQVRfVEVYVFVSRURJUkVDVFVWID09IDJcbiNkZWZp
bmUgdkNsZWFyQ29hdFVWIHZNYWluVVYyXG4jZWxzZVxudmFyeWluZyB2ZWMyIHZDbGVhckNvYXRV
VjtcbiNlbmRpZlxudW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJDb2F0U2FtcGxlcjtcbiNlbmRpZlxu
I2lmZGVmIENMRUFSQ09BVF9CVU1QXG4jaWYgQ0xFQVJDT0FUX0JVTVBESVJFQ1RVViA9PSAxXG4j
ZGVmaW5lIHZDbGVhckNvYXRCdW1wVVYgdk1haW5VVjFcbiNlbGlmIENMRUFSQ09BVF9CVU1QRElS
RUNUVVYgPT0gMlxuI2RlZmluZSB2Q2xlYXJDb2F0QnVtcFVWIHZNYWluVVYyXG4jZWxzZVxudmFy
eWluZyB2ZWMyIHZDbGVhckNvYXRCdW1wVVY7XG4jZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIGNs
ZWFyQ29hdEJ1bXBTYW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUX1RJTlRfVEVYVFVS
RVxuI2lmIENMRUFSQ09BVF9USU5UX1RFWFRVUkVESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZDbGVh
ckNvYXRUaW50VVYgdk1haW5VVjFcbiNlbGlmIENMRUFSQ09BVF9USU5UX1RFWFRVUkVESVJFQ1RV
ViA9PSAyXG4jZGVmaW5lIHZDbGVhckNvYXRUaW50VVYgdk1haW5VVjJcbiNlbHNlXG52YXJ5aW5n
IHZlYzIgdkNsZWFyQ29hdFRpbnRVVjtcbiNlbmRpZlxudW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJD
b2F0VGludFNhbXBsZXI7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFNIRUVOXG4jaWZkZWYgU0hF
RU5fVEVYVFVSRVxuI2lmIFNIRUVOX1RFWFRVUkVESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZTaGVl
blVWIHZNYWluVVYxXG4jZWxpZiBTSEVFTl9URVhUVVJFRElSRUNUVVYgPT0gMlxuI2RlZmluZSB2
U2hlZW5VViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcgdmVjMiB2U2hlZW5VVjtcbiNlbmRpZlxu
dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5TYW1wbGVyO1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBB
TklTT1RST1BJQ1xuI2lmZGVmIEFOSVNPVFJPUElDX1RFWFRVUkVcbiNpZiBBTklTT1RST1BJQ19U
RVhUVVJFRElSRUNUVVYgPT0gMVxuI2RlZmluZSB2QW5pc290cm9weVVWIHZNYWluVVYxXG4jZWxp
ZiBBTklTT1RST1BJQ19URVhUVVJFRElSRUNUVVYgPT0gMlxuI2RlZmluZSB2QW5pc290cm9weVVW
IHZNYWluVVYyXG4jZWxzZVxudmFyeWluZyB2ZWMyIHZBbmlzb3Ryb3B5VVY7XG4jZW5kaWZcbnVu
aWZvcm0gc2FtcGxlcjJEIGFuaXNvdHJvcHlTYW1wbGVyO1xuI2VuZGlmXG4jZW5kaWZcblxuI2lm
ZGVmIFNVQlNVUkZBQ0VcbiNpZmRlZiBTU19SRUZSQUNUSU9OXG4jaWZkZWYgU1NfUkVGUkFDVElP
Tk1BUF8zRFxuI2RlZmluZSBzYW1wbGVSZWZyYWN0aW9uKHMsYykgdGV4dHVyZUN1YmUocyxjKVxu
dW5pZm9ybSBzYW1wbGVyQ3ViZSByZWZyYWN0aW9uU2FtcGxlcjtcbiNpZmRlZiBMT0RCQVNFRE1J
Q1JPU0ZVUkFDRVxuI2RlZmluZSBzYW1wbGVSZWZyYWN0aW9uTG9kKHMsYyxsKSB0ZXh0dXJlQ3Vi
ZUxvZEVYVChzLGMsbClcbiNlbHNlXG51bmlmb3JtIHNhbXBsZXJDdWJlIHJlZnJhY3Rpb25TYW1w
bGVyTG93O1xudW5pZm9ybSBzYW1wbGVyQ3ViZSByZWZyYWN0aW9uU2FtcGxlckhpZ2g7XG4jZW5k
aWZcbiNlbHNlXG4jZGVmaW5lIHNhbXBsZVJlZnJhY3Rpb24ocyxjKSB0ZXh0dXJlMkQocyxjKVxu
dW5pZm9ybSBzYW1wbGVyMkQgcmVmcmFjdGlvblNhbXBsZXI7XG4jaWZkZWYgTE9EQkFTRURNSUNS
T1NGVVJBQ0VcbiNkZWZpbmUgc2FtcGxlUmVmcmFjdGlvbkxvZChzLGMsbCkgdGV4dHVyZTJETG9k
RVhUKHMsYyxsKVxuI2Vsc2VcbnVuaWZvcm0gc2FtcGxlckN1YmUgcmVmcmFjdGlvblNhbXBsZXJM
b3c7XG51bmlmb3JtIHNhbXBsZXJDdWJlIHJlZnJhY3Rpb25TYW1wbGVySGlnaDtcbiNlbmRpZlxu
I2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBTU19USElDS05FU1NBTkRNQVNLX1RFWFRVUkVcbiNpZiBT
U19USElDS05FU1NBTkRNQVNLX1RFWFRVUkVESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZUaGlja25l
c3NVViB2TWFpblVWMVxuI2VsaWYgU1NfVEhJQ0tORVNTQU5ETUFTS19URVhUVVJFRElSRUNUVVYg
PT0gMlxuI2RlZmluZSB2VGhpY2tuZXNzVVYgdk1haW5VVjJcbiNlbHNlXG52YXJ5aW5nIHZlYzIg
dlRoaWNrbmVzc1VWO1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NTYW1wbGVy
O1xuI2VuZGlmXG4jZW5kaWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7
CisvKiogQGhpZGRlbiAqLwordmFyIHBickZyYWdtZW50U2FtcGxlcnNEZWNsYXJhdGlvbiA9IHsg
bmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYnJIZWxwZXJGdW5jdGlvbnMudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickhlbHBlckZ1bmN0aW9ucy50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogcGJySGVscGVyRnVuY3Rpb25zICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInBickhlbHBlckZ1bmN0aW9ucyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gcGJySGVscGVyRnVuY3Rpb25zOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMv
ZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3BickhlbHBlckZ1bmN0aW9ucyc7Cit2YXIgc2hh
ZGVyID0gIlxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0XG4jZGVmaW5lIFJFQ0lQ
Uk9DQUxfUEkgMC4zMTgzMDk4ODYxOFxuXG4jZGVmaW5lIE1JTklNVU1WQVJJQU5DRSAwLjAwMDVc
bmZsb2F0IGNvbnZlcnRSb3VnaG5lc3NUb0F2ZXJhZ2VTbG9wZShmbG9hdCByb3VnaG5lc3MpXG57
XG5cbnJldHVybiBzcXVhcmUocm91Z2huZXNzKStNSU5JTVVNVkFSSUFOQ0U7XG59XG5mbG9hdCBm
cmVzbmVsR3JhemluZ1JlZmxlY3RhbmNlKGZsb2F0IHJlZmxlY3RhbmNlMCkge1xuXG5cbmZsb2F0
IHJlZmxlY3RhbmNlOTA9c2F0dXJhdGUocmVmbGVjdGFuY2UwKjI1LjApO1xucmV0dXJuIHJlZmxl
Y3RhbmNlOTA7XG59XG52ZWMyIGdldEFBUm91Z2huZXNzRmFjdG9ycyh2ZWMzIG5vcm1hbFZlY3Rv
cikge1xuI2lmZGVmIFNQRUNVTEFSQUFcbnZlYzMgbkRmZHg9ZEZkeChub3JtYWxWZWN0b3IueHl6
KTtcbnZlYzMgbkRmZHk9ZEZkeShub3JtYWxWZWN0b3IueHl6KTtcbmZsb2F0IHNsb3BlU3F1YXJl
PW1heChkb3QobkRmZHgsbkRmZHgpLGRvdChuRGZkeSxuRGZkeSkpO1xuXG5mbG9hdCBnZW9tZXRy
aWNSb3VnaG5lc3NGYWN0b3I9cG93KHNhdHVyYXRlKHNsb3BlU3F1YXJlKSwwLjMzMyk7XG5cbmZs
b2F0IGdlb21ldHJpY0FscGhhR0ZhY3Rvcj1zcXJ0KHNsb3BlU3F1YXJlKTtcblxuZ2VvbWV0cmlj
QWxwaGFHRmFjdG9yKj0wLjc1O1xucmV0dXJuIHZlYzIoZ2VvbWV0cmljUm91Z2huZXNzRmFjdG9y
LGdlb21ldHJpY0FscGhhR0ZhY3Rvcik7XG4jZWxzZVxucmV0dXJuIHZlYzIoMC4pO1xuI2VuZGlm
XG59XG4jaWZkZWYgQU5JU09UUk9QSUNcblxuXG52ZWMyIGdldEFuaXNvdHJvcGljUm91Z2huZXNz
KGZsb2F0IGFscGhhRyxmbG9hdCBhbmlzb3Ryb3B5KSB7XG5mbG9hdCBhbHBoYVQ9bWF4KGFscGhh
RyooMS4wK2FuaXNvdHJvcHkpLE1JTklNVU1WQVJJQU5DRSk7XG5mbG9hdCBhbHBoYUI9bWF4KGFs
cGhhRyooMS4wLWFuaXNvdHJvcHkpLE1JTklNVU1WQVJJQU5DRSk7XG5yZXR1cm4gdmVjMihhbHBo
YVQsYWxwaGFCKTtcbn1cblxuXG52ZWMzIGdldEFuaXNvdHJvcGljQmVudE5vcm1hbHMoY29uc3Qg
dmVjMyBULGNvbnN0IHZlYzMgQixjb25zdCB2ZWMzIE4sY29uc3QgdmVjMyBWLGZsb2F0IGFuaXNv
dHJvcHkpIHtcbnZlYzMgYW5pc290cm9waWNGcmFtZURpcmVjdGlvbj1hbmlzb3Ryb3B5Pj0wLjAg
PyBCIDogVDtcbnZlYzMgYW5pc290cm9waWNGcmFtZVRhbmdlbnQ9Y3Jvc3Mobm9ybWFsaXplKGFu
aXNvdHJvcGljRnJhbWVEaXJlY3Rpb24pLFYpO1xudmVjMyBhbmlzb3Ryb3BpY0ZyYW1lTm9ybWFs
PWNyb3NzKGFuaXNvdHJvcGljRnJhbWVUYW5nZW50LGFuaXNvdHJvcGljRnJhbWVEaXJlY3Rpb24p
O1xudmVjMyBhbmlzb3Ryb3BpY05vcm1hbD1ub3JtYWxpemUobWl4KE4sYW5pc290cm9waWNGcmFt
ZU5vcm1hbCxhYnMoYW5pc290cm9weSkpKTtcbnJldHVybiBhbmlzb3Ryb3BpY05vcm1hbDtcblxu
fVxuI2VuZGlmXG4jaWYgZGVmaW5lZChDTEVBUkNPQVQpIHx8IGRlZmluZWQoU1NfUkVGUkFDVElP
TilcblxuXG5cbnZlYzMgY29jYUxhbWJlcnQodmVjMyBhbHBoYSxmbG9hdCBkaXN0YW5jZSkge1xu
cmV0dXJuIGV4cCgtYWxwaGEqZGlzdGFuY2UpO1xufVxuXG52ZWMzIGNvY2FMYW1iZXJ0KGZsb2F0
IE5kb3RWUmVmcmFjdCxmbG9hdCBOZG90TFJlZnJhY3QsdmVjMyBhbHBoYSxmbG9hdCB0aGlja25l
c3MpIHtcbnJldHVybiBjb2NhTGFtYmVydChhbHBoYSwodGhpY2tuZXNzKigoTmRvdExSZWZyYWN0
K05kb3RWUmVmcmFjdCkvKE5kb3RMUmVmcmFjdCpOZG90VlJlZnJhY3QpKSkpO1xufVxuXG52ZWMz
IGNvbXB1dGVDb2xvckF0RGlzdGFuY2VJbk1lZGlhKHZlYzMgY29sb3IsZmxvYXQgZGlzdGFuY2Up
IHtcbnJldHVybiAtbG9nKGNvbG9yKS9kaXN0YW5jZTtcbn1cbnZlYzMgY29tcHV0ZUNsZWFyQ29h
dEFic29ycHRpb24oZmxvYXQgTmRvdFZSZWZyYWN0LGZsb2F0IE5kb3RMUmVmcmFjdCx2ZWMzIGNs
ZWFyQ29hdENvbG9yLGZsb2F0IGNsZWFyQ29hdFRoaWNrbmVzcyxmbG9hdCBjbGVhckNvYXRJbnRl
bnNpdHkpIHtcbnZlYzMgY2xlYXJDb2F0QWJzb3JwdGlvbj1taXgodmVjMygxLjApLFxuY29jYUxh
bWJlcnQoTmRvdFZSZWZyYWN0LE5kb3RMUmVmcmFjdCxjbGVhckNvYXRDb2xvcixjbGVhckNvYXRU
aGlja25lc3MpLFxuY2xlYXJDb2F0SW50ZW5zaXR5KTtcbnJldHVybiBjbGVhckNvYXRBYnNvcnB0
aW9uO1xufVxuI2VuZGlmXG5cblxuXG5cbiNpZmRlZiBNSUNST1NVUkZBQ0VBVVRPTUFUSUNcbmZs
b2F0IGNvbXB1dGVEZWZhdWx0TWljcm9TdXJmYWNlKGZsb2F0IG1pY3JvU3VyZmFjZSx2ZWMzIHJl
ZmxlY3Rpdml0eUNvbG9yKVxue1xuY29uc3QgZmxvYXQga1JlZmxlY3Rpdml0eU5vQWxwaGFXb3Jr
Zmxvd19TbW9vdGhuZXNzTWF4PTAuOTU7XG5mbG9hdCByZWZsZWN0aXZpdHlMdW1pbmFuY2U9Z2V0
THVtaW5hbmNlKHJlZmxlY3Rpdml0eUNvbG9yKTtcbmZsb2F0IHJlZmxlY3Rpdml0eUx1bWE9c3Fy
dChyZWZsZWN0aXZpdHlMdW1pbmFuY2UpO1xubWljcm9TdXJmYWNlPXJlZmxlY3Rpdml0eUx1bWEq
a1JlZmxlY3Rpdml0eU5vQWxwaGFXb3JrZmxvd19TbW9vdGhuZXNzTWF4O1xucmV0dXJuIG1pY3Jv
U3VyZmFjZTtcbn1cbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRl
cjsKKy8qKiBAaGlkZGVuICovCit2YXIgcGJySGVscGVyRnVuY3Rpb25zID0geyBuYW1lOiBuYW1l
LCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1No
YWRlcnNJbmNsdWRlL3BicklCTEZ1bmN0aW9ucy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hh
ZGVyc0luY2x1ZGUvcGJySUJMRnVuY3Rpb25zLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBwYnJJQkxGdW5jdGlvbnMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
cGJySUJMRnVuY3Rpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwYnJJQkxGdW5jdGlvbnM7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlh
bHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAncGJy
SUJMRnVuY3Rpb25zJzsKK3ZhciBzaGFkZXIgPSAiI2lmIGRlZmluZWQoUkVGTEVDVElPTikgfHwg
ZGVmaW5lZChTU19SRUZSQUNUSU9OKVxuZmxvYXQgZ2V0TG9kRnJvbUFscGhhRyhmbG9hdCBjdWJl
TWFwRGltZW5zaW9uUGl4ZWxzLGZsb2F0IG1pY3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZSkge1xuZmxv
YXQgbWljcm9zdXJmYWNlQXZlcmFnZVNsb3BlVGV4ZWxzPWN1YmVNYXBEaW1lbnNpb25QaXhlbHMq
bWljcm9zdXJmYWNlQXZlcmFnZVNsb3BlO1xuZmxvYXQgbG9kPWxvZzIobWljcm9zdXJmYWNlQXZl
cmFnZVNsb3BlVGV4ZWxzKTtcbnJldHVybiBsb2Q7XG59XG5mbG9hdCBnZXRMaW5lYXJMb2RGcm9t
Um91Z2huZXNzKGZsb2F0IGN1YmVNYXBEaW1lbnNpb25QaXhlbHMsZmxvYXQgcm91Z2huZXNzKSB7
XG5mbG9hdCBsb2Q9bG9nMihjdWJlTWFwRGltZW5zaW9uUGl4ZWxzKSpyb3VnaG5lc3M7XG5yZXR1
cm4gbG9kO1xufVxuI2VuZGlmXG4jaWYgZGVmaW5lZChFTlZJUk9OTUVOVEJSREYpICYmIGRlZmlu
ZWQoUkFESUFOQ0VPQ0NMVVNJT04pXG5mbG9hdCBlbnZpcm9ubWVudFJhZGlhbmNlT2NjbHVzaW9u
KGZsb2F0IGFtYmllbnRPY2NsdXNpb24sZmxvYXQgTmRvdFZVbmNsYW1wZWQpIHtcblxuXG5mbG9h
dCB0ZW1wPU5kb3RWVW5jbGFtcGVkK2FtYmllbnRPY2NsdXNpb247XG5yZXR1cm4gc2F0dXJhdGUo
c3F1YXJlKHRlbXApLTEuMCthbWJpZW50T2NjbHVzaW9uKTtcbn1cbiNlbmRpZlxuI2lmIGRlZmlu
ZWQoRU5WSVJPTk1FTlRCUkRGKSAmJiBkZWZpbmVkKEhPUklaT05PQ0NMVVNJT04pXG5mbG9hdCBl
bnZpcm9ubWVudEhvcml6b25PY2NsdXNpb24odmVjMyB2aWV3LHZlYzMgbm9ybWFsKSB7XG5cbnZl
YzMgcmVmbGVjdGlvbj1yZWZsZWN0KHZpZXcsbm9ybWFsKTtcbmZsb2F0IHRlbXA9c2F0dXJhdGUo
MS4wKzEuMSpkb3QocmVmbGVjdGlvbixub3JtYWwpKTtcbnJldHVybiBzcXVhcmUodGVtcCk7XG59
XG4jZW5kaWZcblxuXG5cblxuI2lmIGRlZmluZWQoTE9ESU5SRUZMRUNUSU9OQUxQSEEpIHx8IGRl
ZmluZWQoU1NfTE9ESU5SRUZSQUNUSU9OQUxQSEEpXG5cblxuI2RlZmluZSBVTlBBQ0tfTE9EKHgp
ICgxLjAteCkqMjU1LjBcbmZsb2F0IGdldExvZEZyb21BbHBoYUcoZmxvYXQgY3ViZU1hcERpbWVu
c2lvblBpeGVscyxmbG9hdCBhbHBoYUcsZmxvYXQgTmRvdFYpIHtcbmZsb2F0IG1pY3Jvc3VyZmFj
ZUF2ZXJhZ2VTbG9wZT1hbHBoYUc7XG5cblxuXG5cblxuXG5taWNyb3N1cmZhY2VBdmVyYWdlU2xv
cGUqPXNxcnQoYWJzKE5kb3RWKSk7XG5yZXR1cm4gZ2V0TG9kRnJvbUFscGhhRyhjdWJlTWFwRGlt
ZW5zaW9uUGl4ZWxzLG1pY3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZSk7XG59XG4jZW5kaWYiOworX01h
dGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5j
bHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHBi
cklCTEZ1bmN0aW9ucyA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYnJVYm9EZWNsYXJhdGlv
bi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYnJVYm9EZWNsYXJh
dGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBwYnJVYm9EZWNsYXJhdGlvbiAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJwYnJVYm9EZWNsYXJhdGlvbiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gcGJyVWJvRGVjbGFyYXRpb247IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIu
L01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAncGJyVWJvRGVjbGFyYXRpb24n
OwordmFyIHNoYWRlciA9ICJsYXlvdXQoc3RkMTQwLGNvbHVtbl9tYWpvcikgdW5pZm9ybTtcblxu
XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnVuaWZvcm0gU2NlbmVcbntc
bm1hdDQgdmlld1Byb2plY3Rpb247XG4jaWZkZWYgTVVMVElWSUVXXG5tYXQ0IHZpZXdQcm9qZWN0
aW9uUjtcbiNlbmRpZlxubWF0NCB2aWV3O1xufTtcbnVuaWZvcm0gTWF0ZXJpYWxcbntcbnZlYzIg
dkFsYmVkb0luZm9zO1xudmVjNCB2QW1iaWVudEluZm9zO1xudmVjMiB2T3BhY2l0eUluZm9zO1xu
dmVjMiB2RW1pc3NpdmVJbmZvcztcbnZlYzIgdkxpZ2h0bWFwSW5mb3M7XG52ZWMzIHZSZWZsZWN0
aXZpdHlJbmZvcztcbnZlYzIgdk1pY3JvU3VyZmFjZVNhbXBsZXJJbmZvcztcbnZlYzIgdlJlZmxl
Y3Rpb25JbmZvcztcbnZlYzMgdlJlZmxlY3Rpb25Qb3NpdGlvbjtcbnZlYzMgdlJlZmxlY3Rpb25T
aXplO1xudmVjMyB2QnVtcEluZm9zO1xubWF0NCBhbGJlZG9NYXRyaXg7XG5tYXQ0IGFtYmllbnRN
YXRyaXg7XG5tYXQ0IG9wYWNpdHlNYXRyaXg7XG5tYXQ0IGVtaXNzaXZlTWF0cml4O1xubWF0NCBs
aWdodG1hcE1hdHJpeDtcbm1hdDQgcmVmbGVjdGl2aXR5TWF0cml4O1xubWF0NCBtaWNyb1N1cmZh
Y2VTYW1wbGVyTWF0cml4O1xubWF0NCBidW1wTWF0cml4O1xudmVjMiB2VGFuZ2VudFNwYWNlUGFy
YW1zO1xubWF0NCByZWZsZWN0aW9uTWF0cml4O1xudmVjMyB2UmVmbGVjdGlvbkNvbG9yO1xudmVj
NCB2QWxiZWRvQ29sb3I7XG52ZWM0IHZMaWdodGluZ0ludGVuc2l0eTtcbnZlYzMgdlJlZmxlY3Rp
b25NaWNyb3N1cmZhY2VJbmZvcztcbmZsb2F0IHBvaW50U2l6ZTtcbnZlYzQgdlJlZmxlY3Rpdml0
eUNvbG9yO1xudmVjMyB2RW1pc3NpdmVDb2xvcjtcbnZlYzQgdkV5ZVBvc2l0aW9uO1xudmVjMyB2
QW1iaWVudENvbG9yO1xudmVjMiB2RGVidWdNb2RlO1xudmVjMiB2Q2xlYXJDb2F0UGFyYW1zO1xu
dmVjNCB2Q2xlYXJDb2F0UmVmcmFjdGlvblBhcmFtcztcbnZlYzIgdkNsZWFyQ29hdEluZm9zO1xu
bWF0NCBjbGVhckNvYXRNYXRyaXg7XG52ZWMyIHZDbGVhckNvYXRCdW1wSW5mb3M7XG52ZWMyIHZD
bGVhckNvYXRUYW5nZW50U3BhY2VQYXJhbXM7XG5tYXQ0IGNsZWFyQ29hdEJ1bXBNYXRyaXg7XG52
ZWM0IHZDbGVhckNvYXRUaW50UGFyYW1zO1xuZmxvYXQgY2xlYXJDb2F0Q29sb3JBdERpc3RhbmNl
O1xudmVjMiB2Q2xlYXJDb2F0VGludEluZm9zO1xubWF0NCBjbGVhckNvYXRUaW50TWF0cml4O1xu
dmVjMyB2QW5pc290cm9weTtcbnZlYzIgdkFuaXNvdHJvcHlJbmZvcztcbm1hdDQgYW5pc290cm9w
eU1hdHJpeDtcbnZlYzQgdlNoZWVuQ29sb3I7XG52ZWMyIHZTaGVlbkluZm9zO1xubWF0NCBzaGVl
bk1hdHJpeDtcbnZlYzMgdlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvcztcbnZlYzQgdlJlZnJh
Y3Rpb25JbmZvcztcbm1hdDQgcmVmcmFjdGlvbk1hdHJpeDtcbnZlYzIgdlRoaWNrbmVzc0luZm9z
O1xubWF0NCB0aGlja25lc3NNYXRyaXg7XG52ZWMyIHZUaGlja25lc3NQYXJhbTtcbnZlYzMgdkRp
ZmZ1c2lvbkRpc3RhbmNlO1xudmVjNCB2VGludENvbG9yO1xudmVjMyB2U3ViU3VyZmFjZUludGVu
c2l0eTtcbnZlYzMgdlNwaGVyaWNhbEwwMDtcbnZlYzMgdlNwaGVyaWNhbEwxXzE7XG52ZWMzIHZT
cGhlcmljYWxMMTA7XG52ZWMzIHZTcGhlcmljYWxMMTE7XG52ZWMzIHZTcGhlcmljYWxMMl8yO1xu
dmVjMyB2U3BoZXJpY2FsTDJfMTtcbnZlYzMgdlNwaGVyaWNhbEwyMDtcbnZlYzMgdlNwaGVyaWNh
bEwyMTtcbnZlYzMgdlNwaGVyaWNhbEwyMjtcbnZlYzMgdlNwaGVyaWNhbFg7XG52ZWMzIHZTcGhl
cmljYWxZO1xudmVjMyB2U3BoZXJpY2FsWjtcbnZlYzMgdlNwaGVyaWNhbFhYX1paO1xudmVjMyB2
U3BoZXJpY2FsWVlfWlo7XG52ZWMzIHZTcGhlcmljYWxaWjtcbnZlYzMgdlNwaGVyaWNhbFhZO1xu
dmVjMyB2U3BoZXJpY2FsWVo7XG52ZWMzIHZTcGhlcmljYWxaWDtcbn07XG51bmlmb3JtIE1lc2hc
bntcbm1hdDQgd29ybGQ7XG5mbG9hdCB2aXNpYmlsaXR5O1xufTsiOworX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJz
U3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHBiclVib0RlY2xhcmF0
aW9uID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BiclZlcnRleERlY2xhcmF0aW9uLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BiclZlcnRleERlY2xhcmF0
aW9uLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHBiclZlcnRleERlY2xhcmF0
aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInBiclZlcnRleERlY2xh
cmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwYnJWZXJ0ZXhEZWNsYXJhdGlvbjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9l
ZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdwYnJWZXJ0
ZXhEZWNsYXJhdGlvbic7Cit2YXIgc2hhZGVyID0gInVuaWZvcm0gbWF0NCB2aWV3O1xudW5pZm9y
bSBtYXQ0IHZpZXdQcm9qZWN0aW9uO1xudW5pZm9ybSBtYXQ0IHdvcmxkO1xuI2lmZGVmIEFMQkVE
T1xudW5pZm9ybSBtYXQ0IGFsYmVkb01hdHJpeDtcbnVuaWZvcm0gdmVjMiB2QWxiZWRvSW5mb3M7
XG4jZW5kaWZcbiNpZmRlZiBBTUJJRU5UXG51bmlmb3JtIG1hdDQgYW1iaWVudE1hdHJpeDtcbnVu
aWZvcm0gdmVjNCB2QW1iaWVudEluZm9zO1xuI2VuZGlmXG4jaWZkZWYgT1BBQ0lUWVxudW5pZm9y
bSBtYXQ0IG9wYWNpdHlNYXRyaXg7XG51bmlmb3JtIHZlYzIgdk9wYWNpdHlJbmZvcztcbiNlbmRp
ZlxuI2lmZGVmIEVNSVNTSVZFXG51bmlmb3JtIHZlYzIgdkVtaXNzaXZlSW5mb3M7XG51bmlmb3Jt
IG1hdDQgZW1pc3NpdmVNYXRyaXg7XG4jZW5kaWZcbiNpZmRlZiBMSUdIVE1BUFxudW5pZm9ybSB2
ZWMyIHZMaWdodG1hcEluZm9zO1xudW5pZm9ybSBtYXQ0IGxpZ2h0bWFwTWF0cml4O1xuI2VuZGlm
XG4jaWZkZWYgUkVGTEVDVElWSVRZXG51bmlmb3JtIHZlYzMgdlJlZmxlY3Rpdml0eUluZm9zO1xu
dW5pZm9ybSBtYXQ0IHJlZmxlY3Rpdml0eU1hdHJpeDtcbiNlbmRpZlxuI2lmZGVmIE1JQ1JPU1VS
RkFDRU1BUFxudW5pZm9ybSB2ZWMyIHZNaWNyb1N1cmZhY2VTYW1wbGVySW5mb3M7XG51bmlmb3Jt
IG1hdDQgbWljcm9TdXJmYWNlU2FtcGxlck1hdHJpeDtcbiNlbmRpZlxuI2lmZGVmIEJVTVBcbnVu
aWZvcm0gdmVjMyB2QnVtcEluZm9zO1xudW5pZm9ybSBtYXQ0IGJ1bXBNYXRyaXg7XG4jZW5kaWZc
biNpZmRlZiBQT0lOVFNJWkVcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xuI2VuZGlmXG5cbiNp
ZmRlZiBSRUZMRUNUSU9OXG51bmlmb3JtIHZlYzIgdlJlZmxlY3Rpb25JbmZvcztcbnVuaWZvcm0g
bWF0NCByZWZsZWN0aW9uTWF0cml4O1xuI2VuZGlmXG5cbiNpZmRlZiBDTEVBUkNPQVRcbiNpZmRl
ZiBDTEVBUkNPQVRfVEVYVFVSRVxudW5pZm9ybSB2ZWMyIHZDbGVhckNvYXRJbmZvcztcbnVuaWZv
cm0gbWF0NCBjbGVhckNvYXRNYXRyaXg7XG4jZW5kaWZcbiNpZmRlZiBDTEVBUkNPQVRfQlVNUFxu
dW5pZm9ybSB2ZWMyIHZDbGVhckNvYXRCdW1wSW5mb3M7XG51bmlmb3JtIG1hdDQgY2xlYXJDb2F0
QnVtcE1hdHJpeDtcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVF9USU5UX1RFWFRVUkVcbnVuaWZv
cm0gdmVjMiB2Q2xlYXJDb2F0VGludEluZm9zO1xudW5pZm9ybSBtYXQ0IGNsZWFyQ29hdFRpbnRN
YXRyaXg7XG4jZW5kaWZcbiNlbmRpZlxuXG4jaWZkZWYgQU5JU09UUk9QSUNcbiNpZmRlZiBBTklT
T1RST1BJQ19URVhUVVJFXG51bmlmb3JtIHZlYzIgdkFuaXNvdHJvcHlJbmZvcztcbnVuaWZvcm0g
bWF0NCBhbmlzb3Ryb3B5TWF0cml4O1xuI2VuZGlmXG4jZW5kaWZcblxuI2lmZGVmIFNIRUVOXG4j
aWZkZWYgU0hFRU5fVEVYVFVSRVxudW5pZm9ybSB2ZWMyIHZTaGVlbkluZm9zO1xudW5pZm9ybSBt
YXQ0IHNoZWVuTWF0cml4O1xuI2VuZGlmXG4jZW5kaWZcblxuI2lmZGVmIFNVQlNVUkZBQ0VcbiNp
ZmRlZiBTU19SRUZSQUNUSU9OXG51bmlmb3JtIHZlYzQgdlJlZnJhY3Rpb25JbmZvcztcbnVuaWZv
cm0gbWF0NCByZWZyYWN0aW9uTWF0cml4O1xuI2VuZGlmXG4jaWZkZWYgU1NfVEhJQ0tORVNTQU5E
TUFTS19URVhUVVJFXG51bmlmb3JtIHZlYzIgdlRoaWNrbmVzc0luZm9zO1xudW5pZm9ybSBtYXQ0
IHRoaWNrbmVzc01hdHJpeDs7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIE5PUk1BTFxuI2lmIGRl
ZmluZWQoVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05NQVApICYmIGRlZmluZWQoVVNFU1BIRVJJ
Q0FMSU5WRVJURVgpXG4jaWZkZWYgVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05NQVBcbiNpZmRl
ZiBTUEhFUklDQUxfSEFSTU9OSUNTXG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbEwwMDtcbnVuaWZv
cm0gdmVjMyB2U3BoZXJpY2FsTDFfMTtcbnVuaWZvcm0gdmVjMyB2U3BoZXJpY2FsTDEwO1xudW5p
Zm9ybSB2ZWMzIHZTcGhlcmljYWxMMTE7XG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbEwyXzI7XG51
bmlmb3JtIHZlYzMgdlNwaGVyaWNhbEwyXzE7XG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbEwyMDtc
bnVuaWZvcm0gdmVjMyB2U3BoZXJpY2FsTDIxO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxMMjI7
XG4jZWxzZVxudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxYO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmlj
YWxZO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxaO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxY
WF9aWjtcbnVuaWZvcm0gdmVjMyB2U3BoZXJpY2FsWVlfWlo7XG51bmlmb3JtIHZlYzMgdlNwaGVy
aWNhbFpaO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxYWTtcbnVuaWZvcm0gdmVjMyB2U3BoZXJp
Y2FsWVo7XG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbFpYO1xuI2VuZGlmXG4jZW5kaWZcbiNlbmRp
ZlxuI2VuZGlmXG4iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiog
QGhpZGRlbiAqLwordmFyIHBiclZlcnRleERlY2xhcmF0aW9uID0geyBuYW1lOiBuYW1lLCBzaGFk
ZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJ
bmNsdWRlL3BvaW50Q2xvdWRWZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJz
SW5jbHVkZS9wb2ludENsb3VkVmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
cG9pbnRDbG91ZFZlcnRleCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJw
b2ludENsb3VkVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBwb2ludENsb3VkVmVydGV4OyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJp
YWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3Bv
aW50Q2xvdWRWZXJ0ZXgnOwordmFyIHNoYWRlciA9ICIjaWZkZWYgUE9JTlRTSVpFXG5nbF9Qb2lu
dFNpemU9cG9pbnRTaXplO1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0g
c2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBwb2ludENsb3VkVmVydGV4ID0geyBuYW1lOiBu
YW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL3JlZmxlY3Rpb25GdW5jdGlvbi50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvcmVmbGVjdGlvbkZ1bmN0aW9uLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiByZWZsZWN0aW9uRnVuY3Rpb24gKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAicmVmbGVjdGlvbkZ1bmN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVy
biByZWZsZWN0aW9uRnVuY3Rpb247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3Qu
dHMiKTsKKwordmFyIG5hbWUgPSAncmVmbGVjdGlvbkZ1bmN0aW9uJzsKK3ZhciBzaGFkZXIgPSAi
dmVjMyBwYXJhbGxheENvcnJlY3ROb3JtYWwoIHZlYzMgdmVydGV4UG9zLHZlYzMgb3JpZ1ZlYyx2
ZWMzIGN1YmVTaXplLHZlYzMgY3ViZVBvcyApIHtcblxudmVjMyBpbnZPcmlnVmVjPXZlYzMoMS4w
LDEuMCwxLjApL29yaWdWZWM7XG52ZWMzIGhhbGZTaXplPWN1YmVTaXplKjAuNTtcbnZlYzMgaW50
ZXJzZWNBdE1heFBsYW5lPShjdWJlUG9zK2hhbGZTaXplLXZlcnRleFBvcykqaW52T3JpZ1ZlYztc
bnZlYzMgaW50ZXJzZWNBdE1pblBsYW5lPShjdWJlUG9zLWhhbGZTaXplLXZlcnRleFBvcykqaW52
T3JpZ1ZlYztcblxudmVjMyBsYXJnZXN0SW50ZXJzZWM9bWF4KGludGVyc2VjQXRNYXhQbGFuZSxp
bnRlcnNlY0F0TWluUGxhbmUpO1xuXG5mbG9hdCBkaXN0YW5jZT1taW4obWluKGxhcmdlc3RJbnRl
cnNlYy54LGxhcmdlc3RJbnRlcnNlYy55KSxsYXJnZXN0SW50ZXJzZWMueik7XG5cbnZlYzMgaW50
ZXJzZWN0UG9zaXRpb25XUz12ZXJ0ZXhQb3Mrb3JpZ1ZlYypkaXN0YW5jZTtcblxucmV0dXJuIGlu
dGVyc2VjdFBvc2l0aW9uV1MtY3ViZVBvcztcbn1cbnZlYzMgY29tcHV0ZUZpeGVkRXF1aXJlY3Rh
bmd1bGFyQ29vcmRzKHZlYzQgd29ybGRQb3MsdmVjMyB3b3JsZE5vcm1hbCx2ZWMzIGRpcmVjdGlv
bilcbntcbmZsb2F0IGxvbj1hdGFuKGRpcmVjdGlvbi56LGRpcmVjdGlvbi54KTtcbmZsb2F0IGxh
dD1hY29zKGRpcmVjdGlvbi55KTtcbnZlYzIgc3BoZXJlQ29vcmRzPXZlYzIobG9uLGxhdCkqUkVD
SVBST0NBTF9QSTIqMi4wO1xuZmxvYXQgcz1zcGhlcmVDb29yZHMueCowLjUrMC41O1xuZmxvYXQg
dD1zcGhlcmVDb29yZHMueTtcbnJldHVybiB2ZWMzKHMsdCwwKTtcbn1cbnZlYzMgY29tcHV0ZU1p
cnJvcmVkRml4ZWRFcXVpcmVjdGFuZ3VsYXJDb29yZHModmVjNCB3b3JsZFBvcyx2ZWMzIHdvcmxk
Tm9ybWFsLHZlYzMgZGlyZWN0aW9uKVxue1xuZmxvYXQgbG9uPWF0YW4oZGlyZWN0aW9uLnosZGly
ZWN0aW9uLngpO1xuZmxvYXQgbGF0PWFjb3MoZGlyZWN0aW9uLnkpO1xudmVjMiBzcGhlcmVDb29y
ZHM9dmVjMihsb24sbGF0KSpSRUNJUFJPQ0FMX1BJMioyLjA7XG5mbG9hdCBzPXNwaGVyZUNvb3Jk
cy54KjAuNSswLjU7XG5mbG9hdCB0PXNwaGVyZUNvb3Jkcy55O1xucmV0dXJuIHZlYzMoMS4wLXMs
dCwwKTtcbn1cbnZlYzMgY29tcHV0ZUVxdWlyZWN0YW5ndWxhckNvb3Jkcyh2ZWM0IHdvcmxkUG9z
LHZlYzMgd29ybGROb3JtYWwsdmVjMyBleWVQb3NpdGlvbixtYXQ0IHJlZmxlY3Rpb25NYXRyaXgp
XG57XG52ZWMzIGNhbWVyYVRvVmVydGV4PW5vcm1hbGl6ZSh3b3JsZFBvcy54eXotZXllUG9zaXRp
b24pO1xudmVjMyByPW5vcm1hbGl6ZShyZWZsZWN0KGNhbWVyYVRvVmVydGV4LHdvcmxkTm9ybWFs
KSk7XG5yPXZlYzMocmVmbGVjdGlvbk1hdHJpeCp2ZWM0KHIsMCkpO1xuZmxvYXQgbG9uPWF0YW4o
ci56LHIueCk7XG5mbG9hdCBsYXQ9YWNvcyhyLnkpO1xudmVjMiBzcGhlcmVDb29yZHM9dmVjMihs
b24sbGF0KSpSRUNJUFJPQ0FMX1BJMioyLjA7XG5mbG9hdCBzPXNwaGVyZUNvb3Jkcy54KjAuNSsw
LjU7XG5mbG9hdCB0PXNwaGVyZUNvb3Jkcy55O1xucmV0dXJuIHZlYzMocyx0LDApO1xufVxudmVj
MyBjb21wdXRlU3BoZXJpY2FsQ29vcmRzKHZlYzQgd29ybGRQb3MsdmVjMyB3b3JsZE5vcm1hbCxt
YXQ0IHZpZXcsbWF0NCByZWZsZWN0aW9uTWF0cml4KVxue1xudmVjMyB2aWV3RGlyPW5vcm1hbGl6
ZSh2ZWMzKHZpZXcqd29ybGRQb3MpKTtcbnZlYzMgdmlld05vcm1hbD1ub3JtYWxpemUodmVjMyh2
aWV3KnZlYzQod29ybGROb3JtYWwsMC4wKSkpO1xudmVjMyByPXJlZmxlY3Qodmlld0Rpcix2aWV3
Tm9ybWFsKTtcbnI9dmVjMyhyZWZsZWN0aW9uTWF0cml4KnZlYzQociwwKSk7XG5yLno9ci56LTEu
MDtcbmZsb2F0IG09Mi4wKmxlbmd0aChyKTtcbnJldHVybiB2ZWMzKHIueC9tKzAuNSwxLjAtci55
L20tMC41LDApO1xufVxudmVjMyBjb21wdXRlUGxhbmFyQ29vcmRzKHZlYzQgd29ybGRQb3MsdmVj
MyB3b3JsZE5vcm1hbCx2ZWMzIGV5ZVBvc2l0aW9uLG1hdDQgcmVmbGVjdGlvbk1hdHJpeClcbntc
bnZlYzMgdmlld0Rpcj13b3JsZFBvcy54eXotZXllUG9zaXRpb247XG52ZWMzIGNvb3Jkcz1ub3Jt
YWxpemUocmVmbGVjdCh2aWV3RGlyLHdvcmxkTm9ybWFsKSk7XG5yZXR1cm4gdmVjMyhyZWZsZWN0
aW9uTWF0cml4KnZlYzQoY29vcmRzLDEpKTtcbn1cbnZlYzMgY29tcHV0ZUN1YmljQ29vcmRzKHZl
YzQgd29ybGRQb3MsdmVjMyB3b3JsZE5vcm1hbCx2ZWMzIGV5ZVBvc2l0aW9uLG1hdDQgcmVmbGVj
dGlvbk1hdHJpeClcbntcbnZlYzMgdmlld0Rpcj1ub3JtYWxpemUod29ybGRQb3MueHl6LWV5ZVBv
c2l0aW9uKTtcblxudmVjMyBjb29yZHM9cmVmbGVjdCh2aWV3RGlyLHdvcmxkTm9ybWFsKTtcbmNv
b3Jkcz12ZWMzKHJlZmxlY3Rpb25NYXRyaXgqdmVjNChjb29yZHMsMCkpO1xuI2lmZGVmIElOVkVS
VENVQklDTUFQXG5jb29yZHMueSo9LTEuMDtcbiNlbmRpZlxucmV0dXJuIGNvb3Jkcztcbn1cbnZl
YzMgY29tcHV0ZUN1YmljTG9jYWxDb29yZHModmVjNCB3b3JsZFBvcyx2ZWMzIHdvcmxkTm9ybWFs
LHZlYzMgZXllUG9zaXRpb24sbWF0NCByZWZsZWN0aW9uTWF0cml4LHZlYzMgcmVmbGVjdGlvblNp
emUsdmVjMyByZWZsZWN0aW9uUG9zaXRpb24pXG57XG52ZWMzIHZpZXdEaXI9bm9ybWFsaXplKHdv
cmxkUG9zLnh5ei1leWVQb3NpdGlvbik7XG5cbnZlYzMgY29vcmRzPXJlZmxlY3Qodmlld0Rpcix3
b3JsZE5vcm1hbCk7XG5jb29yZHM9cGFyYWxsYXhDb3JyZWN0Tm9ybWFsKHdvcmxkUG9zLnh5eixj
b29yZHMscmVmbGVjdGlvblNpemUscmVmbGVjdGlvblBvc2l0aW9uKTtcbmNvb3Jkcz12ZWMzKHJl
ZmxlY3Rpb25NYXRyaXgqdmVjNChjb29yZHMsMCkpO1xuI2lmZGVmIElOVkVSVENVQklDTUFQXG5j
b29yZHMueSo9LTEuMDtcbiNlbmRpZlxucmV0dXJuIGNvb3Jkcztcbn1cbnZlYzMgY29tcHV0ZVBy
b2plY3Rpb25Db29yZHModmVjNCB3b3JsZFBvcyxtYXQ0IHZpZXcsbWF0NCByZWZsZWN0aW9uTWF0
cml4KVxue1xucmV0dXJuIHZlYzMocmVmbGVjdGlvbk1hdHJpeCoodmlldyp3b3JsZFBvcykpO1xu
fVxudmVjMyBjb21wdXRlU2t5Qm94Q29vcmRzKHZlYzMgcG9zaXRpb25XLG1hdDQgcmVmbGVjdGlv
bk1hdHJpeClcbntcbnJldHVybiB2ZWMzKHJlZmxlY3Rpb25NYXRyaXgqdmVjNChwb3NpdGlvblcs
MCkpO1xufVxuI2lmZGVmIFJFRkxFQ1RJT05cbnZlYzMgY29tcHV0ZVJlZmxlY3Rpb25Db29yZHMo
dmVjNCB3b3JsZFBvcyx2ZWMzIHdvcmxkTm9ybWFsKVxue1xuI2lmZGVmIFJFRkxFQ1RJT05NQVBf
TUlSUk9SRURFUVVJUkVDVEFOR1VMQVJfRklYRURcbnZlYzMgZGlyZWN0aW9uPW5vcm1hbGl6ZSh2
RGlyZWN0aW9uVyk7XG5yZXR1cm4gY29tcHV0ZU1pcnJvcmVkRml4ZWRFcXVpcmVjdGFuZ3VsYXJD
b29yZHMod29ybGRQb3Msd29ybGROb3JtYWwsZGlyZWN0aW9uKTtcbiNlbmRpZlxuI2lmZGVmIFJF
RkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSX0ZJWEVEXG52ZWMzIGRpcmVjdGlvbj1ub3JtYWxp
emUodkRpcmVjdGlvblcpO1xucmV0dXJuIGNvbXB1dGVGaXhlZEVxdWlyZWN0YW5ndWxhckNvb3Jk
cyh3b3JsZFBvcyx3b3JsZE5vcm1hbCxkaXJlY3Rpb24pO1xuI2VuZGlmXG4jaWZkZWYgUkVGTEVD
VElPTk1BUF9FUVVJUkVDVEFOR1VMQVJcbnJldHVybiBjb21wdXRlRXF1aXJlY3Rhbmd1bGFyQ29v
cmRzKHdvcmxkUG9zLHdvcmxkTm9ybWFsLHZFeWVQb3NpdGlvbi54eXoscmVmbGVjdGlvbk1hdHJp
eCk7XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9OTUFQX1NQSEVSSUNBTFxucmV0dXJuIGNvbXB1
dGVTcGhlcmljYWxDb29yZHMod29ybGRQb3Msd29ybGROb3JtYWwsdmlldyxyZWZsZWN0aW9uTWF0
cml4KTtcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfUExBTkFSXG5yZXR1cm4gY29tcHV0
ZVBsYW5hckNvb3Jkcyh3b3JsZFBvcyx3b3JsZE5vcm1hbCx2RXllUG9zaXRpb24ueHl6LHJlZmxl
Y3Rpb25NYXRyaXgpO1xuI2VuZGlmXG4jaWZkZWYgUkVGTEVDVElPTk1BUF9DVUJJQ1xuI2lmZGVm
IFVTRV9MT0NBTF9SRUZMRUNUSU9OTUFQX0NVQklDXG5yZXR1cm4gY29tcHV0ZUN1YmljTG9jYWxD
b29yZHMod29ybGRQb3Msd29ybGROb3JtYWwsdkV5ZVBvc2l0aW9uLnh5eixyZWZsZWN0aW9uTWF0
cml4LHZSZWZsZWN0aW9uU2l6ZSx2UmVmbGVjdGlvblBvc2l0aW9uKTtcbiNlbHNlXG5yZXR1cm4g
Y29tcHV0ZUN1YmljQ29vcmRzKHdvcmxkUG9zLHdvcmxkTm9ybWFsLHZFeWVQb3NpdGlvbi54eXos
cmVmbGVjdGlvbk1hdHJpeCk7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJT05NQVBf
UFJPSkVDVElPTlxucmV0dXJuIGNvbXB1dGVQcm9qZWN0aW9uQ29vcmRzKHdvcmxkUG9zLHZpZXcs
cmVmbGVjdGlvbk1hdHJpeCk7XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9OTUFQX1NLWUJPWFxu
cmV0dXJuIGNvbXB1dGVTa3lCb3hDb29yZHModlBvc2l0aW9uVVZXLHJlZmxlY3Rpb25NYXRyaXgp
O1xuI2VuZGlmXG4jaWZkZWYgUkVGTEVDVElPTk1BUF9FWFBMSUNJVFxucmV0dXJuIHZlYzMoMCww
LDApO1xuI2VuZGlmXG59XG4jZW5kaWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBz
aGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHJlZmxlY3Rpb25GdW5jdGlvbiA9IHsgbmFtZTog
bmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVy
cy9TaGFkZXJzSW5jbHVkZS9zaGFkb3dzRnJhZ21lbnRGdW5jdGlvbnMudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3NoYWRvd3NGcmFnbWVudEZ1bmN0aW9u
cy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogc2hhZG93c0ZyYWdtZW50
RnVuY3Rpb25zICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNoYWRvd3NG
cmFnbWVudEZ1bmN0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2hhZG93c0ZyYWdtZW50RnVu
Y3Rpb25zOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBu
YW1lID0gJ3NoYWRvd3NGcmFnbWVudEZ1bmN0aW9ucyc7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBT
SEFET1dTXG4jaWZuZGVmIFNIQURPV0ZMT0FUXG5cbmZsb2F0IHVucGFjayh2ZWM0IGNvbG9yKVxu
e1xuY29uc3QgdmVjNCBiaXRfc2hpZnQ9dmVjNCgxLjAvKDI1NS4wKjI1NS4wKjI1NS4wKSwxLjAv
KDI1NS4wKjI1NS4wKSwxLjAvMjU1LjAsMS4wKTtcbnJldHVybiBkb3QoY29sb3IsYml0X3NoaWZ0
KTtcbn1cbiNlbmRpZlxuZmxvYXQgY29tcHV0ZUZhbGxPZmYoZmxvYXQgdmFsdWUsdmVjMiBjbGlw
U3BhY2UsZmxvYXQgZnJ1c3R1bUVkZ2VGYWxsb2ZmKVxue1xuZmxvYXQgbWFzaz1zbW9vdGhzdGVw
KDEuMC1mcnVzdHVtRWRnZUZhbGxvZmYsMS4wLGNsYW1wKGRvdChjbGlwU3BhY2UsY2xpcFNwYWNl
KSwwLiwxLikpO1xucmV0dXJuIG1peCh2YWx1ZSwxLjAsbWFzayk7XG59XG5mbG9hdCBjb21wdXRl
U2hhZG93Q3ViZSh2ZWMzIGxpZ2h0UG9zaXRpb24sc2FtcGxlckN1YmUgc2hhZG93U2FtcGxlcixm
bG9hdCBkYXJrbmVzcyx2ZWMyIGRlcHRoVmFsdWVzKVxue1xudmVjMyBkaXJlY3Rpb25Ub0xpZ2h0
PXZQb3NpdGlvblctbGlnaHRQb3NpdGlvbjtcbmZsb2F0IGRlcHRoPWxlbmd0aChkaXJlY3Rpb25U
b0xpZ2h0KTtcbmRlcHRoPShkZXB0aCtkZXB0aFZhbHVlcy54KS8oZGVwdGhWYWx1ZXMueSk7XG5k
ZXB0aD1jbGFtcChkZXB0aCwwLiwxLjApO1xuZGlyZWN0aW9uVG9MaWdodD1ub3JtYWxpemUoZGly
ZWN0aW9uVG9MaWdodCk7XG5kaXJlY3Rpb25Ub0xpZ2h0Lnk9LWRpcmVjdGlvblRvTGlnaHQueTtc
biNpZm5kZWYgU0hBRE9XRkxPQVRcbmZsb2F0IHNoYWRvdz11bnBhY2sodGV4dHVyZUN1YmUoc2hh
ZG93U2FtcGxlcixkaXJlY3Rpb25Ub0xpZ2h0KSk7XG4jZWxzZVxuZmxvYXQgc2hhZG93PXRleHR1
cmVDdWJlKHNoYWRvd1NhbXBsZXIsZGlyZWN0aW9uVG9MaWdodCkueDtcbiNlbmRpZlxuaWYgKGRl
cHRoPnNoYWRvdylcbntcbnJldHVybiBkYXJrbmVzcztcbn1cbnJldHVybiAxLjA7XG59XG5mbG9h
dCBjb21wdXRlU2hhZG93V2l0aFBvaXNzb25TYW1wbGluZ0N1YmUodmVjMyBsaWdodFBvc2l0aW9u
LHNhbXBsZXJDdWJlIHNoYWRvd1NhbXBsZXIsZmxvYXQgbWFwU2l6ZSxmbG9hdCBkYXJrbmVzcyx2
ZWMyIGRlcHRoVmFsdWVzKVxue1xudmVjMyBkaXJlY3Rpb25Ub0xpZ2h0PXZQb3NpdGlvblctbGln
aHRQb3NpdGlvbjtcbmZsb2F0IGRlcHRoPWxlbmd0aChkaXJlY3Rpb25Ub0xpZ2h0KTtcbmRlcHRo
PShkZXB0aCtkZXB0aFZhbHVlcy54KS8oZGVwdGhWYWx1ZXMueSk7XG5kZXB0aD1jbGFtcChkZXB0
aCwwLiwxLjApO1xuZGlyZWN0aW9uVG9MaWdodD1ub3JtYWxpemUoZGlyZWN0aW9uVG9MaWdodCk7
XG5kaXJlY3Rpb25Ub0xpZ2h0Lnk9LWRpcmVjdGlvblRvTGlnaHQueTtcbmZsb2F0IHZpc2liaWxp
dHk9MS47XG52ZWMzIHBvaXNzb25EaXNrWzRdO1xucG9pc3NvbkRpc2tbMF09dmVjMygtMS4wLDEu
MCwtMS4wKTtcbnBvaXNzb25EaXNrWzFdPXZlYzMoMS4wLC0xLjAsLTEuMCk7XG5wb2lzc29uRGlz
a1syXT12ZWMzKC0xLjAsLTEuMCwtMS4wKTtcbnBvaXNzb25EaXNrWzNdPXZlYzMoMS4wLC0xLjAs
MS4wKTtcblxuI2lmbmRlZiBTSEFET1dGTE9BVFxuaWYgKHVucGFjayh0ZXh0dXJlQ3ViZShzaGFk
b3dTYW1wbGVyLGRpcmVjdGlvblRvTGlnaHQrcG9pc3NvbkRpc2tbMF0qbWFwU2l6ZSkpPGRlcHRo
KSB2aXNpYmlsaXR5LT0wLjI1O1xuaWYgKHVucGFjayh0ZXh0dXJlQ3ViZShzaGFkb3dTYW1wbGVy
LGRpcmVjdGlvblRvTGlnaHQrcG9pc3NvbkRpc2tbMV0qbWFwU2l6ZSkpPGRlcHRoKSB2aXNpYmls
aXR5LT0wLjI1O1xuaWYgKHVucGFjayh0ZXh0dXJlQ3ViZShzaGFkb3dTYW1wbGVyLGRpcmVjdGlv
blRvTGlnaHQrcG9pc3NvbkRpc2tbMl0qbWFwU2l6ZSkpPGRlcHRoKSB2aXNpYmlsaXR5LT0wLjI1
O1xuaWYgKHVucGFjayh0ZXh0dXJlQ3ViZShzaGFkb3dTYW1wbGVyLGRpcmVjdGlvblRvTGlnaHQr
cG9pc3NvbkRpc2tbM10qbWFwU2l6ZSkpPGRlcHRoKSB2aXNpYmlsaXR5LT0wLjI1O1xuI2Vsc2Vc
bmlmICh0ZXh0dXJlQ3ViZShzaGFkb3dTYW1wbGVyLGRpcmVjdGlvblRvTGlnaHQrcG9pc3NvbkRp
c2tbMF0qbWFwU2l6ZSkueDxkZXB0aCkgdmlzaWJpbGl0eS09MC4yNTtcbmlmICh0ZXh0dXJlQ3Vi
ZShzaGFkb3dTYW1wbGVyLGRpcmVjdGlvblRvTGlnaHQrcG9pc3NvbkRpc2tbMV0qbWFwU2l6ZSku
eDxkZXB0aCkgdmlzaWJpbGl0eS09MC4yNTtcbmlmICh0ZXh0dXJlQ3ViZShzaGFkb3dTYW1wbGVy
LGRpcmVjdGlvblRvTGlnaHQrcG9pc3NvbkRpc2tbMl0qbWFwU2l6ZSkueDxkZXB0aCkgdmlzaWJp
bGl0eS09MC4yNTtcbmlmICh0ZXh0dXJlQ3ViZShzaGFkb3dTYW1wbGVyLGRpcmVjdGlvblRvTGln
aHQrcG9pc3NvbkRpc2tbM10qbWFwU2l6ZSkueDxkZXB0aCkgdmlzaWJpbGl0eS09MC4yNTtcbiNl
bmRpZlxucmV0dXJuIG1pbigxLjAsdmlzaWJpbGl0eStkYXJrbmVzcyk7XG59XG5mbG9hdCBjb21w
dXRlU2hhZG93V2l0aEVTTUN1YmUodmVjMyBsaWdodFBvc2l0aW9uLHNhbXBsZXJDdWJlIHNoYWRv
d1NhbXBsZXIsZmxvYXQgZGFya25lc3MsZmxvYXQgZGVwdGhTY2FsZSx2ZWMyIGRlcHRoVmFsdWVz
KVxue1xudmVjMyBkaXJlY3Rpb25Ub0xpZ2h0PXZQb3NpdGlvblctbGlnaHRQb3NpdGlvbjtcbmZs
b2F0IGRlcHRoPWxlbmd0aChkaXJlY3Rpb25Ub0xpZ2h0KTtcbmRlcHRoPShkZXB0aCtkZXB0aFZh
bHVlcy54KS8oZGVwdGhWYWx1ZXMueSk7XG5mbG9hdCBzaGFkb3dQaXhlbERlcHRoPWNsYW1wKGRl
cHRoLDAuLDEuMCk7XG5kaXJlY3Rpb25Ub0xpZ2h0PW5vcm1hbGl6ZShkaXJlY3Rpb25Ub0xpZ2h0
KTtcbmRpcmVjdGlvblRvTGlnaHQueT0tZGlyZWN0aW9uVG9MaWdodC55O1xuI2lmbmRlZiBTSEFE
T1dGTE9BVFxuZmxvYXQgc2hhZG93TWFwU2FtcGxlPXVucGFjayh0ZXh0dXJlQ3ViZShzaGFkb3dT
YW1wbGVyLGRpcmVjdGlvblRvTGlnaHQpKTtcbiNlbHNlXG5mbG9hdCBzaGFkb3dNYXBTYW1wbGU9
dGV4dHVyZUN1YmUoc2hhZG93U2FtcGxlcixkaXJlY3Rpb25Ub0xpZ2h0KS54O1xuI2VuZGlmXG5m
bG9hdCBlc209MS4wLWNsYW1wKGV4cChtaW4oODcuLGRlcHRoU2NhbGUqc2hhZG93UGl4ZWxEZXB0
aCkpKnNoYWRvd01hcFNhbXBsZSwwLiwxLi1kYXJrbmVzcyk7XG5yZXR1cm4gZXNtO1xufVxuZmxv
YXQgY29tcHV0ZVNoYWRvd1dpdGhDbG9zZUVTTUN1YmUodmVjMyBsaWdodFBvc2l0aW9uLHNhbXBs
ZXJDdWJlIHNoYWRvd1NhbXBsZXIsZmxvYXQgZGFya25lc3MsZmxvYXQgZGVwdGhTY2FsZSx2ZWMy
IGRlcHRoVmFsdWVzKVxue1xudmVjMyBkaXJlY3Rpb25Ub0xpZ2h0PXZQb3NpdGlvblctbGlnaHRQ
b3NpdGlvbjtcbmZsb2F0IGRlcHRoPWxlbmd0aChkaXJlY3Rpb25Ub0xpZ2h0KTtcbmRlcHRoPShk
ZXB0aCtkZXB0aFZhbHVlcy54KS8oZGVwdGhWYWx1ZXMueSk7XG5mbG9hdCBzaGFkb3dQaXhlbERl
cHRoPWNsYW1wKGRlcHRoLDAuLDEuMCk7XG5kaXJlY3Rpb25Ub0xpZ2h0PW5vcm1hbGl6ZShkaXJl
Y3Rpb25Ub0xpZ2h0KTtcbmRpcmVjdGlvblRvTGlnaHQueT0tZGlyZWN0aW9uVG9MaWdodC55O1xu
I2lmbmRlZiBTSEFET1dGTE9BVFxuZmxvYXQgc2hhZG93TWFwU2FtcGxlPXVucGFjayh0ZXh0dXJl
Q3ViZShzaGFkb3dTYW1wbGVyLGRpcmVjdGlvblRvTGlnaHQpKTtcbiNlbHNlXG5mbG9hdCBzaGFk
b3dNYXBTYW1wbGU9dGV4dHVyZUN1YmUoc2hhZG93U2FtcGxlcixkaXJlY3Rpb25Ub0xpZ2h0KS54
O1xuI2VuZGlmXG5mbG9hdCBlc209Y2xhbXAoZXhwKG1pbig4Ny4sLWRlcHRoU2NhbGUqKHNoYWRv
d1BpeGVsRGVwdGgtc2hhZG93TWFwU2FtcGxlKSkpLGRhcmtuZXNzLDEuKTtcbnJldHVybiBlc207
XG59XG5mbG9hdCBjb21wdXRlU2hhZG93KHZlYzQgdlBvc2l0aW9uRnJvbUxpZ2h0LGZsb2F0IGRl
cHRoTWV0cmljLHNhbXBsZXIyRCBzaGFkb3dTYW1wbGVyLGZsb2F0IGRhcmtuZXNzLGZsb2F0IGZy
dXN0dW1FZGdlRmFsbG9mZilcbntcbnZlYzMgY2xpcFNwYWNlPXZQb3NpdGlvbkZyb21MaWdodC54
eXovdlBvc2l0aW9uRnJvbUxpZ2h0Lnc7XG52ZWMyIHV2PTAuNSpjbGlwU3BhY2UueHkrdmVjMigw
LjUpO1xuaWYgKHV2Lng8MC4gfHwgdXYueD4xLjAgfHwgdXYueTwwLiB8fCB1di55PjEuMClcbntc
bnJldHVybiAxLjA7XG59XG5mbG9hdCBzaGFkb3dQaXhlbERlcHRoPWNsYW1wKGRlcHRoTWV0cmlj
LDAuLDEuMCk7XG4jaWZuZGVmIFNIQURPV0ZMT0FUXG5mbG9hdCBzaGFkb3c9dW5wYWNrKHRleHR1
cmUyRChzaGFkb3dTYW1wbGVyLHV2KSk7XG4jZWxzZVxuZmxvYXQgc2hhZG93PXRleHR1cmUyRChz
aGFkb3dTYW1wbGVyLHV2KS54O1xuI2VuZGlmXG5pZiAoc2hhZG93UGl4ZWxEZXB0aD5zaGFkb3cp
XG57XG5yZXR1cm4gY29tcHV0ZUZhbGxPZmYoZGFya25lc3MsY2xpcFNwYWNlLnh5LGZydXN0dW1F
ZGdlRmFsbG9mZik7XG59XG5yZXR1cm4gMS47XG59XG5mbG9hdCBjb21wdXRlU2hhZG93V2l0aFBv
aXNzb25TYW1wbGluZyh2ZWM0IHZQb3NpdGlvbkZyb21MaWdodCxmbG9hdCBkZXB0aE1ldHJpYyxz
YW1wbGVyMkQgc2hhZG93U2FtcGxlcixmbG9hdCBtYXBTaXplLGZsb2F0IGRhcmtuZXNzLGZsb2F0
IGZydXN0dW1FZGdlRmFsbG9mZilcbntcbnZlYzMgY2xpcFNwYWNlPXZQb3NpdGlvbkZyb21MaWdo
dC54eXovdlBvc2l0aW9uRnJvbUxpZ2h0Lnc7XG52ZWMyIHV2PTAuNSpjbGlwU3BhY2UueHkrdmVj
MigwLjUpO1xuaWYgKHV2Lng8MC4gfHwgdXYueD4xLjAgfHwgdXYueTwwLiB8fCB1di55PjEuMClc
bntcbnJldHVybiAxLjA7XG59XG5mbG9hdCBzaGFkb3dQaXhlbERlcHRoPWNsYW1wKGRlcHRoTWV0
cmljLDAuLDEuMCk7XG5mbG9hdCB2aXNpYmlsaXR5PTEuO1xudmVjMiBwb2lzc29uRGlza1s0XTtc
bnBvaXNzb25EaXNrWzBdPXZlYzIoLTAuOTQyMDE2MjQsLTAuMzk5MDYyMTYpO1xucG9pc3NvbkRp
c2tbMV09dmVjMigwLjk0NTU4NjA5LC0wLjc2ODkwNzI1KTtcbnBvaXNzb25EaXNrWzJdPXZlYzIo
LTAuMDk0MTg0MTAxLC0wLjkyOTM4ODcwKTtcbnBvaXNzb25EaXNrWzNdPXZlYzIoMC4zNDQ5NTkz
OCwwLjI5Mzg3NzYwKTtcblxuI2lmbmRlZiBTSEFET1dGTE9BVFxuaWYgKHVucGFjayh0ZXh0dXJl
MkQoc2hhZG93U2FtcGxlcix1ditwb2lzc29uRGlza1swXSptYXBTaXplKSk8c2hhZG93UGl4ZWxE
ZXB0aCkgdmlzaWJpbGl0eS09MC4yNTtcbmlmICh1bnBhY2sodGV4dHVyZTJEKHNoYWRvd1NhbXBs
ZXIsdXYrcG9pc3NvbkRpc2tbMV0qbWFwU2l6ZSkpPHNoYWRvd1BpeGVsRGVwdGgpIHZpc2liaWxp
dHktPTAuMjU7XG5pZiAodW5wYWNrKHRleHR1cmUyRChzaGFkb3dTYW1wbGVyLHV2K3BvaXNzb25E
aXNrWzJdKm1hcFNpemUpKTxzaGFkb3dQaXhlbERlcHRoKSB2aXNpYmlsaXR5LT0wLjI1O1xuaWYg
KHVucGFjayh0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix1ditwb2lzc29uRGlza1szXSptYXBTaXpl
KSk8c2hhZG93UGl4ZWxEZXB0aCkgdmlzaWJpbGl0eS09MC4yNTtcbiNlbHNlXG5pZiAodGV4dHVy
ZTJEKHNoYWRvd1NhbXBsZXIsdXYrcG9pc3NvbkRpc2tbMF0qbWFwU2l6ZSkueDxzaGFkb3dQaXhl
bERlcHRoKSB2aXNpYmlsaXR5LT0wLjI1O1xuaWYgKHRleHR1cmUyRChzaGFkb3dTYW1wbGVyLHV2
K3BvaXNzb25EaXNrWzFdKm1hcFNpemUpLng8c2hhZG93UGl4ZWxEZXB0aCkgdmlzaWJpbGl0eS09
MC4yNTtcbmlmICh0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix1ditwb2lzc29uRGlza1syXSptYXBT
aXplKS54PHNoYWRvd1BpeGVsRGVwdGgpIHZpc2liaWxpdHktPTAuMjU7XG5pZiAodGV4dHVyZTJE
KHNoYWRvd1NhbXBsZXIsdXYrcG9pc3NvbkRpc2tbM10qbWFwU2l6ZSkueDxzaGFkb3dQaXhlbERl
cHRoKSB2aXNpYmlsaXR5LT0wLjI1O1xuI2VuZGlmXG5yZXR1cm4gY29tcHV0ZUZhbGxPZmYobWlu
KDEuMCx2aXNpYmlsaXR5K2RhcmtuZXNzKSxjbGlwU3BhY2UueHksZnJ1c3R1bUVkZ2VGYWxsb2Zm
KTtcbn1cbmZsb2F0IGNvbXB1dGVTaGFkb3dXaXRoRVNNKHZlYzQgdlBvc2l0aW9uRnJvbUxpZ2h0
LGZsb2F0IGRlcHRoTWV0cmljLHNhbXBsZXIyRCBzaGFkb3dTYW1wbGVyLGZsb2F0IGRhcmtuZXNz
LGZsb2F0IGRlcHRoU2NhbGUsZmxvYXQgZnJ1c3R1bUVkZ2VGYWxsb2ZmKVxue1xudmVjMyBjbGlw
U3BhY2U9dlBvc2l0aW9uRnJvbUxpZ2h0Lnh5ei92UG9zaXRpb25Gcm9tTGlnaHQudztcbnZlYzIg
dXY9MC41KmNsaXBTcGFjZS54eSt2ZWMyKDAuNSk7XG5pZiAodXYueDwwLiB8fCB1di54PjEuMCB8
fCB1di55PDAuIHx8IHV2Lnk+MS4wKVxue1xucmV0dXJuIDEuMDtcbn1cbmZsb2F0IHNoYWRvd1Bp
eGVsRGVwdGg9Y2xhbXAoZGVwdGhNZXRyaWMsMC4sMS4wKTtcbiNpZm5kZWYgU0hBRE9XRkxPQVRc
bmZsb2F0IHNoYWRvd01hcFNhbXBsZT11bnBhY2sodGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIsdXYp
KTtcbiNlbHNlXG5mbG9hdCBzaGFkb3dNYXBTYW1wbGU9dGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIs
dXYpLng7XG4jZW5kaWZcbmZsb2F0IGVzbT0xLjAtY2xhbXAoZXhwKG1pbig4Ny4sZGVwdGhTY2Fs
ZSpzaGFkb3dQaXhlbERlcHRoKSkqc2hhZG93TWFwU2FtcGxlLDAuLDEuLWRhcmtuZXNzKTtcbnJl
dHVybiBjb21wdXRlRmFsbE9mZihlc20sY2xpcFNwYWNlLnh5LGZydXN0dW1FZGdlRmFsbG9mZik7
XG59XG5mbG9hdCBjb21wdXRlU2hhZG93V2l0aENsb3NlRVNNKHZlYzQgdlBvc2l0aW9uRnJvbUxp
Z2h0LGZsb2F0IGRlcHRoTWV0cmljLHNhbXBsZXIyRCBzaGFkb3dTYW1wbGVyLGZsb2F0IGRhcmtu
ZXNzLGZsb2F0IGRlcHRoU2NhbGUsZmxvYXQgZnJ1c3R1bUVkZ2VGYWxsb2ZmKVxue1xudmVjMyBj
bGlwU3BhY2U9dlBvc2l0aW9uRnJvbUxpZ2h0Lnh5ei92UG9zaXRpb25Gcm9tTGlnaHQudztcbnZl
YzIgdXY9MC41KmNsaXBTcGFjZS54eSt2ZWMyKDAuNSk7XG5pZiAodXYueDwwLiB8fCB1di54PjEu
MCB8fCB1di55PDAuIHx8IHV2Lnk+MS4wKVxue1xucmV0dXJuIDEuMDtcbn1cbmZsb2F0IHNoYWRv
d1BpeGVsRGVwdGg9Y2xhbXAoZGVwdGhNZXRyaWMsMC4sMS4wKTtcbiNpZm5kZWYgU0hBRE9XRkxP
QVRcbmZsb2F0IHNoYWRvd01hcFNhbXBsZT11bnBhY2sodGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIs
dXYpKTtcbiNlbHNlXG5mbG9hdCBzaGFkb3dNYXBTYW1wbGU9dGV4dHVyZTJEKHNoYWRvd1NhbXBs
ZXIsdXYpLng7XG4jZW5kaWZcbmZsb2F0IGVzbT1jbGFtcChleHAobWluKDg3LiwtZGVwdGhTY2Fs
ZSooc2hhZG93UGl4ZWxEZXB0aC1zaGFkb3dNYXBTYW1wbGUpKSksZGFya25lc3MsMS4pO1xucmV0
dXJuIGNvbXB1dGVGYWxsT2ZmKGVzbSxjbGlwU3BhY2UueHksZnJ1c3R1bUVkZ2VGYWxsb2ZmKTtc
bn1cbiNpZmRlZiBXRUJHTDJcblxuZmxvYXQgY29tcHV0ZVNoYWRvd1dpdGhQQ0YxKHZlYzQgdlBv
c2l0aW9uRnJvbUxpZ2h0LGZsb2F0IGRlcHRoTWV0cmljLHNhbXBsZXIyRFNoYWRvdyBzaGFkb3dT
YW1wbGVyLGZsb2F0IGRhcmtuZXNzLGZsb2F0IGZydXN0dW1FZGdlRmFsbG9mZilcbntcbmlmIChk
ZXB0aE1ldHJpYz4xLjAgfHwgZGVwdGhNZXRyaWM8MC4wKSB7XG5yZXR1cm4gMS4wO1xufVxudmVj
MyBjbGlwU3BhY2U9dlBvc2l0aW9uRnJvbUxpZ2h0Lnh5ei92UG9zaXRpb25Gcm9tTGlnaHQudztc
bnZlYzMgdXZEZXB0aD12ZWMzKDAuNSpjbGlwU3BhY2UueHl6K3ZlYzMoMC41KSk7XG5mbG9hdCBz
aGFkb3c9dGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIsdXZEZXB0aCk7XG5zaGFkb3c9bWl4KGRhcmtu
ZXNzLDEuLHNoYWRvdyk7XG5yZXR1cm4gY29tcHV0ZUZhbGxPZmYoc2hhZG93LGNsaXBTcGFjZS54
eSxmcnVzdHVtRWRnZUZhbGxvZmYpO1xufVxuXG5cblxuZmxvYXQgY29tcHV0ZVNoYWRvd1dpdGhQ
Q0YzKHZlYzQgdlBvc2l0aW9uRnJvbUxpZ2h0LGZsb2F0IGRlcHRoTWV0cmljLHNhbXBsZXIyRFNo
YWRvdyBzaGFkb3dTYW1wbGVyLHZlYzIgc2hhZG93TWFwU2l6ZUFuZEludmVyc2UsZmxvYXQgZGFy
a25lc3MsZmxvYXQgZnJ1c3R1bUVkZ2VGYWxsb2ZmKVxue1xuaWYgKGRlcHRoTWV0cmljPjEuMCB8
fCBkZXB0aE1ldHJpYzwwLjApIHtcbnJldHVybiAxLjA7XG59XG52ZWMzIGNsaXBTcGFjZT12UG9z
aXRpb25Gcm9tTGlnaHQueHl6L3ZQb3NpdGlvbkZyb21MaWdodC53O1xudmVjMyB1dkRlcHRoPXZl
YzMoMC41KmNsaXBTcGFjZS54eXordmVjMygwLjUpKTtcbnZlYzIgdXY9dXZEZXB0aC54eSpzaGFk
b3dNYXBTaXplQW5kSW52ZXJzZS54O1xudXYrPTAuNTtcbnZlYzIgc3Q9ZnJhY3QodXYpO1xudmVj
MiBiYXNlX3V2PWZsb29yKHV2KS0wLjU7XG5iYXNlX3V2Kj1zaGFkb3dNYXBTaXplQW5kSW52ZXJz
ZS55O1xuXG5cblxuXG52ZWMyIHV2dzA9My4tMi4qc3Q7XG52ZWMyIHV2dzE9MS4rMi4qc3Q7XG52
ZWMyIHU9dmVjMigoMi4tc3QueCkvdXZ3MC54LTEuLHN0LngvdXZ3MS54KzEuKSpzaGFkb3dNYXBT
aXplQW5kSW52ZXJzZS55O1xudmVjMiB2PXZlYzIoKDIuLXN0LnkpL3V2dzAueS0xLixzdC55L3V2
dzEueSsxLikqc2hhZG93TWFwU2l6ZUFuZEludmVyc2UueTtcbmZsb2F0IHNoYWRvdz0wLjtcbnNo
YWRvdys9dXZ3MC54KnV2dzAueSp0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix2ZWMzKGJhc2VfdXYu
eHkrdmVjMih1WzBdLHZbMF0pLHV2RGVwdGgueikpO1xuc2hhZG93Kz11dncxLngqdXZ3MC55KnRl
eHR1cmUyRChzaGFkb3dTYW1wbGVyLHZlYzMoYmFzZV91di54eSt2ZWMyKHVbMV0sdlswXSksdXZE
ZXB0aC56KSk7XG5zaGFkb3crPXV2dzAueCp1dncxLnkqdGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIs
dmVjMyhiYXNlX3V2Lnh5K3ZlYzIodVswXSx2WzFdKSx1dkRlcHRoLnopKTtcbnNoYWRvdys9dXZ3
MS54KnV2dzEueSp0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix2ZWMzKGJhc2VfdXYueHkrdmVjMih1
WzFdLHZbMV0pLHV2RGVwdGgueikpO1xuc2hhZG93PXNoYWRvdy8xNi47XG5zaGFkb3c9bWl4KGRh
cmtuZXNzLDEuLHNoYWRvdyk7XG5yZXR1cm4gY29tcHV0ZUZhbGxPZmYoc2hhZG93LGNsaXBTcGFj
ZS54eSxmcnVzdHVtRWRnZUZhbGxvZmYpO1xufVxuXG5cblxuZmxvYXQgY29tcHV0ZVNoYWRvd1dp
dGhQQ0Y1KHZlYzQgdlBvc2l0aW9uRnJvbUxpZ2h0LGZsb2F0IGRlcHRoTWV0cmljLHNhbXBsZXIy
RFNoYWRvdyBzaGFkb3dTYW1wbGVyLHZlYzIgc2hhZG93TWFwU2l6ZUFuZEludmVyc2UsZmxvYXQg
ZGFya25lc3MsZmxvYXQgZnJ1c3R1bUVkZ2VGYWxsb2ZmKVxue1xuaWYgKGRlcHRoTWV0cmljPjEu
MCB8fCBkZXB0aE1ldHJpYzwwLjApIHtcbnJldHVybiAxLjA7XG59XG52ZWMzIGNsaXBTcGFjZT12
UG9zaXRpb25Gcm9tTGlnaHQueHl6L3ZQb3NpdGlvbkZyb21MaWdodC53O1xudmVjMyB1dkRlcHRo
PXZlYzMoMC41KmNsaXBTcGFjZS54eXordmVjMygwLjUpKTtcbnZlYzIgdXY9dXZEZXB0aC54eSpz
aGFkb3dNYXBTaXplQW5kSW52ZXJzZS54O1xudXYrPTAuNTtcbnZlYzIgc3Q9ZnJhY3QodXYpO1xu
dmVjMiBiYXNlX3V2PWZsb29yKHV2KS0wLjU7XG5iYXNlX3V2Kj1zaGFkb3dNYXBTaXplQW5kSW52
ZXJzZS55O1xuXG5cbnZlYzIgdXZ3MD00Li0zLipzdDtcbnZlYzIgdXZ3MT12ZWMyKDcuKTtcbnZl
YzIgdXZ3Mj0xLiszLipzdDtcbnZlYzMgdT12ZWMzKCgzLi0yLipzdC54KS91dncwLngtMi4sKDMu
K3N0LngpL3V2dzEueCxzdC54L3V2dzIueCsyLikqc2hhZG93TWFwU2l6ZUFuZEludmVyc2UueTtc
bnZlYzMgdj12ZWMzKCgzLi0yLipzdC55KS91dncwLnktMi4sKDMuK3N0LnkpL3V2dzEueSxzdC55
L3V2dzIueSsyLikqc2hhZG93TWFwU2l6ZUFuZEludmVyc2UueTtcbmZsb2F0IHNoYWRvdz0wLjtc
bnNoYWRvdys9dXZ3MC54KnV2dzAueSp0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix2ZWMzKGJhc2Vf
dXYueHkrdmVjMih1WzBdLHZbMF0pLHV2RGVwdGgueikpO1xuc2hhZG93Kz11dncxLngqdXZ3MC55
KnRleHR1cmUyRChzaGFkb3dTYW1wbGVyLHZlYzMoYmFzZV91di54eSt2ZWMyKHVbMV0sdlswXSks
dXZEZXB0aC56KSk7XG5zaGFkb3crPXV2dzIueCp1dncwLnkqdGV4dHVyZTJEKHNoYWRvd1NhbXBs
ZXIsdmVjMyhiYXNlX3V2Lnh5K3ZlYzIodVsyXSx2WzBdKSx1dkRlcHRoLnopKTtcbnNoYWRvdys9
dXZ3MC54KnV2dzEueSp0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix2ZWMzKGJhc2VfdXYueHkrdmVj
Mih1WzBdLHZbMV0pLHV2RGVwdGgueikpO1xuc2hhZG93Kz11dncxLngqdXZ3MS55KnRleHR1cmUy
RChzaGFkb3dTYW1wbGVyLHZlYzMoYmFzZV91di54eSt2ZWMyKHVbMV0sdlsxXSksdXZEZXB0aC56
KSk7XG5zaGFkb3crPXV2dzIueCp1dncxLnkqdGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIsdmVjMyhi
YXNlX3V2Lnh5K3ZlYzIodVsyXSx2WzFdKSx1dkRlcHRoLnopKTtcbnNoYWRvdys9dXZ3MC54KnV2
dzIueSp0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix2ZWMzKGJhc2VfdXYueHkrdmVjMih1WzBdLHZb
Ml0pLHV2RGVwdGgueikpO1xuc2hhZG93Kz11dncxLngqdXZ3Mi55KnRleHR1cmUyRChzaGFkb3dT
YW1wbGVyLHZlYzMoYmFzZV91di54eSt2ZWMyKHVbMV0sdlsyXSksdXZEZXB0aC56KSk7XG5zaGFk
b3crPXV2dzIueCp1dncyLnkqdGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIsdmVjMyhiYXNlX3V2Lnh5
K3ZlYzIodVsyXSx2WzJdKSx1dkRlcHRoLnopKTtcbnNoYWRvdz1zaGFkb3cvMTQ0LjtcbnNoYWRv
dz1taXgoZGFya25lc3MsMS4sc2hhZG93KTtcbnJldHVybiBjb21wdXRlRmFsbE9mZihzaGFkb3cs
Y2xpcFNwYWNlLnh5LGZydXN0dW1FZGdlRmFsbG9mZik7XG59XG5jb25zdCB2ZWMzIFBvaXNzb25T
YW1wbGVyczMyWzY0XT12ZWMzWzY0XShcbnZlYzMoMC4wNjQwNzAxMywwLjA1NDA5OTI3LDAuKSxc
bnZlYzMoMC43MzY2NTc3LDAuNTc4OTM5NCwwLiksXG52ZWMzKC0wLjYyNzA1NDIsLTAuNTMyMDI3
OCwwLiksXG52ZWMzKC0wLjQwOTYxMDcsMC44NDExMDk1LDAuKSxcbnZlYzMoMC42ODQ5NTY0LC0w
LjQ5OTA4MTgsMC4pLFxudmVjMygtMC44NzQxODEsLTAuMDQ1Nzk3MzUsMC4pLFxudmVjMygwLjk5
ODk5OTgsMC4wMDA5ODgwMDY2LDAuKSxcbnZlYzMoLTAuMDA0OTIwNTc4LC0wLjkxNTE2NDksMC4p
LFxudmVjMygwLjE4MDU3NjMsMC45NzQ3NDgzLDAuKSxcbnZlYzMoLTAuMjEzODQ1MSwwLjI2MzU4
MTgsMC4pLFxudmVjMygwLjEwOTg0NSwwLjM4ODQ3ODUsMC4pLFxudmVjMygwLjA2ODc2NzU1LC0w
LjM1ODEwNzQsMC4pLFxudmVjMygwLjM3NDA3MywtMC43NjYxMjY2LDAuKSxcbnZlYzMoMC4zMDc5
MTMyLC0wLjEyMTY3NjMsMC4pLFxudmVjMygtMC4zNzk0MzM1LC0wLjgyNzE1ODMsMC4pLFxudmVj
MygtMC4yMDM4NzgsLTAuMDc3MTUwMzQsMC4pLFxudmVjMygwLjU5MTI2OTcsMC4xNDY5Nzk5LDAu
KSxcbnZlYzMoLTAuODgwNjksMC4zMDMxNzg0LDAuKSxcbnZlYzMoMC41MDQwMTA4LDAuODI4Mzcy
MiwwLiksXG52ZWMzKC0wLjU4NDQxMjQsMC41NDk0ODc3LDAuKSxcbnZlYzMoMC42MDE3Nzk5LC0w
LjE3MjY2NTQsMC4pLFxudmVjMygtMC41NTU0OTgxLDAuMTU1OTk5NywwLiksXG52ZWMzKC0wLjMw
MTYzNjksLTAuMzkwMDkyOCwwLiksXG52ZWMzKC0wLjU1NTA2MzIsLTAuMTcyMzc2MiwwLiksXG52
ZWMzKDAuOTI1MDI5LDAuMjk5NTA0MSwwLiksXG52ZWMzKC0wLjI0NzMxMzcsMC41NTM4NTA1LDAu
KSxcbnZlYzMoMC45MTgzMDM3LC0wLjI4NjIzOTIsMC4pLFxudmVjMygwLjI0Njk0MjEsMC42NzE4
NzEyLDAuKSxcbnZlYzMoMC4zOTE2Mzk3LC0wLjQzMjgyMDksMC4pLFxudmVjMygtMC4wMzU3Njky
NywtMC42MjIwMDMyLDAuKSxcbnZlYzMoLTAuMDQ2NjEyNTUsMC43OTk1MjAxLDAuKSxcbnZlYzMo
MC40NDAyOTI0LDAuMzY0MDMxMiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4p
LFxudmVjMygwLiwwLiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4pLFxudmVj
MygwLiwwLiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4pLFxudmVjMygwLiww
LiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4pLFxudmVjMygwLiwwLiwwLiks
XG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4pLFxudmVjMygwLiwwLiwwLiksXG52ZWMz
KDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4pLFxudmVjMygwLiwwLiwwLiksXG52ZWMzKDAuLDAu
LDAuKSxcbnZlYzMoMC4sMC4sMC4pLFxudmVjMygwLiwwLiwwLiksXG52ZWMzKDAuLDAuLDAuKSxc
bnZlYzMoMC4sMC4sMC4pLFxudmVjMygwLiwwLiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMo
MC4sMC4sMC4pLFxudmVjMygwLiwwLiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4s
MC4pLFxudmVjMygwLiwwLiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4pXG4p
O1xuY29uc3QgdmVjMyBQb2lzc29uU2FtcGxlcnM2NFs2NF09dmVjM1s2NF0oXG52ZWMzKC0wLjYx
MzM5MiwwLjYxNzQ4MSwwLiksXG52ZWMzKDAuMTcwMDE5LC0wLjA0MDI1NCwwLiksXG52ZWMzKC0w
LjI5OTQxNywwLjc5MTkyNSwwLiksXG52ZWMzKDAuNjQ1NjgwLDAuNDkzMjEwLDAuKSxcbnZlYzMo
LTAuNjUxNzg0LDAuNzE3ODg3LDAuKSxcbnZlYzMoMC40MjEwMDMsMC4wMjcwNzAsMC4pLFxudmVj
MygtMC44MTcxOTQsLTAuMjcxMDk2LDAuKSxcbnZlYzMoLTAuNzA1Mzc0LC0wLjY2ODIwMywwLiks
XG52ZWMzKDAuOTc3MDUwLC0wLjEwODYxNSwwLiksXG52ZWMzKDAuMDYzMzI2LDAuMTQyMzY5LDAu
KSxcbnZlYzMoMC4yMDM1MjgsMC4yMTQzMzEsMC4pLFxudmVjMygtMC42Njc1MzEsMC4zMjYwOTAs
MC4pLFxudmVjMygtMC4wOTg0MjIsLTAuMjk1NzU1LDAuKSxcbnZlYzMoLTAuODg1OTIyLDAuMjE1
MzY5LDAuKSxcbnZlYzMoMC41NjY2MzcsMC42MDUyMTMsMC4pLFxudmVjMygwLjAzOTc2NiwtMC4z
OTYxMDAsMC4pLFxudmVjMygwLjc1MTk0NiwwLjQ1MzM1MiwwLiksXG52ZWMzKDAuMDc4NzA3LC0w
LjcxNTMyMywwLiksXG52ZWMzKC0wLjA3NTgzOCwtMC41MjkzNDQsMC4pLFxudmVjMygwLjcyNDQ3
OSwtMC41ODA3OTgsMC4pLFxudmVjMygwLjIyMjk5OSwtMC4yMTUxMjUsMC4pLFxudmVjMygtMC40
Njc1NzQsLTAuNDA1NDM4LDAuKSxcbnZlYzMoLTAuMjQ4MjY4LC0wLjgxNDc1MywwLiksXG52ZWMz
KDAuMzU0NDExLC0wLjg4NzU3MCwwLiksXG52ZWMzKDAuMTc1ODE3LDAuMzgyMzY2LDAuKSxcbnZl
YzMoMC40ODc0NzIsLTAuMDYzMDgyLDAuKSxcbnZlYzMoLTAuMDg0MDc4LDAuODk4MzEyLDAuKSxc
bnZlYzMoMC40ODg4NzYsLTAuNzgzNDQxLDAuKSxcbnZlYzMoMC40NzAwMTYsMC4yMTc5MzMsMC4p
LFxudmVjMygtMC42OTY4OTAsLTAuNTQ5NzkxLDAuKSxcbnZlYzMoLTAuMTQ5NjkzLDAuNjA1NzYy
LDAuKSxcbnZlYzMoMC4wMzQyMTEsMC45Nzk5ODAsMC4pLFxudmVjMygwLjUwMzA5OCwtMC4zMDg4
NzgsMC4pLFxudmVjMygtMC4wMTYyMDUsLTAuODcyOTIxLDAuKSxcbnZlYzMoMC4zODU3ODQsLTAu
MzkzOTAyLDAuKSxcbnZlYzMoLTAuMTQ2ODg2LC0wLjg1OTI0OSwwLiksXG52ZWMzKDAuNjQzMzYx
LDAuMTY0MDk4LDAuKSxcbnZlYzMoMC42MzQzODgsLTAuMDQ5NDcxLDAuKSxcbnZlYzMoLTAuNjg4
ODk0LDAuMDA3ODQzLDAuKSxcbnZlYzMoMC40NjQwMzQsLTAuMTg4ODE4LDAuKSxcbnZlYzMoLTAu
NDQwODQwLDAuMTM3NDg2LDAuKSxcbnZlYzMoMC4zNjQ0ODMsMC41MTE3MDQsMC4pLFxudmVjMygw
LjAzNDAyOCwwLjMyNTk2OCwwLiksXG52ZWMzKDAuMDk5MDk0LC0wLjMwODAyMywwLiksXG52ZWMz
KDAuNjkzOTYwLC0wLjM2NjI1MywwLiksXG52ZWMzKDAuNjc4ODg0LC0wLjIwNDY4OCwwLiksXG52
ZWMzKDAuMDAxODAxLDAuNzgwMzI4LDAuKSxcbnZlYzMoMC4xNDUxNzcsLTAuODk4OTg0LDAuKSxc
bnZlYzMoMC4wNjI2NTUsLTAuNjExODY2LDAuKSxcbnZlYzMoMC4zMTUyMjYsLTAuNjA0Mjk3LDAu
KSxcbnZlYzMoLTAuNzgwMTQ1LDAuNDg2MjUxLDAuKSxcbnZlYzMoLTAuMzcxODY4LDAuODgyMTM4
LDAuKSxcbnZlYzMoMC4yMDA0NzYsMC40OTQ0MzAsMC4pLFxudmVjMygtMC40OTQ1NTIsLTAuNzEx
MDUxLDAuKSxcbnZlYzMoMC42MTI0NzYsMC43MDUyNTIsMC4pLFxudmVjMygtMC41Nzg4NDUsLTAu
NzY4NzkyLDAuKSxcbnZlYzMoLTAuNzcyNDU0LC0wLjA5MDk3NiwwLiksXG52ZWMzKDAuNTA0NDQw
LDAuMzcyMjk1LDAuKSxcbnZlYzMoMC4xNTU3MzYsMC4wNjUxNTcsMC4pLFxudmVjMygwLjM5MTUy
MiwwLjg0OTYwNSwwLiksXG52ZWMzKC0wLjYyMDEwNiwtMC4zMjgxMDQsMC4pLFxudmVjMygwLjc4
OTIzOSwtMC40MTk5NjUsMC4pLFxudmVjMygtMC41NDUzOTYsMC41MzgxMzMsMC4pLFxudmVjMygt
MC4xNzg1NjQsLTAuNTk2MDU3LDAuKVxuKTtcblxuXG5cblxuXG5mbG9hdCBjb21wdXRlU2hhZG93
V2l0aFBDU1ModmVjNCB2UG9zaXRpb25Gcm9tTGlnaHQsZmxvYXQgZGVwdGhNZXRyaWMsc2FtcGxl
cjJEIGRlcHRoU2FtcGxlcixzYW1wbGVyMkRTaGFkb3cgc2hhZG93U2FtcGxlcixmbG9hdCBzaGFk
b3dNYXBTaXplSW52ZXJzZSxmbG9hdCBsaWdodFNpemVVVixmbG9hdCBkYXJrbmVzcyxmbG9hdCBm
cnVzdHVtRWRnZUZhbGxvZmYsaW50IHNlYXJjaFRhcENvdW50LGludCBwY2ZUYXBDb3VudCx2ZWMz
WzY0XSBwb2lzc29uU2FtcGxlcnMpXG57XG5pZiAoZGVwdGhNZXRyaWM+MS4wIHx8IGRlcHRoTWV0
cmljPDAuMCkge1xucmV0dXJuIDEuMDtcbn1cbnZlYzMgY2xpcFNwYWNlPXZQb3NpdGlvbkZyb21M
aWdodC54eXovdlBvc2l0aW9uRnJvbUxpZ2h0Lnc7XG52ZWMzIHV2RGVwdGg9dmVjMygwLjUqY2xp
cFNwYWNlLnh5eit2ZWMzKDAuNSkpO1xuZmxvYXQgYmxvY2tlckRlcHRoPTAuMDtcbmZsb2F0IHN1
bUJsb2NrZXJEZXB0aD0wLjA7XG5mbG9hdCBudW1CbG9ja2VyPTAuMDtcbmZvciAoaW50IGk9MDsg
aTxzZWFyY2hUYXBDb3VudDsgaSArKykge1xuYmxvY2tlckRlcHRoPXRleHR1cmUoZGVwdGhTYW1w
bGVyLHV2RGVwdGgueHkrKGxpZ2h0U2l6ZVVWKnNoYWRvd01hcFNpemVJbnZlcnNlKlBvaXNzb25T
YW1wbGVyczMyW2ldLnh5KSkucjtcbmlmIChibG9ja2VyRGVwdGg8ZGVwdGhNZXRyaWMpIHtcbnN1
bUJsb2NrZXJEZXB0aCs9YmxvY2tlckRlcHRoO1xubnVtQmxvY2tlcisrO1xufVxufVxuaWYgKG51
bUJsb2NrZXI8MS4wKSB7XG5yZXR1cm4gMS4wO1xufVxuZmxvYXQgYXZnQmxvY2tlckRlcHRoPXN1
bUJsb2NrZXJEZXB0aC9udW1CbG9ja2VyO1xuXG5mbG9hdCBBQU9mZnNldD1zaGFkb3dNYXBTaXpl
SW52ZXJzZSoxMC47XG5cblxuZmxvYXQgcGVudW1icmFSYXRpbz0oKGRlcHRoTWV0cmljLWF2Z0Js
b2NrZXJEZXB0aCkrQUFPZmZzZXQpO1xuZmxvYXQgZmlsdGVyUmFkaXVzPXBlbnVtYnJhUmF0aW8q
bGlnaHRTaXplVVYqc2hhZG93TWFwU2l6ZUludmVyc2U7XG5mbG9hdCByYW5kb209Z2V0UmFuZCh2
UG9zaXRpb25Gcm9tTGlnaHQueHkpO1xuZmxvYXQgcm90YXRpb25BbmdsZT1yYW5kb20qMy4xNDE1
OTI2O1xudmVjMiByb3RhdGlvblZlY3Rvcj12ZWMyKGNvcyhyb3RhdGlvbkFuZ2xlKSxzaW4ocm90
YXRpb25BbmdsZSkpO1xuZmxvYXQgc2hhZG93PTAuO1xuZm9yIChpbnQgaT0wOyBpPHBjZlRhcENv
dW50OyBpKyspIHtcbnZlYzMgb2Zmc2V0PXBvaXNzb25TYW1wbGVyc1tpXTtcblxub2Zmc2V0PXZl
YzMob2Zmc2V0Lngqcm90YXRpb25WZWN0b3IueC1vZmZzZXQueSpyb3RhdGlvblZlY3Rvci55LG9m
ZnNldC55KnJvdGF0aW9uVmVjdG9yLngrb2Zmc2V0Lngqcm90YXRpb25WZWN0b3IueSwwLik7XG5z
aGFkb3crPXRleHR1cmUyRChzaGFkb3dTYW1wbGVyLHV2RGVwdGgrb2Zmc2V0KmZpbHRlclJhZGl1
cyk7XG59XG5zaGFkb3cvPWZsb2F0KHBjZlRhcENvdW50KTtcblxuc2hhZG93PW1peChzaGFkb3cs
MS4sZGVwdGhNZXRyaWMtYXZnQmxvY2tlckRlcHRoKTtcblxuc2hhZG93PW1peChkYXJrbmVzcywx
LixzaGFkb3cpO1xuXG5yZXR1cm4gY29tcHV0ZUZhbGxPZmYoc2hhZG93LGNsaXBTcGFjZS54eSxm
cnVzdHVtRWRnZUZhbGxvZmYpO1xufVxuZmxvYXQgY29tcHV0ZVNoYWRvd1dpdGhQQ1NTMTYodmVj
NCB2UG9zaXRpb25Gcm9tTGlnaHQsZmxvYXQgZGVwdGhNZXRyaWMsc2FtcGxlcjJEIGRlcHRoU2Ft
cGxlcixzYW1wbGVyMkRTaGFkb3cgc2hhZG93U2FtcGxlcixmbG9hdCBzaGFkb3dNYXBTaXplSW52
ZXJzZSxmbG9hdCBsaWdodFNpemVVVixmbG9hdCBkYXJrbmVzcyxmbG9hdCBmcnVzdHVtRWRnZUZh
bGxvZmYpXG57XG5yZXR1cm4gY29tcHV0ZVNoYWRvd1dpdGhQQ1NTKHZQb3NpdGlvbkZyb21MaWdo
dCxkZXB0aE1ldHJpYyxkZXB0aFNhbXBsZXIsc2hhZG93U2FtcGxlcixzaGFkb3dNYXBTaXplSW52
ZXJzZSxsaWdodFNpemVVVixkYXJrbmVzcyxmcnVzdHVtRWRnZUZhbGxvZmYsMTYsMTYsUG9pc3Nv
blNhbXBsZXJzMzIpO1xufVxuZmxvYXQgY29tcHV0ZVNoYWRvd1dpdGhQQ1NTMzIodmVjNCB2UG9z
aXRpb25Gcm9tTGlnaHQsZmxvYXQgZGVwdGhNZXRyaWMsc2FtcGxlcjJEIGRlcHRoU2FtcGxlcixz
YW1wbGVyMkRTaGFkb3cgc2hhZG93U2FtcGxlcixmbG9hdCBzaGFkb3dNYXBTaXplSW52ZXJzZSxm
bG9hdCBsaWdodFNpemVVVixmbG9hdCBkYXJrbmVzcyxmbG9hdCBmcnVzdHVtRWRnZUZhbGxvZmYp
XG57XG5yZXR1cm4gY29tcHV0ZVNoYWRvd1dpdGhQQ1NTKHZQb3NpdGlvbkZyb21MaWdodCxkZXB0
aE1ldHJpYyxkZXB0aFNhbXBsZXIsc2hhZG93U2FtcGxlcixzaGFkb3dNYXBTaXplSW52ZXJzZSxs
aWdodFNpemVVVixkYXJrbmVzcyxmcnVzdHVtRWRnZUZhbGxvZmYsMTYsMzIsUG9pc3NvblNhbXBs
ZXJzMzIpO1xufVxuZmxvYXQgY29tcHV0ZVNoYWRvd1dpdGhQQ1NTNjQodmVjNCB2UG9zaXRpb25G
cm9tTGlnaHQsZmxvYXQgZGVwdGhNZXRyaWMsc2FtcGxlcjJEIGRlcHRoU2FtcGxlcixzYW1wbGVy
MkRTaGFkb3cgc2hhZG93U2FtcGxlcixmbG9hdCBzaGFkb3dNYXBTaXplSW52ZXJzZSxmbG9hdCBs
aWdodFNpemVVVixmbG9hdCBkYXJrbmVzcyxmbG9hdCBmcnVzdHVtRWRnZUZhbGxvZmYpXG57XG5y
ZXR1cm4gY29tcHV0ZVNoYWRvd1dpdGhQQ1NTKHZQb3NpdGlvbkZyb21MaWdodCxkZXB0aE1ldHJp
YyxkZXB0aFNhbXBsZXIsc2hhZG93U2FtcGxlcixzaGFkb3dNYXBTaXplSW52ZXJzZSxsaWdodFNp
emVVVixkYXJrbmVzcyxmcnVzdHVtRWRnZUZhbGxvZmYsMzIsNjQsUG9pc3NvblNhbXBsZXJzNjQp
O1xufVxuI2VuZGlmXG4jZW5kaWZcbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNo
YWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgc2hhZG93c0ZyYWdtZW50RnVuY3Rpb25zID0geyBu
YW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL3NoYWRvd3NWZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVy
cy9TaGFkZXJzSW5jbHVkZS9zaGFkb3dzVmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogc2hhZG93c1ZlcnRleCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJz
aGFkb3dzVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBzaGFkb3dzVmVydGV4OyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2Vm
ZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3NoYWRvd3NW
ZXJ0ZXgnOwordmFyIHNoYWRlciA9ICIjaWZkZWYgU0hBRE9XU1xuI2lmIGRlZmluZWQoU0hBRE9X
e1h9KSAmJiAhZGVmaW5lZChTSEFET1dDVUJFe1h9KVxudlBvc2l0aW9uRnJvbUxpZ2h0e1h9PWxp
Z2h0TWF0cml4e1h9KndvcmxkUG9zO1xudkRlcHRoTWV0cmlje1h9PSgodlBvc2l0aW9uRnJvbUxp
Z2h0e1h9LnorbGlnaHR7WH0uZGVwdGhWYWx1ZXMueCkvKGxpZ2h0e1h9LmRlcHRoVmFsdWVzLnkp
KTtcbiNlbmRpZlxuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVy
OworLyoqIEBoaWRkZW4gKi8KK3ZhciBzaGFkb3dzVmVydGV4ID0geyBuYW1lOiBuYW1lLCBzaGFk
ZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2FuYWdseXBo
LmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9TaGFkZXJzL2FuYWdseXBoLmZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IGFuYWdseXBoUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiYW5hZ2x5cGhQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYW5hZ2x5cGhQaXhl
bFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3Rf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFt
ZSA9ICdhbmFnbHlwaFBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG52YXJ5aW5nIHZlYzIg
dlVWO1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZVNhbXBsZXI7XG51bmlmb3JtIHNhbXBsZXIy
RCBsZWZ0U2FtcGxlcjtcbnZvaWQgbWFpbih2b2lkKVxue1xudmVjNCBsZWZ0RnJhZz10ZXh0dXJl
MkQobGVmdFNhbXBsZXIsdlVWKTtcbmxlZnRGcmFnPXZlYzQoMS4wLGxlZnRGcmFnLmcsbGVmdEZy
YWcuYiwxLjApO1xudmVjNCByaWdodEZyYWc9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7
XG5yaWdodEZyYWc9dmVjNChyaWdodEZyYWcuciwxLjAsMS4wLDEuMCk7XG5nbF9GcmFnQ29sb3I9
dmVjNChyaWdodEZyYWcucmdiKmxlZnRGcmFnLnJnYiwxLjApO1xufSI7CitfTWF0ZXJpYWxzX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVb
bmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGFuYWdseXBoUGl4ZWxTaGFkZXIg
PSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL1NoYWRlcnMvYmFja2dyb3VuZC5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL2JhY2tncm91bmQu
ZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBiYWNrZ3JvdW5kUGl4ZWxTaGFkZXIgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYmFja2dyb3VuZFBpeGVsU2hhZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBiYWNrZ3JvdW5kUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIu
L01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVy
c0luY2x1ZGVfYmFja2dyb3VuZEZyYWdtZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYmFj
a2dyb3VuZEZyYWdtZW50RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9i
YWNrZ3JvdW5kRnJhZ21lbnREZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzSW5jbHVkZV9iYWNrZ3JvdW5kVWJvRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1
ZGUvYmFja2dyb3VuZFVib0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
YmFja2dyb3VuZFVib0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNJbmNsdWRlX3JlZmxlY3Rpb25GdW5jdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9yZWZsZWN0
aW9uRnVuY3Rpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9yZWZsZWN0aW9uRnVuY3Rp
b24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW1hZ2VQ
cm9jZXNzaW5nRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRGVjbGFy
YXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbWFnZVByb2Nlc3NpbmdEZWNsYXJh
dGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9saWdo
dEZyYWdtZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbGlnaHRGcmFnbWVudERlY2xhcmF0
aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbGlnaHRGcmFnbWVudERlY2xhcmF0aW9u
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2xpZ2h0VWJv
RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbGlnaHRVYm9EZWNsYXJhdGlvbiAqLyAiLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0VWJvRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVscGVyRnVuY3Rpb25zX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNs
dWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1
bmN0aW9ucy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9s
aWdodHNGcmFnbWVudEZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9saWdodHNGcmFnbWVudEZ1bmN0
aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0c0ZyYWdtZW50RnVuY3Rpb25z
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3NoYWRvd3NG
cmFnbWVudEZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9zaGFkb3dzRnJhZ21lbnRGdW5jdGlvbnMg
Ki8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9zaGFkb3dzRnJhZ21lbnRGdW5jdGlvbnMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW1hZ2VQcm9jZXNz
aW5nRnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnMgKi8g
Ii4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfY2xpcFBsYW5lRnJhZ21l
bnREZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlv
biAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRp
b24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfZm9nRnJh
Z21lbnREZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvZm9nRnJhZ21lbnREZWNsYXJhdGlvbiAq
LyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ZvZ0ZyYWdtZW50RGVjbGFyYXRpb24udHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfY2xpcFBsYW5lRnJhZ21l
bnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZUZyYWdtZW50ICovICIuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvY2xpcFBsYW5lRnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfU2hhZGVyc0luY2x1ZGVfbGlnaHRGcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbGlnaHRGcmFn
bWVudCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0RnJhZ21lbnQudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfZm9nRnJhZ21lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRl
cnNJbmNsdWRlL2ZvZ0ZyYWdtZW50ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZm9nRnJh
Z21lbnQudHMiKTsKKworCisKKworCisKKworCisKKworCisKKworCisKKwordmFyIG5hbWUgPSAn
YmFja2dyb3VuZFBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIFRFWFRVUkVMT0RT
VVBQT1JUXG4jZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGVcbiNl
bmRpZlxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2luY2x1ZGU8X19kZWNsX19iYWNrZ3JvdW5k
RnJhZ21lbnQ+XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTRcblxudW5pZm9ybSB2
ZWMzIHZFeWVQb3NpdGlvbjtcblxudmFyeWluZyB2ZWMzIHZQb3NpdGlvblc7XG4jaWZkZWYgTUFJ
TlVWMVxudmFyeWluZyB2ZWMyIHZNYWluVVYxO1xuI2VuZGlmXG4jaWZkZWYgTUFJTlVWMlxudmFy
eWluZyB2ZWMyIHZNYWluVVYyO1xuI2VuZGlmXG4jaWZkZWYgTk9STUFMXG52YXJ5aW5nIHZlYzMg
dk5vcm1hbFc7XG4jZW5kaWZcbiNpZmRlZiBESUZGVVNFXG4jaWYgRElGRlVTRURJUkVDVFVWID09
IDFcbiNkZWZpbmUgdkRpZmZ1c2VVViB2TWFpblVWMVxuI2VsaWYgRElGRlVTRURJUkVDVFVWID09
IDJcbiNkZWZpbmUgdkRpZmZ1c2VVViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcgdmVjMiB2RGlm
ZnVzZVVWO1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlU2FtcGxlcjtcbiNlbmRp
ZlxuXG4jaWZkZWYgUkVGTEVDVElPTlxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfM0RcbiNkZWZpbmUg
c2FtcGxlUmVmbGVjdGlvbihzLGMpIHRleHR1cmVDdWJlKHMsYylcbnVuaWZvcm0gc2FtcGxlckN1
YmUgcmVmbGVjdGlvblNhbXBsZXI7XG4jaWZkZWYgVEVYVFVSRUxPRFNVUFBPUlRcbiNkZWZpbmUg
c2FtcGxlUmVmbGVjdGlvbkxvZChzLGMsbCkgdGV4dHVyZUN1YmVMb2RFWFQocyxjLGwpXG4jZWxz
ZVxudW5pZm9ybSBzYW1wbGVyQ3ViZSByZWZsZWN0aW9uU2FtcGxlckxvdztcbnVuaWZvcm0gc2Ft
cGxlckN1YmUgcmVmbGVjdGlvblNhbXBsZXJIaWdoO1xuI2VuZGlmXG4jZWxzZVxuI2RlZmluZSBz
YW1wbGVSZWZsZWN0aW9uKHMsYykgdGV4dHVyZTJEKHMsYylcbnVuaWZvcm0gc2FtcGxlcjJEIHJl
ZmxlY3Rpb25TYW1wbGVyO1xuI2lmZGVmIFRFWFRVUkVMT0RTVVBQT1JUXG4jZGVmaW5lIHNhbXBs
ZVJlZmxlY3Rpb25Mb2QocyxjLGwpIHRleHR1cmUyRExvZEVYVChzLGMsbClcbiNlbHNlXG51bmlm
b3JtIHNhbXBsZXJDdWJlIHJlZmxlY3Rpb25TYW1wbGVyTG93O1xudW5pZm9ybSBzYW1wbGVyQ3Vi
ZSByZWZsZWN0aW9uU2FtcGxlckhpZ2g7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJ
T05NQVBfU0tZQk9YXG52YXJ5aW5nIHZlYzMgdlBvc2l0aW9uVVZXO1xuI2Vsc2VcbiNpZiBkZWZp
bmVkKFJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSX0ZJWEVEKSB8fCBkZWZpbmVkKFJFRkxF
Q1RJT05NQVBfTUlSUk9SRURFUVVJUkVDVEFOR1VMQVJfRklYRUQpXG52YXJ5aW5nIHZlYzMgdkRp
cmVjdGlvblc7XG4jZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGU8cmVmbGVjdGlvbkZ1bmN0aW9uPlxu
I2VuZGlmXG5cbiNpZm5kZWYgRlJPTUxJTkVBUlNQQUNFXG4jZGVmaW5lIEZST01MSU5FQVJTUEFD
RTtcbiNlbmRpZlxuXG4jaWZuZGVmIFNIQURPV09OTFlcbiNkZWZpbmUgU0hBRE9XT05MWTtcbiNl
bmRpZlxuI2luY2x1ZGU8aW1hZ2VQcm9jZXNzaW5nRGVjbGFyYXRpb24+XG5cbiNpbmNsdWRlPF9f
ZGVjbF9fbGlnaHRGcmFnbWVudD5bMC4ubWF4U2ltdWx0YW5lb3VzTGlnaHRzXVxuI2luY2x1ZGU8
aGVscGVyRnVuY3Rpb25zPlxuI2luY2x1ZGU8bGlnaHRzRnJhZ21lbnRGdW5jdGlvbnM+XG4jaW5j
bHVkZTxzaGFkb3dzRnJhZ21lbnRGdW5jdGlvbnM+XG4jaW5jbHVkZTxpbWFnZVByb2Nlc3NpbmdG
dW5jdGlvbnM+XG4jaW5jbHVkZTxjbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uPlxuXG4jaW5j
bHVkZTxmb2dGcmFnbWVudERlY2xhcmF0aW9uPlxuI2lmZGVmIFJFRkxFQ1RJT05GUkVTTkVMXG4j
ZGVmaW5lIEZSRVNORUxfTUFYSU1VTV9PTl9ST1VHSCAwLjI1XG52ZWMzIGZyZXNuZWxTY2hsaWNr
RW52aXJvbm1lbnRHR1goZmxvYXQgVmRvdE4sdmVjMyByZWZsZWN0YW5jZTAsdmVjMyByZWZsZWN0
YW5jZTkwLGZsb2F0IHNtb290aG5lc3MpXG57XG5cbmZsb2F0IHdlaWdodD1taXgoRlJFU05FTF9N
QVhJTVVNX09OX1JPVUdILDEuMCxzbW9vdGhuZXNzKTtcbnJldHVybiByZWZsZWN0YW5jZTArd2Vp
Z2h0KihyZWZsZWN0YW5jZTkwLXJlZmxlY3RhbmNlMCkqcG93NShzYXR1cmF0ZSgxLjAtVmRvdE4p
KTtcbn1cbiNlbmRpZlxudm9pZCBtYWluKHZvaWQpIHtcbiNpbmNsdWRlPGNsaXBQbGFuZUZyYWdt
ZW50PlxudmVjMyB2aWV3RGlyZWN0aW9uVz1ub3JtYWxpemUodkV5ZVBvc2l0aW9uLXZQb3NpdGlv
blcpO1xuXG4jaWZkZWYgTk9STUFMXG52ZWMzIG5vcm1hbFc9bm9ybWFsaXplKHZOb3JtYWxXKTtc
biNlbHNlXG52ZWMzIG5vcm1hbFc9dmVjMygwLjAsMS4wLDAuMCk7XG4jZW5kaWZcblxuZmxvYXQg
c2hhZG93PTEuO1xuZmxvYXQgZ2xvYmFsU2hhZG93PTAuO1xuZmxvYXQgc2hhZG93TGlnaHRDb3Vu
dD0wLjtcbiNpbmNsdWRlPGxpZ2h0RnJhZ21lbnQ+WzAuLm1heFNpbXVsdGFuZW91c0xpZ2h0c11c
biNpZmRlZiBTSEFET1dJTlVTRVxuZ2xvYmFsU2hhZG93Lz1zaGFkb3dMaWdodENvdW50O1xuI2Vs
c2Vcbmdsb2JhbFNoYWRvdz0xLjA7XG4jZW5kaWZcblxudmVjNCByZWZsZWN0aW9uQ29sb3I9dmVj
NCgxLiwxLiwxLiwxLik7XG4jaWZkZWYgUkVGTEVDVElPTlxudmVjMyByZWZsZWN0aW9uVmVjdG9y
PWNvbXB1dGVSZWZsZWN0aW9uQ29vcmRzKHZlYzQodlBvc2l0aW9uVywxLjApLG5vcm1hbFcpO1xu
I2lmZGVmIFJFRkxFQ1RJT05NQVBfT1BQT1NJVEVaXG5yZWZsZWN0aW9uVmVjdG9yLnoqPS0xLjA7
XG4jZW5kaWZcblxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfM0RcbnZlYzMgcmVmbGVjdGlvbkNvb3Jk
cz1yZWZsZWN0aW9uVmVjdG9yO1xuI2Vsc2VcbnZlYzIgcmVmbGVjdGlvbkNvb3Jkcz1yZWZsZWN0
aW9uVmVjdG9yLnh5O1xuI2lmZGVmIFJFRkxFQ1RJT05NQVBfUFJPSkVDVElPTlxucmVmbGVjdGlv
bkNvb3Jkcy89cmVmbGVjdGlvblZlY3Rvci56O1xuI2VuZGlmXG5yZWZsZWN0aW9uQ29vcmRzLnk9
MS4wLXJlZmxlY3Rpb25Db29yZHMueTtcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJT05CTFVSXG5m
bG9hdCByZWZsZWN0aW9uTE9EPXZSZWZsZWN0aW9uSW5mb3MueTtcbiNpZmRlZiBURVhUVVJFTE9E
U1VQUE9SVFxuXG5yZWZsZWN0aW9uTE9EPXJlZmxlY3Rpb25MT0QqbG9nMih2UmVmbGVjdGlvbk1p
Y3Jvc3VyZmFjZUluZm9zLngpKnZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueSt2UmVmbGVj
dGlvbk1pY3Jvc3VyZmFjZUluZm9zLno7XG5yZWZsZWN0aW9uQ29sb3I9c2FtcGxlUmVmbGVjdGlv
bkxvZChyZWZsZWN0aW9uU2FtcGxlcixyZWZsZWN0aW9uQ29vcmRzLHJlZmxlY3Rpb25MT0QpO1xu
I2Vsc2VcbmZsb2F0IGxvZFJlZmxlY3Rpb25Ob3JtYWxpemVkPXNhdHVyYXRlKHJlZmxlY3Rpb25M
T0QpO1xuZmxvYXQgbG9kUmVmbGVjdGlvbk5vcm1hbGl6ZWREb3VibGVkPWxvZFJlZmxlY3Rpb25O
b3JtYWxpemVkKjIuMDtcbnZlYzQgcmVmbGVjdGlvblNwZWN1bGFyTWlkPXNhbXBsZVJlZmxlY3Rp
b24ocmVmbGVjdGlvblNhbXBsZXIscmVmbGVjdGlvbkNvb3Jkcyk7XG5pZihsb2RSZWZsZWN0aW9u
Tm9ybWFsaXplZERvdWJsZWQ8MS4wKXtcbnJlZmxlY3Rpb25Db2xvcj1taXgoXG5zYW1wbGVSZWZs
ZWN0aW9uKHJlZmxlY3Rpb25TYW1wbGVySGlnaCxyZWZsZWN0aW9uQ29vcmRzKSxcbnJlZmxlY3Rp
b25TcGVjdWxhck1pZCxcbmxvZFJlZmxlY3Rpb25Ob3JtYWxpemVkRG91YmxlZFxuKTtcbn0gZWxz
ZSB7XG5yZWZsZWN0aW9uQ29sb3I9bWl4KFxucmVmbGVjdGlvblNwZWN1bGFyTWlkLFxuc2FtcGxl
UmVmbGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlckxvdyxyZWZsZWN0aW9uQ29vcmRzKSxcbmxvZFJl
ZmxlY3Rpb25Ob3JtYWxpemVkRG91YmxlZC0xLjBcbik7XG59XG4jZW5kaWZcbiNlbHNlXG52ZWM0
IHJlZmxlY3Rpb25TYW1wbGU9c2FtcGxlUmVmbGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlcixyZWZs
ZWN0aW9uQ29vcmRzKTtcbnJlZmxlY3Rpb25Db2xvcj1yZWZsZWN0aW9uU2FtcGxlO1xuI2VuZGlm
XG4jaWZkZWYgUkdCRFJFRkxFQ1RJT05cbnJlZmxlY3Rpb25Db2xvci5yZ2I9ZnJvbVJHQkQocmVm
bGVjdGlvbkNvbG9yKTtcbiNlbmRpZlxuI2lmZGVmIEdBTU1BUkVGTEVDVElPTlxucmVmbGVjdGlv
bkNvbG9yLnJnYj10b0xpbmVhclNwYWNlKHJlZmxlY3Rpb25Db2xvci5yZ2IpO1xuI2VuZGlmXG4j
aWZkZWYgUkVGTEVDVElPTkJHUlxucmVmbGVjdGlvbkNvbG9yLnJnYj1yZWZsZWN0aW9uQ29sb3Iu
YmdyO1xuI2VuZGlmXG5cbnJlZmxlY3Rpb25Db2xvci5yZ2IqPXZSZWZsZWN0aW9uSW5mb3MueDtc
biNlbmRpZlxuXG52ZWMzIGRpZmZ1c2VDb2xvcj12ZWMzKDEuLDEuLDEuKTtcbmZsb2F0IGZpbmFs
QWxwaGE9YWxwaGE7XG4jaWZkZWYgRElGRlVTRVxudmVjNCBkaWZmdXNlTWFwPXRleHR1cmUyRChk
aWZmdXNlU2FtcGxlcix2RGlmZnVzZVVWKTtcbiNpZmRlZiBHQU1NQURJRkZVU0VcbmRpZmZ1c2VN
YXAucmdiPXRvTGluZWFyU3BhY2UoZGlmZnVzZU1hcC5yZ2IpO1xuI2VuZGlmXG5cbmRpZmZ1c2VN
YXAucmdiKj12RGlmZnVzZUluZm9zLnk7XG4jaWZkZWYgRElGRlVTRUhBU0FMUEhBXG5maW5hbEFs
cGhhKj1kaWZmdXNlTWFwLmE7XG4jZW5kaWZcbmRpZmZ1c2VDb2xvcj1kaWZmdXNlTWFwLnJnYjtc
biNlbmRpZlxuXG4jaWZkZWYgUkVGTEVDVElPTkZSRVNORUxcbnZlYzMgY29sb3JCYXNlPWRpZmZ1
c2VDb2xvcjtcbiNlbHNlXG52ZWMzIGNvbG9yQmFzZT1yZWZsZWN0aW9uQ29sb3IucmdiKmRpZmZ1
c2VDb2xvcjtcbiNlbmRpZlxuY29sb3JCYXNlPW1heChjb2xvckJhc2UsMC4wKTtcblxuI2lmZGVm
IFVTRVJHQkNPTE9SXG52ZWMzIGZpbmFsQ29sb3I9Y29sb3JCYXNlO1xuI2Vsc2VcbiNpZmRlZiBV
U0VISUdITElHSFRBTkRTSEFET1dDT0xPUlNcbnZlYzMgbWFpbkNvbG9yPW1peCh2UHJpbWFyeUNv
bG9yU2hhZG93LnJnYix2UHJpbWFyeUNvbG9yLnJnYixjb2xvckJhc2UpO1xuI2Vsc2VcbnZlYzMg
bWFpbkNvbG9yPXZQcmltYXJ5Q29sb3IucmdiO1xuI2VuZGlmXG52ZWMzIGZpbmFsQ29sb3I9Y29s
b3JCYXNlKm1haW5Db2xvcjtcbiNlbmRpZlxuXG4jaWZkZWYgUkVGTEVDVElPTkZSRVNORUxcbnZl
YzMgcmVmbGVjdGlvbkFtb3VudD12UmVmbGVjdGlvbkNvbnRyb2wueHh4O1xudmVjMyByZWZsZWN0
aW9uUmVmbGVjdGFuY2UwPXZSZWZsZWN0aW9uQ29udHJvbC55eXk7XG52ZWMzIHJlZmxlY3Rpb25S
ZWZsZWN0YW5jZTkwPXZSZWZsZWN0aW9uQ29udHJvbC56eno7XG5mbG9hdCBWZG90Tj1kb3Qobm9y
bWFsaXplKHZFeWVQb3NpdGlvbiksbm9ybWFsVyk7XG52ZWMzIHBsYW5hclJlZmxlY3Rpb25GcmVz
bmVsPWZyZXNuZWxTY2hsaWNrRW52aXJvbm1lbnRHR1goc2F0dXJhdGUoVmRvdE4pLHJlZmxlY3Rp
b25SZWZsZWN0YW5jZTAscmVmbGVjdGlvblJlZmxlY3RhbmNlOTAsMS4wKTtcbnJlZmxlY3Rpb25B
bW91bnQqPXBsYW5hclJlZmxlY3Rpb25GcmVzbmVsO1xuI2lmZGVmIFJFRkxFQ1RJT05GQUxMT0ZG
XG5mbG9hdCByZWZsZWN0aW9uRGlzdGFuY2VGYWxsb2ZmPTEuMC1zYXR1cmF0ZShsZW5ndGgodlBv
c2l0aW9uVy54eXotdkJhY2tncm91bmRDZW50ZXIpKnZSZWZsZWN0aW9uQ29udHJvbC53KTtcbnJl
ZmxlY3Rpb25EaXN0YW5jZUZhbGxvZmYqPXJlZmxlY3Rpb25EaXN0YW5jZUZhbGxvZmY7XG5yZWZs
ZWN0aW9uQW1vdW50Kj1yZWZsZWN0aW9uRGlzdGFuY2VGYWxsb2ZmO1xuI2VuZGlmXG5maW5hbENv
bG9yPW1peChmaW5hbENvbG9yLHJlZmxlY3Rpb25Db2xvci5yZ2Isc2F0dXJhdGUocmVmbGVjdGlv
bkFtb3VudCkpO1xuI2VuZGlmXG4jaWZkZWYgT1BBQ0lUWUZSRVNORUxcbmZsb2F0IHZpZXdBbmds
ZVRvRmxvb3I9ZG90KG5vcm1hbFcsbm9ybWFsaXplKHZFeWVQb3NpdGlvbi12QmFja2dyb3VuZENl
bnRlcikpO1xuXG5jb25zdCBmbG9hdCBzdGFydEFuZ2xlPTAuMTtcbmZsb2F0IGZhZGVGYWN0b3I9
c2F0dXJhdGUodmlld0FuZ2xlVG9GbG9vci9zdGFydEFuZ2xlKTtcbmZpbmFsQWxwaGEqPWZhZGVG
YWN0b3IqZmFkZUZhY3RvcjtcbiNlbmRpZlxuXG4jaWZkZWYgU0hBRE9XSU5VU0VcbmZpbmFsQ29s
b3I9bWl4KGZpbmFsQ29sb3Iqc2hhZG93TGV2ZWwsZmluYWxDb2xvcixnbG9iYWxTaGFkb3cpO1xu
I2VuZGlmXG5cbnZlYzQgY29sb3I9dmVjNChmaW5hbENvbG9yLGZpbmFsQWxwaGEpO1xuI2luY2x1
ZGU8Zm9nRnJhZ21lbnQ+XG4jaWZkZWYgSU1BR0VQUk9DRVNTSU5HUE9TVFBST0NFU1NcblxuXG5j
b2xvci5yZ2I9Y2xhbXAoY29sb3IucmdiLDAuLDMwLjApO1xuI2Vsc2VcblxuY29sb3I9YXBwbHlJ
bWFnZVByb2Nlc3NpbmcoY29sb3IpO1xuI2VuZGlmXG4jaWZkZWYgUFJFTVVMVElQTFlBTFBIQVxu
XG5jb2xvci5yZ2IqPWNvbG9yLmE7XG4jZW5kaWZcbiNpZmRlZiBOT0lTRVxuY29sb3IucmdiKz1k
aXRoZXIodlBvc2l0aW9uVy54eSwwLjUpO1xuY29sb3I9bWF4KGNvbG9yLDAuMCk7XG4jZW5kaWZc
bmdsX0ZyYWdDb2xvcj1jb2xvcjtcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7
CisvKiogQGhpZGRlbiAqLwordmFyIGJhY2tncm91bmRQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFt
ZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9i
YWNrZ3JvdW5kLnZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9iYWNrZ3JvdW5kLnZlcnRleC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBiYWNrZ3JvdW5kVmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgImJhY2tncm91bmRWZXJ0ZXhTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGJhY2tncm91bmRWZXJ0ZXhTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3Qu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYmFja2dyb3Vu
ZFZlcnRleERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2JhY2tncm91bmRWZXJ0ZXhEZWNsYXJh
dGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2JhY2tncm91bmRWZXJ0ZXhEZWNsYXJh
dGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9iYWNr
Z3JvdW5kVWJvRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYmFja2dyb3VuZFVib0RlY2xhcmF0
aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYmFja2dyb3VuZFVib0RlY2xhcmF0aW9u
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2hlbHBlckZ1
bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMgKi8gIi4vU2hhZGVycy9TaGFk
ZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9ib25lc0Rl
Y2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYm9uZXNEZWNsYXJhdGlvbi50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbnN0YW5jZXNE
ZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNEZWNsYXJhdGlvbiAqLyAiLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMv
U2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfZm9nVmVydGV4RGVjbGFyYXRpb25fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hh
ZGVyc0luY2x1ZGUvZm9nVmVydGV4RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9mb2dWZXJ0ZXhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9TaGFkZXJzSW5jbHVkZV9saWdodEZyYWdtZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUv
bGlnaHRGcmFnbWVudERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbGln
aHRGcmFnbWVudERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1No
YWRlcnNJbmNsdWRlX2xpZ2h0VWJvRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbGlnaHRVYm9E
ZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0VWJvRGVjbGFyYXRp
b24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW5zdGFu
Y2VzVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXggKi8gIi4vU2hhZGVycy9T
aGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2JvbmVzVmVy
dGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYm9uZXNWZXJ0ZXgudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfY2xpcFBsYW5lVmVydGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFk
ZXJzSW5jbHVkZS9jbGlwUGxhbmVWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9j
bGlwUGxhbmVWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0lu
Y2x1ZGVfZm9nVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9mb2dWZXJ0ZXggKi8gIi4vU2hhZGVycy9T
aGFkZXJzSW5jbHVkZS9mb2dWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
U2hhZGVyc0luY2x1ZGVfc2hhZG93c1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvc2hhZG93c1ZlcnRl
eCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3NoYWRvd3NWZXJ0ZXgudHMiKTsKKworCisK
KworCisKKworCisKKworCisKKworCisKK3ZhciBuYW1lID0gJ2JhY2tncm91bmRWZXJ0ZXhTaGFk
ZXInOwordmFyIHNoYWRlciA9ICJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jaW5jbHVkZTxfX2Rl
Y2xfX2JhY2tncm91bmRWZXJ0ZXg+XG4jaW5jbHVkZTxoZWxwZXJGdW5jdGlvbnM+XG5cbmF0dHJp
YnV0ZSB2ZWMzIHBvc2l0aW9uO1xuI2lmZGVmIE5PUk1BTFxuYXR0cmlidXRlIHZlYzMgbm9ybWFs
O1xuI2VuZGlmXG4jaW5jbHVkZTxib25lc0RlY2xhcmF0aW9uPlxuXG4jaW5jbHVkZTxpbnN0YW5j
ZXNEZWNsYXJhdGlvbj5cblxudmFyeWluZyB2ZWMzIHZQb3NpdGlvblc7XG4jaWZkZWYgTk9STUFM
XG52YXJ5aW5nIHZlYzMgdk5vcm1hbFc7XG4jZW5kaWZcbiNpZmRlZiBVVjFcbmF0dHJpYnV0ZSB2
ZWMyIHV2O1xuI2VuZGlmXG4jaWZkZWYgVVYyXG5hdHRyaWJ1dGUgdmVjMiB1djI7XG4jZW5kaWZc
biNpZmRlZiBNQUlOVVYxXG52YXJ5aW5nIHZlYzIgdk1haW5VVjE7XG4jZW5kaWZcbiNpZmRlZiBN
QUlOVVYyXG52YXJ5aW5nIHZlYzIgdk1haW5VVjI7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKERJRkZV
U0UpICYmIERJRkZVU0VESVJFQ1RVViA9PSAwXG52YXJ5aW5nIHZlYzIgdkRpZmZ1c2VVVjtcbiNl
bmRpZlxuI2luY2x1ZGU8Y2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb24+XG4jaW5jbHVkZTxmb2dW
ZXJ0ZXhEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPF9fZGVjbF9fbGlnaHRGcmFnbWVudD5bMC4ubWF4
U2ltdWx0YW5lb3VzTGlnaHRzXVxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfU0tZQk9YXG52YXJ5aW5n
IHZlYzMgdlBvc2l0aW9uVVZXO1xuI2VuZGlmXG4jaWYgZGVmaW5lZChSRUZMRUNUSU9OTUFQX0VR
VUlSRUNUQU5HVUxBUl9GSVhFRCkgfHwgZGVmaW5lZChSRUZMRUNUSU9OTUFQX01JUlJPUkVERVFV
SVJFQ1RBTkdVTEFSX0ZJWEVEKVxudmFyeWluZyB2ZWMzIHZEaXJlY3Rpb25XO1xuI2VuZGlmXG52
b2lkIG1haW4odm9pZCkge1xuI2lmZGVmIFJFRkxFQ1RJT05NQVBfU0tZQk9YXG4jaWZkZWYgUkVG
TEVDVElPTk1BUF9TS1lCT1hfVFJBTlNGT1JNRURcbnZQb3NpdGlvblVWVz0ocmVmbGVjdGlvbk1h
dHJpeCp2ZWM0KHBvc2l0aW9uLDEuMCkpLnh5ejtcbiNlbHNlXG52UG9zaXRpb25VVlc9cG9zaXRp
b247XG4jZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGU8aW5zdGFuY2VzVmVydGV4PlxuI2luY2x1ZGU8
Ym9uZXNWZXJ0ZXg+XG4jaWZkZWYgTVVMVElWSUVXXG5pZiAoZ2xfVmlld0lEX09WUiA9PSAwdSkg
e1xuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb24qZmluYWxXb3JsZCp2ZWM0KHBvc2l0aW9uLDEu
MCk7XG59IGVsc2Uge1xuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb25SKmZpbmFsV29ybGQqdmVj
NChwb3NpdGlvbiwxLjApO1xufVxuI2Vsc2VcbmdsX1Bvc2l0aW9uPXZpZXdQcm9qZWN0aW9uKmZp
bmFsV29ybGQqdmVjNChwb3NpdGlvbiwxLjApO1xuI2VuZGlmXG52ZWM0IHdvcmxkUG9zPWZpbmFs
V29ybGQqdmVjNChwb3NpdGlvbiwxLjApO1xudlBvc2l0aW9uVz12ZWMzKHdvcmxkUG9zKTtcbiNp
ZmRlZiBOT1JNQUxcbm1hdDMgbm9ybWFsV29ybGQ9bWF0MyhmaW5hbFdvcmxkKTtcbiNpZmRlZiBO
T05VTklGT1JNU0NBTElOR1xubm9ybWFsV29ybGQ9dHJhbnNwb3NlTWF0MyhpbnZlcnNlTWF0Myhu
b3JtYWxXb3JsZCkpO1xuI2VuZGlmXG52Tm9ybWFsVz1ub3JtYWxpemUobm9ybWFsV29ybGQqbm9y
bWFsKTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoUkVGTEVDVElPTk1BUF9FUVVJUkVDVEFOR1VMQVJf
RklYRUQpIHx8IGRlZmluZWQoUkVGTEVDVElPTk1BUF9NSVJST1JFREVRVUlSRUNUQU5HVUxBUl9G
SVhFRClcbnZEaXJlY3Rpb25XPW5vcm1hbGl6ZSh2ZWMzKGZpbmFsV29ybGQqdmVjNChwb3NpdGlv
biwwLjApKSk7XG4jaWZkZWYgRVFVSVJFQ1RBTkdVTEFSX1JFTEZFQ1RJT05fRk9WXG5tYXQzIHNj
cmVlblRvV29ybGQ9aW52ZXJzZU1hdDMobWF0MyhmaW5hbFdvcmxkKnZpZXdQcm9qZWN0aW9uKSk7
XG52ZWMzIHNlZ21lbnQ9bWl4KHZEaXJlY3Rpb25XLHNjcmVlblRvV29ybGQqdmVjMygwLjAsMC4w
LDEuMCksYWJzKGZGb3ZNdWx0aXBsaWVyLTEuMCkpO1xuaWYgKGZGb3ZNdWx0aXBsaWVyPD0xLjAp
IHtcbnZEaXJlY3Rpb25XPW5vcm1hbGl6ZShzZWdtZW50KTtcbn0gZWxzZSB7XG52RGlyZWN0aW9u
Vz1ub3JtYWxpemUodkRpcmVjdGlvblcrKHZEaXJlY3Rpb25XLXNlZ21lbnQpKTtcbn1cbiNlbmRp
ZlxuI2VuZGlmXG4jaWZuZGVmIFVWMVxudmVjMiB1dj12ZWMyKDAuLDAuKTtcbiNlbmRpZlxuI2lm
bmRlZiBVVjJcbnZlYzIgdXYyPXZlYzIoMC4sMC4pO1xuI2VuZGlmXG4jaWZkZWYgTUFJTlVWMVxu
dk1haW5VVjE9dXY7XG4jZW5kaWZcbiNpZmRlZiBNQUlOVVYyXG52TWFpblVWMj11djI7XG4jZW5k
aWZcbiNpZiBkZWZpbmVkKERJRkZVU0UpICYmIERJRkZVU0VESVJFQ1RVViA9PSAwXG5pZiAodkRp
ZmZ1c2VJbmZvcy54ID09IDAuKVxue1xudkRpZmZ1c2VVVj12ZWMyKGRpZmZ1c2VNYXRyaXgqdmVj
NCh1diwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52RGlmZnVzZVVWPXZlYzIoZGlmZnVzZU1hdHJp
eCp2ZWM0KHV2MiwxLjAsMC4wKSk7XG59XG4jZW5kaWZcblxuI2luY2x1ZGU8Y2xpcFBsYW5lVmVy
dGV4PlxuXG4jaW5jbHVkZTxmb2dWZXJ0ZXg+XG5cbiNpbmNsdWRlPHNoYWRvd3NWZXJ0ZXg+WzAu
Lm1heFNpbXVsdGFuZW91c0xpZ2h0c11cblxuI2lmZGVmIFZFUlRFWENPTE9SXG52Q29sb3I9Y29s
b3I7XG4jZW5kaWZcblxuI2lmZGVmIFBPSU5UU0laRVxuZ2xfUG9pbnRTaXplPXBvaW50U2l6ZTtc
biNlbmRpZlxufVxuIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVu
ICovCit2YXIgYmFja2dyb3VuZFZlcnRleFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBz
aGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9ibGFja0FuZFdoaXRl
LmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvYmxhY2tBbmRXaGl0ZS5mcmFnbWVudC50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IGJsYWNrQW5kV2hpdGVQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJibGFja0FuZFdoaXRlUGl4ZWxTaGFkZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIGJsYWNrQW5kV2hpdGVQaXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0
ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdibGFja0FuZFdoaXRlUGl4ZWxTaGFk
ZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIy
RCB0ZXh0dXJlU2FtcGxlcjtcbnVuaWZvcm0gZmxvYXQgZGVncmVlO1xudm9pZCBtYWluKHZvaWQp
XG57XG52ZWMzIGNvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpLnJnYjtcbmZsb2F0
IGx1bWluYW5jZT1kb3QoY29sb3IsdmVjMygwLjMsMC41OSwwLjExKSk7XG52ZWMzIGJsYWNrQW5k
V2hpdGU9dmVjMyhsdW1pbmFuY2UsbHVtaW5hbmNlLGx1bWluYW5jZSk7XG5nbF9GcmFnQ29sb3I9
dmVjNChjb2xvci0oKGNvbG9yLWJsYWNrQW5kV2hpdGUpKmRlZ3JlZSksMS4wKTtcbn0iOworX01h
dGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hh
ZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBibGFja0FuZFdo
aXRlUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvYmxvb21NZXJnZS5mcmFnbWVudC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFk
ZXJzL2Jsb29tTWVyZ2UuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBibG9vbU1lcmdlUGl4
ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYmxvb21NZXJn
ZVBpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBibG9vbU1lcmdlUGl4ZWxTaGFkZXI7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlh
bHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnYmxv
b21NZXJnZVBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAidW5pZm9ybSBzYW1wbGVyMkQgdGV4
dHVyZVNhbXBsZXI7XG51bmlmb3JtIHNhbXBsZXIyRCBibG9vbUJsdXI7XG52YXJ5aW5nIHZlYzIg
dlVWO1xudW5pZm9ybSBmbG9hdCBibG9vbVdlaWdodDtcbnZvaWQgbWFpbih2b2lkKVxue1xuZ2xf
RnJhZ0NvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xudmVjMyBibHVycmVkPXRl
eHR1cmUyRChibG9vbUJsdXIsdlVWKS5yZ2I7XG5nbF9GcmFnQ29sb3IucmdiPWdsX0ZyYWdDb2xv
ci5yZ2IrKGJsdXJyZWQucmdiKmJsb29tV2VpZ2h0KTtcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGJsb29tTWVyZ2VQaXhlbFNoYWRlciA9
IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vU2hhZGVycy9jaHJvbWF0aWNBYmVycmF0aW9uLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1No
YWRlcnMvY2hyb21hdGljQWJlcnJhdGlvbi5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IGNocm9tYXRpY0FiZXJyYXRpb25QaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJjaHJvbWF0aWNBYmVycmF0aW9uUGl4ZWxTaGFkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIGNocm9tYXRpY0FiZXJyYXRpb25QaXhlbFNoYWRlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdjaHJvbWF0aWNBYmVy
cmF0aW9uUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnVuaWZvcm0gc2FtcGxlcjJEIHRl
eHR1cmVTYW1wbGVyO1xuXG51bmlmb3JtIGZsb2F0IGNocm9tYXRpY19hYmVycmF0aW9uO1xudW5p
Zm9ybSBmbG9hdCByYWRpYWxJbnRlbnNpdHk7XG51bmlmb3JtIHZlYzIgZGlyZWN0aW9uO1xudW5p
Zm9ybSB2ZWMyIGNlbnRlclBvc2l0aW9uO1xudW5pZm9ybSBmbG9hdCBzY3JlZW5fd2lkdGg7XG51
bmlmb3JtIGZsb2F0IHNjcmVlbl9oZWlnaHQ7XG5cbnZhcnlpbmcgdmVjMiB2VVY7XG52b2lkIG1h
aW4odm9pZClcbntcbnZlYzIgY2VudGVyZWRfc2NyZWVuX3Bvcz12ZWMyKHZVVi54LWNlbnRlclBv
c2l0aW9uLngsdlVWLnktY2VudGVyUG9zaXRpb24ueSk7XG52ZWMyIGRpcmVjdGlvbk9mRWZmZWN0
PWRpcmVjdGlvbjtcbmlmKGRpcmVjdGlvbk9mRWZmZWN0LnggPT0gMC4gJiYgZGlyZWN0aW9uT2ZF
ZmZlY3QueSA9PSAwLil7XG5kaXJlY3Rpb25PZkVmZmVjdD1ub3JtYWxpemUoY2VudGVyZWRfc2Ny
ZWVuX3Bvcyk7XG59XG5mbG9hdCByYWRpdXMyPWNlbnRlcmVkX3NjcmVlbl9wb3MueCpjZW50ZXJl
ZF9zY3JlZW5fcG9zLnhcbitjZW50ZXJlZF9zY3JlZW5fcG9zLnkqY2VudGVyZWRfc2NyZWVuX3Bv
cy55O1xuZmxvYXQgcmFkaXVzPXNxcnQocmFkaXVzMik7XG52ZWM0IG9yaWdpbmFsPXRleHR1cmUy
RCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xuXG52ZWMzIHJlZl9pbmRpY2VzPXZlYzMoLTAuMywwLjAs
MC4zKTtcbmZsb2F0IHJlZl9zaGlmdFg9Y2hyb21hdGljX2FiZXJyYXRpb24qcG93KHJhZGl1cyxy
YWRpYWxJbnRlbnNpdHkpKmRpcmVjdGlvbk9mRWZmZWN0Lngvc2NyZWVuX3dpZHRoO1xuZmxvYXQg
cmVmX3NoaWZ0WT1jaHJvbWF0aWNfYWJlcnJhdGlvbipwb3cocmFkaXVzLHJhZGlhbEludGVuc2l0
eSkqZGlyZWN0aW9uT2ZFZmZlY3QueS9zY3JlZW5faGVpZ2h0O1xuXG52ZWMyIHJlZl9jb29yZHNf
cj12ZWMyKHZVVi54K3JlZl9pbmRpY2VzLnIqcmVmX3NoaWZ0WCx2VVYueStyZWZfaW5kaWNlcy5y
KnJlZl9zaGlmdFkqMC41KTtcbnZlYzIgcmVmX2Nvb3Jkc19nPXZlYzIodlVWLngrcmVmX2luZGlj
ZXMuZypyZWZfc2hpZnRYLHZVVi55K3JlZl9pbmRpY2VzLmcqcmVmX3NoaWZ0WSowLjUpO1xudmVj
MiByZWZfY29vcmRzX2I9dmVjMih2VVYueCtyZWZfaW5kaWNlcy5iKnJlZl9zaGlmdFgsdlVWLnkr
cmVmX2luZGljZXMuYipyZWZfc2hpZnRZKjAuNSk7XG5vcmlnaW5hbC5yPXRleHR1cmUyRCh0ZXh0
dXJlU2FtcGxlcixyZWZfY29vcmRzX3IpLnI7XG5vcmlnaW5hbC5nPXRleHR1cmUyRCh0ZXh0dXJl
U2FtcGxlcixyZWZfY29vcmRzX2cpLmc7XG5vcmlnaW5hbC5iPXRleHR1cmUyRCh0ZXh0dXJlU2Ft
cGxlcixyZWZfY29vcmRzX2IpLmI7XG5vcmlnaW5hbC5hPWNsYW1wKHRleHR1cmUyRCh0ZXh0dXJl
U2FtcGxlcixyZWZfY29vcmRzX3IpLmErdGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHJlZl9jb29y
ZHNfZykuYSt0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIscmVmX2Nvb3Jkc19iKS5hLDAuLDEuKTtc
bmdsX0ZyYWdDb2xvcj1vcmlnaW5hbDtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVy
OworLyoqIEBoaWRkZW4gKi8KK3ZhciBjaHJvbWF0aWNBYmVycmF0aW9uUGl4ZWxTaGFkZXIgPSB7
IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L1NoYWRlcnMvY2lyY2xlT2ZDb25mdXNpb24uZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMv
Y2lyY2xlT2ZDb25mdXNpb24uZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogY2ly
Y2xlT2ZDb25mdXNpb25QaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJjaXJjbGVPZkNvbmZ1c2lvblBpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBjaXJjbGVPZkNvbmZ1c2lvblBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMv
ZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2NpcmNsZU9mQ29uZnVzaW9uUGl4ZWxTaGFkZXIn
OwordmFyIHNoYWRlciA9ICJcbnVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoU2FtcGxlcjtcblxudmFy
eWluZyB2ZWMyIHZVVjtcblxudW5pZm9ybSB2ZWMyIGNhbWVyYU1pbk1heFo7XG5cbnVuaWZvcm0g
ZmxvYXQgZm9jdXNEaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgY29jUHJlY2FsY3VsYXRpb247XG52
b2lkIG1haW4odm9pZClcbntcbmZsb2F0IGRlcHRoPXRleHR1cmUyRChkZXB0aFNhbXBsZXIsdlVW
KS5yO1xuZmxvYXQgcGl4ZWxEaXN0YW5jZT0oY2FtZXJhTWluTWF4Wi54KyhjYW1lcmFNaW5NYXha
LnktY2FtZXJhTWluTWF4Wi54KSpkZXB0aCkqMTAwMC4wO1xuZmxvYXQgY29jPWFicyhjb2NQcmVj
YWxjdWxhdGlvbiogKChmb2N1c0Rpc3RhbmNlLXBpeGVsRGlzdGFuY2UpL3BpeGVsRGlzdGFuY2Up
KTtcbmNvYz1jbGFtcChjb2MsMC4wLDEuMCk7XG5nbF9GcmFnQ29sb3I9dmVjNChjb2MsZGVwdGgs
Y29jLDEuMCk7XG59XG4iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRk
ZW4gKi8KK3ZhciBjaXJjbGVPZkNvbmZ1c2lvblBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBz
aGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2NvbG9y
LmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9TaGFkZXJzL2NvbG9yLmZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGNvbG9yUGl4
ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY29sb3JQaXhl
bFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY29sb3JQaXhlbFNoYWRlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9T
aGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRl
L2NsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVk
ZS9jbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1NoYWRlcnNJbmNsdWRlX2NsaXBQbGFuZUZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2Ns
aXBQbGFuZUZyYWdtZW50ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lRnJh
Z21lbnQudHMiKTsKKworCisKK3ZhciBuYW1lID0gJ2NvbG9yUGl4ZWxTaGFkZXInOwordmFyIHNo
YWRlciA9ICIjaWZkZWYgVkVSVEVYQ09MT1JcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG4jZWxzZVxu
dW5pZm9ybSB2ZWM0IGNvbG9yO1xuI2VuZGlmXG4jaW5jbHVkZTxjbGlwUGxhbmVGcmFnbWVudERl
Y2xhcmF0aW9uPlxudm9pZCBtYWluKHZvaWQpIHtcbiNpbmNsdWRlPGNsaXBQbGFuZUZyYWdtZW50
PlxuI2lmZGVmIFZFUlRFWENPTE9SXG5nbF9GcmFnQ29sb3I9dkNvbG9yO1xuI2Vsc2VcbmdsX0Zy
YWdDb2xvcj1jb2xvcjtcbiNlbmRpZlxufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7
CisvKiogQGhpZGRlbiAqLwordmFyIGNvbG9yUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNo
YWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvY29sb3Iu
dmVydGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vU2hhZGVycy9jb2xvci52ZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGNvbG9yVmVydGV4U2hhZGVy
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNvbG9yVmVydGV4U2hhZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjb2xvclZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4v
TWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJz
SW5jbHVkZV9ib25lc0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRpb24g
Ki8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc0RlY2xhcmF0aW9uLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2NsaXBQbGFuZVZlcnRleERlY2xh
cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uICovICIuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb24udHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW5zdGFuY2VzRGVjbGFyYXRp
b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFk
ZXJzSW5jbHVkZS9pbnN0YW5jZXNEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbnN0YW5jZXNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaW5z
dGFuY2VzVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzVmVydGV4
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2JvbmVzVmVy
dGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL1NoYWRlcnNJbmNsdWRlL2JvbmVzVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1
ZGUvYm9uZXNWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0lu
Y2x1ZGVfY2xpcFBsYW5lVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleCAqLyAi
Li9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleC50cyIpOworCisKKworCisK
KworCit2YXIgbmFtZSA9ICdjb2xvclZlcnRleFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxuYXR0
cmlidXRlIHZlYzMgcG9zaXRpb247XG4jaWZkZWYgVkVSVEVYQ09MT1JcbmF0dHJpYnV0ZSB2ZWM0
IGNvbG9yO1xuI2VuZGlmXG4jaW5jbHVkZTxib25lc0RlY2xhcmF0aW9uPlxuI2luY2x1ZGU8Y2xp
cFBsYW5lVmVydGV4RGVjbGFyYXRpb24+XG5cbiNpbmNsdWRlPGluc3RhbmNlc0RlY2xhcmF0aW9u
PlxudW5pZm9ybSBtYXQ0IHZpZXdQcm9qZWN0aW9uO1xuXG4jaWZkZWYgVkVSVEVYQ09MT1JcbnZh
cnlpbmcgdmVjNCB2Q29sb3I7XG4jZW5kaWZcbnZvaWQgbWFpbih2b2lkKSB7XG4jaW5jbHVkZTxp
bnN0YW5jZXNWZXJ0ZXg+XG4jaW5jbHVkZTxib25lc1ZlcnRleD5cbnZlYzQgd29ybGRQb3M9Zmlu
YWxXb3JsZCp2ZWM0KHBvc2l0aW9uLDEuMCk7XG5nbF9Qb3NpdGlvbj12aWV3UHJvamVjdGlvbip3
b3JsZFBvcztcbiNpbmNsdWRlPGNsaXBQbGFuZVZlcnRleD5cbiNpZmRlZiBWRVJURVhDT0xPUlxu
XG52Q29sb3I9Y29sb3I7XG4jZW5kaWZcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVy
OworLyoqIEBoaWRkZW4gKi8KK3ZhciBjb2xvclZlcnRleFNoYWRlciA9IHsgbmFtZTogbmFtZSwg
c2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9jb2xv
ckNvcnJlY3Rpb24uZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL2NvbG9yQ29ycmVjdGlvbi5m
cmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogY29sb3JDb3JyZWN0aW9uUGl4ZWxTaGFk
ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY29sb3JDb3JyZWN0aW9u
UGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbG9yQ29ycmVjdGlvblBpeGVsU2hh
ZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0g
J2NvbG9yQ29ycmVjdGlvblBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG51bmlmb3JtIHNh
bXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9yVGFibGU7XG5c
bnZhcnlpbmcgdmVjMiB2VVY7XG5cbmNvbnN0IGZsb2F0IFNMSUNFX0NPVU5UPTE2LjA7XG5cbnZl
YzQgc2FtcGxlQXMzRFRleHR1cmUoc2FtcGxlcjJEIHRleHR1cmVTYW1wbGVyLHZlYzMgdXYsZmxv
YXQgd2lkdGgpIHtcbmZsb2F0IHNsaWNlU2l6ZT0xLjAvd2lkdGg7XG5mbG9hdCBzbGljZVBpeGVs
U2l6ZT1zbGljZVNpemUvd2lkdGg7XG5mbG9hdCBzbGljZUlubmVyU2l6ZT1zbGljZVBpeGVsU2l6
ZSood2lkdGgtMS4wKTtcbmZsb2F0IHpTbGljZTA9bWluKGZsb29yKHV2Lnoqd2lkdGgpLHdpZHRo
LTEuMCk7XG5mbG9hdCB6U2xpY2UxPW1pbih6U2xpY2UwKzEuMCx3aWR0aC0xLjApO1xuZmxvYXQg
eE9mZnNldD1zbGljZVBpeGVsU2l6ZSowLjUrdXYueCpzbGljZUlubmVyU2l6ZTtcbmZsb2F0IHMw
PXhPZmZzZXQrKHpTbGljZTAqc2xpY2VTaXplKTtcbmZsb2F0IHMxPXhPZmZzZXQrKHpTbGljZTEq
c2xpY2VTaXplKTtcbnZlYzQgc2xpY2UwQ29sb3I9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZl
YzIoczAsdXYueSkpO1xudmVjNCBzbGljZTFDb2xvcj10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIs
dmVjMihzMSx1di55KSk7XG5mbG9hdCB6T2Zmc2V0PW1vZCh1di56KndpZHRoLDEuMCk7XG52ZWM0
IHJlc3VsdD1taXgoc2xpY2UwQ29sb3Isc2xpY2UxQ29sb3Isek9mZnNldCk7XG5yZXR1cm4gcmVz
dWx0O1xufVxudm9pZCBtYWluKHZvaWQpXG57XG52ZWM0IHNjcmVlbl9jb2xvcj10ZXh0dXJlMkQo
dGV4dHVyZVNhbXBsZXIsdlVWKTtcbmdsX0ZyYWdDb2xvcj1zYW1wbGVBczNEVGV4dHVyZShjb2xv
clRhYmxlLHNjcmVlbl9jb2xvci5yZ2IsU0xJQ0VfQ09VTlQpO1xufSI7CitfTWF0ZXJpYWxzX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVb
bmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGNvbG9yQ29ycmVjdGlvblBpeGVs
U2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9TaGFkZXJzL2NvbnZvbHV0aW9uLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL2Nv
bnZvbHV0aW9uLmZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGNvbnZvbHV0aW9uUGl4ZWxT
aGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY29udm9sdXRpb25Q
aXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY29udm9sdXRpb25QaXhlbFNoYWRlcjsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFs
cy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdjb252
b2x1dGlvblBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG52YXJ5aW5nIHZlYzIgdlVWO1xu
dW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZVNhbXBsZXI7XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6
ZTtcbnVuaWZvcm0gZmxvYXQga2VybmVsWzldO1xudm9pZCBtYWluKHZvaWQpXG57XG52ZWMyIG9u
ZVBpeGVsPXZlYzIoMS4wLDEuMCkvc2NyZWVuU2l6ZTtcbnZlYzQgY29sb3JTdW0gPVxudGV4dHVy
ZTJEKHRleHR1cmVTYW1wbGVyLHZVVitvbmVQaXhlbCp2ZWMyKC0xLC0xKSkqa2VybmVsWzBdICtc
bnRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrb25lUGl4ZWwqdmVjMigwLC0xKSkqa2VybmVs
WzFdICtcbnRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrb25lUGl4ZWwqdmVjMigxLC0xKSkq
a2VybmVsWzJdICtcbnRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrb25lUGl4ZWwqdmVjMigt
MSwwKSkqa2VybmVsWzNdICtcbnRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrb25lUGl4ZWwq
dmVjMigwLDApKSprZXJuZWxbNF0gK1xudGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVitvbmVQ
aXhlbCp2ZWMyKDEsMCkpKmtlcm5lbFs1XSArXG50ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVW
K29uZVBpeGVsKnZlYzIoLTEsMSkpKmtlcm5lbFs2XSArXG50ZXh0dXJlMkQodGV4dHVyZVNhbXBs
ZXIsdlVWK29uZVBpeGVsKnZlYzIoMCwxKSkqa2VybmVsWzddICtcbnRleHR1cmUyRCh0ZXh0dXJl
U2FtcGxlcix2VVYrb25lUGl4ZWwqdmVjMigxLDEpKSprZXJuZWxbOF07XG5mbG9hdCBrZXJuZWxX
ZWlnaHQgPVxua2VybmVsWzBdICtcbmtlcm5lbFsxXSArXG5rZXJuZWxbMl0gK1xua2VybmVsWzNd
ICtcbmtlcm5lbFs0XSArXG5rZXJuZWxbNV0gK1xua2VybmVsWzZdICtcbmtlcm5lbFs3XSArXG5r
ZXJuZWxbOF07XG5pZiAoa2VybmVsV2VpZ2h0PD0wLjApIHtcbmtlcm5lbFdlaWdodD0xLjA7XG59
XG5nbF9GcmFnQ29sb3I9dmVjNCgoY29sb3JTdW0va2VybmVsV2VpZ2h0KS5yZ2IsMSk7XG59IjsK
K19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJd
LlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgY29udm9s
dXRpb25QaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9kZWZhdWx0LmZyYWdtZW50LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMv
ZGVmYXVsdC5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHRQaXhlbFNoYWRlciAqLwor
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJkZWZhdWx0UGl4ZWxTaGFkZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIGRlZmF1bHRQaXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0
ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5j
bHVkZV9kZWZhdWx0RnJhZ21lbnREZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0RnJh
Z21lbnREZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2RlZmF1bHRGcmFn
bWVudERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJ
bmNsdWRlX2RlZmF1bHRVYm9EZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0VWJvRGVj
bGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0VWJvRGVjbGFyYXRp
b24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVscGVy
RnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1No
YWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzSW5jbHVkZV9saWdodEZyYWdtZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1
ZGUvbGlnaHRGcmFnbWVudERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
bGlnaHRGcmFnbWVudERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNJbmNsdWRlX2xpZ2h0VWJvRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbGlnaHRV
Ym9EZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0VWJvRGVjbGFy
YXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbGln
aHRzRnJhZ21lbnRGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbGlnaHRzRnJhZ21lbnRGdW5jdGlv
bnMgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9saWdodHNGcmFnbWVudEZ1bmN0aW9ucy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9zaGFkb3dzRnJh
Z21lbnRGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvc2hhZG93c0ZyYWdtZW50RnVuY3Rpb25zICov
ICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvc2hhZG93c0ZyYWdtZW50RnVuY3Rpb25zLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2ZyZXNuZWxGdW5jdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9TaGFkZXJzSW5jbHVkZS9mcmVzbmVsRnVuY3Rpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9mcmVzbmVsRnVuY3Rpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hh
ZGVyc0luY2x1ZGVfcmVmbGVjdGlvbkZ1bmN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL3JlZmxlY3Rpb25G
dW5jdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3JlZmxlY3Rpb25GdW5jdGlvbi50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbWFnZVByb2Nl
c3NpbmdEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRGVjbGFyYXRp
b24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbWFnZVByb2Nlc3NpbmdEZWNsYXJhdGlv
bi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbWFnZVBy
b2Nlc3NpbmdGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9u
cyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9ucy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9idW1wRnJhZ21l
bnRGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2J1bXBGcmFnbWVudEZ1bmN0aW9ucyAqLyAiLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2J1bXBGcmFnbWVudEZ1bmN0aW9ucy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVGcmFnbWVudERlY2xh
cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uICovICIu
L1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbi50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0aERlY2xh
cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMv
U2hhZGVyc0luY2x1ZGUvbG9nRGVwdGhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9mb2dGcmFnbWVudERlY2xhcmF0aW9uX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJz
SW5jbHVkZS9mb2dGcmFnbWVudERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1
ZGUvZm9nRnJhZ21lbnREZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVGcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvY2xpcFBs
YW5lRnJhZ21lbnQgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVu
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9idW1wRnJh
Z21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL1NoYWRlcnNJbmNsdWRlL2J1bXBGcmFnbWVudCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJ
bmNsdWRlL2J1bXBGcmFnbWVudC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzSW5jbHVkZV9kZXB0aFByZVBhc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2RlcHRoUHJlUGFzcyAqLyAi
Li9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2RlcHRoUHJlUGFzcy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9saWdodEZyYWdtZW50X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9saWdodEZyYWdtZW50ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbGlnaHRGcmFnbWVu
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0
aEZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aEZyYWdtZW50ICovICIuL1NoYWRlcnMv
U2hhZGVyc0luY2x1ZGUvbG9nRGVwdGhGcmFnbWVudC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzSW5jbHVkZV9mb2dGcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvZm9nRnJh
Z21lbnQgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9mb2dGcmFnbWVudC50cyIpOworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCit2YXIgbmFtZSA9ICdkZWZh
dWx0UGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICIjaW5jbHVkZTxfX2RlY2xfX2RlZmF1bHRG
cmFnbWVudD5cbiNpZiBkZWZpbmVkKEJVTVApIHx8ICFkZWZpbmVkKE5PUk1BTClcbiNleHRlbnNp
b24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG4jZW5kaWZcbiNkZWZpbmUg
Q1VTVE9NX0ZSQUdNRU5UX0JFR0lOXG4jaWZkZWYgTE9HQVJJVEhNSUNERVBUSFxuI2V4dGVuc2lv
biBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZVxuI2VuZGlmXG5cbiNkZWZpbmUgUkVDSVBST0NB
TF9QSTIgMC4xNTkxNTQ5NFxudW5pZm9ybSB2ZWMzIHZFeWVQb3NpdGlvbjtcbnVuaWZvcm0gdmVj
MyB2QW1iaWVudENvbG9yO1xuXG52YXJ5aW5nIHZlYzMgdlBvc2l0aW9uVztcbiNpZmRlZiBOT1JN
QUxcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsVztcbiNlbmRpZlxuI2lmZGVmIFZFUlRFWENPTE9SXG52
YXJ5aW5nIHZlYzQgdkNvbG9yO1xuI2VuZGlmXG4jaWZkZWYgTUFJTlVWMVxudmFyeWluZyB2ZWMy
IHZNYWluVVYxO1xuI2VuZGlmXG4jaWZkZWYgTUFJTlVWMlxudmFyeWluZyB2ZWMyIHZNYWluVVYy
O1xuI2VuZGlmXG5cbiNpbmNsdWRlPGhlbHBlckZ1bmN0aW9ucz5cblxuI2luY2x1ZGU8X19kZWNs
X19saWdodEZyYWdtZW50PlswLi5tYXhTaW11bHRhbmVvdXNMaWdodHNdXG4jaW5jbHVkZTxsaWdo
dHNGcmFnbWVudEZ1bmN0aW9ucz5cbiNpbmNsdWRlPHNoYWRvd3NGcmFnbWVudEZ1bmN0aW9ucz5c
blxuI2lmZGVmIERJRkZVU0VcbiNpZiBESUZGVVNFRElSRUNUVVYgPT0gMVxuI2RlZmluZSB2RGlm
ZnVzZVVWIHZNYWluVVYxXG4jZWxpZiBESUZGVVNFRElSRUNUVVYgPT0gMlxuI2RlZmluZSB2RGlm
ZnVzZVVWIHZNYWluVVYyXG4jZWxzZVxudmFyeWluZyB2ZWMyIHZEaWZmdXNlVVY7XG4jZW5kaWZc
bnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VTYW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYgQU1CSUVO
VFxuI2lmIEFNQklFTlRESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZBbWJpZW50VVYgdk1haW5VVjFc
biNlbGlmIEFNQklFTlRESVJFQ1RVViA9PSAyXG4jZGVmaW5lIHZBbWJpZW50VVYgdk1haW5VVjJc
biNlbHNlXG52YXJ5aW5nIHZlYzIgdkFtYmllbnRVVjtcbiNlbmRpZlxudW5pZm9ybSBzYW1wbGVy
MkQgYW1iaWVudFNhbXBsZXI7XG4jZW5kaWZcbiNpZmRlZiBPUEFDSVRZXG4jaWYgT1BBQ0lUWURJ
UkVDVFVWID09IDFcbiNkZWZpbmUgdk9wYWNpdHlVViB2TWFpblVWMVxuI2VsaWYgT1BBQ0lUWURJ
UkVDVFVWID09IDJcbiNkZWZpbmUgdk9wYWNpdHlVViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcg
dmVjMiB2T3BhY2l0eVVWO1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCBvcGFjaXR5U2FtcGxl
cjtcbiNlbmRpZlxuI2lmZGVmIEVNSVNTSVZFXG4jaWYgRU1JU1NJVkVESVJFQ1RVViA9PSAxXG4j
ZGVmaW5lIHZFbWlzc2l2ZVVWIHZNYWluVVYxXG4jZWxpZiBFTUlTU0lWRURJUkVDVFVWID09IDJc
biNkZWZpbmUgdkVtaXNzaXZlVVYgdk1haW5VVjJcbiNlbHNlXG52YXJ5aW5nIHZlYzIgdkVtaXNz
aXZlVVY7XG4jZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlU2FtcGxlcjtcbiNlbmRp
ZlxuI2lmZGVmIExJR0hUTUFQXG4jaWYgTElHSFRNQVBESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZM
aWdodG1hcFVWIHZNYWluVVYxXG4jZWxpZiBMSUdIVE1BUERJUkVDVFVWID09IDJcbiNkZWZpbmUg
dkxpZ2h0bWFwVVYgdk1haW5VVjJcbiNlbHNlXG52YXJ5aW5nIHZlYzIgdkxpZ2h0bWFwVVY7XG4j
ZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0bWFwU2FtcGxlcjtcbiNlbmRpZlxuI2lmZGVm
IFJFRlJBQ1RJT05cbiNpZmRlZiBSRUZSQUNUSU9OTUFQXzNEXG51bmlmb3JtIHNhbXBsZXJDdWJl
IHJlZnJhY3Rpb25DdWJlU2FtcGxlcjtcbiNlbHNlXG51bmlmb3JtIHNhbXBsZXIyRCByZWZyYWN0
aW9uMkRTYW1wbGVyO1xuI2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKFNQRUNVTEFSKSAmJiBk
ZWZpbmVkKFNQRUNVTEFSVEVSTSlcbiNpZiBTUEVDVUxBUkRJUkVDVFVWID09IDFcbiNkZWZpbmUg
dlNwZWN1bGFyVVYgdk1haW5VVjFcbiNlbGlmIFNQRUNVTEFSRElSRUNUVVYgPT0gMlxuI2RlZmlu
ZSB2U3BlY3VsYXJVViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcgdmVjMiB2U3BlY3VsYXJVVjtc
biNlbmRpZlxudW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJTYW1wbGVyO1xuI2VuZGlmXG4jaWZk
ZWYgQUxQSEFURVNUXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0T2ZmO1xuI2VuZGlmXG5cbiNpbmNs
dWRlPGZyZXNuZWxGdW5jdGlvbj5cblxuI2lmZGVmIFJFRkxFQ1RJT05cbiNpZmRlZiBSRUZMRUNU
SU9OTUFQXzNEXG51bmlmb3JtIHNhbXBsZXJDdWJlIHJlZmxlY3Rpb25DdWJlU2FtcGxlcjtcbiNl
bHNlXG51bmlmb3JtIHNhbXBsZXIyRCByZWZsZWN0aW9uMkRTYW1wbGVyO1xuI2VuZGlmXG4jaWZk
ZWYgUkVGTEVDVElPTk1BUF9TS1lCT1hcbnZhcnlpbmcgdmVjMyB2UG9zaXRpb25VVlc7XG4jZWxz
ZVxuI2lmIGRlZmluZWQoUkVGTEVDVElPTk1BUF9FUVVJUkVDVEFOR1VMQVJfRklYRUQpIHx8IGRl
ZmluZWQoUkVGTEVDVElPTk1BUF9NSVJST1JFREVRVUlSRUNUQU5HVUxBUl9GSVhFRClcbnZhcnlp
bmcgdmVjMyB2RGlyZWN0aW9uVztcbiNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZTxyZWZsZWN0aW9u
RnVuY3Rpb24+XG4jZW5kaWZcbiNpbmNsdWRlPGltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uPlxu
I2luY2x1ZGU8aW1hZ2VQcm9jZXNzaW5nRnVuY3Rpb25zPlxuI2luY2x1ZGU8YnVtcEZyYWdtZW50
RnVuY3Rpb25zPlxuI2luY2x1ZGU8Y2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbj5cbiNpbmNs
dWRlPGxvZ0RlcHRoRGVjbGFyYXRpb24+XG4jaW5jbHVkZTxmb2dGcmFnbWVudERlY2xhcmF0aW9u
PlxuI2RlZmluZSBDVVNUT01fRlJBR01FTlRfREVGSU5JVElPTlNcbnZvaWQgbWFpbih2b2lkKSB7
XG4jZGVmaW5lIENVU1RPTV9GUkFHTUVOVF9NQUlOX0JFR0lOXG4jaW5jbHVkZTxjbGlwUGxhbmVG
cmFnbWVudD5cbnZlYzMgdmlld0RpcmVjdGlvblc9bm9ybWFsaXplKHZFeWVQb3NpdGlvbi12UG9z
aXRpb25XKTtcblxudmVjNCBiYXNlQ29sb3I9dmVjNCgxLiwxLiwxLiwxLik7XG52ZWMzIGRpZmZ1
c2VDb2xvcj12RGlmZnVzZUNvbG9yLnJnYjtcblxuZmxvYXQgYWxwaGE9dkRpZmZ1c2VDb2xvci5h
O1xuXG4jaWZkZWYgTk9STUFMXG52ZWMzIG5vcm1hbFc9bm9ybWFsaXplKHZOb3JtYWxXKTtcbiNl
bHNlXG52ZWMzIG5vcm1hbFc9bm9ybWFsaXplKC1jcm9zcyhkRmR4KHZQb3NpdGlvblcpLGRGZHko
dlBvc2l0aW9uVykpKTtcbiNlbmRpZlxuI2luY2x1ZGU8YnVtcEZyYWdtZW50PlxuI2lmZGVmIFRX
T1NJREVETElHSFRJTkdcbm5vcm1hbFc9Z2xfRnJvbnRGYWNpbmcgPyBub3JtYWxXIDogLW5vcm1h
bFc7XG4jZW5kaWZcbiNpZmRlZiBESUZGVVNFXG5iYXNlQ29sb3I9dGV4dHVyZTJEKGRpZmZ1c2VT
YW1wbGVyLHZEaWZmdXNlVVYrdXZPZmZzZXQpO1xuI2lmZGVmIEFMUEhBVEVTVFxuaWYgKGJhc2VD
b2xvci5hPGFscGhhQ3V0T2ZmKVxuZGlzY2FyZDtcbiNlbmRpZlxuI2lmZGVmIEFMUEhBRlJPTURJ
RkZVU0VcbmFscGhhKj1iYXNlQ29sb3IuYTtcbiNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJBR01F
TlRfVVBEQVRFX0FMUEhBXG5iYXNlQ29sb3IucmdiKj12RGlmZnVzZUluZm9zLnk7XG4jZW5kaWZc
biNpbmNsdWRlPGRlcHRoUHJlUGFzcz5cbiNpZmRlZiBWRVJURVhDT0xPUlxuYmFzZUNvbG9yLnJn
Yio9dkNvbG9yLnJnYjtcbiNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJBR01FTlRfVVBEQVRFX0RJ
RkZVU0VcblxudmVjMyBiYXNlQW1iaWVudENvbG9yPXZlYzMoMS4sMS4sMS4pO1xuI2lmZGVmIEFN
QklFTlRcbmJhc2VBbWJpZW50Q29sb3I9dGV4dHVyZTJEKGFtYmllbnRTYW1wbGVyLHZBbWJpZW50
VVYrdXZPZmZzZXQpLnJnYip2QW1iaWVudEluZm9zLnk7XG4jZW5kaWZcbiNkZWZpbmUgQ1VTVE9N
X0ZSQUdNRU5UX0JFRk9SRV9MSUdIVFNcblxuI2lmZGVmIFNQRUNVTEFSVEVSTVxuZmxvYXQgZ2xv
c3NpbmVzcz12U3BlY3VsYXJDb2xvci5hO1xudmVjMyBzcGVjdWxhckNvbG9yPXZTcGVjdWxhckNv
bG9yLnJnYjtcbiNpZmRlZiBTUEVDVUxBUlxudmVjNCBzcGVjdWxhck1hcENvbG9yPXRleHR1cmUy
RChzcGVjdWxhclNhbXBsZXIsdlNwZWN1bGFyVVYrdXZPZmZzZXQpO1xuc3BlY3VsYXJDb2xvcj1z
cGVjdWxhck1hcENvbG9yLnJnYjtcbiNpZmRlZiBHTE9TU0lORVNTXG5nbG9zc2luZXNzPWdsb3Nz
aW5lc3Mqc3BlY3VsYXJNYXBDb2xvci5hO1xuI2VuZGlmXG4jZW5kaWZcbiNlbHNlXG5mbG9hdCBn
bG9zc2luZXNzPTAuO1xuI2VuZGlmXG5cbnZlYzMgZGlmZnVzZUJhc2U9dmVjMygwLiwwLiwwLik7
XG5saWdodGluZ0luZm8gaW5mbztcbiNpZmRlZiBTUEVDVUxBUlRFUk1cbnZlYzMgc3BlY3VsYXJC
YXNlPXZlYzMoMC4sMC4sMC4pO1xuI2VuZGlmXG5mbG9hdCBzaGFkb3c9MS47XG4jaWZkZWYgTElH
SFRNQVBcbnZlYzMgbGlnaHRtYXBDb2xvcj10ZXh0dXJlMkQobGlnaHRtYXBTYW1wbGVyLHZMaWdo
dG1hcFVWK3V2T2Zmc2V0KS5yZ2IqdkxpZ2h0bWFwSW5mb3MueTtcbiNlbmRpZlxuI2luY2x1ZGU8
bGlnaHRGcmFnbWVudD5bMC4ubWF4U2ltdWx0YW5lb3VzTGlnaHRzXVxuXG52ZWMzIHJlZnJhY3Rp
b25Db2xvcj12ZWMzKDAuLDAuLDAuKTtcbiNpZmRlZiBSRUZSQUNUSU9OXG52ZWMzIHJlZnJhY3Rp
b25WZWN0b3I9bm9ybWFsaXplKHJlZnJhY3QoLXZpZXdEaXJlY3Rpb25XLG5vcm1hbFcsdlJlZnJh
Y3Rpb25JbmZvcy55KSk7XG4jaWZkZWYgUkVGUkFDVElPTk1BUF8zRFxucmVmcmFjdGlvblZlY3Rv
ci55PXJlZnJhY3Rpb25WZWN0b3IueSp2UmVmcmFjdGlvbkluZm9zLnc7XG5pZiAoZG90KHJlZnJh
Y3Rpb25WZWN0b3Isdmlld0RpcmVjdGlvblcpPDEuMCkge1xucmVmcmFjdGlvbkNvbG9yPXRleHR1
cmVDdWJlKHJlZnJhY3Rpb25DdWJlU2FtcGxlcixyZWZyYWN0aW9uVmVjdG9yKS5yZ2I7XG59XG4j
ZWxzZVxudmVjMyB2UmVmcmFjdGlvblVWVz12ZWMzKHJlZnJhY3Rpb25NYXRyaXgqKHZpZXcqdmVj
NCh2UG9zaXRpb25XK3JlZnJhY3Rpb25WZWN0b3IqdlJlZnJhY3Rpb25JbmZvcy56LDEuMCkpKTtc
bnZlYzIgcmVmcmFjdGlvbkNvb3Jkcz12UmVmcmFjdGlvblVWVy54eS92UmVmcmFjdGlvblVWVy56
O1xucmVmcmFjdGlvbkNvb3Jkcy55PTEuMC1yZWZyYWN0aW9uQ29vcmRzLnk7XG5yZWZyYWN0aW9u
Q29sb3I9dGV4dHVyZTJEKHJlZnJhY3Rpb24yRFNhbXBsZXIscmVmcmFjdGlvbkNvb3Jkcykucmdi
O1xuI2VuZGlmXG4jaWZkZWYgSVNfUkVGUkFDVElPTl9MSU5FQVJcbnJlZnJhY3Rpb25Db2xvcj10
b0dhbW1hU3BhY2UocmVmcmFjdGlvbkNvbG9yKTtcbiNlbmRpZlxucmVmcmFjdGlvbkNvbG9yKj12
UmVmcmFjdGlvbkluZm9zLng7XG4jZW5kaWZcblxudmVjMyByZWZsZWN0aW9uQ29sb3I9dmVjMygw
LiwwLiwwLik7XG4jaWZkZWYgUkVGTEVDVElPTlxudmVjMyB2UmVmbGVjdGlvblVWVz1jb21wdXRl
UmVmbGVjdGlvbkNvb3Jkcyh2ZWM0KHZQb3NpdGlvblcsMS4wKSxub3JtYWxXKTtcbiNpZmRlZiBS
RUZMRUNUSU9OTUFQXzNEXG4jaWZkZWYgUk9VR0hORVNTXG5mbG9hdCBiaWFzPXZSZWZsZWN0aW9u
SW5mb3MueTtcbiNpZmRlZiBTUEVDVUxBUlRFUk1cbiNpZmRlZiBTUEVDVUxBUlxuI2lmZGVmIEdM
T1NTSU5FU1NcbmJpYXMqPSgxLjAtc3BlY3VsYXJNYXBDb2xvci5hKTtcbiNlbmRpZlxuI2VuZGlm
XG4jZW5kaWZcbnJlZmxlY3Rpb25Db2xvcj10ZXh0dXJlQ3ViZShyZWZsZWN0aW9uQ3ViZVNhbXBs
ZXIsdlJlZmxlY3Rpb25VVlcsYmlhcykucmdiO1xuI2Vsc2VcbnJlZmxlY3Rpb25Db2xvcj10ZXh0
dXJlQ3ViZShyZWZsZWN0aW9uQ3ViZVNhbXBsZXIsdlJlZmxlY3Rpb25VVlcpLnJnYjtcbiNlbmRp
ZlxuI2Vsc2VcbnZlYzIgY29vcmRzPXZSZWZsZWN0aW9uVVZXLnh5O1xuI2lmZGVmIFJFRkxFQ1RJ
T05NQVBfUFJPSkVDVElPTlxuY29vcmRzLz12UmVmbGVjdGlvblVWVy56O1xuI2VuZGlmXG5jb29y
ZHMueT0xLjAtY29vcmRzLnk7XG5yZWZsZWN0aW9uQ29sb3I9dGV4dHVyZTJEKHJlZmxlY3Rpb24y
RFNhbXBsZXIsY29vcmRzKS5yZ2I7XG4jZW5kaWZcbiNpZmRlZiBJU19SRUZMRUNUSU9OX0xJTkVB
UlxucmVmbGVjdGlvbkNvbG9yPXRvR2FtbWFTcGFjZShyZWZsZWN0aW9uQ29sb3IpO1xuI2VuZGlm
XG5yZWZsZWN0aW9uQ29sb3IqPXZSZWZsZWN0aW9uSW5mb3MueDtcbiNpZmRlZiBSRUZMRUNUSU9O
RlJFU05FTFxuZmxvYXQgcmVmbGVjdGlvbkZyZXNuZWxUZXJtPWNvbXB1dGVGcmVzbmVsVGVybSh2
aWV3RGlyZWN0aW9uVyxub3JtYWxXLHJlZmxlY3Rpb25SaWdodENvbG9yLmEscmVmbGVjdGlvbkxl
ZnRDb2xvci5hKTtcbiNpZmRlZiBSRUZMRUNUSU9ORlJFU05FTEZST01TUEVDVUxBUlxuI2lmZGVm
IFNQRUNVTEFSVEVSTVxucmVmbGVjdGlvbkNvbG9yKj1zcGVjdWxhckNvbG9yLnJnYiooMS4wLXJl
ZmxlY3Rpb25GcmVzbmVsVGVybSkrcmVmbGVjdGlvbkZyZXNuZWxUZXJtKnJlZmxlY3Rpb25SaWdo
dENvbG9yLnJnYjtcbiNlbHNlXG5yZWZsZWN0aW9uQ29sb3IqPXJlZmxlY3Rpb25MZWZ0Q29sb3Iu
cmdiKigxLjAtcmVmbGVjdGlvbkZyZXNuZWxUZXJtKStyZWZsZWN0aW9uRnJlc25lbFRlcm0qcmVm
bGVjdGlvblJpZ2h0Q29sb3IucmdiO1xuI2VuZGlmXG4jZWxzZVxucmVmbGVjdGlvbkNvbG9yKj1y
ZWZsZWN0aW9uTGVmdENvbG9yLnJnYiooMS4wLXJlZmxlY3Rpb25GcmVzbmVsVGVybSkrcmVmbGVj
dGlvbkZyZXNuZWxUZXJtKnJlZmxlY3Rpb25SaWdodENvbG9yLnJnYjtcbiNlbmRpZlxuI2VuZGlm
XG4jZW5kaWZcbiNpZmRlZiBSRUZSQUNUSU9ORlJFU05FTFxuZmxvYXQgcmVmcmFjdGlvbkZyZXNu
ZWxUZXJtPWNvbXB1dGVGcmVzbmVsVGVybSh2aWV3RGlyZWN0aW9uVyxub3JtYWxXLHJlZnJhY3Rp
b25SaWdodENvbG9yLmEscmVmcmFjdGlvbkxlZnRDb2xvci5hKTtcbnJlZnJhY3Rpb25Db2xvcio9
cmVmcmFjdGlvbkxlZnRDb2xvci5yZ2IqKDEuMC1yZWZyYWN0aW9uRnJlc25lbFRlcm0pK3JlZnJh
Y3Rpb25GcmVzbmVsVGVybSpyZWZyYWN0aW9uUmlnaHRDb2xvci5yZ2I7XG4jZW5kaWZcbiNpZmRl
ZiBPUEFDSVRZXG52ZWM0IG9wYWNpdHlNYXA9dGV4dHVyZTJEKG9wYWNpdHlTYW1wbGVyLHZPcGFj
aXR5VVYrdXZPZmZzZXQpO1xuI2lmZGVmIE9QQUNJVFlSR0Jcbm9wYWNpdHlNYXAucmdiPW9wYWNp
dHlNYXAucmdiKnZlYzMoMC4zLDAuNTksMC4xMSk7XG5hbHBoYSo9KG9wYWNpdHlNYXAueCtvcGFj
aXR5TWFwLnkrb3BhY2l0eU1hcC56KSogdk9wYWNpdHlJbmZvcy55O1xuI2Vsc2VcbmFscGhhKj1v
cGFjaXR5TWFwLmEqdk9wYWNpdHlJbmZvcy55O1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBWRVJU
RVhBTFBIQVxuYWxwaGEqPXZDb2xvci5hO1xuI2VuZGlmXG4jaWZkZWYgT1BBQ0lUWUZSRVNORUxc
bmZsb2F0IG9wYWNpdHlGcmVzbmVsVGVybT1jb21wdXRlRnJlc25lbFRlcm0odmlld0RpcmVjdGlv
blcsbm9ybWFsVyxvcGFjaXR5UGFydHMueixvcGFjaXR5UGFydHMudyk7XG5hbHBoYSs9b3BhY2l0
eVBhcnRzLngqKDEuMC1vcGFjaXR5RnJlc25lbFRlcm0pK29wYWNpdHlGcmVzbmVsVGVybSpvcGFj
aXR5UGFydHMueTtcbiNlbmRpZlxuXG52ZWMzIGVtaXNzaXZlQ29sb3I9dkVtaXNzaXZlQ29sb3I7
XG4jaWZkZWYgRU1JU1NJVkVcbmVtaXNzaXZlQ29sb3IrPXRleHR1cmUyRChlbWlzc2l2ZVNhbXBs
ZXIsdkVtaXNzaXZlVVYrdXZPZmZzZXQpLnJnYip2RW1pc3NpdmVJbmZvcy55O1xuI2VuZGlmXG4j
aWZkZWYgRU1JU1NJVkVGUkVTTkVMXG5mbG9hdCBlbWlzc2l2ZUZyZXNuZWxUZXJtPWNvbXB1dGVG
cmVzbmVsVGVybSh2aWV3RGlyZWN0aW9uVyxub3JtYWxXLGVtaXNzaXZlUmlnaHRDb2xvci5hLGVt
aXNzaXZlTGVmdENvbG9yLmEpO1xuZW1pc3NpdmVDb2xvcio9ZW1pc3NpdmVMZWZ0Q29sb3Iucmdi
KigxLjAtZW1pc3NpdmVGcmVzbmVsVGVybSkrZW1pc3NpdmVGcmVzbmVsVGVybSplbWlzc2l2ZVJp
Z2h0Q29sb3IucmdiO1xuI2VuZGlmXG5cbiNpZmRlZiBESUZGVVNFRlJFU05FTFxuZmxvYXQgZGlm
ZnVzZUZyZXNuZWxUZXJtPWNvbXB1dGVGcmVzbmVsVGVybSh2aWV3RGlyZWN0aW9uVyxub3JtYWxX
LGRpZmZ1c2VSaWdodENvbG9yLmEsZGlmZnVzZUxlZnRDb2xvci5hKTtcbmRpZmZ1c2VCYXNlKj1k
aWZmdXNlTGVmdENvbG9yLnJnYiooMS4wLWRpZmZ1c2VGcmVzbmVsVGVybSkrZGlmZnVzZUZyZXNu
ZWxUZXJtKmRpZmZ1c2VSaWdodENvbG9yLnJnYjtcbiNlbmRpZlxuXG4jaWZkZWYgRU1JU1NJVkVB
U0lMTFVNSU5BVElPTlxudmVjMyBmaW5hbERpZmZ1c2U9Y2xhbXAoZGlmZnVzZUJhc2UqZGlmZnVz
ZUNvbG9yK3ZBbWJpZW50Q29sb3IsMC4wLDEuMCkqYmFzZUNvbG9yLnJnYjtcbiNlbHNlXG4jaWZk
ZWYgTElOS0VNSVNTSVZFV0lUSERJRkZVU0VcbnZlYzMgZmluYWxEaWZmdXNlPWNsYW1wKChkaWZm
dXNlQmFzZStlbWlzc2l2ZUNvbG9yKSpkaWZmdXNlQ29sb3IrdkFtYmllbnRDb2xvciwwLjAsMS4w
KSpiYXNlQ29sb3IucmdiO1xuI2Vsc2VcbnZlYzMgZmluYWxEaWZmdXNlPWNsYW1wKGRpZmZ1c2VC
YXNlKmRpZmZ1c2VDb2xvcitlbWlzc2l2ZUNvbG9yK3ZBbWJpZW50Q29sb3IsMC4wLDEuMCkqYmFz
ZUNvbG9yLnJnYjtcbiNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgU1BFQ1VMQVJURVJNXG52ZWMzIGZp
bmFsU3BlY3VsYXI9c3BlY3VsYXJCYXNlKnNwZWN1bGFyQ29sb3I7XG4jaWZkZWYgU1BFQ1VMQVJP
VkVSQUxQSEFcbmFscGhhPWNsYW1wKGFscGhhK2RvdChmaW5hbFNwZWN1bGFyLHZlYzMoMC4zLDAu
NTksMC4xMSkpLDAuLDEuKTtcbiNlbmRpZlxuI2Vsc2VcbnZlYzMgZmluYWxTcGVjdWxhcj12ZWMz
KDAuMCk7XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9OT1ZFUkFMUEhBXG5hbHBoYT1jbGFtcChh
bHBoYStkb3QocmVmbGVjdGlvbkNvbG9yLHZlYzMoMC4zLDAuNTksMC4xMSkpLDAuLDEuKTtcbiNl
bmRpZlxuXG4jaWZkZWYgRU1JU1NJVkVBU0lMTFVNSU5BVElPTlxudmVjNCBjb2xvcj12ZWM0KGNs
YW1wKGZpbmFsRGlmZnVzZSpiYXNlQW1iaWVudENvbG9yK2ZpbmFsU3BlY3VsYXIrcmVmbGVjdGlv
bkNvbG9yK2VtaXNzaXZlQ29sb3IrcmVmcmFjdGlvbkNvbG9yLDAuMCwxLjApLGFscGhhKTtcbiNl
bHNlXG52ZWM0IGNvbG9yPXZlYzQoZmluYWxEaWZmdXNlKmJhc2VBbWJpZW50Q29sb3IrZmluYWxT
cGVjdWxhcityZWZsZWN0aW9uQ29sb3IrcmVmcmFjdGlvbkNvbG9yLGFscGhhKTtcbiNlbmRpZlxu
XG4jaWZkZWYgTElHSFRNQVBcbiNpZm5kZWYgTElHSFRNQVBFWENMVURFRFxuI2lmZGVmIFVTRUxJ
R0hUTUFQQVNTSEFET1dNQVBcbmNvbG9yLnJnYio9bGlnaHRtYXBDb2xvcjtcbiNlbHNlXG5jb2xv
ci5yZ2IrPWxpZ2h0bWFwQ29sb3I7XG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlmXG4jZGVmaW5lIENV
U1RPTV9GUkFHTUVOVF9CRUZPUkVfRk9HXG5jb2xvci5yZ2I9bWF4KGNvbG9yLnJnYiwwLik7XG4j
aW5jbHVkZTxsb2dEZXB0aEZyYWdtZW50PlxuI2luY2x1ZGU8Zm9nRnJhZ21lbnQ+XG5cblxuI2lm
ZGVmIElNQUdFUFJPQ0VTU0lOR1BPU1RQUk9DRVNTXG5jb2xvci5yZ2I9dG9MaW5lYXJTcGFjZShj
b2xvci5yZ2IpO1xuI2Vsc2VcbiNpZmRlZiBJTUFHRVBST0NFU1NJTkdcbmNvbG9yLnJnYj10b0xp
bmVhclNwYWNlKGNvbG9yLnJnYik7XG5jb2xvcj1hcHBseUltYWdlUHJvY2Vzc2luZyhjb2xvcik7
XG4jZW5kaWZcbiNlbmRpZlxuY29sb3IuYSo9dmlzaWJpbGl0eTtcbiNpZmRlZiBQUkVNVUxUSVBM
WUFMUEhBXG5cbmNvbG9yLnJnYio9Y29sb3IuYTtcbiNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJB
R01FTlRfQkVGT1JFX0ZSQUdDT0xPUlxuZ2xfRnJhZ0NvbG9yPWNvbG9yO1xufVxuIjsKK19NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRl
cnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZGVmYXVsdFBpeGVs
U2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9TaGFkZXJzL2RlZmF1bHQudmVydGV4LnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL2RlZmF1bHQudmVydGV4
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHRWZXJ0ZXhTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiZGVmYXVsdFZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gZGVmYXVsdFZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9kZWZhdWx0VmVy
dGV4RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvZGVmYXVsdFZlcnRleERlY2xhcmF0aW9uICov
ICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZGVmYXVsdFZlcnRleERlY2xhcmF0aW9uLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2RlZmF1bHRVYm9EZWNs
YXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0VWJvRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVy
cy9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0VWJvRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVscGVyRnVuY3Rpb25zX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNs
dWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1
bmN0aW9ucy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9i
b25lc0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRpb24gKi8gIi4vU2hh
ZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2luc3RhbmNlc0RlY2xhcmF0aW9uX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJ
bmNsdWRlL2luc3RhbmNlc0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
aW5zdGFuY2VzRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hh
ZGVyc0luY2x1ZGVfYnVtcFZlcnRleERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2J1bXBWZXJ0
ZXhEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2J1bXBWZXJ0ZXhEZWNs
YXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9j
bGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVWZXJ0ZXhE
ZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleERl
Y2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRl
X2ZvZ1ZlcnRleERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2ZvZ1ZlcnRleERlY2xhcmF0aW9u
ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZm9nVmVydGV4RGVjbGFyYXRpb24udHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbGlnaHRGcmFnbWVudERl
Y2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2xpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbiAqLyAiLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbi50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9saWdodFVib0RlY2xhcmF0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9TaGFkZXJzSW5jbHVkZS9saWdodFVib0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvbGlnaHRVYm9EZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
U2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFyYXRpb24gKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlv
bi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRh
cmdldHNWZXJ0ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4
RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0
ZXhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5j
bHVkZV9sb2dEZXB0aERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aERlY2xhcmF0
aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbG9nRGVwdGhEZWNsYXJhdGlvbi50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNW
ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleCAqLyAiLi9TaGFkZXJzL1No
YWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbnN0YW5jZXNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2lu
c3RhbmNlc1ZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc1ZlcnRl
eC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9ib25lc1Zl
cnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vU2hhZGVyc0luY2x1ZGUvYm9uZXNWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9ib25lc1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJz
SW5jbHVkZV9idW1wVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9idW1wVmVydGV4ICovICIuL1NoYWRl
cnMvU2hhZGVyc0luY2x1ZGUvYnVtcFZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2NsaXBQ
bGFuZVZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9mb2dWZXJ0ZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L1NoYWRlcnNJbmNsdWRlL2ZvZ1ZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2Zv
Z1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9z
aGFkb3dzVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9zaGFkb3dzVmVydGV4ICovICIuL1NoYWRlcnMv
U2hhZGVyc0luY2x1ZGUvc2hhZG93c1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzSW5jbHVkZV9wb2ludENsb3VkVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9wb2lu
dENsb3VkVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcG9pbnRDbG91ZFZlcnRl
eC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0
aFZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbG9nRGVwdGhWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFk
ZXJzSW5jbHVkZS9sb2dEZXB0aFZlcnRleC50cyIpOworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisKKworCisKK3ZhciBuYW1lID0gJ2RlZmF1bHRWZXJ0ZXhTaGFkZXInOwor
dmFyIHNoYWRlciA9ICIjaW5jbHVkZTxfX2RlY2xfX2RlZmF1bHRWZXJ0ZXg+XG5cbiNkZWZpbmUg
Q1VTVE9NX1ZFUlRFWF9CRUdJTlxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG4jaWZkZWYgTk9S
TUFMXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBUQU5HRU5UXG5hdHRy
aWJ1dGUgdmVjNCB0YW5nZW50O1xuI2VuZGlmXG4jaWZkZWYgVVYxXG5hdHRyaWJ1dGUgdmVjMiB1
djtcbiNlbmRpZlxuI2lmZGVmIFVWMlxuYXR0cmlidXRlIHZlYzIgdXYyO1xuI2VuZGlmXG4jaWZk
ZWYgVkVSVEVYQ09MT1JcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuI2VuZGlmXG4jaW5jbHVkZTxo
ZWxwZXJGdW5jdGlvbnM+XG4jaW5jbHVkZTxib25lc0RlY2xhcmF0aW9uPlxuXG4jaW5jbHVkZTxp
bnN0YW5jZXNEZWNsYXJhdGlvbj5cbiNpZmRlZiBNQUlOVVYxXG52YXJ5aW5nIHZlYzIgdk1haW5V
VjE7XG4jZW5kaWZcbiNpZmRlZiBNQUlOVVYyXG52YXJ5aW5nIHZlYzIgdk1haW5VVjI7XG4jZW5k
aWZcbiNpZiBkZWZpbmVkKERJRkZVU0UpICYmIERJRkZVU0VESVJFQ1RVViA9PSAwXG52YXJ5aW5n
IHZlYzIgdkRpZmZ1c2VVVjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoQU1CSUVOVCkgJiYgQU1CSUVO
VERJUkVDVFVWID09IDBcbnZhcnlpbmcgdmVjMiB2QW1iaWVudFVWO1xuI2VuZGlmXG4jaWYgZGVm
aW5lZChPUEFDSVRZKSAmJiBPUEFDSVRZRElSRUNUVVYgPT0gMFxudmFyeWluZyB2ZWMyIHZPcGFj
aXR5VVY7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKEVNSVNTSVZFKSAmJiBFTUlTU0lWRURJUkVDVFVW
ID09IDBcbnZhcnlpbmcgdmVjMiB2RW1pc3NpdmVVVjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoTElH
SFRNQVApICYmIExJR0hUTUFQRElSRUNUVVYgPT0gMFxudmFyeWluZyB2ZWMyIHZMaWdodG1hcFVW
O1xuI2VuZGlmXG4jaWYgZGVmaW5lZChTUEVDVUxBUikgJiYgZGVmaW5lZChTUEVDVUxBUlRFUk0p
ICYmIFNQRUNVTEFSRElSRUNUVVYgPT0gMFxudmFyeWluZyB2ZWMyIHZTcGVjdWxhclVWO1xuI2Vu
ZGlmXG4jaWYgZGVmaW5lZChCVU1QKSAmJiBCVU1QRElSRUNUVVYgPT0gMFxudmFyeWluZyB2ZWMy
IHZCdW1wVVY7XG4jZW5kaWZcblxudmFyeWluZyB2ZWMzIHZQb3NpdGlvblc7XG4jaWZkZWYgTk9S
TUFMXG52YXJ5aW5nIHZlYzMgdk5vcm1hbFc7XG4jZW5kaWZcbiNpZmRlZiBWRVJURVhDT0xPUlxu
dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbmRpZlxuI2luY2x1ZGU8YnVtcFZlcnRleERlY2xhcmF0
aW9uPlxuI2luY2x1ZGU8Y2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb24+XG4jaW5jbHVkZTxmb2dW
ZXJ0ZXhEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPF9fZGVjbF9fbGlnaHRGcmFnbWVudD5bMC4ubWF4
U2ltdWx0YW5lb3VzTGlnaHRzXVxuI2luY2x1ZGU8bW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVj
bGFyYXRpb24+XG4jaW5jbHVkZTxtb3JwaFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbj5bMC4ubWF4
U2ltdWx0YW5lb3VzTW9ycGhUYXJnZXRzXVxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfU0tZQk9YXG52
YXJ5aW5nIHZlYzMgdlBvc2l0aW9uVVZXO1xuI2VuZGlmXG4jaWYgZGVmaW5lZChSRUZMRUNUSU9O
TUFQX0VRVUlSRUNUQU5HVUxBUl9GSVhFRCkgfHwgZGVmaW5lZChSRUZMRUNUSU9OTUFQX01JUlJP
UkVERVFVSVJFQ1RBTkdVTEFSX0ZJWEVEKVxudmFyeWluZyB2ZWMzIHZEaXJlY3Rpb25XO1xuI2Vu
ZGlmXG4jaW5jbHVkZTxsb2dEZXB0aERlY2xhcmF0aW9uPlxuI2RlZmluZSBDVVNUT01fVkVSVEVY
X0RFRklOSVRJT05TXG52b2lkIG1haW4odm9pZCkge1xuI2RlZmluZSBDVVNUT01fVkVSVEVYX01B
SU5fQkVHSU5cbnZlYzMgcG9zaXRpb25VcGRhdGVkPXBvc2l0aW9uO1xuI2lmZGVmIE5PUk1BTFxu
dmVjMyBub3JtYWxVcGRhdGVkPW5vcm1hbDtcbiNlbmRpZlxuI2lmZGVmIFRBTkdFTlRcbnZlYzQg
dGFuZ2VudFVwZGF0ZWQ9dGFuZ2VudDtcbiNlbmRpZlxuI2lmZGVmIFVWMVxudmVjMiB1dlVwZGF0
ZWQ9dXY7XG4jZW5kaWZcbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleD5bMC4ubWF4U2ltdWx0
YW5lb3VzTW9ycGhUYXJnZXRzXVxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfU0tZQk9YXG4jaWZkZWYg
UkVGTEVDVElPTk1BUF9TS1lCT1hfVFJBTlNGT1JNRURcbnZQb3NpdGlvblVWVz0ocmVmbGVjdGlv
bk1hdHJpeCp2ZWM0KHBvc2l0aW9uVXBkYXRlZCwxLjApKS54eXo7XG4jZWxzZVxudlBvc2l0aW9u
VVZXPXBvc2l0aW9uVXBkYXRlZDtcbiNlbmRpZlxuI2VuZGlmXG4jZGVmaW5lIENVU1RPTV9WRVJU
RVhfVVBEQVRFX1BPU0lUSU9OXG4jZGVmaW5lIENVU1RPTV9WRVJURVhfVVBEQVRFX05PUk1BTFxu
I2luY2x1ZGU8aW5zdGFuY2VzVmVydGV4PlxuI2luY2x1ZGU8Ym9uZXNWZXJ0ZXg+XG52ZWM0IHdv
cmxkUG9zPWZpbmFsV29ybGQqdmVjNChwb3NpdGlvblVwZGF0ZWQsMS4wKTtcbiNpZmRlZiBNVUxU
SVZJRVdcbmlmIChnbF9WaWV3SURfT1ZSID09IDB1KSB7XG5nbF9Qb3NpdGlvbj12aWV3UHJvamVj
dGlvbip3b3JsZFBvcztcbn0gZWxzZSB7XG5nbF9Qb3NpdGlvbj12aWV3UHJvamVjdGlvblIqd29y
bGRQb3M7XG59XG4jZWxzZVxuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb24qd29ybGRQb3M7XG4j
ZW5kaWZcbnZQb3NpdGlvblc9dmVjMyh3b3JsZFBvcyk7XG4jaWZkZWYgTk9STUFMXG5tYXQzIG5v
cm1hbFdvcmxkPW1hdDMoZmluYWxXb3JsZCk7XG4jaWZkZWYgTk9OVU5JRk9STVNDQUxJTkdcbm5v
cm1hbFdvcmxkPXRyYW5zcG9zZU1hdDMoaW52ZXJzZU1hdDMobm9ybWFsV29ybGQpKTtcbiNlbmRp
Zlxudk5vcm1hbFc9bm9ybWFsaXplKG5vcm1hbFdvcmxkKm5vcm1hbFVwZGF0ZWQpO1xuI2VuZGlm
XG4jaWYgZGVmaW5lZChSRUZMRUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxBUl9GSVhFRCkgfHwgZGVm
aW5lZChSRUZMRUNUSU9OTUFQX01JUlJPUkVERVFVSVJFQ1RBTkdVTEFSX0ZJWEVEKVxudkRpcmVj
dGlvblc9bm9ybWFsaXplKHZlYzMoZmluYWxXb3JsZCp2ZWM0KHBvc2l0aW9uVXBkYXRlZCwwLjAp
KSk7XG4jZW5kaWZcblxuI2lmbmRlZiBVVjFcbnZlYzIgdXZVcGRhdGVkPXZlYzIoMC4sMC4pO1xu
I2VuZGlmXG4jaWZuZGVmIFVWMlxudmVjMiB1djI9dmVjMigwLiwwLik7XG4jZW5kaWZcbiNpZmRl
ZiBNQUlOVVYxXG52TWFpblVWMT11dlVwZGF0ZWQ7XG4jZW5kaWZcbiNpZmRlZiBNQUlOVVYyXG52
TWFpblVWMj11djI7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKERJRkZVU0UpICYmIERJRkZVU0VESVJF
Q1RVViA9PSAwXG5pZiAodkRpZmZ1c2VJbmZvcy54ID09IDAuKVxue1xudkRpZmZ1c2VVVj12ZWMy
KGRpZmZ1c2VNYXRyaXgqdmVjNCh1dlVwZGF0ZWQsMS4wLDAuMCkpO1xufVxuZWxzZVxue1xudkRp
ZmZ1c2VVVj12ZWMyKGRpZmZ1c2VNYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2VuZGlm
XG4jaWYgZGVmaW5lZChBTUJJRU5UKSAmJiBBTUJJRU5URElSRUNUVVYgPT0gMFxuaWYgKHZBbWJp
ZW50SW5mb3MueCA9PSAwLilcbntcbnZBbWJpZW50VVY9dmVjMihhbWJpZW50TWF0cml4KnZlYzQo
dXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZBbWJpZW50VVY9dmVjMihhbWJpZW50
TWF0cml4KnZlYzQodXYyLDEuMCwwLjApKTtcbn1cbiNlbmRpZlxuI2lmIGRlZmluZWQoT1BBQ0lU
WSkgJiYgT1BBQ0lUWURJUkVDVFVWID09IDBcbmlmICh2T3BhY2l0eUluZm9zLnggPT0gMC4pXG57
XG52T3BhY2l0eVVWPXZlYzIob3BhY2l0eU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7
XG59XG5lbHNlXG57XG52T3BhY2l0eVVWPXZlYzIob3BhY2l0eU1hdHJpeCp2ZWM0KHV2MiwxLjAs
MC4wKSk7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKEVNSVNTSVZFKSAmJiBFTUlTU0lWRURJUkVD
VFVWID09IDBcbmlmICh2RW1pc3NpdmVJbmZvcy54ID09IDAuKVxue1xudkVtaXNzaXZlVVY9dmVj
MihlbWlzc2l2ZU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52
RW1pc3NpdmVVVj12ZWMyKGVtaXNzaXZlTWF0cml4KnZlYzQodXYyLDEuMCwwLjApKTtcbn1cbiNl
bmRpZlxuI2lmIGRlZmluZWQoTElHSFRNQVApICYmIExJR0hUTUFQRElSRUNUVVYgPT0gMFxuaWYg
KHZMaWdodG1hcEluZm9zLnggPT0gMC4pXG57XG52TGlnaHRtYXBVVj12ZWMyKGxpZ2h0bWFwTWF0
cml4KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZMaWdodG1hcFVWPXZl
YzIobGlnaHRtYXBNYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2VuZGlmXG4jaWYgZGVm
aW5lZChTUEVDVUxBUikgJiYgZGVmaW5lZChTUEVDVUxBUlRFUk0pICYmIFNQRUNVTEFSRElSRUNU
VVYgPT0gMFxuaWYgKHZTcGVjdWxhckluZm9zLnggPT0gMC4pXG57XG52U3BlY3VsYXJVVj12ZWMy
KHNwZWN1bGFyTWF0cml4KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZT
cGVjdWxhclVWPXZlYzIoc3BlY3VsYXJNYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2Vu
ZGlmXG4jaWYgZGVmaW5lZChCVU1QKSAmJiBCVU1QRElSRUNUVVYgPT0gMFxuaWYgKHZCdW1wSW5m
b3MueCA9PSAwLilcbntcbnZCdW1wVVY9dmVjMihidW1wTWF0cml4KnZlYzQodXZVcGRhdGVkLDEu
MCwwLjApKTtcbn1cbmVsc2VcbntcbnZCdW1wVVY9dmVjMihidW1wTWF0cml4KnZlYzQodXYyLDEu
MCwwLjApKTtcbn1cbiNlbmRpZlxuI2luY2x1ZGU8YnVtcFZlcnRleD5cbiNpbmNsdWRlPGNsaXBQ
bGFuZVZlcnRleD5cbiNpbmNsdWRlPGZvZ1ZlcnRleD5cbiNpbmNsdWRlPHNoYWRvd3NWZXJ0ZXg+
WzAuLm1heFNpbXVsdGFuZW91c0xpZ2h0c11cbiNpZmRlZiBWRVJURVhDT0xPUlxuXG52Q29sb3I9
Y29sb3I7XG4jZW5kaWZcbiNpbmNsdWRlPHBvaW50Q2xvdWRWZXJ0ZXg+XG4jaW5jbHVkZTxsb2dE
ZXB0aFZlcnRleD5cbiNkZWZpbmUgQ1VTVE9NX1ZFUlRFWF9NQUlOX0VORFxufVxuIjsKK19NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRl
cnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZGVmYXVsdFZlcnRl
eFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vU2hhZGVycy9kZXB0aC5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9kZXB0aC5mcmFnbWVu
dC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBkZXB0aFBpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgImRlcHRoUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRl
cHRoUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
ZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfcGFja2luZ0Z1bmN0aW9uc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9T
aGFkZXJzSW5jbHVkZS9wYWNraW5nRnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1
ZGUvcGFja2luZ0Z1bmN0aW9ucy50cyIpOworCisKK3ZhciBuYW1lID0gJ2RlcHRoUGl4ZWxTaGFk
ZXInOwordmFyIHNoYWRlciA9ICIjaWZkZWYgQUxQSEFURVNUXG52YXJ5aW5nIHZlYzIgdlVWO1xu
dW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZVNhbXBsZXI7XG4jZW5kaWZcbnZhcnlpbmcgZmxvYXQg
dkRlcHRoTWV0cmljO1xuI2lmZGVmIFBBQ0tFRFxuI2luY2x1ZGU8cGFja2luZ0Z1bmN0aW9ucz5c
biNlbmRpZlxudm9pZCBtYWluKHZvaWQpXG57XG4jaWZkZWYgQUxQSEFURVNUXG5pZiAodGV4dHVy
ZTJEKGRpZmZ1c2VTYW1wbGVyLHZVVikuYTwwLjQpXG5kaXNjYXJkO1xuI2VuZGlmXG4jaWZkZWYg
Tk9OTElORUFSREVQVEhcbiNpZmRlZiBQQUNLRURcbmdsX0ZyYWdDb2xvcj1wYWNrKGdsX0ZyYWdD
b29yZC56KTtcbiNlbHNlXG5nbF9GcmFnQ29sb3I9dmVjNChnbF9GcmFnQ29vcmQueiwwLjAsMC4w
LDAuMCk7XG4jZW5kaWZcbiNlbHNlXG4jaWZkZWYgUEFDS0VEXG5nbF9GcmFnQ29sb3I9cGFjayh2
RGVwdGhNZXRyaWMpO1xuI2Vsc2VcbmdsX0ZyYWdDb2xvcj12ZWM0KHZEZXB0aE1ldHJpYywwLjAs
MC4wLDEuMCk7XG4jZW5kaWZcbiNlbmRpZlxufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFk
ZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGRlcHRoUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUs
IHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvZGVw
dGgudmVydGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vU2hhZGVycy9kZXB0aC52ZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlcHRoVmVydGV4U2hh
ZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImRlcHRoVmVydGV4U2hh
ZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZXB0aFZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8g
Ii4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzSW5jbHVkZV9ib25lc0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRp
b24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc0RlY2xhcmF0aW9uLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX21vcnBoVGFyZ2V0c1ZlcnRl
eEdsb2JhbERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleEdsb2Jh
bERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVy
dGV4R2xvYmFsRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hh
ZGVyc0luY2x1ZGVfbW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUv
bW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVk
ZS9tb3JwaFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbnN0YW5jZXNEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9pbnN0YW5jZXNEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2luc3Rh
bmNlc0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJ
bmNsdWRlX21vcnBoVGFyZ2V0c1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0
ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXgudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW5zdGFuY2VzVmVydGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc1ZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL2luc3RhbmNlc1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzSW5jbHVkZV9ib25lc1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9ib25lc1ZlcnRleCAqLyAiLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2JvbmVzVmVydGV4LnRzIik7CisKKworCisKKworCisKKwor
dmFyIG5hbWUgPSAnZGVwdGhWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbmF0dHJpYnV0
ZSB2ZWMzIHBvc2l0aW9uO1xuI2luY2x1ZGU8Ym9uZXNEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPG1v
cnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9uPlxuI2luY2x1ZGU8bW9ycGhUYXJnZXRz
VmVydGV4RGVjbGFyYXRpb24+WzAuLm1heFNpbXVsdGFuZW91c01vcnBoVGFyZ2V0c11cblxuI2lu
Y2x1ZGU8aW5zdGFuY2VzRGVjbGFyYXRpb24+XG51bmlmb3JtIG1hdDQgdmlld1Byb2plY3Rpb247
XG51bmlmb3JtIHZlYzIgZGVwdGhWYWx1ZXM7XG4jaWYgZGVmaW5lZChBTFBIQVRFU1QpIHx8IGRl
ZmluZWQoTkVFRF9VVilcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIG1hdDQgZGlmZnVzZU1h
dHJpeDtcbiNpZmRlZiBVVjFcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuI2VuZGlmXG4jaWZkZWYgVVYy
XG5hdHRyaWJ1dGUgdmVjMiB1djI7XG4jZW5kaWZcbiNlbmRpZlxudmFyeWluZyBmbG9hdCB2RGVw
dGhNZXRyaWM7XG52b2lkIG1haW4odm9pZClcbntcbnZlYzMgcG9zaXRpb25VcGRhdGVkPXBvc2l0
aW9uO1xuI2lmZGVmIFVWMVxudmVjMiB1dlVwZGF0ZWQ9dXY7XG4jZW5kaWZcbiNpbmNsdWRlPG1v
cnBoVGFyZ2V0c1ZlcnRleD5bMC4ubWF4U2ltdWx0YW5lb3VzTW9ycGhUYXJnZXRzXVxuI2luY2x1
ZGU8aW5zdGFuY2VzVmVydGV4PlxuI2luY2x1ZGU8Ym9uZXNWZXJ0ZXg+XG5nbF9Qb3NpdGlvbj12
aWV3UHJvamVjdGlvbipmaW5hbFdvcmxkKnZlYzQocG9zaXRpb25VcGRhdGVkLDEuMCk7XG52RGVw
dGhNZXRyaWM9KChnbF9Qb3NpdGlvbi56K2RlcHRoVmFsdWVzLngpLyhkZXB0aFZhbHVlcy55KSk7
XG4jaWYgZGVmaW5lZChBTFBIQVRFU1QpIHx8IGRlZmluZWQoQkFTSUNfUkVOREVSKVxuI2lmZGVm
IFVWMVxudlVWPXZlYzIoZGlmZnVzZU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG4j
ZW5kaWZcbiNpZmRlZiBVVjJcbnZVVj12ZWMyKGRpZmZ1c2VNYXRyaXgqdmVjNCh1djIsMS4wLDAu
MCkpO1xuI2VuZGlmXG4jZW5kaWZcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7
CisvKiogQGhpZGRlbiAqLwordmFyIGRlcHRoVmVydGV4U2hhZGVyID0geyBuYW1lOiBuYW1lLCBz
aGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2RlcHRo
Qm94Qmx1ci5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvZGVwdGhCb3hCbHVyLmZyYWdtZW50LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBkZXB0aEJveEJsdXJQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJkZXB0aEJveEJsdXJQaXhlbFNoYWRlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gZGVwdGhCb3hCbHVyUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01h
dGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnZGVwdGhCb3hCbHVyUGl4ZWxTaGFk
ZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIy
RCB0ZXh0dXJlU2FtcGxlcjtcblxudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XG52b2lkIG1haW4o
dm9pZClcbntcbnZlYzQgY29sb3JEZXB0aD12ZWM0KDAuMCk7XG5mb3IgKGludCB4PS1PRkZTRVQ7
IHg8PU9GRlNFVDsgeCsrKVxuZm9yIChpbnQgeT0tT0ZGU0VUOyB5PD1PRkZTRVQ7IHkrKylcbmNv
bG9yRGVwdGgrPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMih4LHkpL3NjcmVlblNp
emUpO1xuZ2xfRnJhZ0NvbG9yPShjb2xvckRlcHRoL2Zsb2F0KChPRkZTRVQqMisxKSooT0ZGU0VU
KjIrMSkpKTtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4g
Ki8KK3ZhciBkZXB0aEJveEJsdXJQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBz
aGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9kZXB0aE9mRmllbGQu
ZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9TaGFkZXJzL2RlcHRoT2ZGaWVsZC5mcmFnbWVudC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogZGVwdGhPZkZpZWxkUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiZGVwdGhPZkZpZWxkUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIGRlcHRoT2ZGaWVsZFBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMv
ZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2RlcHRoT2ZGaWVsZFBpeGVsU2hhZGVyJzsKK3Zh
ciBzaGFkZXIgPSAiXG5cblxuXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmVTYW1wbGVyO1xu
dW5pZm9ybSBzYW1wbGVyMkQgaGlnaGxpZ2h0c1NhbXBsZXI7XG51bmlmb3JtIHNhbXBsZXIyRCBk
ZXB0aFNhbXBsZXI7XG51bmlmb3JtIHNhbXBsZXIyRCBncmFpblNhbXBsZXI7XG5cbnVuaWZvcm0g
ZmxvYXQgZ3JhaW5fYW1vdW50O1xudW5pZm9ybSBib29sIGJsdXJfbm9pc2U7XG51bmlmb3JtIGZs
b2F0IHNjcmVlbl93aWR0aDtcbnVuaWZvcm0gZmxvYXQgc2NyZWVuX2hlaWdodDtcbnVuaWZvcm0g
ZmxvYXQgZGlzdG9ydGlvbjtcbnVuaWZvcm0gYm9vbCBkb2ZfZW5hYmxlZDtcblxudW5pZm9ybSBm
bG9hdCBzY3JlZW5fZGlzdGFuY2U7XG51bmlmb3JtIGZsb2F0IGFwZXJ0dXJlO1xudW5pZm9ybSBm
bG9hdCBkYXJrZW47XG51bmlmb3JtIGZsb2F0IGVkZ2VfYmx1cjtcbnVuaWZvcm0gYm9vbCBoaWdo
bGlnaHRzO1xuXG51bmlmb3JtIGZsb2F0IG5lYXI7XG51bmlmb3JtIGZsb2F0IGZhcjtcblxudmFy
eWluZyB2ZWMyIHZVVjtcblxuI2RlZmluZSBQSSAzLjE0MTU5MjY1XG4jZGVmaW5lIFRXT1BJIDYu
MjgzMTg1MzBcbiNkZWZpbmUgaW52ZXJzZV9mb2NhbF9sZW5ndGggMC4xXG5cbnZlYzIgY2VudGVy
ZWRfc2NyZWVuX3BvcztcbnZlYzIgZGlzdG9ydGVkX2Nvb3JkcztcbmZsb2F0IHJhZGl1czI7XG5m
bG9hdCByYWRpdXM7XG5cbnZlYzIgcmFuZCh2ZWMyIGNvKVxue1xuZmxvYXQgbm9pc2UxPShmcmFj
dChzaW4oZG90KGNvLHZlYzIoMTIuOTg5OCw3OC4yMzMpKSkqNDM3NTguNTQ1MykpO1xuZmxvYXQg
bm9pc2UyPShmcmFjdChzaW4oZG90KGNvLHZlYzIoMTIuOTg5OCw3OC4yMzMpKjIuMCkpKjQzNzU4
LjU0NTMpKTtcbnJldHVybiBjbGFtcCh2ZWMyKG5vaXNlMSxub2lzZTIpLDAuMCwxLjApO1xufVxu
XG52ZWMyIGdldERpc3RvcnRlZENvb3Jkcyh2ZWMyIGNvb3Jkcykge1xuaWYgKGRpc3RvcnRpb24g
PT0gMC4wKSB7IHJldHVybiBjb29yZHM7IH1cbnZlYzIgZGlyZWN0aW9uPTEuMCpub3JtYWxpemUo
Y2VudGVyZWRfc2NyZWVuX3Bvcyk7XG52ZWMyIGRpc3RfY29vcmRzPXZlYzIoMC41LDAuNSk7XG5k
aXN0X2Nvb3Jkcy54PTAuNStkaXJlY3Rpb24ueCpyYWRpdXMyKjEuMDtcbmRpc3RfY29vcmRzLnk9
MC41K2RpcmVjdGlvbi55KnJhZGl1czIqMS4wO1xuZmxvYXQgZGlzdF9hbW91bnQ9Y2xhbXAoZGlz
dG9ydGlvbiowLjIzLDAuMCwxLjApO1xuZGlzdF9jb29yZHM9bWl4KGNvb3JkcyxkaXN0X2Nvb3Jk
cyxkaXN0X2Ftb3VudCk7XG5yZXR1cm4gZGlzdF9jb29yZHM7XG59XG5cbmZsb2F0IHNhbXBsZVNj
cmVlbihpbm91dCB2ZWM0IGNvbG9yLGNvbnN0IGluIHZlYzIgb2Zmc2V0LGNvbnN0IGluIGZsb2F0
IHdlaWdodCkge1xuXG52ZWMyIGNvb3Jkcz1kaXN0b3J0ZWRfY29vcmRzO1xuZmxvYXQgYW5nbGU9
cmFuZChjb29yZHMqMTAwLjApLngqVFdPUEk7XG5jb29yZHMrPXZlYzIob2Zmc2V0LngqY29zKGFu
Z2xlKS1vZmZzZXQueSpzaW4oYW5nbGUpLG9mZnNldC54KnNpbihhbmdsZSkrb2Zmc2V0LnkqY29z
KGFuZ2xlKSk7XG5jb2xvcis9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLGNvb3Jkcykqd2VpZ2h0
O1xucmV0dXJuIHdlaWdodDtcbn1cblxuZmxvYXQgZ2V0Qmx1ckxldmVsKGZsb2F0IHNpemUpIHtc
bnJldHVybiBtaW4oMy4wLGNlaWwoc2l6ZS8xLjApKTtcbn1cblxudmVjNCBnZXRCbHVyQ29sb3Io
ZmxvYXQgc2l6ZSkge1xudmVjNCBjb2w9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLGRpc3RvcnRl
ZF9jb29yZHMpO1xuaWYgKHNpemUgPT0gMC4wKSB7IHJldHVybiBjb2w7IH1cblxuXG5mbG9hdCBi
bHVyX2xldmVsPWdldEJsdXJMZXZlbChzaXplKTtcbmZsb2F0IHc9KHNpemUvc2NyZWVuX3dpZHRo
KTtcbmZsb2F0IGg9KHNpemUvc2NyZWVuX2hlaWdodCk7XG5mbG9hdCB0b3RhbF93ZWlnaHQ9MS4w
O1xudmVjMiBzYW1wbGVfY29vcmRzO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3JlZW4oY29sLHZl
YzIoLTAuNTAqdywwLjI0KmgpLDAuOTMpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3JlZW4oY29s
LHZlYzIoMC4zMCp3LC0wLjc1KmgpLDAuOTApO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3JlZW4o
Y29sLHZlYzIoMC4zNip3LDAuOTYqaCksMC44Nyk7XG50b3RhbF93ZWlnaHQrPXNhbXBsZVNjcmVl
bihjb2wsdmVjMigtMS4wOCp3LC0wLjU1KmgpLDAuODUpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVT
Y3JlZW4oY29sLHZlYzIoMS4zMyp3LC0wLjM3KmgpLDAuODMpO1xudG90YWxfd2VpZ2h0Kz1zYW1w
bGVTY3JlZW4oY29sLHZlYzIoLTAuODIqdywxLjMxKmgpLDAuODApO1xudG90YWxfd2VpZ2h0Kz1z
YW1wbGVTY3JlZW4oY29sLHZlYzIoLTAuMzEqdywtMS42NypoKSwwLjc4KTtcbnRvdGFsX3dlaWdo
dCs9c2FtcGxlU2NyZWVuKGNvbCx2ZWMyKDEuNDcqdywxLjExKmgpLDAuNzYpO1xudG90YWxfd2Vp
Z2h0Kz1zYW1wbGVTY3JlZW4oY29sLHZlYzIoLTEuOTcqdywwLjE5KmgpLDAuNzQpO1xudG90YWxf
d2VpZ2h0Kz1zYW1wbGVTY3JlZW4oY29sLHZlYzIoMS40Mip3LC0xLjU3KmgpLDAuNzIpO1xuaWYg
KGJsdXJfbGV2ZWw+MS4wKSB7XG50b3RhbF93ZWlnaHQrPXNhbXBsZVNjcmVlbihjb2wsdmVjMigw
LjAxKncsMi4yNSpoKSwwLjcwKTtcbnRvdGFsX3dlaWdodCs9c2FtcGxlU2NyZWVuKGNvbCx2ZWMy
KC0xLjYyKncsLTEuNzQqaCksMC42Nyk7XG50b3RhbF93ZWlnaHQrPXNhbXBsZVNjcmVlbihjb2ws
dmVjMigyLjQ5KncsMC4yMCpoKSwwLjY1KTtcbnRvdGFsX3dlaWdodCs9c2FtcGxlU2NyZWVuKGNv
bCx2ZWMyKC0yLjA3KncsMS42MSpoKSwwLjYzKTtcbnRvdGFsX3dlaWdodCs9c2FtcGxlU2NyZWVu
KGNvbCx2ZWMyKDAuNDYqdywtMi43MCpoKSwwLjYxKTtcbnRvdGFsX3dlaWdodCs9c2FtcGxlU2Ny
ZWVuKGNvbCx2ZWMyKDEuNTUqdywyLjQwKmgpLDAuNTkpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVT
Y3JlZW4oY29sLHZlYzIoLTIuODgqdywtMC43NSpoKSwwLjU2KTtcbnRvdGFsX3dlaWdodCs9c2Ft
cGxlU2NyZWVuKGNvbCx2ZWMyKDIuNzMqdywtMS40NCpoKSwwLjU0KTtcbnRvdGFsX3dlaWdodCs9
c2FtcGxlU2NyZWVuKGNvbCx2ZWMyKC0xLjA4KncsMy4wMipoKSwwLjUyKTtcbnRvdGFsX3dlaWdo
dCs9c2FtcGxlU2NyZWVuKGNvbCx2ZWMyKC0xLjI4KncsLTMuMDUqaCksMC40OSk7XG59XG5pZiAo
Ymx1cl9sZXZlbD4yLjApIHtcbnRvdGFsX3dlaWdodCs9c2FtcGxlU2NyZWVuKGNvbCx2ZWMyKDMu
MTEqdywxLjQzKmgpLDAuNDYpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3JlZW4oY29sLHZlYzIo
LTMuMzYqdywxLjA4KmgpLDAuNDQpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3JlZW4oY29sLHZl
YzIoMS44MCp3LC0zLjE2KmgpLDAuNDEpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3JlZW4oY29s
LHZlYzIoMC44Myp3LDMuNjUqaCksMC4zOCk7XG50b3RhbF93ZWlnaHQrPXNhbXBsZVNjcmVlbihj
b2wsdmVjMigtMy4xNip3LC0yLjE5KmgpLDAuMzQpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3Jl
ZW4oY29sLHZlYzIoMy45Mip3LC0wLjUzKmgpLDAuMzEpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVT
Y3JlZW4oY29sLHZlYzIoLTIuNTkqdywzLjEyKmgpLDAuMjYpO1xudG90YWxfd2VpZ2h0Kz1zYW1w
bGVTY3JlZW4oY29sLHZlYzIoLTAuMjAqdywtNC4xNSpoKSwwLjIyKTtcbnRvdGFsX3dlaWdodCs9
c2FtcGxlU2NyZWVuKGNvbCx2ZWMyKDMuMDIqdywzLjAwKmgpLDAuMTUpO1xufVxuY29sLz10b3Rh
bF93ZWlnaHQ7XG5cbmlmIChkYXJrZW4+MC4wKSB7XG5jb2wucmdiKj1jbGFtcCgwLjMsMS4wLDEu
MDUtc2l6ZSowLjUqZGFya2VuKTtcbn1cblxuXG5cblxucmV0dXJuIGNvbDtcbn1cbnZvaWQgbWFp
bih2b2lkKVxue1xuXG5jZW50ZXJlZF9zY3JlZW5fcG9zPXZlYzIodlVWLngtMC41LHZVVi55LTAu
NSk7XG5yYWRpdXMyPWNlbnRlcmVkX3NjcmVlbl9wb3MueCpjZW50ZXJlZF9zY3JlZW5fcG9zLngr
Y2VudGVyZWRfc2NyZWVuX3Bvcy55KmNlbnRlcmVkX3NjcmVlbl9wb3MueTtcbnJhZGl1cz1zcXJ0
KHJhZGl1czIpO1xuZGlzdG9ydGVkX2Nvb3Jkcz1nZXREaXN0b3J0ZWRDb29yZHModlVWKTtcbnZl
YzIgdGV4ZWxzX2Nvb3Jkcz12ZWMyKHZVVi54KnNjcmVlbl93aWR0aCx2VVYueSpzY3JlZW5faGVp
Z2h0KTtcbmZsb2F0IGRlcHRoPXRleHR1cmUyRChkZXB0aFNhbXBsZXIsZGlzdG9ydGVkX2Nvb3Jk
cykucjtcbmZsb2F0IGRpc3RhbmNlPW5lYXIrKGZhci1uZWFyKSpkZXB0aDtcbnZlYzQgY29sb3I9
dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG5cblxuZmxvYXQgY29jPWFicyhhcGVydHVy
ZSooc2NyZWVuX2Rpc3RhbmNlKihpbnZlcnNlX2ZvY2FsX2xlbmd0aC0xLjAvZGlzdGFuY2UpLTEu
MCkpO1xuXG5pZiAoZG9mX2VuYWJsZWQgPT0gZmFsc2UgfHwgY29jPDAuMDcpIHsgY29jPTAuMDsg
fVxuXG5mbG9hdCBlZGdlX2JsdXJfYW1vdW50PTAuMDtcbmlmIChlZGdlX2JsdXI+MC4wKSB7XG5l
ZGdlX2JsdXJfYW1vdW50PWNsYW1wKChyYWRpdXMqMi4wLTEuMCswLjE1KmVkZ2VfYmx1cikqMS41
LDAuMCwxLjApKjEuMztcbn1cblxuZmxvYXQgYmx1cl9hbW91bnQ9bWF4KGVkZ2VfYmx1cl9hbW91
bnQsY29jKTtcblxuaWYgKGJsdXJfYW1vdW50ID09IDAuMCkge1xuZ2xfRnJhZ0NvbG9yPXRleHR1
cmUyRCh0ZXh0dXJlU2FtcGxlcixkaXN0b3J0ZWRfY29vcmRzKTtcbn1cbmVsc2Uge1xuXG5nbF9G
cmFnQ29sb3I9Z2V0Qmx1ckNvbG9yKGJsdXJfYW1vdW50KjEuNyk7XG5cbmlmIChoaWdobGlnaHRz
KSB7XG5nbF9GcmFnQ29sb3IucmdiKz1jbGFtcChjb2MsMC4wLDEuMCkqdGV4dHVyZTJEKGhpZ2hs
aWdodHNTYW1wbGVyLGRpc3RvcnRlZF9jb29yZHMpLnJnYjtcbn1cbmlmIChibHVyX25vaXNlKSB7
XG5cbnZlYzIgbm9pc2U9cmFuZChkaXN0b3J0ZWRfY29vcmRzKSowLjAxKmJsdXJfYW1vdW50O1xu
dmVjMiBibHVycmVkX2Nvb3JkPXZlYzIoZGlzdG9ydGVkX2Nvb3Jkcy54K25vaXNlLngsZGlzdG9y
dGVkX2Nvb3Jkcy55K25vaXNlLnkpO1xuZ2xfRnJhZ0NvbG9yPTAuMDQqdGV4dHVyZTJEKHRleHR1
cmVTYW1wbGVyLGJsdXJyZWRfY29vcmQpKzAuOTYqZ2xfRnJhZ0NvbG9yO1xufVxufVxuXG5pZiAo
Z3JhaW5fYW1vdW50PjAuMCkge1xudmVjNCBncmFpbl9jb2xvcj10ZXh0dXJlMkQoZ3JhaW5TYW1w
bGVyLHRleGVsc19jb29yZHMqMC4wMDMpO1xuZ2xfRnJhZ0NvbG9yLnJnYis9KC0wLjUrZ3JhaW5f
Y29sb3IucmdiKSowLjMwKmdyYWluX2Ftb3VudDtcbn1cbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGRlcHRoT2ZGaWVsZFBpeGVsU2hhZGVy
ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9TaGFkZXJzL2RlcHRoT2ZGaWVsZE1lcmdlLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFk
ZXJzL2RlcHRoT2ZGaWVsZE1lcmdlLmZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IGRlcHRoT2ZGaWVsZE1lcmdlUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiZGVwdGhPZkZpZWxkTWVyZ2VQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gZGVwdGhPZkZpZWxkTWVyZ2VQaXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJp
YWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdkZXB0aE9mRmllbGRNZXJnZVBpeGVsU2hh
ZGVyJzsKK3ZhciBzaGFkZXIgPSAidW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZVNhbXBsZXI7XG52
YXJ5aW5nIHZlYzIgdlVWO1xudW5pZm9ybSBzYW1wbGVyMkQgY2lyY2xlT2ZDb25mdXNpb25TYW1w
bGVyO1xudW5pZm9ybSBzYW1wbGVyMkQgYmx1clN0ZXAwO1xuI2lmIEJMVVJfTEVWRUw+MFxudW5p
Zm9ybSBzYW1wbGVyMkQgYmx1clN0ZXAxO1xuI2VuZGlmXG4jaWYgQkxVUl9MRVZFTD4xXG51bmlm
b3JtIHNhbXBsZXIyRCBibHVyU3RlcDI7XG4jZW5kaWZcbnZvaWQgbWFpbih2b2lkKVxue1xuZmxv
YXQgY29jPXRleHR1cmUyRChjaXJjbGVPZkNvbmZ1c2lvblNhbXBsZXIsdlVWKS5yO1xuI2lmIEJM
VVJfTEVWRUwgPT0gMFxudmVjNCBvcmlnaW5hbD10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVW
KTtcbnZlYzQgYmx1cnJlZDA9dGV4dHVyZTJEKGJsdXJTdGVwMCx2VVYpO1xuZ2xfRnJhZ0NvbG9y
PW1peChvcmlnaW5hbCxibHVycmVkMCxjb2MpO1xuI2VuZGlmXG4jaWYgQkxVUl9MRVZFTCA9PSAx
XG5pZihjb2M8MC41KXtcbnZlYzQgb3JpZ2luYWw9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZV
Vik7XG52ZWM0IGJsdXJyZWQxPXRleHR1cmUyRChibHVyU3RlcDEsdlVWKTtcbmdsX0ZyYWdDb2xv
cj1taXgob3JpZ2luYWwsYmx1cnJlZDEsY29jLzAuNSk7XG59ZWxzZXtcbnZlYzQgYmx1cnJlZDA9
dGV4dHVyZTJEKGJsdXJTdGVwMCx2VVYpO1xudmVjNCBibHVycmVkMT10ZXh0dXJlMkQoYmx1clN0
ZXAxLHZVVik7XG5nbF9GcmFnQ29sb3I9bWl4KGJsdXJyZWQxLGJsdXJyZWQwLChjb2MtMC41KS8w
LjUpO1xufVxuI2VuZGlmXG4jaWYgQkxVUl9MRVZFTCA9PSAyXG5pZihjb2M8MC4zMyl7XG52ZWM0
IG9yaWdpbmFsPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xudmVjNCBibHVycmVkMj10
ZXh0dXJlMkQoYmx1clN0ZXAyLHZVVik7XG5nbF9GcmFnQ29sb3I9bWl4KG9yaWdpbmFsLGJsdXJy
ZWQyLGNvYy8wLjMzKTtcbn1lbHNlIGlmKGNvYzwwLjY2KXtcbnZlYzQgYmx1cnJlZDE9dGV4dHVy
ZTJEKGJsdXJTdGVwMSx2VVYpO1xudmVjNCBibHVycmVkMj10ZXh0dXJlMkQoYmx1clN0ZXAyLHZV
Vik7XG5nbF9GcmFnQ29sb3I9bWl4KGJsdXJyZWQyLGJsdXJyZWQxLChjb2MtMC4zMykvMC4zMyk7
XG59ZWxzZXtcbnZlYzQgYmx1cnJlZDA9dGV4dHVyZTJEKGJsdXJTdGVwMCx2VVYpO1xudmVjNCBi
bHVycmVkMT10ZXh0dXJlMkQoYmx1clN0ZXAxLHZVVik7XG5nbF9GcmFnQ29sb3I9bWl4KGJsdXJy
ZWQxLGJsdXJyZWQwLChjb2MtMC42NikvMC4zNCk7XG59XG4jZW5kaWZcbn1cbiI7CitfTWF0ZXJp
YWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJz
U3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGRlcHRoT2ZGaWVsZE1l
cmdlUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvZGlzcGxheVBhc3MuZnJhZ21lbnQudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1No
YWRlcnMvZGlzcGxheVBhc3MuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZGlzcGxheVBh
c3NQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJkaXNw
bGF5UGFzc1BpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkaXNwbGF5UGFzc1BpeGVs
U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1l
ID0gJ2Rpc3BsYXlQYXNzUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVj
MiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbnVuaWZvcm0gc2FtcGxl
cjJEIHBhc3NTYW1wbGVyO1xudm9pZCBtYWluKHZvaWQpXG57XG5nbF9GcmFnQ29sb3I9dGV4dHVy
ZTJEKHBhc3NTYW1wbGVyLHZVVik7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsK
Ky8qKiBAaGlkZGVuICovCit2YXIgZGlzcGxheVBhc3NQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFt
ZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9l
eHRyYWN0SGlnaGxpZ2h0cy5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9leHRyYWN0SGln
aGxpZ2h0cy5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBleHRyYWN0SGlnaGxp
Z2h0c1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImV4
dHJhY3RIaWdobGlnaHRzUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV4dHJhY3RI
aWdobGlnaHRzUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVscGVyRnVuY3Rp
b25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJ
bmNsdWRlL2hlbHBlckZ1bmN0aW9ucy50cyIpOworCisKK3ZhciBuYW1lID0gJ2V4dHJhY3RIaWdo
bGlnaHRzUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICIjaW5jbHVkZTxoZWxwZXJGdW5jdGlv
bnM+XG5cbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxl
cjtcbnVuaWZvcm0gZmxvYXQgdGhyZXNob2xkO1xudW5pZm9ybSBmbG9hdCBleHBvc3VyZTtcbnZv
aWQgbWFpbih2b2lkKVxue1xuZ2xfRnJhZ0NvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2
VVYpO1xuZmxvYXQgbHVtYT1nZXRMdW1pbmFuY2UoZ2xfRnJhZ0NvbG9yLnJnYipleHBvc3VyZSk7
XG5nbF9GcmFnQ29sb3IucmdiPXN0ZXAodGhyZXNob2xkLGx1bWEpKmdsX0ZyYWdDb2xvci5yZ2I7
XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVm
ZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIg
ZXh0cmFjdEhpZ2hsaWdodHNQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFk
ZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9maWx0ZXIuZnJhZ21lbnQu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9TaGFkZXJzL2ZpbHRlci5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZmlsdGVyUGl4ZWxTaGFk
ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZmlsdGVyUGl4ZWxTaGFk
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZpbHRlclBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAi
Li9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2ZpbHRlclBpeGVsU2hhZGVy
JzsKK3ZhciBzaGFkZXIgPSAiXG52YXJ5aW5nIHZlYzIgdlVWO1xudW5pZm9ybSBzYW1wbGVyMkQg
dGV4dHVyZVNhbXBsZXI7XG51bmlmb3JtIG1hdDQga2VybmVsTWF0cml4O1xudm9pZCBtYWluKHZv
aWQpXG57XG52ZWMzIGJhc2VDb2xvcj10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWKS5yZ2I7
XG52ZWMzIHVwZGF0ZWRDb2xvcj0oa2VybmVsTWF0cml4KnZlYzQoYmFzZUNvbG9yLDEuMCkpLnJn
YjtcbmdsX0ZyYWdDb2xvcj12ZWM0KHVwZGF0ZWRDb2xvciwxLjApO1xufSI7CitfTWF0ZXJpYWxz
X2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3Rv
cmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGZpbHRlclBpeGVsU2hhZGVy
ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9TaGFkZXJzL2Z4YWEuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9meGFhLmZyYWdtZW50LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogZnhhYVBpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgImZ4YWFQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZnhhYVBpeGVsU2hhZGVy
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJp
YWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2Z4
YWFQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gInVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmVT
YW1wbGVyO1xudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcbnZhcnlpbmcgdmVjMiB2VVY7XG52YXJ5
aW5nIHZlYzIgc2FtcGxlQ29vcmRTO1xudmFyeWluZyB2ZWMyIHNhbXBsZUNvb3JkRTtcbnZhcnlp
bmcgdmVjMiBzYW1wbGVDb29yZE47XG52YXJ5aW5nIHZlYzIgc2FtcGxlQ29vcmRXO1xudmFyeWlu
ZyB2ZWMyIHNhbXBsZUNvb3JkTlc7XG52YXJ5aW5nIHZlYzIgc2FtcGxlQ29vcmRTRTtcbnZhcnlp
bmcgdmVjMiBzYW1wbGVDb29yZE5FO1xudmFyeWluZyB2ZWMyIHNhbXBsZUNvb3JkU1c7XG5jb25z
dCBmbG9hdCBmeGFhUXVhbGl0eVN1YnBpeD0xLjA7XG5jb25zdCBmbG9hdCBmeGFhUXVhbGl0eUVk
Z2VUaHJlc2hvbGQ9MC4xNjY7XG5jb25zdCBmbG9hdCBmeGFhUXVhbGl0eUVkZ2VUaHJlc2hvbGRN
aW49MC4wODMzO1xuY29uc3QgdmVjMyBrTHVtYUNvZWZmaWNpZW50cz12ZWMzKDAuMjEyNiwwLjcx
NTIsMC4wNzIyKTtcbiNkZWZpbmUgRnhhYUx1bWEocmdiYSkgZG90KHJnYmEucmdiLGtMdW1hQ29l
ZmZpY2llbnRzKVxudm9pZCBtYWluKCl7XG52ZWMyIHBvc007XG5wb3NNLng9dlVWLng7XG5wb3NN
Lnk9dlVWLnk7XG52ZWM0IHJnYnlNPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYsMC4wKTtc
bmZsb2F0IGx1bWFNPUZ4YWFMdW1hKHJnYnlNKTtcbmZsb2F0IGx1bWFTPUZ4YWFMdW1hKHRleHR1
cmUyRCh0ZXh0dXJlU2FtcGxlcixzYW1wbGVDb29yZFMsMC4wKSk7XG5mbG9hdCBsdW1hRT1GeGFh
THVtYSh0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsc2FtcGxlQ29vcmRFLDAuMCkpO1xuZmxvYXQg
bHVtYU49RnhhYUx1bWEodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHNhbXBsZUNvb3JkTiwwLjAp
KTtcbmZsb2F0IGx1bWFXPUZ4YWFMdW1hKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcixzYW1wbGVD
b29yZFcsMC4wKSk7XG5mbG9hdCBtYXhTTT1tYXgobHVtYVMsbHVtYU0pO1xuZmxvYXQgbWluU009
bWluKGx1bWFTLGx1bWFNKTtcbmZsb2F0IG1heEVTTT1tYXgobHVtYUUsbWF4U00pO1xuZmxvYXQg
bWluRVNNPW1pbihsdW1hRSxtaW5TTSk7XG5mbG9hdCBtYXhXTj1tYXgobHVtYU4sbHVtYVcpO1xu
ZmxvYXQgbWluV049bWluKGx1bWFOLGx1bWFXKTtcbmZsb2F0IHJhbmdlTWF4PW1heChtYXhXTixt
YXhFU00pO1xuZmxvYXQgcmFuZ2VNaW49bWluKG1pbldOLG1pbkVTTSk7XG5mbG9hdCByYW5nZU1h
eFNjYWxlZD1yYW5nZU1heCpmeGFhUXVhbGl0eUVkZ2VUaHJlc2hvbGQ7XG5mbG9hdCByYW5nZT1y
YW5nZU1heC1yYW5nZU1pbjtcbmZsb2F0IHJhbmdlTWF4Q2xhbXBlZD1tYXgoZnhhYVF1YWxpdHlF
ZGdlVGhyZXNob2xkTWluLHJhbmdlTWF4U2NhbGVkKTtcbiNpZm5kZWYgTUFMSVxuaWYocmFuZ2U8
cmFuZ2VNYXhDbGFtcGVkKVxue1xuZ2xfRnJhZ0NvbG9yPXJnYnlNO1xucmV0dXJuO1xufVxuI2Vu
ZGlmXG5mbG9hdCBsdW1hTlc9RnhhYUx1bWEodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHNhbXBs
ZUNvb3JkTlcsMC4wKSk7XG5mbG9hdCBsdW1hU0U9RnhhYUx1bWEodGV4dHVyZTJEKHRleHR1cmVT
YW1wbGVyLHNhbXBsZUNvb3JkU0UsMC4wKSk7XG5mbG9hdCBsdW1hTkU9RnhhYUx1bWEodGV4dHVy
ZTJEKHRleHR1cmVTYW1wbGVyLHNhbXBsZUNvb3JkTkUsMC4wKSk7XG5mbG9hdCBsdW1hU1c9Rnhh
YUx1bWEodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHNhbXBsZUNvb3JkU1csMC4wKSk7XG5mbG9h
dCBsdW1hTlM9bHVtYU4rbHVtYVM7XG5mbG9hdCBsdW1hV0U9bHVtYVcrbHVtYUU7XG5mbG9hdCBz
dWJwaXhSY3BSYW5nZT0xLjAvcmFuZ2U7XG5mbG9hdCBzdWJwaXhOU1dFPWx1bWFOUytsdW1hV0U7
XG5mbG9hdCBlZGdlSG9yejE9KC0yLjAqbHVtYU0pK2x1bWFOUztcbmZsb2F0IGVkZ2VWZXJ0MT0o
LTIuMCpsdW1hTSkrbHVtYVdFO1xuZmxvYXQgbHVtYU5FU0U9bHVtYU5FK2x1bWFTRTtcbmZsb2F0
IGx1bWFOV05FPWx1bWFOVytsdW1hTkU7XG5mbG9hdCBlZGdlSG9yejI9KC0yLjAqbHVtYUUpK2x1
bWFORVNFO1xuZmxvYXQgZWRnZVZlcnQyPSgtMi4wKmx1bWFOKStsdW1hTldORTtcbmZsb2F0IGx1
bWFOV1NXPWx1bWFOVytsdW1hU1c7XG5mbG9hdCBsdW1hU1dTRT1sdW1hU1crbHVtYVNFO1xuZmxv
YXQgZWRnZUhvcno0PShhYnMoZWRnZUhvcnoxKSoyLjApK2FicyhlZGdlSG9yejIpO1xuZmxvYXQg
ZWRnZVZlcnQ0PShhYnMoZWRnZVZlcnQxKSoyLjApK2FicyhlZGdlVmVydDIpO1xuZmxvYXQgZWRn
ZUhvcnozPSgtMi4wKmx1bWFXKStsdW1hTldTVztcbmZsb2F0IGVkZ2VWZXJ0Mz0oLTIuMCpsdW1h
UykrbHVtYVNXU0U7XG5mbG9hdCBlZGdlSG9yej1hYnMoZWRnZUhvcnozKStlZGdlSG9yejQ7XG5m
bG9hdCBlZGdlVmVydD1hYnMoZWRnZVZlcnQzKStlZGdlVmVydDQ7XG5mbG9hdCBzdWJwaXhOV1NX
TkVTRT1sdW1hTldTVytsdW1hTkVTRTtcbmZsb2F0IGxlbmd0aFNpZ249dGV4ZWxTaXplLng7XG5i
b29sIGhvcnpTcGFuPWVkZ2VIb3J6Pj1lZGdlVmVydDtcbmZsb2F0IHN1YnBpeEE9c3VicGl4TlNX
RSoyLjArc3VicGl4TldTV05FU0U7XG5pZiAoIWhvcnpTcGFuKVxue1xubHVtYU49bHVtYVc7XG59
XG5pZiAoIWhvcnpTcGFuKVxue1xubHVtYVM9bHVtYUU7XG59XG5pZiAoaG9yelNwYW4pXG57XG5s
ZW5ndGhTaWduPXRleGVsU2l6ZS55O1xufVxuZmxvYXQgc3VicGl4Qj0oc3VicGl4QSooMS4wLzEy
LjApKS1sdW1hTTtcbmZsb2F0IGdyYWRpZW50Tj1sdW1hTi1sdW1hTTtcbmZsb2F0IGdyYWRpZW50
Uz1sdW1hUy1sdW1hTTtcbmZsb2F0IGx1bWFOTj1sdW1hTitsdW1hTTtcbmZsb2F0IGx1bWFTUz1s
dW1hUytsdW1hTTtcbmJvb2wgcGFpck49YWJzKGdyYWRpZW50Tik+PWFicyhncmFkaWVudFMpO1xu
ZmxvYXQgZ3JhZGllbnQ9bWF4KGFicyhncmFkaWVudE4pLGFicyhncmFkaWVudFMpKTtcbmlmIChw
YWlyTilcbntcbmxlbmd0aFNpZ249LWxlbmd0aFNpZ247XG59XG5mbG9hdCBzdWJwaXhDPWNsYW1w
KGFicyhzdWJwaXhCKSpzdWJwaXhSY3BSYW5nZSwwLjAsMS4wKTtcbnZlYzIgcG9zQjtcbnBvc0Iu
eD1wb3NNLng7XG5wb3NCLnk9cG9zTS55O1xudmVjMiBvZmZOUDtcbm9mZk5QLng9KCFob3J6U3Bh
bikgPyAwLjAgOiB0ZXhlbFNpemUueDtcbm9mZk5QLnk9KGhvcnpTcGFuKSA/IDAuMCA6IHRleGVs
U2l6ZS55O1xuaWYgKCFob3J6U3BhbilcbntcbnBvc0IueCs9bGVuZ3RoU2lnbiowLjU7XG59XG5p
ZiAoaG9yelNwYW4pXG57XG5wb3NCLnkrPWxlbmd0aFNpZ24qMC41O1xufVxudmVjMiBwb3NOO1xu
cG9zTi54PXBvc0IueC1vZmZOUC54KjEuNTtcbnBvc04ueT1wb3NCLnktb2ZmTlAueSoxLjU7XG52
ZWMyIHBvc1A7XG5wb3NQLng9cG9zQi54K29mZk5QLngqMS41O1xucG9zUC55PXBvc0IueStvZmZO
UC55KjEuNTtcbmZsb2F0IHN1YnBpeEQ9KCgtMi4wKSpzdWJwaXhDKSszLjA7XG5mbG9hdCBsdW1h
RW5kTj1GeGFhTHVtYSh0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIscG9zTiwwLjApKTtcbmZsb2F0
IHN1YnBpeEU9c3VicGl4QypzdWJwaXhDO1xuZmxvYXQgbHVtYUVuZFA9RnhhYUx1bWEodGV4dHVy
ZTJEKHRleHR1cmVTYW1wbGVyLHBvc1AsMC4wKSk7XG5pZiAoIXBhaXJOKVxue1xubHVtYU5OPWx1
bWFTUztcbn1cbmZsb2F0IGdyYWRpZW50U2NhbGVkPWdyYWRpZW50KjEuMC80LjA7XG5mbG9hdCBs
dW1hTU09bHVtYU0tbHVtYU5OKjAuNTtcbmZsb2F0IHN1YnBpeEY9c3VicGl4RCpzdWJwaXhFO1xu
Ym9vbCBsdW1hTUxUWmVybz1sdW1hTU08MC4wO1xubHVtYUVuZE4tPWx1bWFOTiowLjU7XG5sdW1h
RW5kUC09bHVtYU5OKjAuNTtcbmJvb2wgZG9uZU49YWJzKGx1bWFFbmROKT49Z3JhZGllbnRTY2Fs
ZWQ7XG5ib29sIGRvbmVQPWFicyhsdW1hRW5kUCk+PWdyYWRpZW50U2NhbGVkO1xuaWYgKCFkb25l
TilcbntcbnBvc04ueC09b2ZmTlAueCozLjA7XG59XG5pZiAoIWRvbmVOKVxue1xucG9zTi55LT1v
ZmZOUC55KjMuMDtcbn1cbmJvb2wgZG9uZU5QPSghZG9uZU4pIHx8ICghZG9uZVApO1xuaWYgKCFk
b25lUClcbntcbnBvc1AueCs9b2ZmTlAueCozLjA7XG59XG5pZiAoIWRvbmVQKVxue1xucG9zUC55
Kz1vZmZOUC55KjMuMDtcbn1cbmlmIChkb25lTlApXG57XG5pZiAoIWRvbmVOKSBsdW1hRW5kTj1G
eGFhTHVtYSh0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIscG9zTi54eSwwLjApKTtcbmlmICghZG9u
ZVApIGx1bWFFbmRQPUZ4YWFMdW1hKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcixwb3NQLnh5LDAu
MCkpO1xuaWYgKCFkb25lTikgbHVtYUVuZE49bHVtYUVuZE4tbHVtYU5OKjAuNTtcbmlmICghZG9u
ZVApIGx1bWFFbmRQPWx1bWFFbmRQLWx1bWFOTiowLjU7XG5kb25lTj1hYnMobHVtYUVuZE4pPj1n
cmFkaWVudFNjYWxlZDtcbmRvbmVQPWFicyhsdW1hRW5kUCk+PWdyYWRpZW50U2NhbGVkO1xuaWYg
KCFkb25lTikgcG9zTi54LT1vZmZOUC54KjEyLjA7XG5pZiAoIWRvbmVOKSBwb3NOLnktPW9mZk5Q
LnkqMTIuMDtcbmRvbmVOUD0oIWRvbmVOKSB8fCAoIWRvbmVQKTtcbmlmICghZG9uZVApIHBvc1Au
eCs9b2ZmTlAueCoxMi4wO1xuaWYgKCFkb25lUCkgcG9zUC55Kz1vZmZOUC55KjEyLjA7XG59XG5m
bG9hdCBkc3ROPXBvc00ueC1wb3NOLng7XG5mbG9hdCBkc3RQPXBvc1AueC1wb3NNLng7XG5pZiAo
IWhvcnpTcGFuKVxue1xuZHN0Tj1wb3NNLnktcG9zTi55O1xufVxuaWYgKCFob3J6U3Bhbilcbntc
bmRzdFA9cG9zUC55LXBvc00ueTtcbn1cbmJvb2wgZ29vZFNwYW5OPShsdW1hRW5kTjwwLjApICE9
IGx1bWFNTFRaZXJvO1xuZmxvYXQgc3Bhbkxlbmd0aD0oZHN0UCtkc3ROKTtcbmJvb2wgZ29vZFNw
YW5QPShsdW1hRW5kUDwwLjApICE9IGx1bWFNTFRaZXJvO1xuZmxvYXQgc3Bhbkxlbmd0aFJjcD0x
LjAvc3Bhbkxlbmd0aDtcbmJvb2wgZGlyZWN0aW9uTj1kc3ROPGRzdFA7XG5mbG9hdCBkc3Q9bWlu
KGRzdE4sZHN0UCk7XG5ib29sIGdvb2RTcGFuPWRpcmVjdGlvbk4gPyBnb29kU3Bhbk4gOiBnb29k
U3BhblA7XG5mbG9hdCBzdWJwaXhHPXN1YnBpeEYqc3VicGl4RjtcbmZsb2F0IHBpeGVsT2Zmc2V0
PShkc3QqKC1zcGFuTGVuZ3RoUmNwKSkrMC41O1xuZmxvYXQgc3VicGl4SD1zdWJwaXhHKmZ4YWFR
dWFsaXR5U3VicGl4O1xuZmxvYXQgcGl4ZWxPZmZzZXRHb29kPWdvb2RTcGFuID8gcGl4ZWxPZmZz
ZXQgOiAwLjA7XG5mbG9hdCBwaXhlbE9mZnNldFN1YnBpeD1tYXgocGl4ZWxPZmZzZXRHb29kLHN1
YnBpeEgpO1xuaWYgKCFob3J6U3BhbilcbntcbnBvc00ueCs9cGl4ZWxPZmZzZXRTdWJwaXgqbGVu
Z3RoU2lnbjtcbn1cbmlmIChob3J6U3BhbilcbntcbnBvc00ueSs9cGl4ZWxPZmZzZXRTdWJwaXgq
bGVuZ3RoU2lnbjtcbn1cbiNpZmRlZiBNQUxJXG5pZihyYW5nZTxyYW5nZU1heENsYW1wZWQpXG57
XG5nbF9GcmFnQ29sb3I9cmdieU07XG59XG5lbHNlXG57XG5nbF9GcmFnQ29sb3I9dGV4dHVyZTJE
KHRleHR1cmVTYW1wbGVyLHBvc00sMC4wKTtcbn1cbiNlbHNlXG5nbF9GcmFnQ29sb3I9dGV4dHVy
ZTJEKHRleHR1cmVTYW1wbGVyLHBvc00sMC4wKTtcbiNlbmRpZlxufSI7CitfTWF0ZXJpYWxzX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVb
bmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGZ4YWFQaXhlbFNoYWRlciA9IHsg
bmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
U2hhZGVycy9meGFhLnZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vU2hhZGVycy9meGFhLnZlcnRleC50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBmeGFhVmVy
dGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImZ4YWFWZXJ0
ZXhTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZ4YWFWZXJ0ZXhTaGFkZXI7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0
ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnZnhhYVZlcnRleFNo
YWRlcic7Cit2YXIgc2hhZGVyID0gIlxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG51bmlmb3Jt
IHZlYzIgdGV4ZWxTaXplO1xuXG52YXJ5aW5nIHZlYzIgdlVWO1xudmFyeWluZyB2ZWMyIHNhbXBs
ZUNvb3JkUztcbnZhcnlpbmcgdmVjMiBzYW1wbGVDb29yZEU7XG52YXJ5aW5nIHZlYzIgc2FtcGxl
Q29vcmROO1xudmFyeWluZyB2ZWMyIHNhbXBsZUNvb3JkVztcbnZhcnlpbmcgdmVjMiBzYW1wbGVD
b29yZE5XO1xudmFyeWluZyB2ZWMyIHNhbXBsZUNvb3JkU0U7XG52YXJ5aW5nIHZlYzIgc2FtcGxl
Q29vcmRORTtcbnZhcnlpbmcgdmVjMiBzYW1wbGVDb29yZFNXO1xuY29uc3QgdmVjMiBtYWRkPXZl
YzIoMC41LDAuNSk7XG52b2lkIG1haW4odm9pZCkge1xudlVWPShwb3NpdGlvbiptYWRkK21hZGQp
O1xuc2FtcGxlQ29vcmRTPXZVVit2ZWMyKCAwLjAsMS4wKSp0ZXhlbFNpemU7XG5zYW1wbGVDb29y
ZEU9dlVWK3ZlYzIoIDEuMCwwLjApKnRleGVsU2l6ZTtcbnNhbXBsZUNvb3JkTj12VVYrdmVjMigg
MC4wLC0xLjApKnRleGVsU2l6ZTtcbnNhbXBsZUNvb3JkVz12VVYrdmVjMigtMS4wLDAuMCkqdGV4
ZWxTaXplO1xuc2FtcGxlQ29vcmROVz12VVYrdmVjMigtMS4wLC0xLjApKnRleGVsU2l6ZTtcbnNh
bXBsZUNvb3JkU0U9dlVWK3ZlYzIoIDEuMCwxLjApKnRleGVsU2l6ZTtcbnNhbXBsZUNvb3JkTkU9
dlVWK3ZlYzIoIDEuMCwtMS4wKSp0ZXhlbFNpemU7XG5zYW1wbGVDb29yZFNXPXZVVit2ZWMyKC0x
LjAsMS4wKSp0ZXhlbFNpemU7XG5nbF9Qb3NpdGlvbj12ZWM0KHBvc2l0aW9uLDAuMCwxLjApO1xu
fSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZl
Y3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGZ4
YWFWZXJ0ZXhTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvZ2VvbWV0cnkuZnJhZ21lbnQudHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMv
Z2VvbWV0cnkuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZ2VvbWV0cnlQaXhlbFNoYWRlciAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnZW9tZXRyeVBpeGVsU2hhZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZW9tZXRyeVBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAi
Li9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRl
cnNJbmNsdWRlX21ydEZyYWdtZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbXJ0RnJhZ21l
bnREZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL21ydEZyYWdtZW50RGVj
bGFyYXRpb24udHMiKTsKKworCit2YXIgbmFtZSA9ICdnZW9tZXRyeVBpeGVsU2hhZGVyJzsKK3Zh
ciBzaGFkZXIgPSAiI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZVxucHJl
Y2lzaW9uIGhpZ2hwIGZsb2F0O1xucHJlY2lzaW9uIGhpZ2hwIGludDtcbnZhcnlpbmcgdmVjMyB2
Tm9ybWFsVjtcbnZhcnlpbmcgdmVjNCB2Vmlld1BvcztcbiNpZmRlZiBQT1NJVElPTlxudmFyeWlu
ZyB2ZWMzIHZQb3NpdGlvbjtcbiNlbmRpZlxuI2lmZGVmIFZFTE9DSVRZXG52YXJ5aW5nIHZlYzQg
dkN1cnJlbnRQb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCB2UHJldmlvdXNQb3NpdGlvbjtcbiNlbmRp
ZlxuI2lmZGVmIEFMUEhBVEVTVFxudmFyeWluZyB2ZWMyIHZVVjtcbnVuaWZvcm0gc2FtcGxlcjJE
IGRpZmZ1c2VTYW1wbGVyO1xuI2VuZGlmXG4jaW5jbHVkZTxtcnRGcmFnbWVudERlY2xhcmF0aW9u
PltSRU5ERVJfVEFSR0VUX0NPVU5UXVxudm9pZCBtYWluKCkge1xuI2lmZGVmIEFMUEhBVEVTVFxu
aWYgKHRleHR1cmUyRChkaWZmdXNlU2FtcGxlcix2VVYpLmE8MC40KVxuZGlzY2FyZDtcbiNlbmRp
ZlxuZ2xfRnJhZ0RhdGFbMF09dmVjNCh2Vmlld1Bvcy56L3ZWaWV3UG9zLncsMC4wLDAuMCwxLjAp
O1xuXG5nbF9GcmFnRGF0YVsxXT12ZWM0KG5vcm1hbGl6ZSh2Tm9ybWFsViksMS4wKTtcblxuI2lm
ZGVmIFBPU0lUSU9OXG5nbF9GcmFnRGF0YVtQT1NJVElPTl9JTkRFWF09dmVjNCh2UG9zaXRpb24s
MS4wKTtcbiNlbmRpZlxuI2lmZGVmIFZFTE9DSVRZXG52ZWMyIGE9KHZDdXJyZW50UG9zaXRpb24u
eHkvdkN1cnJlbnRQb3NpdGlvbi53KSowLjUrMC41O1xudmVjMiBiPSh2UHJldmlvdXNQb3NpdGlv
bi54eS92UHJldmlvdXNQb3NpdGlvbi53KSowLjUrMC41O1xudmVjMiB2ZWxvY2l0eT1hYnMoYS1i
KTtcbnZlbG9jaXR5PXZlYzIocG93KHZlbG9jaXR5LngsMS4wLzMuMCkscG93KHZlbG9jaXR5Lnks
MS4wLzMuMCkpKnNpZ24oYS1iKSowLjUrMC41O1xuZ2xfRnJhZ0RhdGFbVkVMT0NJVFlfSU5ERVhd
PXZlYzQodmVsb2NpdHksMC4wLDEuMCk7XG4jZW5kaWZcbn0iOworX01hdGVyaWFsc19lZmZlY3Rf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVd
ID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBnZW9tZXRyeVBpeGVsU2hhZGVyID0geyBu
YW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9T
aGFkZXJzL2dlb21ldHJ5LnZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvZ2VvbWV0cnkudmVydGV4LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBnZW9tZXRyeVZlcnRleFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJnZW9tZXRyeVZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2Vv
bWV0cnlWZXJ0ZXhTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlh
bHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNEZWNsYXJhdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9TaGFkZXJzSW5jbHVkZS9ib25lc0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0lu
Y2x1ZGUvYm9uZXNEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9T
aGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJz
SW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9uLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX21vcnBoVGFyZ2V0c1Zl
cnRleERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleERlY2xhcmF0
aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4RGVjbGFy
YXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW5z
dGFuY2VzRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzRGVjbGFyYXRpb24gKi8g
Ii4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNEZWNsYXJhdGlvbi50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
U2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0lu
Y2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNJbmNsdWRlX2luc3RhbmNlc1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNW
ZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNWZXJ0ZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hh
ZGVyc0luY2x1ZGUvYm9uZXNWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25l
c1ZlcnRleC50cyIpOworCisKKworCisKKworCisKK3ZhciBuYW1lID0gJ2dlb21ldHJ5VmVydGV4
U2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xucHJlY2lzaW9u
IGhpZ2hwIGludDtcbiNpbmNsdWRlPGJvbmVzRGVjbGFyYXRpb24+XG4jaW5jbHVkZTxtb3JwaFRh
cmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRl
eERlY2xhcmF0aW9uPlswLi5tYXhTaW11bHRhbmVvdXNNb3JwaFRhcmdldHNdXG4jaW5jbHVkZTxp
bnN0YW5jZXNEZWNsYXJhdGlvbj5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRl
IHZlYzMgbm9ybWFsO1xuI2lmIGRlZmluZWQoQUxQSEFURVNUKSB8fCBkZWZpbmVkKE5FRURfVVYp
XG52YXJ5aW5nIHZlYzIgdlVWO1xudW5pZm9ybSBtYXQ0IGRpZmZ1c2VNYXRyaXg7XG4jaWZkZWYg
VVYxXG5hdHRyaWJ1dGUgdmVjMiB1djtcbiNlbmRpZlxuI2lmZGVmIFVWMlxuYXR0cmlidXRlIHZl
YzIgdXYyO1xuI2VuZGlmXG4jZW5kaWZcblxudW5pZm9ybSBtYXQ0IHZpZXdQcm9qZWN0aW9uO1xu
dW5pZm9ybSBtYXQ0IHZpZXc7XG52YXJ5aW5nIHZlYzMgdk5vcm1hbFY7XG52YXJ5aW5nIHZlYzQg
dlZpZXdQb3M7XG4jaWZkZWYgUE9TSVRJT05cbnZhcnlpbmcgdmVjMyB2UG9zaXRpb247XG4jZW5k
aWZcbiNpZmRlZiBWRUxPQ0lUWVxudW5pZm9ybSBtYXQ0IHByZXZpb3VzV29ybGQ7XG51bmlmb3Jt
IG1hdDQgcHJldmlvdXNWaWV3UHJvamVjdGlvbjtcbiNpZmRlZiBCT05FU19WRUxPQ0lUWV9FTkFC
TEVEXG4jaWYgTlVNX0JPTkVfSU5GTFVFTkNFUlM+MFxudW5pZm9ybSBtYXQ0IG1QcmV2aW91c0Jv
bmVzW0JvbmVzUGVyTWVzaF07XG4jZW5kaWZcbiNlbmRpZlxudmFyeWluZyB2ZWM0IHZDdXJyZW50
UG9zaXRpb247XG52YXJ5aW5nIHZlYzQgdlByZXZpb3VzUG9zaXRpb247XG4jZW5kaWZcbnZvaWQg
bWFpbih2b2lkKVxue1xudmVjMyBwb3NpdGlvblVwZGF0ZWQ9cG9zaXRpb247XG52ZWMzIG5vcm1h
bFVwZGF0ZWQ9bm9ybWFsO1xuI2lmZGVmIFVWMVxudmVjMiB1dlVwZGF0ZWQ9dXY7XG4jZW5kaWZc
biNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleD5bMC4ubWF4U2ltdWx0YW5lb3VzTW9ycGhUYXJn
ZXRzXVxuI2luY2x1ZGU8aW5zdGFuY2VzVmVydGV4PlxuI2lmIGRlZmluZWQoVkVMT0NJVFkpICYm
ICFkZWZpbmVkKEJPTkVTX1ZFTE9DSVRZX0VOQUJMRUQpXG5cbnZDdXJyZW50UG9zaXRpb249dmll
d1Byb2plY3Rpb24qZmluYWxXb3JsZCp2ZWM0KHBvc2l0aW9uVXBkYXRlZCwxLjApO1xudlByZXZp
b3VzUG9zaXRpb249cHJldmlvdXNWaWV3UHJvamVjdGlvbipwcmV2aW91c1dvcmxkKnZlYzQocG9z
aXRpb25VcGRhdGVkLDEuMCk7XG4jZW5kaWZcbiNpbmNsdWRlPGJvbmVzVmVydGV4PlxudmVjNCBw
b3M9dmVjNChmaW5hbFdvcmxkKnZlYzQocG9zaXRpb25VcGRhdGVkLDEuMCkpO1xudk5vcm1hbFY9
bm9ybWFsaXplKHZlYzMoKHZpZXcqZmluYWxXb3JsZCkqdmVjNChub3JtYWxVcGRhdGVkLDAuMCkp
KTtcbnZWaWV3UG9zPXZpZXcqcG9zO1xuI2lmIGRlZmluZWQoVkVMT0NJVFkpICYmIGRlZmluZWQo
Qk9ORVNfVkVMT0NJVFlfRU5BQkxFRClcbnZDdXJyZW50UG9zaXRpb249dmlld1Byb2plY3Rpb24q
ZmluYWxXb3JsZCp2ZWM0KHBvc2l0aW9uVXBkYXRlZCwxLjApO1xuI2lmIE5VTV9CT05FX0lORkxV
RU5DRVJTPjBcbm1hdDQgcHJldmlvdXNJbmZsdWVuY2U7XG5wcmV2aW91c0luZmx1ZW5jZT1tUHJl
dmlvdXNCb25lc1tpbnQobWF0cmljZXNJbmRpY2VzWzBdKV0qbWF0cmljZXNXZWlnaHRzWzBdO1xu
I2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjFcbnByZXZpb3VzSW5mbHVlbmNlKz1tUHJldmlvdXNC
b25lc1tpbnQobWF0cmljZXNJbmRpY2VzWzFdKV0qbWF0cmljZXNXZWlnaHRzWzFdO1xuI2VuZGlm
XG4jaWYgTlVNX0JPTkVfSU5GTFVFTkNFUlM+MlxucHJldmlvdXNJbmZsdWVuY2UrPW1QcmV2aW91
c0JvbmVzW2ludChtYXRyaWNlc0luZGljZXNbMl0pXSptYXRyaWNlc1dlaWdodHNbMl07XG4jZW5k
aWZcbiNpZiBOVU1fQk9ORV9JTkZMVUVOQ0VSUz4zXG5wcmV2aW91c0luZmx1ZW5jZSs9bVByZXZp
b3VzQm9uZXNbaW50KG1hdHJpY2VzSW5kaWNlc1szXSldKm1hdHJpY2VzV2VpZ2h0c1szXTtcbiNl
bmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjRcbnByZXZpb3VzSW5mbHVlbmNlKz1tUHJl
dmlvdXNCb25lc1tpbnQobWF0cmljZXNJbmRpY2VzRXh0cmFbMF0pXSptYXRyaWNlc1dlaWdodHNF
eHRyYVswXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjVcbnByZXZpb3VzSW5m
bHVlbmNlKz1tUHJldmlvdXNCb25lc1tpbnQobWF0cmljZXNJbmRpY2VzRXh0cmFbMV0pXSptYXRy
aWNlc1dlaWdodHNFeHRyYVsxXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjZc
bnByZXZpb3VzSW5mbHVlbmNlKz1tUHJldmlvdXNCb25lc1tpbnQobWF0cmljZXNJbmRpY2VzRXh0
cmFbMl0pXSptYXRyaWNlc1dlaWdodHNFeHRyYVsyXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lO
RkxVRU5DRVJTPjdcbnByZXZpb3VzSW5mbHVlbmNlKz1tUHJldmlvdXNCb25lc1tpbnQobWF0cmlj
ZXNJbmRpY2VzRXh0cmFbM10pXSptYXRyaWNlc1dlaWdodHNFeHRyYVszXTtcbiNlbmRpZlxudlBy
ZXZpb3VzUG9zaXRpb249cHJldmlvdXNWaWV3UHJvamVjdGlvbipwcmV2aW91c1dvcmxkKnByZXZp
b3VzSW5mbHVlbmNlKnZlYzQocG9zaXRpb25VcGRhdGVkLDEuMCk7XG4jZWxzZVxudlByZXZpb3Vz
UG9zaXRpb249cHJldmlvdXNWaWV3UHJvamVjdGlvbipwcmV2aW91c1dvcmxkKnZlYzQocG9zaXRp
b25VcGRhdGVkLDEuMCk7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFBPU0lUSU9OXG52UG9zaXRp
b249cG9zLnh5ei9wb3MudztcbiNlbmRpZlxuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb24qZmlu
YWxXb3JsZCp2ZWM0KHBvc2l0aW9uVXBkYXRlZCwxLjApO1xuI2lmIGRlZmluZWQoQUxQSEFURVNU
KSB8fCBkZWZpbmVkKEJBU0lDX1JFTkRFUilcbiNpZmRlZiBVVjFcbnZVVj12ZWMyKGRpZmZ1c2VN
YXRyaXgqdmVjNCh1dlVwZGF0ZWQsMS4wLDAuMCkpO1xuI2VuZGlmXG4jaWZkZWYgVVYyXG52VVY9
dmVjMihkaWZmdXNlTWF0cml4KnZlYzQodXYyLDEuMCwwLjApKTtcbiNlbmRpZlxuI2VuZGlmXG59
XG4iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZm
ZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBn
ZW9tZXRyeVZlcnRleFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9nbG93Qmx1clBvc3RQcm9jZXNzLmZyYWdt
ZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvZ2xvd0JsdXJQb3N0UHJvY2Vzcy5mcmFnbWVudC50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGdsb3dCbHVyUG9zdFByb2Nlc3NQaXhlbFNoYWRl
ciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnbG93Qmx1clBvc3RQcm9j
ZXNzUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdsb3dCbHVyUG9zdFByb2Nlc3NQ
aXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIg
bmFtZSA9ICdnbG93Qmx1clBvc3RQcm9jZXNzUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJc
bnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcblxu
dW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XG51bmlmb3JtIHZlYzIgZGlyZWN0aW9uO1xudW5pZm9y
bSBmbG9hdCBibHVyV2lkdGg7XG5cbmZsb2F0IGdldEx1bWluYW5jZSh2ZWMzIGNvbG9yKVxue1xu
cmV0dXJuIGRvdChjb2xvcix2ZWMzKDAuMjEyNiwwLjcxNTIsMC4wNzIyKSk7XG59XG52b2lkIG1h
aW4odm9pZClcbntcbmZsb2F0IHdlaWdodHNbN107XG53ZWlnaHRzWzBdPTAuMDU7XG53ZWlnaHRz
WzFdPTAuMTtcbndlaWdodHNbMl09MC4yO1xud2VpZ2h0c1szXT0wLjM7XG53ZWlnaHRzWzRdPTAu
MjtcbndlaWdodHNbNV09MC4xO1xud2VpZ2h0c1s2XT0wLjA1O1xudmVjMiB0ZXhlbFNpemU9dmVj
MigxLjAvc2NyZWVuU2l6ZS54LDEuMC9zY3JlZW5TaXplLnkpO1xudmVjMiB0ZXhlbFN0ZXA9dGV4
ZWxTaXplKmRpcmVjdGlvbipibHVyV2lkdGg7XG52ZWMyIHN0YXJ0PXZVVi0zLjAqdGV4ZWxTdGVw
O1xudmVjNCBiYXNlQ29sb3I9dmVjNCgwLiwwLiwwLiwwLik7XG52ZWMyIHRleGVsT2Zmc2V0PXZl
YzIoMC4sMC4pO1xuZm9yIChpbnQgaT0wOyBpPDc7IGkrKylcbntcblxudmVjNCB0ZXhlbD10ZXh0
dXJlMkQodGV4dHVyZVNhbXBsZXIsc3RhcnQrdGV4ZWxPZmZzZXQpO1xuYmFzZUNvbG9yLmErPXRl
eGVsLmEqd2VpZ2h0c1tpXTtcblxuZmxvYXQgbHVtaW5hbmNlPWdldEx1bWluYW5jZShiYXNlQ29s
b3IucmdiKTtcbmZsb2F0IGx1bWluYW5jZVRleGVsPWdldEx1bWluYW5jZSh0ZXhlbC5yZ2IpO1xu
ZmxvYXQgY2hvaWNlPXN0ZXAobHVtaW5hbmNlVGV4ZWwsbHVtaW5hbmNlKTtcbmJhc2VDb2xvci5y
Z2I9Y2hvaWNlKmJhc2VDb2xvci5yZ2IrKDEuMC1jaG9pY2UpKnRleGVsLnJnYjtcbnRleGVsT2Zm
c2V0Kz10ZXhlbFN0ZXA7XG59XG5nbF9GcmFnQ29sb3I9YmFzZUNvbG9yO1xufSI7CitfTWF0ZXJp
YWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJz
U3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGdsb3dCbHVyUG9zdFBy
b2Nlc3NQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9nbG93TWFwR2VuZXJhdGlvbi5mcmFnbWVudC50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vU2hhZGVycy9nbG93TWFwR2VuZXJhdGlvbi5mcmFnbWVudC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBnbG93TWFwR2VuZXJhdGlvblBpeGVsU2hhZGVyICovCisvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImdsb3dNYXBHZW5lcmF0aW9uUGl4ZWxTaGFkZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIGdsb3dNYXBHZW5lcmF0aW9uUGl4ZWxTaGFkZXI7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZm
ZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnZ2xvd01hcEdl
bmVyYXRpb25QaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBESUZGVVNFXG52YXJ5
aW5nIHZlYzIgdlVWRGlmZnVzZTtcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VTYW1wbGVyO1xu
I2VuZGlmXG4jaWZkZWYgT1BBQ0lUWVxudmFyeWluZyB2ZWMyIHZVVk9wYWNpdHk7XG51bmlmb3Jt
IHNhbXBsZXIyRCBvcGFjaXR5U2FtcGxlcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eUludGVuc2l0
eTtcbiNlbmRpZlxuI2lmZGVmIEVNSVNTSVZFXG52YXJ5aW5nIHZlYzIgdlVWRW1pc3NpdmU7XG51
bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZVNhbXBsZXI7XG4jZW5kaWZcbiNpZmRlZiBWRVJURVhB
TFBIQVxudmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbmRpZlxudW5pZm9ybSB2ZWM0IGdsb3dDb2xv
cjtcbnZvaWQgbWFpbih2b2lkKVxue1xudmVjNCBmaW5hbENvbG9yPWdsb3dDb2xvcjtcblxuI2lm
ZGVmIERJRkZVU0VcbnZlYzQgYWxiZWRvVGV4dHVyZT10ZXh0dXJlMkQoZGlmZnVzZVNhbXBsZXIs
dlVWRGlmZnVzZSk7XG5maW5hbENvbG9yLmEqPWFsYmVkb1RleHR1cmUuYTtcbiNlbmRpZlxuI2lm
ZGVmIE9QQUNJVFlcbnZlYzQgb3BhY2l0eU1hcD10ZXh0dXJlMkQob3BhY2l0eVNhbXBsZXIsdlVW
T3BhY2l0eSk7XG4jaWZkZWYgT1BBQ0lUWVJHQlxuZmluYWxDb2xvci5hKj1nZXRMdW1pbmFuY2Uo
b3BhY2l0eU1hcC5yZ2IpO1xuI2Vsc2VcbmZpbmFsQ29sb3IuYSo9b3BhY2l0eU1hcC5hO1xuI2Vu
ZGlmXG5maW5hbENvbG9yLmEqPW9wYWNpdHlJbnRlbnNpdHk7XG4jZW5kaWZcbiNpZmRlZiBWRVJU
RVhBTFBIQVxuZmluYWxDb2xvci5hKj12Q29sb3IuYTtcbiNlbmRpZlxuI2lmZGVmIEFMUEhBVEVT
VFxuaWYgKGZpbmFsQ29sb3IuYTxBTFBIQVRFU1RWQUxVRSlcbmRpc2NhcmQ7XG4jZW5kaWZcbiNp
ZmRlZiBFTUlTU0lWRVxuZ2xfRnJhZ0NvbG9yPXRleHR1cmUyRChlbWlzc2l2ZVNhbXBsZXIsdlVW
RW1pc3NpdmUpKmZpbmFsQ29sb3I7XG4jZWxzZVxuZ2xfRnJhZ0NvbG9yPWZpbmFsQ29sb3I7XG4j
ZW5kaWZcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8K
K3ZhciBnbG93TWFwR2VuZXJhdGlvblBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6
IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2dsb3dNYXBHZW5l
cmF0aW9uLnZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvZ2xvd01hcEdlbmVyYXRpb24udmVydGV4
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBnbG93TWFwR2VuZXJhdGlvblZlcnRleFNoYWRlciAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnbG93TWFwR2VuZXJhdGlvblZl
cnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2xvd01hcEdlbmVyYXRpb25WZXJ0ZXhT
aGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNEZWNsYXJhdGlvbl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5j
bHVkZS9ib25lc0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYm9uZXNE
ZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVk
ZV9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9tb3Jw
aFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL21vcnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX21vcnBoVGFyZ2V0c1ZlcnRleERlY2xhcmF0
aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleERlY2xhcmF0aW9uICovICIuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24udHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW5zdGFuY2VzRGVjbGFy
YXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9T
aGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1
ZGUvbW9ycGhUYXJnZXRzVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhU
YXJnZXRzVmVydGV4LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNs
dWRlX2luc3RhbmNlc1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXggKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUv
Ym9uZXNWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc1ZlcnRleC50cyIp
OworCisKKworCisKKworCisKK3ZhciBuYW1lID0gJ2dsb3dNYXBHZW5lcmF0aW9uVmVydGV4U2hh
ZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbiNpbmNsdWRl
PGJvbmVzRGVjbGFyYXRpb24+XG4jaW5jbHVkZTxtb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNs
YXJhdGlvbj5cbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleERlY2xhcmF0aW9uPlswLi5tYXhT
aW11bHRhbmVvdXNNb3JwaFRhcmdldHNdXG5cbiNpbmNsdWRlPGluc3RhbmNlc0RlY2xhcmF0aW9u
PlxudW5pZm9ybSBtYXQ0IHZpZXdQcm9qZWN0aW9uO1xudmFyeWluZyB2ZWM0IHZQb3NpdGlvbjtc
biNpZmRlZiBVVjFcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuI2VuZGlmXG4jaWZkZWYgVVYyXG5hdHRy
aWJ1dGUgdmVjMiB1djI7XG4jZW5kaWZcbiNpZmRlZiBESUZGVVNFXG52YXJ5aW5nIHZlYzIgdlVW
RGlmZnVzZTtcbnVuaWZvcm0gbWF0NCBkaWZmdXNlTWF0cml4O1xuI2VuZGlmXG4jaWZkZWYgT1BB
Q0lUWVxudmFyeWluZyB2ZWMyIHZVVk9wYWNpdHk7XG51bmlmb3JtIG1hdDQgb3BhY2l0eU1hdHJp
eDtcbiNlbmRpZlxuI2lmZGVmIEVNSVNTSVZFXG52YXJ5aW5nIHZlYzIgdlVWRW1pc3NpdmU7XG51
bmlmb3JtIG1hdDQgZW1pc3NpdmVNYXRyaXg7XG4jZW5kaWZcbiNpZmRlZiBWRVJURVhBTFBIQVxu
YXR0cmlidXRlIHZlYzQgY29sb3I7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuI2VuZGlmXG52b2lk
IG1haW4odm9pZClcbntcbnZlYzMgcG9zaXRpb25VcGRhdGVkPXBvc2l0aW9uO1xuI2lmZGVmIFVW
MVxudmVjMiB1dlVwZGF0ZWQ9dXY7XG4jZW5kaWZcbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRl
eD5bMC4ubWF4U2ltdWx0YW5lb3VzTW9ycGhUYXJnZXRzXVxuI2luY2x1ZGU8aW5zdGFuY2VzVmVy
dGV4PlxuI2luY2x1ZGU8Ym9uZXNWZXJ0ZXg+XG4jaWZkZWYgQ1VCRU1BUFxudlBvc2l0aW9uPWZp
bmFsV29ybGQqdmVjNChwb3NpdGlvblVwZGF0ZWQsMS4wKTtcbmdsX1Bvc2l0aW9uPXZpZXdQcm9q
ZWN0aW9uKmZpbmFsV29ybGQqdmVjNChwb3NpdGlvbiwxLjApO1xuI2Vsc2VcbnZQb3NpdGlvbj12
aWV3UHJvamVjdGlvbipmaW5hbFdvcmxkKnZlYzQocG9zaXRpb25VcGRhdGVkLDEuMCk7XG5nbF9Q
b3NpdGlvbj12UG9zaXRpb247XG4jZW5kaWZcbiNpZmRlZiBESUZGVVNFXG4jaWZkZWYgRElGRlVT
RVVWMVxudlVWRGlmZnVzZT12ZWMyKGRpZmZ1c2VNYXRyaXgqdmVjNCh1dlVwZGF0ZWQsMS4wLDAu
MCkpO1xuI2VuZGlmXG4jaWZkZWYgRElGRlVTRVVWMlxudlVWRGlmZnVzZT12ZWMyKGRpZmZ1c2VN
YXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBPUEFDSVRZ
XG4jaWZkZWYgT1BBQ0lUWVVWMVxudlVWT3BhY2l0eT12ZWMyKG9wYWNpdHlNYXRyaXgqdmVjNCh1
dlVwZGF0ZWQsMS4wLDAuMCkpO1xuI2VuZGlmXG4jaWZkZWYgT1BBQ0lUWVVWMlxudlVWT3BhY2l0
eT12ZWMyKG9wYWNpdHlNYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xuI2VuZGlmXG4jZW5kaWZc
biNpZmRlZiBFTUlTU0lWRVxuI2lmZGVmIEVNSVNTSVZFVVYxXG52VVZFbWlzc2l2ZT12ZWMyKGVt
aXNzaXZlTWF0cml4KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbiNlbmRpZlxuI2lmZGVmIEVN
SVNTSVZFVVYyXG52VVZFbWlzc2l2ZT12ZWMyKGVtaXNzaXZlTWF0cml4KnZlYzQodXYyLDEuMCww
LjApKTtcbiNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgVkVSVEVYQUxQSEFcbnZDb2xvcj1jb2xvcjtc
biNlbmRpZlxufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAq
LwordmFyIGdsb3dNYXBHZW5lcmF0aW9uVmVydGV4U2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFk
ZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2dsb3dNYXBN
ZXJnZS5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvZ2xvd01hcE1lcmdlLmZyYWdtZW50LnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBnbG93TWFwTWVyZ2VQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJnbG93TWFwTWVyZ2VQaXhlbFNoYWRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gZ2xvd01hcE1lcmdlUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVy
aWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnZ2xvd01hcE1lcmdlUGl4ZWxTaGFkZXIn
OwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0
ZXh0dXJlU2FtcGxlcjtcbiNpZmRlZiBFTUlTU0lWRVxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVy
ZVNhbXBsZXIyO1xuI2VuZGlmXG5cbnVuaWZvcm0gZmxvYXQgb2Zmc2V0O1xudm9pZCBtYWluKHZv
aWQpIHtcbnZlYzQgYmFzZUNvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xuI2lm
ZGVmIEVNSVNTSVZFXG5iYXNlQ29sb3IrPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcjIsdlVWKTtc
bmJhc2VDb2xvcio9b2Zmc2V0O1xuI2Vsc2VcbmJhc2VDb2xvci5hPWFicyhvZmZzZXQtYmFzZUNv
bG9yLmEpO1xuI2lmZGVmIFNUUk9LRVxuZmxvYXQgYWxwaGE9c21vb3Roc3RlcCguMCwuMSxiYXNl
Q29sb3IuYSk7XG5iYXNlQ29sb3IuYT1hbHBoYTtcbmJhc2VDb2xvci5yZ2I9YmFzZUNvbG9yLnJn
YiphbHBoYTtcbiNlbmRpZlxuI2VuZGlmXG5nbF9GcmFnQ29sb3I9YmFzZUNvbG9yO1xufSI7Citf
TWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5T
aGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGdsb3dNYXBN
ZXJnZVBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2dsb3dNYXBNZXJnZS52ZXJ0ZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hh
ZGVycy9nbG93TWFwTWVyZ2UudmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZ2xvd01hcE1lcmdl
VmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImdsb3dN
YXBNZXJnZVZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2xvd01hcE1lcmdlVmVy
dGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBu
YW1lID0gJ2dsb3dNYXBNZXJnZVZlcnRleFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxuYXR0cmli
dXRlIHZlYzIgcG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMiB2VVY7XG5jb25zdCB2ZWMyIG1hZGQ9
dmVjMigwLjUsMC41KTtcbnZvaWQgbWFpbih2b2lkKSB7XG52VVY9cG9zaXRpb24qbWFkZCttYWRk
O1xuZ2xfUG9zaXRpb249dmVjNChwb3NpdGlvbiwwLjAsMS4wKTtcbn0iOworX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3Jl
W25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBnbG93TWFwTWVyZ2VWZXJ0ZXhT
aGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1NoYWRlcnMvZ3B1UmVuZGVyUGFydGljbGVzLmZyYWdtZW50LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vU2hhZGVycy9ncHVSZW5kZXJQYXJ0aWNsZXMuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IGdwdVJlbmRlclBhcnRpY2xlc1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgImdwdVJlbmRlclBhcnRpY2xlc1BpeGVsU2hhZGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBncHVSZW5kZXJQYXJ0aWNsZXNQaXhlbFNoYWRlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9T
aGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uMl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9jbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uMiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL2NsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRpb24yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2ltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRl
cnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVscGVyRnVuY3Rpb25zX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRl
L2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0
aW9ucy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbWFn
ZVByb2Nlc3NpbmdGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVuY3Rp
b25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVuY3Rpb25z
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2NsaXBQbGFu
ZUZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZUZyYWdtZW50ICovICIuL1NoYWRlcnMv
U2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lRnJhZ21lbnQudHMiKTsKKworCisKKworCisKK3ZhciBu
YW1lID0gJ2dwdVJlbmRlclBhcnRpY2xlc1BpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiI3Zl
cnNpb24gMzAwIGVzXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbmluIHZlYzIg
dlVWO1xuaW4gdmVjNCB2Q29sb3I7XG5vdXQgdmVjNCBvdXRGcmFnQ29sb3I7XG4jaW5jbHVkZTxj
bGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uMj5cbiNpbmNsdWRlPGltYWdlUHJvY2Vzc2luZ0Rl
Y2xhcmF0aW9uPlxuI2luY2x1ZGU8aGVscGVyRnVuY3Rpb25zPlxuI2luY2x1ZGU8aW1hZ2VQcm9j
ZXNzaW5nRnVuY3Rpb25zPlxudm9pZCBtYWluKCkge1xuI2luY2x1ZGU8Y2xpcFBsYW5lRnJhZ21l
bnQ+XG52ZWM0IHRleHR1cmVDb2xvcj10ZXh0dXJlKHRleHR1cmVTYW1wbGVyLHZVVik7XG5vdXRG
cmFnQ29sb3I9dGV4dHVyZUNvbG9yKnZDb2xvcjtcbiNpZmRlZiBCTEVORE1VTFRJUExZTU9ERVxu
ZmxvYXQgYWxwaGE9dkNvbG9yLmEqdGV4dHVyZUNvbG9yLmE7XG5vdXRGcmFnQ29sb3IucmdiPW91
dEZyYWdDb2xvci5yZ2IqYWxwaGErdmVjMygxLjApKigxLjAtYWxwaGEpO1xuI2VuZGlmXG5cblxu
I2lmZGVmIElNQUdFUFJPQ0VTU0lOR1BPU1RQUk9DRVNTXG5vdXRGcmFnQ29sb3IucmdiPXRvTGlu
ZWFyU3BhY2Uob3V0RnJhZ0NvbG9yLnJnYik7XG4jZWxzZVxuI2lmZGVmIElNQUdFUFJPQ0VTU0lO
R1xub3V0RnJhZ0NvbG9yLnJnYj10b0xpbmVhclNwYWNlKG91dEZyYWdDb2xvci5yZ2IpO1xub3V0
RnJhZ0NvbG9yPWFwcGx5SW1hZ2VQcm9jZXNzaW5nKG91dEZyYWdDb2xvcik7XG4jZW5kaWZcbiNl
bmRpZlxufVxuIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICov
Cit2YXIgZ3B1UmVuZGVyUGFydGljbGVzUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRl
cjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvZ3B1UmVuZGVy
UGFydGljbGVzLnZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL2dwdVJlbmRlclBhcnRpY2xlcy52
ZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBncHVSZW5kZXJQYXJ0aWNsZXNWZXJ0ZXhT
aGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZ3B1UmVuZGVyUGFy
dGljbGVzVmVydGV4U2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBncHVSZW5kZXJQYXJ0aWNs
ZXNWZXJ0ZXhTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
ZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfY2xpcFBsYW5lVmVydGV4RGVj
bGFyYXRpb24yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uMiAqLyAi
Li9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uMi50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVWZXJ0
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0lu
Y2x1ZGUvY2xpcFBsYW5lVmVydGV4LnRzIik7CisKKworCit2YXIgbmFtZSA9ICdncHVSZW5kZXJQ
YXJ0aWNsZXNWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICIjdmVyc2lvbiAzMDAgZXNcbnVu
aWZvcm0gbWF0NCB2aWV3O1xudW5pZm9ybSBtYXQ0IHByb2plY3Rpb247XG51bmlmb3JtIHZlYzIg
dHJhbnNsYXRpb25QaXZvdDtcbnVuaWZvcm0gdmVjMyB3b3JsZE9mZnNldDtcblxuaW4gdmVjMyBw
b3NpdGlvbjtcbmluIGZsb2F0IGFnZTtcbmluIGZsb2F0IGxpZmU7XG5pbiB2ZWMzIHNpemU7XG4j
aWZuZGVmIEJJTExCT0FSRFxuaW4gdmVjMyBpbml0aWFsRGlyZWN0aW9uO1xuI2VuZGlmXG4jaWZk
ZWYgQklMTEJPQVJEU1RSRVRDSEVEXG5pbiB2ZWMzIGRpcmVjdGlvbjtcbiNlbmRpZlxuaW4gZmxv
YXQgYW5nbGU7XG4jaWZkZWYgQU5JTUFURVNIRUVUXG5pbiBmbG9hdCBjZWxsSW5kZXg7XG4jZW5k
aWZcbmluIHZlYzIgb2Zmc2V0O1xuaW4gdmVjMiB1djtcbm91dCB2ZWMyIHZVVjtcbm91dCB2ZWM0
IHZDb2xvcjtcbiNpZiBkZWZpbmVkKENMSVBQTEFORSkgfHwgZGVmaW5lZChDTElQUExBTkUyKSB8
fCBkZWZpbmVkKENMSVBQTEFORTMpIHx8IGRlZmluZWQoQ0xJUFBMQU5FNClcbnVuaWZvcm0gbWF0
NCBpbnZWaWV3O1xuI2VuZGlmXG4jaW5jbHVkZTxjbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbjI+
XG4jaWZkZWYgQ09MT1JHUkFESUVOVFNcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9yR3JhZGllbnRT
YW1wbGVyO1xuI2Vsc2VcbnVuaWZvcm0gdmVjNCBjb2xvckRlYWQ7XG5pbiB2ZWM0IGNvbG9yO1xu
I2VuZGlmXG4jaWZkZWYgQU5JTUFURVNIRUVUXG51bmlmb3JtIHZlYzMgc2hlZXRJbmZvcztcbiNl
bmRpZlxuI2lmZGVmIEJJTExCT0FSRFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xuI2VuZGlm
XG52ZWMzIHJvdGF0ZSh2ZWMzIHlheGlzLHZlYzMgcm90YXRlZENvcm5lcikge1xudmVjMyB4YXhp
cz1ub3JtYWxpemUoY3Jvc3ModmVjMygwLiwxLjAsMC4pLHlheGlzKSk7XG52ZWMzIHpheGlzPW5v
cm1hbGl6ZShjcm9zcyh5YXhpcyx4YXhpcykpO1xudmVjMyByb3cwPXZlYzMoeGF4aXMueCx4YXhp
cy55LHhheGlzLnopO1xudmVjMyByb3cxPXZlYzMoeWF4aXMueCx5YXhpcy55LHlheGlzLnopO1xu
dmVjMyByb3cyPXZlYzMoemF4aXMueCx6YXhpcy55LHpheGlzLnopO1xubWF0MyByb3RNYXRyaXg9
bWF0Myhyb3cwLHJvdzEscm93Mik7XG52ZWMzIGFsaWduZWRDb3JuZXI9cm90TWF0cml4KnJvdGF0
ZWRDb3JuZXI7XG5yZXR1cm4gKHBvc2l0aW9uK3dvcmxkT2Zmc2V0KSthbGlnbmVkQ29ybmVyO1xu
fVxuI2lmZGVmIEJJTExCT0FSRFNUUkVUQ0hFRFxudmVjMyByb3RhdGVBbGlnbih2ZWMzIHRvQ2Ft
ZXJhLHZlYzMgcm90YXRlZENvcm5lcikge1xudmVjMyBub3JtYWxpemVkVG9DYW1lcmE9bm9ybWFs
aXplKHRvQ2FtZXJhKTtcbnZlYzMgbm9ybWFsaXplZENyb3NzRGlyVG9DYW1lcmE9bm9ybWFsaXpl
KGNyb3NzKG5vcm1hbGl6ZShkaXJlY3Rpb24pLG5vcm1hbGl6ZWRUb0NhbWVyYSkpO1xudmVjMyBj
cm9zc1Byb2R1Y3Q9bm9ybWFsaXplKGNyb3NzKG5vcm1hbGl6ZWRUb0NhbWVyYSxub3JtYWxpemVk
Q3Jvc3NEaXJUb0NhbWVyYSkpO1xudmVjMyByb3cwPXZlYzMobm9ybWFsaXplZENyb3NzRGlyVG9D
YW1lcmEueCxub3JtYWxpemVkQ3Jvc3NEaXJUb0NhbWVyYS55LG5vcm1hbGl6ZWRDcm9zc0RpclRv
Q2FtZXJhLnopO1xudmVjMyByb3cxPXZlYzMoY3Jvc3NQcm9kdWN0LngsY3Jvc3NQcm9kdWN0Lnks
Y3Jvc3NQcm9kdWN0LnopO1xudmVjMyByb3cyPXZlYzMobm9ybWFsaXplZFRvQ2FtZXJhLngsbm9y
bWFsaXplZFRvQ2FtZXJhLnksbm9ybWFsaXplZFRvQ2FtZXJhLnopO1xubWF0MyByb3RNYXRyaXg9
bWF0Myhyb3cwLHJvdzEscm93Mik7XG52ZWMzIGFsaWduZWRDb3JuZXI9cm90TWF0cml4KnJvdGF0
ZWRDb3JuZXI7XG5yZXR1cm4gKHBvc2l0aW9uK3dvcmxkT2Zmc2V0KSthbGlnbmVkQ29ybmVyO1xu
fVxuI2VuZGlmXG52b2lkIG1haW4oKSB7XG4jaWZkZWYgQU5JTUFURVNIRUVUXG5mbG9hdCByb3dP
ZmZzZXQ9Zmxvb3IoY2VsbEluZGV4L3NoZWV0SW5mb3Mueik7XG5mbG9hdCBjb2x1bW5PZmZzZXQ9
Y2VsbEluZGV4LXJvd09mZnNldCpzaGVldEluZm9zLno7XG52ZWMyIHV2U2NhbGU9c2hlZXRJbmZv
cy54eTtcbnZlYzIgdXZPZmZzZXQ9dmVjMih1di54ICwxLjAtdXYueSk7XG52VVY9KHV2T2Zmc2V0
K3ZlYzIoY29sdW1uT2Zmc2V0LHJvd09mZnNldCkpKnV2U2NhbGU7XG4jZWxzZVxudlVWPXV2O1xu
I2VuZGlmXG5mbG9hdCByYXRpbz1hZ2UvbGlmZTtcbiNpZmRlZiBDT0xPUkdSQURJRU5UU1xudkNv
bG9yPXRleHR1cmUoY29sb3JHcmFkaWVudFNhbXBsZXIsdmVjMihyYXRpbywwKSk7XG4jZWxzZVxu
dkNvbG9yPWNvbG9yKnZlYzQoMS4wLXJhdGlvKStjb2xvckRlYWQqdmVjNChyYXRpbyk7XG4jZW5k
aWZcbnZlYzIgY29ybmVyUG9zPShvZmZzZXQtdHJhbnNsYXRpb25QaXZvdCkqc2l6ZS55eipzaXpl
LngrdHJhbnNsYXRpb25QaXZvdDtcbiNpZmRlZiBCSUxMQk9BUkRcbnZlYzQgcm90YXRlZENvcm5l
cjtcbnJvdGF0ZWRDb3JuZXIudz0wLjtcbiNpZmRlZiBCSUxMQk9BUkRZXG5yb3RhdGVkQ29ybmVy
Lng9Y29ybmVyUG9zLngqY29zKGFuZ2xlKS1jb3JuZXJQb3MueSpzaW4oYW5nbGUpO1xucm90YXRl
ZENvcm5lci56PWNvcm5lclBvcy54KnNpbihhbmdsZSkrY29ybmVyUG9zLnkqY29zKGFuZ2xlKTtc
bnJvdGF0ZWRDb3JuZXIueT0wLjtcbnZlYzMgeWF4aXM9KHBvc2l0aW9uK3dvcmxkT2Zmc2V0KS1l
eWVQb3NpdGlvbjtcbnlheGlzLnk9MC47XG52ZWMzIHdvcmxkUG9zPXJvdGF0ZShub3JtYWxpemUo
eWF4aXMpLHJvdGF0ZWRDb3JuZXIueHl6KTtcbnZlYzQgdmlld1Bvc2l0aW9uPSh2aWV3KnZlYzQo
d29ybGRQb3MsMS4wKSk7XG4jZWxpZiBkZWZpbmVkKEJJTExCT0FSRFNUUkVUQ0hFRClcbnJvdGF0
ZWRDb3JuZXIueD1jb3JuZXJQb3MueCpjb3MoYW5nbGUpLWNvcm5lclBvcy55KnNpbihhbmdsZSk7
XG5yb3RhdGVkQ29ybmVyLnk9Y29ybmVyUG9zLngqc2luKGFuZ2xlKStjb3JuZXJQb3MueSpjb3Mo
YW5nbGUpO1xucm90YXRlZENvcm5lci56PTAuO1xudmVjMyB0b0NhbWVyYT0ocG9zaXRpb24rd29y
bGRPZmZzZXQpLWV5ZVBvc2l0aW9uO1xudmVjMyB3b3JsZFBvcz1yb3RhdGVBbGlnbih0b0NhbWVy
YSxyb3RhdGVkQ29ybmVyLnh5eik7XG52ZWM0IHZpZXdQb3NpdGlvbj0odmlldyp2ZWM0KHdvcmxk
UG9zLDEuMCkpO1xuI2Vsc2Vcblxucm90YXRlZENvcm5lci54PWNvcm5lclBvcy54KmNvcyhhbmds
ZSktY29ybmVyUG9zLnkqc2luKGFuZ2xlKTtcbnJvdGF0ZWRDb3JuZXIueT1jb3JuZXJQb3MueCpz
aW4oYW5nbGUpK2Nvcm5lclBvcy55KmNvcyhhbmdsZSk7XG5yb3RhdGVkQ29ybmVyLno9MC47XG5c
bnZlYzQgdmlld1Bvc2l0aW9uPXZpZXcqdmVjNCgocG9zaXRpb24rd29ybGRPZmZzZXQpLDEuMCkr
cm90YXRlZENvcm5lcjtcbiNlbmRpZlxuI2Vsc2VcblxudmVjMyByb3RhdGVkQ29ybmVyO1xucm90
YXRlZENvcm5lci54PWNvcm5lclBvcy54KmNvcyhhbmdsZSktY29ybmVyUG9zLnkqc2luKGFuZ2xl
KTtcbnJvdGF0ZWRDb3JuZXIueT0wLjtcbnJvdGF0ZWRDb3JuZXIuej1jb3JuZXJQb3MueCpzaW4o
YW5nbGUpK2Nvcm5lclBvcy55KmNvcyhhbmdsZSk7XG52ZWMzIHlheGlzPW5vcm1hbGl6ZShpbml0
aWFsRGlyZWN0aW9uKTtcbnZlYzMgd29ybGRQb3M9cm90YXRlKHlheGlzLHJvdGF0ZWRDb3JuZXIp
O1xuXG52ZWM0IHZpZXdQb3NpdGlvbj12aWV3KnZlYzQod29ybGRQb3MsMS4wKTtcbiNlbmRpZlxu
Z2xfUG9zaXRpb249cHJvamVjdGlvbip2aWV3UG9zaXRpb247XG5cbiNpZiBkZWZpbmVkKENMSVBQ
TEFORSkgfHwgZGVmaW5lZChDTElQUExBTkUyKSB8fCBkZWZpbmVkKENMSVBQTEFORTMpIHx8IGRl
ZmluZWQoQ0xJUFBMQU5FNClcbnZlYzQgd29ybGRQb3M9aW52Vmlldyp2aWV3UG9zaXRpb247XG4j
ZW5kaWZcbiNpbmNsdWRlPGNsaXBQbGFuZVZlcnRleD5cbn0iOworX01hdGVyaWFsc19lZmZlY3Rf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVd
ID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBncHVSZW5kZXJQYXJ0aWNsZXNWZXJ0ZXhT
aGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1NoYWRlcnMvZ3B1VXBkYXRlUGFydGljbGVzLmZyYWdtZW50LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vU2hhZGVycy9ncHVVcGRhdGVQYXJ0aWNsZXMuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IGdwdVVwZGF0ZVBhcnRpY2xlc1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgImdwdVVwZGF0ZVBhcnRpY2xlc1BpeGVsU2hhZGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBncHVVcGRhdGVQYXJ0aWNsZXNQaXhlbFNoYWRlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdncHVVcGRhdGVQYXJ0
aWNsZXNQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIiN2ZXJzaW9uIDMwMCBlc1xudm9pZCBt
YWluKCkge1xuZGlzY2FyZDtcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7Cisv
KiogQGhpZGRlbiAqLwordmFyIGdwdVVwZGF0ZVBhcnRpY2xlc1BpeGVsU2hhZGVyID0geyBuYW1l
OiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFk
ZXJzL2dwdVVwZGF0ZVBhcnRpY2xlcy52ZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9ncHVVcGRh
dGVQYXJ0aWNsZXMudmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZ3B1VXBkYXRlUGFy
dGljbGVzVmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
ImdwdVVwZGF0ZVBhcnRpY2xlc1ZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ3B1
VXBkYXRlUGFydGljbGVzVmVydGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZm
ZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2dwdVVwZGF0ZVBhcnRpY2xlc1ZlcnRleFNoYWRlcic7
Cit2YXIgc2hhZGVyID0gIiN2ZXJzaW9uIDMwMCBlc1xuI2RlZmluZSBQSSAzLjE0MTU5XG51bmlm
b3JtIGZsb2F0IGN1cnJlbnRDb3VudDtcbnVuaWZvcm0gZmxvYXQgdGltZURlbHRhO1xudW5pZm9y
bSBmbG9hdCBzdG9wRmFjdG9yO1xudW5pZm9ybSBtYXQ0IGVtaXR0ZXJXTTtcbnVuaWZvcm0gdmVj
MiBsaWZlVGltZTtcbnVuaWZvcm0gdmVjMiBlbWl0UG93ZXI7XG51bmlmb3JtIHZlYzIgc2l6ZVJh
bmdlO1xudW5pZm9ybSB2ZWM0IHNjYWxlUmFuZ2U7XG4jaWZuZGVmIENPTE9SR1JBRElFTlRTXG51
bmlmb3JtIHZlYzQgY29sb3IxO1xudW5pZm9ybSB2ZWM0IGNvbG9yMjtcbiNlbmRpZlxudW5pZm9y
bSB2ZWMzIGdyYXZpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCByYW5kb21TYW1wbGVyO1xudW5pZm9y
bSBzYW1wbGVyMkQgcmFuZG9tU2FtcGxlcjI7XG51bmlmb3JtIHZlYzQgYW5nbGVSYW5nZTtcbiNp
ZmRlZiBCT1hFTUlUVEVSXG51bmlmb3JtIHZlYzMgZGlyZWN0aW9uMTtcbnVuaWZvcm0gdmVjMyBk
aXJlY3Rpb24yO1xudW5pZm9ybSB2ZWMzIG1pbkVtaXRCb3g7XG51bmlmb3JtIHZlYzMgbWF4RW1p
dEJveDtcbiNlbmRpZlxuI2lmZGVmIFBPSU5URU1JVFRFUlxudW5pZm9ybSB2ZWMzIGRpcmVjdGlv
bjE7XG51bmlmb3JtIHZlYzMgZGlyZWN0aW9uMjtcbiNlbmRpZlxuI2lmZGVmIEhFTUlTUEhFUklD
RU1JVFRFUlxudW5pZm9ybSBmbG9hdCByYWRpdXM7XG51bmlmb3JtIGZsb2F0IHJhZGl1c1Jhbmdl
O1xudW5pZm9ybSBmbG9hdCBkaXJlY3Rpb25SYW5kb21pemVyO1xuI2VuZGlmXG4jaWZkZWYgU1BI
RVJFRU1JVFRFUlxudW5pZm9ybSBmbG9hdCByYWRpdXM7XG51bmlmb3JtIGZsb2F0IHJhZGl1c1Jh
bmdlO1xuI2lmZGVmIERJUkVDVEVEU1BIRVJFRU1JVFRFUlxudW5pZm9ybSB2ZWMzIGRpcmVjdGlv
bjE7XG51bmlmb3JtIHZlYzMgZGlyZWN0aW9uMjtcbiNlbHNlXG51bmlmb3JtIGZsb2F0IGRpcmVj
dGlvblJhbmRvbWl6ZXI7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIENZTElOREVSRU1JVFRFUlxu
dW5pZm9ybSBmbG9hdCByYWRpdXM7XG51bmlmb3JtIGZsb2F0IGhlaWdodDtcbnVuaWZvcm0gZmxv
YXQgcmFkaXVzUmFuZ2U7XG4jaWZkZWYgRElSRUNURURDWUxJTkRFUkVNSVRURVJcbnVuaWZvcm0g
dmVjMyBkaXJlY3Rpb24xO1xudW5pZm9ybSB2ZWMzIGRpcmVjdGlvbjI7XG4jZWxzZVxudW5pZm9y
bSBmbG9hdCBkaXJlY3Rpb25SYW5kb21pemVyO1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBDT05F
RU1JVFRFUlxudW5pZm9ybSB2ZWMyIHJhZGl1cztcbnVuaWZvcm0gZmxvYXQgY29uZUFuZ2xlO1xu
dW5pZm9ybSB2ZWMyIGhlaWdodDtcbnVuaWZvcm0gZmxvYXQgZGlyZWN0aW9uUmFuZG9taXplcjtc
biNlbmRpZlxuXG5pbiB2ZWMzIHBvc2l0aW9uO1xuaW4gZmxvYXQgYWdlO1xuaW4gZmxvYXQgbGlm
ZTtcbmluIHZlYzQgc2VlZDtcbmluIHZlYzMgc2l6ZTtcbiNpZm5kZWYgQ09MT1JHUkFESUVOVFNc
bmluIHZlYzQgY29sb3I7XG4jZW5kaWZcbmluIHZlYzMgZGlyZWN0aW9uO1xuI2lmbmRlZiBCSUxM
Qk9BUkRcbmluIHZlYzMgaW5pdGlhbERpcmVjdGlvbjtcbiNlbmRpZlxuI2lmZGVmIEFOR1VMQVJT
UEVFREdSQURJRU5UU1xuaW4gZmxvYXQgYW5nbGU7XG4jZWxzZVxuaW4gdmVjMiBhbmdsZTtcbiNl
bmRpZlxuI2lmZGVmIEFOSU1BVEVTSEVFVFxuaW4gZmxvYXQgY2VsbEluZGV4O1xuI2lmZGVmIEFO
SU1BVEVTSEVFVFJBTkRPTVNUQVJUXG5pbiBmbG9hdCBjZWxsU3RhcnRPZmZzZXQ7XG4jZW5kaWZc
biNlbmRpZlxuI2lmZGVmIE5PSVNFXG5pbiB2ZWMzIG5vaXNlQ29vcmRpbmF0ZXMxO1xuaW4gdmVj
MyBub2lzZUNvb3JkaW5hdGVzMjtcbiNlbmRpZlxuXG5vdXQgdmVjMyBvdXRQb3NpdGlvbjtcbm91
dCBmbG9hdCBvdXRBZ2U7XG5vdXQgZmxvYXQgb3V0TGlmZTtcbm91dCB2ZWM0IG91dFNlZWQ7XG5v
dXQgdmVjMyBvdXRTaXplO1xuI2lmbmRlZiBDT0xPUkdSQURJRU5UU1xub3V0IHZlYzQgb3V0Q29s
b3I7XG4jZW5kaWZcbm91dCB2ZWMzIG91dERpcmVjdGlvbjtcbiNpZm5kZWYgQklMTEJPQVJEXG5v
dXQgdmVjMyBvdXRJbml0aWFsRGlyZWN0aW9uO1xuI2VuZGlmXG4jaWZkZWYgQU5HVUxBUlNQRUVE
R1JBRElFTlRTXG5vdXQgZmxvYXQgb3V0QW5nbGU7XG4jZWxzZVxub3V0IHZlYzIgb3V0QW5nbGU7
XG4jZW5kaWZcbiNpZmRlZiBBTklNQVRFU0hFRVRcbm91dCBmbG9hdCBvdXRDZWxsSW5kZXg7XG4j
aWZkZWYgQU5JTUFURVNIRUVUUkFORE9NU1RBUlRcbm91dCBmbG9hdCBvdXRDZWxsU3RhcnRPZmZz
ZXQ7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIE5PSVNFXG5vdXQgdmVjMyBvdXROb2lzZUNvb3Jk
aW5hdGVzMTtcbm91dCB2ZWMzIG91dE5vaXNlQ29vcmRpbmF0ZXMyO1xuI2VuZGlmXG4jaWZkZWYg
U0laRUdSQURJRU5UU1xudW5pZm9ybSBzYW1wbGVyMkQgc2l6ZUdyYWRpZW50U2FtcGxlcjtcbiNl
bmRpZlxuI2lmZGVmIEFOR1VMQVJTUEVFREdSQURJRU5UU1xudW5pZm9ybSBzYW1wbGVyMkQgYW5n
dWxhclNwZWVkR3JhZGllbnRTYW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYgVkVMT0NJVFlHUkFESUVO
VFNcbnVuaWZvcm0gc2FtcGxlcjJEIHZlbG9jaXR5R3JhZGllbnRTYW1wbGVyO1xuI2VuZGlmXG4j
aWZkZWYgTElNSVRWRUxPQ0lUWUdSQURJRU5UU1xudW5pZm9ybSBzYW1wbGVyMkQgbGltaXRWZWxv
Y2l0eUdyYWRpZW50U2FtcGxlcjtcbnVuaWZvcm0gZmxvYXQgbGltaXRWZWxvY2l0eURhbXBpbmc7
XG4jZW5kaWZcbiNpZmRlZiBEUkFHR1JBRElFTlRTXG51bmlmb3JtIHNhbXBsZXIyRCBkcmFnR3Jh
ZGllbnRTYW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYgTk9JU0VcbnVuaWZvcm0gdmVjMyBub2lzZVN0
cmVuZ3RoO1xudW5pZm9ybSBzYW1wbGVyMkQgbm9pc2VTYW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYg
QU5JTUFURVNIRUVUXG51bmlmb3JtIHZlYzMgY2VsbEluZm9zO1xuI2VuZGlmXG52ZWMzIGdldFJh
bmRvbVZlYzMoZmxvYXQgb2Zmc2V0KSB7XG5yZXR1cm4gdGV4dHVyZShyYW5kb21TYW1wbGVyMix2
ZWMyKGZsb2F0KGdsX1ZlcnRleElEKSpvZmZzZXQvY3VycmVudENvdW50LDApKS5yZ2I7XG59XG52
ZWM0IGdldFJhbmRvbVZlYzQoZmxvYXQgb2Zmc2V0KSB7XG5yZXR1cm4gdGV4dHVyZShyYW5kb21T
YW1wbGVyLHZlYzIoZmxvYXQoZ2xfVmVydGV4SUQpKm9mZnNldC9jdXJyZW50Q291bnQsMCkpO1xu
fVxudm9pZCBtYWluKCkge1xuZmxvYXQgbmV3QWdlPWFnZSt0aW1lRGVsdGE7XG5cbmlmIChuZXdB
Z2U+PWxpZmUgJiYgc3RvcEZhY3RvciAhPSAwLikge1xudmVjMyBwb3NpdGlvbjtcbnZlYzMgZGly
ZWN0aW9uO1xuXG52ZWM0IHJhbmRvbXM9Z2V0UmFuZG9tVmVjNChzZWVkLngpO1xuXG5vdXRMaWZl
PWxpZmVUaW1lLngrKGxpZmVUaW1lLnktbGlmZVRpbWUueCkqcmFuZG9tcy5yO1xub3V0QWdlPW1v
ZChuZXdBZ2Usb3V0TGlmZSk7XG5cbm91dFNlZWQ9c2VlZDtcblxuI2lmZGVmIFNJWkVHUkFESUVO
VFNcbm91dFNpemUueD10ZXh0dXJlKHNpemVHcmFkaWVudFNhbXBsZXIsdmVjMigwLDApKS5yO1xu
I2Vsc2Vcbm91dFNpemUueD1zaXplUmFuZ2UueCsoc2l6ZVJhbmdlLnktc2l6ZVJhbmdlLngpKnJh
bmRvbXMuZztcbiNlbmRpZlxub3V0U2l6ZS55PXNjYWxlUmFuZ2UueCsoc2NhbGVSYW5nZS55LXNj
YWxlUmFuZ2UueCkqcmFuZG9tcy5iO1xub3V0U2l6ZS56PXNjYWxlUmFuZ2Uueisoc2NhbGVSYW5n
ZS53LXNjYWxlUmFuZ2UueikqcmFuZG9tcy5hO1xuI2lmbmRlZiBDT0xPUkdSQURJRU5UU1xuXG5v
dXRDb2xvcj1jb2xvcjErKGNvbG9yMi1jb2xvcjEpKnJhbmRvbXMuYjtcbiNlbmRpZlxuXG4jaWZu
ZGVmIEFOR1VMQVJTUEVFREdSQURJRU5UU1xub3V0QW5nbGUueT1hbmdsZVJhbmdlLngrKGFuZ2xl
UmFuZ2UueS1hbmdsZVJhbmdlLngpKnJhbmRvbXMuYTtcbm91dEFuZ2xlLng9YW5nbGVSYW5nZS56
KyhhbmdsZVJhbmdlLnctYW5nbGVSYW5nZS56KSpyYW5kb21zLnI7XG4jZWxzZVxub3V0QW5nbGU9
YW5nbGVSYW5nZS56KyhhbmdsZVJhbmdlLnctYW5nbGVSYW5nZS56KSpyYW5kb21zLnI7XG4jZW5k
aWZcblxuI2lmZGVmIFBPSU5URU1JVFRFUlxudmVjMyByYW5kb21zMj1nZXRSYW5kb21WZWMzKHNl
ZWQueSk7XG52ZWMzIHJhbmRvbXMzPWdldFJhbmRvbVZlYzMoc2VlZC56KTtcbnBvc2l0aW9uPXZl
YzMoMCwwLDApO1xuZGlyZWN0aW9uPWRpcmVjdGlvbjErKGRpcmVjdGlvbjItZGlyZWN0aW9uMSkq
cmFuZG9tczM7XG4jZWxpZiBkZWZpbmVkKEJPWEVNSVRURVIpXG52ZWMzIHJhbmRvbXMyPWdldFJh
bmRvbVZlYzMoc2VlZC55KTtcbnZlYzMgcmFuZG9tczM9Z2V0UmFuZG9tVmVjMyhzZWVkLnopO1xu
cG9zaXRpb249bWluRW1pdEJveCsobWF4RW1pdEJveC1taW5FbWl0Qm94KSpyYW5kb21zMjtcbmRp
cmVjdGlvbj1kaXJlY3Rpb24xKyhkaXJlY3Rpb24yLWRpcmVjdGlvbjEpKnJhbmRvbXMzO1xuI2Vs
aWYgZGVmaW5lZChIRU1JU1BIRVJJQ0VNSVRURVIpXG52ZWMzIHJhbmRvbXMyPWdldFJhbmRvbVZl
YzMoc2VlZC55KTtcbnZlYzMgcmFuZG9tczM9Z2V0UmFuZG9tVmVjMyhzZWVkLnopO1xuXG5mbG9h
dCBwaGk9Mi4wKlBJKnJhbmRvbXMyLng7XG5mbG9hdCB0aGV0YT1hY29zKDIuMCpyYW5kb21zMi55
LTEuMCk7XG5mbG9hdCByYW5kWD1jb3MocGhpKSpzaW4odGhldGEpO1xuZmxvYXQgcmFuZFk9Y29z
KHRoZXRhKTtcbmZsb2F0IHJhbmRaPXNpbihwaGkpKnNpbih0aGV0YSk7XG5wb3NpdGlvbj0ocmFk
aXVzLShyYWRpdXMqcmFkaXVzUmFuZ2UqcmFuZG9tczIueikpKnZlYzMocmFuZFgsYWJzKHJhbmRZ
KSxyYW5kWik7XG5kaXJlY3Rpb249cG9zaXRpb24rZGlyZWN0aW9uUmFuZG9taXplcipyYW5kb21z
MztcbiNlbGlmIGRlZmluZWQoU1BIRVJFRU1JVFRFUilcbnZlYzMgcmFuZG9tczI9Z2V0UmFuZG9t
VmVjMyhzZWVkLnkpO1xudmVjMyByYW5kb21zMz1nZXRSYW5kb21WZWMzKHNlZWQueik7XG5cbmZs
b2F0IHBoaT0yLjAqUEkqcmFuZG9tczIueDtcbmZsb2F0IHRoZXRhPWFjb3MoMi4wKnJhbmRvbXMy
LnktMS4wKTtcbmZsb2F0IHJhbmRYPWNvcyhwaGkpKnNpbih0aGV0YSk7XG5mbG9hdCByYW5kWT1j
b3ModGhldGEpO1xuZmxvYXQgcmFuZFo9c2luKHBoaSkqc2luKHRoZXRhKTtcbnBvc2l0aW9uPShy
YWRpdXMtKHJhZGl1cypyYWRpdXNSYW5nZSpyYW5kb21zMi56KSkqdmVjMyhyYW5kWCxyYW5kWSxy
YW5kWik7XG4jaWZkZWYgRElSRUNURURTUEhFUkVFTUlUVEVSXG5kaXJlY3Rpb249ZGlyZWN0aW9u
MSsoZGlyZWN0aW9uMi1kaXJlY3Rpb24xKSpyYW5kb21zMztcbiNlbHNlXG5cbmRpcmVjdGlvbj1w
b3NpdGlvbitkaXJlY3Rpb25SYW5kb21pemVyKnJhbmRvbXMzO1xuI2VuZGlmXG4jZWxpZiBkZWZp
bmVkKENZTElOREVSRU1JVFRFUilcbnZlYzMgcmFuZG9tczI9Z2V0UmFuZG9tVmVjMyhzZWVkLnkp
O1xudmVjMyByYW5kb21zMz1nZXRSYW5kb21WZWMzKHNlZWQueik7XG5cbmZsb2F0IHlQb3M9KHJh
bmRvbXMyLngtMC41KSpoZWlnaHQ7XG5mbG9hdCBhbmdsZT1yYW5kb21zMi55KlBJKjIuO1xuZmxv
YXQgaW52ZXJzZVJhZGl1c1JhbmdlU3F1YXJlZD0oKDEuLXJhZGl1c1JhbmdlKSooMS4tcmFkaXVz
UmFuZ2UpKTtcbmZsb2F0IHBvc2l0aW9uUmFkaXVzPXJhZGl1cypzcXJ0KGludmVyc2VSYWRpdXNS
YW5nZVNxdWFyZWQrKHJhbmRvbXMyLnoqKDEuLWludmVyc2VSYWRpdXNSYW5nZVNxdWFyZWQpKSk7
XG5mbG9hdCB4UG9zPXBvc2l0aW9uUmFkaXVzKmNvcyhhbmdsZSk7XG5mbG9hdCB6UG9zPXBvc2l0
aW9uUmFkaXVzKnNpbihhbmdsZSk7XG5wb3NpdGlvbj12ZWMzKHhQb3MseVBvcyx6UG9zKTtcbiNp
ZmRlZiBESVJFQ1RFRENZTElOREVSRU1JVFRFUlxuZGlyZWN0aW9uPWRpcmVjdGlvbjErKGRpcmVj
dGlvbjItZGlyZWN0aW9uMSkqcmFuZG9tczM7XG4jZWxzZVxuXG5hbmdsZT1hbmdsZSsoKHJhbmRv
bXMzLngtMC41KSpQSSk7XG5kaXJlY3Rpb249dmVjMyhjb3MoYW5nbGUpLHJhbmRvbXMzLnktMC41
LHNpbihhbmdsZSkpO1xuZGlyZWN0aW9uPW5vcm1hbGl6ZShkaXJlY3Rpb24pO1xuI2VuZGlmXG4j
ZWxpZiBkZWZpbmVkKENPTkVFTUlUVEVSKVxudmVjMyByYW5kb21zMj1nZXRSYW5kb21WZWMzKHNl
ZWQueSk7XG5mbG9hdCBzPTIuMCpQSSpyYW5kb21zMi54O1xuI2lmZGVmIENPTkVFTUlUVEVSU1BB
V05QT0lOVFxuZmxvYXQgaD0wLjAwMDE7XG4jZWxzZVxuZmxvYXQgaD1yYW5kb21zMi55KmhlaWdo
dC55O1xuXG5oPTEuLWgqaDtcbiNlbmRpZlxuZmxvYXQgbFJhZGl1cz1yYWRpdXMueC1yYWRpdXMu
eCpyYW5kb21zMi56KnJhZGl1cy55O1xubFJhZGl1cz1sUmFkaXVzKmg7XG5mbG9hdCByYW5kWD1s
UmFkaXVzKnNpbihzKTtcbmZsb2F0IHJhbmRaPWxSYWRpdXMqY29zKHMpO1xuZmxvYXQgcmFuZFk9
aCpoZWlnaHQueDtcbnBvc2l0aW9uPXZlYzMocmFuZFgscmFuZFkscmFuZFopO1xuXG5pZiAoYWJz
KGNvcyhjb25lQW5nbGUpKSA9PSAxLjApIHtcbmRpcmVjdGlvbj12ZWMzKDAuLDEuMCwwLik7XG59
IGVsc2Uge1xudmVjMyByYW5kb21zMz1nZXRSYW5kb21WZWMzKHNlZWQueik7XG5kaXJlY3Rpb249
bm9ybWFsaXplKHBvc2l0aW9uK2RpcmVjdGlvblJhbmRvbWl6ZXIqcmFuZG9tczMpO1xufVxuI2Vs
c2VcblxucG9zaXRpb249dmVjMygwLiwwLiwwLik7XG5cbmRpcmVjdGlvbj0yLjAqKGdldFJhbmRv
bVZlYzMoc2VlZC53KS12ZWMzKDAuNSwwLjUsMC41KSk7XG4jZW5kaWZcbmZsb2F0IHBvd2VyPWVt
aXRQb3dlci54KyhlbWl0UG93ZXIueS1lbWl0UG93ZXIueCkqcmFuZG9tcy5hO1xub3V0UG9zaXRp
b249KGVtaXR0ZXJXTSp2ZWM0KHBvc2l0aW9uLDEuKSkueHl6O1xudmVjMyBpbml0aWFsPShlbWl0
dGVyV00qdmVjNChkaXJlY3Rpb24sMC4pKS54eXo7XG5vdXREaXJlY3Rpb249aW5pdGlhbCpwb3dl
cjtcbiNpZm5kZWYgQklMTEJPQVJEXG5vdXRJbml0aWFsRGlyZWN0aW9uPWluaXRpYWw7XG4jZW5k
aWZcbiNpZmRlZiBBTklNQVRFU0hFRVRcbm91dENlbGxJbmRleD1jZWxsSW5mb3MueDtcbiNpZmRl
ZiBBTklNQVRFU0hFRVRSQU5ET01TVEFSVFxub3V0Q2VsbFN0YXJ0T2Zmc2V0PXJhbmRvbXMuYSpv
dXRMaWZlO1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBOT0lTRVxub3V0Tm9pc2VDb29yZGluYXRl
czE9bm9pc2VDb29yZGluYXRlczE7XG5vdXROb2lzZUNvb3JkaW5hdGVzMj1ub2lzZUNvb3JkaW5h
dGVzMjtcbiNlbmRpZlxufSBlbHNlIHtcbmZsb2F0IGRpcmVjdGlvblNjYWxlPXRpbWVEZWx0YTtc
bm91dEFnZT1uZXdBZ2U7XG5mbG9hdCBhZ2VHcmFkaWVudD1uZXdBZ2UvbGlmZTtcbiNpZmRlZiBW
RUxPQ0lUWUdSQURJRU5UU1xuZGlyZWN0aW9uU2NhbGUqPXRleHR1cmUodmVsb2NpdHlHcmFkaWVu
dFNhbXBsZXIsdmVjMihhZ2VHcmFkaWVudCwwKSkucjtcbiNlbmRpZlxuI2lmZGVmIERSQUdHUkFE
SUVOVFNcbmRpcmVjdGlvblNjYWxlKj0xLjAtdGV4dHVyZShkcmFnR3JhZGllbnRTYW1wbGVyLHZl
YzIoYWdlR3JhZGllbnQsMCkpLnI7XG4jZW5kaWZcbm91dFBvc2l0aW9uPXBvc2l0aW9uK2RpcmVj
dGlvbipkaXJlY3Rpb25TY2FsZTtcbm91dExpZmU9bGlmZTtcbm91dFNlZWQ9c2VlZDtcbiNpZm5k
ZWYgQ09MT1JHUkFESUVOVFNcbm91dENvbG9yPWNvbG9yO1xuI2VuZGlmXG4jaWZkZWYgU0laRUdS
QURJRU5UU1xub3V0U2l6ZS54PXRleHR1cmUoc2l6ZUdyYWRpZW50U2FtcGxlcix2ZWMyKGFnZUdy
YWRpZW50LDApKS5yO1xub3V0U2l6ZS55ej1zaXplLnl6O1xuI2Vsc2Vcbm91dFNpemU9c2l6ZTtc
biNlbmRpZlxuI2lmbmRlZiBCSUxMQk9BUkRcbm91dEluaXRpYWxEaXJlY3Rpb249aW5pdGlhbERp
cmVjdGlvbjtcbiNlbmRpZlxudmVjMyB1cGRhdGVkRGlyZWN0aW9uPWRpcmVjdGlvbitncmF2aXR5
KnRpbWVEZWx0YTtcbiNpZmRlZiBMSU1JVFZFTE9DSVRZR1JBRElFTlRTXG5mbG9hdCBsaW1pdFZl
bG9jaXR5PXRleHR1cmUobGltaXRWZWxvY2l0eUdyYWRpZW50U2FtcGxlcix2ZWMyKGFnZUdyYWRp
ZW50LDApKS5yO1xuZmxvYXQgY3VycmVudFZlbG9jaXR5PWxlbmd0aCh1cGRhdGVkRGlyZWN0aW9u
KTtcbmlmIChjdXJyZW50VmVsb2NpdHk+bGltaXRWZWxvY2l0eSkge1xudXBkYXRlZERpcmVjdGlv
bj11cGRhdGVkRGlyZWN0aW9uKmxpbWl0VmVsb2NpdHlEYW1waW5nO1xufVxuI2VuZGlmXG5vdXRE
aXJlY3Rpb249dXBkYXRlZERpcmVjdGlvbjtcbiNpZmRlZiBOT0lTRVxudmVjMyBsb2NhbFBvc2l0
aW9uPW91dFBvc2l0aW9uLWVtaXR0ZXJXTVszXS54eXo7XG5mbG9hdCBmZXRjaGVkUj10ZXh0dXJl
KG5vaXNlU2FtcGxlcix2ZWMyKG5vaXNlQ29vcmRpbmF0ZXMxLngsbm9pc2VDb29yZGluYXRlczEu
eSkqdmVjMigwLjUpK3ZlYzIoMC41KSkucjtcbmZsb2F0IGZldGNoZWRHPXRleHR1cmUobm9pc2VT
YW1wbGVyLHZlYzIobm9pc2VDb29yZGluYXRlczEueixub2lzZUNvb3JkaW5hdGVzMi54KSp2ZWMy
KDAuNSkrdmVjMigwLjUpKS5yO1xuZmxvYXQgZmV0Y2hlZEI9dGV4dHVyZShub2lzZVNhbXBsZXIs
dmVjMihub2lzZUNvb3JkaW5hdGVzMi55LG5vaXNlQ29vcmRpbmF0ZXMyLnopKnZlYzIoMC41KSt2
ZWMyKDAuNSkpLnI7XG52ZWMzIGZvcmNlPXZlYzMoMi4qZmV0Y2hlZFItMS4sMi4qZmV0Y2hlZEct
MS4sMi4qZmV0Y2hlZEItMS4pKm5vaXNlU3RyZW5ndGg7XG5vdXREaXJlY3Rpb249b3V0RGlyZWN0
aW9uK2ZvcmNlKnRpbWVEZWx0YTtcbm91dE5vaXNlQ29vcmRpbmF0ZXMxPW5vaXNlQ29vcmRpbmF0
ZXMxO1xub3V0Tm9pc2VDb29yZGluYXRlczI9bm9pc2VDb29yZGluYXRlczI7XG4jZW5kaWZcbiNp
ZmRlZiBBTkdVTEFSU1BFRURHUkFESUVOVFNcbmZsb2F0IGFuZ3VsYXJTcGVlZD10ZXh0dXJlKGFu
Z3VsYXJTcGVlZEdyYWRpZW50U2FtcGxlcix2ZWMyKGFnZUdyYWRpZW50LDApKS5yO1xub3V0QW5n
bGU9YW5nbGUrYW5ndWxhclNwZWVkKnRpbWVEZWx0YTtcbiNlbHNlXG5vdXRBbmdsZT12ZWMyKGFu
Z2xlLngrYW5nbGUueSp0aW1lRGVsdGEsYW5nbGUueSk7XG4jZW5kaWZcbiNpZmRlZiBBTklNQVRF
U0hFRVRcbmZsb2F0IG9mZnNldEFnZT1vdXRBZ2U7XG5mbG9hdCBkaXN0PWNlbGxJbmZvcy55LWNl
bGxJbmZvcy54O1xuI2lmZGVmIEFOSU1BVEVTSEVFVFJBTkRPTVNUQVJUXG5vdXRDZWxsU3RhcnRP
ZmZzZXQ9Y2VsbFN0YXJ0T2Zmc2V0O1xub2Zmc2V0QWdlKz1jZWxsU3RhcnRPZmZzZXQ7XG4jZW5k
aWZcbmZsb2F0IHJhdGlvPWNsYW1wKG1vZChvZmZzZXRBZ2UqY2VsbEluZm9zLnosbGlmZSkvbGlm
ZSwwLiwxLjApO1xub3V0Q2VsbEluZGV4PWZsb2F0KGludChjZWxsSW5mb3MueCtyYXRpbypkaXN0
KSk7XG4jZW5kaWZcbn1cbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBo
aWRkZW4gKi8KK3ZhciBncHVVcGRhdGVQYXJ0aWNsZXNWZXJ0ZXhTaGFkZXIgPSB7IG5hbWU6IG5h
bWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMv
Z3JhaW4uZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL1NoYWRlcnMvZ3JhaW4uZnJhZ21lbnQudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZ3Jh
aW5QaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJncmFp
blBpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBncmFpblBpeGVsU2hhZGVyOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2Vm
ZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNJbmNsdWRlX2hlbHBlckZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9oZWxwZXJG
dW5jdGlvbnMgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMudHMi
KTsKKworCit2YXIgbmFtZSA9ICdncmFpblBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiI2lu
Y2x1ZGU8aGVscGVyRnVuY3Rpb25zPlxuXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxl
cjtcblxudW5pZm9ybSBmbG9hdCBpbnRlbnNpdHk7XG51bmlmb3JtIGZsb2F0IGFuaW1hdGVkU2Vl
ZDtcblxudmFyeWluZyB2ZWMyIHZVVjtcbnZvaWQgbWFpbih2b2lkKVxue1xuZ2xfRnJhZ0NvbG9y
PXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xudmVjMiBzZWVkPXZVViooYW5pbWF0ZWRT
ZWVkKTtcbmZsb2F0IGdyYWluPWRpdGhlcihzZWVkLGludGVuc2l0eSk7XG5cbmZsb2F0IGx1bT1n
ZXRMdW1pbmFuY2UoZ2xfRnJhZ0NvbG9yLnJnYik7XG5mbG9hdCBncmFpbkFtb3VudD0oY29zKC1Q
SSsobHVtKlBJKjIuKSkrMS4pLzIuO1xuZ2xfRnJhZ0NvbG9yLnJnYis9Z3JhaW4qZ3JhaW5BbW91
bnQ7XG5nbF9GcmFnQ29sb3IucmdiPW1heChnbF9GcmFnQ29sb3IucmdiLDAuMCk7XG59IjsKK19N
YXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNo
YWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZ3JhaW5QaXhl
bFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vU2hhZGVycy9oaWdobGlnaHRzLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvaGln
aGxpZ2h0cy5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGhpZ2hsaWdodHNQaXhlbFNoYWRl
ciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJoaWdobGlnaHRzUGl4ZWxT
aGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhpZ2hsaWdodHNQaXhlbFNoYWRlcjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZl
Y3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdoaWdobGlnaHRz
UGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3Jt
IHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbmNvbnN0IHZlYzMgUkdCTHVtaW5hbmNlQ29lZmZp
Y2llbnRzPXZlYzMoMC4yMTI2LDAuNzE1MiwwLjA3MjIpO1xudm9pZCBtYWluKHZvaWQpXG57XG52
ZWM0IHRleD10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWKTtcbnZlYzMgYz10ZXgucmdiO1xu
ZmxvYXQgbHVtYT1kb3QoYy5yZ2IsUkdCTHVtaW5hbmNlQ29lZmZpY2llbnRzKTtcblxuXG5nbF9G
cmFnQ29sb3I9dmVjNChwb3coYyx2ZWMzKDI1LjAtbHVtYSoxNS4wKSksdGV4LmEpO1xufSI7Citf
TWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5T
aGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGhpZ2hsaWdo
dHNQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9pbWFnZVByb2Nlc3NpbmcuZnJhZ21lbnQudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9TaGFkZXJzL2ltYWdlUHJvY2Vzc2luZy5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogaW1hZ2VQcm9jZXNzaW5nUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiaW1hZ2VQcm9jZXNzaW5nUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIGltYWdlUHJvY2Vzc2luZ1BpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlh
bHMvZWZmZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRl
X2ltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2lu
Z0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5n
RGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1
ZGVfaGVscGVyRnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hh
ZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVuY3Rpb25zLnRzIik7CisKKworCisKK3ZhciBuYW1l
ID0gJ2ltYWdlUHJvY2Vzc2luZ1BpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG52YXJ5aW5n
IHZlYzIgdlVWO1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZVNhbXBsZXI7XG4jaW5jbHVkZTxp
bWFnZVByb2Nlc3NpbmdEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPGhlbHBlckZ1bmN0aW9ucz5cbiNp
bmNsdWRlPGltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9ucz5cbnZvaWQgbWFpbih2b2lkKVxue1xudmVj
NCByZXN1bHQ9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG4jaWZkZWYgSU1BR0VQUk9D
RVNTSU5HXG4jaWZuZGVmIEZST01MSU5FQVJTUEFDRVxuXG5yZXN1bHQucmdiPXRvTGluZWFyU3Bh
Y2UocmVzdWx0LnJnYik7XG4jZW5kaWZcbnJlc3VsdD1hcHBseUltYWdlUHJvY2Vzc2luZyhyZXN1
bHQpO1xuI2Vsc2VcblxuI2lmZGVmIEZST01MSU5FQVJTUEFDRVxucmVzdWx0PWFwcGx5SW1hZ2VQ
cm9jZXNzaW5nKHJlc3VsdCk7XG4jZW5kaWZcbiNlbmRpZlxuZ2xfRnJhZ0NvbG9yPXJlc3VsdDtc
bn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZm
ZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBp
bWFnZVByb2Nlc3NpbmdQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIg
fTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9rZXJuZWxCbHVyLmZyYWdtZW50
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1NoYWRlcnMva2VybmVsQmx1ci5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGtl
cm5lbEJsdXJQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJrZXJuZWxCbHVyUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGtlcm5lbEJsdXJQ
aXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9rZXJuZWxCbHVyVmFyeWluZ0RlY2xh
cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJWYXJ5aW5nRGVjbGFyYXRpb24gKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9rZXJuZWxCbHVyVmFyeWluZ0RlY2xhcmF0aW9uLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BhY2tpbmdGdW5jdGlv
bnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vU2hhZGVyc0luY2x1ZGUvcGFja2luZ0Z1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJ
bmNsdWRlL3BhY2tpbmdGdW5jdGlvbnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
U2hhZGVyc0luY2x1ZGVfa2VybmVsQmx1ckZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJs
dXJGcmFnbWVudCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJGcmFnbWVu
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9rZXJuZWxC
bHVyRnJhZ21lbnQyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJGcmFnbWVudDIgKi8gIi4vU2hh
ZGVycy9TaGFkZXJzSW5jbHVkZS9rZXJuZWxCbHVyRnJhZ21lbnQyLnRzIik7CisKKworCisKKwor
dmFyIG5hbWUgPSAna2VybmVsQmx1clBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG51bmlm
b3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbnVuaWZvcm0gdmVjMiBkZWx0YTtcblxudmFy
eWluZyB2ZWMyIHNhbXBsZUNlbnRlcjtcbiNpZmRlZiBET0ZcbnVuaWZvcm0gc2FtcGxlcjJEIGNp
cmNsZU9mQ29uZnVzaW9uU2FtcGxlcjtcbnVuaWZvcm0gdmVjMiBjYW1lcmFNaW5NYXhaO1xuZmxv
YXQgc2FtcGxlRGlzdGFuY2UoY29uc3QgaW4gdmVjMiBvZmZzZXQpIHtcbmZsb2F0IGRlcHRoPXRl
eHR1cmUyRChjaXJjbGVPZkNvbmZ1c2lvblNhbXBsZXIsb2Zmc2V0KS5nO1xucmV0dXJuIGNhbWVy
YU1pbk1heFoueCsoY2FtZXJhTWluTWF4Wi55LWNhbWVyYU1pbk1heFoueCkqZGVwdGg7XG59XG5m
bG9hdCBzYW1wbGVDb0MoY29uc3QgaW4gdmVjMiBvZmZzZXQpIHtcbmZsb2F0IGNvYz10ZXh0dXJl
MkQoY2lyY2xlT2ZDb25mdXNpb25TYW1wbGVyLG9mZnNldCkucjtcbnJldHVybiBjb2M7XG59XG4j
ZW5kaWZcbiNpbmNsdWRlPGtlcm5lbEJsdXJWYXJ5aW5nRGVjbGFyYXRpb24+WzAuLnZhcnlpbmdD
b3VudF1cbiNpZmRlZiBQQUNLRURGTE9BVFxuI2luY2x1ZGU8cGFja2luZ0Z1bmN0aW9ucz5cbiNl
bmRpZlxudm9pZCBtYWluKHZvaWQpXG57XG5mbG9hdCBjb21wdXRlZFdlaWdodD0wLjA7XG4jaWZk
ZWYgUEFDS0VERkxPQVRcbmZsb2F0IGJsZW5kPTAuO1xuI2Vsc2VcbnZlYzQgYmxlbmQ9dmVjNCgw
Lik7XG4jZW5kaWZcbiNpZmRlZiBET0ZcbmZsb2F0IHN1bU9mV2VpZ2h0cz1DRU5URVJfV0VJR0hU
O1xuZmxvYXQgZmFjdG9yPTAuMDtcblxuI2lmZGVmIFBBQ0tFREZMT0FUXG5ibGVuZCs9dW5wYWNr
KHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcixzYW1wbGVDZW50ZXIpKSpDRU5URVJfV0VJR0hUO1xu
I2Vsc2VcbmJsZW5kKz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsc2FtcGxlQ2VudGVyKSpDRU5U
RVJfV0VJR0hUO1xuI2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlPGtlcm5lbEJsdXJGcmFnbWVudD5b
MC4udmFyeWluZ0NvdW50XVxuI2luY2x1ZGU8a2VybmVsQmx1ckZyYWdtZW50Mj5bMC4uZGVwQ291
bnRdXG4jaWZkZWYgUEFDS0VERkxPQVRcbmdsX0ZyYWdDb2xvcj1wYWNrKGJsZW5kKTtcbiNlbHNl
XG5nbF9GcmFnQ29sb3I9YmxlbmQ7XG4jZW5kaWZcbiNpZmRlZiBET0ZcbmdsX0ZyYWdDb2xvci89
c3VtT2ZXZWlnaHRzO1xuI2VuZGlmXG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsK
Ky8qKiBAaGlkZGVuICovCit2YXIga2VybmVsQmx1clBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1l
LCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2tl
cm5lbEJsdXIudmVydGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL2tlcm5lbEJsdXIudmVydGV4LnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IGtlcm5lbEJsdXJWZXJ0ZXhTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAia2VybmVsQmx1clZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
a2VybmVsQmx1clZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9rZXJuZWxCbHVy
VmFyeWluZ0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJWYXJ5aW5nRGVjbGFy
YXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9rZXJuZWxCbHVyVmFyeWluZ0RlY2xh
cmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2tl
cm5lbEJsdXJWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUva2VybmVsQmx1clZlcnRleCAqLyAiLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJWZXJ0ZXgudHMiKTsKKworCisKK3ZhciBuYW1l
ID0gJ2tlcm5lbEJsdXJWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbmF0dHJpYnV0ZSB2
ZWMyIHBvc2l0aW9uO1xuXG51bmlmb3JtIHZlYzIgZGVsdGE7XG5cbnZhcnlpbmcgdmVjMiBzYW1w
bGVDZW50ZXI7XG4jaW5jbHVkZTxrZXJuZWxCbHVyVmFyeWluZ0RlY2xhcmF0aW9uPlswLi52YXJ5
aW5nQ291bnRdXG5jb25zdCB2ZWMyIG1hZGQ9dmVjMigwLjUsMC41KTtcbnZvaWQgbWFpbih2b2lk
KSB7XG5zYW1wbGVDZW50ZXI9KHBvc2l0aW9uKm1hZGQrbWFkZCk7XG4jaW5jbHVkZTxrZXJuZWxC
bHVyVmVydGV4PlswLi52YXJ5aW5nQ291bnRdXG5nbF9Qb3NpdGlvbj12ZWM0KHBvc2l0aW9uLDAu
MCwxLjApO1xufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAq
LwordmFyIGtlcm5lbEJsdXJWZXJ0ZXhTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hh
ZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvbGF5ZXIuZnJhZ21lbnQu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L1NoYWRlcnMvbGF5ZXIuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogbGF5ZXJQaXhlbFNoYWRlciAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJsYXllclBpeGVsU2hhZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBsYXllclBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRl
cmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2xheWVyUGl4ZWxTaGFkZXInOwordmFy
IHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJl
U2FtcGxlcjtcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKHZvaWQpIHtcbnZlYzQg
YmFzZUNvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xuI2lmZGVmIEFMUEhBVEVT
VFxuaWYgKGJhc2VDb2xvci5hPDAuNClcbmRpc2NhcmQ7XG4jZW5kaWZcbmdsX0ZyYWdDb2xvcj1i
YXNlQ29sb3IqY29sb3I7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBA
aGlkZGVuICovCit2YXIgbGF5ZXJQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBz
aGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9sYXllci52ZXJ0ZXgu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9T
aGFkZXJzL2xheWVyLnZlcnRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogbGF5ZXJWZXJ0ZXhTaGFkZXIgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibGF5ZXJWZXJ0ZXhTaGFkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIGxheWVyVmVydGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlh
bHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2xheWVyVmVydGV4U2hhZGVyJzsKK3ZhciBz
aGFkZXIgPSAiXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcblxudW5pZm9ybSB2ZWMyIHNjYWxl
O1xudW5pZm9ybSB2ZWMyIG9mZnNldDtcbnVuaWZvcm0gbWF0NCB0ZXh0dXJlTWF0cml4O1xuXG52
YXJ5aW5nIHZlYzIgdlVWO1xuY29uc3QgdmVjMiBtYWRkPXZlYzIoMC41LDAuNSk7XG52b2lkIG1h
aW4odm9pZCkge1xudmVjMiBzaGlmdGVkUG9zaXRpb249cG9zaXRpb24qc2NhbGUrb2Zmc2V0O1xu
dlVWPXZlYzIodGV4dHVyZU1hdHJpeCp2ZWM0KHNoaWZ0ZWRQb3NpdGlvbiptYWRkK21hZGQsMS4w
LDAuMCkpO1xuZ2xfUG9zaXRpb249dmVjNChzaGlmdGVkUG9zaXRpb24sMC4wLDEuMCk7XG59IjsK
K19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJd
LlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgbGF5ZXJW
ZXJ0ZXhTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL1NoYWRlcnMvbGVuc0ZsYXJlLmZyYWdtZW50LnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9s
ZW5zRmxhcmUuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGxlbnNGbGFyZVBpeGVsU2hhZGVy
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImxlbnNGbGFyZVBpeGVsU2hh
ZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBsZW5zRmxhcmVQaXhlbFNoYWRlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdsZW5zRmxhcmVQaXhl
bFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxudmFyeWluZyB2ZWMyIHZVVjtcbnVuaWZvcm0gc2Ft
cGxlcjJEIHRleHR1cmVTYW1wbGVyO1xuXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4o
dm9pZCkge1xudmVjNCBiYXNlQ29sb3I9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG5n
bF9GcmFnQ29sb3I9YmFzZUNvbG9yKmNvbG9yO1xufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBz
aGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGxlbnNGbGFyZVBpeGVsU2hhZGVyID0geyBuYW1l
OiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFk
ZXJzL2xlbnNGbGFyZS52ZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9sZW5zRmxhcmUudmVydGV4LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogbGVuc0ZsYXJlVmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgImxlbnNGbGFyZVZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
bGVuc0ZsYXJlVmVydGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRz
Iik7CisKK3ZhciBuYW1lID0gJ2xlbnNGbGFyZVZlcnRleFNoYWRlcic7Cit2YXIgc2hhZGVyID0g
IlxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCB2aWV3cG9ydE1hdHJp
eDtcblxudmFyeWluZyB2ZWMyIHZVVjtcbmNvbnN0IHZlYzIgbWFkZD12ZWMyKDAuNSwwLjUpO1xu
dm9pZCBtYWluKHZvaWQpIHtcbnZVVj1wb3NpdGlvbiptYWRkK21hZGQ7XG5nbF9Qb3NpdGlvbj12
aWV3cG9ydE1hdHJpeCp2ZWM0KHBvc2l0aW9uLDAuMCwxLjApO1xufSI7CitfTWF0ZXJpYWxzX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVb
bmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGxlbnNGbGFyZVZlcnRleFNoYWRl
ciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vU2hhZGVycy9sZW5zSGlnaGxpZ2h0cy5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9s
ZW5zSGlnaGxpZ2h0cy5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBsZW5zSGlnaGxp
Z2h0c1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImxl
bnNIaWdobGlnaHRzUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGxlbnNIaWdobGln
aHRzUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
ZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwor
dmFyIG5hbWUgPSAnbGVuc0hpZ2hsaWdodHNQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxu
dW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZVNhbXBsZXI7XG5cbnVuaWZvcm0gZmxvYXQgZ2Fpbjtc
bnVuaWZvcm0gZmxvYXQgdGhyZXNob2xkO1xudW5pZm9ybSBmbG9hdCBzY3JlZW5fd2lkdGg7XG51
bmlmb3JtIGZsb2F0IHNjcmVlbl9oZWlnaHQ7XG5cbnZhcnlpbmcgdmVjMiB2VVY7XG5cbnZlYzQg
aGlnaGxpZ2h0Q29sb3IodmVjNCBjb2xvcikge1xudmVjNCBoaWdobGlnaHQ9Y29sb3I7XG5mbG9h
dCBsdW1pbmFuY2U9ZG90KGhpZ2hsaWdodC5yZ2IsdmVjMygwLjIxMjUsMC43MTU0LDAuMDcyMSkp
O1xuZmxvYXQgbHVtX3RocmVzaG9sZDtcbmlmICh0aHJlc2hvbGQ+MS4wKSB7IGx1bV90aHJlc2hv
bGQ9MC45NCswLjAxKnRocmVzaG9sZDsgfVxuZWxzZSB7IGx1bV90aHJlc2hvbGQ9MC41KzAuNDQq
dGhyZXNob2xkOyB9XG5sdW1pbmFuY2U9Y2xhbXAoKGx1bWluYW5jZS1sdW1fdGhyZXNob2xkKSoo
MS4wLygxLjAtbHVtX3RocmVzaG9sZCkpLDAuMCwxLjApO1xuaGlnaGxpZ2h0Kj1sdW1pbmFuY2Uq
Z2FpbjtcbmhpZ2hsaWdodC5hPTEuMDtcbnJldHVybiBoaWdobGlnaHQ7XG59XG52b2lkIG1haW4o
dm9pZClcbntcbnZlYzQgb3JpZ2luYWw9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG5c
bmlmIChnYWluID09IC0xLjApIHtcbmdsX0ZyYWdDb2xvcj12ZWM0KDAuMCwwLjAsMC4wLDEuMCk7
XG5yZXR1cm47XG59XG5mbG9hdCB3PTIuMC9zY3JlZW5fd2lkdGg7XG5mbG9hdCBoPTIuMC9zY3Jl
ZW5faGVpZ2h0O1xuZmxvYXQgd2VpZ2h0PTEuMDtcblxudmVjNCBibHVycmVkPXZlYzQoMC4wLDAu
MCwwLjAsMC4wKTtcbiNpZmRlZiBQRU5UQUdPTlxuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4
dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0wLjg0KncsMC40MypoKSkpO1xuYmx1cnJl
ZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDAuNDgq
dywtMS4yOSpoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVT
YW1wbGVyLHZVVit2ZWMyKDAuNjEqdywxLjUxKmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xv
cih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTEuNTUqdywtMC43NCpoKSkpO1xu
Ymx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMy
KDEuNzEqdywtMC41MipoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRl
eHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0wLjk0KncsMS41OSpoKSkpO1xuYmx1cnJlZCs9aGlnaGxp
Z2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0wLjQwKncsLTEuODcq
aCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2
VVYrdmVjMigxLjYyKncsMS4xNipoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVy
ZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0yLjA5KncsMC4yNSpoKSkpO1xuYmx1cnJlZCs9
aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDEuNDYqdywt
MS43MSpoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1w
bGVyLHZVVit2ZWMyKDAuMDgqdywyLjQyKmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0
ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTEuODUqdywtMS44OSpoKSkpO1xuYmx1
cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDIu
ODkqdywwLjE2KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVy
ZVNhbXBsZXIsdlVWK3ZlYzIoLTIuMjkqdywxLjg4KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRD
b2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMC40MCp3LC0yLjgxKmgpKSk7
XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3Zl
YzIoMS41NCp3LDIuMjYqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0
ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMi42MCp3LC0wLjYxKmgpKSk7XG5ibHVycmVkKz1oaWdo
bGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMi4zMSp3LC0xLjMw
KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIs
dlVWK3ZlYzIoLTAuODMqdywyLjUzKmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0
dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTEuMTIqdywtMi40OCpoKSkpO1xuYmx1cnJl
ZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDIuNjAq
dywxLjExKmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNh
bXBsZXIsdlVWK3ZlYzIoLTIuODIqdywwLjk5KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xv
cih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMS41MCp3LC0yLjgxKmgpKSk7XG5i
bHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIo
MC44NSp3LDMuMzMqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0
dXJlU2FtcGxlcix2VVYrdmVjMigtMi45NCp3LC0xLjkyKmgpKSk7XG5ibHVycmVkKz1oaWdobGln
aHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMy4yNyp3LC0wLjUzKmgp
KSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVW
K3ZlYzIoLTEuOTUqdywyLjQ4KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJl
MkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTAuMjMqdywtMy4wNCpoKSkpO1xuYmx1cnJlZCs9
aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDIuMTcqdywy
LjA1KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBs
ZXIsdlVWK3ZlYzIoLTIuOTcqdywtMC4wNCpoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3Io
dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDIuMjUqdywtMi4wMCpoKSkpO1xuYmx1
cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0w
LjMxKncsMy4wOCpoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1
cmVTYW1wbGVyLHZVVit2ZWMyKC0xLjk0KncsLTIuNTkqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdo
dENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigzLjM3KncsMC42NCpoKSkp
O1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2
ZWMyKC0zLjEzKncsMS45MypoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJE
KHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDEuMDMqdywtMy42NSpoKSkpO1xuYmx1cnJlZCs9aGln
aGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDEuNjAqdywzLjE3
KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIs
dlVWK3ZlYzIoLTMuMTQqdywtMS4xOSpoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4
dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDMuMDAqdywtMS4xOSpoKSkpO1xuI2Vsc2Vc
bmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVj
MigtMC44NSp3LDAuMzYqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0
ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigwLjUyKncsLTEuMTQqaCkpKTtcbmJsdXJyZWQrPWhpZ2hs
aWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigwLjQ2KncsMS40Mipo
KSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZV
Vit2ZWMyKC0xLjQ2KncsLTAuODMqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1
cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigxLjc5KncsLTAuNDIqaCkpKTtcbmJsdXJyZWQr
PWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMS4xMSp3
LDEuNjIqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2Ft
cGxlcix2VVYrdmVjMigtMC4yOSp3LC0yLjA3KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xv
cih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMS42OSp3LDEuMzkqaCkpKTtcbmJs
dXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigt
Mi4yOCp3LDAuMTIqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0
dXJlU2FtcGxlcix2VVYrdmVjMigxLjY1KncsLTEuNjkqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdo
dENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMC4wOCp3LDIuNDQqaCkp
KTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYr
dmVjMigtMS42Myp3LC0xLjkwKmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJl
MkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMi41NSp3LDAuMzEqaCkpKTtcbmJsdXJyZWQrPWhp
Z2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMi4xMyp3LDEu
NTIqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxl
cix2VVYrdmVjMigwLjU2KncsLTIuNjEqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRl
eHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigxLjM4KncsMi4zNCpoKSkpO1xuYmx1cnJl
ZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0yLjY0
KncsLTAuODEqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJl
U2FtcGxlcix2VVYrdmVjMigyLjUzKncsLTEuMjEqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENv
bG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMS4wNip3LDIuNjMqaCkpKTtc
bmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVj
MigtMS4wMCp3LC0yLjY5KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQo
dGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMi41OSp3LDEuMzIqaCkpKTtcbmJsdXJyZWQrPWhpZ2hs
aWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMi44Mip3LDAuNzgq
aCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2
VVYrdmVjMigxLjU3KncsLTIuNTAqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1
cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigwLjU0KncsMi45MypoKSkpO1xuYmx1cnJlZCs9
aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0yLjM5Kncs
LTEuODEqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2Ft
cGxlcix2VVYrdmVjMigzLjAxKncsLTAuMjgqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9y
KHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMi4wNCp3LDIuMjUqaCkpKTtcbmJs
dXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigt
MC4wMip3LC0zLjA1KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4
dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMi4wOSp3LDIuMjUqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdo
dENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMy4wNyp3LC0wLjI1Kmgp
KSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVW
K3ZlYzIoMi40NCp3LC0xLjkwKmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJl
MkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTAuNTIqdywzLjA1KmgpKSk7XG5ibHVycmVkKz1o
aWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTEuNjgqdywt
Mi42MSpoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1w
bGVyLHZVVit2ZWMyKDMuMDEqdywwLjc5KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0
ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTIuNzYqdywxLjQ2KmgpKSk7XG5ibHVy
cmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMS4w
NSp3LC0yLjk0KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVy
ZVNhbXBsZXIsdlVWK3ZlYzIoMS4yMSp3LDIuODgqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENv
bG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMi44NCp3LC0xLjMwKmgpKSk7
XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3Zl
YzIoMi45OCp3LC0wLjk2KmgpKSk7XG4jZW5kaWZcbmJsdXJyZWQvPTM5LjA7XG5nbF9GcmFnQ29s
b3I9Ymx1cnJlZDtcblxufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhp
ZGRlbiAqLwordmFyIGxlbnNIaWdobGlnaHRzUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNo
YWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvbGluZS5m
cmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9TaGFkZXJzL2xpbmUuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBsaW5lUGl4ZWxTaGFk
ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibGluZVBpeGVsU2hhZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBsaW5lUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01h
dGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnbGluZVBpeGVsU2hhZGVyJzsKK3Zh
ciBzaGFkZXIgPSAidW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKHZvaWQpIHtcbmdsX0Zy
YWdDb2xvcj1jb2xvcjtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBo
aWRkZW4gKi8KK3ZhciBsaW5lUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hh
ZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvbGluZS52ZXJ0ZXgudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRl
cnMvbGluZS52ZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogbGluZVZlcnRleFNoYWRlciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJsaW5lVmVydGV4U2hhZGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBsaW5lVmVydGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0
LnRzIik7CisKK3ZhciBuYW1lID0gJ2xpbmVWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJc
bmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgbm9ybWFsO1xuXG51bmlm
b3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgd2lkdGg7XG51bmlm
b3JtIGZsb2F0IGFzcGVjdFJhdGlvO1xudm9pZCBtYWluKHZvaWQpIHtcbnZlYzQgdmlld1Bvc2l0
aW9uPXdvcmxkVmlld1Byb2plY3Rpb24qdmVjNChwb3NpdGlvbiwxLjApO1xudmVjNCB2aWV3UG9z
aXRpb25OZXh0PXdvcmxkVmlld1Byb2plY3Rpb24qdmVjNChub3JtYWwueHl6LDEuMCk7XG52ZWMy
IGN1cnJlbnRTY3JlZW49dmlld1Bvc2l0aW9uLnh5L3ZpZXdQb3NpdGlvbi53O1xudmVjMiBuZXh0
U2NyZWVuPXZpZXdQb3NpdGlvbk5leHQueHkvdmlld1Bvc2l0aW9uTmV4dC53O1xuY3VycmVudFNj
cmVlbi54Kj1hc3BlY3RSYXRpbztcbm5leHRTY3JlZW4ueCo9YXNwZWN0UmF0aW87XG52ZWMyIGRp
cj1ub3JtYWxpemUobmV4dFNjcmVlbi1jdXJyZW50U2NyZWVuKTtcbnZlYzIgbm9ybWFsRGlyPXZl
YzIoLWRpci55LGRpci54KTtcbm5vcm1hbERpcio9d2lkdGgvMi4wO1xubm9ybWFsRGlyLngvPWFz
cGVjdFJhdGlvO1xudmVjNCBvZmZzZXQ9dmVjNChub3JtYWxEaXIqbm9ybWFsLncsMC4wLDAuMCk7
XG5nbF9Qb3NpdGlvbj12aWV3UG9zaXRpb24rb2Zmc2V0O1xufSI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGxpbmVWZXJ0ZXhTaGFkZXIgPSB7IG5h
bWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1No
YWRlcnMvbW90aW9uQmx1ci5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL21vdGlvbkJsdXIuZnJhZ21l
bnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBtb3Rpb25CbHVyUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibW90aW9uQmx1clBpeGVsU2hhZGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBtb3Rpb25CbHVyUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVy
aWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnbW90aW9uQmx1clBpeGVsU2hhZGVyJzsK
K3ZhciBzaGFkZXIgPSAiXG52YXJ5aW5nIHZlYzIgdlVWO1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4
dHVyZVNhbXBsZXI7XG51bmlmb3JtIHNhbXBsZXIyRCB2ZWxvY2l0eVNhbXBsZXI7XG51bmlmb3Jt
IGZsb2F0IG1vdGlvblN0cmVuZ3RoO1xudW5pZm9ybSBmbG9hdCBtb3Rpb25TY2FsZTtcbnVuaWZv
cm0gdmVjMiBzY3JlZW5TaXplO1xudm9pZCBtYWluKHZvaWQpXG57XG4jaWZkZWYgR0VPTUVUUllf
U1VQUE9SVEVEXG52ZWMyIHRleGVsU2l6ZT0xLjAvc2NyZWVuU2l6ZTtcbnZlYzIgdmVsb2NpdHlD
b2xvcj10ZXh0dXJlMkQodmVsb2NpdHlTYW1wbGVyLHZVVikucmcqMi4wLTEuMDtcbnZlYzIgdmVs
b2NpdHk9dmVjMihwb3codmVsb2NpdHlDb2xvci5yLDMuMCkscG93KHZlbG9jaXR5Q29sb3IuZywz
LjApKTtcbnZlbG9jaXR5Kj1tb3Rpb25TY2FsZSptb3Rpb25TdHJlbmd0aDtcbmZsb2F0IHNwZWVk
PWxlbmd0aCh2ZWxvY2l0eS90ZXhlbFNpemUpO1xuaW50IHNhbXBsZXNDb3VudD1pbnQoY2xhbXAo
c3BlZWQsMS4wLFNBTVBMRVMpKTtcbnZlbG9jaXR5PW5vcm1hbGl6ZSh2ZWxvY2l0eSkqdGV4ZWxT
aXplO1xuZmxvYXQgaGxpbT1mbG9hdCgtc2FtcGxlc0NvdW50KSowLjUrMC41O1xudmVjNCByZXN1
bHQ9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG5mb3IgKGludCBpPTE7IGk8aW50KFNB
TVBMRVMpOyArK2kpXG57XG5pZiAoaT49c2FtcGxlc0NvdW50KVxuYnJlYWs7XG52ZWMyIG9mZnNl
dD12VVYrdmVsb2NpdHkqKGhsaW0rZmxvYXQoaSkpO1xucmVzdWx0Kz10ZXh0dXJlMkQodGV4dHVy
ZVNhbXBsZXIsb2Zmc2V0KTtcbn1cbmdsX0ZyYWdDb2xvcj1yZXN1bHQvZmxvYXQoc2FtcGxlc0Nv
dW50KTtcbmdsX0ZyYWdDb2xvci5hPTEuMDtcbiNlbHNlXG5nbF9GcmFnQ29sb3I9dGV4dHVyZTJE
KHRleHR1cmVTYW1wbGVyLHZVVik7XG4jZW5kaWZcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0g
PSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIG1vdGlvbkJsdXJQaXhlbFNoYWRlciA9IHsg
bmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
U2hhZGVycy9ub2lzZS5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9ub2lzZS5mcmFnbWVudC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBub2lzZVBpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIm5vaXNlUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vaXNlUGl4ZWxTaGFk
ZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRl
cmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAn
bm9pc2VQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxuXG51bmlmb3JtIGZsb2F0IGJyaWdo
dG5lc3M7XG51bmlmb3JtIGZsb2F0IHBlcnNpc3RlbmNlO1xudW5pZm9ybSBmbG9hdCB0aW1lU2Nh
bGU7XG5cbnZhcnlpbmcgdmVjMiB2VVY7XG5cbnZlYzIgaGFzaDIyKHZlYzIgcClcbntcbnA9cCpt
YXQyKDEyNy4xLDMxMS43LDI2OS41LDE4My4zKTtcbnA9LTEuMCsyLjAqZnJhY3Qoc2luKHApKjQz
NzU4LjU0NTMxMjMpO1xucmV0dXJuIHNpbihwKjYuMjgzK3RpbWVTY2FsZSk7XG59XG5mbG9hdCBp
bnRlcnBvbGF0aW9uTm9pc2UodmVjMiBwKVxue1xudmVjMiBwaT1mbG9vcihwKTtcbnZlYzIgcGY9
cC1waTtcbnZlYzIgdz1wZipwZiooMy4tMi4qcGYpO1xuZmxvYXQgZjAwPWRvdChoYXNoMjIocGkr
dmVjMiguMCwuMCkpLHBmLXZlYzIoLjAsLjApKTtcbmZsb2F0IGYwMT1kb3QoaGFzaDIyKHBpK3Zl
YzIoLjAsMS4pKSxwZi12ZWMyKC4wLDEuKSk7XG5mbG9hdCBmMTA9ZG90KGhhc2gyMihwaSt2ZWMy
KDEuMCwwLikpLHBmLXZlYzIoMS4wLDAuKSk7XG5mbG9hdCBmMTE9ZG90KGhhc2gyMihwaSt2ZWMy
KDEuMCwxLikpLHBmLXZlYzIoMS4wLDEuKSk7XG5mbG9hdCB4bTE9bWl4KGYwMCxmMTAsdy54KTtc
bmZsb2F0IHhtMj1taXgoZjAxLGYxMSx3LngpO1xuZmxvYXQgeW09bWl4KHhtMSx4bTIsdy55KTtc
bnJldHVybiB5bTtcbn1cbmZsb2F0IHBlcmxpbk5vaXNlMkQoZmxvYXQgeCxmbG9hdCB5KVxue1xu
ZmxvYXQgc3VtPTAuMDtcbmZsb2F0IGZyZXF1ZW5jeT0wLjA7XG5mbG9hdCBhbXBsaXR1ZGU9MC4w
O1xuZm9yKGludCBpPTA7IGk8T0NUQVZFUzsgaSsrKVxue1xuZnJlcXVlbmN5PXBvdygyLjAsZmxv
YXQoaSkpO1xuYW1wbGl0dWRlPXBvdyhwZXJzaXN0ZW5jZSxmbG9hdChpKSk7XG5zdW09c3VtK2lu
dGVycG9sYXRpb25Ob2lzZSh2ZWMyKHgqZnJlcXVlbmN5LHkqZnJlcXVlbmN5KSkqYW1wbGl0dWRl
O1xufVxucmV0dXJuIHN1bTtcbn1cblxudm9pZCBtYWluKHZvaWQpXG57XG5mbG9hdCB4PWFicyh2
VVYueCk7XG5mbG9hdCB5PWFicyh2VVYueSk7XG5mbG9hdCBub2lzZT1icmlnaHRuZXNzKygxLjAt
YnJpZ2h0bmVzcykqcGVybGluTm9pc2UyRCh4LHkpO1xuZ2xfRnJhZ0NvbG9yPXZlYzQobm9pc2Us
bm9pc2Usbm9pc2UsMS4wKTtcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7Cisv
KiogQGhpZGRlbiAqLwordmFyIG5vaXNlUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRl
cjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvb3V0bGluZS5m
cmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9TaGFkZXJzL291dGxpbmUuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBvdXRs
aW5lUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAib3V0
bGluZVBpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBvdXRsaW5lUGl4ZWxTaGFkZXI7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlh
bHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbG9nRGVwdGhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9sb2dEZXB0aERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbG9nRGVw
dGhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5j
bHVkZV9sb2dEZXB0aEZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2xvZ0RlcHRoRnJhZ21lbnQgKi8g
Ii4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aEZyYWdtZW50LnRzIik7CisKKworCit2
YXIgbmFtZSA9ICdvdXRsaW5lUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICIjaWZkZWYgTE9H
QVJJVEhNSUNERVBUSFxuI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZVxuI2Vu
ZGlmXG51bmlmb3JtIHZlYzQgY29sb3I7XG4jaWZkZWYgQUxQSEFURVNUXG52YXJ5aW5nIHZlYzIg
dlVWO1xudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZVNhbXBsZXI7XG4jZW5kaWZcbiNpbmNsdWRl
PGxvZ0RlcHRoRGVjbGFyYXRpb24+XG52b2lkIG1haW4odm9pZCkge1xuI2lmZGVmIEFMUEhBVEVT
VFxuaWYgKHRleHR1cmUyRChkaWZmdXNlU2FtcGxlcix2VVYpLmE8MC40KVxuZGlzY2FyZDtcbiNl
bmRpZlxuI2luY2x1ZGU8bG9nRGVwdGhGcmFnbWVudD5cbmdsX0ZyYWdDb2xvcj1jb2xvcjtcbn0i
OworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0
Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBvdXRs
aW5lUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvb3V0bGluZS52ZXJ0ZXgudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvb3V0bGlu
ZS52ZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogb3V0bGluZVZlcnRleFNoYWRlciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJvdXRsaW5lVmVydGV4U2hhZGVyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBvdXRsaW5lVmVydGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMv
ZWZmZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2Jv
bmVzRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYm9uZXNEZWNsYXJhdGlvbiAqLyAiLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFy
YXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFyYXRpb24g
Ki8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNs
YXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9t
b3JwaFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNW
ZXJ0ZXhEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0
c1ZlcnRleERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRl
cnNJbmNsdWRlX2luc3RhbmNlc0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc0Rl
Y2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzRGVjbGFyYXRp
b24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbG9nRGVw
dGhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aERlY2xhcmF0aW9uICovICIuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvbG9nRGVwdGhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVy
c0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
bW9ycGhUYXJnZXRzVmVydGV4LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRl
cnNJbmNsdWRlX2luc3RhbmNlc1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgg
Ki8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNWZXJ0ZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0lu
Y2x1ZGUvYm9uZXNWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc1ZlcnRl
eC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0
aFZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aFZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRl
cnNJbmNsdWRlL2xvZ0RlcHRoVmVydGV4LnRzIik7CisKKworCisKKworCisKKworCisKK3ZhciBu
YW1lID0gJ291dGxpbmVWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbmF0dHJpYnV0ZSB2
ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xuI2luY2x1ZGU8Ym9uZXNEZWNs
YXJhdGlvbj5cbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9uPlxu
I2luY2x1ZGU8bW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24+WzAuLm1heFNpbXVsdGFuZW91
c01vcnBoVGFyZ2V0c11cblxudW5pZm9ybSBmbG9hdCBvZmZzZXQ7XG4jaW5jbHVkZTxpbnN0YW5j
ZXNEZWNsYXJhdGlvbj5cbnVuaWZvcm0gbWF0NCB2aWV3UHJvamVjdGlvbjtcbiNpZmRlZiBBTFBI
QVRFU1RcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIG1hdDQgZGlmZnVzZU1hdHJpeDtcbiNp
ZmRlZiBVVjFcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuI2VuZGlmXG4jaWZkZWYgVVYyXG5hdHRyaWJ1
dGUgdmVjMiB1djI7XG4jZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGU8bG9nRGVwdGhEZWNsYXJhdGlv
bj5cbnZvaWQgbWFpbih2b2lkKVxue1xudmVjMyBwb3NpdGlvblVwZGF0ZWQ9cG9zaXRpb247XG52
ZWMzIG5vcm1hbFVwZGF0ZWQ9bm9ybWFsO1xuI2lmZGVmIFVWMVxudmVjMiB1dlVwZGF0ZWQ9dXY7
XG4jZW5kaWZcbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleD5bMC4ubWF4U2ltdWx0YW5lb3Vz
TW9ycGhUYXJnZXRzXVxudmVjMyBvZmZzZXRQb3NpdGlvbj1wb3NpdGlvblVwZGF0ZWQrKG5vcm1h
bFVwZGF0ZWQqb2Zmc2V0KTtcbiNpbmNsdWRlPGluc3RhbmNlc1ZlcnRleD5cbiNpbmNsdWRlPGJv
bmVzVmVydGV4PlxuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb24qZmluYWxXb3JsZCp2ZWM0KG9m
ZnNldFBvc2l0aW9uLDEuMCk7XG4jaWZkZWYgQUxQSEFURVNUXG4jaWZkZWYgVVYxXG52VVY9dmVj
MihkaWZmdXNlTWF0cml4KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbiNlbmRpZlxuI2lmZGVm
IFVWMlxudlVWPXZlYzIoZGlmZnVzZU1hdHJpeCp2ZWM0KHV2MiwxLjAsMC4wKSk7XG4jZW5kaWZc
biNlbmRpZlxuI2luY2x1ZGU8bG9nRGVwdGhWZXJ0ZXg+XG59XG4iOworX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25h
bWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBvdXRsaW5lVmVydGV4U2hhZGVyID0g
eyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9TaGFkZXJzL3BhcnRpY2xlcy5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvcGFydGljbGVzLmZyYWdt
ZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBwYXJ0aWNsZXNQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJwYXJ0aWNsZXNQaXhlbFNoYWRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gcGFydGljbGVzUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFs
cy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVf
Y2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFn
bWVudERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lRnJh
Z21lbnREZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJz
SW5jbHVkZV9pbWFnZVByb2Nlc3NpbmdEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbWFnZVBy
b2Nlc3NpbmdEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJv
Y2Vzc2luZ0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRl
cnNJbmNsdWRlX2hlbHBlckZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMg
Ki8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW1hZ2VQcm9jZXNzaW5nRnVuY3Rp
b25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9ucyAqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9ucy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVGcmFnbWVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJz
SW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVudCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2Ns
aXBQbGFuZUZyYWdtZW50LnRzIik7CisKKworCisKKworCit2YXIgbmFtZSA9ICdwYXJ0aWNsZXNQ
aXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxudmFyeWluZyB2ZWMyIHZVVjtcbnZhcnlpbmcg
dmVjNCB2Q29sb3I7XG51bmlmb3JtIHZlYzQgdGV4dHVyZU1hc2s7XG51bmlmb3JtIHNhbXBsZXIy
RCBkaWZmdXNlU2FtcGxlcjtcbiNpbmNsdWRlPGNsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRpb24+
XG4jaW5jbHVkZTxpbWFnZVByb2Nlc3NpbmdEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPGhlbHBlckZ1
bmN0aW9ucz5cbiNpbmNsdWRlPGltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9ucz5cbiNpZmRlZiBSQU1Q
R1JBRElFTlRcbnZhcnlpbmcgdmVjNCByZW1hcFJhbmdlcztcbnVuaWZvcm0gc2FtcGxlcjJEIHJh
bXBTYW1wbGVyO1xuI2VuZGlmXG52b2lkIG1haW4odm9pZCkge1xuI2luY2x1ZGU8Y2xpcFBsYW5l
RnJhZ21lbnQ+XG52ZWM0IHRleHR1cmVDb2xvcj10ZXh0dXJlMkQoZGlmZnVzZVNhbXBsZXIsdlVW
KTtcbnZlYzQgYmFzZUNvbG9yPSh0ZXh0dXJlQ29sb3IqdGV4dHVyZU1hc2srKHZlYzQoMS4sMS4s
MS4sMS4pLXRleHR1cmVNYXNrKSkqdkNvbG9yO1xuI2lmZGVmIFJBTVBHUkFESUVOVFxuZmxvYXQg
YWxwaGE9YmFzZUNvbG9yLmE7XG5mbG9hdCByZW1hcHBlZENvbG9ySW5kZXg9Y2xhbXAoKGFscGhh
LXJlbWFwUmFuZ2VzLngpL3JlbWFwUmFuZ2VzLnksMC4wLDEuMCk7XG52ZWM0IHJhbXBDb2xvcj10
ZXh0dXJlMkQocmFtcFNhbXBsZXIsdmVjMigxLjAtcmVtYXBwZWRDb2xvckluZGV4LDAuKSk7XG5i
YXNlQ29sb3IucmdiKj1yYW1wQ29sb3IucmdiO1xuXG5mbG9hdCBmaW5hbEFscGhhPWJhc2VDb2xv
ci5hO1xuYmFzZUNvbG9yLmE9Y2xhbXAoKGFscGhhKnJhbXBDb2xvci5hLXJlbWFwUmFuZ2VzLnop
L3JlbWFwUmFuZ2VzLncsMC4wLDEuMCk7XG4jZW5kaWZcbiNpZmRlZiBCTEVORE1VTFRJUExZTU9E
RVxuZmxvYXQgc291cmNlQWxwaGE9dkNvbG9yLmEqdGV4dHVyZUNvbG9yLmE7XG5iYXNlQ29sb3Iu
cmdiPWJhc2VDb2xvci5yZ2Iqc291cmNlQWxwaGErdmVjMygxLjApKigxLjAtc291cmNlQWxwaGEp
O1xuI2VuZGlmXG5cblxuI2lmZGVmIElNQUdFUFJPQ0VTU0lOR1BPU1RQUk9DRVNTXG5iYXNlQ29s
b3IucmdiPXRvTGluZWFyU3BhY2UoYmFzZUNvbG9yLnJnYik7XG4jZWxzZVxuI2lmZGVmIElNQUdF
UFJPQ0VTU0lOR1xuYmFzZUNvbG9yLnJnYj10b0xpbmVhclNwYWNlKGJhc2VDb2xvci5yZ2IpO1xu
YmFzZUNvbG9yPWFwcGx5SW1hZ2VQcm9jZXNzaW5nKGJhc2VDb2xvcik7XG4jZW5kaWZcbiNlbmRp
ZlxuZ2xfRnJhZ0NvbG9yPWJhc2VDb2xvcjtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hh
ZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBwYXJ0aWNsZXNQaXhlbFNoYWRlciA9IHsgbmFtZTog
bmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVy
cy9wYXJ0aWNsZXMudmVydGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvcGFydGljbGVzLnZlcnRleC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IHBhcnRpY2xlc1ZlcnRleFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJwYXJ0aWNsZXNWZXJ0ZXhTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHBh
cnRpY2xlc1ZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVy
aWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVWZXJ0
ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbiAq
LyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2NsaXBQbGFuZVZl
cnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJz
SW5jbHVkZS9jbGlwUGxhbmVWZXJ0ZXgudHMiKTsKKworCisKK3ZhciBuYW1lID0gJ3BhcnRpY2xl
c1ZlcnRleFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247
XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCBhbmdsZTtcbmF0dHJpYnV0
ZSB2ZWMyIHNpemU7XG4jaWZkZWYgQU5JTUFURVNIRUVUXG5hdHRyaWJ1dGUgZmxvYXQgY2VsbElu
ZGV4O1xuI2VuZGlmXG4jaWZuZGVmIEJJTExCT0FSRFxuYXR0cmlidXRlIHZlYzMgZGlyZWN0aW9u
O1xuI2VuZGlmXG4jaWZkZWYgQklMTEJPQVJEU1RSRVRDSEVEXG5hdHRyaWJ1dGUgdmVjMyBkaXJl
Y3Rpb247XG4jZW5kaWZcbiNpZmRlZiBSQU1QR1JBRElFTlRcbmF0dHJpYnV0ZSB2ZWM0IHJlbWFw
RGF0YTtcbiNlbmRpZlxuYXR0cmlidXRlIHZlYzIgb2Zmc2V0O1xuXG51bmlmb3JtIG1hdDQgdmll
dztcbnVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMyIHRyYW5zbGF0aW9uUGl2
b3Q7XG4jaWZkZWYgQU5JTUFURVNIRUVUXG51bmlmb3JtIHZlYzMgcGFydGljbGVzSW5mb3M7XG4j
ZW5kaWZcblxudmFyeWluZyB2ZWMyIHZVVjtcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG4jaWZkZWYg
UkFNUEdSQURJRU5UXG52YXJ5aW5nIHZlYzQgcmVtYXBSYW5nZXM7XG4jZW5kaWZcbiNpZiBkZWZp
bmVkKENMSVBQTEFORSkgfHwgZGVmaW5lZChDTElQUExBTkUyKSB8fCBkZWZpbmVkKENMSVBQTEFO
RTMpIHx8IGRlZmluZWQoQ0xJUFBMQU5FNClcbnVuaWZvcm0gbWF0NCBpbnZWaWV3O1xuI2VuZGlm
XG4jaW5jbHVkZTxjbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbj5cbiNpZmRlZiBCSUxMQk9BUkRc
bnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbjtcbiNlbmRpZlxudmVjMyByb3RhdGUodmVjMyB5YXhp
cyx2ZWMzIHJvdGF0ZWRDb3JuZXIpIHtcbnZlYzMgeGF4aXM9bm9ybWFsaXplKGNyb3NzKHZlYzMo
MC4sMS4wLDAuKSx5YXhpcykpO1xudmVjMyB6YXhpcz1ub3JtYWxpemUoY3Jvc3MoeWF4aXMseGF4
aXMpKTtcbnZlYzMgcm93MD12ZWMzKHhheGlzLngseGF4aXMueSx4YXhpcy56KTtcbnZlYzMgcm93
MT12ZWMzKHlheGlzLngseWF4aXMueSx5YXhpcy56KTtcbnZlYzMgcm93Mj12ZWMzKHpheGlzLngs
emF4aXMueSx6YXhpcy56KTtcbm1hdDMgcm90TWF0cml4PW1hdDMocm93MCxyb3cxLHJvdzIpO1xu
dmVjMyBhbGlnbmVkQ29ybmVyPXJvdE1hdHJpeCpyb3RhdGVkQ29ybmVyO1xucmV0dXJuIHBvc2l0
aW9uK2FsaWduZWRDb3JuZXI7XG59XG4jaWZkZWYgQklMTEJPQVJEU1RSRVRDSEVEXG52ZWMzIHJv
dGF0ZUFsaWduKHZlYzMgdG9DYW1lcmEsdmVjMyByb3RhdGVkQ29ybmVyKSB7XG52ZWMzIG5vcm1h
bGl6ZWRUb0NhbWVyYT1ub3JtYWxpemUodG9DYW1lcmEpO1xudmVjMyBub3JtYWxpemVkQ3Jvc3NE
aXJUb0NhbWVyYT1ub3JtYWxpemUoY3Jvc3Mobm9ybWFsaXplKGRpcmVjdGlvbiksbm9ybWFsaXpl
ZFRvQ2FtZXJhKSk7XG52ZWMzIGNyb3NzUHJvZHVjdD1ub3JtYWxpemUoY3Jvc3Mobm9ybWFsaXpl
ZFRvQ2FtZXJhLG5vcm1hbGl6ZWRDcm9zc0RpclRvQ2FtZXJhKSk7XG52ZWMzIHJvdzA9dmVjMyhu
b3JtYWxpemVkQ3Jvc3NEaXJUb0NhbWVyYS54LG5vcm1hbGl6ZWRDcm9zc0RpclRvQ2FtZXJhLnks
bm9ybWFsaXplZENyb3NzRGlyVG9DYW1lcmEueik7XG52ZWMzIHJvdzE9dmVjMyhjcm9zc1Byb2R1
Y3QueCxjcm9zc1Byb2R1Y3QueSxjcm9zc1Byb2R1Y3Queik7XG52ZWMzIHJvdzI9dmVjMyhub3Jt
YWxpemVkVG9DYW1lcmEueCxub3JtYWxpemVkVG9DYW1lcmEueSxub3JtYWxpemVkVG9DYW1lcmEu
eik7XG5tYXQzIHJvdE1hdHJpeD1tYXQzKHJvdzAscm93MSxyb3cyKTtcbnZlYzMgYWxpZ25lZENv
cm5lcj1yb3RNYXRyaXgqcm90YXRlZENvcm5lcjtcbnJldHVybiBwb3NpdGlvbithbGlnbmVkQ29y
bmVyO1xufVxuI2VuZGlmXG52b2lkIG1haW4odm9pZCkge1xudmVjMiBjb3JuZXJQb3M7XG5jb3Ju
ZXJQb3M9KHZlYzIob2Zmc2V0LngtMC41LG9mZnNldC55LTAuNSktdHJhbnNsYXRpb25QaXZvdCkq
c2l6ZSt0cmFuc2xhdGlvblBpdm90O1xuI2lmZGVmIEJJTExCT0FSRFxuXG52ZWMzIHJvdGF0ZWRD
b3JuZXI7XG4jaWZkZWYgQklMTEJPQVJEWVxucm90YXRlZENvcm5lci54PWNvcm5lclBvcy54KmNv
cyhhbmdsZSktY29ybmVyUG9zLnkqc2luKGFuZ2xlKTtcbnJvdGF0ZWRDb3JuZXIuej1jb3JuZXJQ
b3MueCpzaW4oYW5nbGUpK2Nvcm5lclBvcy55KmNvcyhhbmdsZSk7XG5yb3RhdGVkQ29ybmVyLnk9
MC47XG52ZWMzIHlheGlzPXBvc2l0aW9uLWV5ZVBvc2l0aW9uO1xueWF4aXMueT0wLjtcbnZlYzMg
d29ybGRQb3M9cm90YXRlKG5vcm1hbGl6ZSh5YXhpcykscm90YXRlZENvcm5lcik7XG52ZWMzIHZp
ZXdQb3M9KHZpZXcqdmVjNCh3b3JsZFBvcywxLjApKS54eXo7XG4jZWxpZiBkZWZpbmVkKEJJTExC
T0FSRFNUUkVUQ0hFRClcbnJvdGF0ZWRDb3JuZXIueD1jb3JuZXJQb3MueCpjb3MoYW5nbGUpLWNv
cm5lclBvcy55KnNpbihhbmdsZSk7XG5yb3RhdGVkQ29ybmVyLnk9Y29ybmVyUG9zLngqc2luKGFu
Z2xlKStjb3JuZXJQb3MueSpjb3MoYW5nbGUpO1xucm90YXRlZENvcm5lci56PTAuO1xudmVjMyB0
b0NhbWVyYT1wb3NpdGlvbi1leWVQb3NpdGlvbjtcbnZlYzMgd29ybGRQb3M9cm90YXRlQWxpZ24o
dG9DYW1lcmEscm90YXRlZENvcm5lcik7XG52ZWMzIHZpZXdQb3M9KHZpZXcqdmVjNCh3b3JsZFBv
cywxLjApKS54eXo7XG4jZWxzZVxucm90YXRlZENvcm5lci54PWNvcm5lclBvcy54KmNvcyhhbmds
ZSktY29ybmVyUG9zLnkqc2luKGFuZ2xlKTtcbnJvdGF0ZWRDb3JuZXIueT1jb3JuZXJQb3MueCpz
aW4oYW5nbGUpK2Nvcm5lclBvcy55KmNvcyhhbmdsZSk7XG5yb3RhdGVkQ29ybmVyLno9MC47XG52
ZWMzIHZpZXdQb3M9KHZpZXcqdmVjNChwb3NpdGlvbiwxLjApKS54eXorcm90YXRlZENvcm5lcjtc
biNlbmRpZlxuI2lmZGVmIFJBTVBHUkFESUVOVFxucmVtYXBSYW5nZXM9cmVtYXBEYXRhO1xuI2Vu
ZGlmXG5cbmdsX1Bvc2l0aW9uPXByb2plY3Rpb24qdmVjNCh2aWV3UG9zLDEuMCk7XG4jZWxzZVxu
XG52ZWMzIHJvdGF0ZWRDb3JuZXI7XG5yb3RhdGVkQ29ybmVyLng9Y29ybmVyUG9zLngqY29zKGFu
Z2xlKS1jb3JuZXJQb3MueSpzaW4oYW5nbGUpO1xucm90YXRlZENvcm5lci56PWNvcm5lclBvcy54
KnNpbihhbmdsZSkrY29ybmVyUG9zLnkqY29zKGFuZ2xlKTtcbnJvdGF0ZWRDb3JuZXIueT0wLjtc
bnZlYzMgeWF4aXM9bm9ybWFsaXplKGRpcmVjdGlvbik7XG52ZWMzIHdvcmxkUG9zPXJvdGF0ZSh5
YXhpcyxyb3RhdGVkQ29ybmVyKTtcbmdsX1Bvc2l0aW9uPXByb2plY3Rpb24qdmlldyp2ZWM0KHdv
cmxkUG9zLDEuMCk7XG4jZW5kaWZcbnZDb2xvcj1jb2xvcjtcbiNpZmRlZiBBTklNQVRFU0hFRVRc
bmZsb2F0IHJvd09mZnNldD1mbG9vcihjZWxsSW5kZXgvcGFydGljbGVzSW5mb3Mueik7XG5mbG9h
dCBjb2x1bW5PZmZzZXQ9Y2VsbEluZGV4LXJvd09mZnNldCpwYXJ0aWNsZXNJbmZvcy56O1xudmVj
MiB1dlNjYWxlPXBhcnRpY2xlc0luZm9zLnh5O1xudmVjMiB1dk9mZnNldD12ZWMyKG9mZnNldC54
ICwxLjAtb2Zmc2V0LnkpO1xudlVWPSh1dk9mZnNldCt2ZWMyKGNvbHVtbk9mZnNldCxyb3dPZmZz
ZXQpKSp1dlNjYWxlO1xuI2Vsc2VcbnZVVj1vZmZzZXQ7XG4jZW5kaWZcblxuI2lmIGRlZmluZWQo
Q0xJUFBMQU5FKSB8fCBkZWZpbmVkKENMSVBQTEFORTIpIHx8IGRlZmluZWQoQ0xJUFBMQU5FMykg
fHwgZGVmaW5lZChDTElQUExBTkU0KVxudmVjNCB3b3JsZFBvcz1pbnZWaWV3KnZlYzQodmlld1Bv
cywxLjApO1xuI2VuZGlmXG4jaW5jbHVkZTxjbGlwUGxhbmVWZXJ0ZXg+XG59IjsKK19NYXRlcmlh
bHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNT
dG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgcGFydGljbGVzVmVydGV4
U2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9TaGFkZXJzL3Bhc3MuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9wYXNzLmZyYWdtZW50LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogcGFzc1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgInBhc3NQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcGFzc1BpeGVs
U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1l
ID0gJ3Bhc3NQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxudmFyeWluZyB2ZWMyIHZVVjtc
bnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmVTYW1wbGVyO1xudm9pZCBtYWluKHZvaWQpXG57XG5n
bF9GcmFnQ29sb3I9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG59IjsKK19NYXRlcmlh
bHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNT
dG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgcGFzc1BpeGVsU2hhZGVy
ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9TaGFkZXJzL3Bhc3NDdWJlLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL3Bhc3NDdWJlLmZyYWdt
ZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IHBhc3NDdWJlUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicGFzc0N1YmVQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gcGFzc0N1YmVQaXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2Vm
ZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdwYXNzQ3ViZVBpeGVsU2hhZGVyJzsKK3ZhciBzaGFk
ZXIgPSAiXG52YXJ5aW5nIHZlYzIgdlVWO1xudW5pZm9ybSBzYW1wbGVyQ3ViZSB0ZXh0dXJlU2Ft
cGxlcjtcbnZvaWQgbWFpbih2b2lkKVxue1xudmVjMiB1dj12VVYqMi4wLTEuMDtcbiNpZmRlZiBQ
T1NJVElWRVhcbmdsX0ZyYWdDb2xvcj10ZXh0dXJlQ3ViZSh0ZXh0dXJlU2FtcGxlcix2ZWMzKDEu
MDAxLHV2LnksdXYueCkpO1xuI2VuZGlmXG4jaWZkZWYgTkVHQVRJVkVYXG5nbF9GcmFnQ29sb3I9
dGV4dHVyZUN1YmUodGV4dHVyZVNhbXBsZXIsdmVjMygtMS4wMDEsdXYueSx1di54KSk7XG4jZW5k
aWZcbiNpZmRlZiBQT1NJVElWRVlcbmdsX0ZyYWdDb2xvcj10ZXh0dXJlQ3ViZSh0ZXh0dXJlU2Ft
cGxlcix2ZWMzKHV2LnksMS4wMDEsdXYueCkpO1xuI2VuZGlmXG4jaWZkZWYgTkVHQVRJVkVZXG5n
bF9GcmFnQ29sb3I9dGV4dHVyZUN1YmUodGV4dHVyZVNhbXBsZXIsdmVjMyh1di55LC0xLjAwMSx1
di54KSk7XG4jZW5kaWZcbiNpZmRlZiBQT1NJVElWRVpcbmdsX0ZyYWdDb2xvcj10ZXh0dXJlQ3Vi
ZSh0ZXh0dXJlU2FtcGxlcix2ZWMzKHV2LDEuMDAxKSk7XG4jZW5kaWZcbiNpZmRlZiBORUdBVElW
RVpcbmdsX0ZyYWdDb2xvcj10ZXh0dXJlQ3ViZSh0ZXh0dXJlU2FtcGxlcix2ZWMzKHV2LC0xLjAw
MSkpO1xuI2VuZGlmXG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlk
ZGVuICovCit2YXIgcGFzc0N1YmVQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBz
aGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9wYnIuZnJhZ21lbnQu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9T
aGFkZXJzL3Bici5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogcGJyUGl4ZWxTaGFkZXIgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicGJyUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIHBiclBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BickZyYWdt
ZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvcGJyRnJhZ21lbnREZWNsYXJhdGlvbiAqLyAi
Li9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickZyYWdtZW50RGVjbGFyYXRpb24udHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfcGJyVWJvRGVjbGFyYXRpb25f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
U2hhZGVyc0luY2x1ZGUvcGJyVWJvRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9wYnJVYm9EZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9T
aGFkZXJzSW5jbHVkZV9wYnJGcmFnbWVudEV4dHJhRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUv
cGJyRnJhZ21lbnRFeHRyYURlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
cGJyRnJhZ21lbnRFeHRyYURlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNJbmNsdWRlX2xpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9saWdodEZyYWdtZW50RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9s
aWdodEZyYWdtZW50RGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
U2hhZGVyc0luY2x1ZGVfbGlnaHRVYm9EZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9saWdodFVi
b0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbGlnaHRVYm9EZWNsYXJh
dGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9wYnJG
cmFnbWVudFNhbXBsZXJzRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvcGJyRnJhZ21lbnRTYW1w
bGVyc0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJyRnJhZ21lbnRT
YW1wbGVyc0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRl
cnNJbmNsdWRlX2ltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2ltYWdl
UHJvY2Vzc2luZ0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW1hZ2VQ
cm9jZXNzaW5nRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hh
ZGVyc0luY2x1ZGVfY2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9j
bGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
Y2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0aERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2xv
Z0RlcHRoRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aERl
Y2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRl
X2ZvZ0ZyYWdtZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2ZvZ0ZyYWdtZW50RGVjbGFy
YXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9mb2dGcmFnbWVudERlY2xhcmF0aW9u
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2hlbHBlckZ1
bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaGVscGVyRnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hh
ZGVyc0luY2x1ZGUvaGVscGVyRnVuY3Rpb25zLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNJbmNsdWRlX3BickhlbHBlckZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvcGJy
SGVscGVyRnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJySGVscGVyRnVu
Y3Rpb25zLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2lt
YWdlUHJvY2Vzc2luZ0Z1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVu
Y3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVuY3Rp
b25zLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3NoYWRv
d3NGcmFnbWVudEZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvc2hhZG93c0ZyYWdtZW50RnVuY3Rp
b25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvc2hhZG93c0ZyYWdtZW50RnVuY3Rpb25z
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2hhcm1vbmlj
c0Z1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaGFybW9uaWNzRnVuY3Rpb25zICovICIuL1NoYWRl
cnMvU2hhZGVyc0luY2x1ZGUvaGFybW9uaWNzRnVuY3Rpb25zLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BickRpcmVjdExpZ2h0aW5nU2V0dXBGdW5jdGlv
bnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL1NoYWRlcnNJbmNsdWRlL3BickRpcmVjdExpZ2h0aW5nU2V0dXBGdW5jdGlvbnMgKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYnJEaXJlY3RMaWdodGluZ1NldHVwRnVuY3Rpb25zLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BickRpcmVjdExp
Z2h0aW5nRmFsbG9mZkZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvcGJyRGlyZWN0TGlnaHRpbmdG
YWxsb2ZmRnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJyRGlyZWN0TGln
aHRpbmdGYWxsb2ZmRnVuY3Rpb25zLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1No
YWRlcnNJbmNsdWRlX3BickJSREZGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL3BickJSREZGdW5j
dGlvbnMgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYnJCUkRGRnVuY3Rpb25zLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BickRpcmVjdExpZ2h0
aW5nRnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9wYnJEaXJlY3RMaWdodGluZ0Z1bmN0aW9ucyAq
LyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickRpcmVjdExpZ2h0aW5nRnVuY3Rpb25zLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BicklCTEZ1bmN0
aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vU2hhZGVyc0luY2x1ZGUvcGJySUJMRnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvcGJySUJMRnVuY3Rpb25zLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNJbmNsdWRlX2J1bXBGcmFnbWVudEZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYnVt
cEZyYWdtZW50RnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYnVtcEZyYWdt
ZW50RnVuY3Rpb25zLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNs
dWRlX3JlZmxlY3Rpb25GdW5jdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvcmVmbGVjdGlvbkZ1bmN0aW9u
ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcmVmbGVjdGlvbkZ1bmN0aW9uLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2NsaXBQbGFuZUZyYWdtZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVudCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJ
bmNsdWRlL2NsaXBQbGFuZUZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNJbmNsdWRlX2J1bXBGcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYnVtcEZyYWdtZW50
ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYnVtcEZyYWdtZW50LnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2RlcHRoUHJlUGFzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0lu
Y2x1ZGUvZGVwdGhQcmVQYXNzICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZGVwdGhQcmVQ
YXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2xpZ2h0
RnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2xpZ2h0RnJhZ21lbnQgKi8gIi4vU2hhZGVycy9TaGFk
ZXJzSW5jbHVkZS9saWdodEZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNJbmNsdWRlX2xvZ0RlcHRoRnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2xvZ0RlcHRo
RnJhZ21lbnQgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aEZyYWdtZW50LnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2ZvZ0ZyYWdtZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9TaGFkZXJzSW5jbHVkZS9mb2dGcmFnbWVudCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRl
L2ZvZ0ZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNs
dWRlX3BickRlYnVnX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9wYnJEZWJ1ZyAqLyAiLi9TaGFkZXJzL1NoYWRl
cnNJbmNsdWRlL3BickRlYnVnLnRzIik7CisKKworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCit2YXIgbmFtZSA9ICdwYnJQaXhlbFNoYWRlcic7
Cit2YXIgc2hhZGVyID0gIiNpZiBkZWZpbmVkKEJVTVApIHx8ICFkZWZpbmVkKE5PUk1BTCkgfHwg
ZGVmaW5lZChGT1JDRU5PUk1BTEZPUldBUkQpIHx8IGRlZmluZWQoU1BFQ1VMQVJBQSkgfHwgZGVm
aW5lZChDTEVBUkNPQVRfQlVNUCkgfHwgZGVmaW5lZChBTklTT1RST1BJQylcbiNleHRlbnNpb24g
R0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG4jZW5kaWZcbiNpZmRlZiBMT0RC
QVNFRE1JQ1JPU0ZVUkFDRVxuI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIDog
ZW5hYmxlXG4jZW5kaWZcbiNkZWZpbmUgQ1VTVE9NX0ZSQUdNRU5UX0JFR0lOXG4jaWZkZWYgTE9H
QVJJVEhNSUNERVBUSFxuI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZVxuI2Vu
ZGlmXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbiNpZm5kZWYgRlJPTUxJTkVBUlNQQUNFXG4j
ZGVmaW5lIEZST01MSU5FQVJTUEFDRVxuI2VuZGlmXG5cbiNpbmNsdWRlPF9fZGVjbF9fcGJyRnJh
Z21lbnQ+XG4jaW5jbHVkZTxwYnJGcmFnbWVudEV4dHJhRGVjbGFyYXRpb24+XG4jaW5jbHVkZTxf
X2RlY2xfX2xpZ2h0RnJhZ21lbnQ+WzAuLm1heFNpbXVsdGFuZW91c0xpZ2h0c11cbiNpbmNsdWRl
PHBickZyYWdtZW50U2FtcGxlcnNEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPGltYWdlUHJvY2Vzc2lu
Z0RlY2xhcmF0aW9uPlxuI2luY2x1ZGU8Y2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbj5cbiNp
bmNsdWRlPGxvZ0RlcHRoRGVjbGFyYXRpb24+XG4jaW5jbHVkZTxmb2dGcmFnbWVudERlY2xhcmF0
aW9uPlxuXG4jaW5jbHVkZTxoZWxwZXJGdW5jdGlvbnM+XG4jaW5jbHVkZTxwYnJIZWxwZXJGdW5j
dGlvbnM+XG4jaW5jbHVkZTxpbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnM+XG4jaW5jbHVkZTxzaGFk
b3dzRnJhZ21lbnRGdW5jdGlvbnM+XG4jaW5jbHVkZTxoYXJtb25pY3NGdW5jdGlvbnM+XG4jaW5j
bHVkZTxwYnJEaXJlY3RMaWdodGluZ1NldHVwRnVuY3Rpb25zPlxuI2luY2x1ZGU8cGJyRGlyZWN0
TGlnaHRpbmdGYWxsb2ZmRnVuY3Rpb25zPlxuI2luY2x1ZGU8cGJyQlJERkZ1bmN0aW9ucz5cbiNp
bmNsdWRlPHBickRpcmVjdExpZ2h0aW5nRnVuY3Rpb25zPlxuI2luY2x1ZGU8cGJySUJMRnVuY3Rp
b25zPlxuI2luY2x1ZGU8YnVtcEZyYWdtZW50RnVuY3Rpb25zPlxuI2lmZGVmIFJFRkxFQ1RJT05c
biNpbmNsdWRlPHJlZmxlY3Rpb25GdW5jdGlvbj5cbiNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJB
R01FTlRfREVGSU5JVElPTlNcblxudm9pZCBtYWluKHZvaWQpIHtcbiNkZWZpbmUgQ1VTVE9NX0ZS
QUdNRU5UX01BSU5fQkVHSU5cbiNpbmNsdWRlPGNsaXBQbGFuZUZyYWdtZW50PlxuXG52ZWMzIHZp
ZXdEaXJlY3Rpb25XPW5vcm1hbGl6ZSh2RXllUG9zaXRpb24ueHl6LXZQb3NpdGlvblcpO1xuI2lm
ZGVmIE5PUk1BTFxudmVjMyBub3JtYWxXPW5vcm1hbGl6ZSh2Tm9ybWFsVyk7XG4jZWxzZVxudmVj
MyBub3JtYWxXPW5vcm1hbGl6ZShjcm9zcyhkRmR4KHZQb3NpdGlvblcpLGRGZHkodlBvc2l0aW9u
VykpKSp2RXllUG9zaXRpb24udztcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVFxuXG52ZWMzIGNs
ZWFyQ29hdE5vcm1hbFc9bm9ybWFsVztcbiNlbmRpZlxuI2luY2x1ZGU8YnVtcEZyYWdtZW50Plxu
I2lmIGRlZmluZWQoRk9SQ0VOT1JNQUxGT1JXQVJEKSAmJiBkZWZpbmVkKE5PUk1BTClcbnZlYzMg
ZmFjZU5vcm1hbD1ub3JtYWxpemUoY3Jvc3MoZEZkeCh2UG9zaXRpb25XKSxkRmR5KHZQb3NpdGlv
blcpKSkqdkV5ZVBvc2l0aW9uLnc7XG4jaWYgZGVmaW5lZChUV09TSURFRExJR0hUSU5HKVxuZmFj
ZU5vcm1hbD1nbF9Gcm9udEZhY2luZyA/IGZhY2VOb3JtYWwgOiAtZmFjZU5vcm1hbDtcbiNlbmRp
Zlxubm9ybWFsVyo9c2lnbihkb3Qobm9ybWFsVyxmYWNlTm9ybWFsKSk7XG4jZW5kaWZcbiNpZiBk
ZWZpbmVkKFRXT1NJREVETElHSFRJTkcpICYmIGRlZmluZWQoTk9STUFMKVxubm9ybWFsVz1nbF9G
cm9udEZhY2luZyA/IG5vcm1hbFcgOiAtbm9ybWFsVztcbiNlbmRpZlxuXG5cbnZlYzMgc3VyZmFj
ZUFsYmVkbz12QWxiZWRvQ29sb3IucmdiO1xuXG5mbG9hdCBhbHBoYT12QWxiZWRvQ29sb3IuYTtc
biNpZmRlZiBBTEJFRE9cbnZlYzQgYWxiZWRvVGV4dHVyZT10ZXh0dXJlMkQoYWxiZWRvU2FtcGxl
cix2QWxiZWRvVVYrdXZPZmZzZXQpO1xuI2lmIGRlZmluZWQoQUxQSEFGUk9NQUxCRURPKSB8fCBk
ZWZpbmVkKEFMUEhBVEVTVClcbmFscGhhKj1hbGJlZG9UZXh0dXJlLmE7XG4jZW5kaWZcbnN1cmZh
Y2VBbGJlZG8qPXRvTGluZWFyU3BhY2UoYWxiZWRvVGV4dHVyZS5yZ2IpO1xuc3VyZmFjZUFsYmVk
byo9dkFsYmVkb0luZm9zLnk7XG4jZW5kaWZcbiNpZmRlZiBWRVJURVhDT0xPUlxuc3VyZmFjZUFs
YmVkbyo9dkNvbG9yLnJnYjtcbiNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJBR01FTlRfVVBEQVRF
X0FMQkVET1xuXG4jaWZkZWYgT1BBQ0lUWVxudmVjNCBvcGFjaXR5TWFwPXRleHR1cmUyRChvcGFj
aXR5U2FtcGxlcix2T3BhY2l0eVVWK3V2T2Zmc2V0KTtcbiNpZmRlZiBPUEFDSVRZUkdCXG5hbHBo
YT1nZXRMdW1pbmFuY2Uob3BhY2l0eU1hcC5yZ2IpO1xuI2Vsc2VcbmFscGhhKj1vcGFjaXR5TWFw
LmE7XG4jZW5kaWZcbmFscGhhKj12T3BhY2l0eUluZm9zLnk7XG4jZW5kaWZcbiNpZmRlZiBWRVJU
RVhBTFBIQVxuYWxwaGEqPXZDb2xvci5hO1xuI2VuZGlmXG4jaWYgIWRlZmluZWQoU1NfTElOS1JF
RlJBQ1RJT05UT1RSQU5TUEFSRU5DWSkgJiYgIWRlZmluZWQoQUxQSEFGUkVTTkVMKVxuI2lmZGVm
IEFMUEhBVEVTVFxuaWYgKGFscGhhPEFMUEhBVEVTVFZBTFVFKVxuZGlzY2FyZDtcbiNpZm5kZWYg
QUxQSEFCTEVORFxuXG5hbHBoYT0xLjA7XG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlmXG4jZGVmaW5l
IENVU1RPTV9GUkFHTUVOVF9VUERBVEVfQUxQSEFcbiNpbmNsdWRlPGRlcHRoUHJlUGFzcz5cbiNk
ZWZpbmUgQ1VTVE9NX0ZSQUdNRU5UX0JFRk9SRV9MSUdIVFNcblxudmVjMyBhbWJpZW50T2NjbHVz
aW9uQ29sb3I9dmVjMygxLiwxLiwxLik7XG4jaWZkZWYgQU1CSUVOVFxudmVjMyBhbWJpZW50T2Nj
bHVzaW9uQ29sb3JNYXA9dGV4dHVyZTJEKGFtYmllbnRTYW1wbGVyLHZBbWJpZW50VVYrdXZPZmZz
ZXQpLnJnYip2QW1iaWVudEluZm9zLnk7XG4jaWZkZWYgQU1CSUVOVElOR1JBWVNDQUxFXG5hbWJp
ZW50T2NjbHVzaW9uQ29sb3JNYXA9dmVjMyhhbWJpZW50T2NjbHVzaW9uQ29sb3JNYXAucixhbWJp
ZW50T2NjbHVzaW9uQ29sb3JNYXAucixhbWJpZW50T2NjbHVzaW9uQ29sb3JNYXAucik7XG4jZW5k
aWZcbmFtYmllbnRPY2NsdXNpb25Db2xvcj1taXgoYW1iaWVudE9jY2x1c2lvbkNvbG9yLGFtYmll
bnRPY2NsdXNpb25Db2xvck1hcCx2QW1iaWVudEluZm9zLnopO1xuI2VuZGlmXG4jaWZkZWYgVU5M
SVRcbnZlYzMgZGlmZnVzZUJhc2U9dmVjMygxLiwxLiwxLik7XG4jZWxzZVxuXG5mbG9hdCBtaWNy
b1N1cmZhY2U9dlJlZmxlY3Rpdml0eUNvbG9yLmE7XG52ZWMzIHN1cmZhY2VSZWZsZWN0aXZpdHlD
b2xvcj12UmVmbGVjdGl2aXR5Q29sb3IucmdiO1xuI2lmZGVmIE1FVEFMTElDV09SS0ZMT1dcbnZl
YzIgbWV0YWxsaWNSb3VnaG5lc3M9c3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yLnJnO1xuI2lmZGVm
IFJFRkxFQ1RJVklUWVxudmVjNCBzdXJmYWNlTWV0YWxsaWNDb2xvck1hcD10ZXh0dXJlMkQocmVm
bGVjdGl2aXR5U2FtcGxlcix2UmVmbGVjdGl2aXR5VVYrdXZPZmZzZXQpO1xuI2lmZGVmIEFPU1RP
UkVJTk1FVEFMTUFQUkVEXG52ZWMzIGFvU3RvcmVJbk1ldGFsTWFwPXZlYzMoc3VyZmFjZU1ldGFs
bGljQ29sb3JNYXAucixzdXJmYWNlTWV0YWxsaWNDb2xvck1hcC5yLHN1cmZhY2VNZXRhbGxpY0Nv
bG9yTWFwLnIpO1xuYW1iaWVudE9jY2x1c2lvbkNvbG9yPW1peChhbWJpZW50T2NjbHVzaW9uQ29s
b3IsYW9TdG9yZUluTWV0YWxNYXAsdlJlZmxlY3Rpdml0eUluZm9zLnopO1xuI2VuZGlmXG4jaWZk
ZWYgTUVUQUxMTkVTU1NUT1JFSU5NRVRBTE1BUEJMVUVcbm1ldGFsbGljUm91Z2huZXNzLnIqPXN1
cmZhY2VNZXRhbGxpY0NvbG9yTWFwLmI7XG4jZWxzZVxubWV0YWxsaWNSb3VnaG5lc3Mucio9c3Vy
ZmFjZU1ldGFsbGljQ29sb3JNYXAucjtcbiNlbmRpZlxuI2lmZGVmIFJPVUdITkVTU1NUT1JFSU5N
RVRBTE1BUEFMUEhBXG5tZXRhbGxpY1JvdWdobmVzcy5nKj1zdXJmYWNlTWV0YWxsaWNDb2xvck1h
cC5hO1xuI2Vsc2VcbiNpZmRlZiBST1VHSE5FU1NTVE9SRUlOTUVUQUxNQVBHUkVFTlxubWV0YWxs
aWNSb3VnaG5lc3MuZyo9c3VyZmFjZU1ldGFsbGljQ29sb3JNYXAuZztcbiNlbmRpZlxuI2VuZGlm
XG4jZW5kaWZcbiNpZmRlZiBNSUNST1NVUkZBQ0VNQVBcbnZlYzQgbWljcm9TdXJmYWNlVGV4ZWw9
dGV4dHVyZTJEKG1pY3JvU3VyZmFjZVNhbXBsZXIsdk1pY3JvU3VyZmFjZVNhbXBsZXJVVit1dk9m
ZnNldCkqdk1pY3JvU3VyZmFjZVNhbXBsZXJJbmZvcy55O1xubWV0YWxsaWNSb3VnaG5lc3MuZyo9
bWljcm9TdXJmYWNlVGV4ZWwucjtcbiNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJBR01FTlRfVVBE
QVRFX01FVEFMTElDUk9VR0hORVNTXG5cbm1pY3JvU3VyZmFjZT0xLjAtbWV0YWxsaWNSb3VnaG5l
c3MuZztcblxudmVjMyBiYXNlQ29sb3I9c3VyZmFjZUFsYmVkbztcbiNpZmRlZiBSRUZMRUNUQU5D
RVxuXG5cblxuXG5cbnN1cmZhY2VBbGJlZG89YmFzZUNvbG9yLnJnYiooMS4wLW1ldGFsbGljUm91
Z2huZXNzLnIpO1xuXG5zdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3I9bWl4KDAuMTYqcmVmbGVjdGFu
Y2UqcmVmbGVjdGFuY2UsYmFzZUNvbG9yLG1ldGFsbGljUm91Z2huZXNzLnIpO1xuI2Vsc2Vcblxu
XG5cbmNvbnN0IHZlYzMgRGVmYXVsdFNwZWN1bGFyUmVmbGVjdGFuY2VEaWVsZWN0cmljPXZlYzMo
MC4wNCwwLjA0LDAuMDQpO1xuXG5zdXJmYWNlQWxiZWRvPW1peChiYXNlQ29sb3IucmdiKigxLjAt
RGVmYXVsdFNwZWN1bGFyUmVmbGVjdGFuY2VEaWVsZWN0cmljLnIpLHZlYzMoMC4sMC4sMC4pLG1l
dGFsbGljUm91Z2huZXNzLnIpO1xuXG5zdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3I9bWl4KERlZmF1
bHRTcGVjdWxhclJlZmxlY3RhbmNlRGllbGVjdHJpYyxiYXNlQ29sb3IsbWV0YWxsaWNSb3VnaG5l
c3Mucik7XG4jZW5kaWZcbiNlbHNlXG4jaWZkZWYgUkVGTEVDVElWSVRZXG52ZWM0IHN1cmZhY2VS
ZWZsZWN0aXZpdHlDb2xvck1hcD10ZXh0dXJlMkQocmVmbGVjdGl2aXR5U2FtcGxlcix2UmVmbGVj
dGl2aXR5VVYrdXZPZmZzZXQpO1xuc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yKj10b0xpbmVhclNw
YWNlKHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvck1hcC5yZ2IpO1xuc3VyZmFjZVJlZmxlY3Rpdml0
eUNvbG9yKj12UmVmbGVjdGl2aXR5SW5mb3MueTtcbiNpZmRlZiBNSUNST1NVUkZBQ0VGUk9NUkVG
TEVDVElWSVRZTUFQXG5taWNyb1N1cmZhY2UqPXN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvck1hcC5h
O1xubWljcm9TdXJmYWNlKj12UmVmbGVjdGl2aXR5SW5mb3MuejtcbiNlbHNlXG4jaWZkZWYgTUlD
Uk9TVVJGQUNFQVVUT01BVElDXG5taWNyb1N1cmZhY2UqPWNvbXB1dGVEZWZhdWx0TWljcm9TdXJm
YWNlKG1pY3JvU3VyZmFjZSxzdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3IpO1xuI2VuZGlmXG4jaWZk
ZWYgTUlDUk9TVVJGQUNFTUFQXG52ZWM0IG1pY3JvU3VyZmFjZVRleGVsPXRleHR1cmUyRChtaWNy
b1N1cmZhY2VTYW1wbGVyLHZNaWNyb1N1cmZhY2VTYW1wbGVyVVYrdXZPZmZzZXQpKnZNaWNyb1N1
cmZhY2VTYW1wbGVySW5mb3MueTtcbm1pY3JvU3VyZmFjZSo9bWljcm9TdXJmYWNlVGV4ZWwucjtc
biNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJBR01FTlRfVVBEQVRFX01JQ1JPU1VSRkFDRVxuI2Vu
ZGlmXG4jZW5kaWZcbiNlbmRpZlxuXG5taWNyb1N1cmZhY2U9c2F0dXJhdGUobWljcm9TdXJmYWNl
KTtcblxuZmxvYXQgcm91Z2huZXNzPTEuLW1pY3JvU3VyZmFjZTtcblxuI2lmZGVmIEFMUEhBRlJF
U05FTFxuI2lmIGRlZmluZWQoQUxQSEFURVNUKSB8fCBkZWZpbmVkKEFMUEhBQkxFTkQpXG5cblxu
XG5mbG9hdCBvcGFjaXR5UGVyY2VwdHVhbD1hbHBoYTtcbiNpZmRlZiBMSU5FQVJBTFBIQUZSRVNO
RUxcbmZsb2F0IG9wYWNpdHkwPW9wYWNpdHlQZXJjZXB0dWFsO1xuI2Vsc2VcbmZsb2F0IG9wYWNp
dHkwPW9wYWNpdHlQZXJjZXB0dWFsKm9wYWNpdHlQZXJjZXB0dWFsO1xuI2VuZGlmXG5mbG9hdCBv
cGFjaXR5OTA9ZnJlc25lbEdyYXppbmdSZWZsZWN0YW5jZShvcGFjaXR5MCk7XG52ZWMzIG5vcm1h
bEZvcndhcmQ9ZmFjZWZvcndhcmQobm9ybWFsVywtdmlld0RpcmVjdGlvblcsbm9ybWFsVyk7XG5c
bmFscGhhPWdldFJlZmxlY3RhbmNlRnJvbUFuYWx5dGljYWxCUkRGTG9va3VwX0pvbmVzKHNhdHVy
YXRlKGRvdCh2aWV3RGlyZWN0aW9uVyxub3JtYWxGb3J3YXJkKSksdmVjMyhvcGFjaXR5MCksdmVj
MyhvcGFjaXR5OTApLHNxcnQobWljcm9TdXJmYWNlKSkueDtcbiNpZmRlZiBBTFBIQVRFU1Rcbmlm
IChhbHBoYTxBTFBIQVRFU1RWQUxVRSlcbmRpc2NhcmQ7XG4jaWZuZGVmIEFMUEhBQkxFTkRcblxu
YWxwaGE9MS4wO1xuI2VuZGlmXG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlmXG5cbmZsb2F0IE5kb3RW
VW5jbGFtcGVkPWRvdChub3JtYWxXLHZpZXdEaXJlY3Rpb25XKTtcblxuZmxvYXQgTmRvdFY9YWJz
RXBzKE5kb3RWVW5jbGFtcGVkKTtcbmZsb2F0IGFscGhhRz1jb252ZXJ0Um91Z2huZXNzVG9BdmVy
YWdlU2xvcGUocm91Z2huZXNzKTtcbnZlYzIgQUFSb3VnaG5lc3NGYWN0b3JzPWdldEFBUm91Z2hu
ZXNzRmFjdG9ycyhub3JtYWxXLnh5eik7XG4jaWZkZWYgU1BFQ1VMQVJBQVxuXG5hbHBoYUcrPUFB
Um91Z2huZXNzRmFjdG9ycy55O1xuI2VuZGlmXG4jaWZkZWYgQU5JU09UUk9QSUNcbmZsb2F0IGFu
aXNvdHJvcHk9dkFuaXNvdHJvcHkuYjtcbnZlYzMgYW5pc290cm9weURpcmVjdGlvbj12ZWMzKHZB
bmlzb3Ryb3B5Lnh5LDAuKTtcbiNpZmRlZiBBTklTT1RST1BJQ19URVhUVVJFXG52ZWMzIGFuaXNv
dHJvcHlNYXBEYXRhPXRleHR1cmUyRChhbmlzb3Ryb3B5U2FtcGxlcix2QW5pc290cm9weVVWK3V2
T2Zmc2V0KS5yZ2IqdkFuaXNvdHJvcHlJbmZvcy55O1xuYW5pc290cm9weSo9YW5pc290cm9weU1h
cERhdGEuYjtcbmFuaXNvdHJvcHlEaXJlY3Rpb24ucmcqPWFuaXNvdHJvcHlNYXBEYXRhLnJnKjIu
MC0xLjA7XG4jZW5kaWZcbm1hdDMgYW5pc29UQk49bWF0Myhub3JtYWxpemUoVEJOWzBdKSxub3Jt
YWxpemUoVEJOWzFdKSxub3JtYWxpemUoVEJOWzJdKSk7XG52ZWMzIGFuaXNvdHJvcGljVGFuZ2Vu
dD1ub3JtYWxpemUoYW5pc29UQk4qYW5pc290cm9weURpcmVjdGlvbik7XG52ZWMzIGFuaXNvdHJv
cGljQml0YW5nZW50PW5vcm1hbGl6ZShjcm9zcyhhbmlzb1RCTlsyXSxhbmlzb3Ryb3BpY1Rhbmdl
bnQpKTtcbnZlYzMgYW5pc290cm9waWNOb3JtYWw9Z2V0QW5pc290cm9waWNCZW50Tm9ybWFscyhh
bmlzb3Ryb3BpY1RhbmdlbnQsYW5pc290cm9waWNCaXRhbmdlbnQsbm9ybWFsVyx2aWV3RGlyZWN0
aW9uVyxhbmlzb3Ryb3B5KTtcbiNlbmRpZlxuXG4jaWZkZWYgU1NfUkVGUkFDVElPTlxudmVjNCBl
bnZpcm9ubWVudFJlZnJhY3Rpb249dmVjNCgwLiwwLiwwLiwwLik7XG4jaWZkZWYgQU5JU09UUk9Q
SUNcbnZlYzMgcmVmcmFjdGlvblZlY3Rvcj1yZWZyYWN0KC12aWV3RGlyZWN0aW9uVyxhbmlzb3Ry
b3BpY05vcm1hbCx2UmVmcmFjdGlvbkluZm9zLnkpO1xuI2Vsc2VcbnZlYzMgcmVmcmFjdGlvblZl
Y3Rvcj1yZWZyYWN0KC12aWV3RGlyZWN0aW9uVyxub3JtYWxXLHZSZWZyYWN0aW9uSW5mb3MueSk7
XG4jZW5kaWZcbiNpZmRlZiBTU19SRUZSQUNUSU9OTUFQX09QUE9TSVRFWlxucmVmcmFjdGlvblZl
Y3Rvci56Kj0tMS4wO1xuI2VuZGlmXG5cbiNpZmRlZiBTU19SRUZSQUNUSU9OTUFQXzNEXG5yZWZy
YWN0aW9uVmVjdG9yLnk9cmVmcmFjdGlvblZlY3Rvci55KnZSZWZyYWN0aW9uSW5mb3MudztcbnZl
YzMgcmVmcmFjdGlvbkNvb3Jkcz1yZWZyYWN0aW9uVmVjdG9yO1xucmVmcmFjdGlvbkNvb3Jkcz12
ZWMzKHJlZnJhY3Rpb25NYXRyaXgqdmVjNChyZWZyYWN0aW9uQ29vcmRzLDApKTtcbiNlbHNlXG52
ZWMzIHZSZWZyYWN0aW9uVVZXPXZlYzMocmVmcmFjdGlvbk1hdHJpeCoodmlldyp2ZWM0KHZQb3Np
dGlvblcrcmVmcmFjdGlvblZlY3Rvcip2UmVmcmFjdGlvbkluZm9zLnosMS4wKSkpO1xudmVjMiBy
ZWZyYWN0aW9uQ29vcmRzPXZSZWZyYWN0aW9uVVZXLnh5L3ZSZWZyYWN0aW9uVVZXLno7XG5yZWZy
YWN0aW9uQ29vcmRzLnk9MS4wLXJlZnJhY3Rpb25Db29yZHMueTtcbiNlbmRpZlxuI2lmZGVmIFNT
X0xPRElOUkVGUkFDVElPTkFMUEhBXG5mbG9hdCByZWZyYWN0aW9uTE9EPWdldExvZEZyb21BbHBo
YUcodlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54LGFscGhhRyxOZG90VlVuY2xhbXBlZCk7
XG4jZWxpZiBkZWZpbmVkKFNTX0xJTkVBUlNQRUNVTEFSUkVGUkFDVElPTilcbmZsb2F0IHJlZnJh
Y3Rpb25MT0Q9Z2V0TGluZWFyTG9kRnJvbVJvdWdobmVzcyh2UmVmcmFjdGlvbk1pY3Jvc3VyZmFj
ZUluZm9zLngscm91Z2huZXNzKTtcbiNlbHNlXG5mbG9hdCByZWZyYWN0aW9uTE9EPWdldExvZEZy
b21BbHBoYUcodlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54LGFscGhhRyk7XG4jZW5kaWZc
biNpZmRlZiBMT0RCQVNFRE1JQ1JPU0ZVUkFDRVxuXG5yZWZyYWN0aW9uTE9EPXJlZnJhY3Rpb25M
T0QqdlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy55K3ZSZWZyYWN0aW9uTWljcm9zdXJmYWNl
SW5mb3MuejtcbiNpZmRlZiBTU19MT0RJTlJFRlJBQ1RJT05BTFBIQVxuXG5cblxuXG5cblxuXG5c
blxuZmxvYXQgYXV0b21hdGljUmVmcmFjdGlvbkxPRD1VTlBBQ0tfTE9EKHNhbXBsZVJlZnJhY3Rp
b24ocmVmcmFjdGlvblNhbXBsZXIscmVmcmFjdGlvbkNvb3JkcykuYSk7XG5mbG9hdCByZXF1ZXN0
ZWRSZWZyYWN0aW9uTE9EPW1heChhdXRvbWF0aWNSZWZyYWN0aW9uTE9ELHJlZnJhY3Rpb25MT0Qp
O1xuI2Vsc2VcbmZsb2F0IHJlcXVlc3RlZFJlZnJhY3Rpb25MT0Q9cmVmcmFjdGlvbkxPRDtcbiNl
bmRpZlxuZW52aXJvbm1lbnRSZWZyYWN0aW9uPXNhbXBsZVJlZnJhY3Rpb25Mb2QocmVmcmFjdGlv
blNhbXBsZXIscmVmcmFjdGlvbkNvb3JkcyxyZXF1ZXN0ZWRSZWZyYWN0aW9uTE9EKTtcbiNlbHNl
XG5mbG9hdCBsb2RSZWZyYWN0aW9uTm9ybWFsaXplZD1zYXR1cmF0ZShyZWZyYWN0aW9uTE9EL2xv
ZzIodlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54KSk7XG5mbG9hdCBsb2RSZWZyYWN0aW9u
Tm9ybWFsaXplZERvdWJsZWQ9bG9kUmVmcmFjdGlvbk5vcm1hbGl6ZWQqMi4wO1xudmVjNCBlbnZp
cm9ubWVudFJlZnJhY3Rpb25NaWQ9c2FtcGxlUmVmcmFjdGlvbihyZWZyYWN0aW9uU2FtcGxlcixy
ZWZyYWN0aW9uQ29vcmRzKTtcbmlmKGxvZFJlZnJhY3Rpb25Ob3JtYWxpemVkRG91YmxlZDwxLjAp
e1xuZW52aXJvbm1lbnRSZWZyYWN0aW9uPW1peChcbnNhbXBsZVJlZnJhY3Rpb24ocmVmcmFjdGlv
blNhbXBsZXJIaWdoLHJlZnJhY3Rpb25Db29yZHMpLFxuZW52aXJvbm1lbnRSZWZyYWN0aW9uTWlk
LFxubG9kUmVmcmFjdGlvbk5vcm1hbGl6ZWREb3VibGVkXG4pO1xufWVsc2V7XG5lbnZpcm9ubWVu
dFJlZnJhY3Rpb249bWl4KFxuZW52aXJvbm1lbnRSZWZyYWN0aW9uTWlkLFxuc2FtcGxlUmVmcmFj
dGlvbihyZWZyYWN0aW9uU2FtcGxlckxvdyxyZWZyYWN0aW9uQ29vcmRzKSxcbmxvZFJlZnJhY3Rp
b25Ob3JtYWxpemVkRG91YmxlZC0xLjBcbik7XG59XG4jZW5kaWZcbiNpZmRlZiBTU19SR0JEUkVG
UkFDVElPTlxuZW52aXJvbm1lbnRSZWZyYWN0aW9uLnJnYj1mcm9tUkdCRChlbnZpcm9ubWVudFJl
ZnJhY3Rpb24pO1xuI2VuZGlmXG4jaWZkZWYgU1NfR0FNTUFSRUZSQUNUSU9OXG5lbnZpcm9ubWVu
dFJlZnJhY3Rpb24ucmdiPXRvTGluZWFyU3BhY2UoZW52aXJvbm1lbnRSZWZyYWN0aW9uLnJnYik7
XG4jZW5kaWZcblxuZW52aXJvbm1lbnRSZWZyYWN0aW9uLnJnYio9dlJlZnJhY3Rpb25JbmZvcy54
O1xuI2VuZGlmXG5cbiNpZmRlZiBSRUZMRUNUSU9OXG52ZWM0IGVudmlyb25tZW50UmFkaWFuY2U9
dmVjNCgwLiwwLiwwLiwwLik7XG52ZWMzIGVudmlyb25tZW50SXJyYWRpYW5jZT12ZWMzKDAuLDAu
LDAuKTtcbiNpZmRlZiBBTklTT1RST1BJQ1xudmVjMyByZWZsZWN0aW9uVmVjdG9yPWNvbXB1dGVS
ZWZsZWN0aW9uQ29vcmRzKHZlYzQodlBvc2l0aW9uVywxLjApLGFuaXNvdHJvcGljTm9ybWFsKTtc
biNlbHNlXG52ZWMzIHJlZmxlY3Rpb25WZWN0b3I9Y29tcHV0ZVJlZmxlY3Rpb25Db29yZHModmVj
NCh2UG9zaXRpb25XLDEuMCksbm9ybWFsVyk7XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9OTUFQ
X09QUE9TSVRFWlxucmVmbGVjdGlvblZlY3Rvci56Kj0tMS4wO1xuI2VuZGlmXG5cbiNpZmRlZiBS
RUZMRUNUSU9OTUFQXzNEXG52ZWMzIHJlZmxlY3Rpb25Db29yZHM9cmVmbGVjdGlvblZlY3Rvcjtc
biNlbHNlXG52ZWMyIHJlZmxlY3Rpb25Db29yZHM9cmVmbGVjdGlvblZlY3Rvci54eTtcbiNpZmRl
ZiBSRUZMRUNUSU9OTUFQX1BST0pFQ1RJT05cbnJlZmxlY3Rpb25Db29yZHMvPXJlZmxlY3Rpb25W
ZWN0b3IuejtcbiNlbmRpZlxucmVmbGVjdGlvbkNvb3Jkcy55PTEuMC1yZWZsZWN0aW9uQ29vcmRz
Lnk7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKExPRElOUkVGTEVDVElPTkFMUEhBKSAmJiAhZGVmaW5l
ZChSRUZMRUNUSU9OTUFQX1NLWUJPWClcbmZsb2F0IHJlZmxlY3Rpb25MT0Q9Z2V0TG9kRnJvbUFs
cGhhRyh2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLngsYWxwaGFHLE5kb3RWVW5jbGFtcGVk
KTtcbiNlbGlmIGRlZmluZWQoTElORUFSU1BFQ1VMQVJSRUZMRUNUSU9OKVxuZmxvYXQgcmVmcmFj
dGlvbkxPRD1nZXRMaW5lYXJMb2RGcm9tUm91Z2huZXNzKHZSZWZsZWN0aW9uTWljcm9zdXJmYWNl
SW5mb3MueCxyb3VnaG5lc3MpO1xuI2Vsc2VcbmZsb2F0IHJlZmxlY3Rpb25MT0Q9Z2V0TG9kRnJv
bUFscGhhRyh2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLngsYWxwaGFHKTtcbiNlbmRpZlxu
I2lmZGVmIExPREJBU0VETUlDUk9TRlVSQUNFXG5cbnJlZmxlY3Rpb25MT0Q9cmVmbGVjdGlvbkxP
RCp2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLnkrdlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJ
bmZvcy56O1xuI2lmZGVmIExPRElOUkVGTEVDVElPTkFMUEhBXG5cblxuXG5cblxuXG5cblxuXG5m
bG9hdCBhdXRvbWF0aWNSZWZsZWN0aW9uTE9EPVVOUEFDS19MT0Qoc2FtcGxlUmVmbGVjdGlvbihy
ZWZsZWN0aW9uU2FtcGxlcixyZWZsZWN0aW9uQ29vcmRzKS5hKTtcbmZsb2F0IHJlcXVlc3RlZFJl
ZmxlY3Rpb25MT0Q9bWF4KGF1dG9tYXRpY1JlZmxlY3Rpb25MT0QscmVmbGVjdGlvbkxPRCk7XG4j
ZWxzZVxuZmxvYXQgcmVxdWVzdGVkUmVmbGVjdGlvbkxPRD1yZWZsZWN0aW9uTE9EO1xuI2VuZGlm
XG5lbnZpcm9ubWVudFJhZGlhbmNlPXNhbXBsZVJlZmxlY3Rpb25Mb2QocmVmbGVjdGlvblNhbXBs
ZXIscmVmbGVjdGlvbkNvb3JkcyxyZXF1ZXN0ZWRSZWZsZWN0aW9uTE9EKTtcbiNlbHNlXG5mbG9h
dCBsb2RSZWZsZWN0aW9uTm9ybWFsaXplZD1zYXR1cmF0ZShyZWZsZWN0aW9uTE9EL2xvZzIodlJl
ZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54KSk7XG5mbG9hdCBsb2RSZWZsZWN0aW9uTm9ybWFs
aXplZERvdWJsZWQ9bG9kUmVmbGVjdGlvbk5vcm1hbGl6ZWQqMi4wO1xudmVjNCBlbnZpcm9ubWVu
dFNwZWN1bGFyTWlkPXNhbXBsZVJlZmxlY3Rpb24ocmVmbGVjdGlvblNhbXBsZXIscmVmbGVjdGlv
bkNvb3Jkcyk7XG5pZihsb2RSZWZsZWN0aW9uTm9ybWFsaXplZERvdWJsZWQ8MS4wKXtcbmVudmly
b25tZW50UmFkaWFuY2U9bWl4KFxuc2FtcGxlUmVmbGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlckhp
Z2gscmVmbGVjdGlvbkNvb3JkcyksXG5lbnZpcm9ubWVudFNwZWN1bGFyTWlkLFxubG9kUmVmbGVj
dGlvbk5vcm1hbGl6ZWREb3VibGVkXG4pO1xufWVsc2V7XG5lbnZpcm9ubWVudFJhZGlhbmNlPW1p
eChcbmVudmlyb25tZW50U3BlY3VsYXJNaWQsXG5zYW1wbGVSZWZsZWN0aW9uKHJlZmxlY3Rpb25T
YW1wbGVyTG93LHJlZmxlY3Rpb25Db29yZHMpLFxubG9kUmVmbGVjdGlvbk5vcm1hbGl6ZWREb3Vi
bGVkLTEuMFxuKTtcbn1cbiNlbmRpZlxuI2lmZGVmIFJHQkRSRUZMRUNUSU9OXG5lbnZpcm9ubWVu
dFJhZGlhbmNlLnJnYj1mcm9tUkdCRChlbnZpcm9ubWVudFJhZGlhbmNlKTtcbiNlbmRpZlxuI2lm
ZGVmIEdBTU1BUkVGTEVDVElPTlxuZW52aXJvbm1lbnRSYWRpYW5jZS5yZ2I9dG9MaW5lYXJTcGFj
ZShlbnZpcm9ubWVudFJhZGlhbmNlLnJnYik7XG4jZW5kaWZcblxuI2lmZGVmIFVTRVNQSEVSSUNB
TEZST01SRUZMRUNUSU9OTUFQXG4jaWYgZGVmaW5lZChOT1JNQUwpICYmIGRlZmluZWQoVVNFU1BI
RVJJQ0FMSU5WRVJURVgpXG5lbnZpcm9ubWVudElycmFkaWFuY2U9dkVudmlyb25tZW50SXJyYWRp
YW5jZTtcbiNlbHNlXG4jaWZkZWYgQU5JU09UUk9QSUNcbnZlYzMgaXJyYWRpYW5jZVZlY3Rvcj12
ZWMzKHJlZmxlY3Rpb25NYXRyaXgqdmVjNChhbmlzb3Ryb3BpY05vcm1hbCwwKSkueHl6O1xuI2Vs
c2VcbnZlYzMgaXJyYWRpYW5jZVZlY3Rvcj12ZWMzKHJlZmxlY3Rpb25NYXRyaXgqdmVjNChub3Jt
YWxXLDApKS54eXo7XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9OTUFQX09QUE9TSVRFWlxuaXJy
YWRpYW5jZVZlY3Rvci56Kj0tMS4wO1xuI2VuZGlmXG5lbnZpcm9ubWVudElycmFkaWFuY2U9Y29t
cHV0ZUVudmlyb25tZW50SXJyYWRpYW5jZShpcnJhZGlhbmNlVmVjdG9yKTtcbiNlbmRpZlxuI2Vs
aWYgZGVmaW5lZChVU0VJUlJBRElBTkNFTUFQKVxuZW52aXJvbm1lbnRJcnJhZGlhbmNlPXNhbXBs
ZVJlZmxlY3Rpb24oaXJyYWRpYW5jZVNhbXBsZXIscmVmbGVjdGlvbkNvb3JkcykucmdiO1xuI2lm
ZGVmIFJHQkRSRUZMRUNUSU9OXG5lbnZpcm9ubWVudElycmFkaWFuY2UucmdiPWZyb21SR0JEKGVu
dmlyb25tZW50SXJyYWRpYW5jZSk7XG4jZW5kaWZcbiNpZmRlZiBHQU1NQVJFRkxFQ1RJT05cbmVu
dmlyb25tZW50SXJyYWRpYW5jZS5yZ2I9dG9MaW5lYXJTcGFjZShlbnZpcm9ubWVudElycmFkaWFu
Y2UucmdiKTtcbiNlbmRpZlxuI2VuZGlmXG5cbmVudmlyb25tZW50UmFkaWFuY2UucmdiKj12UmVm
bGVjdGlvbkluZm9zLng7XG5lbnZpcm9ubWVudFJhZGlhbmNlLnJnYio9dlJlZmxlY3Rpb25Db2xv
ci5yZ2I7XG5lbnZpcm9ubWVudElycmFkaWFuY2UqPXZSZWZsZWN0aW9uQ29sb3IucmdiO1xuI2Vu
ZGlmXG5cbmZsb2F0IHJlZmxlY3RhbmNlPW1heChtYXgoc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9y
LnIsc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yLmcpLHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci5i
KTtcbmZsb2F0IHJlZmxlY3RhbmNlOTA9ZnJlc25lbEdyYXppbmdSZWZsZWN0YW5jZShyZWZsZWN0
YW5jZSk7XG52ZWMzIHNwZWN1bGFyRW52aXJvbm1lbnRSMD1zdXJmYWNlUmVmbGVjdGl2aXR5Q29s
b3IucmdiO1xudmVjMyBzcGVjdWxhckVudmlyb25tZW50UjkwPXZlYzMoMS4wLDEuMCwxLjApKnJl
ZmxlY3RhbmNlOTA7XG5cbiNpZmRlZiBTSEVFTlxuZmxvYXQgc2hlZW5JbnRlbnNpdHk9dlNoZWVu
Q29sb3IuYTtcbiNpZmRlZiBTSEVFTl9URVhUVVJFXG52ZWM0IHNoZWVuTWFwRGF0YT10ZXh0dXJl
MkQoc2hlZW5TYW1wbGVyLHZTaGVlblVWK3V2T2Zmc2V0KSp2U2hlZW5JbmZvcy55O1xuc2hlZW5J
bnRlbnNpdHkqPXNoZWVuTWFwRGF0YS5hO1xuI2VuZGlmXG4jaWZkZWYgU0hFRU5fTElOS1dJVEhB
TEJFRE9cbmZsb2F0IHNoZWVuRmFjdG9yPXBvdzUoMS4wLXNoZWVuSW50ZW5zaXR5KTtcbnZlYzMg
c2hlZW5Db2xvcj1iYXNlQ29sb3IucmdiKigxLjAtc2hlZW5GYWN0b3IpO1xuZmxvYXQgc2hlZW5S
b3VnaG5lc3M9c2hlZW5JbnRlbnNpdHk7XG5cbnN1cmZhY2VBbGJlZG8ucmdiKj1zaGVlbkZhY3Rv
cjtcbiNlbHNlXG52ZWMzIHNoZWVuQ29sb3I9dlNoZWVuQ29sb3IucmdiO1xuI2lmZGVmIFNIRUVO
X1RFWFRVUkVcbnNoZWVuQ29sb3IucmdiKj10b0xpbmVhclNwYWNlKHNoZWVuTWFwRGF0YS5yZ2Ip
O1xuI2VuZGlmXG5mbG9hdCBzaGVlblJvdWdobmVzcz1yb3VnaG5lc3M7XG5cbnNoZWVuSW50ZW5z
aXR5Kj0oMS4tcmVmbGVjdGFuY2UpO1xuXG5zaGVlbkNvbG9yKj1zaGVlbkludGVuc2l0eTtcbiNl
bmRpZlxuXG4jaWYgZGVmaW5lZChSRUZMRUNUSU9OKVxuZmxvYXQgc2hlZW5BbHBoYUc9Y29udmVy
dFJvdWdobmVzc1RvQXZlcmFnZVNsb3BlKHNoZWVuUm91Z2huZXNzKTtcbiNpZmRlZiBTUEVDVUxB
UkFBXG5cbnNoZWVuQWxwaGFHKz1BQVJvdWdobmVzc0ZhY3RvcnMueTtcbiNlbmRpZlxudmVjNCBl
bnZpcm9ubWVudFNoZWVuUmFkaWFuY2U9dmVjNCgwLiwwLiwwLiwwLik7XG5cbiNpZiBkZWZpbmVk
KExPRElOUkVGTEVDVElPTkFMUEhBKSAmJiAhZGVmaW5lZChSRUZMRUNUSU9OTUFQX1NLWUJPWClc
bmZsb2F0IHNoZWVuUmVmbGVjdGlvbkxPRD1nZXRMb2RGcm9tQWxwaGFHKHZSZWZsZWN0aW9uTWlj
cm9zdXJmYWNlSW5mb3MueCxzaGVlbkFscGhhRyxOZG90VlVuY2xhbXBlZCk7XG4jZWxpZiBkZWZp
bmVkKExJTkVBUlNQRUNVTEFSUkVGTEVDVElPTilcbmZsb2F0IHNoZWVuUmVmbGVjdGlvbkxPRD1n
ZXRMaW5lYXJMb2RGcm9tUm91Z2huZXNzKHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueCxz
aGVlblJvdWdobmVzcyk7XG4jZWxzZVxuZmxvYXQgc2hlZW5SZWZsZWN0aW9uTE9EPWdldExvZEZy
b21BbHBoYUcodlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54LHNoZWVuQWxwaGFHKTtcbiNl
bmRpZlxuI2lmZGVmIExPREJBU0VETUlDUk9TRlVSQUNFXG5cbnNoZWVuUmVmbGVjdGlvbkxPRD1z
aGVlblJlZmxlY3Rpb25MT0QqdlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy55K3ZSZWZsZWN0
aW9uTWljcm9zdXJmYWNlSW5mb3MuejtcbmVudmlyb25tZW50U2hlZW5SYWRpYW5jZT1zYW1wbGVS
ZWZsZWN0aW9uTG9kKHJlZmxlY3Rpb25TYW1wbGVyLHJlZmxlY3Rpb25Db29yZHMsc2hlZW5SZWZs
ZWN0aW9uTE9EKTtcbiNlbHNlXG5mbG9hdCBsb2RTaGVlblJlZmxlY3Rpb25Ob3JtYWxpemVkPXNh
dHVyYXRlKHNoZWVuUmVmbGVjdGlvbkxPRC9sb2cyKHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5m
b3MueCkpO1xuZmxvYXQgbG9kU2hlZW5SZWZsZWN0aW9uTm9ybWFsaXplZERvdWJsZWQ9bG9kU2hl
ZW5SZWZsZWN0aW9uTm9ybWFsaXplZCoyLjA7XG52ZWM0IGVudmlyb25tZW50U2hlZW5NaWQ9c2Ft
cGxlUmVmbGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlcixyZWZsZWN0aW9uQ29vcmRzKTtcbmlmKGxv
ZFNoZWVuUmVmbGVjdGlvbk5vcm1hbGl6ZWREb3VibGVkPDEuMCl7XG5lbnZpcm9ubWVudFNoZWVu
UmFkaWFuY2U9bWl4KFxuc2FtcGxlUmVmbGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlckhpZ2gscmVm
bGVjdGlvbkNvb3JkcyksXG5lbnZpcm9ubWVudFNoZWVuTWlkLFxubG9kU2hlZW5SZWZsZWN0aW9u
Tm9ybWFsaXplZERvdWJsZWRcbik7XG59ZWxzZXtcbmVudmlyb25tZW50U2hlZW5SYWRpYW5jZT1t
aXgoXG5lbnZpcm9ubWVudFNoZWVuTWlkLFxuc2FtcGxlUmVmbGVjdGlvbihyZWZsZWN0aW9uU2Ft
cGxlckxvdyxyZWZsZWN0aW9uQ29vcmRzKSxcbmxvZFNoZWVuUmVmbGVjdGlvbk5vcm1hbGl6ZWRE
b3VibGVkLTEuMFxuKTtcbn1cbiNlbmRpZlxuI2lmZGVmIFJHQkRSRUZMRUNUSU9OXG5lbnZpcm9u
bWVudFNoZWVuUmFkaWFuY2UucmdiPWZyb21SR0JEKGVudmlyb25tZW50U2hlZW5SYWRpYW5jZSk7
XG4jZW5kaWZcbiNpZmRlZiBHQU1NQVJFRkxFQ1RJT05cbmVudmlyb25tZW50U2hlZW5SYWRpYW5j
ZS5yZ2I9dG9MaW5lYXJTcGFjZShlbnZpcm9ubWVudFNoZWVuUmFkaWFuY2UucmdiKTtcbiNlbmRp
ZlxuXG5lbnZpcm9ubWVudFNoZWVuUmFkaWFuY2UucmdiKj12UmVmbGVjdGlvbkluZm9zLng7XG5l
bnZpcm9ubWVudFNoZWVuUmFkaWFuY2UucmdiKj12UmVmbGVjdGlvbkNvbG9yLnJnYjtcbiNlbmRp
ZlxuI2VuZGlmXG5cbiNpZmRlZiBDTEVBUkNPQVRcblxuZmxvYXQgY2xlYXJDb2F0SW50ZW5zaXR5
PXZDbGVhckNvYXRQYXJhbXMueDtcbmZsb2F0IGNsZWFyQ29hdFJvdWdobmVzcz12Q2xlYXJDb2F0
UGFyYW1zLnk7XG4jaWZkZWYgQ0xFQVJDT0FUX1RFWFRVUkVcbnZlYzIgY2xlYXJDb2F0TWFwRGF0
YT10ZXh0dXJlMkQoY2xlYXJDb2F0U2FtcGxlcix2Q2xlYXJDb2F0VVYrdXZPZmZzZXQpLnJnKnZD
bGVhckNvYXRJbmZvcy55O1xuY2xlYXJDb2F0SW50ZW5zaXR5Kj1jbGVhckNvYXRNYXBEYXRhLng7
XG5jbGVhckNvYXRSb3VnaG5lc3MqPWNsZWFyQ29hdE1hcERhdGEueTtcbiNlbmRpZlxuI2lmZGVm
IENMRUFSQ09BVF9USU5UXG52ZWMzIGNsZWFyQ29hdENvbG9yPXZDbGVhckNvYXRUaW50UGFyYW1z
LnJnYjtcbmZsb2F0IGNsZWFyQ29hdFRoaWNrbmVzcz12Q2xlYXJDb2F0VGludFBhcmFtcy5hO1xu
I2lmZGVmIENMRUFSQ09BVF9USU5UX1RFWFRVUkVcbnZlYzQgY2xlYXJDb2F0VGludE1hcERhdGE9
dGV4dHVyZTJEKGNsZWFyQ29hdFRpbnRTYW1wbGVyLHZDbGVhckNvYXRUaW50VVYrdXZPZmZzZXQp
O1xuY2xlYXJDb2F0Q29sb3IqPXRvTGluZWFyU3BhY2UoY2xlYXJDb2F0VGludE1hcERhdGEucmdi
KTtcbmNsZWFyQ29hdFRoaWNrbmVzcyo9Y2xlYXJDb2F0VGludE1hcERhdGEuYTtcbiNlbmRpZlxu
Y2xlYXJDb2F0Q29sb3I9Y29tcHV0ZUNvbG9yQXREaXN0YW5jZUluTWVkaWEoY2xlYXJDb2F0Q29s
b3IsY2xlYXJDb2F0Q29sb3JBdERpc3RhbmNlKTtcbiNlbmRpZlxuXG5cblxuXG52ZWMzIHNwZWN1
bGFyRW52aXJvbm1lbnRSMFVwZGF0ZWQ9Z2V0UjBSZW1hcHBlZEZvckNsZWFyQ29hdChzcGVjdWxh
ckVudmlyb25tZW50UjApO1xuc3BlY3VsYXJFbnZpcm9ubWVudFIwPW1peChzcGVjdWxhckVudmly
b25tZW50UjAsc3BlY3VsYXJFbnZpcm9ubWVudFIwVXBkYXRlZCxjbGVhckNvYXRJbnRlbnNpdHkp
O1xuI2lmZGVmIENMRUFSQ09BVF9CVU1QXG4jaWZkZWYgTk9STUFMWFlTQ0FMRVxuZmxvYXQgY2xl
YXJDb2F0Tm9ybWFsU2NhbGU9MS4wO1xuI2Vsc2VcbmZsb2F0IGNsZWFyQ29hdE5vcm1hbFNjYWxl
PXZDbGVhckNvYXRCdW1wSW5mb3MueTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoVEFOR0VOVCkgJiYg
ZGVmaW5lZChOT1JNQUwpXG5tYXQzIFRCTkNsZWFyQ29hdD12VEJOO1xuI2Vsc2Vcbm1hdDMgVEJO
Q2xlYXJDb2F0PWNvdGFuZ2VudF9mcmFtZShjbGVhckNvYXROb3JtYWxXKmNsZWFyQ29hdE5vcm1h
bFNjYWxlLHZQb3NpdGlvblcsdkNsZWFyQ29hdEJ1bXBVVix2Q2xlYXJDb2F0VGFuZ2VudFNwYWNl
UGFyYW1zKTtcbiNlbmRpZlxuI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuY2xlYXJDb2F0
Tm9ybWFsVz1ub3JtYWxpemUodGV4dHVyZTJEKGNsZWFyQ29hdEJ1bXBTYW1wbGVyLHZDbGVhckNv
YXRCdW1wVVYrdXZPZmZzZXQpLnh5eioyLjAtMS4wKTtcbmNsZWFyQ29hdE5vcm1hbFc9bm9ybWFs
aXplKG1hdDMobm9ybWFsTWF0cml4KSpjbGVhckNvYXROb3JtYWxXKTtcbiNlbHNlXG5jbGVhckNv
YXROb3JtYWxXPXBlcnR1cmJOb3JtYWwoVEJOLHRleHR1cmUyRChjbGVhckNvYXRCdW1wU2FtcGxl
cix2Q2xlYXJDb2F0QnVtcFVWK3V2T2Zmc2V0KS54eXosdkNsZWFyQ29hdEJ1bXBJbmZvcy55KTtc
biNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZChGT1JDRU5PUk1BTEZPUldBUkQpICYmIGRlZmlu
ZWQoTk9STUFMKVxuY2xlYXJDb2F0Tm9ybWFsVyo9c2lnbihkb3QoY2xlYXJDb2F0Tm9ybWFsVyxm
YWNlTm9ybWFsKSk7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKFRXT1NJREVETElHSFRJTkcpICYmIGRl
ZmluZWQoTk9STUFMKVxuY2xlYXJDb2F0Tm9ybWFsVz1nbF9Gcm9udEZhY2luZyA/IGNsZWFyQ29h
dE5vcm1hbFcgOiAtY2xlYXJDb2F0Tm9ybWFsVztcbiNlbmRpZlxuXG52ZWMyIGNsZWFyQ29hdEFB
Um91Z2huZXNzRmFjdG9ycz1nZXRBQVJvdWdobmVzc0ZhY3RvcnMoY2xlYXJDb2F0Tm9ybWFsVy54
eXopO1xuXG5mbG9hdCBjbGVhckNvYXROZG90VlVuY2xhbXBlZD1kb3QoY2xlYXJDb2F0Tm9ybWFs
Vyx2aWV3RGlyZWN0aW9uVyk7XG5cbmZsb2F0IGNsZWFyQ29hdE5kb3RWPWFic0VwcyhjbGVhckNv
YXROZG90VlVuY2xhbXBlZCk7XG5cbiNpZiBkZWZpbmVkKFJFRkxFQ1RJT04pXG5mbG9hdCBjbGVh
ckNvYXRBbHBoYUc9Y29udmVydFJvdWdobmVzc1RvQXZlcmFnZVNsb3BlKGNsZWFyQ29hdFJvdWdo
bmVzcyk7XG4jaWZkZWYgU1BFQ1VMQVJBQVxuXG5jbGVhckNvYXRBbHBoYUcrPWNsZWFyQ29hdEFB
Um91Z2huZXNzRmFjdG9ycy55O1xuI2VuZGlmXG52ZWM0IGVudmlyb25tZW50Q2xlYXJDb2F0UmFk
aWFuY2U9dmVjNCgwLiwwLiwwLiwwLik7XG52ZWMzIGNsZWFyQ29hdFJlZmxlY3Rpb25WZWN0b3I9
Y29tcHV0ZVJlZmxlY3Rpb25Db29yZHModmVjNCh2UG9zaXRpb25XLDEuMCksY2xlYXJDb2F0Tm9y
bWFsVyk7XG4jaWZkZWYgUkVGTEVDVElPTk1BUF9PUFBPU0lURVpcbmNsZWFyQ29hdFJlZmxlY3Rp
b25WZWN0b3Iueio9LTEuMDtcbiNlbmRpZlxuXG4jaWZkZWYgUkVGTEVDVElPTk1BUF8zRFxudmVj
MyBjbGVhckNvYXRSZWZsZWN0aW9uQ29vcmRzPWNsZWFyQ29hdFJlZmxlY3Rpb25WZWN0b3I7XG4j
ZWxzZVxudmVjMiBjbGVhckNvYXRSZWZsZWN0aW9uQ29vcmRzPWNsZWFyQ29hdFJlZmxlY3Rpb25W
ZWN0b3IueHk7XG4jaWZkZWYgUkVGTEVDVElPTk1BUF9QUk9KRUNUSU9OXG5jbGVhckNvYXRSZWZs
ZWN0aW9uQ29vcmRzLz1jbGVhckNvYXRSZWZsZWN0aW9uVmVjdG9yLno7XG4jZW5kaWZcbmNsZWFy
Q29hdFJlZmxlY3Rpb25Db29yZHMueT0xLjAtY2xlYXJDb2F0UmVmbGVjdGlvbkNvb3Jkcy55O1xu
I2VuZGlmXG4jaWYgZGVmaW5lZChMT0RJTlJFRkxFQ1RJT05BTFBIQSkgJiYgIWRlZmluZWQoUkVG
TEVDVElPTk1BUF9TS1lCT1gpXG5mbG9hdCBjbGVhckNvYXRSZWZsZWN0aW9uTE9EPWdldExvZEZy
b21BbHBoYUcodlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54LGNsZWFyQ29hdEFscGhhRyxj
bGVhckNvYXROZG90VlVuY2xhbXBlZCk7XG4jZWxpZiBkZWZpbmVkKExJTkVBUlNQRUNVTEFSUkVG
TEVDVElPTilcbmZsb2F0IHNoZWVuUmVmbGVjdGlvbkxPRD1nZXRMaW5lYXJMb2RGcm9tUm91Z2hu
ZXNzKHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueCxjbGVhckNvYXRSb3VnaG5lc3MpO1xu
I2Vsc2VcbmZsb2F0IGNsZWFyQ29hdFJlZmxlY3Rpb25MT0Q9Z2V0TG9kRnJvbUFscGhhRyh2UmVm
bGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLngsY2xlYXJDb2F0QWxwaGFHKTtcbiNlbmRpZlxuI2lm
ZGVmIExPREJBU0VETUlDUk9TRlVSQUNFXG5cbmNsZWFyQ29hdFJlZmxlY3Rpb25MT0Q9Y2xlYXJD
b2F0UmVmbGVjdGlvbkxPRCp2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLnkrdlJlZmxlY3Rp
b25NaWNyb3N1cmZhY2VJbmZvcy56O1xuZmxvYXQgcmVxdWVzdGVkQ2xlYXJDb2F0UmVmbGVjdGlv
bkxPRD1jbGVhckNvYXRSZWZsZWN0aW9uTE9EO1xuZW52aXJvbm1lbnRDbGVhckNvYXRSYWRpYW5j
ZT1zYW1wbGVSZWZsZWN0aW9uTG9kKHJlZmxlY3Rpb25TYW1wbGVyLGNsZWFyQ29hdFJlZmxlY3Rp
b25Db29yZHMscmVxdWVzdGVkQ2xlYXJDb2F0UmVmbGVjdGlvbkxPRCk7XG4jZWxzZVxuZmxvYXQg
bG9kQ2xlYXJDb2F0UmVmbGVjdGlvbk5vcm1hbGl6ZWQ9c2F0dXJhdGUoY2xlYXJDb2F0UmVmbGVj
dGlvbkxPRC9sb2cyKHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueCkpO1xuZmxvYXQgbG9k
Q2xlYXJDb2F0UmVmbGVjdGlvbk5vcm1hbGl6ZWREb3VibGVkPWxvZENsZWFyQ29hdFJlZmxlY3Rp
b25Ob3JtYWxpemVkKjIuMDtcbnZlYzQgZW52aXJvbm1lbnRDbGVhckNvYXRNaWQ9c2FtcGxlUmVm
bGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlcixyZWZsZWN0aW9uQ29vcmRzKTtcbmlmKGxvZENsZWFy
Q29hdFJlZmxlY3Rpb25Ob3JtYWxpemVkRG91YmxlZDwxLjApe1xuZW52aXJvbm1lbnRDbGVhckNv
YXRSYWRpYW5jZT1taXgoXG5zYW1wbGVSZWZsZWN0aW9uKHJlZmxlY3Rpb25TYW1wbGVySGlnaCxj
bGVhckNvYXRSZWZsZWN0aW9uQ29vcmRzKSxcbmVudmlyb25tZW50Q2xlYXJDb2F0TWlkLFxubG9k
Q2xlYXJDb2F0UmVmbGVjdGlvbk5vcm1hbGl6ZWREb3VibGVkXG4pO1xufWVsc2V7XG5lbnZpcm9u
bWVudENsZWFyQ29hdFJhZGlhbmNlPW1peChcbmVudmlyb25tZW50Q2xlYXJDb2F0TWlkLFxuc2Ft
cGxlUmVmbGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlckxvdyxjbGVhckNvYXRSZWZsZWN0aW9uQ29v
cmRzKSxcbmxvZENsZWFyQ29hdFJlZmxlY3Rpb25Ob3JtYWxpemVkRG91YmxlZC0xLjBcbik7XG59
XG4jZW5kaWZcbiNpZmRlZiBSR0JEUkVGTEVDVElPTlxuZW52aXJvbm1lbnRDbGVhckNvYXRSYWRp
YW5jZS5yZ2I9ZnJvbVJHQkQoZW52aXJvbm1lbnRDbGVhckNvYXRSYWRpYW5jZSk7XG4jZW5kaWZc
biNpZmRlZiBHQU1NQVJFRkxFQ1RJT05cbmVudmlyb25tZW50Q2xlYXJDb2F0UmFkaWFuY2Uucmdi
PXRvTGluZWFyU3BhY2UoZW52aXJvbm1lbnRDbGVhckNvYXRSYWRpYW5jZS5yZ2IpO1xuI2VuZGlm
XG4jaWZkZWYgQ0xFQVJDT0FUX1RJTlRcblxudmVjMyBjbGVhckNvYXRWUmVmcmFjdD0tcmVmcmFj
dCh2UG9zaXRpb25XLGNsZWFyQ29hdE5vcm1hbFcsdkNsZWFyQ29hdFJlZnJhY3Rpb25QYXJhbXMu
eSk7XG5cbmZsb2F0IGNsZWFyQ29hdE5kb3RWUmVmcmFjdD1hYnNFcHMoZG90KGNsZWFyQ29hdE5v
cm1hbFcsY2xlYXJDb2F0VlJlZnJhY3QpKTtcbnZlYzMgYWJzb3JwdGlvbj12ZWMzKDAuKTtcbiNl
bmRpZlxuXG5lbnZpcm9ubWVudENsZWFyQ29hdFJhZGlhbmNlLnJnYio9dlJlZmxlY3Rpb25JbmZv
cy54O1xuZW52aXJvbm1lbnRDbGVhckNvYXRSYWRpYW5jZS5yZ2IqPXZSZWZsZWN0aW9uQ29sb3Iu
cmdiO1xuI2VuZGlmXG4jZW5kaWZcblxuI2lmIGRlZmluZWQoRU5WSVJPTk1FTlRCUkRGKVxuXG52
ZWMzIGVudmlyb25tZW50QnJkZj1nZXRCUkRGTG9va3VwKE5kb3RWLHJvdWdobmVzcyk7XG4jaWZk
ZWYgTVNfQlJERl9FTkVSR1lfQ09OU0VSVkFUSU9OXG52ZWMzIGVuZXJneUNvbnNlcnZhdGlvbkZh
Y3Rvcj1nZXRFbmVyZ3lDb25zZXJ2YXRpb25GYWN0b3Ioc3BlY3VsYXJFbnZpcm9ubWVudFIwLGVu
dmlyb25tZW50QnJkZik7XG4jZW5kaWZcbiNlbmRpZlxuXG4jaWZkZWYgU1VCU1VSRkFDRVxuI2lm
ZGVmIFNTX1JFRlJBQ1RJT05cbmZsb2F0IHJlZnJhY3Rpb25JbnRlbnNpdHk9dlN1YlN1cmZhY2VJ
bnRlbnNpdHkueDtcbiNpZmRlZiBTU19MSU5LUkVGUkFDVElPTlRPVFJBTlNQQVJFTkNZXG5yZWZy
YWN0aW9uSW50ZW5zaXR5Kj0oMS4wLWFscGhhKTtcblxuYWxwaGE9MS4wO1xuI2VuZGlmXG4jZW5k
aWZcbiNpZmRlZiBTU19UUkFOU0xVQ0VOQ1lcbmZsb2F0IHRyYW5zbHVjZW5jeUludGVuc2l0eT12
U3ViU3VyZmFjZUludGVuc2l0eS55O1xuI2VuZGlmXG4jaWZkZWYgU1NfU0NBVFRFUklOR1xuZmxv
YXQgc2NhdHRlcmluZ0ludGVuc2l0eT12U3ViU3VyZmFjZUludGVuc2l0eS56O1xuI2VuZGlmXG4j
aWZkZWYgU1NfVEhJQ0tORVNTQU5ETUFTS19URVhUVVJFXG52ZWM0IHRoaWNrbmVzc01hcD10ZXh0
dXJlMkQodGhpY2tuZXNzU2FtcGxlcix2VGhpY2tuZXNzVVYrdXZPZmZzZXQpO1xuZmxvYXQgdGhp
Y2tuZXNzPXRoaWNrbmVzc01hcC5yKnZUaGlja25lc3NQYXJhbS55K3ZUaGlja25lc3NQYXJhbS54
O1xuI2lmZGVmIFNTX01BU0tfRlJPTV9USElDS05FU1NfVEVYVFVSRVxuI2lmZGVmIFNTX1JFRlJB
Q1RJT05cbnJlZnJhY3Rpb25JbnRlbnNpdHkqPXRoaWNrbmVzc01hcC5nO1xuI2VuZGlmXG4jaWZk
ZWYgU1NfVFJBTlNMVUNFTkNZXG50cmFuc2x1Y2VuY3lJbnRlbnNpdHkqPXRoaWNrbmVzc01hcC5i
O1xuI2VuZGlmXG4jaWZkZWYgU1NfU0NBVFRFUklOR1xuc2NhdHRlcmluZ0ludGVuc2l0eSo9dGhp
Y2tuZXNzTWFwLmE7XG4jZW5kaWZcbiNlbmRpZlxuI2Vsc2VcbmZsb2F0IHRoaWNrbmVzcz12VGhp
Y2tuZXNzUGFyYW0ueTtcbiNlbmRpZlxuI2lmZGVmIFNTX1RSQU5TTFVDRU5DWVxudGhpY2tuZXNz
PW1heEVwcyh0aGlja25lc3MpO1xudmVjMyB0cmFuc21pdHRhbmNlPXRyYW5zbWl0dGFuY2VCUkRG
X0J1cmxleSh2VGludENvbG9yLnJnYix2RGlmZnVzaW9uRGlzdGFuY2UsdGhpY2tuZXNzKTtcbnRy
YW5zbWl0dGFuY2UqPXRyYW5zbHVjZW5jeUludGVuc2l0eTtcbiNlbmRpZlxuI2VuZGlmXG5cblxu
dmVjMyBkaWZmdXNlQmFzZT12ZWMzKDAuLDAuLDAuKTtcbiNpZmRlZiBTUEVDVUxBUlRFUk1cbnZl
YzMgc3BlY3VsYXJCYXNlPXZlYzMoMC4sMC4sMC4pO1xuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FU
XG52ZWMzIGNsZWFyQ29hdEJhc2U9dmVjMygwLiwwLiwwLik7XG4jZW5kaWZcbiNpZmRlZiBTSEVF
TlxudmVjMyBzaGVlbkJhc2U9dmVjMygwLiwwLiwwLik7XG4jZW5kaWZcbiNpZmRlZiBMSUdIVE1B
UFxudmVjNCBsaWdodG1hcENvbG9yPXRleHR1cmUyRChsaWdodG1hcFNhbXBsZXIsdkxpZ2h0bWFw
VVYrdXZPZmZzZXQpO1xuI2lmZGVmIFJHQkRMSUdIVE1BUFxubGlnaHRtYXBDb2xvci5yZ2I9ZnJv
bVJHQkQobGlnaHRtYXBDb2xvcik7XG4jZW5kaWZcbiNpZmRlZiBHQU1NQUxJR0hUTUFQXG5saWdo
dG1hcENvbG9yLnJnYj10b0xpbmVhclNwYWNlKGxpZ2h0bWFwQ29sb3IucmdiKTtcbiNlbmRpZlxu
bGlnaHRtYXBDb2xvci5yZ2IqPXZMaWdodG1hcEluZm9zLnk7XG4jZW5kaWZcblxucHJlTGlnaHRp
bmdJbmZvIHByZUluZm87XG5saWdodGluZ0luZm8gaW5mbztcbmZsb2F0IHNoYWRvdz0xLjtcbiNp
bmNsdWRlPGxpZ2h0RnJhZ21lbnQ+WzAuLm1heFNpbXVsdGFuZW91c0xpZ2h0c11cblxuI2lmIGRl
ZmluZWQoRU5WSVJPTk1FTlRCUkRGKSAmJiAhZGVmaW5lZChSRUZMRUNUSU9OTUFQX1NLWUJPWClc
bnZlYzMgc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3RhbmNlPWdldFJlZmxlY3RhbmNlRnJvbUJS
REZMb29rdXAoc3BlY3VsYXJFbnZpcm9ubWVudFIwLGVudmlyb25tZW50QnJkZik7XG4jaWZkZWYg
UkFESUFOQ0VPQ0NMVVNJT05cbiNpZmRlZiBBTUJJRU5USU5HUkFZU0NBTEVcbmZsb2F0IGFtYmll
bnRNb25vY2hyb21lPWFtYmllbnRPY2NsdXNpb25Db2xvci5yO1xuI2Vsc2VcbmZsb2F0IGFtYmll
bnRNb25vY2hyb21lPWdldEx1bWluYW5jZShhbWJpZW50T2NjbHVzaW9uQ29sb3IpO1xuI2VuZGlm
XG5mbG9hdCBzZW89ZW52aXJvbm1lbnRSYWRpYW5jZU9jY2x1c2lvbihhbWJpZW50TW9ub2Nocm9t
ZSxOZG90VlVuY2xhbXBlZCk7XG5zcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2UqPXNlbztc
biNlbmRpZlxuI2lmZGVmIEhPUklaT05PQ0NMVVNJT05cbiNpZmRlZiBCVU1QXG4jaWZkZWYgUkVG
TEVDVElPTk1BUF8zRFxuZmxvYXQgZWhvPWVudmlyb25tZW50SG9yaXpvbk9jY2x1c2lvbigtdmll
d0RpcmVjdGlvblcsbm9ybWFsVyk7XG5zcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2UqPWVo
bztcbiNlbmRpZlxuI2VuZGlmXG4jZW5kaWZcbiNlbHNlXG5cbnZlYzMgc3BlY3VsYXJFbnZpcm9u
bWVudFJlZmxlY3RhbmNlPWdldFJlZmxlY3RhbmNlRnJvbUFuYWx5dGljYWxCUkRGTG9va3VwX0pv
bmVzKE5kb3RWLHNwZWN1bGFyRW52aXJvbm1lbnRSMCxzcGVjdWxhckVudmlyb25tZW50UjkwLHNx
cnQobWljcm9TdXJmYWNlKSk7XG4jZW5kaWZcblxuI2lmIGRlZmluZWQoU0hFRU4pICYmIGRlZmlu
ZWQoUkVGTEVDVElPTilcbnZlYzMgc2hlZW5FbnZpcm9ubWVudFJlZmxlY3RhbmNlPWdldFNoZWVu
UmVmbGVjdGFuY2VGcm9tQlJERkxvb2t1cChzaGVlbkNvbG9yLGVudmlyb25tZW50QnJkZik7XG4j
aWZkZWYgUkFESUFOQ0VPQ0NMVVNJT05cbnNoZWVuRW52aXJvbm1lbnRSZWZsZWN0YW5jZSo9c2Vv
O1xuI2VuZGlmXG4jaWZkZWYgSE9SSVpPTk9DQ0xVU0lPTlxuI2lmZGVmIEJVTVBcbiNpZmRlZiBS
RUZMRUNUSU9OTUFQXzNEXG5zaGVlbkVudmlyb25tZW50UmVmbGVjdGFuY2UqPWVobztcbiNlbmRp
ZlxuI2VuZGlmXG4jZW5kaWZcbiNlbmRpZlxuXG4jaWZkZWYgQ0xFQVJDT0FUXG4jaWYgZGVmaW5l
ZChFTlZJUk9OTUVOVEJSREYpICYmICFkZWZpbmVkKFJFRkxFQ1RJT05NQVBfU0tZQk9YKVxuXG52
ZWMzIGVudmlyb25tZW50Q2xlYXJDb2F0QnJkZj1nZXRCUkRGTG9va3VwKGNsZWFyQ29hdE5kb3RW
LGNsZWFyQ29hdFJvdWdobmVzcyk7XG52ZWMzIGNsZWFyQ29hdEVudmlyb25tZW50UmVmbGVjdGFu
Y2U9Z2V0UmVmbGVjdGFuY2VGcm9tQlJERkxvb2t1cCh2ZWMzKHZDbGVhckNvYXRSZWZyYWN0aW9u
UGFyYW1zLngpLGVudmlyb25tZW50Q2xlYXJDb2F0QnJkZik7XG4jaWZkZWYgUkFESUFOQ0VPQ0NM
VVNJT05cbmZsb2F0IGNsZWFyQ29hdFNlbz1lbnZpcm9ubWVudFJhZGlhbmNlT2NjbHVzaW9uKGFt
YmllbnRNb25vY2hyb21lLGNsZWFyQ29hdE5kb3RWVW5jbGFtcGVkKTtcbmNsZWFyQ29hdEVudmly
b25tZW50UmVmbGVjdGFuY2UqPWNsZWFyQ29hdFNlbztcbiNlbmRpZlxuI2lmZGVmIEhPUklaT05P
Q0NMVVNJT05cbiNpZmRlZiBCVU1QXG4jaWZkZWYgUkVGTEVDVElPTk1BUF8zRFxuZmxvYXQgY2xl
YXJDb2F0RWhvPWVudmlyb25tZW50SG9yaXpvbk9jY2x1c2lvbigtdmlld0RpcmVjdGlvblcsY2xl
YXJDb2F0Tm9ybWFsVyk7XG5jbGVhckNvYXRFbnZpcm9ubWVudFJlZmxlY3RhbmNlKj1jbGVhckNv
YXRFaG87XG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlmXG4jZWxzZVxuXG52ZWMzIGNsZWFyQ29hdEVu
dmlyb25tZW50UmVmbGVjdGFuY2U9Z2V0UmVmbGVjdGFuY2VGcm9tQW5hbHl0aWNhbEJSREZMb29r
dXBfSm9uZXMoY2xlYXJDb2F0TmRvdFYsdmVjMygxLiksdmVjMygxLiksc3FydCgxLi1jbGVhckNv
YXRSb3VnaG5lc3MpKTtcbiNlbmRpZlxuY2xlYXJDb2F0RW52aXJvbm1lbnRSZWZsZWN0YW5jZSo9
Y2xlYXJDb2F0SW50ZW5zaXR5O1xuI2lmIGRlZmluZWQoUkVGTEVDVElPTikgJiYgZGVmaW5lZChD
TEVBUkNPQVRfVElOVClcblxuYWJzb3JwdGlvbj1jb21wdXRlQ2xlYXJDb2F0QWJzb3JwdGlvbihj
bGVhckNvYXROZG90VlJlZnJhY3QsY2xlYXJDb2F0TmRvdFZSZWZyYWN0LGNsZWFyQ29hdENvbG9y
LGNsZWFyQ29hdFRoaWNrbmVzcyxjbGVhckNvYXRJbnRlbnNpdHkpO1xuI2lmZGVmIFJFRkxFQ1RJ
T05cbmVudmlyb25tZW50SXJyYWRpYW5jZSo9YWJzb3JwdGlvbjtcbiNlbmRpZlxuI2lmZGVmIFNI
RUVOXG5zaGVlbkVudmlyb25tZW50UmVmbGVjdGFuY2UqPWFic29ycHRpb247XG4jZW5kaWZcbnNw
ZWN1bGFyRW52aXJvbm1lbnRSZWZsZWN0YW5jZSo9YWJzb3JwdGlvbjtcbiNlbmRpZlxuXG5mbG9h
dCBmcmVzbmVsSUJMQ2xlYXJDb2F0PWZyZXNuZWxTY2hsaWNrR0dYKGNsZWFyQ29hdE5kb3RWLHZD
bGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zLngsQ0xFQVJDT0FUUkVGTEVDVEFOQ0U5MCk7XG5mcmVz
bmVsSUJMQ2xlYXJDb2F0Kj1jbGVhckNvYXRJbnRlbnNpdHk7XG5mbG9hdCBjb25zZXJ2YXRpb25G
YWN0b3I9KDEuLWZyZXNuZWxJQkxDbGVhckNvYXQpO1xuI2lmZGVmIFJFRkxFQ1RJT05cbmVudmly
b25tZW50SXJyYWRpYW5jZSo9Y29uc2VydmF0aW9uRmFjdG9yO1xuI2VuZGlmXG4jaWZkZWYgU0hF
RU5cbnNoZWVuRW52aXJvbm1lbnRSZWZsZWN0YW5jZSo9KGNvbnNlcnZhdGlvbkZhY3Rvcipjb25z
ZXJ2YXRpb25GYWN0b3IpO1xuI2VuZGlmXG5zcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2Uq
PShjb25zZXJ2YXRpb25GYWN0b3IqY29uc2VydmF0aW9uRmFjdG9yKTtcbiNlbmRpZlxuXG4jaWZk
ZWYgU1NfUkVGUkFDVElPTlxudmVjMyByZWZyYWN0aW9uVHJhbnNtaXR0YW5jZT12ZWMzKHJlZnJh
Y3Rpb25JbnRlbnNpdHkpO1xuI2lmZGVmIFNTX1RISUNLTkVTU0FORE1BU0tfVEVYVFVSRVxudmVj
MyB2b2x1bWVBbGJlZG89Y29tcHV0ZUNvbG9yQXREaXN0YW5jZUluTWVkaWEodlRpbnRDb2xvci5y
Z2IsdlRpbnRDb2xvci53KTtcblxuXG5cblxuXG5yZWZyYWN0aW9uVHJhbnNtaXR0YW5jZSo9Y29j
YUxhbWJlcnQodm9sdW1lQWxiZWRvLHRoaWNrbmVzcyk7XG4jZWxpZiBkZWZpbmVkKFNTX0xJTktS
RUZSQUNUSU9OVE9UUkFOU1BBUkVOQ1kpXG5cbmZsb2F0IG1heENoYW5uZWw9bWF4KG1heChzdXJm
YWNlQWxiZWRvLnIsc3VyZmFjZUFsYmVkby5nKSxzdXJmYWNlQWxiZWRvLmIpO1xudmVjMyB2b2x1
bWVBbGJlZG89c2F0dXJhdGUobWF4Q2hhbm5lbCpzdXJmYWNlQWxiZWRvKTtcblxuZW52aXJvbm1l
bnRSZWZyYWN0aW9uLnJnYio9dm9sdW1lQWxiZWRvO1xuI2Vsc2VcblxudmVjMyB2b2x1bWVBbGJl
ZG89Y29tcHV0ZUNvbG9yQXREaXN0YW5jZUluTWVkaWEodlRpbnRDb2xvci5yZ2IsdlRpbnRDb2xv
ci53KTtcbnJlZnJhY3Rpb25UcmFuc21pdHRhbmNlKj1jb2NhTGFtYmVydCh2b2x1bWVBbGJlZG8s
dlRoaWNrbmVzc1BhcmFtLnkpO1xuI2VuZGlmXG5cbnN1cmZhY2VBbGJlZG8qPSgxLi1yZWZyYWN0
aW9uSW50ZW5zaXR5KTtcbiNpZmRlZiBSRUZMRUNUSU9OXG5cbmVudmlyb25tZW50SXJyYWRpYW5j
ZSo9KDEuLXJlZnJhY3Rpb25JbnRlbnNpdHkpO1xuI2VuZGlmXG5cbnZlYzMgYm91bmNlU3BlY3Vs
YXJFbnZpcm9ubWVudFJlZmxlY3RhbmNlPSgyLjAqc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3Rh
bmNlKS8oMS4wK3NwZWN1bGFyRW52aXJvbm1lbnRSZWZsZWN0YW5jZSk7XG5zcGVjdWxhckVudmly
b25tZW50UmVmbGVjdGFuY2U9bWl4KGJvdW5jZVNwZWN1bGFyRW52aXJvbm1lbnRSZWZsZWN0YW5j
ZSxzcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2UscmVmcmFjdGlvbkludGVuc2l0eSk7XG5c
bnJlZnJhY3Rpb25UcmFuc21pdHRhbmNlKj0xLjAtc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3Rh
bmNlO1xuI2VuZGlmXG5cbiNpZiBkZWZpbmVkKFJFRkxFQ1RJT04pICYmIGRlZmluZWQoU1NfVFJB
TlNMVUNFTkNZKVxuI2lmIGRlZmluZWQoVVNFU1BIRVJJQ0FMSU5WRVJURVgpXG52ZWMzIGlycmFk
aWFuY2VWZWN0b3I9dmVjMyhyZWZsZWN0aW9uTWF0cml4KnZlYzQobm9ybWFsVywwKSkueHl6O1xu
I2lmZGVmIFJFRkxFQ1RJT05NQVBfT1BQT1NJVEVaXG5pcnJhZGlhbmNlVmVjdG9yLnoqPS0xLjA7
XG4jZW5kaWZcbiNlbmRpZlxuI2lmIGRlZmluZWQoVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05N
QVApXG52ZWMzIHJlZnJhY3Rpb25JcnJhZGlhbmNlPWNvbXB1dGVFbnZpcm9ubWVudElycmFkaWFu
Y2UoLWlycmFkaWFuY2VWZWN0b3IpO1xuI2VsaWYgZGVmaW5lZChVU0VJUlJBRElBTkNFTUFQKVxu
dmVjMyByZWZyYWN0aW9uSXJyYWRpYW5jZT1zYW1wbGVSZWZsZWN0aW9uKGlycmFkaWFuY2VTYW1w
bGVyLC1pcnJhZGlhbmNlVmVjdG9yKS5yZ2I7XG4jaWZkZWYgUkdCRFJFRkxFQ1RJT05cbnJlZnJh
Y3Rpb25JcnJhZGlhbmNlLnJnYj1mcm9tUkdCRChyZWZyYWN0aW9uSXJyYWRpYW5jZSk7XG4jZW5k
aWZcbiNpZmRlZiBHQU1NQVJFRkxFQ1RJT05cbnJlZnJhY3Rpb25JcnJhZGlhbmNlLnJnYj10b0xp
bmVhclNwYWNlKHJlZnJhY3Rpb25JcnJhZGlhbmNlLnJnYik7XG4jZW5kaWZcbiNlbHNlXG52ZWMz
IHJlZnJhY3Rpb25JcnJhZGlhbmNlPXZlYzMoMC4pO1xuI2VuZGlmXG5yZWZyYWN0aW9uSXJyYWRp
YW5jZSo9dHJhbnNtaXR0YW5jZTtcbiNlbmRpZlxuXG5cblxuI2lmbmRlZiBNRVRBTExJQ1dPUktG
TE9XXG5zdXJmYWNlQWxiZWRvLnJnYj0oMS4tcmVmbGVjdGFuY2UpKnN1cmZhY2VBbGJlZG8ucmdi
O1xuI2VuZGlmXG5cbiNpZmRlZiBSRUZMRUNUSU9OXG52ZWMzIGZpbmFsSXJyYWRpYW5jZT1lbnZp
cm9ubWVudElycmFkaWFuY2U7XG4jaWYgZGVmaW5lZChTU19UUkFOU0xVQ0VOQ1kpXG5maW5hbEly
cmFkaWFuY2UrPXJlZnJhY3Rpb25JcnJhZGlhbmNlO1xuI2VuZGlmXG5maW5hbElycmFkaWFuY2Uq
PXN1cmZhY2VBbGJlZG8ucmdiO1xuI2VuZGlmXG5cbiNpZmRlZiBTUEVDVUxBUlRFUk1cbnZlYzMg
ZmluYWxTcGVjdWxhcj1zcGVjdWxhckJhc2U7XG5maW5hbFNwZWN1bGFyPW1heChmaW5hbFNwZWN1
bGFyLDAuMCk7XG5cbnZlYzMgZmluYWxTcGVjdWxhclNjYWxlZD1maW5hbFNwZWN1bGFyKnZMaWdo
dGluZ0ludGVuc2l0eS54KnZMaWdodGluZ0ludGVuc2l0eS53O1xuI2lmIGRlZmluZWQoRU5WSVJP
Tk1FTlRCUkRGKSAmJiBkZWZpbmVkKE1TX0JSREZfRU5FUkdZX0NPTlNFUlZBVElPTilcbmZpbmFs
U3BlY3VsYXJTY2FsZWQqPWVuZXJneUNvbnNlcnZhdGlvbkZhY3RvcjtcbiNlbmRpZlxuI2VuZGlm
XG5cbiNpZmRlZiBSRUZMRUNUSU9OXG52ZWMzIGZpbmFsUmFkaWFuY2U9ZW52aXJvbm1lbnRSYWRp
YW5jZS5yZ2I7XG5maW5hbFJhZGlhbmNlKj1zcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2U7
XG5cbnZlYzMgZmluYWxSYWRpYW5jZVNjYWxlZD1maW5hbFJhZGlhbmNlKnZMaWdodGluZ0ludGVu
c2l0eS56O1xuI2lmIGRlZmluZWQoRU5WSVJPTk1FTlRCUkRGKSAmJiBkZWZpbmVkKE1TX0JSREZf
RU5FUkdZX0NPTlNFUlZBVElPTilcbmZpbmFsUmFkaWFuY2VTY2FsZWQqPWVuZXJneUNvbnNlcnZh
dGlvbkZhY3RvcjtcbiNlbmRpZlxuI2VuZGlmXG5cbiNpZmRlZiBTU19SRUZSQUNUSU9OXG52ZWMz
IGZpbmFsUmVmcmFjdGlvbj1lbnZpcm9ubWVudFJlZnJhY3Rpb24ucmdiO1xuZmluYWxSZWZyYWN0
aW9uKj1yZWZyYWN0aW9uVHJhbnNtaXR0YW5jZTtcbiNlbmRpZlxuXG4jaWZkZWYgQ0xFQVJDT0FU
XG52ZWMzIGZpbmFsQ2xlYXJDb2F0PWNsZWFyQ29hdEJhc2U7XG5maW5hbENsZWFyQ29hdD1tYXgo
ZmluYWxDbGVhckNvYXQsMC4wKTtcblxudmVjMyBmaW5hbENsZWFyQ29hdFNjYWxlZD1maW5hbENs
ZWFyQ29hdCp2TGlnaHRpbmdJbnRlbnNpdHkueCp2TGlnaHRpbmdJbnRlbnNpdHkudztcbiNpZiBk
ZWZpbmVkKEVOVklST05NRU5UQlJERikgJiYgZGVmaW5lZChNU19CUkRGX0VORVJHWV9DT05TRVJW
QVRJT04pXG5maW5hbENsZWFyQ29hdFNjYWxlZCo9ZW5lcmd5Q29uc2VydmF0aW9uRmFjdG9yO1xu
I2VuZGlmXG5cbiNpZmRlZiBSRUZMRUNUSU9OXG52ZWMzIGZpbmFsQ2xlYXJDb2F0UmFkaWFuY2U9
ZW52aXJvbm1lbnRDbGVhckNvYXRSYWRpYW5jZS5yZ2I7XG5maW5hbENsZWFyQ29hdFJhZGlhbmNl
Kj1jbGVhckNvYXRFbnZpcm9ubWVudFJlZmxlY3RhbmNlO1xuXG52ZWMzIGZpbmFsQ2xlYXJDb2F0
UmFkaWFuY2VTY2FsZWQ9ZmluYWxDbGVhckNvYXRSYWRpYW5jZSp2TGlnaHRpbmdJbnRlbnNpdHku
ejtcbiNlbmRpZlxuI2lmZGVmIFNTX1JFRlJBQ1RJT05cbmZpbmFsUmVmcmFjdGlvbio9KGNvbnNl
cnZhdGlvbkZhY3Rvcipjb25zZXJ2YXRpb25GYWN0b3IpO1xuI2lmZGVmIENMRUFSQ09BVF9USU5U
XG5maW5hbFJlZnJhY3Rpb24qPWFic29ycHRpb247XG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlmXG5c
biNpZmRlZiBTSEVFTlxudmVjMyBmaW5hbFNoZWVuPXNoZWVuQmFzZSpzaGVlbkNvbG9yO1xuZmlu
YWxTaGVlbj1tYXgoZmluYWxTaGVlbiwwLjApO1xudmVjMyBmaW5hbFNoZWVuU2NhbGVkPWZpbmFs
U2hlZW4qdkxpZ2h0aW5nSW50ZW5zaXR5LngqdkxpZ2h0aW5nSW50ZW5zaXR5Lnc7XG5cblxuXG5c
blxuI2lmZGVmIFJFRkxFQ1RJT05cbnZlYzMgZmluYWxTaGVlblJhZGlhbmNlPWVudmlyb25tZW50
U2hlZW5SYWRpYW5jZS5yZ2I7XG5maW5hbFNoZWVuUmFkaWFuY2UqPXNoZWVuRW52aXJvbm1lbnRS
ZWZsZWN0YW5jZTtcblxudmVjMyBmaW5hbFNoZWVuUmFkaWFuY2VTY2FsZWQ9ZmluYWxTaGVlblJh
ZGlhbmNlKnZMaWdodGluZ0ludGVuc2l0eS56O1xuI2VuZGlmXG4jZW5kaWZcblxuI2lmZGVmIEFM
UEhBQkxFTkRcbmZsb2F0IGx1bWluYW5jZU92ZXJBbHBoYT0wLjA7XG4jaWYgZGVmaW5lZChSRUZM
RUNUSU9OKSAmJiBkZWZpbmVkKFJBRElBTkNFT1ZFUkFMUEhBKVxubHVtaW5hbmNlT3ZlckFscGhh
Kz1nZXRMdW1pbmFuY2UoZmluYWxSYWRpYW5jZVNjYWxlZCk7XG4jaWYgZGVmaW5lZChDTEVBUkNP
QVQpXG5sdW1pbmFuY2VPdmVyQWxwaGErPWdldEx1bWluYW5jZShmaW5hbENsZWFyQ29hdFJhZGlh
bmNlU2NhbGVkKTtcbiNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZChTUEVDVUxBUlRFUk0pICYm
IGRlZmluZWQoU1BFQ1VMQVJPVkVSQUxQSEEpXG5sdW1pbmFuY2VPdmVyQWxwaGErPWdldEx1bWlu
YW5jZShmaW5hbFNwZWN1bGFyU2NhbGVkKTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoQ0xFQVJDT0FU
KSAmJiBkZWZpbmVkKENMRUFSQ09BVE9WRVJBTFBIQSlcbmx1bWluYW5jZU92ZXJBbHBoYSs9Z2V0
THVtaW5hbmNlKGZpbmFsQ2xlYXJDb2F0U2NhbGVkKTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoUkFE
SUFOQ0VPVkVSQUxQSEEpIHx8IGRlZmluZWQoU1BFQ1VMQVJPVkVSQUxQSEEpXG5hbHBoYT1zYXR1
cmF0ZShhbHBoYStsdW1pbmFuY2VPdmVyQWxwaGEqbHVtaW5hbmNlT3ZlckFscGhhKTtcbiNlbmRp
ZlxuI2VuZGlmXG4jZW5kaWZcblxuXG52ZWMzIGZpbmFsRGlmZnVzZT1kaWZmdXNlQmFzZTtcbmZp
bmFsRGlmZnVzZSo9c3VyZmFjZUFsYmVkby5yZ2I7XG5maW5hbERpZmZ1c2U9bWF4KGZpbmFsRGlm
ZnVzZSwwLjApO1xuXG52ZWMzIGZpbmFsQW1iaWVudD12QW1iaWVudENvbG9yO1xuZmluYWxBbWJp
ZW50Kj1zdXJmYWNlQWxiZWRvLnJnYjtcblxudmVjMyBmaW5hbEVtaXNzaXZlPXZFbWlzc2l2ZUNv
bG9yO1xuI2lmZGVmIEVNSVNTSVZFXG52ZWMzIGVtaXNzaXZlQ29sb3JUZXg9dGV4dHVyZTJEKGVt
aXNzaXZlU2FtcGxlcix2RW1pc3NpdmVVVit1dk9mZnNldCkucmdiO1xuZmluYWxFbWlzc2l2ZSo9
dG9MaW5lYXJTcGFjZShlbWlzc2l2ZUNvbG9yVGV4LnJnYik7XG5maW5hbEVtaXNzaXZlKj12RW1p
c3NpdmVJbmZvcy55O1xuI2VuZGlmXG5cbiNpZmRlZiBBTUJJRU5UXG52ZWMzIGFtYmllbnRPY2Ns
dXNpb25Gb3JEaXJlY3REaWZmdXNlPW1peCh2ZWMzKDEuKSxhbWJpZW50T2NjbHVzaW9uQ29sb3Is
dkFtYmllbnRJbmZvcy53KTtcbiNlbHNlXG52ZWMzIGFtYmllbnRPY2NsdXNpb25Gb3JEaXJlY3RE
aWZmdXNlPWFtYmllbnRPY2NsdXNpb25Db2xvcjtcbiNlbmRpZlxuXG5cblxudmVjNCBmaW5hbENv
bG9yPXZlYzQoXG5maW5hbEFtYmllbnQqYW1iaWVudE9jY2x1c2lvbkNvbG9yICtcbmZpbmFsRGlm
ZnVzZSphbWJpZW50T2NjbHVzaW9uRm9yRGlyZWN0RGlmZnVzZSp2TGlnaHRpbmdJbnRlbnNpdHku
eCArXG4jaWZuZGVmIFVOTElUXG4jaWZkZWYgUkVGTEVDVElPTlxuZmluYWxJcnJhZGlhbmNlKmFt
YmllbnRPY2NsdXNpb25Db2xvcip2TGlnaHRpbmdJbnRlbnNpdHkueiArXG4jZW5kaWZcbiNpZmRl
ZiBTUEVDVUxBUlRFUk1cblxuXG5maW5hbFNwZWN1bGFyU2NhbGVkICtcbiNlbmRpZlxuI2lmZGVm
IENMRUFSQ09BVFxuXG5cbmZpbmFsQ2xlYXJDb2F0U2NhbGVkICtcbiNlbmRpZlxuI2lmZGVmIFNI
RUVOXG5cblxuZmluYWxTaGVlblNjYWxlZCArXG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9OXG5c
blxuZmluYWxSYWRpYW5jZVNjYWxlZCArXG4jaWZkZWYgQ0xFQVJDT0FUXG5cblxuZmluYWxDbGVh
ckNvYXRSYWRpYW5jZVNjYWxlZCArXG4jZW5kaWZcbiNpZmRlZiBTSEVFTlxuXG5cbmZpbmFsU2hl
ZW5SYWRpYW5jZVNjYWxlZCArXG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFNTX1JFRlJBQ1RJT05c
bmZpbmFsUmVmcmFjdGlvbip2TGlnaHRpbmdJbnRlbnNpdHkueiArXG4jZW5kaWZcbiNlbmRpZlxu
ZmluYWxFbWlzc2l2ZSp2TGlnaHRpbmdJbnRlbnNpdHkueSxcbmFscGhhKTtcblxuI2lmZGVmIExJ
R0hUTUFQXG4jaWZuZGVmIExJR0hUTUFQRVhDTFVERURcbiNpZmRlZiBVU0VMSUdIVE1BUEFTU0hB
RE9XTUFQXG5maW5hbENvbG9yLnJnYio9bGlnaHRtYXBDb2xvci5yZ2I7XG4jZWxzZVxuZmluYWxD
b2xvci5yZ2IrPWxpZ2h0bWFwQ29sb3IucmdiO1xuI2VuZGlmXG4jZW5kaWZcbiNlbmRpZlxuI2Rl
ZmluZSBDVVNUT01fRlJBR01FTlRfQkVGT1JFX0ZPR1xuXG5maW5hbENvbG9yPW1heChmaW5hbENv
bG9yLDAuMCk7XG4jaW5jbHVkZTxsb2dEZXB0aEZyYWdtZW50PlxuI2luY2x1ZGU8Zm9nRnJhZ21l
bnQ+KGNvbG9yLGZpbmFsQ29sb3IpXG4jaWZkZWYgSU1BR0VQUk9DRVNTSU5HUE9TVFBST0NFU1Nc
blxuXG5maW5hbENvbG9yLnJnYj1jbGFtcChmaW5hbENvbG9yLnJnYiwwLiwzMC4wKTtcbiNlbHNl
XG5cbmZpbmFsQ29sb3I9YXBwbHlJbWFnZVByb2Nlc3NpbmcoZmluYWxDb2xvcik7XG4jZW5kaWZc
bmZpbmFsQ29sb3IuYSo9dmlzaWJpbGl0eTtcbiNpZmRlZiBQUkVNVUxUSVBMWUFMUEhBXG5cbmZp
bmFsQ29sb3IucmdiKj1maW5hbENvbG9yLmE7XG4jZW5kaWZcbiNkZWZpbmUgQ1VTVE9NX0ZSQUdN
RU5UX0JFRk9SRV9GUkFHQ09MT1JcbmdsX0ZyYWdDb2xvcj1maW5hbENvbG9yO1xuI2luY2x1ZGU8
cGJyRGVidWc+XG59XG4iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRk
ZW4gKi8KK3ZhciBwYnJQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIg
fTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9wYnIudmVydGV4LnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvcGJy
LnZlcnRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IHBiclZlcnRleFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJwYnJWZXJ0ZXhTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHBi
clZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9wYnJWZXJ0ZXhEZWNsYXJhdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9TaGFkZXJzSW5jbHVkZS9wYnJWZXJ0ZXhEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRl
cnNJbmNsdWRlL3BiclZlcnRleERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BiclVib0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL3Bi
clVib0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJyVWJvRGVjbGFy
YXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVs
cGVyRnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucy50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzSW5jbHVkZV9ib25lc0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2Jv
bmVzRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc0RlY2xhcmF0
aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2hhcm1v
bmljc0Z1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9oYXJtb25pY3NGdW5jdGlvbnMgKi8gIi4vU2hh
ZGVycy9TaGFkZXJzSW5jbHVkZS9oYXJtb25pY3NGdW5jdGlvbnMudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYnVtcFZlcnRleERlY2xhcmF0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRl
cnNJbmNsdWRlL2J1bXBWZXJ0ZXhEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL2J1bXBWZXJ0ZXhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9jbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRl
L2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNJbmNsdWRlX2ZvZ1ZlcnRleERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2Zv
Z1ZlcnRleERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZm9nVmVydGV4
RGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1
ZGVfbGlnaHRGcmFnbWVudERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2xpZ2h0RnJhZ21lbnRE
ZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0RnJhZ21lbnREZWNs
YXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9s
aWdodFVib0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9saWdodFVib0RlY2xhcmF0aW9uICov
ICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbGlnaHRVYm9EZWNsYXJhdGlvbi50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhH
bG9iYWxEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFs
RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0
ZXhHbG9iYWxEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUv
bW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVk
ZS9tb3JwaFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0aERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9sb2dEZXB0aERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbG9nRGVw
dGhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5j
bHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRl
eCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbnN0YW5jZXNWZXJ0ZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc1ZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL2luc3RhbmNlc1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzSW5jbHVkZV9ib25lc1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYm9uZXNWZXJ0ZXggKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9idW1wVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9idW1w
VmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYnVtcFZlcnRleC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVWZXJ0ZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1No
YWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRl
L2NsaXBQbGFuZVZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJz
SW5jbHVkZV9mb2dWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2ZvZ1ZlcnRleCAqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL2ZvZ1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9TaGFkZXJzSW5jbHVkZV9zaGFkb3dzVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9zaGFkb3dzVmVy
dGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvc2hhZG93c1ZlcnRleC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0aFZlcnRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hh
ZGVyc0luY2x1ZGUvbG9nRGVwdGhWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9s
b2dEZXB0aFZlcnRleC50cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCit2YXIgbmFtZSA9ICdwYnJWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJwcmVj
aXNpb24gaGlnaHAgZmxvYXQ7XG4jaW5jbHVkZTxfX2RlY2xfX3BiclZlcnRleD5cbiNkZWZpbmUg
Q1VTVE9NX1ZFUlRFWF9CRUdJTlxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxuI2lmZGVm
IE5PUk1BTFxuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xuI2VuZGlmXG4jaWZkZWYgVEFOR0VOVFxu
YXR0cmlidXRlIHZlYzQgdGFuZ2VudDtcbiNlbmRpZlxuI2lmZGVmIFVWMVxuYXR0cmlidXRlIHZl
YzIgdXY7XG4jZW5kaWZcbiNpZmRlZiBVVjJcbmF0dHJpYnV0ZSB2ZWMyIHV2MjtcbiNlbmRpZlxu
I2lmZGVmIFZFUlRFWENPTE9SXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbiNlbmRpZlxuI2lmZGVm
IElOU1RBTkNFU1xuYXR0cmlidXRlIHZlYzQgd29ybGQwO1xuYXR0cmlidXRlIHZlYzQgd29ybGQx
O1xuYXR0cmlidXRlIHZlYzQgd29ybGQyO1xuYXR0cmlidXRlIHZlYzQgd29ybGQzO1xuI2VuZGlm
XG4jaW5jbHVkZTxoZWxwZXJGdW5jdGlvbnM+XG4jaW5jbHVkZTxib25lc0RlY2xhcmF0aW9uPlxu
XG52YXJ5aW5nIHZlYzMgdlBvc2l0aW9uVztcbiNpZmRlZiBOT1JNQUxcbnZhcnlpbmcgdmVjMyB2
Tm9ybWFsVztcbiNpZiBkZWZpbmVkKFVTRVNQSEVSSUNBTEZST01SRUZMRUNUSU9OTUFQKSAmJiBk
ZWZpbmVkKFVTRVNQSEVSSUNBTElOVkVSVEVYKVxudmFyeWluZyB2ZWMzIHZFbnZpcm9ubWVudEly
cmFkaWFuY2U7XG4jaW5jbHVkZTxoYXJtb25pY3NGdW5jdGlvbnM+XG4jZW5kaWZcbiNlbmRpZlxu
I2lmZGVmIFZFUlRFWENPTE9SXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuI2VuZGlmXG4jaWZkZWYg
UkVGTEVDVElPTk1BUF9TS1lCT1hcbnZhcnlpbmcgdmVjMyB2UG9zaXRpb25VVlc7XG4jZW5kaWZc
biNpZiBERUJVR01PREU+MFxudmFyeWluZyB2ZWM0IHZDbGlwU3BhY2VQb3NpdGlvbjtcbiNlbmRp
ZlxuI2lmZGVmIE1BSU5VVjFcbnZhcnlpbmcgdmVjMiB2TWFpblVWMTtcbiNlbmRpZlxuI2lmZGVm
IE1BSU5VVjJcbnZhcnlpbmcgdmVjMiB2TWFpblVWMjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoQUxC
RURPKSAmJiBBTEJFRE9ESVJFQ1RVViA9PSAwXG52YXJ5aW5nIHZlYzIgdkFsYmVkb1VWO1xuI2Vu
ZGlmXG4jaWYgZGVmaW5lZChBTUJJRU5UKSAmJiBBTUJJRU5URElSRUNUVVYgPT0gMFxudmFyeWlu
ZyB2ZWMyIHZBbWJpZW50VVY7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKE9QQUNJVFkpICYmIE9QQUNJ
VFlESVJFQ1RVViA9PSAwXG52YXJ5aW5nIHZlYzIgdk9wYWNpdHlVVjtcbiNlbmRpZlxuI2lmIGRl
ZmluZWQoRU1JU1NJVkUpICYmIEVNSVNTSVZFRElSRUNUVVYgPT0gMFxudmFyeWluZyB2ZWMyIHZF
bWlzc2l2ZVVWO1xuI2VuZGlmXG4jaWYgZGVmaW5lZChMSUdIVE1BUCkgJiYgTElHSFRNQVBESVJF
Q1RVViA9PSAwXG52YXJ5aW5nIHZlYzIgdkxpZ2h0bWFwVVY7XG4jZW5kaWZcbiNpZiBkZWZpbmVk
KFJFRkxFQ1RJVklUWSkgJiYgUkVGTEVDVElWSVRZRElSRUNUVVYgPT0gMFxudmFyeWluZyB2ZWMy
IHZSZWZsZWN0aXZpdHlVVjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoTUlDUk9TVVJGQUNFTUFQKSAm
JiBNSUNST1NVUkZBQ0VNQVBESVJFQ1RVViA9PSAwXG52YXJ5aW5nIHZlYzIgdk1pY3JvU3VyZmFj
ZVNhbXBsZXJVVjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoQlVNUCkgJiYgQlVNUERJUkVDVFVWID09
IDBcbnZhcnlpbmcgdmVjMiB2QnVtcFVWO1xuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG4jaWYg
ZGVmaW5lZChDTEVBUkNPQVRfVEVYVFVSRSkgJiYgQ0xFQVJDT0FUX1RFWFRVUkVESVJFQ1RVViA9
PSAwXG52YXJ5aW5nIHZlYzIgdkNsZWFyQ29hdFVWO1xuI2VuZGlmXG4jaWYgZGVmaW5lZChDTEVB
UkNPQVRfQlVNUCkgJiYgQ0xFQVJDT0FUX0JVTVBESVJFQ1RVViA9PSAwXG52YXJ5aW5nIHZlYzIg
dkNsZWFyQ29hdEJ1bXBVVjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoQ0xFQVJDT0FUX1RJTlRfVEVY
VFVSRSkgJiYgQ0xFQVJDT0FUX1RJTlRfVEVYVFVSRURJUkVDVFVWID09IDBcbnZhcnlpbmcgdmVj
MiB2Q2xlYXJDb2F0VGludFVWO1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBTSEVFTlxuI2lmIGRl
ZmluZWQoU0hFRU5fVEVYVFVSRSkgJiYgU0hFRU5fVEVYVFVSRURJUkVDVFVWID09IDBcbnZhcnlp
bmcgdmVjMiB2U2hlZW5VVjtcbiNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgQU5JU09UUk9QSUNcbiNp
ZiBkZWZpbmVkKEFOSVNPVFJPUElDX1RFWFRVUkUpICYmIEFOSVNPVFJPUElDX1RFWFRVUkVESVJF
Q1RVViA9PSAwXG52YXJ5aW5nIHZlYzIgdkFuaXNvdHJvcHlVVjtcbiNlbmRpZlxuI2VuZGlmXG4j
aWZkZWYgU1VCU1VSRkFDRVxuI2lmIGRlZmluZWQoU1NfVEhJQ0tORVNTQU5ETUFTS19URVhUVVJF
KSAmJiBTU19USElDS05FU1NBTkRNQVNLX1RFWFRVUkVESVJFQ1RVViA9PSAwXG52YXJ5aW5nIHZl
YzIgdlRoaWNrbmVzc1VWO1xuI2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlPGJ1bXBWZXJ0ZXhEZWNs
YXJhdGlvbj5cbiNpbmNsdWRlPGNsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uPlxuI2luY2x1ZGU8
Zm9nVmVydGV4RGVjbGFyYXRpb24+XG4jaW5jbHVkZTxfX2RlY2xfX2xpZ2h0RnJhZ21lbnQ+WzAu
Lm1heFNpbXVsdGFuZW91c0xpZ2h0c11cbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleEdsb2Jh
bERlY2xhcmF0aW9uPlxuI2luY2x1ZGU8bW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24+WzAu
Lm1heFNpbXVsdGFuZW91c01vcnBoVGFyZ2V0c11cbiNpbmNsdWRlPGxvZ0RlcHRoRGVjbGFyYXRp
b24+XG4jZGVmaW5lIENVU1RPTV9WRVJURVhfREVGSU5JVElPTlNcbnZvaWQgbWFpbih2b2lkKSB7
XG4jZGVmaW5lIENVU1RPTV9WRVJURVhfTUFJTl9CRUdJTlxudmVjMyBwb3NpdGlvblVwZGF0ZWQ9
cG9zaXRpb247XG4jaWZkZWYgTk9STUFMXG52ZWMzIG5vcm1hbFVwZGF0ZWQ9bm9ybWFsO1xuI2Vu
ZGlmXG4jaWZkZWYgVEFOR0VOVFxudmVjNCB0YW5nZW50VXBkYXRlZD10YW5nZW50O1xuI2VuZGlm
XG4jaWZkZWYgVVYxXG52ZWMyIHV2VXBkYXRlZD11djtcbiNlbmRpZlxuI2luY2x1ZGU8bW9ycGhU
YXJnZXRzVmVydGV4PlswLi5tYXhTaW11bHRhbmVvdXNNb3JwaFRhcmdldHNdXG4jaWZkZWYgUkVG
TEVDVElPTk1BUF9TS1lCT1hcbiNpZmRlZiBSRUZMRUNUSU9OTUFQX1NLWUJPWF9UUkFOU0ZPUk1F
RFxudlBvc2l0aW9uVVZXPShyZWZsZWN0aW9uTWF0cml4KnZlYzQocG9zaXRpb25VcGRhdGVkLDEu
MCkpLnh5ejtcbiNlbHNlXG52UG9zaXRpb25VVlc9cG9zaXRpb25VcGRhdGVkO1xuI2VuZGlmXG4j
ZW5kaWZcbiNkZWZpbmUgQ1VTVE9NX1ZFUlRFWF9VUERBVEVfUE9TSVRJT05cbiNkZWZpbmUgQ1VT
VE9NX1ZFUlRFWF9VUERBVEVfTk9STUFMXG4jaW5jbHVkZTxpbnN0YW5jZXNWZXJ0ZXg+XG4jaW5j
bHVkZTxib25lc1ZlcnRleD5cbiNpZmRlZiBNVUxUSVZJRVdcbmlmIChnbF9WaWV3SURfT1ZSID09
IDB1KSB7XG5nbF9Qb3NpdGlvbj12aWV3UHJvamVjdGlvbipmaW5hbFdvcmxkKnZlYzQocG9zaXRp
b25VcGRhdGVkLDEuMCk7XG59IGVsc2Uge1xuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb25SKmZp
bmFsV29ybGQqdmVjNChwb3NpdGlvblVwZGF0ZWQsMS4wKTtcbn1cbiNlbHNlXG5nbF9Qb3NpdGlv
bj12aWV3UHJvamVjdGlvbipmaW5hbFdvcmxkKnZlYzQocG9zaXRpb25VcGRhdGVkLDEuMCk7XG4j
ZW5kaWZcbiNpZiBERUJVR01PREU+MFxudkNsaXBTcGFjZVBvc2l0aW9uPWdsX1Bvc2l0aW9uO1xu
I2VuZGlmXG52ZWM0IHdvcmxkUG9zPWZpbmFsV29ybGQqdmVjNChwb3NpdGlvblVwZGF0ZWQsMS4w
KTtcbnZQb3NpdGlvblc9dmVjMyh3b3JsZFBvcyk7XG4jaWZkZWYgTk9STUFMXG5tYXQzIG5vcm1h
bFdvcmxkPW1hdDMoZmluYWxXb3JsZCk7XG4jaWZkZWYgTk9OVU5JRk9STVNDQUxJTkdcbm5vcm1h
bFdvcmxkPXRyYW5zcG9zZU1hdDMoaW52ZXJzZU1hdDMobm9ybWFsV29ybGQpKTtcbiNlbmRpZlxu
dk5vcm1hbFc9bm9ybWFsaXplKG5vcm1hbFdvcmxkKm5vcm1hbFVwZGF0ZWQpO1xuI2lmIGRlZmlu
ZWQoVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05NQVApICYmIGRlZmluZWQoVVNFU1BIRVJJQ0FM
SU5WRVJURVgpXG52ZWMzIHJlZmxlY3Rpb25WZWN0b3I9dmVjMyhyZWZsZWN0aW9uTWF0cml4KnZl
YzQodk5vcm1hbFcsMCkpLnh5ejtcbiNpZmRlZiBSRUZMRUNUSU9OTUFQX09QUE9TSVRFWlxucmVm
bGVjdGlvblZlY3Rvci56Kj0tMS4wO1xuI2VuZGlmXG52RW52aXJvbm1lbnRJcnJhZGlhbmNlPWNv
bXB1dGVFbnZpcm9ubWVudElycmFkaWFuY2UocmVmbGVjdGlvblZlY3Rvcik7XG4jZW5kaWZcbiNl
bmRpZlxuI2lmIGRlZmluZWQoUkVGTEVDVElPTk1BUF9FUVVJUkVDVEFOR1VMQVJfRklYRUQpIHx8
IGRlZmluZWQoUkVGTEVDVElPTk1BUF9NSVJST1JFREVRVUlSRUNUQU5HVUxBUl9GSVhFRClcbnZE
aXJlY3Rpb25XPW5vcm1hbGl6ZSh2ZWMzKGZpbmFsV29ybGQqdmVjNChwb3NpdGlvblVwZGF0ZWQs
MC4wKSkpO1xuI2VuZGlmXG5cbiNpZm5kZWYgVVYxXG52ZWMyIHV2VXBkYXRlZD12ZWMyKDAuLDAu
KTtcbiNlbmRpZlxuI2lmbmRlZiBVVjJcbnZlYzIgdXYyPXZlYzIoMC4sMC4pO1xuI2VuZGlmXG4j
aWZkZWYgTUFJTlVWMVxudk1haW5VVjE9dXZVcGRhdGVkO1xuI2VuZGlmXG4jaWZkZWYgTUFJTlVW
Mlxudk1haW5VVjI9dXYyO1xuI2VuZGlmXG4jaWYgZGVmaW5lZChBTEJFRE8pICYmIEFMQkVET0RJ
UkVDVFVWID09IDBcbmlmICh2QWxiZWRvSW5mb3MueCA9PSAwLilcbntcbnZBbGJlZG9VVj12ZWMy
KGFsYmVkb01hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52QWxi
ZWRvVVY9dmVjMihhbGJlZG9NYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2VuZGlmXG4j
aWYgZGVmaW5lZChBTUJJRU5UKSAmJiBBTUJJRU5URElSRUNUVVYgPT0gMFxuaWYgKHZBbWJpZW50
SW5mb3MueCA9PSAwLilcbntcbnZBbWJpZW50VVY9dmVjMihhbWJpZW50TWF0cml4KnZlYzQodXZV
cGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZBbWJpZW50VVY9dmVjMihhbWJpZW50TWF0
cml4KnZlYzQodXYyLDEuMCwwLjApKTtcbn1cbiNlbmRpZlxuI2lmIGRlZmluZWQoT1BBQ0lUWSkg
JiYgT1BBQ0lUWURJUkVDVFVWID09IDBcbmlmICh2T3BhY2l0eUluZm9zLnggPT0gMC4pXG57XG52
T3BhY2l0eVVWPXZlYzIob3BhY2l0eU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59
XG5lbHNlXG57XG52T3BhY2l0eVVWPXZlYzIob3BhY2l0eU1hdHJpeCp2ZWM0KHV2MiwxLjAsMC4w
KSk7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKEVNSVNTSVZFKSAmJiBFTUlTU0lWRURJUkVDVFVW
ID09IDBcbmlmICh2RW1pc3NpdmVJbmZvcy54ID09IDAuKVxue1xudkVtaXNzaXZlVVY9dmVjMihl
bWlzc2l2ZU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52RW1p
c3NpdmVVVj12ZWMyKGVtaXNzaXZlTWF0cml4KnZlYzQodXYyLDEuMCwwLjApKTtcbn1cbiNlbmRp
ZlxuI2lmIGRlZmluZWQoTElHSFRNQVApICYmIExJR0hUTUFQRElSRUNUVVYgPT0gMFxuaWYgKHZM
aWdodG1hcEluZm9zLnggPT0gMC4pXG57XG52TGlnaHRtYXBVVj12ZWMyKGxpZ2h0bWFwTWF0cml4
KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZMaWdodG1hcFVWPXZlYzIo
bGlnaHRtYXBNYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2VuZGlmXG4jaWYgZGVmaW5l
ZChSRUZMRUNUSVZJVFkpICYmIFJFRkxFQ1RJVklUWURJUkVDVFVWID09IDBcbmlmICh2UmVmbGVj
dGl2aXR5SW5mb3MueCA9PSAwLilcbntcbnZSZWZsZWN0aXZpdHlVVj12ZWMyKHJlZmxlY3Rpdml0
eU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52UmVmbGVjdGl2
aXR5VVY9dmVjMihyZWZsZWN0aXZpdHlNYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2Vu
ZGlmXG4jaWYgZGVmaW5lZChNSUNST1NVUkZBQ0VNQVApICYmIE1JQ1JPU1VSRkFDRU1BUERJUkVD
VFVWID09IDBcbmlmICh2TWljcm9TdXJmYWNlU2FtcGxlckluZm9zLnggPT0gMC4pXG57XG52TWlj
cm9TdXJmYWNlU2FtcGxlclVWPXZlYzIobWljcm9TdXJmYWNlU2FtcGxlck1hdHJpeCp2ZWM0KHV2
VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52TWljcm9TdXJmYWNlU2FtcGxlclVWPXZl
YzIobWljcm9TdXJmYWNlU2FtcGxlck1hdHJpeCp2ZWM0KHV2MiwxLjAsMC4wKSk7XG59XG4jZW5k
aWZcbiNpZiBkZWZpbmVkKEJVTVApICYmIEJVTVBESVJFQ1RVViA9PSAwXG5pZiAodkJ1bXBJbmZv
cy54ID09IDAuKVxue1xudkJ1bXBVVj12ZWMyKGJ1bXBNYXRyaXgqdmVjNCh1dlVwZGF0ZWQsMS4w
LDAuMCkpO1xufVxuZWxzZVxue1xudkJ1bXBVVj12ZWMyKGJ1bXBNYXRyaXgqdmVjNCh1djIsMS4w
LDAuMCkpO1xufVxuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG4jaWYgZGVmaW5lZChDTEVBUkNP
QVRfVEVYVFVSRSkgJiYgQ0xFQVJDT0FUX1RFWFRVUkVESVJFQ1RVViA9PSAwXG5pZiAodkNsZWFy
Q29hdEluZm9zLnggPT0gMC4pXG57XG52Q2xlYXJDb2F0VVY9dmVjMihjbGVhckNvYXRNYXRyaXgq
dmVjNCh1dlVwZGF0ZWQsMS4wLDAuMCkpO1xufVxuZWxzZVxue1xudkNsZWFyQ29hdFVWPXZlYzIo
Y2xlYXJDb2F0TWF0cml4KnZlYzQodXYyLDEuMCwwLjApKTtcbn1cbiNlbmRpZlxuI2lmIGRlZmlu
ZWQoQ0xFQVJDT0FUX0JVTVApICYmIENMRUFSQ09BVF9CVU1QRElSRUNUVVYgPT0gMFxuaWYgKHZD
bGVhckNvYXRCdW1wSW5mb3MueCA9PSAwLilcbntcbnZDbGVhckNvYXRCdW1wVVY9dmVjMihjbGVh
ckNvYXRCdW1wTWF0cml4KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZD
bGVhckNvYXRCdW1wVVY9dmVjMihjbGVhckNvYXRCdW1wTWF0cml4KnZlYzQodXYyLDEuMCwwLjAp
KTtcbn1cbiNlbmRpZlxuI2lmIGRlZmluZWQoQ0xFQVJDT0FUX1RJTlRfVEVYVFVSRSkgJiYgQ0xF
QVJDT0FUX1RJTlRfVEVYVFVSRURJUkVDVFVWID09IDBcbmlmICh2Q2xlYXJDb2F0VGludEluZm9z
LnggPT0gMC4pXG57XG52Q2xlYXJDb2F0VGludFVWPXZlYzIoY2xlYXJDb2F0VGludE1hdHJpeCp2
ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52Q2xlYXJDb2F0VGludFVWPXZl
YzIoY2xlYXJDb2F0VGludE1hdHJpeCp2ZWM0KHV2MiwxLjAsMC4wKSk7XG59XG4jZW5kaWZcbiNl
bmRpZlxuI2lmZGVmIFNIRUVOXG4jaWYgZGVmaW5lZChTSEVFTl9URVhUVVJFKSAmJiBTSEVFTl9U
RVhUVVJFRElSRUNUVVYgPT0gMFxuaWYgKHZTaGVlbkluZm9zLnggPT0gMC4pXG57XG52U2hlZW5V
Vj12ZWMyKHNoZWVuTWF0cml4KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2Vcbntc
bnZTaGVlblVWPXZlYzIoc2hlZW5NYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2VuZGlm
XG4jZW5kaWZcbiNpZmRlZiBBTklTT1RST1BJQ1xuI2lmIGRlZmluZWQoQU5JU09UUk9QSUNfVEVY
VFVSRSkgJiYgQU5JU09UUk9QSUNfVEVYVFVSRURJUkVDVFVWID09IDBcbmlmICh2QW5pc290cm9w
eUluZm9zLnggPT0gMC4pXG57XG52QW5pc290cm9weVVWPXZlYzIoYW5pc290cm9weU1hdHJpeCp2
ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52QW5pc290cm9weVVWPXZlYzIo
YW5pc290cm9weU1hdHJpeCp2ZWM0KHV2MiwxLjAsMC4wKSk7XG59XG4jZW5kaWZcbiNlbmRpZlxu
I2lmZGVmIFNVQlNVUkZBQ0VcbiNpZiBkZWZpbmVkKFNTX1RISUNLTkVTU0FORE1BU0tfVEVYVFVS
RSkgJiYgU1NfVEhJQ0tORVNTQU5ETUFTS19URVhUVVJFRElSRUNUVVYgPT0gMFxuaWYgKHZUaGlj
a25lc3NJbmZvcy54ID09IDAuKVxue1xudlRoaWNrbmVzc1VWPXZlYzIodGhpY2tuZXNzTWF0cml4
KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZUaGlja25lc3NVVj12ZWMy
KHRoaWNrbmVzc01hdHJpeCp2ZWM0KHV2MiwxLjAsMC4wKSk7XG59XG4jZW5kaWZcbiNlbmRpZlxu
XG4jaW5jbHVkZTxidW1wVmVydGV4PlxuXG4jaW5jbHVkZTxjbGlwUGxhbmVWZXJ0ZXg+XG5cbiNp
bmNsdWRlPGZvZ1ZlcnRleD5cblxuI2luY2x1ZGU8c2hhZG93c1ZlcnRleD5bMC4ubWF4U2ltdWx0
YW5lb3VzTGlnaHRzXVxuXG4jaWZkZWYgVkVSVEVYQ09MT1JcbnZDb2xvcj1jb2xvcjtcbiNlbmRp
ZlxuXG4jaWZkZWYgUE9JTlRTSVpFXG5nbF9Qb2ludFNpemU9cG9pbnRTaXplO1xuI2VuZGlmXG5c
biNpbmNsdWRlPGxvZ0RlcHRoVmVydGV4PlxuI2RlZmluZSBDVVNUT01fVkVSVEVYX01BSU5fRU5E
XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVm
ZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIg
cGJyVmVydGV4U2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL3Bvc3Rwcm9jZXNzLnZlcnRleC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRl
cnMvcG9zdHByb2Nlc3MudmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBwb3N0cHJvY2Vzc1ZlcnRl
eFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJwb3N0cHJvY2Vz
c1ZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcG9zdHByb2Nlc3NWZXJ0ZXhTaGFk
ZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRl
cmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAn
cG9zdHByb2Nlc3NWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbmF0dHJpYnV0ZSB2ZWMy
IHBvc2l0aW9uO1xudW5pZm9ybSB2ZWMyIHNjYWxlO1xuXG52YXJ5aW5nIHZlYzIgdlVWO1xuY29u
c3QgdmVjMiBtYWRkPXZlYzIoMC41LDAuNSk7XG52b2lkIG1haW4odm9pZCkge1xudlVWPShwb3Np
dGlvbiptYWRkK21hZGQpKnNjYWxlO1xuZ2xfUG9zaXRpb249dmVjNChwb3NpdGlvbiwwLjAsMS4w
KTtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3Zh
ciBwb3N0cHJvY2Vzc1ZlcnRleFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIg
fTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9wcm9jZWR1cmFsLnZlcnRleC50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vU2hhZGVycy9wcm9jZWR1cmFsLnZlcnRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBwcm9jZWR1cmFs
VmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInByb2Nl
ZHVyYWxWZXJ0ZXhTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHByb2NlZHVyYWxWZXJ0ZXhT
aGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUg
PSAncHJvY2VkdXJhbFZlcnRleFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxuYXR0cmlidXRlIHZl
YzIgcG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMiB2UG9zaXRpb247XG52YXJ5aW5nIHZlYzIgdlVW
O1xuY29uc3QgdmVjMiBtYWRkPXZlYzIoMC41LDAuNSk7XG52b2lkIG1haW4odm9pZCkge1xudlBv
c2l0aW9uPXBvc2l0aW9uO1xudlVWPXBvc2l0aW9uKm1hZGQrbWFkZDtcbmdsX1Bvc2l0aW9uPXZl
YzQocG9zaXRpb24sMC4wLDEuMCk7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsK
Ky8qKiBAaGlkZGVuICovCit2YXIgcHJvY2VkdXJhbFZlcnRleFNoYWRlciA9IHsgbmFtZTogbmFt
ZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9y
ZWZyYWN0aW9uLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvcmVmcmFjdGlvbi5mcmFnbWVudC50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IHJlZnJhY3Rpb25QaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJyZWZyYWN0aW9uUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIHJlZnJhY3Rpb25QaXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2Vm
ZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdyZWZyYWN0aW9uUGl4ZWxTaGFkZXInOwordmFyIHNo
YWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2Ft
cGxlcjtcbnVuaWZvcm0gc2FtcGxlcjJEIHJlZnJhY3Rpb25TYW1wbGVyO1xuXG51bmlmb3JtIHZl
YzMgYmFzZUNvbG9yO1xudW5pZm9ybSBmbG9hdCBkZXB0aDtcbnVuaWZvcm0gZmxvYXQgY29sb3JM
ZXZlbDtcbnZvaWQgbWFpbigpIHtcbmZsb2F0IHJlZj0xLjAtdGV4dHVyZTJEKHJlZnJhY3Rpb25T
YW1wbGVyLHZVVikucjtcbnZlYzIgdXY9dlVWLXZlYzIoMC41KTtcbnZlYzIgb2Zmc2V0PXV2KmRl
cHRoKnJlZjtcbnZlYzMgc291cmNlQ29sb3I9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVi1v
ZmZzZXQpLnJnYjtcbmdsX0ZyYWdDb2xvcj12ZWM0KHNvdXJjZUNvbG9yK3NvdXJjZUNvbG9yKnJl
Zipjb2xvckxldmVsLDEuMCk7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8q
KiBAaGlkZGVuICovCit2YXIgcmVmcmFjdGlvblBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBz
aGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL3JnYmRE
ZWNvZGUuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9yZ2JkRGVjb2RlLmZyYWdtZW50LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogcmdiZERlY29kZVBpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgInJnYmREZWNvZGVQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gcmdiZERlY29kZVBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2hlbHBlckZ1
bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMgKi8gIi4vU2hhZGVycy9TaGFk
ZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMudHMiKTsKKworCit2YXIgbmFtZSA9ICdyZ2JkRGVj
b2RlUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlm
b3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbiNpbmNsdWRlPGhlbHBlckZ1bmN0aW9ucz5c
bnZvaWQgbWFpbih2b2lkKVxue1xuZ2xfRnJhZ0NvbG9yPXZlYzQoZnJvbVJHQkQodGV4dHVyZTJE
KHRleHR1cmVTYW1wbGVyLHZVVikpLDEuMCk7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNo
YWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgcmdiZERlY29kZVBpeGVsU2hhZGVyID0geyBuYW1l
OiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFk
ZXJzL3JnYmRFbmNvZGUuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9yZ2JkRW5jb2RlLmZyYWdtZW50
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogcmdiZEVuY29kZVBpeGVsU2hhZGVyICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInJnYmRFbmNvZGVQaXhlbFNoYWRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gcmdiZEVuY29kZVBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlh
bHMvZWZmZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRl
X2hlbHBlckZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMgKi8gIi4vU2hh
ZGVycy9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMudHMiKTsKKworCit2YXIgbmFtZSA9
ICdyZ2JkRW5jb2RlUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2
VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbiNpbmNsdWRlPGhlbHBlckZ1
bmN0aW9ucz5cbnZvaWQgbWFpbih2b2lkKVxue1xuZ2xfRnJhZ0NvbG9yPXRvUkdCRCh0ZXh0dXJl
MkQodGV4dHVyZVNhbXBsZXIsdlVWKS5yZ2IpO1xufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBz
aGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHJnYmRFbmNvZGVQaXhlbFNoYWRlciA9IHsgbmFt
ZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hh
ZGVycy9zaGFkb3dNYXAuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL3NoYWRvd01hcC5mcmFnbWVudC50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogc2hhZG93TWFwUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAic2hhZG93TWFwUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIHNoYWRvd01hcFBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZm
ZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BhY2tp
bmdGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvcGFja2luZ0Z1bmN0aW9ucyAqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL3BhY2tpbmdGdW5jdGlvbnMudHMiKTsKKworCit2YXIgbmFtZSA9ICdz
aGFkb3dNYXBQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIiNpZm5kZWYgRkxPQVRcbiNpbmNs
dWRlPHBhY2tpbmdGdW5jdGlvbnM+XG4jZW5kaWZcbnZhcnlpbmcgZmxvYXQgdkRlcHRoTWV0cmlj
O1xuI2lmZGVmIEFMUEhBVEVTVFxudmFyeWluZyB2ZWMyIHZVVjtcbnVuaWZvcm0gc2FtcGxlcjJE
IGRpZmZ1c2VTYW1wbGVyO1xuI2VuZGlmXG51bmlmb3JtIHZlYzMgYmlhc0FuZFNjYWxlO1xudW5p
Zm9ybSB2ZWMyIGRlcHRoVmFsdWVzO1xudm9pZCBtYWluKHZvaWQpXG57XG4jaWZkZWYgQUxQSEFU
RVNUXG5pZiAodGV4dHVyZTJEKGRpZmZ1c2VTYW1wbGVyLHZVVikuYTwwLjQpXG5kaXNjYXJkO1xu
I2VuZGlmXG5mbG9hdCBkZXB0aD12RGVwdGhNZXRyaWM7XG4jaWZkZWYgRVNNXG5kZXB0aD1jbGFt
cChleHAoLW1pbig4Ny4sYmlhc0FuZFNjYWxlLnoqZGVwdGgpKSwwLiwxLik7XG4jZW5kaWZcbiNp
ZmRlZiBGTE9BVFxuZ2xfRnJhZ0NvbG9yPXZlYzQoZGVwdGgsMS4wLDEuMCwxLjApO1xuI2Vsc2Vc
bmdsX0ZyYWdDb2xvcj1wYWNrKGRlcHRoKTtcbiNlbmRpZlxufSI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHNoYWRvd01hcFBpeGVsU2hhZGVyID0g
eyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9TaGFkZXJzL3NoYWRvd01hcC52ZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9zaGFkb3dNYXAudmVydGV4LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogc2hhZG93TWFwVmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgInNoYWRvd01hcFZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gc2hhZG93TWFwVmVydGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZm
ZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2JvbmVz
RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYm9uZXNEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFyYXRp
b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFyYXRpb24gKi8g
Ii4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJh
dGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3Jw
aFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0
ZXhEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1Zl
cnRleERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJ
bmNsdWRlX2luc3RhbmNlc0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc0RlY2xh
cmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzRGVjbGFyYXRpb24u
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVscGVyRnVu
Y3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRl
cnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbW9ycGhU
YXJnZXRzVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVy
dGV4LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2luc3Rh
bmNlc1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXggKi8gIi4vU2hhZGVycy9T
aGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYm9uZXNWZXJ0
ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc1ZlcnRleC50cyIpOworCisKKwor
CisKKworCisKKwordmFyIG5hbWUgPSAnc2hhZG93TWFwVmVydGV4U2hhZGVyJzsKK3ZhciBzaGFk
ZXIgPSAiXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbiNpZmRlZiBOT1JNQUxcbmF0dHJpYnV0
ZSB2ZWMzIG5vcm1hbDtcbnVuaWZvcm0gdmVjMyBsaWdodERhdGE7XG4jZW5kaWZcbiNpbmNsdWRl
PGJvbmVzRGVjbGFyYXRpb24+XG4jaW5jbHVkZTxtb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNs
YXJhdGlvbj5cbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleERlY2xhcmF0aW9uPlswLi5tYXhT
aW11bHRhbmVvdXNNb3JwaFRhcmdldHNdXG5cbiNpbmNsdWRlPGluc3RhbmNlc0RlY2xhcmF0aW9u
PlxuI2luY2x1ZGU8aGVscGVyRnVuY3Rpb25zPlxudW5pZm9ybSBtYXQ0IHZpZXdQcm9qZWN0aW9u
O1xudW5pZm9ybSB2ZWMzIGJpYXNBbmRTY2FsZTtcbnVuaWZvcm0gdmVjMiBkZXB0aFZhbHVlcztc
bnZhcnlpbmcgZmxvYXQgdkRlcHRoTWV0cmljO1xuI2lmZGVmIEFMUEhBVEVTVFxudmFyeWluZyB2
ZWMyIHZVVjtcbnVuaWZvcm0gbWF0NCBkaWZmdXNlTWF0cml4O1xuI2lmZGVmIFVWMVxuYXR0cmli
dXRlIHZlYzIgdXY7XG4jZW5kaWZcbiNpZmRlZiBVVjJcbmF0dHJpYnV0ZSB2ZWMyIHV2MjtcbiNl
bmRpZlxuI2VuZGlmXG52b2lkIG1haW4odm9pZClcbntcbnZlYzMgcG9zaXRpb25VcGRhdGVkPXBv
c2l0aW9uO1xuI2lmZGVmIFVWMVxudmVjMiB1dlVwZGF0ZWQ9dXY7XG4jZW5kaWZcbiNpbmNsdWRl
PG1vcnBoVGFyZ2V0c1ZlcnRleD5bMC4ubWF4U2ltdWx0YW5lb3VzTW9ycGhUYXJnZXRzXVxuI2lu
Y2x1ZGU8aW5zdGFuY2VzVmVydGV4PlxuI2luY2x1ZGU8Ym9uZXNWZXJ0ZXg+XG52ZWM0IHdvcmxk
UG9zPWZpbmFsV29ybGQqdmVjNChwb3NpdGlvblVwZGF0ZWQsMS4wKTtcblxuI2lmZGVmIE5PUk1B
TFxubWF0MyBub3JtYWxXb3JsZD1tYXQzKGZpbmFsV29ybGQpO1xuI2lmZGVmIE5PTlVOSUZPUk1T
Q0FMSU5HXG5ub3JtYWxXb3JsZD10cmFuc3Bvc2VNYXQzKGludmVyc2VNYXQzKG5vcm1hbFdvcmxk
KSk7XG4jZW5kaWZcbnZlYzMgd29ybGROb3I9bm9ybWFsaXplKG5vcm1hbFdvcmxkKm5vcm1hbCk7
XG4jaWZkZWYgRElSRUNUSU9OSU5MSUdIVERBVEFcbnZlYzMgd29ybGRMaWdodERpcj1ub3JtYWxp
emUoLWxpZ2h0RGF0YS54eXopO1xuI2Vsc2VcbnZlYzMgZGlyZWN0aW9uVG9MaWdodD1saWdodERh
dGEueHl6LXdvcmxkUG9zLnh5ejtcbnZlYzMgd29ybGRMaWdodERpcj1ub3JtYWxpemUoZGlyZWN0
aW9uVG9MaWdodCk7XG4jZW5kaWZcbmZsb2F0IG5kbD1kb3Qod29ybGROb3Isd29ybGRMaWdodERp
cik7XG5mbG9hdCBzaW5OTD1zcXJ0KDEuMC1uZGwqbmRsKTtcbmZsb2F0IG5vcm1hbEJpYXM9Ymlh
c0FuZFNjYWxlLnkqc2luTkw7XG53b3JsZFBvcy54eXotPXdvcmxkTm9yKm5vcm1hbEJpYXM7XG4j
ZW5kaWZcblxuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb24qd29ybGRQb3M7XG4jaWZkZWYgREVQ
VEhURVhUVVJFXG5cbmdsX1Bvc2l0aW9uLnorPWJpYXNBbmRTY2FsZS54KmdsX1Bvc2l0aW9uLnc7
XG4jZW5kaWZcblxudkRlcHRoTWV0cmljPSgoZ2xfUG9zaXRpb24ueitkZXB0aFZhbHVlcy54KS8o
ZGVwdGhWYWx1ZXMueSkpK2JpYXNBbmRTY2FsZS54O1xuI2lmZGVmIEFMUEhBVEVTVFxuI2lmZGVm
IFVWMVxudlVWPXZlYzIoZGlmZnVzZU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG4j
ZW5kaWZcbiNpZmRlZiBVVjJcbnZVVj12ZWMyKGRpZmZ1c2VNYXRyaXgqdmVjNCh1djIsMS4wLDAu
MCkpO1xuI2VuZGlmXG4jZW5kaWZcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOwor
LyoqIEBoaWRkZW4gKi8KK3ZhciBzaGFkb3dNYXBWZXJ0ZXhTaGFkZXIgPSB7IG5hbWU6IG5hbWUs
IHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvc2hh
cnBlbi5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9TaGFkZXJzL3NoYXJwZW4uZnJhZ21lbnQudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBzaGFycGVuUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAic2hhcnBlblBpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzaGFycGVuUGl4ZWxT
aGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUg
PSAnc2hhcnBlblBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG52YXJ5aW5nIHZlYzIgdlVW
O1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZVNhbXBsZXI7XG51bmlmb3JtIHZlYzIgc2NyZWVu
U2l6ZTtcbnVuaWZvcm0gdmVjMiBzaGFycG5lc3NBbW91bnRzO1xudm9pZCBtYWluKHZvaWQpXG57
XG52ZWMyIG9uZVBpeGVsPXZlYzIoMS4wLDEuMCkvc2NyZWVuU2l6ZTtcbnZlYzQgY29sb3I9dGV4
dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG52ZWM0IGVkZ2VEZXRlY3Rpb249dGV4dHVyZTJE
KHRleHR1cmVTYW1wbGVyLHZVVitvbmVQaXhlbCp2ZWMyKDAsLTEpKSArXG50ZXh0dXJlMkQodGV4
dHVyZVNhbXBsZXIsdlVWK29uZVBpeGVsKnZlYzIoLTEsMCkpICtcbnRleHR1cmUyRCh0ZXh0dXJl
U2FtcGxlcix2VVYrb25lUGl4ZWwqdmVjMigxLDApKSArXG50ZXh0dXJlMkQodGV4dHVyZVNhbXBs
ZXIsdlVWK29uZVBpeGVsKnZlYzIoMCwxKSkgLVxuY29sb3IqNC4wO1xuZ2xfRnJhZ0NvbG9yPW1h
eCh2ZWM0KGNvbG9yLnJnYipzaGFycG5lc3NBbW91bnRzLnksY29sb3IuYSktKHNoYXJwbmVzc0Ft
b3VudHMueCp2ZWM0KGVkZ2VEZXRlY3Rpb24ucmdiLDApKSwwLik7XG59IjsKK19NYXRlcmlhbHNf
ZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9y
ZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgc2hhcnBlblBpeGVsU2hhZGVy
ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9TaGFkZXJzL3Nwcml0ZXMuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9zcHJpdGVzLmZyYWdtZW50
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogc3ByaXRlc1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgInNwcml0ZXNQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gc3ByaXRlc1BpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2ZvZ0ZyYWdtZW50
RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvZm9nRnJhZ21lbnREZWNsYXJhdGlvbiAqLyAiLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ZvZ0ZyYWdtZW50RGVjbGFyYXRpb24udHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfZm9nRnJhZ21lbnRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0lu
Y2x1ZGUvZm9nRnJhZ21lbnQgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9mb2dGcmFnbWVu
dC50cyIpOworCisKKwordmFyIG5hbWUgPSAnc3ByaXRlc1BpeGVsU2hhZGVyJzsKK3ZhciBzaGFk
ZXIgPSAidW5pZm9ybSBib29sIGFscGhhVGVzdDtcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG5cbnZh
cnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlU2FtcGxlcjtcblxuI2lu
Y2x1ZGU8Zm9nRnJhZ21lbnREZWNsYXJhdGlvbj5cbnZvaWQgbWFpbih2b2lkKSB7XG52ZWM0IGNv
bG9yPXRleHR1cmUyRChkaWZmdXNlU2FtcGxlcix2VVYpO1xuaWYgKGFscGhhVGVzdClcbntcbmlm
IChjb2xvci5hPDAuOTUpXG5kaXNjYXJkO1xufVxuY29sb3IqPXZDb2xvcjtcbiNpbmNsdWRlPGZv
Z0ZyYWdtZW50PlxuZ2xfRnJhZ0NvbG9yPWNvbG9yO1xufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0g
PSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHNwcml0ZXNQaXhlbFNoYWRlciA9IHsgbmFt
ZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hh
ZGVycy9zcHJpdGVzLnZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9zcHJpdGVzLnZlcnRleC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBzcHJpdGVzVmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgInNwcml0ZXNWZXJ0ZXhTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNwcml0ZXNWZXJ0
ZXhTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfZm9nVmVydGV4RGVjbGFyYXRpb25fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hh
ZGVyc0luY2x1ZGUvZm9nVmVydGV4RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9mb2dWZXJ0ZXhEZWNsYXJhdGlvbi50cyIpOworCisKK3ZhciBuYW1lID0gJ3Nwcml0ZXNW
ZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbmF0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uO1xu
YXR0cmlidXRlIHZlYzQgb3B0aW9ucztcbmF0dHJpYnV0ZSB2ZWMyIGludmVydHM7XG5hdHRyaWJ1
dGUgdmVjNCBjZWxsSW5mbztcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuXG51bmlmb3JtIG1hdDQg
dmlldztcbnVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uO1xuXG52YXJ5aW5nIHZlYzIgdlVWO1xudmFy
eWluZyB2ZWM0IHZDb2xvcjtcbiNpbmNsdWRlPGZvZ1ZlcnRleERlY2xhcmF0aW9uPlxudm9pZCBt
YWluKHZvaWQpIHtcbnZlYzMgdmlld1Bvcz0odmlldyp2ZWM0KHBvc2l0aW9uLnh5eiwxLjApKS54
eXo7XG52ZWMyIGNvcm5lclBvcztcbmZsb2F0IGFuZ2xlPXBvc2l0aW9uLnc7XG52ZWMyIHNpemU9
dmVjMihvcHRpb25zLngsb3B0aW9ucy55KTtcbnZlYzIgb2Zmc2V0PW9wdGlvbnMuenc7XG5jb3Ju
ZXJQb3M9dmVjMihvZmZzZXQueC0wLjUsb2Zmc2V0LnktMC41KSpzaXplO1xuXG52ZWMzIHJvdGF0
ZWRDb3JuZXI7XG5yb3RhdGVkQ29ybmVyLng9Y29ybmVyUG9zLngqY29zKGFuZ2xlKS1jb3JuZXJQ
b3MueSpzaW4oYW5nbGUpO1xucm90YXRlZENvcm5lci55PWNvcm5lclBvcy54KnNpbihhbmdsZSkr
Y29ybmVyUG9zLnkqY29zKGFuZ2xlKTtcbnJvdGF0ZWRDb3JuZXIuej0wLjtcblxudmlld1Bvcys9
cm90YXRlZENvcm5lcjtcbmdsX1Bvc2l0aW9uPXByb2plY3Rpb24qdmVjNCh2aWV3UG9zLDEuMCk7
XG5cbnZDb2xvcj1jb2xvcjtcblxudmVjMiB1dk9mZnNldD12ZWMyKGFicyhvZmZzZXQueC1pbnZl
cnRzLngpLGFicygxLjAtb2Zmc2V0LnktaW52ZXJ0cy55KSk7XG52ZWMyIHV2UGxhY2U9Y2VsbElu
Zm8ueHk7XG52ZWMyIHV2U2l6ZT1jZWxsSW5mby56dztcbnZVVi54PXV2UGxhY2UueCt1dlNpemUu
eCp1dk9mZnNldC54O1xudlVWLnk9dXZQbGFjZS55K3V2U2l6ZS55KnV2T2Zmc2V0Lnk7XG5cbiNp
ZmRlZiBGT0dcbnZGb2dEaXN0YW5jZT12aWV3UG9zO1xuI2VuZGlmXG59IjsKK19NYXRlcmlhbHNf
ZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9y
ZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgc3ByaXRlc1ZlcnRleFNoYWRl
ciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vU2hhZGVycy9zc2FvLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvc3Nhby5mcmFnbWVudC50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IHNzYW9QaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJzc2FvUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNzYW9QaXhlbFNoYWRl
cjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVy
aWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdz
c2FvUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1
cmVTYW1wbGVyO1xudmFyeWluZyB2ZWMyIHZVVjtcbiNpZmRlZiBTU0FPXG51bmlmb3JtIHNhbXBs
ZXIyRCByYW5kb21TYW1wbGVyO1xudW5pZm9ybSBmbG9hdCByYW5kVGV4dHVyZVRpbGVzO1xudW5p
Zm9ybSBmbG9hdCBzYW1wbGVzRmFjdG9yO1xudW5pZm9ybSB2ZWMzIHNhbXBsZVNwaGVyZVtTQU1Q
TEVTXTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTdHJlbmd0aDtcbnVuaWZvcm0gZmxvYXQgcmFkaXVz
O1xudW5pZm9ybSBmbG9hdCBhcmVhO1xudW5pZm9ybSBmbG9hdCBmYWxsT2ZmO1xudW5pZm9ybSBm
bG9hdCBiYXNlO1xudmVjMyBub3JtYWxGcm9tRGVwdGgoZmxvYXQgZGVwdGgsdmVjMiBjb29yZHMp
XG57XG52ZWMyIG9mZnNldDE9dmVjMigwLjAscmFkaXVzKTtcbnZlYzIgb2Zmc2V0Mj12ZWMyKHJh
ZGl1cywwLjApO1xuZmxvYXQgZGVwdGgxPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcixjb29yZHMr
b2Zmc2V0MSkucjtcbmZsb2F0IGRlcHRoMj10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsY29vcmRz
K29mZnNldDIpLnI7XG52ZWMzIHAxPXZlYzMob2Zmc2V0MSxkZXB0aDEtZGVwdGgpO1xudmVjMyBw
Mj12ZWMzKG9mZnNldDIsZGVwdGgyLWRlcHRoKTtcbnZlYzMgbm9ybWFsPWNyb3NzKHAxLHAyKTtc
bm5vcm1hbC56PS1ub3JtYWwuejtcbnJldHVybiBub3JtYWxpemUobm9ybWFsKTtcbn1cbnZvaWQg
bWFpbigpXG57XG52ZWMzIHJhbmRvbT1ub3JtYWxpemUodGV4dHVyZTJEKHJhbmRvbVNhbXBsZXIs
dlVWKnJhbmRUZXh0dXJlVGlsZXMpLnJnYik7XG5mbG9hdCBkZXB0aD10ZXh0dXJlMkQodGV4dHVy
ZVNhbXBsZXIsdlVWKS5yO1xudmVjMyBwb3NpdGlvbj12ZWMzKHZVVixkZXB0aCk7XG52ZWMzIG5v
cm1hbD1ub3JtYWxGcm9tRGVwdGgoZGVwdGgsdlVWKTtcbmZsb2F0IHJhZGl1c0RlcHRoPXJhZGl1
cy9kZXB0aDtcbmZsb2F0IG9jY2x1c2lvbj0wLjA7XG52ZWMzIHJheTtcbnZlYzMgaGVtaVJheTtc
bmZsb2F0IG9jY2x1c2lvbkRlcHRoO1xuZmxvYXQgZGlmZmVyZW5jZTtcbmZvciAoaW50IGk9MDsg
aTxTQU1QTEVTOyBpKyspXG57XG5yYXk9cmFkaXVzRGVwdGgqcmVmbGVjdChzYW1wbGVTcGhlcmVb
aV0scmFuZG9tKTtcbmhlbWlSYXk9cG9zaXRpb24rc2lnbihkb3QocmF5LG5vcm1hbCkpKnJheTtc
bm9jY2x1c2lvbkRlcHRoPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcixjbGFtcChoZW1pUmF5Lnh5
LHZlYzIoMC4wMDEsMC4wMDEpLHZlYzIoMC45OTksMC45OTkpKSkucjtcbmRpZmZlcmVuY2U9ZGVw
dGgtb2NjbHVzaW9uRGVwdGg7XG5vY2NsdXNpb24rPXN0ZXAoZmFsbE9mZixkaWZmZXJlbmNlKSoo
MS4wLXNtb290aHN0ZXAoZmFsbE9mZixhcmVhLGRpZmZlcmVuY2UpKTtcbn1cbmZsb2F0IGFvPTEu
MC10b3RhbFN0cmVuZ3RoKm9jY2x1c2lvbipzYW1wbGVzRmFjdG9yO1xuZmxvYXQgcmVzdWx0PWNs
YW1wKGFvK2Jhc2UsMC4wLDEuMCk7XG5nbF9GcmFnQ29sb3Iucj1yZXN1bHQ7XG5nbF9GcmFnQ29s
b3IuZz1yZXN1bHQ7XG5nbF9GcmFnQ29sb3IuYj1yZXN1bHQ7XG5nbF9GcmFnQ29sb3IuYT0xLjA7
XG59XG4jZW5kaWZcbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRl
biAqLwordmFyIHNzYW9QaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIg
fTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9zc2FvMi5mcmFnbWVudC50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hh
ZGVycy9zc2FvMi5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBzc2FvMlBpeGVsU2hhZGVyICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNzYW8yUGl4ZWxTaGFkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIHNzYW8yUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFs
cy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnc3NhbzJQaXhlbFNoYWRlcic7Cit2YXIgc2hh
ZGVyID0gIlxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVy
ZVNhbXBsZXI7XG51bmlmb3JtIGZsb2F0IG5lYXI7XG51bmlmb3JtIGZsb2F0IGZhcjtcbnVuaWZv
cm0gZmxvYXQgcmFkaXVzO1xuZmxvYXQgc2NhbGVzWzE2XT1mbG9hdFsxNl0oXG4wLjEsXG4wLjEx
NDA2MjUwMDAwMDAwMDAxLFxuMC4xMzE2NDA2MjUsXG4wLjE1NjI1LFxuMC4xODc4OTA2MjUsXG4w
LjIyNjU2MjUsXG4wLjI3MjI2NTYyNSxcbjAuMzI1LFxuMC4zODQ3NjU2MjUsXG4wLjQ1MTU2MjUs
XG4wLjUyNTM5MDYyNSxcbjAuNjA2MjUsXG4wLjY5NDE0MDYyNSxcbjAuNzg5MDYyNSxcbjAuODkx
MDE1NjI1LFxuMS4wXG4pO1xudmFyeWluZyB2ZWMyIHZVVjtcbmZsb2F0IHBlcnNwZWN0aXZlRGVw
dGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWixjb25zdCBpbiBmbG9hdCBuZWFyLGNv
bnN0IGluIGZsb2F0IGZhciApIHtcbnJldHVybiAoIG5lYXIqZmFyICkvKCAoIGZhci1uZWFyICkq
aW52Q2xpcFotZmFyICk7XG59XG5mbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3Qg
aW4gZmxvYXQgdmlld1osY29uc3QgaW4gZmxvYXQgbmVhcixjb25zdCBpbiBmbG9hdCBmYXIgKSB7
XG5yZXR1cm4gKCBuZWFyKmZhci92aWV3WitmYXIpLyggZmFyLW5lYXIgKTtcbn1cbmZsb2F0IHZp
ZXdaVG9PcnRob2dyYXBoaWNEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osY29uc3QgaW4gZmxv
YXQgbmVhcixjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5yZXR1cm4gKCB2aWV3WituZWFyICkvKCBu
ZWFyLWZhciApO1xufVxuI2lmZGVmIFNTQU9cbnVuaWZvcm0gc2FtcGxlcjJEIHJhbmRvbVNhbXBs
ZXI7XG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxTYW1wbGVyO1xudW5pZm9ybSBmbG9hdCByYW5k
VGV4dHVyZVRpbGVzO1xudW5pZm9ybSBmbG9hdCBzYW1wbGVzRmFjdG9yO1xudW5pZm9ybSB2ZWMz
IHNhbXBsZVNwaGVyZVtTQU1QTEVTXTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTdHJlbmd0aDtcbnVu
aWZvcm0gZmxvYXQgYmFzZTtcbnVuaWZvcm0gZmxvYXQgeFZpZXdwb3J0O1xudW5pZm9ybSBmbG9h
dCB5Vmlld3BvcnQ7XG51bmlmb3JtIGZsb2F0IG1heFo7XG51bmlmb3JtIGZsb2F0IG1pblpBc3Bl
Y3Q7XG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xudW5pZm9ybSBtYXQ0IHByb2plY3Rpb247XG52
b2lkIG1haW4oKVxue1xudmVjMyByYW5kb209dGV4dHVyZTJEKHJhbmRvbVNhbXBsZXIsdlVWKnJh
bmRUZXh0dXJlVGlsZXMpLnJnYjtcbmZsb2F0IGRlcHRoPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxl
cix2VVYpLnI7XG5mbG9hdCBkZXB0aFNpZ249ZGVwdGgvYWJzKGRlcHRoKTtcbmRlcHRoPWRlcHRo
KmRlcHRoU2lnbjtcbnZlYzMgbm9ybWFsPXRleHR1cmUyRChub3JtYWxTYW1wbGVyLHZVVikucmdi
O1xuZmxvYXQgb2NjbHVzaW9uPTAuMDtcbmZsb2F0IGNvcnJlY3RlZFJhZGl1cz1taW4ocmFkaXVz
LG1pblpBc3BlY3QqZGVwdGgvbmVhcik7XG52ZWMzIHZWaWV3UmF5PXZlYzMoKHZVVi54KjIuMC0x
LjApKnhWaWV3cG9ydCwodlVWLnkqMi4wLTEuMCkqeVZpZXdwb3J0LGRlcHRoU2lnbik7XG52ZWMz
IG9yaWdpbj12Vmlld1JheSpkZXB0aDtcbnZlYzMgcnZlYz1yYW5kb20qMi4wLTEuMDtcbnJ2ZWMu
ej0wLjA7XG5cbmZsb2F0IGRvdFByb2R1Y3Q9ZG90KHJ2ZWMsbm9ybWFsKTtcbnJ2ZWM9MS4wLWFi
cyhkb3RQcm9kdWN0KT4xZS0yID8gcnZlYyA6IHZlYzMoLXJ2ZWMueSwwLjAscnZlYy54KTtcbnZl
YzMgdGFuZ2VudD1ub3JtYWxpemUocnZlYy1ub3JtYWwqZG90KHJ2ZWMsbm9ybWFsKSk7XG52ZWMz
IGJpdGFuZ2VudD1jcm9zcyhub3JtYWwsdGFuZ2VudCk7XG5tYXQzIHRibj1tYXQzKHRhbmdlbnQs
Yml0YW5nZW50LG5vcm1hbCk7XG5mbG9hdCBkaWZmZXJlbmNlO1xuZm9yIChpbnQgaT0wOyBpPFNB
TVBMRVM7ICsraSkge1xuXG52ZWMzIHNhbXBsZVBvc2l0aW9uPXNjYWxlc1soaStpbnQocmFuZG9t
LngqMTYuMCkpICUgMTZdKnRibipzYW1wbGVTcGhlcmVbKGkraW50KHJhbmRvbS55KjE2LjApKSAl
IDE2XTtcbnNhbXBsZVBvc2l0aW9uPXNhbXBsZVBvc2l0aW9uKmNvcnJlY3RlZFJhZGl1cytvcmln
aW47XG5cbnZlYzQgb2Zmc2V0PXZlYzQoc2FtcGxlUG9zaXRpb24sMS4wKTtcbm9mZnNldD1wcm9q
ZWN0aW9uKm9mZnNldDtcbm9mZnNldC54eXovPW9mZnNldC53O1xub2Zmc2V0Lnh5PW9mZnNldC54
eSowLjUrMC41O1xuaWYgKG9mZnNldC54PDAuMCB8fCBvZmZzZXQueTwwLjAgfHwgb2Zmc2V0Lng+
MS4wIHx8IG9mZnNldC55PjEuMCkge1xuY29udGludWU7XG59XG5cbmZsb2F0IHNhbXBsZURlcHRo
PWFicyh0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsb2Zmc2V0Lnh5KS5yKTtcblxuZGlmZmVyZW5j
ZT1kZXB0aFNpZ24qc2FtcGxlUG9zaXRpb24uei1zYW1wbGVEZXB0aDtcbmZsb2F0IHJhbmdlQ2hl
Y2s9MS4wLXNtb290aHN0ZXAoY29ycmVjdGVkUmFkaXVzKjAuNSxjb3JyZWN0ZWRSYWRpdXMsZGlm
ZmVyZW5jZSk7XG5vY2NsdXNpb24rPShkaWZmZXJlbmNlPj0wLjAgPyAxLjAgOiAwLjApKnJhbmdl
Q2hlY2s7XG59XG5vY2NsdXNpb249b2NjbHVzaW9uKigxLjAtc21vb3Roc3RlcChtYXhaKjAuNzUs
bWF4WixkZXB0aCkpO1xuZmxvYXQgYW89MS4wLXRvdGFsU3RyZW5ndGgqb2NjbHVzaW9uKnNhbXBs
ZXNGYWN0b3I7XG5mbG9hdCByZXN1bHQ9Y2xhbXAoYW8rYmFzZSwwLjAsMS4wKTtcbmdsX0ZyYWdD
b2xvcj12ZWM0KHZlYzMocmVzdWx0KSwxLjApO1xufVxuI2VuZGlmXG4jaWZkZWYgQklMQVRFUkFM
X0JMVVJcbnVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoU2FtcGxlcjtcbnVuaWZvcm0gZmxvYXQgb3V0
U2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2FtcGxlck9mZnNldHNbU0FNUExFU107XG52ZWM0IGJsdXI5
KHNhbXBsZXIyRCBpbWFnZSx2ZWMyIHV2LGZsb2F0IHJlc29sdXRpb24sdmVjMiBkaXJlY3Rpb24p
IHtcbnZlYzQgY29sb3I9dmVjNCgwLjApO1xudmVjMiBvZmYxPXZlYzIoMS4zODQ2MTUzODQ2KSpk
aXJlY3Rpb247XG52ZWMyIG9mZjI9dmVjMigzLjIzMDc2OTIzMDgpKmRpcmVjdGlvbjtcbmNvbG9y
Kz10ZXh0dXJlMkQoaW1hZ2UsdXYpKjAuMjI3MDI3MDI3MDtcbmNvbG9yKz10ZXh0dXJlMkQoaW1h
Z2UsdXYrKG9mZjEvcmVzb2x1dGlvbikpKjAuMzE2MjE2MjE2MjtcbmNvbG9yKz10ZXh0dXJlMkQo
aW1hZ2UsdXYtKG9mZjEvcmVzb2x1dGlvbikpKjAuMzE2MjE2MjE2MjtcbmNvbG9yKz10ZXh0dXJl
MkQoaW1hZ2UsdXYrKG9mZjIvcmVzb2x1dGlvbikpKjAuMDcwMjcwMjcwMztcbmNvbG9yKz10ZXh0
dXJlMkQoaW1hZ2UsdXYtKG9mZjIvcmVzb2x1dGlvbikpKjAuMDcwMjcwMjcwMztcbnJldHVybiBj
b2xvcjtcbn1cbnZlYzQgYmx1cjEzKHNhbXBsZXIyRCBpbWFnZSx2ZWMyIHV2LGZsb2F0IHJlc29s
dXRpb24sdmVjMiBkaXJlY3Rpb24pIHtcbnZlYzQgY29sb3I9dmVjNCgwLjApO1xudmVjMiBvZmYx
PXZlYzIoMS40MTE3NjQ3MDU4ODIzNTMpKmRpcmVjdGlvbjtcbnZlYzIgb2ZmMj12ZWMyKDMuMjk0
MTE3NjQ3MDU4ODIzNCkqZGlyZWN0aW9uO1xudmVjMiBvZmYzPXZlYzIoNS4xNzY0NzA1ODgyMzUy
OTQpKmRpcmVjdGlvbjtcbmNvbG9yKz10ZXh0dXJlMkQoaW1hZ2UsdXYpKjAuMTk2NDgyNTUwMTUx
MTQwNDtcbmNvbG9yKz10ZXh0dXJlMkQoaW1hZ2UsdXYrKG9mZjEvcmVzb2x1dGlvbikpKjAuMjk2
OTA2OTY0NjcyODM0NDtcbmNvbG9yKz10ZXh0dXJlMkQoaW1hZ2UsdXYtKG9mZjEvcmVzb2x1dGlv
bikpKjAuMjk2OTA2OTY0NjcyODM0NDtcbmNvbG9yKz10ZXh0dXJlMkQoaW1hZ2UsdXYrKG9mZjIv
cmVzb2x1dGlvbikpKjAuMDk0NDcwMzk3ODUwNDQ3MzI7XG5jb2xvcis9dGV4dHVyZTJEKGltYWdl
LHV2LShvZmYyL3Jlc29sdXRpb24pKSowLjA5NDQ3MDM5Nzg1MDQ0NzMyO1xuY29sb3IrPXRleHR1
cmUyRChpbWFnZSx1disob2ZmMy9yZXNvbHV0aW9uKSkqMC4wMTAzODEzNjI0MDExNDgwNTc7XG5j
b2xvcis9dGV4dHVyZTJEKGltYWdlLHV2LShvZmYzL3Jlc29sdXRpb24pKSowLjAxMDM4MTM2MjQw
MTE0ODA1NztcbnJldHVybiBjb2xvcjtcbn1cbnZlYzQgYmx1cjEzQmlsYXRlcmFsKHNhbXBsZXIy
RCBpbWFnZSx2ZWMyIHV2LGZsb2F0IHJlc29sdXRpb24sdmVjMiBkaXJlY3Rpb24pIHtcbnZlYzQg
Y29sb3I9dmVjNCgwLjApO1xudmVjMiBvZmYxPXZlYzIoMS40MTE3NjQ3MDU4ODIzNTMpKmRpcmVj
dGlvbjtcbnZlYzIgb2ZmMj12ZWMyKDMuMjk0MTE3NjQ3MDU4ODIzNCkqZGlyZWN0aW9uO1xudmVj
MiBvZmYzPXZlYzIoNS4xNzY0NzA1ODgyMzUyOTQpKmRpcmVjdGlvbjtcbmZsb2F0IGNvbXBhcmVE
ZXB0aD1hYnModGV4dHVyZTJEKGRlcHRoU2FtcGxlcix1dikucik7XG5mbG9hdCBzYW1wbGVEZXB0
aDtcbmZsb2F0IHdlaWdodDtcbmZsb2F0IHdlaWdodFN1bT0zMC4wO1xuY29sb3IrPXRleHR1cmUy
RChpbWFnZSx1dikqMzAuMDtcbnNhbXBsZURlcHRoPWFicyh0ZXh0dXJlMkQoZGVwdGhTYW1wbGVy
LHV2KyhvZmYxL3Jlc29sdXRpb24pKS5yKTtcbndlaWdodD1jbGFtcCgxLjAvKCAwLjAwMythYnMo
Y29tcGFyZURlcHRoLXNhbXBsZURlcHRoKSksMC4wLDMwLjApO1xud2VpZ2h0U3VtKz13ZWlnaHQ7
XG5jb2xvcis9dGV4dHVyZTJEKGltYWdlLHV2KyhvZmYxL3Jlc29sdXRpb24pKSp3ZWlnaHQ7XG5z
YW1wbGVEZXB0aD1hYnModGV4dHVyZTJEKGRlcHRoU2FtcGxlcix1di0ob2ZmMS9yZXNvbHV0aW9u
KSkucik7XG53ZWlnaHQ9Y2xhbXAoMS4wLyggMC4wMDMrYWJzKGNvbXBhcmVEZXB0aC1zYW1wbGVE
ZXB0aCkpLDAuMCwzMC4wKTtcbndlaWdodFN1bSs9d2VpZ2h0O1xuY29sb3IrPXRleHR1cmUyRChp
bWFnZSx1di0ob2ZmMS9yZXNvbHV0aW9uKSkqd2VpZ2h0O1xuc2FtcGxlRGVwdGg9YWJzKHRleHR1
cmUyRChkZXB0aFNhbXBsZXIsdXYrKG9mZjIvcmVzb2x1dGlvbikpLnIpO1xud2VpZ2h0PWNsYW1w
KDEuMC8oIDAuMDAzK2Ficyhjb21wYXJlRGVwdGgtc2FtcGxlRGVwdGgpKSwwLjAsMzAuMCk7XG53
ZWlnaHRTdW0rPXdlaWdodDtcbmNvbG9yKz10ZXh0dXJlMkQoaW1hZ2UsdXYrKG9mZjIvcmVzb2x1
dGlvbikpKndlaWdodDtcbnNhbXBsZURlcHRoPWFicyh0ZXh0dXJlMkQoZGVwdGhTYW1wbGVyLHV2
LShvZmYyL3Jlc29sdXRpb24pKS5yKTtcbndlaWdodD1jbGFtcCgxLjAvKCAwLjAwMythYnMoY29t
cGFyZURlcHRoLXNhbXBsZURlcHRoKSksMC4wLDMwLjApO1xud2VpZ2h0U3VtKz13ZWlnaHQ7XG5j
b2xvcis9dGV4dHVyZTJEKGltYWdlLHV2LShvZmYyL3Jlc29sdXRpb24pKSp3ZWlnaHQ7XG5zYW1w
bGVEZXB0aD1hYnModGV4dHVyZTJEKGRlcHRoU2FtcGxlcix1disob2ZmMy9yZXNvbHV0aW9uKSku
cik7XG53ZWlnaHQ9Y2xhbXAoMS4wLyggMC4wMDMrYWJzKGNvbXBhcmVEZXB0aC1zYW1wbGVEZXB0
aCkpLDAuMCwzMC4wKTtcbndlaWdodFN1bSs9d2VpZ2h0O1xuY29sb3IrPXRleHR1cmUyRChpbWFn
ZSx1disob2ZmMy9yZXNvbHV0aW9uKSkqd2VpZ2h0O1xuc2FtcGxlRGVwdGg9YWJzKHRleHR1cmUy
RChkZXB0aFNhbXBsZXIsdXYtKG9mZjMvcmVzb2x1dGlvbikpLnIpO1xud2VpZ2h0PWNsYW1wKDEu
MC8oIDAuMDAzK2Ficyhjb21wYXJlRGVwdGgtc2FtcGxlRGVwdGgpKSwwLjAsMzAuMCk7XG53ZWln
aHRTdW0rPXdlaWdodDtcbmNvbG9yKz10ZXh0dXJlMkQoaW1hZ2UsdXYtKG9mZjMvcmVzb2x1dGlv
bikpKndlaWdodDtcbnJldHVybiBjb2xvci93ZWlnaHRTdW07XG59XG52b2lkIG1haW4oKVxue1xu
I2lmIEVYUEVOU0lWRVxuZmxvYXQgY29tcGFyZURlcHRoPWFicyh0ZXh0dXJlMkQoZGVwdGhTYW1w
bGVyLHZVVikucik7XG5mbG9hdCB0ZXhlbHNpemU9MS4wL291dFNpemU7XG5mbG9hdCByZXN1bHQ9
MC4wO1xuZmxvYXQgd2VpZ2h0U3VtPTAuMDtcbmZvciAoaW50IGk9MDsgaTxTQU1QTEVTOyArK2kp
XG57XG4jaWZkZWYgQklMQVRFUkFMX0JMVVJfSFxudmVjMiBkaXJlY3Rpb249dmVjMigxLjAsMC4w
KTtcbnZlYzIgc2FtcGxlT2Zmc2V0PXZlYzIodGV4ZWxzaXplKnNhbXBsZXJPZmZzZXRzW2ldLDAu
MCk7XG4jZWxzZVxudmVjMiBkaXJlY3Rpb249dmVjMigwLjAsMS4wKTtcbnZlYzIgc2FtcGxlT2Zm
c2V0PXZlYzIoMC4wLHRleGVsc2l6ZSpzYW1wbGVyT2Zmc2V0c1tpXSk7XG4jZW5kaWZcbnZlYzIg
c2FtcGxlUG9zPXZVVitzYW1wbGVPZmZzZXQ7XG5mbG9hdCBzYW1wbGVEZXB0aD1hYnModGV4dHVy
ZTJEKGRlcHRoU2FtcGxlcixzYW1wbGVQb3MpLnIpO1xuZmxvYXQgd2VpZ2h0PWNsYW1wKDEuMC8o
IDAuMDAzK2Ficyhjb21wYXJlRGVwdGgtc2FtcGxlRGVwdGgpKSwwLjAsMzAwMDAuMCk7XG5yZXN1
bHQrPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcixzYW1wbGVQb3MpLnIqd2VpZ2h0O1xud2VpZ2h0
U3VtKz13ZWlnaHQ7XG59XG5yZXN1bHQvPXdlaWdodFN1bTtcbmdsX0ZyYWdDb2xvci5yZ2I9dmVj
MyhyZXN1bHQpO1xuZ2xfRnJhZ0NvbG9yLmE9MS4wO1xuI2Vsc2VcbnZlYzQgY29sb3I7XG4jaWZk
ZWYgQklMQVRFUkFMX0JMVVJfSFxudmVjMiBkaXJlY3Rpb249dmVjMigxLjAsMC4wKTtcbmNvbG9y
PWJsdXIxM0JpbGF0ZXJhbCh0ZXh0dXJlU2FtcGxlcix2VVYsb3V0U2l6ZSxkaXJlY3Rpb24pO1xu
I2Vsc2VcbnZlYzIgZGlyZWN0aW9uPXZlYzIoMC4wLDEuMCk7XG5jb2xvcj1ibHVyMTNCaWxhdGVy
YWwodGV4dHVyZVNhbXBsZXIsdlVWLG91dFNpemUsZGlyZWN0aW9uKTtcbiNlbmRpZlxuZ2xfRnJh
Z0NvbG9yLnJnYj12ZWMzKGNvbG9yLnIpO1xuZ2xfRnJhZ0NvbG9yLmE9MS4wO1xuI2VuZGlmXG59
XG4jZW5kaWZcbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAq
LwordmFyIHNzYW8yUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvc3Nhb0NvbWJpbmUuZnJhZ21lbnQu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1NoYWRlcnMvc3Nhb0NvbWJpbmUuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
c3Nhb0NvbWJpbmVQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJzc2FvQ29tYmluZVBpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzc2FvQ29t
YmluZVBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisK
K3ZhciBuYW1lID0gJ3NzYW9Db21iaW5lUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJ1bmlm
b3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbnVuaWZvcm0gc2FtcGxlcjJEIG9yaWdpbmFs
Q29sb3I7XG51bmlmb3JtIHZlYzQgdmlld3BvcnQ7XG52YXJ5aW5nIHZlYzIgdlVWO1xudm9pZCBt
YWluKHZvaWQpIHtcbnZlYzQgc3Nhb0NvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2aWV3
cG9ydC54eSt2VVYqdmlld3BvcnQuencpO1xudmVjNCBzY2VuZUNvbG9yPXRleHR1cmUyRChvcmln
aW5hbENvbG9yLHZVVik7XG5nbF9GcmFnQ29sb3I9c2NlbmVDb2xvcipzc2FvQ29sb3I7XG59XG4i
OworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0
Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBzc2Fv
Q29tYmluZVBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL3N0YW5kYXJkLmZyYWdtZW50LnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFk
ZXJzL3N0YW5kYXJkLmZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHN0YW5kYXJkUGl4ZWxTaGFk
ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic3RhbmRhcmRQaXhlbFNo
YWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhbmRhcmRQaXhlbFNoYWRlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9T
aGFkZXJzSW5jbHVkZV9wYWNraW5nRnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL3BhY2tpbmdGdW5j
dGlvbnMgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYWNraW5nRnVuY3Rpb25zLnRzIik7
CisKKwordmFyIG5hbWUgPSAnc3RhbmRhcmRQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gInVu
aWZvcm0gc2FtcGxlcjJEIHRleHR1cmVTYW1wbGVyO1xudmFyeWluZyB2ZWMyIHZVVjtcbiNpZiBk
ZWZpbmVkKFBBU1NfUE9TVF9QUk9DRVNTKVxudm9pZCBtYWluKHZvaWQpXG57XG52ZWM0IGNvbG9y
PXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xuZ2xfRnJhZ0NvbG9yPWNvbG9yO1xufVxu
I2VuZGlmXG4jaWYgZGVmaW5lZChET1dOX1NBTVBMRV9YNClcbnVuaWZvcm0gdmVjMiBkc09mZnNl
dHNbMTZdO1xudm9pZCBtYWluKHZvaWQpXG57XG52ZWM0IGF2ZXJhZ2U9dmVjNCgwLjAsMC4wLDAu
MCwwLjApO1xuYXZlcmFnZT10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1sw
XSk7XG5hdmVyYWdlKz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1sxXSk7
XG5hdmVyYWdlKz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1syXSk7XG5h
dmVyYWdlKz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1szXSk7XG5hdmVy
YWdlKz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1s0XSk7XG5hdmVyYWdl
Kz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1s1XSk7XG5hdmVyYWdlKz10
ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1s2XSk7XG5hdmVyYWdlKz10ZXh0
dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1s3XSk7XG5hdmVyYWdlKz10ZXh0dXJl
MkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1s4XSk7XG5hdmVyYWdlKz10ZXh0dXJlMkQo
dGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1s5XSk7XG5hdmVyYWdlKz10ZXh0dXJlMkQodGV4
dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1sxMF0pO1xuYXZlcmFnZSs9dGV4dHVyZTJEKHRleHR1
cmVTYW1wbGVyLHZVVitkc09mZnNldHNbMTFdKTtcbmF2ZXJhZ2UrPXRleHR1cmUyRCh0ZXh0dXJl
U2FtcGxlcix2VVYrZHNPZmZzZXRzWzEyXSk7XG5hdmVyYWdlKz10ZXh0dXJlMkQodGV4dHVyZVNh
bXBsZXIsdlVWK2RzT2Zmc2V0c1sxM10pO1xuYXZlcmFnZSs9dGV4dHVyZTJEKHRleHR1cmVTYW1w
bGVyLHZVVitkc09mZnNldHNbMTRdKTtcbmF2ZXJhZ2UrPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxl
cix2VVYrZHNPZmZzZXRzWzE1XSk7XG5hdmVyYWdlLz0xNi4wO1xuZ2xfRnJhZ0NvbG9yPWF2ZXJh
Z2U7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKEJSSUdIVF9QQVNTKVxudW5pZm9ybSB2ZWMyIGRz
T2Zmc2V0c1s0XTtcbnVuaWZvcm0gZmxvYXQgYnJpZ2h0VGhyZXNob2xkO1xudm9pZCBtYWluKHZv
aWQpXG57XG52ZWM0IGF2ZXJhZ2U9dmVjNCgwLjAsMC4wLDAuMCwwLjApO1xuYXZlcmFnZT10ZXh0
dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoZHNPZmZzZXRzWzBdLngsZHNPZmZzZXRzWzBd
LnkpKTtcbmF2ZXJhZ2UrPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMihkc09mZnNl
dHNbMV0ueCxkc09mZnNldHNbMV0ueSkpO1xuYXZlcmFnZSs9dGV4dHVyZTJEKHRleHR1cmVTYW1w
bGVyLHZVVit2ZWMyKGRzT2Zmc2V0c1syXS54LGRzT2Zmc2V0c1syXS55KSk7XG5hdmVyYWdlKz10
ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoZHNPZmZzZXRzWzNdLngsZHNPZmZzZXRz
WzNdLnkpKTtcbmF2ZXJhZ2UqPTAuMjU7XG5mbG9hdCBsdW1pbmFuY2U9bGVuZ3RoKGF2ZXJhZ2Uu
cmdiKTtcbmlmIChsdW1pbmFuY2U8YnJpZ2h0VGhyZXNob2xkKSB7XG5hdmVyYWdlPXZlYzQoMC4w
LDAuMCwwLjAsMS4wKTtcbn1cbmdsX0ZyYWdDb2xvcj1hdmVyYWdlO1xufVxuI2VuZGlmXG4jaWYg
ZGVmaW5lZChURVhUVVJFX0FEREVSKVxudW5pZm9ybSBzYW1wbGVyMkQgb3RoZXJTYW1wbGVyO1xu
dW5pZm9ybSBzYW1wbGVyMkQgbGVuc1NhbXBsZXI7XG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlO1xu
dm9pZCBtYWluKHZvaWQpXG57XG52ZWMzIGNvbG91cj10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIs
dlVWKS5yZ2I7XG5jb2xvdXIqPWV4cG9zdXJlO1xudmVjMyBYPW1heCh2ZWMzKDAuMCwwLjAsMC4w
KSxjb2xvdXItMC4wMDQpO1xudmVjMyByZXRDb2xvcj0oWCooNi4yKlgrMC41KSkvKFgqKDYuMipY
KzEuNykrMC4wNik7XG5jb2xvdXI9cmV0Q29sb3IqcmV0Q29sb3I7XG5jb2xvdXIrPWNvbG91cip0
ZXh0dXJlMkQobGVuc1NhbXBsZXIsdlVWKS5yZ2I7XG52ZWM0IGZpbmFsQ29sb3I9dmVjNChjb2xv
dXIucmdiLDEuMCkrdGV4dHVyZTJEKG90aGVyU2FtcGxlcix2VVYpO1xuZ2xfRnJhZ0NvbG9yPWZp
bmFsQ29sb3I7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKFZMUylcbiNkZWZpbmUgUEkgMy4xNDE1
OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1XG51bmlmb3JtIG1hdDQgc2hhZG93Vmlld1Byb2pl
Y3Rpb247XG51bmlmb3JtIG1hdDQgbGlnaHRXb3JsZDtcbnVuaWZvcm0gdmVjMyBjYW1lcmFQb3Np
dGlvbjtcbnVuaWZvcm0gdmVjMyBzdW5EaXJlY3Rpb247XG51bmlmb3JtIHZlYzMgc3VuQ29sb3I7
XG51bmlmb3JtIHZlYzIgZGVwdGhWYWx1ZXM7XG51bmlmb3JtIGZsb2F0IHNjYXR0ZXJpbmdDb2Vm
ZmljaWVudDtcbnVuaWZvcm0gZmxvYXQgc2NhdHRlcmluZ1Bvd2VyO1xudW5pZm9ybSBzYW1wbGVy
MkQgc2hhZG93TWFwU2FtcGxlcjtcbnVuaWZvcm0gc2FtcGxlcjJEIHBvc2l0aW9uU2FtcGxlcjtc
bmZsb2F0IGNvbXB1dGVTY2F0dGVyaW5nKGZsb2F0IGxpZ2h0RG90VmlldylcbntcbmZsb2F0IHJl
c3VsdD0xLjAtc2NhdHRlcmluZ0NvZWZmaWNpZW50KnNjYXR0ZXJpbmdDb2VmZmljaWVudDtcbnJl
c3VsdC89KDQuMCpQSSpwb3coMS4wK3NjYXR0ZXJpbmdDb2VmZmljaWVudCpzY2F0dGVyaW5nQ29l
ZmZpY2llbnQtKDIuMCpzY2F0dGVyaW5nQ29lZmZpY2llbnQpKmxpZ2h0RG90VmlldywxLjUpKTtc
bnJldHVybiByZXN1bHQ7XG59XG52b2lkIG1haW4odm9pZClcbntcblxudmVjMyB3b3JsZFBvcz10
ZXh0dXJlMkQocG9zaXRpb25TYW1wbGVyLHZVVikucmdiO1xudmVjMyBzdGFydFBvc2l0aW9uPWNh
bWVyYVBvc2l0aW9uO1xudmVjMyByYXlWZWN0b3I9d29ybGRQb3Mtc3RhcnRQb3NpdGlvbjtcbmZs
b2F0IHJheUxlbmd0aD1sZW5ndGgocmF5VmVjdG9yKTtcbnZlYzMgcmF5RGlyZWN0aW9uPXJheVZl
Y3Rvci9yYXlMZW5ndGg7XG5mbG9hdCBzdGVwTGVuZ3RoPXJheUxlbmd0aC9OQl9TVEVQUztcbnZl
YzMgc3RlcEw9cmF5RGlyZWN0aW9uKnN0ZXBMZW5ndGg7XG52ZWMzIGN1cnJlbnRQb3NpdGlvbj1z
dGFydFBvc2l0aW9uO1xudmVjMyBhY2N1bUZvZz12ZWMzKDAuMCk7XG5mb3IgKGludCBpPTA7IGk8
aW50KE5CX1NURVBTKTsgaSsrKVxue1xudmVjNCB3b3JsZEluU2hhZG93Q2FtZXJhU3BhY2U9c2hh
ZG93Vmlld1Byb2plY3Rpb24qdmVjNChjdXJyZW50UG9zaXRpb24sMS4wKTtcbmZsb2F0IGRlcHRo
TWV0cmljPSh3b3JsZEluU2hhZG93Q2FtZXJhU3BhY2UueitkZXB0aFZhbHVlcy54KS8oZGVwdGhW
YWx1ZXMueSk7XG5mbG9hdCBzaGFkb3dQaXhlbERlcHRoPWNsYW1wKGRlcHRoTWV0cmljLDAuMCwx
LjApO1xud29ybGRJblNoYWRvd0NhbWVyYVNwYWNlLnh5ei89d29ybGRJblNoYWRvd0NhbWVyYVNw
YWNlLnc7XG53b3JsZEluU2hhZG93Q2FtZXJhU3BhY2UueHl6PTAuNSp3b3JsZEluU2hhZG93Q2Ft
ZXJhU3BhY2UueHl6K3ZlYzMoMC41KTtcbmZsb2F0IHNoYWRvd01hcFZhbHVlPXRleHR1cmUyRChz
aGFkb3dNYXBTYW1wbGVyLHdvcmxkSW5TaGFkb3dDYW1lcmFTcGFjZS54eSkucjtcbmlmIChzaGFk
b3dNYXBWYWx1ZT5zaGFkb3dQaXhlbERlcHRoKVxuYWNjdW1Gb2crPXN1bkNvbG9yKmNvbXB1dGVT
Y2F0dGVyaW5nKGRvdChyYXlEaXJlY3Rpb24sc3VuRGlyZWN0aW9uKSk7XG5jdXJyZW50UG9zaXRp
b24rPXN0ZXBMO1xufVxuYWNjdW1Gb2cvPU5CX1NURVBTO1xudmVjMyBjb2xvcj1hY2N1bUZvZypz
Y2F0dGVyaW5nUG93ZXI7XG5nbF9GcmFnQ29sb3I9dmVjNChjb2xvcipleHAoY29sb3IpICwxLjAp
O1xufVxuI2VuZGlmXG4jaWYgZGVmaW5lZChWTFNNRVJHRSlcbnVuaWZvcm0gc2FtcGxlcjJEIG9y
aWdpbmFsU2FtcGxlcjtcbnZvaWQgbWFpbih2b2lkKVxue1xuZ2xfRnJhZ0NvbG9yPXRleHR1cmUy
RChvcmlnaW5hbFNhbXBsZXIsdlVWKSt0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWKTtcbn1c
biNlbmRpZlxuI2lmIGRlZmluZWQoTFVNSU5BTkNFKVxudW5pZm9ybSB2ZWMyIGx1bU9mZnNldHNb
NF07XG52b2lkIG1haW4oKVxue1xuZmxvYXQgYXZlcmFnZT0wLjA7XG52ZWM0IGNvbG9yPXZlYzQo
MC4wKTtcbmZsb2F0IG1heGltdW09LTFlMjA7XG52ZWMzIHdlaWdodD12ZWMzKDAuMjk5LDAuNTg3
LDAuMTE0KTtcbmZvciAoaW50IGk9MDsgaTw0OyBpKyspXG57XG5jb2xvcj10ZXh0dXJlMkQodGV4
dHVyZVNhbXBsZXIsdlVWKyBsdW1PZmZzZXRzW2ldKTtcblxuZmxvYXQgR3JleVZhbHVlPWRvdChj
b2xvci5yZ2IsdmVjMygwLjMzLDAuMzMsMC4zMykpO1xuXG4jaWZkZWYgV0VJR0hURURfQVZFUkFH
RVxuZmxvYXQgR3JleVZhbHVlPWRvdChjb2xvci5yZ2Isd2VpZ2h0KTtcbiNlbmRpZlxuI2lmZGVm
IEJSSUdIVE5FU1NcbmZsb2F0IEdyZXlWYWx1ZT1tYXgoY29sb3IucixtYXgoY29sb3IuZyxjb2xv
ci5iKSk7XG4jZW5kaWZcbiNpZmRlZiBIU0xfQ09NUE9ORU5UXG5mbG9hdCBHcmV5VmFsdWU9MC41
KihtYXgoY29sb3IucixtYXgoY29sb3IuZyxjb2xvci5iKSkrbWluKGNvbG9yLnIsbWluKGNvbG9y
LmcsY29sb3IuYikpKTtcbiNlbmRpZlxuI2lmZGVmIE1BR05JVFVERVxuZmxvYXQgR3JleVZhbHVl
PWxlbmd0aChjb2xvci5yZ2IpO1xuI2VuZGlmXG5tYXhpbXVtPW1heChtYXhpbXVtLEdyZXlWYWx1
ZSk7XG5hdmVyYWdlKz0oMC4yNSpsb2coMWUtNStHcmV5VmFsdWUpKTtcbn1cbmF2ZXJhZ2U9ZXhw
KGF2ZXJhZ2UpO1xuZ2xfRnJhZ0NvbG9yPXZlYzQoYXZlcmFnZSxtYXhpbXVtLDAuMCwxLjApO1xu
fVxuI2VuZGlmXG4jaWYgZGVmaW5lZChMVU1JTkFOQ0VfRE9XTl9TQU1QTEUpXG51bmlmb3JtIHZl
YzIgZHNPZmZzZXRzWzldO1xudW5pZm9ybSBmbG9hdCBoYWxmRGVzdFBpeGVsU2l6ZTtcbiNpZmRl
ZiBGSU5BTF9ET1dOX1NBTVBMRVJcbiNpbmNsdWRlPHBhY2tpbmdGdW5jdGlvbnM+XG4jZW5kaWZc
bnZvaWQgbWFpbigpXG57XG52ZWM0IGNvbG9yPXZlYzQoMC4wKTtcbmZsb2F0IGF2ZXJhZ2U9MC4w
O1xuZm9yIChpbnQgaT0wOyBpPDk7IGkrKylcbntcbmNvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2Ft
cGxlcix2VVYrdmVjMihoYWxmRGVzdFBpeGVsU2l6ZSxoYWxmRGVzdFBpeGVsU2l6ZSkrZHNPZmZz
ZXRzW2ldKTtcbmF2ZXJhZ2UrPWNvbG9yLnI7XG59XG5hdmVyYWdlLz05LjA7XG4jaWZkZWYgRklO
QUxfRE9XTl9TQU1QTEVSXG5nbF9GcmFnQ29sb3I9cGFjayhhdmVyYWdlKTtcbiNlbHNlXG5nbF9G
cmFnQ29sb3I9dmVjNChhdmVyYWdlLGF2ZXJhZ2UsMC4wLDEuMCk7XG4jZW5kaWZcbn1cbiNlbmRp
ZlxuI2lmIGRlZmluZWQoSERSKVxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZUFkZGVyU2FtcGxl
cjtcbnVuaWZvcm0gZmxvYXQgYXZlcmFnZUx1bWluYW5jZTtcbnZvaWQgbWFpbigpXG57XG52ZWM0
IGNvbG9yPXRleHR1cmUyRCh0ZXh0dXJlQWRkZXJTYW1wbGVyLHZVVik7XG4jaWZuZGVmIEFVVE9f
RVhQT1NVUkVcbnZlYzQgYWRqdXN0ZWRDb2xvcj1jb2xvci9hdmVyYWdlTHVtaW5hbmNlO1xuY29s
b3I9YWRqdXN0ZWRDb2xvcjtcbmNvbG9yLmE9MS4wO1xuI2VuZGlmXG5nbF9GcmFnQ29sb3I9Y29s
b3I7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKExFTlNfRkxBUkUpXG4jZGVmaW5lIEdIT1NUUyAz
XG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zQ29sb3JTYW1wbGVyO1xudW5pZm9ybSBmbG9hdCBzdHJl
bmd0aDtcbnVuaWZvcm0gZmxvYXQgZ2hvc3REaXNwZXJzYWw7XG51bmlmb3JtIGZsb2F0IGhhbG9X
aWR0aDtcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xudW5pZm9ybSBmbG9hdCBkaXN0b3J0aW9u
U3RyZW5ndGg7XG5mbG9hdCBoYXNoKHZlYzIgcClcbntcbmZsb2F0IGg9ZG90KHAsdmVjMigxMjcu
MSwzMTEuNykpO1xucmV0dXJuIC0xLjArMi4wKmZyYWN0KHNpbihoKSo0Mzc1OC41NDUzMTIzKTtc
bn1cbmZsb2F0IG5vaXNlKGluIHZlYzIgcClcbntcbnZlYzIgaT1mbG9vcihwKTtcbnZlYzIgZj1m
cmFjdChwKTtcbnZlYzIgdT1mKmYqKDMuMC0yLjAqZik7XG5yZXR1cm4gbWl4KG1peChoYXNoKGkr
dmVjMigwLjAsMC4wKSksXG5oYXNoKGkrdmVjMigxLjAsMC4wKSksdS54KSxcbm1peChoYXNoKGkr
dmVjMigwLjAsMS4wKSksXG5oYXNoKGkrdmVjMigxLjAsMS4wKSksdS54KSx1LnkpO1xufVxuZmxv
YXQgZmJtKHZlYzIgcClcbntcbmZsb2F0IGY9MC4wO1xuZis9MC41MDAwKm5vaXNlKHApOyBwKj0y
LjAyO1xuZis9MC4yNTAwKm5vaXNlKHApOyBwKj0yLjAzO1xuZis9MC4xMjUwKm5vaXNlKHApOyBw
Kj0yLjAxO1xuZis9MC4wNjI1Km5vaXNlKHApOyBwKj0yLjA0O1xuZi89MC45Mzc1O1xucmV0dXJu
IGY7XG59XG52ZWMzIHBhdHRlcm4odmVjMiB1dilcbntcbnZlYzIgcD0tMS4wKzIuMCp1djtcbmZs
b2F0IHAyPWRvdChwLHApO1xuZmxvYXQgZj1mYm0odmVjMigxNS4wKnAyKSkvMi4wO1xuZmxvYXQg
cj0wLjIrMC42KnNpbigxMi41Kmxlbmd0aCh1di12ZWMyKDAuNSkpKTtcbmZsb2F0IGc9MC4yKzAu
NipzaW4oMjAuNSpsZW5ndGgodXYtdmVjMigwLjUpKSk7XG5mbG9hdCBiPTAuMiswLjYqc2luKDE3
LjIqbGVuZ3RoKHV2LXZlYzIoMC41KSkpO1xucmV0dXJuICgxLjAtZikqdmVjMyhyLGcsYik7XG59
XG5mbG9hdCBsdW1pbmFuY2UodmVjMyBjb2xvcilcbntcbnJldHVybiBkb3QoY29sb3IucmdiLHZl
YzMoMC4yMTI2LDAuNzE1MiwwLjA3MjIpKTtcbn1cbnZlYzQgdGV4dHVyZURpc3RvcnRlZChzYW1w
bGVyMkQgdGV4LHZlYzIgdGV4Y29vcmQsdmVjMiBkaXJlY3Rpb24sdmVjMyBkaXN0b3J0aW9uKVxu
e1xucmV0dXJuIHZlYzQoXG50ZXh0dXJlMkQodGV4LHRleGNvb3JkK2RpcmVjdGlvbipkaXN0b3J0
aW9uLnIpLnIsXG50ZXh0dXJlMkQodGV4LHRleGNvb3JkK2RpcmVjdGlvbipkaXN0b3J0aW9uLmcp
LmcsXG50ZXh0dXJlMkQodGV4LHRleGNvb3JkK2RpcmVjdGlvbipkaXN0b3J0aW9uLmIpLmIsXG4x
LjBcbik7XG59XG52b2lkIG1haW4odm9pZClcbntcbnZlYzIgdXY9LXZVVit2ZWMyKDEuMCk7XG52
ZWMyIGdob3N0RGlyPSh2ZWMyKDAuNSktdXYpKmdob3N0RGlzcGVyc2FsO1xudmVjMiB0ZXhlbFNp
emU9MS4wL3Jlc29sdXRpb247XG52ZWMzIGRpc3RvcnRpb249dmVjMygtdGV4ZWxTaXplLngqZGlz
dG9ydGlvblN0cmVuZ3RoLDAuMCx0ZXhlbFNpemUueCpkaXN0b3J0aW9uU3RyZW5ndGgpO1xudmVj
NCByZXN1bHQ9dmVjNCgwLjApO1xuZmxvYXQgZ2hvc3RJbmRpY2U9MS4wO1xuZm9yIChpbnQgaT0w
OyBpPEdIT1NUUzsgKytpKVxue1xudmVjMiBvZmZzZXQ9ZnJhY3QodXYrZ2hvc3REaXIqZ2hvc3RJ
bmRpY2UpO1xuZmxvYXQgd2VpZ2h0PWxlbmd0aCh2ZWMyKDAuNSktb2Zmc2V0KS9sZW5ndGgodmVj
MigwLjUpKTtcbndlaWdodD1wb3coMS4wLXdlaWdodCwxMC4wKTtcbnJlc3VsdCs9dGV4dHVyZURp
c3RvcnRlZCh0ZXh0dXJlU2FtcGxlcixvZmZzZXQsbm9ybWFsaXplKGdob3N0RGlyKSxkaXN0b3J0
aW9uKSp3ZWlnaHQqc3RyZW5ndGg7XG5naG9zdEluZGljZSs9MS4wO1xufVxudmVjMiBoYWxvVmVj
PW5vcm1hbGl6ZShnaG9zdERpcikqaGFsb1dpZHRoO1xuZmxvYXQgd2VpZ2h0PWxlbmd0aCh2ZWMy
KDAuNSktZnJhY3QodXYraGFsb1ZlYykpL2xlbmd0aCh2ZWMyKDAuNSkpO1xud2VpZ2h0PXBvdygx
LjAtd2VpZ2h0LDEwLjApO1xucmVzdWx0Kz10ZXh0dXJlRGlzdG9ydGVkKHRleHR1cmVTYW1wbGVy
LGZyYWN0KHV2K2hhbG9WZWMpLG5vcm1hbGl6ZShnaG9zdERpciksZGlzdG9ydGlvbikqd2VpZ2h0
KnN0cmVuZ3RoO1xucmVzdWx0Kj10ZXh0dXJlMkQobGVuc0NvbG9yU2FtcGxlcix2ZWMyKGxlbmd0
aCh2ZWMyKDAuNSktdXYpL2xlbmd0aCh2ZWMyKDAuNSkpKSk7XG5nbF9GcmFnQ29sb3I9cmVzdWx0
O1xufVxuI2VuZGlmXG4jaWYgZGVmaW5lZChMRU5TX0ZMQVJFX0NPTVBPU0UpXG51bmlmb3JtIHNh
bXBsZXIyRCBvdGhlclNhbXBsZXI7XG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zRGlydFNhbXBsZXI7
XG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zU3RhclNhbXBsZXI7XG51bmlmb3JtIG1hdDQgbGVuc1N0
YXJNYXRyaXg7XG52b2lkIG1haW4odm9pZClcbntcbnZlYzIgbGVuc0ZsYXJlQ29vcmRzPShsZW5z
U3Rhck1hdHJpeCp2ZWM0KHZVViwxLjAsMS4wKSkueHk7XG52ZWM0IGxlbnNNb2Q9dGV4dHVyZTJE
KGxlbnNEaXJ0U2FtcGxlcix2VVYpO1xubGVuc01vZCs9dGV4dHVyZTJEKGxlbnNTdGFyU2FtcGxl
cix2VVYpO1xudmVjNCByZXN1bHQ9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVikqbGVuc01v
ZDtcbmdsX0ZyYWdDb2xvcj10ZXh0dXJlMkQob3RoZXJTYW1wbGVyLHZVVikrcmVzdWx0O1xufVxu
I2VuZGlmXG4jaWYgZGVmaW5lZChERVBUSF9PRl9GSUVMRClcbnVuaWZvcm0gc2FtcGxlcjJEIG90
aGVyU2FtcGxlcjtcbnVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoU2FtcGxlcjtcbnVuaWZvcm0gZmxv
YXQgZGlzdGFuY2U7XG52b2lkIG1haW4odm9pZClcbntcbnZlYzQgc2hhcnA9dGV4dHVyZTJEKG90
aGVyU2FtcGxlcix2VVYpO1xudmVjNCBibHVyPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYp
O1xuZmxvYXQgZGlzdD1jbGFtcCh0ZXh0dXJlMkQoZGVwdGhTYW1wbGVyLHZVVikucipkaXN0YW5j
ZSwwLjAsMS4wKTtcbmZsb2F0IGZhY3Rvcj0wLjA7XG5pZiAoZGlzdDwwLjA1KVxuZmFjdG9yPTEu
MDtcbmVsc2UgaWYgKGRpc3Q8MC4xKVxuZmFjdG9yPTIwLjAqKDAuMS1kaXN0KTtcbmVsc2UgaWYg
KGRpc3Q8MC41KVxuZmFjdG9yPTAuMDtcbmVsc2VcbmZhY3Rvcj0yLjAqKGRpc3QtMC41KTtcbmZh
Y3Rvcj1jbGFtcChmYWN0b3IsMC4wLDAuOTApO1xuZ2xfRnJhZ0NvbG9yPW1peChzaGFycCxibHVy
LGZhY3Rvcik7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKE1PVElPTl9CTFVSKVxudW5pZm9ybSBt
YXQ0IGludmVyc2VWaWV3UHJvamVjdGlvbjtcbnVuaWZvcm0gbWF0NCBwcmV2Vmlld1Byb2plY3Rp
b247XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6ZTtcbnVuaWZvcm0gZmxvYXQgbW90aW9uU2NhbGU7
XG51bmlmb3JtIGZsb2F0IG1vdGlvblN0cmVuZ3RoO1xudW5pZm9ybSBzYW1wbGVyMkQgZGVwdGhT
YW1wbGVyO1xudm9pZCBtYWluKHZvaWQpXG57XG52ZWMyIHRleGVsU2l6ZT0xLjAvc2NyZWVuU2l6
ZTtcbmZsb2F0IGRlcHRoPXRleHR1cmUyRChkZXB0aFNhbXBsZXIsdlVWKS5yO1xudmVjNCBjcG9z
PXZlYzQodlVWKjIuMC0xLjAsZGVwdGgsMS4wKTtcbmNwb3M9Y3BvcyppbnZlcnNlVmlld1Byb2pl
Y3Rpb247XG52ZWM0IHBwb3M9Y3BvcypwcmV2Vmlld1Byb2plY3Rpb247XG5wcG9zLnh5ei89cHBv
cy53O1xucHBvcy54eT1wcG9zLnh5KjAuNSswLjU7XG52ZWMyIHZlbG9jaXR5PShwcG9zLnh5LXZV
VikqbW90aW9uU2NhbGUqbW90aW9uU3RyZW5ndGg7XG5mbG9hdCBzcGVlZD1sZW5ndGgodmVsb2Np
dHkvdGV4ZWxTaXplKTtcbmludCBuU2FtcGxlcz1pbnQoY2xhbXAoc3BlZWQsMS4wLE1BWF9NT1RJ
T05fU0FNUExFUykpO1xudmVjNCByZXN1bHQ9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7
XG5mb3IgKGludCBpPTE7IGk8aW50KE1BWF9NT1RJT05fU0FNUExFUyk7ICsraSkge1xuaWYgKGk+
PW5TYW1wbGVzKVxuYnJlYWs7XG52ZWMyIG9mZnNldDE9dlVWK3ZlbG9jaXR5KihmbG9hdChpKS9m
bG9hdChuU2FtcGxlcy0xKS0wLjUpO1xucmVzdWx0Kz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIs
b2Zmc2V0MSk7XG59XG5nbF9GcmFnQ29sb3I9cmVzdWx0L2Zsb2F0KG5TYW1wbGVzKTtcbn1cbiNl
bmRpZlxuIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2
YXIgc3RhbmRhcmRQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9zdGVyZW9zY29waWNJbnRlcmxhY2Uu
ZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL3N0ZXJlb3Njb3BpY0ludGVybGFjZS5m
cmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogc3RlcmVvc2NvcGljSW50ZXJs
YWNlUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic3Rl
cmVvc2NvcGljSW50ZXJsYWNlUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0ZXJl
b3Njb3BpY0ludGVybGFjZVBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZm
ZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3N0ZXJlb3Njb3BpY0ludGVybGFjZVBpeGVsU2hhZGVy
JzsKK3ZhciBzaGFkZXIgPSAiY29uc3QgdmVjMyBUV089dmVjMygyLjAsMi4wLDIuMCk7XG52YXJ5
aW5nIHZlYzIgdlVWO1xudW5pZm9ybSBzYW1wbGVyMkQgY2FtQVNhbXBsZXI7XG51bmlmb3JtIHNh
bXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbnVuaWZvcm0gdmVjMiBzdGVwU2l6ZTtcbnZvaWQgbWFp
bih2b2lkKVxue1xuYm9vbCB1c2VDYW1CO1xudmVjMiB0ZXhDb29yZDE7XG52ZWMyIHRleENvb3Jk
MjtcbnZlYzMgZnJhZzE7XG52ZWMzIGZyYWcyO1xuI2lmZGVmIElTX1NURVJFT1NDT1BJQ19IT1JJ
WlxudXNlQ2FtQj12VVYueD4wLjU7XG50ZXhDb29yZDE9dmVjMih1c2VDYW1CID8gKHZVVi54LTAu
NSkqMi4wIDogdlVWLngqMi4wLHZVVi55KTtcbnRleENvb3JkMj12ZWMyKHRleENvb3JkMS54K3N0
ZXBTaXplLngsdlVWLnkpO1xuI2Vsc2VcbnVzZUNhbUI9dlVWLnk+MC41O1xudGV4Q29vcmQxPXZl
YzIodlVWLngsdXNlQ2FtQiA/ICh2VVYueS0wLjUpKjIuMCA6IHZVVi55KjIuMCk7XG50ZXhDb29y
ZDI9dmVjMih2VVYueCx0ZXhDb29yZDEueStzdGVwU2l6ZS55KTtcbiNlbmRpZlxuXG5pZiAodXNl
Q2FtQil7XG5mcmFnMT10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdGV4Q29vcmQxKS5yZ2I7XG5m
cmFnMj10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdGV4Q29vcmQyKS5yZ2I7XG59ZWxzZXtcbmZy
YWcxPXRleHR1cmUyRChjYW1BU2FtcGxlciAsdGV4Q29vcmQxKS5yZ2I7XG5mcmFnMj10ZXh0dXJl
MkQoY2FtQVNhbXBsZXIgLHRleENvb3JkMikucmdiO1xufVxuZ2xfRnJhZ0NvbG9yPXZlYzQoKGZy
YWcxK2ZyYWcyKS9UV08sMS4wKTtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOwor
LyoqIEBoaWRkZW4gKi8KK3ZhciBzdGVyZW9zY29waWNJbnRlcmxhY2VQaXhlbFNoYWRlciA9IHsg
bmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
U2hhZGVycy90b25lbWFwLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvdG9uZW1hcC5mcmFnbWVudC50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IHRvbmVtYXBQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJ0b25lbWFwUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRv
bmVtYXBQaXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFs
c19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
Cit2YXIgbmFtZSA9ICd0b25lbWFwUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlp
bmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcblxudW5pZm9y
bSBmbG9hdCBfRXhwb3N1cmVBZGp1c3RtZW50O1xuI2lmIGRlZmluZWQoSEFCTEVfVE9ORU1BUFBJ
TkcpXG5jb25zdCBmbG9hdCBBPTAuMTU7XG5jb25zdCBmbG9hdCBCPTAuNTA7XG5jb25zdCBmbG9h
dCBDPTAuMTA7XG5jb25zdCBmbG9hdCBEPTAuMjA7XG5jb25zdCBmbG9hdCBFPTAuMDI7XG5jb25z
dCBmbG9hdCBGPTAuMzA7XG5jb25zdCBmbG9hdCBXPTExLjI7XG4jZW5kaWZcbmZsb2F0IEx1bWlu
YW5jZSh2ZWMzIGMpXG57XG5yZXR1cm4gZG90KGMsdmVjMygwLjIyLDAuNzA3LDAuMDcxKSk7XG59
XG52b2lkIG1haW4odm9pZClcbntcbnZlYzMgY29sb3VyPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxl
cix2VVYpLnJnYjtcbiNpZiBkZWZpbmVkKFJFSU5IQVJEX1RPTkVNQVBQSU5HKVxuZmxvYXQgbHVt
PUx1bWluYW5jZShjb2xvdXIucmdiKTtcbmZsb2F0IGx1bVRtPWx1bSpfRXhwb3N1cmVBZGp1c3Rt
ZW50O1xuZmxvYXQgc2NhbGU9bHVtVG0vKDEuMCtsdW1UbSk7XG5jb2xvdXIqPXNjYWxlL2x1bTtc
biNlbGlmIGRlZmluZWQoSEFCTEVfVE9ORU1BUFBJTkcpXG5jb2xvdXIqPV9FeHBvc3VyZUFkanVz
dG1lbnQ7XG5jb25zdCBmbG9hdCBFeHBvc3VyZUJpYXM9Mi4wO1xudmVjMyB4PUV4cG9zdXJlQmlh
cypjb2xvdXI7XG52ZWMzIGN1cnI9KCh4KihBKngrQypCKStEKkUpLyh4KihBKngrQikrRCpGKSkt
RS9GO1xueD12ZWMzKFcsVyxXKTtcbnZlYzMgd2hpdGVTY2FsZT0xLjAvKCgoeCooQSp4K0MqQikr
RCpFKS8oeCooQSp4K0IpK0QqRikpLUUvRik7XG5jb2xvdXI9Y3Vycip3aGl0ZVNjYWxlO1xuI2Vs
aWYgZGVmaW5lZChPUFRJTUlaRURfSEVKSURBV1NPTl9UT05FTUFQUElORylcbmNvbG91cio9X0V4
cG9zdXJlQWRqdXN0bWVudDtcbnZlYzMgWD1tYXgodmVjMygwLjAsMC4wLDAuMCksY29sb3VyLTAu
MDA0KTtcbnZlYzMgcmV0Q29sb3I9KFgqKDYuMipYKzAuNSkpLyhYKig2LjIqWCsxLjcpKzAuMDYp
O1xuY29sb3VyPXJldENvbG9yKnJldENvbG9yO1xuI2VsaWYgZGVmaW5lZChQSE9UT0dSQVBISUNf
VE9ORU1BUFBJTkcpXG5jb2xvdXI9dmVjMygxLjAsMS4wLDEuMCktZXhwMigtX0V4cG9zdXJlQWRq
dXN0bWVudCpjb2xvdXIpO1xuI2VuZGlmXG5nbF9GcmFnQ29sb3I9dmVjNChjb2xvdXIucmdiLDEu
MCk7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2
YXIgdG9uZW1hcFBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9Owor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL3ZvbHVtZXRyaWNMaWdodFNjYXR0ZXJp
bmcuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy92b2x1bWV0cmljTGlnaHRT
Y2F0dGVyaW5nLmZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogdm9s
dW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgInZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQaXhlbFNoYWRlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1BpeGVsU2hhZGVyOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxz
L2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3ZvbHVt
ZXRyaWNMaWdodFNjYXR0ZXJpbmdQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gInVuaWZvcm0g
c2FtcGxlcjJEIHRleHR1cmVTYW1wbGVyO1xudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTY2F0dGVy
aW5nU2FtcGxlcjtcbnVuaWZvcm0gZmxvYXQgZGVjYXk7XG51bmlmb3JtIGZsb2F0IGV4cG9zdXJl
O1xudW5pZm9ybSBmbG9hdCB3ZWlnaHQ7XG51bmlmb3JtIGZsb2F0IGRlbnNpdHk7XG51bmlmb3Jt
IHZlYzIgbWVzaFBvc2l0aW9uT25TY3JlZW47XG52YXJ5aW5nIHZlYzIgdlVWO1xudm9pZCBtYWlu
KHZvaWQpIHtcbnZlYzIgdGM9dlVWO1xudmVjMiBkZWx0YVRleENvb3JkPSh0Yy1tZXNoUG9zaXRp
b25PblNjcmVlbi54eSk7XG5kZWx0YVRleENvb3JkKj0xLjAvZmxvYXQoTlVNX1NBTVBMRVMpKmRl
bnNpdHk7XG5mbG9hdCBpbGx1bWluYXRpb25EZWNheT0xLjA7XG52ZWM0IGNvbG9yPXRleHR1cmUy
RChsaWdodFNjYXR0ZXJpbmdTYW1wbGVyLHRjKSowLjQ7XG5mb3IoaW50IGk9MDsgaTxOVU1fU0FN
UExFUzsgaSsrKSB7XG50Yy09ZGVsdGFUZXhDb29yZDtcbnZlYzQgZGF0YVNhbXBsZT10ZXh0dXJl
MkQobGlnaHRTY2F0dGVyaW5nU2FtcGxlcix0YykqMC40O1xuZGF0YVNhbXBsZSo9aWxsdW1pbmF0
aW9uRGVjYXkqd2VpZ2h0O1xuY29sb3IrPWRhdGFTYW1wbGU7XG5pbGx1bWluYXRpb25EZWNheSo9
ZGVjYXk7XG59XG52ZWM0IHJlYWxDb2xvcj10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWKTtc
bmdsX0ZyYWdDb2xvcj0oKHZlYzQoKHZlYzMoY29sb3Iucixjb2xvci5nLGNvbG9yLmIpKmV4cG9z
dXJlKSwxKSkrKHJlYWxDb2xvciooMS41LTAuNCkpKTtcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHZvbHVtZXRyaWNMaWdodFNjYXR0ZXJp
bmdQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUGFzcy5m
cmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy92b2x1bWV0cmljTGlnaHRT
Y2F0dGVyaW5nUGFzcy5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiB2b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUGFzc1BpeGVsU2hhZGVyICovCisvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQYXNz
UGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHZvbHVtZXRyaWNMaWdodFNjYXR0ZXJp
bmdQYXNzUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlh
bHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsK
KwordmFyIG5hbWUgPSAndm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3NQaXhlbFNoYWRlcic7
Cit2YXIgc2hhZGVyID0gIiNpZiBkZWZpbmVkKEFMUEhBVEVTVCkgfHwgZGVmaW5lZChORUVEX1VW
KVxudmFyeWluZyB2ZWMyIHZVVjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoQUxQSEFURVNUKVxudW5p
Zm9ybSBzYW1wbGVyMkQgZGlmZnVzZVNhbXBsZXI7XG4jZW5kaWZcbnZvaWQgbWFpbih2b2lkKVxu
e1xuI2lmIGRlZmluZWQoQUxQSEFURVNUKVxudmVjNCBkaWZmdXNlQ29sb3I9dGV4dHVyZTJEKGRp
ZmZ1c2VTYW1wbGVyLHZVVik7XG5pZiAoZGlmZnVzZUNvbG9yLmE8MC40KVxuZGlzY2FyZDtcbiNl
bmRpZlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMC4wLDAuMCwwLjAsMS4wKTtcbn1cbiI7CitfTWF0ZXJp
YWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJz
U3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHZvbHVtZXRyaWNMaWdo
dFNjYXR0ZXJpbmdQYXNzUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVy
IH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvdm9sdW1ldHJpY0xpZ2h0U2Nh
dHRlcmluZ1Bhc3MudmVydGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy92b2x1bWV0
cmljTGlnaHRTY2F0dGVyaW5nUGFzcy52ZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IHZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQYXNzVmVydGV4U2hhZGVyICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInZvbHVtZXRyaWNMaWdodFNjYXR0ZXJp
bmdQYXNzVmVydGV4U2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2b2x1bWV0cmljTGlnaHRT
Y2F0dGVyaW5nUGFzc1ZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVj
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9ib25lc0Rl
Y2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9T
aGFkZXJzSW5jbHVkZS9ib25lc0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1NoYWRlcnNJbmNsdWRlX21vcnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9uICovICIu
L1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFyYXRp
b24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbW9ycGhU
YXJnZXRzVmVydGV4RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4
RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0
ZXhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5j
bHVkZV9pbnN0YW5jZXNEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNEZWNsYXJh
dGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc0RlY2xhcmF0aW9uLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX21vcnBoVGFyZ2V0
c1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXggKi8gIi4vU2hhZGVycy9T
aGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW5zdGFuY2VzVmVydGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2lu
c3RhbmNlc1ZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc1ZlcnRl
eC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9ib25lc1Zl
cnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9TaGFkZXJzSW5jbHVkZS9ib25lc1ZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL2JvbmVzVmVydGV4LnRzIik7CisKKworCisKKworCisKKwordmFyIG5hbWUgPSAndm9sdW1l
dHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3NWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbmF0
dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuI2luY2x1ZGU8Ym9uZXNEZWNsYXJhdGlvbj5cbiNpbmNs
dWRlPG1vcnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9uPlxuI2luY2x1ZGU8bW9ycGhU
YXJnZXRzVmVydGV4RGVjbGFyYXRpb24+WzAuLm1heFNpbXVsdGFuZW91c01vcnBoVGFyZ2V0c11c
blxuI2luY2x1ZGU8aW5zdGFuY2VzRGVjbGFyYXRpb24+XG51bmlmb3JtIG1hdDQgdmlld1Byb2pl
Y3Rpb247XG51bmlmb3JtIHZlYzIgZGVwdGhWYWx1ZXM7XG4jaWYgZGVmaW5lZChBTFBIQVRFU1Qp
IHx8IGRlZmluZWQoTkVFRF9VVilcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIG1hdDQgZGlm
ZnVzZU1hdHJpeDtcbiNpZmRlZiBVVjFcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuI2VuZGlmXG4jaWZk
ZWYgVVYyXG5hdHRyaWJ1dGUgdmVjMiB1djI7XG4jZW5kaWZcbiNlbmRpZlxudm9pZCBtYWluKHZv
aWQpXG57XG52ZWMzIHBvc2l0aW9uVXBkYXRlZD1wb3NpdGlvbjtcbiNpZiAoZGVmaW5lZChBTFBI
QVRFU1QpIHx8IGRlZmluZWQoTkVFRF9VVikpICYmIGRlZmluZWQoVVYxKVxudmVjMiB1dlVwZGF0
ZWQ9dXY7XG4jZW5kaWZcbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleD5bMC4ubWF4U2ltdWx0
YW5lb3VzTW9ycGhUYXJnZXRzXVxuI2luY2x1ZGU8aW5zdGFuY2VzVmVydGV4PlxuI2luY2x1ZGU8
Ym9uZXNWZXJ0ZXg+XG4jaWYgZGVmaW5lZChBTFBIQVRFU1QpIHx8IGRlZmluZWQoQkFTSUNfUkVO
REVSKVxuI2lmZGVmIFVWMVxudlVWPXZlYzIoZGlmZnVzZU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwx
LjAsMC4wKSk7XG4jZW5kaWZcbiNpZmRlZiBVVjJcbnZVVj12ZWMyKGRpZmZ1c2VNYXRyaXgqdmVj
NCh1djIsMS4wLDAuMCkpO1xuI2VuZGlmXG4jZW5kaWZcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHZvbHVtZXRyaWNMaWdodFNjYXR0ZXJp
bmdQYXNzVmVydGV4U2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL3ZyRGlzdG9ydGlvbkNvcnJlY3Rpb24uZnJh
Z21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy92ckRpc3RvcnRpb25Db3JyZWN0aW9uLmZy
YWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogdnJEaXN0b3J0aW9uQ29ycmVj
dGlvblBpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInZy
RGlzdG9ydGlvbkNvcnJlY3Rpb25QaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdnJE
aXN0b3J0aW9uQ29ycmVjdGlvblBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMv
ZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3ZyRGlzdG9ydGlvbkNvcnJlY3Rpb25QaXhlbFNo
YWRlcic7Cit2YXIgc2hhZGVyID0gIlxudmFyeWluZyB2ZWMyIHZVVjtcbnVuaWZvcm0gc2FtcGxl
cjJEIHRleHR1cmVTYW1wbGVyO1xudW5pZm9ybSB2ZWMyIExlbnNDZW50ZXI7XG51bmlmb3JtIHZl
YzIgU2NhbGU7XG51bmlmb3JtIHZlYzIgU2NhbGVJbjtcbnVuaWZvcm0gdmVjNCBIbWRXYXJwUGFy
YW07XG52ZWMyIEhtZFdhcnAodmVjMiBpbjAxKSB7XG52ZWMyIHRoZXRhPShpbjAxLUxlbnNDZW50
ZXIpKlNjYWxlSW47XG5mbG9hdCByU3E9dGhldGEueCp0aGV0YS54K3RoZXRhLnkqdGhldGEueTtc
bnZlYzIgcnZlY3Rvcj10aGV0YSooSG1kV2FycFBhcmFtLngrSG1kV2FycFBhcmFtLnkqclNxK0ht
ZFdhcnBQYXJhbS56KnJTcSpyU3ErSG1kV2FycFBhcmFtLncqclNxKnJTcSpyU3EpO1xucmV0dXJu
IExlbnNDZW50ZXIrU2NhbGUqcnZlY3Rvcjtcbn1cbnZvaWQgbWFpbih2b2lkKVxue1xudmVjMiB0
Yz1IbWRXYXJwKHZVVik7XG5pZiAodGMueCA8MC4wIHx8IHRjLng+MS4wIHx8IHRjLnk8MC4wIHx8
IHRjLnk+MS4wKVxuZ2xfRnJhZ0NvbG9yPXZlYzQoMC4wLDAuMCwwLjAsMC4wKTtcbmVsc2V7XG5n
bF9GcmFnQ29sb3I9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHRjKTtcbn1cbn0iOworX01hdGVy
aWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVy
c1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciB2ckRpc3RvcnRpb25D
b3JyZWN0aW9uUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvdnJNdWx0aXZpZXdUb1NpbmdsZXZpZXcu
ZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvdnJNdWx0aXZpZXdUb1NpbmdsZXZp
ZXcuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogdnJNdWx0aXZpZXdU
b1NpbmdsZXZpZXdQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJ2ck11bHRpdmlld1RvU2luZ2xldmlld1BpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiB2ck11bHRpdmlld1RvU2luZ2xldmlld1BpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9N
YXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3ZyTXVsdGl2aWV3VG9TaW5nbGV2
aWV3UGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJwcmVjaXNpb24gbWVkaXVtcCBzYW1wbGVy
MkRBcnJheTtcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyREFycmF5IG11bHRp
dmlld1NhbXBsZXI7XG51bmlmb3JtIGludCBpbWFnZUluZGV4O1xudm9pZCBtYWluKHZvaWQpXG57
XG5nbF9GcmFnQ29sb3I9dGV4dHVyZShtdWx0aXZpZXdTYW1wbGVyLHZlYzModlVWLGltYWdlSW5k
ZXgpKTtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8K
K3ZhciB2ck11bHRpdmlld1RvU2luZ2xldmlld1BpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBz
aGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TcHJpdGVzL2luZGV4
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TcHJpdGVz
L2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFNwcml0ZSwgU3ByaXRlTWFuYWdlciwgU3ByaXRlUGFja2VkTWFuYWdlciwg
U3ByaXRlU2NlbmVDb21wb25lbnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9zcHJpdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vc3ByaXRlICovICIuL1Nwcml0ZXMvc3ByaXRlLnRzIik7CisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlNwcml0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Nwcml0ZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTcHJpdGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfc3ByaXRlTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zcHJpdGVNYW5hZ2VyICovICIuL1Nwcml0ZXMvc3ByaXRl
TWFuYWdlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcHJpdGVNYW5hZ2VyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfc3ByaXRlTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
cHJpdGVNYW5hZ2VyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Nwcml0ZVBh
Y2tlZE1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vc3ByaXRlUGFja2VkTWFuYWdlciAqLyAiLi9TcHJpdGVzL3Nwcml0ZVBhY2tl
ZE1hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3ByaXRlUGFja2VkTWFuYWdlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3Nwcml0ZVBhY2tlZE1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siU3ByaXRlUGFja2VkTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9zcHJpdGVTY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zcHJpdGVTY2VuZUNvbXBvbmVudCAqLyAi
Li9TcHJpdGVzL3Nwcml0ZVNjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNw
cml0ZVNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3ByaXRlU2NlbmVDb21w
b25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU3ByaXRlU2NlbmVDb21wb25lbnQi
XTsgfSk7CisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TcHJpdGVzL3Nwcml0
ZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Nwcml0
ZXMvc3ByaXRlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBTcHJpdGUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiU3ByaXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTcHJpdGU7IH0pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8g
Ii4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRz
Iik7CisKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBhIHNwcml0ZQorICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9zcHJpdGVzCisgKi8KK3ZhciBT
cHJpdGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyBhIG5ldyBTcHJpdGUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lCisg
ICAgICogQHBhcmFtIG1hbmFnZXIgZGVmaW5lcyB0aGUgbWFuYWdlcgorICAgICAqLworICAgIGZ1
bmN0aW9uIFNwcml0ZSgKKyAgICAvKiogZGVmaW5lcyB0aGUgbmFtZSAqLworICAgIG5hbWUsIG1h
bmFnZXIpIHsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgLyoqIEdldHMgb3Ig
c2V0cyB0aGUgbWFpbiBjb2xvciAqLworICAgICAgICB0aGlzLmNvbG9yID0gbmV3IF9NYXRoc19t
YXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9yNCJdKDEuMCwgMS4w
LCAxLjAsIDEuMCk7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIHdpZHRoICovCisgICAg
ICAgIHRoaXMud2lkdGggPSAxLjA7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIGhlaWdo
dCAqLworICAgICAgICB0aGlzLmhlaWdodCA9IDEuMDsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0
cyByb3RhdGlvbiBhbmdsZSAqLworICAgICAgICB0aGlzLmFuZ2xlID0gMDsKKyAgICAgICAgLyoq
IEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBVViBjb29yZGluYXRlcyBzaG91
bGQgYmUgaW52ZXJ0ZWQgaW4gVSBheGlzICovCisgICAgICAgIHRoaXMuaW52ZXJ0VSA9IDA7Cisg
ICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgVVYgY29vcmRp
bmF0ZXMgc2hvdWxkIGJlIGludmVydGVkIGluIEIgYXhpcyAqLworICAgICAgICB0aGlzLmludmVy
dFYgPSAwOworICAgICAgICAvKiogR2V0cyB0aGUgbGlzdCBvZiBhdHRhY2hlZCBhbmltYXRpb25z
ICovCisgICAgICAgIHRoaXMuYW5pbWF0aW9ucyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKiog
R2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBzcHJpdGUgY2FuIGJlIHBp
Y2tlZCAqLworICAgICAgICB0aGlzLmlzUGlja2FibGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5f
YW5pbWF0aW9uU3RhcnRlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9sb29wQW5pbWF0aW9uID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX2Zyb21JbmRleCA9IDA7CisgICAgICAgIHRoaXMuX3RvSW5k
ZXggPSAwOworICAgICAgICB0aGlzLl9kZWxheSA9IDA7CisgICAgICAgIHRoaXMuX2RpcmVjdGlv
biA9IDE7CisgICAgICAgIHRoaXMuX3RpbWUgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBzcHJpdGUgaXMgdmlzaWJs
ZSAocmVuZGVyYWJsZSkuIERlZmF1bHQgaXMgdHJ1ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5pc1Zpc2libGUgPSB0cnVlOworICAgICAgICB0aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjsKKyAg
ICAgICAgdGhpcy5fbWFuYWdlci5zcHJpdGVzLnB1c2godGhpcyk7CisgICAgICAgIHRoaXMucG9z
aXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLlplcm8oKTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNwcml0
ZS5wcm90b3R5cGUsICJzaXplIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBz
ZXRzIHRoZSBzcHJpdGUgc2l6ZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy53aWR0aDsKKyAgICAgICAgfSwKKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMud2lkdGggPSB2YWx1ZTsK
KyAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IC8qKgorICAgICAqIFN0YXJ0cyBhbiBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gZnJvbSBkZWZp
bmVzIHRoZSBpbml0aWFsIGtleQorICAgICAqIEBwYXJhbSB0byBkZWZpbmVzIHRoZSBlbmQga2V5
CisgICAgICogQHBhcmFtIGxvb3AgZGVmaW5lcyBpZiB0aGUgYW5pbWF0aW9uIG11c3QgbG9vcAor
ICAgICAqIEBwYXJhbSBkZWxheSBkZWZpbmVzIHRoZSBzdGFydCBkZWxheSAoaW4gbXMpCisgICAg
ICogQHBhcmFtIG9uQW5pbWF0aW9uRW5kIGRlZmluZXMgYSBjYWxsYmFjayB0byBjYWxsIHdoZW4g
YW5pbWF0aW9uIGVuZHMKKyAgICAgKi8KKyAgICBTcHJpdGUucHJvdG90eXBlLnBsYXlBbmltYXRp
b24gPSBmdW5jdGlvbiAoZnJvbSwgdG8sIGxvb3AsIGRlbGF5LCBvbkFuaW1hdGlvbkVuZCkgewor
ICAgICAgICB0aGlzLl9mcm9tSW5kZXggPSBmcm9tOworICAgICAgICB0aGlzLl90b0luZGV4ID0g
dG87CisgICAgICAgIHRoaXMuX2xvb3BBbmltYXRpb24gPSBsb29wOworICAgICAgICB0aGlzLl9k
ZWxheSA9IGRlbGF5OworICAgICAgICB0aGlzLl9hbmltYXRpb25TdGFydGVkID0gdHJ1ZTsKKyAg
ICAgICAgaWYgKGZyb20gPCB0bykgeworICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gMTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9
IC0xOworICAgICAgICAgICAgdGhpcy5fdG9JbmRleCA9IGZyb207CisgICAgICAgICAgICB0aGlz
Ll9mcm9tSW5kZXggPSB0bzsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmNlbGxJbmRleCA9IGZy
b207CisgICAgICAgIHRoaXMuX3RpbWUgPSAwOworICAgICAgICB0aGlzLl9vbkFuaW1hdGlvbkVu
ZCA9IG9uQW5pbWF0aW9uRW5kOworICAgIH07CisgICAgLyoqIFN0b3BzIGN1cnJlbnQgYW5pbWF0
aW9uIChpZiBhbnkpICovCisgICAgU3ByaXRlLnByb3RvdHlwZS5zdG9wQW5pbWF0aW9uID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB0aGlzLl9hbmltYXRpb25TdGFydGVkID0gZmFsc2U7CisgICAg
fTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFNwcml0ZS5wcm90b3R5cGUuX2FuaW1hdGUgPSBm
dW5jdGlvbiAoZGVsdGFUaW1lKSB7CisgICAgICAgIGlmICghdGhpcy5fYW5pbWF0aW9uU3RhcnRl
ZCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3RpbWUg
Kz0gZGVsdGFUaW1lOworICAgICAgICBpZiAodGhpcy5fdGltZSA+IHRoaXMuX2RlbGF5KSB7Cisg
ICAgICAgICAgICB0aGlzLl90aW1lID0gdGhpcy5fdGltZSAlIHRoaXMuX2RlbGF5OworICAgICAg
ICAgICAgdGhpcy5jZWxsSW5kZXggKz0gdGhpcy5fZGlyZWN0aW9uOworICAgICAgICAgICAgaWYg
KHRoaXMuX2RpcmVjdGlvbiA+IDAgJiYgdGhpcy5jZWxsSW5kZXggPiB0aGlzLl90b0luZGV4IHx8
IHRoaXMuX2RpcmVjdGlvbiA8IDAgJiYgdGhpcy5jZWxsSW5kZXggPCB0aGlzLl9mcm9tSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fbG9vcEFuaW1hdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLmNlbGxJbmRleCA9IHRoaXMuX2RpcmVjdGlvbiA+IDAgPyB0aGlzLl9m
cm9tSW5kZXggOiB0aGlzLl90b0luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jZWxsSW5kZXggPSB0aGlzLl90
b0luZGV4OworICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbmltYXRpb25TdGFydGVkID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vbkFuaW1hdGlvbkVuZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25BbmltYXRpb25FbmQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNwb3NlV2hlbkZpbmlz
aGVkQW5pbWF0aW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqIFJlbGVhc2UgYXNzb2NpYXRlZCByZXNvdXJjZXMg
Ki8KKyAgICBTcHJpdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlci5zcHJpdGVzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fbWFuYWdlci5zcHJpdGVzW2ldID09IHRoaXMpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VyLnNwcml0ZXMuc3BsaWNlKGksIDEpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gU3ByaXRlOworfSgpKTsKKwor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TcHJpdGVzL3Nwcml0ZU1hbmFnZXIudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU3ByaXRlcy9z
cHJpdGVNYW5hZ2VyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU3ByaXRlTWFuYWdlciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTcHJpdGVNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBTcHJpdGVNYW5hZ2VyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Nj
ZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIu
L01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Nwcml0ZVNjZW5lQ29tcG9uZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Nwcml0ZVNj
ZW5lQ29tcG9uZW50ICovICIuL1Nwcml0ZXMvc3ByaXRlU2NlbmVDb21wb25lbnQudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ29sbGlzaW9uc19waWNraW5nSW5mb19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ29sbGlzaW9u
cy9waWNraW5nSW5mbyAqLyAiLi9Db2xsaXNpb25zL3BpY2tpbmdJbmZvLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMv
VGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9t
YXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9u
ZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9F
bmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9n
Z2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfc3ByaXRlc19mcmFn
bWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL1NoYWRlcnMvc3ByaXRlcy5mcmFnbWVudCAqLyAiLi9TaGFkZXJzL3Nwcml0ZXMuZnJh
Z21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19zcHJpdGVzX3Zl
cnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL1NoYWRlcnMvc3ByaXRlcy52ZXJ0ZXggKi8gIi4vU2hhZGVycy9zcHJpdGVzLnZlcnRl
eC50cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKy8qKgorICogQ2xhc3MgdXNlZCB0
byBtYW5hZ2UgbXVsdGlwbGUgc3ByaXRlcyBvbiB0aGUgc2FtZSBzcHJpdGVzaGVldAorICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9zcHJpdGVzCisgKi8KK3ZhciBT
cHJpdGVNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBuZXcgc3ByaXRlIG1hbmFnZXIKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZp
bmVzIHRoZSBtYW5hZ2VyJ3MgbmFtZQorICAgICAqIEBwYXJhbSBpbWdVcmwgZGVmaW5lcyB0aGUg
c3ByaXRlIHNoZWV0IHVybAorICAgICAqIEBwYXJhbSBjYXBhY2l0eSBkZWZpbmVzIHRoZSBtYXhp
bXVtIGFsbG93ZWQgbnVtYmVyIG9mIHNwcml0ZXMKKyAgICAgKiBAcGFyYW0gY2VsbFNpemUgZGVm
aW5lcyB0aGUgc2l6ZSBvZiBhIHNwcml0ZSBjZWxsCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmlu
ZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gZXBzaWxvbiBkZWZpbmVzIHRoZSBl
cHNpbG9uIHZhbHVlIHRvIGFsaWduIHRleHR1cmUgKDAuMDEgYnkgZGVmYXVsdCkKKyAgICAgKiBA
cGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZXMgdGhlIHNtYXBsaW5nIG1vZGUgdG8gdXNlIHdpdGgg
c3ByaXRlc2hlZXQKKyAgICAgKiBAcGFyYW0gZnJvbVBhY2tlZCBzZXQgdG8gZmFsc2U7IGRvIG5v
dCBhbHRlcgorICAgICAqIEBwYXJhbSBzcHJpdGVKU09OIG51bGwgb3RoZXJ3aXNlIGEgSlNPTiBv
YmplY3QgZGVmaW5pbmcgc3ByaXRlIHNoZWV0IGRhdGE7IGRvIG5vdCBhbHRlcgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIFNwcml0ZU1hbmFnZXIoCisgICAgLyoqIGRlZmluZXMgdGhlIG1hbmFnZXIn
cyBuYW1lICovCisgICAgbmFtZSwgaW1nVXJsLCBjYXBhY2l0eSwgY2VsbFNpemUsIHNjZW5lLCBl
cHNpbG9uLCBzYW1wbGluZ01vZGUsIGZyb21QYWNrZWQsIHNwcml0ZUpTT04pIHsKKyAgICAgICAg
aWYgKGVwc2lsb24gPT09IHZvaWQgMCkgeyBlcHNpbG9uID0gMC4wMTsgfQorICAgICAgICBpZiAo
c2FtcGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gX01hdGVyaWFsc19UZXh0
dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRleHR1cmUiXS5UUklM
SU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIGlmIChmcm9tUGFja2VkID09PSB2b2lkIDAp
IHsgZnJvbVBhY2tlZCA9IGZhbHNlOyB9CisgICAgICAgIGlmIChzcHJpdGVKU09OID09PSB2b2lk
IDApIHsgc3ByaXRlSlNPTiA9IG51bGw7IH0KKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAg
ICAgICAgLyoqIEdldHMgdGhlIGxpc3Qgb2Ygc3ByaXRlcyAqLworICAgICAgICB0aGlzLnNwcml0
ZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyB0aGUgcmVuZGVyaW5n
IGdyb3VwIGlkICgwIGJ5IGRlZmF1bHQpICovCisgICAgICAgIHRoaXMucmVuZGVyaW5nR3JvdXBJ
ZCA9IDA7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgY2FtZXJhIGxheWVyIG1hc2sgKi8KKyAg
ICAgICAgdGhpcy5sYXllck1hc2sgPSAweDBGRkZGRkZGOworICAgICAgICAvKiogR2V0cyBvciBz
ZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBtYW5hZ2VyIG11c3QgY29uc2lkZXIgc2Nl
bmUgZm9nIHdoZW4gcmVuZGVyaW5nICovCisgICAgICAgIHRoaXMuZm9nRW5hYmxlZCA9IHRydWU7
CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHNw
cml0ZXMgYXJlIHBpY2thYmxlICovCisgICAgICAgIHRoaXMuaXNQaWNrYWJsZSA9IGZhbHNlOwor
ICAgICAgICAvKiogVHJ1ZSB3aGVuIHBhY2tlZCBjZWxsIGRhdGEgZnJvbSBKU09OIGZpbGUgaXMg
cmVhZHkqLworICAgICAgICB0aGlzLl9wYWNrZWRBbmRSZWFkeSA9IGZhbHNlOworICAgICAgICAv
KioKKyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgbWFuYWdlciBpcyBkaXNw
b3NlZC4KKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlID0gbmV3
IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJs
ZSJdKCk7CisgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZlcnMgPSB7fTsKKyAgICAgICAgaWYgKCFz
Y2VuZS5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfU1BSSVRFKSkgeworICAgICAg
ICAgICAgc2NlbmUuX2FkZENvbXBvbmVudChuZXcgX3Nwcml0ZVNjZW5lQ29tcG9uZW50X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwcml0ZVNjZW5lQ29tcG9uZW50Il0oc2NlbmUpKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYXBhY2l0eSA9IGNhcGFjaXR5OworICAgICAgICB0
aGlzLl9mcm9tUGFja2VkID0gZnJvbVBhY2tlZDsKKyAgICAgICAgdGhpcy5fc3ByaXRlVGV4dHVy
ZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzZfX1siVGV4dHVyZSJdKGltZ1VybCwgc2NlbmUsIHRydWUsIGZhbHNlLCBzYW1wbGluZ01v
ZGUpOworICAgICAgICB0aGlzLl9zcHJpdGVUZXh0dXJlLndyYXBVID0gX01hdGVyaWFsc19UZXh0
dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRleHR1cmUiXS5DTEFN
UF9BRERSRVNTTU9ERTsKKyAgICAgICAgdGhpcy5fc3ByaXRlVGV4dHVyZS53cmFwViA9IF9NYXRl
cmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJUZXh0
dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgIGlmIChjZWxsU2l6ZS53aWR0aCAmJiBj
ZWxsU2l6ZS5oZWlnaHQpIHsKKyAgICAgICAgICAgIHRoaXMuY2VsbFdpZHRoID0gY2VsbFNpemUu
d2lkdGg7CisgICAgICAgICAgICB0aGlzLmNlbGxIZWlnaHQgPSBjZWxsU2l6ZS5oZWlnaHQ7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2VsbFNpemUgIT09IHVuZGVmaW5lZCkgeworICAg
ICAgICAgICAgdGhpcy5jZWxsV2lkdGggPSBjZWxsU2l6ZTsKKyAgICAgICAgICAgIHRoaXMuY2Vs
bEhlaWdodCA9IGNlbGxTaXplOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Vwc2lsb24gPSBlcHNpbG9uOwor
ICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9zY2VuZS5zcHJpdGVN
YW5hZ2Vycy5wdXNoKHRoaXMpOworICAgICAgICB2YXIgaW5kaWNlcyA9IFtdOworICAgICAgICB2
YXIgaW5kZXggPSAwOworICAgICAgICBmb3IgKHZhciBjb3VudCA9IDA7IGNvdW50IDwgY2FwYWNp
dHk7IGNvdW50KyspIHsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRleCk7CisgICAgICAg
ICAgICBpbmRpY2VzLnB1c2goaW5kZXggKyAxKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChp
bmRleCArIDIpOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4KTsKKyAgICAgICAgICAg
IGluZGljZXMucHVzaChpbmRleCArIDIpOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4
ICsgMyk7CisgICAgICAgICAgICBpbmRleCArPSA0OworICAgICAgICB9CisgICAgICAgIHRoaXMu
X2luZGV4QnVmZmVyID0gc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlSW5kZXhCdWZmZXIoaW5kaWNl
cyk7CisgICAgICAgIC8vIFZCTworICAgICAgICAvLyAxOCBmbG9hdHMgcGVyIHNwcml0ZSAoeCwg
eSwgeiwgYW5nbGUsIHNpemVYLCBzaXplWSwgb2Zmc2V0WCwgb2Zmc2V0WSwgaW52ZXJ0VSwgaW52
ZXJ0ViwgY2VsbExlZnQsIGNlbGxUb3AsIGNlbGxXaWR0aCwgY2VsbEhlaWdodCwgY29sb3Igciwg
Y29sb3IgZywgY29sb3IgYiwgY29sb3IgYSkKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YSA9IG5l
dyBGbG9hdDMyQXJyYXkoY2FwYWNpdHkgKiAxOCAqIDQpOworICAgICAgICB0aGlzLl9idWZmZXIg
PSBuZXcgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQnVmZmVy
Il0oc2NlbmUuZ2V0RW5naW5lKCksIHRoaXMuX3ZlcnRleERhdGEsIHRydWUsIDE4KTsKKyAgICAg
ICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMuX2J1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9z
aXRpb25LaW5kLCAwLCA0KTsKKyAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLl9idWZmZXIuY3Jl
YXRlVmVydGV4QnVmZmVyKCJvcHRpb25zIiwgNCwgNCk7CisgICAgICAgIHZhciBpbnZlcnRzID0g
dGhpcy5fYnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcigiaW52ZXJ0cyIsIDgsIDIpOworICAgICAg
ICB2YXIgY2VsbEluZm8gPSB0aGlzLl9idWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKCJjZWxsSW5m
byIsIDEwLCA0KTsKKyAgICAgICAgdmFyIGNvbG9ycyA9IHRoaXMuX2J1ZmZlci5jcmVhdGVWZXJ0
ZXhCdWZmZXIoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVy
dGV4QnVmZmVyIl0uQ29sb3JLaW5kLCAxNCwgNCk7CisgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZl
cnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVm
ZmVyIl0uUG9zaXRpb25LaW5kXSA9IHBvc2l0aW9uczsKKyAgICAgICAgdGhpcy5fdmVydGV4QnVm
ZmVyc1sib3B0aW9ucyJdID0gb3B0aW9uczsKKyAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1si
aW52ZXJ0cyJdID0gaW52ZXJ0czsKKyAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1siY2VsbElu
Zm8iXSA9IGNlbGxJbmZvOworICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2lu
ZF0gPSBjb2xvcnM7CisgICAgICAgIC8vIEVmZmVjdHMKKyAgICAgICAgdGhpcy5fZWZmZWN0QmFz
ZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZUVmZmVjdCgic3ByaXRlcyIsIFtfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Q
b3NpdGlvbktpbmQsICJvcHRpb25zIiwgImludmVydHMiLCAiY2VsbEluZm8iLCBfTWVzaGVzX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktp
bmRdLCBbInZpZXciLCAicHJvamVjdGlvbiIsICJ0ZXh0dXJlSW5mb3MiLCAiYWxwaGFUZXN0Il0s
IFsiZGlmZnVzZVNhbXBsZXIiXSwgIiIpOworICAgICAgICB0aGlzLl9lZmZlY3RGb2cgPSB0aGlz
Ll9zY2VuZS5nZXRFbmdpbmUoKS5jcmVhdGVFZmZlY3QoInNwcml0ZXMiLCBbX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25L
aW5kLCAib3B0aW9ucyIsICJpbnZlcnRzIiwgImNlbGxJbmZvIiwgX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kXSwgWyJ2
aWV3IiwgInByb2plY3Rpb24iLCAidGV4dHVyZUluZm9zIiwgImFscGhhVGVzdCIsICJ2Rm9nSW5m
b3MiLCAidkZvZ0NvbG9yIl0sIFsiZGlmZnVzZVNhbXBsZXIiXSwgIiNkZWZpbmUgRk9HIik7Cisg
ICAgICAgIGlmICh0aGlzLl9mcm9tUGFja2VkKSB7CisgICAgICAgICAgICB0aGlzLl9tYWtlUGFj
a2VkKGltZ1VybCwgc3ByaXRlSlNPTik7CisgICAgICAgIH0KKyAgICB9CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFNwcml0ZU1hbmFnZXIucHJvdG90eXBlLCAib25EaXNwb3NlIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIG1hbmFnZXIgaXMg
ZGlzcG9zZWQKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uRGlzcG9zZU9ic2Vy
dmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX29uRGlzcG9zZU9ic2VydmVy
ID0gdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTcHJpdGVNYW5hZ2VyLnByb3RvdHlwZSwg
InRleHR1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHNw
cml0ZXNoZWV0IHRleHR1cmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Nwcml0ZVRleHR1cmU7CisgICAgICAgIH0sCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9zcHJpdGVU
ZXh0dXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIFNwcml0ZU1hbmFnZXIucHJv
dG90eXBlLl9tYWtlUGFja2VkID0gZnVuY3Rpb24gKGltZ1VybCwgc3ByaXRlSlNPTikgeworICAg
ICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoc3ByaXRlSlNPTiAhPT0gbnVsbCkg
eworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgY2VsbGRhdGEgPSBKU09O
LnBhcnNlKHNwcml0ZUpTT04pOworICAgICAgICAgICAgICAgIHZhciBzcHJpdGVtYXAgPSBSZWZs
ZWN0Lm93bktleXMoY2VsbGRhdGEuZnJhbWVzKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zcHJp
dGVNYXAgPSBzcHJpdGVtYXA7CisgICAgICAgICAgICAgICAgdGhpcy5fcGFja2VkQW5kUmVhZHkg
PSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMuX2NlbGxEYXRhID0gY2VsbGRhdGEuZnJhbWVz
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9mcm9tUGFja2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdGhpcy5fcGFja2Vk
QW5kUmVhZHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFs
aWQgSlNPTiBmcm9tIHN0cmluZy4gU3ByaXRlc2hlZXQgbWFuYWdlZCB3aXRoIGNvbnN0YW50IGNl
bGwgc2l6ZS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHZhciByZSA9IC9cLi9nOworICAgICAgICAgICAgdmFyIGxpID0gdm9pZCAwOwor
ICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGxpID0gcmUubGFzdEluZGV4OworICAg
ICAgICAgICAgICAgIHJlLnRlc3QoaW1nVXJsKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHJlLmxh
c3RJbmRleCA+IDApOworICAgICAgICAgICAgdmFyIGpzb25VcmwgPSBpbWdVcmwuc3Vic3RyaW5n
KDAsIGxpIC0gMSkgKyAiLmpzb24iOworICAgICAgICAgICAgdmFyIHhtbGh0dHBfMSA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgeG1saHR0cF8xLm9wZW4oIkdFVCIsIGpzb25V
cmwsIHRydWUpOworICAgICAgICAgICAgeG1saHR0cF8xLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fWyJMb2dnZXIiXS5FcnJvcigiVW5hYmxlIHRvIExvYWQgU3ByaXRlIEpTT04gRGF0YS4gU3By
aXRlc2hlZXQgbWFuYWdlZCB3aXRoIGNvbnN0YW50IGNlbGwgc2l6ZS4iKTsKKyAgICAgICAgICAg
ICAgICBfdGhpcy5fZnJvbVBhY2tlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIF90aGlzLl9w
YWNrZWRBbmRSZWFkeSA9IGZhbHNlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHhtbGh0
dHBfMS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGNlbGxkYXRhID0gSlNPTi5wYXJzZSh4bWxodHRwXzEucmVzcG9u
c2UpOworICAgICAgICAgICAgICAgICAgICB2YXIgc3ByaXRlbWFwID0gUmVmbGVjdC5vd25LZXlz
KGNlbGxkYXRhLmZyYW1lcyk7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zcHJpdGVNYXAg
PSBzcHJpdGVtYXA7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wYWNrZWRBbmRSZWFkeSA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9jZWxsRGF0YSA9IGNlbGxkYXRhLmZy
YW1lczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgX3RoaXMuX2Zyb21QYWNrZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX3BhY2tlZEFuZFJlYWR5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBKU09OIGZyb20gZmlsZS4gU3ByaXRlc2hlZXQg
bWFuYWdlZCB3aXRoIGNvbnN0YW50IGNlbGwgc2l6ZS4iKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgeG1saHR0cF8xLnNlbmQoKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgU3ByaXRlTWFuYWdlci5wcm90b3R5cGUuX2FwcGVuZFNwcml0ZVZlcnRleCA9
IGZ1bmN0aW9uIChpbmRleCwgc3ByaXRlLCBvZmZzZXRYLCBvZmZzZXRZLCBiYXNlU2l6ZSkgewor
ICAgICAgICB2YXIgYXJyYXlPZmZzZXQgPSBpbmRleCAqIDE4OworICAgICAgICBpZiAob2Zmc2V0
WCA9PT0gMCkgeworICAgICAgICAgICAgb2Zmc2V0WCA9IHRoaXMuX2Vwc2lsb247CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAob2Zmc2V0WCA9PT0gMSkgeworICAgICAgICAgICAgb2Zmc2V0
WCA9IDEgLSB0aGlzLl9lcHNpbG9uOworICAgICAgICB9CisgICAgICAgIGlmIChvZmZzZXRZID09
PSAwKSB7CisgICAgICAgICAgICBvZmZzZXRZID0gdGhpcy5fZXBzaWxvbjsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChvZmZzZXRZID09PSAxKSB7CisgICAgICAgICAgICBvZmZzZXRZID0g
MSAtIHRoaXMuX2Vwc2lsb247CisgICAgICAgIH0KKyAgICAgICAgLy8gUG9zaXRpb25zCisgICAg
ICAgIHRoaXMuX3ZlcnRleERhdGFbYXJyYXlPZmZzZXRdID0gc3ByaXRlLnBvc2l0aW9uLng7Cisg
ICAgICAgIHRoaXMuX3ZlcnRleERhdGFbYXJyYXlPZmZzZXQgKyAxXSA9IHNwcml0ZS5wb3NpdGlv
bi55OworICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRhW2FycmF5T2Zmc2V0ICsgMl0gPSBzcHJpdGUu
cG9zaXRpb24uejsKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YVthcnJheU9mZnNldCArIDNdID0g
c3ByaXRlLmFuZ2xlOworICAgICAgICAvLyBPcHRpb25zCisgICAgICAgIHRoaXMuX3ZlcnRleERh
dGFbYXJyYXlPZmZzZXQgKyA0XSA9IHNwcml0ZS53aWR0aDsKKyAgICAgICAgdGhpcy5fdmVydGV4
RGF0YVthcnJheU9mZnNldCArIDVdID0gc3ByaXRlLmhlaWdodDsKKyAgICAgICAgdGhpcy5fdmVy
dGV4RGF0YVthcnJheU9mZnNldCArIDZdID0gb2Zmc2V0WDsKKyAgICAgICAgdGhpcy5fdmVydGV4
RGF0YVthcnJheU9mZnNldCArIDddID0gb2Zmc2V0WTsKKyAgICAgICAgLy8gSW52ZXJ0cworICAg
ICAgICB0aGlzLl92ZXJ0ZXhEYXRhW2FycmF5T2Zmc2V0ICsgOF0gPSBzcHJpdGUuaW52ZXJ0VSA/
IDEgOiAwOworICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRhW2FycmF5T2Zmc2V0ICsgOV0gPSBzcHJp
dGUuaW52ZXJ0ViA/IDEgOiAwOworICAgICAgICAvLyBDZWxsSWZvCisgICAgICAgIGlmICh0aGlz
Ll9wYWNrZWRBbmRSZWFkeSkgeworICAgICAgICAgICAgaWYgKCFzcHJpdGUuY2VsbFJlZikgewor
ICAgICAgICAgICAgICAgIHNwcml0ZS5jZWxsSW5kZXggPSAwOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdmFyIG51bSA9IHNwcml0ZS5jZWxsSW5kZXg7CisgICAgICAgICAgICBpZiAodHlw
ZW9mIChudW0pID09PSAibnVtYmVyIiAmJiBpc0Zpbml0ZShudW0pICYmIE1hdGguZmxvb3IobnVt
KSA9PT0gbnVtKSB7CisgICAgICAgICAgICAgICAgc3ByaXRlLmNlbGxSZWYgPSB0aGlzLl9zcHJp
dGVNYXBbc3ByaXRlLmNlbGxJbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll92ZXJ0ZXhEYXRhW2FycmF5T2Zmc2V0ICsgMTBdID0gdGhpcy5fY2VsbERhdGFbc3ByaXRlLmNl
bGxSZWZdLmZyYW1lLnggLyBiYXNlU2l6ZS53aWR0aDsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRl
eERhdGFbYXJyYXlPZmZzZXQgKyAxMV0gPSB0aGlzLl9jZWxsRGF0YVtzcHJpdGUuY2VsbFJlZl0u
ZnJhbWUueSAvIGJhc2VTaXplLmhlaWdodDsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleERhdGFb
YXJyYXlPZmZzZXQgKyAxMl0gPSB0aGlzLl9jZWxsRGF0YVtzcHJpdGUuY2VsbFJlZl0uZnJhbWUu
dyAvIGJhc2VTaXplLndpZHRoOworICAgICAgICAgICAgdGhpcy5fdmVydGV4RGF0YVthcnJheU9m
ZnNldCArIDEzXSA9IHRoaXMuX2NlbGxEYXRhW3Nwcml0ZS5jZWxsUmVmXS5mcmFtZS5oIC8gYmFz
ZVNpemUuaGVpZ2h0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYg
KCFzcHJpdGUuY2VsbEluZGV4KSB7CisgICAgICAgICAgICAgICAgc3ByaXRlLmNlbGxJbmRleCA9
IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcm93U2l6ZSA9IGJhc2VTaXplLndp
ZHRoIC8gdGhpcy5jZWxsV2lkdGg7CisgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKHNwcml0ZS5j
ZWxsSW5kZXggLyByb3dTaXplKSA+PiAwOworICAgICAgICAgICAgdGhpcy5fdmVydGV4RGF0YVth
cnJheU9mZnNldCArIDEwXSA9IChzcHJpdGUuY2VsbEluZGV4IC0gb2Zmc2V0ICogcm93U2l6ZSkg
KiB0aGlzLmNlbGxXaWR0aCAvIGJhc2VTaXplLndpZHRoOworICAgICAgICAgICAgdGhpcy5fdmVy
dGV4RGF0YVthcnJheU9mZnNldCArIDExXSA9IG9mZnNldCAqIHRoaXMuY2VsbEhlaWdodCAvIGJh
c2VTaXplLmhlaWdodDsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleERhdGFbYXJyYXlPZmZzZXQg
KyAxMl0gPSB0aGlzLmNlbGxXaWR0aCAvIGJhc2VTaXplLndpZHRoOworICAgICAgICAgICAgdGhp
cy5fdmVydGV4RGF0YVthcnJheU9mZnNldCArIDEzXSA9IHRoaXMuY2VsbEhlaWdodCAvIGJhc2VT
aXplLmhlaWdodDsKKyAgICAgICAgfQorICAgICAgICAvLyBDb2xvcgorICAgICAgICB0aGlzLl92
ZXJ0ZXhEYXRhW2FycmF5T2Zmc2V0ICsgMTRdID0gc3ByaXRlLmNvbG9yLnI7CisgICAgICAgIHRo
aXMuX3ZlcnRleERhdGFbYXJyYXlPZmZzZXQgKyAxNV0gPSBzcHJpdGUuY29sb3IuZzsKKyAgICAg
ICAgdGhpcy5fdmVydGV4RGF0YVthcnJheU9mZnNldCArIDE2XSA9IHNwcml0ZS5jb2xvci5iOwor
ICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRhW2FycmF5T2Zmc2V0ICsgMTddID0gc3ByaXRlLmNvbG9y
LmE7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcnNlY3RzIHRoZSBzcHJpdGVzIHdpdGgg
YSByYXkKKyAgICAgKiBAcGFyYW0gcmF5IGRlZmluZXMgdGhlIHJheSB0byBpbnRlcnNlY3Qgd2l0
aAorICAgICAqIEBwYXJhbSBjYW1lcmEgZGVmaW5lcyB0aGUgY3VycmVudCBhY3RpdmUgY2FtZXJh
CisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBkZWZpbmVzIGEgcHJlZGljYXRlIHVzZWQgdG8gc2Vs
ZWN0IGNhbmRpZGF0ZSBzcHJpdGVzCisgICAgICogQHBhcmFtIGZhc3RDaGVjayBkZWZpbmVzIGlm
IGEgZmFzdCBjaGVjayBvbmx5IG11c3QgYmUgZG9uZSAodGhlIGZpcnN0IHBvdGVudGlhbCBzcHJp
dGUgaXMgd2lsbCBiZSB1c2VkIGFuZCBub3QgdGhlIGNsb3NlcikKKyAgICAgKiBAcmV0dXJucyBu
dWxsIGlmIG5vIGhpdCBvciBhIFBpY2tpbmdJbmZvCisgICAgICovCisgICAgU3ByaXRlTWFuYWdl
ci5wcm90b3R5cGUuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChyYXksIGNhbWVyYSwgcHJlZGljYXRl
LCBmYXN0Q2hlY2spIHsKKyAgICAgICAgdmFyIGNvdW50ID0gTWF0aC5taW4odGhpcy5fY2FwYWNp
dHksIHRoaXMuc3ByaXRlcy5sZW5ndGgpOworICAgICAgICB2YXIgbWluID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7Cisg
ICAgICAgIHZhciBtYXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgdmFyIGRpc3RhbmNlID0gTnVtYmVy
Lk1BWF9WQUxVRTsKKyAgICAgICAgdmFyIGN1cnJlbnRTcHJpdGUgPSBudWxsOworICAgICAgICB2
YXIgcGlja2VkUG9pbnQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF07CisgICAgICAgIHZhciBjYW1lcmFTcGFj
ZVBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzFdOworICAgICAgICB2YXIgY2FtZXJhVmlldyA9IGNh
bWVyYS5nZXRWaWV3TWF0cml4KCk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCBjb3VudDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHNwcml0ZSA9IHRoaXMuc3ByaXRl
c1tpbmRleF07CisgICAgICAgICAgICBpZiAoIXNwcml0ZSkgeworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSkgeworICAg
ICAgICAgICAgICAgIGlmICghcHJlZGljYXRlKHNwcml0ZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAoIXNwcml0ZS5pc1BpY2thYmxlKSB7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9S
ZWYoc3ByaXRlLnBvc2l0aW9uLCBjYW1lcmFWaWV3LCBjYW1lcmFTcGFjZVBvc2l0aW9uKTsKKyAg
ICAgICAgICAgIG1pbi5jb3B5RnJvbUZsb2F0cyhjYW1lcmFTcGFjZVBvc2l0aW9uLnggLSBzcHJp
dGUud2lkdGggLyAyLCBjYW1lcmFTcGFjZVBvc2l0aW9uLnkgLSBzcHJpdGUuaGVpZ2h0IC8gMiwg
Y2FtZXJhU3BhY2VQb3NpdGlvbi56KTsKKyAgICAgICAgICAgIG1heC5jb3B5RnJvbUZsb2F0cyhj
YW1lcmFTcGFjZVBvc2l0aW9uLnggKyBzcHJpdGUud2lkdGggLyAyLCBjYW1lcmFTcGFjZVBvc2l0
aW9uLnkgKyBzcHJpdGUuaGVpZ2h0IC8gMiwgY2FtZXJhU3BhY2VQb3NpdGlvbi56KTsKKyAgICAg
ICAgICAgIGlmIChyYXkuaW50ZXJzZWN0c0JveE1pbk1heChtaW4sIG1heCkpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgY3VycmVudERpc3RhbmNlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5EaXN0YW5jZShjYW1lcmFTcGFjZVBvc2l0
aW9uLCByYXkub3JpZ2luKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiBjdXJyZW50
RGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UgPSBjdXJyZW50RGlzdGFu
Y2U7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcHJpdGUgPSBzcHJpdGU7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChmYXN0Q2hlY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjdXJyZW50U3ByaXRlKSB7CisgICAgICAgICAg
ICB2YXIgcmVzdWx0ID0gbmV3IF9Db2xsaXNpb25zX3BpY2tpbmdJbmZvX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIlBpY2tpbmdJbmZvIl0oKTsKKyAgICAgICAgICAgIGNhbWVyYVZpZXcu
aW52ZXJ0VG9SZWYoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF0pOworICAgICAgICAgICAgcmVzdWx0LmhpdCA9IHRy
dWU7CisgICAgICAgICAgICByZXN1bHQucGlja2VkU3ByaXRlID0gY3VycmVudFNwcml0ZTsKKyAg
ICAgICAgICAgIHJlc3VsdC5kaXN0YW5jZSA9IGRpc3RhbmNlOworICAgICAgICAgICAgLy8gR2V0
IHBpY2tlZCBwb2ludAorICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1sy
XTsKKyAgICAgICAgICAgIGRpcmVjdGlvbi5jb3B5RnJvbShyYXkuZGlyZWN0aW9uKTsKKyAgICAg
ICAgICAgIGRpcmVjdGlvbi5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgIGRpcmVjdGlvbi5zY2Fs
ZUluUGxhY2UoZGlzdGFuY2UpOworICAgICAgICAgICAgcmF5Lm9yaWdpbi5hZGRUb1JlZihkaXJl
Y3Rpb24sIHBpY2tlZFBvaW50KTsKKyAgICAgICAgICAgIHJlc3VsdC5waWNrZWRQb2ludCA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0u
VHJhbnNmb3JtQ29vcmRpbmF0ZXMocGlja2VkUG9pbnQsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcnNlY3RzIHRoZSBzcHJpdGVzIHdpdGggYSByYXkK
KyAgICAgKiBAcGFyYW0gcmF5IGRlZmluZXMgdGhlIHJheSB0byBpbnRlcnNlY3Qgd2l0aAorICAg
ICAqIEBwYXJhbSBjYW1lcmEgZGVmaW5lcyB0aGUgY3VycmVudCBhY3RpdmUgY2FtZXJhCisgICAg
ICogQHBhcmFtIHByZWRpY2F0ZSBkZWZpbmVzIGEgcHJlZGljYXRlIHVzZWQgdG8gc2VsZWN0IGNh
bmRpZGF0ZSBzcHJpdGVzCisgICAgICogQHJldHVybnMgbnVsbCBpZiBubyBoaXQgb3IgYSBQaWNr
aW5nSW5mbyBhcnJheQorICAgICAqLworICAgIFNwcml0ZU1hbmFnZXIucHJvdG90eXBlLm11bHRp
SW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChyYXksIGNhbWVyYSwgcHJlZGljYXRlKSB7CisgICAgICAg
IHZhciBjb3VudCA9IE1hdGgubWluKHRoaXMuX2NhcGFjaXR5LCB0aGlzLnNwcml0ZXMubGVuZ3Ro
KTsKKyAgICAgICAgdmFyIG1pbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB2YXIgbWF4ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIHZhciBkaXN0YW5jZTsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTsKKyAg
ICAgICAgdmFyIHBpY2tlZFBvaW50ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdLmNvcHlGcm9tRmxvYXRzKDAs
IDAsIDApOworICAgICAgICB2YXIgY2FtZXJhU3BhY2VQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1sx
XS5jb3B5RnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAgICAgdmFyIGNhbWVyYVZpZXcgPSBjYW1l
cmEuZ2V0Vmlld01hdHJpeCgpOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwg
Y291bnQ7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBzcHJpdGUgPSB0aGlzLnNwcml0ZXNb
aW5kZXhdOworICAgICAgICAgICAgaWYgKCFzcHJpdGUpIHsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcmVkaWNhdGUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXByZWRpY2F0ZShzcHJpdGUpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKCFzcHJpdGUuaXNQaWNrYWJsZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVm
KHNwcml0ZS5wb3NpdGlvbiwgY2FtZXJhVmlldywgY2FtZXJhU3BhY2VQb3NpdGlvbik7CisgICAg
ICAgICAgICBtaW4uY29weUZyb21GbG9hdHMoY2FtZXJhU3BhY2VQb3NpdGlvbi54IC0gc3ByaXRl
LndpZHRoIC8gMiwgY2FtZXJhU3BhY2VQb3NpdGlvbi55IC0gc3ByaXRlLmhlaWdodCAvIDIsIGNh
bWVyYVNwYWNlUG9zaXRpb24ueik7CisgICAgICAgICAgICBtYXguY29weUZyb21GbG9hdHMoY2Ft
ZXJhU3BhY2VQb3NpdGlvbi54ICsgc3ByaXRlLndpZHRoIC8gMiwgY2FtZXJhU3BhY2VQb3NpdGlv
bi55ICsgc3ByaXRlLmhlaWdodCAvIDIsIGNhbWVyYVNwYWNlUG9zaXRpb24ueik7CisgICAgICAg
ICAgICBpZiAocmF5LmludGVyc2VjdHNCb3hNaW5NYXgobWluLCBtYXgpKSB7CisgICAgICAgICAg
ICAgICAgZGlzdGFuY2UgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdLkRpc3RhbmNlKGNhbWVyYVNwYWNlUG9zaXRpb24sIHJheS5vcmln
aW4pOworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgX0NvbGxpc2lvbnNfcGlja2lu
Z0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUGlja2luZ0luZm8iXSgpOworICAg
ICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpOworICAgICAgICAgICAgICAgIGNhbWVy
YVZpZXcuaW52ZXJ0VG9SZWYoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF0pOworICAgICAgICAgICAgICAgIHJlc3Vs
dC5oaXQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlc3VsdC5waWNrZWRTcHJpdGUgPSBzcHJp
dGU7CisgICAgICAgICAgICAgICAgcmVzdWx0LmRpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAg
ICAgICAgICAgLy8gR2V0IHBpY2tlZCBwb2ludAorICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rp
b24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1w
VmVjdG9ycyJdLlZlY3RvcjNbMl07CisgICAgICAgICAgICAgICAgZGlyZWN0aW9uLmNvcHlGcm9t
KHJheS5kaXJlY3Rpb24pOworICAgICAgICAgICAgICAgIGRpcmVjdGlvbi5ub3JtYWxpemUoKTsK
KyAgICAgICAgICAgICAgICBkaXJlY3Rpb24uc2NhbGVJblBsYWNlKGRpc3RhbmNlKTsKKyAgICAg
ICAgICAgICAgICByYXkub3JpZ2luLmFkZFRvUmVmKGRpcmVjdGlvbiwgcGlja2VkUG9pbnQpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdC5waWNrZWRQb2ludCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0
ZXMocGlja2VkUG9pbnQsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbmRl
ciBhbGwgY2hpbGQgc3ByaXRlcworICAgICAqLworICAgIFNwcml0ZU1hbmFnZXIucHJvdG90eXBl
LnJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gQ2hlY2sKKyAgICAgICAgaWYgKCF0
aGlzLl9lZmZlY3RCYXNlLmlzUmVhZHkoKSB8fCAhdGhpcy5fZWZmZWN0Rm9nLmlzUmVhZHkoKSB8
fCAhdGhpcy5fc3ByaXRlVGV4dHVyZQorICAgICAgICAgICAgfHwgIXRoaXMuX3Nwcml0ZVRleHR1
cmUuaXNSZWFkeSgpIHx8ICF0aGlzLnNwcml0ZXMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2Zyb21QYWNrZWQgJiYgKCF0aGlzLl9w
YWNrZWRBbmRSZWFkeSB8fCAhdGhpcy5fc3ByaXRlTWFwIHx8ICF0aGlzLl9jZWxsRGF0YSkpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgZW5naW5lID0gdGhp
cy5fc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIHZhciBiYXNlU2l6ZSA9IHRoaXMuX3Nwcml0
ZVRleHR1cmUuZ2V0QmFzZVNpemUoKTsKKyAgICAgICAgLy8gU3ByaXRlcworICAgICAgICB2YXIg
ZGVsdGFUaW1lID0gZW5naW5lLmdldERlbHRhVGltZSgpOworICAgICAgICB2YXIgbWF4ID0gTWF0
aC5taW4odGhpcy5fY2FwYWNpdHksIHRoaXMuc3ByaXRlcy5sZW5ndGgpOworICAgICAgICB2YXIg
b2Zmc2V0ID0gMDsKKyAgICAgICAgdmFyIG5vU3ByaXRlID0gdHJ1ZTsKKyAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IG1heDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHNw
cml0ZSA9IHRoaXMuc3ByaXRlc1tpbmRleF07CisgICAgICAgICAgICBpZiAoIXNwcml0ZSB8fCAh
c3ByaXRlLmlzVmlzaWJsZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbm9TcHJpdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHNwcml0ZS5f
YW5pbWF0ZShkZWx0YVRpbWUpOworICAgICAgICAgICAgdGhpcy5fYXBwZW5kU3ByaXRlVmVydGV4
KG9mZnNldCsrLCBzcHJpdGUsIDAsIDAsIGJhc2VTaXplKTsKKyAgICAgICAgICAgIHRoaXMuX2Fw
cGVuZFNwcml0ZVZlcnRleChvZmZzZXQrKywgc3ByaXRlLCAxLCAwLCBiYXNlU2l6ZSk7CisgICAg
ICAgICAgICB0aGlzLl9hcHBlbmRTcHJpdGVWZXJ0ZXgob2Zmc2V0KyssIHNwcml0ZSwgMSwgMSwg
YmFzZVNpemUpOworICAgICAgICAgICAgdGhpcy5fYXBwZW5kU3ByaXRlVmVydGV4KG9mZnNldCsr
LCBzcHJpdGUsIDAsIDEsIGJhc2VTaXplKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobm9TcHJp
dGUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9idWZm
ZXIudXBkYXRlKHRoaXMuX3ZlcnRleERhdGEpOworICAgICAgICAvLyBSZW5kZXIKKyAgICAgICAg
dmFyIGVmZmVjdCA9IHRoaXMuX2VmZmVjdEJhc2U7CisgICAgICAgIGlmICh0aGlzLl9zY2VuZS5m
b2dFbmFibGVkICYmIHRoaXMuX3NjZW5lLmZvZ01vZGUgIT09IF9zY2VuZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJTY2VuZSJdLkZPR01PREVfTk9ORSAmJiB0aGlzLmZvZ0VuYWJsZWQp
IHsKKyAgICAgICAgICAgIGVmZmVjdCA9IHRoaXMuX2VmZmVjdEZvZzsKKyAgICAgICAgfQorICAg
ICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KGVmZmVjdCk7CisgICAgICAgIHZhciB2aWV3TWF0cml4
ID0gdGhpcy5fc2NlbmUuZ2V0Vmlld01hdHJpeCgpOworICAgICAgICBlZmZlY3Quc2V0VGV4dHVy
ZSgiZGlmZnVzZVNhbXBsZXIiLCB0aGlzLl9zcHJpdGVUZXh0dXJlKTsKKyAgICAgICAgZWZmZWN0
LnNldE1hdHJpeCgidmlldyIsIHZpZXdNYXRyaXgpOworICAgICAgICBlZmZlY3Quc2V0TWF0cml4
KCJwcm9qZWN0aW9uIiwgdGhpcy5fc2NlbmUuZ2V0UHJvamVjdGlvbk1hdHJpeCgpKTsKKyAgICAg
ICAgLy8gRm9nCisgICAgICAgIGlmICh0aGlzLl9zY2VuZS5mb2dFbmFibGVkICYmIHRoaXMuX3Nj
ZW5lLmZvZ01vZGUgIT09IF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2Vu
ZSJdLkZPR01PREVfTk9ORSAmJiB0aGlzLmZvZ0VuYWJsZWQpIHsKKyAgICAgICAgICAgIGVmZmVj
dC5zZXRGbG9hdDQoInZGb2dJbmZvcyIsIHRoaXMuX3NjZW5lLmZvZ01vZGUsIHRoaXMuX3NjZW5l
LmZvZ1N0YXJ0LCB0aGlzLl9zY2VuZS5mb2dFbmQsIHRoaXMuX3NjZW5lLmZvZ0RlbnNpdHkpOwor
ICAgICAgICAgICAgZWZmZWN0LnNldENvbG9yMygidkZvZ0NvbG9yIiwgdGhpcy5fc2NlbmUuZm9n
Q29sb3IpOworICAgICAgICB9CisgICAgICAgIC8vIFZCT3MKKyAgICAgICAgZW5naW5lLmJpbmRC
dWZmZXJzKHRoaXMuX3ZlcnRleEJ1ZmZlcnMsIHRoaXMuX2luZGV4QnVmZmVyLCBlZmZlY3QpOwor
ICAgICAgICAvLyBEcmF3IG9yZGVyCisgICAgICAgIGVuZ2luZS5zZXREZXB0aEZ1bmN0aW9uVG9M
ZXNzT3JFcXVhbCgpOworICAgICAgICBlZmZlY3Quc2V0Qm9vbCgiYWxwaGFUZXN0IiwgdHJ1ZSk7
CisgICAgICAgIGVuZ2luZS5zZXRDb2xvcldyaXRlKGZhbHNlKTsKKyAgICAgICAgZW5naW5lLmRy
YXdFbGVtZW50c1R5cGUoX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJNYXRlcmlhbCJdLlRyaWFuZ2xlRmlsbE1vZGUsIDAsIChvZmZzZXQgLyA0KSAqIDYp
OworICAgICAgICBlbmdpbmUuc2V0Q29sb3JXcml0ZSh0cnVlKTsKKyAgICAgICAgZWZmZWN0LnNl
dEJvb2woImFscGhhVGVzdCIsIGZhbHNlKTsKKyAgICAgICAgZW5naW5lLnNldEFscGhhTW9kZShf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ29uc3RhbnRz
Il0uQUxQSEFfQ09NQklORSk7CisgICAgICAgIGVuZ2luZS5kcmF3RWxlbWVudHNUeXBlKF9NYXRl
cmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTWF0ZXJpYWwiXS5U
cmlhbmdsZUZpbGxNb2RlLCAwLCAob2Zmc2V0IC8gNCkgKiA2KTsKKyAgICAgICAgZW5naW5lLnNl
dEFscGhhTW9kZShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siQ29uc3RhbnRzIl0uQUxQSEFfRElTQUJMRSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZWxlYXNlIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgICAgICovCisgICAgU3ByaXRlTWFuYWdlci5w
cm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2J1ZmZl
cikgeworICAgICAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRo
aXMuX2J1ZmZlciA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2luZGV4QnVm
ZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5fcmVsZWFzZUJ1ZmZl
cih0aGlzLl9pbmRleEJ1ZmZlcik7CisgICAgICAgICAgICB0aGlzLl9pbmRleEJ1ZmZlciA9IG51
bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Nwcml0ZVRleHR1cmUpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3Nwcml0ZVRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5f
c3ByaXRlVGV4dHVyZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVtb3ZlIGZyb20g
c2NlbmUKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2NlbmUuc3ByaXRlTWFuYWdlcnMuaW5k
ZXhPZih0aGlzKTsKKyAgICAgICAgdGhpcy5fc2NlbmUuc3ByaXRlTWFuYWdlcnMuc3BsaWNlKGlu
ZGV4LCAxKTsKKyAgICAgICAgLy8gQ2FsbGJhY2sKKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNl
cnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNl
cnZhYmxlLmNsZWFyKCk7CisgICAgfTsKKyAgICByZXR1cm4gU3ByaXRlTWFuYWdlcjsKK30oKSk7
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU3ByaXRlcy9zcHJpdGVQYWNrZWRNYW5hZ2Vy
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1Nwcml0ZXMvc3ByaXRlUGFja2VkTWFuYWdlci50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNw
cml0ZVBhY2tlZE1hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U3ByaXRlUGFja2VkTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3ByaXRlUGFja2VkTWFu
YWdlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2Rl
X21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3Nwcml0ZU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vc3ByaXRlTWFuYWdlciAqLyAiLi9TcHJpdGVzL3Nwcml0ZU1hbmFnZXIu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90
ZXh0dXJlLnRzIik7CisKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gbWFuYWdlIG11bHRpcGxl
IHNwcml0ZXMgb2YgZGlmZmVyZW50IHNpemVzIG9uIHRoZSBzYW1lIHNwcml0ZXNoZWV0CisgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL3Nwcml0ZXMKKyAqLwordmFy
IFNwcml0ZVBhY2tlZE1hbmFnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU3By
aXRlUGFja2VkTWFuYWdlciwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3
IHNwcml0ZSBtYW5hZ2VyIGZyb20gYSBwYWNrZWQgc3ByaXRlIHNoZWV0CisgICAgICogQHBhcmFt
IG5hbWUgZGVmaW5lcyB0aGUgbWFuYWdlcidzIG5hbWUKKyAgICAgKiBAcGFyYW0gaW1nVXJsIGRl
ZmluZXMgdGhlIHNwcml0ZSBzaGVldCB1cmwKKyAgICAgKiBAcGFyYW0gY2FwYWNpdHkgZGVmaW5l
cyB0aGUgbWF4aW11bSBhbGxvd2VkIG51bWJlciBvZiBzcHJpdGVzCisgICAgICogQHBhcmFtIHNj
ZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gc3ByaXRlSlNPTiBu
dWxsIG90aGVyd2lzZSBhIEpTT04gb2JqZWN0IGRlZmluaW5nIHNwcml0ZSBzaGVldCBkYXRhCisg
ICAgICogQHBhcmFtIGVwc2lsb24gZGVmaW5lcyB0aGUgZXBzaWxvbiB2YWx1ZSB0byBhbGlnbiB0
ZXh0dXJlICgwLjAxIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBkZWZp
bmVzIHRoZSBzbWFwbGluZyBtb2RlIHRvIHVzZSB3aXRoIHNwcml0ZXNoZWV0CisgICAgICogQHBh
cmFtIGZyb21QYWNrZWQgc2V0IHRvIHRydWU7IGRvIG5vdCBhbHRlcgorICAgICAqLworICAgIGZ1
bmN0aW9uIFNwcml0ZVBhY2tlZE1hbmFnZXIoCisgICAgLyoqIGRlZmluZXMgdGhlIHBhY2tlZCBt
YW5hZ2VyJ3MgbmFtZSAqLworICAgIG5hbWUsIGltZ1VybCwgY2FwYWNpdHksIHNjZW5lLCBzcHJp
dGVKU09OLCBlcHNpbG9uLCBzYW1wbGluZ01vZGUpIHsKKyAgICAgICAgaWYgKHNwcml0ZUpTT04g
PT09IHZvaWQgMCkgeyBzcHJpdGVKU09OID0gbnVsbDsgfQorICAgICAgICBpZiAoZXBzaWxvbiA9
PT0gdm9pZCAwKSB7IGVwc2lsb24gPSAwLjAxOyB9CisgICAgICAgIGlmIChzYW1wbGluZ01vZGUg
PT09IHZvaWQgMCkgeyBzYW1wbGluZ01vZGUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVGV4dHVyZSJdLlRSSUxJTkVBUl9TQU1QTElO
R01PREU7IH0KKyAgICAgICAgdmFyIF90aGlzID0gCisgICAgICAgIC8vdGhlIGNlbGxTaXplIHBh
cmFtZXRlciBpcyBub3QgdXNlZCB3aGVuIGJ1aWx0IGZyb20gSlNPTiB3aGljaCBwcm92aWRlcyBp
bmRpdmlkdWFsIGNlbGwgZGF0YSwgZGVmYXVsdHMgdG8gNjQgaWYgSlNPTiBsb2FkIGZhaWxzCisg
ICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIGltZ1VybCwgY2FwYWNpdHksIDY0LCBzY2Vu
ZSwgZXBzaWxvbiwgc2FtcGxpbmdNb2RlLCB0cnVlLCBzcHJpdGVKU09OKSB8fCB0aGlzOworICAg
ICAgICBfdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAg
ICByZXR1cm4gU3ByaXRlUGFja2VkTWFuYWdlcjsKK30oX3Nwcml0ZU1hbmFnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siU3ByaXRlTWFuYWdlciJdKSk7CisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vU3ByaXRlcy9zcHJpdGVTY2VuZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU3ByaXRlcy9z
cHJpdGVTY2VuZUNvbXBvbmVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTcHJpdGVTY2VuZUNvbXBv
bmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcHJpdGVTY2VuZUNv
bXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3ByaXRlU2NlbmVDb21wb25lbnQ7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJs
ZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
c2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9DdWxsaW5nL3JheSAqLyAiLi9DdWxsaW5nL3JheS50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9Db2xsaXNpb25zX3BpY2tpbmdJbmZvX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9Db2xsaXNpb25zL3Bp
Y2tpbmdJbmZvICovICIuL0NvbGxpc2lvbnMvcGlja2luZ0luZm8udHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5l
Q29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0FjdGlvbnNfYWN0aW9u
RXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL0FjdGlvbnMvYWN0aW9uRXZlbnQgKi8gIi4vQWN0aW9ucy9hY3Rpb25FdmVudC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKworCisKKworCisKKworX3Nj
ZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lIl0ucHJvdG90eXBlLl9pbnRl
cm5hbFBpY2tTcHJpdGVzID0gZnVuY3Rpb24gKHJheSwgcHJlZGljYXRlLCBmYXN0Q2hlY2ssIGNh
bWVyYSkgeworICAgIGlmICghX0NvbGxpc2lvbnNfcGlja2luZ0luZm9fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siUGlja2luZ0luZm8iXSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICB9CisgICAgdmFyIHBpY2tpbmdJbmZvID0gbnVsbDsKKyAgICBpZiAoIWNhbWVyYSkgeworICAg
ICAgICBpZiAoIXRoaXMuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICBjYW1lcmEgPSB0aGlzLmFjdGl2ZUNhbWVyYTsKKyAgICB9Cisg
ICAgaWYgKHRoaXMuc3ByaXRlTWFuYWdlcnMubGVuZ3RoID4gMCkgeworICAgICAgICBmb3IgKHZh
ciBzcHJpdGVJbmRleCA9IDA7IHNwcml0ZUluZGV4IDwgdGhpcy5zcHJpdGVNYW5hZ2Vycy5sZW5n
dGg7IHNwcml0ZUluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBzcHJpdGVNYW5hZ2VyID0gdGhp
cy5zcHJpdGVNYW5hZ2Vyc1tzcHJpdGVJbmRleF07CisgICAgICAgICAgICBpZiAoIXNwcml0ZU1h
bmFnZXIuaXNQaWNrYWJsZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHNwcml0ZU1hbmFnZXIuaW50ZXJzZWN0cyhy
YXksIGNhbWVyYSwgcHJlZGljYXRlLCBmYXN0Q2hlY2spOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQgfHwgIXJlc3VsdC5oaXQpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghZmFzdENoZWNrICYmIHBpY2tpbmdJbmZvICE9IG51bGwg
JiYgcmVzdWx0LmRpc3RhbmNlID49IHBpY2tpbmdJbmZvLmRpc3RhbmNlKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwaWNraW5nSW5mbyA9
IHJlc3VsdDsKKyAgICAgICAgICAgIGlmIChmYXN0Q2hlY2spIHsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGlja2lu
Z0luZm8gfHwgbmV3IF9Db2xsaXNpb25zX3BpY2tpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlBpY2tpbmdJbmZvIl0oKTsKK307Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siU2NlbmUiXS5wcm90b3R5cGUuX2ludGVybmFsTXVsdGlQaWNrU3ByaXRlcyA9
IGZ1bmN0aW9uIChyYXksIHByZWRpY2F0ZSwgY2FtZXJhKSB7CisgICAgaWYgKCFfQ29sbGlzaW9u
c19waWNraW5nSW5mb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaWNraW5nSW5mbyJd
KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICB2YXIgcGlja2luZ0luZm9zID0g
bmV3IEFycmF5KCk7CisgICAgaWYgKCFjYW1lcmEpIHsKKyAgICAgICAgaWYgKCF0aGlzLmFjdGl2
ZUNhbWVyYSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
Y2FtZXJhID0gdGhpcy5hY3RpdmVDYW1lcmE7CisgICAgfQorICAgIGlmICh0aGlzLnNwcml0ZU1h
bmFnZXJzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgZm9yICh2YXIgc3ByaXRlSW5kZXggPSAwOyBz
cHJpdGVJbmRleCA8IHRoaXMuc3ByaXRlTWFuYWdlcnMubGVuZ3RoOyBzcHJpdGVJbmRleCsrKSB7
CisgICAgICAgICAgICB2YXIgc3ByaXRlTWFuYWdlciA9IHRoaXMuc3ByaXRlTWFuYWdlcnNbc3By
aXRlSW5kZXhdOworICAgICAgICAgICAgaWYgKCFzcHJpdGVNYW5hZ2VyLmlzUGlja2FibGUpIHsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
ciByZXN1bHRzID0gc3ByaXRlTWFuYWdlci5tdWx0aUludGVyc2VjdHMocmF5LCBjYW1lcmEsIHBy
ZWRpY2F0ZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0cyAhPT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgIHBpY2tpbmdJbmZvcyA9IHBpY2tpbmdJbmZvcy5jb25jYXQocmVzdWx0cyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBpY2tpbmdJbmZvczsKK307
Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmUiXS5wcm90b3R5cGUu
cGlja1Nwcml0ZSA9IGZ1bmN0aW9uICh4LCB5LCBwcmVkaWNhdGUsIGZhc3RDaGVjaywgY2FtZXJh
KSB7CisgICAgdGhpcy5jcmVhdGVQaWNraW5nUmF5SW5DYW1lcmFTcGFjZVRvUmVmKHgsIHksIHRo
aXMuX3RlbXBTcHJpdGVQaWNraW5nUmF5LCBjYW1lcmEpOworICAgIHJldHVybiB0aGlzLl9pbnRl
cm5hbFBpY2tTcHJpdGVzKHRoaXMuX3RlbXBTcHJpdGVQaWNraW5nUmF5LCBwcmVkaWNhdGUsIGZh
c3RDaGVjaywgY2FtZXJhKTsKK307Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siU2NlbmUiXS5wcm90b3R5cGUucGlja1Nwcml0ZVdpdGhSYXkgPSBmdW5jdGlvbiAocmF5LCBw
cmVkaWNhdGUsIGZhc3RDaGVjaywgY2FtZXJhKSB7CisgICAgaWYgKCF0aGlzLl90ZW1wU3ByaXRl
UGlja2luZ1JheSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgaWYgKCFjYW1l
cmEpIHsKKyAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgY2FtZXJhID0gdGhpcy5hY3RpdmVDYW1lcmE7
CisgICAgfQorICAgIF9DdWxsaW5nX3JheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJS
YXkiXS5UcmFuc2Zvcm1Ub1JlZihyYXksIGNhbWVyYS5nZXRWaWV3TWF0cml4KCksIHRoaXMuX3Rl
bXBTcHJpdGVQaWNraW5nUmF5KTsKKyAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxQaWNrU3ByaXRl
cyh0aGlzLl90ZW1wU3ByaXRlUGlja2luZ1JheSwgcHJlZGljYXRlLCBmYXN0Q2hlY2ssIGNhbWVy
YSk7Cit9OworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lIl0ucHJv
dG90eXBlLm11bHRpUGlja1Nwcml0ZSA9IGZ1bmN0aW9uICh4LCB5LCBwcmVkaWNhdGUsIGNhbWVy
YSkgeworICAgIHRoaXMuY3JlYXRlUGlja2luZ1JheUluQ2FtZXJhU3BhY2VUb1JlZih4LCB5LCB0
aGlzLl90ZW1wU3ByaXRlUGlja2luZ1JheSwgY2FtZXJhKTsKKyAgICByZXR1cm4gdGhpcy5faW50
ZXJuYWxNdWx0aVBpY2tTcHJpdGVzKHRoaXMuX3RlbXBTcHJpdGVQaWNraW5nUmF5LCBwcmVkaWNh
dGUsIGNhbWVyYSk7Cit9OworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNj
ZW5lIl0ucHJvdG90eXBlLm11bHRpUGlja1Nwcml0ZVdpdGhSYXkgPSBmdW5jdGlvbiAocmF5LCBw
cmVkaWNhdGUsIGNhbWVyYSkgeworICAgIGlmICghdGhpcy5fdGVtcFNwcml0ZVBpY2tpbmdSYXkp
IHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIGlmICghY2FtZXJhKSB7CisgICAg
ICAgIGlmICghdGhpcy5hY3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIGNhbWVyYSA9IHRoaXMuYWN0aXZlQ2FtZXJhOworICAgIH0KKyAg
ICBfQ3VsbGluZ19yYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUmF5Il0uVHJhbnNm
b3JtVG9SZWYocmF5LCBjYW1lcmEuZ2V0Vmlld01hdHJpeCgpLCB0aGlzLl90ZW1wU3ByaXRlUGlj
a2luZ1JheSk7CisgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsTXVsdGlQaWNrU3ByaXRlcyh0aGlz
Ll90ZW1wU3ByaXRlUGlja2luZ1JheSwgcHJlZGljYXRlLCBjYW1lcmEpOworfTsKK19zY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2VuZSJdLnByb3RvdHlwZS5zZXRQb2ludGVy
T3ZlclNwcml0ZSA9IGZ1bmN0aW9uIChzcHJpdGUpIHsKKyAgICBpZiAodGhpcy5fcG9pbnRlck92
ZXJTcHJpdGUgPT09IHNwcml0ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0
aGlzLl9wb2ludGVyT3ZlclNwcml0ZSAmJiB0aGlzLl9wb2ludGVyT3ZlclNwcml0ZS5hY3Rpb25N
YW5hZ2VyKSB7CisgICAgICAgIHRoaXMuX3BvaW50ZXJPdmVyU3ByaXRlLmFjdGlvbk1hbmFnZXIu
cHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBvaW50ZXJPdXRUcmlnZ2VyLCBfQWN0aW9uc19h
Y3Rpb25FdmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJBY3Rpb25FdmVudCJdLkNy
ZWF0ZU5ld0Zyb21TcHJpdGUodGhpcy5fcG9pbnRlck92ZXJTcHJpdGUsIHRoaXMpKTsKKyAgICB9
CisgICAgdGhpcy5fcG9pbnRlck92ZXJTcHJpdGUgPSBzcHJpdGU7CisgICAgaWYgKHRoaXMuX3Bv
aW50ZXJPdmVyU3ByaXRlICYmIHRoaXMuX3BvaW50ZXJPdmVyU3ByaXRlLmFjdGlvbk1hbmFnZXIp
IHsKKyAgICAgICAgdGhpcy5fcG9pbnRlck92ZXJTcHJpdGUuYWN0aW9uTWFuYWdlci5wcm9jZXNz
VHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
Q29uc3RhbnRzIl0uQUNUSU9OX09uUG9pbnRlck92ZXJUcmlnZ2VyLCBfQWN0aW9uc19hY3Rpb25F
dmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJBY3Rpb25FdmVudCJdLkNyZWF0ZU5l
d0Zyb21TcHJpdGUodGhpcy5fcG9pbnRlck92ZXJTcHJpdGUsIHRoaXMpKTsKKyAgICB9Cit9Owor
X3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lIl0ucHJvdG90eXBlLmdl
dFBvaW50ZXJPdmVyU3ByaXRlID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiB0aGlzLl9wb2lu
dGVyT3ZlclNwcml0ZTsKK307CisvKioKKyAqIERlZmluZXMgdGhlIHNwcml0ZSBzY2VuZSBjb21w
b25lbnQgcmVzcG9uc2libGUgdG8gbWFuYWdlIHNwcml0ZXMKKyAqIGluIGEgZ2l2ZW4gc2NlbmUu
CisgKi8KK3ZhciBTcHJpdGVTY2VuZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb21w
b25lbnQgZm9yIHRoZSBnaXZlbiBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRo
ZSBzY2VuZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IGluCisgICAgICovCisgICAgZnVuY3Rp
b24gU3ByaXRlU2NlbmVDb21wb25lbnQoc2NlbmUpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFRoZSBjb21wb25lbnQgbmFtZSBoZWxwZnVsbCB0byBpZGVudGlmeSB0aGUgY29tcG9uZW50IGlu
IHRoZSBsaXN0IG9mIHNjZW5lIGNvbXBvbmVudHMuCisgICAgICAgICAqLworICAgICAgICB0aGlz
Lm5hbWUgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2Nl
bmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX1NQUklURTsKKyAgICAgICAgdGhpcy5zY2VuZSA9
IHNjZW5lOworICAgICAgICB0aGlzLnNjZW5lLnNwcml0ZU1hbmFnZXJzID0gbmV3IEFycmF5KCk7
CisgICAgICAgIHRoaXMuc2NlbmUuX3RlbXBTcHJpdGVQaWNraW5nUmF5ID0gX0N1bGxpbmdfcmF5
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlJheSJdID8gX0N1bGxpbmdfcmF5X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlJheSJdLlplcm8oKSA6IG51bGw7CisgICAgICAgIHRo
aXMuc2NlbmUub25CZWZvcmVTcHJpdGVzUmVuZGVyaW5nT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk9ic2VydmFibGUiXSgpOwor
ICAgICAgICB0aGlzLnNjZW5lLm9uQWZ0ZXJTcHJpdGVzUmVuZGVyaW5nT2JzZXJ2YWJsZSA9IG5l
dyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk9ic2VydmFi
bGUiXSgpOworICAgICAgICB0aGlzLl9zcHJpdGVQcmVkaWNhdGUgPSBmdW5jdGlvbiAoc3ByaXRl
KSB7CisgICAgICAgICAgICBpZiAoIXNwcml0ZS5hY3Rpb25NYW5hZ2VyKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNw
cml0ZS5pc1BpY2thYmxlICYmIHNwcml0ZS5hY3Rpb25NYW5hZ2VyLmhhc1BvaW50ZXJUcmlnZ2Vy
czsKKyAgICAgICAgfTsKKyAgICB9CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21w
b25lbnQgaW4gYSBnaXZlbiBzY2VuZQorICAgICAqLworICAgIFNwcml0ZVNjZW5lQ29tcG9uZW50
LnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2VuZS5f
cG9pbnRlck1vdmVTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9QT0lOVEVS
TU9WRV9TUFJJVEUsIHRoaXMsIHRoaXMuX3BvaW50ZXJNb3ZlKTsKKyAgICAgICAgdGhpcy5zY2Vu
ZS5fcG9pbnRlckRvd25TdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9QT0lO
VEVSRE9XTl9TUFJJVEUsIHRoaXMsIHRoaXMuX3BvaW50ZXJEb3duKTsKKyAgICAgICAgdGhpcy5z
Y2VuZS5fcG9pbnRlclVwU3RhZ2UucmVnaXN0ZXJTdGVwKF9zY2VuZUNvbXBvbmVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLlNURVBfUE9J
TlRFUlVQX1NQUklURSwgdGhpcywgdGhpcy5fcG9pbnRlclVwKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJlYnVpbGRzIHRoZSBlbGVtZW50cyByZWxhdGVkIHRvIHRoaXMgY29tcG9uZW50IGlu
IGNhc2Ugb2YKKyAgICAgKiBjb250ZXh0IGxvc3QgZm9yIGluc3RhbmNlLgorICAgICAqLworICAg
IFNwcml0ZVNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWJ1aWxkID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAvKiogTm90aGluZyB0byBkbyBmb3Igc3ByaXRlcyAqLworICAgIH07CisgICAgLyoq
CisgICAgICogRGlzcG9zZXMgdGhlIGNvbXBvbmVudCBhbmQgdGhlIGFzc29jaWF0ZWQgcmVzc291
cmNlcy4KKyAgICAgKi8KKyAgICBTcHJpdGVTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuZGlzcG9z
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2VuZS5vbkJlZm9yZVNwcml0ZXNSZW5k
ZXJpbmdPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMuc2NlbmUub25BZnRlclNwcml0
ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHZhciBzcHJpdGVNYW5hZ2Vy
cyA9IHRoaXMuc2NlbmUuc3ByaXRlTWFuYWdlcnM7CisgICAgICAgIHdoaWxlIChzcHJpdGVNYW5h
Z2Vycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHNwcml0ZU1hbmFnZXJzWzBdLmRpc3Bvc2UoKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgU3ByaXRlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLl9w
aWNrU3ByaXRlQnV0S2VlcFJheSA9IGZ1bmN0aW9uIChvcmlnaW5hbFBvaW50ZXJJbmZvLCB4LCB5
LCBmYXN0Q2hlY2ssIGNhbWVyYSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zY2VuZS5w
aWNrU3ByaXRlKHgsIHksIHRoaXMuX3Nwcml0ZVByZWRpY2F0ZSwgZmFzdENoZWNrLCBjYW1lcmEp
OworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICByZXN1bHQucmF5ID0gb3JpZ2lu
YWxQb2ludGVySW5mbyA/IG9yaWdpbmFsUG9pbnRlckluZm8ucmF5IDogbnVsbDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgU3ByaXRlU2NlbmVDb21wb25l
bnQucHJvdG90eXBlLl9wb2ludGVyTW92ZSA9IGZ1bmN0aW9uICh1blRyYW5zbGF0ZWRQb2ludGVy
WCwgdW5UcmFuc2xhdGVkUG9pbnRlclksIHBpY2tSZXN1bHQsIGlzTWVzaFBpY2tlZCwgY2FudmFz
KSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7CisgICAgICAgIGlmIChpc01lc2hQ
aWNrZWQpIHsKKyAgICAgICAgICAgIHNjZW5lLnNldFBvaW50ZXJPdmVyU3ByaXRlKG51bGwpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGlja1Jlc3VsdCA9IHRoaXMu
X3BpY2tTcHJpdGVCdXRLZWVwUmF5KHBpY2tSZXN1bHQsIHVuVHJhbnNsYXRlZFBvaW50ZXJYLCB1
blRyYW5zbGF0ZWRQb2ludGVyWSwgZmFsc2UsIHNjZW5lLmNhbWVyYVRvVXNlRm9yUG9pbnRlcnMg
fHwgdW5kZWZpbmVkKTsKKyAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0ICYmIHBpY2tSZXN1bHQu
aGl0ICYmIHBpY2tSZXN1bHQucGlja2VkU3ByaXRlKSB7CisgICAgICAgICAgICAgICAgc2NlbmUu
c2V0UG9pbnRlck92ZXJTcHJpdGUocGlja1Jlc3VsdC5waWNrZWRTcHJpdGUpOworICAgICAgICAg
ICAgICAgIGlmIChzY2VuZS5fcG9pbnRlck92ZXJTcHJpdGUgJiYgc2NlbmUuX3BvaW50ZXJPdmVy
U3ByaXRlLmFjdGlvbk1hbmFnZXIgJiYgc2NlbmUuX3BvaW50ZXJPdmVyU3ByaXRlLmFjdGlvbk1h
bmFnZXIuaG92ZXJDdXJzb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLmN1
cnNvciA9IHNjZW5lLl9wb2ludGVyT3ZlclNwcml0ZS5hY3Rpb25NYW5hZ2VyLmhvdmVyQ3Vyc29y
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IHNjZW5lLmhvdmVyQ3Vyc29yOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIHNjZW5lLnNldFBvaW50ZXJPdmVyU3ByaXRlKG51bGwpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBwaWNrUmVzdWx0OworICAgIH07CisgICAgU3ByaXRl
U2NlbmVDb21wb25lbnQucHJvdG90eXBlLl9wb2ludGVyRG93biA9IGZ1bmN0aW9uICh1blRyYW5z
bGF0ZWRQb2ludGVyWCwgdW5UcmFuc2xhdGVkUG9pbnRlclksIHBpY2tSZXN1bHQsIGV2dCkgewor
ICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lOworICAgICAgICBzY2VuZS5fcGlja2VkRG93
blNwcml0ZSA9IG51bGw7CisgICAgICAgIGlmIChzY2VuZS5zcHJpdGVNYW5hZ2Vycy5sZW5ndGgg
PiAwKSB7CisgICAgICAgICAgICBwaWNrUmVzdWx0ID0gc2NlbmUucGlja1Nwcml0ZSh1blRyYW5z
bGF0ZWRQb2ludGVyWCwgdW5UcmFuc2xhdGVkUG9pbnRlclksIHRoaXMuX3Nwcml0ZVByZWRpY2F0
ZSwgZmFsc2UsIHNjZW5lLmNhbWVyYVRvVXNlRm9yUG9pbnRlcnMgfHwgdW5kZWZpbmVkKTsKKyAg
ICAgICAgICAgIGlmIChwaWNrUmVzdWx0ICYmIHBpY2tSZXN1bHQuaGl0ICYmIHBpY2tSZXN1bHQu
cGlja2VkU3ByaXRlKSB7CisgICAgICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQucGlja2VkU3By
aXRlLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgc2NlbmUuX3BpY2tlZERv
d25TcHJpdGUgPSBwaWNrUmVzdWx0LnBpY2tlZFNwcml0ZTsKKyAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChldnQuYnV0dG9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja1Jlc3VsdC5waWNrZWRTcHJpdGUuYWN0aW9u
TWFuYWdlci5wcm9jZXNzVHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uTGVmdFBpY2tUcmlnZ2VyLCBfQWN0
aW9uc19hY3Rpb25FdmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJBY3Rpb25FdmVu
dCJdLkNyZWF0ZU5ld0Zyb21TcHJpdGUocGlja1Jlc3VsdC5waWNrZWRTcHJpdGUsIHNjZW5lLCBl
dnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrUmVzdWx0
LnBpY2tlZFNwcml0ZS5hY3Rpb25NYW5hZ2VyLnByb2Nlc3NUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25D
ZW50ZXJQaWNrVHJpZ2dlciwgX0FjdGlvbnNfYWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siQWN0aW9uRXZlbnQiXS5DcmVhdGVOZXdGcm9tU3ByaXRlKHBpY2tSZXN1bHQu
cGlja2VkU3ByaXRlLCBzY2VuZSwgZXZ0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGlja1Jlc3VsdC5waWNrZWRTcHJpdGUuYWN0aW9uTWFuYWdlci5wcm9jZXNz
VHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
Q29uc3RhbnRzIl0uQUNUSU9OX09uUmlnaHRQaWNrVHJpZ2dlciwgX0FjdGlvbnNfYWN0aW9uRXZl
bnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQWN0aW9uRXZlbnQiXS5DcmVhdGVOZXdG
cm9tU3ByaXRlKHBpY2tSZXN1bHQucGlja2VkU3ByaXRlLCBzY2VuZSwgZXZ0KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQucGlja2VkU3ByaXRlLmFjdGlvbk1hbmFnZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tSZXN1bHQucGlja2VkU3ByaXRlLmFjdGlv
bk1hbmFnZXIucHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBpY2tEb3duVHJpZ2dlciwgX0Fj
dGlvbnNfYWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQWN0aW9uRXZl
bnQiXS5DcmVhdGVOZXdGcm9tU3ByaXRlKHBpY2tSZXN1bHQucGlja2VkU3ByaXRlLCBzY2VuZSwg
ZXZ0KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBpY2tSZXN1bHQ7CisgICAgfTsKKyAg
ICBTcHJpdGVTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX3BvaW50ZXJVcCA9IGZ1bmN0aW9uICh1
blRyYW5zbGF0ZWRQb2ludGVyWCwgdW5UcmFuc2xhdGVkUG9pbnRlclksIHBpY2tSZXN1bHQsIGV2
dCkgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lOworICAgICAgICBpZiAoc2NlbmUu
c3ByaXRlTWFuYWdlcnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdmFyIHNwcml0ZVBpY2tS
ZXN1bHQgPSBzY2VuZS5waWNrU3ByaXRlKHVuVHJhbnNsYXRlZFBvaW50ZXJYLCB1blRyYW5zbGF0
ZWRQb2ludGVyWSwgdGhpcy5fc3ByaXRlUHJlZGljYXRlLCBmYWxzZSwgc2NlbmUuY2FtZXJhVG9V
c2VGb3JQb2ludGVycyB8fCB1bmRlZmluZWQpOworICAgICAgICAgICAgaWYgKHNwcml0ZVBpY2tS
ZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3ByaXRlUGlja1Jlc3VsdC5oaXQgJiYgc3By
aXRlUGlja1Jlc3VsdC5waWNrZWRTcHJpdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNw
cml0ZVBpY2tSZXN1bHQucGlja2VkU3ByaXRlLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNwcml0ZVBpY2tSZXN1bHQucGlja2VkU3ByaXRlLmFjdGlvbk1hbmFnZXIu
cHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBpY2tVcFRyaWdnZXIsIF9BY3Rpb25zX2FjdGlv
bkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkFjdGlvbkV2ZW50Il0uQ3JlYXRl
TmV3RnJvbVNwcml0ZShzcHJpdGVQaWNrUmVzdWx0LnBpY2tlZFNwcml0ZSwgc2NlbmUsIGV2dCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwcml0ZVBpY2tSZXN1bHQucGlja2VkU3By
aXRlLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRo
aXMuc2NlbmUuX2lucHV0TWFuYWdlci5faXNQb2ludGVyU3dpcGluZygpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwcml0ZVBpY2tSZXN1bHQucGlja2VkU3ByaXRlLmFjdGlv
bk1hbmFnZXIucHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBpY2tUcmlnZ2VyLCBfQWN0aW9u
c19hY3Rpb25FdmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJBY3Rpb25FdmVudCJd
LkNyZWF0ZU5ld0Zyb21TcHJpdGUoc3ByaXRlUGlja1Jlc3VsdC5waWNrZWRTcHJpdGUsIHNjZW5l
LCBldnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKHNjZW5lLl9waWNrZWREb3duU3ByaXRlICYmIHNjZW5lLl9waWNrZWRE
b3duU3ByaXRlLmFjdGlvbk1hbmFnZXIgJiYgc2NlbmUuX3BpY2tlZERvd25TcHJpdGUgIT09IHNw
cml0ZVBpY2tSZXN1bHQucGlja2VkU3ByaXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5l
Ll9waWNrZWREb3duU3ByaXRlLmFjdGlvbk1hbmFnZXIucHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLkFDVElP
Tl9PblBpY2tPdXRUcmlnZ2VyLCBfQWN0aW9uc19hY3Rpb25FdmVudF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJBY3Rpb25FdmVudCJdLkNyZWF0ZU5ld0Zyb21TcHJpdGUoc2NlbmUuX3Bp
Y2tlZERvd25TcHJpdGUsIHNjZW5lLCBldnQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBpY2tSZXN1bHQ7CisgICAgfTsKKyAg
ICByZXR1cm4gU3ByaXRlU2NlbmVDb21wb25lbnQ7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1N0YXRlcy9hbHBoYUN1bGxpbmdTdGF0ZS50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TdGF0ZXMvYWxwaGFDdWxsaW5n
U3RhdGUudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBfQWxwaGFTdGF0ZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJfQWxwaGFTdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0FscGhh
U3RhdGU7IH0pOworLyoqCisgKiBAaGlkZGVuCisgKiovCit2YXIgX0FscGhhU3RhdGUgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhl
IHN0YXRlLgorICAgICAqLworICAgIGZ1bmN0aW9uIF9BbHBoYVN0YXRlKCkgeworICAgICAgICB0
aGlzLl9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVycyA9IG5ldyBBcnJheSg0KTsKKyAgICAgICAgdGhp
cy5fYmxlbmRFcXVhdGlvblBhcmFtZXRlcnMgPSBuZXcgQXJyYXkoMik7CisgICAgICAgIHRoaXMu
X2JsZW5kQ29uc3RhbnRzID0gbmV3IEFycmF5KDQpOworICAgICAgICB0aGlzLl9pc0JsZW5kQ29u
c3RhbnRzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fYWxwaGFCbGVuZCA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl9pc0FscGhhQmxlbmREaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9p
c0JsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faXNC
bGVuZEVxdWF0aW9uUGFyYW1ldGVyc0RpcnR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMucmVzZXQo
KTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9BbHBoYVN0YXRlLnByb3RvdHlw
ZSwgImlzRGlydHkiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2lzQWxwaGFCbGVuZERpcnR5IHx8IHRoaXMuX2lzQmxlbmRGdW5jdGlvblBh
cmFtZXRlcnNEaXJ0eTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KF9BbHBoYVN0YXRlLnByb3RvdHlwZSwgImFscGhhQmxlbmQiLCB7CisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FscGhhQmxlbmQ7CisgICAg
ICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fYWxwaGFCbGVuZCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9hbHBoYUJsZW5kID0gdmFsdWU7CisgICAg
ICAgICAgICB0aGlzLl9pc0FscGhhQmxlbmREaXJ0eSA9IHRydWU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIF9BbHBoYVN0YXRlLnByb3RvdHlwZS5zZXRBbHBoYUJsZW5kQ29uc3RhbnRzID0gZnVu
Y3Rpb24gKHIsIGcsIGIsIGEpIHsKKyAgICAgICAgaWYgKHRoaXMuX2JsZW5kQ29uc3RhbnRzWzBd
ID09PSByICYmCisgICAgICAgICAgICB0aGlzLl9ibGVuZENvbnN0YW50c1sxXSA9PT0gZyAmJgor
ICAgICAgICAgICAgdGhpcy5fYmxlbmRDb25zdGFudHNbMl0gPT09IGIgJiYKKyAgICAgICAgICAg
IHRoaXMuX2JsZW5kQ29uc3RhbnRzWzNdID09PSBhKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fYmxlbmRDb25zdGFudHNbMF0gPSByOworICAgICAgICB0
aGlzLl9ibGVuZENvbnN0YW50c1sxXSA9IGc7CisgICAgICAgIHRoaXMuX2JsZW5kQ29uc3RhbnRz
WzJdID0gYjsKKyAgICAgICAgdGhpcy5fYmxlbmRDb25zdGFudHNbM10gPSBhOworICAgICAgICB0
aGlzLl9pc0JsZW5kQ29uc3RhbnRzRGlydHkgPSB0cnVlOworICAgIH07CisgICAgX0FscGhhU3Rh
dGUucHJvdG90eXBlLnNldEFscGhhQmxlbmRGdW5jdGlvblBhcmFtZXRlcnMgPSBmdW5jdGlvbiAo
dmFsdWUwLCB2YWx1ZTEsIHZhbHVlMiwgdmFsdWUzKSB7CisgICAgICAgIGlmICh0aGlzLl9ibGVu
ZEZ1bmN0aW9uUGFyYW1ldGVyc1swXSA9PT0gdmFsdWUwICYmCisgICAgICAgICAgICB0aGlzLl9i
bGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1sxXSA9PT0gdmFsdWUxICYmCisgICAgICAgICAgICB0aGlz
Ll9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1syXSA9PT0gdmFsdWUyICYmCisgICAgICAgICAgICB0
aGlzLl9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1szXSA9PT0gdmFsdWUzKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYmxlbmRGdW5jdGlvblBhcmFtZXRl
cnNbMF0gPSB2YWx1ZTA7CisgICAgICAgIHRoaXMuX2JsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzWzFd
ID0gdmFsdWUxOworICAgICAgICB0aGlzLl9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1syXSA9IHZh
bHVlMjsKKyAgICAgICAgdGhpcy5fYmxlbmRGdW5jdGlvblBhcmFtZXRlcnNbM10gPSB2YWx1ZTM7
CisgICAgICAgIHRoaXMuX2lzQmxlbmRGdW5jdGlvblBhcmFtZXRlcnNEaXJ0eSA9IHRydWU7Cisg
ICAgfTsKKyAgICBfQWxwaGFTdGF0ZS5wcm90b3R5cGUuc2V0QWxwaGFFcXVhdGlvblBhcmFtZXRl
cnMgPSBmdW5jdGlvbiAocmdiLCBhbHBoYSkgeworICAgICAgICBpZiAodGhpcy5fYmxlbmRFcXVh
dGlvblBhcmFtZXRlcnNbMF0gPT09IHJnYiAmJgorICAgICAgICAgICAgdGhpcy5fYmxlbmRFcXVh
dGlvblBhcmFtZXRlcnNbMV0gPT09IGFscGhhKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fYmxlbmRFcXVhdGlvblBhcmFtZXRlcnNbMF0gPSByZ2I7Cisg
ICAgICAgIHRoaXMuX2JsZW5kRXF1YXRpb25QYXJhbWV0ZXJzWzFdID0gYWxwaGE7CisgICAgICAg
IHRoaXMuX2lzQmxlbmRFcXVhdGlvblBhcmFtZXRlcnNEaXJ0eSA9IHRydWU7CisgICAgfTsKKyAg
ICBfQWxwaGFTdGF0ZS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMuX2FscGhhQmxlbmQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fYmxlbmRGdW5jdGlvblBhcmFt
ZXRlcnNbMF0gPSBudWxsOworICAgICAgICB0aGlzLl9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1sx
XSA9IG51bGw7CisgICAgICAgIHRoaXMuX2JsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzWzJdID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fYmxlbmRGdW5jdGlvblBhcmFtZXRlcnNbM10gPSBudWxsOworICAg
ICAgICB0aGlzLl9ibGVuZEVxdWF0aW9uUGFyYW1ldGVyc1swXSA9IG51bGw7CisgICAgICAgIHRo
aXMuX2JsZW5kRXF1YXRpb25QYXJhbWV0ZXJzWzFdID0gbnVsbDsKKyAgICAgICAgdGhpcy5fYmxl
bmRDb25zdGFudHNbMF0gPSBudWxsOworICAgICAgICB0aGlzLl9ibGVuZENvbnN0YW50c1sxXSA9
IG51bGw7CisgICAgICAgIHRoaXMuX2JsZW5kQ29uc3RhbnRzWzJdID0gbnVsbDsKKyAgICAgICAg
dGhpcy5fYmxlbmRDb25zdGFudHNbM10gPSBudWxsOworICAgICAgICB0aGlzLl9pc0FscGhhQmxl
bmREaXJ0eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2lzQmxlbmRGdW5jdGlvblBhcmFtZXRlcnNE
aXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0JsZW5kRXF1YXRpb25QYXJhbWV0ZXJzRGly
dHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faXNCbGVuZENvbnN0YW50c0RpcnR5ID0gZmFsc2U7
CisgICAgfTsKKyAgICBfQWxwaGFTdGF0ZS5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAoZ2wp
IHsKKyAgICAgICAgaWYgKCF0aGlzLmlzRGlydHkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAvLyBBbHBoYSBibGVuZAorICAgICAgICBpZiAodGhpcy5faXNBbHBo
YUJsZW5kRGlydHkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9hbHBoYUJsZW5kKSB7CisgICAg
ICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5faXNBbHBoYUJsZW5kRGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBBbHBoYSBmdW5jdGlvbgorICAgICAgICBpZiAodGhpcy5faXNC
bGVuZEZ1bmN0aW9uUGFyYW1ldGVyc0RpcnR5KSB7CisgICAgICAgICAgICBnbC5ibGVuZEZ1bmNT
ZXBhcmF0ZSh0aGlzLl9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1swXSwgdGhpcy5fYmxlbmRGdW5j
dGlvblBhcmFtZXRlcnNbMV0sIHRoaXMuX2JsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzWzJdLCB0aGlz
Ll9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1szXSk7CisgICAgICAgICAgICB0aGlzLl9pc0JsZW5k
RnVuY3Rpb25QYXJhbWV0ZXJzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAvLyBB
bHBoYSBlcXVhdGlvbgorICAgICAgICBpZiAodGhpcy5faXNCbGVuZEVxdWF0aW9uUGFyYW1ldGVy
c0RpcnR5KSB7CisgICAgICAgICAgICBnbC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUodGhpcy5fYmxl
bmRFcXVhdGlvblBhcmFtZXRlcnNbMF0sIHRoaXMuX2JsZW5kRXF1YXRpb25QYXJhbWV0ZXJzWzFd
KTsKKyAgICAgICAgICAgIHRoaXMuX2lzQmxlbmRFcXVhdGlvblBhcmFtZXRlcnNEaXJ0eSA9IGZh
bHNlOworICAgICAgICB9CisgICAgICAgIC8vIENvbnN0YW50cworICAgICAgICBpZiAodGhpcy5f
aXNCbGVuZENvbnN0YW50c0RpcnR5KSB7CisgICAgICAgICAgICBnbC5ibGVuZENvbG9yKHRoaXMu
X2JsZW5kQ29uc3RhbnRzWzBdLCB0aGlzLl9ibGVuZENvbnN0YW50c1sxXSwgdGhpcy5fYmxlbmRD
b25zdGFudHNbMl0sIHRoaXMuX2JsZW5kQ29uc3RhbnRzWzNdKTsKKyAgICAgICAgICAgIHRoaXMu
X2lzQmxlbmRDb25zdGFudHNEaXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgfTsKKyAgICBy
ZXR1cm4gX0FscGhhU3RhdGU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1N0
YXRlcy9kZXB0aEN1bGxpbmdTdGF0ZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9TdGF0ZXMvZGVwdGhDdWxsaW5nU3RhdGUudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBfRGVwdGhDdWxsaW5nU3RhdGUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiX0RlcHRoQ3VsbGluZ1N0YXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRGVw
dGhDdWxsaW5nU3RhdGU7IH0pOworLyoqCisgKiBAaGlkZGVuCisgKiovCit2YXIgX0RlcHRoQ3Vs
bGluZ1N0YXRlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAq
IEluaXRpYWxpemVzIHRoZSBzdGF0ZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBfRGVwdGhDdWxs
aW5nU3RhdGUoKSB7CisgICAgICAgIHRoaXMuX2lzRGVwdGhUZXN0RGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5faXNEZXB0aE1hc2tEaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0Rl
cHRoRnVuY0RpcnR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lzQ3VsbEZhY2VEaXJ0eSA9IGZh
bHNlOworICAgICAgICB0aGlzLl9pc0N1bGxEaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9p
c1pPZmZzZXREaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0Zyb250RmFjZURpcnR5ID0g
ZmFsc2U7CisgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KF9EZXB0aEN1bGxpbmdTdGF0ZS5wcm90b3R5cGUsICJpc0RpcnR5IiwgeworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RlcHRoRnVu
Y0RpcnR5IHx8IHRoaXMuX2lzRGVwdGhUZXN0RGlydHkgfHwgdGhpcy5faXNEZXB0aE1hc2tEaXJ0
eSB8fCB0aGlzLl9pc0N1bGxGYWNlRGlydHkgfHwgdGhpcy5faXNDdWxsRGlydHkgfHwgdGhpcy5f
aXNaT2Zmc2V0RGlydHkgfHwgdGhpcy5faXNGcm9udEZhY2VEaXJ0eTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9EZXB0aEN1bGxpbmdTdGF0ZS5wcm90b3R5
cGUsICJ6T2Zmc2V0IiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl96T2Zmc2V0OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3pPZmZzZXQgPT09IHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
ek9mZnNldCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5faXNaT2Zmc2V0RGlydHkgPSB0cnVl
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX0RlcHRoQ3Vs
bGluZ1N0YXRlLnByb3RvdHlwZSwgImN1bGxGYWNlIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdWxsRmFjZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9jdWxs
RmFjZSA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aGlzLl9jdWxsRmFjZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5f
aXNDdWxsRmFjZURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KF9EZXB0aEN1bGxpbmdTdGF0ZS5wcm90b3R5cGUsICJjdWxsIiwgeworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdWxsOwor
ICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX2N1bGwgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY3VsbCA9IHZhbHVlOworICAgICAgICAgICAg
dGhpcy5faXNDdWxsRGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoX0RlcHRoQ3VsbGluZ1N0YXRlLnByb3RvdHlwZSwgImRlcHRoRnVuYyIs
IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
ZGVwdGhGdW5jOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgaWYgKHRoaXMuX2RlcHRoRnVuYyA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9kZXB0aEZ1bmMg
PSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lzRGVwdGhGdW5jRGlydHkgPSB0cnVlOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX0RlcHRoQ3VsbGluZ1N0
YXRlLnByb3RvdHlwZSwgImRlcHRoTWFzayIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGhNYXNrOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2RlcHRoTWFz
ayA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl9kZXB0aE1hc2sgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lz
RGVwdGhNYXNrRGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoX0RlcHRoQ3VsbGluZ1N0YXRlLnByb3RvdHlwZSwgImRlcHRoVGVzdCIsIHsK
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVw
dGhUZXN0OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX2RlcHRoVGVzdCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9kZXB0aFRlc3QgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lzRGVwdGhUZXN0RGlydHkgPSB0cnVlOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX0RlcHRoQ3VsbGluZ1N0YXRl
LnByb3RvdHlwZSwgImZyb250RmFjZSIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJvbnRGYWNlOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2Zyb250RmFjZSA9
PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9mcm9udEZhY2UgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lzRnJv
bnRGYWNlRGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBfRGVwdGhDdWxsaW5n
U3RhdGUucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9kZXB0
aE1hc2sgPSB0cnVlOworICAgICAgICB0aGlzLl9kZXB0aFRlc3QgPSB0cnVlOworICAgICAgICB0
aGlzLl9kZXB0aEZ1bmMgPSBudWxsOworICAgICAgICB0aGlzLl9jdWxsRmFjZSA9IG51bGw7Cisg
ICAgICAgIHRoaXMuX2N1bGwgPSBudWxsOworICAgICAgICB0aGlzLl96T2Zmc2V0ID0gMDsKKyAg
ICAgICAgdGhpcy5fZnJvbnRGYWNlID0gbnVsbDsKKyAgICAgICAgdGhpcy5faXNEZXB0aFRlc3RE
aXJ0eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2lzRGVwdGhNYXNrRGlydHkgPSB0cnVlOworICAg
ICAgICB0aGlzLl9pc0RlcHRoRnVuY0RpcnR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lzQ3Vs
bEZhY2VEaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0N1bGxEaXJ0eSA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl9pc1pPZmZzZXREaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0Zy
b250RmFjZURpcnR5ID0gZmFsc2U7CisgICAgfTsKKyAgICBfRGVwdGhDdWxsaW5nU3RhdGUucHJv
dG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKGdsKSB7CisgICAgICAgIGlmICghdGhpcy5pc0RpcnR5
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gQ3VsbAorICAg
ICAgICBpZiAodGhpcy5faXNDdWxsRGlydHkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmN1bGwp
IHsKKyAgICAgICAgICAgICAgICBnbC5lbmFibGUoZ2wuQ1VMTF9GQUNFKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuQ1VM
TF9GQUNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2lzQ3VsbERpcnR5ID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ3VsbCBmYWNlCisgICAgICAgIGlmICh0aGlz
Ll9pc0N1bGxGYWNlRGlydHkpIHsKKyAgICAgICAgICAgIGdsLmN1bGxGYWNlKHRoaXMuY3VsbEZh
Y2UpOworICAgICAgICAgICAgdGhpcy5faXNDdWxsRmFjZURpcnR5ID0gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgLy8gRGVwdGggbWFzaworICAgICAgICBpZiAodGhpcy5faXNEZXB0aE1hc2tE
aXJ0eSkgeworICAgICAgICAgICAgZ2wuZGVwdGhNYXNrKHRoaXMuZGVwdGhNYXNrKTsKKyAgICAg
ICAgICAgIHRoaXMuX2lzRGVwdGhNYXNrRGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBEZXB0aCB0ZXN0CisgICAgICAgIGlmICh0aGlzLl9pc0RlcHRoVGVzdERpcnR5KSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5kZXB0aFRlc3QpIHsKKyAgICAgICAgICAgICAgICBnbC5lbmFi
bGUoZ2wuREVQVEhfVEVTVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBnbC5kaXNhYmxlKGdsLkRFUFRIX1RFU1QpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5faXNEZXB0aFRlc3REaXJ0eSA9IGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIC8vIERlcHRoIGZ1bmMKKyAgICAgICAgaWYgKHRoaXMuX2lzRGVwdGhGdW5jRGlydHkp
IHsKKyAgICAgICAgICAgIGdsLmRlcHRoRnVuYyh0aGlzLmRlcHRoRnVuYyk7CisgICAgICAgICAg
ICB0aGlzLl9pc0RlcHRoRnVuY0RpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8g
ek9mZnNldAorICAgICAgICBpZiAodGhpcy5faXNaT2Zmc2V0RGlydHkpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLnpPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBnbC5lbmFibGUoZ2wuUE9MWUdP
Tl9PRkZTRVRfRklMTCk7CisgICAgICAgICAgICAgICAgZ2wucG9seWdvbk9mZnNldCh0aGlzLnpP
ZmZzZXQsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgZ2wuZGlzYWJsZShnbC5QT0xZR09OX09GRlNFVF9GSUxMKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHRoaXMuX2lzWk9mZnNldERpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gRnJvbnQgZmFjZQorICAgICAgICBpZiAodGhpcy5faXNGcm9udEZhY2VEaXJ0eSkg
eworICAgICAgICAgICAgZ2wuZnJvbnRGYWNlKHRoaXMuZnJvbnRGYWNlKTsKKyAgICAgICAgICAg
IHRoaXMuX2lzRnJvbnRGYWNlRGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisgICAg
cmV0dXJuIF9EZXB0aEN1bGxpbmdTdGF0ZTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vU3RhdGVzL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL1N0YXRlcy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IF9BbHBoYVN0YXRlLCBfRGVwdGhDdWxsaW5nU3Rh
dGUsIF9TdGVuY2lsU3RhdGUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9hbHBoYUN1bGxpbmdTdGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hbHBoYUN1bGxpbmdTdGF0ZSAqLyAiLi9TdGF0ZXMv
YWxwaGFDdWxsaW5nU3RhdGUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0FscGhhU3RhdGUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9hbHBoYUN1bGxpbmdTdGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfQWxwaGFTdGF0ZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9kZXB0aEN1bGxpbmdTdGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9kZXB0aEN1bGxpbmdTdGF0ZSAqLyAiLi9TdGF0ZXMvZGVwdGhD
dWxsaW5nU3RhdGUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0RlcHRoQ3VsbGluZ1N0YXRlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfZGVwdGhDdWxsaW5nU3RhdGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siX0RlcHRoQ3VsbGluZ1N0YXRlIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3N0ZW5jaWxTdGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdGVuY2lsU3RhdGUgKi8gIi4vU3RhdGVzL3N0ZW5jaWxT
dGF0ZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfU3RlbmNpbFN0YXRlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfc3RlbmNpbFN0YXRlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9TdGVu
Y2lsU3RhdGUiXTsgfSk7CisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU3RhdGVz
L3N0ZW5jaWxTdGF0ZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vU3RhdGVzL3N0ZW5jaWxTdGF0ZS50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBfU3RlbmNpbFN0YXRl
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9TdGVuY2lsU3RhdGUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9TdGVuY2lsU3RhdGU7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5l
cy9jb25zdGFudHMudHMiKTsKKworLyoqCisgKiBAaGlkZGVuCisgKiovCit2YXIgX1N0ZW5jaWxT
dGF0ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBfU3RlbmNp
bFN0YXRlKCkgeworICAgICAgICB0aGlzLl9pc1N0ZW5jaWxUZXN0RGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5faXNTdGVuY2lsTWFza0RpcnR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lz
U3RlbmNpbEZ1bmNEaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc1N0ZW5jaWxPcERpcnR5
ID0gZmFsc2U7CisgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KF9TdGVuY2lsU3RhdGUucHJvdG90eXBlLCAiaXNEaXJ0eSIsIHsKKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTdGVuY2lsVGVz
dERpcnR5IHx8IHRoaXMuX2lzU3RlbmNpbE1hc2tEaXJ0eSB8fCB0aGlzLl9pc1N0ZW5jaWxGdW5j
RGlydHkgfHwgdGhpcy5faXNTdGVuY2lsT3BEaXJ0eTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KF9TdGVuY2lsU3RhdGUucHJvdG90eXBlLCAic3RlbmNpbEZ1
bmMiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3N0ZW5jaWxGdW5jOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3N0ZW5jaWxGdW5jID09PSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3N0
ZW5jaWxGdW5jID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9pc1N0ZW5jaWxGdW5jRGlydHkg
PSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX1N0
ZW5jaWxTdGF0ZS5wcm90b3R5cGUsICJzdGVuY2lsRnVuY1JlZiIsIHsKKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RlbmNpbEZ1bmNSZWY7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fc3RlbmNpbEZ1bmNSZWYgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc3RlbmNpbEZ1bmNSZWYgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lzU3RlbmNpbEZ1bmNEaXJ0eSA9IHRydWU7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfU3RlbmNpbFN0YXRlLnBy
b3RvdHlwZSwgInN0ZW5jaWxGdW5jTWFzayIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RlbmNpbEZ1bmNNYXNrOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3N0
ZW5jaWxGdW5jTWFzayA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zdGVuY2lsRnVuY01hc2sgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHRoaXMuX2lzU3RlbmNpbEZ1bmNEaXJ0eSA9IHRydWU7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfU3RlbmNpbFN0YXRlLnByb3RvdHlwZSwg
InN0ZW5jaWxPcFN0ZW5jaWxGYWlsIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9zdGVuY2lsT3BTdGVuY2lsRmFpbDsKKyAgICAgICAgfSwK
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9z
dGVuY2lsT3BTdGVuY2lsRmFpbCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zdGVuY2lsT3BTdGVuY2lsRmFpbCA9
IHZhbHVlOworICAgICAgICAgICAgdGhpcy5faXNTdGVuY2lsT3BEaXJ0eSA9IHRydWU7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfU3RlbmNpbFN0YXRlLnBy
b3RvdHlwZSwgInN0ZW5jaWxPcERlcHRoRmFpbCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RlbmNpbE9wRGVwdGhGYWlsOworICAgICAg
ICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuX3N0ZW5jaWxPcERlcHRoRmFpbCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zdGVuY2lsT3BEZXB0aEZhaWwg
PSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lzU3RlbmNpbE9wRGlydHkgPSB0cnVlOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX1N0ZW5jaWxTdGF0ZS5w
cm90b3R5cGUsICJzdGVuY2lsT3BTdGVuY2lsRGVwdGhQYXNzIiwgeworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGVuY2lsT3BTdGVuY2lsRGVw
dGhQYXNzOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX3N0ZW5jaWxPcFN0ZW5jaWxEZXB0aFBhc3MgPT09IHZhbHVlKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5fc3RlbmNpbE9wU3RlbmNpbERlcHRoUGFzcyA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5f
aXNTdGVuY2lsT3BEaXJ0eSA9IHRydWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShfU3RlbmNpbFN0YXRlLnByb3RvdHlwZSwgInN0ZW5jaWxNYXNrIiwgewor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGVu
Y2lsTWFzazsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9zdGVuY2lsTWFzayA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zdGVuY2lsTWFz
ayA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5faXNTdGVuY2lsTWFza0RpcnR5ID0gdHJ1ZTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9TdGVuY2lsU3Rh
dGUucHJvdG90eXBlLCAic3RlbmNpbFRlc3QiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZW5jaWxUZXN0OworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3N0ZW5j
aWxUZXN0ID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuX3N0ZW5jaWxUZXN0ID0gdmFsdWU7CisgICAgICAgICAgICB0
aGlzLl9pc1N0ZW5jaWxUZXN0RGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBf
U3RlbmNpbFN0YXRlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy5fc3RlbmNpbFRlc3QgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc3RlbmNpbE1hc2sgPSAweEZG
OworICAgICAgICB0aGlzLl9zdGVuY2lsRnVuYyA9IF9TdGVuY2lsU3RhdGUuQUxXQVlTOworICAg
ICAgICB0aGlzLl9zdGVuY2lsRnVuY1JlZiA9IDE7CisgICAgICAgIHRoaXMuX3N0ZW5jaWxGdW5j
TWFzayA9IDB4RkY7CisgICAgICAgIHRoaXMuX3N0ZW5jaWxPcFN0ZW5jaWxGYWlsID0gX1N0ZW5j
aWxTdGF0ZS5LRUVQOworICAgICAgICB0aGlzLl9zdGVuY2lsT3BEZXB0aEZhaWwgPSBfU3RlbmNp
bFN0YXRlLktFRVA7CisgICAgICAgIHRoaXMuX3N0ZW5jaWxPcFN0ZW5jaWxEZXB0aFBhc3MgPSBf
U3RlbmNpbFN0YXRlLlJFUExBQ0U7CisgICAgICAgIHRoaXMuX2lzU3RlbmNpbFRlc3REaXJ0eSA9
IHRydWU7CisgICAgICAgIHRoaXMuX2lzU3RlbmNpbE1hc2tEaXJ0eSA9IHRydWU7CisgICAgICAg
IHRoaXMuX2lzU3RlbmNpbEZ1bmNEaXJ0eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2lzU3RlbmNp
bE9wRGlydHkgPSB0cnVlOworICAgIH07CisgICAgX1N0ZW5jaWxTdGF0ZS5wcm90b3R5cGUuYXBw
bHkgPSBmdW5jdGlvbiAoZ2wpIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzRGlydHkpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBTdGVuY2lsIHRlc3QKKyAgICAg
ICAgaWYgKHRoaXMuX2lzU3RlbmNpbFRlc3REaXJ0eSkgeworICAgICAgICAgICAgaWYgKHRoaXMu
c3RlbmNpbFRlc3QpIHsKKyAgICAgICAgICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNU
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGds
LmRpc2FibGUoZ2wuU1RFTkNJTF9URVNUKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX2lzU3RlbmNpbFRlc3REaXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIFN0
ZW5jaWwgbWFzaworICAgICAgICBpZiAodGhpcy5faXNTdGVuY2lsTWFza0RpcnR5KSB7CisgICAg
ICAgICAgICBnbC5zdGVuY2lsTWFzayh0aGlzLnN0ZW5jaWxNYXNrKTsKKyAgICAgICAgICAgIHRo
aXMuX2lzU3RlbmNpbE1hc2tEaXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIFN0
ZW5jaWwgZnVuYworICAgICAgICBpZiAodGhpcy5faXNTdGVuY2lsRnVuY0RpcnR5KSB7CisgICAg
ICAgICAgICBnbC5zdGVuY2lsRnVuYyh0aGlzLnN0ZW5jaWxGdW5jLCB0aGlzLnN0ZW5jaWxGdW5j
UmVmLCB0aGlzLnN0ZW5jaWxGdW5jTWFzayk7CisgICAgICAgICAgICB0aGlzLl9pc1N0ZW5jaWxG
dW5jRGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAvLyBTdGVuY2lsIG9wCisgICAg
ICAgIGlmICh0aGlzLl9pc1N0ZW5jaWxPcERpcnR5KSB7CisgICAgICAgICAgICBnbC5zdGVuY2ls
T3AodGhpcy5zdGVuY2lsT3BTdGVuY2lsRmFpbCwgdGhpcy5zdGVuY2lsT3BEZXB0aEZhaWwsIHRo
aXMuc3RlbmNpbE9wU3RlbmNpbERlcHRoUGFzcyk7CisgICAgICAgICAgICB0aGlzLl9pc1N0ZW5j
aWxPcERpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBQYXNzZWQgdG8g
ZGVwdGhGdW5jdGlvbiBvciBzdGVuY2lsRnVuY3Rpb24gdG8gc3BlY2lmeSBkZXB0aCBvciBzdGVu
Y2lsIHRlc3RzIHdpbGwgYWx3YXlzIHBhc3MuIGkuZS4gUGl4ZWxzIHdpbGwgYmUgZHJhd24gaW4g
dGhlIG9yZGVyIHRoZXkgYXJlIGRyYXduICovCisgICAgX1N0ZW5jaWxTdGF0ZS5BTFdBWVMgPSBf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29uc3RhbnRz
Il0uQUxXQVlTOworICAgIC8qKiBQYXNzZWQgdG8gc3RlbmNpbE9wZXJhdGlvbiB0byBzcGVjaWZ5
IHRoYXQgc3RlbmNpbCB2YWx1ZSBtdXN0IGJlIGtlcHQgKi8KKyAgICBfU3RlbmNpbFN0YXRlLktF
RVAgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29u
c3RhbnRzIl0uS0VFUDsKKyAgICAvKiogUGFzc2VkIHRvIHN0ZW5jaWxPcGVyYXRpb24gdG8gc3Bl
Y2lmeSB0aGF0IHN0ZW5jaWwgdmFsdWUgbXVzdCBiZSByZXBsYWNlZCAqLworICAgIF9TdGVuY2ls
U3RhdGUuUkVQTEFDRSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJDb25zdGFudHMiXS5SRVBMQUNFOworICAgIHJldHVybiBfU3RlbmNpbFN0YXRlOwor
fSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9hYnN0cmFjdFNjZW5lLnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9hYnN0cmFjdFNjZW5lLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IEFic3RyYWN0U2NlbmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
QWJzdHJhY3RTY2VuZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQWJzdHJhY3RTY2VuZTsgfSk7Cisv
KioKKyAqIEJhc2UgY2xhc3Mgb2YgdGhlIHNjZW5lIGFjdGluZyBhcyBhIGNvbnRhaW5lciBmb3Ig
dGhlIGRpZmZlcmVudCBlbGVtZW50cyBjb21wb3NpbmcgYSBzY2VuZS4KKyAqIFRoaXMgY2xhc3Mg
aXMgZHluYW1pY2FsbHkgZXh0ZW5kZWQgYnkgdGhlIGRpZmZlcmVudCBjb21wb25lbnRzIG9mIHRo
ZSBzY2VuZSBpbmNyZWFzaW5nCisgKiBmbGV4aWJpbGl0eSBhbmQgcmVkdWNpbmcgY291cGxpbmcK
KyAqLwordmFyIEFic3RyYWN0U2NlbmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgZnVuY3Rpb24gQWJzdHJhY3RTY2VuZSgpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIGxpc3Qgb2Ygcm9vdCBub2RlcyAoaWUuIG5vZGVzIHdpdGggbm8gcGFyZW50KQorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5yb290Tm9kZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAg
LyoqIEFsbCBvZiB0aGUgY2FtZXJhcyBhZGRlZCB0byB0aGlzIHNjZW5lCisgICAgICAgICAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvY2FtZXJhcworICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5jYW1lcmFzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAg
ICAgICAqIEFsbCBvZiB0aGUgbGlnaHRzIGFkZGVkIHRvIHRoaXMgc2NlbmUKKyAgICAgICAgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2xpZ2h0cworICAgICAgICAq
LworICAgICAgICB0aGlzLmxpZ2h0cyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAg
ICAgKiBBbGwgb2YgdGhlIChhYnN0cmFjdCkgbWVzaGVzIGFkZGVkIHRvIHRoaXMgc2NlbmUKKyAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5tZXNoZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFRoZSBsaXN0IG9mIHNrZWxldG9ucyBhZGRlZCB0byB0aGUgc2NlbmUKKyAg
ICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vf
Ym9uZXNfYW5kX3NrZWxldG9ucworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5za2VsZXRvbnMg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQWxsIG9mIHRoZSBwYXJ0aWNs
ZSBzeXN0ZW1zIGFkZGVkIHRvIHRoaXMgc2NlbmUKKyAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL3BhcnRpY2xlcworICAgICAgICAqLworICAgICAgICB0
aGlzLnBhcnRpY2xlU3lzdGVtcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyBhIGxpc3Qgb2YgQW5pbWF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHNjZW5lCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmFuaW1hdGlvbnMgPSBbXTsKKyAgICAgICAgLyoqCisg
ICAgICAgICogQWxsIG9mIHRoZSBhbmltYXRpb24gZ3JvdXBzIGFkZGVkIHRvIHRoaXMgc2NlbmUK
KyAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vZ3JvdXAKKyAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5hbmltYXRpb25Hcm91cHMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICogQWxsIG9mIHRoZSBtdWx0aS1tYXRlcmlhbHMgYWRkZWQgdG8g
dGhpcyBzY2VuZQorICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9tdWx0aV9tYXRlcmlhbHMKKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tdWx0aU1hdGVyaWFs
cyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbGwgb2YgdGhlIG1hdGVy
aWFscyBhZGRlZCB0byB0aGlzIHNjZW5lCisgICAgICAgICogSW4gdGhlIGNvbnRleHQgb2YgYSBT
Y2VuZSwgaXQgaXMgbm90IHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIG1hbnVhbGx5LgorICAgICAg
ICAqIEFueSBhZGRpdGlvbiBvciByZW1vdmFsIHNob3VsZCBiZSBkb25lIHVzaW5nIHRoZSBhZGRN
YXRlcmlhbCBhbmQgcmVtb3ZlTUF0ZXJpYWwgU2NlbmUgbWV0aG9kcy4KKyAgICAgICAgKiBOb3Rl
IGFsc28gdGhhdCB0aGUgb3JkZXIgb2YgdGhlIE1hdGVyaWFsIHdpaGluIHRoZSBhcnJheSBpcyBu
b3Qgc2lnbmlmaWNhbnQgYW5kIG1pZ2h0IGNoYW5nZS4KKyAgICAgICAgKiBAc2VlIGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL21hdGVyaWFscworICAgICAgICAqLworICAgICAg
ICB0aGlzLm1hdGVyaWFscyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICog
VGhlIGxpc3Qgb2YgbW9ycGggdGFyZ2V0IG1hbmFnZXJzIGFkZGVkIHRvIHRoZSBzY2VuZQorICAg
ICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX2R5bmFt
aWNhbGx5X21vcnBoX2FfbWVzaAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tb3JwaFRhcmdl
dE1hbmFnZXJzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbGlz
dCBvZiBnZW9tZXRyaWVzIHVzZWQgaW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5nZW9tZXRyaWVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFs
bCBvZiB0aGUgdHJhbmZvcm0gbm9kZXMgYWRkZWQgdG8gdGhpcyBzY2VuZQorICAgICAgICAqIElu
IHRoZSBjb250ZXh0IG9mIGEgU2NlbmUsIGl0IGlzIG5vdCBzdXBwb3NlZCB0byBiZSBtb2RpZmll
ZCBtYW51YWxseS4KKyAgICAgICAgKiBBbnkgYWRkaXRpb24gb3IgcmVtb3ZhbCBzaG91bGQgYmUg
ZG9uZSB1c2luZyB0aGUgYWRkVHJhbnNmb3JtTm9kZSBhbmQgcmVtb3ZlVHJhbnNmb3JtTm9kZSBT
Y2VuZSBtZXRob2RzLgorICAgICAgICAqIE5vdGUgYWxzbyB0aGF0IHRoZSBvcmRlciBvZiB0aGUg
VHJhbnNmb3JtTm9kZSB3aWhpbiB0aGUgYXJyYXkgaXMgbm90IHNpZ25pZmljYW50IGFuZCBtaWdo
dCBjaGFuZ2UuCisgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3Rv
L3RyYW5zZm9ybW5vZGUKKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy50cmFuc2Zvcm1Ob2RlcyA9
IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQWN0aW9uTWFuYWdlcnMgYXZh
aWxhYmxlIG9uIHRoZSBzY2VuZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYWN0aW9uTWFu
YWdlcnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRleHR1cmVzIHRv
IGtlZXAuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnRleHR1cmVzID0gbmV3IEFycmF5KCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbnZpcm9ubWVudCB0ZXh0dXJlIGZvciB0aGUgc2Nl
bmUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZW52aXJvbm1lbnRUZXh0dXJlID0gbnVsbDsK
KyAgICB9CisgICAgLyoqCisgICAgICogQWRkcyBhIHBhcnNlciBpbiB0aGUgbGlzdCBvZiBhdmFp
bGFibGUgb25lcworICAgICAqIEBwYXJhbSBuYW1lIERlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHBh
cnNlcgorICAgICAqIEBwYXJhbSBwYXJzZXIgRGVmaW5lcyB0aGUgcGFyc2VyIHRvIGFkZAorICAg
ICAqLworICAgIEFic3RyYWN0U2NlbmUuQWRkUGFyc2VyID0gZnVuY3Rpb24gKG5hbWUsIHBhcnNl
cikgeworICAgICAgICB0aGlzLl9CYWJ5bG9uRmlsZVBhcnNlcnNbbmFtZV0gPSBwYXJzZXI7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgZ2VuZXJhbCBwYXJzZXIgZnJvbSB0aGUgbGlz
dCBvZiBhdmFpYWxibGUgb25lcworICAgICAqIEBwYXJhbSBuYW1lIERlZmluZXMgdGhlIG5hbWUg
b2YgdGhlIHBhcnNlcgorICAgICAqIEByZXR1cm5zIHRoZSByZXF1ZXN0ZWQgcGFyc2VyIG9yIG51
bGwKKyAgICAgKi8KKyAgICBBYnN0cmFjdFNjZW5lLkdldFBhcnNlciA9IGZ1bmN0aW9uIChuYW1l
KSB7CisgICAgICAgIGlmICh0aGlzLl9CYWJ5bG9uRmlsZVBhcnNlcnNbbmFtZV0pIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9CYWJ5bG9uRmlsZVBhcnNlcnNbbmFtZV07CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIG4gaW5k
aXZpZHVhbCBwYXJzZXIgaW4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG9uZXMKKyAgICAgKiBAcGFy
YW0gbmFtZSBEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBwYXJzZXIKKyAgICAgKiBAcGFyYW0gcGFy
c2VyIERlZmluZXMgdGhlIHBhcnNlciB0byBhZGQKKyAgICAgKi8KKyAgICBBYnN0cmFjdFNjZW5l
LkFkZEluZGl2aWR1YWxQYXJzZXIgPSBmdW5jdGlvbiAobmFtZSwgcGFyc2VyKSB7CisgICAgICAg
IHRoaXMuX0luZGl2aWR1YWxCYWJ5bG9uRmlsZVBhcnNlcnNbbmFtZV0gPSBwYXJzZXI7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGFuIGluZGl2aWR1YWwgcGFyc2VyIGZyb20gdGhlIGxp
c3Qgb2YgYXZhaWFsYmxlIG9uZXMKKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmVzIHRoZSBuYW1l
IG9mIHRoZSBwYXJzZXIKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVxdWVzdGVkIHBhcnNlciBvciBu
dWxsCisgICAgICovCisgICAgQWJzdHJhY3RTY2VuZS5HZXRJbmRpdmlkdWFsUGFyc2VyID0gZnVu
Y3Rpb24gKG5hbWUpIHsKKyAgICAgICAgaWYgKHRoaXMuX0luZGl2aWR1YWxCYWJ5bG9uRmlsZVBh
cnNlcnNbbmFtZV0pIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9JbmRpdmlkdWFsQmFieWxv
bkZpbGVQYXJzZXJzW25hbWVdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAg
IH07CisgICAgLyoqCisgICAgICogUGFyc2VyIGpzb24gZGF0YSBhbmQgcG9wdWxhdGUgYm90aCBh
IHNjZW5lIGFuZCBpdHMgYXNzb2NpYXRlZCBjb250YWluZXIgb2JqZWN0CisgICAgICogQHBhcmFt
IGpzb25EYXRhIERlZmluZXMgdGhlIGRhdGEgdG8gcGFyc2UKKyAgICAgKiBAcGFyYW0gc2NlbmUg
RGVmaW5lcyB0aGUgc2NlbmUgdG8gcGFyc2UgdGhlIGRhdGEgZm9yCisgICAgICogQHBhcmFtIGNv
bnRhaW5lciBEZWZpbmVzIHRoZSBjb250YWluZXIgYXR0YWNoZWQgdG8gdGhlIHBhcnNpbmcgc2Vx
dWVuY2UKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBEZWZpbmVzIHRoZSByb290IHVybCBvZiB0aGUg
ZGF0YQorICAgICAqLworICAgIEFic3RyYWN0U2NlbmUuUGFyc2UgPSBmdW5jdGlvbiAoanNvbkRh
dGEsIHNjZW5lLCBjb250YWluZXIsIHJvb3RVcmwpIHsKKyAgICAgICAgZm9yICh2YXIgcGFyc2Vy
TmFtZSBpbiB0aGlzLl9CYWJ5bG9uRmlsZVBhcnNlcnMpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9CYWJ5bG9uRmlsZVBhcnNlcnMuaGFzT3duUHJvcGVydHkocGFyc2VyTmFtZSkpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9CYWJ5bG9uRmlsZVBhcnNlcnNbcGFyc2VyTmFtZV0oanNvbkRhdGEs
IHNjZW5lLCBjb250YWluZXIsIHJvb3RVcmwpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTdG9yZXMgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcnNl
cnMgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAqLworICAgIEFic3RyYWN0U2NlbmUuX0JhYnls
b25GaWxlUGFyc2VycyA9IHt9OworICAgIC8qKgorICAgICAqIFN0b3JlcyB0aGUgbGlzdCBvZiBh
dmFpbGFibGUgaW5kaXZpZHVhbCBwYXJzZXJzIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgKi8K
KyAgICBBYnN0cmFjdFNjZW5lLl9JbmRpdmlkdWFsQmFieWxvbkZpbGVQYXJzZXJzID0ge307Cisg
ICAgcmV0dXJuIEFic3RyYWN0U2NlbmU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL2Fzc2V0Q29udGFpbmVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vYXNzZXRDb250YWluZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEtlZXBBc3NldHMsIEFzc2V0Q29udGFp
bmVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktlZXBBc3NldHMiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIEtlZXBBc3NldHM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXNz
ZXRDb250YWluZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFzc2V0Q29udGFpbmVyOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xp
Yi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWJzdHJhY3RTY2Vu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9hYnN0cmFjdFNjZW5lICovICIuL2Fic3RyYWN0U2NlbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMi
KTsKKworCisKKy8qKgorICogU2V0IG9mIGFzc2V0cyB0byBrZWVwIHdoZW4gbW92aW5nIGEgc2Nl
bmUgaW50byBhbiBhc3NldCBjb250YWluZXIuCisgKi8KK3ZhciBLZWVwQXNzZXRzID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEtlZXBBc3NldHMsIF9zdXBlcik7CisgICAgZnVuY3Rp
b24gS2VlcEFzc2V0cygpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3Vw
ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOworICAgIH0KKyAgICByZXR1cm4gS2Vl
cEFzc2V0czsKK30oX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
QWJzdHJhY3RTY2VuZSJdKSk7CisKKy8qKgorICogQ29udGFpbmVyIHdpdGggYSBzZXQgb2YgYXNz
ZXRzIHRoYXQgY2FuIGJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSBhIHNjZW5lLgorICovCit2YXIg
QXNzZXRDb250YWluZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oQXNzZXRDb250
YWluZXIsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGFuIEFzc2V0Q29u
dGFpbmVyLgorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhlIEFzc2V0Q29udGFpbmVy
IGJlbG9uZ3MgdG8uCisgICAgICovCisgICAgZnVuY3Rpb24gQXNzZXRDb250YWluZXIoc2NlbmUp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKKyAgICAg
ICAgX3RoaXMuc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgX3RoaXNbInNvdW5kcyJdID0gW107Cisg
ICAgICAgIF90aGlzWyJlZmZlY3RMYXllcnMiXSA9IFtdOworICAgICAgICBfdGhpc1sibGF5ZXJz
Il0gPSBbXTsKKyAgICAgICAgX3RoaXNbImxlbnNGbGFyZVN5c3RlbXMiXSA9IFtdOworICAgICAg
ICBfdGhpc1sicHJvY2VkdXJhbFRleHR1cmVzIl0gPSBbXTsKKyAgICAgICAgX3RoaXNbInJlZmxl
Y3Rpb25Qcm9iZXMiXSA9IFtdOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8q
KgorICAgICAqIEFkZHMgYWxsIHRoZSBhc3NldHMgZnJvbSB0aGUgY29udGFpbmVyIHRvIHRoZSBz
Y2VuZS4KKyAgICAgKi8KKyAgICBBc3NldENvbnRhaW5lci5wcm90b3R5cGUuYWRkQWxsVG9TY2Vu
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhp
cy5jYW1lcmFzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5l
LmFkZENhbWVyYShvKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMubGlnaHRzLmZvckVhY2go
ZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLmFkZExpZ2h0KG8pOworICAg
ICAgICB9KTsKKyAgICAgICAgdGhpcy5tZXNoZXMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAg
ICAgICAgICAgX3RoaXMuc2NlbmUuYWRkTWVzaChvKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRo
aXMuc2tlbGV0b25zLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNj
ZW5lLmFkZFNrZWxldG9uKG8pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5hbmltYXRpb25z
LmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLmFkZEFuaW1h
dGlvbihvKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuYW5pbWF0aW9uR3JvdXBzLmZvckVh
Y2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLmFkZEFuaW1hdGlvbkdy
b3VwKG8pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5tdWx0aU1hdGVyaWFscy5mb3JFYWNo
KGZ1bmN0aW9uIChvKSB7CisgICAgICAgICAgICBfdGhpcy5zY2VuZS5hZGRNdWx0aU1hdGVyaWFs
KG8pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5tYXRlcmlhbHMuZm9yRWFjaChmdW5jdGlv
biAobykgeworICAgICAgICAgICAgX3RoaXMuc2NlbmUuYWRkTWF0ZXJpYWwobyk7CisgICAgICAg
IH0pOworICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0TWFuYWdlcnMuZm9yRWFjaChmdW5jdGlvbiAo
bykgeworICAgICAgICAgICAgX3RoaXMuc2NlbmUuYWRkTW9ycGhUYXJnZXRNYW5hZ2VyKG8pOwor
ICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5nZW9tZXRyaWVzLmZvckVhY2goZnVuY3Rpb24gKG8p
IHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLmFkZEdlb21ldHJ5KG8pOworICAgICAgICB9KTsK
KyAgICAgICAgdGhpcy50cmFuc2Zvcm1Ob2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAg
ICAgICAgICBfdGhpcy5zY2VuZS5hZGRUcmFuc2Zvcm1Ob2RlKG8pOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy5hY3Rpb25NYW5hZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAg
ICAgICBfdGhpcy5zY2VuZS5hZGRBY3Rpb25NYW5hZ2VyKG8pOworICAgICAgICB9KTsKKyAgICAg
ICAgdGhpcy50ZXh0dXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAgICAgICBfdGhp
cy5zY2VuZS5hZGRUZXh0dXJlKG8pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5yZWZsZWN0
aW9uUHJvYmVzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5l
LmFkZFJlZmxlY3Rpb25Qcm9iZShvKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmICh0aGlzLmVu
dmlyb25tZW50VGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5zY2VuZS5lbnZpcm9ubWVudFRl
eHR1cmUgPSB0aGlzLmVudmlyb25tZW50VGV4dHVyZTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KHZhciBfaSA9IDAsIF9hID0gdGhpcy5zY2VuZS5fc2VyaWFsaXphYmxlQ29tcG9uZW50czsgX2kg
PCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBjb21wb25lbnQgPSBfYVtfaV07
CisgICAgICAgICAgICBjb21wb25lbnQuYWRkRnJvbUNvbnRhaW5lcih0aGlzKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhbGwgdGhlIGFzc2V0cyBpbiB0aGUg
Y29udGFpbmVyIGZyb20gdGhlIHNjZW5lCisgICAgICovCisgICAgQXNzZXRDb250YWluZXIucHJv
dG90eXBlLnJlbW92ZUFsbEZyb21TY2VuZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5jYW1lcmFzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsK
KyAgICAgICAgICAgIF90aGlzLnNjZW5lLnJlbW92ZUNhbWVyYShvKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHRoaXMubGlnaHRzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90
aGlzLnNjZW5lLnJlbW92ZUxpZ2h0KG8pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5tZXNo
ZXMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAgICAgICAgICAgX3RoaXMuc2NlbmUucmVtb3Zl
TWVzaChvKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuc2tlbGV0b25zLmZvckVhY2goZnVu
Y3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLnJlbW92ZVNrZWxldG9uKG8pOwor
ICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5hbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG8p
IHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLnJlbW92ZUFuaW1hdGlvbihvKTsKKyAgICAgICAg
fSk7CisgICAgICAgIHRoaXMuYW5pbWF0aW9uR3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsK
KyAgICAgICAgICAgIF90aGlzLnNjZW5lLnJlbW92ZUFuaW1hdGlvbkdyb3VwKG8pOworICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5tdWx0aU1hdGVyaWFscy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7
CisgICAgICAgICAgICBfdGhpcy5zY2VuZS5yZW1vdmVNdWx0aU1hdGVyaWFsKG8pOworICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5tYXRlcmlhbHMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAg
ICAgICAgICAgX3RoaXMuc2NlbmUucmVtb3ZlTWF0ZXJpYWwobyk7CisgICAgICAgIH0pOworICAg
ICAgICB0aGlzLm1vcnBoVGFyZ2V0TWFuYWdlcnMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAg
ICAgICAgICAgX3RoaXMuc2NlbmUucmVtb3ZlTW9ycGhUYXJnZXRNYW5hZ2VyKG8pOworICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5nZW9tZXRyaWVzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAg
ICAgICAgICAgIF90aGlzLnNjZW5lLnJlbW92ZUdlb21ldHJ5KG8pOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy50cmFuc2Zvcm1Ob2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAg
ICAgICBfdGhpcy5zY2VuZS5yZW1vdmVUcmFuc2Zvcm1Ob2RlKG8pOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy5hY3Rpb25NYW5hZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAg
ICAgICBfdGhpcy5zY2VuZS5yZW1vdmVBY3Rpb25NYW5hZ2VyKG8pOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy50ZXh0dXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAgICAgICBf
dGhpcy5zY2VuZS5yZW1vdmVUZXh0dXJlKG8pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5y
ZWZsZWN0aW9uUHJvYmVzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlz
LnNjZW5lLnJlbW92ZVJlZmxlY3Rpb25Qcm9iZShvKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlm
ICh0aGlzLmVudmlyb25tZW50VGV4dHVyZSA9PT0gdGhpcy5zY2VuZS5lbnZpcm9ubWVudFRleHR1
cmUpIHsKKyAgICAgICAgICAgIHRoaXMuc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlID0gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5zY2VuZS5fc2Vy
aWFsaXphYmxlQ29tcG9uZW50czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAg
IHZhciBjb21wb25lbnQgPSBfYVtfaV07CisgICAgICAgICAgICBjb21wb25lbnQucmVtb3ZlRnJv
bUNvbnRhaW5lcih0aGlzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGlz
cG9zZXMgYWxsIHRoZSBhc3NldHMgaW4gdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIEFzc2V0
Q29udGFpbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlz
LmNhbWVyYXMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAgICAgICAgICAgby5kaXNwb3NlKCk7
CisgICAgICAgIH0pOworICAgICAgICB0aGlzLmNhbWVyYXMgPSBbXTsKKyAgICAgICAgdGhpcy5s
aWdodHMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAgICAgICAgICAgby5kaXNwb3NlKCk7Cisg
ICAgICAgIH0pOworICAgICAgICB0aGlzLmxpZ2h0cyA9IFtdOworICAgICAgICB0aGlzLm1lc2hl
cy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAgICAgICBvLmRpc3Bvc2UoKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHRoaXMubWVzaGVzID0gW107CisgICAgICAgIHRoaXMuc2tlbGV0b25z
LmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIG8uZGlzcG9zZSgpOworICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5za2VsZXRvbnMgPSBbXTsKKyAgICAgICAgdGhpcy5hbmltYXRp
b25Hcm91cHMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAgICAgICAgICAgby5kaXNwb3NlKCk7
CisgICAgICAgIH0pOworICAgICAgICB0aGlzLmFuaW1hdGlvbkdyb3VwcyA9IFtdOworICAgICAg
ICB0aGlzLm11bHRpTWF0ZXJpYWxzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAg
IG8uZGlzcG9zZSgpOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5tdWx0aU1hdGVyaWFscyA9
IFtdOworICAgICAgICB0aGlzLm1hdGVyaWFscy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAg
ICAgICAgICBvLmRpc3Bvc2UoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMubWF0ZXJpYWxz
ID0gW107CisgICAgICAgIHRoaXMuZ2VvbWV0cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7Cisg
ICAgICAgICAgICBvLmRpc3Bvc2UoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuZ2VvbWV0
cmllcyA9IFtdOworICAgICAgICB0aGlzLnRyYW5zZm9ybU5vZGVzLmZvckVhY2goZnVuY3Rpb24g
KG8pIHsKKyAgICAgICAgICAgIG8uZGlzcG9zZSgpOworICAgICAgICB9KTsKKyAgICAgICAgdGhp
cy50cmFuc2Zvcm1Ob2RlcyA9IFtdOworICAgICAgICB0aGlzLmFjdGlvbk1hbmFnZXJzLmZvckVh
Y2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIG8uZGlzcG9zZSgpOworICAgICAgICB9KTsK
KyAgICAgICAgdGhpcy5hY3Rpb25NYW5hZ2VycyA9IFtdOworICAgICAgICB0aGlzLnRleHR1cmVz
LmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIG8uZGlzcG9zZSgpOworICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy50ZXh0dXJlcyA9IFtdOworICAgICAgICB0aGlzLnJlZmxlY3Rp
b25Qcm9iZXMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAgICAgICAgICAgby5kaXNwb3NlKCk7
CisgICAgICAgIH0pOworICAgICAgICB0aGlzLnJlZmxlY3Rpb25Qcm9iZXMgPSBbXTsKKyAgICAg
ICAgaWYgKHRoaXMuZW52aXJvbm1lbnRUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLmVudmly
b25tZW50VGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLmVudmlyb25tZW50VGV4
dHVyZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRo
aXMuc2NlbmUuX3NlcmlhbGl6YWJsZUNvbXBvbmVudHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7
CisgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gX2FbX2ldOworICAgICAgICAgICAgY29tcG9u
ZW50LnJlbW92ZUZyb21Db250YWluZXIodGhpcywgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIEFzc2V0Q29udGFpbmVyLnByb3RvdHlwZS5fbW92ZUFzc2V0cyA9IGZ1bmN0aW9uIChzb3Vy
Y2VBc3NldHMsIHRhcmdldEFzc2V0cywga2VlcEFzc2V0cykgeworICAgICAgICBpZiAoIXNvdXJj
ZUFzc2V0cykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAo
dmFyIF9pID0gMCwgc291cmNlQXNzZXRzXzEgPSBzb3VyY2VBc3NldHM7IF9pIDwgc291cmNlQXNz
ZXRzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgYXNzZXQgPSBzb3VyY2VBc3Nl
dHNfMVtfaV07CisgICAgICAgICAgICB2YXIgbW92ZSA9IHRydWU7CisgICAgICAgICAgICBpZiAo
a2VlcEFzc2V0cykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIF9hID0gMCwga2VlcEFzc2V0
c18xID0ga2VlcEFzc2V0czsgX2EgPCBrZWVwQXNzZXRzXzEubGVuZ3RoOyBfYSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBrZWVwQXNzZXQgPSBrZWVwQXNzZXRzXzFbX2FdOworICAgICAg
ICAgICAgICAgICAgICBpZiAoYXNzZXQgPT09IGtlZXBBc3NldCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbW92ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobW92ZSkgeworICAgICAgICAgICAgICAgIHRhcmdldEFzc2V0cy5wdXNo
KGFzc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogUmVtb3ZlcyBhbGwgdGhlIGFzc2V0cyBjb250YWluZWQgaW4gdGhlIHNjZW5lIGFuZCBhZGRz
IHRoZW0gdG8gdGhlIGNvbnRhaW5lci4KKyAgICAgKiBAcGFyYW0ga2VlcEFzc2V0cyBTZXQgb2Yg
YXNzZXRzIHRvIGtlZXAgaW4gdGhlIHNjZW5lLiAoZGVmYXVsdDogZW1wdHkpCisgICAgICovCisg
ICAgQXNzZXRDb250YWluZXIucHJvdG90eXBlLm1vdmVBbGxGcm9tU2NlbmUgPSBmdW5jdGlvbiAo
a2VlcEFzc2V0cykgeworICAgICAgICBpZiAoa2VlcEFzc2V0cyA9PT0gdW5kZWZpbmVkKSB7Cisg
ICAgICAgICAgICBrZWVwQXNzZXRzID0gbmV3IEtlZXBBc3NldHMoKTsKKyAgICAgICAgfQorICAg
ICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcykgeworICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3du
UHJvcGVydHkoa2V5KSkgeworICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IHRoaXNba2V5XSB8
fCAoa2V5ID09PSAiZW52aXJvbm1lbnRUZXh0dXJlIiA/IG51bGwgOiBbXSk7CisgICAgICAgICAg
ICAgICAgdGhpcy5fbW92ZUFzc2V0cyh0aGlzLnNjZW5lW2tleV0sIHRoaXNba2V5XSwga2VlcEFz
c2V0c1trZXldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLnJlbW92
ZUFsbEZyb21TY2VuZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhbGwgbWVzaGVz
IGluIHRoZSBhc3NldCBjb250YWluZXIgdG8gYSByb290IG1lc2ggdGhhdCBjYW4gYmUgdXNlZCB0
byBwb3NpdGlvbiBhbGwgdGhlIGNvbnRhaW5lZCBtZXNoZXMuIFRoZSByb290IG1lc2ggaXMgdGhl
biBhZGRlZCB0byB0aGUgZnJvbnQgb2YgdGhlIG1lc2hlcyBpbiB0aGUgYXNzZXRDb250YWluZXIu
CisgICAgICogQHJldHVybnMgdGhlIHJvb3QgbWVzaAorICAgICAqLworICAgIEFzc2V0Q29udGFp
bmVyLnByb3RvdHlwZS5jcmVhdGVSb290TWVzaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IHJvb3RNZXNoID0gbmV3IF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJNZXNoIl0oImFzc2V0Q29udGFpbmVyUm9vdE1lc2giLCB0aGlzLnNjZW5lKTsKKyAgICAgICAg
dGhpcy5tZXNoZXMuZm9yRWFjaChmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgaWYgKCFtLnBh
cmVudCkgeworICAgICAgICAgICAgICAgIHJvb3RNZXNoLmFkZENoaWxkKG0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5tZXNoZXMudW5zaGlmdChyb290TWVzaCk7
CisgICAgICAgIHJldHVybiByb290TWVzaDsKKyAgICB9OworICAgIHJldHVybiBBc3NldENvbnRh
aW5lcjsKK30oX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJz
dHJhY3RTY2VuZSJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vaW5kZXgudHMiOgor
LyohKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9pbmRleC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQWJzdHJhY3RTY2VuZSwgS2Vl
cEFzc2V0cywgQXNzZXRDb250YWluZXIsIE5vZGUsIFNjZW5lLCBTY2VuZUNvbXBvbmVudENvbnN0
YW50cywgU3RhZ2UsIEFic3RyYWN0QWN0aW9uTWFuYWdlciwgQWN0aW9uLCBBY3Rpb25FdmVudCwg
QWN0aW9uTWFuYWdlciwgQ29uZGl0aW9uLCBWYWx1ZUNvbmRpdGlvbiwgUHJlZGljYXRlQ29uZGl0
aW9uLCBTdGF0ZUNvbmRpdGlvbiwgU3dpdGNoQm9vbGVhbkFjdGlvbiwgU2V0U3RhdGVBY3Rpb24s
IFNldFZhbHVlQWN0aW9uLCBJbmNyZW1lbnRWYWx1ZUFjdGlvbiwgUGxheUFuaW1hdGlvbkFjdGlv
biwgU3RvcEFuaW1hdGlvbkFjdGlvbiwgRG9Ob3RoaW5nQWN0aW9uLCBDb21iaW5lQWN0aW9uLCBF
eGVjdXRlQ29kZUFjdGlvbiwgU2V0UGFyZW50QWN0aW9uLCBQbGF5U291bmRBY3Rpb24sIFN0b3BT
b3VuZEFjdGlvbiwgSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiwgQW5pbWF0YWJsZSwgX0lBbmltYXRp
b25TdGF0ZSwgQW5pbWF0aW9uLCBUYXJnZXRlZEFuaW1hdGlvbiwgQW5pbWF0aW9uR3JvdXAsIEFu
aW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSwgRWFzaW5nRnVuY3Rpb24sIENpcmNsZUVhc2UsIEJh
Y2tFYXNlLCBCb3VuY2VFYXNlLCBDdWJpY0Vhc2UsIEVsYXN0aWNFYXNlLCBFeHBvbmVudGlhbEVh
c2UsIFBvd2VyRWFzZSwgUXVhZHJhdGljRWFzZSwgUXVhcnRpY0Vhc2UsIFF1aW50aWNFYXNlLCBT
aW5lRWFzZSwgQmV6aWVyQ3VydmVFYXNlLCBSdW50aW1lQW5pbWF0aW9uLCBBbmltYXRpb25FdmVu
dCwgQW5pbWF0aW9uS2V5SW50ZXJwb2xhdGlvbiwgQW5pbWF0aW9uUmFuZ2UsIEFuYWx5c2VyLCBB
dWRpb0VuZ2luZSwgQXVkaW9TY2VuZUNvbXBvbmVudCwgU291bmQsIFNvdW5kVHJhY2ssIFdlaWdo
dGVkU291bmQsIEJvbmUsIEJvbmVJS0NvbnRyb2xsZXIsIEJvbmVMb29rQ29udHJvbGxlciwgU2tl
bGV0b24sIENhbWVyYUlucHV0VHlwZXMsIENhbWVyYUlucHV0c01hbmFnZXIsIENhbWVyYSwgVGFy
Z2V0Q2FtZXJhLCBGcmVlQ2FtZXJhLCBGcmVlQ2FtZXJhSW5wdXRzTWFuYWdlciwgVG91Y2hDYW1l
cmEsIEFyY1JvdGF0ZUNhbWVyYSwgQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlciwgRGV2aWNl
T3JpZW50YXRpb25DYW1lcmEsIEZseUNhbWVyYSwgRmx5Q2FtZXJhSW5wdXRzTWFuYWdlciwgRm9s
bG93Q2FtZXJhLCBBcmNGb2xsb3dDYW1lcmEsIEZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIsIEdh
bWVwYWRDYW1lcmEsIFVuaXZlcnNhbENhbWVyYSwgVmlydHVhbEpveXN0aWNrc0NhbWVyYSwgQ29s
bGlkZXIsIERlZmF1bHRDb2xsaXNpb25Db29yZGluYXRvciwgUGlja2luZ0luZm8sIEludGVyc2Vj
dGlvbkluZm8sIF9NZXNoQ29sbGlzaW9uRGF0YSwgQm91bmRpbmdCb3gsIEJvdW5kaW5nSW5mbywg
Qm91bmRpbmdTcGhlcmUsIFJheSwgQXhlc1ZpZXdlciwgQm9uZUF4ZXNWaWV3ZXIsIERlYnVnTGF5
ZXIsIFBoeXNpY3NWaWV3ZXIsIFJheUhlbHBlciwgU2tlbGV0b25WaWV3ZXIsIENvbnN0YW50cywg
SW5zdGFuY2luZ0F0dHJpYnV0ZUluZm8sIERlcHRoVGV4dHVyZUNyZWF0aW9uT3B0aW9ucywgRW5n
aW5lQ2FwYWJpbGl0aWVzLCBFbmdpbmUsIEVuZ2luZVN0b3JlLCBOdWxsRW5naW5lT3B0aW9ucywg
TnVsbEVuZ2luZSwgV2ViR0xQaXBlbGluZUNvbnRleHQsIFdlYkdQVUNvbnN0YW50cywgV2ViR1BV
RW5naW5lLCBXZWJHTDJTaGFkZXJQcm9jZXNzb3IsIE5hdGl2ZUVuZ2luZSwgS2V5Ym9hcmRFdmVu
dFR5cGVzLCBLZXlib2FyZEluZm8sIEtleWJvYXJkSW5mb1ByZSwgUG9pbnRlckV2ZW50VHlwZXMs
IFBvaW50ZXJJbmZvQmFzZSwgUG9pbnRlckluZm9QcmUsIFBvaW50ZXJJbmZvLCBDbGlwYm9hcmRF
dmVudFR5cGVzLCBDbGlwYm9hcmRJbmZvLCBTdGlja1ZhbHVlcywgR2FtZXBhZCwgR2VuZXJpY1Bh
ZCwgR2FtZXBhZE1hbmFnZXIsIEdhbWVwYWRTeXN0ZW1TY2VuZUNvbXBvbmVudCwgWGJveDM2MEJ1
dHRvbiwgWGJveDM2MERwYWQsIFhib3gzNjBQYWQsIER1YWxTaG9ja0J1dHRvbiwgRHVhbFNob2Nr
RHBhZCwgRHVhbFNob2NrUGFkLCBBeGlzRHJhZ0dpem1vLCBBeGlzU2NhbGVHaXptbywgQm91bmRp
bmdCb3hHaXptbywgR2l6bW8sIEdpem1vTWFuYWdlciwgUGxhbmVSb3RhdGlvbkdpem1vLCBQb3Np
dGlvbkdpem1vLCBSb3RhdGlvbkdpem1vLCBTY2FsZUdpem1vLCBMaWdodEdpem1vLCBQbGFuZURy
YWdHaXptbywgRW52aXJvbm1lbnRIZWxwZXIsIFBob3RvRG9tZSwgX2ZvcmNlU2NlbmVIZWxwZXJz
VG9CdW5kbGUsIFZpZGVvRG9tZSwgRW5naW5lSW5zdHJ1bWVudGF0aW9uLCBTY2VuZUluc3RydW1l
bnRhdGlvbiwgX1RpbWVUb2tlbiwgRWZmZWN0TGF5ZXIsIEVmZmVjdExheWVyU2NlbmVDb21wb25l
bnQsIEdsb3dMYXllciwgSGlnaGxpZ2h0TGF5ZXIsIExheWVyLCBMYXllclNjZW5lQ29tcG9uZW50
LCBMZW5zRmxhcmUsIExlbnNGbGFyZVN5c3RlbSwgTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25l
bnQsIExpZ2h0LCBTaGFkb3dMaWdodCwgRGlyZWN0aW9uYWxMaWdodCwgSGVtaXNwaGVyaWNMaWdo
dCwgUG9pbnRMaWdodCwgU3BvdExpZ2h0LCBEZWZhdWx0TG9hZGluZ1NjcmVlbiwgU2NlbmVMb2Fk
ZXJQcm9ncmVzc0V2ZW50LCBTY2VuZUxvYWRlciwgU2NlbmVMb2FkZXJGbGFncywgQ29sb3JDdXJ2
ZXMsIEVmZmVjdEZhbGxiYWNrcywgRWZmZWN0Q3JlYXRpb25PcHRpb25zLCBFZmZlY3QsIEZyZXNu
ZWxQYXJhbWV0ZXJzLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uRGVmaW5lcywgSW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbiwgTWF0ZXJpYWwsIE1hdGVyaWFsRGVmaW5lcywgTWF0ZXJp
YWxIZWxwZXIsIE11bHRpTWF0ZXJpYWwsIFB1c2hNYXRlcmlhbCwgU2hhZGVyTWF0ZXJpYWwsIFN0
YW5kYXJkTWF0ZXJpYWxEZWZpbmVzLCBTdGFuZGFyZE1hdGVyaWFsLCBCYXNlVGV4dHVyZSwgQ3Vi
ZVRleHR1cmUsIER5bmFtaWNUZXh0dXJlLCBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZSwgSERS
Q3ViZVRleHR1cmUsIEludGVybmFsVGV4dHVyZSwgTWlycm9yVGV4dHVyZSwgTXVsdGlSZW5kZXJU
YXJnZXQsIFJhd1RleHR1cmUsIFJlbmRlclRhcmdldFRleHR1cmUsIFRleHR1cmUsIFVuaWZvcm1C
dWZmZXIsIE1hdGVyaWFsRmxhZ3MsIEVmZmVjdFJlbmRlcmVyLCBFZmZlY3RXcmFwcGVyLCBTY2Fs
YXIsIFNwYWNlLCBBeGlzLCBDb2xvcjMsIENvbG9yNCwgVG1wQ29sb3JzLCBUb0dhbW1hU3BhY2Us
IFRvTGluZWFyU3BhY2UsIEVwc2lsb24sIEZydXN0dW0sIFBsYW5lLCBTaXplLCBWZWN0b3IyLCBW
ZWN0b3IzLCBWZWN0b3I0LCBRdWF0ZXJuaW9uLCBNYXRyaXgsIFRtcFZlY3RvcnMsIFZpZXdwb3J0
LCBTcGhlcmljYWxIYXJtb25pY3MsIFNwaGVyaWNhbFBvbHlub21pYWwsIEFic3RyYWN0TWVzaCwg
QnVmZmVyLCBWZXJ0ZXhCdWZmZXIsIENTRywgR2VvbWV0cnksIEdyb3VuZE1lc2gsIFRyYWlsTWVz
aCwgSW5zdGFuY2VkTWVzaCwgTGluZXNNZXNoLCBJbnN0YW5jZWRMaW5lc01lc2gsIF9DcmVhdGlv
bkRhdGFTdG9yYWdlLCBfSW5zdGFuY2VzQmF0Y2gsIE1lc2gsIFZlcnRleERhdGEsIE1lc2hCdWls
ZGVyLCBTaW1wbGlmaWNhdGlvblNldHRpbmdzLCBTaW1wbGlmaWNhdGlvblF1ZXVlLCBTaW1wbGlm
aWNhdGlvblR5cGUsIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQsIFBvbHlnb24sIFBv
bHlnb25NZXNoQnVpbGRlciwgQmFzZVN1Yk1lc2gsIFN1Yk1lc2gsIE1lc2hMT0RMZXZlbCwgVHJh
bnNmb3JtTm9kZSwgQm94QnVpbGRlciwgU3BoZXJlQnVpbGRlciwgQ3lsaW5kZXJCdWlsZGVyLCBU
b3J1c0J1aWxkZXIsIExpbmVzQnVpbGRlciwgUGxhbmVCdWlsZGVyLCBHcm91bmRCdWlsZGVyLCBE
YXRhQnVmZmVyLCBXZWJHTERhdGFCdWZmZXIsIFdlYkdQVURhdGFCdWZmZXIsIE1vcnBoVGFyZ2V0
LCBNb3JwaFRhcmdldE1hbmFnZXIsIERhdGFiYXNlLCBCYXNlUGFydGljbGVTeXN0ZW0sIEdQVVBh
cnRpY2xlU3lzdGVtLCBQYXJ0aWNsZSwgUGFydGljbGVIZWxwZXIsIFBhcnRpY2xlU3lzdGVtLCBf
SURvTmVlZFRvQmVJblRoZUJ1aWxkLCBQYXJ0aWNsZVN5c3RlbVNldCwgU29saWRQYXJ0aWNsZSwg
TW9kZWxTaGFwZSwgRGVwdGhTb3J0ZWRQYXJ0aWNsZSwgU29saWRQYXJ0aWNsZVN5c3RlbSwgU3Vi
RW1pdHRlclR5cGUsIFN1YkVtaXR0ZXIsIFBoeXNpY3NFbmdpbmUsIFBoeXNpY3NFbmdpbmVTY2Vu
ZUNvbXBvbmVudCwgUGh5c2ljc0hlbHBlciwgUGh5c2ljc1JhZGlhbEV4cGxvc2lvbkV2ZW50T3B0
aW9ucywgUGh5c2ljc1VwZHJhZnRFdmVudE9wdGlvbnMsIFBoeXNpY3NWb3J0ZXhFdmVudE9wdGlv
bnMsIFBoeXNpY3NSYWRpYWxJbXB1bHNlRmFsbG9mZiwgUGh5c2ljc1VwZHJhZnRNb2RlLCBQaHlz
aWNzSW1wb3N0b3IsIFBoeXNpY3NKb2ludCwgRGlzdGFuY2VKb2ludCwgTW90b3JFbmFibGVkSm9p
bnQsIEhpbmdlSm9pbnQsIEhpbmdlMkpvaW50LCBBbmFnbHlwaFBvc3RQcm9jZXNzLCBCbGFja0Fu
ZFdoaXRlUG9zdFByb2Nlc3MsIEJsb29tRWZmZWN0LCBCbG9vbU1lcmdlUG9zdFByb2Nlc3MsIEJs
dXJQb3N0UHJvY2VzcywgQ2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzLCBDaXJjbGVPZkNv
bmZ1c2lvblBvc3RQcm9jZXNzLCBDb2xvckNvcnJlY3Rpb25Qb3N0UHJvY2VzcywgQ29udm9sdXRp
b25Qb3N0UHJvY2VzcywgRGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzLCBEZXB0aE9mRmllbGRF
ZmZlY3RCbHVyTGV2ZWwsIERlcHRoT2ZGaWVsZEVmZmVjdCwgRGVwdGhPZkZpZWxkTWVyZ2VQb3N0
UHJvY2Vzc09wdGlvbnMsIERlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3MsIERpc3BsYXlQYXNz
UG9zdFByb2Nlc3MsIEV4dHJhY3RIaWdobGlnaHRzUG9zdFByb2Nlc3MsIEZpbHRlclBvc3RQcm9j
ZXNzLCBGeGFhUG9zdFByb2Nlc3MsIEdyYWluUG9zdFByb2Nlc3MsIEhpZ2hsaWdodHNQb3N0UHJv
Y2VzcywgSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MsIE1vdGlvbkJsdXJQb3N0UHJvY2Vzcywg
UGFzc1Bvc3RQcm9jZXNzLCBQYXNzQ3ViZVBvc3RQcm9jZXNzLCBQb3N0UHJvY2VzcywgUG9zdFBy
b2Nlc3NNYW5hZ2VyLCBSZWZyYWN0aW9uUG9zdFByb2Nlc3MsIFNoYXJwZW5Qb3N0UHJvY2Vzcywg
U3RlcmVvc2NvcGljSW50ZXJsYWNlUG9zdFByb2Nlc3MsIFRvbmVtYXBwaW5nT3BlcmF0b3IsIFRv
bmVtYXBQb3N0UHJvY2VzcywgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLCBW
UkRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFByb2Nlc3MsIFZSTXVsdGl2aWV3VG9TaW5nbGV2aWV3
UG9zdFByb2Nlc3MsIFJlZmxlY3Rpb25Qcm9iZSwgQm91bmRpbmdCb3hSZW5kZXJlciwgRGVwdGhS
ZW5kZXJlciwgRGVwdGhSZW5kZXJlclNjZW5lQ29tcG9uZW50LCBFZGdlc1JlbmRlcmVyLCBMaW5l
RWRnZXNSZW5kZXJlciwgR2VvbWV0cnlCdWZmZXJSZW5kZXJlciwgR2VvbWV0cnlCdWZmZXJSZW5k
ZXJlclNjZW5lQ29tcG9uZW50LCBPdXRsaW5lUmVuZGVyZXIsIFJlbmRlcmluZ0dyb3VwLCBSZW5k
ZXJpbmdHcm91cEluZm8sIFJlbmRlcmluZ01hbmFnZXIsIFV0aWxpdHlMYXllclJlbmRlcmVyLCBT
cHJpdGUsIFNwcml0ZU1hbmFnZXIsIFNwcml0ZVBhY2tlZE1hbmFnZXIsIFNwcml0ZVNjZW5lQ29t
cG9uZW50LCBfQWxwaGFTdGF0ZSwgX0RlcHRoQ3VsbGluZ1N0YXRlLCBfU3RlbmNpbFN0YXRlLCBB
bmRPck5vdEV2YWx1YXRvciwgQXNzZXRUYXNrU3RhdGUsIEFic3RyYWN0QXNzZXRUYXNrLCBBc3Nl
dHNQcm9ncmVzc0V2ZW50LCBNZXNoQXNzZXRUYXNrLCBUZXh0RmlsZUFzc2V0VGFzaywgQmluYXJ5
RmlsZUFzc2V0VGFzaywgSW1hZ2VBc3NldFRhc2ssIFRleHR1cmVBc3NldFRhc2ssIEN1YmVUZXh0
dXJlQXNzZXRUYXNrLCBIRFJDdWJlVGV4dHVyZUFzc2V0VGFzaywgRXF1aVJlY3Rhbmd1bGFyQ3Vi
ZVRleHR1cmVBc3NldFRhc2ssIEFzc2V0c01hbmFnZXIsIEREU1Rvb2xzLCBleHBhbmRUb1Byb3Bl
cnR5LCBzZXJpYWxpemUsIHNlcmlhbGl6ZUFzVGV4dHVyZSwgc2VyaWFsaXplQXNDb2xvcjMsIHNl
cmlhbGl6ZUFzRnJlc25lbFBhcmFtZXRlcnMsIHNlcmlhbGl6ZUFzVmVjdG9yMiwgc2VyaWFsaXpl
QXNWZWN0b3IzLCBzZXJpYWxpemVBc01lc2hSZWZlcmVuY2UsIHNlcmlhbGl6ZUFzQ29sb3JDdXJ2
ZXMsIHNlcmlhbGl6ZUFzQ29sb3I0LCBzZXJpYWxpemVBc0ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24sIHNlcmlhbGl6ZUFzUXVhdGVybmlvbiwgc2VyaWFsaXplQXNNYXRyaXgsIHNlcmlhbGl6
ZUFzQ2FtZXJhUmVmZXJlbmNlLCBTZXJpYWxpemF0aW9uSGVscGVyLCBEZWZlcnJlZCwgRW52aXJv
bm1lbnRUZXh0dXJlVG9vbHMsIE1lc2hFeHBsb2RlciwgRmlsZXNJbnB1dCwgQ3ViZU1hcFRvU3Bo
ZXJpY2FsUG9seW5vbWlhbFRvb2xzLCBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lciwgRXZlbnRTdGF0
ZSwgT2JzZXJ2ZXIsIE11bHRpT2JzZXJ2ZXIsIE9ic2VydmFibGUsIFBlcmZvcm1hbmNlTW9uaXRv
ciwgUm9sbGluZ0F2ZXJhZ2UsIFByb21pc2VQb2x5ZmlsbCwgU2NlbmVPcHRpbWl6YXRpb24sIFRl
eHR1cmVPcHRpbWl6YXRpb24sIEhhcmR3YXJlU2NhbGluZ09wdGltaXphdGlvbiwgU2hhZG93c09w
dGltaXphdGlvbiwgUG9zdFByb2Nlc3Nlc09wdGltaXphdGlvbiwgTGVuc0ZsYXJlc09wdGltaXph
dGlvbiwgQ3VzdG9tT3B0aW1pemF0aW9uLCBQYXJ0aWNsZXNPcHRpbWl6YXRpb24sIFJlbmRlclRh
cmdldHNPcHRpbWl6YXRpb24sIE1lcmdlTWVzaGVzT3B0aW1pemF0aW9uLCBTY2VuZU9wdGltaXpl
ck9wdGlvbnMsIFNjZW5lT3B0aW1pemVyLCBTY2VuZVNlcmlhbGl6ZXIsIFNtYXJ0QXJyYXksIFNt
YXJ0QXJyYXlOb0R1cGxpY2F0ZSwgU3RyaW5nRGljdGlvbmFyeSwgVGFncywgVGV4dHVyZVRvb2xz
LCBUR0FUb29scywgVG9vbHMsIGNsYXNzTmFtZSwgQXN5bmNMb29wLCBWaWRlb1JlY29yZGVyLCBK
b3lzdGlja0F4aXMsIFZpcnR1YWxKb3lzdGljaywgV29ya2VyUG9vbCwgTG9nZ2VyLCBfVHlwZVN0
b3JlLCBGaWxlc0lucHV0U3RvcmUsIERlZXBDb3BpZXIsIFBpdm90VG9vbHMsIFByZWNpc2lvbkRh
dGUsIFNjcmVlbnNob3RUb29scywgV2ViUmVxdWVzdCwgSW5zcGVjdGFibGVUeXBlLCBCUkRGVGV4
dHVyZVRvb2xzLCBSR0JEVGV4dHVyZVRvb2xzLCBDb2xvckdyYWRpZW50LCBDb2xvcjNHcmFkaWVu
dCwgRmFjdG9yR3JhZGllbnQsIEdyYWRpZW50SGVscGVyLCBQZXJmQ291bnRlciwgUmV0cnlTdHJh
dGVneSwgTG9hZEZpbGVFcnJvciwgQXV0b1JvdGF0aW9uQmVoYXZpb3IsIEJvdW5jaW5nQmVoYXZp
b3IsIEZyYW1pbmdCZWhhdmlvciwgQXR0YWNoVG9Cb3hCZWhhdmlvciwgRmFkZUluT3V0QmVoYXZp
b3IsIE11bHRpUG9pbnRlclNjYWxlQmVoYXZpb3IsIFBvaW50ZXJEcmFnQmVoYXZpb3IsIFNpeERv
ZkRyYWdCZWhhdmlvciwgQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0LCBBcmNSb3RhdGVDYW1l
cmFLZXlib2FyZE1vdmVJbnB1dCwgQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LCBBcmNS
b3RhdGVDYW1lcmFQb2ludGVyc0lucHV0LCBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0
aW9uSW5wdXQsIEZseUNhbWVyYUtleWJvYXJkSW5wdXQsIEZseUNhbWVyYU1vdXNlSW5wdXQsIEZv
bGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LCBGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQs
IEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQsIEZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklu
cHV0LCBGcmVlQ2FtZXJhR2FtZXBhZElucHV0LCBGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQs
IEZyZWVDYW1lcmFNb3VzZUlucHV0LCBGcmVlQ2FtZXJhVG91Y2hJbnB1dCwgRnJlZUNhbWVyYVZp
cnR1YWxKb3lzdGlja0lucHV0LCBBbmFnbHlwaEFyY1JvdGF0ZUNhbWVyYSwgQW5hZ2x5cGhGcmVl
Q2FtZXJhLCBBbmFnbHlwaEdhbWVwYWRDYW1lcmEsIEFuYWdseXBoVW5pdmVyc2FsQ2FtZXJhLCBT
dGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEsIFN0ZXJlb3Njb3BpY0ZyZWVDYW1lcmEsIFN0ZXJl
b3Njb3BpY0dhbWVwYWRDYW1lcmEsIFN0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYSwgVlJDYW1l
cmFNZXRyaWNzLCBWUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhLCBWUkRldmljZU9y
aWVudGF0aW9uRnJlZUNhbWVyYSwgVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEsIE9u
QWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJsZUV2ZW50LCBWUkV4cGVyaWVuY2VIZWxwZXIsIFdlYlZS
RnJlZUNhbWVyYSwgV2ViWFJDYW1lcmEsIFdlYlhSRW50ZXJFeGl0VUlCdXR0b24sIFdlYlhSRW50
ZXJFeGl0VUlPcHRpb25zLCBXZWJYUkVudGVyRXhpdFVJLCBXZWJYUlN0YXRlLCBXZWJYUkV4cGVy
aWVuY2VIZWxwZXIsIFdlYlhSSW5wdXQsIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24sIFdl
YlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb24sIFdlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVy
LCBXZWJYUkNvbnRyb2xsZXIsIFdlYlhSTWFuYWdlZE91dHB1dENhbnZhcywgV2ViWFJTZXNzaW9u
TWFuYWdlciwgT2N0cmVlLCBPY3RyZWVCbG9jaywgT2N0cmVlU2NlbmVDb21wb25lbnQsIF9PY2Ns
dXNpb25EYXRhU3RvcmFnZSwgX2ZvcmNlVHJhbnNmb3JtRmVlZGJhY2tUb0J1bmRsZSwgRGF5ZHJl
YW1Db250cm9sbGVyLCBHZWFyVlJDb250cm9sbGVyLCBHZW5lcmljQ29udHJvbGxlciwgT2N1bHVz
VG91Y2hDb250cm9sbGVyLCBQb3NlRW5hYmxlZENvbnRyb2xsZXJUeXBlLCBQb3NlRW5hYmxlZENv
bnRyb2xsZXJIZWxwZXIsIFBvc2VFbmFibGVkQ29udHJvbGxlciwgVml2ZUNvbnRyb2xsZXIsIFdl
YlZSQ29udHJvbGxlciwgV2luZG93c01vdGlvbkNvbnRyb2xsZXIsIFNoYWRvd0dlbmVyYXRvciwg
U2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQsIF9CYWJ5bG9uTG9hZGVyUmVnaXN0ZXJlZCwg
QmFja2dyb3VuZE1hdGVyaWFsLCBQQlJNYXRlcmlhbERlZmluZXMsIFBCUkJhc2VNYXRlcmlhbCwg
UEJSQmFzZVNpbXBsZU1hdGVyaWFsLCBQQlJNYXRlcmlhbCwgUEJSTWV0YWxsaWNSb3VnaG5lc3NN
YXRlcmlhbCwgUEJSU3BlY3VsYXJHbG9zc2luZXNzTWF0ZXJpYWwsIENvbG9yR3JhZGluZ1RleHR1
cmUsIFJhd0N1YmVUZXh0dXJlLCBSYXdUZXh0dXJlM0QsIFJlZnJhY3Rpb25UZXh0dXJlLCBWaWRl
b1RleHR1cmUsIEh0bWxFbGVtZW50VGV4dHVyZSwgTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLCBO
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLCBOb2RlTWF0ZXJpYWxDb25uZWN0
aW9uUG9pbnQsIE5vZGVNYXRlcmlhbEJsb2NrLCBOb2RlTWF0ZXJpYWxEZWZpbmVzLCBOb2RlTWF0
ZXJpYWwsIE5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcywgT3JpZW50YXRpb24sIEJlemllckN1cnZl
LCBBbmdsZSwgQXJjMiwgUGF0aDIsIFBhdGgzRCwgQ3VydmUzLCBQb3NpdGlvbk5vcm1hbFZlcnRl
eCwgUG9zaXRpb25Ob3JtYWxUZXh0dXJlVmVydGV4LCBEcmFjb0NvbXByZXNzaW9uLCBUaWxlZEJv
eEJ1aWxkZXIsIERpc2NCdWlsZGVyLCBSaWJib25CdWlsZGVyLCBIZW1pc3BoZXJlQnVpbGRlciwg
VG9ydXNLbm90QnVpbGRlciwgUG9seWdvbkJ1aWxkZXIsIFNoYXBlQnVpbGRlciwgTGF0aGVCdWls
ZGVyLCBUaWxlZFBsYW5lQnVpbGRlciwgVHViZUJ1aWxkZXIsIFBvbHloZWRyb25CdWlsZGVyLCBJ
Y29TcGhlcmVCdWlsZGVyLCBEZWNhbEJ1aWxkZXIsIFJlY2FzdEpTUGx1Z2luLCBSZWNhc3RKU0Ny
b3dkLCBCb3hQYXJ0aWNsZUVtaXR0ZXIsIENvbmVQYXJ0aWNsZUVtaXR0ZXIsIEN5bGluZGVyUGFy
dGljbGVFbWl0dGVyLCBDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyLCBIZW1pc3BoZXJp
Y1BhcnRpY2xlRW1pdHRlciwgUG9pbnRQYXJ0aWNsZUVtaXR0ZXIsIFNwaGVyZVBhcnRpY2xlRW1p
dHRlciwgU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIsIENhbm5vbkpTUGx1Z2luLCBBbW1v
SlNQbHVnaW4sIE9pbW9KU1BsdWdpbiwgUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QsIFBvc3RQcm9j
ZXNzUmVuZGVyUGlwZWxpbmUsIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyLCBQb3N0
UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50LCBIRFJUb29scywgUGFu
b3JhbWFUb0N1YmVNYXBUb29scywgX0REU1RleHR1cmVMb2FkZXIsIF9FTlZUZXh0dXJlTG9hZGVy
LCBfS1RYVGV4dHVyZUxvYWRlciwgX1RHQVRleHR1cmVMb2FkZXIsIF9CYXNpc1RleHR1cmVMb2Fk
ZXIsIEN1c3RvbVByb2NlZHVyYWxUZXh0dXJlLCBOb2lzZVByb2NlZHVyYWxUZXh0dXJlLCBQcm9j
ZWR1cmFsVGV4dHVyZSwgUHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudCwgTXVsdGlwbHlC
bG9jaywgQWRkQmxvY2ssIFNjYWxlQmxvY2ssIENsYW1wQmxvY2ssIENyb3NzQmxvY2ssIERvdEJs
b2NrLCBUcmFuc2Zvcm1CbG9jaywgUmVtYXBCbG9jaywgTm9ybWFsaXplQmxvY2ssIFRyaWdvbm9t
ZXRyeUJsb2NrT3BlcmF0aW9ucywgVHJpZ29ub21ldHJ5QmxvY2ssIENvbG9yTWVyZ2VyQmxvY2ss
IFZlY3Rvck1lcmdlckJsb2NrLCBDb2xvclNwbGl0dGVyQmxvY2ssIFZlY3RvclNwbGl0dGVyQmxv
Y2ssIExlcnBCbG9jaywgRGl2aWRlQmxvY2ssIFN1YnRyYWN0QmxvY2ssIFN0ZXBCbG9jaywgT3Bw
b3NpdGVCbG9jaywgVmlld0RpcmVjdGlvbkJsb2NrLCBGcmVzbmVsQmxvY2ssIE1heEJsb2NrLCBN
aW5CbG9jaywgTm9kZU1hdGVyaWFsT3B0aW1pemVyLCBEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUs
IExlbnNSZW5kZXJpbmdQaXBlbGluZSwgU1NBTzJSZW5kZXJpbmdQaXBlbGluZSwgU1NBT1JlbmRl
cmluZ1BpcGVsaW5lLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLCBWZXJ0ZXhPdXRwdXRCbG9j
aywgQm9uZXNCbG9jaywgSW5zdGFuY2VzQmxvY2ssIE1vcnBoVGFyZ2V0c0Jsb2NrLCBMaWdodElu
Zm9ybWF0aW9uQmxvY2ssIEZyYWdtZW50T3V0cHV0QmxvY2ssIEFscGhhVGVzdEJsb2NrLCBJbWFn
ZVByb2Nlc3NpbmdCbG9jaywgUGVydHVyYk5vcm1hbEJsb2NrLCBGb2dCbG9jaywgTGlnaHRCbG9j
aywgVGV4dHVyZUJsb2NrLCBSZWZsZWN0aW9uVGV4dHVyZUJsb2NrLCBJbnB1dEJsb2NrLCBBbmlt
YXRlZElucHV0QmxvY2tUeXBlcyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vYWJzdHJhY3RTY2VuZSAqLyAiLi9hYnN0cmFjdFNjZW5l
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFic3RyYWN0U2NlbmUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9hYnN0cmFjdFNjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFic3RyYWN0
U2NlbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQWN0aW9uc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9B
Y3Rpb25zL2luZGV4ICovICIuL0FjdGlvbnMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
QWJzdHJhY3RBY3Rpb25NYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQWN0aW9uc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdEFjdGlvbk1hbmFnZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQWN0
aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBY3Rpb24iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQWN0aW9uRXZlbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BY3Rp
b25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFjdGlvbkV2ZW50Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkFjdGlvbk1hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9BY3Rpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFjdGlvbk1hbmFn
ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfQWN0aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb25kaXRp
b24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmFsdWVDb25kaXRpb24iLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9BY3Rpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZh
bHVlQ29uZGl0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlByZWRpY2F0ZUNvbmRpdGlv
biIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0FjdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siUHJlZGljYXRlQ29uZGl0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlN0YXRlQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQWN0aW9uc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTdGF0ZUNvbmRpdGlvbiJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTd2l0Y2hCb29sZWFuQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQWN0
aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTd2l0Y2hCb29sZWFuQWN0
aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNldFN0YXRlQWN0aW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfQWN0aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
ZXRTdGF0ZUFjdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTZXRWYWx1ZUFjdGlvbiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0FjdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU2V0VmFsdWVBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5jcmVt
ZW50VmFsdWVBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BY3Rpb25zX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkluY3JlbWVudFZhbHVlQWN0aW9uIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBsYXlBbmltYXRpb25BY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9BY3Rpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBsYXlBbmltYXRp
b25BY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RvcEFuaW1hdGlvbkFjdGlvbiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0FjdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU3RvcEFuaW1hdGlvbkFjdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJE
b05vdGhpbmdBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BY3Rpb25zX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkRvTm90aGluZ0FjdGlvbiJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJDb21iaW5lQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQWN0aW9uc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb21iaW5lQWN0aW9uIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkV4ZWN1dGVDb2RlQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfQWN0aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFeGVjdXRlQ29k
ZUFjdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTZXRQYXJlbnRBY3Rpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9BY3Rpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlNldFBhcmVudEFjdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQbGF5U291bmRB
Y3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BY3Rpb25zX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlBsYXlTb3VuZEFjdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTdG9wU291bmRBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BY3Rpb25zX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlN0b3BTb3VuZEFjdGlvbiJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJJbnRlcnBvbGF0ZVZhbHVlQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfQWN0aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnRlcnBvbGF0
ZVZhbHVlQWN0aW9uIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0FuaW1hdGlv
bnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vQW5pbWF0aW9ucy9pbmRleCAqLyAiLi9BbmltYXRpb25zL2luZGV4LnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkFuaW1hdGFibGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BbmltYXRp
b25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFuaW1hdGFibGUiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiX0lBbmltYXRpb25TdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0FuaW1hdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siX0lBbmlt
YXRpb25TdGF0ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmltYXRpb24iLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkFuaW1hdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUYXJnZXRlZEFuaW1hdGlv
biIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0FuaW1hdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siVGFyZ2V0ZWRBbmltYXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQW5pbWF0aW9uR3JvdXAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFuaW1hdGlvbkdyb3VwIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkFuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX0FuaW1hdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
QW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVh
c2luZ0Z1bmN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQW5pbWF0aW9uc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFYXNpbmdGdW5jdGlvbiJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJDaXJjbGVFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQW5pbWF0aW9uc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDaXJjbGVFYXNlIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkJhY2tFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQW5pbWF0aW9u
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJCYWNrRWFzZSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJCb3VuY2VFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQW5pbWF0
aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJCb3VuY2VFYXNlIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkN1YmljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Fu
aW1hdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ3ViaWNFYXNlIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVsYXN0aWNFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfQW5pbWF0aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbGFzdGlj
RWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFeHBvbmVudGlhbEVhc2UiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkV4cG9uZW50aWFsRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3dlckVhc2Ui
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlBvd2VyRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJRdWFkcmF0
aWNFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQW5pbWF0aW9uc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJRdWFkcmF0aWNFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlF1YXJ0aWNFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQW5pbWF0aW9uc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJRdWFydGljRWFzZSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJRdWludGljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0FuaW1hdGlvbnNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVpbnRpY0Vhc2UiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiU2luZUVhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BbmltYXRp
b25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNpbmVFYXNlIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkJlemllckN1cnZlRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0FuaW1hdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQmV6aWVyQ3Vy
dmVFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJ1bnRpbWVBbmltYXRpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlJ1bnRpbWVBbmltYXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5pbWF0
aW9uRXZlbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIkFuaW1hdGlvbkV2ZW50Il07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkFuaW1hdGlvbktleUludGVycG9sYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9B
bmltYXRpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFuaW1hdGlvbktl
eUludGVycG9sYXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5pbWF0aW9uUmFuZ2Ui
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkFuaW1hdGlvblJhbmdlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2Fzc2V0Q29udGFpbmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL2Fzc2V0Q29udGFpbmVyICovICIuL2Fzc2V0Q29udGFpbmVy
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktlZXBBc3NldHMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9hc3NldENvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJLZWVwQXNzZXRz
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFzc2V0Q29udGFpbmVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfYXNzZXRDb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQXNz
ZXRDb250YWluZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQXVkaW9faW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vQXVkaW8vaW5kZXggKi8gIi4vQXVkaW8vaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
QW5hbHlzZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BdWRpb19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJBbmFseXNlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBdWRp
b0VuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0F1ZGlvX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIkF1ZGlvRW5naW5lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkF1
ZGlvU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BdWRpb19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBdWRpb1NjZW5lQ29tcG9uZW50Il07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlNvdW5kIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQXVkaW9faW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU291bmQiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiU291bmRUcmFjayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0F1ZGlvX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNvdW5kVHJhY2siXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiV2VpZ2h0ZWRTb3VuZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0F1ZGlvX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIldlaWdodGVkU291bmQiXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfQmVoYXZpb3JzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0JlaGF2aW9ycy9pbmRleCAqLyAi
Li9CZWhhdmlvcnMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXV0b1JvdGF0aW9uQmVo
YXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CZWhhdmlvcnNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siQXV0b1JvdGF0aW9uQmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQm91bmNpbmdCZWhhdmlvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0JlaGF2aW9y
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJCb3VuY2luZ0JlaGF2aW9yIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyYW1pbmdCZWhhdmlvciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX0JlaGF2aW9yc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJGcmFt
aW5nQmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXR0YWNoVG9Cb3hCZWhhdmlv
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0JlaGF2aW9yc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJBdHRhY2hUb0JveEJlaGF2aW9yIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkZhZGVJbk91dEJlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmVoYXZpb3JzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkZhZGVJbk91dEJlaGF2aW9yIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk11bHRpUG9pbnRlclNjYWxlQmVoYXZpb3IiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9CZWhhdmlvcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQ
b2ludGVyRHJhZ0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmVoYXZpb3JzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlBvaW50ZXJEcmFnQmVoYXZpb3IiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU2l4RG9mRHJhZ0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfQmVoYXZpb3JzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNpeERv
ZkRyYWdCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Cb25lc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9Cb25lcy9pbmRleCAqLyAiLi9Cb25lcy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJCb25lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQm9uZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siQm9uZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb25lSUtDb250
cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQm9uZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siQm9uZUlLQ29udHJvbGxlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJCb25lTG9va0NvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Cb25lc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJCb25lTG9va0NvbnRyb2xsZXIiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiU2tlbGV0b24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Cb25lc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTa2VsZXRvbiJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0NhbWVyYXMvaW5kZXggKi8gIi4v
Q2FtZXJhcy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDYW1lcmFJbnB1dFR5cGVzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJDYW1lcmFJbnB1dFR5cGVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNhbWVy
YUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNhbWVyYUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVGFyZ2V0Q2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJUYXJnZXRDYW1lcmEiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRnJlZUNhbWVyYSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJGcmVlQ2FtZXJhSW5wdXRzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRnJlZUNh
bWVyYUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG91Y2hDYW1lcmEi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIlRvdWNoQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1JvdGF0
ZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siQXJjUm90YXRlQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkFyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9D
YW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkFyY1JvdGF0ZUNhbWVy
YUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGV2aWNlT3JpZW50YXRp
b25DYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIkRldmljZU9yaWVudGF0aW9uQ2FtZXJhIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkZseUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRmx5Q2FtZXJhIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkZseUNhbWVyYUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkZseUNhbWVyYUlu
cHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRm9sbG93Q2FtZXJhIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJGb2xsb3dDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjRm9sbG93Q2Ft
ZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJBcmNGb2xsb3dDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Rm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRm9sbG93Q2FtZXJhSW5wdXRzTWFu
YWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHYW1lcGFkQ2FtZXJhIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJH
YW1lcGFkQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlVuaXZlcnNhbENhbWVyYSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siVW5pdmVyc2FsQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpcnR1
YWxKb3lzdGlja3NDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZpcnR1YWxKb3lzdGlja3NDYW1lcmEiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0IiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJBcmNSb3RhdGVDYW1lcmFHYW1lcGFkSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
QXJjUm90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9D
YW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkFyY1JvdGF0ZUNhbWVy
YUtleWJvYXJkTW92ZUlucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1JvdGF0ZUNh
bWVyYU1vdXNlV2hlZWxJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElu
cHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5w
dXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X19bIkFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5wdXQiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRmx5Q2FtZXJh
S2V5Ym9hcmRJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGbHlDYW1lcmFNb3VzZUlu
cHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJGbHlDYW1lcmFNb3VzZUlucHV0Il07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
Q2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJGb2xsb3dDYW1lcmFL
ZXlib2FyZE1vdmVJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGb2xsb3dDYW1lcmFN
b3VzZVdoZWVsSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkZvbGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dCJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0IiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZy
ZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2Ft
ZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJGcmVlQ2FtZXJhRGV2aWNl
T3JpZW50YXRpb25JbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVlQ2FtZXJhR2Ft
ZXBhZElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJGcmVlQ2FtZXJhR2FtZXBhZElucHV0Il07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRnJlZUNh
bWVyYUtleWJvYXJkTW92ZUlucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1l
cmFNb3VzZUlucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJGcmVlQ2FtZXJhTW91c2VJbnB1dCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJGcmVlQ2FtZXJhVG91Y2hJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRnJlZUNhbWVyYVRv
dWNoSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYVZpcnR1YWxKb3lz
dGlja0lucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJGcmVlQ2FtZXJhVmlydHVhbEpveXN0aWNrSW5wdXQiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiQW5hZ2x5cGhBcmNSb3RhdGVDYW1lcmEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkFu
YWdseXBoQXJjUm90YXRlQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuYWdseXBo
RnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siQW5hZ2x5cGhGcmVlQ2FtZXJhIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkFuYWdseXBoR2FtZXBhZENhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Nh
bWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQW5hZ2x5cGhHYW1lcGFk
Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuYWdseXBoVW5pdmVyc2FsQ2FtZXJh
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fWyJBbmFnbHlwaFVuaXZlcnNhbENhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9D
YW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlN0ZXJlb3Njb3BpY0Fy
Y1JvdGF0ZUNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGVyZW9zY29waWNGcmVl
Q2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfN19fWyJTdGVyZW9zY29waWNGcmVlQ2FtZXJhIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlN0ZXJlb3Njb3BpY0dhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlN0ZXJlb3Njb3Bp
Y0dhbWVwYWRDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RlcmVvc2NvcGljVW5p
dmVyc2FsQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJTdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVlJDYW1lcmFNZXRyaWNzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWUkNhbWVyYU1l
dHJpY3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVlJEZXZpY2VPcmllbnRhdGlvbkFyY1Jv
dGF0ZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siVlJEZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJWUkRldmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZSRGV2
aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9u
QWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJsZUV2ZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2Ft
ZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJPbkFmdGVyRW50ZXJpbmdW
Uk9ic2VydmFibGVFdmVudCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWUkV4cGVyaWVuY2VI
ZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIlZSRXhwZXJpZW5jZUhlbHBlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJXZWJWUkZyZWVDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIldlYlZSRnJlZUNhbWVyYSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJXZWJYUkNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVy
YXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siV2ViWFJDYW1lcmEiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJFbnRlckV4aXRVSUJ1dHRvbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siV2Vi
WFJFbnRlckV4aXRVSUJ1dHRvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkVudGVy
RXhpdFVJT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfX1siV2ViWFJFbnRlckV4aXRVSU9wdGlvbnMiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiV2ViWFJFbnRlckV4aXRVSSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siV2ViWFJFbnRlckV4
aXRVSSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUlN0YXRlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJXZWJY
UlN0YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSRXhwZXJpZW5jZUhlbHBlciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siV2ViWFJFeHBlcmllbmNlSGVscGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IldlYlhSSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIldlYlhSSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiV2ViWFJDb250cm9sbGVyVGVsZXBvcnRhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Nh
bWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siV2ViWFJDb250cm9sbGVy
VGVsZXBvcnRhdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkNvbnRyb2xsZXJQ
b2ludGVyU2VsZWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJXZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9u
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJXZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJXZWJYUkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIldlYlhSQ29udHJvbGxlciJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJXZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIldlYlhS
TWFuYWdlZE91dHB1dENhbnZhcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUlNlc3Np
b25NYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJXZWJYUlNlc3Npb25NYW5hZ2VyIl07IH0pOworCisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0NvbGxpc2lvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQ29sbGlzaW9ucy9pbmRleCAqLyAi
Li9Db2xsaXNpb25zL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbGxpZGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfQ29sbGlzaW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJDb2xsaWRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWZhdWx0Q29sbGlz
aW9uQ29vcmRpbmF0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Db2xsaXNpb25zX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkRlZmF1bHRDb2xsaXNpb25Db29yZGluYXRvciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaWNraW5nSW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0NvbGxpc2lvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUGlja2lu
Z0luZm8iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW50ZXJzZWN0aW9uSW5mbyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0NvbGxpc2lvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siSW50ZXJzZWN0aW9uSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfTWVzaENv
bGxpc2lvbkRhdGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Db2xsaXNpb25zX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIl9NZXNoQ29sbGlzaW9uRGF0YSJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DdWxsaW5nX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0N1bGxpbmcvaW5kZXggKi8gIi4v
Q3VsbGluZy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb3VuZGluZ0JveCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0N1bGxpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siQm91bmRpbmdCb3giXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmRpbmdJbmZvIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfQ3VsbGluZ19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJCb3VuZGluZ0luZm8iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmRpbmdT
cGhlcmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DdWxsaW5nX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X19bIkJvdW5kaW5nU3BoZXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlJheSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0N1bGxpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siUmF5Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0N1bGxpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfX1siT2N0cmVlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZUJsb2NrIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfQ3VsbGluZ19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OV9fWyJPY3RyZWVCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPY3RyZWVTY2VuZUNv
bXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0N1bGxpbmdfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siT2N0cmVlU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfRGVidWdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEw
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0RlYnVnL2luZGV4ICovICIuL0RlYnVnL2lu
ZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkF4ZXNWaWV3ZXIiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9EZWJ1Z19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQXhlc1ZpZXdl
ciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb25lQXhlc1ZpZXdlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX0RlYnVnX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJCb25l
QXhlc1ZpZXdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWJ1Z0xheWVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfRGVidWdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19b
IkRlYnVnTGF5ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1ZpZXdlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0RlYnVnX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fWyJQaHlzaWNzVmlld2VyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJheUhlbHBlciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0RlYnVnX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMF9fWyJSYXlIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2tlbGV0b25WaWV3
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9EZWJ1Z19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTBfX1siU2tlbGV0b25WaWV3ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfRW5naW5lc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vRW5naW5lcy9pbmRleCAqLyAiLi9FbmdpbmVzL2luZGV4LnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbnN0YW50cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Vu
Z2luZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkNvbnN0YW50cyJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJJbnN0YW5jaW5nQXR0cmlidXRlSW5mbyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX0VuZ2luZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19b
Ikluc3RhbmNpbmdBdHRyaWJ1dGVJbmZvIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRo
VGV4dHVyZUNyZWF0aW9uT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0VuZ2luZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkRlcHRoVGV4dHVyZUNyZWF0aW9uT3B0
aW9ucyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFbmdpbmVDYXBhYmlsaXRpZXMiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9FbmdpbmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MV9fWyJFbmdpbmVDYXBhYmlsaXRpZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRW5naW5l
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRW5naW5lc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siRW5naW5lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVuZ2luZVN0b3Jl
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRW5naW5lc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siRW5naW5lU3RvcmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTnVsbEVu
Z2luZU9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9FbmdpbmVzX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fWyJOdWxsRW5naW5lT3B0aW9ucyJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJOdWxsRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRW5naW5lc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siTnVsbEVuZ2luZSJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJXZWJHTFBpcGVsaW5lQ29udGV4dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0VuZ2luZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIldlYkdMUGlwZWxp
bmVDb250ZXh0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkdQVUNvbnN0YW50cyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0VuZ2luZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzExX19bIldlYkdQVUNvbnN0YW50cyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJHUFVF
bmdpbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9FbmdpbmVzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xMV9fWyJXZWJHUFVFbmdpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
V2ViR0wyU2hhZGVyUHJvY2Vzc29yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRW5naW5lc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siV2ViR0wyU2hhZGVyUHJvY2Vzc29yIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5hdGl2ZUVuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0VuZ2luZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk5hdGl2ZUVu
Z2luZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfT2NjbHVzaW9uRGF0YVN0b3JhZ2UiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9FbmdpbmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMV9fWyJfT2NjbHVzaW9uRGF0YVN0b3JhZ2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
X2ZvcmNlVHJhbnNmb3JtRmVlZGJhY2tUb0J1bmRsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Vu
Z2luZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIl9mb3JjZVRyYW5zZm9y
bUZlZWRiYWNrVG9CdW5kbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXZl
bnRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9FdmVudHMvaW5kZXggKi8gIi4vRXZlbnRzL2luZGV4LnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIktleWJvYXJkRXZlbnRUeXBlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0V2ZW50
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siS2V5Ym9hcmRFdmVudFR5cGVz
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktleWJvYXJkSW5mbyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX0V2ZW50c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siS2V5Ym9h
cmRJbmZvIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktleWJvYXJkSW5mb1ByZSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0V2ZW50c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJf
X1siS2V5Ym9hcmRJbmZvUHJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvaW50ZXJFdmVu
dFR5cGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRXZlbnRzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xMl9fWyJQb2ludGVyRXZlbnRUeXBlcyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJQb2ludGVySW5mb0Jhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9FdmVudHNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlBvaW50ZXJJbmZvQmFzZSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQb2ludGVySW5mb1ByZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0V2
ZW50c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siUG9pbnRlckluZm9QcmUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRlckluZm8iLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9FdmVudHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlBvaW50ZXJJ
bmZvIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNsaXBib2FyZEV2ZW50VHlwZXMiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9FdmVudHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEy
X19bIkNsaXBib2FyZEV2ZW50VHlwZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2xpcGJv
YXJkSW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0V2ZW50c19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTJfX1siQ2xpcGJvYXJkSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vR2FtZXBhZHMvaW5kZXggKi8gIi4vR2FtZXBhZHMv
aW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RpY2tWYWx1ZXMiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siU3Rp
Y2tWYWx1ZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2FtZXBhZCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX0dhbWVwYWRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJH
YW1lcGFkIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdlbmVyaWNQYWQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1si
R2VuZXJpY1BhZCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHYW1lcGFkTWFuYWdlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0dhbWVwYWRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xM19fWyJHYW1lcGFkTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHYW1lcGFk
U3lzdGVtU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9HYW1lcGFkc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siR2FtZXBhZFN5c3RlbVNjZW5lQ29tcG9u
ZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlhib3gzNjBCdXR0b24iLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1si
WGJveDM2MEJ1dHRvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJYYm94MzYwRHBhZCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0dhbWVwYWRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xM19fWyJYYm94MzYwRHBhZCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJYYm94MzYwUGFk
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfR2FtZXBhZHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEzX19bIlhib3gzNjBQYWQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRHVhbFNo
b2NrQnV0dG9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfR2FtZXBhZHNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzEzX19bIkR1YWxTaG9ja0J1dHRvbiJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJEdWFsU2hvY2tEcGFkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfR2FtZXBhZHNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkR1YWxTaG9ja0RwYWQiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRHVhbFNob2NrUGFkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfR2Ft
ZXBhZHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkR1YWxTaG9ja1BhZCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJEYXlkcmVhbUNvbnRyb2xsZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1si
RGF5ZHJlYW1Db250cm9sbGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdlYXJWUkNvbnRy
b2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTNfX1siR2VhclZSQ29udHJvbGxlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJHZW5lcmljQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dhbWVwYWRzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJHZW5lcmljQ29udHJvbGxlciJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJPY3VsdXNUb3VjaENvbnRyb2xsZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1si
T2N1bHVzVG91Y2hDb250cm9sbGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc2VFbmFi
bGVkQ29udHJvbGxlclR5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NlRW5hYmxlZENvbnRyb2xsZXJIZWxwZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTNfX1siUG9zZUVuYWJsZWRDb250cm9sbGVySGVscGVyIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBvc2VFbmFibGVkQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dhbWVw
YWRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJQb3NlRW5hYmxlZENvbnRy
b2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVml2ZUNvbnRyb2xsZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNf
X1siVml2ZUNvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViVlJDb250cm9s
bGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfR2FtZXBhZHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzEzX19bIldlYlZSQ29udHJvbGxlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJXaW5kb3dzTW90aW9uQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dhbWVwYWRz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJXaW5kb3dzTW90aW9uQ29udHJv
bGxlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9HaXptb3NfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0dp
em1vcy9pbmRleCAqLyAiLi9HaXptb3MvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXhp
c0RyYWdHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dpem1vc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTRfX1siQXhpc0RyYWdHaXptbyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJBeGlzU2NhbGVHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dpem1vc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siQXhpc1NjYWxlR2l6bW8iXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQm91bmRpbmdCb3hHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dp
em1vc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siQm91bmRpbmdCb3hHaXpt
byJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0dpem1vc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siR2l6bW8iXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiR2l6bW9NYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
R2l6bW9zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJHaXptb01hbmFnZXIi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxhbmVSb3RhdGlvbkdpem1vIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfR2l6bW9zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJQ
bGFuZVJvdGF0aW9uR2l6bW8iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zaXRpb25HaXpt
byIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dpem1vc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTRfX1siUG9zaXRpb25HaXptbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSb3Rh
dGlvbkdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfR2l6bW9zX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xNF9fWyJSb3RhdGlvbkdpem1vIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlNjYWxlR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9HaXptb3NfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlNjYWxlR2l6bW8iXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTGlnaHRHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dpem1vc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTGlnaHRHaXptbyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQbGFuZURyYWdHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dpem1vc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siUGxhbmVEcmFnR2l6bW8iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfSGVscGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vSGVscGVycy9pbmRleCAq
LyAiLi9IZWxwZXJzL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVudmlyb25tZW50SGVs
cGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSGVscGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTVfX1siRW52aXJvbm1lbnRIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUGhvdG9Eb21lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSGVscGVyc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTVfX1siUGhvdG9Eb21lIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIl9mb3JjZVNjZW5lSGVscGVyc1RvQnVuZGxlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSGVs
cGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siX2ZvcmNlU2NlbmVIZWxw
ZXJzVG9CdW5kbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlkZW9Eb21lIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfSGVscGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVf
X1siVmlkZW9Eb21lIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0luc3RydW1l
bnRhdGlvbl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vSW5zdHJ1bWVudGF0aW9uL2luZGV4ICovICIuL0luc3RydW1lbnRhdGlv
bi9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFbmdpbmVJbnN0cnVtZW50YXRpb24iLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9JbnN0cnVtZW50YXRpb25faW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE2X19bIkVuZ2luZUluc3RydW1lbnRhdGlvbiJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJTY2VuZUluc3RydW1lbnRhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0luc3Ry
dW1lbnRhdGlvbl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siU2NlbmVJbnN0
cnVtZW50YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX1RpbWVUb2tlbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0luc3RydW1lbnRhdGlvbl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTZfX1siX1RpbWVUb2tlbiJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9MYXllcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL0xheWVycy9pbmRleCAqLyAiLi9MYXllcnMvaW5kZXgudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRWZmZWN0TGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9MYXllcnNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bIkVmZmVjdExheWVyIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdExheWVyU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9MYXllcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bIkVm
ZmVjdExheWVyU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2xvd0xh
eWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGF5ZXJzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xN19fWyJHbG93TGF5ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSGlnaGxp
Z2h0TGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9MYXllcnNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE3X19bIkhpZ2hsaWdodExheWVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkxheWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGF5ZXJzX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xN19fWyJMYXllciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMYXll
clNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGF5ZXJzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJMYXllclNjZW5lQ29tcG9uZW50Il07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0xlbnNGbGFyZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0xlbnNGbGFyZXMvaW5k
ZXggKi8gIi4vTGVuc0ZsYXJlcy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zRmxh
cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9MZW5zRmxhcmVzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOF9fWyJMZW5zRmxhcmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVu
c0ZsYXJlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGVuc0ZsYXJlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTGVuc0ZsYXJlU3lzdGVtIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkxlbnNGbGFyZVN5c3RlbVNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfTGVuc0ZsYXJlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1si
TGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTGlnaHRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9MaWdodHMvaW5kZXggKi8gIi4vTGlnaHRzL2luZGV4LnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkxpZ2h0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGlnaHRz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJMaWdodCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTaGFkb3dMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0xpZ2h0c19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU2hhZG93TGlnaHQiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRGlyZWN0aW9uYWxMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0xpZ2h0c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siRGlyZWN0aW9uYWxM
aWdodCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJIZW1pc3BoZXJpY0xpZ2h0IiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTGlnaHRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9f
WyJIZW1pc3BoZXJpY0xpZ2h0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvaW50TGlnaHQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9MaWdodHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE5X19bIlBvaW50TGlnaHQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3BvdExpZ2h0
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGlnaHRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xOV9fWyJTcG90TGlnaHQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hhZG93R2Vu
ZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGlnaHRzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOV9fWyJTaGFkb3dHZW5lcmF0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9M
aWdodHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlNoYWRvd0dlbmVyYXRv
clNjZW5lQ29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0xvYWRp
bmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL0xvYWRpbmcvaW5kZXggKi8gIi4vTG9hZGluZy9pbmRleC50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJEZWZhdWx0TG9hZGluZ1NjcmVlbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0xv
YWRpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkRlZmF1bHRMb2FkaW5n
U2NyZWVuIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVu
dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0xvYWRpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIwX19bIlNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudCJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJTY2VuZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0xvYWRpbmdfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIlNjZW5lTG9hZGVyIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlNjZW5lTG9hZGVyRmxhZ3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Mb2Fk
aW5nX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJTY2VuZUxvYWRlckZsYWdz
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9CYWJ5bG9uTG9hZGVyUmVnaXN0ZXJlZCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0xvYWRpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIwX19bIl9CYWJ5bG9uTG9hZGVyUmVnaXN0ZXJlZCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01hdGVyaWFscy9pbmRleCAqLyAiLi9NYXRlcmlh
bHMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3JDdXJ2ZXMiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19b
IkNvbG9yQ3VydmVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdEZhbGxiYWNrcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjFfX1siRWZmZWN0RmFsbGJhY2tzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVm
ZmVjdENyZWF0aW9uT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siRWZmZWN0Q3JlYXRpb25PcHRpb25zIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01h
dGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siRWZmZWN0Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZXNuZWxQYXJhbWV0ZXJzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJGcmVz
bmVsUGFyYW1ldGVycyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbkRlZmluZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjFfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01h
dGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTWF0ZXJpYWwiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWF0ZXJpYWxEZWZpbmVzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJNYXRl
cmlhbERlZmluZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWF0ZXJpYWxIZWxwZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIxX19bIk1hdGVyaWFsSGVscGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk11bHRp
TWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzIxX19bIk11bHRpTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiUHVzaE1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJQdXNoTWF0ZXJpYWwiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiU2hhZGVyTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRl
cmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIlNoYWRlck1hdGVyaWFs
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkTWF0ZXJpYWxEZWZpbmVzIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yMV9fWyJTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTdGFuZGFyZE1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJTdGFuZGFyZE1hdGVyaWFsIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0
ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJCYXNlVGV4dHVyZSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJDdWJlVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siQ3ViZVRl
eHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRHluYW1pY1RleHR1cmUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIx
X19bIkR5bmFtaWNUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVxdWlSZWN0YW5n
dWxhckN1YmVUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJIRFJDdWJlVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siSERS
Q3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW50ZXJuYWxUZXh0dXJlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yMV9fWyJJbnRlcm5hbFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWly
cm9yVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTWlycm9yVGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJNdWx0aVJlbmRlclRhcmdldCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFs
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTXVsdGlSZW5kZXJUYXJnZXQi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmF3VGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siUmF3VGV4
dHVyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJUYXJnZXRUZXh0dXJlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yMV9fWyJSZW5kZXJUYXJnZXRUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRl
eHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIxX19bIlRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVW5p
Zm9ybUJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjFfX1siVW5pZm9ybUJ1ZmZlciJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJNYXRlcmlhbEZsYWdzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJNYXRlcmlhbEZsYWdzIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdFJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJFZmZlY3RSZW5k
ZXJlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFZmZlY3RXcmFwcGVyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9f
WyJFZmZlY3RXcmFwcGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhY2tncm91bmRNYXRl
cmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjFfX1siQmFja2dyb3VuZE1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBCUk1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFs
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siUEJSTWF0ZXJpYWxEZWZpbmVz
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUkJhc2VNYXRlcmlhbCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1si
UEJSQmFzZU1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUkJhc2VTaW1wbGVN
YXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjFfX1siUEJSQmFzZVNpbXBsZU1hdGVyaWFsIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlBCUk1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJQQlJNYXRlcmlhbCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MV9fWyJQQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJQQlJTcGVjdWxh
ckdsb3NzaW5lc3NNYXRlcmlhbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvckdyYWRp
bmdUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yMV9fWyJDb2xvckdyYWRpbmdUZXh0dXJlIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlJhd0N1YmVUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJp
YWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJSYXdDdWJlVGV4dHVyZSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSYXdUZXh0dXJlM0QiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIlJhd1Rl
eHR1cmUzRCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZyYWN0aW9uVGV4dHVyZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjFfX1siUmVmcmFjdGlvblRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlk
ZW9UZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yMV9fWyJWaWRlb1RleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiSHRtbEVsZW1lbnRUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJIdG1sRWxlbWVudFRleHR1cmUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yMV9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9N
YXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIk5vZGVNYXRlcmlh
bENvbm5lY3Rpb25Qb2ludCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWxC
bG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjFfX1siTm9kZU1hdGVyaWFsQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTm9kZU1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFs
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTm9kZU1hdGVyaWFsRGVmaW5l
cyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIk5v
ZGVNYXRlcmlhbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWxTeXN0ZW1W
YWx1ZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIxX19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJfRERTVGV4dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01h
dGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0REU1RleHR1cmVM
b2FkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0VOVlRleHR1cmVMb2FkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIxX19bIl9FTlZUZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9LVFhU
ZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJfS1RYVGV4dHVyZUxvYWRlciJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJfVEdBVGV4dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01h
dGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX1RHQVRleHR1cmVM
b2FkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0Jhc2lzVGV4dHVyZUxvYWRlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjFfX1siX0Jhc2lzVGV4dHVyZUxvYWRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJD
dXN0b21Qcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siQ3VzdG9tUHJvY2VkdXJhbFRleHR1
cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9pc2VQcm9jZWR1cmFsVGV4dHVyZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjFfX1siTm9pc2VQcm9jZWR1cmFsVGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJQcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siUHJvY2VkdXJhbFRleHR1cmUiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiUHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjFfX1siUHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNdWx0aXBseUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJNdWx0aXBseUJsb2NrIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkFkZEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0
ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJBZGRCbG9jayJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTY2FsZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJTY2FsZUJsb2Nr
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNsYW1wQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIkNsYW1w
QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3Jvc3NCbG9jayIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1si
Q3Jvc3NCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEb3RCbG9jayIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFf
X1siRG90QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJhbnNmb3JtQmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIxX19bIlRyYW5zZm9ybUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbWFw
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIxX19bIlJlbWFwQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Tm9ybWFsaXplQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIk5vcm1hbGl6ZUJsb2NrIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9ucyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siVHJp
Z29ub21ldHJ5QmxvY2tPcGVyYXRpb25zIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRyaWdv
bm9tZXRyeUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJUcmlnb25vbWV0cnlCbG9jayJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJDb2xvck1lcmdlckJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0
ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJDb2xvck1lcmdlckJs
b2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3Rvck1lcmdlckJsb2NrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MV9fWyJWZWN0b3JNZXJnZXJCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvclNw
bGl0dGVyQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzIxX19bIkNvbG9yU3BsaXR0ZXJCbG9jayJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJWZWN0b3JTcGxpdHRlckJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJWZWN0b3JTcGxp
dHRlckJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxlcnBCbG9jayIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFf
X1siTGVycEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRpdmlkZUJsb2NrIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yMV9fWyJEaXZpZGVCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdWJ0cmFjdEJs
b2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMV9fWyJTdWJ0cmFjdEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlN0ZXBCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjFfX1siU3RlcEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk9wcG9zaXRlQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIk9wcG9zaXRlQmxvY2siXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiVmlld0RpcmVjdGlvbkJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJWaWV3RGlyZWN0
aW9uQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlc25lbEJsb2NrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MV9fWyJGcmVzbmVsQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWF4QmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIxX19bIk1heEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1pbkJsb2NrIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yMV9fWyJNaW5CbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJp
YWxPcHRpbWl6ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzIxX19bIk5vZGVNYXRlcmlhbE9wdGltaXplciJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJWZXJ0ZXhPdXRwdXRCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siVmVydGV4T3V0
cHV0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm9uZXNCbG9jayIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFf
X1siQm9uZXNCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbnN0YW5jZXNCbG9jayIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjFfX1siSW5zdGFuY2VzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTW9y
cGhUYXJnZXRzQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIk1vcnBoVGFyZ2V0c0Jsb2NrIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkxpZ2h0SW5mb3JtYXRpb25CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTGlnaHRJ
bmZvcm1hdGlvbkJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyYWdtZW50T3V0cHV0
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIxX19bIkZyYWdtZW50T3V0cHV0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQWxwaGFUZXN0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIkFscGhhVGVzdEJsb2NrIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkltYWdlUHJvY2Vzc2luZ0Jsb2NrIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJJ
bWFnZVByb2Nlc3NpbmdCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQZXJ0dXJiTm9y
bWFsQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzIxX19bIlBlcnR1cmJOb3JtYWxCbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJGb2dCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siRm9nQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTGlnaHRCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTGlnaHRCbG9jayJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJUZXh0dXJlQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRl
cmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIlRleHR1cmVCbG9jayJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZsZWN0aW9uVGV4dHVyZUJsb2NrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MV9fWyJSZWZsZWN0aW9uVGV4dHVyZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIklu
cHV0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzIxX19bIklucHV0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlh
bHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIkFuaW1hdGVkSW5wdXRCbG9j
a1R5cGVzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9N
YXRocy9pbmRleCAqLyAiLi9NYXRocy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY2Fs
YXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjJfX1siU2NhbGFyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNwYWNlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIy
X19bIlNwYWNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkF4aXMiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9NYXRoc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQXhpcyJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9N
YXRoc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQ29sb3IzIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yNCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGhzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJDb2xvcjQiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiVG1wQ29sb3JzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0aHNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIlRtcENvbG9ycyJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJUb0dhbW1hU3BhY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siVG9HYW1tYVNwYWNlIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlRvTGluZWFyU3BhY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRo
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siVG9MaW5lYXJTcGFjZSJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJFcHNpbG9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0
aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkVwc2lsb24iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRnJ1c3R1bSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGhzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJGcnVzdHVtIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlBsYW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIlBsYW5lIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlNpemUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjJfX1siU2l6ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWZWN0b3Iy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIyX19bIlZlY3RvcjIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmVjdG9yMyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01hdGhzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
Ml9fWyJWZWN0b3IzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3RvcjQiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1si
VmVjdG9yNCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJRdWF0ZXJuaW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIlF1
YXRlcm5pb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWF0cml4IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIk1hdHJp
eCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUbXBWZWN0b3JzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIlRtcFZlY3Rv
cnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlld3BvcnQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9NYXRoc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siVmlld3BvcnQi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3BoZXJpY2FsSGFybW9uaWNzIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIlNw
aGVyaWNhbEhhcm1vbmljcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGhlcmljYWxQb2x5
bm9taWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzIyX19bIlNwaGVyaWNhbFBvbHlub21pYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiT3JpZW50YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siT3JpZW50YXRpb24iXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQmV6aWVyQ3VydmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQmV6aWVyQ3VydmUiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQW5nbGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQW5nbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQXJjMiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGhzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMl9fWyJBcmMyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhdGgyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIyX19bIlBhdGgyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhdGgzRCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01hdGhzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJQ
YXRoM0QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3VydmUzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkN1cnZlMyJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NpdGlvbk5vcm1hbFZlcnRleCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01hdGhzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJQ
b3NpdGlvbk5vcm1hbFZlcnRleCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NpdGlvbk5v
cm1hbFRleHR1cmVWZXJ0ZXgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siUG9zaXRpb25Ob3JtYWxUZXh0dXJlVmVydGV4Il07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vTWVzaGVzL2lu
ZGV4ICovICIuL01lc2hlcy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBYnN0cmFjdE1l
c2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIzX19bIkFic3RyYWN0TWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCdWZm
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIzX19bIkJ1ZmZlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWZXJ0ZXhCdWZm
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIzX19bIlZlcnRleEJ1ZmZlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDU0ci
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIzX19bIkNTRyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHZW9tZXRyeSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNf
X1siR2VvbWV0cnkiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR3JvdW5kTWVzaCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNf
X1siR3JvdW5kTWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmFpbE1lc2giLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIz
X19bIlRyYWlsTWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbnN0YW5jZWRNZXNoIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yM19fWyJJbnN0YW5jZWRNZXNoIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxpbmVzTWVz
aCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjNfX1siTGluZXNNZXNoIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkluc3RhbmNl
ZExpbmVzTWVzaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjNfX1siSW5zdGFuY2VkTGluZXNNZXNoIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIl9DcmVhdGlvbkRhdGFTdG9yYWdlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVz
aGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJfQ3JlYXRpb25EYXRhU3Rv
cmFnZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfSW5zdGFuY2VzQmF0Y2giLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19b
Il9JbnN0YW5jZXNCYXRjaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNZXNoIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19f
WyJNZXNoIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlcnRleERhdGEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19bIlZl
cnRleERhdGEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWVzaEJ1aWxkZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19b
Ik1lc2hCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbXBsaWZpY2F0aW9uU2V0
dGluZ3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzIzX19bIlNpbXBsaWZpY2F0aW9uU2V0dGluZ3MiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU2ltcGxpZmljYXRpb25RdWV1ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hl
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1siU2ltcGxpZmljYXRpb25RdWV1
ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaW1wbGlmaWNhdGlvblR5cGUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19b
IlNpbXBsaWZpY2F0aW9uVHlwZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaW1wbGljYXRp
b25RdWV1ZVNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJTaW1wbGljYXRpb25RdWV1ZVNjZW5lQ29t
cG9uZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvbHlnb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19bIlBvbHln
b24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWdvbk1lc2hCdWlsZGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19f
WyJQb2x5Z29uTWVzaEJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzZVN1Yk1l
c2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIzX19bIkJhc2VTdWJNZXNoIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN1Yk1l
c2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIzX19bIlN1Yk1lc2giXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWVzaExPRExl
dmVsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yM19fWyJNZXNoTE9ETGV2ZWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJh
bnNmb3JtTm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjNfX1siVHJhbnNmb3JtTm9kZSJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJCb3hCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJCb3hCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlNwaGVyZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19bIlNwaGVyZUJ1aWxkZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVz
aGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJDeWxpbmRlckJ1aWxkZXIi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG9ydXNCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJUb3J1c0J1
aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGluZXNCdWlsZGVyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJM
aW5lc0J1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxhbmVCdWlsZGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
M19fWyJQbGFuZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR3JvdW5kQnVpbGRl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjNfX1siR3JvdW5kQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEYXRh
QnVmZmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yM19fWyJEYXRhQnVmZmVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldl
YkdMRGF0YUJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjNfX1siV2ViR0xEYXRhQnVmZmVyIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIldlYkdQVURhdGFCdWZmZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19bIldlYkdQVURhdGFCdWZmZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRHJhY29Db21wcmVzc2lvbiIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1siRHJhY29D
b21wcmVzc2lvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUaWxlZEJveEJ1aWxkZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIzX19bIlRpbGVkQm94QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEaXNjQnVp
bGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjNfX1siRGlzY0J1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmli
Ym9uQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjNfX1siUmliYm9uQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJIZW1pc3BoZXJlQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1siSGVtaXNwaGVyZUJ1aWxkZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVG9ydXNLbm90QnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1siVG9ydXNLbm90
QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2x5Z29uQnVpbGRlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNf
X1siUG9seWdvbkJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hhcGVCdWlsZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yM19fWyJTaGFwZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGF0aGVC
dWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yM19fWyJMYXRoZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
VGlsZWRQbGFuZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19bIlRpbGVkUGxhbmVCdWlsZGVyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlR1YmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJUdWJlQnVpbGRlciJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQb2x5aGVkcm9uQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1siUG9seWhlZHJv
bkJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSWNvU3BoZXJlQnVpbGRlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MjNfX1siSWNvU3BoZXJlQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWNhbEJ1
aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzIzX19bIkRlY2FsQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9Nb3JwaF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vTW9ycGgvaW5kZXggKi8gIi4vTW9ycGgvaW5kZXgudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTW9ycGhUYXJnZXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Nb3Jw
aF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX1siTW9ycGhUYXJnZXQiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiTW9ycGhUYXJnZXRNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTW9ycGhfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X19bIk1vcnBoVGFy
Z2V0TWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9OYXZpZ2F0aW9u
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9OYXZpZ2F0aW9uL2luZGV4ICovICIuL05hdmlnYXRpb24vaW5kZXgudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiUmVjYXN0SlNQbHVnaW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9OYXZp
Z2F0aW9uX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fWyJSZWNhc3RKU1BsdWdp
biJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWNhc3RKU0Nyb3dkIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfTmF2aWdhdGlvbl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX1si
UmVjYXN0SlNDcm93ZCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9u
b2RlICovICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19bIk5vZGUiXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfT2ZmbGluZV9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vT2ZmbGluZS9pbmRl
eCAqLyAiLi9PZmZsaW5lL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRhdGFiYXNlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfT2ZmbGluZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjdfX1siRGF0YWJhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUGFy
dGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9QYXJ0aWNsZXMvaW5kZXggKi8gIi4vUGFydGljbGVzL2luZGV4LnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX1BhcnRpY2xlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjhfX1siQmFzZVBh
cnRpY2xlU3lzdGVtIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdQVVBhcnRpY2xlU3lzdGVt
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGFydGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yOF9fWyJHUFVQYXJ0aWNsZVN5c3RlbSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJQYXJ0aWNsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BhcnRpY2xlc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjhfX1siUGFydGljbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUGFydGljbGVIZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QYXJ0aWNsZXNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIlBhcnRpY2xlSGVscGVyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGFy
dGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fWyJQYXJ0aWNsZVN5c3Rl
bSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfSURvTmVlZFRvQmVJblRoZUJ1aWxkIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfUGFydGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yOF9fWyJfSURvTmVlZFRvQmVJblRoZUJ1aWxkIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBhcnRpY2xlU3lzdGVtU2V0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGFydGljbGVzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fWyJQYXJ0aWNsZVN5c3RlbVNldCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTb2xpZFBhcnRpY2xlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
UGFydGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fWyJTb2xpZFBhcnRp
Y2xlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1vZGVsU2hhcGUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9QYXJ0aWNsZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIk1v
ZGVsU2hhcGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhTb3J0ZWRQYXJ0aWNsZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BhcnRpY2xlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjhfX1siRGVwdGhTb3J0ZWRQYXJ0aWNsZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTb2xpZFBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGFydGljbGVzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fWyJTb2xpZFBhcnRpY2xlU3lzdGVtIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN1YkVtaXR0ZXJUeXBlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfUGFydGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fWyJTdWJF
bWl0dGVyVHlwZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdWJFbWl0dGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfUGFydGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
OF9fWyJTdWJFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJveFBhcnRpY2xlRW1p
dHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BhcnRpY2xlc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjhfX1siQm94UGFydGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkNvbmVQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QYXJ0aWNs
ZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIkNvbmVQYXJ0aWNsZUVtaXR0
ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9QYXJ0aWNsZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzI4X19bIkN5bGluZGVyUGFydGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9QYXJ0aWNsZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIkN5bGluZGVy
RGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSGVtaXNw
aGVyaWNQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QYXJ0aWNsZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIkhlbWlzcGhlcmljUGFydGljbGVFbWl0
dGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvaW50UGFydGljbGVFbWl0dGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfUGFydGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yOF9fWyJQb2ludFBhcnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJT
cGhlcmVQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QYXJ0aWNsZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIlNwaGVyZVBhcnRpY2xlRW1pdHRlciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BhcnRpY2xlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjhfX1siU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfUGh5c2ljc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vUGh5c2ljcy9pbmRleCAqLyAiLi9Q
aHlzaWNzL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NFbmdpbmUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9QaHlzaWNzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
OV9fWyJQaHlzaWNzRW5naW5lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NFbmdp
bmVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BoeXNpY3NfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X19bIlBoeXNpY3NFbmdpbmVTY2VuZUNvbXBvbmVudCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzSGVscGVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfUGh5c2ljc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjlfX1siUGh5c2lj
c0hlbHBlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzUmFkaWFsRXhwbG9zaW9u
RXZlbnRPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGh5c2ljc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjlfX1siUGh5c2ljc1JhZGlhbEV4cGxvc2lvbkV2ZW50T3B0aW9u
cyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzVXBkcmFmdEV2ZW50T3B0aW9ucyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BoeXNpY3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzI5X19bIlBoeXNpY3NVcGRyYWZ0RXZlbnRPcHRpb25zIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBoeXNpY3NWb3J0ZXhFdmVudE9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Q
aHlzaWNzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fWyJQaHlzaWNzVm9ydGV4
RXZlbnRPcHRpb25zIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NSYWRpYWxJbXB1
bHNlRmFsbG9mZiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BoeXNpY3NfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzI5X19bIlBoeXNpY3NSYWRpYWxJbXB1bHNlRmFsbG9mZiJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQaHlzaWNzVXBkcmFmdE1vZGUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9QaHlzaWNzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fWyJQaHlzaWNz
VXBkcmFmdE1vZGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc0ltcG9zdG9yIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfUGh5c2ljc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjlfX1siUGh5c2ljc0ltcG9zdG9yIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNp
Y3NKb2ludCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BoeXNpY3NfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzI5X19bIlBoeXNpY3NKb2ludCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJEaXN0YW5jZUpvaW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGh5c2ljc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjlfX1siRGlzdGFuY2VKb2ludCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNb3RvckVuYWJsZWRKb2ludCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BoeXNp
Y3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X19bIk1vdG9yRW5hYmxlZEpvaW50
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhpbmdlSm9pbnQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9QaHlzaWNzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fWyJIaW5nZUpv
aW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhpbmdlMkpvaW50IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfUGh5c2ljc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjlfX1siSGlu
Z2UySm9pbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2Fubm9uSlNQbHVnaW4iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9QaHlzaWNzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
OV9fWyJDYW5ub25KU1BsdWdpbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbW1vSlNQbHVn
aW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QaHlzaWNzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yOV9fWyJBbW1vSlNQbHVnaW4iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT2lt
b0pTUGx1Z2luIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGh5c2ljc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjlfX1siT2ltb0pTUGx1Z2luIl07IH0pOworCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzMwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1Bvc3RQcm9jZXNzZXMvaW5kZXggKi8g
Ii4vUG9zdFByb2Nlc3Nlcy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmFnbHlwaFBv
c3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siQW5hZ2x5cGhQb3N0UHJvY2VzcyJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJCbGFja0FuZFdoaXRlUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9f
WyJCbGFja0FuZFdoaXRlUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmxv
b21FZmZlY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fWyJCbG9vbUVmZmVjdCJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJCbG9vbU1lcmdlUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0
UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fWyJCbG9vbU1lcmdl
UG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmx1clBvc3RQcm9jZXNzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMzBfX1siQmx1clBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkNocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bv
c3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkNocm9tYXRp
Y0FiZXJyYXRpb25Qb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDaXJjbGVP
ZkNvbmZ1c2lvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nl
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siQ2lyY2xlT2ZDb25mdXNpb25Q
b3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvckNvcnJlY3Rpb25Qb3N0
UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkNvbG9yQ29ycmVjdGlvblBvc3RQcm9jZXNzIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbnZvbHV0aW9uUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
MF9fWyJDb252b2x1dGlvblBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRl
cHRoT2ZGaWVsZEJsdXJQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9j
ZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkRlcHRoT2ZGaWVsZEJs
dXJQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aE9mRmllbGRFZmZl
Y3RCbHVyTGV2ZWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fWyJEZXB0aE9mRmllbGRFZmZlY3RCbHVyTGV2ZWwi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhPZkZpZWxkRWZmZWN0IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MzBfX1siRGVwdGhPZkZpZWxkRWZmZWN0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRo
T2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3NPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9z
dFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siRGVwdGhPZkZp
ZWxkTWVyZ2VQb3N0UHJvY2Vzc09wdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVw
dGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9j
ZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkRlcHRoT2ZGaWVsZE1l
cmdlUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGlzcGxheVBhc3NQb3N0
UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkRpc3BsYXlQYXNzUG9zdFByb2Nlc3MiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRXh0cmFjdEhpZ2hsaWdodHNQb3N0UHJvY2VzcyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzMwX19bIkV4dHJhY3RIaWdobGlnaHRzUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRmlsdGVyUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vz
c2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fWyJGaWx0ZXJQb3N0UHJvY2Vz
cyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGeGFhUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
MF9fWyJGeGFhUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR3JhaW5Qb3N0
UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkdyYWluUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiSGlnaGxpZ2h0c1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
UG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siSGlnaGxp
Z2h0c1Bvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkltYWdlUHJvY2Vzc2lu
Z1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3Mi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTW90aW9uQmx1clBvc3RQcm9jZXNzIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMzBfX1siTW90aW9uQmx1clBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBhc3NQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIlBhc3NQb3N0UHJvY2VzcyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQYXNzQ3ViZVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1si
UGFzc0N1YmVQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3N0UHJvY2Vz
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzMwX19bIlBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBvc3RQcm9jZXNzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIlBvc3RQcm9jZXNzTWFuYWdlciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZyYWN0aW9uUG9zdFByb2Nlc3MiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zMF9fWyJSZWZyYWN0aW9uUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U2hhcnBlblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siU2hhcnBlblBvc3RQcm9jZXNzIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMzBfX1siU3RlcmVvc2NvcGljSW50ZXJsYWNlUG9zdFByb2Nlc3MiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVG9uZW1hcHBpbmdPcGVyYXRvciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19b
IlRvbmVtYXBwaW5nT3BlcmF0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG9uZW1hcFBv
c3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siVG9uZW1hcFBvc3RQcm9jZXNzIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzcyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzMwX19bIlZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzcyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJWUkRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFByb2Nlc3MiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zMF9fWyJWUkRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFByb2Nlc3MiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiVlJNdWx0aXZpZXdUb1NpbmdsZXZpZXdQb3N0UHJvY2VzcyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzMwX19bIlZSTXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9f
WyJQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3N0
UHJvY2Vzc1JlbmRlclBpcGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nl
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siUG9zdFByb2Nlc3NSZW5kZXJQ
aXBlbGluZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3N0UHJvY2Vzc1JlbmRlclBpcGVs
aW5lTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5h
Z2VyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVN
YW5hZ2VyU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2Vz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fWyJQb3N0UHJvY2Vzc1JlbmRlclBp
cGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRl
ZmF1bHRSZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNz
ZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkRlZmF1bHRSZW5kZXJpbmdQ
aXBlbGluZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zUmVuZGVyaW5nUGlwZWxpbmUi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zMF9fWyJMZW5zUmVuZGVyaW5nUGlwZWxpbmUiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU1NBTzJSZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bv
c3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIlNTQU8yUmVu
ZGVyaW5nUGlwZWxpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU1NBT1JlbmRlcmluZ1Bp
cGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMzBfX1siU1NBT1JlbmRlcmluZ1BpcGVsaW5lIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9f
WyJTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1Byb2Jlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vUHJvYmVzL2luZGV4ICovICIuL1Byb2Jlcy9pbmRleC50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJSZWZsZWN0aW9uUHJvYmUiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9Qcm9iZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMxX19bIlJlZmxlY3Rpb25Q
cm9iZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9SZW5kZXJpbmdfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L1JlbmRlcmluZy9pbmRleCAqLyAiLi9SZW5kZXJpbmcvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiQm91bmRpbmdCb3hSZW5kZXJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1JlbmRlcmlu
Z19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzJfX1siQm91bmRpbmdCb3hSZW5kZXJl
ciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aFJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfUmVuZGVyaW5nX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMl9fWyJE
ZXB0aFJlbmRlcmVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoUmVuZGVyZXJTY2Vu
ZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1JlbmRlcmluZ19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMzJfX1siRGVwdGhSZW5kZXJlclNjZW5lQ29tcG9uZW50Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkVkZ2VzUmVuZGVyZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9SZW5kZXJpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMyX19bIkVkZ2VzUmVu
ZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGluZUVkZ2VzUmVuZGVyZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9SZW5kZXJpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzMyX19bIkxpbmVFZGdlc1JlbmRlcmVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdlb21l
dHJ5QnVmZmVyUmVuZGVyZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9SZW5kZXJpbmdfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMyX19bIkdlb21ldHJ5QnVmZmVyUmVuZGVyZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2VvbWV0cnlCdWZmZXJSZW5kZXJlclNjZW5lQ29tcG9u
ZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUmVuZGVyaW5nX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zMl9fWyJHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyU2NlbmVDb21wb25lbnQiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT3V0bGluZVJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfUmVuZGVyaW5nX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMl9fWyJPdXRs
aW5lUmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVuZGVyaW5nR3JvdXAiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9SZW5kZXJpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzMyX19bIlJlbmRlcmluZ0dyb3VwIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbmRl
cmluZ0dyb3VwSW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1JlbmRlcmluZ19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMzJfX1siUmVuZGVyaW5nR3JvdXBJbmZvIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlJlbmRlcmluZ01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9S
ZW5kZXJpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMyX19bIlJlbmRlcmluZ01h
bmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVXRpbGl0eUxheWVyUmVuZGVyZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9SZW5kZXJpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzMyX19bIlV0aWxpdHlMYXllclJlbmRlcmVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTY2VuZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zM19fWyJTY2VuZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2Vu
ZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vc2NlbmVDb21wb25lbnQgKi8gIi4vc2NlbmVDb21wb25lbnQudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiU2NlbmVDb21wb25lbnRDb25zdGFudHMiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzRfX1siU2NlbmVD
b21wb25lbnRDb25zdGFudHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RhZ2UiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MzRfX1siU3RhZ2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU3ByaXRlc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vU3ByaXRlcy9pbmRleCAqLyAiLi9TcHJpdGVzL2luZGV4LnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlNwcml0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Nwcml0ZXNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzM1X19bIlNwcml0ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTcHJpdGVNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfU3ByaXRlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfX1siU3ByaXRlTWFuYWdlciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTcHJpdGVQYWNrZWRNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfU3By
aXRlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfX1siU3ByaXRlUGFja2VkTWFu
YWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcHJpdGVTY2VuZUNvbXBvbmVudCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX1Nwcml0ZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzM1X19bIlNwcml0ZVNjZW5lQ29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1N0YXRlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzZfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU3RhdGVzL2luZGV4ICovICIuL1N0YXRlcy9pbmRleC50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJfQWxwaGFTdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1N0
YXRlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzZfX1siX0FscGhhU3RhdGUiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0RlcHRoQ3VsbGluZ1N0YXRlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfU3RhdGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNl9fWyJfRGVw
dGhDdWxsaW5nU3RhdGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX1N0ZW5jaWxTdGF0ZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1N0YXRlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMzZfX1siX1N0ZW5jaWxTdGF0ZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9NaXNjL2luZGV4ICovICIuL01pc2MvaW5kZXgudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQW5kT3JOb3RFdmFsdWF0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJBbmRPck5vdEV2YWx1YXRvciJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJBc3NldFRhc2tTdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIkFzc2V0VGFza1N0
YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFic3RyYWN0QXNzZXRUYXNrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1si
QWJzdHJhY3RBc3NldFRhc2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXNzZXRzUHJvZ3Jl
c3NFdmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzM3X19bIkFzc2V0c1Byb2dyZXNzRXZlbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTWVzaEFzc2V0VGFzayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIk1lc2hBc3NldFRhc2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiVGV4dEZpbGVBc3NldFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNj
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJUZXh0RmlsZUFzc2V0VGFzayJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJCaW5hcnlGaWxlQXNzZXRUYXNrIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siQmlu
YXJ5RmlsZUFzc2V0VGFzayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbWFnZUFzc2V0VGFz
ayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzM3X19bIkltYWdlQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRleHR1
cmVBc3NldFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zN19fWyJUZXh0dXJlQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkN1YmVUZXh0dXJlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siQ3ViZVRleHR1cmVBc3NldFRhc2si
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSERSQ3ViZVRleHR1cmVBc3NldFRhc2siLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19f
WyJIRFJDdWJlVGV4dHVyZUFzc2V0VGFzayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFcXVp
UmVjdGFuZ3VsYXJDdWJlVGV4dHVyZUFzc2V0VGFzayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01p
c2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIkVxdWlSZWN0YW5ndWxhckN1
YmVUZXh0dXJlQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFzc2V0c01hbmFn
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zN19fWyJBc3NldHNNYW5hZ2VyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkREU1Rv
b2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMzdfX1siRERTVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZXhwYW5kVG9Q
cm9wZXJ0eSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzM3X19bImV4cGFuZFRvUHJvcGVydHkiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAic2VyaWFsaXplIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMzdfX1sic2VyaWFsaXplIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
InNlcmlhbGl6ZUFzVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0NvbG9yMyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bInNlcmlhbGl6ZUFzQ29s
b3IzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNlcmlhbGl6ZUFzRnJlc25lbFBhcmFtZXRl
cnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zN19fWyJzZXJpYWxpemVBc0ZyZXNuZWxQYXJhbWV0ZXJzIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgInNlcmlhbGl6ZUFzVmVjdG9yMiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2Nf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bInNlcmlhbGl6ZUFzVmVjdG9yMiJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1ZlY3RvcjMiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJzZXJp
YWxpemVBc1ZlY3RvcjMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2VyaWFsaXplQXNNZXNo
UmVmZXJlbmNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMzdfX1sic2VyaWFsaXplQXNNZXNoUmVmZXJlbmNlIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgInNlcmlhbGl6ZUFzQ29sb3JDdXJ2ZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJzZXJpYWxpemVBc0Nv
bG9yQ3VydmVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNlcmlhbGl6ZUFzQ29sb3I0Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MzdfX1sic2VyaWFsaXplQXNDb2xvcjQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2VyaWFs
aXplQXNJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1sic2VyaWFsaXplQXNJbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNlcmlh
bGl6ZUFzUXVhdGVybmlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzM3X19bInNlcmlhbGl6ZUFzUXVhdGVybmlvbiJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc01hdHJpeCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bInNlcmlhbGl6ZUFzTWF0
cml4Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNlcmlhbGl6ZUFzQ2FtZXJhUmVmZXJlbmNl
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMzdfX1sic2VyaWFsaXplQXNDYW1lcmFSZWZlcmVuY2UiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiU2VyaWFsaXphdGlvbkhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVmZXJyZWQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9N
aXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJEZWZlcnJlZCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJFbnZpcm9ubWVudFRleHR1cmVUb29scyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIkVudmly
b25tZW50VGV4dHVyZVRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1lc2hFeHBsb2Rl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzM3X19bIk1lc2hFeHBsb2RlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGaWxlc0lu
cHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMzdfX1siRmlsZXNJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDdWJlTWFw
VG9TcGhlcmljYWxQb2x5bm9taWFsVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJDdWJlTWFwVG9TcGhlcmljYWxQb2x5
bm9taWFsVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiS2hyb25vc1RleHR1cmVDb250
YWluZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zN19fWyJLaHJvbm9zVGV4dHVyZUNvbnRhaW5lciJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJFdmVudFN0YXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siRXZlbnRTdGF0ZSJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJPYnNlcnZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzM3X19bIk9ic2VydmVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk11bHRpT2JzZXJ2ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJNdWx0aU9ic2VydmVyIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIk9ic2VydmFibGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJPYnNlcnZhYmxlIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlBlcmZvcm1hbmNlTW9uaXRvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2Nf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIlBlcmZvcm1hbmNlTW9uaXRvciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSb2xsaW5nQXZlcmFnZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIlJvbGxpbmdB
dmVyYWdlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlByb21pc2VQb2x5ZmlsbCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19b
IlByb21pc2VQb2x5ZmlsbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY2VuZU9wdGltaXph
dGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzM3X19bIlNjZW5lT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlRleHR1cmVPcHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJUZXh0dXJlT3B0aW1pemF0aW9uIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkhhcmR3YXJlU2NhbGluZ09wdGltaXphdGlvbiIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIkhh
cmR3YXJlU2NhbGluZ09wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaGFk
b3dzT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMzdfX1siU2hhZG93c09wdGltaXphdGlvbiJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJQb3N0UHJvY2Vzc2VzT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siUG9zdFByb2Nl
c3Nlc09wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zRmxhcmVzT3B0
aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMzdfX1siTGVuc0ZsYXJlc09wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJDdXN0b21PcHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNj
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJDdXN0b21PcHRpbWl6YXRpb24i
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFydGljbGVzT3B0aW1pemF0aW9uIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1si
UGFydGljbGVzT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbmRlclRh
cmdldHNPcHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJSZW5kZXJUYXJnZXRzT3B0aW1pemF0aW9uIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk1lcmdlTWVzaGVzT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siTWVy
Z2VNZXNoZXNPcHRpbWl6YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVPcHRp
bWl6ZXJPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMzdfX1siU2NlbmVPcHRpbWl6ZXJPcHRpb25zIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlNjZW5lT3B0aW1pemVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siU2NlbmVPcHRpbWl6ZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVTZXJpYWxpemVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siU2NlbmVTZXJpYWxp
emVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNtYXJ0QXJyYXkiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJTbWFydEFy
cmF5Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNtYXJ0QXJyYXlOb0R1cGxpY2F0ZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3
X19bIlNtYXJ0QXJyYXlOb0R1cGxpY2F0ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdHJp
bmdEaWN0aW9uYXJ5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMzdfX1siU3RyaW5nRGljdGlvbmFyeSJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJUYWdzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMzdfX1siVGFncyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUZXh0
dXJlVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zN19fWyJUZXh0dXJlVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
VEdBVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zN19fWyJUR0FUb29scyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUb29s
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzM3X19bIlRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNsYXNzTmFtZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3
X19bImNsYXNzTmFtZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBc3luY0xvb3AiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19f
WyJBc3luY0xvb3AiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlkZW9SZWNvcmRlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3
X19bIlZpZGVvUmVjb3JkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSm95c3RpY2tBeGlz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMzdfX1siSm95c3RpY2tBeGlzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpcnR1YWxK
b3lzdGljayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzM3X19bIlZpcnR1YWxKb3lzdGljayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJXb3JrZXJQb29sIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMzdfX1siV29ya2VyUG9vbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJMb2dnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zN19fWyJMb2dnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX1R5cGVT
dG9yZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzM3X19bIl9UeXBlU3RvcmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmlsZXNJ
bnB1dFN0b3JlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMzdfX1siRmlsZXNJbnB1dFN0b3JlIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkRlZXBDb3BpZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zN19fWyJEZWVwQ29waWVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBpdm90VG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zN19fWyJQaXZvdFRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlByZWNpc2lvbkRhdGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJQcmVjaXNpb25EYXRlIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlNjcmVlbnNob3RUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIlNjcmVlbnNob3RUb29scyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJXZWJSZXF1ZXN0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlz
Y19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siV2ViUmVxdWVzdCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJJbnNwZWN0YWJsZVR5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJJbnNwZWN0YWJsZVR5
cGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQlJERlRleHR1cmVUb29scyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIkJS
REZUZXh0dXJlVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUkdCRFRleHR1cmVUb29s
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzM3X19bIlJHQkRUZXh0dXJlVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29s
b3JHcmFkaWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzM3X19bIkNvbG9yR3JhZGllbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQ29sb3IzR3JhZGllbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJDb2xvcjNHcmFkaWVudCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJGYWN0b3JHcmFkaWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIkZhY3RvckdyYWRpZW50Il07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkdyYWRpZW50SGVscGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siR3JhZGllbnRIZWxwZXIi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGVyZkNvdW50ZXIiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJQZXJmQ291bnRl
ciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZXRyeVN0cmF0ZWd5IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siUmV0cnlT
dHJhdGVneSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMb2FkRmlsZUVycm9yIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1si
TG9hZEZpbGVFcnJvciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJIRFJUb29scyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19b
IkhEUlRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhbm9yYW1hVG9DdWJlTWFwVG9v
bHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zN19fWyJQYW5vcmFtYVRvQ3ViZU1hcFRvb2xzIl07IH0pOworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9ub2RlLnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9ub2RlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IE5vZGUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiTm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTm9kZTsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIu
ZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlz
Yy9kZWNvcmF0b3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vRW5naW5lcy9lbmdpbmVTdG9y
ZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vTWlzYy9kZXZUb29scyAqLyAiLi9NaXNjL2RldlRvb2xzLnRzIik7
CisKKworCisKKworCisvKioKKyAqIE5vZGUgaXMgdGhlIGJhc2ljIGNsYXNzIGZvciBhbGwgc2Nl
bmUgb2JqZWN0cyAoTWVzaCwgTGlnaHQsIENhbWVyYS4pCisgKi8KK3ZhciBOb2RlID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgTm9k
ZQorICAgICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIGFuZCBpZCB0byBiZSBnaXZlbiB0byB0aGlz
IG5vZGUKKyAgICAgKiBAcGFyYW0gc2NlbmUgdGhlIHNjZW5lIHRoaXMgbm9kZSB3aWxsIGJlIGFk
ZGVkIHRvCisgICAgICogQHBhcmFtIGFkZFRvUm9vdE5vZGVzIHRoZSBub2RlIHdpbGwgYmUgYWRk
ZWQgdG8gc2NlbmUucm9vdE5vZGVzCisgICAgICovCisgICAgZnVuY3Rpb24gTm9kZShuYW1lLCBz
Y2VuZSwgYWRkVG9Sb290Tm9kZXMpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsg
c2NlbmUgPSBudWxsOyB9CisgICAgICAgIGlmIChhZGRUb1Jvb3ROb2RlcyA9PT0gdm9pZCAwKSB7
IGFkZFRvUm9vdE5vZGVzID0gdHJ1ZTsgfQorICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBv
ciBzZXRzIGEgc3RyaW5nIHVzZWQgdG8gc3RvcmUgdXNlciBkZWZpbmVkIHN0YXRlIGZvciB0aGUg
bm9kZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zdGF0ZSA9ICIiOworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBvciBzZXRzIGFuIG9iamVjdCB1c2VkIHRvIHN0b3JlIHVzZXIgZGVm
aW5lZCBpbmZvcm1hdGlvbiBmb3IgdGhlIG5vZGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
bWV0YWRhdGEgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogRm9yIGludGVybmFsIHVz
ZSBvbmx5LiBQbGVhc2UgZG8gbm90IHVzZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVz
ZXJ2ZWREYXRhU3RvcmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBz
ZXRzIGEgYm9vbGVhbiB1c2VkIHRvIGRlZmluZSBpZiB0aGUgbm9kZSBtdXN0IGJlIHNlcmlhbGl6
ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZG9Ob3RTZXJpYWxpemUgPSBmYWxzZTsKKyAg
ICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5faXNEaXNwb3NlZCA9IGZhbHNlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGxpc3Qgb2YgQW5pbWF0aW9ucyBhc3NvY2lh
dGVkIHdpdGggdGhlIG5vZGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYW5pbWF0aW9ucyA9
IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLl9yYW5nZXMgPSB7fTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIENhbGxiYWNrIHJhaXNlZCB3aGVuIHRoZSBub2RlIGlzIHJlYWR5IHRvIGJlIHVz
ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25SZWFkeSA9IG51bGw7CisgICAgICAgIHRo
aXMuX2lzRW5hYmxlZCA9IHRydWU7CisgICAgICAgIHRoaXMuX2lzUGFyZW50RW5hYmxlZCA9IHRy
dWU7CisgICAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlOworICAgICAgICAvKiogQGhpZGRlbiAq
LworICAgICAgICB0aGlzLl9jdXJyZW50UmVuZGVySWQgPSAtMTsKKyAgICAgICAgdGhpcy5fcGFy
ZW50VXBkYXRlSWQgPSAtMTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5f
Y2hpbGRVcGRhdGVJZCA9IC0xOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlz
Ll93YWl0aW5nUGFyZW50SWQgPSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAg
ICB0aGlzLl9jYWNoZSA9IHt9OworICAgICAgICB0aGlzLl9wYXJlbnROb2RlID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5fY2hpbGRyZW4gPSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAg
ICAgICB0aGlzLl93b3JsZE1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5JZGVudGl0eSgpOworICAgICAgICAvKiogQGhpZGRl
biAqLworICAgICAgICB0aGlzLl93b3JsZE1hdHJpeERldGVybWluYW50ID0gMDsKKyAgICAgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fd29ybGRNYXRyaXhEZXRlcm1pbmFudElzRGly
dHkgPSB0cnVlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9zY2VuZVJv
b3ROb2Rlc0luZGV4ID0gLTE7CisgICAgICAgIHRoaXMuX2FuaW1hdGlvblByb3BlcnRpZXNPdmVy
cmlkZSA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2lzTm9k
ZSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVu
IHRoZSBtZXNoIGlzIGRpc3Bvc2VkCisgICAgICAgICovCisgICAgICAgIHRoaXMub25EaXNwb3Nl
T2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0aGlzLl9vbkRpc3Bvc2VPYnNlcnZlciA9
IG51bGw7CisgICAgICAgIC8vIEJlaGF2aW9ycworICAgICAgICB0aGlzLl9iZWhhdmlvcnMgPSBu
ZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5pZCA9
IG5hbWU7CisgICAgICAgIHRoaXMuX3NjZW5lID0gKHNjZW5lIHx8IF9FbmdpbmVzX2VuZ2luZVN0
b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZVN0b3JlIl0uTGFzdENyZWF0
ZWRTY2VuZSk7CisgICAgICAgIHRoaXMudW5pcXVlSWQgPSB0aGlzLl9zY2VuZS5nZXRVbmlxdWVJ
ZCgpOworICAgICAgICB0aGlzLl9pbml0Q2FjaGUoKTsKKyAgICAgICAgaWYgKGFkZFRvUm9vdE5v
ZGVzKSB7CisgICAgICAgICAgICB0aGlzLmFkZFRvU2NlbmVSb290Tm9kZXMoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGQgYSBuZXcgbm9kZSBjb25zdHJ1Y3RvcgorICAg
ICAqIEBwYXJhbSB0eXBlIGRlZmluZXMgdGhlIHR5cGUgbmFtZSBvZiB0aGUgbm9kZSB0byBjb25z
dHJ1Y3QKKyAgICAgKiBAcGFyYW0gY29uc3RydWN0b3JGdW5jIGRlZmluZXMgdGhlIGNvbnN0cnVj
dG9yIGZ1bmN0aW9uCisgICAgICovCisgICAgTm9kZS5BZGROb2RlQ29uc3RydWN0b3IgPSBmdW5j
dGlvbiAodHlwZSwgY29uc3RydWN0b3JGdW5jKSB7CisgICAgICAgIHRoaXMuX05vZGVDb25zdHJ1
Y3RvcnNbdHlwZV0gPSBjb25zdHJ1Y3RvckZ1bmM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIGEgbm9kZSBjb25zdHJ1Y3RvciBiYXNlZCBvbiB0eXBlIG5hbWUKKyAgICAgKiBAcGFy
YW0gdHlwZSBkZWZpbmVzIHRoZSB0eXBlIG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVz
IHRoZSBuZXcgbm9kZSBuYW1lCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rp
bmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIG9wdGlvbmFsIG9wdGlvbnMg
dG8gdHJhbnNtaXQgdG8gY29uc3RydWN0b3JzCisgICAgICogQHJldHVybnMgdGhlIG5ldyBjb25z
dHJ1Y3RvciBvciBudWxsCisgICAgICovCisgICAgTm9kZS5Db25zdHJ1Y3QgPSBmdW5jdGlvbiAo
dHlwZSwgbmFtZSwgc2NlbmUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIGNvbnN0cnVjdG9yRnVu
YyA9IHRoaXMuX05vZGVDb25zdHJ1Y3RvcnNbdHlwZV07CisgICAgICAgIGlmICghY29uc3RydWN0
b3JGdW5jKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gY29uc3RydWN0b3JGdW5jKG5hbWUsIHNjZW5lLCBvcHRpb25zKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIG5vZGUgaGFzIGJl
ZW4gZGlzcG9zZWQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBub2RlIHdhcyBkaXNwb3Nl
ZAorICAgICAqLworICAgIE5vZGUucHJvdG90eXBlLmlzRGlzcG9zZWQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLl9pc0Rpc3Bvc2VkOworICAgIH07CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCAicGFyZW50IiwgeworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnROb2RlOworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBwYXJlbnQgb2Yg
dGhlIG5vZGUgKHdpdGhvdXQga2VlcGluZyB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc2Nl
bmUpCisgICAgICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFy
ZW50aW5nCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnROb2RlID09PSBwYXJlbnQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcHJldmlvdXNQYXJl
bnROb2RlID0gdGhpcy5fcGFyZW50Tm9kZTsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBzZWxmIGZy
b20gbGlzdCBvZiBjaGlsZHJlbiBvZiBwYXJlbnQKKyAgICAgICAgICAgIGlmICh0aGlzLl9wYXJl
bnROb2RlICYmIHRoaXMuX3BhcmVudE5vZGUuX2NoaWxkcmVuICE9PSB1bmRlZmluZWQgJiYgdGhp
cy5fcGFyZW50Tm9kZS5fY2hpbGRyZW4gIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB2YXIg
aW5kZXggPSB0aGlzLl9wYXJlbnROb2RlLl9jaGlsZHJlbi5pbmRleE9mKHRoaXMpOworICAgICAg
ICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
cGFyZW50Tm9kZS5fY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQgJiYgIXRoaXMuX2lzRGlzcG9zZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5hZGRUb1NjZW5lUm9vdE5vZGVzKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gU3RvcmUgbmV3IHBhcmVudAor
ICAgICAgICAgICAgdGhpcy5fcGFyZW50Tm9kZSA9IHBhcmVudDsKKyAgICAgICAgICAgIC8vIEFk
ZCBhcyBjaGlsZCB0byBuZXcgcGFyZW50CisgICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50Tm9k
ZSkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnROb2RlLl9jaGlsZHJlbiA9PT0g
dW5kZWZpbmVkIHx8IHRoaXMuX3BhcmVudE5vZGUuX2NoaWxkcmVuID09PSBudWxsKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudE5vZGUuX2NoaWxkcmVuID0gbmV3IEFycmF5KCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudE5vZGUuX2No
aWxkcmVuLnB1c2godGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c1BhcmVudE5v
ZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tU2NlbmVSb290Tm9kZXMo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBFbmFi
bGVkIHN0YXRlCisgICAgICAgICAgICB0aGlzLl9zeW5jUGFyZW50RW5hYmxlZFN0YXRlKCk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE5vZGUucHJvdG90eXBlLmFkZFRvU2NlbmVSb290Tm9kZXMg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9zY2VuZVJvb3ROb2Rlc0luZGV4ID09
PSAtMSkgeworICAgICAgICAgICAgdGhpcy5fc2NlbmVSb290Tm9kZXNJbmRleCA9IHRoaXMuX3Nj
ZW5lLnJvb3ROb2Rlcy5sZW5ndGg7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5yb290Tm9kZXMu
cHVzaCh0aGlzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgTm9kZS5wcm90b3R5cGUucmVtb3Zl
RnJvbVNjZW5lUm9vdE5vZGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fc2Nl
bmVSb290Tm9kZXNJbmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgIHZhciByb290Tm9kZXMgPSB0
aGlzLl9zY2VuZS5yb290Tm9kZXM7CisgICAgICAgICAgICB2YXIgbGFzdElkeCA9IHJvb3ROb2Rl
cy5sZW5ndGggLSAxOworICAgICAgICAgICAgcm9vdE5vZGVzW3RoaXMuX3NjZW5lUm9vdE5vZGVz
SW5kZXhdID0gcm9vdE5vZGVzW2xhc3RJZHhdOworICAgICAgICAgICAgcm9vdE5vZGVzW3RoaXMu
X3NjZW5lUm9vdE5vZGVzSW5kZXhdLl9zY2VuZVJvb3ROb2Rlc0luZGV4ID0gdGhpcy5fc2NlbmVS
b290Tm9kZXNJbmRleDsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLnJvb3ROb2Rlcy5wb3AoKTsK
KyAgICAgICAgICAgIHRoaXMuX3NjZW5lUm9vdE5vZGVzSW5kZXggPSAtMTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCAiYW5pbWF0
aW9uUHJvcGVydGllc092ZXJyaWRlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBv
ciBzZXRzIHRoZSBhbmltYXRpb24gcHJvcGVydGllcyBvdmVycmlkZQorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2FuaW1hdGlv
blByb3BlcnRpZXNPdmVycmlkZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2Vu
ZS5hbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fYW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYW5pbWF0
aW9uUHJvcGVydGllc092ZXJyaWRlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8q
KgorICAgICAqIEdldHMgYSBzdHJpbmcgaWRlbmZpZnlpbmcgdGhlIG5hbWUgb2YgdGhlIGNsYXNz
CisgICAgICogQHJldHVybnMgIk5vZGUiIHN0cmluZworICAgICAqLworICAgIE5vZGUucHJvdG90
eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJOb2RlIjsK
KyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgIm9uRGlz
cG9zZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgYSBjYWxsYmFjayB0aGF0IHdp
bGwgYmUgcmFpc2VkIHdoZW4gdGhlIG5vZGUgd2lsbCBiZSBkaXNwb3NlZAorICAgICAgICAgKi8K
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9vbkRpc3Bvc2VPYnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMub25EaXNwb3NlT2Jz
ZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIgPSB0aGlzLm9uRGlzcG9zZU9ic2Vy
dmFibGUuYWRkKGNhbGxiYWNrKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICog
R2V0cyB0aGUgc2NlbmUgb2YgdGhlIG5vZGUKKyAgICAgKiBAcmV0dXJucyBhIHNjZW5lCisgICAg
ICovCisgICAgTm9kZS5wcm90b3R5cGUuZ2V0U2NlbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLl9zY2VuZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGVu
Z2luZSBvZiB0aGUgbm9kZQorICAgICAqIEByZXR1cm5zIGEgRW5naW5lCisgICAgICovCisgICAg
Tm9kZS5wcm90b3R5cGUuZ2V0RW5naW5lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2gg
YSBiZWhhdmlvciB0byB0aGUgbm9kZQorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2ZlYXR1cmVzL2JlaGF2aW91cgorICAgICAqIEBwYXJhbSBiZWhhdmlvciBkZWZpbmVzIHRo
ZSBiZWhhdmlvciB0byBhdHRhY2gKKyAgICAgKiBAcGFyYW0gYXR0YWNoSW1tZWRpYXRlbHkgZGVm
aW5lcyB0aGF0IHRoZSBiZWhhdmlvciBtdXN0IGJlIGF0dGFjaGVkIGV2ZW4gaWYgdGhlIHNjZW5l
IGlzIHN0aWxsIGxvYWRpbmcKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBOb2RlCisgICAg
ICovCisgICAgTm9kZS5wcm90b3R5cGUuYWRkQmVoYXZpb3IgPSBmdW5jdGlvbiAoYmVoYXZpb3Is
IGF0dGFjaEltbWVkaWF0ZWx5KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAg
IGlmIChhdHRhY2hJbW1lZGlhdGVseSA9PT0gdm9pZCAwKSB7IGF0dGFjaEltbWVkaWF0ZWx5ID0g
ZmFsc2U7IH0KKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fYmVoYXZpb3JzLmluZGV4T2YoYmVo
YXZpb3IpOworICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgfQorICAgICAgICBiZWhhdmlvci5pbml0KCk7CisgICAgICAgIGlmICh0
aGlzLl9zY2VuZS5pc0xvYWRpbmcgJiYgIWF0dGFjaEltbWVkaWF0ZWx5KSB7CisgICAgICAgICAg
ICAvLyBXZSBkZWZlciB0aGUgYXR0YWNoIHdoZW4gdGhlIHNjZW5lIHdpbGwgYmUgbG9hZGVkCisg
ICAgICAgICAgICB0aGlzLl9zY2VuZS5vbkRhdGFMb2FkZWRPYnNlcnZhYmxlLmFkZE9uY2UoZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGJlaGF2aW9yLmF0dGFjaChfdGhpcyk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGJlaGF2
aW9yLmF0dGFjaCh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9iZWhhdmlvcnMucHVz
aChiZWhhdmlvcik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmVtb3ZlIGFuIGF0dGFjaGVkIGJlaGF2aW9yCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vZmVhdHVyZXMvYmVoYXZpb3VyCisgICAgICogQHBhcmFtIGJlaGF2aW9yIGRl
ZmluZXMgdGhlIGJlaGF2aW9yIHRvIGF0dGFjaAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50
IE5vZGUKKyAgICAgKi8KKyAgICBOb2RlLnByb3RvdHlwZS5yZW1vdmVCZWhhdmlvciA9IGZ1bmN0
aW9uIChiZWhhdmlvcikgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9iZWhhdmlvcnMuaW5k
ZXhPZihiZWhhdmlvcik7CisgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2JlaGF2aW9yc1tpbmRleF0u
ZGV0YWNoKCk7CisgICAgICAgIHRoaXMuX2JlaGF2aW9ycy5zcGxpY2UoaW5kZXgsIDEpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2Rl
LnByb3RvdHlwZSwgImJlaGF2aW9ycyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
dGhlIGxpc3Qgb2YgYXR0YWNoZWQgYmVoYXZpb3JzCisgICAgICAgICAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL2JlaGF2aW91cgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVoYXZpb3JzOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGFuIGF0dGFjaGVkIGJlaGF2
aW9yIGJ5IG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBi
ZWhhdmlvciB0byBsb29rIGZvcgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2ZlYXR1cmVzL2JlaGF2aW91cgorICAgICAqIEByZXR1cm5zIG51bGwgaWYgYmVoYXZpb3Igd2Fz
IG5vdCBmb3VuZCBlbHNlIHRoZSByZXF1ZXN0ZWQgYmVoYXZpb3IKKyAgICAgKi8KKyAgICBOb2Rl
LnByb3RvdHlwZS5nZXRCZWhhdmlvckJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAg
IGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9iZWhhdmlvcnM7IF9pIDwgX2EubGVuZ3RoOyBf
aSsrKSB7CisgICAgICAgICAgICB2YXIgYmVoYXZpb3IgPSBfYVtfaV07CisgICAgICAgICAgICBp
ZiAoYmVoYXZpb3IubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBiZWhh
dmlvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGxhdGVzdCB1cGRhdGUgb2YgdGhlIFdv
cmxkIG1hdHJpeAorICAgICAqIEByZXR1cm5zIGEgTWF0cml4CisgICAgICovCisgICAgTm9kZS5w
cm90b3R5cGUuZ2V0V29ybGRNYXRyaXggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
Ll9jdXJyZW50UmVuZGVySWQgIT09IHRoaXMuX3NjZW5lLmdldFJlbmRlcklkKCkpIHsKKyAgICAg
ICAgICAgIHRoaXMuY29tcHV0ZVdvcmxkTWF0cml4KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMuX3dvcmxkTWF0cml4OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBO
b2RlLnByb3RvdHlwZS5fZ2V0V29ybGRNYXRyaXhEZXRlcm1pbmFudCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMuX3dvcmxkTWF0cml4RGV0ZXJtaW5hbnRJc0RpcnR5KSB7CisgICAg
ICAgICAgICB0aGlzLl93b3JsZE1hdHJpeERldGVybWluYW50SXNEaXJ0eSA9IGZhbHNlOworICAg
ICAgICAgICAgdGhpcy5fd29ybGRNYXRyaXhEZXRlcm1pbmFudCA9IHRoaXMuX3dvcmxkTWF0cml4
LmRldGVybWluYW50KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3dvcmxkTWF0
cml4RGV0ZXJtaW5hbnQ7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5w
cm90b3R5cGUsICJ3b3JsZE1hdHJpeEZyb21DYWNoZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFJldHVybnMgZGlyZWN0bHkgdGhlIGxhdGVzdCBzdGF0ZSBvZiB0aGUgbWVzaCBXb3JsZCBt
YXRyaXguCisgICAgICAgICAqIEEgTWF0cml4IGlzIHJldHVybmVkLgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRN
YXRyaXg7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8vIG92ZXJyaWRlIGl0IGluIGRlcml2ZWQg
Y2xhc3MgaWYgeW91IGFkZCBuZXcgdmFyaWFibGVzIHRvIHRoZSBjYWNoZQorICAgIC8vIGFuZCBj
YWxsIHRoZSBwYXJlbnQgY2xhc3MgbWV0aG9kCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOb2Rl
LnByb3RvdHlwZS5faW5pdENhY2hlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jYWNo
ZSA9IHt9OworICAgICAgICB0aGlzLl9jYWNoZS5wYXJlbnQgPSB1bmRlZmluZWQ7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGUucHJvdG90eXBlLnVwZGF0ZUNhY2hlID0gZnVu
Y3Rpb24gKGZvcmNlKSB7CisgICAgICAgIGlmICghZm9yY2UgJiYgdGhpcy5pc1N5bmNocm9uaXpl
ZCgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2Fj
aGUucGFyZW50ID0gdGhpcy5wYXJlbnQ7CisgICAgICAgIHRoaXMuX3VwZGF0ZUNhY2hlKCk7Cisg
ICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGUucHJvdG90eXBlLl9nZXRBY3Rpb25N
YW5hZ2VyRm9yVHJpZ2dlciA9IGZ1bmN0aW9uICh0cmlnZ2VyLCBpbml0aWFsQ2FsbCkgeworICAg
ICAgICBpZiAoaW5pdGlhbENhbGwgPT09IHZvaWQgMCkgeyBpbml0aWFsQ2FsbCA9IHRydWU7IH0K
KyAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Ll9nZXRBY3Rpb25NYW5hZ2VyRm9y
VHJpZ2dlcih0cmlnZ2VyLCBmYWxzZSk7CisgICAgfTsKKyAgICAvLyBvdmVycmlkZSBpdCBpbiBk
ZXJpdmVkIGNsYXNzIGlmIHlvdSBhZGQgbmV3IHZhcmlhYmxlcyB0byB0aGUgY2FjaGUKKyAgICAv
LyBhbmQgY2FsbCB0aGUgcGFyZW50IGNsYXNzIG1ldGhvZCBpZiAhaWdub3JlUGFyZW50Q2xhc3MK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGUucHJvdG90eXBlLl91cGRhdGVDYWNoZSA9IGZ1
bmN0aW9uIChpZ25vcmVQYXJlbnRDbGFzcykgeworICAgIH07CisgICAgLy8gb3ZlcnJpZGUgaXQg
aW4gZGVyaXZlZCBjbGFzcyBpZiB5b3UgYWRkIG5ldyB2YXJpYWJsZXMgdG8gdGhlIGNhY2hlCisg
ICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOb2RlLnByb3RvdHlwZS5faXNTeW5jaHJvbml6ZWQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBOb2RlLnByb3RvdHlwZS5fbWFya1N5bmNlZFdpdGhQYXJlbnQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7CisgICAgICAgICAgICB0aGlz
Ll9wYXJlbnRVcGRhdGVJZCA9IHRoaXMuX3BhcmVudE5vZGUuX2NoaWxkVXBkYXRlSWQ7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTm9kZS5wcm90b3R5cGUuaXNT
eW5jaHJvbml6ZWRXaXRoUGFyZW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMu
X3BhcmVudE5vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGlmICh0aGlzLl9wYXJlbnRVcGRhdGVJZCAhPT0gdGhpcy5fcGFyZW50Tm9kZS5fY2hpbGRV
cGRhdGVJZCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0aGlzLl9wYXJlbnROb2RlLmlzU3luY2hyb25pemVkKCk7CisgICAgfTsKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIE5vZGUucHJvdG90eXBlLmlzU3luY2hyb25pemVkID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBpZiAodGhpcy5fY2FjaGUucGFyZW50ICE9IHRoaXMuX3BhcmVudE5v
ZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2NhY2hlLnBhcmVudCA9IHRoaXMuX3BhcmVudE5vZGU7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X3BhcmVudE5vZGUgJiYgIXRoaXMuaXNTeW5jaHJvbml6ZWRXaXRoUGFyZW50KCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5faXNT
eW5jaHJvbml6ZWQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIElzIHRoaXMgbm9kZSByZWFk
eSB0byBiZSB1c2VkL3JlbmRlcmVkCisgICAgICogQHBhcmFtIGNvbXBsZXRlQ2hlY2sgZGVmaW5l
cyBpZiBhIGNvbXBsZXRlIGNoZWNrIChpbmNsdWRpbmcgbWF0ZXJpYWxzIGFuZCBsaWdodHMpIGhh
cyB0byBiZSBkb25lIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0
aGUgbm9kZSBpcyByZWFkeQorICAgICAqLworICAgIE5vZGUucHJvdG90eXBlLmlzUmVhZHkgPSBm
dW5jdGlvbiAoY29tcGxldGVDaGVjaykgeworICAgICAgICBpZiAoY29tcGxldGVDaGVjayA9PT0g
dm9pZCAwKSB7IGNvbXBsZXRlQ2hlY2sgPSBmYWxzZTsgfQorICAgICAgICByZXR1cm4gdGhpcy5f
aXNSZWFkeTsKKyAgICB9OworICAgIC8qKgorICAgICAqIElzIHRoaXMgbm9kZSBlbmFibGVkPwor
ICAgICAqIElmIHRoZSBub2RlIGhhcyBhIHBhcmVudCwgYWxsIGFuY2VzdG9ycyB3aWxsIGJlIGNo
ZWNrZWQgYW5kIGZhbHNlIHdpbGwgYmUgcmV0dXJuZWQgaWYgYW55IGFyZSBmYWxzZSAobm90IGVu
YWJsZWQpLCBvdGhlcndpc2Ugd2lsbCByZXR1cm4gdHJ1ZQorICAgICAqIEBwYXJhbSBjaGVja0Fu
Y2VzdG9ycyBpbmRpY2F0ZXMgaWYgdGhpcyBtZXRob2Qgc2hvdWxkIGNoZWNrIHRoZSBhbmNlc3Rv
cnMuIFRoZSBkZWZhdWx0IGlzIHRvIGNoZWNrIHRoZSBhbmNlc3RvcnMuIElmIHNldCB0byBmYWxz
ZSwgdGhlIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBub2RlIHdpdGhvdXQg
Y2hlY2tpbmcgYW5jZXN0b3JzCisgICAgICogQHJldHVybiB3aGV0aGVyIHRoaXMgbm9kZSAoYW5k
IGl0cyBwYXJlbnQpIGlzIGVuYWJsZWQKKyAgICAgKi8KKyAgICBOb2RlLnByb3RvdHlwZS5pc0Vu
YWJsZWQgPSBmdW5jdGlvbiAoY2hlY2tBbmNlc3RvcnMpIHsKKyAgICAgICAgaWYgKGNoZWNrQW5j
ZXN0b3JzID09PSB2b2lkIDApIHsgY2hlY2tBbmNlc3RvcnMgPSB0cnVlOyB9CisgICAgICAgIGlm
IChjaGVja0FuY2VzdG9ycyA9PT0gZmFsc2UpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9p
c0VuYWJsZWQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5f
aXNQYXJlbnRFbmFibGVkOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOb2RlLnBy
b3RvdHlwZS5fc3luY1BhcmVudEVuYWJsZWRTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dGhpcy5faXNQYXJlbnRFbmFibGVkID0gdGhpcy5fcGFyZW50Tm9kZSA/IHRoaXMuX3BhcmVudE5v
ZGUuaXNFbmFibGVkKCkgOiB0cnVlOworICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW4pIHsKKyAg
ICAgICAgICAgIHRoaXMuX2NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKKyAgICAgICAg
ICAgICAgICBjLl9zeW5jUGFyZW50RW5hYmxlZFN0YXRlKCk7IC8vIEZvcmNlIGNoaWxkcmVuIHRv
IHVwZGF0ZSBhY2NvcmRpbmdseQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNldCB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGlzIG5vZGUKKyAgICAg
KiBAcGFyYW0gdmFsdWUgZGVmaW5lcyB0aGUgbmV3IGVuYWJsZWQgc3RhdGUKKyAgICAgKi8KKyAg
ICBOb2RlLnByb3RvdHlwZS5zZXRFbmFibGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
IHRoaXMuX2lzRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB0aGlzLl9zeW5jUGFyZW50RW5hYmxl
ZFN0YXRlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJcyB0aGlzIG5vZGUgYSBkZXNjZW5k
YW50IG9mIHRoZSBnaXZlbiBub2RlPworICAgICAqIFRoZSBmdW5jdGlvbiB3aWxsIGl0ZXJhdGUg
dXAgdGhlIGhpZXJhcmNoeSB1bnRpbCB0aGUgYW5jZXN0b3Igd2FzIGZvdW5kIG9yIG5vIG1vcmUg
cGFyZW50cyBkZWZpbmVkCisgICAgICogQHBhcmFtIGFuY2VzdG9yIGRlZmluZXMgdGhlIHBhcmVu
dCBub2RlIHRvIGluc3BlY3QKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBp
ZiB0aGlzIG5vZGUgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBnaXZlbiBub2RlCisgICAgICovCisg
ICAgTm9kZS5wcm90b3R5cGUuaXNEZXNjZW5kYW50T2YgPSBmdW5jdGlvbiAoYW5jZXN0b3IpIHsK
KyAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7CisgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQg
PT09IGFuY2VzdG9yKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuaXNEZXNjZW5kYW50T2YoYW5jZXN0
b3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKiBA
aGlkZGVuICovCisgICAgTm9kZS5wcm90b3R5cGUuX2dldERlc2NlbmRhbnRzID0gZnVuY3Rpb24g
KHJlc3VsdHMsIGRpcmVjdERlc2NlbmRhbnRzT25seSwgcHJlZGljYXRlKSB7CisgICAgICAgIGlm
IChkaXJlY3REZXNjZW5kYW50c09ubHkgPT09IHZvaWQgMCkgeyBkaXJlY3REZXNjZW5kYW50c09u
bHkgPSBmYWxzZTsgfQorICAgICAgICBpZiAoIXRoaXMuX2NoaWxkcmVuKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IHRoaXMuX2NoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGl0ZW0g
PSB0aGlzLl9jaGlsZHJlbltpbmRleF07CisgICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSB8fCBw
cmVkaWNhdGUoaXRlbSkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlbSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWRpcmVjdERlc2NlbmRhbnRzT25seSkgewor
ICAgICAgICAgICAgICAgIGl0ZW0uX2dldERlc2NlbmRhbnRzKHJlc3VsdHMsIGZhbHNlLCBwcmVk
aWNhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBXaWxsIHJldHVybiBhbGwgbm9kZXMgdGhhdCBoYXZlIHRoaXMgbm9kZSBhcyBhc2NlbmRhbnQK
KyAgICAgKiBAcGFyYW0gZGlyZWN0RGVzY2VuZGFudHNPbmx5IGRlZmluZXMgaWYgdHJ1ZSBvbmx5
IGRpcmVjdCBkZXNjZW5kYW50cyBvZiAndGhpcycgd2lsbCBiZSBjb25zaWRlcmVkLCBpZiBmYWxz
ZSBkaXJlY3QgYW5kIGFsc28gaW5kaXJlY3QgKGNoaWxkcmVuIG9mIGNoaWxkcmVuLCBhbiBzbyBv
biBpbiBhIHJlY3Vyc2l2ZSBtYW5uZXIpIGRlc2NlbmRhbnRzIG9mICd0aGlzJyB3aWxsIGJlIGNv
bnNpZGVyZWQKKyAgICAgKiBAcGFyYW0gcHJlZGljYXRlIGRlZmluZXMgYW4gb3B0aW9uYWwgcHJl
ZGljYXRlIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgZXZhbHVhdGVkIGNoaWxkLCB0aGUg
cHJlZGljYXRlIG11c3QgcmV0dXJuIHRydWUgZm9yIGEgZ2l2ZW4gY2hpbGQgdG8gYmUgcGFydCBv
ZiB0aGUgcmVzdWx0LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBpZ25vcmVkCisgICAgICogQHJldHVy
biBhbGwgY2hpbGRyZW4gbm9kZXMgb2YgYWxsIHR5cGVzCisgICAgICovCisgICAgTm9kZS5wcm90
b3R5cGUuZ2V0RGVzY2VuZGFudHMgPSBmdW5jdGlvbiAoZGlyZWN0RGVzY2VuZGFudHNPbmx5LCBw
cmVkaWNhdGUpIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAg
dGhpcy5fZ2V0RGVzY2VuZGFudHMocmVzdWx0cywgZGlyZWN0RGVzY2VuZGFudHNPbmx5LCBwcmVk
aWNhdGUpOworICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEdldCBhbGwgY2hpbGQtbWVzaGVzIG9mIHRoaXMgbm9kZQorICAgICAqIEBwYXJhbSBkaXJlY3RE
ZXNjZW5kYW50c09ubHkgZGVmaW5lcyBpZiB0cnVlIG9ubHkgZGlyZWN0IGRlc2NlbmRhbnRzIG9m
ICd0aGlzJyB3aWxsIGJlIGNvbnNpZGVyZWQsIGlmIGZhbHNlIGRpcmVjdCBhbmQgYWxzbyBpbmRp
cmVjdCAoY2hpbGRyZW4gb2YgY2hpbGRyZW4sIGFuIHNvIG9uIGluIGEgcmVjdXJzaXZlIG1hbm5l
cikgZGVzY2VuZGFudHMgb2YgJ3RoaXMnIHdpbGwgYmUgY29uc2lkZXJlZCAoRGVmYXVsdDogZmFs
c2UpCisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBkZWZpbmVzIGFuIG9wdGlvbmFsIHByZWRpY2F0
ZSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGV2ZXJ5IGV2YWx1YXRlZCBjaGlsZCwgdGhlIHByZWRp
Y2F0ZSBtdXN0IHJldHVybiB0cnVlIGZvciBhIGdpdmVuIGNoaWxkIHRvIGJlIHBhcnQgb2YgdGhl
IHJlc3VsdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgaWdub3JlZAorICAgICAqIEByZXR1cm5zIGFu
IGFycmF5IG9mIEFic3RyYWN0TWVzaAorICAgICAqLworICAgIE5vZGUucHJvdG90eXBlLmdldENo
aWxkTWVzaGVzID0gZnVuY3Rpb24gKGRpcmVjdERlc2NlbmRhbnRzT25seSwgcHJlZGljYXRlKSB7
CisgICAgICAgIHZhciByZXN1bHRzID0gW107CisgICAgICAgIHRoaXMuX2dldERlc2NlbmRhbnRz
KHJlc3VsdHMsIGRpcmVjdERlc2NlbmRhbnRzT25seSwgZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAg
ICAgICAgIHJldHVybiAoKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKG5vZGUpKSAmJiAobm9kZS5j
dWxsaW5nU3RyYXRlZ3kgIT09IHVuZGVmaW5lZCkpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdHM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgYWxsIGRpcmVjdCBjaGls
ZHJlbiBvZiB0aGlzIG5vZGUKKyAgICAgKiBAcGFyYW0gcHJlZGljYXRlIGRlZmluZXMgYW4gb3B0
aW9uYWwgcHJlZGljYXRlIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgZXZhbHVhdGVkIGNo
aWxkLCB0aGUgcHJlZGljYXRlIG11c3QgcmV0dXJuIHRydWUgZm9yIGEgZ2l2ZW4gY2hpbGQgdG8g
YmUgcGFydCBvZiB0aGUgcmVzdWx0LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBpZ25vcmVkCisgICAg
ICogQHBhcmFtIGRpcmVjdERlc2NlbmRhbnRzT25seSBkZWZpbmVzIGlmIHRydWUgb25seSBkaXJl
Y3QgZGVzY2VuZGFudHMgb2YgJ3RoaXMnIHdpbGwgYmUgY29uc2lkZXJlZCwgaWYgZmFsc2UgZGly
ZWN0IGFuZCBhbHNvIGluZGlyZWN0IChjaGlsZHJlbiBvZiBjaGlsZHJlbiwgYW4gc28gb24gaW4g
YSByZWN1cnNpdmUgbWFubmVyKSBkZXNjZW5kYW50cyBvZiAndGhpcycgd2lsbCBiZSBjb25zaWRl
cmVkIChEZWZhdWx0OiB0cnVlKQorICAgICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIE5vZGUKKyAg
ICAgKi8KKyAgICBOb2RlLnByb3RvdHlwZS5nZXRDaGlsZHJlbiA9IGZ1bmN0aW9uIChwcmVkaWNh
dGUsIGRpcmVjdERlc2NlbmRhbnRzT25seSkgeworICAgICAgICBpZiAoZGlyZWN0RGVzY2VuZGFu
dHNPbmx5ID09PSB2b2lkIDApIHsgZGlyZWN0RGVzY2VuZGFudHNPbmx5ID0gdHJ1ZTsgfQorICAg
ICAgICByZXR1cm4gdGhpcy5nZXREZXNjZW5kYW50cyhkaXJlY3REZXNjZW5kYW50c09ubHksIHBy
ZWRpY2F0ZSk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGUucHJvdG90eXBl
Ll9zZXRSZWFkeSA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBpZiAoc3RhdGUgPT09IHRo
aXMuX2lzUmVhZHkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXN0YXRlKSB7CisgICAgICAgICAgICB0aGlzLl9pc1JlYWR5ID0gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMub25SZWFkeSkgeworICAg
ICAgICAgICAgdGhpcy5vblJlYWR5KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2lz
UmVhZHkgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGFuIGFuaW1hdGlvbiBi
eSBuYW1lCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0
aW9uIHRvIGxvb2sgZm9yCisgICAgICogQHJldHVybnMgbnVsbCBpZiBub3QgZm91bmQgZWxzZSB0
aGUgcmVxdWVzdGVkIGFuaW1hdGlvbgorICAgICAqLworICAgIE5vZGUucHJvdG90eXBlLmdldEFu
aW1hdGlvbkJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5hbmltYXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYW5p
bWF0aW9uID0gdGhpcy5hbmltYXRpb25zW2ldOworICAgICAgICAgICAgaWYgKGFuaW1hdGlvbi5u
YW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGlvbjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYW4gYW5pbWF0aW9uIHJhbmdlIGZvciB0aGlzIG5vZGUKKyAgICAg
KiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSByYW5nZQorICAgICAqIEBwYXJh
bSBmcm9tIGRlZmluZXMgdGhlIHN0YXJ0aW5nIGtleQorICAgICAqIEBwYXJhbSB0byBkZWZpbmVz
IHRoZSBlbmQga2V5CisgICAgICovCisgICAgTm9kZS5wcm90b3R5cGUuY3JlYXRlQW5pbWF0aW9u
UmFuZ2UgPSBmdW5jdGlvbiAobmFtZSwgZnJvbSwgdG8pIHsKKyAgICAgICAgLy8gY2hlY2sgbmFt
ZSBub3QgYWxyZWFkeSBpbiB1c2UKKyAgICAgICAgaWYgKCF0aGlzLl9yYW5nZXNbbmFtZV0pIHsK
KyAgICAgICAgICAgIHRoaXMuX3Jhbmdlc1tuYW1lXSA9IE5vZGUuX0FuaW1hdGlvblJhbmdlRmFj
dG9yeShuYW1lLCBmcm9tLCB0byk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbkFuaW1h
dGlvbnMgPSB0aGlzLmFuaW1hdGlvbnMubGVuZ3RoOyBpIDwgbkFuaW1hdGlvbnM7IGkrKykgewor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbnNbaV0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5hbmltYXRpb25zW2ldLmNyZWF0ZVJhbmdlKG5hbWUsIGZyb20sIHRvKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIERlbGV0ZSBhIHNwZWNpZmljIGFuaW1hdGlvbiByYW5nZQorICAgICAqIEBwYXJh
bSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHJhbmdlIHRvIGRlbGV0ZQorICAgICAqIEBw
YXJhbSBkZWxldGVGcmFtZXMgZGVmaW5lcyBpZiBhbmltYXRpb24gZnJhbWVzIGZyb20gdGhlIHJh
bmdlIG11c3QgYmUgZGVsZXRlZCBhcyB3ZWxsCisgICAgICovCisgICAgTm9kZS5wcm90b3R5cGUu
ZGVsZXRlQW5pbWF0aW9uUmFuZ2UgPSBmdW5jdGlvbiAobmFtZSwgZGVsZXRlRnJhbWVzKSB7Cisg
ICAgICAgIGlmIChkZWxldGVGcmFtZXMgPT09IHZvaWQgMCkgeyBkZWxldGVGcmFtZXMgPSB0cnVl
OyB9CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBuQW5pbWF0aW9ucyA9IHRoaXMuYW5pbWF0aW9u
cy5sZW5ndGg7IGkgPCBuQW5pbWF0aW9uczsgaSsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5h
bmltYXRpb25zW2ldKSB7CisgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb25zW2ldLmRlbGV0
ZVJhbmdlKG5hbWUsIGRlbGV0ZUZyYW1lcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fcmFuZ2VzW25hbWVdID0gbnVsbDsgLy8gc2FpZCBtdWNoIGZhc3RlciB0aGFu
ICdkZWxldGUgdGhpcy5fcmFuZ2VbbmFtZV0nCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQg
YW4gYW5pbWF0aW9uIHJhbmdlIGJ5IG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRo
ZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gcmFuZ2UgdG8gbG9vayBmb3IKKyAgICAgKiBAcmV0dXJu
cyBudWxsIGlmIG5vdCBmb3VuZCBlbHNlIHRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIHJhbmdlCisg
ICAgICovCisgICAgTm9kZS5wcm90b3R5cGUuZ2V0QW5pbWF0aW9uUmFuZ2UgPSBmdW5jdGlvbiAo
bmFtZSkgeworICAgICAgICByZXR1cm4gdGhpcy5fcmFuZ2VzW25hbWVdOworICAgIH07CisgICAg
LyoqCisgICAgICogR2V0cyB0aGUgbGlzdCBvZiBhbGwgYW5pbWF0aW9uIHJhbmdlcyBkZWZpbmVk
IG9uIHRoaXMgbm9kZQorICAgICAqIEByZXR1cm5zIGFuIGFycmF5CisgICAgICovCisgICAgTm9k
ZS5wcm90b3R5cGUuZ2V0QW5pbWF0aW9uUmFuZ2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2
YXIgYW5pbWF0aW9uUmFuZ2VzID0gW107CisgICAgICAgIHZhciBuYW1lOworICAgICAgICBmb3Ig
KG5hbWUgaW4gdGhpcy5fcmFuZ2VzKSB7CisgICAgICAgICAgICBhbmltYXRpb25SYW5nZXMucHVz
aCh0aGlzLl9yYW5nZXNbbmFtZV0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhbmltYXRp
b25SYW5nZXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBXaWxsIHN0YXJ0IHRoZSBhbmltYXRp
b24gc2VxdWVuY2UKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSByYW5nZSBmcmFtZXMg
Zm9yIGFuaW1hdGlvbiBzZXF1ZW5jZQorICAgICAqIEBwYXJhbSBsb29wIGRlZmluZXMgaWYgdGhl
IGFuaW1hdGlvbiBzaG91bGQgbG9vcCAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0g
c3BlZWRSYXRpbyBkZWZpbmVzIHRoZSBzcGVlZCBmYWN0b3IgaW4gd2hpY2ggdG8gcnVuIHRoZSBh
bmltYXRpb24gKDEgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gb25BbmltYXRpb25FbmQgZGVm
aW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRlZCAo
dW5kZWZpbmVkIGJ5IGRlZmF1bHQpCisgICAgICogQHJldHVybnMgdGhlIG9iamVjdCBjcmVhdGVk
IGZvciB0aGlzIGFuaW1hdGlvbi4gSWYgcmFuZ2UgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgcmV0
dXJuIG51bGwKKyAgICAgKi8KKyAgICBOb2RlLnByb3RvdHlwZS5iZWdpbkFuaW1hdGlvbiA9IGZ1
bmN0aW9uIChuYW1lLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFuaW1hdGlvbkVuZCkgeworICAgICAg
ICB2YXIgcmFuZ2UgPSB0aGlzLmdldEFuaW1hdGlvblJhbmdlKG5hbWUpOworICAgICAgICBpZiAo
IXJhbmdlKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5fc2NlbmUuYmVnaW5BbmltYXRpb24odGhpcywgcmFuZ2UuZnJvbSwgcmFuZ2Uu
dG8sIGxvb3AsIHNwZWVkUmF0aW8sIG9uQW5pbWF0aW9uRW5kKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNlcmlhbGl6ZSBhbmltYXRpb24gcmFuZ2VzIGludG8gYSBKU09OIGNvbXBhdGlibGUg
b2JqZWN0CisgICAgICogQHJldHVybnMgc2VyaWFsaXphdGlvbiBvYmplY3QKKyAgICAgKi8KKyAg
ICBOb2RlLnByb3RvdHlwZS5zZXJpYWxpemVBbmltYXRpb25SYW5nZXMgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uUmFuZ2VzID0gW107CisgICAgICAgIGZvciAodmFy
IG5hbWUgaW4gdGhpcy5fcmFuZ2VzKSB7CisgICAgICAgICAgICB2YXIgbG9jYWxSYW5nZSA9IHRo
aXMuX3Jhbmdlc1tuYW1lXTsKKyAgICAgICAgICAgIGlmICghbG9jYWxSYW5nZSkgeworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJhbmdl
ID0ge307CisgICAgICAgICAgICByYW5nZS5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHJhbmdl
LmZyb20gPSBsb2NhbFJhbmdlLmZyb207CisgICAgICAgICAgICByYW5nZS50byA9IGxvY2FsUmFu
Z2UudG87CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uUmFuZ2VzLnB1c2gocmFuZ2UpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uUmFuZ2VzOworICAgIH07CisgICAg
LyoqCisgICAgICogQ29tcHV0ZXMgdGhlIHdvcmxkIG1hdHJpeCBvZiB0aGUgbm9kZQorICAgICAq
IEBwYXJhbSBmb3JjZSBkZWZpbmVzIGlmIHRoZSBjYWNoZSB2ZXJzaW9uIHNob3VsZCBiZSBpbnZh
bGlkYXRlZCBmb3JjaW5nIHRoZSB3b3JsZCBtYXRyaXggdG8gYmUgY3JlYXRlZCBmcm9tIHNjcmF0
Y2gKKyAgICAgKiBAcmV0dXJucyB0aGUgd29ybGQgbWF0cml4CisgICAgICovCisgICAgTm9kZS5w
cm90b3R5cGUuY29tcHV0ZVdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKGZvcmNlKSB7CisgICAgICAg
IGlmICghdGhpcy5fd29ybGRNYXRyaXgpIHsKKyAgICAgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJp
eCJdLklkZW50aXR5KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3dvcmxkTWF0
cml4OworICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZXMgcmVzb3VyY2VzIGFzc29jaWF0
ZWQgd2l0aCB0aGlzIG5vZGUuCisgICAgICogQHBhcmFtIGRvTm90UmVjdXJzZSBTZXQgdG8gdHJ1
ZSB0byBub3QgcmVjdXJzZSBpbnRvIGVhY2ggY2hpbGRyZW4gKHJlY3Vyc2UgaW50byBlYWNoIGNo
aWxkcmVuIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1
cmVzIFNldCB0byB0cnVlIHRvIGFsc28gZGlzcG9zZSByZWZlcmVuY2VkIG1hdGVyaWFscyBhbmQg
dGV4dHVyZXMgKGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgTm9kZS5wcm90b3R5cGUu
ZGlzcG9zZSA9IGZ1bmN0aW9uIChkb05vdFJlY3Vyc2UsIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1
cmVzKSB7CisgICAgICAgIGlmIChkaXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcyA9PT0gdm9pZCAw
KSB7IGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzID0gZmFsc2U7IH0KKyAgICAgICAgdGhpcy5f
aXNEaXNwb3NlZCA9IHRydWU7CisgICAgICAgIGlmICghZG9Ob3RSZWN1cnNlKSB7CisgICAgICAg
ICAgICB2YXIgbm9kZXMgPSB0aGlzLmdldERlc2NlbmRhbnRzKHRydWUpOworICAgICAgICAgICAg
Zm9yICh2YXIgX2kgPSAwLCBub2Rlc18xID0gbm9kZXM7IF9pIDwgbm9kZXNfMS5sZW5ndGg7IF9p
KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzXzFbX2ldOworICAgICAgICAg
ICAgICAgIG5vZGUuZGlzcG9zZShkb05vdFJlY3Vyc2UsIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1
cmVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMucGFyZW50
KSB7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUZyb21TY2VuZVJvb3ROb2RlcygpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsOworICAg
ICAgICB9CisgICAgICAgIC8vIENhbGxiYWNrCisgICAgICAgIHRoaXMub25EaXNwb3NlT2JzZXJ2
YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIHRoaXMub25EaXNwb3NlT2JzZXJ2
YWJsZS5jbGVhcigpOworICAgICAgICAvLyBCZWhhdmlvcnMKKyAgICAgICAgZm9yICh2YXIgX2Eg
PSAwLCBfYiA9IHRoaXMuX2JlaGF2aW9yczsgX2EgPCBfYi5sZW5ndGg7IF9hKyspIHsKKyAgICAg
ICAgICAgIHZhciBiZWhhdmlvciA9IF9iW19hXTsKKyAgICAgICAgICAgIGJlaGF2aW9yLmRldGFj
aCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2JlaGF2aW9ycyA9IFtdOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUGFyc2UgYW5pbWF0aW9uIHJhbmdlIGRhdGEgZnJvbSBhIHNlcmlhbGl6
YXRpb24gb2JqZWN0IGFuZCBzdG9yZSB0aGVtIGludG8gYSBnaXZlbiBub2RlCisgICAgICogQHBh
cmFtIG5vZGUgZGVmaW5lcyB3aGVyZSB0byBzdG9yZSB0aGUgYW5pbWF0aW9uIHJhbmdlcworICAg
ICAqIEBwYXJhbSBwYXJzZWROb2RlIGRlZmluZXMgdGhlIHNlcmlhbGl6YXRpb24gb2JqZWN0IHRv
IHJlYWQgZGF0YSBmcm9tCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcg
c2NlbmUKKyAgICAgKi8KKyAgICBOb2RlLlBhcnNlQW5pbWF0aW9uUmFuZ2VzID0gZnVuY3Rpb24g
KG5vZGUsIHBhcnNlZE5vZGUsIHNjZW5lKSB7CisgICAgICAgIGlmIChwYXJzZWROb2RlLnJhbmdl
cykgeworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHBhcnNlZE5vZGUu
cmFuZ2VzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcGFy
c2VkTm9kZS5yYW5nZXNbaW5kZXhdOworICAgICAgICAgICAgICAgIG5vZGUuY3JlYXRlQW5pbWF0
aW9uUmFuZ2UoZGF0YS5uYW1lLCBkYXRhLmZyb20sIGRhdGEudG8pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAqIFJldHVybiB0aGUgbWluaW11bSBhbmQgbWF4
aW11bSB3b3JsZCB2ZWN0b3JzIG9mIHRoZSBlbnRpcmUgaGllcmFyY2h5IHVuZGVyIGN1cnJlbnQg
bm9kZQorICogQHBhcmFtIGluY2x1ZGVEZXNjZW5kYW50cyBJbmNsdWRlIGJvdW5kaW5nIGluZm8g
ZnJvbSBkZXNjZW5kYW50cyBhcyB3ZWxsICh0cnVlIGJ5IGRlZmF1bHQpCisgKiBAcGFyYW0gcHJl
ZGljYXRlIGRlZmluZXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSBjdXN0b21pemUg
dG8gZmlsdGVyIHdoYXQgbWVzaGVzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbGlzdCB1c2Vk
IHRvIGNvbXB1dGUgdGhlIGJvdW5kaW5nIHZlY3RvcnMKKyAqIEByZXR1cm5zIHRoZSBuZXcgYm91
bmRpbmcgdmVjdG9ycworICovCisgICAgTm9kZS5wcm90b3R5cGUuZ2V0SGllcmFyY2h5Qm91bmRp
bmdWZWN0b3JzID0gZnVuY3Rpb24gKGluY2x1ZGVEZXNjZW5kYW50cywgcHJlZGljYXRlKSB7Cisg
ICAgICAgIGlmIChpbmNsdWRlRGVzY2VuZGFudHMgPT09IHZvaWQgMCkgeyBpbmNsdWRlRGVzY2Vu
ZGFudHMgPSB0cnVlOyB9CisgICAgICAgIGlmIChwcmVkaWNhdGUgPT09IHZvaWQgMCkgeyBwcmVk
aWNhdGUgPSBudWxsOyB9CisgICAgICAgIC8vIEVuc3VyZXMgdGhhdCBhbGwgd29ybGQgbWF0cml4
IHdpbGwgYmUgcmVjb21wdXRlZC4KKyAgICAgICAgdGhpcy5nZXRTY2VuZSgpLmluY3JlbWVudFJl
bmRlcklkKCk7CisgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAg
ICB2YXIgbWluOworICAgICAgICB2YXIgbWF4OworICAgICAgICB2YXIgdGhpc0Fic3RyYWN0TWVz
aCA9IHRoaXM7CisgICAgICAgIGlmICh0aGlzQWJzdHJhY3RNZXNoLmdldEJvdW5kaW5nSW5mbyAm
JiB0aGlzQWJzdHJhY3RNZXNoLnN1Yk1lc2hlcykgeworICAgICAgICAgICAgLy8gSWYgdGhpcyBp
cyBhbiBhYnN0cmFjdCBtZXNoIGdldCBpdHMgYm91bmRpbmcgaW5mbworICAgICAgICAgICAgdmFy
IGJvdW5kaW5nSW5mbyA9IHRoaXNBYnN0cmFjdE1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAg
ICAgICAgICBtaW4gPSBib3VuZGluZ0luZm8uYm91bmRpbmdCb3gubWluaW11bVdvcmxkLmNsb25l
KCk7CisgICAgICAgICAgICBtYXggPSBib3VuZGluZ0luZm8uYm91bmRpbmdCb3gubWF4aW11bVdv
cmxkLmNsb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtaW4g
PSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZl
Y3RvcjMiXShOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZB
TFVFKTsKKyAgICAgICAgICAgIG1heCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKC1OdW1iZXIuTUFYX1ZBTFVFLCAtTnVtYmVy
Lk1BWF9WQUxVRSwgLU51bWJlci5NQVhfVkFMVUUpOworICAgICAgICB9CisgICAgICAgIGlmIChp
bmNsdWRlRGVzY2VuZGFudHMpIHsKKyAgICAgICAgICAgIHZhciBkZXNjZW5kYW50cyA9IHRoaXMu
Z2V0RGVzY2VuZGFudHMoZmFsc2UpOworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBkZXNj
ZW5kYW50c18xID0gZGVzY2VuZGFudHM7IF9pIDwgZGVzY2VuZGFudHNfMS5sZW5ndGg7IF9pKysp
IHsKKyAgICAgICAgICAgICAgICB2YXIgZGVzY2VuZGFudCA9IGRlc2NlbmRhbnRzXzFbX2ldOwor
ICAgICAgICAgICAgICAgIHZhciBjaGlsZE1lc2ggPSBkZXNjZW5kYW50OworICAgICAgICAgICAg
ICAgIGNoaWxkTWVzaC5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgICAgICAgICAg
Ly8gRmlsdGVycyBtZXNoZXMgYmFzZWQgb24gY3VzdG9tIHByZWRpY2F0ZSBmdW5jdGlvbi4KKyAg
ICAgICAgICAgICAgICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUoY2hpbGRNZXNoKSkgewor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgLy9tYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVlZGVkIHBhcmFtcyB0byBnZXQgbWl4
IGFuZCBtYXgKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkTWVzaC5nZXRCb3VuZGluZ0luZm8g
fHwgY2hpbGRNZXNoLmdldFRvdGFsVmVydGljZXMoKSA9PT0gMCkgeworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGNo
aWxkQm91bmRpbmdJbmZvID0gY2hpbGRNZXNoLmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICAg
ICAgICAgIHZhciBib3VuZGluZ0JveCA9IGNoaWxkQm91bmRpbmdJbmZvLmJvdW5kaW5nQm94Owor
ICAgICAgICAgICAgICAgIHZhciBtaW5Cb3ggPSBib3VuZGluZ0JveC5taW5pbXVtV29ybGQ7Cisg
ICAgICAgICAgICAgICAgdmFyIG1heEJveCA9IGJvdW5kaW5nQm94Lm1heGltdW1Xb3JsZDsKKyAg
ICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVjdG9yMyJdLkNoZWNrRXh0ZW5kcyhtaW5Cb3gsIG1pbiwgbWF4KTsKKyAgICAgICAg
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVjdG9yMyJdLkNoZWNrRXh0ZW5kcyhtYXhCb3gsIG1pbiwgbWF4KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgbWluOiBtaW4sCisgICAg
ICAgICAgICBtYXg6IG1heAorICAgICAgICB9OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBOb2RlLl9BbmltYXRpb25SYW5nZUZhY3RvcnkgPSBmdW5jdGlvbiAobmFtZSwgZnJvbSwg
dG8pIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiQW5pbWF0aW9uUmFuZ2UiKTsKKyAgICB9
OworICAgIE5vZGUuX05vZGVDb25zdHJ1Y3RvcnMgPSB7fTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIE5vZGUucHJvdG90eXBlLCAibmFtZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBOb2RlLnByb3RvdHlwZSwgImlkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIE5vZGUucHJvdG90eXBlLCAidW5pcXVlSWQiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgTm9kZS5wcm90b3R5cGUsICJzdGF0ZSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBOb2RlLnByb3RvdHlwZSwgIm1ldGFkYXRhIiwgdm9p
ZCAwKTsKKyAgICByZXR1cm4gTm9kZTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vc2NlbmUudHMiOgorLyohKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9zY2VuZS50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2Nl
bmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFNjZW5lOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNs
aWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9NaXNjL3Rvb2xzICovICIuL01pc2MvdG9vbHMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19wcmVjaXNpb25EYXRlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01pc2MvcHJl
Y2lzaW9uRGF0ZSAqLyAiLi9NaXNjL3ByZWNpc2lvbkRhdGUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29i
c2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19zbWFydEFycmF5
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L01pc2Mvc21hcnRBcnJheSAqLyAiLi9NaXNjL3NtYXJ0QXJyYXkudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY19zdHJpbmdEaWN0aW9uYXJ5X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01pc2Mvc3RyaW5nRGljdGlvbmFy
eSAqLyAiLi9NaXNjL3N0cmluZ0RpY3Rpb25hcnkudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWlzY190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL01pc2MvdGFncyAqLyAiLi9NaXNjL3RhZ3MudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vTWF0aHMvbWF0aC52ZWN0b3IgKi8g
Ii4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVz
aGVzX3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vTWVzaGVzL3RyYW5zZm9ybU5vZGUgKi8gIi4vTWVzaGVzL3RyYW5z
Zm9ybU5vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0
TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9NZXNoZXMvYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1lc2gudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0NhbWVyYXMvY2FtZXJh
ICovICIuL0NhbWVyYXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Fi
c3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2Fic3RyYWN0U2NlbmUgKi8gIi4vYWJzdHJhY3RTY2VuZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vTWF0ZXJpYWxzL2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gKi8gIi4vTWF0ZXJp
YWxzL2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX3VuaWZvcm1CdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01hdGVyaWFscy91bmlmb3JtQnVmZmVy
ICovICIuL01hdGVyaWFscy91bmlmb3JtQnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0xpZ2h0c19saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vTGlnaHRzL2xpZ2h0ICovICIuL0xpZ2h0cy9saWdodC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Db2xsaXNpb25zX3BpY2tpbmdJbmZvX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9Db2xs
aXNpb25zL3BpY2tpbmdJbmZvICovICIuL0NvbGxpc2lvbnMvcGlja2luZ0luZm8udHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQWN0aW9uc19hY3Rpb25FdmVudF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQWN0aW9ucy9hY3Rp
b25FdmVudCAqLyAiLi9BY3Rpb25zL2FjdGlvbkV2ZW50LnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NNYW5hZ2VyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9Qb3N0UHJvY2Vzc2Vz
L3Bvc3RQcm9jZXNzTWFuYWdlciAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzTWFuYWdl
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9SZW5kZXJpbmdfcmVuZGVyaW5nTWFu
YWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vUmVuZGVyaW5nL3JlbmRlcmluZ01hbmFnZXIgKi8gIi4vUmVuZGVyaW5nL3JlbmRlcmlu
Z01hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9F
bmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2Rv
bU1hbmFnZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL01pc2MvZG9tTWFuYWdlbWVudCAqLyAiLi9NaXNjL2RvbU1hbmFnZW1lbnQu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01pc2MvbG9nZ2Vy
ICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2lu
ZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL0VuZ2luZXMvZW5naW5lU3RvcmUgKi8gIi4vRW5naW5lcy9lbmdpbmVT
dG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RldlRvb2xzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9NaXNj
L2RldlRvb2xzICovICIuL01pc2MvZGV2VG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfSW5wdXRzX3NjZW5lX2lucHV0TWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MjVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vSW5wdXRzL3NjZW5lLmlucHV0TWFuYWdl
ciAqLyAiLi9JbnB1dHMvc2NlbmUuaW5wdXRNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfcGVyZkNvdW50ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01pc2MvcGVyZkNvdW50ZXIgKi8gIi4vTWlzYy9w
ZXJmQ291bnRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9mcnVzdHVtX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9NYXRocy9tYXRoLmZydXN0
dW0gKi8gIi4vTWF0aHMvbWF0aC5mcnVzdHVtLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01pc2NfdW5pcXVlSWRHZW5lcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01pc2MvdW5pcXVlSWRHZW5lcmF0b3IgKi8gIi4v
TWlzYy91bmlxdWVJZEdlbmVyYXRvci50cyIpOworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworLyoqCisgKiBSZXByZXNlbnRzIGEgc2Nl
bmUgdG8gYmUgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZS4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2ZlYXR1cmVzL3NjZW5lCisgKi8KK3ZhciBTY2VuZSA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShTY2VuZSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgbmV3IFNjZW5lCisgICAgICogQHBhcmFtIGVuZ2luZSBkZWZpbmVzIHRoZSBlbmdpbmUgdG8g
dXNlIHRvIHJlbmRlciB0aGlzIHNjZW5lCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0
aGUgc2NlbmUgb3B0aW9ucworICAgICAqLworICAgIGZ1bmN0aW9uIFNjZW5lKGVuZ2luZSwgb3B0
aW9ucykgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwor
ICAgICAgICAvLyBNZW1iZXJzCisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlz
Ll9pbnB1dE1hbmFnZXIgPSBuZXcgX0lucHV0c19zY2VuZV9pbnB1dE1hbmFnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzI1X19bIklucHV0TWFuYWdlciJdKF90aGlzKTsKKyAgICAgICAgLyoq
IERlZmluZSB0aGlzIHBhcmFtZXRlciBpZiB5b3UgYXJlIHVzaW5nIG11bHRpcGxlIGNhbWVyYXMg
YW5kIHlvdSB3YW50IHRvIHNwZWNpZnkgd2hpY2ggb25lIHNob3VsZCBiZSB1c2VkIGZvciBwb2lu
dGVyIHBvc2l0aW9uICovCisgICAgICAgIF90aGlzLmNhbWVyYVRvVXNlRm9yUG9pbnRlcnMgPSBu
dWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhpcy5faXNTY2VuZSA9IHRy
dWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIHRoYXQg
aW5kaWNhdGVzIGlmIHRoZSBzY2VuZSBtdXN0IGNsZWFyIHRoZSByZW5kZXIgYnVmZmVyIGJlZm9y
ZSByZW5kZXJpbmcgYSBmcmFtZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXV0b0NsZWFy
ID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4g
dGhhdCBpbmRpY2F0ZXMgaWYgdGhlIHNjZW5lIG11c3QgY2xlYXIgdGhlIGRlcHRoIGFuZCBzdGVu
Y2lsIGJ1ZmZlcnMgYmVmb3JlIHJlbmRlcmluZyBhIGZyYW1lCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5hdXRvQ2xlYXJEZXB0aEFuZFN0ZW5jaWwgPSB0cnVlOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lcyB0aGUgY29sb3IgdXNlZCB0byBjbGVhciB0aGUgcmVuZGVyIGJ1ZmZl
ciAoRGVmYXVsdCBpcyAoMC4yLCAwLjIsIDAuMywgMS4wKSkKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLmNsZWFyQ29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzI3X19bIkNvbG9yNCJdKDAuMiwgMC4yLCAwLjMsIDEuMCk7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBjb2xvciB1c2VkIHRvIHNpbXVsYXRlIHRoZSBhbWJp
ZW50IGNvbG9yIChEZWZhdWx0IGlzICgwLCAwLCAwKSkKKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLmFtYmllbnRDb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjdfX1siQ29sb3IzIl0oMCwgMCwgMCk7CisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIF90aGlzLl9lbnZpcm9ubWVudEludGVuc2l0eSA9IDE7CisgICAgICAgIF90aGlz
Ll9mb3JjZVdpcmVmcmFtZSA9IGZhbHNlOworICAgICAgICBfdGhpcy5fZm9yY2VQb2ludHNDbG91
ZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVh
biBpbmRpY2F0aW5nIGlmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQKKyAgICAgICAgICovCisgICAg
ICAgIF90aGlzLmFuaW1hdGlvbnNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX2FuaW1h
dGlvblByb3BlcnRpZXNPdmVycmlkZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgYSBjb25zdGFudCBkZWx0YXRpbWUg
aGFzIHRvIGJlIHVzZWQKKyAgICAgICAgICogVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGZvciB0ZXN0
aW5nIHB1cnBvc2VzIHdoZW4geW91IGRvIG5vdCB3YW50IHRoZSBhbmltYXRpb25zIHRvIHNjYWxl
IHdpdGggdGhlIGZyYW1lcmF0ZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudXNlQ29uc3Rh
bnRBbmltYXRpb25EZWx0YVRpbWUgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgc2NlbmUgbXVzdCBrZWVwIHRo
ZSBtZXNoVW5kZXJQb2ludGVyIHByb3BlcnR5IHVwZGF0ZWQKKyAgICAgICAgICogUGxlYXNlIG5v
dGUgdGhhdCBpdCByZXF1aXJlcyB0byBydW4gYSByYXkgY2FzdCB0aHJvdWdoIHRoZSBzY2VuZSBv
biBldmVyeSBmcmFtZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuY29uc3RhbnRseVVwZGF0
ZU1lc2hVbmRlclBvaW50ZXIgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZXMgdGhlIEhUTUwgY3Vyc29yIHRvIHVzZSB3aGVuIGhvdmVyaW5nIG92ZXIgaW50ZXJhY3RpdmUg
ZWxlbWVudHMKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmhvdmVyQ3Vyc29yID0gInBvaW50
ZXIiOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgSFRNTCBkZWZhdWx0IGN1
cnNvciB0byB1c2UgKGVtcHR5IGJ5IGRlZmF1bHQpCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5kZWZhdWx0Q3Vyc29yID0gIiI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIGlzIHVz
ZWQgdG8gY2FsbCBwcmV2ZW50RGVmYXVsdCgpIG9uIHBvaW50ZXIgZG93bgorICAgICAgICAgKiBp
biBvcmRlciB0byBibG9jayB1bndhbnRlZCBhcnRpZmFjdHMgbGlrZSBzeXN0ZW0gZG91YmxlIGNs
aWNrcworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucHJldmVudERlZmF1bHRPblBvaW50ZXJE
b3duID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgaXMgdXNlZCB0byBjYWxs
IHByZXZlbnREZWZhdWx0KCkgb24gcG9pbnRlciB1cAorICAgICAgICAgKiBpbiBvcmRlciB0byBi
bG9jayB1bndhbnRlZCBhcnRpZmFjdHMgbGlrZSBzeXN0ZW0gZG91YmxlIGNsaWNrcworICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMucHJldmVudERlZmF1bHRPblBvaW50ZXJVcCA9IHRydWU7Cisg
ICAgICAgIC8vIE1ldGFkYXRhCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMg
dXNlciBkZWZpbmVkIG1ldGFkYXRhCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5tZXRhZGF0
YSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHku
IFBsZWFzZSBkbyBub3QgdXNlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucmVzZXJ2ZWRE
YXRhU3RvcmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogVXNlIHRoaXMgYXJyYXkg
dG8gYWRkIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdXNlZCB0byBkaXNhYmxlIG9mZmxpbmUgc3VwcG9y
dCBmb3Igc3BlY2lmaWMgdXJscworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZGlzYWJsZU9m
ZmxpbmVTdXBwb3J0RXhjZXB0aW9uUnVsZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIHNjZW5lIGlzIGRpc3Bvc2VkLgor
ICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlID0gbmV3IF9NaXNj
X29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7
CisgICAgICAgIF90aGlzLl9vbkRpc3Bvc2VPYnNlcnZlciA9IG51bGw7CisgICAgICAgIC8qKgor
ICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCBiZWZvcmUgcmVuZGVyaW5nIHRoZSBzY2VuZSAo
cmlnaHQgYWZ0ZXIgYW5pbWF0aW9ucyBhbmQgcGh5c2ljcykKKyAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIF90aGlz
Ll9vbkJlZm9yZVJlbmRlck9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICog
QW4gZXZlbnQgdHJpZ2dlcmVkIGFmdGVyIHJlbmRlcmluZyB0aGUgc2NlbmUKKyAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMub25BZnRlclJlbmRlck9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGFmdGVyIHJlbmRlcmluZyB0aGUg
c2NlbmUgZm9yIGFuIGFjdGl2ZSBjYW1lcmEgKFdoZW4gc2NlbmUucmVuZGVyIGlzIGNhbGxlZCB0
aGlzIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGVhY2ggY2FtZXJhKQorICAgICAgICAqLworICAgICAg
ICBfdGhpcy5vbkFmdGVyUmVuZGVyQ2FtZXJhT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZh
YmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAg
ICBfdGhpcy5fb25BZnRlclJlbmRlck9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSBhbmltYXRpbmcgdGhlIHNjZW5lCisgICAg
ICAgICovCisgICAgICAgIF90aGlzLm9uQmVmb3JlQW5pbWF0aW9uc09ic2VydmFibGUgPSBuZXcg
X01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxl
Il0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGFmdGVyIGFu
aW1hdGlvbnMgcHJvY2Vzc2luZworICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkFmdGVyQW5p
bWF0aW9uc09ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4g
ZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSBkcmF3IGNhbGxzIGFyZSByZWFkeSB0byBiZSBzZW50Cisg
ICAgICAgICovCisgICAgICAgIF90aGlzLm9uQmVmb3JlRHJhd1BoYXNlT2JzZXJ2YWJsZSA9IG5l
dyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFi
bGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgYWZ0ZXIg
ZHJhdyBjYWxscyBoYXZlIGJlZW4gc2VudAorICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkFm
dGVyRHJhd1BoYXNlT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAg
KiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgc2NlbmUgaXMgcmVhZHkKKyAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMub25SZWFkeU9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoq
CisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSByZW5kZXJpbmcgYSBjYW1lcmEK
KyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZhYmxl
ID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2Jz
ZXJ2YWJsZSJdKCk7CisgICAgICAgIF90aGlzLl9vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2VydmVy
ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGFmdGVy
IHJlbmRlcmluZyBhIGNhbWVyYQorICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkFmdGVyQ2Ft
ZXJhUmVuZGVyT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhpcy5fb25BZnRlckNh
bWVyYVJlbmRlck9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZl
bnQgdHJpZ2dlcmVkIHdoZW4gYWN0aXZlIG1lc2hlcyBldmFsdWF0aW9uIGlzIGFib3V0IHRvIHN0
YXJ0CisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uQmVmb3JlQWN0aXZlTWVzaGVzRXZhbHVh
dGlvbk9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZl
bnQgdHJpZ2dlcmVkIHdoZW4gYWN0aXZlIG1lc2hlcyBldmFsdWF0aW9uIGlzIGRvbmUKKyAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMub25BZnRlckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJl
ZCB3aGVuIHBhcnRpY2xlcyByZW5kZXJpbmcgaXMgYWJvdXQgdG8gc3RhcnQKKyAgICAgICAgKiBO
b3RlOiBUaGlzIGV2ZW50IGNhbiBiZSB0cmlnZ2VyIG1vcmUgdGhhbiBvbmNlIHBlciBmcmFtZSAo
YmVjYXVzZSBwYXJ0aWNsZXMgY2FuIGJlIHJlbmRlcmVkIGJ5IHJlbmRlciB0YXJnZXQgdGV4dHVy
ZXMgYXMgd2VsbCkKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25CZWZvcmVQYXJ0aWNsZXNS
ZW5kZXJpbmdPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFu
IGV2ZW50IHRyaWdnZXJlZCB3aGVuIHBhcnRpY2xlcyByZW5kZXJpbmcgaXMgZG9uZQorICAgICAg
ICAqIE5vdGU6IFRoaXMgZXZlbnQgY2FuIGJlIHRyaWdnZXIgbW9yZSB0aGFuIG9uY2UgcGVyIGZy
YW1lIChiZWNhdXNlIHBhcnRpY2xlcyBjYW4gYmUgcmVuZGVyZWQgYnkgcmVuZGVyIHRhcmdldCB0
ZXh0dXJlcyBhcyB3ZWxsKQorICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkFmdGVyUGFydGlj
bGVzUmVuZGVyaW5nT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAg
KiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiBTY2VuZUxvYWRlci5BcHBlbmQgb3IgU2NlbmVMb2Fk
ZXIuTG9hZCBvciBTY2VuZUxvYWRlci5JbXBvcnRNZXNoIHdlcmUgc3VjY2Vzc2Z1bGx5IGV4ZWN1
dGVkCisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uRGF0YUxvYWRlZE9ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4g
YSBjYW1lcmEgaXMgY3JlYXRlZAorICAgICAgICAqLworICAgICAgICBfdGhpcy5vbk5ld0NhbWVy
YUFkZGVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBl
dmVudCB0cmlnZ2VyZWQgd2hlbiBhIGNhbWVyYSBpcyByZW1vdmVkCisgICAgICAgICovCisgICAg
ICAgIF90aGlzLm9uQ2FtZXJhUmVtb3ZlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJs
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAg
LyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gYSBsaWdodCBpcyBjcmVhdGVk
CisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uTmV3TGlnaHRBZGRlZE9ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4g
YSBsaWdodCBpcyByZW1vdmVkCisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uTGlnaHRSZW1v
dmVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVu
dCB0cmlnZ2VyZWQgd2hlbiBhIGdlb21ldHJ5IGlzIGNyZWF0ZWQKKyAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMub25OZXdHZW9tZXRyeUFkZGVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZh
YmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAg
ICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiBhIGdlb21ldHJ5IGlzIHJl
bW92ZWQKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25HZW9tZXRyeVJlbW92ZWRPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJl
ZCB3aGVuIGEgdHJhbnNmb3JtIG5vZGUgaXMgY3JlYXRlZAorICAgICAgICAqLworICAgICAgICBf
dGhpcy5vbk5ld1RyYW5zZm9ybU5vZGVBZGRlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gYSB0cmFuc2Zvcm0gbm9k
ZSBpcyByZW1vdmVkCisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uVHJhbnNmb3JtTm9kZVJl
bW92ZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2
ZW50IHRyaWdnZXJlZCB3aGVuIGEgbWVzaCBpcyBjcmVhdGVkCisgICAgICAgICovCisgICAgICAg
IF90aGlzLm9uTmV3TWVzaEFkZGVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioK
KyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiBhIG1lc2ggaXMgcmVtb3ZlZAorICAg
ICAgICAqLworICAgICAgICBfdGhpcy5vbk1lc2hSZW1vdmVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlz
Y19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgp
OworICAgICAgICAvKioKKyAgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gYSBza2Vs
ZXRvbiBpcyBjcmVhdGVkCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vbk5ld1NrZWxldG9u
QWRkZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2
ZW50IHRyaWdnZXJlZCB3aGVuIGEgc2tlbGV0b24gaXMgcmVtb3ZlZAorICAgICAgICAqLworICAg
ICAgICBfdGhpcy5vblNrZWxldG9uUmVtb3ZlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gYSBtYXRlcmlhbCBpcyBj
cmVhdGVkCisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uTmV3TWF0ZXJpYWxBZGRlZE9ic2Vy
dmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dl
cmVkIHdoZW4gYSBtYXRlcmlhbCBpcyByZW1vdmVkCisgICAgICAgICovCisgICAgICAgIF90aGlz
Lm9uTWF0ZXJpYWxSZW1vdmVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAg
ICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiBhIHRleHR1cmUgaXMgY3JlYXRlZAorICAg
ICAgICAqLworICAgICAgICBfdGhpcy5vbk5ld1RleHR1cmVBZGRlZE9ic2VydmFibGUgPSBuZXcg
X01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxl
Il0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gYSB0
ZXh0dXJlIGlzIHJlbW92ZWQKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25UZXh0dXJlUmVt
b3ZlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZl
bnQgdHJpZ2dlcmVkIHdoZW4gcmVuZGVyIHRhcmdldHMgYXJlIGFib3V0IHRvIGJlIHJlbmRlcmVk
CisgICAgICAgICogQ2FuIGhhcHBlbiBtdWx0aXBsZSB0aW1lcyBwZXIgZnJhbWUuCisgICAgICAg
ICovCisgICAgICAgIF90aGlzLm9uQmVmb3JlUmVuZGVyVGFyZ2V0c1JlbmRlck9ic2VydmFibGUg
PSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNl
cnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdo
ZW4gcmVuZGVyIHRhcmdldHMgd2VyZSByZW5kZXJlZC4KKyAgICAgICAgKiBDYW4gaGFwcGVuIG11
bHRpcGxlIHRpbWVzIHBlciBmcmFtZS4KKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25BZnRl
clJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgor
ICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCBiZWZvcmUgY2FsY3VsYXRpbmcgZGV0ZXJtaW5p
c3RpYyBzaW11bGF0aW9uIHN0ZXAKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25CZWZvcmVT
dGVwT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVu
dCB0cmlnZ2VyZWQgYWZ0ZXIgY2FsY3VsYXRpbmcgZGV0ZXJtaW5pc3RpYyBzaW11bGF0aW9uIHN0
ZXAKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25BZnRlclN0ZXBPYnNlcnZhYmxlID0gbmV3
IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2YWJs
ZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0
aGUgYWN0aXZlQ2FtZXJhIHByb3BlcnR5IGlzIHVwZGF0ZWQKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLm9uQWN0aXZlQ2FtZXJhQ2hhbmdlZCA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAg
ICAgICAgICogVGhpcyBPYnNlcnZhYmxlIHdpbGwgYmUgdHJpZ2dlcmVkIGJlZm9yZSByZW5kZXJp
bmcgZWFjaCByZW5kZXJpbmdHcm91cCBvZiBlYWNoIHJlbmRlcmVkIGNhbWVyYS4KKyAgICAgICAg
ICogVGhlIFJlbmRlcmluR3JvdXBJbmZvIGNsYXNzIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRp
b24gYWJvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIG9ic2VydmFibGUgaXMgY2FsbGVkCisg
ICAgICAgICAqIElmIHlvdSB3aXNoIHRvIHJlZ2lzdGVyIGFuIE9ic2VydmVyIG9ubHkgZm9yIGEg
Z2l2ZW4gc2V0IG9mIHJlbmRlcmluZ0dyb3VwLCB1c2UgdGhlIG1hc2sgd2l0aCBhIGNvbWJpbmF0
aW9uIG9mIHRoZSByZW5kZXJpbmdHcm91cCBpbmRleCBlbGV2YXRlZCB0byB0aGUgcG93ZXIgb2Yg
dHdvICgxIGZvciByZW5kZXJpbmdHcm91cCAwLCAyIGZvciByZW5kZXJpbmdyT3VwMSwgNCBmb3Ig
MiBhbmQgOCBmb3IgMykKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uQmVmb3JlUmVuZGVy
aW5nR3JvdXBPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBU
aGlzIE9ic2VydmFibGUgd2lsbCBiZSB0cmlnZ2VyZWQgYWZ0ZXIgcmVuZGVyaW5nIGVhY2ggcmVu
ZGVyaW5nR3JvdXAgb2YgZWFjaCByZW5kZXJlZCBjYW1lcmEuCisgICAgICAgICAqIFRoZSBSZW5k
ZXJpbkdyb3VwSW5mbyBjbGFzcyBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRo
ZSBjb250ZXh0IGluIHdoaWNoIHRoZSBvYnNlcnZhYmxlIGlzIGNhbGxlZAorICAgICAgICAgKiBJ
ZiB5b3Ugd2lzaCB0byByZWdpc3RlciBhbiBPYnNlcnZlciBvbmx5IGZvciBhIGdpdmVuIHNldCBv
ZiByZW5kZXJpbmdHcm91cCwgdXNlIHRoZSBtYXNrIHdpdGggYSBjb21iaW5hdGlvbiBvZiB0aGUg
cmVuZGVyaW5nR3JvdXAgaW5kZXggZWxldmF0ZWQgdG8gdGhlIHBvd2VyIG9mIHR3byAoMSBmb3Ig
cmVuZGVyaW5nR3JvdXAgMCwgMiBmb3IgcmVuZGVyaW5nck91cDEsIDQgZm9yIDIgYW5kIDggZm9y
IDMpCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkFmdGVyUmVuZGVyaW5nR3JvdXBPYnNl
cnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIE9ic2VydmFi
bGUgd2lsbCB3aGVuIGEgbWVzaCBoYXMgYmVlbiBpbXBvcnRlZCBpbnRvIHRoZSBzY2VuZS4KKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLm9uTWVzaEltcG9ydGVkT2JzZXJ2YWJsZSA9IG5ldyBf
TWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUi
XSgpOworICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAg
ICAgIF90aGlzLl9yZWdpc3RlcmVkRm9yTGF0ZUFuaW1hdGlvbkJpbmRpbmdzID0gbmV3IF9NaXNj
X3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU21hcnRBcnJheU5vRHVw
bGljYXRlIl0oMjU2KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgb2JzZXJ2YWJsZSBl
dmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbnkgcG9udGVyIGV2ZW50IGlzIHRyaWdnZXJlZC4gSXQg
aXMgcmVnaXN0ZXJlZCBkdXJpbmcgU2NlbmUuYXR0YWNoQ29udHJvbCgpIGFuZCBpdCBpcyBjYWxs
ZWQgQkVGT1JFIHRoZSAzRCBlbmdpbmUgcHJvY2VzcyBhbnl0aGluZyAobWVzaC9zcHJpdGUgcGlj
a2luZyBmb3IgaW5zdGFuY2UpLgorICAgICAgICAgKiBZb3UgaGF2ZSB0aGUgcG9zc2liaWxpdHkg
dG8gc2tpcCB0aGUgcHJvY2VzcyBhbmQgdGhlIGNhbGwgdG8gb25Qb2ludGVyT2JzZXJ2YWJsZSBi
eSBzZXR0aW5nIFBvaW50ZXJJbmZvUHJlLnNraXBPblBvaW50ZXJPYnNlcnZhYmxlIHRvIHRydWUK
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uUHJlUG9pbnRlck9ic2VydmFibGUgPSBuZXcg
X01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxl
Il0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgZXZlbnQgdHJpZ2dlcmVk
IGVhY2ggdGltZSBhbiBpbnB1dCBldmVudCBpcyByZWNlaXZlZCBmcm9tIHRoZSByZW5kZXJpbmcg
Y2FudmFzCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vblBvaW50ZXJPYnNlcnZhYmxlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgICAgIC8vIEtleWJvYXJkCisgICAgICAgIC8qKgorICAgICAgICAgKiBU
aGlzIG9ic2VydmFibGUgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW55IGtleWJvYXJkIGV2ZW50
IHNpIHJhaXNlZCBhbmQgcmVnaXN0ZXJlZCBkdXJpbmcgU2NlbmUuYXR0YWNoQ29udHJvbCgpCisg
ICAgICAgICAqIFlvdSBoYXZlIHRoZSBwb3NzaWJpbGl0eSB0byBza2lwIHRoZSBwcm9jZXNzIGFu
ZCB0aGUgY2FsbCB0byBvbktleWJvYXJkT2JzZXJ2YWJsZSBieSBzZXR0aW5nIEtleWJvYXJkSW5m
b1ByZS5za2lwT25Qb2ludGVyT2JzZXJ2YWJsZSB0byB0cnVlCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5vblByZUtleWJvYXJkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioK
KyAgICAgICAgICogT2JzZXJ2YWJsZSBldmVudCB0cmlnZ2VyZWQgZWFjaCB0aW1lIGFuIGtleWJv
YXJkIGV2ZW50IGlzIHJlY2VpdmVkIGZyb20gdGhlIGhvc3Rpbmcgd2luZG93CisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5vbktleWJvYXJkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZh
YmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAg
ICAvLyBDb29yZGluYXRlcyBzeXN0ZW0KKyAgICAgICAgX3RoaXMuX3VzZVJpZ2h0SGFuZGVkU3lz
dGVtID0gZmFsc2U7CisgICAgICAgIC8vIERldGVybWluaXN0aWMgbG9ja3N0ZXAKKyAgICAgICAg
X3RoaXMuX3RpbWVBY2N1bXVsYXRvciA9IDA7CisgICAgICAgIF90aGlzLl9jdXJyZW50U3RlcElk
ID0gMDsKKyAgICAgICAgX3RoaXMuX2N1cnJlbnRJbnRlcm5hbFN0ZXAgPSAwOworICAgICAgICAv
LyBGb2cKKyAgICAgICAgX3RoaXMuX2ZvZ0VuYWJsZWQgPSB0cnVlOworICAgICAgICBfdGhpcy5f
Zm9nTW9kZSA9IFNjZW5lLkZPR01PREVfTk9ORTsKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0
cyBvciBzZXRzIHRoZSBmb2cgY29sb3IgdG8gdXNlCisgICAgICAgICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9lbnZpcm9ubWVudCNmb2cKKyAgICAgICAgKiAoRGVm
YXVsdCBpcyBDb2xvcjMoMC4yLCAwLjIsIDAuMykpCisgICAgICAgICovCisgICAgICAgIF90aGlz
LmZvZ0NvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yN19fWyJDb2xvcjMiXSgwLjIsIDAuMiwgMC4zKTsKKyAgICAgICAgLyoqCisgICAgICAgICog
R2V0cyBvciBzZXRzIHRoZSBmb2cgZGVuc2l0eSB0byB1c2UKKyAgICAgICAgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Vudmlyb25tZW50I2ZvZworICAgICAgICAq
IChEZWZhdWx0IGlzIDAuMSkKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZm9nRGVuc2l0eSA9
IDAuMTsKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBmb2cgc3RhcnQg
ZGlzdGFuY2UgdG8gdXNlCisgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
YmFieWxvbjEwMS9lbnZpcm9ubWVudCNmb2cKKyAgICAgICAgKiAoRGVmYXVsdCBpcyAwKQorICAg
ICAgICAqLworICAgICAgICBfdGhpcy5mb2dTdGFydCA9IDA7CisgICAgICAgIC8qKgorICAgICAg
ICAqIEdldHMgb3Igc2V0cyB0aGUgZm9nIGVuZCBkaXN0YW5jZSB0byB1c2UKKyAgICAgICAgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Vudmlyb25tZW50I2ZvZwor
ICAgICAgICAqIChEZWZhdWx0IGlzIDEwMDApCisgICAgICAgICovCisgICAgICAgIF90aGlzLmZv
Z0VuZCA9IDEwMDAuMDsKKyAgICAgICAgLy8gTGlnaHRzCisgICAgICAgIF90aGlzLl9zaGFkb3dz
RW5hYmxlZCA9IHRydWU7CisgICAgICAgIF90aGlzLl9saWdodHNFbmFibGVkID0gdHJ1ZTsKKyAg
ICAgICAgLyoqIEFsbCBvZiB0aGUgYWN0aXZlIGNhbWVyYXMgYWRkZWQgdG8gdGhpcyBzY2VuZS4g
Ki8KKyAgICAgICAgX3RoaXMuYWN0aXZlQ2FtZXJhcyA9IG5ldyBBcnJheSgpOworICAgICAgICAv
LyBUZXh0dXJlcworICAgICAgICBfdGhpcy5fdGV4dHVyZXNFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgLy8gUGFydGljbGVzCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJv
b2xlYW4gaW5kaWNhdGluZyBpZiBwYXJ0aWNsZXMgYXJlIGVuYWJsZWQgb24gdGhpcyBzY2VuZQor
ICAgICAgICAqLworICAgICAgICBfdGhpcy5wYXJ0aWNsZXNFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgLy8gU3ByaXRlcworICAgICAgICAvKioKKyAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29s
ZWFuIGluZGljYXRpbmcgaWYgc3ByaXRlcyBhcmUgZW5hYmxlZCBvbiB0aGlzIHNjZW5lCisgICAg
ICAgICovCisgICAgICAgIF90aGlzLnNwcml0ZXNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgLy8g
U2tlbGV0b25zCisgICAgICAgIF90aGlzLl9za2VsZXRvbnNFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgLy8gTGVucyBmbGFyZXMKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0cyBvciBzZXRzIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIGlmIGxlbnMgZmxhcmVzIGFyZSBlbmFibGVkIG9uIHRoaXMgc2Nl
bmUKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubGVuc0ZsYXJlc0VuYWJsZWQgPSB0cnVlOwor
ICAgICAgICAvLyBDb2xsaXNpb25zCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgb3Igc2V0
cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBjb2xsaXNpb25zIGFyZSBlbmFibGVkIG9uIHRoaXMg
c2NlbmUKKyAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAx
L2NhbWVyYXMsX21lc2hfY29sbGlzaW9uc19hbmRfZ3Jhdml0eQorICAgICAgICAqLworICAgICAg
ICBfdGhpcy5jb2xsaXNpb25zRW5hYmxlZCA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIHRoZSBncmF2aXR5IGFwcGxpZWQgdG8gdGhpcyBzY2VuZSAodXNlZCBvbmx5IGZv
ciBjb2xsaXNpb25zKQorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9i
YWJ5bG9uMTAxL2NhbWVyYXMsX21lc2hfY29sbGlzaW9uc19hbmRfZ3Jhdml0eQorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuZ3Jhdml0eSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVjdG9yMyJdKDAsIC05LjgwNywgMCk7CisgICAgICAg
IC8vIFBvc3Rwcm9jZXNzZXMKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0cyBvciBzZXRzIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIGlmIHBvc3Rwcm9jZXNzZXMgYXJlIGVuYWJsZWQgb24gdGhpcyBz
Y2VuZQorICAgICAgICAqLworICAgICAgICBfdGhpcy5wb3N0UHJvY2Vzc2VzRW5hYmxlZCA9IHRy
dWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbGlzdCBvZiBwb3N0cHJvY2Vzc2VzIGFk
ZGVkIHRvIHRoZSBzY2VuZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucG9zdFByb2Nlc3Nl
cyA9IG5ldyBBcnJheSgpOworICAgICAgICAvLyBDdXN0b21zIHJlbmRlciB0YXJnZXRzCisgICAg
ICAgIC8qKgorICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBy
ZW5kZXIgdGFyZ2V0cyBhcmUgZW5hYmxlZCBvbiB0aGlzIHNjZW5lCisgICAgICAgICovCisgICAg
ICAgIF90aGlzLnJlbmRlclRhcmdldHNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAg
ICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIG5leHQgcmVuZGVyIHRh
cmdldHMgbXVzdCBiZSBkdW1wZWQgYXMgaW1hZ2UgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcworICAg
ICAgICAqIFdlIHJlY29tbWVuZCBub3QgdXNpbmcgaXQgYW5kIGluc3RlYWQgcmVseSBvbiBTcGVj
dG9yLmpzOiBodHRwOi8vc3BlY3Rvci5iYWJ5bG9uanMuY29tCisgICAgICAgICovCisgICAgICAg
IF90aGlzLmR1bXBOZXh0UmVuZGVyVGFyZ2V0cyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAg
ICAgICogVGhlIGxpc3Qgb2YgdXNlciBkZWZpbmVkIHJlbmRlciB0YXJnZXRzIGFkZGVkIHRvIHRo
ZSBzY2VuZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuY3VzdG9tUmVuZGVyVGFyZ2V0cyA9
IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBt
ZXNoZXMgaW1wb3J0ZWQgdG8gdGhlIHNjZW5lIHRocm91Z2ggU2NlbmVMb2FkZXIKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLmltcG9ydGVkTWVzaGVzRmlsZXMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgLy8gUHJvYmVzCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJv
b2xlYW4gaW5kaWNhdGluZyBpZiBwcm9iZXMgYXJlIGVuYWJsZWQgb24gdGhpcyBzY2VuZQorICAg
ICAgICAqLworICAgICAgICBfdGhpcy5wcm9iZXNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgX3Ro
aXMuX21lc2hlc0ZvckludGVyc2VjdGlvbnMgPSBuZXcgX01pc2Nfc21hcnRBcnJheV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTbWFydEFycmF5Tm9EdXBsaWNhdGUiXSgyNTYpOworICAg
ICAgICAvLyBQcm9jZWR1cmFsIHRleHR1cmVzCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMg
b3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBwcm9jZWR1cmFsIHRleHR1cmVzIGFyZSBl
bmFibGVkIG9uIHRoaXMgc2NlbmUKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucHJvY2VkdXJh
bFRleHR1cmVzRW5hYmxlZCA9IHRydWU7CisgICAgICAgIC8vIFBlcmZvcm1hbmNlIGNvdW50ZXJz
CisgICAgICAgIF90aGlzLl90b3RhbFZlcnRpY2VzID0gbmV3IF9NaXNjX3BlcmZDb3VudGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fWyJQZXJmQ291bnRlciJdKCk7CisgICAgICAgIC8q
KiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9hY3RpdmVJbmRpY2VzID0gbmV3IF9NaXNjX3Bl
cmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fWyJQZXJmQ291bnRlciJdKCk7
CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9hY3RpdmVQYXJ0aWNsZXMg
PSBuZXcgX01pc2NfcGVyZkNvdW50ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19bIlBl
cmZDb3VudGVyIl0oKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2Fj
dGl2ZUJvbmVzID0gbmV3IF9NaXNjX3BlcmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yNl9fWyJQZXJmQ291bnRlciJdKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAg
IF90aGlzLl9hbmltYXRpb25UaW1lID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
b3Igc2V0cyBhIGdlbmVyYWwgc2NhbGUgZm9yIGFuaW1hdGlvbiBzcGVlZAorICAgICAgICAgKiBA
c2VlIGh0dHBzOi8vd3d3LmJhYnlsb25qcy1wbGF5Z3JvdW5kLmNvbS8jSUJVMlc3IzMKKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLmFuaW1hdGlvblRpbWVTY2FsZSA9IDE7CisgICAgICAgIF90
aGlzLl9yZW5kZXJJZCA9IDA7CisgICAgICAgIF90aGlzLl9mcmFtZUlkID0gMDsKKyAgICAgICAg
X3RoaXMuX2V4ZWN1dGVXaGVuUmVhZHlUaW1lb3V0SWQgPSAtMTsKKyAgICAgICAgX3RoaXMuX2lu
dGVybWVkaWF0ZVJlbmRlcmluZyA9IGZhbHNlOworICAgICAgICBfdGhpcy5fdmlld1VwZGF0ZUZs
YWcgPSAtMTsKKyAgICAgICAgX3RoaXMuX3Byb2plY3Rpb25VcGRhdGVGbGFnID0gLTE7CisgICAg
ICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl90b0JlRGlzcG9zZWQgPSBuZXcgQXJy
YXkoMjU2KTsKKyAgICAgICAgX3RoaXMuX2FjdGl2ZVJlcXVlc3RzID0gbmV3IEFycmF5KCk7Cisg
ICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9wZW5kaW5nRGF0YSA9IG5ldyBB
cnJheSgpOworICAgICAgICBfdGhpcy5faXNEaXNwb3NlZCA9IGZhbHNlOworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgYWxsIHN1
Ym1lc2hlcyBvZiBhY3RpdmUgbWVzaGVzIG11c3QgYmUgcmVuZGVyZWQKKyAgICAgICAgICogVXNl
IHRoaXMgYm9vbGVhbiB0byBhdm9pZCBjb21wdXRpbmcgZnJ1c3R1bSBjbGlwcGluZyBvbiBzdWJt
ZXNoZXMgKFRoaXMgY291bGQgaGVscCB3aGVuIHlvdSBhcmUgQ1BVIGJvdW5kKQorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuZGlzcGF0Y2hBbGxTdWJNZXNoZXNPZkFjdGl2ZU1lc2hlcyA9IGZh
bHNlOworICAgICAgICBfdGhpcy5fYWN0aXZlTWVzaGVzID0gbmV3IF9NaXNjX3NtYXJ0QXJyYXlf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU21hcnRBcnJheSJdKDI1Nik7CisgICAgICAg
IF90aGlzLl9wcm9jZXNzZWRNYXRlcmlhbHMgPSBuZXcgX01pc2Nfc21hcnRBcnJheV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTbWFydEFycmF5Il0oMjU2KTsKKyAgICAgICAgX3RoaXMu
X3JlbmRlclRhcmdldHMgPSBuZXcgX01pc2Nfc21hcnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJTbWFydEFycmF5Tm9EdXBsaWNhdGUiXSgyNTYpOworICAgICAgICAvKiogQGhp
ZGRlbiAqLworICAgICAgICBfdGhpcy5fYWN0aXZlUGFydGljbGVTeXN0ZW1zID0gbmV3IF9NaXNj
X3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU21hcnRBcnJheSJdKDI1
Nik7CisgICAgICAgIF90aGlzLl9hY3RpdmVTa2VsZXRvbnMgPSBuZXcgX01pc2Nfc21hcnRBcnJh
eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTbWFydEFycmF5Tm9EdXBsaWNhdGUiXSgz
Mik7CisgICAgICAgIF90aGlzLl9zb2Z0d2FyZVNraW5uZWRNZXNoZXMgPSBuZXcgX01pc2Nfc21h
cnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTbWFydEFycmF5Tm9EdXBsaWNh
dGUiXSgzMik7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9hY3RpdmVB
bmltYXRhYmxlcyA9IG5ldyBBcnJheSgpOworICAgICAgICBfdGhpcy5fdHJhbnNmb3JtTWF0cml4
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdHJp
eCJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xl
YW4gaW5kaWNhdGluZyBpZiBsaWdodHMgbXVzdCBiZSBzb3J0ZWQgYnkgcHJpb3JpdHkgKG9mZiBi
eSBkZWZhdWx0KQorICAgICAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGVyZSBhcmUgbW9yZSBs
aWdodHMgdGhhdCB0aGUgbWF4aW11bSBzaW11bHRlYW5vdXMgYXV0aG9yaXplZAorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMucmVxdWlyZUxpZ2h0U29ydGluZyA9IGZhbHNlOworICAgICAgICAv
KioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKiBCYWNraW5nIHN0b3JlIG9mIGRlZmlu
ZWQgc2NlbmUgY29tcG9uZW50cy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9jb21wb25l
bnRzID0gW107CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIEJh
Y2tpbmcgc3RvcmUgb2YgZGVmaW5lZCBzY2VuZSBjb21wb25lbnRzLgorICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMuX3NlcmlhbGl6YWJsZUNvbXBvbmVudHMgPSBbXTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIExpc3Qgb2YgY29tcG9uZW50cyB0byByZWdpc3RlciBvbiB0aGUgbmV4dCByZWdp
c3RyYXRpb24gc3RlcC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl90cmFuc2llbnRDb21w
b25lbnRzID0gW107CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAq
IERlZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVuaW5nIGJlZm9yZSBjYW1lcmEgdXBkYXRlcy4KKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLl9iZWZvcmVDYW1lcmFVcGRhdGVTdGFnZSA9IF9zY2Vu
ZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2UiXS5DcmVhdGUo
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogRGVmaW5lcyB0
aGUgYWN0aW9ucyBoYXBwZW5pbmcgYmVmb3JlIGNsZWFyIHRoZSBjYW52YXMuCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5fYmVmb3JlQ2xlYXJTdGFnZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2UiXS5DcmVhdGUoKTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogRGVmaW5lcyB0aGUgYWN0aW9ucyB3aGVu
IGNvbGxlY3RpbmcgcmVuZGVyIHRhcmdldHMgZm9yIHRoZSBmcmFtZS4KKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLl9nYXRoZXJSZW5kZXJUYXJnZXRzU3RhZ2UgPSBfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmluZXMgdGhlIGFjdGlvbnMg
aGFwcGVuaW5nIGZvciBvbmUgY2FtZXJhIGluIHRoZSBmcmFtZS4KKyAgICAgICAgICovCisgICAg
ICAgIF90aGlzLl9nYXRoZXJBY3RpdmVDYW1lcmFSZW5kZXJUYXJnZXRzU3RhZ2UgPSBfc2NlbmVD
b21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmluZXMgdGhl
IGFjdGlvbnMgaGFwcGVuaW5nIGR1cmluZyB0aGUgcGVyIG1lc2ggcmVhZHkgY2hlY2tzLgorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2lzUmVhZHlGb3JNZXNoU3RhZ2UgPSBfc2NlbmVDb21w
b25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmluZXMgdGhlIGFj
dGlvbnMgaGFwcGVuaW5nIGJlZm9yZSBldmFsdWF0ZSBhY3RpdmUgbWVzaCBjaGVja3MuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5fYmVmb3JlRXZhbHVhdGVBY3RpdmVNZXNoU3RhZ2UgPSBf
c2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3Jl
YXRlKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmlu
ZXMgdGhlIGFjdGlvbnMgaGFwcGVuaW5nIGR1cmluZyB0aGUgZXZhbHVhdGUgc3ViIG1lc2ggY2hl
Y2tzLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2V2YWx1YXRlU3ViTWVzaFN0YWdlID0g
X3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJTdGFnZSJdLkNy
ZWF0ZSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKiBEZWZp
bmVzIHRoZSBhY3Rpb25zIGhhcHBlbmluZyBkdXJpbmcgdGhlIGFjdGl2ZSBtZXNoIHN0YWdlLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2FjdGl2ZU1lc2hTdGFnZSA9IF9zY2VuZUNvbXBv
bmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2UiXS5DcmVhdGUoKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogRGVmaW5lcyB0aGUgYWN0
aW9ucyBoYXBwZW5pbmcgZHVyaW5nIHRoZSBwZXIgY2FtZXJhIHJlbmRlciB0YXJnZXQgc3RlcC4K
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9jYW1lcmFEcmF3UmVuZGVyVGFyZ2V0U3RhZ2Ug
PSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0u
Q3JlYXRlKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERl
ZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIHRoZSBhY3RpdmUgY2FtZXJh
IGlzIGRyYXdpbmcuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fYmVmb3JlQ2FtZXJhRHJh
d1N0YWdlID0gX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJT
dGFnZSJdLkNyZWF0ZSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAg
ICAgKiBEZWZpbmVzIHRoZSBhY3Rpb25zIGhhcHBlbmluZyBqdXN0IGJlZm9yZSBhIHJlbmRlciB0
YXJnZXQgaXMgZHJhd2luZy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9iZWZvcmVSZW5k
ZXJUYXJnZXREcmF3U3RhZ2UgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlk
ZGVuCisgICAgICAgICAqIERlZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVuaW5nIGp1c3QgYmVmb3Jl
IGEgcmVuZGVyaW5nIGdyb3VwIGlzIGRyYXdpbmcuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5fYmVmb3JlUmVuZGVyaW5nR3JvdXBEcmF3U3RhZ2UgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVu
aW5nIGp1c3QgYmVmb3JlIGEgbWVzaCBpcyBkcmF3aW5nLgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuX2JlZm9yZVJlbmRlcmluZ01lc2hTdGFnZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2UiXS5DcmVhdGUoKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogRGVmaW5lcyB0aGUgYWN0aW9ucyBoYXBwZW5p
bmcganVzdCBhZnRlciBhIG1lc2ggaGFzIGJlZW4gZHJhd24uCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5fYWZ0ZXJSZW5kZXJpbmdNZXNoU3RhZ2UgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVu
aW5nIGp1c3QgYWZ0ZXIgYSByZW5kZXJpbmcgZ3JvdXAgaGFzIGJlZW4gZHJhd24uCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5fYWZ0ZXJSZW5kZXJpbmdHcm91cERyYXdTdGFnZSA9IF9zY2Vu
ZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2UiXS5DcmVhdGUo
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogRGVmaW5lcyB0
aGUgYWN0aW9ucyBoYXBwZW5pbmcganVzdCBhZnRlciB0aGUgYWN0aXZlIGNhbWVyYSBoYXMgYmVl
biBkcmF3bi4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9hZnRlckNhbWVyYURyYXdTdGFn
ZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2Ui
XS5DcmVhdGUoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICog
RGVmaW5lcyB0aGUgYWN0aW9ucyBoYXBwZW5pbmcganVzdCBhZnRlciBhIHJlbmRlciB0YXJnZXQg
aGFzIGJlZW4gZHJhd24uCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fYWZ0ZXJSZW5kZXJU
YXJnZXREcmF3U3RhZ2UgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVu
CisgICAgICAgICAqIERlZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVuaW5nIGp1c3QgYWZ0ZXIgcmVu
ZGVyaW5nIGFsbCBjYW1lcmFzIGFuZCBjb21wdXRpbmcgaW50ZXJzZWN0aW9ucy4KKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLl9hZnRlclJlbmRlclN0YWdlID0gX3NjZW5lQ29tcG9uZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJTdGFnZSJdLkNyZWF0ZSgpOworICAgICAgICAv
KioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBhY3Rpb25zIGhh
cHBlbmluZyB3aGVuIGEgcG9pbnRlciBtb3ZlIGV2ZW50IGhhcHBlbnMuCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5fcG9pbnRlck1vdmVTdGFnZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2UiXS5DcmVhdGUoKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogRGVmaW5lcyB0aGUgYWN0aW9ucyBoYXBwZW5p
bmcgd2hlbiBhIHBvaW50ZXIgZG93biBldmVudCBoYXBwZW5zLgorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuX3BvaW50ZXJEb3duU3RhZ2UgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVuaW5nIHdo
ZW4gYSBwb2ludGVyIHVwIGV2ZW50IGhhcHBlbnMuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5fcG9pbnRlclVwU3RhZ2UgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBhbiBv
cHRpb25hbCBtYXAgZnJvbSBHZW9tZXRyeSBJZCB0byBHZW9tZXRyeSBpbmRleCBpbiB0aGUgJ2dl
b21ldHJpZXMnIGFycmF5CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5nZW9tZXRyaWVzQnlV
bmlxdWVJZCA9IG51bGw7CisgICAgICAgIF90aGlzLl9kZWZhdWx0TWVzaENhbmRpZGF0ZXMgPSB7
CisgICAgICAgICAgICBkYXRhOiBbXSwKKyAgICAgICAgICAgIGxlbmd0aDogMAorICAgICAgICB9
OworICAgICAgICBfdGhpcy5fZGVmYXVsdFN1Yk1lc2hDYW5kaWRhdGVzID0geworICAgICAgICAg
ICAgZGF0YTogW10sCisgICAgICAgICAgICBsZW5ndGg6IDAKKyAgICAgICAgfTsKKyAgICAgICAg
X3RoaXMuX3ByZXZlbnRGcmVlQWN0aXZlTWVzaGVzQW5kUmVuZGVyaW5nR3JvdXBzID0gZmFsc2U7
CisgICAgICAgIF90aGlzLl9hY3RpdmVNZXNoZXNGcm96ZW4gPSBmYWxzZTsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2FsbG93UG9zdFByb2Nlc3NDbGVhckNvbG9yID0g
dHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzZXIgdXBkYXRhYmxlIGZ1bmN0aW9uIHRo
YXQgd2lsbCByZXR1cm4gYSBkZXRlcm1pbmlzdGljIGZyYW1lIHRpbWUgd2hlbiBlbmdpbmUgaXMg
aW4gZGV0ZXJtaW5pc3RpYyBsb2NrIHN0ZXAgbW9kZQorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMuZ2V0RGV0ZXJtaW5pc3RpY0ZyYW1lVGltZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiAxMDAwLjAgLyA2MC4wOyAvLyBmcmFtZSB0aW1lIGluIG1zCisgICAgICAgIH07Cisg
ICAgICAgIF90aGlzLl9ibG9ja01hdGVyaWFsRGlydHlNZWNoYW5pc20gPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuX2VuZ2luZSA9IGVuZ2luZSB8fCBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjNfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZEVuZ2luZTsK
KyAgICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnZpcnR1YWwpIHsKKyAgICAgICAgICAg
IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJFbmdp
bmVTdG9yZSJdLl9MYXN0Q3JlYXRlZFNjZW5lID0gX3RoaXM7CisgICAgICAgICAgICBfdGhpcy5f
ZW5naW5lLnNjZW5lcy5wdXNoKF90aGlzKTsKKyAgICAgICAgfQorICAgICAgICBfdGhpcy5fdWlk
ID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX3JlbmRlcmluZ01hbmFnZXIgPSBuZXcgX1JlbmRlcmlu
Z19yZW5kZXJpbmdNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJSZW5kZXJp
bmdNYW5hZ2VyIl0oX3RoaXMpOworICAgICAgICBpZiAoX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nl
c3NNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJQb3N0UHJvY2Vzc01hbmFn
ZXIiXSkgeworICAgICAgICAgICAgX3RoaXMucG9zdFByb2Nlc3NNYW5hZ2VyID0gbmV3IF9Qb3N0
UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdf
X1siUG9zdFByb2Nlc3NNYW5hZ2VyIl0oX3RoaXMpOworICAgICAgICB9CisgICAgICAgIGlmIChf
TWlzY19kb21NYW5hZ2VtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJEb21NYW5h
Z2VtZW50Il0uSXNXaW5kb3dPYmplY3RFeGlzdCgpKSB7CisgICAgICAgICAgICBfdGhpcy5hdHRh
Y2hDb250cm9sKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVW5pZm9ybSBCdWZmZXIKKyAgICAg
ICAgX3RoaXMuX2NyZWF0ZVVibygpOworICAgICAgICAvLyBEZWZhdWx0IEltYWdlIHByb2Nlc3Np
bmcgZGVmaW5pdGlvbgorICAgICAgICBpZiAoX01hdGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25m
aWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJJbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uIl0pIHsKKyAgICAgICAgICAgIF90aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25m
aWd1cmF0aW9uID0gbmV3IF9NYXRlcmlhbHNfaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
biJdKCk7CisgICAgICAgIH0KKyAgICAgICAgX3RoaXMuc2V0RGVmYXVsdENhbmRpZGF0ZVByb3Zp
ZGVycygpOworICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVzZUdlb21ldHJ5VW5pcXVl
SWRzTWFwID09PSB0cnVlKSB7CisgICAgICAgICAgICBfdGhpcy5nZW9tZXRyaWVzQnlVbmlxdWVJ
ZCA9IHt9OworICAgICAgICB9CisgICAgICAgIF90aGlzLnVzZU1hdGVyaWFsTWVzaE1hcCA9IG9w
dGlvbnMgJiYgb3B0aW9ucy51c2VHZW9tZXRyeVVuaXF1ZUlkc01hcCB8fCBmYWxzZTsKKyAgICAg
ICAgX3RoaXMudXNlQ2xvbmVkTWVzaGhNYXAgPSBvcHRpb25zICYmIG9wdGlvbnMudXNlQ2xvbmVk
TWVzaGhNYXAgfHwgZmFsc2U7CisgICAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy52aXJ0
dWFsKSB7CisgICAgICAgICAgICBfdGhpcy5fZW5naW5lLm9uTmV3U2NlbmVBZGRlZE9ic2VydmFi
bGUubm90aWZ5T2JzZXJ2ZXJzKF90aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3Ro
aXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEZhY3RvcnkgdXNlZCB0byBjcmVhdGUgdGhlIGRl
ZmF1bHQgbWF0ZXJpYWwuCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1hdGVy
aWFsIHRvIGNyZWF0ZQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdG8gY3JlYXRlIHRo
ZSBtYXRlcmlhbCBmb3IKKyAgICAgKiBAcmV0dXJucyBUaGUgZGVmYXVsdCBtYXRlcmlhbAorICAg
ICAqLworICAgIFNjZW5lLkRlZmF1bHRNYXRlcmlhbEZhY3RvcnkgPSBmdW5jdGlvbiAoc2NlbmUp
IHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI0X19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIlN0YW5kYXJkTWF0ZXJpYWwiKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEZhY3RvcnkgdXNlZCB0byBjcmVhdGUgdGhlIGEgY29sbGlzaW9u
IGNvb3JkaW5hdG9yLgorICAgICAqIEByZXR1cm5zIFRoZSBjb2xsaXNpb24gY29vcmRpbmF0b3IK
KyAgICAgKi8KKyAgICBTY2VuZS5Db2xsaXNpb25Db29yZGluYXRvckZhY3RvcnkgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yNF9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJEZWZhdWx0Q29sbGlzaW9uQ29vcmRp
bmF0b3IiKTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5
cGUsICJlbnZpcm9ubWVudFRleHR1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUZXh0
dXJlIHVzZWQgaW4gYWxsIHBiciBtYXRlcmlhbCBhcyB0aGUgcmVmbGVjdGlvbiB0ZXh0dXJlLgor
ICAgICAgICAgKiBBcyBpbiB0aGUgbWFqb3JpdHkgb2YgdGhlIHNjZW5lIHRoZXkgYXJlIHRoZSBz
YW1lIChleGNlcHRpb24gZm9yIG11bHRpIHJvb20gYW5kIHNvIG9uKSwKKyAgICAgICAgICogdGhp
cyBpcyBlYXNpZXIgdG8gcmVmZXJlbmNlIGZyb20gaGVyZSB0aGFuIGZyb20gYWxsIHRoZSBtYXRl
cmlhbHMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudFRleHR1cmU7CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBUZXh0dXJlIHVzZWQgaW4gYWxsIHBiciBtYXRlcmlhbCBhcyB0aGUg
cmVmbGVjdGlvbiB0ZXh0dXJlLgorICAgICAgICAgKiBBcyBpbiB0aGUgbWFqb3JpdHkgb2YgdGhl
IHNjZW5lIHRoZXkgYXJlIHRoZSBzYW1lIChleGNlcHRpb24gZm9yIG11bHRpIHJvb20gYW5kIHNv
IG9uKSwKKyAgICAgICAgICogdGhpcyBpcyBlYXNpZXIgdG8gc2V0IGhlcmUgdGhhbiBpbiBhbGwg
dGhlIG1hdGVyaWFscy4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fZW52aXJvbm1lbnRUZXh0dXJlID09PSB2YWx1ZSkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX2Vudmlyb25tZW50VGV4dHVyZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5tYXJrQWxs
TWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIwX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RleHR1cmVEaXJ0eUZsYWcpOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmUucHJvdG90eXBlLCAi
ZW52aXJvbm1lbnRJbnRlbnNpdHkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJbnRlbnNp
dHkgb2YgdGhlIGVudmlyb25tZW50IGluIGFsbCBwYnIgbWF0ZXJpYWwuCisgICAgICAgICAqIFRo
aXMgZGltcyBvciByZWluZm9yY2VzIHRoZSBJQkwgbGlnaHRpbmcgb3ZlcmFsbCAocmVmbGVjdGlv
biBhbmQgZGlmZnVzZSkuCisgICAgICAgICAqIEFzIGluIHRoZSBtYWpvcml0eSBvZiB0aGUgc2Nl
bmUgdGhleSBhcmUgdGhlIHNhbWUgKGV4Y2VwdGlvbiBmb3IgbXVsdGkgcm9vbSBhbmQgc28gb24p
LAorICAgICAgICAgKiB0aGlzIGlzIGVhc2llciB0byByZWZlcmVuY2UgZnJvbSBoZXJlIHRoYW4g
ZnJvbSBhbGwgdGhlIG1hdGVyaWFscy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50SW50ZW5zaXR5Owor
ICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogSW50ZW5zaXR5IG9mIHRoZSBlbnZp
cm9ubWVudCBpbiBhbGwgcGJyIG1hdGVyaWFsLgorICAgICAgICAgKiBUaGlzIGRpbXMgb3IgcmVp
bmZvcmNlcyB0aGUgSUJMIGxpZ2h0aW5nIG92ZXJhbGwgKHJlZmxlY3Rpb24gYW5kIGRpZmZ1c2Up
LgorICAgICAgICAgKiBBcyBpbiB0aGUgbWFqb3JpdHkgb2YgdGhlIHNjZW5lIHRoZXkgYXJlIHRo
ZSBzYW1lIChleGNlcHRpb24gZm9yIG11bHRpIHJvb20gYW5kIHNvIG9uKSwKKyAgICAgICAgICog
dGhpcyBpcyBlYXNpZXIgdG8gc2V0IGhlcmUgdGhhbiBpbiBhbGwgdGhlIG1hdGVyaWFscy4KKyAg
ICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fZW52aXJvbm1lbnRJbnRlbnNpdHkgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZW52aXJvbm1lbnRJ
bnRlbnNpdHkgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMubWFya0FsbE1hdGVyaWFsc0FzRGly
dHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJDb25z
dGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGlydHlGbGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZhdWx0IGltYWdl
IHByb2Nlc3NpbmcgY29uZmlndXJhdGlvbiB1c2VkIGVpdGhlciBpbiB0aGUgcmVuZGVyaW5nCisg
ICAgICAgICAqIEZvcndhcmQgbWFpbiBwYXNzIG9yIHRocm91Z2ggdGhlIGltYWdlUHJvY2Vzc2lu
Z1Bvc3RQcm9jZXNzIGlmIHByZXNlbnQuCisgICAgICAgICAqIEFzIGluIHRoZSBtYWpvcml0eSBv
ZiB0aGUgc2NlbmUgdGhleSBhcmUgdGhlIHNhbWUgKGV4Y2VwdGlvbiBmb3IgbXVsdGkgY2FtZXJh
KSwKKyAgICAgICAgICogdGhpcyBpcyBlYXNpZXIgdG8gcmVmZXJlbmNlIGZyb20gaGVyZSB0aGFu
IGZyb20gYWxsIHRoZSBtYXRlcmlhbHMgYW5kIHBvc3QgcHJvY2Vzcy4KKyAgICAgICAgICoKKyAg
ICAgICAgICogTm8gc2V0dGVyIGFzIHdlIGl0IGlzIGEgc2hhcmVkIGNvbmZpZ3VyYXRpb24sIHlv
dSBjYW4gc2V0IHRoZSB2YWx1ZXMgaW5zdGVhZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0Nv
bmZpZ3VyYXRpb247CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTY2VuZS5wcm90b3R5cGUsICJmb3JjZVdpcmVmcmFtZSIsIHsKKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9yY2VXaXJlZnJhbWU7CisgICAg
ICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGlu
ZGljYXRpbmcgaWYgYWxsIHJlbmRlcmluZyBtdXN0IGJlIGRvbmUgaW4gd2lyZWZyYW1lCisgICAg
ICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYg
KHRoaXMuX2ZvcmNlV2lyZWZyYW1lID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ZvcmNlV2lyZWZyYW1lID0gdmFs
dWU7CisgICAgICAgICAgICB0aGlzLm1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siQ29uc3RhbnRzIl0uTUFURVJJ
QUxfTWlzY0RpcnR5RmxhZyk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShTY2VuZS5wcm90b3R5cGUsICJmb3JjZVBvaW50c0Nsb3VkIiwgeworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JjZVBvaW50c0Ns
b3VkOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIGlmIGFsbCByZW5kZXJpbmcgbXVzdCBiZSBkb25lIGluIHBvaW50
IGNsb3VkCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX2ZvcmNlUG9pbnRzQ2xvdWQgPT09IHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZm9yY2VQ
b2ludHNDbG91ZCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5tYXJrQWxsTWF0ZXJpYWxzQXNE
aXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkNv
bnN0YW50cyJdLk1BVEVSSUFMX01pc2NEaXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmUucHJvdG90eXBlLCAiYW5pbWF0aW9uUHJvcGVy
dGllc092ZXJyaWRlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRo
ZSBhbmltYXRpb24gcHJvcGVydGllcyBvdmVycmlkZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5pbWF0aW9uUHJvcGVy
dGllc092ZXJyaWRlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlID0gdmFsdWU7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90
b3R5cGUsICJvbkRpc3Bvc2UiLCB7CisgICAgICAgIC8qKiBTZXRzIGEgZnVuY3Rpb24gdG8gYmUg
ZXhlY3V0ZWQgd2hlbiB0aGlzIHNjZW5lIGlzIGRpc3Bvc2VkLiAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX29uRGlzcG9zZU9ic2Vy
dmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlLnJlbW92ZSh0
aGlzLl9vbkRpc3Bvc2VPYnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9vbkRpc3Bvc2VPYnNlcnZlciA9IHRoaXMub25EaXNwb3NlT2JzZXJ2YWJsZS5hZGQoY2FsbGJh
Y2spOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmUu
cHJvdG90eXBlLCAiYmVmb3JlUmVuZGVyIiwgeworICAgICAgICAvKiogU2V0cyBhIGZ1bmN0aW9u
IHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSByZW5kZXJpbmcgdGhpcyBzY2VuZSAqLworICAgICAgICBz
ZXQ6IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX29uQmVmb3Jl
UmVuZGVyT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQmVmb3JlUmVuZGVyT2Jz
ZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25CZWZvcmVSZW5kZXJPYnNlcnZlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9v
bkJlZm9yZVJlbmRlck9ic2VydmVyID0gdGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuYWRk
KGNhbGxiYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImFmdGVyUmVuZGVyIiwgeworICAgICAg
ICAvKiogU2V0cyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHJlbmRlcmluZyB0aGlz
IHNjZW5lICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5fb25BZnRlclJlbmRlck9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25BZnRlclJlbmRlck9ic2Vy
dmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAg
ICAgICAgICAgIHRoaXMuX29uQWZ0ZXJSZW5kZXJPYnNlcnZlciA9IHRoaXMub25BZnRlclJlbmRl
ck9ic2VydmFibGUuYWRkKGNhbGxiYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImJlZm9yZUNh
bWVyYVJlbmRlciIsIHsKKyAgICAgICAgLyoqIFNldHMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRl
ZCBiZWZvcmUgcmVuZGVyaW5nIGEgY2FtZXJhKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2Fs
bGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2Vy
dmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2VydmFi
bGUucmVtb3ZlKHRoaXMuX29uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZlciA9IHRo
aXMub25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5cGUsICJh
ZnRlckNhbWVyYVJlbmRlciIsIHsKKyAgICAgICAgLyoqIFNldHMgYSBmdW5jdGlvbiB0byBiZSBl
eGVjdXRlZCBhZnRlciByZW5kZXJpbmcgYSBjYW1lcmEqLworICAgICAgICBzZXQ6IGZ1bmN0aW9u
IChjYWxsYmFjaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX29uQWZ0ZXJDYW1lcmFSZW5kZXJP
YnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMub25BZnRlckNhbWVyYVJlbmRlck9ic2Vy
dmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJDYW1lcmFSZW5kZXJPYnNlcnZlcik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl9vbkFmdGVyQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIgPSB0
aGlzLm9uQWZ0ZXJDYW1lcmFSZW5kZXJPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5cGUsICJ1
blRyYW5zbGF0ZWRQb2ludGVyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUg
cG9pbnRlciBjb29yZGluYXRlcyB3aXRob3V0IGFueSB0cmFuc2xhdGlvbiAoaWUuIHN0cmFpZ2h0
IG91dCBvZiB0aGUgcG9pbnRlciBldmVudCkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0TWFuYWdlci51blRyYW5z
bGF0ZWRQb2ludGVyOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoU2NlbmUsICJEcmFnTW92ZW1lbnRUaHJlc2hvbGQiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIG9yIHNldHMgdGhlIGRpc3RhbmNlIGluIHBpeGVsIHRoYXQgeW91IGhhdmUgdG8g
bW92ZSB0byBwcmV2ZW50IHNvbWUgZXZlbnRzLiBEZWZhdWx0IGlzIDEwIHBpeGVscworICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX0lu
cHV0c19zY2VuZV9pbnB1dE1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19bIklu
cHV0TWFuYWdlciJdLkRyYWdNb3ZlbWVudFRocmVzaG9sZDsKKyAgICAgICAgfSwKKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIF9JbnB1dHNfc2NlbmVfaW5wdXRN
YW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fWyJJbnB1dE1hbmFnZXIiXS5EcmFn
TW92ZW1lbnRUaHJlc2hvbGQgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFNjZW5lLCAiTG9uZ1ByZXNzRGVsYXkiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IHRvIHJhaXNlIGxvbmcgcHJl
c3MgZXZlbnRzIGlmIGJ1dHRvbiBpcyBzdGlsbCBwcmVzc2VkLiBEZWZhdWx0IGlzIDUwMCBtcwor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gX0lucHV0c19zY2VuZV9pbnB1dE1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1
X19bIklucHV0TWFuYWdlciJdLkxvbmdQcmVzc0RlbGF5OworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgX0lucHV0c19zY2VuZV9pbnB1dE1h
bmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19bIklucHV0TWFuYWdlciJdLkxvbmdQ
cmVzc0RlbGF5ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShTY2VuZSwgIkRvdWJsZUNsaWNrRGVsYXkiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IHRvIHJhaXNlIGxvbmcgcHJlc3MgZXZl
bnRzIGlmIGJ1dHRvbiBpcyBzdGlsbCBwcmVzc2VkLiBEZWZhdWx0IGlzIDMwMCBtcworICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX0lu
cHV0c19zY2VuZV9pbnB1dE1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19bIklu
cHV0TWFuYWdlciJdLkRvdWJsZUNsaWNrRGVsYXk7CisgICAgICAgIH0sCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBfSW5wdXRzX3NjZW5lX2lucHV0TWFuYWdl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX1siSW5wdXRNYW5hZ2VyIl0uRG91YmxlQ2xp
Y2tEZWxheSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoU2NlbmUsICJFeGNsdXNpdmVEb3VibGVDbGlja01vZGUiLCB7CisgICAgICAgIC8qKiBJ
ZiB5b3UgbmVlZCB0byBjaGVjayBkb3VibGUgY2xpY2sgd2l0aG91dCByYWlzaW5nIGEgc2luZ2xl
IGNsaWNrIGF0IGZpcnN0IGNsaWNrLCBlbmFibGUgdGhpcyBmbGFnICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9JbnB1dHNfc2NlbmVfaW5wdXRNYW5h
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fWyJJbnB1dE1hbmFnZXIiXS5FeGNsdXNp
dmVEb3VibGVDbGlja01vZGU7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICBfSW5wdXRzX3NjZW5lX2lucHV0TWFuYWdlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjVfX1siSW5wdXRNYW5hZ2VyIl0uRXhjbHVzaXZlRG91YmxlQ2xpY2tN
b2RlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTY2VuZS5wcm90b3R5cGUsICJ1c2VSaWdodEhhbmRlZFN5c3RlbSIsIHsKKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlUmlnaHRIYW5kZWRT
eXN0ZW07CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgb3Igc2V0cyBh
IGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgc2NlbmUgbXVzdCB1c2UgcmlnaHQtaGFuZGVkIGNv
b3JkaW5hdGVzIHN5c3RlbQorICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3VzZVJpZ2h0SGFuZGVkU3lzdGVtID09PSB2YWx1
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX3VzZVJpZ2h0SGFuZGVkU3lzdGVtID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLm1h
cmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjBfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfTWlzY0RpcnR5RmxhZyk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHN0ZXAgSWQgdXNlZCBieSBk
ZXRlcm1pbmlzdGljIGxvY2sgc3RlcAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1pbmlzdGljLWxvY2tzdGVwCisgICAgICog
QHBhcmFtIG5ld1N0ZXBJZCBkZWZpbmVzIHRoZSBzdGVwIElkCisgICAgICovCisgICAgU2NlbmUu
cHJvdG90eXBlLnNldFN0ZXBJZCA9IGZ1bmN0aW9uIChuZXdTdGVwSWQpIHsKKyAgICAgICAgdGhp
cy5fY3VycmVudFN0ZXBJZCA9IG5ld1N0ZXBJZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdl
dHMgdGhlIHN0ZXAgSWQgdXNlZCBieSBkZXRlcm1pbmlzdGljIGxvY2sgc3RlcAorICAgICAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1p
bmlzdGljLWxvY2tzdGVwCisgICAgICogQHJldHVybnMgdGhlIHN0ZXAgSWQKKyAgICAgKi8KKyAg
ICBTY2VuZS5wcm90b3R5cGUuZ2V0U3RlcElkID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fY3VycmVudFN0ZXBJZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhl
IGludGVybmFsIHN0ZXAgdXNlZCBieSBkZXRlcm1pbmlzdGljIGxvY2sgc3RlcAorICAgICAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1p
bmlzdGljLWxvY2tzdGVwCisgICAgICogQHJldHVybnMgdGhlIGludGVybmFsIHN0ZXAKKyAgICAg
Ki8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0SW50ZXJuYWxTdGVwID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudEludGVybmFsU3RlcDsKKyAgICB9OworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5cGUsICJmb2dFbmFibGVkIiwgeworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb2dFbmFi
bGVkOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBi
b29sZWFuIGluZGljYXRpbmcgaWYgZm9nIGlzIGVuYWJsZWQgb24gdGhpcyBzY2VuZQorICAgICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZW52aXJvbm1lbnQj
Zm9nCisgICAgICAgICogKERlZmF1bHQgaXMgdHJ1ZSkKKyAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9mb2dFbmFibGVkID09
PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX2ZvZ0VuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMubWFya0Fs
bE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yMF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9NaXNjRGlydHlGbGFnKTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImZv
Z01vZGUiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2ZvZ01vZGU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMg
b3Igc2V0cyB0aGUgZm9nIG1vZGUgdG8gdXNlCisgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vYmFieWxvbjEwMS9lbnZpcm9ubWVudCNmb2cKKyAgICAgICAgKiB8IG1vZGUg
fCB2YWx1ZSB8CisgICAgICAgICogfCAtLS0gfCAtLS0gfAorICAgICAgICAqIHwgRk9HTU9ERV9O
T05FIHwgMCB8CisgICAgICAgICogfCBGT0dNT0RFX0VYUCB8IDEgfAorICAgICAgICAqIHwgRk9H
TU9ERV9FWFAyIHwgMiB8CisgICAgICAgICogfCBGT0dNT0RFX0xJTkVBUiB8IDMgfAorICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuX2ZvZ01vZGUgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZm9nTW9kZSA9IHZhbHVlOworICAgICAgICAgICAg
dGhpcy5tYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzIwX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX01pc2NEaXJ0eUZsYWcp
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmUucHJv
dG90eXBlLCAic2hhZG93c0VuYWJsZWQiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRvd3NFbmFibGVkOworICAgICAgICB9LAorICAg
ICAgICAvKioKKyAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYg
c2hhZG93cyBhcmUgZW5hYmxlZCBvbiB0aGlzIHNjZW5lCisgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fc2hhZG93c0VuYWJs
ZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5fc2hhZG93c0VuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRo
aXMubWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yMF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9MaWdodERpcnR5RmxhZyk7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90
b3R5cGUsICJsaWdodHNFbmFibGVkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9saWdodHNFbmFibGVkOworICAgICAgICB9LAorICAgICAg
ICAvKioKKyAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgbGln
aHRzIGFyZSBlbmFibGVkIG9uIHRoaXMgc2NlbmUKKyAgICAgICAgKi8KKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9saWdodHNFbmFibGVkID09
PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX2xpZ2h0c0VuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMubWFy
a0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yMF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9MaWdodERpcnR5RmxhZyk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5cGUs
ICJhY3RpdmVDYW1lcmEiLCB7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIGN1cnJlbnQg
YWN0aXZlIGNhbWVyYSAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9hY3RpdmVDYW1lcmE7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX2FjdGl2ZUNh
bWVyYSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX2FjdGl2ZUNhbWVyYSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5vbkFjdGl2
ZUNhbWVyYUNoYW5nZWQubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmUucHJvdG90eXBlLCAiZGVmYXVsdE1hdGVy
aWFsIiwgeworICAgICAgICAvKiogVGhlIGRlZmF1bHQgbWF0ZXJpYWwgdXNlZCBvbiBtZXNoZXMg
d2hlbiBubyBtYXRlcmlhbCBpcyBhZmZlY3RlZCAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fZGVmYXVsdE1hdGVyaWFsKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5fZGVmYXVsdE1hdGVyaWFsID0gU2NlbmUuRGVmYXVsdE1hdGVyaWFsRmFjdG9y
eSh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0
TWF0ZXJpYWw7CisgICAgICAgIH0sCisgICAgICAgIC8qKiBUaGUgZGVmYXVsdCBtYXRlcmlhbCB1
c2VkIG9uIG1lc2hlcyB3aGVuIG5vIG1hdGVyaWFsIGlzIGFmZmVjdGVkICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9kZWZhdWx0TWF0ZXJpYWwg
PSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNj
ZW5lLnByb3RvdHlwZSwgInRleHR1cmVzRW5hYmxlZCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXNFbmFibGVkOworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGlj
YXRpbmcgaWYgdGV4dHVyZXMgYXJlIGVuYWJsZWQgb24gdGhpcyBzY2VuZQorICAgICAgICAqLwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3Rl
eHR1cmVzRW5hYmxlZCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl90ZXh0dXJlc0VuYWJsZWQgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHRoaXMubWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0
dXJlRGlydHlGbGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFNjZW5lLnByb3RvdHlwZSwgInNrZWxldG9uc0VuYWJsZWQiLCB7CisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NrZWxldG9uc0VuYWJsZWQ7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xl
YW4gaW5kaWNhdGluZyBpZiBza2VsZXRvbnMgYXJlIGVuYWJsZWQgb24gdGhpcyBzY2VuZQorICAg
ICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYg
KHRoaXMuX3NrZWxldG9uc0VuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2tlbGV0b25zRW5hYmxlZCA9
IHZhbHVlOworICAgICAgICAgICAgdGhpcy5tYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkNvbnN0YW50cyJdLk1B
VEVSSUFMX0F0dHJpYnV0ZXNEaXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoU2NlbmUucHJvdG90eXBlLCAiY29sbGlzaW9uQ29vcmRpbmF0b3Ii
LCB7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgaWYgKCF0aGlzLl9jb2xsaXNpb25Db29yZGluYXRvcikgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2NvbGxpc2lvbkNvb3JkaW5hdG9yID0gU2NlbmUuQ29sbGlzaW9uQ29vcmRp
bmF0b3JGYWN0b3J5KCk7CisgICAgICAgICAgICAgICAgdGhpcy5fY29sbGlzaW9uQ29vcmRpbmF0
b3IuaW5pdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9j
b2xsaXNpb25Db29yZGluYXRvcjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImZydXN0dW1QbGFuZXMiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGZydXN0dW0gcGxhbmVzIChidWlsdCBmcm9t
IHRoZSBhY3RpdmUgY2FtZXJhKQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJ1c3R1bVBsYW5lczsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSB0cmFuc2llbnQgY29tcG9uZW50
cyBpZiBuZWVkZWQuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLl9yZWdpc3RlclRyYW5z
aWVudENvbXBvbmVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIFJlZ2lzdGVyIGNvbXBv
bmVudHMgdGhhdCBoYXZlIGJlZW4gYXNzb2NpYXRlZCBsYXRlbHkgdG8gdGhlIHNjZW5lLgorICAg
ICAgICBpZiAodGhpcy5fdHJhbnNpZW50Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fdHJhbnNpZW50Q29tcG9uZW50czsgX2kg
PCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gX2Fb
X2ldOworICAgICAgICAgICAgICAgIGNvbXBvbmVudC5yZWdpc3RlcigpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5fdHJhbnNpZW50Q29tcG9uZW50cyA9IFtdOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICogQWRkIGEgY29tcG9uZW50
IHRvIHRoZSBzY2VuZS4KKyAgICAgKiBOb3RlIHRoYXQgdGhlIGNjb21wb25lbnQgY291bGQgYmUg
cmVnaXN0ZXJlZCBvbiB0aCBuZXh0IGZyYW1lIGlmIHRoaXMgaXMgY2FsbGVkIGFmdGVyCisgICAg
ICogdGhlIHJlZ2lzdGVyIGNvbXBvbmVudCBzdGFnZS4KKyAgICAgKiBAcGFyYW0gY29tcG9uZW50
IERlZmluZXMgdGhlIGNvbXBvbmVudCB0byBhZGQgdG8gdGhlIHNjZW5lCisgICAgICovCisgICAg
U2NlbmUucHJvdG90eXBlLl9hZGRDb21wb25lbnQgPSBmdW5jdGlvbiAoY29tcG9uZW50KSB7Cisg
ICAgICAgIHRoaXMuX2NvbXBvbmVudHMucHVzaChjb21wb25lbnQpOworICAgICAgICB0aGlzLl90
cmFuc2llbnRDb21wb25lbnRzLnB1c2goY29tcG9uZW50KTsKKyAgICAgICAgdmFyIHNlcmlhbGl6
YWJsZUNvbXBvbmVudCA9IGNvbXBvbmVudDsKKyAgICAgICAgaWYgKHNlcmlhbGl6YWJsZUNvbXBv
bmVudC5hZGRGcm9tQ29udGFpbmVyICYmIHNlcmlhbGl6YWJsZUNvbXBvbmVudC5zZXJpYWxpemUp
IHsKKyAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6YWJsZUNvbXBvbmVudHMucHVzaChzZXJpYWxp
emFibGVDb21wb25lbnQpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlk
ZGVuCisgICAgICogR2V0cyBhIGNvbXBvbmVudCBmcm9tIHRoZSBzY2VuZS4KKyAgICAgKiBAcGFy
YW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQgdG8gcmV0cmlldmUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY29tcG9uZW50IG9yIG51bGwgaWYgbm90IHByZXNlbnQKKyAgICAg
Ki8KKyAgICBTY2VuZS5wcm90b3R5cGUuX2dldENvbXBvbmVudCA9IGZ1bmN0aW9uIChuYW1lKSB7
CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9jb21wb25lbnRzOyBfaSA8IF9h
Lmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IF9hW19pXTsKKyAg
ICAgICAgICAgIGlmIChjb21wb25lbnQubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgICAg
IHJldHVybiBjb21wb25lbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc3RyaW5nIGlkZW5maWZ5
aW5nIHRoZSBuYW1lIG9mIHRoZSBjbGFzcworICAgICAqIEByZXR1cm5zICJTY2VuZSIgc3RyaW5n
CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICJTY2VuZSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlk
ZGVuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLl9nZXREZWZhdWx0TWVzaENhbmRpZGF0
ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2RlZmF1bHRNZXNoQ2FuZGlkYXRlcy5k
YXRhID0gdGhpcy5tZXNoZXM7CisgICAgICAgIHRoaXMuX2RlZmF1bHRNZXNoQ2FuZGlkYXRlcy5s
ZW5ndGggPSB0aGlzLm1lc2hlcy5sZW5ndGg7CisgICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0
TWVzaENhbmRpZGF0ZXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICov
CisgICAgU2NlbmUucHJvdG90eXBlLl9nZXREZWZhdWx0U3ViTWVzaENhbmRpZGF0ZXMgPSBmdW5j
dGlvbiAobWVzaCkgeworICAgICAgICB0aGlzLl9kZWZhdWx0U3ViTWVzaENhbmRpZGF0ZXMuZGF0
YSA9IG1lc2guc3ViTWVzaGVzOworICAgICAgICB0aGlzLl9kZWZhdWx0U3ViTWVzaENhbmRpZGF0
ZXMubGVuZ3RoID0gbWVzaC5zdWJNZXNoZXMubGVuZ3RoOworICAgICAgICByZXR1cm4gdGhpcy5f
ZGVmYXVsdFN1Yk1lc2hDYW5kaWRhdGVzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0
aGUgZGVmYXVsdCBjYW5kaWRhdGUgcHJvdmlkZXJzIGZvciB0aGUgc2NlbmUuCisgICAgICogVGhp
cyBzZXRzIHRoZSBnZXRBY3RpdmVNZXNoQ2FuZGlkYXRlcywgZ2V0QWN0aXZlU3ViTWVzaENhbmRp
ZGF0ZXMsIGdldEludGVyc2VjdGluZ1N1Yk1lc2hDYW5kaWRhdGVzCisgICAgICogYW5kIGdldENv
bGxpZGluZ1N1Yk1lc2hDYW5kaWRhdGVzIHRvIHRoZWlyIGRlZmF1bHQgZnVuY3Rpb24KKyAgICAg
Ki8KKyAgICBTY2VuZS5wcm90b3R5cGUuc2V0RGVmYXVsdENhbmRpZGF0ZVByb3ZpZGVycyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5nZXRBY3RpdmVNZXNoQ2FuZGlkYXRlcyA9IHRoaXMu
X2dldERlZmF1bHRNZXNoQ2FuZGlkYXRlcy5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLmdldEFj
dGl2ZVN1Yk1lc2hDYW5kaWRhdGVzID0gdGhpcy5fZ2V0RGVmYXVsdFN1Yk1lc2hDYW5kaWRhdGVz
LmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuZ2V0SW50ZXJzZWN0aW5nU3ViTWVzaENhbmRpZGF0
ZXMgPSB0aGlzLl9nZXREZWZhdWx0U3ViTWVzaENhbmRpZGF0ZXMuYmluZCh0aGlzKTsKKyAgICAg
ICAgdGhpcy5nZXRDb2xsaWRpbmdTdWJNZXNoQ2FuZGlkYXRlcyA9IHRoaXMuX2dldERlZmF1bHRT
dWJNZXNoQ2FuZGlkYXRlcy5iaW5kKHRoaXMpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgIm1lc2hVbmRlclBvaW50ZXIiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIHRoZSBtZXNoIHRoYXQgaXMgY3VycmVudGx5IHVuZGVyIHRoZSBw
b2ludGVyCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9pbnB1dE1hbmFnZXIubWVzaFVuZGVyUG9pbnRlcjsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgInBv
aW50ZXJYIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBjdXJy
ZW50IG9uLXNjcmVlbiBYIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dE1h
bmFnZXIucG9pbnRlclg7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9pbnB1dE1hbmFnZXIucG9pbnRlclggPSB2YWx1ZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlw
ZSwgInBvaW50ZXJZIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRo
ZSBjdXJyZW50IG9uLXNjcmVlbiBZIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9p
bnB1dE1hbmFnZXIucG9pbnRlclk7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pbnB1dE1hbmFnZXIucG9pbnRlclkgPSB2YWx1
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY2FjaGVkIG1h
dGVyaWFsIChpZS4gdGhlIGxhdGVzdCByZW5kZXJlZCBvbmUpCisgICAgICogQHJldHVybnMgdGhl
IGNhY2hlZCBtYXRlcmlhbAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRDYWNoZWRN
YXRlcmlhbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZE1hdGVy
aWFsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY2FjaGVkIGVmZmVjdCAoaWUu
IHRoZSBsYXRlc3QgcmVuZGVyZWQgb25lKQorICAgICAqIEByZXR1cm5zIHRoZSBjYWNoZWQgZWZm
ZWN0CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldENhY2hlZEVmZmVjdCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZEVmZmVjdDsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldHMgdGhlIGNhY2hlZCB2aXNpYmlsaXR5IHN0YXRlIChpZS4gdGhlIGxh
dGVzdCByZW5kZXJlZCBvbmUpCisgICAgICogQHJldHVybnMgdGhlIGNhY2hlZCB2aXNpYmlsaXR5
IHN0YXRlCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldENhY2hlZFZpc2liaWxpdHkg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5Owor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUg
Y3VycmVudCBtYXRlcmlhbCAvIGVmZmVjdCAvIHZpc2liaWxpdHkgbXVzdCBiZSBiaW5kIGFnYWlu
CisgICAgICogQHBhcmFtIG1hdGVyaWFsIGRlZmluZXMgdGhlIGN1cnJlbnQgbWF0ZXJpYWwKKyAg
ICAgKiBAcGFyYW0gZWZmZWN0IGRlZmluZXMgdGhlIGN1cnJlbnQgZWZmZWN0CisgICAgICogQHBh
cmFtIHZpc2liaWxpdHkgZGVmaW5lcyB0aGUgY3VycmVudCB2aXNpYmlsaXR5IHN0YXRlCisgICAg
ICogQHJldHVybnMgdHJ1ZSBpZiBvbmUgcGFyYW1ldGVyIGlzIG5vdCBjYWNoZWQKKyAgICAgKi8K
KyAgICBTY2VuZS5wcm90b3R5cGUuaXNDYWNoZWRNYXRlcmlhbEludmFsaWQgPSBmdW5jdGlvbiAo
bWF0ZXJpYWwsIGVmZmVjdCwgdmlzaWJpbGl0eSkgeworICAgICAgICBpZiAodmlzaWJpbGl0eSA9
PT0gdm9pZCAwKSB7IHZpc2liaWxpdHkgPSAxOyB9CisgICAgICAgIHJldHVybiB0aGlzLl9jYWNo
ZWRFZmZlY3QgIT09IGVmZmVjdCB8fCB0aGlzLl9jYWNoZWRNYXRlcmlhbCAhPT0gbWF0ZXJpYWwg
fHwgdGhpcy5fY2FjaGVkVmlzaWJpbGl0eSAhPT0gdmlzaWJpbGl0eTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEdldHMgdGhlIGVuZ2luZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNjZW5lCisgICAg
ICogQHJldHVybnMgYW4gRW5naW5lCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldEVu
Z2luZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuZ2luZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlcyByZW5k
ZXJlZCBwZXIgZnJhbWUKKyAgICAgKiBAcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIHZlcnRp
Y2VzIHJlbmRlcmVkIHBlciBmcmFtZQorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRU
b3RhbFZlcnRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdG90YWxW
ZXJ0aWNlcy5jdXJyZW50OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5l
LnByb3RvdHlwZSwgInRvdGFsVmVydGljZXNQZXJmQ291bnRlciIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgZm9yIHRvdGFsIHZlcnRpY2Vz
CisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9vcHRpbWl6
aW5nX3lvdXJfc2NlbmUjaW5zdHJ1bWVudGF0aW9uCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90b3RhbFZlcnRpY2VzOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0b3RhbCBudW1iZXIg
b2YgYWN0aXZlIGluZGljZXMgcmVuZGVyZWQgcGVyIGZyYW1lIChZb3UgY2FuIGRlZHVjZSB0aGUg
bnVtYmVyIG9mIHJlbmRlcmVkIHRyaWFuZ2xlcyBieSBkaXZpZGluZyB0aGlzIG51bWJlciBieSAz
KQorICAgICAqIEByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYWN0aXZlIGluZGljZXMgcmVu
ZGVyZWQgcGVyIGZyYW1lCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldEFjdGl2ZUlu
ZGljZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVJbmRpY2Vz
LmN1cnJlbnQ7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmUucHJvdG90
eXBlLCAidG90YWxBY3RpdmVJbmRpY2VzUGVyZkNvdW50ZXIiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIGZvciBhY3RpdmUgaW5kaWNlcwor
ICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vb3B0aW1pemlu
Z195b3VyX3NjZW5lI2luc3RydW1lbnRhdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlSW5kaWNlczsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdG90YWwgbnVtYmVyIG9m
IGFjdGl2ZSBwYXJ0aWNsZXMgcmVuZGVyZWQgcGVyIGZyYW1lCisgICAgICogQHJldHVybnMgdGhl
IHRvdGFsIG51bWJlciBvZiBhY3RpdmUgcGFydGljbGVzIHJlbmRlcmVkIHBlciBmcmFtZQorICAg
ICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRBY3RpdmVQYXJ0aWNsZXMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYXJ0aWNsZXMuY3VycmVudDsKKyAgICB9
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5cGUsICJhY3RpdmVQYXJ0
aWNsZXNQZXJmQ291bnRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBl
cmZvcm1hbmNlIGNvdW50ZXIgZm9yIGFjdGl2ZSBwYXJ0aWNsZXMKKyAgICAgICAgICogQHNlZSBo
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL29wdGltaXppbmdfeW91cl9zY2VuZSNpbnN0
cnVtZW50YXRpb24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhcnRpY2xlczsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdG90YWwgbnVtYmVyIG9mIGFjdGl2ZSBib25lcyBy
ZW5kZXJlZCBwZXIgZnJhbWUKKyAgICAgKiBAcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGFj
dGl2ZSBib25lcyByZW5kZXJlZCBwZXIgZnJhbWUKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5
cGUuZ2V0QWN0aXZlQm9uZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9h
Y3RpdmVCb25lcy5jdXJyZW50OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNj
ZW5lLnByb3RvdHlwZSwgImFjdGl2ZUJvbmVzUGVyZkNvdW50ZXIiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIGZvciBhY3RpdmUgYm9uZXMK
KyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL29wdGltaXpp
bmdfeW91cl9zY2VuZSNpbnN0cnVtZW50YXRpb24KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUJvbmVzOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBhcnJheSBvZiBhY3RpdmUg
bWVzaGVzCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgQWJzdHJhY3RNZXNoCisgICAgICov
CisgICAgU2NlbmUucHJvdG90eXBlLmdldEFjdGl2ZU1lc2hlcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU1lc2hlczsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEdldHMgdGhlIGFuaW1hdGlvbiByYXRpbyAod2hpY2ggaXMgMS4wIGlzIHRoZSBzY2VuZSByZW5k
ZXJzIGF0IDYwZnBzIGFuZCAyIGlmIHRoZSBzY2VuZSByZW5kZXJzIGF0IDMwZnBzLCBldGMuKQor
ICAgICAqIEByZXR1cm5zIGEgbnVtYmVyCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdl
dEFuaW1hdGlvblJhdGlvID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYW5p
bWF0aW9uUmF0aW8gIT09IHVuZGVmaW5lZCA/IHRoaXMuX2FuaW1hdGlvblJhdGlvIDogMTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgYW4gdW5pcXVlIElkIGZvciB0aGUgY3VycmVudCBy
ZW5kZXIgcGhhc2UKKyAgICAgKiBAcmV0dXJucyBhIG51bWJlcgorICAgICAqLworICAgIFNjZW5l
LnByb3RvdHlwZS5nZXRSZW5kZXJJZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX3JlbmRlcklkOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhbiB1bmlxdWUgSWQg
Zm9yIHRoZSBjdXJyZW50IGZyYW1lCisgICAgICogQHJldHVybnMgYSBudW1iZXIKKyAgICAgKi8K
KyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0RnJhbWVJZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2ZyYW1lSWQ7CisgICAgfTsKKyAgICAvKiogQ2FsbCB0aGlzIGZ1bmN0aW9u
IGlmIHlvdSB3YW50IHRvIG1hbnVhbGx5IGluY3JlbWVudCB0aGUgcmVuZGVyIElkKi8KKyAgICBT
Y2VuZS5wcm90b3R5cGUuaW5jcmVtZW50UmVuZGVySWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX3JlbmRlcklkKys7CisgICAgfTsKKyAgICBTY2VuZS5wcm90b3R5cGUuX2NyZWF0ZVVi
byA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fc2NlbmVVYm8gPSBuZXcgX01hdGVyaWFs
c191bmlmb3JtQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJVbmlmb3JtQnVm
ZmVyIl0odGhpcy5fZW5naW5lLCB1bmRlZmluZWQsIHRydWUpOworICAgICAgICB0aGlzLl9zY2Vu
ZVViby5hZGRVbmlmb3JtKCJ2aWV3UHJvamVjdGlvbiIsIDE2KTsKKyAgICAgICAgdGhpcy5fc2Nl
bmVVYm8uYWRkVW5pZm9ybSgidmlldyIsIDE2KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVz
ZSB0aGlzIG1ldGhvZCB0byBzaW11bGF0ZSBhIHBvaW50ZXIgbW92ZSBvbiBhIG1lc2gKKyAgICAg
KiBUaGUgcGlja1Jlc3VsdCBwYXJhbWV0ZXIgY2FuIGJlIG9idGFpbmVkIGZyb20gYSBzY2VuZS5w
aWNrIG9yIHNjZW5lLnBpY2tXaXRoUmF5CisgICAgICogQHBhcmFtIHBpY2tSZXN1bHQgcGlja2lu
Z0luZm8gb2YgdGhlIG9iamVjdCB3aXNoZWQgdG8gc2ltdWxhdGUgcG9pbnRlciBldmVudCBvbgor
ICAgICAqIEBwYXJhbSBwb2ludGVyRXZlbnRJbml0IHBvaW50ZXIgZXZlbnQgc3RhdGUgdG8gYmUg
dXNlZCB3aGVuIHNpbXVsYXRpbmcgdGhlIHBvaW50ZXIgZXZlbnQgKGVnLiBwb2ludGVyIGlkIGZv
ciBtdWx0aXRvdWNoKQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHNjZW5lCisgICAgICov
CisgICAgU2NlbmUucHJvdG90eXBlLnNpbXVsYXRlUG9pbnRlck1vdmUgPSBmdW5jdGlvbiAocGlj
a1Jlc3VsdCwgcG9pbnRlckV2ZW50SW5pdCkgeworICAgICAgICB0aGlzLl9pbnB1dE1hbmFnZXIu
c2ltdWxhdGVQb2ludGVyTW92ZShwaWNrUmVzdWx0LCBwb2ludGVyRXZlbnRJbml0KTsKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVc2UgdGhpcyBtZXRob2Qg
dG8gc2ltdWxhdGUgYSBwb2ludGVyIGRvd24gb24gYSBtZXNoCisgICAgICogVGhlIHBpY2tSZXN1
bHQgcGFyYW1ldGVyIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGEgc2NlbmUucGljayBvciBzY2VuZS5w
aWNrV2l0aFJheQorICAgICAqIEBwYXJhbSBwaWNrUmVzdWx0IHBpY2tpbmdJbmZvIG9mIHRoZSBv
YmplY3Qgd2lzaGVkIHRvIHNpbXVsYXRlIHBvaW50ZXIgZXZlbnQgb24KKyAgICAgKiBAcGFyYW0g
cG9pbnRlckV2ZW50SW5pdCBwb2ludGVyIGV2ZW50IHN0YXRlIHRvIGJlIHVzZWQgd2hlbiBzaW11
bGF0aW5nIHRoZSBwb2ludGVyIGV2ZW50IChlZy4gcG9pbnRlciBpZCBmb3IgbXVsdGl0b3VjaCkK
KyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBzY2VuZQorICAgICAqLworICAgIFNjZW5lLnBy
b3RvdHlwZS5zaW11bGF0ZVBvaW50ZXJEb3duID0gZnVuY3Rpb24gKHBpY2tSZXN1bHQsIHBvaW50
ZXJFdmVudEluaXQpIHsKKyAgICAgICAgdGhpcy5faW5wdXRNYW5hZ2VyLnNpbXVsYXRlUG9pbnRl
ckRvd24ocGlja1Jlc3VsdCwgcG9pbnRlckV2ZW50SW5pdCk7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNpbXVsYXRlIGEg
cG9pbnRlciB1cCBvbiBhIG1lc2gKKyAgICAgKiBUaGUgcGlja1Jlc3VsdCBwYXJhbWV0ZXIgY2Fu
IGJlIG9idGFpbmVkIGZyb20gYSBzY2VuZS5waWNrIG9yIHNjZW5lLnBpY2tXaXRoUmF5CisgICAg
ICogQHBhcmFtIHBpY2tSZXN1bHQgcGlja2luZ0luZm8gb2YgdGhlIG9iamVjdCB3aXNoZWQgdG8g
c2ltdWxhdGUgcG9pbnRlciBldmVudCBvbgorICAgICAqIEBwYXJhbSBwb2ludGVyRXZlbnRJbml0
IHBvaW50ZXIgZXZlbnQgc3RhdGUgdG8gYmUgdXNlZCB3aGVuIHNpbXVsYXRpbmcgdGhlIHBvaW50
ZXIgZXZlbnQgKGVnLiBwb2ludGVyIGlkIGZvciBtdWx0aXRvdWNoKQorICAgICAqIEBwYXJhbSBk
b3VibGVUYXAgaW5kaWNhdGVzIHRoYXQgdGhlIHBvaW50ZXIgdXAgZXZlbnQgc2hvdWxkIGJlIGNv
bnNpZGVyZWQgYXMgcGFydCBvZiBhIGRvdWJsZSBjbGljayAoZmFsc2UgYnkgZGVmYXVsdCkKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBzY2VuZQorICAgICAqLworICAgIFNjZW5lLnByb3Rv
dHlwZS5zaW11bGF0ZVBvaW50ZXJVcCA9IGZ1bmN0aW9uIChwaWNrUmVzdWx0LCBwb2ludGVyRXZl
bnRJbml0LCBkb3VibGVUYXApIHsKKyAgICAgICAgdGhpcy5faW5wdXRNYW5hZ2VyLnNpbXVsYXRl
UG9pbnRlclVwKHBpY2tSZXN1bHQsIHBvaW50ZXJFdmVudEluaXQsIGRvdWJsZVRhcCk7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGJvb2xlYW4g
aW5kaWNhdGluZyBpZiB0aGUgY3VycmVudCBwb2ludGVyIGV2ZW50IGlzIGNhcHR1cmVkIChtZWFu
aW5nIHRoYXQgdGhlIHNjZW5lIGhhcyBhbHJlYWR5IGhhbmRsZWQgdGhlIHBvaW50ZXIgZG93bikK
KyAgICAgKiBAcGFyYW0gcG9pbnRlcklkIGRlZmluZXMgdGhlIHBvaW50ZXIgaWQgdG8gdXNlIGlu
IGEgbXVsdGktdG91Y2ggc2NlbmFyaW8gKDAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcmV0dXJucyB0
cnVlIGlmIHRoZSBwb2ludGVyIHdhcyBjYXB0dXJlZAorICAgICAqLworICAgIFNjZW5lLnByb3Rv
dHlwZS5pc1BvaW50ZXJDYXB0dXJlZCA9IGZ1bmN0aW9uIChwb2ludGVySWQpIHsKKyAgICAgICAg
aWYgKHBvaW50ZXJJZCA9PT0gdm9pZCAwKSB7IHBvaW50ZXJJZCA9IDA7IH0KKyAgICAgICAgcmV0
dXJuIHRoaXMuX2lucHV0TWFuYWdlci5pc1BvaW50ZXJDYXB0dXJlZChwb2ludGVySWQpOworICAg
IH07CisgICAgLyoqCisgICAgKiBBdHRhY2ggZXZlbnRzIHRvIHRoZSBjYW52YXMgKFRvIGhhbmRs
ZSBhY3Rpb25NYW5hZ2VycyB0cmlnZ2VycyBhbmQgcmFpc2Ugb25Qb2ludGVyTW92ZSwgb25Qb2lu
dGVyRG93biBhbmQgb25Qb2ludGVyVXAKKyAgICAqIEBwYXJhbSBhdHRhY2hVcCBkZWZpbmVzIGlm
IHlvdSB3YW50IHRvIGF0dGFjaCBldmVudHMgdG8gcG9pbnRlcnVwCisgICAgKiBAcGFyYW0gYXR0
YWNoRG93biBkZWZpbmVzIGlmIHlvdSB3YW50IHRvIGF0dGFjaCBldmVudHMgdG8gcG9pbnRlcmRv
d24KKyAgICAqIEBwYXJhbSBhdHRhY2hNb3ZlIGRlZmluZXMgaWYgeW91IHdhbnQgdG8gYXR0YWNo
IGV2ZW50cyB0byBwb2ludGVybW92ZQorICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmF0dGFj
aENvbnRyb2wgPSBmdW5jdGlvbiAoYXR0YWNoVXAsIGF0dGFjaERvd24sIGF0dGFjaE1vdmUpIHsK
KyAgICAgICAgaWYgKGF0dGFjaFVwID09PSB2b2lkIDApIHsgYXR0YWNoVXAgPSB0cnVlOyB9Cisg
ICAgICAgIGlmIChhdHRhY2hEb3duID09PSB2b2lkIDApIHsgYXR0YWNoRG93biA9IHRydWU7IH0K
KyAgICAgICAgaWYgKGF0dGFjaE1vdmUgPT09IHZvaWQgMCkgeyBhdHRhY2hNb3ZlID0gdHJ1ZTsg
fQorICAgICAgICB0aGlzLl9pbnB1dE1hbmFnZXIuYXR0YWNoQ29udHJvbChhdHRhY2hVcCwgYXR0
YWNoRG93biwgYXR0YWNoTW92ZSk7CisgICAgfTsKKyAgICAvKiogRGV0YWNoZXMgYWxsIGV2ZW50
IGhhbmRsZXJzKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5faW5wdXRNYW5hZ2VyLmRldGFjaENvbnRyb2woKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBpZiB0aGUgc2NlbmUg
Y2FuIGJlIHJlbmRlcmVkICh0ZXh0dXJlcyBhcmUgbG9hZGVkLCBzaGFkZXJzIGFyZSBjb21waWxl
ZCkKKyAgICAgKiBEZWxheSBsb2FkZWQgcmVzb3VyY2VzIGFyZSBub3QgdGFraW5nIGluIGFjY291
bnQKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgYWxsIHJlcXVpcmVkIHJlc291cmNlcyBhcmUgcmVh
ZHkKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMuX2lzRGlzcG9zZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIHZhciBlbmdpbmUgPSB0
aGlzLmdldEVuZ2luZSgpOworICAgICAgICAvLyBFZmZlY3RzCisgICAgICAgIGlmICghZW5naW5l
LmFyZUFsbEVmZmVjdHNSZWFkeSgpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gUGVuZGluZyBkYXRhCisgICAgICAgIGlmICh0aGlzLl9wZW5kaW5n
RGF0YS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgLy8gTWVzaGVzCisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRoaXMu
bWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLm1l
c2hlc1tpbmRleF07CisgICAgICAgICAgICBpZiAoIW1lc2guaXNFbmFibGVkKCkpIHsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbWVz
aC5zdWJNZXNoZXMgfHwgbWVzaC5zdWJNZXNoZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1lc2guaXNS
ZWFkeSh0cnVlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZyA9IG1lc2guZ2V0
Q2xhc3NOYW1lKCkgPT09ICJJbnN0YW5jZWRNZXNoIiB8fCBtZXNoLmdldENsYXNzTmFtZSgpID09
PSAiSW5zdGFuY2VkTGluZXNNZXNoIiB8fCBlbmdpbmUuZ2V0Q2FwcygpLmluc3RhbmNlZEFycmF5
cyAmJiBtZXNoLmluc3RhbmNlcy5sZW5ndGggPiAwOworICAgICAgICAgICAgLy8gSXMgUmVhZHkg
Rm9yIE1lc2gKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9pc1JlYWR5
Rm9yTWVzaFN0YWdlOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZh
ciBzdGVwID0gX2FbX2ldOworICAgICAgICAgICAgICAgIGlmICghc3RlcC5hY3Rpb24obWVzaCwg
aGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgLy8gR2VvbWV0cmllcworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0aGlz
Lmdlb21ldHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgZ2VvbWV0cnkg
PSB0aGlzLmdlb21ldHJpZXNbaW5kZXhdOworICAgICAgICAgICAgaWYgKGdlb21ldHJ5LmRlbGF5
TG9hZFN0YXRlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIwX19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNUQVRFX0xPQURJTkcpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8g
UG9zdC1wcm9jZXNzZXMKKyAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FtZXJhcyAmJiB0aGlzLmFj
dGl2ZUNhbWVyYXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBf
YyA9IHRoaXMuYWN0aXZlQ2FtZXJhczsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHsKKyAgICAgICAg
ICAgICAgICB2YXIgY2FtZXJhID0gX2NbX2JdOworICAgICAgICAgICAgICAgIGlmICghY2FtZXJh
LmlzUmVhZHkodHJ1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
ICh0aGlzLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZUNhbWVy
YS5pc1JlYWR5KHRydWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFBhcnRpY2xlcworICAgICAgICBmb3IgKHZh
ciBfZCA9IDAsIF9lID0gdGhpcy5wYXJ0aWNsZVN5c3RlbXM7IF9kIDwgX2UubGVuZ3RoOyBfZCsr
KSB7CisgICAgICAgICAgICB2YXIgcGFydGljbGVTeXN0ZW0gPSBfZVtfZF07CisgICAgICAgICAg
ICBpZiAoIXBhcnRpY2xlU3lzdGVtLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9OworICAgIC8qKiBSZXNldHMgYWxsIGNhY2hlZCBpbmZvcm1hdGlvbiByZWxhdGl2ZSB0
byBtYXRlcmlhbCAoaW5jbHVkaW5nIGVmZmVjdCBhbmQgdmlzaWJpbGl0eSkgKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUucmVzZXRDYWNoZWRNYXRlcmlhbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dGhpcy5fY2FjaGVkTWF0ZXJpYWwgPSBudWxsOworICAgICAgICB0aGlzLl9jYWNoZWRFZmZlY3Qg
PSBudWxsOworICAgICAgICB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5ID0gbnVsbDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBiZWZvcmUg
ZXZlcnkgZnJhbWUgcmVuZGVyCisgICAgICogQHBhcmFtIGZ1bmMgZGVmaW5lcyB0aGUgZnVuY3Rp
b24gdG8gcmVnaXN0ZXIKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUucmVnaXN0ZXJCZWZv
cmVSZW5kZXIgPSBmdW5jdGlvbiAoZnVuYykgeworICAgICAgICB0aGlzLm9uQmVmb3JlUmVuZGVy
T2JzZXJ2YWJsZS5hZGQoZnVuYyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVbnJlZ2lzdGVy
cyBhIGZ1bmN0aW9uIGNhbGxlZCBiZWZvcmUgZXZlcnkgZnJhbWUgcmVuZGVyCisgICAgICogQHBh
cmFtIGZ1bmMgZGVmaW5lcyB0aGUgZnVuY3Rpb24gdG8gdW5yZWdpc3RlcgorICAgICAqLworICAg
IFNjZW5lLnByb3RvdHlwZS51bnJlZ2lzdGVyQmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKGZ1bmMp
IHsKKyAgICAgICAgdGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUucmVtb3ZlQ2FsbGJhY2so
ZnVuYyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0byBi
ZSBjYWxsZWQgYWZ0ZXIgZXZlcnkgZnJhbWUgcmVuZGVyCisgICAgICogQHBhcmFtIGZ1bmMgZGVm
aW5lcyB0aGUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5
cGUucmVnaXN0ZXJBZnRlclJlbmRlciA9IGZ1bmN0aW9uIChmdW5jKSB7CisgICAgICAgIHRoaXMu
b25BZnRlclJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmMpOworICAgIH07CisgICAgLyoqCisgICAg
ICogVW5yZWdpc3RlcnMgYSBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgZXZlcnkgZnJhbWUgcmVuZGVy
CisgICAgICogQHBhcmFtIGZ1bmMgZGVmaW5lcyB0aGUgZnVuY3Rpb24gdG8gdW5yZWdpc3Rlcgor
ICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS51bnJlZ2lzdGVyQWZ0ZXJSZW5kZXIgPSBmdW5j
dGlvbiAoZnVuYykgeworICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLnJlbW92
ZUNhbGxiYWNrKGZ1bmMpOworICAgIH07CisgICAgU2NlbmUucHJvdG90eXBlLl9leGVjdXRlT25j
ZUJlZm9yZVJlbmRlciA9IGZ1bmN0aW9uIChmdW5jKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRo
aXM7CisgICAgICAgIHZhciBleGVjRnVuYyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGZ1
bmMoKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgIF90aGlzLnVucmVnaXN0ZXJCZWZvcmVSZW5kZXIoZXhlY0Z1bmMpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMucmVnaXN0ZXJCZWZvcmVSZW5kZXIoZXhlY0Z1
bmMpOworICAgIH07CisgICAgLyoqCisgICAgICogVGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHdpbGwg
cnVuIGJlZm9yZSByZW5kZXIgb25jZSBhbmQgd2lsbCBiZSBkaXNwb3NlZCBhZnRlcndhcmRzLgor
ICAgICAqIEEgdGltZW91dCBkZWxheSBjYW4gYmUgcHJvdmlkZWQgc28gdGhhdCB0aGUgZnVuY3Rp
b24gd2lsbCBiZSBleGVjdXRlZCBpbiBOIG1zLgorICAgICAqIFRoZSB0aW1lb3V0IGlzIHVzaW5n
IHRoZSBicm93c2VyJ3MgbmF0aXZlIHNldFRpbWVvdXQgc28gdGltZSBwZXJjaXNpb24gY2Fubm90
IGJlIGd1YXJhbnRlZWQuCisgICAgICogQHBhcmFtIGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGJlIGV4
ZWN1dGVkLgorICAgICAqIEBwYXJhbSB0aW1lb3V0IG9wdGlvbmFsIGRlbGF5IGluIG1zCisgICAg
ICovCisgICAgU2NlbmUucHJvdG90eXBlLmV4ZWN1dGVPbmNlQmVmb3JlUmVuZGVyID0gZnVuY3Rp
b24gKGZ1bmMsIHRpbWVvdXQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
aWYgKHRpbWVvdXQgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgc2V0VGltZW91dChmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2V4ZWN1dGVPbmNlQmVmb3JlUmVuZGVy
KGZ1bmMpOworICAgICAgICAgICAgfSwgdGltZW91dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICB0aGlzLl9leGVjdXRlT25jZUJlZm9yZVJlbmRlcihmdW5jKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTY2VuZS5wcm90b3R5cGUu
X2FkZFBlbmRpbmdEYXRhID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdGhpcy5fcGVuZGlu
Z0RhdGEucHVzaChkYXRhKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgU2NlbmUu
cHJvdG90eXBlLl9yZW1vdmVQZW5kaW5nRGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAg
IHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7CisgICAgICAgIHZhciBpbmRleCA9IHRo
aXMuX3BlbmRpbmdEYXRhLmluZGV4T2YoZGF0YSk7CisgICAgICAgIGlmIChpbmRleCAhPT0gLTEp
IHsKKyAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdEYXRhLnNwbGljZShpbmRleCwgMSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHdhc0xvYWRpbmcgJiYgIXRoaXMuaXNMb2FkaW5nKSB7CisgICAg
ICAgICAgICB0aGlzLm9uRGF0YUxvYWRlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMp
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIg
b2YgaXRlbXMgd2FpdGluZyB0byBiZSBsb2FkZWQKKyAgICAgKiBAcmV0dXJucyB0aGUgbnVtYmVy
IG9mIGl0ZW1zIHdhaXRpbmcgdG8gYmUgbG9hZGVkCisgICAgICovCisgICAgU2NlbmUucHJvdG90
eXBlLmdldFdhaXRpbmdJdGVtc0NvdW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5fcGVuZGluZ0RhdGEubGVuZ3RoOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFNjZW5lLnByb3RvdHlwZSwgImlzTG9hZGluZyIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHNjZW5lIGlzIHN0aWxsIGxv
YWRpbmcgZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0RhdGEubGVuZ3RoID4gMDsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0
ZWQgd2hlbiB0aGUgc2NlbmUgaXMgcmVhZHkKKyAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5j
IC0gdGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkCisgICAgICovCisgICAgU2NlbmUucHJvdG90
eXBlLmV4ZWN1dGVXaGVuUmVhZHkgPSBmdW5jdGlvbiAoZnVuYykgeworICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICB0aGlzLm9uUmVhZHlPYnNlcnZhYmxlLmFkZChmdW5jKTsKKyAg
ICAgICAgaWYgKHRoaXMuX2V4ZWN1dGVXaGVuUmVhZHlUaW1lb3V0SWQgIT09IC0xKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZXhlY3V0ZVdoZW5SZWFk
eVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMu
X2NoZWNrSXNSZWFkeSgpOworICAgICAgICB9LCAxNTApOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzY2VuZSBpcyByZWFk
eQorICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNjZW5l
IGlzIHJlYWR5CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLndoZW5SZWFkeUFzeW5jID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICByZXR1cm4g
bmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsKKyAgICAgICAgICAgIF90aGlzLmV4ZWN1
dGVXaGVuUmVhZHkoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgU2NlbmUucHJvdG90eXBlLl9jaGVja0lzUmVhZHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMuX3JlZ2lzdGVyVHJhbnNpZW50Q29tcG9u
ZW50cygpOworICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgIHRoaXMu
b25SZWFkeU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICAgICAgdGhp
cy5vblJlYWR5T2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICAgICAgdGhpcy5fZXhlY3V0ZVdo
ZW5SZWFkeVRpbWVvdXRJZCA9IC0xOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9pc0Rpc3Bvc2VkKSB7CisgICAgICAgICAgICB0aGlzLm9uUmVhZHlP
YnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgICAgICB0aGlzLl9leGVjdXRlV2hlblJlYWR5VGlt
ZW91dElkID0gLTE7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZXhlY3V0ZVdoZW5SZWFkeVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgX3RoaXMuX2NoZWNrSXNSZWFkeSgpOworICAgICAgICB9LCAxNTApOworICAg
IH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImFuaW1hdGFi
bGVzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhbGwgYW5pbWF0YWJsZSBhdHRh
Y2hlZCB0byB0aGUgc2NlbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUFuaW1hdGFibGVzOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXNldHMgdGhlIGxhc3QgYW5pbWF0aW9uIHRpbWUg
ZnJhbWUuCisgICAgICogVXNlZnVsIHRvIG92ZXJyaWRlIHdoZW4gYW5pbWF0aW9ucyBzdGFydCBy
dW5uaW5nIHdoZW4gbG9hZGluZyBhIHNjZW5lIGZvciB0aGUgZmlyc3QgdGltZS4KKyAgICAgKi8K
KyAgICBTY2VuZS5wcm90b3R5cGUucmVzZXRMYXN0QW5pbWF0aW9uVGltZUZyYW1lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB0aGlzLl9hbmltYXRpb25UaW1lTGFzdCA9IF9NaXNjX3ByZWNpc2lv
bkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUHJlY2lzaW9uRGF0ZSJdLk5vdzsK
KyAgICB9OworICAgIC8vIE1hdHJpeAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQg
dmlldyBtYXRyaXgKKyAgICAgKiBAcmV0dXJucyBhIE1hdHJpeAorICAgICAqLworICAgIFNjZW5l
LnByb3RvdHlwZS5nZXRWaWV3TWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5fdmlld01hdHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJl
bnQgcHJvamVjdGlvbiBtYXRyaXgKKyAgICAgKiBAcmV0dXJucyBhIE1hdHJpeAorICAgICAqLwor
ICAgIFNjZW5lLnByb3RvdHlwZS5nZXRQcm9qZWN0aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbk1hdHJpeDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEdldHMgdGhlIGN1cnJlbnQgdHJhbnNmb3JtIG1hdHJpeAorICAgICAqIEByZXR1cm5z
IGEgTWF0cml4IG1hZGUgb2YgVmlldyAqIFByb2plY3Rpb24KKyAgICAgKi8KKyAgICBTY2VuZS5w
cm90b3R5cGUuZ2V0VHJhbnNmb3JtTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fdHJhbnNmb3JtTWF0cml4OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0
aGUgY3VycmVudCB0cmFuc2Zvcm0gbWF0cml4CisgICAgICogQHBhcmFtIHZpZXdMIGRlZmluZXMg
dGhlIFZpZXcgbWF0cml4IHRvIHVzZQorICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uTCBkZWZpbmVz
IHRoZSBQcm9qZWN0aW9uIG1hdHJpeCB0byB1c2UKKyAgICAgKiBAcGFyYW0gdmlld1IgZGVmaW5l
cyB0aGUgcmlnaHQgVmlldyBtYXRyaXggdG8gdXNlIChpZiBwcm92aWRlZCkKKyAgICAgKiBAcGFy
YW0gcHJvamVjdGlvblIgZGVmaW5lcyB0aGUgcmlnaHQgUHJvamVjdGlvbiBtYXRyaXggdG8gdXNl
IChpZiBwcm92aWRlZCkKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuc2V0VHJhbnNmb3Jt
TWF0cml4ID0gZnVuY3Rpb24gKHZpZXdMLCBwcm9qZWN0aW9uTCwgdmlld1IsIHByb2plY3Rpb25S
KSB7CisgICAgICAgIGlmICh0aGlzLl92aWV3VXBkYXRlRmxhZyA9PT0gdmlld0wudXBkYXRlRmxh
ZyAmJiB0aGlzLl9wcm9qZWN0aW9uVXBkYXRlRmxhZyA9PT0gcHJvamVjdGlvbkwudXBkYXRlRmxh
ZykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3ZpZXdV
cGRhdGVGbGFnID0gdmlld0wudXBkYXRlRmxhZzsKKyAgICAgICAgdGhpcy5fcHJvamVjdGlvblVw
ZGF0ZUZsYWcgPSBwcm9qZWN0aW9uTC51cGRhdGVGbGFnOworICAgICAgICB0aGlzLl92aWV3TWF0
cml4ID0gdmlld0w7CisgICAgICAgIHRoaXMuX3Byb2plY3Rpb25NYXRyaXggPSBwcm9qZWN0aW9u
TDsKKyAgICAgICAgdGhpcy5fdmlld01hdHJpeC5tdWx0aXBseVRvUmVmKHRoaXMuX3Byb2plY3Rp
b25NYXRyaXgsIHRoaXMuX3RyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgIC8vIFVwZGF0ZSBmcnVz
dHVtCisgICAgICAgIGlmICghdGhpcy5fZnJ1c3R1bVBsYW5lcykgeworICAgICAgICAgICAgdGhp
cy5fZnJ1c3R1bVBsYW5lcyA9IF9NYXRoc19tYXRoX2ZydXN0dW1fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzI4X19bIkZydXN0dW0iXS5HZXRQbGFuZXModGhpcy5fdHJhbnNmb3JtTWF0cml4KTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX2ZydXN0
dW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIkZydXN0dW0iXS5HZXRQbGFuZXNUb1Jl
Zih0aGlzLl90cmFuc2Zvcm1NYXRyaXgsIHRoaXMuX2ZydXN0dW1QbGFuZXMpOworICAgICAgICB9
CisgICAgICAgIGlmICh0aGlzLl9tdWx0aXZpZXdTY2VuZVVibyAmJiB0aGlzLl9tdWx0aXZpZXdT
Y2VuZVViby51c2VVYm8pIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU11bHRpdmlld1Vibyh2
aWV3UiwgcHJvamVjdGlvblIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX3Nj
ZW5lVWJvLnVzZVVibykgeworICAgICAgICAgICAgdGhpcy5fc2NlbmVVYm8udXBkYXRlTWF0cml4
KCJ2aWV3UHJvamVjdGlvbiIsIHRoaXMuX3RyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgICAgICB0
aGlzLl9zY2VuZVViby51cGRhdGVNYXRyaXgoInZpZXciLCB0aGlzLl92aWV3TWF0cml4KTsKKyAg
ICAgICAgICAgIHRoaXMuX3NjZW5lVWJvLnVwZGF0ZSgpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXRzIHRoZSB1bmlmb3JtIGJ1ZmZlciB1c2VkIHRvIHN0b3JlIHNjZW5l
IGRhdGEKKyAgICAgKiBAcmV0dXJucyBhIFVuaWZvcm1CdWZmZXIKKyAgICAgKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUuZ2V0U2NlbmVVbmlmb3JtQnVmZmVyID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5fbXVsdGl2aWV3U2NlbmVVYm8gPyB0aGlzLl9tdWx0aXZpZXdTY2VuZVVi
byA6IHRoaXMuX3NjZW5lVWJvOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhbiB1bmlx
dWUgKHJlbGF0aXZlbHkgdG8gdGhlIGN1cnJlbnQgc2NlbmUpIElkCisgICAgICogQHJldHVybnMg
YW4gdW5pcXVlIG51bWJlciBmb3IgdGhlIHNjZW5lCisgICAgICovCisgICAgU2NlbmUucHJvdG90
eXBlLmdldFVuaXF1ZUlkID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gX01pc2NfdW5p
cXVlSWRHZW5lcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X19bIlVuaXF1ZUlkR2Vu
ZXJhdG9yIl0uVW5pcXVlSWQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgYSBtZXNoIHRv
IHRoZSBsaXN0IG9mIHNjZW5lJ3MgbWVzaGVzCisgICAgICogQHBhcmFtIG5ld01lc2ggZGVmaW5l
cyB0aGUgbWVzaCB0byBhZGQKKyAgICAgKiBAcGFyYW0gcmVjdXJzaXZlIGlmIGFsbCBjaGlsZCBt
ZXNoZXMgc2hvdWxkIGFsc28gYmUgYWRkZWQgdG8gdGhlIHNjZW5lCisgICAgICovCisgICAgU2Nl
bmUucHJvdG90eXBlLmFkZE1lc2ggPSBmdW5jdGlvbiAobmV3TWVzaCwgcmVjdXJzaXZlKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChyZWN1cnNpdmUgPT09IHZvaWQg
MCkgeyByZWN1cnNpdmUgPSBmYWxzZTsgfQorICAgICAgICB0aGlzLm1lc2hlcy5wdXNoKG5ld01l
c2gpOworICAgICAgICBuZXdNZXNoLl9yZXN5bmNMaWdodFNvdXJjZXMoKTsKKyAgICAgICAgdGhp
cy5vbk5ld01lc2hBZGRlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKG5ld01lc2gpOworICAg
ICAgICBpZiAocmVjdXJzaXZlKSB7CisgICAgICAgICAgICBuZXdNZXNoLmdldENoaWxkTWVzaGVz
KCkuZm9yRWFjaChmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgICAgIF90aGlzLmFkZE1lc2go
bSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
UmVtb3ZlIGEgbWVzaCBmb3IgdGhlIGxpc3Qgb2Ygc2NlbmUncyBtZXNoZXMKKyAgICAgKiBAcGFy
YW0gdG9SZW1vdmUgZGVmaW5lcyB0aGUgbWVzaCB0byByZW1vdmUKKyAgICAgKiBAcGFyYW0gcmVj
dXJzaXZlIGlmIGFsbCBjaGlsZCBtZXNoZXMgc2hvdWxkIGFsc28gYmUgcmVtb3ZlZCBmcm9tIHRo
ZSBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSB0aGUgbWVzaCB3YXMgaW4g
dGhlIG1lc2ggbGlzdAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5yZW1vdmVNZXNoID0g
ZnVuY3Rpb24gKHRvUmVtb3ZlLCByZWN1cnNpdmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhp
czsKKyAgICAgICAgaWYgKHJlY3Vyc2l2ZSA9PT0gdm9pZCAwKSB7IHJlY3Vyc2l2ZSA9IGZhbHNl
OyB9CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMubWVzaGVzLmluZGV4T2YodG9SZW1vdmUpOwor
ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICAvLyBSZW1vdmUgZnJvbSB0
aGUgc2NlbmUgaWYgbWVzaCBmb3VuZAorICAgICAgICAgICAgdGhpcy5tZXNoZXNbaW5kZXhdID0g
dGhpcy5tZXNoZXNbdGhpcy5tZXNoZXMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICB0aGlzLm1l
c2hlcy5wb3AoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uTWVzaFJlbW92ZWRPYnNlcnZh
YmxlLm5vdGlmeU9ic2VydmVycyh0b1JlbW92ZSk7CisgICAgICAgIGlmIChyZWN1cnNpdmUpIHsK
KyAgICAgICAgICAgIHRvUmVtb3ZlLmdldENoaWxkTWVzaGVzKCkuZm9yRWFjaChmdW5jdGlvbiAo
bSkgeworICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZU1lc2gobSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGQgYSB0cmFuc2Zvcm0gbm9kZSB0byB0aGUgbGlzdCBvZiBzY2VuZSdzIHRyYW5zZm9y
bSBub2RlcworICAgICAqIEBwYXJhbSBuZXdUcmFuc2Zvcm1Ob2RlIGRlZmluZXMgdGhlIHRyYW5z
Zm9ybSBub2RlIHRvIGFkZAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5hZGRUcmFuc2Zv
cm1Ob2RlID0gZnVuY3Rpb24gKG5ld1RyYW5zZm9ybU5vZGUpIHsKKyAgICAgICAgbmV3VHJhbnNm
b3JtTm9kZS5faW5kZXhJblNjZW5lVHJhbnNmb3JtTm9kZXNBcnJheSA9IHRoaXMudHJhbnNmb3Jt
Tm9kZXMubGVuZ3RoOworICAgICAgICB0aGlzLnRyYW5zZm9ybU5vZGVzLnB1c2gobmV3VHJhbnNm
b3JtTm9kZSk7CisgICAgICAgIHRoaXMub25OZXdUcmFuc2Zvcm1Ob2RlQWRkZWRPYnNlcnZhYmxl
Lm5vdGlmeU9ic2VydmVycyhuZXdUcmFuc2Zvcm1Ob2RlKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlbW92ZSBhIHRyYW5zZm9ybSBub2RlIGZvciB0aGUgbGlzdCBvZiBzY2VuZSdzIHRyYW5z
Zm9ybSBub2RlcworICAgICAqIEBwYXJhbSB0b1JlbW92ZSBkZWZpbmVzIHRoZSB0cmFuc2Zvcm0g
bm9kZSB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgdGhlIHRyYW5z
Zm9ybSBub2RlIHdhcyBpbiB0aGUgdHJhbnNmb3JtIG5vZGUgbGlzdAorICAgICAqLworICAgIFNj
ZW5lLnByb3RvdHlwZS5yZW1vdmVUcmFuc2Zvcm1Ob2RlID0gZnVuY3Rpb24gKHRvUmVtb3ZlKSB7
CisgICAgICAgIHZhciBpbmRleCA9IHRvUmVtb3ZlLl9pbmRleEluU2NlbmVUcmFuc2Zvcm1Ob2Rl
c0FycmF5OworICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICBpZiAoaW5k
ZXggIT09IHRoaXMudHJhbnNmb3JtTm9kZXMubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAg
IHZhciBsYXN0Tm9kZSA9IHRoaXMudHJhbnNmb3JtTm9kZXNbdGhpcy50cmFuc2Zvcm1Ob2Rlcy5s
ZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybU5vZGVzW2luZGV4XSA9
IGxhc3ROb2RlOworICAgICAgICAgICAgICAgIGxhc3ROb2RlLl9pbmRleEluU2NlbmVUcmFuc2Zv
cm1Ob2Rlc0FycmF5ID0gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b1JlbW92
ZS5faW5kZXhJblNjZW5lVHJhbnNmb3JtTm9kZXNBcnJheSA9IC0xOworICAgICAgICAgICAgdGhp
cy50cmFuc2Zvcm1Ob2Rlcy5wb3AoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uVHJhbnNm
b3JtTm9kZVJlbW92ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0b1JlbW92ZSk7CisgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHNrZWxl
dG9uIGZvciB0aGUgbGlzdCBvZiBzY2VuZSdzIHNrZWxldG9ucworICAgICAqIEBwYXJhbSB0b1Jl
bW92ZSBkZWZpbmVzIHRoZSBza2VsZXRvbiB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUg
aW5kZXggd2hlcmUgdGhlIHNrZWxldG9uIHdhcyBpbiB0aGUgc2tlbGV0b24gbGlzdAorICAgICAq
LworICAgIFNjZW5lLnByb3RvdHlwZS5yZW1vdmVTa2VsZXRvbiA9IGZ1bmN0aW9uICh0b1JlbW92
ZSkgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnNrZWxldG9ucy5pbmRleE9mKHRvUmVtb3Zl
KTsKKyAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGZy
b20gdGhlIHNjZW5lIGlmIGZvdW5kCisgICAgICAgICAgICB0aGlzLnNrZWxldG9ucy5zcGxpY2Uo
aW5kZXgsIDEpOworICAgICAgICAgICAgdGhpcy5vblNrZWxldG9uUmVtb3ZlZE9ic2VydmFibGUu
bm90aWZ5T2JzZXJ2ZXJzKHRvUmVtb3ZlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5k
ZXg7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBtb3JwaCB0YXJnZXQgZm9yIHRo
ZSBsaXN0IG9mIHNjZW5lJ3MgbW9ycGggdGFyZ2V0cworICAgICAqIEBwYXJhbSB0b1JlbW92ZSBk
ZWZpbmVzIHRoZSBtb3JwaCB0YXJnZXQgdG8gcmVtb3ZlCisgICAgICogQHJldHVybnMgdGhlIGlu
ZGV4IHdoZXJlIHRoZSBtb3JwaCB0YXJnZXQgd2FzIGluIHRoZSBtb3JwaCB0YXJnZXQgbGlzdAor
ICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5yZW1vdmVNb3JwaFRhcmdldE1hbmFnZXIgPSBm
dW5jdGlvbiAodG9SZW1vdmUpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5tb3JwaFRhcmdl
dE1hbmFnZXJzLmluZGV4T2YodG9SZW1vdmUpOworICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7
CisgICAgICAgICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgc2NlbmUgaWYgZm91bmQKKyAgICAgICAg
ICAgIHRoaXMubW9ycGhUYXJnZXRNYW5hZ2Vycy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBh
IGxpZ2h0IGZvciB0aGUgbGlzdCBvZiBzY2VuZSdzIGxpZ2h0cworICAgICAqIEBwYXJhbSB0b1Jl
bW92ZSBkZWZpbmVzIHRoZSBsaWdodCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgaW5k
ZXggd2hlcmUgdGhlIGxpZ2h0IHdhcyBpbiB0aGUgbGlnaHQgbGlzdAorICAgICAqLworICAgIFNj
ZW5lLnByb3RvdHlwZS5yZW1vdmVMaWdodCA9IGZ1bmN0aW9uICh0b1JlbW92ZSkgeworICAgICAg
ICB2YXIgaW5kZXggPSB0aGlzLmxpZ2h0cy5pbmRleE9mKHRvUmVtb3ZlKTsKKyAgICAgICAgaWYg
KGluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gbWVzaGVzCisgICAg
ICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5tZXNoZXM7IF9pIDwgX2EubGVuZ3Ro
OyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBfYVtfaV07CisgICAgICAgICAg
ICAgICAgbWVzaC5fcmVtb3ZlTGlnaHRTb3VyY2UodG9SZW1vdmUsIGZhbHNlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBzY2VuZSBpZiBtZXNoIGZvdW5k
CisgICAgICAgICAgICB0aGlzLmxpZ2h0cy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAg
dGhpcy5zb3J0TGlnaHRzQnlQcmlvcml0eSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMub25M
aWdodFJlbW92ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0b1JlbW92ZSk7CisgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIGNhbWVyYSBm
b3IgdGhlIGxpc3Qgb2Ygc2NlbmUncyBjYW1lcmFzCisgICAgICogQHBhcmFtIHRvUmVtb3ZlIGRl
ZmluZXMgdGhlIGNhbWVyYSB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgaW5kZXggd2hl
cmUgdGhlIGNhbWVyYSB3YXMgaW4gdGhlIGNhbWVyYSBsaXN0CisgICAgICovCisgICAgU2NlbmUu
cHJvdG90eXBlLnJlbW92ZUNhbWVyYSA9IGZ1bmN0aW9uICh0b1JlbW92ZSkgeworICAgICAgICB2
YXIgaW5kZXggPSB0aGlzLmNhbWVyYXMuaW5kZXhPZih0b1JlbW92ZSk7CisgICAgICAgIGlmIChp
bmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBzY2VuZSBpZiBt
ZXNoIGZvdW5kCisgICAgICAgICAgICB0aGlzLmNhbWVyYXMuc3BsaWNlKGluZGV4LCAxKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBSZW1vdmUgZnJvbSBhY3RpdmVDYW1lcmFzCisgICAgICAgIHZh
ciBpbmRleDIgPSB0aGlzLmFjdGl2ZUNhbWVyYXMuaW5kZXhPZih0b1JlbW92ZSk7CisgICAgICAg
IGlmIChpbmRleDIgIT09IC0xKSB7CisgICAgICAgICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgc2Nl
bmUgaWYgbWVzaCBmb3VuZAorICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFzLnNwbGljZShp
bmRleDIsIDEpOworICAgICAgICB9CisgICAgICAgIC8vIFJlc2V0IHRoZSBhY3RpdmVDYW1lcmEK
KyAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FtZXJhID09PSB0b1JlbW92ZSkgeworICAgICAgICAg
ICAgaWYgKHRoaXMuY2FtZXJhcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5h
Y3RpdmVDYW1lcmEgPSB0aGlzLmNhbWVyYXNbMF07CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYSA9IG51bGw7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vbkNhbWVyYVJlbW92ZWRPYnNlcnZh
YmxlLm5vdGlmeU9ic2VydmVycyh0b1JlbW92ZSk7CisgICAgICAgIHJldHVybiBpbmRleDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHBhcnRpY2xlIHN5c3RlbSBmb3IgdGhlIGxp
c3Qgb2Ygc2NlbmUncyBwYXJ0aWNsZSBzeXN0ZW1zCisgICAgICogQHBhcmFtIHRvUmVtb3ZlIGRl
ZmluZXMgdGhlIHBhcnRpY2xlIHN5c3RlbSB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUg
aW5kZXggd2hlcmUgdGhlIHBhcnRpY2xlIHN5c3RlbSB3YXMgaW4gdGhlIHBhcnRpY2xlIHN5c3Rl
bSBsaXN0CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLnJlbW92ZVBhcnRpY2xlU3lzdGVt
ID0gZnVuY3Rpb24gKHRvUmVtb3ZlKSB7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMucGFydGlj
bGVTeXN0ZW1zLmluZGV4T2YodG9SZW1vdmUpOworICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7
CisgICAgICAgICAgICB0aGlzLnBhcnRpY2xlU3lzdGVtcy5zcGxpY2UoaW5kZXgsIDEpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
bW92ZSBhIGFuaW1hdGlvbiBmb3IgdGhlIGxpc3Qgb2Ygc2NlbmUncyBhbmltYXRpb25zCisgICAg
ICogQHBhcmFtIHRvUmVtb3ZlIGRlZmluZXMgdGhlIGFuaW1hdGlvbiB0byByZW1vdmUKKyAgICAg
KiBAcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgdGhlIGFuaW1hdGlvbiB3YXMgaW4gdGhlIGFuaW1h
dGlvbiBsaXN0CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLnJlbW92ZUFuaW1hdGlvbiA9
IGZ1bmN0aW9uICh0b1JlbW92ZSkgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmFuaW1hdGlv
bnMuaW5kZXhPZih0b1JlbW92ZSk7CisgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAg
ICAgICAgIHRoaXMuYW5pbWF0aW9ucy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFdpbGwgc3RvcCB0aGUg
YW5pbWF0aW9uIG9mIHRoZSBnaXZlbiB0YXJnZXQKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IC0gdGhl
IHRhcmdldAorICAgICAqIEBwYXJhbSBhbmltYXRpb25OYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGFu
aW1hdGlvbiB0byBzdG9wIChhbGwgYW5pbWF0aW9ucyB3aWxsIGJlIHN0b3BwZWQgaWYgYm90aCB0
aGlzIGFuZCB0YXJnZXRNYXNrIGFyZSBlbXB0eSkKKyAgICAgKiBAcGFyYW0gdGFyZ2V0TWFzayAt
IGEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGlmIHRoZSBhbmltYXRpb24gc2hvdWxkIGJlIHN0
b3BwZWQgYmFzZWQgb24gaXRzIHRhcmdldCAoYWxsIGFuaW1hdGlvbnMgd2lsbCBiZSBzdG9wcGVk
IGlmIGJvdGggdGhpcyBhbmQgYW5pbWF0aW9uTmFtZSBhcmUgZW1wdHkpCisgICAgICovCisgICAg
U2NlbmUucHJvdG90eXBlLnN0b3BBbmltYXRpb24gPSBmdW5jdGlvbiAodGFyZ2V0LCBhbmltYXRp
b25OYW1lLCB0YXJnZXRNYXNrKSB7CisgICAgICAgIC8vIERvIG5vdGhpbmcgYXMgY29kZSB3aWxs
IGJlIHByb3ZpZGVkIGJ5IGFuaW1hdGlvbiBjb21wb25lbnQKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlbW92ZXMgdGhlIGdpdmVuIGFuaW1hdGlvbiBncm91cCBmcm9tIHRoaXMgc2NlbmUuCisg
ICAgICogQHBhcmFtIHRvUmVtb3ZlIFRoZSBhbmltYXRpb24gZ3JvdXAgdG8gcmVtb3ZlCisgICAg
ICogQHJldHVybnMgVGhlIGluZGV4IG9mIHRoZSByZW1vdmVkIGFuaW1hdGlvbiBncm91cAorICAg
ICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5yZW1vdmVBbmltYXRpb25Hcm91cCA9IGZ1bmN0aW9u
ICh0b1JlbW92ZSkgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmFuaW1hdGlvbkdyb3Vwcy5p
bmRleE9mKHRvUmVtb3ZlKTsKKyAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAg
ICAgdGhpcy5hbmltYXRpb25Hcm91cHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIHRoZSBn
aXZlbiBtdWx0aS1tYXRlcmlhbCBmcm9tIHRoaXMgc2NlbmUuCisgICAgICogQHBhcmFtIHRvUmVt
b3ZlIFRoZSBtdWx0aS1tYXRlcmlhbCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyBUaGUgaW5k
ZXggb2YgdGhlIHJlbW92ZWQgbXVsdGktbWF0ZXJpYWwKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90
b3R5cGUucmVtb3ZlTXVsdGlNYXRlcmlhbCA9IGZ1bmN0aW9uICh0b1JlbW92ZSkgeworICAgICAg
ICB2YXIgaW5kZXggPSB0aGlzLm11bHRpTWF0ZXJpYWxzLmluZGV4T2YodG9SZW1vdmUpOworICAg
ICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICB0aGlzLm11bHRpTWF0ZXJpYWxz
LnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGluZGV4OworICAg
IH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gbWF0ZXJpYWwgZnJvbSB0aGlz
IHNjZW5lLgorICAgICAqIEBwYXJhbSB0b1JlbW92ZSBUaGUgbWF0ZXJpYWwgdG8gcmVtb3ZlCisg
ICAgICogQHJldHVybnMgVGhlIGluZGV4IG9mIHRoZSByZW1vdmVkIG1hdGVyaWFsCisgICAgICov
CisgICAgU2NlbmUucHJvdG90eXBlLnJlbW92ZU1hdGVyaWFsID0gZnVuY3Rpb24gKHRvUmVtb3Zl
KSB7CisgICAgICAgIHZhciBpbmRleCA9IHRvUmVtb3ZlLl9pbmRleEluU2NlbmVNYXRlcmlhbEFy
cmF5OworICAgICAgICBpZiAoaW5kZXggIT09IC0xICYmIGluZGV4IDwgdGhpcy5tYXRlcmlhbHMu
bGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoaW5kZXggIT09IHRoaXMubWF0ZXJpYWxzLmxlbmd0
aCAtIDEpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGFzdE1hdGVyaWFsID0gdGhpcy5tYXRlcmlh
bHNbdGhpcy5tYXRlcmlhbHMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAgdGhpcy5tYXRl
cmlhbHNbaW5kZXhdID0gbGFzdE1hdGVyaWFsOworICAgICAgICAgICAgICAgIGxhc3RNYXRlcmlh
bC5faW5kZXhJblNjZW5lTWF0ZXJpYWxBcnJheSA9IGluZGV4OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdG9SZW1vdmUuX2luZGV4SW5TY2VuZU1hdGVyaWFsQXJyYXkgPSAtMTsKKyAgICAg
ICAgICAgIHRoaXMubWF0ZXJpYWxzLnBvcCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMub25N
YXRlcmlhbFJlbW92ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0b1JlbW92ZSk7CisgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGhlIGdp
dmVuIGFjdGlvbiBtYW5hZ2VyIGZyb20gdGhpcyBzY2VuZS4KKyAgICAgKiBAcGFyYW0gdG9SZW1v
dmUgVGhlIGFjdGlvbiBtYW5hZ2VyIHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5zIFRoZSBpbmRl
eCBvZiB0aGUgcmVtb3ZlZCBhY3Rpb24gbWFuYWdlcgorICAgICAqLworICAgIFNjZW5lLnByb3Rv
dHlwZS5yZW1vdmVBY3Rpb25NYW5hZ2VyID0gZnVuY3Rpb24gKHRvUmVtb3ZlKSB7CisgICAgICAg
IHZhciBpbmRleCA9IHRoaXMuYWN0aW9uTWFuYWdlcnMuaW5kZXhPZih0b1JlbW92ZSk7CisgICAg
ICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuYWN0aW9uTWFuYWdlcnMu
c3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5kZXg7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiB0ZXh0dXJlIGZyb20gdGhpcyBz
Y2VuZS4KKyAgICAgKiBAcGFyYW0gdG9SZW1vdmUgVGhlIHRleHR1cmUgdG8gcmVtb3ZlCisgICAg
ICogQHJldHVybnMgVGhlIGluZGV4IG9mIHRoZSByZW1vdmVkIHRleHR1cmUKKyAgICAgKi8KKyAg
ICBTY2VuZS5wcm90b3R5cGUucmVtb3ZlVGV4dHVyZSA9IGZ1bmN0aW9uICh0b1JlbW92ZSkgewor
ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnRleHR1cmVzLmluZGV4T2YodG9SZW1vdmUpOworICAg
ICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICB0aGlzLnRleHR1cmVzLnNwbGlj
ZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vblRleHR1cmVSZW1vdmVkT2Jz
ZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModG9SZW1vdmUpOworICAgICAgICByZXR1cm4gaW5kZXg7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIHRoZSBnaXZlbiBsaWdodCB0byB0aGlzIHNj
ZW5lCisgICAgICogQHBhcmFtIG5ld0xpZ2h0IFRoZSBsaWdodCB0byBhZGQKKyAgICAgKi8KKyAg
ICBTY2VuZS5wcm90b3R5cGUuYWRkTGlnaHQgPSBmdW5jdGlvbiAobmV3TGlnaHQpIHsKKyAgICAg
ICAgdGhpcy5saWdodHMucHVzaChuZXdMaWdodCk7CisgICAgICAgIHRoaXMuc29ydExpZ2h0c0J5
UHJpb3JpdHkoKTsKKyAgICAgICAgLy8gQWRkIGxpZ2h0IHRvIGFsbCBtZXNoZXMgKFRvIHN1cHBv
cnQgaWYgdGhlIGxpZ2h0IGlzIHJlbW92ZWQgYW5kIHRoZW4gcmVhZGRlZCkKKyAgICAgICAgZm9y
ICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMubWVzaGVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewor
ICAgICAgICAgICAgdmFyIG1lc2ggPSBfYVtfaV07CisgICAgICAgICAgICBpZiAobWVzaC5saWdo
dFNvdXJjZXMuaW5kZXhPZihuZXdMaWdodCkgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgbWVz
aC5saWdodFNvdXJjZXMucHVzaChuZXdMaWdodCk7CisgICAgICAgICAgICAgICAgbWVzaC5fcmVz
eW5jTGlnaHRTb3VyY2VzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5vbk5ld0xpZ2h0QWRkZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhuZXdMaWdodCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTb3J0cyB0aGUgbGlzdCBsaXN0IGJhc2VkIG9uIGxpZ2h0
IHByaW9yaXRpZXMKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuc29ydExpZ2h0c0J5UHJp
b3JpdHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnJlcXVpcmVMaWdodFNvcnRp
bmcpIHsKKyAgICAgICAgICAgIHRoaXMubGlnaHRzLnNvcnQoX0xpZ2h0c19saWdodF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTGlnaHQiXS5Db21wYXJlTGlnaHRzUHJpb3JpdHkpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIHRoZSBnaXZlbiBjYW1lcmEg
dG8gdGhpcyBzY2VuZQorICAgICAqIEBwYXJhbSBuZXdDYW1lcmEgVGhlIGNhbWVyYSB0byBhZGQK
KyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuYWRkQ2FtZXJhID0gZnVuY3Rpb24gKG5ld0Nh
bWVyYSkgeworICAgICAgICB0aGlzLmNhbWVyYXMucHVzaChuZXdDYW1lcmEpOworICAgICAgICB0
aGlzLm9uTmV3Q2FtZXJhQWRkZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhuZXdDYW1lcmEp
OworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyB0aGUgZ2l2ZW4gc2tlbGV0b24gdG8gdGhp
cyBzY2VuZQorICAgICAqIEBwYXJhbSBuZXdTa2VsZXRvbiBUaGUgc2tlbGV0b24gdG8gYWRkCisg
ICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmFkZFNrZWxldG9uID0gZnVuY3Rpb24gKG5ld1Nr
ZWxldG9uKSB7CisgICAgICAgIHRoaXMuc2tlbGV0b25zLnB1c2gobmV3U2tlbGV0b24pOworICAg
ICAgICB0aGlzLm9uTmV3U2tlbGV0b25BZGRlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKG5l
d1NrZWxldG9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgdGhlIGdpdmVuIHBhcnRp
Y2xlIHN5c3RlbSB0byB0aGlzIHNjZW5lCisgICAgICogQHBhcmFtIG5ld1BhcnRpY2xlU3lzdGVt
IFRoZSBwYXJ0aWNsZSBzeXN0ZW0gdG8gYWRkCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBl
LmFkZFBhcnRpY2xlU3lzdGVtID0gZnVuY3Rpb24gKG5ld1BhcnRpY2xlU3lzdGVtKSB7CisgICAg
ICAgIHRoaXMucGFydGljbGVTeXN0ZW1zLnB1c2gobmV3UGFydGljbGVTeXN0ZW0pOworICAgIH07
CisgICAgLyoqCisgICAgICogQWRkcyB0aGUgZ2l2ZW4gYW5pbWF0aW9uIHRvIHRoaXMgc2NlbmUK
KyAgICAgKiBAcGFyYW0gbmV3QW5pbWF0aW9uIFRoZSBhbmltYXRpb24gdG8gYWRkCisgICAgICov
CisgICAgU2NlbmUucHJvdG90eXBlLmFkZEFuaW1hdGlvbiA9IGZ1bmN0aW9uIChuZXdBbmltYXRp
b24pIHsKKyAgICAgICAgdGhpcy5hbmltYXRpb25zLnB1c2gobmV3QW5pbWF0aW9uKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEFkZHMgdGhlIGdpdmVuIGFuaW1hdGlvbiBncm91cCB0byB0aGlz
IHNjZW5lLgorICAgICAqIEBwYXJhbSBuZXdBbmltYXRpb25Hcm91cCBUaGUgYW5pbWF0aW9uIGdy
b3VwIHRvIGFkZAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5hZGRBbmltYXRpb25Hcm91
cCA9IGZ1bmN0aW9uIChuZXdBbmltYXRpb25Hcm91cCkgeworICAgICAgICB0aGlzLmFuaW1hdGlv
bkdyb3Vwcy5wdXNoKG5ld0FuaW1hdGlvbkdyb3VwKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEFkZHMgdGhlIGdpdmVuIG11bHRpLW1hdGVyaWFsIHRvIHRoaXMgc2NlbmUKKyAgICAgKiBAcGFy
YW0gbmV3TXVsdGlNYXRlcmlhbCBUaGUgbXVsdGktbWF0ZXJpYWwgdG8gYWRkCisgICAgICovCisg
ICAgU2NlbmUucHJvdG90eXBlLmFkZE11bHRpTWF0ZXJpYWwgPSBmdW5jdGlvbiAobmV3TXVsdGlN
YXRlcmlhbCkgeworICAgICAgICB0aGlzLm11bHRpTWF0ZXJpYWxzLnB1c2gobmV3TXVsdGlNYXRl
cmlhbCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIHRoZSBnaXZlbiBtYXRlcmlhbCB0
byB0aGlzIHNjZW5lCisgICAgICogQHBhcmFtIG5ld01hdGVyaWFsIFRoZSBtYXRlcmlhbCB0byBh
ZGQKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuYWRkTWF0ZXJpYWwgPSBmdW5jdGlvbiAo
bmV3TWF0ZXJpYWwpIHsKKyAgICAgICAgbmV3TWF0ZXJpYWwuX2luZGV4SW5TY2VuZU1hdGVyaWFs
QXJyYXkgPSB0aGlzLm1hdGVyaWFscy5sZW5ndGg7CisgICAgICAgIHRoaXMubWF0ZXJpYWxzLnB1
c2gobmV3TWF0ZXJpYWwpOworICAgICAgICB0aGlzLm9uTmV3TWF0ZXJpYWxBZGRlZE9ic2VydmFi
bGUubm90aWZ5T2JzZXJ2ZXJzKG5ld01hdGVyaWFsKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEFkZHMgdGhlIGdpdmVuIG1vcnBoIHRhcmdldCB0byB0aGlzIHNjZW5lCisgICAgICogQHBhcmFt
IG5ld01vcnBoVGFyZ2V0TWFuYWdlciBUaGUgbW9ycGggdGFyZ2V0IHRvIGFkZAorICAgICAqLwor
ICAgIFNjZW5lLnByb3RvdHlwZS5hZGRNb3JwaFRhcmdldE1hbmFnZXIgPSBmdW5jdGlvbiAobmV3
TW9ycGhUYXJnZXRNYW5hZ2VyKSB7CisgICAgICAgIHRoaXMubW9ycGhUYXJnZXRNYW5hZ2Vycy5w
dXNoKG5ld01vcnBoVGFyZ2V0TWFuYWdlcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRz
IHRoZSBnaXZlbiBnZW9tZXRyeSB0byB0aGlzIHNjZW5lCisgICAgICogQHBhcmFtIG5ld0dlb21l
dHJ5IFRoZSBnZW9tZXRyeSB0byBhZGQKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuYWRk
R2VvbWV0cnkgPSBmdW5jdGlvbiAobmV3R2VvbWV0cnkpIHsKKyAgICAgICAgaWYgKHRoaXMuZ2Vv
bWV0cmllc0J5VW5pcXVlSWQpIHsKKyAgICAgICAgICAgIHRoaXMuZ2VvbWV0cmllc0J5VW5pcXVl
SWRbbmV3R2VvbWV0cnkudW5pcXVlSWRdID0gdGhpcy5nZW9tZXRyaWVzLmxlbmd0aDsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLmdlb21ldHJpZXMucHVzaChuZXdHZW9tZXRyeSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBZGRzIHRoZSBnaXZlbiBhY3Rpb24gbWFuYWdlciB0byB0aGlzIHNj
ZW5lCisgICAgICogQHBhcmFtIG5ld0FjdGlvbk1hbmFnZXIgVGhlIGFjdGlvbiBtYW5hZ2VyIHRv
IGFkZAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5hZGRBY3Rpb25NYW5hZ2VyID0gZnVu
Y3Rpb24gKG5ld0FjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgdGhpcy5hY3Rpb25NYW5hZ2Vycy5w
dXNoKG5ld0FjdGlvbk1hbmFnZXIpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyB0aGUg
Z2l2ZW4gdGV4dHVyZSB0byB0aGlzIHNjZW5lLgorICAgICAqIEBwYXJhbSBuZXdUZXh0dXJlIFRo
ZSB0ZXh0dXJlIHRvIGFkZAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5hZGRUZXh0dXJl
ID0gZnVuY3Rpb24gKG5ld1RleHR1cmUpIHsKKyAgICAgICAgdGhpcy50ZXh0dXJlcy5wdXNoKG5l
d1RleHR1cmUpOworICAgICAgICB0aGlzLm9uTmV3VGV4dHVyZUFkZGVkT2JzZXJ2YWJsZS5ub3Rp
ZnlPYnNlcnZlcnMobmV3VGV4dHVyZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTd2l0Y2gg
YWN0aXZlIGNhbWVyYQorICAgICAqIEBwYXJhbSBuZXdDYW1lcmEgZGVmaW5lcyB0aGUgbmV3IGFj
dGl2ZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gYXR0YWNoQ29udHJvbCBkZWZpbmVzIGlmIGF0dGFj
aENvbnRyb2wgbXVzdCBiZSBjYWxsZWQgZm9yIHRoZSBuZXcgYWN0aXZlIGNhbWVyYSAoZGVmYXVs
dDogdHJ1ZSkKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuc3dpdGNoQWN0aXZlQ2FtZXJh
ID0gZnVuY3Rpb24gKG5ld0NhbWVyYSwgYXR0YWNoQ29udHJvbCkgeworICAgICAgICBpZiAoYXR0
YWNoQ29udHJvbCA9PT0gdm9pZCAwKSB7IGF0dGFjaENvbnRyb2wgPSB0cnVlOyB9CisgICAgICAg
IHZhciBjYW52YXMgPSB0aGlzLl9lbmdpbmUuZ2V0UmVuZGVyaW5nQ2FudmFzKCk7CisgICAgICAg
IGlmICghY2FudmFzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYS5k
ZXRhY2hDb250cm9sKGNhbnZhcyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5hY3RpdmVDYW1l
cmEgPSBuZXdDYW1lcmE7CisgICAgICAgIGlmIChhdHRhY2hDb250cm9sKSB7CisgICAgICAgICAg
ICBuZXdDYW1lcmEuYXR0YWNoQ29udHJvbChjYW52YXMpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBzZXRzIHRoZSBhY3RpdmUgY2FtZXJhIG9mIHRoZSBzY2VuZSB1c2luZyBp
dHMgSUQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgY2FtZXJhJ3MgSUQKKyAgICAgKiBA
cmV0dXJuIHRoZSBuZXcgYWN0aXZlIGNhbWVyYSBvciBudWxsIGlmIG5vbmUgZm91bmQuCisgICAg
ICovCisgICAgU2NlbmUucHJvdG90eXBlLnNldEFjdGl2ZUNhbWVyYUJ5SUQgPSBmdW5jdGlvbiAo
aWQpIHsKKyAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuZ2V0Q2FtZXJhQnlJRChpZCk7CisgICAg
ICAgIGlmIChjYW1lcmEpIHsKKyAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhID0gY2FtZXJh
OworICAgICAgICAgICAgcmV0dXJuIGNhbWVyYTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIHNldHMgdGhlIGFjdGl2ZSBjYW1lcmEgb2Yg
dGhlIHNjZW5lIHVzaW5nIGl0cyBuYW1lCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
Y2FtZXJhJ3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgYWN0aXZlIGNhbWVyYSBvciBu
dWxsIGlmIG5vbmUgZm91bmQuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLnNldEFjdGl2
ZUNhbWVyYUJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHZhciBjYW1lcmEgPSB0
aGlzLmdldENhbWVyYUJ5TmFtZShuYW1lKTsKKyAgICAgICAgaWYgKGNhbWVyYSkgeworICAgICAg
ICAgICAgdGhpcy5hY3RpdmVDYW1lcmEgPSBjYW1lcmE7CisgICAgICAgICAgICByZXR1cm4gY2Ft
ZXJhOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisg
ICAgICogZ2V0IGFuIGFuaW1hdGlvbiBncm91cCB1c2luZyBpdHMgbmFtZQorICAgICAqIEBwYXJh
bSBuYW1lIGRlZmluZXMgdGhlIG1hdGVyaWFsJ3MgbmFtZQorICAgICAqIEByZXR1cm4gdGhlIGFu
aW1hdGlvbiBncm91cCBvciBudWxsIGlmIG5vbmUgZm91bmQuCisgICAgICovCisgICAgU2NlbmUu
cHJvdG90eXBlLmdldEFuaW1hdGlvbkdyb3VwQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYW5pbWF0aW9uR3JvdXBzLmxl
bmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uR3JvdXBzW2lu
ZGV4XS5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0
aW9uR3JvdXBzW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCBhIG1hdGVyaWFsIHVzaW5nIGl0
cyB1bmlxdWUgaWQKKyAgICAgKiBAcGFyYW0gdW5pcXVlSWQgZGVmaW5lcyB0aGUgbWF0ZXJpYWwn
cyB1bmlxdWUgaWQKKyAgICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBvciBudWxsIGlmIG5vbmUg
Zm91bmQuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldE1hdGVyaWFsQnlVbmlxdWVJ
RCA9IGZ1bmN0aW9uICh1bmlxdWVJZCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgdGhpcy5tYXRlcmlhbHMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5tYXRlcmlhbHNbaW5kZXhdLnVuaXF1ZUlkID09PSB1bmlxdWVJZCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsc1tpbmRleF07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBnZXQg
YSBtYXRlcmlhbCB1c2luZyBpdHMgaWQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgbWF0
ZXJpYWwncyBJRAorICAgICAqIEByZXR1cm4gdGhlIG1hdGVyaWFsIG9yIG51bGwgaWYgbm9uZSBm
b3VuZC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0TWF0ZXJpYWxCeUlEID0gZnVu
Y3Rpb24gKGlkKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm1h
dGVyaWFscy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm1hdGVyaWFs
c1tpbmRleF0uaWQgPT09IGlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJp
YWxzW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSB0aGUgbGFzdCBhZGRlZCBtYXRlcmlh
bCB1c2luZyBhIGdpdmVuIGlkCisgICAgICogQHBhcmFtIGlkIGRlZmluZXMgdGhlIG1hdGVyaWFs
J3MgSUQKKyAgICAgKiBAcmV0dXJuIHRoZSBsYXN0IG1hdGVyaWFsIHdpdGggdGhlIGdpdmVuIGlk
IG9yIG51bGwgaWYgbm9uZSBmb3VuZC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0
TGFzdE1hdGVyaWFsQnlJRCA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICBmb3IgKHZhciBpbmRl
eCA9IHRoaXMubWF0ZXJpYWxzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLm1hdGVyaWFsc1tpbmRleF0uaWQgPT09IGlkKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWxzW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdl
dHMgYSBtYXRlcmlhbCB1c2luZyBpdHMgbmFtZQorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMg
dGhlIG1hdGVyaWFsJ3MgbmFtZQorICAgICAqIEByZXR1cm4gdGhlIG1hdGVyaWFsIG9yIG51bGwg
aWYgbm9uZSBmb3VuZC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0TWF0ZXJpYWxC
eU5hbWUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgdGhpcy5tYXRlcmlhbHMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5tYXRlcmlhbHNbaW5kZXhdLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5tYXRlcmlhbHNbaW5kZXhdOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGEgdGV4dHVy
ZSB1c2luZyBpdHMgdW5pcXVlIGlkCisgICAgICogQHBhcmFtIHVuaXF1ZUlkIGRlZmluZXMgdGhl
IHRleHR1cmUncyB1bmlxdWUgaWQKKyAgICAgKiBAcmV0dXJuIHRoZSB0ZXh0dXJlIG9yIG51bGwg
aWYgbm9uZSBmb3VuZC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0VGV4dHVyZUJ5
VW5pcXVlSUQgPSBmdW5jdGlvbiAodW5pcXVlSWQpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IHRoaXMudGV4dHVyZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy50ZXh0dXJlc1tpbmRleF0udW5pcXVlSWQgPT09IHVuaXF1ZUlkKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZXNbaW5kZXhdOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0cyBhIGNhbWVyYSB1c2luZyBpdHMgaWQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUg
aWQgdG8gbG9vayBmb3IKKyAgICAgKiBAcmV0dXJucyB0aGUgY2FtZXJhIG9yIG51bGwgaWYgbm90
IGZvdW5kCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldENhbWVyYUJ5SUQgPSBmdW5j
dGlvbiAoaWQpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2Ft
ZXJhcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmNhbWVyYXNbaW5k
ZXhdLmlkID09PSBpZCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbWVyYXNbaW5k
ZXhdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGNhbWVyYSB1c2luZyBpdHMgdW5pcXVlIGlkCisg
ICAgICogQHBhcmFtIHVuaXF1ZUlkIGRlZmluZXMgdGhlIHVuaXF1ZSBpZCB0byBsb29rIGZvcgor
ICAgICAqIEByZXR1cm5zIHRoZSBjYW1lcmEgb3IgbnVsbCBpZiBub3QgZm91bmQKKyAgICAgKi8K
KyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0Q2FtZXJhQnlVbmlxdWVJRCA9IGZ1bmN0aW9uICh1bmlx
dWVJZCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5jYW1lcmFz
Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuY2FtZXJhc1tpbmRleF0u
dW5pcXVlSWQgPT09IHVuaXF1ZUlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2Ft
ZXJhc1tpbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgY2FtZXJhIHVzaW5nIGl0cyBuYW1l
CisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgY2FtZXJhJ3MgbmFtZQorICAgICAqIEBy
ZXR1cm4gdGhlIGNhbWVyYSBvciBudWxsIGlmIG5vbmUgZm91bmQuCisgICAgICovCisgICAgU2Nl
bmUucHJvdG90eXBlLmdldENhbWVyYUJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAg
IGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmNhbWVyYXMubGVuZ3RoOyBpbmRleCsr
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5jYW1lcmFzW2luZGV4XS5uYW1lID09PSBuYW1lKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FtZXJhc1tpbmRleF07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXRzIGEgYm9uZSB1c2luZyBpdHMgaWQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0
aGUgYm9uZSdzIGlkCisgICAgICogQHJldHVybiB0aGUgYm9uZSBvciBudWxsIGlmIG5vdCBmb3Vu
ZAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRCb25lQnlJRCA9IGZ1bmN0aW9uIChp
ZCkgeworICAgICAgICBmb3IgKHZhciBza2VsZXRvbkluZGV4ID0gMDsgc2tlbGV0b25JbmRleCA8
IHRoaXMuc2tlbGV0b25zLmxlbmd0aDsgc2tlbGV0b25JbmRleCsrKSB7CisgICAgICAgICAgICB2
YXIgc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uc1tza2VsZXRvbkluZGV4XTsKKyAgICAgICAgICAg
IGZvciAodmFyIGJvbmVJbmRleCA9IDA7IGJvbmVJbmRleCA8IHNrZWxldG9uLmJvbmVzLmxlbmd0
aDsgYm9uZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoc2tlbGV0b24uYm9uZXNbYm9u
ZUluZGV4XS5pZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNrZWxldG9u
LmJvbmVzW2JvbmVJbmRleF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgKiBHZXRz
IGEgYm9uZSB1c2luZyBpdHMgaWQKKyAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJvbmUn
cyBuYW1lCisgICAgKiBAcmV0dXJuIHRoZSBib25lIG9yIG51bGwgaWYgbm90IGZvdW5kCisgICAg
Ki8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0Qm9uZUJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7
CisgICAgICAgIGZvciAodmFyIHNrZWxldG9uSW5kZXggPSAwOyBza2VsZXRvbkluZGV4IDwgdGhp
cy5za2VsZXRvbnMubGVuZ3RoOyBza2VsZXRvbkluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBz
a2VsZXRvbiA9IHRoaXMuc2tlbGV0b25zW3NrZWxldG9uSW5kZXhdOworICAgICAgICAgICAgZm9y
ICh2YXIgYm9uZUluZGV4ID0gMDsgYm9uZUluZGV4IDwgc2tlbGV0b24uYm9uZXMubGVuZ3RoOyBi
b25lSW5kZXgrKykgeworICAgICAgICAgICAgICAgIGlmIChza2VsZXRvbi5ib25lc1tib25lSW5k
ZXhdLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNrZWxldG9u
LmJvbmVzW2JvbmVJbmRleF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0
cyBhIGxpZ2h0IG5vZGUgdXNpbmcgaXRzIG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVz
IHRoZSB0aGUgbGlnaHQncyBuYW1lCisgICAgICogQHJldHVybiB0aGUgbGlnaHQgb3IgbnVsbCBp
ZiBub25lIGZvdW5kLgorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRMaWdodEJ5TmFt
ZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLmxpZ2h0cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmxp
Z2h0c1tpbmRleF0ubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmxpZ2h0c1tpbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbGlnaHQgbm9kZSB1c2luZyBp
dHMgaWQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgbGlnaHQncyBpZAorICAgICAqIEBy
ZXR1cm4gdGhlIGxpZ2h0IG9yIG51bGwgaWYgbm9uZSBmb3VuZC4KKyAgICAgKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUuZ2V0TGlnaHRCeUlEID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIGZvciAo
dmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxpZ2h0cy5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmxpZ2h0c1tpbmRleF0uaWQgPT09IGlkKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMubGlnaHRzW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBs
aWdodCBub2RlIHVzaW5nIGl0cyBzY2VuZS1nZW5lcmF0ZWQgdW5pcXVlIElECisgICAgICogQHBh
cmFtIHVuaXF1ZUlkIGRlZmluZXMgdGhlIGxpZ2h0J3MgdW5pcXVlIGlkCisgICAgICogQHJldHVy
biB0aGUgbGlnaHQgb3IgbnVsbCBpZiBub25lIGZvdW5kLgorICAgICAqLworICAgIFNjZW5lLnBy
b3RvdHlwZS5nZXRMaWdodEJ5VW5pcXVlSUQgPSBmdW5jdGlvbiAodW5pcXVlSWQpIHsKKyAgICAg
ICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGlnaHRzLmxlbmd0aDsgaW5kZXgr
KykgeworICAgICAgICAgICAgaWYgKHRoaXMubGlnaHRzW2luZGV4XS51bmlxdWVJZCA9PT0gdW5p
cXVlSWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saWdodHNbaW5kZXhdOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAg
LyoqCisgICAgICogR2V0cyBhIHBhcnRpY2xlIHN5c3RlbSBieSBpZAorICAgICAqIEBwYXJhbSBp
ZCBkZWZpbmVzIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gaWQKKyAgICAgKiBAcmV0dXJuIHRoZSBjb3Jy
ZXNwb25kaW5nIHN5c3RlbSBvciBudWxsIGlmIG5vbmUgZm91bmQKKyAgICAgKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUuZ2V0UGFydGljbGVTeXN0ZW1CeUlEID0gZnVuY3Rpb24gKGlkKSB7CisgICAg
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnBhcnRpY2xlU3lzdGVtcy5sZW5n
dGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnBhcnRpY2xlU3lzdGVtc1tpbmRl
eF0uaWQgPT09IGlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFydGljbGVTeXN0
ZW1zW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBnZW9tZXRyeSB1c2luZyBpdHMgSUQK
KyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgZ2VvbWV0cnkncyBpZAorICAgICAqIEByZXR1
cm4gdGhlIGdlb21ldHJ5IG9yIG51bGwgaWYgbm9uZSBmb3VuZC4KKyAgICAgKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUuZ2V0R2VvbWV0cnlCeUlEID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmdlb21ldHJpZXMubGVuZ3RoOyBpbmRleCsr
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5nZW9tZXRyaWVzW2luZGV4XS5pZCA9PT0gaWQpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZW9tZXRyaWVzW2luZGV4XTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIFNjZW5l
LnByb3RvdHlwZS5fZ2V0R2VvbWV0cnlCeVVuaXF1ZUlEID0gZnVuY3Rpb24gKHVuaXF1ZUlkKSB7
CisgICAgICAgIGlmICh0aGlzLmdlb21ldHJpZXNCeVVuaXF1ZUlkKSB7CisgICAgICAgICAgICB2
YXIgaW5kZXhfMSA9IHRoaXMuZ2VvbWV0cmllc0J5VW5pcXVlSWRbdW5pcXVlSWRdOworICAgICAg
ICAgICAgaWYgKGluZGV4XzEgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmdlb21ldHJpZXNbaW5kZXhfMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhp
cy5nZW9tZXRyaWVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIGlmICh0aGlz
Lmdlb21ldHJpZXNbaW5kZXhdLnVuaXF1ZUlkID09PSB1bmlxdWVJZCkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5nZW9tZXRyaWVzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBZGQgYSBuZXcgZ2VvbWV0cnkgdG8gdGhpcyBzY2VuZQorICAgICAq
IEBwYXJhbSBnZW9tZXRyeSBkZWZpbmVzIHRoZSBnZW9tZXRyeSB0byBiZSBhZGRlZCB0byB0aGUg
c2NlbmUuCisgICAgICogQHBhcmFtIGZvcmNlIGRlZmluZXMgaWYgdGhlIGdlb21ldHJ5IG11c3Qg
YmUgcHVzaGVkIGV2ZW4gaWYgYSBnZW9tZXRyeSB3aXRoIHRoaXMgaWQgYWxyZWFkeSBleGlzdHMK
KyAgICAgKiBAcmV0dXJuIGEgYm9vbGVhbiBkZWZpbmluZyBpZiB0aGUgZ2VvbWV0cnkgd2FzIGFk
ZGVkIG9yIG5vdAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5wdXNoR2VvbWV0cnkgPSBm
dW5jdGlvbiAoZ2VvbWV0cnksIGZvcmNlKSB7CisgICAgICAgIGlmICghZm9yY2UgJiYgdGhpcy5f
Z2V0R2VvbWV0cnlCeVVuaXF1ZUlEKGdlb21ldHJ5LnVuaXF1ZUlkKSkgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHRoaXMuYWRkR2VvbWV0cnkoZ2VvbWV0
cnkpOworICAgICAgICB0aGlzLm9uTmV3R2VvbWV0cnlBZGRlZE9ic2VydmFibGUubm90aWZ5T2Jz
ZXJ2ZXJzKGdlb21ldHJ5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZW1vdmVzIGFuIGV4aXN0aW5nIGdlb21ldHJ5CisgICAgICogQHBhcmFtIGdlb21l
dHJ5IGRlZmluZXMgdGhlIGdlb21ldHJ5IHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2NlbmUKKyAg
ICAgKiBAcmV0dXJuIGEgYm9vbGVhbiBkZWZpbmluZyBpZiB0aGUgZ2VvbWV0cnkgd2FzIHJlbW92
ZWQgb3Igbm90CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLnJlbW92ZUdlb21ldHJ5ID0g
ZnVuY3Rpb24gKGdlb21ldHJ5KSB7CisgICAgICAgIHZhciBpbmRleDsKKyAgICAgICAgaWYgKHRo
aXMuZ2VvbWV0cmllc0J5VW5pcXVlSWQpIHsKKyAgICAgICAgICAgIGluZGV4ID0gdGhpcy5nZW9t
ZXRyaWVzQnlVbmlxdWVJZFtnZW9tZXRyeS51bmlxdWVJZF07CisgICAgICAgICAgICBpZiAoaW5k
ZXggPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGluZGV4ID0g
dGhpcy5nZW9tZXRyaWVzLmluZGV4T2YoZ2VvbWV0cnkpOworICAgICAgICAgICAgaWYgKGluZGV4
IDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoaW5kZXggIT09IHRoaXMuZ2VvbWV0cmllcy5sZW5ndGggLSAx
KSB7CisgICAgICAgICAgICB2YXIgbGFzdEdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyaWVzW3RoaXMu
Z2VvbWV0cmllcy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIHRoaXMuZ2VvbWV0cmllc1tpbmRl
eF0gPSBsYXN0R2VvbWV0cnk7CisgICAgICAgICAgICBpZiAodGhpcy5nZW9tZXRyaWVzQnlVbmlx
dWVJZCkgeworICAgICAgICAgICAgICAgIHRoaXMuZ2VvbWV0cmllc0J5VW5pcXVlSWRbbGFzdEdl
b21ldHJ5LnVuaXF1ZUlkXSA9IGluZGV4OworICAgICAgICAgICAgICAgIHRoaXMuZ2VvbWV0cmll
c0J5VW5pcXVlSWRbZ2VvbWV0cnkudW5pcXVlSWRdID0gdW5kZWZpbmVkOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHRoaXMuZ2VvbWV0cmllcy5wb3AoKTsKKyAgICAgICAgdGhp
cy5vbkdlb21ldHJ5UmVtb3ZlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGdlb21ldHJ5KTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBs
aXN0IG9mIGdlb21ldHJpZXMgYXR0YWNoZWQgdG8gdGhlIHNjZW5lCisgICAgICogQHJldHVybnMg
YW4gYXJyYXkgb2YgR2VvbWV0cnkKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0R2Vv
bWV0cmllcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2VvbWV0cmllczsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGZpcnN0IGFkZGVkIG1lc2ggZm91bmQg
b2YgYSBnaXZlbiBJRAorICAgICAqIEBwYXJhbSBpZCBkZWZpbmVzIHRoZSBpZCB0byBzZWFyY2gg
Zm9yCisgICAgICogQHJldHVybiB0aGUgbWVzaCBmb3VuZCBvciBudWxsIGlmIG5vdCBmb3VuZCBh
dCBhbGwKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0TWVzaEJ5SUQgPSBmdW5jdGlv
biAoaWQpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubWVzaGVz
Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKHRoaXMubWVzaGVzW2luZGV4XS5p
ZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNoZXNbaW5kZXhdOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyBhIGxpc3Qgb2YgbWVzaGVzIHVzaW5nIHRoZWlyIGlkCisgICAg
ICogQHBhcmFtIGlkIGRlZmluZXMgdGhlIGlkIHRvIHNlYXJjaCBmb3IKKyAgICAgKiBAcmV0dXJu
cyBhIGxpc3Qgb2YgbWVzaGVzCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldE1lc2hl
c0J5SUQgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubWVzaGVzLmZpbHRl
cihmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgcmV0dXJuIG0uaWQgPT09IGlkOworICAgICAg
ICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGZpcnN0IGFkZGVkIHRyYW5z
Zm9ybSBub2RlIGZvdW5kIG9mIGEgZ2l2ZW4gSUQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0
aGUgaWQgdG8gc2VhcmNoIGZvcgorICAgICAqIEByZXR1cm4gdGhlIGZvdW5kIHRyYW5zZm9ybSBu
b2RlIG9yIG51bGwgaWYgbm90IGZvdW5kIGF0IGFsbC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90
b3R5cGUuZ2V0VHJhbnNmb3JtTm9kZUJ5SUQgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMudHJhbnNmb3JtTm9kZXMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1Ob2Rlc1tpbmRleF0uaWQgPT09
IGlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtTm9kZXNbaW5kZXhd
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07
CisgICAgLyoqCisgICAgICogR2V0cyBhIHRyYW5zZm9ybSBub2RlIHdpdGggaXRzIGF1dG8tZ2Vu
ZXJhdGVkIHVuaXF1ZSBpZAorICAgICAqIEBwYXJhbSB1bmlxdWVJZCBlZmluZXMgdGhlIHVuaXF1
ZSBpZCB0byBzZWFyY2ggZm9yCisgICAgICogQHJldHVybiB0aGUgZm91bmQgdHJhbnNmb3JtIG5v
ZGUgb3IgbnVsbCBpZiBub3QgZm91bmQgYXQgYWxsLgorICAgICAqLworICAgIFNjZW5lLnByb3Rv
dHlwZS5nZXRUcmFuc2Zvcm1Ob2RlQnlVbmlxdWVJRCA9IGZ1bmN0aW9uICh1bmlxdWVJZCkgewor
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy50cmFuc2Zvcm1Ob2Rlcy5s
ZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5vZGVzW2lu
ZGV4XS51bmlxdWVJZCA9PT0gdW5pcXVlSWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy50cmFuc2Zvcm1Ob2Rlc1tpbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbGlzdCBvZiB0
cmFuc2Zvcm0gbm9kZXMgdXNpbmcgdGhlaXIgaWQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0
aGUgaWQgdG8gc2VhcmNoIGZvcgorICAgICAqIEByZXR1cm5zIGEgbGlzdCBvZiB0cmFuc2Zvcm0g
bm9kZXMKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtTm9kZXNCeUlE
ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybU5vZGVzLmZp
bHRlcihmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgcmV0dXJuIG0uaWQgPT09IGlkOworICAg
ICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBtZXNoIHdpdGggaXRzIGF1
dG8tZ2VuZXJhdGVkIHVuaXF1ZSBpZAorICAgICAqIEBwYXJhbSB1bmlxdWVJZCBkZWZpbmVzIHRo
ZSB1bmlxdWUgaWQgdG8gc2VhcmNoIGZvcgorICAgICAqIEByZXR1cm4gdGhlIGZvdW5kIG1lc2gg
b3IgbnVsbCBpZiBub3QgZm91bmQgYXQgYWxsLgorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlw
ZS5nZXRNZXNoQnlVbmlxdWVJRCA9IGZ1bmN0aW9uICh1bmlxdWVJZCkgeworICAgICAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5tZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5tZXNoZXNbaW5kZXhdLnVuaXF1ZUlkID09PSB1bmlxdWVJZCkg
eworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc2hlc1tpbmRleF07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXRzIGEgdGhlIGxhc3QgYWRkZWQgbWVzaCB1c2luZyBhIGdpdmVuIGlkCisgICAgICog
QHBhcmFtIGlkIGRlZmluZXMgdGhlIGlkIHRvIHNlYXJjaCBmb3IKKyAgICAgKiBAcmV0dXJuIHRo
ZSBmb3VuZCBtZXNoIG9yIG51bGwgaWYgbm90IGZvdW5kIGF0IGFsbC4KKyAgICAgKi8KKyAgICBT
Y2VuZS5wcm90b3R5cGUuZ2V0TGFzdE1lc2hCeUlEID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAg
IGZvciAodmFyIGluZGV4ID0gdGhpcy5tZXNoZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5k
ZXgtLSkgeworICAgICAgICAgICAgaWYgKHRoaXMubWVzaGVzW2luZGV4XS5pZCA9PT0gaWQpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNoZXNbaW5kZXhdOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAg
ICogR2V0cyBhIHRoZSBsYXN0IGFkZGVkIG5vZGUgKE1lc2gsIENhbWVyYSwgTGlnaHQpIHVzaW5n
IGEgZ2l2ZW4gaWQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgaWQgdG8gc2VhcmNoIGZv
cgorICAgICAqIEByZXR1cm4gdGhlIGZvdW5kIG5vZGUgb3IgbnVsbCBpZiBub3QgZm91bmQgYXQg
YWxsCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldExhc3RFbnRyeUJ5SUQgPSBmdW5j
dGlvbiAoaWQpIHsKKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICBmb3IgKGluZGV4ID0gdGhp
cy5tZXNoZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkgeworICAgICAgICAgICAg
aWYgKHRoaXMubWVzaGVzW2luZGV4XS5pZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5tZXNoZXNbaW5kZXhdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGZvciAoaW5kZXggPSB0aGlzLnRyYW5zZm9ybU5vZGVzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7
IGluZGV4LS0pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5vZGVzW2luZGV4XS5p
ZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Ob2Rlc1tp
bmRleF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbmRleCA9IHRo
aXMuY2FtZXJhcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5jYW1lcmFzW2luZGV4XS5pZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5jYW1lcmFzW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBmb3IgKGluZGV4ID0gdGhpcy5saWdodHMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5k
ZXgtLSkgeworICAgICAgICAgICAgaWYgKHRoaXMubGlnaHRzW2luZGV4XS5pZCA9PT0gaWQpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saWdodHNbaW5kZXhdOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAg
ICogR2V0cyBhIG5vZGUgKE1lc2gsIENhbWVyYSwgTGlnaHQpIHVzaW5nIGEgZ2l2ZW4gaWQKKyAg
ICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgaWQgdG8gc2VhcmNoIGZvcgorICAgICAqIEByZXR1
cm4gdGhlIGZvdW5kIG5vZGUgb3IgbnVsbCBpZiBub3QgZm91bmQgYXQgYWxsCisgICAgICovCisg
ICAgU2NlbmUucHJvdG90eXBlLmdldE5vZGVCeUlEID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAg
IHZhciBtZXNoID0gdGhpcy5nZXRNZXNoQnlJRChpZCk7CisgICAgICAgIGlmIChtZXNoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gbWVzaDsKKyAgICAgICAgfQorICAgICAgICB2YXIgdHJhbnNmb3Jt
Tm9kZSA9IHRoaXMuZ2V0VHJhbnNmb3JtTm9kZUJ5SUQoaWQpOworICAgICAgICBpZiAodHJhbnNm
b3JtTm9kZSkgeworICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybU5vZGU7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIGxpZ2h0ID0gdGhpcy5nZXRMaWdodEJ5SUQoaWQpOworICAgICAgICBpZiAo
bGlnaHQpIHsKKyAgICAgICAgICAgIHJldHVybiBsaWdodDsKKyAgICAgICAgfQorICAgICAgICB2
YXIgY2FtZXJhID0gdGhpcy5nZXRDYW1lcmFCeUlEKGlkKTsKKyAgICAgICAgaWYgKGNhbWVyYSkg
eworICAgICAgICAgICAgcmV0dXJuIGNhbWVyYTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYm9u
ZSA9IHRoaXMuZ2V0Qm9uZUJ5SUQoaWQpOworICAgICAgICBpZiAoYm9uZSkgeworICAgICAgICAg
ICAgcmV0dXJuIGJvbmU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIGEgbm9kZSAoTWVzaCwgQ2FtZXJhLCBMaWdodCkgdXNpbmcg
YSBnaXZlbiBuYW1lCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSB0byBzZWFy
Y2ggZm9yCisgICAgICogQHJldHVybiB0aGUgZm91bmQgbm9kZSBvciBudWxsIGlmIG5vdCBmb3Vu
ZCBhdCBhbGwuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldE5vZGVCeU5hbWUgPSBm
dW5jdGlvbiAobmFtZSkgeworICAgICAgICB2YXIgbWVzaCA9IHRoaXMuZ2V0TWVzaEJ5TmFtZShu
YW1lKTsKKyAgICAgICAgaWYgKG1lc2gpIHsKKyAgICAgICAgICAgIHJldHVybiBtZXNoOworICAg
ICAgICB9CisgICAgICAgIHZhciB0cmFuc2Zvcm1Ob2RlID0gdGhpcy5nZXRUcmFuc2Zvcm1Ob2Rl
QnlOYW1lKG5hbWUpOworICAgICAgICBpZiAodHJhbnNmb3JtTm9kZSkgeworICAgICAgICAgICAg
cmV0dXJuIHRyYW5zZm9ybU5vZGU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGxpZ2h0ID0gdGhp
cy5nZXRMaWdodEJ5TmFtZShuYW1lKTsKKyAgICAgICAgaWYgKGxpZ2h0KSB7CisgICAgICAgICAg
ICByZXR1cm4gbGlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuZ2V0
Q2FtZXJhQnlOYW1lKG5hbWUpOworICAgICAgICBpZiAoY2FtZXJhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gY2FtZXJhOworICAgICAgICB9CisgICAgICAgIHZhciBib25lID0gdGhpcy5nZXRCb25l
QnlOYW1lKG5hbWUpOworICAgICAgICBpZiAoYm9uZSkgeworICAgICAgICAgICAgcmV0dXJuIGJv
bmU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXRzIGEgbWVzaCB1c2luZyBhIGdpdmVuIG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBk
ZWZpbmVzIHRoZSBuYW1lIHRvIHNlYXJjaCBmb3IKKyAgICAgKiBAcmV0dXJuIHRoZSBmb3VuZCBt
ZXNoIG9yIG51bGwgaWYgbm90IGZvdW5kIGF0IGFsbC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90
b3R5cGUuZ2V0TWVzaEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAg
ICAgICAgIGlmICh0aGlzLm1lc2hlc1tpbmRleF0ubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLm1lc2hlc1tpbmRleF07CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEg
dHJhbnNmb3JtIG5vZGUgdXNpbmcgYSBnaXZlbiBuYW1lCisgICAgICogQHBhcmFtIG5hbWUgZGVm
aW5lcyB0aGUgbmFtZSB0byBzZWFyY2ggZm9yCisgICAgICogQHJldHVybiB0aGUgZm91bmQgdHJh
bnNmb3JtIG5vZGUgb3IgbnVsbCBpZiBub3QgZm91bmQgYXQgYWxsLgorICAgICAqLworICAgIFNj
ZW5lLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1Ob2RlQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHsK
KyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMudHJhbnNmb3JtTm9kZXMu
bGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1Ob2Rlc1tp
bmRleF0ubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5z
Zm9ybU5vZGVzW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBza2VsZXRvbiB1c2luZyBh
IGdpdmVuIGlkIChpZiBtYW55IGFyZSBmb3VuZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHBpY2sgdGhl
IGxhc3Qgb25lKQorICAgICAqIEBwYXJhbSBpZCBkZWZpbmVzIHRoZSBpZCB0byBzZWFyY2ggZm9y
CisgICAgICogQHJldHVybiB0aGUgZm91bmQgc2tlbGV0b24gb3IgbnVsbCBpZiBub3QgZm91bmQg
YXQgYWxsLgorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRMYXN0U2tlbGV0b25CeUlE
ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gdGhpcy5za2VsZXRv
bnMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuc2tlbGV0b25zW2luZGV4XS5pZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5za2VsZXRvbnNbaW5kZXhdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIHNrZWxldG9uIHVz
aW5nIGEgZ2l2ZW4gYXV0byBnZW5lcmF0ZWQgdW5pcXVlIGlkCisgICAgICogQHBhcmFtICB1bmlx
dWVJZCBkZWZpbmVzIHRoZSB1bmlxdWUgaWQgdG8gc2VhcmNoIGZvcgorICAgICAqIEByZXR1cm4g
dGhlIGZvdW5kIHNrZWxldG9uIG9yIG51bGwgaWYgbm90IGZvdW5kIGF0IGFsbC4KKyAgICAgKi8K
KyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0U2tlbGV0b25CeVVuaXF1ZUlkID0gZnVuY3Rpb24gKHVu
aXF1ZUlkKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnNrZWxl
dG9ucy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnNrZWxldG9uc1tp
bmRleF0udW5pcXVlSWQgPT09IHVuaXF1ZUlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuc2tlbGV0b25zW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBza2VsZXRvbiB1c2lu
ZyBhIGdpdmVuIGlkIChpZiBtYW55IGFyZSBmb3VuZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHBpY2sg
dGhlIGZpcnN0IG9uZSkKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgaWQgdG8gc2VhcmNo
IGZvcgorICAgICAqIEByZXR1cm4gdGhlIGZvdW5kIHNrZWxldG9uIG9yIG51bGwgaWYgbm90IGZv
dW5kIGF0IGFsbC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0U2tlbGV0b25CeUlk
ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0
aGlzLnNrZWxldG9ucy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnNr
ZWxldG9uc1tpbmRleF0uaWQgPT09IGlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
c2tlbGV0b25zW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBza2VsZXRvbiB1c2luZyBh
IGdpdmVuIG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIHRvIHNlYXJj
aCBmb3IKKyAgICAgKiBAcmV0dXJuIHRoZSBmb3VuZCBza2VsZXRvbiBvciBudWxsIGlmIG5vdCBm
b3VuZCBhdCBhbGwuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldFNrZWxldG9uQnlO
YW1lID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IHRoaXMuc2tlbGV0b25zLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKHRo
aXMuc2tlbGV0b25zW2luZGV4XS5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuc2tlbGV0b25zW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBtb3JwaCB0
YXJnZXQgbWFuYWdlciAgdXNpbmcgYSBnaXZlbiBpZCAoaWYgbWFueSBhcmUgZm91bmQsIHRoaXMg
ZnVuY3Rpb24gd2lsbCBwaWNrIHRoZSBsYXN0IG9uZSkKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5l
cyB0aGUgaWQgdG8gc2VhcmNoIGZvcgorICAgICAqIEByZXR1cm4gdGhlIGZvdW5kIG1vcnBoIHRh
cmdldCBtYW5hZ2VyIG9yIG51bGwgaWYgbm90IGZvdW5kIGF0IGFsbC4KKyAgICAgKi8KKyAgICBT
Y2VuZS5wcm90b3R5cGUuZ2V0TW9ycGhUYXJnZXRNYW5hZ2VyQnlJZCA9IGZ1bmN0aW9uIChpZCkg
eworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5tb3JwaFRhcmdldE1h
bmFnZXJzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKHRoaXMubW9ycGhUYXJn
ZXRNYW5hZ2Vyc1tpbmRleF0udW5pcXVlSWQgPT09IGlkKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMubW9ycGhUYXJnZXRNYW5hZ2Vyc1tpbmRleF07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRz
IGEgbW9ycGggdGFyZ2V0IHVzaW5nIGEgZ2l2ZW4gaWQgKGlmIG1hbnkgYXJlIGZvdW5kLCB0aGlz
IGZ1bmN0aW9uIHdpbGwgcGljayB0aGUgZmlyc3Qgb25lKQorICAgICAqIEBwYXJhbSBpZCBkZWZp
bmVzIHRoZSBpZCB0byBzZWFyY2ggZm9yCisgICAgICogQHJldHVybiB0aGUgZm91bmQgbW9ycGgg
dGFyZ2V0IG9yIG51bGwgaWYgbm90IGZvdW5kIGF0IGFsbC4KKyAgICAgKi8KKyAgICBTY2VuZS5w
cm90b3R5cGUuZ2V0TW9ycGhUYXJnZXRCeUlkID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIGZv
ciAodmFyIG1hbmFnZXJJbmRleCA9IDA7IG1hbmFnZXJJbmRleCA8IHRoaXMubW9ycGhUYXJnZXRN
YW5hZ2Vycy5sZW5ndGg7ICsrbWFuYWdlckluZGV4KSB7CisgICAgICAgICAgICB2YXIgbW9ycGhU
YXJnZXRNYW5hZ2VyID0gdGhpcy5tb3JwaFRhcmdldE1hbmFnZXJzW21hbmFnZXJJbmRleF07Cisg
ICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbW9ycGhUYXJnZXRNYW5hZ2Vy
Lm51bVRhcmdldHM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gbW9y
cGhUYXJnZXRNYW5hZ2VyLmdldFRhcmdldChpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHRh
cmdldC5pZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5n
IGlmIHRoZSBnaXZlbiBtZXNoIGlzIGFjdGl2ZQorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMg
dGhlIG1lc2ggdG8gbG9vayBmb3IKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBtZXNoIGlz
IGluIHRoZSBhY3RpdmUgbGlzdAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5pc0FjdGl2
ZU1lc2ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICByZXR1cm4gKHRoaXMuX2FjdGl2ZU1l
c2hlcy5pbmRleE9mKG1lc2gpICE9PSAtMSk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoU2NlbmUucHJvdG90eXBlLCAidWlkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
UmV0dXJuIGEgdW5pcXVlIGlkIGFzIGEgc3RyaW5nIHdoaWNoIGNhbiBzZXJ2ZSBhcyBhbiBpZGVu
dGlmaWVyIGZvciB0aGUgc2NlbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl91aWQpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll91aWQgPSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb29scyJd
LlJhbmRvbUlkKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdWlk
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBBZGQgYW4gZXh0ZXJuYWx5IGF0
dGFjaGVkIGRhdGEgZnJvbSBpdHMga2V5LgorICAgICAqIFRoaXMgbWV0aG9kIGNhbGwgd2lsbCBm
YWlsIGFuZCByZXR1cm4gZmFsc2UsIGlmIHN1Y2gga2V5IGFscmVhZHkgZXhpc3RzLgorICAgICAq
IElmIHlvdSBkb24ndCBjYXJlIGFuZCBqdXN0IHdhbnQgdG8gZ2V0IHRoZSBkYXRhIG5vIG1hdHRl
ciB3aGF0LCB1c2UgdGhlIG1vcmUgY29udmVuaWVudCBnZXRPckFkZEV4dGVybmFsRGF0YVdpdGhG
YWN0b3J5KCkgbWV0aG9kLgorICAgICAqIEBwYXJhbSBrZXkgdGhlIHVuaXF1ZSBrZXkgdGhhdCBp
ZGVudGlmaWVzIHRoZSBkYXRhCisgICAgICogQHBhcmFtIGRhdGEgdGhlIGRhdGEgb2JqZWN0IHRv
IGFzc29jaWF0ZSB0byB0aGUga2V5IGZvciB0aGlzIEVuZ2luZSBpbnN0YW5jZQorICAgICAqIEBy
ZXR1cm4gdHJ1ZSBpZiBubyBzdWNoIGtleSB3ZXJlIGFscmVhZHkgcHJlc2VudCBhbmQgdGhlIGRh
dGEgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAg
U2NlbmUucHJvdG90eXBlLmFkZEV4dGVybmFsRGF0YSA9IGZ1bmN0aW9uIChrZXksIGRhdGEpIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9leHRlcm5hbERhdGEpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4
dGVybmFsRGF0YSA9IG5ldyBfTWlzY19zdHJpbmdEaWN0aW9uYXJ5X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlN0cmluZ0RpY3Rpb25hcnkiXSgpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLl9leHRlcm5hbERhdGEuYWRkKGtleSwgZGF0YSk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBHZXQgYW4gZXh0ZXJuYWx5IGF0dGFjaGVkIGRhdGEgZnJvbSBpdHMga2V5CisgICAg
ICogQHBhcmFtIGtleSB0aGUgdW5pcXVlIGtleSB0aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEKKyAg
ICAgKiBAcmV0dXJuIHRoZSBhc3NvY2lhdGVkIGRhdGEsIGlmIHByZXNlbnQgKGNhbiBiZSBudWxs
KSwgb3IgdW5kZWZpbmVkIGlmIG5vdCBwcmVzZW50CisgICAgICovCisgICAgU2NlbmUucHJvdG90
eXBlLmdldEV4dGVybmFsRGF0YSA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgaWYgKCF0aGlz
Ll9leHRlcm5hbERhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLl9leHRlcm5hbERhdGEuZ2V0KGtleSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXQgYW4gZXh0ZXJuYWx5IGF0dGFjaGVkIGRhdGEgZnJvbSBpdHMga2V5LCBj
cmVhdGUgaXQgdXNpbmcgYSBmYWN0b3J5IGlmIGl0J3Mgbm90IGFscmVhZHkgcHJlc2VudAorICAg
ICAqIEBwYXJhbSBrZXkgdGhlIHVuaXF1ZSBrZXkgdGhhdCBpZGVudGlmaWVzIHRoZSBkYXRhCisg
ICAgICogQHBhcmFtIGZhY3RvcnkgdGhlIGZhY3RvcnkgdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBj
cmVhdGUgdGhlIGluc3RhbmNlIGlmIGFuZCBvbmx5IGlmIGl0IGRvZXNuJ3QgZXhpc3RzCisgICAg
ICogQHJldHVybiB0aGUgYXNzb2NpYXRlZCBkYXRhLCBjYW4gYmUgbnVsbCBpZiB0aGUgZmFjdG9y
eSByZXR1cm5lZCBudWxsLgorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRPckFkZEV4
dGVybmFsRGF0YVdpdGhGYWN0b3J5ID0gZnVuY3Rpb24gKGtleSwgZmFjdG9yeSkgeworICAgICAg
ICBpZiAoIXRoaXMuX2V4dGVybmFsRGF0YSkgeworICAgICAgICAgICAgdGhpcy5fZXh0ZXJuYWxE
YXRhID0gbmV3IF9NaXNjX3N0cmluZ0RpY3Rpb25hcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siU3RyaW5nRGljdGlvbmFyeSJdKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXMuX2V4dGVybmFsRGF0YS5nZXRPckFkZFdpdGhGYWN0b3J5KGtleSwgZmFjdG9yeSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYW4gZXh0ZXJuYWx5IGF0dGFjaGVkIGRhdGEgZnJv
bSB0aGUgRW5naW5lIGluc3RhbmNlCisgICAgICogQHBhcmFtIGtleSB0aGUgdW5pcXVlIGtleSB0
aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGRhdGEg
d2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkLCBmYWxzZSBpZiBpdCBkb2Vzbid0IGV4aXN0CisgICAg
ICovCisgICAgU2NlbmUucHJvdG90eXBlLnJlbW92ZUV4dGVybmFsRGF0YSA9IGZ1bmN0aW9uIChr
ZXkpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2V4dGVybmFsRGF0YS5yZW1vdmUoa2V5KTsKKyAg
ICB9OworICAgIFNjZW5lLnByb3RvdHlwZS5fZXZhbHVhdGVTdWJNZXNoID0gZnVuY3Rpb24gKHN1
Yk1lc2gsIG1lc2gsIGluaXRpYWxNZXNoKSB7CisgICAgICAgIGlmIChpbml0aWFsTWVzaC5oYXNJ
bnN0YW5jZXMgfHwgaW5pdGlhbE1lc2guaXNBbkluc3RhbmNlIHx8IHRoaXMuZGlzcGF0Y2hBbGxT
dWJNZXNoZXNPZkFjdGl2ZU1lc2hlcyB8fCBtZXNoLmFsd2F5c1NlbGVjdEFzQWN0aXZlTWVzaCB8
fCBtZXNoLnN1Yk1lc2hlcy5sZW5ndGggPT09IDEgfHwgc3ViTWVzaC5pc0luRnJ1c3R1bSh0aGlz
Ll9mcnVzdHVtUGxhbmVzKSkgeworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRo
aXMuX2V2YWx1YXRlU3ViTWVzaFN0YWdlOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAg
ICAgICAgICAgIHZhciBzdGVwID0gX2FbX2ldOworICAgICAgICAgICAgICAgIHN0ZXAuYWN0aW9u
KG1lc2gsIHN1Yk1lc2gpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1hdGVyaWFs
ID0gc3ViTWVzaC5nZXRNYXRlcmlhbCgpOworICAgICAgICAgICAgaWYgKG1hdGVyaWFsICE9PSBu
dWxsICYmIG1hdGVyaWFsICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBSZW5k
ZXIgdGFyZ2V0cworICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5oYXNSZW5kZXJUYXJnZXRU
ZXh0dXJlcyAmJiBtYXRlcmlhbC5nZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyAhPSBudWxsKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcm9jZXNzZWRNYXRlcmlhbHMuaW5kZXhPZiht
YXRlcmlhbCkgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNz
ZWRNYXRlcmlhbHMucHVzaChtYXRlcmlhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9yZW5kZXJUYXJnZXRzLmNvbmNhdFdpdGhOb0R1cGxpY2F0ZShtYXRlcmlhbC5nZXRSZW5kZXJU
YXJnZXRUZXh0dXJlcygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAvLyBEaXNwYXRjaAorICAgICAgICAgICAgICAgIHRoaXMuX2Fj
dGl2ZUluZGljZXMuYWRkQ291bnQoc3ViTWVzaC5pbmRleENvdW50LCBmYWxzZSk7CisgICAgICAg
ICAgICAgICAgdGhpcy5fcmVuZGVyaW5nTWFuYWdlci5kaXNwYXRjaChzdWJNZXNoLCBtZXNoLCBt
YXRlcmlhbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIENsZWFyIHRoZSBwcm9jZXNzZWQgbWF0ZXJpYWxzIHNtYXJ0IGFycmF5IHByZXZlbnRpbmcg
cmV0ZW50aW9uIHBvaW50IGluIG1hdGVyaWFsIGRpc3Bvc2UuCisgICAgICovCisgICAgU2NlbmUu
cHJvdG90eXBlLmZyZWVQcm9jZXNzZWRNYXRlcmlhbHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX3Byb2Nlc3NlZE1hdGVyaWFscy5kaXNwb3NlKCk7CisgICAgfTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoU2NlbmUucHJvdG90eXBlLCAiYmxvY2tmcmVlQWN0aXZlTWVzaGVzQW5k
UmVuZGVyaW5nR3JvdXBzIiwgeworICAgICAgICAvKiogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBi
bG9ja2luZyBhbGwgdGhlIGNhbGxzIHRvIGZyZWVBY3RpdmVNZXNoZXMgYW5kIGZyZWVSZW5kZXJp
bmdHcm91cHMKKyAgICAgICAgICogSXQgY2FuIGJlIHVzZWQgaW4gb3JkZXIgdG8gcHJldmVudCBn
b2luZyB0aHJvdWdoIG1ldGhvZHMgZnJlZVJlbmRlcmluZ0dyb3VwcyBhbmQgZnJlZUFjdGl2ZU1l
c2hlcyBzZXZlcmFsIHRpbWVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UKKyAgICAgICAgICogd2hl
biBkaXNwb3Npbmcgc2V2ZXJhbCBtZXNoZXMgaW4gYSByb3cgb3IgYSBoaWVyYXJjaHkgb2YgbWVz
aGVzLgorICAgICAgICAgKiBXaGVuIHVzZWQsIGl0IGlzIHRoZSByZXNwb25zYWJpbGl0eSBvZiB0
aGUgdXNlciB0byBibG9ja2ZyZWVBY3RpdmVNZXNoZXNBbmRSZW5kZXJpbmdHcm91cHMgYmFjayB0
byBmYWxzZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3ByZXZlbnRGcmVlQWN0aXZlTWVzaGVzQW5kUmVuZGVyaW5nR3Jv
dXBzOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX3ByZXZlbnRGcmVlQWN0aXZlTWVzaGVzQW5kUmVuZGVyaW5nR3JvdXBz
ID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuZnJlZUFjdGl2ZU1l
c2hlcygpOworICAgICAgICAgICAgICAgIHRoaXMuZnJlZVJlbmRlcmluZ0dyb3VwcygpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fcHJldmVudEZyZWVBY3RpdmVNZXNoZXNBbmRS
ZW5kZXJpbmdHcm91cHMgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAg
ICogQ2xlYXIgdGhlIGFjdGl2ZSBtZXNoZXMgc21hcnQgYXJyYXkgcHJldmVudGluZyByZXRlbnRp
b24gcG9pbnQgaW4gbWVzaCBkaXNwb3NlLgorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5m
cmVlQWN0aXZlTWVzaGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5ibG9ja2Zy
ZWVBY3RpdmVNZXNoZXNBbmRSZW5kZXJpbmdHcm91cHMpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9hY3RpdmVNZXNoZXMuZGlzcG9zZSgpOworICAgICAg
ICBpZiAodGhpcy5hY3RpdmVDYW1lcmEgJiYgdGhpcy5hY3RpdmVDYW1lcmEuX2FjdGl2ZU1lc2hl
cykgeworICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmEuX2FjdGl2ZU1lc2hlcy5kaXNwb3Nl
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FtZXJhcykgeworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFjdGl2ZUNhbWVyYXMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICB2YXIgYWN0aXZlQ2FtZXJhID0gdGhpcy5hY3RpdmVDYW1lcmFz
W2ldOworICAgICAgICAgICAgICAgIGlmIChhY3RpdmVDYW1lcmEgJiYgYWN0aXZlQ2FtZXJhLl9h
Y3RpdmVNZXNoZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlQ2FtZXJhLl9hY3RpdmVN
ZXNoZXMuZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ2xlYXIgdGhlIGluZm8gcmVsYXRlZCB0byBy
ZW5kZXJpbmcgZ3JvdXBzIHByZXZlbnRpbmcgcmV0ZW50aW9uIHBvaW50cyBkdXJpbmcgZGlzcG9z
ZS4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZnJlZVJlbmRlcmluZ0dyb3VwcyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuYmxvY2tmcmVlQWN0aXZlTWVzaGVzQW5kUmVu
ZGVyaW5nR3JvdXBzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX3JlbmRlcmluZ01hbmFnZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlcmlu
Z01hbmFnZXIuZnJlZVJlbmRlcmluZ0dyb3VwcygpOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLnRleHR1cmVzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4
dHVyZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMu
dGV4dHVyZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS5yZW5k
ZXJMaXN0KSB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZnJlZVJlbmRlcmluZ0dyb3Vw
cygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuX2lzSW5JbnRlcm1lZGlh
dGVSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm1l
ZGlhdGVSZW5kZXJpbmc7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVc2UgdGhpcyBmdW5jdGlv
biB0byBzdG9wIGV2YWx1YXRpbmcgYWN0aXZlIG1lc2hlcy4gVGhlIGN1cnJlbnQgbGlzdCB3aWxs
IGJlIGtlZXAgYWxpdmUgYmV0d2VlbiBmcmFtZXMKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVu
dCBzY2VuZQorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5mcmVlemVBY3RpdmVNZXNoZXMg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5hY3RpdmVDYW1lcmEpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fZnJ1c3R1
bVBsYW5lcykgeworICAgICAgICAgICAgdGhpcy5zZXRUcmFuc2Zvcm1NYXRyaXgodGhpcy5hY3Rp
dmVDYW1lcmEuZ2V0Vmlld01hdHJpeCgpLCB0aGlzLmFjdGl2ZUNhbWVyYS5nZXRQcm9qZWN0aW9u
TWF0cml4KCkpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2V2YWx1YXRlQWN0aXZlTWVzaGVz
KCk7CisgICAgICAgIHRoaXMuX2FjdGl2ZU1lc2hlc0Zyb3plbiA9IHRydWU7CisgICAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9hY3RpdmVNZXNoZXMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICB0aGlzLl9hY3RpdmVNZXNoZXMuZGF0YVtpbmRleF0uX2ZyZWV6
ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmVzdGFydCBldmFsdWF0aW5nIGFjdGl2ZSBtZXNo
ZXMgb24gZXZlcnkgZnJhbWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBzY2VuZQorICAg
ICAqLworICAgIFNjZW5lLnByb3RvdHlwZS51bmZyZWV6ZUFjdGl2ZU1lc2hlcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubWVzaGVzLmxl
bmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLm1lc2hlc1tpbmRl
eF07CisgICAgICAgICAgICBpZiAobWVzaC5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mbykg
eworICAgICAgICAgICAgICAgIG1lc2guX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2lz
QWN0aXZlID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2FjdGl2ZU1lc2hlcy5sZW5ndGg7IGluZGV4Kysp
IHsKKyAgICAgICAgICAgIHRoaXMuX2FjdGl2ZU1lc2hlcy5kYXRhW2luZGV4XS5fdW5GcmVlemUo
KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hY3RpdmVNZXNoZXNGcm96ZW4gPSBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBTY2VuZS5wcm90b3R5cGUuX2V2YWx1
YXRlQWN0aXZlTWVzaGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fYWN0aXZl
TWVzaGVzRnJvemVuICYmIHRoaXMuX2FjdGl2ZU1lc2hlcy5sZW5ndGgpIHsKKyAgICAgICAgICAg
IHZhciBsZW5fMSA9IHRoaXMuX2FjdGl2ZU1lc2hlcy5sZW5ndGg7CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxlbl8xOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbWVzaCA9
IHRoaXMuX2FjdGl2ZU1lc2hlcy5kYXRhW2ldOworICAgICAgICAgICAgICAgIG1lc2guY29tcHV0
ZVdvcmxkTWF0cml4KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMub25CZWZvcmVBY3RpdmVNZXNoZXNFdmFsdWF0
aW9uT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIHRoaXMuYWN0aXZl
Q2FtZXJhLl9hY3RpdmVNZXNoZXMucmVzZXQoKTsKKyAgICAgICAgdGhpcy5fYWN0aXZlTWVzaGVz
LnJlc2V0KCk7CisgICAgICAgIHRoaXMuX3JlbmRlcmluZ01hbmFnZXIucmVzZXQoKTsKKyAgICAg
ICAgdGhpcy5fcHJvY2Vzc2VkTWF0ZXJpYWxzLnJlc2V0KCk7CisgICAgICAgIHRoaXMuX2FjdGl2
ZVBhcnRpY2xlU3lzdGVtcy5yZXNldCgpOworICAgICAgICB0aGlzLl9hY3RpdmVTa2VsZXRvbnMu
cmVzZXQoKTsKKyAgICAgICAgdGhpcy5fc29mdHdhcmVTa2lubmVkTWVzaGVzLnJlc2V0KCk7Cisg
ICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9iZWZvcmVFdmFsdWF0ZUFjdGl2ZU1l
c2hTdGFnZTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBzdGVwID0g
X2FbX2ldOworICAgICAgICAgICAgc3RlcC5hY3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBEZXRlcm1pbmUgbWVzaCBjYW5kaWRhdGVzCisgICAgICAgIHZhciBtZXNoZXMgPSB0aGlzLmdl
dEFjdGl2ZU1lc2hDYW5kaWRhdGVzKCk7CisgICAgICAgIC8vIENoZWNrIGVhY2ggbWVzaAorICAg
ICAgICB2YXIgbGVuID0gbWVzaGVzLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBsZW47IGkrKykgeworICAgICAgICAgICAgdmFyIG1lc2ggPSBtZXNoZXMuZGF0YVtpXTsKKyAg
ICAgICAgICAgIGlmIChtZXNoLmlzQmxvY2tlZCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fdG90YWxWZXJ0aWNlcy5hZGRDb3Vu
dChtZXNoLmdldFRvdGFsVmVydGljZXMoKSwgZmFsc2UpOworICAgICAgICAgICAgaWYgKCFtZXNo
LmlzUmVhZHkoKSB8fCAhbWVzaC5pc0VuYWJsZWQoKSB8fCBtZXNoLnNjYWxpbmcubGVuZ3RoU3F1
YXJlZCgpID09PSAwKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtZXNoLmNvbXB1dGVXb3JsZE1hdHJpeCgpOworICAgICAgICAgICAgLy8g
SW50ZXJzZWN0aW9ucworICAgICAgICAgICAgaWYgKG1lc2guYWN0aW9uTWFuYWdlciAmJiBtZXNo
LmFjdGlvbk1hbmFnZXIuaGFzU3BlY2lmaWNUcmlnZ2VyczIoX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25JbnRlcnNl
Y3Rpb25FbnRlclRyaWdnZXIsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjBfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uSW50ZXJzZWN0aW9uRXhpdFRyaWdnZXIp
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fbWVzaGVzRm9ySW50ZXJzZWN0aW9ucy5wdXNoTm9E
dXBsaWNhdGUobWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBTd2l0Y2ggdG8g
Y3VycmVudCBMT0QKKyAgICAgICAgICAgIHZhciBtZXNoVG9SZW5kZXIgPSB0aGlzLmN1c3RvbUxP
RFNlbGVjdG9yID8gdGhpcy5jdXN0b21MT0RTZWxlY3RvcihtZXNoLCB0aGlzLmFjdGl2ZUNhbWVy
YSkgOiBtZXNoLmdldExPRCh0aGlzLmFjdGl2ZUNhbWVyYSk7CisgICAgICAgICAgICBpZiAobWVz
aFRvUmVuZGVyID09PSB1bmRlZmluZWQgfHwgbWVzaFRvUmVuZGVyID09PSBudWxsKSB7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDb21w
dXRlIHdvcmxkIG1hdHJpeCBpZiBMT0QgaXMgYmlsbGJvYXJkCisgICAgICAgICAgICBpZiAobWVz
aFRvUmVuZGVyICE9PSBtZXNoICYmIG1lc2hUb1JlbmRlci5iaWxsYm9hcmRNb2RlICE9PSBfTWVz
aGVzX3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVHJhbnNmb3Jt
Tm9kZSJdLkJJTExCT0FSRE1PREVfTk9ORSkgeworICAgICAgICAgICAgICAgIG1lc2hUb1JlbmRl
ci5jb21wdXRlV29ybGRNYXRyaXgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lc2gu
X3ByZUFjdGl2YXRlKCk7CisgICAgICAgICAgICBpZiAobWVzaC5pc1Zpc2libGUgJiYgbWVzaC52
aXNpYmlsaXR5ID4gMCAmJiAoKG1lc2gubGF5ZXJNYXNrICYgdGhpcy5hY3RpdmVDYW1lcmEubGF5
ZXJNYXNrKSAhPT0gMCkgJiYgKG1lc2guYWx3YXlzU2VsZWN0QXNBY3RpdmVNZXNoIHx8IG1lc2gu
aXNJbkZydXN0dW0odGhpcy5fZnJ1c3R1bVBsYW5lcykpKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fYWN0aXZlTWVzaGVzLnB1c2gobWVzaCk7CisgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVD
YW1lcmEuX2FjdGl2ZU1lc2hlcy5wdXNoKG1lc2gpOworICAgICAgICAgICAgICAgIGlmIChtZXNo
VG9SZW5kZXIgIT09IG1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzaFRvUmVuZGVyLl9h
Y3RpdmF0ZSh0aGlzLl9yZW5kZXJJZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAobWVzaC5fYWN0aXZhdGUodGhpcy5fcmVuZGVySWQsIGZhbHNlKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1lc2guaXNBbkluc3RhbmNlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtZXNoVG9SZW5kZXIuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8u
X29ubHlGb3JJbnN0YW5jZXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBtZXNoVG9SZW5kZXIuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8u
X2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlTWVzaCht
ZXNoLCBtZXNoVG9SZW5kZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBt
ZXNoLl9wb3N0QWN0aXZhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0
aGlzLm9uQWZ0ZXJBY3RpdmVNZXNoZXNFdmFsdWF0aW9uT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZl
cnModGhpcyk7CisgICAgICAgIC8vIFBhcnRpY2xlIHN5c3RlbXMKKyAgICAgICAgaWYgKHRoaXMu
cGFydGljbGVzRW5hYmxlZCkgeworICAgICAgICAgICAgdGhpcy5vbkJlZm9yZVBhcnRpY2xlc1Jl
bmRlcmluZ09ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICAgICAgZm9y
ICh2YXIgcGFydGljbGVJbmRleCA9IDA7IHBhcnRpY2xlSW5kZXggPCB0aGlzLnBhcnRpY2xlU3lz
dGVtcy5sZW5ndGg7IHBhcnRpY2xlSW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBwYXJ0
aWNsZVN5c3RlbSA9IHRoaXMucGFydGljbGVTeXN0ZW1zW3BhcnRpY2xlSW5kZXhdOworICAgICAg
ICAgICAgICAgIGlmICghcGFydGljbGVTeXN0ZW0uaXNTdGFydGVkKCkgfHwgIXBhcnRpY2xlU3lz
dGVtLmVtaXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBlbWl0dGVyID0gcGFydGljbGVTeXN0ZW0uZW1p
dHRlcjsKKyAgICAgICAgICAgICAgICBpZiAoIWVtaXR0ZXIucG9zaXRpb24gfHwgZW1pdHRlci5p
c0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVQYXJ0aWNsZVN5
c3RlbXMucHVzaChwYXJ0aWNsZVN5c3RlbSk7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xl
U3lzdGVtLmFuaW1hdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nTWFu
YWdlci5kaXNwYXRjaFBhcnRpY2xlcyhwYXJ0aWNsZVN5c3RlbSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5vbkFmdGVyUGFydGljbGVzUmVuZGVy
aW5nT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIFNjZW5lLnByb3RvdHlwZS5fYWN0aXZlTWVzaCA9IGZ1bmN0aW9uIChzb3VyY2VNZXNoLCBt
ZXNoKSB7CisgICAgICAgIGlmICh0aGlzLl9za2VsZXRvbnNFbmFibGVkICYmIG1lc2guc2tlbGV0
b24gIT09IG51bGwgJiYgbWVzaC5za2VsZXRvbiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5fYWN0aXZlU2tlbGV0b25zLnB1c2hOb0R1cGxpY2F0ZShtZXNoLnNrZWxldG9u
KSkgeworICAgICAgICAgICAgICAgIG1lc2guc2tlbGV0b24ucHJlcGFyZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKCFtZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycykgewor
ICAgICAgICAgICAgICAgIHRoaXMuX3NvZnR3YXJlU2tpbm5lZE1lc2hlcy5wdXNoTm9EdXBsaWNh
dGUobWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgX2kg
PSAwLCBfYSA9IHRoaXMuX2FjdGl2ZU1lc2hTdGFnZTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsK
KyAgICAgICAgICAgIHZhciBzdGVwID0gX2FbX2ldOworICAgICAgICAgICAgc3RlcC5hY3Rpb24o
c291cmNlTWVzaCwgbWVzaCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2ggIT09IHVuZGVm
aW5lZCAmJiBtZXNoICE9PSBudWxsCisgICAgICAgICAgICAmJiBtZXNoLnN1Yk1lc2hlcyAhPT0g
dW5kZWZpbmVkICYmIG1lc2guc3ViTWVzaGVzICE9PSBudWxsICYmIG1lc2guc3ViTWVzaGVzLmxl
bmd0aCA+IDApIHsKKyAgICAgICAgICAgIHZhciBzdWJNZXNoZXMgPSB0aGlzLmdldEFjdGl2ZVN1
Yk1lc2hDYW5kaWRhdGVzKG1lc2gpOworICAgICAgICAgICAgdmFyIGxlbiA9IHN1Yk1lc2hlcy5s
ZW5ndGg7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBzdWJNZXNoZXMuZGF0YVtpXTsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9ldmFsdWF0ZVN1Yk1lc2goc3ViTWVzaCwgbWVzaCwgc291cmNlTWVzaCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0
aGUgdHJhbnNmb3JtIG1hdHJpeCB0byB1cGRhdGUgZnJvbSB0aGUgY3VycmVudCBhY3RpdmUgY2Ft
ZXJhCisgICAgICogQHBhcmFtIGZvcmNlIGRlZmluZXMgYSBib29sZWFuIHVzZWQgdG8gZm9yY2Ug
dGhlIHVwZGF0ZSBldmVuIGlmIGNhY2hlIGlzIHVwIHRvIGRhdGUKKyAgICAgKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtTWF0cml4ID0gZnVuY3Rpb24gKGZvcmNlKSB7Cisg
ICAgICAgIGlmICghdGhpcy5hY3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLnNldFRyYW5zZm9ybU1hdHJpeCh0aGlzLmFjdGl2ZUNhbWVy
YS5nZXRWaWV3TWF0cml4KCksIHRoaXMuYWN0aXZlQ2FtZXJhLmdldFByb2plY3Rpb25NYXRyaXgo
Zm9yY2UpKTsKKyAgICB9OworICAgIFNjZW5lLnByb3RvdHlwZS5fYmluZEZyYW1lQnVmZmVyID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5hY3RpdmVDYW1lcmEgJiYgdGhpcy5hY3Rp
dmVDYW1lcmEuX211bHRpdmlld1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2Ft
ZXJhLl9tdWx0aXZpZXdUZXh0dXJlLl9iaW5kRnJhbWVCdWZmZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZUNhbWVyYSAmJiB0aGlzLmFjdGl2ZUNhbWVyYS5vdXRw
dXRSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHZhciB1c2VNdWx0aXZpZXcgPSB0aGlzLmdl
dEVuZ2luZSgpLmdldENhcHMoKS5tdWx0aXZpZXcgJiYgdGhpcy5hY3RpdmVDYW1lcmEub3V0cHV0
UmVuZGVyVGFyZ2V0ICYmIHRoaXMuYWN0aXZlQ2FtZXJhLm91dHB1dFJlbmRlclRhcmdldC5nZXRW
aWV3Q291bnQoKSA+IDE7CisgICAgICAgICAgICBpZiAodXNlTXVsdGl2aWV3KSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmEub3V0cHV0UmVuZGVyVGFyZ2V0Ll9iaW5kRnJhbWVC
dWZmZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHZhciBpbnRlcm5hbFRleHR1cmUgPSB0aGlzLmFjdGl2ZUNhbWVyYS5vdXRwdXRSZW5kZXJU
YXJnZXQuZ2V0SW50ZXJuYWxUZXh0dXJlKCk7CisgICAgICAgICAgICAgICAgaWYgKGludGVybmFs
VGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEVuZ2luZSgpLmJpbmRGcmFt
ZWJ1ZmZlcihpbnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yMl9fWyJMb2dnZXIiXS5FcnJvcigiQ2FtZXJhIGNvbnRhaW5zIGludmFs
aWQgY3VzdG9tRGVmYXVsdFJlbmRlclRhcmdldCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuZ2V0
RW5naW5lKCkucmVzdG9yZURlZmF1bHRGcmFtZWJ1ZmZlcigpOyAvLyBSZXN0b3JlIGJhY2sgYnVm
ZmVyIGlmIG5lZWRlZAorICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAg
IFNjZW5lLnByb3RvdHlwZS5fcmVuZGVyRm9yQ2FtZXJhID0gZnVuY3Rpb24gKGNhbWVyYSwgcmln
UGFyZW50KSB7CisgICAgICAgIGlmIChjYW1lcmEgJiYgY2FtZXJhLl9za2lwUmVuZGVyaW5nKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHRo
aXMuX2VuZ2luZTsKKyAgICAgICAgLy8gVXNlIF9hY3RpdmVDYW1lcmEgaW5zdGVhZCBvZiBhY3Rp
dmVDYW1lcmEgdG8gYXZvaWQgb25BY3RpdmVDYW1lcmFDaGFuZ2VkCisgICAgICAgIHRoaXMuX2Fj
dGl2ZUNhbWVyYSA9IGNhbWVyYTsKKyAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZUNhbWVyYSkgewor
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBY3RpdmUgY2FtZXJhIG5vdCBzZXQiKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBWaWV3cG9ydAorICAgICAgICBlbmdpbmUuc2V0Vmlld3BvcnQo
dGhpcy5hY3RpdmVDYW1lcmEudmlld3BvcnQpOworICAgICAgICAvLyBDYW1lcmEKKyAgICAgICAg
dGhpcy5yZXNldENhY2hlZE1hdGVyaWFsKCk7CisgICAgICAgIHRoaXMuX3JlbmRlcklkKys7Cisg
ICAgICAgIHZhciB1c2VNdWx0aXZpZXcgPSB0aGlzLmdldEVuZ2luZSgpLmdldENhcHMoKS5tdWx0
aXZpZXcgJiYgY2FtZXJhLm91dHB1dFJlbmRlclRhcmdldCAmJiBjYW1lcmEub3V0cHV0UmVuZGVy
VGFyZ2V0LmdldFZpZXdDb3VudCgpID4gMTsKKyAgICAgICAgaWYgKHVzZU11bHRpdmlldykgewor
ICAgICAgICAgICAgdGhpcy5zZXRUcmFuc2Zvcm1NYXRyaXgoY2FtZXJhLl9yaWdDYW1lcmFzWzBd
LmdldFZpZXdNYXRyaXgoKSwgY2FtZXJhLl9yaWdDYW1lcmFzWzBdLmdldFByb2plY3Rpb25NYXRy
aXgoKSwgY2FtZXJhLl9yaWdDYW1lcmFzWzFdLmdldFZpZXdNYXRyaXgoKSwgY2FtZXJhLl9yaWdD
YW1lcmFzWzFdLmdldFByb2plY3Rpb25NYXRyaXgoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybU1hdHJpeCgpOworICAgICAgICB9
CisgICAgICAgIHRoaXMub25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2Vy
dmVycyh0aGlzLmFjdGl2ZUNhbWVyYSk7CisgICAgICAgIC8vIE1lc2hlcworICAgICAgICB0aGlz
Ll9ldmFsdWF0ZUFjdGl2ZU1lc2hlcygpOworICAgICAgICAvLyBTb2Z0d2FyZSBza2lubmluZwor
ICAgICAgICBmb3IgKHZhciBzb2Z0d2FyZVNraW5uZWRNZXNoSW5kZXggPSAwOyBzb2Z0d2FyZVNr
aW5uZWRNZXNoSW5kZXggPCB0aGlzLl9zb2Z0d2FyZVNraW5uZWRNZXNoZXMubGVuZ3RoOyBzb2Z0
d2FyZVNraW5uZWRNZXNoSW5kZXgrKykgeworICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLl9z
b2Z0d2FyZVNraW5uZWRNZXNoZXMuZGF0YVtzb2Z0d2FyZVNraW5uZWRNZXNoSW5kZXhdOworICAg
ICAgICAgICAgbWVzaC5hcHBseVNrZWxldG9uKG1lc2guc2tlbGV0b24pOworICAgICAgICB9Cisg
ICAgICAgIC8vIFJlbmRlciB0YXJnZXRzCisgICAgICAgIHRoaXMub25CZWZvcmVSZW5kZXJUYXJn
ZXRzUmVuZGVyT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIGlmIChj
YW1lcmEuY3VzdG9tUmVuZGVyVGFyZ2V0cyAmJiBjYW1lcmEuY3VzdG9tUmVuZGVyVGFyZ2V0cy5s
ZW5ndGggPiAwKSB7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJUYXJnZXRzLmNvbmNhdFdpdGhO
b0R1cGxpY2F0ZShjYW1lcmEuY3VzdG9tUmVuZGVyVGFyZ2V0cyk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHJpZ1BhcmVudCAmJiByaWdQYXJlbnQuY3VzdG9tUmVuZGVyVGFyZ2V0cyAmJiByaWdQ
YXJlbnQuY3VzdG9tUmVuZGVyVGFyZ2V0cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB0aGlz
Ll9yZW5kZXJUYXJnZXRzLmNvbmNhdFdpdGhOb0R1cGxpY2F0ZShyaWdQYXJlbnQuY3VzdG9tUmVu
ZGVyVGFyZ2V0cyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29sbGVjdHMgcmVuZGVyIHRhcmdl
dHMgZnJvbSBleHRlcm5hbCBjb21wb25lbnRzLgorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9h
ID0gdGhpcy5fZ2F0aGVyQWN0aXZlQ2FtZXJhUmVuZGVyVGFyZ2V0c1N0YWdlOyBfaSA8IF9hLmxl
bmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIHN0ZXAgPSBfYVtfaV07CisgICAgICAgICAg
ICBzdGVwLmFjdGlvbih0aGlzLl9yZW5kZXJUYXJnZXRzKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5yZW5kZXJUYXJnZXRzRW5hYmxlZCkgeworICAgICAgICAgICAgdGhpcy5faW50ZXJt
ZWRpYXRlUmVuZGVyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHZhciBuZWVkUmViaW5kID0gZmFs
c2U7CisgICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyVGFyZ2V0cy5sZW5ndGggPiAwKSB7Cisg
ICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VG9vbHMiXS5TdGFydFBlcmZvcm1hbmNlQ291bnRlcigiUmVuZGVyIHRhcmdldHMiLCB0aGlzLl9y
ZW5kZXJUYXJnZXRzLmxlbmd0aCA+IDApOworICAgICAgICAgICAgICAgIGZvciAodmFyIHJlbmRl
ckluZGV4ID0gMDsgcmVuZGVySW5kZXggPCB0aGlzLl9yZW5kZXJUYXJnZXRzLmxlbmd0aDsgcmVu
ZGVySW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhp
cy5fcmVuZGVyVGFyZ2V0cy5kYXRhW3JlbmRlckluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJlbmRlclRhcmdldC5fc2hvdWxkUmVuZGVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3JlbmRlcklkKys7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzU3Bl
Y2lhbFJlbmRlclRhcmdldENhbWVyYSA9IHJlbmRlclRhcmdldC5hY3RpdmVDYW1lcmEgJiYgcmVu
ZGVyVGFyZ2V0LmFjdGl2ZUNhbWVyYSAhPT0gdGhpcy5hY3RpdmVDYW1lcmE7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZW5kZXJUYXJnZXQucmVuZGVyKGhhc1NwZWNpYWxSZW5kZXJUYXJnZXRD
YW1lcmEsIHRoaXMuZHVtcE5leHRSZW5kZXJUYXJnZXRzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5lZWRSZWJpbmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlRvb2xzIl0uRW5kUGVyZm9ybWFuY2VDb3VudGVyKCJSZW5kZXIgdGFyZ2V0cyIs
IHRoaXMuX3JlbmRlclRhcmdldHMubGVuZ3RoID4gMCk7CisgICAgICAgICAgICAgICAgdGhpcy5f
cmVuZGVySWQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIF9iID0gMCwg
X2MgPSB0aGlzLl9jYW1lcmFEcmF3UmVuZGVyVGFyZ2V0U3RhZ2U7IF9iIDwgX2MubGVuZ3RoOyBf
YisrKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBfY1tfYl07CisgICAgICAgICAgICAg
ICAgbmVlZFJlYmluZCA9IHN0ZXAuYWN0aW9uKHRoaXMuYWN0aXZlQ2FtZXJhKSB8fCBuZWVkUmVi
aW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5faW50ZXJtZWRpYXRlUmVuZGVy
aW5nID0gZmFsc2U7CisgICAgICAgICAgICAvLyBOZWVkIHRvIGJpbmQgaWYgc3ViLWNhbWVyYSBo
YXMgYW4gb3V0cHV0UmVuZGVyVGFyZ2V0IGVnLiBmb3Igd2ViWFIKKyAgICAgICAgICAgIGlmICh0
aGlzLmFjdGl2ZUNhbWVyYSAmJiB0aGlzLmFjdGl2ZUNhbWVyYS5vdXRwdXRSZW5kZXJUYXJnZXQp
IHsKKyAgICAgICAgICAgICAgICBuZWVkUmViaW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIFJlc3RvcmUgZnJhbWVidWZmZXIgYWZ0ZXIgcmVuZGVyaW5nIHRvIHRhcmdl
dHMKKyAgICAgICAgICAgIGlmIChuZWVkUmViaW5kKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
YmluZEZyYW1lQnVmZmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5vbkFmdGVyUmVuZGVyVGFyZ2V0c1JlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRo
aXMpOworICAgICAgICAvLyBQcmVwYXJlIEZyYW1lCisgICAgICAgIGlmICh0aGlzLnBvc3RQcm9j
ZXNzTWFuYWdlciAmJiAhY2FtZXJhLl9tdWx0aXZpZXdUZXh0dXJlKSB7CisgICAgICAgICAgICB0
aGlzLnBvc3RQcm9jZXNzTWFuYWdlci5fcHJlcGFyZUZyYW1lKCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gQmVmb3JlIENhbWVyYSBEcmF3CisgICAgICAgIGZvciAodmFyIF9kID0gMCwgX2UgPSB0
aGlzLl9iZWZvcmVDYW1lcmFEcmF3U3RhZ2U7IF9kIDwgX2UubGVuZ3RoOyBfZCsrKSB7CisgICAg
ICAgICAgICB2YXIgc3RlcCA9IF9lW19kXTsKKyAgICAgICAgICAgIHN0ZXAuYWN0aW9uKHRoaXMu
YWN0aXZlQ2FtZXJhKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZW5kZXIKKyAgICAgICAgdGhp
cy5vbkJlZm9yZURyYXdQaGFzZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAg
ICAgICB0aGlzLl9yZW5kZXJpbmdNYW5hZ2VyLnJlbmRlcihudWxsLCBudWxsLCB0cnVlLCB0cnVl
KTsKKyAgICAgICAgdGhpcy5vbkFmdGVyRHJhd1BoYXNlT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZl
cnModGhpcyk7CisgICAgICAgIC8vIEFmdGVyIENhbWVyYSBEcmF3CisgICAgICAgIGZvciAodmFy
IF9mID0gMCwgX2cgPSB0aGlzLl9hZnRlckNhbWVyYURyYXdTdGFnZTsgX2YgPCBfZy5sZW5ndGg7
IF9mKyspIHsKKyAgICAgICAgICAgIHZhciBzdGVwID0gX2dbX2ZdOworICAgICAgICAgICAgc3Rl
cC5hY3Rpb24odGhpcy5hY3RpdmVDYW1lcmEpOworICAgICAgICB9CisgICAgICAgIC8vIEZpbmFs
aXplIGZyYW1lCisgICAgICAgIGlmICh0aGlzLnBvc3RQcm9jZXNzTWFuYWdlciAmJiAhY2FtZXJh
Ll9tdWx0aXZpZXdUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzTWFuYWdl
ci5fZmluYWxpemVGcmFtZShjYW1lcmEuaXNJbnRlcm1lZGlhdGUpOworICAgICAgICB9CisgICAg
ICAgIC8vIFJlc2V0IHNvbWUgc3BlY2lhbCBhcnJheXMKKyAgICAgICAgdGhpcy5fcmVuZGVyVGFy
Z2V0cy5yZXNldCgpOworICAgICAgICB0aGlzLm9uQWZ0ZXJDYW1lcmFSZW5kZXJPYnNlcnZhYmxl
Lm5vdGlmeU9ic2VydmVycyh0aGlzLmFjdGl2ZUNhbWVyYSk7CisgICAgfTsKKyAgICBTY2VuZS5w
cm90b3R5cGUuX3Byb2Nlc3NTdWJDYW1lcmFzID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAg
ICBpZiAoY2FtZXJhLmNhbWVyYVJpZ01vZGUgPT09IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTBfX1siQ2FtZXJhIl0uUklHX01PREVfTk9ORSB8fCAoY2FtZXJhLm91
dHB1dFJlbmRlclRhcmdldCAmJiBjYW1lcmEub3V0cHV0UmVuZGVyVGFyZ2V0LmdldFZpZXdDb3Vu
dCgpID4gMSAmJiB0aGlzLmdldEVuZ2luZSgpLmdldENhcHMoKS5tdWx0aXZpZXcpKSB7CisgICAg
ICAgICAgICB0aGlzLl9yZW5kZXJGb3JDYW1lcmEoY2FtZXJhKTsKKyAgICAgICAgICAgIHRoaXMu
b25BZnRlclJlbmRlckNhbWVyYU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGNhbWVyYSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhbWVyYS5fdXNlTXVs
dGl2aWV3VG9TaW5nbGVWaWV3KSB7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJNdWx0aXZpZXdU
b1NpbmdsZVZpZXcoY2FtZXJhKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIHJpZyBjYW1lcmFzCisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4
IDwgY2FtZXJhLl9yaWdDYW1lcmFzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAg
IHRoaXMuX3JlbmRlckZvckNhbWVyYShjYW1lcmEuX3JpZ0NhbWVyYXNbaW5kZXhdLCBjYW1lcmEp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFVzZSBfYWN0aXZlQ2FtZXJh
IGluc3RlYWQgb2YgYWN0aXZlQ2FtZXJhIHRvIGF2b2lkIG9uQWN0aXZlQ2FtZXJhQ2hhbmdlZAor
ICAgICAgICB0aGlzLl9hY3RpdmVDYW1lcmEgPSBjYW1lcmE7CisgICAgICAgIHRoaXMuc2V0VHJh
bnNmb3JtTWF0cml4KHRoaXMuX2FjdGl2ZUNhbWVyYS5nZXRWaWV3TWF0cml4KCksIHRoaXMuX2Fj
dGl2ZUNhbWVyYS5nZXRQcm9qZWN0aW9uTWF0cml4KCkpOworICAgICAgICB0aGlzLm9uQWZ0ZXJS
ZW5kZXJDYW1lcmFPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhjYW1lcmEpOworICAgIH07Cisg
ICAgU2NlbmUucHJvdG90eXBlLl9jaGVja0ludGVyc2VjdGlvbnMgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9tZXNoZXNGb3JJbnRlcnNl
Y3Rpb25zLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHNvdXJjZU1lc2ggPSB0
aGlzLl9tZXNoZXNGb3JJbnRlcnNlY3Rpb25zLmRhdGFbaW5kZXhdOworICAgICAgICAgICAgaWYg
KCFzb3VyY2VNZXNoLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIGFjdGlvbkluZGV4ID0gMDsgc291
cmNlTWVzaC5hY3Rpb25NYW5hZ2VyICYmIGFjdGlvbkluZGV4IDwgc291cmNlTWVzaC5hY3Rpb25N
YW5hZ2VyLmFjdGlvbnMubGVuZ3RoOyBhY3Rpb25JbmRleCsrKSB7CisgICAgICAgICAgICAgICAg
dmFyIGFjdGlvbiA9IHNvdXJjZU1lc2guYWN0aW9uTWFuYWdlci5hY3Rpb25zW2FjdGlvbkluZGV4
XTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnRyaWdnZXIgPT09IF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09u
SW50ZXJzZWN0aW9uRW50ZXJUcmlnZ2VyIHx8IGFjdGlvbi50cmlnZ2VyID09PSBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkNvbnN0YW50cyJdLkFDVElP
Tl9PbkludGVyc2VjdGlvbkV4aXRUcmlnZ2VyKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBw
YXJhbWV0ZXJzID0gYWN0aW9uLmdldFRyaWdnZXJQYXJhbWV0ZXIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIG90aGVyTWVzaCA9IHBhcmFtZXRlcnMgaW5zdGFuY2VvZiBfTWVzaGVzX2Fic3Ry
YWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJBYnN0cmFjdE1lc2giXSA/IHBh
cmFtZXRlcnMgOiBwYXJhbWV0ZXJzLm1lc2g7CisgICAgICAgICAgICAgICAgICAgIHZhciBhcmVJ
bnRlcnNlY3RpbmcgPSBvdGhlck1lc2guaW50ZXJzZWN0c01lc2goc291cmNlTWVzaCwgcGFyYW1l
dGVycy51c2VQcmVjaXNlSW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGN1
cnJlbnRJbnRlcnNlY3Rpb25JblByb2dyZXNzID0gc291cmNlTWVzaC5faW50ZXJzZWN0aW9uc0lu
UHJvZ3Jlc3MuaW5kZXhPZihvdGhlck1lc2gpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJl
SW50ZXJzZWN0aW5nICYmIGN1cnJlbnRJbnRlcnNlY3Rpb25JblByb2dyZXNzID09PSAtMSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi50cmlnZ2VyID09PSBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkNvbnN0YW50cyJdLkFDVElP
Tl9PbkludGVyc2VjdGlvbkVudGVyVHJpZ2dlcikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFjdGlvbi5fZXhlY3V0ZUN1cnJlbnQoX0FjdGlvbnNfYWN0aW9uRXZlbnRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE2X19bIkFjdGlvbkV2ZW50Il0uQ3JlYXRlTmV3KHNvdXJjZU1lc2gs
IHVuZGVmaW5lZCwgb3RoZXJNZXNoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291
cmNlTWVzaC5faW50ZXJzZWN0aW9uc0luUHJvZ3Jlc3MucHVzaChvdGhlck1lc2gpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWN0
aW9uLnRyaWdnZXIgPT09IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjBfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uSW50ZXJzZWN0aW9uRXhpdFRyaWdnZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNZXNoLl9pbnRlcnNlY3Rpb25zSW5Q
cm9ncmVzcy5wdXNoKG90aGVyTWVzaCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFyZUludGVy
c2VjdGluZyAmJiBjdXJyZW50SW50ZXJzZWN0aW9uSW5Qcm9ncmVzcyA+IC0xKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvL1RoZXkgaW50ZXJzZWN0ZWQsIGFuZCBub3cgdGhleSBkb24ndC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vaXMgdGhpcyB0cmlnZ2VyIGFuIGV4aXQgdHJpZ2dl
cj8gZXhlY3V0ZSBhbiBldmVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24u
dHJpZ2dlciA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MF9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25JbnRlcnNlY3Rpb25FeGl0VHJpZ2dlcikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5fZXhlY3V0ZUN1cnJlbnQoX0FjdGlvbnNf
YWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkFjdGlvbkV2ZW50Il0u
Q3JlYXRlTmV3KHNvdXJjZU1lc2gsIHVuZGVmaW5lZCwgb3RoZXJNZXNoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIHRoaXMgaXMgYW4g
ZXhpdCB0cmlnZ2VyLCBvciBubyBleGl0IHRyaWdnZXIgZXhpc3RzLCByZW1vdmUgdGhlIGlkIGZy
b20gdGhlIGludGVyc2VjdGlvbiBpbiBwcm9ncmVzcyBhcnJheS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghc291cmNlTWVzaC5hY3Rpb25NYW5hZ2VyLmhhc1NwZWNpZmljVHJpZ2dlcihf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkNvbnN0YW50
cyJdLkFDVElPTl9PbkludGVyc2VjdGlvbkV4aXRUcmlnZ2VyLCBmdW5jdGlvbiAocGFyYW1ldGVy
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtZXRlck1lc2ggPSBwYXJh
bWV0ZXIgaW5zdGFuY2VvZiBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOV9fWyJBYnN0cmFjdE1lc2giXSA/IHBhcmFtZXRlciA6IHBhcmFtZXRlci5tZXNoOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlck1lc2ggPT09IHBhcmFtZXRl
ck1lc2g7CisgICAgICAgICAgICAgICAgICAgICAgICB9KSB8fCBhY3Rpb24udHJpZ2dlciA9PT0g
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJDb25zdGFu
dHMiXS5BQ1RJT05fT25JbnRlcnNlY3Rpb25FeGl0VHJpZ2dlcikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNvdXJjZU1lc2guX2ludGVyc2VjdGlvbnNJblByb2dyZXNzLnNwbGljZShj
dXJyZW50SW50ZXJzZWN0aW9uSW5Qcm9ncmVzcywgMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgU2NlbmUucHJv
dG90eXBlLl9hZHZhbmNlUGh5c2ljc0VuZ2luZVN0ZXAgPSBmdW5jdGlvbiAoc3RlcCkgeworICAg
ICAgICAvLyBEbyBub3RoaW5nLiBDb2RlIHdpbGwgYmUgcmVwbGFjZWQgaWYgcGh5c2ljcyBlbmdp
bmUgY29tcG9uZW50IGlzIHJlZmVyZW5jZWQKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgU2NlbmUucHJvdG90eXBlLl9hbmltYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBO
b3RoaW5nIHRvIGRvIGFzIGxvbmcgYXMgQW5pbWF0YWJsZSBoYXZlIG5vdCBiZWVuIGltcG9ydGVk
LgorICAgIH07CisgICAgLyoqIEV4ZWN1dGUgYWxsIGFuaW1hdGlvbnMgKGZvciBhIGZyYW1lKSAq
LworICAgIFNjZW5lLnByb3RvdHlwZS5hbmltYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAodGhpcy5fZW5naW5lLmlzRGV0ZXJtaW5pc3RpY0xvY2tTdGVwKCkpIHsKKyAgICAgICAgICAg
IHZhciBkZWx0YVRpbWUgPSBNYXRoLm1heChTY2VuZS5NaW5EZWx0YVRpbWUsIE1hdGgubWluKHRo
aXMuX2VuZ2luZS5nZXREZWx0YVRpbWUoKSwgU2NlbmUuTWF4RGVsdGFUaW1lKSkgKyB0aGlzLl90
aW1lQWNjdW11bGF0b3I7CisgICAgICAgICAgICB2YXIgZGVmYXVsdEZQUyA9ICg2MC4wIC8gMTAw
MC4wKTsKKyAgICAgICAgICAgIHZhciBkZWZhdWx0RnJhbWVUaW1lID0gdGhpcy5nZXREZXRlcm1p
bmlzdGljRnJhbWVUaW1lKCk7CisgICAgICAgICAgICB2YXIgc3RlcHNUYWtlbiA9IDA7CisgICAg
ICAgICAgICB2YXIgbWF4U3ViU3RlcHMgPSB0aGlzLl9lbmdpbmUuZ2V0TG9ja3N0ZXBNYXhTdGVw
cygpOworICAgICAgICAgICAgdmFyIGludGVybmFsU3RlcHMgPSBNYXRoLmZsb29yKGRlbHRhVGlt
ZSAvICgxMDAwICogZGVmYXVsdEZQUykpOworICAgICAgICAgICAgaW50ZXJuYWxTdGVwcyA9IE1h
dGgubWluKGludGVybmFsU3RlcHMsIG1heFN1YlN0ZXBzKTsKKyAgICAgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLm9uQmVmb3JlU3RlcE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJz
KHRoaXMpOworICAgICAgICAgICAgICAgIC8vIEFuaW1hdGlvbnMKKyAgICAgICAgICAgICAgICB0
aGlzLl9hbmltYXRpb25SYXRpbyA9IGRlZmF1bHRGcmFtZVRpbWUgKiBkZWZhdWx0RlBTOworICAg
ICAgICAgICAgICAgIHRoaXMuX2FuaW1hdGUoKTsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQWZ0
ZXJBbmltYXRpb25zT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgICAg
ICAgICAgLy8gUGh5c2ljcworICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2VQaHlzaWNzRW5n
aW5lU3RlcChkZWZhdWx0RnJhbWVUaW1lKTsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQWZ0ZXJT
dGVwT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgICAgICAgICAgdGhp
cy5fY3VycmVudFN0ZXBJZCsrOworICAgICAgICAgICAgICAgIHN0ZXBzVGFrZW4rKzsKKyAgICAg
ICAgICAgICAgICBkZWx0YVRpbWUgLT0gZGVmYXVsdEZyYW1lVGltZTsKKyAgICAgICAgICAgIH0g
d2hpbGUgKGRlbHRhVGltZSA+IDAgJiYgc3RlcHNUYWtlbiA8IGludGVybmFsU3RlcHMpOworICAg
ICAgICAgICAgdGhpcy5fdGltZUFjY3VtdWxhdG9yID0gZGVsdGFUaW1lIDwgMCA/IDAgOiBkZWx0
YVRpbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBBbmltYXRp
b25zCisgICAgICAgICAgICB2YXIgZGVsdGFUaW1lID0gdGhpcy51c2VDb25zdGFudEFuaW1hdGlv
bkRlbHRhVGltZSA/IDE2IDogTWF0aC5tYXgoU2NlbmUuTWluRGVsdGFUaW1lLCBNYXRoLm1pbih0
aGlzLl9lbmdpbmUuZ2V0RGVsdGFUaW1lKCksIFNjZW5lLk1heERlbHRhVGltZSkpOworICAgICAg
ICAgICAgdGhpcy5fYW5pbWF0aW9uUmF0aW8gPSBkZWx0YVRpbWUgKiAoNjAuMCAvIDEwMDAuMCk7
CisgICAgICAgICAgICB0aGlzLl9hbmltYXRlKCk7CisgICAgICAgICAgICB0aGlzLm9uQWZ0ZXJB
bmltYXRpb25zT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgICAgICAv
LyBQaHlzaWNzCisgICAgICAgICAgICB0aGlzLl9hZHZhbmNlUGh5c2ljc0VuZ2luZVN0ZXAoZGVs
dGFUaW1lKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVuZGVyIHRoZSBz
Y2VuZQorICAgICAqIEBwYXJhbSB1cGRhdGVDYW1lcmFzIGRlZmluZXMgYSBib29sZWFuIGluZGlj
YXRpbmcgaWYgY2FtZXJhcyBtdXN0IHVwZGF0ZSBhY2NvcmRpbmcgdG8gdGhlaXIgaW5wdXRzICh0
cnVlIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGlnbm9yZUFuaW1hdGlvbnMgZGVmaW5lcyBh
IGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhbmltYXRpb25zIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQg
KGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLnJlbmRlciA9
IGZ1bmN0aW9uICh1cGRhdGVDYW1lcmFzLCBpZ25vcmVBbmltYXRpb25zKSB7CisgICAgICAgIGlm
ICh1cGRhdGVDYW1lcmFzID09PSB2b2lkIDApIHsgdXBkYXRlQ2FtZXJhcyA9IHRydWU7IH0KKyAg
ICAgICAgaWYgKGlnbm9yZUFuaW1hdGlvbnMgPT09IHZvaWQgMCkgeyBpZ25vcmVBbmltYXRpb25z
ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHRoaXMuaXNEaXNwb3NlZCkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2ZyYW1lSWQrKzsKKyAgICAgICAgLy8g
UmVnaXN0ZXIgY29tcG9uZW50cyB0aGF0IGhhdmUgYmVlbiBhc3NvY2lhdGVkIGxhdGVseSB0byB0
aGUgc2NlbmUuCisgICAgICAgIHRoaXMuX3JlZ2lzdGVyVHJhbnNpZW50Q29tcG9uZW50cygpOwor
ICAgICAgICB0aGlzLl9hY3RpdmVQYXJ0aWNsZXMuZmV0Y2hOZXdGcmFtZSgpOworICAgICAgICB0
aGlzLl90b3RhbFZlcnRpY2VzLmZldGNoTmV3RnJhbWUoKTsKKyAgICAgICAgdGhpcy5fYWN0aXZl
SW5kaWNlcy5mZXRjaE5ld0ZyYW1lKCk7CisgICAgICAgIHRoaXMuX2FjdGl2ZUJvbmVzLmZldGNo
TmV3RnJhbWUoKTsKKyAgICAgICAgdGhpcy5fbWVzaGVzRm9ySW50ZXJzZWN0aW9ucy5yZXNldCgp
OworICAgICAgICB0aGlzLnJlc2V0Q2FjaGVkTWF0ZXJpYWwoKTsKKyAgICAgICAgdGhpcy5vbkJl
Zm9yZUFuaW1hdGlvbnNPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAg
Ly8gQWN0aW9ucworICAgICAgICBpZiAodGhpcy5hY3Rpb25NYW5hZ2VyKSB7CisgICAgICAgICAg
ICB0aGlzLmFjdGlvbk1hbmFnZXIucHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25FdmVyeUZy
YW1lVHJpZ2dlcik7CisgICAgICAgIH0KKyAgICAgICAgLy8gQW5pbWF0aW9ucworICAgICAgICBp
ZiAoIWlnbm9yZUFuaW1hdGlvbnMpIHsKKyAgICAgICAgICAgIHRoaXMuYW5pbWF0ZSgpOworICAg
ICAgICB9CisgICAgICAgIC8vIEJlZm9yZSBjYW1lcmEgdXBkYXRlIHN0ZXBzCisgICAgICAgIGZv
ciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9iZWZvcmVDYW1lcmFVcGRhdGVTdGFnZTsgX2kgPCBf
YS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBzdGVwID0gX2FbX2ldOworICAgICAg
ICAgICAgc3RlcC5hY3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICAvLyBVcGRhdGUgQ2FtZXJh
cworICAgICAgICBpZiAodXBkYXRlQ2FtZXJhcykgeworICAgICAgICAgICAgaWYgKHRoaXMuYWN0
aXZlQ2FtZXJhcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgY2FtZXJh
SW5kZXggPSAwOyBjYW1lcmFJbmRleCA8IHRoaXMuYWN0aXZlQ2FtZXJhcy5sZW5ndGg7IGNhbWVy
YUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuYWN0aXZl
Q2FtZXJhc1tjYW1lcmFJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGNhbWVyYS51cGRhdGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbWVyYS5jYW1lcmFSaWdNb2RlICE9PSBfQ2Ft
ZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNhbWVyYSJdLlJJR19N
T0RFX05PTkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJpZyBjYW1lcmFzCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgY2FtZXJhLl9y
aWdDYW1lcmFzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhbWVyYS5fcmlnQ2FtZXJhc1tpbmRleF0udXBkYXRlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZUNhbWVyYSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhLnVwZGF0ZSgpOworICAgICAgICAgICAgICAgIGlm
ICh0aGlzLmFjdGl2ZUNhbWVyYS5jYW1lcmFSaWdNb2RlICE9PSBfQ2FtZXJhc19jYW1lcmFfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNhbWVyYSJdLlJJR19NT0RFX05PTkUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gcmlnIGNhbWVyYXMKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYWN0aXZlQ2FtZXJhLl9yaWdDYW1lcmFzLmxl
bmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1l
cmEuX3JpZ0NhbWVyYXNbaW5kZXhdLnVwZGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEJl
Zm9yZSByZW5kZXIKKyAgICAgICAgdGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUubm90aWZ5
T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRFbmdpbmUoKTsK
KyAgICAgICAgaWYgKGVuZ2luZS5fc2hvdWxkT25seVVwZGF0ZUNhbWVyYXMoKSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FtZXJhcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBjYW1lcmFJbmRleF8xID0gMDsgY2FtZXJhSW5kZXhfMSA8IHRoaXMuYWN0aXZlQ2Ft
ZXJhcy5sZW5ndGg7IGNhbWVyYUluZGV4XzErKykgeworICAgICAgICAgICAgICAgICAgICB2YXIg
Y2FtZXJhID0gdGhpcy5hY3RpdmVDYW1lcmFzW2NhbWVyYUluZGV4XzFdOworICAgICAgICAgICAg
ICAgICAgICB0aGlzLnNldFRyYW5zZm9ybU1hdHJpeChjYW1lcmEuZ2V0Vmlld01hdHJpeCgpLCBj
YW1lcmEuZ2V0UHJvamVjdGlvbk1hdHJpeCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgY2FtZXJhID0g
dGhpcy5hY3RpdmVDYW1lcmE7CisgICAgICAgICAgICAgICAgdGhpcy5zZXRUcmFuc2Zvcm1NYXRy
aXgoY2FtZXJhLmdldFZpZXdNYXRyaXgoKSwgY2FtZXJhLmdldFByb2plY3Rpb25NYXRyaXgoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQ3VzdG9tcyByZW5kZXIgdGFyZ2V0cworICAgICAgICB0aGlzLm9uQmVmb3JlUmVuZGVyVGFy
Z2V0c1JlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB2YXIg
Y3VycmVudEFjdGl2ZUNhbWVyYSA9IHRoaXMuYWN0aXZlQ2FtZXJhOworICAgICAgICBpZiAodGhp
cy5yZW5kZXJUYXJnZXRzRW5hYmxlZCkgeworICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG9vbHMiXS5TdGFydFBlcmZvcm1hbmNlQ291bnRlcigi
Q3VzdG9tIHJlbmRlciB0YXJnZXRzIiwgdGhpcy5jdXN0b21SZW5kZXJUYXJnZXRzLmxlbmd0aCA+
IDApOworICAgICAgICAgICAgdGhpcy5faW50ZXJtZWRpYXRlUmVuZGVyaW5nID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGZvciAodmFyIGN1c3RvbUluZGV4ID0gMDsgY3VzdG9tSW5kZXggPCB0aGlzLmN1
c3RvbVJlbmRlclRhcmdldHMubGVuZ3RoOyBjdXN0b21JbmRleCsrKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHJlbmRlclRhcmdldCA9IHRoaXMuY3VzdG9tUmVuZGVyVGFyZ2V0c1tjdXN0b21JbmRl
eF07CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlclRhcmdldC5fc2hvdWxkUmVuZGVyKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVySWQrKzsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5hY3RpdmVDYW1lcmEgPSByZW5kZXJUYXJnZXQuYWN0aXZlQ2FtZXJhIHx8IHRoaXMu
YWN0aXZlQ2FtZXJhOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZlQ2FtZXJh
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFjdGl2ZSBjYW1l
cmEgbm90IHNldCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIFZpZXdwb3J0CisgICAgICAgICAgICAgICAgICAgIGVuZ2luZS5zZXRWaWV3cG9ydCh0aGlz
LmFjdGl2ZUNhbWVyYS52aWV3cG9ydCk7CisgICAgICAgICAgICAgICAgICAgIC8vIENhbWVyYQor
ICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybU1hdHJpeCgpOworICAgICAg
ICAgICAgICAgICAgICByZW5kZXJUYXJnZXQucmVuZGVyKGN1cnJlbnRBY3RpdmVDYW1lcmEgIT09
IHRoaXMuYWN0aXZlQ2FtZXJhLCB0aGlzLmR1bXBOZXh0UmVuZGVyVGFyZ2V0cyk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG9vbHMiXS5FbmRQZXJmb3JtYW5jZUNvdW50ZXIoIkN1
c3RvbSByZW5kZXIgdGFyZ2V0cyIsIHRoaXMuY3VzdG9tUmVuZGVyVGFyZ2V0cy5sZW5ndGggPiAw
KTsKKyAgICAgICAgICAgIHRoaXMuX2ludGVybWVkaWF0ZVJlbmRlcmluZyA9IGZhbHNlOworICAg
ICAgICAgICAgdGhpcy5fcmVuZGVySWQrKzsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXN0b3Jl
IGJhY2sgYnVmZmVyCisgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhID0gY3VycmVudEFjdGl2ZUNh
bWVyYTsKKyAgICAgICAgdGhpcy5fYmluZEZyYW1lQnVmZmVyKCk7CisgICAgICAgIHRoaXMub25B
ZnRlclJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsK
KyAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBfYyA9IHRoaXMuX2JlZm9yZUNsZWFyU3RhZ2U7IF9i
IDwgX2MubGVuZ3RoOyBfYisrKSB7CisgICAgICAgICAgICB2YXIgc3RlcCA9IF9jW19iXTsKKyAg
ICAgICAgICAgIHN0ZXAuYWN0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2xlYXIKKyAg
ICAgICAgaWYgKHRoaXMuYXV0b0NsZWFyRGVwdGhBbmRTdGVuY2lsIHx8IHRoaXMuYXV0b0NsZWFy
KSB7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUuY2xlYXIodGhpcy5jbGVhckNvbG9yLCB0aGlz
LmF1dG9DbGVhciB8fCB0aGlzLmZvcmNlV2lyZWZyYW1lIHx8IHRoaXMuZm9yY2VQb2ludHNDbG91
ZCwgdGhpcy5hdXRvQ2xlYXJEZXB0aEFuZFN0ZW5jaWwsIHRoaXMuYXV0b0NsZWFyRGVwdGhBbmRT
dGVuY2lsKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb2xsZWN0cyByZW5kZXIgdGFyZ2V0cyBm
cm9tIGV4dGVybmFsIGNvbXBvbmVudHMuCisgICAgICAgIGZvciAodmFyIF9kID0gMCwgX2UgPSB0
aGlzLl9nYXRoZXJSZW5kZXJUYXJnZXRzU3RhZ2U7IF9kIDwgX2UubGVuZ3RoOyBfZCsrKSB7Cisg
ICAgICAgICAgICB2YXIgc3RlcCA9IF9lW19kXTsKKyAgICAgICAgICAgIHN0ZXAuYWN0aW9uKHRo
aXMuX3JlbmRlclRhcmdldHMpOworICAgICAgICB9CisgICAgICAgIC8vIE11bHRpLWNhbWVyYXM/
CisgICAgICAgIGlmICh0aGlzLmFjdGl2ZUNhbWVyYXMubGVuZ3RoID4gMCkgeworICAgICAgICAg
ICAgZm9yICh2YXIgY2FtZXJhSW5kZXggPSAwOyBjYW1lcmFJbmRleCA8IHRoaXMuYWN0aXZlQ2Ft
ZXJhcy5sZW5ndGg7IGNhbWVyYUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FtZXJh
SW5kZXggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5jbGVhcihudWxs
LCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHRoaXMuX3Byb2Nlc3NTdWJDYW1lcmFzKHRoaXMuYWN0aXZlQ2FtZXJhc1tjYW1lcmFJbmRleF0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aWYgKCF0aGlzLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiTm8gY2FtZXJhIGRlZmluZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X3Byb2Nlc3NTdWJDYW1lcmFzKHRoaXMuYWN0aXZlQ2FtZXJhKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBJbnRlcnNlY3Rpb24gY2hlY2tzCisgICAgICAgIHRoaXMuX2NoZWNrSW50ZXJzZWN0aW9u
cygpOworICAgICAgICAvLyBFeGVjdXRlcyB0aGUgYWZ0ZXIgcmVuZGVyIHN0YWdlIGFjdGlvbnMu
CisgICAgICAgIGZvciAodmFyIF9mID0gMCwgX2cgPSB0aGlzLl9hZnRlclJlbmRlclN0YWdlOyBf
ZiA8IF9nLmxlbmd0aDsgX2YrKykgeworICAgICAgICAgICAgdmFyIHN0ZXAgPSBfZ1tfZl07Cisg
ICAgICAgICAgICBzdGVwLmFjdGlvbigpOworICAgICAgICB9CisgICAgICAgIC8vIEFmdGVyIHJl
bmRlcgorICAgICAgICBpZiAodGhpcy5hZnRlclJlbmRlcikgeworICAgICAgICAgICAgdGhpcy5h
ZnRlclJlbmRlcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMub25BZnRlclJlbmRlck9ic2Vy
dmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICAvLyBDbGVhbmluZworICAgICAg
ICBpZiAodGhpcy5fdG9CZURpc3Bvc2VkLmxlbmd0aCkgeworICAgICAgICAgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX3RvQmVEaXNwb3NlZC5sZW5ndGg7IGluZGV4KyspIHsK
KyAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX3RvQmVEaXNwb3NlZFtpbmRleF07Cisg
ICAgICAgICAgICAgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5kaXNw
b3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5fdG9CZURpc3Bvc2VkID0gW107CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuZHVtcE5l
eHRSZW5kZXJUYXJnZXRzKSB7CisgICAgICAgICAgICB0aGlzLmR1bXBOZXh0UmVuZGVyVGFyZ2V0
cyA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2FjdGl2ZUJvbmVzLmFkZENvdW50
KDAsIHRydWUpOworICAgICAgICB0aGlzLl9hY3RpdmVJbmRpY2VzLmFkZENvdW50KDAsIHRydWUp
OworICAgICAgICB0aGlzLl9hY3RpdmVQYXJ0aWNsZXMuYWRkQ291bnQoMCwgdHJ1ZSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBGcmVlemUgYWxsIG1hdGVyaWFscworICAgICAqIEEgZnJvemVu
IG1hdGVyaWFsIHdpbGwgbm90IGJlIHVwZGF0YWJsZSBidXQgc2hvdWxkIGJlIGZhc3RlciB0byBy
ZW5kZXIKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZnJlZXplTWF0ZXJpYWxzID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF0ZXJpYWxzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLm1hdGVyaWFsc1tpXS5mcmVlemUoKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogVW5mcmVlemUgYWxsIG1hdGVyaWFscwor
ICAgICAqIEEgZnJvemVuIG1hdGVyaWFsIHdpbGwgbm90IGJlIHVwZGF0YWJsZSBidXQgc2hvdWxk
IGJlIGZhc3RlciB0byByZW5kZXIKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUudW5mcmVl
emVNYXRlcmlhbHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5tYXRlcmlhbHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxz
W2ldLnVuZnJlZXplKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbGVh
c2VzIGFsbCBoZWxkIHJlc3NvdXJjZXMKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZGlz
cG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5iZWZvcmVSZW5kZXIgPSBudWxsOwor
ICAgICAgICB0aGlzLmFmdGVyUmVuZGVyID0gbnVsbDsKKyAgICAgICAgaWYgKF9FbmdpbmVzX2Vu
Z2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJFbmdpbmVTdG9yZSJdLl9M
YXN0Q3JlYXRlZFNjZW5lID09PSB0aGlzKSB7CisgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVT
dG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1siRW5naW5lU3RvcmUiXS5fTGFzdENy
ZWF0ZWRTY2VuZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5za2VsZXRvbnMgPSBb
XTsKKyAgICAgICAgdGhpcy5tb3JwaFRhcmdldE1hbmFnZXJzID0gW107CisgICAgICAgIHRoaXMu
X3RyYW5zaWVudENvbXBvbmVudHMgPSBbXTsKKyAgICAgICAgdGhpcy5faXNSZWFkeUZvck1lc2hT
dGFnZS5jbGVhcigpOworICAgICAgICB0aGlzLl9iZWZvcmVFdmFsdWF0ZUFjdGl2ZU1lc2hTdGFn
ZS5jbGVhcigpOworICAgICAgICB0aGlzLl9ldmFsdWF0ZVN1Yk1lc2hTdGFnZS5jbGVhcigpOwor
ICAgICAgICB0aGlzLl9hY3RpdmVNZXNoU3RhZ2UuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5fY2Ft
ZXJhRHJhd1JlbmRlclRhcmdldFN0YWdlLmNsZWFyKCk7CisgICAgICAgIHRoaXMuX2JlZm9yZUNh
bWVyYURyYXdTdGFnZS5jbGVhcigpOworICAgICAgICB0aGlzLl9iZWZvcmVSZW5kZXJUYXJnZXRE
cmF3U3RhZ2UuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5fYmVmb3JlUmVuZGVyaW5nR3JvdXBEcmF3
U3RhZ2UuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5fYmVmb3JlUmVuZGVyaW5nTWVzaFN0YWdlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMuX2FmdGVyUmVuZGVyaW5nTWVzaFN0YWdlLmNsZWFyKCk7Cisg
ICAgICAgIHRoaXMuX2FmdGVyUmVuZGVyaW5nR3JvdXBEcmF3U3RhZ2UuY2xlYXIoKTsKKyAgICAg
ICAgdGhpcy5fYWZ0ZXJDYW1lcmFEcmF3U3RhZ2UuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5fYWZ0
ZXJSZW5kZXJUYXJnZXREcmF3U3RhZ2UuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5fYWZ0ZXJSZW5k
ZXJTdGFnZS5jbGVhcigpOworICAgICAgICB0aGlzLl9iZWZvcmVDYW1lcmFVcGRhdGVTdGFnZS5j
bGVhcigpOworICAgICAgICB0aGlzLl9iZWZvcmVDbGVhclN0YWdlLmNsZWFyKCk7CisgICAgICAg
IHRoaXMuX2dhdGhlclJlbmRlclRhcmdldHNTdGFnZS5jbGVhcigpOworICAgICAgICB0aGlzLl9n
YXRoZXJBY3RpdmVDYW1lcmFSZW5kZXJUYXJnZXRzU3RhZ2UuY2xlYXIoKTsKKyAgICAgICAgdGhp
cy5fcG9pbnRlck1vdmVTdGFnZS5jbGVhcigpOworICAgICAgICB0aGlzLl9wb2ludGVyRG93blN0
YWdlLmNsZWFyKCk7CisgICAgICAgIHRoaXMuX3BvaW50ZXJVcFN0YWdlLmNsZWFyKCk7CisgICAg
ICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9jb21wb25lbnRzOyBfaSA8IF9hLmxlbmd0
aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IF9hW19pXTsKKyAgICAgICAg
ICAgIGNvbXBvbmVudC5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5pbXBvcnRl
ZE1lc2hlc0ZpbGVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIGlmICh0aGlzLnN0b3BBbGxBbmlt
YXRpb25zKSB7CisgICAgICAgICAgICB0aGlzLnN0b3BBbGxBbmltYXRpb25zKCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5yZXNldENhY2hlZE1hdGVyaWFsKCk7CisgICAgICAgIC8vIFNtYXJ0
IGFycmF5cworICAgICAgICBpZiAodGhpcy5hY3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgIHRo
aXMuYWN0aXZlQ2FtZXJhLl9hY3RpdmVNZXNoZXMuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhp
cy5hY3RpdmVDYW1lcmEgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2FjdGl2ZU1l
c2hlcy5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMuX3JlbmRlcmluZ01hbmFnZXIuZGlzcG9zZSgp
OworICAgICAgICB0aGlzLl9wcm9jZXNzZWRNYXRlcmlhbHMuZGlzcG9zZSgpOworICAgICAgICB0
aGlzLl9hY3RpdmVQYXJ0aWNsZVN5c3RlbXMuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9hY3Rp
dmVTa2VsZXRvbnMuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9zb2Z0d2FyZVNraW5uZWRNZXNo
ZXMuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9yZW5kZXJUYXJnZXRzLmRpc3Bvc2UoKTsKKyAg
ICAgICAgdGhpcy5fcmVnaXN0ZXJlZEZvckxhdGVBbmltYXRpb25CaW5kaW5ncy5kaXNwb3NlKCk7
CisgICAgICAgIHRoaXMuX21lc2hlc0ZvckludGVyc2VjdGlvbnMuZGlzcG9zZSgpOworICAgICAg
ICB0aGlzLl90b0JlRGlzcG9zZWQgPSBbXTsKKyAgICAgICAgLy8gQWJvcnQgYWN0aXZlIHJlcXVl
c3RzCisgICAgICAgIGZvciAodmFyIF9iID0gMCwgX2MgPSB0aGlzLl9hY3RpdmVSZXF1ZXN0czsg
X2IgPCBfYy5sZW5ndGg7IF9iKyspIHsKKyAgICAgICAgICAgIHZhciByZXF1ZXN0ID0gX2NbX2Jd
OworICAgICAgICAgICAgcmVxdWVzdC5hYm9ydCgpOworICAgICAgICB9CisgICAgICAgIC8vIEV2
ZW50cworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRo
aXMpOworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAg
dGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkFm
dGVyUmVuZGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQmVmb3JlUmVuZGVy
VGFyZ2V0c1JlbmRlck9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkFmdGVyUmVu
ZGVyVGFyZ2V0c1JlbmRlck9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkFmdGVy
U3RlcE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkJlZm9yZVN0ZXBPYnNlcnZh
YmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25CZWZvcmVBY3RpdmVNZXNoZXNFdmFsdWF0aW9u
T2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQWZ0ZXJBY3RpdmVNZXNoZXNFdmFs
dWF0aW9uT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQmVmb3JlUGFydGljbGVz
UmVuZGVyaW5nT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQWZ0ZXJQYXJ0aWNs
ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25CZWZvcmVEcmF3
UGhhc2VPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25BZnRlckRyYXdQaGFzZU9i
c2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkJlZm9yZUFuaW1hdGlvbnNPYnNlcnZh
YmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25BZnRlckFuaW1hdGlvbnNPYnNlcnZhYmxlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMub25EYXRhTG9hZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAg
ICAgICB0aGlzLm9uQmVmb3JlUmVuZGVyaW5nR3JvdXBPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAg
ICAgIHRoaXMub25BZnRlclJlbmRlcmluZ0dyb3VwT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAg
ICB0aGlzLm9uTWVzaEltcG9ydGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9u
QmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQWZ0
ZXJDYW1lcmFSZW5kZXJPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25SZWFkeU9i
c2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbk5ld0NhbWVyYUFkZGVkT2JzZXJ2YWJs
ZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQ2FtZXJhUmVtb3ZlZE9ic2VydmFibGUuY2xlYXIo
KTsKKyAgICAgICAgdGhpcy5vbk5ld0xpZ2h0QWRkZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAg
ICAgIHRoaXMub25MaWdodFJlbW92ZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMu
b25OZXdHZW9tZXRyeUFkZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uR2Vv
bWV0cnlSZW1vdmVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uTmV3VHJhbnNm
b3JtTm9kZUFkZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uVHJhbnNmb3Jt
Tm9kZVJlbW92ZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25OZXdNZXNoQWRk
ZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25NZXNoUmVtb3ZlZE9ic2VydmFi
bGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbk5ld1NrZWxldG9uQWRkZWRPYnNlcnZhYmxlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMub25Ta2VsZXRvblJlbW92ZWRPYnNlcnZhYmxlLmNsZWFyKCk7
CisgICAgICAgIHRoaXMub25OZXdNYXRlcmlhbEFkZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAg
ICAgICB0aGlzLm9uTWF0ZXJpYWxSZW1vdmVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0
aGlzLm9uTmV3VGV4dHVyZUFkZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9u
VGV4dHVyZVJlbW92ZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25QcmVQb2lu
dGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uUG9pbnRlck9ic2VydmFibGUu
Y2xlYXIoKTsKKyAgICAgICAgdGhpcy5vblByZUtleWJvYXJkT2JzZXJ2YWJsZS5jbGVhcigpOwor
ICAgICAgICB0aGlzLm9uS2V5Ym9hcmRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMu
b25BY3RpdmVDYW1lcmFDaGFuZ2VkLmNsZWFyKCk7CisgICAgICAgIHRoaXMuZGV0YWNoQ29udHJv
bCgpOworICAgICAgICAvLyBEZXRhY2ggY2FtZXJhcworICAgICAgICB2YXIgY2FudmFzID0gdGhp
cy5fZW5naW5lLmdldFJlbmRlcmluZ0NhbnZhcygpOworICAgICAgICBpZiAoY2FudmFzKSB7Cisg
ICAgICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLmNhbWVyYXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5j
YW1lcmFzW2luZGV4XS5kZXRhY2hDb250cm9sKGNhbnZhcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgLy8gUmVsZWFzZSBhbmltYXRpb24gZ3JvdXBzCisgICAgICAgIHdoaWxl
ICh0aGlzLmFuaW1hdGlvbkdyb3Vwcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuYW5pbWF0
aW9uR3JvdXBzWzBdLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZWxlYXNlIGxp
Z2h0cworICAgICAgICB3aGlsZSAodGhpcy5saWdodHMubGVuZ3RoKSB7CisgICAgICAgICAgICB0
aGlzLmxpZ2h0c1swXS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVsZWFzZSBt
ZXNoZXMKKyAgICAgICAgd2hpbGUgKHRoaXMubWVzaGVzLmxlbmd0aCkgeworICAgICAgICAgICAg
dGhpcy5tZXNoZXNbMF0uZGlzcG9zZSh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAo
dGhpcy50cmFuc2Zvcm1Ob2Rlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMudHJhbnNmb3Jt
Tm9kZXNbMF0uZGlzcG9zZSh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZWxlYXNlIGNh
bWVyYXMKKyAgICAgICAgd2hpbGUgKHRoaXMuY2FtZXJhcy5sZW5ndGgpIHsKKyAgICAgICAgICAg
IHRoaXMuY2FtZXJhc1swXS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVsZWFz
ZSBtYXRlcmlhbHMKKyAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRNYXRlcmlhbCkgeworICAgICAg
ICAgICAgdGhpcy5fZGVmYXVsdE1hdGVyaWFsLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAg
ICB3aGlsZSAodGhpcy5tdWx0aU1hdGVyaWFscy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMu
bXVsdGlNYXRlcmlhbHNbMF0uZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIHdoaWxlICh0
aGlzLm1hdGVyaWFscy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzWzBdLmRp
c3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZWxlYXNlIHBhcnRpY2xlcworICAgICAg
ICB3aGlsZSAodGhpcy5wYXJ0aWNsZVN5c3RlbXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGlz
LnBhcnRpY2xlU3lzdGVtc1swXS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVs
ZWFzZSBwb3N0UHJvY2Vzc2VzCisgICAgICAgIHdoaWxlICh0aGlzLnBvc3RQcm9jZXNzZXMubGVu
Z3RoKSB7CisgICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzZXNbMF0uZGlzcG9zZSgpOworICAg
ICAgICB9CisgICAgICAgIC8vIFJlbGVhc2UgdGV4dHVyZXMKKyAgICAgICAgd2hpbGUgKHRoaXMu
dGV4dHVyZXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGlzLnRleHR1cmVzWzBdLmRpc3Bvc2Uo
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZWxlYXNlIFVCTworICAgICAgICB0aGlzLl9zY2Vu
ZVViby5kaXNwb3NlKCk7CisgICAgICAgIGlmICh0aGlzLl9tdWx0aXZpZXdTY2VuZVVibykgewor
ICAgICAgICAgICAgdGhpcy5fbXVsdGl2aWV3U2NlbmVVYm8uZGlzcG9zZSgpOworICAgICAgICB9
CisgICAgICAgIC8vIFBvc3QtcHJvY2Vzc2VzCisgICAgICAgIHRoaXMucG9zdFByb2Nlc3NNYW5h
Z2VyLmRpc3Bvc2UoKTsKKyAgICAgICAgLy8gUmVtb3ZlIGZyb20gZW5naW5lCisgICAgICAgIGlu
ZGV4ID0gdGhpcy5fZW5naW5lLnNjZW5lcy5pbmRleE9mKHRoaXMpOworICAgICAgICBpZiAoaW5k
ZXggPiAtMSkgeworICAgICAgICAgICAgdGhpcy5fZW5naW5lLnNjZW5lcy5zcGxpY2UoaW5kZXgs
IDEpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VuZ2luZS53aXBlQ2FjaGVzKHRydWUpOwor
ICAgICAgICB0aGlzLl9pc0Rpc3Bvc2VkID0gdHJ1ZTsKKyAgICB9OworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5cGUsICJpc0Rpc3Bvc2VkIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBpZiB0aGUgc2NlbmUgaXMgYWxyZWFkeSBkaXNwb3NlZAorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5faXNEaXNwb3NlZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQ2FsbCB0
aGlzIGZ1bmN0aW9uIHRvIHJlZHVjZSBtZW1vcnkgZm9vdHByaW50IG9mIHRoZSBzY2VuZS4KKyAg
ICAgKiBWZXJ0ZXggYnVmZmVycyB3aWxsIG5vdCBzdG9yZSBDUFUgZGF0YSBhbnltb3JlICh0aGlz
IHdpbGwgcHJldmVudCBwaWNraW5nLCBjb2xsaXNpb25zIG9yIHBoeXNpY3MgdG8gd29yayBjb3Jy
ZWN0bHkpCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmNsZWFyQ2FjaGVkVmVydGV4RGF0
YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgbWVzaEluZGV4ID0gMDsgbWVzaElu
ZGV4IDwgdGhpcy5tZXNoZXMubGVuZ3RoOyBtZXNoSW5kZXgrKykgeworICAgICAgICAgICAgdmFy
IG1lc2ggPSB0aGlzLm1lc2hlc1ttZXNoSW5kZXhdOworICAgICAgICAgICAgdmFyIGdlb21ldHJ5
ID0gbWVzaC5nZW9tZXRyeTsKKyAgICAgICAgICAgIGlmIChnZW9tZXRyeSkgeworICAgICAgICAg
ICAgICAgIGdlb21ldHJ5Ll9pbmRpY2VzID0gW107CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
dmJOYW1lIGluIGdlb21ldHJ5Ll92ZXJ0ZXhCdWZmZXJzKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghZ2VvbWV0cnkuX3ZlcnRleEJ1ZmZlcnMuaGFzT3duUHJvcGVydHkodmJOYW1lKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuX3ZlcnRleEJ1ZmZlcnNbdmJOYW1lXS5fYnVm
ZmVyLl9kYXRhID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZW1vdmUg
dGhlIGxvY2FsIGNhY2hlZCBidWZmZXIgZGF0YSBmcm9tIHRleHR1cmUuCisgICAgICogSXQgd2ls
bCBzYXZlIG1lbW9yeSBidXQgd2lsbCBwcmV2ZW50IHRoZSB0ZXh0dXJlIGZyb20gYmVpbmcgcmVi
dWlsdAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5jbGVhbkNhY2hlZFRleHR1cmVCdWZm
ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLnRl
eHR1cmVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGJhc2VUZXh0
dXJlID0gX2FbX2ldOworICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGJhc2VUZXh0dXJlLl9idWZm
ZXI7CisgICAgICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgYmFzZVRleHR1
cmUuX2J1ZmZlciA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldCB0aGUgd29ybGQgZXh0ZW5kIHZlY3RvcnMgd2l0aCBhbiBvcHRpb25h
bCBmaWx0ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSBmaWx0ZXJQcmVkaWNhdGUgdGhlIHByZWRp
Y2F0ZSAtIHdoaWNoIG1lc2hlcyBzaG91bGQgYmUgaW5jbHVkZWQgd2hlbiBjYWxjdWxhdGluZyB0
aGUgd29ybGQgc2l6ZQorICAgICAqIEByZXR1cm5zIHt7IG1pbjogVmVjdG9yMzsgbWF4OiBWZWN0
b3IzIH19IG1pbiBhbmQgbWF4IHZlY3RvcnMKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUu
Z2V0V29ybGRFeHRlbmRzID0gZnVuY3Rpb24gKGZpbHRlclByZWRpY2F0ZSkgeworICAgICAgICB2
YXIgbWluID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJWZWN0b3IzIl0oTnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVy
Lk1BWF9WQUxVRSk7CisgICAgICAgIHZhciBtYXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlY3RvcjMiXSgtTnVtYmVyLk1BWF9WQUxVRSwg
LU51bWJlci5NQVhfVkFMVUUsIC1OdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICAgICAgZmlsdGVyUHJl
ZGljYXRlID0gZmlsdGVyUHJlZGljYXRlIHx8IChmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9
KTsKKyAgICAgICAgdGhpcy5tZXNoZXMuZmlsdGVyKGZpbHRlclByZWRpY2F0ZSkuZm9yRWFjaChm
dW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgbWVzaC5jb21wdXRlV29ybGRNYXRyaXgodHJ1
ZSk7CisgICAgICAgICAgICBpZiAoIW1lc2guc3ViTWVzaGVzIHx8IG1lc2guc3ViTWVzaGVzLmxl
bmd0aCA9PT0gMCB8fCBtZXNoLmluZmluaXRlRGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYm91bmRpbmdJbmZvID0gbWVz
aC5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgICAgIHZhciBtaW5Cb3ggPSBib3VuZGluZ0lu
Zm8uYm91bmRpbmdCb3gubWluaW11bVdvcmxkOworICAgICAgICAgICAgdmFyIG1heEJveCA9IGJv
dW5kaW5nSW5mby5ib3VuZGluZ0JveC5tYXhpbXVtV29ybGQ7CisgICAgICAgICAgICBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVjdG9yMyJdLkNoZWNr
RXh0ZW5kcyhtaW5Cb3gsIG1pbiwgbWF4KTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZWN0b3IzIl0uQ2hlY2tFeHRlbmRzKG1h
eEJveCwgbWluLCBtYXgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIG1pbjogbWluLAorICAgICAgICAgICAgbWF4OiBtYXgKKyAgICAgICAgfTsKKyAgICB9Owor
ICAgIC8vIFBpY2tpbmcKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcmF5IHRoYXQgY2FuIGJl
IHVzZWQgdG8gcGljayBpbiB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB4
IGNvb3JkaW5hdGUgb2YgdGhlIG9yaWdpbiAob24tc2NyZWVuKQorICAgICAqIEBwYXJhbSB5IGRl
ZmluZXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgb3JpZ2luIChvbi1zY3JlZW4pCisgICAgICog
QHBhcmFtIHdvcmxkIGRlZmluZXMgdGhlIHdvcmxkIG1hdHJpeCB0byB1c2UgaWYgeW91IHdhbnQg
dG8gcGljayBpbiBvYmplY3Qgc3BhY2UgKGluc3RlYWQgb2Ygd29ybGQgc3BhY2UpCisgICAgICog
QHBhcmFtIGNhbWVyYSBkZWZpbmVzIHRoZSBjYW1lcmEgdG8gdXNlIGZvciB0aGUgcGlja2luZwor
ICAgICAqIEBwYXJhbSBjYW1lcmFWaWV3U3BhY2UgZGVmaW5lcyBpZiBwaWNraW5nIHdpbGwgYmUg
ZG9uZSBpbiB2aWV3IHNwYWNlIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqIEByZXR1cm5zIGEg
UmF5CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmNyZWF0ZVBpY2tpbmdSYXkgPSBmdW5j
dGlvbiAoeCwgeSwgd29ybGQsIGNhbWVyYSwgY2FtZXJhVmlld1NwYWNlKSB7CisgICAgICAgIGlm
IChjYW1lcmFWaWV3U3BhY2UgPT09IHZvaWQgMCkgeyBjYW1lcmFWaWV3U3BhY2UgPSBmYWxzZTsg
fQorICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MjRfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiUmF5Iik7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgcmF5IHRoYXQgY2FuIGJlIHVzZWQgdG8gcGljayBpbiB0aGUgc2NlbmUK
KyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIG9yaWdpbiAo
b24tc2NyZWVuKQorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0
aGUgb3JpZ2luIChvbi1zY3JlZW4pCisgICAgICogQHBhcmFtIHdvcmxkIGRlZmluZXMgdGhlIHdv
cmxkIG1hdHJpeCB0byB1c2UgaWYgeW91IHdhbnQgdG8gcGljayBpbiBvYmplY3Qgc3BhY2UgKGlu
c3RlYWQgb2Ygd29ybGQgc3BhY2UpCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSBy
YXkgd2hlcmUgdG8gc3RvcmUgdGhlIHBpY2tpbmcgcmF5CisgICAgICogQHBhcmFtIGNhbWVyYSBk
ZWZpbmVzIHRoZSBjYW1lcmEgdG8gdXNlIGZvciB0aGUgcGlja2luZworICAgICAqIEBwYXJhbSBj
YW1lcmFWaWV3U3BhY2UgZGVmaW5lcyBpZiBwaWNraW5nIHdpbGwgYmUgZG9uZSBpbiB2aWV3IHNw
YWNlIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHNjZW5l
CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmNyZWF0ZVBpY2tpbmdSYXlUb1JlZiA9IGZ1
bmN0aW9uICh4LCB5LCB3b3JsZCwgcmVzdWx0LCBjYW1lcmEsIGNhbWVyYVZpZXdTcGFjZSkgewor
ICAgICAgICBpZiAoY2FtZXJhVmlld1NwYWNlID09PSB2b2lkIDApIHsgY2FtZXJhVmlld1NwYWNl
ID0gZmFsc2U7IH0KKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzI0X19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIlJheSIpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHJheSB0aGF0IGNhbiBiZSB1c2VkIHRvIHBpY2sgaW4g
dGhlIHNjZW5lCisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgeCBjb29yZGluYXRlIG9mIHRo
ZSBvcmlnaW4gKG9uLXNjcmVlbikKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5IGNvb3Jk
aW5hdGUgb2YgdGhlIG9yaWdpbiAob24tc2NyZWVuKQorICAgICAqIEBwYXJhbSBjYW1lcmEgZGVm
aW5lcyB0aGUgY2FtZXJhIHRvIHVzZSBmb3IgdGhlIHBpY2tpbmcKKyAgICAgKiBAcmV0dXJucyBh
IFJheQorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5jcmVhdGVQaWNraW5nUmF5SW5DYW1l
cmFTcGFjZSA9IGZ1bmN0aW9uICh4LCB5LCBjYW1lcmEpIHsKKyAgICAgICAgdGhyb3cgX01pc2Nf
ZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X19bIl9EZXZUb29scyJdLldhcm5J
bXBvcnQoIlJheSIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHJheSB0aGF0
IGNhbiBiZSB1c2VkIHRvIHBpY2sgaW4gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIHggZGVmaW5l
cyB0aGUgeCBjb29yZGluYXRlIG9mIHRoZSBvcmlnaW4gKG9uLXNjcmVlbikKKyAgICAgKiBAcGFy
YW0geSBkZWZpbmVzIHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIG9yaWdpbiAob24tc2NyZWVuKQor
ICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgcmF5IHdoZXJlIHRvIHN0b3JlIHRoZSBw
aWNraW5nIHJheQorICAgICAqIEBwYXJhbSBjYW1lcmEgZGVmaW5lcyB0aGUgY2FtZXJhIHRvIHVz
ZSBmb3IgdGhlIHBpY2tpbmcKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBzY2VuZQorICAg
ICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5jcmVhdGVQaWNraW5nUmF5SW5DYW1lcmFTcGFjZVRv
UmVmID0gZnVuY3Rpb24gKHgsIHksIHJlc3VsdCwgY2FtZXJhKSB7CisgICAgICAgIHRocm93IF9N
aXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJfRGV2VG9vbHMiXS5X
YXJuSW1wb3J0KCJSYXkiKTsKKyAgICB9OworICAgIC8qKiBMYXVuY2ggYSByYXkgdG8gdHJ5IHRv
IHBpY2sgYSBtZXNoIGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSB4IHBvc2l0aW9uIG9uIHNj
cmVlbgorICAgICAqIEBwYXJhbSB5IHBvc2l0aW9uIG9uIHNjcmVlbgorICAgICAqIEBwYXJhbSBw
cmVkaWNhdGUgUHJlZGljYXRlIGZ1bmN0aW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGVsaWdpYmxlIG1l
c2hlcy4gQ2FuIGJlIHNldCB0byBudWxsLiBJbiB0aGlzIGNhc2UsIGEgbWVzaCBtdXN0IGJlIGVu
YWJsZWQsIHZpc2libGUgYW5kIHdpdGggaXNQaWNrYWJsZSBzZXQgdG8gdHJ1ZQorICAgICAqIEBw
YXJhbSBmYXN0Q2hlY2sgTGF1bmNoIGEgZmFzdCBjaGVjayBvbmx5IHVzaW5nIHRoZSBib3VuZGlu
ZyBib3hlcy4gQ2FuIGJlIHNldCB0byBudWxsLgorICAgICAqIEBwYXJhbSBjYW1lcmEgdG8gdXNl
IGZvciBjb21wdXRpbmcgdGhlIHBpY2tpbmcgcmF5LiBDYW4gYmUgc2V0IHRvIG51bGwuIEluIHRo
aXMgY2FzZSwgdGhlIHNjZW5lLmFjdGl2ZUNhbWVyYSB3aWxsIGJlIHVzZWQKKyAgICAgKiBAcGFy
YW0gdHJpYW5nbGVQcmVkaWNhdGUgZGVmaW5lcyBhbiBvcHRpb25hbCBwcmVkaWNhdGUgdXNlZCB0
byBzZWxlY3QgZmFjZXMgd2hlbiBhIG1lc2ggaW50ZXJzZWN0aW9uIGlzIGRldGVjdGVkCisgICAg
ICogQHJldHVybnMgYSBQaWNraW5nSW5mbworICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5w
aWNrID0gZnVuY3Rpb24gKHgsIHksIHByZWRpY2F0ZSwgZmFzdENoZWNrLCBjYW1lcmEsIHRyaWFu
Z2xlUHJlZGljYXRlKSB7CisgICAgICAgIC8vIER1bW15IGluZm8gaWYgcGlja2luZyBhcyBub3Qg
YmVlbiBpbXBvcnRlZAorICAgICAgICB2YXIgcGkgPSBuZXcgX0NvbGxpc2lvbnNfcGlja2luZ0lu
Zm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIlBpY2tpbmdJbmZvIl0oKTsKKyAgICAg
ICAgcGkuX3BpY2tpbmdVbmF2YWlsYWJsZSA9IHRydWU7CisgICAgICAgIHJldHVybiBwaTsKKyAg
ICB9OworICAgIC8qKiBVc2UgdGhlIGdpdmVuIHJheSB0byBwaWNrIGEgbWVzaCBpbiB0aGUgc2Nl
bmUKKyAgICAgKiBAcGFyYW0gcmF5IFRoZSByYXkgdG8gdXNlIHRvIHBpY2sgbWVzaGVzCisgICAg
ICogQHBhcmFtIHByZWRpY2F0ZSBQcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCB0byBkZXRlcm1pbmUg
ZWxpZ2libGUgbWVzaGVzLiBDYW4gYmUgc2V0IHRvIG51bGwuIEluIHRoaXMgY2FzZSwgYSBtZXNo
IG11c3QgaGF2ZSBpc1BpY2thYmxlIHNldCB0byB0cnVlCisgICAgICogQHBhcmFtIGZhc3RDaGVj
ayBMYXVuY2ggYSBmYXN0IGNoZWNrIG9ubHkgdXNpbmcgdGhlIGJvdW5kaW5nIGJveGVzLiBDYW4g
YmUgc2V0IHRvIG51bGwKKyAgICAgKiBAcGFyYW0gdHJpYW5nbGVQcmVkaWNhdGUgZGVmaW5lcyBh
biBvcHRpb25hbCBwcmVkaWNhdGUgdXNlZCB0byBzZWxlY3QgZmFjZXMgd2hlbiBhIG1lc2ggaW50
ZXJzZWN0aW9uIGlzIGRldGVjdGVkCisgICAgICogQHJldHVybnMgYSBQaWNraW5nSW5mbworICAg
ICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5waWNrV2l0aFJheSA9IGZ1bmN0aW9uIChyYXksIHBy
ZWRpY2F0ZSwgZmFzdENoZWNrLCB0cmlhbmdsZVByZWRpY2F0ZSkgeworICAgICAgICB0aHJvdyBf
TWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX1siX0RldlRvb2xzIl0u
V2FybkltcG9ydCgiUmF5Iik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBMYXVuY2ggYSByYXkg
dG8gdHJ5IHRvIHBpY2sgYSBtZXNoIGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSB4IFggcG9z
aXRpb24gb24gc2NyZWVuCisgICAgICogQHBhcmFtIHkgWSBwb3NpdGlvbiBvbiBzY3JlZW4KKyAg
ICAgKiBAcGFyYW0gcHJlZGljYXRlIFByZWRpY2F0ZSBmdW5jdGlvbiB1c2VkIHRvIGRldGVybWlu
ZSBlbGlnaWJsZSBtZXNoZXMuIENhbiBiZSBzZXQgdG8gbnVsbC4gSW4gdGhpcyBjYXNlLCBhIG1l
c2ggbXVzdCBiZSBlbmFibGVkLCB2aXNpYmxlIGFuZCB3aXRoIGlzUGlja2FibGUgc2V0IHRvIHRy
dWUKKyAgICAgKiBAcGFyYW0gY2FtZXJhIGNhbWVyYSB0byB1c2UgZm9yIGNvbXB1dGluZyB0aGUg
cGlja2luZyByYXkuIENhbiBiZSBzZXQgdG8gbnVsbC4gSW4gdGhpcyBjYXNlLCB0aGUgc2NlbmUu
YWN0aXZlQ2FtZXJhIHdpbGwgYmUgdXNlZAorICAgICAqIEBwYXJhbSB0cmlhbmdsZVByZWRpY2F0
ZSBkZWZpbmVzIGFuIG9wdGlvbmFsIHByZWRpY2F0ZSB1c2VkIHRvIHNlbGVjdCBmYWNlcyB3aGVu
IGEgbWVzaCBpbnRlcnNlY3Rpb24gaXMgZGV0ZWN0ZWQKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJh
eSBvZiBQaWNraW5nSW5mbworICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5tdWx0aVBpY2sg
PSBmdW5jdGlvbiAoeCwgeSwgcHJlZGljYXRlLCBjYW1lcmEsIHRyaWFuZ2xlUHJlZGljYXRlKSB7
CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
NF9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJSYXkiKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIExhdW5jaCBhIHJheSB0byB0cnkgdG8gcGljayBhIG1lc2ggaW4gdGhlIHNjZW5lCisgICAg
ICogQHBhcmFtIHJheSBSYXkgdG8gdXNlCisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBQcmVkaWNh
dGUgZnVuY3Rpb24gdXNlZCB0byBkZXRlcm1pbmUgZWxpZ2libGUgbWVzaGVzLiBDYW4gYmUgc2V0
IHRvIG51bGwuIEluIHRoaXMgY2FzZSwgYSBtZXNoIG11c3QgYmUgZW5hYmxlZCwgdmlzaWJsZSBh
bmQgd2l0aCBpc1BpY2thYmxlIHNldCB0byB0cnVlCisgICAgICogQHBhcmFtIHRyaWFuZ2xlUHJl
ZGljYXRlIGRlZmluZXMgYW4gb3B0aW9uYWwgcHJlZGljYXRlIHVzZWQgdG8gc2VsZWN0IGZhY2Vz
IHdoZW4gYSBtZXNoIGludGVyc2VjdGlvbiBpcyBkZXRlY3RlZAorICAgICAqIEByZXR1cm5zIGFu
IGFycmF5IG9mIFBpY2tpbmdJbmZvCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLm11bHRp
UGlja1dpdGhSYXkgPSBmdW5jdGlvbiAocmF5LCBwcmVkaWNhdGUsIHRyaWFuZ2xlUHJlZGljYXRl
KSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yNF9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJSYXkiKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEZvcmNlIHRoZSB2YWx1ZSBvZiBtZXNoVW5kZXJQb2ludGVyCisgICAgICogQHBhcmFt
IG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0byB1c2UKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5
cGUuc2V0UG9pbnRlck92ZXJNZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgdGhpcy5f
aW5wdXRNYW5hZ2VyLnNldFBvaW50ZXJPdmVyTWVzaChtZXNoKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEdldHMgdGhlIG1lc2ggdW5kZXIgdGhlIHBvaW50ZXIKKyAgICAgKiBAcmV0dXJucyBh
IE1lc2ggb3IgbnVsbCBpZiBubyBtZXNoIGlzIHVuZGVyIHRoZSBwb2ludGVyCisgICAgICovCisg
ICAgU2NlbmUucHJvdG90eXBlLmdldFBvaW50ZXJPdmVyTWVzaCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2lucHV0TWFuYWdlci5nZXRQb2ludGVyT3Zlck1lc2goKTsKKyAg
ICB9OworICAgIC8vIE1pc2MuCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTY2VuZS5wcm90b3R5
cGUuX3JlYnVpbGRHZW9tZXRyaWVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBf
aSA9IDAsIF9hID0gdGhpcy5nZW9tZXRyaWVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAg
ICAgICAgICAgdmFyIGdlb21ldHJ5ID0gX2FbX2ldOworICAgICAgICAgICAgZ2VvbWV0cnkuX3Jl
YnVpbGQoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gdGhpcy5t
ZXNoZXM7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IF9j
W19iXTsKKyAgICAgICAgICAgIG1lc2guX3JlYnVpbGQoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5wb3N0UHJvY2Vzc01hbmFnZXIpIHsKKyAgICAgICAgICAgIHRoaXMucG9zdFByb2Nl
c3NNYW5hZ2VyLl9yZWJ1aWxkKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgX2QgPSAw
LCBfZSA9IHRoaXMuX2NvbXBvbmVudHM7IF9kIDwgX2UubGVuZ3RoOyBfZCsrKSB7CisgICAgICAg
ICAgICB2YXIgY29tcG9uZW50ID0gX2VbX2RdOworICAgICAgICAgICAgY29tcG9uZW50LnJlYnVp
bGQoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfZiA9IDAsIF9nID0gdGhpcy5wYXJ0
aWNsZVN5c3RlbXM7IF9mIDwgX2cubGVuZ3RoOyBfZisrKSB7CisgICAgICAgICAgICB2YXIgc3lz
dGVtID0gX2dbX2ZdOworICAgICAgICAgICAgc3lzdGVtLnJlYnVpbGQoKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuX3JlYnVpbGRU
ZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRo
aXMudGV4dHVyZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgdGV4
dHVyZSA9IF9hW19pXTsKKyAgICAgICAgICAgIHRleHR1cmUuX3JlYnVpbGQoKTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLm1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVGV4
dHVyZURpcnR5RmxhZyk7CisgICAgfTsKKyAgICAvLyBUYWdzCisgICAgU2NlbmUucHJvdG90eXBl
Ll9nZXRCeVRhZ3MgPSBmdW5jdGlvbiAobGlzdCwgdGFnc1F1ZXJ5LCBmb3JFYWNoKSB7CisgICAg
ICAgIGlmICh0YWdzUXVlcnkgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgLy8gcmV0dXJu
cyB0aGUgY29tcGxldGUgbGlzdCAoY291bGQgYmUgZG9uZSB3aXRoIFRhZ3MuTWF0Y2hlc1F1ZXJ5
IGJ1dCBubyBuZWVkIHRvIGhhdmUgYSBmb3ItbG9vcCBoZXJlKQorICAgICAgICAgICAgcmV0dXJu
IGxpc3Q7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGxpc3RCeVRhZ3MgPSBbXTsKKyAgICAgICAg
Zm9yRWFjaCA9IGZvckVhY2ggfHwgKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybjsgfSk7CisgICAg
ICAgIGZvciAodmFyIGkgaW4gbGlzdCkgeworICAgICAgICAgICAgdmFyIGl0ZW0gPSBsaXN0W2ld
OworICAgICAgICAgICAgaWYgKF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siVGFncyJdICYmIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVGFn
cyJdLk1hdGNoZXNRdWVyeShpdGVtLCB0YWdzUXVlcnkpKSB7CisgICAgICAgICAgICAgICAgbGlz
dEJ5VGFncy5wdXNoKGl0ZW0pOworICAgICAgICAgICAgICAgIGZvckVhY2goaXRlbSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxpc3RCeVRhZ3M7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXQgYSBsaXN0IG9mIG1lc2hlcyBieSB0YWdzCisgICAgICogQHBh
cmFtIHRhZ3NRdWVyeSBkZWZpbmVzIHRoZSB0YWdzIHF1ZXJ5IHRvIHVzZQorICAgICAqIEBwYXJh
bSBmb3JFYWNoIGRlZmluZXMgYSBwcmVkaWNhdGUgdXNlZCB0byBmaWx0ZXIgcmVzdWx0cworICAg
ICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIE1lc2gKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5
cGUuZ2V0TWVzaGVzQnlUYWdzID0gZnVuY3Rpb24gKHRhZ3NRdWVyeSwgZm9yRWFjaCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5fZ2V0QnlUYWdzKHRoaXMubWVzaGVzLCB0YWdzUXVlcnksIGZvckVh
Y2gpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGEgbGlzdCBvZiBjYW1lcmFzIGJ5IHRh
Z3MKKyAgICAgKiBAcGFyYW0gdGFnc1F1ZXJ5IGRlZmluZXMgdGhlIHRhZ3MgcXVlcnkgdG8gdXNl
CisgICAgICogQHBhcmFtIGZvckVhY2ggZGVmaW5lcyBhIHByZWRpY2F0ZSB1c2VkIHRvIGZpbHRl
ciByZXN1bHRzCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgQ2FtZXJhCisgICAgICovCisg
ICAgU2NlbmUucHJvdG90eXBlLmdldENhbWVyYXNCeVRhZ3MgPSBmdW5jdGlvbiAodGFnc1F1ZXJ5
LCBmb3JFYWNoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9nZXRCeVRhZ3ModGhpcy5jYW1lcmFz
LCB0YWdzUXVlcnksIGZvckVhY2gpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGEgbGlz
dCBvZiBsaWdodHMgYnkgdGFncworICAgICAqIEBwYXJhbSB0YWdzUXVlcnkgZGVmaW5lcyB0aGUg
dGFncyBxdWVyeSB0byB1c2UKKyAgICAgKiBAcGFyYW0gZm9yRWFjaCBkZWZpbmVzIGEgcHJlZGlj
YXRlIHVzZWQgdG8gZmlsdGVyIHJlc3VsdHMKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBM
aWdodAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRMaWdodHNCeVRhZ3MgPSBmdW5j
dGlvbiAodGFnc1F1ZXJ5LCBmb3JFYWNoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9nZXRCeVRh
Z3ModGhpcy5saWdodHMsIHRhZ3NRdWVyeSwgZm9yRWFjaCk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXQgYSBsaXN0IG9mIG1hdGVyaWFscyBieSB0YWdzCisgICAgICogQHBhcmFtIHRhZ3NR
dWVyeSBkZWZpbmVzIHRoZSB0YWdzIHF1ZXJ5IHRvIHVzZQorICAgICAqIEBwYXJhbSBmb3JFYWNo
IGRlZmluZXMgYSBwcmVkaWNhdGUgdXNlZCB0byBmaWx0ZXIgcmVzdWx0cworICAgICAqIEByZXR1
cm5zIGFuIGFycmF5IG9mIE1hdGVyaWFsCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdl
dE1hdGVyaWFsQnlUYWdzID0gZnVuY3Rpb24gKHRhZ3NRdWVyeSwgZm9yRWFjaCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5fZ2V0QnlUYWdzKHRoaXMubWF0ZXJpYWxzLCB0YWdzUXVlcnksIGZvckVh
Y2gpLmNvbmNhdCh0aGlzLl9nZXRCeVRhZ3ModGhpcy5tdWx0aU1hdGVyaWFscywgdGFnc1F1ZXJ5
LCBmb3JFYWNoKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1
bHQgc29ydCBmdW5jdGlvbiBhcHBsaWVkIGluIHRoZSByZW5kZXJnaW5nIGdyb3VwIHRvIHByZXBh
cmUgdGhlIG1lc2hlcy4KKyAgICAgKiBUaGlzIGFsbG93ZWQgY29udHJvbCBmb3IgZnJvbnQgdG8g
YmFjayByZW5kZXJpbmcgb3IgcmV2ZXJzbHkgZGVwZW5kaW5nIG9mIHRoZSBzcGVjaWFsIG5lZWRz
LgorICAgICAqCisgICAgICogQHBhcmFtIHJlbmRlcmluZ0dyb3VwSWQgVGhlIHJlbmRlcmluZyBn
cm91cCBpZCBjb3JyZXNwb25kaW5nIHRvIGl0cyBpbmRleAorICAgICAqIEBwYXJhbSBvcGFxdWVT
b3J0Q29tcGFyZUZuIFRoZSBvcGFxdWUgcXVldWUgY29tcGFyaXNvbiBmdW5jdGlvbiB1c2UgdG8g
c29ydC4KKyAgICAgKiBAcGFyYW0gYWxwaGFUZXN0U29ydENvbXBhcmVGbiBUaGUgYWxwaGEgdGVz
dCBxdWV1ZSBjb21wYXJpc29uIGZ1bmN0aW9uIHVzZSB0byBzb3J0LgorICAgICAqIEBwYXJhbSB0
cmFuc3BhcmVudFNvcnRDb21wYXJlRm4gVGhlIHRyYW5zcGFyZW50IHF1ZXVlIGNvbXBhcmlzb24g
ZnVuY3Rpb24gdXNlIHRvIHNvcnQuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLnNldFJl
bmRlcmluZ09yZGVyID0gZnVuY3Rpb24gKHJlbmRlcmluZ0dyb3VwSWQsIG9wYXF1ZVNvcnRDb21w
YXJlRm4sIGFscGhhVGVzdFNvcnRDb21wYXJlRm4sIHRyYW5zcGFyZW50U29ydENvbXBhcmVGbikg
eworICAgICAgICBpZiAob3BhcXVlU29ydENvbXBhcmVGbiA9PT0gdm9pZCAwKSB7IG9wYXF1ZVNv
cnRDb21wYXJlRm4gPSBudWxsOyB9CisgICAgICAgIGlmIChhbHBoYVRlc3RTb3J0Q29tcGFyZUZu
ID09PSB2b2lkIDApIHsgYWxwaGFUZXN0U29ydENvbXBhcmVGbiA9IG51bGw7IH0KKyAgICAgICAg
aWYgKHRyYW5zcGFyZW50U29ydENvbXBhcmVGbiA9PT0gdm9pZCAwKSB7IHRyYW5zcGFyZW50U29y
dENvbXBhcmVGbiA9IG51bGw7IH0KKyAgICAgICAgdGhpcy5fcmVuZGVyaW5nTWFuYWdlci5zZXRS
ZW5kZXJpbmdPcmRlcihyZW5kZXJpbmdHcm91cElkLCBvcGFxdWVTb3J0Q29tcGFyZUZuLCBhbHBo
YVRlc3RTb3J0Q29tcGFyZUZuLCB0cmFuc3BhcmVudFNvcnRDb21wYXJlRm4pOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBzdGVuY2lsIGFuZCBk
ZXB0aCBidWZmZXIgYXJlIGNsZWFyZWQgYmV0d2VlbiB0d28gcmVuZGVyaW5nIGdyb3Vwcy4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSByZW5kZXJpbmdHcm91cElkIFRoZSByZW5kZXJpbmcgZ3JvdXAg
aWQgY29ycmVzcG9uZGluZyB0byBpdHMgaW5kZXgKKyAgICAgKiBAcGFyYW0gYXV0b0NsZWFyRGVw
dGhTdGVuY2lsIEF1dG9tYXRpY2FsbHkgY2xlYXJzIGRlcHRoIGFuZCBzdGVuY2lsIGJldHdlZW4g
Z3JvdXBzIGlmIHRydWUuCisgICAgICogQHBhcmFtIGRlcHRoIEF1dG9tYXRpY2FsbHkgY2xlYXJz
IGRlcHRoIGJldHdlZW4gZ3JvdXBzIGlmIHRydWUgYW5kIGF1dG9DbGVhciBpcyB0cnVlLgorICAg
ICAqIEBwYXJhbSBzdGVuY2lsIEF1dG9tYXRpY2FsbHkgY2xlYXJzIHN0ZW5jaWwgYmV0d2VlbiBn
cm91cHMgaWYgdHJ1ZSBhbmQgYXV0b0NsZWFyIGlzIHRydWUuCisgICAgICovCisgICAgU2NlbmUu
cHJvdG90eXBlLnNldFJlbmRlcmluZ0F1dG9DbGVhckRlcHRoU3RlbmNpbCA9IGZ1bmN0aW9uIChy
ZW5kZXJpbmdHcm91cElkLCBhdXRvQ2xlYXJEZXB0aFN0ZW5jaWwsIGRlcHRoLCBzdGVuY2lsKSB7
CisgICAgICAgIGlmIChkZXB0aCA9PT0gdm9pZCAwKSB7IGRlcHRoID0gdHJ1ZTsgfQorICAgICAg
ICBpZiAoc3RlbmNpbCA9PT0gdm9pZCAwKSB7IHN0ZW5jaWwgPSB0cnVlOyB9CisgICAgICAgIHRo
aXMuX3JlbmRlcmluZ01hbmFnZXIuc2V0UmVuZGVyaW5nQXV0b0NsZWFyRGVwdGhTdGVuY2lsKHJl
bmRlcmluZ0dyb3VwSWQsIGF1dG9DbGVhckRlcHRoU3RlbmNpbCwgZGVwdGgsIHN0ZW5jaWwpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBhdXRvIGNsZWFyIGNvbmZp
Z3VyYXRpb24gZm9yIG9uZSByZW5kZXJpbmcgZ3JvdXAgb2YgdGhlIHJlbmRlcmluZworICAgICAq
IG1hbmFnZXIuCisgICAgICogQHBhcmFtIGluZGV4IHRoZSByZW5kZXJpbmcgZ3JvdXAgaW5kZXgg
dG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBmb3IKKyAgICAgKiBAcmV0dXJucyBUaGUgYXV0byBjbGVh
ciBzZXR1cCBmb3IgdGhlIHJlcXVlc3RlZCByZW5kZXJpbmcgZ3JvdXAKKyAgICAgKi8KKyAgICBT
Y2VuZS5wcm90b3R5cGUuZ2V0QXV0b0NsZWFyRGVwdGhTdGVuY2lsU2V0dXAgPSBmdW5jdGlvbiAo
aW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcmluZ01hbmFnZXIuZ2V0QXV0b0Ns
ZWFyRGVwdGhTdGVuY2lsU2V0dXAoaW5kZXgpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImJsb2NrTWF0ZXJpYWxEaXJ0eU1lY2hhbmlzbSIsIHsK
KyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gYmxvY2tpbmcgYWxsIHRoZSBjYWxs
cyB0byBtYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eSAoaWUuIHRoZSBtYXRlcmlhbHMgd29uJ3QgYmUg
dXBkYXRlZCBpZiB0aGV5IGFyZSBvdXQgb2Ygc3luYykgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmxvY2tNYXRlcmlhbERpcnR5TWVjaGFu
aXNtOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX2Jsb2NrTWF0ZXJpYWxEaXJ0eU1lY2hhbmlzbSA9PT0gdmFsdWUpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9ibG9ja01hdGVyaWFsRGlydHlNZWNoYW5pc20gPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICgh
dmFsdWUpIHsgLy8gRG8gYSBjb21wbGV0ZSB1cGRhdGUKKyAgICAgICAgICAgICAgICB0aGlzLm1h
cmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjBfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfQWxsRGlydHlGbGFnKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogV2lsbCBmbGFnIGFs
bCBtYXRlcmlhbHMgYXMgZGlydHkgdG8gdHJpZ2dlciBuZXcgc2hhZGVyIGNvbXBpbGF0aW9uCisg
ICAgICogQHBhcmFtIGZsYWcgZGVmaW5lcyB0aGUgZmxhZyB1c2VkIHRvIHNwZWNpZnkgd2hpY2gg
bWF0ZXJpYWwgcGFydCBtdXN0IGJlIG1hcmtlZCBhcyBkaXJ0eQorICAgICAqIEBwYXJhbSBwcmVk
aWNhdGUgSWYgbm90IG51bGwsIGl0IHdpbGwgYmUgdXNlZCB0byBzcGVjaWZpeSBpZiBhIG1hdGVy
aWFsIGhhcyB0byBiZSBtYXJrZWQgYXMgZGlydHkKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5
cGUubWFya0FsbE1hdGVyaWFsc0FzRGlydHkgPSBmdW5jdGlvbiAoZmxhZywgcHJlZGljYXRlKSB7
CisgICAgICAgIGlmICh0aGlzLl9ibG9ja01hdGVyaWFsRGlydHlNZWNoYW5pc20pIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0g
dGhpcy5tYXRlcmlhbHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIg
bWF0ZXJpYWwgPSBfYVtfaV07CisgICAgICAgICAgICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNh
dGUobWF0ZXJpYWwpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtYXRlcmlhbC5tYXJrQXNEaXJ0eShmbGFnKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuX2xvYWRGaWxlID0g
ZnVuY3Rpb24gKHVybCwgb25TdWNjZXNzLCBvblByb2dyZXNzLCB1c2VPZmZsaW5lU3VwcG9ydCwg
dXNlQXJyYXlCdWZmZXIsIG9uRXJyb3IpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAg
ICAgICAgdmFyIHJlcXVlc3QgPSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJUb29scyJdLkxvYWRGaWxlKHVybCwgb25TdWNjZXNzLCBvblByb2dyZXNzLCB1c2VPZmZs
aW5lU3VwcG9ydCA/IHRoaXMub2ZmbGluZVByb3ZpZGVyIDogdW5kZWZpbmVkLCB1c2VBcnJheUJ1
ZmZlciwgb25FcnJvcik7CisgICAgICAgIHRoaXMuX2FjdGl2ZVJlcXVlc3RzLnB1c2gocmVxdWVz
dCk7CisgICAgICAgIHJlcXVlc3Qub25Db21wbGV0ZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChy
ZXF1ZXN0KSB7CisgICAgICAgICAgICBfdGhpcy5fYWN0aXZlUmVxdWVzdHMuc3BsaWNlKF90aGlz
Ll9hY3RpdmVSZXF1ZXN0cy5pbmRleE9mKHJlcXVlc3QpLCAxKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHJldHVybiByZXF1ZXN0OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUuX2xvYWRGaWxlQXN5bmMgPSBmdW5jdGlvbiAodXJsLCB1c2VPZmZsaW5lU3Vw
cG9ydCwgdXNlQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAg
ICAgICAgIF90aGlzLl9sb2FkRmlsZSh1cmwsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAg
ICAgICAgcmVzb2x2ZShkYXRhKTsKKyAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgdXNlT2ZmbGlu
ZVN1cHBvcnQsIHVzZUFycmF5QnVmZmVyLCBmdW5jdGlvbiAocmVxdWVzdCwgZXhjZXB0aW9uKSB7
CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4Y2VwdGlvbik7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7CisgICAgfTsKKyAgICAvKiogVGhlIGZvZyBpcyBkZWFjdGl2YXRlZCAqLworICAg
IFNjZW5lLkZPR01PREVfTk9ORSA9IDA7CisgICAgLyoqIFRoZSBmb2cgZGVuc2l0eSBpcyBmb2xs
b3dpbmcgYW4gZXhwb25lbnRpYWwgZnVuY3Rpb24gKi8KKyAgICBTY2VuZS5GT0dNT0RFX0VYUCA9
IDE7CisgICAgLyoqIFRoZSBmb2cgZGVuc2l0eSBpcyBmb2xsb3dpbmcgYW4gZXhwb25lbnRpYWwg
ZnVuY3Rpb24gZmFzdGVyIHRoYW4gRk9HTU9ERV9FWFAgKi8KKyAgICBTY2VuZS5GT0dNT0RFX0VY
UDIgPSAyOworICAgIC8qKiBUaGUgZm9nIGRlbnNpdHkgaXMgZm9sbG93aW5nIGEgbGluZWFyIGZ1
bmN0aW9uLiAqLworICAgIFNjZW5lLkZPR01PREVfTElORUFSID0gMzsKKyAgICAvKioKKyAgICAg
KiBHZXRzIG9yIHNldHMgdGhlIG1pbmltdW0gZGVsdGF0aW1lIHdoZW4gZGV0ZXJtaW5pc3RpYyBs
b2NrIHN0ZXAgaXMgZW5hYmxlZAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1pbmlzdGljLWxvY2tzdGVwCisgICAgICovCisg
ICAgU2NlbmUuTWluRGVsdGFUaW1lID0gMS4wOworICAgIC8qKgorICAgICAqIEdldHMgb3Igc2V0
cyB0aGUgbWF4aW11bSBkZWx0YXRpbWUgd2hlbiBkZXRlcm1pbmlzdGljIGxvY2sgc3RlcCBpcyBl
bmFibGVkCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9h
bmltYXRpb25zI2RldGVybWluaXN0aWMtbG9ja3N0ZXAKKyAgICAgKi8KKyAgICBTY2VuZS5NYXhE
ZWx0YVRpbWUgPSAxMDAwLjA7CisgICAgcmV0dXJuIFNjZW5lOworfShfYWJzdHJhY3RTY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQWJzdHJhY3RTY2VuZSJdKSk7CisKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vc2NlbmVDb21wb25lbnQudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9zY2VuZUNvbXBvbmVudC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2NlbmVD
b21wb25lbnRDb25zdGFudHMsIFN0YWdlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTY2Vu
ZUNvbXBvbmVudENvbnN0YW50czsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGFnZSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gU3RhZ2U7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0
c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworCisvKioKKyAq
IEdyb3VwcyBhbGwgdGhlIHNjZW5lIGNvbXBvbmVudCBjb25zdGFudHMgaW4gb25lIHBsYWNlIHRv
IGVhc2UgbWFpbnRlbmFuY2UuCisgKiBAaGlkZGVuCisgKi8KK3ZhciBTY2VuZUNvbXBvbmVudENv
bnN0YW50cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBTY2Vu
ZUNvbXBvbmVudENvbnN0YW50cygpIHsKKyAgICB9CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFu
dHMuTkFNRV9FRkZFQ1RMQVlFUiA9ICJFZmZlY3RMYXllciI7CisgICAgU2NlbmVDb21wb25lbnRD
b25zdGFudHMuTkFNRV9MQVlFUiA9ICJMYXllciI7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFu
dHMuTkFNRV9MRU5TRkxBUkVTWVNURU0gPSAiTGVuc0ZsYXJlU3lzdGVtIjsKKyAgICBTY2VuZUNv
bXBvbmVudENvbnN0YW50cy5OQU1FX0JPVU5ESU5HQk9YUkVOREVSRVIgPSAiQm91bmRpbmdCb3hS
ZW5kZXJlciI7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuTkFNRV9QQVJUSUNMRVNZU1RF
TSA9ICJQYXJ0aWNsZVN5c3RlbSI7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuTkFNRV9H
QU1FUEFEID0gIkdhbWVwYWQiOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLk5BTUVfU0lN
UExJRklDQVRJT05RVUVVRSA9ICJTaW1wbGlmaWNhdGlvblF1ZXVlIjsKKyAgICBTY2VuZUNvbXBv
bmVudENvbnN0YW50cy5OQU1FX0dFT01FVFJZQlVGRkVSUkVOREVSRVIgPSAiR2VvbWV0cnlCdWZm
ZXJSZW5kZXJlciI7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuTkFNRV9ERVBUSFJFTkRF
UkVSID0gIkRlcHRoUmVuZGVyZXIiOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLk5BTUVf
UE9TVFBST0NFU1NSRU5ERVJQSVBFTElORU1BTkFHRVIgPSAiUG9zdFByb2Nlc3NSZW5kZXJQaXBl
bGluZU1hbmFnZXIiOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLk5BTUVfU1BSSVRFID0g
IlNwcml0ZSI7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuTkFNRV9PVVRMSU5FUkVOREVS
RVIgPSAiT3V0bGluZSI7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuTkFNRV9QUk9DRURV
UkFMVEVYVFVSRSA9ICJQcm9jZWR1cmFsVGV4dHVyZSI7CisgICAgU2NlbmVDb21wb25lbnRDb25z
dGFudHMuTkFNRV9TSEFET1dHRU5FUkFUT1IgPSAiU2hhZG93R2VuZXJhdG9yIjsKKyAgICBTY2Vu
ZUNvbXBvbmVudENvbnN0YW50cy5OQU1FX09DVFJFRSA9ICJPY3RyZWUiOworICAgIFNjZW5lQ29t
cG9uZW50Q29uc3RhbnRzLk5BTUVfUEhZU0lDU0VOR0lORSA9ICJQaHlzaWNzRW5naW5lIjsKKyAg
ICBTY2VuZUNvbXBvbmVudENvbnN0YW50cy5OQU1FX0FVRElPID0gIkF1ZGlvIjsKKyAgICBTY2Vu
ZUNvbXBvbmVudENvbnN0YW50cy5TVEVQX0lTUkVBRFlGT1JNRVNIX0VGRkVDVExBWUVSID0gMDsK
KyAgICBTY2VuZUNvbXBvbmVudENvbnN0YW50cy5TVEVQX0JFRk9SRUVWQUxVQVRFQUNUSVZFTUVT
SF9CT1VORElOR0JPWFJFTkRFUkVSID0gMDsKKyAgICBTY2VuZUNvbXBvbmVudENvbnN0YW50cy5T
VEVQX0VWQUxVQVRFU1VCTUVTSF9CT1VORElOR0JPWFJFTkRFUkVSID0gMDsKKyAgICBTY2VuZUNv
bXBvbmVudENvbnN0YW50cy5TVEVQX0FDVElWRU1FU0hfQk9VTkRJTkdCT1hSRU5ERVJFUiA9IDA7
CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuU1RFUF9DQU1FUkFEUkFXUkVOREVSVEFSR0VU
X0VGRkVDVExBWUVSID0gMTsKKyAgICBTY2VuZUNvbXBvbmVudENvbnN0YW50cy5TVEVQX0JFRk9S
RUNBTUVSQURSQVdfRUZGRUNUTEFZRVIgPSAwOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRz
LlNURVBfQkVGT1JFQ0FNRVJBRFJBV19MQVlFUiA9IDE7CisgICAgU2NlbmVDb21wb25lbnRDb25z
dGFudHMuU1RFUF9CRUZPUkVSRU5ERVJUQVJHRVREUkFXX0xBWUVSID0gMDsKKyAgICBTY2VuZUNv
bXBvbmVudENvbnN0YW50cy5TVEVQX0JFRk9SRVJFTkRFUklOR01FU0hfT1VUTElORSA9IDA7Cisg
ICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuU1RFUF9BRlRFUlJFTkRFUklOR01FU0hfT1VUTElO
RSA9IDA7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuU1RFUF9BRlRFUlJFTkRFUklOR0dS
T1VQRFJBV19FRkZFQ1RMQVlFUl9EUkFXID0gMDsKKyAgICBTY2VuZUNvbXBvbmVudENvbnN0YW50
cy5TVEVQX0FGVEVSUkVOREVSSU5HR1JPVVBEUkFXX0JPVU5ESU5HQk9YUkVOREVSRVIgPSAxOwor
ICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLlNURVBfQkVGT1JFQ0FNRVJBVVBEQVRFX1NJTVBM
SUZJQ0FUSU9OUVVFVUUgPSAwOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLlNURVBfQkVG
T1JFQ0FNRVJBVVBEQVRFX0dBTUVQQUQgPSAxOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRz
LlNURVBfQkVGT1JFQ0xFQVJfUFJPQ0VEVVJBTFRFWFRVUkUgPSAwOworICAgIFNjZW5lQ29tcG9u
ZW50Q29uc3RhbnRzLlNURVBfQUZURVJSRU5ERVJUQVJHRVREUkFXX0xBWUVSID0gMDsKKyAgICBT
Y2VuZUNvbXBvbmVudENvbnN0YW50cy5TVEVQX0FGVEVSQ0FNRVJBRFJBV19FRkZFQ1RMQVlFUiA9
IDA7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuU1RFUF9BRlRFUkNBTUVSQURSQVdfTEVO
U0ZMQVJFU1lTVEVNID0gMTsKKyAgICBTY2VuZUNvbXBvbmVudENvbnN0YW50cy5TVEVQX0FGVEVS
Q0FNRVJBRFJBV19FRkZFQ1RMQVlFUl9EUkFXID0gMjsKKyAgICBTY2VuZUNvbXBvbmVudENvbnN0
YW50cy5TVEVQX0FGVEVSQ0FNRVJBRFJBV19MQVlFUiA9IDM7CisgICAgU2NlbmVDb21wb25lbnRD
b25zdGFudHMuU1RFUF9BRlRFUlJFTkRFUl9BVURJTyA9IDA7CisgICAgU2NlbmVDb21wb25lbnRD
b25zdGFudHMuU1RFUF9HQVRIRVJSRU5ERVJUQVJHRVRTX1NIQURPV0dFTkVSQVRPUiA9IDA7Cisg
ICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuU1RFUF9HQVRIRVJSRU5ERVJUQVJHRVRTX0dFT01F
VFJZQlVGRkVSUkVOREVSRVIgPSAxOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLlNURVBf
R0FUSEVSUkVOREVSVEFSR0VUU19ERVBUSFJFTkRFUkVSID0gMjsKKyAgICBTY2VuZUNvbXBvbmVu
dENvbnN0YW50cy5TVEVQX0dBVEhFUlJFTkRFUlRBUkdFVFNfUE9TVFBST0NFU1NSRU5ERVJQSVBF
TElORU1BTkFHRVIgPSAzOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLlNURVBfR0FUSEVS
QUNUSVZFQ0FNRVJBUkVOREVSVEFSR0VUU19ERVBUSFJFTkRFUkVSID0gMDsKKyAgICBTY2VuZUNv
bXBvbmVudENvbnN0YW50cy5TVEVQX1BPSU5URVJNT1ZFX1NQUklURSA9IDA7CisgICAgU2NlbmVD
b21wb25lbnRDb25zdGFudHMuU1RFUF9QT0lOVEVSRE9XTl9TUFJJVEUgPSAwOworICAgIFNjZW5l
Q29tcG9uZW50Q29uc3RhbnRzLlNURVBfUE9JTlRFUlVQX1NQUklURSA9IDA7CisgICAgcmV0dXJu
IFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzOworfSgpKTsKKworLyoqCisgKiBSZXByZXNzZW50YXRp
b24gb2YgYSBzdGFnZSBpbiB0aGUgc2NlbmUgKEJhc2ljYWxseSBhIGxpc3Qgb2Ygb3JkZXJlZCBz
dGVwcykKKyAqIEBoaWRkZW4KKyAqLwordmFyIFN0YWdlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZXh0ZW5kcyJdKFN0YWdlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEhpZGUgY3RvciBmcm9t
IHRoZSByZXN0IG9mIHRoZSB3b3JsZC4KKyAgICAgKiBAcGFyYW0gaXRlbXMgVGhlIGl0ZW1zIHRv
IGFkZC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdGFnZShpdGVtcykgeworICAgICAgICByZXR1
cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGl0ZW1zKSB8fCB0aGlzOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgbmV3IFN0YWdlLgorICAgICAqIEByZXR1cm5zIEEgbmV3IGluc3RhbmNl
IG9mIGEgU3RhZ2UKKyAgICAgKi8KKyAgICBTdGFnZS5DcmVhdGUgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKFN0YWdlLnByb3RvdHlwZSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZWdpc3RlcnMgYSBzdGVwIGluIGFuIG9yZGVyZWQgd2F5IGluIHRoZSB0
YXJnZXRlZCBzdGFnZS4KKyAgICAgKiBAcGFyYW0gaW5kZXggRGVmaW5lcyB0aGUgcG9zaXRpb24g
dG8gcmVnaXN0ZXIgdGhlIHN0ZXAgaW4KKyAgICAgKiBAcGFyYW0gY29tcG9uZW50IERlZmluZXMg
dGhlIGNvbXBvbmVudCBhdHRhY2hlZCB0byB0aGUgc3RlcAorICAgICAqIEBwYXJhbSBhY3Rpb24g
RGVmaW5lcyB0aGUgYWN0aW9uIHRvIGxhdW5jaCBkdXJpbmcgdGhlIHN0ZXAKKyAgICAgKi8KKyAg
ICBTdGFnZS5wcm90b3R5cGUucmVnaXN0ZXJTdGVwID0gZnVuY3Rpb24gKGluZGV4LCBjb21wb25l
bnQsIGFjdGlvbikgeworICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgIHZhciBtYXhJbmRleCA9
IE51bWJlci5NQVhfVkFMVUU7CisgICAgICAgIGZvciAoOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgdmFyIHN0ZXAgPSB0aGlzW2ldOworICAgICAgICAgICAgbWF4SW5kZXgg
PSBzdGVwLmluZGV4OworICAgICAgICAgICAgaWYgKGluZGV4IDwgbWF4SW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlz
LnNwbGljZShpLCAwLCB7IGluZGV4OiBpbmRleCwgY29tcG9uZW50OiBjb21wb25lbnQsIGFjdGlv
bjogYWN0aW9uLmJpbmQoY29tcG9uZW50KSB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENs
ZWFycyBhbGwgdGhlIHN0ZXBzIGZyb20gdGhlIHN0YWdlLgorICAgICAqLworICAgIFN0YWdlLnBy
b3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5sZW5ndGggPSAwOwor
ICAgIH07CisgICAgcmV0dXJuIFN0YWdlOworfShBcnJheSkpOworCisKKworLyoqKi8gfSkKKwor
LyoqKioqKi8gfSk7Cit9KTsKKy8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhYnlsb24ubWF4LmpzLm1h
cApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kZW1vcy93ZWJncHUvYmFieWxvbi9s
b2dvLnN2ZyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vbG9nby5z
dmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZWQ4YTIxOWIwMDNjZTIzMGJmYWU4NmU2ODQ1ZDM5MGEwNjJmNGM2MQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnls
b24vbG9nby5zdmcKQEAgLTAsMCArMSBAQAorPHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJM
YXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAx
MjgwIDQzNiI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiNkNWQyY2E7fS5jbHMtMntmaWxsOiNm
ZmY7fS5jbHMtM3tmaWxsOiNlMDY4NGI7fS5jbHMtNHtmaWxsOiNiYjQ2NGI7fS5jbHMtNXtmaWxs
OiNlMGRlZDg7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5iYWJ5bG9uanNfaWRlbnRpdHlfY29sb3Jf
ZGFyazwvdGl0bGU+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMzkwLjM0LDE1My4xNmgyMS43NFYy
MDEuOWMzLjg2LTYuNDksMTEuNTctMTIuOCwyNi44Mi0xMi44LDIzLjg0LDAsMzYuODIsMTkuNjQs
MzYuODIsNDUuNDEsMCwyNi40Ny0xMy41LDQ4LjkxLTM5LjI3LDQ4LjkxLTEzLjY4LDAtMjAuMTYt
NC41Ni0yNC41NS0xMS43NWE2Ny42OCw2Ny42OCwwLDAsMS0uODcsOS42NUgzOTAuMTdjLjE3LTku
ODIuMTctMTkuODEuMTctMjkuODFabTQyLjI1LDUzLjY1Yy0xNS43OCwwLTIxLjU2LDEwLjUyLTIx
LjU2LDI5LjgsMCwxNi40OCw1LjA4LDI5LjI4LDIxLjIxLDI5LjI4LDEzLjY3LDAsMjEuMjEtMTIu
MjcsMjEuMjEtMzAuODZDNDUzLjQ1LDIxOC41NSw0NDYuNzksMjA2LjgxLDQzMi41OSwyMDYuODFa
Ii8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNTY0LjQyLDI1OS4yM2MwLDguNDEuNywxOS44MSwx
LjIzLDIyLjA5SDU0NC43OWMtLjctMS45My0xLjIzLTYuNDktMS40MS05LjgyLTMuMTUsNS40My05
LjY0LDExLjkyLTI2LjEyLDExLjkyLTIxLjU2LDAtMzAuNjgtMTQuMi0zMC42OC0yOC4wNSwwLTIw
LjM0LDE2LjMxLTI5LjgsNDIuNzgtMjkuOEg1NDN2LTYuMTRjMC03LTIuMjgtMTQuMzctMTUuNzct
MTQuMzctMTEuOTMsMC0xNC4zOCw1LjQzLTE1LjYxLDEyLjA5SDQ5MC43OWMxLjIzLTE0LjcyLDEw
LjUyLTI4LjIyLDM3LjM0LTI4LjA1LDIzLjQ5LjE4LDM2LjI5LDkuNDcsMzYuMjksMzAuNTFabS0y
MS4yMS0yMEg1MzEuNDZjLTE2LDAtMjMsNC43My0yMywxNC45LDAsNy4zNyw0LjkxLDEzLjMzLDE0
LjU1LDEzLjMzLDE3Ljg4LDAsMjAuMTYtMTIuMjgsMjAuMTYtMjUuNloiLz48cGF0aCBjbGFzcz0i
Y2xzLTEiIGQ9Ik01ODQuMDUsMTUzLjE2aDIxLjc0VjIwMS45YzMuODYtNi40OSwxMS41Ny0xMi44
LDI2LjgyLTEyLjgsMjMuODUsMCwzNi44MiwxOS42NCwzNi44Miw0NS40MSwwLDI2LjQ3LTEzLjUs
NDguOTEtMzkuMjcsNDguOTEtMTMuNjcsMC0yMC4xNi00LjU2LTI0LjU0LTExLjc1YTY3LjUxLDY3
LjUxLDAsMCwxLS44OCw5LjY1SDU4My44OGMuMTctOS44Mi4xNy0xOS44MS4xNy0yOS44MVptNDIu
MjUsNTMuNjVjLTE1Ljc3LDAtMjEuNTYsMTAuNTItMjEuNTYsMjkuOCwwLDE2LjQ4LDUuMDgsMjku
MjgsMjEuMjEsMjkuMjgsMTMuNjgsMCwyMS4yMi0xMi4yNywyMS4yMi0zMC44NkM2NDcuMTcsMjE4
LjU1LDY0MC41LDIwNi44MSw2MjYuMywyMDYuODFaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJN
Njk2Ljc4LDE5MS4yMWMxMS4yMiwzNS4yMywxOS4yOCw2MS41MywyMSw3MC4zSDcxOGMyLjI4LTku
NDcsNy44OS0yOS44MSwyMC03MC4zaDIxLjc0bC0zMSw5My4yNkM3MTkuOTIsMzEwLjU5LDcxMi45
LDMxOCw2OTIuMzksMzE4YTk0LDk0LDAsMCwxLTExLS43VjI5OS4zN2MxLjkzLjE4LDQuNTYuMzUs
Ni44NC4zNSw5LjgxLDAsMTQuMzctMy42OCwxOC40LTE1LjQybC0zMy4xMy05My4wOVoiLz48cGF0
aCBjbGFzcz0iY2xzLTEiIGQ9Ik03NjkuMzUsMjgxLjMyVjE1My4xNmgyMS43NFYyODEuMzJaIi8+
PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNODk0LDIzNi4wOWMwLDI2LjgyLTE1Ljc4LDQ3LjMzLTQ0
LDQ3LjMzLTI3LjM0LDAtNDMuMy0yMC00My4zLTQ3LDAtMjcuMzUsMTYuMzEtNDcuMzQsNDQuMzYt
NDcuMzRDODc3LjE3LDE4OS4xLDg5NCwyMDcuODYsODk0LDIzNi4wOVptLTY1LjIyLjE3YzAsMTgu
MjMsOC4yNCwyOS44LDIxLjc0LDI5LjgsMTMuNjcsMCwyMS4yMS0xMS4zOSwyMS4yMS0yOS42Miww
LTE5LjQ2LTcuNTQtMzAtMjEuNTYtMzBDODM2Ljg1LDIwNi40Niw4MjguNzgsMjE2LjYzLDgyOC43
OCwyMzYuMjZaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNOTA5Ljc3LDIxMy44MmMwLTcuNzEs
MC0xNS43OC0uMTctMjIuNjFoMjFhOTYuNCw5Ni40LDAsMCwxLC44OCwxMi42MmMzLjE2LTYuMzEs
MTAuNTItMTQuNzMsMjYuODItMTQuNzMsMTcuNzEsMCwzMCwxMS41NywzMCwzNC43MXY1Ny41MUg5
NjYuNTd2LTU1YzAtMTEuMjItNC0xOS4yOS0xNi0xOS4yOS0xMi44LDAtMTkuMTEsOC4yNC0xOS4x
MSwyNC45djQ5LjQ0SDkwOS43N1oiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xMDA5LDI4MS4z
MlYyNTIuMjFoMjMuMzF2MjkuMTFaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTA2OC4yNSwx
OTMuMTR2OTIuOTFjMCwyNC01Ljc5LDMyLjA4LTIzLDMyLjA4LS43LDAtNC4yLS4xOC01LjQzLS4z
NVYzMDcuMjZhMjYuNDYsMjYuNDYsMCwwLDAsMy42OC4xOGMxMS43NSwwLDEzLTYuMzEsMTMtMTku
NjRWMTkzLjE0Wm0tMTEuNzUtMjIuOFYxNTIuMjloMTEuNzV2MTguMDVaIi8+PHBhdGggY2xhc3M9
ImNscy0xIiBkPSJNMTA5NC44OSwyNTYuNmMyLjgxLDEwLjUyLDEwLjUyLDE3LDIzLjUsMTcsMTQu
MzcsMCwyMC4xNi02LjQ4LDIwLjE2LTE1LjYsMC05LjI5LTQtMTMuNjctMjIuNDQtMTguMDYtMjQt
NS43OC0yOS40Ni0xMy4xNS0yOS40Ni0yNC44OSwwLTEyLjI3LDkuMy0yNCwzMC4zMy0yNCwyMS4y
MiwwLDMwLjY4LDEyLjYyLDMyLjA4LDI1LjA3aC0xMS41N2MtMS40LTYuNjYtNi42Ni0xNS4yNS0y
MC44Ni0xNS4yNS0xNCwwLTE4LjA1LDYuODQtMTguMDUsMTMuMzIsMCw3LjM3LDMuODUsMTEuMDUs
MjAuNjgsMTUuMDgsMjUuNzcsNi4xMywzMS41NiwxNC43MiwzMS41NiwyNy44NywwLDE1Ljc4LTEy
LjYyLDI2LjMtMzIuNzgsMjYuMy0yMS4zOSwwLTMyLjYxLTExLjA1LTM0Ljg5LTI2LjgyWiIvPjxw
YXRoIGNsYXNzPSJjbHMtMiIgZD0iTTIzOC4yNCw4OS4zOGwtMTEwLjg1LDY0djEyOGwxMTAuODUs
NjQsMTEwLjg1LTY0di0xMjhaIi8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjM0OS4w
OSAxNTMuMzggMzE0LjM5IDEzMy4zNSAyODEuMDIgMTUyLjYyIDMxNS43MSAxNzIuNjUgMzQ5LjA5
IDE1My4zOCIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSIxNjAuNzcgMTcyLjY1IDI3
MS42MiAxMDguNjUgMjM4LjI0IDg5LjM4IDEyNy4zOSAxNTMuMzggMTYwLjc3IDE3Mi42NSIvPjxw
b2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSIyMDMuNTUgMjM3LjQxIDIzOC4yNCAyNTcuNDQg
MjcyLjk0IDIzNy40MSAyMzguMjQgMjE3LjM4IDIwMy41NSAyMzcuNDEiLz48cG9seWdvbiBjbGFz
cz0iY2xzLTQiIHBvaW50cz0iMzE1LjcxIDE3Mi42NSAzMTUuNzEgMjYyLjEgMjM4LjI0IDMwNi44
MyAxNjAuNzcgMjYyLjEgMTYwLjc3IDE3Mi42NSAxMjcuMzkgMTUzLjM4IDEyNy4zOSAyODEuMzcg
MjM4LjI0IDM0NS4zNyAzNDkuMDkgMjgxLjM3IDM0OS4wOSAxNTMuMzggMzE1LjcxIDE3Mi42NSIv
Pjxwb2x5Z29uIGNsYXNzPSJjbHMtNCIgcG9pbnRzPSIyMzguMjQgMTc3LjMxIDIwMy41NSAxOTcu
MzQgMjAzLjU1IDIzNy40MSAyMzguMjQgMjE3LjM4IDI3Mi45NCAyMzcuNDEgMjcyLjk0IDE5Ny4z
NCAyMzguMjQgMTc3LjMxIi8+PHBvbHlnb24gY2xhc3M9ImNscy01IiBwb2ludHM9IjMxNS43MSAx
NzIuNjUgMjcyLjk0IDE5Ny4zNCAyNzIuOTQgMjM3LjQxIDIzOC4yNCAyNTcuNDQgMjM4LjI0IDMw
Ni44MyAzMTUuNzEgMjYyLjEgMzE1LjcxIDE3Mi42NSIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMSIg
cG9pbnRzPSIxNjAuNzcgMTcyLjY1IDIwMy41NSAxOTcuMzQgMjAzLjU1IDIzNy40MSAyMzguMjQg
MjU3LjQ0IDIzOC4yNCAzMDYuODMgMTYwLjc3IDI2Mi4xIDE2MC43NyAxNzIuNjUiLz48cG9seWdv
biBjbGFzcz0iY2xzLTIiIHBvaW50cz0iMjcxLjYyIDEwOC42NSAzMTQuMzkgMTMzLjM1IDI4MS4w
MiAxNTIuNjIgMzE1LjcxIDE3Mi42NSAyNzIuOTQgMTk3LjM0IDIzOC4yNCAxNzcuMzEgMjAzLjU1
IDE5Ny4zNCAxNjAuNzcgMTcyLjY1IDI3MS42MiAxMDguNjUiLz48L3N2Zz4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dl
YmdwdS9iYWJ5bG9uL29uZUhlbG1ldFdlYkdQVS5odG1sIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9k
ZW1vcy93ZWJncHUvYmFieWxvbi9vbmVIZWxtZXRXZWJHUFUuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWIy
Y2E1MWY0MDU4NDVjY2UyOGIyOTYyZTdlODljYzdjZDVmMjliCi0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvd2Via2l0Lm9yZy9kZW1vcy93ZWJncHUvYmFieWxvbi9vbmVIZWxtZXRXZWJHUFUu
aHRtbApAQCAtMCwwICsxLDIwOSBAQAorLS0tCitsYXlvdXQ6IGVtcHR5Cit0aXRsZTogQmFieWxv
bi5qcyBIZWxtZXQgZGVtbyAoV1NMKQordGFnczogV2ViR1BVCistLS0KKzwhRE9DVFlQRSBodG1s
PgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorCis8aGVhZD4K
KyAgICA8dGl0bGU+T25lIEhlbG1ldCBXZWJHUFU8L3RpdGxlPgorCisgICAgPGxpbmsgaHJlZj0i
aHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2FucyIgcmVsPSJz
dHlsZXNoZWV0Ij4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vdXNl
LnR5cGVraXQubmV0L2N0YTR4c2IuY3NzIj4KKworICAgIDxzdHlsZT4KKyAgICAgICAgaHRtbCwK
KyAgICAgICAgYm9keSB7CisgICAgICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgIHBh
ZGRpbmc6IDA7CisgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICBiYWNrZ3JvdW5k
LWNvbG9yOiAjMmEyMzQyOworICAgICAgICAgICAgY29sb3I6ICNmZmZmZmY7CisgICAgICAgICAg
ICBmb250LWZhbWlseTogImFjdW1pbi1wcm8iOworICAgICAgICB9CisKKyAgICAgICAgI3JlbmRl
ckNhbnZhcyB7CisgICAgICAgICAgICB3aWR0aDogMTAyNHB4OworICAgICAgICAgICAgaGVpZ2h0
OiA3NjhweDsKKyAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgICAgICAgZm9udC1z
aXplOiAwOworICAgICAgICAgICAgbWFyZ2luOiBhdXRvOworICAgICAgICAgICAgYm9yZGVyOm5v
bmUgIWltcG9ydGFudDsKKyAgICAgICAgICAgIG91dGxpbmU6bm9uZSAhaW1wb3J0YW50OworICAg
ICAgICB9CisKKyAgICAgICAgLmNvbnRhaW5lciB7CisgICAgICAgICAgICBkaXNwbGF5OiBncmlk
OworICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDE3MHB4IDc1NHB4IDEw
MHB4IGF1dG87CisgICAgICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDYwcHggNzY4cHg7Cisg
ICAgICAgIH0KKworICAgICAgICAuaGVhZGVyTG9nbyB7CisgICAgICAgICAgICBncmlkLWNvbHVt
bi1zdGFydDogMjsKKyAgICAgICAgICAgIGdyaWQtY29sdW1uLWVuZDogMjsKKyAgICAgICAgICAg
IGdyaWQtcm93LXN0YXJ0OiAxOworICAgICAgICAgICAgZ3JpZC1yb3ctZW5kOiAxOworICAgICAg
ICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIwMTkzNjsKKyAgICAgICAgfQorCisgICAgICAgIC5o
ZWFkZXJMb2dvID4gYSA+IGltZyB7CisgICAgICAgICAgICB3aWR0aDogYXV0bzsKKyAgICAgICAg
ICAgIGhlaWdodDogNjBweDsKKyAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OworICAgICAg
ICB9CisKKyAgICAgICAgLmhlYWRlclRleHQgeworICAgICAgICAgICAgZ3JpZC1jb2x1bW4tc3Rh
cnQ6IDM7CisgICAgICAgICAgICBncmlkLWNvbHVtbi1lbmQ6IDM7CisgICAgICAgICAgICBncmlk
LXJvdy1zdGFydDogMTsKKyAgICAgICAgICAgIGdyaWQtcm93LWVuZDogMTsKKyAgICAgICAgICAg
IGZvbnQtc2l6ZTogMzVweDsKKyAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OworICAgICAg
ICAgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
IzIwMTkzNjsKKyAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAiYWN1bWluLXByby1leHRyYS1jb25k
ZW5zZWQiOworICAgICAgICB9CisKKyAgICAgICAgLmhlYWRlckZQUyB7CisgICAgICAgICAgICBn
cmlkLWNvbHVtbi1zdGFydDogNDsKKyAgICAgICAgICAgIGdyaWQtY29sdW1uLWVuZDogNDsKKyAg
ICAgICAgICAgIGdyaWQtcm93LXN0YXJ0OiAxOworICAgICAgICAgICAgZ3JpZC1yb3ctZW5kOiAx
OworICAgICAgICAgICAgZm9udC1zaXplOiAxNXB4OworICAgICAgICAgICAgbGluZS1oZWlnaHQ6
IDYwcHg7CisgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICBiYWNr
Z3JvdW5kLWNvbG9yOiAjQkI0NjRCOworICAgICAgICB9CisKKyAgICAgICAgLmNvbnRlbnQgewor
ICAgICAgICAgICAgZ3JpZC1jb2x1bW4tc3RhcnQ6IDI7CisgICAgICAgICAgICBncmlkLWNvbHVt
bi1lbmQ6IDQ7CisgICAgICAgICAgICBncmlkLXJvdy1zdGFydDogMjsKKyAgICAgICAgICAgIGdy
aWQtcm93LWVuZDogMjsKKyAgICAgICAgfQorCisgICAgICAgIGEgeworICAgICAgICAgICAgY29s
b3I6ICNGRkZGRkY7CisgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuc2V0OworICAgICAg
ICB9CisgICAgICAgIGE6aG92ZXIgeworICAgICAgICAgICAgY29sb3I6ICNGRkZGRkY7CisgICAg
ICAgIH0KKyAgICAgICAgYTp2aXNpdGVkIHsKKyAgICAgICAgICAgIGNvbG9yOiAjRkZGRkZGOwor
ICAgICAgICB9CisgICAgICAgIGE6Zm9jdXMgeworICAgICAgICAgICAgY29sb3I6ICNGRkZGRkY7
CisgICAgICAgIH0KKyAgICA8L3N0eWxlPgorCisgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29k
ZS5qcXVlcnkuY29tL3BlcC8wLjQuMi9wZXAubWluLmpzIj48L3NjcmlwdD4KKworICAgIDxzY3Jp
cHQgc3JjPSJiYWJ5bG9uV2ViR3B1Lm1heC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
Imh0dHBzOi8vcHJldmlldy5iYWJ5bG9uanMuY29tL2xvYWRlcnMvYmFieWxvbmpzLmxvYWRlcnMu
bWluLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgICAgPGRpdiBjbGFzcz0iY29u
dGFpbmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyTG9nbyI+CisgICAgICAgICAgICA8
YSBocmVmPSJodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2V4dGVuc2lvbnMvV2ViR1BVIj4KKyAg
ICAgICAgICAgICAgICA8aW1nIHNyYz0ibG9nby5zdmciPjwvaW1nPgorICAgICAgICAgICAgPC9h
PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyVGV4dCI+CisgICAg
ICAgICAgICA8YSBocmVmPSJodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2V4dGVuc2lvbnMvV2Vi
R1BVIj4KKyAgICAgICAgICAgICAgICBXZWJHUFUgRXhwZXJpbWVudAorICAgICAgICAgICAgPC9h
PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyRlBTIiBpZD0iZnBz
Ij4wPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgorICAgICAgICAgICAgPGNh
bnZhcyBpZD0icmVuZGVyQ2FudmFzIiB3aWR0aD0iMTAyNCIgaGVpZ2h0PSI3NjgiPjwvY2FudmFz
PgorICAgICAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgIDxzY3JpcHQgc3JjPSJvbmVIZWxtZXRX
ZWJHUFVHTFNMU2hhZGVycy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Im9uZUhlbG1l
dFdlYkdQVVdTTFNoYWRlcnMuanMiPjwvc2NyaXB0PgorCisgICAgPHNjcmlwdD4KKworICAgIGNv
bnN0IFNoYWRlcktpbmQgPSB7CisgICAgICAgIHZlcnRleDogIlZlcnRleCIsCisgICAgICAgIGZy
YWdtZW50OiAiRnJhZ21lbnQiLAorICAgICAgICBjb21wdXRlOiAiQ29tcHV0ZSIKKyAgICB9Owor
CisgICAgY2xhc3MgQ29tcGlsZVJlc3VsdCB7CisgICAgICAgIGNvbnN0cnVjdG9yKHJlc3VsdCkg
eworICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAg
ICBHZXRFcnJvck1lc3NhZ2UoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
fQorCisgICAgICAgIEdldEJpbmFyeSgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc3Vs
dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIENvbXBpbGVPcHRpb25zIHsKKyAgICAg
ICAgY29uc3RydWN0b3IoKSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBDb21waWxl
ciB7CisgICAgICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgICB9CisKKyAgICAgICAgQ29tcGls
ZUdsc2xUb1Nwdihzb3VyY2UsIGtpbmQsIHNvbWV0aGluZywgZW50cnlQb2ludE5hbWUsIG9wdGlv
bnMpIHsKKyAgICAgICAgICAgIGxldCB3c2xTb3VyY2U7CisgICAgICAgICAgICBzd2l0Y2ggKHNv
dXJjZSkgeworICAgICAgICAgICAgY2FzZSB2ZXJ0ZXhTaGFkZXJHTFNMMToKKyAgICAgICAgICAg
ICAgICB3c2xTb3VyY2UgPSB2ZXJ0ZXhTaGFkZXJXU0wxOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBmcmFnbWVudFNoYWRlckdMU0wxOgorICAgICAgICAgICAgICAg
IHdzbFNvdXJjZSA9IGZyYWdtZW50U2hhZGVyV1NMMTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgdmVydGV4U2hhZGVyR0xTTDI6CisgICAgICAgICAgICAgICAgd3Ns
U291cmNlID0gdmVydGV4U2hhZGVyV1NMMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgZnJhZ21lbnRTaGFkZXJHTFNMMjoKKyAgICAgICAgICAgICAgICB3c2xTb3Vy
Y2UgPSBmcmFnbWVudFNoYWRlcldTTDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5leHBlY3Rl
ZCBzaGFkZXIhIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBp
bGVSZXN1bHQod3NsU291cmNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxldCBTaGFkZXJj
ID0ge0NvbXBpbGVyLCBDb21waWxlT3B0aW9ucywgc2hhZGVyX2tpbmQ6IFNoYWRlcktpbmR9Owor
CisgICAgKGFzeW5jIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIW5hdmlnYXRvci5ncHUpIHsK
KyAgICAgICAgICAgIGFsZXJ0KCJXZWIgR1BVIGlzIG5vdCBzdXBwb3J0ZWQgb24geW91ciBwbGF0
Zm9ybSBzbyBmYXIuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlbmRlckNhbnZhcyIpOwor
ICAgICAgICBjb25zdCBkaXZGcHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnBzIik7CisK
KyAgICAgICAgY29uc3QgZW5naW5lID0gbmV3IEJBQllMT04uV2ViR1BVRW5naW5lKGNhbnZhcywg
e2FudGlhbGlhc2luZzogZmFsc2V9KTsKKyAgICAgICAgYXdhaXQgZW5naW5lLmluaXRBc3luYyh7
c2hhZGVyYzogU2hhZGVyY30pOworCisgICAgICAgIGNvbnN0IHNjZW5lID0gbmV3IEJBQllMT04u
U2NlbmUoZW5naW5lKTsKKyAgICAgICAgc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlID0gbmV3IEJB
QllMT04uQ3ViZVRleHR1cmUoImh0dHBzOi8vYXNzZXRzLmJhYnlsb25qcy5jb20vZW52aXJvbm1l
bnRzL2Vudmlyb25tZW50U3BlY3VsYXIuZW52Iiwgc2NlbmUpOworCisgICAgICAgIGF3YWl0IEJB
QllMT04uU2NlbmVMb2FkZXIuSW1wb3J0TWVzaEFzeW5jKCIiLCAiaHR0cHM6Ly93d3cuYmFieWxv
bmpzLmNvbS9Bc3NldHMvRGFtYWdlZEhlbG1ldC9nbFRGLyIsICJkYW1hZ2VkaGVsbWV0LmdsdGYi
LCBzY2VuZSk7CisKKyAgICAgICAgc2NlbmUuY3JlYXRlRGVmYXVsdENhbWVyYSh0cnVlLCB0cnVl
LCB0cnVlKTsKKyAgICAgICAgc2NlbmUuY3JlYXRlRGVmYXVsdFNreWJveChzY2VuZS5lbnZpcm9u
bWVudFRleHR1cmUsIHRydWUsIHVuZGVmaW5lZCwgMC4zKTsKKworICAgICAgICBlbmdpbmUucnVu
UmVuZGVyTG9vcCgoKSA9PiB7CisgICAgICAgICAgICBzY2VuZS5yZW5kZXIoKTsKKyAgICAgICAg
ICAgIGRpdkZwcy5pbm5lckhUTUwgPSBlbmdpbmUuZ2V0RnBzKCkudG9GaXhlZCgpICsgIiBmcHMi
OworICAgICAgICB9KTsKKyAgICB9KSgpOworICAgIDwvc2NyaXB0PgorPC9ib2R5PgorCis8L2h0
bWw+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9u
L29uZUhlbG1ldFdlYkdQVUdMU0xTaGFkZXJzLmpzIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kZW1v
cy93ZWJncHUvYmFieWxvbi9vbmVIZWxtZXRXZWJHUFVHTFNMU2hhZGVycy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hNTI3NzFiYzJiYTczODg3OGE5MTBhNGU4NThhNDMwODAwODRkYzk0Ci0tLSAvZGV2L251bGwK
KysrIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kZW1vcy93ZWJncHUvYmFieWxvbi9vbmVIZWxtZXRX
ZWJHUFVHTFNMU2hhZGVycy5qcwpAQCAtMCwwICsxLDQgQEAKK2NvbnN0IHZlcnRleFNoYWRlckdM
U0wxID0gWzM1LCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwNSwgMTExLCAxMTAsIDMyLCA1MiwgNTMs
IDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MCwgNjYsIDgy
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgNjUsIDczLCA3
OCwgODUsIDg2LCA0OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
ODUsIDg2LCA0OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUs
IDc2LCA2NiwgNjksIDY4LCA3OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgNjUsIDc2LCA2NiwgNjksIDY4LCA3OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUs
IDg2LCAzMiwgNDksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1
LCA3NywgNjYsIDczLCA2OSwgNzgsIDg0LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA2NSwgNzcsIDY2LCA3MywgNjksIDc4LCA4NCwgNjgsIDczLCA4MiwgNjksIDY3
LCA4NCwgODUsIDg2LCAzMiwgNDksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEw
MSwgMzIsIDY1LCA3NywgNjYsIDczLCA2OSwgNzgsIDg0LCA3MywgNzgsIDcxLCA4MiwgNjUsIDg5
LCA4MywgNjcsIDY1LCA3NiwgNjksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEw
MSwgMzIsIDc5LCA4MCwgNjUsIDY3LCA3MywgODQsIDg5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0
LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgNjUsIDc2LCA4MCwgNzIsIDY1LCA4NCwgNjksIDgzLCA4NCwgODYsIDY1LCA3NiwgODUsIDY5
LCAzMiwgNDgsIDQ2LCA1MiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgODMsIDgwLCA2OSwgNjcsIDg1LCA3NiwgNjUsIDgyLCA3OSwgODYsIDY5LCA4MiwgNjUsIDc2
LCA4MCwgNzIsIDY1LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4
MiwgNjUsIDY4LCA3MywgNjUsIDc4LCA2NywgNjksIDc5LCA4NiwgNjksIDgyLCA2NSwgNzYsIDgw
LCA3MiwgNjUsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY5LCA3
NywgNzMsIDgzLCA4MywgNzMsIDg2LCA2OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDEx
MCwgMTAxLCAzMiwgNjksIDc3LCA3MywgODMsIDgzLCA3MywgODYsIDY5LCA2OCwgNzMsIDgyLCA2
OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDEx
MCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA4NiwgNzMsIDg0LCA4
OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwg
NzYsIDY5LCA2NywgODQsIDczLCA4NiwgNzMsIDg0LCA4OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4
NCwgODUsIDg2LCAzMiwgNDksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDc2LCA3OSwgNjgsIDY2LCA2NSwgODMsIDY5LCA2OCwgNzcsIDczLCA2NywgODIsIDc5LCA4
MywgNzAsIDg1LCA4MiwgNjUsIDY3LCA2OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDEx
MCwgMTAxLCAzMiwgNzcsIDczLCA2NywgODIsIDc5LCA4MywgODUsIDgyLCA3MCwgNjUsIDY3LCA2
OSwgNzcsIDY1LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA2OSwgODQsIDY1LCA3
NiwgNzYsIDczLCA2NywgODcsIDc5LCA4MiwgNzUsIDcwLCA3NiwgNzksIDg3LCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNzksIDg1LCA3MSwgNzIsIDc4LCA2
OSwgODMsIDgzLCA4MywgODQsIDc5LCA4MiwgNjksIDczLCA3OCwgNzcsIDY5LCA4NCwgNjUsIDc2
LCA3NywgNjUsIDgwLCA3MSwgODIsIDY5LCA2OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA2OSwgODQsIDY1LCA3NiwgNzYsIDc4LCA2OSwgODMsIDgz
LCA4MywgODQsIDc5LCA4MiwgNjksIDczLCA3OCwgNzcsIDY5LCA4NCwgNjUsIDc2LCA3NywgNjUs
IDgwLCA2NiwgNzYsIDg1LCA2OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgNjksIDc4LCA4NiwgNzMsIDgyLCA3OSwgNzgsIDc3LCA2OSwgNzgsIDg0LCA2NiwgODIs
IDY4LCA3MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDc5
LCA4MiwgNzcsIDY1LCA3NiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgNjYsIDg1LCA3NywgODAsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDY2LCA4NSwgNzcsIDgwLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0
OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDc5LCA4Miwg
NzcsIDY1LCA3NiwgODgsIDg5LCA4MywgNjcsIDY1LCA3NiwgNjksIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzcsIDY1LCA4MCwg
NjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3Mywg
NzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjks
IDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNzcsIDY1LCA4MCwgOTUsIDUxLCA2OCwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYs
IDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDc3LCA2NSwgODAsIDk1LCA2NywgODUsIDY2LCA3Mywg
NjcsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDg1LCA4MywgNjks
IDgzLCA4MCwgNzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwgNzYsIDcwLCA4MiwgNzksIDc3LCA4Miwg
NjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNzcsIDY1LCA4MCwgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDgwLCA3MiwgNjksIDgyLCA3Mywg
NjcsIDY1LCA3NiwgOTUsIDcyLCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA2NywgODMsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA3MSwgNjYsIDY4LCA4Miwg
NjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY1LCA2OCwgNzMsIDY1LCA3OCwgNjcsIDY5LCA3OSwg
NjcsIDY3LCA3NiwgODUsIDgzLCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgNzksIDY3LCA2Nywg
NzYsIDg1LCA4MywgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNzgsIDg1LCA3NywgOTUsIDY2LCA3OSwgNzgsIDY5LCA5NSwgNzMsIDc4LCA3MCwg
NzYsIDg1LCA2OSwgNzgsIDY3LCA2OSwgODIsIDgzLCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY2LCAxMTEsIDExMCwgMTAxLCAxMTUsIDgwLCAxMDEs
IDExNCwgNzcsIDEwMSwgMTE1LCAxMDQsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgNzgsIDg1LCA3NywgOTUsIDc3LCA3OSwgODIsIDgwLCA3MiwgOTUs
IDczLCA3OCwgNzAsIDc2LCA4NSwgNjksIDc4LCA2NywgNjksIDgyLCA4MywgMzIsIDQ4LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4NiwgNzMsIDcxLCA3OCwgNjks
IDg0LCA4NCwgNjksIDY2LCA3NiwgNjksIDc4LCA2OCwgNzcsIDc5LCA2OCwgNjksIDc3LCA4NSwg
NzYsIDg0LCA3MywgODAsIDc2LCA4OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgODMsIDY1LCA3NywgODAsIDc2LCA2OSwgODIsIDUxLCA2OCwgNzEsIDgyLCA2OSwg
NjksIDc4LCA2OCwgNjksIDgwLCA4NCwgNzIsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDgzLCA2NSwgNzcsIDgwLCA3NiwgNjksIDgyLCA1MSwgNjgsIDY2LCA3MSwg
ODIsIDc3LCA2NSwgODAsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDg1LCA4MywgNjksIDgwLCA3MiwgODksIDgzLCA3MywgNjcsIDY1LCA3NiwgNzYsIDczLCA3MSwg
NzIsIDg0LCA3MCwgNjUsIDc2LCA3NiwgNzksIDcwLCA3MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDgwLCA2OSwgNjcsIDg1LCA3NiwgNjUsIDgyLCA2NSwg
NjUsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjks
IDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwg
NjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2NSwg
ODQsIDk1LCA2NiwgODUsIDc3LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAz
MiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3Niwg
NjksIDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA4NCwgNzMsIDc4LCA4NCwgOTUsIDg0LCA2
OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMy
LCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc4LCA3
MywgODMsIDc5LCA4NCwgODIsIDc5LCA4MCwgNzMsIDY3LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1
LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NiwgODIsIDY4LCA3MCwgOTUsIDg2
LCA5NSwgNzIsIDY5LCA3MywgNzEsIDcyLCA4NCwgOTUsIDY3LCA3OSwgODIsIDgyLCA2OSwgNzYs
IDY1LCA4NCwgNjksIDY4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA3NywgODMsIDk1LCA2NiwgODIsIDY4LCA3MCwgOTUsIDY5LCA3OCwgNjksIDgyLCA3MSwgODks
IDk1LCA2NywgNzksIDc4LCA4MywgNjksIDgyLCA4NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNzIsIDY5LCA2OSwgNzgs
IDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwg
ODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDgzLCA4MywgOTUsIDg0LCA3MiwgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDY1LCA3OCwg
NjgsIDc3LCA2NSwgODMsIDc1LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3
MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCA2OCwgNjksIDY2LCA4NSwgNzEsIDc3LCA3OSwgNjgsIDY5LCAz
MiwgNDgsIDEwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4Mywg
NzIsIDY1LCA2OCwgNjksIDgyLCA5NSwgNzgsIDY1LCA3NywgNjksIDMyLCAxMTgsIDEwMSwgMTE0
LCAxMTYsIDEwMSwgMTIwLCA1OCwgMTEyLCA5OCwgMTE0LCAxMCwgMTEyLCAxMTQsIDEwMSwgOTks
IDEwNSwgMTE1LCAxMDUsIDExMSwgMTEwLCAzMiwgMTA0LCAxMDUsIDEwMywgMTA0LCAxMTIsIDMy
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwg
MTE3LCAxMTYsIDQwLCAxMTUsIDExNiwgMTAwLCA0OSwgNTIsIDQ4LCA0NCwgOTksIDExMSwgMTA4
LCAxMTcsIDEwOSwgMTEwLCA5NSwgMTA5LCA5NywgMTA2LCAxMTEsIDExNCwgNDEsIDMyLCAxMTcs
IDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwg
MTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ4LCA0NCwgMzIs
IDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMy
LCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCA4MywgOTksIDEwMSwgMTEw
LCAxMDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEw
NSwgMTAxLCAxMTksIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTks
IDU5LCAxMywgMTAsIDEyNSwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2
LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDksIDQ0LCAzMiwgOTgsIDEwNSwgMTEw
LCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDExNywgMTEwLCAx
MDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDc3LCA5NywgMTE2LCAxMDEsIDExNCwgMTA1LCA5
NywgMTA4LCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2
NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAx
MTAsIDExNiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MCwgMzIsIDExOCwgNzksIDExMiwgOTcsIDk5LCAxMDUsIDExNiwgMTIxLCA3MywgMTEwLCAx
MDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2OSwg
MTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEw
NCwgMTE2LCAxMDksIDk3LCAxMTIsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA3NywgMTA1LCA5OSwgMTE0LCAxMTEs
IDgzLCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAx
MDEsIDExNCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MCwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgODMsIDEwNSwgMTIyLCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTgsIDY2LCAxMTcsIDEwOSwgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1
LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTcsIDEwOCwgOTgsIDEwMSwgMTAw
LCAxMTEsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAx
MTYsIDUyLCAzMiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTEsIDEx
MiwgOTcsIDk5LCAxMDUsIDExNiwgMTIxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTks
IDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTE1LCAx
MDUsIDExOCwgMTAxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5
LCA5NywgMTE2LCA1MiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDksIDk3LCAxMTIs
IDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUy
LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDEx
NiwgMTIxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5Nywg
MTE2LCA1MiwgMzIsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5
NywgOTksIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5OCwgMTE3
LCAxMDksIDExMiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTAsIDMyLCAxMTgsIDg0LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDgz
LCAxMTIsIDk3LCA5OSwgMTAxLCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEw
LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUyLCAzMiwgMTE4LCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNjcsIDEx
MSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwg
NzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEs
IDExMCwgMTE1LCAxMDUsIDExNiwgMTIxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3
NywgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDcz
LCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMTIsIDExMSwgMTA1LCAxMTAsIDExNiwgODMsIDEwNSwgMTIyLCAxMDEsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2OSwgMTA5LCAxMDUsIDExNSwg
MTE1LCAxMDUsIDExOCwgMTAxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA2OSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTgsIDY1LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAx
MTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY4LCAxMDEsIDk4LCAx
MTcsIDEwMywgNzcsIDExMSwgMTAwLCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAs
IDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODAsIDk3
LCAxMTQsIDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEx
OCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4MiwgMTAxLCAxMDIs
IDExNCwgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAx
MTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwg
OTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDEx
MSwgOTcsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcs
IDExNiwgNjYsIDExNywgMTA5LCAxMTIsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcs
IDExMSwgOTcsIDExNiwgODQsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgODMsIDExMiwg
OTcsIDk5LCAxMDEsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDEwOSwg
OTcsIDExNiwgNTIsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYs
IDY2LCAxMTcsIDEwOSwgMTEyLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2Nywg
MTExLCA5NywgMTE2LCA4NCwgMTA1LCAxMTAsIDExNiwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDEx
NSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMDgsIDEwMSwg
OTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsIDEx
NiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcs
IDExNiwgODQsIDEwNSwgMTEwLCAxMTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywg
MTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEs
IDk3LCAxMTYsIDg0LCAxMDUsIDExMCwgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjUsIDExMCwgMTA1LCAxMTUs
IDExMSwgMTE2LCAxMTQsIDExMSwgMTEyLCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTAsIDMyLCAxMTgsIDY1LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEsIDExMiwg
MTIxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUy
LCAzMiwgOTcsIDExMCwgMTA1LCAxMTUsIDExMSwgMTE2LCAxMTQsIDExMSwgMTEyLCAxMjEsIDc3
LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAz
MiwgMTE4LCA4MywgMTA0LCAxMDEsIDEwMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4MywgMTA0LCAxMDEsIDEwMSwg
MTEwLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUy
LCAzMiwgMTE1LCAxMDQsIDEwMSwgMTAxLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIw
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEx
NCwgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1
LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMTQsIDk3
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMs
IDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDg0LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAx
MDEsIDExNSwgMTE1LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3
LCAxMTYsIDUyLCAzMiwgMTE2LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEsIDExNSwgMTE1
LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MCwgMzIsIDExOCwgODQsIDEwNCwgMTA1LCA5OSwgMTA3LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDgw
LCA5NywgMTE0LCA5NywgMTA5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4
LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY4LCAxMDUsIDEx
NSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAz
MiwgMTE4LCA4NCwgMTA1LCAxMTAsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExNywgOTgsIDgzLCAxMTcsIDEx
NCwgMTAyLCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDEx
NiwgMTIxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAx
MDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDgsIDQ4LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5
LCA5NywgMTA4LCA3NiwgNDksIDk1LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5
LCA0OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0
LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA0OSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwg
OTcsIDEwOCwgNzYsIDUwLCA5NSwgNTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwg
OTUsIDQ5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAx
MDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDQ4LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5
LCA5NywgMTA4LCA3NiwgNTAsIDQ5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDUw
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEw
MSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODks
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAx
LCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OCwg
ODgsIDk1LCA5MCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgz
LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg5LCA4OSwgOTUsIDkwLCA5
MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAx
MDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgOTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4
LCA4OCwgODksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIs
IDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg5LCA5MCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwg
OTcsIDEwOCwgOTAsIDg4LCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEy
MSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ5LCA0NCwg
MzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OSwgNDEs
IDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCA3NywgMTAxLCAxMTUs
IDEwNCwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOSwgMTEx
LCAxMTQsIDEwOCwgMTAwLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTE4LCAxMDUsIDExNSwgMTA1LCA5OCwgMTA1LCAxMDgsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywg
MTAsIDEyNSwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUs
IDY2LCA2OSwgNzEsIDczLCA3OCwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYs
IDQwLCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ4
LCA0MSwgMzIsIDEwNSwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMiwgMTExLCAx
MTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDEx
MSwgMTE3LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMy
LCA2MSwgMzIsIDQ5LCA0MSwgMzIsIDEwNSwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAx
MTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAz
MiwgNjEsIDMyLCA1MCwgNDEsIDMyLCAxMDUsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTAsIDMy
LCAxMTcsIDExOCwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA4MCwgNzMsIDYxLCA1MSwgNDYsIDQ5LCA1MiwgNDksIDUz
LCA1NywgNTAsIDU0LCA1MywgNTEsIDUzLCA1NiwgNTcsIDU1LCA1NywgNTEsIDUwLCA1MSwgNTYs
IDUyLCA1NCwgNTAsIDU0LCA1MiwgNTEsIDUxLCA1NiwgNTEsIDUwLCA1NSwgNTcsIDUzLCA1OSwg
MTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAs
IDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIw
LCA2MSwgNTAsIDQ2LCA1MCwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3MSwgOTcsIDEwOSwgMTA5LCA5NywgNjksIDEx
MCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQsIDY1LCAxMTIsIDEx
MiwgMTE0LCAxMTEsIDEyMCwgNjEsIDQ5LCA0NiwgNDgsIDQ3LCA3NiwgMTA1LCAxMTAsIDEwMSwg
OTcsIDExNCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAx
MTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEw
LCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3NiwgMTE3LCAxMDksIDEwNSwg
MTEwLCA5NywgMTEwLCA5OSwgMTAxLCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgNjUsIDEx
MiwgMTEyLCAxMTQsIDExMSwgMTIwLCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ4LCA0Niwg
NTAsIDQ5LCA1MCwgNTQsIDQ0LCA0OCwgNDYsIDU1LCA0OSwgNTMsIDUwLCA0NCwgNDgsIDQ2LCA0
OCwgNTUsIDUwLCA1MCwgNDEsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMy
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNjksIDExMiwgMTE1LCAxMDUsIDEwOCwgMTEx
LCAxMTAsIDYxLCA0OCwgNDYsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ5LCA1OSwgMTMsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwgOTcsIDExNiwgMTE3
LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEyMCwgNDEsIDMyLCA5OSwgMTA4LCA5NywgMTA5LCAx
MTIsIDQwLCAxMjAsIDQ0LCA0OCwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwgNDEsIDEzLCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA5NywgOTgsIDExNSwgNjksIDEx
MiwgMTE1LCA0MCwgMTIwLCA0MSwgMzIsIDk3LCA5OCwgMTE1LCA0MCwgMTIwLCA0MSwgNDMsIDY5
LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMjAs
IDQxLCAzMiwgMTA5LCA5NywgMTIwLCA0MCwgMTIwLCA0NCwgNjksIDExMiwgMTE1LCAxMDUsIDEw
OCwgMTExLCAxMTAsIDQxLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUs
IDQwLCAxMjAsIDQxLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTIwLCA0NCwgNjks
IDExMiwgMTE1LCAxMDUsIDEwOCwgMTExLCAxMTAsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgMTMsIDEw
LCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTE2LCAxMTQsIDk3LCAxMTAsIDExNSwgMTEyLCAxMTEs
IDExNSwgMTAxLCA3NywgOTcsIDExNiwgNTEsIDQwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1
LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDEwNSwgNDksIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkx
LCA0OSwgOTMsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDUwLCA2MSwg
MTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA1OSwgMTMs
IDEwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTExLCAxMTcsIDExNiwgNzcsIDk3LCAxMTYsIDEx
NCwgMTA1LCAxMjAsIDYxLCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMCwgNDQsIDEwNSwgNDksIDQ2LCAxMjAsIDQ0LCAx
MDUsIDUwLCA0NiwgMTIwLCA0MSwgNDQsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDEw
NSwgNDgsIDQ2LCAxMjEsIDQ0LCAxMDUsIDQ5LCA0NiwgMTIxLCA0NCwgMTA1LCA1MCwgNDYsIDEy
MSwgNDEsIDQ0LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4LCA0NiwgMTIy
LCA0NCwgMTA1LCA0OSwgNDYsIDEyMiwgNDQsIDEwNSwgNTAsIDQ2LCAxMjIsIDQxLCAxMywgMTAs
IDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTExLCAx
MTcsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1LCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNSwg
MTAxLCA3NywgOTcsIDExNiwgNTEsIDQwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1LCAxMTAs
IDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDQ4LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA0OCwgNDks
IDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwgOTMsIDkx
LCA0OSwgOTMsIDQ0LCA5NywgNDgsIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgOTcsIDQ5LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA0OSwgNDksIDYx
LCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMsIDkxLCA0
OSwgOTMsIDQ0LCA5NywgNDksIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA5MSwgNDksIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgOTcsIDUwLCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0
LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA1MCwgNDksIDYxLCAx
MDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkxLCA0OSwg
OTMsIDQ0LCA5NywgNTAsIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA5MSwgNTAsIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgOTgsIDQ4LCA0OSwgNjEsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDksIDQ5LCA0
NSwgOTcsIDQ5LCA1MCwgNDIsIDk3LCA1MCwgNDksIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA5OCwgNDksIDQ5LCA2MSwgNDUsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDks
IDQ4LCA0MywgOTcsIDQ5LCA1MCwgNDIsIDk3LCA1MCwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCA5OCwgNTAsIDQ5LCA2MSwgOTcsIDUwLCA0OSwgNDIsIDk3LCA0
OSwgNDgsIDQ1LCA5NywgNDksIDQ5LCA0MiwgOTcsIDUwLCA0OCwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTAxLCAxMTYsIDYxLCA5NywgNDgsIDQ4LCA0Miwg
OTgsIDQ4LCA0OSwgNDMsIDk3LCA0OCwgNDksIDQyLCA5OCwgNDksIDQ5LCA0MywgOTcsIDQ4LCA1
MCwgNDIsIDk4LCA1MCwgNDksIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAx
MTAsIDMyLCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgOTgsIDQ4LCA0OSwgNDQsIDQwLCA0NSwgOTcs
IDUwLCA1MCwgNDIsIDk3LCA0OCwgNDksIDQzLCA5NywgNDgsIDUwLCA0MiwgOTcsIDUwLCA0OSwg
NDEsIDQ0LCA0MCwgOTcsIDQ5LCA1MCwgNDIsIDk3LCA0OCwgNDksIDQ1LCA5NywgNDgsIDUwLCA0
MiwgOTcsIDQ5LCA0OSwgNDEsIDQ0LCAxMywgMTAsIDk4LCA0OSwgNDksIDQ0LCA0MCwgOTcsIDUw
LCA1MCwgNDIsIDk3LCA0OCwgNDgsIDQ1LCA5NywgNDgsIDUwLCA0MiwgOTcsIDUwLCA0OCwgNDEs
IDQ0LCA0MCwgNDUsIDk3LCA0OSwgNTAsIDQyLCA5NywgNDgsIDQ4LCA0MywgOTcsIDQ4LCA1MCwg
NDIsIDk3LCA0OSwgNDgsIDQxLCA0NCwgMTMsIDEwLCA5OCwgNTAsIDQ5LCA0NCwgNDAsIDQ1LCA5
NywgNTAsIDQ5LCA0MiwgOTcsIDQ4LCA0OCwgNDMsIDk3LCA0OCwgNDksIDQyLCA5NywgNTAsIDQ4
LCA0MSwgNDQsIDQwLCA5NywgNDksIDQ5LCA0MiwgOTcsIDQ4LCA0OCwgNDUsIDk3LCA0OCwgNDks
IDQyLCA5NywgNDksIDQ4LCA0MSwgNDEsIDQ3LCAxMDAsIDEwMSwgMTE2LCA1OSwgMTMsIDEwLCAx
MjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNiwgMTExLCA3NiwgMTA1LCAxMTAs
IDEwMSwgOTcsIDExNCwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTIsIDExMSwgMTE5LCA0MCwgOTksIDEx
MSwgMTA4LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA3NiwgMTA1LCAxMTAs
IDEwMSwgOTcsIDExNCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwg
MTAxLCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQxLCA1OSwgMTMsIDEw
LCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNiwgMTExLCA3MSwgOTcsIDEw
OSwgMTA5LCA5NywgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwg
MTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTIsIDExMSwgMTE5LCA0MCwgOTksIDExMSwg
MTA4LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA3MSwgOTcsIDEwOSwgMTA5
LCA5NywgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQs
IDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgMTEzLCAxMTcsIDk3LCAxMTQs
IDEwMSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3LCAxMDgsIDExNywg
MTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDEx
MCwgMzIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEx
MiwgMTExLCAxMTksIDUzLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOCwgOTcs
IDEwOCwgMTE3LCAxMDEsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCAxMTUsIDExMywgNjEsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQyLCAxMTgsIDk3
LCAxMDgsIDExNywgMTAxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTE1LCAxMTMsIDQyLCAxMTUsIDExMywgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEs
IDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAz
LCAxMDEsIDExNiwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEwMSwgNDAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMTMsIDEw
LCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk5LCAxMDgs
IDk3LCAxMDksIDExMiwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCA5OSwgMTExLCAxMDgsIDExMSwg
MTE0LCA0NCwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEwMSwgNjksIDEx
MCwgOTksIDExMSwgMTAwLCAxMDEsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQ0
LCA0OCwgNDYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMywgMTAxLCAxMTYsIDgyLCA5NywgMTEwLCAxMDAsIDQw
LCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0MSwgMzIsIDEyMywg
MTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAyLCAxMTQsIDk3LCA5
OSwgMTE2LCA0MCwgMTE1LCAxMDUsIDExMCwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCAxMTUsIDEw
MSwgMTAxLCAxMDAsIDQ2LCAxMjAsIDEyMSwgMzIsIDQ0LCAxMTgsIDEwMSwgOTksIDUwLCA0MCwg
NDksIDUwLCA0NiwgNTcsIDU2LCA1NywgNTYsIDQ0LCA1NSwgNTYsIDQ2LCA1MCwgNTEsIDUxLCA0
MSwgNDEsIDQxLCA0MiwgNTIsIDUxLCA1NSwgNTMsIDU2LCA0NiwgNTMsIDUyLCA1MywgNTEsIDQx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEw
MCwgMTA1LCAxMTYsIDEwNCwgMTAxLCAxMTQsIDQwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1
LCAxMDEsIDEwMSwgMTAwLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOCwgOTcs
IDExNCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEwLCAxMTYs
IDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDk3
LCAxMTAsIDEwMCwgNjEsIDEwMywgMTAxLCAxMTYsIDgyLCA5NywgMTEwLCAxMDAsIDQwLCAxMTUs
IDEwMSwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTAwLCAxMDUsIDExNiwgMTA0LCAxMDEsIDExNCwgNjEsIDEwOSwgMTA1LCAxMjAsIDQwLCA0
NSwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDY1LCAxMDksIDExMSwgMTE3
LCAxMTAsIDExNiwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQsIDExOCwgOTcsIDExNCwgMTA1
LCA5NywgMTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEwLCAxMTYsIDQ3LCA1MCwg
NTMsIDUzLCA0NiwgNDgsIDQ0LCAxMTQsIDk3LCAxMTAsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDAsIDEwNSwgMTE2LCAxMDQsIDEwMSwg
MTE0LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwgNzcsIDk3LCAx
MjAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNjEsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExNiwgMTExLCA4MiwgNzEsIDY2LCA2OCwgNDAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMzIsIDEy
MywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA5LCA5NywgMTIwLCA4Miwg
NzEsIDY2LCA2MSwgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMDksIDk3LCAxMjAs
IDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCA0NCwgMTA5LCA5NywgMTIwLCA0
MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDEwMywgNDQsIDk5LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDQ2LCA5OCwgNDEsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDY4LCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgMTE0LCAxMDMsIDk4LCAxMDAsIDc3
LCA5NywgMTIwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDQ3LCAxMDksIDk3LCAxMjAsIDgyLCA3
MSwgNjYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCA2OCwgNjEsIDk5LCAxMDgsIDk3LCAx
MDksIDExMiwgNDAsIDEwMiwgMTA4LCAxMTEsIDExMSwgMTE0LCA0MCwgNjgsIDQxLCA0NywgNTAs
IDUzLCA1MywgNDYsIDQ4LCA0NCwgNDgsIDQ2LCA0NCwgNDksIDQ2LCA0MSwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAzLCA5OCwgNjEsIDk5LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDQyLCA2OCwgNTksIDEzLCAxMCwgMTE0LCAxMDMsIDk4
LCA2MSwgMTE2LCAxMTEsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA4MywgMTEyLCA5NywgOTksIDEw
MSwgNDAsIDExNCwgMTAzLCA5OCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTE0LCAxMDMsIDk4LCA0NCwgNjgs
IDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwg
MTE0LCAxMTEsIDEwOSwgODIsIDcxLCA2NiwgNjgsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwg
MTE0LCAxMDMsIDk4LCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAzLCA5OCwgMTAw
LCA0NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTE2LCAxMTEsIDc2LCAxMDUsIDExMCwgMTAxLCA5Nywg
MTE0LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgMTE0
LCAxMDMsIDk4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwg
MzIsIDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgMTE0LCAxMDMsIDk4LCA0NywgMTE0LCAxMDMsIDk4
LCAxMDAsIDQ2LCA5NywgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTEx
LCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIs
IDYxLCAzMiwgNDgsIDQxLCAzMiwgMTExLCAxMTcsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA1OSwg
MTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ5LCA0MSwgMzIsIDExMSwgMTE3LCAx
MTYsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcs
IDEwOCwgODcsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEw
OCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwgNTAsIDQxLCAz
MiwgMTExLCAxMTcsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc3LCA5Nywg
MTA1LCAxMTAsIDg1LCA4NiwgNDksIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDg2LCA2OSwgODIsIDg0
LCA2OSwgODgsIDk1LCA2OCwgNjksIDcwLCA3MywgNzgsIDczLCA4NCwgNzMsIDc5LCA3OCwgODMs
IDEzLCAxMCwgMTE4LCAxMTEsIDEwNSwgMTAwLCAzMiwgMTA5LCA5NywgMTA1LCAxMTAsIDQwLCAx
MTgsIDExMSwgMTA1LCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDg2LCA2OSwg
ODIsIDg0LCA2OSwgODgsIDk1LCA3NywgNjUsIDczLCA3OCwgOTUsIDY2LCA2OSwgNzEsIDczLCA3
OCwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAxLCAxMDAsIDYxLCAxMTIs
IDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODUsIDExMiwgMTAwLCA5
NywgMTE2LCAxMDEsIDEwMCwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNywgMTE4LCA4NSwgMTEyLCAxMDAsIDk3LCAx
MTYsIDEwMSwgMTAwLCA2MSwgMTE3LCAxMTgsIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDg2LCA2OSwg
ODIsIDg0LCA2OSwgODgsIDk1LCA4NSwgODAsIDY4LCA2NSwgODQsIDY5LCA5NSwgODAsIDc5LCA4
MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDEx
MCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDg2LCA2OSwgODIsIDg0LCA2
OSwgODgsIDk1LCA4NSwgODAsIDY4LCA2NSwgODQsIDY5LCA5NSwgNzgsIDc5LCA4MiwgNzcsIDY1
LCA3NiwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEw
OCwgODcsIDExMSwgMTE0LCAxMDgsIDEwMCwgNjEsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA1
OSwgMTMsIDEwLCAxMDMsIDEwOCwgOTUsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDYxLCAxMTgsIDEwNSwgMTAxLCAxMTksIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4NywgMTEx
LCAxMTQsIDEwOCwgMTAwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExMiwgMTExLCAxMTUs
IDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAw
LCA0NCwgNDksIDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAx
MTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA2MSwgMTAyLCAxMDUsIDExMCwg
OTcsIDEwOCwgODcsIDExMSwgMTE0LCAxMDgsIDEwMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQw
LCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODUsIDExMiwgMTAwLCA5
NywgMTE2LCAxMDEsIDEwMCwgNDQsIDQ5LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDgw
LCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA2MSwgMTE4LCAxMDEsIDk5
LCA1MSwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQxLCA1OSwg
MTMsIDEwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4
LCA4NywgMTExLCAxMTQsIDEwOCwgMTAwLCA2MSwgMTA5LCA5NywgMTE2LCA1MSwgNDAsIDEwMiwg
MTA1LCAxMTAsIDk3LCAxMDgsIDg3LCAxMTEsIDExNCwgMTA4LCAxMDAsIDQxLCA1OSwgMTMsIDEw
LCAxMTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNjEsIDExMCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcs
IDEwOCwgODcsIDExMSwgMTE0LCAxMDgsIDEwMCwgNDIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcs
IDEwOCwgODUsIDExMiwgMTAwLCA5NywgMTE2LCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTAsIDMyLCAxMTcsIDExOCwgNTAsIDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0
MCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTE4LCA3NywgOTcsIDEwNSwg
MTEwLCA4NSwgODYsIDQ5LCA2MSwgMTE3LCAxMTgsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAx
LCAxMDAsIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
NjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDg2LCA2OSwgODIsIDg0LCA2OSwgODgsIDk1LCA3
NywgNjUsIDczLCA3OCwgOTUsIDY5LCA3OCwgNjgsIDEzLCAxMCwgMTAzLCAxMDgsIDk1LCA4MCwg
MTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIxLCAzMiwgNDIsIDYxLCAz
MiwgNDUsIDQ5LCA0NiwgNTksIDMyLCAxMjVdLm1hcChjID0+IFN0cmluZy5mcm9tQ2hhckNvZGUo
YykpLmpvaW4oIiIpOworY29uc3QgZnJhZ21lbnRTaGFkZXJHTFNMMSA9IFszNSwgMTE4LCAxMDEs
IDExNCwgMTE1LCAxMDUsIDExMSwgMTEwLCAzMiwgNTIsIDUzLCA0OCwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODAsIDY2LCA4MiwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzcsIDY1LCA3MywgNzgsIDg1LCA4NiwgNDksIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDg1LCA4NiwgNDksIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3NiwgNjYsIDY5LCA2OCwgNzks
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3NiwgNjYsIDY5
LCA2OCwgNzksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ5LCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzcsIDY2LCA3MywgNjksIDc4
LCA4NCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc3LCA2
NiwgNzMsIDY5LCA3OCwgODQsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ5
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzcsIDY2LCA3
MywgNjksIDc4LCA4NCwgNzMsIDc4LCA3MSwgODIsIDY1LCA4OSwgODMsIDY3LCA2NSwgNzYsIDY5
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OSwgODAsIDY1LCA2
NywgNzMsIDg0LCA4OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3NiwgODAsIDcyLCA2
NSwgODQsIDY5LCA4MywgODQsIDg2LCA2NSwgNzYsIDg1LCA2OSwgMzIsIDQ4LCA0NiwgNTIsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA4MCwgNjksIDY3LCA4
NSwgNzYsIDY1LCA4MiwgNzksIDg2LCA2OSwgODIsIDY1LCA3NiwgODAsIDcyLCA2NSwgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY1LCA2OCwgNzMsIDY1LCA3
OCwgNjcsIDY5LCA3OSwgODYsIDY5LCA4MiwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2OSwgNzcsIDczLCA4MywgODMsIDczLCA4
NiwgNjksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY5LCA3Nywg
NzMsIDgzLCA4MywgNzMsIDg2LCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAz
MiwgNDksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwg
NzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgODYsIDczLCA4NCwgODksIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3Mywg
ODYsIDczLCA4NCwgODksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ5LCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NiwgNzksIDY4LCA2Niwg
NjUsIDgzLCA2OSwgNjgsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDcwLCA4NSwgODIsIDY1LCA2
NywgNjksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA3Mywg
NjcsIDgyLCA3OSwgODMsIDg1LCA4MiwgNzAsIDY1LCA2NywgNjksIDc3LCA2NSwgODAsIDY4LCA3
MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgNjksIDg0LCA2NSwgNzYsIDc2LCA3MywgNjcsIDg3LCA3
OSwgODIsIDc1LCA3MCwgNzYsIDc5LCA4NywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDEx
MCwgMTAxLCAzMiwgODIsIDc5LCA4NSwgNzEsIDcyLCA3OCwgNjksIDgzLCA4MywgODMsIDg0LCA3
OSwgODIsIDY5LCA3MywgNzgsIDc3LCA2OSwgODQsIDY1LCA3NiwgNzcsIDY1LCA4MCwgNzEsIDgy
LCA2OSwgNjksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3
NywgNjksIDg0LCA2NSwgNzYsIDc2LCA3OCwgNjksIDgzLCA4MywgODMsIDg0LCA3OSwgODIsIDY5
LCA3MywgNzgsIDc3LCA2OSwgODQsIDY1LCA3NiwgNzcsIDY1LCA4MCwgNjYsIDc2LCA4NSwgNjks
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY5LCA3OCwgODYsIDcz
LCA4MiwgNzksIDc4LCA3NywgNjksIDc4LCA4NCwgNjYsIDgyLCA2OCwgNzAsIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA3OSwgODIsIDc3LCA2NSwgNzYsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY2LCA4NSwgNzcsIDgwLCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NiwgODUsIDc3LCA4MCwg
NjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDksIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA3OSwgODIsIDc3LCA2NSwgNzYsIDg4LCA4OSwg
ODMsIDY3LCA2NSwgNzYsIDY5LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA3NiwgNzMsIDcxLCA3MiwgODQsIDc3LCA2NSwgODAsIDY4LCA3MywgODIsIDY5LCA2Nywg
ODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQs
IDczLCA3OSwgNzgsIDc3LCA2NSwgODAsIDk1LCA1MSwgNjgsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgNzks
IDc4LCA3NywgNjUsIDgwLCA5NSwgNjcsIDg1LCA2NiwgNzMsIDY3LCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4NSwgODMsIDY5LCA4MywgODAsIDcyLCA2OSwgODIs
IDczLCA2NywgNjUsIDc2LCA3MCwgODIsIDc5LCA3NywgODIsIDY5LCA3MCwgNzYsIDY5LCA2Nywg
ODQsIDczLCA3OSwgNzgsIDc3LCA2NSwgODAsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDgzLCA4MCwgNzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwgNzYsIDk1LCA3Miwg
NjUsIDgyLCA3NywgNzksIDc4LCA3MywgNjcsIDgzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCA4MiwgNzEsIDY2LCA2OCwgODIsIDY5LCA3MCwgNzYsIDY5LCA2Nywg
ODQsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDgyLCA2NSwgNjgsIDczLCA2NSwgNzgsIDY3LCA2OSwgNzksIDY3LCA2NywgNzYsIDg1LCA4Mywg
NzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzIs
IDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDc5LCA2NywgNjcsIDc2LCA4NSwgODMsIDczLCA3OSwg
NzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA4NSwgNzcs
IDk1LCA2NiwgNzksIDc4LCA2OSwgOTUsIDczLCA3OCwgNzAsIDc2LCA4NSwgNjksIDc4LCA2Nywg
NjksIDgyLCA4MywgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA2NiwgMTExLCAxMTAsIDEwMSwgMTE1LCA4MCwgMTAxLCAxMTQsIDc3LCAxMDEsIDExNSwg
MTA0LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4
LCA4NSwgNzcsIDk1LCA3NywgNzksIDgyLCA4MCwgNzIsIDk1LCA3MywgNzgsIDcwLCA3NiwgODUs
IDY5LCA3OCwgNjcsIDY5LCA4MiwgODMsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgODYsIDczLCA3MSwgNzgsIDY5LCA4NCwgODQsIDY5LCA2NiwgNzYs
IDY5LCA3OCwgNjgsIDc3LCA3OSwgNjgsIDY5LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3Niwg
ODksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA2NSwgNzcs
IDgwLCA3NiwgNjksIDgyLCA1MSwgNjgsIDcxLCA4MiwgNjksIDY5LCA3OCwgNjgsIDY5LCA4MCwg
ODQsIDcyLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNjUs
IDc3LCA4MCwgNzYsIDY5LCA4MiwgNTEsIDY4LCA2NiwgNzEsIDgyLCA3NywgNjUsIDgwLCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4NSwgODMsIDY5LCA4MCwgNzIs
IDg5LCA4MywgNzMsIDY3LCA2NSwgNzYsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzAsIDY1LCA3Niwg
NzYsIDc5LCA3MCwgNzAsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDgzLCA4MCwgNjksIDY3LCA4NSwgNzYsIDY1LCA4MiwgNjUsIDY1LCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3OSwgNjUs
IDg0LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2Nywg
ODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3OSwgNjUsIDg0LCA5NSwgNjYsIDg1LCA3Nywg
ODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3OSwg
NjUsIDg0LCA5NSwgODQsIDczLCA3OCwgODQsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2
OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3OCwgNzMsIDgzLCA3OSwgODQsIDgyLCA3
OSwgODAsIDczLCA2NywgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgy
LCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgNjYsIDgyLCA2OCwgNzAsIDk1LCA4NiwgOTUsIDcyLCA2OSwgNzMsIDcx
LCA3MiwgODQsIDk1LCA2NywgNzksIDgyLCA4MiwgNjksIDc2LCA2NSwgODQsIDY5LCA2OCwgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzcsIDgzLCA5NSwgNjYsIDgy
LCA2OCwgNzAsIDk1LCA2OSwgNzgsIDY5LCA4MiwgNzEsIDg5LCA5NSwgNjcsIDc5LCA3OCwgODMs
IDY5LCA4MiwgODYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgODMsIDcyLCA2OSwgNjksIDc4LCA5NSwgODQsIDY5LCA4OCwgODQs
IDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgODMsIDk1LCA4NCwgNzIs
IDczLCA2NywgNzUsIDc4LCA2OSwgODMsIDgzLCA2NSwgNzgsIDY4LCA3NywgNjUsIDgzLCA3NSwg
OTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4
NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
NjgsIDY5LCA2NiwgODUsIDcxLCA3NywgNzksIDY4LCA2OSwgMzIsIDQ4LCAxMCwgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDcyLCA2NSwgNjgsIDY5LCA4Miwg
OTUsIDc4LCA2NSwgNzcsIDY5LCAzMiwgMTAyLCAxMTQsIDk3LCAxMDMsIDEwOSwgMTAxLCAxMTAs
IDExNiwgNTgsIDExMiwgOTgsIDExNCwgMTAsIDEzLCAxMCwgMTMsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwg
ODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA2NiwgNjksIDcxLCA3MywgNzgsIDEzLCAx
MCwgMTEyLCAxMTQsIDEwMSwgOTksIDEwNSwgMTE1LCAxMDUsIDExMSwgMTEwLCAzMiwgMTA0LCAx
MDUsIDEwMywgMTA0LCAxMTIsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCA1OSwgMTMsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDcwLCA4MiwgNzksIDc3LCA3
NiwgNzMsIDc4LCA2OSwgNjUsIDgyLCA4MywgODAsIDY1LCA2NywgNjksIDEzLCAxMCwgMTA4LCA5
NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMTYsIDEwMCwgNDksIDUyLCA0OCwgNDQs
IDk5LCAxMTEsIDEwOCwgMTE3LCAxMDksIDExMCwgOTUsIDEwOSwgOTcsIDEwNiwgMTExLCAxMTQs
IDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCA1OSwgMTMsIDEwLCAx
MDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMy
LCA0OCwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAz
MiwgNDgsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgODMs
IDk5LCAxMDEsIDExMCwgMTAxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUy
LCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA4MCwgMTE0LCAxMTEsIDEwNiwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE4LCAx
MDUsIDEwMSwgMTE5LCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwg
MTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ5LCA0NCwgMzIs
IDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMy
LCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCA3NywgOTcsIDExNiwgMTAx
LCAxMTQsIDEwNSwgOTcsIDEwOCwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MCwgMzIsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDczLCAxMTAsIDEwMiwgMTEx
LCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY1LCAxMDksIDk4
LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc5LCAxMTIsIDk3LCA5OSwgMTA1LCAxMTYsIDEy
MSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwg
MzIsIDExOCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNzMsIDExMCwg
MTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgMTA5LCA5NywgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNzMsIDExMCwgMTAyLCAx
MTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNzcsIDEwNSwg
OTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgzLCA5NywgMTA5
LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCAxMDUsIDEyMiwgMTAxLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2NiwgMTE3LCAxMDksIDExMiwgNzMsIDExMCwg
MTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAxMDgs
IDk4LCAxMDEsIDEwMCwgMTExLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAx
MCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYs
IDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUy
LCAzMiwgMTExLCAxMTIsIDk3LCA5OSwgMTA1LCAxMTYsIDEyMSwgNzcsIDk3LCAxMTYsIDExNCwg
MTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDEsIDEwOSwgMTA1
LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5
LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwg
MTA5LCA5NywgMTEyLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5
LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExOCwgMTA1LCAxMTYsIDEyMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywg
MTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3
LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQs
IDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUy
LCAzMiwgOTgsIDExNywgMTA5LCAxMTIsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4NCwgOTcsIDExMCwgMTAzLCAxMDEs
IDExMCwgMTE2LCA4MywgMTEyLCA5NywgOTksIDEwMSwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDEx
NSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAw
LCAxMTEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTIsIDMyLCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAx
MTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3
LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDgzLCAxMDUsIDEyMiwg
MTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4
LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjksIDEw
OSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjksIDEyMSwgMTAxLCA4MCwg
MTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA2NywgMTEx
LCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2
OCwgMTAxLCA5OCwgMTE3LCAxMDMsIDc3LCAxMTEsIDEwMCwgMTAxLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3
LCAxMTYsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTIsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwg
ODIsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgOTcsIDEx
NCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2
NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDczLCAxMTAsIDEwMiwgMTEx
LCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5OSwgMTA4LCAxMDEsIDk3
LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQs
IDY3LCAxMTEsIDk3LCAxMTYsIDY2LCAxMTcsIDEwOSwgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwg
MTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEs
IDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAx
MTYsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwg
MTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2Nywg
MTExLCA5NywgMTE2LCA2NiwgMTE3LCAxMDksIDExMiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAx
MjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwg
OTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODQsIDEwNSwgMTEwLCAxMTYsIDgwLCA5NywgMTE0
LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5
OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDY1LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQs
IDY3LCAxMTEsIDk3LCAxMTYsIDg0LCAxMDUsIDExMCwgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwg
MTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5Nywg
MTE0LCA2NywgMTExLCA5NywgMTE2LCA4NCwgMTA1LCAxMTAsIDExNiwgNzcsIDk3LCAxMTYsIDEx
NCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY1LCAx
MTAsIDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEsIDExMiwgMTIxLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NSwgMTEwLCAxMDUsIDExNSwgMTExLCAxMTYsIDEx
NCwgMTExLCAxMTIsIDEyMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5
LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEs
IDExMiwgMTIxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MiwgMzIsIDExOCwgODMsIDEwNCwgMTAxLCAxMDEsIDExMCwgNjcsIDExMSwgMTA4
LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgODMsIDEw
NCwgMTAxLCAxMDEsIDExMCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5
LCA5NywgMTE2LCA1MiwgMzIsIDExNSwgMTA0LCAxMDEsIDEwMSwgMTEwLCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIs
IDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgMTA1LCA5OSwg
MTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDEwMiwg
MTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDgyLCAxMDEs
IDEwMiwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzMsIDExMCwgMTAyLCAxMTEs
IDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEx
NCwgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIw
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4NCwgMTA0LCAxMDUsIDk5
LCAxMDcsIDExMCwgMTAxLCAxMTUsIDExNSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNiwgMTA0LCAxMDUsIDk5LCAxMDcsIDExMCwg
MTAxLCAxMTUsIDExNSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDg0LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEs
IDExNSwgMTE1LCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDExOCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDUsIDExMSwgMTEw
LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MiwgMzIsIDExOCwgODQsIDEwNSwgMTEwLCAxMTYsIDY3LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTcsIDk4
LCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAs
IDExNSwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
OCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ4LCA0OCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEs
IDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA5NSwgNDksIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3
LCAxMDgsIDc2LCA0OSwgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgs
IDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgNDksIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAx
MTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgOTUsIDUwLCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5Nywg
MTA4LCA3NiwgNTAsIDk1LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
OCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0OCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEs
IDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEw
OCwgNzYsIDUwLCA1MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMs
IDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODgsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTks
IDk3LCAxMDgsIDg5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4Mywg
MTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA5MCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwg
OTcsIDEwOCwgODgsIDg4LCA5NSwgOTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OSwg
ODksIDk1LCA5MCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgz
LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDkwLCA5MCwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1
LCA5OSwgOTcsIDEwOCwgODgsIDg5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OSwgOTAsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAx
MTQsIDEwNSwgOTksIDk3LCAxMDgsIDkwLCA4OCwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEw
LCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEs
IDMyLCA0OSwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYx
LCAzMiwgNDksIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwg
NzcsIDEwMSwgMTE1LCAxMDQsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIs
IDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDExOCwgMTA1LCAxMTUsIDEwNSwgOTgsIDEwNSwgMTA4LCAxMDUsIDExNiwg
MTIxLCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcs
IDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAz
MiwgNDgsIDQxLCAzMiwgMTA1LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4
MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNTksIDEzLCAxMCwgMTA4
LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMDUs
IDExMSwgMTEwLCAzMiwgNjEsIDMyLCA0OSwgNDEsIDMyLCAxMDUsIDExMCwgMzIsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNTksIDEz
LCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5Nywg
MTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA1MCwgNDEsIDMyLCAxMDUsIDExMCwgMzIs
IDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc3LCA5NywgMTA1LCAxMTAsIDg1LCA4NiwgNDks
IDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAx
MTYsIDMyLCA2MSwgMzIsIDQ4LCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwg
MTAzLCAzMiwgNjEsIDMyLCA0OSwgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0
LCAxMDksIDMyLCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDUwLCA2OCwgMzIs
IDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2
NiwgMTE0LCAxMDAsIDEwMiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODQsIDEw
MSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDU5LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEs
IDMyLCA0OCwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYx
LCAzMiwgNTAsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwg
MTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUs
IDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDgz
LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAx
LCAxMTQsIDU5LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5
LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgODMsIDk3LCAxMDksIDExMiwgMTA4
LCAxMDEsIDExNCwgMzIsIDExNSwgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA1MCwgNjgs
IDQwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDEx
NiwgNjYsIDExNCwgMTAwLCAxMDIsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDg0
LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA0NCwgMzIsIDEwMSwgMTEwLCAxMTgsIDEw
NSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwg
ODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAx
MDEsIDExNCwgNDEsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCAxMTUsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQwLCAxMTUsIDQ0LCA5OSwgNDEsIDMyLCAxMTYsIDEwMSwg
MTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDQwLCAxMTUsIDQ0LCA5OSwgNDEsIDEzLCAxMCwgMTA4
LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwg
NTAsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIs
IDQ4LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNiwg
MTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNjcsIDExNywgOTgsIDEwMSwgMzIsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgOTcsIDEwOSwg
MTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNTks
IDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwg
NDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDUwLCA0NCwgMzIsIDk4LCAxMDUsIDExMCwg
MTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OSwgNDEsIDMyLCAxMTcsIDExMCwgMTA1
LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCAxMTUsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDEx
NCwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4
MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEw
MSwgMTE0LCA1OSwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMzIsIDExNSwgOTcs
IDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA2NywgMTE3LCA5OCwgMTAxLCA0MCwgMTE0LCAxMDEs
IDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIs
IDEwOCwgMTAxLCAxMTQsIDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA0NCwgMzIs
IDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgOTcs
IDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0
LCA0MSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwg
OTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNzYsIDExMSwgMTAwLCA0MCwgMTE1LCA0NCwgOTksIDQ0LCAxMDgsIDQx
LCAzMiwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3NiwgMTExLCAxMDAsIDQw
LCAxMTUsIDQ0LCA5OSwgNDQsIDEwOCwgNDEsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA4NSwgODYs
IDMyLCAxMTgsIDc3LCA5NywgMTA1LCAxMTAsIDg1LCA4NiwgNDksIDEzLCAxMCwgMTA4LCA5Nywg
MTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNTAsIDQ0
LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDUwLCA0
MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNiwgMTAxLCAx
MjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNTAsIDY4LCAzMiwgOTcsIDEwOCwgOTgsIDEwMSwgMTAw
LCAxMTEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDg0LCAxMDEsIDEyMCwgMTE2
LCAxMTcsIDExNCwgMTAxLCA1OSwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTA4LCA5Nywg
MTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNTAsIDQ0
LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDUxLCA0
MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNSwgOTcsIDEw
OSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgOTcsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDgz
LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAx
LCAxMTQsIDU5LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDk3LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA4MywgOTcsIDEw
OSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAx
MTQsIDUwLCA2OCwgNDAsIDk3LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA4MywgOTcsIDEwOSwg
MTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNDQs
IDMyLCA5NywgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAx
MDEsIDExNCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNDEsIDEzLCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA4NSwgODYsIDMyLCAxMTgs
IDc3LCA5NywgMTA1LCAxMTAsIDg1LCA4NiwgNDksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEs
IDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNTAsIDQ0LCAzMiwgOTgs
IDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDUyLCA0MSwgMzIsIDEx
NywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNiwgMTAxLCAxMjAsIDExNiwg
MTE3LCAxMTQsIDEwMSwgNTAsIDY4LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwg
MTE0LCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNTksIDEwLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIs
IDMyLCAzMiwgMzIsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAx
MTYsIDMyLCA2MSwgMzIsIDUwLCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwg
MTAzLCAzMiwgNjEsIDMyLCA1MywgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0
LCAxMDksIDMyLCAxMTUsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMzIsIDExNCwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgODMsIDk3
LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDEx
NCwgNTksIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4
LCAxMDUsIDExNiwgMTIxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE1
LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDUwLCA2OCwgNDAsIDExNCwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgODMsIDk3LCAxMDks
IDExMiwgMTA4LCAxMDEsIDExNCwgODQsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDQ0
LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDEx
NiwgMTIxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4MywgOTcsIDEwOSwgMTEy
LCAxMDgsIDEwMSwgMTE0LCA0MSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAs
IDEwMSwgMzIsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgODUsIDg2LCAz
MiwgMTE4LCA3NywgOTcsIDEwNSwgMTEwLCA4NSwgODYsIDQ5LCAxMywgMTAsIDEwOCwgOTcsIDEy
MSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDUwLCA0NCwg
MzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA1NCwgNDEs
IDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCAxMTYsIDEwMSwgMTIw
LCAxMTYsIDExNywgMTE0LCAxMDEsIDUwLCA2OCwgMzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwg
MTEwLCAxMTYsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDg0LCAxMDEsIDEyMCwg
MTE2LCAxMTcsIDExNCwgMTAxLCA1OSwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTA4LCA5
NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNTAs
IDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDU1
LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNSwgOTcs
IDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAs
IDExNiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODMsIDk3LCAxMDksIDExMiwg
MTA4LCAxMDEsIDExNCwgNTksIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDEx
NiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMzIsIDExNSwgOTcsIDEwOSwgMTEy
LCAxMDgsIDEwMSwgMTE0LCA1MCwgNjgsIDQwLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwg
MTE2LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDExNiwg
MTE3LCAxMTQsIDEwMSwgNDQsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA4
MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEw
MSwgMTE0LCA0MSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDExOCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgODUsIDg2LCAzMiwg
MTE4LCA3NywgOTcsIDEwNSwgMTEwLCA4NSwgODYsIDQ5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwg
MTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDUwLCA0NCwgMzIs
IDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA1NiwgNDEsIDMy
LCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCAxMTYsIDEwMSwgMTIwLCAx
MTYsIDExNywgMTE0LCAxMDEsIDUwLCA2OCwgMzIsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTE1LCAx
MDUsIDExOCwgMTAxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAx
MjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNTksIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEw
OCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIs
IDUwLCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMy
LCA1NywgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCAxMTUs
IDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMzIsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTE1
LCAxMDUsIDExOCwgMTAxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4MywgOTcs
IDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA1OSwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIs
IDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMDEsIDEwOSwgMTA1LCAxMTUs
IDExNSwgMTA1LCAxMTgsIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMzIs
IDExNSwgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA1MCwgNjgsIDQwLCAxMDEsIDEwOSwg
MTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEs
IDExNCwgODQsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDQ0LCAzMiwgMTAxLCAxMDks
IDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAx
LCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQxLCAxMywgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE4LCA2NiwgMTE3LCAxMDksIDExMiwg
ODUsIDg2LCAzMiwgMTE4LCA3NywgOTcsIDEwNSwgMTEwLCA4NSwgODYsIDQ5LCAxMywgMTAsIDEw
OCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIs
IDUwLCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMy
LCA0OSwgNDgsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwg
MTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA1MCwgNjgsIDMyLCA5OCwgMTE3LCAx
MDksIDExMiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODQsIDEwMSwgMTIwLCAx
MTYsIDExNywgMTE0LCAxMDEsIDU5LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMDgsIDk3
LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA1MCwg
NDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDks
IDQ5LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNSwg
OTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgOTgsIDExNywgMTA5LCAxMTIsIDgzLCA5
NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAx
MTQsIDU5LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDk4LCAxMTcsIDEwOSwgMTEyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgs
IDEwMSwgMTE0LCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDUwLCA2OCwg
NDAsIDk4LCAxMTcsIDEwOSwgMTEyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4
NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNDQsIDMyLCA5OCwgMTE3LCAxMDksIDEx
MiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODMsIDk3LCAxMDksIDExMiwgMTA4
LCAxMDEsIDExNCwgNDEsIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA4MCwgNzMsIDYxLCA1MSwgNDYsIDQ5LCA1MiwgNDksIDUz
LCA1NywgNTAsIDU0LCA1MywgNTEsIDUzLCA1NiwgNTcsIDU1LCA1NywgNTEsIDUwLCA1MSwgNTYs
IDUyLCA1NCwgNTAsIDU0LCA1MiwgNTEsIDUxLCA1NiwgNTEsIDUwLCA1NSwgNTcsIDUzLCA1OSwg
MTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAs
IDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIw
LCA2MSwgNTAsIDQ2LCA1MCwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3MSwgOTcsIDEwOSwgMTA5LCA5NywgNjksIDEx
MCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQsIDY1LCAxMTIsIDEx
MiwgMTE0LCAxMTEsIDEyMCwgNjEsIDQ5LCA0NiwgNDgsIDQ3LCA3NiwgMTA1LCAxMTAsIDEwMSwg
OTcsIDExNCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAx
MTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEw
LCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3NiwgMTE3LCAxMDksIDEwNSwg
MTEwLCA5NywgMTEwLCA5OSwgMTAxLCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgNjUsIDEx
MiwgMTEyLCAxMTQsIDExMSwgMTIwLCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ4LCA0Niwg
NTAsIDQ5LCA1MCwgNTQsIDQ0LCA0OCwgNDYsIDU1LCA0OSwgNTMsIDUwLCA0NCwgNDgsIDQ2LCA0
OCwgNTUsIDUwLCA1MCwgNDEsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMy
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNjksIDExMiwgMTE1LCAxMDUsIDEwOCwgMTEx
LCAxMTAsIDYxLCA0OCwgNDYsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ5LCA1OSwgMTMsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwgOTcsIDExNiwgMTE3
LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEyMCwgNDEsIDMyLCA5OSwgMTA4LCA5NywgMTA5LCAx
MTIsIDQwLCAxMjAsIDQ0LCA0OCwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwgNDEsIDEzLCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA5NywgOTgsIDExNSwgNjksIDEx
MiwgMTE1LCA0MCwgMTIwLCA0MSwgMzIsIDk3LCA5OCwgMTE1LCA0MCwgMTIwLCA0MSwgNDMsIDY5
LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMjAs
IDQxLCAzMiwgMTA5LCA5NywgMTIwLCA0MCwgMTIwLCA0NCwgNjksIDExMiwgMTE1LCAxMDUsIDEw
OCwgMTExLCAxMTAsIDQxLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUs
IDQwLCAxMjAsIDQxLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTIwLCA0NCwgNjks
IDExMiwgMTE1LCAxMDUsIDEwOCwgMTExLCAxMTAsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgMTMsIDEw
LCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTE2LCAxMTQsIDk3LCAxMTAsIDExNSwgMTEyLCAxMTEs
IDExNSwgMTAxLCA3NywgOTcsIDExNiwgNTEsIDQwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1
LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDEwNSwgNDksIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkx
LCA0OSwgOTMsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDUwLCA2MSwg
MTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA1OSwgMTMs
IDEwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTExLCAxMTcsIDExNiwgNzcsIDk3LCAxMTYsIDEx
NCwgMTA1LCAxMjAsIDYxLCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMCwgNDQsIDEwNSwgNDksIDQ2LCAxMjAsIDQ0LCAx
MDUsIDUwLCA0NiwgMTIwLCA0MSwgNDQsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDEw
NSwgNDgsIDQ2LCAxMjEsIDQ0LCAxMDUsIDQ5LCA0NiwgMTIxLCA0NCwgMTA1LCA1MCwgNDYsIDEy
MSwgNDEsIDQ0LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4LCA0NiwgMTIy
LCA0NCwgMTA1LCA0OSwgNDYsIDEyMiwgNDQsIDEwNSwgNTAsIDQ2LCAxMjIsIDQxLCAxMywgMTAs
IDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTExLCAx
MTcsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1LCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNSwg
MTAxLCA3NywgOTcsIDExNiwgNTEsIDQwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1LCAxMTAs
IDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDQ4LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA0OCwgNDks
IDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwgOTMsIDkx
LCA0OSwgOTMsIDQ0LCA5NywgNDgsIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgOTcsIDQ5LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA0OSwgNDksIDYx
LCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMsIDkxLCA0
OSwgOTMsIDQ0LCA5NywgNDksIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA5MSwgNDksIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgOTcsIDUwLCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0
LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA1MCwgNDksIDYxLCAx
MDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkxLCA0OSwg
OTMsIDQ0LCA5NywgNTAsIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA5MSwgNTAsIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgOTgsIDQ4LCA0OSwgNjEsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDksIDQ5LCA0
NSwgOTcsIDQ5LCA1MCwgNDIsIDk3LCA1MCwgNDksIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA5OCwgNDksIDQ5LCA2MSwgNDUsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDks
IDQ4LCA0MywgOTcsIDQ5LCA1MCwgNDIsIDk3LCA1MCwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCA5OCwgNTAsIDQ5LCA2MSwgOTcsIDUwLCA0OSwgNDIsIDk3LCA0
OSwgNDgsIDQ1LCA5NywgNDksIDQ5LCA0MiwgOTcsIDUwLCA0OCwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTAxLCAxMTYsIDYxLCA5NywgNDgsIDQ4LCA0Miwg
OTgsIDQ4LCA0OSwgNDMsIDk3LCA0OCwgNDksIDQyLCA5OCwgNDksIDQ5LCA0MywgOTcsIDQ4LCA1
MCwgNDIsIDk4LCA1MCwgNDksIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAx
MTAsIDMyLCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgOTgsIDQ4LCA0OSwgNDQsIDQwLCA0NSwgOTcs
IDUwLCA1MCwgNDIsIDk3LCA0OCwgNDksIDQzLCA5NywgNDgsIDUwLCA0MiwgOTcsIDUwLCA0OSwg
NDEsIDQ0LCA0MCwgOTcsIDQ5LCA1MCwgNDIsIDk3LCA0OCwgNDksIDQ1LCA5NywgNDgsIDUwLCA0
MiwgOTcsIDQ5LCA0OSwgNDEsIDQ0LCAxMywgMTAsIDk4LCA0OSwgNDksIDQ0LCA0MCwgOTcsIDUw
LCA1MCwgNDIsIDk3LCA0OCwgNDgsIDQ1LCA5NywgNDgsIDUwLCA0MiwgOTcsIDUwLCA0OCwgNDEs
IDQ0LCA0MCwgNDUsIDk3LCA0OSwgNTAsIDQyLCA5NywgNDgsIDQ4LCA0MywgOTcsIDQ4LCA1MCwg
NDIsIDk3LCA0OSwgNDgsIDQxLCA0NCwgMTMsIDEwLCA5OCwgNTAsIDQ5LCA0NCwgNDAsIDQ1LCA5
NywgNTAsIDQ5LCA0MiwgOTcsIDQ4LCA0OCwgNDMsIDk3LCA0OCwgNDksIDQyLCA5NywgNTAsIDQ4
LCA0MSwgNDQsIDQwLCA5NywgNDksIDQ5LCA0MiwgOTcsIDQ4LCA0OCwgNDUsIDk3LCA0OCwgNDks
IDQyLCA5NywgNDksIDQ4LCA0MSwgNDEsIDQ3LCAxMDAsIDEwMSwgMTE2LCA1OSwgMTMsIDEwLCAx
MjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNiwgMTExLCA3NiwgMTA1LCAxMTAs
IDEwMSwgOTcsIDExNCwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTIsIDExMSwgMTE5LCA0MCwgOTksIDEx
MSwgMTA4LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA3NiwgMTA1LCAxMTAs
IDEwMSwgOTcsIDExNCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwg
MTAxLCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQxLCA1OSwgMTMsIDEw
LCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNiwgMTExLCA3MSwgOTcsIDEw
OSwgMTA5LCA5NywgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwg
MTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTIsIDExMSwgMTE5LCA0MCwgOTksIDExMSwg
MTA4LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA3MSwgOTcsIDEwOSwgMTA5
LCA5NywgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQs
IDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgMTEzLCAxMTcsIDk3LCAxMTQs
IDEwMSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3LCAxMDgsIDExNywg
MTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDEx
MCwgMzIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEx
MiwgMTExLCAxMTksIDUzLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOCwgOTcs
IDEwOCwgMTE3LCAxMDEsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCAxMTUsIDExMywgNjEsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQyLCAxMTgsIDk3
LCAxMDgsIDExNywgMTAxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTE1LCAxMTMsIDQyLCAxMTUsIDExMywgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEs
IDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAz
LCAxMDEsIDExNiwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEwMSwgNDAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMTMsIDEw
LCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk5LCAxMDgs
IDk3LCAxMDksIDExMiwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCA5OSwgMTExLCAxMDgsIDExMSwg
MTE0LCA0NCwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEwMSwgNjksIDEx
MCwgOTksIDExMSwgMTAwLCAxMDEsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQ0
LCA0OCwgNDYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMywgMTAxLCAxMTYsIDgyLCA5NywgMTEwLCAxMDAsIDQw
LCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0MSwgMzIsIDEyMywg
MTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAyLCAxMTQsIDk3LCA5
OSwgMTE2LCA0MCwgMTE1LCAxMDUsIDExMCwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCAxMTUsIDEw
MSwgMTAxLCAxMDAsIDQ2LCAxMjAsIDEyMSwgMzIsIDQ0LCAxMTgsIDEwMSwgOTksIDUwLCA0MCwg
NDksIDUwLCA0NiwgNTcsIDU2LCA1NywgNTYsIDQ0LCA1NSwgNTYsIDQ2LCA1MCwgNTEsIDUxLCA0
MSwgNDEsIDQxLCA0MiwgNTIsIDUxLCA1NSwgNTMsIDU2LCA0NiwgNTMsIDUyLCA1MywgNTEsIDQx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEw
MCwgMTA1LCAxMTYsIDEwNCwgMTAxLCAxMTQsIDQwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1
LCAxMDEsIDEwMSwgMTAwLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOCwgOTcs
IDExNCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEwLCAxMTYs
IDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDk3
LCAxMTAsIDEwMCwgNjEsIDEwMywgMTAxLCAxMTYsIDgyLCA5NywgMTEwLCAxMDAsIDQwLCAxMTUs
IDEwMSwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTAwLCAxMDUsIDExNiwgMTA0LCAxMDEsIDExNCwgNjEsIDEwOSwgMTA1LCAxMjAsIDQwLCA0
NSwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDY1LCAxMDksIDExMSwgMTE3
LCAxMTAsIDExNiwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQsIDExOCwgOTcsIDExNCwgMTA1
LCA5NywgMTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEwLCAxMTYsIDQ3LCA1MCwg
NTMsIDUzLCA0NiwgNDgsIDQ0LCAxMTQsIDk3LCAxMTAsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDAsIDEwNSwgMTE2LCAxMDQsIDEwMSwg
MTE0LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwgNzcsIDk3LCAx
MjAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNjEsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExNiwgMTExLCA4MiwgNzEsIDY2LCA2OCwgNDAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMzIsIDEy
MywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA5LCA5NywgMTIwLCA4Miwg
NzEsIDY2LCA2MSwgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMDksIDk3LCAxMjAs
IDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCA0NCwgMTA5LCA5NywgMTIwLCA0
MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDEwMywgNDQsIDk5LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDQ2LCA5OCwgNDEsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDY4LCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgMTE0LCAxMDMsIDk4LCAxMDAsIDc3
LCA5NywgMTIwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDQ3LCAxMDksIDk3LCAxMjAsIDgyLCA3
MSwgNjYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCA2OCwgNjEsIDk5LCAxMDgsIDk3LCAx
MDksIDExMiwgNDAsIDEwMiwgMTA4LCAxMTEsIDExMSwgMTE0LCA0MCwgNjgsIDQxLCA0NywgNTAs
IDUzLCA1MywgNDYsIDQ4LCA0NCwgNDgsIDQ2LCA0NCwgNDksIDQ2LCA0MSwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAzLCA5OCwgNjEsIDk5LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDQyLCA2OCwgNTksIDEzLCAxMCwgMTE0LCAxMDMsIDk4
LCA2MSwgMTE2LCAxMTEsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA4MywgMTEyLCA5NywgOTksIDEw
MSwgNDAsIDExNCwgMTAzLCA5OCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTE0LCAxMDMsIDk4LCA0NCwgNjgs
IDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwg
MTE0LCAxMTEsIDEwOSwgODIsIDcxLCA2NiwgNjgsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwg
MTE0LCAxMDMsIDk4LCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAzLCA5OCwgMTAw
LCA0NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTE2LCAxMTEsIDc2LCAxMDUsIDExMCwgMTAxLCA5Nywg
MTE0LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgMTE0
LCAxMDMsIDk4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwg
MzIsIDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgMTE0LCAxMDMsIDk4LCA0NywgMTE0LCAxMDMsIDk4
LCAxMDAsIDQ2LCA5NywgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA2NywgNzMsIDgwLCA4MiwgNzksIDY3LCA2NSwg
NzYsIDk1LCA4MCwgNzMsIDUwLCAzMiwgNDgsIDQ2LCA0OSwgNTMsIDU3LCA0OSwgNTMsIDUyLCA1
NywgNTIsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4Miwg
NjksIDY3LCA3MywgODAsIDgyLCA3OSwgNjcsIDY1LCA3NiwgOTUsIDgwLCA3MywgMzIsIDQ4LCA0
NiwgNTEsIDQ5LCA1NiwgNTEsIDQ4LCA1NywgNTYsIDU2LCA1NCwgNDksIDU2LCAxMywgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzcsIDczLCA3OCwgNzMsIDc3LCA4
NSwgNzcsIDg2LCA2NSwgODIsIDczLCA2NSwgNzgsIDY3LCA2OSwgMzIsIDQ4LCA0NiwgNDgsIDQ4
LCA0OCwgNTMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDEx
MCwgMTE4LCAxMDEsIDExNCwgMTE2LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwg
MTE1LCAxMTUsIDg0LCAxMTEsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDgzLCAx
MDgsIDExMSwgMTEyLCAxMDEsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAx
MTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDEzLCAxMCwgMTIzLCAx
MywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTUsIDExMywgMTE3LCA5
NywgMTE0LCAxMDEsIDQwLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwg
MTE1LCA0MSwgNDMsIDc3LCA3MywgNzgsIDczLCA3NywgODUsIDc3LCA4NiwgNjUsIDgyLCA3Mywg
NjUsIDc4LCA2NywgNjksIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTAyLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA3MSwgMTE0LCA5
NywgMTIyLCAxMDUsIDExMCwgMTAzLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5
NywgMTEwLCA5OSwgMTAxLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDEsIDMyLCAx
MjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDYxLCAxMTUsIDk3LCAx
MTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQyLCA1MCwgNTMsIDQ2LCA0OCwgNDEsIDU5
LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTAy
LCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTcsIDQ4LCA1OSwgMTMsIDEw
LCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEwMywgMTAxLCAxMTYsIDY1LCA2
NSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA3MCwgOTcsIDk5
LCAxMTYsIDExMSwgMTE0LCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEs
IDExNCwgMTA5LCA5NywgMTA4LCA4NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgNDEsIDMyLCAx
MjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwgNjgsIDEwMiwgMTAwLCAxMjAs
IDYxLCAxMDAsIDcwLCAxMDAsIDEyMCwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
ODYsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0MSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwgNjgsIDEwMiwgMTAwLCAxMjEsIDYxLCAx
MDAsIDcwLCAxMDAsIDEyMSwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODYsIDEw
MSwgOTksIDExNiwgMTExLCAxMTQsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0MSwgNTksIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgMTA4LCAxMTEsIDExMiwgMTAxLCA4Mywg
MTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgNjEsIDEwOSwgOTcsIDEyMCwgNDAsIDEwMCwgMTExLCAx
MTYsIDQwLCAxMTAsIDY4LCAxMDIsIDEwMCwgMTIwLCA0NCwgMTEwLCA2OCwgMTAyLCAxMDAsIDEy
MCwgNDEsIDQ0LCAxMDAsIDExMSwgMTE2LCA0MCwgMTEwLCA2OCwgMTAyLCAxMDAsIDEyMSwgNDQs
IDExMCwgNjgsIDEwMiwgMTAwLCAxMjEsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDEwMywgMTAxLCAxMTEsIDEwOSwgMTAxLCAxMTYsIDExNCwgMTA1LCA5
OSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA3MCwgOTcsIDk5
LCAxMTYsIDExMSwgMTE0LCA2MSwgMTEyLCAxMTEsIDExOSwgNDAsIDExNSwgOTcsIDExNiwgMTE3
LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDExNSwgMTA4LCAxMTEsIDExMiwgMTAxLCA4MywgMTEz
LCAxMTcsIDk3LCAxMTQsIDEwMSwgNDEsIDQ0LCA0OCwgNDYsIDUxLCA1MSwgNTEsIDQxLCA1OSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAzLCAxMDEsIDExMSwgMTA5LCAx
MDEsIDExNiwgMTE0LCAxMDUsIDk5LCA2NSwgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA3MCwgOTcs
IDk5LCAxMTYsIDExMSwgMTE0LCA2MSwgMTE1LCAxMTMsIDExNCwgMTE2LCA0MCwgMTE1LCAxMDgs
IDExMSwgMTEyLCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCA0MSwgNTksIDEzLCAx
MCwgMTAzLCAxMDEsIDExMSwgMTA5LCAxMDEsIDExNiwgMTE0LCAxMDUsIDk5LCA2NSwgMTA4LCAx
MTIsIDEwNCwgOTcsIDcxLCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCA0MiwgNjEsIDQ4LCA0
NiwgNTUsIDUzLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwg
MTE4LCAxMDEsIDk5LCA1MCwgNDAsIDEwMywgMTAxLCAxMTEsIDEwOSwgMTAxLCAxMTYsIDExNCwg
MTA1LCA5OSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA3MCwg
OTcsIDk5LCAxMTYsIDExMSwgMTE0LCA0NCwgMTAzLCAxMDEsIDExMSwgMTA5LCAxMDEsIDExNiwg
MTE0LCAxMDUsIDk5LCA2NSwgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA3MCwgOTcsIDk5LCAxMTYs
IDExMSwgMTE0LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIs
IDMyLCA5NywgMTEyLCAxMTIsIDEwOCwgMTIxLCA3MywgMTA5LCA5NywgMTAzLCAxMDEsIDgwLCAx
MTQsIDExMSwgOTksIDEwMSwgMTE1LCAxMTUsIDEwNSwgMTEwLCAxMDMsIDQwLCAxMTgsIDEwMSwg
OTksIDUyLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDEsIDMyLCAxMjMsIDEz
LCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDExNCwgMTAzLCA5OCwgNjEs
IDExNiwgMTExLCA3MSwgOTcsIDEwOSwgMTA5LCA5NywgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQw
LCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTE0LCAxMDMsIDk4LCA0MSwgNTks
IDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDExNCwgMTAzLCA5OCwg
NjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDExNCwgMTAxLCAx
MTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMTQsIDEwMywgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDEx
NiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTEx
LCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAx
MTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAx
MTAsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5
LCA5NywgMTA4LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwg
MTEwLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3
NiwgNDgsIDQ4LCAxMywgMTAsIDQzLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwg
OTksIDk3LCAxMDgsIDc2LCA0OSwgOTUsIDQ5LCA0MiwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwg
OTcsIDEwOCwgNDYsIDEyMSwgNDEsIDEzLCAxMCwgNDMsIDExOCwgODMsIDExMiwgMTA0LCAxMDEs
IDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA0OCwgNDIsIDQwLCAxMTAsIDExMSwgMTE0
LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjIsIDQxLCAxMywgMTAsIDQzLCAxMTgsIDgzLCAxMTIsIDEw
NCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgNDksIDQyLCA0MCwgMTEwLCAx
MTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIwLCA0MSwgMTMsIDEwLCA0MywgMTE4LCA4Mywg
MTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDk1LCA1MCwgNDIs
IDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjEsIDQyLCAxMTAsIDExMSwg
MTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjAsIDQxLCAxMywgMTAsIDQzLCAxMTgsIDgzLCAxMTIs
IDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgOTUsIDQ5LCA0MiwgNDAs
IDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMSwgNDIsIDExMCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgNDYsIDEyMiwgNDEsIDEzLCAxMCwgNDMsIDExOCwgODMsIDExMiwgMTA0
LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0OCwgNDIsIDQwLCA0MCwgNTEs
IDQ2LCA0OCwgNDIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMiwgNDIsIDEx
MCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMiwgNDEsIDQ1LCA0OSwgNDYsIDQ4LCA0
MSwgMTMsIDEwLCA0MywgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5Nywg
MTA4LCA3NiwgNTAsIDQ5LCA0MiwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYs
IDEyMiwgNDIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMCwgNDEsIDEzLCAx
MCwgNDMsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYs
IDUwLCA1MCwgNDIsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjAsIDQy
LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjAsIDQ1LCA0MCwgMTEwLCAxMTEs
IDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIxLCA0MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5Nywg
MTA4LCA0NiwgMTIxLCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTUsIDExNiwg
MTE0LCAxMTcsIDk5LCAxMTYsIDMyLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwg
MTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMTMsIDEwLCAxMjMsIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAy
LCAxMDIsIDExNSwgMTAxLCAxMTYsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAs
IDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDU5LCAxMywgMTAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEw
NSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA5NywgMTE2LCAxMTYsIDEwMSwgMTEwLCAxMTcsIDk3LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3NiwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDcyLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA4NSwgMTEwLCA5OSwgMTA4
LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgODYsIDEwMCwgMTExLCAxMTYsIDcyLCA1OSwgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAx
MTUsIDExNSwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3Niwg
MTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIs
IDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MCwgMTExLCAxMDUsIDExMCwgMTE2
LCA2NSwgMTEwLCAxMDAsIDgzLCAxMTIsIDExMSwgMTE2LCA4MCwgMTE0LCAxMDEsIDc2LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCA0MCwgMTE4
LCAxMDEsIDk5LCA1MiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgOTcsIDExNiwg
OTcsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgODYsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgNzgsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgMTE0LCAxMDEs
IDExNSwgMTE3LCAxMDgsIDExNiwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgs
IDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAx
LCAxMTYsIDYxLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYsIDk3LCA0Niwg
MTIwLCAxMjEsIDEyMiwgNDUsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEs
IDExMCwgODcsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAx
MDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDYxLCAxMDAsIDExMSwgMTE2LCA0
MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwg
MTE2LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQ0LCAxMTQsIDEwMSwgMTE1LCAxMTcs
IDEwOCwgMTE2LCA0NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwgMTE1
LCAxMDEsIDExNiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYs
IDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAs
IDk5LCAxMDEsIDYxLCAxMTUsIDExMywgMTE0LCAxMTYsIDQwLCAxMTQsIDEwMSwgMTE1LCAxMTcs
IDEwOCwgMTE2LCA0NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2
LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0MSwg
NTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc2LCA2MSwgMTEw
LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE0LCAxMDEsIDEx
NSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAyLCAx
MDIsIDExNSwgMTAxLCAxMTYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEw
OCwgMTE2LCA0NiwgNzIsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIy
LCAxMDEsIDQwLCA4NiwgNDMsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3Niwg
NDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA4NiwgMTAw
LCAxMTEsIDExNiwgNzIsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEs
IDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgODYsIDQ0LCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwg
MTE2LCA0NiwgNzIsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgs
IDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEw
OSwgMTEyLCAxMDEsIDEwMCwgNjEsIDEwMCwgMTExLCAxMTYsIDQwLCA3OCwgNDQsIDExNCwgMTAx
LCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3NiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAx
MTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDYxLCAxMTUsIDk3
LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAsIDExNCwgMTAx
LCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDg1LCAxMTAs
IDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEw
MSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwg
NTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgOTksIDExMSwgMTA5
LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA5NywgMTA4LCA4MCwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEw
NSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIs
IDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ0LCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgODYsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgNzgsIDQxLCAzMiwgMTIz
LCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEw
LCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDEx
NiwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1
LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNjEs
IDEwOCwgMTAxLCAxMTAsIDEwMywgMTE2LCAxMDQsIDQwLCA0NSwgMTA4LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDY4LCA5NywgMTE2LCA5NywgNDYsIDEyMCwgMTIxLCAxMjIsIDQxLCA1OSwgMTMsIDEw
LCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYsIDYxLCAxMTAsIDExMSwgMTE0
LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCA0NSwgMTA4LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDY4LCA5NywgMTE2LCA5NywgNDYsIDEyMCwgMTIxLCAxMjIsIDQxLCA1OSwgMTMsIDEw
LCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzIsIDYxLCAxMTAsIDExMSwgMTE0
LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCA4NiwgNDMsIDExNCwgMTAxLCAxMTUs
IDExNywgMTA4LCAxMTYsIDQ2LCA3NiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDEx
NywgMTA4LCAxMTYsIDQ2LCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDYxLCAxMTUsIDk3LCAxMTYs
IDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgODYsIDQ0LCAx
MTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzIsIDQxLCA0MSwgNTksIDEzLCAxMCwg
MTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3Niwg
ODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNjEsIDEwMCwgMTExLCAx
MTYsIDQwLCA3OCwgNDQsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3NiwgNDEs
IDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAx
MTEsIDExNiwgNzYsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDY5
LCAxMTIsIDExNSwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAw
LCAxMTEsIDExNiwgNzYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAs
IDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAx
MDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExMiwgMTE0
LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEw
MiwgMTExLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDcyLCAxMDEsIDEw
OSwgMTA1LCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgODAsIDExNCwgMTAxLCA3
NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwg
NDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3
LCAxMTYsIDk3LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDg2LCA0NCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDc4LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1
LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDEx
NCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDEx
NywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDYxLCAxMDAsIDExMSwgMTE2
LCA0MCwgNzgsIDQ0LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYsIDk3LCA0
NiwgMTIwLCAxMjEsIDEyMiwgNDEsIDQyLCA0OCwgNDYsIDUzLCA0MywgNDgsIDQ2LCA1MywgNTks
IDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwg
MTE2LCA3NiwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNjksIDEx
MiwgMTE1LCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDEx
MSwgMTE2LCA3NiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYs
IDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDEx
MiwgMTAxLCAxMDAsIDYxLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEw
MCwgMTExLCAxMTYsIDc2LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNTksIDEzLCAxMCwgMTI1LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAx
MTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDc2LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDk1LCA4MywgMTE2
LCA5NywgMTEwLCAxMDAsIDk3LCAxMTQsIDEwMCwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0NCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgOTcsIDExMCwgMTAzLCAxMDEsIDQxLCAx
MywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA5
LCA5NywgMTIwLCA0MCwgNDgsIDQ2LCA0NCwgNDksIDQ2LCA0OCwgNDUsIDEwOCwgMTAxLCAxMTAs
IDEwMywgMTE2LCAxMDQsIDQwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEwMiwgMTAy
LCAxMTUsIDEwMSwgMTE2LCA0MSwgNDcsIDExNCwgOTcsIDExMCwgMTAzLCAxMDEsIDQxLCA1OSwg
MTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEs
IDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTks
IDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIs
IDEwMiwgOTUsIDgwLCAxMDQsIDEyMSwgMTE1LCAxMDUsIDk5LCA5NywgMTA4LCA0MCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAx
MTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEw
MCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAs
IDMyLCA0OSwgNDYsIDQ4LCA0NywgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMDgs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEs
IDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcs
IDExNiwgMTAxLCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzYsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDcxLCA3
NiwgODQsIDcwLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywg
MTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MDUsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE1LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwg
MTAxLCAxMDAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgs
IDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwg
MTAyLCAxMDIsIDYxLCA0OSwgNDYsIDQ4LCA0NywgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUs
IDQwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAs
IDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAyLCA5NywgOTksIDExNiwgMTExLCAxMTQs
IDYxLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAs
IDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQyLCAxMDUsIDExMCwg
MTE4LCAxMDEsIDExNCwgMTE1LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAs
IDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAsIDExNywgOTcsIDExNiwgMTA1LCAxMTEsIDEx
MCwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDQ5LCA0Niwg
NDgsIDQ1LCAxMDIsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwgNDIsIDEwMiwgOTcsIDk5LCAxMTYs
IDExMSwgMTE0LCA0MSwgNTksIDEzLCAxMCwgOTcsIDExNiwgMTE2LCAxMDEsIDExMCwgMTE3LCA5
NywgMTE2LCAxMDUsIDExMSwgMTEwLCA0MiwgNjEsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAsIDEx
NywgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTA4LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3MCwgOTcsIDEwOCwg
MTA4LCAxMTEsIDEwMiwgMTAyLCA0MiwgNjEsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAsIDExNywg
OTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAx
MTQsIDExMCwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwg
OTcsIDExMCwgOTksIDEwMSwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNTksIDEz
LCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAx
MDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAx
MDIsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5
LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQ0LCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTE0LCA5NywgMTEwLCAxMDMsIDEwMSwgNDQsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMDUsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE1LCAxMDEsIDgzLCAxMTMs
IDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNDEsIDEzLCAx
MCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTEx
LCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAy
LCAxMDIsIDk1LCA4MCwgMTA0LCAxMjEsIDExNSwgMTA1LCA5OSwgOTcsIDEwOCwgNDAsIDEwOCwg
MTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwg
ODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywg
MTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5Nywg
MTA4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwg
MTAyLCA5NSwgODMsIDExNiwgOTcsIDExMCwgMTAwLCA5NywgMTE0LCAxMDAsIDQwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwg
MTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMTUsIDcyLCA5NywgMTA4LCAxMDIsIDY1
LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAx
LCAxMjAsIDExMiwgMTExLCAxMTAsIDEwMSwgMTEwLCAxMTYsIDQxLCAxMywgMTAsIDEyMywgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwg
MTAyLCAxMDIsIDYxLCA0OCwgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgOTksIDExMSwgMTE1LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA2MSwgMTA5LCA5
NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgNDUsIDEwOCwgMTA1
LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgNDQsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDEx
MSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4
NywgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMDUsIDEwMiwgMzIsIDQwLCA5OSwgMTExLCAxMTUsIDY1
LCAxMTAsIDEwMywgMTA4LCAxMDEsIDYyLCA2MSwgOTksIDExMSwgMTE1LCA3MiwgOTcsIDEwOCwg
MTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAy
LCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDYxLCAxMDksIDk3LCAxMjAsIDQwLCA0OCwg
NDYsIDQ0LCAxMTIsIDExMSwgMTE5LCA0MCwgOTksIDExMSwgMTE1LCA2NSwgMTEwLCAxMDMsIDEw
OCwgMTAxLCA0NCwgMTAxLCAxMjAsIDExMiwgMTExLCAxMTAsIDEwMSwgMTEwLCAxMTYsIDQxLCA0
MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAs
IDMyLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNTksIDEzLCAxMCwgMTI1LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3
LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDk3
LCAxMDgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAy
LCAxMDIsIDk1LCA4MCwgMTA0LCAxMjEsIDExNSwgMTA1LCA5OSwgOTcsIDEwOCwgNDAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAw
LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1
LCAxMDMsIDEwNCwgMTE2LCA2NywgMTAxLCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0NCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDExNSwgNzIsIDk3LCAxMDgsIDEwMiwg
NjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDk5LCAxMTEs
IDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA3LCA3Nywg
MTA1LCAxMTAsIDExNywgMTE1LCA3NiwgMTExLCAxMDMsIDUwLCA2NywgMTExLCAxMTAsIDEwMSwg
NjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUs
IDExNiwgMTIxLCA4MiwgOTcsIDExNiwgMTA1LCAxMTEsIDYxLCA1NCwgNDYsIDU0LCA1MiwgNTEs
IDU2LCA1MywgNTQsIDQ5LCA1NiwgNTcsIDU1LCA1NSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDExMCwgOTksIDEwMSwgMTEwLCAxMTYsIDExNCwgOTcs
IDExNiwgMTA1LCAxMTEsIDExMCwgNzUsIDk3LCAxMTIsIDExMiwgOTcsIDYxLCAxMDcsIDc3LCAx
MDUsIDExMCwgMTE3LCAxMTUsIDc2LCAxMTEsIDEwMywgNTAsIDY3LCAxMTEsIDExMCwgMTAxLCA2
NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwg
MTE2LCAxMjEsIDgyLCA5NywgMTE2LCAxMDUsIDExMSwgNDcsIDQwLCA0OSwgNDYsIDQ4LCA0NSwg
OTksIDExMSwgMTE1LCA3MiwgOTcsIDEwOCwgMTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA0
MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwg
MTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDExMiwg
MTE0LCAxMDEsIDk3LCAxMDAsIDgzLCA3MSwgNjEsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCA0NSwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA0MiwgOTksIDExMSwgMTEwLCA5OSwgMTAxLCAxMTAsIDExNiwgMTE0LCA5Nywg
MTE2LCAxMDUsIDExMSwgMTEwLCA3NSwgOTcsIDExMiwgMTEyLCA5NywgNDQsIDQ1LCA5OSwgMTEx
LCAxMTAsIDk5LCAxMDEsIDExMCwgMTE2LCAxMTQsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc1
LCA5NywgMTEyLCAxMTIsIDk3LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA2MSwgMTAxLCAxMjAsIDEx
MiwgNTAsIDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDEwMCwg
MTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQsIDQ5LCA0
NiwgNDgsIDQxLCA0NCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgMTEyLCAxMTQsIDEwMSwgOTcsIDEwMCwgODMs
IDcxLCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMy
LCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNTksIDEzLCAxMCwgMTI1LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAx
MTYsIDEwMSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDk3LCAx
MDgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAx
MDIsIDk1LCA3MSwgNzYsIDg0LCA3MCwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEw
NSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTAx
LCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA4MywgOTks
IDk3LCAxMDgsIDEwMSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNzksIDEwMiwgMTAyLCAxMTUs
IDEwMSwgMTE2LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDk5LCAxMDAsIDYxLCAxMDAsIDExMSwgMTE2LCA0MCwgNDUsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQs
IDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDEs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDIsIDk3LCAxMDgsIDEw
OCwgMTExLCAxMDIsIDEwMiwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEw
MSwgNDAsIDk5LCAxMDAsIDQyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjUsIDExMCwgMTAz
LCAxMDgsIDEwMSwgODMsIDk5LCA5NywgMTA4LCAxMDEsIDQzLCAxMDgsIDEwNSwgMTAzLCAxMDQs
IDExNiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2
LCA0MSwgNTksIDEzLCAxMCwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDQyLCA2
MSwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDU5LCAxMywgMTAsIDExNCwgMTAx
LCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEw
MiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5
OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDk3LCAxMDgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5
NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4
LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcs
IDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCA5OSwgMTExLCAxMTUsIDcyLCA5NywgMTA4LCAxMDIsIDY1LCAxMTAsIDEwMywgMTA4LCAx
MDEsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAxLCAxMjAsIDExMiwgMTExLCAx
MTAsIDEwMSwgMTEwLCAxMTYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDgzLCA5OSwgOTcsIDEw
OCwgMTAxLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAx
MTYsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5NywgMTA4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2
LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA5NSwgODAsIDEwNCwgMTIxLCAxMTUs
IDEwNSwgOTksIDk3LCAxMDgsIDQwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwg
MTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMDAsIDEwNSwgMTE0LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYs
IDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQ0LCA5OSwgMTExLCAxMTUsIDcyLCA5
NywgMTA4LCAxMDIsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUs
IDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3MCwgODIsIDY5
LCA4MywgNzgsIDY5LCA3NiwgOTUsIDc3LCA2NSwgODgsIDczLCA3NywgODUsIDc3LCA5NSwgNzks
IDc4LCA5NSwgODIsIDc5LCA4NSwgNzEsIDcyLCAzMiwgNDgsIDQ2LCA1MCwgNTMsIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMywgMTAxLCAxMTYsIDY5LCAxMTAsIDEwMSwgMTE0LCAx
MDMsIDEyMSwgNjcsIDExMSwgMTEwLCAxMTUsIDEwMSwgMTE0LCAxMTgsIDk3LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDQwLCA5OSwgMTExLCAxMTAsIDEx
NSwgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcs
IDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAx
LCAxMTAsIDExNiwgODIsIDQ4LCA0NCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwg
MTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA0OSwgNDYsIDQ4LCA0MywgMTE1LCAxMTIs
IDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEs
IDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgsIDQyLCA0MCwgNDksIDQ2LCA0OCwgNDcs
IDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2
NiwgMTE0LCAxMDAsIDEwMiwgNDYsIDEyMSwgNDUsIDQ5LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEw
LCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMywgMTAxLCAxMTYsIDY2LCA4
MiwgNjgsIDcwLCA3NiwgMTExLCAxMTEsIDEwNywgMTE3LCAxMTIsIDQwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDExMiwgMTAxLCAxMTQsIDk5LCAxMDEsIDExMiwgMTE2LCAxMTcsIDk3LCAx
MDgsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDMyLCAx
MjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDg1LCA4NiwgNjEsIDExOCwgMTAxLCA5
OSwgNTAsIDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDQ0LCAxMTIsIDEwMSwgMTE0LCA5OSwg
MTAxLCAxMTIsIDExNiwgMTE3LCA5NywgMTA4LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAs
IDEwMSwgMTE1LCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgOTgs
IDExNCwgMTAwLCAxMDIsIDc2LCAxMTEsIDExMSwgMTA3LCAxMTcsIDExMiwgNjEsIDExNiwgMTAx
LCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNDAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAx
MTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgODMsIDk3LCAx
MDksIDExMiwgMTA4LCAxMDEsIDExNCwgNDQsIDg1LCA4NiwgNDEsIDU5LCAxMywgMTAsIDExNCwg
MTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OCwgMTE0LCAxMDAsIDEwMiwgNzYsIDExMSwg
MTExLCAxMDcsIDExNywgMTEyLCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMywgMTAxLCAxMTYsIDgyLCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDcwLCAxMTQsIDExMSwgMTA5LCA2
NiwgODIsIDY4LCA3MCwgNzYsIDExMSwgMTExLCAxMDcsIDExNywgMTEyLCA0MCwgOTksIDExMSwg
MTEwLCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTUsIDExMiwgMTAxLCA5
OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAx
MDksIDEwMSwgMTEwLCAxMTYsIDgyLCA0OCwgNDQsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMy
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEw
LCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA0MSwgMzIsIDEyMywgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMDksIDEwNSwgMTIwLCA0MCwgMTAxLCAxMTAsIDEx
OCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwg
MTAyLCA0NiwgMTIwLCAxMjAsIDEyMCwgNDQsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEs
IDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNDYsIDEyMSwgMTIx
LCAxMjEsIDQ0LCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAs
IDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA0OCwgNDEs
IDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTI1
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDExNCwgMTAxLCAxMTUsIDExMCwg
MTAxLCAxMDgsIDgzLCA5OSwgMTA0LCAxMDgsIDEwNSwgOTksIDEwNywgNzEsIDcxLCA4OCwgNDAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQ0LCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDQ4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDQxLCAxMywg
MTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0MywgNDAs
IDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1Nywg
NDgsIDQ1LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEw
MSwgNDgsIDQxLCA0MiwgMTEyLCAxMTEsIDExOSwgNTMsIDQwLCA0OSwgNDYsIDQ4LCA0NSwgODYs
IDEwMCwgMTExLCAxMTYsIDcyLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDIsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDgz
LCA5OSwgMTA0LCAxMDgsIDEwNSwgOTksIDEwNywgNzEsIDcxLCA4OCwgNDAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQ0LCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAs
IDk5LCAxMDEsIDQ4LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDQxLCAxMywg
MTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0MywgNDAs
IDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1Nywg
NDgsIDQ1LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEw
MSwgNDgsIDQxLCA0MiwgMTEyLCAxMTEsIDExOSwgNTMsIDQwLCA0OSwgNDYsIDQ4LCA0NSwgODYs
IDEwMCwgMTExLCAxMTYsIDcyLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDY4LCAxMDUs
IDExNSwgMTE2LCAxMTQsIDEwNSwgOTgsIDExNywgMTE2LCAxMDUsIDExMSwgMTEwLCA3MCwgMTE3
LCAxMTAsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDk1LCA4NCwgMTE0LCAxMTEsIDExOSwgOTgs
IDExNCwgMTA1LCAxMDAsIDEwMywgMTAxLCA4MiwgMTAxLCAxMDUsIDExNiwgMTIyLCA3MSwgNzEs
IDg4LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA3
MiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgMTA4LCAxMTIsIDEwNCwgOTcs
IDcxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDk3LCA1MCwgNjEsIDExNSwgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgNDAsIDk3LCAxMDgsIDEx
MiwgMTA0LCA5NywgNzEsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTAwLCA2MSwgNzgsIDEwMCwgMTExLCAxMTYsIDcyLCA0MiwgNzgsIDEwMCwgMTExLCAxMTYs
IDcyLCA0MiwgNDAsIDk3LCA1MCwgNDUsIDQ5LCA0NiwgNDgsIDQxLCA0MywgNDksIDQ2LCA0OCwg
NTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk3LCA1MCwgNDcs
IDQwLCA4MCwgNzMsIDQyLCAxMDAsIDQyLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgMTA5LCAxMDUsIDExNiwgMTA0LCA4
NiwgMTA1LCAxMTUsIDEwNSwgOTgsIDEwNSwgMTA4LCAxMDUsIDExNiwgMTIxLCA5NSwgNzEsIDcx
LCA4OCwgNjcsIDExMSwgMTE0LCAxMTQsIDEwMSwgMTA4LCA5NywgMTE2LCAxMDEsIDEwMCwgNDAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQ0LCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDQxLCAz
MiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgNTAsIDYxLCA5
NywgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA0MiwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwg
NTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDcxLCA3MSwgODgsIDg2LCA2
MSwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0MiwgMTE1LCAxMTMsIDExNCwgMTE2LCA0MCwgNzgs
IDEwMCwgMTExLCAxMTYsIDg2LCA0MiwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDUsIDk3
LCA1MCwgNDIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDEsIDQzLCA5NywgNTAsIDQxLCA1OSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzEsIDcxLCA4OCwgNzYsIDYxLCA3
OCwgMTAwLCAxMTEsIDExNiwgODYsIDQyLCAxMTUsIDExMywgMTE0LCAxMTYsIDQwLCA3OCwgMTAw
LCAxMTEsIDExNiwgNzYsIDQyLCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0NSwgOTcsIDUw
LCA0MiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0MSwgNDMsIDk3LCA1MCwgNDEsIDU5LCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA0OCwgNDYsIDUzLCA0NywgNDAs
IDcxLCA3MSwgODgsIDg2LCA0MywgNzEsIDcxLCA4OCwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMjUs
IDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwg
MTE3LCAxMTUsIDEwMSwgNjYsIDgyLCA2OCwgNzAsIDk1LCA2NiwgMTE3LCAxMTQsIDEwOCwgMTAx
LCAxMjEsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYs
IDc2LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4
NiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzIs
IDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQs
IDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwg
MTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDc4LCA4NiwgNjEsIDExMiwgMTExLCAxMTksIDUzLCA0
MCwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUsIDQw
LCA0OSwgNDYsIDQ4LCA0NSwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0MSwgNDEsIDU5LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywg
MTE1LCAxMDEsIDcwLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA3OCwgNzYsIDYxLCAx
MTIsIDExMSwgMTE5LCA1MywgNDAsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEw
MSwgNjksIDExMiwgMTE1LCA0MCwgNDksIDQ2LCA0OCwgNDUsIDc4LCAxMDAsIDExMSwgMTE2LCA4
NiwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAx
MDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEs
IDEwOCwgNTcsIDQ4LCA2MSwgNDgsIDQ2LCA1MywgNDMsIDUwLCA0NiwgNDgsIDQyLCA4NiwgMTAw
LCAxMTEsIDExNiwgNzIsIDQyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQyLCAxMTQsIDExMSwg
MTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTAyLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCAzMiwg
NjEsIDEzLCAxMCwgNDAsIDQ5LCA0NiwgNDgsIDQzLCA0MCwgMTAwLCAxMDUsIDEwMiwgMTAyLCAx
MTcsIDExNSwgMTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNTcsIDQ4LCA0
NSwgNDksIDQ2LCA0OCwgNDEsIDQyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEs
IDcwLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA3OCwgNzYsIDQxLCAzMiwgNDIsIDEz
LCAxMCwgNDAsIDQ5LCA0NiwgNDgsIDQzLCA0MCwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDEx
NSwgMTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNTcsIDQ4LCA0NSwgNDks
IDQ2LCA0OCwgNDEsIDQyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAx
MTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA3OCwgODYsIDQxLCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAyLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEw
MSwgMTA4LCA0NywgODAsIDczLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3OSwgNjUs
IDg0LCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNjUsIDc4LCA2NywgNjksIDU3LCA0OCwg
MzIsIDQ5LCA0NiwgNDgsIDEzLCAxMCwgMTE1LCAxMTYsIDExNCwgMTE3LCA5OSwgMTE2LCAzMiwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTEx
LCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDEw
MiwgMTAyLCAxMTcsIDExNSwgMTAxLCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgMTAwLCAxMDYsIDExNywgMTE1LCAxMTYsIDgyLCAx
MTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNzAsIDExNCwgMTExLCAxMDks
IDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDgwLCAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2
LCAxMDUsIDEwMSwgMTE1LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTEx
LCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQ0LCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDEx
NywgMTE1LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDEsIDMyLCAxMjMs
IDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwg
MTE2LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDYxLCAxMDgs
IDEwNSwgMTAzLCAxMDQsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgMTE3LCAxMTUsIDQ3LCAxMDgs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTYsIDExMSwgMTE2LCA5
NywgMTA4LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDYxLCAx
MTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMDgsIDEwNSwgMTAzLCAx
MDQsIDExNiwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0Mywg
MTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDU5LCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTYsIDExMSwgMTE2LCA5Nywg
MTA4LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDU5LCAxMywg
MTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIs
IDExNywgMTE2LCAxMDEsIDcyLCAxMDEsIDEwOSwgMTA1LCAxMTUsIDExMiwgMTA0LCAxMDEsIDEx
NCwgMTA1LCA5OSwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDc2LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDQwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAx
MDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDEwNSwg
MTEwLCAxMDIsIDExMSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAx
MDQsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMDMsIDExNCwgMTExLCAxMTcsIDExMCwgMTAwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0
MSwgMzIsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA5
LCAxMDUsIDEyMCwgNDAsIDEwMywgMTE0LCAxMTEsIDExNywgMTEwLCAxMDAsIDY3LCAxMTEsIDEw
OCwgMTExLCAxMTQsIDQ0LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDExMSwgMTA4LCAx
MTEsIDExNCwgNDQsIDEwNSwgMTEwLCAxMDIsIDExMSwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3
NiwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTks
IDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDEx
NSwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA0MCwgMTEyLCAx
MTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwg
MTAyLCAxMTEsIDMyLCAxMDUsIDExMCwgMTAyLCAxMTEsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAz
MiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTAy
LCAxMDIsIDExNywgMTE1LCAxMDEsIDg0LCAxMDEsIDExNCwgMTA5LCA2MSwgMTAwLCAxMDUsIDEw
MiwgMTAyLCAxMTcsIDExNSwgMTAxLCA2NiwgODIsIDY4LCA3MCwgOTUsIDY2LCAxMTcsIDExNCwg
MTA4LCAxMDEsIDEyMSwgNDAsIDEwNSwgMTEwLCAxMDIsIDExMSwgNDYsIDc4LCAxMDAsIDExMSwg
MTE2LCA3NiwgNDQsIDEwNSwgMTEwLCAxMDIsIDExMSwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA4
NiwgNDQsIDEwNSwgMTEwLCAxMDIsIDExMSwgNDYsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDQs
IDEwNSwgMTEwLCAxMDIsIDExMSwgNDYsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEw
MSwgMTE1LCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA4NCwgMTAxLCAxMTQsIDEw
OSwgNDIsIDEwNSwgMTEwLCAxMDIsIDExMSwgNDYsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAsIDEx
NywgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNDIsIDEwNSwgMTEwLCAxMDIsIDExMSwgNDYsIDc4
LCAxMDAsIDExMSwgMTE2LCA3NiwgNDIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTEx
LCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MCwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MCwgMTE0LCAxMTEsIDEw
NiwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAx
MTQsIDEwMSwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDc2LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDg1LCA4NiwgNDAsIDEwOSwgOTcsIDExNiwgNTIsIDMy
LCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDgwLCAxMTQsIDExMSwgMTA2LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0
MSwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTUsIDExNiwgMTE0LCAxMTMs
IDYxLCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDgwLCAxMTQsIDExMSwgMTA2
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIw
LCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwg
MTA1LCAxMTEsIDExMCwgODcsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTE1LCAx
MTYsIDExNCwgMTEzLCA0NywgNjEsIDExNSwgMTE2LCAxMTQsIDExMywgNDYsIDExOSwgNTksIDEz
LCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNSwgMTE2LCAxMTQsIDEx
MywgNDYsIDEyMCwgMTIxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDEwMywgMTAxLCAxMTYsIDc2LCAxMTEsIDEwMCwgNzAsIDExNCwgMTExLCAx
MDksIDY1LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgOTksIDExNywgOTgsIDEwMSwgNzcsIDk3LCAxMTIsIDY4LCAxMDUsIDEwOSwgMTAxLCAx
MTAsIDExNSwgMTA1LCAxMTEsIDExMCwgODAsIDEwNSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA0NCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwg
MTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAx
MDEsIDgzLCAxMDgsIDExMSwgMTEyLCAxMDEsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0
LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTE4LCAxMDEsIDExNCwgOTcsIDEwMywgMTAxLCA4Mywg
MTA4LCAxMTEsIDExMiwgMTAxLCA4NCwgMTAxLCAxMjAsIDEwMSwgMTA4LCAxMTUsIDYxLCA5OSwg
MTE3LCA5OCwgMTAxLCA3NywgOTcsIDExMiwgNjgsIDEwNSwgMTA5LCAxMDEsIDExMCwgMTE1LCAx
MDUsIDExMSwgMTEwLCA4MCwgMTA1LCAxMjAsIDEwMSwgMTA4LCAxMTUsIDQyLCAxMDksIDEwNSwg
OTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTE4LCAx
MDEsIDExNCwgOTcsIDEwMywgMTAxLCA4MywgMTA4LCAxMTEsIDExMiwgMTAxLCA1OSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMTEsIDEwMCwgNjEsIDEwOCwgMTEx
LCAxMDMsIDUwLCA0MCwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAy
LCA5NywgOTksIDEwMSwgNjUsIDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwg
MTExLCAxMTIsIDEwMSwgODQsIDEwMSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA0MSwgNTksIDEzLCAx
MCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwOCwgMTExLCAxMDAsIDU5LCAx
MywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAzLCAxMDEs
IDExNiwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDc2LCAxMTEsIDEwMCwgNzAsIDExNCwg
MTExLCAxMDksIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTE3LCA5OCwgMTAxLCA3NywgOTcsIDEx
MiwgNjgsIDEwNSwgMTA5LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExMSwgMTEwLCA4MCwgMTA1LCAx
MjAsIDEwMSwgMTA4LCAxMTUsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAx
MTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDMyLCAxMjMsIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTExLCAxMDAsIDYxLCAxMDgsIDEx
MSwgMTAzLCA1MCwgNDAsIDk5LCAxMTcsIDk4LCAxMDEsIDc3LCA5NywgMTEyLCA2OCwgMTA1LCAx
MDksIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTExLCAxMTAsIDgwLCAxMDUsIDEyMCwgMTAxLCAxMDgs
IDExNSwgNDEsIDQyLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1
LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA4LCAxMTEs
IDEwMCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwg
ODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNzksIDk5LCA5OSwgMTA4LCAxMTcs
IDExNSwgMTA1LCAxMTEsIDExMCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5Nywg
MTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAx
MDUsIDExMSwgMTEwLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDEx
MSwgMTE2LCA4NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNDEs
IDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNiwgMTAxLCAx
MDksIDExMiwgNjEsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgODUsIDExMCwgOTksIDEwOCwgOTcs
IDEwOSwgMTEyLCAxMDEsIDEwMCwgNDMsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYs
IDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5
NywgMTE2LCAxMDEsIDQwLCAxMTUsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDQwLCAxMTYsIDEw
MSwgMTA5LCAxMTIsIDQxLCA0NSwgNDksIDQ2LCA0OCwgNDMsIDk3LCAxMDksIDk4LCAxMDUsIDEw
MSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDQx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEw
MSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA3Miwg
MTExLCAxMTQsIDEwNSwgMTIyLCAxMTEsIDExMCwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwg
MTA1LCAxMTEsIDExMCwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAx
MTksIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4
LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDYxLCAxMTQsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgNDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNDQsIDExMCwgMTExLCAx
MTQsIDEwOSwgOTcsIDEwOCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMTYsIDEwMSwgMTA5LCAxMTIsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5Nywg
MTE2LCAxMDEsIDQwLCA0OSwgNDYsIDQ4LCA0MywgNDksIDQ2LCA0OSwgNDIsIDEwMCwgMTExLCAx
MTYsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NDQsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE1LCAxMTMsIDExNywgOTcsIDExNCwgMTAx
LCA0MCwgMTE2LCAxMDEsIDEwOSwgMTEyLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMTIsIDEwMSwgMTE0LCAxMTYsIDExNywgMTE0LCA5OCwgNzgs
IDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgOTksIDEx
MSwgMTE2LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDcwLCAxMTQsIDk3LCAxMDksIDEw
MSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0
LCAxMDEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDExNSwgOTksIDk3LCAxMDgsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAs
IDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4
LCAxMDEsIDYxLCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDgzLCA5NywgMTA5
LCAxMTIsIDEwOCwgMTAxLCA0MiwgNTAsIDQ2LCA0OCwgNDUsIDQ5LCA0NiwgNDgsIDU5LCAxMywg
MTAsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODMsIDk3LCAxMDksIDExMiwg
MTA4LCAxMDEsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEs
IDQwLCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDgzLCA5NywgMTA5LCAxMTIs
IDEwOCwgMTAxLCA0MiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNSwgOTksIDk3LCAxMDgsIDEw
MSwgNDQsIDExNSwgOTksIDk3LCAxMDgsIDEwMSwgNDQsIDQ5LCA0NiwgNDgsIDQxLCA0MSwgNTks
IDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExMCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDk5LCAxMTEsIDExNiwgOTcsIDExMCwg
MTAzLCAxMDEsIDExMCwgMTE2LCA3MCwgMTE0LCA5NywgMTA5LCAxMDEsIDQyLCAxMTYsIDEwMSwg
MTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCA0MSwg
NTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCA5OSwgMTExLCAx
MTYsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgOTUsIDEwMiwgMTE0LCA5NywgMTA5LCAx
MDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4
LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMiwgNDQsIDExOCwgMTAxLCA5OSwgNTAsIDMy
LCAxMTcsIDExOCwgNDQsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTYsIDk3LCAxMTAsIDEwMywg
MTAxLCAxMTAsIDExNiwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDgwLCA5NywgMTE0LCA5NywgMTA5
LCAxMTUsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTcsIDExOCwgNjEsIDEwMywgMTA4LCA5
NSwgNzAsIDExNCwgMTExLCAxMTAsIDExNiwgNzAsIDk3LCA5OSwgMTA1LCAxMTAsIDEwMywgMzIs
IDYzLCAzMiwgMTE3LCAxMTgsIDMyLCA1OCwgMzIsIDQ1LCAxMTcsIDExOCwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTEyLCA0OSwgNjEsIDEwMCwgNzAsIDEwMCwgMTIw
LCA0MCwgMTEyLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTEy
LCA1MCwgNjEsIDEwMCwgNzAsIDEwMCwgMTIxLCA0MCwgMTEyLCA0MSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MCwgMzIsIDEwMCwgMTE3LCAxMTgsIDQ5LCA2MSwgMTAwLCA3MCwgMTAwLCAx
MjAsIDQwLCAxMTcsIDExOCwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAx
MDAsIDExNywgMTE4LCA1MCwgNjEsIDEwMCwgNzAsIDEwMCwgMTIxLCA0MCwgMTE3LCAxMTgsIDQx
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMTIsIDUwLCAxMTIsIDEw
MSwgMTE0LCAxMTIsIDYxLCA5OSwgMTE0LCAxMTEsIDExNSwgMTE1LCA0MCwgMTAwLCAxMTIsIDUw
LCA0NCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDEwMCwgMTEyLCA0OSwgMTEyLCAxMDEsIDExNCwgMTEyLCA2MSwgOTks
IDExNCwgMTExLCAxMTUsIDExNSwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQs
IDEwMCwgMTEyLCA0OSwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTYs
IDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgNjEsIDEwMCwgMTEyLCA1MCwgMTEyLCAxMDEs
IDExNCwgMTEyLCA0MiwgMTAwLCAxMTcsIDExOCwgNDksIDQ2LCAxMjAsIDQzLCAxMDAsIDExMiwg
NDksIDExMiwgMTAxLCAxMTQsIDExMiwgNDIsIDEwMCwgMTE3LCAxMTgsIDUwLCA0NiwgMTIwLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTgsIDEwNSwgMTE2LCA5NywgMTEwLCAx
MDMsIDEwMSwgMTEwLCAxMTYsIDYxLCAxMDAsIDExMiwgNTAsIDExMiwgMTAxLCAxMTQsIDExMiwg
NDIsIDEwMCwgMTE3LCAxMTgsIDQ5LCA0NiwgMTIxLCA0MywgMTAwLCAxMTIsIDQ5LCAxMTIsIDEw
MSwgMTE0LCAxMTIsIDQyLCAxMDAsIDExNywgMTE4LCA1MCwgNDYsIDEyMSwgNTksIDEzLCAxMCwg
MTE2LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDQyLCA2MSwgMTE2LCA5NywgMTEwLCAx
MDMsIDEwMSwgMTEwLCAxMTYsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA4MCwgOTcsIDExNCwgOTcs
IDEwOSwgMTE1LCA0NiwgMTIwLCA1OSwgMTMsIDEwLCA5OCwgMTA1LCAxMTYsIDk3LCAxMTAsIDEw
MywgMTAxLCAxMTAsIDExNiwgNDIsIDYxLCAxMTYsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDEx
NiwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDQ2LCAx
MjEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDUsIDExMCwgMTE4
LCAxMDksIDk3LCAxMjAsIDYxLCAxMDUsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE1LCAxMDEsIDEx
NSwgMTEzLCAxMTQsIDExNiwgNDAsIDEwOSwgOTcsIDEyMCwgNDAsIDEwMCwgMTExLCAxMTYsIDQw
LCAxMTYsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgNDQsIDExNiwgOTcsIDExMCwgMTAz
LCAxMDEsIDExMCwgMTE2LCA0MSwgNDQsIDEwMCwgMTExLCAxMTYsIDQwLCA5OCwgMTA1LCAxMTYs
IDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgNDQsIDk4LCAxMDUsIDExNiwgOTcsIDExMCwg
MTAzLCAxMDEsIDExMCwgMTE2LCA0MSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2
LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA5LCA5NywgMTE2LCA1MSwgNDAsIDExNiwgOTcsIDExMCwg
MTAzLCAxMDEsIDExMCwgMTE2LCA0MiwgMTA1LCAxMTAsIDExOCwgMTA5LCA5NywgMTIwLCA0NCwg
OTgsIDEwNSwgMTE2LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDQyLCAxMDUsIDExMCwg
MTE4LCAxMDksIDk3LCAxMjAsIDQ0LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCA1
OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMiwgMTAxLCAx
MTQsIDExNiwgMTE3LCAxMTQsIDk4LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDAsIDEw
OSwgOTcsIDExNiwgNTEsIDMyLCA5OSwgMTExLCAxMTYsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAs
IDExNiwgNzAsIDExNCwgOTcsIDEwOSwgMTAxLCA0NCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEx
NywgMTE4LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDExMiwgMTAxLCAxMTQsIDExNiwgMTE3LCAxMTQsIDk4LCA3OCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgNDAsIDk5LCAxMTEsIDExNiwgOTcsIDExMCwgMTAzLCAxMDEsIDExMCwg
MTE2LCA3MCwgMTE0LCA5NywgMTA5LCAxMDEsIDQ0LCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywg
MTE0LCAxMDEsIDQwLCA5OCwgMTE3LCAxMDksIDExMiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAx
MDEsIDExNCwgNDQsIDExNywgMTE4LCA0MSwgNDYsIDEyMCwgMTIxLCAxMjIsIDQ0LCAxMTgsIDY2
LCAxMTcsIDEwOSwgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0NiwgMTIxLCA0MSwgNTks
IDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTIsIDEwMSwgMTE0
LCAxMTYsIDExNywgMTE0LCA5OCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQwLCAxMDks
IDk3LCAxMTYsIDUxLCAzMiwgOTksIDExMSwgMTE2LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAx
MTYsIDcwLCAxMTQsIDk3LCAxMDksIDEwMSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwg
MTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDEx
NiwgMTE3LCAxMTQsIDExMCwgMzIsIDExMiwgMTAxLCAxMTQsIDExNiwgMTE3LCAxMTQsIDk4LCA3
OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDAsIDk5LCAxMTEsIDExNiwgOTcsIDExMCwgMTAz
LCAxMDEsIDExMCwgMTE2LCA3MCwgMTE0LCA5NywgMTA5LCAxMDEsIDQ0LCA5OSwgMTExLCAxMDgs
IDExMSwgMTE0LCA0NCwgMTE4LCA2NiwgMTE3LCAxMDksIDExMiwgNzMsIDExMCwgMTAyLCAxMTEs
IDExNSwgNDYsIDEyMSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDksIDk3LCAxMTYs
IDUxLCAzMiwgOTksIDExMSwgMTE2LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDk1LCAx
MDIsIDExNCwgOTcsIDEwOSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwgMTEx
LCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTIsIDQ0LCAx
MTgsIDEwMSwgOTksIDUwLCAzMiwgMTE3LCAxMTgsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTksIDExMSwgMTE2LCA5NywgMTEwLCAx
MDMsIDEwMSwgMTEwLCAxMTYsIDk1LCAxMDIsIDExNCwgOTcsIDEwOSwgMTAxLCA0MCwgMTEwLCAx
MTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTEyLCA0NCwgMTE3LCAxMTgsIDQ0LCAxMTgsIDg0
LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA4MCwg
OTcsIDExNCwgOTcsIDEwOSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTIsIDk3LCAxMTQsIDk3LCAxMDgsIDEwOCwgOTcsIDEyMCwgNjcs
IDExMSwgMTE0LCAxMTQsIDEwMSwgOTksIDExNiwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDQwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgMTAxLCAxMTQsIDExNiwgMTAxLCAx
MjAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTEsIDExNCwgMTA1
LCAxMDMsIDg2LCAxMDEsIDk5LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTcsIDk4
LCAxMDEsIDgzLCAxMDUsIDEyMiwgMTAxLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAx
MTcsIDk4LCAxMDEsIDgwLCAxMTEsIDExNSwgMzIsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMDUsIDExMCwgMTE4LCA3OSwgMTE0LCAxMDUsIDEwMywgODYsIDEw
MSwgOTksIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDksIDQ2LCA0OCwgNDQsIDQ5LCA0Niwg
NDgsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgNDcsIDExMSwgMTE0LCAxMDUsIDEwMywgODYsIDEwMSwg
OTksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDQsIDk3LCAxMDgsIDEwMiwg
ODMsIDEwNSwgMTIyLCAxMDEsIDYxLCA5OSwgMTE3LCA5OCwgMTAxLCA4MywgMTA1LCAxMjIsIDEw
MSwgNDIsIDQ4LCA0NiwgNTMsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUs
IDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCA2NSwgMTE2LCA3NywgOTcsIDEyMCwg
ODAsIDEwOCwgOTcsIDExMCwgMTAxLCA2MSwgNDAsIDk5LCAxMTcsIDk4LCAxMDEsIDgwLCAxMTEs
IDExNSwgNDMsIDEwNCwgOTcsIDEwOCwgMTAyLCA4MywgMTA1LCAxMjIsIDEwMSwgNDUsIDExOCwg
MTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDgwLCAxMTEsIDExNSwgNDEsIDQyLCAxMDUsIDExMCwg
MTE4LCA3OSwgMTE0LCAxMDUsIDEwMywgODYsIDEwMSwgOTksIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCA2NSwg
MTE2LCA3NywgMTA1LCAxMTAsIDgwLCAxMDgsIDk3LCAxMTAsIDEwMSwgNjEsIDQwLCA5OSwgMTE3
LCA5OCwgMTAxLCA4MCwgMTExLCAxMTUsIDQ1LCAxMDQsIDk3LCAxMDgsIDEwMiwgODMsIDEwNSwg
MTIyLCAxMDEsIDQ1LCAxMTgsIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA4MCwgMTExLCAxMTUs
IDQxLCA0MiwgMTA1LCAxMTAsIDExOCwgNzksIDExNCwgMTA1LCAxMDMsIDg2LCAxMDEsIDk5LCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCA5NywgMTE0LCAxMDMsIDEwMSwg
MTE1LCAxMTYsIDczLCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNjEsIDEwOSwg
OTcsIDEyMCwgNDAsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDY1LCAx
MTYsIDc3LCA5NywgMTIwLCA4MCwgMTA4LCA5NywgMTEwLCAxMDEsIDQ0LCAxMDUsIDExMCwgMTE2
LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCA2NSwgMTE2LCA3NywgMTA1LCAxMTAsIDgwLCAxMDgs
IDk3LCAxMTAsIDEwMSwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMDAsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMDksIDEwNSwgMTEw
LCA0MCwgMTA5LCAxMDUsIDExMCwgNDAsIDEwOCwgOTcsIDExNCwgMTAzLCAxMDEsIDExNSwgMTE2
LCA3MywgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDQ2LCAxMjAsIDQ0LCAxMDgs
IDk3LCAxMTQsIDEwMywgMTAxLCAxMTUsIDExNiwgNzMsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1
LCAxMDEsIDk5LCA0NiwgMTIxLCA0MSwgNDQsIDEwOCwgOTcsIDExNCwgMTAzLCAxMDEsIDExNSwg
MTE2LCA3MywgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDQ2LCAxMjIsIDQxLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQs
IDExNSwgMTAxLCA5OSwgMTE2LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA4NywgODMsIDYxLCAxMTgsIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA4MCwgMTExLCAxMTUs
IDQzLCAxMTEsIDExNCwgMTA1LCAxMDMsIDg2LCAxMDEsIDk5LCA0MiwgMTAwLCAxMDUsIDExNSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDEx
NCwgMTEwLCAzMiwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgMTE2LCA4
MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgODMsIDQ1LCA5OSwgMTE3
LCA5OCwgMTAxLCA4MCwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDcwLCAxMDUs
IDEyMCwgMTAxLCAxMDAsIDY5LCAxMTMsIDExNywgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgOTcs
IDExMCwgMTAzLCAxMTcsIDEwOCwgOTcsIDExNCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1
LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwg
MTExLCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAx
MDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDEsIDEzLCAxMCwg
MTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDExMSwgMTEwLCA2
MSwgOTcsIDExNiwgOTcsIDExMCwgNDAsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNDYsIDEyMiwgNDQsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNDYsIDEyMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCAxMDgsIDk3LCAxMTYsIDYxLCA5NywgOTksIDExMSwgMTE1LCA0MCwgMTAwLCAxMDUs
IDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIxLCA0MSwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3
LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCAxMDgs
IDExMSwgMTEwLCA0NCwgMTA4LCA5NywgMTE2LCA0MSwgNDIsIDgyLCA2OSwgNjcsIDczLCA4MCwg
ODIsIDc5LCA2NywgNjUsIDc2LCA5NSwgODAsIDczLCA1MCwgNDIsIDUwLCA0NiwgNDgsIDU5LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDYxLCAxMTUsIDExMiwgMTA0
LCAxMDEsIDExNCwgMTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ2LCAxMjAsIDQy
LCA0OCwgNDYsIDUzLCA0MywgNDgsIDQ2LCA1MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDExNiwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAx
MTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDYsIDEyMSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDEx
NiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTUsIDQ0LCAxMTYs
IDQ0LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDc3LCAxMDUsIDExNCwgMTE0LCAx
MTEsIDExNCwgMTAxLCAxMDAsIDcwLCAxMDUsIDEyMCwgMTAxLCAxMDAsIDY5LCAxMTMsIDExNywg
MTA1LCAxMTQsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgMTAzLCAxMTcsIDEwOCwgOTcsIDExNCwg
NjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEx
OSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4
LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMDgsIDExMSwgMTEwLCA2MSwgOTcsIDExNiwgOTcsIDExMCwgNDAsIDEwMCwg
MTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDYsIDEyMiwgNDQsIDEwMCwg
MTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDYsIDEyMCwgNDEsIDU5LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDk3LCAxMTYsIDYxLCA5Nywg
OTksIDExMSwgMTE1LCA0MCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA0NiwgMTIxLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNSwg
MTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEs
IDExOCwgMTAxLCA5OSwgNTAsIDQwLCAxMDgsIDExMSwgMTEwLCA0NCwgMTA4LCA5NywgMTE2LCA0
MSwgNDIsIDgyLCA2OSwgNjcsIDczLCA4MCwgODIsIDc5LCA2NywgNjUsIDc2LCA5NSwgODAsIDcz
LCA1MCwgNDIsIDUwLCA0NiwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMTUsIDYxLCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2NywgMTExLCAxMTEs
IDExNCwgMTAwLCAxMTUsIDQ2LCAxMjAsIDQyLCA0OCwgNDYsIDUzLCA0MywgNDgsIDQ2LCA1Mywg
NTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNiwgNjEsIDExNSwgMTEy
LCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDYsIDEy
MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAx
LCA5OSwgNTEsIDQwLCA0OSwgNDYsIDQ4LCA0NSwgMTE1LCA0NCwgMTE2LCA0NCwgNDgsIDQxLCA1
OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEw
OSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OSwgMTEzLCAxMTcsIDEwNSwgMTE0LCAxMDEsIDk5LCAx
MTYsIDk3LCAxMTAsIDEwMywgMTE3LCAxMDgsIDk3LCAxMTQsIDY3LCAxMTEsIDExMSwgMTE0LCAx
MDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEw
MCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQs
IDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDEz
LCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgOTcsIDEwOSwgMTAx
LCAxMTQsIDk3LCA4NCwgMTExLCA4NiwgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDYxLCAxMTAs
IDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTksIDExMSwgMTE0
LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDEwMSwgMTIx
LCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQxLCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5
NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDQwLCA5OSwgOTcsIDEwOSwgMTAxLCAxMTQsIDk3LCA4NCwgMTExLCA4NiwgMTAxLCAxMTQs
IDExNiwgMTAxLCAxMjAsIDQ0LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0
LCAxMDksIDk3LCAxMDgsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCA2MSwgMTE4LCAxMDEsIDk5
LCA1MSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAx
MTQsIDQ0LCA0OCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTA4LCAxMTEsIDExMCwgNjEsIDk3LCAxMTYsIDk3LCAxMTAsIDQwLCAxMTQsIDQ2LCAxMjIs
IDQ0LCAxMTQsIDQ2LCAxMjAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTA4LCA5NywgMTE2LCA2MSwgOTcsIDk5LCAxMTEsIDExNSwgNDAsIDExNCwgNDYsIDEy
MSwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUsIDExMiwgMTA0LCAx
MDEsIDExNCwgMTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTgsIDEwMSwg
OTksIDUwLCA0MCwgMTA4LCAxMTEsIDExMCwgNDQsIDEwOCwgOTcsIDExNiwgNDEsIDQyLCA4Miwg
NjksIDY3LCA3MywgODAsIDgyLCA3OSwgNjcsIDY1LCA3NiwgOTUsIDgwLCA3MywgNTAsIDQyLCA1
MCwgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCA2
MSwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwg
MTE1LCA0NiwgMTIwLCA0MiwgNDgsIDQ2LCA1MywgNDMsIDQ4LCA0NiwgNTMsIDU5LCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTYsIDYxLCAxMTUsIDExMiwgMTA0LCAxMDEs
IDExNCwgMTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ2LCAxMjEsIDU5LCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCA0
MCwgMTE1LCA0NCwgMTE2LCA0NCwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4Mywg
MTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA2NywgMTExLCAxMTEsIDExNCwg
MTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAx
MDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0
LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAxMDksIDk3LCAxMTYs
IDUyLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEx
NCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgNjEsIDExMCwgMTExLCAx
MTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDQw
LCAxMTgsIDEwNSwgMTAxLCAxMTksIDQyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDEx
MSwgMTE1LCA0MSwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEw
NSwgMTAxLCAxMTksIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA2MSwgMTEwLCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAs
IDExOCwgMTA1LCAxMDEsIDExOSwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTksIDExMSwg
MTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCA0OCwgNDYsIDQ4
LCA0MSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCA2MSwg
MTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTks
IDY4LCAxMDUsIDExNCwgNDQsIDExOCwgMTA1LCAxMDEsIDExOSwgNzgsIDExMSwgMTE0LCAxMDks
IDk3LCAxMDgsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwg
MTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5Nywg
MTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExNCwgNDQsIDQ4
LCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgNDYsIDEyMiwgNjEsIDExNCwgNDYsIDEyMiwgNDUs
IDQ5LCA0NiwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDks
IDYxLCA1MCwgNDYsIDQ4LCA0MiwgMTA4LCAxMDEsIDExMCwgMTAzLCAxMTYsIDEwNCwgNDAsIDEx
NCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgs
IDEwMSwgOTksIDUxLCA0MCwgMTE0LCA0NiwgMTIwLCA0NywgMTA5LCA0MywgNDgsIDQ2LCA1Mywg
NDQsIDQ5LCA0NiwgNDgsIDQ1LCAxMTQsIDQ2LCAxMjEsIDQ3LCAxMDksIDQ1LCA0OCwgNDYsIDUz
LCA0NCwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MCwgMTA4LCA5NywgMTEwLCA5
NywgMTE0LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUy
LCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDks
IDk3LCAxMDgsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMjEsIDEwMSwgODAsIDEx
MSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMy
LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3
LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDYxLCAxMTksIDEx
MSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDEw
MSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUs
IDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTQs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgNDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgs
IDEwNSwgMTE0LCA0NCwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5
LCA5NywgMTA4LCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAx
MTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4
LCAxMDEsIDk5LCA1MiwgNDAsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDQsIDQ5LCA0
MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTks
IDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY3LCAxMTcsIDk4LCAxMDUsIDk5LCA2Nywg
MTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAx
MTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUs
IDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwg
MTA1LCAxMjAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDks
IDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAs
IDExMSwgMTE1LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDEwMSwgMTIxLCAxMDEsIDgwLCAxMTEs
IDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE0LCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDEx
NCwgNDQsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEw
OCwgNDEsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExOCwg
MTAxLCA5OSwgNTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTksIDUy
LCA0MCwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NCwgNDgsIDQxLCA0MSwgNTksIDEz
LCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk5LCAxMTEsIDExMSwgMTE0
LCAxMDAsIDExNSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjcsIDExNywgOTgsIDEwNSwgOTks
IDc2LCAxMTEsIDk5LCA5NywgMTA4LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAx
MTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDEx
NSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgs
IDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAx
MjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDEwOSwg
OTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQ0LCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgz
LCAxMDUsIDEyMiwgMTAxLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA2MSwgMTEwLCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE5LCAxMTEsIDExNCwgMTA4LCAx
MDAsIDgwLCAxMTEsIDExNSwgNDYsIDEyMCwgMTIxLCAxMjIsIDQ1LCAxMDEsIDEyMSwgMTAxLCA4
MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0MSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwg
MTA1LCAxMTQsIDQ0LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDks
IDk3LCAxMDgsIDQxLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYx
LCAxMTIsIDk3LCAxMTQsIDk3LCAxMDgsIDEwOCwgOTcsIDEyMCwgNjcsIDExMSwgMTE0LCAxMTQs
IDEwMSwgOTksIDExNiwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQwLCAxMTksIDExMSwg
MTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDQsIDk5LCAx
MTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDQsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA4MywgMTA1LCAxMjIsIDEwMSwgNDQsIDExNCwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA0MSwgNTksIDEzLCAxMCwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwg
MTE1LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDEx
OCwgMTAxLCA5OSwgNTIsIDQwLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ0LCA0OCwg
NDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTks
IDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MCwgMTE0
LCAxMTEsIDEwNiwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMTEsIDEx
NCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4
LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwg
MTAxLCAxMTksIDQ0LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0
MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIs
IDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCA0MCwgMTE4LCAx
MDUsIDEwMSwgMTE5LCA0MiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwg
NDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5
LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MywgMTA3LCAxMjEsIDY2LCAxMTEsIDEy
MCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExMiwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNDQsIDEwOSwgOTcs
IDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEw
LCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAs
IDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcs
IDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTIsIDExMSwg
MTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDQ0LCA0OCwgNDEsIDQxLCA1OSwgMTMs
IDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEy
LCAxMTcsIDExNiwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUy
LCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDks
IDk3LCAxMDgsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDEx
NCwgMTEwLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY3LCAxMTcsIDk4
LCAxMDUsIDk5LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTksIDExMSwgMTE0
LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4
LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTE4LCA2OSwgMTIxLCAxMDEsIDgwLCAxMTEs
IDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NCwgMTE0
LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2
LCAxMTQsIDEwNSwgMTIwLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcw
LCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgOTUsIDY4LCA2OSwgNzAsIDczLCA3OCwgNzMs
IDg0LCA3MywgNzksIDc4LCA4MywgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYs
IDQwLCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ4
LCA0MSwgMzIsIDExMSwgMTE3LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTAzLCAx
MDgsIDcwLCAxMTQsIDk3LCAxMDMsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMCwgMTE4
LCAxMTEsIDEwNSwgMTAwLCAzMiwgMTA5LCA5NywgMTA1LCAxMTAsIDQwLCAxMTgsIDExMSwgMTA1
LCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcxLCA3Nywg
NjksIDc4LCA4NCwgOTUsIDc3LCA2NSwgNzMsIDc4LCA5NSwgNjYsIDY5LCA3MSwgNzMsIDc4LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUs
IDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNjEsIDExMCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExOCwgNjksIDEyMSwgMTAxLCA4MCwg
MTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIwLCAxMjEsIDEyMiwgNDUs
IDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDQxLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4
LCA4NywgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAs
IDExOCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA0MSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MCwgMzIsIDExNywgMTE4LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYs
IDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgNDgsIDQ2LCA0OCwgNDQsIDQ4LCA0NiwgNDgsIDQx
LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTEwLCAxMTEsIDExNCwg
MTA5LCA5NywgMTA4LCA4MywgOTksIDk3LCAxMDgsIDEwMSwgNjEsIDQ5LCA0NiwgNDgsIDU5LCAx
MywgMTAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCA4NCwgNjYsIDc4LCA2MSwgOTksIDExMSwgMTE2
LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDk1LCAxMDIsIDExNCwgOTcsIDEwOSwgMTAx
LCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNDIsIDExMCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgODMsIDk5LCA5NywgMTA4LCAxMDEsIDQ0LCAxMTgsIDgwLCAxMTEsIDEx
NSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA0NCwgMTE4LCA2NiwgMTE3LCAxMDksIDEx
MiwgODUsIDg2LCA0MSwgNTksIDEzLCAxMCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4
NywgNjEsIDExMiwgMTAxLCAxMTQsIDExNiwgMTE3LCAxMTQsIDk4LCA3OCwgMTExLCAxMTQsIDEw
OSwgOTcsIDEwOCwgNDAsIDg0LCA2NiwgNzgsIDQ0LCAxMTgsIDY2LCAxMTcsIDEwOSwgMTEyLCA4
NSwgODYsIDQzLCAxMTcsIDExOCwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0MSwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5
LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA2MSwgMTE4LCA2NSwgMTA4LCA5OCwg
MTAxLCAxMDAsIDExMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA5OCwg
NTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAxMDgsIDExMiwgMTA0
LCA5NywgNjEsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDY3LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDQ2LCA5NywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDk3LCAx
MDgsIDk4LCAxMDEsIDEwMCwgMTExLCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwg
NjEsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNDAsIDk3LCAxMDgsIDk4LCAx
MDEsIDEwMCwgMTExLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA0NCwgMTE4LCA2
NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgODUsIDg2LCA0MywgMTE3LCAxMTgsIDc5LCAxMDIs
IDEwMiwgMTE1LCAxMDEsIDExNiwgNDEsIDU5LCAxMywgMTAsIDExNSwgMTE3LCAxMTQsIDEwMiwg
OTcsIDk5LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA0MiwgNjEsIDExNiwgMTEx
LCA3NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCA5
NywgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgODQsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAx
MDEsIDQ2LCAxMTQsIDEwMywgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMTUsIDExNywgMTE0LCAxMDIs
IDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNDIsIDYxLCAxMTgsIDY1
LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0NiwgMTIx
LCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4
NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1
LCA4NSwgODAsIDY4LCA2NSwgODQsIDY5LCA5NSwgNjUsIDc2LCA2NiwgNjksIDY4LCA3OSwgMTMs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0
LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA4NSwgODAs
IDY4LCA2NSwgODQsIDY5LCA5NSwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMywgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUs
IDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgOTUsIDY2LCA2OSwgNzAsIDc5LCA4Miwg
NjksIDk1LCA3NiwgNzMsIDcxLCA3MiwgODQsIDgzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDEx
NywgMTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgMTE4LCAx
MDEsIDk5LCA1MSwgNDAsIDQ5LCA0NiwgNDQsIDQ5LCA0NiwgNDQsIDQ5LCA0NiwgNDEsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwg
MTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAx
MDgsIDExMSwgMTE0LCA3NywgOTcsIDExMiwgNjEsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAx
MTQsIDEwMSwgNDAsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDgzLCA5NywgMTA5
LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQ0LCAxMTgsIDY1LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEw
LCAxMTYsIDg1LCA4NiwgNDMsIDExNywgMTE4LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYs
IDQxLCA0NiwgMTE0LCAxMDMsIDk4LCA0MiwgMTE4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDEx
MCwgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0NiwgMTIxLCA1OSwgMTMsIDEwLCA5Nywg
MTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAx
MDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA3NywgOTcsIDExMiwgNjEsIDEx
OCwgMTAxLCA5OSwgNTEsIDQwLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwg
OTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwg
MTE0LCA3NywgOTcsIDExMiwgNDYsIDExNCwgNDQsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEw
LCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDc3LCA5NywgMTEyLCA0NiwgMTE0LCA0NCwgOTcsIDEwOSwgOTgsIDEw
NSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDEx
MCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNzcsIDk3LCAxMTIsIDQ2LCAxMTQsIDQxLCA1OSwg
MTMsIDEwLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgs
IDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgMTA5
LCAxMDUsIDEyMCwgNDAsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwg
OTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDQ0LCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDEx
NywgMTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA3NywgOTcsIDEx
MiwgNDQsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzMsIDExMCwgMTAy
LCAxMTEsIDExNSwgNDYsIDEyMiwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5
LCAxMDEsIDYxLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4
LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgOTcsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAx
LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEy
MSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEw
MSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTExLCAx
MTQsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAx
MDksIDEwMSwgMTE2LCA5NywgMTA4LCAxMDgsIDEwNSwgOTksIDgyLCAxMTEsIDExNywgMTAzLCAx
MDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNjEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAx
MDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwg
MTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCAxMDMsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTIsIDMyLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3Nywg
MTAxLCAxMTYsIDk3LCAxMDgsIDEwOCwgMTA1LCA5OSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwg
NzcsIDk3LCAxMTIsIDYxLCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDQwLCAx
MTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEs
IDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQ0LCAxMTgsIDgyLCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA4NSwgODYsIDQzLCAx
MTcsIDExOCwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0MSwgNTksIDEzLCAxMCwgMTA5
LCAxMDEsIDExNiwgOTcsIDEwOCwgMTA4LCAxMDUsIDk5LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0
LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQ2LCAxMTQsIDQyLCA2MSwgMTE1LCAxMTcsIDExNCwgMTAy
LCA5NywgOTksIDEwMSwgNzcsIDEwMSwgMTE2LCA5NywgMTA4LCAxMDgsIDEwNSwgOTksIDY3LCAx
MTEsIDEwOCwgMTExLCAxMTQsIDc3LCA5NywgMTEyLCA0NiwgOTgsIDU5LCAxMywgMTAsIDEwOSwg
MTAxLCAxMTYsIDk3LCAxMDgsIDEwOCwgMTA1LCA5OSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwg
MTEwLCAxMDEsIDExNSwgMTE1LCA0NiwgMTAzLCA0MiwgNjEsIDExNSwgMTE3LCAxMTQsIDEwMiwg
OTcsIDk5LCAxMDEsIDc3LCAxMDEsIDExNiwgOTcsIDEwOCwgMTA4LCAxMDUsIDk5LCA2NywgMTEx
LCAxMDgsIDExMSwgMTE0LCA3NywgOTcsIDExMiwgNDYsIDEwMywgNTksIDEzLCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5
NSwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA5NSwgODUsIDgwLCA2OCwgNjUsIDg0
LCA2OSwgOTUsIDc3LCA2OSwgODQsIDY1LCA3NiwgNzYsIDczLCA2NywgODIsIDc5LCA4NSwgNzEs
IDcyLCA3OCwgNjksIDgzLCA4MywgMTMsIDEwLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4Mywg
MTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDYxLCA0OSwgNDYsIDQ4LCA0NSwgMTA5LCAxMDEs
IDExNiwgOTcsIDEwOCwgMTA4LCAxMDUsIDk5LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAs
IDEwMSwgMTE1LCAxMTUsIDQ2LCAxMDMsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCA5OCwgOTcsIDExNSwgMTAxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgMTE1LCAxMTcs
IDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDU5LCAx
MywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
NjgsIDEwMSwgMTAyLCA5NywgMTE3LCAxMDgsIDExNiwgODMsIDExMiwgMTAxLCA5OSwgMTE3LCAx
MDgsIDk3LCAxMTQsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDY4LCAxMDUsIDEwMSwgMTA4LCAxMDEsIDk5LCAxMTYsIDExNCwgMTA1LCA5OSwgNjEs
IDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0OCwgNDYsIDQ4LCA1MiwgNDQsIDQ4LCA0NiwgNDgsIDUy
LCA0NCwgNDgsIDQ2LCA0OCwgNTIsIDQxLCA1OSwgMTMsIDEwLCAxMTUsIDExNywgMTE0LCAxMDIs
IDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNjEsIDEwOSwgMTA1LCAx
MjAsIDQwLCA5OCwgOTcsIDExNSwgMTAxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0
LCAxMDMsIDk4LCA0MiwgNDAsIDQ5LCA0NiwgNDgsIDQ1LCA2OCwgMTAxLCAxMDIsIDk3LCAxMTcs
IDEwOCwgMTE2LCA4MywgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgODIsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNjgsIDEwNSwgMTAxLCAx
MDgsIDEwMSwgOTksIDExNiwgMTE0LCAxMDUsIDk5LCA0NiwgMTE0LCA0MSwgNDQsIDExOCwgMTAx
LCA5OSwgNTEsIDQwLCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQxLCA0NCwgMTA5
LCAxMDEsIDExNiwgOTcsIDEwOCwgMTA4LCAxMDUsIDk5LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0
LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQ2LCAxMTQsIDQxLCA1OSwgMTMsIDEwLCAxMTUsIDExNywg
MTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDEwOSwg
MTA1LCAxMjAsIDQwLCA2OCwgMTAxLCAxMDIsIDk3LCAxMTcsIDEwOCwgMTE2LCA4MywgMTEyLCAx
MDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgOTcsIDExMCwgOTksIDEwMSwgNjgsIDEwNSwgMTAxLCAxMDgsIDEwMSwgOTksIDExNiwgMTE0
LCAxMDUsIDk5LCA0NCwgOTgsIDk3LCAxMTUsIDEwMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwg
NDQsIDEwOSwgMTAxLCAxMTYsIDk3LCAxMDgsIDEwOCwgMTA1LCA5OSwgODIsIDExMSwgMTE3LCAx
MDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0NiwgMTE0LCA0MSwgNTksIDEzLCAxMCwgMTA5
LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2MSwg
MTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgMTA5LCAxMDUsIDk5LCAx
MTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA0MSwgNTksIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAs
IDEwMSwgMTE1LCAxMTUsIDYxLCA0OSwgNDYsIDQ1LCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4
MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3
LCAxMDksIDExMiwgMTAxLCAxMDAsIDYxLCAxMDAsIDExMSwgMTE2LCA0MCwgMTEwLCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCA4NywgNDQsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNjEsIDk3LCA5OCwg
MTE1LCA2OSwgMTEyLCAxMTUsIDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDg1LCAxMTAsIDk5
LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNjEsIDk5LCAxMTEs
IDExMCwgMTE4LCAxMDEsIDExNCwgMTE2LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEw
MSwgMTE1LCAxMTUsIDg0LCAxMTEsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDgz
LCAxMDgsIDExMSwgMTEyLCAxMDEsIDQwLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAx
MDEsIDExNSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDY1LCA2
NSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA3MCwgOTcsIDk5
LCAxMTYsIDExMSwgMTE0LCAxMTUsIDYxLCAxMDMsIDEwMSwgMTE2LCA2NSwgNjUsIDgyLCAxMTEs
IDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNzAsIDk3LCA5OSwgMTE2LCAxMTEs
IDExNCwgMTE1LCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNDYsIDEyMCwg
MTIxLCAxMjIsIDQxLCA1OSwgMTMsIDEwLCA5NywgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA0Mywg
NjEsIDY1LCA2NSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA3
MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCAxMTUsIDQ2LCAxMjEsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTIsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwg
MTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDEx
OCwgMTAxLCA5OSwgNTIsIDQwLCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQ0LCA0
OCwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMTAsIDEx
OCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQsIDExNCwg
OTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAs
IDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgODYsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDYxLCA5OSwgMTExLCAxMDksIDExMiwg
MTE3LCAxMTYsIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1Miwg
NDAsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDQ0LCA0
OSwgNDYsIDQ4LCA0MSwgNDQsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDQxLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEs
IDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NiwgMTAx
LCA5OSwgMTE2LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3Niwg
NzksIDY4LCA2MSwgMTAzLCAxMDEsIDExNiwgNzYsIDExMSwgMTAwLCA3MCwgMTE0LCAxMTEsIDEw
OSwgNjUsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNDAsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCAxMTUs
IDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0Niwg
MTIwLCA0NCwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNDEsIDU5LCAxMywgMTAsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgNzksIDY4LCA2
MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2LCA3
OSwgNjgsIDQyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTks
IDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNDYsIDEyMSwgNDMsIDExOCwgODIsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwg
MTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwg
MTE1LCA0NiwgMTIyLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0
LCAxMDEsIDExMywgMTE3LCAxMDEsIDExNSwgMTE2LCAxMDEsIDEwMCwgODIsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzYsIDc5LCA2OCwgNjEsIDExNCwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgNzksIDY4LCA1OSwg
MTMsIDEwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAs
IDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDExNSwgOTcsIDEw
OSwgMTEyLCAxMDgsIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNzYsIDExMSwgMTAwLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQ0LCAx
MTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwg
MTExLCAxMTQsIDEwMCwgMTE1LCA0NCwgMTE0LCAxMDEsIDExMywgMTE3LCAxMDEsIDExNSwgMTE2
LCAxMDEsIDEwMCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgNzYsIDc5LCA2OCwgNDEsIDU5LCAxMywgMTAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAx
MTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5
OSwgMTAxLCA0NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTAyLCAxMTQsIDExMSwgMTA5LCA4MiwgNzEs
IDY2LCA2OCwgNDAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEs
IDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0MSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgMTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwg
OTcsIDExMCwgOTksIDEwMSwgODYsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDYxLCAxMTgsIDEw
MSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1Miwg
NDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDQ0LCA0OCwgNDEsIDQxLCA0Niwg
MTIwLCAxMjEsIDEyMiwgNTksIDEzLCAxMCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwg
MTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5Nywg
MTEwLCA5OSwgMTAxLCA2MSwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY5LCAx
MTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQs
IDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0MCwgMTA1LCAxMTQsIDExNCwg
OTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA4NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDEx
NCwgNDEsIDU5LCAxMywgMTAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5
LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0Niwg
MTE0LCAxMDMsIDk4LCA0MiwgNjEsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNDYsIDEyMCwgNTksIDEz
LCAxMCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAx
MTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQ2LCAxMTQsIDEwMywgOTgs
IDQyLCA2MSwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEw
LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwg
NzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQyLCA2MSwgMTE4
LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2NywgMTEx
LCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAx
MTAsIDk5LCAxMDEsIDYxLCAxMDksIDk3LCAxMjAsIDQwLCAxMDksIDk3LCAxMjAsIDQwLCAxMTUs
IDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYs
IDExNCwgNDQsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgs
IDExMSwgMTE0LCA0NiwgMTAzLCA0MSwgNDQsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAx
MDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwg
MTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNjEsIDEwMiwgMTE0LCAxMDEsIDExNSwgMTEwLCAx
MDEsIDEwOCwgNzEsIDExNCwgOTcsIDEyMiwgMTA1LCAxMTAsIDEwMywgODIsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDAsIDExNCwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjks
IDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDQ4
LCA2MSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1
LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA1NywgNDgsIDYxLCAxMTgs
IDEwMSwgOTksIDUxLCA0MCwgNDksIDQ2LCA0OCwgNDQsIDQ5LCA0NiwgNDgsIDQ0LCA0OSwgNDYs
IDQ4LCA0MSwgNDIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5
OSwgMTAxLCA1NywgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEsIDEx
MCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwg
MTAwLCAxMDIsIDYxLCAxMDMsIDEwMSwgMTE2LCA2NiwgODIsIDY4LCA3MCwgNzYsIDExMSwgMTEx
LCAxMDcsIDExNywgMTEyLCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTE0LCAxMTEs
IDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMDEsIDExMCwgMTAxLCAxMTQsIDEwMywgMTIxLCA2NywgMTExLCAx
MTAsIDExNSwgMTAxLCAxMTQsIDExOCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzAsIDk3LCA5
OSwgMTE2LCAxMTEsIDExNCwgNjEsIDEwMywgMTAxLCAxMTYsIDY5LCAxMTAsIDEwMSwgMTE0LCAx
MDMsIDEyMSwgNjcsIDExMSwgMTEwLCAxMTUsIDEwMSwgMTE0LCAxMTgsIDk3LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDQwLCAxMTUsIDExMiwgMTAxLCA5
OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAx
MDksIDEwMSwgMTEwLCAxMTYsIDgyLCA0OCwgNDQsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAx
MTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNDEsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1
LCAxMDEsIDY2LCA5NywgMTE1LCAxMDEsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDgsIDQ2
LCA0NCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTEyLCAxMTQsIDEwMSwg
NzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEs
IDMyLCAxMTIsIDExNCwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgNTksIDEzLCAxMCwgMTA4LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwg
MTA1LCAxMTAsIDEwMiwgMTExLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTE1LCAxMDQsIDk3LCAxMDAsIDExMSwgMTE5LCA2MSwgNDksIDQ2LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0
LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4
MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTAz
LCAxMDEsIDExNiwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTks
IDEwMSwgNzAsIDExNCwgMTExLCAxMDksIDY2LCA4MiwgNjgsIDcwLCA3NiwgMTExLCAxMTEsIDEw
NywgMTE3LCAxMTIsIDQwLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5
LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA0
OCwgNDQsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwg
MTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3NywgMTExLCAxMTAs
IDExMSwgOTksIDEwNCwgMTE0LCAxMTEsIDEwOSwgMTAxLCA2MSwgOTcsIDEwOSwgOTgsIDEwNSwg
MTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwg
NjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDExNSwgMTAxLCAxMTEsIDYxLCAxMDEsIDExMCwgMTE4LCAxMDUsIDEx
NCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDEx
MCwgOTksIDEwMSwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNDAs
IDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc3LCAxMTEsIDExMCwgMTExLCA5OSwg
MTA0LCAxMTQsIDExMSwgMTA5LCAxMDEsIDQ0LCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDg1LCAx
MTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTUs
IDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQs
IDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQyLCA2MSwgMTE1LCAxMDEsIDExMSwgNTksIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMSwgMTA0LCAxMTEsIDYxLCAxMDEsIDEx
MCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNzIsIDExMSwg
MTE0LCAxMDUsIDEyMiwgMTExLCAxMTAsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwg
MTExLCAxMTAsIDQwLCA0NSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDQ0LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAx
MDgsIDg3LCA0MSwgNTksIDEzLCAxMCwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5Nywg
MTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2
LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0Miwg
NjEsIDEwMSwgMTA0LCAxMTEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIs
IDEwNSwgMTEwLCA5NywgMTA4LCA3MywgMTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwg
OTksIDEwMSwgNjEsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEs
IDExMCwgMTE2LCA3MywgMTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwg
NTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNzMsIDExNCwgMTE0LCA5NywgMTAw
LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQyLCA2MSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5Nywg
OTksIDEwMSwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDQ2LCAxMTQsIDEwMywgOTgsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4
MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTAxLCAxMTAsIDExOCwgMTA1
LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3
LCAxMTAsIDk5LCAxMDEsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDEwMiwgMTA1LCAx
MTAsIDk3LCAxMDgsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQyLCA2MSwg
MTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwg
MTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAx
LCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwg
OTksIDEwMSwgODMsIDk5LCA5NywgMTA4LCAxMDEsIDEwMCwgNjEsIDEwMiwgMTA1LCAxMTAsIDk3
LCAxMDgsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQyLCAxMTgsIDc2LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAs
IDExNSwgMTA1LCAxMTYsIDEyMSwgNDYsIDEyMiwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwg
OTcsIDEwOCwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgODMsIDk5LCA5Nywg
MTA4LCAxMDEsIDEwMCwgNDIsIDYxLCAxMDEsIDExMCwgMTAxLCAxMTQsIDEwMywgMTIxLCA2Nywg
MTExLCAxMTAsIDExNSwgMTAxLCAxMTQsIDExOCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzAs
IDk3LCA5OSwgMTE2LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAx
LCA2MSwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA2NiwgOTcsIDExNSwgMTAx
LCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2OCwgMTA1LCAxMDIsIDEwMiwg
MTE3LCAxMTUsIDEwMSwgNDIsIDYxLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2
NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwg
MTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEs
IDYxLCAxMDksIDk3LCAxMjAsIDQwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2OCwgMTA1LCAx
MDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNDQsIDQ4LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjUsIDEwOSwgOTgs
IDEwNSwgMTAxLCAxMTAsIDExNiwgNjEsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAs
IDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwg
OTcsIDEwOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNDIsIDYxLCAxMTUsIDEx
NywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNDYs
IDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTA1
LCAxMTAsIDk3LCAxMDgsIDY5LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDYx
LCAxMTgsIDY5LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDY3LCAxMTEsIDEw
OCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEsIDEwOSwg
MTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgODQs
IDEwMSwgMTIwLCA2MSwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA0MCwgMTAx
LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDgzLCA5NywgMTA5LCAxMTIsIDEw
OCwgMTAxLCAxMTQsIDQ0LCAxMTgsIDY5LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAx
MDEsIDg1LCA4NiwgNDMsIDExNywgMTE4LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQx
LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2
OSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA0MiwgNjEsIDExNiwgMTExLCA3
NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMDEs
IDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNjcsIDExMSwgMTA4LCAxMTEsIDEx
NCwgODQsIDEwMSwgMTIwLCA0NiwgMTE0LCAxMDMsIDk4LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAx
MDUsIDExMCwgOTcsIDEwOCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwg
NDIsIDYxLCAxMTgsIDY5LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDczLCAx
MTAsIDEwMiwgMTExLCAxMTUsIDQ2LCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDEx
NywgMTE1LCAxMDUsIDExMSwgMTEwLCA3MCwgMTExLCAxMTQsIDY4LCAxMDUsIDExNCwgMTAxLCA5
OSwgMTE2LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNjEsIDEwOSwgMTA1LCAx
MjAsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDksIDQ2LCA0MSwgNDQsIDk3LCAxMDksIDk4
LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTEx
LCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAxMTgsIDY1LCAxMDksIDk4LCAxMDUs
IDEwMSwgMTEwLCAxMTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDQ2LCAxMTksIDQxLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMywgMTAsIDEw
MiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY1LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDQy
LCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywg
MTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCAzMiwgNDMsIDEzLCAx
MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAx
MDEsIDQyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgs
IDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA3MCwgMTExLCAxMTQsIDY4LCAxMDUsIDExNCwgMTAx
LCA5OSwgMTE2LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNDIsIDExOCwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEsIDEx
MCwgMTE1LCAxMDUsIDExNiwgMTIxLCA0NiwgMTIwLCAzMiwgNDMsIDEzLCAxMCwgMTAyLCAxMDUs
IDExMCwgOTcsIDEwOCwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAx
MDEsIDQyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgs
IDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0MiwgMTE4
LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYsIDEw
MSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDQ2LCAxMjIsIDMyLCA0MywgMTMsIDEwLCAxMDIs
IDEwNSwgMTEwLCA5NywgMTA4LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA4
MywgOTksIDk3LCAxMDgsIDEwMSwgMTAwLCAzMiwgNDMsIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwg
OTcsIDEwOCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNDIsIDExOCwg
NzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEs
IDExMCwgMTE1LCAxMDUsIDExNiwgMTIxLCA0NiwgMTIxLCA0NCwgMTMsIDEwLCA5NywgMTA4LCAx
MTIsIDEwNCwgOTcsIDQxLCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAs
IDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcs
IDY5LCA3OCwgODQsIDk1LCA2NiwgNjksIDcwLCA3OSwgODIsIDY5LCA5NSwgNzAsIDc5LCA3MSwg
MTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2
MSwgMTA5LCA5NywgMTIwLCA0MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcsIDExMSwgMTA4
LCAxMTEsIDExNCwgNDQsIDQ4LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEw
LCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgOTcsIDExMiwgMTEyLCAxMDgs
IDEyMSwgNzMsIDEwOSwgOTcsIDEwMywgMTAxLCA4MCwgMTE0LCAxMTEsIDk5LCAxMDEsIDExNSwg
MTE1LCAxMDUsIDExMCwgMTAzLCA0MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcsIDExMSwg
MTA4LCAxMTEsIDExNCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3
LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCA5NywgNDIsIDYxLCAxMTgsIDEwNSwgMTE1LCAxMDUs
IDk4LCAxMDUsIDEwOCwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgy
LCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA5NSwgNjYsIDY5LCA3MCwgNzksIDgyLCA2OSwgOTUs
IDcwLCA4MiwgNjUsIDcxLCA2NywgNzksIDc2LCA3OSwgODIsIDEzLCAxMCwgMTAzLCAxMDgsIDcw
LCAxMTQsIDk3LCAxMDMsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCAxMDIsIDEwNSwgMTEw
LCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAx
MF0ubWFwKGMgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjKSkuam9pbigiIik7Citjb25zdCB2ZXJ0
ZXhTaGFkZXJHTFNMMiA9IFszNSwgMTE4LCAxMDEsIDExNCwgMTE1LCAxMDUsIDExMSwgMTEwLCAz
MiwgNTIsIDUzLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
ODAsIDY2LCA4MiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUs
IDc2LCA2NiwgNjksIDY4LCA3OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwg
NDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3NywgNjYs
IDczLCA2OSwgNzgsIDg0LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzksIDgwLCA2NSwgNjcs
IDczLCA4NCwgODksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzYsIDgwLCA3MiwgNjUs
IDg0LCA2OSwgODMsIDg0LCA4NiwgNjUsIDc2LCA4NSwgNjksIDMyLCA0OCwgNDYsIDUyLCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgODAsIDY5LCA2NywgODUs
IDc2LCA2NSwgODIsIDc5LCA4NiwgNjksIDgyLCA2NSwgNzYsIDgwLCA3MiwgNjUsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2NSwgNjgsIDczLCA2NSwgNzgs
IDY3LCA2OSwgNzksIDg2LCA2OSwgODIsIDY1LCA3NiwgODAsIDcyLCA2NSwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjksIDc3LCA3MywgODMsIDgzLCA3MywgODYs
IDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQs
IDczLCA4NiwgNzMsIDg0LCA4OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwg
NDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc2LCA3OSwgNjgs
IDY2LCA2NSwgODMsIDY5LCA2OCwgNzcsIDczLCA2NywgODIsIDc5LCA4MywgNzAsIDg1LCA4Miwg
NjUsIDY3LCA2OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzcs
IDczLCA2NywgODIsIDc5LCA4MywgODUsIDgyLCA3MCwgNjUsIDY3LCA2OSwgNzcsIDY1LCA4MCwg
NjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY5LCA3OCwgODYsIDczLCA4MiwgNzksIDc4LCA3Nywg
NjksIDc4LCA4NCwgNjYsIDgyLCA2OCwgNzAsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDc4LCA3OSwgODIsIDc3LCA2NSwgNzYsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY2LCA4NSwgNzcsIDgwLCA2OCwgNzMsIDgyLCA2OSwgNjcs
IDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgNzgsIDc5LCA4MiwgNzcsIDY1LCA3NiwgODgsIDg5LCA4MywgNjcsIDY1LCA3NiwgNjks
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc2LCA3MywgNzEsIDcy
LCA4NCwgNzcsIDY1LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2
LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNzcsIDY1
LCA4MCwgOTUsIDUxLCA2OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDc3LCA2NSwgODAsIDk1
LCA4MywgNzUsIDg5LCA2NiwgNzksIDg4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUsIDc2LCA5NSwgNzIsIDY1
LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDY3LCA4MywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgODIsIDcxLCA2NiwgNjgsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0
LCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4
MiwgNjUsIDY4LCA3MywgNjUsIDc4LCA2NywgNjksIDc5LCA2NywgNjcsIDc2LCA4NSwgODMsIDcz
LCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDcyLCA3
OSwgODIsIDczLCA5MCwgNzksIDc4LCA3OSwgNjcsIDY3LCA3NiwgODUsIDgzLCA3MywgNzksIDc4
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OCwgODUsIDc3LCA5
NSwgNjYsIDc5LCA3OCwgNjksIDk1LCA3MywgNzgsIDcwLCA3NiwgODUsIDY5LCA3OCwgNjcsIDY5
LCA4MiwgODMsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgNjYsIDExMSwgMTEwLCAxMDEsIDExNSwgODAsIDEwMSwgMTE0LCA3NywgMTAxLCAxMTUsIDEw
NCwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OCwg
ODUsIDc3LCA5NSwgNzcsIDc5LCA4MiwgODAsIDcyLCA5NSwgNzMsIDc4LCA3MCwgNzYsIDg1LCA2
OSwgNzgsIDY3LCA2OSwgODIsIDgzLCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDg2LCA3MywgNzEsIDc4LCA2OSwgODQsIDg0LCA2OSwgNjYsIDc2LCA2
OSwgNzgsIDY4LCA3NywgNzksIDY4LCA2OSwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDg5
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNjUsIDc3LCA4
MCwgNzYsIDY5LCA4MiwgNTEsIDY4LCA3MSwgODIsIDY5LCA2OSwgNzgsIDY4LCA2OSwgODAsIDg0
LCA3MiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDY1LCA3
NywgODAsIDc2LCA2OSwgODIsIDUxLCA2OCwgNjYsIDcxLCA4MiwgNzcsIDY1LCA4MCwgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODUsIDgzLCA2OSwgODAsIDcyLCA4
OSwgODMsIDczLCA2NywgNjUsIDc2LCA3NiwgNzMsIDcxLCA3MiwgODQsIDcwLCA2NSwgNzYsIDc2
LCA3OSwgNzAsIDcwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4
NCwgODcsIDc5LCA4MywgNzMsIDY4LCA2OSwgNjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzMsIDc4
LCA3MSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDc2LCA2
OSwgNjUsIDgyLCA2NywgNzksIDY1LCA4NCwgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5
LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDc2LCA2OSwgNjUsIDgyLCA2NywgNzksIDY1
LCA4NCwgOTUsIDY2LCA4NSwgNzcsIDgwLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYs
IDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDc2
LCA2OSwgNjUsIDgyLCA2NywgNzksIDY1LCA4NCwgOTUsIDg0LCA3MywgNzgsIDg0LCA5NSwgODQs
IDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4Niwg
MzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzgs
IDczLCA4MywgNzksIDg0LCA4MiwgNzksIDgwLCA3MywgNjcsIDk1LCA4NCwgNjksIDg4LCA4NCwg
ODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY2LCA4MiwgNjgsIDcwLCA5NSwg
ODYsIDk1LCA3MiwgNjksIDczLCA3MSwgNzIsIDg0LCA5NSwgNjcsIDc5LCA4MiwgODIsIDY5LCA3
NiwgNjUsIDg0LCA2OSwgNjgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDc3LCA4MywgOTUsIDY2LCA4MiwgNjgsIDcwLCA5NSwgNjksIDc4LCA2OSwgODIsIDcxLCA4
OSwgOTUsIDY3LCA3OSwgNzgsIDgzLCA2OSwgODIsIDg2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA3MiwgNjksIDY5LCA3
OCwgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0
LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgODMsIDgzLCA5NSwgODQsIDcyLCA3MywgNjcsIDc1LCA3OCwgNjksIDgzLCA4MywgNjUsIDc4
LCA2OCwgNzcsIDY1LCA4MywgNzUsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgs
IDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY4LCA2OSwgNjYsIDg1LCA3MSwgNzcsIDc5LCA2OCwgNjks
IDMyLCA0OCwgMTAsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgz
LCA3MiwgNjUsIDY4LCA2OSwgODIsIDk1LCA3OCwgNjUsIDc3LCA2OSwgMzIsIDExOCwgMTAxLCAx
MTQsIDExNiwgMTAxLCAxMjAsIDU4LCAxMTIsIDk4LCAxMTQsIDEwLCAxMTIsIDExNCwgMTAxLCA5
OSwgMTA1LCAxMTUsIDEwNSwgMTExLCAxMTAsIDMyLCAxMDQsIDEwNSwgMTAzLCAxMDQsIDExMiwg
MzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTEx
LCAxMTcsIDExNiwgNDAsIDExNSwgMTE2LCAxMDAsIDQ5LCA1MiwgNDgsIDQ0LCA5OSwgMTExLCAx
MDgsIDExNywgMTA5LCAxMTAsIDk1LCAxMDksIDk3LCAxMDYsIDExMSwgMTE0LCA0MSwgMzIsIDEx
NywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIx
LCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDgsIDQ0LCAz
MiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ4LCA0MSwg
MzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDgzLCA5OSwgMTAxLCAx
MTAsIDEwMSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOCwg
MTA1LCAxMDEsIDExOSwgODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOCwgMTA1LCAxMDEsIDEx
OSwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAx
MTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA0OSwgNDQsIDMyLCA5OCwgMTA1LCAx
MTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTE3LCAxMTAs
IDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgNzcsIDk3LCAxMTYsIDEwMSwgMTE0LCAxMDUs
IDk3LCAxMDgsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgs
IDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEs
IDExMCwgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUwLCAzMiwgMTE4LCA3OSwgMTEyLCA5NywgOTksIDEwNSwgMTE2LCAxMjEsIDczLCAxMTAs
IDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY5
LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCAx
MTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc2LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDEwOSwgOTcsIDExMiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc3LCAxMDUsIDk5LCAxMTQsIDEx
MSwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgs
IDEwMSwgMTE0LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUwLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA4MywgMTA1LCAxMjIsIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgNjYsIDExNywgMTA5LCAxMTIsIDczLCAxMTAsIDEwMiwgMTExLCAx
MTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5NywgMTA4LCA5OCwgMTAxLCAx
MDAsIDExMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcs
IDExNiwgNTIsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExMSwg
MTEyLCA5NywgOTksIDEwNSwgMTE2LCAxMjEsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1
OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTAxLCAxMDksIDEwNSwgMTE1LCAxMTUs
IDEwNSwgMTE4LCAxMDEsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAx
MDksIDk3LCAxMTYsIDUyLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwOSwgOTcsIDEx
MiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwg
NTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwg
MTE2LCAxMjEsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3
LCAxMTYsIDUyLCAzMiwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIs
IDk3LCA5OSwgMTAxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk4LCAx
MTcsIDEwOSwgMTEyLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgODQsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwg
ODMsIDExMiwgOTcsIDk5LCAxMDEsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywg
MTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA2Nywg
MTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4
LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYsIDEw
MSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwg
NzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDExMiwgMTExLCAxMDUsIDExMCwgMTE2LCA4MywgMTA1LCAxMjIsIDEwMSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY5LCAxMDksIDEwNSwgMTE1
LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY5LCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAx
MDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEs
IDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjgsIDEwMSwgOTgs
IDExNywgMTAzLCA3NywgMTExLCAxMDAsIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4MCwg
OTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwg
MTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDgyLCAxMDEsIDEw
MiwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODAsIDk3LCAxMTQsIDk3LCAxMDks
IDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAx
LCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwg
MTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2Nywg
MTExLCA5NywgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5
NywgMTE2LCA2NiwgMTE3LCAxMDksIDExMiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2
NywgMTExLCA5NywgMTE2LCA4NCwgOTcsIDExMCwgMTAzLCAxMDEsIDExMCwgMTE2LCA4MywgMTEy
LCA5NywgOTksIDEwMSwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTA5
LCA5NywgMTE2LCA1MiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDEx
NiwgNjYsIDExNywgMTA5LCAxMTIsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3
LCAxMTEsIDk3LCAxMTYsIDg0LCAxMDUsIDExMCwgMTE2LCA4MCwgOTcsIDExNCwgOTcsIDEwOSwg
MTE1LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDEwOCwgMTAx
LCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwg
MTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5
NywgMTE2LCA4NCwgMTA1LCAxMTAsIDExNiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDEx
MSwgOTcsIDExNiwgODQsIDEwNSwgMTEwLCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIw
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2NSwgMTEwLCAxMDUsIDEx
NSwgMTExLCAxMTYsIDExNCwgMTExLCAxMTIsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MCwgMzIsIDExOCwgNjUsIDExMCwgMTA1LCAxMTUsIDExMSwgMTE2LCAxMTQsIDExMSwgMTEy
LCAxMjEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwg
NTIsIDMyLCA5NywgMTEwLCAxMDUsIDExNSwgMTExLCAxMTYsIDExNCwgMTExLCAxMTIsIDEyMSwg
NzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIs
IDMyLCAxMTgsIDgzLCAxMDQsIDEwMSwgMTAxLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDgzLCAxMDQsIDEwMSwgMTAx
LCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwg
NTIsIDMyLCAxMTUsIDEwNCwgMTAxLCAxMDEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAx
MjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwg
MTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCAx
MTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDExNCwg
OTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAx
MywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgODQsIDEwNCwgMTA1LCA5OSwgMTA3LCAxMTAs
IDEwMSwgMTE1LCAxMTUsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwg
OTcsIDExNiwgNTIsIDMyLCAxMTYsIDEwNCwgMTA1LCA5OSwgMTA3LCAxMTAsIDEwMSwgMTE1LCAx
MTUsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUwLCAzMiwgMTE4LCA4NCwgMTA0LCAxMDUsIDk5LCAxMDcsIDExMCwgMTAxLCAxMTUsIDExNSwg
ODAsIDk3LCAxMTQsIDk3LCAxMDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNjgsIDEwNSwg
MTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIs
IDMyLCAxMTgsIDg0LCAxMDUsIDExMCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTE3LCA5OCwgODMsIDExNywg
MTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwg
MTE2LCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIs
IDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OCwgNDgsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwg
OTksIDk3LCAxMDgsIDc2LCA0OSwgOTUsIDQ5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3Niwg
NDksIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAx
MDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDksIDQ5LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5
LCA5NywgMTA4LCA3NiwgNTAsIDk1LCA1MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUw
LCA5NSwgNDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIs
IDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgNDgsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwg
OTksIDk3LCAxMDgsIDc2LCA1MCwgNDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwg
NTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwg
MTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4
OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAx
MDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg4
LCA4OCwgOTUsIDkwLCA5MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwg
ODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODksIDg5LCA5NSwgOTAs
IDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQs
IDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA5MCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAx
MDgsIDg4LCA4OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDEx
MiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODksIDkwLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5
LCA5NywgMTA4LCA5MCwgODgsIDU5LCAxMywgMTAsIDEyNSwgNTksIDEzLCAxMCwgMTA4LCA5Nywg
MTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDksIDQ0
LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ5LCA0
MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDc3LCAxMDEsIDEx
NSwgMTA0LCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE5LCAx
MTEsIDExNCwgMTA4LCAxMDAsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMTgsIDEwNSwgMTE1LCAxMDUsIDk4LCAxMDUsIDEwOCwgMTA1LCAxMTYsIDEyMSwgNTksIDEz
LCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4LCA5
NSwgNjYsIDY5LCA3MSwgNzMsIDc4LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDEx
NiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwg
NDgsIDQxLCAzMiwgMTA1LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEyLCAxMTEs
IDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwg
MTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwg
MzIsIDYxLCAzMiwgNDksIDQxLCAzMiwgMTA1LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAs
IDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDgwLCA3MywgNjEsIDUx
LCA0NiwgNDksIDUyLCA0OSwgNTMsIDU3LCA1MCwgNTQsIDUzLCA1MSwgNTMsIDU2LCA1NywgNTUs
IDU3LCA1MSwgNTAsIDUxLCA1NiwgNTIsIDU0LCA1MCwgNTQsIDUyLCA1MSwgNTEsIDU2LCA1MSwg
NTAsIDU1LCA1NywgNTMsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDY5
LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEy
LCAxMTIsIDExNCwgMTExLCAxMjAsIDYxLCA1MCwgNDYsIDUwLCA1OSwgMTMsIDEwLCA5OSwgMTEx
LCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDcxLCA5Nywg
MTA5LCAxMDksIDk3LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAx
MDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA2MSwgNDksIDQ2LCA0OCwgNDcs
IDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwg
ODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA1OSwg
MTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDc2LCAxMTcsIDEwOSwgMTA1LCAxMTAsIDk3LCAxMTAsIDk5LCAxMDEsIDY5LCAxMTAsIDk5LCAx
MTEsIDEwMCwgMTAxLCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDYxLCAxMTgsIDEwMSwg
OTksIDUxLCA0MCwgNDgsIDQ2LCA1MCwgNDksIDUwLCA1NCwgNDQsIDQ4LCA0NiwgNTUsIDQ5LCA1
MywgNTAsIDQ0LCA0OCwgNDYsIDQ4LCA1NSwgNTAsIDUwLCA0MSwgNTksIDEzLCAxMCwgOTksIDEx
MSwgMTEwLCAxMTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA2OSwgMTEy
LCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNjEsIDQ4LCA0NiwgNDgsIDQ4LCA0OCwgNDgsIDQ4
LCA0OCwgNDksIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgMTIwLCA0MSwgMzIs
IDk5LCAxMDgsIDk3LCAxMDksIDExMiwgNDAsIDEyMCwgNDQsIDQ4LCA0NiwgNDgsIDQ0LCA0OSwg
NDYsIDQ4LCA0MSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDk3LCA5OCwgMTE1LCA2OSwgMTEyLCAxMTUsIDQwLCAxMjAsIDQxLCAzMiwgOTcsIDk4LCAxMTUs
IDQwLCAxMjAsIDQxLCA0MywgNjksIDExMiwgMTE1LCAxMDUsIDEwOCwgMTExLCAxMTAsIDEzLCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMDksIDk3LCAxMjAsIDY5
LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCAxMDksIDk3LCAxMjAsIDQwLCAxMjAsIDQ0LCA2
OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNDEsIDEzLCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2
LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCA5OSwgMTA4LCA5NywgMTA5LCAx
MTIsIDQwLCAxMjAsIDQ0LCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNDQsIDQ5
LCA0NiwgNDgsIDQxLCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMTYsIDExNCwgOTcs
IDExMCwgMTE1LCAxMTIsIDExMSwgMTE1LCAxMDEsIDc3LCA5NywgMTE2LCA1MSwgNDAsIDEwOSwg
OTcsIDExNiwgNTEsIDMyLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQx
LCAzMiwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDQ4LCA2MSwgMTA1
LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDEwNSwgNTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAs
IDkxLCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMTEsIDExNywg
MTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNjEsIDEwOSwgOTcsIDExNiwgNTEsIDQw
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4LCA0NiwgMTIwLCA0NCwgMTA1
LCA0OSwgNDYsIDEyMCwgNDQsIDEwNSwgNTAsIDQ2LCAxMjAsIDQxLCA0NCwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMSwgNDQsIDEwNSwgNDksIDQ2LCAxMjEs
IDQ0LCAxMDUsIDUwLCA0NiwgMTIxLCA0MSwgNDQsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
NDAsIDEwNSwgNDgsIDQ2LCAxMjIsIDQ0LCAxMDUsIDQ5LCA0NiwgMTIyLCA0NCwgMTA1LCA1MCwg
NDYsIDEyMiwgNDEsIDEzLCAxMCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCAxMTEsIDExNywgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
NTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMDUsIDExMCwg
MTE4LCAxMDEsIDExNCwgMTE1LCAxMDEsIDc3LCA5NywgMTE2LCA1MSwgNDAsIDEwOSwgOTcsIDEx
NiwgNTEsIDMyLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAzMiwg
MTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgNDgsIDQ4LCA2MSwg
MTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA5MSwgNDgs
IDkzLCA0NCwgOTcsIDQ4LCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUs
IDEyMCwgOTEsIDQ4LCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA0OCwgNTAsIDYxLCAxMDUsIDEx
MCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwgOTMsIDkxLCA1MCwgOTMsIDU5
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgNDksIDQ4LCA2MSwgMTA1
LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDksIDkzLCA5MSwgNDgsIDkz
LCA0NCwgOTcsIDQ5LCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEy
MCwgOTEsIDQ5LCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA0OSwgNTAsIDYxLCAxMDUsIDExMCwg
NzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMsIDkxLCA1MCwgOTMsIDU5LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgNTAsIDQ4LCA2MSwgMTA1LCAx
MTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA5MSwgNDgsIDkzLCA0
NCwgOTcsIDUwLCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
OTEsIDUwLCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA1MCwgNTAsIDYxLCAxMDUsIDExMCwgNzcs
IDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkxLCA1MCwgOTMsIDU5LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OCwgNDgsIDQ5LCA2MSwgOTcsIDUwLCA1
MCwgNDIsIDk3LCA0OSwgNDksIDQ1LCA5NywgNDksIDUwLCA0MiwgOTcsIDUwLCA0OSwgNTksIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk4LCA0OSwgNDksIDYxLCA0NSwgOTcs
IDUwLCA1MCwgNDIsIDk3LCA0OSwgNDgsIDQzLCA5NywgNDksIDUwLCA0MiwgOTcsIDUwLCA0OCwg
NTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk4LCA1MCwgNDksIDYxLCA5
NywgNTAsIDQ5LCA0MiwgOTcsIDQ5LCA0OCwgNDUsIDk3LCA0OSwgNDksIDQyLCA5NywgNTAsIDQ4
LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDEsIDExNiwg
NjEsIDk3LCA0OCwgNDgsIDQyLCA5OCwgNDgsIDQ5LCA0MywgOTcsIDQ4LCA0OSwgNDIsIDk4LCA0
OSwgNDksIDQzLCA5NywgNDgsIDUwLCA0MiwgOTgsIDUwLCA0OSwgNTksIDEzLCAxMCwgMTE0LCAx
MDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwOSwgOTcsIDExNiwgNTEsIDQwLCA5OCwgNDgs
IDQ5LCA0NCwgNDAsIDQ1LCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ4LCA0OSwgNDMsIDk3LCA0OCwg
NTAsIDQyLCA5NywgNTAsIDQ5LCA0MSwgNDQsIDQwLCA5NywgNDksIDUwLCA0MiwgOTcsIDQ4LCA0
OSwgNDUsIDk3LCA0OCwgNTAsIDQyLCA5NywgNDksIDQ5LCA0MSwgNDQsIDEzLCAxMCwgOTgsIDQ5
LCA0OSwgNDQsIDQwLCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ4LCA0OCwgNDUsIDk3LCA0OCwgNTAs
IDQyLCA5NywgNTAsIDQ4LCA0MSwgNDQsIDQwLCA0NSwgOTcsIDQ5LCA1MCwgNDIsIDk3LCA0OCwg
NDgsIDQzLCA5NywgNDgsIDUwLCA0MiwgOTcsIDQ5LCA0OCwgNDEsIDQ0LCAxMywgMTAsIDk4LCA1
MCwgNDksIDQ0LCA0MCwgNDUsIDk3LCA1MCwgNDksIDQyLCA5NywgNDgsIDQ4LCA0MywgOTcsIDQ4
LCA0OSwgNDIsIDk3LCA1MCwgNDgsIDQxLCA0NCwgNDAsIDk3LCA0OSwgNDksIDQyLCA5NywgNDgs
IDQ4LCA0NSwgOTcsIDQ4LCA0OSwgNDIsIDk3LCA0OSwgNDgsIDQxLCA0MSwgNDcsIDEwMCwgMTAx
LCAxMTYsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE2
LCAxMTEsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA4MywgMTEyLCA5NywgOTksIDEwMSwg
NDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMTMs
IDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExMiwg
MTExLCAxMTksIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwgMTE4LCAxMDEsIDk5LCA1
MSwgNDAsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAs
IDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIw
LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE2LCAxMTEsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMTMsIDEw
LCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExMiwgMTEx
LCAxMTksIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwg
NDAsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgODAs
IDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA0MSwgNDEs
IDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1
LCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEw
MSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDIsIDEx
OCwgOTcsIDEwOCwgMTE3LCAxMDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTEyLCAxMTEsIDExOSwgNTMsIDQwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgMTEzLCA2MSwgMTE4LCA5NywgMTA4LCAx
MTcsIDEwMSwgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDU5LCAxMywgMTAsIDExNCwgMTAx
LCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTUsIDExMywgNDIsIDExNSwgMTEzLCA0MiwgMTE4
LCA5NywgMTA4LCAxMTcsIDEwMSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMDMsIDEwMSwgMTE2LCA3NiwgMTE3LCAxMDksIDEwNSwgMTEwLCA5
NywgMTEwLCA5OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDEx
NCwgMTEwLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAs
IDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCA3NiwgMTE3LCAxMDksIDEwNSwgMTEwLCA5Nywg
MTEwLCA5OSwgMTAxLCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgNjUsIDExMiwgMTEyLCAx
MTQsIDExMSwgMTIwLCA0MSwgNDQsIDQ4LCA0NiwgNDQsIDQ5LCA0NiwgNDEsIDU5LCAxMywgMTAs
IDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAzLCAxMDEsIDExNiwg
ODIsIDk3LCAxMTAsIDEwMCwgNDAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUsIDEwMSwgMTAx
LCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAs
IDMyLCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDQwLCAxMTUsIDEwNSwgMTEwLCA0MCwgMTAwLCAx
MTEsIDExNiwgNDAsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDYsIDEyMCwgMTIxLCAzMiwgNDQsIDEx
OCwgMTAxLCA5OSwgNTAsIDQwLCA0OSwgNTAsIDQ2LCA1NywgNTYsIDU3LCA1NiwgNDQsIDU1LCA1
NiwgNDYsIDUwLCA1MSwgNTEsIDQxLCA0MSwgNDEsIDQyLCA1MiwgNTEsIDU1LCA1MywgNTYsIDQ2
LCA1MywgNTIsIDUzLCA1MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDExNiwgMTA0LCAxMDEsIDExNCwgNDAsIDExOCwg
MTAxLCA5OSwgNTAsIDMyLCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQ0LCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDY1LCAxMDks
IDExMSwgMTE3LCAxMTAsIDExNiwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDExNCwgOTcsIDExMCwgMTAwLCA2MSwgMTAzLCAxMDEsIDExNiwgODIsIDk3
LCAxMTAsIDEwMCwgNDAsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTE2LCAxMDQsIDEwMSwgMTE0LCA2MSwg
MTA5LCAxMDUsIDEyMCwgNDAsIDQ1LCAxMTgsIDk3LCAxMTQsIDEwNSwgOTcsIDExMCwgOTksIDEw
MSwgNjUsIDEwOSwgMTExLCAxMTcsIDExMCwgMTE2LCA0NywgNTAsIDUzLCA1MywgNDYsIDQ4LCA0
NCwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDY1LCAxMDksIDExMSwgMTE3
LCAxMTAsIDExNiwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQsIDExNCwgOTcsIDExMCwgMTAw
LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwMCwg
MTA1LCAxMTYsIDEwNCwgMTAxLCAxMTQsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCA5OSwgMTEx
LCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAz
LCA5OCwgMTAwLCA3NywgOTcsIDEyMCwgODIsIDk3LCAxMTAsIDEwMywgMTAxLCA2MSwgNTAsIDUz
LCA1MywgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE2LCAxMTEs
IDgyLCA3MSwgNjYsIDY4LCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMDksIDk3LCAxMjAsIDgyLCA3MSwgNjYsIDYxLCAxMDksIDk3LCAxMjAsIDY5LCAxMTIsIDEx
NSwgNDAsIDEwOSwgOTcsIDEyMCwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQs
IDQ0LCAxMDksIDk3LCAxMjAsIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTAzLCA0
NCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDk4LCA0MSwgNDEsIDQxLCA1OSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNjgsIDYxLCAxMDksIDk3LCAxMjAsIDQwLCAx
MTQsIDEwMywgOTgsIDEwMCwgNzcsIDk3LCAxMjAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNDcs
IDEwOSwgOTcsIDEyMCwgODIsIDcxLCA2NiwgNDQsIDQ5LCA0NiwgNDEsIDU5LCAxMywgMTAsIDY4
LCA2MSwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTAyLCAxMDgsIDExMSwgMTExLCAxMTQs
IDQwLCA2OCwgNDEsIDQ3LCA1MCwgNTMsIDUzLCA0NiwgNDgsIDQ0LCA0OCwgNDYsIDQ0LCA0OSwg
NDYsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDMsIDk4LCA2
MSwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA5OCwgNDIsIDY4LCA1OSwg
MTMsIDEwLCAxMTQsIDEwMywgOTgsIDYxLCAxMTYsIDExMSwgNzEsIDk3LCAxMDksIDEwOSwgOTcs
IDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA0MCwgMTE0LCAxMDMsIDk4LCA0MSwgNTksIDEzLCAxMCwg
MTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAx
MTQsIDEwMywgOTgsIDQ0LCA2OCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTAyLCAxMTQsIDExMSwgMTA5LCA4MiwgNzEsIDY2LCA2OCwgNDAsIDEx
OCwgMTAxLCA5OSwgNTIsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwgNDEsIDMyLCAxMjMsIDEzLCAx
MCwgMTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywgOTgsIDYxLCAxMTYsIDExMSwgNzYs
IDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA0MCwgMTE0LCAx
MDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwg
MTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywg
OTgsIDQ3LCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDk3LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAx
MCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2
LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAxMTEsIDExNywgMTE2LCAz
MiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1
LCAxMTEsIDExMCwgODcsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwg
NDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwgNDks
IDQxLCAzMiwgMTExLCAxMTcsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDc4
LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAx
MTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAz
MiwgNjEsIDMyLCA1MCwgNDEsIDMyLCAxMTEsIDExNywgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODUsIDg2
LCA4NywgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2
NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUsIDY4
LCA2OSwgNzAsIDczLCA3OCwgNzMsIDg0LCA3MywgNzksIDc4LCA4MywgMTMsIDEwLCAxMTgsIDEx
MSwgMTA1LCAxMDAsIDMyLCAxMDksIDk3LCAxMDUsIDExMCwgNDAsIDExOCwgMTExLCAxMDUsIDEw
MCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwg
OTUsIDc3LCA2NSwgNzMsIDc4LCA5NSwgNjYsIDY5LCA3MSwgNzMsIDc4LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwg
ODUsIDExMiwgMTAwLCA5NywgMTE2LCAxMDEsIDEwMCwgNjEsIDExMiwgMTExLCAxMTUsIDEwNSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEw
LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAw
LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA1OSwgMTMsIDEwLCAxMTgsIDgwLCAx
MTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg1LCA4NiwgODcsIDYxLCAxMTIsIDEx
MSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODUsIDExMiwgMTAwLCA5NywgMTE2LCAx
MDEsIDEwMCwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUs
IDg1LCA4MCwgNjgsIDY1LCA4NCwgNjksIDk1LCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwg
NzgsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUs
IDgzLCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUsIDg1LCA4MCwg
NjgsIDY1LCA4NCwgNjksIDk1LCA3OCwgNzksIDgyLCA3NywgNjUsIDc2LCAxMywgMTAsIDEwOSwg
OTcsIDExNiwgNTIsIDMyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4NywgMTExLCAxMTQsIDEw
OCwgMTAwLCA2MSwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDU5LCAxMywgMTAsIDEwMywgMTA4
LCA5NSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNjEsIDExOCwgMTA1
LCAxMDEsIDExOSwgODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgNDIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDg3LCAxMTEsIDExNCwgMTA4LCAxMDAsIDQy
LCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAxLCAxMDAsIDQ0LCA0OSwgNDYsIDQ4LCA0
MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwg
MTAwLCA4MCwgMTExLCAxMTUsIDYxLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4NywgMTExLCAx
MTQsIDEwOCwgMTAwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExMiwgMTExLCAxMTUsIDEw
NSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAwLCA0
NCwgNDksIDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDEx
NiwgMTA1LCAxMTEsIDExMCwgODcsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE5LCAxMTEs
IDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDEsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDEx
NiwgNTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCAxMTEsIDExNCwgMTA4
LCAxMDAsIDYxLCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwg
ODcsIDExMSwgMTE0LCAxMDgsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDExOCwgNzgsIDExMSwgMTE0
LCAxMDksIDk3LCAxMDgsIDg3LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUs
IDEyMiwgMTAxLCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgMTExLCAxMTQs
IDEwOCwgMTAwLCA0MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NSwgMTEyLCAxMDAs
IDk3LCAxMTYsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIs
IDExNywgMTE4LCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAwLCA2MSwgMTE4LCAxMDEs
IDk5LCA1MCwgNDAsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTAsIDMyLCAxMTcsIDExOCwgNTAsIDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgNDgs
IDQ2LCA0NCwgNDgsIDQ2LCA0MSwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQs
IDY5LCA4OCwgOTUsIDc3LCA2NSwgNzMsIDc4LCA5NSwgNjksIDc4LCA2OCwgMTMsIDEwLCAxMDMs
IDEwOCwgOTUsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjEs
IDMyLCA0MiwgNjEsIDMyLCA0NSwgNDksIDQ2LCA1OSwgMzIsIDEyNV0ubWFwKGMgPT4gU3RyaW5n
LmZyb21DaGFyQ29kZShjKSkuam9pbigiIik7Citjb25zdCBmcmFnbWVudFNoYWRlckdMU0wyID0g
WzM1LCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwNSwgMTExLCAxMTAsIDMyLCA1MiwgNTMsIDQ4LCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MCwgNjYsIDgyLCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzYsIDY2LCA2OSwgNjgs
IDc5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc3LCA2NiwgNzMsIDY5LCA3OCwgODQs
IDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OSwgODAsIDY1LCA2NywgNzMsIDg0LCA4OSwgNjgs
IDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3NiwgODAsIDcyLCA2NSwgODQsIDY5LCA4MywgODQs
IDg2LCA2NSwgNzYsIDg1LCA2OSwgMzIsIDQ4LCA0NiwgNTIsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA4MCwgNjksIDY3LCA4NSwgNzYsIDY1LCA4MiwgNzks
IDg2LCA2OSwgODIsIDY1LCA3NiwgODAsIDcyLCA2NSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgODIsIDY1LCA2OCwgNzMsIDY1LCA3OCwgNjcsIDY5LCA3OSwgODYs
IDY5LCA4MiwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCA2OSwgNzcsIDczLCA4MywgODMsIDczLCA4NiwgNjksIDY4LCA3MywgODIs
IDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDg2LCA3MywgODQs
IDg5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzYsIDc5LCA2OCwgNjYsIDY1LCA4MywgNjks
IDY4LCA3NywgNzMsIDY3LCA4MiwgNzksIDgzLCA3MCwgODUsIDgyLCA2NSwgNjcsIDY5LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgNzMsIDY3LCA4MiwgNzks
IDgzLCA4NSwgODIsIDcwLCA2NSwgNjcsIDY5LCA3NywgNjUsIDgwLCA2OCwgNzMsIDgyLCA2OSwg
NjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNjksIDc4LCA4NiwgNzMsIDgyLCA3OSwgNzgsIDc3LCA2OSwgNzgsIDg0LCA2Niwg
ODIsIDY4LCA3MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgs
IDc5LCA4MiwgNzcsIDY1LCA3NiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgNjYsIDg1LCA3NywgODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIs
IDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OCwgNzksIDgy
LCA3NywgNjUsIDc2LCA4OCwgODksIDgzLCA2NywgNjUsIDc2LCA2OSwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzYsIDczLCA3MSwgNzIsIDg0LCA3NywgNjUsIDgw
LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDcz
LCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2
OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA3NywgNjUsIDgwLCA5NSwgNTEsIDY4
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3
NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNzcsIDY1LCA4MCwgOTUsIDgzLCA3NSwgODksIDY2
LCA3OSwgODgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA4
MCwgNzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwgNzYsIDk1LCA3MiwgNjUsIDgyLCA3NywgNzksIDc4
LCA3MywgNjcsIDgzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4
MiwgNzEsIDY2LCA2OCwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2NSwgNjgsIDczLCA2
NSwgNzgsIDY3LCA2OSwgNzksIDY3LCA2NywgNzYsIDg1LCA4MywgNzMsIDc5LCA3OCwgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3
OSwgNzgsIDc5LCA2NywgNjcsIDc2LCA4NSwgODMsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA4NSwgNzcsIDk1LCA2NiwgNzksIDc4LCA2
OSwgOTUsIDczLCA3OCwgNzAsIDc2LCA4NSwgNjksIDc4LCA2NywgNjksIDgyLCA4MywgMzIsIDQ4
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NiwgMTExLCAxMTAs
IDEwMSwgMTE1LCA4MCwgMTAxLCAxMTQsIDc3LCAxMDEsIDExNSwgMTA0LCAzMiwgNDgsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA4NSwgNzcsIDk1LCA3Nywg
NzksIDgyLCA4MCwgNzIsIDk1LCA3MywgNzgsIDcwLCA3NiwgODUsIDY5LCA3OCwgNjcsIDY5LCA4
MiwgODMsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
ODYsIDczLCA3MSwgNzgsIDY5LCA4NCwgODQsIDY5LCA2NiwgNzYsIDY5LCA3OCwgNjgsIDc3LCA3
OSwgNjgsIDY5LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgODksIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA2NSwgNzcsIDgwLCA3NiwgNjksIDgyLCA1
MSwgNjgsIDcxLCA4MiwgNjksIDY5LCA3OCwgNjgsIDY5LCA4MCwgODQsIDcyLCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNjUsIDc3LCA4MCwgNzYsIDY5LCA4
MiwgNTEsIDY4LCA2NiwgNzEsIDgyLCA3NywgNjUsIDgwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCA4NSwgODMsIDY5LCA4MCwgNzIsIDg5LCA4MywgNzMsIDY3LCA2
NSwgNzYsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzAsIDY1LCA3NiwgNzYsIDc5LCA3MCwgNzAsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDg0LCA4NywgNzksIDgzLCA3
MywgNjgsIDY5LCA2OCwgNzYsIDczLCA3MSwgNzIsIDg0LCA3MywgNzgsIDcxLCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3
OSwgNjUsIDg0LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5
LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3OSwgNjUsIDg0LCA5NSwgNjYsIDg1
LCA3NywgODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3
LCA3OSwgNjUsIDg0LCA5NSwgODQsIDczLCA3OCwgODQsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUs
IDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3OCwgNzMsIDgzLCA3OSwgODQs
IDgyLCA3OSwgODAsIDczLCA2NywgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwg
NzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNjYsIDgyLCA2OCwgNzAsIDk1LCA4NiwgOTUsIDcyLCA2OSwg
NzMsIDcxLCA3MiwgODQsIDk1LCA2NywgNzksIDgyLCA4MiwgNjksIDc2LCA2NSwgODQsIDY5LCA2
OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzcsIDgzLCA5NSwg
NjYsIDgyLCA2OCwgNzAsIDk1LCA2OSwgNzgsIDY5LCA4MiwgNzEsIDg5LCA5NSwgNjcsIDc5LCA3
OCwgODMsIDY5LCA4MiwgODYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDcyLCA2OSwgNjksIDc4LCA5NSwgODQsIDY5LCA4
OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgODMsIDk1LCA4
NCwgNzIsIDczLCA2NywgNzUsIDc4LCA2OSwgODMsIDgzLCA2NSwgNzgsIDY4LCA3NywgNjUsIDgz
LCA3NSwgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcs
IDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgNjgsIDY5LCA2NiwgODUsIDcxLCA3NywgNzksIDY4LCA2OSwgMzIsIDQ4LCAxMCwgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDcyLCA2NSwgNjgsIDY5
LCA4MiwgOTUsIDc4LCA2NSwgNzcsIDY5LCAzMiwgMTAyLCAxMTQsIDk3LCAxMDMsIDEwOSwgMTAx
LCAxMTAsIDExNiwgNTgsIDExMiwgOTgsIDExNCwgMTAsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgy
LCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA5NSwgNjYsIDY5LCA3MSwgNzMsIDc4LCAxMywgMTAs
IDExMiwgMTE0LCAxMDEsIDk5LCAxMDUsIDExNSwgMTA1LCAxMTEsIDExMCwgMzIsIDEwNCwgMTA1
LCAxMDMsIDEwNCwgMTEyLCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgNTksIDEzLCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3MCwgODIsIDc5LCA3NywgNzYs
IDczLCA3OCwgNjksIDY1LCA4MiwgODMsIDgwLCA2NSwgNjcsIDY5LCAxMywgMTAsIDEwOCwgOTcs
IDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTE2LCAxMDAsIDQ5LCA1MiwgNDgsIDQ0LCA5
OSwgMTExLCAxMDgsIDExNywgMTA5LCAxMTAsIDk1LCAxMDksIDk3LCAxMDYsIDExMSwgMTE0LCA0
MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgNTksIDEzLCAxMCwgMTA4
LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwg
NDgsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIs
IDQ4LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDgzLCA5
OSwgMTAxLCAxMTAsIDEwMSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1Miwg
MzIsIDExOCwgMTA1LCAxMDEsIDExOSwgODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOCwgMTA1
LCAxMDEsIDExOSwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDEx
MSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA0OSwgNDQsIDMyLCA5
OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwg
MTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgNzcsIDk3LCAxMTYsIDEwMSwg
MTE0LCAxMDUsIDk3LCAxMDgsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAs
IDMyLCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA3MywgMTEwLCAxMDIsIDExMSwg
MTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA2NSwgMTA5LCA5OCwg
MTA1LCAxMDEsIDExMCwgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA3OSwgMTEyLCA5NywgOTksIDEwNSwgMTE2LCAxMjEs
IDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMy
LCAxMTgsIDY5LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDczLCAxMTAsIDEw
MiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc2LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDEwOSwgOTcsIDExMiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDczLCAxMTAsIDEwMiwgMTEx
LCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc3LCAxMDUsIDk5
LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4MywgOTcsIDEwOSwg
MTEyLCAxMDgsIDEwMSwgMTE0LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgMTA1LCAxMjIsIDEwMSwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjYsIDExNywgMTA5LCAxMTIsIDczLCAxMTAsIDEw
MiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5NywgMTA4LCA5
OCwgMTAxLCAxMDAsIDExMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAs
IDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1Miwg
MzIsIDExMSwgMTEyLCA5NywgOTksIDEwNSwgMTE2LCAxMjEsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTAxLCAxMDksIDEwNSwg
MTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwg
MTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEw
OSwgOTcsIDExMiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwg
OTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTgsIDEwNSwgMTE2LCAxMjEsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEw
LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywg
MTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1Miwg
MzIsIDk4LCAxMTcsIDEwOSwgMTEyLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgODQsIDk3LCAxMTAsIDEwMywgMTAxLCAx
MTAsIDExNiwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUs
IDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEw
MSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwg
MTExLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUy
LCAzMiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEw
LCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5Nywg
OTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDExMiwgMTExLCAxMDUsIDExMCwgMTE2LCA4MywgMTA1LCAxMjIsIDEw
MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY5LCAxMDks
IDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY5LCAxMjEsIDEwMSwgODAsIDEx
MSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNjcsIDExMSwg
MTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjgs
IDEwMSwgOTgsIDExNywgMTAzLCA3NywgMTExLCAxMDAsIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5Nywg
MTE2LCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUyLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDgy
LCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODAsIDk3LCAxMTQs
IDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcs
IDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwg
MTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5Nywg
MTE0LCA2NywgMTExLCA5NywgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2
NywgMTExLCA5NywgMTE2LCA2NiwgMTE3LCAxMDksIDExMiwgNzMsIDExMCwgMTAyLCAxMTEsIDEx
NSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5
NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4NCwgOTcsIDExMCwgMTAzLCAxMDEsIDExMCwgMTE2
LCA4MywgMTEyLCA5NywgOTksIDEwMSwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNTksIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDEx
MSwgOTcsIDExNiwgNjYsIDExNywgMTA5LCAxMTIsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIw
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3
LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0LCAxMDUsIDExMCwgMTE2LCA4MCwgOTcsIDExNCwg
OTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTks
IDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA2NywgMTExLCAxMDgsIDExMSwg
MTE0LCA2NSwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2
NywgMTExLCA5NywgMTE2LCA4NCwgMTA1LCAxMTAsIDExNiwgNzMsIDExMCwgMTAyLCAxMTEsIDEx
NSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDEx
NCwgNjcsIDExMSwgOTcsIDExNiwgODQsIDEwNSwgMTEwLCAxMTYsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2NSwgMTEw
LCAxMDUsIDExNSwgMTExLCAxMTYsIDExNCwgMTExLCAxMTIsIDEyMSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjUsIDExMCwgMTA1LCAxMTUsIDExMSwgMTE2LCAxMTQs
IDExMSwgMTEyLCAxMjEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwg
OTcsIDExNiwgNTIsIDMyLCA5NywgMTEwLCAxMDUsIDExNSwgMTExLCAxMTYsIDExNCwgMTExLCAx
MTIsIDEyMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTIsIDMyLCAxMTgsIDgzLCAxMDQsIDEwMSwgMTAxLCAxMTAsIDY3LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDgzLCAxMDQs
IDEwMSwgMTAxLCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwg
OTcsIDExNiwgNTIsIDMyLCAxMTUsIDEwNCwgMTAxLCAxMDEsIDExMCwgNzcsIDk3LCAxMTYsIDEx
NCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAx
MDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDEx
NCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDEx
MSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA4MiwgMTAxLCAx
MDIsIDExNCwgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAx
MTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMTQs
IDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgODQsIDEwNCwgMTA1LCA5OSwg
MTA3LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywg
MTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTYsIDEwNCwgMTA1LCA5OSwgMTA3LCAxMTAsIDEw
MSwgMTE1LCAxMTUsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4NCwgMTA0LCAxMDUsIDk5LCAxMDcsIDExMCwgMTAxLCAx
MTUsIDExNSwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwg
NjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTIsIDMyLCAxMTgsIDg0LCAxMDUsIDExMCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwg
MTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTE3LCA5OCwg
ODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAx
MTUsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgs
IDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OCwgNDgsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAx
MTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgOTUsIDQ5LCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5Nywg
MTA4LCA3NiwgNDksIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4
MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDksIDQ5LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0
LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDk1LCA1MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEw
OCwgNzYsIDUwLCA5NSwgNDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgs
IDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgNDgsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAx
MTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgNDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgs
IDc2LCA1MCwgNTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAx
MTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg4LCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5
NywgMTA4LCA4OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDEx
MiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgOTAsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3
LCAxMDgsIDg4LCA4OCwgOTUsIDkwLCA5MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODksIDg5
LCA5NSwgOTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4Mywg
MTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA5MCwgOTAsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwg
OTksIDk3LCAxMDgsIDg4LCA4OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
OCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODksIDkwLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0
LCAxMDUsIDk5LCA5NywgMTA4LCA5MCwgODgsIDU5LCAxMywgMTAsIDEyNSwgNTksIDEzLCAxMCwg
MTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAz
MiwgNDksIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwg
MzIsIDQ5LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDc3
LCAxMDEsIDExNSwgMTA0LCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAz
MiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMTgsIDEwNSwgMTE1LCAxMDUsIDk4LCAxMDUsIDEwOCwgMTA1LCAxMTYsIDEy
MSwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAx
MTYsIDQwLCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIs
IDQ4LCA0MSwgMzIsIDEwNSwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODAs
IDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDU5LCAxMywgMTAsIDEwOCwg
OTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAx
MTEsIDExMCwgMzIsIDYxLCAzMiwgNDksIDQxLCAzMiwgMTA1LCAxMTAsIDMyLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE4LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDU5LCAxMywg
MTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2
MSwgMzIsIDQ4LCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwg
NjEsIDMyLCA0OSwgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMy
LCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDUwLCA2OCwgMzIsIDEwMSwgMTEw
LCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAx
MDAsIDEwMiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODQsIDEwMSwgMTIwLCAx
MTYsIDExNywgMTE0LCAxMDEsIDU5LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMDgsIDk3
LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA0OCwg
NDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNTAs
IDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgMTE1LCA5Nywg
MTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTEx
LCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDgzLCA5NywgMTA5
LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDU5
LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIs
IDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAs
IDEwMSwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDEx
MCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDEx
NCwgMzIsIDExNSwgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA1MCwgNjgsIDQwLCAxMDEs
IDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDEx
NCwgMTAwLCAxMDIsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDg0LCAxMDEsIDEy
MCwgMTE2LCAxMTcsIDExNCwgMTAxLCA0NCwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAx
MTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgODMsIDk3LCAx
MDksIDExMiwgMTA4LCAxMDEsIDExNCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwg
NDEsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMTUsIDk3
LCAxMDksIDExMiwgMTA4LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDQwLCAxMTUsIDQ0LCA5OSwgNDEsIDMyLCAxMTYsIDEwMSwgMTIwLCAxMTYs
IDExNywgMTE0LCAxMDEsIDQwLCAxMTUsIDQ0LCA5OSwgNDEsIDEzLCAxMCwgMTA4LCA5NywgMTIx
LCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNTAsIDQ0LCAz
MiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ4LCA0MSwg
MzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNiwgMTAxLCAxMjAs
IDExNiwgMTE3LCAxMTQsIDEwMSwgNjcsIDExNywgOTgsIDEwMSwgMzIsIDExNCwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgs
IDEwMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNTksIDEwLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwg
MTAxLCAxMTYsIDMyLCA2MSwgMzIsIDUwLCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUs
IDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OSwgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDEx
MSwgMTE0LCAxMDksIDMyLCAxMTUsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMzIsIDEx
NCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgOTcsIDEw
OSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA1
OSwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMzIsIDExNSwgOTcsIDEwOSwgMTEy
LCAxMDgsIDEwMSwgMTE0LCA2NywgMTE3LCA5OCwgMTAxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAx
LCAxMTQsIDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA0NCwgMzIsIDExNCwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgOTcsIDEwOSwgMTEy
LCAxMDgsIDEwMSwgMTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA0MSwgMTMs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwgOTcsIDEwOSwg
MTEyLCAxMDgsIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgNzYsIDExMSwgMTAwLCA0MCwgMTE1LCA0NCwgOTksIDQ0LCAxMDgsIDQxLCAzMiwgMTE2
LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3NiwgMTExLCAxMDAsIDQwLCAxMTUsIDQ0
LCA5OSwgNDQsIDEwOCwgNDEsIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0
MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA1MCwg
NDEsIDMyLCAxMDUsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgwLCAxMTEs
IDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg1LCA4NiwgODcsIDU5LCAxMywgMTAsIDk5
LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgODAs
IDczLCA2MSwgNTEsIDQ2LCA0OSwgNTIsIDQ5LCA1MywgNTcsIDUwLCA1NCwgNTMsIDUxLCA1Mywg
NTYsIDU3LCA1NSwgNTcsIDUxLCA1MCwgNTEsIDU2LCA1MiwgNTQsIDUwLCA1NCwgNTIsIDUxLCA1
MSwgNTYsIDUxLCA1MCwgNTUsIDU3LCA1MywgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUs
IDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3NiwgMTA1LCAxMTAsIDEwMSwg
OTcsIDExNCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAx
MTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNjEsIDUwLCA0NiwgNTAsIDU5LCAxMywg
MTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgNzEsIDk3LCAxMDksIDEwOSwgOTcsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA4MCwg
MTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDYxLCA0OSwg
NDYsIDQ4LCA0NywgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDY5LCAxMTAsIDk5LCAxMTEs
IDEwMCwgMTAxLCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTEx
LCAxMjAsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEwMSwgNjks
IDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNjEs
IDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0OCwgNDYsIDUwLCA0OSwgNTAsIDU0LCA0NCwgNDgsIDQ2
LCA1NSwgNDksIDUzLCA1MCwgNDQsIDQ4LCA0NiwgNDgsIDU1LCA1MCwgNTAsIDQxLCA1OSwgMTMs
IDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDY5LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCA2MSwgNDgsIDQ2LCA0OCwgNDgs
IDQ4LCA0OCwgNDgsIDQ4LCA0OSwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAx
MjAsIDQxLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTIwLCA0NCwgNDgsIDQ2LCA0
OCwgNDQsIDQ5LCA0NiwgNDgsIDQxLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDEx
MCwgMTAxLCAzMiwgOTcsIDk4LCAxMTUsIDY5LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCA5
NywgOTgsIDExNSwgNDAsIDEyMCwgNDEsIDQzLCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEs
IDExMCwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDEwOSwg
OTcsIDEyMCwgNjksIDExMiwgMTE1LCA0MCwgMTIwLCA0MSwgMzIsIDEwOSwgOTcsIDEyMCwgNDAs
IDEyMCwgNDQsIDY5LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCA0MSwgMTMsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwgOTcsIDExNiwgMTE3LCAx
MTQsIDk3LCAxMTYsIDEwMSwgNjksIDExMiwgMTE1LCA0MCwgMTIwLCA0MSwgMzIsIDk5LCAxMDgs
IDk3LCAxMDksIDExMiwgNDAsIDEyMCwgNDQsIDY5LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwg
MTEwLCA0NCwgNDksIDQ2LCA0OCwgNDEsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDEx
NiwgMTE0LCA5NywgMTEwLCAxMTUsIDExMiwgMTExLCAxMTUsIDEwMSwgNzcsIDk3LCAxMTYsIDUx
LCA0MCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAx
MDUsIDEyMCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwg
NDgsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwgOTMs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDQ5LCA2MSwgMTA1LCAxMTAs
IDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDksIDkzLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTA1LCA1MCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0
LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MSwgMzIs
IDExMSwgMTE3LCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA2MSwgMTA5LCA5Nywg
MTE2LCA1MSwgNDAsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDEwNSwgNDgsIDQ2LCAx
MjAsIDQ0LCAxMDUsIDQ5LCA0NiwgMTIwLCA0NCwgMTA1LCA1MCwgNDYsIDEyMCwgNDEsIDQ0LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4LCA0NiwgMTIxLCA0NCwgMTA1LCA0
OSwgNDYsIDEyMSwgNDQsIDEwNSwgNTAsIDQ2LCAxMjEsIDQxLCA0NCwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMiwgNDQsIDEwNSwgNDksIDQ2LCAxMjIsIDQ0
LCAxMDUsIDUwLCA0NiwgMTIyLCA0MSwgMTMsIDEwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExMSwgMTE3LCAxMTYsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MSwgMzIs
IDEwNSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwMSwgNzcsIDk3LCAxMTYsIDUxLCA0MCwg
MTA5LCA5NywgMTE2LCA1MSwgMzIsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEy
MCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA0
OCwgNDgsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwg
OTMsIDkxLCA0OCwgOTMsIDQ0LCA5NywgNDgsIDQ5LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2
LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA5MSwgNDksIDkzLCA0NCwgOTcsIDQ4LCA1MCwg
NjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgOTEs
IDUwLCA5MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA0OSwg
NDgsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMs
IDkxLCA0OCwgOTMsIDQ0LCA5NywgNDksIDQ5LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAx
MTQsIDEwNSwgMTIwLCA5MSwgNDksIDkzLCA5MSwgNDksIDkzLCA0NCwgOTcsIDQ5LCA1MCwgNjEs
IDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEsIDUw
LCA5MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA1MCwgNDgs
IDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkx
LCA0OCwgOTMsIDQ0LCA5NywgNTAsIDQ5LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA5MSwgNDksIDkzLCA0NCwgOTcsIDUwLCA1MCwgNjEsIDEw
NSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgOTEsIDUwLCA5
MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk4LCA0OCwgNDksIDYx
LCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ5LCA0OSwgNDUsIDk3LCA0OSwgNTAsIDQyLCA5NywgNTAs
IDQ5LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTgsIDQ5LCA0OSwg
NjEsIDQ1LCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ5LCA0OCwgNDMsIDk3LCA0OSwgNTAsIDQyLCA5
NywgNTAsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTgsIDUw
LCA0OSwgNjEsIDk3LCA1MCwgNDksIDQyLCA5NywgNDksIDQ4LCA0NSwgOTcsIDQ5LCA0OSwgNDIs
IDk3LCA1MCwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAs
IDEwMSwgMTE2LCA2MSwgOTcsIDQ4LCA0OCwgNDIsIDk4LCA0OCwgNDksIDQzLCA5NywgNDgsIDQ5
LCA0MiwgOTgsIDQ5LCA0OSwgNDMsIDk3LCA0OCwgNTAsIDQyLCA5OCwgNTAsIDQ5LCA1OSwgMTMs
IDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA5LCA5NywgMTE2LCA1MSwg
NDAsIDk4LCA0OCwgNDksIDQ0LCA0MCwgNDUsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDgsIDQ5LCA0
MywgOTcsIDQ4LCA1MCwgNDIsIDk3LCA1MCwgNDksIDQxLCA0NCwgNDAsIDk3LCA0OSwgNTAsIDQy
LCA5NywgNDgsIDQ5LCA0NSwgOTcsIDQ4LCA1MCwgNDIsIDk3LCA0OSwgNDksIDQxLCA0NCwgMTMs
IDEwLCA5OCwgNDksIDQ5LCA0NCwgNDAsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDgsIDQ4LCA0NSwg
OTcsIDQ4LCA1MCwgNDIsIDk3LCA1MCwgNDgsIDQxLCA0NCwgNDAsIDQ1LCA5NywgNDksIDUwLCA0
MiwgOTcsIDQ4LCA0OCwgNDMsIDk3LCA0OCwgNTAsIDQyLCA5NywgNDksIDQ4LCA0MSwgNDQsIDEz
LCAxMCwgOTgsIDUwLCA0OSwgNDQsIDQwLCA0NSwgOTcsIDUwLCA0OSwgNDIsIDk3LCA0OCwgNDgs
IDQzLCA5NywgNDgsIDQ5LCA0MiwgOTcsIDUwLCA0OCwgNDEsIDQ0LCA0MCwgOTcsIDQ5LCA0OSwg
NDIsIDk3LCA0OCwgNDgsIDQ1LCA5NywgNDgsIDQ5LCA0MiwgOTcsIDQ5LCA0OCwgNDEsIDQxLCA0
NywgMTAwLCAxMDEsIDExNiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTYsIDExMSwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDgzLCAxMTIsIDk3
LCA5OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwgMTExLCAx
MTQsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTEyLCAxMTEsIDExOSwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAxMTgs
IDEwMSwgOTksIDUxLCA0MCwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDY5LCAxMTAsIDk5
LCAxMTEsIDEwMCwgMTAxLCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDEx
NCwgMTExLCAxMjAsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTYsIDExMSwgNzEsIDk3LCAxMDksIDEwOSwgOTcsIDgzLCAxMTIsIDk3LCA5
OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAz
MiwgMTEyLCAxMTEsIDExOSwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAxMTgsIDEw
MSwgOTksIDUxLCA0MCwgNzEsIDk3LCAxMDksIDEwOSwgOTcsIDY5LCAxMTAsIDk5LCAxMTEsIDEw
MCwgMTAxLCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAx
MjAsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCAxMTUsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDQwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDk3LCAxMDgsIDExNywg
MTAxLCA0MiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTIsIDExMSwgMTE5LCA1MywgNDAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA0MSwgMzIsIDEy
MywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCAxMTMsIDYxLCAxMTgs
IDk3LCAxMDgsIDExNywgMTAxLCA0MiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNTksIDEzLCAx
MCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNSwgMTEzLCA0MiwgMTE1LCAx
MTMsIDQyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMywgMTAxLCAxMTYsIDc2LCAxMTcsIDEwOSwg
MTA1LCAxMTAsIDk3LCAxMTAsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTks
IDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAx
MTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDQwLCAxMDAsIDEx
MSwgMTE2LCA0MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDc2LCAxMTcsIDEwOSwgMTA1
LCAxMTAsIDk3LCAxMTAsIDk5LCAxMDEsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA2NSwg
MTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDQxLCA0NCwgNDgsIDQ2LCA0NCwgNDksIDQ2LCA0MSwg
NTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDMs
IDEwMSwgMTE2LCA4MiwgOTcsIDExMCwgMTAwLCA0MCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEx
NSwgMTAxLCAxMDEsIDEwMCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3
LCAxMTQsIDExMCwgMzIsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgNDAsIDExNSwgMTA1LCAxMTAs
IDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0NiwgMTIwLCAxMjEs
IDMyLCA0NCwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDQ5LCA1MCwgNDYsIDU3LCA1NiwgNTcsIDU2
LCA0NCwgNTUsIDU2LCA0NiwgNTAsIDUxLCA1MSwgNDEsIDQxLCA0MSwgNDIsIDUyLCA1MSwgNTUs
IDUzLCA1NiwgNDYsIDUzLCA1MiwgNTMsIDUxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTE2LCAxMDQsIDEwMSwgMTE0
LCA0MCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDQsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3LCAxMTQsIDEwNSwgOTcsIDExMCwgOTksIDEw
MSwgNjUsIDEwOSwgMTExLCAxMTcsIDExMCwgMTE2LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCA5NywgMTEwLCAxMDAsIDYxLCAxMDMsIDEwMSwg
MTE2LCA4MiwgOTcsIDExMCwgMTAwLCA0MCwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0MSwgNTksIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMTYsIDEwNCwgMTAx
LCAxMTQsIDYxLCAxMDksIDEwNSwgMTIwLCA0MCwgNDUsIDExOCwgOTcsIDExNCwgMTA1LCA5Nywg
MTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEwLCAxMTYsIDQ3LCA1MCwgNTMsIDUz
LCA0NiwgNDgsIDQ0LCAxMTgsIDk3LCAxMTQsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjUsIDEw
OSwgMTExLCAxMTcsIDExMCwgMTE2LCA0NywgNTAsIDUzLCA1MywgNDYsIDQ4LCA0NCwgMTE0LCA5
NywgMTEwLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTAwLCAxMDUsIDExNiwgMTA0LCAxMDEsIDExNCwgNTksIDEzLCAxMCwgMTI1LCAxMywg
MTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTE0LCAxMDMsIDk4LCAxMDAsIDc3LCA5NywgMTIwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEs
IDYxLCA1MCwgNTMsIDUzLCA0NiwgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMy
LCAxMTYsIDExMSwgODIsIDcxLCA2NiwgNjgsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTks
IDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDEwOSwgOTcsIDEyMCwgODIsIDcxLCA2NiwgNjEsIDEwOSwgOTcsIDEyMCwg
NjksIDExMiwgMTE1LCA0MCwgMTA5LCA5NywgMTIwLCA0MCwgOTksIDExMSwgMTA4LCAxMTEsIDEx
NCwgNDYsIDExNCwgNDQsIDEwOSwgOTcsIDEyMCwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDQ2LCAxMDMsIDQ0LCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgOTgsIDQxLCA0MSwgNDEs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA2OCwgNjEsIDEwOSwgOTcs
IDEyMCwgNDAsIDExNCwgMTAzLCA5OCwgMTAwLCA3NywgOTcsIDEyMCwgODIsIDk3LCAxMTAsIDEw
MywgMTAxLCA0NywgMTA5LCA5NywgMTIwLCA4MiwgNzEsIDY2LCA0NCwgNDksIDQ2LCA0MSwgNTks
IDEzLCAxMCwgNjgsIDYxLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDQwLCAxMDIsIDEwOCwgMTEx
LCAxMTEsIDExNCwgNDAsIDY4LCA0MSwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQsIDQ4LCA0
NiwgNDQsIDQ5LCA0NiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQs
IDEwMywgOTgsIDYxLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4LCA0
MiwgNjgsIDU5LCAxMywgMTAsIDExNCwgMTAzLCA5OCwgNjEsIDExNiwgMTExLCA3MSwgOTcsIDEw
OSwgMTA5LCA5NywgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTQsIDEwMywgOTgsIDQxLCA1
OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5
LCA1MiwgNDAsIDExNCwgMTAzLCA5OCwgNDQsIDY4LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDExNCwgMTExLCAxMDksIDgyLCA3MSwgNjYs
IDY4LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExNCwgMTAzLCA5OCwgMTAwLCA0MSwgMzIs
IDEyMywgMTMsIDEwLCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDExNCwgMTAzLCA5OCwgNjEsIDEx
NiwgMTExLCA3NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgODMsIDExMiwgOTcsIDk5LCAxMDEs
IDQwLCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDExNCwgMTAzLCA5OCwgNDEsIDU5LCAxMywgMTAs
IDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwgNDYs
IDExNCwgMTAzLCA5OCwgNDcsIDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgOTcsIDU5LCAxMywgMTAs
IDEyNSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2
OSwgNjcsIDczLCA4MCwgODIsIDc5LCA2NywgNjUsIDc2LCA5NSwgODAsIDczLCA1MCwgMzIsIDQ4
LCA0NiwgNDksIDUzLCA1NywgNDksIDUzLCA1MiwgNTcsIDUyLCAxMywgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA2NywgNzMsIDgwLCA4MiwgNzksIDY3
LCA2NSwgNzYsIDk1LCA4MCwgNzMsIDMyLCA0OCwgNDYsIDUxLCA0OSwgNTYsIDUxLCA0OCwgNTcs
IDU2LCA1NiwgNTQsIDQ5LCA1NiwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAs
IDEwMSwgMzIsIDc3LCA3MywgNzgsIDczLCA3NywgODUsIDc3LCA4NiwgNjUsIDgyLCA3MywgNjUs
IDc4LCA2NywgNjksIDMyLCA0OCwgNDYsIDQ4LCA0OCwgNDgsIDUzLCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNiwgODIs
IDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA4NCwgMTExLCA2NSwgMTE4
LCAxMDEsIDExNCwgOTcsIDEwMywgMTAxLCA4MywgMTA4LCAxMTEsIDExMiwgMTAxLCA0MCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEw
MSwgMTE1LCAxMTUsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcs
IDExNCwgMTEwLCAzMiwgMTE1LCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCA0MCwgMTE0LCAxMTEs
IDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDQzLCA3NywgNzMsIDc4LCA3
MywgNzcsIDg1LCA3NywgODYsIDY1LCA4MiwgNzMsIDY1LCA3OCwgNjcsIDY5LCA1OSwgMTMsIDEw
LCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMiwgMTE0LCAxMDEs
IDExNSwgMTEwLCAxMDEsIDEwOCwgNzEsIDExNCwgOTcsIDEyMiwgMTA1LCAxMTAsIDEwMywgODIs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
OTcsIDExMCwgOTksIDEwMSwgNDgsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwg
OTksIDEwMSwgNTcsIDQ4LCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAx
LCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEs
IDQ4LCA0MiwgNTAsIDUzLCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAx
MTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAx
MTAsIDk5LCAxMDEsIDU3LCA0OCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTAsIDMyLCAxMDMsIDEwMSwgMTE2LCA2NSwgNjUsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQs
IDExMCwgMTAxLCAxMTUsIDExNSwgNzAsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwgMTE1LCA0MCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODYsIDEw
MSwgOTksIDExNiwgMTExLCAxMTQsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYs
IDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgNDgsIDQ2LCA0MSwgNTks
IDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCA5NywgMTEyLCAxMTIs
IDEwOCwgMTIxLCA3MywgMTA5LCA5NywgMTAzLCAxMDEsIDgwLCAxMTQsIDExMSwgOTksIDEwMSwg
MTE1LCAxMTUsIDEwNSwgMTEwLCAxMDMsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE0LCAx
MDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDEx
NSwgMTE3LCAxMDgsIDExNiwgNDYsIDExNCwgMTAzLCA5OCwgNjEsIDExNiwgMTExLCA3MSwgOTcs
IDEwOSwgMTA5LCA5NywgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTQsIDEwMSwgMTE1LCAx
MTcsIDEwOCwgMTE2LCA0NiwgMTE0LCAxMDMsIDk4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEs
IDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDExNCwgMTAzLCA5OCwgNjEsIDExNSwgOTcsIDExNiwg
MTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYs
IDQ2LCAxMTQsIDEwMywgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDEx
NCwgMTEwLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNTksIDEzLCAxMCwgMTI1
LCAxMywgMTAsIDExNSwgMTE2LCAxMTQsIDExNywgOTksIDExNiwgMzIsIDExMiwgMTE0LCAxMDEs
IDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTEx
LCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1
LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEs
IDEwMCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAx
MDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAs
IDExNywgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDc2LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgNzIsIDU5LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDU5
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwg
NzYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDU5LCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDU5LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzIs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDExMSwgMTE3LCAx
MDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAs
IDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDcz
LCAxMTAsIDEwMiwgMTExLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDgw
LCAxMTEsIDEwNSwgMTEwLCAxMTYsIDY1LCAxMTAsIDEwMCwgODMsIDExMiwgMTExLCAxMTYsIDgw
LCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDEx
MCwgMTAyLCAxMTEsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDY4LCA5NywgMTE2LCA5NywgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA4NiwgNDQs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3OCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTEyLCAxMTQs
IDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAy
LCAxMTEsIDMyLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5
LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNjEsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2
OCwgOTcsIDExNiwgOTcsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NSwgMTE4LCA4MCwgMTExLCAxMTUs
IDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwg
MTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUs
IDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEwMCwg
NjEsIDEwMCwgMTExLCAxMTYsIDQwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0Niwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDQs
IDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEs
IDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1
LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDExNSwgMTEzLCAxMTQsIDExNiwgNDAs
IDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcs
IDExNCwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwg
MTE2LCA0NiwgNzYsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAx
MDEsIDQwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTA4LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDEsIDU5LCAxMywgMTAsIDEx
NCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3MiwgNjEsIDExMCwgMTExLCAxMTQsIDEw
OSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDg2LCA0MywgMTE0LCAxMDEsIDExNSwgMTE3
LCAxMDgsIDExNiwgNDYsIDc2LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAx
MDgsIDExNiwgNDYsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNjEsIDExNSwgOTcsIDExNiwgMTE3
LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCA4NiwgNDQsIDExNCwg
MTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3MiwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA4NSwg
MTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA2MSwgMTAwLCAxMTEsIDExNiwg
NDAsIDc4LCA0NCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc2LCA0MSwgNTks
IDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwg
MTE2LCA3NiwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNjksIDEx
MiwgMTE1LCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDEx
MSwgMTE2LCA3NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNDEs
IDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwg
MTE1LCAxMTcsIDEwOCwgMTE2LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTEyLCAxMTQsIDEw
MSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAx
MTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE0LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDk3LCAxMDgsIDgwLCAxMTQsIDEwMSwgNzYsIDEw
NSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDQwLCAx
MTgsIDEwMSwgOTksIDUyLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCA5NywgMTE2
LCA5NywgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA4NiwgNDQsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCA3OCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAz
LCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCAxMTQsIDEw
MSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEw
OCwgMTE2LCA0NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5
NywgMTEwLCA5OSwgMTAxLCA2MSwgMTA4LCAxMDEsIDExMCwgMTAzLCAxMTYsIDEwNCwgNDAsIDQ1
LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYsIDk3LCA0NiwgMTIwLCAxMjEs
IDEyMiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3
NiwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDQ1
LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYsIDk3LCA0NiwgMTIwLCAxMjEs
IDEyMiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3
MiwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDg2
LCA0MywgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc2LCA0MSwgNTksIDEzLCAx
MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDg2LCAxMDAsIDExMSwgMTE2LCA3
MiwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEwMCwgMTEx
LCAxMTYsIDQwLCA4NiwgNDQsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3Miwg
NDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgs
IDEwMCwgMTExLCAxMTYsIDc2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwg
MTAwLCA2MSwgMTAwLCAxMTEsIDExNiwgNDAsIDc4LCA0NCwgMTE0LCAxMDEsIDExNSwgMTE3LCAx
MDgsIDExNiwgNDYsIDc2LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgs
IDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAx
MTQsIDk3LCAxMTYsIDEwMSwgNjksIDExMiwgMTE1LCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAx
MDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgODUsIDExMCwgOTksIDEwOCwgOTcs
IDEwOSwgMTEyLCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA1OSwgMTMsIDEwLCAx
MjUsIDEzLCAxMCwgMTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAx
MTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAx
MTYsIDEwMSwgNzIsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUs
IDk5LCA4MCwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMs
IDczLCAxMTAsIDEwMiwgMTExLCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEwOCwgMTA1LCAx
MDMsIDEwNCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
ODYsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgNzgsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEx
MiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAx
MTAsIDEwMiwgMTExLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNTksIDEzLCAx
MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3
NiwgNjEsIDEwMCwgMTExLCAxMTYsIDQwLCA3OCwgNDQsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2
LCA2OCwgOTcsIDExNiwgOTcsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0MSwgNDIsIDQ4LCA0NiwgNTMs
IDQzLCA0OCwgNDYsIDUzLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2
LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwg
OTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUsIDQwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwg
MTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEs
IDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgODUsIDExMCwg
OTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNjEsIDExNCwgMTAxLCAxMTUsIDExNywg
MTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDU5LCAxMywgMTAsIDExNCwgMTAx
LCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA1
OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAx
MTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwg
OTksIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAx
MDIsIDEwMiwgOTUsIDgzLCAxMTYsIDk3LCAxMTAsIDEwMCwgOTcsIDExNCwgMTAwLCA0MCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAyLCAxMDIs
IDExNSwgMTAxLCAxMTYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCA5Nywg
MTEwLCAxMDMsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDEx
NywgMTE0LCAxMTAsIDMyLCAxMDksIDk3LCAxMjAsIDQwLCA0OCwgNDYsIDQ0LCA0OSwgNDYsIDQ4
LCA0NSwgMTA4LCAxMDEsIDExMCwgMTAzLCAxMTYsIDEwNCwgNDAsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQxLCA0NywgMTE0LCA5NywgMTEw
LCAxMDMsIDEwMSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDEx
NSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcs
IDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA5NSwgODAsIDEwNCwgMTIxLCAxMTUsIDEwNSwgOTks
IDk3LCAxMDgsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgMTEzLCAx
MTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDQ5LCA0NiwgNDgsIDQ3LCAxMDksIDk3LCAxMjAsIDY5
LCAxMTIsIDExNSwgNDAsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDEx
NiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgNDEs
IDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTks
IDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEw
LCA5OSwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEs
IDEwMiwgMTAyLCA5NSwgNzEsIDc2LCA4NCwgNzAsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEw
LCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0NCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDEwNSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwMSwgODMs
IDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgODIsIDk3LCAxMTAsIDEwMywgMTAxLCA0MSwg
MTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1
LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzAs
IDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNjEsIDQ5LCA0NiwgNDgsIDQ3LCAxMDksIDk3
LCAxMjAsIDY5LCAxMTIsIDExNSwgNDAsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1
LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEs
IDEwMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDIsIDk3
LCA5OSwgMTE2LCAxMTEsIDExNCwgNjEsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1
LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEs
IDEwMCwgNDIsIDEwNSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwMSwgODMsIDExMywgMTE3
LCA5NywgMTE0LCAxMDEsIDEwMCwgODIsIDk3LCAxMTAsIDEwMywgMTAxLCA1OSwgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDExNiwgMTE2LCAxMDEsIDExMCwgMTE3LCA5
NywgMTE2LCAxMDUsIDExMSwgMTEwLCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDEx
NiwgMTAxLCA0MCwgNDksIDQ2LCA0OCwgNDUsIDEwMiwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCA0
MiwgMTAyLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDQxLCA1OSwgMTMsIDEwLCA5NywgMTE2LCAx
MTYsIDEwMSwgMTEwLCAxMTcsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQyLCA2MSwgOTcsIDEx
NiwgMTE2LCAxMDEsIDExMCwgMTE3LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEw
LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDQyLCA2MSwgOTcsIDExNiwg
MTE2LCAxMDEsIDExMCwgMTE3LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYs
IDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3MCwgOTcsIDEwOCwgMTA4LCAx
MTEsIDEwMiwgMTAyLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTUs
IDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3LCAx
MDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEw
NSwgMTAzLCAxMDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0NCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAx
MTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEw
MCwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDk3LCAxMTAsIDEwMywgMTAx
LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwNSwgMTEwLCAxMTgsIDEwMSwgMTE0
LCAxMTUsIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgODIsIDk3LCAxMTAs
IDEwMywgMTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAx
MTQsIDExMCwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAx
MTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3
LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDgwLCAxMDQsIDEyMSwgMTE1LCAxMDUsIDk5
LCA5NywgMTA4LCA0MCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2
LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0MSwg
NTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwg
MTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDk3LCAxMDgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5Nywg
MTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDk1LCA4MywgMTE2LCA5NywgMTEwLCAxMDAsIDk3LCAx
MTQsIDEwMCwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTAxLCAxMTAsIDExNiwgMTAx
LCAxMTQsIDg3LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDExNSwg
NzIsIDk3LCAxMDgsIDEwMiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNDQsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMDEsIDEyMCwgMTEyLCAxMTEsIDExMCwgMTAxLCAxMTAsIDExNiwg
NDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDIs
IDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNjEsIDQ4LCA0NiwgNDgsIDU5LCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMTUsIDY1LCAxMTAsIDEwMywg
MTA4LCAxMDEsIDYxLCAxMDksIDk3LCAxMjAsIDY5LCAxMTIsIDExNSwgNDAsIDEwMCwgMTExLCAx
MTYsIDQwLCA0NSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTAxLCAx
MTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEwNSwgMTAyLCAzMiwg
NDAsIDk5LCAxMTEsIDExNSwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNjIsIDYxLCA5OSwgMTEx
LCAxMTUsIDcyLCA5NywgMTA4LCAxMDIsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQxLCAxMywg
MTAsIDEyMywgMTMsIDEwLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNjEsIDEw
OSwgOTcsIDEyMCwgNDAsIDQ4LCA0NiwgNDQsIDExMiwgMTExLCAxMTksIDQwLCA5OSwgMTExLCAx
MTUsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQ0LCAxMDEsIDEyMCwgMTEyLCAxMTEsIDExMCwg
MTAxLCAxMTAsIDExNiwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAy
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5
LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgOTcsIDEwOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3
LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDgwLCAxMDQsIDEyMSwgMTE1LCAxMDUsIDk5
LCA5NywgMTA4LCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwg
MTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDg0LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAx
MDEsIDExNCwgODcsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTE1
LCA3MiwgOTcsIDEwOCwgMTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA0MSwgMTMsIDEwLCAx
MjMsIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMDcsIDc3LCAxMDUsIDExMCwgMTE3LCAxMTUsIDc2LCAxMTEsIDEwMywgNTAs
IDY3LCAxMTEsIDExMCwgMTAxLCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA3MywgMTEwLCAxMTYs
IDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDgyLCA5NywgMTE2LCAxMDUsIDExMSwgNjEs
IDU0LCA0NiwgNTQsIDUyLCA1MSwgNTYsIDUzLCA1NCwgNDksIDU2LCA1NywgNTUsIDU1LCA1OSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTEwLCA5OSwgMTAx
LCAxMTAsIDExNiwgMTE0LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA3NSwgOTcsIDExMiwgMTEy
LCA5NywgNjEsIDEwNywgNzcsIDEwNSwgMTEwLCAxMTcsIDExNSwgNzYsIDExMSwgMTAzLCA1MCwg
NjcsIDExMSwgMTEwLCAxMDEsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDczLCAxMTAsIDExNiwg
MTAxLCAxMTAsIDExNSwgMTA1LCAxMTYsIDEyMSwgODIsIDk3LCAxMTYsIDEwNSwgMTExLCA0Nywg
NDAsIDQ5LCA0NiwgNDgsIDQ1LCA5OSwgMTExLCAxMTUsIDcyLCA5NywgMTA4LCAxMDIsIDY1LCAx
MTAsIDEwMywgMTA4LCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA4MywgMTEyLCAxMTQsIDEwMSwgOTcsIDEwMCwgODMsIDcxLCA2MSwgMTE4LCAx
MDEsIDk5LCA1MiwgNDAsIDQ1LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQyLCA5OSwgMTExLCAxMTAsIDk5LCAxMDEs
IDExMCwgMTE2LCAxMTQsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc1LCA5NywgMTEyLCAxMTIs
IDk3LCA0NCwgNDUsIDk5LCAxMTEsIDExMCwgOTksIDEwMSwgMTEwLCAxMTYsIDExNCwgOTcsIDEx
NiwgMTA1LCAxMTEsIDExMCwgNzUsIDk3LCAxMTIsIDExMiwgOTcsIDQxLCA1OSwgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAx
MDIsIDYxLCAxMDEsIDEyMCwgMTEyLCA1MCwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCAxMTgsIDEw
MSwgOTksIDUyLCA0MCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTAxLCAxMTAsIDExNiwgMTAx
LCAxMTQsIDg3LCA0NCwgNDksIDQ2LCA0OCwgNDEsIDQ0LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCAxMTIsIDEx
NCwgMTAxLCA5NywgMTAwLCA4MywgNzEsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDEx
NiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA1
OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAx
MTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgOTcsIDEwOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3LCAx
MDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDcxLCA3NiwgODQsIDcwLCA0MCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEw
NSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQ0LCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY1LCAxMTAsIDEw
MywgMTA4LCAxMDEsIDgzLCA5OSwgOTcsIDEwOCwgMTAxLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAx
LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDEwMCwgNjEsIDEwMCwgMTExLCAxMTYsIDQw
LCA0NSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA0NCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTAxLCAxMTAsIDEx
NiwgMTAxLCAxMTQsIDg3LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA2MSwgMTE1LCA5NywgMTE2LCAx
MTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgOTksIDEwMCwgNDIsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA4MywgOTksIDk3LCAxMDgsIDEwMSwgNDMs
IDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA3OSwgMTAy
LCAxMDIsIDExNSwgMTAxLCAxMTYsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDk3LCAxMDgsIDEwOCwg
MTExLCAxMDIsIDEwMiwgNDIsIDYxLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwg
NTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwMiwgOTcsIDEw
OCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwg
MTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgOTcsIDEwOCwgNzYsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNDAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAw
LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1
LCAxMDMsIDEwNCwgMTE2LCA2NywgMTAxLCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0NCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDExNSwgNzIsIDk3LCAxMDgsIDEwMiwg
NjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MDEsIDEyMCwgMTEyLCAxMTEsIDExMCwgMTAxLCAxMTAsIDExNiwgNDQsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjUsIDExMCwgMTAzLCAxMDgs
IDEwMSwgODMsIDk5LCA5NywgMTA4LCAxMDEsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDc5LCAx
MDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAx
LCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEw
MSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDk3LCAxMDgsIDc2
LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDk1
LCA4MCwgMTA0LCAxMjEsIDExNSwgMTA1LCA5OSwgOTcsIDEwOCwgNDAsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQs
IDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQs
IDk5LCAxMTEsIDExNSwgNzIsIDk3LCAxMDgsIDEwMiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwg
NDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAs
IDEwMSwgMzIsIDcwLCA4MiwgNjksIDgzLCA3OCwgNjksIDc2LCA5NSwgNzcsIDY1LCA4OCwgNzMs
IDc3LCA4NSwgNzcsIDk1LCA3OSwgNzgsIDk1LCA4MiwgNzksIDg1LCA3MSwgNzIsIDMyLCA0OCwg
NDYsIDUwLCA1MywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAzLCAxMDEsIDExNiwg
NjksIDExMCwgMTAxLCAxMTQsIDEwMywgMTIxLCA2NywgMTExLCAxMTAsIDExNSwgMTAxLCAxMTQs
IDExOCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzAsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwg
NDAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE1
LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0
LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgsIDQ0LCA5OSwgMTExLCAxMTAs
IDExNSwgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwg
MTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNDEs
IDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDQ5LCA0
NiwgNDgsIDQzLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAs
IDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA0OCwgNDIs
IDQwLCA0OSwgNDYsIDQ4LCA0NywgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAx
MDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA0NiwgMTIxLCA0NSwgNDksIDQ2
LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTAzLCAxMDEsIDExNiwgNjYsIDgyLCA2OCwgNzAsIDc2LCAxMTEsIDExMSwgMTA3LCAxMTcsIDEx
MiwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgODYs
IDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTEyLCAxMDEsIDExNCwgOTksIDEwMSwg
MTEyLCAxMTYsIDExNywgOTcsIDEwOCwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEs
IDExNSwgMTE1LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgODUs
IDg2LCA2MSwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDQs
IDExMiwgMTAxLCAxMTQsIDk5LCAxMDEsIDExMiwgMTE2LCAxMTcsIDk3LCAxMDgsIDgyLCAxMTEs
IDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTIsIDMyLCA5OCwgMTE0LCAxMDAsIDEwMiwgNzYsIDExMSwgMTExLCAxMDcsIDEx
NywgMTEyLCA2MSwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA0MCwgMTAxLCAx
MTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQs
IDEwMCwgMTAyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA0NCwgODUsIDg2LCA0
MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk4LCAxMTQs
IDEwMCwgMTAyLCA3NiwgMTExLCAxMTEsIDEwNywgMTE3LCAxMTIsIDQ2LCAxMTQsIDEwMywgOTgs
IDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAzLCAxMDEs
IDExNiwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwg
NzAsIDExNCwgMTExLCAxMDksIDY2LCA4MiwgNjgsIDcwLCA3NiwgMTExLCAxMTEsIDEwNywgMTE3
LCAxMTIsIDQwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAx
MDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDQ4LCA0NCwgOTksIDEx
MSwgMTEwLCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEsIDExMCwgMTE4
LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAx
MDIsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDEwOSwgMTA1LCAx
MjAsIDQwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAs
IDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDQ2LCAxMjAsIDEyMCwgMTIwLCA0NCwgMTAxLCAxMTAs
IDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEw
MCwgMTAyLCA0NiwgMTIxLCAxMjEsIDEyMSwgNDQsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEw
OCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAx
MTAsIDExNiwgODIsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwg
MTAxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMywg
MTAxLCAxMTYsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDcwLCAxMTQsIDExMSwgMTA5LCA2NSwgMTEwLCA5NywgMTA4LCAxMjEsIDExNiwgMTA1LCA5
OSwgOTcsIDEwOCwgNjYsIDgyLCA2OCwgNzAsIDc2LCAxMTEsIDExMSwgMTA3LCAxMTcsIDExMiwg
OTUsIDc0LCAxMTEsIDExMCwgMTAxLCAxMTUsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgODYsIDEwMCwgMTExLCAxMTYsIDc4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDQsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcs
IDExMCwgOTksIDEwMSwgNTcsIDQ4LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEx
NSwgMTA5LCAxMTEsIDExMSwgMTE2LCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDEzLCAx
MCwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTksIDEwMSwgMTA1
LCAxMDMsIDEwNCwgMTE2LCA2MSwgMTA5LCAxMDUsIDEyMCwgNDAsIDcwLCA4MiwgNjksIDgzLCA3
OCwgNjksIDc2LCA5NSwgNzcsIDY1LCA4OCwgNzMsIDc3LCA4NSwgNzcsIDk1LCA3OSwgNzgsIDk1
LCA4MiwgNzksIDg1LCA3MSwgNzIsIDQ0LCA0OSwgNDYsIDQ4LCA0NCwgMTE1LCAxMDksIDExMSwg
MTExLCAxMTYsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAx
MDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDMsIDExOSwgMTAxLCAxMDUsIDEwMywgMTA0LCAx
MTYsIDQyLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDU3LCA0OCwgNDUsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA0OCwgNDEsIDQyLCAxMTIsIDExMSwgMTE5LCA1MywgNDAsIDExNSwgOTcs
IDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDQ5LCA0NiwgNDgsIDQ1LCA4NiwgMTAw
LCAxMTEsIDExNiwgNzgsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMDIsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDgzLCA5OSwg
MTA0LCAxMDgsIDEwNSwgOTksIDEwNywgNzEsIDcxLCA4OCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4
LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0MywgNDAsIDExNCwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDQ1LCAxMTQsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQxLCA0MiwgMTEy
LCAxMTEsIDExOSwgNTMsIDQwLCA0OSwgNDYsIDQ4LCA0NSwgODYsIDEwMCwgMTExLCAxMTYsIDcy
LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMDIsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDgzLCA5OSwgMTA0LCAxMDgsIDEw
NSwgOTksIDEwNywgNzEsIDcxLCA4OCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA4
NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0
LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0NCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0MywgNDAsIDExNCwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDQ1LCAxMTQsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQxLCA0MiwgMTEy
LCAxMTEsIDExOSwgNTMsIDQwLCA0OSwgNDYsIDQ4LCA0NSwgODYsIDEwMCwgMTExLCAxMTYsIDcy
LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDY4LCAxMDUsIDExNSwgMTE2LCAxMTQsIDEw
NSwgOTgsIDExNywgMTE2LCAxMDUsIDExMSwgMTEwLCA3MCwgMTE3LCAxMTAsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDk1LCA4NCwgMTE0LCAxMTEsIDExOSwgOTgsIDExNCwgMTA1LCAxMDAsIDEw
MywgMTAxLCA4MiwgMTAxLCAxMDUsIDExNiwgMTIyLCA3MSwgNzEsIDg4LCA0MCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA3MiwgNDQsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCA5NywgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA0MSwgMTMsIDEwLCAx
MjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA1MCwgNjEsIDExNSwg
MTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgNDAsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDQx
LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCA2MSwgNzgsIDEw
MCwgMTExLCAxMTYsIDcyLCA0MiwgNzgsIDEwMCwgMTExLCAxMTYsIDcyLCA0MiwgNDAsIDk3LCA1
MCwgNDUsIDQ5LCA0NiwgNDgsIDQxLCA0MywgNDksIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTE0LCAx
MDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk3LCA1MCwgNDcsIDQwLCA4MCwgNzMsIDQyLCAx
MDAsIDQyLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDExNSwgMTA5LCAxMDUsIDExNiwgMTA0LCA4NiwgMTA1LCAxMTUsIDEwNSwg
OTgsIDEwNSwgMTA4LCAxMDUsIDExNiwgMTIxLCA5NSwgNzEsIDcxLCA4OCwgNjcsIDExMSwgMTE0
LCAxMTQsIDEwMSwgMTA4LCA5NywgMTE2LCAxMDEsIDEwMCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgNTAsIDYxLCA5NywgMTA4LCAxMTIsIDEwNCwg
OTcsIDcxLCA0MiwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDcxLCA3MSwgODgsIDg2LCA2MSwgNzgsIDEwMCwgMTExLCAx
MTYsIDc2LCA0MiwgMTE1LCAxMTMsIDExNCwgMTE2LCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDg2
LCA0MiwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDUsIDk3LCA1MCwgNDIsIDc4LCAxMDAs
IDExMSwgMTE2LCA4NiwgNDEsIDQzLCA5NywgNTAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgNzEsIDcxLCA4OCwgNzYsIDYxLCA3OCwgMTAwLCAxMTEsIDExNiwg
ODYsIDQyLCAxMTUsIDExMywgMTE0LCAxMTYsIDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQy
LCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0NSwgOTcsIDUwLCA0MiwgNzgsIDEwMCwgMTEx
LCAxMTYsIDc2LCA0MSwgNDMsIDk3LCA1MCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYs
IDExNywgMTE0LCAxMTAsIDMyLCA0OCwgNDYsIDUzLCA0NywgNDAsIDcxLCA3MSwgODgsIDg2LCA0
MywgNzEsIDcxLCA4OCwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNjYs
IDgyLCA2OCwgNzAsIDk1LCA2NiwgMTE3LCAxMTQsIDEwOCwgMTAxLCAxMjEsIDQwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0NCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDQsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQ0LCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDEx
NSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwg
MTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAx
LCAxMDgsIDc4LCA4NiwgNjEsIDExMiwgMTExLCAxMTksIDUzLCA0MCwgMTE1LCA5NywgMTE2LCAx
MTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUsIDQwLCA0OSwgNDYsIDQ4LCA0NSwg
NzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAxMTQs
IDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA3OCwgNzYsIDYxLCAxMTIsIDExMSwgMTE5LCA1Mywg
NDAsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNjksIDExMiwgMTE1LCA0
MCwgNDksIDQ2LCA0OCwgNDUsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDEsIDQxLCA1OSwgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcs
IDExNSwgMTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNTcsIDQ4LCA2MSwg
NDgsIDQ2LCA1MywgNDMsIDUwLCA0NiwgNDgsIDQyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQy
LCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQyLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEw
LCAxMDEsIDExNSwgMTE1LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTAyLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCAzMiwgNjEsIDEzLCAxMCwgNDAsIDQ5
LCA0NiwgNDgsIDQzLCA0MCwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3MCwg
MTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNTcsIDQ4LCA0NSwgNDksIDQ2LCA0OCwgNDEs
IDQyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAxMTQsIDEwMSwgMTE1
LCAxMTAsIDEwMSwgMTA4LCA3OCwgNzYsIDQxLCAzMiwgNDIsIDEzLCAxMCwgNDAsIDQ5LCA0Niwg
NDgsIDQzLCA0MCwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3MCwgMTE0LCAx
MDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNTcsIDQ4LCA0NSwgNDksIDQ2LCA0OCwgNDEsIDQyLCAx
MDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAxMTQsIDEwMSwgMTE1LCAxMTAs
IDEwMSwgMTA4LCA3OCwgODYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDEx
NCwgMTEwLCAzMiwgMTAyLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA0NywgODAsIDcz
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3OSwgNjUsIDg0LCA4MiwgNjksIDcwLCA3
NiwgNjksIDY3LCA4NCwgNjUsIDc4LCA2NywgNjksIDU3LCA0OCwgMzIsIDQ5LCA0NiwgNDgsIDEz
LCAxMCwgMTE1LCAxMTYsIDExNCwgMTE3LCA5OSwgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAxMywgMTAsIDEyMywgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwg
MTAxLCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCA5NywgMTAwLCAxMDYsIDExNywgMTE1LCAxMTYsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQs
IDExMCwgMTAxLCAxMTUsIDExNSwgNzAsIDExNCwgMTExLCAxMDksIDc2LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDgwLCAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1LCA0
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAx
MTAsIDEwMSwgMTE1LCAxMTUsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDExNywgMTE1LCA0NCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAx
MTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA4MiwgMTExLCAxMTcs
IDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDYxLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgODIsIDk3LCAxMDAsIDEwNSwgMTE3LCAxMTUsIDQ3LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTYsIDExMSwgMTE2LCA5NywgMTA4LCA4MiwgMTExLCAx
MTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywg
MTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgODIsIDExMSwg
MTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MywgMTE0LCAxMTEsIDExNywgMTAz
LCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYs
IDExNywgMTE0LCAxMTAsIDMyLCAxMTYsIDExMSwgMTE2LCA5NywgMTA4LCA4MiwgMTExLCAxMTcs
IDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDcy
LCAxMDEsIDEwOSwgMTA1LCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgNjgsIDEw
NSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwg
MTEwLCAxMDMsIDQwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUs
IDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDEwNSwgMTEwLCAxMDIsIDExMSwgNDQs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDExMSwg
MTA4LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDMsIDExNCwgMTExLCAx
MTcsIDExMCwgMTAwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMzIsIDEyMywgMTMsIDEw
LCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA5LCAxMDUsIDEyMCwgNDAsIDEw
MywgMTE0LCAxMTEsIDExNywgMTEwLCAxMDAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAx
MDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDEwNSwg
MTEwLCAxMDIsIDExMSwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDEsIDU5LCAxMywgMTAs
IDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDEx
NywgMTE2LCAxMDEsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3NiwgMTA1LCAx
MDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA0MCwgMTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwg
MTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCAxMDUs
IDExMCwgMTAyLCAxMTEsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAx
MDEsIDg0LCAxMDEsIDExNCwgMTA5LCA2MSwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwg
MTAxLCA2NiwgODIsIDY4LCA3MCwgOTUsIDY2LCAxMTcsIDExNCwgMTA4LCAxMDEsIDEyMSwgNDAs
IDEwNSwgMTEwLCAxMDIsIDExMSwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDQsIDEwNSwg
MTEwLCAxMDIsIDExMSwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDQsIDEwNSwgMTEwLCAx
MDIsIDExMSwgNDYsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDQsIDEwNSwgMTEwLCAxMDIsIDEx
MSwgNDYsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCA1
OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAwLCAxMDUsIDEw
MiwgMTAyLCAxMTcsIDExNSwgMTAxLCA4NCwgMTAxLCAxMTQsIDEwOSwgNDIsIDEwNSwgMTEwLCAx
MDIsIDExMSwgNDYsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAsIDExNywgOTcsIDExNiwgMTA1LCAx
MTEsIDExMCwgNDIsIDEwNSwgMTEwLCAxMDIsIDExMSwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3
NiwgNDIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1
OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDk5LCAxMTEsIDEw
OSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MCwgMTE0LCAxMTEsIDEwNiwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNjgsIDEwNSwg
MTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEw
LCAxMDMsIDg1LCA4NiwgNDAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTYsIDEwMSwgMTIwLCAx
MTYsIDExNywgMTE0LCAxMDEsIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTIzLCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTIsIDMyLCAxMTUsIDExNiwgMTE0LCAxMTMsIDYxLCAxMTYsIDEwMSwgMTIw
LCAxMTYsIDExNywgMTE0LCAxMDEsIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5
LCA1MiwgNDAsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcs
IDQ0LCA0OSwgNDYsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTE1LCAxMTYsIDExNCwgMTEzLCA0Nywg
NjEsIDExNSwgMTE2LCAxMTQsIDExMywgNDYsIDExOSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDEx
NiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNSwgMTE2LCAxMTQsIDExMywgNDYsIDEyMCwgMTIxLCA1
OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMywg
MTAxLCAxMTYsIDc2LCAxMTEsIDEwMCwgNzAsIDExNCwgMTExLCAxMDksIDY1LCAxMDgsIDExMiwg
MTA0LCA5NywgNzEsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExNywgOTgs
IDEwMSwgNzcsIDk3LCAxMTIsIDY4LCAxMDUsIDEwOSwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTEs
IDExMCwgODAsIDEwNSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcs
IDk5LCAxMDEsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDgzLCAxMDgsIDExMSwg
MTEyLCAxMDEsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMDksIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAx
LCA2NSwgMTE4LCAxMDEsIDExNCwgOTcsIDEwMywgMTAxLCA4MywgMTA4LCAxMTEsIDExMiwgMTAx
LCA4NCwgMTAxLCAxMjAsIDEwMSwgMTA4LCAxMTUsIDYxLCA5OSwgMTE3LCA5OCwgMTAxLCA3Nywg
OTcsIDExMiwgNjgsIDEwNSwgMTA5LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExMSwgMTEwLCA4MCwg
MTA1LCAxMjAsIDEwMSwgMTA4LCAxMTUsIDQyLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCAxMTUs
IDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTE4LCAxMDEsIDExNCwgOTcsIDEwMywg
MTAxLCA4MywgMTA4LCAxMTEsIDExMiwgMTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTA4LCAxMTEsIDEwMCwgNjEsIDEwOCwgMTExLCAxMDMsIDUwLCA0MCwgMTA5
LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUs
IDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwgMTExLCAxMTIsIDEwMSwgODQs
IDEwMSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDEwOCwgMTExLCAxMDAsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAzLCAxMDEsIDExNiwgNzYsIDEwNSwgMTEw
LCAxMDEsIDk3LCAxMTQsIDc2LCAxMTEsIDEwMCwgNzAsIDExNCwgMTExLCAxMDksIDgyLCAxMTEs
IDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA5OSwgMTE3LCA5OCwgMTAxLCA3NywgOTcsIDExMiwgNjgsIDEwNSwgMTA5LCAx
MDEsIDExMCwgMTE1LCAxMDUsIDExMSwgMTEwLCA4MCwgMTA1LCAxMjAsIDEwMSwgMTA4LCAxMTUs
IDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQs
IDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDEwOCwgMTExLCAxMDAsIDYxLCAxMDgsIDExMSwgMTAzLCA1MCwgNDAsIDk5
LCAxMTcsIDk4LCAxMDEsIDc3LCA5NywgMTEyLCA2OCwgMTA1LCAxMDksIDEwMSwgMTEwLCAxMTUs
IDEwNSwgMTExLCAxMTAsIDgwLCAxMDUsIDEyMCwgMTAxLCAxMDgsIDExNSwgNDEsIDQyLCAxMTQs
IDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA4LCAxMTEsIDEwMCwgNTksIDEzLCAxMCwg
MTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDEsIDExMCwgMTE4LCAx
MDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwg
OTcsIDExMCwgOTksIDEwMSwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDEx
MCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEs
IDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA0NCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgODUsIDEx
MCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNiwgMTAxLCAxMDksIDExMiwgNjEsIDc4LCAx
MDAsIDExMSwgMTE2LCA4NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEw
MCwgNDMsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwg
MTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAx
MTUsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDQwLCAxMTYsIDEwMSwgMTA5LCAxMTIsIDQxLCA0
NSwgNDksIDQ2LCA0OCwgNDMsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5
OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDQxLCA1OSwgMTMsIDEwLCAxMjUs
IDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwg
MTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA3MiwgMTExLCAxMTQsIDEwNSwgMTIy
LCAxMTEsIDExMCwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNDAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDQ0LCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwgMzIsIDEyMywgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
NDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNDQsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
NDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTYsIDEwMSwgMTA5
LCAxMTIsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCA0OSwg
NDYsIDQ4LCA0MywgNDksIDQ2LCA0OSwgNDIsIDEwMCwgMTExLCAxMTYsIDQwLCAxMTQsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDExMCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDEx
NCwgMTEwLCAzMiwgMTE1LCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCA0MCwgMTE2LCAxMDEsIDEw
OSwgMTEyLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTIsIDk3LCAxMTQsIDk3LCAxMDgsIDEwOCwgOTcsIDEyMCwgNjcsIDExMSwgMTE0LCAxMTQs
IDEwMSwgOTksIDExNiwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQwLCAzMiwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExOCwgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDgwLCAxMTEsIDEx
NSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTEsIDExNCwgMTA1LCAxMDMsIDg2LCAxMDEs
IDk5LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTcsIDk4LCAxMDEsIDgzLCAxMDUs
IDEyMiwgMTAxLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTcsIDk4LCAxMDEsIDgw
LCAxMTEsIDExNSwgMzIsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMDUsIDExMCwgMTE4LCA3OSwgMTE0LCAxMDUsIDEwMywgODYsIDEwMSwgOTksIDYxLCAxMTgs
IDEwMSwgOTksIDUxLCA0MCwgNDksIDQ2LCA0OCwgNDQsIDQ5LCA0NiwgNDgsIDQ0LCA0OSwgNDYs
IDQ4LCA0MSwgNDcsIDExMSwgMTE0LCAxMDUsIDEwMywgODYsIDEwMSwgOTksIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDQsIDk3LCAxMDgsIDEwMiwgODMsIDEwNSwgMTIyLCAx
MDEsIDYxLCA5OSwgMTE3LCA5OCwgMTAxLCA4MywgMTA1LCAxMjIsIDEwMSwgNDIsIDQ4LCA0Niwg
NTMsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDExMCwgMTE2LCAxMDEs
IDExNCwgMTE1LCAxMDEsIDk5LCA2NSwgMTE2LCA3NywgOTcsIDEyMCwgODAsIDEwOCwgOTcsIDEx
MCwgMTAxLCA2MSwgNDAsIDk5LCAxMTcsIDk4LCAxMDEsIDgwLCAxMTEsIDExNSwgNDMsIDEwNCwg
OTcsIDEwOCwgMTAyLCA4MywgMTA1LCAxMjIsIDEwMSwgNDUsIDExOCwgMTAxLCAxMTQsIDExNiwg
MTAxLCAxMjAsIDgwLCAxMTEsIDExNSwgNDEsIDQyLCAxMDUsIDExMCwgMTE4LCA3OSwgMTE0LCAx
MDUsIDEwMywgODYsIDEwMSwgOTksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MDUsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCA2NSwgMTE2LCA3NywgMTA1LCAx
MTAsIDgwLCAxMDgsIDk3LCAxMTAsIDEwMSwgNjEsIDQwLCA5OSwgMTE3LCA5OCwgMTAxLCA4MCwg
MTExLCAxMTUsIDQ1LCAxMDQsIDk3LCAxMDgsIDEwMiwgODMsIDEwNSwgMTIyLCAxMDEsIDQ1LCAx
MTgsIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA4MCwgMTExLCAxMTUsIDQxLCA0MiwgMTA1LCAx
MTAsIDExOCwgNzksIDExNCwgMTA1LCAxMDMsIDg2LCAxMDEsIDk5LCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTA4LCA5NywgMTE0LCAxMDMsIDEwMSwgMTE1LCAxMTYsIDczLCAx
MTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNjEsIDEwOSwgOTcsIDEyMCwgNDAsIDEw
NSwgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDY1LCAxMTYsIDc3LCA5NywgMTIw
LCA4MCwgMTA4LCA5NywgMTEwLCAxMDEsIDQ0LCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1
LCAxMDEsIDk5LCA2NSwgMTE2LCA3NywgMTA1LCAxMTAsIDgwLCAxMDgsIDk3LCAxMTAsIDEwMSwg
NDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTE1
LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMDksIDEwNSwgMTEwLCA0MCwgMTA5LCAxMDUs
IDExMCwgNDAsIDEwOCwgOTcsIDExNCwgMTAzLCAxMDEsIDExNSwgMTE2LCA3MywgMTEwLCAxMTYs
IDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDQ2LCAxMjAsIDQ0LCAxMDgsIDk3LCAxMTQsIDEwMywg
MTAxLCAxMTUsIDExNiwgNzMsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCA0Niwg
MTIxLCA0MSwgNDQsIDEwOCwgOTcsIDExNCwgMTAzLCAxMDEsIDExNSwgMTE2LCA3MywgMTEwLCAx
MTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDQ2LCAxMjIsIDQxLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwg
MTE2LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgODMsIDYxLCAx
MTgsIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA4MCwgMTExLCAxMTUsIDQzLCAxMTEsIDExNCwg
MTA1LCAxMDMsIDg2LCAxMDEsIDk5LCA0MiwgMTAwLCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5
OSwgMTAxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA1
LCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgMTE2LCA4MCwgMTExLCAxMTUsIDEw
NSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgODMsIDQ1LCA5OSwgMTE3LCA5OCwgMTAxLCA4MCwg
MTExLCAxMTUsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
OTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDcwLCAxMDUsIDEyMCwgMTAxLCAxMDAs
IDY5LCAxMTMsIDExNywgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgMTAzLCAxMTcs
IDEwOCwgOTcsIDExNCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEs
IDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMTQs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDExMSwgMTEwLCA2MSwgOTcsIDExNiwgOTcs
IDExMCwgNDAsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDYs
IDEyMiwgNDQsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDYs
IDEyMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDk3
LCAxMTYsIDYxLCA5NywgOTksIDExMSwgMTE1LCA0MCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIxLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MCwgMzIsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0
LCAxMDAsIDExNSwgNjEsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCAxMDgsIDExMSwgMTEwLCA0NCwg
MTA4LCA5NywgMTE2LCA0MSwgNDIsIDgyLCA2OSwgNjcsIDczLCA4MCwgODIsIDc5LCA2NywgNjUs
IDc2LCA5NSwgODAsIDczLCA1MCwgNDIsIDUwLCA0NiwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDYxLCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAx
LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ2LCAxMjAsIDQyLCA0OCwgNDYsIDUzLCA0
MywgNDgsIDQ2LCA1MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEx
NiwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAx
MDAsIDExNSwgNDYsIDEyMSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDEx
MCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTUsIDQ0LCAxMTYsIDQ0LCA0OCwgNDEsIDU5
LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5
LCAxMTIsIDExNywgMTE2LCAxMDEsIDc3LCAxMDUsIDExNCwgMTE0LCAxMTEsIDExNCwgMTAxLCAx
MDAsIDcwLCAxMDUsIDEyMCwgMTAxLCAxMDAsIDY5LCAxMTMsIDExNywgMTA1LCAxMTQsIDEwMSwg
OTksIDExNiwgOTcsIDExMCwgMTAzLCAxMTcsIDEwOCwgOTcsIDExNCwgNjcsIDExMSwgMTExLCAx
MTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEw
OCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAxMTEs
IDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgs
IDExMSwgMTEwLCA2MSwgOTcsIDExNiwgOTcsIDExMCwgNDAsIDEwMCwgMTA1LCAxMTQsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDYsIDEyMiwgNDQsIDEwMCwgMTA1LCAxMTQsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDYsIDEyMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDk3LCAxMTYsIDYxLCA5NywgOTksIDExMSwgMTE1LCA0
MCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIxLCA0
MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNSwgMTEyLCAxMDQsIDEwMSwg
MTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExOCwgMTAxLCA5OSwg
NTAsIDQwLCAxMDgsIDExMSwgMTEwLCA0NCwgMTA4LCA5NywgMTE2LCA0MSwgNDIsIDgyLCA2OSwg
NjcsIDczLCA4MCwgODIsIDc5LCA2NywgNjUsIDc2LCA5NSwgODAsIDczLCA1MCwgNDIsIDUwLCA0
NiwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDYxLCAx
MTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUs
IDQ2LCAxMjAsIDQyLCA0OCwgNDYsIDUzLCA0MywgNDgsIDQ2LCA1MywgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNiwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0
LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDYsIDEyMSwgNTksIDEzLCAxMCwg
MTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0
OSwgNDYsIDQ4LCA0NSwgMTE1LCA0NCwgMTE2LCA0NCwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMjUs
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDEx
NiwgMTAxLCA2OSwgMTEzLCAxMTcsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDEw
MywgMTE3LCAxMDgsIDk3LCAxMTQsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDEx
OCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1
LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEsIDEy
MSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTA5LCA5
NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgOTcsIDEwOSwgMTAxLCAxMTQsIDk3LCA4NCwg
MTExLCA4NiwgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDks
IDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAs
IDExMSwgMTE1LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDEwMSwgMTIxLCAxMDEsIDgwLCAxMTEs
IDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE0LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEy
MiwgMTAxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDQwLCA5OSwgOTcs
IDEwOSwgMTAxLCAxMTQsIDk3LCA4NCwgMTExLCA4NiwgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAs
IDQ0LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTQsIDQ0LCA0OCwgNDEs
IDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMTEsIDEx
MCwgNjEsIDk3LCAxMTYsIDk3LCAxMTAsIDQwLCAxMTQsIDQ2LCAxMjIsIDQ0LCAxMTQsIDQ2LCAx
MjAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCA5Nywg
MTE2LCA2MSwgOTcsIDk5LCAxMTEsIDExNSwgNDAsIDExNCwgNDYsIDEyMSwgNDEsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2
NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgMTA4
LCAxMTEsIDExMCwgNDQsIDEwOCwgOTcsIDExNiwgNDEsIDQyLCA4MiwgNjksIDY3LCA3MywgODAs
IDgyLCA3OSwgNjcsIDY1LCA3NiwgOTUsIDgwLCA3MywgNTAsIDQyLCA1MCwgNDYsIDQ4LCA1OSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCA2MSwgMTE1LCAxMTIsIDEw
NCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NiwgMTIwLCA0
MiwgNDgsIDQ2LCA1MywgNDMsIDQ4LCA0NiwgNTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMTYsIDYxLCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2Nywg
MTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ2LCAxMjEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAx
MTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE1LCA0NCwgMTE2
LCA0NCwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MywgMTEyLCAxMDQsIDEwMSwg
MTE0LCAxMDUsIDk5LCA5NywgMTA4LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAx
MTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDEx
NSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgs
IDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE4LCAx
MDUsIDEwMSwgMTE5LCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEy
MCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEw
NSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEw
OCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTgsIDEwNSwgMTAx
LCAxMTksIDQyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0MSwgNDEs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDc4
LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4
LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExOCwgMTA1LCAxMDEs
IDExOSwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwg
NzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCA0OCwgNDYsIDQ4LCA0MSwgNDEsIDQxLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCA2MSwgMTE0LCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwg
NDQsIDExOCwgMTA1LCAxMDEsIDExOSwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCA1
OSwgMTMsIDEwLCAxMTQsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExNCwgNDQsIDQ4LCA0MSwgNDEsIDU5LCAx
MywgMTAsIDExNCwgNDYsIDEyMiwgNjEsIDExNCwgNDYsIDEyMiwgNDUsIDQ5LCA0NiwgNDgsIDU5
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDksIDYxLCA1MCwgNDYsIDQ4
LCA0MiwgMTA4LCAxMDEsIDExMCwgMTAzLCAxMTYsIDEwNCwgNDAsIDExNCwgNDEsIDU5LCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCA0
MCwgMTE0LCA0NiwgMTIwLCA0NywgMTA5LCA0MywgNDgsIDQ2LCA1MywgNDQsIDQ5LCA0NiwgNDgs
IDQ1LCAxMTQsIDQ2LCAxMjEsIDQ3LCAxMDksIDQ1LCA0OCwgNDYsIDUzLCA0NCwgNDgsIDQxLCA1
OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEw
OSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MCwgMTA4LCA5NywgMTEwLCA5NywgMTE0LCA2NywgMTEx
LCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEs
IDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDEx
NiwgMTA1LCAxMTEsIDExMCwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAy
LCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1
LCAxMjAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4
LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDYxLCAxMTksIDExMSwgMTE0LCAxMDgsIDEw
MCwgODAsIDExMSwgMTE1LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDEwMSwgMTIxLCAxMDEsIDgw
LCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTAsIDExMSwg
MTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgNDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA0NCwg
MTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwg
NDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEw
MSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1Miwg
NDAsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDQsIDQ5LCA0MSwgNDEsIDU5LCAxMywg
MTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIs
IDExNywgMTE2LCAxMDEsIDY3LCAxMTcsIDk4LCAxMDUsIDk5LCA2NywgMTExLCAxMTEsIDExNCwg
MTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAx
MDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0
LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEs
IDExMCwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAx
MywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCAxMDUsIDEwMSwg
MTE5LCA2OCwgMTA1LCAxMTQsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwg
MTIyLCAxMDEsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0Niwg
MTIwLCAxMjEsIDEyMiwgNDUsIDEwMSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTks
IDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgNDQsIDExOSwgMTEx
LCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDU5LCAxMywg
MTAsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQw
LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3
LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgOTksIDExMSwg
MTExLCAxMTQsIDEwMCwgMTE1LCA0NCwgNDgsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNTks
IDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDks
IDExMiwgMTE3LCAxMTYsIDEwMSwgNjcsIDExNywgOTgsIDEwNSwgOTksIDc2LCAxMTEsIDk5LCA5
NywgMTA4LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUy
LCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDks
IDk3LCAxMDgsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMjEsIDEwMSwgODAsIDEx
MSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMy
LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3
LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEs
IDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCAxMDUsIDEyMiwgMTAx
LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgMTA1
LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4
LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDEx
NSwgNDYsIDEyMCwgMTIxLCAxMjIsIDQ1LCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEw
NSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExNCwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDQ0LCAx
MTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCA1
OSwgMTMsIDEwLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTIsIDk3LCAxMTQs
IDk3LCAxMDgsIDEwOCwgOTcsIDEyMCwgNjcsIDExMSwgMTE0LCAxMTQsIDEwMSwgOTksIDExNiwg
NzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwg
ODAsIDExMSwgMTE1LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDQsIDk5LCAxMTEsIDExMSwgMTE0LCAx
MDAsIDExNSwgNDQsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA4MywgMTA1LCAxMjIsIDEwMSwgNDQsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA0MSwgNTksIDEzLCAxMCwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE4LCAx
MDEsIDk5LCA1MSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIs
IDQwLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ0LCA0OCwgNDEsIDQxLCA1OSwgMTMs
IDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTksIDExMSwgMTExLCAxMTQs
IDEwMCwgMTE1LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MCwgMTE0LCAxMTEsIDEwNiwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQw
LCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEs
IDExNSwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDQ0LCAx
MDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTMsIDEwLCAxMjMs
IDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwg
NTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA0
MiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDEsIDQxLCA1OSwgMTMs
IDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEy
LCAxMTcsIDExNiwgMTAxLCA4MywgMTA3LCAxMjEsIDY2LCAxMTEsIDEyMCwgNjcsIDExMSwgMTEx
LCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMiwgMTExLCAxMTUs
IDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAx
MTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2
LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNCwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUs
IDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwg
MTA1LCAxMTEsIDExMCwgODcsIDQ0LCA0OCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAx
LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2NywgMTEx
LCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEs
IDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCAx
MywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTks
IDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDgzLCAxMDcsIDEyMSwgNjYsIDExMSwgMTIw
LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg1LCA4NiwgODcsIDQ0LCAxMTQsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAs
IDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDc3
LCA2OSwgNzgsIDg0LCA5NSwgNjgsIDY5LCA3MCwgNzMsIDc4LCA3MywgODQsIDczLCA3OSwgNzgs
IDgzLCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5
OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTExLCAx
MTcsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMDMsIDEwOCwgNzAsIDExNCwgOTcs
IDEwMywgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEwLCAxMTgsIDExMSwgMTA1LCAxMDAs
IDMyLCAxMDksIDk3LCAxMDUsIDExMCwgNDAsIDExOCwgMTExLCAxMDUsIDEwMCwgNDEsIDMyLCAx
MjMsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUs
IDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA5NSwg
NzcsIDY1LCA3MywgNzgsIDk1LCA2NiwgNjksIDcxLCA3MywgNzgsIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDg3LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAx
MDUsIDEyMiwgMTAxLCA0MCwgMTE4LCA2OSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NSwgMTE4LCA4MCwgMTExLCAx
MTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA2MSwgMTEwLCAx
MTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE4LCA3OCwgMTExLCAx
MTQsIDEwOSwgOTcsIDEwOCwgODcsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAz
MiwgMTE3LCAxMTgsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNjEsIDExOCwgMTAxLCA5
OSwgNTAsIDQwLCA0OCwgNDYsIDQ4LCA0NCwgNDgsIDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEx
MCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDYxLCAxMDMsIDEwOCwgOTUsIDcwLCAxMTQs
IDExMSwgMTEwLCAxMTYsIDcwLCA5NywgOTksIDEwNSwgMTEwLCAxMDMsIDMyLCA2MywgMzIsIDEx
MCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDMyLCA1OCwgMzIsIDQ1LCAxMTAsIDExMSwg
MTE0LCAxMDksIDk3LCAxMDgsIDg3LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAx
MTEsIDYxLCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA2NywgMTExLCAxMDgsIDEx
MSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA2MSwgMTE4LCA2NSwgMTA4LCA5OCwgMTAx
LCAxMDAsIDExMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDk3LCA1OSwgMTMsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwg
NzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA4NSwgODAsIDY4LCA2
NSwgODQsIDY5LCA5NSwgNjUsIDc2LCA2NiwgNjksIDY4LCA3OSwgMTMsIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3
MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA4NSwgODAsIDY4LCA2NSwgODQsIDY5
LCA5NSwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcx
LCA3NywgNjksIDc4LCA4NCwgOTUsIDY2LCA2OSwgNzAsIDc5LCA4MiwgNjksIDk1LCA3NiwgNzMs
IDcxLCA3MiwgODQsIDgzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5NywgMTA5LCA5
OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDEx
MSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAs
IDQ5LCA0NiwgNDQsIDQ5LCA0NiwgNDQsIDQ5LCA0NiwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQs
IDEwMiwgOTcsIDk5LCAxMDEsIDYxLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0Niwg
OTcsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTUsIDExNywgMTE0LCAxMDIs
IDk3LCA5OSwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwg
MTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDExOCwgODIsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDEwOSwgMTA1LCA5
OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjEsIDExNSwgOTcs
IDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEs
IDgzLCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDEx
NSwgMTE1LCA2MSwgNDksIDQ2LCA0NSwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywg
MTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAx
MTIsIDEwMSwgMTAwLCA2MSwgMTAwLCAxMTEsIDExNiwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwg
OTcsIDEwOCwgODcsIDQ0LCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDYxLCA5NywgOTgsIDExNSwgNjks
IDExMiwgMTE1LCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA4NSwgMTEwLCA5OSwgMTA4LCA5
NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDYxLCA5OSwgMTExLCAxMTAsIDEx
OCwgMTAxLCAxMTQsIDExNiwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwg
MTE1LCA4NCwgMTExLCA2NSwgMTE4LCAxMDEsIDExNCwgOTcsIDEwMywgMTAxLCA4MywgMTA4LCAx
MTEsIDExMiwgMTAxLCA0MCwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUs
IDExNSwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCA2NSwgNjUsIDgyLCAx
MTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNzAsIDk3LCA5OSwgMTE2LCAx
MTEsIDExNCwgMTE1LCA2MSwgMTAzLCAxMDEsIDExNiwgNjUsIDY1LCA4MiwgMTExLCAxMTcsIDEw
MywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDEx
NSwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDQ2LCAxMjAsIDEyMSwgMTIy
LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEwMSwgMTEwLCAxMTgsIDEw
NSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5
NywgMTEwLCA5OSwgMTAxLCA2MSwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDQ4LCA0NiwgNDQsIDQ4
LCA0NiwgNDQsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAx
MTAsIDExNiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDYx
LCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0
MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwg
NjEsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUs
IDQwLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA4NywgNDQsIDQ5LCA0NiwgNDgsIDQxLCA0NCwgMTEwLCAxMTEsIDExNCwg
MTA5LCA5NywgMTA4LCA4NywgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwg
MTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDg2LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDc2LCA3OSwgNjgsIDYxLCAxMDMsIDEwMSwgMTE2LCA3NiwgMTEx
LCAxMDAsIDcwLCAxMTQsIDExMSwgMTA5LCA2NSwgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA0MCwg
MTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3Nywg
MTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAx
MTAsIDEwMiwgMTExLCAxMTUsIDQ2LCAxMjAsIDQ0LCA5NywgMTA4LCAxMTIsIDEwNCwgOTcsIDcx
LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDc2LCA3OSwgNjgsIDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgNzYsIDc5LCA2OCwgNDIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCAxMTUs
IDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0Niwg
MTIxLCA0MywgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA3NywgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAx
MDEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDQ2LCAxMjIsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTEzLCAxMTcsIDEwMSwgMTE1LCAxMTYsIDEw
MSwgMTAwLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3
NiwgNzksIDY4LCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDc2LCA3OSwgNjgsIDU5LCAxMywgMTAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAx
MTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5
OSwgMTAxLCA2MSwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCA4MiwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgMTExLCAxMDAsIDQwLCAxMTQsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDk3LCAxMDksIDEx
MiwgMTA4LCAxMDEsIDExNCwgNDQsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ0LCAxMTQsIDEwMSwg
MTEzLCAxMTcsIDEwMSwgMTE1LCAxMTYsIDEwMSwgMTAwLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgNzksIDY4LCA0MSwgNTksIDEzLCAxMCwgMTAx
LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5
NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQ2LCAxMTQsIDEwMywgOTgsIDYxLCAxMDIs
IDExNCwgMTExLCAxMDksIDgyLCA3MSwgNjYsIDY4LCA0MCwgMTAxLCAxMTAsIDExOCwgMTA1LCAx
MTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAx
MTAsIDk5LCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTEx
LCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTks
IDEwMSwgNDYsIDExNCwgMTAzLCA5OCwgNDIsIDYxLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDQ2LCAx
MjAsIDU5LCAxMywgMTAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAx
MDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0NiwgMTE0
LCAxMDMsIDk4LCA0MiwgNjEsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA5OCwg
NTksIDEzLCAxMCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwg
MTEwLCAxMTYsIDczLCAxMTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0
MiwgNjEsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgMTA5LCA5NywgMTIw
LCA0MCwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDQ2LCAxMTQsIDQ0LCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDEwMywgNDEsIDQ0LCAxMTUsIDExNywgMTE0LCAxMDIs
IDk3LCA5OSwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwg
MTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDk4LCA0MSwgNTksIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAx
LCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDYxLCAxMDIsIDExNCwgMTAxLCAx
MTUsIDExMCwgMTAxLCAxMDgsIDcxLCAxMTQsIDk3LCAxMjIsIDEwNSwgMTEwLCAxMDMsIDgyLCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQwLCAxMTQsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDEsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3
LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAx
MTYsIDgyLCA0OCwgNjEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAxMDEs
IDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTEx
LCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEw
LCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNTcsIDQ4
LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ5LCA0NiwgNDgsIDQ0LCA0OSwgNDYsIDQ4LCA0
NCwgNDksIDQ2LCA0OCwgNDEsIDQyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
OTcsIDExMCwgOTksIDEwMSwgNTcsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYs
IDY2LCAxMTQsIDEwMCwgMTAyLCA2MSwgMTAzLCAxMDEsIDExNiwgNjYsIDgyLCA2OCwgNzAsIDc2
LCAxMTEsIDExMSwgMTA3LCAxMTcsIDExMiwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDQs
IDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMTAsIDEwMSwgMTE0LCAxMDMsIDEyMSwg
NjcsIDExMSwgMTEwLCAxMTUsIDEwMSwgMTE0LCAxMTgsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDYxLCAxMDMsIDEwMSwgMTE2LCA2OSwgMTEwLCAx
MDEsIDExNCwgMTAzLCAxMjEsIDY3LCAxMTEsIDExMCwgMTE1LCAxMDEsIDExNCwgMTE4LCA5Nywg
MTE2LCAxMDUsIDExMSwgMTEwLCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCA0MCwgMTE1LCAx
MTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAx
MTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgsIDQ0LCAxMDEsIDExMCwgMTE4LCAx
MDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIs
IDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDEwMiwgMTAy
LCAxMTcsIDExNSwgMTAxLCA2NiwgOTcsIDExNSwgMTAxLCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwg
NDAsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDEsIDU5LCAxMywgMTAsIDExMiwg
MTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAs
IDEwMiwgMTExLCAzMiwgMTEyLCAxMTQsIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDU5LCAxMywg
MTAsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIs
IDExMSwgMzIsIDEwNSwgMTEwLCAxMDIsIDExMSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDExNSwgMTA0LCA5NywgMTAwLCAxMTEsIDExOSwgNjEsIDQ5LCA0NiwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEw
OCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAx
MTAsIDExNiwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEw
MSwgNjEsIDEwMywgMTAxLCAxMTYsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDcwLCAxMTQsIDExMSwgMTA5LCA2NSwgMTEwLCA5NywgMTA4LCAxMjEs
IDExNiwgMTA1LCA5OSwgOTcsIDEwOCwgNjYsIDgyLCA2OCwgNzAsIDc2LCAxMTEsIDExMSwgMTA3
LCAxMTcsIDExMiwgOTUsIDc0LCAxMTEsIDExMCwgMTAxLCAxMTUsIDQwLCA3OCwgMTAwLCAxMTEs
IDExNiwgODYsIDQ0LCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAx
MTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA0OCwg
NDQsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAx
MDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDU3LCA0OCwgNDQsIDEx
NSwgMTEzLCAxMTQsIDExNiwgNDAsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDEx
NCwgMTAyLCA5NywgOTksIDEwMSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTUsIDExNywgMTE0LCAx
MDIsIDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNDYsIDExNCwgMTAz
LCA5OCwgNjEsIDQwLCA0OSwgNDYsIDQ1LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgOTcsIDExMCwgOTksIDEwMSwgNDEsIDQyLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwg
MTAxLCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDczLCAx
MTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTAxLCAxMTAsIDEx
OCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQsIDExNCwg
OTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEw
LCA5NywgMTA4LCA3MywgMTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwg
NDIsIDYxLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwgMTAx
LCAxMDAsIDExMSwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAs
IDk5LCAxMDEsIDYxLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAx
LCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDYsIDExNCwg
MTAzLCA5OCwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODIsIDk3LCAxMDAs
IDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDIsIDYxLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAx
MDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwg
MTEwLCAxMTYsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDEwNSwgMTEwLCA5Nywg
MTA4LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgOTksIDk3LCAxMDgs
IDEwMSwgMTAwLCA2MSwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODIsIDk3LCAxMDAsIDEwNSwg
OTcsIDExMCwgOTksIDEwMSwgNDIsIDExOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAx
MTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExNiwgMTIxLCA0Niwg
MTIyLCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4MiwgOTcsIDEwMCwgMTA1
LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgOTksIDk3LCAxMDgsIDEwMSwgMTAwLCA0MiwgNjEsIDEw
MSwgMTEwLCAxMDEsIDExNCwgMTAzLCAxMjEsIDY3LCAxMTEsIDExMCwgMTE1LCAxMDEsIDExNCwg
MTE4LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwg
NjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDYxLCAxMDAsIDEwNSwgMTAyLCAxMDIs
IDExNywgMTE1LCAxMDEsIDY2LCA5NywgMTE1LCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA1LCAx
MTAsIDk3LCAxMDgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA0MiwgNjEsIDEx
NSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTEx
LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2
OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNjEsIDEwOSwgOTcsIDEyMCwgNDAsIDEw
MiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA0
NCwgNDgsIDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIs
IDEwNSwgMTEwLCA5NywgMTA4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA2MSwg
MTE4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwg
MTE0LCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NSwgMTA5LCA5OCwgMTA1
LCAxMDEsIDExMCwgMTE2LCA0MiwgNjEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEs
IDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjksIDEwOSwg
MTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNjEsIDExOCwgNjksIDEwOSwgMTA1LCAxMTUs
IDExNSwgMTA1LCAxMTgsIDEwMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5
LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDcwLCAxMTEsIDExNCwgNjgs
IDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAx
LCA2MSwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAx
MTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDYxLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTMsIDEwLCAxMDIsIDEw
NSwgMTEwLCA5NywgMTA4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA0MiwgOTcs
IDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwg
MTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgMzIsIDQzLCAxMywgMTAsIDEw
MiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA0
MiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcs
IDExNSwgMTA1LCAxMTEsIDExMCwgNzAsIDExMSwgMTE0LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTks
IDExNiwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDQyLCAxMTgsIDc2LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDEx
NSwgMTA1LCAxMTYsIDEyMSwgNDYsIDEyMCwgMzIsIDQzLCAxMywgMTAsIDEwMiwgMTA1LCAxMTAs
IDk3LCAxMDgsIDczLCAxMTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0
MiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcs
IDExNSwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDIsIDExOCwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEsIDEx
MCwgMTE1LCAxMDUsIDExNiwgMTIxLCA0NiwgMTIyLCAzMiwgNDMsIDEzLCAxMCwgMTAyLCAxMDUs
IDExMCwgOTcsIDEwOCwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgODMsIDk5
LCA5NywgMTA4LCAxMDEsIDEwMCwgMzIsIDQzLCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAx
MDgsIDY5LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDQyLCAxMTgsIDc2LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAs
IDExNSwgMTA1LCAxMTYsIDEyMSwgNDYsIDEyMSwgNDQsIDEzLCAxMCwgOTcsIDEwOCwgMTEyLCAx
MDQsIDk3LCA0MSwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwg
NzgsIDg0LCA5NSwgNjYsIDY5LCA3MCwgNzksIDgyLCA2OSwgOTUsIDcwLCA3OSwgNzEsIDEzLCAx
MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDEw
OSwgOTcsIDEyMCwgNDAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDQ0LCA0OCwgNDYsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcs
IDEwOCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDk3LCAxMTIsIDExMiwgMTA4LCAxMjEs
IDczLCAxMDksIDk3LCAxMDMsIDEwMSwgODAsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwg
MTA1LCAxMTAsIDEwMywgNDAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTEx
LCAxMDgsIDExMSwgMTE0LCA0NiwgOTcsIDQyLCA2MSwgMTE4LCAxMDUsIDExNSwgMTA1LCA5OCwg
MTA1LCAxMDgsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUs
IDcxLCA3NywgNjksIDc4LCA4NCwgOTUsIDY2LCA2OSwgNzAsIDc5LCA4MiwgNjksIDk1LCA3MCwg
ODIsIDY1LCA3MSwgNjcsIDc5LCA3NiwgNzksIDgyLCAxMywgMTAsIDEwMywgMTA4LCA3MCwgMTE0
LCA5NywgMTAzLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgMTAyLCAxMDUsIDExMCwgOTcs
IDEwOCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTBdLm1h
cChjID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoYykpLmpvaW4oIiIpOwpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvd2Via2l0Lm9yZy9kZW1vcy93ZWJncHUvYmFieWxvbi9vbmVIZWxtZXRXZWJHUFVXU0xT
aGFkZXJzLmpzIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kZW1vcy93ZWJncHUvYmFieWxvbi9vbmVI
ZWxtZXRXZWJHUFVXU0xTaGFkZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhMDYzMzVlYTc2NmM1YzA5ZjVl
ZDIzNTcyZTRmNTU4OTc4MDBmMDAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy93ZWJraXQu
b3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9uL29uZUhlbG1ldFdlYkdQVVdTTFNoYWRlcnMuanMKQEAg
LTAsMCArMSwxNTY0IEBACitjb25zdCB2ZXJ0ZXhTaGFkZXJXU0wxID0gYAorc3RydWN0IE91dHB1
dCB7CisgICAgZmxvYXQzIHZQb3NpdGlvblcgOiBhdHRyaWJ1dGUoMCk7CisgICAgZmxvYXQzIHZO
b3JtYWxXIDogYXR0cmlidXRlKDEpOworICAgIGZsb2F0MiB2TWFpblVWMSA6IGF0dHJpYnV0ZSgy
KTsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKK30KKworc3RydWN0IFNjZW5l
IHsKKyAgICBmbG9hdDR4NCB2aWV3UHJvamVjdGlvbjsKKyAgICBmbG9hdDR4NCB2aWV3OworfQor
CitzdHJ1Y3QgQmluZEdyb3VwQSB7CisgICAgY29uc3RhbnQgU2NlbmVbXSBzY2VuZSA6IHJlZ2lz
dGVyKGIwLCBzcGFjZTApOworICAgIFRleHR1cmUyRDxmbG9hdDQ+IGVudmlyb25tZW50QnJkZlNh
bXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIodDEsIHNwYWNlMCk7CisgICAgc2FtcGxlciBlbnZpcm9u
bWVudEJyZGZTYW1wbGVyU2FtcGxlciA6IHJlZ2lzdGVyKHMyLCBzcGFjZTApOworfQorCitzdHJ1
Y3QgTWF0ZXJpYWwgeworICAgIGZsb2F0MiB2QWxiZWRvSW5mb3M7CisgICAgZmxvYXQ0IHZBbWJp
ZW50SW5mb3M7CisgICAgZmxvYXQyIHZPcGFjaXR5SW5mb3M7CisgICAgZmxvYXQyIHZFbWlzc2l2
ZUluZm9zOworICAgIGZsb2F0MiB2TGlnaHRtYXBJbmZvczsKKyAgICBmbG9hdDMgdlJlZmxlY3Rp
dml0eUluZm9zOworICAgIGZsb2F0MiB2TWljcm9TdXJmYWNlU2FtcGxlckluZm9zOworICAgIGZs
b2F0MiB2UmVmbGVjdGlvbkluZm9zOworICAgIGZsb2F0MyB2UmVmbGVjdGlvblBvc2l0aW9uOwor
ICAgIGZsb2F0MyB2UmVmbGVjdGlvblNpemU7CisgICAgZmxvYXQzIHZCdW1wSW5mb3M7CisgICAg
ZmxvYXQ0eDQgYWxiZWRvTWF0cml4OworICAgIGZsb2F0NHg0IGFtYmllbnRNYXRyaXg7CisgICAg
ZmxvYXQ0eDQgb3BhY2l0eU1hdHJpeDsKKyAgICBmbG9hdDR4NCBlbWlzc2l2ZU1hdHJpeDsKKyAg
ICBmbG9hdDR4NCBsaWdodG1hcE1hdHJpeDsKKyAgICBmbG9hdDR4NCByZWZsZWN0aXZpdHlNYXRy
aXg7CisgICAgZmxvYXQ0eDQgbWljcm9TdXJmYWNlU2FtcGxlck1hdHJpeDsKKyAgICBmbG9hdDR4
NCBidW1wTWF0cml4OworICAgIGZsb2F0MiB2VGFuZ2VudFNwYWNlUGFyYW1zOworICAgIGZsb2F0
NHg0IHJlZmxlY3Rpb25NYXRyaXg7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uQ29sb3I7CisgICAg
ZmxvYXQ0IHZBbGJlZG9Db2xvcjsKKyAgICBmbG9hdDQgdkxpZ2h0aW5nSW50ZW5zaXR5OworICAg
IGZsb2F0MyB2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zOworICAgIGZsb2F0IHBvaW50U2l6
ZTsKKyAgICBmbG9hdDQgdlJlZmxlY3Rpdml0eUNvbG9yOworICAgIGZsb2F0MyB2RW1pc3NpdmVD
b2xvcjsKKyAgICBmbG9hdDQgdkV5ZVBvc2l0aW9uOworICAgIGZsb2F0MyB2QW1iaWVudENvbG9y
OworICAgIGZsb2F0MiB2RGVidWdNb2RlOworICAgIGZsb2F0MiB2Q2xlYXJDb2F0UGFyYW1zOwor
ICAgIGZsb2F0NCB2Q2xlYXJDb2F0UmVmcmFjdGlvblBhcmFtczsKKyAgICBmbG9hdDIgdkNsZWFy
Q29hdEluZm9zOworICAgIGZsb2F0NHg0IGNsZWFyQ29hdE1hdHJpeDsKKyAgICBmbG9hdDIgdkNs
ZWFyQ29hdEJ1bXBJbmZvczsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdFRhbmdlbnRTcGFjZVBhcmFt
czsKKyAgICBmbG9hdDR4NCBjbGVhckNvYXRCdW1wTWF0cml4OworICAgIGZsb2F0NCB2Q2xlYXJD
b2F0VGludFBhcmFtczsKKyAgICBmbG9hdCBjbGVhckNvYXRDb2xvckF0RGlzdGFuY2U7CisgICAg
ZmxvYXQyIHZDbGVhckNvYXRUaW50SW5mb3M7CisgICAgZmxvYXQ0eDQgY2xlYXJDb2F0VGludE1h
dHJpeDsKKyAgICBmbG9hdDMgdkFuaXNvdHJvcHk7CisgICAgZmxvYXQyIHZBbmlzb3Ryb3B5SW5m
b3M7CisgICAgZmxvYXQ0eDQgYW5pc290cm9weU1hdHJpeDsKKyAgICBmbG9hdDQgdlNoZWVuQ29s
b3I7CisgICAgZmxvYXQyIHZTaGVlbkluZm9zOworICAgIGZsb2F0NHg0IHNoZWVuTWF0cml4Owor
ICAgIGZsb2F0MyB2UmVmcmFjdGlvbk1pY3Jvc3VyZmFjZUluZm9zOworICAgIGZsb2F0NCB2UmVm
cmFjdGlvbkluZm9zOworICAgIGZsb2F0NHg0IHJlZnJhY3Rpb25NYXRyaXg7CisgICAgZmxvYXQy
IHZUaGlja25lc3NJbmZvczsKKyAgICBmbG9hdDR4NCB0aGlja25lc3NNYXRyaXg7CisgICAgZmxv
YXQyIHZUaGlja25lc3NQYXJhbTsKKyAgICBmbG9hdDMgdkRpZmZ1c2lvbkRpc3RhbmNlOworICAg
IGZsb2F0NCB2VGludENvbG9yOworICAgIGZsb2F0MyB2U3ViU3VyZmFjZUludGVuc2l0eTsKKyAg
ICBmbG9hdDMgdlNwaGVyaWNhbEwwMDsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxXzE7CisgICAg
ZmxvYXQzIHZTcGhlcmljYWxMMTA7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMTE7CisgICAgZmxv
YXQzIHZTcGhlcmljYWxMMl8yOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDJfMTsKKyAgICBmbG9h
dDMgdlNwaGVyaWNhbEwyMDsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyMTsKKyAgICBmbG9hdDMg
dlNwaGVyaWNhbEwyMjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFg7CisgICAgZmxvYXQzIHZTcGhl
cmljYWxZOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFhY
X1paOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWVlfWlo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxa
WjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFhZOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWVo7Cisg
ICAgZmxvYXQzIHZTcGhlcmljYWxaWDsKK30KKworc3RydWN0IE1lc2ggeworICAgIGZsb2F0NHg0
IHdvcmxkOworICAgIGZsb2F0IHZpc2liaWxpdHk7Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBCIHsK
KyAgICBjb25zdGFudCBNYXRlcmlhbFtdIG1hdGVyaWFsIDogcmVnaXN0ZXIoYjAsIHNwYWNlMSk7
CisgICAgY29uc3RhbnQgTWVzaFtdIG1lc2ggOiByZWdpc3RlcihiMSwgc3BhY2UxKTsKK30KKwor
c3RydWN0IEJpbmRHcm91cEMgeworICAgIFRleHR1cmUyRDxmbG9hdDQ+IHJlZmxlY3Rpb25TYW1w
bGVyVGV4dHVyZSA6IHJlZ2lzdGVyKHQwLCBzcGFjZTIpOworICAgIHNhbXBsZXIgcmVmbGVjdGlv
blNhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczEsIHNwYWNlMik7CisgICAgVGV4dHVyZTJEPGZs
b2F0ND4gYWxiZWRvU2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0Miwgc3BhY2UyKTsKKyAgICBz
YW1wbGVyIGFsYmVkb1NhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczMsIHNwYWNlMik7CisgICAg
VGV4dHVyZTJEPGZsb2F0ND4gcmVmbGVjdGl2aXR5U2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0
NCwgc3BhY2UyKTsKKyAgICBzYW1wbGVyIHJlZmxlY3Rpdml0eVNhbXBsZXJTYW1wbGVyIDogcmVn
aXN0ZXIoczUsIHNwYWNlMik7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4gYW1iaWVudFNhbXBsZXJU
ZXh0dXJlIDogcmVnaXN0ZXIodDYsIHNwYWNlMik7CisgICAgc2FtcGxlciBhbWJpZW50U2FtcGxl
clNhbXBsZXIgOiByZWdpc3RlcihzNywgc3BhY2UyKTsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiBl
bWlzc2l2ZVNhbXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIodDgsIHNwYWNlMik7CisgICAgc2FtcGxl
ciBlbWlzc2l2ZVNhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczksIHNwYWNlMik7CisgICAgVGV4
dHVyZTJEPGZsb2F0ND4gYnVtcFNhbXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIodDEwLCBzcGFjZTIp
OworICAgIHNhbXBsZXIgYnVtcFNhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczExLCBzcGFjZTIp
OworfQorCitmbG9hdDN4MyB0cmFuc3Bvc2VNYXQzKGZsb2F0M3gzIGluTWF0cml4KSB7CisgICAg
ZmxvYXQzIGkwID0gaW5NYXRyaXhbMF07CisgICAgZmxvYXQzIGkxID0gaW5NYXRyaXhbMV07Cisg
ICAgZmxvYXQzIGkyID0gaW5NYXRyaXhbMl07CisgICAgZmxvYXQzeDMgb3V0TWF0cml4ID0gZmxv
YXQzeDMoCisgICAgICAgIGZsb2F0MyhpMC54LCBpMS54LCBpMi54KSwKKyAgICAgICAgZmxvYXQz
KGkwLnksIGkxLnksIGkyLnkpLAorICAgICAgICBmbG9hdDMoaTAueiwgaTEueiwgaTIueikKKyAg
ICApOworICAgIHJldHVybiBvdXRNYXRyaXg7Cit9CisKK2Zsb2F0M3gzIGludmVyc2VNYXQzKGZs
b2F0M3gzIGluTWF0cml4KSB7CisgICAgZmxvYXQgYTAwID0gaW5NYXRyaXhbMF1bMF0sIGEwMSA9
IGluTWF0cml4WzBdWzFdLCBhMDIgPSBpbk1hdHJpeFswXVsyXTsKKyAgICBmbG9hdCBhMTAgPSBp
bk1hdHJpeFsxXVswXSwgYTExID0gaW5NYXRyaXhbMV1bMV0sIGExMiA9IGluTWF0cml4WzFdWzJd
OworICAgIGZsb2F0IGEyMCA9IGluTWF0cml4WzJdWzBdLCBhMjEgPSBpbk1hdHJpeFsyXVsxXSwg
YTIyID0gaW5NYXRyaXhbMl1bMl07CisgICAgZmxvYXQgYjAxID0gYTIyICogYTExIC0gYTEyICog
YTIxOworICAgIGZsb2F0IGIxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7CisgICAgZmxvYXQg
YjIxID0gYTIxICogYTEwIC0gYTExICogYTIwOworICAgIGZsb2F0IGRldCA9IGEwMCAqIGIwMSAr
IGEwMSAqIGIxMSArIGEwMiAqIGIyMTsKKyAgICByZXR1cm4gZmxvYXQzeDMoYjAxLCAtYTIyICog
YTAxICsgYTAyICogYTIxLCBhMTIgKiBhMDEgLSBhMDIgKiBhMTEsCisgICAgICAgIGIxMSwgYTIy
ICogYTAwIC0gYTAyICogYTIwLCAtYTEyICogYTAwICsgYTAyICogYTEwLAorICAgICAgICBiMjEs
IC1hMjEgKiBhMDAgKyBhMDEgKiBhMjAsIGExMSAqIGEwMCAtIGEwMSAqIGExMCkgLyBkZXQ7Cit9
CisKK2Zsb2F0MyB0b0xpbmVhclNwYWNlKGZsb2F0MyBjb2xvcikgeworICAgIHJldHVybiBwb3co
Y29sb3IsIGZsb2F0MygyLjIsIDIuMiwgMi4yKSk7Cit9CisKK2Zsb2F0MyB0b0dhbW1hU3BhY2Uo
ZmxvYXQzIGNvbG9yKSB7CisgICAgcmV0dXJuIHBvdyhjb2xvciwgZmxvYXQzKDEuMCAvIDIuMiwg
MS4wIC8gMi4yLCAxLjAgLyAyLjIpKTsKK30KKworZmxvYXQgc3F1YXJlKGZsb2F0IHZhbHVlKSB7
CisgICAgcmV0dXJuIHZhbHVlICogdmFsdWU7Cit9CisKK2Zsb2F0IHBvdzUoZmxvYXQgdmFsdWUp
IHsKKyAgICBmbG9hdCBzcSA9IHZhbHVlICogdmFsdWU7CisgICAgcmV0dXJuIHNxICogc3EgKiB2
YWx1ZTsKK30KKworZmxvYXQgZ2V0THVtaW5hbmNlKGZsb2F0MyBjb2xvcikgeworICAgIHJldHVy
biBjbGFtcChkb3QoY29sb3IsIGZsb2F0MygwLjIxMjYsIDAuNzE1MiwgMC4wNzIyKSksIDAuLCAx
Lik7Cit9CisKK2Zsb2F0IGdldFJhbmQoZmxvYXQyIHNlZWQpIHsKKyAgICByZXR1cm4gZnJhYyhz
aW4oZG90KHNlZWQueHksIGZsb2F0MigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTsK
K30KKworZmxvYXQgZGl0aGVyKGZsb2F0MiBzZWVkLCBmbG9hdCB2YXJpYW5jZUFtb3VudCkgewor
ICAgIGZsb2F0IHJhbmQgPSBnZXRSYW5kKHNlZWQpOworICAgIGZsb2F0IGRpdGhlciA9IGxlcnAo
LXZhcmlhbmNlQW1vdW50IC8gMjU1LjAsIHZhcmlhbmNlQW1vdW50IC8gMjU1LjAsIHJhbmQpOwor
ICAgIHJldHVybiBkaXRoZXI7Cit9CisKK2Zsb2F0NCB0b1JHQkQoZmxvYXQzIGNvbG9yKSB7Cisg
ICAgZmxvYXQgbWF4UkdCID0gbWF4KG1heChjb2xvci54LCBtYXgoY29sb3IueSwgY29sb3Iueikp
LCAwLjAwMDAwMDEpOworICAgIGZsb2F0IEQgPSBtYXgoMjU1LjAgLyBtYXhSR0IsIDEuKTsKKyAg
ICBEID0gY2xhbXAoZmxvb3IoRCkgLyAyNTUuMCwgMC4sIDEuKTsKKyAgICBmbG9hdDMgcmdiID0g
Y29sb3IgKiBEOworICAgIHJnYiA9IHRvR2FtbWFTcGFjZShyZ2IpOworICAgIHJldHVybiBmbG9h
dDQocmdiLCBEKTsKK30KKworZmxvYXQzIGZyb21SR0JEKGZsb2F0NCByZ2JkKSB7CisgICAgcmdi
ZC54eXogPSB0b0xpbmVhclNwYWNlKHJnYmQueHl6KTsKKyAgICByZXR1cm4gcmdiZC54eXogLyBy
Z2JkLnc7Cit9CisKK3ZlcnRleCBPdXRwdXQgbWFpbihmbG9hdDMgcG9zaXRpb24gOiBhdHRyaWJ1
dGUoMCksIGZsb2F0MyBub3JtYWwgOiBhdHRyaWJ1dGUoMSksIGZsb2F0MiB1diA6IGF0dHJpYnV0
ZSgyKSwgQmluZEdyb3VwQSBiaW5kR3JvdXBBLCBCaW5kR3JvdXBCIGJpbmRHcm91cEIsIEJpbmRH
cm91cEMgYmluZEdyb3VwQykgeworICAgIE91dHB1dCBvdXRwdXQ7CisgICAgZmxvYXQzIHBvc2l0
aW9uVXBkYXRlZCA9IHBvc2l0aW9uOworICAgIGZsb2F0MyBub3JtYWxVcGRhdGVkID0gbm9ybWFs
OworICAgIGZsb2F0MiB1dlVwZGF0ZWQgPSB1djsKKyAgICBmbG9hdDR4NCBmaW5hbFdvcmxkID0g
YmluZEdyb3VwQi5tZXNoWzBdLndvcmxkOworICAgIG91dHB1dC5wb3NpdGlvbiA9IG11bChtdWwo
YmluZEdyb3VwQS5zY2VuZVswXS52aWV3UHJvamVjdGlvbiwgZmluYWxXb3JsZCksIGZsb2F0NChw
b3NpdGlvblVwZGF0ZWQsIDEuMCkpOworICAgIGZsb2F0NCB3b3JsZFBvcyA9IG11bChmaW5hbFdv
cmxkLCBmbG9hdDQocG9zaXRpb25VcGRhdGVkLCAxLjApKTsKKyAgICBvdXRwdXQudlBvc2l0aW9u
VyA9IHdvcmxkUG9zLnh5ejsKKyAgICBmbG9hdDN4MyBub3JtYWxXb3JsZDsKKyAgICBub3JtYWxX
b3JsZFswXSA9IGZpbmFsV29ybGRbMF0ueHl6OworICAgIG5vcm1hbFdvcmxkWzFdID0gZmluYWxX
b3JsZFsxXS54eXo7CisgICAgbm9ybWFsV29ybGRbMl0gPSBmaW5hbFdvcmxkWzJdLnh5ejsKKyAg
ICBvdXRwdXQudk5vcm1hbFcgPSBub3JtYWxpemUobXVsKG5vcm1hbFdvcmxkLCBub3JtYWxVcGRh
dGVkKSk7CisgICAgZmxvYXQyIHV2MiA9IGZsb2F0MigwLiwgMC4pOworICAgIG91dHB1dC52TWFp
blVWMSA9IHV2VXBkYXRlZDsKKyAgICByZXR1cm4gb3V0cHV0OworfQorYDsKKworY29uc3QgZnJh
Z21lbnRTaGFkZXJXU0wxID0gYAorc3RydWN0IFNjZW5lIHsKKyAgICBmbG9hdDR4NCB2aWV3UHJv
amVjdGlvbjsKKyAgICBmbG9hdDR4NCB2aWV3OworfQorCitzdHJ1Y3QgQmluZEdyb3VwQSB7Cisg
ICAgY29uc3RhbnQgU2NlbmVbXSBzY2VuZSA6IHJlZ2lzdGVyKGIwLCBzcGFjZTApOworICAgIFRl
eHR1cmUyRDxmbG9hdDQ+IGVudmlyb25tZW50QnJkZlNhbXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIo
dDEsIHNwYWNlMCk7CisgICAgc2FtcGxlciBlbnZpcm9ubWVudEJyZGZTYW1wbGVyU2FtcGxlciA6
IHJlZ2lzdGVyKHMyLCBzcGFjZTApOworfQorCitzdHJ1Y3QgTWF0ZXJpYWwgeworICAgIGZsb2F0
MiB2QWxiZWRvSW5mb3M7CisgICAgZmxvYXQ0IHZBbWJpZW50SW5mb3M7CisgICAgZmxvYXQyIHZP
cGFjaXR5SW5mb3M7CisgICAgZmxvYXQyIHZFbWlzc2l2ZUluZm9zOworICAgIGZsb2F0MiB2TGln
aHRtYXBJbmZvczsKKyAgICBmbG9hdDMgdlJlZmxlY3Rpdml0eUluZm9zOworICAgIGZsb2F0MiB2
TWljcm9TdXJmYWNlU2FtcGxlckluZm9zOworICAgIGZsb2F0MiB2UmVmbGVjdGlvbkluZm9zOwor
ICAgIGZsb2F0MyB2UmVmbGVjdGlvblBvc2l0aW9uOworICAgIGZsb2F0MyB2UmVmbGVjdGlvblNp
emU7CisgICAgZmxvYXQzIHZCdW1wSW5mb3M7CisgICAgZmxvYXQ0eDQgYWxiZWRvTWF0cml4Owor
ICAgIGZsb2F0NHg0IGFtYmllbnRNYXRyaXg7CisgICAgZmxvYXQ0eDQgb3BhY2l0eU1hdHJpeDsK
KyAgICBmbG9hdDR4NCBlbWlzc2l2ZU1hdHJpeDsKKyAgICBmbG9hdDR4NCBsaWdodG1hcE1hdHJp
eDsKKyAgICBmbG9hdDR4NCByZWZsZWN0aXZpdHlNYXRyaXg7CisgICAgZmxvYXQ0eDQgbWljcm9T
dXJmYWNlU2FtcGxlck1hdHJpeDsKKyAgICBmbG9hdDR4NCBidW1wTWF0cml4OworICAgIGZsb2F0
MiB2VGFuZ2VudFNwYWNlUGFyYW1zOworICAgIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXg7Cisg
ICAgZmxvYXQzIHZSZWZsZWN0aW9uQ29sb3I7CisgICAgZmxvYXQ0IHZBbGJlZG9Db2xvcjsKKyAg
ICBmbG9hdDQgdkxpZ2h0aW5nSW50ZW5zaXR5OworICAgIGZsb2F0MyB2UmVmbGVjdGlvbk1pY3Jv
c3VyZmFjZUluZm9zOworICAgIGZsb2F0IHBvaW50U2l6ZTsKKyAgICBmbG9hdDQgdlJlZmxlY3Rp
dml0eUNvbG9yOworICAgIGZsb2F0MyB2RW1pc3NpdmVDb2xvcjsKKyAgICBmbG9hdDQgdkV5ZVBv
c2l0aW9uOworICAgIGZsb2F0MyB2QW1iaWVudENvbG9yOworICAgIGZsb2F0MiB2RGVidWdNb2Rl
OworICAgIGZsb2F0MiB2Q2xlYXJDb2F0UGFyYW1zOworICAgIGZsb2F0NCB2Q2xlYXJDb2F0UmVm
cmFjdGlvblBhcmFtczsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdEluZm9zOworICAgIGZsb2F0NHg0
IGNsZWFyQ29hdE1hdHJpeDsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdEJ1bXBJbmZvczsKKyAgICBm
bG9hdDIgdkNsZWFyQ29hdFRhbmdlbnRTcGFjZVBhcmFtczsKKyAgICBmbG9hdDR4NCBjbGVhckNv
YXRCdW1wTWF0cml4OworICAgIGZsb2F0NCB2Q2xlYXJDb2F0VGludFBhcmFtczsKKyAgICBmbG9h
dCBjbGVhckNvYXRDb2xvckF0RGlzdGFuY2U7CisgICAgZmxvYXQyIHZDbGVhckNvYXRUaW50SW5m
b3M7CisgICAgZmxvYXQ0eDQgY2xlYXJDb2F0VGludE1hdHJpeDsKKyAgICBmbG9hdDMgdkFuaXNv
dHJvcHk7CisgICAgZmxvYXQyIHZBbmlzb3Ryb3B5SW5mb3M7CisgICAgZmxvYXQ0eDQgYW5pc290
cm9weU1hdHJpeDsKKyAgICBmbG9hdDQgdlNoZWVuQ29sb3I7CisgICAgZmxvYXQyIHZTaGVlbklu
Zm9zOworICAgIGZsb2F0NHg0IHNoZWVuTWF0cml4OworICAgIGZsb2F0MyB2UmVmcmFjdGlvbk1p
Y3Jvc3VyZmFjZUluZm9zOworICAgIGZsb2F0NCB2UmVmcmFjdGlvbkluZm9zOworICAgIGZsb2F0
NHg0IHJlZnJhY3Rpb25NYXRyaXg7CisgICAgZmxvYXQyIHZUaGlja25lc3NJbmZvczsKKyAgICBm
bG9hdDR4NCB0aGlja25lc3NNYXRyaXg7CisgICAgZmxvYXQyIHZUaGlja25lc3NQYXJhbTsKKyAg
ICBmbG9hdDMgdkRpZmZ1c2lvbkRpc3RhbmNlOworICAgIGZsb2F0NCB2VGludENvbG9yOworICAg
IGZsb2F0MyB2U3ViU3VyZmFjZUludGVuc2l0eTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwwMDsK
KyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxXzE7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMTA7Cisg
ICAgZmxvYXQzIHZTcGhlcmljYWxMMTE7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMl8yOworICAg
IGZsb2F0MyB2U3BoZXJpY2FsTDJfMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyMDsKKyAgICBm
bG9hdDMgdlNwaGVyaWNhbEwyMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyMjsKKyAgICBmbG9h
dDMgdlNwaGVyaWNhbFg7CisgICAgZmxvYXQzIHZTcGhlcmljYWxZOworICAgIGZsb2F0MyB2U3Bo
ZXJpY2FsWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFhYX1paOworICAgIGZsb2F0MyB2U3BoZXJp
Y2FsWVlfWlo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxaWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNh
bFhZOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWVo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxaWDsK
K30KKworc3RydWN0IE1lc2ggeworICAgIGZsb2F0NHg0IHdvcmxkOworICAgIGZsb2F0IHZpc2li
aWxpdHk7Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBCIHsKKyAgICBjb25zdGFudCBNYXRlcmlhbFtd
IG1hdGVyaWFsIDogcmVnaXN0ZXIoYjAsIHNwYWNlMSk7CisgICAgY29uc3RhbnQgTWVzaFtdIG1l
c2ggOiByZWdpc3RlcihiMSwgc3BhY2UxKTsKK30KKworc3RydWN0IEJpbmRHcm91cEMgeworICAg
IFRleHR1cmUyRDxmbG9hdDQ+IHJlZmxlY3Rpb25TYW1wbGVyVGV4dHVyZSA6IHJlZ2lzdGVyKHQw
LCBzcGFjZTIpOworICAgIHNhbXBsZXIgcmVmbGVjdGlvblNhbXBsZXJTYW1wbGVyIDogcmVnaXN0
ZXIoczEsIHNwYWNlMik7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4gYWxiZWRvU2FtcGxlclRleHR1
cmUgOiByZWdpc3Rlcih0Miwgc3BhY2UyKTsKKyAgICBzYW1wbGVyIGFsYmVkb1NhbXBsZXJTYW1w
bGVyIDogcmVnaXN0ZXIoczMsIHNwYWNlMik7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4gcmVmbGVj
dGl2aXR5U2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0NCwgc3BhY2UyKTsKKyAgICBzYW1wbGVy
IHJlZmxlY3Rpdml0eVNhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczUsIHNwYWNlMik7CisgICAg
VGV4dHVyZTJEPGZsb2F0ND4gYW1iaWVudFNhbXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIodDYsIHNw
YWNlMik7CisgICAgc2FtcGxlciBhbWJpZW50U2FtcGxlclNhbXBsZXIgOiByZWdpc3RlcihzNywg
c3BhY2UyKTsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiBlbWlzc2l2ZVNhbXBsZXJUZXh0dXJlIDog
cmVnaXN0ZXIodDgsIHNwYWNlMik7CisgICAgc2FtcGxlciBlbWlzc2l2ZVNhbXBsZXJTYW1wbGVy
IDogcmVnaXN0ZXIoczksIHNwYWNlMik7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4gYnVtcFNhbXBs
ZXJUZXh0dXJlIDogcmVnaXN0ZXIodDEwLCBzcGFjZTIpOworICAgIHNhbXBsZXIgYnVtcFNhbXBs
ZXJTYW1wbGVyIDogcmVnaXN0ZXIoczExLCBzcGFjZTIpOworfQorCitmbG9hdDN4MyB0cmFuc3Bv
c2VNYXQzKGZsb2F0M3gzIGluTWF0cml4KSB7CisgICAgZmxvYXQzIGkwID0gaW5NYXRyaXhbMF07
CisgICAgZmxvYXQzIGkxID0gaW5NYXRyaXhbMV07CisgICAgZmxvYXQzIGkyID0gaW5NYXRyaXhb
Ml07CisgICAgZmxvYXQzeDMgb3V0TWF0cml4ID0gZmxvYXQzeDMoCisgICAgICAgIGZsb2F0Myhp
MC54LCBpMS54LCBpMi54KSwKKyAgICAgICAgZmxvYXQzKGkwLnksIGkxLnksIGkyLnkpLAorICAg
ICAgICBmbG9hdDMoaTAueiwgaTEueiwgaTIueikKKyAgICApOworICAgIHJldHVybiBvdXRNYXRy
aXg7Cit9CisKK2Zsb2F0M3gzIGludmVyc2VNYXQzKGZsb2F0M3gzIGluTWF0cml4KSB7CisgICAg
ZmxvYXQgYTAwID0gaW5NYXRyaXhbMF1bMF0sIGEwMSA9IGluTWF0cml4WzBdWzFdLCBhMDIgPSBp
bk1hdHJpeFswXVsyXTsKKyAgICBmbG9hdCBhMTAgPSBpbk1hdHJpeFsxXVswXSwgYTExID0gaW5N
YXRyaXhbMV1bMV0sIGExMiA9IGluTWF0cml4WzFdWzJdOworICAgIGZsb2F0IGEyMCA9IGluTWF0
cml4WzJdWzBdLCBhMjEgPSBpbk1hdHJpeFsyXVsxXSwgYTIyID0gaW5NYXRyaXhbMl1bMl07Cisg
ICAgZmxvYXQgYjAxID0gYTIyICogYTExIC0gYTEyICogYTIxOworICAgIGZsb2F0IGIxMSA9IC1h
MjIgKiBhMTAgKyBhMTIgKiBhMjA7CisgICAgZmxvYXQgYjIxID0gYTIxICogYTEwIC0gYTExICog
YTIwOworICAgIGZsb2F0IGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTsK
KyAgICByZXR1cm4gZmxvYXQzeDMoYjAxLCAtYTIyICogYTAxICsgYTAyICogYTIxLCBhMTIgKiBh
MDEgLSBhMDIgKiBhMTEsCisgICAgICAgIGIxMSwgYTIyICogYTAwIC0gYTAyICogYTIwLCAtYTEy
ICogYTAwICsgYTAyICogYTEwLAorICAgICAgICBiMjEsIC1hMjEgKiBhMDAgKyBhMDEgKiBhMjAs
IGExMSAqIGEwMCAtIGEwMSAqIGExMCkgLyBkZXQ7Cit9CisKK2Zsb2F0MyB0b0xpbmVhclNwYWNl
KGZsb2F0MyBjb2xvcikgeworICAgIHJldHVybiBwb3coY29sb3IsIGZsb2F0MygyLjIsIDIuMiwg
Mi4yKSk7Cit9CisKK2Zsb2F0MyB0b0dhbW1hU3BhY2UoZmxvYXQzIGNvbG9yKSB7CisgICAgcmV0
dXJuIHBvdyhjb2xvciwgZmxvYXQzKDEuMCAvIDIuMiwgMS4wIC8gMi4yLCAxLjAgLyAyLjIpKTsK
K30KKworZmxvYXQgc3F1YXJlKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJuIHZhbHVlICogdmFs
dWU7Cit9CisKK2Zsb2F0IHBvdzUoZmxvYXQgdmFsdWUpIHsKKyAgICBmbG9hdCBzcSA9IHZhbHVl
ICogdmFsdWU7CisgICAgcmV0dXJuIHNxICogc3EgKiB2YWx1ZTsKK30KKworZmxvYXQgZ2V0THVt
aW5hbmNlKGZsb2F0MyBjb2xvcikgeworICAgIHJldHVybiBjbGFtcChkb3QoY29sb3IsIGZsb2F0
MygwLjIxMjYsIDAuNzE1MiwgMC4wNzIyKSksIDAuLCAxLik7Cit9CisKK2Zsb2F0IGdldFJhbmQo
ZmxvYXQyIHNlZWQpIHsKKyAgICByZXR1cm4gZnJhYyhzaW4oZG90KHNlZWQueHksIGZsb2F0Migx
Mi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTsKK30KKworZmxvYXQgZGl0aGVyKGZsb2F0
MiBzZWVkLCBmbG9hdCB2YXJpYW5jZUFtb3VudCkgeworICAgIGZsb2F0IHJhbmQgPSBnZXRSYW5k
KHNlZWQpOworICAgIGZsb2F0IGRpdGhlciA9IGxlcnAoLXZhcmlhbmNlQW1vdW50IC8gMjU1LjAs
IHZhcmlhbmNlQW1vdW50IC8gMjU1LjAsIHJhbmQpOworICAgIHJldHVybiBkaXRoZXI7Cit9CisK
K2Zsb2F0NCB0b1JHQkQoZmxvYXQzIGNvbG9yKSB7CisgICAgZmxvYXQgbWF4UkdCID0gbWF4KG1h
eChjb2xvci54LCBtYXgoY29sb3IueSwgY29sb3IueikpLCAwLjAwMDAwMDEpOworICAgIGZsb2F0
IEQgPSBtYXgoMjU1LjAgLyBtYXhSR0IsIDEuKTsKKyAgICBEID0gY2xhbXAoZmxvb3IoRCkgLyAy
NTUuMCwgMC4sIDEuKTsKKyAgICBmbG9hdDMgcmdiID0gY29sb3IgKiBEOworICAgIHJnYiA9IHRv
R2FtbWFTcGFjZShyZ2IpOworICAgIHJldHVybiBmbG9hdDQocmdiLCBEKTsKK30KKworZmxvYXQz
IGZyb21SR0JEKGZsb2F0NCByZ2JkKSB7CisgICAgcmdiZC54eXogPSB0b0xpbmVhclNwYWNlKHJn
YmQueHl6KTsKKyAgICByZXR1cm4gcmdiZC54eXogLyByZ2JkLnc7Cit9CisKK2Zsb2F0IGNvbnZl
cnRSb3VnaG5lc3NUb0F2ZXJhZ2VTbG9wZShmbG9hdCByb3VnaG5lc3MpIHsKKyAgICByZXR1cm4g
c3F1YXJlKHJvdWdobmVzcykgKyAwLjAwMDU7Cit9CisKK2Zsb2F0IGZyZXNuZWxHcmF6aW5nUmVm
bGVjdGFuY2UoZmxvYXQgcmVmbGVjdGFuY2UwKSB7CisgICAgZmxvYXQgcmVmbGVjdGFuY2U5MCA9
IGNsYW1wKHJlZmxlY3RhbmNlMCAqIDI1LjAsIDAuMCwgMS4wKTsKKyAgICByZXR1cm4gcmVmbGVj
dGFuY2U5MDsKK30KKworZmxvYXQyIGdldEFBUm91Z2huZXNzRmFjdG9ycyhmbG9hdDMgbm9ybWFs
VmVjdG9yKSB7CisgICAgcmV0dXJuIGZsb2F0MigwLiwgMC4pOworfQorCitmbG9hdDQgYXBwbHlJ
bWFnZVByb2Nlc3NpbmcoZmxvYXQ0IHJlc3VsdCkgeworICAgIHJlc3VsdC54eXogPSB0b0dhbW1h
U3BhY2UocmVzdWx0Lnh5eik7CisgICAgcmVzdWx0Lnh5eiA9IGNsYW1wKHJlc3VsdC54eXosIGZs
b2F0MygwLjAsIDAuMCwgMC4wKSwgZmxvYXQzKDEuMCwgMS4wLCAxLjApKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitmbG9hdDMgY29tcHV0ZUVudmlyb25tZW50SXJyYWRpYW5jZShmbG9hdDMg
bm9ybWFsLCBjb25zdGFudCBNYXRlcmlhbCogbWF0ZXJpYWwpIHsKKyAgICByZXR1cm4gbWF0ZXJp
YWwtPnZTcGhlcmljYWxMMDAKKyAgICAgICAgKyBtYXRlcmlhbC0+dlNwaGVyaWNhbEwxXzEgKiAo
bm9ybWFsLnkpCisgICAgICAgICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMTAgKiAobm9ybWFsLnop
CisgICAgICAgICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMTEgKiAobm9ybWFsLngpCisgICAgICAg
ICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMl8yICogKG5vcm1hbC55ICogbm9ybWFsLngpCisgICAg
ICAgICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMl8xICogKG5vcm1hbC55ICogbm9ybWFsLnopCisg
ICAgICAgICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMjAgKiAoKDMuMCAqIG5vcm1hbC56ICogbm9y
bWFsLnopIC0gMS4wKQorICAgICAgICArIG1hdGVyaWFsLT52U3BoZXJpY2FsTDIxICogKG5vcm1h
bC56ICogbm9ybWFsLngpCisgICAgICAgICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMjIgKiAobm9y
bWFsLnggKiBub3JtYWwueCAtIChub3JtYWwueSAqIG5vcm1hbC55KSk7Cit9CisKK3N0cnVjdCBQ
cmVMaWdodGluZ0luZm8geworICAgIGZsb2F0MyBsaWdodE9mZnNldDsKKyAgICBmbG9hdCBsaWdo
dERpc3RhbmNlU3F1YXJlZDsKKyAgICBmbG9hdCBsaWdodERpc3RhbmNlOworICAgIGZsb2F0IGF0
dGVudWF0aW9uOworICAgIGZsb2F0MyBMOworICAgIGZsb2F0MyBIOworICAgIGZsb2F0IE5kb3RW
OworICAgIGZsb2F0IE5kb3RMVW5jbGFtcGVkOworICAgIGZsb2F0IE5kb3RMOworICAgIGZsb2F0
IFZkb3RIOworICAgIGZsb2F0IHJvdWdobmVzczsKK30KKworUHJlTGlnaHRpbmdJbmZvIGNvbXB1
dGVQb2ludEFuZFNwb3RQcmVMaWdodGluZ0luZm8oZmxvYXQ0IGxpZ2h0RGF0YSwgZmxvYXQzIFYs
IGZsb2F0MyBOLCBmbG9hdDMgdlBvc2l0aW9uVykgeworICAgIFByZUxpZ2h0aW5nSW5mbyByZXN1
bHQ7CisgICAgcmVzdWx0LmxpZ2h0T2Zmc2V0ID0gbGlnaHREYXRhLnh5eiAtIHZQb3NpdGlvblc7
CisgICAgcmVzdWx0LmxpZ2h0RGlzdGFuY2VTcXVhcmVkID0gZG90KHJlc3VsdC5saWdodE9mZnNl
dCwgcmVzdWx0LmxpZ2h0T2Zmc2V0KTsKKyAgICByZXN1bHQubGlnaHREaXN0YW5jZSA9IHNxcnQo
cmVzdWx0LmxpZ2h0RGlzdGFuY2VTcXVhcmVkKTsKKyAgICByZXN1bHQuTCA9IG5vcm1hbGl6ZShy
ZXN1bHQubGlnaHRPZmZzZXQpOworICAgIHJlc3VsdC5IID0gbm9ybWFsaXplKFYgKyByZXN1bHQu
TCk7CisgICAgcmVzdWx0LlZkb3RIID0gY2xhbXAoZG90KFYsIHJlc3VsdC5IKSwgMC4wLCAxLjAp
OworICAgIHJlc3VsdC5OZG90TFVuY2xhbXBlZCA9IGRvdChOLCByZXN1bHQuTCk7CisgICAgcmVz
dWx0Lk5kb3RMID0gY2xhbXAocmVzdWx0Lk5kb3RMVW5jbGFtcGVkLCAwLjAwMDAwMDEsIDEuMCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHJlTGlnaHRpbmdJbmZvIGNvbXB1dGVEaXJlY3Rp
b25hbFByZUxpZ2h0aW5nSW5mbyhmbG9hdDQgbGlnaHREYXRhLCBmbG9hdDMgViwgZmxvYXQzIE4p
IHsKKyAgICBQcmVMaWdodGluZ0luZm8gcmVzdWx0OworICAgIHJlc3VsdC5saWdodERpc3RhbmNl
ID0gbGVuZ3RoKC1saWdodERhdGEueHl6KTsKKyAgICByZXN1bHQuTCA9IG5vcm1hbGl6ZSgtbGln
aHREYXRhLnh5eik7CisgICAgcmVzdWx0LkggPSBub3JtYWxpemUoViArIHJlc3VsdC5MKTsKKyAg
ICByZXN1bHQuVmRvdEggPSBjbGFtcChkb3QoViwgcmVzdWx0LkgpLCAwLjAsIDEuMCk7CisgICAg
cmVzdWx0Lk5kb3RMVW5jbGFtcGVkID0gZG90KE4sIHJlc3VsdC5MKTsKKyAgICByZXN1bHQuTmRv
dEwgPSBjbGFtcChyZXN1bHQuTmRvdExVbmNsYW1wZWQsIDAuMDAwMDAwMSwgMS4wKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitQcmVMaWdodGluZ0luZm8gY29tcHV0ZUhlbWlzcGhlcmljUHJl
TGlnaHRpbmdJbmZvKGZsb2F0NCBsaWdodERhdGEsIGZsb2F0MyBWLCBmbG9hdDMgTikgeworICAg
IFByZUxpZ2h0aW5nSW5mbyByZXN1bHQ7CisgICAgcmVzdWx0Lk5kb3RMID0gZG90KE4sIGxpZ2h0
RGF0YS54eXopICogMC41ICsgMC41OworICAgIHJlc3VsdC5OZG90TCA9IGNsYW1wKHJlc3VsdC5O
ZG90TCwgMC4wMDAwMDAxLCAxLjApOworICAgIHJlc3VsdC5OZG90TFVuY2xhbXBlZCA9IHJlc3Vs
dC5OZG90TDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmbG9hdCBjb21wdXRlRGlzdGFuY2VM
aWdodEZhbGxvZmZfU3RhbmRhcmQoZmxvYXQzIGxpZ2h0T2Zmc2V0LCBmbG9hdCByYW5nZSkgewor
ICAgIHJldHVybiBtYXgoMC4sIDEuMCAtIGxlbmd0aChsaWdodE9mZnNldCkgLyByYW5nZSk7Cit9
CisKK2Zsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9QaHlzaWNhbChmbG9hdCBsaWdo
dERpc3RhbmNlU3F1YXJlZCkgeworICAgIHJldHVybiAxLjAgLyBtYXgobGlnaHREaXN0YW5jZVNx
dWFyZWQsIDAuMDAwMDAwMSk7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9m
Zl9HTFRGKGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkLCBmbG9hdCBpbnZlcnNlU3F1YXJlZFJh
bmdlKSB7CisgICAgZmxvYXQgbGlnaHREaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgobGlnaHRE
aXN0YW5jZVNxdWFyZWQsIDAuMDAwMDAwMSk7CisgICAgZmxvYXQgZmFjdG9yID0gbGlnaHREaXN0
YW5jZVNxdWFyZWQgKiBpbnZlcnNlU3F1YXJlZFJhbmdlOworICAgIGZsb2F0IGF0dGVudWF0aW9u
ID0gY2xhbXAoMS4wIC0gZmFjdG9yICogZmFjdG9yLCAwLjAsIDEuMCk7CisgICAgYXR0ZW51YXRp
b24gKj0gYXR0ZW51YXRpb247CisgICAgbGlnaHREaXN0YW5jZUZhbGxvZmYgKj0gYXR0ZW51YXRp
b247CisgICAgcmV0dXJuIGxpZ2h0RGlzdGFuY2VGYWxsb2ZmOworfQorCitmbG9hdCBjb21wdXRl
RGlzdGFuY2VMaWdodEZhbGxvZmYoZmxvYXQzIGxpZ2h0T2Zmc2V0LCBmbG9hdCBsaWdodERpc3Rh
bmNlU3F1YXJlZCwgZmxvYXQgcmFuZ2UsIGZsb2F0IGludmVyc2VTcXVhcmVkUmFuZ2UpIHsKKyAg
ICByZXR1cm4gY29tcHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGxpZ2h0RGlzdGFu
Y2VTcXVhcmVkKTsKK30KKworZmxvYXQgY29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmX1N0
YW5kYXJkKGZsb2F0MyBsaWdodERpcmVjdGlvbiwgZmxvYXQzIGRpcmVjdGlvblRvTGlnaHRDZW50
ZXJXLCBmbG9hdCBjb3NIYWxmQW5nbGUsIGZsb2F0IGV4cG9uZW50KSB7CisgICAgZmxvYXQgZmFs
bG9mZiA9IDAuMDsKKyAgICBmbG9hdCBjb3NBbmdsZSA9IG1heChkb3QoLWxpZ2h0RGlyZWN0aW9u
LCBkaXJlY3Rpb25Ub0xpZ2h0Q2VudGVyVyksIDAuMDAwMDAwMSk7CisgICAgaWYgKGNvc0FuZ2xl
ID49IGNvc0hhbGZBbmdsZSkgeworICAgICAgICBmYWxsb2ZmID0gbWF4KDAuLCBwb3coY29zQW5n
bGUsIGV4cG9uZW50KSk7CisgICAgfQorICAgIHJldHVybiBmYWxsb2ZmOworfQorCitmbG9hdCBj
b21wdXRlRGlyZWN0aW9uYWxMaWdodEZhbGxvZmZfUGh5c2ljYWwoZmxvYXQzIGxpZ2h0RGlyZWN0
aW9uLCBmbG9hdDMgZGlyZWN0aW9uVG9MaWdodENlbnRlclcsIGZsb2F0IGNvc0hhbGZBbmdsZSkg
eworICAgIGZsb2F0IGtNaW51c0xvZzJDb25lQW5nbGVJbnRlbnNpdHlSYXRpbyA9IDYuNjQzODU2
MTg5Nzc7CisgICAgZmxvYXQgY29uY2VudHJhdGlvbkthcHBhID0ga01pbnVzTG9nMkNvbmVBbmds
ZUludGVuc2l0eVJhdGlvIC8gKDEuMCAtIGNvc0hhbGZBbmdsZSk7CisgICAgZmxvYXQ0IGxpZ2h0
RGlyZWN0aW9uU3ByZWFkU0cgPSBmbG9hdDQoLWxpZ2h0RGlyZWN0aW9uICogY29uY2VudHJhdGlv
bkthcHBhLCAtY29uY2VudHJhdGlvbkthcHBhKTsKKyAgICBmbG9hdCBmYWxsb2ZmID0gZXhwMihk
b3QoZmxvYXQ0KGRpcmVjdGlvblRvTGlnaHRDZW50ZXJXLCAxLjApLCBsaWdodERpcmVjdGlvblNw
cmVhZFNHKSk7CisgICAgcmV0dXJuIGZhbGxvZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXJlY3Rp
b25hbExpZ2h0RmFsbG9mZl9HTFRGKGZsb2F0MyBsaWdodERpcmVjdGlvbiwgZmxvYXQzIGRpcmVj
dGlvblRvTGlnaHRDZW50ZXJXLCBmbG9hdCBsaWdodEFuZ2xlU2NhbGUsIGZsb2F0IGxpZ2h0QW5n
bGVPZmZzZXQpIHsKKyAgICBmbG9hdCBjZCA9IGRvdCgtbGlnaHREaXJlY3Rpb24sIGRpcmVjdGlv
blRvTGlnaHRDZW50ZXJXKTsKKyAgICBmbG9hdCBmYWxsb2ZmID0gY2xhbXAoY2QgKiBsaWdodEFu
Z2xlU2NhbGUgKyBsaWdodEFuZ2xlT2Zmc2V0LCAwLjAsIDEuMCk7CisgICAgZmFsbG9mZiAqPSBm
YWxsb2ZmOworICAgIHJldHVybiBmYWxsb2ZmOworfQorCitmbG9hdCBjb21wdXRlRGlyZWN0aW9u
YWxMaWdodEZhbGxvZmYoZmxvYXQzIGxpZ2h0RGlyZWN0aW9uLCBmbG9hdDMgZGlyZWN0aW9uVG9M
aWdodENlbnRlclcsIGZsb2F0IGNvc0hhbGZBbmdsZSwgZmxvYXQgZXhwb25lbnQsIGZsb2F0IGxp
Z2h0QW5nbGVTY2FsZSwgZmxvYXQgbGlnaHRBbmdsZU9mZnNldCkgeworICAgIHJldHVybiBjb21w
dXRlRGlyZWN0aW9uYWxMaWdodEZhbGxvZmZfUGh5c2ljYWwobGlnaHREaXJlY3Rpb24sIGRpcmVj
dGlvblRvTGlnaHRDZW50ZXJXLCBjb3NIYWxmQW5nbGUpOworfQorCitmbG9hdDMgZ2V0RW5lcmd5
Q29uc2VydmF0aW9uRmFjdG9yKGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50UjAsIGZsb2F0MyBl
bnZpcm9ubWVudEJyZGYpIHsKKyAgICByZXR1cm4gZmxvYXQzKDEuMCwgMS4wLCAxLjApICsgc3Bl
Y3VsYXJFbnZpcm9ubWVudFIwICogKDEuMCAvIGVudmlyb25tZW50QnJkZi55IC0gMS4wKTsKK30K
KworZmxvYXQzIGdldEJSREZMb29rdXAoZmxvYXQgTmRvdFYsIGZsb2F0IHBlcmNlcHR1YWxSb3Vn
aG5lc3MsIFRleHR1cmUyRDxmbG9hdDQ+IGVudmlyb25tZW50QnJkZlNhbXBsZXJUZXh0dXJlLCBz
YW1wbGVyIGVudmlyb25tZW50QnJkZlNhbXBsZXJTYW1wbGVyKSB7CisgICAgZmxvYXQyIFVWID0g
ZmxvYXQyKE5kb3RWLCBwZXJjZXB0dWFsUm91Z2huZXNzKTsKKyAgICBmbG9hdDQgYnJkZkxvb2t1
cCA9IFNhbXBsZShlbnZpcm9ubWVudEJyZGZTYW1wbGVyVGV4dHVyZSwgZW52aXJvbm1lbnRCcmRm
U2FtcGxlclNhbXBsZXIsIFVWKTsKKyAgICByZXR1cm4gYnJkZkxvb2t1cC54eXo7Cit9CisKK2Zs
b2F0MyBnZXRSZWZsZWN0YW5jZUZyb21CUkRGTG9va3VwKGZsb2F0MyBzcGVjdWxhckVudmlyb25t
ZW50UjAsIGZsb2F0MyBlbnZpcm9ubWVudEJyZGYpIHsKKyAgICBmbG9hdDMgcmVmbGVjdGFuY2Ug
PSBsZXJwKGVudmlyb25tZW50QnJkZi54eHgsIGVudmlyb25tZW50QnJkZi55eXksIHNwZWN1bGFy
RW52aXJvbm1lbnRSMCk7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlOworfQorCitmbG9hdDMgZnJl
c25lbFNjaGxpY2tHR1goZmxvYXQgVmRvdEgsIGZsb2F0MyByZWZsZWN0YW5jZTAsIGZsb2F0MyBy
ZWZsZWN0YW5jZTkwKSB7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlMCArIChyZWZsZWN0YW5jZTkw
IC0gcmVmbGVjdGFuY2UwKSAqIHBvdzUoMS4wIC0gVmRvdEgpOworfQorCitmbG9hdCBmcmVzbmVs
U2NobGlja0dHWChmbG9hdCBWZG90SCwgZmxvYXQgcmVmbGVjdGFuY2UwLCBmbG9hdCByZWZsZWN0
YW5jZTkwKSB7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlMCArIChyZWZsZWN0YW5jZTkwIC0gcmVm
bGVjdGFuY2UwKSAqIHBvdzUoMS4wIC0gVmRvdEgpOworfQorCitmbG9hdCBub3JtYWxEaXN0cmli
dXRpb25GdW5jdGlvbl9Ucm93YnJpZGdlUmVpdHpHR1goZmxvYXQgTmRvdEgsIGZsb2F0IGFscGhh
RykgeworICAgIGZsb2F0IGEyID0gc3F1YXJlKGFscGhhRyk7CisgICAgZmxvYXQgZCA9IE5kb3RI
ICogTmRvdEggKiAoYTIgLSAxLjApICsgMS4wOworICAgIHJldHVybiBhMiAvICgzLjE0MTU5MjY1
MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUgKiBkICogZCk7Cit9CisKK2Zsb2F0IHNtaXRoVmlzaWJp
bGl0eV9HR1hDb3JyZWxhdGVkKGZsb2F0IE5kb3RMLCBmbG9hdCBOZG90ViwgZmxvYXQgYWxwaGFH
KSB7CisgICAgZmxvYXQgYTIgPSBhbHBoYUcgKiBhbHBoYUc7CisgICAgZmxvYXQgR0dYViA9IE5k
b3RMICogc3FydChOZG90ViAqIChOZG90ViAtIGEyICogTmRvdFYpICsgYTIpOworICAgIGZsb2F0
IEdHWEwgPSBOZG90ViAqIHNxcnQoTmRvdEwgKiAoTmRvdEwgLSBhMiAqIE5kb3RMKSArIGEyKTsK
KyAgICByZXR1cm4gMC41IC8gKEdHWFYgKyBHR1hMKTsKK30KKworZmxvYXQgZGlmZnVzZUJSREZf
QnVybGV5KGZsb2F0IE5kb3RMLCBmbG9hdCBOZG90ViwgZmxvYXQgVmRvdEgsIGZsb2F0IHJvdWdo
bmVzcykgeworICAgIGZsb2F0IGRpZmZ1c2VGcmVzbmVsTlYgPSBwb3c1KGNsYW1wKDEuMCAtIE5k
b3RMLCAwLjAwMDAwMDEsIDEuMCkpOworICAgIGZsb2F0IGRpZmZ1c2VGcmVzbmVsTkwgPSBwb3c1
KGNsYW1wKDEuMCAtIE5kb3RWLCAwLjAwMDAwMDEsIDEuMCkpOworICAgIGZsb2F0IGRpZmZ1c2VG
cmVzbmVsOTAgPSAwLjUgKyAyLjAgKiBWZG90SCAqIFZkb3RIICogcm91Z2huZXNzOworICAgIGZs
b2F0IGZyZXNuZWwgPSAoMS4wICsgKGRpZmZ1c2VGcmVzbmVsOTAgLSAxLjApICogZGlmZnVzZUZy
ZXNuZWxOTCkgKgorICAgICAgICAoMS4wICsgKGRpZmZ1c2VGcmVzbmVsOTAgLSAxLjApICogZGlm
ZnVzZUZyZXNuZWxOVik7CisgICAgcmV0dXJuIGZyZXNuZWwgLyAzLjE0MTU5MjY1MzU4OTc5MzIz
ODQ2MjY0MzM4MzI3OTU7Cit9CisKK3N0cnVjdCBMaWdodGluZ0luZm8geworICAgIGZsb2F0MyBk
aWZmdXNlOworfQorCitmbG9hdCBhZGp1c3RSb3VnaG5lc3NGcm9tTGlnaHRQcm9wZXJ0aWVzKGZs
b2F0IHJvdWdobmVzcywgZmxvYXQgbGlnaHRSYWRpdXMsIGZsb2F0IGxpZ2h0RGlzdGFuY2UpIHsK
KyAgICBmbG9hdCBsaWdodFJvdWdobmVzcyA9IGxpZ2h0UmFkaXVzIC8gbGlnaHREaXN0YW5jZTsK
KyAgICBmbG9hdCB0b3RhbFJvdWdobmVzcyA9IGNsYW1wKGxpZ2h0Um91Z2huZXNzICsgcm91Z2hu
ZXNzLCAwLjAsIDEuMCk7CisgICAgcmV0dXJuIHRvdGFsUm91Z2huZXNzOworfQorCitmbG9hdDMg
Y29tcHV0ZUhlbWlzcGhlcmljRGlmZnVzZUxpZ2h0aW5nKFByZUxpZ2h0aW5nSW5mbyBpbmZvLCBm
bG9hdDMgbGlnaHRDb2xvciwgZmxvYXQzIGdyb3VuZENvbG9yKSB7CisgICAgcmV0dXJuIGxlcnAo
Z3JvdW5kQ29sb3IsIGxpZ2h0Q29sb3IsIGZsb2F0MyhpbmZvLk5kb3RMLCBpbmZvLk5kb3RMLCBp
bmZvLk5kb3RMKSk7Cit9CisKK2Zsb2F0MyBjb21wdXRlRGlmZnVzZUxpZ2h0aW5nKFByZUxpZ2h0
aW5nSW5mbyBpbmZvLCBmbG9hdDMgbGlnaHRDb2xvcikgeworICAgIGZsb2F0IGRpZmZ1c2VUZXJt
ID0gZGlmZnVzZUJSREZfQnVybGV5KGluZm8uTmRvdEwsIGluZm8uTmRvdFYsIGluZm8uVmRvdEgs
IGluZm8ucm91Z2huZXNzKTsKKyAgICByZXR1cm4gZGlmZnVzZVRlcm0gKiBpbmZvLmF0dGVudWF0
aW9uICogaW5mby5OZG90TCAqIGxpZ2h0Q29sb3I7Cit9CisKK2Zsb2F0MiBjb21wdXRlUHJvamVj
dGlvblRleHR1cmVEaWZmdXNlTGlnaHRpbmdVVihmbG9hdDR4NCB0ZXh0dXJlUHJvamVjdGlvbk1h
dHJpeCwgZmxvYXQzIHZQb3NpdGlvblcpIHsKKyAgICBmbG9hdDQgc3RycSA9IG11bCh0ZXh0dXJl
UHJvamVjdGlvbk1hdHJpeCwgZmxvYXQ0KHZQb3NpdGlvblcsIDEuMCkpOworICAgIHN0cnEgLz0g
c3RycS53OworICAgIHJldHVybiBzdHJxLnh5OworfQorCitmbG9hdCBnZXRMb2RGcm9tQWxwaGFH
KGZsb2F0IGN1YmVNYXBEaW1lbnNpb25QaXhlbHMsIGZsb2F0IG1pY3Jvc3VyZmFjZUF2ZXJhZ2VT
bG9wZSkgeworICAgIGZsb2F0IG1pY3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZVRleGVscyA9IGN1YmVN
YXBEaW1lbnNpb25QaXhlbHMgKiBtaWNyb3N1cmZhY2VBdmVyYWdlU2xvcGU7CisgICAgZmxvYXQg
bG9kID0gbG9nMihtaWNyb3N1cmZhY2VBdmVyYWdlU2xvcGVUZXhlbHMpOworICAgIHJldHVybiBs
b2Q7Cit9CisKK2Zsb2F0IGdldExpbmVhckxvZEZyb21Sb3VnaG5lc3MoZmxvYXQgY3ViZU1hcERp
bWVuc2lvblBpeGVscywgZmxvYXQgcm91Z2huZXNzKSB7CisgICAgZmxvYXQgbG9kID0gbG9nMihj
dWJlTWFwRGltZW5zaW9uUGl4ZWxzKSAqIHJvdWdobmVzczsKKyAgICByZXR1cm4gbG9kOworfQor
CitmbG9hdCBlbnZpcm9ubWVudFJhZGlhbmNlT2NjbHVzaW9uKGZsb2F0IGFtYmllbnRPY2NsdXNp
b24sIGZsb2F0IE5kb3RWVW5jbGFtcGVkKSB7CisgICAgZmxvYXQgdGVtcCA9IE5kb3RWVW5jbGFt
cGVkICsgYW1iaWVudE9jY2x1c2lvbjsKKyAgICByZXR1cm4gY2xhbXAoc3F1YXJlKHRlbXApIC0g
MS4wICsgYW1iaWVudE9jY2x1c2lvbiwgMC4wLCAxLjApOworfQorCitmbG9hdCBlbnZpcm9ubWVu
dEhvcml6b25PY2NsdXNpb24oZmxvYXQzIHZpZXcsIGZsb2F0MyBub3JtYWwpIHsKKyAgICBmbG9h
dDMgcmVmbGVjdGlvbiA9IHJlZmxlY3Qodmlldywgbm9ybWFsKTsKKyAgICBmbG9hdCB0ZW1wID0g
Y2xhbXAoMS4wICsgMS4xICogZG90KHJlZmxlY3Rpb24sIG5vcm1hbCksIDAuMCwgMS4wKTsKKyAg
ICByZXR1cm4gc3F1YXJlKHRlbXApOworfQorCitmbG9hdDMgcGVydHVyYk5vcm1hbChmbG9hdDN4
MyBjb3RhbmdlbnRGcmFtZSwgZmxvYXQzIHRleHR1cmVTYW1wbGUsIGZsb2F0IHNjYWxlKSB7Cisg
ICAgdGV4dHVyZVNhbXBsZSA9IHRleHR1cmVTYW1wbGUgKiAyLjAgLSAxLjA7CisgICAgdGV4dHVy
ZVNhbXBsZSA9IG5vcm1hbGl6ZSh0ZXh0dXJlU2FtcGxlICogZmxvYXQzKHNjYWxlLCBzY2FsZSwg
MS4wKSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZShtdWwoY290YW5nZW50RnJhbWUsIHRleHR1cmVT
YW1wbGUpKTsKK30KKworZmxvYXQzeDMgY290YW5nZW50X2ZyYW1lKGZsb2F0MyBub3JtYWwsIGZs
b2F0MyBwLCBmbG9hdDIgdXYsIGZsb2F0MiB0YW5nZW50U3BhY2VQYXJhbXMsIGJvb2wgZnJvbnRG
YWNlKSB7CisgICAgdXYgPSBmcm9udEZhY2UgPyB1diA6IC11djsKKyAgICBmbG9hdDMgZHAxID0g
ZGR4KHApOworICAgIGZsb2F0MyBkcDIgPSBkZHkocCk7CisgICAgZmxvYXQyIGR1djEgPSBkZHgo
dXYpOworICAgIGZsb2F0MiBkdXYyID0gZGR5KHV2KTsKKyAgICBmbG9hdDMgZHAycGVycCA9IGNy
b3NzKGRwMiwgbm9ybWFsKTsKKyAgICBmbG9hdDMgZHAxcGVycCA9IGNyb3NzKG5vcm1hbCwgZHAx
KTsKKyAgICBmbG9hdDMgdGFuZ2VudCA9IGRwMnBlcnAgKiBkdXYxLnggKyBkcDFwZXJwICogZHV2
Mi54OworICAgIGZsb2F0MyBiaXRhbmdlbnQgPSBkcDJwZXJwICogZHV2MS55ICsgZHAxcGVycCAq
IGR1djIueTsKKyAgICB0YW5nZW50ICo9IHRhbmdlbnRTcGFjZVBhcmFtcy54OworICAgIGJpdGFu
Z2VudCAqPSB0YW5nZW50U3BhY2VQYXJhbXMueTsKKyAgICBmbG9hdCBpbnZtYXggPSByc3FydCht
YXgoZG90KHRhbmdlbnQsIHRhbmdlbnQpLCBkb3QoYml0YW5nZW50LCBiaXRhbmdlbnQpKSk7Cisg
ICAgcmV0dXJuIGZsb2F0M3gzKHRhbmdlbnQgKiBpbnZtYXgsIGJpdGFuZ2VudCAqIGludm1heCwg
bm9ybWFsKTsKK30KKworZmxvYXQzIHBlcnR1cmJOb3JtYWwoZmxvYXQzeDMgY290YW5nZW50RnJh
bWUsIGZsb2F0MiB1diwgVGV4dHVyZTJEPGZsb2F0ND4gYnVtcFNhbXBsZXJUZXh0dXJlLCBzYW1w
bGVyIGJ1bXBTYW1wbGVyU2FtcGxlciwgZmxvYXQzIHZCdW1wSW5mb3MpIHsKKyAgICByZXR1cm4g
cGVydHVyYk5vcm1hbChjb3RhbmdlbnRGcmFtZSwgU2FtcGxlKGJ1bXBTYW1wbGVyVGV4dHVyZSwg
YnVtcFNhbXBsZXJTYW1wbGVyLCB1dikueHl6LCB2QnVtcEluZm9zLnkpOworfQorCitmbG9hdDMg
cGVydHVyYk5vcm1hbChmbG9hdDN4MyBjb3RhbmdlbnRGcmFtZSwgZmxvYXQzIGNvbG9yLCBmbG9h
dDMgdkJ1bXBJbmZvcykgeworICAgIHJldHVybiBwZXJ0dXJiTm9ybWFsKGNvdGFuZ2VudEZyYW1l
LCBjb2xvciwgdkJ1bXBJbmZvcy55KTsKK30KKworZmxvYXQzIHBhcmFsbGF4Q29ycmVjdE5vcm1h
bChmbG9hdDMgdmVydGV4UG9zLCBmbG9hdDMgb3JpZ1ZlYywgZmxvYXQzIGN1YmVTaXplLCBmbG9h
dDMgY3ViZVBvcykgeworICAgIGZsb2F0MyBpbnZPcmlnVmVjID0gZmxvYXQzKDEuMCwgMS4wLCAx
LjApIC8gb3JpZ1ZlYzsKKyAgICBmbG9hdDMgaGFsZlNpemUgPSBjdWJlU2l6ZSAqIDAuNTsKKyAg
ICBmbG9hdDMgaW50ZXJzZWNBdE1heFBsYW5lID0gKGN1YmVQb3MgKyBoYWxmU2l6ZSAtIHZlcnRl
eFBvcykgKiBpbnZPcmlnVmVjOworICAgIGZsb2F0MyBpbnRlcnNlY0F0TWluUGxhbmUgPSAoY3Vi
ZVBvcyAtIGhhbGZTaXplIC0gdmVydGV4UG9zKSAqIGludk9yaWdWZWM7CisgICAgZmxvYXQzIGxh
cmdlc3RJbnRlcnNlYyA9IG1heChpbnRlcnNlY0F0TWF4UGxhbmUsIGludGVyc2VjQXRNaW5QbGFu
ZSk7CisgICAgZmxvYXQgZGlzdGFuY2UgPSBtaW4obWluKGxhcmdlc3RJbnRlcnNlYy54LCBsYXJn
ZXN0SW50ZXJzZWMueSksIGxhcmdlc3RJbnRlcnNlYy56KTsKKyAgICBmbG9hdDMgaW50ZXJzZWN0
UG9zaXRpb25XUyA9IHZlcnRleFBvcyArIG9yaWdWZWMgKiBkaXN0YW5jZTsKKyAgICByZXR1cm4g
aW50ZXJzZWN0UG9zaXRpb25XUyAtIGN1YmVQb3M7Cit9CisKK2Zsb2F0MyBjb21wdXRlRml4ZWRF
cXVpcmVjdGFuZ3VsYXJDb29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29ybGROb3JtYWws
IGZsb2F0MyBkaXJlY3Rpb24pIHsKKyAgICBmbG9hdCBsb24gPSBhdGFuMihkaXJlY3Rpb24ueiwg
ZGlyZWN0aW9uLngpOworICAgIGZsb2F0IGxhdCA9IGFjb3MoZGlyZWN0aW9uLnkpOworICAgIGZs
b2F0MiBzcGhlcmVDb29yZHMgPSBmbG9hdDIobG9uLCBsYXQpICogMC4xNTkxNTQ5NCAqIDIuMDsK
KyAgICBmbG9hdCBzID0gc3BoZXJlQ29vcmRzLnggKiAwLjUgKyAwLjU7CisgICAgZmxvYXQgdCA9
IHNwaGVyZUNvb3Jkcy55OworICAgIHJldHVybiBmbG9hdDMocywgdCwgMCk7Cit9CisKK2Zsb2F0
MyBjb21wdXRlTWlycm9yZWRGaXhlZEVxdWlyZWN0YW5ndWxhckNvb3JkcyhmbG9hdDQgd29ybGRQ
b3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQzIGRpcmVjdGlvbikgeworICAgIGZsb2F0IGxv
biA9IGF0YW4yKGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueCk7CisgICAgZmxvYXQgbGF0ID0gYWNv
cyhkaXJlY3Rpb24ueSk7CisgICAgZmxvYXQyIHNwaGVyZUNvb3JkcyA9IGZsb2F0Mihsb24sIGxh
dCkgKiAwLjE1OTE1NDk0ICogMi4wOworICAgIGZsb2F0IHMgPSBzcGhlcmVDb29yZHMueCAqIDAu
NSArIDAuNTsKKyAgICBmbG9hdCB0ID0gc3BoZXJlQ29vcmRzLnk7CisgICAgcmV0dXJuIGZsb2F0
MygxLjAgLSBzLCB0LCAwKTsKK30KKworZmxvYXQzIGNvbXB1dGVFcXVpcmVjdGFuZ3VsYXJDb29y
ZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29ybGROb3JtYWwsIGZsb2F0MyBleWVQb3NpdGlv
biwgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAgIGZsb2F0MyBjYW1lcmFUb1ZlcnRl
eCA9IG5vcm1hbGl6ZSh3b3JsZFBvcy54eXogLSBleWVQb3NpdGlvbik7CisgICAgZmxvYXQzIHIg
PSBub3JtYWxpemUocmVmbGVjdChjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwpKTsKKyAgICBy
ID0gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChyLCAwKSkueHl6OworICAgIGZsb2F0IGxv
biA9IGF0YW4yKHIueiwgci54KTsKKyAgICBmbG9hdCBsYXQgPSBhY29zKHIueSk7CisgICAgZmxv
YXQyIHNwaGVyZUNvb3JkcyA9IGZsb2F0Mihsb24sIGxhdCkgKiAwLjE1OTE1NDk0ICogMi4wOwor
ICAgIGZsb2F0IHMgPSBzcGhlcmVDb29yZHMueCAqIDAuNSArIDAuNTsKKyAgICBmbG9hdCB0ID0g
c3BoZXJlQ29vcmRzLnk7CisgICAgcmV0dXJuIGZsb2F0MyhzLCB0LCAwKTsKK30KKworZmxvYXQz
IGNvbXB1dGVTcGhlcmljYWxDb29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29ybGROb3Jt
YWwsIGZsb2F0NHg0IHZpZXcsIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgpIHsKKyAgICBmbG9h
dDMgdmlld0RpciA9IG5vcm1hbGl6ZShtdWwodmlldywgd29ybGRQb3MpLnh5eik7CisgICAgZmxv
YXQzIHZpZXdOb3JtYWwgPSBub3JtYWxpemUobXVsKHZpZXcsIGZsb2F0NCh3b3JsZE5vcm1hbCwg
MC4wKSkueHl6KTsKKyAgICBmbG9hdDMgciA9IHJlZmxlY3Qodmlld0Rpciwgdmlld05vcm1hbCk7
CisgICAgciA9IG11bChyZWZsZWN0aW9uTWF0cml4LCBmbG9hdDQociwgMCkpLnh5ejsKKyAgICBy
LnogPSByLnogLSAxLjA7CisgICAgZmxvYXQgbSA9IDIuMCAqIGxlbmd0aChyKTsKKyAgICByZXR1
cm4gZmxvYXQzKHIueCAvIG0gKyAwLjUsIDEuMCAtIHIueSAvIG0gLSAwLjUsIDApOworfQorCitm
bG9hdDMgY29tcHV0ZVBsYW5hckNvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5v
cm1hbCwgZmxvYXQzIGV5ZVBvc2l0aW9uLCBmbG9hdDR4NCByZWZsZWN0aW9uTWF0cml4KSB7Cisg
ICAgZmxvYXQzIHZpZXdEaXIgPSB3b3JsZFBvcy54eXogLSBleWVQb3NpdGlvbjsKKyAgICBmbG9h
dDMgY29vcmRzID0gbm9ybWFsaXplKHJlZmxlY3Qodmlld0Rpciwgd29ybGROb3JtYWwpKTsKKyAg
ICByZXR1cm4gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChjb29yZHMsIDEpKS54eXo7Cit9
CisKK2Zsb2F0MyBjb21wdXRlQ3ViaWNDb29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29y
bGROb3JtYWwsIGZsb2F0MyBleWVQb3NpdGlvbiwgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkg
eworICAgIGZsb2F0MyB2aWV3RGlyID0gbm9ybWFsaXplKHdvcmxkUG9zLnh5eiAtIGV5ZVBvc2l0
aW9uKTsKKyAgICBmbG9hdDMgY29vcmRzID0gcmVmbGVjdCh2aWV3RGlyLCB3b3JsZE5vcm1hbCk7
CisgICAgY29vcmRzID0gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChjb29yZHMsIDApKS54
eXo7CisgICAgcmV0dXJuIGNvb3JkczsKK30KKworZmxvYXQzIGNvbXB1dGVDdWJpY0xvY2FsQ29v
cmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9hdDMgZXllUG9zaXRp
b24sIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0MyByZWZsZWN0aW9uU2l6ZSwgZmxv
YXQzIHJlZmxlY3Rpb25Qb3NpdGlvbikgeworICAgIGZsb2F0MyB2aWV3RGlyID0gbm9ybWFsaXpl
KHdvcmxkUG9zLnh5eiAtIGV5ZVBvc2l0aW9uKTsKKyAgICBmbG9hdDMgY29vcmRzID0gcmVmbGVj
dCh2aWV3RGlyLCB3b3JsZE5vcm1hbCk7CisgICAgY29vcmRzID0gcGFyYWxsYXhDb3JyZWN0Tm9y
bWFsKHdvcmxkUG9zLnh5eiwgY29vcmRzLCByZWZsZWN0aW9uU2l6ZSwgcmVmbGVjdGlvblBvc2l0
aW9uKTsKKyAgICBjb29yZHMgPSBtdWwocmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KGNvb3Jkcywg
MCkpLnh5ejsKKyAgICByZXR1cm4gY29vcmRzOworfQorCitmbG9hdDMgY29tcHV0ZVByb2plY3Rp
b25Db29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDR4NCB2aWV3LCBmbG9hdDR4NCByZWZsZWN0
aW9uTWF0cml4KSB7CisgICAgcmV0dXJuIG11bChyZWZsZWN0aW9uTWF0cml4LCBtdWwodmlldywg
d29ybGRQb3MpKS54eXo7Cit9CisKK2Zsb2F0MyBjb21wdXRlU2t5Qm94Q29vcmRzKGZsb2F0MyBw
b3NpdGlvblcsIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgpIHsKKyAgICByZXR1cm4gbXVsKHJl
ZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChwb3NpdGlvblcsIDApKS54eXo7Cit9CisKK2Zsb2F0MyBj
b21wdXRlUmVmbGVjdGlvbkNvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1h
bCwgZmxvYXQ0IHZFeWVQb3NpdGlvbiwgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAg
IHJldHVybiBjb21wdXRlQ3ViaWNDb29yZHMod29ybGRQb3MsIHdvcmxkTm9ybWFsLCB2RXllUG9z
aXRpb24ueHl6LCByZWZsZWN0aW9uTWF0cml4KTsKK30KKworZnJhZ21lbnQgZmxvYXQ0IG1haW4o
ZmxvYXQzIHZQb3NpdGlvblcgOiBhdHRyaWJ1dGUoMCksIGZsb2F0MyB2Tm9ybWFsVyA6IGF0dHJp
YnV0ZSgxKSwgZmxvYXQyIHZNYWluVVYxIDogYXR0cmlidXRlKDIpLCBCaW5kR3JvdXBBIGJpbmRH
cm91cEEsIEJpbmRHcm91cEIgYmluZEdyb3VwQiwgQmluZEdyb3VwQyBiaW5kR3JvdXBDLCBib29s
IGZyb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKSA6IFNWX1RhcmdldCAwIHsKKyAgICBmbG9hdDMg
dmlld0RpcmVjdGlvblcgPSBub3JtYWxpemUoYmluZEdyb3VwQi5tYXRlcmlhbFswXS52RXllUG9z
aXRpb24ueHl6IC0gdlBvc2l0aW9uVyk7CisgICAgZmxvYXQzIG5vcm1hbFcgPSBub3JtYWxpemUo
dk5vcm1hbFcpOworICAgIGZsb2F0MiB1dk9mZnNldCA9IGZsb2F0MigwLjAsIDAuMCk7CisgICAg
ZmxvYXQgbm9ybWFsU2NhbGUgPSAxLjA7CisgICAgZmxvYXQzeDMgVEJOID0gY290YW5nZW50X2Zy
YW1lKG5vcm1hbFcgKiBub3JtYWxTY2FsZSwgdlBvc2l0aW9uVywgdk1haW5VVjEsIGJpbmRHcm91
cEIubWF0ZXJpYWxbMF0udlRhbmdlbnRTcGFjZVBhcmFtcywgZnJvbnRGYWNlKTsKKyAgICBub3Jt
YWxXID0gcGVydHVyYk5vcm1hbChUQk4sIHZNYWluVVYxICsgdXZPZmZzZXQsIGJpbmRHcm91cEMu
YnVtcFNhbXBsZXJUZXh0dXJlLCBiaW5kR3JvdXBDLmJ1bXBTYW1wbGVyU2FtcGxlciwgYmluZEdy
b3VwQi5tYXRlcmlhbFswXS52QnVtcEluZm9zKTsKKyAgICBmbG9hdDMgc3VyZmFjZUFsYmVkbyA9
IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkFsYmVkb0NvbG9yLnh5ejsKKyAgICBmbG9hdCBhbHBo
YSA9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkFsYmVkb0NvbG9yLnc7CisgICAgZmxvYXQ0IGFs
YmVkb1RleHR1cmUgPSBTYW1wbGUoYmluZEdyb3VwQy5hbGJlZG9TYW1wbGVyVGV4dHVyZSwgYmlu
ZEdyb3VwQy5hbGJlZG9TYW1wbGVyU2FtcGxlciwgdk1haW5VVjEgKyB1dk9mZnNldCk7CisgICAg
c3VyZmFjZUFsYmVkbyAqPSB0b0xpbmVhclNwYWNlKGFsYmVkb1RleHR1cmUueHl6KTsKKyAgICBz
dXJmYWNlQWxiZWRvICo9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkFsYmVkb0luZm9zLnk7Cisg
ICAgZmxvYXQzIGFtYmllbnRPY2NsdXNpb25Db2xvciA9IGZsb2F0MygxLiwgMS4sIDEuKTsKKyAg
ICBmbG9hdDMgYW1iaWVudE9jY2x1c2lvbkNvbG9yTWFwID0gU2FtcGxlKGJpbmRHcm91cEMuYW1i
aWVudFNhbXBsZXJUZXh0dXJlLCBiaW5kR3JvdXBDLmFtYmllbnRTYW1wbGVyU2FtcGxlciwgdk1h
aW5VVjEgKyB1dk9mZnNldCkueHl6ICogYmluZEdyb3VwQi5tYXRlcmlhbFswXS52QW1iaWVudElu
Zm9zLnk7CisgICAgYW1iaWVudE9jY2x1c2lvbkNvbG9yTWFwID0gZmxvYXQzKGFtYmllbnRPY2Ns
dXNpb25Db2xvck1hcC54LCBhbWJpZW50T2NjbHVzaW9uQ29sb3JNYXAueCwgYW1iaWVudE9jY2x1
c2lvbkNvbG9yTWFwLngpOworICAgIGFtYmllbnRPY2NsdXNpb25Db2xvciA9IGxlcnAoYW1iaWVu
dE9jY2x1c2lvbkNvbG9yLCBhbWJpZW50T2NjbHVzaW9uQ29sb3JNYXAsIGZsb2F0MyhiaW5kR3Jv
dXBCLm1hdGVyaWFsWzBdLnZBbWJpZW50SW5mb3MueiwgYmluZEdyb3VwQi5tYXRlcmlhbFswXS52
QW1iaWVudEluZm9zLnosIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkFtYmllbnRJbmZvcy56KSk7
CisgICAgZmxvYXQgbWljcm9TdXJmYWNlID0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVj
dGl2aXR5Q29sb3IudzsKKyAgICBmbG9hdDMgc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yID0gYmlu
ZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVjdGl2aXR5Q29sb3IueHl6OworICAgIGZsb2F0MiBt
ZXRhbGxpY1JvdWdobmVzcyA9IHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci54eTsKKyAgICBmbG9h
dDQgc3VyZmFjZU1ldGFsbGljQ29sb3JNYXAgPSBTYW1wbGUoYmluZEdyb3VwQy5yZWZsZWN0aXZp
dHlTYW1wbGVyVGV4dHVyZSwgYmluZEdyb3VwQy5yZWZsZWN0aXZpdHlTYW1wbGVyU2FtcGxlciwg
dk1haW5VVjEgKyB1dk9mZnNldCk7CisgICAgbWV0YWxsaWNSb3VnaG5lc3MueCAqPSBzdXJmYWNl
TWV0YWxsaWNDb2xvck1hcC56OworICAgIG1ldGFsbGljUm91Z2huZXNzLnkgKj0gc3VyZmFjZU1l
dGFsbGljQ29sb3JNYXAueTsKKyAgICBtaWNyb1N1cmZhY2UgPSAxLjAgLSBtZXRhbGxpY1JvdWdo
bmVzcy55OworICAgIGZsb2F0MyBiYXNlQ29sb3IgPSBzdXJmYWNlQWxiZWRvOworICAgIGZsb2F0
MyBEZWZhdWx0U3BlY3VsYXJSZWZsZWN0YW5jZURpZWxlY3RyaWMgPSBmbG9hdDMoMC4wNCwgMC4w
NCwgMC4wNCk7CisgICAgc3VyZmFjZUFsYmVkbyA9IGxlcnAoYmFzZUNvbG9yICogKDEuMCAtIERl
ZmF1bHRTcGVjdWxhclJlZmxlY3RhbmNlRGllbGVjdHJpYy54KSwgZmxvYXQzKDAuLCAwLiwgMC4p
LCBmbG9hdDMobWV0YWxsaWNSb3VnaG5lc3MueCwgbWV0YWxsaWNSb3VnaG5lc3MueCwgbWV0YWxs
aWNSb3VnaG5lc3MueCkpOworICAgIHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvciA9IGxlcnAoRGVm
YXVsdFNwZWN1bGFyUmVmbGVjdGFuY2VEaWVsZWN0cmljLCBiYXNlQ29sb3IsIGZsb2F0MyhtZXRh
bGxpY1JvdWdobmVzcy54LCBtZXRhbGxpY1JvdWdobmVzcy54LCBtZXRhbGxpY1JvdWdobmVzcy54
KSk7CisgICAgbWljcm9TdXJmYWNlID0gY2xhbXAobWljcm9TdXJmYWNlLCAwLjAsIDEuMCk7Cisg
ICAgZmxvYXQgcm91Z2huZXNzID0gMS4gLSBtaWNyb1N1cmZhY2U7CisgICAgZmxvYXQgTmRvdFZV
bmNsYW1wZWQgPSBkb3Qobm9ybWFsVywgdmlld0RpcmVjdGlvblcpOworICAgIGZsb2F0IE5kb3RW
ID0gYWJzKE5kb3RWVW5jbGFtcGVkKSArIDAuMDAwMDAwMTsKKyAgICBmbG9hdCBhbHBoYUcgPSBj
b252ZXJ0Um91Z2huZXNzVG9BdmVyYWdlU2xvcGUocm91Z2huZXNzKTsKKyAgICBmbG9hdDIgQUFS
b3VnaG5lc3NGYWN0b3JzID0gZ2V0QUFSb3VnaG5lc3NGYWN0b3JzKG5vcm1hbFcueHl6KTsKKyAg
ICBhbHBoYUcgKz0gQUFSb3VnaG5lc3NGYWN0b3JzLnk7CisgICAgZmxvYXQ0IGVudmlyb25tZW50
UmFkaWFuY2UgPSBmbG9hdDQoMC4sMC4sIDAuLCAwLik7CisgICAgZmxvYXQzIGVudmlyb25tZW50
SXJyYWRpYW5jZSA9IGZsb2F0MygwLiwgMC4sIDAuKTsKKyAgICBmbG9hdDMgcmVmbGVjdGlvblZl
Y3RvciA9IGNvbXB1dGVSZWZsZWN0aW9uQ29vcmRzKGZsb2F0NCh2UG9zaXRpb25XLCAxLjApLCBu
b3JtYWxXLCBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZFeWVQb3NpdGlvbiwgYmluZEdyb3VwQi5t
YXRlcmlhbFswXS5yZWZsZWN0aW9uTWF0cml4KTsKKyAgICBmbG9hdDMgcmVmbGVjdGlvbkNvb3Jk
cyA9IHJlZmxlY3Rpb25WZWN0b3I7CisgICAgZmxvYXQgcmVmbGVjdGlvbkxPRCA9IGdldExvZEZy
b21BbHBoYUcoYmluZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUlu
Zm9zLngsIGFscGhhRyk7CisgICAgcmVmbGVjdGlvbkxPRCA9IHJlZmxlY3Rpb25MT0QgKiBiaW5k
R3JvdXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueSArIGJpbmRH
cm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy56OworICAgIGZs
b2F0IHJlcXVlc3RlZFJlZmxlY3Rpb25MT0QgPSByZWZsZWN0aW9uTE9EOworICAgIGVudmlyb25t
ZW50UmFkaWFuY2UgPSBTYW1wbGUoYmluZEdyb3VwQy5yZWZsZWN0aW9uU2FtcGxlclRleHR1cmUs
IGJpbmRHcm91cEMucmVmbGVjdGlvblNhbXBsZXJTYW1wbGVyLCByZWZsZWN0aW9uQ29vcmRzLnh5
KTsgLy9TYW1wbGVMZXZlbChiaW5kR3JvdXBDLnJlZmxlY3Rpb25TYW1wbGVyVGV4dHVyZSwgYmlu
ZEdyb3VwQy5yZWZsZWN0aW9uU2FtcGxlclNhbXBsZXIsIHJlZmxlY3Rpb25Db29yZHMsIHJlcXVl
c3RlZFJlZmxlY3Rpb25MT0QpOworICAgIGVudmlyb25tZW50UmFkaWFuY2UueHl6ID0gZnJvbVJH
QkQoZW52aXJvbm1lbnRSYWRpYW5jZSk7CisgICAgZmxvYXQzIGlycmFkaWFuY2VWZWN0b3IgPSBt
dWwoYmluZEdyb3VwQi5tYXRlcmlhbFswXS5yZWZsZWN0aW9uTWF0cml4LCBmbG9hdDQobm9ybWFs
VywgMCkpLnh5ejsKKyAgICBlbnZpcm9ubWVudElycmFkaWFuY2UgPSBjb21wdXRlRW52aXJvbm1l
bnRJcnJhZGlhbmNlKGlycmFkaWFuY2VWZWN0b3IsICZiaW5kR3JvdXBCLm1hdGVyaWFsWzBdKTsK
KyAgICBlbnZpcm9ubWVudFJhZGlhbmNlLnh5eiAqPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZS
ZWZsZWN0aW9uSW5mb3MueDsKKyAgICBlbnZpcm9ubWVudFJhZGlhbmNlLnh5eiAqPSBiaW5kR3Jv
dXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0aW9uQ29sb3IueHl6OworICAgIGVudmlyb25tZW50SXJy
YWRpYW5jZSAqPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0aW9uQ29sb3IueHl6Owor
ICAgIGZsb2F0IHJlZmxlY3RhbmNlID0gbWF4KG1heChzdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3Iu
eCwgc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yLnkpLCBzdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3Iu
eik7CisgICAgZmxvYXQgcmVmbGVjdGFuY2U5MCA9IGZyZXNuZWxHcmF6aW5nUmVmbGVjdGFuY2Uo
cmVmbGVjdGFuY2UpOworICAgIGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50UjAgPSBzdXJmYWNl
UmVmbGVjdGl2aXR5Q29sb3IueHl6OworICAgIGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50Ujkw
ID0gZmxvYXQzKDEuMCwgMS4wLCAxLjApICogcmVmbGVjdGFuY2U5MDsKKyAgICBmbG9hdDMgZW52
aXJvbm1lbnRCcmRmID0gZ2V0QlJERkxvb2t1cChOZG90Viwgcm91Z2huZXNzLCBiaW5kR3JvdXBB
LmVudmlyb25tZW50QnJkZlNhbXBsZXJUZXh0dXJlLCBiaW5kR3JvdXBBLmVudmlyb25tZW50QnJk
ZlNhbXBsZXJTYW1wbGVyKTsKKyAgICBmbG9hdDMgZW5lcmd5Q29uc2VydmF0aW9uRmFjdG9yID0g
Z2V0RW5lcmd5Q29uc2VydmF0aW9uRmFjdG9yKHNwZWN1bGFyRW52aXJvbm1lbnRSMCwgZW52aXJv
bm1lbnRCcmRmKTsKKyAgICBmbG9hdDMgZGlmZnVzZUJhc2UgPSBmbG9hdDMoMC4sIDAuLCAwLik7
CisgICAgUHJlTGlnaHRpbmdJbmZvIHByZUluZm87CisgICAgTGlnaHRpbmdJbmZvIGluZm87Cisg
ICAgZmxvYXQgc2hhZG93ID0gMS47CisgICAgZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSZWZs
ZWN0YW5jZSA9IGdldFJlZmxlY3RhbmNlRnJvbUJSREZMb29rdXAoc3BlY3VsYXJFbnZpcm9ubWVu
dFIwLCBlbnZpcm9ubWVudEJyZGYpOworICAgIGZsb2F0IGFtYmllbnRNb25vY2hyb21lID0gYW1i
aWVudE9jY2x1c2lvbkNvbG9yLng7CisgICAgZmxvYXQgc2VvID0gZW52aXJvbm1lbnRSYWRpYW5j
ZU9jY2x1c2lvbihhbWJpZW50TW9ub2Nocm9tZSwgTmRvdFZVbmNsYW1wZWQpOworICAgIHNwZWN1
bGFyRW52aXJvbm1lbnRSZWZsZWN0YW5jZSAqPSBzZW87CisgICAgZmxvYXQgZWhvID0gZW52aXJv
bm1lbnRIb3Jpem9uT2NjbHVzaW9uKC12aWV3RGlyZWN0aW9uVywgbm9ybWFsVyk7CisgICAgc3Bl
Y3VsYXJFbnZpcm9ubWVudFJlZmxlY3RhbmNlICo9IGVobzsKKyAgICBmbG9hdDMgZmluYWxJcnJh
ZGlhbmNlID0gZW52aXJvbm1lbnRJcnJhZGlhbmNlOworICAgIGZpbmFsSXJyYWRpYW5jZSAqPSBz
dXJmYWNlQWxiZWRvLnh5ejsKKyAgICBmbG9hdDMgZmluYWxSYWRpYW5jZSA9IGVudmlyb25tZW50
UmFkaWFuY2UueHl6OworICAgIGZpbmFsUmFkaWFuY2UgKj0gc3BlY3VsYXJFbnZpcm9ubWVudFJl
ZmxlY3RhbmNlOworICAgIGZsb2F0MyBmaW5hbFJhZGlhbmNlU2NhbGVkID0gZmluYWxSYWRpYW5j
ZSAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkxpZ2h0aW5nSW50ZW5zaXR5Lno7CisgICAgZmlu
YWxSYWRpYW5jZVNjYWxlZCAqPSBlbmVyZ3lDb25zZXJ2YXRpb25GYWN0b3I7CisgICAgZmxvYXQz
IGZpbmFsRGlmZnVzZSA9IGRpZmZ1c2VCYXNlOworICAgIGZpbmFsRGlmZnVzZSAqPSBzdXJmYWNl
QWxiZWRvLnh5ejsKKyAgICBmaW5hbERpZmZ1c2UgPSBtYXgoZmluYWxEaWZmdXNlLCBmbG9hdDMo
MC4wLCAwLjAsIDAuMCkpOworICAgIGZsb2F0MyBmaW5hbEFtYmllbnQgPSBiaW5kR3JvdXBCLm1h
dGVyaWFsWzBdLnZBbWJpZW50Q29sb3I7CisgICAgZmluYWxBbWJpZW50ICo9IHN1cmZhY2VBbGJl
ZG8ueHl6OworICAgIGZsb2F0MyBmaW5hbEVtaXNzaXZlID0gYmluZEdyb3VwQi5tYXRlcmlhbFsw
XS52RW1pc3NpdmVDb2xvcjsKKyAgICBmbG9hdDMgZW1pc3NpdmVDb2xvclRleCA9IFNhbXBsZShi
aW5kR3JvdXBDLmVtaXNzaXZlU2FtcGxlclRleHR1cmUsIGJpbmRHcm91cEMuZW1pc3NpdmVTYW1w
bGVyU2FtcGxlciwgdk1haW5VVjEgKyB1dk9mZnNldCkueHl6OworICAgIGZpbmFsRW1pc3NpdmUg
Kj0gdG9MaW5lYXJTcGFjZShlbWlzc2l2ZUNvbG9yVGV4KTsKKyAgICBmaW5hbEVtaXNzaXZlICo9
IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkVtaXNzaXZlSW5mb3MueTsKKyAgICBmbG9hdDMgYW1i
aWVudE9jY2x1c2lvbkZvckRpcmVjdERpZmZ1c2UgPSBsZXJwKGZsb2F0MygxLiwgMS4sIDEuKSwg
YW1iaWVudE9jY2x1c2lvbkNvbG9yLCBmbG9hdDMoYmluZEdyb3VwQi5tYXRlcmlhbFswXS52QW1i
aWVudEluZm9zLncsIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkFtYmllbnRJbmZvcy53LCBiaW5k
R3JvdXBCLm1hdGVyaWFsWzBdLnZBbWJpZW50SW5mb3MudykpOworICAgIGZsb2F0NCBmaW5hbENv
bG9yID0gZmxvYXQ0KAorICAgICAgICBmaW5hbEFtYmllbnQgKiBhbWJpZW50T2NjbHVzaW9uQ29s
b3IgKworICAgICAgICBmaW5hbERpZmZ1c2UgKiBhbWJpZW50T2NjbHVzaW9uRm9yRGlyZWN0RGlm
ZnVzZSAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkxpZ2h0aW5nSW50ZW5zaXR5LnggKworICAg
ICAgICBmaW5hbElycmFkaWFuY2UgKiBhbWJpZW50T2NjbHVzaW9uQ29sb3IgKiBiaW5kR3JvdXBC
Lm1hdGVyaWFsWzBdLnZMaWdodGluZ0ludGVuc2l0eS56ICsKKyAgICAgICAgZmluYWxSYWRpYW5j
ZVNjYWxlZCArCisgICAgICAgIGZpbmFsRW1pc3NpdmUgKiBiaW5kR3JvdXBCLm1hdGVyaWFsWzBd
LnZMaWdodGluZ0ludGVuc2l0eS55LAorICAgICAgICBhbHBoYSk7CisgICAgZmluYWxDb2xvciA9
IG1heChmaW5hbENvbG9yLCBmbG9hdDQoMC4wLCAwLjAsIDAuMCwgMC4wKSk7CisgICAgZmluYWxD
b2xvciA9IGFwcGx5SW1hZ2VQcm9jZXNzaW5nKGZpbmFsQ29sb3IpOworICAgIGZpbmFsQ29sb3Iu
dyAqPSBiaW5kR3JvdXBCLm1lc2hbMF0udmlzaWJpbGl0eTsKKyAgICByZXR1cm4gZmluYWxDb2xv
cjsKK30KK2A7CisKK2NvbnN0IHZlcnRleFNoYWRlcldTTDIgPSBgCitzdHJ1Y3QgT3V0cHV0IHsK
KyAgICBmbG9hdDMgdlBvc2l0aW9uVyA6IGF0dHJpYnV0ZSgwKTsKKyAgICBmbG9hdDMgdk5vcm1h
bFcgOiBhdHRyaWJ1dGUoMSk7CisgICAgZmxvYXQzIHZQb3NpdGlvblVWVyA6IGF0dHJpYnV0ZSgy
KTsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKK30KKworc3RydWN0IFNjZW5l
IHsKKyAgICBmbG9hdDR4NCB2aWV3UHJvamVjdGlvbjsKKyAgICBmbG9hdDR4NCB2aWV3OworfQor
CitzdHJ1Y3QgQmluZEdyb3VwQSB7CisgICAgY29uc3RhbnQgU2NlbmVbXSBzY2VuZSA6IHJlZ2lz
dGVyKGIwLCBzcGFjZTApOworICAgIFRleHR1cmUyRDxmbG9hdDQ+IGVudmlyb25tZW50QnJkZlNh
bXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIodDEsIHNwYWNlMCk7CisgICAgc2FtcGxlciBlbnZpcm9u
bWVudEJyZGZTYW1wbGVyU2FtcGxlciA6IHJlZ2lzdGVyKHMyLCBzcGFjZTApOworfQorCitzdHJ1
Y3QgTWF0ZXJpYWwgeworICAgIGZsb2F0MiB2QWxiZWRvSW5mb3M7CisgICAgZmxvYXQ0IHZBbWJp
ZW50SW5mb3M7CisgICAgZmxvYXQyIHZPcGFjaXR5SW5mb3M7CisgICAgZmxvYXQyIHZFbWlzc2l2
ZUluZm9zOworICAgIGZsb2F0MiB2TGlnaHRtYXBJbmZvczsKKyAgICBmbG9hdDMgdlJlZmxlY3Rp
dml0eUluZm9zOworICAgIGZsb2F0MiB2TWljcm9TdXJmYWNlU2FtcGxlckluZm9zOworICAgIGZs
b2F0MiB2UmVmbGVjdGlvbkluZm9zOworICAgIGZsb2F0MyB2UmVmbGVjdGlvblBvc2l0aW9uOwor
ICAgIGZsb2F0MyB2UmVmbGVjdGlvblNpemU7CisgICAgZmxvYXQzIHZCdW1wSW5mb3M7CisgICAg
ZmxvYXQ0eDQgYWxiZWRvTWF0cml4OworICAgIGZsb2F0NHg0IGFtYmllbnRNYXRyaXg7CisgICAg
ZmxvYXQ0eDQgb3BhY2l0eU1hdHJpeDsKKyAgICBmbG9hdDR4NCBlbWlzc2l2ZU1hdHJpeDsKKyAg
ICBmbG9hdDR4NCBsaWdodG1hcE1hdHJpeDsKKyAgICBmbG9hdDR4NCByZWZsZWN0aXZpdHlNYXRy
aXg7CisgICAgZmxvYXQ0eDQgbWljcm9TdXJmYWNlU2FtcGxlck1hdHJpeDsKKyAgICBmbG9hdDR4
NCBidW1wTWF0cml4OworICAgIGZsb2F0MiB2VGFuZ2VudFNwYWNlUGFyYW1zOworICAgIGZsb2F0
NHg0IHJlZmxlY3Rpb25NYXRyaXg7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uQ29sb3I7CisgICAg
ZmxvYXQ0IHZBbGJlZG9Db2xvcjsKKyAgICBmbG9hdDQgdkxpZ2h0aW5nSW50ZW5zaXR5OworICAg
IGZsb2F0MyB2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zOworICAgIGZsb2F0IHBvaW50U2l6
ZTsKKyAgICBmbG9hdDQgdlJlZmxlY3Rpdml0eUNvbG9yOworICAgIGZsb2F0MyB2RW1pc3NpdmVD
b2xvcjsKKyAgICBmbG9hdDQgdkV5ZVBvc2l0aW9uOworICAgIGZsb2F0MyB2QW1iaWVudENvbG9y
OworICAgIGZsb2F0MiB2RGVidWdNb2RlOworICAgIGZsb2F0MiB2Q2xlYXJDb2F0UGFyYW1zOwor
ICAgIGZsb2F0NCB2Q2xlYXJDb2F0UmVmcmFjdGlvblBhcmFtczsKKyAgICBmbG9hdDIgdkNsZWFy
Q29hdEluZm9zOworICAgIGZsb2F0NHg0IGNsZWFyQ29hdE1hdHJpeDsKKyAgICBmbG9hdDIgdkNs
ZWFyQ29hdEJ1bXBJbmZvczsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdFRhbmdlbnRTcGFjZVBhcmFt
czsKKyAgICBmbG9hdDR4NCBjbGVhckNvYXRCdW1wTWF0cml4OworICAgIGZsb2F0NCB2Q2xlYXJD
b2F0VGludFBhcmFtczsKKyAgICBmbG9hdCBjbGVhckNvYXRDb2xvckF0RGlzdGFuY2U7CisgICAg
ZmxvYXQyIHZDbGVhckNvYXRUaW50SW5mb3M7CisgICAgZmxvYXQ0eDQgY2xlYXJDb2F0VGludE1h
dHJpeDsKKyAgICBmbG9hdDMgdkFuaXNvdHJvcHk7CisgICAgZmxvYXQyIHZBbmlzb3Ryb3B5SW5m
b3M7CisgICAgZmxvYXQ0eDQgYW5pc290cm9weU1hdHJpeDsKKyAgICBmbG9hdDQgdlNoZWVuQ29s
b3I7CisgICAgZmxvYXQyIHZTaGVlbkluZm9zOworICAgIGZsb2F0NHg0IHNoZWVuTWF0cml4Owor
ICAgIGZsb2F0MyB2UmVmcmFjdGlvbk1pY3Jvc3VyZmFjZUluZm9zOworICAgIGZsb2F0NCB2UmVm
cmFjdGlvbkluZm9zOworICAgIGZsb2F0NHg0IHJlZnJhY3Rpb25NYXRyaXg7CisgICAgZmxvYXQy
IHZUaGlja25lc3NJbmZvczsKKyAgICBmbG9hdDR4NCB0aGlja25lc3NNYXRyaXg7CisgICAgZmxv
YXQyIHZUaGlja25lc3NQYXJhbTsKKyAgICBmbG9hdDMgdkRpZmZ1c2lvbkRpc3RhbmNlOworICAg
IGZsb2F0NCB2VGludENvbG9yOworICAgIGZsb2F0MyB2U3ViU3VyZmFjZUludGVuc2l0eTsKKyAg
ICBmbG9hdDMgdlNwaGVyaWNhbEwwMDsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxXzE7CisgICAg
ZmxvYXQzIHZTcGhlcmljYWxMMTA7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMTE7CisgICAgZmxv
YXQzIHZTcGhlcmljYWxMMl8yOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDJfMTsKKyAgICBmbG9h
dDMgdlNwaGVyaWNhbEwyMDsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyMTsKKyAgICBmbG9hdDMg
dlNwaGVyaWNhbEwyMjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFg7CisgICAgZmxvYXQzIHZTcGhl
cmljYWxZOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFhY
X1paOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWVlfWlo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxa
WjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFhZOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWVo7Cisg
ICAgZmxvYXQzIHZTcGhlcmljYWxaWDsKK30KKworc3RydWN0IE1lc2ggeworICAgIGZsb2F0NHg0
IHdvcmxkOworICAgIGZsb2F0IHZpc2liaWxpdHk7Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBCIHsK
KyAgICBjb25zdGFudCBNYXRlcmlhbFtdIG1hdGVyaWFsIDogcmVnaXN0ZXIoYjAsIHNwYWNlMSk7
CisgICAgY29uc3RhbnQgTWVzaFtdIG1lc2ggOiByZWdpc3RlcihiMSwgc3BhY2UxKTsKK30KKwor
c3RydWN0IEJpbmRHcm91cEMgeworICAgIFRleHR1cmUyRDxmbG9hdDQ+IHJlZmxlY3Rpb25TYW1w
bGVyVGV4dHVyZSA6IHJlZ2lzdGVyKHQwLCBzcGFjZTIpOworICAgIHNhbXBsZXIgcmVmbGVjdGlv
blNhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczEsIHNwYWNlMik7Cit9CisKK2Zsb2F0M3gzIHRy
YW5zcG9zZU1hdDMoZmxvYXQzeDMgaW5NYXRyaXgpIHsKKyAgICBmbG9hdDMgaTAgPSBpbk1hdHJp
eFswXTsKKyAgICBmbG9hdDMgaTEgPSBpbk1hdHJpeFsxXTsKKyAgICBmbG9hdDMgaTIgPSBpbk1h
dHJpeFsyXTsKKyAgICBmbG9hdDN4MyBvdXRNYXRyaXggPSBmbG9hdDN4MygKKyAgICAgICAgZmxv
YXQzKGkwLngsIGkxLngsIGkyLngpLAorICAgICAgICBmbG9hdDMoaTAueSwgaTEueSwgaTIueSks
CisgICAgICAgIGZsb2F0MyhpMC56LCBpMS56LCBpMi56KQorICAgICk7CisgICAgcmV0dXJuIG91
dE1hdHJpeDsKK30KKworZmxvYXQzeDMgaW52ZXJzZU1hdDMoZmxvYXQzeDMgaW5NYXRyaXgpIHsK
KyAgICBmbG9hdCBhMDAgPSBpbk1hdHJpeFswXVswXSwgYTAxID0gaW5NYXRyaXhbMF1bMV0sIGEw
MiA9IGluTWF0cml4WzBdWzJdOworICAgIGZsb2F0IGExMCA9IGluTWF0cml4WzFdWzBdLCBhMTEg
PSBpbk1hdHJpeFsxXVsxXSwgYTEyID0gaW5NYXRyaXhbMV1bMl07CisgICAgZmxvYXQgYTIwID0g
aW5NYXRyaXhbMl1bMF0sIGEyMSA9IGluTWF0cml4WzJdWzFdLCBhMjIgPSBpbk1hdHJpeFsyXVsy
XTsKKyAgICBmbG9hdCBiMDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjE7CisgICAgZmxvYXQgYjEx
ID0gLWEyMiAqIGExMCArIGExMiAqIGEyMDsKKyAgICBmbG9hdCBiMjEgPSBhMjEgKiBhMTAgLSBh
MTEgKiBhMjA7CisgICAgZmxvYXQgZGV0ID0gYTAwICogYjAxICsgYTAxICogYjExICsgYTAyICog
YjIxOworICAgIHJldHVybiBmbG9hdDN4MyhiMDEsIC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEsIGEx
MiAqIGEwMSAtIGEwMiAqIGExMSwKKyAgICAgICAgYjExLCBhMjIgKiBhMDAgLSBhMDIgKiBhMjAs
IC1hMTIgKiBhMDAgKyBhMDIgKiBhMTAsCisgICAgICAgIGIyMSwgLWEyMSAqIGEwMCArIGEwMSAq
IGEyMCwgYTExICogYTAwIC0gYTAxICogYTEwKSAvIGRldDsKK30KKworZmxvYXQzIHRvTGluZWFy
U3BhY2UoZmxvYXQzIGNvbG9yKSB7CisgICAgcmV0dXJuIHBvdyhjb2xvciwgZmxvYXQzKDIuMiwg
Mi4yLCAyLjIpKTsKK30KKworZmxvYXQzIHRvR2FtbWFTcGFjZShmbG9hdDMgY29sb3IpIHsKKyAg
ICByZXR1cm4gcG93KGNvbG9yLCBmbG9hdDMoMS4wIC8gMi4yLCAxLjAgLyAyLjIsIDEuMCAvIDIu
MikpOworfQorCitmbG9hdCBzcXVhcmUoZmxvYXQgdmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUg
KiB2YWx1ZTsKK30KKworZmxvYXQgcG93NShmbG9hdCB2YWx1ZSkgeworICAgIGZsb2F0IHNxID0g
dmFsdWUgKiB2YWx1ZTsKKyAgICByZXR1cm4gc3EgKiBzcSAqIHZhbHVlOworfQorCitmbG9hdCBn
ZXRMdW1pbmFuY2UoZmxvYXQzIGNvbG9yKSB7CisgICAgcmV0dXJuIGNsYW1wKGRvdChjb2xvciwg
ZmxvYXQzKDAuMjEyNiwgMC43MTUyLCAwLjA3MjIpKSwgMC4sIDEuKTsKK30KKworZmxvYXQgZ2V0
UmFuZChmbG9hdDIgc2VlZCkgeworICAgIHJldHVybiBmcmFjKHNpbihkb3Qoc2VlZC54eSwgZmxv
YXQyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpOworfQorCitmbG9hdCBkaXRoZXIo
ZmxvYXQyIHNlZWQsIGZsb2F0IHZhcmlhbmNlQW1vdW50KSB7CisgICAgZmxvYXQgcmFuZCA9IGdl
dFJhbmQoc2VlZCk7CisgICAgZmxvYXQgZGl0aGVyID0gbGVycCgtdmFyaWFuY2VBbW91bnQgLyAy
NTUuMCwgdmFyaWFuY2VBbW91bnQgLyAyNTUuMCwgcmFuZCk7CisgICAgcmV0dXJuIGRpdGhlcjsK
K30KKworZmxvYXQ0IHRvUkdCRChmbG9hdDMgY29sb3IpIHsKKyAgICBmbG9hdCBtYXhSR0IgPSBt
YXgobWF4KGNvbG9yLngsIG1heChjb2xvci55LCBjb2xvci56KSksIDAuMDAwMDAwMSk7CisgICAg
ZmxvYXQgRCA9IG1heCgyNTUuMCAvIG1heFJHQiwgMS4pOworICAgIEQgPSBjbGFtcChmbG9vcihE
KSAvIDI1NS4wLCAwLiwgMS4pOworICAgIGZsb2F0MyByZ2IgPSBjb2xvciAqIEQ7CisgICAgcmdi
ID0gdG9HYW1tYVNwYWNlKHJnYik7CisgICAgcmV0dXJuIGZsb2F0NChyZ2IsIEQpOworfQorCitm
bG9hdDMgZnJvbVJHQkQoZmxvYXQ0IHJnYmQpIHsKKyAgICByZ2JkLnh5eiA9IHRvTGluZWFyU3Bh
Y2UocmdiZC54eXopOworICAgIHJldHVybiByZ2JkLnh5eiAvIHJnYmQudzsKK30KKwordmVydGV4
IE91dHB1dCBtYWluKGZsb2F0MyBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQzIG5vcm1h
bCA6IGF0dHJpYnV0ZSgxKSwgQmluZEdyb3VwQSBiaW5kR3JvdXBBLCBCaW5kR3JvdXBCIGJpbmRH
cm91cEIsIEJpbmRHcm91cEMgYmluZEdyb3VwQykgeworICAgIE91dHB1dCBvdXRwdXQ7CisgICAg
ZmxvYXQzIHBvc2l0aW9uVXBkYXRlZCA9IHBvc2l0aW9uOworICAgIGZsb2F0MyBub3JtYWxVcGRh
dGVkID0gbm9ybWFsOworICAgIG91dHB1dC52UG9zaXRpb25VVlcgPSBwb3NpdGlvblVwZGF0ZWQ7
CisgICAgZmxvYXQ0eDQgZmluYWxXb3JsZCA9IGJpbmRHcm91cEIubWVzaFswXS53b3JsZDsKKyAg
ICBvdXRwdXQucG9zaXRpb24gPSBtdWwobXVsKGJpbmRHcm91cEEuc2NlbmVbMF0udmlld1Byb2pl
Y3Rpb24sIGZpbmFsV29ybGQpLCBmbG9hdDQocG9zaXRpb25VcGRhdGVkLCAxLjApKTsKKyAgICBm
bG9hdDQgd29ybGRQb3MgPSBtdWwoZmluYWxXb3JsZCwgZmxvYXQ0KHBvc2l0aW9uVXBkYXRlZCwg
MS4wKSk7CisgICAgb3V0cHV0LnZQb3NpdGlvblcgPSB3b3JsZFBvcy54eXo7CisgICAgZmxvYXQz
eDMgbm9ybWFsV29ybGQ7CisgICAgbm9ybWFsV29ybGRbMF0gPSBmaW5hbFdvcmxkWzBdLnh5ejsK
KyAgICBub3JtYWxXb3JsZFsxXSA9IGZpbmFsV29ybGRbMV0ueHl6OworICAgIG5vcm1hbFdvcmxk
WzJdID0gZmluYWxXb3JsZFsyXS54eXo7CisgICAgb3V0cHV0LnZOb3JtYWxXID0gbm9ybWFsaXpl
KG11bChub3JtYWxXb3JsZCwgbm9ybWFsVXBkYXRlZCkpOworICAgIGZsb2F0MiB1dlVwZGF0ZWQ7
CisgICAgZmxvYXQyIHV2MjsKKyAgICByZXR1cm4gb3V0cHV0OworfQorYDsKKworY29uc3QgZnJh
Z21lbnRTaGFkZXJXU0wyID0gYAorc3RydWN0IFNjZW5lIHsKKyAgICBmbG9hdDR4NCB2aWV3UHJv
amVjdGlvbjsKKyAgICBmbG9hdDR4NCB2aWV3OworfQorCitzdHJ1Y3QgQmluZEdyb3VwQSB7Cisg
ICAgY29uc3RhbnQgU2NlbmVbXSBzY2VuZSA6IHJlZ2lzdGVyKGIwLCBzcGFjZTApOworICAgIFRl
eHR1cmUyRDxmbG9hdDQ+IGVudmlyb25tZW50QnJkZlNhbXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIo
dDEsIHNwYWNlMCk7CisgICAgc2FtcGxlciBlbnZpcm9ubWVudEJyZGZTYW1wbGVyU2FtcGxlciA6
IHJlZ2lzdGVyKHMyLCBzcGFjZTApOworfQorCitzdHJ1Y3QgTWF0ZXJpYWwgeworICAgIGZsb2F0
MiB2QWxiZWRvSW5mb3M7CisgICAgZmxvYXQ0IHZBbWJpZW50SW5mb3M7CisgICAgZmxvYXQyIHZP
cGFjaXR5SW5mb3M7CisgICAgZmxvYXQyIHZFbWlzc2l2ZUluZm9zOworICAgIGZsb2F0MiB2TGln
aHRtYXBJbmZvczsKKyAgICBmbG9hdDMgdlJlZmxlY3Rpdml0eUluZm9zOworICAgIGZsb2F0MiB2
TWljcm9TdXJmYWNlU2FtcGxlckluZm9zOworICAgIGZsb2F0MiB2UmVmbGVjdGlvbkluZm9zOwor
ICAgIGZsb2F0MyB2UmVmbGVjdGlvblBvc2l0aW9uOworICAgIGZsb2F0MyB2UmVmbGVjdGlvblNp
emU7CisgICAgZmxvYXQzIHZCdW1wSW5mb3M7CisgICAgZmxvYXQ0eDQgYWxiZWRvTWF0cml4Owor
ICAgIGZsb2F0NHg0IGFtYmllbnRNYXRyaXg7CisgICAgZmxvYXQ0eDQgb3BhY2l0eU1hdHJpeDsK
KyAgICBmbG9hdDR4NCBlbWlzc2l2ZU1hdHJpeDsKKyAgICBmbG9hdDR4NCBsaWdodG1hcE1hdHJp
eDsKKyAgICBmbG9hdDR4NCByZWZsZWN0aXZpdHlNYXRyaXg7CisgICAgZmxvYXQ0eDQgbWljcm9T
dXJmYWNlU2FtcGxlck1hdHJpeDsKKyAgICBmbG9hdDR4NCBidW1wTWF0cml4OworICAgIGZsb2F0
MiB2VGFuZ2VudFNwYWNlUGFyYW1zOworICAgIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXg7Cisg
ICAgZmxvYXQzIHZSZWZsZWN0aW9uQ29sb3I7CisgICAgZmxvYXQ0IHZBbGJlZG9Db2xvcjsKKyAg
ICBmbG9hdDQgdkxpZ2h0aW5nSW50ZW5zaXR5OworICAgIGZsb2F0MyB2UmVmbGVjdGlvbk1pY3Jv
c3VyZmFjZUluZm9zOworICAgIGZsb2F0IHBvaW50U2l6ZTsKKyAgICBmbG9hdDQgdlJlZmxlY3Rp
dml0eUNvbG9yOworICAgIGZsb2F0MyB2RW1pc3NpdmVDb2xvcjsKKyAgICBmbG9hdDQgdkV5ZVBv
c2l0aW9uOworICAgIGZsb2F0MyB2QW1iaWVudENvbG9yOworICAgIGZsb2F0MiB2RGVidWdNb2Rl
OworICAgIGZsb2F0MiB2Q2xlYXJDb2F0UGFyYW1zOworICAgIGZsb2F0NCB2Q2xlYXJDb2F0UmVm
cmFjdGlvblBhcmFtczsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdEluZm9zOworICAgIGZsb2F0NHg0
IGNsZWFyQ29hdE1hdHJpeDsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdEJ1bXBJbmZvczsKKyAgICBm
bG9hdDIgdkNsZWFyQ29hdFRhbmdlbnRTcGFjZVBhcmFtczsKKyAgICBmbG9hdDR4NCBjbGVhckNv
YXRCdW1wTWF0cml4OworICAgIGZsb2F0NCB2Q2xlYXJDb2F0VGludFBhcmFtczsKKyAgICBmbG9h
dCBjbGVhckNvYXRDb2xvckF0RGlzdGFuY2U7CisgICAgZmxvYXQyIHZDbGVhckNvYXRUaW50SW5m
b3M7CisgICAgZmxvYXQ0eDQgY2xlYXJDb2F0VGludE1hdHJpeDsKKyAgICBmbG9hdDMgdkFuaXNv
dHJvcHk7CisgICAgZmxvYXQyIHZBbmlzb3Ryb3B5SW5mb3M7CisgICAgZmxvYXQ0eDQgYW5pc290
cm9weU1hdHJpeDsKKyAgICBmbG9hdDQgdlNoZWVuQ29sb3I7CisgICAgZmxvYXQyIHZTaGVlbklu
Zm9zOworICAgIGZsb2F0NHg0IHNoZWVuTWF0cml4OworICAgIGZsb2F0MyB2UmVmcmFjdGlvbk1p
Y3Jvc3VyZmFjZUluZm9zOworICAgIGZsb2F0NCB2UmVmcmFjdGlvbkluZm9zOworICAgIGZsb2F0
NHg0IHJlZnJhY3Rpb25NYXRyaXg7CisgICAgZmxvYXQyIHZUaGlja25lc3NJbmZvczsKKyAgICBm
bG9hdDR4NCB0aGlja25lc3NNYXRyaXg7CisgICAgZmxvYXQyIHZUaGlja25lc3NQYXJhbTsKKyAg
ICBmbG9hdDMgdkRpZmZ1c2lvbkRpc3RhbmNlOworICAgIGZsb2F0NCB2VGludENvbG9yOworICAg
IGZsb2F0MyB2U3ViU3VyZmFjZUludGVuc2l0eTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwwMDsK
KyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxXzE7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMTA7Cisg
ICAgZmxvYXQzIHZTcGhlcmljYWxMMTE7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMl8yOworICAg
IGZsb2F0MyB2U3BoZXJpY2FsTDJfMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyMDsKKyAgICBm
bG9hdDMgdlNwaGVyaWNhbEwyMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyMjsKKyAgICBmbG9h
dDMgdlNwaGVyaWNhbFg7CisgICAgZmxvYXQzIHZTcGhlcmljYWxZOworICAgIGZsb2F0MyB2U3Bo
ZXJpY2FsWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFhYX1paOworICAgIGZsb2F0MyB2U3BoZXJp
Y2FsWVlfWlo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxaWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNh
bFhZOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWVo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxaWDsK
K30KKworc3RydWN0IE1lc2ggeworICAgIGZsb2F0NHg0IHdvcmxkOworICAgIGZsb2F0IHZpc2li
aWxpdHk7Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBCIHsKKyAgICBjb25zdGFudCBNYXRlcmlhbFtd
IG1hdGVyaWFsIDogcmVnaXN0ZXIoYjAsIHNwYWNlMSk7CisgICAgY29uc3RhbnQgTWVzaFtdIG1l
c2ggOiByZWdpc3RlcihiMSwgc3BhY2UxKTsKK30KKworc3RydWN0IEJpbmRHcm91cEMgeworICAg
IFRleHR1cmUyRDxmbG9hdDQ+IHJlZmxlY3Rpb25TYW1wbGVyVGV4dHVyZSA6IHJlZ2lzdGVyKHQw
LCBzcGFjZTIpOworICAgIHNhbXBsZXIgcmVmbGVjdGlvblNhbXBsZXJTYW1wbGVyIDogcmVnaXN0
ZXIoczEsIHNwYWNlMik7Cit9CisKK2Zsb2F0M3gzIHRyYW5zcG9zZU1hdDMoZmxvYXQzeDMgaW5N
YXRyaXgpIHsKKyAgICBmbG9hdDMgaTAgPSBpbk1hdHJpeFswXTsKKyAgICBmbG9hdDMgaTEgPSBp
bk1hdHJpeFsxXTsKKyAgICBmbG9hdDMgaTIgPSBpbk1hdHJpeFsyXTsKKyAgICBmbG9hdDN4MyBv
dXRNYXRyaXggPSBmbG9hdDN4MygKKyAgICAgICAgZmxvYXQzKGkwLngsIGkxLngsIGkyLngpLAor
ICAgICAgICBmbG9hdDMoaTAueSwgaTEueSwgaTIueSksCisgICAgICAgIGZsb2F0MyhpMC56LCBp
MS56LCBpMi56KQorICAgICk7CisgICAgcmV0dXJuIG91dE1hdHJpeDsKK30KKworZmxvYXQzeDMg
aW52ZXJzZU1hdDMoZmxvYXQzeDMgaW5NYXRyaXgpIHsKKyAgICBmbG9hdCBhMDAgPSBpbk1hdHJp
eFswXVswXSwgYTAxID0gaW5NYXRyaXhbMF1bMV0sIGEwMiA9IGluTWF0cml4WzBdWzJdOworICAg
IGZsb2F0IGExMCA9IGluTWF0cml4WzFdWzBdLCBhMTEgPSBpbk1hdHJpeFsxXVsxXSwgYTEyID0g
aW5NYXRyaXhbMV1bMl07CisgICAgZmxvYXQgYTIwID0gaW5NYXRyaXhbMl1bMF0sIGEyMSA9IGlu
TWF0cml4WzJdWzFdLCBhMjIgPSBpbk1hdHJpeFsyXVsyXTsKKyAgICBmbG9hdCBiMDEgPSBhMjIg
KiBhMTEgLSBhMTIgKiBhMjE7CisgICAgZmxvYXQgYjExID0gLWEyMiAqIGExMCArIGExMiAqIGEy
MDsKKyAgICBmbG9hdCBiMjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7CisgICAgZmxvYXQgZGV0
ID0gYTAwICogYjAxICsgYTAxICogYjExICsgYTAyICogYjIxOworICAgIHJldHVybiBmbG9hdDN4
MyhiMDEsIC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEsIGExMiAqIGEwMSAtIGEwMiAqIGExMSwKKyAg
ICAgICAgYjExLCBhMjIgKiBhMDAgLSBhMDIgKiBhMjAsIC1hMTIgKiBhMDAgKyBhMDIgKiBhMTAs
CisgICAgICAgIGIyMSwgLWEyMSAqIGEwMCArIGEwMSAqIGEyMCwgYTExICogYTAwIC0gYTAxICog
YTEwKSAvIGRldDsKK30KKworZmxvYXQzIHRvTGluZWFyU3BhY2UoZmxvYXQzIGNvbG9yKSB7Cisg
ICAgcmV0dXJuIHBvdyhjb2xvciwgZmxvYXQzKDIuMiwgMi4yLCAyLjIpKTsKK30KKworZmxvYXQz
IHRvR2FtbWFTcGFjZShmbG9hdDMgY29sb3IpIHsKKyAgICByZXR1cm4gcG93KGNvbG9yLCBmbG9h
dDMoMS4wIC8gMi4yLCAxLjAgLyAyLjIsIDEuMCAvIDIuMikpOworfQorCitmbG9hdCBzcXVhcmUo
ZmxvYXQgdmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUgKiB2YWx1ZTsKK30KKworZmxvYXQgcG93
NShmbG9hdCB2YWx1ZSkgeworICAgIGZsb2F0IHNxID0gdmFsdWUgKiB2YWx1ZTsKKyAgICByZXR1
cm4gc3EgKiBzcSAqIHZhbHVlOworfQorCitmbG9hdCBnZXRMdW1pbmFuY2UoZmxvYXQzIGNvbG9y
KSB7CisgICAgcmV0dXJuIGNsYW1wKGRvdChjb2xvciwgZmxvYXQzKDAuMjEyNiwgMC43MTUyLCAw
LjA3MjIpKSwgMC4sIDEuKTsKK30KKworZmxvYXQgZ2V0UmFuZChmbG9hdDIgc2VlZCkgeworICAg
IHJldHVybiBmcmFjKHNpbihkb3Qoc2VlZC54eSwgZmxvYXQyKDEyLjk4OTgsIDc4LjIzMykpKSAq
IDQzNzU4LjU0NTMpOworfQorCitmbG9hdCBkaXRoZXIoZmxvYXQyIHNlZWQsIGZsb2F0IHZhcmlh
bmNlQW1vdW50KSB7CisgICAgZmxvYXQgcmFuZCA9IGdldFJhbmQoc2VlZCk7CisgICAgZmxvYXQg
ZGl0aGVyID0gbGVycCgtdmFyaWFuY2VBbW91bnQgLyAyNTUuMCwgdmFyaWFuY2VBbW91bnQgLyAy
NTUuMCwgcmFuZCk7CisgICAgcmV0dXJuIGRpdGhlcjsKK30KKworZmxvYXQ0IHRvUkdCRChmbG9h
dDMgY29sb3IpIHsKKyAgICBmbG9hdCBtYXhSR0IgPSBtYXgobWF4KGNvbG9yLngsIG1heChjb2xv
ci55LCBjb2xvci56KSksIDAuMDAwMDAwMSk7CisgICAgZmxvYXQgRCA9IG1heCgyNTUuMCAvIG1h
eFJHQiwgMS4pOworICAgIEQgPSBjbGFtcChmbG9vcihEKSAvIDI1NS4wLCAwLiwgMS4pOworICAg
IGZsb2F0MyByZ2IgPSBjb2xvciAqIEQ7CisgICAgcmdiID0gdG9HYW1tYVNwYWNlKHJnYik7Cisg
ICAgcmV0dXJuIGZsb2F0NChyZ2IsIEQpOworfQorCitmbG9hdDMgZnJvbVJHQkQoZmxvYXQ0IHJn
YmQpIHsKKyAgICByZ2JkLnh5eiA9IHRvTGluZWFyU3BhY2UocmdiZC54eXopOworICAgIHJldHVy
biByZ2JkLnh5eiAvIHJnYmQudzsKK30KKworZmxvYXQgY29udmVydFJvdWdobmVzc1RvQXZlcmFn
ZVNsb3BlKGZsb2F0IHJvdWdobmVzcykgeworICAgIHJldHVybiBzcXVhcmUocm91Z2huZXNzKSAr
IDAuMDAwNTsKK30KKworZmxvYXQgZnJlc25lbEdyYXppbmdSZWZsZWN0YW5jZShmbG9hdCByZWZs
ZWN0YW5jZTApIHsKKyAgICBmbG9hdCByZWZsZWN0YW5jZTkwID0gY2xhbXAocmVmbGVjdGFuY2Uw
ICogMjUuMCwgMC4wLCAxLjApOworICAgIHJldHVybiByZWZsZWN0YW5jZTkwOworfQorCitmbG9h
dDIgZ2V0QUFSb3VnaG5lc3NGYWN0b3JzKGZsb2F0MyBub3JtYWxWZWN0b3IpIHsKKyAgICByZXR1
cm4gZmxvYXQyKDAuLCAwLik7Cit9CisKK2Zsb2F0NCBhcHBseUltYWdlUHJvY2Vzc2luZyhmbG9h
dDQgcmVzdWx0KSB7CisgICAgcmVzdWx0Lnh5eiA9IHRvR2FtbWFTcGFjZShyZXN1bHQueHl6KTsK
KyAgICByZXN1bHQueHl6ID0gY2xhbXAocmVzdWx0Lnh5eiwgZmxvYXQzKDAuMCwgMC4wLCAwLjAp
LCBmbG9hdDMoMS4wLCAxLjAsIDEuMCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0cnVj
dCBQcmVMaWdodGluZ0luZm8geworICAgIGZsb2F0MyBsaWdodE9mZnNldDsKKyAgICBmbG9hdCBs
aWdodERpc3RhbmNlU3F1YXJlZDsKKyAgICBmbG9hdCBsaWdodERpc3RhbmNlOworICAgIGZsb2F0
IGF0dGVudWF0aW9uOworICAgIGZsb2F0MyBMOworICAgIGZsb2F0MyBIOworICAgIGZsb2F0IE5k
b3RWOworICAgIGZsb2F0IE5kb3RMVW5jbGFtcGVkOworICAgIGZsb2F0IE5kb3RMOworICAgIGZs
b2F0IFZkb3RIOworICAgIGZsb2F0IHJvdWdobmVzczsKK30KKworUHJlTGlnaHRpbmdJbmZvIGNv
bXB1dGVQb2ludEFuZFNwb3RQcmVMaWdodGluZ0luZm8oZmxvYXQ0IGxpZ2h0RGF0YSwgZmxvYXQz
IFYsIGZsb2F0MyBOLCBmbG9hdDMgdlBvc2l0aW9uVykgeworICAgIFByZUxpZ2h0aW5nSW5mbyBy
ZXN1bHQ7CisgICAgcmVzdWx0LmxpZ2h0T2Zmc2V0ID0gbGlnaHREYXRhLnh5eiAtIHZQb3NpdGlv
blc7CisgICAgcmVzdWx0LmxpZ2h0RGlzdGFuY2VTcXVhcmVkID0gZG90KHJlc3VsdC5saWdodE9m
ZnNldCwgcmVzdWx0LmxpZ2h0T2Zmc2V0KTsKKyAgICByZXN1bHQubGlnaHREaXN0YW5jZSA9IHNx
cnQocmVzdWx0LmxpZ2h0RGlzdGFuY2VTcXVhcmVkKTsKKyAgICByZXN1bHQuTCA9IG5vcm1hbGl6
ZShyZXN1bHQubGlnaHRPZmZzZXQpOworICAgIHJlc3VsdC5IID0gbm9ybWFsaXplKFYgKyByZXN1
bHQuTCk7CisgICAgcmVzdWx0LlZkb3RIID0gY2xhbXAoZG90KFYsIHJlc3VsdC5IKSwgMC4wLCAx
LjApOworICAgIHJlc3VsdC5OZG90TFVuY2xhbXBlZCA9IGRvdChOLCByZXN1bHQuTCk7CisgICAg
cmVzdWx0Lk5kb3RMID0gY2xhbXAocmVzdWx0Lk5kb3RMVW5jbGFtcGVkLCAwLjAwMDAwMDEsIDEu
MCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHJlTGlnaHRpbmdJbmZvIGNvbXB1dGVEaXJl
Y3Rpb25hbFByZUxpZ2h0aW5nSW5mbyhmbG9hdDQgbGlnaHREYXRhLCBmbG9hdDMgViwgZmxvYXQz
IE4pIHsKKyAgICBQcmVMaWdodGluZ0luZm8gcmVzdWx0OworICAgIHJlc3VsdC5saWdodERpc3Rh
bmNlID0gbGVuZ3RoKC1saWdodERhdGEueHl6KTsKKyAgICByZXN1bHQuTCA9IG5vcm1hbGl6ZSgt
bGlnaHREYXRhLnh5eik7CisgICAgcmVzdWx0LkggPSBub3JtYWxpemUoViArIHJlc3VsdC5MKTsK
KyAgICByZXN1bHQuVmRvdEggPSBjbGFtcChkb3QoViwgcmVzdWx0LkgpLCAwLjAsIDEuMCk7Cisg
ICAgcmVzdWx0Lk5kb3RMVW5jbGFtcGVkID0gZG90KE4sIHJlc3VsdC5MKTsKKyAgICByZXN1bHQu
TmRvdEwgPSBjbGFtcChyZXN1bHQuTmRvdExVbmNsYW1wZWQsIDAuMDAwMDAwMSwgMS4wKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitQcmVMaWdodGluZ0luZm8gY29tcHV0ZUhlbWlzcGhlcmlj
UHJlTGlnaHRpbmdJbmZvKGZsb2F0NCBsaWdodERhdGEsIGZsb2F0MyBWLCBmbG9hdDMgTikgewor
ICAgIFByZUxpZ2h0aW5nSW5mbyByZXN1bHQ7CisgICAgcmVzdWx0Lk5kb3RMID0gZG90KE4sIGxp
Z2h0RGF0YS54eXopICogMC41ICsgMC41OworICAgIHJlc3VsdC5OZG90TCA9IGNsYW1wKHJlc3Vs
dC5OZG90TCwgMC4wMDAwMDAxLCAxLjApOworICAgIHJlc3VsdC5OZG90TFVuY2xhbXBlZCA9IHJl
c3VsdC5OZG90TDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmbG9hdCBjb21wdXRlRGlzdGFu
Y2VMaWdodEZhbGxvZmZfU3RhbmRhcmQoZmxvYXQzIGxpZ2h0T2Zmc2V0LCBmbG9hdCByYW5nZSkg
eworICAgIHJldHVybiBtYXgoMC4sIDEuMCAtIGxlbmd0aChsaWdodE9mZnNldCkgLyByYW5nZSk7
Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9QaHlzaWNhbChmbG9hdCBs
aWdodERpc3RhbmNlU3F1YXJlZCkgeworICAgIHJldHVybiAxLjAgLyBtYXgobGlnaHREaXN0YW5j
ZVNxdWFyZWQsIDAuMDAwMDAwMSk7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFs
bG9mZl9HTFRGKGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkLCBmbG9hdCBpbnZlcnNlU3F1YXJl
ZFJhbmdlKSB7CisgICAgZmxvYXQgbGlnaHREaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgobGln
aHREaXN0YW5jZVNxdWFyZWQsIDAuMDAwMDAwMSk7CisgICAgZmxvYXQgZmFjdG9yID0gbGlnaHRE
aXN0YW5jZVNxdWFyZWQgKiBpbnZlcnNlU3F1YXJlZFJhbmdlOworICAgIGZsb2F0IGF0dGVudWF0
aW9uID0gY2xhbXAoMS4wIC0gZmFjdG9yICogZmFjdG9yLCAwLjAsIDEuMCk7CisgICAgYXR0ZW51
YXRpb24gKj0gYXR0ZW51YXRpb247CisgICAgbGlnaHREaXN0YW5jZUZhbGxvZmYgKj0gYXR0ZW51
YXRpb247CisgICAgcmV0dXJuIGxpZ2h0RGlzdGFuY2VGYWxsb2ZmOworfQorCitmbG9hdCBjb21w
dXRlRGlzdGFuY2VMaWdodEZhbGxvZmYoZmxvYXQzIGxpZ2h0T2Zmc2V0LCBmbG9hdCBsaWdodERp
c3RhbmNlU3F1YXJlZCwgZmxvYXQgcmFuZ2UsIGZsb2F0IGludmVyc2VTcXVhcmVkUmFuZ2UpIHsK
KyAgICByZXR1cm4gY29tcHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGxpZ2h0RGlz
dGFuY2VTcXVhcmVkKTsKK30KKworZmxvYXQgY29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2Zm
X1N0YW5kYXJkKGZsb2F0MyBsaWdodERpcmVjdGlvbiwgZmxvYXQzIGRpcmVjdGlvblRvTGlnaHRD
ZW50ZXJXLCBmbG9hdCBjb3NIYWxmQW5nbGUsIGZsb2F0IGV4cG9uZW50KSB7CisgICAgZmxvYXQg
ZmFsbG9mZiA9IDAuMDsKKyAgICBmbG9hdCBjb3NBbmdsZSA9IG1heChkb3QoLWxpZ2h0RGlyZWN0
aW9uLCBkaXJlY3Rpb25Ub0xpZ2h0Q2VudGVyVyksIDAuMDAwMDAwMSk7CisgICAgaWYgKGNvc0Fu
Z2xlID49IGNvc0hhbGZBbmdsZSkgeworICAgICAgICBmYWxsb2ZmID0gbWF4KDAuLCBwb3coY29z
QW5nbGUsIGV4cG9uZW50KSk7CisgICAgfQorICAgIHJldHVybiBmYWxsb2ZmOworfQorCitmbG9h
dCBjb21wdXRlRGlyZWN0aW9uYWxMaWdodEZhbGxvZmZfUGh5c2ljYWwoZmxvYXQzIGxpZ2h0RGly
ZWN0aW9uLCBmbG9hdDMgZGlyZWN0aW9uVG9MaWdodENlbnRlclcsIGZsb2F0IGNvc0hhbGZBbmds
ZSkgeworICAgIGZsb2F0IGtNaW51c0xvZzJDb25lQW5nbGVJbnRlbnNpdHlSYXRpbyA9IDYuNjQz
ODU2MTg5Nzc7CisgICAgZmxvYXQgY29uY2VudHJhdGlvbkthcHBhID0ga01pbnVzTG9nMkNvbmVB
bmdsZUludGVuc2l0eVJhdGlvIC8gKDEuMCAtIGNvc0hhbGZBbmdsZSk7CisgICAgZmxvYXQ0IGxp
Z2h0RGlyZWN0aW9uU3ByZWFkU0cgPSBmbG9hdDQoLWxpZ2h0RGlyZWN0aW9uICogY29uY2VudHJh
dGlvbkthcHBhLCAtY29uY2VudHJhdGlvbkthcHBhKTsKKyAgICBmbG9hdCBmYWxsb2ZmID0gZXhw
Mihkb3QoZmxvYXQ0KGRpcmVjdGlvblRvTGlnaHRDZW50ZXJXLCAxLjApLCBsaWdodERpcmVjdGlv
blNwcmVhZFNHKSk7CisgICAgcmV0dXJuIGZhbGxvZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXJl
Y3Rpb25hbExpZ2h0RmFsbG9mZl9HTFRGKGZsb2F0MyBsaWdodERpcmVjdGlvbiwgZmxvYXQzIGRp
cmVjdGlvblRvTGlnaHRDZW50ZXJXLCBmbG9hdCBsaWdodEFuZ2xlU2NhbGUsIGZsb2F0IGxpZ2h0
QW5nbGVPZmZzZXQpIHsKKyAgICBmbG9hdCBjZCA9IGRvdCgtbGlnaHREaXJlY3Rpb24sIGRpcmVj
dGlvblRvTGlnaHRDZW50ZXJXKTsKKyAgICBmbG9hdCBmYWxsb2ZmID0gY2xhbXAoY2QgKiBsaWdo
dEFuZ2xlU2NhbGUgKyBsaWdodEFuZ2xlT2Zmc2V0LCAwLjAsIDEuMCk7CisgICAgZmFsbG9mZiAq
PSBmYWxsb2ZmOworICAgIHJldHVybiBmYWxsb2ZmOworfQorCitmbG9hdCBjb21wdXRlRGlyZWN0
aW9uYWxMaWdodEZhbGxvZmYoZmxvYXQzIGxpZ2h0RGlyZWN0aW9uLCBmbG9hdDMgZGlyZWN0aW9u
VG9MaWdodENlbnRlclcsIGZsb2F0IGNvc0hhbGZBbmdsZSwgZmxvYXQgZXhwb25lbnQsIGZsb2F0
IGxpZ2h0QW5nbGVTY2FsZSwgZmxvYXQgbGlnaHRBbmdsZU9mZnNldCkgeworICAgIHJldHVybiBj
b21wdXRlRGlyZWN0aW9uYWxMaWdodEZhbGxvZmZfUGh5c2ljYWwobGlnaHREaXJlY3Rpb24sIGRp
cmVjdGlvblRvTGlnaHRDZW50ZXJXLCBjb3NIYWxmQW5nbGUpOworfQorCitmbG9hdDMgZ2V0RW5l
cmd5Q29uc2VydmF0aW9uRmFjdG9yKGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50UjAsIGZsb2F0
MyBlbnZpcm9ubWVudEJyZGYpIHsKKyAgICByZXR1cm4gZmxvYXQzKDEuMCwgMS4wLCAxLjApICsg
c3BlY3VsYXJFbnZpcm9ubWVudFIwICogKDEuMCAvIGVudmlyb25tZW50QnJkZi55IC0gMS4wKTsK
K30KKworZmxvYXQzIGdldEJSREZMb29rdXAoZmxvYXQgTmRvdFYsIGZsb2F0IHBlcmNlcHR1YWxS
b3VnaG5lc3MsIFRleHR1cmUyRDxmbG9hdDQ+IGVudmlyb25tZW50QnJkZlNhbXBsZXJUZXh0dXJl
LCBzYW1wbGVyIGVudmlyb25tZW50QnJkZlNhbXBsZXJTYW1wbGVyKSB7CisgICAgZmxvYXQyIFVW
ID0gZmxvYXQyKE5kb3RWLCBwZXJjZXB0dWFsUm91Z2huZXNzKTsKKyAgICBmbG9hdDQgYnJkZkxv
b2t1cCA9IFNhbXBsZShlbnZpcm9ubWVudEJyZGZTYW1wbGVyVGV4dHVyZSwgZW52aXJvbm1lbnRC
cmRmU2FtcGxlclNhbXBsZXIsIFVWKTsKKyAgICByZXR1cm4gYnJkZkxvb2t1cC54eXo7Cit9CisK
K2Zsb2F0MyBnZXRSZWZsZWN0YW5jZUZyb21CUkRGTG9va3VwKGZsb2F0MyBzcGVjdWxhckVudmly
b25tZW50UjAsIGZsb2F0MyBlbnZpcm9ubWVudEJyZGYpIHsKKyAgICBmbG9hdDMgcmVmbGVjdGFu
Y2UgPSBsZXJwKGVudmlyb25tZW50QnJkZi54eHgsIGVudmlyb25tZW50QnJkZi55eXksIHNwZWN1
bGFyRW52aXJvbm1lbnRSMCk7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlOworfQorCitmbG9hdDMg
Z2V0UmVmbGVjdGFuY2VGcm9tQW5hbHl0aWNhbEJSREZMb29rdXBfSm9uZXMoZmxvYXQgVmRvdE4s
IGZsb2F0MyByZWZsZWN0YW5jZTAsIGZsb2F0MyByZWZsZWN0YW5jZTkwLCBmbG9hdCBzbW9vdGhu
ZXNzKSB7CisgICAgZmxvYXQgd2VpZ2h0ID0gbGVycCgwLjI1LCAxLjAsIHNtb290aG5lc3MpOwor
ICAgIHJldHVybiByZWZsZWN0YW5jZTAgKyB3ZWlnaHQgKiAocmVmbGVjdGFuY2U5MCAtIHJlZmxl
Y3RhbmNlMCkgKiBwb3c1KGNsYW1wKDEuMCAtIFZkb3ROLCAwLjAsIDEuMCkpOworfQorCitmbG9h
dDMgZnJlc25lbFNjaGxpY2tHR1goZmxvYXQgVmRvdEgsIGZsb2F0MyByZWZsZWN0YW5jZTAsIGZs
b2F0MyByZWZsZWN0YW5jZTkwKSB7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlMCArIChyZWZsZWN0
YW5jZTkwIC0gcmVmbGVjdGFuY2UwKSAqIHBvdzUoMS4wIC0gVmRvdEgpOworfQorCitmbG9hdCBm
cmVzbmVsU2NobGlja0dHWChmbG9hdCBWZG90SCwgZmxvYXQgcmVmbGVjdGFuY2UwLCBmbG9hdCBy
ZWZsZWN0YW5jZTkwKSB7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlMCArIChyZWZsZWN0YW5jZTkw
IC0gcmVmbGVjdGFuY2UwKSAqIHBvdzUoMS4wIC0gVmRvdEgpOworfQorCitmbG9hdCBub3JtYWxE
aXN0cmlidXRpb25GdW5jdGlvbl9Ucm93YnJpZGdlUmVpdHpHR1goZmxvYXQgTmRvdEgsIGZsb2F0
IGFscGhhRykgeworICAgIGZsb2F0IGEyID0gc3F1YXJlKGFscGhhRyk7CisgICAgZmxvYXQgZCA9
IE5kb3RIICogTmRvdEggKiAoYTIgLSAxLjApICsgMS4wOworICAgIHJldHVybiBhMiAvICgzLjE0
MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUgKiBkICogZCk7Cit9CisKK2Zsb2F0IHNtaXRo
VmlzaWJpbGl0eV9HR1hDb3JyZWxhdGVkKGZsb2F0IE5kb3RMLCBmbG9hdCBOZG90ViwgZmxvYXQg
YWxwaGFHKSB7CisgICAgZmxvYXQgYTIgPSBhbHBoYUcgKiBhbHBoYUc7CisgICAgZmxvYXQgR0dY
ViA9IE5kb3RMICogc3FydChOZG90ViAqIChOZG90ViAtIGEyICogTmRvdFYpICsgYTIpOworICAg
IGZsb2F0IEdHWEwgPSBOZG90ViAqIHNxcnQoTmRvdEwgKiAoTmRvdEwgLSBhMiAqIE5kb3RMKSAr
IGEyKTsKKyAgICByZXR1cm4gMC41IC8gKEdHWFYgKyBHR1hMKTsKK30KKworZmxvYXQgZGlmZnVz
ZUJSREZfQnVybGV5KGZsb2F0IE5kb3RMLCBmbG9hdCBOZG90ViwgZmxvYXQgVmRvdEgsIGZsb2F0
IHJvdWdobmVzcykgeworICAgIGZsb2F0IGRpZmZ1c2VGcmVzbmVsTlYgPSBwb3c1KGNsYW1wKDEu
MCAtIE5kb3RMLCAwLjAwMDAwMDEsIDEuMCkpOworICAgIGZsb2F0IGRpZmZ1c2VGcmVzbmVsTkwg
PSBwb3c1KGNsYW1wKDEuMCAtIE5kb3RWLCAwLjAwMDAwMDEsIDEuMCkpOworICAgIGZsb2F0IGRp
ZmZ1c2VGcmVzbmVsOTAgPSAwLjUgKyAyLjAgKiBWZG90SCAqIFZkb3RIICogcm91Z2huZXNzOwor
ICAgIGZsb2F0IGZyZXNuZWwgPSAoMS4wICsgKGRpZmZ1c2VGcmVzbmVsOTAgLSAxLjApICogZGlm
ZnVzZUZyZXNuZWxOTCkgKgorICAgICAgICAoMS4wICsgKGRpZmZ1c2VGcmVzbmVsOTAgLSAxLjAp
ICogZGlmZnVzZUZyZXNuZWxOVik7CisgICAgcmV0dXJuIGZyZXNuZWwgLyAzLjE0MTU5MjY1MzU4
OTc5MzIzODQ2MjY0MzM4MzI3OTU7Cit9CisKK3N0cnVjdCBMaWdodGluZ0luZm8geworICAgIGZs
b2F0MyBkaWZmdXNlOworfQorCitmbG9hdCBhZGp1c3RSb3VnaG5lc3NGcm9tTGlnaHRQcm9wZXJ0
aWVzKGZsb2F0IHJvdWdobmVzcywgZmxvYXQgbGlnaHRSYWRpdXMsIGZsb2F0IGxpZ2h0RGlzdGFu
Y2UpIHsKKyAgICBmbG9hdCBsaWdodFJvdWdobmVzcyA9IGxpZ2h0UmFkaXVzIC8gbGlnaHREaXN0
YW5jZTsKKyAgICBmbG9hdCB0b3RhbFJvdWdobmVzcyA9IGNsYW1wKGxpZ2h0Um91Z2huZXNzICsg
cm91Z2huZXNzLCAwLjAsIDEuMCk7CisgICAgcmV0dXJuIHRvdGFsUm91Z2huZXNzOworfQorCitm
bG9hdDMgY29tcHV0ZUhlbWlzcGhlcmljRGlmZnVzZUxpZ2h0aW5nKFByZUxpZ2h0aW5nSW5mbyBp
bmZvLCBmbG9hdDMgbGlnaHRDb2xvciwgZmxvYXQzIGdyb3VuZENvbG9yKSB7CisgICAgcmV0dXJu
IGxlcnAoZ3JvdW5kQ29sb3IsIGxpZ2h0Q29sb3IsIGZsb2F0MyhpbmZvLk5kb3RMLCBpbmZvLk5k
b3RMLCBpbmZvLk5kb3RMKSk7Cit9CisKK2Zsb2F0MyBjb21wdXRlRGlmZnVzZUxpZ2h0aW5nKFBy
ZUxpZ2h0aW5nSW5mbyBpbmZvLCBmbG9hdDMgbGlnaHRDb2xvcikgeworICAgIGZsb2F0IGRpZmZ1
c2VUZXJtID0gZGlmZnVzZUJSREZfQnVybGV5KGluZm8uTmRvdEwsIGluZm8uTmRvdFYsIGluZm8u
VmRvdEgsIGluZm8ucm91Z2huZXNzKTsKKyAgICByZXR1cm4gZGlmZnVzZVRlcm0gKiBpbmZvLmF0
dGVudWF0aW9uICogaW5mby5OZG90TCAqIGxpZ2h0Q29sb3I7Cit9CisKK2Zsb2F0MiBjb21wdXRl
UHJvamVjdGlvblRleHR1cmVEaWZmdXNlTGlnaHRpbmdVVihmbG9hdDR4NCB0ZXh0dXJlUHJvamVj
dGlvbk1hdHJpeCwgZmxvYXQzIHZQb3NpdGlvblcpIHsKKyAgICBmbG9hdDQgc3RycSA9IG11bCh0
ZXh0dXJlUHJvamVjdGlvbk1hdHJpeCwgZmxvYXQ0KHZQb3NpdGlvblcsIDEuMCkpOworICAgIHN0
cnEgLz0gc3RycS53OworICAgIHJldHVybiBzdHJxLnh5OworfQorCitmbG9hdCBnZXRMb2RGcm9t
QWxwaGFHKGZsb2F0IGN1YmVNYXBEaW1lbnNpb25QaXhlbHMsIGZsb2F0IG1pY3Jvc3VyZmFjZUF2
ZXJhZ2VTbG9wZSkgeworICAgIGZsb2F0IG1pY3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZVRleGVscyA9
IGN1YmVNYXBEaW1lbnNpb25QaXhlbHMgKiBtaWNyb3N1cmZhY2VBdmVyYWdlU2xvcGU7CisgICAg
ZmxvYXQgbG9kID0gbG9nMihtaWNyb3N1cmZhY2VBdmVyYWdlU2xvcGVUZXhlbHMpOworICAgIHJl
dHVybiBsb2Q7Cit9CisKK2Zsb2F0IGdldExpbmVhckxvZEZyb21Sb3VnaG5lc3MoZmxvYXQgY3Vi
ZU1hcERpbWVuc2lvblBpeGVscywgZmxvYXQgcm91Z2huZXNzKSB7CisgICAgZmxvYXQgbG9kID0g
bG9nMihjdWJlTWFwRGltZW5zaW9uUGl4ZWxzKSAqIHJvdWdobmVzczsKKyAgICByZXR1cm4gbG9k
OworfQorCitmbG9hdCBlbnZpcm9ubWVudFJhZGlhbmNlT2NjbHVzaW9uKGZsb2F0IGFtYmllbnRP
Y2NsdXNpb24sIGZsb2F0IE5kb3RWVW5jbGFtcGVkKSB7CisgICAgZmxvYXQgdGVtcCA9IE5kb3RW
VW5jbGFtcGVkICsgYW1iaWVudE9jY2x1c2lvbjsKKyAgICByZXR1cm4gY2xhbXAoc3F1YXJlKHRl
bXApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiwgMC4wLCAxLjApOworfQorCitmbG9hdCBlbnZp
cm9ubWVudEhvcml6b25PY2NsdXNpb24oZmxvYXQzIHZpZXcsIGZsb2F0MyBub3JtYWwpIHsKKyAg
ICBmbG9hdDMgcmVmbGVjdGlvbiA9IHJlZmxlY3Qodmlldywgbm9ybWFsKTsKKyAgICBmbG9hdCB0
ZW1wID0gY2xhbXAoMS4wICsgMS4xICogZG90KHJlZmxlY3Rpb24sIG5vcm1hbCksIDAuMCwgMS4w
KTsKKyAgICByZXR1cm4gc3F1YXJlKHRlbXApOworfQorCitmbG9hdDMgcGFyYWxsYXhDb3JyZWN0
Tm9ybWFsKGZsb2F0MyB2ZXJ0ZXhQb3MsIGZsb2F0MyBvcmlnVmVjLCBmbG9hdDMgY3ViZVNpemUs
IGZsb2F0MyBjdWJlUG9zKSB7CisgICAgZmxvYXQzIGludk9yaWdWZWMgPSBmbG9hdDMoMS4wLCAx
LjAsIDEuMCkgLyBvcmlnVmVjOworICAgIGZsb2F0MyBoYWxmU2l6ZSA9IGN1YmVTaXplICogMC41
OworICAgIGZsb2F0MyBpbnRlcnNlY0F0TWF4UGxhbmUgPSAoY3ViZVBvcyArIGhhbGZTaXplIC0g
dmVydGV4UG9zKSAqIGludk9yaWdWZWM7CisgICAgZmxvYXQzIGludGVyc2VjQXRNaW5QbGFuZSA9
IChjdWJlUG9zIC0gaGFsZlNpemUgLSB2ZXJ0ZXhQb3MpICogaW52T3JpZ1ZlYzsKKyAgICBmbG9h
dDMgbGFyZ2VzdEludGVyc2VjID0gbWF4KGludGVyc2VjQXRNYXhQbGFuZSwgaW50ZXJzZWNBdE1p
blBsYW5lKTsKKyAgICBmbG9hdCBkaXN0YW5jZSA9IG1pbihtaW4obGFyZ2VzdEludGVyc2VjLngs
IGxhcmdlc3RJbnRlcnNlYy55KSwgbGFyZ2VzdEludGVyc2VjLnopOworICAgIGZsb2F0MyBpbnRl
cnNlY3RQb3NpdGlvbldTID0gdmVydGV4UG9zICsgb3JpZ1ZlYyAqIGRpc3RhbmNlOworICAgIHJl
dHVybiBpbnRlcnNlY3RQb3NpdGlvbldTIC0gY3ViZVBvczsKK30KKworZmxvYXQzIGNvbXB1dGVG
aXhlZEVxdWlyZWN0YW5ndWxhckNvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5v
cm1hbCwgZmxvYXQzIGRpcmVjdGlvbikgeworICAgIGZsb2F0IGxvbiA9IGF0YW4yKGRpcmVjdGlv
bi56LCBkaXJlY3Rpb24ueCk7CisgICAgZmxvYXQgbGF0ID0gYWNvcyhkaXJlY3Rpb24ueSk7Cisg
ICAgZmxvYXQyIHNwaGVyZUNvb3JkcyA9IGZsb2F0Mihsb24sIGxhdCkgKiAwLjE1OTE1NDk0ICog
Mi4wOworICAgIGZsb2F0IHMgPSBzcGhlcmVDb29yZHMueCAqIDAuNSArIDAuNTsKKyAgICBmbG9h
dCB0ID0gc3BoZXJlQ29vcmRzLnk7CisgICAgcmV0dXJuIGZsb2F0MyhzLCB0LCAwKTsKK30KKwor
ZmxvYXQzIGNvbXB1dGVNaXJyb3JlZEZpeGVkRXF1aXJlY3Rhbmd1bGFyQ29vcmRzKGZsb2F0NCB3
b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9hdDMgZGlyZWN0aW9uKSB7CisgICAgZmxv
YXQgbG9uID0gYXRhbjIoZGlyZWN0aW9uLnosIGRpcmVjdGlvbi54KTsKKyAgICBmbG9hdCBsYXQg
PSBhY29zKGRpcmVjdGlvbi55KTsKKyAgICBmbG9hdDIgc3BoZXJlQ29vcmRzID0gZmxvYXQyKGxv
biwgbGF0KSAqIDAuMTU5MTU0OTQgKiAyLjA7CisgICAgZmxvYXQgcyA9IHNwaGVyZUNvb3Jkcy54
ICogMC41ICsgMC41OworICAgIGZsb2F0IHQgPSBzcGhlcmVDb29yZHMueTsKKyAgICByZXR1cm4g
ZmxvYXQzKDEuMCAtIHMsIHQsIDApOworfQorCitmbG9hdDMgY29tcHV0ZUVxdWlyZWN0YW5ndWxh
ckNvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQzIGV5ZVBv
c2l0aW9uLCBmbG9hdDR4NCByZWZsZWN0aW9uTWF0cml4KSB7CisgICAgZmxvYXQzIGNhbWVyYVRv
VmVydGV4ID0gbm9ybWFsaXplKHdvcmxkUG9zLnh5eiAtIGV5ZVBvc2l0aW9uKTsKKyAgICBmbG9h
dDMgciA9IG5vcm1hbGl6ZShyZWZsZWN0KGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCkpOwor
ICAgIHIgPSBtdWwocmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KHIsIDApKS54eXo7CisgICAgZmxv
YXQgbG9uID0gYXRhbjIoci56LCByLngpOworICAgIGZsb2F0IGxhdCA9IGFjb3Moci55KTsKKyAg
ICBmbG9hdDIgc3BoZXJlQ29vcmRzID0gZmxvYXQyKGxvbiwgbGF0KSAqIDAuMTU5MTU0OTQgKiAy
LjA7CisgICAgZmxvYXQgcyA9IHNwaGVyZUNvb3Jkcy54ICogMC41ICsgMC41OworICAgIGZsb2F0
IHQgPSBzcGhlcmVDb29yZHMueTsKKyAgICByZXR1cm4gZmxvYXQzKHMsIHQsIDApOworfQorCitm
bG9hdDMgY29tcHV0ZVNwaGVyaWNhbENvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3Js
ZE5vcm1hbCwgZmxvYXQ0eDQgdmlldywgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAg
IGZsb2F0MyB2aWV3RGlyID0gbm9ybWFsaXplKG11bCh2aWV3LCB3b3JsZFBvcykueHl6KTsKKyAg
ICBmbG9hdDMgdmlld05vcm1hbCA9IG5vcm1hbGl6ZShtdWwodmlldywgZmxvYXQ0KHdvcmxkTm9y
bWFsLCAwLjApKS54eXopOworICAgIGZsb2F0MyByID0gcmVmbGVjdCh2aWV3RGlyLCB2aWV3Tm9y
bWFsKTsKKyAgICByID0gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChyLCAwKSkueHl6Owor
ICAgIHIueiA9IHIueiAtIDEuMDsKKyAgICBmbG9hdCBtID0gMi4wICogbGVuZ3RoKHIpOworICAg
IHJldHVybiBmbG9hdDMoci54IC8gbSArIDAuNSwgMS4wIC0gci55IC8gbSAtIDAuNSwgMCk7Cit9
CisKK2Zsb2F0MyBjb21wdXRlUGxhbmFyQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdv
cmxkTm9ybWFsLCBmbG9hdDMgZXllUG9zaXRpb24sIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgp
IHsKKyAgICBmbG9hdDMgdmlld0RpciA9IHdvcmxkUG9zLnh5eiAtIGV5ZVBvc2l0aW9uOworICAg
IGZsb2F0MyBjb29yZHMgPSBub3JtYWxpemUocmVmbGVjdCh2aWV3RGlyLCB3b3JsZE5vcm1hbCkp
OworICAgIHJldHVybiBtdWwocmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KGNvb3JkcywgMSkpLnh5
ejsKK30KKworZmxvYXQzIGNvbXB1dGVDdWJpY0Nvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0
MyB3b3JsZE5vcm1hbCwgZmxvYXQzIGV5ZVBvc2l0aW9uLCBmbG9hdDR4NCByZWZsZWN0aW9uTWF0
cml4KSB7CisgICAgZmxvYXQzIHZpZXdEaXIgPSBub3JtYWxpemUod29ybGRQb3MueHl6IC0gZXll
UG9zaXRpb24pOworICAgIGZsb2F0MyBjb29yZHMgPSByZWZsZWN0KHZpZXdEaXIsIHdvcmxkTm9y
bWFsKTsKKyAgICBjb29yZHMgPSBtdWwocmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KGNvb3Jkcywg
MCkpLnh5ejsKKyAgICByZXR1cm4gY29vcmRzOworfQorCitmbG9hdDMgY29tcHV0ZUN1YmljTG9j
YWxDb29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29ybGROb3JtYWwsIGZsb2F0MyBleWVQ
b3NpdGlvbiwgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQzIHJlZmxlY3Rpb25TaXpl
LCBmbG9hdDMgcmVmbGVjdGlvblBvc2l0aW9uKSB7CisgICAgZmxvYXQzIHZpZXdEaXIgPSBub3Jt
YWxpemUod29ybGRQb3MueHl6IC0gZXllUG9zaXRpb24pOworICAgIGZsb2F0MyBjb29yZHMgPSBy
ZWZsZWN0KHZpZXdEaXIsIHdvcmxkTm9ybWFsKTsKKyAgICBjb29yZHMgPSBwYXJhbGxheENvcnJl
Y3ROb3JtYWwod29ybGRQb3MueHl6LCBjb29yZHMsIHJlZmxlY3Rpb25TaXplLCByZWZsZWN0aW9u
UG9zaXRpb24pOworICAgIGNvb3JkcyA9IG11bChyZWZsZWN0aW9uTWF0cml4LCBmbG9hdDQoY29v
cmRzLCAwKSkueHl6OworICAgIHJldHVybiBjb29yZHM7Cit9CisKK2Zsb2F0MyBjb21wdXRlUHJv
amVjdGlvbkNvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0NHg0IHZpZXcsIGZsb2F0NHg0IHJl
ZmxlY3Rpb25NYXRyaXgpIHsKKyAgICByZXR1cm4gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIG11bCh2
aWV3LCB3b3JsZFBvcykpLnh5ejsKK30KKworZmxvYXQzIGNvbXB1dGVTa3lCb3hDb29yZHMoZmxv
YXQzIHBvc2l0aW9uVywgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAgIHJldHVybiBt
dWwocmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KHBvc2l0aW9uVywgMCkpLnh5ejsKK30KKworZmxv
YXQzIGNvbXB1dGVSZWZsZWN0aW9uQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxk
Tm9ybWFsLCBmbG9hdDMgdlBvc2l0aW9uVVZXLCBmbG9hdDR4NCByZWZsZWN0aW9uTWF0cml4KSB7
CisgICAgZmxvYXQgciA9IGxlbmd0aCh2UG9zaXRpb25VVlcpOworICAgIGZsb2F0IGdhbW1hID0g
YXRhbjIodlBvc2l0aW9uVVZXLngsIHZQb3NpdGlvblVWVy56KTsKKyAgICBmbG9hdCB0aGV0YSA9
IGFjb3ModlBvc2l0aW9uVVZXLnkgLyByKTsKKyAgICByZXR1cm4gZmxvYXQzKGdhbW1hIC8gMy4x
NDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1ICsgMC41LCB0aGV0YSAvIDMuMTQxNTkyNjUz
NTg5NzkzMjM4NDYyNjQzMzgzMjc5NSwgcik7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBtYWluKGZs
b2F0MyB2UG9zaXRpb25XIDogYXR0cmlidXRlKDApLCBmbG9hdDMgdk5vcm1hbFcgOiBhdHRyaWJ1
dGUoMSksIGZsb2F0MyB2UG9zaXRpb25VVlcgOiBhdHRyaWJ1dGUoMiksIEJpbmRHcm91cEEgYmlu
ZEdyb3VwQSwgQmluZEdyb3VwQiBiaW5kR3JvdXBCLCBCaW5kR3JvdXBDIGJpbmRHcm91cEMsIGJv
b2wgZnJvbnRGYWNlIDogU1ZfSXNGcm9udEZhY2UpIDogU1ZfVGFyZ2V0IDAgeworICAgIGZsb2F0
MyB2aWV3RGlyZWN0aW9uVyA9IG5vcm1hbGl6ZShiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZFeWVQ
b3NpdGlvbi54eXogLSB2UG9zaXRpb25XKTsKKyAgICBmbG9hdDMgbm9ybWFsVyA9IG5vcm1hbGl6
ZSh2Tm9ybWFsVyk7CisgICAgZmxvYXQyIHV2T2Zmc2V0ID0gZmxvYXQyKDAuMCwgMC4wKTsKKyAg
ICBub3JtYWxXID0gZnJvbnRGYWNlID8gbm9ybWFsVyA6IC1ub3JtYWxXOworICAgIGZsb2F0MyBz
dXJmYWNlQWxiZWRvID0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52QWxiZWRvQ29sb3IueHl6Owor
ICAgIGZsb2F0IGFscGhhID0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52QWxiZWRvQ29sb3IudzsK
KyAgICBmbG9hdDMgYW1iaWVudE9jY2x1c2lvbkNvbG9yID0gZmxvYXQzKDEuLCAxLiwgMS4pOwor
ICAgIGZsb2F0IG1pY3JvU3VyZmFjZSA9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rp
dml0eUNvbG9yLnc7CisgICAgZmxvYXQzIHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvciA9IGJpbmRH
cm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpdml0eUNvbG9yLnh5ejsKKyAgICBtaWNyb1N1cmZh
Y2UgPSBjbGFtcChtaWNyb1N1cmZhY2UsIDAuMCwgMS4wKTsKKyAgICBmbG9hdCByb3VnaG5lc3Mg
PSAxLiAtIG1pY3JvU3VyZmFjZTsKKyAgICBmbG9hdCBOZG90VlVuY2xhbXBlZCA9IGRvdChub3Jt
YWxXLCB2aWV3RGlyZWN0aW9uVyk7CisgICAgZmxvYXQgTmRvdFYgPSBhYnMoTmRvdFZVbmNsYW1w
ZWQpICsgMC4wMDAwMDAxOworICAgIGZsb2F0IGFscGhhRyA9IGNvbnZlcnRSb3VnaG5lc3NUb0F2
ZXJhZ2VTbG9wZShyb3VnaG5lc3MpOworICAgIGZsb2F0MiBBQVJvdWdobmVzc0ZhY3RvcnMgPSBn
ZXRBQVJvdWdobmVzc0ZhY3RvcnMobm9ybWFsVyk7CisgICAgZmxvYXQ0IGVudmlyb25tZW50UmFk
aWFuY2UgPSBmbG9hdDQoMC4sIDAuLCAwLiwgMC4pOworICAgIGZsb2F0MyBlbnZpcm9ubWVudEly
cmFkaWFuY2UgPSBmbG9hdDMoMC4sIDAuLCAwLik7CisgICAgZmxvYXQzIHJlZmxlY3Rpb25WZWN0
b3IgPSBjb21wdXRlUmVmbGVjdGlvbkNvb3JkcyhmbG9hdDQodlBvc2l0aW9uVywgMS4wKSwgbm9y
bWFsVywgdlBvc2l0aW9uVVZXLCBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnJlZmxlY3Rpb25NYXRy
aXgpOworICAgIGZsb2F0MyByZWZsZWN0aW9uQ29vcmRzID0gcmVmbGVjdGlvblZlY3RvcjsKKyAg
ICBmbG9hdCByZWZsZWN0aW9uTE9EID0gZ2V0TG9kRnJvbUFscGhhRyhiaW5kR3JvdXBCLm1hdGVy
aWFsWzBdLnZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueCwgYWxwaGFHKTsKKyAgICByZWZs
ZWN0aW9uTE9EID0gcmVmbGVjdGlvbkxPRCAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxl
Y3Rpb25NaWNyb3N1cmZhY2VJbmZvcy55ICsgYmluZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVj
dGlvbk1pY3Jvc3VyZmFjZUluZm9zLno7CisgICAgZmxvYXQgcmVxdWVzdGVkUmVmbGVjdGlvbkxP
RCA9IHJlZmxlY3Rpb25MT0Q7CisgICAgZW52aXJvbm1lbnRSYWRpYW5jZSA9IFNhbXBsZShiaW5k
R3JvdXBDLnJlZmxlY3Rpb25TYW1wbGVyVGV4dHVyZSwgYmluZEdyb3VwQy5yZWZsZWN0aW9uU2Ft
cGxlclNhbXBsZXIsIHJlZmxlY3Rpb25Db29yZHMueHkpOyAvL1NhbXBsZUxldmVsKGJpbmRHcm91
cEMucmVmbGVjdGlvblNhbXBsZXJUZXh0dXJlLCBiaW5kR3JvdXBDLnJlZmxlY3Rpb25TYW1wbGVy
U2FtcGxlciwgcmVmbGVjdGlvbkNvb3JkcywgcmVxdWVzdGVkUmVmbGVjdGlvbkxPRCk7CisgICAg
ZW52aXJvbm1lbnRSYWRpYW5jZS54eXogPSBmcm9tUkdCRChlbnZpcm9ubWVudFJhZGlhbmNlKTsK
KyAgICBlbnZpcm9ubWVudFJhZGlhbmNlLnh5eiAqPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZS
ZWZsZWN0aW9uSW5mb3MueDsKKyAgICBlbnZpcm9ubWVudFJhZGlhbmNlLnh5eiAqPSBiaW5kR3Jv
dXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0aW9uQ29sb3IueHl6OworICAgIGVudmlyb25tZW50SXJy
YWRpYW5jZSAqPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0aW9uQ29sb3IueHl6Owor
ICAgIGZsb2F0IHJlZmxlY3RhbmNlID0gbWF4KG1heChzdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3Iu
eCwgc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yLnkpLCBzdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3Iu
eik7CisgICAgZmxvYXQgcmVmbGVjdGFuY2U5MCA9IGZyZXNuZWxHcmF6aW5nUmVmbGVjdGFuY2Uo
cmVmbGVjdGFuY2UpOworICAgIGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50UjAgPSBzdXJmYWNl
UmVmbGVjdGl2aXR5Q29sb3IueHl6OworICAgIGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50Ujkw
ID0gZmxvYXQzKDEuMCwgMS4wLCAxLjApICogcmVmbGVjdGFuY2U5MDsKKyAgICBmbG9hdDMgZW52
aXJvbm1lbnRCcmRmID0gZ2V0QlJERkxvb2t1cChOZG90Viwgcm91Z2huZXNzLCBiaW5kR3JvdXBB
LmVudmlyb25tZW50QnJkZlNhbXBsZXJUZXh0dXJlLCBiaW5kR3JvdXBBLmVudmlyb25tZW50QnJk
ZlNhbXBsZXJTYW1wbGVyKTsKKyAgICBmbG9hdDMgZW5lcmd5Q29uc2VydmF0aW9uRmFjdG9yID0g
Z2V0RW5lcmd5Q29uc2VydmF0aW9uRmFjdG9yKHNwZWN1bGFyRW52aXJvbm1lbnRSMCwgZW52aXJv
bm1lbnRCcmRmKTsKKyAgICBmbG9hdDMgZGlmZnVzZUJhc2UgPSBmbG9hdDMoMC4sIDAuLCAwLik7
CisgICAgUHJlTGlnaHRpbmdJbmZvIHByZUluZm87CisgICAgTGlnaHRpbmdJbmZvIGluZm87Cisg
ICAgZmxvYXQgc2hhZG93ID0gMS47CisgICAgZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSZWZs
ZWN0YW5jZSA9IGdldFJlZmxlY3RhbmNlRnJvbUFuYWx5dGljYWxCUkRGTG9va3VwX0pvbmVzKE5k
b3RWLCBzcGVjdWxhckVudmlyb25tZW50UjAsIHNwZWN1bGFyRW52aXJvbm1lbnRSOTAsIHNxcnQo
bWljcm9TdXJmYWNlKSk7CisgICAgc3VyZmFjZUFsYmVkby54eXogPSAoMS4gLSByZWZsZWN0YW5j
ZSkgKiBzdXJmYWNlQWxiZWRvLnh5ejsKKyAgICBmbG9hdDMgZmluYWxJcnJhZGlhbmNlID0gZW52
aXJvbm1lbnRJcnJhZGlhbmNlOworICAgIGZpbmFsSXJyYWRpYW5jZSAqPSBzdXJmYWNlQWxiZWRv
Lnh5ejsKKyAgICBmbG9hdDMgZmluYWxSYWRpYW5jZSA9IGVudmlyb25tZW50UmFkaWFuY2UueHl6
OworICAgIGZpbmFsUmFkaWFuY2UgKj0gc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3RhbmNlOwor
ICAgIGZsb2F0MyBmaW5hbFJhZGlhbmNlU2NhbGVkID0gZmluYWxSYWRpYW5jZSAqIGJpbmRHcm91
cEIubWF0ZXJpYWxbMF0udkxpZ2h0aW5nSW50ZW5zaXR5Lno7CisgICAgZmluYWxSYWRpYW5jZVNj
YWxlZCAqPSBlbmVyZ3lDb25zZXJ2YXRpb25GYWN0b3I7CisgICAgZmxvYXQzIGZpbmFsRGlmZnVz
ZSA9IGRpZmZ1c2VCYXNlOworICAgIGZpbmFsRGlmZnVzZSAqPSBzdXJmYWNlQWxiZWRvLnh5ejsK
KyAgICBmaW5hbERpZmZ1c2UgPSBtYXgoZmluYWxEaWZmdXNlLCBmbG9hdDMoMC4wLCAwLjAsIDAu
MCkpOworICAgIGZsb2F0MyBmaW5hbEFtYmllbnQgPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZB
bWJpZW50Q29sb3I7CisgICAgZmluYWxBbWJpZW50ICo9IHN1cmZhY2VBbGJlZG8ueHl6OworICAg
IGZsb2F0MyBmaW5hbEVtaXNzaXZlID0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52RW1pc3NpdmVD
b2xvcjsKKyAgICBmbG9hdDMgYW1iaWVudE9jY2x1c2lvbkZvckRpcmVjdERpZmZ1c2UgPSBhbWJp
ZW50T2NjbHVzaW9uQ29sb3I7CisgICAgZmxvYXQ0IGZpbmFsQ29sb3IgPSBmbG9hdDQoCisgICAg
ICAgIGZpbmFsQW1iaWVudCAqIGFtYmllbnRPY2NsdXNpb25Db2xvciArCisgICAgICAgIGZpbmFs
RGlmZnVzZSAqIGFtYmllbnRPY2NsdXNpb25Gb3JEaXJlY3REaWZmdXNlICogYmluZEdyb3VwQi5t
YXRlcmlhbFswXS52TGlnaHRpbmdJbnRlbnNpdHkueCArCisgICAgICAgIGZpbmFsSXJyYWRpYW5j
ZSAqIGFtYmllbnRPY2NsdXNpb25Db2xvciAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkxpZ2h0
aW5nSW50ZW5zaXR5LnogKworICAgICAgICBmaW5hbFJhZGlhbmNlU2NhbGVkICsKKyAgICAgICAg
ZmluYWxFbWlzc2l2ZSAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkxpZ2h0aW5nSW50ZW5zaXR5
LnksCisgICAgICAgIGFscGhhKTsKKyAgICBmaW5hbENvbG9yID0gbWF4KGZpbmFsQ29sb3IsIGZs
b2F0NCgwLjAsIDAuMCwgMC4wLCAwLjApKTsKKyAgICBmaW5hbENvbG9yID0gYXBwbHlJbWFnZVBy
b2Nlc3NpbmcoZmluYWxDb2xvcik7CisgICAgZmluYWxDb2xvci53ICo9IGJpbmRHcm91cEIubWVz
aFswXS52aXNpYmlsaXR5OworICAgIHJldHVybiBmaW5hbENvbG9yOworfQorYDsKZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vb25lU3BoZXJlV2Vi
R1BVLmh0bWwgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9uL29uZVNw
aGVyZVdlYkdQVS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlMTdmYmE5NjYwYWE5MTgzZmJlMDkyYjljNDEx
NDI2YjZjZjNkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9z
L3dlYmdwdS9iYWJ5bG9uL29uZVNwaGVyZVdlYkdQVS5odG1sCkBAIC0wLDAgKzEsMjE4IEBACist
LS0KK2xheW91dDogZW1wdHkKK3RpdGxlOiBCYWJ5bG9uLmpzIFNwaGVyZSBkZW1vIChXU0wpCit0
YWdzOiBXZWJHUFUKKy0tLQorPCFET0NUWVBFIGh0bWw+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMTk5OS94aHRtbCI+CisKKzxoZWFkPgorICAgIDx0aXRsZT5PbmUgU3BoZXJlIFdl
YkdQVTwvdGl0bGU+CisKKyAgICA8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMu
Y29tL2Nzcz9mYW1pbHk9T3BlbitTYW5zIiByZWw9InN0eWxlc2hlZXQiPgorICAgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly91c2UudHlwZWtpdC5uZXQvY3RhNHhzYi5jc3Mi
PgorCisgICAgPHN0eWxlPgorICAgICAgICBodG1sLAorICAgICAgICBib2R5IHsKKyAgICAgICAg
ICAgIHdpZHRoOiAxMDAlOworICAgICAgICAgICAgcGFkZGluZzogMDsKKyAgICAgICAgICAgIG1h
cmdpbjogMDsKKyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyYTIzNDI7CisgICAgICAg
ICAgICBjb2xvcjogI2ZmZmZmZjsKKyAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAiYWN1bWluLXBy
byI7CisgICAgICAgIH0KKworICAgICAgICAjcmVuZGVyQ2FudmFzIHsKKyAgICAgICAgICAgIHdp
ZHRoOiAxMDI0cHg7CisgICAgICAgICAgICBoZWlnaHQ6IDc2OHB4OworICAgICAgICAgICAgZGlz
cGxheTogYmxvY2s7CisgICAgICAgICAgICBmb250LXNpemU6IDA7CisgICAgICAgICAgICBtYXJn
aW46IGF1dG87CisgICAgICAgICAgICBib3JkZXI6bm9uZSAhaW1wb3J0YW50OworICAgICAgICAg
ICAgb3V0bGluZTpub25lICFpbXBvcnRhbnQ7CisgICAgICAgIH0KKworICAgICAgICAuY29udGFp
bmVyIHsKKyAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CisgICAgICAgICAgICBncmlkLXRlbXBs
YXRlLWNvbHVtbnM6IGF1dG8gMTcwcHggNzU0cHggMTAwcHggYXV0bzsKKyAgICAgICAgICAgIGdy
aWQtdGVtcGxhdGUtcm93czogNjBweCA3NjhweDsKKyAgICAgICAgfQorCisgICAgICAgIC5oZWFk
ZXJMb2dvIHsKKyAgICAgICAgICAgIGdyaWQtY29sdW1uLXN0YXJ0OiAyOworICAgICAgICAgICAg
Z3JpZC1jb2x1bW4tZW5kOiAyOworICAgICAgICAgICAgZ3JpZC1yb3ctc3RhcnQ6IDE7CisgICAg
ICAgICAgICBncmlkLXJvdy1lbmQ6IDE7CisgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAj
MjAxOTM2OworICAgICAgICB9CisKKyAgICAgICAgLmhlYWRlckxvZ28gPiBhID4gaW1nIHsKKyAg
ICAgICAgICAgIHdpZHRoOiBhdXRvOworICAgICAgICAgICAgaGVpZ2h0OiA2MHB4OworICAgICAg
ICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CisgICAgICAgIH0KKworICAgICAgICAuaGVhZGVyVGV4
dCB7CisgICAgICAgICAgICBncmlkLWNvbHVtbi1zdGFydDogMzsKKyAgICAgICAgICAgIGdyaWQt
Y29sdW1uLWVuZDogMzsKKyAgICAgICAgICAgIGdyaWQtcm93LXN0YXJ0OiAxOworICAgICAgICAg
ICAgZ3JpZC1yb3ctZW5kOiAxOworICAgICAgICAgICAgZm9udC1zaXplOiAzNXB4OworICAgICAg
ICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7CisgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7
CisgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjAxOTM2OworICAgICAgICAgICAgZm9u
dC1mYW1pbHk6ICJhY3VtaW4tcHJvLWV4dHJhLWNvbmRlbnNlZCI7CisgICAgICAgIH0KKworICAg
ICAgICAuaGVhZGVyRlBTIHsKKyAgICAgICAgICAgIGdyaWQtY29sdW1uLXN0YXJ0OiA0OworICAg
ICAgICAgICAgZ3JpZC1jb2x1bW4tZW5kOiA0OworICAgICAgICAgICAgZ3JpZC1yb3ctc3RhcnQ6
IDE7CisgICAgICAgICAgICBncmlkLXJvdy1lbmQ6IDE7CisgICAgICAgICAgICBmb250LXNpemU6
IDE1cHg7CisgICAgICAgICAgICBsaW5lLWhlaWdodDogNjBweDsKKyAgICAgICAgICAgIHRleHQt
YWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNCQjQ2NEI7Cisg
ICAgICAgIH0KKworICAgICAgICAuY29udGVudCB7CisgICAgICAgICAgICBncmlkLWNvbHVtbi1z
dGFydDogMjsKKyAgICAgICAgICAgIGdyaWQtY29sdW1uLWVuZDogNDsKKyAgICAgICAgICAgIGdy
aWQtcm93LXN0YXJ0OiAyOworICAgICAgICAgICAgZ3JpZC1yb3ctZW5kOiAyOworICAgICAgICB9
CisKKyAgICAgICAgYSB7CisgICAgICAgICAgICBjb2xvcjogI0ZGRkZGRjsKKyAgICAgICAgICAg
IHRleHQtZGVjb3JhdGlvbjogdW5zZXQ7CisgICAgICAgIH0KKyAgICAgICAgYTpob3ZlciB7Cisg
ICAgICAgICAgICBjb2xvcjogI0ZGRkZGRjsKKyAgICAgICAgfQorICAgICAgICBhOnZpc2l0ZWQg
eworICAgICAgICAgICAgY29sb3I6ICNGRkZGRkY7CisgICAgICAgIH0KKyAgICAgICAgYTpmb2N1
cyB7CisgICAgICAgICAgICBjb2xvcjogI0ZGRkZGRjsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+
CisKKyAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vcGVwLzAuNC4yL3Bl
cC5taW4uanMiPjwvc2NyaXB0PgorCisgICAgPHNjcmlwdCBzcmM9ImJhYnlsb25XZWJHcHUubWF4
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9wcmV2aWV3LmJhYnlsb25q
cy5jb20vbG9hZGVycy9iYWJ5bG9uanMubG9hZGVycy5taW4uanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorCis8Ym9keT4KKyAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICA8ZGl2IGNs
YXNzPSJoZWFkZXJMb2dvIj4KKyAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vZXh0ZW5zaW9ucy9XZWJHUFUiPgorICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJs
b2dvLnN2ZyI+PC9pbWc+CisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvZGl2PgorICAgICAg
ICA8ZGl2IGNsYXNzPSJoZWFkZXJUZXh0Ij4KKyAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8v
ZG9jLmJhYnlsb25qcy5jb20vZXh0ZW5zaW9ucy9XZWJHUFUiPgorICAgICAgICAgICAgICAgIFdl
YkdQVSBFeHBlcmltZW50CisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvZGl2PgorICAgICAg
ICA8ZGl2IGNsYXNzPSJoZWFkZXJGUFMiIGlkPSJmcHMiPjA8L2Rpdj4KKyAgICAgICAgPGRpdiBj
bGFzcz0iY29udGVudCI+CisgICAgICAgICAgICA8Y2FudmFzIGlkPSJyZW5kZXJDYW52YXMiIHdp
ZHRoPSIxMDI0IiBoZWlnaHQ9Ijc2OCI+PC9jYW52YXM+CisgICAgICAgIDwvZGl2PgorICAgIDxk
aXY+CisKKyAgICA8c2NyaXB0IHNyYz0ib25lU3BoZXJlV2ViR1BVR0xTTFNoYWRlcnMuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJvbmVTcGhlcmVXZWJHUFVXU0xTaGFkZXJzLmpzIj48
L3NjcmlwdD4KKworICAgIDxzY3JpcHQ+CisKKyAgICBjb25zdCBTaGFkZXJLaW5kID0geworICAg
ICAgICB2ZXJ0ZXg6ICJWZXJ0ZXgiLAorICAgICAgICBmcmFnbWVudDogIkZyYWdtZW50IiwKKyAg
ICAgICAgY29tcHV0ZTogIkNvbXB1dGUiCisgICAgfTsKKworICAgIGNsYXNzIENvbXBpbGVSZXN1
bHQgeworICAgICAgICBjb25zdHJ1Y3RvcihyZXN1bHQpIHsKKyAgICAgICAgICAgIHRoaXMucmVz
dWx0ID0gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgR2V0RXJyb3JNZXNzYWdlKCkgewor
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBHZXRCaW5hcnko
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBjbGFzcyBDb21waWxlT3B0aW9ucyB7CisgICAgICAgIGNvbnN0cnVjdG9yKCkgeworICAg
ICAgICB9CisgICAgfQorCisgICAgY2xhc3MgQ29tcGlsZXIgeworICAgICAgICBjb25zdHJ1Y3Rv
cigpIHsKKyAgICAgICAgfQorCisgICAgICAgIENvbXBpbGVHbHNsVG9TcHYoc291cmNlLCBraW5k
LCBzb21ldGhpbmcsIGVudHJ5UG9pbnROYW1lLCBvcHRpb25zKSB7CisgICAgICAgICAgICBsZXQg
d3NsU291cmNlOworICAgICAgICAgICAgc3dpdGNoIChzb3VyY2UpIHsKKyAgICAgICAgICAgIGNh
c2UgdmVydGV4U2hhZGVyR0xTTDE6CisgICAgICAgICAgICAgICAgd3NsU291cmNlID0gdmVydGV4
U2hhZGVyV1NMMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZnJh
Z21lbnRTaGFkZXJHTFNMMToKKyAgICAgICAgICAgICAgICB3c2xTb3VyY2UgPSBmcmFnbWVudFNo
YWRlcldTTDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIHZlcnRl
eFNoYWRlckdMU0wyOgorICAgICAgICAgICAgICAgIHdzbFNvdXJjZSA9IHZlcnRleFNoYWRlcldT
TDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZyYWdtZW50U2hh
ZGVyR0xTTDI6CisgICAgICAgICAgICAgICAgd3NsU291cmNlID0gZnJhZ21lbnRTaGFkZXJXU0wy
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc2hhZGVyISIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21waWxlUmVzdWx0KHdzbFNvdXJjZSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBsZXQgU2hhZGVyYyA9IHtDb21waWxlciwgQ29tcGlsZU9w
dGlvbnMsIHNoYWRlcl9raW5kOiBTaGFkZXJLaW5kfTsKKworICAgIChhc3luYyBmdW5jdGlvbigp
IHsKKyAgICAgICAgaWYgKCFuYXZpZ2F0b3IuZ3B1KSB7CisgICAgICAgICAgICBhbGVydCgiV2Vi
IEdQVSBpcyBub3Qgc3VwcG9ydGVkIG9uIHlvdXIgcGxhdGZvcm0gc28gZmFyLiIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyZW5kZXJDYW52YXMiKTsKKyAgICAgICAgY29uc3QgZGl2RnBzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZwcyIpOworCisgICAgICAgIGNvbnN0IGVuZ2luZSA9
IG5ldyBCQUJZTE9OLldlYkdQVUVuZ2luZShjYW52YXMsIHthbnRpYWxpYXNpbmc6IGZhbHNlfSk7
CisgICAgICAgIGF3YWl0IGVuZ2luZS5pbml0QXN5bmMoe3NoYWRlcmM6IFNoYWRlcmN9KTsKKwor
ICAgICAgICBjb25zdCBzY2VuZSA9IG5ldyBCQUJZTE9OLlNjZW5lKGVuZ2luZSk7CisgICAgICAg
IHNjZW5lLmVudmlyb25tZW50VGV4dHVyZSA9IG5ldyBCQUJZTE9OLkN1YmVUZXh0dXJlKCJodHRw
czovL2Fzc2V0cy5iYWJ5bG9uanMuY29tL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudFNwZWN1bGFy
LmVudiIsIHNjZW5lKTsKKworICAgICAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgQkFCWUxPTi5QQlJN
ZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsKCJwYnIiLCBzY2VuZSk7CisgICAgICAgIG1hdGVyaWFs
LnJvdWdobmVzcyA9IDA7CisgICAgICAgIG1hdGVyaWFsLm1ldGFsbGljID0gMDsKKworICAgICAg
ICB2YXIgaWNvID0gQkFCWUxPTi5NZXNoLkNyZWF0ZUljb1NwaGVyZSgiaWNvIiwgeworICAgICAg
ICAgICAgZmxhdDogdHJ1ZSwKKyAgICAgICAgICAgIHN1YmRpdmlzaW9uczogMworICAgICAgICB9
LCBzY2VuZSk7CisgICAgICAgIGljby5tYXRlcmlhbCA9IG1hdGVyaWFsOworCisgICAgICAgIHNj
ZW5lLmNyZWF0ZURlZmF1bHRDYW1lcmEodHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIHNjZW5l
LmNyZWF0ZURlZmF1bHRTa3lib3goc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlLCB0cnVlLCB1bmRl
ZmluZWQsIDAuMyk7CisKKyAgICAgICAgZW5naW5lLnJ1blJlbmRlckxvb3AoKCkgPT4geworICAg
ICAgICAgICAgc2NlbmUucmVuZGVyKCk7CisgICAgICAgICAgICBkaXZGcHMuaW5uZXJIVE1MID0g
ZW5naW5lLmdldEZwcygpLnRvRml4ZWQoKSArICIgZnBzIjsKKyAgICAgICAgfSk7CisgICAgfSko
KTsKKyAgICA8L3NjcmlwdD4KKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2Vic2l0
ZXMvd2Via2l0Lm9yZy9kZW1vcy93ZWJncHUvYmFieWxvbi9vbmVTcGhlcmVXZWJHUFVHTFNMU2hh
ZGVycy5qcyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vb25lU3Bo
ZXJlV2ViR1BVR0xTTFNoYWRlcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTllZGVlNGYwOTFmYzc1OGE3Njg1
MDBhMTI1YWRlMmExYmRkYmU3NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5v
cmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vb25lU3BoZXJlV2ViR1BVR0xTTFNoYWRlcnMuanMKQEAg
LTAsMCArMSw0IEBACitjb25zdCB2ZXJ0ZXhTaGFkZXJHTFNMMSA9IFszNSwgMTE4LCAxMDEsIDEx
NCwgMTE1LCAxMDUsIDExMSwgMTEwLCAzMiwgNTIsIDUzLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODAsIDY2LCA4MiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc2LCA2NiwgNjksIDY4LCA3OSwgNjgsIDczLCA4Miwg
NjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDY1LCA3NywgNjYsIDczLCA2OSwgNzgsIDg0LCA2OCwgNzMsIDgyLCA2OSwg
NjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNzksIDgwLCA2NSwgNjcsIDczLCA4NCwgODksIDY4LCA3MywgODIsIDY5LCA2Nywg
ODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA2NSwgNzYsIDgwLCA3MiwgNjUsIDg0LCA2OSwgODMsIDg0LCA4NiwgNjUsIDc2LCA4NSwg
NjksIDMyLCA0OCwgNDYsIDUyLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA4MywgODAsIDY5LCA2NywgODUsIDc2LCA2NSwgODIsIDc5LCA4NiwgNjksIDgyLCA2NSwg
NzYsIDgwLCA3MiwgNjUsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDgyLCA2NSwgNjgsIDczLCA2NSwgNzgsIDY3LCA2OSwgNzksIDg2LCA2OSwgODIsIDY1LCA3Niwg
ODAsIDcyLCA2NSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjks
IDc3LCA3MywgODMsIDgzLCA3MywgODYsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwg
ODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIs
IDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA4NiwgNzMsIDg0LCA4OSwgNjgsIDczLCA4Miwg
NjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDc2LCA3OSwgNjgsIDY2LCA2NSwgODMsIDY5LCA2OCwgNzcsIDczLCA2Nywg
ODIsIDc5LCA4MywgNzAsIDg1LCA4MiwgNjUsIDY3LCA2OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNzcsIDczLCA2NywgODIsIDc5LCA4MywgODUsIDgyLCA3MCwg
NjUsIDY3LCA2OSwgNzcsIDY1LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAz
MiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA2OSwg
ODQsIDY1LCA3NiwgNzYsIDczLCA2NywgODcsIDc5LCA4MiwgNzUsIDcwLCA3NiwgNzksIDg3LCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2OSwgNzgsIDg2LCA3Mywg
ODIsIDc5LCA3OCwgNzcsIDY5LCA3OCwgODQsIDY2LCA4MiwgNjgsIDcwLCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OCwgNzksIDgyLCA3NywgNjUsIDc2LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NiwgODUsIDc3LCA4MCwgNjgs
IDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA3OSwgODIsIDc3LCA2NSwgNzYsIDg4LCA4OSwgODMs
IDY3LCA2NSwgNzYsIDY5LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA3NiwgNzMsIDcxLCA3MiwgODQsIDc3LCA2NSwgODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQs
IDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDcz
LCA3OSwgNzgsIDc3LCA2NSwgODAsIDk1LCA1MSwgNjgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4
LCA3NywgNjUsIDgwLCA5NSwgNjcsIDg1LCA2NiwgNzMsIDY3LCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4NSwgODMsIDY5LCA4MywgODAsIDcyLCA2OSwgODIsIDcz
LCA2NywgNjUsIDc2LCA3MCwgODIsIDc5LCA3NywgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQs
IDczLCA3OSwgNzgsIDc3LCA2NSwgODAsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAs
IDEwMSwgMzIsIDgzLCA4MCwgNzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwgNzYsIDk1LCA3MiwgNjUs
IDgyLCA3NywgNzksIDc4LCA3MywgNjcsIDgzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCA4NSwgODMsIDY5LCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUs
IDc2LCA3MywgNzgsIDg2LCA2OSwgODIsIDg0LCA2OSwgODgsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA3MSwgNjYsIDY4LCA4MiwgNjksIDcwLCA3NiwgNjks
IDY3LCA4NCwgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgODIsIDY1LCA2OCwgNzMsIDY1LCA3OCwgNjcsIDY5LCA3OSwgNjcsIDY3LCA3NiwgODUs
IDgzLCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgNzksIDY3LCA2NywgNzYsIDg1LCA4MywgNzMs
IDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDg1
LCA3NywgOTUsIDY2LCA3OSwgNzgsIDY5LCA5NSwgNzMsIDc4LCA3MCwgNzYsIDg1LCA2OSwgNzgs
IDY3LCA2OSwgODIsIDgzLCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAs
IDEwMSwgMzIsIDY2LCAxMTEsIDExMCwgMTAxLCAxMTUsIDgwLCAxMDEsIDExNCwgNzcsIDEwMSwg
MTE1LCAxMDQsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgNzgsIDg1LCA3NywgOTUsIDc3LCA3OSwgODIsIDgwLCA3MiwgOTUsIDczLCA3OCwgNzAsIDc2
LCA4NSwgNjksIDc4LCA2NywgNjksIDgyLCA4MywgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4NiwgNzMsIDcxLCA3OCwgNjksIDg0LCA4NCwgNjksIDY2
LCA3NiwgNjksIDc4LCA2OCwgNzcsIDc5LCA2OCwgNjksIDc3LCA4NSwgNzYsIDg0LCA3MywgODAs
IDc2LCA4OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDY1
LCA3NywgODAsIDc2LCA2OSwgODIsIDUxLCA2OCwgNzEsIDgyLCA2OSwgNjksIDc4LCA2OCwgNjks
IDgwLCA4NCwgNzIsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgz
LCA2NSwgNzcsIDgwLCA3NiwgNjksIDgyLCA1MSwgNjgsIDY2LCA3MSwgODIsIDc3LCA2NSwgODAs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDg1LCA4MywgNjksIDgw
LCA3MiwgODksIDgzLCA3MywgNjcsIDY1LCA3NiwgNzYsIDczLCA3MSwgNzIsIDg0LCA3MCwgNjUs
IDc2LCA3NiwgNzksIDcwLCA3MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgNjcsIDc2LCA2OSwgNjUsIDgyLCA2NywgNzksIDY1LCA4NCwgOTUsIDg0LCA2OSwgODgs
IDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDc2LCA2OSwgNjUs
IDgyLCA2NywgNzksIDY1LCA4NCwgOTUsIDY2LCA4NSwgNzcsIDgwLCA2OCwgNzMsIDgyLCA2OSwg
NjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNjcsIDc2LCA2OSwgNjUsIDgyLCA2NywgNzksIDY1LCA4NCwgOTUsIDg0LCA3Mywg
NzgsIDg0LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2
NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA2NSwgNzgsIDczLCA4MywgNzksIDg0LCA4MiwgNzksIDgwLCA3MywgNjcsIDk1LCA4
NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2
LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY2LCA4
MiwgNjgsIDcwLCA5NSwgODYsIDk1LCA3MiwgNjksIDczLCA3MSwgNzIsIDg0LCA5NSwgNjcsIDc5
LCA4MiwgODIsIDY5LCA3NiwgNjUsIDg0LCA2OSwgNjgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA4MywgOTUsIDY2LCA4MiwgNjgsIDcwLCA5NSwgNjksIDc4
LCA2OSwgODIsIDcxLCA4OSwgOTUsIDY3LCA3OSwgNzgsIDgzLCA2OSwgODIsIDg2LCA2NSwgODQs
IDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgz
LCA3MiwgNjksIDY5LCA3OCwgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMs
IDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgODMsIDgzLCA5NSwgODQsIDcyLCA3MywgNjcsIDc1LCA3OCwgNjks
IDgzLCA4MywgNjUsIDc4LCA2OCwgNzcsIDY1LCA4MywgNzUsIDk1LCA4NCwgNjksIDg4LCA4NCwg
ODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY4LCA2OSwgNjYsIDg1LCA3MSwg
NzcsIDc5LCA2OCwgNjksIDMyLCA0OCwgMTAsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDgzLCA3MiwgNjUsIDY4LCA2OSwgODIsIDk1LCA3OCwgNjUsIDc3LCA2OSwg
MzIsIDExOCwgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDU4LCAxMTIsIDk4LCAxMTQsIDEwLCAx
MTIsIDExNCwgMTAxLCA5OSwgMTA1LCAxMTUsIDEwNSwgMTExLCAxMTAsIDMyLCAxMDQsIDEwNSwg
MTAzLCAxMDQsIDExMiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDU5LCAxMywgMTAsIDEw
OCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTE2LCAxMDAsIDQ5LCA1MiwgNDgs
IDQ0LCA5OSwgMTExLCAxMDgsIDExNywgMTA5LCAxMTAsIDk1LCAxMDksIDk3LCAxMDYsIDExMSwg
MTE0LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgNTksIDEzLCAx
MCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYx
LCAzMiwgNDgsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2
MSwgMzIsIDQ4LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIs
IDgzLCA5OSwgMTAxLCAxMTAsIDEwMSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTA5LCA5NywgMTE2
LCA1MiwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEx
OCwgMTA1LCAxMDEsIDExOSwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAx
MjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA0OSwgNDQs
IDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDgsIDQx
LCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgNzcsIDk3LCAxMTYs
IDEwMSwgMTE0LCAxMDUsIDk3LCAxMDgsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTAsIDMyLCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA3MywgMTEwLCAxMDIs
IDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA2NSwgMTA5
LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA3OSwgMTEyLCA5NywgOTksIDEwNSwgMTE2
LCAxMjEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTAsIDMyLCAxMTgsIDY5LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDczLCAx
MTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgs
IDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwOSwgOTcsIDExMiwgNzMsIDExMCwgMTAyLCAxMTEs
IDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAy
LCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDczLCAxMTAsIDEw
MiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc3LCAx
MDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4MywgOTcs
IDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgMTA1LCAxMjIsIDEwMSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjYsIDExNywgMTA5LCAxMTIsIDczLCAx
MTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5Nywg
MTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAx
MywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwg
MTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2
LCA1MiwgMzIsIDExMSwgMTEyLCA5NywgOTksIDEwNSwgMTE2LCAxMjEsIDc3LCA5NywgMTE2LCAx
MTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTAxLCAxMDks
IDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIw
LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAx
MTYsIDEwOSwgOTcsIDExMiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAs
IDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwg
MTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgODMs
IDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwg
MTE0LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2
LCA1MiwgMzIsIDk4LCAxMTcsIDEwOSwgMTEyLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgODQsIDk3LCAxMTAsIDEwMywg
MTAxLCAxMTAsIDExNiwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDgwLCA5NywgMTE0LCA5NywgMTA5
LCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAx
MjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEs
IDEwMCwgMTExLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUyLCAzMiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3
MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAy
LCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDExMiwgMTExLCAxMDUsIDExMCwgMTE2LCA4MywgMTA1LCAx
MjIsIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODIsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY5
LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDY3LCAxMTEsIDEwOCwgMTExLCAx
MTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY5LCAxMjEsIDEwMSwg
ODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEx
OCwgNjgsIDEwMSwgOTgsIDExNywgMTAzLCA3NywgMTExLCAxMDAsIDEwMSwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTEx
LCA5NywgMTE2LCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUyLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAx
MTYsIDgyLCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODAsIDk3
LCAxMTQsIDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEx
OCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA3MywgMTEwLCAxMDIs
IDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTksIDEwOCwgMTAx
LCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5Nywg
MTE0LCA2NywgMTExLCA5NywgMTE2LCA2NiwgMTE3LCAxMDksIDExMiwgNzMsIDExMCwgMTAyLCAx
MTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwg
MTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4NCwgOTcsIDExMCwgMTAzLCAxMDEsIDEx
MCwgMTE2LCA4MywgMTEyLCA5NywgOTksIDEwMSwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwg
NTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwg
NjcsIDExMSwgOTcsIDExNiwgNjYsIDExNywgMTA5LCAxMTIsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA2NywgMTA4LCAx
MDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0LCAxMDUsIDExMCwgMTE2LCA4MCwgOTcs
IDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA2NywgMTExLCAxMDgs
IDExMSwgMTE0LCA2NSwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5Nywg
MTE0LCA2NywgMTExLCA5NywgMTE2LCA4NCwgMTA1LCAxMTAsIDExNiwgNzMsIDExMCwgMTAyLCAx
MTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk5LCAxMDgsIDEwMSwg
OTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODQsIDEwNSwgMTEwLCAxMTYsIDc3LCA5NywgMTE2
LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2
NSwgMTEwLCAxMDUsIDExNSwgMTExLCAxMTYsIDExNCwgMTExLCAxMTIsIDEyMSwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjUsIDExMCwgMTA1LCAxMTUsIDExMSwgMTE2
LCAxMTQsIDExMSwgMTEyLCAxMjEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAs
IDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5NywgMTEwLCAxMDUsIDExNSwgMTExLCAxMTYsIDExNCwg
MTExLCAxMTIsIDEyMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDgzLCAxMDQsIDEwMSwgMTAxLCAxMTAsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDgz
LCAxMDQsIDEwMSwgMTAxLCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAs
IDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTUsIDEwNCwgMTAxLCAxMDEsIDExMCwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgs
IDgyLCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwg
OTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAx
MDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA4Miwg
MTAxLCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDczLCAxMTAsIDEwMiwg
MTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAy
LCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUs
IDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgODQsIDEwNCwgMTA1
LCA5OSwgMTA3LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5
LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTYsIDEwNCwgMTA1LCA5OSwgMTA3LCAx
MTAsIDEwMSwgMTE1LCAxMTUsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4NCwgMTA0LCAxMDUsIDk5LCAxMDcsIDExMCwg
MTAxLCAxMTUsIDExNSwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTA1LCAxMTEs
IDExMCwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDg0LCAxMDUsIDExMCwgMTE2LCA2NywgMTExLCAxMDgs
IDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTE3
LCA5OCwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMTYsIDEwMSwg
MTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OCwg
NDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwg
MTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgOTUsIDQ5LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5
LCA5NywgMTA4LCA3NiwgNDksIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDksIDQ5
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEw
MSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDk1LCA1MCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwg
OTcsIDEwOCwgNzYsIDUwLCA5NSwgNDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwg
NDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwg
MTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgNDksIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3
LCAxMDgsIDc2LCA1MCwgNTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgs
IDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg4LCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUs
IDk5LCA5NywgMTA4LCA4OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwg
ODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgOTAsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwg
OTksIDk3LCAxMDgsIDg4LCA4OCwgOTUsIDkwLCA5MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwg
ODksIDg5LCA5NSwgOTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4
LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA5MCwgOTAsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQs
IDEwNSwgOTksIDk3LCAxMDgsIDg4LCA4OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODksIDkw
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEw
MSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA5MCwgODgsIDU5LCAxMywgMTAsIDEyNSwgNTksIDEz
LCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIs
IDYxLCAzMiwgNDksIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMy
LCA2MSwgMzIsIDQ5LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwg
MzIsIDc3LCAxMDEsIDExNSwgMTA0LCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDksIDk3LCAxMTYs
IDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMTgsIDEwNSwgMTE1LCAxMDUsIDk4LCAxMDUsIDEwOCwgMTA1LCAx
MTYsIDEyMSwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA4NiwgNjksIDgy
LCA4NCwgNjksIDg4LCA5NSwgNjYsIDY5LCA3MSwgNzMsIDc4LCAxMywgMTAsIDEwOCwgOTcsIDEy
MSwgMTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDEx
MCwgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTA1LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAs
IDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwg
MTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwgNDksIDQxLCAzMiwgMTA1LCAxMTAsIDMyLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA1OSwgMTMsIDEw
LCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDgwLCA3MywgNjEsIDUxLCA0NiwgNDksIDUyLCA0OSwgNTMsIDU3LCA1MCwgNTQsIDUzLCA1MSwg
NTMsIDU2LCA1NywgNTUsIDU3LCA1MSwgNTAsIDUxLCA1NiwgNTIsIDU0LCA1MCwgNTQsIDUyLCA1
MSwgNTEsIDU2LCA1MSwgNTAsIDU1LCA1NywgNTMsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwg
MTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzYsIDEwNSwgMTEwLCAx
MDEsIDk3LCAxMTQsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA4MCwgMTExLCAxMTksIDEw
MSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDYxLCA1MCwgNDYsIDUwLCA1OSwg
MTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwg
ODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA2MSwg
NDksIDQ2LCA0OCwgNDcsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5OSwg
MTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQs
IDExMSwgMTIwLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDc2LCAxMTcsIDEwOSwgMTA1LCAxMTAsIDk3LCAxMTAsIDk5LCAxMDEs
IDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAs
IDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDgsIDQ2LCA1MCwgNDksIDUwLCA1NCwgNDQsIDQ4
LCA0NiwgNTUsIDQ5LCA1MywgNTAsIDQ0LCA0OCwgNDYsIDQ4LCA1NSwgNTAsIDUwLCA0MSwgNTks
IDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNjEsIDQ4LCA0NiwgNDgs
IDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDksIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0
MCwgMTIwLCA0MSwgMzIsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgNDAsIDEyMCwgNDQsIDQ4LCA0
NiwgNDgsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDk3LCA5OCwgMTE1LCA2OSwgMTEyLCAxMTUsIDQwLCAxMjAsIDQxLCAz
MiwgOTcsIDk4LCAxMTUsIDQwLCAxMjAsIDQxLCA0MywgNjksIDExMiwgMTE1LCAxMDUsIDEwOCwg
MTExLCAxMTAsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAx
MDksIDk3LCAxMjAsIDY5LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCAxMDksIDk3LCAxMjAs
IDQwLCAxMjAsIDQ0LCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNDEsIDEzLCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMTUsIDk3LCAxMTYsIDEx
NywgMTE0LCA5NywgMTE2LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCA5OSwg
MTA4LCA5NywgMTA5LCAxMTIsIDQwLCAxMjAsIDQ0LCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAx
MTEsIDExMCwgNDQsIDQ5LCA0NiwgNDgsIDQxLCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEsIDMy
LCAxMTYsIDExNCwgOTcsIDExMCwgMTE1LCAxMTIsIDExMSwgMTE1LCAxMDEsIDc3LCA5NywgMTE2
LCA1MSwgNDAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDEx
NCwgMTA1LCAxMjAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MDUsIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDgs
IDkzLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCA0OSwgNjEsIDEwNSwg
MTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgNTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEs
IDMyLCAxMTEsIDExNywgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNjEsIDEwOSwg
OTcsIDExNiwgNTEsIDQwLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4LCA0
NiwgMTIwLCA0NCwgMTA1LCA0OSwgNDYsIDEyMCwgNDQsIDEwNSwgNTAsIDQ2LCAxMjAsIDQxLCA0
NCwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMSwgNDQsIDEw
NSwgNDksIDQ2LCAxMjEsIDQ0LCAxMDUsIDUwLCA0NiwgMTIxLCA0MSwgNDQsIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgNDAsIDEwNSwgNDgsIDQ2LCAxMjIsIDQ0LCAxMDUsIDQ5LCA0NiwgMTIy
LCA0NCwgMTA1LCA1MCwgNDYsIDEyMiwgNDEsIDEzLCAxMCwgNDEsIDU5LCAxMywgMTAsIDExNCwg
MTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTEsIDExNywgMTE2LCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEs
IDMyLCAxMDUsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE1LCAxMDEsIDc3LCA5NywgMTE2LCA1MSwg
NDAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1
LCAxMjAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5
NywgNDgsIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwg
NDgsIDkzLCA5MSwgNDgsIDkzLCA0NCwgOTcsIDQ4LCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcs
IDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA0OCwg
NTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwgOTMs
IDkxLCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5Nywg
NDksIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDks
IDkzLCA5MSwgNDgsIDkzLCA0NCwgOTcsIDQ5LCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA0OSwgNTAs
IDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMsIDkx
LCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgNTAs
IDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAsIDkz
LCA5MSwgNDgsIDkzLCA0NCwgOTcsIDUwLCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA1MCwgNTAsIDYx
LCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkxLCA1
MCwgOTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OCwgNDgsIDQ5
LCA2MSwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OSwgNDksIDQ1LCA5NywgNDksIDUwLCA0MiwgOTcs
IDUwLCA0OSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk4LCA0OSwg
NDksIDYxLCA0NSwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OSwgNDgsIDQzLCA5NywgNDksIDUwLCA0
MiwgOTcsIDUwLCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk4
LCA1MCwgNDksIDYxLCA5NywgNTAsIDQ5LCA0MiwgOTcsIDQ5LCA0OCwgNDUsIDk3LCA0OSwgNDks
IDQyLCA5NywgNTAsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTAwLCAxMDEsIDExNiwgNjEsIDk3LCA0OCwgNDgsIDQyLCA5OCwgNDgsIDQ5LCA0MywgOTcsIDQ4
LCA0OSwgNDIsIDk4LCA0OSwgNDksIDQzLCA5NywgNDgsIDUwLCA0MiwgOTgsIDUwLCA0OSwgNTks
IDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwOSwgOTcsIDExNiwg
NTEsIDQwLCA5OCwgNDgsIDQ5LCA0NCwgNDAsIDQ1LCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ4LCA0
OSwgNDMsIDk3LCA0OCwgNTAsIDQyLCA5NywgNTAsIDQ5LCA0MSwgNDQsIDQwLCA5NywgNDksIDUw
LCA0MiwgOTcsIDQ4LCA0OSwgNDUsIDk3LCA0OCwgNTAsIDQyLCA5NywgNDksIDQ5LCA0MSwgNDQs
IDEzLCAxMCwgOTgsIDQ5LCA0OSwgNDQsIDQwLCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ4LCA0OCwg
NDUsIDk3LCA0OCwgNTAsIDQyLCA5NywgNTAsIDQ4LCA0MSwgNDQsIDQwLCA0NSwgOTcsIDQ5LCA1
MCwgNDIsIDk3LCA0OCwgNDgsIDQzLCA5NywgNDgsIDUwLCA0MiwgOTcsIDQ5LCA0OCwgNDEsIDQ0
LCAxMywgMTAsIDk4LCA1MCwgNDksIDQ0LCA0MCwgNDUsIDk3LCA1MCwgNDksIDQyLCA5NywgNDgs
IDQ4LCA0MywgOTcsIDQ4LCA0OSwgNDIsIDk3LCA1MCwgNDgsIDQxLCA0NCwgNDAsIDk3LCA0OSwg
NDksIDQyLCA5NywgNDgsIDQ4LCA0NSwgOTcsIDQ4LCA0OSwgNDIsIDk3LCA0OSwgNDgsIDQxLCA0
MSwgNDcsIDEwMCwgMTAxLCAxMTYsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE2LCAxMTEsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA4MywgMTEy
LCA5NywgOTksIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDEx
MSwgMTE0LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDExMiwgMTExLCAxMTksIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwg
MTE4LCAxMDEsIDk5LCA1MSwgNDAsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEw
LCA5OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEy
LCAxMTQsIDExMSwgMTIwLCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE2LCAxMTEsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA4MywgMTEyLCA5
NywgOTksIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwg
MTE0LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDEx
MCwgMzIsIDExMiwgMTExLCAxMTksIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwgMTE4
LCAxMDEsIDk5LCA1MSwgNDAsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA2OSwgMTEwLCA5OSwgMTEx
LCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDEx
MSwgMTIwLCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTE1LCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCA0MCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQxLCAxMywgMTAsIDEyMywg
MTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCA5NywgMTA4LCAx
MTcsIDEwMSwgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTEyLCAxMTEsIDExOSwgNTMsIDQwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDEsIDMy
LCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgMTEzLCA2MSwg
MTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDU5LCAx
MywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTUsIDExMywgNDIsIDEx
NSwgMTEzLCA0MiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNTksIDEzLCAxMCwgMTI1LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDMsIDEwMSwgMTE2LCA3NiwgMTE3LCAx
MDksIDEwNSwgMTEwLCA5NywgMTEwLCA5OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEw
MSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTAw
LCAxMTEsIDExNiwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCA3NiwgMTE3LCAxMDks
IDEwNSwgMTEwLCA5NywgMTEwLCA5OSwgMTAxLCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwg
NjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA0MSwgNDQsIDQ4LCA0NiwgNDQsIDQ5LCA0Niwg
NDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTAzLCAxMDEsIDExNiwgODIsIDk3LCAxMTAsIDEwMCwgNDAsIDExOCwgMTAxLCA5OSwgNTAsIDMy
LCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYs
IDExNywgMTE0LCAxMTAsIDMyLCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDQwLCAxMTUsIDEwNSwg
MTEwLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDYsIDEyMCwg
MTIxLCAzMiwgNDQsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCA0OSwgNTAsIDQ2LCA1NywgNTYsIDU3
LCA1NiwgNDQsIDU1LCA1NiwgNDYsIDUwLCA1MSwgNTEsIDQxLCA0MSwgNDEsIDQyLCA1MiwgNTEs
IDU1LCA1MywgNTYsIDQ2LCA1MywgNTIsIDUzLCA1MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDExNiwgMTA0LCAxMDEs
IDExNCwgNDAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQ0LCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5
LCAxMDEsIDY1LCAxMDksIDExMSwgMTE3LCAxMTAsIDExNiwgNDEsIDMyLCAxMjMsIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgOTcsIDExMCwgMTAwLCA2MSwgMTAzLCAx
MDEsIDExNiwgODIsIDk3LCAxMTAsIDEwMCwgNDAsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDEsIDU5
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTE2LCAxMDQs
IDEwMSwgMTE0LCA2MSwgMTA5LCAxMDUsIDEyMCwgNDAsIDQ1LCAxMTgsIDk3LCAxMTQsIDEwNSwg
OTcsIDExMCwgOTksIDEwMSwgNjUsIDEwOSwgMTExLCAxMTcsIDExMCwgMTE2LCA0NywgNTAsIDUz
LCA1MywgNDYsIDQ4LCA0NCwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDY1
LCAxMDksIDExMSwgMTE3LCAxMTAsIDExNiwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQsIDEx
NCwgOTcsIDExMCwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDEwMCwgMTA1LCAxMTYsIDEwNCwgMTAxLCAxMTQsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDExNCwgMTAzLCA5OCwgMTAwLCA3NywgOTcsIDEyMCwgODIsIDk3LCAxMTAsIDEwMywg
MTAxLCA2MSwgNTAsIDUzLCA1MywgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUy
LCAzMiwgMTE2LCAxMTEsIDgyLCA3MSwgNjYsIDY4LCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMDksIDk3LCAxMjAsIDgyLCA3MSwgNjYsIDYxLCAxMDksIDk3LCAx
MjAsIDY5LCAxMTIsIDExNSwgNDAsIDEwOSwgOTcsIDEyMCwgNDAsIDk5LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDQ2LCAxMTQsIDQ0LCAxMDksIDk3LCAxMjAsIDQwLCA5OSwgMTExLCAxMDgsIDExMSwg
MTE0LCA0NiwgMTAzLCA0NCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDk4LCA0MSwgNDEs
IDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNjgsIDYxLCAxMDks
IDk3LCAxMjAsIDQwLCAxMTQsIDEwMywgOTgsIDEwMCwgNzcsIDk3LCAxMjAsIDgyLCA5NywgMTEw
LCAxMDMsIDEwMSwgNDcsIDEwOSwgOTcsIDEyMCwgODIsIDcxLCA2NiwgNDQsIDQ5LCA0NiwgNDEs
IDU5LCAxMywgMTAsIDY4LCA2MSwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTAyLCAxMDgs
IDExMSwgMTExLCAxMTQsIDQwLCA2OCwgNDEsIDQ3LCA1MCwgNTMsIDUzLCA0NiwgNDgsIDQ0LCA0
OCwgNDYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE0LCAxMDMsIDk4LCA2MSwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA5
OCwgNDIsIDY4LCA1OSwgMTMsIDEwLCAxMTQsIDEwMywgOTgsIDYxLCAxMTYsIDExMSwgNzEsIDk3
LCAxMDksIDEwOSwgOTcsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA0MCwgMTE0LCAxMDMsIDk4LCA0
MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAx
LCA5OSwgNTIsIDQwLCAxMTQsIDEwMywgOTgsIDQ0LCA2OCwgNDEsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMTQsIDExMSwgMTA5LCA4MiwgNzEs
IDY2LCA2OCwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwgNDEs
IDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywgOTgsIDYx
LCAxMTYsIDExMSwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDgzLCAxMTIsIDk3LCA5OSwg
MTAxLCA0MCwgMTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywgOTgsIDQxLCA1OSwgMTMs
IDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDMsIDk4LCAxMDAs
IDQ2LCAxMTQsIDEwMywgOTgsIDQ3LCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDk3LCA1OSwgMTMs
IDEwLCAxMjUsIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAx
MTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAx
MTEsIDExNywgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODAsIDExMSwgMTE1
LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwg
MTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwg
MzIsIDYxLCAzMiwgNDksIDQxLCAzMiwgMTExLCAxMTcsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNTksIDEzLCAxMCwg
MTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAx
MDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA1MCwgNDEsIDMyLCAxMTEsIDExNywgMTE2LCAzMiwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAx
MTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAx
MTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAx
MDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAs
IDEwOSwgMTAxLCAxMTAsIDExNiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAs
IDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5
NywgMTA4LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3Niwg
NDgsIDQ4LCAxMywgMTAsIDQzLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTks
IDk3LCAxMDgsIDc2LCA0OSwgOTUsIDQ5LCA0MiwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcs
IDEwOCwgNDYsIDEyMSwgNDEsIDEzLCAxMCwgNDMsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDEx
NCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA0OCwgNDIsIDQwLCAxMTAsIDExMSwgMTE0LCAx
MDksIDk3LCAxMDgsIDQ2LCAxMjIsIDQxLCAxMywgMTAsIDQzLCAxMTgsIDgzLCAxMTIsIDEwNCwg
MTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgNDksIDQyLCA0MCwgMTEwLCAxMTEs
IDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIwLCA0MSwgMTMsIDEwLCA0MywgMTE4LCA4MywgMTEy
LCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDk1LCA1MCwgNDIsIDQw
LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjEsIDQyLCAxMTAsIDExMSwgMTE0
LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjAsIDQxLCAxMywgMTAsIDQzLCAxMTgsIDgzLCAxMTIsIDEw
NCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgOTUsIDQ5LCA0MiwgNDAsIDEx
MCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMSwgNDIsIDExMCwgMTExLCAxMTQsIDEw
OSwgOTcsIDEwOCwgNDYsIDEyMiwgNDEsIDEzLCAxMCwgNDMsIDExOCwgODMsIDExMiwgMTA0LCAx
MDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0OCwgNDIsIDQwLCA0MCwgNTEsIDQ2
LCA0OCwgNDIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMiwgNDIsIDExMCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMiwgNDEsIDQ1LCA0OSwgNDYsIDQ4LCA0MSwg
MTMsIDEwLCA0MywgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4
LCA3NiwgNTAsIDQ5LCA0MiwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEy
MiwgNDIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMCwgNDEsIDEzLCAxMCwg
NDMsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUw
LCA1MCwgNDIsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjAsIDQyLCAx
MTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjAsIDQ1LCA0MCwgMTEwLCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCA0NiwgMTIxLCA0MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4
LCA0NiwgMTIxLCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA4Niwg
NjksIDgyLCA4NCwgNjksIDg4LCA5NSwgNjgsIDY5LCA3MCwgNzMsIDc4LCA3MywgODQsIDczLCA3
OSwgNzgsIDgzLCAxMywgMTAsIDExOCwgMTExLCAxMDUsIDEwMCwgMzIsIDEwOSwgOTcsIDEwNSwg
MTEwLCA0MCwgMTE4LCAxMTEsIDEwNSwgMTAwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1
LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4LCA5NSwgNzcsIDY1LCA3MywgNzgsIDk1LCA2NiwgNjks
IDcxLCA3MywgNzgsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMiwgMTExLCAxMTUs
IDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAw
LCA2MSwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg1LCAx
MTIsIDEwMCwgOTcsIDExNiwgMTAxLCAxMDAsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAx
MDgsIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcs
IDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDg2LCA2OSwgODIsIDg0LCA2OSwgODgsIDk1LCA4NSwg
ODAsIDY4LCA2NSwgODQsIDY5LCA5NSwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAx
MywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4Mywg
ODQsIDc5LCA3NywgOTUsIDg2LCA2OSwgODIsIDg0LCA2OSwgODgsIDk1LCA4NSwgODAsIDY4LCA2
NSwgODQsIDY5LCA5NSwgNzgsIDc5LCA4MiwgNzcsIDY1LCA3NiwgMTMsIDEwLCAxMDksIDk3LCAx
MTYsIDUyLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODcsIDExMSwgMTE0LCAxMDgsIDEw
MCwgNjEsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA1OSwgMTMsIDEwLCAxMDMsIDEwOCwgOTUs
IDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDYxLCAxMTgsIDEwNSwgMTAx
LCAxMTksIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQy
LCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4NywgMTExLCAxMTQsIDEwOCwgMTAwLCA0MiwgMTE4
LCAxMDEsIDk5LCA1MiwgNDAsIDExMiwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAwLCA0NCwgNDksIDQ2LCA0OCwgNDEsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwg
ODAsIDExMSwgMTE1LCA2MSwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODcsIDExMSwgMTE0LCAx
MDgsIDEwMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTIsIDExMSwgMTE1LCAxMDUsIDEx
NiwgMTA1LCAxMTEsIDExMCwgODUsIDExMiwgMTAwLCA5NywgMTE2LCAxMDEsIDEwMCwgNDQsIDQ5
LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDg3LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExOSwgMTExLCAxMTQs
IDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUx
LCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgMTExLCAxMTQsIDEwOCwgMTAw
LCA2MSwgMTA5LCA5NywgMTE2LCA1MSwgNDAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDg3LCAx
MTEsIDExNCwgMTA4LCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDc4LCAxMTEsIDExNCwgMTA5
LCA5NywgMTA4LCA4NywgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIs
IDEwMSwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDExMSwgMTE0LCAxMDgs
IDEwMCwgNDIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODUsIDExMiwgMTAwLCA5Nywg
MTE2LCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODYsIDEwMSwgOTks
IDExNiwgMTExLCAxMTQsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExOCwgNzgsIDExMSwgMTE0LCAxMDksIDk3
LCAxMDgsIDg3LCA0NCwgNDgsIDQxLCA0MSwgNDYsIDEyMCwgMTIxLCAxMjIsIDU5LCAxMywgMTAs
IDExOCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDEx
NiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCA5OSwg
MTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTEx
LCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3
LCAxMTAsIDk5LCAxMDEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgODYsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDQxLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUwLCAzMiwgMTE3LCAxMTgsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAx
LCAxMDAsIDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0MSwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNywgMTE4LCA1MCwgNjEsIDExOCwg
MTAxLCA5OSwgNTAsIDQwLCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQxLCA1OSwgMTMsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcs
IDk1LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4LCA5NSwgNzcsIDY1LCA3MywgNzgsIDk1LCA2OSwg
NzgsIDY4LCAxMywgMTAsIDEwMywgMTA4LCA5NSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1
LCAxMTEsIDExMCwgNDYsIDEyMSwgMzIsIDQyLCA2MSwgMzIsIDQ1LCA0OSwgNDYsIDU5LCAzMiwg
MTI1XS5tYXAoYyA9PiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKS5qb2luKCIiKTsKK2NvbnN0IGZy
YWdtZW50U2hhZGVyR0xTTDEgPSBbMzUsIDExOCwgMTAxLCAxMTQsIDExNSwgMTA1LCAxMTEsIDEx
MCwgMzIsIDUyLCA1MywgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDgwLCA2NiwgODIsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDY1LCA3NiwgNjYsIDY5LCA2OCwgNzksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4Niwg
MzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzcs
IDY2LCA3MywgNjksIDc4LCA4NCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwg
NDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc5LCA4MCwgNjUs
IDY3LCA3MywgODQsIDg5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc2LCA4MCwgNzIs
IDY1LCA4NCwgNjksIDgzLCA4NCwgODYsIDY1LCA3NiwgODUsIDY5LCAzMiwgNDgsIDQ2LCA1Miwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDgwLCA2OSwgNjcs
IDg1LCA3NiwgNjUsIDgyLCA3OSwgODYsIDY5LCA4MiwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjUsIDY4LCA3MywgNjUs
IDc4LCA2NywgNjksIDc5LCA4NiwgNjksIDgyLCA2NSwgNzYsIDgwLCA3MiwgNjUsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY5LCA3NywgNzMsIDgzLCA4MywgNzMs
IDg2LCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcs
IDg0LCA3MywgODYsIDczLCA4NCwgODksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4Niwg
MzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NiwgNzks
IDY4LCA2NiwgNjUsIDgzLCA2OSwgNjgsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDcwLCA4NSwg
ODIsIDY1LCA2NywgNjksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDg1LCA4MiwgNzAsIDY1LCA2NywgNjksIDc3LCA2NSwg
ODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgNjksIDg0LCA2NSwgNzYsIDc2LCA3Mywg
NjcsIDg3LCA3OSwgODIsIDc1LCA3MCwgNzYsIDc5LCA4NywgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNjksIDc4LCA4NiwgNzMsIDgyLCA3OSwgNzgsIDc3LCA2OSwg
NzgsIDg0LCA2NiwgODIsIDY4LCA3MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNzgsIDc5LCA4MiwgNzcsIDY1LCA3NiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgNjYsIDg1LCA3NywgODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQs
IDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA3OCwgNzksIDgyLCA3NywgNjUsIDc2LCA4OCwgODksIDgzLCA2NywgNjUsIDc2LCA2OSwgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzYsIDczLCA3MSwgNzIsIDg0
LCA3NywgNjUsIDgwLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5
LCA2NywgODQsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEw
MSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA3NywgNjUsIDgw
LCA5NSwgNTEsIDY4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4
MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNzcsIDY1LCA4MCwgOTUsIDY3
LCA4NSwgNjYsIDczLCA2NywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgODUsIDgzLCA2OSwgODMsIDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCA3NiwgNzAsIDgy
LCA3OSwgNzcsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA3NywgNjUs
IDgwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgODAsIDcy
LCA2OSwgODIsIDczLCA2NywgNjUsIDc2LCA5NSwgNzIsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMs
IDY3LCA4MywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODUsIDgz
LCA2OSwgODMsIDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCA3NiwgNzMsIDc4LCA4NiwgNjks
IDgyLCA4NCwgNjksIDg4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA4MiwgNzEsIDY2LCA2OCwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA3OSwgNzgs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2NSwgNjgsIDcz
LCA2NSwgNzgsIDY3LCA2OSwgNzksIDY3LCA2NywgNzYsIDg1LCA4MywgNzMsIDc5LCA3OCwgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzIsIDc5LCA4MiwgNzMsIDkw
LCA3OSwgNzgsIDc5LCA2NywgNjcsIDc2LCA4NSwgODMsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA4NSwgNzcsIDk1LCA2NiwgNzksIDc4
LCA2OSwgOTUsIDczLCA3OCwgNzAsIDc2LCA4NSwgNjksIDc4LCA2NywgNjksIDgyLCA4MywgMzIs
IDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NiwgMTExLCAx
MTAsIDEwMSwgMTE1LCA4MCwgMTAxLCAxMTQsIDc3LCAxMDEsIDExNSwgMTA0LCAzMiwgNDgsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA4NSwgNzcsIDk1LCA3
NywgNzksIDgyLCA4MCwgNzIsIDk1LCA3MywgNzgsIDcwLCA3NiwgODUsIDY5LCA3OCwgNjcsIDY5
LCA4MiwgODMsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgODYsIDczLCA3MSwgNzgsIDY5LCA4NCwgODQsIDY5LCA2NiwgNzYsIDY5LCA3OCwgNjgsIDc3
LCA3OSwgNjgsIDY5LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgODksIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA2NSwgNzcsIDgwLCA3NiwgNjksIDgy
LCA1MSwgNjgsIDcxLCA4MiwgNjksIDY5LCA3OCwgNjgsIDY5LCA4MCwgODQsIDcyLCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNjUsIDc3LCA4MCwgNzYsIDY5
LCA4MiwgNTEsIDY4LCA2NiwgNzEsIDgyLCA3NywgNjUsIDgwLCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4NSwgODMsIDY5LCA4MCwgNzIsIDg5LCA4MywgNzMsIDY3
LCA2NSwgNzYsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzAsIDY1LCA3NiwgNzYsIDc5LCA3MCwgNzAs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1
LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgs
IDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2NSwgODQs
IDk1LCA2NiwgODUsIDc3LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwg
NDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjks
IDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA4NCwgNzMsIDc4LCA4NCwgOTUsIDg0LCA2OSwg
ODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0
OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc4LCA3Mywg
ODMsIDc5LCA4NCwgODIsIDc5LCA4MCwgNzMsIDY3LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4
MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NiwgODIsIDY4LCA3MCwgOTUsIDg2LCA5
NSwgNzIsIDY5LCA3MywgNzEsIDcyLCA4NCwgOTUsIDY3LCA3OSwgODIsIDgyLCA2OSwgNzYsIDY1
LCA4NCwgNjksIDY4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3
NywgODMsIDk1LCA2NiwgODIsIDY4LCA3MCwgOTUsIDY5LCA3OCwgNjksIDgyLCA3MSwgODksIDk1
LCA2NywgNzksIDc4LCA4MywgNjksIDgyLCA4NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNzIsIDY5LCA2OSwgNzgsIDk1
LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUs
IDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgz
LCA4MywgOTUsIDg0LCA3MiwgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDY1LCA3OCwgNjgs
IDc3LCA2NSwgODMsIDc1LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3Mywg
ODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCA2OCwgNjksIDY2LCA4NSwgNzEsIDc3LCA3OSwgNjgsIDY5LCAzMiwg
NDgsIDEwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNzIs
IDY1LCA2OCwgNjksIDgyLCA5NSwgNzgsIDY1LCA3NywgNjksIDMyLCAxMDIsIDExNCwgOTcsIDEw
MywgMTA5LCAxMDEsIDExMCwgMTE2LCA1OCwgMTEyLCA5OCwgMTE0LCAxMCwgMTMsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcs
IDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA2NiwgNjksIDcxLCA3Mywg
NzgsIDEzLCAxMCwgMTEyLCAxMTQsIDEwMSwgOTksIDEwNSwgMTE1LCAxMDUsIDExMSwgMTEwLCAz
MiwgMTA0LCAxMDUsIDEwMywgMTA0LCAxMTIsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCA1
OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDcwLCA4Miwg
NzksIDc3LCA3NiwgNzMsIDc4LCA2OSwgNjUsIDgyLCA4MywgODAsIDY1LCA2NywgNjksIDEzLCAx
MCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMTYsIDEwMCwgNDksIDUy
LCA0OCwgNDQsIDk5LCAxMTEsIDEwOCwgMTE3LCAxMDksIDExMCwgOTUsIDEwOSwgOTcsIDEwNiwg
MTExLCAxMTQsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCA1OSwg
MTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAz
MiwgNjEsIDMyLCA0OCwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywg
MzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5
LCAzMiwgODMsIDk5LCAxMDEsIDExMCwgMTAxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDksIDk3
LCAxMTYsIDUyLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA4MCwgMTE0LCAxMTEsIDEwNiwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAz
MiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwg
OTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ5
LCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0
OCwgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCA3NywgOTcs
IDExNiwgMTAxLCAxMTQsIDEwNSwgOTcsIDEwOCwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MCwgMzIsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDczLCAxMTAs
IDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY1
LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc5LCAxMTIsIDk3LCA5OSwgMTA1
LCAxMTYsIDEyMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MCwgMzIsIDExOCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwg
NzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIs
IDExOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA5LCA5NywgMTEyLCA3MywgMTEwLCAxMDIs
IDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNzMsIDEx
MCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwg
NzcsIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgz
LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCAxMDUsIDEyMiwgMTAxLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2NiwgMTE3LCAxMDksIDExMiwg
NzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIs
IDk3LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
NTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwg
MTEwLCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3
LCAxMTYsIDUyLCAzMiwgMTExLCAxMTIsIDk3LCA5OSwgMTA1LCAxMTYsIDEyMSwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDEs
IDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1
LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAx
MDQsIDExNiwgMTA5LCA5NywgMTEyLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAs
IDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDksIDEwNSwgOTksIDExNCwgMTEx
LCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwg
MTAxLCAxMTQsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3
LCAxMTYsIDUyLCAzMiwgOTgsIDExNywgMTA5LCAxMTIsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4NCwgOTcsIDExMCwg
MTAzLCAxMDEsIDExMCwgMTE2LCA4MywgMTEyLCA5NywgOTksIDEwMSwgODAsIDk3LCAxMTQsIDk3
LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAx
MDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEs
IDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjUsIDEwOCwgOTgs
IDEwMSwgMTAwLCAxMTEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTIsIDMyLCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAx
MDMsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0
LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDgzLCAx
MDUsIDEyMiwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
OCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNjcsIDExMSwgMTA4LCAx
MTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjksIDEyMSwg
MTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2
LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAz
MiwgMTE4LCA2OCwgMTAxLCA5OCwgMTE3LCAxMDMsIDc3LCAxMTEsIDEwMCwgMTAxLCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3
LCAxMTEsIDk3LCAxMTYsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwg
OTcsIDExNiwgODIsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4
MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAz
MiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDczLCAxMTAs
IDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5OSwgMTA4
LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEs
IDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDY2LCAxMTcsIDEwOSwgMTEyLCA3MywgMTEwLCAx
MDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2Nywg
MTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0LCA5NywgMTEwLCAxMDMsIDEw
MSwgMTEwLCAxMTYsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA4MCwgOTcsIDExNCwgOTcsIDEwOSwg
MTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5Nywg
MTE0LCA2NywgMTExLCA5NywgMTE2LCA2NiwgMTE3LCAxMDksIDExMiwgNzcsIDk3LCAxMTYsIDEx
NCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY3LCAx
MDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODQsIDEwNSwgMTEwLCAxMTYsIDgw
LCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDY1LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwg
MTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEs
IDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0LCAxMDUsIDExMCwgMTE2LCA3MywgMTEwLCAx
MDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTksIDEwOCwg
MTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4NCwgMTA1LCAxMTAsIDExNiwgNzcsIDk3
LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTgsIDY1LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEsIDExMiwgMTIxLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NSwgMTEwLCAxMDUsIDExNSwgMTEx
LCAxMTYsIDExNCwgMTExLCAxMTIsIDEyMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDExNiwg
MTE0LCAxMTEsIDExMiwgMTIxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODMsIDEwNCwgMTAxLCAxMDEsIDExMCwgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEx
OCwgODMsIDEwNCwgMTAxLCAxMDEsIDExMCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNSwgMTA0LCAxMDEsIDEwMSwgMTEwLCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExOCwgODIsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3Nywg
MTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAx
MTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgs
IDgyLCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzMsIDExMCwg
MTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAx
LCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4NCwgMTA0
LCAxMDUsIDk5LCAxMDcsIDExMCwgMTAxLCAxMTUsIDExNSwgNzMsIDExMCwgMTAyLCAxMTEsIDEx
NSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNiwgMTA0LCAxMDUsIDk5LCAx
MDcsIDExMCwgMTAxLCAxMTUsIDExNSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDg0LCAxMDQsIDEwNSwgOTksIDEwNywg
MTEwLCAxMDEsIDExNSwgMTE1LCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDUs
IDExMSwgMTEwLCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODQsIDEwNSwgMTEwLCAxMTYsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgz
LCAxMTcsIDk4LCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDExNiwg
MTAxLCAxMTAsIDExNSwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYs
IDQ4LCA0OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwg
MTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA5NSwgNDksIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEw
NSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0
OSwgNDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEw
NCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgOTUsIDUwLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUs
IDk5LCA5NywgMTA4LCA3NiwgNTAsIDk1LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYs
IDUwLCA0OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwg
MTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0OSwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5
OSwgOTcsIDEwOCwgNzYsIDUwLCA1MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODgsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQs
IDEwNSwgOTksIDk3LCAxMDgsIDg5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA5MCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwg
MTA1LCA5OSwgOTcsIDEwOCwgODgsIDg4LCA5NSwgOTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5Nywg
MTA4LCA4OSwgODksIDk1LCA5MCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDkwLCA5MCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEs
IDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODgsIDg5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4
OSwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEw
NCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDkwLCA4OCwgNTksIDEzLCAxMCwgMTI1LCA1
OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2
LCAzMiwgNjEsIDMyLCA0OSwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEw
MywgMzIsIDYxLCAzMiwgNDksIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwg
MTA5LCAzMiwgNzcsIDEwMSwgMTE1LCAxMDQsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwOSwgOTcs
IDExNiwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDExOCwgMTA1LCAxMTUsIDEwNSwgOTgsIDEwNSwgMTA4LCAx
MDUsIDExNiwgMTIxLCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwg
MTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwg
MzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTA1LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNTksIDEz
LCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5Nywg
MTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA0OSwgNDEsIDMyLCAxMDUsIDExMCwgMzIs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4
NywgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEs
IDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA1MCwgNDEsIDMyLCAxMDUs
IDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY5LCAxMTAsIDExOCwgMTA1LCAx
MTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQsIDExNCwgOTcsIDEwMCwg
MTA1LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3
LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA0OCwgNDQsIDMyLCA5OCwgMTA1
LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDksIDQxLCAzMiwgMTE3LCAx
MTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcs
IDExNCwgMTAxLCA1MCwgNjgsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAs
IDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDgzLCA5NywgMTA5LCAxMTIs
IDEwOCwgMTAxLCAxMTQsIDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA1OSwgMTAs
IDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwg
MTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDgsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAs
IDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDUwLCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEw
MiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNSwgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAz
MiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYs
IDY2LCAxMTQsIDEwMCwgMTAyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4Mywg
OTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA1OSwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMDEsIDExMCwgMTE4LCAx
MDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIs
IDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDMyLCAxMTUsIDk3LCAxMDksIDExMiwg
MTA4LCAxMDEsIDExNCwgNTAsIDY4LCA0MCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwg
MTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA4MywgOTcsIDEwOSwg
MTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNDQs
IDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDEx
NiwgNjYsIDExNCwgMTAwLCAxMDIsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDgz
LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQxLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0MCwgMTE1LCA0NCwg
OTksIDQxLCAzMiwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA0MCwgMTE1LCA0
NCwgOTksIDQxLCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwg
MTAxLCAxMTYsIDMyLCA2MSwgMzIsIDUwLCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUs
IDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDEx
MSwgMTE0LCAxMDksIDMyLCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDY3LCAx
MTcsIDk4LCAxMDEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODQsIDEwMSwgMTIwLCAx
MTYsIDExNywgMTE0LCAxMDEsIDU5LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMDgsIDk3
LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA1MCwg
NDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDks
IDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgMTE1LCA5Nywg
MTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODMs
IDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNTksIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIs
IDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE0LCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwg
MTAxLCAxMTQsIDMyLCAxMTUsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNjcsIDExNywg
OTgsIDEwMSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDExNiwg
MTE3LCAxMTQsIDEwMSwgNDQsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODMsIDk3LCAx
MDksIDExMiwgMTA4LCAxMDEsIDExNCwgNDEsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCAxMTUsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDgyLCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2LCAxMTEsIDEwMCwgNDAsIDEx
NSwgNDQsIDk5LCA0NCwgMTA4LCA0MSwgMzIsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQs
IDEwMSwgNzYsIDExMSwgMTAwLCA0MCwgMTE1LCA0NCwgOTksIDQ0LCAxMDgsIDQxLCAxMywgMTAs
IDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
ODAsIDczLCA2MSwgNTEsIDQ2LCA0OSwgNTIsIDQ5LCA1MywgNTcsIDUwLCA1NCwgNTMsIDUxLCA1
MywgNTYsIDU3LCA1NSwgNTcsIDUxLCA1MCwgNTEsIDU2LCA1MiwgNTQsIDUwLCA1NCwgNTIsIDUx
LCA1MSwgNTYsIDUxLCA1MCwgNTUsIDU3LCA1MywgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAx
MTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3NiwgMTA1LCAxMTAsIDEw
MSwgOTcsIDExNCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAx
LCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNjEsIDUwLCA0NiwgNTAsIDU5LCAx
MywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgNzEsIDk3LCAxMDksIDEwOSwgOTcsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA4
MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDYxLCA0
OSwgNDYsIDQ4LCA0NywgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDY5LCAxMTAsIDk5LCAx
MTEsIDEwMCwgMTAxLCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwg
MTExLCAxMjAsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEwMSwg
NjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwg
NjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0OCwgNDYsIDUwLCA0OSwgNTAsIDU0LCA0NCwgNDgs
IDQ2LCA1NSwgNDksIDUzLCA1MCwgNDQsIDQ4LCA0NiwgNDgsIDU1LCA1MCwgNTAsIDQxLCA1OSwg
MTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDY5LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCA2MSwgNDgsIDQ2LCA0OCwg
NDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OSwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQw
LCAxMjAsIDQxLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTIwLCA0NCwgNDgsIDQ2
LCA0OCwgNDQsIDQ5LCA0NiwgNDgsIDQxLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgOTcsIDk4LCAxMTUsIDY5LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEsIDMy
LCA5NywgOTgsIDExNSwgNDAsIDEyMCwgNDEsIDQzLCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAx
MTEsIDExMCwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDEw
OSwgOTcsIDEyMCwgNjksIDExMiwgMTE1LCA0MCwgMTIwLCA0MSwgMzIsIDEwOSwgOTcsIDEyMCwg
NDAsIDEyMCwgNDQsIDY5LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCA0MSwgMTMsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwgOTcsIDExNiwgMTE3
LCAxMTQsIDk3LCAxMTYsIDEwMSwgNjksIDExMiwgMTE1LCA0MCwgMTIwLCA0MSwgMzIsIDk5LCAx
MDgsIDk3LCAxMDksIDExMiwgNDAsIDEyMCwgNDQsIDY5LCAxMTIsIDExNSwgMTA1LCAxMDgsIDEx
MSwgMTEwLCA0NCwgNDksIDQ2LCA0OCwgNDEsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MSwgMzIs
IDExNiwgMTE0LCA5NywgMTEwLCAxMTUsIDExMiwgMTExLCAxMTUsIDEwMSwgNzcsIDk3LCAxMTYs
IDUxLCA0MCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0
LCAxMDUsIDEyMCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEw
NSwgNDgsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwg
OTMsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDQ5LCA2MSwgMTA1LCAx
MTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDksIDkzLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCA1MCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MSwg
MzIsIDExMSwgMTE3LCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA2MSwgMTA5LCA5
NywgMTE2LCA1MSwgNDAsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDEwNSwgNDgsIDQ2
LCAxMjAsIDQ0LCAxMDUsIDQ5LCA0NiwgMTIwLCA0NCwgMTA1LCA1MCwgNDYsIDEyMCwgNDEsIDQ0
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4LCA0NiwgMTIxLCA0NCwgMTA1
LCA0OSwgNDYsIDEyMSwgNDQsIDEwNSwgNTAsIDQ2LCAxMjEsIDQxLCA0NCwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMiwgNDQsIDEwNSwgNDksIDQ2LCAxMjIs
IDQ0LCAxMDUsIDUwLCA0NiwgMTIyLCA0MSwgMTMsIDEwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAx
MDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExMSwgMTE3LCAxMTYsIDc3LCA5NywgMTE2LCAx
MTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MSwg
MzIsIDEwNSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwMSwgNzcsIDk3LCAxMTYsIDUxLCA0
MCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUs
IDEyMCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3
LCA0OCwgNDgsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0
OCwgOTMsIDkxLCA0OCwgOTMsIDQ0LCA5NywgNDgsIDQ5LCA2MSwgMTA1LCAxMTAsIDc3LCA5Nywg
MTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA5MSwgNDksIDkzLCA0NCwgOTcsIDQ4LCA1
MCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5Mywg
OTEsIDUwLCA5MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA0
OSwgNDgsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwg
OTMsIDkxLCA0OCwgOTMsIDQ0LCA5NywgNDksIDQ5LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2
LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDksIDkzLCA5MSwgNDksIDkzLCA0NCwgOTcsIDQ5LCA1MCwg
NjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEs
IDUwLCA5MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA1MCwg
NDgsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMs
IDkxLCA0OCwgOTMsIDQ0LCA5NywgNTAsIDQ5LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAx
MTQsIDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA5MSwgNDksIDkzLCA0NCwgOTcsIDUwLCA1MCwgNjEs
IDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgOTEsIDUw
LCA5MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk4LCA0OCwgNDks
IDYxLCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ5LCA0OSwgNDUsIDk3LCA0OSwgNTAsIDQyLCA5Nywg
NTAsIDQ5LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTgsIDQ5LCA0
OSwgNjEsIDQ1LCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ5LCA0OCwgNDMsIDk3LCA0OSwgNTAsIDQy
LCA5NywgNTAsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTgs
IDUwLCA0OSwgNjEsIDk3LCA1MCwgNDksIDQyLCA5NywgNDksIDQ4LCA0NSwgOTcsIDQ5LCA0OSwg
NDIsIDk3LCA1MCwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MDAsIDEwMSwgMTE2LCA2MSwgOTcsIDQ4LCA0OCwgNDIsIDk4LCA0OCwgNDksIDQzLCA5NywgNDgs
IDQ5LCA0MiwgOTgsIDQ5LCA0OSwgNDMsIDk3LCA0OCwgNTAsIDQyLCA5OCwgNTAsIDQ5LCA1OSwg
MTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA5LCA5NywgMTE2LCA1
MSwgNDAsIDk4LCA0OCwgNDksIDQ0LCA0MCwgNDUsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDgsIDQ5
LCA0MywgOTcsIDQ4LCA1MCwgNDIsIDk3LCA1MCwgNDksIDQxLCA0NCwgNDAsIDk3LCA0OSwgNTAs
IDQyLCA5NywgNDgsIDQ5LCA0NSwgOTcsIDQ4LCA1MCwgNDIsIDk3LCA0OSwgNDksIDQxLCA0NCwg
MTMsIDEwLCA5OCwgNDksIDQ5LCA0NCwgNDAsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDgsIDQ4LCA0
NSwgOTcsIDQ4LCA1MCwgNDIsIDk3LCA1MCwgNDgsIDQxLCA0NCwgNDAsIDQ1LCA5NywgNDksIDUw
LCA0MiwgOTcsIDQ4LCA0OCwgNDMsIDk3LCA0OCwgNTAsIDQyLCA5NywgNDksIDQ4LCA0MSwgNDQs
IDEzLCAxMCwgOTgsIDUwLCA0OSwgNDQsIDQwLCA0NSwgOTcsIDUwLCA0OSwgNDIsIDk3LCA0OCwg
NDgsIDQzLCA5NywgNDgsIDQ5LCA0MiwgOTcsIDUwLCA0OCwgNDEsIDQ0LCA0MCwgOTcsIDQ5LCA0
OSwgNDIsIDk3LCA0OCwgNDgsIDQ1LCA5NywgNDgsIDQ5LCA0MiwgOTcsIDQ5LCA0OCwgNDEsIDQx
LCA0NywgMTAwLCAxMDEsIDExNiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTYsIDExMSwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDgzLCAxMTIs
IDk3LCA5OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwg
MTEwLCAzMiwgMTEyLCAxMTEsIDExOSwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAx
MTgsIDEwMSwgOTksIDUxLCA0MCwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDY5LCAxMTAs
IDk5LCAxMTEsIDEwMCwgMTAxLCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIs
IDExNCwgMTExLCAxMjAsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTYsIDExMSwgNzEsIDk3LCAxMDksIDEwOSwgOTcsIDgzLCAxMTIsIDk3
LCA5OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwgMTExLCAx
MTQsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTEyLCAxMTEsIDExOSwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAxMTgs
IDEwMSwgOTksIDUxLCA0MCwgNzEsIDk3LCAxMDksIDEwOSwgOTcsIDY5LCAxMTAsIDk5LCAxMTEs
IDEwMCwgMTAxLCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTEx
LCAxMjAsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMTUsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDQwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAx
MywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDk3LCAxMDgsIDEx
NywgMTAxLCA0MiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNTksIDEzLCAxMCwgMTI1LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTIsIDExMSwgMTE5LCA1MywgNDAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA0MSwgMzIs
IDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCAxMTMsIDYxLCAx
MTgsIDk3LCAxMDgsIDExNywgMTAxLCA0MiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNTksIDEz
LCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNSwgMTEzLCA0MiwgMTE1
LCAxMTMsIDQyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMywgMTAxLCAxMTYsIDc2LCAxMTcsIDEw
OSwgMTA1LCAxMTAsIDk3LCAxMTAsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
OTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAx
LCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDQwLCAxMDAs
IDExMSwgMTE2LCA0MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDc2LCAxMTcsIDEwOSwg
MTA1LCAxMTAsIDk3LCAxMTAsIDk5LCAxMDEsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA2
NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDQxLCA0NCwgNDgsIDQ2LCA0NCwgNDksIDQ2LCA0
MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MDMsIDEwMSwgMTE2LCA4MiwgOTcsIDExMCwgMTAwLCA0MCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIs
IDExNSwgMTAxLCAxMDEsIDEwMCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgNDAsIDExNSwgMTA1LCAx
MTAsIDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0NiwgMTIwLCAx
MjEsIDMyLCA0NCwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDQ5LCA1MCwgNDYsIDU3LCA1NiwgNTcs
IDU2LCA0NCwgNTUsIDU2LCA0NiwgNTAsIDUxLCA1MSwgNDEsIDQxLCA0MSwgNDIsIDUyLCA1MSwg
NTUsIDUzLCA1NiwgNDYsIDUzLCA1MiwgNTMsIDUxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTE2LCAxMDQsIDEwMSwg
MTE0LCA0MCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDQsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3LCAxMTQsIDEwNSwgOTcsIDExMCwgOTks
IDEwMSwgNjUsIDEwOSwgMTExLCAxMTcsIDExMCwgMTE2LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCA5NywgMTEwLCAxMDAsIDYxLCAxMDMsIDEw
MSwgMTE2LCA4MiwgOTcsIDExMCwgMTAwLCA0MCwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0MSwgNTks
IDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMTYsIDEwNCwg
MTAxLCAxMTQsIDYxLCAxMDksIDEwNSwgMTIwLCA0MCwgNDUsIDExOCwgOTcsIDExNCwgMTA1LCA5
NywgMTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEwLCAxMTYsIDQ3LCA1MCwgNTMs
IDUzLCA0NiwgNDgsIDQ0LCAxMTgsIDk3LCAxMTQsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjUs
IDEwOSwgMTExLCAxMTcsIDExMCwgMTE2LCA0NywgNTAsIDUzLCA1MywgNDYsIDQ4LCA0NCwgMTE0
LCA5NywgMTEwLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwg
MTEwLCAzMiwgMTAwLCAxMDUsIDExNiwgMTA0LCAxMDEsIDExNCwgNTksIDEzLCAxMCwgMTI1LCAx
MywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTE0LCAxMDMsIDk4LCAxMDAsIDc3LCA5NywgMTIwLCA4MiwgOTcsIDExMCwgMTAzLCAx
MDEsIDYxLCA1MCwgNTMsIDUzLCA0NiwgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIs
IDMyLCAxMTYsIDExMSwgODIsIDcxLCA2NiwgNjgsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
OTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDEwOSwgOTcsIDEyMCwgODIsIDcxLCA2NiwgNjEsIDEwOSwgOTcsIDEy
MCwgNjksIDExMiwgMTE1LCA0MCwgMTA5LCA5NywgMTIwLCA0MCwgOTksIDExMSwgMTA4LCAxMTEs
IDExNCwgNDYsIDExNCwgNDQsIDEwOSwgOTcsIDEyMCwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAx
MTQsIDQ2LCAxMDMsIDQ0LCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgOTgsIDQxLCA0MSwg
NDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA2OCwgNjEsIDEwOSwg
OTcsIDEyMCwgNDAsIDExNCwgMTAzLCA5OCwgMTAwLCA3NywgOTcsIDEyMCwgODIsIDk3LCAxMTAs
IDEwMywgMTAxLCA0NywgMTA5LCA5NywgMTIwLCA4MiwgNzEsIDY2LCA0NCwgNDksIDQ2LCA0MSwg
NTksIDEzLCAxMCwgNjgsIDYxLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDQwLCAxMDIsIDEwOCwg
MTExLCAxMTEsIDExNCwgNDAsIDY4LCA0MSwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQsIDQ4
LCA0NiwgNDQsIDQ5LCA0NiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTQsIDEwMywgOTgsIDYxLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4
LCA0MiwgNjgsIDU5LCAxMywgMTAsIDExNCwgMTAzLCA5OCwgNjEsIDExNiwgMTExLCA3MSwgOTcs
IDEwOSwgMTA5LCA5NywgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTQsIDEwMywgOTgsIDQx
LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEs
IDk5LCA1MiwgNDAsIDExNCwgMTAzLCA5OCwgNDQsIDY4LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDExNCwgMTExLCAxMDksIDgyLCA3MSwg
NjYsIDY4LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExNCwgMTAzLCA5OCwgMTAwLCA0MSwg
MzIsIDEyMywgMTMsIDEwLCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDExNCwgMTAzLCA5OCwgNjEs
IDExNiwgMTExLCA3NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgODMsIDExMiwgOTcsIDk5LCAx
MDEsIDQwLCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDExNCwgMTAzLCA5OCwgNDEsIDU5LCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwg
NDYsIDExNCwgMTAzLCA5OCwgNDcsIDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgOTcsIDU5LCAxMywg
MTAsIDEyNSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgy
LCA2OSwgNjcsIDczLCA4MCwgODIsIDc5LCA2NywgNjUsIDc2LCA5NSwgODAsIDczLCA1MCwgMzIs
IDQ4LCA0NiwgNDksIDUzLCA1NywgNDksIDUzLCA1MiwgNTcsIDUyLCAxMywgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA2NywgNzMsIDgwLCA4MiwgNzks
IDY3LCA2NSwgNzYsIDk1LCA4MCwgNzMsIDMyLCA0OCwgNDYsIDUxLCA0OSwgNTYsIDUxLCA0OCwg
NTcsIDU2LCA1NiwgNTQsIDQ5LCA1NiwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDc3LCA3MywgNzgsIDczLCA3NywgODUsIDc3LCA4NiwgNjUsIDgyLCA3Mywg
NjUsIDc4LCA2NywgNjksIDMyLCA0OCwgNDYsIDQ4LCA0OCwgNDgsIDUzLCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNiwg
ODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA4NCwgMTExLCA2NSwg
MTE4LCAxMDEsIDExNCwgOTcsIDEwMywgMTAxLCA4MywgMTA4LCAxMTEsIDExMiwgMTAxLCA0MCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAs
IDEwMSwgMTE1LCAxMTUsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAx
MTcsIDExNCwgMTEwLCAzMiwgMTE1LCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCA0MCwgMTE0LCAx
MTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDQzLCA3NywgNzMsIDc4
LCA3MywgNzcsIDg1LCA3NywgODYsIDY1LCA4MiwgNzMsIDY1LCA3OCwgNjcsIDY5LCA1OSwgMTMs
IDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMiwgMTE0LCAx
MDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNzEsIDExNCwgOTcsIDEyMiwgMTA1LCAxMTAsIDEwMywg
ODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDEx
MCwgOTksIDEwMSwgNTcsIDQ4LCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwg
MTAxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDQ4LCA0MiwgNTAsIDUzLCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2
LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTAsIDMyLCAxMDMsIDEwMSwgMTE2LCA2NSwgNjUsIDgyLCAxMTEsIDExNywgMTAzLCAx
MDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNzAsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwgMTE1LCA0
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODYs
IDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAx
MTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgNDgsIDQ2LCA0MSwg
NTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCA5NywgMTEyLCAx
MTIsIDEwOCwgMTIxLCA3MywgMTA5LCA5NywgMTAzLCAxMDEsIDgwLCAxMTQsIDExMSwgOTksIDEw
MSwgMTE1LCAxMTUsIDEwNSwgMTEwLCAxMDMsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE0
LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEs
IDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDExNCwgMTAzLCA5OCwgNjEsIDExNiwgMTExLCA3MSwg
OTcsIDEwOSwgMTA5LCA5NywgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTQsIDEwMSwgMTE1
LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTE0LCAxMDMsIDk4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAx
MDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDExNCwgMTAzLCA5OCwgNjEsIDExNSwgOTcsIDEx
NiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAx
MTYsIDQ2LCAxMTQsIDEwMywgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcs
IDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNTksIDEzLCAxMCwg
MTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3
LCAxMTYsIDEwMSwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAx
MTAsIDExNiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwg
MzIsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCA4
MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDgsIDQ4LCAxMywg
MTAsIDQzLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2
LCA0OSwgOTUsIDQ5LCA0MiwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEy
MSwgNDEsIDEzLCAxMCwgNDMsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwg
OTcsIDEwOCwgNzYsIDQ5LCA0OCwgNDIsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDQ2LCAxMjIsIDQxLCAxMywgMTAsIDQzLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEw
NSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgNDksIDQyLCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5
NywgMTA4LCA0NiwgMTIwLCA0MSwgMTMsIDEwLCA0MywgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwg
MTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDk1LCA1MCwgNDIsIDQwLCAxMTAsIDExMSwg
MTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjEsIDQyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAx
MDgsIDQ2LCAxMjAsIDQxLCAxMywgMTAsIDQzLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQs
IDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgOTUsIDQ5LCA0MiwgNDAsIDExMCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgNDYsIDEyMSwgNDIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
NDYsIDEyMiwgNDEsIDEzLCAxMCwgNDMsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1
LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0OCwgNDIsIDQwLCA0MCwgNTEsIDQ2LCA0OCwgNDIsIDEx
MCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMiwgNDIsIDExMCwgMTExLCAxMTQsIDEw
OSwgOTcsIDEwOCwgNDYsIDEyMiwgNDEsIDQ1LCA0OSwgNDYsIDQ4LCA0MSwgMTMsIDEwLCA0Mywg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDQ5
LCA0MiwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMiwgNDIsIDExMCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMCwgNDEsIDEzLCAxMCwgNDMsIDExOCwgODMs
IDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA1MCwgNDIsIDQw
LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjAsIDQyLCAxMTAsIDExMSwgMTE0
LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjAsIDQ1LCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5Nywg
MTA4LCA0NiwgMTIxLCA0MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIxLCA0
MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTUsIDExNiwgMTE0LCAxMTcsIDk5LCAx
MTYsIDMyLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwg
MTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAx
LCAxMTYsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAx
MTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5
NywgMTE2LCAxMTYsIDEwMSwgMTEwLCAxMTcsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3NiwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDcyLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgs
IDEwMCwgMTExLCAxMTYsIDg2LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIs
IDEwMSwgMTAwLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEw
MCwgMTExLCAxMTYsIDc2LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
ODYsIDEwMCwgMTExLCAxMTYsIDcyLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNTksIDEz
LCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwg
MTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDk5LCAxMTEsIDEwOSwg
MTEyLCAxMTcsIDExNiwgMTAxLCA4MCwgMTExLCAxMDUsIDExMCwgMTE2LCA2NSwgMTEwLCAxMDAs
IDgzLCAxMTIsIDExMSwgMTE2LCA4MCwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYs
IDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCA0MCwgMTE4LCAxMDEsIDk5LCA1Miwg
MzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ0LCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgODYsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgNzgsIDQxLCAzMiwg
MTIzLCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwg
MTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgs
IDExNiwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwg
MTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDYxLCAxMDgs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYsIDk3LCA0NiwgMTIwLCAxMjEsIDEyMiwg
NDUsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDU5LCAx
MywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgsIDEwNSwgMTAzLCAx
MDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAxMTMsIDEx
NywgOTcsIDExNCwgMTAxLCAxMDAsIDYxLCAxMDAsIDExMSwgMTE2LCA0MCwgMTE0LCAxMDEsIDEx
NSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAyLCAx
MDIsIDExNSwgMTAxLCAxMTYsIDQ0LCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0Niwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDEs
IDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAx
MTUsIDExMywgMTE0LCAxMTYsIDQwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0Niwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwg
MTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTE0
LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc2LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5
LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDEx
NiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAx
MTYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzIs
IDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCA4Niwg
NDMsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3NiwgNDEsIDU5LCAxMywgMTAs
IDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA4NiwgMTAwLCAxMTEsIDExNiwgNzIs
IDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMDAsIDExMSwg
MTE2LCA0MCwgODYsIDQ0LCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzIsIDQx
LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAx
MDAsIDExMSwgMTE2LCA3NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEw
MCwgNjEsIDEwMCwgMTExLCAxMTYsIDQwLCA3OCwgNDQsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4
LCAxMTYsIDQ2LCA3NiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAx
MTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0
LCA5NywgMTE2LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4
LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAx
MDksIDExMiwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDEx
NCwgMTEwLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNTksIDEzLCAxMCwgMTI1
LCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEw
LCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2
LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5NywgMTA4
LCA4MCwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDcz
LCAxMTAsIDEwMiwgMTExLCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgODYs
IDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgNzgsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExMiwg
MTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAs
IDEwMiwgMTExLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNTksIDEzLCAxMCwg
MTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2
LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDEwOCwgMTAxLCAxMTAs
IDEwMywgMTE2LCAxMDQsIDQwLCA0NSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCA5Nywg
MTE2LCA5NywgNDYsIDEyMCwgMTIxLCAxMjIsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1
LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDEwNSwgMTIyLCAxMDEsIDQwLCA0NSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCA5Nywg
MTE2LCA5NywgNDYsIDEyMCwgMTIxLCAxMjIsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1
LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzIsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDEwNSwgMTIyLCAxMDEsIDQwLCA4NiwgNDMsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYs
IDQ2LCA3NiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2
LCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5Nywg
MTE2LCAxMDEsIDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgODYsIDQ0LCAxMTQsIDEwMSwgMTE1LCAx
MTcsIDEwOCwgMTE2LCA0NiwgNzIsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwg
MTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgODUsIDExMCwgOTksIDEw
OCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNjEsIDEwMCwgMTExLCAxMTYsIDQwLCA3OCwgNDQs
IDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3NiwgNDEsIDU5LCAxMywgMTAsIDEx
NCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDYx
LCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAs
IDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYs
IDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEw
LCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAx
MDgsIDExNiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgOTks
IDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDcyLCAxMDEsIDEwOSwgMTA1LCAxMTUsIDEx
MiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgODAsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEw
NCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgNDAsIDExOCwgMTAxLCA5
OSwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYsIDk3LCA0NCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDg2LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDc4LCA0
MSwgMzIsIDEyMywgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2
LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDExNCwgMTAxLCAxMTUsIDEx
NywgMTA4LCAxMTYsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2
LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDYxLCAxMDAsIDExMSwgMTE2LCA0MCwgNzgsIDQ0LCAx
MDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYsIDk3LCA0NiwgMTIwLCAxMjEsIDEy
MiwgNDEsIDQyLCA0OCwgNDYsIDUzLCA0MywgNDgsIDQ2LCA1MywgNTksIDEzLCAxMCwgMTE0LCAx
MDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNjEsIDEx
NSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNjksIDExMiwgMTE1LCA0MCwgMTE0
LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDEs
IDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAx
MTEsIDExNiwgNzYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDYx
LCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2
LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEs
IDExNSwgMTE3LCAxMDgsIDExNiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEw
NSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcw
LCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDk1LCA4MywgMTE2LCA5NywgMTEwLCAxMDAs
IDk3LCAxMTQsIDEwMCwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAx
MDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0NCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDExNCwgOTcsIDExMCwgMTAzLCAxMDEsIDQxLCAxMywgMTAsIDEyMywgMTMs
IDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA5LCA5NywgMTIwLCA0MCwg
NDgsIDQ2LCA0NCwgNDksIDQ2LCA0OCwgNDUsIDEwOCwgMTAxLCAxMTAsIDEwMywgMTE2LCAxMDQs
IDQwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2
LCA0MSwgNDcsIDExNCwgOTcsIDExMCwgMTAzLCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcs
IDExNiwgMTAxLCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzYsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDgwLCAx
MDQsIDEyMSwgMTE1LCAxMDUsIDk5LCA5NywgMTA4LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDEx
MCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgNDEsIDEzLCAxMCwg
MTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA0OSwgNDYsIDQ4
LCA0NywgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMDgsIDEwNSwgMTAzLCAxMDQs
IDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAxMTMsIDExNywg
OTcsIDExNCwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwg
MTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwg
NzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDcxLCA3NiwgODQsIDcwLCA0MCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwg
MTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAx
MDEsIDEwMCwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDUsIDExMCwgMTE4LCAx
MDEsIDExNCwgMTE1LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDgyLCA5
NywgMTEwLCAxMDMsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYs
IDk3LCAxMTAsIDk5LCAxMDEsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDYxLCA0
OSwgNDYsIDQ4LCA0NywgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMDgsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAx
MTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTAyLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDYxLCAxMDgsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAx
MTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQyLCAxMDUsIDExMCwgMTE4LCAxMDEsIDExNCwg
MTE1LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDgyLCA5NywgMTEwLCAx
MDMsIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAxMTYs
IDExNiwgMTAxLCAxMTAsIDExNywgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNjEsIDExNSwgOTcs
IDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDQ5LCA0NiwgNDgsIDQ1LCAxMDIsIDk3
LCA5OSwgMTE2LCAxMTEsIDExNCwgNDIsIDEwMiwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCA0MSwg
NTksIDEzLCAxMCwgOTcsIDExNiwgMTE2LCAxMDEsIDExMCwgMTE3LCA5NywgMTE2LCAxMDUsIDEx
MSwgMTEwLCA0MiwgNjEsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAsIDExNywgOTcsIDExNiwgMTA1
LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUs
IDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwg
MTAyLCA0MiwgNjEsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAsIDExNywgOTcsIDExNiwgMTA1LCAx
MTEsIDExMCwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEw
OCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEw
MSwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNTksIDEzLCAxMCwgMTI1LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAx
MTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDc2LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDQwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwgMTE1
LCAxMDEsIDExNiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAz
LCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAxMTMs
IDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTE0LCA5NywgMTEwLCAxMDMsIDEwMSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MDUsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE1LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwg
MTAxLCAxMDAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAs
IDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3
LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDc2LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDk1LCA4MCwg
MTA0LCAxMjEsIDExNSwgMTA1LCA5OSwgOTcsIDEwOCwgNDAsIDEwOCwgMTA1LCAxMDMsIDEwNCwg
MTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5
NywgMTE0LCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAx
MDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5NywgMTA4LCA3NiwgMTA1LCAx
MDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA5NSwgODMsIDEx
NiwgOTcsIDExMCwgMTAwLCA5NywgMTE0LCAxMDAsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMTQsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwg
NjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCA5OSwgMTExLCAxMTUsIDcyLCA5NywgMTA4LCAxMDIsIDY1LCAxMTAsIDEwMywgMTA4
LCAxMDEsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAxLCAxMjAsIDExMiwgMTEx
LCAxMTAsIDEwMSwgMTEwLCAxMTYsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDYxLCA0
OCwgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDEx
MSwgMTE1LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA2MSwgMTA5LCA5NywgMTIwLCA2OSwgMTEy
LCAxMTUsIDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgNDUsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2
LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDEwMCwgMTA1
LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYsIDEwNSwgMTAz
LCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDEsIDQxLCA1OSwg
MTMsIDEwLCAxMDUsIDEwMiwgMzIsIDQwLCA5OSwgMTExLCAxMTUsIDY1LCAxMTAsIDEwMywgMTA4
LCAxMDEsIDYyLCA2MSwgOTksIDExMSwgMTE1LCA3MiwgOTcsIDEwOCwgMTAyLCA2NSwgMTEwLCAx
MDMsIDEwOCwgMTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCA5NywgMTA4LCAxMDgs
IDExMSwgMTAyLCAxMDIsIDYxLCAxMDksIDk3LCAxMjAsIDQwLCA0OCwgNDYsIDQ0LCAxMTIsIDEx
MSwgMTE5LCA0MCwgOTksIDExMSwgMTE1LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA0NCwgMTAx
LCAxMjAsIDExMiwgMTExLCAxMTAsIDEwMSwgMTEwLCAxMTYsIDQxLCA0MSwgNTksIDEzLCAxMCwg
MTI1LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDIsIDk3LCAx
MDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgs
IDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDk3LCAxMDgsIDc2LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDk1LCA4MCwg
MTA0LCAxMjEsIDExNSwgMTA1LCA5OSwgOTcsIDEwOCwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDExNCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2
LCA2NywgMTAxLCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDk5LCAxMTEsIDExNSwgNzIsIDk3LCAxMDgsIDEwMiwgNjUsIDExMCwgMTAzLCAx
MDgsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYs
IDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA3LCA3NywgMTA1LCAxMTAsIDExNywg
MTE1LCA3NiwgMTExLCAxMDMsIDUwLCA2NywgMTExLCAxMTAsIDEwMSwgNjUsIDExMCwgMTAzLCAx
MDgsIDEwMSwgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExNiwgMTIxLCA4Miwg
OTcsIDExNiwgMTA1LCAxMTEsIDYxLCA1NCwgNDYsIDU0LCA1MiwgNTEsIDU2LCA1MywgNTQsIDQ5
LCA1NiwgNTcsIDU1LCA1NSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDk5LCAxMTEsIDExMCwgOTksIDEwMSwgMTEwLCAxMTYsIDExNCwgOTcsIDExNiwgMTA1LCAxMTEs
IDExMCwgNzUsIDk3LCAxMTIsIDExMiwgOTcsIDYxLCAxMDcsIDc3LCAxMDUsIDExMCwgMTE3LCAx
MTUsIDc2LCAxMTEsIDEwMywgNTAsIDY3LCAxMTEsIDExMCwgMTAxLCA2NSwgMTEwLCAxMDMsIDEw
OCwgMTAxLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDgyLCA5
NywgMTE2LCAxMDUsIDExMSwgNDcsIDQwLCA0OSwgNDYsIDQ4LCA0NSwgOTksIDExMSwgMTE1LCA3
MiwgOTcsIDEwOCwgMTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA0MSwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAx
MTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDExMiwgMTE0LCAxMDEsIDk3LCAx
MDAsIDgzLCA3MSwgNjEsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCA0NSwgMTA4LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0Miwg
OTksIDExMSwgMTEwLCA5OSwgMTAxLCAxMTAsIDExNiwgMTE0LCA5NywgMTE2LCAxMDUsIDExMSwg
MTEwLCA3NSwgOTcsIDExMiwgMTEyLCA5NywgNDQsIDQ1LCA5OSwgMTExLCAxMTAsIDk5LCAxMDEs
IDExMCwgMTE2LCAxMTQsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc1LCA5NywgMTEyLCAxMTIs
IDk3LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMiwgOTcs
IDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA2MSwgMTAxLCAxMjAsIDExMiwgNTAsIDQwLCAxMDAs
IDExMSwgMTE2LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDEwMCwgMTA1LCAxMTQsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwg
NjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQsIDQ5LCA0NiwgNDgsIDQxLCA0NCwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA4MywgMTEyLCAxMTQsIDEwMSwgOTcsIDEwMCwgODMsIDcxLCA0MSwgNDEsIDU5
LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDIsIDk3LCAxMDgs
IDEwOCwgMTExLCAxMDIsIDEwMiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEw
NSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDk3LCAxMDgsIDc2LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDk1LCA3MSwgNzYs
IDg0LCA3MCwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTAxLCAxMTAsIDExNiwgMTAx
LCAxMTQsIDg3LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA4MywgOTksIDk3LCAxMDgsIDEwMSwg
NDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwg
NjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0MSwg
MTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMDAs
IDYxLCAxMDAsIDExMSwgMTE2LCA0MCwgNDUsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwg
MTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDEwMCwgMTA1LCAxMTQs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYsIDEwNSwgMTAzLCAxMDQs
IDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDEsIDU5LCAxMywgMTAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEw
MiwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDk5LCAxMDAs
IDQyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgODMs
IDk5LCA5NywgMTA4LCAxMDEsIDQzLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjUsIDExMCwg
MTAzLCAxMDgsIDEwMSwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0MSwgNTksIDEzLCAx
MCwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDQyLCA2MSwgMTAyLCA5NywgMTA4
LCAxMDgsIDExMSwgMTAyLCAxMDIsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0
LCAxMTAsIDMyLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNTksIDEzLCAxMCwg
MTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDEx
MiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDk3LCAxMDgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDEx
MSwgMTAyLCAxMDIsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgODQsIDExMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYs
IDEwMSwgMTE0LCA4NywgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAx
MTUsIDcyLCA5NywgMTA4LCAxMDIsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQ0LCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgMTAxLCAxMjAsIDExMiwgMTExLCAxMTAsIDEwMSwgMTEwLCAx
MTYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAx
MTYsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDgzLCA5OSwgOTcsIDEwOCwgMTAxLCA0NCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NSwgMTEw
LCAxMDMsIDEwOCwgMTAxLCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQxLCAxMywgMTAs
IDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTksIDExMSwg
MTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA5NywgMTA4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwg
MTA4LCAxMTEsIDEwMiwgMTAyLCA5NSwgODAsIDEwNCwgMTIxLCAxMTUsIDEwNSwgOTksIDk3LCAx
MDgsIDQwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwg
MTE2LCAxMDEsIDExNCwgODcsIDQ0LCA5OSwgMTExLCAxMTUsIDcyLCA5NywgMTA4LCAxMDIsIDY1
LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3MCwgODIsIDY5LCA4MywgNzgsIDY5LCA3
NiwgOTUsIDc3LCA2NSwgODgsIDczLCA3NywgODUsIDc3LCA5NSwgNzksIDc4LCA5NSwgODIsIDc5
LCA4NSwgNzEsIDcyLCAzMiwgNDgsIDQ2LCA1MCwgNTMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDEwMywgMTAxLCAxMTYsIDY5LCAxMTAsIDEwMSwgMTE0LCAxMDMsIDEyMSwgNjcsIDEx
MSwgMTEwLCAxMTUsIDEwMSwgMTE0LCAxMTgsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDcwLCA5
NywgOTksIDExNiwgMTExLCAxMTQsIDQwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwg
NjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIs
IDQ4LCA0NCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwg
NjYsIDExNCwgMTAwLCAxMDIsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDEx
NywgMTE0LCAxMTAsIDMyLCA0OSwgNDYsIDQ4LCA0MywgMTE1LCAxMTIsIDEwMSwgOTksIDExNywg
MTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEs
IDExMCwgMTE2LCA4MiwgNDgsIDQyLCA0MCwgNDksIDQ2LCA0OCwgNDcsIDEwMSwgMTEwLCAxMTgs
IDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEw
MiwgNDYsIDEyMSwgNDUsIDQ5LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMywgMTAxLCAxMTYsIDY2LCA4MiwgNjgsIDcwLCA3Niwg
MTExLCAxMTEsIDEwNywgMTE3LCAxMTIsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
NzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEx
MiwgMTAxLCAxMTQsIDk5LCAxMDEsIDExMiwgMTE2LCAxMTcsIDk3LCAxMDgsIDgyLCAxMTEsIDEx
NywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MCwgMzIsIDg1LCA4NiwgNjEsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCA3OCwg
MTAwLCAxMTEsIDExNiwgODYsIDQ0LCAxMTIsIDEwMSwgMTE0LCA5OSwgMTAxLCAxMTIsIDExNiwg
MTE3LCA5NywgMTA4LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUs
IDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgOTgsIDExNCwgMTAwLCAxMDIs
IDc2LCAxMTEsIDExMSwgMTA3LCAxMTcsIDExMiwgNjEsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3
LCAxMTQsIDEwMSwgNDAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAx
MDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAx
MDEsIDExNCwgNDQsIDg1LCA4NiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCA5OCwgMTE0LCAxMDAsIDEwMiwgNzYsIDExMSwgMTExLCAxMDcsIDExNywg
MTEyLCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDEwMywgMTAxLCAxMTYsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDk3LCAxMTAsIDk5LCAxMDEsIDcwLCAxMTQsIDExMSwgMTA5LCA2NiwgODIsIDY4LCA3MCwg
NzYsIDExMSwgMTExLCAxMDcsIDExNywgMTEyLCA0MCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwg
MzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3
LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAx
MTYsIDgyLCA0OCwgNDQsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEw
LCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDYxLCAxMDksIDEwNSwgMTIwLCA0MCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDEx
MSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA0NiwgMTIwLCAx
MjAsIDEyMCwgNDQsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEs
IDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNDYsIDEyMSwgMTIxLCAxMjEsIDQ0LCAxMTUs
IDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQs
IDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA0OCwgNDEsIDU5LCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMDIsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDgzLCA5
OSwgMTA0LCAxMDgsIDEwNSwgOTksIDEwNywgNzEsIDcxLCA4OCwgNDAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQ0LCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEs
IDQ4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEw
LCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0MywgNDAsIDExNCwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDQ1LCAxMTQsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQxLCA0Miwg
MTEyLCAxMTEsIDExOSwgNTMsIDQwLCA0OSwgNDYsIDQ4LCA0NSwgODYsIDEwMCwgMTExLCAxMTYs
IDcyLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMDIsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDgzLCA5OSwgMTA0LCAxMDgs
IDEwNSwgOTksIDEwNywgNzEsIDcxLCA4OCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0
NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEw
LCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0MywgNDAsIDExNCwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDQ1LCAxMTQsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQxLCA0Miwg
MTEyLCAxMTEsIDExOSwgNTMsIDQwLCA0OSwgNDYsIDQ4LCA0NSwgODYsIDEwMCwgMTExLCAxMTYs
IDcyLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDY4LCAxMDUsIDExNSwgMTE2LCAxMTQs
IDEwNSwgOTgsIDExNywgMTE2LCAxMDUsIDExMSwgMTEwLCA3MCwgMTE3LCAxMTAsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDk1LCA4NCwgMTE0LCAxMTEsIDExOSwgOTgsIDExNCwgMTA1LCAxMDAs
IDEwMywgMTAxLCA4MiwgMTAxLCAxMDUsIDExNiwgMTIyLCA3MSwgNzEsIDg4LCA0MCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA3MiwgNDQsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA0MSwgMTMsIDEw
LCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA1MCwgNjEsIDEx
NSwgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgNDAsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNzEs
IDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCA2MSwgNzgs
IDEwMCwgMTExLCAxMTYsIDcyLCA0MiwgNzgsIDEwMCwgMTExLCAxMTYsIDcyLCA0MiwgNDAsIDk3
LCA1MCwgNDUsIDQ5LCA0NiwgNDgsIDQxLCA0MywgNDksIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTE0
LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk3LCA1MCwgNDcsIDQwLCA4MCwgNzMsIDQy
LCAxMDAsIDQyLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDExNSwgMTA5LCAxMDUsIDExNiwgMTA0LCA4NiwgMTA1LCAxMTUsIDEw
NSwgOTgsIDEwNSwgMTA4LCAxMDUsIDExNiwgMTIxLCA5NSwgNzEsIDcxLCA4OCwgNjcsIDExMSwg
MTE0LCAxMTQsIDEwMSwgMTA4LCA5NywgMTE2LCAxMDEsIDEwMCwgNDAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDQxLCAzMiwgMTIzLCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgNTAsIDYxLCA5NywgMTA4LCAxMTIsIDEw
NCwgOTcsIDcxLCA0MiwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDcxLCA3MSwgODgsIDg2LCA2MSwgNzgsIDEwMCwgMTEx
LCAxMTYsIDc2LCA0MiwgMTE1LCAxMTMsIDExNCwgMTE2LCA0MCwgNzgsIDEwMCwgMTExLCAxMTYs
IDg2LCA0MiwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDUsIDk3LCA1MCwgNDIsIDc4LCAx
MDAsIDExMSwgMTE2LCA4NiwgNDEsIDQzLCA5NywgNTAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgNzEsIDcxLCA4OCwgNzYsIDYxLCA3OCwgMTAwLCAxMTEsIDEx
NiwgODYsIDQyLCAxMTUsIDExMywgMTE0LCAxMTYsIDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgNzYs
IDQyLCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0NSwgOTcsIDUwLCA0MiwgNzgsIDEwMCwg
MTExLCAxMTYsIDc2LCA0MSwgNDMsIDk3LCA1MCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAx
MTYsIDExNywgMTE0LCAxMTAsIDMyLCA0OCwgNDYsIDUzLCA0NywgNDAsIDcxLCA3MSwgODgsIDg2
LCA0MywgNzEsIDcxLCA4OCwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwg
NjYsIDgyLCA2OCwgNzAsIDk1LCA2NiwgMTE3LCAxMTQsIDEwOCwgMTAxLCAxMjEsIDQwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0NCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDQsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQ0LCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUs
IDExNSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEw
MCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUsIDExMCwg
MTAxLCAxMDgsIDc4LCA4NiwgNjEsIDExMiwgMTExLCAxMTksIDUzLCA0MCwgMTE1LCA5NywgMTE2
LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUsIDQwLCA0OSwgNDYsIDQ4LCA0
NSwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAx
MTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA3OCwgNzYsIDYxLCAxMTIsIDExMSwgMTE5LCA1
MywgNDAsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNjksIDExMiwgMTE1
LCA0MCwgNDksIDQ2LCA0OCwgNDUsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDEsIDQxLCA1OSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAx
MTcsIDExNSwgMTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNTcsIDQ4LCA2
MSwgNDgsIDQ2LCA1MywgNDMsIDUwLCA0NiwgNDgsIDQyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzIs
IDQyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQyLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwg
MTEwLCAxMDEsIDExNSwgMTE1LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTAyLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCAzMiwgNjEsIDEzLCAxMCwgNDAs
IDQ5LCA0NiwgNDgsIDQzLCA0MCwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3
MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNTcsIDQ4LCA0NSwgNDksIDQ2LCA0OCwg
NDEsIDQyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAxMTQsIDEwMSwg
MTE1LCAxMTAsIDEwMSwgMTA4LCA3OCwgNzYsIDQxLCAzMiwgNDIsIDEzLCAxMCwgNDAsIDQ5LCA0
NiwgNDgsIDQzLCA0MCwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3MCwgMTE0
LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNTcsIDQ4LCA0NSwgNDksIDQ2LCA0OCwgNDEsIDQy
LCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAxMTQsIDEwMSwgMTE1LCAx
MTAsIDEwMSwgMTA4LCA3OCwgODYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcs
IDExNCwgMTEwLCAzMiwgMTAyLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA0NywgODAs
IDczLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3OSwgNjUsIDg0LCA4MiwgNjksIDcw
LCA3NiwgNjksIDY3LCA4NCwgNjUsIDc4LCA2NywgNjksIDU3LCA0OCwgMzIsIDQ5LCA0NiwgNDgs
IDEzLCAxMCwgMTE1LCAxMTYsIDExNCwgMTE3LCA5OSwgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAxMywgMTAsIDEyMywg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDEx
NSwgMTAxLCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCA5NywgMTAwLCAxMDYsIDExNywgMTE1LCAxMTYsIDgyLCAxMTEsIDExNywgMTAzLCAx
MDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNzAsIDExNCwgMTExLCAxMDksIDc2LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDgwLCAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1
LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0
LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4
LCAxMDUsIDEwMywgMTA0LCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDExNywgMTE1LCA0NCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1
LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA4MiwgMTExLCAx
MTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDYxLCAxMDgsIDEwNSwgMTAzLCAxMDQs
IDExNiwgODIsIDk3LCAxMDAsIDEwNSwgMTE3LCAxMTUsIDQ3LCAxMDgsIDEwNSwgMTAzLCAxMDQs
IDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTYsIDExMSwgMTE2LCA5NywgMTA4LCA4MiwgMTEx
LCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDYxLCAxMTUsIDk3LCAxMTYsIDEx
NywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgODIsIDEx
MSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MywgMTE0LCAxMTEsIDExNywg
MTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAx
MTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTYsIDExMSwgMTE2LCA5NywgMTA4LCA4MiwgMTExLCAx
MTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEs
IDcyLCAxMDEsIDEwOSwgMTA1LCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgNjgs
IDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEw
NSwgMTEwLCAxMDMsIDQwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAx
MDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDEwNSwgMTEwLCAxMDIsIDExMSwg
NDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEx
MSwgMTA4LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDMsIDExNCwgMTEx
LCAxMTcsIDExMCwgMTAwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMzIsIDEyMywgMTMs
IDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA5LCAxMDUsIDEyMCwgNDAs
IDEwMywgMTE0LCAxMTEsIDExNywgMTEwLCAxMDAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0
LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDEw
NSwgMTEwLCAxMDIsIDExMSwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDEsIDU5LCAxMywg
MTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIs
IDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3NiwgMTA1
LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA0MCwgMTEyLCAxMTQsIDEwMSwgNzYsIDEw
NSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCAx
MDUsIDExMCwgMTAyLCAxMTEsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAzMiwgMTIzLCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1
LCAxMDEsIDg0LCAxMDEsIDExNCwgMTA5LCA2MSwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDEx
NSwgMTAxLCA2NiwgODIsIDY4LCA3MCwgOTUsIDY2LCAxMTcsIDExNCwgMTA4LCAxMDEsIDEyMSwg
NDAsIDEwNSwgMTEwLCAxMDIsIDExMSwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDQsIDEw
NSwgMTEwLCAxMDIsIDExMSwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDQsIDEwNSwgMTEw
LCAxMDIsIDExMSwgNDYsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDQsIDEwNSwgMTEwLCAxMDIs
IDExMSwgNDYsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQx
LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAwLCAxMDUs
IDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA4NCwgMTAxLCAxMTQsIDEwOSwgNDIsIDEwNSwgMTEw
LCAxMDIsIDExMSwgNDYsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAsIDExNywgOTcsIDExNiwgMTA1
LCAxMTEsIDExMCwgNDIsIDEwNSwgMTEwLCAxMDIsIDExMSwgNDYsIDc4LCAxMDAsIDExMSwgMTE2
LCA3NiwgNDIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDk5LCAxMTEs
IDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MCwgMTE0LCAxMTEsIDEwNiwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNjgsIDEw
NSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwg
MTEwLCAxMDMsIDg1LCA4NiwgNDAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTYsIDEwMSwgMTIw
LCAxMTYsIDExNywgMTE0LCAxMDEsIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTIzLCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTUsIDExNiwgMTE0LCAxMTMsIDYxLCAxMTYsIDEwMSwg
MTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEs
IDk5LCA1MiwgNDAsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwg
ODcsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTE1LCAxMTYsIDExNCwgMTEzLCA0
NywgNjEsIDExNSwgMTE2LCAxMTQsIDExMywgNDYsIDExOSwgNTksIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNSwgMTE2LCAxMTQsIDExMywgNDYsIDEyMCwgMTIx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEw
MywgMTAxLCAxMTYsIDc2LCAxMTEsIDEwMCwgNzAsIDExNCwgMTExLCAxMDksIDY1LCAxMDgsIDEx
MiwgMTA0LCA5NywgNzEsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExNywg
OTgsIDEwMSwgNzcsIDk3LCAxMTIsIDY4LCAxMDUsIDEwOSwgMTAxLCAxMTAsIDExNSwgMTA1LCAx
MTEsIDExMCwgODAsIDEwNSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA0NCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwg
OTcsIDk5LCAxMDEsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDgzLCAxMDgsIDEx
MSwgMTEyLCAxMDEsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwg
MTAxLCA2NSwgMTE4LCAxMDEsIDExNCwgOTcsIDEwMywgMTAxLCA4MywgMTA4LCAxMTEsIDExMiwg
MTAxLCA4NCwgMTAxLCAxMjAsIDEwMSwgMTA4LCAxMTUsIDYxLCA5OSwgMTE3LCA5OCwgMTAxLCA3
NywgOTcsIDExMiwgNjgsIDEwNSwgMTA5LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExMSwgMTEwLCA4
MCwgMTA1LCAxMjAsIDEwMSwgMTA4LCAxMTUsIDQyLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCAx
MTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTE4LCAxMDEsIDExNCwgOTcsIDEw
MywgMTAxLCA4MywgMTA4LCAxMTEsIDExMiwgMTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTA4LCAxMTEsIDEwMCwgNjEsIDEwOCwgMTExLCAxMDMsIDUwLCA0MCwg
MTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwg
NjUsIDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwgMTExLCAxMTIsIDEwMSwg
ODQsIDEwMSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDEx
NiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwOCwgMTExLCAxMDAsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAzLCAxMDEsIDExNiwgNzYsIDEwNSwg
MTEwLCAxMDEsIDk3LCAxMTQsIDc2LCAxMTEsIDEwMCwgNzAsIDExNCwgMTExLCAxMDksIDgyLCAx
MTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA5OSwgMTE3LCA5OCwgMTAxLCA3NywgOTcsIDExMiwgNjgsIDEwNSwgMTA5
LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExMSwgMTEwLCA4MCwgMTA1LCAxMjAsIDEwMSwgMTA4LCAx
MTUsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAx
MDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDEwOCwgMTExLCAxMDAsIDYxLCAxMDgsIDExMSwgMTAzLCA1MCwgNDAs
IDk5LCAxMTcsIDk4LCAxMDEsIDc3LCA5NywgMTEyLCA2OCwgMTA1LCAxMDksIDEwMSwgMTEwLCAx
MTUsIDEwNSwgMTExLCAxMTAsIDgwLCAxMDUsIDEyMCwgMTAxLCAxMDgsIDExNSwgNDEsIDQyLCAx
MTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA1OSwgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA4LCAxMTEsIDEwMCwgNTksIDEzLCAx
MCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDEsIDExMCwgMTE4
LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEw
NSwgOTcsIDExMCwgOTksIDEwMSwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEs
IDExMCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAx
MDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA0
NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgODUs
IDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNDEsIDMyLCAxMjMsIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNiwgMTAxLCAxMDksIDExMiwgNjEsIDc4
LCAxMDAsIDExMSwgMTE2LCA4NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEs
IDEwMCwgNDMsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEw
OCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDEx
NywgMTE0LCAxMTAsIDMyLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQw
LCAxMTUsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDQwLCAxMTYsIDEwMSwgMTA5LCAxMTIsIDQx
LCA0NSwgNDksIDQ2LCA0OCwgNDMsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5
LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDQxLCA1OSwgMTMsIDEwLCAx
MjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMSwgMTEwLCAxMTgsIDEw
NSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA3MiwgMTExLCAxMTQsIDEwNSwg
MTIyLCAxMTEsIDExMCwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwg
NDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDQ0LCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwgMzIsIDEyMywg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgNDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNDQsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEw
OCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTYsIDEwMSwg
MTA5LCAxMTIsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCA0
OSwgNDYsIDQ4LCA0MywgNDksIDQ2LCA0OSwgNDIsIDEwMCwgMTExLCAxMTYsIDQwLCAxMTQsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDExMCwgMTExLCAx
MTQsIDEwOSwgOTcsIDEwOCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcs
IDExNCwgMTEwLCAzMiwgMTE1LCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCA0MCwgMTE2LCAxMDEs
IDEwOSwgMTEyLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMTIsIDk3LCAxMTQsIDk3LCAxMDgsIDEwOCwgOTcsIDEyMCwgNjcsIDExMSwgMTE0LCAx
MTQsIDEwMSwgOTksIDExNiwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQwLCAzMiwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDgwLCAxMTEs
IDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTEsIDExNCwgMTA1LCAxMDMsIDg2LCAx
MDEsIDk5LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTcsIDk4LCAxMDEsIDgzLCAx
MDUsIDEyMiwgMTAxLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTcsIDk4LCAxMDEs
IDgwLCAxMTEsIDExNSwgMzIsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMDUsIDExMCwgMTE4LCA3OSwgMTE0LCAxMDUsIDEwMywgODYsIDEwMSwgOTksIDYxLCAx
MTgsIDEwMSwgOTksIDUxLCA0MCwgNDksIDQ2LCA0OCwgNDQsIDQ5LCA0NiwgNDgsIDQ0LCA0OSwg
NDYsIDQ4LCA0MSwgNDcsIDExMSwgMTE0LCAxMDUsIDEwMywgODYsIDEwMSwgOTksIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDQsIDk3LCAxMDgsIDEwMiwgODMsIDEwNSwgMTIy
LCAxMDEsIDYxLCA5OSwgMTE3LCA5OCwgMTAxLCA4MywgMTA1LCAxMjIsIDEwMSwgNDIsIDQ4LCA0
NiwgNTMsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDExMCwgMTE2LCAx
MDEsIDExNCwgMTE1LCAxMDEsIDk5LCA2NSwgMTE2LCA3NywgOTcsIDEyMCwgODAsIDEwOCwgOTcs
IDExMCwgMTAxLCA2MSwgNDAsIDk5LCAxMTcsIDk4LCAxMDEsIDgwLCAxMTEsIDExNSwgNDMsIDEw
NCwgOTcsIDEwOCwgMTAyLCA4MywgMTA1LCAxMjIsIDEwMSwgNDUsIDExOCwgMTAxLCAxMTQsIDEx
NiwgMTAxLCAxMjAsIDgwLCAxMTEsIDExNSwgNDEsIDQyLCAxMDUsIDExMCwgMTE4LCA3OSwgMTE0
LCAxMDUsIDEwMywgODYsIDEwMSwgOTksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCA2NSwgMTE2LCA3NywgMTA1
LCAxMTAsIDgwLCAxMDgsIDk3LCAxMTAsIDEwMSwgNjEsIDQwLCA5OSwgMTE3LCA5OCwgMTAxLCA4
MCwgMTExLCAxMTUsIDQ1LCAxMDQsIDk3LCAxMDgsIDEwMiwgODMsIDEwNSwgMTIyLCAxMDEsIDQ1
LCAxMTgsIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA4MCwgMTExLCAxMTUsIDQxLCA0MiwgMTA1
LCAxMTAsIDExOCwgNzksIDExNCwgMTA1LCAxMDMsIDg2LCAxMDEsIDk5LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCA5NywgMTE0LCAxMDMsIDEwMSwgMTE1LCAxMTYsIDcz
LCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNjEsIDEwOSwgOTcsIDEyMCwgNDAs
IDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDY1LCAxMTYsIDc3LCA5Nywg
MTIwLCA4MCwgMTA4LCA5NywgMTEwLCAxMDEsIDQ0LCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwg
MTE1LCAxMDEsIDk5LCA2NSwgMTE2LCA3NywgMTA1LCAxMTAsIDgwLCAxMDgsIDk3LCAxMTAsIDEw
MSwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwg
MTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMDksIDEwNSwgMTEwLCA0MCwgMTA5LCAx
MDUsIDExMCwgNDAsIDEwOCwgOTcsIDExNCwgMTAzLCAxMDEsIDExNSwgMTE2LCA3MywgMTEwLCAx
MTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDQ2LCAxMjAsIDQ0LCAxMDgsIDk3LCAxMTQsIDEw
MywgMTAxLCAxMTUsIDExNiwgNzMsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCA0
NiwgMTIxLCA0MSwgNDQsIDEwOCwgOTcsIDExNCwgMTAzLCAxMDEsIDExNSwgMTE2LCA3MywgMTEw
LCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDQ2LCAxMjIsIDQxLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5
OSwgMTE2LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgODMsIDYx
LCAxMTgsIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA4MCwgMTExLCAxMTUsIDQzLCAxMTEsIDEx
NCwgMTA1LCAxMDMsIDg2LCAxMDEsIDk5LCA0MiwgMTAwLCAxMDUsIDExNSwgMTE2LCA5NywgMTEw
LCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwg
MTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgMTE2LCA4MCwgMTExLCAxMTUs
IDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgODMsIDQ1LCA5OSwgMTE3LCA5OCwgMTAxLCA4
MCwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDcwLCAxMDUsIDEyMCwgMTAxLCAx
MDAsIDY5LCAxMTMsIDExNywgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgMTAzLCAx
MTcsIDEwOCwgOTcsIDExNCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAx
MDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEs
IDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAx
MTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDExMSwgMTEwLCA2MSwgOTcsIDExNiwg
OTcsIDExMCwgNDAsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NDYsIDEyMiwgNDQsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NDYsIDEyMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgs
IDk3LCAxMTYsIDYxLCA5NywgOTksIDExMSwgMTE1LCA0MCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIxLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MCwgMzIsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwg
MTE0LCAxMDAsIDExNSwgNjEsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCAxMDgsIDExMSwgMTEwLCA0
NCwgMTA4LCA5NywgMTE2LCA0MSwgNDIsIDgyLCA2OSwgNjcsIDczLCA4MCwgODIsIDc5LCA2Nywg
NjUsIDc2LCA5NSwgODAsIDczLCA1MCwgNDIsIDUwLCA0NiwgNDgsIDU5LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDYxLCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwg
MTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ2LCAxMjAsIDQyLCA0OCwgNDYsIDUz
LCA0MywgNDgsIDQ2LCA1MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDExNiwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0
LCAxMDAsIDExNSwgNDYsIDEyMSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTUsIDQ0LCAxMTYsIDQ0LCA0OCwgNDEs
IDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwg
MTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDc3LCAxMDUsIDExNCwgMTE0LCAxMTEsIDExNCwgMTAx
LCAxMDAsIDcwLCAxMDUsIDEyMCwgMTAxLCAxMDAsIDY5LCAxMTMsIDExNywgMTA1LCAxMTQsIDEw
MSwgOTksIDExNiwgOTcsIDExMCwgMTAzLCAxMTcsIDEwOCwgOTcsIDExNCwgNjcsIDExMSwgMTEx
LCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQs
IDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAx
MTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MDgsIDExMSwgMTEwLCA2MSwgOTcsIDExNiwgOTcsIDExMCwgNDAsIDEwMCwgMTA1LCAxMTQsIDEw
MSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDYsIDEyMiwgNDQsIDEwMCwgMTA1LCAxMTQsIDEw
MSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDYsIDEyMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDk3LCAxMTYsIDYxLCA5NywgOTksIDExMSwgMTE1
LCA0MCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIx
LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNSwgMTEyLCAxMDQsIDEw
MSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExOCwgMTAxLCA5
OSwgNTAsIDQwLCAxMDgsIDExMSwgMTEwLCA0NCwgMTA4LCA5NywgMTE2LCA0MSwgNDIsIDgyLCA2
OSwgNjcsIDczLCA4MCwgODIsIDc5LCA2NywgNjUsIDc2LCA5NSwgODAsIDczLCA1MCwgNDIsIDUw
LCA0NiwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDYx
LCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAx
MTUsIDQ2LCAxMjAsIDQyLCA0OCwgNDYsIDUzLCA0MywgNDgsIDQ2LCA1MywgNTksIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNiwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwg
MTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDYsIDEyMSwgNTksIDEzLCAx
MCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDQw
LCA0OSwgNDYsIDQ4LCA0NSwgMTE1LCA0NCwgMTE2LCA0NCwgNDgsIDQxLCA1OSwgMTMsIDEwLCAx
MjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcs
IDExNiwgMTAxLCA2OSwgMTEzLCAxMTcsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAs
IDEwMywgMTE3LCAxMDgsIDk3LCAxMTQsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAs
IDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwg
MTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3
OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEs
IDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTA5
LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDEzLCAxMCwgMTIzLCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgOTcsIDEwOSwgMTAxLCAxMTQsIDk3LCA4
NCwgMTExLCA4NiwgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDYxLCAxMTAsIDExMSwgMTE0LCAx
MDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwg
ODAsIDExMSwgMTE1LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDEwMSwgMTIxLCAxMDEsIDgwLCAx
MTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE0LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUs
IDEyMiwgMTAxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDQwLCA5OSwg
OTcsIDEwOSwgMTAxLCAxMTQsIDk3LCA4NCwgMTExLCA4NiwgMTAxLCAxMTQsIDExNiwgMTAxLCAx
MjAsIDQ0LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAx
MDgsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDEx
NCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTQsIDQ0LCA0OCwg
NDEsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMTEs
IDExMCwgNjEsIDk3LCAxMTYsIDk3LCAxMTAsIDQwLCAxMTQsIDQ2LCAxMjIsIDQ0LCAxMTQsIDQ2
LCAxMjAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCA5
NywgMTE2LCA2MSwgOTcsIDk5LCAxMTEsIDExNSwgNDAsIDExNCwgNDYsIDEyMSwgNDEsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAx
LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwg
MTA4LCAxMTEsIDExMCwgNDQsIDEwOCwgOTcsIDExNiwgNDEsIDQyLCA4MiwgNjksIDY3LCA3Mywg
ODAsIDgyLCA3OSwgNjcsIDY1LCA3NiwgOTUsIDgwLCA3MywgNTAsIDQyLCA1MCwgNDYsIDQ4LCA1
OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCA2MSwgMTE1LCAxMTIs
IDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NiwgMTIw
LCA0MiwgNDgsIDQ2LCA1MywgNDMsIDQ4LCA0NiwgNTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMTYsIDYxLCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2
NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ2LCAxMjEsIDU5LCAxMywgMTAsIDExNCwgMTAx
LCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE1LCA0NCwg
MTE2LCA0NCwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MywgMTEyLCAxMDQsIDEw
MSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQw
LCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEs
IDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwg
NzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE4
LCAxMDUsIDEwMSwgMTE5LCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUs
IDEyMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgs
IDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcs
IDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTgsIDEwNSwg
MTAxLCAxMTksIDQyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0MSwg
NDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTks
IDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5Nywg
MTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExOCwgMTA1LCAx
MDEsIDExOSwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEw
MCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCA0OCwgNDYsIDQ4LCA0MSwgNDEsIDQx
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCA2MSwgMTE0LCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDEx
NCwgNDQsIDExOCwgMTA1LCAxMDEsIDExOSwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQx
LCA1OSwgMTMsIDEwLCAxMTQsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExNCwgNDQsIDQ4LCA0MSwgNDEsIDU5
LCAxMywgMTAsIDExNCwgNDYsIDEyMiwgNjEsIDExNCwgNDYsIDEyMiwgNDUsIDQ5LCA0NiwgNDgs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDksIDYxLCA1MCwgNDYs
IDQ4LCA0MiwgMTA4LCAxMDEsIDExMCwgMTAzLCAxMTYsIDEwNCwgNDAsIDExNCwgNDEsIDU5LCAx
MywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUx
LCA0MCwgMTE0LCA0NiwgMTIwLCA0NywgMTA5LCA0MywgNDgsIDQ2LCA1MywgNDQsIDQ5LCA0Niwg
NDgsIDQ1LCAxMTQsIDQ2LCAxMjEsIDQ3LCAxMDksIDQ1LCA0OCwgNDYsIDUzLCA0NCwgNDgsIDQx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEs
IDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MCwgMTA4LCA5NywgMTEwLCA5NywgMTE0LCA2Nywg
MTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAx
MTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUs
IDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwg
MTA1LCAxMjAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDYxLCAxMTksIDExMSwgMTE0LCAxMDgs
IDEwMCwgODAsIDExMSwgMTE1LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDEwMSwgMTIxLCAxMDEs
IDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTAsIDEx
MSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTQsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgNDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA0
NCwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0
MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgs
IDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1
MiwgNDAsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDQsIDQ5LCA0MSwgNDEsIDU5LCAx
MywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAx
MTIsIDExNywgMTE2LCAxMDEsIDY3LCAxMTcsIDk4LCAxMDUsIDk5LCA2NywgMTExLCAxMTEsIDEx
NCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4
LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTksIDExMSwg
MTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAx
MTEsIDExMCwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEw
MSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQx
LCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCAxMDUsIDEw
MSwgMTE5LCA2OCwgMTA1LCAxMTQsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEw
NSwgMTIyLCAxMDEsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0
NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDEwMSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
OTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgNDQsIDExOSwg
MTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDU5LCAx
MywgMTAsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExOCwgMTAxLCA5OSwgNTEs
IDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcs
IDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgOTksIDEx
MSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NCwgNDgsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAx
MDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwg
NTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAx
MDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjcsIDExNywgOTgsIDEwNSwgOTksIDc2LCAxMTEsIDk5
LCA5NywgMTA4LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTks
IDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAx
MDksIDk3LCAxMDgsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMjEsIDEwMSwgODAs
IDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDEwOSwgOTcsIDExNiwgNTIs
IDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcs
IDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCAxMDUsIDEyMiwg
MTAxLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwg
MTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5Nywg
MTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEs
IDExNSwgNDYsIDEyMCwgMTIxLCAxMjIsIDQ1LCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUs
IDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExNCwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDQ0
LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQx
LCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTIsIDk3LCAx
MTQsIDk3LCAxMDgsIDEwOCwgOTcsIDEyMCwgNjcsIDExMSwgMTE0LCAxMTQsIDEwMSwgOTksIDEx
NiwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEw
MCwgODAsIDExMSwgMTE1LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDQsIDk5LCAxMTEsIDExMSwgMTE0
LCAxMDAsIDExNSwgNDQsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA4MywgMTA1LCAxMjIsIDEwMSwgNDQsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA0MSwgNTksIDEzLCAxMCwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE4
LCAxMDEsIDk5LCA1MSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwg
NTIsIDQwLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ0LCA0OCwgNDEsIDQxLCA1OSwg
MTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTksIDExMSwgMTExLCAx
MTQsIDEwMCwgMTE1LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MCwgMTE0LCAxMTEsIDEwNiwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUs
IDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAx
MTEsIDExNSwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDQ0
LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTMsIDEwLCAx
MjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5
OSwgNTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5
LCA0MiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDEsIDQxLCA1OSwg
MTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwg
MTEyLCAxMTcsIDExNiwgMTAxLCA4MywgMTA3LCAxMjEsIDY2LCAxMTEsIDEyMCwgNjcsIDExMSwg
MTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMiwgMTExLCAx
MTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMy
LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3
LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwg
MTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNCwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAx
MDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTIsIDExMSwgMTE1LCAxMDUsIDEx
NiwgMTA1LCAxMTEsIDExMCwgODcsIDQ0LCA0OCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwg
MTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2Nywg
MTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAx
MTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQx
LCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwg
OTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY3LCAxMTcsIDk4LCAxMDUsIDk5LCA2
NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwg
ODAsIDExMSwgMTE1LCA0NCwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwg
MTA5LCA5NywgMTA4LCA0NCwgMTE4LCA2OSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NCwgMTE0LCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcx
LCA3NywgNjksIDc4LCA4NCwgOTUsIDY4LCA2OSwgNzAsIDczLCA3OCwgNzMsIDg0LCA3MywgNzks
IDc4LCA4MywgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMDgsIDEx
MSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDEx
MSwgMTE3LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTAzLCAxMDgsIDcwLCAxMTQs
IDk3LCAxMDMsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMCwgMTE4LCAxMTEsIDEwNSwg
MTAwLCAzMiwgMTA5LCA5NywgMTA1LCAxMTAsIDQwLCAxMTgsIDExMSwgMTA1LCAxMDAsIDQxLCAz
MiwgMTIzLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcs
IDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwg
OTUsIDc3LCA2NSwgNzMsIDc4LCA5NSwgNjYsIDY5LCA3MSwgNzMsIDc4LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEw
OCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExOCwgNjksIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEw
NSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDExOCwgODAsIDEx
MSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDQxLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNjEsIDEx
MCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExOCwgNzgsIDEx
MSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MCwgMzIsIDExNywgMTE4LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDYxLCAxMTgsIDEw
MSwgOTksIDUwLCA0MCwgNDgsIDQ2LCA0OCwgNDQsIDQ4LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwg
NjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDYxLCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEw
MCwgMTExLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA2
MSwgMTE4LCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNjcsIDExMSwgMTA4LCAxMTEsIDEx
NCwgNDYsIDk3LCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3
OCwgODQsIDk1LCA4NSwgODAsIDY4LCA2NSwgODQsIDY5LCA5NSwgNjUsIDc2LCA2NiwgNjksIDY4
LCA3OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4
NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1
LCA4NSwgODAsIDY4LCA2NSwgODQsIDY5LCA5NSwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMywgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5
LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgOTUsIDY2LCA2OSwgNzAs
IDc5LCA4MiwgNjksIDk1LCA3NiwgNzMsIDcxLCA3MiwgODQsIDgzLCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5
LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2
MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ5LCA0NiwgNDQsIDQ5LCA0NiwgNDQsIDQ5LCA0Niwg
NDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDksIDEwNSwgOTks
IDExNCwgMTExLCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDYxLCAxMTgsIDgyLCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2Nywg
MTExLCAxMDgsIDExMSwgMTE0LCA0NiwgOTcsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEs
IDExNCwgNjEsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgs
IDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMDksIDEwMSwgMTE2LCA5NywgMTA4
LCAxMDgsIDEwNSwgOTksIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDEx
NSwgNjEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDEx
MSwgMTE0LCA0NiwgMTE0LCAxMDMsIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcx
LCA3NywgNjksIDc4LCA4NCwgOTUsIDg1LCA4MCwgNjgsIDY1LCA4NCwgNjksIDk1LCA3NywgNjks
IDg0LCA2NSwgNzYsIDc2LCA3MywgNjcsIDgyLCA3OSwgODUsIDcxLCA3MiwgNzgsIDY5LCA4Mywg
ODMsIDEzLCAxMCwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIsIDk3
LCA5OSwgMTAxLCA2MSwgNDksIDQ2LCA0OCwgNDUsIDEwOSwgMTAxLCAxMTYsIDk3LCAxMDgsIDEw
OCwgMTA1LCA5OSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0
NiwgMTAzLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTgsIDk3LCAxMTUsIDEw
MSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5
LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAx
MTAsIDExNSwgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDY4LCAxMDEsIDEwMiwgOTcs
IDExNywgMTA4LCAxMTYsIDgzLCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2OCwgMTA1LCAx
MDEsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMTQsIDEwNSwgOTksIDYxLCAxMTgsIDEwMSwgOTksIDUx
LCA0MCwgNDgsIDQ2LCA0OCwgNTIsIDQ0LCA0OCwgNDYsIDQ4LCA1MiwgNDQsIDQ4LCA0NiwgNDgs
IDUyLCA0MSwgNTksIDEzLCAxMCwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUs
IDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDYxLCAxMDksIDEwNSwgMTIwLCA0MCwgOTgsIDk3LCAx
MTUsIDEwMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA5OCwgNDIsIDQw
LCA0OSwgNDYsIDQ4LCA0NSwgNjgsIDEwMSwgMTAyLCA5NywgMTE3LCAxMDgsIDExNiwgODMsIDEx
MiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDY4LCAxMDUsIDEwMSwgMTA4LCAxMDEsIDk5LCAxMTYs
IDExNCwgMTA1LCA5OSwgNDYsIDExNCwgNDEsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDgs
IDQ2LCA0NCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0MSwgNDQsIDEwOSwgMTAxLCAxMTYsIDk3LCAx
MDgsIDEwOCwgMTA1LCA5OSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwg
MTE1LCA0NiwgMTE0LCA0MSwgNTksIDEzLCAxMCwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTks
IDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2
LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCAxMDksIDEwNSwgMTIwLCA0MCwgNjgs
IDEwMSwgMTAyLCA5NywgMTE3LCAxMDgsIDExNiwgODMsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgs
IDk3LCAxMTQsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDY4LCAxMDUsIDEwMSwgMTA4LCAxMDEsIDk5LCAxMTYsIDExNCwgMTA1LCA5OSwgNDQsIDk4
LCA5NywgMTE1LCAxMDEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAxMDksIDEwMSwgMTE2
LCA5NywgMTA4LCAxMDgsIDEwNSwgOTksIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAx
LCAxMTUsIDExNSwgNDYsIDExNCwgNDEsIDU5LCAxMywgMTAsIDEwOSwgMTA1LCA5OSwgMTE0LCAx
MTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjEsIDExNSwgOTcsIDExNiwgMTE3
LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcs
IDExNCwgMTAyLCA5NywgOTksIDEwMSwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA2
MSwgNDksIDQ2LCA0NSwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIs
IDk3LCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgs
IDEwMCwgMTExLCAxMTYsIDg2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwg
MTAwLCA2MSwgMTAwLCAxMTEsIDExNiwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
ODcsIDQ0LCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA4NywgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDYxLCA5NywgOTgsIDExNSwgNjksIDExMiwgMTE1
LCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAx
MTIsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDYxLCA5OSwgMTExLCAxMTAsIDExOCwgMTAxLCAx
MTQsIDExNiwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA4NCwg
MTExLCA2NSwgMTE4LCAxMDEsIDExNCwgOTcsIDEwMywgMTAxLCA4MywgMTA4LCAxMTEsIDExMiwg
MTAxLCA0MCwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCA2NSwgNjUsIDgyLCAxMTEsIDExNywg
MTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNzAsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwg
MTE1LCA2MSwgMTAzLCAxMDEsIDExNiwgNjUsIDY1LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAx
MTAsIDEwMSwgMTE1LCAxMTUsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDExNSwgNDAsIDEx
MCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0MSwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAx
MTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5
OSwgMTAxLCA2MSwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDQs
IDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwg
NzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMTgsIDEw
MSwgOTksIDUxLCA0MCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0MSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA4NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgNjEsIDk5LCAx
MTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgs
IDEwMSwgOTksIDUyLCA0MCwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA4NywgNDQsIDQ5LCA0NiwgNDgsIDQxLCA0NCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5Nywg
MTA4LCA4NywgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTExLCAxMTQs
IDEwMCwgMTE1LCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDg2LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDc2LCA3OSwgNjgsIDYxLCAxMDMsIDEwMSwgMTE2LCA3NiwgMTExLCAxMDAsIDcw
LCAxMTQsIDExMSwgMTA5LCA2NSwgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA0MCwgMTE4LCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgMTA1LCA5OSwg
MTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDEwMiwg
MTExLCAxMTUsIDQ2LCAxMjAsIDQ0LCA5NywgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA0MSwgNTks
IDEzLCAxMCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDc2LCA3OSwgNjgsIDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNzYsIDc5LCA2OCwgNDIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0
LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0NiwgMTIxLCA0Mywg
MTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3Nywg
MTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAx
MTAsIDEwMiwgMTExLCAxMTUsIDQ2LCAxMjIsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTEzLCAxMTcsIDEwMSwgMTE1LCAxMTYsIDEwMSwgMTAwLCA4
MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgNzksIDY4
LCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2
LCA3OSwgNjgsIDU5LCAxMywgMTAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwg
MTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2
MSwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgMTExLCAxMDAsIDQwLCAxMTQsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAx
MDEsIDExNCwgNDQsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ0LCAxMTQsIDEwMSwgMTEzLCAxMTcs
IDEwMSwgMTE1LCAxMTYsIDEwMSwgMTAwLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA3NiwgNzksIDY4LCA0MSwgNTksIDEzLCAxMCwgMTAxLCAxMTAsIDEx
OCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5NywgMTAwLCAx
MDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQ2LCAxMTQsIDEwMywgOTgsIDYxLCAxMDIsIDExNCwgMTEx
LCAxMDksIDgyLCA3MSwgNjYsIDY4LCA0MCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwg
MTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAx
MDEsIDQxLCA1OSwgMTMsIDEwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEw
OSwgMTAxLCAxMTAsIDExNiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5
LCAxMDEsIDYxLCAxMTgsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEw
MSwgMTEwLCAxMTYsIDczLCAxMTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAx
LCA1OSwgMTMsIDEwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAx
LCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDYsIDExNCwg
MTAzLCA5OCwgNDIsIDYxLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDQ2LCAxMjAsIDU5LCAxMywgMTAs
IDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4
MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0NiwgMTE0LCAxMDMsIDk4LCA0Miwg
NjEsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTAx
LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAx
MTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0MiwgNjEsIDExOCwgODIs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4
LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5
OSwgMTAxLCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgMTA5LCA5NywgMTIwLCA0MCwgMTE1LCAxMTcs
IDExNCwgMTAyLCA5NywgOTksIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQs
IDQ0LCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEs
IDExNCwgNDYsIDEwMywgNDEsIDQ0LCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4
MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwg
NjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDk4LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA1NywgNDgsIDYxLCAxMDIsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAx
MDgsIDcxLCAxMTQsIDk3LCAxMjIsIDEwNSwgMTEwLCAxMDMsIDgyLCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEw
MSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAs
IDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA0OCwgNjEs
IDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0
LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE1
LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0
LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNTcsIDQ4LCA2MSwgMTE4LCAxMDEs
IDk5LCA1MSwgNDAsIDQ5LCA0NiwgNDgsIDQ0LCA0OSwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwg
NDEsIDQyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEw
MSwgNTcsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMTAsIDEx
OCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwg
MTAyLCA2MSwgMTAzLCAxMDEsIDExNiwgNjYsIDgyLCA2OCwgNzAsIDc2LCAxMTEsIDExMSwgMTA3
LCAxMTcsIDExMiwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDQsIDExNCwgMTExLCAxMTcs
IDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTAxLCAxMTAsIDEwMSwgMTE0LCAxMDMsIDEyMSwgNjcsIDExMSwgMTEwLCAx
MTUsIDEwMSwgMTE0LCAxMTgsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDcwLCA5NywgOTksIDEx
NiwgMTExLCAxMTQsIDYxLCAxMDMsIDEwMSwgMTE2LCA2OSwgMTEwLCAxMDEsIDExNCwgMTAzLCAx
MjEsIDY3LCAxMTEsIDExMCwgMTE1LCAxMDEsIDExNCwgMTE4LCA5NywgMTE2LCAxMDUsIDExMSwg
MTEwLCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCA0MCwgMTE1LCAxMTIsIDEwMSwgOTksIDEx
NywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAx
MDEsIDExMCwgMTE2LCA4MiwgNDgsIDQ0LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAx
MTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDQxLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAx
LCA2NiwgOTcsIDExNSwgMTAxLCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ4LCA0NiwgNDQs
IDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDEsIDU5LCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDc2LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwg
MTEyLCAxMTQsIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDU5LCAxMywgMTAsIDEwOCwgMTA1LCAx
MDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDEwNSwg
MTEwLCAxMDIsIDExMSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEx
NSwgMTA0LCA5NywgMTAwLCAxMTEsIDExOSwgNjEsIDQ5LCA0NiwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjks
IDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDEwMywgMTAx
LCAxMTYsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEs
IDcwLCAxMTQsIDExMSwgMTA5LCA2NiwgODIsIDY4LCA3MCwgNzYsIDExMSwgMTExLCAxMDcsIDEx
NywgMTEyLCA0MCwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEw
LCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgsIDQ0
LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwg
NjYsIDExNCwgMTAwLCAxMDIsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzcsIDExMSwgMTEwLCAxMTEs
IDk5LCAxMDQsIDExNCwgMTExLCAxMDksIDEwMSwgNjEsIDEwMywgMTAxLCAxMTYsIDc2LCAxMTcs
IDEwOSwgMTA1LCAxMTAsIDk3LCAxMTAsIDk5LCAxMDEsIDQwLCA5NywgMTA5LCA5OCwgMTA1LCAx
MDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2
NywgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDExNSwgMTAxLCAxMTEsIDYxLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTEx
LCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTks
IDEwMSwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNDAsIDk3LCAx
MDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc3LCAxMTEsIDExMCwgMTExLCA5OSwgMTA0LCAx
MTQsIDExMSwgMTA5LCAxMDEsIDQ0LCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDg1LCAxMTAsIDk5
LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTUsIDExMiwg
MTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwg
MTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDk3LCAxMTAsIDk5LCAxMDEsIDQyLCA2MSwgMTE1LCAxMDEsIDExMSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDczLCAxMTQsIDExNCwg
OTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTAxLCAxMTAsIDExOCwgMTA1LCAx
MTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQsIDExNCwgOTcsIDEwMCwg
MTA1LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4
LCA3MywgMTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDIsIDYxLCAx
MTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDEx
MSwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEw
MiwgMTA1LCAxMTAsIDk3LCAxMDgsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEs
IDYxLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDEx
NiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDYsIDExNCwgMTAzLCA5OCwg
NTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODIsIDk3LCAxMDAsIDEwNSwgOTcs
IDExMCwgOTksIDEwMSwgNDIsIDYxLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAx
MTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYs
IDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4Miwg
OTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgOTksIDk3LCAxMDgsIDEwMSwgMTAw
LCA2MSwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwg
OTksIDEwMSwgNDIsIDExOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywg
NzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExNiwgMTIxLCA0NiwgMTIyLCA1OSwg
MTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEw
LCA5OSwgMTAxLCA4MywgOTksIDk3LCAxMDgsIDEwMSwgMTAwLCA0MiwgNjEsIDEwMSwgMTEwLCAx
MDEsIDExNCwgMTAzLCAxMjEsIDY3LCAxMTEsIDExMCwgMTE1LCAxMDEsIDExNCwgMTE4LCA5Nywg
MTE2LCAxMDUsIDExMSwgMTEwLCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjgsIDEwNSwg
MTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDYxLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1
LCAxMDEsIDY2LCA5NywgMTE1LCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAx
MDgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA0MiwgNjEsIDExNSwgMTE3LCAx
MTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA0NiwgMTE0
LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2OCwgMTA1LCAx
MDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNjEsIDEwOSwgOTcsIDEyMCwgNDAsIDEwMiwgMTA1LCAx
MTAsIDk3LCAxMDgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA0NCwgNDgsIDQ2
LCA0OCwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDEwNSwgMTEw
LCA5NywgMTA4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA2MSwgMTE4LCA2NSwg
MTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwg
MTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDEx
MCwgMTE2LCA0MiwgNjEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMDgs
IDk4LCAxMDEsIDEwMCwgMTExLCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjksIDEwOSwgMTA1LCAxMTUs
IDExNSwgMTA1LCAxMTgsIDEwMSwgNjEsIDExOCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1
LCAxMTgsIDEwMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTks
IDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDcwLCAxMTEsIDExNCwgNjgsIDEwNSwgMTE0
LCAxMDEsIDk5LCAxMTYsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA2MSwgOTcs
IDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwg
MTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MiwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDYxLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5
NywgMTA4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA0MiwgOTcsIDEwOSwgOTgs
IDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEs
IDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgMzIsIDQzLCAxMywgMTAsIDEwMiwgMTA1LCAx
MTAsIDk3LCAxMDgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA0MiwgOTcsIDEw
OSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1
LCAxMTEsIDExMCwgNzAsIDExMSwgMTE0LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgNjgs
IDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDQyLCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAx
MTYsIDEyMSwgNDYsIDEyMCwgMzIsIDQzLCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgs
IDczLCAxMTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0MiwgOTcsIDEw
OSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1
LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDIsIDExOCwgNzYsIDEwNSwgMTAz
LCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAx
MDUsIDExNiwgMTIxLCA0NiwgMTIyLCAzMiwgNDMsIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcs
IDEwOCwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgODMsIDk5LCA5NywgMTA4
LCAxMDEsIDEwMCwgMzIsIDQzLCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY5LCAx
MDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDQyLCAxMTgsIDc2LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1
LCAxMTYsIDEyMSwgNDYsIDEyMSwgNDQsIDEzLCAxMCwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA0
MSwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2Nywg
ODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA5
NSwgNjYsIDY5LCA3MCwgNzksIDgyLCA2OSwgOTUsIDcwLCA3OSwgNzEsIDEzLCAxMCwgMTAyLCAx
MDUsIDExMCwgOTcsIDEwOCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDEwOSwgOTcsIDEy
MCwgNDAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0
LCA0OCwgNDYsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDk3LCAxMTIsIDExMiwgMTA4LCAxMjEsIDczLCAxMDks
IDk3LCAxMDMsIDEwMSwgODAsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwgMTA1LCAxMTAs
IDEwMywgNDAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDEx
MSwgMTE0LCA0NiwgOTcsIDQyLCA2MSwgMTE4LCAxMDUsIDExNSwgMTA1LCA5OCwgMTA1LCAxMDgs
IDEwNSwgMTE2LCAxMjEsIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcxLCA3Nywg
NjksIDc4LCA4NCwgOTUsIDY2LCA2OSwgNzAsIDc5LCA4MiwgNjksIDk1LCA3MCwgODIsIDY1LCA3
MSwgNjcsIDc5LCA3NiwgNzksIDgyLCAxMywgMTAsIDEwMywgMTA4LCA3MCwgMTE0LCA5NywgMTAz
LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTBdLm1hcChjID0+IFN0
cmluZy5mcm9tQ2hhckNvZGUoYykpLmpvaW4oIiIpOworY29uc3QgdmVydGV4U2hhZGVyR0xTTDIg
PSBbMzUsIDExOCwgMTAxLCAxMTQsIDExNSwgMTA1LCAxMTEsIDExMCwgMzIsIDUyLCA1MywgNDgs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgwLCA2NiwgODIsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3NiwgNjYsIDY5LCA2
OCwgNzksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzcsIDY2LCA3MywgNjksIDc4LCA4
NCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc5LCA4MCwgNjUsIDY3LCA3MywgODQsIDg5LCA2
OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc2LCA4MCwgNzIsIDY1LCA4NCwgNjksIDgzLCA4
NCwgODYsIDY1LCA3NiwgODUsIDY5LCAzMiwgNDgsIDQ2LCA1MiwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDgwLCA2OSwgNjcsIDg1LCA3NiwgNjUsIDgyLCA3
OSwgODYsIDY5LCA4MiwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjUsIDY4LCA3MywgNjUsIDc4LCA2NywgNjksIDc5LCA4
NiwgNjksIDgyLCA2NSwgNzYsIDgwLCA3MiwgNjUsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDY5LCA3NywgNzMsIDgzLCA4MywgNzMsIDg2LCA2OSwgNjgsIDczLCA4
MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgODYsIDczLCA4
NCwgODksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NiwgNzksIDY4LCA2NiwgNjUsIDgzLCA2
OSwgNjgsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDcwLCA4NSwgODIsIDY1LCA2NywgNjksIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA3MywgNjcsIDgyLCA3
OSwgODMsIDg1LCA4MiwgNzAsIDY1LCA2NywgNjksIDc3LCA2NSwgODAsIDY4LCA3MywgODIsIDY5
LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA2OSwgNzgsIDg2LCA3MywgODIsIDc5LCA3OCwgNzcsIDY5LCA3OCwgODQsIDY2
LCA4MiwgNjgsIDcwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3
OCwgNzksIDgyLCA3NywgNjUsIDc2LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA2NiwgODUsIDc3LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAz
MiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA3OSwg
ODIsIDc3LCA2NSwgNzYsIDg4LCA4OSwgODMsIDY3LCA2NSwgNzYsIDY5LCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NiwgNzMsIDcxLCA3MiwgODQsIDc3LCA2NSwg
ODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwg
NzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIs
IDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDc3LCA2NSwgODAsIDk1LCA1MSwg
NjgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAs
IDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA3NywgNjUsIDgwLCA5NSwgODMsIDc1LCA4OSwg
NjYsIDc5LCA4OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMs
IDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCA3NiwgOTUsIDcyLCA2NSwgODIsIDc3LCA3OSwg
NzgsIDczLCA2NywgODMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDgyLCA3MSwgNjYsIDY4LCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY1LCA2OCwgNzMs
IDY1LCA3OCwgNjcsIDY5LCA3OSwgNjcsIDY3LCA3NiwgODUsIDgzLCA3MywgNzksIDc4LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3MiwgNzksIDgyLCA3MywgOTAs
IDc5LCA3OCwgNzksIDY3LCA2NywgNzYsIDg1LCA4MywgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDg1LCA3NywgOTUsIDY2LCA3OSwgNzgs
IDY5LCA5NSwgNzMsIDc4LCA3MCwgNzYsIDg1LCA2OSwgNzgsIDY3LCA2OSwgODIsIDgzLCAzMiwg
NDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY2LCAxMTEsIDEx
MCwgMTAxLCAxMTUsIDgwLCAxMDEsIDExNCwgNzcsIDEwMSwgMTE1LCAxMDQsIDMyLCA0OCwgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDg1LCA3NywgOTUsIDc3
LCA3OSwgODIsIDgwLCA3MiwgOTUsIDczLCA3OCwgNzAsIDc2LCA4NSwgNjksIDc4LCA2NywgNjks
IDgyLCA4MywgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA4NiwgNzMsIDcxLCA3OCwgNjksIDg0LCA4NCwgNjksIDY2LCA3NiwgNjksIDc4LCA2OCwgNzcs
IDc5LCA2OCwgNjksIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA4OSwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDY1LCA3NywgODAsIDc2LCA2OSwgODIs
IDUxLCA2OCwgNzEsIDgyLCA2OSwgNjksIDc4LCA2OCwgNjksIDgwLCA4NCwgNzIsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA2NSwgNzcsIDgwLCA3NiwgNjks
IDgyLCA1MSwgNjgsIDY2LCA3MSwgODIsIDc3LCA2NSwgODAsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDg1LCA4MywgNjksIDgwLCA3MiwgODksIDgzLCA3MywgNjcs
IDY1LCA3NiwgNzYsIDczLCA3MSwgNzIsIDg0LCA3MCwgNjUsIDc2LCA3NiwgNzksIDcwLCA3MCwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODQsIDg3LCA3OSwgODMs
IDczLCA2OCwgNjksIDY4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDczLCA3OCwgNzEsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcs
IDc5LCA2NSwgODQsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4Miwg
NjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA2Niwg
ODUsIDc3LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4Miwg
NjcsIDc5LCA2NSwgODQsIDk1LCA4NCwgNzMsIDc4LCA4NCwgOTUsIDg0LCA2OSwgODgsIDg0LCA4
NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc4LCA3MywgODMsIDc5LCA4
NCwgODIsIDc5LCA4MCwgNzMsIDY3LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4
LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NiwgODIsIDY4LCA3MCwgOTUsIDg2LCA5NSwgNzIsIDY5
LCA3MywgNzEsIDcyLCA4NCwgOTUsIDY3LCA3OSwgODIsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNjks
IDY4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgODMsIDk1
LCA2NiwgODIsIDY4LCA3MCwgOTUsIDY5LCA3OCwgNjksIDgyLCA3MSwgODksIDk1LCA2NywgNzks
IDc4LCA4MywgNjksIDgyLCA4NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNzIsIDY5LCA2OSwgNzgsIDk1LCA4NCwgNjks
IDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwg
NDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA4MywgOTUs
IDg0LCA3MiwgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDY1LCA3OCwgNjgsIDc3LCA2NSwg
ODMsIDc1LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2
NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA2OCwgNjksIDY2LCA4NSwgNzEsIDc3LCA3OSwgNjgsIDY5LCAzMiwgNDgsIDEwLCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNzIsIDY1LCA2OCwg
NjksIDgyLCA5NSwgNzgsIDY1LCA3NywgNjksIDMyLCAxMTgsIDEwMSwgMTE0LCAxMTYsIDEwMSwg
MTIwLCA1OCwgMTEyLCA5OCwgMTE0LCAxMCwgMTEyLCAxMTQsIDEwMSwgOTksIDEwNSwgMTE1LCAx
MDUsIDExMSwgMTEwLCAzMiwgMTA0LCAxMDUsIDEwMywgMTA0LCAxMTIsIDMyLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQw
LCAxMTUsIDExNiwgMTAwLCA0OSwgNTIsIDQ4LCA0NCwgOTksIDExMSwgMTA4LCAxMTcsIDEwOSwg
MTEwLCA5NSwgMTA5LCA5NywgMTA2LCAxMTEsIDExNCwgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAx
MDIsIDExMSwgMTE0LCAxMDksIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDEx
NiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ4LCA0NCwgMzIsIDk4LCAxMDUsIDEx
MCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAxMTcsIDExMCwg
MTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCA4MywgOTksIDEwMSwgMTEwLCAxMDEsIDEzLCAx
MCwgMTIzLCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTks
IDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywg
MTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDU5LCAxMywgMTAs
IDEyNSwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAx
MDEsIDExNiwgMzIsIDYxLCAzMiwgNDksIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwg
MTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTEx
LCAxMTQsIDEwOSwgMzIsIDc3LCA5NywgMTE2LCAxMDEsIDExNCwgMTA1LCA5NywgMTA4LCAxMywg
MTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NSwgMTA4LCA5OCwg
MTAxLCAxMDAsIDExMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MiwgMzIsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzMs
IDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEx
OCwgNzksIDExMiwgOTcsIDk5LCAxMDUsIDExNiwgMTIxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2OSwgMTA5LCAxMDUsIDEx
NSwgMTE1LCAxMDUsIDExOCwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDks
IDk3LCAxMTIsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4
LCAxMDUsIDExNiwgMTIxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUwLCAzMiwgMTE4LCA3NywgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDEx
NCwgMTAyLCA5NywgOTksIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNzMs
IDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEx
OCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzMsIDEx
MCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwg
ODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODAsIDExMSwg
MTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgODMsIDEwNSwgMTIyLCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTgsIDY2LCAxMTcsIDEwOSwgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEw
LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTcsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDc3LCA5
NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwg
OTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAx
MjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTEsIDExMiwgOTcsIDk5LCAx
MDUsIDExNiwgMTIxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5
LCA5NywgMTE2LCA1MiwgMzIsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAx
LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1
MiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDksIDk3LCAxMTIsIDc3LCA5NywgMTE2
LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIs
IDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwg
ODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAx
MjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5OCwgMTE3LCAxMDksIDExMiwg
NzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAs
IDMyLCAxMTgsIDg0LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDgzLCAxMTIsIDk3LCA5
OSwgMTAxLCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAx
MTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUy
LCAzMiwgMTE4LCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNjcsIDExMSwgMTA4LCAxMTEs
IDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNzYsIDEwNSwgMTAz
LCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAx
MDUsIDExNiwgMTIxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgMTA1LCA5OSwg
MTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDEwMiwg
MTExLCAxMTUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTIsIDEx
MSwgMTA1LCAxMTAsIDExNiwgODMsIDEwNSwgMTIyLCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTIsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2OSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDEx
OCwgMTAxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUyLCAzMiwgMTE4LCA2OSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY1LCAxMDks
IDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY4LCAxMDEsIDk4LCAxMTcsIDEwMywgNzcs
IDExMSwgMTAwLCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY3
LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODAsIDk3LCAxMTQsIDk3LCAx
MDksIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjcsIDEwOCwg
MTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4MiwgMTAxLCAxMDIsIDExNCwgOTcsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcs
IDExMSwgOTcsIDExNiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5
NywgMTE2LCA1MiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwg
NzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAs
IDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgNjYsIDEx
NywgMTA5LCAxMTIsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDEx
NiwgODQsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgODMsIDExMiwgOTcsIDk5LCAxMDEs
IDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIs
IDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDY2LCAxMTcsIDEw
OSwgMTEyLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MiwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2
LCA4NCwgMTA1LCAxMTAsIDExNiwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNTksIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcs
IDExMSwgOTcsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsIDExNiwgNjgsIDEwNSwg
MTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAs
IDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODQsIDEw
NSwgMTEwLCAxMTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcs
IDExNiwgNTIsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0
LCAxMDUsIDExMCwgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjUsIDExMCwgMTA1LCAxMTUsIDExMSwgMTE2LCAx
MTQsIDExMSwgMTEyLCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgs
IDY1LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEsIDExMiwgMTIxLCA3MywgMTEw
LCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTcsIDEx
MCwgMTA1LCAxMTUsIDExMSwgMTE2LCAxMTQsIDExMSwgMTEyLCAxMjEsIDc3LCA5NywgMTE2LCAx
MTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA4Mywg
MTA0LCAxMDEsIDEwMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4MywgMTA0LCAxMDEsIDEwMSwgMTEwLCA3MywgMTEw
LCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE1LCAx
MDQsIDEwMSwgMTAxLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDExNCwgOTcsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwg
MTAyLCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3
LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTAsIDMyLCAxMTgsIDg0LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEsIDExNSwgMTE1
LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAz
MiwgMTE2LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEsIDExNSwgMTE1LCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwg
ODQsIDEwNCwgMTA1LCA5OSwgMTA3LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDgwLCA5NywgMTE0LCA5
NywgMTA5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2OCwgMTA1LCAx
MDIsIDEwMiwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY4LCAxMDUsIDExNSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA4NCwg
MTA1LCAxMTAsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExNywgOTgsIDgzLCAxMTcsIDExNCwgMTAyLCA5Nywg
OTksIDEwMSwgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExNiwgMTIxLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0
LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDgsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3
NiwgNDksIDk1LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMs
IDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA0OCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwg
MTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYs
IDUwLCA5NSwgNTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAx
MTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgOTUsIDQ5LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0
LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3
NiwgNTAsIDQ5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEy
LCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDUwLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUs
IDk5LCA5NywgMTA4LCA4OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwg
ODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODksIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwg
OTksIDk3LCAxMDgsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4
MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OCwgODgsIDk1LCA5MCwg
OTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwg
MTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg5LCA4OSwgOTUsIDkwLCA5MCwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1
LCA5OSwgOTcsIDEwOCwgOTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OCwgODksIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAx
MTQsIDEwNSwgOTksIDk3LCAxMDgsIDg5LCA5MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgOTAs
IDg4LCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcs
IDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ5LCA0NCwgMzIsIDk4LCAxMDUs
IDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OSwgNDEsIDMyLCAxMTcsIDEx
MCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCA3NywgMTAxLCAxMTUsIDEwNCwgMTMsIDEw
LCAxMjMsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwg
MTAwLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4LCAxMDUsIDEx
NSwgMTA1LCA5OCwgMTA1LCAxMDgsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywgMTAsIDEyNSwgNTks
IDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUsIDgz
LCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUsIDY2LCA2OSwgNzEs
IDczLCA3OCwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMDgsIDEx
MSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDEw
NSwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMiwgMTExLCAxMTUsIDEwNSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYs
IDQwLCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ5
LCA0MSwgMzIsIDEwNSwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwgMTExLCAx
MTQsIDEwOSwgOTcsIDEwOCwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA4MCwgNzMsIDYxLCA1MSwgNDYsIDQ5LCA1Miwg
NDksIDUzLCA1NywgNTAsIDU0LCA1MywgNTEsIDUzLCA1NiwgNTcsIDU1LCA1NywgNTEsIDUwLCA1
MSwgNTYsIDUyLCA1NCwgNTAsIDU0LCA1MiwgNTEsIDUxLCA1NiwgNTEsIDUwLCA1NSwgNTcsIDUz
LCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5OSwgMTEx
LCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDEx
MSwgMTIwLCA2MSwgNTAsIDQ2LCA1MCwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDEx
NiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3MSwgOTcsIDEwOSwgMTA5LCA5Nywg
NjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQsIDY1LCAx
MTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNjEsIDQ5LCA0NiwgNDgsIDQ3LCA3NiwgMTA1LCAxMTAs
IDEwMSwgOTcsIDExNCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwg
MTAxLCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNTksIDEzLCAxMCwgOTksIDEx
MSwgMTEwLCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3NiwgMTE3LCAxMDks
IDEwNSwgMTEwLCA5NywgMTEwLCA5OSwgMTAxLCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwg
NjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ4
LCA0NiwgNTAsIDQ5LCA1MCwgNTQsIDQ0LCA0OCwgNDYsIDU1LCA0OSwgNTMsIDUwLCA0NCwgNDgs
IDQ2LCA0OCwgNTUsIDUwLCA1MCwgNDEsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAx
MTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNjksIDExMiwgMTE1LCAxMDUsIDEw
OCwgMTExLCAxMTAsIDYxLCA0OCwgNDYsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ5LCA1OSwg
MTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwgOTcsIDEx
NiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEyMCwgNDEsIDMyLCA5OSwgMTA4LCA5Nywg
MTA5LCAxMTIsIDQwLCAxMjAsIDQ0LCA0OCwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwgNDEsIDEz
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA5NywgOTgsIDExNSwg
NjksIDExMiwgMTE1LCA0MCwgMTIwLCA0MSwgMzIsIDk3LCA5OCwgMTE1LCA0MCwgMTIwLCA0MSwg
NDMsIDY5LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCAxMywgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQw
LCAxMjAsIDQxLCAzMiwgMTA5LCA5NywgMTIwLCA0MCwgMTIwLCA0NCwgNjksIDExMiwgMTE1LCAx
MDUsIDEwOCwgMTExLCAxMTAsIDQxLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDEx
MCwgMTAxLCAzMiwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEy
LCAxMTUsIDQwLCAxMjAsIDQxLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTIwLCA0
NCwgNjksIDExMiwgMTE1LCAxMDUsIDEwOCwgMTExLCAxMTAsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwg
MTMsIDEwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTE2LCAxMTQsIDk3LCAxMTAsIDExNSwgMTEy
LCAxMTEsIDExNSwgMTAxLCA3NywgOTcsIDExNiwgNTEsIDQwLCAxMDksIDk3LCAxMTYsIDUxLCAz
MiwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMzIsIDEyMywgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcs
IDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDEwNSwgNDksIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAx
MjAsIDkxLCA0OSwgOTMsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDUw
LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA1
OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTExLCAxMTcsIDExNiwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDYxLCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMCwgNDQsIDEwNSwgNDksIDQ2LCAxMjAs
IDQ0LCAxMDUsIDUwLCA0NiwgMTIwLCA0MSwgNDQsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
NDAsIDEwNSwgNDgsIDQ2LCAxMjEsIDQ0LCAxMDUsIDQ5LCA0NiwgMTIxLCA0NCwgMTA1LCA1MCwg
NDYsIDEyMSwgNDEsIDQ0LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4LCA0
NiwgMTIyLCA0NCwgMTA1LCA0OSwgNDYsIDEyMiwgNDQsIDEwNSwgNTAsIDQ2LCAxMjIsIDQxLCAx
MywgMTAsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwg
MTExLCAxMTcsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEy
NSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1LCAxMTAsIDExOCwgMTAxLCAxMTQs
IDExNSwgMTAxLCA3NywgOTcsIDExNiwgNTEsIDQwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1
LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDQ4LCA0OCwgNjEsIDEwNSwgMTEwLCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA0
OCwgNDksIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwg
OTMsIDkxLCA0OSwgOTMsIDQ0LCA5NywgNDgsIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2
LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDQ5LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcs
IDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA0OSwg
NDksIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMs
IDkxLCA0OSwgOTMsIDQ0LCA5NywgNDksIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAx
MTQsIDEwNSwgMTIwLCA5MSwgNDksIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDUwLCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA1MCwgNDks
IDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkx
LCA0OSwgOTMsIDQ0LCA5NywgNTAsIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgOTgsIDQ4LCA0OSwgNjEsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDks
IDQ5LCA0NSwgOTcsIDQ5LCA1MCwgNDIsIDk3LCA1MCwgNDksIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCA5OCwgNDksIDQ5LCA2MSwgNDUsIDk3LCA1MCwgNTAsIDQyLCA5
NywgNDksIDQ4LCA0MywgOTcsIDQ5LCA1MCwgNDIsIDk3LCA1MCwgNDgsIDU5LCAxMywgMTAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OCwgNTAsIDQ5LCA2MSwgOTcsIDUwLCA0OSwgNDIs
IDk3LCA0OSwgNDgsIDQ1LCA5NywgNDksIDQ5LCA0MiwgOTcsIDUwLCA0OCwgNTksIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTAxLCAxMTYsIDYxLCA5NywgNDgsIDQ4
LCA0MiwgOTgsIDQ4LCA0OSwgNDMsIDk3LCA0OCwgNDksIDQyLCA5OCwgNDksIDQ5LCA0MywgOTcs
IDQ4LCA1MCwgNDIsIDk4LCA1MCwgNDksIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgOTgsIDQ4LCA0OSwgNDQsIDQwLCA0
NSwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OCwgNDksIDQzLCA5NywgNDgsIDUwLCA0MiwgOTcsIDUw
LCA0OSwgNDEsIDQ0LCA0MCwgOTcsIDQ5LCA1MCwgNDIsIDk3LCA0OCwgNDksIDQ1LCA5NywgNDgs
IDUwLCA0MiwgOTcsIDQ5LCA0OSwgNDEsIDQ0LCAxMywgMTAsIDk4LCA0OSwgNDksIDQ0LCA0MCwg
OTcsIDUwLCA1MCwgNDIsIDk3LCA0OCwgNDgsIDQ1LCA5NywgNDgsIDUwLCA0MiwgOTcsIDUwLCA0
OCwgNDEsIDQ0LCA0MCwgNDUsIDk3LCA0OSwgNTAsIDQyLCA5NywgNDgsIDQ4LCA0MywgOTcsIDQ4
LCA1MCwgNDIsIDk3LCA0OSwgNDgsIDQxLCA0NCwgMTMsIDEwLCA5OCwgNTAsIDQ5LCA0NCwgNDAs
IDQ1LCA5NywgNTAsIDQ5LCA0MiwgOTcsIDQ4LCA0OCwgNDMsIDk3LCA0OCwgNDksIDQyLCA5Nywg
NTAsIDQ4LCA0MSwgNDQsIDQwLCA5NywgNDksIDQ5LCA0MiwgOTcsIDQ4LCA0OCwgNDUsIDk3LCA0
OCwgNDksIDQyLCA5NywgNDksIDQ4LCA0MSwgNDEsIDQ3LCAxMDAsIDEwMSwgMTE2LCA1OSwgMTMs
IDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNiwgMTExLCA3NiwgMTA1
LCAxMTAsIDEwMSwgOTcsIDExNCwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTIsIDExMSwgMTE5LCA0MCwg
OTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA3NiwgMTA1
LCAxMTAsIDEwMSwgOTcsIDExNCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEs
IDExOSwgMTAxLCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQxLCA1OSwg
MTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNiwgMTExLCA3MSwg
OTcsIDEwOSwgMTA5LCA5NywgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAs
IDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTIsIDExMSwgMTE5LCA0MCwgOTks
IDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA3MSwgOTcsIDEw
OSwgMTA5LCA5NywgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAx
LCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAx
MjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgMTEzLCAxMTcsIDk3
LCAxMTQsIDEwMSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3LCAxMDgs
IDExNywgMTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAx
MTQsIDExMCwgMzIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQyLCAxMTgsIDk3LCAxMDgsIDEx
NywgMTAxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDExMiwgMTExLCAxMTksIDUzLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEx
OCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMTUsIDExMywgNjEsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQyLCAx
MTgsIDk3LCAxMDgsIDExNywgMTAxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDEx
NCwgMTEwLCAzMiwgMTE1LCAxMTMsIDQyLCAxMTUsIDExMywgNDIsIDExOCwgOTcsIDEwOCwgMTE3
LCAxMDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTAzLCAxMDEsIDExNiwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEw
MSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwg
MTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk5
LCAxMDgsIDk3LCAxMDksIDExMiwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCA5OSwgMTExLCAxMDgs
IDExMSwgMTE0LCA0NCwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEwMSwg
NjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwg
NDEsIDQ0LCA0OCwgNDYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMywgMTAxLCAxMTYsIDgyLCA5NywgMTEwLCAx
MDAsIDQwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0MSwgMzIs
IDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAyLCAxMTQs
IDk3LCA5OSwgMTE2LCA0MCwgMTE1LCAxMDUsIDExMCwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCAx
MTUsIDEwMSwgMTAxLCAxMDAsIDQ2LCAxMjAsIDEyMSwgMzIsIDQ0LCAxMTgsIDEwMSwgOTksIDUw
LCA0MCwgNDksIDUwLCA0NiwgNTcsIDU2LCA1NywgNTYsIDQ0LCA1NSwgNTYsIDQ2LCA1MCwgNTEs
IDUxLCA0MSwgNDEsIDQxLCA0MiwgNTIsIDUxLCA1NSwgNTMsIDU2LCA0NiwgNTMsIDUyLCA1Mywg
NTEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDEwMCwgMTA1LCAxMTYsIDEwNCwgMTAxLCAxMTQsIDQwLCAxMTgsIDEwMSwgOTksIDUwLCAz
MiwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEx
OCwgOTcsIDExNCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEw
LCAxMTYsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MTQsIDk3LCAxMTAsIDEwMCwgNjEsIDEwMywgMTAxLCAxMTYsIDgyLCA5NywgMTEwLCAxMDAsIDQw
LCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTAwLCAxMDUsIDExNiwgMTA0LCAxMDEsIDExNCwgNjEsIDEwOSwgMTA1LCAxMjAs
IDQwLCA0NSwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDY1LCAxMDksIDEx
MSwgMTE3LCAxMTAsIDExNiwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQsIDExOCwgOTcsIDEx
NCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEwLCAxMTYsIDQ3
LCA1MCwgNTMsIDUzLCA0NiwgNDgsIDQ0LCAxMTQsIDk3LCAxMTAsIDEwMCwgNDEsIDU5LCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDAsIDEwNSwgMTE2LCAxMDQs
IDEwMSwgMTE0LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDEx
NiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwgNzcs
IDk3LCAxMjAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNjEsIDUwLCA1MywgNTMsIDQ2LCA0OCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExNiwgMTExLCA4MiwgNzEsIDY2LCA2
OCwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwg
MzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA5LCA5NywgMTIw
LCA4MiwgNzEsIDY2LCA2MSwgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMDksIDk3
LCAxMjAsIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCA0NCwgMTA5LCA5Nywg
MTIwLCA0MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDEwMywgNDQsIDk5LCAxMTEsIDEw
OCwgMTExLCAxMTQsIDQ2LCA5OCwgNDEsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDY4LCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgMTE0LCAxMDMsIDk4LCAx
MDAsIDc3LCA5NywgMTIwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDQ3LCAxMDksIDk3LCAxMjAs
IDgyLCA3MSwgNjYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCA2OCwgNjEsIDk5LCAxMDgs
IDk3LCAxMDksIDExMiwgNDAsIDEwMiwgMTA4LCAxMTEsIDExMSwgMTE0LCA0MCwgNjgsIDQxLCA0
NywgNTAsIDUzLCA1MywgNDYsIDQ4LCA0NCwgNDgsIDQ2LCA0NCwgNDksIDQ2LCA0MSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAzLCA5OCwgNjEsIDk5LCAxMTEsIDEw
OCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDQyLCA2OCwgNTksIDEzLCAxMCwgMTE0LCAx
MDMsIDk4LCA2MSwgMTE2LCAxMTEsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA4MywgMTEyLCA5Nywg
OTksIDEwMSwgNDAsIDExNCwgMTAzLCA5OCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYs
IDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTE0LCAxMDMsIDk4LCA0
NCwgNjgsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDEwMiwgMTE0LCAxMTEsIDEwOSwgODIsIDcxLCA2NiwgNjgsIDQwLCAxMTgsIDEwMSwgOTksIDUy
LCAzMiwgMTE0LCAxMDMsIDk4LCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAzLCA5
OCwgMTAwLCA0NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTE2LCAxMTEsIDc2LCAxMDUsIDExMCwgMTAx
LCA5NywgMTE0LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDExNCwgMTAzLCA5OCwgMTAwLCA0
NiwgMTE0LCAxMDMsIDk4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgMTE0LCAxMDMsIDk4LCA0NywgMTE0LCAx
MDMsIDk4LCAxMDAsIDQ2LCA5NywgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwOCwgOTcsIDEy
MSwgMTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDEx
MCwgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTExLCAxMTcsIDExNiwgMzIsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3
LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMDgsIDExMSwg
OTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ5LCA0MSwgMzIsIDExMSwg
MTE3LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA3OCwgMTExLCAxMTQsIDEw
OSwgOTcsIDEwOCwgODcsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwg
NDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwgNTAs
IDQxLCAzMiwgMTExLCAxMTcsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgw
LCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg1LCA4NiwgODcsIDU5LCAxMywg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQs
IDc5LCA3NywgOTUsIDg2LCA2OSwgODIsIDg0LCA2OSwgODgsIDk1LCA2OCwgNjksIDcwLCA3Mywg
NzgsIDczLCA4NCwgNzMsIDc5LCA3OCwgODMsIDEzLCAxMCwgMTE4LCAxMTEsIDEwNSwgMTAwLCAz
MiwgMTA5LCA5NywgMTA1LCAxMTAsIDQwLCAxMTgsIDExMSwgMTA1LCAxMDAsIDQxLCAzMiwgMTIz
LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4
MywgODQsIDc5LCA3NywgOTUsIDg2LCA2OSwgODIsIDg0LCA2OSwgODgsIDk1LCA3NywgNjUsIDcz
LCA3OCwgOTUsIDY2LCA2OSwgNzEsIDczLCA3OCwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg1LCAxMTIsIDEwMCwg
OTcsIDExNiwgMTAxLCAxMDAsIDYxLCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEs
IDExMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwgMTExLCAxMTQsIDEw
OSwgOTcsIDEwOCwgODUsIDExMiwgMTAwLCA5NywgMTE2LCAxMDEsIDEwMCwgNjEsIDExMCwgMTEx
LCAxMTQsIDEwOSwgOTcsIDEwOCwgNTksIDEzLCAxMCwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA4NSwgODYsIDg3LCA2MSwgMTEyLCAxMTEsIDExNSwgMTA1LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAxLCAxMDAsIDU5LCAx
MywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4Mywg
ODQsIDc5LCA3NywgOTUsIDg2LCA2OSwgODIsIDg0LCA2OSwgODgsIDk1LCA4NSwgODAsIDY4LCA2
NSwgODQsIDY5LCA5NSwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMywgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3
NywgOTUsIDg2LCA2OSwgODIsIDg0LCA2OSwgODgsIDk1LCA4NSwgODAsIDY4LCA2NSwgODQsIDY5
LCA5NSwgNzgsIDc5LCA4MiwgNzcsIDY1LCA3NiwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAz
MiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODcsIDExMSwgMTE0LCAxMDgsIDEwMCwgNjEsIDEx
OSwgMTExLCAxMTQsIDEwOCwgMTAwLCA1OSwgMTMsIDEwLCAxMDMsIDEwOCwgOTUsIDgwLCAxMTEs
IDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDYxLCAxMTgsIDEwNSwgMTAxLCAxMTksIDgw
LCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQyLCAxMDIsIDEw
NSwgMTEwLCA5NywgMTA4LCA4NywgMTExLCAxMTQsIDEwOCwgMTAwLCA0MiwgMTE4LCAxMDEsIDk5
LCA1MiwgNDAsIDExMiwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NSwgMTEy
LCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAwLCA0NCwgNDksIDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwg
MTE1LCA2MSwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODcsIDExMSwgMTE0LCAxMDgsIDEwMCwg
NDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAx
MTEsIDExMCwgODUsIDExMiwgMTAwLCA5NywgMTE2LCAxMDEsIDEwMCwgNDQsIDQ5LCA0NiwgNDgs
IDQxLCA1OSwgMTMsIDEwLCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDg3LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAw
LCA4MCwgMTExLCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTEw
LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgMTExLCAxMTQsIDEwOCwgMTAwLCA2MSwgMTA5
LCA5NywgMTE2LCA1MSwgNDAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDg3LCAxMTEsIDExNCwg
MTA4LCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4
LCA4NywgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAs
IDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDExMSwgMTE0LCAxMDgsIDEwMCwgNDIs
IDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODUsIDExMiwgMTAwLCA5NywgMTE2LCAxMDEs
IDEwMCwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTcsIDExOCwgODUs
IDExMiwgMTAwLCA5NywgMTE2LCAxMDEsIDEwMCwgNjEsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCA0
OCwgNDYsIDQ0LCA0OCwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwg
MTE3LCAxMTgsIDUwLCA2MSwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDQ4LCA0NiwgNDQsIDQ4LCA0
NiwgNDEsIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
NjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDg2LCA2OSwgODIsIDg0LCA2OSwgODgsIDk1LCA3
NywgNjUsIDczLCA3OCwgOTUsIDY5LCA3OCwgNjgsIDEzLCAxMCwgMTAzLCAxMDgsIDk1LCA4MCwg
MTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIxLCAzMiwgNDIsIDYxLCAz
MiwgNDUsIDQ5LCA0NiwgNTksIDMyLCAxMjVdLm1hcChjID0+IFN0cmluZy5mcm9tQ2hhckNvZGUo
YykpLmpvaW4oIiIpOworY29uc3QgZnJhZ21lbnRTaGFkZXJHTFNMMiA9IFszNSwgMTE4LCAxMDEs
IDExNCwgMTE1LCAxMDUsIDExMSwgMTEwLCAzMiwgNTIsIDUzLCA0OCwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODAsIDY2LCA4MiwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc2LCA2NiwgNjksIDY4LCA3OSwgNjgsIDczLCA4
MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDY1LCA3NywgNjYsIDczLCA2OSwgNzgsIDg0LCA2OCwgNzMsIDgyLCA2
OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDEx
MCwgMTAxLCAzMiwgNzksIDgwLCA2NSwgNjcsIDczLCA4NCwgODksIDY4LCA3MywgODIsIDY5LCA2
NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA2NSwgNzYsIDgwLCA3MiwgNjUsIDg0LCA2OSwgODMsIDg0LCA4NiwgNjUsIDc2LCA4
NSwgNjksIDMyLCA0OCwgNDYsIDUyLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA4MywgODAsIDY5LCA2NywgODUsIDc2LCA2NSwgODIsIDc5LCA4NiwgNjksIDgyLCA2
NSwgNzYsIDgwLCA3MiwgNjUsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDgyLCA2NSwgNjgsIDczLCA2NSwgNzgsIDY3LCA2OSwgNzksIDg2LCA2OSwgODIsIDY1LCA3
NiwgODAsIDcyLCA2NSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
NjksIDc3LCA3MywgODMsIDgzLCA3MywgODYsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4
NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
ODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA4NiwgNzMsIDg0LCA4OSwgNjgsIDczLCA4
MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDc2LCA3OSwgNjgsIDY2LCA2NSwgODMsIDY5LCA2OCwgNzcsIDczLCA2
NywgODIsIDc5LCA4MywgNzAsIDg1LCA4MiwgNjUsIDY3LCA2OSwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzcsIDczLCA2NywgODIsIDc5LCA4MywgODUsIDgyLCA3
MCwgNjUsIDY3LCA2OSwgNzcsIDY1LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2
LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY5LCA3
OCwgODYsIDczLCA4MiwgNzksIDc4LCA3NywgNjksIDc4LCA4NCwgNjYsIDgyLCA2OCwgNzAsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA3OSwgODIsIDc3LCA2
NSwgNzYsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY2LCA4NSwg
NzcsIDgwLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDc5LCA4MiwgNzcsIDY1LCA3Niwg
ODgsIDg5LCA4MywgNjcsIDY1LCA3NiwgNjksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzcsIDY1LCA4MCwgNjgsIDczLCA4Miwg
NjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjks
IDY3LCA4NCwgNzMsIDc5LCA3OCwgNzcsIDY1LCA4MCwgOTUsIDUxLCA2OCwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQs
IDczLCA3OSwgNzgsIDc3LCA2NSwgODAsIDk1LCA4MywgNzUsIDg5LCA2NiwgNzksIDg4LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgODAsIDcyLCA2OSwgODIs
IDczLCA2NywgNjUsIDc2LCA5NSwgNzIsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDY3LCA4Mywg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDcxLCA2NiwgNjgs
IDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjUsIDY4LCA3MywgNjUsIDc4LCA2NywgNjks
IDc5LCA2NywgNjcsIDc2LCA4NSwgODMsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA3OSwgNjcs
IDY3LCA3NiwgODUsIDgzLCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCA3OCwgODUsIDc3LCA5NSwgNjYsIDc5LCA3OCwgNjksIDk1LCA3MywgNzgs
IDcwLCA3NiwgODUsIDY5LCA3OCwgNjcsIDY5LCA4MiwgODMsIDMyLCA0OCwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjYsIDExMSwgMTEwLCAxMDEsIDExNSwgODAs
IDEwMSwgMTE0LCA3NywgMTAxLCAxMTUsIDEwNCwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OCwgODUsIDc3LCA5NSwgNzcsIDc5LCA4MiwgODAsIDcy
LCA5NSwgNzMsIDc4LCA3MCwgNzYsIDg1LCA2OSwgNzgsIDY3LCA2OSwgODIsIDgzLCAzMiwgNDgs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDg2LCA3MywgNzEsIDc4
LCA2OSwgODQsIDg0LCA2OSwgNjYsIDc2LCA2OSwgNzgsIDY4LCA3NywgNzksIDY4LCA2OSwgNzcs
IDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDg5LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCA4MywgNjUsIDc3LCA4MCwgNzYsIDY5LCA4MiwgNTEsIDY4LCA3MSwgODIs
IDY5LCA2OSwgNzgsIDY4LCA2OSwgODAsIDg0LCA3MiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgODMsIDY1LCA3NywgODAsIDc2LCA2OSwgODIsIDUxLCA2OCwgNjYs
IDcxLCA4MiwgNzcsIDY1LCA4MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgODUsIDgzLCA2OSwgODAsIDcyLCA4OSwgODMsIDczLCA2NywgNjUsIDc2LCA3NiwgNzMs
IDcxLCA3MiwgODQsIDcwLCA2NSwgNzYsIDc2LCA3OSwgNzAsIDcwLCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4NCwgODcsIDc5LCA4MywgNzMsIDY4LCA2OSwgNjgs
IDc2LCA3MywgNzEsIDcyLCA4NCwgNzMsIDc4LCA3MSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgNjcsIDc2LCA2OSwgNjUsIDgyLCA2NywgNzksIDY1LCA4NCwgOTUs
IDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwg
ODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcs
IDc2LCA2OSwgNjUsIDgyLCA2NywgNzksIDY1LCA4NCwgOTUsIDY2LCA4NSwgNzcsIDgwLCA2OCwg
NzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDc2LCA2OSwgNjUsIDgyLCA2NywgNzksIDY1LCA4NCwg
OTUsIDg0LCA3MywgNzgsIDg0LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3
MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzgsIDczLCA4MywgNzksIDg0LCA4MiwgNzksIDgwLCA3
MywgNjcsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3
LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEw
MSwgMzIsIDY2LCA4MiwgNjgsIDcwLCA5NSwgODYsIDk1LCA3MiwgNjksIDczLCA3MSwgNzIsIDg0
LCA5NSwgNjcsIDc5LCA4MiwgODIsIDY5LCA3NiwgNjUsIDg0LCA2OSwgNjgsIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA4MywgOTUsIDY2LCA4MiwgNjgsIDcw
LCA5NSwgNjksIDc4LCA2OSwgODIsIDcxLCA4OSwgOTUsIDY3LCA3OSwgNzgsIDgzLCA2OSwgODIs
IDg2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAs
IDEwMSwgMzIsIDgzLCA3MiwgNjksIDY5LCA3OCwgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIs
IDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDgzLCA5NSwgODQsIDcyLCA3MywgNjcs
IDc1LCA3OCwgNjksIDgzLCA4MywgNjUsIDc4LCA2OCwgNzcsIDY1LCA4MywgNzUsIDk1LCA4NCwg
NjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAz
MiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY4LCA2OSwg
NjYsIDg1LCA3MSwgNzcsIDc5LCA2OCwgNjksIDMyLCA0OCwgMTAsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA3MiwgNjUsIDY4LCA2OSwgODIsIDk1LCA3OCwg
NjUsIDc3LCA2OSwgMzIsIDEwMiwgMTE0LCA5NywgMTAzLCAxMDksIDEwMSwgMTEwLCAxMTYsIDU4
LCAxMTIsIDk4LCAxMTQsIDEwLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcxLCA3Nywg
NjksIDc4LCA4NCwgOTUsIDY2LCA2OSwgNzEsIDczLCA3OCwgMTMsIDEwLCAxMTIsIDExNCwgMTAx
LCA5OSwgMTA1LCAxMTUsIDEwNSwgMTExLCAxMTAsIDMyLCAxMDQsIDEwNSwgMTAzLCAxMDQsIDEx
MiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzAsIDgyLCA3OSwgNzcsIDc2LCA3MywgNzgsIDY5LCA2
NSwgODIsIDgzLCA4MCwgNjUsIDY3LCA2OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3
LCAxMTYsIDQwLCAxMTUsIDExNiwgMTAwLCA0OSwgNTIsIDQ4LCA0NCwgOTksIDExMSwgMTA4LCAx
MTcsIDEwOSwgMTEwLCA5NSwgMTA5LCA5NywgMTA2LCAxMTEsIDExNCwgNDEsIDMyLCAxMTcsIDEx
MCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTEx
LCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ4LCA0NCwgMzIsIDk4
LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAx
MTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCA4MywgOTksIDEwMSwgMTEwLCAx
MDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwg
MTAxLCAxMTksIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDU5
LCAxMywgMTAsIDEyNSwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0
MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDksIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAx
MDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDExNywgMTEwLCAxMDUs
IDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDc3LCA5NywgMTE2LCAxMDEsIDExNCwgMTA1LCA5Nywg
MTA4LCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NSwg
MTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAs
IDExNiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MCwgMzIsIDExOCwgNzksIDExMiwgOTcsIDk5LCAxMDUsIDExNiwgMTIxLCA3MywgMTEwLCAxMDIs
IDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2OSwgMTA5
LCAxMDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwg
MTE2LCAxMDksIDk3LCAxMTIsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA3NywgMTA1LCA5OSwgMTE0LCAxMTEsIDgz
LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEs
IDExNCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MCwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
ODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgODMsIDEwNSwgMTIyLCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTgsIDY2LCAxMTcsIDEwOSwgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1
OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTcsIDEwOCwgOTgsIDEwMSwgMTAwLCAx
MTEsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYs
IDUyLCAzMiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzcsIDk3LCAxMTYsIDEx
NCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTEsIDExMiwg
OTcsIDk5LCAxMDUsIDExNiwgMTIxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUs
IDExOCwgMTAxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5
NywgMTE2LCA1MiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDksIDk3LCAxMTIsIDc3
LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAz
MiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwg
MTIxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2
LCA1MiwgMzIsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5Nywg
OTksIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNzcsIDk3LCAxMTYsIDEx
NCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5OCwgMTE3LCAx
MDksIDExMiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTAsIDMyLCAxMTgsIDg0LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDgzLCAx
MTIsIDk3LCA5OSwgMTAxLCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAx
MDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUyLCAzMiwgMTE4LCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNjcsIDExMSwg
MTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEsIDEx
MCwgMTE1LCAxMDUsIDExNiwgMTIxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3Nywg
MTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAx
MTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMTIsIDExMSwgMTA1LCAxMTAsIDExNiwgODMsIDEwNSwgMTIyLCAxMDEsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2OSwgMTA5LCAxMDUsIDExNSwgMTE1
LCAxMDUsIDExOCwgMTAxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUyLCAzMiwgMTE4LCA2OSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgs
IDY1LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY4LCAxMDEsIDk4LCAxMTcs
IDEwMywgNzcsIDExMSwgMTAwLCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMy
LCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODAsIDk3LCAx
MTQsIDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwg
NjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4MiwgMTAxLCAxMDIsIDEx
NCwgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcs
IDExNCwgNjcsIDExMSwgOTcsIDExNiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAx
MCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwg
OTcsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDEx
NiwgNjYsIDExNywgMTA5LCAxMTIsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDEx
MSwgOTcsIDExNiwgODQsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgODMsIDExMiwgOTcs
IDk5LCAxMDEsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcs
IDExNiwgNTIsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDY2
LCAxMTcsIDEwOSwgMTEyLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTEx
LCA5NywgMTE2LCA4NCwgMTA1LCAxMTAsIDExNiwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwg
NTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcs
IDExNCwgNjcsIDExMSwgOTcsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsIDExNiwg
NjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDEx
NiwgODQsIDEwNSwgMTEwLCAxMTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAs
IDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3
LCAxMTYsIDg0LCAxMDUsIDExMCwgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjUsIDExMCwgMTA1LCAxMTUsIDEx
MSwgMTE2LCAxMTQsIDExMSwgMTEyLCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAs
IDMyLCAxMTgsIDY1LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEsIDExMiwgMTIx
LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAz
MiwgOTcsIDExMCwgMTA1LCAxMTUsIDExMSwgMTE2LCAxMTQsIDExMSwgMTEyLCAxMjEsIDc3LCA5
NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwg
MTE4LCA4MywgMTA0LCAxMDEsIDEwMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4MywgMTA0LCAxMDEsIDEwMSwgMTEw
LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAz
MiwgMTE1LCAxMDQsIDEwMSwgMTAxLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDExNCwg
OTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAx
MTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMTQsIDk3LCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEw
LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDg0LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEs
IDExNSwgMTE1LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAx
MTYsIDUyLCAzMiwgMTE2LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEsIDExNSwgMTE1LCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwg
MzIsIDExOCwgODQsIDEwNCwgMTA1LCA5OSwgMTA3LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDgwLCA5
NywgMTE0LCA5NywgMTA5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2
OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY4LCAxMDUsIDExNSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwg
MTE4LCA4NCwgMTA1LCAxMTAsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExNywgOTgsIDgzLCAxMTcsIDExNCwg
MTAyLCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExNiwg
MTIxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQs
IDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDgsIDQ4LCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5
NywgMTA4LCA3NiwgNDksIDk1LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA0
OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAx
MDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcs
IDEwOCwgNzYsIDUwLCA5NSwgNTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgOTUs
IDQ5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQs
IDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDQ4LCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5
NywgMTA4LCA3NiwgNTAsIDQ5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4
LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDUwLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwg
MTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODksIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAx
MTQsIDEwNSwgOTksIDk3LCAxMDgsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OCwgODgs
IDk1LCA5MCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAx
MTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg5LCA4OSwgOTUsIDkwLCA5MCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEs
IDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgOTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4
OCwgODksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEw
NCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg5LCA5MCwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcs
IDEwOCwgOTAsIDg4LCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwg
MTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ5LCA0NCwgMzIs
IDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OSwgNDEsIDMy
LCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCA3NywgMTAxLCAxMTUsIDEw
NCwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOSwgMTExLCAx
MTQsIDEwOCwgMTAwLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4
LCAxMDUsIDExNSwgMTA1LCA5OCwgMTA1LCAxMDgsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywgMTAs
IDEyNSwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAx
MTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAx
MDUsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwg
MTE3LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2
MSwgMzIsIDQ5LCA0MSwgMzIsIDEwNSwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
OCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAx
MjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA0OCwgNDQs
IDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDksIDQx
LCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgMTE2LCAxMDEsIDEy
MCwgMTE2LCAxMTcsIDExNCwgMTAxLCA1MCwgNjgsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDEx
NCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDgzLCA5
NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwg
MTAxLCA1OSwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTA4LCA5NywgMTIxLCAxMTEsIDEx
NywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDgsIDQ0LCAzMiwgOTgsIDEw
NSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDUwLCA0MSwgMzIsIDExNywg
MTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNSwgOTcsIDEwOSwgMTEyLCAxMDgs
IDEwMSwgMTE0LCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEw
MSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEw
MSwgMTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA1OSwgMTAsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMDEs
IDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDEx
NCwgMTAwLCAxMDIsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDMyLCAxMTUsIDk3
LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNTAsIDY4LCA0MCwgMTAxLCAxMTAsIDExOCwgMTA1
LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA4
MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAx
MTQsIDEwMSwgNDQsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwg
MTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwg
MTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQxLCAxMywgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEw
OCwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0
MCwgMTE1LCA0NCwgOTksIDQxLCAzMiwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAx
LCA0MCwgMTE1LCA0NCwgOTksIDQxLCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDEx
NiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDUwLCA0NCwgMzIsIDk4LCAxMDUsIDEx
MCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAxMTcsIDExMCwg
MTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0
LCAxMDEsIDY3LCAxMTcsIDk4LCAxMDEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODQs
IDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDU5LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIs
IDMyLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwg
NjEsIDMyLCA1MCwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIs
IDYxLCAzMiwgNDksIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAz
MiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDMyLCAxMTQsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAx
MDEsIDExNCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNTksIDEwLCAzMiwgMzIs
IDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE0
LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5
LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDMyLCAxMTUsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDEx
NCwgNjcsIDExNywgOTgsIDEwMSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAx
LCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNDQsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEw
MSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDEx
NCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNDEsIDEzLCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMTUsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEs
IDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2LCAxMTEs
IDEwMCwgNDAsIDExNSwgNDQsIDk5LCA0NCwgMTA4LCA0MSwgMzIsIDExNiwgMTAxLCAxMjAsIDEx
NiwgMTE3LCAxMTQsIDEwMSwgNzYsIDExMSwgMTAwLCA0MCwgMTE1LCA0NCwgOTksIDQ0LCAxMDgs
IDQxLCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5
OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwgNTAsIDQxLCAzMiwgMTA1LCAx
MTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA4NSwgODYsIDg3LCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDEx
NSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDgwLCA3MywgNjEsIDUxLCA0
NiwgNDksIDUyLCA0OSwgNTMsIDU3LCA1MCwgNTQsIDUzLCA1MSwgNTMsIDU2LCA1NywgNTUsIDU3
LCA1MSwgNTAsIDUxLCA1NiwgNTIsIDU0LCA1MCwgNTQsIDUyLCA1MSwgNTEsIDU2LCA1MSwgNTAs
IDU1LCA1NywgNTMsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDY5LCAx
MTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAx
MTIsIDExNCwgMTExLCAxMjAsIDYxLCA1MCwgNDYsIDUwLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAx
MTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDcxLCA5NywgMTA5
LCAxMDksIDk3LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEs
IDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA2MSwgNDksIDQ2LCA0OCwgNDcsIDc2
LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgODAs
IDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA1OSwgMTMs
IDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDc2
LCAxMTcsIDEwOSwgMTA1LCAxMTAsIDk3LCAxMTAsIDk5LCAxMDEsIDY5LCAxMTAsIDk5LCAxMTEs
IDEwMCwgMTAxLCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDYxLCAxMTgsIDEwMSwgOTks
IDUxLCA0MCwgNDgsIDQ2LCA1MCwgNDksIDUwLCA1NCwgNDQsIDQ4LCA0NiwgNTUsIDQ5LCA1Mywg
NTAsIDQ0LCA0OCwgNDYsIDQ4LCA1NSwgNTAsIDUwLCA0MSwgNTksIDEzLCAxMCwgOTksIDExMSwg
MTEwLCAxMTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA2OSwgMTEyLCAx
MTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNjEsIDQ4LCA0NiwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0
OCwgNDksIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
MTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgMTIwLCA0MSwgMzIsIDk5
LCAxMDgsIDk3LCAxMDksIDExMiwgNDAsIDEyMCwgNDQsIDQ4LCA0NiwgNDgsIDQ0LCA0OSwgNDYs
IDQ4LCA0MSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDk3
LCA5OCwgMTE1LCA2OSwgMTEyLCAxMTUsIDQwLCAxMjAsIDQxLCAzMiwgOTcsIDk4LCAxMTUsIDQw
LCAxMjAsIDQxLCA0MywgNjksIDExMiwgMTE1LCAxMDUsIDEwOCwgMTExLCAxMTAsIDEzLCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMDksIDk3LCAxMjAsIDY5LCAx
MTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCAxMDksIDk3LCAxMjAsIDQwLCAxMjAsIDQ0LCA2OSwg
MTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNDEsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAx
MDEsIDY5LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIs
IDQwLCAxMjAsIDQ0LCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNDQsIDQ5LCA0
NiwgNDgsIDQxLCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMTYsIDExNCwgOTcsIDEx
MCwgMTE1LCAxMTIsIDExMSwgMTE1LCAxMDEsIDc3LCA5NywgMTE2LCA1MSwgNDAsIDEwOSwgOTcs
IDExNiwgNTEsIDMyLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAz
MiwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDQ4LCA2MSwgMTA1LCAx
MTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDEwNSwgNTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkx
LCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMTEsIDExNywgMTE2
LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNjEsIDEwOSwgOTcsIDExNiwgNTEsIDQwLCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4LCA0NiwgMTIwLCA0NCwgMTA1LCA0
OSwgNDYsIDEyMCwgNDQsIDEwNSwgNTAsIDQ2LCAxMjAsIDQxLCA0NCwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMSwgNDQsIDEwNSwgNDksIDQ2LCAxMjEsIDQ0
LCAxMDUsIDUwLCA0NiwgMTIxLCA0MSwgNDQsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAs
IDEwNSwgNDgsIDQ2LCAxMjIsIDQ0LCAxMDUsIDQ5LCA0NiwgMTIyLCA0NCwgMTA1LCA1MCwgNDYs
IDEyMiwgNDEsIDEzLCAxMCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0
LCAxMTAsIDMyLCAxMTEsIDExNywgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTks
IDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMDUsIDExMCwgMTE4
LCAxMDEsIDExNCwgMTE1LCAxMDEsIDc3LCA5NywgMTE2LCA1MSwgNDAsIDEwOSwgOTcsIDExNiwg
NTEsIDMyLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAzMiwgMTIz
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgNDgsIDQ4LCA2MSwgMTA1
LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA5MSwgNDgsIDkz
LCA0NCwgOTcsIDQ4LCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEy
MCwgOTEsIDQ4LCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA0OCwgNTAsIDYxLCAxMDUsIDExMCwg
NzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwgOTMsIDkxLCA1MCwgOTMsIDU5LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgNDksIDQ4LCA2MSwgMTA1LCAx
MTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDksIDkzLCA5MSwgNDgsIDkzLCA0
NCwgOTcsIDQ5LCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
OTEsIDQ5LCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA0OSwgNTAsIDYxLCAxMDUsIDExMCwgNzcs
IDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMsIDkxLCA1MCwgOTMsIDU5LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgNTAsIDQ4LCA2MSwgMTA1LCAxMTAs
IDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA5MSwgNDgsIDkzLCA0NCwg
OTcsIDUwLCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEs
IDUwLCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA1MCwgNTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3
LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkxLCA1MCwgOTMsIDU5LCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OCwgNDgsIDQ5LCA2MSwgOTcsIDUwLCA1MCwg
NDIsIDk3LCA0OSwgNDksIDQ1LCA5NywgNDksIDUwLCA0MiwgOTcsIDUwLCA0OSwgNTksIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk4LCA0OSwgNDksIDYxLCA0NSwgOTcsIDUw
LCA1MCwgNDIsIDk3LCA0OSwgNDgsIDQzLCA5NywgNDksIDUwLCA0MiwgOTcsIDUwLCA0OCwgNTks
IDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk4LCA1MCwgNDksIDYxLCA5Nywg
NTAsIDQ5LCA0MiwgOTcsIDQ5LCA0OCwgNDUsIDk3LCA0OSwgNDksIDQyLCA5NywgNTAsIDQ4LCA1
OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDEsIDExNiwgNjEs
IDk3LCA0OCwgNDgsIDQyLCA5OCwgNDgsIDQ5LCA0MywgOTcsIDQ4LCA0OSwgNDIsIDk4LCA0OSwg
NDksIDQzLCA5NywgNDgsIDUwLCA0MiwgOTgsIDUwLCA0OSwgNTksIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwOSwgOTcsIDExNiwgNTEsIDQwLCA5OCwgNDgsIDQ5
LCA0NCwgNDAsIDQ1LCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ4LCA0OSwgNDMsIDk3LCA0OCwgNTAs
IDQyLCA5NywgNTAsIDQ5LCA0MSwgNDQsIDQwLCA5NywgNDksIDUwLCA0MiwgOTcsIDQ4LCA0OSwg
NDUsIDk3LCA0OCwgNTAsIDQyLCA5NywgNDksIDQ5LCA0MSwgNDQsIDEzLCAxMCwgOTgsIDQ5LCA0
OSwgNDQsIDQwLCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ4LCA0OCwgNDUsIDk3LCA0OCwgNTAsIDQy
LCA5NywgNTAsIDQ4LCA0MSwgNDQsIDQwLCA0NSwgOTcsIDQ5LCA1MCwgNDIsIDk3LCA0OCwgNDgs
IDQzLCA5NywgNDgsIDUwLCA0MiwgOTcsIDQ5LCA0OCwgNDEsIDQ0LCAxMywgMTAsIDk4LCA1MCwg
NDksIDQ0LCA0MCwgNDUsIDk3LCA1MCwgNDksIDQyLCA5NywgNDgsIDQ4LCA0MywgOTcsIDQ4LCA0
OSwgNDIsIDk3LCA1MCwgNDgsIDQxLCA0NCwgNDAsIDk3LCA0OSwgNDksIDQyLCA5NywgNDgsIDQ4
LCA0NSwgOTcsIDQ4LCA0OSwgNDIsIDk3LCA0OSwgNDgsIDQxLCA0MSwgNDcsIDEwMCwgMTAxLCAx
MTYsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE2LCAx
MTEsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMTMsIDEw
LCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExMiwgMTEx
LCAxMTksIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwg
NDAsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEw
MSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA0
MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE2
LCAxMTEsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMTMsIDEwLCAx
MjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExMiwgMTExLCAx
MTksIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAs
IDcxLCA5NywgMTA5LCAxMDksIDk3LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgODAsIDEx
MSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA0MSwgNDEsIDU5
LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCAx
MTMsIDExNywgOTcsIDExNCwgMTAxLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEx
OCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwg
MTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDIsIDExOCwg
OTcsIDEwOCwgMTE3LCAxMDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTEyLCAxMTEsIDExOSwgNTMsIDQwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgMTEzLCA2MSwgMTE4LCA5NywgMTA4LCAxMTcs
IDEwMSwgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAx
MTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTUsIDExMywgNDIsIDExNSwgMTEzLCA0MiwgMTE4LCA5
NywgMTA4LCAxMTcsIDEwMSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMDMsIDEwMSwgMTE2LCA3NiwgMTE3LCAxMDksIDEwNSwgMTEwLCA5Nywg
MTEwLCA5OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwg
MTEwLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDk5
LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCA3NiwgMTE3LCAxMDksIDEwNSwgMTEwLCA5NywgMTEw
LCA5OSwgMTAxLCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgNjUsIDExMiwgMTEyLCAxMTQs
IDExMSwgMTIwLCA0MSwgNDQsIDQ4LCA0NiwgNDQsIDQ5LCA0NiwgNDEsIDU5LCAxMywgMTAsIDEy
NSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAzLCAxMDEsIDExNiwgODIs
IDk3LCAxMTAsIDEwMCwgNDAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUsIDEwMSwgMTAxLCAx
MDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMy
LCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDQwLCAxMTUsIDEwNSwgMTEwLCA0MCwgMTAwLCAxMTEs
IDExNiwgNDAsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDYsIDEyMCwgMTIxLCAzMiwgNDQsIDExOCwg
MTAxLCA5OSwgNTAsIDQwLCA0OSwgNTAsIDQ2LCA1NywgNTYsIDU3LCA1NiwgNDQsIDU1LCA1Niwg
NDYsIDUwLCA1MSwgNTEsIDQxLCA0MSwgNDEsIDQyLCA1MiwgNTEsIDU1LCA1MywgNTYsIDQ2LCA1
MywgNTIsIDUzLCA1MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDExNiwgMTA0LCAxMDEsIDExNCwgNDAsIDExOCwgMTAx
LCA5OSwgNTAsIDMyLCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQ0LCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDY1LCAxMDksIDEx
MSwgMTE3LCAxMTAsIDExNiwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDExNCwgOTcsIDExMCwgMTAwLCA2MSwgMTAzLCAxMDEsIDExNiwgODIsIDk3LCAx
MTAsIDEwMCwgNDAsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTE2LCAxMDQsIDEwMSwgMTE0LCA2MSwgMTA5
LCAxMDUsIDEyMCwgNDAsIDQ1LCAxMTgsIDk3LCAxMTQsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwg
NjUsIDEwOSwgMTExLCAxMTcsIDExMCwgMTE2LCA0NywgNTAsIDUzLCA1MywgNDYsIDQ4LCA0NCwg
MTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDY1LCAxMDksIDExMSwgMTE3LCAx
MTAsIDExNiwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQsIDExNCwgOTcsIDExMCwgMTAwLCA0
MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwMCwgMTA1
LCAxMTYsIDEwNCwgMTAxLCAxMTQsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCA5OSwgMTExLCAx
MTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAzLCA5
OCwgMTAwLCA3NywgOTcsIDEyMCwgODIsIDk3LCAxMTAsIDEwMywgMTAxLCA2MSwgNTAsIDUzLCA1
MywgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE2LCAxMTEsIDgy
LCA3MSwgNjYsIDY4LCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MDksIDk3LCAxMjAsIDgyLCA3MSwgNjYsIDYxLCAxMDksIDk3LCAxMjAsIDY5LCAxMTIsIDExNSwg
NDAsIDEwOSwgOTcsIDEyMCwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQsIDQ0
LCAxMDksIDk3LCAxMjAsIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTAzLCA0NCwg
OTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDk4LCA0MSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNjgsIDYxLCAxMDksIDk3LCAxMjAsIDQwLCAxMTQs
IDEwMywgOTgsIDEwMCwgNzcsIDk3LCAxMjAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNDcsIDEw
OSwgOTcsIDEyMCwgODIsIDcxLCA2NiwgNDQsIDQ5LCA0NiwgNDEsIDU5LCAxMywgMTAsIDY4LCA2
MSwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTAyLCAxMDgsIDExMSwgMTExLCAxMTQsIDQw
LCA2OCwgNDEsIDQ3LCA1MCwgNTMsIDUzLCA0NiwgNDgsIDQ0LCA0OCwgNDYsIDQ0LCA0OSwgNDYs
IDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDMsIDk4LCA2MSwg
OTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA5OCwgNDIsIDY4LCA1OSwgMTMs
IDEwLCAxMTQsIDEwMywgOTgsIDYxLCAxMTYsIDExMSwgNzEsIDk3LCAxMDksIDEwOSwgOTcsIDgz
LCAxMTIsIDk3LCA5OSwgMTAxLCA0MCwgMTE0LCAxMDMsIDk4LCA0MSwgNTksIDEzLCAxMCwgMTE0
LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTQs
IDEwMywgOTgsIDQ0LCA2OCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTAyLCAxMTQsIDExMSwgMTA5LCA4MiwgNzEsIDY2LCA2OCwgNDAsIDExOCwg
MTAxLCA5OSwgNTIsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwg
MTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywgOTgsIDYxLCAxMTYsIDExMSwgNzYsIDEw
NSwgMTEwLCAxMDEsIDk3LCAxMTQsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA0MCwgMTE0LCAxMDMs
IDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2
LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywgOTgs
IDQ3LCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDk3LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDY3LCA3MywgODAs
IDgyLCA3OSwgNjcsIDY1LCA3NiwgOTUsIDgwLCA3MywgNTAsIDMyLCA0OCwgNDYsIDQ5LCA1Mywg
NTcsIDQ5LCA1MywgNTIsIDU3LCA1MiwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDgyLCA2OSwgNjcsIDczLCA4MCwgODIsIDc5LCA2NywgNjUsIDc2LCA5NSwg
ODAsIDczLCAzMiwgNDgsIDQ2LCA1MSwgNDksIDU2LCA1MSwgNDgsIDU3LCA1NiwgNTYsIDU0LCA0
OSwgNTYsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3Nywg
NzMsIDc4LCA3MywgNzcsIDg1LCA3NywgODYsIDY1LCA4MiwgNzMsIDY1LCA3OCwgNjcsIDY5LCAz
MiwgNDgsIDQ2LCA0OCwgNDgsIDQ4LCA1MywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgOTksIDExMSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTYsIDgyLCAxMTEsIDExNywgMTAz
LCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgODQsIDExMSwgNjUsIDExOCwgMTAxLCAxMTQsIDk3
LCAxMDMsIDEwMSwgODMsIDEwOCwgMTExLCAxMTIsIDEwMSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0
MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIs
IDExNSwgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgNDAsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0
LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCA0MywgNzcsIDczLCA3OCwgNzMsIDc3LCA4NSwgNzcs
IDg2LCA2NSwgODIsIDczLCA2NSwgNzgsIDY3LCA2OSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDIsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAx
LCAxMDgsIDcxLCAxMTQsIDk3LCAxMjIsIDEwNSwgMTEwLCAxMDMsIDgyLCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDQ4LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0
OCwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDExNCwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDIsIDUwLCA1
MywgNDYsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwg
MzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1
NywgNDgsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTAz
LCAxMDEsIDExNiwgNjUsIDY1LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1
LCAxMTUsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg2LCAxMDEsIDk5LCAxMTYsIDEx
MSwgMTE0LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDQ4LCA0NiwgNDEsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgOTcsIDExMiwgMTEyLCAxMDgsIDEyMSwgNzMs
IDEwOSwgOTcsIDEwMywgMTAxLCA4MCwgMTE0LCAxMTEsIDk5LCAxMDEsIDExNSwgMTE1LCAxMDUs
IDExMCwgMTAzLCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExNCwgMTAxLCAxMTUsIDExNywg
MTA4LCAxMTYsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAx
MTYsIDQ2LCAxMTQsIDEwMywgOTgsIDYxLCAxMTYsIDExMSwgNzEsIDk3LCAxMDksIDEwOSwgOTcs
IDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwg
NDYsIDExNCwgMTAzLCA5OCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4
LCAxMTYsIDQ2LCAxMTQsIDEwMywgOTgsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5Nywg
MTE2LCAxMDEsIDQwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTE0LCAxMDMs
IDk4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEx
NCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTUs
IDExNiwgMTE0LCAxMTcsIDk5LCAxMTYsIDMyLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMs
IDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMTMsIDEwLCAxMjMs
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3
OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDU5LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwg
NjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgMTE2LCAxMTYsIDEwMSwgMTEwLCAxMTcsIDk3LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3NiwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDcyLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA1OSwgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA4NSwgMTEwLCA5
OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA1OSwgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgODYsIDEwMCwgMTExLCAxMTYsIDcyLCA1OSwgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwg
MTAxLCAxMTUsIDExNSwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAxMTIsIDExNCwgMTAx
LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDEx
MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4MCwgMTExLCAxMDUsIDEx
MCwgMTE2LCA2NSwgMTEwLCAxMDAsIDgzLCAxMTIsIDExMSwgMTE2LCA4MCwgMTE0LCAxMDEsIDc2
LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCA0
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgOTcs
IDExNiwgOTcsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgODYsIDQ0LCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgNzgsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgMTE0
LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3
LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAyLCAxMDIsIDEx
NSwgMTAxLCAxMTYsIDYxLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYsIDk3
LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1
LCAxMTEsIDExMCwgODcsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYs
IDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAs
IDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDYxLCAxMDAsIDExMSwg
MTE2LCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQ0LCAxMTQsIDEwMSwgMTE1
LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIsIDEw
MiwgMTE1LCAxMDEsIDExNiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4
LCAxMTYsIDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDYxLCAxMTUsIDExMywgMTE0LCAxMTYsIDQwLCAxMTQsIDEwMSwgMTE1
LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDEx
NSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAw
LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc2LCA2
MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE0LCAx
MDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwg
MTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAx
MTcsIDEwOCwgMTE2LCA0NiwgNzIsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEw
NSwgMTIyLCAxMDEsIDQwLCA4NiwgNDMsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2
LCA3NiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA4
NiwgMTAwLCAxMTEsIDExNiwgNzIsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2
LCAxMDEsIDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgODYsIDQ0LCAxMTQsIDEwMSwgMTE1LCAxMTcs
IDEwOCwgMTE2LCA0NiwgNzIsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3
LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgODUsIDExMCwgOTksIDEwOCwg
OTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNjEsIDEwMCwgMTExLCAxMTYsIDQwLCA3OCwgNDQsIDEx
NCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3NiwgNDEsIDU5LCAxMywgMTAsIDExNCwg
MTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDYxLCAx
MTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAsIDEx
NCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDg1
LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgs
IDExNiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgOTksIDEx
MSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA5NywgMTA4LCA4MCwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAx
MTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCA0MCwgMTE4LCAxMDEsIDk5LCA1
MiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ0LCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgODYsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgNzgsIDQxLCAz
MiwgMTIzLCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEw
NSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAx
MDgsIDExNiwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDEw
OCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEw
MSwgNjEsIDEwOCwgMTAxLCAxMTAsIDEwMywgMTE2LCAxMDQsIDQwLCA0NSwgMTA4LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDY4LCA5NywgMTE2LCA5NywgNDYsIDEyMCwgMTIxLCAxMjIsIDQxLCA1OSwg
MTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYsIDYxLCAxMTAsIDEx
MSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCA0NSwgMTA4LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDY4LCA5NywgMTE2LCA5NywgNDYsIDEyMCwgMTIxLCAxMjIsIDQxLCA1OSwg
MTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzIsIDYxLCAxMTAsIDEx
MSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCA4NiwgNDMsIDExNCwgMTAx
LCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3NiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAx
MTUsIDExNywgMTA4LCAxMTYsIDQ2LCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDYxLCAxMTUsIDk3
LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgODYs
IDQ0LCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzIsIDQxLCA0MSwgNTksIDEz
LCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2
LCA3NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNjEsIDEwMCwg
MTExLCAxMTYsIDQwLCA3OCwgNDQsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3
NiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwg
MTAwLCAxMTEsIDExNiwgNzYsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAx
MDEsIDY5LCAxMTIsIDExNSwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3
OCwgMTAwLCAxMTEsIDExNiwgNzYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAx
LCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwg
MTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEx
MiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAx
MTAsIDEwMiwgMTExLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDcyLCAx
MDEsIDEwOSwgMTA1LCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgODAsIDExNCwg
MTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIs
IDExMSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwg
NjgsIDk3LCAxMTYsIDk3LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDg2LCA0NCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDc4LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3
NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwg
MzIsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAx
MTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDYxLCAxMDAsIDEx
MSwgMTE2LCA0MCwgNzgsIDQ0LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYs
IDk3LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDEsIDQyLCA0OCwgNDYsIDUzLCA0MywgNDgsIDQ2LCA1
MywgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAs
IDExMSwgMTE2LCA3NiwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwg
NjksIDExMiwgMTE1LCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAx
MDAsIDExMSwgMTE2LCA3NiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4
LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAx
MDksIDExMiwgMTAxLCAxMDAsIDYxLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0Niwg
NzgsIDEwMCwgMTExLCAxMTYsIDc2LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDEx
NCwgMTEwLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNTksIDEzLCAxMCwgMTI1
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwg
MTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDc2LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDk1LCA4
MywgMTE2LCA5NywgMTEwLCAxMDAsIDk3LCAxMTQsIDEwMCwgNDAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2
LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgOTcsIDExMCwgMTAzLCAxMDEs
IDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAz
MiwgMTA5LCA5NywgMTIwLCA0MCwgNDgsIDQ2LCA0NCwgNDksIDQ2LCA0OCwgNDUsIDEwOCwgMTAx
LCAxMTAsIDEwMywgMTE2LCAxMDQsIDQwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEw
MiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0MSwgNDcsIDExNCwgOTcsIDExMCwgMTAzLCAxMDEsIDQx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5
LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDEx
MCwgOTksIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTEx
LCAxMDIsIDEwMiwgOTUsIDgwLCAxMDQsIDEyMSwgMTE1LCAxMDUsIDk5LCA5NywgMTA4LCA0MCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwg
MTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAx
MDEsIDEwMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0
LCAxMTAsIDMyLCA0OSwgNDYsIDQ4LCA0NywgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQw
LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAx
MjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEy
LCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUs
IDcxLCA3NiwgODQsIDcwLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1
LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMs
IDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMDUsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE1LCAxMDEsIDgzLCAxMTMsIDExNywgOTcs
IDExNCwgMTAxLCAxMDAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDcwLCA5NywgMTA4LCAxMDgs
IDExMSwgMTAyLCAxMDIsIDYxLCA0OSwgNDYsIDQ4LCA0NywgMTA5LCA5NywgMTIwLCA2OSwgMTEy
LCAxMTUsIDQwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQxLCA1OSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAyLCA5NywgOTksIDExNiwgMTEx
LCAxMTQsIDYxLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQyLCAxMDUs
IDExMCwgMTE4LCAxMDEsIDExNCwgMTE1LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAx
LCAxMDAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAsIDExNywgOTcsIDExNiwgMTA1LCAx
MTEsIDExMCwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDQ5
LCA0NiwgNDgsIDQ1LCAxMDIsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwgNDIsIDEwMiwgOTcsIDk5
LCAxMTYsIDExMSwgMTE0LCA0MSwgNTksIDEzLCAxMCwgOTcsIDExNiwgMTE2LCAxMDEsIDExMCwg
MTE3LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA0MiwgNjEsIDk3LCAxMTYsIDExNiwgMTAxLCAx
MTAsIDExNywgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTA4LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3MCwgOTcs
IDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA0MiwgNjEsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAs
IDExNywgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUs
IDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwg
NTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwg
MTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAs
IDk5LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwg
MTAyLCAxMDIsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAx
MTYsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAx
MTAsIDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQ0LCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCA5NywgMTEwLCAxMDMsIDEwMSwgNDQsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDUsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE1LCAxMDEsIDgz
LCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNDEs
IDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5
OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAx
MTAsIDk5LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDEx
MSwgMTAyLCAxMDIsIDk1LCA4MCwgMTA0LCAxMjEsIDExNSwgMTA1LCA5OSwgOTcsIDEwOCwgNDAs
IDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTks
IDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEy
NSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIs
IDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA5NywgMTA4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEs
IDEwMiwgMTAyLCA5NSwgODMsIDExNiwgOTcsIDExMCwgMTAwLCA5NywgMTE0LCAxMDAsIDQwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDEx
NCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMTUsIDcyLCA5NywgMTA4LCAx
MDIsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTAxLCAxMjAsIDExMiwgMTExLCAxMTAsIDEwMSwgMTEwLCAxMTYsIDQxLCAxMywgMTAsIDEy
MywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAyLCA5NywgMTA4LCAxMDgs
IDExMSwgMTAyLCAxMDIsIDYxLCA0OCwgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTE1LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA2MSwg
MTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgNDUsIDEw
OCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNDQsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
ODQsIDExMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwg
MTE0LCA4NywgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMDUsIDEwMiwgMzIsIDQwLCA5OSwgMTExLCAx
MTUsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDYyLCA2MSwgOTksIDExMSwgMTE1LCA3MiwgOTcs
IDEwOCwgMTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAx
MCwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDYxLCAxMDksIDk3LCAxMjAsIDQw
LCA0OCwgNDYsIDQ0LCAxMTIsIDExMSwgMTE5LCA0MCwgOTksIDExMSwgMTE1LCA2NSwgMTEwLCAx
MDMsIDEwOCwgMTAxLCA0NCwgMTAxLCAxMjAsIDExMiwgMTExLCAxMTAsIDEwMSwgMTEwLCAxMTYs
IDQxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0
LCAxMTAsIDMyLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNTksIDEzLCAxMCwg
MTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDEx
MiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDk3LCAxMDgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDEx
MSwgMTAyLCAxMDIsIDk1LCA4MCwgMTA0LCAxMjEsIDExNSwgMTA1LCA5OSwgOTcsIDEwOCwgNDAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwg
MTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTExLCA3
NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTAxLCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0
NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDExNSwgNzIsIDk3LCAxMDgs
IDEwMiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDk5
LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA3
LCA3NywgMTA1LCAxMTAsIDExNywgMTE1LCA3NiwgMTExLCAxMDMsIDUwLCA2NywgMTExLCAxMTAs
IDEwMSwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1
LCAxMDUsIDExNiwgMTIxLCA4MiwgOTcsIDExNiwgMTA1LCAxMTEsIDYxLCA1NCwgNDYsIDU0LCA1
MiwgNTEsIDU2LCA1MywgNTQsIDQ5LCA1NiwgNTcsIDU1LCA1NSwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDExMCwgOTksIDEwMSwgMTEwLCAxMTYsIDEx
NCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzUsIDk3LCAxMTIsIDExMiwgOTcsIDYxLCAxMDcs
IDc3LCAxMDUsIDExMCwgMTE3LCAxMTUsIDc2LCAxMTEsIDEwMywgNTAsIDY3LCAxMTEsIDExMCwg
MTAxLCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUs
IDEwNSwgMTE2LCAxMjEsIDgyLCA5NywgMTE2LCAxMDUsIDExMSwgNDcsIDQwLCA0OSwgNDYsIDQ4
LCA0NSwgOTksIDExMSwgMTE1LCA3MiwgOTcsIDEwOCwgMTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwg
MTAxLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMs
IDExMiwgMTE0LCAxMDEsIDk3LCAxMDAsIDgzLCA3MSwgNjEsIDExOCwgMTAxLCA5OSwgNTIsIDQw
LCA0NSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA0MiwgOTksIDExMSwgMTEwLCA5OSwgMTAxLCAxMTAsIDExNiwgMTE0
LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA3NSwgOTcsIDExMiwgMTEyLCA5NywgNDQsIDQ1LCA5
OSwgMTExLCAxMTAsIDk5LCAxMDEsIDExMCwgMTE2LCAxMTQsIDk3LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDc1LCA5NywgMTEyLCAxMTIsIDk3LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA2MSwgMTAxLCAx
MjAsIDExMiwgNTAsIDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgNDAs
IDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQs
IDQ5LCA0NiwgNDgsIDQxLCA0NCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDEx
NCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgMTEyLCAxMTQsIDEwMSwgOTcsIDEw
MCwgODMsIDcxLCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAx
MTAsIDMyLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNTksIDEzLCAxMCwgMTI1
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwg
MTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDk3LCAxMDgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwg
MTAyLCAxMDIsIDk1LCA3MSwgNzYsIDg0LCA3MCwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDExNCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2
NywgMTAxLCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA4
MywgOTksIDk3LCAxMDgsIDEwMSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNzksIDEwMiwgMTAy
LCAxMTUsIDEwMSwgMTE2LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDk5LCAxMDAsIDYxLCAxMDAsIDExMSwgMTE2LCA0MCwgNDUsIDEwOCwgMTA1
LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgNDQsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDEx
MSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4
NywgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDIsIDk3LCAx
MDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAx
MTYsIDEwMSwgNDAsIDk5LCAxMDAsIDQyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjUsIDEx
MCwgMTAzLCAxMDgsIDEwMSwgODMsIDk5LCA5NywgMTA4LCAxMDEsIDQzLCAxMDgsIDEwNSwgMTAz
LCAxMDQsIDExNiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNzksIDEwMiwgMTAyLCAxMTUsIDEw
MSwgMTE2LCA0MSwgNTksIDEzLCAxMCwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIs
IDQyLCA2MSwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDU5LCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAx
MDIsIDEwMiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE0LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDk3LCAxMDgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYs
IDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMTQsIDEw
MSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA5OSwgMTExLCAxMTUsIDcyLCA5NywgMTA4LCAxMDIsIDY1LCAxMTAsIDEwMywg
MTA4LCAxMDEsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAxLCAxMjAsIDExMiwg
MTExLCAxMTAsIDEwMSwgMTEwLCAxMTYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDgzLCA5OSwg
OTcsIDEwOCwgMTAxLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAx
MDMsIDEwNCwgMTE2LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA3OSwgMTAyLCAxMDIsIDExNSwg
MTAxLCAxMTYsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDEx
NCwgMTEwLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDEx
NCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5NywgMTA4LCA3NiwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA5NSwgODAsIDEwNCwgMTIx
LCAxMTUsIDEwNSwgOTksIDk3LCAxMDgsIDQwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgs
IDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMDAsIDEwNSwgMTE0
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQ0LCA5OSwgMTExLCAxMTUs
IDcyLCA5NywgMTA4LCAxMDIsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQxLCA1OSwgMTMsIDEw
LCAxMjUsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3MCwg
ODIsIDY5LCA4MywgNzgsIDY5LCA3NiwgOTUsIDc3LCA2NSwgODgsIDczLCA3NywgODUsIDc3LCA5
NSwgNzksIDc4LCA5NSwgODIsIDc5LCA4NSwgNzEsIDcyLCAzMiwgNDgsIDQ2LCA1MCwgNTMsIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMywgMTAxLCAxMTYsIDY5LCAxMTAsIDEwMSwg
MTE0LCAxMDMsIDEyMSwgNjcsIDExMSwgMTEwLCAxMTUsIDEwMSwgMTE0LCAxMTgsIDk3LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDQwLCA5OSwgMTExLCAx
MTAsIDExNSwgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNSwgMTEyLCAxMDEsIDk5
LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEw
OSwgMTAxLCAxMTAsIDExNiwgODIsIDQ4LCA0NCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAs
IDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDQxLCAzMiwgMTIzLCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA0OSwgNDYsIDQ4LCA0MywgMTE1
LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0
LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgsIDQyLCA0MCwgNDksIDQ2LCA0
OCwgNDcsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwg
MTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNDYsIDEyMSwgNDUsIDQ5LCA0NiwgNDgsIDQxLCA1OSwg
MTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMywgMTAxLCAxMTYs
IDY2LCA4MiwgNjgsIDcwLCA3NiwgMTExLCAxMTEsIDEwNywgMTE3LCAxMTIsIDQwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDExMiwgMTAxLCAxMTQsIDk5LCAxMDEsIDExMiwgMTE2LCAxMTcs
IDk3LCAxMDgsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEs
IDMyLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDg1LCA4NiwgNjEsIDExOCwg
MTAxLCA5OSwgNTAsIDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDQ0LCAxMTIsIDEwMSwgMTE0
LCA5OSwgMTAxLCAxMTIsIDExNiwgMTE3LCA5NywgMTA4LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0
LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAz
MiwgOTgsIDExNCwgMTAwLCAxMDIsIDc2LCAxMTEsIDExMSwgMTA3LCAxMTcsIDExMiwgNjEsIDEx
NiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNDAsIDEwMSwgMTEwLCAxMTgsIDEwNSwg
MTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgODMs
IDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNDQsIDg1LCA4NiwgNDEsIDU5LCAxMywgMTAs
IDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OCwgMTE0LCAxMDAsIDEwMiwgNzYs
IDExMSwgMTExLCAxMDcsIDExNywgMTEyLCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAx
MjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMywgMTAxLCAxMTYsIDgyLCAxMDEs
IDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDcwLCAxMTQsIDExMSwg
MTA5LCA2NiwgODIsIDY4LCA3MCwgNzYsIDExMSwgMTExLCAxMDcsIDExNywgMTEyLCA0MCwgOTks
IDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTUsIDExMiwg
MTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwg
MTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA0OCwgNDQsIDk5LCAxMTEsIDExMCwgMTE1LCAx
MTYsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDEx
MSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA0MSwgMzIsIDEy
MywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMDksIDEwNSwgMTIwLCA0MCwgMTAxLCAx
MTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQs
IDEwMCwgMTAyLCA0NiwgMTIwLCAxMjAsIDEyMCwgNDQsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0
LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNDYsIDEy
MSwgMTIxLCAxMjEsIDQ0LCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5
LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA0
OCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAx
MCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDMsIDEwMSwgMTE2LCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3MCwgMTE0LCAx
MTEsIDEwOSwgNjUsIDExMCwgOTcsIDEwOCwgMTIxLCAxMTYsIDEwNSwgOTksIDk3LCAxMDgsIDY2
LCA4MiwgNjgsIDcwLCA3NiwgMTExLCAxMTEsIDEwNywgMTE3LCAxMTIsIDk1LCA3NCwgMTExLCAx
MTAsIDEwMSwgMTE1LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDg2LCAxMDAsIDEx
MSwgMTE2LCA3OCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQ0LCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEs
IDU3LCA0OCwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDEwOSwgMTExLCAx
MTEsIDExNiwgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE5LCAxMDEsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgNjEsIDEwOSwgMTA1LCAxMjAsIDQwLCA3MCwgODIsIDY5LCA4MywgNzgsIDY5LCA3NiwgOTUs
IDc3LCA2NSwgODgsIDczLCA3NywgODUsIDc3LCA5NSwgNzksIDc4LCA5NSwgODIsIDc5LCA4NSwg
NzEsIDcyLCA0NCwgNDksIDQ2LCA0OCwgNDQsIDExNSwgMTA5LCAxMTEsIDExMSwgMTE2LCAxMDQs
IDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwg
OTksIDEwMSwgNDgsIDQzLCAxMTksIDEwMSwgMTA1LCAxMDMsIDEwNCwgMTE2LCA0MiwgNDAsIDEx
NCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgs
IDQ1LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwg
NDgsIDQxLCA0MiwgMTEyLCAxMTEsIDExOSwgNTMsIDQwLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0
LCA5NywgMTE2LCAxMDEsIDQwLCA0OSwgNDYsIDQ4LCA0NSwgODYsIDEwMCwgMTExLCAxMTYsIDc4
LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTAyLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA4MywgOTksIDEwNCwgMTA4LCAxMDUs
IDk5LCAxMDcsIDcxLCA3MSwgODgsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgODYs
IDEwMCwgMTExLCAxMTYsIDcyLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDQsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwg
OTksIDEwMSwgNTcsIDQ4LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA0OCwgNDMsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgOTcsIDExMCwgOTksIDEwMSwgNTcsIDQ4LCA0NSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0MSwgNDIsIDExMiwgMTExLCAxMTksIDUz
LCA0MCwgNDksIDQ2LCA0OCwgNDUsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDEsIDU5LCAxMywg
MTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAyLCAxMTQsIDEw
MSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA4MywgOTksIDEwNCwgMTA4LCAxMDUsIDk5LCAxMDcsIDcx
LCA3MSwgODgsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgODYsIDEwMCwgMTExLCAx
MTYsIDcyLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDQsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwg
OTksIDEwMSwgNTcsIDQ4LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA0OCwgNDMsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgOTcsIDExMCwgOTksIDEwMSwgNTcsIDQ4LCA0NSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0MSwgNDIsIDExMiwgMTExLCAxMTksIDUz
LCA0MCwgNDksIDQ2LCA0OCwgNDUsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDEsIDU5LCAxMywg
MTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTEwLCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCA2OCwgMTA1LCAxMTUsIDExNiwgMTE0LCAxMDUsIDk4LCAxMTcsIDEx
NiwgMTA1LCAxMTEsIDExMCwgNzAsIDExNywgMTEwLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5
NSwgODQsIDExNCwgMTExLCAxMTksIDk4LCAxMTQsIDEwNSwgMTAwLCAxMDMsIDEwMSwgODIsIDEw
MSwgMTA1LCAxMTYsIDEyMiwgNzEsIDcxLCA4OCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgNzIsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgNTAsIDYxLCAxMTUsIDExMywgMTE3LCA5Nywg
MTE0LCAxMDEsIDQwLCA5NywgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA0MSwgNTksIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgNjEsIDc4LCAxMDAsIDExMSwgMTE2LCA3
MiwgNDIsIDc4LCAxMDAsIDExMSwgMTE2LCA3MiwgNDIsIDQwLCA5NywgNTAsIDQ1LCA0OSwgNDYs
IDQ4LCA0MSwgNDMsIDQ5LCA0NiwgNDgsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCA5NywgNTAsIDQ3LCA0MCwgODAsIDczLCA0MiwgMTAwLCA0MiwgMTAwLCA0
MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MTUsIDEwOSwgMTA1LCAxMTYsIDEwNCwgODYsIDEwNSwgMTE1LCAxMDUsIDk4LCAxMDUsIDEwOCwg
MTA1LCAxMTYsIDEyMSwgOTUsIDcxLCA3MSwgODgsIDY3LCAxMTEsIDExNCwgMTE0LCAxMDEsIDEw
OCwgOTcsIDExNiwgMTAxLCAxMDAsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgs
IDEwMCwgMTExLCAxMTYsIDc2LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAx
MDAsIDExMSwgMTE2LCA4NiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgMTA4
LCAxMTIsIDEwNCwgOTcsIDcxLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgOTcsIDUwLCA2MSwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNDIsIDk3
LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCA3MSwgNzEsIDg4LCA4NiwgNjEsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDIsIDEx
NSwgMTEzLCAxMTQsIDExNiwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDIsIDQwLCA3OCwg
MTAwLCAxMTEsIDExNiwgODYsIDQ1LCA5NywgNTAsIDQyLCA3OCwgMTAwLCAxMTEsIDExNiwgODYs
IDQxLCA0MywgOTcsIDUwLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDcxLCA3MSwgODgsIDc2LCA2MSwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0MiwgMTE1LCAx
MTMsIDExNCwgMTE2LCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0MiwgNDAsIDc4LCAxMDAs
IDExMSwgMTE2LCA3NiwgNDUsIDk3LCA1MCwgNDIsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDEs
IDQzLCA5NywgNTAsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgNDgsIDQ2LCA1MywgNDcsIDQwLCA3MSwgNzEsIDg4LCA4NiwgNDMsIDcxLCA3MSwgODgs
IDc2LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDY2LCA4MiwgNjgsIDcwLCA5
NSwgNjYsIDExNywgMTE0LCAxMDgsIDEwMSwgMTIxLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgODYsIDEwMCwgMTExLCAxMTYsIDcyLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCAzMiwgMTIz
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIs
IDExNywgMTE1LCAxMDEsIDcwLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA3OCwgODYs
IDYxLCAxMTIsIDExMSwgMTE5LCA1MywgNDAsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAx
MTYsIDEwMSwgNjksIDExMiwgMTE1LCA0MCwgNDksIDQ2LCA0OCwgNDUsIDc4LCAxMDAsIDExMSwg
MTE2LCA3NiwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEw
LCAxMDEsIDEwOCwgNzgsIDc2LCA2MSwgMTEyLCAxMTEsIDExOSwgNTMsIDQwLCAxMTUsIDk3LCAx
MTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAsIDQ5LCA0NiwgNDgs
IDQ1LCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAs
IDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDU3LCA0OCwgNjEsIDQ4LCA0NiwgNTMsIDQz
LCA1MCwgNDYsIDQ4LCA0MiwgODYsIDEwMCwgMTExLCAxMTYsIDcyLCA0MiwgODYsIDEwMCwgMTEx
LCAxMTYsIDcyLCA0MiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDEx
NSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMiwgMTE0LCAxMDEs
IDExNSwgMTEwLCAxMDEsIDEwOCwgMzIsIDYxLCAxMywgMTAsIDQwLCA0OSwgNDYsIDQ4LCA0Mywg
NDAsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUs
IDExMCwgMTAxLCAxMDgsIDU3LCA0OCwgNDUsIDQ5LCA0NiwgNDgsIDQxLCA0MiwgMTAwLCAxMDUs
IDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEw
OCwgNzgsIDc2LCA0MSwgMzIsIDQyLCAxMywgMTAsIDQwLCA0OSwgNDYsIDQ4LCA0MywgNDAsIDEw
MCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUsIDExMCwg
MTAxLCAxMDgsIDU3LCA0OCwgNDUsIDQ5LCA0NiwgNDgsIDQxLCA0MiwgMTAwLCAxMDUsIDEwMiwg
MTAyLCAxMTcsIDExNSwgMTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNzgs
IDg2LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEw
MiwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNDcsIDgwLCA3MywgNTksIDEzLCAxMCwg
MTI1LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDc2
LCA2OSwgNjUsIDgyLCA2NywgNzksIDY1LCA4NCwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQs
IDY1LCA3OCwgNjcsIDY5LCA1NywgNDgsIDMyLCA0OSwgNDYsIDQ4LCAxMywgMTAsIDExNSwgMTE2
LCAxMTQsIDExNywgOTksIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDEx
MCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNTksIDEzLCAx
MCwgMTI1LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDEwMCwg
MTA2LCAxMTcsIDExNSwgMTE2LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1
LCAxMTUsIDcwLCAxMTQsIDExMSwgMTA5LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA4MCwgMTE0
LCAxMTEsIDExMiwgMTAxLCAxMTQsIDExNiwgMTA1LCAxMDEsIDExNSwgNDAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwg
MTE1LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwg
MTE2LCA4MiwgOTcsIDEwMCwgMTA1LCAxMTcsIDExNSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAx
MTAsIDk5LCAxMDEsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEw
LCAxMDEsIDExNSwgMTE1LCA2MSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDgyLCA5NywgMTAw
LCAxMDUsIDExNywgMTE1LCA0NywgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDEx
NSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTE2LCAxMTEsIDExNiwgOTcsIDEwOCwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwg
MTEwLCAxMDEsIDExNSwgMTE1LCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwg
MTAxLCA0MCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQs
IDExMCwgMTAxLCAxMTUsIDExNSwgNDMsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEw
MSwgMTE1LCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTE2LCAxMTEsIDExNiwgOTcsIDEwOCwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEw
LCAxMDEsIDExNSwgMTE1LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA3MiwgMTAxLCAxMDksIDEw
NSwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDY4LCAxMDUsIDEwMiwgMTAyLCAx
MTcsIDExNSwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA0MCwg
MTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMs
IDExMCwgMTAyLCAxMTEsIDMyLCAxMDUsIDExMCwgMTAyLCAxMTEsIDQ0LCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAzLCAxMTQsIDExMSwgMTE3LCAxMTAsIDEwMCwg
NjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDEx
NiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwOSwgMTA1LCAxMjAsIDQwLCAxMDMsIDExNCwgMTExLCAx
MTcsIDExMCwgMTAwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwgMTA4LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAxMDUsIDExMCwgMTAyLCAxMTEs
IDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2
OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwg
MTA1LCAxMTAsIDEwMywgNDAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYs
IDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgMTA1LCAxMTAsIDEwMiwgMTEx
LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2Nywg
MTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA4NCwgMTAxLCAx
MTQsIDEwOSwgNjEsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNjYsIDgyLCA2
OCwgNzAsIDk1LCA2NiwgMTE3LCAxMTQsIDEwOCwgMTAxLCAxMjEsIDQwLCAxMDUsIDExMCwgMTAy
LCAxMTEsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQ0LCAxMDUsIDExMCwgMTAyLCAxMTEs
IDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDQ0LCAxMDUsIDExMCwgMTAyLCAxMTEsIDQ2LCA4
NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQ0LCAxMDUsIDExMCwgMTAyLCAxMTEsIDQ2LCAxMTQsIDEx
MSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE0
LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAx
MTUsIDEwMSwgODQsIDEwMSwgMTE0LCAxMDksIDQyLCAxMDUsIDExMCwgMTAyLCAxMTEsIDQ2LCA5
NywgMTE2LCAxMTYsIDEwMSwgMTEwLCAxMTcsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQyLCAx
MDUsIDExMCwgMTAyLCAxMTEsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQyLCAxMDgsIDEw
NSwgMTAzLCAxMDQsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTI1
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAx
MTYsIDEwMSwgODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
ODQsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcs
IDExNSwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA4NSwgODYs
IDQwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwg
MTAxLCA4MCwgMTE0LCAxMTEsIDEwNiwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUy
LCAzMiwgMTE1LCAxMTYsIDExNCwgMTEzLCA2MSwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDEx
NCwgMTAxLCA4MCwgMTE0LCAxMTEsIDEwNiwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTgs
IDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA0NCwgNDksIDQ2LCA0
OCwgNDEsIDU5LCAxMywgMTAsIDExNSwgMTE2LCAxMTQsIDExMywgNDcsIDYxLCAxMTUsIDExNiwg
MTE0LCAxMTMsIDQ2LCAxMTksIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAx
MTAsIDMyLCAxMTUsIDExNiwgMTE0LCAxMTMsIDQ2LCAxMjAsIDEyMSwgNTksIDEzLCAxMCwgMTI1
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDMsIDEwMSwgMTE2LCA3Niwg
MTExLCAxMDAsIDcwLCAxMTQsIDExMSwgMTA5LCA2NSwgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA0
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTcsIDk4LCAxMDEsIDc3LCA5Nywg
MTEyLCA2OCwgMTA1LCAxMDksIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTExLCAxMTAsIDgwLCAxMDUs
IDEyMCwgMTAxLCAxMDgsIDExNSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDks
IDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwg
MTE4LCAxMDEsIDExNCwgOTcsIDEwMywgMTAxLCA4MywgMTA4LCAxMTEsIDExMiwgMTAxLCA0MSwg
MzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA5LCAxMDUsIDk5
LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDExOCwgMTAx
LCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwgMTExLCAxMTIsIDEwMSwgODQsIDEwMSwgMTIw
LCAxMDEsIDEwOCwgMTE1LCA2MSwgOTksIDExNywgOTgsIDEwMSwgNzcsIDk3LCAxMTIsIDY4LCAx
MDUsIDEwOSwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTEsIDExMCwgODAsIDEwNSwgMTIwLCAxMDEs
IDEwOCwgMTE1LCA0MiwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAy
LCA5NywgOTksIDEwMSwgNjUsIDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwg
MTExLCAxMTIsIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEw
OCwgMTExLCAxMDAsIDYxLCAxMDgsIDExMSwgMTAzLCA1MCwgNDAsIDEwOSwgMTA1LCA5OSwgMTE0
LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMTgsIDEwMSwgMTE0
LCA5NywgMTAzLCAxMDEsIDgzLCAxMDgsIDExMSwgMTEyLCAxMDEsIDg0LCAxMDEsIDEyMCwgMTAx
LCAxMDgsIDExNSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAs
IDMyLCAxMDgsIDExMSwgMTAwLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDEwMywgMTAxLCAxMTYsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0
LCA3NiwgMTExLCAxMDAsIDcwLCAxMTQsIDExMSwgMTA5LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0
LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTks
IDExNywgOTgsIDEwMSwgNzcsIDk3LCAxMTIsIDY4LCAxMDUsIDEwOSwgMTAxLCAxMTAsIDExNSwg
MTA1LCAxMTEsIDExMCwgODAsIDEwNSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA0NCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1
LCAxMTUsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MDgsIDExMSwgMTAwLCA2MSwgMTA4LCAxMTEsIDEwMywgNTAsIDQwLCA5OSwgMTE3LCA5OCwgMTAx
LCA3NywgOTcsIDExMiwgNjgsIDEwNSwgMTA5LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExMSwgMTEw
LCA4MCwgMTA1LCAxMjAsIDEwMSwgMTA4LCAxMTUsIDQxLCA0MiwgMTE0LCAxMTEsIDExNywgMTAz
LCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3
LCAxMTQsIDExMCwgMzIsIDEwOCwgMTExLCAxMDAsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwg
MTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAx
MDEsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDQwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzks
IDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNDQsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3
LCAxMDksIDExMiwgMTAxLCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMTYsIDEwMSwgMTA5LCAxMTIsIDYxLCA3OCwgMTAwLCAxMTEsIDExNiwg
ODYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDQzLCA5NywgMTA5
LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUs
IDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwg
MTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgMTE1LCAxMTMsIDExNywg
OTcsIDExNCwgMTAxLCA0MCwgMTE2LCAxMDEsIDEwOSwgMTEyLCA0MSwgNDUsIDQ5LCA0NiwgNDgs
IDQzLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDEx
NywgMTE1LCAxMDUsIDExMSwgMTEwLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAs
IDEwOSwgMTAxLCAxMTAsIDExNiwgNzIsIDExMSwgMTE0LCAxMDUsIDEyMiwgMTExLCAxMTAsIDc5
LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDQwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
MCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDQwLCAxMTgsIDEwNSwg
MTAxLCAxMTksIDQ0LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCA1OSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE2LCAxMDEsIDEwOSwgMTEyLCA2MSwgMTE1
LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgNDksIDQ2LCA0OCwgNDMsIDQ5
LCA0NiwgNDksIDQyLCAxMDAsIDExMSwgMTE2LCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEx
NSwgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgNDAsIDExNiwgMTAxLCAxMDksIDExMiwgNDEsIDU5
LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEyLCA5NywgMTE0
LCA5NywgMTA4LCAxMDgsIDk3LCAxMjAsIDY3LCAxMTEsIDExNCwgMTE0LCAxMDEsIDk5LCAxMTYs
IDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA4MCwgMTExLCAxMTUsIDQ0LCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTExLCAxMTQsIDEwNSwgMTAzLCA4NiwgMTAxLCA5OSwgNDQsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCA5OSwgMTE3LCA5OCwgMTAxLCA4MywgMTA1LCAxMjIsIDEwMSwgNDQs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTE3LCA5OCwgMTAxLCA4MCwgMTExLCAxMTUsIDMy
LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCAxMTAsIDEx
OCwgNzksIDExNCwgMTA1LCAxMDMsIDg2LCAxMDEsIDk5LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwg
NDAsIDQ5LCA0NiwgNDgsIDQ0LCA0OSwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwgNDEsIDQ3LCAx
MTEsIDExNCwgMTA1LCAxMDMsIDg2LCAxMDEsIDk5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTA0LCA5NywgMTA4LCAxMDIsIDgzLCAxMDUsIDEyMiwgMTAxLCA2MSwgOTksIDEx
NywgOTgsIDEwMSwgODMsIDEwNSwgMTIyLCAxMDEsIDQyLCA0OCwgNDYsIDUzLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAx
LCA5OSwgNjUsIDExNiwgNzcsIDk3LCAxMjAsIDgwLCAxMDgsIDk3LCAxMTAsIDEwMSwgNjEsIDQw
LCA5OSwgMTE3LCA5OCwgMTAxLCA4MCwgMTExLCAxMTUsIDQzLCAxMDQsIDk3LCAxMDgsIDEwMiwg
ODMsIDEwNSwgMTIyLCAxMDEsIDQ1LCAxMTgsIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA4MCwg
MTExLCAxMTUsIDQxLCA0MiwgMTA1LCAxMTAsIDExOCwgNzksIDExNCwgMTA1LCAxMDMsIDg2LCAx
MDEsIDk5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCAxMTAsIDExNiwg
MTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNjUsIDExNiwgNzcsIDEwNSwgMTEwLCA4MCwgMTA4LCA5
NywgMTEwLCAxMDEsIDYxLCA0MCwgOTksIDExNywgOTgsIDEwMSwgODAsIDExMSwgMTE1LCA0NSwg
MTA0LCA5NywgMTA4LCAxMDIsIDgzLCAxMDUsIDEyMiwgMTAxLCA0NSwgMTE4LCAxMDEsIDExNCwg
MTE2LCAxMDEsIDEyMCwgODAsIDExMSwgMTE1LCA0MSwgNDIsIDEwNSwgMTEwLCAxMTgsIDc5LCAx
MTQsIDEwNSwgMTAzLCA4NiwgMTAxLCA5OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDEwOCwgOTcsIDExNCwgMTAzLCAxMDEsIDExNSwgMTE2LCA3MywgMTEwLCAxMTYsIDEwMSwg
MTE0LCAxMTUsIDEwMSwgOTksIDYxLCAxMDksIDk3LCAxMjAsIDQwLCAxMDUsIDExMCwgMTE2LCAx
MDEsIDExNCwgMTE1LCAxMDEsIDk5LCA2NSwgMTE2LCA3NywgOTcsIDEyMCwgODAsIDEwOCwgOTcs
IDExMCwgMTAxLCA0NCwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNjUs
IDExNiwgNzcsIDEwNSwgMTEwLCA4MCwgMTA4LCA5NywgMTEwLCAxMDEsIDQxLCA1OSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDExNSwgMTE2LCA5NywgMTEw
LCA5OSwgMTAxLCA2MSwgMTA5LCAxMDUsIDExMCwgNDAsIDEwOSwgMTA1LCAxMTAsIDQwLCAxMDgs
IDk3LCAxMTQsIDEwMywgMTAxLCAxMTUsIDExNiwgNzMsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1
LCAxMDEsIDk5LCA0NiwgMTIwLCA0NCwgMTA4LCA5NywgMTE0LCAxMDMsIDEwMSwgMTE1LCAxMTYs
IDczLCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNDYsIDEyMSwgNDEsIDQ0LCAx
MDgsIDk3LCAxMTQsIDEwMywgMTAxLCAxMTUsIDExNiwgNzMsIDExMCwgMTE2LCAxMDEsIDExNCwg
MTE1LCAxMDEsIDk5LCA0NiwgMTIyLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDExNiwgODAsIDExMSwg
MTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDgzLCA2MSwgMTE4LCAxMDEsIDExNCwg
MTE2LCAxMDEsIDEyMCwgODAsIDExMSwgMTE1LCA0MywgMTExLCAxMTQsIDEwNSwgMTAzLCA4Niwg
MTAxLCA5OSwgNDIsIDEwMCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEz
LCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwNSwgMTEwLCAxMTYsIDEw
MSwgMTE0LCAxMTUsIDEwMSwgOTksIDExNiwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAx
MTEsIDExMCwgODcsIDgzLCA0NSwgOTksIDExNywgOTgsIDEwMSwgODAsIDExMSwgMTE1LCA1OSwg
MTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwg
MTEyLCAxMTcsIDExNiwgMTAxLCA3MCwgMTA1LCAxMjAsIDEwMSwgMTAwLCA2OSwgMTEzLCAxMTcs
IDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDEwMywgMTE3LCAxMDgsIDk3LCAxMTQs
IDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAx
MTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEw
OCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTA4LCAxMTEsIDExMCwgNjEsIDk3LCAxMTYsIDk3LCAxMTAsIDQwLCAxMDAs
IDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjIsIDQ0LCAxMDAs
IDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjAsIDQxLCA1OSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCA5NywgMTE2LCA2MSwgOTcs
IDk5LCAxMTEsIDExNSwgNDAsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgNDYsIDEyMSwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUs
IDExMiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYx
LCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgMTA4LCAxMTEsIDExMCwgNDQsIDEwOCwgOTcsIDExNiwg
NDEsIDQyLCA4MiwgNjksIDY3LCA3MywgODAsIDgyLCA3OSwgNjcsIDY1LCA3NiwgOTUsIDgwLCA3
MywgNTAsIDQyLCA1MCwgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTE1LCA2MSwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTEx
LCAxMTQsIDEwMCwgMTE1LCA0NiwgMTIwLCA0MiwgNDgsIDQ2LCA1MywgNDMsIDQ4LCA0NiwgNTMs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTYsIDYxLCAxMTUsIDEx
MiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ2LCAx
MjEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEw
MSwgOTksIDUxLCA0MCwgMTE1LCA0NCwgMTE2LCA0NCwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMjUs
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDEx
NiwgMTAxLCA3NywgMTA1LCAxMTQsIDExNCwgMTExLCAxMTQsIDEwMSwgMTAwLCA3MCwgMTA1LCAx
MjAsIDEwMSwgMTAwLCA2OSwgMTEzLCAxMTcsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDk3LCAx
MTAsIDEwMywgMTE3LCAxMDgsIDk3LCAxMTQsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwg
NDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDEx
MSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAw
LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQxLCAxMywgMTAsIDEy
MywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMTEsIDExMCwgNjEs
IDk3LCAxMTYsIDk3LCAxMTAsIDQwLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDQ2LCAxMjIsIDQ0LCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDQ2LCAxMjAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTA4LCA5NywgMTE2LCA2MSwgOTcsIDk5LCAxMTEsIDExNSwgNDAsIDEwMCwgMTA1LCAx
MTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDYsIDEyMSwgNDEsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2Nywg
MTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgMTA4LCAx
MTEsIDExMCwgNDQsIDEwOCwgOTcsIDExNiwgNDEsIDQyLCA4MiwgNjksIDY3LCA3MywgODAsIDgy
LCA3OSwgNjcsIDY1LCA3NiwgOTUsIDgwLCA3MywgNTAsIDQyLCA1MCwgNDYsIDQ4LCA1OSwgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCA2MSwgMTE1LCAxMTIsIDEwNCwg
MTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NiwgMTIwLCA0Miwg
NDgsIDQ2LCA1MywgNDMsIDQ4LCA0NiwgNTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMTYsIDYxLCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2NywgMTEx
LCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ2LCAxMjEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYs
IDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDksIDQ2LCA0OCwgNDUs
IDExNSwgNDQsIDExNiwgNDQsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjksIDEx
MywgMTE3LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCAxMDMsIDExNywgMTA4LCA5
NywgMTE0LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUy
LCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDks
IDk3LCAxMDgsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMjEsIDEwMSwgODAsIDEx
MSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMy
LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3
LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgOTksIDk3LCAxMDksIDEwMSwgMTE0LCA5NywgODQsIDExMSwgODYsIDEwMSwg
MTE0LCAxMTYsIDEwMSwgMTIwLCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUs
IDEyMiwgMTAxLCA0MCwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDYs
IDEyMCwgMTIxLCAxMjIsIDQ1LCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
NCwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDEx
NCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA0MCwgOTksIDk3LCAxMDksIDEwMSwgMTE0
LCA5NywgODQsIDExMSwgODYsIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA0NCwgMTE5LCAxMTEs
IDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwgNDEsIDU5LCAx
MywgMTAsIDExNCwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAs
IDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTE0LCA0NCwgNDgsIDQxLCA0MSwgNTksIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTExLCAxMTAsIDYxLCA5NywgMTE2
LCA5NywgMTEwLCA0MCwgMTE0LCA0NiwgMTIyLCA0NCwgMTE0LCA0NiwgMTIwLCA0MSwgNTksIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgOTcsIDExNiwgNjEsIDk3LCA5
OSwgMTExLCAxMTUsIDQwLCAxMTQsIDQ2LCAxMjEsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUwLCAzMiwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAx
MTQsIDEwMCwgMTE1LCA2MSwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDEwOCwgMTExLCAxMTAsIDQ0
LCAxMDgsIDk3LCAxMTYsIDQxLCA0MiwgODIsIDY5LCA2NywgNzMsIDgwLCA4MiwgNzksIDY3LCA2
NSwgNzYsIDk1LCA4MCwgNzMsIDUwLCA0MiwgNTAsIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAx
MDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDYsIDEyMCwgNDIsIDQ4LCA0NiwgNTMs
IDQzLCA0OCwgNDYsIDUzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTE2LCA2MSwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQs
IDEwMCwgMTE1LCA0NiwgMTIxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwg
MTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNSwgNDQsIDExNiwgNDQsIDQ4LCA0MSwg
NTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAx
MDksIDExMiwgMTE3LCAxMTYsIDEwMSwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwg
OTcsIDEwOCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1
MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5
LCA5NywgMTA4LCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwg
NDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMywgMTAs
IDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2
OCwgMTA1LCAxMTQsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAx
MDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA0MiwgMTE5
LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA3OCwgMTExLCAxMTQsIDEw
OSwgOTcsIDEwOCwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEw
MSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDQyLCAxMTgs
IDEwMSwgOTksIDUyLCA0MCwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwg
MTA5LCA5NywgMTA4LCA0NCwgNDgsIDQ2LCA0OCwgNDEsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgNjEsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDQ0LCAxMTgsIDEwNSwg
MTAxLCAxMTksIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwgNTksIDEzLCAxMCwgMTE0
LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDExOCwg
MTAxLCA5OSwgNTIsIDQwLCAxMTQsIDQ0LCA0OCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDQ2
LCAxMjIsIDYxLCAxMTQsIDQ2LCAxMjIsIDQ1LCA0OSwgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA5LCA2MSwgNTAsIDQ2LCA0OCwgNDIsIDEwOCwgMTAx
LCAxMTAsIDEwMywgMTE2LCAxMDQsIDQwLCAxMTQsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwg
MTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNCwgNDYsIDEy
MCwgNDcsIDEwOSwgNDMsIDQ4LCA0NiwgNTMsIDQ0LCA0OSwgNDYsIDQ4LCA0NSwgMTE0LCA0Niwg
MTIxLCA0NywgMTA5LCA0NSwgNDgsIDQ2LCA1MywgNDQsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTI1
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAx
MTYsIDEwMSwgODAsIDEwOCwgOTcsIDExMCwgOTcsIDExNCwgNjcsIDExMSwgMTExLCAxMTQsIDEw
MCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAw
LCA4MCwgMTExLCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAxMTEsIDExNCwg
MTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDEwMSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDQ0LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTMs
IDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgMTA1LCAxMDEsIDEx
OSwgNjgsIDEwNSwgMTE0LCA2MSwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDEx
NSwgNDYsIDEyMCwgMTIxLCAxMjIsIDQ1LCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEw
NSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
OTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5Nywg
MTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgNDQsIDExOSwgMTExLCAxMTQs
IDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDQxLCA1OSwgMTMsIDEw
LCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAs
IDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcs
IDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCA5OSwgMTExLCAx
MTEsIDExNCwgMTAwLCAxMTUsIDQ0LCA0OSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAx
LCA2NywgMTE3LCA5OCwgMTA1LCA5OSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwg
MTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAx
MTUsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4
LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwg
MTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMDks
IDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTMsIDEwLCAxMjMsIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwg
MTE0LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwg
MTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDYsIDEyMCwgMTIxLCAxMjIs
IDQ1LCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDExMSwgMTE0
LCAxMDAsIDExNSwgNjEsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA0MCwgMTE4
LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDQ0LCAxMTksIDExMSwgMTE0LCAxMDgsIDEw
MCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAx
MTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAs
IDExNSwgNDQsIDQ4LCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0
LCAxMTAsIDMyLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2
LCAxMDEsIDY3LCAxMTcsIDk4LCAxMDUsIDk5LCA3NiwgMTExLCA5OSwgOTcsIDEwOCwgNjcsIDEx
MSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTEx
LCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgMTA1LCAxMjIsIDEwMSwgNDQsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDEsIDEzLCAxMCwg
MTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4
LCAxMDUsIDExNCwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEw
MSwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ2LCAxMjAsIDEy
MSwgMTIyLCA0NSwgMTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAx
MTEsIDExMCwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAx
MTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
NDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA0NCwgMTE5LCAxMTEsIDExNCwg
MTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwgNTksIDEzLCAxMCwgOTks
IDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTEyLCA5NywgMTE0LCA5NywgMTA4LCAxMDgs
IDk3LCAxMjAsIDY3LCAxMTEsIDExNCwgMTE0LCAxMDEsIDk5LCAxMTYsIDc4LCAxMTEsIDExNCwg
MTA5LCA5NywgMTA4LCA0MCwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwg
NDYsIDEyMCwgMTIxLCAxMjIsIDQ0LCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ0LCAx
MTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDEwNSwg
MTIyLCAxMDEsIDQ0LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDEsIDU5LCAxMywg
MTAsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQw
LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3
LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgOTksIDExMSwg
MTExLCAxMTQsIDEwMCwgMTE1LCA0NCwgNDgsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNTks
IDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDks
IDExMiwgMTE3LCAxMTYsIDEwMSwgODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5
LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAxMDks
IDk3LCAxMTYsIDUyLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA0NCwgMTA5LCA5NywgMTE2LCA1
MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwg
MTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAx
MTQsIDEwNSwgMTIwLCA0MiwgNDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNDIsIDExOSwgMTExLCAx
MTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEw
MSwgODMsIDEwNywgMTIxLCA2NiwgMTExLCAxMjAsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDEx
NSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1
LCAxMTEsIDExMCwgODcsIDQ0LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDEx
MCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgs
IDEwMSwgOTksIDUyLCA0MCwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDg3LCA0NCwgNDgsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgODIsIDEwMSwgMTAy
LCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTExLCAxMTQsIDEw
MCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAw
LCA4MCwgMTExLCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAxMTEsIDExNCwg
MTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwgMTMsIDEwLCAxMjMsIDEz
LCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk5LCAxMTEsIDEwOSwgMTEy
LCAxMTcsIDExNiwgMTAxLCA4MywgMTA3LCAxMjEsIDY2LCAxMTEsIDEyMCwgNjcsIDExMSwgMTEx
LCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA4NSwgODYsIDg3LCA0NCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgNTksIDEzLCAx
MCwgMTI1LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcs
IDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwg
OTUsIDY4LCA2OSwgNzAsIDczLCA3OCwgNzMsIDg0LCA3MywgNzksIDc4LCA4MywgMTMsIDEwLCAx
MDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDExMSwgMTE3LCAxMTYsIDMyLCAx
MTgsIDEwMSwgOTksIDUyLCAzMiwgMTAzLCAxMDgsIDcwLCAxMTQsIDk3LCAxMDMsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDU5LCAxMCwgMTE4LCAxMTEsIDEwNSwgMTAwLCAzMiwgMTA5LCA5Nywg
MTA1LCAxMTAsIDQwLCAxMTgsIDExMSwgMTA1LCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3
NywgOTUsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgOTUsIDc3LCA2NSwgNzMsIDc4
LCA5NSwgNjYsIDY5LCA3MSwgNzMsIDc4LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA4NywgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwg
NDAsIDExOCwgNjksIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA0NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwg
MTA1LCAxMTEsIDExMCwgODcsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwg
OTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExOCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAx
MDgsIDg3LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNywgMTE4LCA3
OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgNDgs
IDQ2LCA0OCwgNDQsIDQ4LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMTAsIDExMSwgMTE0LCAx
MDksIDk3LCAxMDgsIDg3LCA2MSwgMTAzLCAxMDgsIDk1LCA3MCwgMTE0LCAxMTEsIDExMCwgMTE2
LCA3MCwgOTcsIDk5LCAxMDUsIDExMCwgMTAzLCAzMiwgNjMsIDMyLCAxMTAsIDExMSwgMTE0LCAx
MDksIDk3LCAxMDgsIDg3LCAzMiwgNTgsIDMyLCA0NSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5Nywg
MTA4LCA4NywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNSwgMTE3LCAxMTQs
IDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA2MSwgMTE4LCA2
NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDEx
NCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAx
MDgsIDExMiwgMTA0LCA5NywgNjEsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDY3
LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCA5NywgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgy
LCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA5NSwgODUsIDgwLCA2OCwgNjUsIDg0LCA2OSwgOTUs
IDY1LCA3NiwgNjYsIDY5LCA2OCwgNzksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2NSwgNzEs
IDc3LCA2OSwgNzgsIDg0LCA5NSwgODUsIDgwLCA2OCwgNjUsIDg0LCA2OSwgOTUsIDY1LCA3Niwg
ODAsIDcyLCA2NSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwg
ODQsIDk1LCA2NiwgNjksIDcwLCA3OSwgODIsIDY5LCA5NSwgNzYsIDczLCA3MSwgNzIsIDg0LCA4
MywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAx
MTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNjcsIDEx
MSwgMTA4LCAxMTEsIDExNCwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0OSwgNDYsIDQ0LCA0
OSwgNDYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwg
MTAxLCA2MSwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwg
MTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDk3LCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwg
ODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEs
IDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0
LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4
MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0
LCA5NywgMTE2LCAxMDEsIDQwLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQs
IDEwMiwgOTcsIDk5LCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNjEsIDQ5
LCA0NiwgNDUsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5Nywg
OTksIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAs
IDExMSwgMTE2LCA4NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwg
NjEsIDEwMCwgMTExLCAxMTYsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA0
NCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgODcsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
NzgsIDEwMCwgMTExLCAxMTYsIDg2LCA2MSwgOTcsIDk4LCAxMTUsIDY5LCAxMTIsIDExNSwgNDAs
IDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAx
MDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5Nywg
MTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA2MSwgOTksIDExMSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAx
MTYsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgODQsIDExMSwg
NjUsIDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwgMTExLCAxMTIsIDEwMSwg
NDAsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgNjUsIDY1LCA4MiwgMTExLCAxMTcsIDEwMywg
MTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDExNSwg
NjEsIDEwMywgMTAxLCAxMTYsIDY1LCA2NSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAx
MDEsIDExNSwgMTE1LCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCAxMTUsIDQwLCAxMTAsIDEx
MSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDEsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAx
MTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEw
MSwgNjEsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQ0LCA0OCwg
NDYsIDQ0LCA0OCwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAx
LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAx
MTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTE4LCAxMDEsIDk5
LCA1MSwgNDAsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDEsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgODYsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDYxLCA5OSwgMTExLCAx
MDksIDExMiwgMTE3LCAxMTYsIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEs
IDk5LCA1MiwgNDAsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwg
ODcsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgNDQsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
ODcsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAs
IDExNSwgNjEsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA4NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA3NiwgNzksIDY4LCA2MSwgMTAzLCAxMDEsIDExNiwgNzYsIDExMSwgMTAwLCA3MCwgMTE0
LCAxMTEsIDEwOSwgNjUsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNDAsIDExOCwgODIsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwg
MTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwg
MTE1LCA0NiwgMTIwLCA0NCwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNDEsIDU5LCAxMywg
MTAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3Niwg
NzksIDY4LCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDc2LCA3OSwgNjgsIDQyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAy
LCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNDYsIDEyMSwgNDMsIDExOCwg
ODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwg
OTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAx
MDIsIDExMSwgMTE1LCA0NiwgMTIyLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTE0LCAxMDEsIDExMywgMTE3LCAxMDEsIDExNSwgMTE2LCAxMDEsIDEwMCwgODIsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzYsIDc5LCA2OCwgNjEs
IDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgNzks
IDY4LCA1OSwgMTMsIDEwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwg
MTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDEx
NSwgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgNzYsIDExMSwgMTAwLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAx
MTQsIDQ0LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NCwgMTE0LCAxMDEsIDExMywgMTE3LCAxMDEs
IDExNSwgMTE2LCAxMDEsIDEwMCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNzYsIDc5LCA2OCwgNDEsIDU5LCAxMywgMTAsIDEwMSwgMTEwLCAxMTgsIDEw
NSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5
NywgMTEwLCA5OSwgMTAxLCA0NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTAyLCAxMTQsIDExMSwgMTA5
LCA4MiwgNzEsIDY2LCA2OCwgNDAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwg
MTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0
MSwgNTksIDEzLCAxMCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEw
MSwgMTEwLCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQ2LCAxMTQs
IDEwMywgOTgsIDQyLCA2MSwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0NiwgMTIwLCA1OSwgMTMsIDEw
LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwg
ODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDYsIDExNCwgMTAzLCA5OCwgNDIs
IDYxLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDEw
MSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA3Mywg
MTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDIsIDYxLCAxMTgsIDgy
LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEw
OCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwg
OTksIDEwMSwgNjEsIDEwOSwgOTcsIDEyMCwgNDAsIDEwOSwgOTcsIDEyMCwgNDAsIDExNSwgMTE3
LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0
LCA0NCwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTEx
LCAxMTQsIDQ2LCAxMDMsIDQxLCA0NCwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwg
ODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEs
IDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCA5OCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcs
IDExMCwgOTksIDEwMSwgNTcsIDQ4LCA2MSwgMTAyLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwg
MTA4LCA3MSwgMTE0LCA5NywgMTIyLCAxMDUsIDExMCwgMTAzLCA4MiwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEw
LCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgsIDYx
LCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDEx
NCwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
NSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDEx
NCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDU3LCA0OCwgNjEsIDExOCwgMTAx
LCA5OSwgNTEsIDQwLCA0OSwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwgNDQsIDQ5LCA0NiwgNDgs
IDQxLCA0MiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDU3LCA0OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTEwLCAx
MTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAs
IDEwMiwgNjEsIDEwMywgMTAxLCAxMTYsIDY2LCA4MiwgNjgsIDcwLCA3NiwgMTExLCAxMTEsIDEw
NywgMTE3LCAxMTIsIDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDQ0LCAxMTQsIDExMSwgMTE3
LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDEwMSwgMTEwLCAxMDEsIDExNCwgMTAzLCAxMjEsIDY3LCAxMTEsIDExMCwg
MTE1LCAxMDEsIDExNCwgMTE4LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA3MCwgOTcsIDk5LCAx
MTYsIDExMSwgMTE0LCA2MSwgMTAzLCAxMDEsIDExNiwgNjksIDExMCwgMTAxLCAxMTQsIDEwMywg
MTIxLCA2NywgMTExLCAxMTAsIDExNSwgMTAxLCAxMTQsIDExOCwgOTcsIDExNiwgMTA1LCAxMTEs
IDExMCwgNzAsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwgNDAsIDExNSwgMTEyLCAxMDEsIDk5LCAx
MTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwg
MTAxLCAxMTAsIDExNiwgODIsIDQ4LCA0NCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwg
MTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA0MSwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEw
MSwgNjYsIDk3LCAxMTUsIDEwMSwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0OCwgNDYsIDQ0
LCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3Niwg
MTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIs
IDExMiwgMTE0LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCA1OSwgMTMsIDEwLCAxMDgsIDEwNSwg
MTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCAxMDUs
IDExMCwgMTAyLCAxMTEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MTUsIDEwNCwgOTcsIDEwMCwgMTExLCAxMTksIDYxLCA0OSwgNDYsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5
LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMDMsIDEw
MSwgMTE2LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAx
LCA3MCwgMTE0LCAxMTEsIDEwOSwgNjUsIDExMCwgOTcsIDEwOCwgMTIxLCAxMTYsIDEwNSwgOTks
IDk3LCAxMDgsIDY2LCA4MiwgNjgsIDcwLCA3NiwgMTExLCAxMTEsIDEwNywgMTE3LCAxMTIsIDk1
LCA3NCwgMTExLCAxMTAsIDEwMSwgMTE1LCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwg
MTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwg
MTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgsIDQ0LCAxMTUsIDExMiwg
MTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwg
MTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA1NywgNDgsIDQ0LCAxMTUsIDExMywgMTE0LCAx
MTYsIDQwLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5
LCAxMDEsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEw
MSwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDQ2LCAxMTQsIDEwMywgOTgsIDYxLCA0MCwg
NDksIDQ2LCA0NSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDQxLCA0MiwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDEwOCwg
OTgsIDEwMSwgMTAwLCAxMTEsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA3MywgMTE0LCAxMTQsIDk3LCAx
MDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAx
MTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA3MywgMTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwg
OTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNzMs
IDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQyLCA2MSwgMTE1LCAx
MTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDQ2
LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDEw
NSwgMTEwLCA5NywgMTA4LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwg
MTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgy
LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAx
MywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAs
IDk5LCAxMDEsIDQyLCA2MSwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2
OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODIsIDk3LCAx
MDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgODMsIDk5LCA5NywgMTA4LCAxMDEsIDEwMCwgNjEs
IDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAx
MDEsIDQyLCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAx
MTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTYsIDEyMSwgNDYsIDEyMiwgNTksIDEzLCAx
MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTks
IDEwMSwgODMsIDk5LCA5NywgMTA4LCAxMDEsIDEwMCwgNDIsIDYxLCAxMDEsIDExMCwgMTAxLCAx
MTQsIDEwMywgMTIxLCA2NywgMTExLCAxMTAsIDExNSwgMTAxLCAxMTQsIDExOCwgOTcsIDExNiwg
MTA1LCAxMTEsIDExMCwgNzAsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY4LCAxMDUsIDEwMiwg
MTAyLCAxMTcsIDExNSwgMTAxLCA2MSwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAx
LCA2NiwgOTcsIDExNSwgMTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2
OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNDIsIDYxLCAxMTUsIDExNywgMTE0LCAx
MDIsIDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNDYsIDExNCwgMTAz
LCA5OCwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjgsIDEwNSwgMTAyLCAx
MDIsIDExNywgMTE1LCAxMDEsIDYxLCAxMDksIDk3LCAxMjAsIDQwLCAxMDIsIDEwNSwgMTEwLCA5
NywgMTA4LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNDQsIDQ4LCA0NiwgNDgs
IDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcs
IDEwOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNjEsIDExOCwgNjUsIDEwOSwg
OTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAx
MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDEx
NiwgNDIsIDYxLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwg
MTAxLCAxMDAsIDExMSwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY5LCAxMDksIDEwNSwgMTE1LCAxMTUs
IDEwNSwgMTE4LCAxMDEsIDYxLCAxMTgsIDY5LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4
LCAxMDEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgs
IDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA3MCwgMTExLCAxMTQsIDY4LCAxMDUsIDExNCwgMTAx
LCA5OSwgMTE2LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNjEsIDk3LCAxMDks
IDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwg
MTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTIsIDMyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0
LCA2MSwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEw
OCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNDIsIDk3LCAxMDksIDk4LCAxMDUs
IDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAs
IDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDMyLCA0MywgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5
NywgMTA4LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNDIsIDk3LCAxMDksIDk4
LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTEx
LCAxMTAsIDcwLCAxMTEsIDExNCwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDY4LCAxMDUs
IDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA0MiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2
LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAx
MjEsIDQ2LCAxMjAsIDMyLCA0MywgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA3Mywg
MTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDIsIDk3LCAxMDksIDk4
LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTEx
LCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQyLCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAx
MTYsIDEyMSwgNDYsIDEyMiwgMzIsIDQzLCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgs
IDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCA5OSwgOTcsIDEwOCwgMTAx
LCAxMDAsIDMyLCA0MywgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2OSwgMTA5LCAx
MDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA0MiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwg
MTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2
LCAxMjEsIDQ2LCAxMjEsIDQ0LCAxMywgMTAsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNDEsIDU5
LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4
MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgOTUsIDY2
LCA2OSwgNzAsIDc5LCA4MiwgNjksIDk1LCA3MCwgNzksIDcxLCAxMywgMTAsIDEwMiwgMTA1LCAx
MTAsIDk3LCAxMDgsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCAxMDksIDk3LCAxMjAsIDQw
LCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwgNDgs
IDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDYxLCA5NywgMTEyLCAxMTIsIDEwOCwgMTIxLCA3MywgMTA5LCA5Nywg
MTAzLCAxMDEsIDgwLCAxMTQsIDExMSwgOTksIDEwMSwgMTE1LCAxMTUsIDEwNSwgMTEwLCAxMDMs
IDQwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwg
NTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcsIDExMSwgMTA4LCAxMTEsIDEx
NCwgNDYsIDk3LCA0MiwgNjEsIDExOCwgMTA1LCAxMTUsIDEwNSwgOTgsIDEwNSwgMTA4LCAxMDUs
IDExNiwgMTIxLCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3
OCwgODQsIDk1LCA2NiwgNjksIDcwLCA3OSwgODIsIDY5LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDY3
LCA3OSwgNzYsIDc5LCA4MiwgMTMsIDEwLCAxMDMsIDEwOCwgNzAsIDExNCwgOTcsIDEwMywgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwXS5tYXAoYyA9PiBTdHJpbmcu
ZnJvbUNoYXJDb2RlKGMpKS5qb2luKCIiKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5v
cmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vb25lU3BoZXJlV2ViR1BVV1NMU2hhZGVycy5qcyBiL1dl
YnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vb25lU3BoZXJlV2ViR1BVV1NM
U2hhZGVycy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZTk4ZWJlMGJkOTMyOGNkNDhmOTRjMjdiMGU1NjU1ZDY5
MGQ2NjZmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kZW1vcy93ZWJn
cHUvYmFieWxvbi9vbmVTcGhlcmVXZWJHUFVXU0xTaGFkZXJzLmpzCkBAIC0wLDAgKzEsMTUxMCBA
QAorY29uc3QgdmVydGV4U2hhZGVyV1NMMSA9IGAKK3N0cnVjdCBPdXRwdXQgeworICAgIGZsb2F0
MyB2UG9zaXRpb25XIDogYXR0cmlidXRlKDApOworICAgIGZsb2F0MyB2Tm9ybWFsVyA6IGF0dHJp
YnV0ZSgxKTsKKyAgICBmbG9hdDMgdkVudmlyb25tZW50SXJyYWRpYW5jZSA6IGF0dHJpYnV0ZSgy
KTsKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbjsKK30KKworc3RydWN0IFNjZW5l
IHsKKyAgICBmbG9hdDR4NCB2aWV3UHJvamVjdGlvbjsKKyAgICBmbG9hdDR4NCB2aWV3OworfQor
CitzdHJ1Y3QgQmluZEdyb3VwQSB7CisgICAgY29uc3RhbnQgU2NlbmVbXSBzY2VuZSA6IHJlZ2lz
dGVyKGIwLCBzcGFjZTApOworICAgIFRleHR1cmUyRDxmbG9hdDQ+IGVudmlyb25tZW50QnJkZlNh
bXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIodDEsIHNwYWNlMCk7CisgICAgc2FtcGxlciBlbnZpcm9u
bWVudEJyZGZTYW1wbGVyU2FtcGxlciA6IHJlZ2lzdGVyKHMyLCBzcGFjZTApOworfQorCitzdHJ1
Y3QgTWF0ZXJpYWwgeworICAgIGZsb2F0MiB2QWxiZWRvSW5mb3M7CisgICAgZmxvYXQ0IHZBbWJp
ZW50SW5mb3M7CisgICAgZmxvYXQyIHZPcGFjaXR5SW5mb3M7CisgICAgZmxvYXQyIHZFbWlzc2l2
ZUluZm9zOworICAgIGZsb2F0MiB2TGlnaHRtYXBJbmZvczsKKyAgICBmbG9hdDMgdlJlZmxlY3Rp
dml0eUluZm9zOworICAgIGZsb2F0MiB2TWljcm9TdXJmYWNlU2FtcGxlckluZm9zOworICAgIGZs
b2F0MiB2UmVmbGVjdGlvbkluZm9zOworICAgIGZsb2F0MyB2UmVmbGVjdGlvblBvc2l0aW9uOwor
ICAgIGZsb2F0MyB2UmVmbGVjdGlvblNpemU7CisgICAgZmxvYXQzIHZCdW1wSW5mb3M7CisgICAg
ZmxvYXQ0eDQgYWxiZWRvTWF0cml4OworICAgIGZsb2F0NHg0IGFtYmllbnRNYXRyaXg7CisgICAg
ZmxvYXQ0eDQgb3BhY2l0eU1hdHJpeDsKKyAgICBmbG9hdDR4NCBlbWlzc2l2ZU1hdHJpeDsKKyAg
ICBmbG9hdDR4NCBsaWdodG1hcE1hdHJpeDsKKyAgICBmbG9hdDR4NCByZWZsZWN0aXZpdHlNYXRy
aXg7CisgICAgZmxvYXQ0eDQgbWljcm9TdXJmYWNlU2FtcGxlck1hdHJpeDsKKyAgICBmbG9hdDR4
NCBidW1wTWF0cml4OworICAgIGZsb2F0MiB2VGFuZ2VudFNwYWNlUGFyYW1zOworICAgIGZsb2F0
NHg0IHJlZmxlY3Rpb25NYXRyaXg7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uQ29sb3I7CisgICAg
ZmxvYXQ0IHZBbGJlZG9Db2xvcjsKKyAgICBmbG9hdDQgdkxpZ2h0aW5nSW50ZW5zaXR5OworICAg
IGZsb2F0MyB2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zOworICAgIGZsb2F0IHBvaW50U2l6
ZTsKKyAgICBmbG9hdDQgdlJlZmxlY3Rpdml0eUNvbG9yOworICAgIGZsb2F0MyB2RW1pc3NpdmVD
b2xvcjsKKyAgICBmbG9hdDQgdkV5ZVBvc2l0aW9uOworICAgIGZsb2F0MyB2QW1iaWVudENvbG9y
OworICAgIGZsb2F0MiB2RGVidWdNb2RlOworICAgIGZsb2F0MiB2Q2xlYXJDb2F0UGFyYW1zOwor
ICAgIGZsb2F0NCB2Q2xlYXJDb2F0UmVmcmFjdGlvblBhcmFtczsKKyAgICBmbG9hdDIgdkNsZWFy
Q29hdEluZm9zOworICAgIGZsb2F0NHg0IGNsZWFyQ29hdE1hdHJpeDsKKyAgICBmbG9hdDIgdkNs
ZWFyQ29hdEJ1bXBJbmZvczsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdFRhbmdlbnRTcGFjZVBhcmFt
czsKKyAgICBmbG9hdDR4NCBjbGVhckNvYXRCdW1wTWF0cml4OworICAgIGZsb2F0NCB2Q2xlYXJD
b2F0VGludFBhcmFtczsKKyAgICBmbG9hdCBjbGVhckNvYXRDb2xvckF0RGlzdGFuY2U7CisgICAg
ZmxvYXQyIHZDbGVhckNvYXRUaW50SW5mb3M7CisgICAgZmxvYXQ0eDQgY2xlYXJDb2F0VGludE1h
dHJpeDsKKyAgICBmbG9hdDMgdkFuaXNvdHJvcHk7CisgICAgZmxvYXQyIHZBbmlzb3Ryb3B5SW5m
b3M7CisgICAgZmxvYXQ0eDQgYW5pc290cm9weU1hdHJpeDsKKyAgICBmbG9hdDQgdlNoZWVuQ29s
b3I7CisgICAgZmxvYXQyIHZTaGVlbkluZm9zOworICAgIGZsb2F0NHg0IHNoZWVuTWF0cml4Owor
ICAgIGZsb2F0MyB2UmVmcmFjdGlvbk1pY3Jvc3VyZmFjZUluZm9zOworICAgIGZsb2F0NCB2UmVm
cmFjdGlvbkluZm9zOworICAgIGZsb2F0NHg0IHJlZnJhY3Rpb25NYXRyaXg7CisgICAgZmxvYXQy
IHZUaGlja25lc3NJbmZvczsKKyAgICBmbG9hdDR4NCB0aGlja25lc3NNYXRyaXg7CisgICAgZmxv
YXQyIHZUaGlja25lc3NQYXJhbTsKKyAgICBmbG9hdDMgdkRpZmZ1c2lvbkRpc3RhbmNlOworICAg
IGZsb2F0NCB2VGludENvbG9yOworICAgIGZsb2F0MyB2U3ViU3VyZmFjZUludGVuc2l0eTsKKyAg
ICBmbG9hdDMgdlNwaGVyaWNhbEwwMDsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxXzE7CisgICAg
ZmxvYXQzIHZTcGhlcmljYWxMMTA7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMTE7CisgICAgZmxv
YXQzIHZTcGhlcmljYWxMMl8yOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDJfMTsKKyAgICBmbG9h
dDMgdlNwaGVyaWNhbEwyMDsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyMTsKKyAgICBmbG9hdDMg
dlNwaGVyaWNhbEwyMjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFg7CisgICAgZmxvYXQzIHZTcGhl
cmljYWxZOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFhY
X1paOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWVlfWlo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxa
WjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFhZOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWVo7Cisg
ICAgZmxvYXQzIHZTcGhlcmljYWxaWDsKK30KKworc3RydWN0IE1lc2ggeworICAgIGZsb2F0NHg0
IHdvcmxkOworICAgIGZsb2F0IHZpc2liaWxpdHk7Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBCIHsK
KyAgICBjb25zdGFudCBNYXRlcmlhbFtdIG1hdGVyaWFsIDogcmVnaXN0ZXIoYjAsIHNwYWNlMSk7
CisgICAgY29uc3RhbnQgTWVzaFtdIG1lc2ggOiByZWdpc3RlcihiMSwgc3BhY2UxKTsKK30KKwor
c3RydWN0IEJpbmRHcm91cEMgeworICAgIFRleHR1cmUyRDxmbG9hdDQ+IHJlZmxlY3Rpb25TYW1w
bGVyVGV4dHVyZSA6IHJlZ2lzdGVyKHQwLCBzcGFjZTIpOworICAgIHNhbXBsZXIgcmVmbGVjdGlv
blNhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczEsIHNwYWNlMik7Cit9CisKK2Zsb2F0M3gzIHRy
YW5zcG9zZU1hdDMoZmxvYXQzeDMgaW5NYXRyaXgpIHsKKyAgICBmbG9hdDMgaTAgPSBpbk1hdHJp
eFswXTsKKyAgICBmbG9hdDMgaTEgPSBpbk1hdHJpeFsxXTsKKyAgICBmbG9hdDMgaTIgPSBpbk1h
dHJpeFsyXTsKKyAgICBmbG9hdDN4MyBvdXRNYXRyaXggPSBmbG9hdDN4MygKKyAgICAgICAgZmxv
YXQzKGkwLngsIGkxLngsIGkyLngpLAorICAgICAgICBmbG9hdDMoaTAueSwgaTEueSwgaTIueSks
CisgICAgICAgIGZsb2F0MyhpMC56LCBpMS56LCBpMi56KQorICAgICk7CisgICAgcmV0dXJuIG91
dE1hdHJpeDsKK30KKworZmxvYXQzeDMgaW52ZXJzZU1hdDMoZmxvYXQzeDMgaW5NYXRyaXgpIHsK
KyAgICBmbG9hdCBhMDAgPSBpbk1hdHJpeFswXVswXSwgYTAxID0gaW5NYXRyaXhbMF1bMV0sIGEw
MiA9IGluTWF0cml4WzBdWzJdOworICAgIGZsb2F0IGExMCA9IGluTWF0cml4WzFdWzBdLCBhMTEg
PSBpbk1hdHJpeFsxXVsxXSwgYTEyID0gaW5NYXRyaXhbMV1bMl07CisgICAgZmxvYXQgYTIwID0g
aW5NYXRyaXhbMl1bMF0sIGEyMSA9IGluTWF0cml4WzJdWzFdLCBhMjIgPSBpbk1hdHJpeFsyXVsy
XTsKKyAgICBmbG9hdCBiMDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjE7CisgICAgZmxvYXQgYjEx
ID0gLWEyMiAqIGExMCArIGExMiAqIGEyMDsKKyAgICBmbG9hdCBiMjEgPSBhMjEgKiBhMTAgLSBh
MTEgKiBhMjA7CisgICAgZmxvYXQgZGV0ID0gYTAwICogYjAxICsgYTAxICogYjExICsgYTAyICog
YjIxOworICAgIHJldHVybiBmbG9hdDN4MyhiMDEsIC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEsIGEx
MiAqIGEwMSAtIGEwMiAqIGExMSwKKyAgICAgICAgYjExLCBhMjIgKiBhMDAgLSBhMDIgKiBhMjAs
IC1hMTIgKiBhMDAgKyBhMDIgKiBhMTAsCisgICAgICAgIGIyMSwgLWEyMSAqIGEwMCArIGEwMSAq
IGEyMCwgYTExICogYTAwIC0gYTAxICogYTEwKSAvIGRldDsKK30KKworZmxvYXQzIHRvTGluZWFy
U3BhY2UoZmxvYXQzIGNvbG9yKSB7CisgICAgcmV0dXJuIHBvdyhjb2xvciwgZmxvYXQzKDIuMiwg
Mi4yLCAyLjIpKTsKK30KKworZmxvYXQzIHRvR2FtbWFTcGFjZShmbG9hdDMgY29sb3IpIHsKKyAg
ICByZXR1cm4gcG93KGNvbG9yLCBmbG9hdDMoMS4wIC8gMi4yLCAxLjAgLyAyLjIsIDEuMCAvIDIu
MikpOworfQorCitmbG9hdCBzcXVhcmUoZmxvYXQgdmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUg
KiB2YWx1ZTsKK30KKworZmxvYXQgcG93NShmbG9hdCB2YWx1ZSkgeworICAgIGZsb2F0IHNxID0g
dmFsdWUgKiB2YWx1ZTsKKyAgICByZXR1cm4gc3EgKiBzcSAqIHZhbHVlOworfQorCitmbG9hdCBn
ZXRMdW1pbmFuY2UoZmxvYXQzIGNvbG9yKSB7CisgICAgcmV0dXJuIGNsYW1wKGRvdChjb2xvciwg
ZmxvYXQzKDAuMjEyNiwgMC43MTUyLCAwLjA3MjIpKSwgMC4sIDEuKTsKK30KKworZmxvYXQgZ2V0
UmFuZChmbG9hdDIgc2VlZCkgeworICAgIHJldHVybiBmcmFjKHNpbihkb3Qoc2VlZC54eSwgZmxv
YXQyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpOworfQorCitmbG9hdCBkaXRoZXIo
ZmxvYXQyIHNlZWQsIGZsb2F0IHZhcmlhbmNlQW1vdW50KSB7CisgICAgZmxvYXQgcmFuZCA9IGdl
dFJhbmQoc2VlZCk7CisgICAgZmxvYXQgZGl0aGVyID0gbGVycCgtdmFyaWFuY2VBbW91bnQgLyAy
NTUuMCwgdmFyaWFuY2VBbW91bnQgLyAyNTUuMCwgcmFuZCk7CisgICAgcmV0dXJuIGRpdGhlcjsK
K30KKworZmxvYXQ0IHRvUkdCRChmbG9hdDMgY29sb3IpIHsKKyAgICBmbG9hdCBtYXhSR0IgPSBt
YXgobWF4KGNvbG9yLngsIG1heChjb2xvci55LCBjb2xvci56KSksIDAuMDAwMDAwMSk7CisgICAg
ZmxvYXQgRCA9IG1heCgyNTUuMCAvIG1heFJHQiwgMS4pOworICAgIEQgPSBjbGFtcChmbG9vcihE
KSAvIDI1NS4wLCAwLiwgMS4pOworICAgIGZsb2F0MyByZ2IgPSBjb2xvciAqIEQ7CisgICAgcmdi
ID0gdG9HYW1tYVNwYWNlKHJnYik7CisgICAgcmV0dXJuIGZsb2F0NChyZ2IsIEQpOworfQorCitm
bG9hdDMgZnJvbVJHQkQoZmxvYXQ0IHJnYmQpIHsKKyAgICByZ2JkLnh5eiA9IHRvTGluZWFyU3Bh
Y2UocmdiZC54eXopOworICAgIHJldHVybiByZ2JkLnh5eiAvIHJnYmQudzsKK30KKworZmxvYXQz
IGNvbXB1dGVFbnZpcm9ubWVudElycmFkaWFuY2UoZmxvYXQzIG5vcm1hbCwgY29uc3RhbnQgTWF0
ZXJpYWwqIG1hdGVyaWFsKSB7CisgICAgcmV0dXJuIG1hdGVyaWFsLT52U3BoZXJpY2FsTDAwCisg
ICAgICAgICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMV8xICogKG5vcm1hbC55KQorICAgICAgICAr
IG1hdGVyaWFsLT52U3BoZXJpY2FsTDEwICogKG5vcm1hbC56KQorICAgICAgICArIG1hdGVyaWFs
LT52U3BoZXJpY2FsTDExICogKG5vcm1hbC54KQorICAgICAgICArIG1hdGVyaWFsLT52U3BoZXJp
Y2FsTDJfMiAqIChub3JtYWwueSAqIG5vcm1hbC54KQorICAgICAgICArIG1hdGVyaWFsLT52U3Bo
ZXJpY2FsTDJfMSAqIChub3JtYWwueSAqIG5vcm1hbC56KQorICAgICAgICArIG1hdGVyaWFsLT52
U3BoZXJpY2FsTDIwICogKCgzLjAgKiBub3JtYWwueiAqIG5vcm1hbC56KSAtIDEuMCkKKyAgICAg
ICAgKyBtYXRlcmlhbC0+dlNwaGVyaWNhbEwyMSAqIChub3JtYWwueiAqIG5vcm1hbC54KQorICAg
ICAgICArIG1hdGVyaWFsLT52U3BoZXJpY2FsTDIyICogKG5vcm1hbC54ICogbm9ybWFsLnggLSAo
bm9ybWFsLnkgKiBub3JtYWwueSkpOworfQorCit2ZXJ0ZXggT3V0cHV0IG1haW4oZmxvYXQzIHBv
c2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdDMgbm9ybWFsIDogYXR0cmlidXRlKDEpLCBCaW5k
R3JvdXBBIGJpbmRHcm91cEEsIEJpbmRHcm91cEIgYmluZEdyb3VwQiwgQmluZEdyb3VwQyBiaW5k
R3JvdXBDKSB7CisgICAgT3V0cHV0IG91dHB1dDsKKyAgICBmbG9hdDMgcG9zaXRpb25VcGRhdGVk
ID0gcG9zaXRpb247CisgICAgZmxvYXQzIG5vcm1hbFVwZGF0ZWQgPSBub3JtYWw7CisgICAgZmxv
YXQ0eDQgZmluYWxXb3JsZCA9IGJpbmRHcm91cEIubWVzaFswXS53b3JsZDsKKyAgICBvdXRwdXQu
cG9zaXRpb24gPSBtdWwobXVsKGJpbmRHcm91cEEuc2NlbmVbMF0udmlld1Byb2plY3Rpb24sIGZp
bmFsV29ybGQpLCBmbG9hdDQocG9zaXRpb25VcGRhdGVkLCAxLjApKTsKKyAgICBmbG9hdDQgd29y
bGRQb3MgPSBtdWwoZmluYWxXb3JsZCwgZmxvYXQ0KHBvc2l0aW9uVXBkYXRlZCwgMS4wKSk7Cisg
ICAgb3V0cHV0LnZQb3NpdGlvblcgPSB3b3JsZFBvcy54eXo7CisgICAgZmxvYXQzeDMgbm9ybWFs
V29ybGQ7CisgICAgbm9ybWFsV29ybGRbMF0gPSBmaW5hbFdvcmxkWzBdLnh5ejsKKyAgICBub3Jt
YWxXb3JsZFsxXSA9IGZpbmFsV29ybGRbMV0ueHl6OworICAgIG5vcm1hbFdvcmxkWzJdID0gZmlu
YWxXb3JsZFsyXS54eXo7CisgICAgb3V0cHV0LnZOb3JtYWxXID0gbm9ybWFsaXplKG11bChub3Jt
YWxXb3JsZCwgbm9ybWFsVXBkYXRlZCkpOworICAgIGZsb2F0MyByZWZsZWN0aW9uVmVjdG9yID0g
bXVsKGJpbmRHcm91cEIubWF0ZXJpYWxbMF0ucmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KG91dHB1
dC52Tm9ybWFsVywgMCkpLnh5ejsKKyAgICBvdXRwdXQudkVudmlyb25tZW50SXJyYWRpYW5jZSA9
IGNvbXB1dGVFbnZpcm9ubWVudElycmFkaWFuY2UocmVmbGVjdGlvblZlY3RvciwgJmJpbmRHcm91
cEIubWF0ZXJpYWxbMF0pOworICAgIGZsb2F0MiB1dlVwZGF0ZWQ7CisgICAgZmxvYXQyIHV2MjsK
KyAgICAvL291dHB1dC5wb3NpdGlvbiAqPSAtMS47CisgICAgcmV0dXJuIG91dHB1dDsKK30KK2A7
CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyV1NMMSA9IGAKK3N0cnVjdCBTY2VuZSB7CisgICAgZmxv
YXQ0eDQgdmlld1Byb2plY3Rpb247CisgICAgZmxvYXQ0eDQgdmlldzsKK30KKworc3RydWN0IEJp
bmRHcm91cEEgeworICAgIGNvbnN0YW50IFNjZW5lW10gc2NlbmUgOiByZWdpc3RlcihiMCwgc3Bh
Y2UwKTsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiBlbnZpcm9ubWVudEJyZGZTYW1wbGVyVGV4dHVy
ZSA6IHJlZ2lzdGVyKHQxLCBzcGFjZTApOworICAgIHNhbXBsZXIgZW52aXJvbm1lbnRCcmRmU2Ft
cGxlclNhbXBsZXIgOiByZWdpc3RlcihzMiwgc3BhY2UwKTsKK30KKworc3RydWN0IE1hdGVyaWFs
IHsKKyAgICBmbG9hdDIgdkFsYmVkb0luZm9zOworICAgIGZsb2F0NCB2QW1iaWVudEluZm9zOwor
ICAgIGZsb2F0MiB2T3BhY2l0eUluZm9zOworICAgIGZsb2F0MiB2RW1pc3NpdmVJbmZvczsKKyAg
ICBmbG9hdDIgdkxpZ2h0bWFwSW5mb3M7CisgICAgZmxvYXQzIHZSZWZsZWN0aXZpdHlJbmZvczsK
KyAgICBmbG9hdDIgdk1pY3JvU3VyZmFjZVNhbXBsZXJJbmZvczsKKyAgICBmbG9hdDIgdlJlZmxl
Y3Rpb25JbmZvczsKKyAgICBmbG9hdDMgdlJlZmxlY3Rpb25Qb3NpdGlvbjsKKyAgICBmbG9hdDMg
dlJlZmxlY3Rpb25TaXplOworICAgIGZsb2F0MyB2QnVtcEluZm9zOworICAgIGZsb2F0NHg0IGFs
YmVkb01hdHJpeDsKKyAgICBmbG9hdDR4NCBhbWJpZW50TWF0cml4OworICAgIGZsb2F0NHg0IG9w
YWNpdHlNYXRyaXg7CisgICAgZmxvYXQ0eDQgZW1pc3NpdmVNYXRyaXg7CisgICAgZmxvYXQ0eDQg
bGlnaHRtYXBNYXRyaXg7CisgICAgZmxvYXQ0eDQgcmVmbGVjdGl2aXR5TWF0cml4OworICAgIGZs
b2F0NHg0IG1pY3JvU3VyZmFjZVNhbXBsZXJNYXRyaXg7CisgICAgZmxvYXQ0eDQgYnVtcE1hdHJp
eDsKKyAgICBmbG9hdDIgdlRhbmdlbnRTcGFjZVBhcmFtczsKKyAgICBmbG9hdDR4NCByZWZsZWN0
aW9uTWF0cml4OworICAgIGZsb2F0MyB2UmVmbGVjdGlvbkNvbG9yOworICAgIGZsb2F0NCB2QWxi
ZWRvQ29sb3I7CisgICAgZmxvYXQ0IHZMaWdodGluZ0ludGVuc2l0eTsKKyAgICBmbG9hdDMgdlJl
ZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvczsKKyAgICBmbG9hdCBwb2ludFNpemU7CisgICAgZmxv
YXQ0IHZSZWZsZWN0aXZpdHlDb2xvcjsKKyAgICBmbG9hdDMgdkVtaXNzaXZlQ29sb3I7CisgICAg
ZmxvYXQ0IHZFeWVQb3NpdGlvbjsKKyAgICBmbG9hdDMgdkFtYmllbnRDb2xvcjsKKyAgICBmbG9h
dDIgdkRlYnVnTW9kZTsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdFBhcmFtczsKKyAgICBmbG9hdDQg
dkNsZWFyQ29hdFJlZnJhY3Rpb25QYXJhbXM7CisgICAgZmxvYXQyIHZDbGVhckNvYXRJbmZvczsK
KyAgICBmbG9hdDR4NCBjbGVhckNvYXRNYXRyaXg7CisgICAgZmxvYXQyIHZDbGVhckNvYXRCdW1w
SW5mb3M7CisgICAgZmxvYXQyIHZDbGVhckNvYXRUYW5nZW50U3BhY2VQYXJhbXM7CisgICAgZmxv
YXQ0eDQgY2xlYXJDb2F0QnVtcE1hdHJpeDsKKyAgICBmbG9hdDQgdkNsZWFyQ29hdFRpbnRQYXJh
bXM7CisgICAgZmxvYXQgY2xlYXJDb2F0Q29sb3JBdERpc3RhbmNlOworICAgIGZsb2F0MiB2Q2xl
YXJDb2F0VGludEluZm9zOworICAgIGZsb2F0NHg0IGNsZWFyQ29hdFRpbnRNYXRyaXg7CisgICAg
ZmxvYXQzIHZBbmlzb3Ryb3B5OworICAgIGZsb2F0MiB2QW5pc290cm9weUluZm9zOworICAgIGZs
b2F0NHg0IGFuaXNvdHJvcHlNYXRyaXg7CisgICAgZmxvYXQ0IHZTaGVlbkNvbG9yOworICAgIGZs
b2F0MiB2U2hlZW5JbmZvczsKKyAgICBmbG9hdDR4NCBzaGVlbk1hdHJpeDsKKyAgICBmbG9hdDMg
dlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvczsKKyAgICBmbG9hdDQgdlJlZnJhY3Rpb25JbmZv
czsKKyAgICBmbG9hdDR4NCByZWZyYWN0aW9uTWF0cml4OworICAgIGZsb2F0MiB2VGhpY2tuZXNz
SW5mb3M7CisgICAgZmxvYXQ0eDQgdGhpY2tuZXNzTWF0cml4OworICAgIGZsb2F0MiB2VGhpY2tu
ZXNzUGFyYW07CisgICAgZmxvYXQzIHZEaWZmdXNpb25EaXN0YW5jZTsKKyAgICBmbG9hdDQgdlRp
bnRDb2xvcjsKKyAgICBmbG9hdDMgdlN1YlN1cmZhY2VJbnRlbnNpdHk7CisgICAgZmxvYXQzIHZT
cGhlcmljYWxMMDA7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMV8xOworICAgIGZsb2F0MyB2U3Bo
ZXJpY2FsTDEwOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDExOworICAgIGZsb2F0MyB2U3BoZXJp
Y2FsTDJfMjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyXzE7CisgICAgZmxvYXQzIHZTcGhlcmlj
YWxMMjA7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMjE7CisgICAgZmxvYXQzIHZTcGhlcmljYWxM
MjI7CisgICAgZmxvYXQzIHZTcGhlcmljYWxYOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWTsKKyAg
ICBmbG9hdDMgdlNwaGVyaWNhbFo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxYWF9aWjsKKyAgICBm
bG9hdDMgdlNwaGVyaWNhbFlZX1paOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWlo7CisgICAgZmxv
YXQzIHZTcGhlcmljYWxYWTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFlaOworICAgIGZsb2F0MyB2
U3BoZXJpY2FsWlg7Cit9CisKK3N0cnVjdCBNZXNoIHsKKyAgICBmbG9hdDR4NCB3b3JsZDsKKyAg
ICBmbG9hdCB2aXNpYmlsaXR5OworfQorCitzdHJ1Y3QgQmluZEdyb3VwQiB7CisgICAgY29uc3Rh
bnQgTWF0ZXJpYWxbXSBtYXRlcmlhbCA6IHJlZ2lzdGVyKGIwLCBzcGFjZTEpOworICAgIGNvbnN0
YW50IE1lc2hbXSBtZXNoIDogcmVnaXN0ZXIoYjEsIHNwYWNlMSk7Cit9CisKK3N0cnVjdCBCaW5k
R3JvdXBDIHsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiByZWZsZWN0aW9uU2FtcGxlclRleHR1cmUg
OiByZWdpc3Rlcih0MCwgc3BhY2UyKTsKKyAgICBzYW1wbGVyIHJlZmxlY3Rpb25TYW1wbGVyU2Ft
cGxlciA6IHJlZ2lzdGVyKHMxLCBzcGFjZTIpOworfQorCitmbG9hdDN4MyB0cmFuc3Bvc2VNYXQz
KGZsb2F0M3gzIGluTWF0cml4KSB7CisgICAgZmxvYXQzIGkwID0gaW5NYXRyaXhbMF07CisgICAg
ZmxvYXQzIGkxID0gaW5NYXRyaXhbMV07CisgICAgZmxvYXQzIGkyID0gaW5NYXRyaXhbMl07Cisg
ICAgZmxvYXQzeDMgb3V0TWF0cml4ID0gZmxvYXQzeDMoCisgICAgICAgIGZsb2F0MyhpMC54LCBp
MS54LCBpMi54KSwKKyAgICAgICAgZmxvYXQzKGkwLnksIGkxLnksIGkyLnkpLAorICAgICAgICBm
bG9hdDMoaTAueiwgaTEueiwgaTIueikKKyAgICApOworICAgIHJldHVybiBvdXRNYXRyaXg7Cit9
CisKK2Zsb2F0M3gzIGludmVyc2VNYXQzKGZsb2F0M3gzIGluTWF0cml4KSB7CisgICAgZmxvYXQg
YTAwID0gaW5NYXRyaXhbMF1bMF0sIGEwMSA9IGluTWF0cml4WzBdWzFdLCBhMDIgPSBpbk1hdHJp
eFswXVsyXTsKKyAgICBmbG9hdCBhMTAgPSBpbk1hdHJpeFsxXVswXSwgYTExID0gaW5NYXRyaXhb
MV1bMV0sIGExMiA9IGluTWF0cml4WzFdWzJdOworICAgIGZsb2F0IGEyMCA9IGluTWF0cml4WzJd
WzBdLCBhMjEgPSBpbk1hdHJpeFsyXVsxXSwgYTIyID0gaW5NYXRyaXhbMl1bMl07CisgICAgZmxv
YXQgYjAxID0gYTIyICogYTExIC0gYTEyICogYTIxOworICAgIGZsb2F0IGIxMSA9IC1hMjIgKiBh
MTAgKyBhMTIgKiBhMjA7CisgICAgZmxvYXQgYjIxID0gYTIxICogYTEwIC0gYTExICogYTIwOwor
ICAgIGZsb2F0IGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTsKKyAgICBy
ZXR1cm4gZmxvYXQzeDMoYjAxLCAtYTIyICogYTAxICsgYTAyICogYTIxLCBhMTIgKiBhMDEgLSBh
MDIgKiBhMTEsCisgICAgICAgIGIxMSwgYTIyICogYTAwIC0gYTAyICogYTIwLCAtYTEyICogYTAw
ICsgYTAyICogYTEwLAorICAgICAgICBiMjEsIC1hMjEgKiBhMDAgKyBhMDEgKiBhMjAsIGExMSAq
IGEwMCAtIGEwMSAqIGExMCkgLyBkZXQ7Cit9CisKK2Zsb2F0MyB0b0xpbmVhclNwYWNlKGZsb2F0
MyBjb2xvcikgeworICAgIHJldHVybiBwb3coY29sb3IsIGZsb2F0MygyLjIsIDIuMiwgMi4yKSk7
Cit9CisKK2Zsb2F0MyB0b0dhbW1hU3BhY2UoZmxvYXQzIGNvbG9yKSB7CisgICAgcmV0dXJuIHBv
dyhjb2xvciwgZmxvYXQzKDEuMCAvIDIuMiwgMS4wIC8gMi4yLCAxLjAgLyAyLjIpKTsKK30KKwor
ZmxvYXQgc3F1YXJlKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJuIHZhbHVlICogdmFsdWU7Cit9
CisKK2Zsb2F0IHBvdzUoZmxvYXQgdmFsdWUpIHsKKyAgICBmbG9hdCBzcSA9IHZhbHVlICogdmFs
dWU7CisgICAgcmV0dXJuIHNxICogc3EgKiB2YWx1ZTsKK30KKworZmxvYXQgZ2V0THVtaW5hbmNl
KGZsb2F0MyBjb2xvcikgeworICAgIHJldHVybiBjbGFtcChkb3QoY29sb3IsIGZsb2F0MygwLjIx
MjYsIDAuNzE1MiwgMC4wNzIyKSksIDAuLCAxLik7Cit9CisKK2Zsb2F0IGdldFJhbmQoZmxvYXQy
IHNlZWQpIHsKKyAgICByZXR1cm4gZnJhYyhzaW4oZG90KHNlZWQueHksIGZsb2F0MigxMi45ODk4
LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTsKK30KKworZmxvYXQgZGl0aGVyKGZsb2F0MiBzZWVk
LCBmbG9hdCB2YXJpYW5jZUFtb3VudCkgeworICAgIGZsb2F0IHJhbmQgPSBnZXRSYW5kKHNlZWQp
OworICAgIGZsb2F0IGRpdGhlciA9IGxlcnAoLXZhcmlhbmNlQW1vdW50IC8gMjU1LjAsIHZhcmlh
bmNlQW1vdW50IC8gMjU1LjAsIHJhbmQpOworICAgIHJldHVybiBkaXRoZXI7Cit9CisKK2Zsb2F0
NCB0b1JHQkQoZmxvYXQzIGNvbG9yKSB7CisgICAgZmxvYXQgbWF4UkdCID0gbWF4KG1heChjb2xv
ci54LCBtYXgoY29sb3IueSwgY29sb3IueikpLCAwLjAwMDAwMDEpOworICAgIGZsb2F0IEQgPSBt
YXgoMjU1LjAgLyBtYXhSR0IsIDEuKTsKKyAgICBEID0gY2xhbXAoZmxvb3IoRCkgLyAyNTUuMCwg
MC4sIDEuKTsKKyAgICBmbG9hdDMgcmdiID0gY29sb3IgKiBEOworICAgIHJnYiA9IHRvR2FtbWFT
cGFjZShyZ2IpOworICAgIHJldHVybiBmbG9hdDQocmdiLCBEKTsKK30KKworZmxvYXQzIGZyb21S
R0JEKGZsb2F0NCByZ2JkKSB7CisgICAgcmdiZC54eXogPSB0b0xpbmVhclNwYWNlKHJnYmQueHl6
KTsKKyAgICByZXR1cm4gcmdiZC54eXogLyByZ2JkLnc7Cit9CisKK2Zsb2F0IGNvbnZlcnRSb3Vn
aG5lc3NUb0F2ZXJhZ2VTbG9wZShmbG9hdCByb3VnaG5lc3MpIHsKKyAgICByZXR1cm4gc3F1YXJl
KHJvdWdobmVzcykgKyAwLjAwMDU7Cit9CisKK2Zsb2F0IGZyZXNuZWxHcmF6aW5nUmVmbGVjdGFu
Y2UoZmxvYXQgcmVmbGVjdGFuY2UwKSB7CisgICAgZmxvYXQgcmVmbGVjdGFuY2U5MCA9IGNsYW1w
KHJlZmxlY3RhbmNlMCAqIDI1LjAsIDAuMCwgMS4wKTsKKyAgICByZXR1cm4gcmVmbGVjdGFuY2U5
MDsKK30KKworZmxvYXQyIGdldEFBUm91Z2huZXNzRmFjdG9ycyhmbG9hdDMgbm9ybWFsVmVjdG9y
KSB7CisgICAgcmV0dXJuIGZsb2F0MigwLiwgMC4pOworfQorCitmbG9hdDQgYXBwbHlJbWFnZVBy
b2Nlc3NpbmcoZmxvYXQ0IHJlc3VsdCkgeworICAgIHJlc3VsdC54eXogPSB0b0dhbW1hU3BhY2Uo
cmVzdWx0Lnh5eik7CisgICAgcmVzdWx0Lnh5eiA9IGNsYW1wKHJlc3VsdC54eXosIGZsb2F0Mygw
LjAsIDAuMCwgMC4wKSwgZmxvYXQzKDEuMCwgMS4wLCAxLjApKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitmbG9hdDMgY29tcHV0ZUVudmlyb25tZW50SXJyYWRpYW5jZShmbG9hdDMgbm9ybWFs
LCBjb25zdGFudCBNYXRlcmlhbCogbWF0ZXJpYWwpIHsKKyAgICByZXR1cm4gbWF0ZXJpYWwtPnZT
cGhlcmljYWxMMDAKKyAgICAgICAgKyBtYXRlcmlhbC0+dlNwaGVyaWNhbEwxXzEgKiAobm9ybWFs
LnkpCisgICAgICAgICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMTAgKiAobm9ybWFsLnopCisgICAg
ICAgICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMTEgKiAobm9ybWFsLngpCisgICAgICAgICsgbWF0
ZXJpYWwtPnZTcGhlcmljYWxMMl8yICogKG5vcm1hbC55ICogbm9ybWFsLngpCisgICAgICAgICsg
bWF0ZXJpYWwtPnZTcGhlcmljYWxMMl8xICogKG5vcm1hbC55ICogbm9ybWFsLnopCisgICAgICAg
ICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMjAgKiAoKDMuMCAqIG5vcm1hbC56ICogbm9ybWFsLnop
IC0gMS4wKQorICAgICAgICArIG1hdGVyaWFsLT52U3BoZXJpY2FsTDIxICogKG5vcm1hbC56ICog
bm9ybWFsLngpCisgICAgICAgICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMjIgKiAobm9ybWFsLngg
KiBub3JtYWwueCAtIChub3JtYWwueSAqIG5vcm1hbC55KSk7Cit9CisKK3N0cnVjdCBQcmVMaWdo
dGluZ0luZm8geworICAgIGZsb2F0MyBsaWdodE9mZnNldDsKKyAgICBmbG9hdCBsaWdodERpc3Rh
bmNlU3F1YXJlZDsKKyAgICBmbG9hdCBsaWdodERpc3RhbmNlOworICAgIGZsb2F0IGF0dGVudWF0
aW9uOworICAgIGZsb2F0MyBMOworICAgIGZsb2F0MyBIOworICAgIGZsb2F0IE5kb3RWOworICAg
IGZsb2F0IE5kb3RMVW5jbGFtcGVkOworICAgIGZsb2F0IE5kb3RMOworICAgIGZsb2F0IFZkb3RI
OworICAgIGZsb2F0IHJvdWdobmVzczsKK30KKworUHJlTGlnaHRpbmdJbmZvIGNvbXB1dGVQb2lu
dEFuZFNwb3RQcmVMaWdodGluZ0luZm8oZmxvYXQ0IGxpZ2h0RGF0YSwgZmxvYXQzIFYsIGZsb2F0
MyBOLCBmbG9hdDMgdlBvc2l0aW9uVykgeworICAgIFByZUxpZ2h0aW5nSW5mbyByZXN1bHQ7Cisg
ICAgcmVzdWx0LmxpZ2h0T2Zmc2V0ID0gbGlnaHREYXRhLnh5eiAtIHZQb3NpdGlvblc7CisgICAg
cmVzdWx0LmxpZ2h0RGlzdGFuY2VTcXVhcmVkID0gZG90KHJlc3VsdC5saWdodE9mZnNldCwgcmVz
dWx0LmxpZ2h0T2Zmc2V0KTsKKyAgICByZXN1bHQubGlnaHREaXN0YW5jZSA9IHNxcnQocmVzdWx0
LmxpZ2h0RGlzdGFuY2VTcXVhcmVkKTsKKyAgICByZXN1bHQuTCA9IG5vcm1hbGl6ZShyZXN1bHQu
bGlnaHRPZmZzZXQpOworICAgIHJlc3VsdC5IID0gbm9ybWFsaXplKFYgKyByZXN1bHQuTCk7Cisg
ICAgcmVzdWx0LlZkb3RIID0gY2xhbXAoZG90KFYsIHJlc3VsdC5IKSwgMC4wLCAxLjApOworICAg
IHJlc3VsdC5OZG90TFVuY2xhbXBlZCA9IGRvdChOLCByZXN1bHQuTCk7CisgICAgcmVzdWx0Lk5k
b3RMID0gY2xhbXAocmVzdWx0Lk5kb3RMVW5jbGFtcGVkLCAwLjAwMDAwMDEsIDEuMCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworUHJlTGlnaHRpbmdJbmZvIGNvbXB1dGVEaXJlY3Rpb25hbFBy
ZUxpZ2h0aW5nSW5mbyhmbG9hdDQgbGlnaHREYXRhLCBmbG9hdDMgViwgZmxvYXQzIE4pIHsKKyAg
ICBQcmVMaWdodGluZ0luZm8gcmVzdWx0OworICAgIHJlc3VsdC5saWdodERpc3RhbmNlID0gbGVu
Z3RoKC1saWdodERhdGEueHl6KTsKKyAgICByZXN1bHQuTCA9IG5vcm1hbGl6ZSgtbGlnaHREYXRh
Lnh5eik7CisgICAgcmVzdWx0LkggPSBub3JtYWxpemUoViArIHJlc3VsdC5MKTsKKyAgICByZXN1
bHQuVmRvdEggPSBjbGFtcChkb3QoViwgcmVzdWx0LkgpLCAwLjAsIDEuMCk7CisgICAgcmVzdWx0
Lk5kb3RMVW5jbGFtcGVkID0gZG90KE4sIHJlc3VsdC5MKTsKKyAgICByZXN1bHQuTmRvdEwgPSBj
bGFtcChyZXN1bHQuTmRvdExVbmNsYW1wZWQsIDAuMDAwMDAwMSwgMS4wKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitQcmVMaWdodGluZ0luZm8gY29tcHV0ZUhlbWlzcGhlcmljUHJlTGlnaHRp
bmdJbmZvKGZsb2F0NCBsaWdodERhdGEsIGZsb2F0MyBWLCBmbG9hdDMgTikgeworICAgIFByZUxp
Z2h0aW5nSW5mbyByZXN1bHQ7CisgICAgcmVzdWx0Lk5kb3RMID0gZG90KE4sIGxpZ2h0RGF0YS54
eXopICogMC41ICsgMC41OworICAgIHJlc3VsdC5OZG90TCA9IGNsYW1wKHJlc3VsdC5OZG90TCwg
MC4wMDAwMDAxLCAxLjApOworICAgIHJlc3VsdC5OZG90TFVuY2xhbXBlZCA9IHJlc3VsdC5OZG90
TDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmbG9hdCBjb21wdXRlRGlzdGFuY2VMaWdodEZh
bGxvZmZfU3RhbmRhcmQoZmxvYXQzIGxpZ2h0T2Zmc2V0LCBmbG9hdCByYW5nZSkgeworICAgIHJl
dHVybiBtYXgoMC4sIDEuMCAtIGxlbmd0aChsaWdodE9mZnNldCkgLyByYW5nZSk7Cit9CisKK2Zs
b2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9QaHlzaWNhbChmbG9hdCBsaWdodERpc3Rh
bmNlU3F1YXJlZCkgeworICAgIHJldHVybiAxLjAgLyBtYXgobGlnaHREaXN0YW5jZVNxdWFyZWQs
IDAuMDAwMDAwMSk7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9HTFRG
KGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkLCBmbG9hdCBpbnZlcnNlU3F1YXJlZFJhbmdlKSB7
CisgICAgZmxvYXQgbGlnaHREaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgobGlnaHREaXN0YW5j
ZVNxdWFyZWQsIDAuMDAwMDAwMSk7CisgICAgZmxvYXQgZmFjdG9yID0gbGlnaHREaXN0YW5jZVNx
dWFyZWQgKiBpbnZlcnNlU3F1YXJlZFJhbmdlOworICAgIGZsb2F0IGF0dGVudWF0aW9uID0gY2xh
bXAoMS4wIC0gZmFjdG9yICogZmFjdG9yLCAwLjAsIDEuMCk7CisgICAgYXR0ZW51YXRpb24gKj0g
YXR0ZW51YXRpb247CisgICAgbGlnaHREaXN0YW5jZUZhbGxvZmYgKj0gYXR0ZW51YXRpb247Cisg
ICAgcmV0dXJuIGxpZ2h0RGlzdGFuY2VGYWxsb2ZmOworfQorCitmbG9hdCBjb21wdXRlRGlzdGFu
Y2VMaWdodEZhbGxvZmYoZmxvYXQzIGxpZ2h0T2Zmc2V0LCBmbG9hdCBsaWdodERpc3RhbmNlU3F1
YXJlZCwgZmxvYXQgcmFuZ2UsIGZsb2F0IGludmVyc2VTcXVhcmVkUmFuZ2UpIHsKKyAgICByZXR1
cm4gY29tcHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGxpZ2h0RGlzdGFuY2VTcXVh
cmVkKTsKK30KKworZmxvYXQgY29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmX1N0YW5kYXJk
KGZsb2F0MyBsaWdodERpcmVjdGlvbiwgZmxvYXQzIGRpcmVjdGlvblRvTGlnaHRDZW50ZXJXLCBm
bG9hdCBjb3NIYWxmQW5nbGUsIGZsb2F0IGV4cG9uZW50KSB7CisgICAgZmxvYXQgZmFsbG9mZiA9
IDAuMDsKKyAgICBmbG9hdCBjb3NBbmdsZSA9IG1heChkb3QoLWxpZ2h0RGlyZWN0aW9uLCBkaXJl
Y3Rpb25Ub0xpZ2h0Q2VudGVyVyksIDAuMDAwMDAwMSk7CisgICAgaWYgKGNvc0FuZ2xlID49IGNv
c0hhbGZBbmdsZSkgeworICAgICAgICBmYWxsb2ZmID0gbWF4KDAuLCBwb3coY29zQW5nbGUsIGV4
cG9uZW50KSk7CisgICAgfQorICAgIHJldHVybiBmYWxsb2ZmOworfQorCitmbG9hdCBjb21wdXRl
RGlyZWN0aW9uYWxMaWdodEZhbGxvZmZfUGh5c2ljYWwoZmxvYXQzIGxpZ2h0RGlyZWN0aW9uLCBm
bG9hdDMgZGlyZWN0aW9uVG9MaWdodENlbnRlclcsIGZsb2F0IGNvc0hhbGZBbmdsZSkgeworICAg
IGZsb2F0IGtNaW51c0xvZzJDb25lQW5nbGVJbnRlbnNpdHlSYXRpbyA9IDYuNjQzODU2MTg5Nzc7
CisgICAgZmxvYXQgY29uY2VudHJhdGlvbkthcHBhID0ga01pbnVzTG9nMkNvbmVBbmdsZUludGVu
c2l0eVJhdGlvIC8gKDEuMCAtIGNvc0hhbGZBbmdsZSk7CisgICAgZmxvYXQ0IGxpZ2h0RGlyZWN0
aW9uU3ByZWFkU0cgPSBmbG9hdDQoLWxpZ2h0RGlyZWN0aW9uICogY29uY2VudHJhdGlvbkthcHBh
LCAtY29uY2VudHJhdGlvbkthcHBhKTsKKyAgICBmbG9hdCBmYWxsb2ZmID0gZXhwMihkb3QoZmxv
YXQ0KGRpcmVjdGlvblRvTGlnaHRDZW50ZXJXLCAxLjApLCBsaWdodERpcmVjdGlvblNwcmVhZFNH
KSk7CisgICAgcmV0dXJuIGZhbGxvZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXJlY3Rpb25hbExp
Z2h0RmFsbG9mZl9HTFRGKGZsb2F0MyBsaWdodERpcmVjdGlvbiwgZmxvYXQzIGRpcmVjdGlvblRv
TGlnaHRDZW50ZXJXLCBmbG9hdCBsaWdodEFuZ2xlU2NhbGUsIGZsb2F0IGxpZ2h0QW5nbGVPZmZz
ZXQpIHsKKyAgICBmbG9hdCBjZCA9IGRvdCgtbGlnaHREaXJlY3Rpb24sIGRpcmVjdGlvblRvTGln
aHRDZW50ZXJXKTsKKyAgICBmbG9hdCBmYWxsb2ZmID0gY2xhbXAoY2QgKiBsaWdodEFuZ2xlU2Nh
bGUgKyBsaWdodEFuZ2xlT2Zmc2V0LCAwLjAsIDEuMCk7CisgICAgZmFsbG9mZiAqPSBmYWxsb2Zm
OworICAgIHJldHVybiBmYWxsb2ZmOworfQorCitmbG9hdCBjb21wdXRlRGlyZWN0aW9uYWxMaWdo
dEZhbGxvZmYoZmxvYXQzIGxpZ2h0RGlyZWN0aW9uLCBmbG9hdDMgZGlyZWN0aW9uVG9MaWdodENl
bnRlclcsIGZsb2F0IGNvc0hhbGZBbmdsZSwgZmxvYXQgZXhwb25lbnQsIGZsb2F0IGxpZ2h0QW5n
bGVTY2FsZSwgZmxvYXQgbGlnaHRBbmdsZU9mZnNldCkgeworICAgIHJldHVybiBjb21wdXRlRGly
ZWN0aW9uYWxMaWdodEZhbGxvZmZfUGh5c2ljYWwobGlnaHREaXJlY3Rpb24sIGRpcmVjdGlvblRv
TGlnaHRDZW50ZXJXLCBjb3NIYWxmQW5nbGUpOworfQorCitmbG9hdDMgZ2V0RW5lcmd5Q29uc2Vy
dmF0aW9uRmFjdG9yKGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50UjAsIGZsb2F0MyBlbnZpcm9u
bWVudEJyZGYpIHsKKyAgICByZXR1cm4gZmxvYXQzKDEuMCwgMS4wLCAxLjApICsgc3BlY3VsYXJF
bnZpcm9ubWVudFIwICogKDEuMCAvIGVudmlyb25tZW50QnJkZi55IC0gMS4wKTsKK30KKworZmxv
YXQzIGdldEJSREZMb29rdXAoZmxvYXQgTmRvdFYsIGZsb2F0IHBlcmNlcHR1YWxSb3VnaG5lc3Ms
IFRleHR1cmUyRDxmbG9hdDQ+IGVudmlyb25tZW50QnJkZlNhbXBsZXJUZXh0dXJlLCBzYW1wbGVy
IGVudmlyb25tZW50QnJkZlNhbXBsZXJTYW1wbGVyKSB7CisgICAgZmxvYXQyIFVWID0gZmxvYXQy
KE5kb3RWLCBwZXJjZXB0dWFsUm91Z2huZXNzKTsKKyAgICBmbG9hdDQgYnJkZkxvb2t1cCA9IFNh
bXBsZShlbnZpcm9ubWVudEJyZGZTYW1wbGVyVGV4dHVyZSwgZW52aXJvbm1lbnRCcmRmU2FtcGxl
clNhbXBsZXIsIFVWKTsKKyAgICByZXR1cm4gYnJkZkxvb2t1cC54eXo7Cit9CisKK2Zsb2F0MyBn
ZXRSZWZsZWN0YW5jZUZyb21CUkRGTG9va3VwKGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50UjAs
IGZsb2F0MyBlbnZpcm9ubWVudEJyZGYpIHsKKyAgICBmbG9hdDMgcmVmbGVjdGFuY2UgPSBsZXJw
KGVudmlyb25tZW50QnJkZi54eHgsIGVudmlyb25tZW50QnJkZi55eXksIHNwZWN1bGFyRW52aXJv
bm1lbnRSMCk7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlOworfQorCitmbG9hdDMgZnJlc25lbFNj
aGxpY2tHR1goZmxvYXQgVmRvdEgsIGZsb2F0MyByZWZsZWN0YW5jZTAsIGZsb2F0MyByZWZsZWN0
YW5jZTkwKSB7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlMCArIChyZWZsZWN0YW5jZTkwIC0gcmVm
bGVjdGFuY2UwKSAqIHBvdzUoMS4wIC0gVmRvdEgpOworfQorCitmbG9hdCBmcmVzbmVsU2NobGlj
a0dHWChmbG9hdCBWZG90SCwgZmxvYXQgcmVmbGVjdGFuY2UwLCBmbG9hdCByZWZsZWN0YW5jZTkw
KSB7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlMCArIChyZWZsZWN0YW5jZTkwIC0gcmVmbGVjdGFu
Y2UwKSAqIHBvdzUoMS4wIC0gVmRvdEgpOworfQorCitmbG9hdCBub3JtYWxEaXN0cmlidXRpb25G
dW5jdGlvbl9Ucm93YnJpZGdlUmVpdHpHR1goZmxvYXQgTmRvdEgsIGZsb2F0IGFscGhhRykgewor
ICAgIGZsb2F0IGEyID0gc3F1YXJlKGFscGhhRyk7CisgICAgZmxvYXQgZCA9IE5kb3RIICogTmRv
dEggKiAoYTIgLSAxLjApICsgMS4wOworICAgIHJldHVybiBhMiAvICgzLjE0MTU5MjY1MzU4OTc5
MzIzODQ2MjY0MzM4MzI3OTUgKiBkICogZCk7Cit9CisKK2Zsb2F0IHNtaXRoVmlzaWJpbGl0eV9H
R1hDb3JyZWxhdGVkKGZsb2F0IE5kb3RMLCBmbG9hdCBOZG90ViwgZmxvYXQgYWxwaGFHKSB7Cisg
ICAgZmxvYXQgYTIgPSBhbHBoYUcgKiBhbHBoYUc7CisgICAgZmxvYXQgR0dYViA9IE5kb3RMICog
c3FydChOZG90ViAqIChOZG90ViAtIGEyICogTmRvdFYpICsgYTIpOworICAgIGZsb2F0IEdHWEwg
PSBOZG90ViAqIHNxcnQoTmRvdEwgKiAoTmRvdEwgLSBhMiAqIE5kb3RMKSArIGEyKTsKKyAgICBy
ZXR1cm4gMC41IC8gKEdHWFYgKyBHR1hMKTsKK30KKworZmxvYXQgZGlmZnVzZUJSREZfQnVybGV5
KGZsb2F0IE5kb3RMLCBmbG9hdCBOZG90ViwgZmxvYXQgVmRvdEgsIGZsb2F0IHJvdWdobmVzcykg
eworICAgIGZsb2F0IGRpZmZ1c2VGcmVzbmVsTlYgPSBwb3c1KGNsYW1wKDEuMCAtIE5kb3RMLCAw
LjAwMDAwMDEsIDEuMCkpOworICAgIGZsb2F0IGRpZmZ1c2VGcmVzbmVsTkwgPSBwb3c1KGNsYW1w
KDEuMCAtIE5kb3RWLCAwLjAwMDAwMDEsIDEuMCkpOworICAgIGZsb2F0IGRpZmZ1c2VGcmVzbmVs
OTAgPSAwLjUgKyAyLjAgKiBWZG90SCAqIFZkb3RIICogcm91Z2huZXNzOworICAgIGZsb2F0IGZy
ZXNuZWwgPSAoMS4wICsgKGRpZmZ1c2VGcmVzbmVsOTAgLSAxLjApICogZGlmZnVzZUZyZXNuZWxO
TCkgKgorICAgICAgICAoMS4wICsgKGRpZmZ1c2VGcmVzbmVsOTAgLSAxLjApICogZGlmZnVzZUZy
ZXNuZWxOVik7CisgICAgcmV0dXJuIGZyZXNuZWwgLyAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0
MzM4MzI3OTU7Cit9CisKK3N0cnVjdCBMaWdodGluZ0luZm8geworICAgIGZsb2F0MyBkaWZmdXNl
OworfQorCitmbG9hdCBhZGp1c3RSb3VnaG5lc3NGcm9tTGlnaHRQcm9wZXJ0aWVzKGZsb2F0IHJv
dWdobmVzcywgZmxvYXQgbGlnaHRSYWRpdXMsIGZsb2F0IGxpZ2h0RGlzdGFuY2UpIHsKKyAgICBm
bG9hdCBsaWdodFJvdWdobmVzcyA9IGxpZ2h0UmFkaXVzIC8gbGlnaHREaXN0YW5jZTsKKyAgICBm
bG9hdCB0b3RhbFJvdWdobmVzcyA9IGNsYW1wKGxpZ2h0Um91Z2huZXNzICsgcm91Z2huZXNzLCAw
LjAsIDEuMCk7CisgICAgcmV0dXJuIHRvdGFsUm91Z2huZXNzOworfQorCitmbG9hdDMgY29tcHV0
ZUhlbWlzcGhlcmljRGlmZnVzZUxpZ2h0aW5nKFByZUxpZ2h0aW5nSW5mbyBpbmZvLCBmbG9hdDMg
bGlnaHRDb2xvciwgZmxvYXQzIGdyb3VuZENvbG9yKSB7CisgICAgcmV0dXJuIGxlcnAoZ3JvdW5k
Q29sb3IsIGxpZ2h0Q29sb3IsIGZsb2F0MyhpbmZvLk5kb3RMLCBpbmZvLk5kb3RMLCBpbmZvLk5k
b3RMKSk7Cit9CisKK2Zsb2F0MyBjb21wdXRlRGlmZnVzZUxpZ2h0aW5nKFByZUxpZ2h0aW5nSW5m
byBpbmZvLCBmbG9hdDMgbGlnaHRDb2xvcikgeworICAgIGZsb2F0IGRpZmZ1c2VUZXJtID0gZGlm
ZnVzZUJSREZfQnVybGV5KGluZm8uTmRvdEwsIGluZm8uTmRvdFYsIGluZm8uVmRvdEgsIGluZm8u
cm91Z2huZXNzKTsKKyAgICByZXR1cm4gZGlmZnVzZVRlcm0gKiBpbmZvLmF0dGVudWF0aW9uICog
aW5mby5OZG90TCAqIGxpZ2h0Q29sb3I7Cit9CisKK2Zsb2F0MiBjb21wdXRlUHJvamVjdGlvblRl
eHR1cmVEaWZmdXNlTGlnaHRpbmdVVihmbG9hdDR4NCB0ZXh0dXJlUHJvamVjdGlvbk1hdHJpeCwg
ZmxvYXQzIHZQb3NpdGlvblcpIHsKKyAgICBmbG9hdDQgc3RycSA9IG11bCh0ZXh0dXJlUHJvamVj
dGlvbk1hdHJpeCwgZmxvYXQ0KHZQb3NpdGlvblcsIDEuMCkpOworICAgIHN0cnEgLz0gc3RycS53
OworICAgIHJldHVybiBzdHJxLnh5OworfQorCitmbG9hdCBnZXRMb2RGcm9tQWxwaGFHKGZsb2F0
IGN1YmVNYXBEaW1lbnNpb25QaXhlbHMsIGZsb2F0IG1pY3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZSkg
eworICAgIGZsb2F0IG1pY3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZVRleGVscyA9IGN1YmVNYXBEaW1l
bnNpb25QaXhlbHMgKiBtaWNyb3N1cmZhY2VBdmVyYWdlU2xvcGU7CisgICAgZmxvYXQgbG9kID0g
bG9nMihtaWNyb3N1cmZhY2VBdmVyYWdlU2xvcGVUZXhlbHMpOworICAgIHJldHVybiBsb2Q7Cit9
CisKK2Zsb2F0IGdldExpbmVhckxvZEZyb21Sb3VnaG5lc3MoZmxvYXQgY3ViZU1hcERpbWVuc2lv
blBpeGVscywgZmxvYXQgcm91Z2huZXNzKSB7CisgICAgZmxvYXQgbG9kID0gbG9nMihjdWJlTWFw
RGltZW5zaW9uUGl4ZWxzKSAqIHJvdWdobmVzczsKKyAgICByZXR1cm4gbG9kOworfQorCitmbG9h
dCBlbnZpcm9ubWVudFJhZGlhbmNlT2NjbHVzaW9uKGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGZs
b2F0IE5kb3RWVW5jbGFtcGVkKSB7CisgICAgZmxvYXQgdGVtcCA9IE5kb3RWVW5jbGFtcGVkICsg
YW1iaWVudE9jY2x1c2lvbjsKKyAgICByZXR1cm4gY2xhbXAoc3F1YXJlKHRlbXApIC0gMS4wICsg
YW1iaWVudE9jY2x1c2lvbiwgMC4wLCAxLjApOworfQorCitmbG9hdCBlbnZpcm9ubWVudEhvcml6
b25PY2NsdXNpb24oZmxvYXQzIHZpZXcsIGZsb2F0MyBub3JtYWwpIHsKKyAgICBmbG9hdDMgcmVm
bGVjdGlvbiA9IHJlZmxlY3Qodmlldywgbm9ybWFsKTsKKyAgICBmbG9hdCB0ZW1wID0gY2xhbXAo
MS4wICsgMS4xICogZG90KHJlZmxlY3Rpb24sIG5vcm1hbCksIDAuMCwgMS4wKTsKKyAgICByZXR1
cm4gc3F1YXJlKHRlbXApOworfQorCitmbG9hdDMgcGFyYWxsYXhDb3JyZWN0Tm9ybWFsKGZsb2F0
MyB2ZXJ0ZXhQb3MsIGZsb2F0MyBvcmlnVmVjLCBmbG9hdDMgY3ViZVNpemUsIGZsb2F0MyBjdWJl
UG9zKSB7CisgICAgZmxvYXQzIGludk9yaWdWZWMgPSBmbG9hdDMoMS4wLCAxLjAsIDEuMCkgLyBv
cmlnVmVjOworICAgIGZsb2F0MyBoYWxmU2l6ZSA9IGN1YmVTaXplICogMC41OworICAgIGZsb2F0
MyBpbnRlcnNlY0F0TWF4UGxhbmUgPSAoY3ViZVBvcyArIGhhbGZTaXplIC0gdmVydGV4UG9zKSAq
IGludk9yaWdWZWM7CisgICAgZmxvYXQzIGludGVyc2VjQXRNaW5QbGFuZSA9IChjdWJlUG9zIC0g
aGFsZlNpemUgLSB2ZXJ0ZXhQb3MpICogaW52T3JpZ1ZlYzsKKyAgICBmbG9hdDMgbGFyZ2VzdElu
dGVyc2VjID0gbWF4KGludGVyc2VjQXRNYXhQbGFuZSwgaW50ZXJzZWNBdE1pblBsYW5lKTsKKyAg
ICBmbG9hdCBkaXN0YW5jZSA9IG1pbihtaW4obGFyZ2VzdEludGVyc2VjLngsIGxhcmdlc3RJbnRl
cnNlYy55KSwgbGFyZ2VzdEludGVyc2VjLnopOworICAgIGZsb2F0MyBpbnRlcnNlY3RQb3NpdGlv
bldTID0gdmVydGV4UG9zICsgb3JpZ1ZlYyAqIGRpc3RhbmNlOworICAgIHJldHVybiBpbnRlcnNl
Y3RQb3NpdGlvbldTIC0gY3ViZVBvczsKK30KKworZmxvYXQzIGNvbXB1dGVGaXhlZEVxdWlyZWN0
YW5ndWxhckNvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQz
IGRpcmVjdGlvbikgeworICAgIGZsb2F0IGxvbiA9IGF0YW4yKGRpcmVjdGlvbi56LCBkaXJlY3Rp
b24ueCk7CisgICAgZmxvYXQgbGF0ID0gYWNvcyhkaXJlY3Rpb24ueSk7CisgICAgZmxvYXQyIHNw
aGVyZUNvb3JkcyA9IGZsb2F0Mihsb24sIGxhdCkgKiAwLjE1OTE1NDk0ICogMi4wOworICAgIGZs
b2F0IHMgPSBzcGhlcmVDb29yZHMueCAqIDAuNSArIDAuNTsKKyAgICBmbG9hdCB0ID0gc3BoZXJl
Q29vcmRzLnk7CisgICAgcmV0dXJuIGZsb2F0MyhzLCB0LCAwKTsKK30KKworZmxvYXQzIGNvbXB1
dGVNaXJyb3JlZEZpeGVkRXF1aXJlY3Rhbmd1bGFyQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxv
YXQzIHdvcmxkTm9ybWFsLCBmbG9hdDMgZGlyZWN0aW9uKSB7CisgICAgZmxvYXQgbG9uID0gYXRh
bjIoZGlyZWN0aW9uLnosIGRpcmVjdGlvbi54KTsKKyAgICBmbG9hdCBsYXQgPSBhY29zKGRpcmVj
dGlvbi55KTsKKyAgICBmbG9hdDIgc3BoZXJlQ29vcmRzID0gZmxvYXQyKGxvbiwgbGF0KSAqIDAu
MTU5MTU0OTQgKiAyLjA7CisgICAgZmxvYXQgcyA9IHNwaGVyZUNvb3Jkcy54ICogMC41ICsgMC41
OworICAgIGZsb2F0IHQgPSBzcGhlcmVDb29yZHMueTsKKyAgICByZXR1cm4gZmxvYXQzKDEuMCAt
IHMsIHQsIDApOworfQorCitmbG9hdDMgY29tcHV0ZUVxdWlyZWN0YW5ndWxhckNvb3JkcyhmbG9h
dDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQzIGV5ZVBvc2l0aW9uLCBmbG9h
dDR4NCByZWZsZWN0aW9uTWF0cml4KSB7CisgICAgZmxvYXQzIGNhbWVyYVRvVmVydGV4ID0gbm9y
bWFsaXplKHdvcmxkUG9zLnh5eiAtIGV5ZVBvc2l0aW9uKTsKKyAgICBmbG9hdDMgciA9IG5vcm1h
bGl6ZShyZWZsZWN0KGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCkpOworICAgIHIgPSBtdWwo
cmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KHIsIDApKS54eXo7CisgICAgZmxvYXQgbG9uID0gYXRh
bjIoci56LCByLngpOworICAgIGZsb2F0IGxhdCA9IGFjb3Moci55KTsKKyAgICBmbG9hdDIgc3Bo
ZXJlQ29vcmRzID0gZmxvYXQyKGxvbiwgbGF0KSAqIDAuMTU5MTU0OTQgKiAyLjA7CisgICAgZmxv
YXQgcyA9IHNwaGVyZUNvb3Jkcy54ICogMC41ICsgMC41OworICAgIGZsb2F0IHQgPSBzcGhlcmVD
b29yZHMueTsKKyAgICByZXR1cm4gZmxvYXQzKHMsIHQsIDApOworfQorCitmbG9hdDMgY29tcHV0
ZVNwaGVyaWNhbENvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxv
YXQ0eDQgdmlldywgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAgIGZsb2F0MyB2aWV3
RGlyID0gbm9ybWFsaXplKG11bCh2aWV3LCB3b3JsZFBvcykueHl6KTsKKyAgICBmbG9hdDMgdmll
d05vcm1hbCA9IG5vcm1hbGl6ZShtdWwodmlldywgZmxvYXQ0KHdvcmxkTm9ybWFsLCAwLjApKS54
eXopOworICAgIGZsb2F0MyByID0gcmVmbGVjdCh2aWV3RGlyLCB2aWV3Tm9ybWFsKTsKKyAgICBy
ID0gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChyLCAwKSkueHl6OworICAgIHIueiA9IHIu
eiAtIDEuMDsKKyAgICBmbG9hdCBtID0gMi4wICogbGVuZ3RoKHIpOworICAgIHJldHVybiBmbG9h
dDMoci54IC8gbSArIDAuNSwgMS4wIC0gci55IC8gbSAtIDAuNSwgMCk7Cit9CisKK2Zsb2F0MyBj
b21wdXRlUGxhbmFyQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBm
bG9hdDMgZXllUG9zaXRpb24sIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgpIHsKKyAgICBmbG9h
dDMgdmlld0RpciA9IHdvcmxkUG9zLnh5eiAtIGV5ZVBvc2l0aW9uOworICAgIGZsb2F0MyBjb29y
ZHMgPSBub3JtYWxpemUocmVmbGVjdCh2aWV3RGlyLCB3b3JsZE5vcm1hbCkpOworICAgIHJldHVy
biBtdWwocmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KGNvb3JkcywgMSkpLnh5ejsKK30KKworZmxv
YXQzIGNvbXB1dGVDdWJpY0Nvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1h
bCwgZmxvYXQzIGV5ZVBvc2l0aW9uLCBmbG9hdDR4NCByZWZsZWN0aW9uTWF0cml4KSB7CisgICAg
ZmxvYXQzIHZpZXdEaXIgPSBub3JtYWxpemUod29ybGRQb3MueHl6IC0gZXllUG9zaXRpb24pOwor
ICAgIGZsb2F0MyBjb29yZHMgPSByZWZsZWN0KHZpZXdEaXIsIHdvcmxkTm9ybWFsKTsKKyAgICBj
b29yZHMgPSBtdWwocmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KGNvb3JkcywgMCkpLnh5ejsKKyAg
ICByZXR1cm4gY29vcmRzOworfQorCitmbG9hdDMgY29tcHV0ZUN1YmljTG9jYWxDb29yZHMoZmxv
YXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29ybGROb3JtYWwsIGZsb2F0MyBleWVQb3NpdGlvbiwgZmxv
YXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQzIHJlZmxlY3Rpb25TaXplLCBmbG9hdDMgcmVm
bGVjdGlvblBvc2l0aW9uKSB7CisgICAgZmxvYXQzIHZpZXdEaXIgPSBub3JtYWxpemUod29ybGRQ
b3MueHl6IC0gZXllUG9zaXRpb24pOworICAgIGZsb2F0MyBjb29yZHMgPSByZWZsZWN0KHZpZXdE
aXIsIHdvcmxkTm9ybWFsKTsKKyAgICBjb29yZHMgPSBwYXJhbGxheENvcnJlY3ROb3JtYWwod29y
bGRQb3MueHl6LCBjb29yZHMsIHJlZmxlY3Rpb25TaXplLCByZWZsZWN0aW9uUG9zaXRpb24pOwor
ICAgIGNvb3JkcyA9IG11bChyZWZsZWN0aW9uTWF0cml4LCBmbG9hdDQoY29vcmRzLCAwKSkueHl6
OworICAgIHJldHVybiBjb29yZHM7Cit9CisKK2Zsb2F0MyBjb21wdXRlUHJvamVjdGlvbkNvb3Jk
cyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0NHg0IHZpZXcsIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRy
aXgpIHsKKyAgICByZXR1cm4gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIG11bCh2aWV3LCB3b3JsZFBv
cykpLnh5ejsKK30KKworZmxvYXQzIGNvbXB1dGVTa3lCb3hDb29yZHMoZmxvYXQzIHBvc2l0aW9u
VywgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAgIHJldHVybiBtdWwocmVmbGVjdGlv
bk1hdHJpeCwgZmxvYXQ0KHBvc2l0aW9uVywgMCkpLnh5ejsKK30KKworZmxvYXQzIGNvbXB1dGVS
ZWZsZWN0aW9uQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9h
dDQgdkV5ZVBvc2l0aW9uLCBmbG9hdDR4NCByZWZsZWN0aW9uTWF0cml4KSB7CisgICAgcmV0dXJu
IGNvbXB1dGVDdWJpY0Nvb3Jkcyh3b3JsZFBvcywgd29ybGROb3JtYWwsIHZFeWVQb3NpdGlvbi54
eXosIHJlZmxlY3Rpb25NYXRyaXgpOworfQorCitmcmFnbWVudCBmbG9hdDQgbWFpbihmbG9hdDMg
dlBvc2l0aW9uVyA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQzIHZOb3JtYWxXIDogYXR0cmlidXRlKDEp
LCBmbG9hdDMgdkVudmlyb25tZW50SXJyYWRpYW5jZSA6IGF0dHJpYnV0ZSgyKSwgQmluZEdyb3Vw
QSBiaW5kR3JvdXBBLCBCaW5kR3JvdXBCIGJpbmRHcm91cEIsIEJpbmRHcm91cEMgYmluZEdyb3Vw
QykgOiBTVl9UYXJnZXQgMCB7CisgICAgZmxvYXQzIHZpZXdEaXJlY3Rpb25XID0gbm9ybWFsaXpl
KGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkV5ZVBvc2l0aW9uLnh5eiAtIHZQb3NpdGlvblcpOwor
ICAgIGZsb2F0MyBub3JtYWxXID0gbm9ybWFsaXplKHZOb3JtYWxXKTsKKyAgICBmbG9hdDIgdXZP
ZmZzZXQgPSBmbG9hdDIoMC4wLCAwLjApOworICAgIGZsb2F0MyBzdXJmYWNlQWxiZWRvID0gYmlu
ZEdyb3VwQi5tYXRlcmlhbFswXS52QWxiZWRvQ29sb3IueHl6OworICAgIGZsb2F0IGFscGhhID0g
YmluZEdyb3VwQi5tYXRlcmlhbFswXS52QWxiZWRvQ29sb3IudzsKKyAgICBmbG9hdDMgYW1iaWVu
dE9jY2x1c2lvbkNvbG9yID0gZmxvYXQzKDEuLCAxLiwgMS4pOworICAgIGZsb2F0IG1pY3JvU3Vy
ZmFjZSA9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpdml0eUNvbG9yLnc7CisgICAg
ZmxvYXQzIHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvciA9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0u
dlJlZmxlY3Rpdml0eUNvbG9yLnh5ejsKKyAgICBmbG9hdDIgbWV0YWxsaWNSb3VnaG5lc3MgPSBz
dXJmYWNlUmVmbGVjdGl2aXR5Q29sb3IueHk7CisgICAgbWljcm9TdXJmYWNlID0gMS4wIC0gbWV0
YWxsaWNSb3VnaG5lc3MueTsKKyAgICBmbG9hdDMgYmFzZUNvbG9yID0gc3VyZmFjZUFsYmVkbzsK
KyAgICBmbG9hdDMgRGVmYXVsdFNwZWN1bGFyUmVmbGVjdGFuY2VEaWVsZWN0cmljID0gZmxvYXQz
KDAuMDQsIDAuMDQsIDAuMDQpOworICAgIHN1cmZhY2VBbGJlZG8gPSBsZXJwKGJhc2VDb2xvci54
eXogKiAoMS4wIC0gRGVmYXVsdFNwZWN1bGFyUmVmbGVjdGFuY2VEaWVsZWN0cmljLngpLCBmbG9h
dDMoMC4sIDAuLCAwLiksIGZsb2F0MyhtZXRhbGxpY1JvdWdobmVzcy54LCBtZXRhbGxpY1JvdWdo
bmVzcy54LCBtZXRhbGxpY1JvdWdobmVzcy54KSk7CisgICAgc3VyZmFjZVJlZmxlY3Rpdml0eUNv
bG9yID0gbGVycChEZWZhdWx0U3BlY3VsYXJSZWZsZWN0YW5jZURpZWxlY3RyaWMsIGJhc2VDb2xv
ciwgZmxvYXQzKG1ldGFsbGljUm91Z2huZXNzLngsIG1ldGFsbGljUm91Z2huZXNzLngsIG1ldGFs
bGljUm91Z2huZXNzLngpKTsKKyAgICBtaWNyb1N1cmZhY2UgPSBjbGFtcChtaWNyb1N1cmZhY2Us
IDAuMCwgMS4wKTsKKyAgICBmbG9hdCByb3VnaG5lc3MgPSAxLiAtIG1pY3JvU3VyZmFjZTsKKyAg
ICBmbG9hdCBOZG90VlVuY2xhbXBlZCA9IGRvdChub3JtYWxXLCB2aWV3RGlyZWN0aW9uVyk7Cisg
ICAgZmxvYXQgTmRvdFYgPSBhYnMoTmRvdFZVbmNsYW1wZWQpICsgMC4wMDAwMDAxOworICAgIGZs
b2F0IGFscGhhRyA9IGNvbnZlcnRSb3VnaG5lc3NUb0F2ZXJhZ2VTbG9wZShyb3VnaG5lc3MpOwor
ICAgIGZsb2F0MiBBQVJvdWdobmVzc0ZhY3RvcnMgPSBnZXRBQVJvdWdobmVzc0ZhY3RvcnMobm9y
bWFsVyk7CisgICAgZmxvYXQ0IGVudmlyb25tZW50UmFkaWFuY2UgPSBmbG9hdDQoMC4sIDAuLCAw
LiwgMC4pOworICAgIGZsb2F0MyBlbnZpcm9ubWVudElycmFkaWFuY2UgPSBmbG9hdDMoMC4sIDAu
LCAwLik7CisgICAgZmxvYXQzIHJlZmxlY3Rpb25WZWN0b3IgPSBjb21wdXRlUmVmbGVjdGlvbkNv
b3JkcyhmbG9hdDQodlBvc2l0aW9uVywgMS4wKSwgbm9ybWFsVywgYmluZEdyb3VwQi5tYXRlcmlh
bFswXS52RXllUG9zaXRpb24sIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0ucmVmbGVjdGlvbk1hdHJp
eCk7CisgICAgZmxvYXQzIHJlZmxlY3Rpb25Db29yZHMgPSByZWZsZWN0aW9uVmVjdG9yOworICAg
IGZsb2F0IHJlZmxlY3Rpb25MT0QgPSBnZXRMb2RGcm9tQWxwaGFHKGJpbmRHcm91cEIubWF0ZXJp
YWxbMF0udlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54LCBhbHBoYUcpOworICAgIHJlZmxl
Y3Rpb25MT0QgPSByZWZsZWN0aW9uTE9EICogYmluZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVj
dGlvbk1pY3Jvc3VyZmFjZUluZm9zLnkgKyBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0
aW9uTWljcm9zdXJmYWNlSW5mb3MuejsKKyAgICBmbG9hdCByZXF1ZXN0ZWRSZWZsZWN0aW9uTE9E
ID0gcmVmbGVjdGlvbkxPRDsKKyAgICBlbnZpcm9ubWVudFJhZGlhbmNlID0gU2FtcGxlKGJpbmRH
cm91cEMucmVmbGVjdGlvblNhbXBsZXJUZXh0dXJlLCBiaW5kR3JvdXBDLnJlZmxlY3Rpb25TYW1w
bGVyU2FtcGxlciwgcmVmbGVjdGlvbkNvb3Jkcy54eSk7IC8vU2FtcGxlTGV2ZWwoYmluZEdyb3Vw
Qy5yZWZsZWN0aW9uU2FtcGxlclRleHR1cmUsIGJpbmRHcm91cEMucmVmbGVjdGlvblNhbXBsZXJT
YW1wbGVyLCByZWZsZWN0aW9uQ29vcmRzLCByZXF1ZXN0ZWRSZWZsZWN0aW9uTE9EKTsKKyAgICBl
bnZpcm9ubWVudFJhZGlhbmNlLnh5eiA9IGZyb21SR0JEKGVudmlyb25tZW50UmFkaWFuY2UpOwor
ICAgIGVudmlyb25tZW50SXJyYWRpYW5jZSA9IHZFbnZpcm9ubWVudElycmFkaWFuY2U7CisgICAg
ZW52aXJvbm1lbnRSYWRpYW5jZS54eXogKj0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVj
dGlvbkluZm9zLng7CisgICAgZW52aXJvbm1lbnRSYWRpYW5jZS54eXogKj0gYmluZEdyb3VwQi5t
YXRlcmlhbFswXS52UmVmbGVjdGlvbkNvbG9yLnh5ejsKKyAgICBlbnZpcm9ubWVudElycmFkaWFu
Y2UgKj0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVjdGlvbkNvbG9yLnh5ejsKKyAgICBm
bG9hdCByZWZsZWN0YW5jZSA9IG1heChtYXgoc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yLngsIHN1
cmZhY2VSZWZsZWN0aXZpdHlDb2xvci55KSwgc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yLnopOwor
ICAgIGZsb2F0IHJlZmxlY3RhbmNlOTAgPSBmcmVzbmVsR3JhemluZ1JlZmxlY3RhbmNlKHJlZmxl
Y3RhbmNlKTsKKyAgICBmbG9hdDMgc3BlY3VsYXJFbnZpcm9ubWVudFIwID0gc3VyZmFjZVJlZmxl
Y3Rpdml0eUNvbG9yLnh5ejsKKyAgICBmbG9hdDMgc3BlY3VsYXJFbnZpcm9ubWVudFI5MCA9IGZs
b2F0MygxLjAsIDEuMCwgMS4wKSAqIHJlZmxlY3RhbmNlOTA7CisgICAgZmxvYXQzIGVudmlyb25t
ZW50QnJkZiA9IGdldEJSREZMb29rdXAoTmRvdFYsIHJvdWdobmVzcywgYmluZEdyb3VwQS5lbnZp
cm9ubWVudEJyZGZTYW1wbGVyVGV4dHVyZSwgYmluZEdyb3VwQS5lbnZpcm9ubWVudEJyZGZTYW1w
bGVyU2FtcGxlcik7CisgICAgZmxvYXQzIGVuZXJneUNvbnNlcnZhdGlvbkZhY3RvciA9IGdldEVu
ZXJneUNvbnNlcnZhdGlvbkZhY3RvcihzcGVjdWxhckVudmlyb25tZW50UjAsIGVudmlyb25tZW50
QnJkZik7CisgICAgZmxvYXQzIGRpZmZ1c2VCYXNlID0gZmxvYXQzKDAuLCAwLiwgMC4pOworICAg
IFByZUxpZ2h0aW5nSW5mbyBwcmVJbmZvOworICAgIExpZ2h0aW5nSW5mbyBpbmZvOworICAgIGZs
b2F0IHNoYWRvdyA9IDEuOworICAgIGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFu
Y2UgPSBnZXRSZWZsZWN0YW5jZUZyb21CUkRGTG9va3VwKHNwZWN1bGFyRW52aXJvbm1lbnRSMCwg
ZW52aXJvbm1lbnRCcmRmKTsKKyAgICBmbG9hdCBhbWJpZW50TW9ub2Nocm9tZSA9IGdldEx1bWlu
YW5jZShhbWJpZW50T2NjbHVzaW9uQ29sb3IpOworICAgIGZsb2F0IHNlbyA9IGVudmlyb25tZW50
UmFkaWFuY2VPY2NsdXNpb24oYW1iaWVudE1vbm9jaHJvbWUsIE5kb3RWVW5jbGFtcGVkKTsKKyAg
ICBzcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2UgKj0gc2VvOworICAgIGZsb2F0MyBmaW5h
bElycmFkaWFuY2UgPSBlbnZpcm9ubWVudElycmFkaWFuY2U7CisgICAgZmluYWxJcnJhZGlhbmNl
ICo9IHN1cmZhY2VBbGJlZG8ueHl6OworICAgIGZsb2F0MyBmaW5hbFJhZGlhbmNlID0gZW52aXJv
bm1lbnRSYWRpYW5jZS54eXo7CisgICAgZmluYWxSYWRpYW5jZSAqPSBzcGVjdWxhckVudmlyb25t
ZW50UmVmbGVjdGFuY2U7CisgICAgZmxvYXQzIGZpbmFsUmFkaWFuY2VTY2FsZWQgPSBmaW5hbFJh
ZGlhbmNlICogYmluZEdyb3VwQi5tYXRlcmlhbFswXS52TGlnaHRpbmdJbnRlbnNpdHkuejsKKyAg
ICBmaW5hbFJhZGlhbmNlU2NhbGVkICo9IGVuZXJneUNvbnNlcnZhdGlvbkZhY3RvcjsKKyAgICBm
bG9hdDMgZmluYWxEaWZmdXNlID0gZGlmZnVzZUJhc2U7CisgICAgZmluYWxEaWZmdXNlICo9IHN1
cmZhY2VBbGJlZG8ueHl6OworICAgIGZpbmFsRGlmZnVzZSA9IG1heChmaW5hbERpZmZ1c2UsIGZs
b2F0MygwLjAsIDAuMCwgMC4wKSk7CisgICAgZmxvYXQzIGZpbmFsQW1iaWVudCA9IGJpbmRHcm91
cEIubWF0ZXJpYWxbMF0udkFtYmllbnRDb2xvcjsKKyAgICBmaW5hbEFtYmllbnQgKj0gc3VyZmFj
ZUFsYmVkby54eXo7CisgICAgZmxvYXQzIGZpbmFsRW1pc3NpdmUgPSBiaW5kR3JvdXBCLm1hdGVy
aWFsWzBdLnZFbWlzc2l2ZUNvbG9yOworICAgIGZsb2F0MyBhbWJpZW50T2NjbHVzaW9uRm9yRGly
ZWN0RGlmZnVzZSA9IGFtYmllbnRPY2NsdXNpb25Db2xvcjsKKyAgICBmbG9hdDQgZmluYWxDb2xv
ciA9IGZsb2F0NCgKKyAgICAgICAgZmluYWxBbWJpZW50ICogYW1iaWVudE9jY2x1c2lvbkNvbG9y
ICsKKyAgICAgICAgZmluYWxEaWZmdXNlICogYW1iaWVudE9jY2x1c2lvbkZvckRpcmVjdERpZmZ1
c2UgKiBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZMaWdodGluZ0ludGVuc2l0eS54ICsKKyAgICAg
ICAgZmluYWxJcnJhZGlhbmNlICogYW1iaWVudE9jY2x1c2lvbkNvbG9yICogYmluZEdyb3VwQi5t
YXRlcmlhbFswXS52TGlnaHRpbmdJbnRlbnNpdHkueiArCisgICAgICAgIGZpbmFsUmFkaWFuY2VT
Y2FsZWQgKworICAgICAgICBmaW5hbEVtaXNzaXZlICogYmluZEdyb3VwQi5tYXRlcmlhbFswXS52
TGlnaHRpbmdJbnRlbnNpdHkueSwKKyAgICAgICAgYWxwaGEpOworICAgIGZpbmFsQ29sb3IgPSBt
YXgoZmluYWxDb2xvciwgZmxvYXQ0KDAuMCwgMC4wLCAwLjAsIDAuMCkpOworICAgIGZpbmFsQ29s
b3IgPSBhcHBseUltYWdlUHJvY2Vzc2luZyhmaW5hbENvbG9yKTsKKyAgICBmaW5hbENvbG9yLncg
Kj0gYmluZEdyb3VwQi5tZXNoWzBdLnZpc2liaWxpdHk7CisgICAgcmV0dXJuIGZpbmFsQ29sb3I7
Cit9CitgOworCitjb25zdCB2ZXJ0ZXhTaGFkZXJXU0wyID0gYAorc3RydWN0IE91dHB1dCB7Cisg
ICAgZmxvYXQzIHZQb3NpdGlvblcgOiBhdHRyaWJ1dGUoMCk7CisgICAgZmxvYXQzIHZOb3JtYWxX
IDogYXR0cmlidXRlKDEpOworICAgIGZsb2F0MyB2UG9zaXRpb25VVlcgOiBhdHRyaWJ1dGUoMik7
CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247Cit9CisKK3N0cnVjdCBTY2VuZSB7
CisgICAgZmxvYXQ0eDQgdmlld1Byb2plY3Rpb247CisgICAgZmxvYXQ0eDQgdmlldzsKK30KKwor
c3RydWN0IEJpbmRHcm91cEEgeworICAgIGNvbnN0YW50IFNjZW5lW10gc2NlbmUgOiByZWdpc3Rl
cihiMCwgc3BhY2UwKTsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiBlbnZpcm9ubWVudEJyZGZTYW1w
bGVyVGV4dHVyZSA6IHJlZ2lzdGVyKHQxLCBzcGFjZTApOworICAgIHNhbXBsZXIgZW52aXJvbm1l
bnRCcmRmU2FtcGxlclNhbXBsZXIgOiByZWdpc3RlcihzMiwgc3BhY2UwKTsKK30KKworc3RydWN0
IE1hdGVyaWFsIHsKKyAgICBmbG9hdDIgdkFsYmVkb0luZm9zOworICAgIGZsb2F0NCB2QW1iaWVu
dEluZm9zOworICAgIGZsb2F0MiB2T3BhY2l0eUluZm9zOworICAgIGZsb2F0MiB2RW1pc3NpdmVJ
bmZvczsKKyAgICBmbG9hdDIgdkxpZ2h0bWFwSW5mb3M7CisgICAgZmxvYXQzIHZSZWZsZWN0aXZp
dHlJbmZvczsKKyAgICBmbG9hdDIgdk1pY3JvU3VyZmFjZVNhbXBsZXJJbmZvczsKKyAgICBmbG9h
dDIgdlJlZmxlY3Rpb25JbmZvczsKKyAgICBmbG9hdDMgdlJlZmxlY3Rpb25Qb3NpdGlvbjsKKyAg
ICBmbG9hdDMgdlJlZmxlY3Rpb25TaXplOworICAgIGZsb2F0MyB2QnVtcEluZm9zOworICAgIGZs
b2F0NHg0IGFsYmVkb01hdHJpeDsKKyAgICBmbG9hdDR4NCBhbWJpZW50TWF0cml4OworICAgIGZs
b2F0NHg0IG9wYWNpdHlNYXRyaXg7CisgICAgZmxvYXQ0eDQgZW1pc3NpdmVNYXRyaXg7CisgICAg
ZmxvYXQ0eDQgbGlnaHRtYXBNYXRyaXg7CisgICAgZmxvYXQ0eDQgcmVmbGVjdGl2aXR5TWF0cml4
OworICAgIGZsb2F0NHg0IG1pY3JvU3VyZmFjZVNhbXBsZXJNYXRyaXg7CisgICAgZmxvYXQ0eDQg
YnVtcE1hdHJpeDsKKyAgICBmbG9hdDIgdlRhbmdlbnRTcGFjZVBhcmFtczsKKyAgICBmbG9hdDR4
NCByZWZsZWN0aW9uTWF0cml4OworICAgIGZsb2F0MyB2UmVmbGVjdGlvbkNvbG9yOworICAgIGZs
b2F0NCB2QWxiZWRvQ29sb3I7CisgICAgZmxvYXQ0IHZMaWdodGluZ0ludGVuc2l0eTsKKyAgICBm
bG9hdDMgdlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvczsKKyAgICBmbG9hdCBwb2ludFNpemU7
CisgICAgZmxvYXQ0IHZSZWZsZWN0aXZpdHlDb2xvcjsKKyAgICBmbG9hdDMgdkVtaXNzaXZlQ29s
b3I7CisgICAgZmxvYXQ0IHZFeWVQb3NpdGlvbjsKKyAgICBmbG9hdDMgdkFtYmllbnRDb2xvcjsK
KyAgICBmbG9hdDIgdkRlYnVnTW9kZTsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdFBhcmFtczsKKyAg
ICBmbG9hdDQgdkNsZWFyQ29hdFJlZnJhY3Rpb25QYXJhbXM7CisgICAgZmxvYXQyIHZDbGVhckNv
YXRJbmZvczsKKyAgICBmbG9hdDR4NCBjbGVhckNvYXRNYXRyaXg7CisgICAgZmxvYXQyIHZDbGVh
ckNvYXRCdW1wSW5mb3M7CisgICAgZmxvYXQyIHZDbGVhckNvYXRUYW5nZW50U3BhY2VQYXJhbXM7
CisgICAgZmxvYXQ0eDQgY2xlYXJDb2F0QnVtcE1hdHJpeDsKKyAgICBmbG9hdDQgdkNsZWFyQ29h
dFRpbnRQYXJhbXM7CisgICAgZmxvYXQgY2xlYXJDb2F0Q29sb3JBdERpc3RhbmNlOworICAgIGZs
b2F0MiB2Q2xlYXJDb2F0VGludEluZm9zOworICAgIGZsb2F0NHg0IGNsZWFyQ29hdFRpbnRNYXRy
aXg7CisgICAgZmxvYXQzIHZBbmlzb3Ryb3B5OworICAgIGZsb2F0MiB2QW5pc290cm9weUluZm9z
OworICAgIGZsb2F0NHg0IGFuaXNvdHJvcHlNYXRyaXg7CisgICAgZmxvYXQ0IHZTaGVlbkNvbG9y
OworICAgIGZsb2F0MiB2U2hlZW5JbmZvczsKKyAgICBmbG9hdDR4NCBzaGVlbk1hdHJpeDsKKyAg
ICBmbG9hdDMgdlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvczsKKyAgICBmbG9hdDQgdlJlZnJh
Y3Rpb25JbmZvczsKKyAgICBmbG9hdDR4NCByZWZyYWN0aW9uTWF0cml4OworICAgIGZsb2F0MiB2
VGhpY2tuZXNzSW5mb3M7CisgICAgZmxvYXQ0eDQgdGhpY2tuZXNzTWF0cml4OworICAgIGZsb2F0
MiB2VGhpY2tuZXNzUGFyYW07CisgICAgZmxvYXQzIHZEaWZmdXNpb25EaXN0YW5jZTsKKyAgICBm
bG9hdDQgdlRpbnRDb2xvcjsKKyAgICBmbG9hdDMgdlN1YlN1cmZhY2VJbnRlbnNpdHk7CisgICAg
ZmxvYXQzIHZTcGhlcmljYWxMMDA7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMV8xOworICAgIGZs
b2F0MyB2U3BoZXJpY2FsTDEwOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDExOworICAgIGZsb2F0
MyB2U3BoZXJpY2FsTDJfMjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyXzE7CisgICAgZmxvYXQz
IHZTcGhlcmljYWxMMjA7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMjE7CisgICAgZmxvYXQzIHZT
cGhlcmljYWxMMjI7CisgICAgZmxvYXQzIHZTcGhlcmljYWxYOworICAgIGZsb2F0MyB2U3BoZXJp
Y2FsWTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxYWF9a
WjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFlZX1paOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWlo7
CisgICAgZmxvYXQzIHZTcGhlcmljYWxYWTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFlaOworICAg
IGZsb2F0MyB2U3BoZXJpY2FsWlg7Cit9CisKK3N0cnVjdCBNZXNoIHsKKyAgICBmbG9hdDR4NCB3
b3JsZDsKKyAgICBmbG9hdCB2aXNpYmlsaXR5OworfQorCitzdHJ1Y3QgQmluZEdyb3VwQiB7Cisg
ICAgY29uc3RhbnQgTWF0ZXJpYWxbXSBtYXRlcmlhbCA6IHJlZ2lzdGVyKGIwLCBzcGFjZTEpOwor
ICAgIGNvbnN0YW50IE1lc2hbXSBtZXNoIDogcmVnaXN0ZXIoYjEsIHNwYWNlMSk7Cit9CisKK3N0
cnVjdCBCaW5kR3JvdXBDIHsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiByZWZsZWN0aW9uU2FtcGxl
clRleHR1cmUgOiByZWdpc3Rlcih0MCwgc3BhY2UyKTsKKyAgICBzYW1wbGVyIHJlZmxlY3Rpb25T
YW1wbGVyU2FtcGxlciA6IHJlZ2lzdGVyKHMxLCBzcGFjZTIpOworfQorCitmbG9hdDN4MyB0cmFu
c3Bvc2VNYXQzKGZsb2F0M3gzIGluTWF0cml4KSB7CisgICAgZmxvYXQzIGkwID0gaW5NYXRyaXhb
MF07CisgICAgZmxvYXQzIGkxID0gaW5NYXRyaXhbMV07CisgICAgZmxvYXQzIGkyID0gaW5NYXRy
aXhbMl07CisgICAgZmxvYXQzeDMgb3V0TWF0cml4ID0gZmxvYXQzeDMoCisgICAgICAgIGZsb2F0
MyhpMC54LCBpMS54LCBpMi54KSwKKyAgICAgICAgZmxvYXQzKGkwLnksIGkxLnksIGkyLnkpLAor
ICAgICAgICBmbG9hdDMoaTAueiwgaTEueiwgaTIueikKKyAgICApOworICAgIHJldHVybiBvdXRN
YXRyaXg7Cit9CisKK2Zsb2F0M3gzIGludmVyc2VNYXQzKGZsb2F0M3gzIGluTWF0cml4KSB7Cisg
ICAgZmxvYXQgYTAwID0gaW5NYXRyaXhbMF1bMF0sIGEwMSA9IGluTWF0cml4WzBdWzFdLCBhMDIg
PSBpbk1hdHJpeFswXVsyXTsKKyAgICBmbG9hdCBhMTAgPSBpbk1hdHJpeFsxXVswXSwgYTExID0g
aW5NYXRyaXhbMV1bMV0sIGExMiA9IGluTWF0cml4WzFdWzJdOworICAgIGZsb2F0IGEyMCA9IGlu
TWF0cml4WzJdWzBdLCBhMjEgPSBpbk1hdHJpeFsyXVsxXSwgYTIyID0gaW5NYXRyaXhbMl1bMl07
CisgICAgZmxvYXQgYjAxID0gYTIyICogYTExIC0gYTEyICogYTIxOworICAgIGZsb2F0IGIxMSA9
IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7CisgICAgZmxvYXQgYjIxID0gYTIxICogYTEwIC0gYTEx
ICogYTIwOworICAgIGZsb2F0IGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIy
MTsKKyAgICByZXR1cm4gZmxvYXQzeDMoYjAxLCAtYTIyICogYTAxICsgYTAyICogYTIxLCBhMTIg
KiBhMDEgLSBhMDIgKiBhMTEsCisgICAgICAgIGIxMSwgYTIyICogYTAwIC0gYTAyICogYTIwLCAt
YTEyICogYTAwICsgYTAyICogYTEwLAorICAgICAgICBiMjEsIC1hMjEgKiBhMDAgKyBhMDEgKiBh
MjAsIGExMSAqIGEwMCAtIGEwMSAqIGExMCkgLyBkZXQ7Cit9CisKK2Zsb2F0MyB0b0xpbmVhclNw
YWNlKGZsb2F0MyBjb2xvcikgeworICAgIHJldHVybiBwb3coY29sb3IsIGZsb2F0MygyLjIsIDIu
MiwgMi4yKSk7Cit9CisKK2Zsb2F0MyB0b0dhbW1hU3BhY2UoZmxvYXQzIGNvbG9yKSB7CisgICAg
cmV0dXJuIHBvdyhjb2xvciwgZmxvYXQzKDEuMCAvIDIuMiwgMS4wIC8gMi4yLCAxLjAgLyAyLjIp
KTsKK30KKworZmxvYXQgc3F1YXJlKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJuIHZhbHVlICog
dmFsdWU7Cit9CisKK2Zsb2F0IHBvdzUoZmxvYXQgdmFsdWUpIHsKKyAgICBmbG9hdCBzcSA9IHZh
bHVlICogdmFsdWU7CisgICAgcmV0dXJuIHNxICogc3EgKiB2YWx1ZTsKK30KKworZmxvYXQgZ2V0
THVtaW5hbmNlKGZsb2F0MyBjb2xvcikgeworICAgIHJldHVybiBjbGFtcChkb3QoY29sb3IsIGZs
b2F0MygwLjIxMjYsIDAuNzE1MiwgMC4wNzIyKSksIDAuLCAxLik7Cit9CisKK2Zsb2F0IGdldFJh
bmQoZmxvYXQyIHNlZWQpIHsKKyAgICByZXR1cm4gZnJhYyhzaW4oZG90KHNlZWQueHksIGZsb2F0
MigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTsKK30KKworZmxvYXQgZGl0aGVyKGZs
b2F0MiBzZWVkLCBmbG9hdCB2YXJpYW5jZUFtb3VudCkgeworICAgIGZsb2F0IHJhbmQgPSBnZXRS
YW5kKHNlZWQpOworICAgIGZsb2F0IGRpdGhlciA9IGxlcnAoLXZhcmlhbmNlQW1vdW50IC8gMjU1
LjAsIHZhcmlhbmNlQW1vdW50IC8gMjU1LjAsIHJhbmQpOworICAgIHJldHVybiBkaXRoZXI7Cit9
CisKK2Zsb2F0NCB0b1JHQkQoZmxvYXQzIGNvbG9yKSB7CisgICAgZmxvYXQgbWF4UkdCID0gbWF4
KG1heChjb2xvci54LCBtYXgoY29sb3IueSwgY29sb3IueikpLCAwLjAwMDAwMDEpOworICAgIGZs
b2F0IEQgPSBtYXgoMjU1LjAgLyBtYXhSR0IsIDEuKTsKKyAgICBEID0gY2xhbXAoZmxvb3IoRCkg
LyAyNTUuMCwgMC4sIDEuKTsKKyAgICBmbG9hdDMgcmdiID0gY29sb3IgKiBEOworICAgIHJnYiA9
IHRvR2FtbWFTcGFjZShyZ2IpOworICAgIHJldHVybiBmbG9hdDQocmdiLCBEKTsKK30KKworZmxv
YXQzIGZyb21SR0JEKGZsb2F0NCByZ2JkKSB7CisgICAgcmdiZC54eXogPSB0b0xpbmVhclNwYWNl
KHJnYmQueHl6KTsKKyAgICByZXR1cm4gcmdiZC54eXogLyByZ2JkLnc7Cit9CisKK3ZlcnRleCBP
dXRwdXQgbWFpbihmbG9hdDMgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0MyBub3JtYWwg
OiBhdHRyaWJ1dGUoMSksIEJpbmRHcm91cEEgYmluZEdyb3VwQSwgQmluZEdyb3VwQiBiaW5kR3Jv
dXBCLCBCaW5kR3JvdXBDIGJpbmRHcm91cEMpIHsKKyAgICBPdXRwdXQgb3V0cHV0OworICAgIGZs
b2F0MyBwb3NpdGlvblVwZGF0ZWQgPSBwb3NpdGlvbjsKKyAgICBmbG9hdDMgbm9ybWFsVXBkYXRl
ZCA9IG5vcm1hbDsKKyAgICBvdXRwdXQudlBvc2l0aW9uVVZXID0gcG9zaXRpb25VcGRhdGVkOwor
ICAgIGZsb2F0NHg0IGZpbmFsV29ybGQgPSBiaW5kR3JvdXBCLm1lc2hbMF0ud29ybGQ7CisgICAg
b3V0cHV0LnBvc2l0aW9uID0gbXVsKG11bChiaW5kR3JvdXBBLnNjZW5lWzBdLnZpZXdQcm9qZWN0
aW9uLCBmaW5hbFdvcmxkKSwgZmxvYXQ0KHBvc2l0aW9uVXBkYXRlZCwgMS4wKSk7CisgICAgZmxv
YXQ0IHdvcmxkUG9zID0gbXVsKGZpbmFsV29ybGQsIGZsb2F0NChwb3NpdGlvblVwZGF0ZWQsIDEu
MCkpOworICAgIG91dHB1dC52UG9zaXRpb25XID0gd29ybGRQb3MueHl6OworICAgIGZsb2F0M3gz
IG5vcm1hbFdvcmxkOworICAgIG5vcm1hbFdvcmxkWzBdID0gZmluYWxXb3JsZFswXS54eXo7Cisg
ICAgbm9ybWFsV29ybGRbMV0gPSBmaW5hbFdvcmxkWzFdLnh5ejsKKyAgICBub3JtYWxXb3JsZFsy
XSA9IGZpbmFsV29ybGRbMl0ueHl6OworICAgIG91dHB1dC52Tm9ybWFsVyA9IG5vcm1hbGl6ZSht
dWwobm9ybWFsV29ybGQsIG5vcm1hbFVwZGF0ZWQpKTsKKyAgICBmbG9hdDIgdXZVcGRhdGVkOwor
ICAgIGZsb2F0MiB1djI7CisgICAgLy9vdXRwdXQucG9zaXRpb24gKj0gLTEuOworICAgIHJldHVy
biBvdXRwdXQ7Cit9CitgOworCitjb25zdCBmcmFnbWVudFNoYWRlcldTTDIgPSBgCitzdHJ1Y3Qg
U2NlbmUgeworICAgIGZsb2F0NHg0IHZpZXdQcm9qZWN0aW9uOworICAgIGZsb2F0NHg0IHZpZXc7
Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBBIHsKKyAgICBjb25zdGFudCBTY2VuZVtdIHNjZW5lIDog
cmVnaXN0ZXIoYjAsIHNwYWNlMCk7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4gZW52aXJvbm1lbnRC
cmRmU2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0MSwgc3BhY2UwKTsKKyAgICBzYW1wbGVyIGVu
dmlyb25tZW50QnJkZlNhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczIsIHNwYWNlMCk7Cit9CisK
K3N0cnVjdCBNYXRlcmlhbCB7CisgICAgZmxvYXQyIHZBbGJlZG9JbmZvczsKKyAgICBmbG9hdDQg
dkFtYmllbnRJbmZvczsKKyAgICBmbG9hdDIgdk9wYWNpdHlJbmZvczsKKyAgICBmbG9hdDIgdkVt
aXNzaXZlSW5mb3M7CisgICAgZmxvYXQyIHZMaWdodG1hcEluZm9zOworICAgIGZsb2F0MyB2UmVm
bGVjdGl2aXR5SW5mb3M7CisgICAgZmxvYXQyIHZNaWNyb1N1cmZhY2VTYW1wbGVySW5mb3M7Cisg
ICAgZmxvYXQyIHZSZWZsZWN0aW9uSW5mb3M7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uUG9zaXRp
b247CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uU2l6ZTsKKyAgICBmbG9hdDMgdkJ1bXBJbmZvczsK
KyAgICBmbG9hdDR4NCBhbGJlZG9NYXRyaXg7CisgICAgZmxvYXQ0eDQgYW1iaWVudE1hdHJpeDsK
KyAgICBmbG9hdDR4NCBvcGFjaXR5TWF0cml4OworICAgIGZsb2F0NHg0IGVtaXNzaXZlTWF0cml4
OworICAgIGZsb2F0NHg0IGxpZ2h0bWFwTWF0cml4OworICAgIGZsb2F0NHg0IHJlZmxlY3Rpdml0
eU1hdHJpeDsKKyAgICBmbG9hdDR4NCBtaWNyb1N1cmZhY2VTYW1wbGVyTWF0cml4OworICAgIGZs
b2F0NHg0IGJ1bXBNYXRyaXg7CisgICAgZmxvYXQyIHZUYW5nZW50U3BhY2VQYXJhbXM7CisgICAg
ZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeDsKKyAgICBmbG9hdDMgdlJlZmxlY3Rpb25Db2xvcjsK
KyAgICBmbG9hdDQgdkFsYmVkb0NvbG9yOworICAgIGZsb2F0NCB2TGlnaHRpbmdJbnRlbnNpdHk7
CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7CisgICAgZmxvYXQgcG9p
bnRTaXplOworICAgIGZsb2F0NCB2UmVmbGVjdGl2aXR5Q29sb3I7CisgICAgZmxvYXQzIHZFbWlz
c2l2ZUNvbG9yOworICAgIGZsb2F0NCB2RXllUG9zaXRpb247CisgICAgZmxvYXQzIHZBbWJpZW50
Q29sb3I7CisgICAgZmxvYXQyIHZEZWJ1Z01vZGU7CisgICAgZmxvYXQyIHZDbGVhckNvYXRQYXJh
bXM7CisgICAgZmxvYXQ0IHZDbGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zOworICAgIGZsb2F0MiB2
Q2xlYXJDb2F0SW5mb3M7CisgICAgZmxvYXQ0eDQgY2xlYXJDb2F0TWF0cml4OworICAgIGZsb2F0
MiB2Q2xlYXJDb2F0QnVtcEluZm9zOworICAgIGZsb2F0MiB2Q2xlYXJDb2F0VGFuZ2VudFNwYWNl
UGFyYW1zOworICAgIGZsb2F0NHg0IGNsZWFyQ29hdEJ1bXBNYXRyaXg7CisgICAgZmxvYXQ0IHZD
bGVhckNvYXRUaW50UGFyYW1zOworICAgIGZsb2F0IGNsZWFyQ29hdENvbG9yQXREaXN0YW5jZTsK
KyAgICBmbG9hdDIgdkNsZWFyQ29hdFRpbnRJbmZvczsKKyAgICBmbG9hdDR4NCBjbGVhckNvYXRU
aW50TWF0cml4OworICAgIGZsb2F0MyB2QW5pc290cm9weTsKKyAgICBmbG9hdDIgdkFuaXNvdHJv
cHlJbmZvczsKKyAgICBmbG9hdDR4NCBhbmlzb3Ryb3B5TWF0cml4OworICAgIGZsb2F0NCB2U2hl
ZW5Db2xvcjsKKyAgICBmbG9hdDIgdlNoZWVuSW5mb3M7CisgICAgZmxvYXQ0eDQgc2hlZW5NYXRy
aXg7CisgICAgZmxvYXQzIHZSZWZyYWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7CisgICAgZmxvYXQ0
IHZSZWZyYWN0aW9uSW5mb3M7CisgICAgZmxvYXQ0eDQgcmVmcmFjdGlvbk1hdHJpeDsKKyAgICBm
bG9hdDIgdlRoaWNrbmVzc0luZm9zOworICAgIGZsb2F0NHg0IHRoaWNrbmVzc01hdHJpeDsKKyAg
ICBmbG9hdDIgdlRoaWNrbmVzc1BhcmFtOworICAgIGZsb2F0MyB2RGlmZnVzaW9uRGlzdGFuY2U7
CisgICAgZmxvYXQ0IHZUaW50Q29sb3I7CisgICAgZmxvYXQzIHZTdWJTdXJmYWNlSW50ZW5zaXR5
OworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDAwOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDFfMTsK
KyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxMDsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxMTsKKyAg
ICBmbG9hdDMgdlNwaGVyaWNhbEwyXzI7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMl8xOworICAg
IGZsb2F0MyB2U3BoZXJpY2FsTDIwOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIxOworICAgIGZs
b2F0MyB2U3BoZXJpY2FsTDIyOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWDsKKyAgICBmbG9hdDMg
dlNwaGVyaWNhbFk7CisgICAgZmxvYXQzIHZTcGhlcmljYWxaOworICAgIGZsb2F0MyB2U3BoZXJp
Y2FsWFhfWlo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxZWV9aWjsKKyAgICBmbG9hdDMgdlNwaGVy
aWNhbFpaOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWFk7CisgICAgZmxvYXQzIHZTcGhlcmljYWxZ
WjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFpYOworfQorCitzdHJ1Y3QgTWVzaCB7CisgICAgZmxv
YXQ0eDQgd29ybGQ7CisgICAgZmxvYXQgdmlzaWJpbGl0eTsKK30KKworc3RydWN0IEJpbmRHcm91
cEIgeworICAgIGNvbnN0YW50IE1hdGVyaWFsW10gbWF0ZXJpYWwgOiByZWdpc3RlcihiMCwgc3Bh
Y2UxKTsKKyAgICBjb25zdGFudCBNZXNoW10gbWVzaCA6IHJlZ2lzdGVyKGIxLCBzcGFjZTEpOwor
fQorCitzdHJ1Y3QgQmluZEdyb3VwQyB7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4gcmVmbGVjdGlv
blNhbXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIodDAsIHNwYWNlMik7CisgICAgc2FtcGxlciByZWZs
ZWN0aW9uU2FtcGxlclNhbXBsZXIgOiByZWdpc3RlcihzMSwgc3BhY2UyKTsKK30KKworZmxvYXQz
eDMgdHJhbnNwb3NlTWF0MyhmbG9hdDN4MyBpbk1hdHJpeCkgeworICAgIGZsb2F0MyBpMCA9IGlu
TWF0cml4WzBdOworICAgIGZsb2F0MyBpMSA9IGluTWF0cml4WzFdOworICAgIGZsb2F0MyBpMiA9
IGluTWF0cml4WzJdOworICAgIGZsb2F0M3gzIG91dE1hdHJpeCA9IGZsb2F0M3gzKAorICAgICAg
ICBmbG9hdDMoaTAueCwgaTEueCwgaTIueCksCisgICAgICAgIGZsb2F0MyhpMC55LCBpMS55LCBp
Mi55KSwKKyAgICAgICAgZmxvYXQzKGkwLnosIGkxLnosIGkyLnopCisgICAgKTsKKyAgICByZXR1
cm4gb3V0TWF0cml4OworfQorCitmbG9hdDN4MyBpbnZlcnNlTWF0MyhmbG9hdDN4MyBpbk1hdHJp
eCkgeworICAgIGZsb2F0IGEwMCA9IGluTWF0cml4WzBdWzBdLCBhMDEgPSBpbk1hdHJpeFswXVsx
XSwgYTAyID0gaW5NYXRyaXhbMF1bMl07CisgICAgZmxvYXQgYTEwID0gaW5NYXRyaXhbMV1bMF0s
IGExMSA9IGluTWF0cml4WzFdWzFdLCBhMTIgPSBpbk1hdHJpeFsxXVsyXTsKKyAgICBmbG9hdCBh
MjAgPSBpbk1hdHJpeFsyXVswXSwgYTIxID0gaW5NYXRyaXhbMl1bMV0sIGEyMiA9IGluTWF0cml4
WzJdWzJdOworICAgIGZsb2F0IGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMTsKKyAgICBmbG9h
dCBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwOworICAgIGZsb2F0IGIyMSA9IGEyMSAqIGEx
MCAtIGExMSAqIGEyMDsKKyAgICBmbG9hdCBkZXQgPSBhMDAgKiBiMDEgKyBhMDEgKiBiMTEgKyBh
MDIgKiBiMjE7CisgICAgcmV0dXJuIGZsb2F0M3gzKGIwMSwgLWEyMiAqIGEwMSArIGEwMiAqIGEy
MSwgYTEyICogYTAxIC0gYTAyICogYTExLAorICAgICAgICBiMTEsIGEyMiAqIGEwMCAtIGEwMiAq
IGEyMCwgLWExMiAqIGEwMCArIGEwMiAqIGExMCwKKyAgICAgICAgYjIxLCAtYTIxICogYTAwICsg
YTAxICogYTIwLCBhMTEgKiBhMDAgLSBhMDEgKiBhMTApIC8gZGV0OworfQorCitmbG9hdDMgdG9M
aW5lYXJTcGFjZShmbG9hdDMgY29sb3IpIHsKKyAgICByZXR1cm4gcG93KGNvbG9yLCBmbG9hdDMo
Mi4yLCAyLjIsIDIuMikpOworfQorCitmbG9hdDMgdG9HYW1tYVNwYWNlKGZsb2F0MyBjb2xvcikg
eworICAgIHJldHVybiBwb3coY29sb3IsIGZsb2F0MygxLjAgLyAyLjIsIDEuMCAvIDIuMiwgMS4w
IC8gMi4yKSk7Cit9CisKK2Zsb2F0IHNxdWFyZShmbG9hdCB2YWx1ZSkgeworICAgIHJldHVybiB2
YWx1ZSAqIHZhbHVlOworfQorCitmbG9hdCBwb3c1KGZsb2F0IHZhbHVlKSB7CisgICAgZmxvYXQg
c3EgPSB2YWx1ZSAqIHZhbHVlOworICAgIHJldHVybiBzcSAqIHNxICogdmFsdWU7Cit9CisKK2Zs
b2F0IGdldEx1bWluYW5jZShmbG9hdDMgY29sb3IpIHsKKyAgICByZXR1cm4gY2xhbXAoZG90KGNv
bG9yLCBmbG9hdDMoMC4yMTI2LCAwLjcxNTIsIDAuMDcyMikpLCAwLiwgMS4pOworfQorCitmbG9h
dCBnZXRSYW5kKGZsb2F0MiBzZWVkKSB7CisgICAgcmV0dXJuIGZyYWMoc2luKGRvdChzZWVkLnh5
LCBmbG9hdDIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7Cit9CisKK2Zsb2F0IGRp
dGhlcihmbG9hdDIgc2VlZCwgZmxvYXQgdmFyaWFuY2VBbW91bnQpIHsKKyAgICBmbG9hdCByYW5k
ID0gZ2V0UmFuZChzZWVkKTsKKyAgICBmbG9hdCBkaXRoZXIgPSBsZXJwKC12YXJpYW5jZUFtb3Vu
dCAvIDI1NS4wLCB2YXJpYW5jZUFtb3VudCAvIDI1NS4wLCByYW5kKTsKKyAgICByZXR1cm4gZGl0
aGVyOworfQorCitmbG9hdDQgdG9SR0JEKGZsb2F0MyBjb2xvcikgeworICAgIGZsb2F0IG1heFJH
QiA9IG1heChtYXgoY29sb3IueCwgbWF4KGNvbG9yLnksIGNvbG9yLnopKSwgMC4wMDAwMDAxKTsK
KyAgICBmbG9hdCBEID0gbWF4KDI1NS4wIC8gbWF4UkdCLCAxLik7CisgICAgRCA9IGNsYW1wKGZs
b29yKEQpIC8gMjU1LjAsIDAuLCAxLik7CisgICAgZmxvYXQzIHJnYiA9IGNvbG9yICogRDsKKyAg
ICByZ2IgPSB0b0dhbW1hU3BhY2UocmdiKTsKKyAgICByZXR1cm4gZmxvYXQ0KHJnYiwgRCk7Cit9
CisKK2Zsb2F0MyBmcm9tUkdCRChmbG9hdDQgcmdiZCkgeworICAgIHJnYmQueHl6ID0gdG9MaW5l
YXJTcGFjZShyZ2JkLnh5eik7CisgICAgcmV0dXJuIHJnYmQueHl6IC8gcmdiZC53OworfQorCitm
bG9hdCBjb252ZXJ0Um91Z2huZXNzVG9BdmVyYWdlU2xvcGUoZmxvYXQgcm91Z2huZXNzKSB7Cisg
ICAgcmV0dXJuIHNxdWFyZShyb3VnaG5lc3MpICsgMC4wMDA1OworfQorCitmbG9hdCBmcmVzbmVs
R3JhemluZ1JlZmxlY3RhbmNlKGZsb2F0IHJlZmxlY3RhbmNlMCkgeworICAgIGZsb2F0IHJlZmxl
Y3RhbmNlOTAgPSBjbGFtcChyZWZsZWN0YW5jZTAgKiAyNS4wLCAwLjAsIDEuMCk7CisgICAgcmV0
dXJuIHJlZmxlY3RhbmNlOTA7Cit9CisKK2Zsb2F0MiBnZXRBQVJvdWdobmVzc0ZhY3RvcnMoZmxv
YXQzIG5vcm1hbFZlY3RvcikgeworICAgIHJldHVybiBmbG9hdDIoMC4sIDAuKTsKK30KKworZmxv
YXQ0IGFwcGx5SW1hZ2VQcm9jZXNzaW5nKGZsb2F0NCByZXN1bHQpIHsKKyAgICByZXN1bHQueHl6
ID0gdG9HYW1tYVNwYWNlKHJlc3VsdC54eXopOworICAgIHJlc3VsdC54eXogPSBjbGFtcChyZXN1
bHQueHl6LCBmbG9hdDMoMC4wLCAwLjAsIDAuMCksIGZsb2F0MygxLjAsIDEuMCwgMS4wKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IFByZUxpZ2h0aW5nSW5mbyB7CisgICAgZmxv
YXQzIGxpZ2h0T2Zmc2V0OworICAgIGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkOworICAgIGZs
b2F0IGxpZ2h0RGlzdGFuY2U7CisgICAgZmxvYXQgYXR0ZW51YXRpb247CisgICAgZmxvYXQzIEw7
CisgICAgZmxvYXQzIEg7CisgICAgZmxvYXQgTmRvdFY7CisgICAgZmxvYXQgTmRvdExVbmNsYW1w
ZWQ7CisgICAgZmxvYXQgTmRvdEw7CisgICAgZmxvYXQgVmRvdEg7CisgICAgZmxvYXQgcm91Z2hu
ZXNzOworfQorCitQcmVMaWdodGluZ0luZm8gY29tcHV0ZVBvaW50QW5kU3BvdFByZUxpZ2h0aW5n
SW5mbyhmbG9hdDQgbGlnaHREYXRhLCBmbG9hdDMgViwgZmxvYXQzIE4sIGZsb2F0MyB2UG9zaXRp
b25XKSB7CisgICAgUHJlTGlnaHRpbmdJbmZvIHJlc3VsdDsKKyAgICByZXN1bHQubGlnaHRPZmZz
ZXQgPSBsaWdodERhdGEueHl6IC0gdlBvc2l0aW9uVzsKKyAgICByZXN1bHQubGlnaHREaXN0YW5j
ZVNxdWFyZWQgPSBkb3QocmVzdWx0LmxpZ2h0T2Zmc2V0LCByZXN1bHQubGlnaHRPZmZzZXQpOwor
ICAgIHJlc3VsdC5saWdodERpc3RhbmNlID0gc3FydChyZXN1bHQubGlnaHREaXN0YW5jZVNxdWFy
ZWQpOworICAgIHJlc3VsdC5MID0gbm9ybWFsaXplKHJlc3VsdC5saWdodE9mZnNldCk7CisgICAg
cmVzdWx0LkggPSBub3JtYWxpemUoViArIHJlc3VsdC5MKTsKKyAgICByZXN1bHQuVmRvdEggPSBj
bGFtcChkb3QoViwgcmVzdWx0LkgpLCAwLjAsIDEuMCk7CisgICAgcmVzdWx0Lk5kb3RMVW5jbGFt
cGVkID0gZG90KE4sIHJlc3VsdC5MKTsKKyAgICByZXN1bHQuTmRvdEwgPSBjbGFtcChyZXN1bHQu
TmRvdExVbmNsYW1wZWQsIDAuMDAwMDAwMSwgMS4wKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitQcmVMaWdodGluZ0luZm8gY29tcHV0ZURpcmVjdGlvbmFsUHJlTGlnaHRpbmdJbmZvKGZsb2F0
NCBsaWdodERhdGEsIGZsb2F0MyBWLCBmbG9hdDMgTikgeworICAgIFByZUxpZ2h0aW5nSW5mbyBy
ZXN1bHQ7CisgICAgcmVzdWx0LmxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoLWxpZ2h0RGF0YS54eXop
OworICAgIHJlc3VsdC5MID0gbm9ybWFsaXplKC1saWdodERhdGEueHl6KTsKKyAgICByZXN1bHQu
SCA9IG5vcm1hbGl6ZShWICsgcmVzdWx0LkwpOworICAgIHJlc3VsdC5WZG90SCA9IGNsYW1wKGRv
dChWLCByZXN1bHQuSCksIDAuMCwgMS4wKTsKKyAgICByZXN1bHQuTmRvdExVbmNsYW1wZWQgPSBk
b3QoTiwgcmVzdWx0LkwpOworICAgIHJlc3VsdC5OZG90TCA9IGNsYW1wKHJlc3VsdC5OZG90TFVu
Y2xhbXBlZCwgMC4wMDAwMDAxLCAxLjApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ByZUxp
Z2h0aW5nSW5mbyBjb21wdXRlSGVtaXNwaGVyaWNQcmVMaWdodGluZ0luZm8oZmxvYXQ0IGxpZ2h0
RGF0YSwgZmxvYXQzIFYsIGZsb2F0MyBOKSB7CisgICAgUHJlTGlnaHRpbmdJbmZvIHJlc3VsdDsK
KyAgICByZXN1bHQuTmRvdEwgPSBkb3QoTiwgbGlnaHREYXRhLnh5eikgKiAwLjUgKyAwLjU7Cisg
ICAgcmVzdWx0Lk5kb3RMID0gY2xhbXAocmVzdWx0Lk5kb3RMLCAwLjAwMDAwMDEsIDEuMCk7Cisg
ICAgcmVzdWx0Lk5kb3RMVW5jbGFtcGVkID0gcmVzdWx0Lk5kb3RMOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9TdGFuZGFyZChmbG9h
dDMgbGlnaHRPZmZzZXQsIGZsb2F0IHJhbmdlKSB7CisgICAgcmV0dXJuIG1heCgwLiwgMS4wIC0g
bGVuZ3RoKGxpZ2h0T2Zmc2V0KSAvIHJhbmdlKTsKK30KKworZmxvYXQgY29tcHV0ZURpc3RhbmNl
TGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkKSB7CisgICAg
cmV0dXJuIDEuMCAvIG1heChsaWdodERpc3RhbmNlU3F1YXJlZCwgMC4wMDAwMDAxKTsKK30KKwor
ZmxvYXQgY29tcHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX0dMVEYoZmxvYXQgbGlnaHREaXN0YW5j
ZVNxdWFyZWQsIGZsb2F0IGludmVyc2VTcXVhcmVkUmFuZ2UpIHsKKyAgICBmbG9hdCBsaWdodERp
c3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heChsaWdodERpc3RhbmNlU3F1YXJlZCwgMC4wMDAwMDAx
KTsKKyAgICBmbG9hdCBmYWN0b3IgPSBsaWdodERpc3RhbmNlU3F1YXJlZCAqIGludmVyc2VTcXVh
cmVkUmFuZ2U7CisgICAgZmxvYXQgYXR0ZW51YXRpb24gPSBjbGFtcCgxLjAgLSBmYWN0b3IgKiBm
YWN0b3IsIDAuMCwgMS4wKTsKKyAgICBhdHRlbnVhdGlvbiAqPSBhdHRlbnVhdGlvbjsKKyAgICBs
aWdodERpc3RhbmNlRmFsbG9mZiAqPSBhdHRlbnVhdGlvbjsKKyAgICByZXR1cm4gbGlnaHREaXN0
YW5jZUZhbGxvZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZihmbG9h
dDMgbGlnaHRPZmZzZXQsIGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkLCBmbG9hdCByYW5nZSwg
ZmxvYXQgaW52ZXJzZVNxdWFyZWRSYW5nZSkgeworICAgIHJldHVybiBjb21wdXRlRGlzdGFuY2VM
aWdodEZhbGxvZmZfUGh5c2ljYWwobGlnaHREaXN0YW5jZVNxdWFyZWQpOworfQorCitmbG9hdCBj
b21wdXRlRGlyZWN0aW9uYWxMaWdodEZhbGxvZmZfU3RhbmRhcmQoZmxvYXQzIGxpZ2h0RGlyZWN0
aW9uLCBmbG9hdDMgZGlyZWN0aW9uVG9MaWdodENlbnRlclcsIGZsb2F0IGNvc0hhbGZBbmdsZSwg
ZmxvYXQgZXhwb25lbnQpIHsKKyAgICBmbG9hdCBmYWxsb2ZmID0gMC4wOworICAgIGZsb2F0IGNv
c0FuZ2xlID0gbWF4KGRvdCgtbGlnaHREaXJlY3Rpb24sIGRpcmVjdGlvblRvTGlnaHRDZW50ZXJX
KSwgMC4wMDAwMDAxKTsKKyAgICBpZiAoY29zQW5nbGUgPj0gY29zSGFsZkFuZ2xlKSB7CisgICAg
ICAgIGZhbGxvZmYgPSBtYXgoMC4sIHBvdyhjb3NBbmdsZSwgZXhwb25lbnQpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbGxvZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXJlY3Rpb25hbExpZ2h0RmFs
bG9mZl9QaHlzaWNhbChmbG9hdDMgbGlnaHREaXJlY3Rpb24sIGZsb2F0MyBkaXJlY3Rpb25Ub0xp
Z2h0Q2VudGVyVywgZmxvYXQgY29zSGFsZkFuZ2xlKSB7CisgICAgZmxvYXQga01pbnVzTG9nMkNv
bmVBbmdsZUludGVuc2l0eVJhdGlvID0gNi42NDM4NTYxODk3NzsKKyAgICBmbG9hdCBjb25jZW50
cmF0aW9uS2FwcGEgPSBrTWludXNMb2cyQ29uZUFuZ2xlSW50ZW5zaXR5UmF0aW8gLyAoMS4wIC0g
Y29zSGFsZkFuZ2xlKTsKKyAgICBmbG9hdDQgbGlnaHREaXJlY3Rpb25TcHJlYWRTRyA9IGZsb2F0
NCgtbGlnaHREaXJlY3Rpb24gKiBjb25jZW50cmF0aW9uS2FwcGEsIC1jb25jZW50cmF0aW9uS2Fw
cGEpOworICAgIGZsb2F0IGZhbGxvZmYgPSBleHAyKGRvdChmbG9hdDQoZGlyZWN0aW9uVG9MaWdo
dENlbnRlclcsIDEuMCksIGxpZ2h0RGlyZWN0aW9uU3ByZWFkU0cpKTsKKyAgICByZXR1cm4gZmFs
bG9mZjsKK30KKworZmxvYXQgY29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmX0dMVEYoZmxv
YXQzIGxpZ2h0RGlyZWN0aW9uLCBmbG9hdDMgZGlyZWN0aW9uVG9MaWdodENlbnRlclcsIGZsb2F0
IGxpZ2h0QW5nbGVTY2FsZSwgZmxvYXQgbGlnaHRBbmdsZU9mZnNldCkgeworICAgIGZsb2F0IGNk
ID0gZG90KC1saWdodERpcmVjdGlvbiwgZGlyZWN0aW9uVG9MaWdodENlbnRlclcpOworICAgIGZs
b2F0IGZhbGxvZmYgPSBjbGFtcChjZCAqIGxpZ2h0QW5nbGVTY2FsZSArIGxpZ2h0QW5nbGVPZmZz
ZXQsIDAuMCwgMS4wKTsKKyAgICBmYWxsb2ZmICo9IGZhbGxvZmY7CisgICAgcmV0dXJuIGZhbGxv
ZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXJlY3Rpb25hbExpZ2h0RmFsbG9mZihmbG9hdDMgbGln
aHREaXJlY3Rpb24sIGZsb2F0MyBkaXJlY3Rpb25Ub0xpZ2h0Q2VudGVyVywgZmxvYXQgY29zSGFs
ZkFuZ2xlLCBmbG9hdCBleHBvbmVudCwgZmxvYXQgbGlnaHRBbmdsZVNjYWxlLCBmbG9hdCBsaWdo
dEFuZ2xlT2Zmc2V0KSB7CisgICAgcmV0dXJuIGNvbXB1dGVEaXJlY3Rpb25hbExpZ2h0RmFsbG9m
Zl9QaHlzaWNhbChsaWdodERpcmVjdGlvbiwgZGlyZWN0aW9uVG9MaWdodENlbnRlclcsIGNvc0hh
bGZBbmdsZSk7Cit9CisKK2Zsb2F0MyBnZXRFbmVyZ3lDb25zZXJ2YXRpb25GYWN0b3IoZmxvYXQz
IHNwZWN1bGFyRW52aXJvbm1lbnRSMCwgZmxvYXQzIGVudmlyb25tZW50QnJkZikgeworICAgIHJl
dHVybiBmbG9hdDMoMS4wLCAxLjAsIDEuMCkgKyBzcGVjdWxhckVudmlyb25tZW50UjAgKiAoMS4w
IC8gZW52aXJvbm1lbnRCcmRmLnkgLSAxLjApOworfQorCitmbG9hdDMgZ2V0QlJERkxvb2t1cChm
bG9hdCBOZG90ViwgZmxvYXQgcGVyY2VwdHVhbFJvdWdobmVzcywgVGV4dHVyZTJEPGZsb2F0ND4g
ZW52aXJvbm1lbnRCcmRmU2FtcGxlclRleHR1cmUsIHNhbXBsZXIgZW52aXJvbm1lbnRCcmRmU2Ft
cGxlclNhbXBsZXIpIHsKKyAgICBmbG9hdDIgVVYgPSBmbG9hdDIoTmRvdFYsIHBlcmNlcHR1YWxS
b3VnaG5lc3MpOworICAgIGZsb2F0NCBicmRmTG9va3VwID0gU2FtcGxlKGVudmlyb25tZW50QnJk
ZlNhbXBsZXJUZXh0dXJlLCBlbnZpcm9ubWVudEJyZGZTYW1wbGVyU2FtcGxlciwgVVYpOworICAg
IHJldHVybiBicmRmTG9va3VwLnh5ejsKK30KKworZmxvYXQzIGdldFJlZmxlY3RhbmNlRnJvbUJS
REZMb29rdXAoZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSMCwgZmxvYXQzIGVudmlyb25tZW50
QnJkZikgeworICAgIGZsb2F0MyByZWZsZWN0YW5jZSA9IGxlcnAoZW52aXJvbm1lbnRCcmRmLnh4
eCwgZW52aXJvbm1lbnRCcmRmLnl5eSwgc3BlY3VsYXJFbnZpcm9ubWVudFIwKTsKKyAgICByZXR1
cm4gcmVmbGVjdGFuY2U7Cit9CisKK2Zsb2F0MyBnZXRSZWZsZWN0YW5jZUZyb21BbmFseXRpY2Fs
QlJERkxvb2t1cF9Kb25lcyhmbG9hdCBWZG90TiwgZmxvYXQzIHJlZmxlY3RhbmNlMCwgZmxvYXQz
IHJlZmxlY3RhbmNlOTAsIGZsb2F0IHNtb290aG5lc3MpIHsKKyAgICBmbG9hdCB3ZWlnaHQgPSBs
ZXJwKDAuMjUsIDEuMCwgc21vb3RobmVzcyk7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlMCArIHdl
aWdodCAqIChyZWZsZWN0YW5jZTkwIC0gcmVmbGVjdGFuY2UwKSAqIHBvdzUoY2xhbXAoMS4wIC0g
VmRvdE4sIDAuMCwgMS4wKSk7Cit9CisKK2Zsb2F0MyBmcmVzbmVsU2NobGlja0dHWChmbG9hdCBW
ZG90SCwgZmxvYXQzIHJlZmxlY3RhbmNlMCwgZmxvYXQzIHJlZmxlY3RhbmNlOTApIHsKKyAgICBy
ZXR1cm4gcmVmbGVjdGFuY2UwICsgKHJlZmxlY3RhbmNlOTAgLSByZWZsZWN0YW5jZTApICogcG93
NSgxLjAgLSBWZG90SCk7Cit9CisKK2Zsb2F0IGZyZXNuZWxTY2hsaWNrR0dYKGZsb2F0IFZkb3RI
LCBmbG9hdCByZWZsZWN0YW5jZTAsIGZsb2F0IHJlZmxlY3RhbmNlOTApIHsKKyAgICByZXR1cm4g
cmVmbGVjdGFuY2UwICsgKHJlZmxlY3RhbmNlOTAgLSByZWZsZWN0YW5jZTApICogcG93NSgxLjAg
LSBWZG90SCk7Cit9CisKK2Zsb2F0IG5vcm1hbERpc3RyaWJ1dGlvbkZ1bmN0aW9uX1Ryb3dicmlk
Z2VSZWl0ekdHWChmbG9hdCBOZG90SCwgZmxvYXQgYWxwaGFHKSB7CisgICAgZmxvYXQgYTIgPSBz
cXVhcmUoYWxwaGFHKTsKKyAgICBmbG9hdCBkID0gTmRvdEggKiBOZG90SCAqIChhMiAtIDEuMCkg
KyAxLjA7CisgICAgcmV0dXJuIGEyIC8gKDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5
NSAqIGQgKiBkKTsKK30KKworZmxvYXQgc21pdGhWaXNpYmlsaXR5X0dHWENvcnJlbGF0ZWQoZmxv
YXQgTmRvdEwsIGZsb2F0IE5kb3RWLCBmbG9hdCBhbHBoYUcpIHsKKyAgICBmbG9hdCBhMiA9IGFs
cGhhRyAqIGFscGhhRzsKKyAgICBmbG9hdCBHR1hWID0gTmRvdEwgKiBzcXJ0KE5kb3RWICogKE5k
b3RWIC0gYTIgKiBOZG90VikgKyBhMik7CisgICAgZmxvYXQgR0dYTCA9IE5kb3RWICogc3FydChO
ZG90TCAqIChOZG90TCAtIGEyICogTmRvdEwpICsgYTIpOworICAgIHJldHVybiAwLjUgLyAoR0dY
ViArIEdHWEwpOworfQorCitmbG9hdCBkaWZmdXNlQlJERl9CdXJsZXkoZmxvYXQgTmRvdEwsIGZs
b2F0IE5kb3RWLCBmbG9hdCBWZG90SCwgZmxvYXQgcm91Z2huZXNzKSB7CisgICAgZmxvYXQgZGlm
ZnVzZUZyZXNuZWxOViA9IHBvdzUoY2xhbXAoMS4wIC0gTmRvdEwsIDAuMDAwMDAwMSwgMS4wKSk7
CisgICAgZmxvYXQgZGlmZnVzZUZyZXNuZWxOTCA9IHBvdzUoY2xhbXAoMS4wIC0gTmRvdFYsIDAu
MDAwMDAwMSwgMS4wKSk7CisgICAgZmxvYXQgZGlmZnVzZUZyZXNuZWw5MCA9IDAuNSArIDIuMCAq
IFZkb3RIICogVmRvdEggKiByb3VnaG5lc3M7CisgICAgZmxvYXQgZnJlc25lbCA9ICgxLjAgKyAo
ZGlmZnVzZUZyZXNuZWw5MCAtIDEuMCkgKiBkaWZmdXNlRnJlc25lbE5MKSAqCisgICAgICAgICgx
LjAgKyAoZGlmZnVzZUZyZXNuZWw5MCAtIDEuMCkgKiBkaWZmdXNlRnJlc25lbE5WKTsKKyAgICBy
ZXR1cm4gZnJlc25lbCAvIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTsKK30KKwor
c3RydWN0IExpZ2h0aW5nSW5mbyB7CisgICAgZmxvYXQzIGRpZmZ1c2U7Cit9CisKK2Zsb2F0IGFk
anVzdFJvdWdobmVzc0Zyb21MaWdodFByb3BlcnRpZXMoZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBs
aWdodFJhZGl1cywgZmxvYXQgbGlnaHREaXN0YW5jZSkgeworICAgIGZsb2F0IGxpZ2h0Um91Z2hu
ZXNzID0gbGlnaHRSYWRpdXMgLyBsaWdodERpc3RhbmNlOworICAgIGZsb2F0IHRvdGFsUm91Z2hu
ZXNzID0gY2xhbXAobGlnaHRSb3VnaG5lc3MgKyByb3VnaG5lc3MsIDAuMCwgMS4wKTsKKyAgICBy
ZXR1cm4gdG90YWxSb3VnaG5lc3M7Cit9CisKK2Zsb2F0MyBjb21wdXRlSGVtaXNwaGVyaWNEaWZm
dXNlTGlnaHRpbmcoUHJlTGlnaHRpbmdJbmZvIGluZm8sIGZsb2F0MyBsaWdodENvbG9yLCBmbG9h
dDMgZ3JvdW5kQ29sb3IpIHsKKyAgICByZXR1cm4gbGVycChncm91bmRDb2xvciwgbGlnaHRDb2xv
ciwgZmxvYXQzKGluZm8uTmRvdEwsIGluZm8uTmRvdEwsIGluZm8uTmRvdEwpKTsKK30KKworZmxv
YXQzIGNvbXB1dGVEaWZmdXNlTGlnaHRpbmcoUHJlTGlnaHRpbmdJbmZvIGluZm8sIGZsb2F0MyBs
aWdodENvbG9yKSB7CisgICAgZmxvYXQgZGlmZnVzZVRlcm0gPSBkaWZmdXNlQlJERl9CdXJsZXko
aW5mby5OZG90TCwgaW5mby5OZG90ViwgaW5mby5WZG90SCwgaW5mby5yb3VnaG5lc3MpOworICAg
IHJldHVybiBkaWZmdXNlVGVybSAqIGluZm8uYXR0ZW51YXRpb24gKiBpbmZvLk5kb3RMICogbGln
aHRDb2xvcjsKK30KKworZmxvYXQyIGNvbXB1dGVQcm9qZWN0aW9uVGV4dHVyZURpZmZ1c2VMaWdo
dGluZ1VWKGZsb2F0NHg0IHRleHR1cmVQcm9qZWN0aW9uTWF0cml4LCBmbG9hdDMgdlBvc2l0aW9u
VykgeworICAgIGZsb2F0NCBzdHJxID0gbXVsKHRleHR1cmVQcm9qZWN0aW9uTWF0cml4LCBmbG9h
dDQodlBvc2l0aW9uVywgMS4wKSk7CisgICAgc3RycSAvPSBzdHJxLnc7CisgICAgcmV0dXJuIHN0
cnEueHk7Cit9CisKK2Zsb2F0IGdldExvZEZyb21BbHBoYUcoZmxvYXQgY3ViZU1hcERpbWVuc2lv
blBpeGVscywgZmxvYXQgbWljcm9zdXJmYWNlQXZlcmFnZVNsb3BlKSB7CisgICAgZmxvYXQgbWlj
cm9zdXJmYWNlQXZlcmFnZVNsb3BlVGV4ZWxzID0gY3ViZU1hcERpbWVuc2lvblBpeGVscyAqIG1p
Y3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZTsKKyAgICBmbG9hdCBsb2QgPSBsb2cyKG1pY3Jvc3VyZmFj
ZUF2ZXJhZ2VTbG9wZVRleGVscyk7CisgICAgcmV0dXJuIGxvZDsKK30KKworZmxvYXQgZ2V0TGlu
ZWFyTG9kRnJvbVJvdWdobmVzcyhmbG9hdCBjdWJlTWFwRGltZW5zaW9uUGl4ZWxzLCBmbG9hdCBy
b3VnaG5lc3MpIHsKKyAgICBmbG9hdCBsb2QgPSBsb2cyKGN1YmVNYXBEaW1lbnNpb25QaXhlbHMp
ICogcm91Z2huZXNzOworICAgIHJldHVybiBsb2Q7Cit9CisKK2Zsb2F0IGVudmlyb25tZW50UmFk
aWFuY2VPY2NsdXNpb24oZmxvYXQgYW1iaWVudE9jY2x1c2lvbiwgZmxvYXQgTmRvdFZVbmNsYW1w
ZWQpIHsKKyAgICBmbG9hdCB0ZW1wID0gTmRvdFZVbmNsYW1wZWQgKyBhbWJpZW50T2NjbHVzaW9u
OworICAgIHJldHVybiBjbGFtcChzcXVhcmUodGVtcCkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9u
LCAwLjAsIDEuMCk7Cit9CisKK2Zsb2F0IGVudmlyb25tZW50SG9yaXpvbk9jY2x1c2lvbihmbG9h
dDMgdmlldywgZmxvYXQzIG5vcm1hbCkgeworICAgIGZsb2F0MyByZWZsZWN0aW9uID0gcmVmbGVj
dCh2aWV3LCBub3JtYWwpOworICAgIGZsb2F0IHRlbXAgPSBjbGFtcCgxLjAgKyAxLjEgKiBkb3Qo
cmVmbGVjdGlvbiwgbm9ybWFsKSwgMC4wLCAxLjApOworICAgIHJldHVybiBzcXVhcmUodGVtcCk7
Cit9CisKK2Zsb2F0MyBwYXJhbGxheENvcnJlY3ROb3JtYWwoZmxvYXQzIHZlcnRleFBvcywgZmxv
YXQzIG9yaWdWZWMsIGZsb2F0MyBjdWJlU2l6ZSwgZmxvYXQzIGN1YmVQb3MpIHsKKyAgICBmbG9h
dDMgaW52T3JpZ1ZlYyA9IGZsb2F0MygxLjAsIDEuMCwgMS4wKSAvIG9yaWdWZWM7CisgICAgZmxv
YXQzIGhhbGZTaXplID0gY3ViZVNpemUgKiAwLjU7CisgICAgZmxvYXQzIGludGVyc2VjQXRNYXhQ
bGFuZSA9IChjdWJlUG9zICsgaGFsZlNpemUgLSB2ZXJ0ZXhQb3MpICogaW52T3JpZ1ZlYzsKKyAg
ICBmbG9hdDMgaW50ZXJzZWNBdE1pblBsYW5lID0gKGN1YmVQb3MgLSBoYWxmU2l6ZSAtIHZlcnRl
eFBvcykgKiBpbnZPcmlnVmVjOworICAgIGZsb2F0MyBsYXJnZXN0SW50ZXJzZWMgPSBtYXgoaW50
ZXJzZWNBdE1heFBsYW5lLCBpbnRlcnNlY0F0TWluUGxhbmUpOworICAgIGZsb2F0IGRpc3RhbmNl
ID0gbWluKG1pbihsYXJnZXN0SW50ZXJzZWMueCwgbGFyZ2VzdEludGVyc2VjLnkpLCBsYXJnZXN0
SW50ZXJzZWMueik7CisgICAgZmxvYXQzIGludGVyc2VjdFBvc2l0aW9uV1MgPSB2ZXJ0ZXhQb3Mg
KyBvcmlnVmVjICogZGlzdGFuY2U7CisgICAgcmV0dXJuIGludGVyc2VjdFBvc2l0aW9uV1MgLSBj
dWJlUG9zOworfQorCitmbG9hdDMgY29tcHV0ZUZpeGVkRXF1aXJlY3Rhbmd1bGFyQ29vcmRzKGZs
b2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9hdDMgZGlyZWN0aW9uKSB7Cisg
ICAgZmxvYXQgbG9uID0gYXRhbjIoZGlyZWN0aW9uLnosIGRpcmVjdGlvbi54KTsKKyAgICBmbG9h
dCBsYXQgPSBhY29zKGRpcmVjdGlvbi55KTsKKyAgICBmbG9hdDIgc3BoZXJlQ29vcmRzID0gZmxv
YXQyKGxvbiwgbGF0KSAqIDAuMTU5MTU0OTQgKiAyLjA7CisgICAgZmxvYXQgcyA9IHNwaGVyZUNv
b3Jkcy54ICogMC41ICsgMC41OworICAgIGZsb2F0IHQgPSBzcGhlcmVDb29yZHMueTsKKyAgICBy
ZXR1cm4gZmxvYXQzKHMsIHQsIDApOworfQorCitmbG9hdDMgY29tcHV0ZU1pcnJvcmVkRml4ZWRF
cXVpcmVjdGFuZ3VsYXJDb29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29ybGROb3JtYWws
IGZsb2F0MyBkaXJlY3Rpb24pIHsKKyAgICBmbG9hdCBsb24gPSBhdGFuMihkaXJlY3Rpb24ueiwg
ZGlyZWN0aW9uLngpOworICAgIGZsb2F0IGxhdCA9IGFjb3MoZGlyZWN0aW9uLnkpOworICAgIGZs
b2F0MiBzcGhlcmVDb29yZHMgPSBmbG9hdDIobG9uLCBsYXQpICogMC4xNTkxNTQ5NCAqIDIuMDsK
KyAgICBmbG9hdCBzID0gc3BoZXJlQ29vcmRzLnggKiAwLjUgKyAwLjU7CisgICAgZmxvYXQgdCA9
IHNwaGVyZUNvb3Jkcy55OworICAgIHJldHVybiBmbG9hdDMoMS4wIC0gcywgdCwgMCk7Cit9CisK
K2Zsb2F0MyBjb21wdXRlRXF1aXJlY3Rhbmd1bGFyQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxv
YXQzIHdvcmxkTm9ybWFsLCBmbG9hdDMgZXllUG9zaXRpb24sIGZsb2F0NHg0IHJlZmxlY3Rpb25N
YXRyaXgpIHsKKyAgICBmbG9hdDMgY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUod29ybGRQb3Mu
eHl6IC0gZXllUG9zaXRpb24pOworICAgIGZsb2F0MyByID0gbm9ybWFsaXplKHJlZmxlY3QoY2Ft
ZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsKSk7CisgICAgciA9IG11bChyZWZsZWN0aW9uTWF0cml4
LCBmbG9hdDQociwgMCkpLnh5ejsKKyAgICBmbG9hdCBsb24gPSBhdGFuMihyLnosIHIueCk7Cisg
ICAgZmxvYXQgbGF0ID0gYWNvcyhyLnkpOworICAgIGZsb2F0MiBzcGhlcmVDb29yZHMgPSBmbG9h
dDIobG9uLCBsYXQpICogMC4xNTkxNTQ5NCAqIDIuMDsKKyAgICBmbG9hdCBzID0gc3BoZXJlQ29v
cmRzLnggKiAwLjUgKyAwLjU7CisgICAgZmxvYXQgdCA9IHNwaGVyZUNvb3Jkcy55OworICAgIHJl
dHVybiBmbG9hdDMocywgdCwgMCk7Cit9CisKK2Zsb2F0MyBjb21wdXRlU3BoZXJpY2FsQ29vcmRz
KGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9hdDR4NCB2aWV3LCBmbG9h
dDR4NCByZWZsZWN0aW9uTWF0cml4KSB7CisgICAgZmxvYXQzIHZpZXdEaXIgPSBub3JtYWxpemUo
bXVsKHZpZXcsIHdvcmxkUG9zKS54eXopOworICAgIGZsb2F0MyB2aWV3Tm9ybWFsID0gbm9ybWFs
aXplKG11bCh2aWV3LCBmbG9hdDQod29ybGROb3JtYWwsIDAuMCkpLnh5eik7CisgICAgZmxvYXQz
IHIgPSByZWZsZWN0KHZpZXdEaXIsIHZpZXdOb3JtYWwpOworICAgIHIgPSBtdWwocmVmbGVjdGlv
bk1hdHJpeCwgZmxvYXQ0KHIsIDApKS54eXo7CisgICAgci56ID0gci56IC0gMS4wOworICAgIGZs
b2F0IG0gPSAyLjAgKiBsZW5ndGgocik7CisgICAgcmV0dXJuIGZsb2F0MyhyLnggLyBtICsgMC41
LCAxLjAgLSByLnkgLyBtIC0gMC41LCAwKTsKK30KKworZmxvYXQzIGNvbXB1dGVQbGFuYXJDb29y
ZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29ybGROb3JtYWwsIGZsb2F0MyBleWVQb3NpdGlv
biwgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAgIGZsb2F0MyB2aWV3RGlyID0gd29y
bGRQb3MueHl6IC0gZXllUG9zaXRpb247CisgICAgZmxvYXQzIGNvb3JkcyA9IG5vcm1hbGl6ZShy
ZWZsZWN0KHZpZXdEaXIsIHdvcmxkTm9ybWFsKSk7CisgICAgcmV0dXJuIG11bChyZWZsZWN0aW9u
TWF0cml4LCBmbG9hdDQoY29vcmRzLCAxKSkueHl6OworfQorCitmbG9hdDMgY29tcHV0ZUN1Ymlj
Q29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9hdDMgZXllUG9z
aXRpb24sIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgpIHsKKyAgICBmbG9hdDMgdmlld0RpciA9
IG5vcm1hbGl6ZSh3b3JsZFBvcy54eXogLSBleWVQb3NpdGlvbik7CisgICAgZmxvYXQzIGNvb3Jk
cyA9IHJlZmxlY3Qodmlld0Rpciwgd29ybGROb3JtYWwpOworICAgIGNvb3JkcyA9IG11bChyZWZs
ZWN0aW9uTWF0cml4LCBmbG9hdDQoY29vcmRzLCAwKSkueHl6OworICAgIHJldHVybiBjb29yZHM7
Cit9CisKK2Zsb2F0MyBjb21wdXRlQ3ViaWNMb2NhbENvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZs
b2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQzIGV5ZVBvc2l0aW9uLCBmbG9hdDR4NCByZWZsZWN0aW9u
TWF0cml4LCBmbG9hdDMgcmVmbGVjdGlvblNpemUsIGZsb2F0MyByZWZsZWN0aW9uUG9zaXRpb24p
IHsKKyAgICBmbG9hdDMgdmlld0RpciA9IG5vcm1hbGl6ZSh3b3JsZFBvcy54eXogLSBleWVQb3Np
dGlvbik7CisgICAgZmxvYXQzIGNvb3JkcyA9IHJlZmxlY3Qodmlld0Rpciwgd29ybGROb3JtYWwp
OworICAgIGNvb3JkcyA9IHBhcmFsbGF4Q29ycmVjdE5vcm1hbCh3b3JsZFBvcy54eXosIGNvb3Jk
cywgcmVmbGVjdGlvblNpemUsIHJlZmxlY3Rpb25Qb3NpdGlvbik7CisgICAgY29vcmRzID0gbXVs
KHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChjb29yZHMsIDApKS54eXo7CisgICAgcmV0dXJuIGNv
b3JkczsKK30KKworZmxvYXQzIGNvbXB1dGVQcm9qZWN0aW9uQ29vcmRzKGZsb2F0NCB3b3JsZFBv
cywgZmxvYXQ0eDQgdmlldywgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAgIHJldHVy
biBtdWwocmVmbGVjdGlvbk1hdHJpeCwgbXVsKHZpZXcsIHdvcmxkUG9zKSkueHl6OworfQorCitm
bG9hdDMgY29tcHV0ZVNreUJveENvb3JkcyhmbG9hdDMgcG9zaXRpb25XLCBmbG9hdDR4NCByZWZs
ZWN0aW9uTWF0cml4KSB7CisgICAgcmV0dXJuIG11bChyZWZsZWN0aW9uTWF0cml4LCBmbG9hdDQo
cG9zaXRpb25XLCAwKSkueHl6OworfQorCitmbG9hdDMgY29tcHV0ZVJlZmxlY3Rpb25Db29yZHMo
ZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29ybGROb3JtYWwsIGZsb2F0MyB2UG9zaXRpb25VVlcs
IGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgpIHsKKyAgICBmbG9hdCByID0gbGVuZ3RoKHZQb3Np
dGlvblVWVyk7CisgICAgZmxvYXQgZ2FtbWEgPSBhdGFuMih2UG9zaXRpb25VVlcueCwgdlBvc2l0
aW9uVVZXLnopOworICAgIGZsb2F0IHRoZXRhID0gYWNvcyh2UG9zaXRpb25VVlcueSAvIHIpOwor
ICAgIHJldHVybiBmbG9hdDMoZ2FtbWEgLyAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3
OTUgKyAwLjUsIHRoZXRhIC8gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1LCByKTsK
K30KKworZnJhZ21lbnQgZmxvYXQ0IG1haW4oZmxvYXQzIHZQb3NpdGlvblcgOiBhdHRyaWJ1dGUo
MCksIGZsb2F0MyB2Tm9ybWFsVyA6IGF0dHJpYnV0ZSgxKSwgZmxvYXQzIHZQb3NpdGlvblVWVyA6
IGF0dHJpYnV0ZSgyKSwgQmluZEdyb3VwQSBiaW5kR3JvdXBBLCBCaW5kR3JvdXBCIGJpbmRHcm91
cEIsIEJpbmRHcm91cEMgYmluZEdyb3VwQywgYm9vbCBmcm9udEZhY2UgOiBTVl9Jc0Zyb250RmFj
ZSkgOiBTVl9UYXJnZXQgMCB7CisgICAgZmxvYXQzIHZpZXdEaXJlY3Rpb25XID0gbm9ybWFsaXpl
KGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkV5ZVBvc2l0aW9uLnh5eiAtIHZQb3NpdGlvblcpOwor
ICAgIGZsb2F0MyBub3JtYWxXID0gbm9ybWFsaXplKHZOb3JtYWxXKTsKKyAgICBmbG9hdDIgdXZP
ZmZzZXQgPSBmbG9hdDIoMC4wLCAwLjApOworICAgIG5vcm1hbFcgPSBmcm9udEZhY2UgPyBub3Jt
YWxXIDogLW5vcm1hbFc7CisgICAgZmxvYXQzIHN1cmZhY2VBbGJlZG8gPSBiaW5kR3JvdXBCLm1h
dGVyaWFsWzBdLnZBbGJlZG9Db2xvci54eXo7CisgICAgZmxvYXQgYWxwaGEgPSBiaW5kR3JvdXBC
Lm1hdGVyaWFsWzBdLnZBbGJlZG9Db2xvci53OworICAgIGZsb2F0MyBhbWJpZW50T2NjbHVzaW9u
Q29sb3IgPSBmbG9hdDMoMS4sIDEuLCAxLik7CisgICAgZmxvYXQgbWljcm9TdXJmYWNlID0gYmlu
ZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVjdGl2aXR5Q29sb3IudzsKKyAgICBmbG9hdDMgc3Vy
ZmFjZVJlZmxlY3Rpdml0eUNvbG9yID0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVjdGl2
aXR5Q29sb3IueHl6OworICAgIG1pY3JvU3VyZmFjZSA9IGNsYW1wKG1pY3JvU3VyZmFjZSwgMC4w
LCAxLjApOworICAgIGZsb2F0IHJvdWdobmVzcyA9IDEuIC0gbWljcm9TdXJmYWNlOworICAgIGZs
b2F0IE5kb3RWVW5jbGFtcGVkID0gZG90KG5vcm1hbFcsIHZpZXdEaXJlY3Rpb25XKTsKKyAgICBm
bG9hdCBOZG90ViA9IGFicyhOZG90VlVuY2xhbXBlZCkgKyAwLjAwMDAwMDE7CisgICAgZmxvYXQg
YWxwaGFHID0gY29udmVydFJvdWdobmVzc1RvQXZlcmFnZVNsb3BlKHJvdWdobmVzcyk7CisgICAg
ZmxvYXQyIEFBUm91Z2huZXNzRmFjdG9ycyA9IGdldEFBUm91Z2huZXNzRmFjdG9ycyhub3JtYWxX
KTsKKyAgICBmbG9hdDQgZW52aXJvbm1lbnRSYWRpYW5jZSA9IGZsb2F0NCgwLiwgMC4sIDAuLCAw
Lik7CisgICAgZmxvYXQzIGVudmlyb25tZW50SXJyYWRpYW5jZSA9IGZsb2F0MygwLiwgMC4sIDAu
KTsKKyAgICBmbG9hdDMgcmVmbGVjdGlvblZlY3RvciA9IGNvbXB1dGVSZWZsZWN0aW9uQ29vcmRz
KGZsb2F0NCh2UG9zaXRpb25XLCAxLjApLCBub3JtYWxXLCB2UG9zaXRpb25VVlcsIGJpbmRHcm91
cEIubWF0ZXJpYWxbMF0ucmVmbGVjdGlvbk1hdHJpeCk7CisgICAgZmxvYXQzIHJlZmxlY3Rpb25D
b29yZHMgPSByZWZsZWN0aW9uVmVjdG9yOworICAgIGZsb2F0IHJlZmxlY3Rpb25MT0QgPSBnZXRM
b2RGcm9tQWxwaGFHKGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25NaWNyb3N1cmZh
Y2VJbmZvcy54LCBhbHBoYUcpOworICAgIHJlZmxlY3Rpb25MT0QgPSByZWZsZWN0aW9uTE9EICog
YmluZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLnkgKyBi
aW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MuejsKKyAg
ICBmbG9hdCByZXF1ZXN0ZWRSZWZsZWN0aW9uTE9EID0gcmVmbGVjdGlvbkxPRDsKKyAgICBlbnZp
cm9ubWVudFJhZGlhbmNlID0gU2FtcGxlKGJpbmRHcm91cEMucmVmbGVjdGlvblNhbXBsZXJUZXh0
dXJlLCBiaW5kR3JvdXBDLnJlZmxlY3Rpb25TYW1wbGVyU2FtcGxlciwgcmVmbGVjdGlvbkNvb3Jk
cy54eSk7IC8vU2FtcGxlTGV2ZWwoYmluZEdyb3VwQy5yZWZsZWN0aW9uU2FtcGxlclRleHR1cmUs
IGJpbmRHcm91cEMucmVmbGVjdGlvblNhbXBsZXJTYW1wbGVyLCByZWZsZWN0aW9uQ29vcmRzLCBy
ZXF1ZXN0ZWRSZWZsZWN0aW9uTE9EKTsKKyAgICBlbnZpcm9ubWVudFJhZGlhbmNlLnh5eiA9IGZy
b21SR0JEKGVudmlyb25tZW50UmFkaWFuY2UpOworICAgIGVudmlyb25tZW50UmFkaWFuY2UueHl6
ICo9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25JbmZvcy54OworICAgIGVudmly
b25tZW50UmFkaWFuY2UueHl6ICo9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25D
b2xvci54eXo7CisgICAgZW52aXJvbm1lbnRJcnJhZGlhbmNlICo9IGJpbmRHcm91cEIubWF0ZXJp
YWxbMF0udlJlZmxlY3Rpb25Db2xvci54eXo7CisgICAgZmxvYXQgcmVmbGVjdGFuY2UgPSBtYXgo
bWF4KHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci54LCBzdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3Iu
eSksIHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci56KTsKKyAgICBmbG9hdCByZWZsZWN0YW5jZTkw
ID0gZnJlc25lbEdyYXppbmdSZWZsZWN0YW5jZShyZWZsZWN0YW5jZSk7CisgICAgZmxvYXQzIHNw
ZWN1bGFyRW52aXJvbm1lbnRSMCA9IHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci54eXo7CisgICAg
ZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSOTAgPSBmbG9hdDMoMS4wLCAxLjAsIDEuMCkgKiBy
ZWZsZWN0YW5jZTkwOworICAgIGZsb2F0MyBlbnZpcm9ubWVudEJyZGYgPSBnZXRCUkRGTG9va3Vw
KE5kb3RWLCByb3VnaG5lc3MsIGJpbmRHcm91cEEuZW52aXJvbm1lbnRCcmRmU2FtcGxlclRleHR1
cmUsIGJpbmRHcm91cEEuZW52aXJvbm1lbnRCcmRmU2FtcGxlclNhbXBsZXIpOworICAgIGZsb2F0
MyBlbmVyZ3lDb25zZXJ2YXRpb25GYWN0b3IgPSBnZXRFbmVyZ3lDb25zZXJ2YXRpb25GYWN0b3Io
c3BlY3VsYXJFbnZpcm9ubWVudFIwLCBlbnZpcm9ubWVudEJyZGYpOworICAgIGZsb2F0MyBkaWZm
dXNlQmFzZSA9IGZsb2F0MygwLiwgMC4sIDAuKTsKKyAgICBQcmVMaWdodGluZ0luZm8gcHJlSW5m
bzsKKyAgICBMaWdodGluZ0luZm8gaW5mbzsKKyAgICBmbG9hdCBzaGFkb3cgPSAxLjsKKyAgICBm
bG9hdDMgc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3RhbmNlID0gZ2V0UmVmbGVjdGFuY2VGcm9t
QW5hbHl0aWNhbEJSREZMb29rdXBfSm9uZXMoTmRvdFYsIHNwZWN1bGFyRW52aXJvbm1lbnRSMCwg
c3BlY3VsYXJFbnZpcm9ubWVudFI5MCwgc3FydChtaWNyb1N1cmZhY2UpKTsKKyAgICBzdXJmYWNl
QWxiZWRvLnh5eiA9ICgxLiAtIHJlZmxlY3RhbmNlKSAqIHN1cmZhY2VBbGJlZG8ueHl6OworICAg
IGZsb2F0MyBmaW5hbElycmFkaWFuY2UgPSBlbnZpcm9ubWVudElycmFkaWFuY2U7CisgICAgZmlu
YWxJcnJhZGlhbmNlICo9IHN1cmZhY2VBbGJlZG8ueHl6OworICAgIGZsb2F0MyBmaW5hbFJhZGlh
bmNlID0gZW52aXJvbm1lbnRSYWRpYW5jZS54eXo7CisgICAgZmluYWxSYWRpYW5jZSAqPSBzcGVj
dWxhckVudmlyb25tZW50UmVmbGVjdGFuY2U7CisgICAgZmxvYXQzIGZpbmFsUmFkaWFuY2VTY2Fs
ZWQgPSBmaW5hbFJhZGlhbmNlICogYmluZEdyb3VwQi5tYXRlcmlhbFswXS52TGlnaHRpbmdJbnRl
bnNpdHkuejsKKyAgICBmaW5hbFJhZGlhbmNlU2NhbGVkICo9IGVuZXJneUNvbnNlcnZhdGlvbkZh
Y3RvcjsKKyAgICBmbG9hdDMgZmluYWxEaWZmdXNlID0gZGlmZnVzZUJhc2U7CisgICAgZmluYWxE
aWZmdXNlICo9IHN1cmZhY2VBbGJlZG8ueHl6OworICAgIGZpbmFsRGlmZnVzZSA9IG1heChmaW5h
bERpZmZ1c2UsIGZsb2F0MygwLjAsIDAuMCwgMC4wKSk7CisgICAgZmxvYXQzIGZpbmFsQW1iaWVu
dCA9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkFtYmllbnRDb2xvcjsKKyAgICBmaW5hbEFtYmll
bnQgKj0gc3VyZmFjZUFsYmVkby54eXo7CisgICAgZmxvYXQzIGZpbmFsRW1pc3NpdmUgPSBiaW5k
R3JvdXBCLm1hdGVyaWFsWzBdLnZFbWlzc2l2ZUNvbG9yOworICAgIGZsb2F0MyBhbWJpZW50T2Nj
bHVzaW9uRm9yRGlyZWN0RGlmZnVzZSA9IGFtYmllbnRPY2NsdXNpb25Db2xvcjsKKyAgICBmbG9h
dDQgZmluYWxDb2xvciA9IGZsb2F0NCgKKyAgICAgICAgZmluYWxBbWJpZW50ICogYW1iaWVudE9j
Y2x1c2lvbkNvbG9yICsKKyAgICAgICAgZmluYWxEaWZmdXNlICogYW1iaWVudE9jY2x1c2lvbkZv
ckRpcmVjdERpZmZ1c2UgKiBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZMaWdodGluZ0ludGVuc2l0
eS54ICsKKyAgICAgICAgZmluYWxJcnJhZGlhbmNlICogYW1iaWVudE9jY2x1c2lvbkNvbG9yICog
YmluZEdyb3VwQi5tYXRlcmlhbFswXS52TGlnaHRpbmdJbnRlbnNpdHkueiArCisgICAgICAgIGZp
bmFsUmFkaWFuY2VTY2FsZWQgKworICAgICAgICBmaW5hbEVtaXNzaXZlICogYmluZEdyb3VwQi5t
YXRlcmlhbFswXS52TGlnaHRpbmdJbnRlbnNpdHkueSwKKyAgICAgICAgYWxwaGEpOworICAgIGZp
bmFsQ29sb3IgPSBtYXgoZmluYWxDb2xvciwgZmxvYXQ0KDAuMCwgMC4wLCAwLjAsIDAuMCkpOwor
ICAgIGZpbmFsQ29sb3IgPSBhcHBseUltYWdlUHJvY2Vzc2luZyhmaW5hbENvbG9yKTsKKyAgICBm
aW5hbENvbG9yLncgKj0gYmluZEdyb3VwQi5tZXNoWzBdLnZpc2liaWxpdHk7CisgICAgcmV0dXJu
IGZpbmFsQ29sb3I7Cit9CitgOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kZW1v
cy93ZWJncHUvYmFieWxvbi92ZXJ0ZXhTaGFkZXJHTFNMMS5nbHNsIGIvV2Vic2l0ZXMvd2Via2l0
Lm9yZy9kZW1vcy93ZWJncHUvYmFieWxvbi92ZXJ0ZXhTaGFkZXJHTFNMMS5nbHNsCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY0NDRhNjgyMWM0OTQ5OTA3YjJlMDZiOWE5ZDE3OGVkZWExZmY0MDEKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9uL3ZlcnRleFNo
YWRlckdMU0wxLmdsc2wKQEAgLTAsMCArMSwxOTggQEAKKyN2ZXJzaW9uIDQ1MAorCitwcmVjaXNp
b24gaGlnaHAgZmxvYXQ7CisKK2xheW91dChzdGQxNDAsY29sdW1uX21ham9yKSB1bmlmb3JtOwor
CitsYXlvdXQoc2V0ID0gMCwgYmluZGluZyA9IDApIHVuaWZvcm0gU2NlbmUgeworICAgIG1hdDQg
dmlld1Byb2plY3Rpb247CisgICAgbWF0NCB2aWV3OworfTsKKworbGF5b3V0KHNldCA9IDEsIGJp
bmRpbmcgPSAwKSB1bmlmb3JtIE1hdGVyaWFsIHsKKyAgICB2ZWMyIHZBbGJlZG9JbmZvczsKKyAg
ICB2ZWM0IHZBbWJpZW50SW5mb3M7CisgICAgdmVjMiB2T3BhY2l0eUluZm9zOworICAgIHZlYzIg
dkVtaXNzaXZlSW5mb3M7CisgICAgdmVjMiB2TGlnaHRtYXBJbmZvczsKKyAgICB2ZWMzIHZSZWZs
ZWN0aXZpdHlJbmZvczsKKyAgICB2ZWMyIHZNaWNyb1N1cmZhY2VTYW1wbGVySW5mb3M7CisgICAg
dmVjMiB2UmVmbGVjdGlvbkluZm9zOworICAgIHZlYzMgdlJlZmxlY3Rpb25Qb3NpdGlvbjsKKyAg
ICB2ZWMzIHZSZWZsZWN0aW9uU2l6ZTsKKyAgICB2ZWMzIHZCdW1wSW5mb3M7CisgICAgbWF0NCBh
bGJlZG9NYXRyaXg7CisgICAgbWF0NCBhbWJpZW50TWF0cml4OworICAgIG1hdDQgb3BhY2l0eU1h
dHJpeDsKKyAgICBtYXQ0IGVtaXNzaXZlTWF0cml4OworICAgIG1hdDQgbGlnaHRtYXBNYXRyaXg7
CisgICAgbWF0NCByZWZsZWN0aXZpdHlNYXRyaXg7CisgICAgbWF0NCBtaWNyb1N1cmZhY2VTYW1w
bGVyTWF0cml4OworICAgIG1hdDQgYnVtcE1hdHJpeDsKKyAgICB2ZWMyIHZUYW5nZW50U3BhY2VQ
YXJhbXM7CisgICAgbWF0NCByZWZsZWN0aW9uTWF0cml4OworICAgIHZlYzMgdlJlZmxlY3Rpb25D
b2xvcjsKKyAgICB2ZWM0IHZBbGJlZG9Db2xvcjsKKyAgICB2ZWM0IHZMaWdodGluZ0ludGVuc2l0
eTsKKyAgICB2ZWMzIHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7CisgICAgZmxvYXQgcG9p
bnRTaXplOworICAgIHZlYzQgdlJlZmxlY3Rpdml0eUNvbG9yOworICAgIHZlYzMgdkVtaXNzaXZl
Q29sb3I7CisgICAgdmVjNCB2RXllUG9zaXRpb247CisgICAgdmVjMyB2QW1iaWVudENvbG9yOwor
ICAgIHZlYzIgdkRlYnVnTW9kZTsKKyAgICB2ZWMyIHZDbGVhckNvYXRQYXJhbXM7CisgICAgdmVj
NCB2Q2xlYXJDb2F0UmVmcmFjdGlvblBhcmFtczsKKyAgICB2ZWMyIHZDbGVhckNvYXRJbmZvczsK
KyAgICBtYXQ0IGNsZWFyQ29hdE1hdHJpeDsKKyAgICB2ZWMyIHZDbGVhckNvYXRCdW1wSW5mb3M7
CisgICAgdmVjMiB2Q2xlYXJDb2F0VGFuZ2VudFNwYWNlUGFyYW1zOworICAgIG1hdDQgY2xlYXJD
b2F0QnVtcE1hdHJpeDsKKyAgICB2ZWM0IHZDbGVhckNvYXRUaW50UGFyYW1zOworICAgIGZsb2F0
IGNsZWFyQ29hdENvbG9yQXREaXN0YW5jZTsKKyAgICB2ZWMyIHZDbGVhckNvYXRUaW50SW5mb3M7
CisgICAgbWF0NCBjbGVhckNvYXRUaW50TWF0cml4OworICAgIHZlYzMgdkFuaXNvdHJvcHk7Cisg
ICAgdmVjMiB2QW5pc290cm9weUluZm9zOworICAgIG1hdDQgYW5pc290cm9weU1hdHJpeDsKKyAg
ICB2ZWM0IHZTaGVlbkNvbG9yOworICAgIHZlYzIgdlNoZWVuSW5mb3M7CisgICAgbWF0NCBzaGVl
bk1hdHJpeDsKKyAgICB2ZWMzIHZSZWZyYWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7CisgICAgdmVj
NCB2UmVmcmFjdGlvbkluZm9zOworICAgIG1hdDQgcmVmcmFjdGlvbk1hdHJpeDsKKyAgICB2ZWMy
IHZUaGlja25lc3NJbmZvczsKKyAgICBtYXQ0IHRoaWNrbmVzc01hdHJpeDsKKyAgICB2ZWMyIHZU
aGlja25lc3NQYXJhbTsKKyAgICB2ZWMzIHZEaWZmdXNpb25EaXN0YW5jZTsKKyAgICB2ZWM0IHZU
aW50Q29sb3I7CisgICAgdmVjMyB2U3ViU3VyZmFjZUludGVuc2l0eTsKKyAgICB2ZWMzIHZTcGhl
cmljYWxMMDA7CisgICAgdmVjMyB2U3BoZXJpY2FsTDFfMTsKKyAgICB2ZWMzIHZTcGhlcmljYWxM
MTA7CisgICAgdmVjMyB2U3BoZXJpY2FsTDExOworICAgIHZlYzMgdlNwaGVyaWNhbEwyXzI7Cisg
ICAgdmVjMyB2U3BoZXJpY2FsTDJfMTsKKyAgICB2ZWMzIHZTcGhlcmljYWxMMjA7CisgICAgdmVj
MyB2U3BoZXJpY2FsTDIxOworICAgIHZlYzMgdlNwaGVyaWNhbEwyMjsKKyAgICB2ZWMzIHZTcGhl
cmljYWxYOworICAgIHZlYzMgdlNwaGVyaWNhbFk7CisgICAgdmVjMyB2U3BoZXJpY2FsWjsKKyAg
ICB2ZWMzIHZTcGhlcmljYWxYWF9aWjsKKyAgICB2ZWMzIHZTcGhlcmljYWxZWV9aWjsKKyAgICB2
ZWMzIHZTcGhlcmljYWxaWjsKKyAgICB2ZWMzIHZTcGhlcmljYWxYWTsKKyAgICB2ZWMzIHZTcGhl
cmljYWxZWjsKKyAgICB2ZWMzIHZTcGhlcmljYWxaWDsKK307CisKK2xheW91dChzZXQgPSAxLCBi
aW5kaW5nID0gMSkgdW5pZm9ybSBNZXNoIHsKKyAgICBtYXQ0IHdvcmxkOworICAgIGZsb2F0IHZp
c2liaWxpdHk7Cit9OworCitsYXlvdXQobG9jYXRpb24gPSAwKSBpbiB2ZWMzIHBvc2l0aW9uOwor
bGF5b3V0KGxvY2F0aW9uID0gMSkgaW4gdmVjMyBub3JtYWw7CisKK21hdDMgdHJhbnNwb3NlTWF0
MyhtYXQzIGluTWF0cml4KSB7CisgICAgdmVjMyBpMCA9IGluTWF0cml4WzBdOworICAgIHZlYzMg
aTEgPSBpbk1hdHJpeFsxXTsKKyAgICB2ZWMzIGkyID0gaW5NYXRyaXhbMl07CisgICAgbWF0MyBv
dXRNYXRyaXggPSBtYXQzKAorICAgICAgICB2ZWMzKGkwLngsIGkxLngsIGkyLngpLAorICAgICAg
ICB2ZWMzKGkwLnksIGkxLnksIGkyLnkpLAorICAgICAgICB2ZWMzKGkwLnosIGkxLnosIGkyLnop
CisgICAgKTsKKyAgICByZXR1cm4gb3V0TWF0cml4OworfQorCittYXQzIGludmVyc2VNYXQzKG1h
dDMgaW5NYXRyaXgpIHsKKyAgICBmbG9hdCBhMDAgPSBpbk1hdHJpeFswXVswXSwgYTAxID0gaW5N
YXRyaXhbMF1bMV0sIGEwMiA9IGluTWF0cml4WzBdWzJdOworICAgIGZsb2F0IGExMCA9IGluTWF0
cml4WzFdWzBdLCBhMTEgPSBpbk1hdHJpeFsxXVsxXSwgYTEyID0gaW5NYXRyaXhbMV1bMl07Cisg
ICAgZmxvYXQgYTIwID0gaW5NYXRyaXhbMl1bMF0sIGEyMSA9IGluTWF0cml4WzJdWzFdLCBhMjIg
PSBpbk1hdHJpeFsyXVsyXTsKKyAgICBmbG9hdCBiMDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjE7
CisgICAgZmxvYXQgYjExID0gLWEyMiAqIGExMCArIGExMiAqIGEyMDsKKyAgICBmbG9hdCBiMjEg
PSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7CisgICAgZmxvYXQgZGV0ID0gYTAwICogYjAxICsgYTAx
ICogYjExICsgYTAyICogYjIxOworICAgIHJldHVybiBtYXQzKGIwMSwgLWEyMiAqIGEwMSArIGEw
MiAqIGEyMSwgYTEyICogYTAxIC0gYTAyICogYTExLAorICAgICAgICBiMTEsIGEyMiAqIGEwMCAt
IGEwMiAqIGEyMCwgLWExMiAqIGEwMCArIGEwMiAqIGExMCwKKyAgICAgICAgYjIxLCAtYTIxICog
YTAwICsgYTAxICogYTIwLCBhMTEgKiBhMDAgLSBhMDEgKiBhMTApIC8gZGV0OworfQorCit2ZWMz
IHRvTGluZWFyU3BhY2UodmVjMyBjb2xvcikgeworICAgIHJldHVybiBwb3coY29sb3IsIHZlYzMo
Mi4yKSk7Cit9CisKK3ZlYzMgdG9HYW1tYVNwYWNlKHZlYzMgY29sb3IpIHsKKyAgICByZXR1cm4g
cG93KGNvbG9yLCB2ZWMzKDEuMCAvIDIuMikpOworfQorCitmbG9hdCBzcXVhcmUoZmxvYXQgdmFs
dWUpIHsKKyAgICByZXR1cm4gdmFsdWUgKiB2YWx1ZTsKK30KKworZmxvYXQgcG93NShmbG9hdCB2
YWx1ZSkgeworICAgIGZsb2F0IHNxID0gdmFsdWUgKiB2YWx1ZTsKKyAgICByZXR1cm4gc3EgKiBz
cSAqIHZhbHVlOworfQorCitmbG9hdCBnZXRMdW1pbmFuY2UodmVjMyBjb2xvcikgeworICAgIHJl
dHVybiBjbGFtcChkb3QoY29sb3IsIHZlYzMoMC4yMTI2LCAwLjcxNTIsIDAuMDcyMikpLCAwLiwg
MS4pOworfQorCitmbG9hdCBnZXRSYW5kKHZlYzIgc2VlZCkgeworICAgIHJldHVybiBmcmFjdChz
aW4oZG90KHNlZWQueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7Cit9
CisKK2Zsb2F0IGRpdGhlcih2ZWMyIHNlZWQsIGZsb2F0IHZhcmlhbmNlQW1vdW50KSB7CisgICAg
ZmxvYXQgcmFuZCA9IGdldFJhbmQoc2VlZCk7CisgICAgZmxvYXQgZGl0aGVyID0gbWl4KC12YXJp
YW5jZUFtb3VudCAvIDI1NS4wLCB2YXJpYW5jZUFtb3VudCAvIDI1NS4wLCByYW5kKTsKKyAgICBy
ZXR1cm4gZGl0aGVyOworfQorCit2ZWM0IHRvUkdCRCh2ZWMzIGNvbG9yKSB7CisgICAgZmxvYXQg
bWF4UkdCID0gbWF4KG1heChjb2xvci5yLCBtYXgoY29sb3IuZywgY29sb3IuYikpLCAwLjAwMDAw
MDEpOworICAgIGZsb2F0IEQgPSBtYXgoMjU1LjAgLyBtYXhSR0IsIDEuKTsKKyAgICBEID0gY2xh
bXAoZmxvb3IoRCkgLyAyNTUuMCwgMC4sIDEuKTsKKyAgICB2ZWMzIHJnYiA9IGNvbG9yLnJnYiAq
IEQ7CisgICAgcmdiID0gdG9HYW1tYVNwYWNlKHJnYik7CisgICAgcmV0dXJuIHZlYzQocmdiLCBE
KTsKK30KKwordmVjMyBmcm9tUkdCRCh2ZWM0IHJnYmQpIHsKKyAgICByZ2JkLnJnYiA9IHRvTGlu
ZWFyU3BhY2UocmdiZC5yZ2IpOworICAgIHJldHVybiByZ2JkLnJnYiAvIHJnYmQuYTsKK30KKwor
bGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IHZlYzMgdlBvc2l0aW9uVzsKK2xheW91dChsb2NhdGlv
biA9IDEpIG91dCB2ZWMzIHZOb3JtYWxXOworbGF5b3V0KGxvY2F0aW9uID0gMikgb3V0IHZlYzMg
dkVudmlyb25tZW50SXJyYWRpYW5jZTsKKwordmVjMyBjb21wdXRlRW52aXJvbm1lbnRJcnJhZGlh
bmNlKHZlYzMgbm9ybWFsKSB7CisgICAgcmV0dXJuIHZTcGhlcmljYWxMMDAKKyAgICAgICAgKyB2
U3BoZXJpY2FsTDFfMSAqIChub3JtYWwueSkKKyAgICAgICAgKyB2U3BoZXJpY2FsTDEwICogKG5v
cm1hbC56KQorICAgICAgICArIHZTcGhlcmljYWxMMTEgKiAobm9ybWFsLngpCisgICAgICAgICsg
dlNwaGVyaWNhbEwyXzIgKiAobm9ybWFsLnkgKiBub3JtYWwueCkKKyAgICAgICAgKyB2U3BoZXJp
Y2FsTDJfMSAqIChub3JtYWwueSAqIG5vcm1hbC56KQorICAgICAgICArIHZTcGhlcmljYWxMMjAg
KiAoKDMuMCAqIG5vcm1hbC56ICogbm9ybWFsLnopIC0gMS4wKQorICAgICAgICArIHZTcGhlcmlj
YWxMMjEgKiAobm9ybWFsLnogKiBub3JtYWwueCkKKyAgICAgICAgKyB2U3BoZXJpY2FsTDIyICog
KG5vcm1hbC54ICogbm9ybWFsLnggLSAobm9ybWFsLnkgKiBub3JtYWwueSkpOworfQorCit2b2lk
IG1haW4odm9pZCkgeworICAgIHZlYzMgcG9zaXRpb25VcGRhdGVkID0gcG9zaXRpb247CisgICAg
dmVjMyBub3JtYWxVcGRhdGVkID0gbm9ybWFsOworICAgIG1hdDQgZmluYWxXb3JsZCA9IHdvcmxk
OworICAgIGdsX1Bvc2l0aW9uID0gdmlld1Byb2plY3Rpb24gKiBmaW5hbFdvcmxkICogdmVjNChw
b3NpdGlvblVwZGF0ZWQsIDEuMCk7CisgICAgdmVjNCB3b3JsZFBvcyA9IGZpbmFsV29ybGQgKiB2
ZWM0KHBvc2l0aW9uVXBkYXRlZCwgMS4wKTsKKyAgICB2UG9zaXRpb25XID0gdmVjMyh3b3JsZFBv
cyk7CisgICAgbWF0MyBub3JtYWxXb3JsZCA9IG1hdDMoZmluYWxXb3JsZCk7CisgICAgdk5vcm1h
bFcgPSBub3JtYWxpemUobm9ybWFsV29ybGQgKiBub3JtYWxVcGRhdGVkKTsKKyAgICB2ZWMzIHJl
ZmxlY3Rpb25WZWN0b3IgPSB2ZWMzKHJlZmxlY3Rpb25NYXRyaXggKiB2ZWM0KHZOb3JtYWxXLCAw
KSkueHl6OworICAgIHZFbnZpcm9ubWVudElycmFkaWFuY2UgPSBjb21wdXRlRW52aXJvbm1lbnRJ
cnJhZGlhbmNlKHJlZmxlY3Rpb25WZWN0b3IpOworICAgIHZlYzIgdXZVcGRhdGVkID0gdmVjMigw
LiwgMC4pOworICAgIHZlYzIgdXYyID0gdmVjMigwLiwgMC4pOworICAgIGdsX1Bvc2l0aW9uLnkg
Kj0gLTEuOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378398</attachid>
            <date>2019-09-09 12:50:40 -0700</date>
            <delta_ts>2019-09-09 14:15:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201611-20190909125038.patch</filename>
            <type>text/plain</type>
            <size>9378582</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NjU2CmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQu
b3JnL0NoYW5nZUxvZyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCmluZGV4IGQyNDg5
NjZhYmU0OGQ4YmQyNjY0ZWRiYmVmN2U4ZDc5ZGMxYjJjMjcuLmFlMTg0NGM4NzdhZDY1ODM5MDY2
M2M0MWU5NTBkNDIwMTY3NGQ0NDIgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hh
bmdlTG9nCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTktMDktMDkgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBCYWJ5bG9uIGRlbW9zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDE2MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGRlbW9zL3dlYmdwdS9iYWJ5bG9uL0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAq
IGRlbW9zL3dlYmdwdS9iYWJ5bG9uL2JhYnlsb25XZWJHcHUubWF4LmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBkZW1vcy93ZWJncHUvYmFieWxvbi9sb2dvLnN2ZzogQWRkZWQuCisgICAgICAgICogZGVt
b3Mvd2ViZ3B1L2JhYnlsb24vb25lSGVsbWV0V2ViR1BVLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGRlbW9zL3dlYmdwdS9iYWJ5bG9uL29uZUhlbG1ldFdlYkdQVUdMU0xTaGFkZXJzLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBkZW1vcy93ZWJncHUvYmFieWxvbi9vbmVIZWxtZXRXZWJHUFVXU0xTaGFk
ZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkZW1vcy93ZWJncHUvYmFieWxvbi9vbmVTcGhlcmVX
ZWJHUFUuaHRtbDogQWRkZWQuCisgICAgICAgICogZGVtb3Mvd2ViZ3B1L2JhYnlsb24vb25lU3Bo
ZXJlV2ViR1BVR0xTTFNoYWRlcnMuanM6IEFkZGVkLgorICAgICAgICAqIGRlbW9zL3dlYmdwdS9i
YWJ5bG9uL29uZVNwaGVyZVdlYkdQVVdTTFNoYWRlcnMuanM6IEFkZGVkLgorICAgICAgICAqIGRl
bW9zL3dlYmdwdS9iYWJ5bG9uL3ZlcnRleFNoYWRlckdMU0wxLmdsc2w6IEFkZGVkLgorCiAyMDE5
LTA5LTA5ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYm9pZHMg
dGltZSB0ZXN0CmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9i
YWJ5bG9uL0xJQ0VOU0UgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9u
L0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzM0MWVkOGI1OTcxZjhjN2ZlYjQ4NDRmZjA4MTBkZmU1Zjhk
OTk2MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1
L2JhYnlsb24vTElDRU5TRQpAQCAtMCwwICsxLDkxIEBACitCYWJ5bG9uLmpzIFdlYnNpdGUKKz09
PT09PT09PT09PT09PT09PQorCit3d3cuYmFieWxvbmpzLmNvbSBzaXRlLgorCitGb3IgcXVlc3Rp
b25zLCBwbGVhc2UgdXNlIG91ciBbZm9ydW1dKGh0dHBzOi8vZm9ydW0uYmFieWxvbmpzLmNvbSkK
K1NvdXJjZXMgZm9yIEJhYnlsb24uanMgYXJlIGluIGEgc2VwYXJhdGUgW3JlcG9zaXRvcnldKGh0
dHBzOi8vZ2l0aHViLmNvbS9CYWJ5bG9uSlMvQmFieWxvbi5qcykKKworRG9jdW1lbnRhdGlvbiBj
YW4gYmUgZm91bmQgW2hlcmVdKGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20pCisKKworIyMgQXBh
Y2hlIExpY2Vuc2UgMi4wIChBcGFjaGUpCisKK0FwYWNoZSBMaWNlbnNlCitWZXJzaW9uIDIuMCwg
SmFudWFyeSAyMDA0CitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKK1RFUk1TIEFO
RCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisj
IyMgRGVmaW5pdGlvbnMuCisKKyJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29u
ZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5l
ZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisiTGljZW5zb3Ii
IHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieSB0
aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyJMZWdh
bCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBh
bGwgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJl
IHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMg
b2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0
IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3Vj
aCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVy
c2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNo
YXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyJZ
b3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkg
ZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworIlNvdXJj
ZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNh
dGlvbnMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUs
IGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworIk9iamVj
dCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwgdHJh
bnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1
dCBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50
YXRpb24sIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworIldvcmsiIHNo
YWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2Jq
ZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQg
YnkgYSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8g
dGhlIHdvcmsgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4K
KworIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291
cmNlIG9yIE9iamVjdCBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRo
ZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25z
LCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMgcmVwcmVzZW50LCBhcyBhIHdo
b2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMgb2Yg
dGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRo
YXQgcmVtYWluIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1l
KSB0byB0aGUgaW50ZXJmYWNlcyBvZiwgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhl
cmVvZi4KKworIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlw
LCBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2Rp
ZmljYXRpb25zIG9yIGFkZGl0aW9ucyB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0
aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBp
bmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lciBvciBieSBhbiBpbmRp
dmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2Yg
dGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24s
ICJzdWJtaXR0ZWQiIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3Jp
dHRlbiBjb21tdW5pY2F0aW9uIHNlbnQgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRh
dGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tbXVuaWNhdGlvbiBvbiBlbGVj
dHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywgYW5kIGlz
c3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9m
LCB0aGUgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmlu
ZyB0aGUgV29yaywgYnV0IGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3Vv
dXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29w
eXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisiQ29udHJpYnV0b3IiIHNo
YWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBvbiBi
ZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNv
ciBhbmQgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyMjIyBH
cmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4KKworU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNv
bmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMg
dG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwg
cm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2Us
IHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkg
cGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFdvcmsgYW5kIHN1Y2ggRGVy
aXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyMjIyBHcmFudCBvZiBQ
YXRlbnQgTGljZW5zZS4KKworU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg
dGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVy
cGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVl
LCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBs
aWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBv
cnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBh
cHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggQ29u
dHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyIENvbnRyaWJ1
dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykg
d2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVk
LiBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAo
aW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxs
ZWdpbmcgdGhhdCB0aGUgV29yayBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGlu
IHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJp
bmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRo
aXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBz
dWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyMjIyBSZWRpc3RyaWJ1dGlvbi4KKworWW91IG1h
eSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRp
dmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0
aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UgbWVl
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKzEuIFlvdSBtdXN0IGdpdmUgYW55IG90aGVy
IHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhp
cyBMaWNlbnNlOyBhbmQKKworMi4gWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRv
IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmls
ZXM7IGFuZAorCiszLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkg
RGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRl
bnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZv
cm0gb2YgdGhlIFdvcmssIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRh
aW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCis0LiBJZiB0aGUg
V29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cyBkaXN0cmli
dXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0
IGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRh
aW5lZCB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhh
dCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4g
YXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4
dCBmaWxlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhp
biB0aGUgU291cmNlIGZvcm0gb3IgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0
aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5
IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBu
b3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzIG9mIHRoZSBOT1RJQ0UgZmlsZSBh
cmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQgZG8gbm90IG1vZGlmeSB0aGUg
TGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24gbm90aWNlcyB3aXRoaW4g
RGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUgb3IgYXMgYW4g
YWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkIHRoYXQg
c3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZCBh
cyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKK1lvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdo
dCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZCBtYXkgcHJvdmlkZSBhZGRpdGlv
bmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJl
cHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IgZm9y
IGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2Us
IHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29t
cGxpZXMgd2l0aCB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisjIyMg
U3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLgorCitVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3Rh
dGUgb3RoZXJ3aXNlLCBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZv
ciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1
bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFu
eSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJv
dmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkgdGhlIHRlcm1zIG9m
IGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQgd2l0
aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisjIyMgVHJhZGVtYXJr
cy4KKworVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0
cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBv
ZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3Vz
dG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJv
ZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworIyMjIERpc2NsYWltZXIg
b2YgV2FycmFudHkuCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoIENv
bnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lT
LCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJy
YW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5U
QUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29s
ZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVz
aW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55IHJpc2tzIGFzc29j
aWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5z
ZS4KKworIyMjIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCitJbiBubyBldmVudCBhbmQgdW5k
ZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNl
KSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkgbmVnbGlnZW50IGFjdHMpIG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUgbGlhYmxlIHRvIFlv
dSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBp
bmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlz
aW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFi
aWxpdHkgdG8gdXNlIHRoZSBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFn
ZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUg
b3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBv
ciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IgaGFzIGJlZW4gYWR2aXNlZCBvZiB0
aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisjIyMgQWNjZXB0aW5nIFdhcnJhbnR5
IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LgorCitXaGlsZSByZWRpc3RyaWJ1dGluZyB0aGUgV29y
ayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBh
bmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5k
ZW1uaXR5LCBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25z
aXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxp
Z2F0aW9ucywgWW91IG1heSBhY3Qgb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIg
c29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiBhbnkgb3RoZXIgQ29udHJpYnV0
b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQg
ZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSwg
b3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9m
IHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5
LgorCisjIyBFeHRlcm5hbCBkZXBlbmRlbmNpZXMKKy0gaGFuZC5qczogaHR0cDovL2hhbmRqcy5j
b2RlcGxleC5jb20KKworCisKKworCisKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5vcmcv
ZGVtb3Mvd2ViZ3B1L2JhYnlsb24vYmFieWxvbldlYkdwdS5tYXguanMgYi9XZWJzaXRlcy93ZWJr
aXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9uL2JhYnlsb25XZWJHcHUubWF4LmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmIwNDY5NTcyMWE5YWRlODMwYzMyMGVkNTMxMjVlMjk2NDI0NzZlMDYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9uL2JhYnlsb25X
ZWJHcHUubWF4LmpzCkBAIC0wLDAgKzEsMTY5MjYxIEBACisoZnVuY3Rpb24gd2VicGFja1VuaXZl
cnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkgeworCWlmKHR5cGVvZiBleHBvcnRz
ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JykKKwkJbW9kdWxlLmV4
cG9ydHMgPSBmYWN0b3J5KCk7CisJZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24n
ICYmIGRlZmluZS5hbWQpCisJCWRlZmluZSgiYmFieWxvbmpzIiwgW10sIGZhY3RvcnkpOworCWVs
c2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKQorCQlleHBvcnRzWyJiYWJ5bG9uanMi
XSA9IGZhY3RvcnkoKTsKKwllbHNlCisJCXJvb3RbIkJBQllMT04iXSA9IGZhY3RvcnkoKTsKK30p
KCh0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIGdsb2JhbCAhPT0g
InVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0aGlzKSwgZnVuY3Rpb24oKSB7CityZXR1cm4gLyoqKioq
Ki8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAorLyoqKioqKi8gCS8v
IFRoZSBtb2R1bGUgY2FjaGUKKy8qKioqKiovIAl2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9Owor
LyoqKioqKi8KKy8qKioqKiovIAkvLyBUaGUgcmVxdWlyZSBmdW5jdGlvbgorLyoqKioqKi8gCWZ1
bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHsKKy8qKioqKiovCisvKioqKioq
LyAJCS8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZQorLyoqKioqKi8gCQlpZihpbnN0YWxs
ZWRNb2R1bGVzW21vZHVsZUlkXSkgeworLyoqKioqKi8gCQkJcmV0dXJuIGluc3RhbGxlZE1vZHVs
ZXNbbW9kdWxlSWRdLmV4cG9ydHM7CisvKioqKioqLyAJCX0KKy8qKioqKiovIAkJLy8gQ3JlYXRl
IGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSkKKy8qKioqKiovIAkJdmFy
IG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0geworLyoqKioqKi8gCQkJaTog
bW9kdWxlSWQsCisvKioqKioqLyAJCQlsOiBmYWxzZSwKKy8qKioqKiovIAkJCWV4cG9ydHM6IHt9
CisvKioqKioqLyAJCX07CisvKioqKioqLworLyoqKioqKi8gCQkvLyBFeGVjdXRlIHRoZSBtb2R1
bGUgZnVuY3Rpb24KKy8qKioqKiovIAkJbW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhw
b3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7CisvKioq
KioqLworLyoqKioqKi8gCQkvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkCisvKioqKioqLyAJ
CW1vZHVsZS5sID0gdHJ1ZTsKKy8qKioqKiovCisvKioqKioqLyAJCS8vIFJldHVybiB0aGUgZXhw
b3J0cyBvZiB0aGUgbW9kdWxlCisvKioqKioqLyAJCXJldHVybiBtb2R1bGUuZXhwb3J0czsKKy8q
KioqKiovIAl9CisvKioqKioqLworLyoqKioqKi8KKy8qKioqKiovIAkvLyBleHBvc2UgdGhlIG1v
ZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKQorLyoqKioqKi8gCV9fd2VicGFja19y
ZXF1aXJlX18ubSA9IG1vZHVsZXM7CisvKioqKioqLworLyoqKioqKi8gCS8vIGV4cG9zZSB0aGUg
bW9kdWxlIGNhY2hlCisvKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVk
TW9kdWxlczsKKy8qKioqKiovCisvKioqKioqLyAJLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBm
b3IgaGFybW9ueSBleHBvcnRzCisvKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVu
Y3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7CisvKioqKioqLyAJCWlmKCFfX3dlYnBhY2tf
cmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHsKKy8qKioqKiovIAkJCU9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0p
OworLyoqKioqKi8gCQl9CisvKioqKioqLyAJfTsKKy8qKioqKiovCisvKioqKioqLyAJLy8gZGVm
aW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0cworLyoqKioqKi8gCV9fd2VicGFja19yZXF1aXJlX18u
ciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHsKKy8qKioqKiovIAkJaWYodHlwZW9mIFN5bWJvbCAhPT0g
J3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7CisvKioqKioqLyAJCQlPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9k
dWxlJyB9KTsKKy8qKioqKiovIAkJfQorLyoqKioqKi8gCQlPYmplY3QuZGVmaW5lUHJvcGVydHko
ZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pOworLyoqKioqKi8gCX07Cisv
KioqKioqLworLyoqKioqKi8gCS8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdAorLyoq
KioqKi8gCS8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdAorLyoq
KioqKi8gCS8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRo
ZSBucworLyoqKioqKi8gCS8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5z
IG9iamVjdAorLyoqKioqKi8gCS8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmUKKy8q
KioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkgewor
LyoqKioqKi8gCQlpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVl
KTsKKy8qKioqKiovIAkJaWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTsKKy8qKioqKiovIAkJaWYo
KG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVl
Ll9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTsKKy8qKioqKiovIAkJdmFyIG5zID0gT2JqZWN0LmNy
ZWF0ZShudWxsKTsKKy8qKioqKiovIAkJX193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTsKKy8qKioq
KiovIAkJT2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTog
dHJ1ZSwgdmFsdWU6IHZhbHVlIH0pOworLyoqKioqKi8gCQlpZihtb2RlICYgMiAmJiB0eXBlb2Yg
dmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQo
bnVsbCwga2V5KSk7CisvKioqKioqLyAJCXJldHVybiBuczsKKy8qKioqKiovIAl9OworLyoqKioq
Ki8KKy8qKioqKiovIAkvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmls
aXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlcworLyoqKioqKi8gCV9fd2VicGFja19yZXF1aXJl
X18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkgeworLyoqKioqKi8gCQl2YXIgZ2V0dGVyID0gbW9kdWxl
ICYmIG1vZHVsZS5fX2VzTW9kdWxlID8KKy8qKioqKiovIAkJCWZ1bmN0aW9uIGdldERlZmF1bHQo
KSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6CisvKioqKioqLyAJCQlmdW5jdGlvbiBn
ZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9OworLyoqKioqKi8gCQlfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7CisvKioqKioqLyAJCXJldHVybiBn
ZXR0ZXI7CisvKioqKioqLyAJfTsKKy8qKioqKiovCisvKioqKioqLyAJLy8gT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsCisvKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5v
ID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9OworLyoqKioqKi8KKy8qKioq
KiovIAkvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfXworLyoqKioqKi8gCV9fd2VicGFja19yZXF1
aXJlX18ucCA9ICIiOworLyoqKioqKi8KKy8qKioqKiovCisvKioqKioqLyAJLy8gTG9hZCBlbnRy
eSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzCisvKioqKioqLyAJcmV0dXJuIF9fd2VicGFja19y
ZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gIi4vTGVnYWN5L2xlZ2FjeS50cyIpOwor
LyoqKioqKi8gfSkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqLyAoeworCisvKioqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuLi9ub2RlX21vZHVsZXMvdHNsaWIv
dHNsaWIuZXM2LmpzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBfX2V4dGVuZHMsIF9fYXNzaWduLCBfX3Jl
c3QsIF9fZGVjb3JhdGUsIF9fcGFyYW0sIF9fbWV0YWRhdGEsIF9fYXdhaXRlciwgX19nZW5lcmF0
b3IsIF9fZXhwb3J0U3RhciwgX192YWx1ZXMsIF9fcmVhZCwgX19zcHJlYWQsIF9fYXdhaXQsIF9f
YXN5bmNHZW5lcmF0b3IsIF9fYXN5bmNEZWxlZ2F0b3IsIF9fYXN5bmNWYWx1ZXMsIF9fbWFrZVRl
bXBsYXRlT2JqZWN0LCBfX2ltcG9ydFN0YXIsIF9faW1wb3J0RGVmYXVsdCAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJfX2V4dGVuZHMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9fZXh0ZW5kczsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfX2Fzc2lnbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX19hc3NpZ247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX19yZXN0IiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfX3Jlc3Q7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX19kZWNvcmF0ZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX19kZWNvcmF0ZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJf
X3BhcmFtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX3BhcmFtOyB9KTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIl9fbWV0YWRhdGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fbWV0YWRhdGE7IH0pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiX19hd2FpdGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX2F3YWl0ZXI7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX19nZW5lcmF0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9fZ2VuZXJhdG9yOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9fZXhwb3J0U3RhciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX19leHBvcnRTdGFyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9fdmFs
dWVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX3ZhbHVlczsgfSk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJfX3JlYWQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fcmVhZDsgfSk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJfX3NwcmVhZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19zcHJlYWQ7IH0pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiX19hd2FpdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19hd2FpdDsgfSk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJfX2FzeW5jR2VuZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
X2FzeW5jR2VuZXJhdG9yOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9fYXN5bmNEZWxlZ2F0b3Ii
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fYXN5bmNEZWxlZ2F0b3I7IH0pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiX19hc3luY1ZhbHVlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19hc3luY1ZhbHVlczsg
fSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJfX21ha2VUZW1wbGF0ZU9iamVjdCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX19tYWtlVGVtcGxhdGVPYmplY3Q7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX19p
bXBvcnRTdGFyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX2ltcG9ydFN0YXI7IH0pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiX19pbXBvcnREZWZhdWx0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX2ltcG9y
dERlZmF1bHQ7IH0pOworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitDb3B5cmlnaHQgKGMpIE1p
Y3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0xpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5
IG5vdCB1c2UKK3RoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCitMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitUSElTIENPREUgSVMgUFJPVklERUQgT04g
QU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
CitLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1J
VEFUSU9OIEFOWSBJTVBMSUVECitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLAorTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlO
RlJJTkdFTUVOVC4KKworU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zCithbmQgbGltaXRhdGlvbnMgdW5k
ZXIgdGhlIExpY2Vuc2UuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogZ2xvYmFsIFJlZmxl
Y3QsIFByb21pc2UgKi8KKwordmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7Cisg
ICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fAorICAgICAgICAoeyBf
X3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9f
cHJvdG9fXyA9IGI7IH0pIHx8CisgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAg
aW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9OworICAgIHJldHVy
biBleHRlbmRTdGF0aWNzKGQsIGIpOworfTsKKworZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHsK
KyAgICBleHRlbmRTdGF0aWNzKGQsIGIpOworICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0
cnVjdG9yID0gZDsgfQorICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVh
dGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTsKK30KKwordmFy
IF9fYXNzaWduID0gZnVuY3Rpb24oKSB7CisgICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8
IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHsKKyAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBh
cmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICBzID0gYXJndW1lbnRz
W2ldOworICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdDsKKyAgICB9CisgICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7Cit9CisKK2Z1bmN0aW9uIF9fcmVzdChzLCBlKSB7CisgICAgdmFyIHQgPSB7fTsKKyAg
ICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh
bGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMCkKKyAgICAgICAgdFtwXSA9IHNbcF07CisgICAg
aWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0g
ImZ1bmN0aW9uIikKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJv
cGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykgaWYgKGUuaW5kZXhPZihwW2ldKSA8
IDApCisgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTsKKyAgICByZXR1cm4gdDsKK30KKwor
ZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgeworICAg
IHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0g
bnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5
KSA6IGRlc2MsIGQ7CisgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBl
b2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUo
ZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOworICAgIGVsc2UgZm9yICh2YXIgaSA9IGRl
Y29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkg
ciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQs
IGtleSkpIHx8IHI7CisgICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KHRhcmdldCwga2V5LCByKSwgcjsKK30KKworZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4
LCBkZWNvcmF0b3IpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29y
YXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH0KK30KKworZnVuY3Rpb24gX19tZXRhZGF0
YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkgeworICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9
PT0gIm9iamVjdCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09ICJmdW5jdGlvbiIpIHJl
dHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTsKK30KKwor
ZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgewor
ICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJl
amVjdCkgeworICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChn
ZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9CisgICAg
ICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yWyJ0aHJv
dyJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH0KKyAgICAgICAgZnVuY3Rp
b24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBu
ZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4o
ZnVsZmlsbGVkLCByZWplY3RlZCk7IH0KKyAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJh
dG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOworICAgIH0pOwor
fQorCitmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7CisgICAgdmFyIF8gPSB7
IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyBy
ZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZzsKKyAgICByZXR1
cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgInRocm93IjogdmVyYigxKSwgInJldHVybiI6IHZlcmIo
MikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3Jd
ID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZzsKKyAgICBmdW5jdGlvbiB2ZXJiKG4p
IHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH0KKyAgICBm
dW5jdGlvbiBzdGVwKG9wKSB7CisgICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJH
ZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7CisgICAgICAgIHdoaWxlIChfKSB0cnkg
eworICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVsicmV0dXJu
Il0gOiBvcFswXSA/IHlbInRocm93Il0gfHwgKCh0ID0geVsicmV0dXJuIl0pICYmIHQuY2FsbCh5
KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0
OworICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdOwor
ICAgICAgICAgICAgc3dpdGNoIChvcFswXSkgeworICAgICAgICAgICAgICAgIGNhc2UgMDogY2Fz
ZSAxOiB0ID0gb3A7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyBy
ZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07CisgICAgICAgICAgICAgICAgY2Fz
ZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0g
Xy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09
PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwg
dFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0g
b3A7IGJyZWFrOyB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJd
KSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpOworICAgICAgICAgICAgICAgICAgICBfLnRy
eXMucG9wKCk7IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3AgPSBib2R5
LmNhbGwodGhpc0FyZywgXyk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkg
PSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH0KKyAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhy
b3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0
cnVlIH07CisgICAgfQorfQorCitmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgZXhwb3J0cykgewor
ICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBv
cnRzW3BdID0gbVtwXTsKK30KKworZnVuY3Rpb24gX192YWx1ZXMobykgeworICAgIHZhciBtID0g
dHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAw
OworICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pOworICAgIHJldHVybiB7CisgICAgICAgIG5l
eHQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8g
PSB2b2lkIDA7CisgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6
ICFvIH07CisgICAgICAgIH0KKyAgICB9OworfQorCitmdW5jdGlvbiBfX3JlYWQobywgbikgewor
ICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBvW1N5bWJvbC5pdGVy
YXRvcl07CisgICAgaWYgKCFtKSByZXR1cm4gbzsKKyAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwg
YXIgPSBbXSwgZTsKKyAgICB0cnkgeworICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBu
LS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTsKKyAgICB9
CisgICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9CisgICAgZmluYWxs
eSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0g
aVsicmV0dXJuIl0pKSBtLmNhbGwoaSk7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseSB7IGlm
IChlKSB0aHJvdyBlLmVycm9yOyB9CisgICAgfQorICAgIHJldHVybiBhcjsKK30KKworZnVuY3Rp
b24gX19zcHJlYWQoKSB7CisgICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVu
dHMubGVuZ3RoOyBpKyspCisgICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNb
aV0pKTsKKyAgICByZXR1cm4gYXI7Cit9CisKK2Z1bmN0aW9uIF9fYXdhaXQodikgeworICAgIHJl
dHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBf
X2F3YWl0KHYpOworfQorCitmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1
bWVudHMsIGdlbmVyYXRvcikgeworICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93
IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpOwor
ICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBp
LCBxID0gW107CisgICAgcmV0dXJuIGkgPSB7fSwgdmVyYigibmV4dCIpLCB2ZXJiKCJ0aHJvdyIp
LCB2ZXJiKCJyZXR1cm4iKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7
IHJldHVybiB0aGlzOyB9LCBpOworICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtu
XSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBx
LnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfQorICAgIGZ1
bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsg
c2V0dGxlKHFbMF1bM10sIGUpOyB9IH0KKyAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBp
bnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZp
bGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH0KKyAgICBmdW5jdGlvbiBmdWxmaWxs
KHZhbHVlKSB7IHJlc3VtZSgibmV4dCIsIHZhbHVlKTsgfQorICAgIGZ1bmN0aW9uIHJlamVjdCh2
YWx1ZSkgeyByZXN1bWUoInRocm93IiwgdmFsdWUpOyB9CisgICAgZnVuY3Rpb24gc2V0dGxlKGYs
IHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBd
WzFdKTsgfQorfQorCitmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHsKKyAgICB2YXIgaSwg
cDsKKyAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKCJuZXh0IiksIHZlcmIoInRocm93IiwgZnVuY3Rp
b24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoInJldHVybiIpLCBpW1N5bWJvbC5pdGVyYXRvcl0g
PSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpOworICAgIGZ1bmN0aW9uIHZlcmIobiwg
ZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFs
dWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09ICJyZXR1cm4iIH0gOiBmID8gZih2KSA6
IHY7IH0gOiBmOyB9Cit9CisKK2Z1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykgeworICAgIGlmICgh
U3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0
ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpOworICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVy
YXRvcl0sIGk7CisgICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVl
cyA9PT0gImZ1bmN0aW9uIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkg
PSB7fSwgdmVyYigibmV4dCIpLCB2ZXJiKCJ0aHJvdyIpLCB2ZXJiKCJyZXR1cm4iKSwgaVtTeW1i
b2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTsKKyAg
ICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJu
IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNl
dHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9CisgICAgZnVu
Y3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodiku
dGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVq
ZWN0KTsgfQorfQorCitmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykg
eworICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5
KGNvb2tlZCwgInJhdyIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJh
dzsgfQorICAgIHJldHVybiBjb29rZWQ7Cit9OworCitmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9k
KSB7CisgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDsKKyAgICB2YXIg
cmVzdWx0ID0ge307CisgICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYg
KE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTsK
KyAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmdW5j
dGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7CisgICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNN
b2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTsKK30KKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4uL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
Li9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIG5vIHN0YXRp
YyBleHBvcnRzIGZvdW5kICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisK
K3ZhciBnOworCisvLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZQorZyA9IChmdW5jdGlv
bigpIHsKKwlyZXR1cm4gdGhpczsKK30pKCk7CisKK3RyeSB7CisJLy8gVGhpcyB3b3JrcyBpZiBl
dmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApCisJZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKCJyZXR1cm4g
dGhpcyIpKCk7Cit9IGNhdGNoIChlKSB7CisJLy8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJl
ZmVyZW5jZSBpcyBhdmFpbGFibGUKKwlpZiAodHlwZW9mIHdpbmRvdyA9PT0gIm9iamVjdCIpIGcg
PSB3aW5kb3c7Cit9CisKKy8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcg
dG8gZG8gYWJvdXQgaXQuLi4KKy8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90
aGluZyBoZXJlLCBzbyBpdCdzCisvLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWds
b2JhbCkgeyAuLi59CisKK21vZHVsZS5leHBvcnRzID0gZzsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vQWN0aW9ucy9hYnN0cmFjdEFjdGlvbk1hbmFnZXIudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9BY3Rpb25zL2Fic3Ry
YWN0QWN0aW9uTWFuYWdlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQWJzdHJhY3RBY3Rpb25NYW5h
Z2VyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFic3RyYWN0QWN0aW9u
TWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQWJzdHJhY3RBY3Rpb25NYW5hZ2VyOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29u
c3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisKKy8qKgorICogQWJzdHJhY3Qg
Y2xhc3MgdXNlZCB0byBkZWNvdXBsZSBhY3Rpb24gTWFuYWdlciBmcm9tIHNjZW5lIGFuZCBtZXNo
ZXMuCisgKiBEbyBub3QgaW5zdGFudGlhdGUuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zCisgKi8KK3ZhciBBYnN0cmFjdEFjdGlvbk1h
bmFnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gQWJzdHJh
Y3RBY3Rpb25NYW5hZ2VyKCkgeworICAgICAgICAvKiogR2V0cyB0aGUgY3Vyc29yIHRvIHVzZSB3
aGVuIGhvdmVyaW5nIGl0ZW1zICovCisgICAgICAgIHRoaXMuaG92ZXJDdXJzb3IgPSAnJzsKKyAg
ICAgICAgLyoqIEdldHMgdGhlIGxpc3Qgb2YgYWN0aW9ucyAqLworICAgICAgICB0aGlzLmFjdGlv
bnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBh
IGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBtYW5hZ2VyIGlzIHJlY3Vyc2l2ZSBtZWFuaW5n
IHRoYXQgaXQgY2FuIHRyaWdnZXIgYWN0aW9uIGZyb20gY2hpbGRyZW4KKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuaXNSZWN1cnNpdmUgPSBmYWxzZTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEFic3RyYWN0QWN0aW9uTWFuYWdlciwgIkhhc1RyaWdnZXJzIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogRG9lcyBleGlzdCBvbmUgYWN0aW9uIG1hbmFnZXIgd2l0aCBhdCBs
ZWFzdCBvbmUgdHJpZ2dlcgorICAgICAgICAgKiovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgZm9yICh2YXIgdCBpbiBBYnN0cmFjdEFjdGlvbk1hbmFnZXIuVHJpZ2dl
cnMpIHsKKyAgICAgICAgICAgICAgICBpZiAoQWJzdHJhY3RBY3Rpb25NYW5hZ2VyLlRyaWdnZXJz
Lmhhc093blByb3BlcnR5KHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFic3RyYWN0
QWN0aW9uTWFuYWdlciwgIkhhc1BpY2tUcmlnZ2VycyIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERvZXMgZXhpc3Qgb25lIGFjdGlvbiBtYW5hZ2VyIHdpdGggYXQgbGVhc3Qgb25lIHBpY2sg
dHJpZ2dlcgorICAgICAgICAgKiovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgZm9yICh2YXIgdCBpbiBBYnN0cmFjdEFjdGlvbk1hbmFnZXIuVHJpZ2dlcnMpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoQWJzdHJhY3RBY3Rpb25NYW5hZ2VyLlRyaWdnZXJzLmhhc093blBy
b3BlcnR5KHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB0X2ludCA9IHBhcnNlSW50KHQp
OworICAgICAgICAgICAgICAgICAgICBpZiAodF9pbnQgPj0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBpY2tUcmln
Z2VyICYmIHRfaW50IDw9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25QaWNrVXBUcmlnZ2VyKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRG9lcyBleGlzdCBvbmUgYWN0aW9uIG1h
bmFnZXIgdGhhdCBoYW5kbGVzIGFjdGlvbnMgb2YgYSBnaXZlbiB0cmlnZ2VyCisgICAgICogQHBh
cmFtIHRyaWdnZXIgZGVmaW5lcyB0aGUgdHJpZ2dlciB0byBiZSB0ZXN0ZWQKKyAgICAgKiBAcmV0
dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHRyaWdnZXIgaXMgaGFuZGVsZWQg
YnkgYXQgbGVhc3Qgb25lIGFjdGlvbiBtYW5hZ2VyCisgICAgKiovCisgICAgQWJzdHJhY3RBY3Rp
b25NYW5hZ2VyLkhhc1NwZWNpZmljVHJpZ2dlciA9IGZ1bmN0aW9uICh0cmlnZ2VyKSB7CisgICAg
ICAgIGZvciAodmFyIHQgaW4gQWJzdHJhY3RBY3Rpb25NYW5hZ2VyLlRyaWdnZXJzKSB7CisgICAg
ICAgICAgICBpZiAoQWJzdHJhY3RBY3Rpb25NYW5hZ2VyLlRyaWdnZXJzLmhhc093blByb3BlcnR5
KHQpKSB7CisgICAgICAgICAgICAgICAgdmFyIHRfaW50ID0gcGFyc2VJbnQodCk7CisgICAgICAg
ICAgICAgICAgaWYgKHRfaW50ID09PSB0cmlnZ2VyKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvKiogR2V0cyB0aGUgbGlzdCBvZiBh
Y3RpdmUgdHJpZ2dlcnMgKi8KKyAgICBBYnN0cmFjdEFjdGlvbk1hbmFnZXIuVHJpZ2dlcnMgPSB7
fTsKKyAgICByZXR1cm4gQWJzdHJhY3RBY3Rpb25NYW5hZ2VyOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9BY3Rpb25zL2FjdGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL0FjdGlvbnMvYWN0aW9uLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBY3Rpb24gKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWN0aW9uIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBBY3Rpb247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2Vy
dmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xv
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90
eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworLyoqCisgKiBUaGUg
YWN0aW9uIHRvIGJlIGNhcnJpZWQgb3V0IGZvbGxvd2luZyBhIHRyaWdnZXIKKyAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMjYXZhaWxhYmxl
LWFjdGlvbnMKKyAqLwordmFyIEFjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEFjdGlvbgorICAgICAqIEBwYXJhbSB0cmln
Z2VyT3B0aW9ucyB0aGUgdHJpZ2dlciwgd2l0aCBvciB3aXRob3V0IHBhcmFtZXRlcnMsIGZvciB0
aGUgYWN0aW9uCisgICAgICogQHBhcmFtIGNvbmRpdGlvbiBhbiBvcHRpb25hbCBkZXRlcm1pbmFu
dCBvZiBhY3Rpb24KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBBY3Rpb24oCisgICAgLyoqIHRoZSB0
cmlnZ2VyLCB3aXRoIG9yIHdpdGhvdXQgcGFyYW1ldGVycywgZm9yIHRoZSBhY3Rpb24gKi8KKyAg
ICB0cmlnZ2VyT3B0aW9ucywgY29uZGl0aW9uKSB7CisgICAgICAgIHRoaXMudHJpZ2dlck9wdGlv
bnMgPSB0cmlnZ2VyT3B0aW9uczsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJp
Z2dlcmVkIHByaW9yIHRvIGFjdGlvbiBiZWluZyBleGVjdXRlZC4KKyAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5vbkJlZm9yZUV4ZWN1dGVPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIGlm
ICh0cmlnZ2VyT3B0aW9ucy5wYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlciA9
IHRyaWdnZXJPcHRpb25zLnRyaWdnZXI7CisgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUGFyYW1l
dGVyID0gdHJpZ2dlck9wdGlvbnMucGFyYW1ldGVyOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKHRyaWdnZXJPcHRpb25zLnRyaWdnZXIpIHsKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlciA9
IHRyaWdnZXJPcHRpb25zLnRyaWdnZXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICB0aGlzLnRyaWdnZXIgPSB0cmlnZ2VyT3B0aW9uczsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9uZXh0QWN0aXZlQWN0aW9uID0gdGhpczsKKyAgICAgICAgdGhpcy5fY29uZGl0aW9u
ID0gY29uZGl0aW9uOworICAgIH0KKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBvbmx5CisgICAg
ICogQGhpZGRlbgorICAgICAqLworICAgIEFjdGlvbi5wcm90b3R5cGUuX3ByZXBhcmUgPSBmdW5j
dGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0cmlnZ2VyIHBhcmFt
ZXRlcnMKKyAgICAgKiBAcmV0dXJucyB0aGUgdHJpZ2dlciBwYXJhbWV0ZXJzCisgICAgICovCisg
ICAgQWN0aW9uLnByb3RvdHlwZS5nZXRUcmlnZ2VyUGFyYW1ldGVyID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fdHJpZ2dlclBhcmFtZXRlcjsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEludGVybmFsIG9ubHkgLSBleGVjdXRlcyBjdXJyZW50IGFjdGlvbiBldmVudAorICAg
ICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlQ3VycmVu
dCA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgaWYgKHRoaXMuX25leHRBY3RpdmVBY3Rpb24u
X2NvbmRpdGlvbikgeworICAgICAgICAgICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuX25leHRBY3Rp
dmVBY3Rpb24uX2NvbmRpdGlvbjsKKyAgICAgICAgICAgIHZhciBjdXJyZW50UmVuZGVySWQgPSB0
aGlzLl9hY3Rpb25NYW5hZ2VyLmdldFNjZW5lKCkuZ2V0UmVuZGVySWQoKTsKKyAgICAgICAgICAg
IC8vIFdlIGNhY2hlIHRoZSBjdXJyZW50IGV2YWx1YXRpb24gZm9yIHRoZSBjdXJyZW50IGZyYW1l
CisgICAgICAgICAgICBpZiAoY29uZGl0aW9uLl9ldmFsdWF0aW9uSWQgPT09IGN1cnJlbnRSZW5k
ZXJJZCkgeworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uLl9jdXJyZW50UmVzdWx0KSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25kaXRpb24uX2V2
YWx1YXRpb25JZCA9IGN1cnJlbnRSZW5kZXJJZDsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRp
dGlvbi5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uLl9jdXJyZW50
UmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgY29uZGl0aW9uLl9jdXJyZW50UmVzdWx0ID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uQmVmb3JlRXhlY3V0ZU9i
c2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB0aGlzLl9uZXh0QWN0aXZl
QWN0aW9uLmV4ZWN1dGUoZXZ0KTsKKyAgICAgICAgdGhpcy5za2lwVG9OZXh0QWN0aXZlQWN0aW9u
KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHBsYWNlaG9sZGVyIGZvciBjaGls
ZCBjbGFzc2VzCisgICAgICogQHBhcmFtIGV2dCBvcHRpb25hbCBhY3Rpb24gZXZlbnQKKyAgICAg
Ki8KKyAgICBBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTa2lwcyB0byBuZXh0IGFjdGl2ZSBhY3Rpb24KKyAgICAgKi8K
KyAgICBBY3Rpb24ucHJvdG90eXBlLnNraXBUb05leHRBY3RpdmVBY3Rpb24gPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICh0aGlzLl9uZXh0QWN0aXZlQWN0aW9uLl9jaGlsZCkgeworICAgICAg
ICAgICAgaWYgKCF0aGlzLl9uZXh0QWN0aXZlQWN0aW9uLl9jaGlsZC5fYWN0aW9uTWFuYWdlcikg
eworICAgICAgICAgICAgICAgIHRoaXMuX25leHRBY3RpdmVBY3Rpb24uX2NoaWxkLl9hY3Rpb25N
YW5hZ2VyID0gdGhpcy5fYWN0aW9uTWFuYWdlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX25leHRBY3RpdmVBY3Rpb24gPSB0aGlzLl9uZXh0QWN0aXZlQWN0aW9uLl9jaGlsZDsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX25leHRBY3RpdmVB
Y3Rpb24gPSB0aGlzOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGFj
dGlvbiB0byBjaGFpbiBvZiBhY3Rpb25zLCBtYXkgYmUgYSBEb05vdGhpbmdBY3Rpb24KKyAgICAg
KiBAcGFyYW0gYWN0aW9uIGRlZmluZXMgdGhlIG5leHQgYWN0aW9uIHRvIGV4ZWN1dGUKKyAgICAg
KiBAcmV0dXJucyBUaGUgYWN0aW9uIHBhc3NlZCBpbgorICAgICAqIEBzZWUgaHR0cHM6Ly93d3cu
YmFieWxvbmpzLXBsYXlncm91bmQuY29tLyMxVDMwSFIjMAorICAgICAqLworICAgIEFjdGlvbi5w
cm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChhY3Rpb24pIHsKKyAgICAgICAgdGhpcy5fY2hpbGQg
PSBhY3Rpb247CisgICAgICAgIGFjdGlvbi5fYWN0aW9uTWFuYWdlciA9IHRoaXMuX2FjdGlvbk1h
bmFnZXI7CisgICAgICAgIGFjdGlvbi5fcHJlcGFyZSgpOworICAgICAgICByZXR1cm4gYWN0aW9u
OworICAgIH07CisgICAgLyoqCisgICAgICogSW50ZXJuYWwgb25seQorICAgICAqIEBoaWRkZW4K
KyAgICAgKi8KKyAgICBBY3Rpb24ucHJvdG90eXBlLl9nZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChw
cm9wZXJ0eVBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGlvbk1hbmFnZXIuX2dldFBy
b3BlcnR5KHByb3BlcnR5UGF0aCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBv
bmx5CisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIEFjdGlvbi5wcm90b3R5cGUuX2dldEVm
ZmVjdGl2ZVRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5UGF0aCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5fYWN0aW9uTWFuYWdlci5fZ2V0RWZmZWN0aXZlVGFyZ2V0KHRhcmdldCwg
cHJvcGVydHlQYXRoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSBwbGFjZWhv
bGRlciBmb3IgY2hpbGQgY2xhc3NlcworICAgICAqIEBwYXJhbSBwYXJlbnQgb2YgY2hpbGQKKyAg
ICAgKiBAcmV0dXJucyB0aGUgc2VyaWFsaXplZCBvYmplY3QKKyAgICAgKi8KKyAgICBBY3Rpb24u
cHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEludGVybmFsIG9ubHkgY2FsbGVkIGJ5IHNlcmlhbGl6ZQorICAgICAqIEBoaWRk
ZW4KKyAgICAgKi8KKyAgICBBY3Rpb24ucHJvdG90eXBlLl9zZXJpYWxpemUgPSBmdW5jdGlvbiAo
c2VyaWFsaXplZEFjdGlvbiwgcGFyZW50KSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2Jq
ZWN0ID0geworICAgICAgICAgICAgdHlwZTogMSwKKyAgICAgICAgICAgIGNoaWxkcmVuOiBbXSwK
KyAgICAgICAgICAgIG5hbWU6IHNlcmlhbGl6ZWRBY3Rpb24ubmFtZSwKKyAgICAgICAgICAgIHBy
b3BlcnRpZXM6IHNlcmlhbGl6ZWRBY3Rpb24ucHJvcGVydGllcyB8fCBbXQorICAgICAgICB9Owor
ICAgICAgICAvLyBTZXJpYWxpemUgY2hpbGQKKyAgICAgICAgaWYgKHRoaXMuX2NoaWxkKSB7Cisg
ICAgICAgICAgICB0aGlzLl9jaGlsZC5zZXJpYWxpemUoc2VyaWFsaXphdGlvbk9iamVjdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgaWYgInRoaXMiIGhhcyBhIGNvbmRpdGlvbgorICAg
ICAgICBpZiAodGhpcy5fY29uZGl0aW9uKSB7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplZENv
bmRpdGlvbiA9IHRoaXMuX2NvbmRpdGlvbi5zZXJpYWxpemUoKTsKKyAgICAgICAgICAgIHNlcmlh
bGl6ZWRDb25kaXRpb24uY2hpbGRyZW4ucHVzaChzZXJpYWxpemF0aW9uT2JqZWN0KTsKKyAgICAg
ICAgICAgIGlmIChwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVz
aChzZXJpYWxpemVkQ29uZGl0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBzZXJpYWxpemVkQ29uZGl0aW9uOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJlbnQpIHsK
KyAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKHNlcmlhbGl6YXRpb25PYmplY3QpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07Cisg
ICAgLyoqCisgICAgICogSW50ZXJuYWwgb25seQorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAg
ICBBY3Rpb24uX1NlcmlhbGl6ZVZhbHVlQXNTdHJpbmcgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZS50b1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2YgdmFsdWUg
PT09ICJib29sZWFuIikgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlID8gInRydWUiIDogImZh
bHNlIjsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKSB7CisgICAg
ICAgICAgICByZXR1cm4gdmFsdWUueCArICIsICIgKyB2YWx1ZS55OworICAgICAgICB9CisgICAg
ICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0pIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS54
ICsgIiwgIiArIHZhbHVlLnkgKyAiLCAiICsgdmFsdWUuejsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodmFsdWUgaW5zdGFuY2VvZiBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJDb2xvcjMiXSkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnIgKyAiLCAi
ICsgdmFsdWUuZyArICIsICIgKyB2YWx1ZS5iOworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1
ZSBpbnN0YW5jZW9mIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkNvbG9yNCJdKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUuciArICIsICIgKyB2YWx1
ZS5nICsgIiwgIiArIHZhbHVlLmIgKyAiLCAiICsgdmFsdWUuYTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdmFsdWU7IC8vIHN0cmluZworICAgIH07CisgICAgLyoqCisgICAgICogSW50ZXJu
YWwgb25seQorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBBY3Rpb24uX0dldFRhcmdldFBy
b3BlcnR5ID0gZnVuY3Rpb24gKHRhcmdldCkgeworICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgbmFtZTogInRhcmdldCIsCisgICAgICAgICAgICB0YXJnZXRUeXBlOiB0YXJnZXQuX2lzTWVz
aCA/ICJNZXNoUHJvcGVydGllcyIKKyAgICAgICAgICAgICAgICA6IHRhcmdldC5faXNMaWdodCA/
ICJMaWdodFByb3BlcnRpZXMiCisgICAgICAgICAgICAgICAgICAgIDogdGFyZ2V0Ll9pc0NhbWVy
YSA/ICJDYW1lcmFQcm9wZXJ0aWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgOiAiU2NlbmVQ
cm9wZXJ0aWVzIiwKKyAgICAgICAgICAgIHZhbHVlOiB0YXJnZXQuX2lzU2NlbmUgPyAiU2NlbmUi
IDogdGFyZ2V0Lm5hbWUKKyAgICAgICAgfTsKKyAgICB9OworICAgIHJldHVybiBBY3Rpb247Cit9
KCkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siX1R5
cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5BY3Rpb24iXSA9IEFjdGlvbjsKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vQWN0aW9ucy9hY3Rpb25FdmVudC50cyI6CisvKiEqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQWN0aW9ucy9hY3Rpb25F
dmVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBBY3Rpb25FdmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJBY3Rpb25FdmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQWN0aW9uRXZlbnQ7
IH0pOworLyoqCisgKiBBY3Rpb25FdmVudCBpcyB0aGUgZXZlbnQgYmVpbmcgc2VudCB3aGVuIGFu
IGFjdGlvbiBpcyB0cmlnZ2VyZWQuCisgKi8KK3ZhciBBY3Rpb25FdmVudCA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEFjdGlvbkV2
ZW50CisgICAgICogQHBhcmFtIHNvdXJjZSBUaGUgbWVzaCBvciBzcHJpdGUgdGhhdCB0cmlnZ2Vy
ZWQgdGhlIGFjdGlvbgorICAgICAqIEBwYXJhbSBwb2ludGVyWCBUaGUgWCBtb3VzZSBjdXJzb3Ig
cG9zaXRpb24gYXQgdGhlIHRpbWUgb2YgdGhlIGV2ZW50CisgICAgICogQHBhcmFtIHBvaW50ZXJZ
IFRoZSBZIG1vdXNlIGN1cnNvciBwb3NpdGlvbiBhdCB0aGUgdGltZSBvZiB0aGUgZXZlbnQKKyAg
ICAgKiBAcGFyYW0gbWVzaFVuZGVyUG9pbnRlciBUaGUgbWVzaCB0aGF0IGlzIGN1cnJlbnRseSBw
b2ludGVkIGF0IChjYW4gYmUgbnVsbCkKKyAgICAgKiBAcGFyYW0gc291cmNlRXZlbnQgdGhlIG9y
aWdpbmFsIChicm93c2VyKSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgQWN0aW9uRXZlbnQKKyAg
ICAgKiBAcGFyYW0gYWRkaXRpb25hbERhdGEgYWRkaXRpb25hbCBkYXRhIGZvciB0aGUgZXZlbnQK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBBY3Rpb25FdmVudCgKKyAgICAvKiogVGhlIG1lc2ggb3Ig
c3ByaXRlIHRoYXQgdHJpZ2dlcmVkIHRoZSBhY3Rpb24gKi8KKyAgICBzb3VyY2UsIAorICAgIC8q
KiBUaGUgWCBtb3VzZSBjdXJzb3IgcG9zaXRpb24gYXQgdGhlIHRpbWUgb2YgdGhlIGV2ZW50ICov
CisgICAgcG9pbnRlclgsIAorICAgIC8qKiBUaGUgWSBtb3VzZSBjdXJzb3IgcG9zaXRpb24gYXQg
dGhlIHRpbWUgb2YgdGhlIGV2ZW50ICovCisgICAgcG9pbnRlclksIAorICAgIC8qKiBUaGUgbWVz
aCB0aGF0IGlzIGN1cnJlbnRseSBwb2ludGVkIGF0IChjYW4gYmUgbnVsbCkgKi8KKyAgICBtZXNo
VW5kZXJQb2ludGVyLCAKKyAgICAvKiogdGhlIG9yaWdpbmFsIChicm93c2VyKSBldmVudCB0aGF0
IHRyaWdnZXJlZCB0aGUgQWN0aW9uRXZlbnQgKi8KKyAgICBzb3VyY2VFdmVudCwgCisgICAgLyoq
IGFkZGl0aW9uYWwgZGF0YSBmb3IgdGhlIGV2ZW50ICovCisgICAgYWRkaXRpb25hbERhdGEpIHsK
KyAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgIHRoaXMucG9pbnRlclggPSBw
b2ludGVyWDsKKyAgICAgICAgdGhpcy5wb2ludGVyWSA9IHBvaW50ZXJZOworICAgICAgICB0aGlz
Lm1lc2hVbmRlclBvaW50ZXIgPSBtZXNoVW5kZXJQb2ludGVyOworICAgICAgICB0aGlzLnNvdXJj
ZUV2ZW50ID0gc291cmNlRXZlbnQ7CisgICAgICAgIHRoaXMuYWRkaXRpb25hbERhdGEgPSBhZGRp
dGlvbmFsRGF0YTsKKyAgICB9CisgICAgLyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGF1
dG8tY3JlYXRlIGFuIEFjdGlvbkV2ZW50IGZyb20gYSBzb3VyY2UgbWVzaC4KKyAgICAgKiBAcGFy
YW0gc291cmNlIFRoZSBzb3VyY2UgbWVzaCB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQKKyAgICAg
KiBAcGFyYW0gZXZ0IFRoZSBvcmlnaW5hbCAoYnJvd3NlcikgZXZlbnQKKyAgICAgKiBAcGFyYW0g
YWRkaXRpb25hbERhdGEgYWRkaXRpb25hbCBkYXRhIGZvciB0aGUgZXZlbnQKKyAgICAgKiBAcmV0
dXJucyB0aGUgbmV3IEFjdGlvbkV2ZW50CisgICAgICovCisgICAgQWN0aW9uRXZlbnQuQ3JlYXRl
TmV3ID0gZnVuY3Rpb24gKHNvdXJjZSwgZXZ0LCBhZGRpdGlvbmFsRGF0YSkgeworICAgICAgICB2
YXIgc2NlbmUgPSBzb3VyY2UuZ2V0U2NlbmUoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25F
dmVudChzb3VyY2UsIHNjZW5lLnBvaW50ZXJYLCBzY2VuZS5wb2ludGVyWSwgc2NlbmUubWVzaFVu
ZGVyUG9pbnRlciB8fCBzb3VyY2UsIGV2dCwgYWRkaXRpb25hbERhdGEpOworICAgIH07CisgICAg
LyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGF1dG8tY3JlYXRlIGFuIEFjdGlvbkV2ZW50
IGZyb20gYSBzb3VyY2Ugc3ByaXRlCisgICAgICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIHNw
cml0ZSB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQKKyAgICAgKiBAcGFyYW0gc2NlbmUgU2NlbmUg
YXNzb2NpYXRlZCB3aXRoIHRoZSBzcHJpdGUKKyAgICAgKiBAcGFyYW0gZXZ0IFRoZSBvcmlnaW5h
bCAoYnJvd3NlcikgZXZlbnQKKyAgICAgKiBAcGFyYW0gYWRkaXRpb25hbERhdGEgYWRkaXRpb25h
bCBkYXRhIGZvciB0aGUgZXZlbnQKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IEFjdGlvbkV2ZW50
CisgICAgICovCisgICAgQWN0aW9uRXZlbnQuQ3JlYXRlTmV3RnJvbVNwcml0ZSA9IGZ1bmN0aW9u
IChzb3VyY2UsIHNjZW5lLCBldnQsIGFkZGl0aW9uYWxEYXRhKSB7CisgICAgICAgIHJldHVybiBu
ZXcgQWN0aW9uRXZlbnQoc291cmNlLCBzY2VuZS5wb2ludGVyWCwgc2NlbmUucG9pbnRlclksIHNj
ZW5lLm1lc2hVbmRlclBvaW50ZXIsIGV2dCwgYWRkaXRpb25hbERhdGEpOworICAgIH07CisgICAg
LyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGF1dG8tY3JlYXRlIGFuIEFjdGlvbkV2ZW50
IGZyb20gYSBzY2VuZS4gSWYgdHJpZ2dlcmVkIGJ5IGEgbWVzaCB1c2UgQWN0aW9uRXZlbnQuQ3Jl
YXRlTmV3CisgICAgICogQHBhcmFtIHNjZW5lIHRoZSBzY2VuZSB3aGVyZSB0aGUgZXZlbnQgb2Nj
dXJyZWQKKyAgICAgKiBAcGFyYW0gZXZ0IFRoZSBvcmlnaW5hbCAoYnJvd3NlcikgZXZlbnQKKyAg
ICAgKiBAcmV0dXJucyB0aGUgbmV3IEFjdGlvbkV2ZW50CisgICAgICovCisgICAgQWN0aW9uRXZl
bnQuQ3JlYXRlTmV3RnJvbVNjZW5lID0gZnVuY3Rpb24gKHNjZW5lLCBldnQpIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBBY3Rpb25FdmVudChudWxsLCBzY2VuZS5wb2ludGVyWCwgc2NlbmUucG9pbnRl
clksIHNjZW5lLm1lc2hVbmRlclBvaW50ZXIsIGV2dCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBIZWxwZXIgZnVuY3Rpb24gdG8gYXV0by1jcmVhdGUgYW4gQWN0aW9uRXZlbnQgZnJvbSBhIHBy
aW1pdGl2ZQorICAgICAqIEBwYXJhbSBwcmltIGRlZmluZXMgdGhlIHRhcmdldCBwcmltaXRpdmUK
KyAgICAgKiBAcGFyYW0gcG9pbnRlclBvcyBkZWZpbmVzIHRoZSBwb2ludGVyIHBvc2l0aW9uCisg
ICAgICogQHBhcmFtIGV2dCBUaGUgb3JpZ2luYWwgKGJyb3dzZXIpIGV2ZW50CisgICAgICogQHBh
cmFtIGFkZGl0aW9uYWxEYXRhIGFkZGl0aW9uYWwgZGF0YSBmb3IgdGhlIGV2ZW50CisgICAgICog
QHJldHVybnMgdGhlIG5ldyBBY3Rpb25FdmVudAorICAgICAqLworICAgIEFjdGlvbkV2ZW50LkNy
ZWF0ZU5ld0Zyb21QcmltaXRpdmUgPSBmdW5jdGlvbiAocHJpbSwgcG9pbnRlclBvcywgZXZ0LCBh
ZGRpdGlvbmFsRGF0YSkgeworICAgICAgICByZXR1cm4gbmV3IEFjdGlvbkV2ZW50KHByaW0sIHBv
aW50ZXJQb3MueCwgcG9pbnRlclBvcy55LCBudWxsLCBldnQsIGFkZGl0aW9uYWxEYXRhKTsKKyAg
ICB9OworICAgIHJldHVybiBBY3Rpb25FdmVudDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vQWN0aW9ucy9hY3Rpb25NYW5hZ2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0FjdGlvbnMvYWN0aW9uTWFuYWdlci50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IEFjdGlvbk1hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiQWN0aW9uTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQWN0aW9uTWFuYWdlcjsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVs
ZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9t
YXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfY29uZGl0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2NvbmRpdGlvbiAqLyAiLi9BY3Rpb25zL2NvbmRpdGlvbi50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9uICovICIuL0FjdGlvbnMv
YWN0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RpcmVjdEFjdGlvbnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGly
ZWN0QWN0aW9ucyAqLyAiLi9BY3Rpb25zL2RpcmVjdEFjdGlvbnMudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAq
LyAiLi9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGVlcENvcGllciAqLyAi
Li9NaXNjL2RlZXBDb3BpZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190
eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2Fic3RyYWN0QWN0aW9uTWFuYWdlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWJzdHJhY3RBY3Rp
b25NYW5hZ2VyICovICIuL0FjdGlvbnMvYWJzdHJhY3RBY3Rpb25NYW5hZ2VyLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFu
dHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKworCisKKworCisKKworCisKKworCisK
Ky8qKgorICogQWN0aW9uIE1hbmFnZXIgbWFuYWdlcyBhbGwgZXZlbnRzIHRvIGJlIHRyaWdnZXJl
ZCBvbiBhIGdpdmVuIG1lc2ggb3IgdGhlIGdsb2JhbCBzY2VuZS4KKyAqIEEgc2luZ2xlIHNjZW5l
IGNhbiBoYXZlIG1hbnkgQWN0aW9uIE1hbmFnZXJzIHRvIGhhbmRsZSBwcmVkZWZpbmVkIGFjdGlv
bnMgb24gc3BlY2lmaWMgbWVzaGVzLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL2hvd190b191c2VfYWN0aW9ucworICovCit2YXIgQWN0aW9uTWFuYWdlciA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShBY3Rpb25NYW5hZ2VyLCBfc3VwZXIpOworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYSBuZXcgYWN0aW9uIG1hbmFnZXIKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIEFjdGlv
bk1hbmFnZXIoc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykg
fHwgdGhpczsKKyAgICAgICAgX3RoaXMuX3NjZW5lID0gc2NlbmUgfHwgX0VuZ2luZXNfZW5naW5l
U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3Jl
YXRlZFNjZW5lOworICAgICAgICBzY2VuZS5hY3Rpb25NYW5hZ2Vycy5wdXNoKF90aGlzKTsKKyAg
ICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvLyBNZXRob2RzCisgICAgLyoqCisgICAg
ICogUmVsZWFzZXMgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgICAgICovCisgICAgQWN0aW9u
TWFuYWdlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGlu
ZGV4ID0gdGhpcy5fc2NlbmUuYWN0aW9uTWFuYWdlcnMuaW5kZXhPZih0aGlzKTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFjdGlvbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIHZhciBhY3Rpb24gPSB0aGlzLmFjdGlvbnNbaV07CisgICAgICAgICAgICBBY3Rpb25NYW5h
Z2VyLlRyaWdnZXJzW2FjdGlvbi50cmlnZ2VyXS0tOworICAgICAgICAgICAgaWYgKEFjdGlvbk1h
bmFnZXIuVHJpZ2dlcnNbYWN0aW9uLnRyaWdnZXJdID09PSAwKSB7CisgICAgICAgICAgICAgICAg
ZGVsZXRlIEFjdGlvbk1hbmFnZXIuVHJpZ2dlcnNbYWN0aW9uLnRyaWdnZXJdOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgICAgICB0
aGlzLl9zY2VuZS5hY3Rpb25NYW5hZ2Vycy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJu
cyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqLworICAgIEFjdGlvbk1hbmFnZXIucHJvdG90eXBl
LmdldFNjZW5lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fc2NlbmU7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBEb2VzIHRoaXMgYWN0aW9uIG1hbmFnZXIgaGFuZGxlcyBh
Y3Rpb25zIG9mIGFueSBvZiB0aGUgZ2l2ZW4gdHJpZ2dlcnMKKyAgICAgKiBAcGFyYW0gdHJpZ2dl
cnMgZGVmaW5lcyB0aGUgdHJpZ2dlcnMgdG8gYmUgdGVzdGVkCisgICAgICogQHJldHVybiBhIGJv
b2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9uZSAob3IgbW9yZSkgb2YgdGhlIHRyaWdnZXJzIGlz
IGhhbmRsZWQKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5oYXNTcGVjaWZp
Y1RyaWdnZXJzID0gZnVuY3Rpb24gKHRyaWdnZXJzKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4
ID0gMDsgaW5kZXggPCB0aGlzLmFjdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAg
ICB2YXIgYWN0aW9uID0gdGhpcy5hY3Rpb25zW2luZGV4XTsKKyAgICAgICAgICAgIGlmICh0cmln
Z2Vycy5pbmRleE9mKGFjdGlvbi50cmlnZ2VyKSA+IC0xKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH07CisgICAgLyoqCisgICAgICogRG9lcyB0aGlzIGFjdGlvbiBtYW5hZ2VyIGhhbmRs
ZXMgYWN0aW9ucyBvZiBhbnkgb2YgdGhlIGdpdmVuIHRyaWdnZXJzLiBUaGlzIGZ1bmN0aW9uIHRh
a2VzIHR3byBhcmd1bWVudHMgZm9yCisgICAgICogc3BlZWQuCisgICAgICogQHBhcmFtIHRyaWdn
ZXJBIGRlZmluZXMgdGhlIHRyaWdnZXIgdG8gYmUgdGVzdGVkCisgICAgICogQHBhcmFtIHRyaWdn
ZXJCIGRlZmluZXMgdGhlIHRyaWdnZXIgdG8gYmUgdGVzdGVkCisgICAgICogQHJldHVybiBhIGJv
b2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9uZSAob3IgbW9yZSkgb2YgdGhlIHRyaWdnZXJzIGlz
IGhhbmRsZWQKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5oYXNTcGVjaWZp
Y1RyaWdnZXJzMiA9IGZ1bmN0aW9uICh0cmlnZ2VyQSwgdHJpZ2dlckIpIHsKKyAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYWN0aW9ucy5sZW5ndGg7IGluZGV4KyspIHsK
KyAgICAgICAgICAgIHZhciBhY3Rpb24gPSB0aGlzLmFjdGlvbnNbaW5kZXhdOworICAgICAgICAg
ICAgaWYgKHRyaWdnZXJBID09IGFjdGlvbi50cmlnZ2VyIHx8IHRyaWdnZXJCID09IGFjdGlvbi50
cmlnZ2VyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICog
RG9lcyB0aGlzIGFjdGlvbiBtYW5hZ2VyIGhhbmRsZXMgYWN0aW9ucyBvZiBhIGdpdmVuIHRyaWdn
ZXIKKyAgICAgKiBAcGFyYW0gdHJpZ2dlciBkZWZpbmVzIHRoZSB0cmlnZ2VyIHRvIGJlIHRlc3Rl
ZAorICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJQcmVkaWNhdGUgZGVmaW5lcyBhbiBvcHRpb25hbCBw
cmVkaWNhdGUgdG8gZmlsdGVyIHRyaWdnZXJzIGJ5IHBhcmFtZXRlcgorICAgICAqIEByZXR1cm4g
d2hldGhlciB0aGUgdHJpZ2dlciBpcyBoYW5kbGVkCisgICAgICovCisgICAgQWN0aW9uTWFuYWdl
ci5wcm90b3R5cGUuaGFzU3BlY2lmaWNUcmlnZ2VyID0gZnVuY3Rpb24gKHRyaWdnZXIsIHBhcmFt
ZXRlclByZWRpY2F0ZSkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhp
cy5hY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGFjdGlvbiA9IHRo
aXMuYWN0aW9uc1tpbmRleF07CisgICAgICAgICAgICBpZiAoYWN0aW9uLnRyaWdnZXIgPT09IHRy
aWdnZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyUHJlZGljYXRlKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJQcmVkaWNhdGUoYWN0aW9uLmdldFRyaWdnZXJQ
YXJhbWV0ZXIoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFjdGlvbk1hbmFnZXIucHJvdG90eXBlLCAiaGFz
UG9pbnRlclRyaWdnZXJzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRG9lcyB0aGlzIGFj
dGlvbiBtYW5hZ2VyIGhhcyBwb2ludGVyIHRyaWdnZXJzCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLmFjdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGFj
dGlvbiA9IHRoaXMuYWN0aW9uc1tpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi50
cmlnZ2VyID49IEFjdGlvbk1hbmFnZXIuT25QaWNrVHJpZ2dlciAmJiBhY3Rpb24udHJpZ2dlciA8
PSBBY3Rpb25NYW5hZ2VyLk9uUG9pbnRlck91dFRyaWdnZXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoQWN0aW9uTWFuYWdlci5wcm90b3R5cGUsICJoYXNQaWNrVHJpZ2dlcnMiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBEb2VzIHRoaXMgYWN0aW9uIG1hbmFnZXIgaGFzIHBpY2sg
dHJpZ2dlcnMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYWN0aW9ucy5sZW5ndGg7IGlu
ZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gdGhpcy5hY3Rpb25zW2luZGV4
XTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnRyaWdnZXIgPj0gQWN0aW9uTWFuYWdlci5P
blBpY2tUcmlnZ2VyICYmIGFjdGlvbi50cmlnZ2VyIDw9IEFjdGlvbk1hbmFnZXIuT25QaWNrVXBU
cmlnZ2VyKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIGFuIGFjdGlvbiB0byB0aGlzIGFj
dGlvbiBtYW5hZ2VyCisgICAgICogQHBhcmFtIGFjdGlvbiBkZWZpbmVzIHRoZSBhY3Rpb24gdG8g
YmUgcmVnaXN0ZXJlZAorICAgICAqIEByZXR1cm4gdGhlIGFjdGlvbiBhbWVuZGVkIChwcmVwYXJl
ZCkgYWZ0ZXIgcmVnaXN0cmF0aW9uCisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5wcm90b3R5
cGUucmVnaXN0ZXJBY3Rpb24gPSBmdW5jdGlvbiAoYWN0aW9uKSB7CisgICAgICAgIGlmIChhY3Rp
b24udHJpZ2dlciA9PT0gQWN0aW9uTWFuYWdlci5PbkV2ZXJ5RnJhbWVUcmlnZ2VyKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5nZXRTY2VuZSgpLmFjdGlvbk1hbmFnZXIgIT09IHRoaXMpIHsKKyAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
TG9nZ2VyIl0uV2FybigiT25FdmVyeUZyYW1lVHJpZ2dlciBjYW4gb25seSBiZSB1c2VkIHdpdGgg
c2NlbmUuYWN0aW9uTWFuYWdlciIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKGFjdGlvbik7
CisgICAgICAgIGlmIChBY3Rpb25NYW5hZ2VyLlRyaWdnZXJzW2FjdGlvbi50cmlnZ2VyXSkgewor
ICAgICAgICAgICAgQWN0aW9uTWFuYWdlci5UcmlnZ2Vyc1thY3Rpb24udHJpZ2dlcl0rKzsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFjdGlvbk1hbmFnZXIuVHJpZ2dl
cnNbYWN0aW9uLnRyaWdnZXJdID0gMTsKKyAgICAgICAgfQorICAgICAgICBhY3Rpb24uX2FjdGlv
bk1hbmFnZXIgPSB0aGlzOworICAgICAgICBhY3Rpb24uX3ByZXBhcmUoKTsKKyAgICAgICAgcmV0
dXJuIGFjdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVucmVnaXN0ZXJzIGFuIGFjdGlv
biB0byB0aGlzIGFjdGlvbiBtYW5hZ2VyCisgICAgICogQHBhcmFtIGFjdGlvbiBkZWZpbmVzIHRo
ZSBhY3Rpb24gdG8gYmUgdW5yZWdpc3RlcmVkCisgICAgICogQHJldHVybiBhIGJvb2xlYW4gaW5k
aWNhdGluZyB3aGV0aGVyIHRoZSBhY3Rpb24gaGFzIGJlZW4gdW5yZWdpc3RlcmVkCisgICAgICov
CisgICAgQWN0aW9uTWFuYWdlci5wcm90b3R5cGUudW5yZWdpc3RlckFjdGlvbiA9IGZ1bmN0aW9u
IChhY3Rpb24pIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5hY3Rpb25zLmluZGV4T2YoYWN0
aW9uKTsKKyAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgdGhpcy5hY3Rp
b25zLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgICAgICBBY3Rpb25NYW5hZ2VyLlRyaWdnZXJz
W2FjdGlvbi50cmlnZ2VyXSAtPSAxOworICAgICAgICAgICAgaWYgKEFjdGlvbk1hbmFnZXIuVHJp
Z2dlcnNbYWN0aW9uLnRyaWdnZXJdID09PSAwKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIEFj
dGlvbk1hbmFnZXIuVHJpZ2dlcnNbYWN0aW9uLnRyaWdnZXJdOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZGVsZXRlIGFjdGlvbi5fYWN0aW9uTWFuYWdlcjsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFByb2Nlc3MgYSBzcGVjaWZpYyB0cmlnZ2VyCisgICAgICogQHBhcmFtIHRyaWdn
ZXIgZGVmaW5lcyB0aGUgdHJpZ2dlciB0byBwcm9jZXNzCisgICAgICogQHBhcmFtIGV2dCBkZWZp
bmVzIHRoZSBldmVudCBkZXRhaWxzIHRvIGJlIHByb2Nlc3NlZAorICAgICAqLworICAgIEFjdGlv
bk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUcmlnZ2VyID0gZnVuY3Rpb24gKHRyaWdnZXIsIGV2
dCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5hY3Rpb25zLmxl
bmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGFjdGlvbiA9IHRoaXMuYWN0aW9uc1tp
bmRleF07CisgICAgICAgICAgICBpZiAoYWN0aW9uLnRyaWdnZXIgPT09IHRyaWdnZXIpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZXZ0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmlnZ2Vy
ID09PSBBY3Rpb25NYW5hZ2VyLk9uS2V5VXBUcmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAg
ICB8fCB0cmlnZ2VyID09PSBBY3Rpb25NYW5hZ2VyLk9uS2V5RG93blRyaWdnZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXIgPSBhY3Rpb24uZ2V0VHJpZ2dlclBhcmFt
ZXRlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlciAmJiBwYXJhbWV0
ZXIgIT09IGV2dC5zb3VyY2VFdmVudC5rZXlDb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwYXJhbWV0ZXIudG9Mb3dlckNhc2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb3dlckNhc2UgPSBwYXJhbWV0ZXIudG9Mb3dl
ckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG93ZXJDYXNlICE9PSBl
dnQuc291cmNlRXZlbnQua2V5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB1bmljb2RlID0gZXZ0LnNvdXJjZUV2ZW50LmNoYXJDb2RlID8gZXZ0LnNvdXJjZUV2ZW50LmNo
YXJDb2RlIDogZXZ0LnNvdXJjZUV2ZW50LmtleUNvZGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBhY3R1YWxrZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVuaWNvZGUpLnRv
TG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3R1YWxr
ZXkgIT09IGxvd2VyQ2FzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWN0aW9uLl9l
eGVjdXRlQ3VycmVudChldnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAg
ICAvKiogQGhpZGRlbiAqLworICAgIEFjdGlvbk1hbmFnZXIucHJvdG90eXBlLl9nZXRFZmZlY3Rp
dmVUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0LCBwcm9wZXJ0eVBhdGgpIHsKKyAgICAgICAgdmFy
IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoIi4iKTsKKyAgICAgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IHByb3BlcnRpZXMubGVuZ3RoIC0gMTsgaW5kZXgrKykgeworICAg
ICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3Byb3BlcnRpZXNbaW5kZXhdXTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBB
Y3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5fZ2V0UHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHlQ
YXRoKSB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gcHJvcGVydHlQYXRoLnNwbGl0KCIuIik7
CisgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzW3Byb3BlcnRpZXMubGVuZ3RoIC0gMV07CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgdGhpcyBtYW5hZ2VyIHRvIGEgSlNPTiBvYmpl
Y3QKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBwcm9wZXJ0eSBuYW1lIHRvIHN0b3Jl
IHRoaXMgbWFuYWdlcgorICAgICAqIEByZXR1cm5zIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0
aGlzIG1hbmFnZXIKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXJpYWxp
emUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICB2YXIgcm9vdCA9IHsKKyAgICAgICAgICAg
IGNoaWxkcmVuOiBuZXcgQXJyYXkoKSwKKyAgICAgICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAg
ICAgICB0eXBlOiAzLAorICAgICAgICAgICAgcHJvcGVydGllczogbmV3IEFycmF5KCkgLy8gRW1w
dHkgZm9yIHJvb3QgYnV0IHJlcXVpcmVkCisgICAgICAgIH07CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5hY3Rpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdHJp
Z2dlck9iamVjdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiAwLAorICAgICAgICAgICAgICAg
IGNoaWxkcmVuOiBuZXcgQXJyYXkoKSwKKyAgICAgICAgICAgICAgICBuYW1lOiBBY3Rpb25NYW5h
Z2VyLkdldFRyaWdnZXJOYW1lKHRoaXMuYWN0aW9uc1tpXS50cmlnZ2VyKSwKKyAgICAgICAgICAg
ICAgICBwcm9wZXJ0aWVzOiBuZXcgQXJyYXkoKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IHZhciB0cmlnZ2VyT3B0aW9ucyA9IHRoaXMuYWN0aW9uc1tpXS50cmlnZ2VyT3B0aW9uczsKKyAg
ICAgICAgICAgIGlmICh0cmlnZ2VyT3B0aW9ucyAmJiB0eXBlb2YgdHJpZ2dlck9wdGlvbnMgIT09
ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgaWYgKHRyaWdnZXJPcHRpb25zLnBhcmFtZXRl
ciBpbnN0YW5jZW9mIE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck9iamVjdC5w
cm9wZXJ0aWVzLnB1c2goX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBY3Rp
b24iXS5fR2V0VGFyZ2V0UHJvcGVydHkodHJpZ2dlck9wdGlvbnMucGFyYW1ldGVyKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgcGFyYW1ldGVyID0ge307CisgICAgICAgICAgICAgICAgICAgIF9NaXNjX2RlZXBDb3Bp
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHRy
aWdnZXJPcHRpb25zLnBhcmFtZXRlciwgcGFyYW1ldGVyLCBbIm1lc2giXSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh0cmlnZ2VyT3B0aW9ucy5wYXJhbWV0ZXIgJiYgdHJpZ2dlck9wdGlvbnMu
cGFyYW1ldGVyLm1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci5fbWVz
aElkID0gdHJpZ2dlck9wdGlvbnMucGFyYW1ldGVyLm1lc2guaWQ7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck9iamVjdC5wcm9wZXJ0aWVzLnB1c2go
eyBuYW1lOiAicGFyYW1ldGVyIiwgdGFyZ2V0VHlwZTogbnVsbCwgdmFsdWU6IHBhcmFtZXRlciB9
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBTZXJp
YWxpemUgY2hpbGQgYWN0aW9uLCByZWN1cnNpdmVseQorICAgICAgICAgICAgdGhpcy5hY3Rpb25z
W2ldLnNlcmlhbGl6ZSh0cmlnZ2VyT2JqZWN0KTsKKyAgICAgICAgICAgIC8vIEFkZCBzZXJpYWxp
emVkIHRyaWdnZXIKKyAgICAgICAgICAgIHJvb3QuY2hpbGRyZW4ucHVzaCh0cmlnZ2VyT2JqZWN0
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcm9vdDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBuZXcgQWN0aW9uTWFuYWdlciBmcm9tIGEgSlNPTiBkYXRhCisgICAgICog
QHBhcmFtIHBhcnNlZEFjdGlvbnMgZGVmaW5lcyB0aGUgSlNPTiBkYXRhIHRvIHJlYWQgZnJvbQor
ICAgICAqIEBwYXJhbSBvYmplY3QgZGVmaW5lcyB0aGUgaG9zdGluZyBtZXNoCisgICAgICogQHBh
cmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKi8KKyAgICBBY3Rpb25N
YW5hZ2VyLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZEFjdGlvbnMsIG9iamVjdCwgc2NlbmUpIHsK
KyAgICAgICAgdmFyIGFjdGlvbk1hbmFnZXIgPSBuZXcgQWN0aW9uTWFuYWdlcihzY2VuZSk7Cisg
ICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHsKKyAgICAgICAgICAgIHNjZW5lLmFjdGlvbk1h
bmFnZXIgPSBhY3Rpb25NYW5hZ2VyOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgb2JqZWN0LmFjdGlvbk1hbmFnZXIgPSBhY3Rpb25NYW5hZ2VyOworICAgICAgICB9Cisg
ICAgICAgIC8vIGluc3RhbmNpYXRlIGEgbmV3IG9iamVjdAorICAgICAgICB2YXIgaW5zdGFuY2lh
dGUgPSBmdW5jdGlvbiAobmFtZSwgcGFyYW1zKSB7CisgICAgICAgICAgICB2YXIgaW50ZXJuYWxD
bGFzc1R5cGUgPSBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
X1R5cGVTdG9yZSJdLkdldENsYXNzKCJCQUJZTE9OLiIgKyBuYW1lKTsKKyAgICAgICAgICAgIGlm
IChpbnRlcm5hbENsYXNzVHlwZSkgeworICAgICAgICAgICAgICAgIHZhciBuZXdJbnN0YW5jZSA9
IE9iamVjdC5jcmVhdGUoaW50ZXJuYWxDbGFzc1R5cGUucHJvdG90eXBlKTsKKyAgICAgICAgICAg
ICAgICBuZXdJbnN0YW5jZS5jb25zdHJ1Y3Rvci5hcHBseShuZXdJbnN0YW5jZSwgcGFyYW1zKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbmV3SW5zdGFuY2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisgICAgICAgIHZhciBwYXJzZVBhcmFtZXRlciA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1
ZSwgdGFyZ2V0LCBwcm9wZXJ0eVBhdGgpIHsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eVBhdGgg
PT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBTdHJpbmcsIGJvb2xlYW4gb3IgZmxvYXQK
KyAgICAgICAgICAgICAgICB2YXIgZmxvYXRWYWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpOworICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gInRydWUiIHx8IHZhbHVlID09PSAiZmFsc2UiKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gInRydWUiOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGlzTmFOKGZsb2F0VmFsdWUpID8gdmFsdWUgOiBmbG9hdFZhbHVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBlZmZlY3RpdmVUYXJnZXQgPSBw
cm9wZXJ0eVBhdGguc3BsaXQoIi4iKTsKKyAgICAgICAgICAgIHZhciB2YWx1ZXMgPSB2YWx1ZS5z
cGxpdCgiLCIpOworICAgICAgICAgICAgLy8gR2V0IGVmZmVjdGl2ZSBUYXJnZXQKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWZmZWN0aXZlVGFyZ2V0Lmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2VmZmVjdGl2ZVRhcmdldFtpXV07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBSZXR1cm4gYXBwcm9wcmlhdGUgdmFsdWUgd2l0aCBp
dHMgdHlwZQorICAgICAgICAgICAgaWYgKHR5cGVvZiAodGFyZ2V0KSA9PT0gImJvb2xlYW4iKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1swXSA9PT0gInRydWUiOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHR5cGVvZiAodGFyZ2V0KSA9PT0gInN0cmluZyIpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzWzBdOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gUGFyYW1ldGVycyB3aXRoIG11bHRpcGxlIHZhbHVlcyBzdWNoIGFzIFZlY3RvcjMgZXRj
LgorICAgICAgICAgICAgdmFyIHNwbGl0ID0gbmV3IEFycmF5KCk7CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHNw
bGl0LnB1c2gocGFyc2VGbG9hdCh2YWx1ZXNbaV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0u
RnJvbUFycmF5KHNwbGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0YXJnZXQg
aW5zdGFuY2VvZiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siVmVjdG9yNCJdKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3I0Il0uRnJvbUFycmF5KHNwbGl0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBfTWF0
aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb2xvcjMiXSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJDb2xvcjMiXS5Gcm9tQXJyYXkoc3BsaXQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9yNCJdKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9y
NCJdLkZyb21BcnJheShzcGxpdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
cGFyc2VGbG9hdCh2YWx1ZXNbMF0pOworICAgICAgICB9OworICAgICAgICAvLyB0cmF2ZXJzZSBn
cmFwaCBwZXIgdHJpZ2dlcgorICAgICAgICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiAocGFyc2Vk
QWN0aW9uLCB0cmlnZ2VyLCBjb25kaXRpb24sIGFjdGlvbiwgY29tYmluZUFycmF5KSB7CisgICAg
ICAgICAgICBpZiAoY29tYmluZUFycmF5ID09PSB2b2lkIDApIHsgY29tYmluZUFycmF5ID0gbnVs
bDsgfQorICAgICAgICAgICAgaWYgKHBhcnNlZEFjdGlvbi5kZXRhY2hlZCkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJz
ID0gbmV3IEFycmF5KCk7CisgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gbnVsbDsKKyAgICAgICAg
ICAgIHZhciBwcm9wZXJ0eVBhdGggPSBudWxsOworICAgICAgICAgICAgdmFyIGNvbWJpbmUgPSBw
YXJzZWRBY3Rpb24uY29tYmluZSAmJiBwYXJzZWRBY3Rpb24uY29tYmluZS5sZW5ndGggPiAwOwor
ICAgICAgICAgICAgLy8gUGFyYW1ldGVycworICAgICAgICAgICAgaWYgKHBhcnNlZEFjdGlvbi50
eXBlID09PSAyKSB7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXNoKGFjdGlvbk1hbmFn
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
cGFyYW1ldGVycy5wdXNoKHRyaWdnZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGNvbWJpbmUpIHsKKyAgICAgICAgICAgICAgICB2YXIgYWN0aW9ucyA9IG5ldyBBcnJheSgpOwor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyc2VkQWN0aW9uLmNvbWJpbmUu
bGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2UocGFyc2VkQWN0aW9u
LmNvbWJpbmVbal0sIEFjdGlvbk1hbmFnZXIuTm90aGluZ1RyaWdnZXIsIGNvbmRpdGlvbiwgYWN0
aW9uLCBhY3Rpb25zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGFyYW1l
dGVycy5wdXNoKGFjdGlvbnMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJzZWRBY3Rpb24ucHJvcGVydGll
cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwYXJzZWRB
Y3Rpb24ucHJvcGVydGllc1tpXS52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUg
PSBwYXJzZWRBY3Rpb24ucHJvcGVydGllc1tpXS5uYW1lOworICAgICAgICAgICAgICAgICAgICB2
YXIgdGFyZ2V0VHlwZSA9IHBhcnNlZEFjdGlvbi5wcm9wZXJ0aWVzW2ldLnRhcmdldFR5cGU7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAidGFyZ2V0IikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRhcmdldFR5cGUgIT09IG51bGwgJiYgdGFyZ2V0VHlwZSA9PT0gIlNj
ZW5lUHJvcGVydGllcyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRh
cmdldCA9IHNjZW5lOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0YXJn
ZXQgPSBzY2VuZS5nZXROb2RlQnlOYW1lKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChu
YW1lID09PSAicGFyZW50IikgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY2Vu
ZS5nZXROb2RlQnlOYW1lKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAic291bmQiKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBDYW4gbm90IGV4dGVybmFsaXplIHRvIGNvbXBvbmVudCwgc28gb25seSBjaGVj
a3MgZm9yIHRoZSBwcmVzZW5jZSBvZmYgdGhlIEFQSS4KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzY2VuZS5nZXRTb3VuZEJ5TmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gc2NlbmUuZ2V0U291bmRCeU5hbWUodmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKG5hbWUgIT09ICJwcm9wZXJ0eVBhdGgiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyc2VkQWN0aW9uLnR5cGUgPT09IDIgJiYgbmFtZSA9PT0gIm9wZXJhdG9yIikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gX2NvbmRpdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWYWx1ZUNvbmRpdGlvbiJdW3ZhbHVlXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQYXJhbWV0ZXIobmFtZSwgdmFsdWUsIHRhcmdl
dCwgbmFtZSA9PT0gInZhbHVlIiA/IHByb3BlcnR5UGF0aCA6IG51bGwpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlQYXRoID0gdmFsdWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXNo
KHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoY29tYmluZUFycmF5ID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5w
dXNoKGNvbmRpdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLnB1c2gobnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAvLyBJZiBpbnRlcnBvbGF0ZSB2YWx1ZSBhY3Rpb24KKyAgICAgICAgICAgIGlmIChwYXJz
ZWRBY3Rpb24ubmFtZSA9PT0gIkludGVycG9sYXRlVmFsdWVBY3Rpb24iKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHBhcmFtID0gcGFyYW1ldGVyc1twYXJhbWV0ZXJzLmxlbmd0aCAtIDJdOworICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcnNbcGFyYW1ldGVycy5sZW5ndGggLSAxXSA9IHBhcmFtOwor
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNbcGFyYW1ldGVycy5sZW5ndGggLSAyXSA9IGNvbmRp
dGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEFjdGlvbiBvciBjb25kaXRpb24o
cykgYW5kIG5vdCBDb21iaW5lQWN0aW9uCisgICAgICAgICAgICB2YXIgbmV3QWN0aW9uID0gaW5z
dGFuY2lhdGUocGFyc2VkQWN0aW9uLm5hbWUsIHBhcmFtZXRlcnMpOworICAgICAgICAgICAgaWYg
KG5ld0FjdGlvbiBpbnN0YW5jZW9mIF9jb25kaXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siQ29uZGl0aW9uIl0gJiYgY29uZGl0aW9uICE9PSBudWxsKSB7CisgICAgICAgICAgICAg
ICAgdmFyIG5vdGhpbmcgPSBuZXcgX2RpcmVjdEFjdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siRG9Ob3RoaW5nQWN0aW9uIl0odHJpZ2dlciwgY29uZGl0aW9uKTsKKyAgICAgICAg
ICAgICAgICBpZiAoYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdGlvbi50aGVuKG5v
dGhpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgYWN0aW9uTWFuYWdlci5yZWdpc3RlckFjdGlvbihub3RoaW5nKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWN0aW9uID0gbm90aGluZzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb21iaW5lQXJyYXkgPT09IG51bGwpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobmV3QWN0aW9uIGluc3RhbmNlb2YgX2NvbmRpdGlvbl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJDb25kaXRpb24iXSkgeworICAgICAgICAgICAgICAgICAgICBj
b25kaXRpb24gPSBuZXdBY3Rpb247CisgICAgICAgICAgICAgICAgICAgIG5ld0FjdGlvbiA9IGFj
dGlvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbmRpdGlvbiA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIGlmIChh
Y3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi50aGVuKG5ld0FjdGlvbik7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhY3Rpb25NYW5hZ2VyLnJlZ2lzdGVyQWN0aW9uKG5ld0FjdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb21iaW5lQXJyYXkucHVz
aChuZXdBY3Rpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBwYXJzZWRBY3Rpb24uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICB0cmF2ZXJzZShwYXJzZWRBY3Rpb24uY2hpbGRyZW5baV0sIHRyaWdnZXIsIGNvbmRpdGlvbiwg
bmV3QWN0aW9uLCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgLy8g
dHJpZ2dlcnMKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJzZWRBY3Rpb25zLmNoaWxk
cmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdHJpZ2dlclBhcmFtczsKKyAgICAg
ICAgICAgIHZhciB0cmlnZ2VyID0gcGFyc2VkQWN0aW9ucy5jaGlsZHJlbltpXTsKKyAgICAgICAg
ICAgIGlmICh0cmlnZ2VyLnByb3BlcnRpZXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAg
IHZhciBwYXJhbSA9IHRyaWdnZXIucHJvcGVydGllc1swXS52YWx1ZTsKKyAgICAgICAgICAgICAg
ICB2YXIgdmFsdWUgPSB0cmlnZ2VyLnByb3BlcnRpZXNbMF0udGFyZ2V0VHlwZSA9PT0gbnVsbCA/
IHBhcmFtIDogc2NlbmUuZ2V0TWVzaEJ5TmFtZShwYXJhbSk7CisgICAgICAgICAgICAgICAgaWYg
KHZhbHVlLl9tZXNoSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUubWVzaCA9IHNjZW5l
LmdldE1lc2hCeUlEKHZhbHVlLl9tZXNoSWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB0cmlnZ2VyUGFyYW1zID0geyB0cmlnZ2VyOiBBY3Rpb25NYW5hZ2VyW3RyaWdnZXIu
bmFtZV0sIHBhcmFtZXRlcjogdmFsdWUgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHRyaWdnZXJQYXJhbXMgPSBBY3Rpb25NYW5hZ2VyW3RyaWdn
ZXIubmFtZV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8
IHRyaWdnZXIuY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRy
aWdnZXIuZGV0YWNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2UodHJpZ2dlci5j
aGlsZHJlbltqXSwgdHJpZ2dlclBhcmFtcywgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQg
YSB0cmlnZ2VyIG5hbWUgYnkgaW5kZXgKKyAgICAgKiBAcGFyYW0gdHJpZ2dlciBkZWZpbmVzIHRo
ZSB0cmlnZ2VyIGluZGV4CisgICAgICogQHJldHVybnMgYSB0cmlnZ2VyIG5hbWUKKyAgICAgKi8K
KyAgICBBY3Rpb25NYW5hZ2VyLkdldFRyaWdnZXJOYW1lID0gZnVuY3Rpb24gKHRyaWdnZXIpIHsK
KyAgICAgICAgc3dpdGNoICh0cmlnZ2VyKSB7CisgICAgICAgICAgICBjYXNlIDA6IHJldHVybiAi
Tm90aGluZ1RyaWdnZXIiOworICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gIk9uUGlja1RyaWdn
ZXIiOworICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gIk9uTGVmdFBpY2tUcmlnZ2VyIjsKKyAg
ICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJPblJpZ2h0UGlja1RyaWdnZXIiOworICAgICAgICAg
ICAgY2FzZSA0OiByZXR1cm4gIk9uQ2VudGVyUGlja1RyaWdnZXIiOworICAgICAgICAgICAgY2Fz
ZSA1OiByZXR1cm4gIk9uUGlja0Rvd25UcmlnZ2VyIjsKKyAgICAgICAgICAgIGNhc2UgNjogcmV0
dXJuICJPblBpY2tVcFRyaWdnZXIiOworICAgICAgICAgICAgY2FzZSA3OiByZXR1cm4gIk9uTG9u
Z1ByZXNzVHJpZ2dlciI7CisgICAgICAgICAgICBjYXNlIDg6IHJldHVybiAiT25Qb2ludGVyT3Zl
clRyaWdnZXIiOworICAgICAgICAgICAgY2FzZSA5OiByZXR1cm4gIk9uUG9pbnRlck91dFRyaWdn
ZXIiOworICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuICJPbkV2ZXJ5RnJhbWVUcmlnZ2VyIjsK
KyAgICAgICAgICAgIGNhc2UgMTE6IHJldHVybiAiT25JbnRlcnNlY3Rpb25FbnRlclRyaWdnZXIi
OworICAgICAgICAgICAgY2FzZSAxMjogcmV0dXJuICJPbkludGVyc2VjdGlvbkV4aXRUcmlnZ2Vy
IjsKKyAgICAgICAgICAgIGNhc2UgMTM6IHJldHVybiAiT25LZXlEb3duVHJpZ2dlciI7CisgICAg
ICAgICAgICBjYXNlIDE0OiByZXR1cm4gIk9uS2V5VXBUcmlnZ2VyIjsKKyAgICAgICAgICAgIGNh
c2UgMTU6IHJldHVybiAiT25QaWNrT3V0VHJpZ2dlciI7CisgICAgICAgICAgICBkZWZhdWx0OiBy
ZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIE5vdGhpbmcKKyAg
ICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rp
b25zI3RyaWdnZXJzCisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5Ob3RoaW5nVHJpZ2dlciA9
IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQ29uc3Rh
bnRzIl0uQUNUSU9OX05vdGhpbmdUcmlnZ2VyOworICAgIC8qKgorICAgICAqIE9uIHBpY2sKKyAg
ICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rp
b25zI3RyaWdnZXJzCisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5PblBpY2tUcmlnZ2VyID0g
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFu
dHMiXS5BQ1RJT05fT25QaWNrVHJpZ2dlcjsKKyAgICAvKioKKyAgICAgKiBPbiBsZWZ0IHBpY2sK
KyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9h
Y3Rpb25zI3RyaWdnZXJzCisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5PbkxlZnRQaWNrVHJp
Z2dlciA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1si
Q29uc3RhbnRzIl0uQUNUSU9OX09uTGVmdFBpY2tUcmlnZ2VyOworICAgIC8qKgorICAgICAqIE9u
IHJpZ2h0IHBpY2sKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
aG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJzCisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5P
blJpZ2h0UGlja1RyaWdnZXIgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzExX19bIkNvbnN0YW50cyJdLkFDVElPTl9PblJpZ2h0UGlja1RyaWdnZXI7CisgICAg
LyoqCisgICAgICogT24gY2VudGVyIHBpY2sKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxv
bmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJzCisgICAgICovCisgICAg
QWN0aW9uTWFuYWdlci5PbkNlbnRlclBpY2tUcmlnZ2VyID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25DZW50ZXJQ
aWNrVHJpZ2dlcjsKKyAgICAvKioKKyAgICAgKiBPbiBwaWNrIGRvd24KKyAgICAgKiBAc2VlIGh0
dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJz
CisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5PblBpY2tEb3duVHJpZ2dlciA9IF9FbmdpbmVz
X2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uQUNU
SU9OX09uUGlja0Rvd25UcmlnZ2VyOworICAgIC8qKgorICAgICAqIE9uIGRvdWJsZSBwaWNrCisg
ICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0
aW9ucyN0cmlnZ2VycworICAgICAqLworICAgIEFjdGlvbk1hbmFnZXIuT25Eb3VibGVQaWNrVHJp
Z2dlciA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1si
Q29uc3RhbnRzIl0uQUNUSU9OX09uRG91YmxlUGlja1RyaWdnZXI7CisgICAgLyoqCisgICAgICog
T24gcGljayB1cAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9o
b3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLk9u
UGlja1VwVHJpZ2dlciA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uUGlja1VwVHJpZ2dlcjsKKyAgICAvKioKKyAg
ICAgKiBPbiBwaWNrIG91dC4KKyAgICAgKiBUaGlzIHRyaWdnZXIgd2lsbCBvbmx5IGJlIHJhaXNl
ZCBpZiB5b3UgYWxzbyBkZWNsYXJlZCBhIE9uUGlja0Rvd24KKyAgICAgKiBAc2VlIGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJzCisgICAg
ICovCisgICAgQWN0aW9uTWFuYWdlci5PblBpY2tPdXRUcmlnZ2VyID0gX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25Q
aWNrT3V0VHJpZ2dlcjsKKyAgICAvKioKKyAgICAgKiBPbiBsb25nIHByZXNzCisgICAgICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucyN0cmln
Z2VycworICAgICAqLworICAgIEFjdGlvbk1hbmFnZXIuT25Mb25nUHJlc3NUcmlnZ2VyID0gX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMi
XS5BQ1RJT05fT25Mb25nUHJlc3NUcmlnZ2VyOworICAgIC8qKgorICAgICAqIE9uIHBvaW50ZXIg
b3ZlcgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9f
dXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLk9uUG9pbnRl
ck92ZXJUcmlnZ2VyID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMV9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25Qb2ludGVyT3ZlclRyaWdnZXI7CisgICAgLyoq
CisgICAgICogT24gcG9pbnRlciBvdXQKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJzCisgICAgICovCisgICAgQWN0
aW9uTWFuYWdlci5PblBvaW50ZXJPdXRUcmlnZ2VyID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25Qb2ludGVyT3V0
VHJpZ2dlcjsKKyAgICAvKioKKyAgICAgKiBPbiBldmVyeSBmcmFtZQorICAgICAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMK
KyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLk9uRXZlcnlGcmFtZVRyaWdnZXIgPSBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkNvbnN0YW50cyJdLkFD
VElPTl9PbkV2ZXJ5RnJhbWVUcmlnZ2VyOworICAgIC8qKgorICAgICAqIE9uIGludGVyc2VjdGlv
biBlbnRlcgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3df
dG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2VyLk9uSW50
ZXJzZWN0aW9uRW50ZXJUcmlnZ2VyID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25JbnRlcnNlY3Rpb25FbnRlclRy
aWdnZXI7CisgICAgLyoqCisgICAgICogT24gaW50ZXJzZWN0aW9uIGV4aXQKKyAgICAgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdn
ZXJzCisgICAgICovCisgICAgQWN0aW9uTWFuYWdlci5PbkludGVyc2VjdGlvbkV4aXRUcmlnZ2Vy
ID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25z
dGFudHMiXS5BQ1RJT05fT25JbnRlcnNlY3Rpb25FeGl0VHJpZ2dlcjsKKyAgICAvKioKKyAgICAg
KiBPbiBrZXkgZG93bgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBBY3Rpb25NYW5hZ2Vy
Lk9uS2V5RG93blRyaWdnZXIgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzExX19bIkNvbnN0YW50cyJdLkFDVElPTl9PbktleURvd25UcmlnZ2VyOworICAgIC8q
KgorICAgICAqIE9uIGtleSB1cAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBBY3Rpb25N
YW5hZ2VyLk9uS2V5VXBUcmlnZ2VyID0gMTU7CisgICAgcmV0dXJuIEFjdGlvbk1hbmFnZXI7Cit9
KF9hYnN0cmFjdEFjdGlvbk1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkFi
c3RyYWN0QWN0aW9uTWFuYWdlciJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQWN0
aW9ucy9jb25kaXRpb24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9BY3Rpb25zL2NvbmRpdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQ29uZGl0aW9uLCBWYWx1ZUNv
bmRpdGlvbiwgUHJlZGljYXRlQ29uZGl0aW9uLCBTdGF0ZUNvbmRpdGlvbiAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb25kaXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IENvbmRpdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWYWx1ZUNvbmRpdGlvbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gVmFsdWVDb25kaXRpb247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUHJl
ZGljYXRlQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQcmVkaWNhdGVDb25kaXRpb247
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RhdGVDb25kaXRpb24iLCBmdW5jdGlvbigpIHsgcmV0
dXJuIFN0YXRlQ29uZGl0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNs
aWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlvbiAqLyAiLi9BY3Rpb25zL2FjdGlvbi50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90eXBlU3RvcmUg
Ki8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKy8qKgorICogQSBDb25kaXRpb24gYXBw
bGllZCB0byBhbiBBY3Rpb24KKyAqLwordmFyIENvbmRpdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IENvbmRpdGlvbgorICAg
ICAqIEBwYXJhbSBhY3Rpb25NYW5hZ2VyIHRoZSBtYW5hZ2VyIG9mIHRoZSBhY3Rpb24gdGhlIGNv
bmRpdGlvbiBpcyBhcHBsaWVkIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gQ29uZGl0aW9uKGFj
dGlvbk1hbmFnZXIpIHsKKyAgICAgICAgdGhpcy5fYWN0aW9uTWFuYWdlciA9IGFjdGlvbk1hbmFn
ZXI7CisgICAgfQorICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IGNvbmRpdGlv
biBpcyB2YWxpZAorICAgICAqIEByZXR1cm5zIGEgYm9vbGVhbgorICAgICAqLworICAgIENvbmRp
dGlvbi5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBvbmx5CisgICAgICogQGhpZGRl
bgorICAgICAqLworICAgIENvbmRpdGlvbi5wcm90b3R5cGUuX2dldFByb3BlcnR5ID0gZnVuY3Rp
b24gKHByb3BlcnR5UGF0aCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9uTWFuYWdlci5f
Z2V0UHJvcGVydHkocHJvcGVydHlQYXRoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEludGVy
bmFsIG9ubHkKKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgQ29uZGl0aW9uLnByb3RvdHlw
ZS5fZ2V0RWZmZWN0aXZlVGFyZ2V0ID0gZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHlQYXRoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25NYW5hZ2VyLl9nZXRFZmZlY3RpdmVUYXJnZXQo
dGFyZ2V0LCBwcm9wZXJ0eVBhdGgpOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXpl
IHBsYWNlaG9sZGVyIGZvciBjaGlsZCBjbGFzc2VzCisgICAgICogQHJldHVybnMgdGhlIHNlcmlh
bGl6ZWQgb2JqZWN0CisgICAgICovCisgICAgQ29uZGl0aW9uLnByb3RvdHlwZS5zZXJpYWxpemUg
PSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBvbmx5Cisg
ICAgICogQGhpZGRlbgorICAgICAqLworICAgIENvbmRpdGlvbi5wcm90b3R5cGUuX3NlcmlhbGl6
ZSA9IGZ1bmN0aW9uIChzZXJpYWxpemVkQ29uZGl0aW9uKSB7CisgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICB0eXBlOiAyLAorICAgICAgICAgICAgY2hpbGRyZW46IFtdLAorICAgICAgICAg
ICAgbmFtZTogc2VyaWFsaXplZENvbmRpdGlvbi5uYW1lLAorICAgICAgICAgICAgcHJvcGVydGll
czogc2VyaWFsaXplZENvbmRpdGlvbi5wcm9wZXJ0aWVzCisgICAgICAgIH07CisgICAgfTsKKyAg
ICByZXR1cm4gQ29uZGl0aW9uOworfSgpKTsKKworLyoqCisgKiBEZWZpbmVzIHNwZWNpZmljIGNv
bmRpdGlvbmFsIG9wZXJhdG9ycyBhcyBleHRlbnNpb25zIG9mIENvbmRpdGlvbgorICovCit2YXIg
VmFsdWVDb25kaXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVmFsdWVDb25k
aXRpb24sIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBWYWx1ZUNvbmRp
dGlvbgorICAgICAqIEBwYXJhbSBhY3Rpb25NYW5hZ2VyIG1hbmFnZXIgZm9yIHRoZSBhY3Rpb24g
dGhlIGNvbmRpdGlvbiBhcHBsaWVzIHRvCisgICAgICogQHBhcmFtIHRhcmdldCBmb3IgdGhlIGFj
dGlvbgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggcGF0aCB0byBzcGVjaWZ5IHRoZSBwcm9w
ZXJ0eSBvZiB0aGUgdGFyZ2V0IHRoZSBjb25kaXRpb25hbCBvcGVyYXRvciB1c2VzCisgICAgICog
QHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBjb21wYXJlZCBieSB0aGUgY29uZGl0aW9uYWwgb3BlcmF0
b3IgYWdhaW5zdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkKKyAgICAgKiBAcGFy
YW0gb3BlcmF0b3IgdGhlIGNvbmRpdGlvbmFsIG9wZXJhdG9yLCBkZWZhdWx0IFZhbHVlQ29uZGl0
aW9uLklzRXF1YWwKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBWYWx1ZUNvbmRpdGlvbihhY3Rpb25N
YW5hZ2VyLCB0YXJnZXQsIAorICAgIC8qKiBwYXRoIHRvIHNwZWNpZnkgdGhlIHByb3BlcnR5IG9m
IHRoZSB0YXJnZXQgdGhlIGNvbmRpdGlvbmFsIG9wZXJhdG9yIHVzZXMgICovCisgICAgcHJvcGVy
dHlQYXRoLCAKKyAgICAvKiogdGhlIHZhbHVlIGNvbXBhcmVkIGJ5IHRoZSBjb25kaXRpb25hbCBv
cGVyYXRvciBhZ2FpbnN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSAqLworICAg
IHZhbHVlLCAKKyAgICAvKiogdGhlIGNvbmRpdGlvbmFsIG9wZXJhdG9yLCBkZWZhdWx0IFZhbHVl
Q29uZGl0aW9uLklzRXF1YWwgKi8KKyAgICBvcGVyYXRvcikgeworICAgICAgICBpZiAob3BlcmF0
b3IgPT09IHZvaWQgMCkgeyBvcGVyYXRvciA9IFZhbHVlQ29uZGl0aW9uLklzRXF1YWw7IH0KKyAg
ICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgYWN0aW9uTWFuYWdlcikgfHwgdGhp
czsKKyAgICAgICAgX3RoaXMucHJvcGVydHlQYXRoID0gcHJvcGVydHlQYXRoOworICAgICAgICBf
dGhpcy52YWx1ZSA9IHZhbHVlOworICAgICAgICBfdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yOwor
ICAgICAgICBfdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICBfdGhpcy5fZWZmZWN0aXZl
VGFyZ2V0ID0gX3RoaXMuX2dldEVmZmVjdGl2ZVRhcmdldCh0YXJnZXQsIF90aGlzLnByb3BlcnR5
UGF0aCk7CisgICAgICAgIF90aGlzLl9wcm9wZXJ0eSA9IF90aGlzLl9nZXRQcm9wZXJ0eShfdGhp
cy5wcm9wZXJ0eVBhdGgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShWYWx1ZUNvbmRpdGlvbiwgIklzRXF1YWwiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiByZXR1cm5zIHRoZSBudW1iZXIgZm9yIElzRXF1YWwKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFZhbHVlQ29u
ZGl0aW9uLl9Jc0VxdWFsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoVmFsdWVDb25kaXRpb24sICJJc0RpZmZlcmVudCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFJldHVybnMgdGhlIG51bWJlciBmb3IgSXNEaWZmZXJlbnQKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFZhbHVlQ29uZGl0
aW9uLl9Jc0RpZmZlcmVudDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFZhbHVlQ29uZGl0aW9uLCAiSXNHcmVhdGVyIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogUmV0dXJucyB0aGUgbnVtYmVyIGZvciBJc0dyZWF0ZXIKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFZhbHVlQ29uZGl0aW9u
Ll9Jc0dyZWF0ZXI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShWYWx1ZUNvbmRpdGlvbiwgIklzTGVzc2VyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
UmV0dXJucyB0aGUgbnVtYmVyIGZvciBJc0xlc3NlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gVmFsdWVDb25kaXRpb24uX0lzTGVz
c2VyOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBDb21wYXJlcyB0aGUgZ2l2
ZW4gdmFsdWUgd2l0aCB0aGUgcHJvcGVydHkgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgY29uZGl0
aW9uYWwgb3BlcmF0b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJp
c29uCisgICAgICovCisgICAgVmFsdWVDb25kaXRpb24ucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHN3aXRjaCAodGhpcy5vcGVyYXRvcikgeworICAgICAgICAgICAg
Y2FzZSBWYWx1ZUNvbmRpdGlvbi5Jc0dyZWF0ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2VmZmVjdGl2ZVRhcmdldFt0aGlzLl9wcm9wZXJ0eV0gPiB0aGlzLnZhbHVlOworICAgICAg
ICAgICAgY2FzZSBWYWx1ZUNvbmRpdGlvbi5Jc0xlc3NlcjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fZWZmZWN0aXZlVGFyZ2V0W3RoaXMuX3Byb3BlcnR5XSA8IHRoaXMudmFsdWU7Cisg
ICAgICAgICAgICBjYXNlIFZhbHVlQ29uZGl0aW9uLklzRXF1YWw6CisgICAgICAgICAgICBjYXNl
IFZhbHVlQ29uZGl0aW9uLklzRGlmZmVyZW50OgorICAgICAgICAgICAgICAgIHZhciBjaGVjazsK
KyAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZS5lcXVhbHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2hlY2sgPSB0aGlzLnZhbHVlLmVxdWFscyh0aGlzLl9lZmZlY3RpdmVUYXJnZXRbdGhp
cy5fcHJvcGVydHldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGNoZWNrID0gdGhpcy52YWx1ZSA9PT0gdGhpcy5fZWZmZWN0
aXZlVGFyZ2V0W3RoaXMuX3Byb3BlcnR5XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMub3BlcmF0b3IgPT09IFZhbHVlQ29uZGl0aW9uLklzRXF1YWwgPyBj
aGVjayA6ICFjaGVjazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgdGhlIFZhbHVlQ29uZGl0aW9uIGludG8gYSBKU09O
IGNvbXBhdGlibGUgb2JqZWN0CisgICAgICogQHJldHVybnMgc2VyaWFsaXphdGlvbiBvYmplY3QK
KyAgICAgKi8KKyAgICBWYWx1ZUNvbmRpdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplKHsKKyAgICAgICAgICAgIG5h
bWU6ICJWYWx1ZUNvbmRpdGlvbiIsCisgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbCisgICAgICAg
ICAgICAgICAgX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBY3Rpb24iXS5f
R2V0VGFyZ2V0UHJvcGVydHkodGhpcy5fdGFyZ2V0KSwKKyAgICAgICAgICAgICAgICB7IG5hbWU6
ICJwcm9wZXJ0eVBhdGgiLCB2YWx1ZTogdGhpcy5wcm9wZXJ0eVBhdGggfSwKKyAgICAgICAgICAg
ICAgICB7IG5hbWU6ICJ2YWx1ZSIsIHZhbHVlOiBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIkFjdGlvbiJdLl9TZXJpYWxpemVWYWx1ZUFzU3RyaW5nKHRoaXMudmFsdWUpIH0s
CisgICAgICAgICAgICAgICAgeyBuYW1lOiAib3BlcmF0b3IiLCB2YWx1ZTogVmFsdWVDb25kaXRp
b24uR2V0T3BlcmF0b3JOYW1lKHRoaXMub3BlcmF0b3IpIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBjb25k
aXRpb25hbCBvcGVyYXRvciBmb3IgdGhlIFZhbHVlQ29uZGl0aW9uCisgICAgICogQHBhcmFtIG9w
ZXJhdG9yIHRoZSBjb25kaXRpb25hbCBvcGVyYXRvcgorICAgICAqIEByZXR1cm5zIHRoZSBuYW1l
CisgICAgICovCisgICAgVmFsdWVDb25kaXRpb24uR2V0T3BlcmF0b3JOYW1lID0gZnVuY3Rpb24g
KG9wZXJhdG9yKSB7CisgICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHsKKyAgICAgICAgICAgIGNh
c2UgVmFsdWVDb25kaXRpb24uX0lzRXF1YWw6IHJldHVybiAiSXNFcXVhbCI7CisgICAgICAgICAg
ICBjYXNlIFZhbHVlQ29uZGl0aW9uLl9Jc0RpZmZlcmVudDogcmV0dXJuICJJc0RpZmZlcmVudCI7
CisgICAgICAgICAgICBjYXNlIFZhbHVlQ29uZGl0aW9uLl9Jc0dyZWF0ZXI6IHJldHVybiAiSXNH
cmVhdGVyIjsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVDb25kaXRpb24uX0lzTGVzc2VyOiByZXR1
cm4gIklzTGVzc2VyIjsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAiIjsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogSW50ZXJuYWwgb25seQorICAgICAqIEBoaWRkZW4K
KyAgICAgKi8KKyAgICBWYWx1ZUNvbmRpdGlvbi5fSXNFcXVhbCA9IDA7CisgICAgLyoqCisgICAg
ICogSW50ZXJuYWwgb25seQorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBWYWx1ZUNvbmRp
dGlvbi5fSXNEaWZmZXJlbnQgPSAxOworICAgIC8qKgorICAgICAqIEludGVybmFsIG9ubHkKKyAg
ICAgKiBAaGlkZGVuCisgICAgICovCisgICAgVmFsdWVDb25kaXRpb24uX0lzR3JlYXRlciA9IDI7
CisgICAgLyoqCisgICAgICogSW50ZXJuYWwgb25seQorICAgICAqIEBoaWRkZW4KKyAgICAgKi8K
KyAgICBWYWx1ZUNvbmRpdGlvbi5fSXNMZXNzZXIgPSAzOworICAgIHJldHVybiBWYWx1ZUNvbmRp
dGlvbjsKK30oQ29uZGl0aW9uKSk7CisKKy8qKgorICogRGVmaW5lcyBhIHByZWRpY2F0ZSBjb25k
aXRpb24gYXMgYW4gZXh0ZW5zaW9uIG9mIENvbmRpdGlvbgorICovCit2YXIgUHJlZGljYXRlQ29u
ZGl0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFByZWRpY2F0ZUNvbmRpdGlv
biwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFByZWRpY2F0ZUNvbmRp
dGlvbgorICAgICAqIEBwYXJhbSBhY3Rpb25NYW5hZ2VyIG1hbmFnZXIgZm9yIHRoZSBhY3Rpb24g
dGhlIGNvbmRpdGlvbiBhcHBsaWVzIHRvCisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBkZWZpbmVz
IHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCB0byB2YWxpZGF0ZSB0aGUgY29uZGl0aW9uCisg
ICAgICovCisgICAgZnVuY3Rpb24gUHJlZGljYXRlQ29uZGl0aW9uKGFjdGlvbk1hbmFnZXIsIAor
ICAgIC8qKiBkZWZpbmVzIHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCB0byB2YWxpZGF0ZSB0
aGUgY29uZGl0aW9uICovCisgICAgcHJlZGljYXRlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9z
dXBlci5jYWxsKHRoaXMsIGFjdGlvbk1hbmFnZXIpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnBy
ZWRpY2F0ZSA9IHByZWRpY2F0ZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAv
KioKKyAgICAgKiBAcmV0dXJucyB0aGUgdmFsaWRpdHkgb2YgdGhlIHByZWRpY2F0ZSBjb25kaXRp
b24KKyAgICAgKi8KKyAgICBQcmVkaWNhdGVDb25kaXRpb24ucHJvdG90eXBlLmlzVmFsaWQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnByZWRpY2F0ZSgpOworICAgIH07Cisg
ICAgcmV0dXJuIFByZWRpY2F0ZUNvbmRpdGlvbjsKK30oQ29uZGl0aW9uKSk7CisKKy8qKgorICog
RGVmaW5lcyBhIHN0YXRlIGNvbmRpdGlvbiBhcyBhbiBleHRlbnNpb24gb2YgQ29uZGl0aW9uCisg
Ki8KK3ZhciBTdGF0ZUNvbmRpdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIp
IHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShT
dGF0ZUNvbmRpdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFN0
YXRlQ29uZGl0aW9uCisgICAgICogQHBhcmFtIGFjdGlvbk1hbmFnZXIgbWFuYWdlciBmb3IgdGhl
IGFjdGlvbiB0aGUgY29uZGl0aW9uIGFwcGxpZXMgdG8KKyAgICAgKiBAcGFyYW0gdGFyZ2V0IG9m
IHRoZSBjb25kaXRpb24KKyAgICAgKiBAcGFyYW0gdmFsdWUgdG8gY29tcGFyZSB3aXRoIHRhcmdl
dCBzdGF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIFN0YXRlQ29uZGl0aW9uKGFjdGlvbk1hbmFn
ZXIsIHRhcmdldCwgCisgICAgLyoqIFZhbHVlIHRvIGNvbXBhcmUgd2l0aCB0YXJnZXQgc3RhdGUg
ICovCisgICAgdmFsdWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywg
YWN0aW9uTWFuYWdlcikgfHwgdGhpczsKKyAgICAgICAgX3RoaXMudmFsdWUgPSB2YWx1ZTsKKyAg
ICAgICAgX3RoaXMuX3RhcmdldCA9IHRhcmdldDsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAg
IH0KKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBjdXJy
ZW50IGNvbmRpdGlvbiBpcyBtZXQKKyAgICAgKiBAcmV0dXJucyB0aGUgdmFsaWRpdHkgb2YgdGhl
IHN0YXRlCisgICAgICovCisgICAgU3RhdGVDb25kaXRpb24ucHJvdG90eXBlLmlzVmFsaWQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl90YXJnZXQuc3RhdGUgPT09IHRoaXMu
dmFsdWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgdGhlIFN0YXRlQ29uZGl0
aW9uIGludG8gYSBKU09OIGNvbXBhdGlibGUgb2JqZWN0CisgICAgICogQHJldHVybnMgc2VyaWFs
aXphdGlvbiBvYmplY3QKKyAgICAgKi8KKyAgICBTdGF0ZUNvbmRpdGlvbi5wcm90b3R5cGUuc2Vy
aWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplKHsK
KyAgICAgICAgICAgIG5hbWU6ICJTdGF0ZUNvbmRpdGlvbiIsCisgICAgICAgICAgICBwcm9wZXJ0
aWVzOiBbCisgICAgICAgICAgICAgICAgX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJBY3Rpb24iXS5fR2V0VGFyZ2V0UHJvcGVydHkodGhpcy5fdGFyZ2V0KSwKKyAgICAgICAg
ICAgICAgICB7IG5hbWU6ICJ2YWx1ZSIsIHZhbHVlOiB0aGlzLnZhbHVlIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICByZXR1cm4gU3RhdGVDb25kaXRpb247Cit9KENv
bmRpdGlvbikpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5WYWx1ZUNvbmRpdGlvbiJd
ID0gVmFsdWVDb25kaXRpb247CitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5QcmVkaWNhdGVD
b25kaXRpb24iXSA9IFByZWRpY2F0ZUNvbmRpdGlvbjsKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZ
TE9OLlN0YXRlQ29uZGl0aW9uIl0gPSBTdGF0ZUNvbmRpdGlvbjsKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vQWN0aW9ucy9kaXJlY3RBY3Rpb25zLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0FjdGlvbnMvZGlyZWN0QWN0aW9ucy50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IFN3aXRjaEJvb2xlYW5BY3Rpb24sIFNldFN0YXRlQWN0aW9uLCBTZXRWYWx1ZUFj
dGlvbiwgSW5jcmVtZW50VmFsdWVBY3Rpb24sIFBsYXlBbmltYXRpb25BY3Rpb24sIFN0b3BBbmlt
YXRpb25BY3Rpb24sIERvTm90aGluZ0FjdGlvbiwgQ29tYmluZUFjdGlvbiwgRXhlY3V0ZUNvZGVB
Y3Rpb24sIFNldFBhcmVudEFjdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTd2l0Y2hCb29sZWFuQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTd2l0Y2hCb29s
ZWFuQWN0aW9uOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNldFN0YXRlQWN0aW9uIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBTZXRTdGF0ZUFjdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTZXRW
YWx1ZUFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2V0VmFsdWVBY3Rpb247IH0pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiSW5jcmVtZW50VmFsdWVBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEluY3JlbWVudFZhbHVlQWN0aW9uOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBsYXlBbmltYXRp
b25BY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBsYXlBbmltYXRpb25BY3Rpb247IH0pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiU3RvcEFuaW1hdGlvbkFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gU3RvcEFuaW1hdGlvbkFjdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEb05vdGhpbmdB
Y3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIERvTm90aGluZ0FjdGlvbjsgfSk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJDb21iaW5lQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb21iaW5lQWN0
aW9uOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkV4ZWN1dGVDb2RlQWN0aW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBFeGVjdXRlQ29kZUFjdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTZXRQ
YXJlbnRBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNldFBhcmVudEFjdGlvbjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMv
bWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWN0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FjdGlv
biAqLyAiLi9BY3Rpb25zL2FjdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFu
dHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mv
dHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKworCisvKioKKyAq
IFRoaXMgZGVmaW5lcyBhbiBhY3Rpb24gcmVzcG9uc2libGUgdG8gdG9nZ2xlIGEgYm9vbGVhbiBv
bmNlIHRyaWdnZXJlZC4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9o
b3dfdG9fdXNlX2FjdGlvbnMKKyAqLwordmFyIFN3aXRjaEJvb2xlYW5BY3Rpb24gPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19leHRlbmRzIl0oU3dpdGNoQm9vbGVhbkFjdGlvbiwgX3N1cGVyKTsKKyAg
ICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZSB0aGUgYWN0aW9uCisgICAgICogQHBhcmFtIHRyaWdn
ZXJPcHRpb25zIGRlZmluZXMgdGhlIHRyaWdnZXIgb3B0aW9ucworICAgICAqIEBwYXJhbSB0YXJn
ZXQgZGVmaW5lcyB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGJvb2xlYW4KKyAgICAgKiBAcGFy
YW0gcHJvcGVydHlQYXRoIGRlZmluZXMgdGhlIHBhdGggdG8gdGhlIGJvb2xlYW4gcHJvcGVydHkg
aW4gdGhlIHRhcmdldCBvYmplY3QKKyAgICAgKiBAcGFyYW0gY29uZGl0aW9uIGRlZmluZXMgdGhl
IHRyaWdnZXIgcmVsYXRlZCBjb25kaXRpb25zCisgICAgICovCisgICAgZnVuY3Rpb24gU3dpdGNo
Qm9vbGVhbkFjdGlvbih0cmlnZ2VyT3B0aW9ucywgdGFyZ2V0LCBwcm9wZXJ0eVBhdGgsIGNvbmRp
dGlvbikgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0cmlnZ2VyT3B0
aW9ucywgY29uZGl0aW9uKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5wcm9wZXJ0eVBhdGggPSBw
cm9wZXJ0eVBhdGg7CisgICAgICAgIF90aGlzLl90YXJnZXQgPSBfdGhpcy5fZWZmZWN0aXZlVGFy
Z2V0ID0gdGFyZ2V0OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKiBAaGlk
ZGVuICovCisgICAgU3dpdGNoQm9vbGVhbkFjdGlvbi5wcm90b3R5cGUuX3ByZXBhcmUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2VmZmVjdGl2ZVRhcmdldCA9IHRoaXMuX2dldEVmZmVj
dGl2ZVRhcmdldCh0aGlzLl9lZmZlY3RpdmVUYXJnZXQsIHRoaXMucHJvcGVydHlQYXRoKTsKKyAg
ICAgICAgdGhpcy5fcHJvcGVydHkgPSB0aGlzLl9nZXRQcm9wZXJ0eSh0aGlzLnByb3BlcnR5UGF0
aCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBhY3Rpb24gdG9nZ2xlIHRo
ZSBib29sZWFuIHZhbHVlLgorICAgICAqLworICAgIFN3aXRjaEJvb2xlYW5BY3Rpb24ucHJvdG90
eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2VmZmVjdGl2ZVRhcmdl
dFt0aGlzLl9wcm9wZXJ0eV0gPSAhdGhpcy5fZWZmZWN0aXZlVGFyZ2V0W3RoaXMuX3Byb3BlcnR5
XTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGFjdGlvbnMgYW5kIGl0
cyByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbSBwYXJlbnQgZGVmaW5lcyB0aGUg
b2JqZWN0IHRvIHNlcmlhbGl6ZSBpbgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxpemVkIG9i
amVjdAorICAgICAqLworICAgIFN3aXRjaEJvb2xlYW5BY3Rpb24ucHJvdG90eXBlLnNlcmlhbGl6
ZSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUu
X3NlcmlhbGl6ZS5jYWxsKHRoaXMsIHsKKyAgICAgICAgICAgIG5hbWU6ICJTd2l0Y2hCb29sZWFu
QWN0aW9uIiwKKyAgICAgICAgICAgIHByb3BlcnRpZXM6IFsKKyAgICAgICAgICAgICAgICBfYWN0
aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFjdGlvbiJdLl9HZXRUYXJnZXRQcm9w
ZXJ0eSh0aGlzLl90YXJnZXQpLAorICAgICAgICAgICAgICAgIHsgbmFtZTogInByb3BlcnR5UGF0
aCIsIHZhbHVlOiB0aGlzLnByb3BlcnR5UGF0aCB9CisgICAgICAgICAgICBdCisgICAgICAgIH0s
IHBhcmVudCk7CisgICAgfTsKKyAgICByZXR1cm4gU3dpdGNoQm9vbGVhbkFjdGlvbjsKK30oX2Fj
dGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJBY3Rpb24iXSkpOworCisvKioKKyAq
IFRoaXMgZGVmaW5lcyBhbiBhY3Rpb24gcmVzcG9uc2libGUgdG8gc2V0IGEgdGhlIHN0YXRlIGZp
ZWxkIG9mIHRoZSB0YXJnZXQKKyAqICB0byBhIGRlc2lyZWQgdmFsdWUgb25jZSB0cmlnZ2VyZWQu
CisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rp
b25zCisgKi8KK3ZhciBTZXRTdGF0ZUFjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChf
c3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVu
ZHMiXShTZXRTdGF0ZUFjdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0
ZSB0aGUgYWN0aW9uCisgICAgICogQHBhcmFtIHRyaWdnZXJPcHRpb25zIGRlZmluZXMgdGhlIHRy
aWdnZXIgb3B0aW9ucworICAgICAqIEBwYXJhbSB0YXJnZXQgZGVmaW5lcyB0aGUgb2JqZWN0IGNv
bnRhaW5pbmcgdGhlIHN0YXRlIHByb3BlcnR5CisgICAgICogQHBhcmFtIHZhbHVlIGRlZmluZXMg
dGhlIHZhbHVlIHRvIHN0b3JlIGluIHRoZSBzdGF0ZSBmaWVsZAorICAgICAqIEBwYXJhbSBjb25k
aXRpb24gZGVmaW5lcyB0aGUgdHJpZ2dlciByZWxhdGVkIGNvbmRpdGlvbnMKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBTZXRTdGF0ZUFjdGlvbih0cmlnZ2VyT3B0aW9ucywgdGFyZ2V0LCB2YWx1ZSwg
Y29uZGl0aW9uKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHRyaWdn
ZXJPcHRpb25zLCBjb25kaXRpb24pIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnZhbHVlID0gdmFs
dWU7CisgICAgICAgIF90aGlzLl90YXJnZXQgPSB0YXJnZXQ7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgLyoqCisgICAgICogRXhlY3V0ZSB0aGUgYWN0aW9uIGFuZCBzdG9yZSB0
aGUgdmFsdWUgb24gdGhlIHRhcmdldCBzdGF0ZSBwcm9wZXJ0eS4KKyAgICAgKi8KKyAgICBTZXRT
dGF0ZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy5fdGFyZ2V0LnN0YXRlID0gdGhpcy52YWx1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
cmlhbGl6ZXMgdGhlIGFjdGlvbnMgYW5kIGl0cyByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgICAq
IEBwYXJhbSBwYXJlbnQgZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSBpbgorICAgICAq
IEByZXR1cm5zIHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIFNldFN0YXRlQWN0
aW9uLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAocGFyZW50KSB7CisgICAgICAgIHJl
dHVybiBfc3VwZXIucHJvdG90eXBlLl9zZXJpYWxpemUuY2FsbCh0aGlzLCB7CisgICAgICAgICAg
ICBuYW1lOiAiU2V0U3RhdGVBY3Rpb24iLAorICAgICAgICAgICAgcHJvcGVydGllczogWworICAg
ICAgICAgICAgICAgIF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0aW9u
Il0uX0dldFRhcmdldFByb3BlcnR5KHRoaXMuX3RhcmdldCksCisgICAgICAgICAgICAgICAgeyBu
YW1lOiAidmFsdWUiLCB2YWx1ZTogdGhpcy52YWx1ZSB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0sIHBhcmVudCk7CisgICAgfTsKKyAgICByZXR1cm4gU2V0U3RhdGVBY3Rpb247Cit9KF9hY3Rp
b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0aW9uIl0pKTsKKworLyoqCisgKiBU
aGlzIGRlZmluZXMgYW4gYWN0aW9uIHJlc3BvbnNpYmxlIHRvIHNldCBhIHByb3BlcnR5IG9mIHRo
ZSB0YXJnZXQKKyAqICB0byBhIGRlc2lyZWQgdmFsdWUgb25jZSB0cmlnZ2VyZWQuCisgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zCisgKi8K
K3ZhciBTZXRWYWx1ZUFjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShTZXRW
YWx1ZUFjdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZSB0aGUgYWN0
aW9uCisgICAgICogQHBhcmFtIHRyaWdnZXJPcHRpb25zIGRlZmluZXMgdGhlIHRyaWdnZXIgb3B0
aW9ucworICAgICAqIEBwYXJhbSB0YXJnZXQgZGVmaW5lcyB0aGUgb2JqZWN0IGNvbnRhaW5pbmcg
dGhlIHByb3BlcnR5CisgICAgICogQHBhcmFtIHByb3BlcnR5UGF0aCBkZWZpbmVzIHRoZSBwYXRo
IG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQgaW4gdGhlIHRhcmdldAorICAgICAqIEBwYXJhbSB2YWx1
ZSBkZWZpbmVzIHRoZSB2YWx1ZSB0byBzZXQgaW4gdGhlIHByb3BlcnR5CisgICAgICogQHBhcmFt
IGNvbmRpdGlvbiBkZWZpbmVzIHRoZSB0cmlnZ2VyIHJlbGF0ZWQgY29uZGl0aW9ucworICAgICAq
LworICAgIGZ1bmN0aW9uIFNldFZhbHVlQWN0aW9uKHRyaWdnZXJPcHRpb25zLCB0YXJnZXQsIHBy
b3BlcnR5UGF0aCwgdmFsdWUsIGNvbmRpdGlvbikgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3Vw
ZXIuY2FsbCh0aGlzLCB0cmlnZ2VyT3B0aW9ucywgY29uZGl0aW9uKSB8fCB0aGlzOworICAgICAg
ICBfdGhpcy5wcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGg7CisgICAgICAgIF90aGlzLnZhbHVl
ID0gdmFsdWU7CisgICAgICAgIF90aGlzLl90YXJnZXQgPSBfdGhpcy5fZWZmZWN0aXZlVGFyZ2V0
ID0gdGFyZ2V0OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVu
ICovCisgICAgU2V0VmFsdWVBY3Rpb24ucHJvdG90eXBlLl9wcmVwYXJlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB0aGlzLl9lZmZlY3RpdmVUYXJnZXQgPSB0aGlzLl9nZXRFZmZlY3RpdmVUYXJn
ZXQodGhpcy5fZWZmZWN0aXZlVGFyZ2V0LCB0aGlzLnByb3BlcnR5UGF0aCk7CisgICAgICAgIHRo
aXMuX3Byb3BlcnR5ID0gdGhpcy5fZ2V0UHJvcGVydHkodGhpcy5wcm9wZXJ0eVBhdGgpOworICAg
IH07CisgICAgLyoqCisgICAgICogRXhlY3V0ZSB0aGUgYWN0aW9uIGFuZCBzZXQgdGhlIHRhcmdl
dHRlZCBwcm9wZXJ0eSB0byB0aGUgZGVzaXJlZCB2YWx1ZS4KKyAgICAgKi8KKyAgICBTZXRWYWx1
ZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5f
ZWZmZWN0aXZlVGFyZ2V0W3RoaXMuX3Byb3BlcnR5XSA9IHRoaXMudmFsdWU7CisgICAgICAgIGlm
ICh0aGlzLl90YXJnZXQubWFya0FzRGlydHkpIHsKKyAgICAgICAgICAgIHRoaXMuX3RhcmdldC5t
YXJrQXNEaXJ0eSh0aGlzLl9wcm9wZXJ0eSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNlcmlhbGl6ZXMgdGhlIGFjdGlvbnMgYW5kIGl0cyByZWxhdGVkIGluZm9ybWF0aW9u
LgorICAgICAqIEBwYXJhbSBwYXJlbnQgZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSBp
bgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIFNl
dFZhbHVlQWN0aW9uLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAocGFyZW50KSB7Cisg
ICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl9zZXJpYWxpemUuY2FsbCh0aGlzLCB7Cisg
ICAgICAgICAgICBuYW1lOiAiU2V0VmFsdWVBY3Rpb24iLAorICAgICAgICAgICAgcHJvcGVydGll
czogWworICAgICAgICAgICAgICAgIF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siQWN0aW9uIl0uX0dldFRhcmdldFByb3BlcnR5KHRoaXMuX3RhcmdldCksCisgICAgICAgICAg
ICAgICAgeyBuYW1lOiAicHJvcGVydHlQYXRoIiwgdmFsdWU6IHRoaXMucHJvcGVydHlQYXRoIH0s
CisgICAgICAgICAgICAgICAgeyBuYW1lOiAidmFsdWUiLCB2YWx1ZTogX2FjdGlvbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJBY3Rpb24iXS5fU2VyaWFsaXplVmFsdWVBc1N0cmluZyh0
aGlzLnZhbHVlKSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sIHBhcmVudCk7CisgICAgfTsK
KyAgICByZXR1cm4gU2V0VmFsdWVBY3Rpb247Cit9KF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siQWN0aW9uIl0pKTsKKworLyoqCisgKiBUaGlzIGRlZmluZXMgYW4gYWN0aW9u
IHJlc3BvbnNpYmxlIHRvIGluY3JlbWVudCB0aGUgdGFyZ2V0IHZhbHVlCisgKiAgdG8gYSBkZXNp
cmVkIHZhbHVlIG9uY2UgdHJpZ2dlcmVkLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucworICovCit2YXIgSW5jcmVtZW50VmFsdWVBY3Rp
b24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oSW5jcmVtZW50VmFsdWVBY3Rpb24s
IF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGUgdGhlIGFjdGlvbgorICAgICAq
IEBwYXJhbSB0cmlnZ2VyT3B0aW9ucyBkZWZpbmVzIHRoZSB0cmlnZ2VyIG9wdGlvbnMKKyAgICAg
KiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgdGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBwcm9wZXJ0
eQorICAgICAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggZGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgcHJv
cGVydHkgdG8gaW5jcmVtZW50IGluIHRoZSB0YXJnZXQKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVm
aW5lcyB0aGUgdmFsdWUgdmFsdWUgd2Ugc2hvdWxkIGluY3JlbWVudCB0aGUgcHJvcGVydHkgYnkK
KyAgICAgKiBAcGFyYW0gY29uZGl0aW9uIGRlZmluZXMgdGhlIHRyaWdnZXIgcmVsYXRlZCBjb25k
aXRpb25zCisgICAgICovCisgICAgZnVuY3Rpb24gSW5jcmVtZW50VmFsdWVBY3Rpb24odHJpZ2dl
ck9wdGlvbnMsIHRhcmdldCwgcHJvcGVydHlQYXRoLCB2YWx1ZSwgY29uZGl0aW9uKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHRyaWdnZXJPcHRpb25zLCBjb25kaXRp
b24pIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnByb3BlcnR5UGF0aCA9IHByb3BlcnR5UGF0aDsK
KyAgICAgICAgX3RoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgX3RoaXMuX3RhcmdldCA9IF90
aGlzLl9lZmZlY3RpdmVUYXJnZXQgPSB0YXJnZXQ7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAg
ICB9CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBJbmNyZW1lbnRWYWx1ZUFjdGlvbi5wcm90b3R5
cGUuX3ByZXBhcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2VmZmVjdGl2ZVRhcmdl
dCA9IHRoaXMuX2dldEVmZmVjdGl2ZVRhcmdldCh0aGlzLl9lZmZlY3RpdmVUYXJnZXQsIHRoaXMu
cHJvcGVydHlQYXRoKTsKKyAgICAgICAgdGhpcy5fcHJvcGVydHkgPSB0aGlzLl9nZXRQcm9wZXJ0
eSh0aGlzLnByb3BlcnR5UGF0aCk7CisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fZWZmZWN0aXZl
VGFyZ2V0W3RoaXMuX3Byb3BlcnR5XSAhPT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgIF9NaXNj
X2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCJXYXJu
aW5nOiBJbmNyZW1lbnRWYWx1ZUFjdGlvbiBjYW4gb25seSBiZSB1c2VkIHdpdGggbnVtYmVyIHZh
bHVlcyIpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBh
Y3Rpb24gYW5kIGluY3JlbWVudCB0aGUgdGFyZ2V0IG9mIHRoZSB2YWx1ZSBhbW91bnQuCisgICAg
ICovCisgICAgSW5jcmVtZW50VmFsdWVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRoaXMuX2VmZmVjdGl2ZVRhcmdldFt0aGlzLl9wcm9wZXJ0eV0gKz0g
dGhpcy52YWx1ZTsKKyAgICAgICAgaWYgKHRoaXMuX3RhcmdldC5tYXJrQXNEaXJ0eSkgeworICAg
ICAgICAgICAgdGhpcy5fdGFyZ2V0Lm1hcmtBc0RpcnR5KHRoaXMuX3Byb3BlcnR5KTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgYWN0aW9ucyBhbmQg
aXRzIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtIHBhcmVudCBkZWZpbmVzIHRo
ZSBvYmplY3QgdG8gc2VyaWFsaXplIGluCisgICAgICogQHJldHVybnMgdGhlIHNlcmlhbGl6ZWQg
b2JqZWN0CisgICAgICovCisgICAgSW5jcmVtZW50VmFsdWVBY3Rpb24ucHJvdG90eXBlLnNlcmlh
bGl6ZSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5
cGUuX3NlcmlhbGl6ZS5jYWxsKHRoaXMsIHsKKyAgICAgICAgICAgIG5hbWU6ICJJbmNyZW1lbnRW
YWx1ZUFjdGlvbiIsCisgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbCisgICAgICAgICAgICAgICAg
X2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJBY3Rpb24iXS5fR2V0VGFyZ2V0
UHJvcGVydHkodGhpcy5fdGFyZ2V0KSwKKyAgICAgICAgICAgICAgICB7IG5hbWU6ICJwcm9wZXJ0
eVBhdGgiLCB2YWx1ZTogdGhpcy5wcm9wZXJ0eVBhdGggfSwKKyAgICAgICAgICAgICAgICB7IG5h
bWU6ICJ2YWx1ZSIsIHZhbHVlOiBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkFjdGlvbiJdLl9TZXJpYWxpemVWYWx1ZUFzU3RyaW5nKHRoaXMudmFsdWUpIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfSwgcGFyZW50KTsKKyAgICB9OworICAgIHJldHVybiBJbmNyZW1lbnRW
YWx1ZUFjdGlvbjsKK30oX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJBY3Rp
b24iXSkpOworCisvKioKKyAqIFRoaXMgZGVmaW5lcyBhbiBhY3Rpb24gcmVzcG9uc2libGUgdG8g
c3RhcnQgYW4gYW5pbWF0aW9uIG9uY2UgdHJpZ2dlcmVkLgorICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucworICovCit2YXIgUGxheUFuaW1h
dGlvbkFjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShQbGF5QW5pbWF0aW9u
QWN0aW9uLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIHRoZSBhY3Rpb24K
KyAgICAgKiBAcGFyYW0gdHJpZ2dlck9wdGlvbnMgZGVmaW5lcyB0aGUgdHJpZ2dlciBvcHRpb25z
CisgICAgICogQHBhcmFtIHRhcmdldCBkZWZpbmVzIHRoZSB0YXJnZXQgYW5pbWF0aW9uIG9yIGFu
aW1hdGlvbiBuYW1lCisgICAgICogQHBhcmFtIGZyb20gZGVmaW5lcyBmcm9tIHdoZXJlIHRoZSBh
bmltYXRpb24gc2hvdWxkIHN0YXJ0IChhbmltYXRpb24gZnJhbWUpCisgICAgICogQHBhcmFtIGVu
ZCBkZWZpbmVzIHdoZXJlIHRoZSBhbmltYXRpb24gc2hvdWxkIHN0b3AgKGFuaW1hdGlvbiBmcmFt
ZSkKKyAgICAgKiBAcGFyYW0gbG9vcCBkZWZpbmVzIGlmIHRoZSBhbmltYXRpb24gc2hvdWxkIGxv
b3Agb3Igc3RvcCBhZnRlciB0aGUgZmlyc3QgcGxheQorICAgICAqIEBwYXJhbSBjb25kaXRpb24g
ZGVmaW5lcyB0aGUgdHJpZ2dlciByZWxhdGVkIGNvbmRpdGlvbnMKKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBQbGF5QW5pbWF0aW9uQWN0aW9uKHRyaWdnZXJPcHRpb25zLCB0YXJnZXQsIGZyb20sIHRv
LCBsb29wLCBjb25kaXRpb24pIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgdHJpZ2dlck9wdGlvbnMsIGNvbmRpdGlvbikgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuZnJv
bSA9IGZyb207CisgICAgICAgIF90aGlzLnRvID0gdG87CisgICAgICAgIF90aGlzLmxvb3AgPSBs
b29wOworICAgICAgICBfdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICByZXR1cm4gX3Ro
aXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgUGxheUFuaW1hdGlvbkFjdGlvbi5w
cm90b3R5cGUuX3ByZXBhcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBFeGVjdXRlIHRoZSBhY3Rpb24gYW5kIHBsYXkgdGhlIGFuaW1hdGlvbi4KKyAgICAgKi8KKyAg
ICBQbGF5QW5pbWF0aW9uQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9hY3Rpb25NYW5hZ2VyLmdldFNjZW5lKCk7CisgICAg
ICAgIHNjZW5lLmJlZ2luQW5pbWF0aW9uKHRoaXMuX3RhcmdldCwgdGhpcy5mcm9tLCB0aGlzLnRv
LCB0aGlzLmxvb3ApOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgYWN0
aW9ucyBhbmQgaXRzIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtIHBhcmVudCBk
ZWZpbmVzIHRoZSBvYmplY3QgdG8gc2VyaWFsaXplIGluCisgICAgICogQHJldHVybnMgdGhlIHNl
cmlhbGl6ZWQgb2JqZWN0CisgICAgICovCisgICAgUGxheUFuaW1hdGlvbkFjdGlvbi5wcm90b3R5
cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKHBhcmVudCkgeworICAgICAgICByZXR1cm4gX3N1cGVy
LnByb3RvdHlwZS5fc2VyaWFsaXplLmNhbGwodGhpcywgeworICAgICAgICAgICAgbmFtZTogIlBs
YXlBbmltYXRpb25BY3Rpb24iLAorICAgICAgICAgICAgcHJvcGVydGllczogWworICAgICAgICAg
ICAgICAgIF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0aW9uIl0uX0dl
dFRhcmdldFByb3BlcnR5KHRoaXMuX3RhcmdldCksCisgICAgICAgICAgICAgICAgeyBuYW1lOiAi
ZnJvbSIsIHZhbHVlOiBTdHJpbmcodGhpcy5mcm9tKSB9LAorICAgICAgICAgICAgICAgIHsgbmFt
ZTogInRvIiwgdmFsdWU6IFN0cmluZyh0aGlzLnRvKSB9LAorICAgICAgICAgICAgICAgIHsgbmFt
ZTogImxvb3AiLCB2YWx1ZTogX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJB
Y3Rpb24iXS5fU2VyaWFsaXplVmFsdWVBc1N0cmluZyh0aGlzLmxvb3ApIHx8IGZhbHNlIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwgcGFyZW50KTsKKyAgICB9OworICAgIHJldHVybiBQbGF5
QW5pbWF0aW9uQWN0aW9uOworfShfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkFjdGlvbiJdKSk7CisKKy8qKgorICogVGhpcyBkZWZpbmVzIGFuIGFjdGlvbiByZXNwb25zaWJs
ZSB0byBzdG9wIGFuIGFuaW1hdGlvbiBvbmNlIHRyaWdnZXJlZC4KKyAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMKKyAqLwordmFyIFN0b3BB
bmltYXRpb25BY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU3RvcEFuaW1h
dGlvbkFjdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZSB0aGUgYWN0
aW9uCisgICAgICogQHBhcmFtIHRyaWdnZXJPcHRpb25zIGRlZmluZXMgdGhlIHRyaWdnZXIgb3B0
aW9ucworICAgICAqIEBwYXJhbSB0YXJnZXQgZGVmaW5lcyB0aGUgdGFyZ2V0IGFuaW1hdGlvbiBv
ciBhbmltYXRpb24gbmFtZQorICAgICAqIEBwYXJhbSBjb25kaXRpb24gZGVmaW5lcyB0aGUgdHJp
Z2dlciByZWxhdGVkIGNvbmRpdGlvbnMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdG9wQW5pbWF0
aW9uQWN0aW9uKHRyaWdnZXJPcHRpb25zLCB0YXJnZXQsIGNvbmRpdGlvbikgeworICAgICAgICB2
YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0cmlnZ2VyT3B0aW9ucywgY29uZGl0aW9uKSB8
fCB0aGlzOworICAgICAgICBfdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICByZXR1cm4g
X3RoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgU3RvcEFuaW1hdGlvbkFjdGlv
bi5wcm90b3R5cGUuX3ByZXBhcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBFeGVjdXRlIHRoZSBhY3Rpb24gYW5kIHN0b3AgdGhlIGFuaW1hdGlvbi4KKyAgICAgKi8K
KyAgICBTdG9wQW5pbWF0aW9uQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9hY3Rpb25NYW5hZ2VyLmdldFNjZW5lKCk7Cisg
ICAgICAgIHNjZW5lLnN0b3BBbmltYXRpb24odGhpcy5fdGFyZ2V0KTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGFjdGlvbnMgYW5kIGl0cyByZWxhdGVkIGluZm9ybWF0
aW9uLgorICAgICAqIEBwYXJhbSBwYXJlbnQgZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHNlcmlhbGl6
ZSBpbgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAg
IFN0b3BBbmltYXRpb25BY3Rpb24ucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChwYXJl
bnQpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3NlcmlhbGl6ZS5jYWxsKHRo
aXMsIHsKKyAgICAgICAgICAgIG5hbWU6ICJTdG9wQW5pbWF0aW9uQWN0aW9uIiwKKyAgICAgICAg
ICAgIHByb3BlcnRpZXM6IFtfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFj
dGlvbiJdLl9HZXRUYXJnZXRQcm9wZXJ0eSh0aGlzLl90YXJnZXQpXQorICAgICAgICB9LCBwYXJl
bnQpOworICAgIH07CisgICAgcmV0dXJuIFN0b3BBbmltYXRpb25BY3Rpb247Cit9KF9hY3Rpb25f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0aW9uIl0pKTsKKworLyoqCisgKiBUaGlz
IGRlZmluZXMgYW4gYWN0aW9uIHJlc3BvbnNpYmxlIHRoYXQgZG9lcyBub3RoaW5nIG9uY2UgdHJp
Z2dlcmVkLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191
c2VfYWN0aW9ucworICovCit2YXIgRG9Ob3RoaW5nQWN0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKERvTm90aGluZ0FjdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJ
bnN0YW50aWF0ZSB0aGUgYWN0aW9uCisgICAgICogQHBhcmFtIHRyaWdnZXJPcHRpb25zIGRlZmlu
ZXMgdGhlIHRyaWdnZXIgb3B0aW9ucworICAgICAqIEBwYXJhbSBjb25kaXRpb24gZGVmaW5lcyB0
aGUgdHJpZ2dlciByZWxhdGVkIGNvbmRpdGlvbnMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBEb05v
dGhpbmdBY3Rpb24odHJpZ2dlck9wdGlvbnMsIGNvbmRpdGlvbikgeworICAgICAgICBpZiAodHJp
Z2dlck9wdGlvbnMgPT09IHZvaWQgMCkgeyB0cmlnZ2VyT3B0aW9ucyA9IF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb25zdGFudHMiXS5BQ1RJT05fTm90
aGluZ1RyaWdnZXI7IH0KKyAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIHRyaWdnZXJP
cHRpb25zLCBjb25kaXRpb24pIHx8IHRoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEV4ZWN1
dGUgdGhlIGFjdGlvbiBhbmQgZG8gbm90aGluZy4KKyAgICAgKi8KKyAgICBEb05vdGhpbmdBY3Rp
b24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXJpYWxpemVzIHRoZSBhY3Rpb25zIGFuZCBpdHMgcmVsYXRlZCBpbmZvcm1hdGlvbi4K
KyAgICAgKiBAcGFyYW0gcGFyZW50IGRlZmluZXMgdGhlIG9iamVjdCB0byBzZXJpYWxpemUgaW4K
KyAgICAgKiBAcmV0dXJucyB0aGUgc2VyaWFsaXplZCBvYmplY3QKKyAgICAgKi8KKyAgICBEb05v
dGhpbmdBY3Rpb24ucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAg
ICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3NlcmlhbGl6ZS5jYWxsKHRoaXMsIHsKKyAg
ICAgICAgICAgIG5hbWU6ICJEb05vdGhpbmdBY3Rpb24iLAorICAgICAgICAgICAgcHJvcGVydGll
czogW10KKyAgICAgICAgfSwgcGFyZW50KTsKKyAgICB9OworICAgIHJldHVybiBEb05vdGhpbmdB
Y3Rpb247Cit9KF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0aW9uIl0p
KTsKKworLyoqCisgKiBUaGlzIGRlZmluZXMgYW4gYWN0aW9uIHJlc3BvbnNpYmxlIHRvIHRyaWdn
ZXIgc2V2ZXJhbCBhY3Rpb25zIG9uY2UgdHJpZ2dlcmVkLgorICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucworICovCit2YXIgQ29tYmluZUFj
dGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShDb21iaW5lQWN0aW9uLCBfc3Vw
ZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIHRoZSBhY3Rpb24KKyAgICAgKiBAcGFy
YW0gdHJpZ2dlck9wdGlvbnMgZGVmaW5lcyB0aGUgdHJpZ2dlciBvcHRpb25zCisgICAgICogQHBh
cmFtIGNoaWxkcmVuIGRlZmluZXMgdGhlIGxpc3Qgb2YgYWdncmVnYXRlZCBhbmltYXRpb25zIHRv
IHJ1bgorICAgICAqIEBwYXJhbSBjb25kaXRpb24gZGVmaW5lcyB0aGUgdHJpZ2dlciByZWxhdGVk
IGNvbmRpdGlvbnMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDb21iaW5lQWN0aW9uKHRyaWdnZXJP
cHRpb25zLCBjaGlsZHJlbiwgY29uZGl0aW9uKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIHRyaWdnZXJPcHRpb25zLCBjb25kaXRpb24pIHx8IHRoaXM7CisgICAgICAg
IF90aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9
CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBDb21iaW5lQWN0aW9uLnByb3RvdHlwZS5fcHJlcGFy
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRo
aXMuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB0aGlzLmNoaWxkcmVu
W2luZGV4XS5fYWN0aW9uTWFuYWdlciA9IHRoaXMuX2FjdGlvbk1hbmFnZXI7CisgICAgICAgICAg
ICB0aGlzLmNoaWxkcmVuW2luZGV4XS5fcHJlcGFyZSgpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBhY3Rpb24gYW5kIGV4ZWN1dGVzIGFsbCB0aGUgYWdn
cmVnYXRlZCBhY3Rpb25zLgorICAgICAqLworICAgIENvbWJpbmVBY3Rpb24ucHJvdG90eXBlLmV4
ZWN1dGUgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdGhpcy5j
aGlsZHJlbltpbmRleF0uZXhlY3V0ZShldnQpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTZXJpYWxpemVzIHRoZSBhY3Rpb25zIGFuZCBpdHMgcmVsYXRlZCBpbmZvcm1hdGlv
bi4KKyAgICAgKiBAcGFyYW0gcGFyZW50IGRlZmluZXMgdGhlIG9iamVjdCB0byBzZXJpYWxpemUg
aW4KKyAgICAgKiBAcmV0dXJucyB0aGUgc2VyaWFsaXplZCBvYmplY3QKKyAgICAgKi8KKyAgICBD
b21iaW5lQWN0aW9uLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAocGFyZW50KSB7Cisg
ICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX3N1cGVyLnByb3RvdHlwZS5fc2VyaWFs
aXplLmNhbGwodGhpcywgeworICAgICAgICAgICAgbmFtZTogIkNvbWJpbmVBY3Rpb24iLAorICAg
ICAgICAgICAgcHJvcGVydGllczogW10sCisgICAgICAgICAgICBjb21iaW5lOiBbXQorICAgICAg
ICB9LCBwYXJlbnQpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4u
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29tYmluZS5w
dXNoKHRoaXMuY2hpbGRyZW5baV0uc2VyaWFsaXplKG51bGwpKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIHJldHVybiBDb21iaW5l
QWN0aW9uOworfShfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFjdGlvbiJd
KSk7CisKKy8qKgorICogVGhpcyBkZWZpbmVzIGFuIGFjdGlvbiByZXNwb25zaWJsZSB0byBydW4g
Y29kZSAoZXh0ZXJuYWwgZXZlbnQpIG9uY2UgdHJpZ2dlcmVkLgorICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucworICovCit2YXIgRXhlY3V0
ZUNvZGVBY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oRXhlY3V0ZUNvZGVB
Y3Rpb24sIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGUgdGhlIGFjdGlvbgor
ICAgICAqIEBwYXJhbSB0cmlnZ2VyT3B0aW9ucyBkZWZpbmVzIHRoZSB0cmlnZ2VyIG9wdGlvbnMK
KyAgICAgKiBAcGFyYW0gZnVuYyBkZWZpbmVzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBydW4K
KyAgICAgKiBAcGFyYW0gY29uZGl0aW9uIGRlZmluZXMgdGhlIHRyaWdnZXIgcmVsYXRlZCBjb25k
aXRpb25zCisgICAgICovCisgICAgZnVuY3Rpb24gRXhlY3V0ZUNvZGVBY3Rpb24odHJpZ2dlck9w
dGlvbnMsIGZ1bmMsIGNvbmRpdGlvbikgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2Fs
bCh0aGlzLCB0cmlnZ2VyT3B0aW9ucywgY29uZGl0aW9uKSB8fCB0aGlzOworICAgICAgICBfdGhp
cy5mdW5jID0gZnVuYzsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBFeGVjdXRlIHRoZSBhY3Rpb24gYW5kIHJ1biB0aGUgYXR0YWNoZWQgY29kZS4KKyAgICAg
Ki8KKyAgICBFeGVjdXRlQ29kZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChl
dnQpIHsKKyAgICAgICAgdGhpcy5mdW5jKGV2dCk7CisgICAgfTsKKyAgICByZXR1cm4gRXhlY3V0
ZUNvZGVBY3Rpb247Cit9KF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0
aW9uIl0pKTsKKworLyoqCisgKiBUaGlzIGRlZmluZXMgYW4gYWN0aW9uIHJlc3BvbnNpYmxlIHRv
IHNldCB0aGUgcGFyZW50IHByb3BlcnR5IG9mIHRoZSB0YXJnZXQgb25jZSB0cmlnZ2VyZWQuCisg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25z
CisgKi8KK3ZhciBTZXRQYXJlbnRBY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1
cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRz
Il0oU2V0UGFyZW50QWN0aW9uLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRl
IHRoZSBhY3Rpb24KKyAgICAgKiBAcGFyYW0gdHJpZ2dlck9wdGlvbnMgZGVmaW5lcyB0aGUgdHJp
Z2dlciBvcHRpb25zCisgICAgICogQHBhcmFtIHRhcmdldCBkZWZpbmVzIHRoZSB0YXJnZXQgY29u
dGFpbmluZyB0aGUgcGFyZW50IHByb3BlcnR5CisgICAgICogQHBhcmFtIHBhcmVudCBkZWZpbmVz
IGZyb20gd2hlcmUgdGhlIGFuaW1hdGlvbiBzaG91bGQgc3RhcnQgKGFuaW1hdGlvbiBmcmFtZSkK
KyAgICAgKiBAcGFyYW0gY29uZGl0aW9uIGRlZmluZXMgdGhlIHRyaWdnZXIgcmVsYXRlZCBjb25k
aXRpb25zCisgICAgICovCisgICAgZnVuY3Rpb24gU2V0UGFyZW50QWN0aW9uKHRyaWdnZXJPcHRp
b25zLCB0YXJnZXQsIHBhcmVudCwgY29uZGl0aW9uKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9z
dXBlci5jYWxsKHRoaXMsIHRyaWdnZXJPcHRpb25zLCBjb25kaXRpb24pIHx8IHRoaXM7CisgICAg
ICAgIF90aGlzLl90YXJnZXQgPSB0YXJnZXQ7CisgICAgICAgIF90aGlzLl9wYXJlbnQgPSBwYXJl
bnQ7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBTZXRQYXJlbnRBY3Rpb24ucHJvdG90eXBlLl9wcmVwYXJlID0gZnVuY3Rpb24gKCkgeworICAg
IH07CisgICAgLyoqCisgICAgICogRXhlY3V0ZSB0aGUgYWN0aW9uIGFuZCBzZXQgdGhlIHBhcmVu
dCBwcm9wZXJ0eS4KKyAgICAgKi8KKyAgICBTZXRQYXJlbnRBY3Rpb24ucHJvdG90eXBlLmV4ZWN1
dGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl90YXJnZXQucGFyZW50ID09PSB0
aGlzLl9wYXJlbnQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2
YXIgaW52ZXJ0UGFyZW50V29ybGRNYXRyaXggPSB0aGlzLl9wYXJlbnQuZ2V0V29ybGRNYXRyaXgo
KS5jbG9uZSgpOworICAgICAgICBpbnZlcnRQYXJlbnRXb3JsZE1hdHJpeC5pbnZlcnQoKTsKKyAg
ICAgICAgdGhpcy5fdGFyZ2V0LnBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlcyh0aGlz
Ll90YXJnZXQucG9zaXRpb24sIGludmVydFBhcmVudFdvcmxkTWF0cml4KTsKKyAgICAgICAgdGhp
cy5fdGFyZ2V0LnBhcmVudCA9IHRoaXMuX3BhcmVudDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFNlcmlhbGl6ZXMgdGhlIGFjdGlvbnMgYW5kIGl0cyByZWxhdGVkIGluZm9ybWF0aW9uLgorICAg
ICAqIEBwYXJhbSBwYXJlbnQgZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSBpbgorICAg
ICAqIEByZXR1cm5zIHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIFNldFBhcmVu
dEFjdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKHBhcmVudCkgeworICAgICAg
ICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fc2VyaWFsaXplLmNhbGwodGhpcywgeworICAgICAg
ICAgICAgbmFtZTogIlNldFBhcmVudEFjdGlvbiIsCisgICAgICAgICAgICBwcm9wZXJ0aWVzOiBb
CisgICAgICAgICAgICAgICAgX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJB
Y3Rpb24iXS5fR2V0VGFyZ2V0UHJvcGVydHkodGhpcy5fdGFyZ2V0KSwKKyAgICAgICAgICAgICAg
ICBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFjdGlvbiJdLl9HZXRUYXJn
ZXRQcm9wZXJ0eSh0aGlzLl9wYXJlbnQpLAorICAgICAgICAgICAgXQorICAgICAgICB9LCBwYXJl
bnQpOworICAgIH07CisgICAgcmV0dXJuIFNldFBhcmVudEFjdGlvbjsKK30oX2FjdGlvbl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJBY3Rpb24iXSkpOworCitfTWlzY190eXBlU3RvcmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBl
c1siQkFCWUxPTi5TZXRQYXJlbnRBY3Rpb24iXSA9IFNldFBhcmVudEFjdGlvbjsKK19NaXNjX3R5
cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0
ZXJlZFR5cGVzWyJCQUJZTE9OLkV4ZWN1dGVDb2RlQWN0aW9uIl0gPSBFeGVjdXRlQ29kZUFjdGlv
bjsKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJfVHlwZVN0
b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLkRvTm90aGluZ0FjdGlvbiJdID0gRG9Ob3Ro
aW5nQWN0aW9uOworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19b
Il9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uU3RvcEFuaW1hdGlvbkFjdGlv
biJdID0gU3RvcEFuaW1hdGlvbkFjdGlvbjsKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLlBs
YXlBbmltYXRpb25BY3Rpb24iXSA9IFBsYXlBbmltYXRpb25BY3Rpb247CitfTWlzY190eXBlU3Rv
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRU
eXBlc1siQkFCWUxPTi5JbmNyZW1lbnRWYWx1ZUFjdGlvbiJdID0gSW5jcmVtZW50VmFsdWVBY3Rp
b247CitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siX1R5cGVT
dG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5TZXRWYWx1ZUFjdGlvbiJdID0gU2V0VmFs
dWVBY3Rpb247CitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
X1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5TZXRTdGF0ZUFjdGlvbiJdID0g
U2V0U3RhdGVBY3Rpb247CitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5TZXRQYXJlbnRBY3Rp
b24iXSA9IFNldFBhcmVudEFjdGlvbjsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQWN0aW9u
cy9kaXJlY3RBdWRpb0FjdGlvbnMudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9BY3Rpb25zL2RpcmVjdEF1ZGlvQWN0aW9ucy50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogUGxheVNvdW5kQWN0aW9uLCBTdG9wU291bmRBY3Rpb24gKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxheVNvdW5kQWN0aW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBQbGF5U291bmRBY3Rpb247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RvcFNv
dW5kQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdG9wU291bmRBY3Rpb247IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGli
L3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9u
ICovICIuL0FjdGlvbnMvYWN0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOwor
CisKKworLyoqCisgKiBUaGlzIGRlZmluZXMgYW4gYWN0aW9uIGhlbHBmdWwgdG8gcGxheSBhIGRl
ZmluZWQgc291bmQgb24gYSB0cmlnZ2VyZWQgYWN0aW9uLgorICovCit2YXIgUGxheVNvdW5kQWN0
aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFBsYXlTb3VuZEFjdGlvbiwgX3N1
cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZSB0aGUgYWN0aW9uCisgICAgICogQHBh
cmFtIHRyaWdnZXJPcHRpb25zIGRlZmluZXMgdGhlIHRyaWdnZXIgb3B0aW9ucworICAgICAqIEBw
YXJhbSBzb3VuZCBkZWZpbmVzIHRoZSBzb3VuZCB0byBwbGF5CisgICAgICogQHBhcmFtIGNvbmRp
dGlvbiBkZWZpbmVzIHRoZSB0cmlnZ2VyIHJlbGF0ZWQgY29uZGl0aW9ucworICAgICAqLworICAg
IGZ1bmN0aW9uIFBsYXlTb3VuZEFjdGlvbih0cmlnZ2VyT3B0aW9ucywgc291bmQsIGNvbmRpdGlv
bikgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0cmlnZ2VyT3B0aW9u
cywgY29uZGl0aW9uKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fc291bmQgPSBzb3VuZDsKKyAg
ICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBsYXlT
b3VuZEFjdGlvbi5wcm90b3R5cGUuX3ByZXBhcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBhY3Rpb24gYW5kIHBsYXkgdGhlIHNvdW5kLgorICAg
ICAqLworICAgIFBsYXlTb3VuZEFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKHRoaXMuX3NvdW5kICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
IHRoaXMuX3NvdW5kLnBsYXkoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
U2VyaWFsaXplcyB0aGUgYWN0aW9ucyBhbmQgaXRzIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgICAg
ICogQHBhcmFtIHBhcmVudCBkZWZpbmVzIHRoZSBvYmplY3QgdG8gc2VyaWFsaXplIGluCisgICAg
ICogQHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgb2JqZWN0CisgICAgICovCisgICAgUGxheVNvdW5k
QWN0aW9uLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAocGFyZW50KSB7CisgICAgICAg
IHJldHVybiBfc3VwZXIucHJvdG90eXBlLl9zZXJpYWxpemUuY2FsbCh0aGlzLCB7CisgICAgICAg
ICAgICBuYW1lOiAiUGxheVNvdW5kQWN0aW9uIiwKKyAgICAgICAgICAgIHByb3BlcnRpZXM6IFt7
IG5hbWU6ICJzb3VuZCIsIHZhbHVlOiB0aGlzLl9zb3VuZC5uYW1lIH1dCisgICAgICAgIH0sIHBh
cmVudCk7CisgICAgfTsKKyAgICByZXR1cm4gUGxheVNvdW5kQWN0aW9uOworfShfYWN0aW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFjdGlvbiJdKSk7CisKKy8qKgorICogVGhpcyBk
ZWZpbmVzIGFuIGFjdGlvbiBoZWxwZnVsIHRvIHN0b3AgYSBkZWZpbmVkIHNvdW5kIG9uIGEgdHJp
Z2dlcmVkIGFjdGlvbi4KKyAqLwordmFyIFN0b3BTb3VuZEFjdGlvbiA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShTdG9wU291bmRBY3Rpb24sIF9zdXBlcik7CisgICAgLyoqCisgICAg
ICogSW5zdGFudGlhdGUgdGhlIGFjdGlvbgorICAgICAqIEBwYXJhbSB0cmlnZ2VyT3B0aW9ucyBk
ZWZpbmVzIHRoZSB0cmlnZ2VyIG9wdGlvbnMKKyAgICAgKiBAcGFyYW0gc291bmQgZGVmaW5lcyB0
aGUgc291bmQgdG8gc3RvcAorICAgICAqIEBwYXJhbSBjb25kaXRpb24gZGVmaW5lcyB0aGUgdHJp
Z2dlciByZWxhdGVkIGNvbmRpdGlvbnMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdG9wU291bmRB
Y3Rpb24odHJpZ2dlck9wdGlvbnMsIHNvdW5kLCBjb25kaXRpb24pIHsKKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHJpZ2dlck9wdGlvbnMsIGNvbmRpdGlvbikgfHwgdGhp
czsKKyAgICAgICAgX3RoaXMuX3NvdW5kID0gc291bmQ7CisgICAgICAgIHJldHVybiBfdGhpczsK
KyAgICB9CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTdG9wU291bmRBY3Rpb24ucHJvdG90eXBl
Ll9wcmVwYXJlID0gZnVuY3Rpb24gKCkgeworICAgIH07CisgICAgLyoqCisgICAgICogRXhlY3V0
ZSB0aGUgYWN0aW9uIGFuZCBzdG9wIHRoZSBzb3VuZC4KKyAgICAgKi8KKyAgICBTdG9wU291bmRB
Y3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
Ll9zb3VuZCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICB0aGlzLl9zb3VuZC5zdG9wKCk7
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGFjdGlv
bnMgYW5kIGl0cyByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbSBwYXJlbnQgZGVm
aW5lcyB0aGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSBpbgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJp
YWxpemVkIG9iamVjdAorICAgICAqLworICAgIFN0b3BTb3VuZEFjdGlvbi5wcm90b3R5cGUuc2Vy
aWFsaXplID0gZnVuY3Rpb24gKHBhcmVudCkgeworICAgICAgICByZXR1cm4gX3N1cGVyLnByb3Rv
dHlwZS5fc2VyaWFsaXplLmNhbGwodGhpcywgeworICAgICAgICAgICAgbmFtZTogIlN0b3BTb3Vu
ZEFjdGlvbiIsCisgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbeyBuYW1lOiAic291bmQiLCB2YWx1
ZTogdGhpcy5fc291bmQubmFtZSB9XQorICAgICAgICB9LCBwYXJlbnQpOworICAgIH07CisgICAg
cmV0dXJuIFN0b3BTb3VuZEFjdGlvbjsKK30oX2FjdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJBY3Rpb24iXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5QbGF5U291
bmRBY3Rpb24iXSA9IFN0b3BTb3VuZEFjdGlvbjsKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9O
LlN0b3BTb3VuZEFjdGlvbiJdID0gU3RvcFNvdW5kQWN0aW9uOworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9BY3Rpb25zL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9BY3Rpb25zL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFic3RyYWN0QWN0aW9uTWFuYWdlciwg
QWN0aW9uLCBBY3Rpb25FdmVudCwgQWN0aW9uTWFuYWdlciwgQ29uZGl0aW9uLCBWYWx1ZUNvbmRp
dGlvbiwgUHJlZGljYXRlQ29uZGl0aW9uLCBTdGF0ZUNvbmRpdGlvbiwgU3dpdGNoQm9vbGVhbkFj
dGlvbiwgU2V0U3RhdGVBY3Rpb24sIFNldFZhbHVlQWN0aW9uLCBJbmNyZW1lbnRWYWx1ZUFjdGlv
biwgUGxheUFuaW1hdGlvbkFjdGlvbiwgU3RvcEFuaW1hdGlvbkFjdGlvbiwgRG9Ob3RoaW5nQWN0
aW9uLCBDb21iaW5lQWN0aW9uLCBFeGVjdXRlQ29kZUFjdGlvbiwgU2V0UGFyZW50QWN0aW9uLCBQ
bGF5U291bmRBY3Rpb24sIFN0b3BTb3VuZEFjdGlvbiwgSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Fic3RyYWN0QWN0
aW9uTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9hYnN0cmFjdEFjdGlvbk1hbmFnZXIgKi8gIi4vQWN0aW9ucy9hYnN0cmFjdEFj
dGlvbk1hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWJzdHJhY3RBY3Rpb25NYW5hZ2Vy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWJzdHJhY3RBY3Rpb25NYW5hZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkFic3RyYWN0QWN0aW9uTWFuYWdlciJdOyB9KTsKKworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9hY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9uICovICIuL0FjdGlvbnMvYWN0aW9uLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FjdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfYWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWN0aW9uRXZlbnQgKi8gIi4vQWN0aW9ucy9h
Y3Rpb25FdmVudC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBY3Rpb25FdmVudCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2FjdGlvbkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFj
dGlvbkV2ZW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbk1hbmFn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vYWN0aW9uTWFuYWdlciAqLyAiLi9BY3Rpb25zL2FjdGlvbk1hbmFnZXIudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQWN0aW9uTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FjdGlvbk1h
bmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWN0aW9uTWFuYWdlciJdOyB9KTsK
KworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25kaXRpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29uZGl0aW9uICovICIuL0Fj
dGlvbnMvY29uZGl0aW9uLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbmRpdGlvbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2NvbmRpdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJD
b25kaXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmFsdWVDb25kaXRpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9jb25kaXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
VmFsdWVDb25kaXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUHJlZGljYXRlQ29uZGl0
aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29uZGl0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlByZWRpY2F0ZUNvbmRpdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJT
dGF0ZUNvbmRpdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbmRpdGlvbl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJTdGF0ZUNvbmRpdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9kaXJlY3RBY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RpcmVjdEFjdGlvbnMgKi8gIi4vQWN0aW9ucy9k
aXJlY3RBY3Rpb25zLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN3aXRjaEJvb2xlYW5BY3Rpb24i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kaXJlY3RBY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlN3aXRjaEJvb2xlYW5BY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U2V0U3RhdGVBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kaXJlY3RBY3Rpb25zX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNldFN0YXRlQWN0aW9uIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlNldFZhbHVlQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGlyZWN0QWN0
aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTZXRWYWx1ZUFjdGlvbiJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJJbmNyZW1lbnRWYWx1ZUFjdGlvbiIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2RpcmVjdEFjdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW5jcmVt
ZW50VmFsdWVBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxheUFuaW1hdGlvbkFj
dGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RpcmVjdEFjdGlvbnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siUGxheUFuaW1hdGlvbkFjdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTdG9wQW5pbWF0aW9uQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGlyZWN0QWN0
aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTdG9wQW5pbWF0aW9uQWN0aW9uIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRvTm90aGluZ0FjdGlvbiIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2RpcmVjdEFjdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRG9Ob3Ro
aW5nQWN0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbWJpbmVBY3Rpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9kaXJlY3RBY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIkNvbWJpbmVBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRXhlY3V0ZUNvZGVB
Y3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kaXJlY3RBY3Rpb25zX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIkV4ZWN1dGVDb2RlQWN0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlNldFBhcmVudEFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RpcmVjdEFjdGlvbnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2V0UGFyZW50QWN0aW9uIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RpcmVjdEF1ZGlvQWN0aW9uc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kaXJlY3RBdWRpb0Fj
dGlvbnMgKi8gIi4vQWN0aW9ucy9kaXJlY3RBdWRpb0FjdGlvbnMudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiUGxheVNvdW5kQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGlyZWN0QXVkaW9B
Y3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBsYXlTb3VuZEFjdGlvbiJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTdG9wU291bmRBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9kaXJlY3RBdWRpb0FjdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siU3Rv
cFNvdW5kQWN0aW9uIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ludGVycG9s
YXRlVmFsdWVBY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vaW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiAqLyAiLi9BY3Rpb25zL2ludGVy
cG9sYXRlVmFsdWVBY3Rpb24udHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW50ZXJwb2xhdGVWYWx1
ZUFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ludGVycG9sYXRlVmFsdWVBY3Rpb25fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiJdOyB9KTsK
KworCisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQWN0aW9ucy9pbnRl
cnBvbGF0ZVZhbHVlQWN0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0FjdGlvbnMvaW50ZXJwb2xhdGVWYWx1ZUFjdGlv
bi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEludGVycG9sYXRlVmFsdWVBY3Rpb24gKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbjsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIu
ZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FjdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hY3Rpb24gKi8gIi4v
QWN0aW9ucy9hY3Rpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2Jz
ZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICov
ICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0Fu
aW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9BbmltYXRpb25zL2FuaW1hdGlvbiAqLyAiLi9BbmltYXRpb25z
L2FuaW1hdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9y
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisK
KworCisvKioKKyAqIFRoaXMgZGVmaW5lcyBhbiBhY3Rpb24gcmVzcG9uc2libGUgdG8gY2hhbmdl
IHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5CisgKiBieSBpbnRlcnBvbGF0aW5nIGJldHdlZW4gaXRz
IGN1cnJlbnQgdmFsdWUgYW5kIHRoZSBuZXdseSBzZXQgb25lIG9uY2UgdHJpZ2dlcmVkLgorICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucwor
ICovCit2YXIgSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShJbnRlcnBvbGF0ZVZhbHVlQWN0aW9uLCBfc3VwZXIpOworICAgIC8qKgorICAgICAq
IEluc3RhbnRpYXRlIHRoZSBhY3Rpb24KKyAgICAgKiBAcGFyYW0gdHJpZ2dlck9wdGlvbnMgZGVm
aW5lcyB0aGUgdHJpZ2dlciBvcHRpb25zCisgICAgICogQHBhcmFtIHRhcmdldCBkZWZpbmVzIHRo
ZSBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsdWUgdG8gaW50ZXJwb2xhdGUKKyAgICAgKiBAcGFy
YW0gcHJvcGVydHlQYXRoIGRlZmluZXMgdGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGluIHRoZSB0
YXJnZXQgb2JqZWN0CisgICAgICogQHBhcmFtIHZhbHVlIGRlZmluZXMgdGhlIHRhcmdldCB2YWx1
ZSBhdCB0aGUgZW5kIG9mIHRoZSBpbnRlcnBvbGF0aW9uCisgICAgICogQHBhcmFtIGR1cmF0aW9u
IGRlaW5lcyB0aGUgdGltZSBpdCB3aWxsIHRha2UgZm9yIHRoZSBwcm9wZXJ0eSB0byBpbnRlcnBv
bGF0ZSB0byB0aGUgdmFsdWUuCisgICAgICogQHBhcmFtIGNvbmRpdGlvbiBkZWZpbmVzIHRoZSB0
cmlnZ2VyIHJlbGF0ZWQgY29uZGl0aW9ucworICAgICAqIEBwYXJhbSBzdG9wT3RoZXJBbmltYXRp
b25zIGRlZmluZXMgaWYgdGhlIG90aGVyIHNjZW5lIGFuaW1hdGlvbnMgc2hvdWxkIGJlIHN0b3Bw
ZWQgd2hlbiB0aGUgYWN0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZAorICAgICAqIEBwYXJhbSBvbklu
dGVycG9sYXRpb25Eb25lIGRlZmluZXMgYSBjYWxsYmFjayByYWlzZWQgb25jZSB0aGUgaW50ZXJw
b2xhdGlvbiBhbmltYXRpb24gaGFzIGJlZW4gZG9uZQorICAgICAqLworICAgIGZ1bmN0aW9uIElu
dGVycG9sYXRlVmFsdWVBY3Rpb24odHJpZ2dlck9wdGlvbnMsIHRhcmdldCwgcHJvcGVydHlQYXRo
LCB2YWx1ZSwgZHVyYXRpb24sIGNvbmRpdGlvbiwgc3RvcE90aGVyQW5pbWF0aW9ucywgb25JbnRl
cnBvbGF0aW9uRG9uZSkgeworICAgICAgICBpZiAoZHVyYXRpb24gPT09IHZvaWQgMCkgeyBkdXJh
dGlvbiA9IDEwMDA7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHJp
Z2dlck9wdGlvbnMsIGNvbmRpdGlvbikgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZXMgdGhlIHRpbWUgaXQgd2lsbCB0YWtlIGZvciB0aGUgcHJvcGVydHkgdG8gaW50ZXJw
b2xhdGUgdG8gdGhlIHZhbHVlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZHVyYXRpb24g
PSAxMDAwOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSB0cmlnZ2VyZWQgb25j
ZSB0aGUgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gaGFzIGJlZW4gZG9uZS4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLm9uSW50ZXJwb2xhdGlvbkRvbmVPYnNlcnZhYmxlID0gbmV3IF9NaXNj
X29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7
CisgICAgICAgIF90aGlzLnByb3BlcnR5UGF0aCA9IHByb3BlcnR5UGF0aDsKKyAgICAgICAgX3Ro
aXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgX3RoaXMuZHVyYXRpb24gPSBkdXJhdGlvbjsKKyAg
ICAgICAgX3RoaXMuc3RvcE90aGVyQW5pbWF0aW9ucyA9IHN0b3BPdGhlckFuaW1hdGlvbnM7Cisg
ICAgICAgIF90aGlzLm9uSW50ZXJwb2xhdGlvbkRvbmUgPSBvbkludGVycG9sYXRpb25Eb25lOwor
ICAgICAgICBfdGhpcy5fdGFyZ2V0ID0gX3RoaXMuX2VmZmVjdGl2ZVRhcmdldCA9IHRhcmdldDsK
KyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIElu
dGVycG9sYXRlVmFsdWVBY3Rpb24ucHJvdG90eXBlLl9wcmVwYXJlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB0aGlzLl9lZmZlY3RpdmVUYXJnZXQgPSB0aGlzLl9nZXRFZmZlY3RpdmVUYXJnZXQo
dGhpcy5fZWZmZWN0aXZlVGFyZ2V0LCB0aGlzLnByb3BlcnR5UGF0aCk7CisgICAgICAgIHRoaXMu
X3Byb3BlcnR5ID0gdGhpcy5fZ2V0UHJvcGVydHkodGhpcy5wcm9wZXJ0eVBhdGgpOworICAgIH07
CisgICAgLyoqCisgICAgICogRXhlY3V0ZSB0aGUgYWN0aW9uIHN0YXJ0cyB0aGUgdmFsdWUgaW50
ZXJwb2xhdGlvbi4KKyAgICAgKi8KKyAgICBJbnRlcnBvbGF0ZVZhbHVlQWN0aW9uLnByb3RvdHlw
ZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICB2YXIgc2NlbmUgPSB0aGlzLl9hY3Rpb25NYW5hZ2VyLmdldFNjZW5lKCk7CisgICAgICAg
IHZhciBrZXlzID0gWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyYW1lOiAwLAor
ICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9lZmZlY3RpdmVUYXJnZXRbdGhpcy5fcHJvcGVy
dHldCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgZnJhbWU6IDEwMCwKKyAgICAg
ICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZQorICAgICAgICAgICAgfQorICAgICAgICBdOwor
ICAgICAgICB2YXIgZGF0YVR5cGU7CisgICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0g
Im51bWJlciIpIHsKKyAgICAgICAgICAgIGRhdGFUeXBlID0gX0FuaW1hdGlvbnNfYW5pbWF0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVf
RkxPQVQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9m
IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yMyJd
KSB7CisgICAgICAgICAgICBkYXRhVHlwZSA9IF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05UWVBFX0NPTE9SMzsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXSkgewor
ICAgICAgICAgICAgZGF0YVR5cGUgPSBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9WRUNUT1IzOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0cml4Il0pIHsKKyAgICAg
ICAgICAgIGRhdGFUeXBlID0gX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVfTUFUUklYOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUXVhdGVybmlvbiJdKSB7CisgICAgICAg
ICAgICBkYXRhVHlwZSA9IF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05UWVBFX1FVQVRFUk5JT047CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTG9nZ2VyIl0uV2FybigiSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbjog
VW5zdXBwb3J0ZWQgdHlwZSAoIiArIHR5cGVvZiB0aGlzLnZhbHVlICsgIikiKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgYW5pbWF0aW9uID0gbmV3IF9Bbmlt
YXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJBbmltYXRpb24i
XSgiSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiIsIHRoaXMuX3Byb3BlcnR5LCAxMDAgKiAoMTAwMC4w
IC8gdGhpcy5kdXJhdGlvbiksIGRhdGFUeXBlLCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OTE9PUE1PREVfQ09O
U1RBTlQpOworICAgICAgICBhbmltYXRpb24uc2V0S2V5cyhrZXlzKTsKKyAgICAgICAgaWYgKHRo
aXMuc3RvcE90aGVyQW5pbWF0aW9ucykgeworICAgICAgICAgICAgc2NlbmUuc3RvcEFuaW1hdGlv
bih0aGlzLl9lZmZlY3RpdmVUYXJnZXQpOworICAgICAgICB9CisgICAgICAgIHZhciB3cmFwcGVy
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMub25JbnRlcnBvbGF0aW9uRG9uZU9i
c2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKF90aGlzKTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5v
bkludGVycG9sYXRpb25Eb25lKSB7CisgICAgICAgICAgICAgICAgX3RoaXMub25JbnRlcnBvbGF0
aW9uRG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBzY2VuZS5iZWdp
bkRpcmVjdEFuaW1hdGlvbih0aGlzLl9lZmZlY3RpdmVUYXJnZXQsIFthbmltYXRpb25dLCAwLCAx
MDAsIGZhbHNlLCAxLCB3cmFwcGVyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6
ZXMgdGhlIGFjdGlvbnMgYW5kIGl0cyByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJh
bSBwYXJlbnQgZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSBpbgorICAgICAqIEByZXR1
cm5zIHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIEludGVycG9sYXRlVmFsdWVB
Y3Rpb24ucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAgICAgICAg
cmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3NlcmlhbGl6ZS5jYWxsKHRoaXMsIHsKKyAgICAgICAg
ICAgIG5hbWU6ICJJbnRlcnBvbGF0ZVZhbHVlQWN0aW9uIiwKKyAgICAgICAgICAgIHByb3BlcnRp
ZXM6IFsKKyAgICAgICAgICAgICAgICBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkFjdGlvbiJdLl9HZXRUYXJnZXRQcm9wZXJ0eSh0aGlzLl90YXJnZXQpLAorICAgICAgICAg
ICAgICAgIHsgbmFtZTogInByb3BlcnR5UGF0aCIsIHZhbHVlOiB0aGlzLnByb3BlcnR5UGF0aCB9
LAorICAgICAgICAgICAgICAgIHsgbmFtZTogInZhbHVlIiwgdmFsdWU6IF9hY3Rpb25fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWN0aW9uIl0uX1NlcmlhbGl6ZVZhbHVlQXNTdHJpbmco
dGhpcy52YWx1ZSkgfSwKKyAgICAgICAgICAgICAgICB7IG5hbWU6ICJkdXJhdGlvbiIsIHZhbHVl
OiBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFjdGlvbiJdLl9TZXJpYWxp
emVWYWx1ZUFzU3RyaW5nKHRoaXMuZHVyYXRpb24pIH0sCisgICAgICAgICAgICAgICAgeyBuYW1l
OiAic3RvcE90aGVyQW5pbWF0aW9ucyIsIHZhbHVlOiBfYWN0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkFjdGlvbiJdLl9TZXJpYWxpemVWYWx1ZUFzU3RyaW5nKHRoaXMuc3RvcE90
aGVyQW5pbWF0aW9ucykgfHwgZmFsc2UgfQorICAgICAgICAgICAgXQorICAgICAgICB9LCBwYXJl
bnQpOworICAgIH07CisgICAgcmV0dXJuIEludGVycG9sYXRlVmFsdWVBY3Rpb247Cit9KF9hY3Rp
b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWN0aW9uIl0pKTsKKworX01pc2NfdHlw
ZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIl9UeXBlU3RvcmUiXS5SZWdpc3Rl
cmVkVHlwZXNbIkJBQllMT04uSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiJdID0gSW50ZXJwb2xhdGVW
YWx1ZUFjdGlvbjsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRh
YmxlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL0FuaW1hdGlvbnMvYW5pbWF0YWJsZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuaW1hdGFibGUgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5pbWF0YWJsZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gQW5pbWF0YWJsZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FuaW1h
dGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9hbmltYXRpb24gKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb24udHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfcnVudGltZUFuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ydW50aW1lQW5pbWF0aW9uICovICIu
L0FuaW1hdGlvbnMvcnVudGltZUFuaW1hdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFi
bGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lICovICIuL3Nj
ZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX3ByZWNpc2lvbkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvcHJlY2lzaW9uRGF0ZSAq
LyAiLi9NaXNjL3ByZWNpc2lvbkRhdGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
Qm9uZXNfYm9uZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vQm9uZXMvYm9uZSAqLyAiLi9Cb25lcy9ib25lLnRzIik7CisKKworCisKKwor
CisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBzdG9yZSBhbiBhY3R1YWwgcnVubmluZyBhbmltYXRp
b24KKyAqLwordmFyIEFuaW1hdGFibGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBBbmltYXRhYmxlCisgICAgICogQHBhcmFtIHNj
ZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmlu
ZXMgdGhlIHRhcmdldCBvYmplY3QKKyAgICAgKiBAcGFyYW0gZnJvbUZyYW1lIGRlZmluZXMgdGhl
IHN0YXJ0aW5nIGZyYW1lIG51bWJlciAoZGVmYXVsdCBpcyAwKQorICAgICAqIEBwYXJhbSB0b0Zy
YW1lIGRlZmluZXMgdGhlIGVuZGluZyBmcmFtZSBudW1iZXIgKGRlZmF1bHQgaXMgMTAwKQorICAg
ICAqIEBwYXJhbSBsb29wQW5pbWF0aW9uIGRlZmluZXMgaWYgdGhlIGFuaW1hdGlvbiBtdXN0IGxv
b3AgKGRlZmF1bHQgaXMgZmFsc2UpCisgICAgICogQHBhcmFtIHNwZWVkUmF0aW8gZGVmaW5lcyB0
aGUgZmFjdG9yIHRvIGFwcGx5IHRvIGFuaW1hdGlvbiBzcGVlZCAoZGVmYXVsdCBpcyAxKQorICAg
ICAqIEBwYXJhbSBvbkFuaW1hdGlvbkVuZCBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVu
IGFuaW1hdGlvbiBlbmRzIGlmIGl0IGlzIG5vdCBsb29waW5nCisgICAgICogQHBhcmFtIGFuaW1h
dGlvbnMgZGVmaW5lcyBhIGdyb3VwIG9mIGFuaW1hdGlvbiB0byBhZGQgdG8gdGhlIG5ldyBBbmlt
YXRhYmxlCisgICAgICogQHBhcmFtIG9uQW5pbWF0aW9uTG9vcCBkZWZpbmVzIGEgY2FsbGJhY2sg
dG8gY2FsbCB3aGVuIGFuaW1hdGlvbiBsb29wcworICAgICAqLworICAgIGZ1bmN0aW9uIEFuaW1h
dGFibGUoc2NlbmUsIAorICAgIC8qKiBkZWZpbmVzIHRoZSB0YXJnZXQgb2JqZWN0ICovCisgICAg
dGFyZ2V0LCAKKyAgICAvKiogZGVmaW5lcyB0aGUgc3RhcnRpbmcgZnJhbWUgbnVtYmVyIChkZWZh
dWx0IGlzIDApICovCisgICAgZnJvbUZyYW1lLCAKKyAgICAvKiogZGVmaW5lcyB0aGUgZW5kaW5n
IGZyYW1lIG51bWJlciAoZGVmYXVsdCBpcyAxMDApICovCisgICAgdG9GcmFtZSwgCisgICAgLyoq
IGRlZmluZXMgaWYgdGhlIGFuaW1hdGlvbiBtdXN0IGxvb3AgKGRlZmF1bHQgaXMgZmFsc2UpICAq
LworICAgIGxvb3BBbmltYXRpb24sIHNwZWVkUmF0aW8sIAorICAgIC8qKiBkZWZpbmVzIGEgY2Fs
bGJhY2sgdG8gY2FsbCB3aGVuIGFuaW1hdGlvbiBlbmRzIGlmIGl0IGlzIG5vdCBsb29waW5nICov
CisgICAgb25BbmltYXRpb25FbmQsIGFuaW1hdGlvbnMsIAorICAgIC8qKiBkZWZpbmVzIGEgY2Fs
bGJhY2sgdG8gY2FsbCB3aGVuIGFuaW1hdGlvbiBsb29wcyAqLworICAgIG9uQW5pbWF0aW9uTG9v
cCkgeworICAgICAgICBpZiAoZnJvbUZyYW1lID09PSB2b2lkIDApIHsgZnJvbUZyYW1lID0gMDsg
fQorICAgICAgICBpZiAodG9GcmFtZSA9PT0gdm9pZCAwKSB7IHRvRnJhbWUgPSAxMDA7IH0KKyAg
ICAgICAgaWYgKGxvb3BBbmltYXRpb24gPT09IHZvaWQgMCkgeyBsb29wQW5pbWF0aW9uID0gZmFs
c2U7IH0KKyAgICAgICAgaWYgKHNwZWVkUmF0aW8gPT09IHZvaWQgMCkgeyBzcGVlZFJhdGlvID0g
MS4wOyB9CisgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICB0aGlzLmZyb21G
cmFtZSA9IGZyb21GcmFtZTsKKyAgICAgICAgdGhpcy50b0ZyYW1lID0gdG9GcmFtZTsKKyAgICAg
ICAgdGhpcy5sb29wQW5pbWF0aW9uID0gbG9vcEFuaW1hdGlvbjsKKyAgICAgICAgdGhpcy5vbkFu
aW1hdGlvbkVuZCA9IG9uQW5pbWF0aW9uRW5kOworICAgICAgICB0aGlzLm9uQW5pbWF0aW9uTG9v
cCA9IG9uQW5pbWF0aW9uTG9vcDsKKyAgICAgICAgdGhpcy5fbG9jYWxEZWxheU9mZnNldCA9IG51
bGw7CisgICAgICAgIHRoaXMuX3BhdXNlZERlbGF5ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcnVu
dGltZUFuaW1hdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFs
c2U7CisgICAgICAgIHRoaXMuX3NwZWVkUmF0aW8gPSAxOworICAgICAgICB0aGlzLl93ZWlnaHQg
PSAtMS4wOworICAgICAgICB0aGlzLl9zeW5jUm9vdCA9IG51bGw7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGFuaW1hdGFi
bGUgbXVzdCBiZSBkaXNwb3NlZCBhbmQgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoZSBhbmltYXRp
b24uCisgICAgICAgICAqIFRoaXMgd2lsbCBvbmx5IGFwcGx5IGZvciBub24gbG9vcGluZyBhbmlt
YXRpb24gKGRlZmF1bHQgaXMgdHJ1ZSkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGlzcG9z
ZU9uRW5kID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFuIGlu
ZGljYXRpbmcgaWYgdGhlIGFuaW1hdGlvbiBoYXMgc3RhcnRlZAorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5hbmltYXRpb25TdGFydGVkID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBPYnNlcnZlciByYWlzZWQgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMKKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMub25BbmltYXRpb25FbmRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFi
bGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBPYnNlcnZlciByYWlzZWQgd2hlbiB0aGUgYW5pbWF0aW9uIGxvb3Bz
CisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uQW5pbWF0aW9uTG9vcE9ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgaWYgKGFuaW1h
dGlvbnMpIHsKKyAgICAgICAgICAgIHRoaXMuYXBwZW5kQW5pbWF0aW9ucyh0YXJnZXQsIGFuaW1h
dGlvbnMpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NwZWVkUmF0aW8gPSBzcGVlZFJhdGlv
OworICAgICAgICBzY2VuZS5fYWN0aXZlQW5pbWF0YWJsZXMucHVzaCh0aGlzKTsKKyAgICB9Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGFibGUucHJvdG90eXBlLCAic3luY1Jvb3Qi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByb290IEFuaW1hdGFibGUgdXNl
ZCB0byBzeW5jaHJvbml6ZSBhbmQgbm9ybWFsaXplIGFuaW1hdGlvbnMKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N5bmNS
b290OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQW5pbWF0
YWJsZS5wcm90b3R5cGUsICJtYXN0ZXJGcmFtZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIGN1cnJlbnQgZnJhbWUgb2YgdGhlIGZpcnN0IFJ1bnRpbWVBbmltYXRpb24KKyAg
ICAgICAgICogVXNlZCB0byBzeW5jaHJvbml6ZSBBbmltYXRhYmxlcworICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fcnVudGltZUFu
aW1hdGlvbnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcnVudGltZUFuaW1hdGlvbnNbMF0u
Y3VycmVudEZyYW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQW5pbWF0YWJsZS5wcm90b3R5cGUsICJ3ZWlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIG9yIHNldHMgdGhlIGFuaW1hdGFibGUgd2VpZ2h0ICgtMS4wIGJ5IGRlZmF1bHQg
bWVhbmluZyBub3Qgd2VpZ2h0ZWQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWlnaHQ7CisgICAgICAgIH0sCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUgPT09IC0x
KSB7IC8vIC0xIGlzIG9rIGFuZCBtZWFucyBubyB3ZWlnaHQKKyAgICAgICAgICAgICAgICB0aGlz
Ll93ZWlnaHQgPSAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBFbHNlIHdlaWdodCBtdXN0IGJlIGluIFswLCAxXSByYW5nZQorICAgICAg
ICAgICAgdGhpcy5fd2VpZ2h0ID0gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIDApLCAxLjApOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQW5pbWF0YWJsZS5w
cm90b3R5cGUsICJzcGVlZFJhdGlvIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBv
ciBzZXRzIHRoZSBzcGVlZCByYXRpbyB0byBhcHBseSB0byB0aGUgYW5pbWF0YWJsZSAoMS4wIGJ5
IGRlZmF1bHQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zcGVlZFJhdGlvOworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IHRoaXMuX3J1bnRpbWVBbmltYXRpb25zLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgICAgIHZhciBhbmltYXRpb24gPSB0aGlzLl9ydW50aW1lQW5pbWF0aW9uc1tpbmRleF07Cisg
ICAgICAgICAgICAgICAgYW5pbWF0aW9uLl9wcmVwYXJlRm9yU3BlZWRSYXRpb0NoYW5nZSh2YWx1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zcGVlZFJhdGlvID0gdmFsdWU7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8vIE1ldGhvZHMKKyAgICAvKioKKyAgICAgKiBTeW5j
aHJvbml6ZSBhbmQgbm9ybWFsaXplIGN1cnJlbnQgQW5pbWF0YWJsZSB3aXRoIGEgc291cmNlIEFu
aW1hdGFibGUKKyAgICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIGFuaW1hdGlvbiB3ZWln
aHRzIGFuZCB3aGVuIGFuaW1hdGlvbnMgYXJlIG5vdCBvZiB0aGUgc2FtZSBsZW5ndGgKKyAgICAg
KiBAcGFyYW0gcm9vdCBkZWZpbmVzIHRoZSByb290IEFuaW1hdGFibGUgdG8gc3luY2hyb25pemUg
d2l0aAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IEFuaW1hdGFibGUKKyAgICAgKi8KKyAg
ICBBbmltYXRhYmxlLnByb3RvdHlwZS5zeW5jV2l0aCA9IGZ1bmN0aW9uIChyb290KSB7CisgICAg
ICAgIHRoaXMuX3N5bmNSb290ID0gcm9vdDsKKyAgICAgICAgaWYgKHJvb3QpIHsKKyAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGlzIGFuaW1hdGFibGUgd2lsbCBhbmltYXRlIGFmdGVyIHRoZSBy
b290CisgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zY2VuZS5fYWN0aXZlQW5pbWF0YWJs
ZXMuaW5kZXhPZih0aGlzKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5fc2NlbmUuX2FjdGl2ZUFuaW1hdGFibGVzLnNwbGljZShpbmRleCwgMSk7
CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuX2FjdGl2ZUFuaW1hdGFibGVzLnB1c2godGhp
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIHJ1bnRpbWUgYW5pbWF0aW9ucwor
ICAgICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIFJ1bnRpbWVBbmltYXRpb24KKyAgICAgKi8KKyAg
ICBBbmltYXRhYmxlLnByb3RvdHlwZS5nZXRBbmltYXRpb25zID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5fcnVudGltZUFuaW1hdGlvbnM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGRzIG1vcmUgYW5pbWF0aW9ucyB0byB0aGUgY3VycmVudCBhbmltYXRhYmxlCisgICAg
ICogQHBhcmFtIHRhcmdldCBkZWZpbmVzIHRoZSB0YXJnZXQgb2YgdGhlIGFuaW1hdGlvbnMKKyAg
ICAgKiBAcGFyYW0gYW5pbWF0aW9ucyBkZWZpbmVzIHRoZSBuZXcgYW5pbWF0aW9ucyB0byBhZGQK
KyAgICAgKi8KKyAgICBBbmltYXRhYmxlLnByb3RvdHlwZS5hcHBlbmRBbmltYXRpb25zID0gZnVu
Y3Rpb24gKHRhcmdldCwgYW5pbWF0aW9ucykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgYW5pbWF0aW9ucy5sZW5ndGg7IGlu
ZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSBhbmltYXRpb25zW2luZGV4XTsK
KyAgICAgICAgICAgIHZhciBuZXdSdW50aW1lQW5pbWF0aW9uID0gbmV3IF9ydW50aW1lQW5pbWF0
aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlJ1bnRpbWVBbmltYXRpb24iXSh0YXJn
ZXQsIGFuaW1hdGlvbiwgdGhpcy5fc2NlbmUsIHRoaXMpOworICAgICAgICAgICAgbmV3UnVudGlt
ZUFuaW1hdGlvbi5fb25Mb29wID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlz
Lm9uQW5pbWF0aW9uTG9vcE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKF90aGlzKTsKKyAgICAg
ICAgICAgICAgICBpZiAoX3RoaXMub25BbmltYXRpb25Mb29wKSB7CisgICAgICAgICAgICAgICAg
ICAgIF90aGlzLm9uQW5pbWF0aW9uTG9vcCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICB0aGlzLl9ydW50aW1lQW5pbWF0aW9ucy5wdXNoKG5ld1J1bnRp
bWVBbmltYXRpb24pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRo
ZSBzb3VyY2UgYW5pbWF0aW9uIGZvciBhIHNwZWNpZmljIHByb3BlcnR5CisgICAgICogQHBhcmFt
IHByb3BlcnR5IGRlZmluZXMgdGhlIHByb3BlcnR5dSB0byBsb29rIGZvcgorICAgICAqIEByZXR1
cm5zIG51bGwgb3IgdGhlIHNvdXJjZSBhbmltYXRpb24gZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eQor
ICAgICAqLworICAgIEFuaW1hdGFibGUucHJvdG90eXBlLmdldEFuaW1hdGlvbkJ5VGFyZ2V0UHJv
cGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHsKKyAgICAgICAgdmFyIHJ1bnRpbWVBbmltYXRp
b25zID0gdGhpcy5fcnVudGltZUFuaW1hdGlvbnM7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0g
MDsgaW5kZXggPCBydW50aW1lQW5pbWF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgIGlmIChydW50aW1lQW5pbWF0aW9uc1tpbmRleF0uYW5pbWF0aW9uLnRhcmdldFByb3BlcnR5
ID09PSBwcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIHJldHVybiBydW50aW1lQW5pbWF0aW9u
c1tpbmRleF0uYW5pbWF0aW9uOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgcnVudGltZSBhbmlt
YXRpb24gZm9yIGEgc3BlY2lmaWMgcHJvcGVydHkKKyAgICAgKiBAcGFyYW0gcHJvcGVydHkgZGVm
aW5lcyB0aGUgcHJvcGVydHl1IHRvIGxvb2sgZm9yCisgICAgICogQHJldHVybnMgbnVsbCBvciB0
aGUgcnVudGltZSBhbmltYXRpb24gZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eQorICAgICAqLworICAg
IEFuaW1hdGFibGUucHJvdG90eXBlLmdldFJ1bnRpbWVBbmltYXRpb25CeVRhcmdldFByb3BlcnR5
ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7CisgICAgICAgIHZhciBydW50aW1lQW5pbWF0aW9ucyA9
IHRoaXMuX3J1bnRpbWVBbmltYXRpb25zOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgcnVudGltZUFuaW1hdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBp
ZiAocnVudGltZUFuaW1hdGlvbnNbaW5kZXhdLmFuaW1hdGlvbi50YXJnZXRQcm9wZXJ0eSA9PT0g
cHJvcGVydHkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcnVudGltZUFuaW1hdGlvbnNbaW5k
ZXhdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAg
IH07CisgICAgLyoqCisgICAgICogUmVzZXRzIHRoZSBhbmltYXRhYmxlIHRvIGl0cyBvcmlnaW5h
bCBzdGF0ZQorICAgICAqLworICAgIEFuaW1hdGFibGUucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB2YXIgcnVudGltZUFuaW1hdGlvbnMgPSB0aGlzLl9ydW50aW1lQW5p
bWF0aW9uczsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHJ1bnRpbWVBbmlt
YXRpb25zLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgcnVudGltZUFuaW1hdGlvbnNb
aW5kZXhdLnJlc2V0KHRydWUpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2xvY2FsRGVsYXlP
ZmZzZXQgPSBudWxsOworICAgICAgICB0aGlzLl9wYXVzZWREZWxheSA9IG51bGw7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBbGxvd3MgdGhlIGFuaW1hdGFibGUgdG8gYmxlbmQgd2l0aCBjdXJy
ZW50IHJ1bm5pbmcgYW5pbWF0aW9ucworICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNhbmltYXRpb24tYmxlbmRpbmcKKyAgICAgKiBAcGFy
YW0gYmxlbmRpbmdTcGVlZCBkZWZpbmVzIHRoZSBibGVuZGluZyBzcGVlZCB0byB1c2UKKyAgICAg
Ki8KKyAgICBBbmltYXRhYmxlLnByb3RvdHlwZS5lbmFibGVCbGVuZGluZyA9IGZ1bmN0aW9uIChi
bGVuZGluZ1NwZWVkKSB7CisgICAgICAgIHZhciBydW50aW1lQW5pbWF0aW9ucyA9IHRoaXMuX3J1
bnRpbWVBbmltYXRpb25zOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcnVu
dGltZUFuaW1hdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBydW50aW1lQW5p
bWF0aW9uc1tpbmRleF0uYW5pbWF0aW9uLmVuYWJsZUJsZW5kaW5nID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJ1bnRpbWVBbmltYXRpb25zW2luZGV4XS5hbmltYXRpb24uYmxlbmRpbmdTcGVlZCA9IGJs
ZW5kaW5nU3BlZWQ7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc2FibGUg
YW5pbWF0aW9uIGJsZW5kaW5nCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
YmFieWxvbjEwMS9hbmltYXRpb25zI2FuaW1hdGlvbi1ibGVuZGluZworICAgICAqLworICAgIEFu
aW1hdGFibGUucHJvdG90eXBlLmRpc2FibGVCbGVuZGluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIHJ1bnRpbWVBbmltYXRpb25zID0gdGhpcy5fcnVudGltZUFuaW1hdGlvbnM7CisgICAg
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBydW50aW1lQW5pbWF0aW9ucy5sZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgIHJ1bnRpbWVBbmltYXRpb25zW2luZGV4XS5hbmltYXRp
b24uZW5hYmxlQmxlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogSnVtcCBkaXJlY3RseSB0byBhIGdpdmVuIGZyYW1lCisgICAgICogQHBhcmFtIGZyYW1l
IGRlZmluZXMgdGhlIGZyYW1lIHRvIGp1bXAgdG8KKyAgICAgKi8KKyAgICBBbmltYXRhYmxlLnBy
b3RvdHlwZS5nb1RvRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWUpIHsKKyAgICAgICAgdmFyIHJ1bnRp
bWVBbmltYXRpb25zID0gdGhpcy5fcnVudGltZUFuaW1hdGlvbnM7CisgICAgICAgIGlmIChydW50
aW1lQW5pbWF0aW9uc1swXSkgeworICAgICAgICAgICAgdmFyIGZwcyA9IHJ1bnRpbWVBbmltYXRp
b25zWzBdLmFuaW1hdGlvbi5mcmFtZVBlclNlY29uZDsKKyAgICAgICAgICAgIHZhciBjdXJyZW50
RnJhbWUgPSBydW50aW1lQW5pbWF0aW9uc1swXS5jdXJyZW50RnJhbWU7CisgICAgICAgICAgICB2
YXIgYWRqdXN0VGltZSA9IGZyYW1lIC0gY3VycmVudEZyYW1lOworICAgICAgICAgICAgdmFyIGRl
bGF5ID0gdGhpcy5zcGVlZFJhdGlvICE9PSAwID8gYWRqdXN0VGltZSAqIDEwMDAgLyAoZnBzICog
dGhpcy5zcGVlZFJhdGlvKSA6IDA7CisgICAgICAgICAgICBpZiAodGhpcy5fbG9jYWxEZWxheU9m
ZnNldCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsRGVsYXlPZmZzZXQg
PSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fbG9jYWxEZWxheU9mZnNldCAt
PSBkZWxheTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwg
cnVudGltZUFuaW1hdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBydW50aW1l
QW5pbWF0aW9uc1tpbmRleF0uZ29Ub0ZyYW1lKGZyYW1lKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogUGF1c2UgdGhlIGFuaW1hdGlvbgorICAgICAqLworICAgIEFuaW1hdGFi
bGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fcGF1
c2VkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcGF1
c2VkID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlc3RhcnQgdGhlIGFuaW1hdGlv
bgorICAgICAqLworICAgIEFuaW1hdGFibGUucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlOworICAgIH07CisgICAgQW5pbWF0YWJs
ZS5wcm90b3R5cGUuX3JhaXNlT25BbmltYXRpb25FbmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICh0aGlzLm9uQW5pbWF0aW9uRW5kKSB7CisgICAgICAgICAgICB0aGlzLm9uQW5pbWF0aW9u
RW5kKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vbkFuaW1hdGlvbkVuZE9ic2VydmFibGUu
bm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcCBhbmQg
ZGVsZXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSBhbmltYXRpb25OYW1l
IGRlZmluZXMgYSBzdHJpbmcgdXNlZCB0byBvbmx5IHN0b3Agc29tZSBvZiB0aGUgcnVudGltZSBh
bmltYXRpb25zIGluc3RlYWQgb2YgYWxsCisgICAgICogQHBhcmFtIHRhcmdldE1hc2sgLSBhIGZ1
bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBpZiB0aGUgYW5pbWF0aW9uIHNob3VsZCBiZSBzdG9wcGVk
IGJhc2VkIG9uIGl0cyB0YXJnZXQgKGFsbCBhbmltYXRpb25zIHdpbGwgYmUgc3RvcHBlZCBpZiBi
b3RoIHRoaXMgYW5kIGFuaW1hdGlvbk5hbWUgYXJlIGVtcHR5KQorICAgICAqLworICAgIEFuaW1h
dGFibGUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoYW5pbWF0aW9uTmFtZSwgdGFyZ2V0TWFz
aykgeworICAgICAgICBpZiAoYW5pbWF0aW9uTmFtZSB8fCB0YXJnZXRNYXNrKSB7CisgICAgICAg
ICAgICB2YXIgaWR4ID0gdGhpcy5fc2NlbmUuX2FjdGl2ZUFuaW1hdGFibGVzLmluZGV4T2YodGhp
cyk7CisgICAgICAgICAgICBpZiAoaWR4ID4gLTEpIHsKKyAgICAgICAgICAgICAgICB2YXIgcnVu
dGltZUFuaW1hdGlvbnMgPSB0aGlzLl9ydW50aW1lQW5pbWF0aW9uczsKKyAgICAgICAgICAgICAg
ICBmb3IgKHZhciBpbmRleCA9IHJ1bnRpbWVBbmltYXRpb25zLmxlbmd0aCAtIDE7IGluZGV4ID49
IDA7IGluZGV4LS0pIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bnRpbWVBbmltYXRpb24g
PSBydW50aW1lQW5pbWF0aW9uc1tpbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmIChhbmlt
YXRpb25OYW1lICYmIHJ1bnRpbWVBbmltYXRpb24uYW5pbWF0aW9uLm5hbWUgIT0gYW5pbWF0aW9u
TmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldE1hc2sgJiYgIXRhcmdldE1h
c2socnVudGltZUFuaW1hdGlvbi50YXJnZXQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBydW50
aW1lQW5pbWF0aW9uLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcnVudGltZUFuaW1h
dGlvbnMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHJ1bnRpbWVBbmltYXRpb25zLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3NjZW5lLl9hY3RpdmVBbmltYXRhYmxlcy5zcGxpY2UoaWR4LCAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fcmFpc2VPbkFuaW1hdGlvbkVuZCgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHZhciBpbmRleCA9IHRoaXMuX3NjZW5lLl9hY3RpdmVBbmltYXRhYmxlcy5pbmRleE9mKHRo
aXMpOworICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9zY2VuZS5fYWN0aXZlQW5pbWF0YWJsZXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAg
ICAgICB2YXIgcnVudGltZUFuaW1hdGlvbnMgPSB0aGlzLl9ydW50aW1lQW5pbWF0aW9uczsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcnVudGltZUFuaW1hdGlv
bnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVBbmltYXRp
b25zW2luZGV4XS5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHRoaXMuX3JhaXNlT25BbmltYXRpb25FbmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqCisgICAgICogV2FpdCBhc3luY2hyb25vdXNseSBmb3IgdGhlIGFuaW1h
dGlvbiB0byBlbmQKKyAgICAgKiBAcmV0dXJucyBhIHByb21pc2Ugd2hpY2ggd2lsbCBiZSBmdWxs
ZmlsbGVkIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzCisgICAgICovCisgICAgQW5pbWF0YWJsZS5w
cm90b3R5cGUud2FpdEFzeW5jID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0
aGlzOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVj
dCkgeworICAgICAgICAgICAgX3RoaXMub25BbmltYXRpb25FbmRPYnNlcnZhYmxlLmFkZChmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcmVzb2x2ZShfdGhpcyk7CisgICAgICAgICAgICB9
LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgX3RoaXMsIHRydWUpOworICAgICAgICB9KTsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQW5pbWF0YWJsZS5wcm90b3R5cGUuX2FuaW1hdGUg
PSBmdW5jdGlvbiAoZGVsYXkpIHsKKyAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkgeworICAgICAg
ICAgICAgdGhpcy5hbmltYXRpb25TdGFydGVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodGhp
cy5fcGF1c2VkRGVsYXkgPT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZWRE
ZWxheSA9IGRlbGF5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xvY2FsRGVsYXlPZmZzZXQgPT09IG51bGwpIHsK
KyAgICAgICAgICAgIHRoaXMuX2xvY2FsRGVsYXlPZmZzZXQgPSBkZWxheTsKKyAgICAgICAgICAg
IHRoaXMuX3BhdXNlZERlbGF5ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0
aGlzLl9wYXVzZWREZWxheSAhPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5fbG9jYWxEZWxh
eU9mZnNldCArPSBkZWxheSAtIHRoaXMuX3BhdXNlZERlbGF5OworICAgICAgICAgICAgdGhpcy5f
cGF1c2VkRGVsYXkgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl93ZWlnaHQg
PT09IDApIHsgLy8gV2UgY29uc2lkZXIgdGhhdCBhbiBhbmltYXRpb24gd2l0aCBhIHdlaWdodCA9
PT0gMCBpcyAiYWN0aXZlbHkiIHBhdXNlZAorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gQW5pbWF0aW5nCisgICAgICAgIHZhciBydW5uaW5nID0gZmFsc2U7
CisgICAgICAgIHZhciBydW50aW1lQW5pbWF0aW9ucyA9IHRoaXMuX3J1bnRpbWVBbmltYXRpb25z
OworICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHJ1
bnRpbWVBbmltYXRpb25zLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGFuaW1h
dGlvbiA9IHJ1bnRpbWVBbmltYXRpb25zW2luZGV4XTsKKyAgICAgICAgICAgIHZhciBpc1J1bm5p
bmcgPSBhbmltYXRpb24uYW5pbWF0ZShkZWxheSAtIHRoaXMuX2xvY2FsRGVsYXlPZmZzZXQsIHRo
aXMuZnJvbUZyYW1lLCB0aGlzLnRvRnJhbWUsIHRoaXMubG9vcEFuaW1hdGlvbiwgdGhpcy5fc3Bl
ZWRSYXRpbywgdGhpcy5fd2VpZ2h0KTsKKyAgICAgICAgICAgIHJ1bm5pbmcgPSBydW5uaW5nIHx8
IGlzUnVubmluZzsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXJ0ZWQgPSBy
dW5uaW5nOworICAgICAgICBpZiAoIXJ1bm5pbmcpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmRp
c3Bvc2VPbkVuZCkgeworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGFjdGl2ZSBhbmlt
YXRhYmxlcworICAgICAgICAgICAgICAgIGluZGV4ID0gdGhpcy5fc2NlbmUuX2FjdGl2ZUFuaW1h
dGFibGVzLmluZGV4T2YodGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuX2FjdGl2
ZUFuaW1hdGFibGVzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgICAgICAgICAgLy8gRGlzcG9z
ZSBhbGwgcnVudGltZSBhbmltYXRpb25zCisgICAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7
IGluZGV4IDwgcnVudGltZUFuaW1hdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJ1bnRpbWVBbmltYXRpb25zW2luZGV4XS5kaXNwb3NlKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fcmFpc2VPbkFuaW1hdGlv
bkVuZCgpOworICAgICAgICAgICAgaWYgKHRoaXMuZGlzcG9zZU9uRW5kKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5vbkFuaW1hdGlvbkVuZCA9IG51bGw7CisgICAgICAgICAgICAgICAgdGhpcy5v
bkFuaW1hdGlvbkxvb3AgPSBudWxsOworICAgICAgICAgICAgICAgIHRoaXMub25BbmltYXRpb25M
b29wT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICAgICAgICAgIHRoaXMub25BbmltYXRpb25F
bmRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJ1bm5pbmc7CisgICAgfTsKKyAgICByZXR1cm4gQW5pbWF0YWJsZTsKK30oKSk7CisK
K19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZSJdLnByb3RvdHlwZS5f
YW5pbWF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoIXRoaXMuYW5pbWF0aW9uc0VuYWJsZWQp
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgYW5pbWF0YWJsZXMgPSB0aGlzLl9h
Y3RpdmVBbmltYXRhYmxlczsKKyAgICBpZiAoYW5pbWF0YWJsZXMubGVuZ3RoID09PSAwKSB7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gR2V0dGluZyB0aW1lCisgICAgdmFyIG5vdyA9
IF9NaXNjX3ByZWNpc2lvbkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUHJlY2lz
aW9uRGF0ZSJdLk5vdzsKKyAgICBpZiAoIXRoaXMuX2FuaW1hdGlvblRpbWVMYXN0KSB7CisgICAg
ICAgIGlmICh0aGlzLl9wZW5kaW5nRGF0YS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYW5pbWF0aW9uVGltZUxhc3QgPSBub3c7Cisg
ICAgfQorICAgIHZhciBkZWx0YVRpbWUgPSB0aGlzLnVzZUNvbnN0YW50QW5pbWF0aW9uRGVsdGFU
aW1lID8gMTYuMCA6IChub3cgLSB0aGlzLl9hbmltYXRpb25UaW1lTGFzdCkgKiB0aGlzLmFuaW1h
dGlvblRpbWVTY2FsZTsKKyAgICB0aGlzLl9hbmltYXRpb25UaW1lICs9IGRlbHRhVGltZTsKKyAg
ICB2YXIgYW5pbWF0aW9uVGltZSA9IHRoaXMuX2FuaW1hdGlvblRpbWU7CisgICAgdGhpcy5fYW5p
bWF0aW9uVGltZUxhc3QgPSBub3c7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGFu
aW1hdGFibGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICB2YXIgYW5pbWF0YWJsZSA9IGFu
aW1hdGFibGVzW2luZGV4XTsKKyAgICAgICAgaWYgKCFhbmltYXRhYmxlLl9hbmltYXRlKGFuaW1h
dGlvblRpbWUpICYmIGFuaW1hdGFibGUuZGlzcG9zZU9uRW5kKSB7CisgICAgICAgICAgICBpbmRl
eC0tOyAvLyBBcnJheSB3YXMgdXBkYXRlZAorICAgICAgICB9CisgICAgfQorICAgIC8vIExhdGUg
YW5pbWF0aW9uIGJpbmRpbmdzCisgICAgdGhpcy5fcHJvY2Vzc0xhdGVBbmltYXRpb25CaW5kaW5n
cygpOworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZSJdLnBy
b3RvdHlwZS5iZWdpbldlaWdodGVkQW5pbWF0aW9uID0gZnVuY3Rpb24gKHRhcmdldCwgZnJvbSwg
dG8sIHdlaWdodCwgbG9vcCwgc3BlZWRSYXRpbywgb25BbmltYXRpb25FbmQsIGFuaW1hdGFibGUs
IHRhcmdldE1hc2ssIG9uQW5pbWF0aW9uTG9vcCkgeworICAgIGlmICh3ZWlnaHQgPT09IHZvaWQg
MCkgeyB3ZWlnaHQgPSAxLjA7IH0KKyAgICBpZiAoc3BlZWRSYXRpbyA9PT0gdm9pZCAwKSB7IHNw
ZWVkUmF0aW8gPSAxLjA7IH0KKyAgICB2YXIgcmV0dXJuZWRBbmltYXRhYmxlID0gdGhpcy5iZWdp
bkFuaW1hdGlvbih0YXJnZXQsIGZyb20sIHRvLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFuaW1hdGlv
bkVuZCwgYW5pbWF0YWJsZSwgZmFsc2UsIHRhcmdldE1hc2ssIG9uQW5pbWF0aW9uTG9vcCk7Cisg
ICAgcmV0dXJuZWRBbmltYXRhYmxlLndlaWdodCA9IHdlaWdodDsKKyAgICByZXR1cm4gcmV0dXJu
ZWRBbmltYXRhYmxlOworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJT
Y2VuZSJdLnByb3RvdHlwZS5iZWdpbkFuaW1hdGlvbiA9IGZ1bmN0aW9uICh0YXJnZXQsIGZyb20s
IHRvLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFuaW1hdGlvbkVuZCwgYW5pbWF0YWJsZSwgc3RvcEN1
cnJlbnQsIHRhcmdldE1hc2ssIG9uQW5pbWF0aW9uTG9vcCkgeworICAgIGlmIChzcGVlZFJhdGlv
ID09PSB2b2lkIDApIHsgc3BlZWRSYXRpbyA9IDEuMDsgfQorICAgIGlmIChzdG9wQ3VycmVudCA9
PT0gdm9pZCAwKSB7IHN0b3BDdXJyZW50ID0gdHJ1ZTsgfQorICAgIGlmIChmcm9tID4gdG8gJiYg
c3BlZWRSYXRpbyA+IDApIHsKKyAgICAgICAgc3BlZWRSYXRpbyAqPSAtMTsKKyAgICB9CisgICAg
aWYgKHN0b3BDdXJyZW50KSB7CisgICAgICAgIHRoaXMuc3RvcEFuaW1hdGlvbih0YXJnZXQsIHVu
ZGVmaW5lZCwgdGFyZ2V0TWFzayk7CisgICAgfQorICAgIGlmICghYW5pbWF0YWJsZSkgeworICAg
ICAgICBhbmltYXRhYmxlID0gbmV3IEFuaW1hdGFibGUodGhpcywgdGFyZ2V0LCBmcm9tLCB0bywg
bG9vcCwgc3BlZWRSYXRpbywgb25BbmltYXRpb25FbmQsIHVuZGVmaW5lZCwgb25BbmltYXRpb25M
b29wKTsKKyAgICB9CisgICAgdmFyIHNob3VsZFJ1blRhcmdldEFuaW1hdGlvbnMgPSB0YXJnZXRN
YXNrID8gdGFyZ2V0TWFzayh0YXJnZXQpIDogdHJ1ZTsKKyAgICAvLyBMb2NhbCBhbmltYXRpb25z
CisgICAgaWYgKHRhcmdldC5hbmltYXRpb25zICYmIHNob3VsZFJ1blRhcmdldEFuaW1hdGlvbnMp
IHsKKyAgICAgICAgYW5pbWF0YWJsZS5hcHBlbmRBbmltYXRpb25zKHRhcmdldCwgdGFyZ2V0LmFu
aW1hdGlvbnMpOworICAgIH0KKyAgICAvLyBDaGlsZHJlbiBhbmltYXRpb25zCisgICAgaWYgKHRh
cmdldC5nZXRBbmltYXRhYmxlcykgeworICAgICAgICB2YXIgYW5pbWF0YWJsZXMgPSB0YXJnZXQu
Z2V0QW5pbWF0YWJsZXMoKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGFu
aW1hdGFibGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdGhpcy5iZWdpbkFuaW1h
dGlvbihhbmltYXRhYmxlc1tpbmRleF0sIGZyb20sIHRvLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFu
aW1hdGlvbkVuZCwgYW5pbWF0YWJsZSwgc3RvcEN1cnJlbnQsIHRhcmdldE1hc2ssIG9uQW5pbWF0
aW9uTG9vcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgYW5pbWF0YWJsZS5yZXNldCgpOworICAg
IHJldHVybiBhbmltYXRhYmxlOworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJTY2VuZSJdLnByb3RvdHlwZS5iZWdpbkhpZXJhcmNoeUFuaW1hdGlvbiA9IGZ1bmN0aW9u
ICh0YXJnZXQsIGRpcmVjdERlc2NlbmRhbnRzT25seSwgZnJvbSwgdG8sIGxvb3AsIHNwZWVkUmF0
aW8sIG9uQW5pbWF0aW9uRW5kLCBhbmltYXRhYmxlLCBzdG9wQ3VycmVudCwgdGFyZ2V0TWFzaywg
b25BbmltYXRpb25Mb29wKSB7CisgICAgaWYgKHNwZWVkUmF0aW8gPT09IHZvaWQgMCkgeyBzcGVl
ZFJhdGlvID0gMS4wOyB9CisgICAgaWYgKHN0b3BDdXJyZW50ID09PSB2b2lkIDApIHsgc3RvcEN1
cnJlbnQgPSB0cnVlOyB9CisgICAgdmFyIGNoaWxkcmVuID0gdGFyZ2V0LmdldERlc2NlbmRhbnRz
KGRpcmVjdERlc2NlbmRhbnRzT25seSk7CisgICAgdmFyIHJlc3VsdCA9IFtdOworICAgIHJlc3Vs
dC5wdXNoKHRoaXMuYmVnaW5BbmltYXRpb24odGFyZ2V0LCBmcm9tLCB0bywgbG9vcCwgc3BlZWRS
YXRpbywgb25BbmltYXRpb25FbmQsIGFuaW1hdGFibGUsIHN0b3BDdXJyZW50LCB0YXJnZXRNYXNr
KSk7CisgICAgZm9yICh2YXIgX2kgPSAwLCBjaGlsZHJlbl8xID0gY2hpbGRyZW47IF9pIDwgY2hp
bGRyZW5fMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5fMVtf
aV07CisgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuYmVnaW5BbmltYXRpb24oY2hpbGQsIGZyb20s
IHRvLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFuaW1hdGlvbkVuZCwgYW5pbWF0YWJsZSwgc3RvcEN1
cnJlbnQsIHRhcmdldE1hc2spKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK307Citfc2Nl
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmUiXS5wcm90b3R5cGUuYmVnaW5E
aXJlY3RBbmltYXRpb24gPSBmdW5jdGlvbiAodGFyZ2V0LCBhbmltYXRpb25zLCBmcm9tLCB0bywg
bG9vcCwgc3BlZWRSYXRpbywgb25BbmltYXRpb25FbmQsIG9uQW5pbWF0aW9uTG9vcCkgeworICAg
IGlmIChzcGVlZFJhdGlvID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgc3BlZWRSYXRpbyA9IDEu
MDsKKyAgICB9CisgICAgdmFyIGFuaW1hdGFibGUgPSBuZXcgQW5pbWF0YWJsZSh0aGlzLCB0YXJn
ZXQsIGZyb20sIHRvLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFuaW1hdGlvbkVuZCwgYW5pbWF0aW9u
cywgb25BbmltYXRpb25Mb29wKTsKKyAgICByZXR1cm4gYW5pbWF0YWJsZTsKK307Citfc2NlbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmUiXS5wcm90b3R5cGUuYmVnaW5EaXJl
Y3RIaWVyYXJjaHlBbmltYXRpb24gPSBmdW5jdGlvbiAodGFyZ2V0LCBkaXJlY3REZXNjZW5kYW50
c09ubHksIGFuaW1hdGlvbnMsIGZyb20sIHRvLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFuaW1hdGlv
bkVuZCwgb25BbmltYXRpb25Mb29wKSB7CisgICAgdmFyIGNoaWxkcmVuID0gdGFyZ2V0LmdldERl
c2NlbmRhbnRzKGRpcmVjdERlc2NlbmRhbnRzT25seSk7CisgICAgdmFyIHJlc3VsdCA9IFtdOwor
ICAgIHJlc3VsdC5wdXNoKHRoaXMuYmVnaW5EaXJlY3RBbmltYXRpb24odGFyZ2V0LCBhbmltYXRp
b25zLCBmcm9tLCB0bywgbG9vcCwgc3BlZWRSYXRpbywgb25BbmltYXRpb25FbmQsIG9uQW5pbWF0
aW9uTG9vcCkpOworICAgIGZvciAodmFyIF9pID0gMCwgY2hpbGRyZW5fMiA9IGNoaWxkcmVuOyBf
aSA8IGNoaWxkcmVuXzIubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgIHZhciBjaGlsZCA9IGNoaWxk
cmVuXzJbX2ldOworICAgICAgICByZXN1bHQucHVzaCh0aGlzLmJlZ2luRGlyZWN0QW5pbWF0aW9u
KGNoaWxkLCBhbmltYXRpb25zLCBmcm9tLCB0bywgbG9vcCwgc3BlZWRSYXRpbywgb25BbmltYXRp
b25FbmQsIG9uQW5pbWF0aW9uTG9vcCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfTsK
K19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZSJdLnByb3RvdHlwZS5n
ZXRBbmltYXRhYmxlQnlUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7CisgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2FjdGl2ZUFuaW1hdGFibGVzLmxlbmd0aDsgaW5kZXgr
KykgeworICAgICAgICBpZiAodGhpcy5fYWN0aXZlQW5pbWF0YWJsZXNbaW5kZXhdLnRhcmdldCA9
PT0gdGFyZ2V0KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlQW5pbWF0YWJsZXNb
aW5kZXhdOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxsOworfTsKK19zY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZSJdLnByb3RvdHlwZS5nZXRBbGxBbmlt
YXRhYmxlc0J5VGFyZ2V0ID0gZnVuY3Rpb24gKHRhcmdldCkgeworICAgIHZhciByZXN1bHQgPSBb
XTsKKyAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fYWN0aXZlQW5pbWF0YWJs
ZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgIGlmICh0aGlzLl9hY3RpdmVBbmltYXRhYmxl
c1tpbmRleF0udGFyZ2V0ID09PSB0YXJnZXQpIHsKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRo
aXMuX2FjdGl2ZUFuaW1hdGFibGVzW2luZGV4XSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK307CisvKioKKyAqIFdpbGwgc3RvcCB0aGUgYW5pbWF0aW9uIG9mIHRoZSBn
aXZlbiB0YXJnZXQKKyAqIEBwYXJhbSB0YXJnZXQgLSB0aGUgdGFyZ2V0CisgKiBAcGFyYW0gYW5p
bWF0aW9uTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gc3RvcCAoYWxsIGFuaW1h
dGlvbnMgd2lsbCBiZSBzdG9wcGVkIGlmIGJvdGggdGhpcyBhbmQgdGFyZ2V0TWFzayBhcmUgZW1w
dHkpCisgKiBAcGFyYW0gdGFyZ2V0TWFzayAtIGEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGlm
IHRoZSBhbmltYXRpb24gc2hvdWxkIGJlIHN0b3BwZWQgYmFzZWQgb24gaXRzIHRhcmdldCAoYWxs
IGFuaW1hdGlvbnMgd2lsbCBiZSBzdG9wcGVkIGlmIGJvdGggdGhpcyBhbmQgYW5pbWF0aW9uTmFt
ZSBhcmUgZW1wdHkpCisgKi8KK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJT
Y2VuZSJdLnByb3RvdHlwZS5zdG9wQW5pbWF0aW9uID0gZnVuY3Rpb24gKHRhcmdldCwgYW5pbWF0
aW9uTmFtZSwgdGFyZ2V0TWFzaykgeworICAgIHZhciBhbmltYXRhYmxlcyA9IHRoaXMuZ2V0QWxs
QW5pbWF0YWJsZXNCeVRhcmdldCh0YXJnZXQpOworICAgIGZvciAodmFyIF9pID0gMCwgYW5pbWF0
YWJsZXNfMSA9IGFuaW1hdGFibGVzOyBfaSA8IGFuaW1hdGFibGVzXzEubGVuZ3RoOyBfaSsrKSB7
CisgICAgICAgIHZhciBhbmltYXRhYmxlID0gYW5pbWF0YWJsZXNfMVtfaV07CisgICAgICAgIGFu
aW1hdGFibGUuc3RvcChhbmltYXRpb25OYW1lLCB0YXJnZXRNYXNrKTsKKyAgICB9Cit9OworLyoq
CisgKiBTdG9wcyBhbmQgcmVtb3ZlcyBhbGwgYW5pbWF0aW9ucyB0aGF0IGhhdmUgYmVlbiBhcHBs
aWVkIHRvIHRoZSBzY2VuZQorICovCitfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siU2NlbmUiXS5wcm90b3R5cGUuc3RvcEFsbEFuaW1hdGlvbnMgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgaWYgKHRoaXMuX2FjdGl2ZUFuaW1hdGFibGVzKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5fYWN0aXZlQW5pbWF0YWJsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IHRoaXMuX2FjdGl2ZUFuaW1hdGFibGVzW2ldLnN0b3AoKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9hY3RpdmVBbmltYXRhYmxlcyA9IFtdOworICAgIH0KKyAgICBmb3IgKHZhciBfaSA9IDAs
IF9hID0gdGhpcy5hbmltYXRpb25Hcm91cHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAg
ICAgIHZhciBncm91cCA9IF9hW19pXTsKKyAgICAgICAgZ3JvdXAuc3RvcCgpOworICAgIH0KK307
Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmUiXS5wcm90b3R5cGUu
X3JlZ2lzdGVyVGFyZ2V0Rm9yTGF0ZUFuaW1hdGlvbkJpbmRpbmcgPSBmdW5jdGlvbiAocnVudGlt
ZUFuaW1hdGlvbiwgb3JpZ2luYWxWYWx1ZSkgeworICAgIHZhciB0YXJnZXQgPSBydW50aW1lQW5p
bWF0aW9uLnRhcmdldDsKKyAgICB0aGlzLl9yZWdpc3RlcmVkRm9yTGF0ZUFuaW1hdGlvbkJpbmRp
bmdzLnB1c2hOb0R1cGxpY2F0ZSh0YXJnZXQpOworICAgIGlmICghdGFyZ2V0Ll9sYXRlQW5pbWF0
aW9uSG9sZGVycykgeworICAgICAgICB0YXJnZXQuX2xhdGVBbmltYXRpb25Ib2xkZXJzID0ge307
CisgICAgfQorICAgIGlmICghdGFyZ2V0Ll9sYXRlQW5pbWF0aW9uSG9sZGVyc1tydW50aW1lQW5p
bWF0aW9uLnRhcmdldFBhdGhdKSB7CisgICAgICAgIHRhcmdldC5fbGF0ZUFuaW1hdGlvbkhvbGRl
cnNbcnVudGltZUFuaW1hdGlvbi50YXJnZXRQYXRoXSA9IHsKKyAgICAgICAgICAgIHRvdGFsV2Vp
Z2h0OiAwLAorICAgICAgICAgICAgYW5pbWF0aW9uczogW10sCisgICAgICAgICAgICBvcmlnaW5h
bFZhbHVlOiBvcmlnaW5hbFZhbHVlCisgICAgICAgIH07CisgICAgfQorICAgIHRhcmdldC5fbGF0
ZUFuaW1hdGlvbkhvbGRlcnNbcnVudGltZUFuaW1hdGlvbi50YXJnZXRQYXRoXS5hbmltYXRpb25z
LnB1c2gocnVudGltZUFuaW1hdGlvbik7CisgICAgdGFyZ2V0Ll9sYXRlQW5pbWF0aW9uSG9sZGVy
c1tydW50aW1lQW5pbWF0aW9uLnRhcmdldFBhdGhdLnRvdGFsV2VpZ2h0ICs9IHJ1bnRpbWVBbmlt
YXRpb24ud2VpZ2h0OworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJT
Y2VuZSJdLnByb3RvdHlwZS5fcHJvY2Vzc0xhdGVBbmltYXRpb25CaW5kaW5nc0Zvck1hdHJpY2Vz
ID0gZnVuY3Rpb24gKGhvbGRlcikgeworICAgIHZhciBub3JtYWxpemVyID0gMS4wOworICAgIHZh
ciBmaW5hbFBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdOworICAgIHZhciBmaW5hbFNjYWxpbmcg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVG1wVmVj
dG9ycyJdLlZlY3RvcjNbMV07CisgICAgdmFyIGZpbmFsUXVhdGVybmlvbiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUbXBWZWN0b3JzIl0uUXVhdGVy
bmlvblswXTsKKyAgICB2YXIgc3RhcnRJbmRleCA9IDA7CisgICAgdmFyIG9yaWdpbmFsQW5pbWF0
aW9uID0gaG9sZGVyLmFuaW1hdGlvbnNbMF07CisgICAgdmFyIG9yaWdpbmFsVmFsdWUgPSBob2xk
ZXIub3JpZ2luYWxWYWx1ZTsKKyAgICB2YXIgc2NhbGUgPSAxOworICAgIGlmIChob2xkZXIudG90
YWxXZWlnaHQgPCAxLjApIHsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBtaXggdGhlIG9yaWdpbmFs
IHZhbHVlIGluCisgICAgICAgIG9yaWdpbmFsVmFsdWUuZGVjb21wb3NlKGZpbmFsU2NhbGluZywg
ZmluYWxRdWF0ZXJuaW9uLCBmaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgc2NhbGUgPSAxLjAgLSBo
b2xkZXIudG90YWxXZWlnaHQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdGFydEluZGV4
ID0gMTsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBub3JtYWxpemUgdGhlIHdlaWdodHMKKyAgICAg
ICAgbm9ybWFsaXplciA9IGhvbGRlci50b3RhbFdlaWdodDsKKyAgICAgICAgb3JpZ2luYWxBbmlt
YXRpb24uY3VycmVudFZhbHVlLmRlY29tcG9zZShmaW5hbFNjYWxpbmcsIGZpbmFsUXVhdGVybmlv
biwgZmluYWxQb3NpdGlvbik7CisgICAgICAgIHNjYWxlID0gb3JpZ2luYWxBbmltYXRpb24ud2Vp
Z2h0IC8gbm9ybWFsaXplcjsKKyAgICAgICAgaWYgKHNjYWxlID09IDEpIHsKKyAgICAgICAgICAg
IHJldHVybiBvcmlnaW5hbEFuaW1hdGlvbi5jdXJyZW50VmFsdWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgZmluYWxTY2FsaW5nLnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgZmluYWxQb3NpdGlv
bi5zY2FsZUluUGxhY2Uoc2NhbGUpOworICAgIGZpbmFsUXVhdGVybmlvbi5zY2FsZUluUGxhY2Uo
c2NhbGUpOworICAgIGZvciAodmFyIGFuaW1JbmRleCA9IHN0YXJ0SW5kZXg7IGFuaW1JbmRleCA8
IGhvbGRlci5hbmltYXRpb25zLmxlbmd0aDsgYW5pbUluZGV4KyspIHsKKyAgICAgICAgdmFyIHJ1
bnRpbWVBbmltYXRpb24gPSBob2xkZXIuYW5pbWF0aW9uc1thbmltSW5kZXhdOworICAgICAgICB2
YXIgc2NhbGUgPSBydW50aW1lQW5pbWF0aW9uLndlaWdodCAvIG5vcm1hbGl6ZXI7CisgICAgICAg
IHZhciBjdXJyZW50UG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMl07CisgICAgICAgIHZhciBjdXJy
ZW50U2NhbGluZyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1szXTsKKyAgICAgICAgdmFyIGN1cnJlbnRRdWF0ZXJu
aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRt
cFZlY3RvcnMiXS5RdWF0ZXJuaW9uWzFdOworICAgICAgICBydW50aW1lQW5pbWF0aW9uLmN1cnJl
bnRWYWx1ZS5kZWNvbXBvc2UoY3VycmVudFNjYWxpbmcsIGN1cnJlbnRRdWF0ZXJuaW9uLCBjdXJy
ZW50UG9zaXRpb24pOworICAgICAgICBjdXJyZW50U2NhbGluZy5zY2FsZUFuZEFkZFRvUmVmKHNj
YWxlLCBmaW5hbFNjYWxpbmcpOworICAgICAgICBjdXJyZW50UXVhdGVybmlvbi5zY2FsZUFuZEFk
ZFRvUmVmKHNjYWxlLCBmaW5hbFF1YXRlcm5pb24pOworICAgICAgICBjdXJyZW50UG9zaXRpb24u
c2NhbGVBbmRBZGRUb1JlZihzY2FsZSwgZmluYWxQb3NpdGlvbik7CisgICAgfQorICAgIHZhciB3
b3JrVmFsdWUgPSBvcmlnaW5hbEFuaW1hdGlvbi5fYW5pbWF0aW9uU3RhdGUud29ya1ZhbHVlOwor
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRy
aXgiXS5Db21wb3NlVG9SZWYoZmluYWxTY2FsaW5nLCBmaW5hbFF1YXRlcm5pb24sIGZpbmFsUG9z
aXRpb24sIHdvcmtWYWx1ZSk7CisgICAgcmV0dXJuIHdvcmtWYWx1ZTsKK307Citfc2NlbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmUiXS5wcm90b3R5cGUuX3Byb2Nlc3NMYXRl
QW5pbWF0aW9uQmluZGluZ3NGb3JRdWF0ZXJuaW9ucyA9IGZ1bmN0aW9uIChob2xkZXIsIHJlZlF1
YXRlcm5pb24pIHsKKyAgICB2YXIgb3JpZ2luYWxBbmltYXRpb24gPSBob2xkZXIuYW5pbWF0aW9u
c1swXTsKKyAgICB2YXIgb3JpZ2luYWxWYWx1ZSA9IGhvbGRlci5vcmlnaW5hbFZhbHVlOworICAg
IGlmIChob2xkZXIuYW5pbWF0aW9ucy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlF1YXRlcm5pb24iXS5TbGVy
cFRvUmVmKG9yaWdpbmFsVmFsdWUsIG9yaWdpbmFsQW5pbWF0aW9uLmN1cnJlbnRWYWx1ZSwgTWF0
aC5taW4oMS4wLCBob2xkZXIudG90YWxXZWlnaHQpLCByZWZRdWF0ZXJuaW9uKTsKKyAgICAgICAg
cmV0dXJuIHJlZlF1YXRlcm5pb247CisgICAgfQorICAgIHZhciBub3JtYWxpemVyID0gMS4wOwor
ICAgIHZhciBxdWF0ZXJuaW9uczsKKyAgICB2YXIgd2VpZ2h0czsKKyAgICBpZiAoaG9sZGVyLnRv
dGFsV2VpZ2h0IDwgMS4wKSB7CisgICAgICAgIHZhciBzY2FsZSA9IDEuMCAtIGhvbGRlci50b3Rh
bFdlaWdodDsKKyAgICAgICAgcXVhdGVybmlvbnMgPSBbXTsKKyAgICAgICAgd2VpZ2h0cyA9IFtd
OworICAgICAgICBxdWF0ZXJuaW9ucy5wdXNoKG9yaWdpbmFsVmFsdWUpOworICAgICAgICB3ZWln
aHRzLnB1c2goc2NhbGUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGhvbGRlci5h
bmltYXRpb25zLmxlbmd0aCA9PT0gMikgeyAvLyBTbGVycCBhcyBzb29uIGFzIHdlIGNhbgorICAg
ICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlF1YXRlcm5pb24iXS5TbGVycFRvUmVmKGhvbGRlci5hbmltYXRpb25zWzBdLmN1cnJlbnRWYWx1
ZSwgaG9sZGVyLmFuaW1hdGlvbnNbMV0uY3VycmVudFZhbHVlLCBob2xkZXIuYW5pbWF0aW9uc1sx
XS53ZWlnaHQgLyBob2xkZXIudG90YWxXZWlnaHQsIHJlZlF1YXRlcm5pb24pOworICAgICAgICAg
ICAgcmV0dXJuIHJlZlF1YXRlcm5pb247CisgICAgICAgIH0KKyAgICAgICAgcXVhdGVybmlvbnMg
PSBbXTsKKyAgICAgICAgd2VpZ2h0cyA9IFtdOworICAgICAgICBub3JtYWxpemVyID0gaG9sZGVy
LnRvdGFsV2VpZ2h0OworICAgIH0KKyAgICBmb3IgKHZhciBhbmltSW5kZXggPSAwOyBhbmltSW5k
ZXggPCBob2xkZXIuYW5pbWF0aW9ucy5sZW5ndGg7IGFuaW1JbmRleCsrKSB7CisgICAgICAgIHZh
ciBydW50aW1lQW5pbWF0aW9uID0gaG9sZGVyLmFuaW1hdGlvbnNbYW5pbUluZGV4XTsKKyAgICAg
ICAgcXVhdGVybmlvbnMucHVzaChydW50aW1lQW5pbWF0aW9uLmN1cnJlbnRWYWx1ZSk7CisgICAg
ICAgIHdlaWdodHMucHVzaChydW50aW1lQW5pbWF0aW9uLndlaWdodCAvIG5vcm1hbGl6ZXIpOwor
ICAgIH0KKyAgICAvLyBodHRwczovL2dhbWVkZXYuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25z
LzYyMzU0L21ldGhvZC1mb3ItaW50ZXJwb2xhdGlvbi1iZXR3ZWVuLTMtcXVhdGVybmlvbnMKKyAg
ICB2YXIgY3VtdWxhdGl2ZUFtb3VudCA9IDA7CisgICAgdmFyIGN1bXVsYXRpdmVRdWF0ZXJuaW9u
ID0gbnVsbDsKKyAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcXVhdGVybmlvbnMubGVu
Z3RoOykgeworICAgICAgICBpZiAoIWN1bXVsYXRpdmVRdWF0ZXJuaW9uKSB7CisgICAgICAgICAg
ICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUXVhdGVy
bmlvbiJdLlNsZXJwVG9SZWYocXVhdGVybmlvbnNbaW5kZXhdLCBxdWF0ZXJuaW9uc1tpbmRleCAr
IDFdLCB3ZWlnaHRzW2luZGV4ICsgMV0gLyAod2VpZ2h0c1tpbmRleF0gKyB3ZWlnaHRzW2luZGV4
ICsgMV0pLCByZWZRdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgIGN1bXVsYXRpdmVRdWF0ZXJuaW9u
ID0gcmVmUXVhdGVybmlvbjsKKyAgICAgICAgICAgIGN1bXVsYXRpdmVBbW91bnQgPSB3ZWlnaHRz
W2luZGV4XSArIHdlaWdodHNbaW5kZXggKyAxXTsKKyAgICAgICAgICAgIGluZGV4ICs9IDI7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBjdW11bGF0aXZlQW1vdW50
ICs9IHdlaWdodHNbaW5kZXhdOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siUXVhdGVybmlvbiJdLlNsZXJwVG9SZWYoY3VtdWxhdGl2ZVF1
YXRlcm5pb24sIHF1YXRlcm5pb25zW2luZGV4XSwgd2VpZ2h0c1tpbmRleF0gLyBjdW11bGF0aXZl
QW1vdW50LCBjdW11bGF0aXZlUXVhdGVybmlvbik7CisgICAgICAgIGluZGV4Kys7CisgICAgfQor
ICAgIHJldHVybiBjdW11bGF0aXZlUXVhdGVybmlvbjsKK307Citfc2NlbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siU2NlbmUiXS5wcm90b3R5cGUuX3Byb2Nlc3NMYXRlQW5pbWF0aW9u
QmluZGluZ3MgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCF0aGlzLl9yZWdpc3RlcmVkRm9yTGF0
ZUFuaW1hdGlvbkJpbmRpbmdzLmxlbmd0aCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9yZWdpc3RlcmVkRm9yTGF0ZUFuaW1h
dGlvbkJpbmRpbmdzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICB2YXIgdGFyZ2V0ID0gdGhp
cy5fcmVnaXN0ZXJlZEZvckxhdGVBbmltYXRpb25CaW5kaW5ncy5kYXRhW2luZGV4XTsKKyAgICAg
ICAgZm9yICh2YXIgcGF0aCBpbiB0YXJnZXQuX2xhdGVBbmltYXRpb25Ib2xkZXJzKSB7CisgICAg
ICAgICAgICB2YXIgaG9sZGVyID0gdGFyZ2V0Ll9sYXRlQW5pbWF0aW9uSG9sZGVyc1twYXRoXTsK
KyAgICAgICAgICAgIHZhciBvcmlnaW5hbEFuaW1hdGlvbiA9IGhvbGRlci5hbmltYXRpb25zWzBd
OworICAgICAgICAgICAgdmFyIG9yaWdpbmFsVmFsdWUgPSBob2xkZXIub3JpZ2luYWxWYWx1ZTsK
KyAgICAgICAgICAgIHZhciBtYXRyaXhEZWNvbXBvc2VNb2RlID0gX2FuaW1hdGlvbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBbmltYXRpb24iXS5BbGxvd01hdHJpeERlY29tcG9zZUZv
ckludGVycG9sYXRpb24gJiYgb3JpZ2luYWxWYWx1ZS5tOyAvLyBpZS4gZGF0YSBpcyBtYXRyaXgK
KyAgICAgICAgICAgIHZhciBmaW5hbFZhbHVlID0gdGFyZ2V0W3BhdGhdOworICAgICAgICAgICAg
aWYgKG1hdHJpeERlY29tcG9zZU1vZGUpIHsKKyAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0g
dGhpcy5fcHJvY2Vzc0xhdGVBbmltYXRpb25CaW5kaW5nc0Zvck1hdHJpY2VzKGhvbGRlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgcXVh
dGVybmlvbk1vZGUgPSBvcmlnaW5hbFZhbHVlLncgIT09IHVuZGVmaW5lZDsKKyAgICAgICAgICAg
ICAgICBpZiAocXVhdGVybmlvbk1vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1
ZSA9IHRoaXMuX3Byb2Nlc3NMYXRlQW5pbWF0aW9uQmluZGluZ3NGb3JRdWF0ZXJuaW9ucyhob2xk
ZXIsIGZpbmFsVmFsdWUgfHwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlF1YXRlcm5pb24iXS5JZGVudGl0eSgpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZXIgPSAxLjA7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChob2xkZXIudG90YWxXZWlnaHQgPCAxLjApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWl4IHRoZSBvcmlnaW5hbCB2YWx1ZSBpbgorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUuc2NhbGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gb3JpZ2luYWxWYWx1ZS5zY2FsZSgxLjAg
LSBob2xkZXIudG90YWxXZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlu
YWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWUgKiAoMS4wIC0gaG9sZGVyLnRvdGFsV2VpZ2h0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g
bm9ybWFsaXplIHRoZSB3ZWlnaHRzCisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVy
ID0gaG9sZGVyLnRvdGFsV2VpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxl
XzEgPSBvcmlnaW5hbEFuaW1hdGlvbi53ZWlnaHQgLyBub3JtYWxpemVyOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNjYWxlXzEgIT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAob3JpZ2luYWxBbmltYXRpb24uY3VycmVudFZhbHVlLnNjYWxlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsdWUgPSBvcmlnaW5hbEFuaW1hdGlvbi5j
dXJyZW50VmFsdWUuc2NhbGUoc2NhbGVfMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gb3JpZ2luYWxBbmltYXRpb24uY3VycmVudFZhbHVl
ICogc2NhbGVfMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gb3JpZ2luYWxBbmltYXRpb24uY3VycmVudFZh
bHVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
c3RhcnRJbmRleCA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgYW5pbUluZGV4ID0gc3RhcnRJbmRleDsgYW5pbUluZGV4IDwgaG9sZGVyLmFu
aW1hdGlvbnMubGVuZ3RoOyBhbmltSW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHJ1bnRpbWVBbmltYXRpb24gPSBob2xkZXIuYW5pbWF0aW9uc1thbmltSW5kZXhdOworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gcnVudGltZUFuaW1hdGlvbi53ZWlnaHQg
LyBub3JtYWxpemVyOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bnRpbWVBbmltYXRp
b24uY3VycmVudFZhbHVlLnNjYWxlQW5kQWRkVG9SZWYpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBydW50aW1lQW5pbWF0aW9uLmN1cnJlbnRWYWx1ZS5zY2FsZUFuZEFkZFRvUmVmKHNj
YWxlLCBmaW5hbFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsVmFs
dWUgKz0gcnVudGltZUFuaW1hdGlvbi5jdXJyZW50VmFsdWUgKiBzY2FsZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhcmdldFtwYXRoXSA9IGZpbmFsVmFsdWU7Cisg
ICAgICAgIH0KKyAgICAgICAgdGFyZ2V0Ll9sYXRlQW5pbWF0aW9uSG9sZGVycyA9IHt9OworICAg
IH0KKyAgICB0aGlzLl9yZWdpc3RlcmVkRm9yTGF0ZUFuaW1hdGlvbkJpbmRpbmdzLnJlc2V0KCk7
Cit9OworX0JvbmVzX2JvbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQm9uZSJdLnBy
b3RvdHlwZS5jb3B5QW5pbWF0aW9uUmFuZ2UgPSBmdW5jdGlvbiAoc291cmNlLCByYW5nZU5hbWUs
IGZyYW1lT2Zmc2V0LCByZXNjYWxlQXNSZXF1aXJlZCwgc2tlbERpbWVuc2lvbnNSYXRpbykgewor
ICAgIGlmIChyZXNjYWxlQXNSZXF1aXJlZCA9PT0gdm9pZCAwKSB7IHJlc2NhbGVBc1JlcXVpcmVk
ID0gZmFsc2U7IH0KKyAgICBpZiAoc2tlbERpbWVuc2lvbnNSYXRpbyA9PT0gdm9pZCAwKSB7IHNr
ZWxEaW1lbnNpb25zUmF0aW8gPSBudWxsOyB9CisgICAgLy8gYWxsIGFuaW1hdGlvbiBtYXkgYmUg
Y29taW5nIGZyb20gYSBsaWJyYXJ5IHNrZWxldG9uLCBzbyBtYXkgbmVlZCB0byBjcmVhdGUgYW5p
bWF0aW9uCisgICAgaWYgKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGggPT09IDApIHsKKyAgICAgICAg
dGhpcy5hbmltYXRpb25zLnB1c2gobmV3IF9hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQW5pbWF0aW9uIl0odGhpcy5uYW1lLCAiX21hdHJpeCIsIHNvdXJjZS5hbmltYXRp
b25zWzBdLmZyYW1lUGVyU2Vjb25kLCBfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVfTUFUUklYLCAwKSk7CisgICAgICAgIHRo
aXMuYW5pbWF0aW9uc1swXS5zZXRLZXlzKFtdKTsKKyAgICB9CisgICAgLy8gZ2V0IGFuaW1hdGlv
biBpbmZvIC8gdmVyaWZ5IHRoZXJlIGlzIHN1Y2ggYSByYW5nZSBmcm9tIHRoZSBzb3VyY2UgYm9u
ZQorICAgIHZhciBzb3VyY2VSYW5nZSA9IHNvdXJjZS5hbmltYXRpb25zWzBdLmdldFJhbmdlKHJh
bmdlTmFtZSk7CisgICAgaWYgKCFzb3VyY2VSYW5nZSkgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHZhciBmcm9tID0gc291cmNlUmFuZ2UuZnJvbTsKKyAgICB2YXIgdG8gPSBz
b3VyY2VSYW5nZS50bzsKKyAgICB2YXIgc291cmNlS2V5cyA9IHNvdXJjZS5hbmltYXRpb25zWzBd
LmdldEtleXMoKTsKKyAgICAvLyByZXNjYWxpbmcgcHJlcAorICAgIHZhciBzb3VyY2VCb25lTGVu
Z3RoID0gc291cmNlLmxlbmd0aDsKKyAgICB2YXIgc291cmNlUGFyZW50ID0gc291cmNlLmdldFBh
cmVudCgpOworICAgIHZhciBwYXJlbnQgPSB0aGlzLmdldFBhcmVudCgpOworICAgIHZhciBwYXJl
bnRTY2FsaW5nUmVxZCA9IHJlc2NhbGVBc1JlcXVpcmVkICYmIHNvdXJjZVBhcmVudCAmJiBzb3Vy
Y2VCb25lTGVuZ3RoICYmIHRoaXMubGVuZ3RoICYmIHNvdXJjZUJvbmVMZW5ndGggIT09IHRoaXMu
bGVuZ3RoOworICAgIHZhciBwYXJlbnRSYXRpbyA9IHBhcmVudFNjYWxpbmdSZXFkICYmIHBhcmVu
dCAmJiBzb3VyY2VQYXJlbnQgPyBwYXJlbnQubGVuZ3RoIC8gc291cmNlUGFyZW50Lmxlbmd0aCA6
IDE7CisgICAgdmFyIGRpbWVuc2lvbnNTY2FsaW5nUmVxZCA9IHJlc2NhbGVBc1JlcXVpcmVkICYm
ICFwYXJlbnQgJiYgc2tlbERpbWVuc2lvbnNSYXRpbyAmJiAoc2tlbERpbWVuc2lvbnNSYXRpby54
ICE9PSAxIHx8IHNrZWxEaW1lbnNpb25zUmF0aW8ueSAhPT0gMSB8fCBza2VsRGltZW5zaW9uc1Jh
dGlvLnogIT09IDEpOworICAgIHZhciBkZXN0S2V5cyA9IHRoaXMuYW5pbWF0aW9uc1swXS5nZXRL
ZXlzKCk7CisgICAgLy8gbG9vcCB2YXJzIGRlY2xhcmF0aW9uCisgICAgdmFyIG9yaWc7CisgICAg
dmFyIG9yaWdUcmFuc2xhdGlvbjsKKyAgICB2YXIgbWF0OworICAgIGZvciAodmFyIGtleSA9IDAs
IG5LZXlzID0gc291cmNlS2V5cy5sZW5ndGg7IGtleSA8IG5LZXlzOyBrZXkrKykgeworICAgICAg
ICBvcmlnID0gc291cmNlS2V5c1trZXldOworICAgICAgICBpZiAob3JpZy5mcmFtZSA+PSBmcm9t
ICYmIG9yaWcuZnJhbWUgPD0gdG8pIHsKKyAgICAgICAgICAgIGlmIChyZXNjYWxlQXNSZXF1aXJl
ZCkgeworICAgICAgICAgICAgICAgIG1hdCA9IG9yaWcudmFsdWUuY2xvbmUoKTsKKyAgICAgICAg
ICAgICAgICAvLyBzY2FsZSBiYXNlZCBvbiBwYXJlbnQgcmF0aW8sIHdoZW4gYm9uZSBoYXMgcGFy
ZW50CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudFNjYWxpbmdSZXFkKSB7CisgICAgICAgICAg
ICAgICAgICAgIG9yaWdUcmFuc2xhdGlvbiA9IG1hdC5nZXRUcmFuc2xhdGlvbigpOworICAgICAg
ICAgICAgICAgICAgICBtYXQuc2V0VHJhbnNsYXRpb24ob3JpZ1RyYW5zbGF0aW9uLnNjYWxlSW5Q
bGFjZShwYXJlbnRSYXRpbykpOworICAgICAgICAgICAgICAgICAgICAvLyBzY2FsZSBiYXNlZCBv
biBza2VsZXRvbiBkaW1lbnNpb24gcmF0aW8gd2hlbiByb290IGJvbmUsIGFuZCB2YWx1ZSBpcyBw
YXNzZWQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGltZW5z
aW9uc1NjYWxpbmdSZXFkICYmIHNrZWxEaW1lbnNpb25zUmF0aW8pIHsKKyAgICAgICAgICAgICAg
ICAgICAgb3JpZ1RyYW5zbGF0aW9uID0gbWF0LmdldFRyYW5zbGF0aW9uKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1hdC5zZXRUcmFuc2xhdGlvbihvcmlnVHJhbnNsYXRpb24ubXVsdGlwbHlJblBs
YWNlKHNrZWxEaW1lbnNpb25zUmF0aW8pKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gdXNlIG9y
aWdpbmFsIHdoZW4gcm9vdCBib25lLCBhbmQgbm8gZGF0YSBmb3Igc2tlbERpbWVuc2lvbnNSYXRp
bworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgbWF0ID0gb3JpZy52YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXQgPSBvcmlnLnZhbHVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdEtleXMucHVzaCh7IGZyYW1lOiBvcmln
LmZyYW1lICsgZnJhbWVPZmZzZXQsIHZhbHVlOiBtYXQgfSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgdGhpcy5hbmltYXRpb25zWzBdLmNyZWF0ZVJhbmdlKHJhbmdlTmFtZSwgZnJvbSArIGZyYW1l
T2Zmc2V0LCB0byArIGZyYW1lT2Zmc2V0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK307CisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL0FuaW1hdGlvbnMvYW5pbWF0aW9uLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQW5pbWF0aW9ucy9hbmltYXRp
b24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IF9JQW5pbWF0aW9uU3RhdGUsIEFuaW1hdGlvbiAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJfSUFuaW1hdGlvblN0YXRlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfSUFuaW1hdGlvblN0YXRlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGlv
biIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQW5pbWF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhz
L21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhf
Y29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5zY2Fs
YXIgKi8gIi4vTWF0aHMvbWF0aC5zY2FsYXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0b3Jz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3R5
cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9hbmltYXRpb25LZXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vYW5pbWF0aW9uS2V5ICovICIuL0FuaW1hdGlvbnMvYW5pbWF0aW9u
S2V5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FuaW1hdGlvblJhbmdlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FuaW1h
dGlvblJhbmdlICovICIuL0FuaW1hdGlvbnMvYW5pbWF0aW9uUmFuZ2UudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2l6ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5zaXplICovICIuL01h
dGhzL21hdGguc2l6ZS50cyIpOworCisKKworCisKKworCisKKworLyoqCisgKiBAaGlkZGVuCisg
Ki8KK3ZhciBfSUFuaW1hdGlvblN0YXRlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
ICAgIGZ1bmN0aW9uIF9JQW5pbWF0aW9uU3RhdGUoKSB7CisgICAgfQorICAgIHJldHVybiBfSUFu
aW1hdGlvblN0YXRlOworfSgpKTsKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHN0b3JlIGFueSBr
aW5kIG9mIGFuaW1hdGlvbgorICovCit2YXIgQW5pbWF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBhbmltYXRpb24KKyAg
ICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gdGFy
Z2V0UHJvcGVydHkgUHJvcGVydHkgdG8gYW5pbWF0ZQorICAgICAqIEBwYXJhbSBmcmFtZVBlclNl
Y29uZCBUaGUgZnJhbWVzIHBlciBzZWNvbmQgb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEBwYXJh
bSBkYXRhVHlwZSBUaGUgZGF0YSB0eXBlIG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0g
bG9vcE1vZGUgVGhlIGxvb3AgbW9kZSBvZiB0aGUgYW5pbWF0aW9uCisgICAgICogQHBhcmFtIGVu
YWJsZUJsZW5kaW5nIFNwZWNpZmllcyBpZiBibGVuZGluZyBzaG91bGQgYmUgZW5hYmxlZAorICAg
ICAqLworICAgIGZ1bmN0aW9uIEFuaW1hdGlvbigKKyAgICAvKipOYW1lIG9mIHRoZSBhbmltYXRp
b24gKi8KKyAgICBuYW1lLCAKKyAgICAvKipQcm9wZXJ0eSB0byBhbmltYXRlICovCisgICAgdGFy
Z2V0UHJvcGVydHksIAorICAgIC8qKlRoZSBmcmFtZXMgcGVyIHNlY29uZCBvZiB0aGUgYW5pbWF0
aW9uICovCisgICAgZnJhbWVQZXJTZWNvbmQsIAorICAgIC8qKlRoZSBkYXRhIHR5cGUgb2YgdGhl
IGFuaW1hdGlvbiAqLworICAgIGRhdGFUeXBlLCAKKyAgICAvKipUaGUgbG9vcCBtb2RlIG9mIHRo
ZSBhbmltYXRpb24gKi8KKyAgICBsb29wTW9kZSwgCisgICAgLyoqU3BlY2lmaWVzIGlmIGJsZW5k
aW5nIHNob3VsZCBiZSBlbmFibGVkICovCisgICAgZW5hYmxlQmxlbmRpbmcpIHsKKyAgICAgICAg
dGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy50YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFBy
b3BlcnR5OworICAgICAgICB0aGlzLmZyYW1lUGVyU2Vjb25kID0gZnJhbWVQZXJTZWNvbmQ7Cisg
ICAgICAgIHRoaXMuZGF0YVR5cGUgPSBkYXRhVHlwZTsKKyAgICAgICAgdGhpcy5sb29wTW9kZSA9
IGxvb3BNb2RlOworICAgICAgICB0aGlzLmVuYWJsZUJsZW5kaW5nID0gZW5hYmxlQmxlbmRpbmc7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuIEludGVybmFsIHVzZSBvbmx5CisgICAg
ICAgICAqLworICAgICAgICB0aGlzLl9ydW50aW1lQW5pbWF0aW9ucyA9IG5ldyBBcnJheSgpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHNldCBvZiBldmVudCB0aGF0IHdpbGwgYmUgbGlu
a2VkIHRvIHRoaXMgYW5pbWF0aW9uCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9ldmVudHMg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgYmxlbmRp
bmcgc3BlZWQgb2YgdGhlIGFuaW1hdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5ibGVu
ZGluZ1NwZWVkID0gMC4wMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgYW5p
bWF0aW9uIHJhbmdlcyBmb3IgdGhlIGFuaW1hdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5fcmFuZ2VzID0ge307CisgICAgICAgIHRoaXMudGFyZ2V0UHJvcGVydHlQYXRoID0gdGFyZ2V0
UHJvcGVydHkuc3BsaXQoIi4iKTsKKyAgICAgICAgdGhpcy5kYXRhVHlwZSA9IGRhdGFUeXBlOwor
ICAgICAgICB0aGlzLmxvb3BNb2RlID0gbG9vcE1vZGUgPT09IHVuZGVmaW5lZCA/IEFuaW1hdGlv
bi5BTklNQVRJT05MT09QTU9ERV9DWUNMRSA6IGxvb3BNb2RlOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBAaGlkZGVuIEludGVybmFsIHVzZQorICAgICAqLworICAgIEFuaW1hdGlvbi5fUHJlcGFy
ZUFuaW1hdGlvbiA9IGZ1bmN0aW9uIChuYW1lLCB0YXJnZXRQcm9wZXJ0eSwgZnJhbWVQZXJTZWNv
bmQsIHRvdGFsRnJhbWUsIGZyb20sIHRvLCBsb29wTW9kZSwgZWFzaW5nRnVuY3Rpb24pIHsKKyAg
ICAgICAgdmFyIGRhdGFUeXBlID0gdW5kZWZpbmVkOworICAgICAgICBpZiAoIWlzTmFOKHBhcnNl
RmxvYXQoZnJvbSkpICYmIGlzRmluaXRlKGZyb20pKSB7CisgICAgICAgICAgICBkYXRhVHlwZSA9
IEFuaW1hdGlvbi5BTklNQVRJT05UWVBFX0ZMT0FUOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGZyb20gaW5zdGFuY2VvZiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siUXVhdGVybmlvbiJdKSB7CisgICAgICAgICAgICBkYXRhVHlwZSA9IEFuaW1h
dGlvbi5BTklNQVRJT05UWVBFX1FVQVRFUk5JT047CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoZnJvbSBpbnN0YW5jZW9mIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJWZWN0b3IzIl0pIHsKKyAgICAgICAgICAgIGRhdGFUeXBlID0gQW5pbWF0aW9u
LkFOSU1BVElPTlRZUEVfVkVDVE9SMzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmcm9t
IGluc3RhbmNlb2YgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlZlY3RvcjIiXSkgeworICAgICAgICAgICAgZGF0YVR5cGUgPSBBbmltYXRpb24uQU5JTUFU
SU9OVFlQRV9WRUNUT1IyOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZyb20gaW5zdGFu
Y2VvZiBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xv
cjMiXSkgeworICAgICAgICAgICAgZGF0YVR5cGUgPSBBbmltYXRpb24uQU5JTUFUSU9OVFlQRV9D
T0xPUjM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZnJvbSBpbnN0YW5jZW9mIF9NYXRo
c19tYXRoX3NpemVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2l6ZSJdKSB7CisgICAg
ICAgICAgICBkYXRhVHlwZSA9IEFuaW1hdGlvbi5BTklNQVRJT05UWVBFX1NJWkU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGRhdGFUeXBlID09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGFuaW1hdGlvbiA9IG5ldyBBbmltYXRp
b24obmFtZSwgdGFyZ2V0UHJvcGVydHksIGZyYW1lUGVyU2Vjb25kLCBkYXRhVHlwZSwgbG9vcE1v
ZGUpOworICAgICAgICB2YXIga2V5cyA9IFt7IGZyYW1lOiAwLCB2YWx1ZTogZnJvbSB9LCB7IGZy
YW1lOiB0b3RhbEZyYW1lLCB2YWx1ZTogdG8gfV07CisgICAgICAgIGFuaW1hdGlvbi5zZXRLZXlz
KGtleXMpOworICAgICAgICBpZiAoZWFzaW5nRnVuY3Rpb24gIT09IHVuZGVmaW5lZCkgeworICAg
ICAgICAgICAgYW5pbWF0aW9uLnNldEVhc2luZ0Z1bmN0aW9uKGVhc2luZ0Z1bmN0aW9uKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gYW5pbWF0aW9uOworICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0cyB1cCBhbiBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3Bl
cnR5IHRvIGFuaW1hdGUKKyAgICAgKiBAcGFyYW0gYW5pbWF0aW9uVHlwZSBUaGUgYW5pbWF0aW9u
IHR5cGUgdG8gYXBwbHkKKyAgICAgKiBAcGFyYW0gZnJhbWVQZXJTZWNvbmQgVGhlIGZyYW1lcyBw
ZXIgc2Vjb25kIG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gZWFzaW5nRnVuY3Rpb24g
VGhlIGVhc2luZyBmdW5jdGlvbiB1c2VkIGluIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcmV0dXJu
cyBUaGUgY3JlYXRlZCBhbmltYXRpb24KKyAgICAgKi8KKyAgICBBbmltYXRpb24uQ3JlYXRlQW5p
bWF0aW9uID0gZnVuY3Rpb24gKHByb3BlcnR5LCBhbmltYXRpb25UeXBlLCBmcmFtZVBlclNlY29u
ZCwgZWFzaW5nRnVuY3Rpb24pIHsKKyAgICAgICAgdmFyIGFuaW1hdGlvbiA9IG5ldyBBbmltYXRp
b24ocHJvcGVydHkgKyAiQW5pbWF0aW9uIiwgcHJvcGVydHksIGZyYW1lUGVyU2Vjb25kLCBhbmlt
YXRpb25UeXBlLCBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQpOworICAgICAg
ICBhbmltYXRpb24uc2V0RWFzaW5nRnVuY3Rpb24oZWFzaW5nRnVuY3Rpb24pOworICAgICAgICBy
ZXR1cm4gYW5pbWF0aW9uOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuZCBzdGFy
dCBhbiBhbmltYXRpb24gb24gYSBub2RlCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
bmFtZSBvZiB0aGUgZ2xvYmFsIGFuaW1hdGlvbiB0aGF0IHdpbGwgYmUgcnVuIG9uIGFsbCBub2Rl
cworICAgICAqIEBwYXJhbSBub2RlIGRlZmluZXMgdGhlIHJvb3Qgbm9kZSB3aGVyZSB0aGUgYW5p
bWF0aW9uIHdpbGwgdGFrZSBwbGFjZQorICAgICAqIEBwYXJhbSB0YXJnZXRQcm9wZXJ0eSBkZWZp
bmVzIHByb3BlcnR5IHRvIGFuaW1hdGUKKyAgICAgKiBAcGFyYW0gZnJhbWVQZXJTZWNvbmQgZGVm
aW5lcyB0aGUgbnVtYmVyIG9mIGZyYW1lIHBlciBzZWNvbmQgeW8gdXNlCisgICAgICogQHBhcmFt
IHRvdGFsRnJhbWUgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGZyYW1lcyBpbiB0b3RhbAorICAgICAq
IEBwYXJhbSBmcm9tIGRlZmluZXMgdGhlIGluaXRpYWwgdmFsdWUKKyAgICAgKiBAcGFyYW0gdG8g
ZGVmaW5lcyB0aGUgZmluYWwgdmFsdWUKKyAgICAgKiBAcGFyYW0gbG9vcE1vZGUgZGVmaW5lcyB3
aGljaCBsb29wIG1vZGUgeW91IHdhbnQgdG8gdXNlIChvZmYgYnkgZGVmYXVsdCkKKyAgICAgKiBA
cGFyYW0gZWFzaW5nRnVuY3Rpb24gZGVmaW5lcyB0aGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSAo
bGluZWFyIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIG9uQW5pbWF0aW9uRW5kIGRlZmluZXMg
dGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiBhbmltYXRpb24gZW5kCisgICAgICogQHJldHVybnMg
dGhlIGFuaW1hdGFibGUgY3JlYXRlZCBmb3IgdGhpcyBhbmltYXRpb24KKyAgICAgKi8KKyAgICBB
bmltYXRpb24uQ3JlYXRlQW5kU3RhcnRBbmltYXRpb24gPSBmdW5jdGlvbiAobmFtZSwgbm9kZSwg
dGFyZ2V0UHJvcGVydHksIGZyYW1lUGVyU2Vjb25kLCB0b3RhbEZyYW1lLCBmcm9tLCB0bywgbG9v
cE1vZGUsIGVhc2luZ0Z1bmN0aW9uLCBvbkFuaW1hdGlvbkVuZCkgeworICAgICAgICB2YXIgYW5p
bWF0aW9uID0gQW5pbWF0aW9uLl9QcmVwYXJlQW5pbWF0aW9uKG5hbWUsIHRhcmdldFByb3BlcnR5
LCBmcmFtZVBlclNlY29uZCwgdG90YWxGcmFtZSwgZnJvbSwgdG8sIGxvb3BNb2RlLCBlYXNpbmdG
dW5jdGlvbik7CisgICAgICAgIGlmICghYW5pbWF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZS5nZXRTY2VuZSgpLmJlZ2luRGly
ZWN0QW5pbWF0aW9uKG5vZGUsIFthbmltYXRpb25dLCAwLCB0b3RhbEZyYW1lLCAoYW5pbWF0aW9u
Lmxvb3BNb2RlID09PSAxKSwgMS4wLCBvbkFuaW1hdGlvbkVuZCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGUgYW5kIHN0YXJ0IGFuIGFuaW1hdGlvbiBvbiBhIG5vZGUgYW5kIGl0cyBk
ZXNjZW5kYW50cworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGds
b2JhbCBhbmltYXRpb24gdGhhdCB3aWxsIGJlIHJ1biBvbiBhbGwgbm9kZXMKKyAgICAgKiBAcGFy
YW0gbm9kZSBkZWZpbmVzIHRoZSByb290IG5vZGUgd2hlcmUgdGhlIGFuaW1hdGlvbiB3aWxsIHRh
a2UgcGxhY2UKKyAgICAgKiBAcGFyYW0gZGlyZWN0RGVzY2VuZGFudHNPbmx5IGlmIHRydWUgb25s
eSBkaXJlY3QgZGVzY2VuZGFudHMgd2lsbCBiZSB1c2VkLCBpZiBmYWxzZSBkaXJlY3QgYW5kIGFs
c28gaW5kaXJlY3QgKGNoaWxkcmVuIG9mIGNoaWxkcmVuLCBhbiBzbyBvbiBpbiBhIHJlY3Vyc2l2
ZSBtYW5uZXIpIGRlc2NlbmRhbnRzIHdpbGwgYmUgdXNlZAorICAgICAqIEBwYXJhbSB0YXJnZXRQ
cm9wZXJ0eSBkZWZpbmVzIHByb3BlcnR5IHRvIGFuaW1hdGUKKyAgICAgKiBAcGFyYW0gZnJhbWVQ
ZXJTZWNvbmQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGZyYW1lIHBlciBzZWNvbmQgdG8gdXNlCisg
ICAgICogQHBhcmFtIHRvdGFsRnJhbWUgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGZyYW1lcyBpbiB0
b3RhbAorICAgICAqIEBwYXJhbSBmcm9tIGRlZmluZXMgdGhlIGluaXRpYWwgdmFsdWUKKyAgICAg
KiBAcGFyYW0gdG8gZGVmaW5lcyB0aGUgZmluYWwgdmFsdWUKKyAgICAgKiBAcGFyYW0gbG9vcE1v
ZGUgZGVmaW5lcyB3aGljaCBsb29wIG1vZGUgeW91IHdhbnQgdG8gdXNlIChvZmYgYnkgZGVmYXVs
dCkKKyAgICAgKiBAcGFyYW0gZWFzaW5nRnVuY3Rpb24gZGVmaW5lcyB0aGUgZWFzaW5nIGZ1bmN0
aW9uIHRvIHVzZSAobGluZWFyIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIG9uQW5pbWF0aW9u
RW5kIGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiBhbiBhbmltYXRpb24gZW5kcyAo
d2lsbCBiZSBjYWxsZWQgb25jZSBwZXIgbm9kZSkKKyAgICAgKiBAcmV0dXJucyB0aGUgbGlzdCBv
ZiBhbmltYXRhYmxlcyBjcmVhdGVkIGZvciBhbGwgbm9kZXMKKyAgICAgKiBAZXhhbXBsZSBodHRw
czovL3d3dy5iYWJ5bG9uanMtcGxheWdyb3VuZC5jb20vI01IMFZMSQorICAgICAqLworICAgIEFu
aW1hdGlvbi5DcmVhdGVBbmRTdGFydEhpZXJhcmNoeUFuaW1hdGlvbiA9IGZ1bmN0aW9uIChuYW1l
LCBub2RlLCBkaXJlY3REZXNjZW5kYW50c09ubHksIHRhcmdldFByb3BlcnR5LCBmcmFtZVBlclNl
Y29uZCwgdG90YWxGcmFtZSwgZnJvbSwgdG8sIGxvb3BNb2RlLCBlYXNpbmdGdW5jdGlvbiwgb25B
bmltYXRpb25FbmQpIHsKKyAgICAgICAgdmFyIGFuaW1hdGlvbiA9IEFuaW1hdGlvbi5fUHJlcGFy
ZUFuaW1hdGlvbihuYW1lLCB0YXJnZXRQcm9wZXJ0eSwgZnJhbWVQZXJTZWNvbmQsIHRvdGFsRnJh
bWUsIGZyb20sIHRvLCBsb29wTW9kZSwgZWFzaW5nRnVuY3Rpb24pOworICAgICAgICBpZiAoIWFu
aW1hdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIHNjZW5lID0gbm9kZS5nZXRTY2VuZSgpOworICAgICAgICByZXR1cm4gc2NlbmUuYmVnaW5E
aXJlY3RIaWVyYXJjaHlBbmltYXRpb24obm9kZSwgZGlyZWN0RGVzY2VuZGFudHNPbmx5LCBbYW5p
bWF0aW9uXSwgMCwgdG90YWxGcmFtZSwgKGFuaW1hdGlvbi5sb29wTW9kZSA9PT0gMSksIDEuMCwg
b25BbmltYXRpb25FbmQpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBh
bmltYXRpb24sIG1lcmdlcyBpdCB3aXRoIHRoZSBleGlzdGluZyBhbmltYXRpb25zIGFuZCBzdGFy
dHMgaXQKKyAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBA
cGFyYW0gbm9kZSBOb2RlIHdoaWNoIGNvbnRhaW5zIHRoZSBzY2VuZSB0aGF0IGJlZ2lucyB0aGUg
YW5pbWF0aW9ucworICAgICAqIEBwYXJhbSB0YXJnZXRQcm9wZXJ0eSBTcGVjaWZpZXMgd2hpY2gg
cHJvcGVydHkgdG8gYW5pbWF0ZQorICAgICAqIEBwYXJhbSBmcmFtZVBlclNlY29uZCBUaGUgZnJh
bWVzIHBlciBzZWNvbmQgb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSB0b3RhbEZyYW1l
IFRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzCisgICAgICogQHBhcmFtIGZyb20gVGhlIGZyYW1l
IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSB0byBUaGUg
ZnJhbWUgYXQgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uCisgICAgICogQHBhcmFtIGxvb3BNb2Rl
IFNwZWNpZmllcyB0aGUgbG9vcCBtb2RlIG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0g
ZWFzaW5nRnVuY3Rpb24gKE9wdGlvbmFsKSBUaGUgZWFzaW5nIGZ1bmN0aW9uIG9mIHRoZSBhbmlt
YXRpb24sIHdoaWNoIGFsbG93IGN1c3RvbSBtYXRoZW1hdGljYWwgZm9ybXVsYXMgZm9yIGFuaW1h
dGlvbnMKKyAgICAgKiBAcGFyYW0gb25BbmltYXRpb25FbmQgQ2FsbGJhY2sgdG8gcnVuIG9uY2Ug
dGhlIGFuaW1hdGlvbiBpcyBjb21wbGV0ZQorICAgICAqIEByZXR1cm5zIE51bGxhYmxlIGFuaW1h
dGlvbgorICAgICAqLworICAgIEFuaW1hdGlvbi5DcmVhdGVNZXJnZUFuZFN0YXJ0QW5pbWF0aW9u
ID0gZnVuY3Rpb24gKG5hbWUsIG5vZGUsIHRhcmdldFByb3BlcnR5LCBmcmFtZVBlclNlY29uZCwg
dG90YWxGcmFtZSwgZnJvbSwgdG8sIGxvb3BNb2RlLCBlYXNpbmdGdW5jdGlvbiwgb25BbmltYXRp
b25FbmQpIHsKKyAgICAgICAgdmFyIGFuaW1hdGlvbiA9IEFuaW1hdGlvbi5fUHJlcGFyZUFuaW1h
dGlvbihuYW1lLCB0YXJnZXRQcm9wZXJ0eSwgZnJhbWVQZXJTZWNvbmQsIHRvdGFsRnJhbWUsIGZy
b20sIHRvLCBsb29wTW9kZSwgZWFzaW5nRnVuY3Rpb24pOworICAgICAgICBpZiAoIWFuaW1hdGlv
bikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgbm9kZS5h
bmltYXRpb25zLnB1c2goYW5pbWF0aW9uKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZ2V0U2NlbmUo
KS5iZWdpbkFuaW1hdGlvbihub2RlLCAwLCB0b3RhbEZyYW1lLCAoYW5pbWF0aW9uLmxvb3BNb2Rl
ID09PSAxKSwgMS4wLCBvbkFuaW1hdGlvbkVuZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBU
cmFuc2l0aW9uIHByb3BlcnR5IG9mIGFuIGhvc3QgdG8gdGhlIHRhcmdldCBWYWx1ZQorICAgICAq
IEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gdHJhbnNpdGlvbgorICAgICAqIEBwYXJh
bSB0YXJnZXRWYWx1ZSBUaGUgdGFyZ2V0IFZhbHVlIG9mIHRoZSBwcm9wZXJ0eQorICAgICAqIEBw
YXJhbSBob3N0IFRoZSBvYmplY3Qgd2hlcmUgdGhlIHByb3BlcnR5IHRvIGFuaW1hdGUgYmVsb25n
cworICAgICAqIEBwYXJhbSBzY2VuZSBTY2VuZSB1c2VkIHRvIHJ1biB0aGUgYW5pbWF0aW9uCisg
ICAgICogQHBhcmFtIGZyYW1lUmF0ZSBGcmFtZXJhdGUgKGluIGZyYW1lL3MpIHRvIHVzZQorICAg
ICAqIEBwYXJhbSB0cmFuc2l0aW9uIFRoZSB0cmFuc2l0aW9uIHR5cGUgd2Ugd2FudCB0byB1c2UK
KyAgICAgKiBAcGFyYW0gZHVyYXRpb24gVGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24sIGlu
IG1pbGxpc2Vjb25kcworICAgICAqIEBwYXJhbSBvbkFuaW1hdGlvbkVuZCBDYWxsYmFjayB0cmln
Z2VyIGF0IHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEByZXR1cm5zIE51bGxhYmxl
IGFuaW1hdGlvbgorICAgICAqLworICAgIEFuaW1hdGlvbi5UcmFuc2l0aW9uVG8gPSBmdW5jdGlv
biAocHJvcGVydHksIHRhcmdldFZhbHVlLCBob3N0LCBzY2VuZSwgZnJhbWVSYXRlLCB0cmFuc2l0
aW9uLCBkdXJhdGlvbiwgb25BbmltYXRpb25FbmQpIHsKKyAgICAgICAgaWYgKG9uQW5pbWF0aW9u
RW5kID09PSB2b2lkIDApIHsgb25BbmltYXRpb25FbmQgPSBudWxsOyB9CisgICAgICAgIGlmIChk
dXJhdGlvbiA8PSAwKSB7CisgICAgICAgICAgICBob3N0W3Byb3BlcnR5XSA9IHRhcmdldFZhbHVl
OworICAgICAgICAgICAgaWYgKG9uQW5pbWF0aW9uRW5kKSB7CisgICAgICAgICAgICAgICAgb25B
bmltYXRpb25FbmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIHZhciBlbmRGcmFtZSA9IGZyYW1lUmF0ZSAqIChkdXJhdGlvbiAv
IDEwMDApOworICAgICAgICB0cmFuc2l0aW9uLnNldEtleXMoW3sKKyAgICAgICAgICAgICAgICBm
cmFtZTogMCwKKyAgICAgICAgICAgICAgICB2YWx1ZTogaG9zdFtwcm9wZXJ0eV0uY2xvbmUgPyBo
b3N0W3Byb3BlcnR5XS5jbG9uZSgpIDogaG9zdFtwcm9wZXJ0eV0KKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWU6IGVuZEZyYW1lLAorICAgICAgICAg
ICAgICAgIHZhbHVlOiB0YXJnZXRWYWx1ZQorICAgICAgICAgICAgfV0pOworICAgICAgICBpZiAo
IWhvc3QuYW5pbWF0aW9ucykgeworICAgICAgICAgICAgaG9zdC5hbmltYXRpb25zID0gW107Cisg
ICAgICAgIH0KKyAgICAgICAgaG9zdC5hbmltYXRpb25zLnB1c2godHJhbnNpdGlvbik7CisgICAg
ICAgIHZhciBhbmltYXRpb24gPSBzY2VuZS5iZWdpbkFuaW1hdGlvbihob3N0LCAwLCBlbmRGcmFt
ZSwgZmFsc2UpOworICAgICAgICBhbmltYXRpb24ub25BbmltYXRpb25FbmQgPSBvbkFuaW1hdGlv
bkVuZDsKKyAgICAgICAgcmV0dXJuIGFuaW1hdGlvbjsKKyAgICB9OworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShBbmltYXRpb24ucHJvdG90eXBlLCAicnVudGltZUFuaW1hdGlvbnMiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gdGhlIGFycmF5IG9mIHJ1bnRpbWUgYW5pbWF0
aW9ucyBjdXJyZW50bHkgdXNpbmcgdGhpcyBhbmltYXRpb24KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3J1bnRpbWVBbmlt
YXRpb25zOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQW5p
bWF0aW9uLnByb3RvdHlwZSwgImhhc1J1bm5pbmdSdW50aW1lQW5pbWF0aW9ucyIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiBhbnkgb2YgdGhlIHJ1bnRpbWUgYW5pbWF0
aW9ucyBhcmUgY3VycmVudGx5IHJ1bm5pbmcKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3J1bnRp
bWVBbmltYXRpb25zOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZh
ciBydW50aW1lQW5pbWF0aW9uID0gX2FbX2ldOworICAgICAgICAgICAgICAgIGlmICghcnVudGlt
ZUFuaW1hdGlvbi5pc1N0b3BwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvLyBNZXRob2RzCisgICAgLyoqCisgICAgICog
Q29udmVydHMgdGhlIGFuaW1hdGlvbiB0byBhIHN0cmluZworICAgICAqIEBwYXJhbSBmdWxsRGV0
YWlscyBzdXBwb3J0IGZvciBtdWx0aXBsZSBsZXZlbHMgb2YgbG9nZ2luZyB3aXRoaW4gc2NlbmUg
bG9hZGluZworICAgICAqIEByZXR1cm5zIFN0cmluZyBmb3JtIG9mIHRoZSBhbmltYXRpb24KKyAg
ICAgKi8KKyAgICBBbmltYXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGZ1bGxE
ZXRhaWxzKSB7CisgICAgICAgIHZhciByZXQgPSAiTmFtZTogIiArIHRoaXMubmFtZSArICIsIHBy
b3BlcnR5OiAiICsgdGhpcy50YXJnZXRQcm9wZXJ0eTsKKyAgICAgICAgcmV0ICs9ICIsIGRhdGF0
eXBlOiAiICsgKFsiRmxvYXQiLCAiVmVjdG9yMyIsICJRdWF0ZXJuaW9uIiwgIk1hdHJpeCIsICJD
b2xvcjMiLCAiVmVjdG9yMiJdKVt0aGlzLmRhdGFUeXBlXTsKKyAgICAgICAgcmV0ICs9ICIsIG5L
ZXlzOiAiICsgKHRoaXMuX2tleXMgPyB0aGlzLl9rZXlzLmxlbmd0aCA6ICJub25lIik7CisgICAg
ICAgIHJldCArPSAiLCBuUmFuZ2VzOiAiICsgKHRoaXMuX3JhbmdlcyA/IE9iamVjdC5rZXlzKHRo
aXMuX3JhbmdlcykubGVuZ3RoIDogIm5vbmUiKTsKKyAgICAgICAgaWYgKGZ1bGxEZXRhaWxzKSB7
CisgICAgICAgICAgICByZXQgKz0gIiwgUmFuZ2VzOiB7IjsKKyAgICAgICAgICAgIHZhciBmaXJz
dCA9IHRydWU7CisgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX3Jhbmdlcykgewor
ICAgICAgICAgICAgICAgIGlmIChmaXJzdCkgeworICAgICAgICAgICAgICAgICAgICByZXQgKz0g
IiwgIjsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0ICs9IG5hbWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXQgKz0gIn0iOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBZGQgYW4gZXZlbnQgdG8gdGhpcyBhbmltYXRpb24KKyAgICAgKiBA
cGFyYW0gZXZlbnQgRXZlbnQgdG8gYWRkCisgICAgICovCisgICAgQW5pbWF0aW9uLnByb3RvdHlw
ZS5hZGRFdmVudCA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICB0aGlzLl9ldmVudHMucHVz
aChldmVudCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIGV2ZW50cyBmb3Vu
ZCBhdCB0aGUgZ2l2ZW4gZnJhbWUKKyAgICAgKiBAcGFyYW0gZnJhbWUgVGhlIGZyYW1lIHRvIHJl
bW92ZSBldmVudHMgZnJvbQorICAgICAqLworICAgIEFuaW1hdGlvbi5wcm90b3R5cGUucmVtb3Zl
RXZlbnRzID0gZnVuY3Rpb24gKGZyYW1lKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsg
aW5kZXggPCB0aGlzLl9ldmVudHMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fZXZlbnRzW2luZGV4XS5mcmFtZSA9PT0gZnJhbWUpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9ldmVudHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICBpbmRleC0tOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2
ZXMgYWxsIHRoZSBldmVudHMgZnJvbSB0aGUgYW5pbWF0aW9uCisgICAgICogQHJldHVybnMgRXZl
bnRzIGZyb20gdGhlIGFuaW1hdGlvbgorICAgICAqLworICAgIEFuaW1hdGlvbi5wcm90b3R5cGUu
Z2V0RXZlbnRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBhbmltYXRpb24gcmFuZ2UKKyAgICAg
KiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBhbmltYXRpb24gcmFuZ2UKKyAgICAgKiBAcGFyYW0g
ZnJvbSBTdGFydGluZyBmcmFtZSBvZiB0aGUgYW5pbWF0aW9uIHJhbmdlCisgICAgICogQHBhcmFt
IHRvIEVuZGluZyBmcmFtZSBvZiB0aGUgYW5pbWF0aW9uCisgICAgICovCisgICAgQW5pbWF0aW9u
LnByb3RvdHlwZS5jcmVhdGVSYW5nZSA9IGZ1bmN0aW9uIChuYW1lLCBmcm9tLCB0bykgeworICAg
ICAgICAvLyBjaGVjayBuYW1lIG5vdCBhbHJlYWR5IGluIHVzZTsgY291bGQgaGFwcGVuIGZvciBi
b25lcyBhZnRlciBzZXJpYWxpemVkCisgICAgICAgIGlmICghdGhpcy5fcmFuZ2VzW25hbWVdKSB7
CisgICAgICAgICAgICB0aGlzLl9yYW5nZXNbbmFtZV0gPSBuZXcgX2FuaW1hdGlvblJhbmdlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFuaW1hdGlvblJhbmdlIl0obmFtZSwgZnJvbSwg
dG8pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWxldGVzIGFuIGFuaW1h
dGlvbiByYW5nZSBieSBuYW1lCisgICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgYW5pbWF0
aW9uIHJhbmdlIHRvIGRlbGV0ZQorICAgICAqIEBwYXJhbSBkZWxldGVGcmFtZXMgU3BlY2lmaWVz
IGlmIHRoZSBrZXkgZnJhbWVzIGZvciB0aGUgcmFuZ2Ugc2hvdWxkIGFsc28gYmUgZGVsZXRlZCAo
dHJ1ZSkgb3Igbm90IChmYWxzZSkKKyAgICAgKi8KKyAgICBBbmltYXRpb24ucHJvdG90eXBlLmRl
bGV0ZVJhbmdlID0gZnVuY3Rpb24gKG5hbWUsIGRlbGV0ZUZyYW1lcykgeworICAgICAgICBpZiAo
ZGVsZXRlRnJhbWVzID09PSB2b2lkIDApIHsgZGVsZXRlRnJhbWVzID0gdHJ1ZTsgfQorICAgICAg
ICB2YXIgcmFuZ2UgPSB0aGlzLl9yYW5nZXNbbmFtZV07CisgICAgICAgIGlmICghcmFuZ2UpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVsZXRlRnJhbWVz
KSB7CisgICAgICAgICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb207CisgICAgICAgICAgICB2YXIg
dG8gPSByYW5nZS50bzsKKyAgICAgICAgICAgIC8vIHRoaXMgbG9vcCBNVVNUIGdvIGhpZ2ggdG8g
bG93IGZvciBtdWx0aXBsZSBzcGxpY2VzIHRvIHdvcmsKKyAgICAgICAgICAgIGZvciAodmFyIGtl
eSA9IHRoaXMuX2tleXMubGVuZ3RoIC0gMTsga2V5ID49IDA7IGtleS0tKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX2tleXNba2V5XS5mcmFtZSA+PSBmcm9tICYmIHRoaXMuX2tleXNba2V5
XS5mcmFtZSA8PSB0bykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzLnNwbGljZShr
ZXksIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9yYW5nZXNbbmFtZV0gPSBudWxsOyAvLyBzYWlkIG11Y2ggZmFzdGVyIHRoYW4g
J2RlbGV0ZSB0aGlzLl9yYW5nZVtuYW1lXScKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMg
dGhlIGFuaW1hdGlvbiByYW5nZSBieSBuYW1lLCBvciBudWxsIGlmIG5vdCBkZWZpbmVkCisgICAg
ICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHJhbmdlCisgICAgICogQHJldHVy
bnMgTnVsbGFibGUgYW5pbWF0aW9uIHJhbmdlCisgICAgICovCisgICAgQW5pbWF0aW9uLnByb3Rv
dHlwZS5nZXRSYW5nZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9y
YW5nZXNbbmFtZV07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBrZXkgZnJhbWVz
IGZyb20gdGhlIGFuaW1hdGlvbgorICAgICAqIEByZXR1cm5zIFRoZSBrZXkgZnJhbWVzIG9mIHRo
ZSBhbmltYXRpb24KKyAgICAgKi8KKyAgICBBbmltYXRpb24ucHJvdG90eXBlLmdldEtleXMgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9rZXlzOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgaGlnaGVzdCBmcmFtZSByYXRlIG9mIHRoZSBhbmltYXRpb24KKyAg
ICAgKiBAcmV0dXJucyBIaWdoZXN0IGZyYW1lIHJhdGUgb2YgdGhlIGFuaW1hdGlvbgorICAgICAq
LworICAgIEFuaW1hdGlvbi5wcm90b3R5cGUuZ2V0SGlnaGVzdEZyYW1lID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgcmV0ID0gMDsKKyAgICAgICAgZm9yICh2YXIga2V5ID0gMCwgbktleXMg
PSB0aGlzLl9rZXlzLmxlbmd0aDsga2V5IDwgbktleXM7IGtleSsrKSB7CisgICAgICAgICAgICBp
ZiAocmV0IDwgdGhpcy5fa2V5c1trZXldLmZyYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0ID0g
dGhpcy5fa2V5c1trZXldLmZyYW1lOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBlYXNpbmcgZnVu
Y3Rpb24gb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEByZXR1cm5zIEVhc2luZyBmdW5jdGlvbiBv
ZiB0aGUgYW5pbWF0aW9uCisgICAgICovCisgICAgQW5pbWF0aW9uLnByb3RvdHlwZS5nZXRFYXNp
bmdGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Vhc2luZ0Z1
bmN0aW9uOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZWFzaW5nIGZ1bmN0aW9u
IG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gZWFzaW5nRnVuY3Rpb24gQSBjdXN0b20g
bWF0aGVtYXRpY2FsIGZvcm11bGEgZm9yIGFuaW1hdGlvbgorICAgICAqLworICAgIEFuaW1hdGlv
bi5wcm90b3R5cGUuc2V0RWFzaW5nRnVuY3Rpb24gPSBmdW5jdGlvbiAoZWFzaW5nRnVuY3Rpb24p
IHsKKyAgICAgICAgdGhpcy5fZWFzaW5nRnVuY3Rpb24gPSBlYXNpbmdGdW5jdGlvbjsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEludGVycG9sYXRlcyBhIHNjYWxhciBsaW5lYXJseQorICAgICAq
IEBwYXJhbSBzdGFydFZhbHVlIFN0YXJ0IHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUKKyAg
ICAgKiBAcGFyYW0gZW5kVmFsdWUgRW5kIHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUKKyAg
ICAgKiBAcGFyYW0gZ3JhZGllbnQgU2NhbGFyIGFtb3VudCB0byBpbnRlcnBvbGF0ZQorICAgICAq
IEByZXR1cm5zIEludGVycG9sYXRlZCBzY2FsYXIgdmFsdWUKKyAgICAgKi8KKyAgICBBbmltYXRp
b24ucHJvdG90eXBlLmZsb2F0SW50ZXJwb2xhdGVGdW5jdGlvbiA9IGZ1bmN0aW9uIChzdGFydFZh
bHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQpIHsKKyAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3Nj
YWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5MZXJwKHN0YXJ0VmFs
dWUsIGVuZFZhbHVlLCBncmFkaWVudCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcnBv
bGF0ZXMgYSBzY2FsYXIgY3ViaWNhbGx5CisgICAgICogQHBhcmFtIHN0YXJ0VmFsdWUgU3RhcnQg
dmFsdWUgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJhbSBvdXRUYW5nZW50IEVu
ZCB0YW5nZW50IG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gZW5kVmFsdWUgRW5kIHZh
bHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUKKyAgICAgKiBAcGFyYW0gaW5UYW5nZW50IFN0YXJ0
IHRhbmdlbnQgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJhbSBncmFkaWVudCBT
Y2FsYXIgYW1vdW50IHRvIGludGVycG9sYXRlCisgICAgICogQHJldHVybnMgSW50ZXJwb2xhdGVk
IHNjYWxhciB2YWx1ZQorICAgICAqLworICAgIEFuaW1hdGlvbi5wcm90b3R5cGUuZmxvYXRJbnRl
cnBvbGF0ZUZ1bmN0aW9uV2l0aFRhbmdlbnRzID0gZnVuY3Rpb24gKHN0YXJ0VmFsdWUsIG91dFRh
bmdlbnQsIGVuZFZhbHVlLCBpblRhbmdlbnQsIGdyYWRpZW50KSB7CisgICAgICAgIHJldHVybiBf
TWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0u
SGVybWl0ZShzdGFydFZhbHVlLCBvdXRUYW5nZW50LCBlbmRWYWx1ZSwgaW5UYW5nZW50LCBncmFk
aWVudCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcnBvbGF0ZXMgYSBxdWF0ZXJuaW9u
IHVzaW5nIGEgc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uCisgICAgICogQHBhcmFtIHN0
YXJ0VmFsdWUgU3RhcnQgdmFsdWUgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJh
bSBlbmRWYWx1ZSBFbmQgdmFsdWUgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJh
bSBncmFkaWVudCBTY2FsYXIgYW1vdW50IHRvIGludGVycG9sYXRlCisgICAgICogQHJldHVybnMg
SW50ZXJwb2xhdGVkIHF1YXRlcm5pb24gdmFsdWUKKyAgICAgKi8KKyAgICBBbmltYXRpb24ucHJv
dG90eXBlLnF1YXRlcm5pb25JbnRlcnBvbGF0ZUZ1bmN0aW9uID0gZnVuY3Rpb24gKHN0YXJ0VmFs
dWUsIGVuZFZhbHVlLCBncmFkaWVudCkgeworICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlF1YXRlcm5pb24iXS5TbGVycChzdGFy
dFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQpOworICAgIH07CisgICAgLyoqCisgICAgICogSW50
ZXJwb2xhdGVzIGEgcXVhdGVybmlvbiBjdWJpY2FsbHkKKyAgICAgKiBAcGFyYW0gc3RhcnRWYWx1
ZSBTdGFydCB2YWx1ZSBvZiB0aGUgYW5pbWF0aW9uIGN1cnZlCisgICAgICogQHBhcmFtIG91dFRh
bmdlbnQgRW5kIHRhbmdlbnQgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJhbSBl
bmRWYWx1ZSBFbmQgdmFsdWUgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJhbSBp
blRhbmdlbnQgU3RhcnQgdGFuZ2VudCBvZiB0aGUgYW5pbWF0aW9uIGN1cnZlCisgICAgICogQHBh
cmFtIGdyYWRpZW50IFNjYWxhciBhbW91bnQgdG8gaW50ZXJwb2xhdGUKKyAgICAgKiBAcmV0dXJu
cyBJbnRlcnBvbGF0ZWQgcXVhdGVybmlvbiB2YWx1ZQorICAgICAqLworICAgIEFuaW1hdGlvbi5w
cm90b3R5cGUucXVhdGVybmlvbkludGVycG9sYXRlRnVuY3Rpb25XaXRoVGFuZ2VudHMgPSBmdW5j
dGlvbiAoc3RhcnRWYWx1ZSwgb3V0VGFuZ2VudCwgZW5kVmFsdWUsIGluVGFuZ2VudCwgZ3JhZGll
bnQpIHsKKyAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJRdWF0ZXJuaW9uIl0uSGVybWl0ZShzdGFydFZhbHVlLCBvdXRUYW5nZW50
LCBlbmRWYWx1ZSwgaW5UYW5nZW50LCBncmFkaWVudCkubm9ybWFsaXplKCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBJbnRlcnBvbGF0ZXMgYSBWZWN0b3IzIGxpbmVhcmwKKyAgICAgKiBAcGFy
YW0gc3RhcnRWYWx1ZSBTdGFydCB2YWx1ZSBvZiB0aGUgYW5pbWF0aW9uIGN1cnZlCisgICAgICog
QHBhcmFtIGVuZFZhbHVlIEVuZCB2YWx1ZSBvZiB0aGUgYW5pbWF0aW9uIGN1cnZlCisgICAgICog
QHBhcmFtIGdyYWRpZW50IFNjYWxhciBhbW91bnQgdG8gaW50ZXJwb2xhdGUKKyAgICAgKiBAcmV0
dXJucyBJbnRlcnBvbGF0ZWQgc2NhbGFyIHZhbHVlCisgICAgICovCisgICAgQW5pbWF0aW9uLnBy
b3RvdHlwZS52ZWN0b3IzSW50ZXJwb2xhdGVGdW5jdGlvbiA9IGZ1bmN0aW9uIChzdGFydFZhbHVl
LCBlbmRWYWx1ZSwgZ3JhZGllbnQpIHsKKyAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uTGVycChzdGFydFZhbHVl
LCBlbmRWYWx1ZSwgZ3JhZGllbnQpOworICAgIH07CisgICAgLyoqCisgICAgICogSW50ZXJwb2xh
dGVzIGEgVmVjdG9yMyBjdWJpY2FsbHkKKyAgICAgKiBAcGFyYW0gc3RhcnRWYWx1ZSBTdGFydCB2
YWx1ZSBvZiB0aGUgYW5pbWF0aW9uIGN1cnZlCisgICAgICogQHBhcmFtIG91dFRhbmdlbnQgRW5k
IHRhbmdlbnQgb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSBlbmRWYWx1ZSBFbmQgdmFs
dWUgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAqIEBwYXJhbSBpblRhbmdlbnQgU3RhcnQg
dGFuZ2VudCBvZiB0aGUgYW5pbWF0aW9uIGN1cnZlCisgICAgICogQHBhcmFtIGdyYWRpZW50IFNj
YWxhciBhbW91bnQgdG8gaW50ZXJwb2xhdGUKKyAgICAgKiBAcmV0dXJucyBJbnRlcnBvbGF0ZWRW
ZWN0b3IzIHZhbHVlCisgICAgICovCisgICAgQW5pbWF0aW9uLnByb3RvdHlwZS52ZWN0b3IzSW50
ZXJwb2xhdGVGdW5jdGlvbldpdGhUYW5nZW50cyA9IGZ1bmN0aW9uIChzdGFydFZhbHVlLCBvdXRU
YW5nZW50LCBlbmRWYWx1ZSwgaW5UYW5nZW50LCBncmFkaWVudCkgeworICAgICAgICByZXR1cm4g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMi
XS5IZXJtaXRlKHN0YXJ0VmFsdWUsIG91dFRhbmdlbnQsIGVuZFZhbHVlLCBpblRhbmdlbnQsIGdy
YWRpZW50KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEludGVycG9sYXRlcyBhIFZlY3RvcjIg
bGluZWFybHkKKyAgICAgKiBAcGFyYW0gc3RhcnRWYWx1ZSBTdGFydCB2YWx1ZSBvZiB0aGUgYW5p
bWF0aW9uIGN1cnZlCisgICAgICogQHBhcmFtIGVuZFZhbHVlIEVuZCB2YWx1ZSBvZiB0aGUgYW5p
bWF0aW9uIGN1cnZlCisgICAgICogQHBhcmFtIGdyYWRpZW50IFNjYWxhciBhbW91bnQgdG8gaW50
ZXJwb2xhdGUKKyAgICAgKiBAcmV0dXJucyBJbnRlcnBvbGF0ZWQgVmVjdG9yMiB2YWx1ZQorICAg
ICAqLworICAgIEFuaW1hdGlvbi5wcm90b3R5cGUudmVjdG9yMkludGVycG9sYXRlRnVuY3Rpb24g
PSBmdW5jdGlvbiAoc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KSB7CisgICAgICAgIHJl
dHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVj
dG9yMiJdLkxlcnAoc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEludGVycG9sYXRlcyBhIFZlY3RvcjIgY3ViaWNhbGx5CisgICAgICogQHBh
cmFtIHN0YXJ0VmFsdWUgU3RhcnQgdmFsdWUgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAgICAq
IEBwYXJhbSBvdXRUYW5nZW50IEVuZCB0YW5nZW50IG9mIHRoZSBhbmltYXRpb24KKyAgICAgKiBA
cGFyYW0gZW5kVmFsdWUgRW5kIHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUKKyAgICAgKiBA
cGFyYW0gaW5UYW5nZW50IFN0YXJ0IHRhbmdlbnQgb2YgdGhlIGFuaW1hdGlvbiBjdXJ2ZQorICAg
ICAqIEBwYXJhbSBncmFkaWVudCBTY2FsYXIgYW1vdW50IHRvIGludGVycG9sYXRlCisgICAgICog
QHJldHVybnMgSW50ZXJwb2xhdGVkIFZlY3RvcjIgdmFsdWUKKyAgICAgKi8KKyAgICBBbmltYXRp
b24ucHJvdG90eXBlLnZlY3RvcjJJbnRlcnBvbGF0ZUZ1bmN0aW9uV2l0aFRhbmdlbnRzID0gZnVu
Y3Rpb24gKHN0YXJ0VmFsdWUsIG91dFRhbmdlbnQsIGVuZFZhbHVlLCBpblRhbmdlbnQsIGdyYWRp
ZW50KSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVmVjdG9yMiJdLkhlcm1pdGUoc3RhcnRWYWx1ZSwgb3V0VGFuZ2VudCwg
ZW5kVmFsdWUsIGluVGFuZ2VudCwgZ3JhZGllbnQpOworICAgIH07CisgICAgLyoqCisgICAgICog
SW50ZXJwb2xhdGVzIGEgc2l6ZSBsaW5lYXJseQorICAgICAqIEBwYXJhbSBzdGFydFZhbHVlIFN0
YXJ0IHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUKKyAgICAgKiBAcGFyYW0gZW5kVmFsdWUg
RW5kIHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUKKyAgICAgKiBAcGFyYW0gZ3JhZGllbnQg
U2NhbGFyIGFtb3VudCB0byBpbnRlcnBvbGF0ZQorICAgICAqIEByZXR1cm5zIEludGVycG9sYXRl
ZCBTaXplIHZhbHVlCisgICAgICovCisgICAgQW5pbWF0aW9uLnByb3RvdHlwZS5zaXplSW50ZXJw
b2xhdGVGdW5jdGlvbiA9IGZ1bmN0aW9uIChzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQp
IHsKKyAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3NpemVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siU2l6ZSJdLkxlcnAoc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEludGVycG9sYXRlcyBhIENvbG9yMyBsaW5lYXJseQorICAg
ICAqIEBwYXJhbSBzdGFydFZhbHVlIFN0YXJ0IHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUK
KyAgICAgKiBAcGFyYW0gZW5kVmFsdWUgRW5kIHZhbHVlIG9mIHRoZSBhbmltYXRpb24gY3VydmUK
KyAgICAgKiBAcGFyYW0gZ3JhZGllbnQgU2NhbGFyIGFtb3VudCB0byBpbnRlcnBvbGF0ZQorICAg
ICAqIEByZXR1cm5zIEludGVycG9sYXRlZCBDb2xvcjMgdmFsdWUKKyAgICAgKi8KKyAgICBBbmlt
YXRpb24ucHJvdG90eXBlLmNvbG9yM0ludGVycG9sYXRlRnVuY3Rpb24gPSBmdW5jdGlvbiAoc3Rh
cnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjMiXS5MZXJwKHN0YXJ0
VmFsdWUsIGVuZFZhbHVlLCBncmFkaWVudCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlk
ZGVuIEludGVybmFsIHVzZSBvbmx5CisgICAgICovCisgICAgQW5pbWF0aW9uLnByb3RvdHlwZS5f
Z2V0S2V5VmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgaWYgKHR5cGVvZiB2YWx1
ZSA9PT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRl
biBJbnRlcm5hbCB1c2Ugb25seQorICAgICAqLworICAgIEFuaW1hdGlvbi5wcm90b3R5cGUuX2lu
dGVycG9sYXRlID0gZnVuY3Rpb24gKGN1cnJlbnRGcmFtZSwgc3RhdGUpIHsKKyAgICAgICAgaWYg
KHN0YXRlLmxvb3BNb2RlID09PSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQg
JiYgc3RhdGUucmVwZWF0Q291bnQgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGUuaGln
aExpbWl0VmFsdWUuY2xvbmUgPyBzdGF0ZS5oaWdoTGltaXRWYWx1ZS5jbG9uZSgpIDogc3RhdGUu
aGlnaExpbWl0VmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGtleXMgPSB0aGlzLl9rZXlz
OworICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9nZXRLZXlWYWx1ZShrZXlzWzBdLnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICB2YXIg
c3RhcnRLZXlJbmRleCA9IHN0YXRlLmtleTsKKyAgICAgICAgaWYgKGtleXNbc3RhcnRLZXlJbmRl
eF0uZnJhbWUgPj0gY3VycmVudEZyYW1lKSB7CisgICAgICAgICAgICB3aGlsZSAoc3RhcnRLZXlJ
bmRleCAtIDEgPj0gMCAmJiBrZXlzW3N0YXJ0S2V5SW5kZXhdLmZyYW1lID49IGN1cnJlbnRGcmFt
ZSkgeworICAgICAgICAgICAgICAgIHN0YXJ0S2V5SW5kZXgtLTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBmb3IgKHZhciBrZXkgPSBzdGFydEtleUluZGV4OyBrZXkgPCBrZXlz
Lmxlbmd0aDsga2V5KyspIHsKKyAgICAgICAgICAgIHZhciBlbmRLZXkgPSBrZXlzW2tleSArIDFd
OworICAgICAgICAgICAgaWYgKGVuZEtleS5mcmFtZSA+PSBjdXJyZW50RnJhbWUpIHsKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5rZXkgPSBrZXk7CisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0S2V5
ID0ga2V5c1trZXldOworICAgICAgICAgICAgICAgIHZhciBzdGFydFZhbHVlID0gdGhpcy5fZ2V0
S2V5VmFsdWUoc3RhcnRLZXkudmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChzdGFydEtleS5p
bnRlcnBvbGF0aW9uID09PSBfYW5pbWF0aW9uS2V5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIkFuaW1hdGlvbktleUludGVycG9sYXRpb24iXS5TVEVQKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGFydFZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB2YXIgZW5kVmFsdWUgPSB0aGlzLl9nZXRLZXlWYWx1ZShlbmRLZXkudmFsdWUpOworICAgICAg
ICAgICAgICAgIHZhciB1c2VUYW5nZW50ID0gc3RhcnRLZXkub3V0VGFuZ2VudCAhPT0gdW5kZWZp
bmVkICYmIGVuZEtleS5pblRhbmdlbnQgIT09IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICB2
YXIgZnJhbWVEZWx0YSA9IGVuZEtleS5mcmFtZSAtIHN0YXJ0S2V5LmZyYW1lOworICAgICAgICAg
ICAgICAgIC8vIGdyYWRpZW50IDogcGVyY2VudCBvZiBjdXJyZW50RnJhbWUgYmV0d2VlbiB0aGUg
ZnJhbWUgaW5mIGFuZCB0aGUgZnJhbWUgc3VwCisgICAgICAgICAgICAgICAgdmFyIGdyYWRpZW50
ID0gKGN1cnJlbnRGcmFtZSAtIHN0YXJ0S2V5LmZyYW1lKSAvIGZyYW1lRGVsdGE7CisgICAgICAg
ICAgICAgICAgLy8gY2hlY2sgZm9yIGVhc2luZ0Z1bmN0aW9uIGFuZCBjb3JyZWN0aW9uIG9mIGdy
YWRpZW50CisgICAgICAgICAgICAgICAgdmFyIGVhc2luZ0Z1bmN0aW9uID0gdGhpcy5nZXRFYXNp
bmdGdW5jdGlvbigpOworICAgICAgICAgICAgICAgIGlmIChlYXNpbmdGdW5jdGlvbiAhPSBudWxs
KSB7CisgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50ID0gZWFzaW5nRnVuY3Rpb24uZWFzZShn
cmFkaWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN3aXRjaCAodGhp
cy5kYXRhVHlwZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGbG9hdAorICAgICAgICAgICAg
ICAgICAgICBjYXNlIEFuaW1hdGlvbi5BTklNQVRJT05UWVBFX0ZMT0FUOgorICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGZsb2F0VmFsdWUgPSB1c2VUYW5nZW50ID8gdGhpcy5mbG9hdEludGVy
cG9sYXRlRnVuY3Rpb25XaXRoVGFuZ2VudHMoc3RhcnRWYWx1ZSwgc3RhcnRLZXkub3V0VGFuZ2Vu
dCAqIGZyYW1lRGVsdGEsIGVuZFZhbHVlLCBlbmRLZXkuaW5UYW5nZW50ICogZnJhbWVEZWx0YSwg
Z3JhZGllbnQpIDogdGhpcy5mbG9hdEludGVycG9sYXRlRnVuY3Rpb24oc3RhcnRWYWx1ZSwgZW5k
VmFsdWUsIGdyYWRpZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUu
bG9vcE1vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbi5B
TklNQVRJT05MT09QTU9ERV9DWUNMRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEFuaW1hdGlvbi5BTklNQVRJT05MT09QTU9ERV9DT05TVEFOVDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0VmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfUkVMQVRJVkU6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5vZmZzZXRWYWx1ZSAqIHN0YXRl
LnJlcGVhdENvdW50ICsgZmxvYXRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAvLyBRdWF0
ZXJuaW9uCisgICAgICAgICAgICAgICAgICAgIGNhc2UgQW5pbWF0aW9uLkFOSU1BVElPTlRZUEVf
UVVBVEVSTklPTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWF0VmFsdWUgPSB1c2VU
YW5nZW50ID8gdGhpcy5xdWF0ZXJuaW9uSW50ZXJwb2xhdGVGdW5jdGlvbldpdGhUYW5nZW50cyhz
dGFydFZhbHVlLCBzdGFydEtleS5vdXRUYW5nZW50LnNjYWxlKGZyYW1lRGVsdGEpLCBlbmRWYWx1
ZSwgZW5kS2V5LmluVGFuZ2VudC5zY2FsZShmcmFtZURlbHRhKSwgZ3JhZGllbnQpIDogdGhpcy5x
dWF0ZXJuaW9uSW50ZXJwb2xhdGVGdW5jdGlvbihzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGll
bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5sb29wTW9kZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQW5pbWF0aW9uLkFOSU1BVElPTkxPT1BN
T0RFX0NZQ0xFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQW5pbWF0aW9uLkFO
SU1BVElPTkxPT1BNT0RFX0NPTlNUQU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcXVhdFZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQW5p
bWF0aW9uLkFOSU1BVElPTkxPT1BNT0RFX1JFTEFUSVZFOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcXVhdFZhbHVlLmFkZEluUGxhY2Uoc3RhdGUub2Zmc2V0VmFsdWUu
c2NhbGUoc3RhdGUucmVwZWF0Q291bnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWF0VmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFZlY3RvcjMKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFU
SU9OVFlQRV9WRUNUT1IzOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlYzNWYWx1ZSA9
IHVzZVRhbmdlbnQgPyB0aGlzLnZlY3RvcjNJbnRlcnBvbGF0ZUZ1bmN0aW9uV2l0aFRhbmdlbnRz
KHN0YXJ0VmFsdWUsIHN0YXJ0S2V5Lm91dFRhbmdlbnQuc2NhbGUoZnJhbWVEZWx0YSksIGVuZFZh
bHVlLCBlbmRLZXkuaW5UYW5nZW50LnNjYWxlKGZyYW1lRGVsdGEpLCBncmFkaWVudCkgOiB0aGlz
LnZlY3RvcjNJbnRlcnBvbGF0ZUZ1bmN0aW9uKHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBncmFkaWVu
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlLmxvb3BNb2RlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1P
REVfQ1lDTEU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5J
TUFUSU9OTE9PUE1PREVfQ09OU1RBTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB2ZWMzVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmlt
YXRpb24uQU5JTUFUSU9OTE9PUE1PREVfUkVMQVRJVkU6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWMzVmFsdWUuYWRkKHN0YXRlLm9mZnNldFZhbHVlLnNjYWxlKHN0
YXRlLnJlcGVhdENvdW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIC8vIFZlY3RvcjIKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24u
QU5JTUFUSU9OVFlQRV9WRUNUT1IyOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlYzJW
YWx1ZSA9IHVzZVRhbmdlbnQgPyB0aGlzLnZlY3RvcjJJbnRlcnBvbGF0ZUZ1bmN0aW9uV2l0aFRh
bmdlbnRzKHN0YXJ0VmFsdWUsIHN0YXJ0S2V5Lm91dFRhbmdlbnQuc2NhbGUoZnJhbWVEZWx0YSks
IGVuZFZhbHVlLCBlbmRLZXkuaW5UYW5nZW50LnNjYWxlKGZyYW1lRGVsdGEpLCBncmFkaWVudCkg
OiB0aGlzLnZlY3RvcjJJbnRlcnBvbGF0ZUZ1bmN0aW9uKHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBn
cmFkaWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlLmxvb3BNb2Rl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9O
TE9PUE1PREVfQ1lDTEU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRp
b24uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB2ZWMyVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfUkVMQVRJVkU6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB2ZWMyVmFsdWUuYWRkKHN0YXRlLm9mZnNldFZhbHVlLnNj
YWxlKHN0YXRlLnJlcGVhdENvdW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIC8vIFNpemUKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRp
b24uQU5JTUFUSU9OVFlQRV9TSVpFOgorICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChz
dGF0ZS5sb29wTW9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQW5pbWF0
aW9uLkFOSU1BVElPTkxPT1BNT0RFX0NZQ0xFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQW5pbWF0aW9uLkFOSU1BVElPTkxPT1BNT0RFX0NPTlNUQU5UOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaXplSW50ZXJwb2xhdGVGdW5jdGlvbihz
dGFydFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQW5pbWF0aW9uLkFOSU1BVElPTkxPT1BNT0RFX1JFTEFUSVZFOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaXplSW50ZXJwb2xhdGVGdW5jdGlv
bihzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQpLmFkZChzdGF0ZS5vZmZzZXRWYWx1ZS5z
Y2FsZShzdGF0ZS5yZXBlYXRDb3VudCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAvLyBDb2xvcjMKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmlt
YXRpb24uQU5JTUFUSU9OVFlQRV9DT0xPUjM6CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHN0YXRlLmxvb3BNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBB
bmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ1lDTEU6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbG9yM0ludGVycG9sYXRlRnVu
Y3Rpb24oc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFuaW1hdGlvbi5BTklNQVRJT05MT09QTU9ERV9SRUxBVElWRToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sb3IzSW50ZXJwb2xh
dGVGdW5jdGlvbihzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQpLmFkZChzdGF0ZS5vZmZz
ZXRWYWx1ZS5zY2FsZShzdGF0ZS5yZXBlYXRDb3VudCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBNYXRyaXgKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBbmltYXRpb24uQU5JTUFUSU9OVFlQRV9NQVRSSVg6CisgICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHN0YXRlLmxvb3BNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ1lDTEU6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQ6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBbmltYXRpb24uQWxsb3dNYXRy
aWNlc0ludGVycG9sYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLm1hdHJpeEludGVycG9sYXRlRnVuY3Rpb24oc3RhcnRWYWx1ZSwgZW5kVmFs
dWUsIGdyYWRpZW50LCBzdGF0ZS53b3JrVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5J
TUFUSU9OTE9PUE1PREVfUkVMQVRJVkU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGFydFZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nZXRLZXlWYWx1ZShrZXlzW2tleXMubGVuZ3Ro
IC0gMV0udmFsdWUpOworICAgIH07CisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgZnVuY3Rp
b24gdG8gdXNlIHRvIGludGVycG9sYXRlIG1hdHJpY2VzCisgICAgICogQHBhcmFtIHN0YXJ0VmFs
dWUgZGVmaW5lcyB0aGUgc3RhcnQgbWF0cml4CisgICAgICogQHBhcmFtIGVuZFZhbHVlIGRlZmlu
ZXMgdGhlIGVuZCBtYXRyaXgKKyAgICAgKiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3Jh
ZGllbnQgYmV0d2VlbiBib3RoIG1hdHJpY2VzCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVz
IGFuIG9wdGlvbmFsIHRhcmdldCBtYXRyaXggd2hlcmUgdG8gc3RvcmUgdGhlIGludGVycG9sYXRp
b24KKyAgICAgKiBAcmV0dXJucyB0aGUgaW50ZXJwb2xhdGVkIG1hdHJpeAorICAgICAqLworICAg
IEFuaW1hdGlvbi5wcm90b3R5cGUubWF0cml4SW50ZXJwb2xhdGVGdW5jdGlvbiA9IGZ1bmN0aW9u
IChzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZ3JhZGllbnQsIHJlc3VsdCkgeworICAgICAgICBpZiAo
QW5pbWF0aW9uLkFsbG93TWF0cml4RGVjb21wb3NlRm9ySW50ZXJwb2xhdGlvbikgeworICAgICAg
ICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5EZWNvbXBvc2VMZXJwVG9SZWYo
c3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50LCByZXN1bHQpOworICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLkRlY29t
cG9zZUxlcnAoc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWF0cml4Il0uTGVycFRvUmVmKHN0YXJ0VmFsdWUsIGVu
ZFZhbHVlLCBncmFkaWVudCwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5MZXJwKHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBncmFk
aWVudCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNYWtlcyBhIGNvcHkgb2YgdGhlIGFuaW1h
dGlvbgorICAgICAqIEByZXR1cm5zIENsb25lZCBhbmltYXRpb24KKyAgICAgKi8KKyAgICBBbmlt
YXRpb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgY2xvbmUg
PSBuZXcgQW5pbWF0aW9uKHRoaXMubmFtZSwgdGhpcy50YXJnZXRQcm9wZXJ0eVBhdGguam9pbigi
LiIpLCB0aGlzLmZyYW1lUGVyU2Vjb25kLCB0aGlzLmRhdGFUeXBlLCB0aGlzLmxvb3BNb2RlKTsK
KyAgICAgICAgY2xvbmUuZW5hYmxlQmxlbmRpbmcgPSB0aGlzLmVuYWJsZUJsZW5kaW5nOworICAg
ICAgICBjbG9uZS5ibGVuZGluZ1NwZWVkID0gdGhpcy5ibGVuZGluZ1NwZWVkOworICAgICAgICBp
ZiAodGhpcy5fa2V5cykgeworICAgICAgICAgICAgY2xvbmUuc2V0S2V5cyh0aGlzLl9rZXlzKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmFuZ2VzKSB7CisgICAgICAgICAgICBjbG9u
ZS5fcmFuZ2VzID0ge307CisgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX3Jhbmdl
cykgeworICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuX3Jhbmdlc1tuYW1lXTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXJhbmdlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjbG9uZS5fcmFuZ2VzW25hbWVd
ID0gcmFuZ2UuY2xvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gY2xvbmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBrZXkgZnJhbWVzIG9m
IHRoZSBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gdmFsdWVzIFRoZSBhbmltYXRpb24ga2V5IGZy
YW1lcyB0byBzZXQKKyAgICAgKi8KKyAgICBBbmltYXRpb24ucHJvdG90eXBlLnNldEtleXMgPSBm
dW5jdGlvbiAodmFsdWVzKSB7CisgICAgICAgIHRoaXMuX2tleXMgPSB2YWx1ZXMuc2xpY2UoMCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBhbmltYXRpb24gdG8gYW4g
b2JqZWN0CisgICAgICogQHJldHVybnMgU2VyaWFsaXplZCBvYmplY3QKKyAgICAgKi8KKyAgICBB
bmltYXRpb24ucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5u
YW1lID0gdGhpcy5uYW1lOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnByb3BlcnR5ID0g
dGhpcy50YXJnZXRQcm9wZXJ0eTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5mcmFtZVBl
clNlY29uZCA9IHRoaXMuZnJhbWVQZXJTZWNvbmQ7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QuZGF0YVR5cGUgPSB0aGlzLmRhdGFUeXBlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
Lmxvb3BCZWhhdmlvciA9IHRoaXMubG9vcE1vZGU7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QuZW5hYmxlQmxlbmRpbmcgPSB0aGlzLmVuYWJsZUJsZW5kaW5nOworICAgICAgICBzZXJpYWxp
emF0aW9uT2JqZWN0LmJsZW5kaW5nU3BlZWQgPSB0aGlzLmJsZW5kaW5nU3BlZWQ7CisgICAgICAg
IHZhciBkYXRhVHlwZSA9IHRoaXMuZGF0YVR5cGU7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3Qua2V5cyA9IFtdOworICAgICAgICB2YXIga2V5cyA9IHRoaXMuZ2V0S2V5cygpOworICAgICAg
ICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwga2V5cy5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgIHZhciBhbmltYXRpb25LZXkgPSBrZXlzW2luZGV4XTsKKyAgICAgICAgICAgIHZh
ciBrZXkgPSB7fTsKKyAgICAgICAgICAgIGtleS5mcmFtZSA9IGFuaW1hdGlvbktleS5mcmFtZTsK
KyAgICAgICAgICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFu
aW1hdGlvbi5BTklNQVRJT05UWVBFX0ZMT0FUOgorICAgICAgICAgICAgICAgICAgICBrZXkudmFs
dWVzID0gW2FuaW1hdGlvbktleS52YWx1ZV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgQW5pbWF0aW9uLkFOSU1BVElPTlRZUEVfUVVBVEVSTklPTjoK
KyAgICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbi5BTklNQVRJT05UWVBFX01BVFJJWDoKKyAg
ICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbi5BTklNQVRJT05UWVBFX1ZFQ1RPUjM6CisgICAg
ICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OVFlQRV9DT0xPUjM6CisgICAgICAg
ICAgICAgICAgICAgIGtleS52YWx1ZXMgPSBhbmltYXRpb25LZXkudmFsdWUuYXNBcnJheSgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3Qua2V5cy5wdXNoKGtleSk7CisgICAgICAgIH0KKyAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5yYW5nZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0
aGlzLl9yYW5nZXMpIHsKKyAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9yYW5nZXNbbmFt
ZV07CisgICAgICAgICAgICBpZiAoIXNvdXJjZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJhbmdlID0ge307CisgICAgICAgICAg
ICByYW5nZS5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHJhbmdlLmZyb20gPSBzb3VyY2UuZnJv
bTsKKyAgICAgICAgICAgIHJhbmdlLnRvID0gc291cmNlLnRvOworICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5yYW5nZXMucHVzaChyYW5nZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQW5pbWF0aW9uLCAiQU5JTUFUSU9OVFlQRV9GTE9BVCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldCB0aGUgZmxvYXQgYW5pbWF0aW9uIHR5cGUKKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGlvbi5fQU5JTUFU
SU9OVFlQRV9GTE9BVDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KEFuaW1hdGlvbiwgIkFOSU1BVElPTlRZUEVfVkVDVE9SMyIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldCB0aGUgVmVjdG9yMyBhbmltYXRpb24gdHlwZQorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0aW9uLl9B
TklNQVRJT05UWVBFX1ZFQ1RPUjM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShBbmltYXRpb24sICJBTklNQVRJT05UWVBFX1ZFQ1RPUjIiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXQgdGhlIFZlY3RvcjIgYW5pbWF0aW9uIHR5cGUKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1h
dGlvbi5fQU5JTUFUSU9OVFlQRV9WRUNUT1IyOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQW5pbWF0aW9uLCAiQU5JTUFUSU9OVFlQRV9TSVpFIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSBTaXplIGFuaW1hdGlvbiB0eXBlCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBBbmlt
YXRpb24uX0FOSU1BVElPTlRZUEVfU0laRTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbiwgIkFOSU1BVElPTlRZUEVfUVVBVEVSTklPTiIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCB0aGUgUXVhdGVybmlvbiBhbmltYXRpb24gdHlw
ZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gQW5pbWF0aW9uLl9BTklNQVRJT05UWVBFX1FVQVRFUk5JT047CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBbmltYXRpb24sICJBTklNQVRJT05UWVBF
X01BVFJJWCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCB0aGUgTWF0cml4IGFuaW1h
dGlvbiB0eXBlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiBBbmltYXRpb24uX0FOSU1BVElPTlRZUEVfTUFUUklYOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQW5pbWF0aW9uLCAiQU5JTUFUSU9O
VFlQRV9DT0xPUjMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgdGhlIENvbG9yMyBh
bmltYXRpb24gdHlwZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gQW5pbWF0aW9uLl9BTklNQVRJT05UWVBFX0NPTE9SMzsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbiwgIkFOSU1B
VElPTkxPT1BNT0RFX1JFTEFUSVZFIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRo
ZSBSZWxhdGl2ZSBMb29wIE1vZGUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGlvbi5fQU5JTUFUSU9OTE9PUE1PREVfUkVM
QVRJVkU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBbmlt
YXRpb24sICJBTklNQVRJT05MT09QTU9ERV9DWUNMRSIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldCB0aGUgQ3ljbGUgTG9vcCBNb2RlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRpb24uX0FOSU1BVElPTkxPT1BN
T0RFX0NZQ0xFOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
QW5pbWF0aW9uLCAiQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXQgdGhlIENvbnN0YW50IExvb3AgTW9kZQorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0aW9uLl9BTklN
QVRJT05MT09QTU9ERV9DT05TVEFOVDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBBbmltYXRpb24uX1VuaXZlcnNhbExlcnAgPSBmdW5jdGlvbiAobGVmdCwgcmln
aHQsIGFtb3VudCkgeworICAgICAgICB2YXIgY29uc3RydWN0b3IgPSBsZWZ0LmNvbnN0cnVjdG9y
OworICAgICAgICBpZiAoY29uc3RydWN0b3IuTGVycCkgeyAvLyBMZXJwIHN1cHBvcnRlZAorICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLkxlcnAobGVmdCwgcmlnaHQsIGFtb3VudCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3RydWN0b3IuU2xlcnApIHsgLy8gU2xlcnAg
c3VwcG9ydGVkCisgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3IuU2xlcnAobGVmdCwgcmln
aHQsIGFtb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobGVmdC50b0ZpeGVkKSB7
IC8vIE51bWJlcgorICAgICAgICAgICAgcmV0dXJuIGxlZnQgKiAoMS4wIC0gYW1vdW50KSArIGFt
b3VudCAqIHJpZ2h0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAvLyBCbGVuZGluZyBub3Qg
c3VwcG9ydGVkCisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFBhcnNlcyBhbiBhbmltYXRpb24gb2JqZWN0IGFuZCBjcmVhdGVzIGFu
IGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSBwYXJzZWRBbmltYXRpb24gUGFyc2VkIGFuaW1hdGlv
biBvYmplY3QKKyAgICAgKiBAcmV0dXJucyBBbmltYXRpb24gb2JqZWN0CisgICAgICovCisgICAg
QW5pbWF0aW9uLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZEFuaW1hdGlvbikgeworICAgICAgICB2
YXIgYW5pbWF0aW9uID0gbmV3IEFuaW1hdGlvbihwYXJzZWRBbmltYXRpb24ubmFtZSwgcGFyc2Vk
QW5pbWF0aW9uLnByb3BlcnR5LCBwYXJzZWRBbmltYXRpb24uZnJhbWVQZXJTZWNvbmQsIHBhcnNl
ZEFuaW1hdGlvbi5kYXRhVHlwZSwgcGFyc2VkQW5pbWF0aW9uLmxvb3BCZWhhdmlvcik7CisgICAg
ICAgIHZhciBkYXRhVHlwZSA9IHBhcnNlZEFuaW1hdGlvbi5kYXRhVHlwZTsKKyAgICAgICAgdmFy
IGtleXMgPSBbXTsKKyAgICAgICAgdmFyIGRhdGE7CisgICAgICAgIHZhciBpbmRleDsKKyAgICAg
ICAgaWYgKHBhcnNlZEFuaW1hdGlvbi5lbmFibGVCbGVuZGluZykgeworICAgICAgICAgICAgYW5p
bWF0aW9uLmVuYWJsZUJsZW5kaW5nID0gcGFyc2VkQW5pbWF0aW9uLmVuYWJsZUJsZW5kaW5nOwor
ICAgICAgICB9CisgICAgICAgIGlmIChwYXJzZWRBbmltYXRpb24uYmxlbmRpbmdTcGVlZCkgewor
ICAgICAgICAgICAgYW5pbWF0aW9uLmJsZW5kaW5nU3BlZWQgPSBwYXJzZWRBbmltYXRpb24uYmxl
bmRpbmdTcGVlZDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBw
YXJzZWRBbmltYXRpb24ua2V5cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBr
ZXkgPSBwYXJzZWRBbmltYXRpb24ua2V5c1tpbmRleF07CisgICAgICAgICAgICB2YXIgaW5UYW5n
ZW50OworICAgICAgICAgICAgdmFyIG91dFRhbmdlbnQ7CisgICAgICAgICAgICBzd2l0Y2ggKGRh
dGFUeXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OVFlQRV9G
TE9BVDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGtleS52YWx1ZXNbMF07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChrZXkudmFsdWVzLmxlbmd0aCA+PSAxKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpblRhbmdlbnQgPSBrZXkudmFsdWVzWzFdOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChrZXkudmFsdWVzLmxlbmd0aCA+PSAyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRUYW5nZW50ID0ga2V5LnZhbHVlc1syXTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIEFuaW1hdGlvbi5BTklNQVRJT05UWVBFX1FVQVRFUk5JT046CisgICAgICAgICAg
ICAgICAgICAgIGRhdGEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siUXVhdGVybmlvbiJdLkZyb21BcnJheShrZXkudmFsdWVzKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGtleS52YWx1ZXMubGVuZ3RoID49IDgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBfaW5UYW5nZW50ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlF1YXRlcm5pb24iXS5Gcm9tQXJyYXkoa2V5LnZhbHVlcy5zbGljZSg0
LCA4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9pblRhbmdlbnQuZXF1YWxzKF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJRdWF0ZXJuaW9u
Il0uWmVybygpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluVGFuZ2VudCA9IF9p
blRhbmdlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGtleS52YWx1ZXMubGVuZ3RoID49IDEyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgX291dFRhbmdlbnQgPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLkZyb21BcnJheShr
ZXkudmFsdWVzLnNsaWNlKDgsIDEyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9v
dXRUYW5nZW50LmVxdWFscyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siUXVhdGVybmlvbiJdLlplcm8oKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRUYW5nZW50ID0gX291dFRhbmdlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBBbmltYXRpb24uQU5JTUFUSU9OVFlQRV9NQVRSSVg6CisgICAgICAg
ICAgICAgICAgICAgIGRhdGEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siTWF0cml4Il0uRnJvbUFycmF5KGtleS52YWx1ZXMpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbi5BTklNQVRJT05U
WVBFX0NPTE9SMzoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9NYXRoc19tYXRoX2NvbG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9yMyJdLkZyb21BcnJheShrZXkudmFs
dWVzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBB
bmltYXRpb24uQU5JTUFUSU9OVFlQRV9WRUNUT1IzOgorICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkZyb21BcnJheShrZXkudmFsdWVzKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIg
a2V5RGF0YSA9IHt9OworICAgICAgICAgICAga2V5RGF0YS5mcmFtZSA9IGtleS5mcmFtZTsKKyAg
ICAgICAgICAgIGtleURhdGEudmFsdWUgPSBkYXRhOworICAgICAgICAgICAgaWYgKGluVGFuZ2Vu
dCAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICBrZXlEYXRhLmluVGFuZ2VudCA9IGlu
VGFuZ2VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvdXRUYW5nZW50ICE9IHVu
ZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIGtleURhdGEub3V0VGFuZ2VudCA9IG91dFRhbmdl
bnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrZXlzLnB1c2goa2V5RGF0YSk7CisgICAg
ICAgIH0KKyAgICAgICAgYW5pbWF0aW9uLnNldEtleXMoa2V5cyk7CisgICAgICAgIGlmIChwYXJz
ZWRBbmltYXRpb24ucmFuZ2VzKSB7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXgg
PCBwYXJzZWRBbmltYXRpb24ucmFuZ2VzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAg
ICAgIGRhdGEgPSBwYXJzZWRBbmltYXRpb24ucmFuZ2VzW2luZGV4XTsKKyAgICAgICAgICAgICAg
ICBhbmltYXRpb24uY3JlYXRlUmFuZ2UoZGF0YS5uYW1lLCBkYXRhLmZyb20sIGRhdGEudG8pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBhbmltYXRpb247CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBcHBlbmRzIHRoZSBzZXJpYWxpemVkIGFuaW1hdGlvbnMgZnJv
bSB0aGUgc291cmNlIGFuaW1hdGlvbnMKKyAgICAgKiBAcGFyYW0gc291cmNlIFNvdXJjZSBjb250
YWluaW5nIHRoZSBhbmltYXRpb25zCisgICAgICogQHBhcmFtIGRlc3RpbmF0aW9uIFRhcmdldCB0
byBzdG9yZSB0aGUgYW5pbWF0aW9ucworICAgICAqLworICAgIEFuaW1hdGlvbi5BcHBlbmRTZXJp
YWxpemVkQW5pbWF0aW9ucyA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3RpbmF0aW9uKSB7CisgICAg
ICAgIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2VyaWFs
aXphdGlvbkhlbHBlciJdLkFwcGVuZFNlcmlhbGl6ZWRBbmltYXRpb25zKHNvdXJjZSwgZGVzdGlu
YXRpb24pOworICAgIH07CisgICAgLyoqCisgICAgICogVXNlIG1hdHJpeCBpbnRlcnBvbGF0aW9u
IGluc3RlYWQgb2YgdXNpbmcgZGlyZWN0IGtleSB2YWx1ZSB3aGVuIGFuaW1hdGluZyBtYXRyaWNl
cworICAgICAqLworICAgIEFuaW1hdGlvbi5BbGxvd01hdHJpY2VzSW50ZXJwb2xhdGlvbiA9IGZh
bHNlOworICAgIC8qKgorICAgICAqIFdoZW4gbWF0cml4IGludGVycG9sYXRpb24gaXMgZW5hYmxl
ZCwgdGhpcyBib29sZWFuIGZvcmNlcyB0aGUgc3lzdGVtIHRvIHVzZSBNYXRyaXguRGVjb21wb3Nl
TGVycCBpbnN0ZWFkIG9mIE1hdHJpeC5MZXJwLiBJbnRlcnBvbGF0aW9uIGlzIG1vcmUgcHJlY2lz
ZSBidXQgc2xvd2VyCisgICAgICovCisgICAgQW5pbWF0aW9uLkFsbG93TWF0cml4RGVjb21wb3Nl
Rm9ySW50ZXJwb2xhdGlvbiA9IHRydWU7CisgICAgLy8gU3RhdGljcworICAgIC8qKgorICAgICAq
IEZsb2F0IGFuaW1hdGlvbiB0eXBlCisgICAgICovCisgICAgQW5pbWF0aW9uLl9BTklNQVRJT05U
WVBFX0ZMT0FUID0gMDsKKyAgICAvKioKKyAgICAgKiBWZWN0b3IzIGFuaW1hdGlvbiB0eXBlCisg
ICAgICovCisgICAgQW5pbWF0aW9uLl9BTklNQVRJT05UWVBFX1ZFQ1RPUjMgPSAxOworICAgIC8q
KgorICAgICAqIFF1YXRlcm5pb24gYW5pbWF0aW9uIHR5cGUKKyAgICAgKi8KKyAgICBBbmltYXRp
b24uX0FOSU1BVElPTlRZUEVfUVVBVEVSTklPTiA9IDI7CisgICAgLyoqCisgICAgICogTWF0cml4
IGFuaW1hdGlvbiB0eXBlCisgICAgICovCisgICAgQW5pbWF0aW9uLl9BTklNQVRJT05UWVBFX01B
VFJJWCA9IDM7CisgICAgLyoqCisgICAgICogQ29sb3IzIGFuaW1hdGlvbiB0eXBlCisgICAgICov
CisgICAgQW5pbWF0aW9uLl9BTklNQVRJT05UWVBFX0NPTE9SMyA9IDQ7CisgICAgLyoqCisgICAg
ICogVmVjdG9yMiBhbmltYXRpb24gdHlwZQorICAgICAqLworICAgIEFuaW1hdGlvbi5fQU5JTUFU
SU9OVFlQRV9WRUNUT1IyID0gNTsKKyAgICAvKioKKyAgICAgKiBTaXplIGFuaW1hdGlvbiB0eXBl
CisgICAgICovCisgICAgQW5pbWF0aW9uLl9BTklNQVRJT05UWVBFX1NJWkUgPSA2OworICAgIC8q
KgorICAgICAqIFJlbGF0aXZlIExvb3AgTW9kZQorICAgICAqLworICAgIEFuaW1hdGlvbi5fQU5J
TUFUSU9OTE9PUE1PREVfUkVMQVRJVkUgPSAwOworICAgIC8qKgorICAgICAqIEN5Y2xlIExvb3Ag
TW9kZQorICAgICAqLworICAgIEFuaW1hdGlvbi5fQU5JTUFUSU9OTE9PUE1PREVfQ1lDTEUgPSAx
OworICAgIC8qKgorICAgICAqIENvbnN0YW50IExvb3AgTW9kZQorICAgICAqLworICAgIEFuaW1h
dGlvbi5fQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQgPSAyOworICAgIHJldHVybiBBbmltYXRp
b247Cit9KCkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5BbmltYXRpb24iXSA9IEFu
aW1hdGlvbjsKK19ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk5vZGUiXS5fQW5p
bWF0aW9uUmFuZ2VGYWN0b3J5ID0gZnVuY3Rpb24gKG5hbWUsIGZyb20sIHRvKSB7IHJldHVybiBu
ZXcgX2FuaW1hdGlvblJhbmdlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFuaW1hdGlv
blJhbmdlIl0obmFtZSwgZnJvbSwgdG8pOyB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9B
bmltYXRpb25zL2FuaW1hdGlvbkV2ZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9BbmltYXRpb25zL2FuaW1hdGlvbkV2ZW50LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IEFuaW1hdGlvbkV2ZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkFuaW1hdGlvbkV2ZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBBbmltYXRp
b25FdmVudDsgfSk7CisvKioKKyAqIENvbXBvc2VkIG9mIGEgZnJhbWUsIGFuZCBhbiBhY3Rpb24g
ZnVuY3Rpb24KKyAqLwordmFyIEFuaW1hdGlvbkV2ZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgeworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBhbmltYXRpb24gZXZlbnQK
KyAgICAgKiBAcGFyYW0gZnJhbWUgVGhlIGZyYW1lIGZvciB3aGljaCB0aGUgZXZlbnQgaXMgdHJp
Z2dlcmVkCisgICAgICogQHBhcmFtIGFjdGlvbiBUaGUgZXZlbnQgdG8gcGVyZm9ybSB3aGVuIHRy
aWdnZXJlZAorICAgICAqIEBwYXJhbSBvbmx5T25jZSBTcGVjaWZpZXMgaWYgdGhlIGV2ZW50IHNo
b3VsZCBiZSB0cmlnZ2VyZWQgb25seSBvbmNlCisgICAgICovCisgICAgZnVuY3Rpb24gQW5pbWF0
aW9uRXZlbnQoCisgICAgLyoqIFRoZSBmcmFtZSBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIHRyaWdn
ZXJlZCAqKi8KKyAgICBmcmFtZSwgCisgICAgLyoqIFRoZSBldmVudCB0byBwZXJmb3JtIHdoZW4g
dHJpZ2dlcmVkICoqLworICAgIGFjdGlvbiwgCisgICAgLyoqIFNwZWNpZmllcyBpZiB0aGUgZXZl
bnQgc2hvdWxkIGJlIHRyaWdnZXJlZCBvbmx5IG9uY2UqKi8KKyAgICBvbmx5T25jZSkgeworICAg
ICAgICB0aGlzLmZyYW1lID0gZnJhbWU7CisgICAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uOwor
ICAgICAgICB0aGlzLm9ubHlPbmNlID0gb25seU9uY2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBTcGVjaWZpZXMgaWYgdGhlIGFuaW1hdGlvbiBldmVudCBpcyBkb25lCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLmlzRG9uZSA9IGZhbHNlOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIEFuaW1hdGlvbkV2ZW50LnByb3RvdHlwZS5fY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiBuZXcgQW5pbWF0aW9uRXZlbnQodGhpcy5mcmFtZSwgdGhpcy5hY3Rpb24sIHRo
aXMub25seU9uY2UpOworICAgIH07CisgICAgcmV0dXJuIEFuaW1hdGlvbkV2ZW50OworfSgpKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9BbmltYXRpb25zL2FuaW1hdGlvbkdyb3VwLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9BbmltYXRpb25zL2FuaW1hdGlvbkdyb3VwLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFRhcmdldGVkQW5p
bWF0aW9uLCBBbmltYXRpb25Hcm91cCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJUYXJnZXRlZEFuaW1hdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVGFyZ2V0ZWRBbmlt
YXRpb247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5pbWF0aW9uR3JvdXAiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIEFuaW1hdGlvbkdyb3VwOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
YW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2FuaW1hdGlvbiAqLyAiLi9BbmltYXRpb25zL2FuaW1hdGlvbi50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAq
LyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5n
aW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2lu
ZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FuaW1hdGFibGVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYW5pbWF0
YWJsZSAqLyAiLi9BbmltYXRpb25zL2FuaW1hdGFibGUudHMiKTsKKworCisKKworLyoqCisgKiBU
aGlzIGNsYXNzIGRlZmluZXMgdGhlIGRpcmVjdCBhc3NvY2lhdGlvbiBiZXR3ZWVuIGFuIGFuaW1h
dGlvbiBhbmQgYSB0YXJnZXQKKyAqLwordmFyIFRhcmdldGVkQW5pbWF0aW9uID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFRhcmdldGVkQW5pbWF0aW9uKCkgewor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgdGhlIG9iamVjdAorICAgICAqIEByZXR1
cm5zIHRoZSBKU09OIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgZW50aXR5CisgICAg
ICovCisgICAgVGFyZ2V0ZWRBbmltYXRpb24ucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5hbmltYXRpb24gPSB0aGlzLmFuaW1hdGlvbi5zZXJpYWxpemUoKTsK
KyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50YXJnZXRJZCA9IHRoaXMudGFyZ2V0LmlkOwor
ICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIHJldHVybiBU
YXJnZXRlZEFuaW1hdGlvbjsKK30oKSk7CisKKy8qKgorICogVXNlIHRoaXMgY2xhc3MgdG8gY3Jl
YXRlIGNvb3JkaW5hdGVkIGFuaW1hdGlvbnMgb24gbXVsdGlwbGUgdGFyZ2V0cworICovCit2YXIg
QW5pbWF0aW9uR3JvdXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisg
ICAgICogSW5zdGFudGlhdGVzIGEgbmV3IEFuaW1hdGlvbiBHcm91cC4KKyAgICAgKiBUaGlzIGhl
bHBzIG1hbmFnaW5nIHNldmVyYWwgYW5pbWF0aW9ucyBhdCBvbmNlLgorICAgICAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ncm91cAorICAgICAqIEBwYXJhbSBuYW1lIERl
ZmluZXMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMg
dGhlIHNjZW5lIHRoZSBncm91cCBiZWxvbmdzIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gQW5p
bWF0aW9uR3JvdXAoCisgICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gZ3JvdXAgKi8K
KyAgICBuYW1lLCBzY2VuZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2Vu
ZSA9IG51bGw7IH0KKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5fdGFy
Z2V0ZWRBbmltYXRpb25zID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX2FuaW1hdGFibGVz
ID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX2Zyb20gPSBOdW1iZXIuTUFYX1ZBTFVFOwor
ICAgICAgICB0aGlzLl90byA9IC1OdW1iZXIuTUFYX1ZBTFVFOworICAgICAgICB0aGlzLl9zcGVl
ZFJhdGlvID0gMTsKKyAgICAgICAgdGhpcy5fbG9vcEFuaW1hdGlvbiA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogVGhpcyBvYnNlcnZhYmxlIHdpbGwgbm90aWZ5IHdoZW4gb25lIGFu
aW1hdGlvbiBoYXZlIGVuZGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uQW5pbWF0aW9u
RW5kT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2
ZXIgcmFpc2VkIHdoZW4gb25lIGFuaW1hdGlvbiBsb29wcworICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5vbkFuaW1hdGlvbkxvb3BPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaGlzIG9ic2VydmFibGUgd2lsbCBub3RpZnkgd2hlbiBhbGwgYW5pbWF0aW9u
cyBoYXZlIGVuZGVkLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkFuaW1hdGlvbkdyb3Vw
RW5kT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBv
YnNlcnZhYmxlIHdpbGwgbm90aWZ5IHdoZW4gYWxsIGFuaW1hdGlvbnMgaGF2ZSBwYXVzZWQuCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLm9uQW5pbWF0aW9uR3JvdXBQYXVzZU9ic2VydmFibGUg
PSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNl
cnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgb2JzZXJ2YWJsZSB3aWxs
IG5vdGlmeSB3aGVuIGFsbCBhbmltYXRpb25zIGFyZSBwbGF5aW5nLgorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5vbkFuaW1hdGlvbkdyb3VwUGxheU9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAg
ICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8fCBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7Cisg
ICAgICAgIHRoaXMudW5pcXVlSWQgPSB0aGlzLl9zY2VuZS5nZXRVbmlxdWVJZCgpOworICAgICAg
ICB0aGlzLl9zY2VuZS5hbmltYXRpb25Hcm91cHMucHVzaCh0aGlzKTsKKyAgICB9CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZSwgImZyb20iLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBmaXJzdCBmcmFtZQorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJv
bTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlv
bkdyb3VwLnByb3RvdHlwZSwgInRvIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgbGFzdCBmcmFtZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fdG87CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShBbmltYXRpb25Hcm91cC5wcm90b3R5cGUsICJpc1N0YXJ0ZWQiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgaWYgdGhlIGFuaW1hdGlvbnMgYXJlIHN0
YXJ0ZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2lzU3RhcnRlZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZSwgImlzUGxheWluZyIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgdGhl
IGN1cnJlbnQgZ3JvdXAgaXMgcGxheWluZworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTdGFydGVkICYmICF0aGlzLl9p
c1BhdXNlZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFu
aW1hdGlvbkdyb3VwLnByb3RvdHlwZSwgInNwZWVkUmF0aW8iLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHNwZWVkIHJhdGlvIHRvIHVzZSBmb3IgYWxsIGFuaW1h
dGlvbnMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3NwZWVkUmF0aW87CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHNwZWVkIHJhdGlvIHRvIHVzZSBmb3IgYWxsIGFuaW1h
dGlvbnMKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5fc3BlZWRSYXRpbyA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zcGVlZFJhdGlvID0g
dmFsdWU7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fYW5p
bWF0YWJsZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGFuaW1hdGFi
bGUgPSB0aGlzLl9hbmltYXRhYmxlc1tpbmRleF07CisgICAgICAgICAgICAgICAgYW5pbWF0YWJs
ZS5zcGVlZFJhdGlvID0gdGhpcy5fc3BlZWRSYXRpbzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbkdyb3VwLnByb3Rv
dHlwZSwgImxvb3BBbmltYXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9y
IHNldHMgaWYgYWxsIGFuaW1hdGlvbnMgc2hvdWxkIGxvb3Agb3Igbm90CisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29w
QW5pbWF0aW9uOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3BBbmltYXRpb24gPT09IHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fbG9vcEFu
aW1hdGlvbiA9IHZhbHVlOworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IHRoaXMuX2FuaW1hdGFibGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZh
ciBhbmltYXRhYmxlID0gdGhpcy5fYW5pbWF0YWJsZXNbaW5kZXhdOworICAgICAgICAgICAgICAg
IGFuaW1hdGFibGUubG9vcEFuaW1hdGlvbiA9IHRoaXMuX2xvb3BBbmltYXRpb247CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBbmlt
YXRpb25Hcm91cC5wcm90b3R5cGUsICJ0YXJnZXRlZEFuaW1hdGlvbnMiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIHRoZSB0YXJnZXRlZCBhbmltYXRpb25zIGZvciB0aGlzIGFuaW1h
dGlvbiBncm91cAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0ZWRBbmltYXRpb25zOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQW5pbWF0aW9uR3JvdXAucHJvdG90eXBlLCAi
YW5pbWF0YWJsZXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiByZXR1cm5pbmcgdGhlIGxp
c3Qgb2YgYW5pbWF0YWJsZXMgY29udHJvbGxlZCBieSB0aGlzIGFuaW1hdGlvbiBncm91cC4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2FuaW1hdGFibGVzOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBB
ZGQgYW4gYW5pbWF0aW9uICh3aXRoIGl0cyB0YXJnZXQpIGluIHRoZSBncm91cAorICAgICAqIEBw
YXJhbSBhbmltYXRpb24gZGVmaW5lcyB0aGUgYW5pbWF0aW9uIHdlIHdhbnQgdG8gYWRkCisgICAg
ICogQHBhcmFtIHRhcmdldCBkZWZpbmVzIHRoZSB0YXJnZXQgb2YgdGhlIGFuaW1hdGlvbgorICAg
ICAqIEByZXR1cm5zIHRoZSBUYXJnZXRlZEFuaW1hdGlvbiBvYmplY3QKKyAgICAgKi8KKyAgICBB
bmltYXRpb25Hcm91cC5wcm90b3R5cGUuYWRkVGFyZ2V0ZWRBbmltYXRpb24gPSBmdW5jdGlvbiAo
YW5pbWF0aW9uLCB0YXJnZXQpIHsKKyAgICAgICAgdmFyIHRhcmdldGVkQW5pbWF0aW9uID0gbmV3
IFRhcmdldGVkQW5pbWF0aW9uKCk7CisgICAgICAgIHRhcmdldGVkQW5pbWF0aW9uLmFuaW1hdGlv
biA9IGFuaW1hdGlvbjsKKyAgICAgICAgdGFyZ2V0ZWRBbmltYXRpb24udGFyZ2V0ID0gdGFyZ2V0
OworICAgICAgICB2YXIga2V5cyA9IGFuaW1hdGlvbi5nZXRLZXlzKCk7CisgICAgICAgIGlmICh0
aGlzLl9mcm9tID4ga2V5c1swXS5mcmFtZSkgeworICAgICAgICAgICAgdGhpcy5fZnJvbSA9IGtl
eXNbMF0uZnJhbWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3RvIDwga2V5c1trZXlz
Lmxlbmd0aCAtIDFdLmZyYW1lKSB7CisgICAgICAgICAgICB0aGlzLl90byA9IGtleXNba2V5cy5s
ZW5ndGggLSAxXS5mcmFtZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl90YXJnZXRlZEFuaW1h
dGlvbnMucHVzaCh0YXJnZXRlZEFuaW1hdGlvbik7CisgICAgICAgIHJldHVybiB0YXJnZXRlZEFu
aW1hdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3Jt
YWxpemUgZXZlcnkgYW5pbWF0aW9uIGluIHRoZSBncm91cCB0byBtYWtlIHN1cmUgdGhleSBhbGwg
Z28gZnJvbSBiZWdpbkZyYW1lIHRvIGVuZEZyYW1lCisgICAgICogSXQgY2FuIGFkZCBjb25zdGFu
dCBrZXlzIGF0IGJlZ2luIG9yIGVuZAorICAgICAqIEBwYXJhbSBiZWdpbkZyYW1lIGRlZmluZXMg
dGhlIG5ldyBiZWdpbiBmcmFtZSBmb3IgYWxsIGFuaW1hdGlvbnMgb3IgdGhlIHNtYWxsZXN0IGJl
Z2luIGZyYW1lIG9mIGFsbCBhbmltYXRpb25zIGlmIG51bGwgKGRlZmF1bHRzIHRvIG51bGwpCisg
ICAgICogQHBhcmFtIGVuZEZyYW1lIGRlZmluZXMgdGhlIG5ldyBlbmQgZnJhbWUgZm9yIGFsbCBh
bmltYXRpb25zIG9yIHRoZSBsYXJnZXN0IGVuZCBmcmFtZSBvZiBhbGwgYW5pbWF0aW9ucyBpZiBu
dWxsIChkZWZhdWx0cyB0byBudWxsKQorICAgICAqIEByZXR1cm5zIHRoZSBhbmltYXRpb24gZ3Jv
dXAKKyAgICAgKi8KKyAgICBBbmltYXRpb25Hcm91cC5wcm90b3R5cGUubm9ybWFsaXplID0gZnVu
Y3Rpb24gKGJlZ2luRnJhbWUsIGVuZEZyYW1lKSB7CisgICAgICAgIGlmIChiZWdpbkZyYW1lID09
PSB2b2lkIDApIHsgYmVnaW5GcmFtZSA9IG51bGw7IH0KKyAgICAgICAgaWYgKGVuZEZyYW1lID09
PSB2b2lkIDApIHsgZW5kRnJhbWUgPSBudWxsOyB9CisgICAgICAgIGlmIChiZWdpbkZyYW1lID09
IG51bGwpIHsKKyAgICAgICAgICAgIGJlZ2luRnJhbWUgPSB0aGlzLl9mcm9tOworICAgICAgICB9
CisgICAgICAgIGlmIChlbmRGcmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICBlbmRGcmFtZSA9
IHRoaXMuX3RvOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLl90YXJnZXRlZEFuaW1hdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAg
ICB2YXIgdGFyZ2V0ZWRBbmltYXRpb24gPSB0aGlzLl90YXJnZXRlZEFuaW1hdGlvbnNbaW5kZXhd
OworICAgICAgICAgICAgdmFyIGtleXMgPSB0YXJnZXRlZEFuaW1hdGlvbi5hbmltYXRpb24uZ2V0
S2V5cygpOworICAgICAgICAgICAgdmFyIHN0YXJ0S2V5ID0ga2V5c1swXTsKKyAgICAgICAgICAg
IHZhciBlbmRLZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICBpZiAoc3Rh
cnRLZXkuZnJhbWUgPiBiZWdpbkZyYW1lKSB7CisgICAgICAgICAgICAgICAgdmFyIG5ld0tleSA9
IHsKKyAgICAgICAgICAgICAgICAgICAgZnJhbWU6IGJlZ2luRnJhbWUsCisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlOiBzdGFydEtleS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgaW5UYW5n
ZW50OiBzdGFydEtleS5pblRhbmdlbnQsCisgICAgICAgICAgICAgICAgICAgIG91dFRhbmdlbnQ6
IHN0YXJ0S2V5Lm91dFRhbmdlbnQsCisgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb246
IHN0YXJ0S2V5LmludGVycG9sYXRpb24KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIGtleXMuc3BsaWNlKDAsIDAsIG5ld0tleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZW5kS2V5LmZyYW1lIDwgZW5kRnJhbWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgbmV3
S2V5ID0geworICAgICAgICAgICAgICAgICAgICBmcmFtZTogZW5kRnJhbWUsCisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlOiBlbmRLZXkudmFsdWUsCisgICAgICAgICAgICAgICAgICAgIGluVGFu
Z2VudDogZW5kS2V5Lm91dFRhbmdlbnQsCisgICAgICAgICAgICAgICAgICAgIG91dFRhbmdlbnQ6
IGVuZEtleS5vdXRUYW5nZW50LAorICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uOiBl
bmRLZXkuaW50ZXJwb2xhdGlvbgorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
a2V5cy5wdXNoKG5ld0tleSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZnJvbSA9IGJlZ2luRnJhbWU7CisgICAgICAgIHRoaXMuX3RvID0gZW5kRnJhbWU7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU3RhcnQgYWxsIGFuaW1h
dGlvbnMgb24gZ2l2ZW4gdGFyZ2V0cworICAgICAqIEBwYXJhbSBsb29wIGRlZmluZXMgaWYgYW5p
bWF0aW9ucyBtdXN0IGxvb3AKKyAgICAgKiBAcGFyYW0gc3BlZWRSYXRpbyBkZWZpbmVzIHRoZSBy
YXRpbyB0byBhcHBseSB0byBhbmltYXRpb24gc3BlZWQgKDEgYnkgZGVmYXVsdCkKKyAgICAgKiBA
cGFyYW0gZnJvbSBkZWZpbmVzIHRoZSBmcm9tIGtleSAob3B0aW9uYWwpCisgICAgICogQHBhcmFt
IHRvIGRlZmluZXMgdGhlIHRvIGtleSAob3B0aW9uYWwpCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgYW5pbWF0aW9uIGdyb3VwCisgICAgICovCisgICAgQW5pbWF0aW9uR3JvdXAucHJvdG90
eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKGxvb3AsIHNwZWVkUmF0aW8sIGZyb20sIHRvKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChsb29wID09PSB2b2lkIDApIHsgbG9v
cCA9IGZhbHNlOyB9CisgICAgICAgIGlmIChzcGVlZFJhdGlvID09PSB2b2lkIDApIHsgc3BlZWRS
YXRpbyA9IDE7IH0KKyAgICAgICAgaWYgKHRoaXMuX2lzU3RhcnRlZCB8fCB0aGlzLl90YXJnZXRl
ZEFuaW1hdGlvbnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9sb29wQW5pbWF0aW9uID0gbG9vcDsKKyAgICAgICAgdmFy
IF9sb29wXzEgPSBmdW5jdGlvbiAodGFyZ2V0ZWRBbmltYXRpb24pIHsKKyAgICAgICAgICAgIHZh
ciBhbmltYXRhYmxlID0gdGhpc18xLl9zY2VuZS5iZWdpbkRpcmVjdEFuaW1hdGlvbih0YXJnZXRl
ZEFuaW1hdGlvbi50YXJnZXQsIFt0YXJnZXRlZEFuaW1hdGlvbi5hbmltYXRpb25dLCBmcm9tICE9
PSB1bmRlZmluZWQgPyBmcm9tIDogdGhpc18xLl9mcm9tLCB0byAhPT0gdW5kZWZpbmVkID8gdG8g
OiB0aGlzXzEuX3RvLCBsb29wLCBzcGVlZFJhdGlvKTsKKyAgICAgICAgICAgIGFuaW1hdGFibGUu
b25BbmltYXRpb25FbmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMub25B
bmltYXRpb25FbmRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0YXJnZXRlZEFuaW1hdGlvbik7
CisgICAgICAgICAgICAgICAgX3RoaXMuX2NoZWNrQW5pbWF0aW9uR3JvdXBFbmRlZChhbmltYXRh
YmxlKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBhbmltYXRhYmxlLm9uQW5pbWF0aW9u
TG9vcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5vbkFuaW1hdGlvbkxv
b3BPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0YXJnZXRlZEFuaW1hdGlvbik7CisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgdGhpc18xLl9hbmltYXRhYmxlcy5wdXNoKGFuaW1hdGFibGUp
OworICAgICAgICB9OworICAgICAgICB2YXIgdGhpc18xID0gdGhpczsKKyAgICAgICAgZm9yICh2
YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3RhcmdldGVkQW5pbWF0aW9uczsgX2kgPCBfYS5sZW5ndGg7
IF9pKyspIHsKKyAgICAgICAgICAgIHZhciB0YXJnZXRlZEFuaW1hdGlvbiA9IF9hW19pXTsKKyAg
ICAgICAgICAgIF9sb29wXzEodGFyZ2V0ZWRBbmltYXRpb24pOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX3NwZWVkUmF0aW8gPSBzcGVlZFJhdGlvOworICAgICAgICBpZiAoZnJvbSAhPT0gdW5k
ZWZpbmVkICYmIHRvICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGlmIChmcm9tIDwgdG8g
JiYgdGhpcy5fc3BlZWRSYXRpbyA8IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHRv
OworICAgICAgICAgICAgICAgIHRvID0gZnJvbTsKKyAgICAgICAgICAgICAgICBmcm9tID0gdGVt
cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGZyb20gPiB0byAmJiB0aGlz
Ll9zcGVlZFJhdGlvID4gMCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3NwZWVkUmF0aW8gPSAt
c3BlZWRSYXRpbzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pc1N0
YXJ0ZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9pc1BhdXNlZCA9IGZhbHNlOworICAgICAgICB0
aGlzLm9uQW5pbWF0aW9uR3JvdXBQbGF5T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUGF1c2UgYWxs
IGFuaW1hdGlvbnMKKyAgICAgKiBAcmV0dXJucyB0aGUgYW5pbWF0aW9uIGdyb3VwCisgICAgICov
CisgICAgQW5pbWF0aW9uR3JvdXAucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAoIXRoaXMuX2lzU3RhcnRlZCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5faXNQYXVzZWQgPSB0cnVlOworICAgICAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fYW5pbWF0YWJsZXMubGVuZ3RoOyBpbmRleCsrKSB7
CisgICAgICAgICAgICB2YXIgYW5pbWF0YWJsZSA9IHRoaXMuX2FuaW1hdGFibGVzW2luZGV4XTsK
KyAgICAgICAgICAgIGFuaW1hdGFibGUucGF1c2UoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Lm9uQW5pbWF0aW9uR3JvdXBQYXVzZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBsYXkgYWxsIGFu
aW1hdGlvbnMgdG8gaW5pdGlhbCBzdGF0ZQorICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzdGFy
dCgpIHRoZSBhbmltYXRpb25zIGlmIHRoZXkgd2VyZSBub3Qgc3RhcnRlZCBvciB3aWxsIHJlc3Rh
cnQoKSB0aGVtIGlmIHRoZXkgd2VyZSBwYXVzZWQKKyAgICAgKiBAcGFyYW0gbG9vcCBkZWZpbmVz
IGlmIGFuaW1hdGlvbnMgbXVzdCBsb29wCisgICAgICogQHJldHVybnMgdGhlIGFuaW1hdGlvbiBn
cm91cAorICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rp
b24gKGxvb3ApIHsKKyAgICAgICAgLy8gb25seSBpZiBhbGwgYW5pbWF0YWJsZXMgYXJlIHJlYWR5
IGFuZCBleGlzdAorICAgICAgICBpZiAodGhpcy5pc1N0YXJ0ZWQgJiYgdGhpcy5fYW5pbWF0YWJs
ZXMubGVuZ3RoID09PSB0aGlzLl90YXJnZXRlZEFuaW1hdGlvbnMubGVuZ3RoKSB7CisgICAgICAg
ICAgICBpZiAobG9vcCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5sb29w
QW5pbWF0aW9uID0gbG9vcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMucmVzdGFy
dCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5zdG9wKCk7
CisgICAgICAgICAgICB0aGlzLnN0YXJ0KGxvb3AsIHRoaXMuX3NwZWVkUmF0aW8pOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogUmVzZXQgYWxsIGFuaW1hdGlvbnMgdG8gaW5pdGlh
bCBzdGF0ZQorICAgICAqIEByZXR1cm5zIHRoZSBhbmltYXRpb24gZ3JvdXAKKyAgICAgKi8KKyAg
ICBBbmltYXRpb25Hcm91cC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICghdGhpcy5faXNTdGFydGVkKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fYW5pbWF0YWJs
ZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgYW5pbWF0YWJsZSA9IHRoaXMu
X2FuaW1hdGFibGVzW2luZGV4XTsKKyAgICAgICAgICAgIGFuaW1hdGFibGUucmVzZXQoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
c3RhcnQgYW5pbWF0aW9ucyBmcm9tIGtleSAwCisgICAgICogQHJldHVybnMgdGhlIGFuaW1hdGlv
biBncm91cAorICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZS5yZXN0YXJ0ID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX2lzU3RhcnRlZCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBp
bmRleCA8IHRoaXMuX2FuaW1hdGFibGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAg
dmFyIGFuaW1hdGFibGUgPSB0aGlzLl9hbmltYXRhYmxlc1tpbmRleF07CisgICAgICAgICAgICBh
bmltYXRhYmxlLnJlc3RhcnQoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uQW5pbWF0aW9u
R3JvdXBQbGF5T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcCBhbGwgYW5pbWF0aW9ucworICAg
ICAqIEByZXR1cm5zIHRoZSBhbmltYXRpb24gZ3JvdXAKKyAgICAgKi8KKyAgICBBbmltYXRpb25H
cm91cC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9p
c1N0YXJ0ZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAg
IHZhciBsaXN0ID0gdGhpcy5fYW5pbWF0YWJsZXMuc2xpY2UoKTsKKyAgICAgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBs
aXN0W2luZGV4XS5zdG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5faXNTdGFydGVkID0g
ZmFsc2U7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
IGFuaW1hdGlvbiB3ZWlnaHQgZm9yIGFsbCBhbmltYXRhYmxlcworICAgICAqIEBwYXJhbSB3ZWln
aHQgZGVmaW5lcyB0aGUgd2VpZ2h0IHRvIHVzZQorICAgICAqIEByZXR1cm4gdGhlIGFuaW1hdGlv
bkdyb3VwCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9h
bmltYXRpb25zI2FuaW1hdGlvbi13ZWlnaHRzCisgICAgICovCisgICAgQW5pbWF0aW9uR3JvdXAu
cHJvdG90eXBlLnNldFdlaWdodEZvckFsbEFuaW1hdGFibGVzID0gZnVuY3Rpb24gKHdlaWdodCkg
eworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fYW5pbWF0YWJsZXMu
bGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgYW5pbWF0YWJsZSA9IHRoaXMuX2Fu
aW1hdGFibGVzW2luZGV4XTsKKyAgICAgICAgICAgIGFuaW1hdGFibGUud2VpZ2h0ID0gd2VpZ2h0
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAg
ICogU3luY2hyb25pemUgYW5kIG5vcm1hbGl6ZSBhbGwgYW5pbWF0YWJsZXMgd2l0aCBhIHNvdXJj
ZSBhbmltYXRhYmxlCisgICAgICogQHBhcmFtIHJvb3QgZGVmaW5lcyB0aGUgcm9vdCBhbmltYXRh
YmxlIHRvIHN5bmNocm9uaXplIHdpdGgKKyAgICAgKiBAcmV0dXJuIHRoZSBhbmltYXRpb25Hcm91
cAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0
aW9ucyNhbmltYXRpb24td2VpZ2h0cworICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLnByb3Rv
dHlwZS5zeW5jQWxsQW5pbWF0aW9uc1dpdGggPSBmdW5jdGlvbiAocm9vdCkgeworICAgICAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fYW5pbWF0YWJsZXMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICB2YXIgYW5pbWF0YWJsZSA9IHRoaXMuX2FuaW1hdGFibGVzW2lu
ZGV4XTsKKyAgICAgICAgICAgIGFuaW1hdGFibGUuc3luY1dpdGgocm9vdCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHb2VzIHRvIGEg
c3BlY2lmaWMgZnJhbWUgaW4gdGhpcyBhbmltYXRpb24gZ3JvdXAKKyAgICAgKiBAcGFyYW0gZnJh
bWUgdGhlIGZyYW1lIG51bWJlciB0byBnbyB0bworICAgICAqIEByZXR1cm4gdGhlIGFuaW1hdGlv
bkdyb3VwCisgICAgICovCisgICAgQW5pbWF0aW9uR3JvdXAucHJvdG90eXBlLmdvVG9GcmFtZSA9
IGZ1bmN0aW9uIChmcmFtZSkgeworICAgICAgICBpZiAoIXRoaXMuX2lzU3RhcnRlZCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IHRoaXMuX2FuaW1hdGFibGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgdmFyIGFuaW1hdGFibGUgPSB0aGlzLl9hbmltYXRhYmxlc1tpbmRleF07CisgICAgICAg
ICAgICBhbmltYXRhYmxlLmdvVG9GcmFtZShmcmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlIGFsbCBhc3NvY2lhdGVk
IHJlc291cmNlcworICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZS5kaXNwb3Nl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl90YXJnZXRlZEFuaW1hdGlvbnMgPSBbXTsK
KyAgICAgICAgdGhpcy5fYW5pbWF0YWJsZXMgPSBbXTsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhp
cy5fc2NlbmUuYW5pbWF0aW9uR3JvdXBzLmluZGV4T2YodGhpcyk7CisgICAgICAgIGlmIChpbmRl
eCA+IC0xKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5hbmltYXRpb25Hcm91cHMuc3BsaWNl
KGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uQW5pbWF0aW9uRW5kT2JzZXJ2
YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQW5pbWF0aW9uR3JvdXBFbmRPYnNlcnZhYmxl
LmNsZWFyKCk7CisgICAgICAgIHRoaXMub25BbmltYXRpb25Hcm91cFBhdXNlT2JzZXJ2YWJsZS5j
bGVhcigpOworICAgICAgICB0aGlzLm9uQW5pbWF0aW9uR3JvdXBQbGF5T2JzZXJ2YWJsZS5jbGVh
cigpOworICAgICAgICB0aGlzLm9uQW5pbWF0aW9uTG9vcE9ic2VydmFibGUuY2xlYXIoKTsKKyAg
ICB9OworICAgIEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZS5fY2hlY2tBbmltYXRpb25Hcm91cEVu
ZGVkID0gZnVuY3Rpb24gKGFuaW1hdGFibGUpIHsKKyAgICAgICAgLy8gYW5pbWF0YWJsZSBzaG91
bGQgYmUgdGFrZW4gb3V0IG9mIHRoZSBhcnJheQorICAgICAgICB2YXIgaWR4ID0gdGhpcy5fYW5p
bWF0YWJsZXMuaW5kZXhPZihhbmltYXRhYmxlKTsKKyAgICAgICAgaWYgKGlkeCA+IC0xKSB7Cisg
ICAgICAgICAgICB0aGlzLl9hbmltYXRhYmxlcy5zcGxpY2UoaWR4LCAxKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBhbGwgYW5pbWF0YWJsZXMgd2VyZSByZW1vdmVkPyBhbmltYXRpb24gZ3JvdXAg
ZW5kZWQhCisgICAgICAgIGlmICh0aGlzLl9hbmltYXRhYmxlcy5sZW5ndGggPT09IDApIHsKKyAg
ICAgICAgICAgIHRoaXMuX2lzU3RhcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5vbkFu
aW1hdGlvbkdyb3VwRW5kT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBn
cm91cCBhbmQgcmV0dXJucyBhIGNvcHkKKyAgICAgKiBAcGFyYW0gbmV3TmFtZSBkZWZpbmVzIHRo
ZSBuYW1lIG9mIHRoZSBuZXcgZ3JvdXAKKyAgICAgKiBAcGFyYW0gdGFyZ2V0Q29udmVydGVyIGRl
ZmluZXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdXNlZCB0byBjb252ZXJ0IGN1cnJlbnQgYW5pbWF0
aW9uIHRhcmdldHMgdG8gbmV3IG9uZXMKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGFuaWFtdGlv
biBncm91cAorICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZS5jbG9uZSA9IGZ1
bmN0aW9uIChuZXdOYW1lLCB0YXJnZXRDb252ZXJ0ZXIpIHsKKyAgICAgICAgdmFyIG5ld0dyb3Vw
ID0gbmV3IEFuaW1hdGlvbkdyb3VwKG5ld05hbWUgfHwgdGhpcy5uYW1lLCB0aGlzLl9zY2VuZSk7
CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl90YXJnZXRlZEFuaW1hdGlvbnM7
IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgdGFyZ2V0QW5pbWF0aW9u
ID0gX2FbX2ldOworICAgICAgICAgICAgbmV3R3JvdXAuYWRkVGFyZ2V0ZWRBbmltYXRpb24odGFy
Z2V0QW5pbWF0aW9uLmFuaW1hdGlvbi5jbG9uZSgpLCB0YXJnZXRDb252ZXJ0ZXIgPyB0YXJnZXRD
b252ZXJ0ZXIodGFyZ2V0QW5pbWF0aW9uLnRhcmdldCkgOiB0YXJnZXRBbmltYXRpb24udGFyZ2V0
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3R3JvdXA7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTZXJpYWxpemVzIHRoZSBhbmltYXRpb25Hcm91cCB0byBhbiBvYmplY3QKKyAgICAg
KiBAcmV0dXJucyBTZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIEFuaW1hdGlvbkdyb3Vw
LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxp
emF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubmFtZSA9IHRo
aXMubmFtZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5mcm9tID0gdGhpcy5mcm9tOwor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRvID0gdGhpcy50bzsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC50YXJnZXRlZEFuaW1hdGlvbnMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIg
dGFyZ2V0ZWRBbmltYXRpb25JbmRleCA9IDA7IHRhcmdldGVkQW5pbWF0aW9uSW5kZXggPCB0aGlz
LnRhcmdldGVkQW5pbWF0aW9ucy5sZW5ndGg7IHRhcmdldGVkQW5pbWF0aW9uSW5kZXgrKykgewor
ICAgICAgICAgICAgdmFyIHRhcmdldGVkQW5pbWF0aW9uID0gdGhpcy50YXJnZXRlZEFuaW1hdGlv
bnNbdGFyZ2V0ZWRBbmltYXRpb25JbmRleF07CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LnRhcmdldGVkQW5pbWF0aW9uc1t0YXJnZXRlZEFuaW1hdGlvbkluZGV4XSA9IHRhcmdldGVk
QW5pbWF0aW9uLnNlcmlhbGl6ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXJpYWxp
emF0aW9uT2JqZWN0OworICAgIH07CisgICAgLy8gU3RhdGljcworICAgIC8qKgorICAgICAqIFJl
dHVybnMgYSBuZXcgQW5pbWF0aW9uR3JvdXAgb2JqZWN0IHBhcnNlZCBmcm9tIHRoZSBzb3VyY2Ug
cHJvdmlkZWQuCisgICAgICogQHBhcmFtIHBhcnNlZEFuaW1hdGlvbkdyb3VwIGRlZmluZXMgdGhl
IHNvdXJjZQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGF0IHdpbGwg
cmVjZWl2ZSB0aGUgYW5pbWF0aW9uR3JvdXAKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBBbmltYXRp
b25Hcm91cAorICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLlBhcnNlID0gZnVuY3Rpb24gKHBh
cnNlZEFuaW1hdGlvbkdyb3VwLCBzY2VuZSkgeworICAgICAgICB2YXIgYW5pbWF0aW9uR3JvdXAg
PSBuZXcgQW5pbWF0aW9uR3JvdXAocGFyc2VkQW5pbWF0aW9uR3JvdXAubmFtZSwgc2NlbmUpOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnNlZEFuaW1hdGlvbkdyb3VwLnRhcmdldGVk
QW5pbWF0aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIHRhcmdldGVkQW5pbWF0
aW9uID0gcGFyc2VkQW5pbWF0aW9uR3JvdXAudGFyZ2V0ZWRBbmltYXRpb25zW2ldOworICAgICAg
ICAgICAgdmFyIGFuaW1hdGlvbiA9IF9hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siQW5pbWF0aW9uIl0uUGFyc2UodGFyZ2V0ZWRBbmltYXRpb24uYW5pbWF0aW9uKTsKKyAg
ICAgICAgICAgIHZhciBpZCA9IHRhcmdldGVkQW5pbWF0aW9uLnRhcmdldElkOworICAgICAgICAg
ICAgaWYgKHRhcmdldGVkQW5pbWF0aW9uLmFuaW1hdGlvbi5wcm9wZXJ0eSA9PT0gImluZmx1ZW5j
ZSIpIHsgLy8gbW9ycGggdGFyZ2V0IGFuaW1hdGlvbgorICAgICAgICAgICAgICAgIHZhciBtb3Jw
aFRhcmdldCA9IHNjZW5lLmdldE1vcnBoVGFyZ2V0QnlJZChpZCk7CisgICAgICAgICAgICAgICAg
aWYgKG1vcnBoVGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkdyb3VwLmFk
ZFRhcmdldGVkQW5pbWF0aW9uKGFuaW1hdGlvbiwgbW9ycGhUYXJnZXQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHZhciB0YXJnZXROb2RlID0gc2NlbmUuZ2V0Tm9kZUJ5SUQoaWQpOworICAgICAgICAgICAgICAg
IGlmICh0YXJnZXROb2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9u
R3JvdXAuYWRkVGFyZ2V0ZWRBbmltYXRpb24oYW5pbWF0aW9uLCB0YXJnZXROb2RlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNl
ZEFuaW1hdGlvbkdyb3VwLmZyb20gIT09IG51bGwgJiYgcGFyc2VkQW5pbWF0aW9uR3JvdXAuZnJv
bSAhPT0gbnVsbCkgeworICAgICAgICAgICAgYW5pbWF0aW9uR3JvdXAubm9ybWFsaXplKHBhcnNl
ZEFuaW1hdGlvbkdyb3VwLmZyb20sIHBhcnNlZEFuaW1hdGlvbkdyb3VwLnRvKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gYW5pbWF0aW9uR3JvdXA7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIHRoZSBzdHJpbmcgIkFuaW1hdGlvbkdyb3VwIgorICAgICAqIEByZXR1cm5zICJB
bmltYXRpb25Hcm91cCIKKyAgICAgKi8KKyAgICBBbmltYXRpb25Hcm91cC5wcm90b3R5cGUuZ2V0
Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkFuaW1hdGlvbkdyb3Vw
IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBkZXRhaWxsZWQgc3RyaW5nIGFi
b3V0IHRoZSBvYmplY3QKKyAgICAgKiBAcGFyYW0gZnVsbERldGFpbHMgZGVmaW5lcyBpZiB0aGUg
b3V0cHV0IHN0cmluZyB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgbGV2ZWxzIG9mIGxvZ2dpbmcgd2l0
aGluIHNjZW5lIGxvYWRpbmcKKyAgICAgKiBAcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcg
dGhlIG9iamVjdAorICAgICAqLworICAgIEFuaW1hdGlvbkdyb3VwLnByb3RvdHlwZS50b1N0cmlu
ZyA9IGZ1bmN0aW9uIChmdWxsRGV0YWlscykgeworICAgICAgICB2YXIgcmV0ID0gIk5hbWU6ICIg
KyB0aGlzLm5hbWU7CisgICAgICAgIHJldCArPSAiLCB0eXBlOiAiICsgdGhpcy5nZXRDbGFzc05h
bWUoKTsKKyAgICAgICAgaWYgKGZ1bGxEZXRhaWxzKSB7CisgICAgICAgICAgICByZXQgKz0gIiwg
ZnJvbTogIiArIHRoaXMuX2Zyb207CisgICAgICAgICAgICByZXQgKz0gIiwgdG86ICIgKyB0aGlz
Ll90bzsKKyAgICAgICAgICAgIHJldCArPSAiLCBpc1N0YXJ0ZWQ6ICIgKyB0aGlzLl9pc1N0YXJ0
ZWQ7CisgICAgICAgICAgICByZXQgKz0gIiwgc3BlZWRSYXRpbzogIiArIHRoaXMuX3NwZWVkUmF0
aW87CisgICAgICAgICAgICByZXQgKz0gIiwgdGFyZ2V0ZWRBbmltYXRpb25zIGxlbmd0aDogIiAr
IHRoaXMuX3RhcmdldGVkQW5pbWF0aW9ucy5sZW5ndGg7CisgICAgICAgICAgICByZXQgKz0gIiwg
YW5pbWF0YWJsZXMgbGVuZ3RoOiAiICsgdGhpcy5fYW5pbWF0YWJsZXM7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJldDsKKyAgICB9OworICAgIHJldHVybiBBbmltYXRpb25Hcm91cDsKK30o
KSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb25LZXku
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9BbmltYXRpb25zL2FuaW1hdGlvbktleS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQW5pbWF0aW9uS2V5SW50
ZXJwb2xhdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmltYXRp
b25LZXlJbnRlcnBvbGF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBbmltYXRpb25LZXlJbnRl
cnBvbGF0aW9uOyB9KTsKKy8qKgorICogRW51bSBmb3IgdGhlIGFuaW1hdGlvbiBrZXkgZnJhbWUg
aW50ZXJwb2xhdGlvbiB0eXBlCisgKi8KK3ZhciBBbmltYXRpb25LZXlJbnRlcnBvbGF0aW9uOwor
KGZ1bmN0aW9uIChBbmltYXRpb25LZXlJbnRlcnBvbGF0aW9uKSB7CisgICAgLyoqCisgICAgICog
RG8gbm90IGludGVycG9sYXRlIGJldHdlZW4ga2V5cyBhbmQgdXNlIHRoZSBzdGFydCBrZXkgdmFs
dWUgb25seS4gVGFuZ2VudHMgYXJlIGlnbm9yZWQKKyAgICAgKi8KKyAgICBBbmltYXRpb25LZXlJ
bnRlcnBvbGF0aW9uW0FuaW1hdGlvbktleUludGVycG9sYXRpb25bIlNURVAiXSA9IDFdID0gIlNU
RVAiOworfSkoQW5pbWF0aW9uS2V5SW50ZXJwb2xhdGlvbiB8fCAoQW5pbWF0aW9uS2V5SW50ZXJw
b2xhdGlvbiA9IHt9KSk7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0FuaW1hdGlvbnMvYW5p
bWF0aW9uUHJvcGVydGllc092ZXJyaWRlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQW5pbWF0aW9ucy9hbmlt
YXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFu
aW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJBbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEFuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9BbmltYXRpb25zL2FuaW1hdGlvbiAqLyAiLi9Bbmlt
YXRpb25zL2FuaW1hdGlvbi50cyIpOworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gb3ZlcnJpZGUg
YWxsIGNoaWxkIGFuaW1hdGlvbnMgb2YgYSBnaXZlbiB0YXJnZXQKKyAqLwordmFyIEFuaW1hdGlv
blByb3BlcnRpZXNPdmVycmlkZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBm
dW5jdGlvbiBBbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUoKSB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIGlmIGFuaW1hdGlvbiBibGVu
ZGluZyBtdXN0IGJlIHVzZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZW5hYmxlQmxlbmRp
bmcgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgYmxl
bmRpbmcgc3BlZWQgdG8gdXNlIHdoZW4gZW5hYmxlQmxlbmRpbmcgaXMgdHJ1ZQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5ibGVuZGluZ1NwZWVkID0gMC4wMTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgb3Igc2V0cyB0aGUgZGVmYXVsdCBsb29wIG1vZGUgdG8gdXNlCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmxvb3BNb2RlID0gX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTkxPT1BNT0RFX0NZ
Q0xFOworICAgIH0KKyAgICByZXR1cm4gQW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlOworfSgp
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9BbmltYXRpb25zL2FuaW1hdGlvblJhbmdl
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9BbmltYXRpb25zL2FuaW1hdGlvblJhbmdlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuaW1hdGlv
blJhbmdlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGlvblJh
bmdlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBbmltYXRpb25SYW5nZTsgfSk7CisvKioKKyAqIFJl
cHJlc2VudHMgdGhlIHJhbmdlIG9mIGFuIGFuaW1hdGlvbgorICovCit2YXIgQW5pbWF0aW9uUmFu
Z2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5pdGlh
bGl6ZXMgdGhlIHJhbmdlIG9mIGFuIGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBu
YW1lIG9mIHRoZSBhbmltYXRpb24gcmFuZ2UKKyAgICAgKiBAcGFyYW0gZnJvbSBUaGUgc3RhcnRp
bmcgZnJhbWUgb2YgdGhlIGFuaW1hdGlvbgorICAgICAqIEBwYXJhbSB0byBUaGUgZW5kaW5nIGZy
YW1lIG9mIHRoZSBhbmltYXRpb24KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBBbmltYXRpb25SYW5n
ZSgKKyAgICAvKipUaGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHJhbmdlKiovCisgICAgbmFtZSwg
CisgICAgLyoqVGhlIHN0YXJ0aW5nIGZyYW1lIG9mIHRoZSBhbmltYXRpb24gKi8KKyAgICBmcm9t
LCAKKyAgICAvKipUaGUgZW5kaW5nIGZyYW1lIG9mIHRoZSBhbmltYXRpb24qLworICAgIHRvKSB7
CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMuZnJvbSA9IGZyb207Cisg
ICAgICAgIHRoaXMudG8gPSB0bzsKKyAgICB9CisgICAgLyoqCisgICAgICogTWFrZXMgYSBjb3B5
IG9mIHRoZSBhbmltYXRpb24gcmFuZ2UKKyAgICAgKiBAcmV0dXJucyBBIGNvcHkgb2YgdGhlIGFu
aW1hdGlvbiByYW5nZQorICAgICAqLworICAgIEFuaW1hdGlvblJhbmdlLnByb3RvdHlwZS5jbG9u
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBBbmltYXRpb25SYW5nZSh0aGlz
Lm5hbWUsIHRoaXMuZnJvbSwgdGhpcy50byk7CisgICAgfTsKKyAgICByZXR1cm4gQW5pbWF0aW9u
UmFuZ2U7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0FuaW1hdGlvbnMvZWFz
aW5nLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
QW5pbWF0aW9ucy9lYXNpbmcudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEVhc2luZ0Z1bmN0aW9uLCBDaXJjbGVFYXNlLCBC
YWNrRWFzZSwgQm91bmNlRWFzZSwgQ3ViaWNFYXNlLCBFbGFzdGljRWFzZSwgRXhwb25lbnRpYWxF
YXNlLCBQb3dlckVhc2UsIFF1YWRyYXRpY0Vhc2UsIFF1YXJ0aWNFYXNlLCBRdWludGljRWFzZSwg
U2luZUVhc2UsIEJlemllckN1cnZlRWFzZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJFYXNpbmdGdW5jdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRWFzaW5nRnVuY3Rp
b247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2lyY2xlRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gQ2lyY2xlRWFzZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCYWNrRWFzZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gQmFja0Vhc2U7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmNlRWFzZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gQm91bmNlRWFzZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJD
dWJpY0Vhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEN1YmljRWFzZTsgfSk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJFbGFzdGljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRWxhc3RpY0Vhc2U7IH0p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRXhwb25lbnRpYWxFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBFeHBvbmVudGlhbEVhc2U7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG93ZXJFYXNlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBQb3dlckVhc2U7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVhZHJh
dGljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVhZHJhdGljRWFzZTsgfSk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJRdWFydGljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUXVhcnRpY0Vhc2U7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVpbnRpY0Vhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFF1aW50aWNFYXNlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbmVFYXNlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBTaW5lRWFzZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCZXppZXJDdXJ2ZUVh
c2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJlemllckN1cnZlRWFzZTsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIu
ZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfcGF0aF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
aHMvbWF0aC5wYXRoICovICIuL01hdGhzL21hdGgucGF0aC50cyIpOworCisKKy8qKgorICogQmFz
ZSBjbGFzcyB1c2VkIGZvciBldmVyeSBkZWZhdWx0IGVhc2luZyBmdW5jdGlvbi4KKyAqIEBzZWUg
aHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNlYXNpbmctZnVu
Y3Rpb25zCisgKi8KK3ZhciBFYXNpbmdGdW5jdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICBmdW5jdGlvbiBFYXNpbmdGdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5fZWFz
aW5nTW9kZSA9IEVhc2luZ0Z1bmN0aW9uLkVBU0lOR01PREVfRUFTRUlOOworICAgIH0KKyAgICAv
KioKKyAgICAgKiBTZXRzIHRoZSBlYXNpbmcgbW9kZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4K
KyAgICAgKiBAcGFyYW0gZWFzaW5nTW9kZSBEZWZpbmVzIHRoZSB3aWxsaW5nIG1vZGUgKEVBU0lO
R01PREVfRUFTRUlOLCBFQVNJTkdNT0RFX0VBU0VPVVQgb3IgRUFTSU5HTU9ERV9FQVNFSU5PVVQp
CisgICAgICovCisgICAgRWFzaW5nRnVuY3Rpb24ucHJvdG90eXBlLnNldEVhc2luZ01vZGUgPSBm
dW5jdGlvbiAoZWFzaW5nTW9kZSkgeworICAgICAgICB2YXIgbiA9IE1hdGgubWluKE1hdGgubWF4
KGVhc2luZ01vZGUsIDApLCAyKTsKKyAgICAgICAgdGhpcy5fZWFzaW5nTW9kZSA9IG47CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGVhc2luZyBtb2RlLgorICAgICAq
IEByZXR1cm5zIHRoZSBlYXNpbmcgbW9kZQorICAgICAqLworICAgIEVhc2luZ0Z1bmN0aW9uLnBy
b3RvdHlwZS5nZXRFYXNpbmdNb2RlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5fZWFzaW5nTW9kZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAgKi8K
KyAgICBFYXNpbmdGdW5jdGlvbi5wcm90b3R5cGUuZWFzZUluQ29yZSA9IGZ1bmN0aW9uIChncmFk
aWVudCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGltcGxlbWVudCB0aGlz
IG1ldGhvZCcpOworICAgIH07CisgICAgLyoqCisgICAgICogR2l2ZW4gYW4gaW5wdXQgZ3JhZGll
bnQgYmV0d2VlbiAwIGFuZCAxLCB0aGlzIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUK
KyAgICAgKiBvZiB0aGUgZWFzaW5nIGZ1bmN0aW9uLgorICAgICAqIEBwYXJhbSBncmFkaWVudCBE
ZWZpbmVzIHRoZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgd2Ugd2FudCB0aGUgZWFzaW5nIHZhbHVl
IGZvcgorICAgICAqIEByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9uIHRoZSBjdXJ2
ZSBkZWZpbmVkIGJ5IHRoZSBlYXNpbmcgZnVuY3Rpb24KKyAgICAgKi8KKyAgICBFYXNpbmdGdW5j
dGlvbi5wcm90b3R5cGUuZWFzZSA9IGZ1bmN0aW9uIChncmFkaWVudCkgeworICAgICAgICBzd2l0
Y2ggKHRoaXMuX2Vhc2luZ01vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRWFzaW5nRnVuY3Rpb24u
RUFTSU5HTU9ERV9FQVNFSU46CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFzZUluQ29y
ZShncmFkaWVudCk7CisgICAgICAgICAgICBjYXNlIEVhc2luZ0Z1bmN0aW9uLkVBU0lOR01PREVf
RUFTRU9VVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gKDEgLSB0aGlzLmVhc2VJbkNvcmUoMSAt
IGdyYWRpZW50KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGdyYWRpZW50ID49IDAuNSkgewor
ICAgICAgICAgICAgcmV0dXJuICgoKDEgLSB0aGlzLmVhc2VJbkNvcmUoKDEgLSBncmFkaWVudCkg
KiAyKSkgKiAwLjUpICsgMC41KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKHRoaXMuZWFz
ZUluQ29yZShncmFkaWVudCAqIDIpICogMC41KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIElu
dGVycG9sYXRpb24gZm9sbG93cyB0aGUgbWF0aGVtYXRpY2FsIGZvcm11bGEgYXNzb2NpYXRlZCB3
aXRoIHRoZSBlYXNpbmcgZnVuY3Rpb24uCisgICAgICovCisgICAgRWFzaW5nRnVuY3Rpb24uRUFT
SU5HTU9ERV9FQVNFSU4gPSAwOworICAgIC8qKgorICAgICAqIEludGVycG9sYXRpb24gZm9sbG93
cyAxMDAlIGludGVycG9sYXRpb24gbWludXMgdGhlIG91dHB1dCBvZiB0aGUgZm9ybXVsYSBhc3Nv
Y2lhdGVkIHdpdGggdGhlIGVhc2luZyBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICBFYXNpbmdGdW5j
dGlvbi5FQVNJTkdNT0RFX0VBU0VPVVQgPSAxOworICAgIC8qKgorICAgICAqIEludGVycG9sYXRp
b24gdXNlcyBFYXNlSW4gZm9yIHRoZSBmaXJzdCBoYWxmIG9mIHRoZSBhbmltYXRpb24gYW5kIEVh
c2VPdXQgZm9yIHRoZSBzZWNvbmQgaGFsZi4KKyAgICAgKi8KKyAgICBFYXNpbmdGdW5jdGlvbi5F
QVNJTkdNT0RFX0VBU0VJTk9VVCA9IDI7CisgICAgcmV0dXJuIEVhc2luZ0Z1bmN0aW9uOworfSgp
KTsKKworLyoqCisgKiBFYXNpbmcgZnVuY3Rpb24gd2l0aCBhIGNpcmNsZSBzaGFwZSAoc2VlIGxp
bmsgYmVsb3cpLgorICogQHNlZSBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5DaXJjCisgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2FuaW1hdGlvbnMjZWFzaW5n
LWZ1bmN0aW9ucworICovCit2YXIgQ2lyY2xlRWFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShDaXJjbGVFYXNlLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIENpcmNsZUVhc2UoKSB7
CisgICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cykgfHwgdGhpczsKKyAgICB9CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBDaXJjbGVF
YXNlLnByb3RvdHlwZS5lYXNlSW5Db3JlID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAg
IGdyYWRpZW50ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgZ3JhZGllbnQpKTsKKyAgICAgICAg
cmV0dXJuICgxLjAgLSBNYXRoLnNxcnQoMS4wIC0gKGdyYWRpZW50ICogZ3JhZGllbnQpKSk7Cisg
ICAgfTsKKyAgICByZXR1cm4gQ2lyY2xlRWFzZTsKK30oRWFzaW5nRnVuY3Rpb24pKTsKKworLyoq
CisgKiBFYXNpbmcgZnVuY3Rpb24gd2l0aCBhIGVhc2UgYmFjayBzaGFwZSAoc2VlIGxpbmsgYmVs
b3cpLgorICogQHNlZSBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5CYWNrCisgKiBAc2VlIGh0
dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2FuaW1hdGlvbnMjZWFzaW5nLWZ1bmN0
aW9ucworICovCit2YXIgQmFja0Vhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVy
KSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0o
QmFja0Vhc2UsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgYmFjayBl
YXNlIGVhc2luZworICAgICAqIEBzZWUgaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluQmFjawor
ICAgICAqIEBwYXJhbSBhbXBsaXR1ZGUgRGVmaW5lcyB0aGUgYW1wbGl0dWRlIG9mIHRoZSBmdW5j
dGlvbgorICAgICAqLworICAgIGZ1bmN0aW9uIEJhY2tFYXNlKAorICAgIC8qKiBEZWZpbmVzIHRo
ZSBhbXBsaXR1ZGUgb2YgdGhlIGZ1bmN0aW9uICovCisgICAgYW1wbGl0dWRlKSB7CisgICAgICAg
IGlmIChhbXBsaXR1ZGUgPT09IHZvaWQgMCkgeyBhbXBsaXR1ZGUgPSAxOyB9CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmFtcGxp
dHVkZSA9IGFtcGxpdHVkZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKiog
QGhpZGRlbiAqLworICAgIEJhY2tFYXNlLnByb3RvdHlwZS5lYXNlSW5Db3JlID0gZnVuY3Rpb24g
KGdyYWRpZW50KSB7CisgICAgICAgIHZhciBudW0gPSBNYXRoLm1heCgwLCB0aGlzLmFtcGxpdHVk
ZSk7CisgICAgICAgIHJldHVybiAoTWF0aC5wb3coZ3JhZGllbnQsIDMuMCkgLSAoKGdyYWRpZW50
ICogbnVtKSAqIE1hdGguc2luKDMuMTQxNTkyNjUzNTg5NzkzMSAqIGdyYWRpZW50KSkpOworICAg
IH07CisgICAgcmV0dXJuIEJhY2tFYXNlOworfShFYXNpbmdGdW5jdGlvbikpOworCisvKioKKyAq
IEVhc2luZyBmdW5jdGlvbiB3aXRoIGEgYm91bmNpbmcgc2hhcGUgKHNlZSBsaW5rIGJlbG93KS4K
KyAqIEBzZWUgaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluQm91bmNlCisgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2FuaW1hdGlvbnMjZWFzaW5nLWZ1bmN0aW9u
cworICovCit2YXIgQm91bmNlRWFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIp
IHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShC
b3VuY2VFYXNlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIGJvdW5j
ZSBlYXNpbmcKKyAgICAgKiBAc2VlIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbkJvdW5jZQor
ICAgICAqIEBwYXJhbSBib3VuY2VzIERlZmluZXMgdGhlIG51bWJlciBvZiBib3VuY2VzCisgICAg
ICogQHBhcmFtIGJvdW5jaW5lc3MgRGVmaW5lcyB0aGUgYW1wbGl0dWRlIG9mIHRoZSBib3VuY2UK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBCb3VuY2VFYXNlKAorICAgIC8qKiBEZWZpbmVzIHRoZSBu
dW1iZXIgb2YgYm91bmNlcyAqLworICAgIGJvdW5jZXMsIAorICAgIC8qKiBEZWZpbmVzIHRoZSBh
bXBsaXR1ZGUgb2YgdGhlIGJvdW5jZSAqLworICAgIGJvdW5jaW5lc3MpIHsKKyAgICAgICAgaWYg
KGJvdW5jZXMgPT09IHZvaWQgMCkgeyBib3VuY2VzID0gMzsgfQorICAgICAgICBpZiAoYm91bmNp
bmVzcyA9PT0gdm9pZCAwKSB7IGJvdW5jaW5lc3MgPSAyOyB9CisgICAgICAgIHZhciBfdGhpcyA9
IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmJvdW5jZXMgPSBib3Vu
Y2VzOworICAgICAgICBfdGhpcy5ib3VuY2luZXNzID0gYm91bmNpbmVzczsKKyAgICAgICAgcmV0
dXJuIF90aGlzOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIEJvdW5jZUVhc2UucHJv
dG90eXBlLmVhc2VJbkNvcmUgPSBmdW5jdGlvbiAoZ3JhZGllbnQpIHsKKyAgICAgICAgdmFyIHkg
PSBNYXRoLm1heCgwLjAsIHRoaXMuYm91bmNlcyk7CisgICAgICAgIHZhciBib3VuY2luZXNzID0g
dGhpcy5ib3VuY2luZXNzOworICAgICAgICBpZiAoYm91bmNpbmVzcyA8PSAxLjApIHsKKyAgICAg
ICAgICAgIGJvdW5jaW5lc3MgPSAxLjAwMTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbnVtOSA9
IE1hdGgucG93KGJvdW5jaW5lc3MsIHkpOworICAgICAgICB2YXIgbnVtNSA9IDEuMCAtIGJvdW5j
aW5lc3M7CisgICAgICAgIHZhciBudW00ID0gKCgxLjAgLSBudW05KSAvIG51bTUpICsgKG51bTkg
KiAwLjUpOworICAgICAgICB2YXIgbnVtMTUgPSBncmFkaWVudCAqIG51bTQ7CisgICAgICAgIHZh
ciBudW02NSA9IE1hdGgubG9nKCgtbnVtMTUgKiAoMS4wIC0gYm91bmNpbmVzcykpICsgMS4wKSAv
IE1hdGgubG9nKGJvdW5jaW5lc3MpOworICAgICAgICB2YXIgbnVtMyA9IE1hdGguZmxvb3IobnVt
NjUpOworICAgICAgICB2YXIgbnVtMTMgPSBudW0zICsgMS4wOworICAgICAgICB2YXIgbnVtOCA9
ICgxLjAgLSBNYXRoLnBvdyhib3VuY2luZXNzLCBudW0zKSkgLyAobnVtNSAqIG51bTQpOworICAg
ICAgICB2YXIgbnVtMTIgPSAoMS4wIC0gTWF0aC5wb3coYm91bmNpbmVzcywgbnVtMTMpKSAvIChu
dW01ICogbnVtNCk7CisgICAgICAgIHZhciBudW03ID0gKG51bTggKyBudW0xMikgKiAwLjU7Cisg
ICAgICAgIHZhciBudW02ID0gZ3JhZGllbnQgLSBudW03OworICAgICAgICB2YXIgbnVtMiA9IG51
bTcgLSBudW04OworICAgICAgICByZXR1cm4gKCgoLU1hdGgucG93KDEuMCAvIGJvdW5jaW5lc3Ms
IHkgLSBudW0zKSAvIChudW0yICogbnVtMikpICogKG51bTYgLSBudW0yKSkgKiAobnVtNiArIG51
bTIpKTsKKyAgICB9OworICAgIHJldHVybiBCb3VuY2VFYXNlOworfShFYXNpbmdGdW5jdGlvbikp
OworCisvKioKKyAqIEVhc2luZyBmdW5jdGlvbiB3aXRoIGEgcG93ZXIgb2YgMyBzaGFwZSAoc2Vl
IGxpbmsgYmVsb3cpLgorICogQHNlZSBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5DdWJpYwor
ICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9hbmltYXRpb25zI2Vh
c2luZy1mdW5jdGlvbnMKKyAqLwordmFyIEN1YmljRWFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShDdWJpY0Vhc2UsIF9zdXBlcik7CisgICAgZnVuY3Rpb24gQ3ViaWNFYXNlKCkg
eworICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBh
cmd1bWVudHMpIHx8IHRoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgQ3ViaWNF
YXNlLnByb3RvdHlwZS5lYXNlSW5Db3JlID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAg
IHJldHVybiAoZ3JhZGllbnQgKiBncmFkaWVudCAqIGdyYWRpZW50KTsKKyAgICB9OworICAgIHJl
dHVybiBDdWJpY0Vhc2U7Cit9KEVhc2luZ0Z1bmN0aW9uKSk7CisKKy8qKgorICogRWFzaW5nIGZ1
bmN0aW9uIHdpdGggYW4gZWxhc3RpYyBzaGFwZSAoc2VlIGxpbmsgYmVsb3cpLgorICogQHNlZSBo
dHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5FbGFzdGljCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2FuaW1hdGlvbnMjZWFzaW5nLWZ1bmN0aW9ucworICovCit2
YXIgRWxhc3RpY0Vhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oRWxhc3RpY0Vh
c2UsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGFuIGVsYXN0aWMgZWFz
aW5nIGZ1bmN0aW9uCisgICAgICogQHNlZSBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5FbGFz
dGljCisgICAgICogQHBhcmFtIG9zY2lsbGF0aW9ucyBEZWZpbmVzIHRoZSBudW1iZXIgb2Ygb3Nj
aWxsYXRpb25zCisgICAgICogQHBhcmFtIHNwcmluZ2luZXNzIERlZmluZXMgdGhlIGFtcGxpdHVk
ZSBvZiB0aGUgb3NjaWxsYXRpb25zCisgICAgICovCisgICAgZnVuY3Rpb24gRWxhc3RpY0Vhc2Uo
CisgICAgLyoqIERlZmluZXMgdGhlIG51bWJlciBvZiBvc2NpbGxhdGlvbnMqLworICAgIG9zY2ls
bGF0aW9ucywgCisgICAgLyoqIERlZmluZXMgdGhlIGFtcGxpdHVkZSBvZiB0aGUgb3NjaWxsYXRp
b25zKi8KKyAgICBzcHJpbmdpbmVzcykgeworICAgICAgICBpZiAob3NjaWxsYXRpb25zID09PSB2
b2lkIDApIHsgb3NjaWxsYXRpb25zID0gMzsgfQorICAgICAgICBpZiAoc3ByaW5naW5lc3MgPT09
IHZvaWQgMCkgeyBzcHJpbmdpbmVzcyA9IDM7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcykgfHwgdGhpczsKKyAgICAgICAgX3RoaXMub3NjaWxsYXRpb25zID0gb3NjaWxs
YXRpb25zOworICAgICAgICBfdGhpcy5zcHJpbmdpbmVzcyA9IHNwcmluZ2luZXNzOworICAgICAg
ICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgRWxhc3RpY0Vh
c2UucHJvdG90eXBlLmVhc2VJbkNvcmUgPSBmdW5jdGlvbiAoZ3JhZGllbnQpIHsKKyAgICAgICAg
dmFyIG51bTI7CisgICAgICAgIHZhciBudW0zID0gTWF0aC5tYXgoMC4wLCB0aGlzLm9zY2lsbGF0
aW9ucyk7CisgICAgICAgIHZhciBudW0gPSBNYXRoLm1heCgwLjAsIHRoaXMuc3ByaW5naW5lc3Mp
OworICAgICAgICBpZiAobnVtID09IDApIHsKKyAgICAgICAgICAgIG51bTIgPSBncmFkaWVudDsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG51bTIgPSAoTWF0aC5leHAo
bnVtICogZ3JhZGllbnQpIC0gMS4wKSAvIChNYXRoLmV4cChudW0pIC0gMS4wKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gKG51bTIgKiBNYXRoLnNpbigoKDYuMjgzMTg1MzA3MTc5NTg2MiAq
IG51bTMpICsgMS41NzA3OTYzMjY3OTQ4OTY2KSAqIGdyYWRpZW50KSk7CisgICAgfTsKKyAgICBy
ZXR1cm4gRWxhc3RpY0Vhc2U7Cit9KEVhc2luZ0Z1bmN0aW9uKSk7CisKKy8qKgorICogRWFzaW5n
IGZ1bmN0aW9uIHdpdGggYW4gZXhwb25lbnRpYWwgc2hhcGUgKHNlZSBsaW5rIGJlbG93KS4KKyAq
IEBzZWUgaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluRXhwbworICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9hbmltYXRpb25zI2Vhc2luZy1mdW5jdGlvbnMKKyAq
LwordmFyIEV4cG9uZW50aWFsRWFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIp
IHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShF
eHBvbmVudGlhbEVhc2UsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGFu
IGV4cG9uZW50aWFsIGVhc2luZyBmdW5jdGlvbgorICAgICAqIEBzZWUgaHR0cHM6Ly9lYXNpbmdz
Lm5ldC8jZWFzZUluRXhwbworICAgICAqIEBwYXJhbSBleHBvbmVudCBEZWZpbmVzIHRoZSBleHBv
bmVudCBvZiB0aGUgZnVuY3Rpb24KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBFeHBvbmVudGlhbEVh
c2UoCisgICAgLyoqIERlZmluZXMgdGhlIGV4cG9uZW50IG9mIHRoZSBmdW5jdGlvbiAqLworICAg
IGV4cG9uZW50KSB7CisgICAgICAgIGlmIChleHBvbmVudCA9PT0gdm9pZCAwKSB7IGV4cG9uZW50
ID0gMjsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwor
ICAgICAgICBfdGhpcy5leHBvbmVudCA9IGV4cG9uZW50OworICAgICAgICByZXR1cm4gX3RoaXM7
CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgRXhwb25lbnRpYWxFYXNlLnByb3RvdHlw
ZS5lYXNlSW5Db3JlID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIGlmICh0aGlzLmV4
cG9uZW50IDw9IDApIHsKKyAgICAgICAgICAgIHJldHVybiBncmFkaWVudDsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gKChNYXRoLmV4cCh0aGlzLmV4cG9uZW50ICogZ3JhZGllbnQpIC0gMS4w
KSAvIChNYXRoLmV4cCh0aGlzLmV4cG9uZW50KSAtIDEuMCkpOworICAgIH07CisgICAgcmV0dXJu
IEV4cG9uZW50aWFsRWFzZTsKK30oRWFzaW5nRnVuY3Rpb24pKTsKKworLyoqCisgKiBFYXNpbmcg
ZnVuY3Rpb24gd2l0aCBhIHBvd2VyIHNoYXBlIChzZWUgbGluayBiZWxvdykuCisgKiBAc2VlIGh0
dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblF1YWQKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9u
anMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNlYXNpbmctZnVuY3Rpb25zCisgKi8KK3ZhciBQ
b3dlckVhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUG93ZXJFYXNlLCBfc3Vw
ZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhbiBwb3dlciBiYXNlIGVhc2luZyBm
dW5jdGlvbgorICAgICAqIEBzZWUgaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluUXVhZAorICAg
ICAqIEBwYXJhbSBwb3dlciBEZWZpbmVzIHRoZSBwb3dlciBvZiB0aGUgZnVuY3Rpb24KKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBQb3dlckVhc2UoCisgICAgLyoqIERlZmluZXMgdGhlIHBvd2VyIG9m
IHRoZSBmdW5jdGlvbiAqLworICAgIHBvd2VyKSB7CisgICAgICAgIGlmIChwb3dlciA9PT0gdm9p
ZCAwKSB7IHBvd2VyID0gMjsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlz
KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5wb3dlciA9IHBvd2VyOworICAgICAgICByZXR1cm4g
X3RoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgUG93ZXJFYXNlLnByb3RvdHlw
ZS5lYXNlSW5Db3JlID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIHZhciB5ID0gTWF0
aC5tYXgoMC4wLCB0aGlzLnBvd2VyKTsKKyAgICAgICAgcmV0dXJuIE1hdGgucG93KGdyYWRpZW50
LCB5KTsKKyAgICB9OworICAgIHJldHVybiBQb3dlckVhc2U7Cit9KEVhc2luZ0Z1bmN0aW9uKSk7
CisKKy8qKgorICogRWFzaW5nIGZ1bmN0aW9uIHdpdGggYSBwb3dlciBvZiAyIHNoYXBlIChzZWUg
bGluayBiZWxvdykuCisgKiBAc2VlIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblF1YWQKKyAq
IEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNlYXNp
bmctZnVuY3Rpb25zCisgKi8KK3ZhciBRdWFkcmF0aWNFYXNlID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKFF1YWRyYXRpY0Vhc2UsIF9zdXBlcik7CisgICAgZnVuY3Rpb24gUXVhZHJh
dGljRWFzZSgpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBw
bHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIFF1YWRyYXRpY0Vhc2UucHJvdG90eXBlLmVhc2VJbkNvcmUgPSBmdW5jdGlvbiAoZ3JhZGll
bnQpIHsKKyAgICAgICAgcmV0dXJuIChncmFkaWVudCAqIGdyYWRpZW50KTsKKyAgICB9OworICAg
IHJldHVybiBRdWFkcmF0aWNFYXNlOworfShFYXNpbmdGdW5jdGlvbikpOworCisvKioKKyAqIEVh
c2luZyBmdW5jdGlvbiB3aXRoIGEgcG93ZXIgb2YgNCBzaGFwZSAoc2VlIGxpbmsgYmVsb3cpLgor
ICogQHNlZSBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5RdWFydAorICogQHNlZSBodHRwOi8v
ZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9hbmltYXRpb25zI2Vhc2luZy1mdW5jdGlvbnMK
KyAqLwordmFyIFF1YXJ0aWNFYXNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikg
eworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFF1
YXJ0aWNFYXNlLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIFF1YXJ0aWNFYXNlKCkgeworICAgICAg
ICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMp
IHx8IHRoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgUXVhcnRpY0Vhc2UucHJv
dG90eXBlLmVhc2VJbkNvcmUgPSBmdW5jdGlvbiAoZ3JhZGllbnQpIHsKKyAgICAgICAgcmV0dXJu
IChncmFkaWVudCAqIGdyYWRpZW50ICogZ3JhZGllbnQgKiBncmFkaWVudCk7CisgICAgfTsKKyAg
ICByZXR1cm4gUXVhcnRpY0Vhc2U7Cit9KEVhc2luZ0Z1bmN0aW9uKSk7CisKKy8qKgorICogRWFz
aW5nIGZ1bmN0aW9uIHdpdGggYSBwb3dlciBvZiA1IHNoYXBlIChzZWUgbGluayBiZWxvdykuCisg
KiBAc2VlIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblF1aW50CisgKiBAc2VlIGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2FuaW1hdGlvbnMjZWFzaW5nLWZ1bmN0aW9ucwor
ICovCit2YXIgUXVpbnRpY0Vhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUXVp
bnRpY0Vhc2UsIF9zdXBlcik7CisgICAgZnVuY3Rpb24gUXVpbnRpY0Vhc2UoKSB7CisgICAgICAg
IHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykg
fHwgdGhpczsKKyAgICB9CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBRdWludGljRWFzZS5wcm90
b3R5cGUuZWFzZUluQ29yZSA9IGZ1bmN0aW9uIChncmFkaWVudCkgeworICAgICAgICByZXR1cm4g
KGdyYWRpZW50ICogZ3JhZGllbnQgKiBncmFkaWVudCAqIGdyYWRpZW50ICogZ3JhZGllbnQpOwor
ICAgIH07CisgICAgcmV0dXJuIFF1aW50aWNFYXNlOworfShFYXNpbmdGdW5jdGlvbikpOworCisv
KioKKyAqIEVhc2luZyBmdW5jdGlvbiB3aXRoIGEgc2luIHNoYXBlIChzZWUgbGluayBiZWxvdyku
CisgKiBAc2VlIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblNpbmUKKyAqIEBzZWUgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNlYXNpbmctZnVuY3Rpb25z
CisgKi8KK3ZhciBTaW5lRWFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShTaW5l
RWFzZSwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBTaW5lRWFzZSgpIHsKKyAgICAgICAgcmV0dXJu
IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlz
OworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIFNpbmVFYXNlLnByb3RvdHlwZS5lYXNl
SW5Db3JlID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIHJldHVybiAoMS4wIC0gTWF0
aC5zaW4oMS41NzA3OTYzMjY3OTQ4OTY2ICogKDEuMCAtIGdyYWRpZW50KSkpOworICAgIH07Cisg
ICAgcmV0dXJuIFNpbmVFYXNlOworfShFYXNpbmdGdW5jdGlvbikpOworCisvKioKKyAqIEVhc2lu
ZyBmdW5jdGlvbiB3aXRoIGEgYmV6aWVyIHNoYXBlIChzZWUgbGluayBiZWxvdykuCisgKiBAc2Vl
IGh0dHA6Ly9jdWJpYy1iZXppZXIuY29tLyMuMTcsLjY3LC44MywuNjcKKyAqIEBzZWUgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNlYXNpbmctZnVuY3Rpb25z
CisgKi8KK3ZhciBCZXppZXJDdXJ2ZUVhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1
cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRz
Il0oQmV6aWVyQ3VydmVFYXNlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRl
cyBhIGJlemllciBmdW5jdGlvbgorICAgICAqIEBzZWUgaHR0cDovL2N1YmljLWJlemllci5jb20v
Iy4xNywuNjcsLjgzLC42NworICAgICAqIEBwYXJhbSB4MSBEZWZpbmVzIHRoZSB4IGNvbXBvbmVu
dCBvZiB0aGUgc3RhcnQgdGFuZ2VudCBpbiB0aGUgYmV6aWVyIGN1cnZlCisgICAgICogQHBhcmFt
IHkxIERlZmluZXMgdGhlIHkgY29tcG9uZW50IG9mIHRoZSBzdGFydCB0YW5nZW50IGluIHRoZSBi
ZXppZXIgY3VydmUKKyAgICAgKiBAcGFyYW0geDIgRGVmaW5lcyB0aGUgeCBjb21wb25lbnQgb2Yg
dGhlIGVuZCB0YW5nZW50IGluIHRoZSBiZXppZXIgY3VydmUKKyAgICAgKiBAcGFyYW0geTIgRGVm
aW5lcyB0aGUgeSBjb21wb25lbnQgb2YgdGhlIGVuZCB0YW5nZW50IGluIHRoZSBiZXppZXIgY3Vy
dmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBCZXppZXJDdXJ2ZUVhc2UoCisgICAgLyoqIERlZmlu
ZXMgdGhlIHggY29tcG9uZW50IG9mIHRoZSBzdGFydCB0YW5nZW50IGluIHRoZSBiZXppZXIgY3Vy
dmUgKi8KKyAgICB4MSwgCisgICAgLyoqIERlZmluZXMgdGhlIHkgY29tcG9uZW50IG9mIHRoZSBz
dGFydCB0YW5nZW50IGluIHRoZSBiZXppZXIgY3VydmUgKi8KKyAgICB5MSwgCisgICAgLyoqIERl
ZmluZXMgdGhlIHggY29tcG9uZW50IG9mIHRoZSBlbmQgdGFuZ2VudCBpbiB0aGUgYmV6aWVyIGN1
cnZlICovCisgICAgeDIsIAorICAgIC8qKiBEZWZpbmVzIHRoZSB5IGNvbXBvbmVudCBvZiB0aGUg
ZW5kIHRhbmdlbnQgaW4gdGhlIGJlemllciBjdXJ2ZSAqLworICAgIHkyKSB7CisgICAgICAgIGlm
ICh4MSA9PT0gdm9pZCAwKSB7IHgxID0gMDsgfQorICAgICAgICBpZiAoeTEgPT09IHZvaWQgMCkg
eyB5MSA9IDA7IH0KKyAgICAgICAgaWYgKHgyID09PSB2b2lkIDApIHsgeDIgPSAxOyB9CisgICAg
ICAgIGlmICh5MiA9PT0gdm9pZCAwKSB7IHkyID0gMTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBf
c3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOworICAgICAgICBfdGhpcy54MSA9IHgxOworICAgICAg
ICBfdGhpcy55MSA9IHkxOworICAgICAgICBfdGhpcy54MiA9IHgyOworICAgICAgICBfdGhpcy55
MiA9IHkyOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICov
CisgICAgQmV6aWVyQ3VydmVFYXNlLnByb3RvdHlwZS5lYXNlSW5Db3JlID0gZnVuY3Rpb24gKGdy
YWRpZW50KSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF9wYXRoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIkJlemllckN1cnZlIl0uSW50ZXJwb2xhdGUoZ3JhZGllbnQsIHRoaXMu
eDEsIHRoaXMueTEsIHRoaXMueDIsIHRoaXMueTIpOworICAgIH07CisgICAgcmV0dXJuIEJlemll
ckN1cnZlRWFzZTsKK30oRWFzaW5nRnVuY3Rpb24pKTsKKworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9BbmltYXRpb25zL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9BbmltYXRpb25zL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuaW1hdGFibGUsIF9J
QW5pbWF0aW9uU3RhdGUsIEFuaW1hdGlvbiwgVGFyZ2V0ZWRBbmltYXRpb24sIEFuaW1hdGlvbkdy
b3VwLCBBbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUsIEVhc2luZ0Z1bmN0aW9uLCBDaXJjbGVF
YXNlLCBCYWNrRWFzZSwgQm91bmNlRWFzZSwgQ3ViaWNFYXNlLCBFbGFzdGljRWFzZSwgRXhwb25l
bnRpYWxFYXNlLCBQb3dlckVhc2UsIFF1YWRyYXRpY0Vhc2UsIFF1YXJ0aWNFYXNlLCBRdWludGlj
RWFzZSwgU2luZUVhc2UsIEJlemllckN1cnZlRWFzZSwgUnVudGltZUFuaW1hdGlvbiwgQW5pbWF0
aW9uRXZlbnQsIEFuaW1hdGlvbktleUludGVycG9sYXRpb24sIEFuaW1hdGlvblJhbmdlICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5pbWF0YWJsZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hbmlt
YXRhYmxlICovICIuL0FuaW1hdGlvbnMvYW5pbWF0YWJsZS50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJBbmltYXRhYmxlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYW5pbWF0YWJsZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJBbmltYXRhYmxlIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9hbmltYXRpb24gKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb24u
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0lBbmltYXRpb25TdGF0ZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJfSUFuaW1hdGlv
blN0YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGlvbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBbmltYXRp
b24iXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5pbWF0aW9uR3JvdXBfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYW5p
bWF0aW9uR3JvdXAgKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb25Hcm91cC50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJUYXJnZXRlZEFuaW1hdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FuaW1h
dGlvbkdyb3VwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRhcmdldGVkQW5pbWF0aW9u
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGlvbkdyb3VwIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfYW5pbWF0aW9uR3JvdXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQW5p
bWF0aW9uR3JvdXAiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5pbWF0aW9u
UHJvcGVydGllc092ZXJyaWRlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2FuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSAqLyAiLi9Bbmlt
YXRpb25zL2FuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZS50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJBbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hbmlt
YXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQW5p
bWF0aW9uUHJvcGVydGllc092ZXJyaWRlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2Vhc2luZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9lYXNpbmcgKi8gIi4vQW5pbWF0aW9ucy9lYXNpbmcudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiRWFzaW5nRnVuY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lYXNpbmdfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRWFzaW5nRnVuY3Rpb24iXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQ2lyY2xlRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Vhc2luZ19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDaXJjbGVFYXNlIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkJhY2tFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZWFzaW5nX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIkJhY2tFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJv
dW5jZUVhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lYXNpbmdfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siQm91bmNlRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDdWJpY0Vh
c2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lYXNpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siQ3ViaWNFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVsYXN0aWNFYXNlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfZWFzaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkVsYXN0aWNFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkV4cG9uZW50aWFsRWFzZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Vhc2luZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJFeHBvbmVudGlhbEVhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG93ZXJFYXNlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfZWFzaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlBvd2VyRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJRdWFkcmF0aWNFYXNlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfZWFzaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlF1
YWRyYXRpY0Vhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVhcnRpY0Vhc2UiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9lYXNpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUXVh
cnRpY0Vhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVpbnRpY0Vhc2UiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9lYXNpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUXVpbnRp
Y0Vhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2luZUVhc2UiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9lYXNpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2luZUVhc2UiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmV6aWVyQ3VydmVFYXNlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfZWFzaW5nX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkJlemllckN1cnZlRWFz
ZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ydW50aW1lQW5pbWF0aW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3J1
bnRpbWVBbmltYXRpb24gKi8gIi4vQW5pbWF0aW9ucy9ydW50aW1lQW5pbWF0aW9uLnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlJ1bnRpbWVBbmltYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9y
dW50aW1lQW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlJ1bnRpbWVBbmlt
YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5pbWF0aW9uRXZlbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
YW5pbWF0aW9uRXZlbnQgKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb25FdmVudC50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJBbmltYXRpb25FdmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FuaW1h
dGlvbkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFuaW1hdGlvbkV2ZW50Il07
IH0pOworCisvKiBlbXB0eS91bnVzZWQgaGFybW9ueSBzdGFyIHJlZXhwb3J0ICovLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9hbmltYXRpb25LZXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYW5pbWF0aW9uS2V5ICovICIuL0FuaW1hdGlv
bnMvYW5pbWF0aW9uS2V5LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGlvbktleUludGVy
cG9sYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hbmltYXRpb25LZXlfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siQW5pbWF0aW9uS2V5SW50ZXJwb2xhdGlvbiJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hbmltYXRpb25SYW5nZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hbmltYXRpb25SYW5nZSAqLyAi
Li9BbmltYXRpb25zL2FuaW1hdGlvblJhbmdlLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1h
dGlvblJhbmdlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYW5pbWF0aW9uUmFuZ2VfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfX1siQW5pbWF0aW9uUmFuZ2UiXTsgfSk7CisKKworCisKKworCisK
KworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9BbmltYXRpb25zL3J1bnRpbWVBbmlt
YXRpb24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vQW5pbWF0aW9ucy9ydW50aW1lQW5pbWF0aW9uLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogUnVudGltZUFuaW1hdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJSdW50aW1lQW5pbWF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSdW50aW1lQW5pbWF0aW9u
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhz
L21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0
aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hbmltYXRpb25f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
YW5pbWF0aW9uICovICIuL0FuaW1hdGlvbnMvYW5pbWF0aW9uLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2l6ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5zaXplICovICIuL01hdGhz
L21hdGguc2l6ZS50cyIpOworCisKKworCisvLyBTdGF0aWMgdmFsdWVzIHRvIGhlbHAgdGhlIGdh
cmJhZ2UgY29sbGVjdG9yCisvLyBRdWF0ZXJuaW9uCit2YXIgX3N0YXRpY09mZnNldFZhbHVlUXVh
dGVybmlvbiA9IE9iamVjdC5mcmVlemUobmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJRdWF0ZXJuaW9uIl0oMCwgMCwgMCwgMCkpOworLy8gVmVjdG9y
MwordmFyIF9zdGF0aWNPZmZzZXRWYWx1ZVZlY3RvcjMgPSBPYmplY3QuZnJlZXplKF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygp
KTsKKy8vIFZlY3RvcjIKK3ZhciBfc3RhdGljT2Zmc2V0VmFsdWVWZWN0b3IyID0gT2JqZWN0LmZy
ZWV6ZShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVj
dG9yMiJdLlplcm8oKSk7CisvLyBTaXplCit2YXIgX3N0YXRpY09mZnNldFZhbHVlU2l6ZSA9IE9i
amVjdC5mcmVlemUoX01hdGhzX21hdGhfc2l6ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJTaXplIl0uWmVybygpKTsKKy8vIENvbG9yMwordmFyIF9zdGF0aWNPZmZzZXRWYWx1ZUNvbG9y
MyA9IE9iamVjdC5mcmVlemUoX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siQ29sb3IzIl0uQmxhY2soKSk7CisvKioKKyAqIERlZmluZXMgYSBydW50aW1lIGFu
aW1hdGlvbgorICovCit2YXIgUnVudGltZUFuaW1hdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgUnVudGltZUFuaW1hdGlvbiBv
YmplY3QKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgdGhlIHRhcmdldCBvZiB0aGUgYW5p
bWF0aW9uCisgICAgICogQHBhcmFtIGFuaW1hdGlvbiBkZWZpbmVzIHRoZSBzb3VyY2UgYW5pbWF0
aW9uIG9iamVjdAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5l
CisgICAgICogQHBhcmFtIGhvc3QgZGVmaW5lcyB0aGUgaW5pdGlhdGluZyBBbmltYXRhYmxlCisg
ICAgICovCisgICAgZnVuY3Rpb24gUnVudGltZUFuaW1hdGlvbih0YXJnZXQsIGFuaW1hdGlvbiwg
c2NlbmUsIGhvc3QpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5f
ZXZlbnRzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY3VycmVu
dCBmcmFtZSBvZiB0aGUgcnVudGltZSBhbmltYXRpb24KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuX2N1cnJlbnRGcmFtZSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgb3JpZ2lu
YWwgdmFsdWUgb2YgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uCisgICAgICAgICAqLworICAgICAgICB0
aGlzLl9vcmlnaW5hbFZhbHVlID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBUaGUgb3JpZ2luYWwgYmxlbmQgdmFsdWUgb2YgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLl9vcmlnaW5hbEJsZW5kVmFsdWUgPSBudWxsOworICAgICAg
ICAvKioKKyAgICAgICAgICogVGhlIG9mZnNldHMgY2FjaGUgb2YgdGhlIHJ1bnRpbWUgYW5pbWF0
aW9uCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9vZmZzZXRzQ2FjaGUgPSB7fTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFRoZSBoaWdoIGxpbWl0cyBjYWNoZSBvZiB0aGUgcnVudGltZSBh
bmltYXRpb24KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX2hpZ2hMaW1pdHNDYWNoZSA9IHt9
OworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBydW50aW1lIGFuaW1h
dGlvbiBoYXMgYmVlbiBzdG9wcGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9zdG9wcGVk
ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgYmxlbmRpbmcgZmFjdG9yIG9m
IHRoZSBydW50aW1lIGFuaW1hdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fYmxlbmRp
bmdGYWN0b3IgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGN1cnJlbnQgdmFsdWUg
b2YgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9jdXJy
ZW50VmFsdWUgPSBudWxsOworICAgICAgICB0aGlzLl9jdXJyZW50QWN0aXZlVGFyZ2V0ID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fZGlyZWN0VGFyZ2V0ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFRoZSB0YXJnZXQgcGF0aCBvZiB0aGUgcnVudGltZSBhbmltYXRpb24KKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuX3RhcmdldFBhdGggPSAiIjsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFRoZSB3ZWlnaHQgb2YgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLl93ZWlnaHQgPSAxLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgcmF0
aW8gb2Zmc2V0IG9mIHRoZSBydW50aW1lIGFuaW1hdGlvbgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5fcmF0aW9PZmZzZXQgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHByZXZp
b3VzIGRlbGF5IG9mIHRoZSBydW50aW1lIGFuaW1hdGlvbgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5fcHJldmlvdXNEZWxheSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgcHJl
dmlvdXMgcmF0aW8gb2YgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLl9wcmV2aW91c1JhdGlvID0gMDsKKyAgICAgICAgdGhpcy5fdGFyZ2V0SXNBcnJheSA9
IGZhbHNlOworICAgICAgICB0aGlzLl9hbmltYXRpb24gPSBhbmltYXRpb247CisgICAgICAgIHRo
aXMuX3RhcmdldCA9IHRhcmdldDsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZTsKKyAgICAg
ICAgdGhpcy5faG9zdCA9IGhvc3Q7CisgICAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldHMgPSBbXTsK
KyAgICAgICAgYW5pbWF0aW9uLl9ydW50aW1lQW5pbWF0aW9ucy5wdXNoKHRoaXMpOworICAgICAg
ICAvLyBTdGF0ZQorICAgICAgICB0aGlzLl9hbmltYXRpb25TdGF0ZSA9IHsKKyAgICAgICAgICAg
IGtleTogMCwKKyAgICAgICAgICAgIHJlcGVhdENvdW50OiAwLAorICAgICAgICAgICAgbG9vcE1v
ZGU6IHRoaXMuX2dldENvcnJlY3RMb29wTW9kZSgpCisgICAgICAgIH07CisgICAgICAgIGlmICh0
aGlzLl9hbmltYXRpb24uZGF0YVR5cGUgPT09IF9hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9NQVRSSVgpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2FuaW1hdGlvblN0YXRlLndvcmtWYWx1ZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgIH0K
KyAgICAgICAgLy8gTGltaXRzCisgICAgICAgIHRoaXMuX2tleXMgPSB0aGlzLl9hbmltYXRpb24u
Z2V0S2V5cygpOworICAgICAgICB0aGlzLl9taW5GcmFtZSA9IHRoaXMuX2tleXNbMF0uZnJhbWU7
CisgICAgICAgIHRoaXMuX21heEZyYW1lID0gdGhpcy5fa2V5c1t0aGlzLl9rZXlzLmxlbmd0aCAt
IDFdLmZyYW1lOworICAgICAgICB0aGlzLl9taW5WYWx1ZSA9IHRoaXMuX2tleXNbMF0udmFsdWU7
CisgICAgICAgIHRoaXMuX21heFZhbHVlID0gdGhpcy5fa2V5c1t0aGlzLl9rZXlzLmxlbmd0aCAt
IDFdLnZhbHVlOworICAgICAgICAvLyBBZGQgYSBzdGFydCBrZXkgYXQgZnJhbWUgMCBpZiBtaXNz
aW5nCisgICAgICAgIGlmICh0aGlzLl9taW5GcmFtZSAhPT0gMCkgeworICAgICAgICAgICAgdmFy
IG5ld0tleSA9IHsgZnJhbWU6IDAsIHZhbHVlOiB0aGlzLl9taW5WYWx1ZSB9OworICAgICAgICAg
ICAgdGhpcy5fa2V5cy5zcGxpY2UoMCwgMCwgbmV3S2V5KTsKKyAgICAgICAgfQorICAgICAgICAv
LyBDaGVjayBkYXRhCisgICAgICAgIGlmICh0aGlzLl90YXJnZXQgaW5zdGFuY2VvZiBBcnJheSkg
eworICAgICAgICAgICAgdmFyIGluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0g
MCwgX2EgPSB0aGlzLl90YXJnZXQ7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHRhcmdldF8xID0gX2FbX2ldOworICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBh
cmVQYXRoKHRhcmdldF8xLCBpbmRleCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZ2V0T3JpZ2lu
YWxWYWx1ZXMoaW5kZXgpOworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aGlzLl90YXJnZXRJc0FycmF5ID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVQYXRoKHRoaXMuX3RhcmdldCk7
CisgICAgICAgICAgICB0aGlzLl9nZXRPcmlnaW5hbFZhbHVlcygpOworICAgICAgICAgICAgdGhp
cy5fdGFyZ2V0SXNBcnJheSA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fZGlyZWN0VGFyZ2V0
ID0gdGhpcy5fYWN0aXZlVGFyZ2V0c1swXTsKKyAgICAgICAgfQorICAgICAgICAvLyBDbG9uaW5n
IGV2ZW50cyBsb2NhbGx5CisgICAgICAgIHZhciBldmVudHMgPSBhbmltYXRpb24uZ2V0RXZlbnRz
KCk7CisgICAgICAgIGlmIChldmVudHMgJiYgZXZlbnRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAg
ICAgIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgX3RoaXMu
X2V2ZW50cy5wdXNoKGUuX2Nsb25lKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fZW5hYmxlQmxlbmRpbmcgPSB0YXJnZXQgJiYgdGFyZ2V0LmFuaW1hdGlvblBy
b3BlcnRpZXNPdmVycmlkZSA/IHRhcmdldC5hbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUuZW5h
YmxlQmxlbmRpbmcgOiB0aGlzLl9hbmltYXRpb24uZW5hYmxlQmxlbmRpbmc7CisgICAgfQorICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW50aW1lQW5pbWF0aW9uLnByb3RvdHlwZSwgImN1cnJl
bnRGcmFtZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGN1cnJlbnQgZnJh
bWUgb2YgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50RnJhbWU7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW50aW1lQW5pbWF0aW9u
LnByb3RvdHlwZSwgIndlaWdodCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhl
IHdlaWdodCBvZiB0aGUgcnVudGltZSBhbmltYXRpb24KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlaWdodDsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bnRpbWVBbmltYXRpb24u
cHJvdG90eXBlLCAiY3VycmVudFZhbHVlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcnVudGltZSBhbmltYXRpb24KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1
cnJlbnRWYWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFJ1bnRpbWVBbmltYXRpb24ucHJvdG90eXBlLCAidGFyZ2V0UGF0aCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIHRhcmdldCBwYXRoIG9mIHRoZSBydW50aW1lIGFuaW1hdGlv
bgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fdGFyZ2V0UGF0aDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFJ1bnRpbWVBbmltYXRpb24ucHJvdG90eXBlLCAidGFyZ2V0IiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgYWN0dWFsIHRhcmdldCBvZiB0aGUgcnVudGlt
ZSBhbmltYXRpb24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRBY3RpdmVUYXJnZXQ7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIFJ1bnRpbWVBbmltYXRpb24ucHJvdG90eXBlLl9wcmVwYXJlUGF0aCA9IGZ1bmN0
aW9uICh0YXJnZXQsIHRhcmdldEluZGV4KSB7CisgICAgICAgIGlmICh0YXJnZXRJbmRleCA9PT0g
dm9pZCAwKSB7IHRhcmdldEluZGV4ID0gMDsgfQorICAgICAgICB2YXIgdGFyZ2V0UHJvcGVydHlQ
YXRoID0gdGhpcy5fYW5pbWF0aW9uLnRhcmdldFByb3BlcnR5UGF0aDsKKyAgICAgICAgaWYgKHRh
cmdldFByb3BlcnR5UGF0aC5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICB2YXIgcHJvcGVydHkg
PSB0YXJnZXRbdGFyZ2V0UHJvcGVydHlQYXRoWzBdXTsKKyAgICAgICAgICAgIGZvciAodmFyIGlu
ZGV4ID0gMTsgaW5kZXggPCB0YXJnZXRQcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMTsgaW5kZXgrKykg
eworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlbdGFyZ2V0UHJvcGVydHlQYXRo
W2luZGV4XV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl90YXJnZXRQYXRoID0g
dGFyZ2V0UHJvcGVydHlQYXRoW3RhcmdldFByb3BlcnR5UGF0aC5sZW5ndGggLSAxXTsKKyAgICAg
ICAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldHNbdGFyZ2V0SW5kZXhdID0gcHJvcGVydHk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl90YXJnZXRQYXRoID0gdGFy
Z2V0UHJvcGVydHlQYXRoWzBdOworICAgICAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0c1t0YXJn
ZXRJbmRleF0gPSB0YXJnZXQ7CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShSdW50aW1lQW5pbWF0aW9uLnByb3RvdHlwZSwgImFuaW1hdGlvbiIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGFuaW1hdGlvbiBmcm9tIHRoZSBydW50aW1lIGFu
aW1hdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fYW5pbWF0aW9uOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioK
KyAgICAgKiBSZXNldHMgdGhlIHJ1bnRpbWUgYW5pbWF0aW9uIHRvIHRoZSBiZWdpbm5pbmcKKyAg
ICAgKiBAcGFyYW0gcmVzdG9yZU9yaWdpbmFsIGRlZmluZXMgd2hldGhlciB0byByZXN0b3JlIHRo
ZSB0YXJnZXQgcHJvcGVydHkgdG8gdGhlIG9yaWdpbmFsIHZhbHVlCisgICAgICovCisgICAgUnVu
dGltZUFuaW1hdGlvbi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAocmVzdG9yZU9yaWdpbmFs
KSB7CisgICAgICAgIGlmIChyZXN0b3JlT3JpZ2luYWwgPT09IHZvaWQgMCkgeyByZXN0b3JlT3Jp
Z2luYWwgPSBmYWxzZTsgfQorICAgICAgICBpZiAocmVzdG9yZU9yaWdpbmFsKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fdGFyZ2V0IGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgaW5kZXggPSAwOworICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0
aGlzLl90YXJnZXQ7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciB0YXJnZXQgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vcmln
aW5hbFZhbHVlW2luZGV4XSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9zZXRWYWx1ZSh0YXJnZXQsIHRoaXMuX2FjdGl2ZVRhcmdldHNbaW5kZXhdLCB0aGlz
Ll9vcmlnaW5hbFZhbHVlW2luZGV4XSwgLTEsIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9v
cmlnaW5hbFZhbHVlWzBdICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5fc2V0VmFsdWUodGhpcy5fdGFyZ2V0LCB0aGlzLl9kaXJlY3RUYXJnZXQsIHRoaXMuX29yaWdp
bmFsVmFsdWVbMF0sIC0xLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fb2Zmc2V0c0NhY2hlID0ge307CisgICAgICAgIHRoaXMu
X2hpZ2hMaW1pdHNDYWNoZSA9IHt9OworICAgICAgICB0aGlzLl9jdXJyZW50RnJhbWUgPSAwOwor
ICAgICAgICB0aGlzLl9ibGVuZGluZ0ZhY3RvciA9IDA7CisgICAgICAgIC8vIEV2ZW50cworICAg
ICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZXZlbnRzLmxlbmd0aDsgaW5k
ZXgrKykgeworICAgICAgICAgICAgdGhpcy5fZXZlbnRzW2luZGV4XS5pc0RvbmUgPSBmYWxzZTsK
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIGlmIHRoZSBydW50
aW1lIGFuaW1hdGlvbiBpcyBzdG9wcGVkCisgICAgICogQHJldHVybnMgQm9vbGVhbiBzcGVjaWZ5
aW5nIGlmIHRoZSBydW50aW1lIGFuaW1hdGlvbiBpcyBzdG9wcGVkCisgICAgICovCisgICAgUnVu
dGltZUFuaW1hdGlvbi5wcm90b3R5cGUuaXNTdG9wcGVkID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5fc3RvcHBlZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2Vz
IG9mIHRoZSBydW50aW1lIGFuaW1hdGlvbgorICAgICAqLworICAgIFJ1bnRpbWVBbmltYXRpb24u
cHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpbmRleCA9IHRo
aXMuX2FuaW1hdGlvbi5ydW50aW1lQW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpOworICAgICAgICBp
ZiAoaW5kZXggPiAtMSkgeworICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uLnJ1bnRpbWVBbmlt
YXRpb25zLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIEFwcGx5IHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWUgdG8gdGhlIHRhcmdldAorICAgICAqIEBw
YXJhbSBjdXJyZW50VmFsdWUgZGVmaW5lcyB0aGUgdmFsdWUgY29tcHV0ZWQgYnkgdGhlIGFuaW1h
dGlvbgorICAgICAqIEBwYXJhbSB3ZWlnaHQgZGVmaW5lcyB0aGUgd2VpZ2h0IHRvIGFwcGx5IHRv
IHRoaXMgdmFsdWUgKERlZmF1bHRzIHRvIDEuMCkKKyAgICAgKi8KKyAgICBSdW50aW1lQW5pbWF0
aW9uLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHdlaWdodCkg
eworICAgICAgICBpZiAodGhpcy5fdGFyZ2V0SXNBcnJheSkgeworICAgICAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX3RhcmdldC5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0W2luZGV4XTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0YXJnZXQsIHRoaXMuX2FjdGl2ZVRhcmdldHNbaW5kZXhd
LCBjdXJyZW50VmFsdWUsIHdlaWdodCwgaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX3Rhcmdl
dCwgdGhpcy5fZGlyZWN0VGFyZ2V0LCBjdXJyZW50VmFsdWUsIHdlaWdodCwgMCk7CisgICAgfTsK
KyAgICBSdW50aW1lQW5pbWF0aW9uLnByb3RvdHlwZS5fZ2V0T3JpZ2luYWxWYWx1ZXMgPSBmdW5j
dGlvbiAodGFyZ2V0SW5kZXgpIHsKKyAgICAgICAgaWYgKHRhcmdldEluZGV4ID09PSB2b2lkIDAp
IHsgdGFyZ2V0SW5kZXggPSAwOyB9CisgICAgICAgIHZhciBvcmlnaW5hbFZhbHVlOworICAgICAg
ICB2YXIgdGFyZ2V0ID0gdGhpcy5fYWN0aXZlVGFyZ2V0c1t0YXJnZXRJbmRleF07CisgICAgICAg
IGlmICh0YXJnZXQuZ2V0UmVzdFBvc2UgJiYgdGhpcy5fdGFyZ2V0UGF0aCA9PT0gIl9tYXRyaXgi
KSB7IC8vIEZvciBib25lcworICAgICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRhcmdldC5nZXRS
ZXN0UG9zZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb3JpZ2lu
YWxWYWx1ZSA9IHRhcmdldFt0aGlzLl90YXJnZXRQYXRoXTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAob3JpZ2luYWxWYWx1ZSAmJiBvcmlnaW5hbFZhbHVlLmNsb25lKSB7CisgICAgICAgICAgICB0
aGlzLl9vcmlnaW5hbFZhbHVlW3RhcmdldEluZGV4XSA9IG9yaWdpbmFsVmFsdWUuY2xvbmUoKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVmFs
dWVbdGFyZ2V0SW5kZXhdID0gb3JpZ2luYWxWYWx1ZTsKKyAgICAgICAgfQorICAgIH07CisgICAg
UnVudGltZUFuaW1hdGlvbi5wcm90b3R5cGUuX3NldFZhbHVlID0gZnVuY3Rpb24gKHRhcmdldCwg
ZGVzdGluYXRpb24sIGN1cnJlbnRWYWx1ZSwgd2VpZ2h0LCB0YXJnZXRJbmRleCkgeworICAgICAg
ICAvLyBTZXQgdmFsdWUKKyAgICAgICAgdGhpcy5fY3VycmVudEFjdGl2ZVRhcmdldCA9IGRlc3Rp
bmF0aW9uOworICAgICAgICB0aGlzLl93ZWlnaHQgPSB3ZWlnaHQ7CisgICAgICAgIGlmICh0aGlz
Ll9lbmFibGVCbGVuZGluZyAmJiB0aGlzLl9ibGVuZGluZ0ZhY3RvciA8PSAxLjApIHsKKyAgICAg
ICAgICAgIGlmICghdGhpcy5fb3JpZ2luYWxCbGVuZFZhbHVlKSB7CisgICAgICAgICAgICAgICAg
dmFyIG9yaWdpbmFsVmFsdWUgPSBkZXN0aW5hdGlvblt0aGlzLl90YXJnZXRQYXRoXTsKKyAgICAg
ICAgICAgICAgICBpZiAob3JpZ2luYWxWYWx1ZS5jbG9uZSkgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9vcmlnaW5hbEJsZW5kVmFsdWUgPSBvcmlnaW5hbFZhbHVlLmNsb25lKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9vcmlnaW5hbEJsZW5kVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9vcmlnaW5hbEJsZW5k
VmFsdWUubSkgeyAvLyBNYXRyaXgKKyAgICAgICAgICAgICAgICBpZiAoX2FuaW1hdGlvbl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBbmltYXRpb24iXS5BbGxvd01hdHJpeERlY29tcG9z
ZUZvckludGVycG9sYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJl
bnRWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLkRlY29tcG9zZUxlcnBUb1JlZih0
aGlzLl9vcmlnaW5hbEJsZW5kVmFsdWUsIGN1cnJlbnRWYWx1ZSwgdGhpcy5fYmxlbmRpbmdGYWN0
b3IsIHRoaXMuX2N1cnJlbnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
VmFsdWUgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
TWF0cml4Il0uRGVjb21wb3NlTGVycCh0aGlzLl9vcmlnaW5hbEJsZW5kVmFsdWUsIGN1cnJlbnRW
YWx1ZSwgdGhpcy5fYmxlbmRpbmdGYWN0b3IpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fY3VycmVudFZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWF0cml4Il0uTGVy
cFRvUmVmKHRoaXMuX29yaWdpbmFsQmxlbmRWYWx1ZSwgY3VycmVudFZhbHVlLCB0aGlzLl9ibGVu
ZGluZ0ZhY3RvciwgdGhpcy5fY3VycmVudFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
X2N1cnJlbnRWYWx1ZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJNYXRyaXgiXS5MZXJwKHRoaXMuX29yaWdpbmFsQmxlbmRWYWx1ZSwgY3VycmVudFZh
bHVlLCB0aGlzLl9ibGVuZGluZ0ZhY3Rvcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSBfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkFuaW1hdGlvbiJdLl9Vbml2ZXJzYWxMZXJwKHRoaXMuX29yaWdpbmFsQmxl
bmRWYWx1ZSwgY3VycmVudFZhbHVlLCB0aGlzLl9ibGVuZGluZ0ZhY3Rvcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YXIgYmxlbmRpbmdTcGVlZCA9IHRhcmdldCAmJiB0YXJnZXQuYW5p
bWF0aW9uUHJvcGVydGllc092ZXJyaWRlID8gdGFyZ2V0LmFuaW1hdGlvblByb3BlcnRpZXNPdmVy
cmlkZS5ibGVuZGluZ1NwZWVkIDogdGhpcy5fYW5pbWF0aW9uLmJsZW5kaW5nU3BlZWQ7CisgICAg
ICAgICAgICB0aGlzLl9ibGVuZGluZ0ZhY3RvciArPSBibGVuZGluZ1NwZWVkOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gY3VycmVu
dFZhbHVlOworICAgICAgICB9CisgICAgICAgIGlmICh3ZWlnaHQgIT09IC0xLjApIHsKKyAgICAg
ICAgICAgIHRoaXMuX3NjZW5lLl9yZWdpc3RlclRhcmdldEZvckxhdGVBbmltYXRpb25CaW5kaW5n
KHRoaXMsIHRoaXMuX29yaWdpbmFsVmFsdWVbdGFyZ2V0SW5kZXhdKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uW3RoaXMuX3RhcmdldFBhdGhdID0g
dGhpcy5fY3VycmVudFZhbHVlOworICAgICAgICB9CisgICAgICAgIGlmICh0YXJnZXQubWFya0Fz
RGlydHkpIHsKKyAgICAgICAgICAgIHRhcmdldC5tYXJrQXNEaXJ0eSh0aGlzLl9hbmltYXRpb24u
dGFyZ2V0UHJvcGVydHkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRz
IHRoZSBsb29wIHBtb2RlIG9mIHRoZSBydW50aW1lIGFuaW1hdGlvbgorICAgICAqIEByZXR1cm5z
IExvb3AgTW9kZQorICAgICAqLworICAgIFJ1bnRpbWVBbmltYXRpb24ucHJvdG90eXBlLl9nZXRD
b3JyZWN0TG9vcE1vZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl90YXJnZXQg
JiYgdGhpcy5fdGFyZ2V0LmFuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3RhcmdldC5hbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUubG9vcE1v
ZGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2FuaW1hdGlvbi5sb29wTW9kZTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIE1vdmUgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHRvIGEg
Z2l2ZW4gZnJhbWUKKyAgICAgKiBAcGFyYW0gZnJhbWUgZGVmaW5lcyB0aGUgZnJhbWUgdG8gbW92
ZSB0bworICAgICAqLworICAgIFJ1bnRpbWVBbmltYXRpb24ucHJvdG90eXBlLmdvVG9GcmFtZSA9
IGZ1bmN0aW9uIChmcmFtZSkgeworICAgICAgICB2YXIga2V5cyA9IHRoaXMuX2FuaW1hdGlvbi5n
ZXRLZXlzKCk7CisgICAgICAgIGlmIChmcmFtZSA8IGtleXNbMF0uZnJhbWUpIHsKKyAgICAgICAg
ICAgIGZyYW1lID0ga2V5c1swXS5mcmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChm
cmFtZSA+IGtleXNba2V5cy5sZW5ndGggLSAxXS5mcmFtZSkgeworICAgICAgICAgICAgZnJhbWUg
PSBrZXlzW2tleXMubGVuZ3RoIC0gMV0uZnJhbWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gTmVl
ZCB0byByZXNldCBhbmltYXRpb24gZXZlbnRzCisgICAgICAgIHZhciBldmVudHMgPSB0aGlzLl9l
dmVudHM7CisgICAgICAgIGlmIChldmVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgZXZlbnRzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgICAgIGlmICghZXZlbnRzW2luZGV4XS5vbmx5T25jZSkgeworICAgICAgICAgICAgICAgICAg
ICAvLyByZXNldCBldmVudHMgaW4gdGhlIGZ1dHVyZQorICAgICAgICAgICAgICAgICAgICBldmVu
dHNbaW5kZXhdLmlzRG9uZSA9IGV2ZW50c1tpbmRleF0uZnJhbWUgPCBmcmFtZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY3VycmVu
dEZyYW1lID0gZnJhbWU7CisgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLl9hbmltYXRp
b24uX2ludGVycG9sYXRlKGZyYW1lLCB0aGlzLl9hbmltYXRpb25TdGF0ZSk7CisgICAgICAgIHRo
aXMuc2V0VmFsdWUoY3VycmVudFZhbHVlLCAtMSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBA
aGlkZGVuIEludGVybmFsIHVzZSBvbmx5CisgICAgICovCisgICAgUnVudGltZUFuaW1hdGlvbi5w
cm90b3R5cGUuX3ByZXBhcmVGb3JTcGVlZFJhdGlvQ2hhbmdlID0gZnVuY3Rpb24gKG5ld1NwZWVk
UmF0aW8pIHsKKyAgICAgICAgdmFyIG5ld1JhdGlvID0gdGhpcy5fcHJldmlvdXNEZWxheSAqICh0
aGlzLl9hbmltYXRpb24uZnJhbWVQZXJTZWNvbmQgKiBuZXdTcGVlZFJhdGlvKSAvIDEwMDAuMDsK
KyAgICAgICAgdGhpcy5fcmF0aW9PZmZzZXQgPSB0aGlzLl9wcmV2aW91c1JhdGlvIC0gbmV3UmF0
aW87CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IGFuaW1hdGlv
bgorICAgICAqIEBwYXJhbSBkZWxheSBkZWZpbmVzIHRoZSBkZWxheSB0byBhZGQgdG8gdGhlIGN1
cnJlbnQgZnJhbWUKKyAgICAgKiBAcGFyYW0gZnJvbSBkZWZpbmVzIHRoZSBsb3dlciBib3VuZCBv
ZiB0aGUgYW5pbWF0aW9uIHJhbmdlCisgICAgICogQHBhcmFtIHRvIGRlZmluZXMgdGhlIHVwcGVy
IGJvdW5kIG9mIHRoZSBhbmltYXRpb24gcmFuZ2UKKyAgICAgKiBAcGFyYW0gbG9vcCBkZWZpbmVz
IGlmIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBtdXN0IGxvb3AKKyAgICAgKiBAcGFyYW0gc3BlZWRS
YXRpbyBkZWZpbmVzIHRoZSBjdXJyZW50IHNwZWVkIHJhdGlvCisgICAgICogQHBhcmFtIHdlaWdo
dCBkZWZpbmVzIHRoZSB3ZWlnaHQgb2YgdGhlIGFuaW1hdGlvbiAoZGVmYXVsdCBpcyAtMSBzbyBu
byB3ZWlnaHQpCisgICAgICogQHBhcmFtIG9uTG9vcCBvcHRpb25hbCBjYWxsYmFjayBjYWxsZWQg
d2hlbiBhbmltYXRpb24gbG9vcHMKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGlu
ZyBpZiB0aGUgYW5pbWF0aW9uIGlzIHJ1bm5pbmcKKyAgICAgKi8KKyAgICBSdW50aW1lQW5pbWF0
aW9uLnByb3RvdHlwZS5hbmltYXRlID0gZnVuY3Rpb24gKGRlbGF5LCBmcm9tLCB0bywgbG9vcCwg
c3BlZWRSYXRpbywgd2VpZ2h0KSB7CisgICAgICAgIGlmICh3ZWlnaHQgPT09IHZvaWQgMCkgeyB3
ZWlnaHQgPSAtMS4wOyB9CisgICAgICAgIHZhciBhbmltYXRpb24gPSB0aGlzLl9hbmltYXRpb247
CisgICAgICAgIHZhciB0YXJnZXRQcm9wZXJ0eVBhdGggPSBhbmltYXRpb24udGFyZ2V0UHJvcGVy
dHlQYXRoOworICAgICAgICBpZiAoIXRhcmdldFByb3BlcnR5UGF0aCB8fCB0YXJnZXRQcm9wZXJ0
eVBhdGgubGVuZ3RoIDwgMSkgeworICAgICAgICAgICAgdGhpcy5fc3RvcHBlZCA9IHRydWU7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJldHVyblZh
bHVlID0gdHJ1ZTsKKyAgICAgICAgLy8gQ2hlY2sgbGltaXRzCisgICAgICAgIGlmIChmcm9tIDwg
dGhpcy5fbWluRnJhbWUgfHwgZnJvbSA+IHRoaXMuX21heEZyYW1lKSB7CisgICAgICAgICAgICBm
cm9tID0gdGhpcy5fbWluRnJhbWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRvIDwgdGhpcy5f
bWluRnJhbWUgfHwgdG8gPiB0aGlzLl9tYXhGcmFtZSkgeworICAgICAgICAgICAgdG8gPSB0aGlz
Ll9tYXhGcmFtZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcmFuZ2UgPSB0byAtIGZyb207Cisg
ICAgICAgIHZhciBvZmZzZXRWYWx1ZTsKKyAgICAgICAgLy8gQ29tcHV0ZSByYXRpbyB3aGljaCBy
ZXByZXNlbnRzIHRoZSBmcmFtZSBkZWx0YSBiZXR3ZWVuIGZyb20gYW5kIHRvCisgICAgICAgIHZh
ciByYXRpbyA9IChkZWxheSAqIChhbmltYXRpb24uZnJhbWVQZXJTZWNvbmQgKiBzcGVlZFJhdGlv
KSAvIDEwMDAuMCkgKyB0aGlzLl9yYXRpb09mZnNldDsKKyAgICAgICAgdmFyIGhpZ2hMaW1pdFZh
bHVlID0gMDsKKyAgICAgICAgdGhpcy5fcHJldmlvdXNEZWxheSA9IGRlbGF5OworICAgICAgICB0
aGlzLl9wcmV2aW91c1JhdGlvID0gcmF0aW87CisgICAgICAgIGlmICghbG9vcCAmJiAodG8gPj0g
ZnJvbSAmJiByYXRpbyA+PSByYW5nZSkpIHsgLy8gSWYgd2UgYXJlIG91dCBvZiByYW5nZSBhbmQg
bm90IGxvb3BpbmcgZ2V0IGJhY2sgdG8gY2FsbGVyCisgICAgICAgICAgICByZXR1cm5WYWx1ZSA9
IGZhbHNlOworICAgICAgICAgICAgaGlnaExpbWl0VmFsdWUgPSBhbmltYXRpb24uX2dldEtleVZh
bHVlKHRoaXMuX21heFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghbG9vcCAm
JiAoZnJvbSA+PSB0byAmJiByYXRpbyA8PSByYW5nZSkpIHsKKyAgICAgICAgICAgIHJldHVyblZh
bHVlID0gZmFsc2U7CisgICAgICAgICAgICBoaWdoTGltaXRWYWx1ZSA9IGFuaW1hdGlvbi5fZ2V0
S2V5VmFsdWUodGhpcy5fbWluVmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRo
aXMuX2FuaW1hdGlvblN0YXRlLmxvb3BNb2RlICE9PSBfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTkxPT1BNT0RFX0NZQ0xFKSB7Cisg
ICAgICAgICAgICB2YXIga2V5T2Zmc2V0ID0gdG8udG9TdHJpbmcoKSArIGZyb20udG9TdHJpbmco
KTsKKyAgICAgICAgICAgIGlmICghdGhpcy5fb2Zmc2V0c0NhY2hlW2tleU9mZnNldF0pIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9hbmltYXRpb25TdGF0ZS5yZXBlYXRDb3VudCA9IDA7CisgICAg
ICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uU3RhdGUubG9vcE1vZGUgPSBfYW5pbWF0aW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTkxPT1BNT0RF
X0NZQ0xFOworICAgICAgICAgICAgICAgIHZhciBmcm9tVmFsdWUgPSBhbmltYXRpb24uX2ludGVy
cG9sYXRlKGZyb20sIHRoaXMuX2FuaW1hdGlvblN0YXRlKTsKKyAgICAgICAgICAgICAgICB2YXIg
dG9WYWx1ZSA9IGFuaW1hdGlvbi5faW50ZXJwb2xhdGUodG8sIHRoaXMuX2FuaW1hdGlvblN0YXRl
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbmltYXRpb25TdGF0ZS5sb29wTW9kZSA9IHRoaXMu
X2dldENvcnJlY3RMb29wTW9kZSgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYW5pbWF0aW9u
LmRhdGFUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZsb2F0CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBbmlt
YXRpb24iXS5BTklNQVRJT05UWVBFX0ZMT0FUOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5fb2Zmc2V0c0NhY2hlW2tleU9mZnNldF0gPSB0b1ZhbHVlIC0gZnJvbVZhbHVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIC8vIFF1YXRlcm5p
b24KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVfUVVBVEVSTklPTjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldHNDYWNoZVtrZXlPZmZzZXRdID0gdG9WYWx1
ZS5zdWJ0cmFjdChmcm9tVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFZlY3RvcjMKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBf
YW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFuaW1hdGlvbiJdLkFOSU1B
VElPTlRZUEVfVkVDVE9SMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldHND
YWNoZVtrZXlPZmZzZXRdID0gdG9WYWx1ZS5zdWJ0cmFjdChmcm9tVmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAvLyBWZWN0b3IyCisgICAgICAgICAgICAgICAgICAgIGNhc2UgX2FuaW1hdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05UWVBF
X1ZFQ1RPUjI6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vZmZzZXRzQ2FjaGVba2V5
T2Zmc2V0XSA9IHRvVmFsdWUuc3VidHJhY3QoZnJvbVZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gU2l6ZQorICAgICAgICAgICAgICAgICAgICBjYXNlIF9hbmltYXRpb25fX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9TSVpFOgorICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0c0NhY2hlW2tleU9mZnNldF0gPSB0b1Zh
bHVlLnN1YnRyYWN0KGZyb21WYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbG9yMwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIF9hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9DT0xPUjM6CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9vZmZzZXRzQ2FjaGVba2V5T2Zmc2V0XSA9IHRvVmFsdWUuc3VidHJh
Y3QoZnJvbVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0
aGlzLl9oaWdoTGltaXRzQ2FjaGVba2V5T2Zmc2V0XSA9IHRvVmFsdWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBoaWdoTGltaXRWYWx1ZSA9IHRoaXMuX2hpZ2hMaW1pdHNDYWNoZVtrZXlP
ZmZzZXRdOworICAgICAgICAgICAgb2Zmc2V0VmFsdWUgPSB0aGlzLl9vZmZzZXRzQ2FjaGVba2V5
T2Zmc2V0XTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2Zmc2V0VmFsdWUgPT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgc3dpdGNoIChhbmltYXRpb24uZGF0YVR5cGUpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGbG9hdAorICAgICAgICAgICAgICAgIGNhc2UgX2FuaW1hdGlvbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05UWVBFX0ZMT0FUOgor
ICAgICAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIC8vIFF1YXRlcm5pb24KKyAgICAgICAgICAgICAgICBj
YXNlIF9hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQW5pbWF0aW9uIl0u
QU5JTUFUSU9OVFlQRV9RVUFURVJOSU9OOgorICAgICAgICAgICAgICAgICAgICBvZmZzZXRWYWx1
ZSA9IF9zdGF0aWNPZmZzZXRWYWx1ZVF1YXRlcm5pb247CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIC8vIFZlY3RvcjMKKyAgICAgICAgICAgICAgICBjYXNlIF9h
bmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQW5pbWF0aW9uIl0uQU5JTUFU
SU9OVFlQRV9WRUNUT1IzOgorICAgICAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZSA9IF9zdGF0
aWNPZmZzZXRWYWx1ZVZlY3RvcjM7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIC8vIFZlY3RvcjIKKyAgICAgICAgICAgICAgICBjYXNlIF9hbmltYXRpb25fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9WRUNU
T1IyOgorICAgICAgICAgICAgICAgICAgICBvZmZzZXRWYWx1ZSA9IF9zdGF0aWNPZmZzZXRWYWx1
ZVZlY3RvcjI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8v
IFNpemUKKyAgICAgICAgICAgICAgICBjYXNlIF9hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9TSVpFOgorICAgICAgICAgICAg
ICAgICAgICBvZmZzZXRWYWx1ZSA9IF9zdGF0aWNPZmZzZXRWYWx1ZVNpemU7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8vIENvbG9yMworICAgICAgICAgICAg
ICAgIGNhc2UgX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBbmltYXRp
b24iXS5BTklNQVRJT05UWVBFX0NPTE9SMzoKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VmFs
dWUgPSBfc3RhdGljT2Zmc2V0VmFsdWVDb2xvcjM7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgLy8gQ29tcHV0ZSB2YWx1ZQorICAgICAgICB2YXIgY3VycmVudEZyYW1lOworICAg
ICAgICBpZiAodGhpcy5faG9zdCAmJiB0aGlzLl9ob3N0LnN5bmNSb290KSB7CisgICAgICAgICAg
ICB2YXIgc3luY1Jvb3QgPSB0aGlzLl9ob3N0LnN5bmNSb290OworICAgICAgICAgICAgdmFyIGhv
c3ROb3JtYWxpemVkRnJhbWUgPSAoc3luY1Jvb3QubWFzdGVyRnJhbWUgLSBzeW5jUm9vdC5mcm9t
RnJhbWUpIC8gKHN5bmNSb290LnRvRnJhbWUgLSBzeW5jUm9vdC5mcm9tRnJhbWUpOworICAgICAg
ICAgICAgY3VycmVudEZyYW1lID0gZnJvbSArICh0byAtIGZyb20pICogaG9zdE5vcm1hbGl6ZWRG
cmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFt
ZSA9IChyZXR1cm5WYWx1ZSAmJiByYW5nZSAhPT0gMCkgPyBmcm9tICsgcmF0aW8gJSByYW5nZSA6
IHRvOworICAgICAgICB9CisgICAgICAgIC8vIFJlc2V0IGV2ZW50cyBpZiBsb29waW5nCisgICAg
ICAgIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7CisgICAgICAgIGlmIChyYW5nZSA+IDAgJiYg
dGhpcy5jdXJyZW50RnJhbWUgPiBjdXJyZW50RnJhbWUgfHwKKyAgICAgICAgICAgIHJhbmdlIDwg
MCAmJiB0aGlzLmN1cnJlbnRGcmFtZSA8IGN1cnJlbnRGcmFtZSkgeworICAgICAgICAgICAgdGhp
cy5fb25Mb29wKCk7CisgICAgICAgICAgICAvLyBOZWVkIHRvIHJlc2V0IGFuaW1hdGlvbiBldmVu
dHMKKyAgICAgICAgICAgIGlmIChldmVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGV2ZW50cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFldmVudHNbaW5kZXhdLm9ubHlPbmNlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyByZXNldCBldmVudCwgdGhlIGFuaW1hdGlvbiBpcyBsb29waW5nCisg
ICAgICAgICAgICAgICAgICAgICAgICBldmVudHNbaW5kZXhdLmlzRG9uZSA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2N1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZTsKKyAgICAg
ICAgdGhpcy5fYW5pbWF0aW9uU3RhdGUucmVwZWF0Q291bnQgPSByYW5nZSA9PT0gMCA/IDAgOiAo
cmF0aW8gLyByYW5nZSkgPj4gMDsKKyAgICAgICAgdGhpcy5fYW5pbWF0aW9uU3RhdGUuaGlnaExp
bWl0VmFsdWUgPSBoaWdoTGltaXRWYWx1ZTsKKyAgICAgICAgdGhpcy5fYW5pbWF0aW9uU3RhdGUu
b2Zmc2V0VmFsdWUgPSBvZmZzZXRWYWx1ZTsKKyAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGFu
aW1hdGlvbi5faW50ZXJwb2xhdGUoY3VycmVudEZyYW1lLCB0aGlzLl9hbmltYXRpb25TdGF0ZSk7
CisgICAgICAgIC8vIFNldCB2YWx1ZQorICAgICAgICB0aGlzLnNldFZhbHVlKGN1cnJlbnRWYWx1
ZSwgd2VpZ2h0KTsKKyAgICAgICAgLy8gQ2hlY2sgZXZlbnRzCisgICAgICAgIGlmIChldmVudHMu
bGVuZ3RoKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZXZlbnRz
Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBjdXJyZW50
IGZyYW1lIGhhcyBwYXNzZWQgZXZlbnQgZnJhbWUgYW5kIHRoYXQgZXZlbnQgZnJhbWUgaXMgd2l0
aGluIHRoZSBjdXJyZW50IHJhbmdlCisgICAgICAgICAgICAgICAgLy8gQWxzbywgaGFuZGxlIGJv
dGggZm9yd2FyZCBhbmQgcmV2ZXJzZSBhbmltYXRpb25zCisgICAgICAgICAgICAgICAgaWYgKChy
YW5nZSA+IDAgJiYgY3VycmVudEZyYW1lID49IGV2ZW50c1tpbmRleF0uZnJhbWUgJiYgZXZlbnRz
W2luZGV4XS5mcmFtZSA+PSBmcm9tKSB8fAorICAgICAgICAgICAgICAgICAgICAocmFuZ2UgPCAw
ICYmIGN1cnJlbnRGcmFtZSA8PSBldmVudHNbaW5kZXhdLmZyYW1lICYmIGV2ZW50c1tpbmRleF0u
ZnJhbWUgPD0gZnJvbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gZXZlbnRz
W2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFldmVudC5pc0RvbmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIGV2ZW50IHNob3VsZCBiZSBkb25lIG9ubHkgb25jZSwg
cmVtb3ZlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50Lm9ubHlPbmNlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLnNwbGljZShpbmRleCwgMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgtLTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmlzRG9uZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC5hY3Rpb24oY3VycmVudEZyYW1lKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgZXZlbnQgaGFzIGFscmVh
ZHkgYmUgZG9uZS4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFyZXR1cm5WYWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fc3RvcHBlZCA9
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH07Cisg
ICAgcmV0dXJuIFJ1bnRpbWVBbmltYXRpb247Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL0F1ZGlvL2FuYWx5c2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vQXVkaW8vYW5hbHlzZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuYWx5c2VyICovCisvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuYWx5c2VyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBBbmFseXNlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworCisvKioKKyAqIENs
YXNzIHVzZWQgdG8gd29yayB3aXRoIHNvdW5kIGFuYWx5emVyIHVzaW5nIGZhc3QgZm91cmllciB0
cmFuc2Zvcm0gKEZGVCkKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9w
bGF5aW5nX3NvdW5kc19hbmRfbXVzaWMKKyAqLwordmFyIEFuYWx5c2VyID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgYW5hbHlzZXIK
KyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyBob3N0aW5nIHNjZW5lCisgICAgICovCisgICAg
ZnVuY3Rpb24gQW5hbHlzZXIoc2NlbmUpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
b3Igc2V0cyB0aGUgc21vb3RoaW5nCisgICAgICAgICAqIEBpZ25vcmVuYW1pbmcKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuU01PT1RISU5HID0gMC43NTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3Igc2V0cyB0aGUgRkZUIHRhYmxlIHNpemUKKyAgICAgICAgICogQGlnbm9yZW5h
bWluZworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5GRlRfU0laRSA9IDUxMjsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgYmFyIGdyYXBoIGFtcGxpdHVkZQorICAg
ICAgICAgKiBAaWdub3JlbmFtaW5nCisgICAgICAgICAqLworICAgICAgICB0aGlzLkJBUkdSQVBI
QU1QTElUVURFID0gMjU2OworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgZGVidWcgY2FudmFzCisgICAgICAgICAqIEBpZ25vcmVuYW1pbmcK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuREVCVUdDQU5WQVNQT1MgPSB7IHg6IDIwLCB5OiAy
MCB9OworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBkZWJ1ZyBjYW52
YXMgc2l6ZQorICAgICAgICAgKiBAaWdub3JlbmFtaW5nCisgICAgICAgICAqLworICAgICAgICB0
aGlzLkRFQlVHQ0FOVkFTU0laRSA9IHsgd2lkdGg6IDMyMCwgaGVpZ2h0OiAyMDAgfTsKKyAgICAg
ICAgdGhpcy5fc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgdGhpcy5fYXVkaW9FbmdpbmUgPSBfRW5n
aW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uYXVkaW9F
bmdpbmU7CisgICAgICAgIGlmICh0aGlzLl9hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiB0
aGlzLl9hdWRpb0VuZ2luZS5hdWRpb0NvbnRleHQpIHsKKyAgICAgICAgICAgIHRoaXMuX3dlYkF1
ZGlvQW5hbHlzZXIgPSB0aGlzLl9hdWRpb0VuZ2luZS5hdWRpb0NvbnRleHQuY3JlYXRlQW5hbHlz
ZXIoKTsKKyAgICAgICAgICAgIHRoaXMuX3dlYkF1ZGlvQW5hbHlzZXIubWluRGVjaWJlbHMgPSAt
MTQwOworICAgICAgICAgICAgdGhpcy5fd2ViQXVkaW9BbmFseXNlci5tYXhEZWNpYmVscyA9IDA7
CisgICAgICAgICAgICB0aGlzLl9ieXRlRnJlcXMgPSBuZXcgVWludDhBcnJheSh0aGlzLl93ZWJB
dWRpb0FuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KTsKKyAgICAgICAgICAgIHRoaXMuX2J5dGVU
aW1lID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5fd2ViQXVkaW9BbmFseXNlci5mcmVxdWVuY3lCaW5D
b3VudCk7CisgICAgICAgICAgICB0aGlzLl9mbG9hdEZyZXFzID0gbmV3IEZsb2F0MzJBcnJheSh0
aGlzLl93ZWJBdWRpb0FuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIG51bWJlciBvZiBkYXRhIHZhbHVlcyB5b3Ugd2ls
bCBoYXZlIHRvIHBsYXkgd2l0aCBmb3IgdGhlIHZpc3VhbGl6YXRpb24KKyAgICAgKiBAc2VlIGh0
dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BbmFseXNlck5v
ZGUvZnJlcXVlbmN5QmluQ291bnQKKyAgICAgKiBAcmV0dXJucyBhIG51bWJlcgorICAgICAqLwor
ICAgIEFuYWx5c2VyLnByb3RvdHlwZS5nZXRGcmVxdWVuY3lCaW5Db3VudCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKHRoaXMuX2F1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fd2ViQXVkaW9BbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudDsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGZyZXF1ZW5jeSBk
YXRhIGFzIGEgYnl0ZSBhcnJheQorICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxs
YS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0FuYWx5c2VyTm9kZS9nZXRCeXRlRnJlcXVlbmN5RGF0
YQorICAgICAqIEByZXR1cm5zIGEgVWludDhBcnJheQorICAgICAqLworICAgIEFuYWx5c2VyLnBy
b3RvdHlwZS5nZXRCeXRlRnJlcXVlbmN5RGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMuX2F1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvKSB7CisgICAgICAgICAgICB0aGlzLl93
ZWJBdWRpb0FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCA9IHRoaXMuU01PT1RISU5HOwor
ICAgICAgICAgICAgdGhpcy5fd2ViQXVkaW9BbmFseXNlci5mZnRTaXplID0gdGhpcy5GRlRfU0la
RTsKKyAgICAgICAgICAgIHRoaXMuX3dlYkF1ZGlvQW5hbHlzZXIuZ2V0Qnl0ZUZyZXF1ZW5jeURh
dGEodGhpcy5fYnl0ZUZyZXFzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fYnl0
ZUZyZXFzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCB3YXZlZm9y
bSBhcyBhIGJ5dGUgYXJyYXkKKyAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEu
b3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BbmFseXNlck5vZGUvZ2V0Qnl0ZVRpbWVEb21haW5EYXRh
CisgICAgICogQHJldHVybnMgYSBVaW50OEFycmF5CisgICAgICovCisgICAgQW5hbHlzZXIucHJv
dG90eXBlLmdldEJ5dGVUaW1lRG9tYWluRGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMuX2F1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvKSB7CisgICAgICAgICAgICB0aGlzLl93
ZWJBdWRpb0FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCA9IHRoaXMuU01PT1RISU5HOwor
ICAgICAgICAgICAgdGhpcy5fd2ViQXVkaW9BbmFseXNlci5mZnRTaXplID0gdGhpcy5GRlRfU0la
RTsKKyAgICAgICAgICAgIHRoaXMuX3dlYkF1ZGlvQW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5E
YXRhKHRoaXMuX2J5dGVUaW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fYnl0
ZVRpbWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGZyZXF1ZW5j
eSBkYXRhIGFzIGEgZmxvYXQgYXJyYXkKKyAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BbmFseXNlck5vZGUvZ2V0Qnl0ZUZyZXF1ZW5j
eURhdGEKKyAgICAgKiBAcmV0dXJucyBhIEZsb2F0MzJBcnJheQorICAgICAqLworICAgIEFuYWx5
c2VyLnByb3RvdHlwZS5nZXRGbG9hdEZyZXF1ZW5jeURhdGEgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICh0aGlzLl9hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbykgeworICAgICAgICAgICAg
dGhpcy5fd2ViQXVkaW9BbmFseXNlci5zbW9vdGhpbmdUaW1lQ29uc3RhbnQgPSB0aGlzLlNNT09U
SElORzsKKyAgICAgICAgICAgIHRoaXMuX3dlYkF1ZGlvQW5hbHlzZXIuZmZ0U2l6ZSA9IHRoaXMu
RkZUX1NJWkU7CisgICAgICAgICAgICB0aGlzLl93ZWJBdWRpb0FuYWx5c2VyLmdldEZsb2F0RnJl
cXVlbmN5RGF0YSh0aGlzLl9mbG9hdEZyZXFzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dGhpcy5fZmxvYXRGcmVxczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbmRlcnMgdGhlIGRl
YnVnIGNhbnZhcworICAgICAqLworICAgIEFuYWx5c2VyLnByb3RvdHlwZS5kcmF3RGVidWdDYW52
YXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlm
ICh0aGlzLl9hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbykgeworICAgICAgICAgICAgaWYgKCF0
aGlzLl9kZWJ1Z0NhbnZhcykgeworICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnQ2FudmFzID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgICAgICAgICAgICAgdGhpcy5f
ZGVidWdDYW52YXMud2lkdGggPSB0aGlzLkRFQlVHQ0FOVkFTU0laRS53aWR0aDsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9kZWJ1Z0NhbnZhcy5oZWlnaHQgPSB0aGlzLkRFQlVHQ0FOVkFTU0laRS5o
ZWlnaHQ7CisgICAgICAgICAgICAgICAgdGhpcy5fZGVidWdDYW52YXMuc3R5bGUucG9zaXRpb24g
PSAiYWJzb2x1dGUiOworICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnQ2FudmFzLnN0eWxlLnRv
cCA9IHRoaXMuREVCVUdDQU5WQVNQT1MueSArICJweCI7CisgICAgICAgICAgICAgICAgdGhpcy5f
ZGVidWdDYW52YXMuc3R5bGUubGVmdCA9IHRoaXMuREVCVUdDQU5WQVNQT1MueCArICJweCI7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fZGVidWdDYW52YXNDb250ZXh0ID0gdGhpcy5fZGVidWdDYW52
YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKHRoaXMuX2RlYnVnQ2FudmFzKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3Rl
ckZ1bmMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmRyYXdEZWJ1
Z0NhbnZhcygpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdGhpcy5fc2Nl
bmUucmVnaXN0ZXJCZWZvcmVSZW5kZXIodGhpcy5fcmVnaXN0ZXJGdW5jKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9yZWdpc3RlckZ1bmMgJiYgdGhpcy5fZGVidWdDYW52
YXNDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgdmFyIHdvcmtpbmdBcnJheSA9IHRoaXMuZ2V0
Qnl0ZUZyZXF1ZW5jeURhdGEoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1Z0NhbnZhc0Nv
bnRleHQuZmlsbFN0eWxlID0gJ3JnYigwLCAwLCAwKSc7CisgICAgICAgICAgICAgICAgdGhpcy5f
ZGVidWdDYW52YXNDb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuREVCVUdDQU5WQVNTSVpFLndp
ZHRoLCB0aGlzLkRFQlVHQ0FOVkFTU0laRS5oZWlnaHQpOworICAgICAgICAgICAgICAgIC8vIERy
YXcgdGhlIGZyZXF1ZW5jeSBkb21haW4gY2hhcnQuCisgICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLmdldEZyZXF1ZW5jeUJpbkNvdW50KCk7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgdmFsdWUgPSB3b3JraW5nQXJyYXlbaV07CisgICAgICAgICAgICAgICAg
ICAgIHZhciBwZXJjZW50ID0gdmFsdWUgLyB0aGlzLkJBUkdSQVBIQU1QTElUVURFOworICAgICAg
ICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5ERUJVR0NBTlZBU1NJWkUuaGVpZ2h0ICog
cGVyY2VudDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuREVCVUdDQU5W
QVNTSVpFLmhlaWdodCAtIGhlaWdodCAtIDE7CisgICAgICAgICAgICAgICAgICAgIHZhciBiYXJX
aWR0aCA9IHRoaXMuREVCVUdDQU5WQVNTSVpFLndpZHRoIC8gdGhpcy5nZXRGcmVxdWVuY3lCaW5D
b3VudCgpOworICAgICAgICAgICAgICAgICAgICB2YXIgaHVlID0gaSAvIHRoaXMuZ2V0RnJlcXVl
bmN5QmluQ291bnQoKSAqIDM2MDsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWdDYW52
YXNDb250ZXh0LmZpbGxTdHlsZSA9ICdoc2woJyArIGh1ZSArICcsIDEwMCUsIDUwJSknOworICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1Z0NhbnZhc0NvbnRleHQuZmlsbFJlY3QoaSAqIGJh
cldpZHRoLCBvZmZzZXQsIGJhcldpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU3RvcHMgcmVu
ZGVyaW5nIHRoZSBkZWJ1ZyBjYW52YXMgYW5kIHJlbW92ZXMgaXQKKyAgICAgKi8KKyAgICBBbmFs
eXNlci5wcm90b3R5cGUuc3RvcERlYnVnQ2FudmFzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAodGhpcy5fZGVidWdDYW52YXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZWdpc3RlckZ1
bmMpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS51bnJlZ2lzdGVyQmVmb3JlUmVuZGVy
KHRoaXMuX3JlZ2lzdGVyRnVuYyk7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJGdW5j
ID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3Zl
Q2hpbGQodGhpcy5fZGVidWdDYW52YXMpOworICAgICAgICAgICAgdGhpcy5fZGVidWdDYW52YXMg
PSBudWxsOworICAgICAgICAgICAgdGhpcy5fZGVidWdDYW52YXNDb250ZXh0ID0gbnVsbDsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ29ubmVjdHMgdHdvIGF1ZGlvIG5vZGVz
CisgICAgICogQHBhcmFtIGlucHV0QXVkaW9Ob2RlIGRlZmluZXMgZmlyc3Qgbm9kZSB0byBjb25u
ZWN0CisgICAgICogQHBhcmFtIG91dHB1dEF1ZGlvTm9kZSBkZWZpbmVzIHNlY29uZCBub2RlIHRv
IGNvbm5lY3QKKyAgICAgKi8KKyAgICBBbmFseXNlci5wcm90b3R5cGUuY29ubmVjdEF1ZGlvTm9k
ZXMgPSBmdW5jdGlvbiAoaW5wdXRBdWRpb05vZGUsIG91dHB1dEF1ZGlvTm9kZSkgeworICAgICAg
ICBpZiAodGhpcy5fYXVkaW9FbmdpbmUuY2FuVXNlV2ViQXVkaW8pIHsKKyAgICAgICAgICAgIGlu
cHV0QXVkaW9Ob2RlLmNvbm5lY3QodGhpcy5fd2ViQXVkaW9BbmFseXNlcik7CisgICAgICAgICAg
ICB0aGlzLl93ZWJBdWRpb0FuYWx5c2VyLmNvbm5lY3Qob3V0cHV0QXVkaW9Ob2RlKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZXMgYWxsIGFzc29jaWF0ZWQgcmVz
b3VyY2VzCisgICAgICovCisgICAgQW5hbHlzZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGlmICh0aGlzLl9hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbykgewor
ICAgICAgICAgICAgdGhpcy5fd2ViQXVkaW9BbmFseXNlci5kaXNjb25uZWN0KCk7CisgICAgICAg
IH0KKyAgICB9OworICAgIHJldHVybiBBbmFseXNlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vQXVkaW8vYXVkaW9FbmdpbmUudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9BdWRpby9hdWRpb0VuZ2luZS50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQXVk
aW9FbmdpbmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXVkaW9Fbmdp
bmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEF1ZGlvRW5naW5lOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9v
YnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
aXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUu
dHMiKTsKKworCisKKy8vIFNldHMgdGhlIGRlZmF1bHQgYXVkaW8gZW5naW5lIHRvIEJhYnlsb24u
anMKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmUi
XS5BdWRpb0VuZ2luZUZhY3RvcnkgPSBmdW5jdGlvbiAoaG9zdEVsZW1lbnQpIHsgcmV0dXJuIG5l
dyBBdWRpb0VuZ2luZShob3N0RWxlbWVudCk7IH07CisvKioKKyAqIFRoaXMgcmVwcmVzZW50cyB0
aGUgZGVmYXVsdCBhdWRpbyBlbmdpbmUgdXNlZCBpbiBiYWJ5bG9uLgorICogSXQgaXMgcmVzcG9u
c2libGUgdG8gcGxheSwgc3luY2hyb25pemUgYW5kIGFuYWx5c2Ugc291bmRzIHRocm91Z2hvdXQg
dGhlICBhcHBsaWNhdGlvbi4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9wbGF5aW5nX3NvdW5kc19hbmRfbXVzaWMKKyAqLwordmFyIEF1ZGlvRW5naW5lID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5l
dyBhdWRpbyBlbmdpbmUuCisgICAgICoKKyAgICAgKiBUaGVyZSBzaG91bGQgYmUgb25seSBvbmUg
cGVyIHBhZ2UgYXMgc29tZSBicm93c2VycyByZXN0cmljdCB0aGUgbnVtYmVyCisgICAgICogb2Yg
YXVkaW8gY29udGV4dHMgeW91IGNhbiBjcmVhdGUuCisgICAgICogQHBhcmFtIGhvc3RFbGVtZW50
IGRlZmluZXMgdGhlIGhvc3QgZWxlbWVudCB3aGVyZSB0byBkaXNwbGF5IHRoZSBtdXRlIGljb24g
aWYgbmVjZXNzYXJ5CisgICAgICovCisgICAgZnVuY3Rpb24gQXVkaW9FbmdpbmUoaG9zdEVsZW1l
bnQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKGhvc3RFbGVtZW50
ID09PSB2b2lkIDApIHsgaG9zdEVsZW1lbnQgPSBudWxsOyB9CisgICAgICAgIHRoaXMuX2F1ZGlv
Q29udGV4dCA9IG51bGw7CisgICAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dEluaXRpYWxpemVkID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX211dGVCdXR0b24gPSBudWxsOworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB3aGV0aGVyIHRoZSBjdXJyZW50IGhvc3Qgc3VwcG9ydHMgV2ViIEF1ZGlv
IGFuZCB0aHVzIGNvdWxkIGNyZWF0ZSBBdWRpb0NvbnRleHRzLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5jYW5Vc2VXZWJBdWRpbyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICog
RGVmaW5lcyBpZiBCYWJ5bG9uIHNob3VsZCBlbWl0IGEgd2FybmluZyBpZiBXZWJBdWRpbyBpcyBu
b3Qgc3VwcG9ydGVkLgorICAgICAgICAgKiBAaWdub3JlTmFtaW5nCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLldhcm5lZFdlYkF1ZGlvVW5zdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgd2hldGhlciBvciBub3QgbXAzIGFyZSBzdXBwb3J0ZWQgYnkgeW91
ciBicm93c2VyLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pc01QM3N1cHBvcnRlZCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCBvZ2cgYXJl
IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmlz
T0dHc3VwcG9ydGVkID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdoZXRo
ZXIgYXVkaW8gaGFzIGJlZW4gdW5sb2NrZWQgb24gdGhlIGRldmljZS4KKyAgICAgICAgICogU29t
ZSBCcm93c2VycyBoYXZlIHN0cm9uZyByZXN0cmljdGlvbnMgYWJvdXQgQXVkaW8gYW5kIHdvbiB0
IGF1dG9wbGF5IHVubGVzcworICAgICAgICAgKiBhIHVzZXIgaW50ZXJhY3Rpb24gaGFzIGhhcHBl
bmVkLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy51bmxvY2tlZCA9IHRydWU7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBEZWZpbmVzIGlmIHRoZSBhdWRpbyBlbmdpbmUgcmVsaWVzIG9uIGEg
Y3VzdG9tIHVubG9ja2VkIGJ1dHRvbi4KKyAgICAgICAgICogSW4gdGhpcyBjYXNlLCB0aGUgZW1i
ZWRkZWQgYnV0dG9uIHdpbGwgbm90IGJlIGRpc3BsYXllZC4KKyAgICAgICAgICovCisgICAgICAg
IHRoaXMudXNlQ3VzdG9tVW5sb2NrZWRCdXR0b24gPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEV2ZW50IHJhaXNlZCB3aGVuIGF1ZGlvIGhhcyBiZWVuIHVubG9ja2VkIG9uIHRoZSBi
cm93c2VyLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkF1ZGlvVW5sb2NrZWRPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFdmVudCByYWlzZWQgd2hl
biBhdWRpbyBoYXMgYmVlbiBsb2NrZWQgb24gdGhlIGJyb3dzZXIuCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLm9uQXVkaW9Mb2NrZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIHRo
aXMuX3RyeVRvUnVuID0gZmFsc2U7CisgICAgICAgIHRoaXMuX29uUmVzaXplID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgX3RoaXMuX21vdmVCdXR0b25Ub1RvcExlZnQoKTsKKyAgICAgICAg
fTsKKyAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuQXVkaW9Db250ZXh0ICE9PSAndW5kZWZpbmVk
JyB8fCB0eXBlb2Ygd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgICAgIHdpbmRvdy5BdWRpb0NvbnRleHQgPSB3aW5kb3cuQXVkaW9Db250ZXh0IHx8
IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQ7CisgICAgICAgICAgICB0aGlzLmNhblVzZVdlYkF1
ZGlvID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYXVkaW9FbGVtID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnYXVkaW8nKTsKKyAgICAgICAgdGhpcy5faG9zdEVsZW1lbnQgPSBob3N0
RWxlbWVudDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChhdWRpb0VsZW0gJiYgISFh
dWRpb0VsZW0uY2FuUGxheVR5cGUgJiYgYXVkaW9FbGVtLmNhblBsYXlUeXBlKCdhdWRpby9tcGVn
OyBjb2RlY3M9Im1wMyInKS5yZXBsYWNlKC9ebm8kLywgJycpKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5pc01QM3N1cHBvcnRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIC8vIHByb3RlY3QgZXJyb3IgZHVyaW5nIGNh
cGFiaWxpdHkgY2hlY2suCisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlm
IChhdWRpb0VsZW0gJiYgISFhdWRpb0VsZW0uY2FuUGxheVR5cGUgJiYgYXVkaW9FbGVtLmNhblBs
YXlUeXBlKCdhdWRpby9vZ2c7IGNvZGVjcz0idm9yYmlzIicpLnJlcGxhY2UoL15ubyQvLCAnJykp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmlzT0dHc3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgLy8gcHJv
dGVjdCBlcnJvciBkdXJpbmcgY2FwYWJpbGl0eSBjaGVjay4KKyAgICAgICAgfQorICAgIH0KKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXVkaW9FbmdpbmUucHJvdG90eXBlLCAiYXVkaW9Db250
ZXh0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgY3VycmVudCBBdWRpb0Nv
bnRleHQgaWYgYXZhaWxhYmxlLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2F1ZGlvQ29udGV4dEluaXRpYWxpemVkKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUF1ZGlvQ29udGV4dCgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVubG9j
a2VkICYmICF0aGlzLl9tdXRlQnV0dG9uKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rp
c3BsYXlNdXRlQnV0dG9uKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29udGV4dDsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgLyoqCisgICAgICogRmxhZ3MgdGhlIGF1ZGlvIGVuZ2luZSBpbiBMb2NrZWQgc3RhdGUuCisg
ICAgICogVGhpcyBoYXBwZW5zIGR1ZSB0byBuZXcgYnJvd3NlciBwb2xpY2llcyBwcmV2ZW50aW5n
IGF1ZGlvIHRvIGF1dG9wbGF5LgorICAgICAqLworICAgIEF1ZGlvRW5naW5lLnByb3RvdHlwZS5s
b2NrID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl90cmlnZ2VyU3VzcGVuZGVkU3RhdGUo
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVubG9ja3MgdGhlIGF1ZGlvIGVuZ2luZSBvbmNl
IGEgdXNlciBhY3Rpb24gaGFzIGJlZW4gZG9uZSBvbiB0aGUgZG9tLgorICAgICAqIFRoaXMgaXMg
aGVscGZ1bCB0byByZXN1bWUgcGxheSBvbmNlIGJyb3dzZXIgcG9saWNpZXMgaGF2ZSBiZWVuIHNh
dGlzZmllZC4KKyAgICAgKi8KKyAgICBBdWRpb0VuZ2luZS5wcm90b3R5cGUudW5sb2NrID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB0aGlzLl90cmlnZ2VyUnVubmluZ1N0YXRlKCk7CisgICAgfTsK
KyAgICBBdWRpb0VuZ2luZS5wcm90b3R5cGUuX3Jlc3VtZUF1ZGlvQ29udGV4dCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIHJlc3VsdDsKKyAgICAgICAgaWYgKHRoaXMuX2F1ZGlvQ29udGV4
dC5yZXN1bWUpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuX2F1ZGlvQ29udGV4dC5yZXN1
bWUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0IHx8IFByb21pc2UucmVzb2x2
ZSgpOworICAgIH07CisgICAgQXVkaW9FbmdpbmUucHJvdG90eXBlLl9pbml0aWFsaXplQXVkaW9D
b250ZXh0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHRo
aXMuY2FuVXNlV2ViQXVkaW8pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9hdWRpb0NvbnRleHQg
PSBuZXcgQXVkaW9Db250ZXh0KCk7CisgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgZ2xvYmFs
IHZvbHVtZSBnYWluIG5vZGUKKyAgICAgICAgICAgICAgICB0aGlzLm1hc3RlckdhaW4gPSB0aGlz
Ll9hdWRpb0NvbnRleHQuY3JlYXRlR2FpbigpOworICAgICAgICAgICAgICAgIHRoaXMubWFzdGVy
R2Fpbi5nYWluLnZhbHVlID0gMTsKKyAgICAgICAgICAgICAgICB0aGlzLm1hc3RlckdhaW4uY29u
bmVjdCh0aGlzLl9hdWRpb0NvbnRleHQuZGVzdGluYXRpb24pOworICAgICAgICAgICAgICAgIHRo
aXMuX2F1ZGlvQ29udGV4dEluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fYXVkaW9Db250ZXh0LnN0YXRlID09PSAicnVubmluZyIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRG8gbm90IHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHVubG9jay4KKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclJ1bm5pbmdTdGF0ZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoZSkgeworICAgICAg
ICAgICAgdGhpcy5jYW5Vc2VXZWJBdWRpbyA9IGZhbHNlOworICAgICAgICAgICAgX01pc2NfbG9n
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVycm9yKCJXZWIgQXVk
aW86ICIgKyBlLm1lc3NhZ2UpOworICAgICAgICB9CisgICAgfTsKKyAgICBBdWRpb0VuZ2luZS5w
cm90b3R5cGUuX3RyaWdnZXJSdW5uaW5nU3RhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmICh0aGlzLl90cnlUb1J1bikgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3RyeVRvUnVuID0gdHJ1ZTsKKyAg
ICAgICAgdGhpcy5fcmVzdW1lQXVkaW9Db250ZXh0KCkKKyAgICAgICAgICAgIC50aGVuKGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl90cnlUb1J1biA9IGZhbHNlOworICAgICAgICAg
ICAgaWYgKF90aGlzLl9tdXRlQnV0dG9uKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2hpZGVN
dXRlQnV0dG9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIF90aGlzLl90cnlUb1J1biA9IGZhbHNlOworICAgICAgICAgICAgX3Ro
aXMudW5sb2NrZWQgPSBmYWxzZTsKKyAgICAgICAgfSk7CisgICAgICAgIC8vIE5vdGlmeSB1c2Vy
cyB0aGF0IHRoZSBhdWRpbyBzdGFjayBpcyB1bmxvY2tlZC91bm11dGVkCisgICAgICAgIHRoaXMu
dW5sb2NrZWQgPSB0cnVlOworICAgICAgICB0aGlzLm9uQXVkaW9VbmxvY2tlZE9ic2VydmFibGUu
bm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgIH07CisgICAgQXVkaW9FbmdpbmUucHJvdG90eXBl
Ll90cmlnZ2VyU3VzcGVuZGVkU3RhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMudW5s
b2NrZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5vbkF1ZGlvTG9ja2VkT2JzZXJ2YWJsZS5ub3Rp
ZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIHRoaXMuX2Rpc3BsYXlNdXRlQnV0dG9uKCk7Cisg
ICAgfTsKKyAgICBBdWRpb0VuZ2luZS5wcm90b3R5cGUuX2Rpc3BsYXlNdXRlQnV0dG9uID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy51
c2VDdXN0b21VbmxvY2tlZEJ1dHRvbiB8fCB0aGlzLl9tdXRlQnV0dG9uKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbXV0ZUJ1dHRvbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoIkJVVFRPTiIpOworICAgICAgICB0aGlzLl9tdXRlQnV0dG9uLmNsYXNz
TmFtZSA9ICJiYWJ5bG9uVW5tdXRlSWNvbiI7CisgICAgICAgIHRoaXMuX211dGVCdXR0b24uaWQg
PSAiYmFieWxvblVubXV0ZUljb25CdG4iOworICAgICAgICB0aGlzLl9tdXRlQnV0dG9uLnRpdGxl
ID0gIlVubXV0ZSI7CisgICAgICAgIHZhciBjc3MgPSAiLmJhYnlsb25Vbm11dGVJY29uIHsgcG9z
aXRpb246IGFic29sdXRlOyBsZWZ0OiAyMHB4OyB0b3A6IDIwcHg7IGhlaWdodDogNDBweDsgd2lk
dGg6IDYwcHg7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoNTEsNTEsNTEsMC43KTsgYmFja2dyb3Vu
ZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHZl
cnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJG
MjAwMCUyRnN2ZyUyMiUyMHdpZHRoJTNEJTIyMzklMjIlMjBoZWlnaHQlM0QlMjIzMiUyMiUyMHZp
ZXdCb3glM0QlMjIwJTIwMCUyMDM5JTIwMzIlMjIlM0UlM0NwYXRoJTIwZmlsbCUzRCUyMndoaXRl
JTIyJTIwZCUzRCUyMk05LjYyNSUyMDE4LjkzOGwtMC4wMzElMjAwLjAxNmgtNC45NTNxLTAuMDE2
JTIwMC0wLjAzMS0wLjAxNnYtMTIuNDUzcTAtMC4wMTYlMjAwLjAzMS0wLjAxNmg0Ljk1M3EwLjAz
MSUyMDAlMjAwLjAzMSUyMDAuMDE2djEyLjQ1M3pNMTIuMTI1JTIwNy42ODhsOC43MTktOC43MDN2
MjcuNDUzbC04LjcxOS04LjcxOS0wLjAxNi0wLjA0N3YtOS45Mzh6TTIzLjM1OSUyMDcuODc1bDEu
NDA2LTEuNDA2JTIwNC4yMTklMjA0LjIwMyUyMDQuMjAzLTQuMjAzJTIwMS40MjIlMjAxLjQwNi00
LjIxOSUyMDQuMjE5JTIwNC4yMTklMjA0LjIwMy0xLjQ4NCUyMDEuMzU5LTQuMTQxLTQuMTU2LTQu
MjE5JTIwNC4yMTktMS40MDYtMS40MjIlMjA0LjIxOS00LjIwM3olMjIlM0UlM0MlMkZwYXRoJTNF
JTNDJTJGc3ZnJTNFKTsgIGJhY2tncm91bmQtc2l6ZTogODAlOyBiYWNrZ3JvdW5kLXJlcGVhdDpu
by1yZXBlYXQ7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgYmFja2dyb3VuZC1wb3NpdGlv
bi15OiA0cHg7IGJvcmRlcjogbm9uZTsgb3V0bGluZTogbm9uZTsgdHJhbnNpdGlvbjogdHJhbnNm
b3JtIDAuMTI1cyBlYXNlLW91dDsgY3Vyc29yOiBwb2ludGVyOyB6LWluZGV4OiA5OTk5OyB9IC5i
YWJ5bG9uVW5tdXRlSWNvbjpob3ZlciB7IHRyYW5zZm9ybTogc2NhbGUoMS4wNSkgfSAuYmFieWxv
blVubXV0ZUljb246YWN0aXZlIHsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg1MSw1MSw1MSwxKSB9
IjsKKyAgICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsK
KyAgICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7
CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5k
Q2hpbGQoc3R5bGUpOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX211
dGVCdXR0b24pOworICAgICAgICB0aGlzLl9tb3ZlQnV0dG9uVG9Ub3BMZWZ0KCk7CisgICAgICAg
IHRoaXMuX211dGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBfdGhpcy5fdHJpZ2dlclJ1bm5pbmdTdGF0ZSgpOworICAgICAgICB9
LCB0cnVlKTsKKyAgICAgICAgdGhpcy5fbXV0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGlj
aycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl90cmlnZ2VyUnVubmluZ1N0YXRl
KCk7CisgICAgICAgIH0sIHRydWUpOworICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigi
cmVzaXplIiwgdGhpcy5fb25SZXNpemUpOworICAgIH07CisgICAgQXVkaW9FbmdpbmUucHJvdG90
eXBlLl9tb3ZlQnV0dG9uVG9Ub3BMZWZ0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhp
cy5faG9zdEVsZW1lbnQgJiYgdGhpcy5fbXV0ZUJ1dHRvbikgeworICAgICAgICAgICAgdGhpcy5f
bXV0ZUJ1dHRvbi5zdHlsZS50b3AgPSB0aGlzLl9ob3N0RWxlbWVudC5vZmZzZXRUb3AgKyAyMCAr
ICJweCI7CisgICAgICAgICAgICB0aGlzLl9tdXRlQnV0dG9uLnN0eWxlLmxlZnQgPSB0aGlzLl9o
b3N0RWxlbWVudC5vZmZzZXRMZWZ0ICsgMjAgKyAicHgiOworICAgICAgICB9CisgICAgfTsKKyAg
ICBBdWRpb0VuZ2luZS5wcm90b3R5cGUuX2hpZGVNdXRlQnV0dG9uID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICBpZiAodGhpcy5fbXV0ZUJ1dHRvbikgeworICAgICAgICAgICAgZG9jdW1lbnQuYm9k
eS5yZW1vdmVDaGlsZCh0aGlzLl9tdXRlQnV0dG9uKTsKKyAgICAgICAgICAgIHRoaXMuX211dGVC
dXR0b24gPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXN0cm95
IGFuZCByZWxlYXNlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdWRpbyBjY29u
dGV4dC4KKyAgICAgKi8KKyAgICBBdWRpb0VuZ2luZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuY2FuVXNlV2ViQXVkaW8gJiYgdGhpcy5fYXVkaW9D
b250ZXh0SW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9jb25uZWN0ZWRBbmFs
eXNlciAmJiB0aGlzLl9hdWRpb0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jb25u
ZWN0ZWRBbmFseXNlci5zdG9wRGVidWdDYW52YXMoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9j
b25uZWN0ZWRBbmFseXNlci5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJH
YWluLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICB0aGlzLm1hc3RlckdhaW4uY29ubmVj
dCh0aGlzLl9hdWRpb0NvbnRleHQuZGVzdGluYXRpb24pOworICAgICAgICAgICAgICAgIHRoaXMu
X2Nvbm5lY3RlZEFuYWx5c2VyID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMubWFzdGVyR2Fpbi5nYWluLnZhbHVlID0gMTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLldh
cm5lZFdlYkF1ZGlvVW5zdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faGlkZU11dGVC
dXR0b24oKTsKKyAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRo
aXMuX29uUmVzaXplKTsKKyAgICAgICAgdGhpcy5vbkF1ZGlvVW5sb2NrZWRPYnNlcnZhYmxlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMub25BdWRpb0xvY2tlZE9ic2VydmFibGUuY2xlYXIoKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGdsb2JhbCB2b2x1bWUgc2V0cyBvbiB0aGUg
bWFzdGVyIGdhaW4uCisgICAgICogQHJldHVybnMgdGhlIGdsb2JhbCB2b2x1bWUgaWYgc2V0IG9y
IC0xIG90aGVyd2lzZQorICAgICAqLworICAgIEF1ZGlvRW5naW5lLnByb3RvdHlwZS5nZXRHbG9i
YWxWb2x1bWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLmNhblVzZVdlYkF1ZGlv
ICYmIHRoaXMuX2F1ZGlvQ29udGV4dEluaXRpYWxpemVkKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5tYXN0ZXJHYWluLmdhaW4udmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAq
IFNldHMgdGhlIGdsb2JhbCB2b2x1bWUgb2YgeW91ciBleHBlcmllbmNlIChzZXRzIG9uIHRoZSBt
YXN0ZXIgZ2FpbikuCisgICAgICogQHBhcmFtIG5ld1ZvbHVtZSBEZWZpbmVzIHRoZSBuZXcgZ2xv
YmFsIHZvbHVtZSBvZiB0aGUgYXBwbGljYXRpb24KKyAgICAgKi8KKyAgICBBdWRpb0VuZ2luZS5w
cm90b3R5cGUuc2V0R2xvYmFsVm9sdW1lID0gZnVuY3Rpb24gKG5ld1ZvbHVtZSkgeworICAgICAg
ICBpZiAodGhpcy5jYW5Vc2VXZWJBdWRpbyAmJiB0aGlzLl9hdWRpb0NvbnRleHRJbml0aWFsaXpl
ZCkgeworICAgICAgICAgICAgdGhpcy5tYXN0ZXJHYWluLmdhaW4udmFsdWUgPSBuZXdWb2x1bWU7
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENvbm5lY3QgdGhlIGF1ZGlvIGVu
Z2luZSB0byBhbiBhdWRpbyBhbmFseXNlciBhbGxvd2luZyBzb21lIGFtYXppbmcKKyAgICAgKiBz
eW5jaG9ybml6YXRpb24gYmV0d2VlbiB0aGUgc291bmRzL211c2ljIGFuZCB5b3VyIHZpc3VhbGl6
YXRpb24gKFZ1TWV0ZXIgZm9yIGluc3RhbmNlKS4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3VuZHNfYW5kX211c2ljI3VzaW5nLXRoZS1hbmFs
eXNlcgorICAgICAqIEBwYXJhbSBhbmFseXNlciBUaGUgYW5hbHlzZXIgdG8gY29ubmVjdCB0byB0
aGUgZW5naW5lCisgICAgICovCisgICAgQXVkaW9FbmdpbmUucHJvdG90eXBlLmNvbm5lY3RUb0Fu
YWx5c2VyID0gZnVuY3Rpb24gKGFuYWx5c2VyKSB7CisgICAgICAgIGlmICh0aGlzLl9jb25uZWN0
ZWRBbmFseXNlcikgeworICAgICAgICAgICAgdGhpcy5fY29ubmVjdGVkQW5hbHlzZXIuc3RvcERl
YnVnQ2FudmFzKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuY2FuVXNlV2ViQXVkaW8g
JiYgdGhpcy5fYXVkaW9Db250ZXh0SW5pdGlhbGl6ZWQgJiYgdGhpcy5fYXVkaW9Db250ZXh0KSB7
CisgICAgICAgICAgICB0aGlzLl9jb25uZWN0ZWRBbmFseXNlciA9IGFuYWx5c2VyOworICAgICAg
ICAgICAgdGhpcy5tYXN0ZXJHYWluLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgIHRoaXMuX2Nv
bm5lY3RlZEFuYWx5c2VyLmNvbm5lY3RBdWRpb05vZGVzKHRoaXMubWFzdGVyR2FpbiwgdGhpcy5f
YXVkaW9Db250ZXh0LmRlc3RpbmF0aW9uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJu
IEF1ZGlvRW5naW5lOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9BdWRpby9h
dWRpb1NjZW5lQ29tcG9uZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9BdWRpby9hdWRpb1NjZW5lQ29tcG9uZW50LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IEF1ZGlvU2NlbmVDb21wb25lbnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQXVkaW9TY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXVk
aW9TY2VuZUNvbXBvbmVudDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NvdW5kX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Nv
dW5kICovICIuL0F1ZGlvL3NvdW5kLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Nv
dW5kVHJhY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vc291bmRUcmFjayAqLyAiLi9BdWRpby9zb3VuZFRyYWNrLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9F
bmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lQ29tcG9uZW50
ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Nj
ZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9h
YnN0cmFjdFNjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9hYnN0cmFjdFNjZW5lICovICIuL2Fic3RyYWN0U2NlbmUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXVkaW9FbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXVkaW9FbmdpbmUgKi8gIi4vQXVk
aW8vYXVkaW9FbmdpbmUudHMiKTsKKworCisKKworCisKKworCisvLyBBZGRzIHRoZSBwYXJzZXIg
dG8gdGhlIHNjZW5lIHBhcnNlcnMuCitfYWJzdHJhY3RTY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJBYnN0cmFjdFNjZW5lIl0uQWRkUGFyc2VyKF9zY2VuZUNvbXBvbmVudF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVf
QVVESU8sIGZ1bmN0aW9uIChwYXJzZWREYXRhLCBzY2VuZSwgY29udGFpbmVyLCByb290VXJsKSB7
CisgICAgLy8gVE9ETzogYWRkIHNvdW5kCisgICAgdmFyIGxvYWRlZFNvdW5kcyA9IFtdOworICAg
IHZhciBsb2FkZWRTb3VuZDsKKyAgICBjb250YWluZXIuc291bmRzID0gY29udGFpbmVyLnNvdW5k
cyB8fCBbXTsKKyAgICBpZiAocGFyc2VkRGF0YS5zb3VuZHMgIT09IHVuZGVmaW5lZCAmJiBwYXJz
ZWREYXRhLnNvdW5kcyAhPT0gbnVsbCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGNh
Y2hlID0gcGFyc2VkRGF0YS5zb3VuZHMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7
CisgICAgICAgICAgICB2YXIgcGFyc2VkU291bmQgPSBwYXJzZWREYXRhLnNvdW5kc1tpbmRleF07
CisgICAgICAgICAgICBpZiAoX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFwYXJzZWRTb3VuZC51cmwpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2Vk
U291bmQudXJsID0gcGFyc2VkU291bmQubmFtZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKCFsb2FkZWRTb3VuZHNbcGFyc2VkU291bmQudXJsXSkgeworICAgICAgICAg
ICAgICAgICAgICBsb2FkZWRTb3VuZCA9IF9zb3VuZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJTb3VuZCJdLlBhcnNlKHBhcnNlZFNvdW5kLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAg
ICAgICAgICAgICAgIGxvYWRlZFNvdW5kc1twYXJzZWRTb3VuZC51cmxdID0gbG9hZGVkU291bmQ7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zb3VuZHMucHVzaChsb2FkZWRTb3VuZCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBjb250YWluZXIuc291bmRzLnB1c2goX3NvdW5kX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlNvdW5kIl0uUGFyc2UocGFyc2VkU291bmQsIHNjZW5lLCByb290VXJsLCBsb2Fk
ZWRTb3VuZHNbcGFyc2VkU291bmQudXJsXSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zb3Vu
ZHMucHVzaChuZXcgX3NvdW5kX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNvdW5kIl0o
cGFyc2VkU291bmQubmFtZSwgbnVsbCwgc2NlbmUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBsb2FkZWRTb3VuZHMgPSBbXTsKK30pOworT2JqZWN0LmRlZmluZVByb3Bl
cnR5KF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTY2VuZSJdLnByb3RvdHlw
ZSwgIm1haW5Tb3VuZFRyYWNrIiwgeworICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICB2
YXIgY29tcG8gPSB0aGlzLl9nZXRDb21wb25lbnQoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uTkFNRV9BVURJTyk7
CisgICAgICAgIGlmICghY29tcG8pIHsKKyAgICAgICAgICAgIGNvbXBvID0gbmV3IEF1ZGlvU2Nl
bmVDb21wb25lbnQodGhpcyk7CisgICAgICAgICAgICB0aGlzLl9hZGRDb21wb25lbnQoY29tcG8p
OworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fbWFpblNvdW5kVHJhY2spIHsKKyAgICAg
ICAgICAgIHRoaXMuX21haW5Tb3VuZFRyYWNrID0gbmV3IF9zb3VuZFRyYWNrX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlNvdW5kVHJhY2siXSh0aGlzLCB7IG1haW5UcmFjazogdHJ1ZSB9
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fbWFpblNvdW5kVHJhY2s7CisgICAg
fSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorfSk7Citf
c2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2NlbmUiXS5wcm90b3R5cGUuZ2V0
U291bmRCeU5hbWUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgIHZhciBpbmRleDsKKyAgICBmb3Ig
KGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm1haW5Tb3VuZFRyYWNrLnNvdW5kQ29sbGVjdGlvbi5s
ZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgaWYgKHRoaXMubWFpblNvdW5kVHJhY2suc291bmRD
b2xsZWN0aW9uW2luZGV4XS5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5tYWluU291bmRUcmFjay5zb3VuZENvbGxlY3Rpb25baW5kZXhdOworICAgICAgICB9CisgICAg
fQorICAgIGlmICh0aGlzLnNvdW5kVHJhY2tzKSB7CisgICAgICAgIGZvciAodmFyIHNkSW5kZXgg
PSAwOyBzZEluZGV4IDwgdGhpcy5zb3VuZFRyYWNrcy5sZW5ndGg7IHNkSW5kZXgrKykgeworICAg
ICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5zb3VuZFRyYWNrc1tzZEluZGV4
XS5zb3VuZENvbGxlY3Rpb24ubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRoaXMuc291bmRUcmFja3Nbc2RJbmRleF0uc291bmRDb2xsZWN0aW9uW2luZGV4XS5uYW1lID09
PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNvdW5kVHJhY2tzW3Nk
SW5kZXhdLnNvdW5kQ29sbGVjdGlvbltpbmRleF07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxsOworfTsKK09iamVjdC5k
ZWZpbmVQcm9wZXJ0eShfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2NlbmUi
XS5wcm90b3R5cGUsICJhdWRpb0VuYWJsZWQiLCB7CisgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHZhciBjb21wbyA9IHRoaXMuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1F
X0FVRElPKTsKKyAgICAgICAgaWYgKCFjb21wbykgeworICAgICAgICAgICAgY29tcG8gPSBuZXcg
QXVkaW9TY2VuZUNvbXBvbmVudCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX2FkZENvbXBvbmVu
dChjb21wbyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbXBvLmF1ZGlvRW5hYmxlZDsK
KyAgICB9LAorICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHZhciBjb21wbyA9
IHRoaXMuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX0FVRElPKTsKKyAgICAgICAg
aWYgKCFjb21wbykgeworICAgICAgICAgICAgY29tcG8gPSBuZXcgQXVkaW9TY2VuZUNvbXBvbmVu
dCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX2FkZENvbXBvbmVudChjb21wbyk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBjb21wby5lbmFibGVBdWRpbygp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29tcG8uZGlzYWJsZUF1
ZGlvKCk7CisgICAgICAgIH0KKyAgICB9LAorICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgY29u
ZmlndXJhYmxlOiB0cnVlCit9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShfc2NlbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2NlbmUiXS5wcm90b3R5cGUsICJoZWFkcGhvbmUiLCB7
CisgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBjb21wbyA9IHRoaXMuX2dldENv
bXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2Nl
bmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX0FVRElPKTsKKyAgICAgICAgaWYgKCFjb21wbykg
eworICAgICAgICAgICAgY29tcG8gPSBuZXcgQXVkaW9TY2VuZUNvbXBvbmVudCh0aGlzKTsKKyAg
ICAgICAgICAgIHRoaXMuX2FkZENvbXBvbmVudChjb21wbyk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGNvbXBvLmhlYWRwaG9uZTsKKyAgICB9LAorICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgIHZhciBjb21wbyA9IHRoaXMuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25l
bnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMi
XS5OQU1FX0FVRElPKTsKKyAgICAgICAgaWYgKCFjb21wbykgeworICAgICAgICAgICAgY29tcG8g
PSBuZXcgQXVkaW9TY2VuZUNvbXBvbmVudCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX2FkZENv
bXBvbmVudChjb21wbyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAg
ICAgICBjb21wby5zd2l0Y2hBdWRpb01vZGVGb3JIZWFkcGhvbmVzKCk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb21wby5zd2l0Y2hBdWRpb01vZGVGb3JOb3JtYWxT
cGVha2VycygpOworICAgICAgICB9CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoX3NjZW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNjZW5lIl0ucHJvdG90eXBlLCAiYXVkaW9MaXN0
ZW5lclBvc2l0aW9uUHJvdmlkZXIiLCB7CisgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciBjb21wbyA9IHRoaXMuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX0FVRElP
KTsKKyAgICAgICAgaWYgKCFjb21wbykgeworICAgICAgICAgICAgY29tcG8gPSBuZXcgQXVkaW9T
Y2VuZUNvbXBvbmVudCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX2FkZENvbXBvbmVudChjb21w
byk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbXBvLmF1ZGlvTGlzdGVuZXJQb3NpdGlv
blByb3ZpZGVyOworICAgIH0sCisgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
dmFyIGNvbXBvID0gdGhpcy5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfQVVESU8p
OworICAgICAgICBpZiAoIWNvbXBvKSB7CisgICAgICAgICAgICBjb21wbyA9IG5ldyBBdWRpb1Nj
ZW5lQ29tcG9uZW50KHRoaXMpOworICAgICAgICAgICAgdGhpcy5fYWRkQ29tcG9uZW50KGNvbXBv
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB2YWx1ZSBwYXNzZWQgdG8gW1NjZW5l
LmF1ZGlvTGlzdGVuZXJQb3NpdGlvblByb3ZpZGVyXSBtdXN0IGJlIGEgZnVuY3Rpb24gdGhhdCBy
ZXR1cm5zIGEgVmVjdG9yMycpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgY29tcG8uYXVkaW9MaXN0ZW5lclBvc2l0aW9uUHJvdmlkZXIgPSB2YWx1ZTsKKyAgICAgICAg
fQorICAgIH0sCisgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRydWUK
K30pOworLyoqCisgKiBEZWZpbmVzIHRoZSBzb3VuZCBzY2VuZSBjb21wb25lbnQgcmVzcG9uc2li
bGUgdG8gbWFuYWdlIGFueSBzb3VuZHMKKyAqIGluIGEgZ2l2ZW4gc2NlbmUuCisgKi8KK3ZhciBB
dWRpb1NjZW5lQ29tcG9uZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBmb3IgdGhl
IGdpdmVuIHNjZW5lCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRvIHJl
Z2lzdGVyIHRoZSBjb21wb25lbnQgaW4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBBdWRpb1NjZW5l
Q29tcG9uZW50KHNjZW5lKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY29tcG9uZW50
IG5hbWUgaGVscGZ1bGwgdG8gaWRlbnRpZnkgdGhlIGNvbXBvbmVudCBpbiB0aGUgbGlzdCBvZiBz
Y2VuZSBjb21wb25lbnRzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5uYW1lID0gX3NjZW5l
Q29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjZW5lQ29tcG9uZW50Q29u
c3RhbnRzIl0uTkFNRV9BVURJTzsKKyAgICAgICAgdGhpcy5fYXVkaW9FbmFibGVkID0gdHJ1ZTsK
KyAgICAgICAgdGhpcy5faGVhZHBob25lID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2F1ZGlvTGlz
dGVuZXJQb3NpdGlvblByb3ZpZGVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5l
OworICAgICAgICBzY2VuZS5zb3VuZFRyYWNrcyA9IG5ldyBBcnJheSgpOworICAgICAgICBzY2Vu
ZS5zb3VuZHMgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEF1ZGlvU2NlbmVDb21wb25lbnQucHJvdG90eXBlLCAiYXVkaW9FbmFibGVkIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB3aGV0aGVyIGF1ZGlvIGlzIGVuYWJsZWQgb3Igbm90Lgor
ICAgICAgICAgKiBQbGVhc2UgdXNlIHJlbGF0ZWQgZW5hYmxlL2Rpc2FibGUgbWV0aG9kIHRvIHN3
aXRjaCBzdGF0ZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEF1ZGlvU2NlbmVDb21wb25lbnQucHJvdG90eXBlLCAi
aGVhZHBob25lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB3aGV0aGVyIGF1ZGlv
IGlzIG91dHB1dGluZyB0byBoZWFkcGhvbmUgb3Igbm90LgorICAgICAgICAgKiBQbGVhc2UgdXNl
IHRoZSBhY2NvcmRpbmcgU3dpdGNoIG1ldGhvZHMgdG8gY2hhbmdlIG91dHB1dC4KKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2hlYWRwaG9uZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEF1ZGlvU2NlbmVDb21wb25lbnQucHJvdG90eXBlLCAiYXVkaW9MaXN0ZW5lclBvc2l0aW9uUHJv
dmlkZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGF1ZGlv
IGxpc3RlbmVyIHBvc2l0aW9uIHByb3ZpZGVyCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdWRpb0xpc3RlbmVyUG9zaXRp
b25Qcm92aWRlcjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgYSBj
dXN0b20gbGlzdGVuZXIgcG9zaXRpb24gZm9yIGFsbCBzb3VuZHMgaW4gdGhlIHNjZW5lCisgICAg
ICAgICAqIEJ5IGRlZmF1bHQsIHRoaXMgaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBhY3Rp
dmUgY2FtZXJhCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgdGhpcy5fYXVkaW9MaXN0ZW5lclBvc2l0aW9uUHJvdmlkZXIgPSB2YWx1ZTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25l
bnQgaW4gYSBnaXZlbiBzY2VuZQorICAgICAqLworICAgIEF1ZGlvU2NlbmVDb21wb25lbnQucHJv
dG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLnNjZW5lLl9hZnRl
clJlbmRlclN0YWdlLnJlZ2lzdGVyU3RlcChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5TVEVQX0FGVEVSUkVOREVS
X0FVRElPLCB0aGlzLCB0aGlzLl9hZnRlclJlbmRlcik7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZWJ1aWxkcyB0aGUgZWxlbWVudHMgcmVsYXRlZCB0byB0aGlzIGNvbXBvbmVudCBpbiBjYXNl
IG9mCisgICAgICogY29udGV4dCBsb3N0IGZvciBpbnN0YW5jZS4KKyAgICAgKi8KKyAgICBBdWRp
b1NjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIChOb3QgcmVuZGVyaW5nIHJlbGF0ZWQpCisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBjb21wb25lbnQgZGF0YSB0byB0aGUgc3Bl
Y2lmaWVkIGpzb24gb2JqZWN0CisgICAgICogQHBhcmFtIHNlcmlhbGl6YXRpb25PYmplY3QgVGhl
IG9iamVjdCB0byBzZXJpYWxpemUgdG8KKyAgICAgKi8KKyAgICBBdWRpb1NjZW5lQ29tcG9uZW50
LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlvbk9iamVjdCkgewor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNvdW5kcyA9IFtdOworICAgICAgICBpZiAodGhp
cy5zY2VuZS5zb3VuZFRyYWNrcykgeworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBp
bmRleCA8IHRoaXMuc2NlbmUuc291bmRUcmFja3MubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHNvdW5kdHJhY2sgPSB0aGlzLnNjZW5lLnNvdW5kVHJhY2tzW2luZGV4XTsK
KyAgICAgICAgICAgICAgICBmb3IgKHZhciBzb3VuZElkID0gMDsgc291bmRJZCA8IHNvdW5kdHJh
Y2suc291bmRDb2xsZWN0aW9uLmxlbmd0aDsgc291bmRJZCsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc291bmRzLnB1c2goc291bmR0cmFjay5zb3VuZENvbGxl
Y3Rpb25bc291bmRJZF0uc2VyaWFsaXplKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhbGwgdGhlIGVs
ZW1lbnRzIGZyb20gdGhlIGNvbnRhaW5lciB0byB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gY29u
dGFpbmVyIHRoZSBjb250YWluZXIgaG9sZGluZyB0aGUgZWxlbWVudHMKKyAgICAgKi8KKyAgICBB
dWRpb1NjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5hZGRGcm9tQ29udGFpbmVyID0gZnVuY3Rpb24g
KGNvbnRhaW5lcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoIWNv
bnRhaW5lci5zb3VuZHMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBjb250YWluZXIuc291bmRzLmZvckVhY2goZnVuY3Rpb24gKHNvdW5kKSB7CisgICAgICAgICAg
ICBzb3VuZC5wbGF5KCk7CisgICAgICAgICAgICBzb3VuZC5hdXRvcGxheSA9IHRydWU7CisgICAg
ICAgICAgICBfdGhpcy5zY2VuZS5tYWluU291bmRUcmFjay5BZGRTb3VuZChzb3VuZCk7CisgICAg
ICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhbGwgdGhlIGVsZW1lbnRz
IGluIHRoZSBjb250YWluZXIgZnJvbSB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gY29udGFpbmVy
IGNvbnRhaW5zIHRoZSBlbGVtZW50cyB0byByZW1vdmUKKyAgICAgKiBAcGFyYW0gZGlzcG9zZSBp
ZiB0aGUgcmVtb3ZlZCBlbGVtZW50IHNob3VsZCBiZSBkaXNwb3NlZCAoZGVmYXVsdDogZmFsc2Up
CisgICAgICovCisgICAgQXVkaW9TY2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVtb3ZlRnJvbUNv
bnRhaW5lciA9IGZ1bmN0aW9uIChjb250YWluZXIsIGRpc3Bvc2UpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gdGhpczsKKyAgICAgICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkgeyBkaXNwb3NlID0g
ZmFsc2U7IH0KKyAgICAgICAgaWYgKCFjb250YWluZXIuc291bmRzKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY29udGFpbmVyLnNvdW5kcy5mb3JFYWNoKGZ1bmN0
aW9uIChzb3VuZCkgeworICAgICAgICAgICAgc291bmQuc3RvcCgpOworICAgICAgICAgICAgc291
bmQuYXV0b3BsYXkgPSBmYWxzZTsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLm1haW5Tb3VuZFRy
YWNrLlJlbW92ZVNvdW5kKHNvdW5kKTsKKyAgICAgICAgICAgIGlmIChkaXNwb3NlKSB7CisgICAg
ICAgICAgICAgICAgc291bmQuZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBjb21wb25lbnQgYW5kIHRoZSBh
c3NvY2lhdGVkIHJlc3NvdXJjZXMuCisgICAgICovCisgICAgQXVkaW9TY2VuZUNvbXBvbmVudC5w
cm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhp
cy5zY2VuZTsKKyAgICAgICAgaWYgKHNjZW5lLl9tYWluU291bmRUcmFjaykgeworICAgICAgICAg
ICAgc2NlbmUubWFpblNvdW5kVHJhY2suZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlm
IChzY2VuZS5zb3VuZFRyYWNrcykgeworICAgICAgICAgICAgZm9yICh2YXIgc2NJbmRleCA9IDA7
IHNjSW5kZXggPCBzY2VuZS5zb3VuZFRyYWNrcy5sZW5ndGg7IHNjSW5kZXgrKykgeworICAgICAg
ICAgICAgICAgIHNjZW5lLnNvdW5kVHJhY2tzW3NjSW5kZXhdLmRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGlzYWJsZXMgYXVkaW8g
aW4gdGhlIGFzc29jaWF0ZWQgc2NlbmUuCisgICAgICovCisgICAgQXVkaW9TY2VuZUNvbXBvbmVu
dC5wcm90b3R5cGUuZGlzYWJsZUF1ZGlvID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2Nl
bmUgPSB0aGlzLnNjZW5lOworICAgICAgICB0aGlzLl9hdWRpb0VuYWJsZWQgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJF
bmdpbmUiXS5hdWRpb0VuZ2luZSAmJiBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0KSB7CisgICAgICAg
ICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5l
Il0uYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0LnN1c3BlbmQoKTsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNjZW5lLm1haW5Tb3VuZFRyYWNrLnNv
dW5kQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgc2NlbmUubWFpblNvdW5k
VHJhY2suc291bmRDb2xsZWN0aW9uW2ldLnBhdXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHNjZW5lLnNvdW5kVHJhY2tzKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2NlbmUu
c291bmRUcmFja3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IHNjZW5lLnNvdW5kVHJhY2tzW2ldLnNvdW5kQ29sbGVjdGlvbi5sZW5ndGg7IGorKykg
eworICAgICAgICAgICAgICAgICAgICBzY2VuZS5zb3VuZFRyYWNrc1tpXS5zb3VuZENvbGxlY3Rp
b25bal0ucGF1c2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEVuYWJsZXMgYXVkaW8gaW4gdGhlIGFzc29jaWF0
ZWQgc2NlbmUuCisgICAgICovCisgICAgQXVkaW9TY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuZW5h
YmxlQXVkaW8gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7
CisgICAgICAgIHRoaXMuX2F1ZGlvRW5hYmxlZCA9IHRydWU7CisgICAgICAgIGlmIChfRW5naW5l
c19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lIl0uYXVkaW9Fbmdp
bmUgJiYgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkVuZ2lu
ZSJdLmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dCkgeworICAgICAgICAgICAgX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmF1
ZGlvQ29udGV4dC5yZXN1bWUoKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaTsKKyAgICAgICAg
Zm9yIChpID0gMDsgaSA8IHNjZW5lLm1haW5Tb3VuZFRyYWNrLnNvdW5kQ29sbGVjdGlvbi5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHNjZW5lLm1haW5Tb3VuZFRyYWNrLnNvdW5kQ29s
bGVjdGlvbltpXS5pc1BhdXNlZCkgeworICAgICAgICAgICAgICAgIHNjZW5lLm1haW5Tb3VuZFRy
YWNrLnNvdW5kQ29sbGVjdGlvbltpXS5wbGF5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHNjZW5lLnNvdW5kVHJhY2tzKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgc2NlbmUuc291bmRUcmFja3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBqID0gMDsgaiA8IHNjZW5lLnNvdW5kVHJhY2tzW2ldLnNvdW5kQ29sbGVjdGlvbi5s
ZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2NlbmUuc291bmRUcmFja3Nb
aV0uc291bmRDb2xsZWN0aW9uW2pdLmlzUGF1c2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzY2VuZS5zb3VuZFRyYWNrc1tpXS5zb3VuZENvbGxlY3Rpb25bal0ucGxheSgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTd2l0Y2ggYXVkaW8gdG8gaGVhZHBob25lIG91
dHB1dC4KKyAgICAgKi8KKyAgICBBdWRpb1NjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5zd2l0Y2hB
dWRpb01vZGVGb3JIZWFkcGhvbmVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2NlbmUg
PSB0aGlzLnNjZW5lOworICAgICAgICB0aGlzLl9oZWFkcGhvbmUgPSB0cnVlOworICAgICAgICBz
Y2VuZS5tYWluU291bmRUcmFjay5zd2l0Y2hQYW5uaW5nTW9kZWxUb0hSVEYoKTsKKyAgICAgICAg
aWYgKHNjZW5lLnNvdW5kVHJhY2tzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHNjZW5lLnNvdW5kVHJhY2tzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgc2NlbmUu
c291bmRUcmFja3NbaV0uc3dpdGNoUGFubmluZ01vZGVsVG9IUlRGKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFN3aXRjaCBhdWRpbyB0byBub3Jt
YWwgc3BlYWtlcnMuCisgICAgICovCisgICAgQXVkaW9TY2VuZUNvbXBvbmVudC5wcm90b3R5cGUu
c3dpdGNoQXVkaW9Nb2RlRm9yTm9ybWFsU3BlYWtlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7CisgICAgICAgIHRoaXMuX2hlYWRwaG9uZSA9IGZhbHNl
OworICAgICAgICBzY2VuZS5tYWluU291bmRUcmFjay5zd2l0Y2hQYW5uaW5nTW9kZWxUb0VxdWFs
UG93ZXIoKTsKKyAgICAgICAgaWYgKHNjZW5lLnNvdW5kVHJhY2tzKSB7CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLnNvdW5kVHJhY2tzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgc2NlbmUuc291bmRUcmFja3NbaV0uc3dpdGNoUGFubmluZ01vZGVsVG9FcXVh
bFBvd2VyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIEF1ZGlvU2Nl
bmVDb21wb25lbnQucHJvdG90eXBlLl9hZnRlclJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTsKKyAgICAgICAgaWYgKCF0aGlzLl9hdWRpb0VuYWJs
ZWQgfHwgIXNjZW5lLl9tYWluU291bmRUcmFjayB8fCAhc2NlbmUuc291bmRUcmFja3MgfHwgKHNj
ZW5lLl9tYWluU291bmRUcmFjay5zb3VuZENvbGxlY3Rpb24ubGVuZ3RoID09PSAwICYmIHNjZW5l
LnNvdW5kVHJhY2tzLmxlbmd0aCA9PT0gMSkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgYXVkaW9FbmdpbmUgPSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lIl0uYXVkaW9FbmdpbmU7CisgICAgICAgIGlmIChh
dWRpb0VuZ2luZS5hdWRpb0NvbnRleHQpIHsKKyAgICAgICAgICAgIC8vIEEgY3VzdG9tIGxpc3Rl
bmVyIHBvc2l0aW9uIHByb3ZpZGVyIHdhcyBzZXQKKyAgICAgICAgICAgIC8vIFVzZSB0aGUgdXNl
cnMgcHJvdmlkZWQgcG9zaXRpb24gaW5zdGVhZCBvZiBjYW1lcmEncworICAgICAgICAgICAgaWYg
KHRoaXMuX2F1ZGlvTGlzdGVuZXJQb3NpdGlvblByb3ZpZGVyKSB7CisgICAgICAgICAgICAgICAg
dmFyIHBvc2l0aW9uID0gdGhpcy5fYXVkaW9MaXN0ZW5lclBvc2l0aW9uUHJvdmlkZXIoKTsKKyAg
ICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgYWxsIGNvb3JkaW5hdGVzIHdlcmUgcHJvdmlkZWQK
KyAgICAgICAgICAgICAgICBwb3NpdGlvbi54ID0gcG9zaXRpb24ueCB8fCAwOworICAgICAgICAg
ICAgICAgIHBvc2l0aW9uLnkgPSBwb3NpdGlvbi55IHx8IDA7CisgICAgICAgICAgICAgICAgcG9z
aXRpb24ueiA9IHBvc2l0aW9uLnogfHwgMDsKKyAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGxp
c3RlbmVyIHBvc2l0aW9uCisgICAgICAgICAgICAgICAgYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0
Lmxpc3RlbmVyLnNldFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnop
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFy
IGxpc3RlbmluZ0NhbWVyYTsKKyAgICAgICAgICAgICAgICBpZiAoc2NlbmUuYWN0aXZlQ2FtZXJh
cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3RlbmluZ0NhbWVyYSA9IHNj
ZW5lLmFjdGl2ZUNhbWVyYXNbMF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsaXN0ZW5pbmdDYW1lcmEgPSBzY2VuZS5hY3Rp
dmVDYW1lcmE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIENoZWNrIGlm
IHRoZXJlIGlzIGEgbGlzdGVuaW5nIGNhbWVyYQorICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5p
bmdDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBsaXN0ZW5lciBwb3Np
dGlvbiB0byB0aGUgbGlzdGVuaW5nIGNhbWVyYSBnbG9iYWwgcG9zaXRpb24KKyAgICAgICAgICAg
ICAgICAgICAgYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0Lmxpc3RlbmVyLnNldFBvc2l0aW9uKGxp
c3RlbmluZ0NhbWVyYS5nbG9iYWxQb3NpdGlvbi54LCBsaXN0ZW5pbmdDYW1lcmEuZ2xvYmFsUG9z
aXRpb24ueSwgbGlzdGVuaW5nQ2FtZXJhLmdsb2JhbFBvc2l0aW9uLnopOworICAgICAgICAgICAg
ICAgICAgICAvLyBmb3IgVlIgY2FtZXJhcworICAgICAgICAgICAgICAgICAgICBpZiAobGlzdGVu
aW5nQ2FtZXJhLnJpZ0NhbWVyYXMgJiYgbGlzdGVuaW5nQ2FtZXJhLnJpZ0NhbWVyYXMubGVuZ3Ro
ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuaW5nQ2FtZXJhID0gbGlzdGVu
aW5nQ2FtZXJhLnJpZ0NhbWVyYXNbMF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgdmFyIG1hdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJNYXRyaXgiXS5JbnZlcnQobGlzdGVuaW5nQ2FtZXJhLmdldFZpZXdNYXRy
aXgoKSk7CisgICAgICAgICAgICAgICAgICAgIHZhciBjYW1lcmFEaXJlY3Rpb24gPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlRyYW5z
Zm9ybU5vcm1hbChuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlY3RvcjMiXSgwLCAwLCAtMSksIG1hdCk7CisgICAgICAgICAgICAgICAgICAgIGNh
bWVyYURpcmVjdGlvbi5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVG8gYXZv
aWQgc29tZSBlcnJvcnMgb24gR2VhclZSCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4o
Y2FtZXJhRGlyZWN0aW9uLngpICYmICFpc05hTihjYW1lcmFEaXJlY3Rpb24ueSkgJiYgIWlzTmFO
KGNhbWVyYURpcmVjdGlvbi56KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9Fbmdp
bmUuYXVkaW9Db250ZXh0Lmxpc3RlbmVyLnNldE9yaWVudGF0aW9uKGNhbWVyYURpcmVjdGlvbi54
LCBjYW1lcmFEaXJlY3Rpb24ueSwgY2FtZXJhRGlyZWN0aW9uLnosIDAsIDEsIDApOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE90
aGVyd2lzZSBzZXQgdGhlIGxpc3RlbmVyIHBvc2l0aW9uIHRvIDAsIDAgLDAKKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBsaXN0ZW5lciBwb3Np
dGlvbgorICAgICAgICAgICAgICAgICAgICBhdWRpb0VuZ2luZS5hdWRpb0NvbnRleHQubGlzdGVu
ZXIuc2V0UG9zaXRpb24oMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFyIGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2NlbmUu
bWFpblNvdW5kVHJhY2suc291bmRDb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHNvdW5kID0gc2NlbmUubWFpblNvdW5kVHJhY2suc291bmRDb2xsZWN0aW9uW2ld
OworICAgICAgICAgICAgICAgIGlmIChzb3VuZC51c2VDdXN0b21BdHRlbnVhdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICBzb3VuZC51cGRhdGVEaXN0YW5jZUZyb21MaXN0ZW5lcigpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzY2VuZS5zb3Vu
ZFRyYWNrcykgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzY2VuZS5zb3VuZFRy
YWNrcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsg
aiA8IHNjZW5lLnNvdW5kVHJhY2tzW2ldLnNvdW5kQ29sbGVjdGlvbi5sZW5ndGg7IGorKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc291bmQgPSBzY2VuZS5zb3VuZFRyYWNrc1tpXS5zb3Vu
ZENvbGxlY3Rpb25bal07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291bmQudXNlQ3Vz
dG9tQXR0ZW51YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VuZC51cGRh
dGVEaXN0YW5jZUZyb21MaXN0ZW5lcigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gQXVkaW9TY2VuZUNvbXBvbmVudDsKK30oKSk7CisK
K19zb3VuZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTb3VuZCJdLl9TY2VuZUNvbXBv
bmVudEluaXRpYWxpemF0aW9uID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAgdmFyIGNvbXBvID0g
c2NlbmUuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX0FVRElPKTsKKyAgICBpZiAo
IWNvbXBvKSB7CisgICAgICAgIGNvbXBvID0gbmV3IEF1ZGlvU2NlbmVDb21wb25lbnQoc2NlbmUp
OworICAgICAgICBzY2VuZS5fYWRkQ29tcG9uZW50KGNvbXBvKTsKKyAgICB9Cit9OworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9BdWRpby9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL0F1ZGlvL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBbmFseXNlciwgQXVkaW9Fbmdp
bmUsIEF1ZGlvU2NlbmVDb21wb25lbnQsIFNvdW5kLCBTb3VuZFRyYWNrLCBXZWlnaHRlZFNvdW5k
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5hbHlzZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
YW5hbHlzZXIgKi8gIi4vQXVkaW8vYW5hbHlzZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5h
bHlzZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hbmFseXNlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJBbmFseXNlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9h
dWRpb0VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9hdWRpb0VuZ2luZSAqLyAiLi9BdWRpby9hdWRpb0VuZ2luZS50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJBdWRpb0VuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2F1ZGlvRW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkF1ZGlvRW5naW5lIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2F1ZGlvU2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXVkaW9TY2VuZUNv
bXBvbmVudCAqLyAiLi9BdWRpby9hdWRpb1NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkF1ZGlvU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hdWRpb1Nj
ZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkF1ZGlvU2NlbmVDb21w
b25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc291bmRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc291bmQgKi8g
Ii4vQXVkaW8vc291bmQudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU291bmQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9zb3VuZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTb3VuZCJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zb3VuZFRyYWNrX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NvdW5kVHJhY2sgKi8g
Ii4vQXVkaW8vc291bmRUcmFjay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTb3VuZFRyYWNrIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfc291bmRUcmFja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJTb3VuZFRyYWNrIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlaWdo
dGVkc291bmRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vd2VpZ2h0ZWRzb3VuZCAqLyAiLi9BdWRpby93ZWlnaHRlZHNvdW5kLnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIldlaWdodGVkU291bmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF93ZWln
aHRlZHNvdW5kX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIldlaWdodGVkU291bmQiXTsg
fSk7CisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQXVkaW8vc291bmQu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9BdWRpby9zb3Vu
ZC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogU291bmQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU291bmQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFNvdW5kOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIu
L01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvZW5n
aW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2RldlRvb2xzICovICIuL01p
c2MvZGV2VG9vbHMudHMiKTsKKworCisKKworCisKKy8qKgorICogRGVmaW5lcyBhIHNvdW5kIHRo
YXQgY2FuIGJlIHBsYXllZCBpbiB0aGUgYXBwbGljYXRpb24uCisgKiBUaGUgc291bmQgY2FuIGVp
dGhlciBiZSBhbiBhbWJpZW50IHRyYWNrIG9yIGEgc2ltcGxlIHNvdW5kIHBsYXllZCBpbiByZWFj
dGlvbiB0byBhIHVzZXIgYWN0aW9uLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL3BsYXlpbmdfc291bmRzX2FuZF9tdXNpYworICovCit2YXIgU291bmQgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgKiBDcmVhdGUgYSBzb3VuZCBhbmQg
YXR0YWNoIGl0IHRvIGEgc2NlbmUKKyAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgeW91ciBzb3Vu
ZAorICAgICogQHBhcmFtIHVybE9yQXJyYXlCdWZmZXIgVXJsIHRvIHRoZSBzb3VuZCB0byBsb2Fk
IGFzeW5jIG9yIEFycmF5QnVmZmVyLCBpdCBhbHNvIHdvcmtzIHdpdGggTWVkaWFTdHJlYW1zCisg
ICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgdGhlIHNvdW5kIGJlbG9uZ3MgdG8K
KyAgICAqIEBwYXJhbSByZWFkeVRvUGxheUNhbGxiYWNrIFByb3ZpZGUgYSBjYWxsYmFjayBmdW5j
dGlvbiBpZiB5b3UnZCBsaWtlIHRvIGxvYWQgeW91ciBjb2RlIG9uY2UgdGhlIHNvdW5kIGlzIHJl
YWR5IHRvIGJlIHBsYXllZAorICAgICogQHBhcmFtIG9wdGlvbnMgT2JqZWN0cyB0byBwcm92aWRl
IHdpdGggdGhlIGN1cnJlbnQgYXZhaWxhYmxlIG9wdGlvbnM6IGF1dG9wbGF5LCBsb29wLCB2b2x1
bWUsIHNwYXRpYWxTb3VuZCwgbWF4RGlzdGFuY2UsIHJvbGxvZmZGYWN0b3IsIHJlZkRpc3RhbmNl
LCBkaXN0YW5jZU1vZGVsLCBwYW5uaW5nTW9kZWwsIHN0cmVhbWluZworICAgICovCisgICAgZnVu
Y3Rpb24gU291bmQobmFtZSwgdXJsT3JBcnJheUJ1ZmZlciwgc2NlbmUsIHJlYWR5VG9QbGF5Q2Fs
bGJhY2ssIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYg
KHJlYWR5VG9QbGF5Q2FsbGJhY2sgPT09IHZvaWQgMCkgeyByZWFkeVRvUGxheUNhbGxiYWNrID0g
bnVsbDsgfQorICAgICAgICAvKioKKyAgICAgICAgICogRG9lcyB0aGUgc291bmQgYXV0b3BsYXkg
b25jZSBsb2FkZWQuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmF1dG9wbGF5ID0gZmFsc2U7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEb2VzIHRoZSBzb3VuZCBsb29wIGFmdGVyIGl0IGZp
bmlzaGVzIHBsYXlpbmcgb25jZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubG9vcCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRG9lcyB0aGUgc291bmQgdXNlIGEgY3VzdG9t
IGF0dGVudWF0aW9uIGN1cnZlIHRvIHNpbXVsYXRlIHRoZSBmYWxsb2ZmCisgICAgICAgICAqIGhh
cHBlbmluZyB3aGVuIHRoZSBzb3VyY2UgZ2V0cyBmdXJ0aGVyIGF3YXkgZnJvbSB0aGUgY2FtZXJh
LgorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWlu
Z19zb3VuZHNfYW5kX211c2ljI2NyZWF0aW5nLXlvdXItb3duLWN1c3RvbS1hdHRlbnVhdGlvbi1m
dW5jdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy51c2VDdXN0b21BdHRlbnVhdGlvbiA9
IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogSXMgdGhpcyBzb3VuZCBjdXJyZW50bHkg
cGxheWVkLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIElzIHRoaXMgc291bmQgY3VycmVudGx5IHBhdXNlZC4KKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIERvZXMgdGhpcyBzb3VuZCBlbmFibGVzIHNwYXRpYWwgc291bmQuCisgICAgICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9wbGF5aW5nX3NvdW5kc19h
bmRfbXVzaWMjY3JlYXRpbmctYS1zcGF0aWFsLTNkLXNvdW5kCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLnNwYXRpYWxTb3VuZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVm
aW5lIHRoZSByZWZlcmVuY2UgZGlzdGFuY2UgdGhlIHNvdW5kIHNob3VsZCBiZSBoZWFyZCBwZXJm
ZWN0bHkuCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9w
bGF5aW5nX3NvdW5kc19hbmRfbXVzaWMjY3JlYXRpbmctYS1zcGF0aWFsLTNkLXNvdW5kCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnJlZkRpc3RhbmNlID0gMTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIERlZmluZSB0aGUgcm9sbCBvZmYgZmFjdG9yIG9mIHNwYXRpYWwgc291bmRzLgorICAg
ICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3Vu
ZHNfYW5kX211c2ljI2NyZWF0aW5nLWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5yb2xsb2ZmRmFjdG9yID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZSB0aGUgbWF4IGRpc3RhbmNlIHRoZSBzb3VuZCBzaG91bGQgYmUgaGVhcmQgKGludGVuc2l0
eSBqdXN0IGJlY2FtZSAwIGF0IHRoaXMgcG9pbnQpLgorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3VuZHNfYW5kX211c2ljI2NyZWF0aW5n
LWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tYXhEaXN0YW5j
ZSA9IDEwMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0aGUgZGlzdGFuY2UgYXR0
ZW51YXRpb24gbW9kZWwgdGhlIHNvdW5kIHdpbGwgZm9sbG93LgorICAgICAgICAgKiBAc2VlIGh0
dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3VuZHNfYW5kX211c2ljI2Ny
ZWF0aW5nLWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaXN0
YW5jZU1vZGVsID0gImxpbmVhciI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxl
IGV2ZW50IHdoZW4gdGhlIGN1cnJlbnQgcGxheWluZyBzb3VuZCBmaW5pc2hlcy4KKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMub25FbmRlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJs
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAg
dGhpcy5fcGFubmluZ01vZGVsID0gImVxdWFscG93ZXIiOworICAgICAgICB0aGlzLl9wbGF5YmFj
a1JhdGUgPSAxOworICAgICAgICB0aGlzLl9zdHJlYW1pbmcgPSBmYWxzZTsKKyAgICAgICAgdGhp
cy5fc3RhcnRUaW1lID0gMDsKKyAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSAwOworICAgICAg
ICB0aGlzLl9wb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAg
ICAgICB0aGlzLl9wb3NpdGlvbkluRW1pdHRlclNwYWNlID0gZmFsc2U7CisgICAgICAgIHRoaXMu
X2xvY2FsRGlyZWN0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0oMSwgMCwgMCk7CisgICAgICAgIHRoaXMuX3ZvbHVtZSA9
IDE7CisgICAgICAgIHRoaXMuX2lzUmVhZHlUb1BsYXkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5f
aXNEaXJlY3Rpb25hbCA9IGZhbHNlOworICAgICAgICAvLyBVc2VkIGlmIHlvdSdkIGxpa2UgdG8g
Y3JlYXRlIGEgZGlyZWN0aW9uYWwgc291bmQuCisgICAgICAgIC8vIElmIG5vdCBzZXQsIHRoZSBz
b3VuZCB3aWxsIGJlIG9tbmlkaXJlY3Rpb25hbAorICAgICAgICB0aGlzLl9jb25lSW5uZXJBbmds
ZSA9IDM2MDsKKyAgICAgICAgdGhpcy5fY29uZU91dGVyQW5nbGUgPSAzNjA7CisgICAgICAgIHRo
aXMuX2NvbmVPdXRlckdhaW4gPSAwOworICAgICAgICB0aGlzLl9pc091dHB1dENvbm5lY3RlZCA9
IGZhbHNlOworICAgICAgICB0aGlzLl91cmxUeXBlID0gIlVua25vd24iOworICAgICAgICB0aGlz
Lm5hbWUgPSBuYW1lOworICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5lOworICAgICAgICBTb3Vu
ZC5fU2NlbmVDb21wb25lbnRJbml0aWFsaXphdGlvbihzY2VuZSk7CisgICAgICAgIHRoaXMuX3Jl
YWR5VG9QbGF5Q2FsbGJhY2sgPSByZWFkeVRvUGxheUNhbGxiYWNrOworICAgICAgICAvLyBEZWZh
dWx0IGN1c3RvbSBhdHRlbnVhdGlvbiBmdW5jdGlvbiBpcyBhIGxpbmVhciBhdHRlbnVhdGlvbgor
ICAgICAgICB0aGlzLl9jdXN0b21BdHRlbnVhdGlvbkZ1bmN0aW9uID0gZnVuY3Rpb24gKGN1cnJl
bnRWb2x1bWUsIGN1cnJlbnREaXN0YW5jZSwgbWF4RGlzdGFuY2UsIHJlZkRpc3RhbmNlLCByb2xs
b2ZmRmFjdG9yKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudERpc3RhbmNlIDwgbWF4RGlzdGFu
Y2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFZvbHVtZSAqICgxIC0gY3VycmVu
dERpc3RhbmNlIC8gbWF4RGlzdGFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisgICAgICAgIGlmIChvcHRpb25zKSB7CisgICAgICAgICAgICB0aGlzLmF1dG9wbGF5ID0gb3B0
aW9ucy5hdXRvcGxheSB8fCBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMubG9vcCA9IG9wdGlvbnMu
bG9vcCB8fCBmYWxzZTsKKyAgICAgICAgICAgIC8vIGlmIHZvbHVtZSA9PT0gMCwgd2UgbmVlZCBh
bm90aGVyIHdheSB0byBjaGVjayB0aGlzIG9wdGlvbgorICAgICAgICAgICAgaWYgKG9wdGlvbnMu
dm9sdW1lICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl92b2x1bWUgPSBv
cHRpb25zLnZvbHVtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc3BhdGlhbFNv
dW5kID0gb3B0aW9ucy5zcGF0aWFsU291bmQgfHwgZmFsc2U7CisgICAgICAgICAgICB0aGlzLm1h
eERpc3RhbmNlID0gb3B0aW9ucy5tYXhEaXN0YW5jZSB8fCAxMDA7CisgICAgICAgICAgICB0aGlz
LnVzZUN1c3RvbUF0dGVudWF0aW9uID0gb3B0aW9ucy51c2VDdXN0b21BdHRlbnVhdGlvbiB8fCBm
YWxzZTsKKyAgICAgICAgICAgIHRoaXMucm9sbG9mZkZhY3RvciA9IG9wdGlvbnMucm9sbG9mZkZh
Y3RvciB8fCAxOworICAgICAgICAgICAgdGhpcy5yZWZEaXN0YW5jZSA9IG9wdGlvbnMucmVmRGlz
dGFuY2UgfHwgMTsKKyAgICAgICAgICAgIHRoaXMuZGlzdGFuY2VNb2RlbCA9IG9wdGlvbnMuZGlz
dGFuY2VNb2RlbCB8fCAibGluZWFyIjsKKyAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9
IG9wdGlvbnMucGxheWJhY2tSYXRlIHx8IDE7CisgICAgICAgICAgICB0aGlzLl9zdHJlYW1pbmcg
PSBvcHRpb25zLnN0cmVhbWluZyB8fCBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2xlbmd0aCA9
IG9wdGlvbnMubGVuZ3RoOworICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gb3B0aW9ucy5vZmZz
ZXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVk
aW9FbmdpbmUuYXVkaW9Db250ZXh0KSB7CisgICAgICAgICAgICB0aGlzLl9zb3VuZEdhaW4gPSBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVk
aW9FbmdpbmUuYXVkaW9Db250ZXh0LmNyZWF0ZUdhaW4oKTsKKyAgICAgICAgICAgIHRoaXMuX3Nv
dW5kR2Fpbi5nYWluLnZhbHVlID0gdGhpcy5fdm9sdW1lOworICAgICAgICAgICAgdGhpcy5faW5w
dXRBdWRpb05vZGUgPSB0aGlzLl9zb3VuZEdhaW47CisgICAgICAgICAgICB0aGlzLl9vdXRwdXRB
dWRpb05vZGUgPSB0aGlzLl9zb3VuZEdhaW47CisgICAgICAgICAgICBpZiAodGhpcy5zcGF0aWFs
U291bmQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVTcGF0aWFsUGFyYW1ldGVycygp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2NlbmUubWFpblNvdW5kVHJhY2su
QWRkU291bmQodGhpcyk7CisgICAgICAgICAgICB2YXIgdmFsaWRQYXJhbWV0ZXIgPSB0cnVlOwor
ICAgICAgICAgICAgLy8gaWYgbm8gcGFyYW1ldGVyIGlzIHBhc3NlZCwgeW91IG5lZWQgdG8gY2Fs
bCBzZXRBdWRpb0J1ZmZlciB5b3Vyc2VsZiB0byBwcmVwYXJlIHRoZSBzb3VuZAorICAgICAgICAg
ICAgaWYgKHVybE9yQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAodHlwZW9mICh1cmxPckFycmF5QnVmZmVyKSA9PT0gInN0cmluZyIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VybFR5cGUgPSAiU3RyaW5nIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh1cmxPckFy
cmF5QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3VybFR5cGUgPSAiQXJyYXlCdWZmZXIiOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVybE9yQXJyYXlCdWZmZXIgaW5zdGFuY2Vv
ZiBNZWRpYVN0cmVhbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXJsVHlwZSA9
ICJNZWRpYVN0cmVhbSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh1cmxPckFycmF5QnVmZmVyKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fdXJsVHlwZSA9ICJBcnJheSI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHVybHMgPSBbXTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGNvZGVjU3VwcG9ydGVkRm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoICh0aGlzLl91cmxUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICJNZWRpYVN0cmVhbSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyZWFt
aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JlYWR5VG9Q
bGF5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW1pbmdT
b3VyY2UgPSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5n
aW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHVy
bE9yQXJyYXlCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1
dG9wbGF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxheSgwLCB0
aGlzLl9vZmZzZXQsIHRoaXMuX2xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkeVRvUGxheUNhbGxi
YWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5VG9QbGF5
Q2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJBcnJh
eUJ1ZmZlciI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybE9yQXJyYXlCdWZm
ZXIuYnl0ZUxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29k
ZWNTdXBwb3J0ZWRGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuX3NvdW5kTG9hZGVkKHVybE9yQXJyYXlCdWZmZXIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgIlN0cmluZyI6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJscy5wdXNoKHVybE9yQXJyYXlCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAiQXJyYXkiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmxzLmxlbmd0
aCA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzID0gdXJsT3JB
cnJheUJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgYSBzdXBwb3J0ZWQgZm9ybWF0LCB3ZSBsb2Fk
IGl0IGltbWVkaWF0ZWx5IGFuZCBzdG9wIHRoZSBsb29wCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cmxzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSB1cmxzW2ldOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlY1N1cHBvcnRlZEZvdW5kID0gKG9wdGlvbnMgJiYgb3B0aW9u
cy5za2lwQ29kZWNDaGVjaykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh1cmwuaW5kZXhPZigiLm1wMyIsIHVybC5sZW5ndGggLSA0KSAhPT0gLTEgJiYgX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5l
LmlzTVAzc3VwcG9ydGVkKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHVybC5pbmRleE9mKCIub2dnIiwgdXJsLmxlbmd0aCAtIDQpICE9PSAtMSAmJiBfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUu
aXNPR0dzdXBwb3J0ZWQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dXJsLmluZGV4T2YoIi53YXYiLCB1cmwubGVuZ3RoIC0gNCkgIT09IC0xKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVybC5pbmRleE9mKCJibG9iOiIpICE9PSAtMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlY1N1cHBvcnRlZEZvdW5k
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkaW5nIHNvdW5k
IHVzaW5nIFhIUjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhp
cy5fc3RyZWFtaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fc2NlbmUuX2xvYWRGaWxlKHVybCwgZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NvdW5kTG9hZGVkKGRhdGEp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwg
dHJ1ZSwgdHJ1ZSwgZnVuY3Rpb24gKGV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siTG9nZ2VyIl0uRXJyb3IoIlhIUiAiICsgZXhjZXB0aW9uLnN0YXR1
cyArICIgZXJyb3Igb246ICIgKyB1cmwgKyAiLiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJMb2dn
ZXIiXS5FcnJvcigiU291bmQgY3JlYXRpb24gYWJvcnRlZC4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NjZW5lLm1haW5Tb3VuZFRyYWNrLlJl
bW92ZVNvdW5kKF90aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmVhbWluZyBzb3VuZCB1c2luZyBIVE1MNSBB
dWRpbyB0YWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2h0bWxBdWRpb0VsZW1l
bnQgPSBuZXcgQXVkaW8odXJsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9odG1sQXVkaW9FbGVtZW50LmNvbnRyb2xzID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faHRtbEF1ZGlvRWxlbWVudC5sb29w
ID0gdGhpcy5sb29wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N
aXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRvb2xzIl0uU2V0Q29yc0Jl
aGF2aW9yKHVybCwgdGhpcy5faHRtbEF1ZGlvRWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5faHRtbEF1ZGlvRWxlbWVudC5wcmVsb2FkID0gImF1
dG8iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2h0bWxB
dWRpb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2FucGxheXRocm91Z2giLCBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9p
c1JlYWR5VG9QbGF5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKF90aGlzLmF1dG9wbGF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wbGF5KDAsIF90aGlzLl9vZmZzZXQsIF90aGlz
Ll9sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5f
cmVhZHlUb1BsYXlDYWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX3RoaXMuX3JlYWR5VG9QbGF5Q2FsbGJhY2soKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5faHRtbEF1ZGlvRWxlbWVudCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faHRtbEF1ZGlv
RWxlbWVudC5sb2FkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRQYXJhbWV0ZXIgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkUGFyYW1ldGVyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siTG9nZ2VyIl0uRXJyb3IoIlBhcmFtZXRlciBtdXN0IGJlIGEgVVJMIHRvIHRoZSBzb3VuZCwg
YW4gQXJyYXkgb2YgVVJMcyAoLm1wMyAmIC5vZ2cpIG9yIGFuIEFycmF5QnVmZmVyIG9mIHRoZSBz
b3VuZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29kZWNTdXBwb3J0ZWRGb3VuZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzUmVhZHlUb1BsYXkgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRpbmcgYSByZWFkeSB0byBwbGF5
IGV2ZW50IHRvIGF2b2lkIGJyZWFraW5nIGNvZGUgcGF0aAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0aGlzLl9yZWFkeVRvUGxheUNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fcmVhZHlUb1BsYXlDYWxsYmFj
aykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yZWFk
eVRvUGxheUNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMDApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoZXgp
IHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIkxvZ2dlciJdLkVycm9yKCJVbmV4cGVjdGVkIGVycm9yLiBTb3VuZCBjcmVhdGlv
biBhYm9ydGVkLiIpOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5tYWluU291bmRU
cmFjay5SZW1vdmVTb3VuZCh0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBBZGRpbmcgYW4gZW1w
dHkgc291bmQgdG8gYXZvaWQgYnJlYWtpbmcgYXVkaW8gY2FsbHMgZm9yIG5vbiBXZWIgQXVkaW8g
YnJvd3NlcnMKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLm1haW5Tb3VuZFRyYWNrLkFkZFNvdW5k
KHRoaXMpOworICAgICAgICAgICAgaWYgKCFfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuV2FybmVkV2ViQXVkaW9VbnN1cHBv
cnRlZCkgeworICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJMb2dnZXIiXS5FcnJvcigiV2ViIEF1ZGlvIGlzIG5vdCBzdXBwb3J0ZWQgYnkg
eW91ciBicm93c2VyLiIpOworICAgICAgICAgICAgICAgIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5XYXJuZWRXZWJBdWRp
b1Vuc3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFNpbXVs
YXRpbmcgYSByZWFkeSB0byBwbGF5IGV2ZW50IHRvIGF2b2lkIGJyZWFraW5nIGNvZGUgZm9yIG5v
biB3ZWIgYXVkaW8gYnJvd3NlcnMKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkeVRvUGxheUNh
bGxiYWNrKSB7CisgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX3JlYWR5VG9QbGF5Q2FsbGJhY2spIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yZWFkeVRvUGxheUNhbGxiYWNrKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LCAxMDAwKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIHRoZSBzb3Vu
ZCBhbmQgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgICAgICovCisgICAgU291bmQucHJvdG90
eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmIChfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuY2FuVXNl
V2ViQXVkaW8pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykgeworICAgICAgICAg
ICAgICAgIHRoaXMuc3RvcCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5faXNS
ZWFkeVRvUGxheSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKHRoaXMuc291bmRUcmFja0lkID09
PSAtMSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3NjZW5lLm1haW5Tb3VuZFRyYWNrLlJlbW92
ZVNvdW5kKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5f
c2NlbmUuc291bmRUcmFja3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5zb3VuZFRy
YWNrc1t0aGlzLnNvdW5kVHJhY2tJZF0uUmVtb3ZlU291bmQodGhpcyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodGhpcy5fc291bmRHYWluKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fc291bmRHYWluLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zb3VuZEdh
aW4gPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX3NvdW5kUGFu
bmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc291bmRQYW5uZXIuZGlzY29ubmVjdCgpOwor
ICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kUGFubmVyID0gbnVsbDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0aGlzLl9zb3VuZFNvdXJjZSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX3NvdW5kU291cmNlLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zb3Vu
ZFNvdXJjZSA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9hdWRpb0J1
ZmZlciA9IG51bGw7CisgICAgICAgICAgICBpZiAodGhpcy5faHRtbEF1ZGlvRWxlbWVudCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX2h0bWxBdWRpb0VsZW1lbnQucGF1c2UoKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9odG1sQXVkaW9FbGVtZW50LnNyYyA9ICIiOworICAgICAgICAgICAgICAg
IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5faHRtbEF1ZGlvRWxlbWVudCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtaW5nU291cmNlKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fc3RyZWFtaW5nU291cmNlLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9jb25uZWN0ZWRUcmFuc2Zvcm1Ob2RlICYmIHRo
aXMuX3JlZ2lzdGVyRnVuYykgeworICAgICAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RlZFRyYW5z
Zm9ybU5vZGUudW5yZWdpc3RlckFmdGVyV29ybGRNYXRyaXhVcGRhdGUodGhpcy5fcmVnaXN0ZXJG
dW5jKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0ZWRUcmFuc2Zvcm1Ob2RlID0gbnVs
bDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0
cyBpZiB0aGUgc291bmRzIGlzIHJlYWR5IHRvIGJlIHBsYXllZCBvciBub3QuCisgICAgICogQHJl
dHVybnMgdHJ1ZSBpZiByZWFkeSwgb3RoZXJ3aXNlIGZhbHNlCisgICAgICovCisgICAgU291bmQu
cHJvdG90eXBlLmlzUmVhZHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9p
c1JlYWR5VG9QbGF5OworICAgIH07CisgICAgU291bmQucHJvdG90eXBlLl9zb3VuZExvYWRlZCA9
IGZ1bmN0aW9uIChhdWRpb0RhdGEpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgaWYgKCFfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5n
aW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0KSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5kZWNvZGVBdWRpb0RhdGEo
YXVkaW9EYXRhLCBmdW5jdGlvbiAoYnVmZmVyKSB7CisgICAgICAgICAgICBfdGhpcy5fYXVkaW9C
dWZmZXIgPSBidWZmZXI7CisgICAgICAgICAgICBfdGhpcy5faXNSZWFkeVRvUGxheSA9IHRydWU7
CisgICAgICAgICAgICBpZiAoX3RoaXMuYXV0b3BsYXkpIHsKKyAgICAgICAgICAgICAgICBfdGhp
cy5wbGF5KDAsIF90aGlzLl9vZmZzZXQsIF90aGlzLl9sZW5ndGgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKF90aGlzLl9yZWFkeVRvUGxheUNhbGxiYWNrKSB7CisgICAgICAgICAg
ICAgICAgX3RoaXMuX3JlYWR5VG9QbGF5Q2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwgZnVuY3Rpb24gKGVycikgeyBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siTG9nZ2VyIl0uRXJyb3IoIkVycm9yIHdoaWxlIGRlY29kaW5nIGF1ZGlvIGRhdGEg
Zm9yOiAiICsgX3RoaXMubmFtZSArICIgLyBFcnJvcjogIiArIGVycik7IH0pOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU2V0cyB0aGUgZGF0YSBvZiB0aGUgc291bmQgZnJvbSBhbiBhdWRpb2J1
ZmZlcgorICAgICAqIEBwYXJhbSBhdWRpb0J1ZmZlciBUaGUgYXVkaW9CdWZmZXIgY29udGFpbmlu
ZyB0aGUgZGF0YQorICAgICAqLworICAgIFNvdW5kLnByb3RvdHlwZS5zZXRBdWRpb0J1ZmZlciA9
IGZ1bmN0aW9uIChhdWRpb0J1ZmZlcikgeworICAgICAgICBpZiAoX0VuZ2luZXNfZW5naW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmNhblVzZVdl
YkF1ZGlvKSB7CisgICAgICAgICAgICB0aGlzLl9hdWRpb0J1ZmZlciA9IGF1ZGlvQnVmZmVyOwor
ICAgICAgICAgICAgdGhpcy5faXNSZWFkeVRvUGxheSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgc291bmRzIG9wdGlvbnMgc3Vj
aCBhcyBtYXhkaXN0YW5jZSwgbG9vcC4uLgorICAgICAqIEBwYXJhbSBvcHRpb25zIEEgSlNPTiBv
YmplY3QgY29udGFpbmluZyB2YWx1ZXMgbmFtZWQgYXMgdGhlIG9iamVjdCBwcm9wZXJ0aWVzCisg
ICAgICovCisgICAgU291bmQucHJvdG90eXBlLnVwZGF0ZU9wdGlvbnMgPSBmdW5jdGlvbiAob3B0
aW9ucykgeworICAgICAgICBpZiAob3B0aW9ucykgeworICAgICAgICAgICAgdGhpcy5sb29wID0g
b3B0aW9ucy5sb29wIHx8IHRoaXMubG9vcDsKKyAgICAgICAgICAgIHRoaXMubWF4RGlzdGFuY2Ug
PSBvcHRpb25zLm1heERpc3RhbmNlIHx8IHRoaXMubWF4RGlzdGFuY2U7CisgICAgICAgICAgICB0
aGlzLnVzZUN1c3RvbUF0dGVudWF0aW9uID0gb3B0aW9ucy51c2VDdXN0b21BdHRlbnVhdGlvbiB8
fCB0aGlzLnVzZUN1c3RvbUF0dGVudWF0aW9uOworICAgICAgICAgICAgdGhpcy5yb2xsb2ZmRmFj
dG9yID0gb3B0aW9ucy5yb2xsb2ZmRmFjdG9yIHx8IHRoaXMucm9sbG9mZkZhY3RvcjsKKyAgICAg
ICAgICAgIHRoaXMucmVmRGlzdGFuY2UgPSBvcHRpb25zLnJlZkRpc3RhbmNlIHx8IHRoaXMucmVm
RGlzdGFuY2U7CisgICAgICAgICAgICB0aGlzLmRpc3RhbmNlTW9kZWwgPSBvcHRpb25zLmRpc3Rh
bmNlTW9kZWwgfHwgdGhpcy5kaXN0YW5jZU1vZGVsOworICAgICAgICAgICAgdGhpcy5fcGxheWJh
Y2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGUgfHwgdGhpcy5fcGxheWJhY2tSYXRlOworICAg
ICAgICAgICAgdGhpcy5fbGVuZ3RoID0gb3B0aW9ucy5sZW5ndGggPyBvcHRpb25zLmxlbmd0aCAv
IDEwMDAgOiB1bmRlZmluZWQ7CisgICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBvcHRpb25zLm9m
ZnNldCA/IG9wdGlvbnMub2Zmc2V0IC8gMTAwMCA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIHRo
aXMuX3VwZGF0ZVNwYXRpYWxQYXJhbWV0ZXJzKCk7CisgICAgICAgICAgICBpZiAodGhpcy5pc1Bs
YXlpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtaW5nICYmIHRoaXMuX2h0
bWxBdWRpb0VsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5faHRtbEF1ZGlvRWxl
bWVudC5wbGF5YmFja1JhdGUgPSB0aGlzLl9wbGF5YmFja1JhdGU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5f
c291bmRTb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kU291cmNl
LnBsYXliYWNrUmF0ZS52YWx1ZSA9IHRoaXMuX3BsYXliYWNrUmF0ZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisgICAgU291bmQucHJvdG90eXBlLl9jcmVhdGVTcGF0aWFsUGFyYW1ldGVycyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiBfRW5naW5l
c19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9Fbmdp
bmUuYXVkaW9Db250ZXh0KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUuaGVhZHBob25l
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcGFubmluZ01vZGVsID0gIkhSVEYiOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc291bmRQYW5uZXIgPSBfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9D
b250ZXh0LmNyZWF0ZVBhbm5lcigpOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlU3BhdGlhbFBh
cmFtZXRlcnMoKTsKKyAgICAgICAgICAgIHRoaXMuX3NvdW5kUGFubmVyLmNvbm5lY3QodGhpcy5f
b3V0cHV0QXVkaW9Ob2RlKTsKKyAgICAgICAgICAgIHRoaXMuX2lucHV0QXVkaW9Ob2RlID0gdGhp
cy5fc291bmRQYW5uZXI7CisgICAgICAgIH0KKyAgICB9OworICAgIFNvdW5kLnByb3RvdHlwZS5f
dXBkYXRlU3BhdGlhbFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
LnNwYXRpYWxTb3VuZCAmJiB0aGlzLl9zb3VuZFBhbm5lcikgeworICAgICAgICAgICAgaWYgKHRo
aXMudXNlQ3VzdG9tQXR0ZW51YXRpb24pIHsKKyAgICAgICAgICAgICAgICAvLyBUcmlja3MgdG8g
ZGlzYWJsZSBpbiBhIHdheSBlbWJlZGRlZCBXZWIgQXVkaW8gYXR0ZW51YXRpb24KKyAgICAgICAg
ICAgICAgICB0aGlzLl9zb3VuZFBhbm5lci5kaXN0YW5jZU1vZGVsID0gImxpbmVhciI7CisgICAg
ICAgICAgICAgICAgdGhpcy5fc291bmRQYW5uZXIubWF4RGlzdGFuY2UgPSBOdW1iZXIuTUFYX1ZB
TFVFOworICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kUGFubmVyLnJlZkRpc3RhbmNlID0gMTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9zb3VuZFBhbm5lci5yb2xsb2ZmRmFjdG9yID0gMTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9zb3VuZFBhbm5lci5wYW5uaW5nTW9kZWwgPSB0aGlzLl9wYW5u
aW5nTW9kZWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9zb3VuZFBhbm5lci5kaXN0YW5jZU1vZGVsID0gdGhpcy5kaXN0YW5jZU1vZGVs
OworICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kUGFubmVyLm1heERpc3RhbmNlID0gdGhpcy5t
YXhEaXN0YW5jZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zb3VuZFBhbm5lci5yZWZEaXN0YW5j
ZSA9IHRoaXMucmVmRGlzdGFuY2U7CisgICAgICAgICAgICAgICAgdGhpcy5fc291bmRQYW5uZXIu
cm9sbG9mZkZhY3RvciA9IHRoaXMucm9sbG9mZkZhY3RvcjsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9zb3VuZFBhbm5lci5wYW5uaW5nTW9kZWwgPSB0aGlzLl9wYW5uaW5nTW9kZWw7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFN3aXRjaCB0aGUgcGFu
bmluZyBtb2RlbCB0byBIUlRGOgorICAgICAqIFJlbmRlcnMgYSBzdGVyZW8gb3V0cHV0IG9mIGhp
Z2hlciBxdWFsaXR5IHRoYW4gZXF1YWxwb3dlciDigJQgaXQgdXNlcyBhIGNvbnZvbHV0aW9uIHdp
dGggbWVhc3VyZWQgaW1wdWxzZSByZXNwb25zZXMgZnJvbSBodW1hbiBzdWJqZWN0cy4KKyAgICAg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3VuZHNfYW5k
X211c2ljI2NyZWF0aW5nLWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAqLworICAgIFNvdW5kLnBy
b3RvdHlwZS5zd2l0Y2hQYW5uaW5nTW9kZWxUb0hSVEYgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX3Bhbm5pbmdNb2RlbCA9ICJIUlRGIjsKKyAgICAgICAgdGhpcy5fc3dpdGNoUGFubmlu
Z01vZGVsKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTd2l0Y2ggdGhlIHBhbm5pbmcgbW9k
ZWwgdG8gRXF1YWwgUG93ZXI6CisgICAgICogUmVwcmVzZW50cyB0aGUgZXF1YWwtcG93ZXIgcGFu
bmluZyBhbGdvcml0aG0sIGdlbmVyYWxseSByZWdhcmRlZCBhcyBzaW1wbGUgYW5kIGVmZmljaWVu
dC4gZXF1YWxwb3dlciBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAgICAgKiBAc2VlIGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3VuZHNfYW5kX211c2ljI2NyZWF0aW5n
LWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAqLworICAgIFNvdW5kLnByb3RvdHlwZS5zd2l0Y2hQ
YW5uaW5nTW9kZWxUb0VxdWFsUG93ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3Bh
bm5pbmdNb2RlbCA9ICJlcXVhbHBvd2VyIjsKKyAgICAgICAgdGhpcy5fc3dpdGNoUGFubmluZ01v
ZGVsKCk7CisgICAgfTsKKyAgICBTb3VuZC5wcm90b3R5cGUuX3N3aXRjaFBhbm5pbmdNb2RlbCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiB0
aGlzLnNwYXRpYWxTb3VuZCAmJiB0aGlzLl9zb3VuZFBhbm5lcikgeworICAgICAgICAgICAgdGhp
cy5fc291bmRQYW5uZXIucGFubmluZ01vZGVsID0gdGhpcy5fcGFubmluZ01vZGVsOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb25uZWN0IHRoaXMgc291bmQgdG8gYSBzb3Vu
ZCB0cmFjayBhdWRpbyBub2RlIGxpa2UgZ2Fpbi4uLgorICAgICAqIEBwYXJhbSBzb3VuZFRyYWNr
QXVkaW9Ob2RlIHRoZSBzb3VuZCB0cmFjayBhdWRpbyBub2RlIHRvIGNvbm5lY3QgdG8KKyAgICAg
Ki8KKyAgICBTb3VuZC5wcm90b3R5cGUuY29ubmVjdFRvU291bmRUcmFja0F1ZGlvTm9kZSA9IGZ1
bmN0aW9uIChzb3VuZFRyYWNrQXVkaW9Ob2RlKSB7CisgICAgICAgIGlmIChfRW5naW5lc19lbmdp
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuY2Fu
VXNlV2ViQXVkaW8pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc091dHB1dENvbm5lY3RlZCkg
eworICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dEF1ZGlvTm9kZS5kaXNjb25uZWN0KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vdXRwdXRBdWRpb05vZGUuY29ubmVjdChz
b3VuZFRyYWNrQXVkaW9Ob2RlKTsKKyAgICAgICAgICAgIHRoaXMuX2lzT3V0cHV0Q29ubmVjdGVk
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgKiBUcmFuc2Zvcm0gdGhp
cyBzb3VuZCBpbnRvIGEgZGlyZWN0aW9uYWwgc291cmNlCisgICAgKiBAcGFyYW0gY29uZUlubmVy
QW5nbGUgU2l6ZSBvZiB0aGUgaW5uZXIgY29uZSBpbiBkZWdyZWUKKyAgICAqIEBwYXJhbSBjb25l
T3V0ZXJBbmdsZSBTaXplIG9mIHRoZSBvdXRlciBjb25lIGluIGRlZ3JlZQorICAgICogQHBhcmFt
IGNvbmVPdXRlckdhaW4gVm9sdW1lIG9mIHRoZSBzb3VuZCBvdXRzaWRlIHRoZSBvdXRlciBjb25l
IChiZXR3ZWVuIDAuMCBhbmQgMS4wKQorICAgICovCisgICAgU291bmQucHJvdG90eXBlLnNldERp
cmVjdGlvbmFsQ29uZSA9IGZ1bmN0aW9uIChjb25lSW5uZXJBbmdsZSwgY29uZU91dGVyQW5nbGUs
IGNvbmVPdXRlckdhaW4pIHsKKyAgICAgICAgaWYgKGNvbmVPdXRlckFuZ2xlIDwgY29uZUlubmVy
QW5nbGUpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJMb2dnZXIiXS5FcnJvcigic2V0RGlyZWN0aW9uYWxDb25lKCk6IG91dGVyIGFuZ2xl
IG9mIHRoZSBjb25lIG11c3QgYmUgc3VwZXJpb3Igb3IgZXF1YWwgdG8gdGhlIGlubmVyIGFuZ2xl
LiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NvbmVJ
bm5lckFuZ2xlID0gY29uZUlubmVyQW5nbGU7CisgICAgICAgIHRoaXMuX2NvbmVPdXRlckFuZ2xl
ID0gY29uZU91dGVyQW5nbGU7CisgICAgICAgIHRoaXMuX2NvbmVPdXRlckdhaW4gPSBjb25lT3V0
ZXJHYWluOworICAgICAgICB0aGlzLl9pc0RpcmVjdGlvbmFsID0gdHJ1ZTsKKyAgICAgICAgaWYg
KHRoaXMuaXNQbGF5aW5nICYmIHRoaXMubG9vcCkgeworICAgICAgICAgICAgdGhpcy5zdG9wKCk7
CisgICAgICAgICAgICB0aGlzLnBsYXkoMCwgdGhpcy5fb2Zmc2V0LCB0aGlzLl9sZW5ndGgpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU291bmQucHJvdG90
eXBlLCAiZGlyZWN0aW9uYWxDb25lSW5uZXJBbmdsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3Igc2V0cyB0aGUgaW5uZXIgYW5nbGUgZm9yIHRoZSBkaXJlY3Rpb25hbCBjb25l
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fY29uZUlubmVyQW5nbGU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGlubmVyIGFuZ2xlIGZvciB0aGUgZGlyZWN0aW9uYWwg
Y29uZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAodmFsdWUgIT0gdGhpcy5fY29uZUlubmVyQW5nbGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodGhpcy5fY29uZU91dGVyQW5nbGUgPCB2YWx1ZSkgeworICAgICAgICAgICAgICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTG9nZ2VyIl0u
RXJyb3IoImRpcmVjdGlvbmFsQ29uZUlubmVyQW5nbGU6IG91dGVyIGFuZ2xlIG9mIHRoZSBjb25l
IG11c3QgYmUgc3VwZXJpb3Igb3IgZXF1YWwgdG8gdGhlIGlubmVyIGFuZ2xlLiIpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHRoaXMuX2NvbmVJbm5lckFuZ2xlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0Vu
Z2luZS5jYW5Vc2VXZWJBdWRpbyAmJiB0aGlzLnNwYXRpYWxTb3VuZCAmJiB0aGlzLl9zb3VuZFBh
bm5lcikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3VuZFBhbm5lci5jb25lSW5uZXJB
bmdsZSA9IHRoaXMuX2NvbmVJbm5lckFuZ2xlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdW5k
LnByb3RvdHlwZSwgImRpcmVjdGlvbmFsQ29uZU91dGVyQW5nbGUiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIG91dGVyIGFuZ2xlIGZvciB0aGUgZGlyZWN0aW9u
YWwgY29uZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2NvbmVPdXRlckFuZ2xlOworICAgICAgICB9LAorICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBvdXRlciBhbmdsZSBmb3IgdGhlIGRpcmVj
dGlvbmFsIGNvbmUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgaWYgKHZhbHVlICE9IHRoaXMuX2NvbmVPdXRlckFuZ2xlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlIDwgdGhpcy5fY29uZUlubmVyQW5nbGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkxv
Z2dlciJdLkVycm9yKCJkaXJlY3Rpb25hbENvbmVPdXRlckFuZ2xlOiBvdXRlciBhbmdsZSBvZiB0
aGUgY29uZSBtdXN0IGJlIHN1cGVyaW9yIG9yIGVxdWFsIHRvIHRoZSBpbm5lciBhbmdsZS4iKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB0aGlzLl9jb25lT3V0ZXJBbmdsZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIGlm
IChfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0u
YXVkaW9FbmdpbmUuY2FuVXNlV2ViQXVkaW8gJiYgdGhpcy5zcGF0aWFsU291bmQgJiYgdGhpcy5f
c291bmRQYW5uZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fc291bmRQYW5uZXIuY29u
ZU91dGVyQW5nbGUgPSB0aGlzLl9jb25lT3V0ZXJBbmdsZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IHBvc2l0aW9uIG9mIHRoZSBlbWl0dGVyIGlmIHNwYXRpYWwgc291bmQgaXMgZW5hYmxlZAorICAg
ICAqIEBwYXJhbSBuZXdQb3NpdGlvbiBEZWZpbmVzIHRoZSBuZXcgcG9zaXNpdG9uCisgICAgICov
CisgICAgU291bmQucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKG5ld1Bvc2l0aW9u
KSB7CisgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3UG9zaXRpb247CisgICAgICAgIGlmIChf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVk
aW9FbmdpbmUuY2FuVXNlV2ViQXVkaW8gJiYgdGhpcy5zcGF0aWFsU291bmQgJiYgdGhpcy5fc291
bmRQYW5uZXIgJiYgIWlzTmFOKHRoaXMuX3Bvc2l0aW9uLngpICYmICFpc05hTih0aGlzLl9wb3Np
dGlvbi55KSAmJiAhaXNOYU4odGhpcy5fcG9zaXRpb24ueikpIHsKKyAgICAgICAgICAgIHRoaXMu
X3NvdW5kUGFubmVyLnNldFBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uLngsIHRoaXMuX3Bvc2l0aW9u
LnksIHRoaXMuX3Bvc2l0aW9uLnopOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSBsb2NhbCBkaXJlY3Rpb24gb2YgdGhlIGVtaXR0ZXIgaWYgc3BhdGlhbCBzb3Vu
ZCBpcyBlbmFibGVkCisgICAgICogQHBhcmFtIG5ld0xvY2FsRGlyZWN0aW9uIERlZmluZXMgdGhl
IG5ldyBsb2NhbCBkaXJlY3Rpb24KKyAgICAgKi8KKyAgICBTb3VuZC5wcm90b3R5cGUuc2V0TG9j
YWxEaXJlY3Rpb25Ub01lc2ggPSBmdW5jdGlvbiAobmV3TG9jYWxEaXJlY3Rpb24pIHsKKyAgICAg
ICAgdGhpcy5fbG9jYWxEaXJlY3Rpb24gPSBuZXdMb2NhbERpcmVjdGlvbjsKKyAgICAgICAgaWYg
KF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5h
dWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiB0aGlzLl9jb25uZWN0ZWRUcmFuc2Zvcm1Ob2Rl
ICYmIHRoaXMuaXNQbGF5aW5nKSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVEaXJlY3Rpb24o
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgU291bmQucHJvdG90eXBlLl91cGRhdGVEaXJlY3Rp
b24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fY29ubmVjdGVkVHJhbnNmb3Jt
Tm9kZSB8fCAhdGhpcy5fc291bmRQYW5uZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgbWF0ID0gdGhpcy5fY29ubmVjdGVkVHJhbnNmb3JtTm9kZS5nZXRX
b3JsZE1hdHJpeCgpOworICAgICAgICB2YXIgZGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwo
dGhpcy5fbG9jYWxEaXJlY3Rpb24sIG1hdCk7CisgICAgICAgIGRpcmVjdGlvbi5ub3JtYWxpemUo
KTsKKyAgICAgICAgdGhpcy5fc291bmRQYW5uZXIuc2V0T3JpZW50YXRpb24oZGlyZWN0aW9uLngs
IGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueik7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIFNvdW5kLnByb3RvdHlwZS51cGRhdGVEaXN0YW5jZUZyb21MaXN0ZW5lciA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiB0aGlzLl9jb25u
ZWN0ZWRUcmFuc2Zvcm1Ob2RlICYmIHRoaXMudXNlQ3VzdG9tQXR0ZW51YXRpb24gJiYgdGhpcy5f
c291bmRHYWluICYmIHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgdmFy
IGRpc3RhbmNlID0gdGhpcy5fY29ubmVjdGVkVHJhbnNmb3JtTm9kZS5nZXREaXN0YW5jZVRvQ2Ft
ZXJhKHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSk7CisgICAgICAgICAgICB0aGlzLl9zb3VuZEdh
aW4uZ2Fpbi52YWx1ZSA9IHRoaXMuX2N1c3RvbUF0dGVudWF0aW9uRnVuY3Rpb24odGhpcy5fdm9s
dW1lLCBkaXN0YW5jZSwgdGhpcy5tYXhEaXN0YW5jZSwgdGhpcy5yZWZEaXN0YW5jZSwgdGhpcy5y
b2xsb2ZmRmFjdG9yKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBh
IG5ldyBjdXN0b20gYXR0ZW51YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBzb3VuZC4KKyAgICAgKiBA
cGFyYW0gY2FsbGJhY2sgRGVmaW5lcyB0aGUgZnVuY3Rpb24gdXNlZCBmb3IgdGhlIGF0dGVudWF0
aW9uCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BsYXlpbmdf
c291bmRzX2FuZF9tdXNpYyNjcmVhdGluZy15b3VyLW93bi1jdXN0b20tYXR0ZW51YXRpb24tZnVu
Y3Rpb24KKyAgICAgKi8KKyAgICBTb3VuZC5wcm90b3R5cGUuc2V0QXR0ZW51YXRpb25GdW5jdGlv
biA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9jdXN0b21BdHRlbnVhdGlv
bkZ1bmN0aW9uID0gY2FsbGJhY2s7CisgICAgfTsKKyAgICAvKioKKyAgICAqIFBsYXkgdGhlIHNv
dW5kCisgICAgKiBAcGFyYW0gdGltZSAob3B0aW9uYWwpIFN0YXJ0IHRoZSBzb3VuZCBhZnRlciBY
IHNlY29uZHMuIFN0YXJ0IGltbWVkaWF0ZWx5ICgwKSBieSBkZWZhdWx0LgorICAgICogQHBhcmFt
IG9mZnNldCAob3B0aW9uYWwpIFN0YXJ0IHRoZSBzb3VuZCBhdCBhIHNwZWNpZmljIHRpbWUgaW4g
c2Vjb25kcworICAgICogQHBhcmFtIGxlbmd0aCAob3B0aW9uYWwpIFNvdW5kIGR1cmF0aW9uIChp
biBzZWNvbmRzKQorICAgICovCisgICAgU291bmQucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAo
dGltZSwgb2Zmc2V0LCBsZW5ndGgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgaWYgKHRoaXMuX2lzUmVhZHlUb1BsYXkgJiYgdGhpcy5fc2NlbmUuYXVkaW9FbmFibGVkICYm
IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5h
dWRpb0VuZ2luZS5hdWRpb0NvbnRleHQpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX3N0YXJ0T2Zmc2V0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICB0
aW1lID0gLXRoaXMuX3N0YXJ0T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFy
dE9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBzdGFy
dFRpbWUgPSB0aW1lID8gX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZSArIHRpbWUg
OiBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0u
YXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0LmN1cnJlbnRUaW1lOworICAgICAgICAgICAgICAgIGlm
ICghdGhpcy5fc291bmRTb3VyY2UgfHwgIXRoaXMuX3N0cmVhbWluZ1NvdXJjZSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpcy5zcGF0aWFsU291bmQgJiYgdGhpcy5fc291bmRQYW5uZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4odGhpcy5fcG9zaXRpb24ueCkg
JiYgIWlzTmFOKHRoaXMuX3Bvc2l0aW9uLnkpICYmICFpc05hTih0aGlzLl9wb3NpdGlvbi56KSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kUGFubmVyLnNldFBvc2l0
aW9uKHRoaXMuX3Bvc2l0aW9uLngsIHRoaXMuX3Bvc2l0aW9uLnksIHRoaXMuX3Bvc2l0aW9uLnop
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMuX2lzRGlyZWN0aW9uYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9zb3VuZFBhbm5lci5jb25lSW5uZXJBbmdsZSA9IHRoaXMuX2NvbmVJbm5lckFuZ2xlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kUGFubmVyLmNvbmVPdXRlckFuZ2xl
ID0gdGhpcy5fY29uZU91dGVyQW5nbGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5fc291bmRQYW5uZXIuY29uZU91dGVyR2FpbiA9IHRoaXMuX2NvbmVPdXRlckdhaW47CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Nvbm5lY3RlZFRyYW5zZm9ybU5vZGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRGlyZWN0aW9u
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3Vu
ZFBhbm5lci5zZXRPcmllbnRhdGlvbih0aGlzLl9sb2NhbERpcmVjdGlvbi54LCB0aGlzLl9sb2Nh
bERpcmVjdGlvbi55LCB0aGlzLl9sb2NhbERpcmVjdGlvbi56KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0cmVh
bWluZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3N0cmVhbWluZ1NvdXJjZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyZWFtaW5nU291cmNlID0gX0VuZ2lu
ZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1ZGlvRW5n
aW5lLmF1ZGlvQ29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodGhpcy5faHRtbEF1ZGlv
RWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9odG1sQXVkaW9FbGVtZW50
Lm9uZW5kZWQgPSBmdW5jdGlvbiAoKSB7IF90aGlzLl9vbmVuZGVkKCk7IH07CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9odG1sQXVkaW9FbGVtZW50LnBsYXliYWNrUmF0ZSA9IHRoaXMu
X3BsYXliYWNrUmF0ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9zdHJlYW1pbmdTb3VyY2UuZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9zdHJlYW1pbmdTb3VyY2UuY29ubmVjdCh0aGlzLl9pbnB1dEF1ZGlvTm9kZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9odG1sQXVkaW9FbGVtZW50KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyByZXF1aXJlZCB0byBtYW5hZ2UgcHJvcGVybHkgdGhlIG5ldyBz
dXNwZW5kZWQgZGVmYXVsdCBzdGF0ZSBvZiBDaHJvbWUKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdoZW4gdGhlIG9wdGlvbiAnc3RyZWFtaW5nOiB0cnVlJyBpcyB1c2VkLCB3ZSBuZWVkIGZp
cnN0IHRvIHdhaXQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYXVkaW8gZW5n
aW5lIHRvIGJlIHVubG9ja2VkIGJ5IGEgdXNlciBnZXN0dXJlIGJlZm9yZSB0cnlpbmcgdG8gcGxh
eQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW4gSFRNTCBBdWRpbyBlbGVtZW10CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgdHJ5VG9QbGF5ID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUudW5sb2NrZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXlQcm9taXNlID0gX3RoaXMuX2h0bWxBdWRp
b0VsZW1lbnQucGxheSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBi
cm93c2VycyB0aGF0IGRvbuKAmXQgeWV0IHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwbGF5UHJvbWlzZSB3b27igJl0IGJlIGRl
ZmluZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGF5UHJvbWlzZSAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5
UHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBdXRvbWF0aWMgcGxheWJhY2sgZmFpbGVkLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhaXRpbmcgZm9yIHRoZSBhdWRpbyBl
bmdpbmUgdG8gYmUgdW5sb2NrZWQgYnkgdXNlciBjbGljayBvbiB1bm11dGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUubG9jaygpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5sb29wIHx8IF90aGlzLmF1
dG9wbGF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRp
b0VuZ2luZS5vbkF1ZGlvVW5sb2NrZWRPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkgeyB0
cnlUb1BsYXkoKTsgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChfdGhpcy5sb29wIHx8IF90aGlzLmF1dG9wbGF5KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUub25BdWRpb1VubG9ja2VkT2JzZXJ2YWJs
ZS5hZGRPbmNlKGZ1bmN0aW9uICgpIHsgdHJ5VG9QbGF5KCk7IH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVRvUGxheSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgdHJ5VG9QbGF5ID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5hdWRpb0NvbnRleHQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW5ndGggfHwgX3RoaXMu
X2xlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwg
X3RoaXMuX29mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc291bmRT
b3VyY2UgPSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5n
aW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9Db250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zb3VuZFNvdXJjZS5idWZmZXIgPSBfdGhp
cy5fYXVkaW9CdWZmZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NvdW5k
U291cmNlLmNvbm5lY3QoX3RoaXMuX2lucHV0QXVkaW9Ob2RlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5fc291bmRTb3VyY2UubG9vcCA9IF90aGlzLmxvb3A7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zb3VuZFNvdXJjZS5sb29wU3RhcnQgPSBv
ZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChsZW5ndGggIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5fc291bmRTb3VyY2UubG9vcEVuZCA9IChvZmZzZXQgfCAwKSAr
IGxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX3RoaXMuX3NvdW5kU291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IF90aGlz
Ll9wbGF5YmFja1JhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NvdW5k
U291cmNlLm9uZW5kZWQgPSBmdW5jdGlvbiAoKSB7IF90aGlzLl9vbmVuZGVkKCk7IH07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lID0gdGltZSA/IF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5hdWRp
b0NvbnRleHQuY3VycmVudFRpbWUgKyB0aW1lIDogX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5jdXJy
ZW50VGltZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0dWFsT2Zmc2V0ID0g
X3RoaXMuaXNQYXVzZWQgPyBfdGhpcy5fc3RhcnRPZmZzZXQgJSBfdGhpcy5fc291bmRTb3VyY2Uu
YnVmZmVyLmR1cmF0aW9uIDogb2Zmc2V0ID8gb2Zmc2V0IDogMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5fc291bmRTb3VyY2Uuc3RhcnQoc3RhcnRUaW1lLCBhY3R1YWxPZmZz
ZXQsIF90aGlzLmxvb3AgPyB1bmRlZmluZWQgOiBsZW5ndGgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBpZiAo
X0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1
ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5zdGF0ZSA9PT0gInN1c3BlbmRlZCIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdhaXQgYSBiaXQgZm9yIEZGIGFzIGNvbnRleHQgc2VlbXMgbGF0
ZSB0byBiZSByZWFkeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9D
b250ZXh0LnN0YXRlID09PSAic3VzcGVuZGVkIikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBdXRvbWF0aWMgcGxheWJhY2sgZmFpbGVkLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBXYWl0aW5nIGZvciB0aGUgYXVkaW8gZW5naW5lIHRvIGJlIHVubG9j
a2VkIGJ5IHVzZXIgY2xpY2sgb24gdW5tdXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUi
XS5hdWRpb0VuZ2luZS5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChfdGhpcy5sb29wIHx8IF90aGlzLmF1dG9wbGF5KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siRW5naW5lIl0uYXVkaW9FbmdpbmUub25BdWRpb1VubG9ja2VkT2JzZXJ2YWJsZS5hZGRPbmNl
KGZ1bmN0aW9uICgpIHsgdHJ5VG9QbGF5KCk7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlU
b1BsYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9LCA1MDApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5VG9QbGF5KCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5f
c3RhcnRUaW1lID0gc3RhcnRUaW1lOworICAgICAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTG9nZ2VyIl0uRXJyb3IoIkVycm9yIHdo
aWxlIHRyeWluZyB0byBwbGF5IGF1ZGlvOiAiICsgdGhpcy5uYW1lICsgIiwgIiArIGV4Lm1lc3Nh
Z2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBTb3VuZC5wcm90b3R5
cGUuX29uZW5kZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFs
c2U7CisgICAgICAgIGlmICh0aGlzLm9uZW5kZWQpIHsKKyAgICAgICAgICAgIHRoaXMub25lbmRl
ZCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMub25FbmRlZE9ic2VydmFibGUubm90aWZ5T2Jz
ZXJ2ZXJzKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgKiBTdG9wIHRoZSBzb3VuZAorICAg
ICogQHBhcmFtIHRpbWUgKG9wdGlvbmFsKSBTdG9wIHRoZSBzb3VuZCBhZnRlciBYIHNlY29uZHMu
IFN0b3AgaW1tZWRpYXRlbHkgKDApIGJ5IGRlZmF1bHQuCisgICAgKi8KKyAgICBTb3VuZC5wcm90
b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3N0
cmVhbWluZykgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9odG1sQXVkaW9FbGVtZW50KSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2h0bWxBdWRpb0VsZW1lbnQucGF1c2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGVzdCBuZWVkZWQgZm9yIEZpcmVmb3ggb3IgaXQgd2lsbCBn
ZW5lcmF0ZSBhbiBJbnZhbGlkIFN0YXRlIEVycm9yCisgICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9odG1sQXVkaW9FbGVtZW50LmN1cnJlbnRUaW1lID4gMCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5faHRtbEF1ZGlvRWxlbWVudC5jdXJyZW50VGltZSA9IDA7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmVhbWluZ1NvdXJjZS5kaXNjb25uZWN0KCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVkaW9FbmdpbmUuYXVkaW9D
b250ZXh0ICYmIHRoaXMuX3NvdW5kU291cmNlKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0b3BU
aW1lID0gdGltZSA/IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5hdWRpb0NvbnRleHQuY3VycmVudFRpbWUgKyB0aW1lIDog
X0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1
ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9zb3VuZFNvdXJjZS5zdG9wKHN0b3BUaW1lKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zb3Vu
ZFNvdXJjZS5vbmVuZGVkID0gZnVuY3Rpb24gKCkgeyBfdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTsg
fTsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNQYXVzZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUHV0IHRoZSBzb3VuZCBp
biBwYXVzZQorICAgICAqLworICAgIFNvdW5kLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKSB7CisgICAgICAgICAgICB0aGlzLmlzUGF1
c2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zdHJlYW1pbmcpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodGhpcy5faHRtbEF1ZGlvRWxlbWVudCkgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9odG1sQXVkaW9FbGVtZW50LnBhdXNlKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW1pbmdT
b3VyY2UuZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5hdWRpb0NvbnRleHQpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLnN0b3AoMCk7CisgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgKz0g
X0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1
ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZSAtIHRoaXMuX3N0YXJ0VGltZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIGRl
ZGljYXRlZCB2b2x1bWUgZm9yIHRoaXMgc291bmRzCisgICAgICogQHBhcmFtIG5ld1ZvbHVtZSBE
ZWZpbmUgdGhlIG5ldyB2b2x1bWUgb2YgdGhlIHNvdW5kCisgICAgICogQHBhcmFtIHRpbWUgRGVm
aW5lIHRpbWUgZm9yIGdyYWR1YWwgY2hhbmdlIHRvIG5ldyB2b2x1bWUKKyAgICAgKi8KKyAgICBT
b3VuZC5wcm90b3R5cGUuc2V0Vm9sdW1lID0gZnVuY3Rpb24gKG5ld1ZvbHVtZSwgdGltZSkgewor
ICAgICAgICBpZiAoX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkVuZ2luZSJdLmF1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvICYmIHRoaXMuX3NvdW5kR2Fpbikg
eworICAgICAgICAgICAgaWYgKHRpbWUgJiYgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dCkgeworICAg
ICAgICAgICAgICAgIHRoaXMuX3NvdW5kR2Fpbi5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVk
aW9FbmdpbmUuYXVkaW9Db250ZXh0LmN1cnJlbnRUaW1lKTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9zb3VuZEdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSh0aGlzLl9zb3VuZEdhaW4uZ2Fpbi52YWx1
ZSwgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJd
LmF1ZGlvRW5naW5lLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZSk7CisgICAgICAgICAgICAgICAg
dGhpcy5fc291bmRHYWluLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobmV3Vm9sdW1lLCBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uYXVk
aW9FbmdpbmUuYXVkaW9Db250ZXh0LmN1cnJlbnRUaW1lICsgdGltZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zb3VuZEdhaW4uZ2Fp
bi52YWx1ZSA9IG5ld1ZvbHVtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0
aGlzLl92b2x1bWUgPSBuZXdWb2x1bWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhl
IHNvdW5kIHBsYXkgYmFjayByYXRlCisgICAgICogQHBhcmFtIG5ld1BsYXliYWNrUmF0ZSBEZWZp
bmUgdGhlIHBsYXliYWNrIHJhdGUgdGhlIHNvdW5kIHNob3VsZCBiZSBwbGF5ZWQgYXQKKyAgICAg
Ki8KKyAgICBTb3VuZC5wcm90b3R5cGUuc2V0UGxheWJhY2tSYXRlID0gZnVuY3Rpb24gKG5ld1Bs
YXliYWNrUmF0ZSkgeworICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBuZXdQbGF5YmFja1Jh
dGU7CisgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykgeworICAgICAgICAgICAgaWYgKHRoaXMu
X3N0cmVhbWluZyAmJiB0aGlzLl9odG1sQXVkaW9FbGVtZW50KSB7CisgICAgICAgICAgICAgICAg
dGhpcy5faHRtbEF1ZGlvRWxlbWVudC5wbGF5YmFja1JhdGUgPSB0aGlzLl9wbGF5YmFja1JhdGU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9zb3VuZFNvdXJjZSkg
eworICAgICAgICAgICAgICAgIHRoaXMuX3NvdW5kU291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9
IHRoaXMuX3BsYXliYWNrUmF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgdm9sdW1lIG9mIHRoZSBzb3VuZC4KKyAgICAgKiBAcmV0
dXJucyB0aGUgdm9sdW1lIG9mIHRoZSBzb3VuZAorICAgICAqLworICAgIFNvdW5kLnByb3RvdHlw
ZS5nZXRWb2x1bWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWU7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIHNvdW5kIHRvIGEgZGVkaWNhdGVk
IG1lc2gKKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtTm9kZSBUaGUgdHJhbnNmb3JtIG5vZGUgdG8g
Y29ubmVjdCB0aGUgc291bmQgd2l0aAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9wbGF5aW5nX3NvdW5kc19hbmRfbXVzaWMjYXR0YWNoaW5nLWEtc291bmQtdG8t
YS1tZXNoCisgICAgICovCisgICAgU291bmQucHJvdG90eXBlLmF0dGFjaFRvTWVzaCA9IGZ1bmN0
aW9uICh0cmFuc2Zvcm1Ob2RlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAg
IGlmICh0aGlzLl9jb25uZWN0ZWRUcmFuc2Zvcm1Ob2RlICYmIHRoaXMuX3JlZ2lzdGVyRnVuYykg
eworICAgICAgICAgICAgdGhpcy5fY29ubmVjdGVkVHJhbnNmb3JtTm9kZS51bnJlZ2lzdGVyQWZ0
ZXJXb3JsZE1hdHJpeFVwZGF0ZSh0aGlzLl9yZWdpc3RlckZ1bmMpOworICAgICAgICAgICAgdGhp
cy5fcmVnaXN0ZXJGdW5jID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb25uZWN0
ZWRUcmFuc2Zvcm1Ob2RlID0gdHJhbnNmb3JtTm9kZTsKKyAgICAgICAgaWYgKCF0aGlzLnNwYXRp
YWxTb3VuZCkgeworICAgICAgICAgICAgdGhpcy5zcGF0aWFsU291bmQgPSB0cnVlOworICAgICAg
ICAgICAgdGhpcy5fY3JlYXRlU3BhdGlhbFBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIGlmICh0
aGlzLmlzUGxheWluZyAmJiB0aGlzLmxvb3ApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnN0b3Ao
KTsKKyAgICAgICAgICAgICAgICB0aGlzLnBsYXkoMCwgdGhpcy5fb2Zmc2V0LCB0aGlzLl9sZW5n
dGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX29uUmVnaXN0ZXJB
ZnRlcldvcmxkTWF0cml4VXBkYXRlKHRoaXMuX2Nvbm5lY3RlZFRyYW5zZm9ybU5vZGUpOworICAg
ICAgICB0aGlzLl9yZWdpc3RlckZ1bmMgPSBmdW5jdGlvbiAodHJhbnNmb3JtTm9kZSkgeyByZXR1
cm4gX3RoaXMuX29uUmVnaXN0ZXJBZnRlcldvcmxkTWF0cml4VXBkYXRlKHRyYW5zZm9ybU5vZGUp
OyB9OworICAgICAgICB0aGlzLl9jb25uZWN0ZWRUcmFuc2Zvcm1Ob2RlLnJlZ2lzdGVyQWZ0ZXJX
b3JsZE1hdHJpeFVwZGF0ZSh0aGlzLl9yZWdpc3RlckZ1bmMpOworICAgIH07CisgICAgLyoqCisg
ICAgICogRGV0YWNoIHRoZSBzb3VuZCBmcm9tIHRoZSBwcmV2aW91c2x5IGF0dGFjaGVkIG1lc2gK
KyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19zb3Vu
ZHNfYW5kX211c2ljI2F0dGFjaGluZy1hLXNvdW5kLXRvLWEtbWVzaAorICAgICAqLworICAgIFNv
dW5kLnByb3RvdHlwZS5kZXRhY2hGcm9tTWVzaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMuX2Nvbm5lY3RlZFRyYW5zZm9ybU5vZGUgJiYgdGhpcy5fcmVnaXN0ZXJGdW5jKSB7Cisg
ICAgICAgICAgICB0aGlzLl9jb25uZWN0ZWRUcmFuc2Zvcm1Ob2RlLnVucmVnaXN0ZXJBZnRlcldv
cmxkTWF0cml4VXBkYXRlKHRoaXMuX3JlZ2lzdGVyRnVuYyk7CisgICAgICAgICAgICB0aGlzLl9y
ZWdpc3RlckZ1bmMgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fY29ubmVjdGVkVHJhbnNmb3Jt
Tm9kZSA9IG51bGw7CisgICAgICAgIH0KKyAgICB9OworICAgIFNvdW5kLnByb3RvdHlwZS5fb25S
ZWdpc3RlckFmdGVyV29ybGRNYXRyaXhVcGRhdGUgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAg
ICBpZiAoIW5vZGUuZ2V0Qm91bmRpbmdJbmZvKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIG1lc2ggPSBub2RlOworICAgICAgICBpZiAodGhpcy5fcG9zaXRp
b25JbkVtaXR0ZXJTcGFjZSkgeworICAgICAgICAgICAgbWVzaC53b3JsZE1hdHJpeEZyb21DYWNo
ZS5pbnZlcnRUb1JlZihfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXSk7CisgICAgICAgICAgICB0aGlzLnNldFBvc2l0
aW9uKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUbXBW
ZWN0b3JzIl0uTWF0cml4WzBdLmdldFRyYW5zbGF0aW9uKCkpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9IG1lc2guZ2V0Qm91bmRpbmdJ
bmZvKCk7CisgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uKGJvdW5kaW5nSW5mby5ib3VuZGlu
Z1NwaGVyZS5jZW50ZXJXb3JsZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9FbmdpbmVzX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5j
YW5Vc2VXZWJBdWRpbyAmJiB0aGlzLl9pc0RpcmVjdGlvbmFsICYmIHRoaXMuaXNQbGF5aW5nKSB7
CisgICAgICAgICAgICB0aGlzLl91cGRhdGVEaXJlY3Rpb24oKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogQ2xvbmUgdGhlIGN1cnJlbnQgc291bmQgaW4gdGhlIHNjZW5lLgor
ICAgICAqIEByZXR1cm5zIHRoZSBuZXcgc291bmQgY2xvbmUKKyAgICAgKi8KKyAgICBTb3VuZC5w
cm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGlmICghdGhpcy5fc3RyZWFtaW5nKSB7CisgICAgICAgICAgICB2YXIgc2V0QnVm
ZmVyQW5kUnVuID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5faXNS
ZWFkeVRvUGxheSkgeworICAgICAgICAgICAgICAgICAgICBjbG9uZWRTb3VuZC5fYXVkaW9CdWZm
ZXIgPSBfdGhpcy5nZXRBdWRpb0J1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBjbG9uZWRT
b3VuZC5faXNSZWFkeVRvUGxheSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChjbG9u
ZWRTb3VuZC5hdXRvcGxheSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVkU291bmQu
cGxheSgwLCBfdGhpcy5fb2Zmc2V0LCBfdGhpcy5fbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoc2V0QnVmZmVyQW5kUnVuLCAzMDApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB2YXIgY3VycmVudE9w
dGlvbnMgPSB7CisgICAgICAgICAgICAgICAgYXV0b3BsYXk6IHRoaXMuYXV0b3BsYXksIGxvb3A6
IHRoaXMubG9vcCwKKyAgICAgICAgICAgICAgICB2b2x1bWU6IHRoaXMuX3ZvbHVtZSwgc3BhdGlh
bFNvdW5kOiB0aGlzLnNwYXRpYWxTb3VuZCwgbWF4RGlzdGFuY2U6IHRoaXMubWF4RGlzdGFuY2Us
CisgICAgICAgICAgICAgICAgdXNlQ3VzdG9tQXR0ZW51YXRpb246IHRoaXMudXNlQ3VzdG9tQXR0
ZW51YXRpb24sIHJvbGxvZmZGYWN0b3I6IHRoaXMucm9sbG9mZkZhY3RvciwKKyAgICAgICAgICAg
ICAgICByZWZEaXN0YW5jZTogdGhpcy5yZWZEaXN0YW5jZSwgZGlzdGFuY2VNb2RlbDogdGhpcy5k
aXN0YW5jZU1vZGVsCisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIGNsb25lZFNvdW5k
ID0gbmV3IFNvdW5kKHRoaXMubmFtZSArICJfY2xvbmVkIiwgbmV3IEFycmF5QnVmZmVyKDApLCB0
aGlzLl9zY2VuZSwgbnVsbCwgY3VycmVudE9wdGlvbnMpOworICAgICAgICAgICAgaWYgKHRoaXMu
dXNlQ3VzdG9tQXR0ZW51YXRpb24pIHsKKyAgICAgICAgICAgICAgICBjbG9uZWRTb3VuZC5zZXRB
dHRlbnVhdGlvbkZ1bmN0aW9uKHRoaXMuX2N1c3RvbUF0dGVudWF0aW9uRnVuY3Rpb24pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2xvbmVkU291bmQuc2V0UG9zaXRpb24odGhpcy5fcG9z
aXRpb24pOworICAgICAgICAgICAgY2xvbmVkU291bmQuc2V0UGxheWJhY2tSYXRlKHRoaXMuX3Bs
YXliYWNrUmF0ZSk7CisgICAgICAgICAgICBzZXRCdWZmZXJBbmRSdW4oKTsKKyAgICAgICAgICAg
IHJldHVybiBjbG9uZWRTb3VuZDsKKyAgICAgICAgfQorICAgICAgICAvLyBDYW4ndCBjbG9uZSBh
IHN0cmVhbWluZyBzb3VuZAorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHVu
ZGVybHlpbmcgYXVkaW8gYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEKKyAgICAgKiBAcmV0dXJu
cyB0aGUgYXVkaW8gYnVmZmVyCisgICAgICovCisgICAgU291bmQucHJvdG90eXBlLmdldEF1ZGlv
QnVmZmVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXI7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBTb3VuZCBpbiBhIEpTT04g
cmVwcmVzZW50YXRpb24KKyAgICAgKiBAcmV0dXJucyB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBv
ZiB0aGUgc291bmQKKyAgICAgKi8KKyAgICBTb3VuZC5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IHsKKyAgICAgICAg
ICAgIG5hbWU6IHRoaXMubmFtZSwKKyAgICAgICAgICAgIHVybDogdGhpcy5uYW1lLAorICAgICAg
ICAgICAgYXV0b3BsYXk6IHRoaXMuYXV0b3BsYXksCisgICAgICAgICAgICBsb29wOiB0aGlzLmxv
b3AsCisgICAgICAgICAgICB2b2x1bWU6IHRoaXMuX3ZvbHVtZSwKKyAgICAgICAgICAgIHNwYXRp
YWxTb3VuZDogdGhpcy5zcGF0aWFsU291bmQsCisgICAgICAgICAgICBtYXhEaXN0YW5jZTogdGhp
cy5tYXhEaXN0YW5jZSwKKyAgICAgICAgICAgIHJvbGxvZmZGYWN0b3I6IHRoaXMucm9sbG9mZkZh
Y3RvciwKKyAgICAgICAgICAgIHJlZkRpc3RhbmNlOiB0aGlzLnJlZkRpc3RhbmNlLAorICAgICAg
ICAgICAgZGlzdGFuY2VNb2RlbDogdGhpcy5kaXN0YW5jZU1vZGVsLAorICAgICAgICAgICAgcGxh
eWJhY2tSYXRlOiB0aGlzLl9wbGF5YmFja1JhdGUsCisgICAgICAgICAgICBwYW5uaW5nTW9kZWw6
IHRoaXMuX3Bhbm5pbmdNb2RlbCwKKyAgICAgICAgICAgIHNvdW5kVHJhY2tJZDogdGhpcy5zb3Vu
ZFRyYWNrSWQKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKHRoaXMuc3BhdGlhbFNvdW5kKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fY29ubmVjdGVkVHJhbnNmb3JtTm9kZSkgeworICAgICAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29ubmVjdGVkTWVzaElkID0gdGhpcy5fY29ubmVj
dGVkVHJhbnNmb3JtTm9kZS5pZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QucG9zaXRpb24gPSB0aGlzLl9wb3NpdGlvbi5hc0FycmF5KCk7CisgICAgICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJlZkRpc3RhbmNlID0gdGhpcy5yZWZEaXN0YW5jZTsK
KyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZGlzdGFuY2VNb2RlbCA9IHRoaXMuZGlz
dGFuY2VNb2RlbDsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaXNEaXJlY3Rpb25h
bCA9IHRoaXMuX2lzRGlyZWN0aW9uYWw7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
LmxvY2FsRGlyZWN0aW9uVG9NZXNoID0gdGhpcy5fbG9jYWxEaXJlY3Rpb24uYXNBcnJheSgpOwor
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jb25lSW5uZXJBbmdsZSA9IHRoaXMuX2Nv
bmVJbm5lckFuZ2xlOworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jb25lT3V0ZXJB
bmdsZSA9IHRoaXMuX2NvbmVPdXRlckFuZ2xlOworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5jb25lT3V0ZXJHYWluID0gdGhpcy5fY29uZU91dGVyR2FpbjsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFBhcnNlIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIHNvdW5kIHRvIGlubnN0YW50aWF0ZSBp
biBhIGdpdmVuIHNjZW5lCisgICAgICogQHBhcmFtIHBhcnNlZFNvdW5kIERlZmluZSB0aGUgSlNP
TiByZXByZXNlbnRhdGlvbiBvZiB0aGUgc291bmQgKHVzdWFsbHkgY29taW5nIGZyb20gdGhlIHNl
cmlhbGl6ZSBtZXRob2QpCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhl
IG5ldyBwYXJzZWQgc291bmQgc2hvdWxkIGJlIGNyZWF0ZWQgaW4KKyAgICAgKiBAcGFyYW0gcm9v
dFVybCBEZWZpbmUgdGhlIHJvb3R1cmwgb2YgdGhlIGxvYWQgaW4gY2FzZSB3ZSBuZWVkIHRvIGZl
dGNoIHJlbGF0aXZlIGRlcGVuZGVuY2llcworICAgICAqIEBwYXJhbSBzb3VyY2VTb3VuZCBEZWZp
bmUgYSBjb3VuZCBwbGFjZSBob2xkZXIgaWYgZG8gbm90IG5lZWQgdG8gaW5zdGFudGlhdGUgYSBu
ZXcgb25lCisgICAgICogQHJldHVybnMgdGhlIG5ld2x5IHBhcnNlZCBzb3VuZAorICAgICAqLwor
ICAgIFNvdW5kLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZFNvdW5kLCBzY2VuZSwgcm9vdFVybCwg
c291cmNlU291bmQpIHsKKyAgICAgICAgdmFyIHNvdW5kTmFtZSA9IHBhcnNlZFNvdW5kLm5hbWU7
CisgICAgICAgIHZhciBzb3VuZFVybDsKKyAgICAgICAgaWYgKHBhcnNlZFNvdW5kLnVybCkgewor
ICAgICAgICAgICAgc291bmRVcmwgPSByb290VXJsICsgcGFyc2VkU291bmQudXJsOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc291bmRVcmwgPSByb290VXJsICsgc291
bmROYW1lOworICAgICAgICB9CisgICAgICAgIHZhciBvcHRpb25zID0geworICAgICAgICAgICAg
YXV0b3BsYXk6IHBhcnNlZFNvdW5kLmF1dG9wbGF5LCBsb29wOiBwYXJzZWRTb3VuZC5sb29wLCB2
b2x1bWU6IHBhcnNlZFNvdW5kLnZvbHVtZSwKKyAgICAgICAgICAgIHNwYXRpYWxTb3VuZDogcGFy
c2VkU291bmQuc3BhdGlhbFNvdW5kLCBtYXhEaXN0YW5jZTogcGFyc2VkU291bmQubWF4RGlzdGFu
Y2UsCisgICAgICAgICAgICByb2xsb2ZmRmFjdG9yOiBwYXJzZWRTb3VuZC5yb2xsb2ZmRmFjdG9y
LAorICAgICAgICAgICAgcmVmRGlzdGFuY2U6IHBhcnNlZFNvdW5kLnJlZkRpc3RhbmNlLAorICAg
ICAgICAgICAgZGlzdGFuY2VNb2RlbDogcGFyc2VkU291bmQuZGlzdGFuY2VNb2RlbCwKKyAgICAg
ICAgICAgIHBsYXliYWNrUmF0ZTogcGFyc2VkU291bmQucGxheWJhY2tSYXRlCisgICAgICAgIH07
CisgICAgICAgIHZhciBuZXdTb3VuZDsKKyAgICAgICAgaWYgKCFzb3VyY2VTb3VuZCkgeworICAg
ICAgICAgICAgbmV3U291bmQgPSBuZXcgU291bmQoc291bmROYW1lLCBzb3VuZFVybCwgc2NlbmUs
IGZ1bmN0aW9uICgpIHsgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKG5ld1NvdW5kKTsgfSwgb3B0
aW9ucyk7CisgICAgICAgICAgICBzY2VuZS5fYWRkUGVuZGluZ0RhdGEobmV3U291bmQpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIHNldEJ1ZmZlckFuZFJ1biA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlU291bmQuX2lzUmVhZHlU
b1BsYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3U291bmQuX2F1ZGlvQnVmZmVyID0gc291
cmNlU291bmQuZ2V0QXVkaW9CdWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3U291bmQu
X2lzUmVhZHlUb1BsYXkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAobmV3U291bmQu
YXV0b3BsYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NvdW5kLnBsYXkoMCwgbmV3
U291bmQuX29mZnNldCwgbmV3U291bmQuX2xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHNldEJ1ZmZlckFuZFJ1biwgMzAwKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgbmV3U291bmQgPSBuZXcgU291
bmQoc291bmROYW1lLCBuZXcgQXJyYXlCdWZmZXIoMCksIHNjZW5lLCBudWxsLCBvcHRpb25zKTsK
KyAgICAgICAgICAgIHNldEJ1ZmZlckFuZFJ1bigpOworICAgICAgICB9CisgICAgICAgIGlmIChw
YXJzZWRTb3VuZC5wb3NpdGlvbikgeworICAgICAgICAgICAgdmFyIHNvdW5kUG9zaXRpb24gPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJd
LkZyb21BcnJheShwYXJzZWRTb3VuZC5wb3NpdGlvbik7CisgICAgICAgICAgICBuZXdTb3VuZC5z
ZXRQb3NpdGlvbihzb3VuZFBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2Vk
U291bmQuaXNEaXJlY3Rpb25hbCkgeworICAgICAgICAgICAgbmV3U291bmQuc2V0RGlyZWN0aW9u
YWxDb25lKHBhcnNlZFNvdW5kLmNvbmVJbm5lckFuZ2xlIHx8IDM2MCwgcGFyc2VkU291bmQuY29u
ZU91dGVyQW5nbGUgfHwgMzYwLCBwYXJzZWRTb3VuZC5jb25lT3V0ZXJHYWluIHx8IDApOworICAg
ICAgICAgICAgaWYgKHBhcnNlZFNvdW5kLmxvY2FsRGlyZWN0aW9uVG9NZXNoKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGxvY2FsRGlyZWN0aW9uVG9NZXNoID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocGFyc2VkU291
bmQubG9jYWxEaXJlY3Rpb25Ub01lc2gpOworICAgICAgICAgICAgICAgIG5ld1NvdW5kLnNldExv
Y2FsRGlyZWN0aW9uVG9NZXNoKGxvY2FsRGlyZWN0aW9uVG9NZXNoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkU291bmQuY29ubmVjdGVkTWVzaElkKSB7Cisg
ICAgICAgICAgICB2YXIgY29ubmVjdGVkTWVzaCA9IHNjZW5lLmdldE1lc2hCeUlEKHBhcnNlZFNv
dW5kLmNvbm5lY3RlZE1lc2hJZCk7CisgICAgICAgICAgICBpZiAoY29ubmVjdGVkTWVzaCkgewor
ICAgICAgICAgICAgICAgIG5ld1NvdW5kLmF0dGFjaFRvTWVzaChjb25uZWN0ZWRNZXNoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3U291bmQ7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIFNvdW5kLl9TY2VuZUNvbXBvbmVudEluaXRpYWxpemF0
aW9uID0gZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiQXVkaW9TY2Vu
ZUNvbXBvbmVudCIpOworICAgIH07CisgICAgcmV0dXJuIFNvdW5kOworfSgpKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9BdWRpby9zb3VuZFRyYWNrLnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9BdWRpby9zb3VuZFRyYWNrLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IFNvdW5kVHJhY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU291bmRU
cmFjayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU291bmRUcmFjazsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVz
L2VuZ2luZS50cyIpOworCisvKioKKyAqIEl0IGNvdWxkIGJlIHVzZWZ1bCB0byBpc29sYXRlIHlv
dXIgbXVzaWMgJiBzb3VuZHMgb24gc2V2ZXJhbCB0cmFja3MgdG8gYmV0dGVyIG1hbmFnZSB2b2x1
bWUgb24gYSBncm91cGVkIGluc3RhbmNlIG9mIHNvdW5kcy4KKyAqIEl0IHdpbGwgYmUgYWxzbyB1
c2VkIGluIGEgZnV0dXJlIHJlbGVhc2UgdG8gYXBwbHkgZWZmZWN0cyBvbiBhIHNwZWNpZmljIHRy
YWNrLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BsYXlpbmdfc291
bmRzX2FuZF9tdXNpYyN1c2luZy1zb3VuZC10cmFja3MKKyAqLwordmFyIFNvdW5kVHJhY2sgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5l
dyBzb3VuZCB0cmFjay4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3df
dG8vcGxheWluZ19zb3VuZHNfYW5kX211c2ljI3VzaW5nLXNvdW5kLXRyYWNrcworICAgICAqIEBw
YXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSBzb3VuZCB0cmFjayBiZWxvbmdzIHRvCisg
ICAgICogQHBhcmFtIG9wdGlvbnMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTb3VuZFRyYWNrKHNj
ZW5lLCBvcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9u
cyA9IHt9OyB9CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIg
b2YgdGhlIHNvdW5kIHRyYWNrIGluIHRoZSBzY2VuZS4KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuaWQgPSAtMTsKKyAgICAgICAgdGhpcy5faXNNYWluVHJhY2sgPSBmYWxzZTsKKyAgICAgICAg
dGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5l
OworICAgICAgICB0aGlzLnNvdW5kQ29sbGVjdGlvbiA9IG5ldyBBcnJheSgpOworICAgICAgICB0
aGlzLl9vcHRpb25zID0gb3B0aW9uczsKKyAgICAgICAgaWYgKCF0aGlzLl9pc01haW5UcmFjayAm
JiB0aGlzLl9zY2VuZS5zb3VuZFRyYWNrcykgeworICAgICAgICAgICAgdGhpcy5fc2NlbmUuc291
bmRUcmFja3MucHVzaCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLl9zY2VuZS5z
b3VuZFRyYWNrcy5sZW5ndGggLSAxOworICAgICAgICB9CisgICAgfQorICAgIFNvdW5kVHJhY2su
cHJvdG90eXBlLl9pbml0aWFsaXplU291bmRUcmFja0F1ZGlvR3JhcGggPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmIChfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRW5naW5lIl0uYXVkaW9FbmdpbmUuY2FuVXNlV2ViQXVkaW8gJiYgX0VuZ2luZXNfZW5naW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmF1ZGlv
Q29udGV4dCkgeworICAgICAgICAgICAgdGhpcy5fb3V0cHV0QXVkaW9Ob2RlID0gX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5l
LmF1ZGlvQ29udGV4dC5jcmVhdGVHYWluKCk7CisgICAgICAgICAgICB0aGlzLl9vdXRwdXRBdWRp
b05vZGUuY29ubmVjdChfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRW5naW5lIl0uYXVkaW9FbmdpbmUubWFzdGVyR2Fpbik7CisgICAgICAgICAgICBpZiAodGhp
cy5fb3B0aW9ucykgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnZvbHVtZSkg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRBdWRpb05vZGUuZ2Fpbi52YWx1ZSA9
IHRoaXMuX29wdGlvbnMudm9sdW1lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fb3B0aW9ucy5tYWluVHJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5faXNNYWluVHJhY2sgPSB0aGlzLl9vcHRpb25zLm1haW5UcmFjazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZSB0aGUgc291bmQg
dHJhY2sgYW5kIGl0cyBhc3NvY2lhdGVkIHJlc291cmNlcworICAgICAqLworICAgIFNvdW5kVHJh
Y2sucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmIChfRW5naW5l
c19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uYXVkaW9Fbmdp
bmUgJiYgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2lu
ZSJdLmF1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvKSB7CisgICAgICAgICAgICBpZiAodGhpcy5f
Y29ubmVjdGVkQW5hbHlzZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0ZWRBbmFs
eXNlci5zdG9wRGVidWdDYW52YXMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxl
ICh0aGlzLnNvdW5kQ29sbGVjdGlvbi5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNv
dW5kQ29sbGVjdGlvblswXS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodGhpcy5fb3V0cHV0QXVkaW9Ob2RlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0
QXVkaW9Ob2RlLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X291dHB1dEF1ZGlvTm9kZSA9IG51bGw7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIEFkZHMgYSBzb3VuZCB0byB0aGlzIHNvdW5kIHRyYWNrCisgICAgICogQHBhcmFtIHNvdW5k
IGRlZmluZSB0aGUgY291bmQgdG8gYWRkCisgICAgICogQGlnbm9yZU5hbWluZworICAgICAqLwor
ICAgIFNvdW5kVHJhY2sucHJvdG90eXBlLkFkZFNvdW5kID0gZnVuY3Rpb24gKHNvdW5kKSB7Cisg
ICAgICAgIGlmICghdGhpcy5faXNJbml0aWFsaXplZCkgeworICAgICAgICAgICAgdGhpcy5faW5p
dGlhbGl6ZVNvdW5kVHJhY2tBdWRpb0dyYXBoKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5hdWRp
b0VuZ2luZS5jYW5Vc2VXZWJBdWRpbyAmJiB0aGlzLl9vdXRwdXRBdWRpb05vZGUpIHsKKyAgICAg
ICAgICAgIHNvdW5kLmNvbm5lY3RUb1NvdW5kVHJhY2tBdWRpb05vZGUodGhpcy5fb3V0cHV0QXVk
aW9Ob2RlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc291bmQuc291bmRUcmFja0lkKSB7Cisg
ICAgICAgICAgICBpZiAoc291bmQuc291bmRUcmFja0lkID09PSAtMSkgeworICAgICAgICAgICAg
ICAgIHRoaXMuX3NjZW5lLm1haW5Tb3VuZFRyYWNrLlJlbW92ZVNvdW5kKHNvdW5kKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NjZW5lLnNvdW5kVHJhY2tzKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuc291bmRUcmFja3Nbc291bmQuc291bmRUcmFj
a0lkXS5SZW1vdmVTb3VuZChzb3VuZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5zb3VuZENvbGxlY3Rpb24ucHVzaChzb3VuZCk7CisgICAgICAgIHNvdW5kLnNvdW5k
VHJhY2tJZCA9IHRoaXMuaWQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGEgc291
bmQgdG8gdGhpcyBzb3VuZCB0cmFjaworICAgICAqIEBwYXJhbSBzb3VuZCBkZWZpbmUgdGhlIGNv
dW5kIHRvIHJlbW92ZQorICAgICAqIEBpZ25vcmVOYW1pbmcKKyAgICAgKi8KKyAgICBTb3VuZFRy
YWNrLnByb3RvdHlwZS5SZW1vdmVTb3VuZCA9IGZ1bmN0aW9uIChzb3VuZCkgeworICAgICAgICB2
YXIgaW5kZXggPSB0aGlzLnNvdW5kQ29sbGVjdGlvbi5pbmRleE9mKHNvdW5kKTsKKyAgICAgICAg
aWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgdGhpcy5zb3VuZENvbGxlY3Rpb24uc3Bs
aWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0IGEg
Z2xvYmFsIHZvbHVtZSBmb3IgdGhlIGZ1bGwgc291bmQgdHJhY2suCisgICAgICogQHBhcmFtIG5l
d1ZvbHVtZSBEZWZpbmUgdGhlIG5ldyB2b2x1bWUgb2YgdGhlIHNvdW5kIHRyYWNrCisgICAgICov
CisgICAgU291bmRUcmFjay5wcm90b3R5cGUuc2V0Vm9sdW1lID0gZnVuY3Rpb24gKG5ld1ZvbHVt
ZSkgeworICAgICAgICBpZiAoX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvICYmIHRoaXMuX291dHB1
dEF1ZGlvTm9kZSkgeworICAgICAgICAgICAgdGhpcy5fb3V0cHV0QXVkaW9Ob2RlLmdhaW4udmFs
dWUgPSBuZXdWb2x1bWU7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFN3aXRj
aCB0aGUgcGFubmluZyBtb2RlbCB0byBIUlRGOgorICAgICAqIFJlbmRlcnMgYSBzdGVyZW8gb3V0
cHV0IG9mIGhpZ2hlciBxdWFsaXR5IHRoYW4gZXF1YWxwb3dlciDigJQgaXQgdXNlcyBhIGNvbnZv
bHV0aW9uIHdpdGggbWVhc3VyZWQgaW1wdWxzZSByZXNwb25zZXMgZnJvbSBodW1hbiBzdWJqZWN0
cy4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxheWluZ19z
b3VuZHNfYW5kX211c2ljI2NyZWF0aW5nLWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAqLworICAg
IFNvdW5kVHJhY2sucHJvdG90eXBlLnN3aXRjaFBhbm5pbmdNb2RlbFRvSFJURiA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbykgeworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNvdW5kQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgICAgIHRoaXMuc291bmRDb2xsZWN0aW9uW2ldLnN3aXRjaFBhbm5pbmdN
b2RlbFRvSFJURigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTd2l0Y2ggdGhlIHBhbm5pbmcgbW9kZWwgdG8gRXF1YWwgUG93ZXI6CisgICAgICog
UmVwcmVzZW50cyB0aGUgZXF1YWwtcG93ZXIgcGFubmluZyBhbGdvcml0aG0sIGdlbmVyYWxseSBy
ZWdhcmRlZCBhcyBzaW1wbGUgYW5kIGVmZmljaWVudC4gZXF1YWxwb3dlciBpcyB0aGUgZGVmYXVs
dCB2YWx1ZS4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGxh
eWluZ19zb3VuZHNfYW5kX211c2ljI2NyZWF0aW5nLWEtc3BhdGlhbC0zZC1zb3VuZAorICAgICAq
LworICAgIFNvdW5kVHJhY2sucHJvdG90eXBlLnN3aXRjaFBhbm5pbmdNb2RlbFRvRXF1YWxQb3dl
ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5hdWRpb0VuZ2luZS5jYW5Vc2VXZWJBdWRpbykg
eworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNvdW5kQ29sbGVjdGlvbi5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHRoaXMuc291bmRDb2xsZWN0aW9uW2ldLnN3
aXRjaFBhbm5pbmdNb2RlbFRvRXF1YWxQb3dlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb25uZWN0IHRoZSBzb3VuZCB0cmFjayB0byBhbiBh
dWRpbyBhbmFseXNlciBhbGxvd2luZyBzb21lIGFtYXppbmcKKyAgICAgKiBzeW5jaG9ybml6YXRp
b24gYmV0d2VlbiB0aGUgc291bmRzL211c2ljIGFuZCB5b3VyIHZpc3VhbGl6YXRpb24gKFZ1TWV0
ZXIgZm9yIGluc3RhbmNlKS4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9o
b3dfdG8vcGxheWluZ19zb3VuZHNfYW5kX211c2ljI3VzaW5nLXRoZS1hbmFseXNlcgorICAgICAq
IEBwYXJhbSBhbmFseXNlciBUaGUgYW5hbHlzZXIgdG8gY29ubmVjdCB0byB0aGUgZW5naW5lCisg
ICAgICovCisgICAgU291bmRUcmFjay5wcm90b3R5cGUuY29ubmVjdFRvQW5hbHlzZXIgPSBmdW5j
dGlvbiAoYW5hbHlzZXIpIHsKKyAgICAgICAgaWYgKHRoaXMuX2Nvbm5lY3RlZEFuYWx5c2VyKSB7
CisgICAgICAgICAgICB0aGlzLl9jb25uZWN0ZWRBbmFseXNlci5zdG9wRGVidWdDYW52YXMoKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb25uZWN0ZWRBbmFseXNlciA9IGFuYWx5c2VyOwor
ICAgICAgICBpZiAoX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkVuZ2luZSJdLmF1ZGlvRW5naW5lLmNhblVzZVdlYkF1ZGlvICYmIHRoaXMuX291dHB1dEF1ZGlv
Tm9kZSkgeworICAgICAgICAgICAgdGhpcy5fb3V0cHV0QXVkaW9Ob2RlLmRpc2Nvbm5lY3QoKTsK
KyAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RlZEFuYWx5c2VyLmNvbm5lY3RBdWRpb05vZGVzKHRo
aXMuX291dHB1dEF1ZGlvTm9kZSwgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVuZ2luZSJdLmF1ZGlvRW5naW5lLm1hc3RlckdhaW4pOworICAgICAgICB9Cisg
ICAgfTsKKyAgICByZXR1cm4gU291bmRUcmFjazsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vQXVkaW8vd2VpZ2h0ZWRzb3VuZC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vQXVkaW8vd2VpZ2h0ZWRzb3VuZC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBXZWlnaHRlZFNvdW5kICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldl
aWdodGVkU291bmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlaWdodGVkU291bmQ7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlz
Yy9sb2dnZXIudHMiKTsKKworLyoqCisgKiBXcmFwcyBvbmUgb3IgbW9yZSBTb3VuZCBvYmplY3Rz
IGFuZCBzZWxlY3RzIG9uZSB3aXRoIHJhbmRvbSB3ZWlnaHQgZm9yIHBsYXliYWNrLgorICovCit2
YXIgV2VpZ2h0ZWRTb3VuZCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgbmV3IFdlaWdodGVkU291bmQgZnJvbSB0aGUgbGlzdCBvZiBzb3Vu
ZHMgZ2l2ZW4uCisgICAgICogQHBhcmFtIGxvb3AgV2hlbiB0cnVlIGEgU291bmQgd2lsbCBiZSBz
ZWxlY3RlZCBhbmQgcGxheWVkIHdoZW4gdGhlIGN1cnJlbnQgcGxheWluZyBTb3VuZCBjb21wbGV0
ZXMuCisgICAgICogQHBhcmFtIHNvdW5kcyBBcnJheSBvZiBTb3VuZHMgdGhhdCB3aWxsIGJlIHNl
bGVjdGVkIGZyb20uCisgICAgICogQHBhcmFtIHdlaWdodHMgQXJyYXkgb2YgbnVtYmVyIHZhbHVl
cyBmb3Igc2VsZWN0aW9uIHdlaWdodHM7IGxlbmd0aCBtdXN0IGVxdWFsIHNvdW5kcywgdmFsdWVz
IHdpbGwgYmUgbm9ybWFsaXplZCB0byAxCisgICAgICovCisgICAgZnVuY3Rpb24gV2VpZ2h0ZWRT
b3VuZChsb29wLCBzb3VuZHMsIHdlaWdodHMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgLyoqIFdoZW4gdHJ1ZSBhIFNvdW5kIHdpbGwgYmUgc2VsZWN0ZWQgYW5kIHBsYXll
ZCB3aGVuIHRoZSBjdXJyZW50IHBsYXlpbmcgU291bmQgY29tcGxldGVzLiAqLworICAgICAgICB0
aGlzLmxvb3AgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY29uZUlubmVyQW5nbGUgPSAzNjA7Cisg
ICAgICAgIHRoaXMuX2NvbmVPdXRlckFuZ2xlID0gMzYwOworICAgICAgICB0aGlzLl92b2x1bWUg
PSAxOworICAgICAgICAvKiogQSBTb3VuZCBpcyBjdXJyZW50bHkgcGxheWluZy4gKi8KKyAgICAg
ICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTsKKyAgICAgICAgLyoqIEEgU291bmQgaXMgY3VycmVu
dGx5IHBhdXNlZC4gKi8KKyAgICAgICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlOworICAgICAgICB0
aGlzLl9zb3VuZHMgPSBbXTsKKyAgICAgICAgdGhpcy5fd2VpZ2h0cyA9IFtdOworICAgICAgICBp
ZiAoc291bmRzLmxlbmd0aCAhPT0gd2VpZ2h0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcignU291bmRzIGxlbmd0aCBkb2VzIG5vdCBlcXVhbCB3ZWlnaHRzIGxlbmd0aCcp
OworICAgICAgICB9CisgICAgICAgIHRoaXMubG9vcCA9IGxvb3A7CisgICAgICAgIHRoaXMuX3dl
aWdodHMgPSB3ZWlnaHRzOworICAgICAgICAvLyBOb3JtYWxpemUgdGhlIHdlaWdodHMKKyAgICAg
ICAgdmFyIHdlaWdodFN1bSA9IDA7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgd2VpZ2h0c18x
ID0gd2VpZ2h0czsgX2kgPCB3ZWlnaHRzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2
YXIgd2VpZ2h0ID0gd2VpZ2h0c18xW19pXTsKKyAgICAgICAgICAgIHdlaWdodFN1bSArPSB3ZWln
aHQ7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGludldlaWdodFN1bSA9IHdlaWdodFN1bSA+IDAg
PyAxIC8gd2VpZ2h0U3VtIDogMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl93
ZWlnaHRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLl93ZWlnaHRzW2ldICo9IGlu
dldlaWdodFN1bTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zb3VuZHMgPSBzb3VuZHM7Cisg
ICAgICAgIGZvciAodmFyIF9hID0gMCwgX2IgPSB0aGlzLl9zb3VuZHM7IF9hIDwgX2IubGVuZ3Ro
OyBfYSsrKSB7CisgICAgICAgICAgICB2YXIgc291bmQgPSBfYltfYV07CisgICAgICAgICAgICBz
b3VuZC5vbkVuZGVkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeyBfdGhpcy5fb25lbmRlZCgp
OyB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2VpZ2h0
ZWRTb3VuZC5wcm90b3R5cGUsICJkaXJlY3Rpb25hbENvbmVJbm5lckFuZ2xlIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogVGhlIHNpemUgb2YgY29uZSBpbiBkZWdyZWVzIGZvciBhIGRpcmVj
dGlvbmFsIHNvdW5kIGluIHdoaWNoIHRoZXJlIHdpbGwgYmUgbm8gYXR0ZW51YXRpb24uCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9jb25lSW5uZXJBbmdsZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFRoZSBzaXplIG9mIGNvbmUgaW4gZGVncmVzcyBmb3IgYSBkaXJlY3Rpb25hbCBzb3VuZCBpbiB3
aGljaCB0aGVyZSB3aWxsIGJlIG5vIGF0dGVudWF0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5f
Y29uZUlubmVyQW5nbGUpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29uZU91dGVyQW5n
bGUgPCB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTG9nZ2VyIl0uRXJyb3IoImRpcmVjdGlvbmFsQ29uZUlubmVy
QW5nbGU6IG91dGVyIGFuZ2xlIG9mIHRoZSBjb25lIG11c3QgYmUgc3VwZXJpb3Igb3IgZXF1YWwg
dG8gdGhlIGlubmVyIGFuZ2xlLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX2NvbmVJbm5lckFuZ2xlID0gdmFs
dWU7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3NvdW5kczsg
X2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNvdW5kID0g
X2FbX2ldOworICAgICAgICAgICAgICAgICAgICBzb3VuZC5kaXJlY3Rpb25hbENvbmVJbm5lckFu
Z2xlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2VpZ2h0ZWRTb3VuZC5wcm90b3R5
cGUsICJkaXJlY3Rpb25hbENvbmVPdXRlckFuZ2xlIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogU2l6ZSBvZiBjb25lIGluIGRlZ3JlZXMgZm9yIGEgZGlyZWN0aW9uYWwgc291bmQgb3V0c2lk
ZSBvZiB3aGljaCB0aGVyZSB3aWxsIGJlIG5vIHNvdW5kLgorICAgICAgICAgKiBMaXN0ZW5lciBh
bmdsZXMgYmV0d2VlbiBpbm5lckFuZ2xlIGFuZCBvdXRlckFuZ2xlIHdpbGwgZmFsbG9mZiBsaW5l
YXJseS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2NvbmVPdXRlckFuZ2xlOworICAgICAgICB9LAorICAgICAgICAvKioK
KyAgICAgICAgICogU2l6ZSBvZiBjb25lIGluIGRlZ3JlZXMgZm9yIGEgZGlyZWN0aW9uYWwgc291
bmQgb3V0c2lkZSBvZiB3aGljaCB0aGVyZSB3aWxsIGJlIG5vIHNvdW5kLgorICAgICAgICAgKiBM
aXN0ZW5lciBhbmdsZXMgYmV0d2VlbiBpbm5lckFuZ2xlIGFuZCBvdXRlckFuZ2xlIHdpbGwgZmFs
bG9mZiBsaW5lYXJseS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMuX2NvbmVPdXRlckFuZ2xlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgdGhpcy5fY29uZUlubmVyQW5nbGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkxvZ2dlciJdLkVycm9yKCJkaXJlY3Rpb25hbENvbmVPdXRlckFuZ2xlOiBvdXRlciBhbmdsZSBv
ZiB0aGUgY29uZSBtdXN0IGJlIHN1cGVyaW9yIG9yIGVxdWFsIHRvIHRoZSBpbm5lciBhbmdsZS4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB0aGlzLl9jb25lT3V0ZXJBbmdsZSA9IHZhbHVlOworICAgICAgICAgICAgICAg
IGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9zb3VuZHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzb3VuZCA9IF9hW19pXTsKKyAgICAgICAgICAg
ICAgICAgICAgc291bmQuZGlyZWN0aW9uYWxDb25lT3V0ZXJBbmdsZSA9IHZhbHVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFdlaWdodGVkU291bmQucHJvdG90eXBlLCAidm9sdW1lIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogUGxheWJhY2sgdm9sdW1lLgorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lOwor
ICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogUGxheWJhY2sgdm9sdW1lLgorICAg
ICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZSAhPT0gdGhpcy5fdm9sdW1lKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kg
PSAwLCBfYSA9IHRoaXMuX3NvdW5kczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHNvdW5kID0gX2FbX2ldOworICAgICAgICAgICAgICAgICAgICBzb3Vu
ZC5zZXRWb2x1bWUodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgV2VpZ2h0ZWRTb3VuZC5wcm90b3R5cGUuX29uZW5kZWQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50SW5kZXggIT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgdGhpcy5fc291bmRzW3RoaXMuX2N1cnJlbnRJbmRleF0uYXV0b3Bs
YXkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5sb29wICYmIHRoaXMuaXNQ
bGF5aW5nKSB7CisgICAgICAgICAgICB0aGlzLnBsYXkoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9OworICAgIC8qKgorICAgICAqIFN1c3BlbmQgcGxheWJhY2sKKyAgICAgKi8KKyAgICBXZWln
aHRlZFNvdW5kLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5p
c1BhdXNlZCA9IHRydWU7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50SW5kZXggIT09IHVuZGVm
aW5lZCkgeworICAgICAgICAgICAgdGhpcy5fc291bmRzW3RoaXMuX2N1cnJlbnRJbmRleF0ucGF1
c2UoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU3RvcCBwbGF5YmFjawor
ICAgICAqLworICAgIFdlaWdodGVkU291bmQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlzLl9jdXJy
ZW50SW5kZXggIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdGhpcy5fc291bmRzW3RoaXMu
X2N1cnJlbnRJbmRleF0uc3RvcCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTdGFydCBwbGF5YmFjay4KKyAgICAgKiBAcGFyYW0gc3RhcnRPZmZzZXQgUG9zaXRpb24gdGhl
IGNsaXAgaGVhZCBhdCBhIHNwZWNpZmljIHRpbWUgaW4gc2Vjb25kcy4KKyAgICAgKi8KKyAgICBX
ZWlnaHRlZFNvdW5kLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKHN0YXJ0T2Zmc2V0KSB7Cisg
ICAgICAgIGlmICghdGhpcy5pc1BhdXNlZCkgeworICAgICAgICAgICAgdGhpcy5zdG9wKCk7Cisg
ICAgICAgICAgICB2YXIgcmFuZG9tVmFsdWUgPSBNYXRoLnJhbmRvbSgpOworICAgICAgICAgICAg
dmFyIHRvdGFsID0gMDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fd2Vp
Z2h0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMuX3dlaWdo
dHNbaV07CisgICAgICAgICAgICAgICAgaWYgKHJhbmRvbVZhbHVlIDw9IHRvdGFsKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IGk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICB2YXIgc291bmQgPSB0aGlzLl9zb3VuZHNbdGhpcy5fY3VycmVudEluZGV4XTsKKyAg
ICAgICAgaWYgKHNvdW5kLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgc291bmQucGxheSgwLCB0
aGlzLmlzUGF1c2VkID8gdW5kZWZpbmVkIDogc3RhcnRPZmZzZXQpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgc291bmQuYXV0b3BsYXkgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5pc1BhdXNlZCA9
IGZhbHNlOworICAgIH07CisgICAgcmV0dXJuIFdlaWdodGVkU291bmQ7Cit9KCkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0JlaGF2aW9ycy9DYW1lcmFzL2F1dG9Sb3RhdGlvbkJlaGF2
aW9yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vQmVoYXZpb3JzL0NhbWVyYXMvYXV0b1JvdGF0aW9uQmVoYXZp
b3IudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEF1dG9Sb3RhdGlvbkJlaGF2aW9yICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkF1dG9Sb3RhdGlvbkJlaGF2aW9y
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBBdXRvUm90YXRpb25CZWhhdmlvcjsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FdmVudHMvcG9pbnRl
ckV2ZW50cyAqLyAiLi9FdmVudHMvcG9pbnRlckV2ZW50cy50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX3ByZWNpc2lvbkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvcHJlY2lzaW9uRGF0ZSAqLyAi
Li9NaXNjL3ByZWNpc2lvbkRhdGUudHMiKTsKKworCisvKioKKyAqIFRoZSBhdXRvUm90YXRpb24g
YmVoYXZpb3IgKEF1dG9Sb3RhdGlvbkJlaGF2aW9yKSBpcyBkZXNpZ25lZCB0byBjcmVhdGUgYSBz
bW9vdGggcm90YXRpb24gb2YgYW4gQXJjUm90YXRlQ2FtZXJhIHdoZW4gdGhlcmUgaXMgbm8gdXNl
ciBpbnRlcmFjdGlvbi4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9j
YW1lcmFfYmVoYXZpb3JzI2F1dG9yb3RhdGlvbi1iZWhhdmlvcgorICovCit2YXIgQXV0b1JvdGF0
aW9uQmVoYXZpb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24g
QXV0b1JvdGF0aW9uQmVoYXZpb3IoKSB7CisgICAgICAgIHRoaXMuX3pvb21TdG9wc0FuaW1hdGlv
biA9IGZhbHNlOworICAgICAgICB0aGlzLl9pZGxlUm90YXRpb25TcGVlZCA9IDAuMDU7CisgICAg
ICAgIHRoaXMuX2lkbGVSb3RhdGlvbldhaXRUaW1lID0gMjAwMDsKKyAgICAgICAgdGhpcy5faWRs
ZVJvdGF0aW9uU3BpbnVwVGltZSA9IDIwMDA7CisgICAgICAgIHRoaXMuX2lzUG9pbnRlckRvd24g
PSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbGFzdEZyYW1lVGltZSA9IG51bGw7CisgICAgICAgIHRo
aXMuX2xhc3RJbnRlcmFjdGlvblRpbWUgPSAtSW5maW5pdHk7CisgICAgICAgIHRoaXMuX2NhbWVy
YVJvdGF0aW9uU3BlZWQgPSAwOworICAgICAgICB0aGlzLl9sYXN0RnJhbWVSYWRpdXMgPSAwOwor
ICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXV0b1JvdGF0aW9uQmVoYXZpb3IucHJv
dG90eXBlLCAibmFtZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG5hbWUg
b2YgdGhlIGJlaGF2aW9yLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gIkF1dG9Sb3RhdGlvbiI7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdXRvUm90YXRpb25CZWhhdmlvci5wcm90b3R5cGUs
ICJ6b29tU3RvcHNBbmltYXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgdGhl
IGZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgdXNlciB6b29taW5nIHNob3VsZCBzdG9wIGFuaW1hdGlv
bi4KKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fem9vbVN0b3BzQW5pbWF0aW9uOworICAgICAgICB9LAorICAgICAgICAvKioK
KyAgICAgICAgKiBTZXRzIHRoZSBmbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHVzZXIgem9vbWluZyBz
aG91bGQgc3RvcCBhbmltYXRpb24uCisgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KGZsYWcpIHsKKyAgICAgICAgICAgIHRoaXMuX3pvb21TdG9wc0FuaW1hdGlvbiA9IGZsYWc7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdXRvUm90YXRpb25C
ZWhhdmlvci5wcm90b3R5cGUsICJpZGxlUm90YXRpb25TcGVlZCIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCBzcGVlZCBhdCB3aGljaCB0aGUgY2FtZXJhIHJvdGF0
ZXMgYXJvdW5kIHRoZSBtb2RlbC4KKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faWRsZVJvdGF0aW9uU3BlZWQ7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAqIFNldHMgdGhlIGRlZmF1bHQgc3BlZWQgYXQgd2hp
Y2ggdGhlIGNhbWVyYSByb3RhdGVzIGFyb3VuZCB0aGUgbW9kZWwuCisgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHNwZWVkKSB7CisgICAgICAgICAgICB0aGlzLl9pZGxlUm90YXRp
b25TcGVlZCA9IHNwZWVkOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoQXV0b1JvdGF0aW9uQmVoYXZpb3IucHJvdG90eXBlLCAiaWRsZVJvdGF0aW9uV2FpdFRp
bWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgdGhlIHRpbWUgKG1pbGxpc2Vjb25k
cykgdG8gd2FpdCBhZnRlciB1c2VyIGludGVyYWN0aW9uIGJlZm9yZSB0aGUgY2FtZXJhIHN0YXJ0
cyByb3RhdGluZy4KKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5faWRsZVJvdGF0aW9uV2FpdFRpbWU7CisgICAgICAgIH0sCisg
ICAgICAgIC8qKgorICAgICAgICAqIFNldHMgdGhlIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdG8g
d2FpdCBhZnRlciB1c2VyIGludGVyYWN0aW9uIGJlZm9yZSB0aGUgY2FtZXJhIHN0YXJ0cyByb3Rh
dGluZy4KKyAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkgeworICAgICAg
ICAgICAgdGhpcy5faWRsZVJvdGF0aW9uV2FpdFRpbWUgPSB0aW1lOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXV0b1JvdGF0aW9uQmVoYXZpb3IucHJvdG90
eXBlLCAiaWRsZVJvdGF0aW9uU3BpbnVwVGltZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICog
R2V0cyB0aGUgdGltZSAobWlsbGlzZWNvbmRzKSB0byB0YWtlIHRvIHNwaW4gdXAgdG8gdGhlIGZ1
bGwgaWRsZSByb3RhdGlvbiBzcGVlZC4KKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faWRsZVJvdGF0aW9uU3BpbnVwVGltZTsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICogU2V0cyB0aGUgdGltZSAobWlsbGlz
ZWNvbmRzKSB0byB0YWtlIHRvIHNwaW4gdXAgdG8gdGhlIGZ1bGwgaWRsZSByb3RhdGlvbiBzcGVl
ZC4KKyAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkgeworICAgICAgICAg
ICAgdGhpcy5faWRsZVJvdGF0aW9uU3BpbnVwVGltZSA9IHRpbWU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdXRvUm90YXRpb25CZWhhdmlvci5wcm90b3R5
cGUsICJyb3RhdGlvbkluUHJvZ3Jlc3MiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IGEgdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgY2FtZXJhIGlzIGN1cnJlbnRseSByb3RhdGluZyBi
ZWNhdXNlIG9mIHRoaXMgYmVoYXZpb3IKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuX2NhbWVyYVJvdGF0aW9u
U3BlZWQpID4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6
ZXMgdGhlIGJlaGF2aW9yLgorICAgICAqLworICAgIEF1dG9Sb3RhdGlvbkJlaGF2aW9yLnByb3Rv
dHlwZS5pbml0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBEbyBub3RpaG5nCisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyB0aGUgYmVoYXZpb3IgdG8gaXRzIGFyYyByb3RhdGUg
Y2FtZXJhLgorICAgICAqIEBwYXJhbSBjYW1lcmEgRGVmaW5lcyB0aGUgY2FtZXJhIHRvIGF0dGFj
aCB0aGUgYmVoYXZpb3IgdG8KKyAgICAgKi8KKyAgICBBdXRvUm90YXRpb25CZWhhdmlvci5wcm90
b3R5cGUuYXR0YWNoID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0
aGlzOworICAgICAgICB0aGlzLl9hdHRhY2hlZENhbWVyYSA9IGNhbWVyYTsKKyAgICAgICAgdmFy
IHNjZW5lID0gdGhpcy5fYXR0YWNoZWRDYW1lcmEuZ2V0U2NlbmUoKTsKKyAgICAgICAgdGhpcy5f
b25QcmVQb2ludGVyT2JzZXJ2YWJsZU9ic2VydmVyID0gc2NlbmUub25QcmVQb2ludGVyT2JzZXJ2
YWJsZS5hZGQoZnVuY3Rpb24gKHBvaW50ZXJJbmZvUHJlKSB7CisgICAgICAgICAgICBpZiAocG9p
bnRlckluZm9QcmUudHlwZSA9PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04pIHsKKyAgICAg
ICAgICAgICAgICBfdGhpcy5faXNQb2ludGVyRG93biA9IHRydWU7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvaW50ZXJJbmZvUHJlLnR5
cGUgPT09IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJVUCkgeworICAgICAgICAgICAgICAgIF90aGlz
Ll9pc1BvaW50ZXJEb3duID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
ICAgICB0aGlzLl9vbkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZlciA9IGNhbWVyYS5vbkFmdGVyQ2hl
Y2tJbnB1dHNPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbm93
ID0gX01pc2NfcHJlY2lzaW9uRGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQcmVj
aXNpb25EYXRlIl0uTm93OworICAgICAgICAgICAgdmFyIGR0ID0gMDsKKyAgICAgICAgICAgIGlm
IChfdGhpcy5fbGFzdEZyYW1lVGltZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZHQgPSBu
b3cgLSBfdGhpcy5fbGFzdEZyYW1lVGltZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90
aGlzLl9sYXN0RnJhbWVUaW1lID0gbm93OworICAgICAgICAgICAgLy8gU3RvcCB0aGUgYW5pbWF0
aW9uIGlmIHRoZXJlIGlzIHVzZXIgaW50ZXJhY3Rpb24gYW5kIHRoZSBhbmltYXRpb24gc2hvdWxk
IHN0b3AgZm9yIHRoaXMgaW50ZXJhY3Rpb24KKyAgICAgICAgICAgIF90aGlzLl9hcHBseVVzZXJJ
bnRlcmFjdGlvbigpOworICAgICAgICAgICAgdmFyIHRpbWVUb1JvdGF0aW9uID0gbm93IC0gX3Ro
aXMuX2xhc3RJbnRlcmFjdGlvblRpbWUgLSBfdGhpcy5faWRsZVJvdGF0aW9uV2FpdFRpbWU7Cisg
ICAgICAgICAgICB2YXIgc2NhbGUgPSBNYXRoLm1heChNYXRoLm1pbih0aW1lVG9Sb3RhdGlvbiAv
IChfdGhpcy5faWRsZVJvdGF0aW9uU3BpbnVwVGltZSksIDEpLCAwKTsKKyAgICAgICAgICAgIF90
aGlzLl9jYW1lcmFSb3RhdGlvblNwZWVkID0gX3RoaXMuX2lkbGVSb3RhdGlvblNwZWVkICogc2Nh
bGU7CisgICAgICAgICAgICAvLyBTdGVwIGNhbWVyYSByb3RhdGlvbiBieSByb3RhdGlvbiBzcGVl
ZAorICAgICAgICAgICAgaWYgKF90aGlzLl9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAg
ICAgIF90aGlzLl9hdHRhY2hlZENhbWVyYS5hbHBoYSAtPSBfdGhpcy5fY2FtZXJhUm90YXRpb25T
cGVlZCAqIChkdCAvIDEwMDApOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIERldGFjaGVzIHRoZSBiZWhhdmlvciBmcm9tIGl0cyBjdXJyZW50IGFy
YyByb3RhdGUgY2FtZXJhLgorICAgICAqLworICAgIEF1dG9Sb3RhdGlvbkJlaGF2aW9yLnByb3Rv
dHlwZS5kZXRhY2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fYXR0YWNoZWRD
YW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2Nl
bmUgPSB0aGlzLl9hdHRhY2hlZENhbWVyYS5nZXRTY2VuZSgpOworICAgICAgICBpZiAodGhpcy5f
b25QcmVQb2ludGVyT2JzZXJ2YWJsZU9ic2VydmVyKSB7CisgICAgICAgICAgICBzY2VuZS5vblBy
ZVBvaW50ZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vblByZVBvaW50ZXJPYnNlcnZhYmxlT2Jz
ZXJ2ZXIpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2F0dGFjaGVkQ2FtZXJhLm9uQWZ0ZXJD
aGVja0lucHV0c09ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJDaGVja0lucHV0c09ic2Vy
dmVyKTsKKyAgICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEgPSBudWxsOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHVzZXIgaXMgc2Nyb2xsaW5nLgorICAgICAqIEBy
ZXR1cm4gdHJ1ZSBpZiB1c2VyIGlzIHNjcm9sbGluZy4KKyAgICAgKi8KKyAgICBBdXRvUm90YXRp
b25CZWhhdmlvci5wcm90b3R5cGUuX3VzZXJJc1pvb21pbmcgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICghdGhpcy5fYXR0YWNoZWRDYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoZWRDYW1lcmEuaW5lcnRp
YWxSYWRpdXNPZmZzZXQgIT09IDA7CisgICAgfTsKKyAgICBBdXRvUm90YXRpb25CZWhhdmlvci5w
cm90b3R5cGUuX3Nob3VsZEFuaW1hdGlvblN0b3BGb3JJbnRlcmFjdGlvbiA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKCF0aGlzLl9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHZhciB6b29tSGFzSGl0TGltaXQgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKHRoaXMuX2xhc3RGcmFtZVJhZGl1cyA9PT0gdGhpcy5fYXR0YWNoZWRD
YW1lcmEucmFkaXVzICYmIHRoaXMuX2F0dGFjaGVkQ2FtZXJhLmluZXJ0aWFsUmFkaXVzT2Zmc2V0
ICE9PSAwKSB7CisgICAgICAgICAgICB6b29tSGFzSGl0TGltaXQgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVjb3JkIG9mIHByZXZpb3VzIHJhZGl1cyAtIHdvcmtz
IGFzIGFuIGFwcHJveC4gaW5kaWNhdG9yIG9mIGhpdHRpbmcgcmFkaXVzIGxpbWl0cworICAgICAg
ICB0aGlzLl9sYXN0RnJhbWVSYWRpdXMgPSB0aGlzLl9hdHRhY2hlZENhbWVyYS5yYWRpdXM7Cisg
ICAgICAgIHJldHVybiB0aGlzLl96b29tU3RvcHNBbmltYXRpb24gPyB6b29tSGFzSGl0TGltaXQg
OiB0aGlzLl91c2VySXNab29taW5nKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiAgQXBwbGll
cyBhbnkgY3VycmVudCB1c2VyIGludGVyYWN0aW9uIHRvIHRoZSBjYW1lcmEuIFRha2VzIGludG8g
YWNjb3VudCBtYXhpbXVtIGFscGhhIHJvdGF0aW9uLgorICAgICAqLworICAgIEF1dG9Sb3RhdGlv
bkJlaGF2aW9yLnByb3RvdHlwZS5fYXBwbHlVc2VySW50ZXJhY3Rpb24gPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICh0aGlzLl91c2VySXNNb3ZpbmcoKSAmJiAhdGhpcy5fc2hvdWxkQW5pbWF0
aW9uU3RvcEZvckludGVyYWN0aW9uKCkpIHsKKyAgICAgICAgICAgIHRoaXMuX2xhc3RJbnRlcmFj
dGlvblRpbWUgPSBfTWlzY19wcmVjaXNpb25EYXRlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlByZWNpc2lvbkRhdGUiXS5Ob3c7CisgICAgICAgIH0KKyAgICB9OworICAgIC8vIFRvb2xz
CisgICAgQXV0b1JvdGF0aW9uQmVoYXZpb3IucHJvdG90eXBlLl91c2VySXNNb3ZpbmcgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fYXR0YWNoZWRDYW1lcmEpIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNo
ZWRDYW1lcmEuaW5lcnRpYWxBbHBoYU9mZnNldCAhPT0gMCB8fAorICAgICAgICAgICAgdGhpcy5f
YXR0YWNoZWRDYW1lcmEuaW5lcnRpYWxCZXRhT2Zmc2V0ICE9PSAwIHx8CisgICAgICAgICAgICB0
aGlzLl9hdHRhY2hlZENhbWVyYS5pbmVydGlhbFJhZGl1c09mZnNldCAhPT0gMCB8fAorICAgICAg
ICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEuaW5lcnRpYWxQYW5uaW5nWCAhPT0gMCB8fAorICAg
ICAgICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEuaW5lcnRpYWxQYW5uaW5nWSAhPT0gMCB8fAor
ICAgICAgICAgICAgdGhpcy5faXNQb2ludGVyRG93bjsKKyAgICB9OworICAgIHJldHVybiBBdXRv
Um90YXRpb25CZWhhdmlvcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQmVo
YXZpb3JzL0NhbWVyYXMvYm91bmNpbmdCZWhhdmlvci50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQmVoYXZpb3JzL0Nh
bWVyYXMvYm91bmNpbmdCZWhhdmlvci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBCb3VuY2lu
Z0JlaGF2aW9yICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvdW5jaW5n
QmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJvdW5jaW5nQmVoYXZpb3I7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9BbmltYXRpb25zX2Vhc2luZ19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQW5pbWF0aW9ucy9l
YXNpbmcgKi8gIi4vQW5pbWF0aW9ucy9lYXNpbmcudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0FuaW1hdGlvbnMvYW5pbWF0aW9uICovICIu
L0FuaW1hdGlvbnMvYW5pbWF0aW9uLnRzIik7CisKKworLyoqCisgKiBBZGQgYSBib3VuY2luZyBl
ZmZlY3QgdG8gYW4gQXJjUm90YXRlQ2FtZXJhIHdoZW4gcmVhY2hpbmcgYSBzcGVjaWZpZWQgbWlu
aW11bSBhbmQgbWF4aW11bSByYWRpdXMKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9jYW1lcmFfYmVoYXZpb3JzI2JvdW5jaW5nLWJlaGF2aW9yCisgKi8KK3ZhciBCb3Vu
Y2luZ0JlaGF2aW9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9u
IEJvdW5jaW5nQmVoYXZpb3IoKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZHVyYXRp
b24gb2YgdGhlIGFuaW1hdGlvbiwgaW4gbWlsbGlzZWNvbmRzCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLnRyYW5zaXRpb25EdXJhdGlvbiA9IDQ1MDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IExlbmd0aCBvZiB0aGUgZGlzdGFuY2UgYW5pbWF0ZWQgYnkgdGhlIHRyYW5zaXRpb24gd2hlbiBs
b3dlciByYWRpdXMgaXMgcmVhY2hlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5sb3dlclJh
ZGl1c1RyYW5zaXRpb25SYW5nZSA9IDI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBMZW5ndGgg
b2YgdGhlIGRpc3RhbmNlIGFuaW1hdGVkIGJ5IHRoZSB0cmFuc2l0aW9uIHdoZW4gdXBwZXIgcmFk
aXVzIGlzIHJlYWNoZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudXBwZXJSYWRpdXNUcmFu
c2l0aW9uUmFuZ2UgPSAtMjsKKyAgICAgICAgdGhpcy5fYXV0b1RyYW5zaXRpb25SYW5nZSA9IGZh
bHNlOworICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIHRoaXMuX3JhZGl1c0lzQW5pbWF0
aW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3JhZGl1c0JvdW5jZVRyYW5zaXRpb24gPSBudWxs
OworICAgICAgICB0aGlzLl9hbmltYXRhYmxlcyA9IG5ldyBBcnJheSgpOworICAgIH0KKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQm91bmNpbmdCZWhhdmlvci5wcm90b3R5cGUsICJuYW1lIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgYmVoYXZpb3Iu
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiAiQm91bmNpbmciOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoQm91bmNpbmdCZWhhdmlvci5wcm90b3R5cGUsICJhdXRvVHJhbnNpdGlvblJhbmdlIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgaWYgdGhl
IGxvd2VyUmFkaXVzVHJhbnNpdGlvblJhbmdlIGFuZCB1cHBlclJhZGl1c1RyYW5zaXRpb25SYW5n
ZSBhcmUgZGVmaW5lZCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdXRvVHJhbnNpdGlvblJhbmdl
OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyBhIHZhbHVlIGluZGlj
YXRpbmcgaWYgdGhlIGxvd2VyUmFkaXVzVHJhbnNpdGlvblJhbmdlIGFuZCB1cHBlclJhZGl1c1Ry
YW5zaXRpb25SYW5nZSBhcmUgZGVmaW5lZCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAqIFRyYW5z
aXRpb24gcmFuZ2VzIHdpbGwgYmUgc2V0IHRvIDUlIG9mIHRoZSBib3VuZGluZyBib3ggZGlhZ29u
YWwgaW4gd29ybGQgc3BhY2UKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICAgICAgaWYgKHRo
aXMuX2F1dG9UcmFuc2l0aW9uUmFuZ2UgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYXV0b1RyYW5zaXRpb25SYW5n
ZSA9IHZhbHVlOworICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2F0dGFjaGVkQ2FtZXJh
OworICAgICAgICAgICAgaWYgKCFjYW1lcmEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9vbk1lc2hUYXJnZXRDaGFuZ2VkT2JzZXJ2ZXIgPSBjYW1lcmEub25NZXNoVGFyZ2V0Q2hh
bmdlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghbWVzaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1lc2guY29tcHV0ZVdvcmxkTWF0cml4
KHRydWUpOworICAgICAgICAgICAgICAgICAgICB2YXIgZGlhZ29uYWwgPSBtZXNoLmdldEJvdW5k
aW5nSW5mbygpLmRpYWdvbmFsTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5sb3dl
clJhZGl1c1RyYW5zaXRpb25SYW5nZSA9IGRpYWdvbmFsICogMC4wNTsKKyAgICAgICAgICAgICAg
ICAgICAgX3RoaXMudXBwZXJSYWRpdXNUcmFuc2l0aW9uUmFuZ2UgPSBkaWFnb25hbCAqIDAuMDU7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
ICh0aGlzLl9vbk1lc2hUYXJnZXRDaGFuZ2VkT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICBj
YW1lcmEub25NZXNoVGFyZ2V0Q2hhbmdlZE9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uTWVzaFRh
cmdldENoYW5nZWRPYnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBiZWhhdmlvci4KKyAgICAgKi8KKyAgICBC
b3VuY2luZ0JlaGF2aW9yLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAv
LyBEbyBub3RpaG5nCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyB0aGUgYmVoYXZp
b3IgdG8gaXRzIGFyYyByb3RhdGUgY2FtZXJhLgorICAgICAqIEBwYXJhbSBjYW1lcmEgRGVmaW5l
cyB0aGUgY2FtZXJhIHRvIGF0dGFjaCB0aGUgYmVoYXZpb3IgdG8KKyAgICAgKi8KKyAgICBCb3Vu
Y2luZ0JlaGF2aW9yLnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMuX2F0dGFjaGVkQ2FtZXJhID0gY2Ft
ZXJhOworICAgICAgICB0aGlzLl9vbkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZlciA9IGNhbWVyYS5v
bkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICBpZiAoIV90aGlzLl9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEFkZCB0aGUgYm91bmNlIGFuaW1hdGlvbiB0
byB0aGUgbG93ZXIgcmFkaXVzIGxpbWl0CisgICAgICAgICAgICBpZiAoX3RoaXMuX2lzUmFkaXVz
QXRMaW1pdChfdGhpcy5fYXR0YWNoZWRDYW1lcmEubG93ZXJSYWRpdXNMaW1pdCkpIHsKKyAgICAg
ICAgICAgICAgICBfdGhpcy5fYXBwbHlCb3VuZFJhZGl1c0FuaW1hdGlvbihfdGhpcy5sb3dlclJh
ZGl1c1RyYW5zaXRpb25SYW5nZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBBZGQg
dGhlIGJvdW5jZSBhbmltYXRpb24gdG8gdGhlIHVwcGVyIHJhZGl1cyBsaW1pdAorICAgICAgICAg
ICAgaWYgKF90aGlzLl9pc1JhZGl1c0F0TGltaXQoX3RoaXMuX2F0dGFjaGVkQ2FtZXJhLnVwcGVy
UmFkaXVzTGltaXQpKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2FwcGx5Qm91bmRSYWRpdXNB
bmltYXRpb24oX3RoaXMudXBwZXJSYWRpdXNUcmFuc2l0aW9uUmFuZ2UpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGFjaGVzIHRoZSBiZWhh
dmlvciBmcm9tIGl0cyBjdXJyZW50IGFyYyByb3RhdGUgY2FtZXJhLgorICAgICAqLworICAgIEJv
dW5jaW5nQmVoYXZpb3IucHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl9vbkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZlcikgeworICAg
ICAgICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEub25BZnRlckNoZWNrSW5wdXRzT2JzZXJ2YWJs
ZS5yZW1vdmUodGhpcy5fb25BZnRlckNoZWNrSW5wdXRzT2JzZXJ2ZXIpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9vbk1lc2hUYXJnZXRDaGFuZ2VkT2JzZXJ2ZXIpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2F0dGFjaGVkQ2FtZXJhLm9uTWVzaFRhcmdldENoYW5nZWRPYnNlcnZhYmxlLnJl
bW92ZSh0aGlzLl9vbk1lc2hUYXJnZXRDaGFuZ2VkT2JzZXJ2ZXIpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2F0dGFjaGVkQ2FtZXJhID0gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENoZWNrcyBpZiB0aGUgY2FtZXJhIHJhZGl1cyBpcyBhdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBU
YWtlcyBpbnRvIGFjY291bnQgYW5pbWF0aW9uIGxvY2tzLgorICAgICAqIEBwYXJhbSByYWRpdXNM
aW1pdCBUaGUgbGltaXQgdG8gY2hlY2sgYWdhaW5zdC4KKyAgICAgKiBAcmV0dXJuIEJvb2wgdG8g
aW5kaWNhdGUgaWYgYXQgbGltaXQuCisgICAgICovCisgICAgQm91bmNpbmdCZWhhdmlvci5wcm90
b3R5cGUuX2lzUmFkaXVzQXRMaW1pdCA9IGZ1bmN0aW9uIChyYWRpdXNMaW1pdCkgeworICAgICAg
ICBpZiAoIXRoaXMuX2F0dGFjaGVkQ2FtZXJhKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkQ2FtZXJhLnJhZGl1cyA9PT0g
cmFkaXVzTGltaXQgJiYgIXRoaXMuX3JhZGl1c0lzQW5pbWF0aW5nKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBBcHBsaWVzIGFuIGFuaW1hdGlvbiB0byB0aGUgcmFkaXVzIG9mIHRoZSBj
YW1lcmEsIGV4dGVuZGluZyBieSB0aGUgcmFkaXVzRGVsdGEuCisgICAgICogQHBhcmFtIHJhZGl1
c0RlbHRhIFRoZSBkZWx0YSBieSB3aGljaCB0byBhbmltYXRlIHRvLiBDYW4gYmUgbmVnYXRpdmUu
CisgICAgICovCisgICAgQm91bmNpbmdCZWhhdmlvci5wcm90b3R5cGUuX2FwcGx5Qm91bmRSYWRp
dXNBbmltYXRpb24gPSBmdW5jdGlvbiAocmFkaXVzRGVsdGEpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgaWYgKCF0aGlzLl9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fcmFkaXVzQm91bmNlVHJh
bnNpdGlvbikgeworICAgICAgICAgICAgQm91bmNpbmdCZWhhdmlvci5FYXNpbmdGdW5jdGlvbi5z
ZXRFYXNpbmdNb2RlKEJvdW5jaW5nQmVoYXZpb3IuRWFzaW5nTW9kZSk7CisgICAgICAgICAgICB0
aGlzLl9yYWRpdXNCb3VuY2VUcmFuc2l0aW9uID0gX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFuaW1hdGlvbiJdLkNyZWF0ZUFuaW1hdGlvbigicmFk
aXVzIiwgX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVfRkxPQVQsIDYwLCBCb3VuY2luZ0JlaGF2aW9yLkVh
c2luZ0Z1bmN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAvLyBQcmV2ZW50IHpvb20gdW50aWwg
Ym91bmNlIGhhcyBjb21wbGV0ZWQKKyAgICAgICAgdGhpcy5fY2FjaGVkV2hlZWxQcmVjaXNpb24g
PSB0aGlzLl9hdHRhY2hlZENhbWVyYS53aGVlbFByZWNpc2lvbjsKKyAgICAgICAgdGhpcy5fYXR0
YWNoZWRDYW1lcmEud2hlZWxQcmVjaXNpb24gPSBJbmZpbml0eTsKKyAgICAgICAgdGhpcy5fYXR0
YWNoZWRDYW1lcmEuaW5lcnRpYWxSYWRpdXNPZmZzZXQgPSAwOworICAgICAgICAvLyBBbmltYXRl
IHRvIHRoZSByYWRpdXMgbGltaXQKKyAgICAgICAgdGhpcy5zdG9wQWxsQW5pbWF0aW9ucygpOwor
ICAgICAgICB0aGlzLl9yYWRpdXNJc0FuaW1hdGluZyA9IHRydWU7CisgICAgICAgIHZhciBhbmlt
YXRhYmxlID0gX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkFuaW1hdGlvbiJdLlRyYW5zaXRpb25UbygicmFkaXVzIiwgdGhpcy5fYXR0YWNoZWRDYW1l
cmEucmFkaXVzICsgcmFkaXVzRGVsdGEsIHRoaXMuX2F0dGFjaGVkQ2FtZXJhLCB0aGlzLl9hdHRh
Y2hlZENhbWVyYS5nZXRTY2VuZSgpLCA2MCwgdGhpcy5fcmFkaXVzQm91bmNlVHJhbnNpdGlvbiwg
dGhpcy50cmFuc2l0aW9uRHVyYXRpb24sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9jbGVh
ckFuaW1hdGlvbkxvY2tzKCk7IH0pOworICAgICAgICBpZiAoYW5pbWF0YWJsZSkgeworICAgICAg
ICAgICAgdGhpcy5fYW5pbWF0YWJsZXMucHVzaChhbmltYXRhYmxlKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhbGwgYW5pbWF0aW9uIGxvY2tzLiBBbGxvd3Mg
bmV3IGFuaW1hdGlvbnMgdG8gYmUgYWRkZWQgdG8gYW55IG9mIHRoZSBjYW1lcmEgcHJvcGVydGll
cy4KKyAgICAgKi8KKyAgICBCb3VuY2luZ0JlaGF2aW9yLnByb3RvdHlwZS5fY2xlYXJBbmltYXRp
b25Mb2NrcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fcmFkaXVzSXNBbmltYXRpbmcg
PSBmYWxzZTsKKyAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkQ2FtZXJhKSB7CisgICAgICAgICAg
ICB0aGlzLl9hdHRhY2hlZENhbWVyYS53aGVlbFByZWNpc2lvbiA9IHRoaXMuX2NhY2hlZFdoZWVs
UHJlY2lzaW9uOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTdG9wcyBhbmQg
cmVtb3ZlcyBhbGwgYW5pbWF0aW9ucyB0aGF0IGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoZSBjYW1l
cmEKKyAgICAgKi8KKyAgICBCb3VuY2luZ0JlaGF2aW9yLnByb3RvdHlwZS5zdG9wQWxsQW5pbWF0
aW9ucyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkQ2FtZXJhKSB7
CisgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZENhbWVyYS5hbmltYXRpb25zID0gW107CisgICAg
ICAgIH0KKyAgICAgICAgd2hpbGUgKHRoaXMuX2FuaW1hdGFibGVzLmxlbmd0aCkgeworICAgICAg
ICAgICAgdGhpcy5fYW5pbWF0YWJsZXNbMF0ub25BbmltYXRpb25FbmQgPSBudWxsOworICAgICAg
ICAgICAgdGhpcy5fYW5pbWF0YWJsZXNbMF0uc3RvcCgpOworICAgICAgICAgICAgdGhpcy5fYW5p
bWF0YWJsZXMuc2hpZnQoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogVGhl
IGVhc2luZyBmdW5jdGlvbiB1c2VkIGJ5IGFuaW1hdGlvbnMKKyAgICAgKi8KKyAgICBCb3VuY2lu
Z0JlaGF2aW9yLkVhc2luZ0Z1bmN0aW9uID0gbmV3IF9BbmltYXRpb25zX2Vhc2luZ19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYWNrRWFzZSJdKDAuMyk7CisgICAgLyoqCisgICAgICog
VGhlIGVhc2luZyBtb2RlIHVzZWQgYnkgYW5pbWF0aW9ucworICAgICAqLworICAgIEJvdW5jaW5n
QmVoYXZpb3IuRWFzaW5nTW9kZSA9IF9BbmltYXRpb25zX2Vhc2luZ19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJFYXNpbmdGdW5jdGlvbiJdLkVBU0lOR01PREVfRUFTRU9VVDsKKyAgICBy
ZXR1cm4gQm91bmNpbmdCZWhhdmlvcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vQmVoYXZpb3JzL0NhbWVyYXMvZnJhbWluZ0JlaGF2aW9yLnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0JlaGF2aW9y
cy9DYW1lcmFzL2ZyYW1pbmdCZWhhdmlvci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZyYW1p
bmdCZWhhdmlvciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmFtaW5n
QmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZyYW1pbmdCZWhhdmlvcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX0FuaW1hdGlvbnNfZWFzaW5nX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9BbmltYXRpb25zL2Vh
c2luZyAqLyAiLi9BbmltYXRpb25zL2Vhc2luZy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRXZlbnRzL3BvaW50ZXJFdmVudHMgKi8gIi4v
RXZlbnRzL3BvaW50ZXJFdmVudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlz
Y19wcmVjaXNpb25EYXRlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3ByZWNpc2lvbkRhdGUgKi8gIi4vTWlzYy9wcmVjaXNp
b25EYXRlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQW5pbWF0aW9u
cy9hbmltYXRpb24gKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb24udHMiKTsKKworCisKKworCisv
KioKKyAqIFRoZSBmcmFtaW5nIGJlaGF2aW9yIChGcmFtaW5nQmVoYXZpb3IpIGlzIGRlc2lnbmVk
IHRvIGF1dG9tYXRpY2FsbHkgcG9zaXRpb24gYW4gQXJjUm90YXRlQ2FtZXJhIHdoZW4gaXRzIHRh
cmdldCBpcyBzZXQgdG8gYSBtZXNoLiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBw
cmV2ZW50IHRoZSBjYW1lcmEgdG8gZ28gdW5kZXIgYSB2aXJ0dWFsIGhvcml6b250YWwgcGxhbmUu
CisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY2FtZXJhX2JlaGF2aW9y
cyNmcmFtaW5nLWJlaGF2aW9yCisgKi8KK3ZhciBGcmFtaW5nQmVoYXZpb3IgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRnJhbWluZ0JlaGF2aW9yKCkgeworICAg
ICAgICB0aGlzLl9tb2RlID0gRnJhbWluZ0JlaGF2aW9yLkZpdEZydXN0dW1TaWRlc01vZGU7Cisg
ICAgICAgIHRoaXMuX3JhZGl1c1NjYWxlID0gMS4wOworICAgICAgICB0aGlzLl9wb3NpdGlvblNj
YWxlID0gMC41OworICAgICAgICB0aGlzLl9kZWZhdWx0RWxldmF0aW9uID0gMC4zOworICAgICAg
ICB0aGlzLl9lbGV2YXRpb25SZXR1cm5UaW1lID0gMTUwMDsKKyAgICAgICAgdGhpcy5fZWxldmF0
aW9uUmV0dXJuV2FpdFRpbWUgPSAxMDAwOworICAgICAgICB0aGlzLl96b29tU3RvcHNBbmltYXRp
b24gPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZnJhbWluZ1RpbWUgPSAxNTAwOworICAgICAgICAv
KioKKyAgICAgICAgICogRGVmaW5lIGlmIHRoZSBiZWhhdmlvciBzaG91bGQgYXV0b21hdGljYWxs
eSBjaGFuZ2UgdGhlIGNvbmZpZ3VyZWQKKyAgICAgICAgICogY2FtZXJhIGxpbWl0cyBhbmQgc2Vu
c2liaWxpdGllcy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYXV0b0NvcnJlY3RDYW1lcmFM
aW1pdHNBbmRTZW5zaWJpbGl0eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2lzUG9pbnRlckRvd24g
PSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbGFzdEludGVyYWN0aW9uVGltZSA9IC1JbmZpbml0eTsK
KyAgICAgICAgLy8gRnJhbWluZyBjb250cm9sCisgICAgICAgIHRoaXMuX2FuaW1hdGFibGVzID0g
bmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX2JldGFJc0FuaW1hdGluZyA9IGZhbHNlOworICAg
IH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnJhbWluZ0JlaGF2aW9yLnByb3RvdHlwZSwg
Im5hbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBi
ZWhhdmlvci4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuICJGcmFtaW5nIjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUsICJtb2RlIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyBjdXJyZW50IG1vZGUgdXNlZCBieSB0aGUgYmVoYXZpb3Iu
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9tb2RlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0
cyB0aGUgY3VycmVudCBtb2RlIHVzZWQgYnkgdGhlIGJlaGF2aW9yCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uIChtb2RlKSB7CisgICAgICAgICAgICB0aGlzLl9tb2RlID0gbW9k
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZyYW1pbmdC
ZWhhdmlvci5wcm90b3R5cGUsICJyYWRpdXNTY2FsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgdGhlIHNjYWxlIGFwcGxpZWQgdG8gdGhlIHJhZGl1cworICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmFkaXVz
U2NhbGU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBzY2Fs
ZSBhcHBsaWVkIHRvIHRoZSByYWRpdXMgKDEgYnkgZGVmYXVsdCkKKyAgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHJhZGl1cykgeworICAgICAgICAgICAgdGhpcy5fcmFkaXVzU2Nh
bGUgPSByYWRpdXM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLCAicG9zaXRpb25TY2FsZSIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIHNjYWxlIHRvIGFwcGx5IG9uIFkgYXhpcyB0byBwb3Np
dGlvbiBjYW1lcmEgZm9jdXMuIDAuNSBieSBkZWZhdWx0IHdoaWNoIG1lYW5zIHRoZSBjZW50ZXIg
b2YgdGhlIGJvdW5kaW5nIGJveC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uU2NhbGU7CisgICAgICAgIH0s
CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBzY2FsZSB0byBhcHBseSBvbiBZIGF4
aXMgdG8gcG9zaXRpb24gY2FtZXJhIGZvY3VzLiAwLjUgYnkgZGVmYXVsdCB3aGljaCBtZWFucyB0
aGUgY2VudGVyIG9mIHRoZSBib3VuZGluZyBib3guCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uIChzY2FsZSkgeworICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25TY2FsZSA9IHNj
YWxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnJhbWlu
Z0JlaGF2aW9yLnByb3RvdHlwZSwgImRlZmF1bHRFbGV2YXRpb24iLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAqIEdldHMgdGhlIGFuZ2xlIGFib3ZlL2JlbG93IHRoZSBob3Jpem9udGFsIHBsYW5l
IHRvIHJldHVybiB0byB3aGVuIHRoZSByZXR1cm4gdG8gZGVmYXVsdCBlbGV2YXRpb24gaWRsZQor
ICAgICAgICAqIGJlaGF2aW91ciBpcyB0cmlnZ2VyZWQsIGluIHJhZGlhbnMuCisgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rl
ZmF1bHRFbGV2YXRpb247CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAqIFNldHMg
dGhlIGFuZ2xlIGFib3ZlL2JlbG93IHRoZSBob3Jpem9udGFsIHBsYW5lIHRvIHJldHVybiB0byB3
aGVuIHRoZSByZXR1cm4gdG8gZGVmYXVsdCBlbGV2YXRpb24gaWRsZQorICAgICAgICAqIGJlaGF2
aW91ciBpcyB0cmlnZ2VyZWQsIGluIHJhZGlhbnMuCisgICAgICAgICovCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKGVsZXZhdGlvbikgeworICAgICAgICAgICAgdGhpcy5fZGVmYXVsdEVsZXZhdGlv
biA9IGVsZXZhdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUsICJlbGV2YXRpb25SZXR1cm5UaW1lIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSB0
YWtlbiB0byByZXR1cm4gdG8gdGhlIGRlZmF1bHQgYmV0YSBwb3NpdGlvbi4KKyAgICAgICAgICog
TmVnYXRpdmUgdmFsdWUgaW5kaWNhdGVzIGNhbWVyYSBzaG91bGQgbm90IHJldHVybiB0byBkZWZh
dWx0LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZWxldmF0aW9uUmV0dXJuVGltZTsKKyAgICAgICAgfSwKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFNldHMgdGhlIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGFrZW4gdG8g
cmV0dXJuIHRvIHRoZSBkZWZhdWx0IGJldGEgcG9zaXRpb24uCisgICAgICAgICAqIE5lZ2F0aXZl
IHZhbHVlIGluZGljYXRlcyBjYW1lcmEgc2hvdWxkIG5vdCByZXR1cm4gdG8gZGVmYXVsdC4KKyAg
ICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHNwZWVkKSB7CisgICAgICAgICAgICB0
aGlzLl9lbGV2YXRpb25SZXR1cm5UaW1lID0gc3BlZWQ7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLCAiZWxldmF0
aW9uUmV0dXJuV2FpdFRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBk
ZWxheSAoaW4gbWlsbGlzZWNvbmRzKSB0YWtlbiBiZWZvcmUgdGhlIGNhbWVyYSByZXR1cm5zIHRv
IHRoZSBkZWZhdWx0IGJldGEgcG9zaXRpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbGV2YXRpb25SZXR1cm5XYWl0
VGltZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGRlbGF5
IChpbiBtaWxsaXNlY29uZHMpIHRha2VuIGJlZm9yZSB0aGUgY2FtZXJhIHJldHVybnMgdG8gdGhl
IGRlZmF1bHQgYmV0YSBwb3NpdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHRpbWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2VsZXZhdGlvblJldHVybldhaXRUaW1lID0g
dGltZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZyYW1p
bmdCZWhhdmlvci5wcm90b3R5cGUsICJ6b29tU3RvcHNBbmltYXRpb24iLCB7CisgICAgICAgIC8q
KgorICAgICAgICAqIEdldHMgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgdXNlciB6b29taW5n
IHNob3VsZCBzdG9wIGFuaW1hdGlvbi4KKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fem9vbVN0b3BzQW5pbWF0aW9uOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgKiBTZXRzIHRoZSBmbGFnIHRoYXQgaW5kaWNh
dGVzIGlmIHVzZXIgem9vbWluZyBzaG91bGQgc3RvcCBhbmltYXRpb24uCisgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKGZsYWcpIHsKKyAgICAgICAgICAgIHRoaXMuX3pvb21TdG9w
c0FuaW1hdGlvbiA9IGZsYWc7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLCAiZnJhbWluZ1RpbWUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB0cmFuc2l0aW9uIHRpbWUgd2hlbiBmcmFtaW5n
IHRoZSBtZXNoLCBpbiBtaWxsaXNlY29uZHMKKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWluZ1RpbWU7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB0cmFuc2l0aW9uIHRpbWUgd2hl
biBmcmFtaW5nIHRoZSBtZXNoLCBpbiBtaWxsaXNlY29uZHMKKyAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodGltZSkgeworICAgICAgICAgICAgdGhpcy5fZnJhbWluZ1RpbWUgPSB0
aW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUg
YmVoYXZpb3IuCisgICAgICovCisgICAgRnJhbWluZ0JlaGF2aW9yLnByb3RvdHlwZS5pbml0ID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBEbyBub3RpaG5nCisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBdHRhY2hlcyB0aGUgYmVoYXZpb3IgdG8gaXRzIGFyYyByb3RhdGUgY2FtZXJhLgorICAg
ICAqIEBwYXJhbSBjYW1lcmEgRGVmaW5lcyB0aGUgY2FtZXJhIHRvIGF0dGFjaCB0aGUgYmVoYXZp
b3IgdG8KKyAgICAgKi8KKyAgICBGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLmF0dGFjaCA9IGZ1
bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhp
cy5fYXR0YWNoZWRDYW1lcmEgPSBjYW1lcmE7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX2F0
dGFjaGVkQ2FtZXJhLmdldFNjZW5lKCk7CisgICAgICAgIEZyYW1pbmdCZWhhdmlvci5FYXNpbmdG
dW5jdGlvbi5zZXRFYXNpbmdNb2RlKEZyYW1pbmdCZWhhdmlvci5FYXNpbmdNb2RlKTsKKyAgICAg
ICAgdGhpcy5fb25QcmVQb2ludGVyT2JzZXJ2YWJsZU9ic2VydmVyID0gc2NlbmUub25QcmVQb2lu
dGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHBvaW50ZXJJbmZvUHJlKSB7CisgICAgICAgICAg
ICBpZiAocG9pbnRlckluZm9QcmUudHlwZSA9PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04p
IHsKKyAgICAgICAgICAgICAgICBfdGhpcy5faXNQb2ludGVyRG93biA9IHRydWU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvaW50ZXJJ
bmZvUHJlLnR5cGUgPT09IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJVUCkgeworICAgICAgICAgICAg
ICAgIF90aGlzLl9pc1BvaW50ZXJEb3duID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0pOworICAgICAgICB0aGlzLl9vbk1lc2hUYXJnZXRDaGFuZ2VkT2JzZXJ2ZXIgPSBjYW1lcmEu
b25NZXNoVGFyZ2V0Q2hhbmdlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChtZXNoKSB7CisgICAg
ICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgICAgIF90aGlzLnpvb21Pbk1lc2gobWVz
aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9vbkFmdGVyQ2hl
Y2tJbnB1dHNPYnNlcnZlciA9IGNhbWVyYS5vbkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZhYmxlLmFk
ZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyBTdG9wIHRoZSBhbmltYXRpb24gaWYgdGhl
cmUgaXMgdXNlciBpbnRlcmFjdGlvbiBhbmQgdGhlIGFuaW1hdGlvbiBzaG91bGQgc3RvcCBmb3Ig
dGhpcyBpbnRlcmFjdGlvbgorICAgICAgICAgICAgX3RoaXMuX2FwcGx5VXNlckludGVyYWN0aW9u
KCk7CisgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgY2FtZXJhIGFib3ZlIHRoZSBncm91bmQu
IElmIHRoZSB1c2VyIHB1bGxzIHRoZSBjYW1lcmEgYmVuZWF0aCB0aGUgZ3JvdW5kIHBsYW5lLCBs
aWZ0IGl0CisgICAgICAgICAgICAvLyBiYWNrIHRvIHRoZSBkZWZhdWx0IHBvc2l0aW9uIGFmdGVy
IGEgZ2l2ZW4gdGltZW91dAorICAgICAgICAgICAgX3RoaXMuX21haW50YWluQ2FtZXJhQWJvdmVH
cm91bmQoKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRhY2hlcyB0
aGUgYmVoYXZpb3IgZnJvbSBpdHMgY3VycmVudCBhcmMgcm90YXRlIGNhbWVyYS4KKyAgICAgKi8K
KyAgICBGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX2F0dGFjaGVkQ2FtZXJhLmdldFNj
ZW5lKCk7CisgICAgICAgIGlmICh0aGlzLl9vblByZVBvaW50ZXJPYnNlcnZhYmxlT2JzZXJ2ZXIp
IHsKKyAgICAgICAgICAgIHNjZW5lLm9uUHJlUG9pbnRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMu
X29uUHJlUG9pbnRlck9ic2VydmFibGVPYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX29uQWZ0ZXJDaGVja0lucHV0c09ic2VydmVyKSB7CisgICAgICAgICAgICB0aGlzLl9h
dHRhY2hlZENhbWVyYS5vbkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9v
bkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X29uTWVzaFRhcmdldENoYW5nZWRPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5fYXR0YWNo
ZWRDYW1lcmEub25NZXNoVGFyZ2V0Q2hhbmdlZE9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uTWVz
aFRhcmdldENoYW5nZWRPYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYXR0YWNo
ZWRDYW1lcmEgPSBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogVGFyZ2V0cyB0aGUgZ2l2
ZW4gbWVzaCBhbmQgdXBkYXRlcyB6b29tIGxldmVsIGFjY29yZGluZ2x5LgorICAgICAqIEBwYXJh
bSBtZXNoICBUaGUgbWVzaCB0byB0YXJnZXQuCisgICAgICogQHBhcmFtIHJhZGl1cyBPcHRpb25h
bC4gSWYgYSBjYWNoZWQgcmFkaXVzIHBvc2l0aW9uIGFscmVhZHkgZXhpc3RzLCBvdmVycmlkZXMg
ZGVmYXVsdC4KKyAgICAgKiBAcGFyYW0gZnJhbWluZ1Bvc2l0aW9uWSBQb3NpdGlvbiBvbiBtZXNo
IHRvIGNlbnRlciBjYW1lcmEgZm9jdXMgd2hlcmUgMCBjb3JyZXNwb25kcyBib3R0b20gb2YgaXRz
IGJvdW5kaW5nIGJveCBhbmQgMSwgdGhlIHRvcAorICAgICAqIEBwYXJhbSBmb2N1c09uT3JpZ2lu
WFogRGV0ZXJtaW5lcyBpZiB0aGUgY2FtZXJhIHNob3VsZCBmb2N1cyBvbiAwIGluIHRoZSBYIGFu
ZCBaIGF4aXMgaW5zdGVhZCBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvbkFuaW1hdGlvbkVu
ZCBDYWxsYmFjayB0cmlnZ2VyZWQgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWluZyBhbmltYXRpb24K
KyAgICAgKi8KKyAgICBGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLnpvb21Pbk1lc2ggPSBmdW5j
dGlvbiAobWVzaCwgZm9jdXNPbk9yaWdpblhaLCBvbkFuaW1hdGlvbkVuZCkgeworICAgICAgICBp
ZiAoZm9jdXNPbk9yaWdpblhaID09PSB2b2lkIDApIHsgZm9jdXNPbk9yaWdpblhaID0gZmFsc2U7
IH0KKyAgICAgICAgaWYgKG9uQW5pbWF0aW9uRW5kID09PSB2b2lkIDApIHsgb25BbmltYXRpb25F
bmQgPSBudWxsOyB9CisgICAgICAgIG1lc2guY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAg
ICAgICB2YXIgYm91bmRpbmdCb3ggPSBtZXNoLmdldEJvdW5kaW5nSW5mbygpLmJvdW5kaW5nQm94
OworICAgICAgICB0aGlzLnpvb21PbkJvdW5kaW5nSW5mbyhib3VuZGluZ0JveC5taW5pbXVtV29y
bGQsIGJvdW5kaW5nQm94Lm1heGltdW1Xb3JsZCwgZm9jdXNPbk9yaWdpblhaLCBvbkFuaW1hdGlv
bkVuZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUYXJnZXRzIHRoZSBnaXZlbiBtZXNoIHdp
dGggaXRzIGNoaWxkcmVuIGFuZCB1cGRhdGVzIHpvb20gbGV2ZWwgYWNjb3JkaW5nbHkuCisgICAg
ICogQHBhcmFtIG1lc2ggIFRoZSBtZXNoIHRvIHRhcmdldC4KKyAgICAgKiBAcGFyYW0gcmFkaXVz
IE9wdGlvbmFsLiBJZiBhIGNhY2hlZCByYWRpdXMgcG9zaXRpb24gYWxyZWFkeSBleGlzdHMsIG92
ZXJyaWRlcyBkZWZhdWx0LgorICAgICAqIEBwYXJhbSBmcmFtaW5nUG9zaXRpb25ZIFBvc2l0aW9u
IG9uIG1lc2ggdG8gY2VudGVyIGNhbWVyYSBmb2N1cyB3aGVyZSAwIGNvcnJlc3BvbmRzIGJvdHRv
bSBvZiBpdHMgYm91bmRpbmcgYm94IGFuZCAxLCB0aGUgdG9wCisgICAgICogQHBhcmFtIGZvY3Vz
T25PcmlnaW5YWiBEZXRlcm1pbmVzIGlmIHRoZSBjYW1lcmEgc2hvdWxkIGZvY3VzIG9uIDAgaW4g
dGhlIFggYW5kIFogYXhpcyBpbnN0ZWFkIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9uQW5p
bWF0aW9uRW5kIENhbGxiYWNrIHRyaWdnZXJlZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtaW5nIGFu
aW1hdGlvbgorICAgICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUuem9vbU9uTWVz
aEhpZXJhcmNoeSA9IGZ1bmN0aW9uIChtZXNoLCBmb2N1c09uT3JpZ2luWFosIG9uQW5pbWF0aW9u
RW5kKSB7CisgICAgICAgIGlmIChmb2N1c09uT3JpZ2luWFogPT09IHZvaWQgMCkgeyBmb2N1c09u
T3JpZ2luWFogPSBmYWxzZTsgfQorICAgICAgICBpZiAob25BbmltYXRpb25FbmQgPT09IHZvaWQg
MCkgeyBvbkFuaW1hdGlvbkVuZCA9IG51bGw7IH0KKyAgICAgICAgbWVzaC5jb21wdXRlV29ybGRN
YXRyaXgodHJ1ZSk7CisgICAgICAgIHZhciBib3VuZGluZ0JveCA9IG1lc2guZ2V0SGllcmFyY2h5
Qm91bmRpbmdWZWN0b3JzKHRydWUpOworICAgICAgICB0aGlzLnpvb21PbkJvdW5kaW5nSW5mbyhi
b3VuZGluZ0JveC5taW4sIGJvdW5kaW5nQm94Lm1heCwgZm9jdXNPbk9yaWdpblhaLCBvbkFuaW1h
dGlvbkVuZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUYXJnZXRzIHRoZSBnaXZlbiBtZXNo
ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBhbmQgdXBkYXRlcyB6b29tIGxldmVsIGFjY29yZGluZ2x5
LgorICAgICAqIEBwYXJhbSBtZXNoZXMgIFRoZSBtZXNoIHRvIHRhcmdldC4KKyAgICAgKiBAcGFy
YW0gcmFkaXVzIE9wdGlvbmFsLiBJZiBhIGNhY2hlZCByYWRpdXMgcG9zaXRpb24gYWxyZWFkeSBl
eGlzdHMsIG92ZXJyaWRlcyBkZWZhdWx0LgorICAgICAqIEBwYXJhbSBmcmFtaW5nUG9zaXRpb25Z
IFBvc2l0aW9uIG9uIG1lc2ggdG8gY2VudGVyIGNhbWVyYSBmb2N1cyB3aGVyZSAwIGNvcnJlc3Bv
bmRzIGJvdHRvbSBvZiBpdHMgYm91bmRpbmcgYm94IGFuZCAxLCB0aGUgdG9wCisgICAgICogQHBh
cmFtIGZvY3VzT25PcmlnaW5YWiBEZXRlcm1pbmVzIGlmIHRoZSBjYW1lcmEgc2hvdWxkIGZvY3Vz
IG9uIDAgaW4gdGhlIFggYW5kIFogYXhpcyBpbnN0ZWFkIG9mIHRoZSBtZXNoCisgICAgICogQHBh
cmFtIG9uQW5pbWF0aW9uRW5kIENhbGxiYWNrIHRyaWdnZXJlZCBhdCB0aGUgZW5kIG9mIHRoZSBm
cmFtaW5nIGFuaW1hdGlvbgorICAgICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUu
em9vbU9uTWVzaGVzSGllcmFyY2h5ID0gZnVuY3Rpb24gKG1lc2hlcywgZm9jdXNPbk9yaWdpblha
LCBvbkFuaW1hdGlvbkVuZCkgeworICAgICAgICBpZiAoZm9jdXNPbk9yaWdpblhaID09PSB2b2lk
IDApIHsgZm9jdXNPbk9yaWdpblhaID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKG9uQW5pbWF0aW9u
RW5kID09PSB2b2lkIDApIHsgb25BbmltYXRpb25FbmQgPSBudWxsOyB9CisgICAgICAgIHZhciBt
aW4gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXShOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFY
X1ZBTFVFKTsKKyAgICAgICAgdmFyIG1heCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKC1OdW1iZXIuTUFYX1ZBTFVFLCAtTnVt
YmVyLk1BWF9WQUxVRSwgLU51bWJlci5NQVhfVkFMVUUpOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG1lc2hlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5m
byA9IG1lc2hlc1tpXS5nZXRIaWVyYXJjaHlCb3VuZGluZ1ZlY3RvcnModHJ1ZSk7CisgICAgICAg
ICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMyJdLkNoZWNrRXh0ZW5kcyhib3VuZGluZ0luZm8ubWluLCBtaW4sIG1heCk7CisgICAgICAg
ICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMyJdLkNoZWNrRXh0ZW5kcyhib3VuZGluZ0luZm8ubWF4LCBtaW4sIG1heCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy56b29tT25Cb3VuZGluZ0luZm8obWluLCBtYXgsIGZvY3VzT25Pcmln
aW5YWiwgb25BbmltYXRpb25FbmQpOworICAgIH07CisgICAgLyoqCisgICAgICogVGFyZ2V0cyB0
aGUgYm91bmRpbmcgYm94IGluZm8gZGVmaW5lZCBieSBpdHMgZXh0ZW5kcyBhbmQgdXBkYXRlcyB6
b29tIGxldmVsIGFjY29yZGluZ2x5LgorICAgICAqIEBwYXJhbSBtaW5pbXVtV29ybGQgRGV0ZXJt
aW5lcyB0aGUgc21hbGxlciBwb3NpdGlvbiBvZiB0aGUgYm91bmRpbmcgYm94IGV4dGVuZAorICAg
ICAqIEBwYXJhbSBtYXhpbXVtV29ybGQgRGV0ZXJtaW5lcyB0aGUgYmlnZ2VyIHBvc2l0aW9uIG9m
IHRoZSBib3VuZGluZyBib3ggZXh0ZW5kCisgICAgICogQHBhcmFtIGZvY3VzT25PcmlnaW5YWiBE
ZXRlcm1pbmVzIGlmIHRoZSBjYW1lcmEgc2hvdWxkIGZvY3VzIG9uIDAgaW4gdGhlIFggYW5kIFog
YXhpcyBpbnN0ZWFkIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9uQW5pbWF0aW9uRW5kIENh
bGxiYWNrIHRyaWdnZXJlZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtaW5nIGFuaW1hdGlvbgorICAg
ICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUuem9vbU9uQm91bmRpbmdJbmZvID0g
ZnVuY3Rpb24gKG1pbmltdW1Xb3JsZCwgbWF4aW11bVdvcmxkLCBmb2N1c09uT3JpZ2luWFosIG9u
QW5pbWF0aW9uRW5kKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChm
b2N1c09uT3JpZ2luWFogPT09IHZvaWQgMCkgeyBmb2N1c09uT3JpZ2luWFogPSBmYWxzZTsgfQor
ICAgICAgICBpZiAob25BbmltYXRpb25FbmQgPT09IHZvaWQgMCkgeyBvbkFuaW1hdGlvbkVuZCA9
IG51bGw7IH0KKyAgICAgICAgdmFyIHpvb21UYXJnZXQ7CisgICAgICAgIGlmICghdGhpcy5fYXR0
YWNoZWRDYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAv
LyBGaW5kIHRhcmdldCBieSBpbnRlcnBvbGF0aW5nIGZyb20gYm90dG9tIG9mIGJvdW5kaW5nIGJv
eCBpbiB3b3JsZC1zcGFjZSB0byB0b3AgdmlhIGZyYW1pbmdQb3NpdGlvblkKKyAgICAgICAgdmFy
IGJvdHRvbSA9IG1pbmltdW1Xb3JsZC55OworICAgICAgICB2YXIgdG9wID0gbWF4aW11bVdvcmxk
Lnk7CisgICAgICAgIHZhciB6b29tVGFyZ2V0WSA9IGJvdHRvbSArICh0b3AgLSBib3R0b20pICog
dGhpcy5fcG9zaXRpb25TY2FsZTsKKyAgICAgICAgdmFyIHJhZGl1c1dvcmxkID0gbWF4aW11bVdv
cmxkLnN1YnRyYWN0KG1pbmltdW1Xb3JsZCkuc2NhbGUoMC41KTsKKyAgICAgICAgaWYgKGZvY3Vz
T25PcmlnaW5YWikgeworICAgICAgICAgICAgem9vbVRhcmdldCA9IG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIHpvb21UYXJn
ZXRZLCAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBjZW50
ZXJXb3JsZCA9IG1pbmltdW1Xb3JsZC5hZGQocmFkaXVzV29ybGQpOworICAgICAgICAgICAgem9v
bVRhcmdldCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVjdG9yMyJdKGNlbnRlcldvcmxkLngsIHpvb21UYXJnZXRZLCBjZW50ZXJXb3JsZC56
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX3ZlY3RvclRyYW5zaXRpb24pIHsKKyAg
ICAgICAgICAgIHRoaXMuX3ZlY3RvclRyYW5zaXRpb24gPSBfQW5pbWF0aW9uc19hbmltYXRpb25f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQW5pbWF0aW9uIl0uQ3JlYXRlQW5pbWF0aW9u
KCJ0YXJnZXQiLCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9WRUNUT1IzLCA2MCwgRnJhbWluZ0JlaGF2
aW9yLkVhc2luZ0Z1bmN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9iZXRhSXNBbmlt
YXRpbmcgPSB0cnVlOworICAgICAgICB2YXIgYW5pbWF0YWJsZSA9IF9BbmltYXRpb25zX2FuaW1h
dGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBbmltYXRpb24iXS5UcmFuc2l0aW9u
VG8oInRhcmdldCIsIHpvb21UYXJnZXQsIHRoaXMuX2F0dGFjaGVkQ2FtZXJhLCB0aGlzLl9hdHRh
Y2hlZENhbWVyYS5nZXRTY2VuZSgpLCA2MCwgdGhpcy5fdmVjdG9yVHJhbnNpdGlvbiwgdGhpcy5f
ZnJhbWluZ1RpbWUpOworICAgICAgICBpZiAoYW5pbWF0YWJsZSkgeworICAgICAgICAgICAgdGhp
cy5fYW5pbWF0YWJsZXMucHVzaChhbmltYXRhYmxlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBz
ZXRzIHRoZSByYWRpdXMgYW5kIGxvd2VyIHJhZGl1cyBib3VuZHMKKyAgICAgICAgLy8gU21hbGwg
ZGVsdGEgZW5zdXJlcyBjYW1lcmEgaXMgbm90IGFsd2F5cyBhdCBsb3dlciB6b29tIGxpbWl0Lgor
ICAgICAgICB2YXIgcmFkaXVzID0gMDsKKyAgICAgICAgaWYgKHRoaXMuX21vZGUgPT09IEZyYW1p
bmdCZWhhdmlvci5GaXRGcnVzdHVtU2lkZXNNb2RlKSB7CisgICAgICAgICAgICB2YXIgcG9zaXRp
b24gPSB0aGlzLl9jYWxjdWxhdGVMb3dlclJhZGl1c0Zyb21Nb2RlbEJvdW5kaW5nU3BoZXJlKG1p
bmltdW1Xb3JsZCwgbWF4aW11bVdvcmxkKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmF1dG9Db3Jy
ZWN0Q2FtZXJhTGltaXRzQW5kU2Vuc2liaWxpdHkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9h
dHRhY2hlZENhbWVyYS5sb3dlclJhZGl1c0xpbWl0ID0gcmFkaXVzV29ybGQubGVuZ3RoKCkgKyB0
aGlzLl9hdHRhY2hlZENhbWVyYS5taW5aOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmFk
aXVzID0gcG9zaXRpb247CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5fbW9kZSA9
PT0gRnJhbWluZ0JlaGF2aW9yLklnbm9yZUJvdW5kc1NpemVNb2RlKSB7CisgICAgICAgICAgICBy
YWRpdXMgPSB0aGlzLl9jYWxjdWxhdGVMb3dlclJhZGl1c0Zyb21Nb2RlbEJvdW5kaW5nU3BoZXJl
KG1pbmltdW1Xb3JsZCwgbWF4aW11bVdvcmxkKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmF1dG9D
b3JyZWN0Q2FtZXJhTGltaXRzQW5kU2Vuc2liaWxpdHkgJiYgdGhpcy5fYXR0YWNoZWRDYW1lcmEu
bG93ZXJSYWRpdXNMaW1pdCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFj
aGVkQ2FtZXJhLmxvd2VyUmFkaXVzTGltaXQgPSB0aGlzLl9hdHRhY2hlZENhbWVyYS5taW5aOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFNldCBzZW5zaWJpbGl0aWVzCisg
ICAgICAgIGlmICh0aGlzLmF1dG9Db3JyZWN0Q2FtZXJhTGltaXRzQW5kU2Vuc2liaWxpdHkpIHsK
KyAgICAgICAgICAgIHZhciBleHRlbmQgPSBtYXhpbXVtV29ybGQuc3VidHJhY3QobWluaW11bVdv
cmxkKS5sZW5ndGgoKTsKKyAgICAgICAgICAgIHRoaXMuX2F0dGFjaGVkQ2FtZXJhLnBhbm5pbmdT
ZW5zaWJpbGl0eSA9IDUwMDAgLyBleHRlbmQ7CisgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZENh
bWVyYS53aGVlbFByZWNpc2lvbiA9IDEwMCAvIHJhZGl1czsKKyAgICAgICAgfQorICAgICAgICAv
LyB0cmFuc2l0aW9uIHRvIG5ldyByYWRpdXMKKyAgICAgICAgaWYgKCF0aGlzLl9yYWRpdXNUcmFu
c2l0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl9yYWRpdXNUcmFuc2l0aW9uID0gX0FuaW1hdGlv
bnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFuaW1hdGlvbiJdLkNy
ZWF0ZUFuaW1hdGlvbigicmFkaXVzIiwgX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVfRkxPQVQsIDYwLCBG
cmFtaW5nQmVoYXZpb3IuRWFzaW5nRnVuY3Rpb24pOworICAgICAgICB9CisgICAgICAgIGFuaW1h
dGFibGUgPSBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siQW5pbWF0aW9uIl0uVHJhbnNpdGlvblRvKCJyYWRpdXMiLCByYWRpdXMsIHRoaXMuX2F0dGFj
aGVkQ2FtZXJhLCB0aGlzLl9hdHRhY2hlZENhbWVyYS5nZXRTY2VuZSgpLCA2MCwgdGhpcy5fcmFk
aXVzVHJhbnNpdGlvbiwgdGhpcy5fZnJhbWluZ1RpbWUsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIF90aGlzLnN0b3BBbGxBbmltYXRpb25zKCk7CisgICAgICAgICAgICBpZiAob25BbmltYXRp
b25FbmQpIHsKKyAgICAgICAgICAgICAgICBvbkFuaW1hdGlvbkVuZCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKF90aGlzLl9hdHRhY2hlZENhbWVyYSAmJiBfdGhpcy5fYXR0YWNo
ZWRDYW1lcmEudXNlSW5wdXRUb1Jlc3RvcmVTdGF0ZSkgeworICAgICAgICAgICAgICAgIF90aGlz
Ll9hdHRhY2hlZENhbWVyYS5zdG9yZVN0YXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgICAgICBpZiAoYW5pbWF0YWJsZSkgeworICAgICAgICAgICAgdGhpcy5fYW5pbWF0YWJs
ZXMucHVzaChhbmltYXRhYmxlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
Q2FsY3VsYXRlcyB0aGUgbG93ZXN0IHJhZGl1cyBmb3IgdGhlIGNhbWVyYSBiYXNlZCBvbiB0aGUg
Ym91bmRpbmcgYm94IG9mIHRoZSBtZXNoLgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIG9u
IHdoaWNoIHRvIGJhc2UgdGhlIGNhbGN1bGF0aW9uLiBtZXNoIGJvdW5kaW5nSW5mbyB1c2VkIHRv
IGVzdGltYXRlIG5lY2Vzc2FyeQorICAgICAqCQkJICBmcnVzdHVtIHdpZHRoLgorICAgICAqIEBy
ZXR1cm4gVGhlIG1pbmltdW0gZGlzdGFuY2UgZnJvbSB0aGUgcHJpbWFyeSBtZXNoJ3MgY2VudGVy
IHBvaW50IGF0IHdoaWNoIHRoZSBjYW1lcmEgbXVzdCBiZSBrZXB0IGluIG9yZGVyCisgICAgICoJ
CSB0byBmdWxseSBlbmNsb3NlIHRoZSBtZXNoIGluIHRoZSB2aWV3aW5nIGZydXN0dW0uCisgICAg
ICovCisgICAgRnJhbWluZ0JlaGF2aW9yLnByb3RvdHlwZS5fY2FsY3VsYXRlTG93ZXJSYWRpdXNG
cm9tTW9kZWxCb3VuZGluZ1NwaGVyZSA9IGZ1bmN0aW9uIChtaW5pbXVtV29ybGQsIG1heGltdW1X
b3JsZCkgeworICAgICAgICB2YXIgc2l6ZSA9IG1heGltdW1Xb3JsZC5zdWJ0cmFjdChtaW5pbXVt
V29ybGQpOworICAgICAgICB2YXIgYm94VmVjdG9yR2xvYmFsRGlhZ29uYWwgPSBzaXplLmxlbmd0
aCgpOworICAgICAgICB2YXIgZnJ1c3R1bVNsb3BlID0gdGhpcy5fZ2V0RnJ1c3R1bVNsb3BlKCk7
CisgICAgICAgIC8vIEZvcm11bGEgZm9yIHNldHRpbmcgZGlzdGFuY2UKKyAgICAgICAgLy8gKEdv
b2QgZXhwbGFuYXRpb246IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjg2NjM1
MC9tb3ZlLWNhbWVyYS10by1maXQtM2Qtc2NlbmUpCisgICAgICAgIHZhciByYWRpdXNXaXRob3V0
RnJhbWluZyA9IGJveFZlY3Rvckdsb2JhbERpYWdvbmFsICogMC41OworICAgICAgICAvLyBIb3Jp
em9uIGRpc3RhbmNlCisgICAgICAgIHZhciByYWRpdXMgPSByYWRpdXNXaXRob3V0RnJhbWluZyAq
IHRoaXMuX3JhZGl1c1NjYWxlOworICAgICAgICB2YXIgZGlzdGFuY2VGb3JIb3Jpem9udGFsRnJ1
c3R1bSA9IHJhZGl1cyAqIE1hdGguc3FydCgxLjAgKyAxLjAgLyAoZnJ1c3R1bVNsb3BlLnggKiBm
cnVzdHVtU2xvcGUueCkpOworICAgICAgICB2YXIgZGlzdGFuY2VGb3JWZXJ0aWNhbEZydXN0dW0g
PSByYWRpdXMgKiBNYXRoLnNxcnQoMS4wICsgMS4wIC8gKGZydXN0dW1TbG9wZS55ICogZnJ1c3R1
bVNsb3BlLnkpKTsKKyAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5tYXgoZGlzdGFuY2VGb3JI
b3Jpem9udGFsRnJ1c3R1bSwgZGlzdGFuY2VGb3JWZXJ0aWNhbEZydXN0dW0pOworICAgICAgICB2
YXIgY2FtZXJhID0gdGhpcy5fYXR0YWNoZWRDYW1lcmE7CisgICAgICAgIGlmICghY2FtZXJhKSB7
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FtZXJhLmxv
d2VyUmFkaXVzTGltaXQgJiYgdGhpcy5fbW9kZSA9PT0gRnJhbWluZ0JlaGF2aW9yLklnbm9yZUJv
dW5kc1NpemVNb2RlKSB7CisgICAgICAgICAgICAvLyBEb24ndCBleGNlZWQgdGhlIHJlcXVlc3Rl
ZCBsaW1pdAorICAgICAgICAgICAgZGlzdGFuY2UgPSBkaXN0YW5jZSA8IGNhbWVyYS5sb3dlclJh
ZGl1c0xpbWl0ID8gY2FtZXJhLmxvd2VyUmFkaXVzTGltaXQgOiBkaXN0YW5jZTsKKyAgICAgICAg
fQorICAgICAgICAvLyBEb24ndCBleGNlZWQgdGhlIHVwcGVyIHJhZGl1cyBsaW1pdAorICAgICAg
ICBpZiAoY2FtZXJhLnVwcGVyUmFkaXVzTGltaXQpIHsKKyAgICAgICAgICAgIGRpc3RhbmNlID0g
ZGlzdGFuY2UgPiBjYW1lcmEudXBwZXJSYWRpdXNMaW1pdCA/IGNhbWVyYS51cHBlclJhZGl1c0xp
bWl0IDogZGlzdGFuY2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRpc3RhbmNlOworICAg
IH07CisgICAgLyoqCisgICAgICogS2VlcHMgdGhlIGNhbWVyYSBhYm92ZSB0aGUgZ3JvdW5kIHBs
YW5lLiBJZiB0aGUgdXNlciBwdWxscyB0aGUgY2FtZXJhIGJlbG93IHRoZSBncm91bmQgcGxhbmUs
IHRoZSBjYW1lcmEKKyAgICAgKiBpcyBhdXRvbWF0aWNhbGx5IHJldHVybmVkIHRvIGl0cyBkZWZh
dWx0IHBvc2l0aW9uIChleHBlY3RlZCB0byBiZSBhYm92ZSBncm91bmQgcGxhbmUpLgorICAgICAq
LworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUuX21haW50YWluQ2FtZXJhQWJvdmVHcm91
bmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlm
ICh0aGlzLl9lbGV2YXRpb25SZXR1cm5UaW1lIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHZhciB0aW1lU2luY2VJbnRlcmFjdGlvbiA9IF9NaXNjX3ByZWNp
c2lvbkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUHJlY2lzaW9uRGF0ZSJdLk5v
dyAtIHRoaXMuX2xhc3RJbnRlcmFjdGlvblRpbWU7CisgICAgICAgIHZhciBkZWZhdWx0QmV0YSA9
IE1hdGguUEkgKiAwLjUgLSB0aGlzLl9kZWZhdWx0RWxldmF0aW9uOworICAgICAgICB2YXIgbGlt
aXRCZXRhID0gTWF0aC5QSSAqIDAuNTsKKyAgICAgICAgLy8gQnJpbmcgdGhlIGNhbWVyYSBiYWNr
IHVwIGlmIGJlbG93IHRoZSBncm91bmQgcGxhbmUKKyAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVk
Q2FtZXJhICYmICF0aGlzLl9iZXRhSXNBbmltYXRpbmcgJiYgdGhpcy5fYXR0YWNoZWRDYW1lcmEu
YmV0YSA+IGxpbWl0QmV0YSAmJiB0aW1lU2luY2VJbnRlcmFjdGlvbiA+PSB0aGlzLl9lbGV2YXRp
b25SZXR1cm5XYWl0VGltZSkgeworICAgICAgICAgICAgdGhpcy5fYmV0YUlzQW5pbWF0aW5nID0g
dHJ1ZTsKKyAgICAgICAgICAgIC8vVHJhbnNpdGlvbiB0byBuZXcgcG9zaXRpb24KKyAgICAgICAg
ICAgIHRoaXMuc3RvcEFsbEFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5fYmV0
YVRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9iZXRhVHJhbnNpdGlvbiA9IF9B
bmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBbmltYXRp
b24iXS5DcmVhdGVBbmltYXRpb24oImJldGEiLCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OVFlQRV9GTE9BVCwg
NjAsIEZyYW1pbmdCZWhhdmlvci5FYXNpbmdGdW5jdGlvbik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB2YXIgYW5pbWF0YWJlID0gX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIkFuaW1hdGlvbiJdLlRyYW5zaXRpb25UbygiYmV0YSIsIGRlZmF1
bHRCZXRhLCB0aGlzLl9hdHRhY2hlZENhbWVyYSwgdGhpcy5fYXR0YWNoZWRDYW1lcmEuZ2V0U2Nl
bmUoKSwgNjAsIHRoaXMuX2JldGFUcmFuc2l0aW9uLCB0aGlzLl9lbGV2YXRpb25SZXR1cm5UaW1l
LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2NsZWFyQW5pbWF0aW9uTG9j
a3MoKTsKKyAgICAgICAgICAgICAgICBfdGhpcy5zdG9wQWxsQW5pbWF0aW9ucygpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBpZiAoYW5pbWF0YWJlKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fYW5pbWF0YWJsZXMucHVzaChhbmltYXRhYmUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBmcnVzdHVtIHNsb3BlIGJh
c2VkIG9uIHRoZSBjYW52YXMgcmF0aW8gYW5kIGNhbWVyYSBGT1YKKyAgICAgKiBAcmV0dXJucyBU
aGUgZnJ1c3R1bSBzbG9wZSByZXByZXNlbnRlZCBhcyBhIFZlY3RvcjIgd2l0aCBYIGFuZCBZIHNs
b3BlcworICAgICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUuX2dldEZydXN0dW1T
bG9wZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB2aWV3cG9ydCBy
YXRpbworICAgICAgICAvLyBBc3BlY3QgUmF0aW8gaXMgSGVpZ2h0L1dpZHRoLgorICAgICAgICB2
YXIgY2FtZXJhID0gdGhpcy5fYXR0YWNoZWRDYW1lcmE7CisgICAgICAgIGlmICghY2FtZXJhKSB7
CisgICAgICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlY3RvcjIiXS5aZXJvKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVu
Z2luZSA9IGNhbWVyYS5nZXRTY2VuZSgpLmdldEVuZ2luZSgpOworICAgICAgICB2YXIgYXNwZWN0
UmF0aW8gPSBlbmdpbmUuZ2V0QXNwZWN0UmF0aW8oY2FtZXJhKTsKKyAgICAgICAgLy8gQ2FtZXJh
IEZPViBpcyB0aGUgdmVydGljYWwgZmllbGQgb2YgdmlldyAodG9wLWJvdHRvbSkgaW4gcmFkaWFu
cy4KKyAgICAgICAgLy8gU2xvcGUgb2YgdGhlIGZydXN0dW0gdG9wL2JvdHRvbSBwbGFuZXMgaW4g
dmlldyBzcGFjZSwgcmVsYXRpdmUgdG8gdGhlIGZvcndhcmQgdmVjdG9yLgorICAgICAgICB2YXIg
ZnJ1c3R1bVNsb3BlWSA9IE1hdGgudGFuKGNhbWVyYS5mb3YgLyAyKTsKKyAgICAgICAgLy8gU2xv
cGUgb2YgdGhlIGZydXN0dW0gbGVmdC9yaWdodCBwbGFuZXMgaW4gdmlldyBzcGFjZSwgcmVsYXRp
dmUgdG8gdGhlIGZvcndhcmQgdmVjdG9yLgorICAgICAgICAvLyBQcm92aWRlcyB0aGUgYW1vdW50
IHRoYXQgb25lIHNpZGUgKGUuZy4gbGVmdCkgb2YgdGhlIGZydXN0dW0gZ2V0cyB3aWRlciBmb3Ig
ZXZlcnkgdW5pdAorICAgICAgICAvLyBhbG9uZyB0aGUgZm9yd2FyZCB2ZWN0b3IuCisgICAgICAg
IHZhciBmcnVzdHVtU2xvcGVYID0gZnJ1c3R1bVNsb3BlWSAqIGFzcGVjdFJhdGlvOworICAgICAg
ICByZXR1cm4gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJWZWN0b3IyIl0oZnJ1c3R1bVNsb3BlWCwgZnJ1c3R1bVNsb3BlWSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZW1vdmVzIGFsbCBhbmltYXRpb24gbG9ja3MuIEFsbG93cyBuZXcgYW5p
bWF0aW9ucyB0byBiZSBhZGRlZCB0byBhbnkgb2YgdGhlIGFyY0NhbWVyYSBwcm9wZXJ0aWVzLgor
ICAgICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90b3R5cGUuX2NsZWFyQW5pbWF0aW9uTG9j
a3MgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2JldGFJc0FuaW1hdGluZyA9IGZhbHNl
OworICAgIH07CisgICAgLyoqCisgICAgICogIEFwcGxpZXMgYW55IGN1cnJlbnQgdXNlciBpbnRl
cmFjdGlvbiB0byB0aGUgY2FtZXJhLiBUYWtlcyBpbnRvIGFjY291bnQgbWF4aW11bSBhbHBoYSBy
b3RhdGlvbi4KKyAgICAgKi8KKyAgICBGcmFtaW5nQmVoYXZpb3IucHJvdG90eXBlLl9hcHBseVVz
ZXJJbnRlcmFjdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuaXNVc2VySXNN
b3ZpbmcpIHsKKyAgICAgICAgICAgIHRoaXMuX2xhc3RJbnRlcmFjdGlvblRpbWUgPSBfTWlzY19w
cmVjaXNpb25EYXRlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlByZWNpc2lvbkRhdGUi
XS5Ob3c7CisgICAgICAgICAgICB0aGlzLnN0b3BBbGxBbmltYXRpb25zKCk7CisgICAgICAgICAg
ICB0aGlzLl9jbGVhckFuaW1hdGlvbkxvY2tzKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIFN0b3BzIGFuZCByZW1vdmVzIGFsbCBhbmltYXRpb25zIHRoYXQgaGF2ZSBiZWVu
IGFwcGxpZWQgdG8gdGhlIGNhbWVyYQorICAgICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5wcm90
b3R5cGUuc3RvcEFsbEFuaW1hdGlvbnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
Ll9hdHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEuYW5p
bWF0aW9ucyA9IFtdOworICAgICAgICB9CisgICAgICAgIHdoaWxlICh0aGlzLl9hbmltYXRhYmxl
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9hbmltYXRhYmxlc1swXSkgeworICAg
ICAgICAgICAgICAgIHRoaXMuX2FuaW1hdGFibGVzWzBdLm9uQW5pbWF0aW9uRW5kID0gbnVsbDsK
KyAgICAgICAgICAgICAgICB0aGlzLl9hbmltYXRhYmxlc1swXS5zdG9wKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9hbmltYXRhYmxlcy5zaGlmdCgpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnJhbWluZ0JlaGF2aW9yLnByb3RvdHlw
ZSwgImlzVXNlcklzTW92aW5nIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIHZh
bHVlIGluZGljYXRpbmcgaWYgdGhlIHVzZXIgaXMgbW92aW5nIHRoZSBjYW1lcmEKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9h
dHRhY2hlZENhbWVyYSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hlZENhbWVyYS5pbmVydGlhbEFs
cGhhT2Zmc2V0ICE9PSAwIHx8CisgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEu
aW5lcnRpYWxCZXRhT2Zmc2V0ICE9PSAwIHx8CisgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNo
ZWRDYW1lcmEuaW5lcnRpYWxSYWRpdXNPZmZzZXQgIT09IDAgfHwKKyAgICAgICAgICAgICAgICB0
aGlzLl9hdHRhY2hlZENhbWVyYS5pbmVydGlhbFBhbm5pbmdYICE9PSAwIHx8CisgICAgICAgICAg
ICAgICAgdGhpcy5fYXR0YWNoZWRDYW1lcmEuaW5lcnRpYWxQYW5uaW5nWSAhPT0gMCB8fAorICAg
ICAgICAgICAgICAgIHRoaXMuX2lzUG9pbnRlckRvd247CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IC8qKgorICAgICAqIFRoZSBlYXNpbmcgZnVuY3Rpb24gdXNlZCBieSBhbmltYXRpb25zCisgICAg
ICovCisgICAgRnJhbWluZ0JlaGF2aW9yLkVhc2luZ0Z1bmN0aW9uID0gbmV3IF9BbmltYXRpb25z
X2Vhc2luZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFeHBvbmVudGlhbEVhc2UiXSgp
OworICAgIC8qKgorICAgICAqIFRoZSBlYXNpbmcgbW9kZSB1c2VkIGJ5IGFuaW1hdGlvbnMKKyAg
ICAgKi8KKyAgICBGcmFtaW5nQmVoYXZpb3IuRWFzaW5nTW9kZSA9IF9BbmltYXRpb25zX2Vhc2lu
Z19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFYXNpbmdGdW5jdGlvbiJdLkVBU0lOR01P
REVfRUFTRUlOT1VUOworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAgICAgKiBUaGUgY2FtZXJh
IGNhbiBtb3ZlIGFsbCB0aGUgd2F5IHRvd2FyZHMgdGhlIG1lc2guCisgICAgICovCisgICAgRnJh
bWluZ0JlaGF2aW9yLklnbm9yZUJvdW5kc1NpemVNb2RlID0gMDsKKyAgICAvKioKKyAgICAgKiBU
aGUgY2FtZXJhIGlzIG5vdCBhbGxvd2VkIHRvIHpvb20gY2xvc2VyIHRvIHRoZSBtZXNoIHRoYW4g
dGhlIHBvaW50IGF0IHdoaWNoIHRoZSBhZGp1c3RlZCBib3VuZGluZyBzcGhlcmUgdG91Y2hlcyB0
aGUgZnJ1c3R1bSBzaWRlcworICAgICAqLworICAgIEZyYW1pbmdCZWhhdmlvci5GaXRGcnVzdHVt
U2lkZXNNb2RlID0gMTsKKyAgICByZXR1cm4gRnJhbWluZ0JlaGF2aW9yOworfSgpKTsKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9CZWhhdmlvcnMvQ2FtZXJhcy9pbmRleC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0JlaGF2aW9y
cy9DYW1lcmFzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBdXRvUm90YXRpb25CZWhhdmlvciwgQm91
bmNpbmdCZWhhdmlvciwgRnJhbWluZ0JlaGF2aW9yICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfYXV0b1JvdGF0aW9uQmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXV0b1JvdGF0aW9uQmVo
YXZpb3IgKi8gIi4vQmVoYXZpb3JzL0NhbWVyYXMvYXV0b1JvdGF0aW9uQmVoYXZpb3IudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQXV0b1JvdGF0aW9uQmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9hdXRvUm90YXRpb25CZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJB
dXRvUm90YXRpb25CZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9i
b3VuY2luZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL2JvdW5jaW5nQmVoYXZpb3IgKi8gIi4vQmVoYXZpb3JzL0NhbWVyYXMv
Ym91bmNpbmdCZWhhdmlvci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb3VuY2luZ0JlaGF2aW9y
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYm91bmNpbmdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJCb3VuY2luZ0JlaGF2aW9yIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2ZyYW1pbmdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mcmFtaW5nQmVoYXZpb3IgKi8gIi4vQmVoYXZpb3Jz
L0NhbWVyYXMvZnJhbWluZ0JlaGF2aW9yLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyYW1pbmdC
ZWhhdmlvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZyYW1pbmdCZWhhdmlvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJGcmFtaW5nQmVoYXZpb3IiXTsgfSk7CisKKworCisKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vQmVoYXZpb3JzL01lc2hlcy9hdHRhY2hUb0JveEJlaGF2aW9y
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL0JlaGF2aW9ycy9NZXNoZXMvYXR0YWNoVG9Cb3hCZWhhdmlvci50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEF0dGFjaFRvQm94QmVoYXZpb3IgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXR0YWNoVG9Cb3hCZWhhdmlvciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gQXR0YWNoVG9Cb3hCZWhhdmlvcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworCisvKioKKyAqIEBoaWRkZW4KKyAqLwordmFyIEZhY2VEaXJl
Y3Rpb25JbmZvID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEZh
Y2VEaXJlY3Rpb25JbmZvKGRpcmVjdGlvbiwgcm90YXRlZERpcmVjdGlvbiwgZGlmZiwgaWdub3Jl
KSB7CisgICAgICAgIGlmIChyb3RhdGVkRGlyZWN0aW9uID09PSB2b2lkIDApIHsgcm90YXRlZERp
cmVjdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMyJdKCk7IH0KKyAgICAgICAgaWYgKGRpZmYgPT09IHZvaWQgMCkgeyBkaWZm
ID0gMDsgfQorICAgICAgICBpZiAoaWdub3JlID09PSB2b2lkIDApIHsgaWdub3JlID0gZmFsc2U7
IH0KKyAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisgICAgICAgIHRoaXMucm90
YXRlZERpcmVjdGlvbiA9IHJvdGF0ZWREaXJlY3Rpb247CisgICAgICAgIHRoaXMuZGlmZiA9IGRp
ZmY7CisgICAgICAgIHRoaXMuaWdub3JlID0gaWdub3JlOworICAgIH0KKyAgICByZXR1cm4gRmFj
ZURpcmVjdGlvbkluZm87Cit9KCkpOworLyoqCisgKiBBIGJlaGF2aW9yIHRoYXQgd2hlbiBhdHRh
Y2hlZCB0byBhIG1lc2ggd2lsbCB3aWxsIHBsYWNlIGEgc3BlY2lmaWVkIG5vZGUgb24gdGhlIG1l
c2hlcyBmYWNlIHBvaW50aW5nIHRvd2FyZHMgdGhlIGNhbWVyYQorICovCit2YXIgQXR0YWNoVG9C
b3hCZWhhdmlvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIHRoZSBBdHRhY2hUb0JveEJlaGF2aW9yLCB1c2VkIHRvIGF0dGFjaCBVSSB0byB0
aGUgY2xvc2VzdCBmYWNlIG9mIHRoZSBib3ggdG8gYSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gdWkg
VGhlIHRyYW5zZm9ybSBub2RlIHRoYXQgc2hvdWxkIGJlIGF0dGNoZWQgdG8gdGhlIG1lc2gKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBBdHRhY2hUb0JveEJlaGF2aW9yKHVpKSB7CisgICAgICAgIHRo
aXMudWkgPSB1aTsKKyAgICAgICAgLyoqCisgICAgICAgICAqICBUaGUgbmFtZSBvZiB0aGUgYmVo
YXZpb3IKKyAgICAgICAgICovCisgICAgICAgIHRoaXMubmFtZSA9ICJBdHRhY2hUb0JveEJlaGF2
aW9yIjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBkaXN0YW5jZSBhd2F5IGZyb20gdGhl
IGZhY2Ugb2YgdGhlIG1lc2ggdGhhdCB0aGUgVUkgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIChkZWZh
dWx0OiAwLjE1KQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaXN0YW5jZUF3YXlGcm9tRmFj
ZSA9IDAuMTU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZGlzdGFuY2UgZnJvbSB0aGUg
Ym90dG9tIG9mIHRoZSBmYWNlIHRoYXQgdGhlIFVJIHNob3VsZCBiZSBhdHRhY2hlZCB0byAoZGVm
YXVsdDogMC4xNSkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGlzdGFuY2VBd2F5RnJvbUJv
dHRvbU9mRmFjZSA9IDAuMTU7CisgICAgICAgIHRoaXMuX2ZhY2VWZWN0b3JzID0gW25ldyBGYWNl
RGlyZWN0aW9uSW5mbyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMyJdLlVwKCkpLCBuZXcgRmFjZURpcmVjdGlvbkluZm8oX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Eb3duKCkpLCBu
ZXcgRmFjZURpcmVjdGlvbkluZm8oX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5MZWZ0KCkpLCBuZXcgRmFjZURpcmVjdGlvbkluZm8oX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5S
aWdodCgpKSwgbmV3IEZhY2VEaXJlY3Rpb25JbmZvKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRm9yd2FyZCgpKSwgbmV3IEZhY2VEaXJl
Y3Rpb25JbmZvKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0uRm9yd2FyZCgpLnNjYWxlSW5QbGFjZSgtMSkpXTsKKyAgICAgICAgdGhpcy5f
dG1wTWF0cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJNYXRyaXgiXSgpOworICAgICAgICB0aGlzLl90bXBWZWN0b3IgPSBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgpOwor
ICAgICAgICB0aGlzLl96ZXJvVmVjdG9yID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2xvb2tB
dFRtcE1hdHJpeCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTWF0cml4Il0oKTsKKyAgICAgICAgLyogRG9lcyBub3RoaW5nICovCisgICAgfQor
ICAgIC8qKgorICAgICAqICBJbml0aWFsaXplcyB0aGUgYmVoYXZpb3IKKyAgICAgKi8KKyAgICBB
dHRhY2hUb0JveEJlaGF2aW9yLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAvKiBEb2VzIG5vdGhpbmcgKi8KKyAgICB9OworICAgIEF0dGFjaFRvQm94QmVoYXZpb3IucHJv
dG90eXBlLl9jbG9zZXN0RmFjZSA9IGZ1bmN0aW9uICh0YXJnZXREaXJlY3Rpb24pIHsKKyAgICAg
ICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgLy8gR28gb3ZlciBlYWNoIGZhY2UgYW5kIGNh
bGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiB0aGUgZmFjZSdzIG5vcm1hbCBhbmQgdGFyZ2V0RGly
ZWN0aW9uCisgICAgICAgIHRoaXMuX2ZhY2VWZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsK
KyAgICAgICAgICAgIGlmICghX3RoaXMuX3RhcmdldC5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAg
ICAgICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnJvdGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJRdWF0ZXJuaW9uIl0uUm90
YXRpb25ZYXdQaXRjaFJvbGwoX3RoaXMuX3RhcmdldC5yb3RhdGlvbi55LCBfdGhpcy5fdGFyZ2V0
LnJvdGF0aW9uLngsIF90aGlzLl90YXJnZXQucm90YXRpb24ueik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnJvdGF0aW9uUXVhdGVybmlvbi50b1JvdGF0aW9uTWF0
cml4KF90aGlzLl90bXBNYXRyaXgpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRl
c1RvUmVmKHYuZGlyZWN0aW9uLCBfdGhpcy5fdG1wTWF0cml4LCB2LnJvdGF0ZWREaXJlY3Rpb24p
OworICAgICAgICAgICAgdi5kaWZmID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5HZXRBbmdsZUJldHdlZW5WZWN0b3JzKHYucm90YXRl
ZERpcmVjdGlvbiwgdGFyZ2V0RGlyZWN0aW9uLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkNyb3NzKHYucm90YXRlZERpcmVjdGlvbiwg
dGFyZ2V0RGlyZWN0aW9uKSk7CisgICAgICAgIH0pOworICAgICAgICAvLyBSZXR1cm4gdGhlIGZh
Y2UgaW5mb3JtYXRpb24gb2YgdGhlIG9uZSB3aXRoIHRoZSBub3JtYWwgY2xvc2VzZXQgdG8gdGFy
Z2V0IGRpcmVjdGlvbgorICAgICAgICByZXR1cm4gdGhpcy5fZmFjZVZlY3RvcnMucmVkdWNlKGZ1
bmN0aW9uIChtaW4sIHApIHsKKyAgICAgICAgICAgIGlmIChtaW4uaWdub3JlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChw
Lmlnbm9yZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBtaW47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWluLmRpZmYgPCBwLmRp
ZmYgPyBtaW4gOiBwOworICAgICAgICAgICAgfQorICAgICAgICB9LCB0aGlzLl9mYWNlVmVjdG9y
c1swXSk7CisgICAgfTsKKyAgICBBdHRhY2hUb0JveEJlaGF2aW9yLnByb3RvdHlwZS5fbG9va0F0
VG9SZWYgPSBmdW5jdGlvbiAocG9zLCB1cCwgcmVmKSB7CisgICAgICAgIGlmICh1cCA9PT0gdm9p
ZCAwKSB7IHVwID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0oMCwgMSwgMCk7IH0KKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLkxvb2tBdExIVG9SZWYodGhp
cy5femVyb1ZlY3RvciwgcG9zLCB1cCwgdGhpcy5fbG9va0F0VG1wTWF0cml4KTsKKyAgICAgICAg
dGhpcy5fbG9va0F0VG1wTWF0cml4LmludmVydCgpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLkZyb21Sb3RhdGlv
bk1hdHJpeFRvUmVmKHRoaXMuX2xvb2tBdFRtcE1hdHJpeCwgcmVmKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEF0dGFjaGVzIHRoZSBBdHRhY2hUb0JveEJlaGF2aW9yIHRvIHRoZSBwYXNzZWQg
aW4gbWVzaAorICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG1lc2ggdGhhdCB0aGUgc3BlY2lmaWVk
IG5vZGUgd2lsbCBiZSBhdHRhY2hlZCB0bworICAgICAqLworICAgIEF0dGFjaFRvQm94QmVoYXZp
b3IucHJvdG90eXBlLmF0dGFjaCA9IGZ1bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICB0aGlz
Ll9zY2VuZSA9IHRoaXMuX3RhcmdldC5nZXRTY2VuZSgpOworICAgICAgICAvLyBFdmVyeSBmcmFt
ZSwgdXBkYXRlIHRoZSBhcHAgYmFycyBwb3NpdGlvbgorICAgICAgICB0aGlzLl9vblJlbmRlck9i
c2VydmVyID0gdGhpcy5fc2NlbmUub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGaW5k
IHRoZSBmYWNlIGNsb3Nlc3QgdG8gdGhlIGNhbWVyYXMgcG9zaXRpb24KKyAgICAgICAgICAgIHZh
ciBjYW1lcmFQb3MgPSBfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLnBvc2l0aW9uOworICAgICAg
ICAgICAgaWYgKF90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEuZGV2aWNlUG9zaXRpb24pIHsKKyAg
ICAgICAgICAgICAgICBjYW1lcmFQb3MgPSBfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLmRldmlj
ZVBvc2l0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGZhY2luZyA9IF90aGlz
Ll9jbG9zZXN0RmFjZShjYW1lcmFQb3Muc3VidHJhY3QodGFyZ2V0LnBvc2l0aW9uKSk7CisgICAg
ICAgICAgICBpZiAoX3RoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5sZWZ0Q2FtZXJhKSB7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5sZWZ0Q2FtZXJhLmNvbXB1dGVX
b3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4VG9SZWYoX3RoaXMuX3RtcE1hdHJpeCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5f
c2NlbmUuYWN0aXZlQ2FtZXJhLmNvbXB1dGVXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4
VG9SZWYoX3RoaXMuX3RtcE1hdHJpeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBH
ZXQgY2FtZXJhIHVwIGRpcmVjdGlvbgorICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRl
c1RvUmVmKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0uVXAoKSwgX3RoaXMuX3RtcE1hdHJpeCwgX3RoaXMuX3RtcFZlY3Rvcik7CisgICAg
ICAgICAgICAvLyBJZ25vcmUgZmFjZXMgdG8gbm90IHNlbGVjdCBhIHBhcnJlbGVsIGZhY2UgZm9y
IHRoZSB1cCB2ZWN0b3Igb2YgdGhlIFVJCisgICAgICAgICAgICBfdGhpcy5fZmFjZVZlY3RvcnMu
Zm9yRWFjaChmdW5jdGlvbiAodikgeworICAgICAgICAgICAgICAgIGlmIChmYWNpbmcuZGlyZWN0
aW9uLnggJiYgdi5kaXJlY3Rpb24ueCkgeworICAgICAgICAgICAgICAgICAgICB2Lmlnbm9yZSA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmYWNpbmcuZGly
ZWN0aW9uLnkgJiYgdi5kaXJlY3Rpb24ueSkgeworICAgICAgICAgICAgICAgICAgICB2Lmlnbm9y
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmYWNpbmcu
ZGlyZWN0aW9uLnogJiYgdi5kaXJlY3Rpb24ueikgeworICAgICAgICAgICAgICAgICAgICB2Lmln
bm9yZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB2YXIgZmFjaW5nVXAgPSBfdGhpcy5fY2xvc2VzdEZhY2UoX3RoaXMuX3RtcFZlY3Rvcik7
CisgICAgICAgICAgICAvLyBVbmlnbm9yZSBmYWNlcworICAgICAgICAgICAgX3RoaXMuX2ZhY2VW
ZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICB2Lmlnbm9yZSA9
IGZhbHNlOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyBQb3NpdGlvbiB0aGUgYXBw
IGJhciBvbiB0aGF0IGZhY2UKKyAgICAgICAgICAgIF90aGlzLnVpLnBvc2l0aW9uLmNvcHlGcm9t
KHRhcmdldC5wb3NpdGlvbik7CisgICAgICAgICAgICBpZiAoZmFjaW5nLmRpcmVjdGlvbi54KSB7
CisgICAgICAgICAgICAgICAgZmFjaW5nLnJvdGF0ZWREaXJlY3Rpb24uc2NhbGVUb1JlZigodGFy
Z2V0LnNjYWxpbmcueCAvIDIpICsgX3RoaXMuZGlzdGFuY2VBd2F5RnJvbUZhY2UsIF90aGlzLl90
bXBWZWN0b3IpOworICAgICAgICAgICAgICAgIF90aGlzLnVpLnBvc2l0aW9uLmFkZEluUGxhY2Uo
X3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmFjaW5n
LmRpcmVjdGlvbi55KSB7CisgICAgICAgICAgICAgICAgZmFjaW5nLnJvdGF0ZWREaXJlY3Rpb24u
c2NhbGVUb1JlZigodGFyZ2V0LnNjYWxpbmcueSAvIDIpICsgX3RoaXMuZGlzdGFuY2VBd2F5RnJv
bUZhY2UsIF90aGlzLl90bXBWZWN0b3IpOworICAgICAgICAgICAgICAgIF90aGlzLnVpLnBvc2l0
aW9uLmFkZEluUGxhY2UoX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoZmFjaW5nLmRpcmVjdGlvbi56KSB7CisgICAgICAgICAgICAgICAgZmFjaW5nLnJv
dGF0ZWREaXJlY3Rpb24uc2NhbGVUb1JlZigodGFyZ2V0LnNjYWxpbmcueiAvIDIpICsgX3RoaXMu
ZGlzdGFuY2VBd2F5RnJvbUZhY2UsIF90aGlzLl90bXBWZWN0b3IpOworICAgICAgICAgICAgICAg
IF90aGlzLnVpLnBvc2l0aW9uLmFkZEluUGxhY2UoX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBSb3RhdGUgdG8gYmUgb3JpZW50ZWQgcHJvcGVybHkgdG8g
dGhlIGNhbWVyYQorICAgICAgICAgICAgaWYgKCFfdGhpcy51aS5yb3RhdGlvblF1YXRlcm5pb24p
IHsKKyAgICAgICAgICAgICAgICBfdGhpcy51aS5yb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLlJv
dGF0aW9uWWF3UGl0Y2hSb2xsKF90aGlzLnVpLnJvdGF0aW9uLnksIF90aGlzLnVpLnJvdGF0aW9u
LngsIF90aGlzLnVpLnJvdGF0aW9uLnopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFj
aW5nLnJvdGF0ZWREaXJlY3Rpb24uc2NhbGVUb1JlZigtMSwgX3RoaXMuX3RtcFZlY3Rvcik7Cisg
ICAgICAgICAgICBfdGhpcy5fbG9va0F0VG9SZWYoX3RoaXMuX3RtcFZlY3RvciwgZmFjaW5nVXAu
cm90YXRlZERpcmVjdGlvbiwgX3RoaXMudWkucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAg
ICAgIC8vIFBsYWNlIHVpIHRoZSBjb3JyZWN0IGRpc3RhbmNlIGZyb20gdGhlIGJvdHRvbSBvZiB0
aGUgbWVzaAorICAgICAgICAgICAgaWYgKGZhY2luZ1VwLmRpcmVjdGlvbi54KSB7CisgICAgICAg
ICAgICAgICAgX3RoaXMudWkudXAuc2NhbGVUb1JlZihfdGhpcy5kaXN0YW5jZUF3YXlGcm9tQm90
dG9tT2ZGYWNlIC0gdGFyZ2V0LnNjYWxpbmcueCAvIDIsIF90aGlzLl90bXBWZWN0b3IpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZhY2luZ1VwLmRpcmVjdGlvbi55KSB7CisgICAg
ICAgICAgICAgICAgX3RoaXMudWkudXAuc2NhbGVUb1JlZihfdGhpcy5kaXN0YW5jZUF3YXlGcm9t
Qm90dG9tT2ZGYWNlIC0gdGFyZ2V0LnNjYWxpbmcueSAvIDIsIF90aGlzLl90bXBWZWN0b3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZhY2luZ1VwLmRpcmVjdGlvbi56KSB7Cisg
ICAgICAgICAgICAgICAgX3RoaXMudWkudXAuc2NhbGVUb1JlZihfdGhpcy5kaXN0YW5jZUF3YXlG
cm9tQm90dG9tT2ZGYWNlIC0gdGFyZ2V0LnNjYWxpbmcueiAvIDIsIF90aGlzLl90bXBWZWN0b3Ip
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgX3RoaXMudWkucG9zaXRpb24uYWRkSW5QbGFj
ZShfdGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiAgRGV0YWNoZXMgdGhlIGJlaGF2aW9yIGZyb20gdGhlIG1lc2gKKyAgICAgKi8KKyAgICBBdHRh
Y2hUb0JveEJlaGF2aW9yLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX3NjZW5lLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25SZW5k
ZXJPYnNlcnZlcik7CisgICAgfTsKKyAgICByZXR1cm4gQXR0YWNoVG9Cb3hCZWhhdmlvcjsKK30o
KSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQmVoYXZpb3JzL01lc2hlcy9mYWRlSW5P
dXRCZWhhdmlvci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vQmVoYXZpb3JzL01lc2hlcy9mYWRlSW5PdXRCZWhhdmlv
ci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBGYWRlSW5PdXRCZWhhdmlvciAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGYWRlSW5PdXRCZWhhdmlvciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gRmFkZUluT3V0QmVoYXZpb3I7IH0pOworLyoqCisgKiBBIGJlaGF2aW9yIHRo
YXQgd2hlbiBhdHRhY2hlZCB0byBhIG1lc2ggd2lsbCBhbGxvdyB0aGUgbWVzaCB0byBmYWRlIGlu
IGFuZCBvdXQKKyAqLwordmFyIEZhZGVJbk91dEJlaGF2aW9yID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhdGlhdGVzIHRoZSBGYWRlSW5PdXRCZWhh
dmlvcgorICAgICAqLworICAgIGZ1bmN0aW9uIEZhZGVJbk91dEJlaGF2aW9yKCkgeworICAgICAg
ICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICAvKioKKyAgICAgICAgICogVGltZSBpbiBtaWxs
aXNlY29uZHMgdG8gZGVsYXkgYmVmb3JlIGZhZGluZyBpbiAoRGVmYXVsdDogMCkKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuZGVsYXkgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogVGlt
ZSBpbiBtaWxsaXNlY29uZHMgZm9yIHRoZSBtZXNoIHRvIGZhZGUgaW4gKERlZmF1bHQ6IDMwMCkK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuZmFkZUluVGltZSA9IDMwMDsKKyAgICAgICAgdGhp
cy5fbWlsbGlzZWNvbmRzUGVyRnJhbWUgPSAxMDAwIC8gNjA7CisgICAgICAgIHRoaXMuX2hvdmVy
ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faG92ZXJWYWx1ZSA9IDA7CisgICAgICAgIHRoaXMu
X293bmVyTm9kZSA9IG51bGw7CisgICAgICAgIHRoaXMuX3VwZGF0ZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGlmIChfdGhpcy5fb3duZXJOb2RlKSB7CisgICAgICAgICAgICAgICAgX3Ro
aXMuX2hvdmVyVmFsdWUgKz0gX3RoaXMuX2hvdmVyZWQgPyBfdGhpcy5fbWlsbGlzZWNvbmRzUGVy
RnJhbWUgOiAtX3RoaXMuX21pbGxpc2Vjb25kc1BlckZyYW1lOworICAgICAgICAgICAgICAgIF90
aGlzLl9zZXRBbGxWaXNpYmlsaXR5KF90aGlzLl9vd25lck5vZGUsIChfdGhpcy5faG92ZXJWYWx1
ZSAtIF90aGlzLmRlbGF5KSAvIF90aGlzLmZhZGVJblRpbWUpOworICAgICAgICAgICAgICAgIGlm
IChfdGhpcy5fb3duZXJOb2RlLnZpc2liaWxpdHkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLl9zZXRBbGxWaXNpYmlsaXR5KF90aGlzLl9vd25lck5vZGUsIDEpOworICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5faG92ZXJWYWx1ZSA9IF90aGlzLmZhZGVJblRpbWUgKyBfdGhpcy5k
ZWxheTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5fb3duZXJOb2RlLnZpc2liaWxpdHkgPCAwKSB7
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zZXRBbGxWaXNpYmlsaXR5KF90aGlzLl9vd25l
ck5vZGUsIDApOworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2hvdmVyVmFsdWUgPCAw
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5faG92ZXJWYWx1ZSA9IDA7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChfdGhpcy5fdXBkYXRlLCBf
dGhpcy5fbWlsbGlzZWNvbmRzUGVyRnJhbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
ICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFkZUluT3V0QmVoYXZpb3IucHJvdG90
eXBlLCAibmFtZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqICBUaGUgbmFtZSBvZiB0aGUg
YmVoYXZpb3IKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuICJGYWRlSW5PdXQiOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAg
ICAgKiAgSW5pdGlhbGl6ZXMgdGhlIGJlaGF2aW9yCisgICAgICovCisgICAgRmFkZUluT3V0QmVo
YXZpb3IucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBdHRhY2hlcyB0aGUgZmFkZSBiZWhhdmlvciBvbiB0aGUgcGFzc2VkIGluIG1lc2gKKyAg
ICAgKiBAcGFyYW0gb3duZXJOb2RlIFRoZSBtZXNoIHRoYXQgd2lsbCBiZSBmYWRlZCBpbi9vdXQg
b25jZSBhdHRhY2hlZAorICAgICAqLworICAgIEZhZGVJbk91dEJlaGF2aW9yLnByb3RvdHlwZS5h
dHRhY2ggPSBmdW5jdGlvbiAob3duZXJOb2RlKSB7CisgICAgICAgIHRoaXMuX293bmVyTm9kZSA9
IG93bmVyTm9kZTsKKyAgICAgICAgdGhpcy5fc2V0QWxsVmlzaWJpbGl0eSh0aGlzLl9vd25lck5v
ZGUsIDApOworICAgIH07CisgICAgLyoqCisgICAgICogIERldGFjaGVzIHRoZSBiZWhhdmlvciBm
cm9tIHRoZSBtZXNoCisgICAgICovCisgICAgRmFkZUluT3V0QmVoYXZpb3IucHJvdG90eXBlLmRl
dGFjaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fb3duZXJOb2RlID0gbnVsbDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFRyaWdnZXJzIHRoZSBtZXNoIHRvIGJlZ2luIGZhZGluZyBp
biBvciBvdXQKKyAgICAgKiBAcGFyYW0gdmFsdWUgaWYgdGhlIG9iamVjdCBzaG91bGQgZmFkZSBp
biBvciBvdXQgKHRydWUgdG8gZmFkZSBpbikKKyAgICAgKi8KKyAgICBGYWRlSW5PdXRCZWhhdmlv
ci5wcm90b3R5cGUuZmFkZUluID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2hv
dmVyZWQgPSB2YWx1ZTsKKyAgICAgICAgdGhpcy5fdXBkYXRlKCk7CisgICAgfTsKKyAgICBGYWRl
SW5PdXRCZWhhdmlvci5wcm90b3R5cGUuX3NldEFsbFZpc2liaWxpdHkgPSBmdW5jdGlvbiAobWVz
aCwgdmFsdWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgbWVzaC52aXNp
YmlsaXR5ID0gdmFsdWU7CisgICAgICAgIG1lc2guZ2V0Q2hpbGRNZXNoZXMoKS5mb3JFYWNoKGZ1
bmN0aW9uIChjKSB7CisgICAgICAgICAgICBfdGhpcy5fc2V0QWxsVmlzaWJpbGl0eShjLCB2YWx1
ZSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgcmV0dXJuIEZhZGVJbk91dEJlaGF2aW9yOwor
fSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9CZWhhdmlvcnMvTWVzaGVzL2luZGV4
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9CZWhhdmlvcnMvTWVzaGVzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEF0dGFjaFRvQm94QmVoYXZp
b3IsIEZhZGVJbk91dEJlaGF2aW9yLCBNdWx0aVBvaW50ZXJTY2FsZUJlaGF2aW9yLCBQb2ludGVy
RHJhZ0JlaGF2aW9yLCBTaXhEb2ZEcmFnQmVoYXZpb3IgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hdHRhY2hUb0JveEJlaGF2aW9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2F0dGFjaFRvQm94QmVo
YXZpb3IgKi8gIi4vQmVoYXZpb3JzL01lc2hlcy9hdHRhY2hUb0JveEJlaGF2aW9yLnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkF0dGFjaFRvQm94QmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9hdHRhY2hUb0JveEJlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkF0dGFj
aFRvQm94QmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmFkZUlu
T3V0QmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vZmFkZUluT3V0QmVoYXZpb3IgKi8gIi4vQmVoYXZpb3JzL01lc2hlcy9mYWRl
SW5PdXRCZWhhdmlvci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGYWRlSW5PdXRCZWhhdmlvciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZhZGVJbk91dEJlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkZhZGVJbk91dEJlaGF2aW9yIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX211bHRpUG9pbnRlclNjYWxlQmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbXVsdGlQb2ludGVyU2NhbGVCZWhh
dmlvciAqLyAiLi9CZWhhdmlvcnMvTWVzaGVzL211bHRpUG9pbnRlclNjYWxlQmVoYXZpb3IudHMi
KTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX211bHRpUG9pbnRlclNjYWxlQmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9wb2ludGVyRHJhZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvaW50ZXJEcmFnQmVoYXZpb3Ig
Ki8gIi4vQmVoYXZpb3JzL01lc2hlcy9wb2ludGVyRHJhZ0JlaGF2aW9yLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlBvaW50ZXJEcmFnQmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wb2lu
dGVyRHJhZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBvaW50ZXJEcmFn
QmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2l4RG9mRHJhZ0Jl
aGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL3NpeERvZkRyYWdCZWhhdmlvciAqLyAiLi9CZWhhdmlvcnMvTWVzaGVzL3NpeERvZkRy
YWdCZWhhdmlvci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaXhEb2ZEcmFnQmVoYXZpb3IiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9zaXhEb2ZEcmFnQmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siU2l4RG9mRHJhZ0JlaGF2aW9yIl07IH0pOworCisKKworCisKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9CZWhhdmlvcnMvTWVzaGVzL211bHRpUG9pbnRlclNjYWxlQmVo
YXZpb3IudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vQmVoYXZpb3JzL01lc2hlcy9tdWx0aVBvaW50ZXJT
Y2FsZUJlaGF2aW9yLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTXVsdGlQb2lu
dGVyU2NhbGVCZWhhdmlvciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJN
dWx0aVBvaW50ZXJTY2FsZUJlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNdWx0aVBvaW50
ZXJTY2FsZUJlaGF2aW9yOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9pbnRlckRy
YWdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9wb2ludGVyRHJhZ0JlaGF2aW9yICovICIuL0JlaGF2aW9ycy9NZXNoZXMvcG9p
bnRlckRyYWdCZWhhdmlvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3Iu
dHMiKTsKKworCisvKioKKyAqIEEgYmVoYXZpb3IgdGhhdCB3aGVuIGF0dGFjaGVkIHRvIGEgbWVz
aCB3aWxsIGFsbG93IHRoZSBtZXNoIHRvIGJlIHNjYWxlZAorICovCit2YXIgTXVsdGlQb2ludGVy
U2NhbGVCZWhhdmlvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAg
ICAgKiBJbnN0YW50aWF0ZSBhIG5ldyBiZWhhdmlvciB0aGF0IHdoZW4gYXR0YWNoZWQgdG8gYSBt
ZXNoIHdpbGwgYWxsb3cgdGhlIG1lc2ggdG8gYmUgc2NhbGVkCisgICAgICovCisgICAgZnVuY3Rp
b24gTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvcigpIHsKKyAgICAgICAgdGhpcy5fc3RhcnREaXN0
YW5jZSA9IDA7CisgICAgICAgIHRoaXMuX2luaXRpYWxTY2FsZSA9IG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAsIDAsIDApOwor
ICAgICAgICB0aGlzLl90YXJnZXRTY2FsZSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAgICAgICB0aGlz
Ll9zY2VuZVJlbmRlck9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZHJhZ0JlaGF2aW9y
QSA9IG5ldyBfcG9pbnRlckRyYWdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQb2ludGVyRHJhZ0JlaGF2aW9yIl0oe30pOworICAgICAgICB0aGlzLl9kcmFnQmVoYXZpb3JB
Lm1vdmVBdHRhY2hlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9kcmFnQmVoYXZpb3JCID0gbmV3
IF9wb2ludGVyRHJhZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50
ZXJEcmFnQmVoYXZpb3IiXSh7fSk7CisgICAgICAgIHRoaXMuX2RyYWdCZWhhdmlvckIubW92ZUF0
dGFjaGVkID0gZmFsc2U7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdWx0aVBv
aW50ZXJTY2FsZUJlaGF2aW9yLnByb3RvdHlwZSwgIm5hbWUiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiAgVGhlIG5hbWUgb2YgdGhlIGJlaGF2aW9yCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAiTXVsdGlQb2ludGVyU2NhbGUi
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiAgSW5pdGlhbGl6ZXMgdGhlIGJl
aGF2aW9yCisgICAgICovCisgICAgTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvci5wcm90b3R5cGUu
aW5pdCA9IGZ1bmN0aW9uICgpIHsgfTsKKyAgICBNdWx0aVBvaW50ZXJTY2FsZUJlaGF2aW9yLnBy
b3RvdHlwZS5fZ2V0Q3VycmVudERpc3RhbmNlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fZHJhZ0JlaGF2aW9yQS5sYXN0RHJhZ1Bvc2l0aW9uLnN1YnRyYWN0KHRoaXMuX2Ry
YWdCZWhhdmlvckIubGFzdERyYWdQb3NpdGlvbikubGVuZ3RoKCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBBdHRhY2hlcyB0aGUgc2NhbGUgYmVoYXZpb3IgdGhlIHBhc3NlZCBpbiBtZXNoCisg
ICAgICogQHBhcmFtIG93bmVyTm9kZSBUaGUgbWVzaCB0aGF0IHdpbGwgYmUgc2NhbGVkIGFyb3Vu
ZCBvbmNlIGF0dGFjaGVkCisgICAgICovCisgICAgTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvci5w
cm90b3R5cGUuYXR0YWNoID0gZnVuY3Rpb24gKG93bmVyTm9kZSkgeworICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICB0aGlzLl9vd25lck5vZGUgPSBvd25lck5vZGU7CisgICAgICAg
IC8vIENyZWF0ZSAyIGRyYWcgYmVoYXZpb3JzIHN1Y2ggdGhhdCBlYWNoIHdpbGwgb25seSBiZSB0
cmlnZ2VyZWQgYnkgYSBzZXBhcmF0ZSBwb2ludGVyCisgICAgICAgIHRoaXMuX2RyYWdCZWhhdmlv
ckEub25EcmFnU3RhcnRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAg
aWYgKF90aGlzLl9kcmFnQmVoYXZpb3JBLmRyYWdnaW5nICYmIF90aGlzLl9kcmFnQmVoYXZpb3JC
LmRyYWdnaW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9kcmFnQmVoYXZpb3JBLmN1
cnJlbnREcmFnZ2luZ1BvaW50ZXJJRCA9PSBfdGhpcy5fZHJhZ0JlaGF2aW9yQi5jdXJyZW50RHJh
Z2dpbmdQb2ludGVySUQpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2RyYWdCZWhhdmlv
ckEucmVsZWFzZURyYWcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9pbml0aWFsU2NhbGUuY29weUZyb20ob3du
ZXJOb2RlLnNjYWxpbmcpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3RhcnREaXN0YW5j
ZSA9IF90aGlzLl9nZXRDdXJyZW50RGlzdGFuY2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9kcmFnQmVoYXZpb3JCLm9uRHJh
Z1N0YXJ0T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGlmIChfdGhp
cy5fZHJhZ0JlaGF2aW9yQS5kcmFnZ2luZyAmJiBfdGhpcy5fZHJhZ0JlaGF2aW9yQi5kcmFnZ2lu
ZykgeworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fZHJhZ0JlaGF2aW9yQS5jdXJyZW50RHJh
Z2dpbmdQb2ludGVySUQgPT0gX3RoaXMuX2RyYWdCZWhhdmlvckIuY3VycmVudERyYWdnaW5nUG9p
bnRlcklEKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9kcmFnQmVoYXZpb3JCLnJlbGVh
c2VEcmFnKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5faW5pdGlhbFNjYWxlLmNvcHlGcm9tKG93bmVyTm9kZS5z
Y2FsaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N0YXJ0RGlzdGFuY2UgPSBfdGhp
cy5fZ2V0Q3VycmVudERpc3RhbmNlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICAgICAgLy8gT25jZSBib3RoIGRyYWcgYmVoYXZpb3JzIGFyZSBh
Y3RpdmUgc2NhbGUgYmFzZWQgb24gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBwb2ludGVy
cworICAgICAgICBbdGhpcy5fZHJhZ0JlaGF2aW9yQSwgdGhpcy5fZHJhZ0JlaGF2aW9yQl0uZm9y
RWFjaChmdW5jdGlvbiAoYmVoYXZpb3IpIHsKKyAgICAgICAgICAgIGJlaGF2aW9yLm9uRHJhZ09i
c2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2Ry
YWdCZWhhdmlvckEuZHJhZ2dpbmcgJiYgX3RoaXMuX2RyYWdCZWhhdmlvckIuZHJhZ2dpbmcpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHJhdGlvID0gX3RoaXMuX2dldEN1cnJlbnREaXN0YW5j
ZSgpIC8gX3RoaXMuX3N0YXJ0RGlzdGFuY2U7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9p
bml0aWFsU2NhbGUuc2NhbGVUb1JlZihyYXRpbywgX3RoaXMuX3RhcmdldFNjYWxlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIG93bmVy
Tm9kZS5hZGRCZWhhdmlvcih0aGlzLl9kcmFnQmVoYXZpb3JBKTsKKyAgICAgICAgb3duZXJOb2Rl
LmFkZEJlaGF2aW9yKHRoaXMuX2RyYWdCZWhhdmlvckIpOworICAgICAgICAvLyBPbiBldmVyeSBm
cmFtZSBtb3ZlIHRvd2FyZHMgdGFyZ2V0IHNjYWxpbmcgdG8gYXZvaWQgaml0dGVyIGNhdXNlZCBi
eSB2ciBjb250cm9sbGVycworICAgICAgICB0aGlzLl9zY2VuZVJlbmRlck9ic2VydmVyID0gb3du
ZXJOb2RlLmdldFNjZW5lKCkub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuX2RyYWdCZWhhdmlvckEuZHJhZ2dpbmcgJiYgX3Ro
aXMuX2RyYWdCZWhhdmlvckIuZHJhZ2dpbmcpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hhbmdl
ID0gX3RoaXMuX3RhcmdldFNjYWxlLnN1YnRyYWN0KG93bmVyTm9kZS5zY2FsaW5nKS5zY2FsZUlu
UGxhY2UoMC4xKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hhbmdlLmxlbmd0aCgpID4gMC4wMSkg
eworICAgICAgICAgICAgICAgICAgICBvd25lck5vZGUuc2NhbGluZy5hZGRJblBsYWNlKGNoYW5n
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqICBEZXRhY2hlcyB0aGUgYmVoYXZpb3IgZnJvbSB0aGUgbWVzaAor
ICAgICAqLworICAgIE11bHRpUG9pbnRlclNjYWxlQmVoYXZpb3IucHJvdG90eXBlLmRldGFjaCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5f
b3duZXJOb2RlLmdldFNjZW5lKCkub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlz
Ll9zY2VuZVJlbmRlck9ic2VydmVyKTsKKyAgICAgICAgW3RoaXMuX2RyYWdCZWhhdmlvckEsIHRo
aXMuX2RyYWdCZWhhdmlvckJdLmZvckVhY2goZnVuY3Rpb24gKGJlaGF2aW9yKSB7CisgICAgICAg
ICAgICBiZWhhdmlvci5vbkRyYWdTdGFydE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgICAg
IGJlaGF2aW9yLm9uRHJhZ09ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgICAgIF90aGlzLl9v
d25lck5vZGUucmVtb3ZlQmVoYXZpb3IoYmVoYXZpb3IpOworICAgICAgICB9KTsKKyAgICB9Owor
ICAgIHJldHVybiBNdWx0aVBvaW50ZXJTY2FsZUJlaGF2aW9yOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9CZWhhdmlvcnMvTWVzaGVzL3BvaW50ZXJEcmFnQmVoYXZpb3IudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vQmVoYXZpb3JzL01lc2hlcy9wb2ludGVyRHJhZ0JlaGF2aW9yLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogUG9pbnRlckRyYWdCZWhhdmlvciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJQb2ludGVyRHJhZ0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBQb2ludGVyRHJhZ0JlaGF2aW9yOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2Jz
ZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhz
L21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0V2ZW50c19wb2lu
dGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9FdmVudHMvcG9pbnRlckV2ZW50cyAqLyAiLi9FdmVudHMvcG9pbnRlckV2
ZW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DdWxsaW5nX3JheV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ3Vs
bGluZy9yYXkgKi8gIi4vQ3VsbGluZy9yYXkudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19waXZvdFRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3Bpdm90VG9vbHMgKi8gIi4vTWlzYy9waXZvdFRv
b2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWlsZGVyc19wbGFu
ZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uLy4uL01lc2hlcy9CdWlsZGVycy9wbGFuZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1
aWxkZXJzL3BsYW5lQnVpbGRlci50cyIpOworCisKKworCisKKworCisKKy8qKgorICogQSBiZWhh
dmlvciB0aGF0IHdoZW4gYXR0YWNoZWQgdG8gYSBtZXNoIHdpbGwgYWxsb3cgdGhlIG1lc2ggdG8g
YmUgZHJhZ2dlZCBhcm91bmQgdGhlIHNjcmVlbiBiYXNlZCBvbiBwb2ludGVyIGV2ZW50cworICov
Cit2YXIgUG9pbnRlckRyYWdCZWhhdmlvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcG9pbnRlciBkcmFnIGJlaGF2aW9yIHRoYXQgY2Fu
IGJlIGF0dGFjaGVkIHRvIGEgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBkcmFnIGF4
aXMgb3Igbm9ybWFsIG9mIHRoZSBwbGFuZSB0aGF0IHdpbGwgYmUgZHJhZ2dlZCBhY3Jvc3MuIElm
IG5vIG9wdGlvbnMgYXJlIHNwZWNpZmllZCB0aGUgZHJhZyBwbGFuZSB3aWxsIGFsd2F5cyBmYWNl
IHRoZSByYXkncyBvcmlnaW4gKGVnLiBjYW1lcmEpCisgICAgICovCisgICAgZnVuY3Rpb24gUG9p
bnRlckRyYWdCZWhhdmlvcihvcHRpb25zKSB7CisgICAgICAgIHRoaXMuX3VzZUFsdGVybmF0ZVBp
Y2tlZFBvaW50QWJvdmVNYXhEcmFnQW5nbGVEcmFnU3BlZWQgPSAtMS4xOworICAgICAgICAvKioK
KyAgICAgICAgICogVGhlIG1heGltdW0gdG9sZXJhdGVkIGFuZ2xlIGJldHdlZW4gdGhlIGRyYWcg
cGxhbmUgYW5kIGRyYWdnaW5nIHBvaW50ZXIgcmF5cyB0byB0cmlnZ2VyIHBvaW50ZXIgZXZlbnRz
LiBTZXQgdG8gMCB0byBhbGxvdyBhbnkgYW5nbGUgKGRlZmF1bHQ6IDApCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLm1heERyYWdBbmdsZSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBA
aGlkZGVuCisgICAgICAgICAqLworICAgICAgICB0aGlzLl91c2VBbHRlcm5hdGVQaWNrZWRQb2lu
dEFib3ZlTWF4RHJhZ0FuZ2xlID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
aWQgb2YgdGhlIHBvaW50ZXIgdGhhdCBpcyBjdXJyZW50bHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUg
YmVoYXZpb3IgKC0xIHdoZW4gbm8gcG9pbnRlciBpcyBhY3RpdmUpCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ1BvaW50ZXJJRCA9IC0xOworICAgICAgICAvKioKKyAg
ICAgICAgICogSWYgdGhlIGJlaGF2aW9yIGlzIGN1cnJlbnRseSBpbiBhIGRyYWdnaW5nIHN0YXRl
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBUaGUgZGlzdGFuY2UgdG93YXJkcyB0aGUgdGFyZ2V0IGRyYWcgcG9zaXRp
b24gdG8gbW92ZSBlYWNoIGZyYW1lLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gYXZvaWQgaml0dGVy
LiBTZXQgdGhpcyB0byAxIGZvciBubyBkZWxheS4gKERlZmF1bHQ6IDAuMikKKyAgICAgICAgICov
CisgICAgICAgIHRoaXMuZHJhZ0RlbHRhUmF0aW8gPSAwLjI7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBJZiB0aGUgZHJhZyBwbGFuZSBvcmllbnRhdGlvbiBzaG91bGQgYmUgdXBkYXRlZCBkdXJp
bmcgdGhlIGRyYWdnaW5nIChEZWZhdWx0OiB0cnVlKQorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy51cGRhdGVEcmFnUGxhbmUgPSB0cnVlOworICAgICAgICAvLyBEZWJ1ZyBtb2RlIHdpbGwgZGlz
cGxheSBkcmFnIHBsYW5lcyB0byBoZWxwIHZpc3VhbGl6ZSBiZWhhdmlvcgorICAgICAgICB0aGlz
Ll9kZWJ1Z01vZGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbW92aW5nID0gZmFsc2U7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiAgRmlyZXMgZWFjaCB0aW1lIHRoZSBhdHRhY2hlZCBtZXNoIGlz
IGRyYWdnZWQgd2l0aCB0aGUgcG9pbnRlcgorICAgICAgICAgKiAgKiBkZWx0YSBiZXR3ZWVuIGxh
c3QgZHJhZyBwb3NpdGlvbiBhbmQgY3VycmVudCBkcmFnIHBvc2l0aW9uIGluIHdvcmxkIHNwYWNl
CisgICAgICAgICAqICAqIGRyYWdEaXN0YW5jZSBhbG9uZyB0aGUgZHJhZyBheGlzCisgICAgICAg
ICAqICAqIGRyYWdQbGFuZU5vcm1hbCBub3JtYWwgb2YgdGhlIGN1cnJlbnQgZHJhZyBwbGFuZSB1
c2VkIGR1cmluZyB0aGUgZHJhZworICAgICAgICAgKiAgKiBkcmFnUGxhbmVQb2ludCBpbiB3b3Js
ZCBzcGFjZSB3aGVyZSB0aGUgZHJhZyBpbnRlcnNlY3RzIHRoZSBkcmFnIHBsYW5lCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLm9uRHJhZ09ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJs
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqICBGaXJlcyBlYWNoIHRpbWUgYSBkcmFnIGJlZ2lucyAoZWcuIG1vdXNl
IGRvd24gb24gbWVzaCkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25EcmFnU3RhcnRPYnNl
cnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiAgRmlyZXMgZWFjaCB0
aW1lIGEgZHJhZyBlbmRzIChlZy4gbW91c2UgcmVsZWFzZSBhZnRlciBkcmFnKQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5vbkRyYWdFbmRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFi
bGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiAgSWYgdGhlIGF0dGFjaGVkIG1lc2ggc2hvdWxkIGJlIG1vdmVkIHdo
ZW4gZHJhZ2dlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tb3ZlQXR0YWNoZWQgPSB0cnVl
OworICAgICAgICAvKioKKyAgICAgICAgICogIElmIHRoZSBkcmFnIGJlaGF2aW9yIHdpbGwgcmVh
Y3QgdG8gZHJhZyBldmVudHMgKERlZmF1bHQ6IHRydWUpCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmVuYWJsZWQgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgcG9pbnRlciBl
dmVudHMgc2hvdWxkIHN0YXJ0IGFuZCByZWxlYXNlIHRoZSBkcmFnIChEZWZhdWx0OiB0cnVlKQor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zdGFydEFuZFJlbGVhc2VEcmFnT25Qb2ludGVyRXZl
bnRzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIGNhbWVyYSBjb250cm9scyBz
aG91bGQgYmUgZGV0YWNoZWQgZHVyaW5nIHRoZSBkcmFnCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmRldGFjaENhbWVyYUNvbnRyb2xzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IElmIHNldCwgdGhlIGRyYWcgcGxhbmUvYXhpcyB3aWxsIGJlIHJvdGF0ZWQgYmFzZWQgb24gdGhl
IGF0dGFjaGVkIG1lc2gncyB3b3JsZCByb3RhdGlvbiAoRGVmYXVsdDogdHJ1ZSkKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMudXNlT2JqZWN0T3JpZW5hdGlvbkZvckRyYWdnaW5nID0gdHJ1ZTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFByZWRpY2F0ZSB0byBkZXRlcm1pbmUgaWYgaXQgaXMg
dmFsaWQgdG8gbW92ZSB0aGUgb2JqZWN0IHRvIGEgbmV3IHBvc2l0aW9uIHdoZW4gaXQgaXMgbW92
ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudmFsaWRhdGVEcmFnID0gZnVuY3Rpb24gKHRh
cmdldFBvc2l0aW9uKSB7IHJldHVybiB0cnVlOyB9OworICAgICAgICB0aGlzLl90bXBWZWN0b3Ig
PSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
Y3RvcjMiXSgwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fYWx0ZXJuYXRlUGlja2VkUG9pbnQgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXSgwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fd29ybGREcmFnQXhpcyA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAs
IDApOworICAgICAgICB0aGlzLl90YXJnZXRQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAg
ICAgICB0aGlzLl9hdHRhY2hlZEVsZW1lbnQgPSBudWxsOworICAgICAgICB0aGlzLl9zdGFydERy
YWdSYXkgPSBuZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlJh
eSJdKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdKCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdKCkpOworICAgICAgICB0aGlzLl9sYXN0UG9pbnRlclJheSA9IHt9
OworICAgICAgICB0aGlzLl9kcmFnRGVsdGEgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgpOworICAgICAgICAvLyBWYXJpYWJs
ZXMgdG8gYXZvaWQgaW5zdGFudGlhdGlvbiBpbiB0aGUgYmVsb3cgbWV0aG9kCisgICAgICAgIHRo
aXMuX3BvaW50QSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAgICAgICB0aGlzLl9wb2ludEIgPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMi
XSgwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fcG9pbnRDID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMCwgMCk7CisgICAg
ICAgIHRoaXMuX2xpbmVBID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMCwgMCk7CisgICAgICAgIHRoaXMuX2xpbmVCID0g
bmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0
b3IzIl0oMCwgMCwgMCk7CisgICAgICAgIHRoaXMuX2xvY2FsQXhpcyA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDAp
OworICAgICAgICB0aGlzLl9sb29rQXQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5f
b3B0aW9ucyA9IG9wdGlvbnMgPyBvcHRpb25zIDoge307CisgICAgICAgIHZhciBvcHRpb25Db3Vu
dCA9IDA7CisgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmRyYWdBeGlzKSB7CisgICAgICAgICAg
ICBvcHRpb25Db3VudCsrOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmRy
YWdQbGFuZU5vcm1hbCkgeworICAgICAgICAgICAgb3B0aW9uQ291bnQrKzsKKyAgICAgICAgfQor
ICAgICAgICBpZiAob3B0aW9uQ291bnQgPiAxKSB7CisgICAgICAgICAgICB0aHJvdyAiTXVsdGlw
bGUgZHJhZyBtb2RlcyBzcGVjaWZpZWQgaW4gZHJhZ0JlaGF2aW9yIG9wdGlvbnMuIE9ubHkgb25l
IGV4cGVjdGVkIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
UG9pbnRlckRyYWdCZWhhdmlvci5wcm90b3R5cGUsICJuYW1lIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogIFRoZSBuYW1lIG9mIHRoZSBiZWhhdmlvcgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gIlBvaW50ZXJEcmFnIjsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogIEluaXRpYWxpemVzIHRoZSBiZWhhdmlv
cgorICAgICAqLworICAgIFBvaW50ZXJEcmFnQmVoYXZpb3IucHJvdG90eXBlLmluaXQgPSBmdW5j
dGlvbiAoKSB7IH07CisgICAgLyoqCisgICAgICogQXR0YWNoZXMgdGhlIGRyYWcgYmVoYXZpb3Ig
dGhlIHBhc3NlZCBpbiBtZXNoCisgICAgICogQHBhcmFtIG93bmVyTm9kZSBUaGUgbWVzaCB0aGF0
IHdpbGwgYmUgZHJhZ2dlZCBhcm91bmQgb25jZSBhdHRhY2hlZAorICAgICAqIEBwYXJhbSBwcmVk
aWNhdGUgUHJlZGljYXRlIHRvIHVzZSBmb3IgcGljayBmaWx0ZXJpbmcKKyAgICAgKi8KKyAgICBQ
b2ludGVyRHJhZ0JlaGF2aW9yLnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiAob3duZXJOb2Rl
LCBwcmVkaWNhdGUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5f
c2NlbmUgPSBvd25lck5vZGUuZ2V0U2NlbmUoKTsKKyAgICAgICAgdGhpcy5hdHRhY2hlZE5vZGUg
PSBvd25lck5vZGU7CisgICAgICAgIC8vIEluaXRpYWxpemUgZHJhZyBwbGFuZSB0byBub3QgaW50
ZXJmZXJlIHdpdGggZXhpc3Rpbmcgc2NlbmUKKyAgICAgICAgaWYgKCFQb2ludGVyRHJhZ0JlaGF2
aW9yLl9wbGFuZVNjZW5lKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fZGVidWdNb2RlKSB7Cisg
ICAgICAgICAgICAgICAgUG9pbnRlckRyYWdCZWhhdmlvci5fcGxhbmVTY2VuZSA9IHRoaXMuX3Nj
ZW5lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
UG9pbnRlckRyYWdCZWhhdmlvci5fcGxhbmVTY2VuZSA9IG5ldyBfc2NlbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siU2NlbmUiXSh0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwgeyB2aXJ0
dWFsOiB0cnVlIH0pOworICAgICAgICAgICAgICAgIFBvaW50ZXJEcmFnQmVoYXZpb3IuX3BsYW5l
U2NlbmUuZGV0YWNoQ29udHJvbCgpOworICAgICAgICAgICAgICAgIHRoaXMuX3NjZW5lLm9uRGlz
cG9zZU9ic2VydmFibGUuYWRkT25jZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAg
IFBvaW50ZXJEcmFnQmVoYXZpb3IuX3BsYW5lU2NlbmUuZGlzcG9zZSgpOworICAgICAgICAgICAg
ICAgICAgICBQb2ludGVyRHJhZ0JlaGF2aW9yLl9wbGFuZVNjZW5lID0gbnVsbDsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9kcmFn
UGxhbmUgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJd
LkNyZWF0ZVBsYW5lKCJwb2ludGVyRHJhZ1BsYW5lIiwgdGhpcy5fZGVidWdNb2RlID8gMSA6IDEw
MDAwLCBQb2ludGVyRHJhZ0JlaGF2aW9yLl9wbGFuZVNjZW5lLCBmYWxzZSwgX01lc2hlc19tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5ET1VCTEVTSURFKTsKKyAgICAg
ICAgLy8gU3RhdGUgb2YgdGhlIGRyYWcKKyAgICAgICAgdGhpcy5sYXN0RHJhZ1Bvc2l0aW9uID0g
bmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0
b3IzIl0oMCwgMCwgMCk7CisgICAgICAgIHZhciBwaWNrUHJlZGljYXRlID0gISFwcmVkaWNhdGUg
PyBwcmVkaWNhdGUgOiBmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgcmV0dXJuIF90aGlzLmF0
dGFjaGVkTm9kZSA9PSBtIHx8IG0uaXNEZXNjZW5kYW50T2YoX3RoaXMuYXR0YWNoZWROb2RlKTsK
KyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fcG9pbnRlck9ic2VydmVyID0gdGhpcy5fc2NlbmUu
b25Qb2ludGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHBvaW50ZXJJbmZvLCBldmVudFN0YXRl
KSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLmVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9pbnRlckluZm8udHlwZSA9
PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUG9p
bnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9XTikgeworICAgICAgICAgICAgICAgIGlmIChfdGhp
cy5zdGFydEFuZFJlbGVhc2VEcmFnT25Qb2ludGVyRXZlbnRzICYmICFfdGhpcy5kcmFnZ2luZyAm
JiBwb2ludGVySW5mby5waWNrSW5mbyAmJiBwb2ludGVySW5mby5waWNrSW5mby5oaXQgJiYgcG9p
bnRlckluZm8ucGlja0luZm8ucGlja2VkTWVzaCAmJiBwb2ludGVySW5mby5waWNrSW5mby5waWNr
ZWRQb2ludCAmJiBwb2ludGVySW5mby5waWNrSW5mby5yYXkgJiYgcGlja1ByZWRpY2F0ZShwb2lu
dGVySW5mby5waWNrSW5mby5waWNrZWRNZXNoKSkgeworICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fc3RhcnREcmFnKHBvaW50ZXJJbmZvLmV2ZW50LnBvaW50ZXJJZCwgcG9pbnRlckluZm8ucGlj
a0luZm8ucmF5LCBwb2ludGVySW5mby5waWNrSW5mby5waWNrZWRQb2ludCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocG9pbnRlckluZm8u
dHlwZSA9PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSVVApIHsKKyAgICAgICAgICAgICAgICBpZiAo
X3RoaXMuc3RhcnRBbmRSZWxlYXNlRHJhZ09uUG9pbnRlckV2ZW50cyAmJiBfdGhpcy5jdXJyZW50
RHJhZ2dpbmdQb2ludGVySUQgPT0gcG9pbnRlckluZm8uZXZlbnQucG9pbnRlcklkKSB7CisgICAg
ICAgICAgICAgICAgICAgIF90aGlzLnJlbGVhc2VEcmFnKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocG9pbnRlckluZm8udHlwZSA9PSBf
RXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUG9pbnRl
ckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRSkgeworICAgICAgICAgICAgICAgIHZhciBwb2ludGVy
SWQgPSBwb2ludGVySW5mby5ldmVudC5wb2ludGVySWQ7CisgICAgICAgICAgICAgICAgLy8gSWYg
ZHJhZyB3YXMgc3RhcnRlZCB3aXRoIGFueU1vdXNlSUQgc3BlY2lmaWVkLCBzZXQgcG9pbnRlcklE
IHRvIHRoZSBuZXh0IG1vdXNlIHRoYXQgbW92ZWQKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMu
Y3VycmVudERyYWdnaW5nUG9pbnRlcklEID09PSBQb2ludGVyRHJhZ0JlaGF2aW9yLl9BbnlNb3Vz
ZUlEICYmIHBvaW50ZXJJZCAhPT0gUG9pbnRlckRyYWdCZWhhdmlvci5fQW55TW91c2VJRCAmJiBw
b2ludGVySW5mby5ldmVudC5wb2ludGVyVHlwZSA9PSAibW91c2UiKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChfdGhpcy5fbGFzdFBvaW50ZXJSYXlbX3RoaXMuY3VycmVudERyYWdnaW5nUG9p
bnRlcklEXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2xhc3RQb2ludGVyUmF5
W3BvaW50ZXJJZF0gPSBfdGhpcy5fbGFzdFBvaW50ZXJSYXlbX3RoaXMuY3VycmVudERyYWdnaW5n
UG9pbnRlcklEXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBfdGhpcy5fbGFzdFBv
aW50ZXJSYXlbX3RoaXMuY3VycmVudERyYWdnaW5nUG9pbnRlcklEXTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50RHJhZ2dpbmdQb2ludGVy
SUQgPSBwb2ludGVySWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEtl
ZXAgdHJhY2sgb2YgbGFzdCBwb2ludGVyIHJheSwgdGhpcyBpcyB1c2VkIHNpbXVsYXRpbmcgdGhl
IHN0YXJ0IG9mIGEgZHJhZyBpbiBzdGFydERyYWcoKQorICAgICAgICAgICAgICAgIGlmICghX3Ro
aXMuX2xhc3RQb2ludGVyUmF5W3BvaW50ZXJJZF0pIHsKKyAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuX2xhc3RQb2ludGVyUmF5W3BvaW50ZXJJZF0gPSBuZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlJheSJdKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocG9pbnRlckluZm8ucGlja0luZm8gJiYgcG9p
bnRlckluZm8ucGlja0luZm8ucmF5KSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9sYXN0
UG9pbnRlclJheVtwb2ludGVySWRdLm9yaWdpbi5jb3B5RnJvbShwb2ludGVySW5mby5waWNrSW5m
by5yYXkub3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2xhc3RQb2ludGVyUmF5
W3BvaW50ZXJJZF0uZGlyZWN0aW9uLmNvcHlGcm9tKHBvaW50ZXJJbmZvLnBpY2tJbmZvLnJheS5k
aXJlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY3VycmVudERyYWdnaW5n
UG9pbnRlcklEID09IHBvaW50ZXJJZCAmJiBfdGhpcy5kcmFnZ2luZykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgX3RoaXMuX21vdmVEcmFnKHBvaW50ZXJJbmZvLnBpY2tJbmZvLnJheSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0pOworICAgICAgICB0aGlzLl9iZWZvcmVSZW5kZXJPYnNlcnZlciA9IHRoaXMuX3Nj
ZW5lLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgaWYgKF90aGlzLl9tb3ZpbmcgJiYgX3RoaXMubW92ZUF0dGFjaGVkKSB7CisgICAgICAgICAg
ICAgICAgX01pc2NfcGl2b3RUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQaXZv
dFRvb2xzIl0uX1JlbW92ZUFuZFN0b3JlUGl2b3RQb2ludChfdGhpcy5hdHRhY2hlZE5vZGUpOwor
ICAgICAgICAgICAgICAgIC8vIFNsb3dseSBtb3ZlIG1lc2ggdG8gYXZvaWQgaml0dGVyCisgICAg
ICAgICAgICAgICAgX3RoaXMuX3RhcmdldFBvc2l0aW9uLnN1YnRyYWN0VG9SZWYoKF90aGlzLmF0
dGFjaGVkTm9kZSkuYWJzb2x1dGVQb3NpdGlvbiwgX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAg
ICAgICAgICAgX3RoaXMuX3RtcFZlY3Rvci5zY2FsZUluUGxhY2UoX3RoaXMuZHJhZ0RlbHRhUmF0
aW8pOworICAgICAgICAgICAgICAgIChfdGhpcy5hdHRhY2hlZE5vZGUpLmdldEFic29sdXRlUG9z
aXRpb24oKS5hZGRUb1JlZihfdGhpcy5fdG1wVmVjdG9yLCBfdGhpcy5fdG1wVmVjdG9yKTsKKyAg
ICAgICAgICAgICAgICBpZiAoX3RoaXMudmFsaWRhdGVEcmFnKF90aGlzLl90bXBWZWN0b3IpKSB7
CisgICAgICAgICAgICAgICAgICAgIChfdGhpcy5hdHRhY2hlZE5vZGUpLnNldEFic29sdXRlUG9z
aXRpb24oX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIF9NaXNjX3Bpdm90VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUGl2b3RU
b29scyJdLl9SZXN0b3JlUGl2b3RQb2ludChfdGhpcy5hdHRhY2hlZE5vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEZvcmNlIHJlbGFzZSB0
aGUgZHJhZyBhY3Rpb24gYnkgY29kZS4KKyAgICAgKi8KKyAgICBQb2ludGVyRHJhZ0JlaGF2aW9y
LnByb3RvdHlwZS5yZWxlYXNlRHJhZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5kcmFn
Z2luZyA9IGZhbHNlOworICAgICAgICB0aGlzLm9uRHJhZ0VuZE9ic2VydmFibGUubm90aWZ5T2Jz
ZXJ2ZXJzKHsgZHJhZ1BsYW5lUG9pbnQ6IHRoaXMubGFzdERyYWdQb3NpdGlvbiwgcG9pbnRlcklk
OiB0aGlzLmN1cnJlbnREcmFnZ2luZ1BvaW50ZXJJRCB9KTsKKyAgICAgICAgdGhpcy5jdXJyZW50
RHJhZ2dpbmdQb2ludGVySUQgPSAtMTsKKyAgICAgICAgdGhpcy5fbW92aW5nID0gZmFsc2U7Cisg
ICAgICAgIC8vIFJlYXR0YWNoIGNhbWVyYSBjb250cm9scworICAgICAgICBpZiAodGhpcy5kZXRh
Y2hDYW1lcmFDb250cm9scyAmJiB0aGlzLl9hdHRhY2hlZEVsZW1lbnQgJiYgdGhpcy5fc2NlbmUu
YWN0aXZlQ2FtZXJhICYmICF0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEubGVmdENhbWVyYSkgewor
ICAgICAgICAgICAgdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLmF0dGFjaENvbnRyb2wodGhpcy5f
YXR0YWNoZWRFbGVtZW50LCB0cnVlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogU2ltdWxhdGVzIHRoZSBzdGFydCBvZiBhIHBvaW50ZXIgZHJhZyBldmVudCBvbiB0aGUgYmVo
YXZpb3IKKyAgICAgKiBAcGFyYW0gcG9pbnRlcklkIHBvaW50ZXJJRCBvZiB0aGUgcG9pbnRlciB0
aGF0IHNob3VsZCBiZSBzaW11bGF0ZWQgKERlZmF1bHQ6IEFueSBtb3VzZSBwb2ludGVyIElEKQor
ICAgICAqIEBwYXJhbSBmcm9tUmF5IGluaXRpYWwgcmF5IG9mIHRoZSBwb2ludGVyIHRvIGJlIHNp
bXVsYXRlZCAoRGVmYXVsdDogUmF5IGZyb20gY2FtZXJhIHRvIGF0dGFjaGVkIG1lc2gpCisgICAg
ICogQHBhcmFtIHN0YXJ0UGlja2VkUG9pbnQgcGlja2VkIHBvaW50IG9mIHRoZSBwb2ludGVyIHRv
IGJlIHNpbXVsYXRlZCAoRGVmYXVsdDogYXR0YWNoZWQgbWVzaCBwb3NpdGlvbikKKyAgICAgKi8K
KyAgICBQb2ludGVyRHJhZ0JlaGF2aW9yLnByb3RvdHlwZS5zdGFydERyYWcgPSBmdW5jdGlvbiAo
cG9pbnRlcklkLCBmcm9tUmF5LCBzdGFydFBpY2tlZFBvaW50KSB7CisgICAgICAgIGlmIChwb2lu
dGVySWQgPT09IHZvaWQgMCkgeyBwb2ludGVySWQgPSBQb2ludGVyRHJhZ0JlaGF2aW9yLl9BbnlN
b3VzZUlEOyB9CisgICAgICAgIHRoaXMuX3N0YXJ0RHJhZyhwb2ludGVySWQsIGZyb21SYXksIHN0
YXJ0UGlja2VkUG9pbnQpOworICAgICAgICB2YXIgbGFzdFJheSA9IHRoaXMuX2xhc3RQb2ludGVy
UmF5W3BvaW50ZXJJZF07CisgICAgICAgIGlmIChwb2ludGVySWQgPT09IFBvaW50ZXJEcmFnQmVo
YXZpb3IuX0FueU1vdXNlSUQpIHsKKyAgICAgICAgICAgIGxhc3RSYXkgPSB0aGlzLl9sYXN0UG9p
bnRlclJheVtPYmplY3Qua2V5cyh0aGlzLl9sYXN0UG9pbnRlclJheSlbMF1dOworICAgICAgICB9
CisgICAgICAgIGlmIChsYXN0UmF5KSB7CisgICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgYSBs
YXN0IHBvaW50ZXIgcmF5IGRyYWcgdGhlIG9iamVjdCB0aGVyZQorICAgICAgICAgICAgdGhpcy5f
bW92ZURyYWcobGFzdFJheSk7CisgICAgICAgIH0KKyAgICB9OworICAgIFBvaW50ZXJEcmFnQmVo
YXZpb3IucHJvdG90eXBlLl9zdGFydERyYWcgPSBmdW5jdGlvbiAocG9pbnRlcklkLCBmcm9tUmF5
LCBzdGFydFBpY2tlZFBvaW50KSB7CisgICAgICAgIGlmICghdGhpcy5fc2NlbmUuYWN0aXZlQ2Ft
ZXJhIHx8IHRoaXMuZHJhZ2dpbmcgfHwgIXRoaXMuYXR0YWNoZWROb2RlKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgX01pc2NfcGl2b3RUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fWyJQaXZvdFRvb2xzIl0uX1JlbW92ZUFuZFN0b3JlUGl2b3RQb2lu
dCh0aGlzLmF0dGFjaGVkTm9kZSk7CisgICAgICAgIC8vIENyZWF0ZSBzdGFydCByYXkgZnJvbSB0
aGUgY2FtZXJhIHRvIHRoZSBvYmplY3QKKyAgICAgICAgaWYgKGZyb21SYXkpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3N0YXJ0RHJhZ1JheS5kaXJlY3Rpb24uY29weUZyb20oZnJvbVJheS5kaXJlY3Rp
b24pOworICAgICAgICAgICAgdGhpcy5fc3RhcnREcmFnUmF5Lm9yaWdpbi5jb3B5RnJvbShmcm9t
UmF5Lm9yaWdpbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlz
Ll9zdGFydERyYWdSYXkub3JpZ2luLmNvcHlGcm9tKHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5w
b3NpdGlvbik7CisgICAgICAgICAgICB0aGlzLmF0dGFjaGVkTm9kZS5nZXRXb3JsZE1hdHJpeCgp
LmdldFRyYW5zbGF0aW9uVG9SZWYodGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAgICAgIHRoaXMu
X3RtcFZlY3Rvci5zdWJ0cmFjdFRvUmVmKHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5wb3NpdGlv
biwgdGhpcy5fc3RhcnREcmFnUmF5LmRpcmVjdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fdXBkYXRlRHJhZ1BsYW5lUG9zaXRpb24odGhpcy5fc3RhcnREcmFnUmF5LCBzdGFydFBpY2tl
ZFBvaW50ID8gc3RhcnRQaWNrZWRQb2ludCA6IHRoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgIHZh
ciBwaWNrZWRQb2ludCA9IHRoaXMuX3BpY2tXaXRoUmF5T25EcmFnUGxhbmUodGhpcy5fc3RhcnRE
cmFnUmF5KTsKKyAgICAgICAgaWYgKHBpY2tlZFBvaW50KSB7CisgICAgICAgICAgICB0aGlzLmRy
YWdnaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuY3VycmVudERyYWdnaW5nUG9pbnRlcklE
ID0gcG9pbnRlcklkOworICAgICAgICAgICAgdGhpcy5sYXN0RHJhZ1Bvc2l0aW9uLmNvcHlGcm9t
KHBpY2tlZFBvaW50KTsKKyAgICAgICAgICAgIHRoaXMub25EcmFnU3RhcnRPYnNlcnZhYmxlLm5v
dGlmeU9ic2VydmVycyh7IGRyYWdQbGFuZVBvaW50OiBwaWNrZWRQb2ludCwgcG9pbnRlcklkOiB0
aGlzLmN1cnJlbnREcmFnZ2luZ1BvaW50ZXJJRCB9KTsKKyAgICAgICAgICAgIHRoaXMuX3Rhcmdl
dFBvc2l0aW9uLmNvcHlGcm9tKCh0aGlzLmF0dGFjaGVkTm9kZSkuYWJzb2x1dGVQb3NpdGlvbik7
CisgICAgICAgICAgICAvLyBEZXRhdGNoIGNhbWVyYSBjb250cm9scworICAgICAgICAgICAgaWYg
KHRoaXMuZGV0YWNoQ2FtZXJhQ29udHJvbHMgJiYgdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhICYm
IHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5pbnB1dHMgJiYgIXRoaXMuX3NjZW5lLmFjdGl2ZUNh
bWVyYS5sZWZ0Q2FtZXJhKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NjZW5lLmFjdGl2
ZUNhbWVyYS5pbnB1dHMuYXR0YWNoZWRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuX2F0dGFjaGVkRWxlbWVudCA9IHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5pbnB1dHMuYXR0
YWNoZWRFbGVtZW50OworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5hY3RpdmVDYW1l
cmEuZGV0YWNoQ29udHJvbCh0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEuaW5wdXRzLmF0dGFjaGVk
RWxlbWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZEVsZW1lbnQgPSBudWxsOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBfTWlzY19waXZvdFRv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBpdm90VG9vbHMiXS5fUmVzdG9yZVBp
dm90UG9pbnQodGhpcy5hdHRhY2hlZE5vZGUpOworICAgIH07CisgICAgUG9pbnRlckRyYWdCZWhh
dmlvci5wcm90b3R5cGUuX21vdmVEcmFnID0gZnVuY3Rpb24gKHJheSkgeworICAgICAgICB0aGlz
Ll9tb3ZpbmcgPSB0cnVlOworICAgICAgICB2YXIgcGlja2VkUG9pbnQgPSB0aGlzLl9waWNrV2l0
aFJheU9uRHJhZ1BsYW5lKHJheSk7CisgICAgICAgIGlmIChwaWNrZWRQb2ludCkgeworICAgICAg
ICAgICAgaWYgKHRoaXMudXBkYXRlRHJhZ1BsYW5lKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
dXBkYXRlRHJhZ1BsYW5lUG9zaXRpb24ocmF5LCBwaWNrZWRQb2ludCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXIgZHJhZ0xlbmd0aCA9IDA7CisgICAgICAgICAgICAvLyBkZXBlbmRp
bmcgb24gdGhlIGRyYWcgbW9kZSBvcHRpb24gZHJhZyBhY2NvcmRpbmdseQorICAgICAgICAgICAg
aWYgKHRoaXMuX29wdGlvbnMuZHJhZ0F4aXMpIHsKKyAgICAgICAgICAgICAgICAvLyBDb252ZXJ0
IGxvY2FsIGRyYWcgYXhpcyB0byB3b3JsZCBpZiB1c2VPYmplY3RPcmllbmF0aW9uRm9yRHJhZ2dp
bmcKKyAgICAgICAgICAgICAgICB0aGlzLnVzZU9iamVjdE9yaWVuYXRpb25Gb3JEcmFnZ2luZyA/
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3Iz
Il0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0aGlzLl9vcHRpb25zLmRyYWdBeGlzLCB0aGlz
LmF0dGFjaGVkTm9kZS5nZXRXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4KCksIHRoaXMu
X3dvcmxkRHJhZ0F4aXMpIDogdGhpcy5fd29ybGREcmFnQXhpcy5jb3B5RnJvbSh0aGlzLl9vcHRp
b25zLmRyYWdBeGlzKTsKKyAgICAgICAgICAgICAgICAvLyBQcm9qZWN0IGRlbHRhIGRyYWcgZnJv
bSB0aGUgZHJhZyBwbGFuZSBvbnRvIHRoZSBkcmFnIGF4aXMKKyAgICAgICAgICAgICAgICBwaWNr
ZWRQb2ludC5zdWJ0cmFjdFRvUmVmKHRoaXMubGFzdERyYWdQb3NpdGlvbiwgdGhpcy5fdG1wVmVj
dG9yKTsKKyAgICAgICAgICAgICAgICBkcmFnTGVuZ3RoID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5Eb3QodGhpcy5fdG1wVmVjdG9y
LCB0aGlzLl93b3JsZERyYWdBeGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLl93b3JsZERyYWdB
eGlzLnNjYWxlVG9SZWYoZHJhZ0xlbmd0aCwgdGhpcy5fZHJhZ0RlbHRhKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRyYWdMZW5ndGggPSB0aGlz
Ll9kcmFnRGVsdGEubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcGlja2VkUG9pbnQuc3VidHJh
Y3RUb1JlZih0aGlzLmxhc3REcmFnUG9zaXRpb24sIHRoaXMuX2RyYWdEZWx0YSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl90YXJnZXRQb3NpdGlvbi5hZGRJblBsYWNlKHRoaXMu
X2RyYWdEZWx0YSk7CisgICAgICAgICAgICB0aGlzLm9uRHJhZ09ic2VydmFibGUubm90aWZ5T2Jz
ZXJ2ZXJzKHsgZHJhZ0Rpc3RhbmNlOiBkcmFnTGVuZ3RoLCBkZWx0YTogdGhpcy5fZHJhZ0RlbHRh
LCBkcmFnUGxhbmVQb2ludDogcGlja2VkUG9pbnQsIGRyYWdQbGFuZU5vcm1hbDogdGhpcy5fZHJh
Z1BsYW5lLmZvcndhcmQsIHBvaW50ZXJJZDogdGhpcy5jdXJyZW50RHJhZ2dpbmdQb2ludGVySUQg
fSk7CisgICAgICAgICAgICB0aGlzLmxhc3REcmFnUG9zaXRpb24uY29weUZyb20ocGlja2VkUG9p
bnQpOworICAgICAgICB9CisgICAgfTsKKyAgICBQb2ludGVyRHJhZ0JlaGF2aW9yLnByb3RvdHlw
ZS5fcGlja1dpdGhSYXlPbkRyYWdQbGFuZSA9IGZ1bmN0aW9uIChyYXkpIHsKKyAgICAgICAgdmFy
IF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKCFyYXkpIHsKKyAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICB9CisgICAgICAgIC8vIENhbGN1bGF0ZSBhbmdsZSBiZXR3ZWVuIHBsYW5l
IG5vcm1hbCBhbmQgcmF5CisgICAgICAgIHZhciBhbmdsZSA9IE1hdGguYWNvcyhfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkRvdCh0aGlz
Ll9kcmFnUGxhbmUuZm9yd2FyZCwgcmF5LmRpcmVjdGlvbikpOworICAgICAgICAvLyBDb3JyZWN0
IGlmIHJheSBpcyBjYXN0ZWQgZnJvbSBvcG9zaXRlIHNpZGUKKyAgICAgICAgaWYgKGFuZ2xlID4g
TWF0aC5QSSAvIDIpIHsKKyAgICAgICAgICAgIGFuZ2xlID0gTWF0aC5QSSAtIGFuZ2xlOworICAg
ICAgICB9CisgICAgICAgIC8vIElmIHRoZSBhbmdsZSBpcyB0b28gcGVycGVuZGljdWxhciB0byB0
aGUgcGxhbmUgcGljayBhbm90aGVyIHBvaW50IG9uIHRoZSBwbGFuZSB3aGVyZSBpdCBpcyBsb29r
aW5nCisgICAgICAgIGlmICh0aGlzLm1heERyYWdBbmdsZSA+IDAgJiYgYW5nbGUgPiB0aGlzLm1h
eERyYWdBbmdsZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3VzZUFsdGVybmF0ZVBpY2tlZFBv
aW50QWJvdmVNYXhEcmFnQW5nbGUpIHsKKyAgICAgICAgICAgICAgICAvLyBJbnZlcnQgcmF5IGRp
cmVjdGlvbiBhbG9uZyB0aGUgdG93YXJkcyBvYmplY3QgYXhpcworICAgICAgICAgICAgICAgIHRo
aXMuX3RtcFZlY3Rvci5jb3B5RnJvbShyYXkuZGlyZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAo
dGhpcy5hdHRhY2hlZE5vZGUpLmFic29sdXRlUG9zaXRpb24uc3VidHJhY3RUb1JlZihyYXkub3Jp
Z2luLCB0aGlzLl9hbHRlcm5hdGVQaWNrZWRQb2ludCk7CisgICAgICAgICAgICAgICAgdGhpcy5f
YWx0ZXJuYXRlUGlja2VkUG9pbnQubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgdGhpcy5f
YWx0ZXJuYXRlUGlja2VkUG9pbnQuc2NhbGVJblBsYWNlKHRoaXMuX3VzZUFsdGVybmF0ZVBpY2tl
ZFBvaW50QWJvdmVNYXhEcmFnQW5nbGVEcmFnU3BlZWQgKiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkRvdCh0aGlzLl9hbHRlcm5hdGVQ
aWNrZWRQb2ludCwgdGhpcy5fdG1wVmVjdG9yKSk7CisgICAgICAgICAgICAgICAgdGhpcy5fdG1w
VmVjdG9yLmFkZEluUGxhY2UodGhpcy5fYWx0ZXJuYXRlUGlja2VkUG9pbnQpOworICAgICAgICAg
ICAgICAgIC8vIFByb2plY3QgcmVzdWx0aW5nIHZlY3RvciBvbnRvIHRoZSBkcmFnIHBsYW5lIGFu
ZCBhZGQgaXQgdG8gdGhlIGF0dGFjaGVkIG5vZGVzIGFic29sdXRlIHBvc2l0aW9uIHRvIGdldCBh
IHBpY2tlZCBwb2ludAorICAgICAgICAgICAgICAgIHZhciBkb3QgPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkRvdCh0aGlzLl9kcmFn
UGxhbmUuZm9yd2FyZCwgdGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9k
cmFnUGxhbmUuZm9yd2FyZC5zY2FsZVRvUmVmKC1kb3QsIHRoaXMuX2FsdGVybmF0ZVBpY2tlZFBv
aW50KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHRlcm5hdGVQaWNrZWRQb2ludC5hZGRJblBs
YWNlKHRoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgdGhpcy5fYWx0ZXJuYXRlUGlj
a2VkUG9pbnQuYWRkSW5QbGFjZSgodGhpcy5hdHRhY2hlZE5vZGUpLmFic29sdXRlUG9zaXRpb24p
OworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbHRlcm5hdGVQaWNrZWRQb2ludDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBwaWNrUmVzdWx0ID0g
UG9pbnRlckRyYWdCZWhhdmlvci5fcGxhbmVTY2VuZS5waWNrV2l0aFJheShyYXksIGZ1bmN0aW9u
IChtKSB7IHJldHVybiBtID09IF90aGlzLl9kcmFnUGxhbmU7IH0pOworICAgICAgICBpZiAocGlj
a1Jlc3VsdCAmJiBwaWNrUmVzdWx0LmhpdCAmJiBwaWNrUmVzdWx0LnBpY2tlZE1lc2ggJiYgcGlj
a1Jlc3VsdC5waWNrZWRQb2ludCkgeworICAgICAgICAgICAgcmV0dXJuIHBpY2tSZXN1bHQucGlj
a2VkUG9pbnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorICAgIH07CisgICAgLy8gUG9zaXRpb24gdGhlIGRyYWcgcGxhbmUg
YmFzZWQgb24gdGhlIGF0dGFjaGVkIG1lc2ggcG9zaXRpb24sIGZvciBzaW5nbGUgYXhpcyByb3Rh
dGUgdGhlIHBsYW5lIGFsb25nIHRoZSBheGlzIHRvIGZhY2UgdGhlIGNhbWVyYQorICAgIFBvaW50
ZXJEcmFnQmVoYXZpb3IucHJvdG90eXBlLl91cGRhdGVEcmFnUGxhbmVQb3NpdGlvbiA9IGZ1bmN0
aW9uIChyYXksIGRyYWdQbGFuZVBvc2l0aW9uKSB7CisgICAgICAgIHRoaXMuX3BvaW50QS5jb3B5
RnJvbShkcmFnUGxhbmVQb3NpdGlvbik7CisgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmRyYWdB
eGlzKSB7CisgICAgICAgICAgICB0aGlzLnVzZU9iamVjdE9yaWVuYXRpb25Gb3JEcmFnZ2luZyA/
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3Iz
Il0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0aGlzLl9vcHRpb25zLmRyYWdBeGlzLCB0aGlz
LmF0dGFjaGVkTm9kZS5nZXRXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4KCksIHRoaXMu
X2xvY2FsQXhpcykgOiB0aGlzLl9sb2NhbEF4aXMuY29weUZyb20odGhpcy5fb3B0aW9ucy5kcmFn
QXhpcyk7CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGxhbmUgbm9ybWFsIGluIGRpcmVjdGlv
biBvZiBjYW1lcmEgYnV0IHBlcnBlbmRpY3VsYXIgdG8gZHJhZyBheGlzCisgICAgICAgICAgICB0
aGlzLl9wb2ludEEuYWRkVG9SZWYodGhpcy5fbG9jYWxBeGlzLCB0aGlzLl9wb2ludEIpOyAvLyB0
b3dhcmRzIGRyYWcgYXhpcworICAgICAgICAgICAgcmF5Lm9yaWdpbi5zdWJ0cmFjdFRvUmVmKHRo
aXMuX3BvaW50QSwgdGhpcy5fcG9pbnRDKTsKKyAgICAgICAgICAgIHRoaXMuX3BvaW50QS5hZGRU
b1JlZih0aGlzLl9wb2ludEMubm9ybWFsaXplKCksIHRoaXMuX3BvaW50Qyk7IC8vIHRvd2FyZHMg
Y2FtZXJhCisgICAgICAgICAgICAvLyBHZXQgcGVycGVuZGljdWxhciBsaW5lIGZyb20gZGlyZWN0
aW9uIHRvIGNhbWVyYSBhbmQgZHJhZyBheGlzCisgICAgICAgICAgICB0aGlzLl9wb2ludEIuc3Vi
dHJhY3RUb1JlZih0aGlzLl9wb2ludEEsIHRoaXMuX2xpbmVBKTsKKyAgICAgICAgICAgIHRoaXMu
X3BvaW50Qy5zdWJ0cmFjdFRvUmVmKHRoaXMuX3BvaW50QSwgdGhpcy5fbGluZUIpOworICAgICAg
ICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
Y3RvcjMiXS5Dcm9zc1RvUmVmKHRoaXMuX2xpbmVBLCB0aGlzLl9saW5lQiwgdGhpcy5fbG9va0F0
KTsKKyAgICAgICAgICAgIC8vIEdldCBwZXJwZW5kaWN1bGFyIGxpbmUgZnJvbSBwcmV2aW91cyBy
ZXN1bHQgYW5kIGRyYWcgYXhpcyB0byBhZGp1c3QgbGluZUIgdG8gYmUgcGVycGVuZGljdWxhdCB0
byBjYW1lcmEKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZih0aGlzLl9saW5lQSwgdGhpcy5fbG9v
a0F0LCB0aGlzLl9sb29rQXQpOworICAgICAgICAgICAgdGhpcy5fbG9va0F0Lm5vcm1hbGl6ZSgp
OworICAgICAgICAgICAgdGhpcy5fZHJhZ1BsYW5lLnBvc2l0aW9uLmNvcHlGcm9tKHRoaXMuX3Bv
aW50QSk7CisgICAgICAgICAgICB0aGlzLl9wb2ludEEuYWRkVG9SZWYodGhpcy5fbG9va0F0LCB0
aGlzLl9sb29rQXQpOworICAgICAgICAgICAgdGhpcy5fZHJhZ1BsYW5lLmxvb2tBdCh0aGlzLl9s
b29rQXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX29wdGlvbnMuZHJhZ1Bs
YW5lTm9ybWFsKSB7CisgICAgICAgICAgICB0aGlzLnVzZU9iamVjdE9yaWVuYXRpb25Gb3JEcmFn
Z2luZyA/IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0aGlzLl9vcHRpb25zLmRyYWdQbGFu
ZU5vcm1hbCwgdGhpcy5hdHRhY2hlZE5vZGUuZ2V0V29ybGRNYXRyaXgoKS5nZXRSb3RhdGlvbk1h
dHJpeCgpLCB0aGlzLl9sb2NhbEF4aXMpIDogdGhpcy5fbG9jYWxBeGlzLmNvcHlGcm9tKHRoaXMu
X29wdGlvbnMuZHJhZ1BsYW5lTm9ybWFsKTsKKyAgICAgICAgICAgIHRoaXMuX2RyYWdQbGFuZS5w
b3NpdGlvbi5jb3B5RnJvbSh0aGlzLl9wb2ludEEpOworICAgICAgICAgICAgdGhpcy5fcG9pbnRB
LmFkZFRvUmVmKHRoaXMuX2xvY2FsQXhpcywgdGhpcy5fbG9va0F0KTsKKyAgICAgICAgICAgIHRo
aXMuX2RyYWdQbGFuZS5sb29rQXQodGhpcy5fbG9va0F0KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2RyYWdQbGFuZS5wb3NpdGlvbi5jb3B5RnJvbSh0aGlz
Ll9wb2ludEEpOworICAgICAgICAgICAgdGhpcy5fZHJhZ1BsYW5lLmxvb2tBdChyYXkub3JpZ2lu
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkcmFn
IHBsYW5lIHNvIGl0IGRvZXNuJ3QgZ2V0IG91dCBvZiBzeW5jIHdpdGggdGhlIG5vZGUgKGVnLiB3
aGVuIG1vdmluZyBiYWNrIGFuZCBmb3J0aCBxdWlja2x5KQorICAgICAgICB0aGlzLl9kcmFnUGxh
bmUucG9zaXRpb24uY29weUZyb20odGhpcy5hdHRhY2hlZE5vZGUuYWJzb2x1dGVQb3NpdGlvbik7
CisgICAgICAgIHRoaXMuX2RyYWdQbGFuZS5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiAgRGV0YWNoZXMgdGhlIGJlaGF2aW9yIGZyb20gdGhlIG1lc2gK
KyAgICAgKi8KKyAgICBQb2ludGVyRHJhZ0JlaGF2aW9yLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9wb2ludGVyT2JzZXJ2ZXIpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3NjZW5lLm9uUG9pbnRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX3BvaW50ZXJP
YnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2JlZm9yZVJlbmRlck9ic2Vy
dmVyKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUu
cmVtb3ZlKHRoaXMuX2JlZm9yZVJlbmRlck9ic2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLnJlbGVhc2VEcmFnKCk7CisgICAgfTsKKyAgICBQb2ludGVyRHJhZ0JlaGF2aW9yLl9BbnlN
b3VzZUlEID0gLTI7CisgICAgcmV0dXJuIFBvaW50ZXJEcmFnQmVoYXZpb3I7Cit9KCkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL0JlaGF2aW9ycy9NZXNoZXMvc2l4RG9mRHJhZ0JlaGF2
aW9yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vQmVoYXZpb3JzL01lc2hlcy9zaXhEb2ZEcmFnQmVoYXZpb3IudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNpeERvZkRyYWdCZWhhdmlvciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaXhEb2ZEcmFnQmVoYXZpb3IiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFNpeERvZkRyYWdCZWhhdmlvcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9hYnN0cmFjdE1lc2ggKi8gIi4vTWVz
aGVzL2Fic3RyYWN0TWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vc2NlbmUgKi8gIi4vc2NlbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXZl
bnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL0V2ZW50cy9wb2ludGVyRXZlbnRzICovICIuL0V2ZW50cy9w
b2ludGVyRXZlbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2Jz
ZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhICovICIuL0NhbWVyYXMvY2Ft
ZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfcGl2b3RUb29sc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWlzYy9waXZvdFRvb2xzICovICIuL01pc2MvcGl2b3RUb29scy50cyIpOworCisKKworCisKKwor
CisvKioKKyAqIEEgYmVoYXZpb3IgdGhhdCB3aGVuIGF0dGFjaGVkIHRvIGEgbWVzaCB3aWxsIGFs
bG93IHRoZSBtZXNoIHRvIGJlIGRyYWdnZWQgYXJvdW5kIGJhc2VkIG9uIGRpcmVjdGlvbnMgYW5k
IG9yaWdpbiBvZiB0aGUgcG9pbnRlcidzIHJheQorICovCit2YXIgU2l4RG9mRHJhZ0JlaGF2aW9y
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRp
YXRlcyBhIGJlaGF2aW9yIHRoYXQgd2hlbiBhdHRhY2hlZCB0byBhIG1lc2ggd2lsbCBhbGxvdyB0
aGUgbWVzaCB0byBiZSBkcmFnZ2VkIGFyb3VuZCBiYXNlZCBvbiBkaXJlY3Rpb25zIGFuZCBvcmln
aW4gb2YgdGhlIHBvaW50ZXIncyByYXkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTaXhEb2ZEcmFn
QmVoYXZpb3IoKSB7CisgICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyT2JzZXJ2ZXIgPSBudWxsOwor
ICAgICAgICB0aGlzLl90YXJnZXRQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAgICAgICB0
aGlzLl9tb3ZpbmcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc3RhcnRpbmdPcmllbnRhdGlvbiA9
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVh
dGVybmlvbiJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBIb3cgbXVjaCBmYXN0ZXIgdGhl
IG9iamVjdCBzaG91bGQgbW92ZSB3aGVuIHRoZSBjb250cm9sbGVyIGlzIG1vdmluZyB0b3dhcmRz
IGl0LiBUaGlzIGlzIHVzZWZ1bCB0byBicmluZyBvYmplY3RzIHRoYXQgYXJlIGZhciBhd2F5IGZy
b20gdGhlIHVzZXIgdG8gdGhlbSBmYXN0ZXIuIFNldCB0aGlzIHRvIDAgdG8gYXZvaWQgYW55IHNw
ZWVkIGluY3JlYXNlLiAoRGVmYXVsdDogMykKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuekRy
YWdGYWN0b3IgPSAzOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgdGhlIG9iamVjdCBzaG91
bGQgcm90YXRlIHRvIGZhY2UgdGhlIGRyYWcgb3JpZ2luCisgICAgICAgICAqLworICAgICAgICB0
aGlzLnJvdGF0ZURyYWdnZWRPYmplY3QgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICog
SWYgdGhlIGJlaGF2aW9yIGlzIGN1cnJlbnRseSBpbiBhIGRyYWdnaW5nIHN0YXRlCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaGUgZGlzdGFuY2UgdG93YXJkcyB0aGUgdGFyZ2V0IGRyYWcgcG9zaXRpb24gdG8gbW92
ZSBlYWNoIGZyYW1lLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gYXZvaWQgaml0dGVyLiBTZXQgdGhp
cyB0byAxIGZvciBubyBkZWxheS4gKERlZmF1bHQ6IDAuMikKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuZHJhZ0RlbHRhUmF0aW8gPSAwLjI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
aWQgb2YgdGhlIHBvaW50ZXIgdGhhdCBpcyBjdXJyZW50bHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUg
YmVoYXZpb3IgKC0xIHdoZW4gbm8gcG9pbnRlciBpcyBhY3RpdmUpCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ1BvaW50ZXJJRCA9IC0xOworICAgICAgICAvKioKKyAg
ICAgICAgICogSWYgY2FtZXJhIGNvbnRyb2xzIHNob3VsZCBiZSBkZXRhY2hlZCBkdXJpbmcgdGhl
IGRyYWcKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGV0YWNoQ2FtZXJhQ29udHJvbHMgPSB0
cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIGEgZHJhZyBzdGFy
dHMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25EcmFnU3RhcnRPYnNlcnZhYmxlID0gbmV3
IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siT2JzZXJ2YWJs
ZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiAgRmlyZXMgZWFjaCB0aW1lIGEgZHJhZyBl
bmRzIChlZy4gbW91c2UgcmVsZWFzZSBhZnRlciBkcmFnKQorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5vbkRyYWdFbmRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgfQorICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShTaXhEb2ZEcmFnQmVoYXZpb3IucHJvdG90eXBlLCAibmFtZSIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqICBUaGUgbmFtZSBvZiB0aGUgYmVoYXZpb3IKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuICJTaXhE
b2ZEcmFnIjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogIEluaXRpYWxpemVz
IHRoZSBiZWhhdmlvcgorICAgICAqLworICAgIFNpeERvZkRyYWdCZWhhdmlvci5wcm90b3R5cGUu
aW5pdCA9IGZ1bmN0aW9uICgpIHsgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2l4RG9m
RHJhZ0JlaGF2aW9yLnByb3RvdHlwZSwgIl9wb2ludGVyQ2FtZXJhIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogSW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGVhIGFjdGl2ZSBjYW1lcmFzLCB0aGUg
Y2FtZXJhVG9Vc2VGb3JQb2ludGVycyBzaG91bGQgYmUgdXNlZCBpZiBzZXQgaW5zdGVhZCBvZiBh
Y3RpdmUgY2FtZXJhCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9zY2VuZS5jYW1lcmFUb1VzZUZvclBvaW50ZXJzKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lLmNhbWVyYVRvVXNlRm9yUG9pbnRlcnM7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyB0aGUgc2NhbGUgYmVoYXZpb3IgdGhlIHBhc3Nl
ZCBpbiBtZXNoCisgICAgICogQHBhcmFtIG93bmVyTm9kZSBUaGUgbWVzaCB0aGF0IHdpbGwgYmUg
c2NhbGVkIGFyb3VuZCBvbmNlIGF0dGFjaGVkCisgICAgICovCisgICAgU2l4RG9mRHJhZ0JlaGF2
aW9yLnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiAob3duZXJOb2RlKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMuX293bmVyTm9kZSA9IG93bmVyTm9kZTsKKyAg
ICAgICAgdGhpcy5fc2NlbmUgPSB0aGlzLl9vd25lck5vZGUuZ2V0U2NlbmUoKTsKKyAgICAgICAg
aWYgKCFTaXhEb2ZEcmFnQmVoYXZpb3IuX3ZpcnR1YWxTY2VuZSkgeworICAgICAgICAgICAgU2l4
RG9mRHJhZ0JlaGF2aW9yLl92aXJ0dWFsU2NlbmUgPSBuZXcgX3NjZW5lX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlNjZW5lIl0odGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkpOworICAgICAg
ICAgICAgU2l4RG9mRHJhZ0JlaGF2aW9yLl92aXJ0dWFsU2NlbmUuZGV0YWNoQ29udHJvbCgpOwor
ICAgICAgICAgICAgdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuc2NlbmVzLnBvcCgpOworICAgICAg
ICB9CisgICAgICAgIHZhciBwaWNrZWRNZXNoID0gbnVsbDsKKyAgICAgICAgdmFyIGxhc3RTaXhE
b2ZPcmlnaW5Qb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAgICAgICAvLyBTZXR1cCB2aXJ0
dWFsIG1lc2hlcyB0byBiZSB1c2VkIGZvciBkcmFnZ2luZyB3aXRob3V0IGRpcnR5aW5nIHRoZSBl
eGlzdGluZyBzY2VuZQorICAgICAgICB0aGlzLl92aXJ0dWFsT3JpZ2luTWVzaCA9IG5ldyBfTWVz
aGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBYnN0cmFjdE1l
c2giXSgiIiwgU2l4RG9mRHJhZ0JlaGF2aW9yLl92aXJ0dWFsU2NlbmUpOworICAgICAgICB0aGlz
Ll92aXJ0dWFsT3JpZ2luTWVzaC5yb3RhdGlvblF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXSgpOworICAg
ICAgICB0aGlzLl92aXJ0dWFsRHJhZ01lc2ggPSBuZXcgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQWJzdHJhY3RNZXNoIl0oIiIsIFNpeERvZkRyYWdC
ZWhhdmlvci5fdmlydHVhbFNjZW5lKTsKKyAgICAgICAgdGhpcy5fdmlydHVhbERyYWdNZXNoLnJv
dGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIHZhciBwaWNrUHJlZGljYXRl
ID0gZnVuY3Rpb24gKG0pIHsKKyAgICAgICAgICAgIHJldHVybiBfdGhpcy5fb3duZXJOb2RlID09
IG0gfHwgbS5pc0Rlc2NlbmRhbnRPZihfdGhpcy5fb3duZXJOb2RlKTsKKyAgICAgICAgfTsKKyAg
ICAgICAgdmFyIGF0dGFjaGVkRWxlbWVudCA9IG51bGw7CisgICAgICAgIHRoaXMuX3BvaW50ZXJP
YnNlcnZlciA9IHRoaXMuX3NjZW5lLm9uUG9pbnRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChw
b2ludGVySW5mbywgZXZlbnRTdGF0ZSkgeworICAgICAgICAgICAgaWYgKHBvaW50ZXJJbmZvLnR5
cGUgPT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04pIHsKKyAgICAgICAgICAgICAgICBpZiAo
IV90aGlzLmRyYWdnaW5nICYmIHBvaW50ZXJJbmZvLnBpY2tJbmZvICYmIHBvaW50ZXJJbmZvLnBp
Y2tJbmZvLmhpdCAmJiBwb2ludGVySW5mby5waWNrSW5mby5waWNrZWRNZXNoICYmIHBvaW50ZXJJ
bmZvLnBpY2tJbmZvLnJheSAmJiBwaWNrUHJlZGljYXRlKHBvaW50ZXJJbmZvLnBpY2tJbmZvLnBp
Y2tlZE1lc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fcG9pbnRlckNhbWVy
YSAmJiBfdGhpcy5fcG9pbnRlckNhbWVyYS5jYW1lcmFSaWdNb2RlID09IF9DYW1lcmFzX2NhbWVy
YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDYW1lcmEiXS5SSUdfTU9ERV9OT05FKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVySW5mby5waWNrSW5mby5yYXkub3JpZ2lu
LmNvcHlGcm9tKF90aGlzLl9wb2ludGVyQ2FtZXJhLmdsb2JhbFBvc2l0aW9uKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwaWNrZWRNZXNoID0gX3RoaXMuX293
bmVyTm9kZTsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfcGl2b3RUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fWyJQaXZvdFRvb2xzIl0uX1JlbW92ZUFuZFN0b3JlUGl2b3RQb2lu
dChwaWNrZWRNZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgbGFzdFNpeERvZk9yaWdpblBvc2l0
aW9uLmNvcHlGcm9tKHBvaW50ZXJJbmZvLnBpY2tJbmZvLnJheS5vcmlnaW4pOworICAgICAgICAg
ICAgICAgICAgICAvLyBTZXQgcG9zaXRpb24gYW5kIG9yaWVudGF0aW9uIG9mIHRoZSBjb250cm9s
bGVyCisgICAgICAgICAgICAgICAgICAgIF90aGlzLl92aXJ0dWFsT3JpZ2luTWVzaC5wb3NpdGlv
bi5jb3B5RnJvbShwb2ludGVySW5mby5waWNrSW5mby5yYXkub3JpZ2luKTsKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX3ZpcnR1YWxPcmlnaW5NZXNoLmxvb2tBdChwb2ludGVySW5mby5waWNr
SW5mby5yYXkub3JpZ2luLmFkZChwb2ludGVySW5mby5waWNrSW5mby5yYXkuZGlyZWN0aW9uKSk7
CisgICAgICAgICAgICAgICAgICAgIC8vIEF0dGFjaCB0aGUgdmlydHVhbCBkcmFnIG1lc2ggdG8g
dGhlIHZpcnR1YWwgb3JpZ2luIG1lc2ggc28gaXQgY2FuIGJlIGRyYWdnZWQKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX3ZpcnR1YWxPcmlnaW5NZXNoLnJlbW92ZUNoaWxkKF90aGlzLl92aXJ0
dWFsRHJhZ01lc2gpOworICAgICAgICAgICAgICAgICAgICBwaWNrZWRNZXNoLmNvbXB1dGVXb3Js
ZE1hdHJpeCgpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdmlydHVhbERyYWdNZXNoLnBv
c2l0aW9uLmNvcHlGcm9tKHBpY2tlZE1lc2guYWJzb2x1dGVQb3NpdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghcGlja2VkTWVzaC5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBpY2tlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXS5Sb3Rh
dGlvbllhd1BpdGNoUm9sbChwaWNrZWRNZXNoLnJvdGF0aW9uLnksIHBpY2tlZE1lc2gucm90YXRp
b24ueCwgcGlja2VkTWVzaC5yb3RhdGlvbi56KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB2YXIgb2xkUGFyZW50ID0gcGlja2VkTWVzaC5wYXJlbnQ7CisgICAg
ICAgICAgICAgICAgICAgIHBpY2tlZE1lc2guc2V0UGFyZW50KG51bGwpOworICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5fdmlydHVhbERyYWdNZXNoLnJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJv
bShwaWNrZWRNZXNoLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICAgICAgICAgIHBp
Y2tlZE1lc2guc2V0UGFyZW50KG9sZFBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgIF90aGlz
Ll92aXJ0dWFsT3JpZ2luTWVzaC5hZGRDaGlsZChfdGhpcy5fdmlydHVhbERyYWdNZXNoKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHN0YXRlCisgICAgICAgICAgICAgICAgICAgIF90
aGlzLl90YXJnZXRQb3NpdGlvbi5jb3B5RnJvbShfdGhpcy5fdmlydHVhbERyYWdNZXNoLmFic29s
dXRlUG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5kcmFnZ2luZyA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnREcmFnZ2luZ1BvaW50ZXJJRCA9IHBv
aW50ZXJJbmZvLmV2ZW50LnBvaW50ZXJJZDsKKyAgICAgICAgICAgICAgICAgICAgLy8gRGV0YXRj
aCBjYW1lcmEgY29udHJvbHMKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmRldGFjaENh
bWVyYUNvbnRyb2xzICYmIF90aGlzLl9wb2ludGVyQ2FtZXJhICYmICFfdGhpcy5fcG9pbnRlckNh
bWVyYS5sZWZ0Q2FtZXJhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX3Bv
aW50ZXJDYW1lcmEuaW5wdXRzLmF0dGFjaGVkRWxlbWVudCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF0dGFjaGVkRWxlbWVudCA9IF90aGlzLl9wb2ludGVyQ2FtZXJhLmlucHV0cy5h
dHRhY2hlZEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3BvaW50
ZXJDYW1lcmEuZGV0YWNoQ29udHJvbChfdGhpcy5fcG9pbnRlckNhbWVyYS5pbnB1dHMuYXR0YWNo
ZWRFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaGVkRWxlbWVu
dCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgX01pc2NfcGl2b3RUb29sc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fWyJQaXZvdFRvb2xzIl0uX1Jlc3RvcmVQaXZvdFBvaW50KHBpY2tlZE1lc2gp
OworICAgICAgICAgICAgICAgICAgICBfdGhpcy5vbkRyYWdTdGFydE9ic2VydmFibGUubm90aWZ5
T2JzZXJ2ZXJzKHt9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChwb2ludGVySW5mby50eXBlID09IF9FdmVudHNfcG9pbnRlckV2ZW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJV
UCkgeworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5jdXJyZW50RHJhZ2dpbmdQb2ludGVySUQg
PT0gcG9pbnRlckluZm8uZXZlbnQucG9pbnRlcklkKSB7CisgICAgICAgICAgICAgICAgICAgIF90
aGlzLmRyYWdnaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9tb3Zpbmcg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudERyYWdnaW5nUG9pbnRl
cklEID0gLTE7CisgICAgICAgICAgICAgICAgICAgIHBpY2tlZE1lc2ggPSBudWxsOworICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5fdmlydHVhbE9yaWdpbk1lc2gucmVtb3ZlQ2hpbGQoX3RoaXMu
X3ZpcnR1YWxEcmFnTWVzaCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlYXR0YWNoIGNhbWVy
YSBjb250cm9scworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuZGV0YWNoQ2FtZXJhQ29u
dHJvbHMgJiYgYXR0YWNoZWRFbGVtZW50ICYmIF90aGlzLl9wb2ludGVyQ2FtZXJhICYmICFfdGhp
cy5fcG9pbnRlckNhbWVyYS5sZWZ0Q2FtZXJhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBf
dGhpcy5fcG9pbnRlckNhbWVyYS5hdHRhY2hDb250cm9sKGF0dGFjaGVkRWxlbWVudCwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25EcmFn
RW5kT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBvaW50ZXJJbmZvLnR5cGUgPT0gX0V2
ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBvaW50ZXJF
dmVudFR5cGVzIl0uUE9JTlRFUk1PVkUpIHsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY3Vy
cmVudERyYWdnaW5nUG9pbnRlcklEID09IHBvaW50ZXJJbmZvLmV2ZW50LnBvaW50ZXJJZCAmJiBf
dGhpcy5kcmFnZ2luZyAmJiBwb2ludGVySW5mby5waWNrSW5mbyAmJiBwb2ludGVySW5mby5waWNr
SW5mby5yYXkgJiYgcGlja2VkTWVzaCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgekRyYWdG
YWN0b3IgPSBfdGhpcy56RHJhZ0ZhY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlz
Ll9wb2ludGVyQ2FtZXJhICYmIF90aGlzLl9wb2ludGVyQ2FtZXJhLmNhbWVyYVJpZ01vZGUgPT0g
X0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNhbWVyYSJdLlJJ
R19NT0RFX05PTkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJJbmZvLnBpY2tJ
bmZvLnJheS5vcmlnaW4uY29weUZyb20oX3RoaXMuX3BvaW50ZXJDYW1lcmEuZ2xvYmFsUG9zaXRp
b24pOworICAgICAgICAgICAgICAgICAgICAgICAgekRyYWdGYWN0b3IgPSAwOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBjb250cm9sbGVy
IGRyYWcgZGlzdGFuY2UgaW4gY29udHJvbGxlciBzcGFjZQorICAgICAgICAgICAgICAgICAgICB2
YXIgb3JpZ2luRHJhZ0RpZmZlcmVuY2UgPSBwb2ludGVySW5mby5waWNrSW5mby5yYXkub3JpZ2lu
LnN1YnRyYWN0KGxhc3RTaXhEb2ZPcmlnaW5Qb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAg
IGxhc3RTaXhEb2ZPcmlnaW5Qb3NpdGlvbi5jb3B5RnJvbShwb2ludGVySW5mby5waWNrSW5mby5y
YXkub3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2FsT3JpZ2luRHJhZ0RpZmZl
cmVuY2UgPSAtX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXS5Eb3Qob3JpZ2luRHJhZ0RpZmZlcmVuY2UsIHBvaW50ZXJJbmZvLnBpY2tJbmZv
LnJheS5kaXJlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdmlydHVhbE9yaWdp
bk1lc2guYWRkQ2hpbGQoX3RoaXMuX3ZpcnR1YWxEcmFnTWVzaCk7CisgICAgICAgICAgICAgICAg
ICAgIC8vIERldGVybWluZSBob3cgbXVjaCB0aGUgY29udHJvbGxlciBtb3ZlZCB0by9hd2F5IHRv
d2FyZHMgdGhlIGRyYWdnZWQgb2JqZWN0IGFuZCB1c2UgdGhpcyB0byBtb3ZlIHRoZSBvYmplY3Qg
ZnVydGhlciB3aGVuIGl0cyBmdXJ0aGVyIGF3YXkKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMu
X3ZpcnR1YWxEcmFnTWVzaC5wb3NpdGlvbi56IC09IF90aGlzLl92aXJ0dWFsRHJhZ01lc2gucG9z
aXRpb24ueiA8IDEgPyBsb2NhbE9yaWdpbkRyYWdEaWZmZXJlbmNlICogX3RoaXMuekRyYWdGYWN0
b3IgOiBsb2NhbE9yaWdpbkRyYWdEaWZmZXJlbmNlICogekRyYWdGYWN0b3IgKiBfdGhpcy5fdmly
dHVhbERyYWdNZXNoLnBvc2l0aW9uLno7CisgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5f
dmlydHVhbERyYWdNZXNoLnBvc2l0aW9uLnogPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5fdmlydHVhbERyYWdNZXNoLnBvc2l0aW9uLnogPSAwOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29udHJvbGxlciBwb3Np
dGlvbgorICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdmlydHVhbE9yaWdpbk1lc2gucG9zaXRp
b24uY29weUZyb20ocG9pbnRlckluZm8ucGlja0luZm8ucmF5Lm9yaWdpbik7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl92aXJ0dWFsT3JpZ2luTWVzaC5sb29rQXQocG9pbnRlckluZm8ucGlj
a0luZm8ucmF5Lm9yaWdpbi5hZGQocG9pbnRlckluZm8ucGlja0luZm8ucmF5LmRpcmVjdGlvbikp
OworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdmlydHVhbE9yaWdpbk1lc2gucmVtb3ZlQ2hp
bGQoX3RoaXMuX3ZpcnR1YWxEcmFnTWVzaCk7CisgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUg
dGhlIHZpcnR1YWxPYmplY3RzUG9zaXRpb24gaW50byB0aGUgcGlja2VkIG1lc2gncyBzcGFjZSBp
ZiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RhcmdldFBvc2l0aW9uLmNvcHlG
cm9tKF90aGlzLl92aXJ0dWFsRHJhZ01lc2guYWJzb2x1dGVQb3NpdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChwaWNrZWRNZXNoLnBhcmVudCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKF90aGlzLl90YXJnZXRQb3NpdGlvbiwgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLklu
dmVydChwaWNrZWRNZXNoLnBhcmVudC5nZXRXb3JsZE1hdHJpeCgpKSwgX3RoaXMuX3RhcmdldFBv
c2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
IV90aGlzLl9tb3ZpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdGFydGlu
Z09yaWVudGF0aW9uLmNvcHlGcm9tKF90aGlzLl92aXJ0dWFsRHJhZ01lc2gucm90YXRpb25RdWF0
ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fbW92aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgICAgICB2YXIgdG1wUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAg
IC8vIE9uIGV2ZXJ5IGZyYW1lIG1vdmUgdG93YXJkcyB0YXJnZXQgc2NhbGluZyB0byBhdm9pZCBq
aXR0ZXIgY2F1c2VkIGJ5IHZyIGNvbnRyb2xsZXJzCisgICAgICAgIHRoaXMuX3NjZW5lUmVuZGVy
T2JzZXJ2ZXIgPSBvd25lck5vZGUuZ2V0U2NlbmUoKS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUu
YWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5kcmFnZ2luZyAmJiBfdGhp
cy5fbW92aW5nICYmIHBpY2tlZE1lc2gpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19waXZvdFRv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBpdm90VG9vbHMiXS5fUmVtb3ZlQW5k
U3RvcmVQaXZvdFBvaW50KHBpY2tlZE1lc2gpOworICAgICAgICAgICAgICAgIC8vIFNsb3dseSBt
b3ZlIG1lc2ggdG8gYXZvaWQgaml0dGVyCisgICAgICAgICAgICAgICAgcGlja2VkTWVzaC5wb3Np
dGlvbi5hZGRJblBsYWNlKF90aGlzLl90YXJnZXRQb3NpdGlvbi5zdWJ0cmFjdChwaWNrZWRNZXNo
LnBvc2l0aW9uKS5zY2FsZShfdGhpcy5kcmFnRGVsdGFSYXRpbykpOworICAgICAgICAgICAgICAg
IGlmIChfdGhpcy5yb3RhdGVEcmFnZ2VkT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEdldCBjaGFuZ2UgaW4gcm90YXRpb24KKyAgICAgICAgICAgICAgICAgICAgdG1wUXVhdGVybmlv
bi5jb3B5RnJvbShfdGhpcy5fc3RhcnRpbmdPcmllbnRhdGlvbik7CisgICAgICAgICAgICAgICAg
ICAgIHRtcFF1YXRlcm5pb24ueCA9IC10bXBRdWF0ZXJuaW9uLng7CisgICAgICAgICAgICAgICAg
ICAgIHRtcFF1YXRlcm5pb24ueSA9IC10bXBRdWF0ZXJuaW9uLnk7CisgICAgICAgICAgICAgICAg
ICAgIHRtcFF1YXRlcm5pb24ueiA9IC10bXBRdWF0ZXJuaW9uLno7CisgICAgICAgICAgICAgICAg
ICAgIF90aGlzLl92aXJ0dWFsRHJhZ01lc2gucm90YXRpb25RdWF0ZXJuaW9uLm11bHRpcGx5VG9S
ZWYodG1wUXVhdGVybmlvbiwgdG1wUXVhdGVybmlvbik7CisgICAgICAgICAgICAgICAgICAgIC8v
IENvbnZlcnQgY2hhbmdlIGluIHJvdGF0aW9uIHRvIG9ubHkgeSBheGlzIHJvdGF0aW9uCisgICAg
ICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih0bXBRdWF0ZXJu
aW9uLnRvRXVsZXJBbmdsZXMoInh5eiIpLnksIDAsIDAsIHRtcFF1YXRlcm5pb24pOworICAgICAg
ICAgICAgICAgICAgICB0bXBRdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYoX3RoaXMuX3N0YXJ0aW5n
T3JpZW50YXRpb24sIHRtcFF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgICAgICAvLyBTbG93
bHkgbW92ZSBtZXNoIHRvIGF2b2lkIGppdHRlcgorICAgICAgICAgICAgICAgICAgICB2YXIgb2xk
UGFyZW50ID0gcGlja2VkTWVzaC5wYXJlbnQ7CisgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkg
cm90YXRlIHRoZSBtZXNoIGlmIGl0J3MgcGFyZW50IGhhcyB1bmlmb3JtIHNjYWxpbmcKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFvbGRQYXJlbnQgfHwgKG9sZFBhcmVudC5zY2FsaW5nICYmICFv
bGRQYXJlbnQuc2NhbGluZy5pc05vblVuaWZvcm1XaXRoaW5FcHNpbG9uKDAuMDAxKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBpY2tlZE1lc2guc2V0UGFyZW50KG51bGwpOworICAgICAg
ICAgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlF1YXRlcm5pb24iXS5TbGVycFRvUmVmKHBpY2tlZE1lc2gucm90YXRpb25RdWF0
ZXJuaW9uLCB0bXBRdWF0ZXJuaW9uLCBfdGhpcy5kcmFnRGVsdGFSYXRpbywgcGlja2VkTWVzaC5y
b3RhdGlvblF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgICAgICAgICAgcGlja2VkTWVzaC5z
ZXRQYXJlbnQob2xkUGFyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBfTWlzY19waXZvdFRvb2xzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X19bIlBpdm90VG9vbHMiXS5fUmVzdG9yZVBpdm90UG9pbnQocGlja2VkTWVzaCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogIERl
dGFjaGVzIHRoZSBiZWhhdmlvciBmcm9tIHRoZSBtZXNoCisgICAgICovCisgICAgU2l4RG9mRHJh
Z0JlaGF2aW9yLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLl9zY2VuZSkgeworICAgICAgICAgICAgdGhpcy5fc2NlbmUub25Qb2ludGVyT2JzZXJ2YWJs
ZS5yZW1vdmUodGhpcy5fcG9pbnRlck9ic2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fb3duZXJOb2RlKSB7CisgICAgICAgICAgICB0aGlzLl9vd25lck5vZGUuZ2V0U2NlbmUo
KS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX3NjZW5lUmVuZGVyT2JzZXJ2
ZXIpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl92aXJ0dWFsT3JpZ2luTWVzaCkgewor
ICAgICAgICAgICAgdGhpcy5fdmlydHVhbE9yaWdpbk1lc2guZGlzcG9zZSgpOworICAgICAgICB9
CisgICAgICAgIGlmICh0aGlzLl92aXJ0dWFsRHJhZ01lc2gpIHsKKyAgICAgICAgICAgIHRoaXMu
X3ZpcnR1YWxEcmFnTWVzaC5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vbkRy
YWdFbmRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25EcmFnU3RhcnRPYnNlcnZh
YmxlLmNsZWFyKCk7CisgICAgfTsKKyAgICByZXR1cm4gU2l4RG9mRHJhZ0JlaGF2aW9yOworfSgp
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9CZWhhdmlvcnMvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQmVoYXZpb3JzL2luZGV4
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogQXV0b1JvdGF0aW9uQmVoYXZpb3IsIEJvdW5jaW5nQmVoYXZpb3IsIEZyYW1pbmdC
ZWhhdmlvciwgQXR0YWNoVG9Cb3hCZWhhdmlvciwgRmFkZUluT3V0QmVoYXZpb3IsIE11bHRpUG9p
bnRlclNjYWxlQmVoYXZpb3IsIFBvaW50ZXJEcmFnQmVoYXZpb3IsIFNpeERvZkRyYWdCZWhhdmlv
ciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vQ2FtZXJhcy9pbmRleCAqLyAiLi9CZWhhdmlvcnMvQ2FtZXJhcy9pbmRleC50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJBdXRvUm90YXRpb25CZWhhdmlvciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXV0b1JvdGF0
aW9uQmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmNpbmdCZWhhdmlvciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQm91bmNpbmdCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmFt
aW5nQmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkZyYW1pbmdCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vTWVzaGVzL2luZGV4ICovICIuL0JlaGF2aW9y
cy9NZXNoZXMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXR0YWNoVG9Cb3hCZWhhdmlv
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJBdHRhY2hUb0JveEJlaGF2aW9yIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkZhZGVJbk91dEJlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkZhZGVJbk91dEJlaGF2aW9yIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIk11bHRpUG9pbnRlclNjYWxlQmVoYXZpb3IiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTXVsdGlQ
b2ludGVyU2NhbGVCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2ludGVyRHJh
Z0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlBvaW50ZXJEcmFnQmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU2l4RG9mRHJhZ0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNpeERvZkRyYWdCZWhhdmlvciJd
OyB9KTsKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQm9uZXMvYm9uZS50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQm9uZXMvYm9uZS50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBCb25l
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvbmUiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIEJvbmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0
aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19hcnJh
eVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NaXNjL2FycmF5VG9vbHMgKi8gIi4vTWlzYy9hcnJheVRvb2xzLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguYXhpcyAqLyAi
Li9NYXRocy9tYXRoLmF4aXMudHMiKTsKKworCisKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8g
c3RvcmUgYm9uZSBpbmZvcm1hdGlvbgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL2hvd190b191c2VfYm9uZXNfYW5kX3NrZWxldG9ucworICovCit2YXIgQm9uZSA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShCb25lLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIENyZWF0ZSBhIG5ldyBib25lCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgYm9u
ZSBuYW1lCisgICAgICogQHBhcmFtIHNrZWxldG9uIGRlZmluZXMgdGhlIHBhcmVudCBza2VsZXRv
bgorICAgICAqIEBwYXJhbSBwYXJlbnRCb25lIGRlZmluZXMgdGhlIHBhcmVudCAoY2FuIGJlIG51
bGwgaWYgdGhlIGJvbmUgaXMgdGhlIHJvb3QpCisgICAgICogQHBhcmFtIGxvY2FsTWF0cml4IGRl
ZmluZXMgdGhlIGxvY2FsIG1hdHJpeAorICAgICAqIEBwYXJhbSByZXN0UG9zZSBkZWZpbmVzIHRo
ZSByZXN0IHBvc2UgbWF0cml4CisgICAgICogQHBhcmFtIGJhc2VNYXRyaXggZGVmaW5lcyB0aGUg
YmFzZSBtYXRyaXgKKyAgICAgKiBAcGFyYW0gaW5kZXggZGVmaW5lcyBpbmRleCBvZiB0aGUgYm9u
ZSBpbiB0aGUgaGllYXJjaHkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBCb25lKAorICAgIC8qKgor
ICAgICAqIGRlZmluZXMgdGhlIGJvbmUgbmFtZQorICAgICAqLworICAgIG5hbWUsIHNrZWxldG9u
LCBwYXJlbnRCb25lLCBsb2NhbE1hdHJpeCwgcmVzdFBvc2UsIGJhc2VNYXRyaXgsIGluZGV4KSB7
CisgICAgICAgIGlmIChwYXJlbnRCb25lID09PSB2b2lkIDApIHsgcGFyZW50Qm9uZSA9IG51bGw7
IH0KKyAgICAgICAgaWYgKGxvY2FsTWF0cml4ID09PSB2b2lkIDApIHsgbG9jYWxNYXRyaXggPSBu
dWxsOyB9CisgICAgICAgIGlmIChyZXN0UG9zZSA9PT0gdm9pZCAwKSB7IHJlc3RQb3NlID0gbnVs
bDsgfQorICAgICAgICBpZiAoYmFzZU1hdHJpeCA9PT0gdm9pZCAwKSB7IGJhc2VNYXRyaXggPSBu
dWxsOyB9CisgICAgICAgIGlmIChpbmRleCA9PT0gdm9pZCAwKSB7IGluZGV4ID0gbnVsbDsgfQor
ICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBza2VsZXRvbi5nZXRT
Y2VuZSgpLCBmYWxzZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMubmFtZSA9IG5hbWU7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGNoaWxkIGJvbmVzCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5jaGlsZHJlbiA9IG5ldyBBcnJheSgpOworICAgICAgICAvKiog
R2V0cyB0aGUgYW5pbWF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBib25lICovCisgICAgICAg
IF90aGlzLmFuaW1hdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEBoaWRkZW4gSW50ZXJuYWwgb25seQorICAgICAgICAgKiBTZXQgdGhpcyB2YWx1ZSB0byBtYXAg
dGhpcyBib25lIHRvIGEgZGlmZmVyZW50IGluZGV4IGluIHRoZSB0cmFuc2Zvcm0gbWF0cmljZXMK
KyAgICAgICAgICogU2V0IHRoaXMgdmFsdWUgdG8gLTEgdG8gZXhjbHVkZSB0aGUgYm9uZSBmcm9t
IHRoZSB0cmFuc2Zvcm0gbWF0cmljZXMKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9pbmRl
eCA9IG51bGw7CisgICAgICAgIF90aGlzLl9hYnNvbHV0ZVRyYW5zZm9ybSA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0oKTsKKyAg
ICAgICAgX3RoaXMuX2ludmVydGVkQWJzb2x1dGVUcmFuc2Zvcm0gPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdKCk7CisgICAgICAg
IF90aGlzLl9zY2FsaW5nRGV0ZXJtaW5hbnQgPSAxOworICAgICAgICBfdGhpcy5fd29ybGRUcmFu
c2Zvcm0gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIk1hdHJpeCJdKCk7CisgICAgICAgIF90aGlzLl9uZWVkVG9EZWNvbXBvc2UgPSB0cnVlOwor
ICAgICAgICBfdGhpcy5fbmVlZFRvQ29tcG9zZSA9IGZhbHNlOworICAgICAgICAvKiogQGhpZGRl
biAqLworICAgICAgICBfdGhpcy5fbGlua2VkVHJhbnNmb3JtTm9kZSA9IG51bGw7CisgICAgICAg
IC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl93YWl0aW5nVHJhbnNmb3JtTm9kZUlkID0g
bnVsbDsKKyAgICAgICAgX3RoaXMuX3NrZWxldG9uID0gc2tlbGV0b247CisgICAgICAgIF90aGlz
Ll9sb2NhbE1hdHJpeCA9IGxvY2FsTWF0cml4ID8gbG9jYWxNYXRyaXguY2xvbmUoKSA6IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5JZGVu
dGl0eSgpOworICAgICAgICBfdGhpcy5fcmVzdFBvc2UgPSByZXN0UG9zZSA/IHJlc3RQb3NlIDog
X3RoaXMuX2xvY2FsTWF0cml4LmNsb25lKCk7CisgICAgICAgIF90aGlzLl9iYXNlTWF0cml4ID0g
YmFzZU1hdHJpeCA/IGJhc2VNYXRyaXggOiBfdGhpcy5fbG9jYWxNYXRyaXguY2xvbmUoKTsKKyAg
ICAgICAgX3RoaXMuX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHNrZWxldG9uLmJvbmVzLnB1c2go
X3RoaXMpOworICAgICAgICBfdGhpcy5zZXRQYXJlbnQocGFyZW50Qm9uZSwgZmFsc2UpOworICAg
ICAgICBpZiAoYmFzZU1hdHJpeCB8fCBsb2NhbE1hdHJpeCkgeworICAgICAgICAgICAgX3RoaXMu
X3VwZGF0ZURpZmZlcmVuY2VNYXRyaXgoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3Ro
aXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCb25lLnByb3RvdHlwZSwgIl9t
YXRyaXgiLCB7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdGhpcy5fY29tcG9zZSgpOworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2xvY2FsTWF0cml4OworICAgICAgICB9LAorICAgICAgICAvKiogQGhpZGRlbiAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbG9jYWxNYXRy
aXguY29weUZyb20odmFsdWUpOworICAgICAgICAgICAgdGhpcy5fbmVlZFRvRGVjb21wb3NlID0g
dHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVu
dCBvYmplY3QgY2xhc3MgbmFtZS4KKyAgICAgKiBAcmV0dXJuIHRoZSBjbGFzcyBuYW1lCisgICAg
ICovCisgICAgQm9uZS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIkJvbmUiOworICAgIH07CisgICAgLy8gTWVtYmVycworICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIHBhcmVudCBza2VsZXRvbgorICAgICAqIEByZXR1cm5zIGEgc2tlbGV0b24K
KyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5nZXRTa2VsZXRvbiA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3NrZWxldG9uOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0cyBwYXJlbnQgYm9uZQorICAgICAqIEByZXR1cm5zIGEgYm9uZSBvciBudWxsIGlmIHRoZSBi
b25lIGlzIHRoZSByb290IG9mIHRoZSBib25lIGhpZXJhcmNoeQorICAgICAqLworICAgIEJvbmUu
cHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3BhcmVudDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFp
bmluZyB0aGUgcm9vdCBib25lcworICAgICAqIEByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcg
dGhlIHJvb3QgYm9uZXMKKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5nZXRDaGlsZHJlbiA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTZXRzIHRoZSBwYXJlbnQgYm9uZQorICAgICAqIEBwYXJhbSBwYXJlbnQg
ZGVmaW5lcyB0aGUgcGFyZW50IChjYW4gYmUgbnVsbCBpZiB0aGUgYm9uZSBpcyB0aGUgcm9vdCkK
KyAgICAgKiBAcGFyYW0gdXBkYXRlRGlmZmVyZW5jZU1hdHJpeCBkZWZpbmVzIGlmIHRoZSBkaWZm
ZXJlbmNlIG1hdHJpeCBtdXN0IGJlIHVwZGF0ZWQKKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlw
ZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50LCB1cGRhdGVEaWZmZXJlbmNlTWF0cml4KSB7
CisgICAgICAgIGlmICh1cGRhdGVEaWZmZXJlbmNlTWF0cml4ID09PSB2b2lkIDApIHsgdXBkYXRl
RGlmZmVyZW5jZU1hdHJpeCA9IHRydWU7IH0KKyAgICAgICAgaWYgKHRoaXMuX3BhcmVudCA9PT0g
cGFyZW50KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX3BhcmVudCkgeworICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fcGFyZW50LmNoaWxk
cmVuLmluZGV4T2YodGhpcyk7CisgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50OworICAg
ICAgICBpZiAodGhpcy5fcGFyZW50KSB7CisgICAgICAgICAgICB0aGlzLl9wYXJlbnQuY2hpbGRy
ZW4ucHVzaCh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXBkYXRlRGlmZmVyZW5jZU1h
dHJpeCkgeworICAgICAgICAgICAgdGhpcy5fdXBkYXRlRGlmZmVyZW5jZU1hdHJpeCgpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMubWFya0FzRGlydHkoKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIGxvY2FsIG1hdHJpeAorICAgICAqIEByZXR1cm5zIGEgbWF0cml4CisgICAg
ICovCisgICAgQm9uZS5wcm90b3R5cGUuZ2V0TG9jYWxNYXRyaXggPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuX2NvbXBvc2UoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsTWF0cml4
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgYmFzZSBtYXRyaXggKGluaXRpYWwg
bWF0cml4IHdoaWNoIHJlbWFpbnMgdW5jaGFuZ2VkKQorICAgICAqIEByZXR1cm5zIGEgbWF0cml4
CisgICAgICovCisgICAgQm9uZS5wcm90b3R5cGUuZ2V0QmFzZU1hdHJpeCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VNYXRyaXg7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXRzIHRoZSByZXN0IHBvc2UgbWF0cml4CisgICAgICogQHJldHVybnMgYSBtYXRyaXgK
KyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5nZXRSZXN0UG9zZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3RQb3NlOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0cyBhIG1hdHJpeCB1c2VkIHRvIHN0b3JlIHdvcmxkIG1hdHJpeCAoaWUuIHRoZSBtYXRyaXgg
c2VudCB0byBzaGFkZXJzKQorICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLmdldFdvcmxkTWF0
cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRUcmFuc2Zvcm07
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBsb2NhbCBtYXRyaXggdG8gcmVzdCBw
b3NlIG1hdHJpeAorICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLnJldHVyblRvUmVzdCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy51cGRhdGVNYXRyaXgodGhpcy5fcmVzdFBvc2UuY2xv
bmUoKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBpbnZlcnNlIG9mIHRoZSBh
YnNvbHV0ZSB0cmFuc2Zvcm0gbWF0cml4LgorICAgICAqIFRoaXMgbWF0cml4IHdpbGwgYmUgbXVs
dGlwbGllZCBieSBsb2NhbCBtYXRyaXggdG8gZ2V0IHRoZSBkaWZmZXJlbmNlIG1hdHJpeCAoaWUu
IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb3JpZ2luYWwgc3RhdGUgYW5kIGN1cnJlbnQgc3RhdGUp
CisgICAgICogQHJldHVybnMgYSBtYXRyaXgKKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5n
ZXRJbnZlcnRlZEFic29sdXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5faW52ZXJ0ZWRBYnNvbHV0ZVRyYW5zZm9ybTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIGFic29sdXRlIHRyYW5zZm9ybSBtYXRyaXggKGllIGJhc2UgbWF0cml4ICog
cGFyZW50IHdvcmxkIG1hdHJpeCkKKyAgICAgKiBAcmV0dXJucyBhIG1hdHJpeAorICAgICAqLwor
ICAgIEJvbmUucHJvdG90eXBlLmdldEFic29sdXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fYWJzb2x1dGVUcmFuc2Zvcm07CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBMaW5rcyB3aXRoIHRoZSBnaXZlbiB0cmFuc2Zvcm0gbm9kZS4KKyAgICAgKiBUaGUg
bG9jYWwgbWF0cml4IG9mIHRoaXMgYm9uZSBpcyBjb3BpZWQgZnJvbSB0aGUgdHJhbnNmb3JtIG5v
ZGUgZXZlcnkgZnJhbWUuCisgICAgICogQHBhcmFtIHRyYW5zZm9ybU5vZGUgZGVmaW5lcyB0aGUg
dHJhbnNmb3JtIG5vZGUgdG8gbGluayB0bworICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLmxp
bmtUcmFuc2Zvcm1Ob2RlID0gZnVuY3Rpb24gKHRyYW5zZm9ybU5vZGUpIHsKKyAgICAgICAgaWYg
KHRoaXMuX2xpbmtlZFRyYW5zZm9ybU5vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX3NrZWxldG9u
Ll9udW1Cb25lc1dpdGhMaW5rZWRUcmFuc2Zvcm1Ob2RlLS07CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fbGlua2VkVHJhbnNmb3JtTm9kZSA9IHRyYW5zZm9ybU5vZGU7CisgICAgICAgIGlmICh0
aGlzLl9saW5rZWRUcmFuc2Zvcm1Ob2RlKSB7CisgICAgICAgICAgICB0aGlzLl9za2VsZXRvbi5f
bnVtQm9uZXNXaXRoTGlua2VkVHJhbnNmb3JtTm9kZSsrOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvLyBQcm9wZXJ0aWVzIChtYXRjaGVzIEFic3RyYWN0TWVzaCBwcm9wZXJ0aWVzKQorICAgIC8q
KgorICAgICAqIEdldHMgdGhlIG5vZGUgdXNlZCB0byBkcml2ZSB0aGUgYm9uZSdzIHRyYW5zZm9y
bWF0aW9uCisgICAgICogQHJldHVybnMgYSB0cmFuc2Zvcm0gbm9kZSBvciBudWxsCisgICAgICov
CisgICAgQm9uZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtTm9kZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2xpbmtlZFRyYW5zZm9ybU5vZGU7CisgICAgfTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQm9uZS5wcm90b3R5cGUsICJwb3NpdGlvbiIsIHsKKyAgICAgICAg
LyoqIEdldHMgb3Igc2V0cyBjdXJyZW50IHBvc2l0aW9uIChpbiBsb2NhbCBzcGFjZSkgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLl9kZWNvbXBvc2UoKTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbFBvc2l0aW9uOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQb3NpdGlvbikgeworICAgICAgICAgICAgdGhpcy5fZGVj
b21wb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9sb2NhbFBvc2l0aW9uLmNvcHlGcm9tKG5ld1Bv
c2l0aW9uKTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtBc0RpcnR5QW5kQ29tcG9zZSgpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm9uZS5wcm90b3R5cGUs
ICJyb3RhdGlvbiIsIHsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyBjdXJyZW50IHJvdGF0aW9u
IChpbiBsb2NhbCBzcGFjZSkgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5nZXRSb3RhdGlvbigpOworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uIChuZXdSb3RhdGlvbikgeworICAgICAgICAgICAgdGhpcy5zZXRSb3RhdGlvbihu
ZXdSb3RhdGlvbik7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShCb25lLnByb3RvdHlwZSwgInJvdGF0aW9uUXVhdGVybmlvbiIsIHsKKyAgICAgICAgLyoqIEdl
dHMgb3Igc2V0cyBjdXJyZW50IHJvdGF0aW9uIHF1YXRlcm5pb24gKGluIGxvY2FsIHNwYWNlKSAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuX2RlY29tcG9z
ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsUm90YXRpb247CisgICAgICAgIH0s
CisgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1JvdGF0aW9uKSB7CisgICAgICAgICAgICB0aGlz
LnNldFJvdGF0aW9uUXVhdGVybmlvbihuZXdSb3RhdGlvbik7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCb25lLnByb3RvdHlwZSwgInNjYWxpbmciLCB7Cisg
ICAgICAgIC8qKiBHZXRzIG9yIHNldHMgY3VycmVudCBzY2FsaW5nIChpbiBsb2NhbCBzcGFjZSkg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5n
ZXRTY2FsZSgpOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdTY2FsaW5n
KSB7CisgICAgICAgICAgICB0aGlzLnNldFNjYWxlKG5ld1NjYWxpbmcpOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm9uZS5wcm90b3R5cGUsICJhbmltYXRp
b25Qcm9wZXJ0aWVzT3ZlcnJpZGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBhbmltYXRpb24gcHJvcGVydGllcyBvdmVycmlkZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2tlbGV0b24uYW5pbWF0
aW9uUHJvcGVydGllc092ZXJyaWRlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvLyBNZXRob2Rz
CisgICAgQm9uZS5wcm90b3R5cGUuX2RlY29tcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9uZWVkVG9EZWNvbXBvc2UpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9uZWVkVG9EZWNvbXBvc2UgPSBmYWxzZTsKKyAgICAgICAgaWYg
KCF0aGlzLl9sb2NhbFNjYWxpbmcpIHsKKyAgICAgICAgICAgIHRoaXMuX2xvY2FsU2NhbGluZyA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3Iz
Il0uWmVybygpOworICAgICAgICAgICAgdGhpcy5fbG9jYWxSb3RhdGlvbiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl0uWmVybygp
OworICAgICAgICAgICAgdGhpcy5fbG9jYWxQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX2xvY2FsTWF0cml4LmRlY29tcG9zZSh0aGlzLl9sb2NhbFNjYWxpbmcs
IHRoaXMuX2xvY2FsUm90YXRpb24sIHRoaXMuX2xvY2FsUG9zaXRpb24pOworICAgIH07CisgICAg
Qm9uZS5wcm90b3R5cGUuX2NvbXBvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhp
cy5fbmVlZFRvQ29tcG9zZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGlmICghdGhpcy5fbG9jYWxTY2FsaW5nKSB7CisgICAgICAgICAgICB0aGlzLl9uZWVkVG9D
b21wb3NlID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fbmVlZFRvQ29tcG9zZSA9IGZhbHNlOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uQ29tcG9zZVRvUmVmKHRoaXMu
X2xvY2FsU2NhbGluZywgdGhpcy5fbG9jYWxSb3RhdGlvbiwgdGhpcy5fbG9jYWxQb3NpdGlvbiwg
dGhpcy5fbG9jYWxNYXRyaXgpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBi
YXNlIGFuZCBsb2NhbCBtYXRyaWNlcworICAgICAqIEBwYXJhbSBtYXRyaXggZGVmaW5lcyB0aGUg
bmV3IGJhc2Ugb3IgbG9jYWwgbWF0cml4CisgICAgICogQHBhcmFtIHVwZGF0ZURpZmZlcmVuY2VN
YXRyaXggZGVmaW5lcyBpZiB0aGUgZGlmZmVyZW5jZSBtYXRyaXggbXVzdCBiZSB1cGRhdGVkCisg
ICAgICogQHBhcmFtIHVwZGF0ZUxvY2FsTWF0cml4IGRlZmluZXMgaWYgdGhlIGxvY2FsIG1hdHJp
eCBzaG91bGQgYmUgdXBkYXRlZAorICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLnVwZGF0ZU1h
dHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIHVwZGF0ZURpZmZlcmVuY2VNYXRyaXgsIHVwZGF0ZUxv
Y2FsTWF0cml4KSB7CisgICAgICAgIGlmICh1cGRhdGVEaWZmZXJlbmNlTWF0cml4ID09PSB2b2lk
IDApIHsgdXBkYXRlRGlmZmVyZW5jZU1hdHJpeCA9IHRydWU7IH0KKyAgICAgICAgaWYgKHVwZGF0
ZUxvY2FsTWF0cml4ID09PSB2b2lkIDApIHsgdXBkYXRlTG9jYWxNYXRyaXggPSB0cnVlOyB9Cisg
ICAgICAgIHRoaXMuX2Jhc2VNYXRyaXguY29weUZyb20obWF0cml4KTsKKyAgICAgICAgaWYgKHVw
ZGF0ZURpZmZlcmVuY2VNYXRyaXgpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURpZmZlcmVu
Y2VNYXRyaXgoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXBkYXRlTG9jYWxNYXRyaXgpIHsK
KyAgICAgICAgICAgIHRoaXMuX2xvY2FsTWF0cml4LmNvcHlGcm9tKG1hdHJpeCk7CisgICAgICAg
ICAgICB0aGlzLl9tYXJrQXNEaXJ0eUFuZERlY29tcG9zZSgpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEJvbmUucHJvdG90eXBlLl91cGRhdGVEaWZmZXJl
bmNlTWF0cml4ID0gZnVuY3Rpb24gKHJvb3RNYXRyaXgsIHVwZGF0ZUNoaWxkcmVuKSB7CisgICAg
ICAgIGlmICh1cGRhdGVDaGlsZHJlbiA9PT0gdm9pZCAwKSB7IHVwZGF0ZUNoaWxkcmVuID0gdHJ1
ZTsgfQorICAgICAgICBpZiAoIXJvb3RNYXRyaXgpIHsKKyAgICAgICAgICAgIHJvb3RNYXRyaXgg
PSB0aGlzLl9iYXNlTWF0cml4OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9wYXJlbnQp
IHsKKyAgICAgICAgICAgIHJvb3RNYXRyaXgubXVsdGlwbHlUb1JlZih0aGlzLl9wYXJlbnQuX2Fi
c29sdXRlVHJhbnNmb3JtLCB0aGlzLl9hYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9hYnNvbHV0ZVRyYW5zZm9ybS5jb3B5RnJv
bShyb290TWF0cml4KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hYnNvbHV0ZVRyYW5zZm9y
bS5pbnZlcnRUb1JlZih0aGlzLl9pbnZlcnRlZEFic29sdXRlVHJhbnNmb3JtKTsKKyAgICAgICAg
aWYgKHVwZGF0ZUNoaWxkcmVuKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB0
aGlzLmNoaWxkcmVuW2luZGV4XS5fdXBkYXRlRGlmZmVyZW5jZU1hdHJpeCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjYWxpbmdEZXRlcm1pbmFudCA9ICh0aGlz
Ll9hYnNvbHV0ZVRyYW5zZm9ybS5kZXRlcm1pbmFudCgpIDwgMCA/IC0xIDogMSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBGbGFnIHRoZSBib25lIGFzIGRpcnR5IChGb3JjaW5nIGl0IHRvIHVw
ZGF0ZSBldmVyeXRoaW5nKQorICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLm1hcmtBc0RpcnR5
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jdXJyZW50UmVuZGVySWQrKzsKKyAgICAg
ICAgdGhpcy5fY2hpbGRVcGRhdGVJZCsrOworICAgICAgICB0aGlzLl9za2VsZXRvbi5fbWFya0Fz
RGlydHkoKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQm9uZS5wcm90b3R5cGUu
X21hcmtBc0RpcnR5QW5kQ29tcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5tYXJr
QXNEaXJ0eSgpOworICAgICAgICB0aGlzLl9uZWVkVG9Db21wb3NlID0gdHJ1ZTsKKyAgICB9Owor
ICAgIEJvbmUucHJvdG90eXBlLl9tYXJrQXNEaXJ0eUFuZERlY29tcG9zZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpOworICAgICAgICB0aGlzLl9uZWVkVG9EZWNv
bXBvc2UgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogVHJhbnNsYXRlIHRoZSBib25l
IGluIGxvY2FsIG9yIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIHZlYyBUaGUgYW1vdW50IHRv
IHRyYW5zbGF0ZSB0aGUgYm9uZQorICAgICAqIEBwYXJhbSBzcGFjZSBUaGUgc3BhY2UgdGhhdCB0
aGUgdHJhbnNsYXRpb24gaXMgaW4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRo
aXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gVGhpcyBpcyBvbmx5IHVzZWQgaW4gd29ybGQgc3BhY2UK
KyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAodmVjLCBz
cGFjZSwgbWVzaCkgeworICAgICAgICBpZiAoc3BhY2UgPT09IHZvaWQgMCkgeyBzcGFjZSA9IF9N
YXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2UiXS5MT0NB
TDsgfQorICAgICAgICB2YXIgbG0gPSB0aGlzLmdldExvY2FsTWF0cml4KCk7CisgICAgICAgIGlm
IChzcGFjZSA9PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlNwYWNlIl0uTE9DQUwpIHsKKyAgICAgICAgICAgIGxtLmFkZEF0SW5kZXgoMTIsIHZlYy54KTsK
KyAgICAgICAgICAgIGxtLmFkZEF0SW5kZXgoMTMsIHZlYy55KTsKKyAgICAgICAgICAgIGxtLmFk
ZEF0SW5kZXgoMTQsIHZlYy56KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHZhciB3bSA9IG51bGw7CisgICAgICAgICAgICAvL21lc2guZ2V0V29ybGRNYXRyaXgoKSBu
ZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHNrZWxldG9uLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9y
bXMoKQorICAgICAgICAgICAgaWYgKG1lc2gpIHsKKyAgICAgICAgICAgICAgICB3bSA9IG1lc2gu
Z2V0V29ybGRNYXRyaXgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3NrZWxl
dG9uLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9ybXMoKTsKKyAgICAgICAgICAgIHZhciB0bWF0ID0g
Qm9uZS5fdG1wTWF0c1swXTsKKyAgICAgICAgICAgIHZhciB0dmVjID0gQm9uZS5fdG1wVmVjc1sw
XTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bWVzaCAmJiB3bSkgeworICAgICAgICAgICAgICAgICAgICB0bWF0LmNvcHlGcm9tKHRoaXMuX3Bh
cmVudC5nZXRBYnNvbHV0ZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgICAgICAgICAgdG1hdC5t
dWx0aXBseVRvUmVmKHdtLCB0bWF0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRtYXQuY29weUZyb20odGhpcy5fcGFyZW50
LmdldEFic29sdXRlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRtYXQuc2V0VHJhbnNsYXRpb25Gcm9tRmxvYXRzKDAsIDAsIDApOwor
ICAgICAgICAgICAgdG1hdC5pbnZlcnQoKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRp
bmF0ZXNUb1JlZih2ZWMsIHRtYXQsIHR2ZWMpOworICAgICAgICAgICAgbG0uYWRkQXRJbmRleCgx
MiwgdHZlYy54KTsKKyAgICAgICAgICAgIGxtLmFkZEF0SW5kZXgoMTMsIHR2ZWMueSk7CisgICAg
ICAgICAgICBsbS5hZGRBdEluZGV4KDE0LCB0dmVjLnopOworICAgICAgICB9CisgICAgICAgIHRo
aXMuX21hcmtBc0RpcnR5QW5kRGVjb21wb3NlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXQgdGhlIHBvc3Rpb24gb2YgdGhlIGJvbmUgaW4gbG9jYWwgb3Igd29ybGQgc3BhY2UKKyAgICAg
KiBAcGFyYW0gcG9zaXRpb24gVGhlIHBvc2l0aW9uIHRvIHNldCB0aGUgYm9uZQorICAgICAqIEBw
YXJhbSBzcGFjZSBUaGUgc3BhY2UgdGhhdCB0aGUgcG9zaXRpb24gaXMgaW4KKyAgICAgKiBAcGFy
YW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gIFRoaXMgaXMg
b25seSB1c2VkIGluIHdvcmxkIHNwYWNlCisgICAgICovCisgICAgQm9uZS5wcm90b3R5cGUuc2V0
UG9zaXRpb24gPSBmdW5jdGlvbiAocG9zaXRpb24sIHNwYWNlLCBtZXNoKSB7CisgICAgICAgIGlm
IChzcGFjZSA9PT0gdm9pZCAwKSB7IHNwYWNlID0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJTcGFjZSJdLkxPQ0FMOyB9CisgICAgICAgIHZhciBsbSA9IHRo
aXMuZ2V0TG9jYWxNYXRyaXgoKTsKKyAgICAgICAgaWYgKHNwYWNlID09IF9NYXRoc19tYXRoX2F4
aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2UiXS5MT0NBTCkgeworICAgICAg
ICAgICAgbG0uc2V0VHJhbnNsYXRpb25Gcm9tRmxvYXRzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnks
IHBvc2l0aW9uLnopOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFy
IHdtID0gbnVsbDsKKyAgICAgICAgICAgIC8vbWVzaC5nZXRXb3JsZE1hdHJpeCgpIG5lZWRzIHRv
IGJlIGNhbGxlZCBiZWZvcmUgc2tlbGV0b24uY29tcHV0ZUFic29sdXRlVHJhbnNmb3JtcygpCisg
ICAgICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgICAgIHdtID0gbWVzaC5nZXRXb3Js
ZE1hdHJpeCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2tlbGV0b24uY29t
cHV0ZUFic29sdXRlVHJhbnNmb3JtcygpOworICAgICAgICAgICAgdmFyIHRtYXQgPSBCb25lLl90
bXBNYXRzWzBdOworICAgICAgICAgICAgdmFyIHZlYyA9IEJvbmUuX3RtcFZlY3NbMF07CisgICAg
ICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKG1lc2ggJiYg
d20pIHsKKyAgICAgICAgICAgICAgICAgICAgdG1hdC5jb3B5RnJvbSh0aGlzLl9wYXJlbnQuZ2V0
QWJzb2x1dGVUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICAgICAgICAgIHRtYXQubXVsdGlwbHlU
b1JlZih3bSwgdG1hdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICB0bWF0LmNvcHlGcm9tKHRoaXMuX3BhcmVudC5nZXRBYnNv
bHV0ZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0bWF0LmludmVydCgpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRl
c1RvUmVmKHBvc2l0aW9uLCB0bWF0LCB2ZWMpOworICAgICAgICAgICAgbG0uc2V0VHJhbnNsYXRp
b25Gcm9tRmxvYXRzKHZlYy54LCB2ZWMueSwgdmVjLnopOworICAgICAgICB9CisgICAgICAgIHRo
aXMuX21hcmtBc0RpcnR5QW5kRGVjb21wb3NlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXQgdGhlIGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSBib25lICh3b3JsZCBzcGFjZSkKKyAgICAg
KiBAcGFyYW0gcG9zaXRpb24gVGhlIHBvc2l0aW9uIHRvIHNldCB0aGUgYm9uZQorICAgICAqIEBw
YXJhbSBtZXNoIFRoZSBtZXNoIHRoYXQgdGhpcyBib25lIGlzIGF0dGFjaGVkIHRvCisgICAgICov
CisgICAgQm9uZS5wcm90b3R5cGUuc2V0QWJzb2x1dGVQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb3Np
dGlvbiwgbWVzaCkgeworICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvc2l0aW9uLCBfTWF0aHNf
bWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uV09STEQsIG1l
c2gpOworICAgIH07CisgICAgLyoqCisgICAgICogU2NhbGUgdGhlIGJvbmUgb24gdGhlIHgsIHkg
YW5kIHogYXhlcyAoaW4gbG9jYWwgc3BhY2UpCisgICAgICogQHBhcmFtIHggVGhlIGFtb3VudCB0
byBzY2FsZSB0aGUgYm9uZSBvbiB0aGUgeCBheGlzCisgICAgICogQHBhcmFtIHkgVGhlIGFtb3Vu
dCB0byBzY2FsZSB0aGUgYm9uZSBvbiB0aGUgeSBheGlzCisgICAgICogQHBhcmFtIHogVGhlIGFt
b3VudCB0byBzY2FsZSB0aGUgYm9uZSBvbiB0aGUgeiBheGlzCisgICAgICogQHBhcmFtIHNjYWxl
Q2hpbGRyZW4gc2V0cyB0aGlzIHRvIHRydWUgaWYgY2hpbGRyZW4gb2YgdGhlIGJvbmUgc2hvdWxk
IGJlIHNjYWxlZCBhcyB3ZWxsIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqLworICAgIEJvbmUu
cHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHksIHosIHNjYWxlQ2hpbGRyZW4pIHsKKyAg
ICAgICAgaWYgKHNjYWxlQ2hpbGRyZW4gPT09IHZvaWQgMCkgeyBzY2FsZUNoaWxkcmVuID0gZmFs
c2U7IH0KKyAgICAgICAgdmFyIGxvY01hdCA9IHRoaXMuZ2V0TG9jYWxNYXRyaXgoKTsKKyAgICAg
ICAgLy8gQXBwbHkgbmV3IHNjYWxpbmcgb24gdG9wIG9mIGN1cnJlbnQgbG9jYWwgbWF0cml4Cisg
ICAgICAgIHZhciBzY2FsZU1hdCA9IEJvbmUuX3RtcE1hdHNbMF07CisgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5TY2FsaW5n
VG9SZWYoeCwgeSwgeiwgc2NhbGVNYXQpOworICAgICAgICBzY2FsZU1hdC5tdWx0aXBseVRvUmVm
KGxvY01hdCwgbG9jTWF0KTsKKyAgICAgICAgLy8gSW52ZXJ0IHNjYWxpbmcgbWF0cml4IGFuZCBh
cHBseSB0aGUgaW52ZXJzZSB0byBhbGwgY2hpbGRyZW4KKyAgICAgICAgc2NhbGVNYXQuaW52ZXJ0
KCk7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLmNoaWxkcmVuOyBfaSA8IF9h
Lmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGNoaWxkID0gX2FbX2ldOworICAgICAg
ICAgICAgdmFyIGNtID0gY2hpbGQuZ2V0TG9jYWxNYXRyaXgoKTsKKyAgICAgICAgICAgIGNtLm11
bHRpcGx5VG9SZWYoc2NhbGVNYXQsIGNtKTsKKyAgICAgICAgICAgIGNtLm11bHRpcGx5QXRJbmRl
eCgxMiwgeCk7CisgICAgICAgICAgICBjbS5tdWx0aXBseUF0SW5kZXgoMTMsIHkpOworICAgICAg
ICAgICAgY20ubXVsdGlwbHlBdEluZGV4KDE0LCB6KTsKKyAgICAgICAgICAgIGNoaWxkLl9tYXJr
QXNEaXJ0eUFuZERlY29tcG9zZSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX21hcmtBc0Rp
cnR5QW5kRGVjb21wb3NlKCk7CisgICAgICAgIGlmIChzY2FsZUNoaWxkcmVuKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gdGhpcy5jaGlsZHJlbjsgX2IgPCBfYy5sZW5ndGg7
IF9iKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBfY1tfYl07CisgICAgICAgICAg
ICAgICAgY2hpbGQuc2NhbGUoeCwgeSwgeiwgc2NhbGVDaGlsZHJlbik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgYm9uZSBzY2FsaW5n
IGluIGxvY2FsIHNwYWNlCisgICAgICogQHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxpbmcg
dmVjdG9yCisgICAgICovCisgICAgQm9uZS5wcm90b3R5cGUuc2V0U2NhbGUgPSBmdW5jdGlvbiAo
c2NhbGUpIHsKKyAgICAgICAgdGhpcy5fZGVjb21wb3NlKCk7CisgICAgICAgIHRoaXMuX2xvY2Fs
U2NhbGluZy5jb3B5RnJvbShzY2FsZSk7CisgICAgICAgIHRoaXMuX21hcmtBc0RpcnR5QW5kQ29t
cG9zZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBzY2FsaW5n
IGluIGxvY2FsIHNwYWNlCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgc2NhbGluZyB2ZWN0
b3IKKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5nZXRTY2FsZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGhpcy5fZGVjb21wb3NlKCk7CisgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbFNj
YWxpbmc7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHNjYWxpbmcg
aW4gbG9jYWwgc3BhY2UgYW5kIHN0b3JlcyBpdCBpbiBhIHRhcmdldCB2ZWN0b3IKKyAgICAgKiBA
cGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCB2ZWN0b3IKKyAgICAgKi8KKyAgICBCb25l
LnByb3RvdHlwZS5nZXRTY2FsZVRvUmVmID0gZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICB0
aGlzLl9kZWNvbXBvc2UoKTsKKyAgICAgICAgcmVzdWx0LmNvcHlGcm9tKHRoaXMuX2xvY2FsU2Nh
bGluZyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHlhdywgcGl0Y2gsIGFuZCBy
b2xsIG9mIHRoZSBib25lIGluIGxvY2FsIG9yIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIHlh
dyBUaGUgcm90YXRpb24gb2YgdGhlIGJvbmUgb24gdGhlIHkgYXhpcworICAgICAqIEBwYXJhbSBw
aXRjaCBUaGUgcm90YXRpb24gb2YgdGhlIGJvbmUgb24gdGhlIHggYXhpcworICAgICAqIEBwYXJh
bSByb2xsIFRoZSByb3RhdGlvbiBvZiB0aGUgYm9uZSBvbiB0aGUgeiBheGlzCisgICAgICogQHBh
cmFtIHNwYWNlIFRoZSBzcGFjZSB0aGF0IHRoZSBheGVzIG9mIHJvdGF0aW9uIGFyZSBpbgorICAg
ICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRoYXQgdGhpcyBib25lIGlzIGF0dGFjaGVkIHRvLiAg
VGhpcyBpcyBvbmx5IHVzZWQgaW4gd29ybGQgc3BhY2UKKyAgICAgKi8KKyAgICBCb25lLnByb3Rv
dHlwZS5zZXRZYXdQaXRjaFJvbGwgPSBmdW5jdGlvbiAoeWF3LCBwaXRjaCwgcm9sbCwgc3BhY2Us
IG1lc2gpIHsKKyAgICAgICAgaWYgKHNwYWNlID09PSB2b2lkIDApIHsgc3BhY2UgPSBfTWF0aHNf
bWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUw7IH0K
KyAgICAgICAgaWYgKHNwYWNlID09PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUwpIHsKKyAgICAgICAgICAgIHZhciBxdWF0ID0gQm9u
ZS5fdG1wUXVhdDsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih5
YXcsIHBpdGNoLCByb2xsLCBxdWF0KTsKKyAgICAgICAgICAgIHRoaXMuc2V0Um90YXRpb25RdWF0
ZXJuaW9uKHF1YXQsIHNwYWNlLCBtZXNoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB2YXIgcm90TWF0SW52ID0gQm9uZS5fdG1wTWF0c1swXTsKKyAgICAgICAgaWYg
KCF0aGlzLl9nZXROZWdhdGl2ZVJvdGF0aW9uVG9SZWYocm90TWF0SW52LCBtZXNoKSkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciByb3RNYXQgPSBCb25lLl90
bXBNYXRzWzFdOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTWF0cml4Il0uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih5YXcsIHBpdGNo
LCByb2xsLCByb3RNYXQpOworICAgICAgICByb3RNYXRJbnYubXVsdGlwbHlUb1JlZihyb3RNYXQs
IHJvdE1hdCk7CisgICAgICAgIHRoaXMuX3JvdGF0ZVdpdGhNYXRyaXgocm90TWF0LCBzcGFjZSwg
bWVzaCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgYSByb3RhdGlvbiB0byB0aGUgYm9u
ZSBvbiBhbiBheGlzIGluIGxvY2FsIG9yIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIGF4aXMg
VGhlIGF4aXMgdG8gcm90YXRlIHRoZSBib25lIG9uCisgICAgICogQHBhcmFtIGFtb3VudCBUaGUg
YW1vdW50IHRvIHJvdGF0ZSB0aGUgYm9uZQorICAgICAqIEBwYXJhbSBzcGFjZSBUaGUgc3BhY2Ug
dGhhdCB0aGUgYXhpcyBpcyBpbgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRoYXQgdGhp
cyBib25lIGlzIGF0dGFjaGVkIHRvLiBUaGlzIGlzIG9ubHkgdXNlZCBpbiB3b3JsZCBzcGFjZQor
ICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9uIChheGlzLCBhbW91
bnQsIHNwYWNlLCBtZXNoKSB7CisgICAgICAgIGlmIChzcGFjZSA9PT0gdm9pZCAwKSB7IHNwYWNl
ID0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTcGFjZSJd
LkxPQ0FMOyB9CisgICAgICAgIHZhciBybWF0ID0gQm9uZS5fdG1wTWF0c1swXTsKKyAgICAgICAg
cm1hdC5zZXRUcmFuc2xhdGlvbkZyb21GbG9hdHMoMCwgMCwgMCk7CisgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5Sb3RhdGlv
bkF4aXNUb1JlZihheGlzLCBhbW91bnQsIHJtYXQpOworICAgICAgICB0aGlzLl9yb3RhdGVXaXRo
TWF0cml4KHJtYXQsIHNwYWNlLCBtZXNoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0
aGUgcm90YXRpb24gb2YgdGhlIGJvbmUgdG8gYSBwYXJ0aWN1bGFyIGF4aXMgYW5nbGUgaW4gbG9j
YWwgb3Igd29ybGQgc3BhY2UKKyAgICAgKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyB0byByb3RhdGUg
dGhlIGJvbmUgb24KKyAgICAgKiBAcGFyYW0gYW5nbGUgVGhlIGFuZ2xlIHRoYXQgdGhlIGJvbmUg
c2hvdWxkIGJlIHJvdGF0ZWQgdG8KKyAgICAgKiBAcGFyYW0gc3BhY2UgVGhlIHNwYWNlIHRoYXQg
dGhlIGF4aXMgaXMgaW4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9u
ZSBpcyBhdHRhY2hlZCB0by4gIFRoaXMgaXMgb25seSB1c2VkIGluIHdvcmxkIHNwYWNlCisgICAg
ICovCisgICAgQm9uZS5wcm90b3R5cGUuc2V0QXhpc0FuZ2xlID0gZnVuY3Rpb24gKGF4aXMsIGFu
Z2xlLCBzcGFjZSwgbWVzaCkgeworICAgICAgICBpZiAoc3BhY2UgPT09IHZvaWQgMCkgeyBzcGFj
ZSA9IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2Ui
XS5MT0NBTDsgfQorICAgICAgICBpZiAoc3BhY2UgPT09IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2UiXS5MT0NBTCkgeworICAgICAgICAgICAgdmFy
IHF1YXQgPSBCb25lLl90bXBRdWF0OworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbkF4aXNUb1Jl
ZihheGlzLCBhbmdsZSwgcXVhdCk7CisgICAgICAgICAgICB0aGlzLnNldFJvdGF0aW9uUXVhdGVy
bmlvbihxdWF0LCBzcGFjZSwgbWVzaCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdmFyIHJvdE1hdEludiA9IEJvbmUuX3RtcE1hdHNbMF07CisgICAgICAgIGlmICgh
dGhpcy5fZ2V0TmVnYXRpdmVSb3RhdGlvblRvUmVmKHJvdE1hdEludiwgbWVzaCkpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgcm90TWF0ID0gQm9uZS5fdG1w
TWF0c1sxXTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk1hdHJpeCJdLlJvdGF0aW9uQXhpc1RvUmVmKGF4aXMsIGFuZ2xlLCByb3RNYXQp
OworICAgICAgICByb3RNYXRJbnYubXVsdGlwbHlUb1JlZihyb3RNYXQsIHJvdE1hdCk7CisgICAg
ICAgIHRoaXMuX3JvdGF0ZVdpdGhNYXRyaXgocm90TWF0LCBzcGFjZSwgbWVzaCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGV1bGVyIHJvdGF0aW9uIG9mIHRoZSBib25lIGluIGxv
Y2FsIG9mIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIHJvdGF0aW9uIFRoZSBldWxlciByb3Rh
dGlvbiB0aGF0IHRoZSBib25lIHNob3VsZCBiZSBzZXQgdG8KKyAgICAgKiBAcGFyYW0gc3BhY2Ug
VGhlIHNwYWNlIHRoYXQgdGhlIHJvdGF0aW9uIGlzIGluCisgICAgICogQHBhcmFtIG1lc2ggVGhl
IG1lc2ggdGhhdCB0aGlzIGJvbmUgaXMgYXR0YWNoZWQgdG8uIFRoaXMgaXMgb25seSB1c2VkIGlu
IHdvcmxkIHNwYWNlCisgICAgICovCisgICAgQm9uZS5wcm90b3R5cGUuc2V0Um90YXRpb24gPSBm
dW5jdGlvbiAocm90YXRpb24sIHNwYWNlLCBtZXNoKSB7CisgICAgICAgIGlmIChzcGFjZSA9PT0g
dm9pZCAwKSB7IHNwYWNlID0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJTcGFjZSJdLkxPQ0FMOyB9CisgICAgICAgIHRoaXMuc2V0WWF3UGl0Y2hSb2xsKHJv
dGF0aW9uLnksIHJvdGF0aW9uLngsIHJvdGF0aW9uLnosIHNwYWNlLCBtZXNoKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNldCB0aGUgcXVhdGVybmlvbiByb3RhdGlvbiBvZiB0aGUgYm9uZSBp
biBsb2NhbCBvZiB3b3JsZCBzcGFjZQorICAgICAqIEBwYXJhbSBxdWF0IFRoZSBxdWF0ZXJuaW9u
IHJvdGF0aW9uIHRoYXQgdGhlIGJvbmUgc2hvdWxkIGJlIHNldCB0bworICAgICAqIEBwYXJhbSBz
cGFjZSBUaGUgc3BhY2UgdGhhdCB0aGUgcm90YXRpb24gaXMgaW4KKyAgICAgKiBAcGFyYW0gbWVz
aCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gVGhpcyBpcyBvbmx5IHVz
ZWQgaW4gd29ybGQgc3BhY2UKKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5zZXRSb3RhdGlv
blF1YXRlcm5pb24gPSBmdW5jdGlvbiAocXVhdCwgc3BhY2UsIG1lc2gpIHsKKyAgICAgICAgaWYg
KHNwYWNlID09PSB2b2lkIDApIHsgc3BhY2UgPSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUw7IH0KKyAgICAgICAgaWYgKHNwYWNlID09
PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0u
TE9DQUwpIHsKKyAgICAgICAgICAgIHRoaXMuX2RlY29tcG9zZSgpOworICAgICAgICAgICAgdGhp
cy5fbG9jYWxSb3RhdGlvbi5jb3B5RnJvbShxdWF0KTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtB
c0RpcnR5QW5kQ29tcG9zZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHZhciByb3RNYXRJbnYgPSBCb25lLl90bXBNYXRzWzBdOworICAgICAgICBpZiAoIXRoaXMu
X2dldE5lZ2F0aXZlUm90YXRpb25Ub1JlZihyb3RNYXRJbnYsIG1lc2gpKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJvdE1hdCA9IEJvbmUuX3RtcE1hdHNb
MV07CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJNYXRyaXgiXS5Gcm9tUXVhdGVybmlvblRvUmVmKHF1YXQsIHJvdE1hdCk7CisgICAgICAg
IHJvdE1hdEludi5tdWx0aXBseVRvUmVmKHJvdE1hdCwgcm90TWF0KTsKKyAgICAgICAgdGhpcy5f
cm90YXRlV2l0aE1hdHJpeChyb3RNYXQsIHNwYWNlLCBtZXNoKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldCB0aGUgcm90YXRpb24gbWF0cml4IG9mIHRoZSBib25lIGluIGxvY2FsIG9mIHdv
cmxkIHNwYWNlCisgICAgICogQHBhcmFtIHJvdE1hdCBUaGUgcm90YXRpb24gbWF0cml4IHRoYXQg
dGhlIGJvbmUgc2hvdWxkIGJlIHNldCB0bworICAgICAqIEBwYXJhbSBzcGFjZSBUaGUgc3BhY2Ug
dGhhdCB0aGUgcm90YXRpb24gaXMgaW4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0
IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gVGhpcyBpcyBvbmx5IHVzZWQgaW4gd29ybGQgc3Bh
Y2UKKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5zZXRSb3RhdGlvbk1hdHJpeCA9IGZ1bmN0
aW9uIChyb3RNYXQsIHNwYWNlLCBtZXNoKSB7CisgICAgICAgIGlmIChzcGFjZSA9PT0gdm9pZCAw
KSB7IHNwYWNlID0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJTcGFjZSJdLkxPQ0FMOyB9CisgICAgICAgIGlmIChzcGFjZSA9PT0gX01hdGhzX21hdGhfYXhp
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTcGFjZSJdLkxPQ0FMKSB7CisgICAgICAg
ICAgICB2YXIgcXVhdCA9IEJvbmUuX3RtcFF1YXQ7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdLkZyb21Sb3Rh
dGlvbk1hdHJpeFRvUmVmKHJvdE1hdCwgcXVhdCk7CisgICAgICAgICAgICB0aGlzLnNldFJvdGF0
aW9uUXVhdGVybmlvbihxdWF0LCBzcGFjZSwgbWVzaCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHJvdE1hdEludiA9IEJvbmUuX3RtcE1hdHNbMF07CisgICAg
ICAgIGlmICghdGhpcy5fZ2V0TmVnYXRpdmVSb3RhdGlvblRvUmVmKHJvdE1hdEludiwgbWVzaCkp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgcm90TWF0MiA9
IEJvbmUuX3RtcE1hdHNbMV07CisgICAgICAgIHJvdE1hdDIuY29weUZyb20ocm90TWF0KTsKKyAg
ICAgICAgcm90TWF0SW52Lm11bHRpcGx5VG9SZWYocm90TWF0LCByb3RNYXQyKTsKKyAgICAgICAg
dGhpcy5fcm90YXRlV2l0aE1hdHJpeChyb3RNYXQyLCBzcGFjZSwgbWVzaCk7CisgICAgfTsKKyAg
ICBCb25lLnByb3RvdHlwZS5fcm90YXRlV2l0aE1hdHJpeCA9IGZ1bmN0aW9uIChybWF0LCBzcGFj
ZSwgbWVzaCkgeworICAgICAgICBpZiAoc3BhY2UgPT09IHZvaWQgMCkgeyBzcGFjZSA9IF9NYXRo
c19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2UiXS5MT0NBTDsg
fQorICAgICAgICB2YXIgbG1hdCA9IHRoaXMuZ2V0TG9jYWxNYXRyaXgoKTsKKyAgICAgICAgdmFy
IGx4ID0gbG1hdC5tWzEyXTsKKyAgICAgICAgdmFyIGx5ID0gbG1hdC5tWzEzXTsKKyAgICAgICAg
dmFyIGx6ID0gbG1hdC5tWzE0XTsKKyAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50
KCk7CisgICAgICAgIHZhciBwYXJlbnRTY2FsZSA9IEJvbmUuX3RtcE1hdHNbM107CisgICAgICAg
IHZhciBwYXJlbnRTY2FsZUludiA9IEJvbmUuX3RtcE1hdHNbNF07CisgICAgICAgIGlmIChwYXJl
bnQgJiYgc3BhY2UgPT0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJTcGFjZSJdLldPUkxEKSB7CisgICAgICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAg
ICAgICAgIHBhcmVudFNjYWxlLmNvcHlGcm9tKG1lc2guZ2V0V29ybGRNYXRyaXgoKSk7CisgICAg
ICAgICAgICAgICAgcGFyZW50LmdldEFic29sdXRlVHJhbnNmb3JtKCkubXVsdGlwbHlUb1JlZihw
YXJlbnRTY2FsZSwgcGFyZW50U2NhbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgcGFyZW50U2NhbGUuY29weUZyb20ocGFyZW50LmdldEFic29s
dXRlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50U2NhbGVJ
bnYuY29weUZyb20ocGFyZW50U2NhbGUpOworICAgICAgICAgICAgcGFyZW50U2NhbGVJbnYuaW52
ZXJ0KCk7CisgICAgICAgICAgICBsbWF0Lm11bHRpcGx5VG9SZWYocGFyZW50U2NhbGUsIGxtYXQp
OworICAgICAgICAgICAgbG1hdC5tdWx0aXBseVRvUmVmKHJtYXQsIGxtYXQpOworICAgICAgICAg
ICAgbG1hdC5tdWx0aXBseVRvUmVmKHBhcmVudFNjYWxlSW52LCBsbWF0KTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzcGFjZSA9PSBfTWF0aHNfbWF0aF9heGlz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uV09STEQgJiYgbWVzaCkgewor
ICAgICAgICAgICAgICAgIHBhcmVudFNjYWxlLmNvcHlGcm9tKG1lc2guZ2V0V29ybGRNYXRyaXgo
KSk7CisgICAgICAgICAgICAgICAgcGFyZW50U2NhbGVJbnYuY29weUZyb20ocGFyZW50U2NhbGUp
OworICAgICAgICAgICAgICAgIHBhcmVudFNjYWxlSW52LmludmVydCgpOworICAgICAgICAgICAg
ICAgIGxtYXQubXVsdGlwbHlUb1JlZihwYXJlbnRTY2FsZSwgbG1hdCk7CisgICAgICAgICAgICAg
ICAgbG1hdC5tdWx0aXBseVRvUmVmKHJtYXQsIGxtYXQpOworICAgICAgICAgICAgICAgIGxtYXQu
bXVsdGlwbHlUb1JlZihwYXJlbnRTY2FsZUludiwgbG1hdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBsbWF0Lm11bHRpcGx5VG9SZWYocm1hdCwg
bG1hdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbG1hdC5zZXRUcmFuc2xh
dGlvbkZyb21GbG9hdHMobHgsIGx5LCBseik7CisgICAgICAgIHRoaXMuY29tcHV0ZUFic29sdXRl
VHJhbnNmb3JtcygpOworICAgICAgICB0aGlzLl9tYXJrQXNEaXJ0eUFuZERlY29tcG9zZSgpOwor
ICAgIH07CisgICAgQm9uZS5wcm90b3R5cGUuX2dldE5lZ2F0aXZlUm90YXRpb25Ub1JlZiA9IGZ1
bmN0aW9uIChyb3RNYXRJbnYsIG1lc2gpIHsKKyAgICAgICAgdmFyIHNjYWxlTWF0cml4ID0gQm9u
ZS5fdG1wTWF0c1syXTsKKyAgICAgICAgcm90TWF0SW52LmNvcHlGcm9tKHRoaXMuZ2V0QWJzb2x1
dGVUcmFuc2Zvcm0oKSk7CisgICAgICAgIGlmIChtZXNoKSB7CisgICAgICAgICAgICByb3RNYXRJ
bnYubXVsdGlwbHlUb1JlZihtZXNoLmdldFdvcmxkTWF0cml4KCksIHJvdE1hdEludik7CisgICAg
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TWF0cml4Il0uU2NhbGluZ1RvUmVmKG1lc2guc2NhbGluZy54LCBtZXNoLnNjYWxpbmcueSwgbWVz
aC5zY2FsaW5nLnosIHNjYWxlTWF0cml4KTsKKyAgICAgICAgfQorICAgICAgICByb3RNYXRJbnYu
aW52ZXJ0KCk7CisgICAgICAgIGlmIChpc05hTihyb3RNYXRJbnYubVswXSkpIHsKKyAgICAgICAg
ICAgIC8vIE1hdHJpeCBmYWlsZWQgdG8gaW52ZXJ0LgorICAgICAgICAgICAgLy8gVGhpcyBjYW4g
aGFwcGVuIGlmIHNjYWxlIGlzIHplcm8gZm9yIGV4YW1wbGUuCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgc2NhbGVNYXRyaXgubXVsdGlwbHlBdEluZGV4KDAs
IHRoaXMuX3NjYWxpbmdEZXRlcm1pbmFudCk7CisgICAgICAgIHJvdE1hdEludi5tdWx0aXBseVRv
UmVmKHNjYWxlTWF0cml4LCByb3RNYXRJbnYpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGJvbmUgaW4gbG9jYWwg
b3Igd29ybGQgc3BhY2UKKyAgICAgKiBAcGFyYW0gc3BhY2UgVGhlIHNwYWNlIHRoYXQgdGhlIHJl
dHVybmVkIHBvc2l0aW9uIGlzIGluCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdGhhdCB0
aGlzIGJvbmUgaXMgYXR0YWNoZWQgdG8uIFRoaXMgaXMgb25seSB1c2VkIGluIHdvcmxkIHNwYWNl
CisgICAgICogQHJldHVybnMgVGhlIHBvc2l0aW9uIG9mIHRoZSBib25lCisgICAgICovCisgICAg
Qm9uZS5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoc3BhY2UsIG1lc2gpIHsKKyAg
ICAgICAgaWYgKHNwYWNlID09PSB2b2lkIDApIHsgc3BhY2UgPSBfTWF0aHNfbWF0aF9heGlzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUw7IH0KKyAgICAgICAgaWYg
KG1lc2ggPT09IHZvaWQgMCkgeyBtZXNoID0gbnVsbDsgfQorICAgICAgICB2YXIgcG9zID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIHRoaXMuZ2V0UG9zaXRpb25Ub1JlZihzcGFjZSwgbWVzaCwgcG9zKTsK
KyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvcHkgdGhlIHBv
c2l0aW9uIG9mIHRoZSBib25lIHRvIGEgdmVjdG9yMyBpbiBsb2NhbCBvciB3b3JsZCBzcGFjZQor
ICAgICAqIEBwYXJhbSBzcGFjZSBUaGUgc3BhY2UgdGhhdCB0aGUgcmV0dXJuZWQgcG9zaXRpb24g
aXMgaW4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRh
Y2hlZCB0by4gVGhpcyBpcyBvbmx5IHVzZWQgaW4gd29ybGQgc3BhY2UKKyAgICAgKiBAcGFyYW0g
cmVzdWx0IFRoZSB2ZWN0b3IzIHRvIGNvcHkgdGhlIHBvc2l0aW9uIHRvCisgICAgICovCisgICAg
Qm9uZS5wcm90b3R5cGUuZ2V0UG9zaXRpb25Ub1JlZiA9IGZ1bmN0aW9uIChzcGFjZSwgbWVzaCwg
cmVzdWx0KSB7CisgICAgICAgIGlmIChzcGFjZSA9PT0gdm9pZCAwKSB7IHNwYWNlID0gX01hdGhz
X21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTcGFjZSJdLkxPQ0FMOyB9
CisgICAgICAgIGlmIChzcGFjZSA9PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUwpIHsKKyAgICAgICAgICAgIHZhciBsbSA9IHRoaXMu
Z2V0TG9jYWxNYXRyaXgoKTsKKyAgICAgICAgICAgIHJlc3VsdC54ID0gbG0ubVsxMl07CisgICAg
ICAgICAgICByZXN1bHQueSA9IGxtLm1bMTNdOworICAgICAgICAgICAgcmVzdWx0LnogPSBsbS5t
WzE0XTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciB3bSA9IG51
bGw7CisgICAgICAgICAgICAvL21lc2guZ2V0V29ybGRNYXRyaXgoKSBuZWVkcyB0byBiZSBjYWxs
ZWQgYmVmb3JlIHNrZWxldG9uLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9ybXMoKQorICAgICAgICAg
ICAgaWYgKG1lc2gpIHsKKyAgICAgICAgICAgICAgICB3bSA9IG1lc2guZ2V0V29ybGRNYXRyaXgo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3NrZWxldG9uLmNvbXB1dGVBYnNv
bHV0ZVRyYW5zZm9ybXMoKTsKKyAgICAgICAgICAgIHZhciB0bWF0ID0gQm9uZS5fdG1wTWF0c1sw
XTsKKyAgICAgICAgICAgIGlmIChtZXNoICYmIHdtKSB7CisgICAgICAgICAgICAgICAgdG1hdC5j
b3B5RnJvbSh0aGlzLmdldEFic29sdXRlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgICAgIHRt
YXQubXVsdGlwbHlUb1JlZih3bSwgdG1hdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICB0bWF0ID0gdGhpcy5nZXRBYnNvbHV0ZVRyYW5zZm9ybSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0LnggPSB0bWF0Lm1bMTJdOworICAg
ICAgICAgICAgcmVzdWx0LnkgPSB0bWF0Lm1bMTNdOworICAgICAgICAgICAgcmVzdWx0LnogPSB0
bWF0Lm1bMTRdOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGFi
c29sdXRlIHBvc2l0aW9uIG9mIHRoZSBib25lICh3b3JsZCBzcGFjZSkKKyAgICAgKiBAcGFyYW0g
bWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0bworICAgICAqIEByZXR1
cm5zIFRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgYm9uZQorICAgICAqLworICAgIEJvbmUu
cHJvdG90eXBlLmdldEFic29sdXRlUG9zaXRpb24gPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAg
ICBpZiAobWVzaCA9PT0gdm9pZCAwKSB7IG1lc2ggPSBudWxsOyB9CisgICAgICAgIHZhciBwb3Mg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9y
MyJdLlplcm8oKTsKKyAgICAgICAgdGhpcy5nZXRQb3NpdGlvblRvUmVmKF9NYXRoc19tYXRoX2F4
aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2UiXS5XT1JMRCwgbWVzaCwgcG9z
KTsKKyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvcHkgdGhl
IGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSBib25lICh3b3JsZCBzcGFjZSkgdG8gdGhlIHJlc3Vs
dCBwYXJhbQorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRoYXQgdGhpcyBib25lIGlzIGF0
dGFjaGVkIHRvCisgICAgICogQHBhcmFtIHJlc3VsdCBUaGUgdmVjdG9yMyB0byBjb3B5IHRoZSBh
YnNvbHV0ZSBwb3NpdGlvbiB0bworICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLmdldEFic29s
dXRlUG9zaXRpb25Ub1JlZiA9IGZ1bmN0aW9uIChtZXNoLCByZXN1bHQpIHsKKyAgICAgICAgdGhp
cy5nZXRQb3NpdGlvblRvUmVmKF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siU3BhY2UiXS5XT1JMRCwgbWVzaCwgcmVzdWx0KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIENvbXB1dGUgdGhlIGFic29sdXRlIHRyYW5zZm9ybXMgb2YgdGhpcyBib25lIGFuZCBp
dHMgY2hpbGRyZW4KKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5jb21wdXRlQWJzb2x1dGVU
cmFuc2Zvcm1zID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jb21wb3NlKCk7CisgICAg
ICAgIGlmICh0aGlzLl9wYXJlbnQpIHsKKyAgICAgICAgICAgIHRoaXMuX2xvY2FsTWF0cml4Lm11
bHRpcGx5VG9SZWYodGhpcy5fcGFyZW50Ll9hYnNvbHV0ZVRyYW5zZm9ybSwgdGhpcy5fYWJzb2x1
dGVUcmFuc2Zvcm0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhp
cy5fYWJzb2x1dGVUcmFuc2Zvcm0uY29weUZyb20odGhpcy5fbG9jYWxNYXRyaXgpOworICAgICAg
ICAgICAgdmFyIHBvc2VNYXRyaXggPSB0aGlzLl9za2VsZXRvbi5nZXRQb3NlTWF0cml4KCk7Cisg
ICAgICAgICAgICBpZiAocG9zZU1hdHJpeCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2Fic29s
dXRlVHJhbnNmb3JtLm11bHRpcGx5VG9SZWYocG9zZU1hdHJpeCwgdGhpcy5fYWJzb2x1dGVUcmFu
c2Zvcm0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBjaGlsZHJlbiA9
IHRoaXMuY2hpbGRyZW47CisgICAgICAgIHZhciBsZW4gPSBjaGlsZHJlbi5sZW5ndGg7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgIGNoaWxkcmVu
W2ldLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9ybXMoKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqCisgICAgICogR2V0IHRoZSB3b3JsZCBkaXJlY3Rpb24gZnJvbSBhbiBheGlzIHRoYXQgaXMg
aW4gdGhlIGxvY2FsIHNwYWNlIG9mIHRoZSBib25lCisgICAgICogQHBhcmFtIGxvY2FsQXhpcyBU
aGUgbG9jYWwgZGlyZWN0aW9uIHRoYXQgaXMgdXNlZCB0byBjb21wdXRlIHRoZSB3b3JsZCBkaXJl
Y3Rpb24KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRh
Y2hlZCB0bworICAgICAqIEByZXR1cm5zIFRoZSB3b3JsZCBkaXJlY3Rpb24KKyAgICAgKi8KKyAg
ICBCb25lLnByb3RvdHlwZS5nZXREaXJlY3Rpb24gPSBmdW5jdGlvbiAobG9jYWxBeGlzLCBtZXNo
KSB7CisgICAgICAgIGlmIChtZXNoID09PSB2b2lkIDApIHsgbWVzaCA9IG51bGw7IH0KKyAgICAg
ICAgdmFyIHJlc3VsdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlzLmdldERpcmVjdGlvblRvUmVm
KGxvY2FsQXhpcywgbWVzaCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENvcHkgdGhlIHdvcmxkIGRpcmVjdGlvbiB0byBhIHZlY3RvcjMg
ZnJvbSBhbiBheGlzIHRoYXQgaXMgaW4gdGhlIGxvY2FsIHNwYWNlIG9mIHRoZSBib25lCisgICAg
ICogQHBhcmFtIGxvY2FsQXhpcyBUaGUgbG9jYWwgZGlyZWN0aW9uIHRoYXQgaXMgdXNlZCB0byBj
b21wdXRlIHRoZSB3b3JsZCBkaXJlY3Rpb24KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0
aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0bworICAgICAqIEBwYXJhbSByZXN1bHQgVGhlIHZl
Y3RvcjMgdGhhdCB0aGUgd29ybGQgZGlyZWN0aW9uIHdpbGwgYmUgY29waWVkIHRvCisgICAgICov
CisgICAgQm9uZS5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uVG9SZWYgPSBmdW5jdGlvbiAobG9jYWxB
eGlzLCBtZXNoLCByZXN1bHQpIHsKKyAgICAgICAgaWYgKG1lc2ggPT09IHZvaWQgMCkgeyBtZXNo
ID0gbnVsbDsgfQorICAgICAgICB2YXIgd20gPSBudWxsOworICAgICAgICAvL21lc2guZ2V0V29y
bGRNYXRyaXgoKSBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHNrZWxldG9uLmNvbXB1dGVBYnNv
bHV0ZVRyYW5zZm9ybXMoKQorICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgd20gPSBt
ZXNoLmdldFdvcmxkTWF0cml4KCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc2tlbGV0b24u
Y29tcHV0ZUFic29sdXRlVHJhbnNmb3JtcygpOworICAgICAgICB2YXIgbWF0ID0gQm9uZS5fdG1w
TWF0c1swXTsKKyAgICAgICAgbWF0LmNvcHlGcm9tKHRoaXMuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0o
KSk7CisgICAgICAgIGlmIChtZXNoICYmIHdtKSB7CisgICAgICAgICAgICBtYXQubXVsdGlwbHlU
b1JlZih3bSwgbWF0KTsKKyAgICAgICAgfQorICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVm
KGxvY2FsQXhpcywgbWF0LCByZXN1bHQpOworICAgICAgICByZXN1bHQubm9ybWFsaXplKCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGV1bGVyIHJvdGF0aW9uIG9mIHRoZSBib25l
IGluIGxvY2FsIG9yIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIHNwYWNlIFRoZSBzcGFjZSB0
aGF0IHRoZSByb3RhdGlvbiBzaG91bGQgYmUgaW4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVz
aCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gIFRoaXMgaXMgb25seSB1c2VkIGluIHdv
cmxkIHNwYWNlCisgICAgICogQHJldHVybnMgVGhlIGV1bGVyIHJvdGF0aW9uCisgICAgICovCisg
ICAgQm9uZS5wcm90b3R5cGUuZ2V0Um90YXRpb24gPSBmdW5jdGlvbiAoc3BhY2UsIG1lc2gpIHsK
KyAgICAgICAgaWYgKHNwYWNlID09PSB2b2lkIDApIHsgc3BhY2UgPSBfTWF0aHNfbWF0aF9heGlz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUw7IH0KKyAgICAgICAg
aWYgKG1lc2ggPT09IHZvaWQgMCkgeyBtZXNoID0gbnVsbDsgfQorICAgICAgICB2YXIgcmVzdWx0
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3Rv
cjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuZ2V0Um90YXRpb25Ub1JlZihzcGFjZSwgbWVzaCwg
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENvcHkgdGhlIGV1bGVyIHJvdGF0aW9uIG9mIHRoZSBib25lIHRvIGEgdmVjdG9yMy4gIFRoZSBy
b3RhdGlvbiBjYW4gYmUgaW4gZWl0aGVyIGxvY2FsIG9yIHdvcmxkIHNwYWNlCisgICAgICogQHBh
cmFtIHNwYWNlIFRoZSBzcGFjZSB0aGF0IHRoZSByb3RhdGlvbiBzaG91bGQgYmUgaW4KKyAgICAg
KiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gIFRo
aXMgaXMgb25seSB1c2VkIGluIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIHJlc3VsdCBUaGUg
dmVjdG9yMyB0aGF0IHRoZSByb3RhdGlvbiBzaG91bGQgYmUgY29waWVkIHRvCisgICAgICovCisg
ICAgQm9uZS5wcm90b3R5cGUuZ2V0Um90YXRpb25Ub1JlZiA9IGZ1bmN0aW9uIChzcGFjZSwgbWVz
aCwgcmVzdWx0KSB7CisgICAgICAgIGlmIChzcGFjZSA9PT0gdm9pZCAwKSB7IHNwYWNlID0gX01h
dGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTcGFjZSJdLkxPQ0FM
OyB9CisgICAgICAgIGlmIChtZXNoID09PSB2b2lkIDApIHsgbWVzaCA9IG51bGw7IH0KKyAgICAg
ICAgdmFyIHF1YXQgPSBCb25lLl90bXBRdWF0OworICAgICAgICB0aGlzLmdldFJvdGF0aW9uUXVh
dGVybmlvblRvUmVmKHNwYWNlLCBtZXNoLCBxdWF0KTsKKyAgICAgICAgcXVhdC50b0V1bGVyQW5n
bGVzVG9SZWYocmVzdWx0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCB0aGUgcXVhdGVy
bmlvbiByb3RhdGlvbiBvZiB0aGUgYm9uZSBpbiBlaXRoZXIgbG9jYWwgb3Igd29ybGQgc3BhY2UK
KyAgICAgKiBAcGFyYW0gc3BhY2UgVGhlIHNwYWNlIHRoYXQgdGhlIHJvdGF0aW9uIHNob3VsZCBi
ZSBpbgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRoYXQgdGhpcyBib25lIGlzIGF0dGFj
aGVkIHRvLiAgVGhpcyBpcyBvbmx5IHVzZWQgaW4gd29ybGQgc3BhY2UKKyAgICAgKiBAcmV0dXJu
cyBUaGUgcXVhdGVybmlvbiByb3RhdGlvbgorICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLmdl
dFJvdGF0aW9uUXVhdGVybmlvbiA9IGZ1bmN0aW9uIChzcGFjZSwgbWVzaCkgeworICAgICAgICBp
ZiAoc3BhY2UgPT09IHZvaWQgMCkgeyBzcGFjZSA9IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siU3BhY2UiXS5MT0NBTDsgfQorICAgICAgICBpZiAobWVzaCA9
PT0gdm9pZCAwKSB7IG1lc2ggPSBudWxsOyB9CisgICAgICAgIHZhciByZXN1bHQgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdLklk
ZW50aXR5KCk7CisgICAgICAgIHRoaXMuZ2V0Um90YXRpb25RdWF0ZXJuaW9uVG9SZWYoc3BhY2Us
IG1lc2gsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBDb3B5IHRoZSBxdWF0ZXJuaW9uIHJvdGF0aW9uIG9mIHRoZSBib25lIHRvIGEgcXVh
dGVybmlvbi4gIFRoZSByb3RhdGlvbiBjYW4gYmUgaW4gZWl0aGVyIGxvY2FsIG9yIHdvcmxkIHNw
YWNlCisgICAgICogQHBhcmFtIHNwYWNlIFRoZSBzcGFjZSB0aGF0IHRoZSByb3RhdGlvbiBzaG91
bGQgYmUgaW4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBh
dHRhY2hlZCB0by4gIFRoaXMgaXMgb25seSB1c2VkIGluIHdvcmxkIHNwYWNlCisgICAgICogQHBh
cmFtIHJlc3VsdCBUaGUgcXVhdGVybmlvbiB0aGF0IHRoZSByb3RhdGlvbiBzaG91bGQgYmUgY29w
aWVkIHRvCisgICAgICovCisgICAgQm9uZS5wcm90b3R5cGUuZ2V0Um90YXRpb25RdWF0ZXJuaW9u
VG9SZWYgPSBmdW5jdGlvbiAoc3BhY2UsIG1lc2gsIHJlc3VsdCkgeworICAgICAgICBpZiAoc3Bh
Y2UgPT09IHZvaWQgMCkgeyBzcGFjZSA9IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siU3BhY2UiXS5MT0NBTDsgfQorICAgICAgICBpZiAobWVzaCA9PT0gdm9p
ZCAwKSB7IG1lc2ggPSBudWxsOyB9CisgICAgICAgIGlmIChzcGFjZSA9PSBfTWF0aHNfbWF0aF9h
eGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUwpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2RlY29tcG9zZSgpOworICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKHRo
aXMuX2xvY2FsUm90YXRpb24pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdmFyIG1hdCA9IEJvbmUuX3RtcE1hdHNbMF07CisgICAgICAgICAgICB2YXIgYW1hdCA9IHRo
aXMuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGlmIChtZXNoKSB7CisgICAg
ICAgICAgICAgICAgYW1hdC5tdWx0aXBseVRvUmVmKG1lc2guZ2V0V29ybGRNYXRyaXgoKSwgbWF0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1h
dC5jb3B5RnJvbShhbWF0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hdC5tdWx0aXBs
eUF0SW5kZXgoMCwgdGhpcy5fc2NhbGluZ0RldGVybWluYW50KTsKKyAgICAgICAgICAgIG1hdC5t
dWx0aXBseUF0SW5kZXgoMSwgdGhpcy5fc2NhbGluZ0RldGVybWluYW50KTsKKyAgICAgICAgICAg
IG1hdC5tdWx0aXBseUF0SW5kZXgoMiwgdGhpcy5fc2NhbGluZ0RldGVybWluYW50KTsKKyAgICAg
ICAgICAgIG1hdC5kZWNvbXBvc2UodW5kZWZpbmVkLCByZXN1bHQsIHVuZGVmaW5lZCk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCB0aGUgcm90YXRpb24gbWF0cml4IG9m
IHRoZSBib25lIGluIGxvY2FsIG9yIHdvcmxkIHNwYWNlCisgICAgICogQHBhcmFtIHNwYWNlIFRo
ZSBzcGFjZSB0aGF0IHRoZSByb3RhdGlvbiBzaG91bGQgYmUgaW4KKyAgICAgKiBAcGFyYW0gbWVz
aCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0by4gIFRoaXMgaXMgb25seSB1
c2VkIGluIHdvcmxkIHNwYWNlCisgICAgICogQHJldHVybnMgVGhlIHJvdGF0aW9uIG1hdHJpeAor
ICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLmdldFJvdGF0aW9uTWF0cml4ID0gZnVuY3Rpb24g
KHNwYWNlLCBtZXNoKSB7CisgICAgICAgIGlmIChzcGFjZSA9PT0gdm9pZCAwKSB7IHNwYWNlID0g
X01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTcGFjZSJdLkxP
Q0FMOyB9CisgICAgICAgIHZhciByZXN1bHQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgdGhpcy5n
ZXRSb3RhdGlvbk1hdHJpeFRvUmVmKHNwYWNlLCBtZXNoLCByZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ29weSB0aGUgcm90YXRpb24gbWF0
cml4IG9mIHRoZSBib25lIHRvIGEgbWF0cml4LiAgVGhlIHJvdGF0aW9uIGNhbiBiZSBpbiBlaXRo
ZXIgbG9jYWwgb3Igd29ybGQgc3BhY2UKKyAgICAgKiBAcGFyYW0gc3BhY2UgVGhlIHNwYWNlIHRo
YXQgdGhlIHJvdGF0aW9uIHNob3VsZCBiZSBpbgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNo
IHRoYXQgdGhpcyBib25lIGlzIGF0dGFjaGVkIHRvLiAgVGhpcyBpcyBvbmx5IHVzZWQgaW4gd29y
bGQgc3BhY2UKKyAgICAgKiBAcGFyYW0gcmVzdWx0IFRoZSBxdWF0ZXJuaW9uIHRoYXQgdGhlIHJv
dGF0aW9uIHNob3VsZCBiZSBjb3BpZWQgdG8KKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5n
ZXRSb3RhdGlvbk1hdHJpeFRvUmVmID0gZnVuY3Rpb24gKHNwYWNlLCBtZXNoLCByZXN1bHQpIHsK
KyAgICAgICAgaWYgKHNwYWNlID09PSB2b2lkIDApIHsgc3BhY2UgPSBfTWF0aHNfbWF0aF9heGlz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwYWNlIl0uTE9DQUw7IH0KKyAgICAgICAg
aWYgKHNwYWNlID09IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siU3BhY2UiXS5MT0NBTCkgeworICAgICAgICAgICAgdGhpcy5nZXRMb2NhbE1hdHJpeCgpLmdl
dFJvdGF0aW9uTWF0cml4VG9SZWYocmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHZhciBtYXQgPSBCb25lLl90bXBNYXRzWzBdOworICAgICAgICAgICAgdmFy
IGFtYXQgPSB0aGlzLmdldEFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgICAgICAgICBpZiAobWVz
aCkgeworICAgICAgICAgICAgICAgIGFtYXQubXVsdGlwbHlUb1JlZihtZXNoLmdldFdvcmxkTWF0
cml4KCksIG1hdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBtYXQuY29weUZyb20oYW1hdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
YXQubXVsdGlwbHlBdEluZGV4KDAsIHRoaXMuX3NjYWxpbmdEZXRlcm1pbmFudCk7CisgICAgICAg
ICAgICBtYXQubXVsdGlwbHlBdEluZGV4KDEsIHRoaXMuX3NjYWxpbmdEZXRlcm1pbmFudCk7Cisg
ICAgICAgICAgICBtYXQubXVsdGlwbHlBdEluZGV4KDIsIHRoaXMuX3NjYWxpbmdEZXRlcm1pbmFu
dCk7CisgICAgICAgICAgICBtYXQuZ2V0Um90YXRpb25NYXRyaXhUb1JlZihyZXN1bHQpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHdvcmxkIHBvc2l0aW9uIG9m
IGEgcG9pbnQgdGhhdCBpcyBpbiB0aGUgbG9jYWwgc3BhY2Ugb2YgdGhlIGJvbmUKKyAgICAgKiBA
cGFyYW0gcG9zaXRpb24gVGhlIGxvY2FsIHBvc2l0aW9uCisgICAgICogQHBhcmFtIG1lc2ggVGhl
IG1lc2ggdGhhdCB0aGlzIGJvbmUgaXMgYXR0YWNoZWQgdG8KKyAgICAgKiBAcmV0dXJucyBUaGUg
d29ybGQgcG9zaXRpb24KKyAgICAgKi8KKyAgICBCb25lLnByb3RvdHlwZS5nZXRBYnNvbHV0ZVBv
c2l0aW9uRnJvbUxvY2FsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBtZXNoKSB7CisgICAgICAgIGlm
IChtZXNoID09PSB2b2lkIDApIHsgbWVzaCA9IG51bGw7IH0KKyAgICAgICAgdmFyIHJlc3VsdCA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3Iz
Il0uWmVybygpOworICAgICAgICB0aGlzLmdldEFic29sdXRlUG9zaXRpb25Gcm9tTG9jYWxUb1Jl
Zihwb3NpdGlvbiwgbWVzaCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldCB0aGUgd29ybGQgcG9zaXRpb24gb2YgYSBwb2ludCB0aGF0
IGlzIGluIHRoZSBsb2NhbCBzcGFjZSBvZiB0aGUgYm9uZSBhbmQgY29weSBpdCB0byB0aGUgcmVz
dWx0IHBhcmFtCisgICAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSBsb2NhbCBwb3NpdGlvbgorICAg
ICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRoYXQgdGhpcyBib25lIGlzIGF0dGFjaGVkIHRvCisg
ICAgICogQHBhcmFtIHJlc3VsdCBUaGUgdmVjdG9yMyB0aGF0IHRoZSB3b3JsZCBwb3NpdGlvbiBz
aG91bGQgYmUgY29waWVkIHRvCisgICAgICovCisgICAgQm9uZS5wcm90b3R5cGUuZ2V0QWJzb2x1
dGVQb3NpdGlvbkZyb21Mb2NhbFRvUmVmID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBtZXNoLCByZXN1
bHQpIHsKKyAgICAgICAgaWYgKG1lc2ggPT09IHZvaWQgMCkgeyBtZXNoID0gbnVsbDsgfQorICAg
ICAgICB2YXIgd20gPSBudWxsOworICAgICAgICAvL21lc2guZ2V0V29ybGRNYXRyaXgoKSBuZWVk
cyB0byBiZSBjYWxsZWQgYmVmb3JlIHNrZWxldG9uLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9ybXMo
KQorICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgd20gPSBtZXNoLmdldFdvcmxkTWF0
cml4KCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc2tlbGV0b24uY29tcHV0ZUFic29sdXRl
VHJhbnNmb3JtcygpOworICAgICAgICB2YXIgdG1hdCA9IEJvbmUuX3RtcE1hdHNbMF07CisgICAg
ICAgIGlmIChtZXNoICYmIHdtKSB7CisgICAgICAgICAgICB0bWF0LmNvcHlGcm9tKHRoaXMuZ2V0
QWJzb2x1dGVUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICB0bWF0Lm11bHRpcGx5VG9SZWYod20s
IHRtYXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdG1hdCA9IHRo
aXMuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICAgICAgfQorICAgICAgICBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9y
bUNvb3JkaW5hdGVzVG9SZWYocG9zaXRpb24sIHRtYXQsIHJlc3VsdCk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXQgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIGEgcG9pbnQgdGhhdCBpcyBpbiB3
b3JsZCBzcGFjZQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgd29ybGQgcG9zaXRpb24KKyAg
ICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0bwor
ICAgICAqIEByZXR1cm5zIFRoZSBsb2NhbCBwb3NpdGlvbgorICAgICAqLworICAgIEJvbmUucHJv
dG90eXBlLmdldExvY2FsUG9zaXRpb25Gcm9tQWJzb2x1dGUgPSBmdW5jdGlvbiAocG9zaXRpb24s
IG1lc2gpIHsKKyAgICAgICAgaWYgKG1lc2ggPT09IHZvaWQgMCkgeyBtZXNoID0gbnVsbDsgfQor
ICAgICAgICB2YXIgcmVzdWx0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuZ2V0TG9jYWxQb3Np
dGlvbkZyb21BYnNvbHV0ZVRvUmVmKHBvc2l0aW9uLCBtZXNoLCByZXN1bHQpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBsb2NhbCBwb3Np
dGlvbiBvZiBhIHBvaW50IHRoYXQgaXMgaW4gd29ybGQgc3BhY2UgYW5kIGNvcHkgaXQgdG8gdGhl
IHJlc3VsdCBwYXJhbQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgd29ybGQgcG9zaXRpb24K
KyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGF0IHRoaXMgYm9uZSBpcyBhdHRhY2hlZCB0
bworICAgICAqIEBwYXJhbSByZXN1bHQgVGhlIHZlY3RvcjMgdGhhdCB0aGUgbG9jYWwgcG9zaXRp
b24gc2hvdWxkIGJlIGNvcGllZCB0bworICAgICAqLworICAgIEJvbmUucHJvdG90eXBlLmdldExv
Y2FsUG9zaXRpb25Gcm9tQWJzb2x1dGVUb1JlZiA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgbWVzaCwg
cmVzdWx0KSB7CisgICAgICAgIGlmIChtZXNoID09PSB2b2lkIDApIHsgbWVzaCA9IG51bGw7IH0K
KyAgICAgICAgdmFyIHdtID0gbnVsbDsKKyAgICAgICAgLy9tZXNoLmdldFdvcmxkTWF0cml4KCkg
bmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBza2VsZXRvbi5jb21wdXRlQWJzb2x1dGVUcmFuc2Zv
cm1zKCkKKyAgICAgICAgaWYgKG1lc2gpIHsKKyAgICAgICAgICAgIHdtID0gbWVzaC5nZXRXb3Js
ZE1hdHJpeCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NrZWxldG9uLmNvbXB1dGVBYnNv
bHV0ZVRyYW5zZm9ybXMoKTsKKyAgICAgICAgdmFyIHRtYXQgPSBCb25lLl90bXBNYXRzWzBdOwor
ICAgICAgICB0bWF0LmNvcHlGcm9tKHRoaXMuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0oKSk7CisgICAg
ICAgIGlmIChtZXNoICYmIHdtKSB7CisgICAgICAgICAgICB0bWF0Lm11bHRpcGx5VG9SZWYod20s
IHRtYXQpOworICAgICAgICB9CisgICAgICAgIHRtYXQuaW52ZXJ0KCk7CisgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJh
bnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihwb3NpdGlvbiwgdG1hdCwgcmVzdWx0KTsKKyAgICB9Owor
ICAgIEJvbmUuX3RtcFZlY3MgPSBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIkFycmF5VG9vbHMiXS5CdWlsZEFycmF5KDIsIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybyk7CisgICAgQm9uZS5f
dG1wUXVhdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJRdWF0ZXJuaW9uIl0uSWRlbnRpdHkoKTsKKyAgICBCb25lLl90bXBNYXRzID0gX01pc2NfYXJy
YXlUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBcnJheVRvb2xzIl0uQnVpbGRB
cnJheSg1LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TWF0cml4Il0uSWRlbnRpdHkpOworICAgIHJldHVybiBCb25lOworfShfbm9kZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9Cb25lcy9ib25lSUtDb250cm9sbGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9Cb25lcy9ib25lSUtDb250cm9sbGVyLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IEJvbmVJS0NvbnRyb2xsZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiQm9uZUlLQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQm9uZUlLQ29udHJv
bGxlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguYXhpcyAqLyAiLi9N
YXRocy9tYXRoLmF4aXMudHMiKTsKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gYXBwbHkgaW52
ZXJzZSBraW5lbWF0aWNzIHRvIGJvbmVzCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNv
bS9ob3dfdG8vaG93X3RvX3VzZV9ib25lc19hbmRfc2tlbGV0b25zI2JvbmVpa2NvbnRyb2xsZXIK
KyAqLwordmFyIEJvbmVJS0NvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBCb25lSUtDb250cm9sbGVyCisgICAgICog
QHBhcmFtIG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0byBjb250cm9sCisgICAgICogQHBhcmFtIGJv
bmUgZGVmaW5lcyB0aGUgYm9uZSB0byBjb250cm9sCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVm
aW5lcyBvcHRpb25zIHRvIHNldCB1cCB0aGUgY29udHJvbGxlcgorICAgICAqLworICAgIGZ1bmN0
aW9uIEJvbmVJS0NvbnRyb2xsZXIobWVzaCwgYm9uZSwgb3B0aW9ucykgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSB0YXJnZXQgcG9zaXRpb24KKyAgICAgICAgICov
CisgICAgICAgIHRoaXMudGFyZ2V0UG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcG9sZSB0YXJnZXQgcG9zaXRpb24KKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMucG9sZVRhcmdldFBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHBvbGUgdGFyZ2V0IGxvY2FsIG9mZnNl
dAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5wb2xlVGFyZ2V0TG9jYWxPZmZzZXQgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlpl
cm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcG9sZSBhbmds
ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5wb2xlQW5nbGUgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogVGhlIGFtb3VudCB0byBzbGVycCAoc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBv
bGF0aW9uKSB0byB0aGUgdGFyZ2V0LiAgU2V0IHRoaXMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5k
IDEgKGEgdmFsdWUgb2YgMSBkaXNhYmxlcyBzbGVycCkKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuc2xlcnBBbW91bnQgPSAxOworICAgICAgICB0aGlzLl9ib25lMVF1YXQgPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLklkZW50
aXR5KCk7CisgICAgICAgIHRoaXMuX2JvbmUxTWF0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgICAgIHRo
aXMuX2JvbmUyQW5nID0gTWF0aC5QSTsKKyAgICAgICAgdGhpcy5fbWF4QW5nbGUgPSBNYXRoLlBJ
OworICAgICAgICB0aGlzLl9yaWdodEhhbmRlZFN5c3RlbSA9IGZhbHNlOworICAgICAgICB0aGlz
Ll9iZW5kQXhpcyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJWZWN0b3IzIl0uUmlnaHQoKTsKKyAgICAgICAgdGhpcy5fc2xlcnBpbmcgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fYWRqdXN0Um9sbCA9IDA7CisgICAgICAgIHRoaXMuX2JvbmUyID0gYm9u
ZTsKKyAgICAgICAgdGhpcy5fYm9uZTEgPSBib25lLmdldFBhcmVudCgpOworICAgICAgICBpZiAo
IXRoaXMuX2JvbmUxKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5tZXNoID0gbWVzaDsKKyAgICAgICAgdmFyIGJvbmVQb3MgPSBib25lLmdldFBvc2l0aW9u
KCk7CisgICAgICAgIGlmIChib25lLmdldEFic29sdXRlVHJhbnNmb3JtKCkuZGV0ZXJtaW5hbnQo
KSA+IDApIHsKKyAgICAgICAgICAgIHRoaXMuX3JpZ2h0SGFuZGVkU3lzdGVtID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHRoaXMuX2JlbmRBeGlzLnggPSAwOworICAgICAgICAgICAgdGhpcy5fYmVuZEF4
aXMueSA9IDA7CisgICAgICAgICAgICB0aGlzLl9iZW5kQXhpcy56ID0gLTE7CisgICAgICAgICAg
ICBpZiAoYm9uZVBvcy54ID4gYm9uZVBvcy55ICYmIGJvbmVQb3MueCA+IGJvbmVQb3Mueikgewor
ICAgICAgICAgICAgICAgIHRoaXMuX2FkanVzdFJvbGwgPSBNYXRoLlBJICogLjU7CisgICAgICAg
ICAgICAgICAgdGhpcy5fYmVuZEF4aXMueiA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuX2JvbmUxLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIGJvbmVT
Y2FsZTEgPSB0aGlzLl9ib25lMS5nZXRTY2FsZSgpOworICAgICAgICAgICAgdmFyIGJvbmVTY2Fs
ZTIgPSB0aGlzLl9ib25lMi5nZXRTY2FsZSgpOworICAgICAgICAgICAgdGhpcy5fYm9uZTFMZW5n
dGggPSB0aGlzLl9ib25lMS5sZW5ndGggKiBib25lU2NhbGUxLnkgKiB0aGlzLm1lc2guc2NhbGlu
Zy55OworICAgICAgICAgICAgdGhpcy5fYm9uZTJMZW5ndGggPSB0aGlzLl9ib25lMi5sZW5ndGgg
KiBib25lU2NhbGUyLnkgKiB0aGlzLm1lc2guc2NhbGluZy55OworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHRoaXMuX2JvbmUxLmNoaWxkcmVuWzBdKSB7CisgICAgICAgICAgICBtZXNoLmNv
bXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAgICAgICAgICAgIHZhciBwb3MxID0gdGhpcy5fYm9u
ZTIuY2hpbGRyZW5bMF0uZ2V0QWJzb2x1dGVQb3NpdGlvbihtZXNoKTsKKyAgICAgICAgICAgIHZh
ciBwb3MyID0gdGhpcy5fYm9uZTIuZ2V0QWJzb2x1dGVQb3NpdGlvbihtZXNoKTsKKyAgICAgICAg
ICAgIHZhciBwb3MzID0gdGhpcy5fYm9uZTEuZ2V0QWJzb2x1dGVQb3NpdGlvbihtZXNoKTsKKyAg
ICAgICAgICAgIHRoaXMuX2JvbmUxTGVuZ3RoID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5EaXN0YW5jZShwb3MxLCBwb3MyKTsKKyAg
ICAgICAgICAgIHRoaXMuX2JvbmUyTGVuZ3RoID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5EaXN0YW5jZShwb3MyLCBwb3MzKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9ib25lMS5nZXRSb3RhdGlvbk1hdHJpeFRvUmVmKF9NYXRo
c19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU3BhY2UiXS5XT1JMRCwg
bWVzaCwgdGhpcy5fYm9uZTFNYXQpOworICAgICAgICB0aGlzLm1heEFuZ2xlID0gTWF0aC5QSTsK
KyAgICAgICAgaWYgKG9wdGlvbnMpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLnRhcmdldE1l
c2gpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE1lc2ggPSBvcHRpb25zLnRhcmdldE1l
c2g7CisgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRNZXNoLmNvbXB1dGVXb3JsZE1hdHJpeCh0
cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnBvbGVUYXJnZXRN
ZXNoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5wb2xlVGFyZ2V0TWVzaCA9IG9wdGlvbnMucG9s
ZVRhcmdldE1lc2g7CisgICAgICAgICAgICAgICAgdGhpcy5wb2xlVGFyZ2V0TWVzaC5jb21wdXRl
V29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChv
cHRpb25zLnBvbGVUYXJnZXRCb25lKSB7CisgICAgICAgICAgICAgICAgdGhpcy5wb2xlVGFyZ2V0
Qm9uZSA9IG9wdGlvbnMucG9sZVRhcmdldEJvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmICh0aGlzLl9ib25lMS5nZXRQYXJlbnQoKSkgeworICAgICAgICAgICAgICAgIHRo
aXMucG9sZVRhcmdldEJvbmUgPSB0aGlzLl9ib25lMS5nZXRQYXJlbnQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnBvbGVUYXJnZXRMb2NhbE9mZnNldCkgeworICAg
ICAgICAgICAgICAgIHRoaXMucG9sZVRhcmdldExvY2FsT2Zmc2V0LmNvcHlGcm9tKG9wdGlvbnMu
cG9sZVRhcmdldExvY2FsT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChv
cHRpb25zLnBvbGVBbmdsZSkgeworICAgICAgICAgICAgICAgIHRoaXMucG9sZUFuZ2xlID0gb3B0
aW9ucy5wb2xlQW5nbGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3B0aW9ucy5i
ZW5kQXhpcykgeworICAgICAgICAgICAgICAgIHRoaXMuX2JlbmRBeGlzLmNvcHlGcm9tKG9wdGlv
bnMuYmVuZEF4aXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9wdGlvbnMubWF4
QW5nbGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm1heEFuZ2xlID0gb3B0aW9ucy5tYXhBbmds
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnNsZXJwQW1vdW50KSB7
CisgICAgICAgICAgICAgICAgdGhpcy5zbGVycEFtb3VudCA9IG9wdGlvbnMuc2xlcnBBbW91bnQ7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KEJvbmVJS0NvbnRyb2xsZXIucHJvdG90eXBlLCAibWF4QW5nbGUiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgbWF4aW11bSBhbGxvd2VkIGFuZ2xlCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9tYXhBbmdsZTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHRoaXMuX3NldE1heEFuZ2xlKHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgQm9uZUlLQ29udHJvbGxlci5wcm90b3R5cGUuX3NldE1heEFuZ2xlID0gZnVuY3Rpb24g
KGFuZykgeworICAgICAgICBpZiAoYW5nIDwgMCkgeworICAgICAgICAgICAgYW5nID0gMDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoYW5nID4gTWF0aC5QSSB8fCBhbmcgPT0gdW5kZWZpbmVkKSB7
CisgICAgICAgICAgICBhbmcgPSBNYXRoLlBJOworICAgICAgICB9CisgICAgICAgIHRoaXMuX21h
eEFuZ2xlID0gYW5nOworICAgICAgICB2YXIgYSA9IHRoaXMuX2JvbmUxTGVuZ3RoOworICAgICAg
ICB2YXIgYiA9IHRoaXMuX2JvbmUyTGVuZ3RoOworICAgICAgICB0aGlzLl9tYXhSZWFjaCA9IE1h
dGguc3FydChhICogYSArIGIgKiBiIC0gMiAqIGEgKiBiICogTWF0aC5jb3MoYW5nKSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSB0aGUgY29udHJvbGxlciB0byB1cGRhdGUgdGhlIGJv
bmVzCisgICAgICovCisgICAgQm9uZUlLQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgYm9uZTEgPSB0aGlzLl9ib25lMTsKKyAgICAgICAgaWYg
KCFib25lMSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciB0
YXJnZXQgPSB0aGlzLnRhcmdldFBvc2l0aW9uOworICAgICAgICB2YXIgcG9sZVRhcmdldCA9IHRo
aXMucG9sZVRhcmdldFBvc2l0aW9uOworICAgICAgICB2YXIgbWF0MSA9IEJvbmVJS0NvbnRyb2xs
ZXIuX3RtcE1hdHNbMF07CisgICAgICAgIHZhciBtYXQyID0gQm9uZUlLQ29udHJvbGxlci5fdG1w
TWF0c1sxXTsKKyAgICAgICAgaWYgKHRoaXMudGFyZ2V0TWVzaCkgeworICAgICAgICAgICAgdGFy
Z2V0LmNvcHlGcm9tKHRoaXMudGFyZ2V0TWVzaC5nZXRBYnNvbHV0ZVBvc2l0aW9uKCkpOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLnBvbGVUYXJnZXRCb25lKSB7CisgICAgICAgICAgICB0
aGlzLnBvbGVUYXJnZXRCb25lLmdldEFic29sdXRlUG9zaXRpb25Gcm9tTG9jYWxUb1JlZih0aGlz
LnBvbGVUYXJnZXRMb2NhbE9mZnNldCwgdGhpcy5tZXNoLCBwb2xlVGFyZ2V0KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmICh0aGlzLnBvbGVUYXJnZXRNZXNoKSB7CisgICAgICAgICAgICBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJd
LlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYodGhpcy5wb2xlVGFyZ2V0TG9jYWxPZmZzZXQsIHRo
aXMucG9sZVRhcmdldE1lc2guZ2V0V29ybGRNYXRyaXgoKSwgcG9sZVRhcmdldCk7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGJvbmVQb3MgPSBCb25lSUtDb250cm9sbGVyLl90bXBWZWNzWzBdOwor
ICAgICAgICB2YXIgemF4aXMgPSBCb25lSUtDb250cm9sbGVyLl90bXBWZWNzWzFdOworICAgICAg
ICB2YXIgeGF4aXMgPSBCb25lSUtDb250cm9sbGVyLl90bXBWZWNzWzJdOworICAgICAgICB2YXIg
eWF4aXMgPSBCb25lSUtDb250cm9sbGVyLl90bXBWZWNzWzNdOworICAgICAgICB2YXIgdXBBeGlz
ID0gQm9uZUlLQ29udHJvbGxlci5fdG1wVmVjc1s0XTsKKyAgICAgICAgdmFyIF90bXBRdWF0ID0g
Qm9uZUlLQ29udHJvbGxlci5fdG1wUXVhdDsKKyAgICAgICAgYm9uZTEuZ2V0QWJzb2x1dGVQb3Np
dGlvblRvUmVmKHRoaXMubWVzaCwgYm9uZVBvcyk7CisgICAgICAgIHBvbGVUYXJnZXQuc3VidHJh
Y3RUb1JlZihib25lUG9zLCB1cEF4aXMpOworICAgICAgICBpZiAodXBBeGlzLnggPT0gMCAmJiB1
cEF4aXMueSA9PSAwICYmIHVwQXhpcy56ID09IDApIHsKKyAgICAgICAgICAgIHVwQXhpcy55ID0g
MTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVwQXhpcy5ub3JtYWxp
emUoKTsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQuc3VidHJhY3RUb1JlZihib25lUG9zLCB5
YXhpcyk7CisgICAgICAgIHlheGlzLm5vcm1hbGl6ZSgpOworICAgICAgICBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkNyb3NzVG9SZWYo
eWF4aXMsIHVwQXhpcywgemF4aXMpOworICAgICAgICB6YXhpcy5ub3JtYWxpemUoKTsKKyAgICAg
ICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3Rv
cjMiXS5Dcm9zc1RvUmVmKHlheGlzLCB6YXhpcywgeGF4aXMpOworICAgICAgICB4YXhpcy5ub3Jt
YWxpemUoKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIk1hdHJpeCJdLkZyb21YWVpBeGVzVG9SZWYoeGF4aXMsIHlheGlzLCB6YXhpcywg
bWF0MSk7CisgICAgICAgIHZhciBhID0gdGhpcy5fYm9uZTFMZW5ndGg7CisgICAgICAgIHZhciBi
ID0gdGhpcy5fYm9uZTJMZW5ndGg7CisgICAgICAgIHZhciBjID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5EaXN0YW5jZShib25lUG9z
LCB0YXJnZXQpOworICAgICAgICBpZiAodGhpcy5fbWF4UmVhY2ggPiAwKSB7CisgICAgICAgICAg
ICBjID0gTWF0aC5taW4odGhpcy5fbWF4UmVhY2gsIGMpOworICAgICAgICB9CisgICAgICAgIHZh
ciBhY29zYSA9IChiICogYiArIGMgKiBjIC0gYSAqIGEpIC8gKDIgKiBiICogYyk7CisgICAgICAg
IHZhciBhY29zYiA9IChjICogYyArIGEgKiBhIC0gYiAqIGIpIC8gKDIgKiBjICogYSk7CisgICAg
ICAgIGlmIChhY29zYSA+IDEpIHsKKyAgICAgICAgICAgIGFjb3NhID0gMTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoYWNvc2IgPiAxKSB7CisgICAgICAgICAgICBhY29zYiA9IDE7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGFjb3NhIDwgLTEpIHsKKyAgICAgICAgICAgIGFjb3NhID0gLTE7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGFjb3NiIDwgLTEpIHsKKyAgICAgICAgICAgIGFjb3NiID0g
LTE7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGFuZ0EgPSBNYXRoLmFjb3MoYWNvc2EpOworICAg
ICAgICB2YXIgYW5nQiA9IE1hdGguYWNvcyhhY29zYik7CisgICAgICAgIHZhciBhbmdDID0gLWFu
Z0EgLSBhbmdCOworICAgICAgICBpZiAodGhpcy5fcmlnaHRIYW5kZWRTeXN0ZW0pIHsKKyAgICAg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJN
YXRyaXgiXS5Sb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKDAsIDAsIHRoaXMuX2FkanVzdFJvbGws
IG1hdDIpOworICAgICAgICAgICAgbWF0Mi5tdWx0aXBseVRvUmVmKG1hdDEsIG1hdDEpOworICAg
ICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Ik1hdHJpeCJdLlJvdGF0aW9uQXhpc1RvUmVmKHRoaXMuX2JlbmRBeGlzLCBhbmdCLCBtYXQyKTsK
KyAgICAgICAgICAgIG1hdDIubXVsdGlwbHlUb1JlZihtYXQxLCBtYXQxKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBfdG1wVmVjID0gQm9uZUlLQ29udHJvbGxl
ci5fdG1wVmVjc1s1XTsKKyAgICAgICAgICAgIF90bXBWZWMuY29weUZyb20odGhpcy5fYmVuZEF4
aXMpOworICAgICAgICAgICAgX3RtcFZlYy54ICo9IC0xOworICAgICAgICAgICAgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlJvdGF0aW9u
QXhpc1RvUmVmKF90bXBWZWMsIC1hbmdCLCBtYXQyKTsKKyAgICAgICAgICAgIG1hdDIubXVsdGlw
bHlUb1JlZihtYXQxLCBtYXQxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5wb2xlQW5n
bGUpIHsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJNYXRyaXgiXS5Sb3RhdGlvbkF4aXNUb1JlZih5YXhpcywgdGhpcy5wb2xlQW5n
bGUsIG1hdDIpOworICAgICAgICAgICAgbWF0MS5tdWx0aXBseVRvUmVmKG1hdDIsIG1hdDEpOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9ib25lMSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuc2xlcnBBbW91bnQgPCAxKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zbGVycGlu
ZykgeworICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLkZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKHRo
aXMuX2JvbmUxTWF0LCB0aGlzLl9ib25lMVF1YXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUXVhdGVybmlvbiJdLkZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKG1hdDEsIF90bXBRdWF0KTsK
KyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siUXVhdGVybmlvbiJdLlNsZXJwVG9SZWYodGhpcy5fYm9uZTFRdWF0LCBfdG1wUXVh
dCwgdGhpcy5zbGVycEFtb3VudCwgdGhpcy5fYm9uZTFRdWF0KTsKKyAgICAgICAgICAgICAgICBh
bmdDID0gdGhpcy5fYm9uZTJBbmcgKiAoMS4wIC0gdGhpcy5zbGVycEFtb3VudCkgKyBhbmdDICog
dGhpcy5zbGVycEFtb3VudDsKKyAgICAgICAgICAgICAgICB0aGlzLl9ib25lMS5zZXRSb3RhdGlv
blF1YXRlcm5pb24odGhpcy5fYm9uZTFRdWF0LCBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlNwYWNlIl0uV09STEQsIHRoaXMubWVzaCk7CisgICAgICAgICAg
ICAgICAgdGhpcy5fc2xlcnBpbmcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYm9uZTEuc2V0Um90YXRpb25NYXRyaXgobWF0
MSwgX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTcGFjZSJd
LldPUkxELCB0aGlzLm1lc2gpOworICAgICAgICAgICAgICAgIHRoaXMuX2JvbmUxTWF0LmNvcHlG
cm9tKG1hdDEpOworICAgICAgICAgICAgICAgIHRoaXMuX3NsZXJwaW5nID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYm9uZTIuc2V0QXhpc0FuZ2xlKHRo
aXMuX2JlbmRBeGlzLCBhbmdDLCBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlNwYWNlIl0uTE9DQUwpOworICAgICAgICB0aGlzLl9ib25lMkFuZyA9IGFuZ0M7
CisgICAgfTsKKyAgICBCb25lSUtDb250cm9sbGVyLl90bXBWZWNzID0gW19NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpLCBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlpl
cm8oKSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXS5aZXJvKCksIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0uWmVybygpLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKSwgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCldOworICAgIEJvbmVJ
S0NvbnRyb2xsZXIuX3RtcFF1YXQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLklkZW50aXR5KCk7CisgICAgQm9uZUlLQ29udHJv
bGxlci5fdG1wTWF0cyA9IFtfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTWF0cml4Il0uSWRlbnRpdHkoKSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLklkZW50aXR5KCldOworICAgIHJldHVybiBC
b25lSUtDb250cm9sbGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Cb25l
cy9ib25lTG9va0NvbnRyb2xsZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vQm9uZXMvYm9uZUxvb2tDb250cm9sbGVyLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogQm9uZUxvb2tDb250cm9sbGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkJvbmVMb29rQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQm9uZUxv
b2tDb250cm9sbGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19hcnJheVRv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NaXNjL2FycmF5VG9vbHMgKi8gIi4vTWlzYy9hcnJheVRvb2xzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAq
LyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguYXhpcyAqLyAiLi9NYXRocy9tYXRoLmF4aXMudHMi
KTsKKworCisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBtYWtlIGEgYm9uZSBsb29rIHRvd2FyZCBh
IHBvaW50IGluIHNwYWNlCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
aG93X3RvX3VzZV9ib25lc19hbmRfc2tlbGV0b25zI2JvbmVsb29rY29udHJvbGxlcgorICovCit2
YXIgQm9uZUxvb2tDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAg
IC8qKgorICAgICAqIENyZWF0ZSBhIEJvbmVMb29rQ29udHJvbGxlcgorICAgICAqIEBwYXJhbSBt
ZXNoIHRoZSBtZXNoIHRoYXQgdGhlIGJvbmUgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBib25l
IHRoZSBib25lIHRoYXQgd2lsbCBiZSBsb29raW5nIHRvIHRoZSB0YXJnZXQKKyAgICAgKiBAcGFy
YW0gdGFyZ2V0IHRoZSB0YXJnZXQgVmVjdG9yMyB0byBsb29rIGF0CisgICAgICogQHBhcmFtIG9w
dGlvbnMgb3B0aW9uYWwgc2V0dGluZ3M6CisgICAgICogKiBtYXhZYXc6IHRoZSBtYXhpbXVtIGFu
Z2xlIHRoZSBib25lIHdpbGwgeWF3IHRvCisgICAgICogKiBtaW5ZYXc6IHRoZSBtaW5pbXVtIGFu
Z2xlIHRoZSBib25lIHdpbGwgeWF3IHRvCisgICAgICogKiBtYXhQaXRjaDogdGhlIG1heGltdW0g
YW5nbGUgdGhlIGJvbmUgd2lsbCBwaXRjaCB0bworICAgICAqICogbWluUGl0Y2g6IHRoZSBtaW5p
bXVtIGFuZ2xlIHRoZSBib25lIHdpbGwgeWF3IHRvCisgICAgICogKiBzbGVycEFtb3VudDogc2V0
IHRoZSBiZXR3ZWVuIDAgYW5kIDEgdG8gbWFrZSB0aGUgYm9uZSBzbGVycCB0byB0aGUgdGFyZ2V0
LgorICAgICAqICogdXBBeGlzOiB0aGUgdXAgYXhpcyBvZiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0K
KyAgICAgKiAqIHVwQXhpc1NwYWNlOiB0aGUgc3BhY2UgdGhhdCB0aGUgdXAgYXhpcyBpcyBpbiAt
IFNwYWNlLkJPTkUsIFNwYWNlLkxPQ0FMIChkZWZhdWx0KSwgb3IgU3BhY2UuV09STEQuCisgICAg
ICogKiB5YXdBeGlzOiBzZXQgeWF3QXhpcyBpZiB0aGUgYm9uZSBkb2VzIG5vdCB5YXcgb24gdGhl
IHkgYXhpcworICAgICAqICogcGl0Y2hBeGlzOiBzZXQgcGl0Y2hBeGlzIGlmIHRoZSBib25lIGRv
ZXMgbm90IHBpdGNoIG9uIHRoZSB4IGF4aXMKKyAgICAgKiAqIGFkanVzdFlhdzogdXNlZCB0byBt
YWtlIGFuIGFkanVzdG1lbnQgdG8gdGhlIHlhdyBvZiB0aGUgYm9uZQorICAgICAqICogYWRqdXN0
UGl0Y2g6IHVzZWQgdG8gbWFrZSBhbiBhZGp1c3RtZW50IHRvIHRoZSBwaXRjaCBvZiB0aGUgYm9u
ZQorICAgICAqICogYWRqdXN0Um9sbDogdXNlZCB0byBtYWtlIGFuIGFkanVzdG1lbnQgdG8gdGhl
IHJvbGwgb2YgdGhlIGJvbmUKKyAgICAgKiovCisgICAgZnVuY3Rpb24gQm9uZUxvb2tDb250cm9s
bGVyKG1lc2gsIGJvbmUsIHRhcmdldCwgb3B0aW9ucykgeworICAgICAgICAvKioKKyAgICAgICAg
ICogVGhlIHVwIGF4aXMgb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIHRoYXQgaXMgdXNlZCB3aGVu
IHRoZSBib25lIGlzIHJvdGF0ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudXBBeGlzID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMi
XS5VcCgpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHNwYWNlIHRoYXQgdGhlIHVwIGF4
aXMgaXMgaW4gLSBTcGFjZS5CT05FLCBTcGFjZS5MT0NBTCAoZGVmYXVsdCksIG9yIFNwYWNlLldP
UkxECisgICAgICAgICAqLworICAgICAgICB0aGlzLnVwQXhpc1NwYWNlID0gX01hdGhzX21hdGhf
YXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTcGFjZSJdLkxPQ0FMOworICAgICAg
ICAvKioKKyAgICAgICAgICogVXNlZCB0byBtYWtlIGFuIGFkanVzdG1lbnQgdG8gdGhlIHlhdyBv
ZiB0aGUgYm9uZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5hZGp1c3RZYXcgPSAwOworICAg
ICAgICAvKioKKyAgICAgICAgICogVXNlZCB0byBtYWtlIGFuIGFkanVzdG1lbnQgdG8gdGhlIHBp
dGNoIG9mIHRoZSBib25lCisgICAgICAgICAqLworICAgICAgICB0aGlzLmFkanVzdFBpdGNoID0g
MDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzZWQgdG8gbWFrZSBhbiBhZGp1c3RtZW50IHRv
IHRoZSByb2xsIG9mIHRoZSBib25lCisgICAgICAgICAqLworICAgICAgICB0aGlzLmFkanVzdFJv
bGwgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGFtb3VudCB0byBzbGVycCAoc3Bo
ZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uKSB0byB0aGUgdGFyZ2V0LiAgU2V0IHRoaXMgdG8g
YSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgKGEgdmFsdWUgb2YgMSBkaXNhYmxlcyBzbGVycCkKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuc2xlcnBBbW91bnQgPSAxOworICAgICAgICB0aGlzLl9i
b25lUXVhdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJRdWF0ZXJuaW9uIl0uSWRlbnRpdHkoKTsKKyAgICAgICAgdGhpcy5fc2xlcnBpbmcgPSBmYWxz
ZTsKKyAgICAgICAgdGhpcy5fZmlyc3RGcmFtZVNraXBwZWQgPSBmYWxzZTsKKyAgICAgICAgdGhp
cy5fZm93YXJkQXhpcyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZWN0b3IzIl0uRm9yd2FyZCgpOworICAgICAgICB0aGlzLm1lc2ggPSBtZXNoOwor
ICAgICAgICB0aGlzLmJvbmUgPSBib25lOworICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDsK
KyAgICAgICAgaWYgKG9wdGlvbnMpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLmFkanVzdFlh
dykgeworICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0WWF3ID0gb3B0aW9ucy5hZGp1c3RZYXc7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3B0aW9ucy5hZGp1c3RQaXRjaCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0UGl0Y2ggPSBvcHRpb25zLmFkanVzdFBpdGNoOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWRqdXN0Um9sbCkgeworICAg
ICAgICAgICAgICAgIHRoaXMuYWRqdXN0Um9sbCA9IG9wdGlvbnMuYWRqdXN0Um9sbDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLm1heFlhdyAhPSBudWxsKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5tYXhZYXcgPSBvcHRpb25zLm1heFlhdzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMubWF4WWF3ID0gTWF0aC5Q
STsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLm1pbllhdyAhPSBudWxs
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5taW5ZYXcgPSBvcHRpb25zLm1pbllhdzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMubWluWWF3
ID0gLU1hdGguUEk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3B0aW9ucy5tYXhQ
aXRjaCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhpcy5tYXhQaXRjaCA9IG9wdGlvbnMu
bWF4UGl0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLm1heFBpdGNoID0gTWF0aC5QSTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChvcHRpb25zLm1pblBpdGNoICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm1p
blBpdGNoID0gb3B0aW9ucy5taW5QaXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHRoaXMubWluUGl0Y2ggPSAtTWF0aC5QSTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnNsZXJwQW1vdW50ICE9IG51bGwpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLnNsZXJwQW1vdW50ID0gb3B0aW9ucy5zbGVycEFtb3VudDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnVwQXhpcyAhPSBudWxsKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy51cEF4aXMgPSBvcHRpb25zLnVwQXhpczsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnVwQXhpc1NwYWNlICE9IG51bGwpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLnVwQXhpc1NwYWNlID0gb3B0aW9ucy51cEF4aXNTcGFjZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnlhd0F4aXMgIT0gbnVsbCB8fCBvcHRp
b25zLnBpdGNoQXhpcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdmFyIG5ld1lhd0F4aXMg
PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkF4aXMiXS5Z
OworICAgICAgICAgICAgICAgIHZhciBuZXdQaXRjaEF4aXMgPSBfTWF0aHNfbWF0aF9heGlzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkF4aXMiXS5YOworICAgICAgICAgICAgICAgIGlm
IChvcHRpb25zLnlhd0F4aXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBuZXdZYXdB
eGlzID0gb3B0aW9ucy55YXdBeGlzLmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgIG5ld1lh
d0F4aXMubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChvcHRpb25zLnBpdGNoQXhpcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld1Bp
dGNoQXhpcyA9IG9wdGlvbnMucGl0Y2hBeGlzLmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAg
IG5ld1BpdGNoQXhpcy5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgdmFyIG5ld1JvbGxBeGlzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Dcm9zcyhuZXdQaXRjaEF4aXMsIG5ld1lhd0F4aXMp
OworICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybVlhd1BpdGNoID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLklkZW50aXR5KCk7
CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk1hdHJpeCJdLkZyb21YWVpBeGVzVG9SZWYobmV3UGl0Y2hBeGlzLCBuZXdZYXdB
eGlzLCBuZXdSb2xsQXhpcywgdGhpcy5fdHJhbnNmb3JtWWF3UGl0Y2gpOworICAgICAgICAgICAg
ICAgIHRoaXMuX3RyYW5zZm9ybVlhd1BpdGNoSW52ID0gdGhpcy5fdHJhbnNmb3JtWWF3UGl0Y2gu
Y2xvbmUoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1ZYXdQaXRjaC5pbnZlcnQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWJvbmUuZ2V0UGFyZW50
KCkgJiYgdGhpcy51cEF4aXNTcGFjZSA9PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlNwYWNlIl0uQk9ORSkgeworICAgICAgICAgICAgdGhpcy51cEF4aXNT
cGFjZSA9IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU3Bh
Y2UiXS5MT0NBTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
Qm9uZUxvb2tDb250cm9sbGVyLnByb3RvdHlwZSwgIm1pbllhdyIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgbWluaW11bSB5YXcgYW5nbGUgdGhhdCB0aGUgYm9u
ZSBjYW4gbG9vayB0bworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fbWluWWF3OworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbWluWWF3ID0gdmFsdWU7Cisg
ICAgICAgICAgICB0aGlzLl9taW5ZYXdTaW4gPSBNYXRoLnNpbih2YWx1ZSk7CisgICAgICAgICAg
ICB0aGlzLl9taW5ZYXdDb3MgPSBNYXRoLmNvcyh2YWx1ZSk7CisgICAgICAgICAgICBpZiAodGhp
cy5fbWF4WWF3ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9taWRZYXdDb25zdHJh
aW50ID0gdGhpcy5fZ2V0QW5nbGVEaWZmKHRoaXMuX21pbllhdywgdGhpcy5fbWF4WWF3KSAqIC41
ICsgdGhpcy5fbWluWWF3OworICAgICAgICAgICAgICAgIHRoaXMuX3lhd1JhbmdlID0gdGhpcy5f
bWF4WWF3IC0gdGhpcy5fbWluWWF3OworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm9uZUxvb2tDb250cm9sbGVyLnByb3RvdHlwZSwg
Im1heFlhdyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgbWF4
aW11bSB5YXcgYW5nbGUgdGhhdCB0aGUgYm9uZSBjYW4gbG9vayB0bworICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4WWF3
OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAg
ICAgdGhpcy5fbWF4WWF3ID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9tYXhZYXdTaW4gPSBN
YXRoLnNpbih2YWx1ZSk7CisgICAgICAgICAgICB0aGlzLl9tYXhZYXdDb3MgPSBNYXRoLmNvcyh2
YWx1ZSk7CisgICAgICAgICAgICBpZiAodGhpcy5fbWluWWF3ICE9IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9taWRZYXdDb25zdHJhaW50ID0gdGhpcy5fZ2V0QW5nbGVEaWZmKHRoaXMu
X21pbllhdywgdGhpcy5fbWF4WWF3KSAqIC41ICsgdGhpcy5fbWluWWF3OworICAgICAgICAgICAg
ICAgIHRoaXMuX3lhd1JhbmdlID0gdGhpcy5fbWF4WWF3IC0gdGhpcy5fbWluWWF3OworICAgICAg
ICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm9u
ZUxvb2tDb250cm9sbGVyLnByb3RvdHlwZSwgIm1pblBpdGNoIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBtaW5pbXVtIHBpdGNoIGFuZ2xlIHRoYXQgdGhlIGJv
bmUgY2FuIGxvb2sgdG8KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21pblBpdGNoOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbWluUGl0Y2ggPSB2YWx1
ZTsKKyAgICAgICAgICAgIHRoaXMuX21pblBpdGNoVGFuID0gTWF0aC50YW4odmFsdWUpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm9uZUxvb2tDb250cm9s
bGVyLnByb3RvdHlwZSwgIm1heFBpdGNoIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBvciBzZXRzIHRoZSBtYXhpbXVtIHBpdGNoIGFuZ2xlIHRoYXQgdGhlIGJvbmUgY2FuIGxvb2sg
dG8KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX21heFBpdGNoOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbWF4UGl0Y2ggPSB2YWx1ZTsKKyAgICAgICAg
ICAgIHRoaXMuX21heFBpdGNoVGFuID0gTWF0aC50YW4odmFsdWUpOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGJvbmUgdG8gbG9vayBhdCB0aGUgdGFyZ2V0
LiAgVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGUgc2NlbmUgaXMgcmVuZGVyZWQgKHVz
ZSBzY2VuZS5yZWdpc3RlckJlZm9yZVJlbmRlcigpKQorICAgICAqLworICAgIEJvbmVMb29rQ29u
dHJvbGxlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvL3NraXAg
dGhlIGZpcnN0IGZyYW1lIHdoZW4gc2xlcnBpbmcgc28gdGhhdCB0aGUgbWVzaCByb3RhdGlvbiBp
cyBjb3JyZWN0CisgICAgICAgIGlmICh0aGlzLnNsZXJwQW1vdW50IDwgMSAmJiAhdGhpcy5fZmly
c3RGcmFtZVNraXBwZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2ZpcnN0RnJhbWVTa2lwcGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgYm9uZSA9
IHRoaXMuYm9uZTsKKyAgICAgICAgdmFyIGJvbmVQb3MgPSBCb25lTG9va0NvbnRyb2xsZXIuX3Rt
cFZlY3NbMF07CisgICAgICAgIGJvbmUuZ2V0QWJzb2x1dGVQb3NpdGlvblRvUmVmKHRoaXMubWVz
aCwgYm9uZVBvcyk7CisgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDsKKyAgICAgICAg
dmFyIF90bXBNYXQxID0gQm9uZUxvb2tDb250cm9sbGVyLl90bXBNYXRzWzBdOworICAgICAgICB2
YXIgX3RtcE1hdDIgPSBCb25lTG9va0NvbnRyb2xsZXIuX3RtcE1hdHNbMV07CisgICAgICAgIHZh
ciBtZXNoID0gdGhpcy5tZXNoOworICAgICAgICB2YXIgcGFyZW50Qm9uZSA9IGJvbmUuZ2V0UGFy
ZW50KCk7CisgICAgICAgIHZhciB1cEF4aXMgPSBCb25lTG9va0NvbnRyb2xsZXIuX3RtcFZlY3Nb
MV07CisgICAgICAgIHVwQXhpcy5jb3B5RnJvbSh0aGlzLnVwQXhpcyk7CisgICAgICAgIGlmICh0
aGlzLnVwQXhpc1NwYWNlID09IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siU3BhY2UiXS5CT05FICYmIHBhcmVudEJvbmUpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl90cmFuc2Zvcm1ZYXdQaXRjaCkgeworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29v
cmRpbmF0ZXNUb1JlZih1cEF4aXMsIHRoaXMuX3RyYW5zZm9ybVlhd1BpdGNoSW52LCB1cEF4aXMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50Qm9uZS5nZXREaXJlY3Rpb25Ub1Jl
Zih1cEF4aXMsIHRoaXMubWVzaCwgdXBBeGlzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
ICh0aGlzLnVwQXhpc1NwYWNlID09IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siU3BhY2UiXS5MT0NBTCkgeworICAgICAgICAgICAgbWVzaC5nZXREaXJlY3Rp
b25Ub1JlZih1cEF4aXMsIHVwQXhpcyk7CisgICAgICAgICAgICBpZiAobWVzaC5zY2FsaW5nLngg
IT0gMSB8fCBtZXNoLnNjYWxpbmcueSAhPSAxIHx8IG1lc2guc2NhbGluZy56ICE9IDEpIHsKKyAg
ICAgICAgICAgICAgICB1cEF4aXMubm9ybWFsaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGNoZWNrWWF3ID0gZmFsc2U7CisgICAgICAgIHZhciBjaGVja1BpdGNo
ID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlzLl9tYXhZYXcgIT0gTWF0aC5QSSB8fCB0aGlzLl9t
aW5ZYXcgIT0gLU1hdGguUEkpIHsKKyAgICAgICAgICAgIGNoZWNrWWF3ID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5fbWF4UGl0Y2ggIT0gTWF0aC5QSSB8fCB0aGlzLl9taW5Q
aXRjaCAhPSAtTWF0aC5QSSkgeworICAgICAgICAgICAgY2hlY2tQaXRjaCA9IHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNoZWNrWWF3IHx8IGNoZWNrUGl0Y2gpIHsKKyAgICAgICAgICAg
IHZhciBzcGFjZU1hdCA9IEJvbmVMb29rQ29udHJvbGxlci5fdG1wTWF0c1syXTsKKyAgICAgICAg
ICAgIHZhciBzcGFjZU1hdEludiA9IEJvbmVMb29rQ29udHJvbGxlci5fdG1wTWF0c1szXTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLnVwQXhpc1NwYWNlID09IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siU3BhY2UiXS5CT05FICYmIHVwQXhpcy55ID09IDEgJiYg
cGFyZW50Qm9uZSkgeworICAgICAgICAgICAgICAgIHBhcmVudEJvbmUuZ2V0Um90YXRpb25NYXRy
aXhUb1JlZihfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNw
YWNlIl0uV09STEQsIHRoaXMubWVzaCwgc3BhY2VNYXQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAodGhpcy51cEF4aXNTcGFjZSA9PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNwYWNlIl0uTE9DQUwgJiYgdXBBeGlzLnkgPT0gMSAm
JiAhcGFyZW50Qm9uZSkgeworICAgICAgICAgICAgICAgIHNwYWNlTWF0LmNvcHlGcm9tKG1lc2gu
Z2V0V29ybGRNYXRyaXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB2YXIgZm9yd2FyZEF4aXMgPSBCb25lTG9va0NvbnRyb2xsZXIuX3RtcFZl
Y3NbMl07CisgICAgICAgICAgICAgICAgZm9yd2FyZEF4aXMuY29weUZyb20odGhpcy5fZm93YXJk
QXhpcyk7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RyYW5zZm9ybVlhd1BpdGNoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihmb3J3YXJkQXhp
cywgdGhpcy5fdHJhbnNmb3JtWWF3UGl0Y2hJbnYsIGZvcndhcmRBeGlzKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudEJvbmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyZW50Qm9uZS5nZXREaXJlY3Rpb25Ub1JlZihmb3J3YXJkQXhpcywgdGhpcy5tZXNo
LCBmb3J3YXJkQXhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBtZXNoLmdldERpcmVjdGlvblRvUmVmKGZvcndhcmRBeGlz
LCBmb3J3YXJkQXhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBy
aWdodEF4aXMgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siVmVjdG9yMyJdLkNyb3NzKHVwQXhpcywgZm9yd2FyZEF4aXMpOworICAgICAgICAgICAgICAg
IHJpZ2h0QXhpcy5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICB2YXIgZm9yd2FyZEF4aXMg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9y
MyJdLkNyb3NzKHJpZ2h0QXhpcywgdXBBeGlzKTsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uRnJvbVhZWkF4
ZXNUb1JlZihyaWdodEF4aXMsIHVwQXhpcywgZm9yd2FyZEF4aXMsIHNwYWNlTWF0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHNwYWNlTWF0LmludmVydFRvUmVmKHNwYWNlTWF0SW52KTsK
KyAgICAgICAgICAgIHZhciB4emxlbiA9IG51bGw7CisgICAgICAgICAgICBpZiAoY2hlY2tQaXRj
aCkgeworICAgICAgICAgICAgICAgIHZhciBsb2NhbFRhcmdldCA9IEJvbmVMb29rQ29udHJvbGxl
ci5fdG1wVmVjc1szXTsKKyAgICAgICAgICAgICAgICB0YXJnZXQuc3VidHJhY3RUb1JlZihib25l
UG9zLCBsb2NhbFRhcmdldCk7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRl
c1RvUmVmKGxvY2FsVGFyZ2V0LCBzcGFjZU1hdEludiwgbG9jYWxUYXJnZXQpOworICAgICAgICAg
ICAgICAgIHh6bGVuID0gTWF0aC5zcXJ0KGxvY2FsVGFyZ2V0LnggKiBsb2NhbFRhcmdldC54ICsg
bG9jYWxUYXJnZXQueiAqIGxvY2FsVGFyZ2V0LnopOworICAgICAgICAgICAgICAgIHZhciBwaXRj
aCA9IE1hdGguYXRhbjIobG9jYWxUYXJnZXQueSwgeHpsZW4pOworICAgICAgICAgICAgICAgIHZh
ciBuZXdQaXRjaCA9IHBpdGNoOworICAgICAgICAgICAgICAgIGlmIChwaXRjaCA+IHRoaXMuX21h
eFBpdGNoKSB7CisgICAgICAgICAgICAgICAgICAgIGxvY2FsVGFyZ2V0LnkgPSB0aGlzLl9tYXhQ
aXRjaFRhbiAqIHh6bGVuOworICAgICAgICAgICAgICAgICAgICBuZXdQaXRjaCA9IHRoaXMuX21h
eFBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwaXRj
aCA8IHRoaXMuX21pblBpdGNoKSB7CisgICAgICAgICAgICAgICAgICAgIGxvY2FsVGFyZ2V0Lnkg
PSB0aGlzLl9taW5QaXRjaFRhbiAqIHh6bGVuOworICAgICAgICAgICAgICAgICAgICBuZXdQaXRj
aCA9IHRoaXMuX21pblBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAocGl0Y2ggIT0gbmV3UGl0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1D
b29yZGluYXRlc1RvUmVmKGxvY2FsVGFyZ2V0LCBzcGFjZU1hdCwgbG9jYWxUYXJnZXQpOworICAg
ICAgICAgICAgICAgICAgICBsb2NhbFRhcmdldC5hZGRJblBsYWNlKGJvbmVQb3MpOworICAgICAg
ICAgICAgICAgICAgICB0YXJnZXQgPSBsb2NhbFRhcmdldDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hlY2tZYXcpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgbG9jYWxUYXJnZXQgPSBCb25lTG9va0NvbnRyb2xsZXIuX3RtcFZlY3NbNF07CisgICAg
ICAgICAgICAgICAgdGFyZ2V0LnN1YnRyYWN0VG9SZWYoYm9uZVBvcywgbG9jYWxUYXJnZXQpOwor
ICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihsb2NhbFRhcmdldCwg
c3BhY2VNYXRJbnYsIGxvY2FsVGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB2YXIgeWF3ID0gTWF0
aC5hdGFuMihsb2NhbFRhcmdldC54LCBsb2NhbFRhcmdldC56KTsKKyAgICAgICAgICAgICAgICB2
YXIgbmV3WWF3ID0geWF3OworICAgICAgICAgICAgICAgIGlmICh5YXcgPiB0aGlzLl9tYXhZYXcg
fHwgeWF3IDwgdGhpcy5fbWluWWF3KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4emxlbiA9
PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4emxlbiA9IE1hdGguc3FydChsb2Nh
bFRhcmdldC54ICogbG9jYWxUYXJnZXQueCArIGxvY2FsVGFyZ2V0LnogKiBsb2NhbFRhcmdldC56
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5f
eWF3UmFuZ2UgPiBNYXRoLlBJKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5f
aXNBbmdsZUJldHdlZW4oeWF3LCB0aGlzLl9tYXhZYXcsIHRoaXMuX21pZFlhd0NvbnN0cmFpbnQp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxUYXJnZXQueiA9IHRoaXMuX21h
eFlhd0NvcyAqIHh6bGVuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsVGFyZ2V0
LnggPSB0aGlzLl9tYXhZYXdTaW4gKiB4emxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdZYXcgPSB0aGlzLl9tYXhZYXc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9pc0FuZ2xlQmV0d2Vlbih5YXcsIHRo
aXMuX21pZFlhd0NvbnN0cmFpbnQsIHRoaXMuX21pbllhdykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhbFRhcmdldC56ID0gdGhpcy5fbWluWWF3Q29zICogeHpsZW47CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxUYXJnZXQueCA9IHRoaXMuX21pbllhd1NpbiAq
IHh6bGVuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1lhdyA9IHRoaXMuX21pbllh
dzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5YXcg
PiB0aGlzLl9tYXhZYXcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFRhcmdl
dC56ID0gdGhpcy5fbWF4WWF3Q29zICogeHpsZW47CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9jYWxUYXJnZXQueCA9IHRoaXMuX21heFlhd1NpbiAqIHh6bGVuOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld1lhdyA9IHRoaXMuX21heFlhdzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHlhdyA8IHRoaXMuX21p
bllhdykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsVGFyZ2V0LnogPSB0aGlz
Ll9taW5ZYXdDb3MgKiB4emxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFRh
cmdldC54ID0gdGhpcy5fbWluWWF3U2luICogeHpsZW47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3WWF3ID0gdGhpcy5fbWluWWF3OworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9zbGVycGluZyAmJiB0aGlzLl95YXdSYW5nZSA+IE1hdGguUEkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy9hcmUgd2UgZ29pbmcgdG8gYmUgY3Jvc3NpbmcgaW50byB0aGUgbWlu
L21heCByZWdpb24/CisgICAgICAgICAgICAgICAgICAgIHZhciBib25lRndkID0gQm9uZUxvb2tD
b250cm9sbGVyLl90bXBWZWNzWzhdOworICAgICAgICAgICAgICAgICAgICBib25lRndkLmNvcHlG
cm9tKF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQXhpcyJd
LlopOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhbnNmb3JtWWF3UGl0Y2gpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihib25l
RndkLCB0aGlzLl90cmFuc2Zvcm1ZYXdQaXRjaEludiwgYm9uZUZ3ZCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGJvbmVSb3RNYXQgPSBCb25lTG9va0Nv
bnRyb2xsZXIuX3RtcE1hdHNbNF07CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JvbmVRdWF0
LnRvUm90YXRpb25NYXRyaXgoYm9uZVJvdE1hdCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
bWVzaC5nZXRXb3JsZE1hdHJpeCgpLm11bHRpcGx5VG9SZWYoYm9uZVJvdE1hdCwgYm9uZVJvdE1h
dCk7CisgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihib25l
RndkLCBib25lUm90TWF0LCBib25lRndkKTsKKyAgICAgICAgICAgICAgICAgICAgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zv
cm1Db29yZGluYXRlc1RvUmVmKGJvbmVGd2QsIHNwYWNlTWF0SW52LCBib25lRndkKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGJvbmVZYXcgPSBNYXRoLmF0YW4yKGJvbmVGd2QueCwgYm9uZUZ3
ZC56KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFuZ0J0d1RhciA9IHRoaXMuX2dldEFuZ2xl
QmV0d2Vlbihib25lWWF3LCB5YXcpOworICAgICAgICAgICAgICAgICAgICB2YXIgYW5nQnR3TWlk
WWF3ID0gdGhpcy5fZ2V0QW5nbGVCZXR3ZWVuKGJvbmVZYXcsIHRoaXMuX21pZFlhd0NvbnN0cmFp
bnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoYW5nQnR3VGFyID4gYW5nQnR3TWlkWWF3KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHpsZW4gPT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHh6bGVuID0gTWF0aC5zcXJ0KGxvY2FsVGFyZ2V0LnggKiBsb2Nh
bFRhcmdldC54ICsgbG9jYWxUYXJnZXQueiAqIGxvY2FsVGFyZ2V0LnopOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFuZ0J0d01heCA9IHRo
aXMuX2dldEFuZ2xlQmV0d2Vlbihib25lWWF3LCB0aGlzLl9tYXhZYXcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGFuZ0J0d01pbiA9IHRoaXMuX2dldEFuZ2xlQmV0d2Vlbihib25lWWF3
LCB0aGlzLl9taW5ZYXcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuZ0J0d01pbiA8
IGFuZ0J0d01heCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1lhdyA9IGJvbmVZ
YXcgKyBNYXRoLlBJICogLjc1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsVGFy
Z2V0LnogPSBNYXRoLmNvcyhuZXdZYXcpICogeHpsZW47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYWxUYXJnZXQueCA9IE1hdGguc2luKG5ld1lhdykgKiB4emxlbjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld1lhdyA9IGJvbmVZYXcgLSBNYXRoLlBJICogLjc1Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsVGFyZ2V0LnogPSBNYXRoLmNvcyhuZXdZ
YXcpICogeHpsZW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxUYXJnZXQueCA9
IE1hdGguc2luKG5ld1lhdykgKiB4emxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoeWF3ICE9IG5ld1lhdykgeworICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3Jk
aW5hdGVzVG9SZWYobG9jYWxUYXJnZXQsIHNwYWNlTWF0LCBsb2NhbFRhcmdldCk7CisgICAgICAg
ICAgICAgICAgICAgIGxvY2FsVGFyZ2V0LmFkZEluUGxhY2UoYm9uZVBvcyk7CisgICAgICAgICAg
ICAgICAgICAgIHRhcmdldCA9IGxvY2FsVGFyZ2V0OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgemF4aXMgPSBCb25lTG9va0NvbnRyb2xs
ZXIuX3RtcFZlY3NbNV07CisgICAgICAgIHZhciB4YXhpcyA9IEJvbmVMb29rQ29udHJvbGxlci5f
dG1wVmVjc1s2XTsKKyAgICAgICAgdmFyIHlheGlzID0gQm9uZUxvb2tDb250cm9sbGVyLl90bXBW
ZWNzWzddOworICAgICAgICB2YXIgX3RtcFF1YXQgPSBCb25lTG9va0NvbnRyb2xsZXIuX3RtcFF1
YXQ7CisgICAgICAgIHRhcmdldC5zdWJ0cmFjdFRvUmVmKGJvbmVQb3MsIHpheGlzKTsKKyAgICAg
ICAgemF4aXMubm9ybWFsaXplKCk7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZih1cEF4aXMsIHpheGlz
LCB4YXhpcyk7CisgICAgICAgIHhheGlzLm5vcm1hbGl6ZSgpOworICAgICAgICBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzVG9S
ZWYoemF4aXMsIHhheGlzLCB5YXhpcyk7CisgICAgICAgIHlheGlzLm5vcm1hbGl6ZSgpOworICAg
ICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0
cml4Il0uRnJvbVhZWkF4ZXNUb1JlZih4YXhpcywgeWF4aXMsIHpheGlzLCBfdG1wTWF0MSk7Cisg
ICAgICAgIGlmICh4YXhpcy54ID09PSAwICYmIHhheGlzLnkgPT09IDAgJiYgeGF4aXMueiA9PT0g
MCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh5YXhpcy54
ID09PSAwICYmIHlheGlzLnkgPT09IDAgJiYgeWF4aXMueiA9PT0gMCkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh6YXhpcy54ID09PSAwICYmIHpheGlzLnkg
PT09IDAgJiYgemF4aXMueiA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGlmICh0aGlzLmFkanVzdFlhdyB8fCB0aGlzLmFkanVzdFBpdGNoIHx8IHRoaXMu
YWRqdXN0Um9sbCkgeworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYodGhp
cy5hZGp1c3RZYXcsIHRoaXMuYWRqdXN0UGl0Y2gsIHRoaXMuYWRqdXN0Um9sbCwgX3RtcE1hdDIp
OworICAgICAgICAgICAgX3RtcE1hdDIubXVsdGlwbHlUb1JlZihfdG1wTWF0MSwgX3RtcE1hdDEp
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnNsZXJwQW1vdW50IDwgMSkgeworICAgICAg
ICAgICAgaWYgKCF0aGlzLl9zbGVycGluZykgeworICAgICAgICAgICAgICAgIHRoaXMuYm9uZS5n
ZXRSb3RhdGlvblF1YXRlcm5pb25Ub1JlZihfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlNwYWNlIl0uV09STEQsIHRoaXMubWVzaCwgdGhpcy5fYm9uZVF1YXQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX3RyYW5zZm9ybVlhd1BpdGNo
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtWWF3UGl0Y2gubXVsdGlwbHlUb1Jl
ZihfdG1wTWF0MSwgX3RtcE1hdDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlF1YXRlcm5pb24iXS5G
cm9tUm90YXRpb25NYXRyaXhUb1JlZihfdG1wTWF0MSwgX3RtcFF1YXQpOworICAgICAgICAgICAg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlF1YXRlcm5p
b24iXS5TbGVycFRvUmVmKHRoaXMuX2JvbmVRdWF0LCBfdG1wUXVhdCwgdGhpcy5zbGVycEFtb3Vu
dCwgdGhpcy5fYm9uZVF1YXQpOworICAgICAgICAgICAgdGhpcy5ib25lLnNldFJvdGF0aW9uUXVh
dGVybmlvbih0aGlzLl9ib25lUXVhdCwgX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJTcGFjZSJdLldPUkxELCB0aGlzLm1lc2gpOworICAgICAgICAgICAgdGhp
cy5fc2xlcnBpbmcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX3RyYW5zZm9ybVlhd1BpdGNoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
dHJhbnNmb3JtWWF3UGl0Y2gubXVsdGlwbHlUb1JlZihfdG1wTWF0MSwgX3RtcE1hdDEpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5ib25lLnNldFJvdGF0aW9uTWF0cml4KF90bXBN
YXQxLCBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNwYWNl
Il0uV09STEQsIHRoaXMubWVzaCk7CisgICAgICAgICAgICB0aGlzLl9zbGVycGluZyA9IGZhbHNl
OworICAgICAgICB9CisgICAgfTsKKyAgICBCb25lTG9va0NvbnRyb2xsZXIucHJvdG90eXBlLl9n
ZXRBbmdsZURpZmYgPSBmdW5jdGlvbiAoYW5nMSwgYW5nMikgeworICAgICAgICB2YXIgYW5nRGlm
ZiA9IGFuZzIgLSBhbmcxOworICAgICAgICBhbmdEaWZmICU9IE1hdGguUEkgKiAyOworICAgICAg
ICBpZiAoYW5nRGlmZiA+IE1hdGguUEkpIHsKKyAgICAgICAgICAgIGFuZ0RpZmYgLT0gTWF0aC5Q
SSAqIDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYW5nRGlmZiA8IC1NYXRoLlBJKSB7
CisgICAgICAgICAgICBhbmdEaWZmICs9IE1hdGguUEkgKiAyOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBhbmdEaWZmOworICAgIH07CisgICAgQm9uZUxvb2tDb250cm9sbGVyLnByb3RvdHlw
ZS5fZ2V0QW5nbGVCZXR3ZWVuID0gZnVuY3Rpb24gKGFuZzEsIGFuZzIpIHsKKyAgICAgICAgYW5n
MSAlPSAoMiAqIE1hdGguUEkpOworICAgICAgICBhbmcxID0gKGFuZzEgPCAwKSA/IGFuZzEgKyAo
MiAqIE1hdGguUEkpIDogYW5nMTsKKyAgICAgICAgYW5nMiAlPSAoMiAqIE1hdGguUEkpOworICAg
ICAgICBhbmcyID0gKGFuZzIgPCAwKSA/IGFuZzIgKyAoMiAqIE1hdGguUEkpIDogYW5nMjsKKyAg
ICAgICAgdmFyIGFiID0gMDsKKyAgICAgICAgaWYgKGFuZzEgPCBhbmcyKSB7CisgICAgICAgICAg
ICBhYiA9IGFuZzIgLSBhbmcxOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgYWIgPSBhbmcxIC0gYW5nMjsKKyAgICAgICAgfQorICAgICAgICBpZiAoYWIgPiBNYXRoLlBJ
KSB7CisgICAgICAgICAgICBhYiA9IE1hdGguUEkgKiAyIC0gYWI7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGFiOworICAgIH07CisgICAgQm9uZUxvb2tDb250cm9sbGVyLnByb3RvdHlwZS5f
aXNBbmdsZUJldHdlZW4gPSBmdW5jdGlvbiAoYW5nLCBhbmcxLCBhbmcyKSB7CisgICAgICAgIGFu
ZyAlPSAoMiAqIE1hdGguUEkpOworICAgICAgICBhbmcgPSAoYW5nIDwgMCkgPyBhbmcgKyAoMiAq
IE1hdGguUEkpIDogYW5nOworICAgICAgICBhbmcxICU9ICgyICogTWF0aC5QSSk7CisgICAgICAg
IGFuZzEgPSAoYW5nMSA8IDApID8gYW5nMSArICgyICogTWF0aC5QSSkgOiBhbmcxOworICAgICAg
ICBhbmcyICU9ICgyICogTWF0aC5QSSk7CisgICAgICAgIGFuZzIgPSAoYW5nMiA8IDApID8gYW5n
MiArICgyICogTWF0aC5QSSkgOiBhbmcyOworICAgICAgICBpZiAoYW5nMSA8IGFuZzIpIHsKKyAg
ICAgICAgICAgIGlmIChhbmcgPiBhbmcxICYmIGFuZyA8IGFuZzIpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChhbmcgPiBhbmcyICYmIGFuZyA8IGFuZzEpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfTsKKyAgICBCb25lTG9va0NvbnRyb2xsZXIuX3RtcFZlY3MgPSBfTWlz
Y19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFycmF5VG9vbHMiXS5C
dWlsZEFycmF5KDEwLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVjdG9yMyJdLlplcm8pOworICAgIEJvbmVMb29rQ29udHJvbGxlci5fdG1wUXVhdCA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJu
aW9uIl0uSWRlbnRpdHkoKTsKKyAgICBCb25lTG9va0NvbnRyb2xsZXIuX3RtcE1hdHMgPSBfTWlz
Y19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFycmF5VG9vbHMiXS5C
dWlsZEFycmF5KDUsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJNYXRyaXgiXS5JZGVudGl0eSk7CisgICAgcmV0dXJuIEJvbmVMb29rQ29udHJvbGxlcjsK
K30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQm9uZXMvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Cb25lcy9pbmRleC50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQm9u
ZSwgQm9uZUlLQ29udHJvbGxlciwgQm9uZUxvb2tDb250cm9sbGVyLCBTa2VsZXRvbiAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JvbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYm9uZSAqLyAiLi9C
b25lcy9ib25lLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvbmUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9ib25lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJvbmUiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm9uZUlLQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ib25lSUtDb250cm9sbGVy
ICovICIuL0JvbmVzL2JvbmVJS0NvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm9u
ZUlLQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2JvbmVJS0NvbnRyb2xsZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQm9uZUlLQ29udHJvbGxlciJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ib25lTG9va0NvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYm9uZUxvb2tDb250cm9s
bGVyICovICIuL0JvbmVzL2JvbmVMb29rQ29udHJvbGxlci50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJCb25lTG9va0NvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ib25lTG9va0NvbnRy
b2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQm9uZUxvb2tDb250cm9sbGVyIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NrZWxldG9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NrZWxldG9uICovICIu
L0JvbmVzL3NrZWxldG9uLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNrZWxldG9uIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfc2tlbGV0b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2tl
bGV0b24iXTsgfSk7CisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Cb25lcy9z
a2VsZXRvbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L0JvbmVzL3NrZWxldG9uLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBTa2VsZXRvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTa2VsZXRvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2tlbGV0b247IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ib25lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2JvbmUgKi8gIi4vQm9uZXMvYm9uZS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2Jz
ZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21h
dGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0
dXJlc19yYXdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmF3VGV4dHVyZSAqLyAiLi9NYXRl
cmlhbHMvVGV4dHVyZXMvcmF3VGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQW5pbWF0aW9ucy9hbmltYXRpb24gKi8gIi4vQW5pbWF0
aW9ucy9hbmltYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQW5pbWF0aW9u
c19hbmltYXRpb25SYW5nZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vQW5pbWF0aW9ucy9hbmltYXRpb25SYW5nZSAqLyAiLi9BbmltYXRp
b25zL2FuaW1hdGlvblJhbmdlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2lu
ZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvZW5naW5lU3RvcmUgKi8gIi4vRW5naW5lcy9lbmdpbmVT
dG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
RW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9n
Z2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVlcENvcGllcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlz
Yy9kZWVwQ29waWVyICovICIuL01pc2MvZGVlcENvcGllci50cyIpOworCisKKworCisKKworCisK
KworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gaGFuZGxlIHNraW5uaW5nIGFuaW1hdGlvbnMKKyAq
IEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2JvbmVzX2Fu
ZF9za2VsZXRvbnMKKyAqLwordmFyIFNrZWxldG9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgc2tlbGV0b24KKyAgICAgKiBAcGFy
YW0gbmFtZSBkZWZpbmVzIHRoZSBza2VsZXRvbiBuYW1lCisgICAgICogQHBhcmFtIGlkIGRlZmlu
ZXMgdGhlIHNrZWxldG9uIElkCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rp
bmcgc2NlbmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTa2VsZXRvbigKKyAgICAvKiogZGVmaW5l
cyB0aGUgc2tlbGV0b24gbmFtZSAqLworICAgIG5hbWUsIAorICAgIC8qKiBkZWZpbmVzIHRoZSBz
a2VsZXRvbiBJZCAqLworICAgIGlkLCBzY2VuZSkgeworICAgICAgICB0aGlzLm5hbWUgPSBuYW1l
OworICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVz
IHRoZSBsaXN0IG9mIGNoaWxkIGJvbmVzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmJvbmVz
ID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIGEgYm9vbGVh
biBpbmRpY2F0aW5nIGlmIHRoZSByb290IG1hdHJpeCBpcyBwcm92aWRlZCBieSBtZXNoZXMgb3Ig
YnkgdGhlIGN1cnJlbnQgc2tlbGV0b24gKHRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUpCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLm5lZWRJbml0aWFsU2tpbk1hdHJpeCA9IGZhbHNlOworICAg
ICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBhIG1lc2ggdGhhdCBvdmVycmlkZSB0aGUgbWF0
cml4IHVzZWQgdG8gZ2V0IHRoZSB3b3JsZCBtYXRyaXggKG51bGwgYnkgZGVmYXVsdCkuCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLm92ZXJyaWRlTWVzaCA9IG51bGw7CisgICAgICAgIHRoaXMu
X2lzRGlydHkgPSB0cnVlOworICAgICAgICB0aGlzLl9tZXNoZXNXaXRoUG9zZU1hdHJpeCA9IG5l
dyBBcnJheSgpOworICAgICAgICB0aGlzLl9pZGVudGl0eSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNYXRyaXgiXS5JZGVudGl0eSgpOworICAgICAg
ICB0aGlzLl9yYW5nZXMgPSB7fTsKKyAgICAgICAgdGhpcy5fbGFzdEFic29sdXRlVHJhbnNmb3Jt
c1VwZGF0ZUlkID0gLTE7CisgICAgICAgIHRoaXMuX2NhblVzZVRleHR1cmVGb3JCb25lcyA9IGZh
bHNlOworICAgICAgICB0aGlzLl91bmlxdWVJZCA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIHRoaXMuX251bUJvbmVzV2l0aExpbmtlZFRyYW5zZm9ybU5vZGUgPSAwOworICAg
ICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9oYXNXYWl0aW5nRGF0YSA9IG51bGw7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIHNrZWxldG9uIHNob3Vs
ZCBiZSBzZXJpYWxpemVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLmRvTm90U2VyaWFsaXpl
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3VzZVRleHR1cmVUb1N0b3JlQm9uZU1hdHJpY2VzID0g
dHJ1ZTsKKyAgICAgICAgdGhpcy5fYW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlID0gbnVsbDsK
KyAgICAgICAgLy8gRXZlbnRzCisgICAgICAgIC8qKgorICAgICAgICAgKiBBbiBvYnNlcnZhYmxl
IHRyaWdnZXJlZCBiZWZvcmUgY29tcHV0aW5nIHRoZSBza2VsZXRvbidzIG1hdHJpY2VzCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLm9uQmVmb3JlQ29tcHV0ZU9ic2VydmFibGUgPSBuZXcgX01p
c2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0o
KTsKKyAgICAgICAgdGhpcy5ib25lcyA9IFtdOworICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5l
IHx8IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkVu
Z2luZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZTsKKyAgICAgICAgdGhpcy5fdW5pcXVlSWQgPSB0
aGlzLl9zY2VuZS5nZXRVbmlxdWVJZCgpOworICAgICAgICB0aGlzLl9zY2VuZS5hZGRTa2VsZXRv
bih0aGlzKTsKKyAgICAgICAgLy9tYWtlIHN1cmUgaXQgd2lsbCByZWNhbGN1bGF0ZSB0aGUgbWF0
cml4IG5leHQgdGltZSBwcmVwYXJlIGlzIGNhbGxlZC4KKyAgICAgICAgdGhpcy5faXNEaXJ0eSA9
IHRydWU7CisgICAgICAgIHZhciBlbmdpbmVDYXBzID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCku
Z2V0Q2FwcygpOworICAgICAgICB0aGlzLl9jYW5Vc2VUZXh0dXJlRm9yQm9uZXMgPSBlbmdpbmVD
YXBzLnRleHR1cmVGbG9hdCAmJiBlbmdpbmVDYXBzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRz
ID4gMDsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNrZWxldG9uLnByb3RvdHlw
ZSwgInVzZVRleHR1cmVUb1N0b3JlQm9uZU1hdHJpY2VzIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgYm9uZSBtYXRyaWNl
cyBzaG91bGQgYmUgc3RvcmVkIGFzIGEgdGV4dHVyZSBpbnN0ZWFkIG9mIHVzaW5nIHNoYWRlciB1
bmlmb3JtcyAoZGVmYXVsdCBpcyB0cnVlKS4KKyAgICAgICAgICogUGxlYXNlIG5vdGUgdGhhdCB0
aGlzIG9wdGlvbiBpcyBub3QgYXZhaWxhYmxlIGlmIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzdXBw
b3J0IGl0CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl91c2VUZXh0dXJlVG9TdG9yZUJvbmVNYXRyaWNlczsKKyAgICAgICAg
fSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3Vz
ZVRleHR1cmVUb1N0b3JlQm9uZU1hdHJpY2VzID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9t
YXJrQXNEaXJ0eSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoU2tlbGV0b24ucHJvdG90eXBlLCAiYW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBhbmltYXRpb24gcHJvcGVy
dGllcyBvdmVycmlkZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBpZiAoIXRoaXMuX2FuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZS5hbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJp
ZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5pbWF0aW9uUHJv
cGVydGllc092ZXJyaWRlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlID0gdmFs
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTa2VsZXRv
bi5wcm90b3R5cGUsICJpc1VzaW5nVGV4dHVyZUZvck1hdHJpY2VzIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBza2VsZXRvbiBl
ZmZlY3RpdmVseSBzdG9yZXMgbWF0cmljZXMgaW50byBhIHRleHR1cmUKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlVGV4
dHVyZVRvU3RvcmVCb25lTWF0cmljZXMgJiYgdGhpcy5fY2FuVXNlVGV4dHVyZUZvckJvbmVzOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2tlbGV0b24ucHJv
dG90eXBlLCAidW5pcXVlSWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB1
bmlxdWUgSUQgb2YgdGhpcyBza2VsZXRvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdW5pcXVlSWQ7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgb2JqZWN0IGNsYXNzIG5h
bWUuCisgICAgICogQHJldHVybiB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFNrZWxldG9u
LnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAi
U2tlbGV0b24iOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBhcnJheSBjb250
YWluaW5nIHRoZSByb290IGJvbmVzCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgY29udGFpbmlu
ZyB0aGUgcm9vdCBib25lcworICAgICAqLworICAgIFNrZWxldG9uLnByb3RvdHlwZS5nZXRDaGls
ZHJlbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYm9uZXMuZmlsdGVyKGZ1
bmN0aW9uIChiKSB7IHJldHVybiAhYi5nZXRQYXJlbnQoKTsgfSk7CisgICAgfTsKKyAgICAvLyBN
ZW1iZXJzCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGlzdCBvZiB0cmFuc2Zvcm0gbWF0cmlj
ZXMgdG8gc2VuZCB0byBzaGFkZXJzIChvbmUgbWF0cml4IHBlciBib25lKQorICAgICAqIEBwYXJh
bSBtZXNoIGRlZmluZXMgdGhlIG1lc2ggdG8gdXNlIHRvIGdldCB0aGUgcm9vdCBtYXRyaXggKGlm
IG5lZWRJbml0aWFsU2tpbk1hdHJpeCA9PT0gdHJ1ZSkKKyAgICAgKiBAcmV0dXJucyBhIEZsb2F0
MzJBcnJheSBjb250YWluaW5nIG1hdHJpY2VzIGRhdGEKKyAgICAgKi8KKyAgICBTa2VsZXRvbi5w
cm90b3R5cGUuZ2V0VHJhbnNmb3JtTWF0cmljZXMgPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAg
ICBpZiAodGhpcy5uZWVkSW5pdGlhbFNraW5NYXRyaXggJiYgbWVzaC5fYm9uZXNUcmFuc2Zvcm1N
YXRyaWNlcykgeworICAgICAgICAgICAgcmV0dXJuIG1lc2guX2JvbmVzVHJhbnNmb3JtTWF0cmlj
ZXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl90cmFuc2Zvcm1NYXRyaWNlcykgewor
ICAgICAgICAgICAgdGhpcy5wcmVwYXJlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXMuX3RyYW5zZm9ybU1hdHJpY2VzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
bGlzdCBvZiB0cmFuc2Zvcm0gbWF0cmljZXMgdG8gc2VuZCB0byBzaGFkZXJzIGluc2lkZSBhIHRl
eHR1cmUgKG9uZSBtYXRyaXggcGVyIGJvbmUpCisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5lcyB0
aGUgbWVzaCB0byB1c2UgdG8gZ2V0IHRoZSByb290IG1hdHJpeCAoaWYgbmVlZEluaXRpYWxTa2lu
TWF0cml4ID09PSB0cnVlKQorICAgICAqIEByZXR1cm5zIGEgcmF3IHRleHR1cmUgY29udGFpbmlu
ZyB0aGUgZGF0YQorICAgICAqLworICAgIFNrZWxldG9uLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1N
YXRyaXhUZXh0dXJlID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKHRoaXMubmVlZElu
aXRpYWxTa2luTWF0cml4ICYmIG1lc2guX3RyYW5zZm9ybU1hdHJpeFRleHR1cmUpIHsKKyAgICAg
ICAgICAgIHJldHVybiBtZXNoLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlOworICAgIH07CisgICAg
LyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVy
bnMgYSBzY2VuZSBvYmplY3QKKyAgICAgKi8KKyAgICBTa2VsZXRvbi5wcm90b3R5cGUuZ2V0U2Nl
bmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZTsKKyAgICB9Owor
ICAgIC8vIE1ldGhvZHMKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc3RyaW5nIHJlcHJlc2VudGlu
ZyB0aGUgY3VycmVudCBza2VsZXRvbiBkYXRhCisgICAgICogQHBhcmFtIGZ1bGxEZXRhaWxzIGRl
ZmluZXMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgd2Ugd2FudCBhIHZlcmJvc2UgdmVyc2lvbgor
ICAgICAqIEByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBza2VsZXRv
biBkYXRhCisgICAgICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rp
b24gKGZ1bGxEZXRhaWxzKSB7CisgICAgICAgIHZhciByZXQgPSAiTmFtZTogIiArIHRoaXMubmFt
ZSArICIsIG5Cb25lczogIiArIHRoaXMuYm9uZXMubGVuZ3RoOworICAgICAgICByZXQgKz0gIiwg
bkFuaW1hdGlvblJhbmdlczogIiArICh0aGlzLl9yYW5nZXMgPyBPYmplY3Qua2V5cyh0aGlzLl9y
YW5nZXMpLmxlbmd0aCA6ICJub25lIik7CisgICAgICAgIGlmIChmdWxsRGV0YWlscykgeworICAg
ICAgICAgICAgcmV0ICs9ICIsIFJhbmdlczogeyI7CisgICAgICAgICAgICB2YXIgZmlyc3QgPSB0
cnVlOworICAgICAgICAgICAgZm9yICh2YXIgbmFtZV8xIGluIHRoaXMuX3JhbmdlcykgeworICAg
ICAgICAgICAgICAgIGlmIChmaXJzdCkgeworICAgICAgICAgICAgICAgICAgICByZXQgKz0gIiwg
IjsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0ICs9IG5hbWVfMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldCArPSAifSI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9Owor
ICAgIC8qKgorICAgICogR2V0IGJvbmUncyBpbmRleCBzZWFyY2hpbmcgYnkgbmFtZQorICAgICog
QHBhcmFtIG5hbWUgZGVmaW5lcyBib25lJ3MgbmFtZSB0byBzZWFyY2ggZm9yCisgICAgKiBAcmV0
dXJuIHRoZSBpbmRpY2Ugb2YgdGhlIGJvbmUuIFJldHVybnMgLTEgaWYgbm90IGZvdW5kCisgICAg
Ki8KKyAgICBTa2VsZXRvbi5wcm90b3R5cGUuZ2V0Qm9uZUluZGV4QnlOYW1lID0gZnVuY3Rpb24g
KG5hbWUpIHsKKyAgICAgICAgZm9yICh2YXIgYm9uZUluZGV4ID0gMCwgY2FjaGUgPSB0aGlzLmJv
bmVzLmxlbmd0aDsgYm9uZUluZGV4IDwgY2FjaGU7IGJvbmVJbmRleCsrKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5ib25lc1tib25lSW5kZXhdLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYm9uZUluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiAtMTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXIgYSBuZXcgYW5pbWF0
aW9uIHJhbmdlCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgcmFu
Z2UKKyAgICAgKiBAcGFyYW0gZnJvbSBkZWZpbmVzIHRoZSBzdGFydCBrZXkKKyAgICAgKiBAcGFy
YW0gdG8gZGVmaW5lcyB0aGUgZW5kIGtleQorICAgICAqLworICAgIFNrZWxldG9uLnByb3RvdHlw
ZS5jcmVhdGVBbmltYXRpb25SYW5nZSA9IGZ1bmN0aW9uIChuYW1lLCBmcm9tLCB0bykgeworICAg
ICAgICAvLyBjaGVjayBuYW1lIG5vdCBhbHJlYWR5IGluIHVzZQorICAgICAgICBpZiAoIXRoaXMu
X3Jhbmdlc1tuYW1lXSkgeworICAgICAgICAgICAgdGhpcy5fcmFuZ2VzW25hbWVdID0gbmV3IF9B
bmltYXRpb25zX2FuaW1hdGlvblJhbmdlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkFu
aW1hdGlvblJhbmdlIl0obmFtZSwgZnJvbSwgdG8pOworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDAsIG5Cb25lcyA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgbkJvbmVzOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy5ib25lc1tpXS5hbmltYXRpb25zWzBdKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuYm9uZXNbaV0uYW5pbWF0aW9uc1swXS5jcmVhdGVSYW5nZShuYW1lLCBm
cm9tLCB0byk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWxldGUgYSBzcGVjaWZpYyBhbmltYXRpb24gcmFuZ2UK
KyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSByYW5nZQorICAgICAq
IEBwYXJhbSBkZWxldGVGcmFtZXMgZGVmaW5lcyBpZiBmcmFtZXMgbXVzdCBiZSByZW1vdmVkIGFz
IHdlbGwKKyAgICAgKi8KKyAgICBTa2VsZXRvbi5wcm90b3R5cGUuZGVsZXRlQW5pbWF0aW9uUmFu
Z2UgPSBmdW5jdGlvbiAobmFtZSwgZGVsZXRlRnJhbWVzKSB7CisgICAgICAgIGlmIChkZWxldGVG
cmFtZXMgPT09IHZvaWQgMCkgeyBkZWxldGVGcmFtZXMgPSB0cnVlOyB9CisgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBuQm9uZXMgPSB0aGlzLmJvbmVzLmxlbmd0aDsgaSA8IG5Cb25lczsgaSsrKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5ib25lc1tpXS5hbmltYXRpb25zWzBdKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5ib25lc1tpXS5hbmltYXRpb25zWzBdLmRlbGV0ZVJhbmdlKG5hbWUsIGRl
bGV0ZUZyYW1lcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmFu
Z2VzW25hbWVdID0gbnVsbDsgLy8gc2FpZCBtdWNoIGZhc3RlciB0aGFuICdkZWxldGUgdGhpcy5f
cmFuZ2VbbmFtZV0nCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc3BlY2lmaWMgYW5p
bWF0aW9uIHJhbmdlCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUg
cmFuZ2UgdG8gbG9vayBmb3IKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVxdWVzdGVkIGFuaW1hdGlv
biByYW5nZSBvciBudWxsIGlmIG5vdCBmb3VuZAorICAgICAqLworICAgIFNrZWxldG9uLnByb3Rv
dHlwZS5nZXRBbmltYXRpb25SYW5nZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHJldHVy
biB0aGlzLl9yYW5nZXNbbmFtZV07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBs
aXN0IG9mIGFsbCBhbmltYXRpb24gcmFuZ2VzIGRlZmluZWQgb24gdGhpcyBza2VsZXRvbgorICAg
ICAqIEByZXR1cm5zIGFuIGFycmF5CisgICAgICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLmdl
dEFuaW1hdGlvblJhbmdlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGFuaW1hdGlvblJh
bmdlcyA9IFtdOworICAgICAgICB2YXIgbmFtZTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMu
X3JhbmdlcykgeworICAgICAgICAgICAgYW5pbWF0aW9uUmFuZ2VzLnB1c2godGhpcy5fcmFuZ2Vz
W25hbWVdKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYW5pbWF0aW9uUmFuZ2VzOworICAg
IH07CisgICAgLyoqCisgICAgICogQ29weSBhbmltYXRpb24gcmFuZ2UgZnJvbSBhIHNvdXJjZSBz
a2VsZXRvbi4KKyAgICAgKiBUaGlzIGlzIG5vdCBmb3IgYSBjb21wbGV0ZSByZXRhcmdldGluZywg
b25seSBiZXR3ZWVuIHZlcnkgc2ltaWxhciBza2VsZXRvbidzIHdpdGggb25seSBwb3NzaWJsZSBi
b25lIGxlbmd0aCBkaWZmZXJlbmNlcworICAgICAqIEBwYXJhbSBzb3VyY2UgZGVmaW5lcyB0aGUg
c291cmNlIHNrZWxldG9uCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0
aGUgcmFuZ2UgdG8gY29weQorICAgICAqIEBwYXJhbSByZXNjYWxlQXNSZXF1aXJlZCBkZWZpbmVz
IGlmIHJlc2NhbGluZyBtdXN0IGJlIGFwcGxpZWQgaWYgcmVxdWlyZWQKKyAgICAgKiBAcmV0dXJu
cyB0cnVlIGlmIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bAorICAgICAqLworICAgIFNrZWxldG9u
LnByb3RvdHlwZS5jb3B5QW5pbWF0aW9uUmFuZ2UgPSBmdW5jdGlvbiAoc291cmNlLCBuYW1lLCBy
ZXNjYWxlQXNSZXF1aXJlZCkgeworICAgICAgICBpZiAocmVzY2FsZUFzUmVxdWlyZWQgPT09IHZv
aWQgMCkgeyByZXNjYWxlQXNSZXF1aXJlZCA9IGZhbHNlOyB9CisgICAgICAgIGlmICh0aGlzLl9y
YW5nZXNbbmFtZV0gfHwgIXNvdXJjZS5nZXRBbmltYXRpb25SYW5nZShuYW1lKSkgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHZhciByZXQgPSB0cnVlOwor
ICAgICAgICB2YXIgZnJhbWVPZmZzZXQgPSB0aGlzLl9nZXRIaWdoZXN0QW5pbWF0aW9uRnJhbWUo
KSArIDE7CisgICAgICAgIC8vIG1ha2UgYSBkaWN0aW9uYXJ5IG9mIHNvdXJjZSBza2VsZXRvbidz
IGJvbmVzLCBzbyBleGFjdCBzYW1lIG9yZGVyIG9yIGRvdWJsZWx5IG5lc3RlZCBsb29wIGlzIG5v
dCByZXF1aXJlZAorICAgICAgICB2YXIgYm9uZURpY3QgPSB7fTsKKyAgICAgICAgdmFyIHNvdXJj
ZUJvbmVzID0gc291cmNlLmJvbmVzOworICAgICAgICB2YXIgbkJvbmVzOworICAgICAgICB2YXIg
aTsKKyAgICAgICAgZm9yIChpID0gMCwgbkJvbmVzID0gc291cmNlQm9uZXMubGVuZ3RoOyBpIDwg
bkJvbmVzOyBpKyspIHsKKyAgICAgICAgICAgIGJvbmVEaWN0W3NvdXJjZUJvbmVzW2ldLm5hbWVd
ID0gc291cmNlQm9uZXNbaV07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuYm9uZXMubGVu
Z3RoICE9PSBzb3VyY2VCb25lcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJMb2dnZXIiXS5XYXJuKCJjb3B5QW5pbWF0aW9u
UmFuZ2U6IHRoaXMgcmlnIGhhcyAiICsgdGhpcy5ib25lcy5sZW5ndGggKyAiIGJvbmVzLCB3aGls
ZSBzb3VyY2UgYXMgIiArIHNvdXJjZUJvbmVzLmxlbmd0aCk7CisgICAgICAgICAgICByZXQgPSBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2tlbERpbWVuc2lvbnNSYXRpbyA9IChyZXNj
YWxlQXNSZXF1aXJlZCAmJiB0aGlzLmRpbWVuc2lvbnNBdFJlc3QgJiYgc291cmNlLmRpbWVuc2lv
bnNBdFJlc3QpID8gdGhpcy5kaW1lbnNpb25zQXRSZXN0LmRpdmlkZShzb3VyY2UuZGltZW5zaW9u
c0F0UmVzdCkgOiBudWxsOworICAgICAgICBmb3IgKGkgPSAwLCBuQm9uZXMgPSB0aGlzLmJvbmVz
Lmxlbmd0aDsgaSA8IG5Cb25lczsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYm9uZU5hbWUgPSB0
aGlzLmJvbmVzW2ldLm5hbWU7CisgICAgICAgICAgICB2YXIgc291cmNlQm9uZSA9IGJvbmVEaWN0
W2JvbmVOYW1lXTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VCb25lKSB7CisgICAgICAgICAgICAg
ICAgcmV0ID0gcmV0ICYmIHRoaXMuYm9uZXNbaV0uY29weUFuaW1hdGlvblJhbmdlKHNvdXJjZUJv
bmUsIG5hbWUsIGZyYW1lT2Zmc2V0LCByZXNjYWxlQXNSZXF1aXJlZCwgc2tlbERpbWVuc2lvbnNS
YXRpbyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTG9nZ2VyIl0uV2Fy
bigiY29weUFuaW1hdGlvblJhbmdlOiBub3Qgc2FtZSByaWcsIG1pc3Npbmcgc291cmNlIGJvbmUg
IiArIGJvbmVOYW1lKTsKKyAgICAgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAvLyBkbyBub3QgY2FsbCBjcmVhdGVBbmltYXRpb25SYW5n
ZSgpLCBzaW5jZSBpdCBhbHNvIGlzIGRvbmUgdG8gYm9uZXMsIHdoaWNoIHdhcyBhbHJlYWR5IGRv
bmUKKyAgICAgICAgdmFyIHJhbmdlID0gc291cmNlLmdldEFuaW1hdGlvblJhbmdlKG5hbWUpOwor
ICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgIHRoaXMuX3Jhbmdlc1tuYW1lXSA9IG5l
dyBfQW5pbWF0aW9uc19hbmltYXRpb25SYW5nZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJBbmltYXRpb25SYW5nZSJdKG5hbWUsIHJhbmdlLmZyb20gKyBmcmFtZU9mZnNldCwgcmFuZ2Uu
dG8gKyBmcmFtZU9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEZvcmNlcyB0aGUgc2tlbGV0b24gdG8gZ28gdG8gcmVzdCBwb3Nl
CisgICAgICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLnJldHVyblRvUmVzdCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYm9uZXMubGVu
Z3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB0aGlzLmJvbmVzW2luZGV4XS5yZXR1cm5Ub1Jl
c3QoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgU2tlbGV0b24ucHJvdG90eXBlLl9nZXRIaWdo
ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciByZXQgPSAwOwor
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbkJvbmVzID0gdGhpcy5ib25lcy5sZW5ndGg7IGkgPCBu
Qm9uZXM7IGkrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuYm9uZXNbaV0uYW5pbWF0aW9uc1sw
XSkgeworICAgICAgICAgICAgICAgIHZhciBoaWdoZXN0ID0gdGhpcy5ib25lc1tpXS5hbmltYXRp
b25zWzBdLmdldEhpZ2hlc3RGcmFtZSgpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPCBoaWdo
ZXN0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IGhpZ2hlc3Q7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBCZWdpbiBhIHNwZWNpZmljIGFuaW1hdGlvbiByYW5nZQorICAg
ICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHJhbmdlIHRvIHN0YXJ0Cisg
ICAgICogQHBhcmFtIGxvb3AgZGVmaW5lcyBpZiBsb29waW5nIG11c3QgYmUgdHVybmVkIG9uIChm
YWxzZSBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBzcGVlZFJhdGlvIGRlZmluZXMgdGhlIHNw
ZWVkIHJhdGlvIHRvIGFwcGx5ICgxIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIG9uQW5pbWF0
aW9uRW5kIGRlZmluZXMgYSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIGFuaW1h
dGlvbiB3aWxsIGVuZAorICAgICAqIEByZXR1cm5zIGEgbmV3IGFuaW1hdGFibGUKKyAgICAgKi8K
KyAgICBTa2VsZXRvbi5wcm90b3R5cGUuYmVnaW5BbmltYXRpb24gPSBmdW5jdGlvbiAobmFtZSwg
bG9vcCwgc3BlZWRSYXRpbywgb25BbmltYXRpb25FbmQpIHsKKyAgICAgICAgdmFyIHJhbmdlID0g
dGhpcy5nZXRBbmltYXRpb25SYW5nZShuYW1lKTsKKyAgICAgICAgaWYgKCFyYW5nZSkgeworICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3Nj
ZW5lLmJlZ2luQW5pbWF0aW9uKHRoaXMsIHJhbmdlLmZyb20sIHJhbmdlLnRvLCBsb29wLCBzcGVl
ZFJhdGlvLCBvbkFuaW1hdGlvbkVuZCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAg
IFNrZWxldG9uLnByb3RvdHlwZS5fbWFya0FzRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX2lzRGlydHkgPSB0cnVlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBT
a2VsZXRvbi5wcm90b3R5cGUuX3JlZ2lzdGVyTWVzaFdpdGhQb3NlTWF0cml4ID0gZnVuY3Rpb24g
KG1lc2gpIHsKKyAgICAgICAgdGhpcy5fbWVzaGVzV2l0aFBvc2VNYXRyaXgucHVzaChtZXNoKTsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLl91bnJl
Z2lzdGVyTWVzaFdpdGhQb3NlTWF0cml4ID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgdmFy
IGluZGV4ID0gdGhpcy5fbWVzaGVzV2l0aFBvc2VNYXRyaXguaW5kZXhPZihtZXNoKTsKKyAgICAg
ICAgaWYgKGluZGV4ID4gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuX21lc2hlc1dpdGhQb3NlTWF0
cml4LnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICB9OworICAgIFNrZWxldG9uLnBy
b3RvdHlwZS5fY29tcHV0ZVRyYW5zZm9ybU1hdHJpY2VzID0gZnVuY3Rpb24gKHRhcmdldE1hdHJp
eCwgaW5pdGlhbFNraW5NYXRyaXgpIHsKKyAgICAgICAgdGhpcy5vbkJlZm9yZUNvbXB1dGVPYnNl
cnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAw
OyBpbmRleCA8IHRoaXMuYm9uZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIg
Ym9uZSA9IHRoaXMuYm9uZXNbaW5kZXhdOworICAgICAgICAgICAgYm9uZS5fY2hpbGRVcGRhdGVJ
ZCsrOworICAgICAgICAgICAgdmFyIHBhcmVudEJvbmUgPSBib25lLmdldFBhcmVudCgpOworICAg
ICAgICAgICAgaWYgKHBhcmVudEJvbmUpIHsKKyAgICAgICAgICAgICAgICBib25lLmdldExvY2Fs
TWF0cml4KCkubXVsdGlwbHlUb1JlZihwYXJlbnRCb25lLmdldFdvcmxkTWF0cml4KCksIGJvbmUu
Z2V0V29ybGRNYXRyaXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaW5pdGlhbFNraW5NYXRyaXgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYm9uZS5nZXRMb2NhbE1hdHJpeCgpLm11bHRpcGx5VG9SZWYoaW5pdGlhbFNraW5NYXRyaXgs
IGJvbmUuZ2V0V29ybGRNYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBib25lLmdldFdvcmxkTWF0cml4KCkuY29w
eUZyb20oYm9uZS5nZXRMb2NhbE1hdHJpeCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoYm9uZS5faW5kZXggIT09IC0xKSB7CisgICAgICAgICAg
ICAgICAgdmFyIG1hcHBlZEluZGV4ID0gYm9uZS5faW5kZXggPT09IG51bGwgPyBpbmRleCA6IGJv
bmUuX2luZGV4OworICAgICAgICAgICAgICAgIGJvbmUuZ2V0SW52ZXJ0ZWRBYnNvbHV0ZVRyYW5z
Zm9ybSgpLm11bHRpcGx5VG9BcnJheShib25lLmdldFdvcmxkTWF0cml4KCksIHRhcmdldE1hdHJp
eCwgbWFwcGVkSW5kZXggKiAxNik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5faWRlbnRpdHkuY29weVRvQXJyYXkodGFyZ2V0TWF0cml4LCB0aGlzLmJvbmVzLmxlbmd0
aCAqIDE2KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJ1aWxkIGFsbCByZXNvdXJjZXMgcmVx
dWlyZWQgdG8gcmVuZGVyIGEgc2tlbGV0b24KKyAgICAgKi8KKyAgICBTa2VsZXRvbi5wcm90b3R5
cGUucHJlcGFyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBsb2NhbCBt
YXRyaXggb2YgYm9uZXMgd2l0aCBsaW5rZWQgdHJhbnNmb3JtIG5vZGVzLgorICAgICAgICBpZiAo
dGhpcy5fbnVtQm9uZXNXaXRoTGlua2VkVHJhbnNmb3JtTm9kZSA+IDApIHsKKyAgICAgICAgICAg
IGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLmJvbmVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykg
eworICAgICAgICAgICAgICAgIHZhciBib25lXzEgPSBfYVtfaV07CisgICAgICAgICAgICAgICAg
aWYgKGJvbmVfMS5fbGlua2VkVHJhbnNmb3JtTm9kZSkgeworICAgICAgICAgICAgICAgICAgICAv
LyBDb21wdXRpbmcgdGhlIHdvcmxkIG1hdHJpeCBhbHNvIGNvbXB1dGVzIHRoZSBsb2NhbCBtYXRy
aXguCisgICAgICAgICAgICAgICAgICAgIGJvbmVfMS5fbGlua2VkVHJhbnNmb3JtTm9kZS5jb21w
dXRlV29ybGRNYXRyaXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYm9uZV8xLl9tYXRyaXggPSBi
b25lXzEuX2xpbmtlZFRyYW5zZm9ybU5vZGUuX2xvY2FsTWF0cml4OworICAgICAgICAgICAgICAg
ICAgICBib25lXzEubWFya0FzRGlydHkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9pc0RpcnR5KSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubmVlZEluaXRpYWxTa2luTWF0
cml4KSB7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fbWVz
aGVzV2l0aFBvc2VNYXRyaXgubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFy
IG1lc2ggPSB0aGlzLl9tZXNoZXNXaXRoUG9zZU1hdHJpeFtpbmRleF07CisgICAgICAgICAgICAg
ICAgdmFyIHBvc2VNYXRyaXggPSBtZXNoLmdldFBvc2VNYXRyaXgoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1lc2guX2JvbmVzVHJhbnNmb3JtTWF0cmljZXMgfHwgbWVzaC5fYm9uZXNUcmFuc2Zv
cm1NYXRyaWNlcy5sZW5ndGggIT09IDE2ICogKHRoaXMuYm9uZXMubGVuZ3RoICsgMSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWVzaC5fYm9uZXNUcmFuc2Zvcm1NYXRyaWNlcyA9IG5ldyBGbG9h
dDMyQXJyYXkoMTYgKiAodGhpcy5ib25lcy5sZW5ndGggKyAxKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jaHJvbml6ZWRXaXRoTWVzaCAhPT0gbWVz
aCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jaHJvbml6ZWRXaXRoTWVzaCA9IG1l
c2g7CisgICAgICAgICAgICAgICAgICAgIC8vIFByZXBhcmUgYm9uZXMKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgYm9uZUluZGV4ID0gMDsgYm9uZUluZGV4IDwgdGhpcy5ib25lcy5sZW5n
dGg7IGJvbmVJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm9uZSA9IHRo
aXMuYm9uZXNbYm9uZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYm9uZS5n
ZXRQYXJlbnQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBi
b25lLmdldEJhc2VNYXRyaXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgu
bXVsdGlwbHlUb1JlZihwb3NlTWF0cml4LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsxXSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9uZS5fdXBkYXRlRGlmZmVyZW5jZU1hdHJpeChfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsx
XSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNVc2luZ1RleHR1cmVGb3JNYXRyaWNlcykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmVXaWR0aCA9ICh0aGlzLmJvbmVzLmxl
bmd0aCArIDEpICogNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWVzaC5fdHJhbnNm
b3JtTWF0cml4VGV4dHVyZSB8fCBtZXNoLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlLmdldFNpemUo
KS53aWR0aCAhPT0gdGV4dHVyZVdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG1lc2guX3RyYW5zZm9ybU1hdHJpeFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWVzaC5fdHJhbnNmb3JtTWF0cml4VGV4dHVyZS5kaXNwb3NlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l
c2guX3RyYW5zZm9ybU1hdHJpeFRleHR1cmUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3Jhd1RleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUmF3VGV4dHVyZSJdLkNyZWF0ZVJHQkFU
ZXh0dXJlKG1lc2guX2JvbmVzVHJhbnNmb3JtTWF0cmljZXMsICh0aGlzLmJvbmVzLmxlbmd0aCAr
IDEpICogNCwgMSwgdGhpcy5fc2NlbmUsIGZhbHNlLCBmYWxzZSwgX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfTkVBUkVT
VF9TQU1QTElOR01PREUsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9BVCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgdGhpcy5fY29tcHV0ZVRyYW5zZm9ybU1hdHJpY2VzKG1lc2guX2JvbmVzVHJh
bnNmb3JtTWF0cmljZXMsIHBvc2VNYXRyaXgpOworICAgICAgICAgICAgICAgIGlmICh0aGlzLmlz
VXNpbmdUZXh0dXJlRm9yTWF0cmljZXMgJiYgbWVzaC5fdHJhbnNmb3JtTWF0cml4VGV4dHVyZSkg
eworICAgICAgICAgICAgICAgICAgICBtZXNoLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlLnVwZGF0
ZShtZXNoLl9ib25lc1RyYW5zZm9ybU1hdHJpY2VzKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIXRo
aXMuX3RyYW5zZm9ybU1hdHJpY2VzIHx8IHRoaXMuX3RyYW5zZm9ybU1hdHJpY2VzLmxlbmd0aCAh
PT0gMTYgKiAodGhpcy5ib25lcy5sZW5ndGggKyAxKSkgeworICAgICAgICAgICAgICAgIHRoaXMu
X3RyYW5zZm9ybU1hdHJpY2VzID0gbmV3IEZsb2F0MzJBcnJheSgxNiAqICh0aGlzLmJvbmVzLmxl
bmd0aCArIDEpKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1VzaW5nVGV4dHVyZUZvck1h
dHJpY2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmFuc2Zvcm1NYXRyaXhU
ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1NYXRyaXhU
ZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB0aGlzLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlID0gX01hdGVyaWFsc19UZXh0dXJlc19y
YXdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlJhd1RleHR1cmUiXS5DcmVh
dGVSR0JBVGV4dHVyZSh0aGlzLl90cmFuc2Zvcm1NYXRyaWNlcywgKHRoaXMuYm9uZXMubGVuZ3Ro
ICsgMSkgKiA0LCAxLCB0aGlzLl9zY2VuZSwgZmFsc2UsIGZhbHNlLCBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9ORUFS
RVNUX1NBTVBMSU5HTU9ERSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9jb21wdXRlVHJhbnNmb3JtTWF0
cmljZXModGhpcy5fdHJhbnNmb3JtTWF0cmljZXMsIG51bGwpOworICAgICAgICAgICAgaWYgKHRo
aXMuaXNVc2luZ1RleHR1cmVGb3JNYXRyaWNlcyAmJiB0aGlzLl90cmFuc2Zvcm1NYXRyaXhUZXh0
dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4VGV4dHVyZS51cGRh
dGUodGhpcy5fdHJhbnNmb3JtTWF0cmljZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2lzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc2NlbmUuX2FjdGl2
ZUJvbmVzLmFkZENvdW50KHRoaXMuYm9uZXMubGVuZ3RoLCBmYWxzZSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGFuaW1hdGFibGVzIGN1cnJlbnRseSBydW5uaW5n
IGZvciB0aGlzIHNrZWxldG9uCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgYW5pbWF0YWJs
ZXMKKyAgICAgKi8KKyAgICBTa2VsZXRvbi5wcm90b3R5cGUuZ2V0QW5pbWF0YWJsZXMgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fYW5pbWF0YWJsZXMgfHwgdGhpcy5fYW5pbWF0
YWJsZXMubGVuZ3RoICE9PSB0aGlzLmJvbmVzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5f
YW5pbWF0YWJsZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLmJvbmVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHRoaXMuX2Fu
aW1hdGFibGVzLnB1c2godGhpcy5ib25lc1tpbmRleF0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzLl9hbmltYXRhYmxlczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIENsb25lIHRoZSBjdXJyZW50IHNrZWxldG9uCisgICAgICogQHBhcmFtIG5hbWUgZGVm
aW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3IHNrZWxldG9uCisgICAgICogQHBhcmFtIGlkIGRlZmlu
ZXMgdGhlIGlkIG9mIHRoZSBuZXcgc2tlbGV0b24KKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IHNr
ZWxldG9uCisgICAgICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24g
KG5hbWUsIGlkKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgU2tlbGV0b24obmFtZSwgaWQg
fHwgbmFtZSwgdGhpcy5fc2NlbmUpOworICAgICAgICByZXN1bHQubmVlZEluaXRpYWxTa2luTWF0
cml4ID0gdGhpcy5uZWVkSW5pdGlhbFNraW5NYXRyaXg7CisgICAgICAgIGZvciAodmFyIGluZGV4
ID0gMDsgaW5kZXggPCB0aGlzLmJvbmVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAg
dmFyIHNvdXJjZSA9IHRoaXMuYm9uZXNbaW5kZXhdOworICAgICAgICAgICAgdmFyIHBhcmVudEJv
bmUgPSBudWxsOworICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gc291cmNlLmdldFBhcmVudCgp
OworICAgICAgICAgICAgaWYgKHBhcmVudF8xKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmVu
dEluZGV4ID0gdGhpcy5ib25lcy5pbmRleE9mKHBhcmVudF8xKTsKKyAgICAgICAgICAgICAgICBw
YXJlbnRCb25lID0gcmVzdWx0LmJvbmVzW3BhcmVudEluZGV4XTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBib25lID0gbmV3IF9ib25lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkJvbmUiXShzb3VyY2UubmFtZSwgcmVzdWx0LCBwYXJlbnRCb25lLCBzb3VyY2UuZ2V0QmFz
ZU1hdHJpeCgpLmNsb25lKCksIHNvdXJjZS5nZXRSZXN0UG9zZSgpLmNsb25lKCkpOworICAgICAg
ICAgICAgX01pc2NfZGVlcENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJEZWVw
Q29waWVyIl0uRGVlcENvcHkoc291cmNlLmFuaW1hdGlvbnMsIGJvbmUuYW5pbWF0aW9ucyk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3JhbmdlcykgeworICAgICAgICAgICAgcmVzdWx0
Ll9yYW5nZXMgPSB7fTsKKyAgICAgICAgICAgIGZvciAodmFyIHJhbmdlTmFtZSBpbiB0aGlzLl9y
YW5nZXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9yYW5nZXNbcmFuZ2VO
YW1lXTsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Ll9yYW5nZXNbcmFuZ2VOYW1lXSA9IHJhbmdlLmNsb25lKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2lzRGlydHkgPSB0
cnVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogRW5h
YmxlIGFuaW1hdGlvbiBibGVuZGluZyBmb3IgdGhpcyBza2VsZXRvbgorICAgICAqIEBwYXJhbSBi
bGVuZGluZ1NwZWVkIGRlZmluZXMgdGhlIGJsZW5kaW5nIHNwZWVkIHRvIGFwcGx5CisgICAgICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9hbmltYXRpb25zI2FuaW1h
dGlvbi1ibGVuZGluZworICAgICAqLworICAgIFNrZWxldG9uLnByb3RvdHlwZS5lbmFibGVCbGVu
ZGluZyA9IGZ1bmN0aW9uIChibGVuZGluZ1NwZWVkKSB7CisgICAgICAgIGlmIChibGVuZGluZ1Nw
ZWVkID09PSB2b2lkIDApIHsgYmxlbmRpbmdTcGVlZCA9IDAuMDE7IH0KKyAgICAgICAgdGhpcy5i
b25lcy5mb3JFYWNoKGZ1bmN0aW9uIChib25lKSB7CisgICAgICAgICAgICBib25lLmFuaW1hdGlv
bnMuZm9yRWFjaChmdW5jdGlvbiAoYW5pbWF0aW9uKSB7CisgICAgICAgICAgICAgICAgYW5pbWF0
aW9uLmVuYWJsZUJsZW5kaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhbmltYXRpb24uYmxl
bmRpbmdTcGVlZCA9IGJsZW5kaW5nU3BlZWQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlcyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0
ZWQgd2l0aCB0aGUgY3VycmVudCBza2VsZXRvbgorICAgICAqLworICAgIFNrZWxldG9uLnByb3Rv
dHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9tZXNoZXNXaXRoUG9z
ZU1hdHJpeCA9IFtdOworICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIHRoaXMuZ2V0U2Nl
bmUoKS5zdG9wQW5pbWF0aW9uKHRoaXMpOworICAgICAgICAvLyBSZW1vdmUgZnJvbSBzY2VuZQor
ICAgICAgICB0aGlzLmdldFNjZW5lKCkucmVtb3ZlU2tlbGV0b24odGhpcyk7CisgICAgICAgIGlm
ICh0aGlzLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl90cmFu
c2Zvcm1NYXRyaXhUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9y
bU1hdHJpeFRleHR1cmUgPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXJpYWxpemUgdGhlIHNrZWxldG9uIGluIGEgSlNPTiBvYmplY3QKKyAgICAgKiBAcmV0dXJu
cyBhIEpTT04gb2JqZWN0CisgICAgICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLnNlcmlhbGl6
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsK
KyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5uYW1lID0gdGhpcy5uYW1lOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LmlkID0gdGhpcy5pZDsKKyAgICAgICAgaWYgKHRoaXMuZGltZW5z
aW9uc0F0UmVzdCkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5kaW1lbnNpb25z
QXRSZXN0ID0gdGhpcy5kaW1lbnNpb25zQXRSZXN0LmFzQXJyYXkoKTsKKyAgICAgICAgfQorICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmJvbmVzID0gW107CisgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QubmVlZEluaXRpYWxTa2luTWF0cml4ID0gdGhpcy5uZWVkSW5pdGlhbFNraW5NYXRy
aXg7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJvbmVzLmxlbmd0
aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGJvbmUgPSB0aGlzLmJvbmVzW2luZGV4XTsK
KyAgICAgICAgICAgIHZhciBwYXJlbnRfMiA9IGJvbmUuZ2V0UGFyZW50KCk7CisgICAgICAgICAg
ICB2YXIgc2VyaWFsaXplZEJvbmUgPSB7CisgICAgICAgICAgICAgICAgcGFyZW50Qm9uZUluZGV4
OiBwYXJlbnRfMiA/IHRoaXMuYm9uZXMuaW5kZXhPZihwYXJlbnRfMikgOiAtMSwKKyAgICAgICAg
ICAgICAgICBuYW1lOiBib25lLm5hbWUsCisgICAgICAgICAgICAgICAgbWF0cml4OiBib25lLmdl
dEJhc2VNYXRyaXgoKS50b0FycmF5KCksCisgICAgICAgICAgICAgICAgcmVzdDogYm9uZS5nZXRS
ZXN0UG9zZSgpLnRvQXJyYXkoKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QuYm9uZXMucHVzaChzZXJpYWxpemVkQm9uZSk7CisgICAgICAgICAgICBpZiAo
Ym9uZS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemVkQm9uZS5sZW5ndGggPSBi
b25lLmxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChib25lLm1ldGFkYXRh
KSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplZEJvbmUubWV0YWRhdGEgPSBib25lLm1ldGFk
YXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJvbmUuYW5pbWF0aW9ucyAmJiBi
b25lLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRC
b25lLmFuaW1hdGlvbiA9IGJvbmUuYW5pbWF0aW9uc1swXS5zZXJpYWxpemUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmFuZ2VzID0gW107CisgICAg
ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX3JhbmdlcykgeworICAgICAgICAgICAgICAg
IHZhciBzb3VyY2UgPSB0aGlzLl9yYW5nZXNbbmFtZV07CisgICAgICAgICAgICAgICAgaWYgKCFz
b3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHt9OworICAgICAgICAgICAgICAgIHJhbmdl
Lm5hbWUgPSBuYW1lOworICAgICAgICAgICAgICAgIHJhbmdlLmZyb20gPSBzb3VyY2UuZnJvbTsK
KyAgICAgICAgICAgICAgICByYW5nZS50byA9IHNvdXJjZS50bzsKKyAgICAgICAgICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LnJhbmdlcy5wdXNoKHJhbmdlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAg
IC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgc2tlbGV0b24gZnJvbSBzZXJpYWxpemVkIGRhdGEK
KyAgICAgKiBAcGFyYW0gcGFyc2VkU2tlbGV0b24gZGVmaW5lcyB0aGUgc2VyaWFsaXplZCBkYXRh
CisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBA
cmV0dXJucyBhIG5ldyBza2VsZXRvbgorICAgICAqLworICAgIFNrZWxldG9uLlBhcnNlID0gZnVu
Y3Rpb24gKHBhcnNlZFNrZWxldG9uLCBzY2VuZSkgeworICAgICAgICB2YXIgc2tlbGV0b24gPSBu
ZXcgU2tlbGV0b24ocGFyc2VkU2tlbGV0b24ubmFtZSwgcGFyc2VkU2tlbGV0b24uaWQsIHNjZW5l
KTsKKyAgICAgICAgaWYgKHBhcnNlZFNrZWxldG9uLmRpbWVuc2lvbnNBdFJlc3QpIHsKKyAgICAg
ICAgICAgIHNrZWxldG9uLmRpbWVuc2lvbnNBdFJlc3QgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLkZyb21BcnJheShwYXJzZWRTa2Vs
ZXRvbi5kaW1lbnNpb25zQXRSZXN0KTsKKyAgICAgICAgfQorICAgICAgICBza2VsZXRvbi5uZWVk
SW5pdGlhbFNraW5NYXRyaXggPSBwYXJzZWRTa2VsZXRvbi5uZWVkSW5pdGlhbFNraW5NYXRyaXg7
CisgICAgICAgIHZhciBpbmRleDsKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGFy
c2VkU2tlbGV0b24uYm9uZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgcGFy
c2VkQm9uZSA9IHBhcnNlZFNrZWxldG9uLmJvbmVzW2luZGV4XTsKKyAgICAgICAgICAgIHZhciBw
YXJlbnRCb25lID0gbnVsbDsKKyAgICAgICAgICAgIGlmIChwYXJzZWRCb25lLnBhcmVudEJvbmVJ
bmRleCA+IC0xKSB7CisgICAgICAgICAgICAgICAgcGFyZW50Qm9uZSA9IHNrZWxldG9uLmJvbmVz
W3BhcnNlZEJvbmUucGFyZW50Qm9uZUluZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciByZXN0ID0gcGFyc2VkQm9uZS5yZXN0ID8gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLkZyb21BcnJheShwYXJzZWRCb25lLnJlc3Qp
IDogbnVsbDsKKyAgICAgICAgICAgIHZhciBib25lID0gbmV3IF9ib25lX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkJvbmUiXShwYXJzZWRCb25lLm5hbWUsIHNrZWxldG9uLCBwYXJlbnRC
b25lLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWF0
cml4Il0uRnJvbUFycmF5KHBhcnNlZEJvbmUubWF0cml4KSwgcmVzdCk7CisgICAgICAgICAgICBp
ZiAocGFyc2VkQm9uZS5pZCAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZEJvbmUuaWQgIT09IG51bGwp
IHsKKyAgICAgICAgICAgICAgICBib25lLmlkID0gcGFyc2VkQm9uZS5pZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRCb25lLmxlbmd0aCkgeworICAgICAgICAgICAgICAg
IGJvbmUubGVuZ3RoID0gcGFyc2VkQm9uZS5sZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAocGFyc2VkQm9uZS5tZXRhZGF0YSkgeworICAgICAgICAgICAgICAgIGJvbmUubWV0
YWRhdGEgPSBwYXJzZWRCb25lLm1ldGFkYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHBhcnNlZEJvbmUuYW5pbWF0aW9uKSB7CisgICAgICAgICAgICAgICAgYm9uZS5hbmltYXRp
b25zLnB1c2goX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIkFuaW1hdGlvbiJdLlBhcnNlKHBhcnNlZEJvbmUuYW5pbWF0aW9uKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAocGFyc2VkQm9uZS5saW5rZWRUcmFuc2Zvcm1Ob2RlSWQgIT09
IHVuZGVmaW5lZCAmJiBwYXJzZWRCb25lLmxpbmtlZFRyYW5zZm9ybU5vZGVJZCAhPT0gbnVsbCkg
eworICAgICAgICAgICAgICAgIHNrZWxldG9uLl9oYXNXYWl0aW5nRGF0YSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYm9uZS5fd2FpdGluZ1RyYW5zZm9ybU5vZGVJZCA9IHBhcnNlZEJvbmUubGlu
a2VkVHJhbnNmb3JtTm9kZUlkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IHBsYWNlZCBhZnRlciBib25lcywgc28gY3JlYXRlQW5pbWF0aW9uUmFuZ2UgY2FuIGNhc2NhZGUg
ZG93bgorICAgICAgICBpZiAocGFyc2VkU2tlbGV0b24ucmFuZ2VzKSB7CisgICAgICAgICAgICBm
b3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJzZWRTa2VsZXRvbi5yYW5nZXMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBwYXJzZWRTa2VsZXRvbi5yYW5nZXNb
aW5kZXhdOworICAgICAgICAgICAgICAgIHNrZWxldG9uLmNyZWF0ZUFuaW1hdGlvblJhbmdlKGRh
dGEubmFtZSwgZGF0YS5mcm9tLCBkYXRhLnRvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gc2tlbGV0b247CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb21wdXRl
IGFsbCBub2RlIGFic29sdXRlIHRyYW5zZm9ybXMKKyAgICAgKiBAcGFyYW0gZm9yY2VVcGRhdGUg
ZGVmaW5lcyBpZiBjb21wdXRhdGlvbiBtdXN0IGJlIGRvbmUgZXZlbiBpZiBjYWNoZSBpcyB1cCB0
byBkYXRlCisgICAgICovCisgICAgU2tlbGV0b24ucHJvdG90eXBlLmNvbXB1dGVBYnNvbHV0ZVRy
YW5zZm9ybXMgPSBmdW5jdGlvbiAoZm9yY2VVcGRhdGUpIHsKKyAgICAgICAgaWYgKGZvcmNlVXBk
YXRlID09PSB2b2lkIDApIHsgZm9yY2VVcGRhdGUgPSBmYWxzZTsgfQorICAgICAgICB2YXIgcmVu
ZGVySWQgPSB0aGlzLl9zY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICBpZiAodGhpcy5fbGFz
dEFic29sdXRlVHJhbnNmb3Jtc1VwZGF0ZUlkICE9IHJlbmRlcklkIHx8IGZvcmNlVXBkYXRlKSB7
CisgICAgICAgICAgICB0aGlzLmJvbmVzWzBdLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9ybXMoKTsK
KyAgICAgICAgICAgIHRoaXMuX2xhc3RBYnNvbHV0ZVRyYW5zZm9ybXNVcGRhdGVJZCA9IHJlbmRl
cklkOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByb290IHBv
c2UgbWF0cml4CisgICAgICogQHJldHVybnMgYSBtYXRyaXgKKyAgICAgKi8KKyAgICBTa2VsZXRv
bi5wcm90b3R5cGUuZ2V0UG9zZU1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHBv
c2VNYXRyaXggPSBudWxsOworICAgICAgICBpZiAodGhpcy5fbWVzaGVzV2l0aFBvc2VNYXRyaXgu
bGVuZ3RoID4gMCkgeworICAgICAgICAgICAgcG9zZU1hdHJpeCA9IHRoaXMuX21lc2hlc1dpdGhQ
b3NlTWF0cml4WzBdLmdldFBvc2VNYXRyaXgoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cG9zZU1hdHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNvcnRzIGJvbmVzIHBlciBpbnRl
cm5hbCBpbmRleAorICAgICAqLworICAgIFNrZWxldG9uLnByb3RvdHlwZS5zb3J0Qm9uZXMgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBib25lcyA9IG5ldyBBcnJheSgpOworICAgICAgICB2
YXIgdmlzaXRlZCA9IG5ldyBBcnJheSh0aGlzLmJvbmVzLmxlbmd0aCk7CisgICAgICAgIGZvciAo
dmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJvbmVzLmxlbmd0aDsgaW5kZXgrKykgeworICAg
ICAgICAgICAgdGhpcy5fc29ydEJvbmVzKGluZGV4LCBib25lcywgdmlzaXRlZCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5ib25lcyA9IGJvbmVzOworICAgIH07CisgICAgU2tlbGV0b24ucHJv
dG90eXBlLl9zb3J0Qm9uZXMgPSBmdW5jdGlvbiAoaW5kZXgsIGJvbmVzLCB2aXNpdGVkKSB7Cisg
ICAgICAgIGlmICh2aXNpdGVkW2luZGV4XSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHZpc2l0ZWRbaW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgdmFyIGJvbmUgPSB0
aGlzLmJvbmVzW2luZGV4XTsKKyAgICAgICAgaWYgKGJvbmUuX2luZGV4ID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgIGJvbmUuX2luZGV4ID0gaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIHBhcmVudEJvbmUgPSBib25lLmdldFBhcmVudCgpOworICAgICAgICBpZiAocGFyZW50Qm9u
ZSkgeworICAgICAgICAgICAgdGhpcy5fc29ydEJvbmVzKHRoaXMuYm9uZXMuaW5kZXhPZihwYXJl
bnRCb25lKSwgYm9uZXMsIHZpc2l0ZWQpOworICAgICAgICB9CisgICAgICAgIGJvbmVzLnB1c2go
Ym9uZSk7CisgICAgfTsKKyAgICByZXR1cm4gU2tlbGV0b247Cit9KCkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL0NhbWVyYXMvSW5wdXRzL0Jhc2VDYW1lcmFQb2ludGVyc0lucHV0LnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vQ2FtZXJhcy9JbnB1dHMvQmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJhc2VDYW1lcmFQb2ludGVyc0lucHV0ICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VDYW1lcmFQb2ludGVyc0lucHV0
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dDsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIv
dHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3Rvb2xzICovICIuL01pc2Mv
dG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXZlbnRzX3BvaW50ZXJFdmVu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL0V2ZW50cy9wb2ludGVyRXZlbnRzICovICIuL0V2ZW50cy9wb2ludGVyRXZlbnRzLnRz
Iik7CisKKworCisKKy8qKgorICogQmFzZSBjbGFzcyBmb3IgQ2FtZXJhIFBvaW50ZXIgSW5wdXRz
LgorICogU2VlIEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQgaW4gc3JjL0NhbWVyYXMvSW5wdXRz
L2ZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQudHMKKyAqIGZvciBleGFtcGxlIHVzYWdlLgorICov
Cit2YXIgQmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisgICAgZnVuY3Rpb24gQmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQoKSB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBidXR0b25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5w
dXQgdG8gaGFuZGxlIGNhbWVyYSBtb3ZlLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5idXR0
b25zID0gWzAsIDEsIDJdOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIGlucHV0
IGNvbnRyb2xzIHRvIGEgc3BlY2lmaWMgZG9tIGVsZW1lbnQgdG8gZ2V0IHRoZSBpbnB1dCBmcm9t
LgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdGhlIGNvbnRyb2xz
IHNob3VsZCBiZSBsaXN0ZW5lZCBmcm9tCisgICAgICogQHBhcmFtIG5vUHJldmVudERlZmF1bHQg
RGVmaW5lcyB3aGV0aGVyIGV2ZW50IGNhdWdodCBieSB0aGUgY29udHJvbHMgc2hvdWxkIGNhbGwg
cHJldmVudGRlZmF1bHQoKSAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9j
cy9XZWIvQVBJL0V2ZW50L3ByZXZlbnREZWZhdWx0KQorICAgICAqLworICAgIEJhc2VDYW1lcmFQ
b2ludGVyc0lucHV0LnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQs
IG5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
dmFyIGVuZ2luZSA9IHRoaXMuY2FtZXJhLmdldEVuZ2luZSgpOworICAgICAgICB2YXIgcHJldmlv
dXNQaW5jaFNxdWFyZWREaXN0YW5jZSA9IDA7CisgICAgICAgIHZhciBwcmV2aW91c011bHRpVG91
Y2hQYW5Qb3NpdGlvbiA9IG51bGw7CisgICAgICAgIHRoaXMucG9pbnRBID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5wb2ludEIgPSBudWxsOworICAgICAgICB0aGlzLl9hbHRLZXkgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5fY3RybEtleSA9IGZhbHNlOworICAgICAgICB0aGlzLl9tZXRhS2V5ID0gZmFs
c2U7CisgICAgICAgIHRoaXMuX3NoaWZ0S2V5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2J1dHRv
bnNQcmVzc2VkID0gMDsKKyAgICAgICAgdGhpcy5fcG9pbnRlcklucHV0ID0gZnVuY3Rpb24gKHAs
IHMpIHsKKyAgICAgICAgICAgIHZhciBldnQgPSBwLmV2ZW50OworICAgICAgICAgICAgdmFyIGlz
VG91Y2ggPSBldnQucG9pbnRlclR5cGUgPT09ICJ0b3VjaCI7CisgICAgICAgICAgICBpZiAoZW5n
aW5lLmlzSW5WUkV4Y2x1c2l2ZVBvaW50ZXJNb2RlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHAudHlwZSAhPT0gX0V2ZW50c19wb2lu
dGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBvaW50ZXJFdmVudFR5cGVz
Il0uUE9JTlRFUk1PVkUgJiYKKyAgICAgICAgICAgICAgICBfdGhpcy5idXR0b25zLmluZGV4T2Yo
ZXZ0LmJ1dHRvbikgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIHNyY0VsZW1lbnQgPSAoZXZ0LnNyY0VsZW1lbnQgfHwgZXZ0
LnRhcmdldCk7CisgICAgICAgICAgICBfdGhpcy5fYWx0S2V5ID0gZXZ0LmFsdEtleTsKKyAgICAg
ICAgICAgIF90aGlzLl9jdHJsS2V5ID0gZXZ0LmN0cmxLZXk7CisgICAgICAgICAgICBfdGhpcy5f
bWV0YUtleSA9IGV2dC5tZXRhS2V5OworICAgICAgICAgICAgX3RoaXMuX3NoaWZ0S2V5ID0gZXZ0
LnNoaWZ0S2V5OworICAgICAgICAgICAgX3RoaXMuX2J1dHRvbnNQcmVzc2VkID0gZXZ0LmJ1dHRv
bnM7CisgICAgICAgICAgICBpZiAoZW5naW5lLmlzUG9pbnRlckxvY2spIHsKKyAgICAgICAgICAg
ICAgICB2YXIgb2Zmc2V0WCA9IGV2dC5tb3ZlbWVudFggfHwKKyAgICAgICAgICAgICAgICAgICAg
ZXZ0Lm1vek1vdmVtZW50WCB8fAorICAgICAgICAgICAgICAgICAgICBldnQud2Via2l0TW92ZW1l
bnRYIHx8CisgICAgICAgICAgICAgICAgICAgIGV2dC5tc01vdmVtZW50WCB8fAorICAgICAgICAg
ICAgICAgICAgICAwOworICAgICAgICAgICAgICAgIHZhciBvZmZzZXRZID0gZXZ0Lm1vdmVtZW50
WSB8fAorICAgICAgICAgICAgICAgICAgICBldnQubW96TW92ZW1lbnRZIHx8CisgICAgICAgICAg
ICAgICAgICAgIGV2dC53ZWJraXRNb3ZlbWVudFkgfHwKKyAgICAgICAgICAgICAgICAgICAgZXZ0
Lm1zTW92ZW1lbnRZIHx8CisgICAgICAgICAgICAgICAgICAgIDA7CisgICAgICAgICAgICAgICAg
X3RoaXMub25Ub3VjaChudWxsLCBvZmZzZXRYLCBvZmZzZXRZKTsKKyAgICAgICAgICAgICAgICBf
dGhpcy5wb2ludEEgPSBudWxsOworICAgICAgICAgICAgICAgIF90aGlzLnBvaW50QiA9IG51bGw7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwLnR5cGUgPT09IF9FdmVudHNf
cG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVyRXZlbnRU
eXBlcyJdLlBPSU5URVJET1dOICYmIHNyY0VsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgICAgICBzcmNFbGVtZW50LnNldFBvaW50ZXJDYXB0dXJlKGV2dC5w
b2ludGVySWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoZSkg
eworICAgICAgICAgICAgICAgICAgICAvL05vdGhpbmcgdG8gZG8gd2l0aCB0aGUgZXJyb3IuIEV4
ZWN1dGlvbiB3aWxsIGNvbnRpbnVlLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoX3RoaXMucG9pbnRBID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlz
LnBvaW50QSA9IHsgeDogZXZ0LmNsaWVudFgsCisgICAgICAgICAgICAgICAgICAgICAgICB5OiBl
dnQuY2xpZW50WSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJJZDogZXZ0LnBvaW50
ZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGV2dC5wb2ludGVyVHlwZSB9Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5wb2ludEIg
PT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMucG9pbnRCID0geyB4OiBldnQu
Y2xpZW50WCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHk6IGV2dC5jbGllbnRZLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcG9pbnRlcklkOiBldnQucG9pbnRlcklkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZTogZXZ0LnBvaW50ZXJUeXBlIH07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIF90aGlzLm9uQnV0dG9uRG93bihldnQpOworICAgICAgICAgICAgICAg
IGlmICghbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICBldnQucHJldmVu
dERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHAudHlwZSA9
PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBv
aW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPVUJMRVRBUCkgeworICAgICAgICAgICAgICAgIF90
aGlzLm9uRG91YmxlVGFwKGV2dC5wb2ludGVyVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChwLnR5cGUgPT09IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJVUCAmJiBzcmNF
bGVtZW50KSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgc3Jj
RWxlbWVudC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZXZ0LnBvaW50ZXJJZCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vTm90aGluZyB0byBkbyB3aXRoIHRoZSBlcnJvci4KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKCFpc1RvdWNoKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLnBv
aW50QiA9IG51bGw7IC8vIE1vdXNlIGFuZCBwZW4gYXJlIG1vbm8gcG9pbnRlcgorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvL3dvdWxkIGJlIGJldHRlciB0byB1c2UgcG9pbnRl
cnMucmVtb3ZlKGV2dC5wb2ludGVySWQpIGZvciBtdWx0aXRvdWNoIGdlc3R1cmVzLAorICAgICAg
ICAgICAgICAgIC8vYnV0IGVtcHR5aW5nIGNvbXBsZXRlbHkgcG9pbnRlcnMgY29sbGVjdGlvbiBp
cyByZXF1aXJlZCB0byBmaXggYSBidWcgb24gaVBob25lIDoKKyAgICAgICAgICAgICAgICAvL3do
ZW4gY2hhbmdpbmcgb3JpZW50YXRpb24gd2hpbGUgcGluY2hpbmcgY2FtZXJhLAorICAgICAgICAg
ICAgICAgIC8vb25lIHBvaW50ZXIgc3RheSBwcmVzc2VkIGZvcmV2ZXIgaWYgd2UgZG9uJ3QgcmVs
ZWFzZSBhbGwgcG9pbnRlcnMKKyAgICAgICAgICAgICAgICAvL3dpbGwgYmUgb2sgdG8gcHV0IGJh
Y2sgcG9pbnRlcnMucmVtb3ZlKGV2dC5wb2ludGVySWQpOyB3aGVuIGlQaG9uZSBidWcgY29ycmVj
dGVkCisgICAgICAgICAgICAgICAgaWYgKGVuZ2luZS5fYmFkT1MpIHsKKyAgICAgICAgICAgICAg
ICAgICAgX3RoaXMucG9pbnRBID0gX3RoaXMucG9pbnRCID0gbnVsbDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vb25seSBy
ZW1vdmUgdGhlIGltcGFjdGVkIHBvaW50ZXIgaW4gY2FzZSBvZiBtdWx0aXRvdWNoIGFsbG93aW5n
IG9uIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgLy9wbGF0Zm9ybXMgc3dpdGNoaW5nIGZyb20g
cm90YXRlIHRvIHpvb20gYW5kIHBhbiBzZWFtbGVzc2x5LgorICAgICAgICAgICAgICAgICAgICBp
ZiAoX3RoaXMucG9pbnRCICYmIF90aGlzLnBvaW50QSAmJiBfdGhpcy5wb2ludEEucG9pbnRlcklk
ID09IGV2dC5wb2ludGVySWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnBvaW50
QSA9IF90aGlzLnBvaW50QjsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnBvaW50QiA9
IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoX3RoaXMucG9pbnRBICYmIF90aGlzLnBvaW50QiAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgX3RoaXMucG9pbnRCLnBvaW50ZXJJZCA9PSBldnQucG9pbnRlcklkKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5wb2ludEIgPSBudWxsOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgX3Ro
aXMucG9pbnRBID0gX3RoaXMucG9pbnRCID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNQaW5jaFNxdWFy
ZWREaXN0YW5jZSAhPT0gMCB8fCBwcmV2aW91c011bHRpVG91Y2hQYW5Qb3NpdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICAvLyBQcmV2aW91cyBwaW5jaCBkYXRhIGlzIHBvcHVsYXRlZCBidXQg
YSBidXR0b24gaGFzIGJlZW4gbGlmdGVkCisgICAgICAgICAgICAgICAgICAgIC8vIHNvIHBpbmNo
IGhhcyBlbmRlZC4KKyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25NdWx0aVRvdWNoKF90aGlz
LnBvaW50QSwgX3RoaXMucG9pbnRCLCBwcmV2aW91c1BpbmNoU3F1YXJlZERpc3RhbmNlLCAwLCAv
LyBwaW5jaFNxdWFyZWREaXN0YW5jZQorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c011bHRp
VG91Y2hQYW5Qb3NpdGlvbiwgbnVsbCAvLyBtdWx0aVRvdWNoUGFuUG9zaXRpb24KKyAgICAgICAg
ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNQaW5jaFNxdWFyZWRE
aXN0YW5jZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTXVsdGlUb3VjaFBhblBv
c2l0aW9uID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgX3RoaXMu
b25CdXR0b25VcChldnQpOworICAgICAgICAgICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkg
eworICAgICAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwLnR5cGUgPT09IF9F
dmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVy
RXZlbnRUeXBlcyJdLlBPSU5URVJNT1ZFKSB7CisgICAgICAgICAgICAgICAgaWYgKCFub1ByZXZl
bnREZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBPbmUgYnV0dG9uIGRvd24KKyAg
ICAgICAgICAgICAgICBpZiAoX3RoaXMucG9pbnRBICYmIF90aGlzLnBvaW50QiA9PT0gbnVsbCkg
eworICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0WCA9IGV2dC5jbGllbnRYIC0gX3RoaXMu
cG9pbnRBLng7CisgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXRZID0gZXZ0LmNsaWVudFkg
LSBfdGhpcy5wb2ludEEueTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25Ub3VjaChfdGhp
cy5wb2ludEEsIG9mZnNldFgsIG9mZnNldFkpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5w
b2ludEEueCA9IGV2dC5jbGllbnRYOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5wb2ludEEu
eSA9IGV2dC5jbGllbnRZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBU
d28gYnV0dG9ucyBkb3duOiBwaW5jaAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLnBv
aW50QSAmJiBfdGhpcy5wb2ludEIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGVkID0gKF90
aGlzLnBvaW50QS5wb2ludGVySWQgPT09IGV2dC5wb2ludGVySWQpID8KKyAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLnBvaW50QSA6IF90aGlzLnBvaW50QjsKKyAgICAgICAgICAgICAgICAg
ICAgZWQueCA9IGV2dC5jbGllbnRYOworICAgICAgICAgICAgICAgICAgICBlZC55ID0gZXZ0LmNs
aWVudFk7CisgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0WCA9IF90aGlzLnBvaW50QS54IC0g
X3RoaXMucG9pbnRCLng7CisgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0WSA9IF90aGlzLnBv
aW50QS55IC0gX3RoaXMucG9pbnRCLnk7CisgICAgICAgICAgICAgICAgICAgIHZhciBwaW5jaFNx
dWFyZWREaXN0YW5jZSA9IChkaXN0WCAqIGRpc3RYKSArIChkaXN0WSAqIGRpc3RZKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG11bHRpVG91Y2hQYW5Qb3NpdGlvbiA9IHsgeDogKF90aGlzLnBv
aW50QS54ICsgX3RoaXMucG9pbnRCLngpIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHk6
IChfdGhpcy5wb2ludEEueSArIF90aGlzLnBvaW50Qi55KSAvIDIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBwb2ludGVySWQ6IGV2dC5wb2ludGVySWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlOiBwLnR5cGUgfTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25NdWx0aVRvdWNo
KF90aGlzLnBvaW50QSwgX3RoaXMucG9pbnRCLCBwcmV2aW91c1BpbmNoU3F1YXJlZERpc3RhbmNl
LCBwaW5jaFNxdWFyZWREaXN0YW5jZSwgcHJldmlvdXNNdWx0aVRvdWNoUGFuUG9zaXRpb24sIG11
bHRpVG91Y2hQYW5Qb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTXVsdGlU
b3VjaFBhblBvc2l0aW9uID0gbXVsdGlUb3VjaFBhblBvc2l0aW9uOworICAgICAgICAgICAgICAg
ICAgICBwcmV2aW91c1BpbmNoU3F1YXJlZERpc3RhbmNlID0gcGluY2hTcXVhcmVkRGlzdGFuY2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB0
aGlzLl9vYnNlcnZlciA9IHRoaXMuY2FtZXJhLmdldFNjZW5lKCkub25Qb2ludGVyT2JzZXJ2YWJs
ZS5hZGQodGhpcy5fcG9pbnRlcklucHV0LCBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9XTiB8IF9F
dmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVy
RXZlbnRUeXBlcyJdLlBPSU5URVJVUCB8CisgICAgICAgICAgICBfRXZlbnRzX3BvaW50ZXJFdmVu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lO
VEVSTU9WRSk7CisgICAgICAgIHRoaXMuX29uTG9zdEZvY3VzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgX3RoaXMucG9pbnRBID0gX3RoaXMucG9pbnRCID0gbnVsbDsKKyAgICAgICAgICAg
IHByZXZpb3VzUGluY2hTcXVhcmVkRGlzdGFuY2UgPSAwOworICAgICAgICAgICAgcHJldmlvdXNN
dWx0aVRvdWNoUGFuUG9zaXRpb24gPSBudWxsOworICAgICAgICAgICAgX3RoaXMub25Mb3N0Rm9j
dXMoKTsKKyAgICAgICAgfTsKKyAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250
ZXh0bWVudSIsIHRoaXMub25Db250ZXh0TWVudS5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgICAg
IF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRvb2xzIl0uUmVnaXN0
ZXJUb3BSb290RXZlbnRzKHRoaXMuY2FtZXJhLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuZ2V0SG9z
dFdpbmRvdygpLCBbCisgICAgICAgICAgICB7IG5hbWU6ICJibHVyIiwgaGFuZGxlcjogdGhpcy5f
b25Mb3N0Rm9jdXMgfQorICAgICAgICBdKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGFj
aCB0aGUgY3VycmVudCBjb250cm9scyBmcm9tIHRoZSBzcGVjaWZpZWQgZG9tIGVsZW1lbnQuCisg
ICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0byBzdG9wIGxpc3Rlbmlu
ZyB0aGUgaW5wdXRzIGZyb20KKyAgICAgKi8KKyAgICBCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dC5w
cm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgICAgIGlm
ICh0aGlzLl9vbkxvc3RGb2N1cykgeworICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5VbnJlZ2lzdGVyVG9wUm9vdEV2ZW50cyh0aGlz
LmNhbWVyYS5nZXRTY2VuZSgpLmdldEVuZ2luZSgpLmdldEhvc3RXaW5kb3coKSwgWworICAgICAg
ICAgICAgICAgIHsgbmFtZTogImJsdXIiLCBoYW5kbGVyOiB0aGlzLl9vbkxvc3RGb2N1cyB9Cisg
ICAgICAgICAgICBdKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZWxlbWVudCAmJiB0aGlzLl9v
YnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5jYW1lcmEuZ2V0U2NlbmUoKS5vblBvaW50ZXJP
YnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vYnNlcnZlcik7CisgICAgICAgICAgICB0aGlzLl9vYnNl
cnZlciA9IG51bGw7CisgICAgICAgICAgICBpZiAodGhpcy5vbkNvbnRleHRNZW51KSB7CisgICAg
ICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRo
aXMub25Db250ZXh0TWVudSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vbkxv
c3RGb2N1cyA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWx0S2V5ID0gZmFsc2U7
CisgICAgICAgIHRoaXMuX2N0cmxLZXkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbWV0YUtleSA9
IGZhbHNlOworICAgICAgICB0aGlzLl9zaGlmdEtleSA9IGZhbHNlOworICAgICAgICB0aGlzLl9i
dXR0b25zUHJlc3NlZCA9IDA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFz
cyBuYW1lIG9mIHRoZSBjdXJyZW50IGlucHV0LgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBu
YW1lCisgICAgICovCisgICAgQmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLmdldENs
YXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJCYXNlQ2FtZXJhUG9pbnRl
cnNJbnB1dCI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUg
YXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBjbGFzcy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5w
dXQgZnJpZW5kbHkgbmFtZQorICAgICAqLworICAgIEJhc2VDYW1lcmFQb2ludGVyc0lucHV0LnBy
b3RvdHlwZS5nZXRTaW1wbGVOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gInBv
aW50ZXJzIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxlZCBvbiBwb2ludGVyIFBPSU5U
RVJET1VCTEVUQVAgZXZlbnQuCisgICAgICogT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcHJvdmlk
ZSBmdW5jdGlvbmFsaXR5IG9uIFBPSU5URVJET1VCTEVUQVAgZXZlbnQuCisgICAgICovCisgICAg
QmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLm9uRG91YmxlVGFwID0gZnVuY3Rpb24g
KHR5cGUpIHsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxlZCBvbiBwb2ludGVyIFBPSU5U
RVJNT1ZFIGV2ZW50IGlmIG9ubHkgYSBzaW5nbGUgdG91Y2ggaXMgYWN0aXZlLgorICAgICAqIE92
ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eS4KKyAgICAgKi8KKyAg
ICBCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUub25Ub3VjaCA9IGZ1bmN0aW9uIChw
b2ludCwgb2Zmc2V0WCwgb2Zmc2V0WSkgeworICAgIH07CisgICAgLyoqCisgICAgICogQ2FsbGVk
IG9uIHBvaW50ZXIgUE9JTlRFUk1PVkUgZXZlbnQgaWYgbXVsdGlwbGUgdG91Y2hlcyBhcmUgYWN0
aXZlLgorICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0
eS4KKyAgICAgKi8KKyAgICBCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUub25NdWx0
aVRvdWNoID0gZnVuY3Rpb24gKHBvaW50QSwgcG9pbnRCLCBwcmV2aW91c1BpbmNoU3F1YXJlZERp
c3RhbmNlLCBwaW5jaFNxdWFyZWREaXN0YW5jZSwgcHJldmlvdXNNdWx0aVRvdWNoUGFuUG9zaXRp
b24sIG11bHRpVG91Y2hQYW5Qb3NpdGlvbikgeworICAgIH07CisgICAgLyoqCisgICAgICogQ2Fs
bGVkIG9uIEpTIGNvbnRleHRtZW51IGV2ZW50LgorICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9k
IHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eS4KKyAgICAgKi8KKyAgICBCYXNlQ2FtZXJhUG9pbnRl
cnNJbnB1dC5wcm90b3R5cGUub25Db250ZXh0TWVudSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAg
ICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQg
ZWFjaCB0aW1lIGEgbmV3IFBPSU5URVJET1dOIGV2ZW50IG9jY3Vycy4gSWUsIGZvciBlYWNoIGJ1
dHRvbgorICAgICAqIHByZXNzLgorICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHByb3Zp
ZGUgZnVuY3Rpb25hbGl0eS4KKyAgICAgKi8KKyAgICBCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dC5w
cm90b3R5cGUub25CdXR0b25Eb3duID0gZnVuY3Rpb24gKGV2dCkgeworICAgIH07CisgICAgLyoq
CisgICAgICogQ2FsbGVkIGVhY2ggdGltZSBhIG5ldyBQT0lOVEVSVVAgZXZlbnQgb2NjdXJzLiBJ
ZSwgZm9yIGVhY2ggYnV0dG9uCisgICAgICogcmVsZWFzZS4KKyAgICAgKiBPdmVycmlkZSB0aGlz
IG1ldGhvZCB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHkuCisgICAgICovCisgICAgQmFzZUNhbWVy
YVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLm9uQnV0dG9uVXAgPSBmdW5jdGlvbiAoZXZ0KSB7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgd2hlbiB3aW5kb3cgYmVjb21lcyBpbmFjdGl2
ZS4KKyAgICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHku
CisgICAgICovCisgICAgQmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLm9uTG9zdEZv
Y3VzID0gZnVuY3Rpb24gKCkgeworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBC
YXNlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUsICJidXR0b25zIiwgdm9pZCAwKTsKKyAg
ICByZXR1cm4gQmFzZUNhbWVyYVBvaW50ZXJzSW5wdXQ7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dC50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL0lucHV0cy9hcmNSb3RhdGVDYW1lcmFHYW1lcGFk
SW5wdXQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBcmNSb3RhdGVDYW1lcmFH
YW1lcGFkSW5wdXQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90
YXRlQ2FtZXJhR2FtZXBhZElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBBcmNSb3RhdGVDYW1l
cmFHYW1lcGFkSW5wdXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNj
L2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1l
cmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2Ft
ZXJhcy9jYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0dhbWVwYWRzX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL0dhbWVwYWRzL2dhbWVwYWQgKi8gIi4vR2FtZXBhZHMvZ2Ft
ZXBhZC50cyIpOworCisKKworCisvKioKKyAqIE1hbmFnZSB0aGUgZ2FtZXBhZCBpbnB1dHMgdG8g
Y29udHJvbCBhbiBhcmMgcm90YXRlIGNhbWVyYS4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRzCisgKi8KK3ZhciBBcmNSb3Rh
dGVDYW1lcmFHYW1lcGFkSW5wdXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
ZnVuY3Rpb24gQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0KCkgeworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lcyB0aGUgZ2FtZXBhZCByb3RhdGlvbiBzZW5zaWJsaXR5LgorICAgICAg
ICAgKiBUaGlzIGlzIHRoZSB0aHJlc2hvbGQgZnJvbSB3aGVuIHJvdGF0aW9uIHN0YXJ0cyB0byBi
ZSBhY2NvdW50ZWQgZm9yIHRvIHByZXZlbnQgaml0dGVyaW5nLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5nYW1lcGFkUm90YXRpb25TZW5zaWJpbGl0eSA9IDgwOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lcyB0aGUgZ2FtZXBhZCBtb3ZlIHNlbnNpYmxpdHkuCisgICAgICAgICAq
IFRoaXMgaXMgdGhlIHRocmVzaG9sZCBmcm9tIHdoZW4gbW92aW5nIHN0YXJ0cyB0byBiZSBhY2Nv
dW50ZWQgZm9yIGZvciB0byBwcmV2ZW50IGppdHRlcmluZy4KKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuZ2FtZXBhZE1vdmVTZW5zaWJpbGl0eSA9IDQwOworICAgIH0KKyAgICAvKioKKyAgICAg
KiBBdHRhY2ggdGhlIGlucHV0IGNvbnRyb2xzIHRvIGEgc3BlY2lmaWMgZG9tIGVsZW1lbnQgdG8g
Z2V0IHRoZSBpbnB1dCBmcm9tLgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVs
ZW1lbnQgdGhlIGNvbnRyb2xzIHNob3VsZCBiZSBsaXN0ZW5lZCBmcm9tCisgICAgICogQHBhcmFt
IG5vUHJldmVudERlZmF1bHQgRGVmaW5lcyB3aGV0aGVyIGV2ZW50IGNhdWdodCBieSB0aGUgY29u
dHJvbHMgc2hvdWxkIGNhbGwgcHJldmVudGRlZmF1bHQoKSAoaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L3ByZXZlbnREZWZhdWx0KQorICAgICAq
LworICAgIEFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dC5wcm90b3R5cGUuYXR0YWNoQ29udHJv
bCA9IGZ1bmN0aW9uIChlbGVtZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHZhciBf
dGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBtYW5hZ2VyID0gdGhpcy5jYW1lcmEuZ2V0U2NlbmUo
KS5nYW1lcGFkTWFuYWdlcjsKKyAgICAgICAgdGhpcy5fb25HYW1lcGFkQ29ubmVjdGVkT2JzZXJ2
ZXIgPSBtYW5hZ2VyLm9uR2FtZXBhZENvbm5lY3RlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChn
YW1lcGFkKSB7CisgICAgICAgICAgICBpZiAoZ2FtZXBhZC50eXBlICE9PSBfR2FtZXBhZHNfZ2Ft
ZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJHYW1lcGFkIl0uUE9TRV9FTkFCTEVE
KSB7CisgICAgICAgICAgICAgICAgLy8gcHJpb3JpdGl6ZSBYQk9YIGdhbWVwYWRzLgorICAgICAg
ICAgICAgICAgIGlmICghX3RoaXMuZ2FtZXBhZCB8fCBnYW1lcGFkLnR5cGUgPT09IF9HYW1lcGFk
c19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkdhbWVwYWQiXS5YQk9YKSB7
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmdhbWVwYWQgPSBnYW1lcGFkOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX29uR2Ft
ZXBhZERpc2Nvbm5lY3RlZE9ic2VydmVyID0gbWFuYWdlci5vbkdhbWVwYWREaXNjb25uZWN0ZWRP
YnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZ2FtZXBhZCkgeworICAgICAgICAgICAgaWYgKF90aGlz
LmdhbWVwYWQgPT09IGdhbWVwYWQpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5nYW1lcGFkID0g
bnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuZ2FtZXBhZCA9
IG1hbmFnZXIuZ2V0R2FtZXBhZEJ5VHlwZShfR2FtZXBhZHNfZ2FtZXBhZF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJHYW1lcGFkIl0uWEJPWCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBEZXRhY2ggdGhlIGN1cnJlbnQgY29udHJvbHMgZnJvbSB0aGUgc3BlY2lmaWVkIGRvbSBlbGVt
ZW50LgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdG8gc3RvcCBs
aXN0ZW5pbmcgdGhlIGlucHV0cyBmcm9tCisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhR2Ft
ZXBhZElucHV0LnByb3RvdHlwZS5kZXRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsK
KyAgICAgICAgdGhpcy5jYW1lcmEuZ2V0U2NlbmUoKS5nYW1lcGFkTWFuYWdlci5vbkdhbWVwYWRD
b25uZWN0ZWRPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZl
cik7CisgICAgICAgIHRoaXMuY2FtZXJhLmdldFNjZW5lKCkuZ2FtZXBhZE1hbmFnZXIub25HYW1l
cGFkRGlzY29ubmVjdGVkT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25HYW1lcGFkRGlzY29ubmVj
dGVkT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLmdhbWVwYWQgPSBudWxsOworICAgIH07CisgICAg
LyoqCisgICAgICogVXBkYXRlIHRoZSBjdXJyZW50IGNhbWVyYSBzdGF0ZSBkZXBlbmRpbmcgb24g
dGhlIGlucHV0cyB0aGF0IGhhdmUgYmVlbiB1c2VkIHRoaXMgZnJhbWUuCisgICAgICogVGhpcyBp
cyBhIGR5bmFtaWNhbGx5IGNyZWF0ZWQgbGFtYmRhIHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBw
ZW5hbHR5IG9mIGxvb3BpbmcgZm9yIGlucHV0cyBpbiB0aGUgcmVuZGVyIGxvb3AuCisgICAgICov
CisgICAgQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0LnByb3RvdHlwZS5jaGVja0lucHV0cyA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuZ2FtZXBhZCkgeworICAgICAgICAgICAg
dmFyIGNhbWVyYSA9IHRoaXMuY2FtZXJhOworICAgICAgICAgICAgdmFyIFJTVmFsdWVzID0gdGhp
cy5nYW1lcGFkLnJpZ2h0U3RpY2s7CisgICAgICAgICAgICBpZiAoUlNWYWx1ZXMpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoUlNWYWx1ZXMueCAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBub3JtYWxpemVkUlggPSBSU1ZhbHVlcy54IC8gdGhpcy5nYW1lcGFkUm90YXRpb25TZW5zaWJp
bGl0eTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSWCAhPSAwICYmIE1hdGgu
YWJzKG5vcm1hbGl6ZWRSWCkgPiAwLjAwNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2Ft
ZXJhLmluZXJ0aWFsQWxwaGFPZmZzZXQgKz0gbm9ybWFsaXplZFJYOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChSU1ZhbHVlcy55
ICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWRSWSA9IFJTVmFsdWVz
LnkgLyB0aGlzLmdhbWVwYWRSb3RhdGlvblNlbnNpYmlsaXR5OworICAgICAgICAgICAgICAgICAg
ICBpZiAobm9ybWFsaXplZFJZICE9IDAgJiYgTWF0aC5hYnMobm9ybWFsaXplZFJZKSA+IDAuMDA1
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEuaW5lcnRpYWxCZXRhT2Zmc2V0ICs9
IG5vcm1hbGl6ZWRSWTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBMU1ZhbHVlcyA9IHRoaXMuZ2FtZXBhZC5s
ZWZ0U3RpY2s7CisgICAgICAgICAgICBpZiAoTFNWYWx1ZXMgJiYgTFNWYWx1ZXMueSAhPSAwKSB7
CisgICAgICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWRMWSA9IExTVmFsdWVzLnkgLyB0aGlzLmdh
bWVwYWRNb3ZlU2Vuc2liaWxpdHk7CisgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRMWSAh
PSAwICYmIE1hdGguYWJzKG5vcm1hbGl6ZWRMWSkgPiAwLjAwNSkgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLmNhbWVyYS5pbmVydGlhbFJhZGl1c09mZnNldCAtPSBub3JtYWxpemVkTFk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjdXJyZW50IGludHB1dC4KKyAg
ICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVy
YUdhbWVwYWRJbnB1dC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIkFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dCI7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1
dCBjbGFzcy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQorICAgICAq
LworICAgIEFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dC5wcm90b3R5cGUuZ2V0U2ltcGxlTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJnYW1lcGFkIjsKKyAgICB9OworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0LnByb3Rv
dHlwZSwgImdhbWVwYWRSb3RhdGlvblNlbnNpYmlsaXR5Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dC5wcm90b3R5cGUsICJn
YW1lcGFkTW92ZVNlbnNpYmlsaXR5Iiwgdm9pZCAwKTsKKyAgICByZXR1cm4gQXJjUm90YXRlQ2Ft
ZXJhR2FtZXBhZElucHV0OworfSgpKTsKKworX0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmFJbnB1dFR5cGVzIl1bIkFyY1JvdGF0
ZUNhbWVyYUdhbWVwYWRJbnB1dCJdID0gQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0OworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL0lucHV0cy9hcmNSb3RhdGVDYW1lcmFLZXli
b2FyZE1vdmVJbnB1dC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvSW5wdXRzL2Fy
Y1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXJjUm90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5w
dXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFJbnB1dHNNYW5h
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9jYW1lcmFJ
bnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0V2ZW50c19rZXli
b2FyZEV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vRXZlbnRzL2tleWJvYXJkRXZlbnRzICovICIuL0V2ZW50cy9rZXlib2Fy
ZEV2ZW50cy50cyIpOworCisKKworCisvKioKKyAqIE1hbmFnZSB0aGUga2V5Ym9hcmQgaW5wdXRz
IHRvIGNvbnRyb2wgdGhlIG1vdmVtZW50IG9mIGFuIGFyYyByb3RhdGUgY2FtZXJhLgorICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2N1c3RvbWl6aW5nX2NhbWVyYV9pbnB1
dHMKKyAqLwordmFyIEFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0ID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEFyY1JvdGF0ZUNhbWVyYUtleWJvYXJk
TW92ZUlucHV0KCkgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgbGlzdCBv
ZiBrZXkgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB1cCBhY3Rpb24gKGluY3JlYXNlIGFscGhh
KQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzVXAgPSBbMzhdOworICAgICAgICAvKioK
KyAgICAgICAgICogRGVmaW5lcyB0aGUgbGlzdCBvZiBrZXkgY29kZXMgYXNzb2NpYXRlZCB3aXRo
IHRoZSBkb3duIGFjdGlvbiAoZGVjcmVhc2UgYWxwaGEpCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmtleXNEb3duID0gWzQwXTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhl
IGxpc3Qgb2Yga2V5IGNvZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGVmdCBhY3Rpb24gKGluY3Jl
YXNlIGJldGEpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmtleXNMZWZ0ID0gWzM3XTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhlIGxpc3Qgb2Yga2V5IGNvZGVzIGFzc29j
aWF0ZWQgd2l0aCB0aGUgcmlnaHQgYWN0aW9uIChkZWNyZWFzZSBiZXRhKQorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5rZXlzUmlnaHQgPSBbMzldOworICAgICAgICAvKioKKyAgICAgICAgICog
RGVmaW5lcyB0aGUgbGlzdCBvZiBrZXkgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNldCBh
Y3Rpb24uCisgICAgICAgICAqIFRob3NlIGtleXMgcmVzZXQgdGhlIGNhbWVyYSB0byBpdHMgbGFz
dCBzdG9yZWQgc3RhdGUgKHdpdGggdGhlIG1ldGhvZCBjYW1lcmEuc3RvcmVTdGF0ZSgpKQorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzUmVzZXQgPSBbMjIwXTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIERlZmluZXMgdGhlIHBhbm5pbmcgc2Vuc2liaWxpdHkgb2YgdGhlIGlucHV0cy4K
KyAgICAgICAgICogKEhvdyBmYXN0IGlzIHRoZSBjYW1lcmEgcGFuaW5nKQorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5wYW5uaW5nU2Vuc2liaWxpdHkgPSA1MC4wOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lcyB0aGUgem9vbWluZyBzZW5zaWJpbGl0eSBvZiB0aGUgaW5wdXRzLgor
ICAgICAgICAgKiAoSG93IGZhc3QgaXMgdGhlIGNhbWVyYSB6b29taW5nKQorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy56b29taW5nU2Vuc2liaWxpdHkgPSAyNS4wOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lcyB3ZXRoZXIgbWFpbnRhaW5pbmcgdGhlIGFsdCBrZXkgZG93biBzd2l0
Y2ggdGhlIG1vdmVtZW50IG1vZGUgZnJvbQorICAgICAgICAgKiBvcmllbnRhdGlvbiB0byB6b29t
LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy51c2VBbHRUb1pvb20gPSB0cnVlOworICAgICAg
ICAvKioKKyAgICAgICAgICogUm90YXRpb24gc3BlZWQgb2YgdGhlIGNhbWVyYQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5hbmd1bGFyU3BlZWQgPSAwLjAxOworICAgICAgICB0aGlzLl9rZXlz
ID0gbmV3IEFycmF5KCk7CisgICAgfQorICAgIC8qKgorICAgICAqIEF0dGFjaCB0aGUgaW5wdXQg
Y29udHJvbHMgdG8gYSBzcGVjaWZpYyBkb20gZWxlbWVudCB0byBnZXQgdGhlIGlucHV0IGZyb20u
CisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0aGUgY29udHJvbHMg
c2hvdWxkIGJlIGxpc3RlbmVkIGZyb20KKyAgICAgKiBAcGFyYW0gbm9QcmV2ZW50RGVmYXVsdCBE
ZWZpbmVzIHdoZXRoZXIgZXZlbnQgY2F1Z2h0IGJ5IHRoZSBjb250cm9scyBzaG91bGQgY2FsbCBw
cmV2ZW50ZGVmYXVsdCgpIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2Nz
L1dlYi9BUEkvRXZlbnQvcHJldmVudERlZmF1bHQpCisgICAgICovCisgICAgQXJjUm90YXRlQ2Ft
ZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLmF0dGFjaENvbnRyb2wgPSBmdW5jdGlvbiAo
ZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICBpZiAodGhpcy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zY2VuZSA9IHRoaXMuY2FtZXJhLmdldFNj
ZW5lKCk7CisgICAgICAgIHRoaXMuX2VuZ2luZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOwor
ICAgICAgICB0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZlciA9IHRoaXMuX2VuZ2luZS5vbkNhbnZh
c0JsdXJPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5fa2V5
cyA9IFtdOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fb25LZXlib2FyZE9ic2VydmVyID0g
dGhpcy5fc2NlbmUub25LZXlib2FyZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChpbmZvKSB7Cisg
ICAgICAgICAgICB2YXIgZXZ0ID0gaW5mby5ldmVudDsKKyAgICAgICAgICAgIGlmICghZXZ0Lm1l
dGFLZXkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50eXBlID09PSBfRXZlbnRzX2tleWJv
YXJkRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIktleWJvYXJkRXZlbnRUeXBl
cyJdLktFWURPV04pIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2N0cmxQcmVzc2VkID0g
ZXZ0LmN0cmxLZXk7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9hbHRQcmVzc2VkID0gZXZ0
LmFsdEtleTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmtleXNVcC5pbmRleE9mKGV2
dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNE
b3duLmluZGV4T2YoZXZ0LmtleUNvZGUpICE9PSAtMSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICAgX3RoaXMua2V5c0xlZnQuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5rZXlzUmlnaHQuaW5kZXhPZihldnQua2V5Q29kZSkgIT09
IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5rZXlzUmVzZXQuaW5kZXhPZihl
dnQua2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXgg
PSBfdGhpcy5fa2V5cy5pbmRleE9mKGV2dC5rZXlDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fa2V5cy5wdXNoKGV2dC5rZXlDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChldnQucHJldmVudERlZmF1bHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoX3RoaXMua2V5c1VwLmluZGV4T2YoZXZ0LmtleUNvZGUpICE9
PSAtMSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMua2V5c0Rvd24uaW5kZXhPZihl
dnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5rZXlz
TGVmdC5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF90aGlzLmtleXNSaWdodC5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNSZXNldC5pbmRleE9mKGV2dC5rZXlDb2RlKSAh
PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IF90aGlzLl9rZXlz
LmluZGV4T2YoZXZ0LmtleUNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4
ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fa2V5cy5zcGxpY2Uo
aW5kZXgsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGV2dC5wcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBldnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoq
CisgICAgICogRGV0YWNoIHRoZSBjdXJyZW50IGNvbnRyb2xzIGZyb20gdGhlIHNwZWNpZmllZCBk
b20gZWxlbWVudC4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVtZW50IHRv
IHN0b3AgbGlzdGVuaW5nIHRoZSBpbnB1dHMgZnJvbQorICAgICAqLworICAgIEFyY1JvdGF0ZUNh
bWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZS5kZXRhY2hDb250cm9sID0gZnVuY3Rpb24g
KGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKHRoaXMuX3NjZW5lKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fb25LZXlib2FyZE9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUu
b25LZXlib2FyZE9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uS2V5Ym9hcmRPYnNlcnZlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUub25DYW52YXNCbHVyT2JzZXJ2YWJsZS5y
ZW1vdmUodGhpcy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGhpcy5fb25LZXlib2FyZE9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMu
X29uQ2FudmFzQmx1ck9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9r
ZXlzID0gW107CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgY2Ft
ZXJhIHN0YXRlIGRlcGVuZGluZyBvbiB0aGUgaW5wdXRzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgdGhp
cyBmcmFtZS4KKyAgICAgKiBUaGlzIGlzIGEgZHluYW1pY2FsbHkgY3JlYXRlZCBsYW1iZGEgdG8g
YXZvaWQgdGhlIHBlcmZvcm1hbmNlIHBlbmFsdHkgb2YgbG9vcGluZyBmb3IgaW5wdXRzIGluIHRo
ZSByZW5kZXIgbG9vcC4KKyAgICAgKi8KKyAgICBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dC5wcm90b3R5cGUuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLl9vbktleWJvYXJkT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlz
LmNhbWVyYTsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9r
ZXlzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBrZXlDb2RlID0gdGhp
cy5fa2V5c1tpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKHRoaXMua2V5c0xlZnQuaW5kZXhP
ZihrZXlDb2RlKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N0cmxQ
cmVzc2VkICYmIHRoaXMuY2FtZXJhLl91c2VDdHJsRm9yUGFubmluZykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FtZXJhLmluZXJ0aWFsUGFubmluZ1ggLT0gMSAvIHRoaXMucGFubmluZ1Nl
bnNpYmlsaXR5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLmluZXJ0aWFsQWxwaGFPZmZzZXQg
LT0gdGhpcy5hbmd1bGFyU3BlZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5rZXlzVXAuaW5kZXhPZihrZXlD
b2RlKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N0cmxQcmVzc2Vk
ICYmIHRoaXMuY2FtZXJhLl91c2VDdHJsRm9yUGFubmluZykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FtZXJhLmluZXJ0aWFsUGFubmluZ1kgKz0gMSAvIHRoaXMucGFubmluZ1NlbnNpYmls
aXR5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHRoaXMuX2FsdFByZXNzZWQgJiYgdGhpcy51c2VBbHRUb1pvb20pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbWVyYS5pbmVydGlhbFJhZGl1c09mZnNldCArPSAxIC8gdGhpcy56b29taW5n
U2Vuc2liaWxpdHk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEuaW5lcnRpYWxCZXRhT2Zmc2V0
IC09IHRoaXMuYW5ndWxhclNwZWVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMua2V5c1JpZ2h0LmluZGV4T2Yo
a2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdHJsUHJl
c3NlZCAmJiB0aGlzLmNhbWVyYS5fdXNlQ3RybEZvclBhbm5pbmcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbWVyYS5pbmVydGlhbFBhbm5pbmdYICs9IDEgLyB0aGlzLnBhbm5pbmdTZW5z
aWJpbGl0eTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYS5pbmVydGlhbEFscGhhT2Zmc2V0ICs9
IHRoaXMuYW5ndWxhclNwZWVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMua2V5c0Rvd24uaW5kZXhPZihrZXlD
b2RlKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N0cmxQcmVzc2Vk
ICYmIHRoaXMuY2FtZXJhLl91c2VDdHJsRm9yUGFubmluZykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FtZXJhLmluZXJ0aWFsUGFubmluZ1kgLT0gMSAvIHRoaXMucGFubmluZ1NlbnNpYmls
aXR5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHRoaXMuX2FsdFByZXNzZWQgJiYgdGhpcy51c2VBbHRUb1pvb20pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbWVyYS5pbmVydGlhbFJhZGl1c09mZnNldCAtPSAxIC8gdGhpcy56b29taW5n
U2Vuc2liaWxpdHk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEuaW5lcnRpYWxCZXRhT2Zmc2V0
ICs9IHRoaXMuYW5ndWxhclNwZWVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMua2V5c1Jlc2V0LmluZGV4T2Yo
a2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW1lcmEudXNlSW5w
dXRUb1Jlc3RvcmVTdGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLnJlc3Rv
cmVTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBj
bGFzcyBuYW1lIG9mIHRoZSBjdXJyZW50IGludHB1dC4KKyAgICAgKiBAcmV0dXJucyB0aGUgY2xh
c3MgbmFtZQorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0LnBy
b3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQXJj
Um90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0IHRoZSBmcmllbmRseSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQgY2xhc3MuCisg
ICAgICogQHJldHVybnMgdGhlIGlucHV0IGZyaWVuZGx5IG5hbWUKKyAgICAgKi8KKyAgICBBcmNS
b3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUuZ2V0U2ltcGxlTmFtZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJrZXlib2FyZCI7CisgICAgfTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3Rv
dHlwZSwgImtleXNVcCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNS
b3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJrZXlzRG93biIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1v
dmVJbnB1dC5wcm90b3R5cGUsICJrZXlzTGVmdCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJr
ZXlzUmlnaHQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRl
Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLCAia2V5c1Jlc2V0Iiwgdm9pZCAwKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlu
cHV0LnByb3RvdHlwZSwgInBhbm5pbmdTZW5zaWJpbGl0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5
cGUsICJ6b29taW5nU2Vuc2liaWxpdHkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisg
ICAgXSwgQXJjUm90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLCAidXNlQWx0
VG9ab29tIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNh
bWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZSwgImFuZ3VsYXJTcGVlZCIsIHZvaWQgMCk7
CisgICAgcmV0dXJuIEFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0OworfSgpKTsKKwor
X0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJDYW1lcmFJbnB1dFR5cGVzIl1bIkFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0Il0g
PSBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dDsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYU1vdXNlV2hl
ZWxJbnB1dC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFyY1JvdGF0ZUNh
bWVyYU1vdXNlV2hlZWxJbnB1dCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJBcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFy
Y1JvdGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0
b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFu
YWdlciAqLyAiLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0V2ZW50cy9wb2ludGVyRXZl
bnRzICovICIuL0V2ZW50cy9wb2ludGVyRXZlbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnNjYWxhciAqLyAiLi9NYXRo
cy9tYXRoLnNjYWxhci50cyIpOworCisKKworCisKKy8qKgorICogTWFuYWdlIHRoZSBtb3VzZSB3
aGVlbCBpbnB1dHMgdG8gY29udHJvbCBhbiBhcmMgcm90YXRlIGNhbWVyYS4KKyAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRzCisg
Ki8KK3ZhciBBcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0
KCkgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBTZXQgdGhlIG1vdXNlIHdoZWVs
IHByZWNpc2lvbiBvciBob3cgZmFzdCBpcyB0aGUgY2FtZXJhIHpvb21pbmcuCisgICAgICAgICAq
LworICAgICAgICB0aGlzLndoZWVsUHJlY2lzaW9uID0gMy4wOworICAgICAgICAvKioKKyAgICAg
ICAgICogd2hlZWxEZWx0YVBlcmNlbnRhZ2Ugd2lsbCBiZSB1c2VkIGluc3RlYWQgb2Ygd2hlZWxQ
cmVjaXNpb24gaWYgZGlmZmVyZW50IGZyb20gMC4KKyAgICAgICAgICogSXQgZGVmaW5lcyB0aGUg
cGVyY2VudGFnZSBvZiBjdXJyZW50IGNhbWVyYS5yYWRpdXMgdG8gdXNlIGFzIGRlbHRhIHdoZW4g
d2hlZWwgaXMgdXNlZC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMud2hlZWxEZWx0YVBlcmNl
bnRhZ2UgPSAwOworICAgIH0KKyAgICBBcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQucHJv
dG90eXBlLmNvbXB1dGVEZWx0YUZyb21Nb3VzZVdoZWVsTGVnYWN5RXZlbnQgPSBmdW5jdGlvbiAo
bW91c2VXaGVlbExlZ2FjeUV2ZW50LCByYWRpdXMpIHsKKyAgICAgICAgdmFyIGRlbHRhID0gMDsK
KyAgICAgICAgdmFyIHdoZWVsRGVsdGEgPSAobW91c2VXaGVlbExlZ2FjeUV2ZW50LndoZWVsRGVs
dGEgKiAwLjAxICogdGhpcy53aGVlbERlbHRhUGVyY2VudGFnZSkgKiByYWRpdXM7CisgICAgICAg
IGlmIChtb3VzZVdoZWVsTGVnYWN5RXZlbnQud2hlZWxEZWx0YSA+IDApIHsKKyAgICAgICAgICAg
IGRlbHRhID0gd2hlZWxEZWx0YSAvICgxLjAgKyB0aGlzLndoZWVsRGVsdGFQZXJjZW50YWdlKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlbHRhID0gd2hlZWxEZWx0
YSAqICgxLjAgKyB0aGlzLndoZWVsRGVsdGFQZXJjZW50YWdlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZGVsdGE7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIGlucHV0
IGNvbnRyb2xzIHRvIGEgc3BlY2lmaWMgZG9tIGVsZW1lbnQgdG8gZ2V0IHRoZSBpbnB1dCBmcm9t
LgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdGhlIGNvbnRyb2xz
IHNob3VsZCBiZSBsaXN0ZW5lZCBmcm9tCisgICAgICogQHBhcmFtIG5vUHJldmVudERlZmF1bHQg
RGVmaW5lcyB3aGV0aGVyIGV2ZW50IGNhdWdodCBieSB0aGUgY29udHJvbHMgc2hvdWxkIGNhbGwg
cHJldmVudGRlZmF1bHQoKSAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9j
cy9XZWIvQVBJL0V2ZW50L3ByZXZlbnREZWZhdWx0KQorICAgICAqLworICAgIEFyY1JvdGF0ZUNh
bWVyYU1vdXNlV2hlZWxJbnB1dC5wcm90b3R5cGUuYXR0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChl
bGVtZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIHRoaXMuX3doZWVsID0gZnVuY3Rpb24gKHAsIHMpIHsKKyAgICAgICAgICAgIC8vc2Fu
aXR5IGNoZWNrIC0gdGhpcyBzaG91bGQgYmUgYSBQb2ludGVyV2hlZWwgZXZlbnQuCisgICAgICAg
ICAgICBpZiAocC50eXBlICE9PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSV0hFRUwpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgZXZlbnQg
PSBwLmV2ZW50OworICAgICAgICAgICAgdmFyIGRlbHRhID0gMDsKKyAgICAgICAgICAgIHZhciBt
b3VzZVdoZWVsTGVnYWN5RXZlbnQgPSBldmVudDsKKyAgICAgICAgICAgIGlmIChtb3VzZVdoZWVs
TGVnYWN5RXZlbnQud2hlZWxEZWx0YSkgeworICAgICAgICAgICAgICAgIGlmIChfdGhpcy53aGVl
bERlbHRhUGVyY2VudGFnZSkgeworICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IF90aGlzLmNv
bXB1dGVEZWx0YUZyb21Nb3VzZVdoZWVsTGVnYWN5RXZlbnQobW91c2VXaGVlbExlZ2FjeUV2ZW50
LCBfdGhpcy5jYW1lcmEucmFkaXVzKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgem9vbWlu
ZyBpbiwgZXN0aW1hdGUgdGhlIHRhcmdldCByYWRpdXMgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUg
dGhlIGRlbHRhIGZvciBpbmVydGlhCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBz
dG9wIG11bHRpcGxlIHNjcm9sbCBldmVudHMgem9vbWluZyBpbiBmcm9tIGFkZGluZyB0b28gbXVj
aCBpbmVydGlhCisgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSA+IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBlc3RpbWF0ZWRUYXJnZXRSYWRpdXMgPSBfdGhpcy5jYW1lcmEu
cmFkaXVzOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldEluZXJ0aWEgPSBfdGhp
cy5jYW1lcmEuaW5lcnRpYWxSYWRpdXNPZmZzZXQgKyBkZWx0YTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjAgJiYgTWF0aC5hYnModGFyZ2V0SW5lcnRpYSkg
PiAwLjAwMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGVkVGFy
Z2V0UmFkaXVzIC09IHRhcmdldEluZXJ0aWE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGFyZ2V0SW5lcnRpYSAqPSBfdGhpcy5jYW1lcmEuaW5lcnRpYTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZFRhcmdldFJhZGl1cyA9
IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIi
XS5DbGFtcChlc3RpbWF0ZWRUYXJnZXRSYWRpdXMsIDAsIE51bWJlci5NQVhfVkFMVUUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBfdGhpcy5jb21wdXRlRGVsdGFGcm9tTW91c2VX
aGVlbExlZ2FjeUV2ZW50KG1vdXNlV2hlZWxMZWdhY3lFdmVudCwgZXN0aW1hdGVkVGFyZ2V0UmFk
aXVzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBtb3VzZVdoZWVsTGVn
YWN5RXZlbnQud2hlZWxEZWx0YSAvIChfdGhpcy53aGVlbFByZWNpc2lvbiAqIDQwKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2YXIgZGVsdGFWYWx1ZSA9IGV2ZW50LmRlbHRhWSB8fCBldmVudC5kZXRhaWw7Cisg
ICAgICAgICAgICAgICAgZGVsdGEgPSAtZGVsdGFWYWx1ZSAvIF90aGlzLndoZWVsUHJlY2lzaW9u
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlbHRhKSB7CisgICAgICAgICAgICAg
ICAgX3RoaXMuY2FtZXJhLmluZXJ0aWFsUmFkaXVzT2Zmc2V0ICs9IGRlbHRhOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9OworICAgICAgICB0aGlzLl9vYnNlcnZlciA9IHRoaXMuY2FtZXJhLmdldFNjZW5lKCku
b25Qb2ludGVyT2JzZXJ2YWJsZS5hZGQodGhpcy5fd2hlZWwsIF9FdmVudHNfcG9pbnRlckV2ZW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5U
RVJXSEVFTCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRhY2ggdGhlIGN1cnJlbnQgY29u
dHJvbHMgZnJvbSB0aGUgc3BlY2lmaWVkIGRvbSBlbGVtZW50LgorICAgICAqIEBwYXJhbSBlbGVt
ZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdGhlIGlucHV0cyBmcm9t
CisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LnByb3RvdHlwZS5k
ZXRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKHRoaXMuX29i
c2VydmVyICYmIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMuY2FtZXJhLmdldFNjZW5lKCku
b25Qb2ludGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb2JzZXJ2ZXIpOworICAgICAgICAgICAg
dGhpcy5fb2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fd2hlZWwgPSBudWxsOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9m
IHRoZSBjdXJyZW50IGludHB1dC4KKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAg
ICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dC5wcm90b3R5cGUuZ2V0Q2xh
c3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkFyY1JvdGF0ZUNhbWVyYU1v
dXNlV2hlZWxJbnB1dCI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5
IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBjbGFzcy4KKyAgICAgKiBAcmV0dXJucyB0
aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYU1vdXNl
V2hlZWxJbnB1dC5wcm90b3R5cGUuZ2V0U2ltcGxlTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICJtb3VzZXdoZWVsIjsKKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LnByb3RvdHlwZSwgIndoZWVsUHJlY2lz
aW9uIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVy
YU1vdXNlV2hlZWxJbnB1dC5wcm90b3R5cGUsICJ3aGVlbERlbHRhUGVyY2VudGFnZSIsIHZvaWQg
MCk7CisgICAgcmV0dXJuIEFyY1JvdGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dDsKK30oKSk7CisK
K19DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQ2FtZXJhSW5wdXRUeXBlcyJdWyJBcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQiXSA9
IEFyY1JvdGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dDsKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dC50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBcmNSb3RhdGVDYW1lcmFQb2ludGVy
c0lucHV0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1JvdGF0ZUNh
bWVyYVBvaW50ZXJzSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFyY1JvdGF0ZUNhbWVyYVBv
aW50ZXJzSW5wdXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAi
Li4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2Rl
Y29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFJ
bnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJh
cy9jYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0Nh
bWVyYXNfSW5wdXRzX0Jhc2VDYW1lcmFQb2ludGVyc0lucHV0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL0lucHV0cy9C
YXNlQ2FtZXJhUG9pbnRlcnNJbnB1dCAqLyAiLi9DYW1lcmFzL0lucHV0cy9CYXNlQ2FtZXJhUG9p
bnRlcnNJbnB1dC50cyIpOworCisKKworCisvKioKKyAqIE1hbmFnZSB0aGUgcG9pbnRlcnMgaW5w
dXRzIHRvIGNvbnRyb2wgYW4gYXJjIHJvdGF0ZSBjYW1lcmEuCisgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXppbmdfY2FtZXJhX2lucHV0cworICovCit2YXIg
QXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChf
c3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVu
ZHMiXShBcmNSb3RhdGVDYW1lcmFQb2ludGVyc0lucHV0LCBfc3VwZXIpOworICAgIGZ1bmN0aW9u
IEFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9z
dXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwor
ICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgYnV0dG9ucyBhc3NvY2lhdGVkIHdp
dGggdGhlIGlucHV0IHRvIGhhbmRsZSBjYW1lcmEgbW92ZS4KKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLmJ1dHRvbnMgPSBbMCwgMSwgMl07CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZp
bmVzIHRoZSBwb2ludGVyIGFuZ3VsYXIgc2Vuc2liaWxpdHkgIGFsb25nIHRoZSBYIGF4aXMgb3Ig
aG93IGZhc3QgaXMKKyAgICAgICAgICogdGhlIGNhbWVyYSByb3RhdGluZy4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLmFuZ3VsYXJTZW5zaWJpbGl0eVggPSAxMDAwLjA7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBwb2ludGVyIGFuZ3VsYXIgc2Vuc2liaWxpdHkgYWxv
bmcgdGhlIFkgYXhpcyBvciBob3cgZmFzdCBpcworICAgICAgICAgKiB0aGUgY2FtZXJhIHJvdGF0
aW5nLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYW5ndWxhclNlbnNpYmlsaXR5WSA9IDEw
MDAuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhlIHBvaW50ZXIgcGluY2gg
cHJlY2lzaW9uIG9yIGhvdyBmYXN0IGlzIHRoZSBjYW1lcmEgem9vbWluZy4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLnBpbmNoUHJlY2lzaW9uID0gMTIuMDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIHBpbmNoRGVsdGFQZXJjZW50YWdlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHBpbmNo
UHJlY2lzaW9uIGlmIGRpZmZlcmVudAorICAgICAgICAgKiBmcm9tIDAuCisgICAgICAgICAqIEl0
IGRlZmluZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgY3VycmVudCBjYW1lcmEucmFkaXVzIHRvIHVzZSBh
cyBkZWx0YSB3aGVuCisgICAgICAgICAqIHBpbmNoIHpvb20gaXMgdXNlZC4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLnBpbmNoRGVsdGFQZXJjZW50YWdlID0gMDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIERlZmluZXMgdGhlIHBvaW50ZXIgcGFubmluZyBzZW5zaWJpbGl0eSBvciBob3cg
ZmFzdCBpcyB0aGUgY2FtZXJhIG1vdmluZy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnBh
bm5pbmdTZW5zaWJpbGl0eSA9IDEwMDAuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZXMgd2hldGhlciBwYW5uaW5nICgyIGZpbmdlcnMgc3dpcGUpIGlzIGVuYWJsZWQgdGhyb3VnaCBt
dWx0aXRvdWNoLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubXVsdGlUb3VjaFBhbm5pbmcg
PSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB3aGV0aGVyIHBhbm5pbmcg
aXMgZW5hYmxlZCBmb3IgYm90aCBwYW4gKDIgZmluZ2VycyBzd2lwZSkgYW5kCisgICAgICAgICAq
IHpvb20gKHBpbmNoKSB0aHJvdWdoIG11bHRpdG91Y2guCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5tdWx0aVRvdWNoUGFuQW5kWm9vbSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBSZXZlcnMgcGluY2ggYWN0aW9uIGRpcmVjdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLnBpbmNoSW53YXJkcyA9IHRydWU7CisgICAgICAgIF90aGlzLl9pc1BhbkNsaWNrID0gZmFs
c2U7CisgICAgICAgIF90aGlzLl90d29GaW5nZXJBY3Rpdml0eUNvdW50ID0gMDsKKyAgICAgICAg
X3RoaXMuX2lzUGluY2hpbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0K
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjdXJyZW50IGlucHV0
LgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgQXJjUm90YXRl
Q2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gIkFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQiOworICAgIH07
CisgICAgLyoqCisgICAgICogQ2FsbGVkIG9uIHBvaW50ZXIgUE9JTlRFUk1PVkUgZXZlbnQgaWYg
b25seSBhIHNpbmdsZSB0b3VjaCBpcyBhY3RpdmUuCisgICAgICovCisgICAgQXJjUm90YXRlQ2Ft
ZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUub25Ub3VjaCA9IGZ1bmN0aW9uIChwb2ludCwgb2Zm
c2V0WCwgb2Zmc2V0WSkgeworICAgICAgICBpZiAodGhpcy5wYW5uaW5nU2Vuc2liaWxpdHkgIT09
IDAgJiYKKyAgICAgICAgICAgICgodGhpcy5fY3RybEtleSAmJiB0aGlzLmNhbWVyYS5fdXNlQ3Ry
bEZvclBhbm5pbmcpIHx8IHRoaXMuX2lzUGFuQ2xpY2spKSB7CisgICAgICAgICAgICB0aGlzLmNh
bWVyYS5pbmVydGlhbFBhbm5pbmdYICs9IC1vZmZzZXRYIC8gdGhpcy5wYW5uaW5nU2Vuc2liaWxp
dHk7CisgICAgICAgICAgICB0aGlzLmNhbWVyYS5pbmVydGlhbFBhbm5pbmdZICs9IG9mZnNldFkg
LyB0aGlzLnBhbm5pbmdTZW5zaWJpbGl0eTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHRoaXMuY2FtZXJhLmluZXJ0aWFsQWxwaGFPZmZzZXQgLT0gb2Zmc2V0WCAvIHRo
aXMuYW5ndWxhclNlbnNpYmlsaXR5WDsKKyAgICAgICAgICAgIHRoaXMuY2FtZXJhLmluZXJ0aWFs
QmV0YU9mZnNldCAtPSBvZmZzZXRZIC8gdGhpcy5hbmd1bGFyU2Vuc2liaWxpdHlZOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgb24gcG9pbnRlciBQT0lOVEVSRE9V
QkxFVEFQIGV2ZW50LgorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQu
cHJvdG90eXBlLm9uRG91YmxlVGFwID0gZnVuY3Rpb24gKHR5cGUpIHsKKyAgICAgICAgaWYgKHRo
aXMuY2FtZXJhLnVzZUlucHV0VG9SZXN0b3JlU3RhdGUpIHsKKyAgICAgICAgICAgIHRoaXMuY2Ft
ZXJhLnJlc3RvcmVTdGF0ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
YWxsZWQgb24gcG9pbnRlciBQT0lOVEVSTU9WRSBldmVudCBpZiBtdWx0aXBsZSB0b3VjaGVzIGFy
ZSBhY3RpdmUuCisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90
b3R5cGUub25NdWx0aVRvdWNoID0gZnVuY3Rpb24gKHBvaW50QSwgcG9pbnRCLCBwcmV2aW91c1Bp
bmNoU3F1YXJlZERpc3RhbmNlLCBwaW5jaFNxdWFyZWREaXN0YW5jZSwgcHJldmlvdXNNdWx0aVRv
dWNoUGFuUG9zaXRpb24sIG11bHRpVG91Y2hQYW5Qb3NpdGlvbikgeworICAgICAgICBpZiAocHJl
dmlvdXNQaW5jaFNxdWFyZWREaXN0YW5jZSA9PT0gMCAmJiBwcmV2aW91c011bHRpVG91Y2hQYW5Q
b3NpdGlvbiA9PT0gbnVsbCkgeworICAgICAgICAgICAgLy8gRmlyc3QgdGltZSB0aGlzIG1ldGhv
ZCBpcyBjYWxsZWQgZm9yIG5ldyBwaW5jaC4KKyAgICAgICAgICAgIC8vIE5leHQgdGltZSB0aGlz
IGlzIGNhbGxlZCB0aGVyZSB3aWxsIGJlIGEKKyAgICAgICAgICAgIC8vIHByZXZpb3VzUGluY2hT
cXVhcmVkRGlzdGFuY2UgYW5kIHBpbmNoU3F1YXJlZERpc3RhbmNlIHRvIGNvbXBhcmUuCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBpbmNoU3F1YXJlZERpc3Rh
bmNlID09PSAwICYmIG11bHRpVG91Y2hQYW5Qb3NpdGlvbiA9PT0gbnVsbCkgeworICAgICAgICAg
ICAgLy8gTGFzdCB0aW1lIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgcGlu
Y2guCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRpcmVjdGlv
biA9IHRoaXMucGluY2hJbndhcmRzID8gMSA6IC0xOworICAgICAgICBpZiAodGhpcy5tdWx0aVRv
dWNoUGFuQW5kWm9vbSkgeworICAgICAgICAgICAgaWYgKHRoaXMucGluY2hEZWx0YVBlcmNlbnRh
Z2UpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYS5pbmVydGlhbFJhZGl1c09mZnNldCAr
PQorICAgICAgICAgICAgICAgICAgICAocGluY2hTcXVhcmVkRGlzdGFuY2UgLSBwcmV2aW91c1Bp
bmNoU3F1YXJlZERpc3RhbmNlKSAqIDAuMDAxICoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuY2FtZXJhLnJhZGl1cyAqIHRoaXMucGluY2hEZWx0YVBlcmNlbnRhZ2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYS5pbmVy
dGlhbFJhZGl1c09mZnNldCArPQorICAgICAgICAgICAgICAgICAgICAocGluY2hTcXVhcmVkRGlz
dGFuY2UgLSBwcmV2aW91c1BpbmNoU3F1YXJlZERpc3RhbmNlKSAvCisgICAgICAgICAgICAgICAg
ICAgICAgICAodGhpcy5waW5jaFByZWNpc2lvbiAqIGRpcmVjdGlvbiAqCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHRoaXMuYW5ndWxhclNlbnNpYmlsaXR5WCArIHRoaXMuYW5ndWxhclNl
bnNpYmlsaXR5WSkgLyAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLnBh
bm5pbmdTZW5zaWJpbGl0eSAhPT0gMCAmJgorICAgICAgICAgICAgICAgIHByZXZpb3VzTXVsdGlU
b3VjaFBhblBvc2l0aW9uICYmIG11bHRpVG91Y2hQYW5Qb3NpdGlvbikgeworICAgICAgICAgICAg
ICAgIHZhciBtb3ZlRGVsdGFYID0gbXVsdGlUb3VjaFBhblBvc2l0aW9uLnggLSBwcmV2aW91c011
bHRpVG91Y2hQYW5Qb3NpdGlvbi54OworICAgICAgICAgICAgICAgIHZhciBtb3ZlRGVsdGFZID0g
bXVsdGlUb3VjaFBhblBvc2l0aW9uLnkgLSBwcmV2aW91c011bHRpVG91Y2hQYW5Qb3NpdGlvbi55
OworICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLmluZXJ0aWFsUGFubmluZ1ggKz0gLW1vdmVE
ZWx0YVggLyB0aGlzLnBhbm5pbmdTZW5zaWJpbGl0eTsKKyAgICAgICAgICAgICAgICB0aGlzLmNh
bWVyYS5pbmVydGlhbFBhbm5pbmdZICs9IG1vdmVEZWx0YVkgLyB0aGlzLnBhbm5pbmdTZW5zaWJp
bGl0eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHRoaXMuX3R3b0ZpbmdlckFjdGl2aXR5Q291bnQrKzsKKyAgICAgICAgICAgIHZhciBwcmV2
aW91c1BpbmNoRGlzdGFuY2UgPSBNYXRoLnNxcnQocHJldmlvdXNQaW5jaFNxdWFyZWREaXN0YW5j
ZSk7CisgICAgICAgICAgICB2YXIgcGluY2hEaXN0YW5jZSA9IE1hdGguc3FydChwaW5jaFNxdWFy
ZWREaXN0YW5jZSk7CisgICAgICAgICAgICBpZiAodGhpcy5faXNQaW5jaGluZyB8fAorICAgICAg
ICAgICAgICAgICh0aGlzLl90d29GaW5nZXJBY3Rpdml0eUNvdW50IDwgMjAgJiYKKyAgICAgICAg
ICAgICAgICAgICAgTWF0aC5hYnMocGluY2hEaXN0YW5jZSAtIHByZXZpb3VzUGluY2hEaXN0YW5j
ZSkgPgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEucGluY2hUb1Bhbk1heERp
c3RhbmNlKSkgeworICAgICAgICAgICAgICAgIC8vIFNpbmNlIHBpbmNoIGhhcyBub3QgYmVlbiBh
Y3RpdmUgbG9uZywgYXNzdW1lIHdlIGludGVuZCB0byB6b29tLgorICAgICAgICAgICAgICAgIGlm
ICh0aGlzLnBpbmNoRGVsdGFQZXJjZW50YWdlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
Y2FtZXJhLmluZXJ0aWFsUmFkaXVzT2Zmc2V0ICs9CisgICAgICAgICAgICAgICAgICAgICAgICAo
cGluY2hTcXVhcmVkRGlzdGFuY2UgLSBwcmV2aW91c1BpbmNoU3F1YXJlZERpc3RhbmNlKSAqIDAu
MDAxICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYS5yYWRpdXMgKiB0
aGlzLnBpbmNoRGVsdGFQZXJjZW50YWdlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEuaW5lcnRpYWxSYWRp
dXNPZmZzZXQgKz0KKyAgICAgICAgICAgICAgICAgICAgICAgIChwaW5jaFNxdWFyZWREaXN0YW5j
ZSAtIHByZXZpb3VzUGluY2hTcXVhcmVkRGlzdGFuY2UpIC8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodGhpcy5waW5jaFByZWNpc2lvbiAqIGRpcmVjdGlvbiAqCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh0aGlzLmFuZ3VsYXJTZW5zaWJpbGl0eVggKyB0aGlzLmFuZ3Vs
YXJTZW5zaWJpbGl0eVkpIC8gMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vIFNpbmNlIHdlIGFyZSBwaW5jaGluZywgcmVtYWluIHBpbmNoaW5nIG9uIG5leHQgaXRlcmF0
aW9uLgorICAgICAgICAgICAgICAgIHRoaXMuX2lzUGluY2hpbmcgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gUGF1c2UgYmV0d2Vl
biBwaW5jaCBzdGFydGluZyBhbmQgbW92aW5nIGltcGxpZXMgbm90IGEgem9vbSBldmVudC4KKyAg
ICAgICAgICAgICAgICAvLyBQYW4gaW5zdGVhZC4KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5w
YW5uaW5nU2Vuc2liaWxpdHkgIT09IDAgJiYgdGhpcy5tdWx0aVRvdWNoUGFubmluZyAmJgorICAg
ICAgICAgICAgICAgICAgICBtdWx0aVRvdWNoUGFuUG9zaXRpb24gJiYgcHJldmlvdXNNdWx0aVRv
dWNoUGFuUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1vdmVEZWx0YVggPSBt
dWx0aVRvdWNoUGFuUG9zaXRpb24ueCAtIHByZXZpb3VzTXVsdGlUb3VjaFBhblBvc2l0aW9uLng7
CisgICAgICAgICAgICAgICAgICAgIHZhciBtb3ZlRGVsdGFZID0gbXVsdGlUb3VjaFBhblBvc2l0
aW9uLnkgLSBwcmV2aW91c011bHRpVG91Y2hQYW5Qb3NpdGlvbi55OworICAgICAgICAgICAgICAg
ICAgICB0aGlzLmNhbWVyYS5pbmVydGlhbFBhbm5pbmdYICs9IC1tb3ZlRGVsdGFYIC8gdGhpcy5w
YW5uaW5nU2Vuc2liaWxpdHk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLmluZXJ0
aWFsUGFubmluZ1kgKz0gbW92ZURlbHRhWSAvIHRoaXMucGFubmluZ1NlbnNpYmlsaXR5OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogQ2FsbGVkIGVhY2ggdGltZSBhIG5ldyBQT0lOVEVSRE9XTiBldmVudCBvY2N1cnMu
IEllLCBmb3IgZWFjaCBidXR0b24KKyAgICAgKiBwcmVzcy4KKyAgICAgKi8KKyAgICBBcmNSb3Rh
dGVDYW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZS5vbkJ1dHRvbkRvd24gPSBmdW5jdGlvbiAo
ZXZ0KSB7CisgICAgICAgIHRoaXMuX2lzUGFuQ2xpY2sgPSBldnQuYnV0dG9uID09PSB0aGlzLmNh
bWVyYS5fcGFubmluZ01vdXNlQnV0dG9uOworICAgIH07CisgICAgLyoqCisgICAgICogQ2FsbGVk
IGVhY2ggdGltZSBhIG5ldyBQT0lOVEVSVVAgZXZlbnQgb2NjdXJzLiBJZSwgZm9yIGVhY2ggYnV0
dG9uCisgICAgICogcmVsZWFzZS4KKyAgICAgKi8KKyAgICBBcmNSb3RhdGVDYW1lcmFQb2ludGVy
c0lucHV0LnByb3RvdHlwZS5vbkJ1dHRvblVwID0gZnVuY3Rpb24gKGV2dCkgeworICAgICAgICB0
aGlzLl90d29GaW5nZXJBY3Rpdml0eUNvdW50ID0gMDsKKyAgICAgICAgdGhpcy5faXNQaW5jaGlu
ZyA9IGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogQ2FsbGVkIHdoZW4gd2luZG93IGJl
Y29tZXMgaW5hY3RpdmUuCisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1
dC5wcm90b3R5cGUub25Mb3N0Rm9jdXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2lz
UGFuQ2xpY2sgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdHdvRmluZ2VyQWN0aXZpdHlDb3VudCA9
IDA7CisgICAgICAgIHRoaXMuX2lzUGluY2hpbmcgPSBmYWxzZTsKKyAgICB9OworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUs
ICJidXR0b25zIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0
ZUNhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLCAiYW5ndWxhclNlbnNpYmlsaXR5WCIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmFQb2ludGVy
c0lucHV0LnByb3RvdHlwZSwgImFuZ3VsYXJTZW5zaWJpbGl0eVkiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5
cGUsICJwaW5jaFByZWNpc2lvbiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBd
LCBBcmNSb3RhdGVDYW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZSwgInBpbmNoRGVsdGFQZXJj
ZW50YWdlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNh
bWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLCAicGFubmluZ1NlbnNpYmlsaXR5Iiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5w
dXQucHJvdG90eXBlLCAibXVsdGlUb3VjaFBhbm5pbmciLCB2b2lkIDApOworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6
ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUsICJt
dWx0aVRvdWNoUGFuQW5kWm9vbSIsIHZvaWQgMCk7CisgICAgcmV0dXJuIEFyY1JvdGF0ZUNhbWVy
YVBvaW50ZXJzSW5wdXQ7Cit9KF9DYW1lcmFzX0lucHV0c19CYXNlQ2FtZXJhUG9pbnRlcnNJbnB1
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dCJd
KSk7CisKK19DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siQ2FtZXJhSW5wdXRUeXBlcyJdWyJBcmNSb3RhdGVDYW1lcmFQb2ludGVyc0lucHV0
Il0gPQorICAgIEFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQ7CisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3JpZW50YXRp
b25JbnB1dC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL0lucHV0cy9h
cmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5wdXQudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVu
dGF0aW9uSW5wdXQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90
YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBB
cmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5wdXQ7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2Ft
ZXJhSW5wdXRzTWFuYWdlciAqLyAiLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19hcmNSb3RhdGVDYW1lcmFJbnB1dHNN
YW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9DYW1lcmFzL2FyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2Ft
ZXJhcy9hcmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisKKworLyoqCisgKiBBZGQg
b3JpZW50YXRpb24gaW5wdXQgc3VwcG9ydCB0byB0aGUgaW5wdXQgbWFuYWdlci4KKyAqIEByZXR1
cm5zIHRoZSBjdXJyZW50IGlucHV0IG1hbmFnZXIKKyAqLworX0NhbWVyYXNfYXJjUm90YXRlQ2Ft
ZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBcmNSb3RhdGVD
YW1lcmFJbnB1dHNNYW5hZ2VyIl0ucHJvdG90eXBlLmFkZFZSRGV2aWNlT3JpZW50YXRpb24gPSBm
dW5jdGlvbiAoKSB7CisgICAgdGhpcy5hZGQobmV3IEFyY1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3Jp
ZW50YXRpb25JbnB1dCgpKTsKKyAgICByZXR1cm4gdGhpczsKK307CisvKioKKyAqIE1hbmFnZSB0
aGUgZGV2aWNlIG9yaWVudGF0aW9uIGlucHV0cyAoZ3lyb3Njb3BlKSB0byBjb250cm9sIGFuIGFy
YyByb3RhdGUgY2FtZXJhLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3Rv
L2N1c3RvbWl6aW5nX2NhbWVyYV9pbnB1dHMKKyAqLwordmFyIEFyY1JvdGF0ZUNhbWVyYVZSRGV2
aWNlT3JpZW50YXRpb25JbnB1dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAv
KioKKyAgICAgKiBJbnN0YW50aWF0ZSBhIG5ldyBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVu
dGF0aW9uSW5wdXQuCisgICAgICovCisgICAgZnVuY3Rpb24gQXJjUm90YXRlQ2FtZXJhVlJEZXZp
Y2VPcmllbnRhdGlvbklucHV0KCkgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBh
IGNvcnJlY3Rpb24gZmFjdG9yIGFwcGxpZWQgb24gdGhlIGFscGhhIHZhbHVlIHJldHJpZXZlZCBm
cm9tIHRoZSBvcmllbnRhdGlvbiBldmVudHMuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmFs
cGhhQ29ycmVjdGlvbiA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIGEgY29y
cmVjdGlvbiBmYWN0b3IgYXBwbGllZCBvbiB0aGUgZ2FtbWEgdmFsdWUgcmV0cmlldmVkIGZyb20g
dGhlIG9yaWVudGF0aW9uIGV2ZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZ2FtbWFD
b3JyZWN0aW9uID0gMTsKKyAgICAgICAgdGhpcy5fYWxwaGEgPSAwOworICAgICAgICB0aGlzLl9n
YW1tYSA9IDA7CisgICAgICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2Rl
dmljZU9yaWVudGF0aW9uSGFuZGxlciA9IHRoaXMuX29uT3JpZW50YXRpb25FdmVudC5iaW5kKHRo
aXMpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIGlucHV0IGNvbnRyb2xzIHRv
IGEgc3BlY2lmaWMgZG9tIGVsZW1lbnQgdG8gZ2V0IHRoZSBpbnB1dCBmcm9tLgorICAgICAqIEBw
YXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdGhlIGNvbnRyb2xzIHNob3VsZCBiZSBs
aXN0ZW5lZCBmcm9tCisgICAgICogQHBhcmFtIG5vUHJldmVudERlZmF1bHQgRGVmaW5lcyB3aGV0
aGVyIGV2ZW50IGNhdWdodCBieSB0aGUgY29udHJvbHMgc2hvdWxkIGNhbGwgcHJldmVudGRlZmF1
bHQoKSAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2
ZW50L3ByZXZlbnREZWZhdWx0KQorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYVZSRGV2aWNl
T3JpZW50YXRpb25JbnB1dC5wcm90b3R5cGUuYXR0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVt
ZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHRoaXMuY2FtZXJhLmF0dGFjaENvbnRy
b2woZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCk7CisgICAgICAgIHZhciBob3N0V2luZG93ID0g
dGhpcy5jYW1lcmEuZ2V0U2NlbmUoKS5nZXRFbmdpbmUoKS5nZXRIb3N0V2luZG93KCk7CisgICAg
ICAgIGhvc3RXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZGV2aWNlb3JpZW50YXRpb24iLCB0aGlz
Ll9kZXZpY2VPcmllbnRhdGlvbkhhbmRsZXIpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5wdXQucHJvdG90eXBlLl9v
bk9yaWVudGF0aW9uRXZlbnQgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgIGlmIChldnQuYWxw
aGEgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuX2FscGhhID0gKCtldnQuYWxwaGEgfCAw
KSAqIHRoaXMuYWxwaGFDb3JyZWN0aW9uOworICAgICAgICB9CisgICAgICAgIGlmIChldnQuZ2Ft
bWEgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuX2dhbW1hID0gKCtldnQuZ2FtbWEgfCAw
KSAqIHRoaXMuZ2FtbWFDb3JyZWN0aW9uOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2RpcnR5
ID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgY3VycmVudCBjYW1l
cmEgc3RhdGUgZGVwZW5kaW5nIG9uIHRoZSBpbnB1dHMgdGhhdCBoYXZlIGJlZW4gdXNlZCB0aGlz
IGZyYW1lLgorICAgICAqIFRoaXMgaXMgYSBkeW5hbWljYWxseSBjcmVhdGVkIGxhbWJkYSB0byBh
dm9pZCB0aGUgcGVyZm9ybWFuY2UgcGVuYWx0eSBvZiBsb29waW5nIGZvciBpbnB1dHMgaW4gdGhl
IHJlbmRlciBsb29wLgorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3JpZW50
YXRpb25JbnB1dC5wcm90b3R5cGUuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICh0aGlzLl9kaXJ0eSkgeworICAgICAgICAgICAgdGhpcy5fZGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9nYW1tYSA8IDApIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9n
YW1tYSA9IDE4MCArIHRoaXMuX2dhbW1hOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5jYW1lcmEuYWxwaGEgPSAoLXRoaXMuX2FscGhhIC8gMTgwLjAgKiBNYXRoLlBJKSAlIE1hdGgu
UEkgKiAyOworICAgICAgICAgICAgdGhpcy5jYW1lcmEuYmV0YSA9ICh0aGlzLl9nYW1tYSAvIDE4
MC4wICogTWF0aC5QSSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERldGFj
aCB0aGUgY3VycmVudCBjb250cm9scyBmcm9tIHRoZSBzcGVjaWZpZWQgZG9tIGVsZW1lbnQuCisg
ICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0byBzdG9wIGxpc3Rlbmlu
ZyB0aGUgaW5wdXRzIGZyb20KKyAgICAgKi8KKyAgICBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9y
aWVudGF0aW9uSW5wdXQucHJvdG90eXBlLmRldGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVu
dCkgeworICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGV2aWNlb3JpZW50YXRp
b24iLCB0aGlzLl9kZXZpY2VPcmllbnRhdGlvbkhhbmRsZXIpOworICAgIH07CisgICAgLyoqCisg
ICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY3VycmVudCBpbnRwdXQuCisgICAgICog
QHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBBcmNSb3RhdGVDYW1lcmFWUkRl
dmljZU9yaWVudGF0aW9uSW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICJBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5w
dXQiOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBmcmllbmRseSBuYW1lIGFzc29j
aWF0ZWQgd2l0aCB0aGUgaW5wdXQgY2xhc3MuCisgICAgICogQHJldHVybnMgdGhlIGlucHV0IGZy
aWVuZGx5IG5hbWUKKyAgICAgKi8KKyAgICBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0
aW9uSW5wdXQucHJvdG90eXBlLmdldFNpbXBsZU5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiAiVlJEZXZpY2VPcmllbnRhdGlvbiI7CisgICAgfTsKKyAgICByZXR1cm4gQXJjUm90
YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0OworfSgpKTsKKworX0NhbWVyYXNfY2Ft
ZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDYW1lcmFJbnB1
dFR5cGVzIl1bIkFyY1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3JpZW50YXRpb25JbnB1dCJdID0gQXJj
Um90YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9DYW1lcmFzL0lucHV0cy9mbHlDYW1lcmFLZXlib2FyZElucHV0LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9DYW1lcmFzL0lucHV0cy9mbHlDYW1lcmFLZXlib2FyZElucHV0LnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IEZseUNhbWVyYUtleWJvYXJkSW5wdXQgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNv
cmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhSW5wdXRz
TWFuYWdlciAqLyAiLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfRXZlbnRzX2tleWJvYXJkRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FdmVudHMva2V5Ym9h
cmRFdmVudHMgKi8gIi4vRXZlbnRzL2tleWJvYXJkRXZlbnRzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAi
Li9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworCisKKworCisKKy8qKgorICogTGlzdGVuIHRvIGtl
eWJvYXJkIGV2ZW50cyB0byBjb250cm9sIHRoZSBjYW1lcmEuCisgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXppbmdfY2FtZXJhX2lucHV0cworICovCit2YXIg
Rmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICBmdW5jdGlvbiBGbHlDYW1lcmFLZXlib2FyZElucHV0KCkgeworICAgICAgICAvKioKKyAgICAg
ICAgICogVGhlIGxpc3Qgb2Yga2V5Ym9hcmQga2V5cyB1c2VkIHRvIGNvbnRyb2wgdGhlIGZvcndh
cmQgbW92ZSBvZiB0aGUgY2FtZXJhLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzRm9y
d2FyZCA9IFs4N107CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbGlzdCBvZiBrZXlib2Fy
ZCBrZXlzIHVzZWQgdG8gY29udHJvbCB0aGUgYmFja3dhcmQgbW92ZSBvZiB0aGUgY2FtZXJhLgor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzQmFja3dhcmQgPSBbODNdOworICAgICAgICAv
KioKKyAgICAgICAgICogVGhlIGxpc3Qgb2Yga2V5Ym9hcmQga2V5cyB1c2VkIHRvIGNvbnRyb2wg
dGhlIGZvcndhcmQgbW92ZSBvZiB0aGUgY2FtZXJhLgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5rZXlzVXAgPSBbNjldOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGxpc3Qgb2Yga2V5
Ym9hcmQga2V5cyB1c2VkIHRvIGNvbnRyb2wgdGhlIGJhY2t3YXJkIG1vdmUgb2YgdGhlIGNhbWVy
YS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5c0Rvd24gPSBbODFdOworICAgICAgICAv
KioKKyAgICAgICAgICogVGhlIGxpc3Qgb2Yga2V5Ym9hcmQga2V5cyB1c2VkIHRvIGNvbnRyb2wg
dGhlIHJpZ2h0IHN0cmFmZSBtb3ZlIG9mIHRoZSBjYW1lcmEuCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmtleXNSaWdodCA9IFs2OF07CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbGlz
dCBvZiBrZXlib2FyZCBrZXlzIHVzZWQgdG8gY29udHJvbCB0aGUgbGVmdCBzdHJhZmUgbW92ZSBv
ZiB0aGUgY2FtZXJhLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzTGVmdCA9IFs2NV07
CisgICAgICAgIHRoaXMuX2tleXMgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisgICAgLyoqCisgICAg
ICogQXR0YWNoIHRoZSBpbnB1dCBjb250cm9scyB0byBhIHNwZWNpZmljIGRvbSBlbGVtZW50IHRv
IGdldCB0aGUgaW5wdXQgZnJvbS4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBl
bGVtZW50IHRoZSBjb250cm9scyBzaG91bGQgYmUgbGlzdGVuZWQgZnJvbQorICAgICAqIEBwYXJh
bSBub1ByZXZlbnREZWZhdWx0IERlZmluZXMgd2hldGhlciBldmVudCBjYXVnaHQgYnkgdGhlIGNv
bnRyb2xzIHNob3VsZCBjYWxsIHByZXZlbnRkZWZhdWx0KCkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudC9wcmV2ZW50RGVmYXVsdCkKKyAgICAg
Ki8KKyAgICBGbHlDYW1lcmFLZXlib2FyZElucHV0LnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0g
ZnVuY3Rpb24gKGVsZW1lbnQsIG5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMuX29uQ2FudmFzQmx1ck9ic2VydmVyKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc2NlbmUgPSB0aGlzLmNh
bWVyYS5nZXRTY2VuZSgpOworICAgICAgICB0aGlzLl9lbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRF
bmdpbmUoKTsKKyAgICAgICAgdGhpcy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIgPSB0aGlzLl9lbmdp
bmUub25DYW52YXNCbHVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
X3RoaXMuX2tleXMgPSBbXTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX29uS2V5Ym9hcmRP
YnNlcnZlciA9IHRoaXMuX3NjZW5lLm9uS2V5Ym9hcmRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAo
aW5mbykgeworICAgICAgICAgICAgdmFyIGV2dCA9IGluZm8uZXZlbnQ7CisgICAgICAgICAgICBp
ZiAoaW5mby50eXBlID09PSBfRXZlbnRzX2tleWJvYXJkRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIktleWJvYXJkRXZlbnRUeXBlcyJdLktFWURPV04pIHsKKyAgICAgICAgICAg
ICAgICBpZiAoX3RoaXMua2V5c0ZvcndhcmQuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xIHx8
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNCYWNrd2FyZC5pbmRleE9mKGV2dC5rZXlD
b2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMua2V5c1VwLmluZGV4T2Yo
ZXZ0LmtleUNvZGUpICE9PSAtMSB8fAorICAgICAgICAgICAgICAgICAgICBfdGhpcy5rZXlzRG93
bi5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgX3Ro
aXMua2V5c0xlZnQuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLmtleXNSaWdodC5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gX3RoaXMuX2tleXMuaW5kZXhPZihldnQua2V5
Q29kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF90aGlzLl9rZXlzLnB1c2goZXZ0LmtleUNvZGUpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMua2V5c0ZvcndhcmQuaW5kZXhP
ZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNC
YWNrd2FyZC5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAg
ICAgX3RoaXMua2V5c1VwLmluZGV4T2YoZXZ0LmtleUNvZGUpICE9PSAtMSB8fAorICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5rZXlzRG93bi5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwK
KyAgICAgICAgICAgICAgICAgICAgX3RoaXMua2V5c0xlZnQuaW5kZXhPZihldnQua2V5Q29kZSkg
IT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNSaWdodC5pbmRleE9mKGV2
dC5rZXlDb2RlKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gX3Ro
aXMuX2tleXMuaW5kZXhPZihldnQua2V5Q29kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
bmRleCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fa2V5cy5zcGxpY2Uo
aW5kZXgsIDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
ICghbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnByZXZl
bnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0YWNo
IHRoZSBjdXJyZW50IGNvbnRyb2xzIGZyb20gdGhlIHNwZWNpZmllZCBkb20gZWxlbWVudC4KKyAg
ICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVtZW50IHRvIHN0b3AgbGlzdGVuaW5n
IHRoZSBpbnB1dHMgZnJvbQorICAgICAqLworICAgIEZseUNhbWVyYUtleWJvYXJkSW5wdXQucHJv
dG90eXBlLmRldGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVudCkgeworICAgICAgICBpZiAo
dGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbktleWJvYXJkT2JzZXJ2ZXIp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5vbktleWJvYXJkT2JzZXJ2YWJsZS5yZW1v
dmUodGhpcy5fb25LZXlib2FyZE9ic2VydmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMu
X2VuZ2luZS5vbkNhbnZhc0JsdXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkNhbnZhc0JsdXJP
YnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vbktleWJvYXJkT2Jz
ZXJ2ZXIgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIgPSBu
dWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2tleXMgPSBbXTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGN1cnJlbnQgaW50cHV0LgorICAg
ICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgRmx5Q2FtZXJhS2V5Ym9h
cmRJbnB1dC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gIkZseUNhbWVyYUtleWJvYXJkSW5wdXQiOworICAgIH07CisgICAgLyoqIEBoaWRkZW4g
Ki8KKyAgICBGbHlDYW1lcmFLZXlib2FyZElucHV0LnByb3RvdHlwZS5fb25Mb3N0Rm9jdXMgPSBm
dW5jdGlvbiAoZSkgeworICAgICAgICB0aGlzLl9rZXlzID0gW107CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBj
bGFzcy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQorICAgICAqLwor
ICAgIEZseUNhbWVyYUtleWJvYXJkSW5wdXQucHJvdG90eXBlLmdldFNpbXBsZU5hbWUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiAia2V5Ym9hcmQiOworICAgIH07CisgICAgLyoqCisg
ICAgICogVXBkYXRlIHRoZSBjdXJyZW50IGNhbWVyYSBzdGF0ZSBkZXBlbmRpbmcgb24gdGhlIGlu
cHV0cyB0aGF0IGhhdmUgYmVlbiB1c2VkIHRoaXMgZnJhbWUuCisgICAgICogVGhpcyBpcyBhIGR5
bmFtaWNhbGx5IGNyZWF0ZWQgbGFtYmRhIHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBwZW5hbHR5
IG9mIGxvb3BpbmcgZm9yIGlucHV0cyBpbiB0aGUgcmVuZGVyIGxvb3AuCisgICAgICovCisgICAg
Rmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dC5wcm90b3R5cGUuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICh0aGlzLl9vbktleWJvYXJkT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAg
IHZhciBjYW1lcmEgPSB0aGlzLmNhbWVyYTsKKyAgICAgICAgICAgIC8vIEtleWJvYXJkCisgICAg
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fa2V5cy5sZW5ndGg7IGlu
ZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIga2V5Q29kZSA9IHRoaXMuX2tleXNbaW5kZXhd
OworICAgICAgICAgICAgICAgIHZhciBzcGVlZCA9IGNhbWVyYS5fY29tcHV0ZUxvY2FsQ2FtZXJh
U3BlZWQoKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5rZXlzRm9yd2FyZC5pbmRleE9mKGtl
eUNvZGUpICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBjYW1lcmEuX2xvY2FsRGlyZWN0
aW9uLmNvcHlGcm9tRmxvYXRzKDAsIDAsIHNwZWVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5rZXlzQmFja3dhcmQuaW5kZXhPZihrZXlDb2RlKSAh
PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FtZXJhLl9sb2NhbERpcmVjdGlvbi5jb3B5
RnJvbUZsb2F0cygwLCAwLCAtc3BlZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICh0aGlzLmtleXNVcC5pbmRleE9mKGtleUNvZGUpICE9PSAtMSkgeworICAg
ICAgICAgICAgICAgICAgICBjYW1lcmEuX2xvY2FsRGlyZWN0aW9uLmNvcHlGcm9tRmxvYXRzKDAs
IHNwZWVkLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
dGhpcy5rZXlzRG93bi5pbmRleE9mKGtleUNvZGUpICE9PSAtMSkgeworICAgICAgICAgICAgICAg
ICAgICBjYW1lcmEuX2xvY2FsRGlyZWN0aW9uLmNvcHlGcm9tRmxvYXRzKDAsIC1zcGVlZCwgMCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMua2V5c1Jp
Z2h0LmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbWVy
YS5fbG9jYWxEaXJlY3Rpb24uY29weUZyb21GbG9hdHMoc3BlZWQsIDAsIDApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmtleXNMZWZ0LmluZGV4T2Yo
a2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbWVyYS5fbG9jYWxEaXJl
Y3Rpb24uY29weUZyb21GbG9hdHMoLXNwZWVkLCAwLCAwKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGNhbWVyYS5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVt
KSB7CisgICAgICAgICAgICAgICAgICAgIGNhbWVyYS5fbG9jYWxEaXJlY3Rpb24ueiAqPSAtMTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FtZXJhLmdldFZpZXdNYXRyaXgo
KS5pbnZlcnRUb1JlZihjYW1lcmEuX2NhbWVyYVRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgICAg
ICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZl
Y3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWxUb1JlZihjYW1lcmEuX2xvY2FsRGlyZWN0aW9uLCBjYW1l
cmEuX2NhbWVyYVRyYW5zZm9ybU1hdHJpeCwgY2FtZXJhLl90cmFuc2Zvcm1lZERpcmVjdGlvbik7
CisgICAgICAgICAgICAgICAgY2FtZXJhLmNhbWVyYURpcmVjdGlvbi5hZGRJblBsYWNlKGNhbWVy
YS5fdHJhbnNmb3JtZWREaXJlY3Rpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZseUNhbWVyYUtleWJvYXJkSW5wdXQucHJv
dG90eXBlLCAia2V5c0ZvcndhcmQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dC5wcm90b3R5cGUsICJrZXlzQmFja3dhcmQiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dC5w
cm90b3R5cGUsICJrZXlzVXAiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
Rmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dC5wcm90b3R5cGUsICJrZXlzRG93biIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGbHlDYW1lcmFLZXlib2FyZElucHV0LnByb3RvdHlw
ZSwgImtleXNSaWdodCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGbHlD
YW1lcmFLZXlib2FyZElucHV0LnByb3RvdHlwZSwgImtleXNMZWZ0Iiwgdm9pZCAwKTsKKyAgICBy
ZXR1cm4gRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dDsKK30oKSk7CisKK19DYW1lcmFzX2NhbWVyYUlu
cHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ2FtZXJhSW5wdXRUeXBl
cyJdWyJGbHlDYW1lcmFLZXlib2FyZElucHV0Il0gPSBGbHlDYW1lcmFLZXlib2FyZElucHV0Owor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL0lucHV0cy9mbHlDYW1lcmFNb3VzZUlu
cHV0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9DYW1lcmFzL0lucHV0cy9mbHlDYW1lcmFNb3VzZUlucHV0LnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZseUNhbWVyYU1vdXNlSW5wdXQgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmx5Q2FtZXJhTW91c2VJbnB1dCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gRmx5Q2FtZXJhTW91c2VJbnB1dDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0
b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFu
YWdlciAqLyAiLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0V2ZW50cy9wb2ludGVyRXZl
bnRzICovICIuL0V2ZW50cy9wb2ludGVyRXZlbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGhzL21hdGguYXhpcyAqLyAiLi9NYXRocy9tYXRoLmF4aXMudHMiKTsKKwor
CisKKworCisKKy8qKgorICogTGlzdGVuIHRvIG1vdXNlIGV2ZW50cyB0byBjb250cm9sIHRoZSBj
YW1lcmEuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXpp
bmdfY2FtZXJhX2lucHV0cworICovCit2YXIgRmx5Q2FtZXJhTW91c2VJbnB1dCA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBMaXN0ZW4gdG8gbW91c2UgZXZl
bnRzIHRvIGNvbnRyb2wgdGhlIGNhbWVyYS4KKyAgICAgKiBAcGFyYW0gdG91Y2hFbmFibGVkIERl
ZmluZSBpZiB0b3VjaCBpcyBlbmFibGVkLiAoRGVmYXVsdCBpcyB0cnVlLikKKyAgICAgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXppbmdfY2FtZXJhX2lucHV0
cworICAgICAqLworICAgIGZ1bmN0aW9uIEZseUNhbWVyYU1vdXNlSW5wdXQodG91Y2hFbmFibGVk
KSB7CisgICAgICAgIGlmICh0b3VjaEVuYWJsZWQgPT09IHZvaWQgMCkgeyB0b3VjaEVuYWJsZWQg
PSB0cnVlOyB9CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBidXR0b25zIGFz
c29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQgdG8gaGFuZGxlIGNhbWVyYSByb3RhdGlvbi4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuYnV0dG9ucyA9IFswLCAxLCAyXTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEFzc2lnbiBidXR0b25zIGZvciBZYXcgY29udHJvbC4KKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuYnV0dG9uc1lhdyA9IFstMSwgMCwgMV07CisgICAgICAgIC8qKgorICAgICAg
ICAqIEFzc2lnbiBidXR0b25zIGZvciBQaXRjaCBjb250cm9sLgorICAgICAgICAqLworICAgICAg
ICB0aGlzLmJ1dHRvbnNQaXRjaCA9IFstMSwgMCwgMV07CisgICAgICAgIC8qKgorICAgICAgICAq
IEFzc2lnbiBidXR0b25zIGZvciBSb2xsIGNvbnRyb2wuCisgICAgICAgICovCisgICAgICAgIHRo
aXMuYnV0dG9uc1JvbGwgPSBbMl07CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZXRlY3QgaWYg
YW55IGJ1dHRvbiBpcyBiZWluZyBwcmVzc2VkIHdoaWxlIG1vdXNlIGlzIG1vdmVkLgorICAgICAg
ICAgKiAtMSA9IE1vdXNlIGxvY2tlZC4KKyAgICAgICAgICogMCA9IExlZnQgYnV0dG9uLgorICAg
ICAgICAgKiAxID0gTWlkZGxlIEJ1dHRvbi4KKyAgICAgICAgICogMiA9IFJpZ2h0IEJ1dHRvbi4K
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuYWN0aXZlQnV0dG9uID0gLTE7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBwb2ludGVyJ3MgYW5ndWxhciBzZW5zaWJpbGl0eSwg
dG8gY29udHJvbCB0aGUgY2FtZXJhIHJvdGF0aW9uIHNwZWVkLgorICAgICAgICAgKiBIaWdoZXIg
dmFsdWVzIHJlZHVjZSBpdHMgc2Vuc2l0aXZpdHkuCisgICAgICAgICAqLworICAgICAgICB0aGlz
LmFuZ3VsYXJTZW5zaWJpbGl0eSA9IDEwMDAuMDsKKyAgICAgICAgdGhpcy5wcmV2aW91c1Bvc2l0
aW9uID0gbnVsbDsKKyAgICB9CisgICAgLyoqCisgICAgICogQXR0YWNoIHRoZSBtb3VzZSBjb250
cm9sIHRvIHRoZSBIVE1MIERPTSBlbGVtZW50LgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmlu
ZXMgdGhlIGVsZW1lbnQgdGhhdCBsaXN0ZW5zIHRvIHRoZSBpbnB1dCBldmVudHMuCisgICAgICog
QHBhcmFtIG5vUHJldmVudERlZmF1bHQgRGVmaW5lcyB3aGV0aGVyIGV2ZW50cyBjYXVnaHQgYnkg
dGhlIGNvbnRyb2xzIHNob3VsZCBjYWxsIHByZXZlbnRkZWZhdWx0KCkuCisgICAgICovCisgICAg
Rmx5Q2FtZXJhTW91c2VJbnB1dC5wcm90b3R5cGUuYXR0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChl
bGVtZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAgIHRoaXMubm9QcmV2ZW50RGVm
YXVsdCA9IG5vUHJldmVudERlZmF1bHQ7CisgICAgICAgIHRoaXMuX29ic2VydmVyID0gdGhpcy5j
YW1lcmEuZ2V0U2NlbmUoKS5vblBvaW50ZXJPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAocCwgcykg
eworICAgICAgICAgICAgX3RoaXMuX3BvaW50ZXJJbnB1dChwLCBzKTsKKyAgICAgICAgfSwgX0V2
ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBvaW50ZXJF
dmVudFR5cGVzIl0uUE9JTlRFUkRPV04gfCBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSVVAgfCBfRXZl
bnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2
ZW50VHlwZXMiXS5QT0lOVEVSTU9WRSk7CisgICAgICAgIC8vIENvcnJlY3QgUm9sbCBieSByYXRl
LCBpZiBlbmFibGVkLgorICAgICAgICB0aGlzLl9yb2xsT2JzZXJ2ZXIgPSB0aGlzLmNhbWVyYS5n
ZXRTY2VuZSgpLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgaWYgKF90aGlzLmNhbWVyYS5yb2xsQ29ycmVjdCkgeworICAgICAgICAgICAgICAg
IF90aGlzLmNhbWVyYS5yZXN0b3JlUm9sbChfdGhpcy5jYW1lcmEucm9sbENvcnJlY3QpOworICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGtl
ZXAgJ3RoaXMnLgorICAgICAgICB0aGlzLl9tb3VzZW1vdmVDYWxsYmFjayA9IGZ1bmN0aW9uIChl
KSB7CisgICAgICAgICAgICBfdGhpcy5fb25Nb3VzZU1vdmUoZSk7CisgICAgICAgIH07CisgICAg
ICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5fbW91c2Vtb3Zl
Q2FsbGJhY2ssIGZhbHNlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGFjaCB0aGUgY3Vy
cmVudCBjb250cm9scyBmcm9tIHRoZSBzcGVjaWZpZWQgZG9tIGVsZW1lbnQuCisgICAgICogQHBh
cmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0byBzdG9wIGxpc3RlbmluZyB0aGUgaW5w
dXRzIGZyb20KKyAgICAgKi8KKyAgICBGbHlDYW1lcmFNb3VzZUlucHV0LnByb3RvdHlwZS5kZXRh
Y2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKHRoaXMuX29ic2Vy
dmVyICYmIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMuY2FtZXJhLmdldFNjZW5lKCkub25Q
b2ludGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb2JzZXJ2ZXIpOworICAgICAgICAgICAgdGhp
cy5jYW1lcmEuZ2V0U2NlbmUoKS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMu
X3JvbGxPYnNlcnZlcik7CisgICAgICAgICAgICBpZiAodGhpcy5fbW91c2Vtb3ZlQ2FsbGJhY2sp
IHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92
ZSIsIHRoaXMuX21vdXNlbW92ZUNhbGxiYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX29ic2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3JvbGxPYnNlcnZlciA9
IG51bGw7CisgICAgICAgICAgICB0aGlzLnByZXZpb3VzUG9zaXRpb24gPSBudWxsOworICAgICAg
ICAgICAgdGhpcy5ub1ByZXZlbnREZWZhdWx0ID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjdXJyZW50IGlu
cHV0LgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lLgorICAgICAqLworICAgIEZseUNh
bWVyYU1vdXNlSW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuICJGbHlDYW1lcmFNb3VzZUlucHV0IjsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEdldCB0aGUgZnJpZW5kbHkgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGlucHV0IGNsYXNz
LgorICAgICAqIEByZXR1cm5zIHRoZSBpbnB1dCdzIGZyaWVuZGx5IG5hbWUuCisgICAgICovCisg
ICAgRmx5Q2FtZXJhTW91c2VJbnB1dC5wcm90b3R5cGUuZ2V0U2ltcGxlTmFtZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuICJtb3VzZSI7CisgICAgfTsKKyAgICAvLyBUcmFjayBtb3Vz
ZSBtb3ZlbWVudCwgd2hlbiB0aGUgcG9pbnRlciBpcyBub3QgbG9ja2VkLgorICAgIEZseUNhbWVy
YU1vdXNlSW5wdXQucHJvdG90eXBlLl9wb2ludGVySW5wdXQgPSBmdW5jdGlvbiAocCwgcykgewor
ICAgICAgICB2YXIgZSA9IHAuZXZlbnQ7CisgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNhbWVy
YTsKKyAgICAgICAgdmFyIGVuZ2luZSA9IGNhbWVyYS5nZXRFbmdpbmUoKTsKKyAgICAgICAgaWYg
KGVuZ2luZS5pc0luVlJFeGNsdXNpdmVQb2ludGVyTW9kZSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy50b3VjaEVuYWJsZWQgJiYgZS5wb2ludGVy
VHlwZSA9PT0gInRvdWNoIikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIC8vIE1vdXNlIGlzIG1vdmVkIGJ1dCBhbiB1bmtub3duIG1vdXNlIGJ1dHRvbiBpcyBwcmVz
c2VkLgorICAgICAgICBpZiAocC50eXBlICE9PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRSAm
JiB0aGlzLmJ1dHRvbnMuaW5kZXhPZihlLmJ1dHRvbikgPT09IC0xKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNyY0VsZW1lbnQgPSAoZS5zcmNFbGVtZW50
IHx8IGUudGFyZ2V0KTsKKyAgICAgICAgLy8gTW91c2UgZG93bi4KKyAgICAgICAgaWYgKHAudHlw
ZSA9PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04gJiYgc3JjRWxlbWVudCkgeworICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzcmNFbGVtZW50LnNldFBvaW50ZXJDYXB0dXJl
KGUucG9pbnRlcklkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChlKSB7Cisg
ICAgICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbyB3aXRoIHRoZSBlcnJvci4gRXhlY3V0aW9u
IGNvbnRpbnVlcy4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMucHJldmlvdXNQb3Np
dGlvbiA9IHsKKyAgICAgICAgICAgICAgICB4OiBlLmNsaWVudFgsCisgICAgICAgICAgICAgICAg
eTogZS5jbGllbnRZCisgICAgICAgICAgICB9OworICAgICAgICAgICAgdGhpcy5hY3RpdmVCdXR0
b24gPSBlLmJ1dHRvbjsKKyAgICAgICAgICAgIGlmICghdGhpcy5ub1ByZXZlbnREZWZhdWx0KSB7
CisgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5mb2N1cygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgCisgICAgICAgIC8vIE1vdXNlIHVwLgorICAgICAgICBpZiAocC50eXBlID09PSBfRXZlbnRz
X3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50
VHlwZXMiXS5QT0lOVEVSVVAgJiYgc3JjRWxlbWVudCkgeworICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICBzcmNFbGVtZW50LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJ
ZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAg
ICAgIC8vIE5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgZXJyb3IuIEV4ZWN1dGlvbiBjb250aW51ZXMu
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmFjdGl2ZUJ1dHRvbiA9IC0xOworICAg
ICAgICAgICAgdGhpcy5wcmV2aW91c1Bvc2l0aW9uID0gbnVsbDsKKyAgICAgICAgICAgIGlmICgh
dGhpcy5ub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVs
dCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgCisgICAgICAgIC8v
IE1vdXNlIG1vdmUuCisgICAgICAgIGlmIChwLnR5cGUgPT09IF9FdmVudHNfcG9pbnRlckV2ZW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5U
RVJNT1ZFKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMucHJldmlvdXNQb3NpdGlvbiB8fCBlbmdp
bmUuaXNQb2ludGVyTG9jaykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBvZmZzZXRYID0gZS5jbGllbnRYIC0gdGhpcy5wcmV2aW91c1Bv
c2l0aW9uLng7CisgICAgICAgICAgICB2YXIgb2Zmc2V0WSA9IGUuY2xpZW50WSAtIHRoaXMucHJl
dmlvdXNQb3NpdGlvbi55OworICAgICAgICAgICAgdGhpcy5yb3RhdGVDYW1lcmEob2Zmc2V0WCwg
b2Zmc2V0WSk7CisgICAgICAgICAgICB0aGlzLnByZXZpb3VzUG9zaXRpb24gPSB7CisgICAgICAg
ICAgICAgICAgeDogZS5jbGllbnRYLAorICAgICAgICAgICAgICAgIHk6IGUuY2xpZW50WQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICghdGhpcy5ub1ByZXZlbnREZWZhdWx0KSB7Cisg
ICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKyAgICAvLyBUcmFjayBtb3VzZSBtb3ZlbWVudCwgd2hlbiBwb2ludGVyIGlz
IGxvY2tlZC4KKyAgICBGbHlDYW1lcmFNb3VzZUlucHV0LnByb3RvdHlwZS5fb25Nb3VzZU1vdmUg
PSBmdW5jdGlvbiAoZSkgeworICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5jYW1lcmE7CisgICAg
ICAgIHZhciBlbmdpbmUgPSBjYW1lcmEuZ2V0RW5naW5lKCk7CisgICAgICAgIGlmICghZW5naW5l
LmlzUG9pbnRlckxvY2sgfHwgZW5naW5lLmlzSW5WUkV4Y2x1c2l2ZVBvaW50ZXJNb2RlKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9mZnNldFggPSBlLm1v
dmVtZW50WCB8fCBlLm1vek1vdmVtZW50WCB8fCBlLndlYmtpdE1vdmVtZW50WCB8fCBlLm1zTW92
ZW1lbnRYIHx8IDA7CisgICAgICAgIHZhciBvZmZzZXRZID0gZS5tb3ZlbWVudFkgfHwgZS5tb3pN
b3ZlbWVudFkgfHwgZS53ZWJraXRNb3ZlbWVudFkgfHwgZS5tc01vdmVtZW50WSB8fCAwOworICAg
ICAgICB0aGlzLnJvdGF0ZUNhbWVyYShvZmZzZXRYLCBvZmZzZXRZKTsKKyAgICAgICAgdGhpcy5w
cmV2aW91c1Bvc2l0aW9uID0gbnVsbDsKKyAgICAgICAgaWYgKCF0aGlzLm5vUHJldmVudERlZmF1
bHQpIHsKKyAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogUm90YXRlIGNhbWVyYSBieSBtb3VzZSBvZmZzZXQuCisgICAgICov
CisgICAgRmx5Q2FtZXJhTW91c2VJbnB1dC5wcm90b3R5cGUucm90YXRlQ2FtZXJhID0gZnVuY3Rp
b24gKG9mZnNldFgsIG9mZnNldFkpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgdmFyIGNhbWVyYSA9IHRoaXMuY2FtZXJhOworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmNh
bWVyYS5nZXRTY2VuZSgpOworICAgICAgICBpZiAoc2NlbmUudXNlUmlnaHRIYW5kZWRTeXN0ZW0p
IHsKKyAgICAgICAgICAgIG9mZnNldFggKj0gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNh
bWVyYS5wYXJlbnQgJiYgY2FtZXJhLnBhcmVudC5fZ2V0V29ybGRNYXRyaXhEZXRlcm1pbmFudCgp
IDwgMCkgeworICAgICAgICAgICAgb2Zmc2V0WCAqPSAtMTsKKyAgICAgICAgfQorICAgICAgICB2
YXIgeCA9IG9mZnNldFggLyB0aGlzLmFuZ3VsYXJTZW5zaWJpbGl0eTsKKyAgICAgICAgdmFyIHkg
PSBvZmZzZXRZIC8gdGhpcy5hbmd1bGFyU2Vuc2liaWxpdHk7CisgICAgICAgIC8vIEluaXRpYWxp
emUgdG8gY3VycmVudCByb3RhdGlvbi4KKyAgICAgICAgdmFyIGN1cnJlbnRSb3RhdGlvbiA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJRdWF0ZXJuaW9u
Il0uUm90YXRpb25ZYXdQaXRjaFJvbGwoY2FtZXJhLnJvdGF0aW9uLnksIGNhbWVyYS5yb3RhdGlv
bi54LCBjYW1lcmEucm90YXRpb24ueik7CisgICAgICAgIHZhciByb3RhdGlvbkNoYW5nZTsKKyAg
ICAgICAgLy8gUGl0Y2guCisgICAgICAgIGlmICh0aGlzLmJ1dHRvbnNQaXRjaC5zb21lKGZ1bmN0
aW9uICh2KSB7IHJldHVybiB2ID09PSBfdGhpcy5hY3RpdmVCdXR0b247IH0pKSB7CisgICAgICAg
ICAgICAvLyBBcHBseSBjaGFuZ2UgaW4gUmFkaWFucyB0byB2ZWN0b3IgQW5nbGUuCisgICAgICAg
ICAgICByb3RhdGlvbkNoYW5nZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25BeGlzKF9NYXRoc19tYXRoX2F4aXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQXhpcyJdLlgsIHkpOworICAgICAgICAgICAg
Ly8gQXBwbHkgUGl0Y2ggdG8gcXVhdGVybmlvbi4KKyAgICAgICAgICAgIGN1cnJlbnRSb3RhdGlv
bi5tdWx0aXBseUluUGxhY2Uocm90YXRpb25DaGFuZ2UpOworICAgICAgICB9CisgICAgICAgIC8v
IFlhdy4KKyAgICAgICAgaWYgKHRoaXMuYnV0dG9uc1lhdy5zb21lKGZ1bmN0aW9uICh2KSB7IHJl
dHVybiB2ID09PSBfdGhpcy5hY3RpdmVCdXR0b247IH0pKSB7CisgICAgICAgICAgICAvLyBBcHBs
eSBjaGFuZ2UgaW4gUmFkaWFucyB0byB2ZWN0b3IgQW5nbGUuCisgICAgICAgICAgICByb3RhdGlv
bkNoYW5nZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJRdWF0ZXJuaW9uIl0uUm90YXRpb25BeGlzKF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siQXhpcyJdLlksIHgpOworICAgICAgICAgICAgLy8gQXBwbHkgWWF3
IHRvIHF1YXRlcm5pb24uCisgICAgICAgICAgICBjdXJyZW50Um90YXRpb24ubXVsdGlwbHlJblBs
YWNlKHJvdGF0aW9uQ2hhbmdlKTsKKyAgICAgICAgICAgIC8vIEFkZCBSb2xsLCBpZiBiYW5rZWQg
dHVybmluZyBpcyBlbmFibGVkLCB3aXRoaW4gUm9sbCBsaW1pdC4KKyAgICAgICAgICAgIHZhciBs
aW1pdCA9IChjYW1lcmEuYmFua2VkVHVybkxpbWl0KSArIGNhbWVyYS5fdHJhY2tSb2xsOyAvLyBE
ZWZhdWx0cyB0byA5MMKwIHBsdXMgbWFudWFsIHJvbGwuCisgICAgICAgICAgICBpZiAoY2FtZXJh
LmJhbmtlZFR1cm4gJiYgLWxpbWl0IDwgY2FtZXJhLnJvdGF0aW9uLnogJiYgY2FtZXJhLnJvdGF0
aW9uLnogPCBsaW1pdCkgeworICAgICAgICAgICAgICAgIHZhciBiYW5raW5nRGVsdGEgPSBjYW1l
cmEuYmFua2VkVHVybk11bHRpcGxpZXIgKiAteDsKKyAgICAgICAgICAgICAgICAvLyBBcHBseSBj
aGFuZ2UgaW4gUmFkaWFucyB0byB2ZWN0b3IgQW5nbGUuCisgICAgICAgICAgICAgICAgcm90YXRp
b25DaGFuZ2UgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siUXVhdGVybmlvbiJdLlJvdGF0aW9uQXhpcyhfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bIkF4aXMiXS5aLCBiYW5raW5nRGVsdGEpOworICAgICAgICAgICAg
ICAgIC8vIEFwcGx5IFlhdyB0byBxdWF0ZXJuaW9uLgorICAgICAgICAgICAgICAgIGN1cnJlbnRS
b3RhdGlvbi5tdWx0aXBseUluUGxhY2Uocm90YXRpb25DaGFuZ2UpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIC8vIFJvbGwuCisgICAgICAgIGlmICh0aGlzLmJ1dHRvbnNSb2xs
LnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgPT09IF90aGlzLmFjdGl2ZUJ1dHRvbjsgfSkp
IHsKKyAgICAgICAgICAgIC8vIEFwcGx5IGNoYW5nZSBpbiBSYWRpYW5zIHRvIHZlY3RvciBBbmds
ZS4KKyAgICAgICAgICAgIHJvdGF0aW9uQ2hhbmdlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbkF4aXMoX01hdGhz
X21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJBeGlzIl0uWiwgLXgpOwor
ICAgICAgICAgICAgLy8gVHJhY2sgUm9sbGluZy4KKyAgICAgICAgICAgIGNhbWVyYS5fdHJhY2tS
b2xsIC09IHg7CisgICAgICAgICAgICAvLyBBcHBseSBQaXRjaCB0byBxdWF0ZXJuaW9uLgorICAg
ICAgICAgICAgY3VycmVudFJvdGF0aW9uLm11bHRpcGx5SW5QbGFjZShyb3RhdGlvbkNoYW5nZSk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gQXBwbHkgcm90YXRpb25RdWF0ZXJuaW9uIHRvIEV1bGVy
IGNhbWVyYS5yb3RhdGlvbi4KKyAgICAgICAgY3VycmVudFJvdGF0aW9uLnRvRXVsZXJBbmdsZXNU
b1JlZihjYW1lcmEucm90YXRpb24pOworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBd
LCBGbHlDYW1lcmFNb3VzZUlucHV0LnByb3RvdHlwZSwgImJ1dHRvbnMiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRmx5Q2FtZXJhTW91c2VJbnB1dC5wcm90b3R5cGUsICJh
bmd1bGFyU2Vuc2liaWxpdHkiLCB2b2lkIDApOworICAgIHJldHVybiBGbHlDYW1lcmFNb3VzZUlu
cHV0OworfSgpKTsKKworX0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJDYW1lcmFJbnB1dFR5cGVzIl1bIkZseUNhbWVyYU1vdXNlSW5wdXQi
XSA9IEZseUNhbWVyYU1vdXNlSW5wdXQ7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVy
YXMvSW5wdXRzL2ZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vQ2FtZXJhcy9JbnB1dHMvZm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlu
cHV0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZvbGxvd0NhbWVyYUtl
eWJvYXJkTW92ZUlucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBGb2xsb3dDYW1lcmFLZXlib2Fy
ZE1vdmVJbnB1dDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIu
Li9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1lcmFJbnB1
dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAq
LyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXZl
bnRzX2tleWJvYXJkRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FdmVudHMva2V5Ym9hcmRFdmVudHMgKi8gIi4vRXZlbnRz
L2tleWJvYXJkRXZlbnRzLnRzIik7CisKKworCisKKy8qKgorICogTWFuYWdlIHRoZSBrZXlib2Fy
ZCBpbnB1dHMgdG8gY29udHJvbCB0aGUgbW92ZW1lbnQgb2YgYSBmb2xsb3cgY2FtZXJhLgorICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2N1c3RvbWl6aW5nX2NhbWVyYV9p
bnB1dHMKKyAqLwordmFyIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0ID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92
ZUlucHV0KCkgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgbGlzdCBvZiBr
ZXkgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB1cCBhY3Rpb24gKGluY3JlYXNlIGhlaWdodE9m
ZnNldCkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5c0hlaWdodE9mZnNldEluY3IgPSBb
MzhdOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgbGlzdCBvZiBrZXkgY29k
ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb3duIGFjdGlvbiAoZGVjcmVhc2UgaGVpZ2h0T2Zmc2V0
KQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzSGVpZ2h0T2Zmc2V0RGVjciA9IFs0MF07
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIEFsdCBtb2RpZmll
ciBrZXkgaXMgcmVxdWlyZWQgdG8gbW92ZSB1cC9kb3duIChhbHRlciBoZWlnaHRPZmZzZXQpCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmtleXNIZWlnaHRPZmZzZXRNb2RpZmllckFsdCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB3aGV0aGVyIHRoZSBDdHJsIG1v
ZGlmaWVyIGtleSBpcyByZXF1aXJlZCB0byBtb3ZlIHVwL2Rvd24gKGFsdGVyIGhlaWdodE9mZnNl
dCkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5c0hlaWdodE9mZnNldE1vZGlmaWVyQ3Ry
bCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB3aGV0aGVyIHRoZSBT
aGlmdCBtb2RpZmllciBrZXkgaXMgcmVxdWlyZWQgdG8gbW92ZSB1cC9kb3duIChhbHRlciBoZWln
aHRPZmZzZXQpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmtleXNIZWlnaHRPZmZzZXRNb2Rp
ZmllclNoaWZ0ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBs
aXN0IG9mIGtleSBjb2RlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxlZnQgYWN0aW9uIChpbmNyZWFz
ZSByb3RhdGlvbk9mZnNldCkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5c1JvdGF0aW9u
T2Zmc2V0SW5jciA9IFszN107CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBs
aXN0IG9mIGtleSBjb2RlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IGFjdGlvbiAoZGVjcmVh
c2Ugcm90YXRpb25PZmZzZXQpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmtleXNSb3RhdGlv
bk9mZnNldERlY3IgPSBbMzldOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB3aGV0
aGVyIHRoZSBBbHQgbW9kaWZpZXIga2V5IGlzIHJlcXVpcmVkIHRvIG1vdmUgbGVmdC9yaWdodCAo
YWx0ZXIgcm90YXRpb25PZmZzZXQpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmtleXNSb3Rh
dGlvbk9mZnNldE1vZGlmaWVyQWx0ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
ZWZpbmVzIHdoZXRoZXIgdGhlIEN0cmwgbW9kaWZpZXIga2V5IGlzIHJlcXVpcmVkIHRvIG1vdmUg
bGVmdC9yaWdodCAoYWx0ZXIgcm90YXRpb25PZmZzZXQpCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmtleXNSb3RhdGlvbk9mZnNldE1vZGlmaWVyQ3RybCA9IGZhbHNlOworICAgICAgICAvKioK
KyAgICAgICAgICogRGVmaW5lcyB3aGV0aGVyIHRoZSBTaGlmdCBtb2RpZmllciBrZXkgaXMgcmVx
dWlyZWQgdG8gbW92ZSBsZWZ0L3JpZ2h0IChhbHRlciByb3RhdGlvbk9mZnNldCkKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMua2V5c1JvdGF0aW9uT2Zmc2V0TW9kaWZpZXJTaGlmdCA9IGZhbHNl
OworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgbGlzdCBvZiBrZXkgY29kZXMg
YXNzb2NpYXRlZCB3aXRoIHRoZSB6b29tLWluIGFjdGlvbiAoZGVjcmVhc2UgcmFkaXVzKQorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5rZXlzUmFkaXVzSW5jciA9IFs0MF07CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBsaXN0IG9mIGtleSBjb2RlcyBhc3NvY2lhdGVkIHdp
dGggdGhlIHpvb20tb3V0IGFjdGlvbiAoaW5jcmVhc2UgcmFkaXVzKQorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5rZXlzUmFkaXVzRGVjciA9IFszOF07CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIHdoZXRoZXIgdGhlIEFsdCBtb2RpZmllciBrZXkgaXMgcmVxdWlyZWQgdG8gem9v
bSBpbi9vdXQgKGFsdGVyIHJhZGl1cyB2YWx1ZSkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
a2V5c1JhZGl1c01vZGlmaWVyQWx0ID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZXMgd2hldGhlciB0aGUgQ3RybCBtb2RpZmllciBrZXkgaXMgcmVxdWlyZWQgdG8gem9vbSBp
bi9vdXQgKGFsdGVyIHJhZGl1cyB2YWx1ZSkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5
c1JhZGl1c01vZGlmaWVyQ3RybCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVm
aW5lcyB3aGV0aGVyIHRoZSBTaGlmdCBtb2RpZmllciBrZXkgaXMgcmVxdWlyZWQgdG8gem9vbSBp
bi9vdXQgKGFsdGVyIHJhZGl1cyB2YWx1ZSkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5
c1JhZGl1c01vZGlmaWVyU2hpZnQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZXMgdGhlIHJhdGUgb2YgY2hhbmdlIG9mIGhlaWdodE9mZnNldC4KKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuaGVpZ2h0U2Vuc2liaWxpdHkgPSAxOworICAgICAgICAvKioKKyAgICAgICAg
ICogRGVmaW5lcyB0aGUgcmF0ZSBvZiBjaGFuZ2Ugb2Ygcm90YXRpb25PZmZzZXQuCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLnJvdGF0aW9uU2Vuc2liaWxpdHkgPSAxOworICAgICAgICAvKioK
KyAgICAgICAgICogRGVmaW5lcyB0aGUgcmF0ZSBvZiBjaGFuZ2Ugb2YgcmFkaXVzLgorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5yYWRpdXNTZW5zaWJpbGl0eSA9IDE7CisgICAgICAgIHRoaXMu
X2tleXMgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQXR0YWNoIHRoZSBp
bnB1dCBjb250cm9scyB0byBhIHNwZWNpZmljIGRvbSBlbGVtZW50IHRvIGdldCB0aGUgaW5wdXQg
ZnJvbS4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVtZW50IHRoZSBjb250
cm9scyBzaG91bGQgYmUgbGlzdGVuZWQgZnJvbQorICAgICAqIEBwYXJhbSBub1ByZXZlbnREZWZh
dWx0IERlZmluZXMgd2hldGhlciBldmVudCBjYXVnaHQgYnkgdGhlIGNvbnRyb2xzIHNob3VsZCBj
YWxsIHByZXZlbnRkZWZhdWx0KCkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVT
L2RvY3MvV2ViL0FQSS9FdmVudC9wcmV2ZW50RGVmYXVsdCkKKyAgICAgKi8KKyAgICBGb2xsb3dD
YW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUuYXR0YWNoQ29udHJvbCA9IGZ1bmN0aW9u
IChlbGVtZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGlmICh0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZlcikgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5lID0gdGhpcy5jYW1lcmEuZ2V0
U2NlbmUoKTsKKyAgICAgICAgdGhpcy5fZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7
CisgICAgICAgIHRoaXMuX29uQ2FudmFzQmx1ck9ic2VydmVyID0gdGhpcy5fZW5naW5lLm9uQ2Fu
dmFzQmx1ck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl9r
ZXlzID0gW107CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9vbktleWJvYXJkT2JzZXJ2ZXIg
PSB0aGlzLl9zY2VuZS5vbktleWJvYXJkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGluZm8pIHsK
KyAgICAgICAgICAgIHZhciBldnQgPSBpbmZvLmV2ZW50OworICAgICAgICAgICAgaWYgKCFldnQu
bWV0YUtleSkgeworICAgICAgICAgICAgICAgIGlmIChpbmZvLnR5cGUgPT09IF9FdmVudHNfa2V5
Ym9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siS2V5Ym9hcmRFdmVudFR5
cGVzIl0uS0VZRE9XTikgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY3RybFByZXNzZWQg
PSBldnQuY3RybEtleTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FsdFByZXNzZWQgPSBl
dnQuYWx0S2V5OworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc2hpZnRQcmVzc2VkID0gZXZ0
LnNoaWZ0S2V5OworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMua2V5c0hlaWdodE9mZnNl
dEluY3IuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICBfdGhpcy5rZXlzSGVpZ2h0T2Zmc2V0RGVjci5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0g
LTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNSb3RhdGlvbk9mZnNldElu
Y3IuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5rZXlzUm90YXRpb25PZmZzZXREZWNyLmluZGV4T2YoZXZ0LmtleUNvZGUpICE9PSAt
MSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMua2V5c1JhZGl1c0luY3IuaW5kZXhP
ZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5r
ZXlzUmFkaXVzRGVjci5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBpbmRleCA9IF90aGlzLl9rZXlzLmluZGV4T2YoZXZ0LmtleUNvZGUp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl9rZXlzLnB1c2goZXZ0LmtleUNvZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2dC5wcmV2
ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9QcmV2ZW50
RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnQucHJldmVudERl
ZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5rZXlzSGVp
Z2h0T2Zmc2V0SW5jci5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF90aGlzLmtleXNIZWlnaHRPZmZzZXREZWNyLmluZGV4T2YoZXZ0LmtleUNv
ZGUpICE9PSAtMSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMua2V5c1JvdGF0aW9u
T2Zmc2V0SW5jci5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLmtleXNSb3RhdGlvbk9mZnNldERlY3IuaW5kZXhPZihldnQua2V5Q29k
ZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5rZXlzUmFkaXVzSW5j
ci5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
IF90aGlzLmtleXNSYWRpdXNEZWNyLmluZGV4T2YoZXZ0LmtleUNvZGUpICE9PSAtMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gX3RoaXMuX2tleXMuaW5kZXhPZihldnQu
a2V5Q29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9rZXlzLnNwbGljZShpbmRleCwgMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZ0
LnByZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub1By
ZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5wcmV2
ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRh
Y2ggdGhlIGN1cnJlbnQgY29udHJvbHMgZnJvbSB0aGUgc3BlY2lmaWVkIGRvbSBlbGVtZW50Lgor
ICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdG8gc3RvcCBsaXN0ZW5p
bmcgdGhlIGlucHV0cyBmcm9tCisgICAgICovCisgICAgRm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3Zl
SW5wdXQucHJvdG90eXBlLmRldGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVudCkgeworICAg
ICAgICBpZiAodGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbktleWJvYXJk
T2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5vbktleWJvYXJkT2JzZXJ2
YWJsZS5yZW1vdmUodGhpcy5fb25LZXlib2FyZE9ic2VydmVyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZlcikgeworICAgICAgICAgICAg
ICAgIHRoaXMuX2VuZ2luZS5vbkNhbnZhc0JsdXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkNh
bnZhc0JsdXJPYnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vbktl
eWJvYXJkT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fb25DYW52YXNCbHVyT2Jz
ZXJ2ZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2tleXMgPSBbXTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgY3VycmVudCBjYW1lcmEgc3RhdGUgZGVwZW5k
aW5nIG9uIHRoZSBpbnB1dHMgdGhhdCBoYXZlIGJlZW4gdXNlZCB0aGlzIGZyYW1lLgorICAgICAq
IFRoaXMgaXMgYSBkeW5hbWljYWxseSBjcmVhdGVkIGxhbWJkYSB0byBhdm9pZCB0aGUgcGVyZm9y
bWFuY2UgcGVuYWx0eSBvZiBsb29waW5nIGZvciBpbnB1dHMgaW4gdGhlIHJlbmRlciBsb29wLgor
ICAgICAqLworICAgIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZS5jaGVj
a0lucHV0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgaWYgKHRoaXMuX29uS2V5Ym9hcmRPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5fa2V5
cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXlDb2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKF90aGlz
LmtleXNIZWlnaHRPZmZzZXRJbmNyLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xICYmCisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl9tb2RpZmllckhlaWdodE9mZnNldCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLmNhbWVyYS5oZWlnaHRPZmZzZXQgKz0gX3RoaXMuaGVpZ2h0U2Vuc2li
aWxpdHk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlz
LmtleXNIZWlnaHRPZmZzZXREZWNyLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xICYmCisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl9tb2RpZmllckhlaWdodE9mZnNldCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLmNhbWVyYS5oZWlnaHRPZmZzZXQgLT0gX3RoaXMuaGVpZ2h0U2Vuc2li
aWxpdHk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlz
LmtleXNSb3RhdGlvbk9mZnNldEluY3IuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTEgJiYKKyAgICAg
ICAgICAgICAgICAgICAgX3RoaXMuX21vZGlmaWVyUm90YXRpb25PZmZzZXQoKSkgeworICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5jYW1lcmEucm90YXRpb25PZmZzZXQgKz0gX3RoaXMucm90YXRp
b25TZW5zaWJpbGl0eTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuY2FtZXJhLnJvdGF0aW9u
T2Zmc2V0ICU9IDM2MDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoX3RoaXMua2V5c1JvdGF0aW9uT2Zmc2V0RGVjci5pbmRleE9mKGtleUNvZGUpICE9PSAtMSAm
JgorICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbW9kaWZpZXJSb3RhdGlvbk9mZnNldCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmNhbWVyYS5yb3RhdGlvbk9mZnNldCAtPSBfdGhp
cy5yb3RhdGlvblNlbnNpYmlsaXR5OworICAgICAgICAgICAgICAgICAgICBfdGhpcy5jYW1lcmEu
cm90YXRpb25PZmZzZXQgJT0gMzYwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChfdGhpcy5rZXlzUmFkaXVzSW5jci5pbmRleE9mKGtleUNvZGUpICE9PSAtMSAm
JgorICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbW9kaWZpZXJSYWRpdXMoKSkgeworICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5jYW1lcmEucmFkaXVzICs9IF90aGlzLnJhZGl1c1NlbnNpYmls
aXR5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5r
ZXlzUmFkaXVzRGVjci5pbmRleE9mKGtleUNvZGUpICE9PSAtMSAmJgorICAgICAgICAgICAgICAg
ICAgICBfdGhpcy5fbW9kaWZpZXJSYWRpdXMoKSkgeworICAgICAgICAgICAgICAgICAgICBfdGhp
cy5jYW1lcmEucmFkaXVzIC09IF90aGlzLnJhZGl1c1NlbnNpYmlsaXR5OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjdXJyZW50IGlucHV0LgorICAgICAqIEByZXR1
cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgRm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3Zl
SW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuICJGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCI7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBjbGFz
cy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQorICAgICAqLworICAg
IEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZS5nZXRTaW1wbGVOYW1lID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gImtleWJvYXJkIjsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENoZWNrIGlmIHRoZSBwcmVzc2VkIG1vZGlmaWVyIGtleXMgKEFsdC9DdHJsL1No
aWZ0KSBtYXRjaCB0aG9zZSBjb25maWd1cmVkIHRvCisgICAgICogYWxsb3cgbW9kaWZpY2F0aW9u
IG9mIHRoZSBoZWlnaHRPZmZzZXQgdmFsdWUuCisgICAgICovCisgICAgRm9sbG93Q2FtZXJhS2V5
Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLl9tb2RpZmllckhlaWdodE9mZnNldCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuICh0aGlzLmtleXNIZWlnaHRPZmZzZXRNb2RpZmllckFsdCA9
PT0gdGhpcy5fYWx0UHJlc3NlZCAmJgorICAgICAgICAgICAgdGhpcy5rZXlzSGVpZ2h0T2Zmc2V0
TW9kaWZpZXJDdHJsID09PSB0aGlzLl9jdHJsUHJlc3NlZCAmJgorICAgICAgICAgICAgdGhpcy5r
ZXlzSGVpZ2h0T2Zmc2V0TW9kaWZpZXJTaGlmdCA9PT0gdGhpcy5fc2hpZnRQcmVzc2VkKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBwcmVzc2VkIG1vZGlmaWVyIGtleXMg
KEFsdC9DdHJsL1NoaWZ0KSBtYXRjaCB0aG9zZSBjb25maWd1cmVkIHRvCisgICAgICogYWxsb3cg
bW9kaWZpY2F0aW9uIG9mIHRoZSByb3RhdGlvbk9mZnNldCB2YWx1ZS4KKyAgICAgKi8KKyAgICBG
b2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUuX21vZGlmaWVyUm90YXRpb25P
ZmZzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAodGhpcy5rZXlzUm90YXRpb25P
ZmZzZXRNb2RpZmllckFsdCA9PT0gdGhpcy5fYWx0UHJlc3NlZCAmJgorICAgICAgICAgICAgdGhp
cy5rZXlzUm90YXRpb25PZmZzZXRNb2RpZmllckN0cmwgPT09IHRoaXMuX2N0cmxQcmVzc2VkICYm
CisgICAgICAgICAgICB0aGlzLmtleXNSb3RhdGlvbk9mZnNldE1vZGlmaWVyU2hpZnQgPT09IHRo
aXMuX3NoaWZ0UHJlc3NlZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUg
cHJlc3NlZCBtb2RpZmllciBrZXlzIChBbHQvQ3RybC9TaGlmdCkgbWF0Y2ggdGhvc2UgY29uZmln
dXJlZCB0bworICAgICAqIGFsbG93IG1vZGlmaWNhdGlvbiBvZiB0aGUgcmFkaXVzIHZhbHVlLgor
ICAgICAqLworICAgIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZS5fbW9k
aWZpZXJSYWRpdXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAodGhpcy5rZXlzUmFk
aXVzTW9kaWZpZXJBbHQgPT09IHRoaXMuX2FsdFByZXNzZWQgJiYKKyAgICAgICAgICAgIHRoaXMu
a2V5c1JhZGl1c01vZGlmaWVyQ3RybCA9PT0gdGhpcy5fY3RybFByZXNzZWQgJiYKKyAgICAgICAg
ICAgIHRoaXMua2V5c1JhZGl1c01vZGlmaWVyU2hpZnQgPT09IHRoaXMuX3NoaWZ0UHJlc3NlZCk7
CisgICAgfTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29y
YXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYUtleWJvYXJk
TW92ZUlucHV0LnByb3RvdHlwZSwgImtleXNIZWlnaHRPZmZzZXRJbmNyIiwgdm9pZCAwKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnBy
b3RvdHlwZSwgImtleXNIZWlnaHRPZmZzZXREZWNyIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZSwgImtl
eXNIZWlnaHRPZmZzZXRNb2RpZmllckFsdCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkK
KyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJrZXlzSGVp
Z2h0T2Zmc2V0TW9kaWZpZXJDdHJsIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZSwgImtleXNIZWlnaHRP
ZmZzZXRNb2RpZmllclNoaWZ0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZSwgImtleXNSb3RhdGlvbk9m
ZnNldEluY3IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2Ft
ZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLCAia2V5c1JvdGF0aW9uT2Zmc2V0RGVjciIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2Fy
ZE1vdmVJbnB1dC5wcm90b3R5cGUsICJrZXlzUm90YXRpb25PZmZzZXRNb2RpZmllckFsdCIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1v
dmVJbnB1dC5wcm90b3R5cGUsICJrZXlzUm90YXRpb25PZmZzZXRNb2RpZmllckN0cmwiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3Zl
SW5wdXQucHJvdG90eXBlLCAia2V5c1JvdGF0aW9uT2Zmc2V0TW9kaWZpZXJTaGlmdCIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dC5wcm90b3R5cGUsICJrZXlzUmFkaXVzSW5jciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJr
ZXlzUmFkaXVzRGVjciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xs
b3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJrZXlzUmFkaXVzTW9kaWZpZXJB
bHQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJhS2V5
Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLCAia2V5c1JhZGl1c01vZGlmaWVyQ3RybCIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dC5wcm90b3R5cGUsICJrZXlzUmFkaXVzTW9kaWZpZXJTaGlmdCIsIHZvaWQgMCk7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAg
ICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
c2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90
b3R5cGUsICJoZWlnaHRTZW5zaWJpbGl0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkK
KyAgICBdLCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJyb3RhdGlv
blNlbnNpYmlsaXR5Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxv
d0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZSwgInJhZGl1c1NlbnNpYmlsaXR5Iiwg
dm9pZCAwKTsKKyAgICByZXR1cm4gRm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQ7Cit9KCkp
OworCitfQ2FtZXJhc19jYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkNhbWVyYUlucHV0VHlwZXMiXVsiRm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQi
XSA9IEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0OworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9DYW1lcmFzL0lucHV0cy9mb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vQ2FtZXJhcy9JbnB1dHMvZm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRm9sbG93Q2FtZXJhTW91c2VXaGVlbElu
cHV0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZvbGxvd0NhbWVyYU1v
dXNlV2hlZWxJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9sbG93Q2FtZXJhTW91c2VXaGVl
bElucHV0OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25v
ZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0
b3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfY2FtZXJhSW5wdXRz
TWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvY2Ft
ZXJhSW5wdXRzTWFuYWdlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FdmVudHNf
cG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vRXZlbnRzL3BvaW50ZXJFdmVudHMgKi8gIi4vRXZlbnRzL3BvaW50
ZXJFdmVudHMudHMiKTsKKworCisKKworLyoqCisgKiBNYW5hZ2UgdGhlIG1vdXNlIHdoZWVsIGlu
cHV0cyB0byBjb250cm9sIGEgZm9sbG93IGNhbWVyYS4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRzCisgKi8KK3ZhciBGb2xs
b3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgZnVuY3Rpb24gRm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0KCkgeworICAgICAgICAvKioK
KyAgICAgICAgICogTW91ZSB3aGVlbCBjb250cm9scyB6b29tLiAoTW91c2Ugd2hlZWwgbW9kaWZp
ZXMgY2FtZXJhLnJhZGl1cyB2YWx1ZS4pCisgICAgICAgICAqLworICAgICAgICB0aGlzLmF4aXND
b250cm9sUmFkaXVzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1vdWUgd2hlZWwg
Y29udHJvbHMgaGVpZ2h0LiAoTW91c2Ugd2hlZWwgbW9kaWZpZXMgY2FtZXJhLmhlaWdodE9mZnNl
dCB2YWx1ZS4pCisgICAgICAgICAqLworICAgICAgICB0aGlzLmF4aXNDb250cm9sSGVpZ2h0ID0g
ZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNb3VlIHdoZWVsIGNvbnRyb2xzIGFuZ2xl
LiAoTW91c2Ugd2hlZWwgbW9kaWZpZXMgY2FtZXJhLnJvdGF0aW9uT2Zmc2V0IHZhbHVlLikKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuYXhpc0NvbnRyb2xSb3RhdGlvbiA9IGZhbHNlOworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBTZXQgdGhlIG1vdXNlIHdoZWVsIHByZWNpc2lv
biBvciBob3cgZmFzdCBpcyB0aGUgY2FtZXJhIG1vdmVzIGluCisgICAgICAgICAqIHJlbGF0aW9u
IHRvIG1vdXNlV2hlZWwgZXZlbnRzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy53aGVlbFBy
ZWNpc2lvbiA9IDMuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIHdoZWVsRGVsdGFQZXJjZW50
YWdlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHdoZWVsUHJlY2lzaW9uIGlmIGRpZmZlcmVudCBm
cm9tIDAuCisgICAgICAgICAqIEl0IGRlZmluZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgY3VycmVudCBj
YW1lcmEucmFkaXVzIHRvIHVzZSBhcyBkZWx0YSB3aGVuIHdoZWVsIGlzIHVzZWQuCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLndoZWVsRGVsdGFQZXJjZW50YWdlID0gMDsKKyAgICB9CisgICAg
LyoqCisgICAgICogQXR0YWNoIHRoZSBpbnB1dCBjb250cm9scyB0byBhIHNwZWNpZmljIGRvbSBl
bGVtZW50IHRvIGdldCB0aGUgaW5wdXQgZnJvbS4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZp
bmVzIHRoZSBlbGVtZW50IHRoZSBjb250cm9scyBzaG91bGQgYmUgbGlzdGVuZWQgZnJvbQorICAg
ICAqIEBwYXJhbSBub1ByZXZlbnREZWZhdWx0IERlZmluZXMgd2hldGhlciBldmVudCBjYXVnaHQg
YnkgdGhlIGNvbnRyb2xzIHNob3VsZCBjYWxsIHByZXZlbnRkZWZhdWx0KCkgKGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudC9wcmV2ZW50RGVmYXVs
dCkKKyAgICAgKi8KKyAgICBGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQucHJvdG90eXBlLmF0
dGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCkgeworICAg
ICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl93aGVlbCA9IGZ1bmN0aW9uIChw
LCBzKSB7CisgICAgICAgICAgICAvLyBzYW5pdHkgY2hlY2sgLSB0aGlzIHNob3VsZCBiZSBhIFBv
aW50ZXJXaGVlbCBldmVudC4KKyAgICAgICAgICAgIGlmIChwLnR5cGUgIT09IF9FdmVudHNfcG9p
bnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVyRXZlbnRUeXBl
cyJdLlBPSU5URVJXSEVFTCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBldmVudCA9IHAuZXZlbnQ7CisgICAgICAgICAgICB2YXIgZGVs
dGEgPSAwOworICAgICAgICAgICAgLy8gQ2hyb21lLCBTYWZhcmk6IGV2ZW50LmRlbHRhWQorICAg
ICAgICAgICAgLy8gSUU6IGV2ZW50LndoZWVsRGVsdGEKKyAgICAgICAgICAgIC8vIEZpcmVmb3g6
IGV2ZW50LmRldGFpbCAoaW52ZXJ0ZWQpCisgICAgICAgICAgICB2YXIgd2hlZWxEZWx0YSA9IE1h
dGgubWF4KC0xLCBNYXRoLm1pbigxLCAoZXZlbnQuZGVsdGFZIHx8IGV2ZW50LndoZWVsRGVsdGEg
fHwgLWV2ZW50LmRldGFpbCkpKTsKKyAgICAgICAgICAgIGlmIChfdGhpcy53aGVlbERlbHRhUGVy
Y2VudGFnZSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KChfdGhpcy5heGlzQ29u
dHJvbFJhZGl1cyArCisgICAgICAgICAgICAgICAgICAgIF90aGlzLmF4aXNDb250cm9sSGVpZ2h0
ICsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXhpc0NvbnRyb2xSb3RhdGlvbikgPD0gMSwg
IndoZWVsRGVsdGFQZXJjZW50YWdlIG9ubHkgdXNhYmxlIHdoZW4gbW91c2Ugd2hlZWwgIiArCisg
ICAgICAgICAgICAgICAgICAgICJjb250cm9sbHMgT05FIGF4aXMuICIgKworICAgICAgICAgICAg
ICAgICAgICAiQ3VycmVudGx5IGVuYWJsZWQ6ICIgKworICAgICAgICAgICAgICAgICAgICAiYXhp
c0NvbnRyb2xSYWRpdXM6ICIgKyBfdGhpcy5heGlzQ29udHJvbFJhZGl1cyArCisgICAgICAgICAg
ICAgICAgICAgICIsIGF4aXNDb250cm9sSGVpZ2h0T2Zmc2V0OiAiICsgX3RoaXMuYXhpc0NvbnRy
b2xIZWlnaHQgKworICAgICAgICAgICAgICAgICAgICAiLCBheGlzQ29udHJvbFJvdGF0aW9uT2Zm
c2V0OiAiICsgX3RoaXMuYXhpc0NvbnRyb2xSb3RhdGlvbik7CisgICAgICAgICAgICAgICAgaWYg
KF90aGlzLmF4aXNDb250cm9sUmFkaXVzKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhID0K
KyAgICAgICAgICAgICAgICAgICAgICAgIHdoZWVsRGVsdGEgKiAwLjAxICogX3RoaXMud2hlZWxE
ZWx0YVBlcmNlbnRhZ2UgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNhbWVy
YS5yYWRpdXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90
aGlzLmF4aXNDb250cm9sSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhID0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHdoZWVsRGVsdGEgKiAwLjAxICogX3RoaXMud2hlZWxEZWx0
YVBlcmNlbnRhZ2UgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNhbWVyYS5o
ZWlnaHRPZmZzZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KF90aGlzLmF4aXNDb250cm9sUm90YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGEg
PQorICAgICAgICAgICAgICAgICAgICAgICAgd2hlZWxEZWx0YSAqIDAuMDEgKiBfdGhpcy53aGVl
bERlbHRhUGVyY2VudGFnZSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuY2Ft
ZXJhLnJvdGF0aW9uT2Zmc2V0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRlbHRhID0gd2hlZWxEZWx0YSAqIF90
aGlzLndoZWVsUHJlY2lzaW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlbHRh
KSB7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLmF4aXNDb250cm9sUmFkaXVzKSB7CisgICAg
ICAgICAgICAgICAgICAgIF90aGlzLmNhbWVyYS5yYWRpdXMgKz0gZGVsdGE7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLmF4aXNDb250cm9sSGVpZ2h0
KSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmNhbWVyYS5oZWlnaHRPZmZzZXQgLT0gZGVs
dGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLmF4
aXNDb250cm9sUm90YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuY2FtZXJhLnJv
dGF0aW9uT2Zmc2V0IC09IGRlbHRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAg
IGlmICghbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKyAgICAgICAgdGhpcy5fb2JzZXJ2ZXIgPSB0aGlzLmNhbWVyYS5nZXRTY2VuZSgpLm9uUG9p
bnRlck9ic2VydmFibGUuYWRkKHRoaXMuX3doZWVsLCBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSV0hF
RUwpOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0YWNoIHRoZSBjdXJyZW50IGNvbnRyb2xz
IGZyb20gdGhlIHNwZWNpZmllZCBkb20gZWxlbWVudC4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBE
ZWZpbmVzIHRoZSBlbGVtZW50IHRvIHN0b3AgbGlzdGVuaW5nIHRoZSBpbnB1dHMgZnJvbQorICAg
ICAqLworICAgIEZvbGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dC5wcm90b3R5cGUuZGV0YWNoQ29u
dHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgICAgIGlmICh0aGlzLl9vYnNlcnZlciAm
JiBlbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLmNhbWVyYS5nZXRTY2VuZSgpLm9uUG9pbnRl
ck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29ic2VydmVyKTsKKyAgICAgICAgICAgIHRoaXMuX29i
c2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3doZWVsID0gbnVsbDsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY3Vy
cmVudCBpbnRwdXQuCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAg
ICBGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJBcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5w
dXQiOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBmcmllbmRseSBuYW1lIGFzc29j
aWF0ZWQgd2l0aCB0aGUgaW5wdXQgY2xhc3MuCisgICAgICogQHJldHVybnMgdGhlIGlucHV0IGZy
aWVuZGx5IG5hbWUKKyAgICAgKi8KKyAgICBGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQucHJv
dG90eXBlLmdldFNpbXBsZU5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAibW91
c2V3aGVlbCI7CisgICAgfTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVy
YU1vdXNlV2hlZWxJbnB1dC5wcm90b3R5cGUsICJheGlzQ29udHJvbFJhZGl1cyIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQu
cHJvdG90eXBlLCAiYXhpc0NvbnRyb2xIZWlnaHQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJd
KSgpCisgICAgXSwgRm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0LnByb3RvdHlwZSwgImF4aXND
b250cm9sUm90YXRpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9s
bG93Q2FtZXJhTW91c2VXaGVlbElucHV0LnByb3RvdHlwZSwgIndoZWVsUHJlY2lzaW9uIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYU1vdXNlV2hlZWxJ
bnB1dC5wcm90b3R5cGUsICJ3aGVlbERlbHRhUGVyY2VudGFnZSIsIHZvaWQgMCk7CisgICAgcmV0
dXJuIEZvbGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dDsKK30oKSk7CisKK19DYW1lcmFzX2NhbWVy
YUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ2FtZXJhSW5wdXRU
eXBlcyJdWyJGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQiXSA9IEZvbGxvd0NhbWVyYU1vdXNl
V2hlZWxJbnB1dDsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9JbnB1dHMvZm9s
bG93Q2FtZXJhUG9pbnRlcnNJbnB1dC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9JbnB1dHMv
Zm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9y
cyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
Q2FtZXJhc19jYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFn
ZXIgKi8gIi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0NhbWVyYXNfSW5wdXRzX0Jhc2VDYW1lcmFQb2ludGVyc0lucHV0X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9D
YW1lcmFzL0lucHV0cy9CYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dCAqLyAiLi9DYW1lcmFzL0lucHV0
cy9CYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dC50cyIpOworCisKKworCisvKioKKyAqIE1hbmFnZSB0
aGUgcG9pbnRlcnMgaW5wdXRzIHRvIGNvbnRyb2wgYW4gZm9sbG93IGNhbWVyYS4KKyAqIEBzZWUg
aHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRz
CisgKi8KK3ZhciBGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0ID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQsIF9zdXBlcik7CisgICAgZnVu
Y3Rpb24gRm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dCgpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
X3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBwb2ludGVyIGFuZ3VsYXIgc2Vu
c2liaWxpdHkgYWxvbmcgdGhlIFggYXhpcyBvciBob3cgZmFzdCBpcworICAgICAgICAgKiB0aGUg
Y2FtZXJhIHJvdGF0aW5nLgorICAgICAgICAgKiBBIG5lZ2F0aXZlIG51bWJlciB3aWxsIHJldmVy
c2UgdGhlIGF4aXMgZGlyZWN0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYW5ndWxh
clNlbnNpYmlsaXR5WCA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBw
b2ludGVyIGFuZ3VsYXIgc2Vuc2liaWxpdHkgYWxvbmcgdGhlIFkgYXhpcyBvciBob3cgZmFzdCBp
cworICAgICAgICAgKiB0aGUgY2FtZXJhIHJvdGF0aW5nLgorICAgICAgICAgKiBBIG5lZ2F0aXZl
IG51bWJlciB3aWxsIHJldmVyc2UgdGhlIGF4aXMgZGlyZWN0aW9uLgorICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMuYW5ndWxhclNlbnNpYmlsaXR5WSA9IDE7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBEZWZpbmVzIHRoZSBwb2ludGVyIHBpbmNoIHByZWNpc2lvbiBvciBob3cgZmFzdCBpcyB0
aGUgY2FtZXJhIHpvb21pbmcuCisgICAgICAgICAqIEEgbmVnYXRpdmUgbnVtYmVyIHdpbGwgcmV2
ZXJzZSB0aGUgYXhpcyBkaXJlY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5waW5j
aFByZWNpc2lvbiA9IDEwMDAwLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBwaW5jaERlbHRh
UGVyY2VudGFnZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiBwaW5jaFByZWNpc2lvbiBpZiBkaWZm
ZXJlbnQKKyAgICAgICAgICogZnJvbSAwLgorICAgICAgICAgKiBJdCBkZWZpbmVzIHRoZSBwZXJj
ZW50YWdlIG9mIGN1cnJlbnQgY2FtZXJhLnJhZGl1cyB0byB1c2UgYXMgZGVsdGEgd2hlbgorICAg
ICAgICAgKiBwaW5jaCB6b29tIGlzIHVzZWQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5w
aW5jaERlbHRhUGVyY2VudGFnZSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb2ludGVy
IFggYXhpcyBjb250cm9scyB6b29tLiAoWCBheGlzIG1vZGlmaWVzIGNhbWVyYS5yYWRpdXMgdmFs
dWUuKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXhpc1hDb250cm9sUmFkaXVzID0gZmFs
c2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb2ludGVyIFggYXhpcyBjb250cm9scyBoZWln
aHQuIChYIGF4aXMgbW9kaWZpZXMgY2FtZXJhLmhlaWdodE9mZnNldCB2YWx1ZS4pCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5heGlzWENvbnRyb2xIZWlnaHQgPSBmYWxzZTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFBvaW50ZXIgWCBheGlzIGNvbnRyb2xzIGFuZ2xlLiAoWCBheGlzIG1v
ZGlmaWVzIGNhbWVyYS5yb3RhdGlvbk9mZnNldCB2YWx1ZS4pCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5heGlzWENvbnRyb2xSb3RhdGlvbiA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBQb2ludGVyIFkgYXhpcyBjb250cm9scyB6b29tLiAoWSBheGlzIG1vZGlmaWVzIGNhbWVy
YS5yYWRpdXMgdmFsdWUuKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXhpc1lDb250cm9s
UmFkaXVzID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb2ludGVyIFkgYXhpcyBj
b250cm9scyBoZWlnaHQuIChZIGF4aXMgbW9kaWZpZXMgY2FtZXJhLmhlaWdodE9mZnNldCB2YWx1
ZS4pCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5heGlzWUNvbnRyb2xIZWlnaHQgPSB0cnVl
OworICAgICAgICAvKioKKyAgICAgICAgICogUG9pbnRlciBZIGF4aXMgY29udHJvbHMgYW5nbGUu
IChZIGF4aXMgbW9kaWZpZXMgY2FtZXJhLnJvdGF0aW9uT2Zmc2V0IHZhbHVlLikKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLmF4aXNZQ29udHJvbFJvdGF0aW9uID0gZmFsc2U7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBQaW5jaCBjb250cm9scyB6b29tLiAoUGluY2ggbW9kaWZpZXMgY2Ft
ZXJhLnJhZGl1cyB2YWx1ZS4pCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5heGlzUGluY2hD
b250cm9sUmFkaXVzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBpbmNoIGNvbnRy
b2xzIGhlaWdodC4gKFBpbmNoIG1vZGlmaWVzIGNhbWVyYS5oZWlnaHRPZmZzZXQgdmFsdWUuKQor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXhpc1BpbmNoQ29udHJvbEhlaWdodCA9IGZhbHNl
OworICAgICAgICAvKioKKyAgICAgICAgICogUGluY2ggY29udHJvbHMgYW5nbGUuIChQaW5jaCBt
b2RpZmllcyBjYW1lcmEucm90YXRpb25PZmZzZXQgdmFsdWUuKQorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuYXhpc1BpbmNoQ29udHJvbFJvdGF0aW9uID0gZmFsc2U7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBMb2cgZXJyb3IgbWVzc2FnZXMgaWYgYmFzaWMgbWlzY29uZmlndXJhdGlvbiBo
YXMgb2NjdXJyZWQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy53YXJuaW5nRW5hYmxlID0g
dHJ1ZTsKKyAgICAgICAgLyogQ2hlY2sgZm9yIG9idmlvdXMgbWlzY29uZmlndXJhdGlvbi4gKi8K
KyAgICAgICAgX3RoaXMuX3dhcm5pbmdDb3VudGVyID0gMDsKKyAgICAgICAgcmV0dXJuIF90aGlz
OworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjdXJy
ZW50IGlucHV0LgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAg
Rm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gIkZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQiOworICAg
IH07CisgICAgRm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90b3R5cGUub25Ub3VjaCA9IGZ1
bmN0aW9uIChwb2ludEEsIG9mZnNldFgsIG9mZnNldFkpIHsKKyAgICAgICAgdGhpcy5fd2Fybmlu
ZygpOworICAgICAgICBpZiAodGhpcy5heGlzWENvbnRyb2xSb3RhdGlvbikgeworICAgICAgICAg
ICAgdGhpcy5jYW1lcmEucm90YXRpb25PZmZzZXQgKz0gb2Zmc2V0WCAvIHRoaXMuYW5ndWxhclNl
bnNpYmlsaXR5WDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLmF4aXNZQ29udHJv
bFJvdGF0aW9uKSB7CisgICAgICAgICAgICB0aGlzLmNhbWVyYS5yb3RhdGlvbk9mZnNldCArPSBv
ZmZzZXRZIC8gdGhpcy5hbmd1bGFyU2Vuc2liaWxpdHlYOworICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLmF4aXNYQ29udHJvbEhlaWdodCkgeworICAgICAgICAgICAgdGhpcy5jYW1lcmEuaGVp
Z2h0T2Zmc2V0ICs9IG9mZnNldFggLyB0aGlzLmFuZ3VsYXJTZW5zaWJpbGl0eVk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5heGlzWUNvbnRyb2xIZWlnaHQpIHsKKyAgICAgICAg
ICAgIHRoaXMuY2FtZXJhLmhlaWdodE9mZnNldCArPSBvZmZzZXRZIC8gdGhpcy5hbmd1bGFyU2Vu
c2liaWxpdHlZOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmF4aXNYQ29udHJvbFJhZGl1
cykgeworICAgICAgICAgICAgdGhpcy5jYW1lcmEucmFkaXVzIC09IG9mZnNldFggLyB0aGlzLmFu
Z3VsYXJTZW5zaWJpbGl0eVk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5heGlz
WUNvbnRyb2xSYWRpdXMpIHsKKyAgICAgICAgICAgIHRoaXMuY2FtZXJhLnJhZGl1cyAtPSBvZmZz
ZXRZIC8gdGhpcy5hbmd1bGFyU2Vuc2liaWxpdHlZOworICAgICAgICB9CisgICAgfTsKKyAgICBG
b2xsb3dDYW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZS5vbk11bHRpVG91Y2ggPSBmdW5jdGlv
biAocG9pbnRBLCBwb2ludEIsIHByZXZpb3VzUGluY2hTcXVhcmVkRGlzdGFuY2UsIHBpbmNoU3F1
YXJlZERpc3RhbmNlLCBwcmV2aW91c011bHRpVG91Y2hQYW5Qb3NpdGlvbiwgbXVsdGlUb3VjaFBh
blBvc2l0aW9uKSB7CisgICAgICAgIGlmIChwcmV2aW91c1BpbmNoU3F1YXJlZERpc3RhbmNlID09
PSAwICYmIHByZXZpb3VzTXVsdGlUb3VjaFBhblBvc2l0aW9uID09PSBudWxsKSB7CisgICAgICAg
ICAgICAvLyBGaXJzdCB0aW1lIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3IgbmV3IHBpbmNoLgor
ICAgICAgICAgICAgLy8gTmV4dCB0aW1lIHRoaXMgaXMgY2FsbGVkIHRoZXJlIHdpbGwgYmUgYQor
ICAgICAgICAgICAgLy8gcHJldmlvdXNQaW5jaFNxdWFyZWREaXN0YW5jZSBhbmQgcGluY2hTcXVh
cmVkRGlzdGFuY2UgdG8gY29tcGFyZS4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocGluY2hTcXVhcmVkRGlzdGFuY2UgPT09IDAgJiYgbXVsdGlUb3VjaFBhblBv
c2l0aW9uID09PSBudWxsKSB7CisgICAgICAgICAgICAvLyBMYXN0IHRpbWUgdGhpcyBtZXRob2Qg
aXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYSBwaW5jaC4KKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgcGluY2hEZWx0YSA9IChwaW5jaFNxdWFyZWREaXN0YW5jZSAt
IHByZXZpb3VzUGluY2hTcXVhcmVkRGlzdGFuY2UpIC8KKyAgICAgICAgICAgICh0aGlzLnBpbmNo
UHJlY2lzaW9uICogKHRoaXMuYW5ndWxhclNlbnNpYmlsaXR5WCArIHRoaXMuYW5ndWxhclNlbnNp
YmlsaXR5WSkgLyAyKTsKKyAgICAgICAgaWYgKHRoaXMucGluY2hEZWx0YVBlcmNlbnRhZ2UpIHsK
KyAgICAgICAgICAgIHBpbmNoRGVsdGEgKj0gMC4wMSAqIHRoaXMucGluY2hEZWx0YVBlcmNlbnRh
Z2U7CisgICAgICAgICAgICBpZiAodGhpcy5heGlzUGluY2hDb250cm9sUm90YXRpb24pIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLmNhbWVyYS5yb3RhdGlvbk9mZnNldCArPSBwaW5jaERlbHRhICog
dGhpcy5jYW1lcmEucm90YXRpb25PZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodGhpcy5heGlzUGluY2hDb250cm9sSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgdGhpcy5j
YW1lcmEuaGVpZ2h0T2Zmc2V0ICs9IHBpbmNoRGVsdGEgKiB0aGlzLmNhbWVyYS5oZWlnaHRPZmZz
ZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5heGlzUGluY2hDb250cm9s
UmFkaXVzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEucmFkaXVzIC09IHBpbmNoRGVs
dGEgKiB0aGlzLmNhbWVyYS5yYWRpdXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAodGhpcy5heGlzUGluY2hDb250cm9sUm90YXRpb24p
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYS5yb3RhdGlvbk9mZnNldCArPSBwaW5jaERl
bHRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuYXhpc1BpbmNoQ29udHJv
bEhlaWdodCkgeworICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLmhlaWdodE9mZnNldCArPSBw
aW5jaERlbHRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuYXhpc1BpbmNo
Q29udHJvbFJhZGl1cykgeworICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLnJhZGl1cyAtPSBw
aW5jaERlbHRhOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBGb2xsb3dD
YW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZS5fd2FybmluZyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLndhcm5pbmdFbmFibGUgfHwgdGhpcy5fd2FybmluZ0NvdW50ZXIrKyAl
IDEwMCAhPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZh
ciB3YXJuID0gIkl0IHByb2JhYmx5IG9ubHkgbWFrZXMgc2Vuc2UgdG8gY29udHJvbCBPTkUgY2Ft
ZXJhICIgKworICAgICAgICAgICAgInByb3BlcnR5IHdpdGggZWFjaCBwb2ludGVyIGF4aXMuIFNl
dCAnd2FybmluZ0VuYWJsZSA9IGZhbHNlJyAiICsKKyAgICAgICAgICAgICJpZiB5b3UgYXJlIHN1
cmUuIEN1cnJlbnRseSBlbmFibGVkOiAiOworICAgICAgICBjb25zb2xlLmFzc2VydCgodGhpcy5h
eGlzWENvbnRyb2xSb3RhdGlvbiArCisgICAgICAgICAgICB0aGlzLmF4aXNYQ29udHJvbEhlaWdo
dCArCisgICAgICAgICAgICB0aGlzLmF4aXNYQ29udHJvbFJhZGl1cykgPD0gMSwgd2FybiArCisg
ICAgICAgICAgICAiYXhpc1hDb250cm9sUm90YXRpb246ICIgKyB0aGlzLmF4aXNYQ29udHJvbFJv
dGF0aW9uICsKKyAgICAgICAgICAgICIsIGF4aXNYQ29udHJvbEhlaWdodDogIiArIHRoaXMuYXhp
c1hDb250cm9sSGVpZ2h0ICsKKyAgICAgICAgICAgICIsIGF4aXNYQ29udHJvbFJhZGl1czogIiAr
IHRoaXMuYXhpc1hDb250cm9sUmFkaXVzKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoKHRoaXMu
YXhpc1lDb250cm9sUm90YXRpb24gKworICAgICAgICAgICAgdGhpcy5heGlzWUNvbnRyb2xIZWln
aHQgKworICAgICAgICAgICAgdGhpcy5heGlzWUNvbnRyb2xSYWRpdXMpIDw9IDEsIHdhcm4gKwor
ICAgICAgICAgICAgImF4aXNZQ29udHJvbFJvdGF0aW9uOiAiICsgdGhpcy5heGlzWUNvbnRyb2xS
b3RhdGlvbiArCisgICAgICAgICAgICAiLCBheGlzWUNvbnRyb2xIZWlnaHQ6ICIgKyB0aGlzLmF4
aXNZQ29udHJvbEhlaWdodCArCisgICAgICAgICAgICAiLCBheGlzWUNvbnRyb2xSYWRpdXM6ICIg
KyB0aGlzLmF4aXNZQ29udHJvbFJhZGl1cyk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCh0aGlz
LmF4aXNQaW5jaENvbnRyb2xSb3RhdGlvbiArCisgICAgICAgICAgICB0aGlzLmF4aXNQaW5jaENv
bnRyb2xIZWlnaHQgKworICAgICAgICAgICAgdGhpcy5heGlzUGluY2hDb250cm9sUmFkaXVzKSA8
PSAxLCB3YXJuICsKKyAgICAgICAgICAgICJheGlzUGluY2hDb250cm9sUm90YXRpb246ICIgKyB0
aGlzLmF4aXNQaW5jaENvbnRyb2xSb3RhdGlvbiArCisgICAgICAgICAgICAiLCBheGlzUGluY2hD
b250cm9sSGVpZ2h0OiAiICsgdGhpcy5heGlzUGluY2hDb250cm9sSGVpZ2h0ICsKKyAgICAgICAg
ICAgICIsIGF4aXNQaW5jaENvbnRyb2xSYWRpdXM6ICIgKyB0aGlzLmF4aXNQaW5jaENvbnRyb2xS
YWRpdXMpOworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFQ
b2ludGVyc0lucHV0LnByb3RvdHlwZSwgImFuZ3VsYXJTZW5zaWJpbGl0eVgiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dC5wcm90
b3R5cGUsICJhbmd1bGFyU2Vuc2liaWxpdHlZIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLCAicGluY2hQcmVj
aXNpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJh
UG9pbnRlcnNJbnB1dC5wcm90b3R5cGUsICJwaW5jaERlbHRhUGVyY2VudGFnZSIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0LnBy
b3RvdHlwZSwgImF4aXNYQ29udHJvbFJhZGl1cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZSwgImF4aXNYQ29u
dHJvbEhlaWdodCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dD
YW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZSwgImF4aXNYQ29udHJvbFJvdGF0aW9uIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5w
dXQucHJvdG90eXBlLCAiYXhpc1lDb250cm9sUmFkaXVzIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLCAiYXhp
c1lDb250cm9sSGVpZ2h0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZv
bGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90eXBlLCAiYXhpc1lDb250cm9sUm90YXRpb24i
LCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVj
b3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJhUG9pbnRl
cnNJbnB1dC5wcm90b3R5cGUsICJheGlzUGluY2hDb250cm9sUmFkaXVzIiwgdm9pZCAwKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQucHJvdG90
eXBlLCAiYXhpc1BpbmNoQ29udHJvbEhlaWdodCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0LnByb3RvdHlwZSwgImF4aXNQaW5j
aENvbnRyb2xSb3RhdGlvbiIsIHZvaWQgMCk7CisgICAgcmV0dXJuIEZvbGxvd0NhbWVyYVBvaW50
ZXJzSW5wdXQ7Cit9KF9DYW1lcmFzX0lucHV0c19CYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJCYXNlQ2FtZXJhUG9pbnRlcnNJbnB1dCJdKSk7CisK
K19DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQ2FtZXJhSW5wdXRUeXBlcyJdWyJGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0Il0gPSBGb2xs
b3dDYW1lcmFQb2ludGVyc0lucHV0OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFz
L0lucHV0cy9mcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBGcmVlQ2FtZXJhRGV2aWNl
T3JpZW50YXRpb25JbnB1dCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJG
cmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRnJl
ZUNhbWVyYURldmljZU9yaWVudGF0aW9uSW5wdXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhSW5wdXRz
TWFuYWdlciAqLyAiLi9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2ZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9D
YW1lcmFzL2ZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvZnJlZUNhbWVyYUlu
cHV0c01hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZh
YmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisKKwor
CisKKworLyoqCisgKiBBZGQgb3JpZW50YXRpb24gaW5wdXQgc3VwcG9ydCB0byB0aGUgaW5wdXQg
bWFuYWdlci4KKyAqIEByZXR1cm5zIHRoZSBjdXJyZW50IGlucHV0IG1hbmFnZXIKKyAqLworX0Nh
bWVyYXNfZnJlZUNhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siRnJlZUNhbWVyYUlucHV0c01hbmFnZXIiXS5wcm90b3R5cGUuYWRkRGV2aWNlT3JpZW50YXRp
b24gPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCF0aGlzLl9kZXZpY2VPcmllbnRhdGlvbklucHV0
KSB7CisgICAgICAgIHRoaXMuX2RldmljZU9yaWVudGF0aW9uSW5wdXQgPSBuZXcgRnJlZUNhbWVy
YURldmljZU9yaWVudGF0aW9uSW5wdXQoKTsKKyAgICAgICAgdGhpcy5hZGQodGhpcy5fZGV2aWNl
T3JpZW50YXRpb25JbnB1dCk7CisgICAgfQorICAgIHJldHVybiB0aGlzOworfTsKKy8qKgorICog
VGFrZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBkZXZpY2UgYXMg
cmVwb3J0ZWQgYnkgdGhlIGRldmljZW9yaWVudGF0aW9uIGV2ZW50IHRvIG9yaWVudCB0aGUgY2Ft
ZXJhLgorICogU2NyZWVuIHJvdGF0aW9uIGlzIHRha2VuIGludG8gYWNjb3VudC4KKyAqIEBzZWUg
aHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRz
CisgKi8KK3ZhciBGcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dCA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgaW5w
dXQKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXpp
bmdfY2FtZXJhX2lucHV0cworICAgICAqLworICAgIGZ1bmN0aW9uIEZyZWVDYW1lcmFEZXZpY2VP
cmllbnRhdGlvbklucHV0KCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0
aGlzLl9zY3JlZW5PcmllbnRhdGlvbkFuZ2xlID0gMDsKKyAgICAgICAgdGhpcy5fc2NyZWVuUXVh
dGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIHRoaXMuX2FscGhhID0gMDsKKyAgICAgICAg
dGhpcy5fYmV0YSA9IDA7CisgICAgICAgIHRoaXMuX2dhbW1hID0gMDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX29uRGV2aWNlT3Jp
ZW50YXRpb25DaGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0aGlzLl9vcmll
bnRhdGlvbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5fc2NyZWVu
T3JpZW50YXRpb25BbmdsZSA9ICh3aW5kb3cub3JpZW50YXRpb24gIT09IHVuZGVmaW5lZCA/ICt3
aW5kb3cub3JpZW50YXRpb24gOiAod2luZG93LnNjcmVlbi5vcmllbnRhdGlvbiAmJiAod2luZG93
LnNjcmVlbi5vcmllbnRhdGlvbilbJ2FuZ2xlJ10gPyAod2luZG93LnNjcmVlbi5vcmllbnRhdGlv
bikuYW5nbGUgOiAwKSk7CisgICAgICAgICAgICBfdGhpcy5fc2NyZWVuT3JpZW50YXRpb25Bbmds
ZSA9IC1fTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUb29scyJdLlRv
UmFkaWFucyhfdGhpcy5fc2NyZWVuT3JpZW50YXRpb25BbmdsZSAvIDIpOworICAgICAgICAgICAg
X3RoaXMuX3NjcmVlblF1YXRlcm5pb24uY29weUZyb21GbG9hdHMoMCwgTWF0aC5zaW4oX3RoaXMu
X3NjcmVlbk9yaWVudGF0aW9uQW5nbGUpLCAwLCBNYXRoLmNvcyhfdGhpcy5fc2NyZWVuT3JpZW50
YXRpb25BbmdsZSkpOworICAgICAgICB9OworICAgICAgICB0aGlzLl9kZXZpY2VPcmllbnRhdGlv
biA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgIF90aGlzLl9hbHBoYSA9IGV2dC5hbHBo
YSAhPT0gbnVsbCA/IGV2dC5hbHBoYSA6IDA7CisgICAgICAgICAgICBfdGhpcy5fYmV0YSA9IGV2
dC5iZXRhICE9PSBudWxsID8gZXZ0LmJldGEgOiAwOworICAgICAgICAgICAgX3RoaXMuX2dhbW1h
ID0gZXZ0LmdhbW1hICE9PSBudWxsID8gZXZ0LmdhbW1hIDogMDsKKyAgICAgICAgICAgIGlmIChl
dnQuYWxwaGEgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fb25EZXZpY2VPcmll
bnRhdGlvbkNoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycygpOworICAgICAgICAgICAg
fQorICAgICAgICB9OworICAgICAgICB0aGlzLl9jb25zdGFudFRyYW5mb3JtID0gbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl0o
LU1hdGguc3FydCgwLjUpLCAwLCAwLCBNYXRoLnNxcnQoMC41KSk7CisgICAgICAgIHRoaXMuX29y
aWVudGF0aW9uQ2hhbmdlZCgpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBDYW4gYmUgdXNlZCB0
byBkZXRlY3QgaWYgYSBkZXZpY2Ugb3JpZW50YXRpb24gc2Vuc29yIGlzIGF2YWlsaWJsZSBvbiBh
IGRldmljZQorICAgICAqIEBwYXJhbSB0aW1lb3V0IGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vj
b25kcyB0byB3YWl0IGZvciBhIHJlc3BvbnNlIGZyb20gdGhlIHNlbnNvciAoZGVmYXVsdDogaW5m
aW5pdGUpCisgICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uIG9y
aWVudGF0aW9uIGNoYW5nZQorICAgICAqLworICAgIEZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlv
bklucHV0LldhaXRGb3JPcmllbnRhdGlvbkNoYW5nZUFzeW5jID0gZnVuY3Rpb24gKHRpbWVvdXQp
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeworICAg
ICAgICAgICAgdmFyIGdvdFZhbHVlID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgZXZlbnRIYW5k
bGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExp
c3RlbmVyKCJkZXZpY2VvcmllbnRhdGlvbiIsIGV2ZW50SGFuZGxlcik7CisgICAgICAgICAgICAg
ICAgZ290VmFsdWUgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlcygpOworICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIC8vIElmIHRpbWVvdXQgaXMgcHVwdWxhdGVkIHJlamVjdCB0aGUgcHJv
bWlzZQorICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHsKKyAgICAgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFnb3RWYWx1ZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRldmlj
ZW9yaWVudGF0aW9uIiwgZXZlbnRIYW5kbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
aigiV2FpdEZvck9yaWVudGF0aW9uQ2hhbmdlQXN5bmMgdGltZWQgb3V0Iik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LCB0aW1lb3V0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJkZXZpY2VvcmllbnRhdGlvbiIs
IGV2ZW50SGFuZGxlcik7CisgICAgICAgIH0pOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0LnByb3RvdHlwZSwgImNhbWVy
YSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0aGUgY2FtZXJhIGNvbnRyb2xs
ZWQgYnkgdGhlIGlucHV0LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgICAgICB0aGlzLl9jYW1lcmEgPSBjYW1lcmE7CisgICAgICAgICAgICBpZiAodGhpcy5f
Y2FtZXJhICE9IG51bGwgJiYgIXRoaXMuX2NhbWVyYS5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9jYW1lcmEucm90YXRpb25RdWF0ZXJuaW9uID0gbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl0o
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9jYW1lcmEpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9jYW1lcmEub25EaXNwb3NlT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fb25EZXZpY2VPcmllbnRhdGlvbkNoYW5n
ZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEF0dGFjaCB0aGUgaW5wdXQgY29u
dHJvbHMgdG8gYSBzcGVjaWZpYyBkb20gZWxlbWVudCB0byBnZXQgdGhlIGlucHV0IGZyb20uCisg
ICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0aGUgY29udHJvbHMgc2hv
dWxkIGJlIGxpc3RlbmVkIGZyb20KKyAgICAgKiBAcGFyYW0gbm9QcmV2ZW50RGVmYXVsdCBEZWZp
bmVzIHdoZXRoZXIgZXZlbnQgY2F1Z2h0IGJ5IHRoZSBjb250cm9scyBzaG91bGQgY2FsbCBwcmV2
ZW50ZGVmYXVsdCgpIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dl
Yi9BUEkvRXZlbnQvcHJldmVudERlZmF1bHQpCisgICAgICovCisgICAgRnJlZUNhbWVyYURldmlj
ZU9yaWVudGF0aW9uSW5wdXQucHJvdG90eXBlLmF0dGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxl
bWVudCwgbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICB2YXIgaG9zdFdpbmRvdyA9IHRoaXMu
Y2FtZXJhLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuZ2V0SG9zdFdpbmRvdygpOworICAgICAgICBo
b3N0V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIiwgdGhpcy5fb3Jp
ZW50YXRpb25DaGFuZ2VkKTsKKyAgICAgICAgaG9zdFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJk
ZXZpY2VvcmllbnRhdGlvbiIsIHRoaXMuX2RldmljZU9yaWVudGF0aW9uKTsKKyAgICAgICAgLy9J
biBjZXJ0YWluIGNhc2VzLCB0aGUgYXR0YWNoIGNvbnRyb2wgaXMgY2FsbGVkIEFGVEVSIG9yaWVu
dGF0aW9uIHdhcyBjaGFuZ2VkLAorICAgICAgICAvL1NvIHRoaXMgaXMgbmVlZGVkLgorICAgICAg
ICB0aGlzLl9vcmllbnRhdGlvbkNoYW5nZWQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERl
dGFjaCB0aGUgY3VycmVudCBjb250cm9scyBmcm9tIHRoZSBzcGVjaWZpZWQgZG9tIGVsZW1lbnQu
CisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0byBzdG9wIGxpc3Rl
bmluZyB0aGUgaW5wdXRzIGZyb20KKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhRGV2aWNlT3JpZW50
YXRpb25JbnB1dC5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7
CisgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIs
IHRoaXMuX29yaWVudGF0aW9uQ2hhbmdlZCk7CisgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExp
c3RlbmVyKCJkZXZpY2VvcmllbnRhdGlvbiIsIHRoaXMuX2RldmljZU9yaWVudGF0aW9uKTsKKyAg
ICAgICAgdGhpcy5fYWxwaGEgPSAwOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIHRo
ZSBjdXJyZW50IGNhbWVyYSBzdGF0ZSBkZXBlbmRpbmcgb24gdGhlIGlucHV0cyB0aGF0IGhhdmUg
YmVlbiB1c2VkIHRoaXMgZnJhbWUuCisgICAgICogVGhpcyBpcyBhIGR5bmFtaWNhbGx5IGNyZWF0
ZWQgbGFtYmRhIHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9mIGxvb3BpbmcgZm9y
IGlucHV0cyBpbiB0aGUgcmVuZGVyIGxvb3AuCisgICAgICovCisgICAgRnJlZUNhbWVyYURldmlj
ZU9yaWVudGF0aW9uSW5wdXQucHJvdG90eXBlLmNoZWNrSW5wdXRzID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAvL2lmIG5vIGRldmljZSBvcmllbnRhdGlvbiBwcm92aWRlZCwgZG9uJ3QgdXBkYXRl
IHRoZSByb3RhdGlvbi4KKyAgICAgICAgLy9Pbmx5IHRlc3RpbmcgYWdhaW5zdCBhbHBoYSB1bmRl
ciB0aGUgYXNzdW1wdGlvbiB0aGF0bm9yaWVudGF0aW9uIHdpbGwgbmV2ZXIgYmUgc28gZXhhY3Qg
d2hlbiBzZXQuCisgICAgICAgIGlmICghdGhpcy5fYWxwaGEpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYoX01p
c2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5Ub1JhZGlhbnMo
dGhpcy5fYWxwaGEpLCBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJU
b29scyJdLlRvUmFkaWFucyh0aGlzLl9iZXRhKSwgLV9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlRvb2xzIl0uVG9SYWRpYW5zKHRoaXMuX2dhbW1hKSwgdGhpcy5jYW1l
cmEucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgdGhpcy5fY2FtZXJhLnJvdGF0aW9uUXVh
dGVybmlvbi5tdWx0aXBseUluUGxhY2UodGhpcy5fc2NyZWVuUXVhdGVybmlvbik7CisgICAgICAg
IHRoaXMuX2NhbWVyYS5yb3RhdGlvblF1YXRlcm5pb24ubXVsdGlwbHlJblBsYWNlKHRoaXMuX2Nv
bnN0YW50VHJhbmZvcm0pOworICAgICAgICAvL01pcnJvciBvbiBYWSBQbGFuZQorICAgICAgICB0
aGlzLl9jYW1lcmEucm90YXRpb25RdWF0ZXJuaW9uLnogKj0gLTE7CisgICAgICAgIHRoaXMuX2Nh
bWVyYS5yb3RhdGlvblF1YXRlcm5pb24udyAqPSAtMTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGN1cnJlbnQgaW50cHV0LgorICAgICAqIEByZXR1
cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgRnJlZUNhbWVyYURldmljZU9yaWVudGF0
aW9uSW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuICJGcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dCI7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1
dCBjbGFzcy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQorICAgICAq
LworICAgIEZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0LnByb3RvdHlwZS5nZXRTaW1w
bGVOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gImRldmljZU9yaWVudGF0aW9u
IjsKKyAgICB9OworICAgIHJldHVybiBGcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dDsK
K30oKSk7CisKK19DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siQ2FtZXJhSW5wdXRUeXBlcyJdWyJGcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRp
b25JbnB1dCJdID0gRnJlZUNhbWVyYURldmljZU9yaWVudGF0aW9uSW5wdXQ7CisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFHYW1lcGFkSW5wdXQudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFHYW1lcGFkSW5wdXQudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogRnJlZUNhbWVyYUdhbWVwYWRJbnB1dCAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVlQ2FtZXJhR2FtZXBhZElucHV0IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBGcmVlQ2FtZXJhR2FtZXBhZElucHV0OyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5l
czYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9N
aXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1l
cmFJbnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0
aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfR2FtZXBhZHNfZ2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vR2FtZXBhZHMvZ2FtZXBhZCAqLyAiLi9HYW1l
cGFkcy9nYW1lcGFkLnRzIik7CisKKworCisKKworLyoqCisgKiBNYW5hZ2UgdGhlIGdhbWVwYWQg
aW5wdXRzIHRvIGNvbnRyb2wgYSBmcmVlIGNhbWVyYS4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRzCisgKi8KK3ZhciBGcmVl
Q2FtZXJhR2FtZXBhZElucHV0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1
bmN0aW9uIEZyZWVDYW1lcmFHYW1lcGFkSW5wdXQoKSB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIHRoZSBnYW1lcGFkIHJvdGF0aW9uIHNlbnNpYmxpdHkuCisgICAgICAgICAqIFRo
aXMgaXMgdGhlIHRocmVzaG9sZCBmcm9tIHdoZW4gcm90YXRpb24gc3RhcnRzIHRvIGJlIGFjY291
bnRlZCBmb3IgdG8gcHJldmVudCBqaXR0ZXJpbmcuCisgICAgICAgICAqLworICAgICAgICB0aGlz
LmdhbWVwYWRBbmd1bGFyU2Vuc2liaWxpdHkgPSAyMDA7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIHRoZSBnYW1lcGFkIG1vdmUgc2Vuc2libGl0eS4KKyAgICAgICAgICogVGhpcyBp
cyB0aGUgdGhyZXNob2xkIGZyb20gd2hlbiBtb3Zpbmcgc3RhcnRzIHRvIGJlIGFjY291bnRlZCBm
b3IgZm9yIHRvIHByZXZlbnQgaml0dGVyaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5n
YW1lcGFkTW92ZVNlbnNpYmlsaXR5ID0gNDA7CisgICAgICAgIHRoaXMuX2NhbWVyYVRyYW5zZm9y
bSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRy
aXgiXS5JZGVudGl0eSgpOworICAgICAgICB0aGlzLl9kZWx0YVRyYW5zZm9ybSA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygp
OworICAgICAgICB0aGlzLl92ZWN0b3IzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX3ZlY3Rv
cjIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMiJdLlplcm8oKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQXR0YWNoIHRoZSBpbnB1dCBj
b250cm9scyB0byBhIHNwZWNpZmljIGRvbSBlbGVtZW50IHRvIGdldCB0aGUgaW5wdXQgZnJvbS4K
KyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVtZW50IHRoZSBjb250cm9scyBz
aG91bGQgYmUgbGlzdGVuZWQgZnJvbQorICAgICAqIEBwYXJhbSBub1ByZXZlbnREZWZhdWx0IERl
ZmluZXMgd2hldGhlciBldmVudCBjYXVnaHQgYnkgdGhlIGNvbnRyb2xzIHNob3VsZCBjYWxsIHBy
ZXZlbnRkZWZhdWx0KCkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3Mv
V2ViL0FQSS9FdmVudC9wcmV2ZW50RGVmYXVsdCkKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhR2Ft
ZXBhZElucHV0LnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5v
UHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFy
IG1hbmFnZXIgPSB0aGlzLmNhbWVyYS5nZXRTY2VuZSgpLmdhbWVwYWRNYW5hZ2VyOworICAgICAg
ICB0aGlzLl9vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZlciA9IG1hbmFnZXIub25HYW1lcGFkQ29u
bmVjdGVkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGdhbWVwYWQpIHsKKyAgICAgICAgICAgIGlm
IChnYW1lcGFkLnR5cGUgIT09IF9HYW1lcGFkc19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIkdhbWVwYWQiXS5QT1NFX0VOQUJMRUQpIHsKKyAgICAgICAgICAgICAgICAvLyBw
cmlvcml0aXplIFhCT1ggZ2FtZXBhZHMuCisgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5nYW1l
cGFkIHx8IGdhbWVwYWQudHlwZSA9PT0gX0dhbWVwYWRzX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siR2FtZXBhZCJdLlhCT1gpIHsKKyAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuZ2FtZXBhZCA9IGdhbWVwYWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fb25HYW1lcGFkRGlzY29ubmVjdGVkT2JzZXJ2ZXIg
PSBtYW5hZ2VyLm9uR2FtZXBhZERpc2Nvbm5lY3RlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChn
YW1lcGFkKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuZ2FtZXBhZCA9PT0gZ2FtZXBhZCkgewor
ICAgICAgICAgICAgICAgIF90aGlzLmdhbWVwYWQgPSBudWxsOworICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKyAgICAgICAgdGhpcy5nYW1lcGFkID0gbWFuYWdlci5nZXRHYW1lcGFkQnlUeXBl
KF9HYW1lcGFkc19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkdhbWVwYWQi
XS5YQk9YKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGFjaCB0aGUgY3VycmVudCBjb250
cm9scyBmcm9tIHRoZSBzcGVjaWZpZWQgZG9tIGVsZW1lbnQuCisgICAgICogQHBhcmFtIGVsZW1l
bnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0byBzdG9wIGxpc3RlbmluZyB0aGUgaW5wdXRzIGZyb20K
KyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhR2FtZXBhZElucHV0LnByb3RvdHlwZS5kZXRhY2hDb250
cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgdGhpcy5jYW1lcmEuZ2V0U2NlbmUo
KS5nYW1lcGFkTWFuYWdlci5vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZhYmxlLnJlbW92ZSh0aGlz
Ll9vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZlcik7CisgICAgICAgIHRoaXMuY2FtZXJhLmdldFNj
ZW5lKCkuZ2FtZXBhZE1hbmFnZXIub25HYW1lcGFkRGlzY29ubmVjdGVkT2JzZXJ2YWJsZS5yZW1v
dmUodGhpcy5fb25HYW1lcGFkRGlzY29ubmVjdGVkT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLmdh
bWVwYWQgPSBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBjdXJyZW50
IGNhbWVyYSBzdGF0ZSBkZXBlbmRpbmcgb24gdGhlIGlucHV0cyB0aGF0IGhhdmUgYmVlbiB1c2Vk
IHRoaXMgZnJhbWUuCisgICAgICogVGhpcyBpcyBhIGR5bmFtaWNhbGx5IGNyZWF0ZWQgbGFtYmRh
IHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9mIGxvb3BpbmcgZm9yIGlucHV0cyBp
biB0aGUgcmVuZGVyIGxvb3AuCisgICAgICovCisgICAgRnJlZUNhbWVyYUdhbWVwYWRJbnB1dC5w
cm90b3R5cGUuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLmdh
bWVwYWQgJiYgdGhpcy5nYW1lcGFkLmxlZnRTdGljaykgeworICAgICAgICAgICAgdmFyIGNhbWVy
YSA9IHRoaXMuY2FtZXJhOworICAgICAgICAgICAgdmFyIExTVmFsdWVzID0gdGhpcy5nYW1lcGFk
LmxlZnRTdGljazsKKyAgICAgICAgICAgIHZhciBub3JtYWxpemVkTFggPSBMU1ZhbHVlcy54IC8g
dGhpcy5nYW1lcGFkTW92ZVNlbnNpYmlsaXR5OworICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWRM
WSA9IExTVmFsdWVzLnkgLyB0aGlzLmdhbWVwYWRNb3ZlU2Vuc2liaWxpdHk7CisgICAgICAgICAg
ICBMU1ZhbHVlcy54ID0gTWF0aC5hYnMobm9ybWFsaXplZExYKSA+IDAuMDA1ID8gMCArIG5vcm1h
bGl6ZWRMWCA6IDA7CisgICAgICAgICAgICBMU1ZhbHVlcy55ID0gTWF0aC5hYnMobm9ybWFsaXpl
ZExZKSA+IDAuMDA1ID8gMCArIG5vcm1hbGl6ZWRMWSA6IDA7CisgICAgICAgICAgICB2YXIgUlNW
YWx1ZXMgPSB0aGlzLmdhbWVwYWQucmlnaHRTdGljazsKKyAgICAgICAgICAgIGlmIChSU1ZhbHVl
cykgeworICAgICAgICAgICAgICAgIHZhciBub3JtYWxpemVkUlggPSBSU1ZhbHVlcy54IC8gdGhp
cy5nYW1lcGFkQW5ndWxhclNlbnNpYmlsaXR5OworICAgICAgICAgICAgICAgIHZhciBub3JtYWxp
emVkUlkgPSBSU1ZhbHVlcy55IC8gdGhpcy5nYW1lcGFkQW5ndWxhclNlbnNpYmlsaXR5OworICAg
ICAgICAgICAgICAgIFJTVmFsdWVzLnggPSBNYXRoLmFicyhub3JtYWxpemVkUlgpID4gMC4wMDEg
PyAwICsgbm9ybWFsaXplZFJYIDogMDsKKyAgICAgICAgICAgICAgICBSU1ZhbHVlcy55ID0gTWF0
aC5hYnMobm9ybWFsaXplZFJZKSA+IDAuMDAxID8gMCArIG5vcm1hbGl6ZWRSWSA6IDA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBSU1ZhbHVlcyA9
IHsgeDogMCwgeTogMCB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjYW1lcmEu
cm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLlJvdGF0aW9uWWF3UGl0Y2hS
b2xsVG9SZWYoY2FtZXJhLnJvdGF0aW9uLnksIGNhbWVyYS5yb3RhdGlvbi54LCAwLCB0aGlzLl9j
YW1lcmFUcmFuc2Zvcm0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgY2FtZXJhLnJvdGF0aW9uUXVhdGVybmlvbi50b1JvdGF0aW9uTWF0cml4KHRo
aXMuX2NhbWVyYVRyYW5zZm9ybSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc3Bl
ZWQgPSBjYW1lcmEuX2NvbXB1dGVMb2NhbENhbWVyYVNwZWVkKCkgKiA1MC4wOworICAgICAgICAg
ICAgdGhpcy5fdmVjdG9yMy5jb3B5RnJvbUZsb2F0cyhMU1ZhbHVlcy54ICogc3BlZWQsIDAsIC1M
U1ZhbHVlcy55ICogc3BlZWQpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1Rv
UmVmKHRoaXMuX3ZlY3RvcjMsIHRoaXMuX2NhbWVyYVRyYW5zZm9ybSwgdGhpcy5fZGVsdGFUcmFu
c2Zvcm0pOworICAgICAgICAgICAgY2FtZXJhLmNhbWVyYURpcmVjdGlvbi5hZGRJblBsYWNlKHRo
aXMuX2RlbHRhVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIHRoaXMuX3ZlY3RvcjIuY29weUZyb21G
bG9hdHMoUlNWYWx1ZXMueSwgUlNWYWx1ZXMueCk7CisgICAgICAgICAgICBjYW1lcmEuY2FtZXJh
Um90YXRpb24uYWRkSW5QbGFjZSh0aGlzLl92ZWN0b3IyKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY3VycmVudCBpbnRwdXQu
CisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJh
R2FtZXBhZElucHV0LnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiAiRnJlZUNhbWVyYUdhbWVwYWRJbnB1dCI7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBjbGFz
cy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQorICAgICAqLworICAg
IEZyZWVDYW1lcmFHYW1lcGFkSW5wdXQucHJvdG90eXBlLmdldFNpbXBsZU5hbWUgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiAiZ2FtZXBhZCI7CisgICAgfTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIEZyZWVDYW1lcmFHYW1lcGFkSW5wdXQucHJvdG90eXBlLCAiZ2FtZXBhZEFu
Z3VsYXJTZW5zaWJpbGl0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBG
cmVlQ2FtZXJhR2FtZXBhZElucHV0LnByb3RvdHlwZSwgImdhbWVwYWRNb3ZlU2Vuc2liaWxpdHki
LCB2b2lkIDApOworICAgIHJldHVybiBGcmVlQ2FtZXJhR2FtZXBhZElucHV0OworfSgpKTsKKwor
X0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJDYW1lcmFJbnB1dFR5cGVzIl1bIkZyZWVDYW1lcmFHYW1lcGFkSW5wdXQiXSA9IEZyZWVDYW1l
cmFHYW1lcGFkSW5wdXQ7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvSW5wdXRz
L2ZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFz
L0lucHV0cy9mcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQ7IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3Rz
bGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFz
L2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNNYW5hZ2VyLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0V2ZW50c19rZXlib2FyZEV2ZW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
RXZlbnRzL2tleWJvYXJkRXZlbnRzICovICIuL0V2ZW50cy9rZXlib2FyZEV2ZW50cy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0
aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKworCisKKworCisvKioKKyAq
IE1hbmFnZSB0aGUga2V5Ym9hcmQgaW5wdXRzIHRvIGNvbnRyb2wgdGhlIG1vdmVtZW50IG9mIGEg
ZnJlZSBjYW1lcmEuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3Vz
dG9taXppbmdfY2FtZXJhX2lucHV0cworICovCit2YXIgRnJlZUNhbWVyYUtleWJvYXJkTW92ZUlu
cHV0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEZyZWVDYW1l
cmFLZXlib2FyZE1vdmVJbnB1dCgpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Ig
U2V0IHRoZSBsaXN0IG9mIGtleWJvYXJkIGtleXMgdXNlZCB0byBjb250cm9sIHRoZSBmb3J3YXJk
IG1vdmUgb2YgdGhlIGNhbWVyYS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMua2V5c1VwID0g
WzM4XTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3IgU2V0IHRoZSBsaXN0IG9mIGtl
eWJvYXJkIGtleXMgdXNlZCB0byBjb250cm9sIHRoZSBiYWNrd2FyZCBtb3ZlIG9mIHRoZSBjYW1l
cmEuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmtleXNEb3duID0gWzQwXTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgb3IgU2V0IHRoZSBsaXN0IG9mIGtleWJvYXJkIGtleXMgdXNl
ZCB0byBjb250cm9sIHRoZSBsZWZ0IHN0cmFmZSBtb3ZlIG9mIHRoZSBjYW1lcmEuCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmtleXNMZWZ0ID0gWzM3XTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3IgU2V0IHRoZSBsaXN0IG9mIGtleWJvYXJkIGtleXMgdXNlZCB0byBjb250cm9s
IHRoZSByaWdodCBzdHJhZmUgbW92ZSBvZiB0aGUgY2FtZXJhLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5rZXlzUmlnaHQgPSBbMzldOworICAgICAgICB0aGlzLl9rZXlzID0gbmV3IEFycmF5
KCk7CisgICAgfQorICAgIC8qKgorICAgICAqIEF0dGFjaCB0aGUgaW5wdXQgY29udHJvbHMgdG8g
YSBzcGVjaWZpYyBkb20gZWxlbWVudCB0byBnZXQgdGhlIGlucHV0IGZyb20uCisgICAgICogQHBh
cmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0aGUgY29udHJvbHMgc2hvdWxkIGJlIGxp
c3RlbmVkIGZyb20KKyAgICAgKiBAcGFyYW0gbm9QcmV2ZW50RGVmYXVsdCBEZWZpbmVzIHdoZXRo
ZXIgZXZlbnQgY2F1Z2h0IGJ5IHRoZSBjb250cm9scyBzaG91bGQgY2FsbCBwcmV2ZW50ZGVmYXVs
dCgpIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZl
bnQvcHJldmVudERlZmF1bHQpCisgICAgICovCisgICAgRnJlZUNhbWVyYUtleWJvYXJkTW92ZUlu
cHV0LnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5vUHJldmVu
dERlZmF1bHQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMu
X29uQ2FudmFzQmx1ck9ic2VydmVyKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fc2NlbmUgPSB0aGlzLmNhbWVyYS5nZXRTY2VuZSgpOworICAgICAgICB0
aGlzLl9lbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgdGhpcy5fb25D
YW52YXNCbHVyT2JzZXJ2ZXIgPSB0aGlzLl9lbmdpbmUub25DYW52YXNCbHVyT2JzZXJ2YWJsZS5h
ZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMuX2tleXMgPSBbXTsKKyAgICAgICAg
fSk7CisgICAgICAgIHRoaXMuX29uS2V5Ym9hcmRPYnNlcnZlciA9IHRoaXMuX3NjZW5lLm9uS2V5
Ym9hcmRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoaW5mbykgeworICAgICAgICAgICAgdmFyIGV2
dCA9IGluZm8uZXZlbnQ7CisgICAgICAgICAgICBpZiAoIWV2dC5tZXRhS2V5KSB7CisgICAgICAg
ICAgICAgICAgaWYgKGluZm8udHlwZSA9PT0gX0V2ZW50c19rZXlib2FyZEV2ZW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJLZXlib2FyZEV2ZW50VHlwZXMiXS5LRVlET1dOKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5rZXlzVXAuaW5kZXhPZihldnQua2V5Q29kZSkg
IT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5rZXlzRG93bi5pbmRleE9m
KGV2dC5rZXlDb2RlKSAhPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmtl
eXNMZWZ0LmluZGV4T2YoZXZ0LmtleUNvZGUpICE9PSAtMSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMua2V5c1JpZ2h0LmluZGV4T2YoZXZ0LmtleUNvZGUpICE9PSAtMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gX3RoaXMuX2tleXMuaW5kZXhPZihldnQu
a2V5Q29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2tleXMucHVzaChldnQua2V5Q29kZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnQucHJl
dmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKF90aGlzLmtleXNVcC5pbmRleE9mKGV2dC5rZXlDb2RlKSAhPT0g
LTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmtleXNEb3duLmluZGV4T2YoZXZ0
LmtleUNvZGUpICE9PSAtMSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMua2V5c0xl
ZnQuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5rZXlzUmlnaHQuaW5kZXhPZihldnQua2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBfdGhpcy5fa2V5cy5pbmRleE9mKGV2dC5rZXlD
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2tleXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9QcmV2
ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVm
YXVsdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIERldGFjaCB0aGUgY3VycmVudCBjb250cm9scyBmcm9tIHRoZSBzcGVj
aWZpZWQgZG9tIGVsZW1lbnQuCisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxl
bWVudCB0byBzdG9wIGxpc3RlbmluZyB0aGUgaW5wdXRzIGZyb20KKyAgICAgKi8KKyAgICBGcmVl
Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLmRldGFjaENvbnRyb2wgPSBmdW5jdGlv
biAoZWxlbWVudCkgeworICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9vbktleWJvYXJkT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zY2Vu
ZS5vbktleWJvYXJkT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25LZXlib2FyZE9ic2VydmVyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZl
cikgeworICAgICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5vbkNhbnZhc0JsdXJPYnNlcnZhYmxl
LnJlbW92ZSh0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9vbktleWJvYXJkT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAgICAgdGhp
cy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMu
X2tleXMgPSBbXTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgY3VycmVudCBj
YW1lcmEgc3RhdGUgZGVwZW5kaW5nIG9uIHRoZSBpbnB1dHMgdGhhdCBoYXZlIGJlZW4gdXNlZCB0
aGlzIGZyYW1lLgorICAgICAqIFRoaXMgaXMgYSBkeW5hbWljYWxseSBjcmVhdGVkIGxhbWJkYSB0
byBhdm9pZCB0aGUgcGVyZm9ybWFuY2UgcGVuYWx0eSBvZiBsb29waW5nIGZvciBpbnB1dHMgaW4g
dGhlIHJlbmRlciBsb29wLgorICAgICAqLworICAgIEZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1
dC5wcm90b3R5cGUuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
Ll9vbktleWJvYXJkT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNh
bWVyYTsKKyAgICAgICAgICAgIC8vIEtleWJvYXJkCisgICAgICAgICAgICBmb3IgKHZhciBpbmRl
eCA9IDA7IGluZGV4IDwgdGhpcy5fa2V5cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAg
ICAgICB2YXIga2V5Q29kZSA9IHRoaXMuX2tleXNbaW5kZXhdOworICAgICAgICAgICAgICAgIHZh
ciBzcGVlZCA9IGNhbWVyYS5fY29tcHV0ZUxvY2FsQ2FtZXJhU3BlZWQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAodGhpcy5rZXlzTGVmdC5pbmRleE9mKGtleUNvZGUpICE9PSAtMSkgeworICAgICAg
ICAgICAgICAgICAgICBjYW1lcmEuX2xvY2FsRGlyZWN0aW9uLmNvcHlGcm9tRmxvYXRzKC1zcGVl
ZCwgMCwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRo
aXMua2V5c1VwLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAg
IGNhbWVyYS5fbG9jYWxEaXJlY3Rpb24uY29weUZyb21GbG9hdHMoMCwgMCwgc3BlZWQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmtleXNSaWdodC5p
bmRleE9mKGtleUNvZGUpICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBjYW1lcmEuX2xv
Y2FsRGlyZWN0aW9uLmNvcHlGcm9tRmxvYXRzKHNwZWVkLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5rZXlzRG93bi5pbmRleE9mKGtleUNv
ZGUpICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBjYW1lcmEuX2xvY2FsRGlyZWN0aW9u
LmNvcHlGcm9tRmxvYXRzKDAsIDAsIC1zcGVlZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChjYW1lcmEuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgewor
ICAgICAgICAgICAgICAgICAgICBjYW1lcmEuX2xvY2FsRGlyZWN0aW9uLnogKj0gLTE7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhbWVyYS5nZXRWaWV3TWF0cml4KCkuaW52
ZXJ0VG9SZWYoY2FtZXJhLl9jYW1lcmFUcmFuc2Zvcm1NYXRyaXgpOworICAgICAgICAgICAgICAg
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZWN0b3Iz
Il0uVHJhbnNmb3JtTm9ybWFsVG9SZWYoY2FtZXJhLl9sb2NhbERpcmVjdGlvbiwgY2FtZXJhLl9j
YW1lcmFUcmFuc2Zvcm1NYXRyaXgsIGNhbWVyYS5fdHJhbnNmb3JtZWREaXJlY3Rpb24pOworICAg
ICAgICAgICAgICAgIGNhbWVyYS5jYW1lcmFEaXJlY3Rpb24uYWRkSW5QbGFjZShjYW1lcmEuX3Ry
YW5zZm9ybWVkRGlyZWN0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY3VycmVudCBpbnRwdXQu
CisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJh
S2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuICJGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiOworICAgIH07Cisg
ICAgLyoqIEBoaWRkZW4gKi8KKyAgICBGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90
eXBlLl9vbkxvc3RGb2N1cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fa2V5cyA9IFtd
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBmcmllbmRseSBuYW1lIGFzc29jaWF0
ZWQgd2l0aCB0aGUgaW5wdXQgY2xhc3MuCisgICAgICogQHJldHVybnMgdGhlIGlucHV0IGZyaWVu
ZGx5IG5hbWUKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQucHJvdG90
eXBlLmdldFNpbXBsZU5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAia2V5Ym9h
cmQiOworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGcmVlQ2FtZXJhS2V5Ym9h
cmRNb3ZlSW5wdXQucHJvdG90eXBlLCAia2V5c1VwIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIEZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC5wcm90b3R5cGUsICJrZXlz
RG93biIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGcmVlQ2FtZXJhS2V5
Ym9hcmRNb3ZlSW5wdXQucHJvdG90eXBlLCAia2V5c0xlZnQiLCB2b2lkIDApOworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZSJdKSgpCisgICAgXSwgRnJlZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0LnByb3RvdHlwZSwg
ImtleXNSaWdodCIsIHZvaWQgMCk7CisgICAgcmV0dXJuIEZyZWVDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dDsKK30oKSk7CisKK19DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siQ2FtZXJhSW5wdXRUeXBlcyJdWyJGcmVlQ2FtZXJhS2V5Ym9hcmRN
b3ZlSW5wdXQiXSA9IEZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dDsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vQ2FtZXJhcy9JbnB1dHMvZnJlZUNhbWVyYU1vdXNlSW5wdXQudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9DYW1lcmFzL0lucHV0cy9mcmVlQ2FtZXJhTW91c2VJbnB1dC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogRnJlZUNhbWVyYU1vdXNlSW5wdXQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYU1vdXNlSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEZyZWVDYW1lcmFNb3VzZUlucHV0OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
dHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8g
Ii4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFuYWdlciAqLyAiLi9DYW1lcmFzL2NhbWVyYUlucHV0
c01hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXZlbnRzX3BvaW50ZXJF
dmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL0V2ZW50cy9wb2ludGVyRXZlbnRzICovICIuL0V2ZW50cy9wb2ludGVyRXZlbnRz
LnRzIik7CisKKworCisKKworLyoqCisgKiBNYW5hZ2UgdGhlIG1vdXNlIGlucHV0cyB0byBjb250
cm9sIHRoZSBtb3ZlbWVudCBvZiBhIGZyZWUgY2FtZXJhLgorICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2N1c3RvbWl6aW5nX2NhbWVyYV9pbnB1dHMKKyAqLwordmFyIEZy
ZWVDYW1lcmFNb3VzZUlucHV0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8q
KgorICAgICAqIE1hbmFnZSB0aGUgbW91c2UgaW5wdXRzIHRvIGNvbnRyb2wgdGhlIG1vdmVtZW50
IG9mIGEgZnJlZSBjYW1lcmEuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL2N1c3RvbWl6aW5nX2NhbWVyYV9pbnB1dHMKKyAgICAgKiBAcGFyYW0gdG91Y2hFbmFi
bGVkIERlZmluZXMgaWYgdG91Y2ggaXMgZW5hYmxlZCBvciBub3QKKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBGcmVlQ2FtZXJhTW91c2VJbnB1dCgKKyAgICAvKioKKyAgICAgKiBEZWZpbmUgaWYgdG91
Y2ggaXMgZW5hYmxlZCBpbiB0aGUgbW91c2UgaW5wdXQKKyAgICAgKi8KKyAgICB0b3VjaEVuYWJs
ZWQpIHsKKyAgICAgICAgaWYgKHRvdWNoRW5hYmxlZCA9PT0gdm9pZCAwKSB7IHRvdWNoRW5hYmxl
ZCA9IHRydWU7IH0KKyAgICAgICAgdGhpcy50b3VjaEVuYWJsZWQgPSB0b3VjaEVuYWJsZWQ7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBidXR0b25zIGFzc29jaWF0ZWQgd2l0
aCB0aGUgaW5wdXQgdG8gaGFuZGxlIGNhbWVyYSBtb3ZlLgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5idXR0b25zID0gWzAsIDEsIDJdOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5l
cyB0aGUgcG9pbnRlciBhbmd1bGFyIHNlbnNpYmlsaXR5ICBhbG9uZyB0aGUgWCBhbmQgWSBheGlz
IG9yIGhvdyBmYXN0IGlzIHRoZSBjYW1lcmEgcm90YXRpbmcuCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmFuZ3VsYXJTZW5zaWJpbGl0eSA9IDIwMDAuMDsKKyAgICAgICAgdGhpcy5wcmV2aW91
c1Bvc2l0aW9uID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgZm9y
IHdoZW4gYSBwb2ludGVyIG1vdmUgZXZlbnQgb2NjdXJzIGNvbnRhaW5pbmcgdGhlIG1vdmUgb2Zm
c2V0CisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVkT2JzZXJ2YWJsZSA9
IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2Vy
dmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKiBJ
ZiB0aGUgY2FtZXJhIHNob3VsZCBiZSByb3RhdGVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gcG9p
bnRlciBtb3ZlbWVudAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fYWxsb3dDYW1lcmFSb3Rh
dGlvbiA9IHRydWU7CisgICAgfQorICAgIC8qKgorICAgICAqIEF0dGFjaCB0aGUgaW5wdXQgY29u
dHJvbHMgdG8gYSBzcGVjaWZpYyBkb20gZWxlbWVudCB0byBnZXQgdGhlIGlucHV0IGZyb20uCisg
ICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0aGUgY29udHJvbHMgc2hv
dWxkIGJlIGxpc3RlbmVkIGZyb20KKyAgICAgKiBAcGFyYW0gbm9QcmV2ZW50RGVmYXVsdCBEZWZp
bmVzIHdoZXRoZXIgZXZlbnQgY2F1Z2h0IGJ5IHRoZSBjb250cm9scyBzaG91bGQgY2FsbCBwcmV2
ZW50ZGVmYXVsdCgpIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dl
Yi9BUEkvRXZlbnQvcHJldmVudERlZmF1bHQpCisgICAgICovCisgICAgRnJlZUNhbWVyYU1vdXNl
SW5wdXQucHJvdG90eXBlLmF0dGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVudCwgbm9QcmV2
ZW50RGVmYXVsdCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgZW5n
aW5lID0gdGhpcy5jYW1lcmEuZ2V0RW5naW5lKCk7CisgICAgICAgIGlmICghdGhpcy5fcG9pbnRl
cklucHV0KSB7CisgICAgICAgICAgICB0aGlzLl9wb2ludGVySW5wdXQgPSBmdW5jdGlvbiAocCkg
eworICAgICAgICAgICAgICAgIHZhciBldnQgPSBwLmV2ZW50OworICAgICAgICAgICAgICAgIGlm
IChlbmdpbmUuaXNJblZSRXhjbHVzaXZlUG9pbnRlck1vZGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIV90aGlz
LnRvdWNoRW5hYmxlZCAmJiBldnQucG9pbnRlclR5cGUgPT09ICJ0b3VjaCIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAocC50eXBlICE9PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRSAmJiBfdGhpcy5idXR0b25z
LmluZGV4T2YoZXZ0LmJ1dHRvbikgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHNyY0VsZW1lbnQgPSAo
ZXZ0LnNyY0VsZW1lbnQgfHwgZXZ0LnRhcmdldCk7CisgICAgICAgICAgICAgICAgaWYgKHAudHlw
ZSA9PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04gJiYgc3JjRWxlbWVudCkgeworICAgICAg
ICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3JjRWxlbWVudC5z
ZXRQb2ludGVyQ2FwdHVyZShldnQucG9pbnRlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly9Ob3RoaW5nIHRvIGRvIHdpdGggdGhlIGVycm9yLiBFeGVjdXRpb24gd2lsbCBjb250aW51ZS4K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcmV2aW91
c1Bvc2l0aW9uID0geworICAgICAgICAgICAgICAgICAgICAgICAgeDogZXZ0LmNsaWVudFgsCisg
ICAgICAgICAgICAgICAgICAgICAgICB5OiBldnQuY2xpZW50WQorICAgICAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudC5mb2N1cygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHAudHlwZSA9PT0gX0V2ZW50c19w
b2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvaW50ZXJFdmVudFR5
cGVzIl0uUE9JTlRFUlVQICYmIHNyY0VsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY0VsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0
dXJlKGV2dC5wb2ludGVySWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL05vdGhpbmcgdG8g
ZG8gd2l0aCB0aGUgZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgX3RoaXMucHJldmlvdXNQb3NpdGlvbiA9IG51bGw7CisgICAgICAgICAgICAgICAgICAg
IGlmICghbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnBy
ZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocC50eXBlID09PSBfRXZlbnRzX3BvaW50ZXJFdmVu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lO
VEVSTU9WRSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLnByZXZpb3VzUG9zaXRp
b24gfHwgZW5naW5lLmlzUG9pbnRlckxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YXIgb2Zm
c2V0WCA9IGV2dC5jbGllbnRYIC0gX3RoaXMucHJldmlvdXNQb3NpdGlvbi54OworICAgICAgICAg
ICAgICAgICAgICB2YXIgb2Zmc2V0WSA9IGV2dC5jbGllbnRZIC0gX3RoaXMucHJldmlvdXNQb3Np
dGlvbi55OworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY2FtZXJhLmdldFNjZW5lKCku
dXNlUmlnaHRIYW5kZWRTeXN0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFgg
Kj0gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKF90
aGlzLmNhbWVyYS5wYXJlbnQgJiYgX3RoaXMuY2FtZXJhLnBhcmVudC5fZ2V0V29ybGRNYXRyaXhE
ZXRlcm1pbmFudCgpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WCAqPSAt
MTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMu
X2FsbG93Q2FtZXJhUm90YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNh
bWVyYS5jYW1lcmFSb3RhdGlvbi55ICs9IG9mZnNldFggLyBfdGhpcy5hbmd1bGFyU2Vuc2liaWxp
dHk7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5jYW1lcmEuY2FtZXJhUm90YXRpb24u
eCArPSBvZmZzZXRZIC8gX3RoaXMuYW5ndWxhclNlbnNpYmlsaXR5OworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIF90aGlzLm9uUG9pbnRlck1vdmVkT2JzZXJ2YWJs
ZS5ub3RpZnlPYnNlcnZlcnMoeyBvZmZzZXRYOiBvZmZzZXRYLCBvZmZzZXRZOiBvZmZzZXRZIH0p
OworICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcmV2aW91c1Bvc2l0aW9uID0geworICAgICAg
ICAgICAgICAgICAgICAgICAgeDogZXZ0LmNsaWVudFgsCisgICAgICAgICAgICAgICAgICAgICAg
ICB5OiBldnQuY2xpZW50WQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2
dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9vbk1vdXNlTW92
ZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgIGlmICghZW5naW5lLmlzUG9pbnRlckxv
Y2spIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZW5naW5lLmlzSW5WUkV4Y2x1c2l2ZVBvaW50ZXJNb2RlKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG9mZnNldFggPSBldnQu
bW92ZW1lbnRYIHx8IGV2dC5tb3pNb3ZlbWVudFggfHwgZXZ0LndlYmtpdE1vdmVtZW50WCB8fCBl
dnQubXNNb3ZlbWVudFggfHwgMDsKKyAgICAgICAgICAgIGlmIChfdGhpcy5jYW1lcmEuZ2V0U2Nl
bmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgeworICAgICAgICAgICAgICAgIG9mZnNldFggKj0g
LTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX3RoaXMuY2FtZXJhLnBhcmVudCAm
JiBfdGhpcy5jYW1lcmEucGFyZW50Ll9nZXRXb3JsZE1hdHJpeERldGVybWluYW50KCkgPCAwKSB7
CisgICAgICAgICAgICAgICAgb2Zmc2V0WCAqPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIF90aGlzLmNhbWVyYS5jYW1lcmFSb3RhdGlvbi55ICs9IG9mZnNldFggLyBfdGhpcy5hbmd1
bGFyU2Vuc2liaWxpdHk7CisgICAgICAgICAgICB2YXIgb2Zmc2V0WSA9IGV2dC5tb3ZlbWVudFkg
fHwgZXZ0Lm1vek1vdmVtZW50WSB8fCBldnQud2Via2l0TW92ZW1lbnRZIHx8IGV2dC5tc01vdmVt
ZW50WSB8fCAwOworICAgICAgICAgICAgX3RoaXMuY2FtZXJhLmNhbWVyYVJvdGF0aW9uLnggKz0g
b2Zmc2V0WSAvIF90aGlzLmFuZ3VsYXJTZW5zaWJpbGl0eTsKKyAgICAgICAgICAgIF90aGlzLnBy
ZXZpb3VzUG9zaXRpb24gPSBudWxsOworICAgICAgICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0
KSB7CisgICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgICAgIHRoaXMuX29ic2VydmVyID0gdGhpcy5jYW1lcmEuZ2V0U2Nl
bmUoKS5vblBvaW50ZXJPYnNlcnZhYmxlLmFkZCh0aGlzLl9wb2ludGVySW5wdXQsIF9FdmVudHNf
cG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQb2ludGVyRXZlbnRU
eXBlcyJdLlBPSU5URVJET1dOIHwgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUlVQIHwgX0V2ZW50c19w
b2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvaW50ZXJFdmVudFR5
cGVzIl0uUE9JTlRFUk1PVkUpOworICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1v
dXNlbW92ZSIsIHRoaXMuX29uTW91c2VNb3ZlLCBmYWxzZSk7CisgICAgICAgIGVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLm9uQ29udGV4dE1lbnUuYmluZCh0aGlz
KSwgZmFsc2UpOworICAgIH07CisgICAgLyoqCisgICAgICogQ2FsbGVkIG9uIEpTIGNvbnRleHRt
ZW51IGV2ZW50LgorICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHByb3ZpZGUgZnVuY3Rp
b25hbGl0eS4KKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhTW91c2VJbnB1dC5wcm90b3R5cGUub25D
b250ZXh0TWVudSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0
KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRhY2ggdGhlIGN1cnJlbnQgY29udHJvbHMg
ZnJvbSB0aGUgc3BlY2lmaWVkIGRvbSBlbGVtZW50LgorICAgICAqIEBwYXJhbSBlbGVtZW50IERl
ZmluZXMgdGhlIGVsZW1lbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdGhlIGlucHV0cyBmcm9tCisgICAg
ICovCisgICAgRnJlZUNhbWVyYU1vdXNlSW5wdXQucHJvdG90eXBlLmRldGFjaENvbnRyb2wgPSBm
dW5jdGlvbiAoZWxlbWVudCkgeworICAgICAgICBpZiAodGhpcy5fb2JzZXJ2ZXIgJiYgZWxlbWVu
dCkgeworICAgICAgICAgICAgdGhpcy5jYW1lcmEuZ2V0U2NlbmUoKS5vblBvaW50ZXJPYnNlcnZh
YmxlLnJlbW92ZSh0aGlzLl9vYnNlcnZlcik7CisgICAgICAgICAgICBpZiAodGhpcy5fb25Nb3Vz
ZU1vdmUpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1v
dXNlbW92ZSIsIHRoaXMuX29uTW91c2VNb3ZlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0aGlzLm9uQ29udGV4dE1lbnUpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92
ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5vbkNvbnRleHRNZW51KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLm9uUG9pbnRlck1vdmVkT2JzZXJ2YWJsZSkg
eworICAgICAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZWRPYnNlcnZhYmxlLmNsZWFyKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vYnNlcnZlciA9IG51bGw7CisgICAg
ICAgICAgICB0aGlzLl9vbk1vdXNlTW92ZSA9IG51bGw7CisgICAgICAgICAgICB0aGlzLnByZXZp
b3VzUG9zaXRpb24gPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjdXJyZW50IGludHB1dC4KKyAgICAgKiBAcmV0dXJu
cyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIEZyZWVDYW1lcmFNb3VzZUlucHV0LnByb3Rv
dHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiRnJlZUNh
bWVyYU1vdXNlSW5wdXQiOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBmcmllbmRs
eSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQgY2xhc3MuCisgICAgICogQHJldHVybnMg
dGhlIGlucHV0IGZyaWVuZGx5IG5hbWUKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhTW91c2VJbnB1
dC5wcm90b3R5cGUuZ2V0U2ltcGxlTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
ICJtb3VzZSI7CisgICAgfTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZyZWVDYW1lcmFN
b3VzZUlucHV0LnByb3RvdHlwZSwgImJ1dHRvbnMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInNlcmlhbGl6ZSJd
KSgpCisgICAgXSwgRnJlZUNhbWVyYU1vdXNlSW5wdXQucHJvdG90eXBlLCAiYW5ndWxhclNlbnNp
YmlsaXR5Iiwgdm9pZCAwKTsKKyAgICByZXR1cm4gRnJlZUNhbWVyYU1vdXNlSW5wdXQ7Cit9KCkp
OworCitfQ2FtZXJhc19jYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIkNhbWVyYUlucHV0VHlwZXMiXVsiRnJlZUNhbWVyYU1vdXNlSW5wdXQiXSA9IEZyZWVD
YW1lcmFNb3VzZUlucHV0OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL0lucHV0
cy9mcmVlQ2FtZXJhVG91Y2hJbnB1dC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvSW5wdXRzL2ZyZWVD
YW1lcmFUb3VjaElucHV0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBGcmVlQ2FtZXJhVG91
Y2hJbnB1dCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVlQ2FtZXJh
VG91Y2hJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRnJlZUNhbWVyYVRvdWNoSW5wdXQ7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVz
L3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFJbnB1dHNNYW5hZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNN
YW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0V2ZW50c19wb2ludGVyRXZl
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9FdmVudHMvcG9pbnRlckV2ZW50cyAqLyAiLi9FdmVudHMvcG9pbnRlckV2ZW50cy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0
aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKworCisKKworCisv
KioKKyAqIE1hbmFnZSB0aGUgdG91Y2ggaW5wdXRzIHRvIGNvbnRyb2wgdGhlIG1vdmVtZW50IG9m
IGEgZnJlZSBjYW1lcmEuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
Y3VzdG9taXppbmdfY2FtZXJhX2lucHV0cworICovCit2YXIgRnJlZUNhbWVyYVRvdWNoSW5wdXQg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRnJlZUNhbWVyYVRv
dWNoSW5wdXQoKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSB0b3VjaCBz
ZW5zaWJpbGl0eSBmb3Igcm90YXRpb24uCisgICAgICAgICAqIFRoZSBoaWdoZXIgdGhlIGZhc3Rl
ci4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMudG91Y2hBbmd1bGFyU2Vuc2liaWxpdHkgPSAy
MDAwMDAuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhlIHRvdWNoIHNlbnNp
YmlsaXR5IGZvciBtb3ZlLgorICAgICAgICAgKiBUaGUgaGlnaGVyIHRoZSBmYXN0ZXIuCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnRvdWNoTW92ZVNlbnNpYmlsaXR5ID0gMjUwLjA7CisgICAg
ICAgIHRoaXMuX29mZnNldFggPSBudWxsOworICAgICAgICB0aGlzLl9vZmZzZXRZID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fcG9pbnRlclByZXNzZWQgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisgICAg
LyoqCisgICAgICogQXR0YWNoIHRoZSBpbnB1dCBjb250cm9scyB0byBhIHNwZWNpZmljIGRvbSBl
bGVtZW50IHRvIGdldCB0aGUgaW5wdXQgZnJvbS4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZp
bmVzIHRoZSBlbGVtZW50IHRoZSBjb250cm9scyBzaG91bGQgYmUgbGlzdGVuZWQgZnJvbQorICAg
ICAqIEBwYXJhbSBub1ByZXZlbnREZWZhdWx0IERlZmluZXMgd2hldGhlciBldmVudCBjYXVnaHQg
YnkgdGhlIGNvbnRyb2xzIHNob3VsZCBjYWxsIHByZXZlbnRkZWZhdWx0KCkgKGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudC9wcmV2ZW50RGVmYXVs
dCkKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhVG91Y2hJbnB1dC5wcm90b3R5cGUuYXR0YWNoQ29u
dHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBwcmV2aW91c1Bvc2l0aW9uID0gbnVsbDsKKyAg
ICAgICAgaWYgKHRoaXMuX3BvaW50ZXJJbnB1dCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICB0aGlzLl9vbkxvc3RGb2N1cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBfdGhp
cy5fb2Zmc2V0WCA9IG51bGw7CisgICAgICAgICAgICAgICAgX3RoaXMuX29mZnNldFkgPSBudWxs
OworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRoaXMuX3BvaW50ZXJJbnB1dCA9IGZ1bmN0
aW9uIChwKSB7CisgICAgICAgICAgICAgICAgdmFyIGV2dCA9IHAuZXZlbnQ7CisgICAgICAgICAg
ICAgICAgaWYgKGV2dC5wb2ludGVyVHlwZSA9PT0gIm1vdXNlIikgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwLnR5
cGUgPT09IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJET1dOKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnBy
ZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgX3RoaXMuX3BvaW50ZXJQcmVzc2VkLnB1c2goZXZ0LnBvaW50ZXJJZCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChfdGhpcy5fcG9pbnRlclByZXNzZWQubGVuZ3RoICE9PSAxKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcHJldmlvdXNQb3NpdGlvbiA9IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHg6IGV2dC5jbGllbnRYLAorICAgICAgICAgICAgICAgICAgICAgICAgeTogZXZ0LmNsaWVu
dFkKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAocC50eXBlID09PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSVVApIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBfdGhpcy5fcG9pbnRlclByZXNzZWQuaW5k
ZXhPZihldnQucG9pbnRlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAt
MSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wb2ludGVyUHJlc3NlZC5zcGxpY2UoaW5k
ZXgsIDEpOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHByZXZpb3VzUG9zaXRpb24gPSBudWxsOworICAgICAgICAgICAgICAgICAgICBf
dGhpcy5fb2Zmc2V0WCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9vZmZzZXRZ
ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocC50
eXBlID09PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5w
cmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmICghcHJldmlvdXNQb3NpdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhciBpbmRl
eCA9IF90aGlzLl9wb2ludGVyUHJlc3NlZC5pbmRleE9mKGV2dC5wb2ludGVySWQpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF90aGlz
Ll9vZmZzZXRYID0gZXZ0LmNsaWVudFggLSBwcmV2aW91c1Bvc2l0aW9uLng7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl9vZmZzZXRZID0gLShldnQuY2xpZW50WSAtIHByZXZpb3VzUG9zaXRp
b24ueSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9vYnNlcnZlciA9IHRoaXMuY2FtZXJhLmdldFNjZW5lKCkub25Qb2ludGVyT2Jz
ZXJ2YWJsZS5hZGQodGhpcy5fcG9pbnRlcklucHV0LCBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9X
TiB8IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQ
b2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJVUCB8IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJNT1ZF
KTsKKyAgICAgICAgaWYgKHRoaXMuX29uTG9zdEZvY3VzKSB7CisgICAgICAgICAgICBlbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlzLl9vbkxvc3RGb2N1cyk7CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKgorICAgICAqIERldGFjaCB0aGUgY3VycmVudCBjb250cm9scyBmcm9t
IHRoZSBzcGVjaWZpZWQgZG9tIGVsZW1lbnQuCisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5l
cyB0aGUgZWxlbWVudCB0byBzdG9wIGxpc3RlbmluZyB0aGUgaW5wdXRzIGZyb20KKyAgICAgKi8K
KyAgICBGcmVlQ2FtZXJhVG91Y2hJbnB1dC5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0
aW9uIChlbGVtZW50KSB7CisgICAgICAgIGlmICh0aGlzLl9wb2ludGVySW5wdXQgJiYgZWxlbWVu
dCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX29ic2VydmVyKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5jYW1lcmEuZ2V0U2NlbmUoKS5vblBvaW50ZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9v
YnNlcnZlcik7CisgICAgICAgICAgICAgICAgdGhpcy5fb2JzZXJ2ZXIgPSBudWxsOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX29uTG9zdEZvY3VzKSB7CisgICAgICAgICAg
ICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIiwgdGhpcy5fb25Mb3N0Rm9j
dXMpOworICAgICAgICAgICAgICAgIHRoaXMuX29uTG9zdEZvY3VzID0gbnVsbDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3BvaW50ZXJQcmVzc2VkID0gW107CisgICAgICAgICAg
ICB0aGlzLl9vZmZzZXRYID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX29mZnNldFkgPSBudWxs
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQg
Y2FtZXJhIHN0YXRlIGRlcGVuZGluZyBvbiB0aGUgaW5wdXRzIHRoYXQgaGF2ZSBiZWVuIHVzZWQg
dGhpcyBmcmFtZS4KKyAgICAgKiBUaGlzIGlzIGEgZHluYW1pY2FsbHkgY3JlYXRlZCBsYW1iZGEg
dG8gYXZvaWQgdGhlIHBlcmZvcm1hbmNlIHBlbmFsdHkgb2YgbG9vcGluZyBmb3IgaW5wdXRzIGlu
IHRoZSByZW5kZXIgbG9vcC4KKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhVG91Y2hJbnB1dC5wcm90
b3R5cGUuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9vZmZz
ZXRYICYmIHRoaXMuX29mZnNldFkpIHsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNh
bWVyYTsKKyAgICAgICAgICAgIGNhbWVyYS5jYW1lcmFSb3RhdGlvbi55ICs9IHRoaXMuX29mZnNl
dFggLyB0aGlzLnRvdWNoQW5ndWxhclNlbnNpYmlsaXR5OworICAgICAgICAgICAgaWYgKHRoaXMu
X3BvaW50ZXJQcmVzc2VkLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICBjYW1lcmEuY2Ft
ZXJhUm90YXRpb24ueCArPSAtdGhpcy5fb2Zmc2V0WSAvIHRoaXMudG91Y2hBbmd1bGFyU2Vuc2li
aWxpdHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB2YXIgc3BlZWQgPSBjYW1lcmEuX2NvbXB1dGVMb2NhbENhbWVyYVNwZWVkKCk7CisgICAgICAg
ICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdKDAsIDAsIHNwZWVkICogdGhpcy5fb2Zmc2V0
WSAvIHRoaXMudG91Y2hNb3ZlU2Vuc2liaWxpdHkpOworICAgICAgICAgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRyaXgiXS5Sb3RhdGlv
bllhd1BpdGNoUm9sbFRvUmVmKGNhbWVyYS5yb3RhdGlvbi55LCBjYW1lcmEucm90YXRpb24ueCwg
MCwgY2FtZXJhLl9jYW1lcmFSb3RhdGlvbk1hdHJpeCk7CisgICAgICAgICAgICAgICAgY2FtZXJh
LmNhbWVyYURpcmVjdGlvbi5hZGRJblBsYWNlKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXMoZGlyZWN0
aW9uLCBjYW1lcmEuX2NhbWVyYVJvdGF0aW9uTWF0cml4KSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhl
IGN1cnJlbnQgaW50cHV0LgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICov
CisgICAgRnJlZUNhbWVyYVRvdWNoSW5wdXQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJGcmVlQ2FtZXJhVG91Y2hJbnB1dCI7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBpbnB1dCBjbGFzcy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5wdXQgZnJpZW5kbHkgbmFtZQor
ICAgICAqLworICAgIEZyZWVDYW1lcmFUb3VjaElucHV0LnByb3RvdHlwZS5nZXRTaW1wbGVOYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gInRvdWNoIjsKKyAgICB9OworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgRnJlZUNhbWVyYVRvdWNoSW5wdXQucHJvdG90eXBlLCAidG91
Y2hBbmd1bGFyU2Vuc2liaWxpdHkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgRnJlZUNhbWVyYVRvdWNoSW5wdXQucHJvdG90eXBlLCAidG91Y2hNb3ZlU2Vuc2liaWxpdHki
LCB2b2lkIDApOworICAgIHJldHVybiBGcmVlQ2FtZXJhVG91Y2hJbnB1dDsKK30oKSk7CisKK19D
YW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Q2FtZXJhSW5wdXRUeXBlcyJdWyJGcmVlQ2FtZXJhVG91Y2hJbnB1dCJdID0gRnJlZUNhbWVyYVRv
dWNoSW5wdXQ7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVD
YW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFz
L0lucHV0cy9mcmVlQ2FtZXJhVmlydHVhbEpveXN0aWNrSW5wdXQudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBGcmVlQ2FtZXJhVmlydHVhbEpveXN0aWNrSW5wdXQgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlj
a0lucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBGcmVlQ2FtZXJhVmlydHVhbEpveXN0aWNrSW5w
dXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3ZpcnR1YWxKb3lzdGlja19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWlzYy92aXJ0dWFsSm95c3RpY2sgKi8gIi4vTWlzYy92aXJ0dWFsSm95c3RpY2sudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFJbnB1dHNNYW5hZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9DYW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNN
YW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2ZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9DYW1lcmFzL2ZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvZnJlZUNhbWVy
YUlucHV0c01hbmFnZXIudHMiKTsKKworCisKKworLyoqCisqIEFkZCB2aXJ0dWFsIGpveXN0aWNr
IGlucHV0IHN1cHBvcnQgdG8gdGhlIGlucHV0IG1hbmFnZXIuCisqIEByZXR1cm5zIHRoZSBjdXJy
ZW50IGlucHV0IG1hbmFnZXIKKyovCitfQ2FtZXJhc19mcmVlQ2FtZXJhSW5wdXRzTWFuYWdlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJGcmVlQ2FtZXJhSW5wdXRzTWFuYWdlciJdLnBy
b3RvdHlwZS5hZGRWaXJ0dWFsSm95c3RpY2sgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5hZGQo
bmV3IEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dCgpKTsKKyAgICByZXR1cm4gdGhpczsK
K307CisvKioKKyAqIE1hbmFnZSB0aGUgVmlydHVhbCBKb3lzdGljayBpbnB1dHMgdG8gY29udHJv
bCB0aGUgbW92ZW1lbnQgb2YgYSBmcmVlIGNhbWVyYS4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRzCisgKi8KK3ZhciBGcmVl
Q2FtZXJhVmlydHVhbEpveXN0aWNrSW5wdXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgZnVuY3Rpb24gRnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0KCkgeworICAgIH0K
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBsZWZ0IHN0aWNrIG9mIHRoZSB2aXJ0dWFsIGpveXN0
aWNrLgorICAgICAqIEByZXR1cm5zIFRoZSB2aXJ0dWFsIEpveXN0aWNrCisgICAgICovCisgICAg
RnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0LnByb3RvdHlwZS5nZXRMZWZ0Sm95c3RpY2sg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9sZWZ0am95c3RpY2s7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByaWdodCBzdGljayBvZiB0aGUgdmlydHVhbCBq
b3lzdGljay4KKyAgICAgKiBAcmV0dXJucyBUaGUgdmlydHVhbCBKb3lzdGljaworICAgICAqLwor
ICAgIEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dC5wcm90b3R5cGUuZ2V0UmlnaHRKb3lz
dGljayA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ2h0am95c3RpY2s7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgY2FtZXJhIHN0YXRl
IGRlcGVuZGluZyBvbiB0aGUgaW5wdXRzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgdGhpcyBmcmFtZS4K
KyAgICAgKiBUaGlzIGlzIGEgZHluYW1pY2FsbHkgY3JlYXRlZCBsYW1iZGEgdG8gYXZvaWQgdGhl
IHBlcmZvcm1hbmNlIHBlbmFsdHkgb2YgbG9vcGluZyBmb3IgaW5wdXRzIGluIHRoZSByZW5kZXIg
bG9vcC4KKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhVmlydHVhbEpveXN0aWNrSW5wdXQucHJvdG90
eXBlLmNoZWNrSW5wdXRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fbGVmdGpv
eXN0aWNrKSB7CisgICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5jYW1lcmE7CisgICAgICAg
ICAgICB2YXIgc3BlZWQgPSBjYW1lcmEuX2NvbXB1dGVMb2NhbENhbWVyYVNwZWVkKCkgKiA1MDsK
KyAgICAgICAgICAgIHZhciBjYW1lcmFUcmFuc2Zvcm0gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWF0cml4Il0uUm90YXRpb25ZYXdQaXRjaFJvbGwo
Y2FtZXJhLnJvdGF0aW9uLnksIGNhbWVyYS5yb3RhdGlvbi54LCAwKTsKKyAgICAgICAgICAgIHZh
ciBkZWx0YVRyYW5zZm9ybSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXMobmV3IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0odGhpcy5fbGVm
dGpveXN0aWNrLmRlbHRhUG9zaXRpb24ueCAqIHNwZWVkLCB0aGlzLl9sZWZ0am95c3RpY2suZGVs
dGFQb3NpdGlvbi55ICogc3BlZWQsIHRoaXMuX2xlZnRqb3lzdGljay5kZWx0YVBvc2l0aW9uLnog
KiBzcGVlZCksIGNhbWVyYVRyYW5zZm9ybSk7CisgICAgICAgICAgICBjYW1lcmEuY2FtZXJhRGly
ZWN0aW9uID0gY2FtZXJhLmNhbWVyYURpcmVjdGlvbi5hZGQoZGVsdGFUcmFuc2Zvcm0pOworICAg
ICAgICAgICAgY2FtZXJhLmNhbWVyYVJvdGF0aW9uID0gY2FtZXJhLmNhbWVyYVJvdGF0aW9uLmFk
ZFZlY3RvcjModGhpcy5fcmlnaHRqb3lzdGljay5kZWx0YVBvc2l0aW9uKTsKKyAgICAgICAgICAg
IGlmICghdGhpcy5fbGVmdGpveXN0aWNrLnByZXNzZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9sZWZ0am95c3RpY2suZGVsdGFQb3NpdGlvbiA9IHRoaXMuX2xlZnRqb3lzdGljay5kZWx0YVBv
c2l0aW9uLnNjYWxlKDAuOSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXRoaXMu
X3JpZ2h0am95c3RpY2sucHJlc3NlZCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3JpZ2h0am95
c3RpY2suZGVsdGFQb3NpdGlvbiA9IHRoaXMuX3JpZ2h0am95c3RpY2suZGVsdGFQb3NpdGlvbi5z
Y2FsZSgwLjkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBdHRhY2ggdGhlIGlucHV0IGNvbnRyb2xzIHRvIGEgc3BlY2lmaWMgZG9tIGVsZW1lbnQg
dG8gZ2V0IHRoZSBpbnB1dCBmcm9tLgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMgdGhl
IGVsZW1lbnQgdGhlIGNvbnRyb2xzIHNob3VsZCBiZSBsaXN0ZW5lZCBmcm9tCisgICAgICogQHBh
cmFtIG5vUHJldmVudERlZmF1bHQgRGVmaW5lcyB3aGV0aGVyIGV2ZW50IGNhdWdodCBieSB0aGUg
Y29udHJvbHMgc2hvdWxkIGNhbGwgcHJldmVudGRlZmF1bHQoKSAoaHR0cHM6Ly9kZXZlbG9wZXIu
bW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L3ByZXZlbnREZWZhdWx0KQorICAg
ICAqLworICAgIEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dC5wcm90b3R5cGUuYXR0YWNo
Q29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBub1ByZXZlbnREZWZhdWx0KSB7CisgICAgICAg
IHRoaXMuX2xlZnRqb3lzdGljayA9IG5ldyBfTWlzY192aXJ0dWFsSm95c3RpY2tfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmlydHVhbEpveXN0aWNrIl0odHJ1ZSk7CisgICAgICAgIHRo
aXMuX2xlZnRqb3lzdGljay5zZXRBeGlzRm9yVXBEb3duKF9NaXNjX3ZpcnR1YWxKb3lzdGlja19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJKb3lzdGlja0F4aXMiXS5aKTsKKyAgICAgICAg
dGhpcy5fbGVmdGpveXN0aWNrLnNldEF4aXNGb3JMZWZ0UmlnaHQoX01pc2NfdmlydHVhbEpveXN0
aWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkpveXN0aWNrQXhpcyJdLlgpOworICAg
ICAgICB0aGlzLl9sZWZ0am95c3RpY2suc2V0Sm95c3RpY2tTZW5zaWJpbGl0eSgwLjE1KTsKKyAg
ICAgICAgdGhpcy5fcmlnaHRqb3lzdGljayA9IG5ldyBfTWlzY192aXJ0dWFsSm95c3RpY2tfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmlydHVhbEpveXN0aWNrIl0oZmFsc2UpOworICAg
ICAgICB0aGlzLl9yaWdodGpveXN0aWNrLnNldEF4aXNGb3JVcERvd24oX01pc2NfdmlydHVhbEpv
eXN0aWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkpveXN0aWNrQXhpcyJdLlgpOwor
ICAgICAgICB0aGlzLl9yaWdodGpveXN0aWNrLnNldEF4aXNGb3JMZWZ0UmlnaHQoX01pc2Nfdmly
dHVhbEpveXN0aWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkpveXN0aWNrQXhpcyJd
LlkpOworICAgICAgICB0aGlzLl9yaWdodGpveXN0aWNrLnJldmVyc2VVcERvd24gPSB0cnVlOwor
ICAgICAgICB0aGlzLl9yaWdodGpveXN0aWNrLnNldEpveXN0aWNrU2Vuc2liaWxpdHkoMC4wNSk7
CisgICAgICAgIHRoaXMuX3JpZ2h0am95c3RpY2suc2V0Sm95c3RpY2tDb2xvcigieWVsbG93Iik7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRhY2ggdGhlIGN1cnJlbnQgY29udHJvbHMgZnJv
bSB0aGUgc3BlY2lmaWVkIGRvbSBlbGVtZW50LgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmlu
ZXMgdGhlIGVsZW1lbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdGhlIGlucHV0cyBmcm9tCisgICAgICov
CisgICAgRnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0LnByb3RvdHlwZS5kZXRhY2hDb250
cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgdGhpcy5fbGVmdGpveXN0aWNrLnJl
bGVhc2VDYW52YXMoKTsKKyAgICAgICAgdGhpcy5fcmlnaHRqb3lzdGljay5yZWxlYXNlQ2FudmFz
KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBj
dXJyZW50IGludHB1dC4KKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLwor
ICAgIEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkZyZWVDYW1lcmFWaXJ0dWFsSm95c3Rp
Y2tJbnB1dCI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGZyaWVuZGx5IG5hbWUg
YXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBjbGFzcy4KKyAgICAgKiBAcmV0dXJucyB0aGUgaW5w
dXQgZnJpZW5kbHkgbmFtZQorICAgICAqLworICAgIEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJ
bnB1dC5wcm90b3R5cGUuZ2V0U2ltcGxlTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuICJ2aXJ0dWFsSm95c3RpY2siOworICAgIH07CisgICAgcmV0dXJuIEZyZWVDYW1lcmFWaXJ0
dWFsSm95c3RpY2tJbnB1dDsKK30oKSk7CisKK19DYW1lcmFzX2NhbWVyYUlucHV0c01hbmFnZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ2FtZXJhSW5wdXRUeXBlcyJdWyJGcmVlQ2Ft
ZXJhVmlydHVhbEpveXN0aWNrSW5wdXQiXSA9IEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1
dDsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9JbnB1dHMvaW5kZXgudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFz
L0lucHV0cy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0LCBB
cmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCwgQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVl
bElucHV0LCBBcmNSb3RhdGVDYW1lcmFQb2ludGVyc0lucHV0LCBBcmNSb3RhdGVDYW1lcmFWUkRl
dmljZU9yaWVudGF0aW9uSW5wdXQsIEZseUNhbWVyYUtleWJvYXJkSW5wdXQsIEZseUNhbWVyYU1v
dXNlSW5wdXQsIEZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LCBGb2xsb3dDYW1lcmFNb3Vz
ZVdoZWVsSW5wdXQsIEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQsIEZyZWVDYW1lcmFEZXZpY2VP
cmllbnRhdGlvbklucHV0LCBGcmVlQ2FtZXJhR2FtZXBhZElucHV0LCBGcmVlQ2FtZXJhS2V5Ym9h
cmRNb3ZlSW5wdXQsIEZyZWVDYW1lcmFNb3VzZUlucHV0LCBGcmVlQ2FtZXJhVG91Y2hJbnB1dCwg
RnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfYXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FyY1JvdGF0
ZUNhbWVyYUdhbWVwYWRJbnB1dCAqLyAiLi9DYW1lcmFzL0lucHV0cy9hcmNSb3RhdGVDYW1lcmFH
YW1lcGFkSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhR2FtZXBh
ZElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1
dCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcmNSb3RhdGVDYW1lcmFLZXli
b2FyZE1vdmVJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9hcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCAqLyAiLi9DYW1l
cmFzL0lucHV0cy9hcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2FyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIkFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0Il07IH0pOwor
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FyY1JvdGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9hcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQgKi8gIi4vQ2FtZXJhcy9JbnB1dHMvYXJj
Um90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1Jv
dGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FyY1JvdGF0
ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBcmNS
b3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfYXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hcmNSb3RhdGVDYW1lcmFQb2ludGVy
c0lucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2FyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1dCJdOyB9KTsK
KworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVu
dGF0aW9uSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vYXJjUm90YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0ICovICIu
L0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3JpZW50YXRpb25JbnB1dC50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9u
SW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVu
dGF0aW9uSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQXJjUm90YXRlQ2FtZXJh
VlJEZXZpY2VPcmllbnRhdGlvbklucHV0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2ZseUNhbWVyYUtleWJvYXJkSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCAqLyAiLi9D
YW1lcmFzL0lucHV0cy9mbHlDYW1lcmFLZXlib2FyZElucHV0LnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkZseUNhbWVyYUtleWJvYXJkSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mbHlDYW1l
cmFLZXlib2FyZElucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkZseUNhbWVyYUtl
eWJvYXJkSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmx5Q2FtZXJh
TW91c2VJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9mbHlDYW1lcmFNb3VzZUlucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZseUNh
bWVyYU1vdXNlSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmx5Q2FtZXJhTW91c2VJbnB1
dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZseUNhbWVyYU1vdXNlSW5wdXRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfX1siRmx5Q2FtZXJhTW91c2VJbnB1dCJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9mb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mb2xsb3dDYW1l
cmFLZXlib2FyZE1vdmVJbnB1dCAqLyAiLi9DYW1lcmFzL0lucHV0cy9mb2xsb3dDYW1lcmFLZXli
b2FyZE1vdmVJbnB1dC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGb2xsb3dDYW1lcmFLZXlib2Fy
ZE1vdmVJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZvbGxvd0NhbWVyYUtleWJvYXJkTW92
ZUlucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkZvbGxvd0NhbWVyYUtleWJvYXJk
TW92ZUlucHV0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZvbGxvd0NhbWVy
YU1vdXNlV2hlZWxJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9mb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQgKi8gIi4vQ2FtZXJh
cy9JbnB1dHMvZm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0LnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkZvbGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Zv
bGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJG
b2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfZm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0
ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2ZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfX1siRm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9mcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYURl
dmljZU9yaWVudGF0aW9uSW5wdXQgKi8gIi4vQ2FtZXJhcy9JbnB1dHMvZnJlZUNhbWVyYURldmlj
ZU9yaWVudGF0aW9uSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYURldmlj
ZU9yaWVudGF0aW9uSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mcmVlQ2FtZXJhRGV2aWNl
T3JpZW50YXRpb25JbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siRnJlZUNhbWVy
YURldmljZU9yaWVudGF0aW9uSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfZnJlZUNhbWVyYUdhbWVwYWRJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYUdhbWVwYWRJbnB1dCAqLyAiLi9D
YW1lcmFzL0lucHV0cy9mcmVlQ2FtZXJhR2FtZXBhZElucHV0LnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkZyZWVDYW1lcmFHYW1lcGFkSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mcmVlQ2Ft
ZXJhR2FtZXBhZElucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJGcmVlQ2FtZXJh
R2FtZXBhZElucHV0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZyZWVDYW1l
cmFLZXlib2FyZE1vdmVJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0ICovICIuL0Nh
bWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dC50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9mcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEy
X19bIkZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9mcmVlQ2FtZXJhTW91c2VJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYU1vdXNlSW5wdXQgKi8g
Ii4vQ2FtZXJhcy9JbnB1dHMvZnJlZUNhbWVyYU1vdXNlSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRnJlZUNhbWVyYU1vdXNlSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mcmVlQ2Ft
ZXJhTW91c2VJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siRnJlZUNhbWVyYU1v
dXNlSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZnJlZUNhbWVyYVRv
dWNoSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2ZyZWVDYW1lcmFUb3VjaElucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVD
YW1lcmFUb3VjaElucHV0LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmFUb3VjaElu
cHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZnJlZUNhbWVyYVRvdWNoSW5wdXRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE0X19bIkZyZWVDYW1lcmFUb3VjaElucHV0Il07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2ZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnJl
ZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1l
cmFWaXJ0dWFsSm95c3RpY2tJbnB1dC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVlQ2FtZXJh
VmlydHVhbEpveXN0aWNrSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mcmVlQ2FtZXJhVmly
dHVhbEpveXN0aWNrSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIkZyZWVDYW1l
cmFWaXJ0dWFsSm95c3RpY2tJbnB1dCJdOyB9KTsKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvUmlnTW9kZXMvc3RlcmVv
c2NvcGljQW5hZ2x5cGhSaWdNb2RlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9SaWdN
b2Rlcy9zdGVyZW9zY29waWNBbmFnbHlwaFJpZ01vZGUudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIG5vIGV4
cG9ydHMgcHJvdmlkZWQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL2NhbWVyYSAqLyAiLi9DYW1lcmFzL2NhbWVyYS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX3Bhc3NQb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vUG9zdFBy
b2Nlc3Nlcy9wYXNzUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wYXNzUG9zdFByb2Nl
c3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19hbmFnbHlw
aFBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9Qb3N0UHJvY2Vzc2VzL2FuYWdseXBoUG9zdFByb2Nlc3MgKi8gIi4v
UG9zdFByb2Nlc3Nlcy9hbmFnbHlwaFBvc3RQcm9jZXNzLnRzIik7CisKKworCitfY2FtZXJhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNhbWVyYSJdLl9zZXRTdGVyZW9zY29waWNBbmFn
bHlwaFJpZ01vZGUgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAgY2FtZXJhLl9yaWdDYW1lcmFz
WzBdLl9yaWdQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wYXNzUG9zdFByb2Nlc3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUGFzc1Bvc3RQcm9jZXNzIl0oY2FtZXJhLm5h
bWUgKyAiX3Bhc3N0aHJ1IiwgMS4wLCBjYW1lcmEuX3JpZ0NhbWVyYXNbMF0pOworICAgIGNhbWVy
YS5fcmlnQ2FtZXJhc1sxXS5fcmlnUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfYW5h
Z2x5cGhQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBbmFnbHlwaFBv
c3RQcm9jZXNzIl0oY2FtZXJhLm5hbWUgKyAiX2FuYWdseXBoIiwgMS4wLCBjYW1lcmEuX3JpZ0Nh
bWVyYXMpOworfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9SaWdNb2Rlcy9z
dGVyZW9zY29waWNSaWdNb2RlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvUmlnTW9kZXMvc3RlcmVv
c2NvcGljUmlnTW9kZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIG5vIGV4cG9ydHMgcHJvdmlkZWQgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2NhbWVyYSAqLyAiLi9D
YW1lcmFzL2NhbWVyYS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vz
c2VzX3Bhc3NQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vUG9zdFByb2Nlc3Nlcy9wYXNzUG9zdFByb2Nlc3MgKi8g
Ii4vUG9zdFByb2Nlc3Nlcy9wYXNzUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfUG9zdFByb2Nlc3Nlc19zdGVyZW9zY29waWNJbnRlcmxhY2VQb3N0UHJvY2Vzc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vUG9zdFByb2Nlc3Nlcy9zdGVyZW9zY29waWNJbnRlcmxhY2VQb3N0UHJvY2VzcyAqLyAiLi9Q
b3N0UHJvY2Vzc2VzL3N0ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNzLnRzIik7CisKKwor
CitfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNhbWVyYSJdLl9zZXRTdGVy
ZW9zY29waWNSaWdNb2RlID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgIHZhciBpc1N0ZXJlb3Nj
b3BpY0hvcml6ID0gY2FtZXJhLmNhbWVyYVJpZ01vZGUgPT09IF9jYW1lcmFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siQ2FtZXJhIl0uUklHX01PREVfU1RFUkVPU0NPUElDX1NJREVCWVNJ
REVfUEFSQUxMRUwgfHwgY2FtZXJhLmNhbWVyYVJpZ01vZGUgPT09IF9jYW1lcmFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siQ2FtZXJhIl0uUklHX01PREVfU1RFUkVPU0NPUElDX1NJREVC
WVNJREVfQ1JPU1NFWUVEOworICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1swXS5fcmlnUG9zdFByb2Nl
c3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcGFzc1Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlBhc3NQb3N0UHJvY2VzcyJdKGNhbWVyYS5uYW1lICsgIl9wYXNzdGhydSIs
IDEuMCwgY2FtZXJhLl9yaWdDYW1lcmFzWzBdKTsKKyAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0u
X3JpZ1Bvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3N0ZXJlb3Njb3BpY0ludGVybGFj
ZVBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlN0ZXJlb3Njb3BpY0lu
dGVybGFjZVBvc3RQcm9jZXNzIl0oY2FtZXJhLm5hbWUgKyAiX3N0ZXJlb0ludGVybGFjZSIsIGNh
bWVyYS5fcmlnQ2FtZXJhcywgaXNTdGVyZW9zY29waWNIb3Jpeik7Cit9OworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9DYW1lcmFzL1JpZ01vZGVzL3ZyUmlnTW9kZS50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvUmln
TW9kZXMvdnJSaWdNb2RlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBubyBleHBvcnRzIHByb3ZpZGVkICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9jYW1lcmEgKi8gIi4vQ2FtZXJhcy9j
YW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfdnJEaXN0b3J0aW9uQ29ycmVjdGlv
blBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9Qb3N0UHJvY2Vzc2VzL3ZyRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0
UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3ZyRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0UHJv
Y2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX3ZyTXVs
dGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL1Bvc3RQcm9jZXNzZXMvdnJNdWx0aXZp
ZXdUb1NpbmdsZXZpZXdQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3ZyTXVsdGl2aWV3
VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
VlJfdnJDYW1lcmFNZXRyaWNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9WUi92ckNhbWVyYU1ldHJpY3MgKi8gIi4vQ2FtZXJhcy9WUi92
ckNhbWVyYU1ldHJpY3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmlld3BvcnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmlld3BvcnQg
Ki8gIi4vTWF0aHMvbWF0aC52aWV3cG9ydC50cyIpOworCisKKworCisKKworCitfY2FtZXJhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNhbWVyYSJdLl9zZXRWUlJpZ01vZGUgPSBmdW5j
dGlvbiAoY2FtZXJhLCByaWdQYXJhbXMpIHsKKyAgICB2YXIgbWV0cmljcyA9IHJpZ1BhcmFtcy52
ckNhbWVyYU1ldHJpY3MgfHwgX1ZSX3ZyQ2FtZXJhTWV0cmljc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJWUkNhbWVyYU1ldHJpY3MiXS5HZXREZWZhdWx0KCk7CisgICAgY2FtZXJhLl9y
aWdDYW1lcmFzWzBdLl9jYW1lcmFSaWdQYXJhbXMudnJNZXRyaWNzID0gbWV0cmljczsKKyAgICBj
YW1lcmEuX3JpZ0NhbWVyYXNbMF0udmlld3BvcnQgPSBuZXcgX01hdGhzX21hdGhfdmlld3BvcnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVmlld3BvcnQiXSgwLCAwLCAwLjUsIDEuMCk7
CisgICAgY2FtZXJhLl9yaWdDYW1lcmFzWzBdLl9jYW1lcmFSaWdQYXJhbXMudnJXb3JrTWF0cml4
ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJN
YXRyaXgiXSgpOworICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1swXS5fY2FtZXJhUmlnUGFyYW1zLnZy
SE1hdHJpeCA9IG1ldHJpY3MubGVmdEhNYXRyaXg7CisgICAgY2FtZXJhLl9yaWdDYW1lcmFzWzBd
Ll9jYW1lcmFSaWdQYXJhbXMudnJQcmVWaWV3TWF0cml4ID0gbWV0cmljcy5sZWZ0UHJlVmlld01h
dHJpeDsKKyAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMF0uZ2V0UHJvamVjdGlvbk1hdHJpeCA9IGNh
bWVyYS5fcmlnQ2FtZXJhc1swXS5fZ2V0VlJQcm9qZWN0aW9uTWF0cml4OworICAgIGNhbWVyYS5f
cmlnQ2FtZXJhc1sxXS5fY2FtZXJhUmlnUGFyYW1zLnZyTWV0cmljcyA9IG1ldHJpY3M7CisgICAg
Y2FtZXJhLl9yaWdDYW1lcmFzWzFdLnZpZXdwb3J0ID0gbmV3IF9NYXRoc19tYXRoX3ZpZXdwb3J0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlZpZXdwb3J0Il0oMC41LCAwLCAwLjUsIDEu
MCk7CisgICAgY2FtZXJhLl9yaWdDYW1lcmFzWzFdLl9jYW1lcmFSaWdQYXJhbXMudnJXb3JrTWF0
cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJNYXRyaXgiXSgpOworICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1sxXS5fY2FtZXJhUmlnUGFyYW1z
LnZySE1hdHJpeCA9IG1ldHJpY3MucmlnaHRITWF0cml4OworICAgIGNhbWVyYS5fcmlnQ2FtZXJh
c1sxXS5fY2FtZXJhUmlnUGFyYW1zLnZyUHJlVmlld01hdHJpeCA9IG1ldHJpY3MucmlnaHRQcmVW
aWV3TWF0cml4OworICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1sxXS5nZXRQcm9qZWN0aW9uTWF0cml4
ID0gY2FtZXJhLl9yaWdDYW1lcmFzWzFdLl9nZXRWUlByb2plY3Rpb25NYXRyaXg7CisgICAgLy8g
Rm9yIG11bHRpdmlldyBvbiBhIHdlYlZSIGNhbWVyYQorICAgIC8vIEZpcnN0IG11bHRpdmlldyB3
aWxsIGJlIHJlbmRlcmVkIHRvIGNhbWVyYS5fbXVsdGl2aWV3VGV4dHVyZQorICAgIC8vIFRoZW4g
dGhpcyBwb3N0cHJvY2VzcyB3aWxsIHJ1biBvbiBlYWNoIGV5ZSB0byBjb3B5IHRoZSByaWdodCB0
ZXh0dXJlIHRvIGVhY2ggZXllCisgICAgaWYgKG1ldHJpY3MubXVsdGl2aWV3RW5hYmxlZCkgewor
ICAgICAgICBpZiAoIWNhbWVyYS5nZXRTY2VuZSgpLmdldEVuZ2luZSgpLmdldENhcHMoKS5tdWx0
aXZpZXcpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJMb2dnZXIiXS5XYXJuKCJNdWx0aXZpZXcgaXMgbm90IHN1cHBvcnRlZCwgZmFsbGlu
ZyBiYWNrIHRvIHN0YW5kYXJkIHJlbmRlcmluZyIpOworICAgICAgICAgICAgbWV0cmljcy5tdWx0
aXZpZXdFbmFibGVkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBjYW1lcmEuX3VzZU11bHRpdmlld1RvU2luZ2xlVmlldyA9IHRydWU7CisgICAgICAgICAg
ICBjYW1lcmEuX3JpZ1Bvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3ZyTXVsdGl2aWV3
VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVlJN
dWx0aXZpZXdUb1NpbmdsZXZpZXdQb3N0UHJvY2VzcyJdKCJWUk11bHRpdmlld1RvU2luZ2xldmll
dyIsIGNhbWVyYSwgbWV0cmljcy5wb3N0UHJvY2Vzc1NjYWxlRmFjdG9yKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAobWV0cmljcy5jb21wZW5zYXRlRGlzdG9ydGlvbikgeworICAgICAgICBj
YW1lcmEuX3JpZ0NhbWVyYXNbMF0uX3JpZ1Bvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2Vz
X3ZyRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJWUkRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFByb2Nlc3MiXSgiVlJfRGlzdG9ydF9D
b21wZW5zYXRpb25fTGVmdCIsIGNhbWVyYS5fcmlnQ2FtZXJhc1swXSwgZmFsc2UsIG1ldHJpY3Mp
OworICAgICAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0uX3JpZ1Bvc3RQcm9jZXNzID0gbmV3IF9Q
b3N0UHJvY2Vzc2VzX3ZyRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJWUkRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFByb2Nlc3MiXSgi
VlJfRGlzdG9ydF9Db21wZW5zYXRpb25fUmlnaHQiLCBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0sIHRy
dWUsIG1ldHJpY3MpOworICAgIH0KK307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVy
YXMvUmlnTW9kZXMvd2ViVlJSaWdNb2RlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9SaWdNb2Rlcy93ZWJWUlJp
Z01vZGUudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIG5vIGV4cG9ydHMgcHJvdmlkZWQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2NhbWVyYSAqLyAiLi9DYW1lcmFzL2NhbWVyYS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0
aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92aWV3cG9ydF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52aWV3cG9y
dCAqLyAiLi9NYXRocy9tYXRoLnZpZXdwb3J0LnRzIik7CisKKworCitfY2FtZXJhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkNhbWVyYSJdLl9zZXRXZWJWUlJpZ01vZGUgPSBmdW5jdGlv
biAoY2FtZXJhLCByaWdQYXJhbXMpIHsKKyAgICBpZiAocmlnUGFyYW1zLnZyRGlzcGxheSkgewor
ICAgICAgICB2YXIgbGVmdEV5ZSA9IHJpZ1BhcmFtcy52ckRpc3BsYXkuZ2V0RXllUGFyYW1ldGVy
cygnbGVmdCcpOworICAgICAgICB2YXIgcmlnaHRFeWUgPSByaWdQYXJhbXMudnJEaXNwbGF5Lmdl
dEV5ZVBhcmFtZXRlcnMoJ3JpZ2h0Jyk7CisgICAgICAgIC8vTGVmdCBleWUKKyAgICAgICAgY2Ft
ZXJhLl9yaWdDYW1lcmFzWzBdLnZpZXdwb3J0ID0gbmV3IF9NYXRoc19tYXRoX3ZpZXdwb3J0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZpZXdwb3J0Il0oMCwgMCwgMC41LCAxLjApOwor
ICAgICAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMF0uc2V0Q2FtZXJhUmlnUGFyYW1ldGVyKCJsZWZ0
IiwgdHJ1ZSk7CisgICAgICAgIC8vbGVhdmluZyB0aGlzIGZvciBmdXR1cmUgcmVmZXJlbmNlCisg
ICAgICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1swXS5zZXRDYW1lcmFSaWdQYXJhbWV0ZXIoInNwZWNz
IiwgcmlnUGFyYW1zLnNwZWNzKTsKKyAgICAgICAgY2FtZXJhLl9yaWdDYW1lcmFzWzBdLnNldENh
bWVyYVJpZ1BhcmFtZXRlcigiZXllUGFyYW1ldGVycyIsIGxlZnRFeWUpOworICAgICAgICBjYW1l
cmEuX3JpZ0NhbWVyYXNbMF0uc2V0Q2FtZXJhUmlnUGFyYW1ldGVyKCJmcmFtZURhdGEiLCByaWdQ
YXJhbXMuZnJhbWVEYXRhKTsKKyAgICAgICAgY2FtZXJhLl9yaWdDYW1lcmFzWzBdLnNldENhbWVy
YVJpZ1BhcmFtZXRlcigicGFyZW50Q2FtZXJhIiwgcmlnUGFyYW1zLnBhcmVudENhbWVyYSk7Cisg
ICAgICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1swXS5fY2FtZXJhUmlnUGFyYW1zLnZyV29ya01hdHJp
eCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TWF0cml4Il0oKTsKKyAgICAgICAgY2FtZXJhLl9yaWdDYW1lcmFzWzBdLmdldFByb2plY3Rpb25N
YXRyaXggPSBjYW1lcmEuX2dldFdlYlZSUHJvamVjdGlvbk1hdHJpeDsKKyAgICAgICAgY2FtZXJh
Ll9yaWdDYW1lcmFzWzBdLnBhcmVudCA9IGNhbWVyYTsKKyAgICAgICAgY2FtZXJhLl9yaWdDYW1l
cmFzWzBdLl9nZXRWaWV3TWF0cml4ID0gY2FtZXJhLl9nZXRXZWJWUlZpZXdNYXRyaXg7CisgICAg
ICAgIC8vUmlnaHQgZXllCisgICAgICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1sxXS52aWV3cG9ydCA9
IG5ldyBfTWF0aHNfbWF0aF92aWV3cG9ydF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJW
aWV3cG9ydCJdKDAuNSwgMCwgMC41LCAxLjApOworICAgICAgICBjYW1lcmEuX3JpZ0NhbWVyYXNb
MV0uc2V0Q2FtZXJhUmlnUGFyYW1ldGVyKCdleWVQYXJhbWV0ZXJzJywgcmlnaHRFeWUpOworICAg
ICAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0uc2V0Q2FtZXJhUmlnUGFyYW1ldGVyKCJzcGVjcyIs
IHJpZ1BhcmFtcy5zcGVjcyk7CisgICAgICAgIGNhbWVyYS5fcmlnQ2FtZXJhc1sxXS5zZXRDYW1l
cmFSaWdQYXJhbWV0ZXIoImZyYW1lRGF0YSIsIHJpZ1BhcmFtcy5mcmFtZURhdGEpOworICAgICAg
ICBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0uc2V0Q2FtZXJhUmlnUGFyYW1ldGVyKCJwYXJlbnRDYW1l
cmEiLCByaWdQYXJhbXMucGFyZW50Q2FtZXJhKTsKKyAgICAgICAgY2FtZXJhLl9yaWdDYW1lcmFz
WzFdLl9jYW1lcmFSaWdQYXJhbXMudnJXb3JrTWF0cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXSgpOworICAgICAgICBjYW1l
cmEuX3JpZ0NhbWVyYXNbMV0uZ2V0UHJvamVjdGlvbk1hdHJpeCA9IGNhbWVyYS5fZ2V0V2ViVlJQ
cm9qZWN0aW9uTWF0cml4OworICAgICAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0ucGFyZW50ID0g
Y2FtZXJhOworICAgICAgICBjYW1lcmEuX3JpZ0NhbWVyYXNbMV0uX2dldFZpZXdNYXRyaXggPSBj
YW1lcmEuX2dldFdlYlZSVmlld01hdHJpeDsKKyAgICB9Cit9OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9DYW1lcmFzL1N0ZXJlb3Njb3BpYy9hbmFnbHlwaEFyY1JvdGF0ZUNhbWVyYS50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvU3RlcmVvc2NvcGljL2FuYWdseXBoQXJjUm90YXRl
Q2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBbmFnbHlwaEFyY1Jv
dGF0ZUNhbWVyYSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmFnbHlw
aEFyY1JvdGF0ZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQW5hZ2x5cGhBcmNSb3RhdGVD
YW1lcmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9k
ZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1lcmEgKi8gIi4vQ2FtZXJhcy9jYW1lcmEu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19hcmNSb3RhdGVDYW1lcmFf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL0NhbWVyYXMvYXJjUm90YXRlQ2FtZXJhICovICIuL0NhbWVyYXMvYXJjUm90YXRlQ2FtZXJh
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9N
YXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlICovICIuL25vZGUudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfUmlnTW9kZXNfc3RlcmVvc2NvcGljQW5hZ2x5cGhSaWdNb2RlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9S
aWdNb2Rlcy9zdGVyZW9zY29waWNBbmFnbHlwaFJpZ01vZGUgKi8gIi4vQ2FtZXJhcy9SaWdNb2Rl
cy9zdGVyZW9zY29waWNBbmFnbHlwaFJpZ01vZGUudHMiKTsKKworCisKKworCisvLyBTaWRlIGVm
ZmVjdCBpbXBvcnQgdG8gZGVmaW5lIHRoZSBzdGVyZW9zY29waWMgbW9kZS4KKworX25vZGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiQW5h
Z2x5cGhBcmNSb3RhdGVDYW1lcmEiLCBmdW5jdGlvbiAobmFtZSwgc2NlbmUsIG9wdGlvbnMpIHsK
KyAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEFuYWdseXBoQXJjUm90YXRlQ2Ft
ZXJhKG5hbWUsIDAsIDAsIDEuMCwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCksIG9wdGlvbnMuaW50ZXJheGlhbF9kaXN0YW5j
ZSwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIENhbWVyYSB1c2VkIHRvIHNpbXVsYXRlIGFuYWds
eXBoaWMgcmVuZGVyaW5nIChiYXNlZCBvbiBBcmNSb3RhdGVDYW1lcmEpCisgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI2FuYWdseXBoLWNhbWVyYXMKKyAq
LwordmFyIEFuYWdseXBoQXJjUm90YXRlQ2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0
ZW5kcyJdKEFuYWdseXBoQXJjUm90YXRlQ2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgQW5hZ2x5cGhBcmNSb3RhdGVDYW1lcmEKKyAgICAgKiBAcGFyYW0gbmFt
ZSBkZWZpbmVzIGNhbWVyYSBuYW1lCisgICAgICogQHBhcmFtIGFscGhhIGRlZmluZXMgYWxwaGEg
YW5nbGUgKGluIHJhZGlhbnMpCisgICAgICogQHBhcmFtIGJldGEgZGVmaW5lcyBiZXRhIGFuZ2xl
IChpbiByYWRpYW5zKQorICAgICAqIEBwYXJhbSByYWRpdXMgZGVmaW5lcyByYWRpdXMKKyAgICAg
KiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgY2FtZXJhIHRhcmdldAorICAgICAqIEBwYXJhbSBpbnRl
cmF4aWFsRGlzdGFuY2UgZGVmaW5lcyBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggY29sb3IgYXhpcwor
ICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICovCisg
ICAgZnVuY3Rpb24gQW5hZ2x5cGhBcmNSb3RhdGVDYW1lcmEobmFtZSwgYWxwaGEsIGJldGEsIHJh
ZGl1cywgdGFyZ2V0LCBpbnRlcmF4aWFsRGlzdGFuY2UsIHNjZW5lKSB7CisgICAgICAgIHZhciBf
dGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIGFscGhhLCBiZXRhLCByYWRpdXMsIHRhcmdl
dCwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmludGVyYXhpYWxEaXN0YW5jZSA9IGlu
dGVyYXhpYWxEaXN0YW5jZTsKKyAgICAgICAgX3RoaXMuc2V0Q2FtZXJhUmlnTW9kZShfQ2FtZXJh
c19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ2FtZXJhIl0uUklHX01PREVf
U1RFUkVPU0NPUElDX0FOQUdMWVBILCB7IGludGVyYXhpYWxEaXN0YW5jZTogaW50ZXJheGlhbERp
c3RhbmNlIH0pOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAq
IEdldHMgY2FtZXJhIGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyBBbmFnbHlwaEFyY1JvdGF0
ZUNhbWVyYQorICAgICAqLworICAgIEFuYWdseXBoQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZS5n
ZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQW5hZ2x5cGhBcmNS
b3RhdGVDYW1lcmEiOworICAgIH07CisgICAgcmV0dXJuIEFuYWdseXBoQXJjUm90YXRlQ2FtZXJh
OworfShfQ2FtZXJhc19hcmNSb3RhdGVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQXJjUm90YXRlQ2FtZXJhIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1l
cmFzL1N0ZXJlb3Njb3BpYy9hbmFnbHlwaEZyZWVDYW1lcmEudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2Ft
ZXJhcy9TdGVyZW9zY29waWMvYW5hZ2x5cGhGcmVlQ2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogQW5hZ2x5cGhGcmVlQ2FtZXJhICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkFuYWdseXBoRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQW5h
Z2x5cGhGcmVlQ2FtZXJhOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIg
Ki8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhICovICIuL0NhbWVy
YXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfZnJlZUNh
bWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vQ2FtZXJhcy9mcmVlQ2FtZXJhICovICIuL0NhbWVyYXMvZnJlZUNhbWVyYS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMv
bWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1JpZ01vZGVzX3N0ZXJlb3Njb3BpY0FuYWdseXBoUmlnTW9kZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmlnTW9k
ZXMvc3RlcmVvc2NvcGljQW5hZ2x5cGhSaWdNb2RlICovICIuL0NhbWVyYXMvUmlnTW9kZXMvc3Rl
cmVvc2NvcGljQW5hZ2x5cGhSaWdNb2RlLnRzIik7CisKKworCisKKworLy8gU2lkZSBlZmZlY3Qg
aW1wb3J0IHRvIGRlZmluZSB0aGUgc3RlcmVvc2NvcGljIG1vZGUuCisKK19ub2RlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGUiXS5BZGROb2RlQ29uc3RydWN0b3IoIkFuYWdseXBo
RnJlZUNhbWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSwgb3B0aW9ucykgeworICAgIHJldHVy
biBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQW5hZ2x5cGhGcmVlQ2FtZXJhKG5hbWUsIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVy
bygpLCBvcHRpb25zLmludGVyYXhpYWxfZGlzdGFuY2UsIHNjZW5lKTsgfTsKK30pOworLyoqCisg
KiBDYW1lcmEgdXNlZCB0byBzaW11bGF0ZSBhbmFnbHlwaGljIHJlbmRlcmluZyAoYmFzZWQgb24g
RnJlZUNhbWVyYSkKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL2Nh
bWVyYXMjYW5hZ2x5cGgtY2FtZXJhcworICovCit2YXIgQW5hZ2x5cGhGcmVlQ2FtZXJhID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEFuYWdseXBoRnJlZUNhbWVyYSwgX3N1cGVyKTsK
KyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEFuYWdseXBoRnJlZUNhbWVyYQorICAgICAq
IEBwYXJhbSBuYW1lIGRlZmluZXMgY2FtZXJhIG5hbWUKKyAgICAgKiBAcGFyYW0gcG9zaXRpb24g
ZGVmaW5lcyBpbml0aWFsIHBvc2l0aW9uCisgICAgICogQHBhcmFtIGludGVyYXhpYWxEaXN0YW5j
ZSBkZWZpbmVzIGRpc3RhbmNlIGJldHdlZW4gZWFjaCBjb2xvciBheGlzCisgICAgICogQHBhcmFt
IHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBB
bmFnbHlwaEZyZWVDYW1lcmEobmFtZSwgcG9zaXRpb24sIGludGVyYXhpYWxEaXN0YW5jZSwgc2Nl
bmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgcG9zaXRp
b24sIHNjZW5lKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5pbnRlcmF4aWFsRGlzdGFuY2UgPSBp
bnRlcmF4aWFsRGlzdGFuY2U7CisgICAgICAgIF90aGlzLnNldENhbWVyYVJpZ01vZGUoX0NhbWVy
YXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNhbWVyYSJdLlJJR19NT0RF
X1NURVJFT1NDT1BJQ19BTkFHTFlQSCwgeyBpbnRlcmF4aWFsRGlzdGFuY2U6IGludGVyYXhpYWxE
aXN0YW5jZSB9KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAg
KiBHZXRzIGNhbWVyYSBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgQW5hZ2x5cGhGcmVlQ2Ft
ZXJhCisgICAgICovCisgICAgQW5hZ2x5cGhGcmVlQ2FtZXJhLnByb3RvdHlwZS5nZXRDbGFzc05h
bWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQW5hZ2x5cGhGcmVlQ2FtZXJhIjsK
KyAgICB9OworICAgIHJldHVybiBBbmFnbHlwaEZyZWVDYW1lcmE7Cit9KF9DYW1lcmFzX2ZyZWVD
YW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRnJlZUNhbWVyYSJdKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMvYW5hZ2x5cGhHYW1l
cGFkQ2FtZXJhLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvU3RlcmVvc2NvcGljL2FuYWds
eXBoR2FtZXBhZENhbWVyYS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuYWds
eXBoR2FtZXBhZENhbWVyYSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJB
bmFnbHlwaEdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFuYWdseXBoR2FtZXBh
ZENhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9u
b2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVyYSAqLyAiLi9DYW1lcmFzL2NhbWVy
YS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2dhbWVwYWRDYW1lcmFf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL0NhbWVyYXMvZ2FtZXBhZENhbWVyYSAqLyAiLi9DYW1lcmFzL2dhbWVwYWRDYW1lcmEudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhz
L21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9SaWdNb2Rlc19zdGVyZW9zY29waWNBbmFnbHlwaFJpZ01vZGVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1JpZ01v
ZGVzL3N0ZXJlb3Njb3BpY0FuYWdseXBoUmlnTW9kZSAqLyAiLi9DYW1lcmFzL1JpZ01vZGVzL3N0
ZXJlb3Njb3BpY0FuYWdseXBoUmlnTW9kZS50cyIpOworCisKKworCisKKy8vIFNpZGUgZWZmZWN0
IGltcG9ydCB0byBkZWZpbmUgdGhlIHN0ZXJlb3Njb3BpYyBtb2RlLgorCitfbm9kZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlIl0uQWRkTm9kZUNvbnN0cnVjdG9yKCJBbmFnbHlw
aEdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbiAobmFtZSwgc2NlbmUsIG9wdGlvbnMpIHsKKyAgICBy
ZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEFuYWdseXBoR2FtZXBhZENhbWVyYShuYW1l
LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9y
MyJdLlplcm8oKSwgb3B0aW9ucy5pbnRlcmF4aWFsX2Rpc3RhbmNlLCBzY2VuZSk7IH07Cit9KTsK
Ky8qKgorICogQ2FtZXJhIHVzZWQgdG8gc2ltdWxhdGUgYW5hZ2x5cGhpYyByZW5kZXJpbmcgKGJh
c2VkIG9uIEdhbWVwYWRDYW1lcmEpCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9m
ZWF0dXJlcy9jYW1lcmFzI2FuYWdseXBoLWNhbWVyYXMKKyAqLwordmFyIEFuYWdseXBoR2FtZXBh
ZENhbWVyYSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShBbmFnbHlwaEdhbWVwYWRD
YW1lcmEsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBBbmFnbHlwaEdh
bWVwYWRDYW1lcmEKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIGNhbWVyYSBuYW1lCisgICAg
ICogQHBhcmFtIHBvc2l0aW9uIGRlZmluZXMgaW5pdGlhbCBwb3NpdGlvbgorICAgICAqIEBwYXJh
bSBpbnRlcmF4aWFsRGlzdGFuY2UgZGVmaW5lcyBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggY29sb3Ig
YXhpcworICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAg
ICovCisgICAgZnVuY3Rpb24gQW5hZ2x5cGhHYW1lcGFkQ2FtZXJhKG5hbWUsIHBvc2l0aW9uLCBp
bnRlcmF4aWFsRGlzdGFuY2UsIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5j
YWxsKHRoaXMsIG5hbWUsIHBvc2l0aW9uLCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMu
aW50ZXJheGlhbERpc3RhbmNlID0gaW50ZXJheGlhbERpc3RhbmNlOworICAgICAgICBfdGhpcy5z
ZXRDYW1lcmFSaWdNb2RlKF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJDYW1lcmEiXS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNfQU5BR0xZUEgsIHsgaW50ZXJheGlh
bERpc3RhbmNlOiBpbnRlcmF4aWFsRGlzdGFuY2UgfSk7CisgICAgICAgIHJldHVybiBfdGhpczsK
KyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBjYW1lcmEgY2xhc3MgbmFtZQorICAgICAqIEBy
ZXR1cm5zIEFuYWdseXBoR2FtZXBhZENhbWVyYQorICAgICAqLworICAgIEFuYWdseXBoR2FtZXBh
ZENhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gIkFuYWdseXBoR2FtZXBhZENhbWVyYSI7CisgICAgfTsKKyAgICByZXR1cm4gQW5hZ2x5
cGhHYW1lcGFkQ2FtZXJhOworfShfQ2FtZXJhc19nYW1lcGFkQ2FtZXJhX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkdhbWVwYWRDYW1lcmEiXSkpOworCisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL0NhbWVyYXMvU3RlcmVvc2NvcGljL2FuYWdseXBoVW5pdmVyc2FsQ2FtZXJhLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9TdGVyZW9zY29waWMvYW5hZ2x5cGhVbml2ZXJzYWxD
YW1lcmEudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuYWdseXBoVW5pdmVy
c2FsQ2FtZXJhICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuYWdseXBo
VW5pdmVyc2FsQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBbmFnbHlwaFVuaXZlcnNhbENh
bWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2Rl
X21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVyYSAqLyAiLi9DYW1lcmFzL2NhbWVyYS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX3VuaXZlcnNhbENhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vQ2FtZXJhcy91bml2ZXJzYWxDYW1lcmEgKi8gIi4vQ2FtZXJhcy91bml2ZXJzYWxDYW1lcmEu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9SaWdNb2Rlc19zdGVyZW9zY29waWNBbmFnbHlwaFJpZ01vZGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1Jp
Z01vZGVzL3N0ZXJlb3Njb3BpY0FuYWdseXBoUmlnTW9kZSAqLyAiLi9DYW1lcmFzL1JpZ01vZGVz
L3N0ZXJlb3Njb3BpY0FuYWdseXBoUmlnTW9kZS50cyIpOworCisKKworCisKKy8vIFNpZGUgZWZm
ZWN0IGltcG9ydCB0byBkZWZpbmUgdGhlIHN0ZXJlb3Njb3BpYyBtb2RlLgorCitfbm9kZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlIl0uQWRkTm9kZUNvbnN0cnVjdG9yKCJBbmFn
bHlwaFVuaXZlcnNhbENhbWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSwgb3B0aW9ucykgewor
ICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQW5hZ2x5cGhVbml2ZXJzYWxDYW1l
cmEobmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXS5aZXJvKCksIG9wdGlvbnMuaW50ZXJheGlhbF9kaXN0YW5jZSwgc2NlbmUpOyB9
OworfSk7CisvKioKKyAqIENhbWVyYSB1c2VkIHRvIHNpbXVsYXRlIGFuYWdseXBoaWMgcmVuZGVy
aW5nIChiYXNlZCBvbiBVbml2ZXJzYWxDYW1lcmEpCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxv
bmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI2FuYWdseXBoLWNhbWVyYXMKKyAqLwordmFyIEFuYWds
eXBoVW5pdmVyc2FsQ2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgewor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEFuYWds
eXBoVW5pdmVyc2FsQ2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBu
ZXcgQW5hZ2x5cGhVbml2ZXJzYWxDYW1lcmEKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIGNh
bWVyYSBuYW1lCisgICAgICogQHBhcmFtIHBvc2l0aW9uIGRlZmluZXMgaW5pdGlhbCBwb3NpdGlv
bgorICAgICAqIEBwYXJhbSBpbnRlcmF4aWFsRGlzdGFuY2UgZGVmaW5lcyBkaXN0YW5jZSBiZXR3
ZWVuIGVhY2ggY29sb3IgYXhpcworICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0
aW5nIHNjZW5lCisgICAgICovCisgICAgZnVuY3Rpb24gQW5hZ2x5cGhVbml2ZXJzYWxDYW1lcmEo
bmFtZSwgcG9zaXRpb24sIGludGVyYXhpYWxEaXN0YW5jZSwgc2NlbmUpIHsKKyAgICAgICAgdmFy
IF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgcG9zaXRpb24sIHNjZW5lKSB8fCB0aGlz
OworICAgICAgICBfdGhpcy5pbnRlcmF4aWFsRGlzdGFuY2UgPSBpbnRlcmF4aWFsRGlzdGFuY2U7
CisgICAgICAgIF90aGlzLnNldENhbWVyYVJpZ01vZGUoX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19BTkFH
TFlQSCwgeyBpbnRlcmF4aWFsRGlzdGFuY2U6IGludGVyYXhpYWxEaXN0YW5jZSB9KTsKKyAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIGNhbWVyYSBjbGFz
cyBuYW1lCisgICAgICogQHJldHVybnMgQW5hZ2x5cGhVbml2ZXJzYWxDYW1lcmEKKyAgICAgKi8K
KyAgICBBbmFnbHlwaFVuaXZlcnNhbENhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkFuYWdseXBoVW5pdmVyc2FsQ2FtZXJhIjsKKyAg
ICB9OworICAgIHJldHVybiBBbmFnbHlwaFVuaXZlcnNhbENhbWVyYTsKK30oX0NhbWVyYXNfdW5p
dmVyc2FsQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlVuaXZlcnNhbENhbWVy
YSJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMv
aW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9DYW1lcmFzL1N0ZXJlb3Njb3BpYy9pbmRleC50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
QW5hZ2x5cGhBcmNSb3RhdGVDYW1lcmEsIEFuYWdseXBoRnJlZUNhbWVyYSwgQW5hZ2x5cGhHYW1l
cGFkQ2FtZXJhLCBBbmFnbHlwaFVuaXZlcnNhbENhbWVyYSwgU3RlcmVvc2NvcGljQXJjUm90YXRl
Q2FtZXJhLCBTdGVyZW9zY29waWNGcmVlQ2FtZXJhLCBTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJh
LCBTdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9hbmFnbHlwaEFyY1JvdGF0ZUNhbWVyYV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hbmFnbHlwaEFyY1Jv
dGF0ZUNhbWVyYSAqLyAiLi9DYW1lcmFzL1N0ZXJlb3Njb3BpYy9hbmFnbHlwaEFyY1JvdGF0ZUNh
bWVyYS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmFnbHlwaEFyY1JvdGF0ZUNhbWVyYSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2FuYWdseXBoQXJjUm90YXRlQ2FtZXJhX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkFuYWdseXBoQXJjUm90YXRlQ2FtZXJhIl07IH0pOworCisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2FuYWdseXBoRnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hbmFnbHlwaEZyZWVDYW1lcmEg
Ki8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMvYW5hZ2x5cGhGcmVlQ2FtZXJhLnRzIik7CisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkFuYWdseXBoRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Fu
YWdseXBoRnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBbmFnbHlwaEZy
ZWVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5hZ2x5cGhHYW1l
cGFkQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2FuYWdseXBoR2FtZXBhZENhbWVyYSAqLyAiLi9DYW1lcmFzL1N0ZXJlb3Njb3Bp
Yy9hbmFnbHlwaEdhbWVwYWRDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5hZ2x5cGhH
YW1lcGFkQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYW5hZ2x5cGhHYW1lcGFkQ2FtZXJh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFuYWdseXBoR2FtZXBhZENhbWVyYSJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hbmFnbHlwaFVuaXZlcnNhbENhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9h
bmFnbHlwaFVuaXZlcnNhbENhbWVyYSAqLyAiLi9DYW1lcmFzL1N0ZXJlb3Njb3BpYy9hbmFnbHlw
aFVuaXZlcnNhbENhbWVyYS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmFnbHlwaFVuaXZlcnNh
bENhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FuYWdseXBoVW5pdmVyc2FsQ2FtZXJhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFuYWdseXBoVW5pdmVyc2FsQ2FtZXJhIl07IH0p
OworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3N0ZXJlb3Njb3BpY0FyY1JvdGF0ZUNhbWVy
YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9zdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMv
c3RlcmVvc2NvcGljQXJjUm90YXRlQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJl
b3Njb3BpY0FyY1JvdGF0ZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N0ZXJlb3Njb3Bp
Y0FyY1JvdGF0ZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTdGVyZW9zY29w
aWNBcmNSb3RhdGVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3Rl
cmVvc2NvcGljRnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9zdGVyZW9zY29waWNGcmVlQ2FtZXJhICovICIuL0NhbWVyYXMv
U3RlcmVvc2NvcGljL3N0ZXJlb3Njb3BpY0ZyZWVDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiU3RlcmVvc2NvcGljRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N0ZXJlb3Nj
b3BpY0ZyZWVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU3RlcmVvc2NvcGlj
RnJlZUNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdGVyZW9zY29w
aWNHYW1lcGFkQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL3N0ZXJlb3Njb3BpY0dhbWVwYWRDYW1lcmEgKi8gIi4vQ2FtZXJhcy9T
dGVyZW9zY29waWMvc3RlcmVvc2NvcGljR2FtZXBhZENhbWVyYS50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3Rl
cmVvc2NvcGljR2FtZXBhZENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTdGVy
ZW9zY29waWNHYW1lcGFkQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3N0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEg
Ki8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMvc3RlcmVvc2NvcGljVW5pdmVyc2FsQ2FtZXJhLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX3N0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfN19fWyJTdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEiXTsgfSk7CisKKwor
CisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvU3RlcmVvc2Nv
cGljL3N0ZXJlb3Njb3BpY0FyY1JvdGF0ZUNhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9DYW1lcmFzL1N0ZXJlb3Njb3BpYy9zdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTdGVyZW9zY29waWNBcmNSb3RhdGVD
YW1lcmEgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RlcmVvc2NvcGlj
QXJjUm90YXRlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdGVyZW9zY29waWNBcmNSb3Rh
dGVDYW1lcmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1lcmEgKi8gIi4vQ2FtZXJhcy9jYW1l
cmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19hcmNSb3RhdGVDYW1l
cmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL0NhbWVyYXMvYXJjUm90YXRlQ2FtZXJhICovICIuL0NhbWVyYXMvYXJjUm90YXRlQ2Ft
ZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlICovICIuL25vZGUudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfUmlnTW9kZXNfc3RlcmVvc2NvcGljUmlnTW9kZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmlnTW9k
ZXMvc3RlcmVvc2NvcGljUmlnTW9kZSAqLyAiLi9DYW1lcmFzL1JpZ01vZGVzL3N0ZXJlb3Njb3Bp
Y1JpZ01vZGUudHMiKTsKKworCisKKworCisvLyBTaWRlIGVmZmVjdCBpbXBvcnQgdG8gZGVmaW5l
IHRoZSBzdGVyZW9zY29waWMgbW9kZS4KKworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiU3RlcmVvc2NvcGljQXJjUm90YXRlQ2Ft
ZXJhIiwgZnVuY3Rpb24gKG5hbWUsIHNjZW5lLCBvcHRpb25zKSB7CisgICAgcmV0dXJuIGZ1bmN0
aW9uICgpIHsgcmV0dXJuIG5ldyBTdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEobmFtZSwgMCwg
MCwgMS4wLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdLlplcm8oKSwgb3B0aW9ucy5pbnRlcmF4aWFsX2Rpc3RhbmNlLCBvcHRpb25zLmlz
U3RlcmVvc2NvcGljU2lkZUJ5U2lkZSwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIENhbWVyYSB1
c2VkIHRvIHNpbXVsYXRlIHN0ZXJlb3Njb3BpYyByZW5kZXJpbmcgKGJhc2VkIG9uIEFyY1JvdGF0
ZUNhbWVyYSkKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL2NhbWVy
YXMKKyAqLwordmFyIFN0ZXJlb3Njb3BpY0FyY1JvdGF0ZUNhbWVyYSA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShTdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEsIF9zdXBlcik7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBTdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEK
KyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIGNhbWVyYSBuYW1lCisgICAgICogQHBhcmFtIGFs
cGhhIGRlZmluZXMgYWxwaGEgYW5nbGUgKGluIHJhZGlhbnMpCisgICAgICogQHBhcmFtIGJldGEg
ZGVmaW5lcyBiZXRhIGFuZ2xlIChpbiByYWRpYW5zKQorICAgICAqIEBwYXJhbSByYWRpdXMgZGVm
aW5lcyByYWRpdXMKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgY2FtZXJhIHRhcmdldAor
ICAgICAqIEBwYXJhbSBpbnRlcmF4aWFsRGlzdGFuY2UgZGVmaW5lcyBkaXN0YW5jZSBiZXR3ZWVu
IGVhY2ggY29sb3IgYXhpcworICAgICAqIEBwYXJhbSBpc1N0ZXJlb3Njb3BpY1NpZGVCeVNpZGUg
ZGVmaW5lcyBpcyBzdGVyZW9zY29waWMgaXMgZG9uZSBzaWRlIGJ5IHNpZGUgb3Igb3ZlciB1bmRl
cgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICov
CisgICAgZnVuY3Rpb24gU3RlcmVvc2NvcGljQXJjUm90YXRlQ2FtZXJhKG5hbWUsIGFscGhhLCBi
ZXRhLCByYWRpdXMsIHRhcmdldCwgaW50ZXJheGlhbERpc3RhbmNlLCBpc1N0ZXJlb3Njb3BpY1Np
ZGVCeVNpZGUsIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMs
IG5hbWUsIGFscGhhLCBiZXRhLCByYWRpdXMsIHRhcmdldCwgc2NlbmUpIHx8IHRoaXM7CisgICAg
ICAgIF90aGlzLmludGVyYXhpYWxEaXN0YW5jZSA9IGludGVyYXhpYWxEaXN0YW5jZTsKKyAgICAg
ICAgX3RoaXMuaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlID0gaXNTdGVyZW9zY29waWNTaWRlQnlT
aWRlOworICAgICAgICBfdGhpcy5zZXRDYW1lcmFSaWdNb2RlKGlzU3RlcmVvc2NvcGljU2lkZUJ5
U2lkZSA/IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDYW1l
cmEiXS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNfU0lERUJZU0lERV9QQVJBTExFTCA6IF9DYW1lcmFz
X2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDYW1lcmEiXS5SSUdfTU9ERV9T
VEVSRU9TQ09QSUNfT1ZFUlVOREVSLCB7IGludGVyYXhpYWxEaXN0YW5jZTogaW50ZXJheGlhbERp
c3RhbmNlIH0pOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAq
IEdldHMgY2FtZXJhIGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyBTdGVyZW9zY29waWNBcmNS
b3RhdGVDYW1lcmEKKyAgICAgKi8KKyAgICBTdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEucHJv
dG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJTdGVy
ZW9zY29waWNBcmNSb3RhdGVDYW1lcmEiOworICAgIH07CisgICAgcmV0dXJuIFN0ZXJlb3Njb3Bp
Y0FyY1JvdGF0ZUNhbWVyYTsKK30oX0NhbWVyYXNfYXJjUm90YXRlQ2FtZXJhX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIkFyY1JvdGF0ZUNhbWVyYSJdKSk7CisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMvc3RlcmVvc2NvcGljRnJlZUNhbWVyYS50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9TdGVyZW9zY29waWMvc3RlcmVvc2NvcGljRnJl
ZUNhbWVyYS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTdGVyZW9zY29waWNG
cmVlQ2FtZXJhICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Nj
b3BpY0ZyZWVDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN0ZXJlb3Njb3BpY0ZyZWVDYW1l
cmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9D
YW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1lcmEgKi8gIi4vQ2FtZXJhcy9jYW1lcmEudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19mcmVlQ2FtZXJhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1l
cmFzL2ZyZWVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9mcmVlQ2FtZXJhLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAq
LyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9u
b2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9ub2RlICovICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
UmlnTW9kZXNfc3RlcmVvc2NvcGljUmlnTW9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmlnTW9kZXMvc3RlcmVvc2NvcGljUmlnTW9k
ZSAqLyAiLi9DYW1lcmFzL1JpZ01vZGVzL3N0ZXJlb3Njb3BpY1JpZ01vZGUudHMiKTsKKworCisK
KworCisvLyBTaWRlIGVmZmVjdCBpbXBvcnQgdG8gZGVmaW5lIHRoZSBzdGVyZW9zY29waWMgbW9k
ZS4KKworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZSJdLkFkZE5vZGVD
b25zdHJ1Y3RvcigiU3RlcmVvc2NvcGljRnJlZUNhbWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2Vu
ZSwgb3B0aW9ucykgeworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3RlcmVv
c2NvcGljRnJlZUNhbWVyYShuYW1lLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKSwgb3B0aW9ucy5pbnRlcmF4aWFsX2Rpc3Rh
bmNlLCBvcHRpb25zLmlzU3RlcmVvc2NvcGljU2lkZUJ5U2lkZSwgc2NlbmUpOyB9OworfSk7Cisv
KioKKyAqIENhbWVyYSB1c2VkIHRvIHNpbXVsYXRlIHN0ZXJlb3Njb3BpYyByZW5kZXJpbmcgKGJh
c2VkIG9uIEZyZWVDYW1lcmEpCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0
dXJlcy9jYW1lcmFzCisgKi8KK3ZhciBTdGVyZW9zY29waWNGcmVlQ2FtZXJhID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKFN0ZXJlb3Njb3BpY0ZyZWVDYW1lcmEsIF9zdXBlcik7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBTdGVyZW9zY29waWNGcmVlQ2FtZXJhCisgICAg
ICogQHBhcmFtIG5hbWUgZGVmaW5lcyBjYW1lcmEgbmFtZQorICAgICAqIEBwYXJhbSBwb3NpdGlv
biBkZWZpbmVzIGluaXRpYWwgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gaW50ZXJheGlhbERpc3Rh
bmNlIGRlZmluZXMgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIGNvbG9yIGF4aXMKKyAgICAgKiBAcGFy
YW0gaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlIGRlZmluZXMgaXMgc3RlcmVvc2NvcGljIGlzIGRv
bmUgc2lkZSBieSBzaWRlIG9yIG92ZXIgdW5kZXIKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5l
cyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIFN0ZXJlb3Njb3BpY0Zy
ZWVDYW1lcmEobmFtZSwgcG9zaXRpb24sIGludGVyYXhpYWxEaXN0YW5jZSwgaXNTdGVyZW9zY29w
aWNTaWRlQnlTaWRlLCBzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0
aGlzLCBuYW1lLCBwb3NpdGlvbiwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmludGVy
YXhpYWxEaXN0YW5jZSA9IGludGVyYXhpYWxEaXN0YW5jZTsKKyAgICAgICAgX3RoaXMuaXNTdGVy
ZW9zY29waWNTaWRlQnlTaWRlID0gaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlOworICAgICAgICBf
dGhpcy5zZXRDYW1lcmFSaWdNb2RlKGlzU3RlcmVvc2NvcGljU2lkZUJ5U2lkZSA/IF9DYW1lcmFz
X2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDYW1lcmEiXS5SSUdfTU9ERV9T
VEVSRU9TQ09QSUNfU0lERUJZU0lERV9QQVJBTExFTCA6IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDYW1lcmEiXS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNfT1ZF
UlVOREVSLCB7IGludGVyYXhpYWxEaXN0YW5jZTogaW50ZXJheGlhbERpc3RhbmNlIH0pOworICAg
ICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgY2FtZXJhIGNs
YXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyBTdGVyZW9zY29waWNGcmVlQ2FtZXJhCisgICAgICov
CisgICAgU3RlcmVvc2NvcGljRnJlZUNhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlN0ZXJlb3Njb3BpY0ZyZWVDYW1lcmEiOworICAg
IH07CisgICAgcmV0dXJuIFN0ZXJlb3Njb3BpY0ZyZWVDYW1lcmE7Cit9KF9DYW1lcmFzX2ZyZWVD
YW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRnJlZUNhbWVyYSJdKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9TdGVyZW9zY29waWMvc3RlcmVvc2NvcGlj
R2FtZXBhZENhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9TdGVyZW9zY29w
aWMvc3RlcmVvc2NvcGljR2FtZXBhZENhbWVyYS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Njb3BpY0dhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFN0ZXJlb3Njb3BpY0dhbWVwYWRDYW1lcmE7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5q
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJh
cy9jYW1lcmEgKi8gIi4vQ2FtZXJhcy9jYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfQ2FtZXJhc19nYW1lcGFkQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2dhbWVwYWRDYW1lcmEgKi8g
Ii4vQ2FtZXJhcy9nYW1lcGFkQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRo
LnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlICov
ICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUmlnTW9kZXNfc3RlcmVv
c2NvcGljUmlnTW9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vUmlnTW9kZXMvc3RlcmVvc2NvcGljUmlnTW9kZSAqLyAiLi9DYW1lcmFz
L1JpZ01vZGVzL3N0ZXJlb3Njb3BpY1JpZ01vZGUudHMiKTsKKworCisKKworCisvLyBTaWRlIGVm
ZmVjdCBpbXBvcnQgdG8gZGVmaW5lIHRoZSBzdGVyZW9zY29waWMgbW9kZS4KKworX25vZGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiU3Rl
cmVvc2NvcGljR2FtZXBhZENhbWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSwgb3B0aW9ucykg
eworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3RlcmVvc2NvcGljR2FtZXBh
ZENhbWVyYShuYW1lLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVjdG9yMyJdLlplcm8oKSwgb3B0aW9ucy5pbnRlcmF4aWFsX2Rpc3RhbmNlLCBvcHRp
b25zLmlzU3RlcmVvc2NvcGljU2lkZUJ5U2lkZSwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIENh
bWVyYSB1c2VkIHRvIHNpbXVsYXRlIHN0ZXJlb3Njb3BpYyByZW5kZXJpbmcgKGJhc2VkIG9uIEdh
bWVwYWRDYW1lcmEpCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9j
YW1lcmFzCisgKi8KK3ZhciBTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZXh0ZW5kcyJdKFN0ZXJlb3Njb3BpY0dhbWVwYWRDYW1lcmEsIF9zdXBlcik7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhCisg
ICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyBjYW1lcmEgbmFtZQorICAgICAqIEBwYXJhbSBwb3Np
dGlvbiBkZWZpbmVzIGluaXRpYWwgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gaW50ZXJheGlhbERp
c3RhbmNlIGRlZmluZXMgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIGNvbG9yIGF4aXMKKyAgICAgKiBA
cGFyYW0gaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlIGRlZmluZXMgaXMgc3RlcmVvc2NvcGljIGlz
IGRvbmUgc2lkZSBieSBzaWRlIG9yIG92ZXIgdW5kZXIKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVm
aW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIFN0ZXJlb3Njb3Bp
Y0dhbWVwYWRDYW1lcmEobmFtZSwgcG9zaXRpb24sIGludGVyYXhpYWxEaXN0YW5jZSwgaXNTdGVy
ZW9zY29waWNTaWRlQnlTaWRlLCBzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIu
Y2FsbCh0aGlzLCBuYW1lLCBwb3NpdGlvbiwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlz
LmludGVyYXhpYWxEaXN0YW5jZSA9IGludGVyYXhpYWxEaXN0YW5jZTsKKyAgICAgICAgX3RoaXMu
aXNTdGVyZW9zY29waWNTaWRlQnlTaWRlID0gaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlOworICAg
ICAgICBfdGhpcy5zZXRDYW1lcmFSaWdNb2RlKGlzU3RlcmVvc2NvcGljU2lkZUJ5U2lkZSA/IF9D
YW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDYW1lcmEiXS5SSUdf
TU9ERV9TVEVSRU9TQ09QSUNfU0lERUJZU0lERV9QQVJBTExFTCA6IF9DYW1lcmFzX2NhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDYW1lcmEiXS5SSUdfTU9ERV9TVEVSRU9TQ09Q
SUNfT1ZFUlVOREVSLCB7IGludGVyYXhpYWxEaXN0YW5jZTogaW50ZXJheGlhbERpc3RhbmNlIH0p
OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgY2Ft
ZXJhIGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyBTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJh
CisgICAgICovCisgICAgU3RlcmVvc2NvcGljR2FtZXBhZENhbWVyYS5wcm90b3R5cGUuZ2V0Q2xh
c3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlN0ZXJlb3Njb3BpY0dhbWVw
YWRDYW1lcmEiOworICAgIH07CisgICAgcmV0dXJuIFN0ZXJlb3Njb3BpY0dhbWVwYWRDYW1lcmE7
Cit9KF9DYW1lcmFzX2dhbWVwYWRDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
R2FtZXBhZENhbWVyYSJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9T
dGVyZW9zY29waWMvc3RlcmVvc2NvcGljVW5pdmVyc2FsQ2FtZXJhLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL0NhbWVyYXMvU3RlcmVvc2NvcGljL3N0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVy
YS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN0ZXJlb3Njb3BpY1Vu
aXZlcnNhbENhbWVyYSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGVy
ZW9zY29waWNVbml2ZXJzYWxDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN0ZXJlb3Njb3Bp
Y1VuaXZlcnNhbENhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGli
ICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVyYSAqLyAiLi9DYW1l
cmFzL2NhbWVyYS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX3VuaXZl
cnNhbENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vQ2FtZXJhcy91bml2ZXJzYWxDYW1lcmEgKi8gIi4vQ2FtZXJhcy91bml2
ZXJzYWxDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGUgKi8gIi4vbm9kZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9SaWdNb2Rlc19zdGVyZW9zY29waWNSaWdNb2Rl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9SaWdNb2Rlcy9zdGVyZW9zY29waWNSaWdNb2RlICovICIuL0NhbWVyYXMvUmlnTW9kZXMvc3Rl
cmVvc2NvcGljUmlnTW9kZS50cyIpOworCisKKworCisKKy8vIFNpZGUgZWZmZWN0IGltcG9ydCB0
byBkZWZpbmUgdGhlIHN0ZXJlb3Njb3BpYyBtb2RlLgorCitfbm9kZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJOb2RlIl0uQWRkTm9kZUNvbnN0cnVjdG9yKCJTdGVyZW9zY29waWNGcmVl
Q2FtZXJhIiwgZnVuY3Rpb24gKG5hbWUsIHNjZW5lLCBvcHRpb25zKSB7CisgICAgcmV0dXJuIGZ1
bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEobmFtZSwg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMi
XS5aZXJvKCksIG9wdGlvbnMuaW50ZXJheGlhbF9kaXN0YW5jZSwgb3B0aW9ucy5pc1N0ZXJlb3Nj
b3BpY1NpZGVCeVNpZGUsIHNjZW5lKTsgfTsKK30pOworLyoqCisgKiBDYW1lcmEgdXNlZCB0byBz
aW11bGF0ZSBzdGVyZW9zY29waWMgcmVuZGVyaW5nIChiYXNlZCBvbiBVbml2ZXJzYWxDYW1lcmEp
CisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzCisgKi8K
K3ZhciBTdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19l
eHRlbmRzIl0oU3RlcmVvc2NvcGljVW5pdmVyc2FsQ2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgYSBuZXcgU3RlcmVvc2NvcGljVW5pdmVyc2FsQ2FtZXJhCisgICAgICog
QHBhcmFtIG5hbWUgZGVmaW5lcyBjYW1lcmEgbmFtZQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBk
ZWZpbmVzIGluaXRpYWwgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gaW50ZXJheGlhbERpc3RhbmNl
IGRlZmluZXMgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIGNvbG9yIGF4aXMKKyAgICAgKiBAcGFyYW0g
aXNTdGVyZW9zY29waWNTaWRlQnlTaWRlIGRlZmluZXMgaXMgc3RlcmVvc2NvcGljIGlzIGRvbmUg
c2lkZSBieSBzaWRlIG9yIG92ZXIgdW5kZXIKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0
aGUgaG9zdGluZyBzY2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIFN0ZXJlb3Njb3BpY1VuaXZl
cnNhbENhbWVyYShuYW1lLCBwb3NpdGlvbiwgaW50ZXJheGlhbERpc3RhbmNlLCBpc1N0ZXJlb3Nj
b3BpY1NpZGVCeVNpZGUsIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxs
KHRoaXMsIG5hbWUsIHBvc2l0aW9uLCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuaW50
ZXJheGlhbERpc3RhbmNlID0gaW50ZXJheGlhbERpc3RhbmNlOworICAgICAgICBfdGhpcy5pc1N0
ZXJlb3Njb3BpY1NpZGVCeVNpZGUgPSBpc1N0ZXJlb3Njb3BpY1NpZGVCeVNpZGU7CisgICAgICAg
IF90aGlzLnNldENhbWVyYVJpZ01vZGUoaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlID8gX0NhbWVy
YXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNhbWVyYSJdLlJJR19NT0RF
X1NURVJFT1NDT1BJQ19TSURFQllTSURFX1BBUkFMTEVMIDogX0NhbWVyYXNfY2FtZXJhX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19P
VkVSVU5ERVIsIHsgaW50ZXJheGlhbERpc3RhbmNlOiBpbnRlcmF4aWFsRGlzdGFuY2UgfSk7Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBjYW1lcmEg
Y2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIFN0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYQor
ICAgICAqLworICAgIFN0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYS5wcm90b3R5cGUuZ2V0Q2xh
c3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlN0ZXJlb3Njb3BpY1VuaXZl
cnNhbENhbWVyYSI7CisgICAgfTsKKyAgICByZXR1cm4gU3RlcmVvc2NvcGljVW5pdmVyc2FsQ2Ft
ZXJhOworfShfQ2FtZXJhc191bml2ZXJzYWxDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVW5pdmVyc2FsQ2FtZXJhIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9D
YW1lcmFzL1ZSL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9DYW1lcmFzL1ZSL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFZSQ2FtZXJhTWV0cmljcywgVlJE
ZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYSwgVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVD
YW1lcmEsIFZSRGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhLCBPbkFmdGVyRW50ZXJpbmdW
Uk9ic2VydmFibGVFdmVudCwgVlJFeHBlcmllbmNlSGVscGVyLCBXZWJWUkZyZWVDYW1lcmEgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92ckNhbWVyYU1ldHJp
Y3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vdnJDYW1lcmFNZXRyaWNzICovICIuL0NhbWVyYXMvVlIvdnJDYW1lcmFNZXRyaWNzLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlZSQ2FtZXJhTWV0cmljcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X3ZyQ2FtZXJhTWV0cmljc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWUkNhbWVyYU1l
dHJpY3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnJEZXZpY2VPcmllbnRh
dGlvbkFyY1JvdGF0ZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi92ckRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhICov
ICIuL0NhbWVyYXMvVlIvdnJEZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYS50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJWUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfdnJEZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2Ft
ZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZyRGV2aWNlT3JpZW50YXRp
b25GcmVlQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3ZyRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhICovICIuL0NhbWVyYXMv
VlIvdnJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
VlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92ckRl
dmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJW
UkRldmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF92ckRldmljZU9yaWVudGF0aW9uR2FtZXBhZENhbWVyYV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi92ckRldmljZU9yaWVudGF0
aW9uR2FtZXBhZENhbWVyYSAqLyAiLi9DYW1lcmFzL1ZSL3ZyRGV2aWNlT3JpZW50YXRpb25HYW1l
cGFkQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGV2aWNlT3JpZW50YXRpb25HYW1l
cGFkQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnJEZXZpY2VPcmllbnRhdGlvbkdhbWVw
YWRDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVlJEZXZpY2VPcmllbnRhdGlv
bkdhbWVwYWRDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdnJFeHBl
cmllbmNlSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3ZyRXhwZXJpZW5jZUhlbHBlciAqLyAiLi9DYW1lcmFzL1ZSL3ZyRXhwZXJp
ZW5jZUhlbHBlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPbkFmdGVyRW50ZXJpbmdWUk9ic2Vy
dmFibGVFdmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3ZyRXhwZXJpZW5jZUhlbHBlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJPbkFmdGVyRW50ZXJpbmdWUk9ic2VydmFibGVFdmVu
dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWUkV4cGVyaWVuY2VIZWxwZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF92ckV4cGVyaWVuY2VIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siVlJFeHBlcmllbmNlSGVscGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3dlYlZSQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL3dlYlZSQ2FtZXJhICovICIuL0NhbWVyYXMvVlIvd2ViVlJDYW1lcmEu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViVlJGcmVlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfd2ViVlJDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siV2ViVlJGcmVl
Q2FtZXJhIl07IH0pOworCisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0Nh
bWVyYXMvVlIvdnJDYW1lcmFNZXRyaWNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9WUi92ckNhbWVyYU1ldHJpY3Mu
dHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFZSQ2FtZXJhTWV0cmljcyAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJWUkNhbWVyYU1ldHJpY3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFZS
Q2FtZXJhTWV0cmljczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIp
OworCisvKioKKyAqIFRoaXMgcmVwcmVzZW50cyBhbGwgdGhlIHJlcXVpcmVkIG1ldHJpY3MgdG8g
Y3JlYXRlIGEgVlIgY2FtZXJhLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFi
eWxvbjEwMS9jYW1lcmFzI2RldmljZS1vcmllbnRhdGlvbi1jYW1lcmEKKyAqLwordmFyIFZSQ2Ft
ZXJhTWV0cmljcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBW
UkNhbWVyYU1ldHJpY3MoKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgaWYgdGhl
IGN1cnJlbnQgdnIgY2FtZXJhIHNob3VsZCBjb21wZW5zYXRlIHRoZSBkaXN0b3J0aW9uIG9mIHRo
ZSBsZW5zZSBvciBub3QuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNvbXBlbnNhdGVEaXN0
b3J0aW9uID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaWYgbXVsdGl2
aWV3IHNob3VsZCBiZSBlbmFibGVkIHdoZW4gcmVuZGVyaW5nIChEZWZhdWx0OiBmYWxzZSkKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMubXVsdGl2aWV3RW5hYmxlZCA9IGZhbHNlOworICAgIH0K
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVlJDYW1lcmFNZXRyaWNzLnByb3RvdHlwZSwgImFz
cGVjdFJhdGlvIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgcmVuZGVyaW5n
IGFzcGVjdCByYXRpbyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcmVzb2x1dGlvbnMuCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LmhSZXNvbHV0aW9uIC8gKDIgKiB0aGlzLnZSZXNvbHV0aW9uKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZSQ2FtZXJhTWV0cmljcy5wcm90b3R5cGUsICJh
c3BlY3RSYXRpb0ZvdiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGFzcGVj
dCByYXRpbyBiYXNlZCBvbiB0aGUgRk9WLCBzY2FsZSBmYWN0b3JzLCBhbmQgcmVhbCBzY3JlZW4g
c2l6ZXMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiAoMiAqIE1hdGguYXRhbigodGhpcy5wb3N0UHJvY2Vzc1NjYWxlRmFjdG9yICog
dGhpcy52U2NyZWVuU2l6ZSkgLyAoMiAqIHRoaXMuZXllVG9TY3JlZW5EaXN0YW5jZSkpKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZSQ2FtZXJhTWV0cmlj
cy5wcm90b3R5cGUsICJsZWZ0SE1hdHJpeCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBo
aWRkZW4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgdmFyIG1ldGVycyA9ICh0aGlzLmhTY3JlZW5TaXplIC8gNCkgLSAodGhpcy5sZW5zU2VwYXJh
dGlvbkRpc3RhbmNlIC8gMik7CisgICAgICAgICAgICB2YXIgaCA9ICg0ICogbWV0ZXJzKSAvIHRo
aXMuaFNjcmVlblNpemU7CisgICAgICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlRyYW5zbGF0aW9uKGgsIDAsIDAp
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVlJDYW1lcmFN
ZXRyaWNzLnByb3RvdHlwZSwgInJpZ2h0SE1hdHJpeCIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEBoaWRkZW4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgdmFyIG1ldGVycyA9ICh0aGlzLmhTY3JlZW5TaXplIC8gNCkgLSAodGhpcy5sZW5z
U2VwYXJhdGlvbkRpc3RhbmNlIC8gMik7CisgICAgICAgICAgICB2YXIgaCA9ICg0ICogbWV0ZXJz
KSAvIHRoaXMuaFNjcmVlblNpemU7CisgICAgICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlRyYW5zbGF0aW9uKC1o
LCAwLCAwKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZS
Q2FtZXJhTWV0cmljcy5wcm90b3R5cGUsICJsZWZ0UHJlVmlld01hdHJpeCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5UcmFuc2xhdGlvbigwLjUgKiB0aGlzLmludGVy
cHVwaWxsYXJ5RGlzdGFuY2UsIDAsIDApOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoVlJDYW1lcmFNZXRyaWNzLnByb3RvdHlwZSwgInJpZ2h0UHJlVmlld01h
dHJpeCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5UcmFuc2xhdGlv
bigtMC41ICogdGhpcy5pbnRlcnB1cGlsbGFyeURpc3RhbmNlLCAwLCAwKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLyoqCisgICAgICogR2V0IHRoZSBkZWZhdWx0IFZSTWV0cmljcyBiYXNlZCBv
biB0aGUgbW9zdCBnZW5lcmljIHNldHVwLgorICAgICAqIEByZXR1cm5zIHRoZSBkZWZhdWx0IHZy
IG1ldHJpY3MKKyAgICAgKi8KKyAgICBWUkNhbWVyYU1ldHJpY3MuR2V0RGVmYXVsdCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBWUkNhbWVyYU1ldHJpY3MoKTsKKyAg
ICAgICAgcmVzdWx0LmhSZXNvbHV0aW9uID0gMTI4MDsKKyAgICAgICAgcmVzdWx0LnZSZXNvbHV0
aW9uID0gODAwOworICAgICAgICByZXN1bHQuaFNjcmVlblNpemUgPSAwLjE0OTc1OTk5MzsKKyAg
ICAgICAgcmVzdWx0LnZTY3JlZW5TaXplID0gMC4wOTM1OTk5OTc1OworICAgICAgICByZXN1bHQu
dlNjcmVlbkNlbnRlciA9IDAuMDQ2Nzk5OTk4NzsKKyAgICAgICAgcmVzdWx0LmV5ZVRvU2NyZWVu
RGlzdGFuY2UgPSAwLjA0MTAwMDAwMTE7CisgICAgICAgIHJlc3VsdC5sZW5zU2VwYXJhdGlvbkRp
c3RhbmNlID0gMC4wNjM1MDAwMDIwOworICAgICAgICByZXN1bHQuaW50ZXJwdXBpbGxhcnlEaXN0
YW5jZSA9IDAuMDY0MDAwMDAzMDsKKyAgICAgICAgcmVzdWx0LmRpc3RvcnRpb25LID0gWzEuMCwg
MC4yMTk5OTk5OTksIDAuMjM5OTk5OTk1LCAwLjBdOworICAgICAgICByZXN1bHQuY2hyb21hQWJD
b3JyZWN0aW9uID0gWzAuOTk1OTk5OTkyLCAtMC4wMDQwMDAwMDAxOSwgMS4wMTQwMDAwNiwgMC4w
XTsKKyAgICAgICAgcmVzdWx0LnBvc3RQcm9jZXNzU2NhbGVGYWN0b3IgPSAxLjcxNDYwNTUwNzgw
ODQxMjsKKyAgICAgICAgcmVzdWx0LmxlbnNDZW50ZXJPZmZzZXQgPSAwLjE1MTk3NjQyMTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIHJldHVybiBWUkNhbWVyYU1ldHJpY3M7
Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvVlIvdnJEZXZpY2VP
cmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFz
L1ZSL3ZyRGV2aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmEudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBWUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGV2aWNlT3JpZW50YXRpb25B
cmNSb3RhdGVDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFZSRGV2aWNlT3JpZW50YXRpb25B
cmNSb3RhdGVDYW1lcmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9jYW1lcmEgKi8gIi4vQ2FtZXJh
cy9jYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19hcmNSb3Rh
dGVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uLy4uL0NhbWVyYXMvYXJjUm90YXRlQ2FtZXJhICovICIuL0NhbWVyYXMvYXJjUm90
YXRlQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZyQ2FtZXJhTWV0cmlj
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li92ckNhbWVyYU1ldHJpY3MgKi8gIi4vQ2FtZXJhcy9WUi92ckNhbWVyYU1ldHJpY3MudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21h
dGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9JbnB1dHNfYXJjUm90YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9JbnB1dHMvYXJjUm90YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0ICovICIuL0Nh
bWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3JpZW50YXRpb25JbnB1dC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9SaWdNb2Rlc192clJpZ01vZGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1JpZ01vZGVz
L3ZyUmlnTW9kZSAqLyAiLi9DYW1lcmFzL1JpZ01vZGVzL3ZyUmlnTW9kZS50cyIpOworCisKKwor
CisKKworCisvLyBTaWRlIGVmZmVjdCBpbXBvcnQgdG8gZGVmaW5lIHRoZSBzdGVyZW9zY29waWMg
bW9kZS4KKworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTm9kZSJdLkFkZE5v
ZGVDb25zdHJ1Y3RvcigiVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEiLCBmdW5jdGlvbiAo
bmFtZSwgc2NlbmUpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFZSRGV2
aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmEobmFtZSwgMCwgMCwgMS4wLCBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdLlplcm8oKSwg
c2NlbmUpOyB9OworfSk7CisvKioKKyAqIENhbWVyYSB1c2VkIHRvIHNpbXVsYXRlIFZSIHJlbmRl
cmluZyAoYmFzZWQgb24gQXJjUm90YXRlQ2FtZXJhKQorICogQHNlZSBodHRwOi8vZG9jLmJhYnls
b25qcy5jb20vYmFieWxvbjEwMS9jYW1lcmFzI3ZyLWRldmljZS1vcmllbnRhdGlvbi1jYW1lcmFz
CisgKi8KK3ZhciBWUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKFZSRGV2aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmEs
IF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBWUkRldmljZU9yaWVudGF0
aW9uQXJjUm90YXRlQ2FtZXJhCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyBjYW1lcmEgbmFt
ZQorICAgICAqIEBwYXJhbSBhbHBoYSBkZWZpbmVzIHRoZSBjYW1lcmEgcm90YXRpb24gYWxvbmcg
dGhlIGxvZ2l0dWRpbmFsIGF4aXMKKyAgICAgKiBAcGFyYW0gYmV0YSBkZWZpbmVzIHRoZSBjYW1l
cmEgcm90YXRpb24gYWxvbmcgdGhlIGxhdGl0dWRpbmFsIGF4aXMKKyAgICAgKiBAcGFyYW0gcmFk
aXVzIGRlZmluZXMgdGhlIGNhbWVyYSBkaXN0YW5jZSBmcm9tIGl0cyB0YXJnZXQKKyAgICAgKiBA
cGFyYW0gdGFyZ2V0IGRlZmluZXMgdGhlIGNhbWVyYSB0YXJnZXQKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgZGVmaW5lcyB0aGUgc2NlbmUgdGhlIGNhbWVyYSBiZWxvbmdzIHRvCisgICAgICogQHBhcmFt
IGNvbXBlbnNhdGVEaXN0b3J0aW9uIGRlZmluZXMgaWYgdGhlIGNhbWVyYSBuZWVkcyB0byBjb21w
ZW5zYXRlIHRoZSBsZW5zIGRpc3RvcnNpb24KKyAgICAgKiBAcGFyYW0gdnJDYW1lcmFNZXRyaWNz
IGRlZmluZXMgdGhlIHZyIG1ldHJpY3MgYXNzb2NpYXRlZCB0byB0aGUgY2FtZXJhCisgICAgICov
CisgICAgZnVuY3Rpb24gVlJEZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYShuYW1lLCBh
bHBoYSwgYmV0YSwgcmFkaXVzLCB0YXJnZXQsIHNjZW5lLCBjb21wZW5zYXRlRGlzdG9ydGlvbiwg
dnJDYW1lcmFNZXRyaWNzKSB7CisgICAgICAgIGlmIChjb21wZW5zYXRlRGlzdG9ydGlvbiA9PT0g
dm9pZCAwKSB7IGNvbXBlbnNhdGVEaXN0b3J0aW9uID0gdHJ1ZTsgfQorICAgICAgICBpZiAodnJD
YW1lcmFNZXRyaWNzID09PSB2b2lkIDApIHsgdnJDYW1lcmFNZXRyaWNzID0gX3ZyQ2FtZXJhTWV0
cmljc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWUkNhbWVyYU1ldHJpY3MiXS5HZXRE
ZWZhdWx0KCk7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwg
YWxwaGEsIGJldGEsIHJhZGl1cywgdGFyZ2V0LCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgdnJD
YW1lcmFNZXRyaWNzLmNvbXBlbnNhdGVEaXN0b3J0aW9uID0gY29tcGVuc2F0ZURpc3RvcnRpb247
CisgICAgICAgIF90aGlzLnNldENhbWVyYVJpZ01vZGUoX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkNhbWVyYSJdLlJJR19NT0RFX1ZSLCB7IHZyQ2FtZXJhTWV0
cmljczogdnJDYW1lcmFNZXRyaWNzIH0pOworICAgICAgICBfdGhpcy5pbnB1dHMuYWRkVlJEZXZp
Y2VPcmllbnRhdGlvbigpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgor
ICAgICAqIEdldHMgY2FtZXJhIGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyBWUkRldmljZU9y
aWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhCisgICAgICovCisgICAgVlJEZXZpY2VPcmllbnRhdGlv
bkFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gIlZSRGV2aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmEiOworICAg
IH07CisgICAgcmV0dXJuIFZSRGV2aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmE7Cit9KF9D
YW1lcmFzX2FyY1JvdGF0ZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBcmNS
b3RhdGVDYW1lcmEiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvVlIv
dnJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMv
VlIvdnJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90
c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL0NhbWVyYXMvY2FtZXJhICovICIuL0NhbWVyYXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfZGV2aWNlT3JpZW50YXRpb25DYW1lcmFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVy
YXMvZGV2aWNlT3JpZW50YXRpb25DYW1lcmEgKi8gIi4vQ2FtZXJhcy9kZXZpY2VPcmllbnRhdGlv
bkNhbWVyYS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92ckNhbWVyYU1ldHJpY3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
dnJDYW1lcmFNZXRyaWNzICovICIuL0NhbWVyYXMvVlIvdnJDYW1lcmFNZXRyaWNzLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRo
LnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9ub2RlICovICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfUmlnTW9kZXNfdnJSaWdNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9SaWdNb2Rlcy92clJpZ01vZGUgKi8gIi4vQ2Ft
ZXJhcy9SaWdNb2Rlcy92clJpZ01vZGUudHMiKTsKKworCisKKworCisKKy8vIFNpZGUgZWZmZWN0
IGltcG9ydCB0byBkZWZpbmUgdGhlIHN0ZXJlb3Njb3BpYyBtb2RlLgorCitfbm9kZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJOb2RlIl0uQWRkTm9kZUNvbnN0cnVjdG9yKCJWUkRldmlj
ZU9yaWVudGF0aW9uRnJlZUNhbWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSkgeworICAgIHJl
dHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1l
cmEobmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKTsgfTsKK30pOworLyoqCisgKiBDYW1lcmEgdXNlZCB0
byBzaW11bGF0ZSBWUiByZW5kZXJpbmcgKGJhc2VkIG9uIEZyZWVDYW1lcmEpCisgKiBAc2VlIGh0
dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2NhbWVyYXMjdnItZGV2aWNlLW9yaWVu
dGF0aW9uLWNhbWVyYXMKKyAqLwordmFyIFZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2Ft
ZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgVlJEZXZpY2VPcmll
bnRhdGlvbkZyZWVDYW1lcmEKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIGNhbWVyYSBuYW1l
CisgICAgICogQHBhcmFtIHBvc2l0aW9uIGRlZmluZXMgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRo
ZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgdGhlIGNhbWVy
YSBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGNvbXBlbnNhdGVEaXN0b3J0aW9uIGRlZmluZXMg
aWYgdGhlIGNhbWVyYSBuZWVkcyB0byBjb21wZW5zYXRlIHRoZSBsZW5zIGRpc3RvcnNpb24KKyAg
ICAgKiBAcGFyYW0gdnJDYW1lcmFNZXRyaWNzIGRlZmluZXMgdGhlIHZyIG1ldHJpY3MgYXNzb2Np
YXRlZCB0byB0aGUgY2FtZXJhCisgICAgICovCisgICAgZnVuY3Rpb24gVlJEZXZpY2VPcmllbnRh
dGlvbkZyZWVDYW1lcmEobmFtZSwgcG9zaXRpb24sIHNjZW5lLCBjb21wZW5zYXRlRGlzdG9ydGlv
biwgdnJDYW1lcmFNZXRyaWNzKSB7CisgICAgICAgIGlmIChjb21wZW5zYXRlRGlzdG9ydGlvbiA9
PT0gdm9pZCAwKSB7IGNvbXBlbnNhdGVEaXN0b3J0aW9uID0gdHJ1ZTsgfQorICAgICAgICBpZiAo
dnJDYW1lcmFNZXRyaWNzID09PSB2b2lkIDApIHsgdnJDYW1lcmFNZXRyaWNzID0gX3ZyQ2FtZXJh
TWV0cmljc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWUkNhbWVyYU1ldHJpY3MiXS5H
ZXREZWZhdWx0KCk7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFt
ZSwgcG9zaXRpb24sIHNjZW5lKSB8fCB0aGlzOworICAgICAgICB2ckNhbWVyYU1ldHJpY3MuY29t
cGVuc2F0ZURpc3RvcnRpb24gPSBjb21wZW5zYXRlRGlzdG9ydGlvbjsKKyAgICAgICAgX3RoaXMu
c2V0Q2FtZXJhUmlnTW9kZShfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siQ2FtZXJhIl0uUklHX01PREVfVlIsIHsgdnJDYW1lcmFNZXRyaWNzOiB2ckNhbWVyYU1l
dHJpY3MgfSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICog
R2V0cyBjYW1lcmEgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIFZSRGV2aWNlT3JpZW50YXRp
b25GcmVlQ2FtZXJhCisgICAgICovCisgICAgVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEu
cHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJW
UkRldmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYSI7CisgICAgfTsKKyAgICByZXR1cm4gVlJEZXZp
Y2VPcmllbnRhdGlvbkZyZWVDYW1lcmE7Cit9KF9DYW1lcmFzX2RldmljZU9yaWVudGF0aW9uQ2Ft
ZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkRldmljZU9yaWVudGF0aW9uQ2FtZXJh
Il0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL1ZSL3ZyRGV2aWNlT3Jp
ZW50YXRpb25HYW1lcGFkQ2FtZXJhLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL1ZSL3Zy
RGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IFZSRGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJh
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBWUkRldmljZU9yaWVudGF0aW9uR2FtZXBhZENhbWVyYTsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVs
ZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZyRGV2
aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZyRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhICov
ICIuL0NhbWVyYXMvVlIvdnJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfdnJDYW1lcmFNZXRyaWNzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZyQ2FtZXJhTWV0cmljcyAqLyAi
Li9DYW1lcmFzL1ZSL3ZyQ2FtZXJhTWV0cmljcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMv
bWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9k
ZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0dhbWVwYWRzX2dh
bWVwYWRTY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vR2FtZXBhZHMvZ2FtZXBhZFNjZW5lQ29tcG9uZW50ICov
ICIuL0dhbWVwYWRzL2dhbWVwYWRTY2VuZUNvbXBvbmVudC50cyIpOworCisKKworCisKKworX25v
ZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3Rv
cigiVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbiAobmFtZSwgc2Nl
bmUpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFZSRGV2aWNlT3JpZW50
YXRpb25HYW1lcGFkQ2FtZXJhKG5hbWUsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpLCBzY2VuZSk7IH07Cit9KTsKKy8qKgor
ICogQ2FtZXJhIHVzZWQgdG8gc2ltdWxhdGUgVlIgcmVuZGVyaW5nIChiYXNlZCBvbiBWUkRldmlj
ZU9yaWVudGF0aW9uRnJlZUNhbWVyYSkKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2JhYnlsb24xMDEvY2FtZXJhcyN2ci1kZXZpY2Utb3JpZW50YXRpb24tY2FtZXJhcworICovCit2
YXIgVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEsIF9zdXBlcik7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBWUkRldmljZU9yaWVudGF0aW9uR2FtZXBhZENh
bWVyYQorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgY2FtZXJhIG5hbWUKKyAgICAgKiBAcGFy
YW0gcG9zaXRpb24gZGVmaW5lcyB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNhbWVyYQorICAg
ICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGUgY2FtZXJhIGJlbG9uZ3MgdG8K
KyAgICAgKiBAcGFyYW0gY29tcGVuc2F0ZURpc3RvcnRpb24gZGVmaW5lcyBpZiB0aGUgY2FtZXJh
IG5lZWRzIHRvIGNvbXBlbnNhdGUgdGhlIGxlbnMgZGlzdG9yc2lvbgorICAgICAqIEBwYXJhbSB2
ckNhbWVyYU1ldHJpY3MgZGVmaW5lcyB0aGUgdnIgbWV0cmljcyBhc3NvY2lhdGVkIHRvIHRoZSBj
YW1lcmEKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBWUkRldmljZU9yaWVudGF0aW9uR2FtZXBhZENh
bWVyYShuYW1lLCBwb3NpdGlvbiwgc2NlbmUsIGNvbXBlbnNhdGVEaXN0b3J0aW9uLCB2ckNhbWVy
YU1ldHJpY3MpIHsKKyAgICAgICAgaWYgKGNvbXBlbnNhdGVEaXN0b3J0aW9uID09PSB2b2lkIDAp
IHsgY29tcGVuc2F0ZURpc3RvcnRpb24gPSB0cnVlOyB9CisgICAgICAgIGlmICh2ckNhbWVyYU1l
dHJpY3MgPT09IHZvaWQgMCkgeyB2ckNhbWVyYU1ldHJpY3MgPSBfdnJDYW1lcmFNZXRyaWNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZSQ2FtZXJhTWV0cmljcyJdLkdldERlZmF1bHQo
KTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBwb3NpdGlv
biwgc2NlbmUsIGNvbXBlbnNhdGVEaXN0b3J0aW9uLCB2ckNhbWVyYU1ldHJpY3MpIHx8IHRoaXM7
CisgICAgICAgIF90aGlzLmlucHV0cy5hZGRHYW1lcGFkKCk7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBjYW1lcmEgY2xhc3MgbmFtZQorICAgICAq
IEByZXR1cm5zIFZSRGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhCisgICAgICovCisgICAg
VlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEucHJvdG90eXBlLmdldENsYXNzTmFtZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJWUkRldmljZU9yaWVudGF0aW9uR2FtZXBh
ZENhbWVyYSI7CisgICAgfTsKKyAgICByZXR1cm4gVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRD
YW1lcmE7Cit9KF92ckRldmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWUkRldmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYSJdKSk7CisKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9WUi92ckV4cGVyaWVuY2VIZWxwZXIudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9DYW1lcmFzL1ZSL3ZyRXhwZXJpZW5jZUhlbHBlci50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogT25B
ZnRlckVudGVyaW5nVlJPYnNlcnZhYmxlRXZlbnQsIFZSRXhwZXJpZW5jZUhlbHBlciAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPbkFmdGVyRW50ZXJpbmdWUk9ic2VydmFi
bGVFdmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gT25BZnRlckVudGVyaW5nVlJPYnNlcnZhYmxl
RXZlbnQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVlJFeHBlcmllbmNlSGVscGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBWUkV4cGVyaWVuY2VIZWxwZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9sb2dnZXIg
Ki8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfZnJlZUNhbWVyYV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJh
cy9mcmVlQ2FtZXJhICovICIuL0NhbWVyYXMvZnJlZUNhbWVyYS50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9DYW1lcmFzX3RhcmdldENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy90YXJnZXRDYW1l
cmEgKi8gIi4vQ2FtZXJhcy90YXJnZXRDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfQ2FtZXJhc19kZXZpY2VPcmllbnRhdGlvbkNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9kZXZpY2VP
cmllbnRhdGlvbkNhbWVyYSAqLyAiLi9DYW1lcmFzL2RldmljZU9yaWVudGF0aW9uQ2FtZXJhLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfVlJfdnJEZXZpY2VPcmllbnRh
dGlvbkZyZWVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvVlIvdnJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1l
cmEgKi8gIi4vQ2FtZXJhcy9WUi92ckRldmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX1ZSX3dlYlZSQ2FtZXJhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1l
cmFzL1ZSL3dlYlZSQ2FtZXJhICovICIuL0NhbWVyYXMvVlIvd2ViVlJDYW1lcmEudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0V2ZW50cy9w
b2ludGVyRXZlbnRzICovICIuL0V2ZW50cy9wb2ludGVyRXZlbnRzLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAq
LyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNv
bG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0dhbWVwYWRzX2dhbWVwYWRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9HYW1lcGFkcy9nYW1lcGFkICovICIuL0dhbWVwYWRzL2dhbWVwYWQudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfR2FtZXBhZHNfQ29udHJvbGxlcnNfcG9zZUVuYWJsZWRDb250cm9s
bGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvcG9zZUVuYWJsZWRDb250cm9sbGVyICovICIu
L0dhbWVwYWRzL0NvbnRyb2xsZXJzL3Bvc2VFbmFibGVkQ29udHJvbGxlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9HYW1lcGFkc19Db250cm9sbGVyc193ZWJWUkNvbnRyb2xsZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9HYW1lcGFkcy9Db250cm9sbGVycy93ZWJWUkNvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMv
Q29udHJvbGxlcnMvd2ViVlJDb250cm9sbGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0dhbWVwYWRzX3hib3hHYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vR2FtZXBhZHMveGJveEdhbWVwYWQgKi8gIi4v
R2FtZXBhZHMveGJveEdhbWVwYWQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVz
aGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9DdWxsaW5nX3JheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0N1bGxpbmcvcmF5ICovICIuL0N1
bGxpbmcvcmF5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19pbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2ltYWdlUHJvY2Vzc2luZ0Nv
bmZpZ3VyYXRpb24gKi8gIi4vTWF0ZXJpYWxzL2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24u
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvc3RhbmRh
cmRNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4
dHVyZXNfZHluYW1pY1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvZHluYW1pY1RleHR1
cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2R5bmFtaWNUZXh0dXJlLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfaW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nl
c3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9Qb3N0UHJvY2Vzc2VzL2ltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzICovICIuL1Bv
c3RQcm9jZXNzZXMvaW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfQW5pbWF0aW9uc19lYXNpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9BbmltYXRpb25zL2Vhc2luZyAq
LyAiLi9BbmltYXRpb25zL2Vhc2luZy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9B
bmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL0FuaW1hdGlvbnMvYW5pbWF0aW9uICovICIuL0FuaW1h
dGlvbnMvYW5pbWF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNf
VlJfdnJDYW1lcmFNZXRyaWNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9WUi92ckNhbWVyYU1ldHJpY3MgKi8gIi4v
Q2FtZXJhcy9WUi92ckNhbWVyYU1ldHJpY3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWVzaGVzX0J1aWxkZXJzX2dyb3VuZEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NZXNoZXMvQnVpbGRlcnMvZ3Jv
dW5kQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvZ3JvdW5kQnVpbGRlci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfdG9ydXNCdWlsZGVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWVzaGVzL0J1aWxkZXJzL3RvcnVzQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdG9ydXNC
dWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWlsZGVyc19j
eWxpbmRlckJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NZXNoZXMvQnVpbGRlcnMvY3lsaW5kZXJCdWlsZGVyICovICIu
L01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfR2FtZXBhZHNfZ2FtZXBhZFNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vR2FtZXBhZHMvZ2Ft
ZXBhZFNjZW5lQ29tcG9uZW50ICovICIuL0dhbWVwYWRzL2dhbWVwYWRTY2VuZUNvbXBvbmVudC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9BbmltYXRpb25zX2FuaW1hdGFibGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9BbmltYXRpb25zL2FuaW1hdGFibGUgKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRhYmxlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21h
dGguYXhpcyAqLyAiLi9NYXRocy9tYXRoLmF4aXMudHMiKTsKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3ZhciBWUkV4cGVyaWVuY2VI
ZWxwZXJHYXplciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBW
UkV4cGVyaWVuY2VIZWxwZXJHYXplcihzY2VuZSwgZ2F6ZVRyYWNrZXJUb0Nsb25lKSB7CisgICAg
ICAgIGlmIChnYXplVHJhY2tlclRvQ2xvbmUgPT09IHZvaWQgMCkgeyBnYXplVHJhY2tlclRvQ2xv
bmUgPSBudWxsOyB9CisgICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICAgICAgdGhpcy5fcG9pbnRlckRvd25Pbk1lc2hBc2tlZCA9IGZhbHNlOwor
ICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9pc0FjdGlvbmFibGVNZXNoID0g
ZmFsc2U7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX3RlbGVwb3J0YXRp
b25SZXF1ZXN0SW5pdGlhdGVkID0gZmFsc2U7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAg
ICAgIHRoaXMuX3RlbGVwb3J0YXRpb25CYWNrUmVxdWVzdEluaXRpYXRlZCA9IGZhbHNlOworICAg
ICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9yb3RhdGlvblJpZ2h0QXNrZWQgPSBm
YWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fcm90YXRpb25MZWZ0
QXNrZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fZHBh
ZFByZXNzZWQgPSB0cnVlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9h
Y3RpdmVQb2ludGVyID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lkID0gVlJFeHBlcmllbmNlSGVs
cGVyR2F6ZXIuX2lkQ291bnRlcisrOworICAgICAgICAvLyBHYXplIHRyYWNrZXIKKyAgICAgICAg
aWYgKCFnYXplVHJhY2tlclRvQ2xvbmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2dhemVUcmFja2Vy
ID0gX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJNZXNoIl0uQ3Jl
YXRlVG9ydXMoImdhemVUcmFja2VyIiwgMC4wMDM1LCAwLjAwMjUsIDIwLCBzY2VuZSwgZmFsc2Up
OworICAgICAgICAgICAgdGhpcy5fZ2F6ZVRyYWNrZXIuYmFrZUN1cnJlbnRUcmFuc2Zvcm1JbnRv
VmVydGljZXMoKTsKKyAgICAgICAgICAgIHRoaXMuX2dhemVUcmFja2VyLmlzUGlja2FibGUgPSBm
YWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2dhemVUcmFja2VyLmlzVmlzaWJsZSA9IGZhbHNlOwor
ICAgICAgICAgICAgdmFyIHRhcmdldE1hdCA9IG5ldyBfTWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIlN0YW5kYXJkTWF0ZXJpYWwiXSgidGFy
Z2V0TWF0Iiwgc2NlbmUpOworICAgICAgICAgICAgdGFyZ2V0TWF0LnNwZWN1bGFyQ29sb3IgPSBf
TWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQ29sb3IzIl0u
QmxhY2soKTsKKyAgICAgICAgICAgIHRhcmdldE1hdC5lbWlzc2l2ZUNvbG9yID0gbmV3IF9NYXRo
c19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJDb2xvcjMiXSgwLjcs
IDAuNywgMC43KTsKKyAgICAgICAgICAgIHRhcmdldE1hdC5iYWNrRmFjZUN1bGxpbmcgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHRoaXMuX2dhemVUcmFja2VyLm1hdGVyaWFsID0gdGFyZ2V0TWF0Owor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZ2F6ZVRyYWNrZXIg
PSBnYXplVHJhY2tlclRvQ2xvbmUuY2xvbmUoImdhemVUcmFja2VyIik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBWUkV4cGVyaWVuY2VIZWxwZXJHYXplci5wcm90
b3R5cGUuX2dldEZvcndhcmRSYXkgPSBmdW5jdGlvbiAobGVuZ3RoKSB7CisgICAgICAgIHJldHVy
biBuZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJSYXkiXShf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmVjdG9yMyJd
Llplcm8oKSwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OV9fWyJWZWN0b3IzIl0oMCwgMCwgbGVuZ3RoKSk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIFZSRXhwZXJpZW5jZUhlbHBlckdhemVyLnByb3RvdHlwZS5fc2VsZWN0aW9uUG9pbnRl
ckRvd24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3BvaW50ZXJEb3duT25NZXNoQXNr
ZWQgPSB0cnVlOworICAgICAgICBpZiAodGhpcy5fY3VycmVudEhpdCkgeworICAgICAgICAgICAg
dGhpcy5zY2VuZS5zaW11bGF0ZVBvaW50ZXJEb3duKHRoaXMuX2N1cnJlbnRIaXQsIHsgcG9pbnRl
cklkOiB0aGlzLl9pZCB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBWUkV4cGVyaWVuY2VIZWxwZXJHYXplci5wcm90b3R5cGUuX3NlbGVjdGlvblBvaW50ZXJV
cCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRIaXQpIHsKKyAgICAg
ICAgICAgIHRoaXMuc2NlbmUuc2ltdWxhdGVQb2ludGVyVXAodGhpcy5fY3VycmVudEhpdCwgeyBw
b2ludGVySWQ6IHRoaXMuX2lkIH0pOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3BvaW50ZXJE
b3duT25NZXNoQXNrZWQgPSBmYWxzZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAg
VlJFeHBlcmllbmNlSGVscGVyR2F6ZXIucHJvdG90eXBlLl9hY3RpdmF0ZVBvaW50ZXIgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2FjdGl2ZVBvaW50ZXIgPSB0cnVlOworICAgIH07Cisg
ICAgLyoqIEBoaWRkZW4gKi8KKyAgICBWUkV4cGVyaWVuY2VIZWxwZXJHYXplci5wcm90b3R5cGUu
X2RlYWN0aXZhdGVQb2ludGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9hY3RpdmVQ
b2ludGVyID0gZmFsc2U7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFZSRXhwZXJp
ZW5jZUhlbHBlckdhemVyLnByb3RvdHlwZS5fdXBkYXRlUG9pbnRlckRpc3RhbmNlID0gZnVuY3Rp
b24gKGRpc3RhbmNlKSB7CisgICAgICAgIGlmIChkaXN0YW5jZSA9PT0gdm9pZCAwKSB7IGRpc3Rh
bmNlID0gMTAwOyB9CisgICAgfTsKKyAgICBWUkV4cGVyaWVuY2VIZWxwZXJHYXplci5wcm90b3R5
cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW50ZXJhY3Rpb25zRW5h
YmxlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl90ZWxlcG9ydGF0aW9uRW5hYmxlZCA9IGZhbHNl
OworICAgICAgICBpZiAodGhpcy5fZ2F6ZVRyYWNrZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2dh
emVUcmFja2VyLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgVlJFeHBlcmllbmNl
SGVscGVyR2F6ZXIuX2lkQ291bnRlciA9IDA7CisgICAgcmV0dXJuIFZSRXhwZXJpZW5jZUhlbHBl
ckdhemVyOworfSgpKTsKK3ZhciBWUkV4cGVyaWVuY2VIZWxwZXJDb250cm9sbGVyR2F6ZXIgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVlJFeHBlcmllbmNlSGVscGVyQ29udHJvbGxl
ckdhemVyLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIFZSRXhwZXJpZW5jZUhlbHBlckNvbnRyb2xs
ZXJHYXplcih3ZWJWUkNvbnRyb2xsZXIsIHNjZW5lLCBnYXplVHJhY2tlclRvQ2xvbmUpIHsKKyAg
ICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NlbmUsIGdhemVUcmFja2VyVG9D
bG9uZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMud2ViVlJDb250cm9sbGVyID0gd2ViVlJDb250
cm9sbGVyOworICAgICAgICAvLyBMYXNlciBwb2ludGVyCisgICAgICAgIF90aGlzLl9sYXNlclBv
aW50ZXIgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIk1lc2gi
XS5DcmVhdGVDeWxpbmRlcigibGFzZXJQb2ludGVyIiwgMSwgMC4wMDQsIDAuMDAwMiwgMjAsIDEs
IHNjZW5lLCBmYWxzZSk7CisgICAgICAgIHZhciBsYXNlclBvaW50ZXJNYXRlcmlhbCA9IG5ldyBf
TWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19b
IlN0YW5kYXJkTWF0ZXJpYWwiXSgibGFzZXJQb2ludGVyTWF0Iiwgc2NlbmUpOworICAgICAgICBs
YXNlclBvaW50ZXJNYXRlcmlhbC5lbWlzc2l2ZUNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJDb2xvcjMiXSgwLjcsIDAuNywgMC43KTsK
KyAgICAgICAgbGFzZXJQb2ludGVyTWF0ZXJpYWwuYWxwaGEgPSAwLjY7CisgICAgICAgIF90aGlz
Ll9sYXNlclBvaW50ZXIubWF0ZXJpYWwgPSBsYXNlclBvaW50ZXJNYXRlcmlhbDsKKyAgICAgICAg
X3RoaXMuX2xhc2VyUG9pbnRlci5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7CisgICAgICAgIF90
aGlzLl9sYXNlclBvaW50ZXIucG9zaXRpb24ueiA9IC0wLjU7CisgICAgICAgIF90aGlzLl9sYXNl
clBvaW50ZXIuaXNWaXNpYmxlID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9sYXNlclBvaW50ZXIu
aXNQaWNrYWJsZSA9IGZhbHNlOworICAgICAgICBpZiAoIXdlYlZSQ29udHJvbGxlci5tZXNoKSB7
CisgICAgICAgICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgbWVzaCB0aGF0IGlzIHVzZWQgcHJpb3Ig
dG8gbG9hZGluZyB0aGUgaGlnaCBxdWFsaXR5IG1vZGVsCisgICAgICAgICAgICB2YXIgcHJlbG9h
ZE1lc2ggPSBuZXcgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJN
ZXNoIl0oInByZWxvYWRDb250cm9sbGVyTWVzaCIsIHNjZW5lKTsKKyAgICAgICAgICAgIHZhciBw
cmVsb2FkUG9pbnRlclBvc2UgPSBuZXcgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNV9fWyJNZXNoIl0oX0dhbWVwYWRzX0NvbnRyb2xsZXJzX3Bvc2VFbmFibGVkQ29udHJv
bGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siUG9zZUVuYWJsZWRDb250cm9sbGVy
Il0uUE9JTlRJTkdfUE9TRSwgc2NlbmUpOworICAgICAgICAgICAgcHJlbG9hZFBvaW50ZXJQb3Nl
LnJvdGF0aW9uLnggPSAtMC43OworICAgICAgICAgICAgcHJlbG9hZE1lc2guYWRkQ2hpbGQocHJl
bG9hZFBvaW50ZXJQb3NlKTsKKyAgICAgICAgICAgIHdlYlZSQ29udHJvbGxlci5hdHRhY2hUb01l
c2gocHJlbG9hZE1lc2gpOworICAgICAgICB9CisgICAgICAgIF90aGlzLl9zZXRMYXNlclBvaW50
ZXJQYXJlbnQod2ViVlJDb250cm9sbGVyLm1lc2gpOworICAgICAgICBfdGhpcy5fbWVzaEF0dGFj
aGVkT2JzZXJ2ZXIgPSB3ZWJWUkNvbnRyb2xsZXIuX21lc2hBdHRhY2hlZE9ic2VydmFibGUuYWRk
KGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgICAgICBfdGhpcy5fc2V0TGFzZXJQb2ludGVyUGFy
ZW50KG1lc2gpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAg
ICBWUkV4cGVyaWVuY2VIZWxwZXJDb250cm9sbGVyR2F6ZXIucHJvdG90eXBlLl9nZXRGb3J3YXJk
UmF5ID0gZnVuY3Rpb24gKGxlbmd0aCkgeworICAgICAgICByZXR1cm4gdGhpcy53ZWJWUkNvbnRy
b2xsZXIuZ2V0Rm9yd2FyZFJheShsZW5ndGgpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBWUkV4cGVyaWVuY2VIZWxwZXJDb250cm9sbGVyR2F6ZXIucHJvdG90eXBlLl9hY3RpdmF0
ZVBvaW50ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2FjdGl2
YXRlUG9pbnRlci5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl9sYXNlclBvaW50ZXIuaXNWaXNp
YmxlID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgVlJFeHBlcmllbmNl
SGVscGVyQ29udHJvbGxlckdhemVyLnByb3RvdHlwZS5fZGVhY3RpdmF0ZVBvaW50ZXIgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2RlYWN0aXZhdGVQb2ludGVyLmNh
bGwodGhpcyk7CisgICAgICAgIHRoaXMuX2xhc2VyUG9pbnRlci5pc1Zpc2libGUgPSBmYWxzZTsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgVlJFeHBlcmllbmNlSGVscGVyQ29udHJv
bGxlckdhemVyLnByb3RvdHlwZS5fc2V0TGFzZXJQb2ludGVyQ29sb3IgPSBmdW5jdGlvbiAoY29s
b3IpIHsKKyAgICAgICAgdGhpcy5fbGFzZXJQb2ludGVyLm1hdGVyaWFsLmVtaXNzaXZlQ29sb3Ig
PSBjb2xvcjsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgVlJFeHBlcmllbmNlSGVs
cGVyQ29udHJvbGxlckdhemVyLnByb3RvdHlwZS5fc2V0TGFzZXJQb2ludGVyUGFyZW50ID0gZnVu
Y3Rpb24gKG1lc2gpIHsKKyAgICAgICAgdmFyIG1ha2VOb3RQaWNrID0gZnVuY3Rpb24gKHJvb3Qp
IHsKKyAgICAgICAgICAgIHJvb3QuaXNQaWNrYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgcm9v
dC5nZXRDaGlsZE1lc2hlcygpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKKyAgICAgICAgICAgICAg
ICBtYWtlTm90UGljayhjKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9OworICAgICAgICBt
YWtlTm90UGljayhtZXNoKTsKKyAgICAgICAgdmFyIG1lc2hDaGlsZHJlbiA9IG1lc2guZ2V0Q2hp
bGRyZW4odW5kZWZpbmVkLCBmYWxzZSk7CisgICAgICAgIHZhciBsYXNlclBhcmVudCA9IG1lc2g7
CisgICAgICAgIHRoaXMud2ViVlJDb250cm9sbGVyLl9wb2ludGluZ1Bvc2VOb2RlID0gbnVsbDsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNoQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIGlmIChtZXNoQ2hpbGRyZW5baV0ubmFtZSAmJiBtZXNoQ2hpbGRyZW5baV0u
bmFtZS5pbmRleE9mKF9HYW1lcGFkc19Db250cm9sbGVyc19wb3NlRW5hYmxlZENvbnRyb2xsZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlBvc2VFbmFibGVkQ29udHJvbGxlciJdLlBP
SU5USU5HX1BPU0UpID49IDApIHsKKyAgICAgICAgICAgICAgICBsYXNlclBhcmVudCA9IG1lc2hD
aGlsZHJlbltpXTsKKyAgICAgICAgICAgICAgICB0aGlzLndlYlZSQ29udHJvbGxlci5fcG9pbnRp
bmdQb3NlTm9kZSA9IGxhc2VyUGFyZW50OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2xhc2VyUG9pbnRlci5wYXJlbnQgPSBs
YXNlclBhcmVudDsKKyAgICB9OworICAgIFZSRXhwZXJpZW5jZUhlbHBlckNvbnRyb2xsZXJHYXpl
ci5wcm90b3R5cGUuX3VwZGF0ZVBvaW50ZXJEaXN0YW5jZSA9IGZ1bmN0aW9uIChkaXN0YW5jZSkg
eworICAgICAgICBpZiAoZGlzdGFuY2UgPT09IHZvaWQgMCkgeyBkaXN0YW5jZSA9IDEwMDsgfQor
ICAgICAgICB0aGlzLl9sYXNlclBvaW50ZXIuc2NhbGluZy55ID0gZGlzdGFuY2U7CisgICAgICAg
IHRoaXMuX2xhc2VyUG9pbnRlci5wb3NpdGlvbi56ID0gLWRpc3RhbmNlIC8gMjsKKyAgICB9Owor
ICAgIFZSRXhwZXJpZW5jZUhlbHBlckNvbnRyb2xsZXJHYXplci5wcm90b3R5cGUuZGlzcG9zZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhp
cyk7CisgICAgICAgIHRoaXMuX2xhc2VyUG9pbnRlci5kaXNwb3NlKCk7CisgICAgICAgIGlmICh0
aGlzLl9tZXNoQXR0YWNoZWRPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy53ZWJWUkNvbnRy
b2xsZXIuX21lc2hBdHRhY2hlZE9ic2VydmFibGUucmVtb3ZlKHRoaXMuX21lc2hBdHRhY2hlZE9i
c2VydmVyKTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIFZSRXhwZXJpZW5jZUhlbHBl
ckNvbnRyb2xsZXJHYXplcjsKK30oVlJFeHBlcmllbmNlSGVscGVyR2F6ZXIpKTsKK3ZhciBWUkV4
cGVyaWVuY2VIZWxwZXJDYW1lcmFHYXplciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3Vw
ZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMi
XShWUkV4cGVyaWVuY2VIZWxwZXJDYW1lcmFHYXplciwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBW
UkV4cGVyaWVuY2VIZWxwZXJDYW1lcmFHYXplcihnZXRDYW1lcmEsIHNjZW5lKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICBf
dGhpcy5nZXRDYW1lcmEgPSBnZXRDYW1lcmE7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9
CisgICAgVlJFeHBlcmllbmNlSGVscGVyQ2FtZXJhR2F6ZXIucHJvdG90eXBlLl9nZXRGb3J3YXJk
UmF5ID0gZnVuY3Rpb24gKGxlbmd0aCkgeworICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5nZXRD
YW1lcmEoKTsKKyAgICAgICAgaWYgKGNhbWVyYSkgeworICAgICAgICAgICAgcmV0dXJuIGNhbWVy
YS5nZXRGb3J3YXJkUmF5KGxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IF9DdWxsaW5nX3JheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTZfX1siUmF5Il0oX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIlZlY3RvcjMiXS5aZXJvKCksIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOV9fWyJWZWN0b3IzIl0uRm9yd2FyZCgpKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgcmV0dXJuIFZSRXhwZXJpZW5jZUhlbHBlckNhbWVyYUdhemVyOworfShWUkV4cGVyaWVuY2VI
ZWxwZXJHYXplcikpOworLyoqCisgKiBFdmVudCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFmdGVy
IFZSIGhhcyBiZWVuIGVudGVyZWQKKyAqLwordmFyIE9uQWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJs
ZUV2ZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIE9uQWZ0
ZXJFbnRlcmluZ1ZST2JzZXJ2YWJsZUV2ZW50KCkgeworICAgIH0KKyAgICByZXR1cm4gT25BZnRl
ckVudGVyaW5nVlJPYnNlcnZhYmxlRXZlbnQ7Cit9KCkpOworCisvKioKKyAqIEhlbHBzIHRvIHF1
aWNrbHkgYWRkIFZSIHN1cHBvcnQgdG8gYW4gZXhpc3Rpbmcgc2NlbmUuCisgKiBTZWUgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2hvd190by93ZWJ2cl9oZWxwZXIKKyAqLwordmFyIFZSRXhwZXJp
ZW5jZUhlbHBlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBJbnN0YW50aWF0ZXMgYSBWUkV4cGVyaWVuY2VIZWxwZXIuCisgICAgICogSGVscHMgdG8gcXVp
Y2tseSBhZGQgVlIgc3VwcG9ydCB0byBhbiBleGlzdGluZyBzY2VuZS4KKyAgICAgKiBAcGFyYW0g
c2NlbmUgVGhlIHNjZW5lIHRoZSBWUkV4cGVyaWVuY2VIZWxwZXIgYmVsb25ncyB0by4KKyAgICAg
KiBAcGFyYW0gd2ViVlJPcHRpb25zIE9wdGlvbnMgdG8gbW9kaWZ5IHRoZSB2ciBleHBlcmllbmNl
IGhlbHBlcidzIGJlaGF2aW9yLgorICAgICAqLworICAgIGZ1bmN0aW9uIFZSRXhwZXJpZW5jZUhl
bHBlcihzY2VuZSwgCisgICAgLyoqIE9wdGlvbnMgdG8gbW9kaWZ5IHRoZSB2ciBleHBlcmllbmNl
IGhlbHBlcidzIGJlaGF2aW9yLiAqLworICAgIHdlYlZST3B0aW9ucykgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICBpZiAod2ViVlJPcHRpb25zID09PSB2b2lkIDApIHsgd2Vi
VlJPcHRpb25zID0ge307IH0KKyAgICAgICAgdGhpcy53ZWJWUk9wdGlvbnMgPSB3ZWJWUk9wdGlv
bnM7CisgICAgICAgIC8vIENhbiB0aGUgc3lzdGVtIHN1cHBvcnQgV2ViVlIsIGV2ZW4gaWYgYSBo
ZWFkc2V0IGlzbid0IHBsdWdnZWQgaW4/CisgICAgICAgIHRoaXMuX3dlYlZSc3VwcG9ydGVkID0g
ZmFsc2U7CisgICAgICAgIC8vIElmIFdlYlZSIGlzIHN1cHBvcnRlZCwgaXMgYSBoZWFkc2V0IHBs
dWdnZWQgaW4gYW5kIGFyZSB3ZSByZWFkeSB0byBwcmVzZW50PworICAgICAgICB0aGlzLl93ZWJW
UnJlYWR5ID0gZmFsc2U7CisgICAgICAgIC8vIEFyZSB3ZSB3YWl0aW5nIGZvciB0aGUgcmVxdWVz
dFByZXNlbnQgY2FsbGJhY2sgdG8gY29tcGxldGU/CisgICAgICAgIHRoaXMuX3dlYlZScmVxdWVz
dGluZyA9IGZhbHNlOworICAgICAgICAvLyBBcmUgd2UgcHJlc2VudGluZyB0byB0aGUgaGVhZHNl
dCByaWdodCBub3c/ICh0aGlzIGlzIHRoZSB2ckRldmljZSBzdGF0ZSkKKyAgICAgICAgdGhpcy5f
d2ViVlJwcmVzZW50aW5nID0gZmFsc2U7CisgICAgICAgIC8vIEFyZSB3ZSBwcmVzZW50aW5nIGlu
IHRoZSBmdWxsc2NyZWVuIGZhbGxiYWNrPworICAgICAgICB0aGlzLl9mdWxsc2NyZWVuVlJwcmVz
ZW50aW5nID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBi
b29sZWFuIGluZGljYXRpbmcgdGhhdCBnYXplIGNhbiBiZSBlbmFibGVkIGV2ZW4gaWYgcG9pbnRl
ciBsb2NrIGlzIG5vdCBlbmdhZ2UgKHVzZWZ1bCBvbiBpT1Mgd2hlcmUgZnVsbHNjcmVlbiBtb2Rl
IGFuZCBwb2ludGVyIGxvY2sgYXJlIG5vdCBzdXBwb3J0ZWQpCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmVuYWJsZUdhemVFdmVuV2hlbk5vUG9pbnRlckxvY2sgPSBmYWxzZTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRo
ZSBWUkVYcGVyaWVuY2VIZWxwZXIgd2lsbCBleGl0IFZSIGlmIGRvdWJsZSB0YXAgaXMgZGV0ZWN0
ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZXhpdFZST25Eb3VibGVUYXAgPSB0cnVlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgcmlnaHQgYmVmb3JlIGVu
dGVyaW5nIFZSLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkVudGVyaW5nVlJPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxlIHJhaXNl
ZCB3aGVuIGVudGVyaW5nIFZSIGhhcyBjb21wbGV0ZWQuCisgICAgICAgICAqLworICAgICAgICB0
aGlzLm9uQWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioK
KyAgICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiBleGl0aW5nIFZSLgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5vbkV4aXRpbmdWUk9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgcmFpc2VkIHdoZW4gY29udHJvbGxlciBtZXNo
IGlzIGxvYWRlZC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25Db250cm9sbGVyTWVzaExv
YWRlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgdGhpcy5fdXNlQ3VzdG9tVlJCdXR0
b24gPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdGVsZXBvcnRhdGlvblJlcXVlc3RlZCA9IGZhbHNl
OworICAgICAgICB0aGlzLl90ZWxlcG9ydEFjdGl2ZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9m
bG9vck1lc2hlc0NvbGxlY3Rpb24gPSBbXTsKKyAgICAgICAgdGhpcy5fcm90YXRpb25BbGxvd2Vk
ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fdGVsZXBvcnRCYWNrd2FyZHNWZWN0b3IgPSBuZXcgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlZlY3RvcjMiXSgw
LCAtMSwgLTEpOworICAgICAgICB0aGlzLl9pc0RlZmF1bHRUZWxlcG9ydGF0aW9uVGFyZ2V0ID0g
dHJ1ZTsKKyAgICAgICAgdGhpcy5fdGVsZXBvcnRhdGlvbkZpbGxDb2xvciA9ICIjNDQ0NDQ0IjsK
KyAgICAgICAgdGhpcy5fdGVsZXBvcnRhdGlvbkJvcmRlckNvbG9yID0gIiNGRkZGRkYiOworICAg
ICAgICB0aGlzLl9yb3RhdGlvbkFuZ2xlID0gMDsKKyAgICAgICAgdGhpcy5faGFsb0NlbnRlciA9
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmVj
dG9yMyJdKDAsIDAsIDApOworICAgICAgICB0aGlzLl9wYWRTZW5zaWJpbGl0eVVwID0gMC42NTsK
KyAgICAgICAgdGhpcy5fcGFkU2Vuc2liaWxpdHlEb3duID0gMC4zNTsKKyAgICAgICAgdGhpcy5f
bGVmdENvbnRyb2xsZXIgPSBudWxsOworICAgICAgICB0aGlzLl9yaWdodENvbnRyb2xsZXIgPSBu
dWxsOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiBhIG5l
dyBtZXNoIGlzIHNlbGVjdGVkIGJhc2VkIG9uIG1lc2hTZWxlY3Rpb25QcmVkaWNhdGUKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMub25OZXdNZXNoU2VsZWN0ZWQgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgcmFpc2VkIHdoZW4gYSBuZXcgbWVzaCBpcyBz
ZWxlY3RlZCBiYXNlZCBvbiBtZXNoU2VsZWN0aW9uUHJlZGljYXRlLgorICAgICAgICAgKiBUaGlz
IG9ic2VydmFibGUgd2lsbCBwcm92aWRlIHRoZSBtZXNoIGFuZCB0aGUgY29udHJvbGxlciB1c2Vk
IHRvIHNlbGVjdCB0aGUgbWVzaAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbk1lc2hTZWxl
Y3RlZFdpdGhDb250cm9sbGVyID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBP
YnNlcnZhYmxlIHJhaXNlZCB3aGVuIGEgbmV3IG1lc2ggaXMgcGlja2VkIGJhc2VkIG9uIG1lc2hT
ZWxlY3Rpb25QcmVkaWNhdGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25OZXdNZXNoUGlj
a2VkID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxlIHJhaXNl
ZCBiZWZvcmUgY2FtZXJhIHRlbGVwb3J0YXRpb24KKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5v
bkJlZm9yZUNhbWVyYVRlbGVwb3J0ID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAg
KiAgT2JzZXJ2YWJsZSByYWlzZWQgYWZ0ZXIgY2FtZXJhIHRlbGVwb3J0YXRpb24KKyAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5vbkFmdGVyQ2FtZXJhVGVsZXBvcnQgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiBjdXJyZW50IHNlbGVjdGVk
IG1lc2ggZ2V0cyB1bnNlbGVjdGVkCisgICAgICAgICovCisgICAgICAgIHRoaXMub25TZWxlY3Rl
ZE1lc2hVbnNlbGVjdGVkID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQg
dGVsZXBvcnRhdGlvbiBlbmFibGVkLiBJZiBzZXQgdG8gZmFsc2UgY2FtZXJhIHRlbGVwb3J0YXRp
b24gd2lsbCBiZSBkaXNhYmxlZCBidXQgY2FtZXJhIHJvdGF0aW9uIHdpbGwgYmUga2VwdC4KKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMudGVsZXBvcnRhdGlvbkVuYWJsZWQgPSB0cnVlOworICAg
ICAgICB0aGlzLl90ZWxlcG9ydGF0aW9uSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhp
cy5faW50ZXJhY3Rpb25zRW5hYmxlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9pbnRlcmFjdGlv
bnNSZXF1ZXN0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZGlzcGxheUdhemUgPSB0cnVlOwor
ICAgICAgICB0aGlzLl9kaXNwbGF5TGFzZXJQb2ludGVyID0gdHJ1ZTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIElmIHRoZSBnYXplIHRyYWNrZXJzIHNjYWxlIHNob3VsZCBiZSB1cGRhdGVkIHRv
IGJlIGNvbnN0YW50IHNpemUgd2hlbiBwb2ludGluZyBhdCBuZWFyL2ZhciBtZXNoZXMKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMudXBkYXRlR2F6ZVRyYWNrZXJTY2FsZSA9IHRydWU7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBJZiB0aGUgZ2F6ZSB0cmFja2VycyBjb2xvciBzaG91bGQgYmUg
dXBkYXRlZCB3aGVuIHNlbGVjdGluZyBtZXNoZXMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
dXBkYXRlR2F6ZVRyYWNrZXJDb2xvciA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
ZWZpbmVzIHdldGhlciBvciBub3QgUG9pbnRlciBsb2NrIHNob3VsZCBiZSByZXF1ZXN0ZWQgd2hl
biBzd2l0Y2hpbmcgdG8KKyAgICAgICAgICogZnVsbCBzY3JlZW4uCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLnJlcXVlc3RQb2ludGVyTG9ja09uRnVsbFNjcmVlbiA9IHRydWU7CisgICAgICAg
IHRoaXMuX29uUmVzaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMubW92ZUJ1
dHRvblRvQm90dG9tUmlnaHQoKTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fZnVsbHNjcmVlblZS
cHJlc2VudGluZyAmJiBfdGhpcy5fd2ViVlJyZWFkeSkgeworICAgICAgICAgICAgICAgIF90aGlz
LmV4aXRWUigpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB0aGlzLl9vbkZ1
bGxzY3JlZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgYW55RG9jID0g
ZG9jdW1lbnQ7CisgICAgICAgICAgICBpZiAoYW55RG9jLmZ1bGxzY3JlZW4gIT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9mdWxsc2NyZWVuVlJwcmVzZW50aW5nID0gZG9j
dW1lbnQuZnVsbHNjcmVlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGFu
eURvYy5tb3pGdWxsU2NyZWVuICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICBfdGhp
cy5fZnVsbHNjcmVlblZScHJlc2VudGluZyA9IGFueURvYy5tb3pGdWxsU2NyZWVuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYW55RG9jLndlYmtpdElzRnVsbFNjcmVlbiAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2Z1bGxzY3JlZW5WUnByZXNl
bnRpbmcgPSBhbnlEb2Mud2Via2l0SXNGdWxsU2NyZWVuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAoYW55RG9jLm1zSXNGdWxsU2NyZWVuICE9PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgICAgICBfdGhpcy5fZnVsbHNjcmVlblZScHJlc2VudGluZyA9IGFueURvYy5tc0lz
RnVsbFNjcmVlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50
Lm1zRnVsbHNjcmVlbkVsZW1lbnQgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIF90
aGlzLl9mdWxsc2NyZWVuVlJwcmVzZW50aW5nID0gZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVu
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghX3RoaXMuX2Z1bGxzY3JlZW5WUnBy
ZXNlbnRpbmcgJiYgX3RoaXMuX2NhbnZhcykgeworICAgICAgICAgICAgICAgIF90aGlzLmV4aXRW
UigpOworICAgICAgICAgICAgICAgIGlmICghX3RoaXMuX3VzZUN1c3RvbVZSQnV0dG9uICYmIF90
aGlzLl9idG5WUikgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYnRuVlIuc3R5bGUudG9w
ID0gX3RoaXMuX2NhbnZhcy5vZmZzZXRUb3AgKyBfdGhpcy5fY2FudmFzLm9mZnNldEhlaWdodCAt
IDcwICsgInB4IjsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2J0blZSLnN0eWxlLmxlZnQg
PSBfdGhpcy5fY2FudmFzLm9mZnNldExlZnQgKyBfdGhpcy5fY2FudmFzLm9mZnNldFdpZHRoIC0g
MTAwICsgInB4IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisgICAgICAgIHRoaXMuX2NhY2hlZEFuZ3VsYXJTZW5zaWJpbGl0eSA9IHsgYW5ndWxhclNlbnNp
YmlsaXR5WDogbnVsbCwgYW5ndWxhclNlbnNpYmlsaXR5WTogbnVsbCwgYW5ndWxhclNlbnNpYmls
aXR5OiBudWxsIH07CisgICAgICAgIHRoaXMuYmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgaWYgKF90aGlzLl9sZWZ0Q29udHJvbGxlciAmJiBfdGhpcy5fbGVmdENvbnRy
b2xsZXIuX2FjdGl2ZVBvaW50ZXIpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fY2FzdFJheUFu
ZFNlbGVjdE9iamVjdChfdGhpcy5fbGVmdENvbnRyb2xsZXIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKF90aGlzLl9yaWdodENvbnRyb2xsZXIgJiYgX3RoaXMuX3JpZ2h0Q29udHJv
bGxlci5fYWN0aXZlUG9pbnRlcikgeworICAgICAgICAgICAgICAgIF90aGlzLl9jYXN0UmF5QW5k
U2VsZWN0T2JqZWN0KF90aGlzLl9yaWdodENvbnRyb2xsZXIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKF90aGlzLl9ub0NvbnRyb2xsZXJJc0FjdGl2ZSAmJiAoX3RoaXMuX3NjZW5l
LmdldEVuZ2luZSgpLmlzUG9pbnRlckxvY2sgfHwgX3RoaXMuZW5hYmxlR2F6ZUV2ZW5XaGVuTm9Q
b2ludGVyTG9jaykpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fY2FzdFJheUFuZFNlbGVjdE9i
amVjdChfdGhpcy5fY2FtZXJhR2F6ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2NhbWVyYUdhemVyLl9nYXplVHJhY2tlci5pc1Zp
c2libGUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5f
b25OZXdHYW1lcGFkQ29ubmVjdGVkID0gZnVuY3Rpb24gKGdhbWVwYWQpIHsKKyAgICAgICAgICAg
IGlmIChnYW1lcGFkLnR5cGUgIT09IF9HYW1lcGFkc19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMV9fWyJHYW1lcGFkIl0uUE9TRV9FTkFCTEVEKSB7CisgICAgICAgICAgICAgICAg
aWYgKGdhbWVwYWQubGVmdFN0aWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGdhbWVwYWQub25s
ZWZ0c3RpY2tjaGFuZ2VkKGZ1bmN0aW9uIChzdGlja1ZhbHVlcykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKF90aGlzLl90ZWxlcG9ydGF0aW9uSW5pdGlhbGl6ZWQgJiYgX3RoaXMudGVs
ZXBvcnRhdGlvbkVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaXN0
ZW5pbmcgdG8gY2xhc3NpYy94Ym94IGdhbWVwYWQgb25seSBpZiBubyBWUiBjb250cm9sbGVyIGlz
IGFjdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIV90aGlzLl9sZWZ0Q29u
dHJvbGxlciAmJiAhX3RoaXMuX3JpZ2h0Q29udHJvbGxlcikgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKChfdGhpcy5fbGVmdENvbnRyb2xsZXIgJiYgIV90aGlzLl9sZWZ0Q29u
dHJvbGxlci5fYWN0aXZlUG9pbnRlcikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChfdGhpcy5fcmlnaHRDb250cm9sbGVyICYmICFfdGhpcy5fcmlnaHRDb250cm9sbGVy
Ll9hY3RpdmVQb2ludGVyKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuX2NoZWNrVGVsZXBvcnRXaXRoUmF5KHN0aWNrVmFsdWVzLCBfdGhpcy5fY2FtZXJhR2F6ZXIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY2hlY2tUZWxlcG9ydEJh
Y2t3YXJkcyhzdGlja1ZhbHVlcywgX3RoaXMuX2NhbWVyYUdhemVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZ2FtZXBh
ZC5yaWdodFN0aWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGdhbWVwYWQub25yaWdodHN0aWNr
Y2hhbmdlZChmdW5jdGlvbiAoc3RpY2tWYWx1ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChfdGhpcy5fdGVsZXBvcnRhdGlvbkluaXRpYWxpemVkKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX3RoaXMuX2NoZWNrUm90YXRlKHN0aWNrVmFsdWVzLCBfdGhpcy5fY2FtZXJh
R2F6ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGdhbWVwYWQudHlwZSA9
PT0gX0dhbWVwYWRzX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkdhbWVw
YWQiXS5YQk9YKSB7CisgICAgICAgICAgICAgICAgICAgIGdhbWVwYWQub25idXR0b25kb3duKGZ1
bmN0aW9uIChidXR0b25QcmVzc2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Ro
aXMuX2ludGVyYWN0aW9uc0VuYWJsZWQgJiYgYnV0dG9uUHJlc3NlZCA9PT0gX0dhbWVwYWRzX3hi
b3hHYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJYYm94MzYwQnV0dG9uIl0u
QSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9jYW1lcmFHYXplci5fc2Vs
ZWN0aW9uUG9pbnRlckRvd24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGdhbWVwYWQub25idXR0b251cChm
dW5jdGlvbiAoYnV0dG9uUHJlc3NlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90
aGlzLl9pbnRlcmFjdGlvbnNFbmFibGVkICYmIGJ1dHRvblByZXNzZWQgPT09IF9HYW1lcGFkc194
Ym94R2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siWGJveDM2MEJ1dHRvbiJd
LkEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY2FtZXJhR2F6ZXIuX3Nl
bGVjdGlvblBvaW50ZXJVcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgd2ViVlJDb250cm9sbGVyID0gZ2FtZXBh
ZDsKKyAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlciA9IG5ldyBWUkV4cGVyaWVuY2VIZWxw
ZXJDb250cm9sbGVyR2F6ZXIod2ViVlJDb250cm9sbGVyLCBfdGhpcy5fc2NlbmUsIF90aGlzLl9j
YW1lcmFHYXplci5fZ2F6ZVRyYWNrZXIpOworICAgICAgICAgICAgICAgIGlmICh3ZWJWUkNvbnRy
b2xsZXIuaGFuZCA9PT0gInJpZ2h0IiB8fCAoX3RoaXMuX2xlZnRDb250cm9sbGVyICYmIF90aGlz
Ll9sZWZ0Q29udHJvbGxlci53ZWJWUkNvbnRyb2xsZXIgIT0gd2ViVlJDb250cm9sbGVyKSkgewor
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcmlnaHRDb250cm9sbGVyID0gY29udHJvbGxlcjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl9sZWZ0Q29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIF90aGlzLl90cnlFbmFibGVJbnRlcmFjdGlvbk9uQ29udHJv
bGxlcihjb250cm9sbGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgLy8g
VGhpcyBvbmx5IHN1Y2NlZWRzIGlmIHRoZSBjb250cm9sbGVyJ3MgbWVzaCBleGlzdHMgZm9yIHRo
ZSBjb250cm9sbGVyIHNvIHRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbmV2ZXIgbmV3IGNvbnRyb2xs
ZXIgaXMgY29ubmVjdGVkIG9yIHdoZW4gbWVzaCBpcyBsb2FkZWQKKyAgICAgICAgdGhpcy5fdHJ5
RW5hYmxlSW50ZXJhY3Rpb25PbkNvbnRyb2xsZXIgPSBmdW5jdGlvbiAoY29udHJvbGxlcikgewor
ICAgICAgICAgICAgaWYgKF90aGlzLl9pbnRlcmFjdGlvbnNSZXF1ZXN0ZWQgJiYgIWNvbnRyb2xs
ZXIuX2ludGVyYWN0aW9uc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fZW5hYmxl
SW50ZXJhY3Rpb25PbkNvbnRyb2xsZXIoY29udHJvbGxlcik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoX3RoaXMuX3RlbGVwb3J0YXRpb25SZXF1ZXN0ZWQgJiYgIWNvbnRyb2xsZXIu
X3RlbGVwb3J0YXRpb25FbmFibGVkKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2VuYWJsZVRl
bGVwb3J0YXRpb25PbkNvbnRyb2xsZXIoY29udHJvbGxlcik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisgICAgICAgIHRoaXMuX29uTmV3R2FtZXBhZERpc2Nvbm5lY3RlZCA9IGZ1bmN0aW9u
IChnYW1lcGFkKSB7CisgICAgICAgICAgICBpZiAoZ2FtZXBhZCBpbnN0YW5jZW9mIF9HYW1lcGFk
c19Db250cm9sbGVyc193ZWJWUkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEz
X19bIldlYlZSQ29udHJvbGxlciJdKSB7CisgICAgICAgICAgICAgICAgaWYgKGdhbWVwYWQuaGFu
ZCA9PT0gImxlZnQiICYmIF90aGlzLl9sZWZ0Q29udHJvbGxlciAhPSBudWxsKSB7CisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl9sZWZ0Q29udHJvbGxlci5kaXNwb3NlKCk7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl9sZWZ0Q29udHJvbGxlciA9IG51bGw7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChnYW1lcGFkLmhhbmQgPT09ICJyaWdodCIgJiYgX3RoaXMu
X3JpZ2h0Q29udHJvbGxlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9y
aWdodENvbnRyb2xsZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcmln
aHRDb250cm9sbGVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgICAgIHRoaXMuX3dvcmtpbmdWZWN0b3IgPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAg
ICAgdGhpcy5fd29ya2luZ1F1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siUXVhdGVybmlvbiJdLklkZW50aXR5KCk7CisgICAgICAgIHRo
aXMuX3dvcmtpbmdNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBz
Y2VuZTsKKyAgICAgICAgdGhpcy5fY2FudmFzID0gc2NlbmUuZ2V0RW5naW5lKCkuZ2V0UmVuZGVy
aW5nQ2FudmFzKCk7CisgICAgICAgIC8vIFBhcnNlIG9wdGlvbnMKKyAgICAgICAgaWYgKHdlYlZS
T3B0aW9ucy5jcmVhdGVGYWxsYmFja1ZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhID09PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHdlYlZST3B0aW9ucy5jcmVhdGVGYWxsYmFja1ZSRGV2
aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
d2ViVlJPcHRpb25zLmNyZWF0ZURldmljZU9yaWVudGF0aW9uQ2FtZXJhID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgIHdlYlZST3B0aW9ucy5jcmVhdGVEZXZpY2VPcmllbnRhdGlvbkNhbWVy
YSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdlYlZST3B0aW9ucy5sYXNlclRvZ2ds
ZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICB3ZWJWUk9wdGlvbnMubGFzZXJUb2dnbGUg
PSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh3ZWJWUk9wdGlvbnMuZGVmYXVsdEhlaWdo
dCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICB3ZWJWUk9wdGlvbnMuZGVmYXVsdEhlaWdo
dCA9IDEuNzsKKyAgICAgICAgfQorICAgICAgICBpZiAod2ViVlJPcHRpb25zLnVzZUN1c3RvbVZS
QnV0dG9uKSB7CisgICAgICAgICAgICB0aGlzLl91c2VDdXN0b21WUkJ1dHRvbiA9IHRydWU7Cisg
ICAgICAgICAgICBpZiAod2ViVlJPcHRpb25zLmN1c3RvbVZSQnV0dG9uKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5fYnRuVlIgPSB3ZWJWUk9wdGlvbnMuY3VzdG9tVlJCdXR0b247CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdlYlZST3B0aW9ucy5yYXlMZW5ndGgpIHsK
KyAgICAgICAgICAgIHRoaXMuX3JheUxlbmd0aCA9IHdlYlZST3B0aW9ucy5yYXlMZW5ndGg7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGVmYXVsdEhlaWdodCA9IHdlYlZST3B0aW9ucy5kZWZh
dWx0SGVpZ2h0OworICAgICAgICBpZiAod2ViVlJPcHRpb25zLnBvc2l0aW9uU2NhbGUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3JheUxlbmd0aCAqPSB3ZWJWUk9wdGlvbnMucG9zaXRpb25TY2FsZTsK
KyAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRIZWlnaHQgKj0gd2ViVlJPcHRpb25zLnBvc2l0aW9u
U2NhbGU7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5faGFzRW50ZXJlZFZSID0gZmFsc2U7Cisg
ICAgICAgIC8vIFNldCBwb3NpdGlvbgorICAgICAgICBpZiAodGhpcy5fc2NlbmUuYWN0aXZlQ2Ft
ZXJhKSB7CisgICAgICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHRoaXMuX3NjZW5lLmFjdGl2ZUNh
bWVyYS5wb3NpdGlvbi5jbG9uZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdGhpcy5fcG9zaXRpb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIlZlY3RvcjMiXSgwLCB0aGlzLl9kZWZhdWx0SGVpZ2h0LCAwKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBTZXQgbm9uLXZyIGNhbWVyYQorICAgICAgICBpZiAod2Vi
VlJPcHRpb25zLmNyZWF0ZURldmljZU9yaWVudGF0aW9uQ2FtZXJhIHx8ICF0aGlzLl9zY2VuZS5h
Y3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgIHRoaXMuX2RldmljZU9yaWVudGF0aW9uQ2FtZXJh
ID0gbmV3IF9DYW1lcmFzX2RldmljZU9yaWVudGF0aW9uQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIkRldmljZU9yaWVudGF0aW9uQ2FtZXJhIl0oImRldmljZU9yaWVudGF0aW9u
VlJIZWxwZXIiLCB0aGlzLl9wb3NpdGlvbi5jbG9uZSgpLCBzY2VuZSk7CisgICAgICAgICAgICAv
LyBDb3B5IGRhdGEgZnJvbSBleGlzdGluZyBjYW1lcmEKKyAgICAgICAgICAgIGlmICh0aGlzLl9z
Y2VuZS5hY3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VPcmllbnRh
dGlvbkNhbWVyYS5taW5aID0gdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLm1pblo7CisgICAgICAg
ICAgICAgICAgdGhpcy5fZGV2aWNlT3JpZW50YXRpb25DYW1lcmEubWF4WiA9IHRoaXMuX3NjZW5l
LmFjdGl2ZUNhbWVyYS5tYXhaOworICAgICAgICAgICAgICAgIC8vIFNldCByb3RhdGlvbiBmcm9t
IHByZXZpb3VzIGNhbWVyYQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2VuZS5hY3RpdmVD
YW1lcmEgaW5zdGFuY2VvZiBfQ2FtZXJhc190YXJnZXRDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siVGFyZ2V0Q2FtZXJhIl0gJiYgdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLnJv
dGF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXRDYW1lcmEgPSB0aGlzLl9z
Y2VuZS5hY3RpdmVDYW1lcmE7CisgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDYW1lcmEu
cm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXZp
Y2VPcmllbnRhdGlvbkNhbWVyYS5yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odGFyZ2V0Q2Ft
ZXJhLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VP
cmllbnRhdGlvbkNhbWVyYS5yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20oX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlF1YXRlcm5pb24iXS5Sb3RhdGlv
bllhd1BpdGNoUm9sbCh0YXJnZXRDYW1lcmEucm90YXRpb24ueSwgdGFyZ2V0Q2FtZXJhLnJvdGF0
aW9uLngsIHRhcmdldENhbWVyYS5yb3RhdGlvbi56KSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlT3JpZW50YXRpb25DYW1lcmEucm90YXRp
b24gPSB0YXJnZXRDYW1lcmEucm90YXRpb24uY2xvbmUoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEgPSB0aGlz
Ll9kZXZpY2VPcmllbnRhdGlvbkNhbWVyYTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9jYW52YXMp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEuYXR0YWNoQ29udHJv
bCh0aGlzLl9jYW52YXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdDYW1lcmEgPSB0aGlzLl9zY2VuZS5hY3RpdmVD
YW1lcmE7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ3JlYXRlIFZSIGNhbWVyYXMKKyAgICAgICAg
aWYgKHdlYlZST3B0aW9ucy5jcmVhdGVGYWxsYmFja1ZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2Ft
ZXJhKSB7CisgICAgICAgICAgICBpZiAod2ViVlJPcHRpb25zLnVzZU11bHRpdmlldykgeworICAg
ICAgICAgICAgICAgIGlmICghd2ViVlJPcHRpb25zLnZyRGV2aWNlT3JpZW50YXRpb25DYW1lcmFN
ZXRyaWNzKSB7CisgICAgICAgICAgICAgICAgICAgIHdlYlZST3B0aW9ucy52ckRldmljZU9yaWVu
dGF0aW9uQ2FtZXJhTWV0cmljcyA9IF9DYW1lcmFzX1ZSX3ZyQ2FtZXJhTWV0cmljc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjNfX1siVlJDYW1lcmFNZXRyaWNzIl0uR2V0RGVmYXVsdCgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3ZWJWUk9wdGlvbnMudnJEZXZpY2VP
cmllbnRhdGlvbkNhbWVyYU1ldHJpY3MubXVsdGl2aWV3RW5hYmxlZCA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl92ckRldmljZU9yaWVudGF0aW9uQ2FtZXJhID0gbmV3
IF9DYW1lcmFzX1ZSX3ZyRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIlZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhIl0oIlZSRGV2aWNl
T3JpZW50YXRpb25WUkhlbHBlciIsIHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9zY2VuZSwgdHJ1ZSwg
d2ViVlJPcHRpb25zLnZyRGV2aWNlT3JpZW50YXRpb25DYW1lcmFNZXRyaWNzKTsKKyAgICAgICAg
ICAgIHRoaXMuX3ZyRGV2aWNlT3JpZW50YXRpb25DYW1lcmEuYW5ndWxhclNlbnNpYmlsaXR5ID0g
TnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl93ZWJWUkNhbWVyYSA9
IG5ldyBfQ2FtZXJhc19WUl93ZWJWUkNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJXZWJWUkZyZWVDYW1lcmEiXSgiV2ViVlJIZWxwZXIiLCB0aGlzLl9wb3NpdGlvbiwgdGhpcy5f
c2NlbmUsIHdlYlZST3B0aW9ucyk7CisgICAgICAgIHRoaXMuX3dlYlZSQ2FtZXJhLnVzZVN0YW5k
aW5nTWF0cml4KCk7CisgICAgICAgIHRoaXMuX2NhbWVyYUdhemVyID0gbmV3IFZSRXhwZXJpZW5j
ZUhlbHBlckNhbWVyYUdhemVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmN1cnJlbnRWUkNh
bWVyYTsgfSwgc2NlbmUpOworICAgICAgICAvLyBDcmVhdGUgZGVmYXVsdCBidXR0b24KKyAgICAg
ICAgaWYgKCF0aGlzLl91c2VDdXN0b21WUkJ1dHRvbikgeworICAgICAgICAgICAgdGhpcy5fYnRu
VlIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCVVRUT04iKTsKKyAgICAgICAgICAgIHRoaXMu
X2J0blZSLmNsYXNzTmFtZSA9ICJiYWJ5bG9uVlJpY29uIjsKKyAgICAgICAgICAgIHRoaXMuX2J0
blZSLmlkID0gImJhYnlsb25WUmljb25idG4iOworICAgICAgICAgICAgdGhpcy5fYnRuVlIudGl0
bGUgPSAiQ2xpY2sgdG8gc3dpdGNoIHRvIFZSIjsKKyAgICAgICAgICAgIHZhciBjc3MgPSAiLmJh
Ynlsb25WUmljb24geyBwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAyMHB4OyBoZWlnaHQ6IDUw
cHg7IHdpZHRoOiA4MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDUxLDUxLDUxLDAuNyk7IGJh
Y2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0Nz
dmclMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmclMjIlMjB3aWR0aCUz
RCUyMjIwNDglMjIlMjBoZWlnaHQlM0QlMjIxMTUyJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIw
MjA0OCUyMDExNTIlMjIlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTNFJTNDcGF0aCUyMHRyYW5zZm9y
bSUzRCUyMnJvdGF0ZSUyODE4MCUyMDEwMjQlMkM1NzYuMDAwMDAwMDAwMDAwMSUyOSUyMiUyMGQl
M0QlMjJtMTEwOSUyQzg5NnExNyUyQzAlMjAzMCUyQy0xMnQxMyUyQy0zMHQtMTIuNSUyQy0zMC41
dC0zMC41JTJDLTEyLjVsLTE3MCUyQzBxLTE4JTJDMCUyMC0zMC41JTJDMTIuNXQtMTIuNSUyQzMw
LjV0MTMlMkMzMHQzMCUyQzEybDE3MCUyQzB6bS04NSUyQzI1NnE1OSUyQzAlMjAxMzIuNSUyQy0x
LjV0MTU0LjUlMkMtNS41dDE2NC41JTJDLTExLjV0MTYzJTJDLTIwdDE1MCUyQy0zMHQxMjQuNSUy
Qy00MS41cTIzJTJDLTExJTIwNDIlMkMtMjR0MzglMkMtMzBxMjclMkMtMjUlMjA0MSUyQy02MS41
dDE0JTJDLTcyLjVsMCUyQy0yNTdxMCUyQy0xMjMlMjAtNDclMkMtMjMydC0xMjglMkMtMTkwdC0x
OTAlMkMtMTI4dC0yMzIlMkMtNDdsLTgxJTJDMHEtMzclMkMwJTIwLTY4LjUlMkMxNHQtNjAuNSUy
QzM0LjV0LTU1LjUlMkM0NXQtNTMlMkM0NXQtNTMlMkMzNC41dC01NS41JTJDMTR0LTU1LjUlMkMt
MTR0LTUzJTJDLTM0LjV0LTUzJTJDLTQ1dC01NS41JTJDLTQ1dC02MC41JTJDLTM0LjV0LTY4LjUl
MkMtMTRsLTgxJTJDMHEtMTIzJTJDMCUyMC0yMzIlMkM0N3QtMTkwJTJDMTI4dC0xMjglMkMxOTB0
LTQ3JTJDMjMybDAlMkMyNTdxMCUyQzY4JTIwMzglMkMxMTV0OTclMkM3M3E1NCUyQzI0JTIwMTI0
LjUlMkM0MS41dDE1MCUyQzMwdDE2MyUyQzIwdDE2NC41JTJDMTEuNXQxNTQuNSUyQzUuNXQxMzIu
NSUyQzEuNXptOTM5JTJDLTI5OHEwJTJDMzklMjAtMjQuNSUyQzY3dC01OC41JTJDNDJxLTU0JTJD
MjMlMjAtMTIyJTJDMzkuNXQtMTQzLjUlMkMyOHQtMTU1LjUlMkMxOXQtMTU3JTJDMTF0LTE0OC41
JTJDNXQtMTI5LjUlMkMxLjVxLTU5JTJDMCUyMC0xMzAlMkMtMS41dC0xNDglMkMtNXQtMTU3JTJD
LTExdC0xNTUuNSUyQy0xOXQtMTQzLjUlMkMtMjh0LTEyMiUyQy0zOS41cS0zNCUyQy0xNCUyMC01
OC41JTJDLTQydC0yNC41JTJDLTY3bDAlMkMtMjU3cTAlMkMtMTA2JTIwNDAuNSUyQy0xOTl0MTEw
JTJDLTE2Mi41dDE2Mi41JTJDLTEwOS41dDE5OSUyQy00MGw4MSUyQzBxMjclMkMwJTIwNTIlMkMx
NHQ1MCUyQzM0LjV0NTElMkM0NC41dDU1LjUlMkM0NC41dDYzLjUlMkMzNC41dDc0JTJDMTR0NzQl
MkMtMTR0NjMuNSUyQy0zNC41dDU1LjUlMkMtNDQuNXQ1MSUyQy00NC41dDUwJTJDLTM0LjV0NTIl
MkMtMTRsMTQlMkMwcTM3JTJDMCUyMDcwJTJDMC41dDY0LjUlMkM0LjV0NjMuNSUyQzEydDY4JTJD
MjNxNzElMkMzMCUyMDEyOC41JTJDNzguNXQ5OC41JTJDMTEwdDYzLjUlMkMxMzMuNXQyMi41JTJD
MTQ5bDAlMkMyNTd6JTIyJTIwZmlsbCUzRCUyMndoaXRlJTIyJTIwLyUzRSUzQy9zdmclM0UlMEEp
OyBiYWNrZ3JvdW5kLXNpemU6IDgwJTsgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OyBiYWNr
Z3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7IGJvcmRlcjogbm9uZTsgb3V0bGluZTogbm9uZTsgdHJh
bnNpdGlvbjogdHJhbnNmb3JtIDAuMTI1cyBlYXNlLW91dCB9IC5iYWJ5bG9uVlJpY29uOmhvdmVy
IHsgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KSB9IC5iYWJ5bG9uVlJpY29uOmFjdGl2ZSB7YmFja2dy
b3VuZC1jb2xvcjogcmdiYSg1MSw1MSw1MSwxKSB9IC5iYWJ5bG9uVlJpY29uOmZvY3VzIHtiYWNr
Z3JvdW5kLWNvbG9yOiByZ2JhKDUxLDUxLDUxLDEpIH0iOworICAgICAgICAgICAgY3NzICs9ICIu
YmFieWxvblZSaWNvbi52cmRpc3BsYXlwcmVzZW50aW5nIHsgZGlzcGxheTogbm9uZTsgfSI7Cisg
ICAgICAgICAgICAvLyBUT0RPOiBBZGQgdXNlciBmZWVkYmFjayBzbyB0aGF0IHRoZXkga25vdyB3
aGF0IHN0YXRlIHRoZSBWUkRpc3BsYXkgaXMgaW4gKGRpc2Nvbm5lY3RlZCwgY29ubmVjdGVkLCBl
bnRlcmluZy1WUikKKyAgICAgICAgICAgIC8vIGNzcyArPSAiLmJhYnlsb25WUmljb24udnJkaXNw
bGF5c3VwcG9ydGVkIHsgfSI7CisgICAgICAgICAgICAvLyBjc3MgKz0gIi5iYWJ5bG9uVlJpY29u
LnZyZGlzcGxheXJlYWR5IHsgfSI7CisgICAgICAgICAgICAvLyBjc3MgKz0gIi5iYWJ5bG9uVlJp
Y29uLnZyZGlzcGxheXJlcXVlc3RpbmcgeyB9IjsKKyAgICAgICAgICAgIHZhciBzdHlsZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgICAgICAgICBzdHlsZS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTsKKyAgICAgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc3R5bGUpOworICAg
ICAgICAgICAgdGhpcy5tb3ZlQnV0dG9uVG9Cb3R0b21SaWdodCgpOworICAgICAgICB9CisgICAg
ICAgIC8vIFZSIGJ1dHRvbiBjbGljayBldmVudAorICAgICAgICBpZiAodGhpcy5fYnRuVlIpIHsK
KyAgICAgICAgICAgIHRoaXMuX2J0blZSLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIGlmICghX3RoaXMuaXNJblZSTW9kZSkgeworICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5lbnRlclZSKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5leGl0VlIoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICAvLyBX
aW5kb3cgZXZlbnRzCisgICAgICAgIHZhciBob3N0V2luZG93ID0gdGhpcy5fc2NlbmUuZ2V0RW5n
aW5lKCkuZ2V0SG9zdFdpbmRvdygpOworICAgICAgICBob3N0V2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoInJlc2l6ZSIsIHRoaXMuX29uUmVzaXplKTsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigiZnVsbHNjcmVlbmNoYW5nZSIsIHRoaXMuX29uRnVsbHNjcmVlbkNoYW5nZSwgZmFs
c2UpOworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3pmdWxsc2NyZWVuY2hh
bmdlIiwgdGhpcy5fb25GdWxsc2NyZWVuQ2hhbmdlLCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCB0aGlzLl9vbkZ1bGxz
Y3JlZW5DaGFuZ2UsIGZhbHNlKTsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigi
bXNmdWxsc2NyZWVuY2hhbmdlIiwgdGhpcy5fb25GdWxsc2NyZWVuQ2hhbmdlLCBmYWxzZSk7Cisg
ICAgICAgIGRvY3VtZW50Lm9ubXNmdWxsc2NyZWVuY2hhbmdlID0gdGhpcy5fb25GdWxsc2NyZWVu
Q2hhbmdlOworICAgICAgICAvLyBEaXNwbGF5IHZyIGJ1dHRvbiB3aGVuIGhlYWRzZXQgaXMgY29u
bmVjdGVkCisgICAgICAgIGlmICh3ZWJWUk9wdGlvbnMuY3JlYXRlRmFsbGJhY2tWUkRldmljZU9y
aWVudGF0aW9uRnJlZUNhbWVyYSkgeworICAgICAgICAgICAgdGhpcy5kaXNwbGF5VlJCdXR0b24o
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLmdl
dEVuZ2luZSgpLm9uVlJEaXNwbGF5Q2hhbmdlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlKSB7
CisgICAgICAgICAgICAgICAgaWYgKGUudnJEaXNwbGF5KSB7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLmRpc3BsYXlWUkJ1dHRvbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIC8vIEV4aXRpbmcgVlIgbW9kZSB1c2luZyAnRVNDJyBr
ZXkgb24gZGVza3RvcAorICAgICAgICB0aGlzLl9vbktleURvd24gPSBmdW5jdGlvbiAoZXZlbnQp
IHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAyNyAmJiBfdGhpcy5pc0luVlJN
b2RlKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuZXhpdFZSKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0
aGlzLl9vbktleURvd24pOworICAgICAgICAvLyBFeGl0aW5nIFZSIG1vZGUgZG91YmxlIHRhcHBp
bmcgdGhlIHRvdWNoIHNjcmVlbgorICAgICAgICB0aGlzLl9zY2VuZS5vblByZVBvaW50ZXJPYnNl
cnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuaXNJblZSTW9k
ZSAmJiBfdGhpcy5leGl0VlJPbkRvdWJsZVRhcCkgeworICAgICAgICAgICAgICAgIF90aGlzLmV4
aXRWUigpOworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fZnVsbHNjcmVlblZScHJlc2VudGlu
ZykgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZXhpdEZ1
bGxzY3JlZW4oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0s
IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQb2lu
dGVyRXZlbnRUeXBlcyJdLlBPSU5URVJET1VCTEVUQVAsIGZhbHNlKTsKKyAgICAgICAgLy8gTGlz
dGVuIGZvciBXZWJWUiBkaXNwbGF5IGNoYW5nZXMKKyAgICAgICAgdGhpcy5fb25WUkRpc3BsYXlD
aGFuZ2VkID0gZnVuY3Rpb24gKGV2ZW50QXJncykgeyByZXR1cm4gX3RoaXMub25WUkRpc3BsYXlD
aGFuZ2VkKGV2ZW50QXJncyk7IH07CisgICAgICAgIHRoaXMuX29uVnJEaXNwbGF5UHJlc2VudENo
YW5nZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLm9uVnJEaXNwbGF5UHJlc2VudENoYW5n
ZSgpOyB9OworICAgICAgICB0aGlzLl9vblZSUmVxdWVzdFByZXNlbnRTdGFydCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIF90aGlzLl93ZWJWUnJlcXVlc3RpbmcgPSB0cnVlOworICAgICAg
ICAgICAgX3RoaXMudXBkYXRlQnV0dG9uVmlzaWJpbGl0eSgpOworICAgICAgICB9OworICAgICAg
ICB0aGlzLl9vblZSUmVxdWVzdFByZXNlbnRDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIF90aGlzLl93ZWJWUnJlcXVlc3RpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIF90aGlz
LnVwZGF0ZUJ1dHRvblZpc2liaWxpdHkoKTsKKyAgICAgICAgfTsKKyAgICAgICAgc2NlbmUuZ2V0
RW5naW5lKCkub25WUkRpc3BsYXlDaGFuZ2VkT2JzZXJ2YWJsZS5hZGQodGhpcy5fb25WUkRpc3Bs
YXlDaGFuZ2VkKTsKKyAgICAgICAgc2NlbmUuZ2V0RW5naW5lKCkub25WUlJlcXVlc3RQcmVzZW50
U3RhcnQuYWRkKHRoaXMuX29uVlJSZXF1ZXN0UHJlc2VudFN0YXJ0KTsKKyAgICAgICAgc2NlbmUu
Z2V0RW5naW5lKCkub25WUlJlcXVlc3RQcmVzZW50Q29tcGxldGUuYWRkKHRoaXMuX29uVlJSZXF1
ZXN0UHJlc2VudENvbXBsZXRlKTsKKyAgICAgICAgaG9zdFdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCd2cmRpc3BsYXlwcmVzZW50Y2hhbmdlJywgdGhpcy5fb25WckRpc3BsYXlQcmVzZW50Q2hhbmdl
KTsKKyAgICAgICAgc2NlbmUub25EaXNwb3NlT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgX3RoaXMuZGlzcG9zZSgpOworICAgICAgICB9KTsKKyAgICAgICAgLy8gR2Ft
ZXBhZCBjb25uZWN0aW9uIGV2ZW50cworICAgICAgICB0aGlzLl93ZWJWUkNhbWVyYS5vbkNvbnRy
b2xsZXJNZXNoTG9hZGVkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHdlYlZSQ29udHJvbGxlcikg
eyByZXR1cm4gX3RoaXMuX29uRGVmYXVsdE1lc2hMb2FkZWQod2ViVlJDb250cm9sbGVyKTsgfSk7
CisgICAgICAgIHRoaXMuX3NjZW5lLmdhbWVwYWRNYW5hZ2VyLm9uR2FtZXBhZENvbm5lY3RlZE9i
c2VydmFibGUuYWRkKHRoaXMuX29uTmV3R2FtZXBhZENvbm5lY3RlZCk7CisgICAgICAgIHRoaXMu
X3NjZW5lLmdhbWVwYWRNYW5hZ2VyLm9uR2FtZXBhZERpc2Nvbm5lY3RlZE9ic2VydmFibGUuYWRk
KHRoaXMuX29uTmV3R2FtZXBhZERpc2Nvbm5lY3RlZCk7CisgICAgICAgIHRoaXMudXBkYXRlQnV0
dG9uVmlzaWJpbGl0eSgpOworICAgICAgICAvL2NyZWF0ZSBlYXNpbmcgZnVuY3Rpb25zCisgICAg
ICAgIHRoaXMuX2NpcmNsZUVhc2UgPSBuZXcgX0FuaW1hdGlvbnNfZWFzaW5nX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yMV9fWyJDaXJjbGVFYXNlIl0oKTsKKyAgICAgICAgdGhpcy5fY2lyY2xl
RWFzZS5zZXRFYXNpbmdNb2RlKF9BbmltYXRpb25zX2Vhc2luZ19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjFfX1siRWFzaW5nRnVuY3Rpb24iXS5FQVNJTkdNT0RFX0VBU0VJTk9VVCk7CisgICAg
ICAgIC8vIEFsbG93IGNsaWNraW5nIGluIHRoZSB2ckRldmljZU9yaWVudGF0aW9uQ2FtZXJhCisg
ICAgICAgIHNjZW5lLm9uUG9pbnRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlKSB7CisgICAg
ICAgICAgICBpZiAoX3RoaXMuX2ludGVyYWN0aW9uc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoc2NlbmUuYWN0aXZlQ2FtZXJhID09PSBfdGhpcy52ckRldmljZU9yaWVudGF0aW9uQ2Ft
ZXJhICYmIGUuZXZlbnQucG9pbnRlclR5cGUgPT09ICJtb3VzZSIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGUudHlwZSA9PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV84X19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl9jYW1lcmFHYXplci5fc2VsZWN0aW9uUG9pbnRlckRv
d24oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChlLnR5cGUgPT09IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJVUCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX2NhbWVyYUdhemVyLl9zZWxlY3Rpb25Qb2ludGVyVXAoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CisgICAgICAgIGlmICh0aGlzLndlYlZST3B0aW9ucy5mbG9vck1lc2hlcykgeworICAg
ICAgICAgICAgdGhpcy5lbmFibGVUZWxlcG9ydGF0aW9uKHsgZmxvb3JNZXNoZXM6IHRoaXMud2Vi
VlJPcHRpb25zLmZsb29yTWVzaGVzIH0pOworICAgICAgICB9CisgICAgfQorICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAib25FbnRlcmluZ1ZS
IiwgeworICAgICAgICAvKiogUmV0dXJuIHRoaXMub25FbnRlcmluZ1ZST2JzZXJ2YWJsZQorICAg
ICAgICAgKiBOb3RlOiBUaGlzIG9uZSBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gUGxl
YXNlIHVzZSBvbkVudGVyaW5nVlJPYnNlcnZhYmxlIGRpcmVjdGx5CisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm9uRW50ZXJp
bmdWUk9ic2VydmFibGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAib25FeGl0aW5nVlIiLCB7CisgICAg
ICAgIC8qKiBSZXR1cm4gdGhpcy5vbkV4aXRpbmdWUk9ic2VydmFibGUKKyAgICAgICAgICogTm90
ZTogVGhpcyBvbmUgaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFBsZWFzZSB1c2Ugb25F
eGl0aW5nVlJPYnNlcnZhYmxlIGRpcmVjdGx5CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm9uRXhpdGluZ1ZST2JzZXJ2YWJs
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZSRXhwZXJp
ZW5jZUhlbHBlci5wcm90b3R5cGUsICJvbkNvbnRyb2xsZXJNZXNoTG9hZGVkIiwgeworICAgICAg
ICAvKiogUmV0dXJuIHRoaXMub25Db250cm9sbGVyTWVzaExvYWRlZE9ic2VydmFibGUKKyAgICAg
ICAgICogTm90ZTogVGhpcyBvbmUgaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFBsZWFz
ZSB1c2Ugb25Db250cm9sbGVyTWVzaExvYWRlZE9ic2VydmFibGUgZGlyZWN0bHkKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
b25Db250cm9sbGVyTWVzaExvYWRlZE9ic2VydmFibGU7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAidGVs
ZXBvcnRhdGlvblRhcmdldCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBtZXNoIHVz
ZWQgdG8gZGlzcGxheSB3aGVyZSB0aGUgdXNlciBpcyBnb2luZyB0byB0ZWxlcG9ydC4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3RlbGVwb3J0YXRpb25UYXJnZXQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBTZXRzIHRoZSBtZXNoIHRvIGJlIHVzZWQgdG8gZGlzcGxheSB3aGVyZSB0aGUgdXNlciBp
cyBnb2luZyB0byB0ZWxlcG9ydC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICB2YWx1
ZS5uYW1lID0gInRlbGVwb3J0YXRpb25UYXJnZXQiOworICAgICAgICAgICAgICAgIHRoaXMuX2lz
RGVmYXVsdFRlbGVwb3J0YXRpb25UYXJnZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll90ZWxlcG9ydGF0aW9uVGFyZ2V0ID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJv
dG90eXBlLCAiZ2F6ZVRyYWNrZXJNZXNoIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhl
IG1lc2ggdXNlZCB0byBkaXNwbGF5IHdoZXJlIHRoZSB1c2VyIGlzIHNlbGVjdGluZywgdGhpcyBt
ZXNoIHdpbGwgYmUgY2xvbmVkIGFuZCBzZXQgYXMgdGhlIGdhemVUcmFja2VyIGZvciB0aGUgbGVm
dCBhbmQgcmlnaHQgY29udHJvbGxlcgorICAgICAgICAgKiB3aGVuIHNldCBiYWtlQ3VycmVudFRy
YW5zZm9ybUludG9WZXJ0aWNlcyB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgbWVzaC4KKyAgICAgICAg
ICogU2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9yZXNvdXJjZXMvYmFraW5nX3RyYW5zZm9y
bWF0aW9ucworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fY2FtZXJhR2F6ZXIuX2dhemVUcmFja2VyOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlKSB7
CisgICAgICAgICAgICAgICAgLy8gRGlzcG9zZSBvZiBleGlzdGluZyBtZXNoZXMKKyAgICAgICAg
ICAgICAgICBpZiAodGhpcy5fY2FtZXJhR2F6ZXIuX2dhemVUcmFja2VyKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2NhbWVyYUdhemVyLl9nYXplVHJhY2tlci5kaXNwb3NlKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sZWZ0Q29udHJvbGxlciAm
JiB0aGlzLl9sZWZ0Q29udHJvbGxlci5fZ2F6ZVRyYWNrZXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fbGVmdENvbnRyb2xsZXIuX2dhemVUcmFja2VyLmRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JpZ2h0Q29udHJvbGxlciAmJiB0
aGlzLl9yaWdodENvbnRyb2xsZXIuX2dhemVUcmFja2VyKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX3JpZ2h0Q29udHJvbGxlci5fZ2F6ZVRyYWNrZXIuZGlzcG9zZSgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBTZXQgYW5kIGNyZWF0ZSBnYXplIHRyYWNrZXJz
IG9uIGhlYWQgYW5kIGNvbnRyb2xsZXJzCisgICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhR2F6
ZXIuX2dhemVUcmFja2VyID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhR2F6
ZXIuX2dhemVUcmFja2VyLmJha2VDdXJyZW50VHJhbnNmb3JtSW50b1ZlcnRpY2VzKCk7CisgICAg
ICAgICAgICAgICAgdGhpcy5fY2FtZXJhR2F6ZXIuX2dhemVUcmFja2VyLmlzUGlja2FibGUgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jYW1lcmFHYXplci5fZ2F6ZVRyYWNrZXIuaXNW
aXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhR2F6ZXIuX2dhemVU
cmFja2VyLm5hbWUgPSAiZ2F6ZVRyYWNrZXIiOworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9s
ZWZ0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZWZ0Q29udHJvbGxl
ci5fZ2F6ZVRyYWNrZXIgPSB0aGlzLl9jYW1lcmFHYXplci5fZ2F6ZVRyYWNrZXIuY2xvbmUoImdh
emVUcmFja2VyIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlz
Ll9yaWdodENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRDb250
cm9sbGVyLl9nYXplVHJhY2tlciA9IHRoaXMuX2NhbWVyYUdhemVyLl9nYXplVHJhY2tlci5jbG9u
ZSgiZ2F6ZVRyYWNrZXIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxw
ZXIucHJvdG90eXBlLCAibGVmdENvbnRyb2xsZXJHYXplVHJhY2tlck1lc2giLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBUaGUgZ2F6ZSB0cmFja2luZyBtZXNoIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIGxlZnQgY29udHJvbGxlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fbGVmdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fbGVmdENvbnRyb2xsZXIuX2dhemVUcmFja2VyOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAicmlnaHRD
b250cm9sbGVyR2F6ZVRyYWNrZXJNZXNoIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhl
IGdhemUgdHJhY2tpbmcgbWVzaCBjb3JyZXNwb25kaW5nIHRvIHRoZSByaWdodCBjb250cm9sbGVy
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9yaWdodENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
cmlnaHRDb250cm9sbGVyLl9nYXplVHJhY2tlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlwZSwgImRpc3BsYXlHYXplIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogSWYgdGhlIHJheSBvZiB0aGUgZ2F6ZSBzaG91bGQgYmUgZGlzcGxh
eWVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZGlzcGxheUdhemU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTZXRzIGlmIHRoZSByYXkgb2YgdGhlIGdhemUgc2hvdWxkIGJlIGRpc3BsYXllZC4K
KyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLl9kaXNwbGF5R2F6ZSA9IHZhbHVlOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX2NhbWVyYUdhemVyLl9nYXplVHJhY2tlci5pc1Zpc2libGUg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fbGVmdENvbnRyb2xsZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fbGVmdENvbnRyb2xsZXIuX2dhemVUcmFja2VyLmlzVmlz
aWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGhp
cy5fcmlnaHRDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JpZ2h0Q29u
dHJvbGxlci5fZ2F6ZVRyYWNrZXIuaXNWaXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlwZSwgImRpc3BsYXlMYXNlclBvaW50ZXIi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0aGUgcmF5IG9mIHRoZSBMYXNlclBvaW50
ZXIgc2hvdWxkIGJlIGRpc3BsYXllZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlMYXNlclBvaW50ZXI7Cisg
ICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIGlmIHRoZSByYXkgb2YgdGhl
IExhc2VyUG9pbnRlciBzaG91bGQgYmUgZGlzcGxheWVkLgorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlMYXNlclBv
aW50ZXIgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fcmlnaHRDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X3JpZ2h0Q29udHJvbGxlci5fZGVhY3RpdmF0ZVBvaW50ZXIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fcmlnaHRDb250cm9sbGVyLl9nYXplVHJhY2tlci5pc1Zpc2libGUgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xlZnRDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xlZnRDb250cm9sbGVyLl9kZWFjdGl2
YXRlUG9pbnRlcigpOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZWZ0Q29udHJvbGxlci5f
Z2F6ZVRyYWNrZXIuaXNWaXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Jp
Z2h0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yaWdodENvbnRyb2xs
ZXIuX2FjdGl2YXRlUG9pbnRlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fbGVmdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
bGVmdENvbnRyb2xsZXIuX2FjdGl2YXRlUG9pbnRlcigpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUsICJkZXZpY2VPcmllbnRhdGlvbkNhbWVyYSIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBkZXZpY2VPcmllbnRhdGlvbkNhbWVyYSB1
c2VkIGFzIHRoZSBjYW1lcmEgd2hlbiBub3QgaW4gVlIuCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2VPcmllbnRh
dGlvbkNhbWVyYTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUsICJjdXJyZW50VlJDYW1lcmEiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBCYXNlZCBvbiB0aGUgY3VycmVudCBXZWJWUiBzdXBwb3J0LCBy
ZXR1cm5zIHRoZSBjdXJyZW50IFZSIGNhbWVyYSB1c2VkLgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fd2ViVlJyZWFkeSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWJWUkNhbWVyYTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZS5h
Y3RpdmVDYW1lcmE7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAid2ViVlJDYW1l
cmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgd2ViVlJDYW1lcmEgd2hpY2ggaXMg
dXNlZCB3aGVuIGluIFZSLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2ViVlJDYW1lcmE7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBl
LCAidnJEZXZpY2VPcmllbnRhdGlvbkNhbWVyYSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFRoZSBkZXZpY2VPcmllbnRhdGlvbkNhbWVyYSB0aGF0IGlzIHVzZWQgYXMgYSBmYWxsYmFjayB3
aGVuIHZyIGRldmljZSBpcyBub3QgY29ubmVjdGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdnJEZXZpY2VPcmllbnRh
dGlvbkNhbWVyYTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUsICJ2ckJ1dHRvbiIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFRoZSBodG1sIGJ1dHRvbiB0aGF0IGlzIHVzZWQgdG8gdHJpZ2dlciBlbnRl
cmluZyBpbnRvIFZSLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fYnRuVlI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAiX3RlbGVw
b3J0YXRpb25SZXF1ZXN0SW5pdGlhdGVkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9jYW1lcmFHYXplci5fdGVsZXBvcnRhdGlv
blJlcXVlc3RJbml0aWF0ZWQKKyAgICAgICAgICAgICAgICB8fCAodGhpcy5fbGVmdENvbnRyb2xs
ZXIgIT09IG51bGwgJiYgdGhpcy5fbGVmdENvbnRyb2xsZXIuX3RlbGVwb3J0YXRpb25SZXF1ZXN0
SW5pdGlhdGVkKQorICAgICAgICAgICAgICAgIHx8ICh0aGlzLl9yaWdodENvbnRyb2xsZXIgIT09
IG51bGwgJiYgdGhpcy5fcmlnaHRDb250cm9sbGVyLl90ZWxlcG9ydGF0aW9uUmVxdWVzdEluaXRp
YXRlZCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICAvLyBSYWlzZWQgd2hlbiBvbmUgb2YgdGhlIGNvbnRyb2xsZXIgaGFzIGxvYWRlZCBzdWNjZXNz
ZnVsbHkgaXRzIGFzc29jaWF0ZWQgZGVmYXVsdCBtZXNoCisgICAgVlJFeHBlcmllbmNlSGVscGVy
LnByb3RvdHlwZS5fb25EZWZhdWx0TWVzaExvYWRlZCA9IGZ1bmN0aW9uICh3ZWJWUkNvbnRyb2xs
ZXIpIHsKKyAgICAgICAgaWYgKHRoaXMuX2xlZnRDb250cm9sbGVyICYmIHRoaXMuX2xlZnRDb250
cm9sbGVyLndlYlZSQ29udHJvbGxlciA9PSB3ZWJWUkNvbnRyb2xsZXIpIHsKKyAgICAgICAgICAg
IGlmICh3ZWJWUkNvbnRyb2xsZXIubWVzaCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2xlZnRD
b250cm9sbGVyLl9zZXRMYXNlclBvaW50ZXJQYXJlbnQod2ViVlJDb250cm9sbGVyLm1lc2gpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9yaWdodENvbnRyb2xs
ZXIgJiYgdGhpcy5fcmlnaHRDb250cm9sbGVyLndlYlZSQ29udHJvbGxlciA9PSB3ZWJWUkNvbnRy
b2xsZXIpIHsKKyAgICAgICAgICAgIGlmICh3ZWJWUkNvbnRyb2xsZXIubWVzaCkgeworICAgICAg
ICAgICAgICAgIHRoaXMuX3JpZ2h0Q29udHJvbGxlci5fc2V0TGFzZXJQb2ludGVyUGFyZW50KHdl
YlZSQ29udHJvbGxlci5tZXNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0
cnkgeworICAgICAgICAgICAgdGhpcy5vbkNvbnRyb2xsZXJNZXNoTG9hZGVkT2JzZXJ2YWJsZS5u
b3RpZnlPYnNlcnZlcnMod2ViVlJDb250cm9sbGVyKTsKKyAgICAgICAgfQorICAgICAgICBjYXRj
aCAoZXJyKSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siTG9nZ2VyIl0uV2FybigiRXJyb3IgaW4geW91ciBjdXN0b20gbG9naWMgb25Db250
cm9sbGVyTWVzaExvYWRlZDogIiArIGVycik7CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLCAiaXNJblZSTW9k
ZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIGlm
IHdlIGFyZSBjdXJyZW50bHkgaW4gVlIgbW9kZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlYlZScHJlc2VudGluZyB8
fCB0aGlzLl9mdWxsc2NyZWVuVlJwcmVzZW50aW5nOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBW
UkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLm9uVnJEaXNwbGF5UHJlc2VudENoYW5nZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHZyRGlzcGxheSA9IHRoaXMuX3NjZW5lLmdldEVuZ2lu
ZSgpLmdldFZSRGV2aWNlKCk7CisgICAgICAgIGlmICh2ckRpc3BsYXkpIHsKKyAgICAgICAgICAg
IHZhciB3YXNQcmVzZW50aW5nID0gdGhpcy5fd2ViVlJwcmVzZW50aW5nOworICAgICAgICAgICAg
dGhpcy5fd2ViVlJwcmVzZW50aW5nID0gdnJEaXNwbGF5LmlzUHJlc2VudGluZzsKKyAgICAgICAg
ICAgIGlmICh3YXNQcmVzZW50aW5nICYmICF0aGlzLl93ZWJWUnByZXNlbnRpbmcpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLmV4aXRWUigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIkxvZ2dlciJdLldhcm4oJ0RldGVjdGVkIFZSRGlzcGxheVByZXNlbnRDaGFuZ2Ug
b24gYW4gdW5rbm93biBWUkRpc3BsYXkuIERpZCB5b3UgY2FuIGVudGVyVlIgb24gdGhlIHZyRXhw
ZXJpZW5jZUhlbHBlcj8nKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvblZp
c2liaWxpdHkoKTsKKyAgICB9OworICAgIFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUub25W
UkRpc3BsYXlDaGFuZ2VkID0gZnVuY3Rpb24gKGV2ZW50QXJncykgeworICAgICAgICB0aGlzLl93
ZWJWUnN1cHBvcnRlZCA9IGV2ZW50QXJncy52clN1cHBvcnRlZDsKKyAgICAgICAgdGhpcy5fd2Vi
VlJyZWFkeSA9ICEhZXZlbnRBcmdzLnZyRGlzcGxheTsKKyAgICAgICAgdGhpcy5fd2ViVlJwcmVz
ZW50aW5nID0gZXZlbnRBcmdzLnZyRGlzcGxheSAmJiBldmVudEFyZ3MudnJEaXNwbGF5LmlzUHJl
c2VudGluZzsKKyAgICAgICAgdGhpcy51cGRhdGVCdXR0b25WaXNpYmlsaXR5KCk7CisgICAgfTsK
KyAgICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLm1vdmVCdXR0b25Ub0JvdHRvbVJpZ2h0
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fY2FudmFzICYmICF0aGlzLl91c2VD
dXN0b21WUkJ1dHRvbiAmJiB0aGlzLl9idG5WUikgeworICAgICAgICAgICAgdmFyIHJlY3QgPSB0
aGlzLl9jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgICAgICB0aGlzLl9i
dG5WUi5zdHlsZS50b3AgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC0gNzAgKyAicHgiOworICAg
ICAgICAgICAgdGhpcy5fYnRuVlIuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIHJlY3Qud2lkdGgg
LSAxMDAgKyAicHgiOworICAgICAgICB9CisgICAgfTsKKyAgICBWUkV4cGVyaWVuY2VIZWxwZXIu
cHJvdG90eXBlLmRpc3BsYXlWUkJ1dHRvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0
aGlzLl91c2VDdXN0b21WUkJ1dHRvbiAmJiAhdGhpcy5fYnRuVlJEaXNwbGF5ZWQgJiYgdGhpcy5f
YnRuVlIpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fYnRu
VlIpOworICAgICAgICAgICAgdGhpcy5fYnRuVlJEaXNwbGF5ZWQgPSB0cnVlOworICAgICAgICB9
CisgICAgfTsKKyAgICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLnVwZGF0ZUJ1dHRvblZp
c2liaWxpdHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fYnRuVlIgfHwgdGhp
cy5fdXNlQ3VzdG9tVlJCdXR0b24pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9idG5WUi5jbGFzc05hbWUgPSAiYmFieWxvblZSaWNvbiI7CisgICAgICAg
IGlmICh0aGlzLmlzSW5WUk1vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J0blZSLmNsYXNzTmFt
ZSArPSAiIHZyZGlzcGxheXByZXNlbnRpbmciOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgaWYgKHRoaXMuX3dlYlZScmVhZHkpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9idG5WUi5jbGFzc05hbWUgKz0gIiB2cmRpc3BsYXlyZWFkeSI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAodGhpcy5fd2ViVlJzdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9idG5WUi5jbGFzc05hbWUgKz0gIiB2cmRpc3BsYXlzdXBwb3J0ZWQiOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX3dlYlZScmVxdWVzdGluZykgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2J0blZSLmNsYXNzTmFtZSArPSAiIHZyZGlzcGxheXJlcXVlc3RpbmciOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRlbXB0
IHRvIGVudGVyIFZSLiBJZiBhIGhlYWRzZXQgaXMgY29ubmVjdGVkIGFuZCByZWFkeSwgd2lsbCBy
ZXF1ZXN0IHByZXNlbnQgb24gdGhhdC4KKyAgICAgKiBPdGhlcndpc2UsIHdpbGwgdXNlIHRoZSBm
dWxsc2NyZWVuIEFQSS4KKyAgICAgKi8KKyAgICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBl
LmVudGVyVlIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIGlmICh0aGlzLm9uRW50ZXJpbmdWUk9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIHRyeSB7
CisgICAgICAgICAgICAgICAgdGhpcy5vbkVudGVyaW5nVlJPYnNlcnZhYmxlLm5vdGlmeU9ic2Vy
dmVycyh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChlcnIpIHsKKyAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TG9nZ2VyIl0uV2FybigiRXJyb3IgaW4geW91ciBjdXN0b20gbG9naWMgb25FbnRlcmluZ1ZSOiAi
ICsgZXJyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc2Nl
bmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHRoaXMuX3Nj
ZW5lLmFjdGl2ZUNhbWVyYS5wb3NpdGlvbi5jbG9uZSgpOworICAgICAgICAgICAgaWYgKHRoaXMu
dnJEZXZpY2VPcmllbnRhdGlvbkNhbWVyYSkgeworICAgICAgICAgICAgICAgIHRoaXMudnJEZXZp
Y2VPcmllbnRhdGlvbkNhbWVyYS5yb3RhdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJRdWF0ZXJuaW9uIl0uRnJvbVJvdGF0aW9uTWF0cml4KHRo
aXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5nZXRXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4
KCkpLnRvRXVsZXJBbmdsZXMoKTsKKyAgICAgICAgICAgICAgICB0aGlzLnZyRGV2aWNlT3JpZW50
YXRpb25DYW1lcmEuYW5ndWxhclNlbnNpYmlsaXR5ID0gMjAwMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0aGlzLndlYlZSQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgdmFyIGN1
cnJlbnRZUm90YXRpb24gPSB0aGlzLndlYlZSQ2FtZXJhLmRldmljZVJvdGF0aW9uUXVhdGVybmlv
bi50b0V1bGVyQW5nbGVzKCkueTsKKyAgICAgICAgICAgICAgICB2YXIgZGVzaXJlZFlSb3RhdGlv
biA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJRdWF0
ZXJuaW9uIl0uRnJvbVJvdGF0aW9uTWF0cml4KHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5nZXRX
b3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4KCkpLnRvRXVsZXJBbmdsZXMoKS55OworICAg
ICAgICAgICAgICAgIHZhciBkZWx0YSA9IGRlc2lyZWRZUm90YXRpb24gLSBjdXJyZW50WVJvdGF0
aW9uOworICAgICAgICAgICAgICAgIHZhciBjdXJyZW50R2xvYmFsUm90YXRpb24gPSB0aGlzLndl
YlZSQ2FtZXJhLnJvdGF0aW9uUXVhdGVybmlvbi50b0V1bGVyQW5nbGVzKCkueTsKKyAgICAgICAg
ICAgICAgICB0aGlzLndlYlZSQ2FtZXJhLnJvdGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJRdWF0ZXJuaW9uIl0uRnJvbUV1
bGVyQW5nbGVzKDAsIGN1cnJlbnRHbG9iYWxSb3RhdGlvbiArIGRlbHRhLCAwKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHdlIHJldHVybiB0byB0aGUgbGFz
dCBhY3RpdmUgY2FtZXJhCisgICAgICAgICAgICB0aGlzLl9leGlzdGluZ0NhbWVyYSA9IHRoaXMu
X3NjZW5lLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBhbmQgY2FjaGUgYW5n
dWxhciBzZW5zYWJpbGl0eSB0byBhdm9pZCBjYW1lcmEgcm90YXRpb24gd2hlbiBpbiBWUgorICAg
ICAgICAgICAgaWYgKHRoaXMuX2V4aXN0aW5nQ2FtZXJhLmFuZ3VsYXJTZW5zaWJpbGl0eVgpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRBbmd1bGFyU2Vuc2liaWxpdHkuYW5ndWxhclNl
bnNpYmlsaXR5WCA9IHRoaXMuX2V4aXN0aW5nQ2FtZXJhLmFuZ3VsYXJTZW5zaWJpbGl0eVg7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdDYW1lcmEuYW5ndWxhclNlbnNpYmlsaXR5WCA9
IE51bWJlci5NQVhfVkFMVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5f
ZXhpc3RpbmdDYW1lcmEuYW5ndWxhclNlbnNpYmlsaXR5WSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX2NhY2hlZEFuZ3VsYXJTZW5zaWJpbGl0eS5hbmd1bGFyU2Vuc2liaWxpdHlZID0gdGhpcy5f
ZXhpc3RpbmdDYW1lcmEuYW5ndWxhclNlbnNpYmlsaXR5WTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9leGlzdGluZ0NhbWVyYS5hbmd1bGFyU2Vuc2liaWxpdHlZID0gTnVtYmVyLk1BWF9WQUxVRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9leGlzdGluZ0NhbWVyYS5hbmd1
bGFyU2Vuc2liaWxpdHkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRBbmd1bGFyU2Vu
c2liaWxpdHkuYW5ndWxhclNlbnNpYmlsaXR5ID0gdGhpcy5fZXhpc3RpbmdDYW1lcmEuYW5ndWxh
clNlbnNpYmlsaXR5OworICAgICAgICAgICAgICAgIHRoaXMuX2V4aXN0aW5nQ2FtZXJhLmFuZ3Vs
YXJTZW5zaWJpbGl0eSA9IE51bWJlci5NQVhfVkFMVUU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuX3dlYlZScmVxdWVzdGluZykgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIC8vIElmIFdlYlZSIGlzIHN1cHBvcnRlZCBhbmQgYSBo
ZWFkc2V0IGlzIGNvbm5lY3RlZAorICAgICAgICBpZiAodGhpcy5fd2ViVlJyZWFkeSkgeworICAg
ICAgICAgICAgaWYgKCF0aGlzLl93ZWJWUnByZXNlbnRpbmcpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5vblZSUmVxdWVzdFByZXNlbnRDb21wbGV0ZS5hZGRPbmNl
KGZ1bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25BZnRlckVu
dGVyaW5nVlJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7IHN1Y2Nlc3M6IHJlc3VsdCB9KTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB0aGlzLl93ZWJWUkNhbWVyYS5w
b3NpdGlvbiA9IHRoaXMuX3Bvc2l0aW9uOworICAgICAgICAgICAgICAgIHRoaXMuX3NjZW5lLmFj
dGl2ZUNhbWVyYSA9IHRoaXMuX3dlYlZSQ2FtZXJhOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX3ZyRGV2aWNlT3JpZW50YXRpb25DYW1lcmEpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3ZyRGV2aWNlT3JpZW50YXRpb25DYW1lcmEucG9zaXRpb24gPSB0aGlz
Ll9wb3NpdGlvbjsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl92ckRldmljZU9yaWVudGF0aW9uQ2FtZXJhLm1pblogPSB0
aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEubWluWjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSA9IHRoaXMuX3ZyRGV2aWNlT3JpZW50YXRpb25DYW1l
cmE7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5lbnRlckZ1bGxzY3JlZW4o
dGhpcy5yZXF1ZXN0UG9pbnRlckxvY2tPbkZ1bGxTY3JlZW4pOworICAgICAgICAgICAgdGhpcy51
cGRhdGVCdXR0b25WaXNpYmlsaXR5KCk7CisgICAgICAgICAgICB0aGlzLl92ckRldmljZU9yaWVu
dGF0aW9uQ2FtZXJhLm9uVmlld01hdHJpeENoYW5nZWRPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLm9uQWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJs
ZS5ub3RpZnlPYnNlcnZlcnMoeyBzdWNjZXNzOiB0cnVlIH0pOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSAmJiB0aGlzLl9j
YW52YXMpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5hdHRhY2hDb250
cm9sKHRoaXMuX2NhbnZhcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2ludGVyYWN0
aW9uc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLnJlZ2lzdGVyQmVmb3JlUmVu
ZGVyKHRoaXMuYmVmb3JlUmVuZGVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZGlz
cGxheUxhc2VyUG9pbnRlcikgeworICAgICAgICAgICAgW3RoaXMuX2xlZnRDb250cm9sbGVyLCB0
aGlzLl9yaWdodENvbnRyb2xsZXJdLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY29udHJvbGxlcikgeworICAgICAgICAgICAgICAgICAgICBjb250
cm9sbGVyLl9hY3RpdmF0ZVBvaW50ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9oYXNFbnRlcmVkVlIgPSB0cnVlOworICAg
IH07CisgICAgLyoqCisgICAgICogQXR0ZW1wdCB0byBleGl0IFZSLCBvciBmdWxsc2NyZWVuLgor
ICAgICAqLworICAgIFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUuZXhpdFZSID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBpZiAodGhpcy5faGFzRW50ZXJlZFZSKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5vbkV4aXRpbmdWUk9ic2VydmFibGUpIHsKKyAgICAgICAgICAgICAgICB0cnkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXhpdGluZ1ZST2JzZXJ2YWJsZS5ub3RpZnlPYnNl
cnZlcnModGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoIChl
cnIpIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4oIkVycm9yIGluIHlvdXIgY3VzdG9tIGxvZ2ljIG9u
RXhpdGluZ1ZSOiAiICsgZXJyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAodGhpcy5fd2ViVlJwcmVzZW50aW5nKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZGlzYWJsZVZSKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fcG9zaXRpb24gPSB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEucG9zaXRpb24uY2xvbmUo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLnZyRGV2aWNlT3JpZW50YXRp
b25DYW1lcmEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnZyRGV2aWNlT3JpZW50YXRpb25DYW1l
cmEuYW5ndWxhclNlbnNpYmlsaXR5ID0gTnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2VPcmllbnRhdGlvbkNhbWVyYSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuX2RldmljZU9yaWVudGF0aW9uQ2FtZXJhLnBvc2l0aW9uID0gdGhpcy5f
cG9zaXRpb247CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhID0gdGhp
cy5fZGV2aWNlT3JpZW50YXRpb25DYW1lcmE7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Nh
bnZhcykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEuYXR0
YWNoQ29udHJvbCh0aGlzLl9jYW52YXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAvLyBSZXN0b3JlIGFuZ3VsYXIgc2Vuc2liaWxpdHkKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fY2FjaGVkQW5ndWxhclNlbnNpYmlsaXR5LmFuZ3VsYXJTZW5zaWJpbGl0eVgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlT3JpZW50YXRpb25DYW1lcmEuYW5ndWxhclNl
bnNpYmlsaXR5WCA9IHRoaXMuX2NhY2hlZEFuZ3VsYXJTZW5zaWJpbGl0eS5hbmd1bGFyU2Vuc2li
aWxpdHlYOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRBbmd1bGFyU2Vuc2liaWxp
dHkuYW5ndWxhclNlbnNpYmlsaXR5WCA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRBbmd1bGFyU2Vuc2liaWxpdHkuYW5ndWxhclNlbnNp
YmlsaXR5WSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VPcmllbnRhdGlvbkNh
bWVyYS5hbmd1bGFyU2Vuc2liaWxpdHlZID0gdGhpcy5fY2FjaGVkQW5ndWxhclNlbnNpYmlsaXR5
LmFuZ3VsYXJTZW5zaWJpbGl0eVk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZEFu
Z3VsYXJTZW5zaWJpbGl0eS5hbmd1bGFyU2Vuc2liaWxpdHlZID0gbnVsbDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZEFuZ3VsYXJTZW5zaWJpbGl0
eS5hbmd1bGFyU2Vuc2liaWxpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNl
T3JpZW50YXRpb25DYW1lcmEuYW5ndWxhclNlbnNpYmlsaXR5ID0gdGhpcy5fY2FjaGVkQW5ndWxh
clNlbnNpYmlsaXR5LmFuZ3VsYXJTZW5zaWJpbGl0eTsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5fY2FjaGVkQW5ndWxhclNlbnNpYmlsaXR5LmFuZ3VsYXJTZW5zaWJpbGl0eSA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhp
cy5fZXhpc3RpbmdDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9leGlzdGluZ0NhbWVy
YS5wb3NpdGlvbiA9IHRoaXMuX3Bvc2l0aW9uOworICAgICAgICAgICAgICAgIHRoaXMuX3NjZW5l
LmFjdGl2ZUNhbWVyYSA9IHRoaXMuX2V4aXN0aW5nQ2FtZXJhOworICAgICAgICAgICAgICAgIC8v
IFJlc3RvcmUgYW5ndWxhciBzZW5zaWJpbGl0eQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9j
YWNoZWRBbmd1bGFyU2Vuc2liaWxpdHkuYW5ndWxhclNlbnNpYmlsaXR5WCkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9leGlzdGluZ0NhbWVyYS5hbmd1bGFyU2Vuc2liaWxpdHlYID0gdGhp
cy5fY2FjaGVkQW5ndWxhclNlbnNpYmlsaXR5LmFuZ3VsYXJTZW5zaWJpbGl0eVg7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX2NhY2hlZEFuZ3VsYXJTZW5zaWJpbGl0eS5hbmd1bGFyU2Vuc2li
aWxpdHlYID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX2NhY2hlZEFuZ3VsYXJTZW5zaWJpbGl0eS5hbmd1bGFyU2Vuc2liaWxpdHlZKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2V4aXN0aW5nQ2FtZXJhLmFuZ3VsYXJTZW5zaWJpbGl0eVkg
PSB0aGlzLl9jYWNoZWRBbmd1bGFyU2Vuc2liaWxpdHkuYW5ndWxhclNlbnNpYmlsaXR5WTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkQW5ndWxhclNlbnNpYmlsaXR5LmFuZ3VsYXJT
ZW5zaWJpbGl0eVkgPSBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fY2FjaGVkQW5ndWxhclNlbnNpYmlsaXR5LmFuZ3VsYXJTZW5zaWJpbGl0eSkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9leGlzdGluZ0NhbWVyYS5hbmd1bGFyU2Vuc2liaWxp
dHkgPSB0aGlzLl9jYWNoZWRBbmd1bGFyU2Vuc2liaWxpdHkuYW5ndWxhclNlbnNpYmlsaXR5Owor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRBbmd1bGFyU2Vuc2liaWxpdHkuYW5ndWxh
clNlbnNpYmlsaXR5ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvblZpc2liaWxpdHkoKTsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9pbnRlcmFjdGlvbnNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2Nl
bmUudW5yZWdpc3RlckJlZm9yZVJlbmRlcih0aGlzLmJlZm9yZVJlbmRlcik7CisgICAgICAgICAg
ICAgICAgdGhpcy5fY2FtZXJhR2F6ZXIuX2dhemVUcmFja2VyLmlzVmlzaWJsZSA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sZWZ0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9sZWZ0Q29udHJvbGxlci5fZ2F6ZVRyYWNrZXIuaXNWaXNpYmxlID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yaWdodENv
bnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRDb250cm9sbGVyLl9n
YXplVHJhY2tlci5pc1Zpc2libGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyByZXNpemUgdG8gdXBkYXRlIHdpZHRoIGFuZCBoZWlnaHQg
d2hlbiBleGl0aW5nIHZyIGV4aXRzIGZ1bGxzY3JlZW4KKyAgICAgICAgICAgIHRoaXMuX3NjZW5l
LmdldEVuZ2luZSgpLnJlc2l6ZSgpOworICAgICAgICAgICAgW3RoaXMuX2xlZnRDb250cm9sbGVy
LCB0aGlzLl9yaWdodENvbnRyb2xsZXJdLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHsK
KyAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlcikgeworICAgICAgICAgICAgICAgICAgICBj
b250cm9sbGVyLl9kZWFjdGl2YXRlUG9pbnRlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5faGFzRW50ZXJlZFZSID0gZmFsc2U7CisgICAg
ICAgICAgICAvLyBVcGRhdGUgZW5naW5lIHN0YXRlIHRvIHJlIGVuYWJsZSBub24tdnIgY2FtZXJh
IGlucHV0CisgICAgICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7
CisgICAgICAgICAgICBpZiAoZW5naW5lLl9vblZyRGlzcGxheVByZXNlbnRDaGFuZ2UpIHsKKyAg
ICAgICAgICAgICAgICBlbmdpbmUuX29uVnJEaXNwbGF5UHJlc2VudENoYW5nZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVlJF
eHBlcmllbmNlSGVscGVyLnByb3RvdHlwZSwgInBvc2l0aW9uIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSB2ciBleHBlcmllbmNlIGhlbHBlci4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3Bvc2l0aW9uOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0
aGUgcG9zaXRpb24gb2YgdGhlIHZyIGV4cGVyaWVuY2UgaGVscGVyLgorICAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9u
ID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLnBvc2l0aW9uID0gdmFsdWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEVuYWJs
ZXMgY29udHJvbGxlcnMgYW5kIHVzZXIgaW50ZXJhY3Rpb25zIHN1Y2ggYXMgc2VsZWN0aW5nIGFu
ZCBvYmplY3Qgb3IgY2xpY2tpbmcgb24gYW4gb2JqZWN0LgorICAgICAqLworICAgIFZSRXhwZXJp
ZW5jZUhlbHBlci5wcm90b3R5cGUuZW5hYmxlSW50ZXJhY3Rpb25zID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoIXRoaXMuX2ludGVyYWN0aW9u
c0VuYWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2ludGVyYWN0aW9uc1JlcXVlc3RlZCA9IHRy
dWU7CisgICAgICAgICAgICBpZiAodGhpcy5fbGVmdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9lbmFibGVJbnRlcmFjdGlvbk9uQ29udHJvbGxlcih0aGlzLl9sZWZ0Q29udHJv
bGxlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fcmlnaHRDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlSW50ZXJhY3Rpb25PbkNvbnRyb2xs
ZXIodGhpcy5fcmlnaHRDb250cm9sbGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMucmF5U2VsZWN0aW9uUHJlZGljYXRlID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWVzaC5pc1Zpc2libGUgJiYgKG1lc2guaXNQaWNrYWJsZSB8fCBtZXNoLm5h
bWUgPT09IF90aGlzLl9mbG9vck1lc2hOYW1lKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB0aGlzLm1lc2hTZWxlY3Rpb25QcmVkaWNhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdGhpcy5fcmF5
U2VsZWN0aW9uUHJlZGljYXRlID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoX3RoaXMuX2lzVGVsZXBvcnRhdGlvbkZsb29yKG1lc2gpIHx8IChtZXNoLm5hbWUuaW5kZXhP
ZigiZ2F6ZVRyYWNrZXIiKSA9PT0gLTEKKyAgICAgICAgICAgICAgICAgICAgJiYgbWVzaC5uYW1l
LmluZGV4T2YoInRlbGVwb3J0YXRpb25UYXJnZXQiKSA9PT0gLTEKKyAgICAgICAgICAgICAgICAg
ICAgJiYgbWVzaC5uYW1lLmluZGV4T2YoInRvcnVzVGVsZXBvcnRhdGlvbiIpID09PSAtMSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnJheVNlbGVjdGlvblByZWRpY2F0ZSht
ZXNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRoaXMuX2ludGVyYWN0aW9uc0VuYWJsZWQgPSB0
cnVlOworICAgICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVlJFeHBl
cmllbmNlSGVscGVyLnByb3RvdHlwZSwgIl9ub0NvbnRyb2xsZXJJc0FjdGl2ZSIsIHsKKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gISh0aGlzLl9sZWZ0Q29u
dHJvbGxlciAmJiB0aGlzLl9sZWZ0Q29udHJvbGxlci5fYWN0aXZlUG9pbnRlcikgJiYgISh0aGlz
Ll9yaWdodENvbnRyb2xsZXIgJiYgdGhpcy5fcmlnaHRDb250cm9sbGVyLl9hY3RpdmVQb2ludGVy
KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlwZS5f
aXNUZWxlcG9ydGF0aW9uRmxvb3IgPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMuX2Zsb29yTWVzaGVzQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgaWYgKHRoaXMuX2Zsb29yTWVzaGVzQ29sbGVjdGlvbltpXS5pZCA9PT0gbWVz
aC5pZCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLl9mbG9vck1lc2hOYW1lICYmIG1lc2gubmFtZSA9PT0g
dGhpcy5fZmxvb3JNZXNoTmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBh
IGZsb29yIG1lc2ggdG8gYmUgdXNlZCBmb3IgdGVsZXBvcnRhdGlvbi4KKyAgICAgKiBAcGFyYW0g
Zmxvb3JNZXNoIHRoZSBtZXNoIHRvIGJlIHVzZWQgZm9yIHRlbGVwb3J0YXRpb24uCisgICAgICov
CisgICAgVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlwZS5hZGRGbG9vck1lc2ggPSBmdW5jdGlv
biAoZmxvb3JNZXNoKSB7CisgICAgICAgIGlmICghdGhpcy5fZmxvb3JNZXNoZXNDb2xsZWN0aW9u
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2Zs
b29yTWVzaGVzQ29sbGVjdGlvbi5pbmRleE9mKGZsb29yTWVzaCkgPiAtMSkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Zsb29yTWVzaGVzQ29sbGVjdGlv
bi5wdXNoKGZsb29yTWVzaCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGEgZmxv
b3IgbWVzaCBmcm9tIGJlaW5nIHVzZWQgZm9yIHRlbGVwb3J0YXRpb24uCisgICAgICogQHBhcmFt
IGZsb29yTWVzaCB0aGUgbWVzaCB0byBiZSByZW1vdmVkLgorICAgICAqLworICAgIFZSRXhwZXJp
ZW5jZUhlbHBlci5wcm90b3R5cGUucmVtb3ZlRmxvb3JNZXNoID0gZnVuY3Rpb24gKGZsb29yTWVz
aCkgeworICAgICAgICBpZiAoIXRoaXMuX2Zsb29yTWVzaGVzQ29sbGVjdGlvbikgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBtZXNoSW5kZXggPSB0aGlzLl9m
bG9vck1lc2hlc0NvbGxlY3Rpb24uaW5kZXhPZihmbG9vck1lc2gpOworICAgICAgICBpZiAobWVz
aEluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgdGhpcy5fZmxvb3JNZXNoZXNDb2xsZWN0aW9u
LnNwbGljZShtZXNoSW5kZXgsIDEpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBFbmFibGVzIGludGVyYWN0aW9ucyBhbmQgdGVsZXBvcnRhdGlvbiB1c2luZyB0aGUgVlIgY29u
dHJvbGxlcnMgYW5kIGdhemUuCisgICAgICogQHBhcmFtIHZyVGVsZXBvcnRhdGlvbk9wdGlvbnMg
b3B0aW9ucyB0byBtb2RpZnkgdGVsZXBvcnRhdGlvbiBiZWhhdmlvci4KKyAgICAgKi8KKyAgICBW
UkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLmVuYWJsZVRlbGVwb3J0YXRpb24gPSBmdW5jdGlv
biAodnJUZWxlcG9ydGF0aW9uT3B0aW9ucykgeworICAgICAgICBpZiAodnJUZWxlcG9ydGF0aW9u
T3B0aW9ucyA9PT0gdm9pZCAwKSB7IHZyVGVsZXBvcnRhdGlvbk9wdGlvbnMgPSB7fTsgfQorICAg
ICAgICBpZiAoIXRoaXMuX3RlbGVwb3J0YXRpb25Jbml0aWFsaXplZCkgeworICAgICAgICAgICAg
dGhpcy5fdGVsZXBvcnRhdGlvblJlcXVlc3RlZCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLmVu
YWJsZUludGVyYWN0aW9ucygpOworICAgICAgICAgICAgaWYgKHZyVGVsZXBvcnRhdGlvbk9wdGlv
bnMuZmxvb3JNZXNoTmFtZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2Zsb29yTWVzaE5hbWUg
PSB2clRlbGVwb3J0YXRpb25PcHRpb25zLmZsb29yTWVzaE5hbWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAodnJUZWxlcG9ydGF0aW9uT3B0aW9ucy5mbG9vck1lc2hlcykgeworICAg
ICAgICAgICAgICAgIHRoaXMuX2Zsb29yTWVzaGVzQ29sbGVjdGlvbiA9IHZyVGVsZXBvcnRhdGlv
bk9wdGlvbnMuZmxvb3JNZXNoZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhp
cy5fbGVmdENvbnRyb2xsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJs
ZVRlbGVwb3J0YXRpb25PbkNvbnRyb2xsZXIodGhpcy5fbGVmdENvbnRyb2xsZXIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX3JpZ2h0Q29udHJvbGxlciAhPSBudWxsKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlVGVsZXBvcnRhdGlvbk9uQ29udHJvbGxlcih0
aGlzLl9yaWdodENvbnRyb2xsZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ3Jl
YXRlcyBhbiBpbWFnZSBwcm9jZXNzaW5nIHBvc3QgcHJvY2VzcyBmb3IgdGhlIHZpZ25ldHRlIG5v
dCByZWx5aW5nCisgICAgICAgICAgICAvLyBvbiB0aGUgbWFpbiBzY2VuZSBjb25maWd1cmF0aW9u
IGZvciBpbWFnZSBwcm9jZXNzaW5nIHRvIHJlZHVjZSBzZXR1cCBhbmQgc3BhY2VzCisgICAgICAg
ICAgICAvLyAoZ2FtbWEvbGluZWFyKSBjb25mbGljdHMuCisgICAgICAgICAgICB2YXIgaW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbiA9IG5ldyBfTWF0ZXJpYWxzX2ltYWdlUHJvY2Vzc2luZ0Nv
bmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bIkltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24iXSgpOworICAgICAgICAgICAgaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbi52aWduZXR0ZUNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xMF9fWyJDb2xvcjQiXSgwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIGltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udmlnbmV0dGVFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHRoaXMuX3Bvc3RQcm9jZXNzTW92ZSA9IG5ldyBfUG9zdFByb2Nlc3Nlc19pbWFnZVByb2Nl
c3NpbmdQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siSW1hZ2VQcm9j
ZXNzaW5nUG9zdFByb2Nlc3MiXSgicG9zdFByb2Nlc3NNb3ZlIiwgMS4wLCB0aGlzLl93ZWJWUkNh
bWVyYSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBpbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uKTsKKyAgICAgICAgICAgIHRoaXMuX3dlYlZSQ2FtZXJhLmRl
dGFjaFBvc3RQcm9jZXNzKHRoaXMuX3Bvc3RQcm9jZXNzTW92ZSk7CisgICAgICAgICAgICB0aGlz
Ll90ZWxlcG9ydGF0aW9uSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKHRoaXMu
X2lzRGVmYXVsdFRlbGVwb3J0YXRpb25UYXJnZXQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9j
cmVhdGVUZWxlcG9ydGF0aW9uQ2lyY2xlcygpOworICAgICAgICAgICAgICAgIHRoaXMuX3RlbGVw
b3J0YXRpb25UYXJnZXQuc2NhbGluZy5zY2FsZUluUGxhY2UodGhpcy5fd2ViVlJDYW1lcmEuZGV2
aWNlU2NhbGVGYWN0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBW
UkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLl9lbmFibGVJbnRlcmFjdGlvbk9uQ29udHJvbGxl
ciA9IGZ1bmN0aW9uIChjb250cm9sbGVyKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIHZhciBjb250cm9sbGVyTWVzaCA9IGNvbnRyb2xsZXIud2ViVlJDb250cm9sbGVyLm1l
c2g7CisgICAgICAgIGlmIChjb250cm9sbGVyTWVzaCkgeworICAgICAgICAgICAgY29udHJvbGxl
ci5faW50ZXJhY3Rpb25zRW5hYmxlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAodGhpcy5pc0lu
VlJNb2RlICYmIHRoaXMuX2Rpc3BsYXlMYXNlclBvaW50ZXIpIHsKKyAgICAgICAgICAgICAgICBj
b250cm9sbGVyLl9hY3RpdmF0ZVBvaW50ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0aGlzLndlYlZST3B0aW9ucy5sYXNlclRvZ2dsZSkgeworICAgICAgICAgICAgICAgIGNv
bnRyb2xsZXIud2ViVlJDb250cm9sbGVyLm9uTWFpbkJ1dHRvblN0YXRlQ2hhbmdlZE9ic2VydmFi
bGUuYWRkKGZ1bmN0aW9uIChzdGF0ZU9iamVjdCkgeworICAgICAgICAgICAgICAgICAgICAvLyBF
bmFibGluZyAvIGRpc2FibGluZyBsYXNlclBvaW50ZXIKKyAgICAgICAgICAgICAgICAgICAgaWYg
KF90aGlzLl9kaXNwbGF5TGFzZXJQb2ludGVyICYmIHN0YXRlT2JqZWN0LnZhbHVlID09PSAxKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fYWN0aXZlUG9pbnRlcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX2RlYWN0aXZhdGVQb2lu
dGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9hY3RpdmF0
ZVBvaW50ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChfdGhpcy5kaXNwbGF5R2F6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRyb2xsZXIuX2dhemVUcmFja2VyLmlzVmlzaWJsZSA9IGNvbnRyb2xsZXIuX2FjdGl2
ZVBvaW50ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRy
b2xsZXIud2ViVlJDb250cm9sbGVyLm9uVHJpZ2dlclN0YXRlQ2hhbmdlZE9ic2VydmFibGUuYWRk
KGZ1bmN0aW9uIChzdGF0ZU9iamVjdCkgeworICAgICAgICAgICAgICAgIHZhciBnYXplciA9IGNv
bnRyb2xsZXI7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9ub0NvbnRyb2xsZXJJc0FjdGl2
ZSkgeworICAgICAgICAgICAgICAgICAgICBnYXplciA9IF90aGlzLl9jYW1lcmFHYXplcjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFnYXplci5fcG9pbnRlckRvd25P
bk1lc2hBc2tlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QudmFsdWUg
PiBfdGhpcy5fcGFkU2Vuc2liaWxpdHlVcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ2F6
ZXIuX3NlbGVjdGlvblBvaW50ZXJEb3duKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGVPYmplY3QudmFsdWUg
PCBfdGhpcy5fcGFkU2Vuc2liaWxpdHlEb3duKSB7CisgICAgICAgICAgICAgICAgICAgIGdhemVy
Ll9zZWxlY3Rpb25Qb2ludGVyVXAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlwZS5f
Y2hlY2tUZWxlcG9ydFdpdGhSYXkgPSBmdW5jdGlvbiAoc3RhdGVPYmplY3QsIGdhemVyKSB7Cisg
ICAgICAgIC8vIERvbnQgdGVsZXBvcnQgaWYgYW5vdGhlciBnYXplIGFscmVhZHkgcmVxdWVzdGVk
IHRlbGVwb3J0YXRpb24KKyAgICAgICAgaWYgKHRoaXMuX3RlbGVwb3J0YXRpb25SZXF1ZXN0SW5p
dGlhdGVkICYmICFnYXplci5fdGVsZXBvcnRhdGlvblJlcXVlc3RJbml0aWF0ZWQpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWdhemVyLl90ZWxlcG9ydGF0
aW9uUmVxdWVzdEluaXRpYXRlZCkgeworICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LnkgPCAt
dGhpcy5fcGFkU2Vuc2liaWxpdHlVcCAmJiBnYXplci5fZHBhZFByZXNzZWQpIHsKKyAgICAgICAg
ICAgICAgICBnYXplci5fYWN0aXZhdGVQb2ludGVyKCk7CisgICAgICAgICAgICAgICAgZ2F6ZXIu
X3RlbGVwb3J0YXRpb25SZXF1ZXN0SW5pdGlhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIExpc3RlbmluZyB0byB0aGUg
cHJvcGVyIGNvbnRyb2xsZXIgdmFsdWVzIGNoYW5nZXMgdG8gY29uZmlybSB0ZWxlcG9ydGF0aW9u
CisgICAgICAgICAgICBpZiAoTWF0aC5zcXJ0KHN0YXRlT2JqZWN0LnkgKiBzdGF0ZU9iamVjdC55
ICsgc3RhdGVPYmplY3QueCAqIHN0YXRlT2JqZWN0LngpIDwgdGhpcy5fcGFkU2Vuc2liaWxpdHlE
b3duKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RlbGVwb3J0QWN0aXZlKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMudGVsZXBvcnRDYW1lcmEodGhpcy5faGFsb0NlbnRlcik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdhemVyLl90ZWxlcG9ydGF0aW9uUmVx
dWVzdEluaXRpYXRlZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
KyAgICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLl9jaGVja1JvdGF0ZSA9IGZ1bmN0aW9u
IChzdGF0ZU9iamVjdCwgZ2F6ZXIpIHsKKyAgICAgICAgLy8gT25seSByb3RhdGUgd2hlbiB1c2Vy
IGlzIG5vdCBjdXJyZW50bHkgc2VsZWN0aW5nIGEgdGVsZXBvcnRhdGlvbiBsb2NhdGlvbgorICAg
ICAgICBpZiAoZ2F6ZXIuX3RlbGVwb3J0YXRpb25SZXF1ZXN0SW5pdGlhdGVkKSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFnYXplci5fcm90YXRpb25MZWZ0
QXNrZWQpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC54IDwgLXRoaXMuX3BhZFNlbnNp
YmlsaXR5VXAgJiYgZ2F6ZXIuX2RwYWRQcmVzc2VkKSB7CisgICAgICAgICAgICAgICAgZ2F6ZXIu
X3JvdGF0aW9uTGVmdEFza2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fcm90
YXRpb25BbGxvd2VkKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZUNhbWVyYShm
YWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LnggPiAtdGhpcy5fcGFkU2Vu
c2liaWxpdHlEb3duKSB7CisgICAgICAgICAgICAgICAgZ2F6ZXIuX3JvdGF0aW9uTGVmdEFza2Vk
ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFnYXplci5f
cm90YXRpb25SaWdodEFza2VkKSB7CisgICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QueCA+IHRo
aXMuX3BhZFNlbnNpYmlsaXR5VXAgJiYgZ2F6ZXIuX2RwYWRQcmVzc2VkKSB7CisgICAgICAgICAg
ICAgICAgZ2F6ZXIuX3JvdGF0aW9uUmlnaHRBc2tlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX3JvdGF0aW9uQWxsb3dlZCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9y
b3RhdGVDYW1lcmEodHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LnggPCB0
aGlzLl9wYWRTZW5zaWJpbGl0eURvd24pIHsKKyAgICAgICAgICAgICAgICBnYXplci5fcm90YXRp
b25SaWdodEFza2VkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
ICAgIFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUuX2NoZWNrVGVsZXBvcnRCYWNrd2FyZHMg
PSBmdW5jdGlvbiAoc3RhdGVPYmplY3QsIGdhemVyKSB7CisgICAgICAgIC8vIE9ubHkgdGVsZXBv
cnQgYmFja3dhcmRzIHdoZW4gdXNlciBpcyBub3QgY3VycmVudGx5IHNlbGVjdGluZyBhIHRlbGVw
b3J0YXRpb24gbG9jYXRpb24KKyAgICAgICAgaWYgKGdhemVyLl90ZWxlcG9ydGF0aW9uUmVxdWVz
dEluaXRpYXRlZCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8v
IFRlbGVwb3J0IGJhY2t3YXJkcworICAgICAgICBpZiAoc3RhdGVPYmplY3QueSA+IHRoaXMuX3Bh
ZFNlbnNpYmlsaXR5VXAgJiYgZ2F6ZXIuX2RwYWRQcmVzc2VkKSB7CisgICAgICAgICAgICBpZiAo
IWdhemVyLl90ZWxlcG9ydGF0aW9uQmFja1JlcXVlc3RJbml0aWF0ZWQpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMuY3VycmVudFZSQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gR2V0IHJvdGF0aW9u
IGFuZCBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBjYW1lcmEKKyAgICAgICAgICAgICAgICB2YXIg
cm90YXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siUXVhdGVybmlvbiJdLkZyb21Sb3RhdGlvbk1hdHJpeCh0aGlzLmN1cnJlbnRWUkNhbWVyYS5n
ZXRXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4KCkpOworICAgICAgICAgICAgICAgIHZh
ciBwb3NpdGlvbiA9IHRoaXMuY3VycmVudFZSQ2FtZXJhLnBvc2l0aW9uOworICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBjYW1lcmEgaGFzIGRldmljZSBwb3NpdGlvbiwgdXNlIHRoYXQgaW5zdGVh
ZAorICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRWUkNhbWVyYS5kZXZpY2VQb3NpdGlv
biAmJiB0aGlzLmN1cnJlbnRWUkNhbWVyYS5kZXZpY2VSb3RhdGlvblF1YXRlcm5pb24pIHsKKyAg
ICAgICAgICAgICAgICAgICAgcm90YXRpb24gPSB0aGlzLmN1cnJlbnRWUkNhbWVyYS5kZXZpY2VS
b3RhdGlvblF1YXRlcm5pb247CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5j
dXJyZW50VlJDYW1lcmEuZGV2aWNlUG9zaXRpb247CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIC8vIEdldCBtYXRyaXggd2l0aCBvbmx5IHRoZSB5IHJvdGF0aW9uIG9mIHRoZSBk
ZXZpY2Ugcm90YXRpb24KKyAgICAgICAgICAgICAgICByb3RhdGlvbi50b0V1bGVyQW5nbGVzVG9S
ZWYodGhpcy5fd29ya2luZ1ZlY3Rvcik7CisgICAgICAgICAgICAgICAgdGhpcy5fd29ya2luZ1Zl
Y3Rvci56ID0gMDsKKyAgICAgICAgICAgICAgICB0aGlzLl93b3JraW5nVmVjdG9yLnggPSAwOwor
ICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih0aGlzLl93b3Jr
aW5nVmVjdG9yLnksIHRoaXMuX3dvcmtpbmdWZWN0b3IueCwgdGhpcy5fd29ya2luZ1ZlY3Rvci56
LCB0aGlzLl93b3JraW5nUXVhdGVybmlvbik7CisgICAgICAgICAgICAgICAgdGhpcy5fd29ya2lu
Z1F1YXRlcm5pb24udG9Sb3RhdGlvbk1hdHJpeCh0aGlzLl93b3JraW5nTWF0cml4KTsKKyAgICAg
ICAgICAgICAgICAvLyBSb3RhdGUgYmFja3dhcmRzIHJheSBieSBkZXZpY2Ugcm90YXRpb24gdG8g
Y2FzdCBhdCB0aGUgZ3JvdW5kIGJlaGluZCB0aGUgdXNlcgorICAgICAgICAgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJWZWN0b3IzIl0uVHJh
bnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0aGlzLl90ZWxlcG9ydEJhY2t3YXJkc1ZlY3RvciwgdGhp
cy5fd29ya2luZ01hdHJpeCwgdGhpcy5fd29ya2luZ1ZlY3Rvcik7CisgICAgICAgICAgICAgICAg
Ly8gVGVsZXBvcnQgaWYgcmF5IGhpdCB0aGUgZ3JvdW5kIGFuZCBpcyBub3QgdG8gZmFyIGF3YXkg
ZWcuIGJhY2t3YXJkcyBvZmYgYSBjbGlmZgorICAgICAgICAgICAgICAgIHZhciByYXkgPSBuZXcg
X0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJSYXkiXShwb3NpdGlv
biwgdGhpcy5fd29ya2luZ1ZlY3Rvcik7CisgICAgICAgICAgICAgICAgdmFyIGhpdCA9IHRoaXMu
X3NjZW5lLnBpY2tXaXRoUmF5KHJheSwgdGhpcy5fcmF5U2VsZWN0aW9uUHJlZGljYXRlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoaGl0ICYmIGhpdC5waWNrZWRQb2ludCAmJiBoaXQucGlja2VkTWVz
aCAmJiB0aGlzLl9pc1RlbGVwb3J0YXRpb25GbG9vcihoaXQucGlja2VkTWVzaCkgJiYgaGl0LmRp
c3RhbmNlIDwgNSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbGVwb3J0Q2FtZXJhKGhp
dC5waWNrZWRQb2ludCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdhemVy
Ll90ZWxlcG9ydGF0aW9uQmFja1JlcXVlc3RJbml0aWF0ZWQgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZ2F6ZXIuX3RlbGVwb3J0
YXRpb25CYWNrUmVxdWVzdEluaXRpYXRlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfTsKKyAg
ICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLl9lbmFibGVUZWxlcG9ydGF0aW9uT25Db250
cm9sbGVyID0gZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhp
czsKKyAgICAgICAgdmFyIGNvbnRyb2xsZXJNZXNoID0gY29udHJvbGxlci53ZWJWUkNvbnRyb2xs
ZXIubWVzaDsKKyAgICAgICAgaWYgKGNvbnRyb2xsZXJNZXNoKSB7CisgICAgICAgICAgICBpZiAo
IWNvbnRyb2xsZXIuX2ludGVyYWN0aW9uc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9lbmFibGVJbnRlcmFjdGlvbk9uQ29udHJvbGxlcihjb250cm9sbGVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNvbnRyb2xsZXIuX2ludGVyYWN0aW9uc0VuYWJsZWQgPSB0cnVlOwor
ICAgICAgICAgICAgY29udHJvbGxlci5fdGVsZXBvcnRhdGlvbkVuYWJsZWQgPSB0cnVlOworICAg
ICAgICAgICAgaWYgKGNvbnRyb2xsZXIud2ViVlJDb250cm9sbGVyLmNvbnRyb2xsZXJUeXBlID09
PSBfR2FtZXBhZHNfQ29udHJvbGxlcnNfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMl9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXJUeXBlIl0uVklWRSkgewor
ICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX2RwYWRQcmVzc2VkID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgY29udHJvbGxlci53ZWJWUkNvbnRyb2xsZXIub25QYWRTdGF0ZUNoYW5nZWRPYnNl
cnZhYmxlLmFkZChmdW5jdGlvbiAoc3RhdGVPYmplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29udHJvbGxlci5fZHBhZFByZXNzZWQgPSBzdGF0ZU9iamVjdC5wcmVzc2VkOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvbnRyb2xsZXIuX2RwYWRQcmVzc2VkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250cm9sbGVyLl9yb3RhdGlvbkxlZnRBc2tlZCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcm90YXRpb25SaWdodEFza2VkID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl90ZWxlcG9ydGF0aW9uQmFja1Jl
cXVlc3RJbml0aWF0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udHJvbGxlci53ZWJWUkNv
bnRyb2xsZXIub25QYWRWYWx1ZXNDaGFuZ2VkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHN0YXRl
T2JqZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLnRlbGVwb3J0YXRpb25FbmFibGVk
KSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9jaGVja1RlbGVwb3J0QmFja3dhcmRzKHN0
YXRlT2JqZWN0LCBjb250cm9sbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2NoZWNr
VGVsZXBvcnRXaXRoUmF5KHN0YXRlT2JqZWN0LCBjb250cm9sbGVyKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgX3RoaXMuX2NoZWNrUm90YXRlKHN0YXRlT2JqZWN0LCBjb250
cm9sbGVyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKyAgICBWUkV4cGVy
aWVuY2VIZWxwZXIucHJvdG90eXBlLl9jcmVhdGVUZWxlcG9ydGF0aW9uQ2lyY2xlcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdGhpcy5fdGVsZXBvcnRhdGlvblRhcmdldCA9IF9NZXNoZXNfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siTWVzaCJdLkNyZWF0ZUdyb3VuZCgidGVs
ZXBvcnRhdGlvblRhcmdldCIsIDIsIDIsIDIsIHRoaXMuX3NjZW5lKTsKKyAgICAgICAgdGhpcy5f
dGVsZXBvcnRhdGlvblRhcmdldC5pc1BpY2thYmxlID0gZmFsc2U7CisgICAgICAgIHZhciBsZW5n
dGggPSA1MTI7CisgICAgICAgIHZhciBkeW5hbWljVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX2R5bmFtaWNUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJEeW5h
bWljVGV4dHVyZSJdKCJEeW5hbWljVGV4dHVyZSIsIGxlbmd0aCwgdGhpcy5fc2NlbmUsIHRydWUp
OworICAgICAgICBkeW5hbWljVGV4dHVyZS5oYXNBbHBoYSA9IHRydWU7CisgICAgICAgIHZhciBj
b250ZXh0ID0gZHluYW1pY1RleHR1cmUuZ2V0Q29udGV4dCgpOworICAgICAgICB2YXIgY2VudGVy
WCA9IGxlbmd0aCAvIDI7CisgICAgICAgIHZhciBjZW50ZXJZID0gbGVuZ3RoIC8gMjsKKyAgICAg
ICAgdmFyIHJhZGl1cyA9IDIwMDsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAg
ICAgY29udGV4dC5hcmMoY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCAwLCAyICogTWF0aC5QSSwg
ZmFsc2UpOworICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX3RlbGVwb3J0YXRpb25G
aWxsQ29sb3I7CisgICAgICAgIGNvbnRleHQuZmlsbCgpOworICAgICAgICBjb250ZXh0LmxpbmVX
aWR0aCA9IDEwOworICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdGhpcy5fdGVsZXBvcnRh
dGlvbkJvcmRlckNvbG9yOworICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgICAgICBjb250
ZXh0LmNsb3NlUGF0aCgpOworICAgICAgICBkeW5hbWljVGV4dHVyZS51cGRhdGUoKTsKKyAgICAg
ICAgdmFyIHRlbGVwb3J0YXRpb25DaXJjbGVNYXRlcmlhbCA9IG5ldyBfTWF0ZXJpYWxzX3N0YW5k
YXJkTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIlN0YW5kYXJkTWF0ZXJp
YWwiXSgiVGV4dFBsYW5lTWF0ZXJpYWwiLCB0aGlzLl9zY2VuZSk7CisgICAgICAgIHRlbGVwb3J0
YXRpb25DaXJjbGVNYXRlcmlhbC5kaWZmdXNlVGV4dHVyZSA9IGR5bmFtaWNUZXh0dXJlOworICAg
ICAgICB0aGlzLl90ZWxlcG9ydGF0aW9uVGFyZ2V0Lm1hdGVyaWFsID0gdGVsZXBvcnRhdGlvbkNp
cmNsZU1hdGVyaWFsOworICAgICAgICB2YXIgdG9ydXMgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE1X19bIk1lc2giXS5DcmVhdGVUb3J1cygidG9ydXNUZWxlcG9ydGF0
aW9uIiwgMC43NSwgMC4xLCAyNSwgdGhpcy5fc2NlbmUsIGZhbHNlKTsKKyAgICAgICAgdG9ydXMu
aXNQaWNrYWJsZSA9IGZhbHNlOworICAgICAgICB0b3J1cy5wYXJlbnQgPSB0aGlzLl90ZWxlcG9y
dGF0aW9uVGFyZ2V0OworICAgICAgICB2YXIgYW5pbWF0aW9uSW5uZXJDaXJjbGUgPSBuZXcgX0Fu
aW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJBbmltYXRp
b24iXSgiYW5pbWF0aW9uSW5uZXJDaXJjbGUiLCAicG9zaXRpb24ueSIsIDMwLCBfQW5pbWF0aW9u
c19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkFuaW1hdGlvbiJdLkFO
SU1BVElPTlRZUEVfRkxPQVQsIF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OTE9PUE1PREVfQ1lDTEUpOworICAg
ICAgICB2YXIga2V5cyA9IFtdOworICAgICAgICBrZXlzLnB1c2goeworICAgICAgICAgICAgZnJh
bWU6IDAsCisgICAgICAgICAgICB2YWx1ZTogMAorICAgICAgICB9KTsKKyAgICAgICAga2V5cy5w
dXNoKHsKKyAgICAgICAgICAgIGZyYW1lOiAzMCwKKyAgICAgICAgICAgIHZhbHVlOiAwLjQKKyAg
ICAgICAgfSk7CisgICAgICAgIGtleXMucHVzaCh7CisgICAgICAgICAgICBmcmFtZTogNjAsCisg
ICAgICAgICAgICB2YWx1ZTogMAorICAgICAgICB9KTsKKyAgICAgICAgYW5pbWF0aW9uSW5uZXJD
aXJjbGUuc2V0S2V5cyhrZXlzKTsKKyAgICAgICAgdmFyIGVhc2luZ0Z1bmN0aW9uID0gbmV3IF9B
bmltYXRpb25zX2Vhc2luZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siU2luZUVhc2Ui
XSgpOworICAgICAgICBlYXNpbmdGdW5jdGlvbi5zZXRFYXNpbmdNb2RlKF9BbmltYXRpb25zX2Vh
c2luZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siRWFzaW5nRnVuY3Rpb24iXS5FQVNJ
TkdNT0RFX0VBU0VJTk9VVCk7CisgICAgICAgIGFuaW1hdGlvbklubmVyQ2lyY2xlLnNldEVhc2lu
Z0Z1bmN0aW9uKGVhc2luZ0Z1bmN0aW9uKTsKKyAgICAgICAgdG9ydXMuYW5pbWF0aW9ucyA9IFtd
OworICAgICAgICB0b3J1cy5hbmltYXRpb25zLnB1c2goYW5pbWF0aW9uSW5uZXJDaXJjbGUpOwor
ICAgICAgICB0aGlzLl9zY2VuZS5iZWdpbkFuaW1hdGlvbih0b3J1cywgMCwgNjAsIHRydWUpOwor
ICAgICAgICB0aGlzLl9oaWRlVGVsZXBvcnRhdGlvblRhcmdldCgpOworICAgIH07CisgICAgVlJF
eHBlcmllbmNlSGVscGVyLnByb3RvdHlwZS5fZGlzcGxheVRlbGVwb3J0YXRpb25UYXJnZXQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3RlbGVwb3J0QWN0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgaWYgKHRoaXMuX3RlbGVwb3J0YXRpb25Jbml0aWFsaXplZCkgeworICAgICAgICAgICAgdGhp
cy5fdGVsZXBvcnRhdGlvblRhcmdldC5pc1Zpc2libGUgPSB0cnVlOworICAgICAgICAgICAgaWYg
KHRoaXMuX2lzRGVmYXVsdFRlbGVwb3J0YXRpb25UYXJnZXQpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl90ZWxlcG9ydGF0aW9uVGFyZ2V0LmdldENoaWxkcmVuKClbMF0uaXNWaXNpYmxlID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgVlJFeHBlcmllbmNlSGVs
cGVyLnByb3RvdHlwZS5faGlkZVRlbGVwb3J0YXRpb25UYXJnZXQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuX3RlbGVwb3J0QWN0aXZlID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlzLl90
ZWxlcG9ydGF0aW9uSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX3RlbGVwb3J0YXRp
b25UYXJnZXQuaXNWaXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodGhpcy5faXNEZWZh
dWx0VGVsZXBvcnRhdGlvblRhcmdldCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3RlbGVwb3J0
YXRpb25UYXJnZXQuZ2V0Q2hpbGRyZW4oKVswXS5pc1Zpc2libGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlw
ZS5fcm90YXRlQ2FtZXJhID0gZnVuY3Rpb24gKHJpZ2h0KSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIGlmICghKHRoaXMuY3VycmVudFZSQ2FtZXJhIGluc3RhbmNlb2YgX0Nh
bWVyYXNfZnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJGcmVlQ2FtZXJh
Il0pKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJpZ2h0
KSB7CisgICAgICAgICAgICB0aGlzLl9yb3RhdGlvbkFuZ2xlKys7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9yb3RhdGlvbkFuZ2xlLS07CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5jdXJyZW50VlJDYW1lcmEuYW5pbWF0aW9ucyA9IFtdOworICAgICAgICB2
YXIgdGFyZ2V0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIlF1YXRlcm5pb24iXS5Gcm9tUm90YXRpb25NYXRyaXgoX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIk1hdHJpeCJdLlJvdGF0aW9uWShNYXRoLlBJIC8g
NCAqIHRoaXMuX3JvdGF0aW9uQW5nbGUpKTsKKyAgICAgICAgdmFyIGFuaW1hdGlvblJvdGF0aW9u
ID0gbmV3IF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJf
X1siQW5pbWF0aW9uIl0oImFuaW1hdGlvblJvdGF0aW9uIiwgInJvdGF0aW9uUXVhdGVybmlvbiIs
IDkwLCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19b
IkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZUEVfUVVBVEVSTklPTiwgX0FuaW1hdGlvbnNfYW5pbWF0
aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05M
T09QTU9ERV9DT05TVEFOVCk7CisgICAgICAgIHZhciBhbmltYXRpb25Sb3RhdGlvbktleXMgPSBb
XTsKKyAgICAgICAgYW5pbWF0aW9uUm90YXRpb25LZXlzLnB1c2goeworICAgICAgICAgICAgZnJh
bWU6IDAsCisgICAgICAgICAgICB2YWx1ZTogdGhpcy5jdXJyZW50VlJDYW1lcmEucm90YXRpb25R
dWF0ZXJuaW9uCisgICAgICAgIH0pOworICAgICAgICBhbmltYXRpb25Sb3RhdGlvbktleXMucHVz
aCh7CisgICAgICAgICAgICBmcmFtZTogNiwKKyAgICAgICAgICAgIHZhbHVlOiB0YXJnZXQKKyAg
ICAgICAgfSk7CisgICAgICAgIGFuaW1hdGlvblJvdGF0aW9uLnNldEtleXMoYW5pbWF0aW9uUm90
YXRpb25LZXlzKTsKKyAgICAgICAgYW5pbWF0aW9uUm90YXRpb24uc2V0RWFzaW5nRnVuY3Rpb24o
dGhpcy5fY2lyY2xlRWFzZSk7CisgICAgICAgIHRoaXMuY3VycmVudFZSQ2FtZXJhLmFuaW1hdGlv
bnMucHVzaChhbmltYXRpb25Sb3RhdGlvbik7CisgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzTW92
ZS5hbmltYXRpb25zID0gW107CisgICAgICAgIHZhciBhbmltYXRpb25QUCA9IG5ldyBfQW5pbWF0
aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkFuaW1hdGlvbiJd
KCJhbmltYXRpb25QUCIsICJ2aWduZXR0ZVdlaWdodCIsIDkwLCBfQW5pbWF0aW9uc19hbmltYXRp
b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTlRZ
UEVfRkxPQVQsIF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MjJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQpOworICAgICAgICB2
YXIgdmlnbmV0dGVXZWlnaHRLZXlzID0gW107CisgICAgICAgIHZpZ25ldHRlV2VpZ2h0S2V5cy5w
dXNoKHsKKyAgICAgICAgICAgIGZyYW1lOiAwLAorICAgICAgICAgICAgdmFsdWU6IDAKKyAgICAg
ICAgfSk7CisgICAgICAgIHZpZ25ldHRlV2VpZ2h0S2V5cy5wdXNoKHsKKyAgICAgICAgICAgIGZy
YW1lOiAzLAorICAgICAgICAgICAgdmFsdWU6IDQKKyAgICAgICAgfSk7CisgICAgICAgIHZpZ25l
dHRlV2VpZ2h0S2V5cy5wdXNoKHsKKyAgICAgICAgICAgIGZyYW1lOiA2LAorICAgICAgICAgICAg
dmFsdWU6IDAKKyAgICAgICAgfSk7CisgICAgICAgIGFuaW1hdGlvblBQLnNldEtleXModmlnbmV0
dGVXZWlnaHRLZXlzKTsKKyAgICAgICAgYW5pbWF0aW9uUFAuc2V0RWFzaW5nRnVuY3Rpb24odGhp
cy5fY2lyY2xlRWFzZSk7CisgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzTW92ZS5hbmltYXRpb25z
LnB1c2goYW5pbWF0aW9uUFApOworICAgICAgICB2YXIgYW5pbWF0aW9uUFAyID0gbmV3IF9Bbmlt
YXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQW5pbWF0aW9u
Il0oImFuaW1hdGlvblBQMiIsICJ2aWduZXR0ZVN0cmV0Y2giLCA5MCwgX0FuaW1hdGlvbnNfYW5p
bWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJBbmltYXRpb24iXS5BTklNQVRJ
T05UWVBFX0ZMT0FULCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIyX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTkxPT1BNT0RFX0NPTlNUQU5UKTsKKyAgICAg
ICAgdmFyIHZpZ25ldHRlU3RyZXRjaEtleXMgPSBbXTsKKyAgICAgICAgdmlnbmV0dGVTdHJldGNo
S2V5cy5wdXNoKHsKKyAgICAgICAgICAgIGZyYW1lOiAwLAorICAgICAgICAgICAgdmFsdWU6IDAK
KyAgICAgICAgfSk7CisgICAgICAgIHZpZ25ldHRlU3RyZXRjaEtleXMucHVzaCh7CisgICAgICAg
ICAgICBmcmFtZTogMywKKyAgICAgICAgICAgIHZhbHVlOiAxMAorICAgICAgICB9KTsKKyAgICAg
ICAgdmlnbmV0dGVTdHJldGNoS2V5cy5wdXNoKHsKKyAgICAgICAgICAgIGZyYW1lOiA2LAorICAg
ICAgICAgICAgdmFsdWU6IDAKKyAgICAgICAgfSk7CisgICAgICAgIGFuaW1hdGlvblBQMi5zZXRL
ZXlzKHZpZ25ldHRlU3RyZXRjaEtleXMpOworICAgICAgICBhbmltYXRpb25QUDIuc2V0RWFzaW5n
RnVuY3Rpb24odGhpcy5fY2lyY2xlRWFzZSk7CisgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzTW92
ZS5hbmltYXRpb25zLnB1c2goYW5pbWF0aW9uUFAyKTsKKyAgICAgICAgdGhpcy5fcG9zdFByb2Nl
c3NNb3ZlLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udmlnbmV0dGVXZWlnaHQgPSAwOwor
ICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc01vdmUuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bi52aWduZXR0ZVN0cmV0Y2ggPSAwOworICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc01vdmUuc2Ft
cGxlcyA9IDQ7CisgICAgICAgIHRoaXMuX3dlYlZSQ2FtZXJhLmF0dGFjaFBvc3RQcm9jZXNzKHRo
aXMuX3Bvc3RQcm9jZXNzTW92ZSk7CisgICAgICAgIHRoaXMuX3NjZW5lLmJlZ2luQW5pbWF0aW9u
KHRoaXMuX3Bvc3RQcm9jZXNzTW92ZSwgMCwgNiwgZmFsc2UsIDEsIGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIF90aGlzLl93ZWJWUkNhbWVyYS5kZXRhY2hQb3N0UHJvY2VzcyhfdGhpcy5fcG9z
dFByb2Nlc3NNb3ZlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3NjZW5lLmJlZ2luQW5p
bWF0aW9uKHRoaXMuY3VycmVudFZSQ2FtZXJhLCAwLCA2LCBmYWxzZSwgMSk7CisgICAgfTsKKyAg
ICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLl9tb3ZlVGVsZXBvcnRhdGlvblNlbGVjdG9y
VG8gPSBmdW5jdGlvbiAoaGl0LCBnYXplciwgcmF5KSB7CisgICAgICAgIGlmIChoaXQucGlja2Vk
UG9pbnQpIHsKKyAgICAgICAgICAgIGlmIChnYXplci5fdGVsZXBvcnRhdGlvblJlcXVlc3RJbml0
aWF0ZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kaXNwbGF5VGVsZXBvcnRhdGlvblRhcmdl
dCgpOworICAgICAgICAgICAgICAgIHRoaXMuX2hhbG9DZW50ZXIuY29weUZyb20oaGl0LnBpY2tl
ZFBvaW50KTsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZWxlcG9ydGF0aW9uVGFyZ2V0LnBvc2l0
aW9uLmNvcHlGcm9tKGhpdC5waWNrZWRQb2ludCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YXIgcGlja05vcm1hbCA9IHRoaXMuX2NvbnZlcnROb3JtYWxUb0RpcmVjdGlvbk9mUmF5KGhp
dC5nZXROb3JtYWwodHJ1ZSwgZmFsc2UpLCByYXkpOworICAgICAgICAgICAgaWYgKHBpY2tOb3Jt
YWwpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXhpczEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmVjdG9yMyJdLkNyb3NzKF9NYXRoc19tYXRoX2F4
aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X19bIkF4aXMiXS5ZLCBwaWNrTm9ybWFsKTsK
KyAgICAgICAgICAgICAgICB2YXIgYXhpczIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siVmVjdG9yMyJdLkNyb3NzKHBpY2tOb3JtYWwsIGF4aXMxKTsK
KyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siVmVjdG9yMyJdLlJvdGF0aW9uRnJvbUF4aXNUb1JlZihheGlzMiwgcGlja05vcm1h
bCwgYXhpczEsIHRoaXMuX3RlbGVwb3J0YXRpb25UYXJnZXQucm90YXRpb24pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fdGVsZXBvcnRhdGlvblRhcmdldC5wb3NpdGlvbi55ICs9
IDAuMTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogVGVsZXBvcnRzIHRoZSB1
c2VycyBmZWV0IHRvIHRoZSBkZXNpcmVkIGxvY2F0aW9uCisgICAgICogQHBhcmFtIGxvY2F0aW9u
IFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgdXNlcidzIGZlZXQgc2hvdWxkIGJlIHBsYWNlZAorICAg
ICAqLworICAgIFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUudGVsZXBvcnRDYW1lcmEgPSBm
dW5jdGlvbiAobG9jYXRpb24pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
aWYgKCEodGhpcy5jdXJyZW50VlJDYW1lcmEgaW5zdGFuY2VvZiBfQ2FtZXJhc19mcmVlQ2FtZXJh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkZyZWVDYW1lcmEiXSkpIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBUZWxlcG9ydCB0aGUgaG1kIHRvIHdo
ZXJlIHRoZSB1c2VyIGlzIGxvb2tpbmcgYnkgbW92aW5nIHRoZSBhbmNob3IgdG8gd2hlcmUgdGhl
eSBhcmUgbG9va2luZyBtaW51cyB0aGUKKyAgICAgICAgLy8gb2Zmc2V0IG9mIHRoZSBoZWFkc2V0
IGZyb20gdGhlIGFuY2hvci4KKyAgICAgICAgaWYgKHRoaXMud2ViVlJDYW1lcmEubGVmdENhbWVy
YSkgeworICAgICAgICAgICAgdGhpcy5fd29ya2luZ1ZlY3Rvci5jb3B5RnJvbSh0aGlzLndlYlZS
Q2FtZXJhLmxlZnRDYW1lcmEuZ2xvYmFsUG9zaXRpb24pOworICAgICAgICAgICAgdGhpcy5fd29y
a2luZ1ZlY3Rvci5zdWJ0cmFjdEluUGxhY2UodGhpcy53ZWJWUkNhbWVyYS5wb3NpdGlvbik7Cisg
ICAgICAgICAgICBsb2NhdGlvbi5zdWJ0cmFjdFRvUmVmKHRoaXMuX3dvcmtpbmdWZWN0b3IsIHRo
aXMuX3dvcmtpbmdWZWN0b3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5fd29ya2luZ1ZlY3Rvci5jb3B5RnJvbShsb2NhdGlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gQWRkIGhlaWdodCB0byBhY2NvdW50IGZvciB1c2VyJ3MgaGVpZ2h0IG9mZnNldAor
ICAgICAgICBpZiAodGhpcy5pc0luVlJNb2RlKSB7CisgICAgICAgICAgICB0aGlzLl93b3JraW5n
VmVjdG9yLnkgKz0gdGhpcy53ZWJWUkNhbWVyYS5kZXZpY2VEaXN0YW5jZVRvUm9vbUdyb3VuZCgp
ICogdGhpcy5fd2ViVlJDYW1lcmEuZGV2aWNlU2NhbGVGYWN0b3I7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl93b3JraW5nVmVjdG9yLnkgKz0gdGhpcy5fZGVm
YXVsdEhlaWdodDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uQmVmb3JlQ2FtZXJhVGVsZXBv
cnQubm90aWZ5T2JzZXJ2ZXJzKHRoaXMuX3dvcmtpbmdWZWN0b3IpOworICAgICAgICAvLyBDcmVh
dGUgYW5pbWF0aW9uIGZyb20gdGhlIGNhbWVyYSdzIHBvc2l0aW9uIHRvIHRoZSBuZXcgbG9jYXRp
b24KKyAgICAgICAgdGhpcy5jdXJyZW50VlJDYW1lcmEuYW5pbWF0aW9ucyA9IFtdOworICAgICAg
ICB2YXIgYW5pbWF0aW9uQ2FtZXJhVGVsZXBvcnRhdGlvbiA9IG5ldyBfQW5pbWF0aW9uc19hbmlt
YXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkFuaW1hdGlvbiJdKCJhbmltYXRp
b25DYW1lcmFUZWxlcG9ydGF0aW9uIiwgInBvc2l0aW9uIiwgOTAsIF9BbmltYXRpb25zX2FuaW1h
dGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9O
VFlQRV9WRUNUT1IzLCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIyX19bIkFuaW1hdGlvbiJdLkFOSU1BVElPTkxPT1BNT0RFX0NPTlNUQU5UKTsKKyAgICAg
ICAgdmFyIGFuaW1hdGlvbkNhbWVyYVRlbGVwb3J0YXRpb25LZXlzID0gW3sKKyAgICAgICAgICAg
ICAgICBmcmFtZTogMCwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jdXJyZW50VlJDYW1l
cmEucG9zaXRpb24KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZnJhbWU6IDExLAorICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl93b3JraW5nVmVjdG9y
CisgICAgICAgICAgICB9CisgICAgICAgIF07CisgICAgICAgIGFuaW1hdGlvbkNhbWVyYVRlbGVw
b3J0YXRpb24uc2V0S2V5cyhhbmltYXRpb25DYW1lcmFUZWxlcG9ydGF0aW9uS2V5cyk7CisgICAg
ICAgIGFuaW1hdGlvbkNhbWVyYVRlbGVwb3J0YXRpb24uc2V0RWFzaW5nRnVuY3Rpb24odGhpcy5f
Y2lyY2xlRWFzZSk7CisgICAgICAgIHRoaXMuY3VycmVudFZSQ2FtZXJhLmFuaW1hdGlvbnMucHVz
aChhbmltYXRpb25DYW1lcmFUZWxlcG9ydGF0aW9uKTsKKyAgICAgICAgdGhpcy5fcG9zdFByb2Nl
c3NNb3ZlLmFuaW1hdGlvbnMgPSBbXTsKKyAgICAgICAgdmFyIGFuaW1hdGlvblBQID0gbmV3IF9B
bmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQW5pbWF0
aW9uIl0oImFuaW1hdGlvblBQIiwgInZpZ25ldHRlV2VpZ2h0IiwgOTAsIF9BbmltYXRpb25zX2Fu
aW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQW5pbWF0aW9uIl0uQU5JTUFU
SU9OVFlQRV9GTE9BVCwgX0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yMl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05MT09QTU9ERV9DT05TVEFOVCk7CisgICAg
ICAgIHZhciB2aWduZXR0ZVdlaWdodEtleXMgPSBbXTsKKyAgICAgICAgdmlnbmV0dGVXZWlnaHRL
ZXlzLnB1c2goeworICAgICAgICAgICAgZnJhbWU6IDAsCisgICAgICAgICAgICB2YWx1ZTogMAor
ICAgICAgICB9KTsKKyAgICAgICAgdmlnbmV0dGVXZWlnaHRLZXlzLnB1c2goeworICAgICAgICAg
ICAgZnJhbWU6IDUsCisgICAgICAgICAgICB2YWx1ZTogOAorICAgICAgICB9KTsKKyAgICAgICAg
dmlnbmV0dGVXZWlnaHRLZXlzLnB1c2goeworICAgICAgICAgICAgZnJhbWU6IDExLAorICAgICAg
ICAgICAgdmFsdWU6IDAKKyAgICAgICAgfSk7CisgICAgICAgIGFuaW1hdGlvblBQLnNldEtleXMo
dmlnbmV0dGVXZWlnaHRLZXlzKTsKKyAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3NNb3ZlLmFuaW1h
dGlvbnMucHVzaChhbmltYXRpb25QUCk7CisgICAgICAgIHZhciBhbmltYXRpb25QUDIgPSBuZXcg
X0FuaW1hdGlvbnNfYW5pbWF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJBbmlt
YXRpb24iXSgiYW5pbWF0aW9uUFAyIiwgInZpZ25ldHRlU3RyZXRjaCIsIDkwLCBfQW5pbWF0aW9u
c19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkFuaW1hdGlvbiJdLkFO
SU1BVElPTlRZUEVfRkxPQVQsIF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjJfX1siQW5pbWF0aW9uIl0uQU5JTUFUSU9OTE9PUE1PREVfQ09OU1RBTlQpOwor
ICAgICAgICB2YXIgdmlnbmV0dGVTdHJldGNoS2V5cyA9IFtdOworICAgICAgICB2aWduZXR0ZVN0
cmV0Y2hLZXlzLnB1c2goeworICAgICAgICAgICAgZnJhbWU6IDAsCisgICAgICAgICAgICB2YWx1
ZTogMAorICAgICAgICB9KTsKKyAgICAgICAgdmlnbmV0dGVTdHJldGNoS2V5cy5wdXNoKHsKKyAg
ICAgICAgICAgIGZyYW1lOiA1LAorICAgICAgICAgICAgdmFsdWU6IDEwCisgICAgICAgIH0pOwor
ICAgICAgICB2aWduZXR0ZVN0cmV0Y2hLZXlzLnB1c2goeworICAgICAgICAgICAgZnJhbWU6IDEx
LAorICAgICAgICAgICAgdmFsdWU6IDAKKyAgICAgICAgfSk7CisgICAgICAgIGFuaW1hdGlvblBQ
Mi5zZXRLZXlzKHZpZ25ldHRlU3RyZXRjaEtleXMpOworICAgICAgICB0aGlzLl9wb3N0UHJvY2Vz
c01vdmUuYW5pbWF0aW9ucy5wdXNoKGFuaW1hdGlvblBQMik7CisgICAgICAgIHRoaXMuX3Bvc3RQ
cm9jZXNzTW92ZS5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnZpZ25ldHRlV2VpZ2h0ID0g
MDsKKyAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3NNb3ZlLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24udmlnbmV0dGVTdHJldGNoID0gMDsKKyAgICAgICAgdGhpcy5fd2ViVlJDYW1lcmEuYXR0
YWNoUG9zdFByb2Nlc3ModGhpcy5fcG9zdFByb2Nlc3NNb3ZlKTsKKyAgICAgICAgdGhpcy5fc2Nl
bmUuYmVnaW5BbmltYXRpb24odGhpcy5fcG9zdFByb2Nlc3NNb3ZlLCAwLCAxMSwgZmFsc2UsIDEs
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl93ZWJWUkNhbWVyYS5kZXRhY2hQb3N0
UHJvY2VzcyhfdGhpcy5fcG9zdFByb2Nlc3NNb3ZlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRo
aXMuX3NjZW5lLmJlZ2luQW5pbWF0aW9uKHRoaXMuY3VycmVudFZSQ2FtZXJhLCAwLCAxMSwgZmFs
c2UsIDEsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLm9uQWZ0ZXJDYW1lcmFUZWxl
cG9ydC5ub3RpZnlPYnNlcnZlcnMoX3RoaXMuX3dvcmtpbmdWZWN0b3IpOworICAgICAgICB9KTsK
KyAgICAgICAgdGhpcy5faGlkZVRlbGVwb3J0YXRpb25UYXJnZXQoKTsKKyAgICB9OworICAgIFZS
RXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUuX2NvbnZlcnROb3JtYWxUb0RpcmVjdGlvbk9mUmF5
ID0gZnVuY3Rpb24gKG5vcm1hbCwgcmF5KSB7CisgICAgICAgIGlmIChub3JtYWwpIHsKKyAgICAg
ICAgICAgIHZhciBhbmdsZSA9IE1hdGguYWNvcyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siVmVjdG9yMyJdLkRvdChub3JtYWwsIHJheS5kaXJlY3Rpb24p
KTsKKyAgICAgICAgICAgIGlmIChhbmdsZSA8IE1hdGguUEkgLyAyKSB7CisgICAgICAgICAgICAg
ICAgbm9ybWFsLnNjYWxlSW5QbGFjZSgtMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG5vcm1hbDsKKyAgICB9OworICAgIFZSRXhwZXJpZW5jZUhlbHBlci5wcm90
b3R5cGUuX2Nhc3RSYXlBbmRTZWxlY3RPYmplY3QgPSBmdW5jdGlvbiAoZ2F6ZXIpIHsKKyAgICAg
ICAgaWYgKCEodGhpcy5jdXJyZW50VlJDYW1lcmEgaW5zdGFuY2VvZiBfQ2FtZXJhc19mcmVlQ2Ft
ZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkZyZWVDYW1lcmEiXSkpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgcmF5ID0gZ2F6ZXIuX2dldEZv
cndhcmRSYXkodGhpcy5fcmF5TGVuZ3RoKTsKKyAgICAgICAgdmFyIGhpdCA9IHRoaXMuX3NjZW5l
LnBpY2tXaXRoUmF5KHJheSwgdGhpcy5fcmF5U2VsZWN0aW9uUHJlZGljYXRlKTsKKyAgICAgICAg
aWYgKGhpdCkgeworICAgICAgICAgICAgLy8gUG9wdWxhdGUgdGhlIGNvbnRyb2xsZXJzIG1lc2gg
dGhhdCBjYW4gYmUgdXNlZCBmb3IgZHJhZy9kcm9wCisgICAgICAgICAgICBpZiAoZ2F6ZXIuX2xh
c2VyUG9pbnRlcikgeworICAgICAgICAgICAgICAgIGhpdC5vcmlnaW5NZXNoID0gZ2F6ZXIuX2xh
c2VyUG9pbnRlci5wYXJlbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zY2Vu
ZS5zaW11bGF0ZVBvaW50ZXJNb3ZlKGhpdCwgeyBwb2ludGVySWQ6IGdhemVyLl9pZCB9KTsKKyAg
ICAgICAgfQorICAgICAgICBnYXplci5fY3VycmVudEhpdCA9IGhpdDsKKyAgICAgICAgLy8gTW92
aW5nIHRoZSBnYXplVHJhY2tlciBvbiB0aGUgbWVzaCBmYWNlIHRhcmdldHRlZAorICAgICAgICBp
ZiAoaGl0ICYmIGhpdC5waWNrZWRQb2ludCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2Rpc3Bs
YXlHYXplKSB7CisgICAgICAgICAgICAgICAgdmFyIG11bHRpcGxpZXIgPSAxOworICAgICAgICAg
ICAgICAgIGdhemVyLl9nYXplVHJhY2tlci5pc1Zpc2libGUgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGlmIChnYXplci5faXNBY3Rpb25hYmxlTWVzaCkgeworICAgICAgICAgICAgICAgICAgICBt
dWx0aXBsaWVyID0gMzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRo
aXMudXBkYXRlR2F6ZVRyYWNrZXJTY2FsZSkgeworICAgICAgICAgICAgICAgICAgICBnYXplci5f
Z2F6ZVRyYWNrZXIuc2NhbGluZy54ID0gaGl0LmRpc3RhbmNlICogbXVsdGlwbGllcjsKKyAgICAg
ICAgICAgICAgICAgICAgZ2F6ZXIuX2dhemVUcmFja2VyLnNjYWxpbmcueSA9IGhpdC5kaXN0YW5j
ZSAqIG11bHRpcGxpZXI7CisgICAgICAgICAgICAgICAgICAgIGdhemVyLl9nYXplVHJhY2tlci5z
Y2FsaW5nLnogPSBoaXQuZGlzdGFuY2UgKiBtdWx0aXBsaWVyOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB2YXIgcGlja05vcm1hbCA9IHRoaXMuX2NvbnZlcnROb3JtYWxUb0Rp
cmVjdGlvbk9mUmF5KGhpdC5nZXROb3JtYWwoKSwgcmF5KTsKKyAgICAgICAgICAgICAgICAvLyBU
byBhdm9pZCB6LWZpZ2h0aW5nCisgICAgICAgICAgICAgICAgdmFyIGRlbHRhRmlnaHRpbmcgPSAw
LjAwMjsKKyAgICAgICAgICAgICAgICBpZiAocGlja05vcm1hbCkgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgYXhpczEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siVmVjdG9yMyJdLkNyb3NzKF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzI5X19bIkF4aXMiXS5ZLCBwaWNrTm9ybWFsKTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGF4aXMyID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIlZlY3RvcjMiXS5Dcm9zcyhwaWNrTm9ybWFsLCBheGlzMSk7CisgICAgICAgICAgICAg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJW
ZWN0b3IzIl0uUm90YXRpb25Gcm9tQXhpc1RvUmVmKGF4aXMyLCBwaWNrTm9ybWFsLCBheGlzMSwg
Z2F6ZXIuX2dhemVUcmFja2VyLnJvdGF0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZ2F6ZXIuX2dhemVUcmFja2VyLnBvc2l0aW9uLmNvcHlGcm9tKGhpdC5waWNrZWRQ
b2ludCk7CisgICAgICAgICAgICAgICAgaWYgKGdhemVyLl9nYXplVHJhY2tlci5wb3NpdGlvbi54
IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBnYXplci5fZ2F6ZVRyYWNrZXIucG9zaXRpb24u
eCArPSBkZWx0YUZpZ2h0aW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ2F6ZXIuX2dhemVUcmFja2VyLnBvc2l0aW9uLngg
LT0gZGVsdGFGaWdodGluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KGdhemVyLl9nYXplVHJhY2tlci5wb3NpdGlvbi55IDwgMCkgeworICAgICAgICAgICAgICAgICAg
ICBnYXplci5fZ2F6ZVRyYWNrZXIucG9zaXRpb24ueSArPSBkZWx0YUZpZ2h0aW5nOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Z2F6ZXIuX2dhemVUcmFja2VyLnBvc2l0aW9uLnkgLT0gZGVsdGFGaWdodGluZzsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGdhemVyLl9nYXplVHJhY2tlci5wb3NpdGlv
bi56IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBnYXplci5fZ2F6ZVRyYWNrZXIucG9zaXRp
b24ueiArPSBkZWx0YUZpZ2h0aW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ2F6ZXIuX2dhemVUcmFja2VyLnBvc2l0aW9u
LnogLT0gZGVsdGFGaWdodGluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBDaGFuZ2luZyB0aGUgc2l6ZSBvZiB0aGUgbGFzZXIgcG9pbnRlciBiYXNl
ZCBvbiB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgdGFyZ2V0dGVkIHBvaW50CisgICAgICAgICAgICBn
YXplci5fdXBkYXRlUG9pbnRlckRpc3RhbmNlKGhpdC5kaXN0YW5jZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBnYXplci5fdXBkYXRlUG9pbnRlckRpc3RhbmNlKCk7
CisgICAgICAgICAgICBnYXplci5fZ2F6ZVRyYWNrZXIuaXNWaXNpYmxlID0gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGhpdCAmJiBoaXQucGlja2VkTWVzaCkgeworICAgICAgICAgICAg
Ly8gVGhlIG9iamVjdCBzZWxlY3RlZCBpcyB0aGUgZmxvb3IsIHdlJ3JlIGluIGEgdGVsZXBvcnRh
dGlvbiBzY2VuYXJpbworICAgICAgICAgICAgaWYgKHRoaXMuX3RlbGVwb3J0YXRpb25Jbml0aWFs
aXplZCAmJiB0aGlzLl9pc1RlbGVwb3J0YXRpb25GbG9vcihoaXQucGlja2VkTWVzaCkgJiYgaGl0
LnBpY2tlZFBvaW50KSB7CisgICAgICAgICAgICAgICAgLy8gTW92aW5nIHRoZSB0ZWxlcG9ydGF0
aW9uIGFyZWEgdG8gdGhpcyB0YXJnZXR0ZWQgcG9pbnQKKyAgICAgICAgICAgICAgICAvL1JhaXNl
IG9uU2VsZWN0ZWRNZXNoVW5zZWxlY3RlZCBvYnNlcnZhYmxlIGlmIHJheSBjb2xsaWRlZCBmbG9v
ciBtZXNoL21lc2hlcyBhbmQgYSBub24gZmxvb3IgbWVzaCB3YXMgcHJldmlvdXNseSBzZWxlY3Rl
ZAorICAgICAgICAgICAgICAgIGlmIChnYXplci5fY3VycmVudE1lc2hTZWxlY3RlZCAmJiAhdGhp
cy5faXNUZWxlcG9ydGF0aW9uRmxvb3IoZ2F6ZXIuX2N1cnJlbnRNZXNoU2VsZWN0ZWQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmeVNlbGVjdGVkTWVzaFVuc2VsZWN0ZWQoZ2F6
ZXIuX2N1cnJlbnRNZXNoU2VsZWN0ZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBnYXplci5fY3VycmVudE1lc2hTZWxlY3RlZCA9IG51bGw7CisgICAgICAgICAgICAgICAg
aWYgKGdhemVyLl90ZWxlcG9ydGF0aW9uUmVxdWVzdEluaXRpYXRlZCkgeworICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9tb3ZlVGVsZXBvcnRhdGlvblNlbGVjdG9yVG8oaGl0LCBnYXplciwgcmF5
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gSWYgbm90LCB3ZSdyZSBpbiBhIHNlbGVjdGlvbiBzY2VuYXJp
bworICAgICAgICAgICAgLy90aGlzLl90ZWxlcG9ydGF0aW9uQWxsb3dlZCA9IGZhbHNlOworICAg
ICAgICAgICAgaWYgKGhpdC5waWNrZWRNZXNoICE9PSBnYXplci5fY3VycmVudE1lc2hTZWxlY3Rl
ZCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lc2hTZWxlY3Rpb25QcmVkaWNhdGUoaGl0
LnBpY2tlZE1lc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMub25OZXdNZXNoUGlja2Vk
Lm5vdGlmeU9ic2VydmVycyhoaXQpOworICAgICAgICAgICAgICAgICAgICBnYXplci5fY3VycmVu
dE1lc2hTZWxlY3RlZCA9IGhpdC5waWNrZWRNZXNoOworICAgICAgICAgICAgICAgICAgICBpZiAo
aGl0LnBpY2tlZE1lc2guaXNQaWNrYWJsZSAmJiBoaXQucGlja2VkTWVzaC5hY3Rpb25NYW5hZ2Vy
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUdhemVDb2xvcihuZXcgX01h
dGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNvbG9yMyJdKDAs
IDAsIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlTGFzZXJDb2xvcihu
ZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNvbG9y
MyJdKDAuMiwgMC4yLCAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnYXplci5faXNBY3Rp
b25hYmxlTWVzaCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUdhemVDb2xv
cihuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNv
bG9yMyJdKDAuNywgMC43LCAwLjcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hh
bmdlTGFzZXJDb2xvcihuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEwX19bIkNvbG9yMyJdKDAuNywgMC43LCAwLjcpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdhemVyLl9pc0FjdGlvbmFibGVNZXNoID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMub25OZXdNZXNoU2VsZWN0ZWQubm90aWZ5T2JzZXJ2ZXJzKGhpdC5waWNrZWRNZXNoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBnYXplckFzQ29udHJvbGxlckdhemVyID0gZ2F6ZXI7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2F6ZXJBc0NvbnRyb2xsZXJHYXplci53ZWJW
UkNvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTWVzaFNl
bGVjdGVkV2l0aENvbnRyb2xsZXIubm90aWZ5T2JzZXJ2ZXJzKHsgbWVzaDogaGl0LnBpY2tlZE1l
c2gsIGNvbnRyb2xsZXI6IGdhemVyQXNDb250cm9sbGVyR2F6ZXIud2ViVlJDb250cm9sbGVyIH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9N
aXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCJF
cnJvciB3aGlsZSByYWlzaW5nIG9uTmV3TWVzaFNlbGVjdGVkIG9yIG9uTWVzaFNlbGVjdGVkV2l0
aENvbnRyb2xsZXI6ICIgKyBlcnIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9ub3RpZnlTZWxlY3RlZE1lc2hVbnNlbGVjdGVkKGdhemVyLl9jdXJyZW50TWVzaFNlbGVjdGVk
KTsKKyAgICAgICAgICAgICAgICAgICAgZ2F6ZXIuX2N1cnJlbnRNZXNoU2VsZWN0ZWQgPSBudWxs
OworICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUdhemVDb2xvcihuZXcgX01hdGhzX21h
dGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNvbG9yMyJdKDAuNywgMC43
LCAwLjcpKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VMYXNlckNvbG9yKG5ldyBf
TWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQ29sb3IzIl0o
MC43LCAwLjcsIDAuNykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX25vdGlmeVNlbGVjdGVkTWVz
aFVuc2VsZWN0ZWQoZ2F6ZXIuX2N1cnJlbnRNZXNoU2VsZWN0ZWQpOworICAgICAgICAgICAgZ2F6
ZXIuX2N1cnJlbnRNZXNoU2VsZWN0ZWQgPSBudWxsOworICAgICAgICAgICAgLy90aGlzLl90ZWxl
cG9ydGF0aW9uQWxsb3dlZCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5jaGFuZ2VHYXplQ29s
b3IobmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJD
b2xvcjMiXSgwLjcsIDAuNywgMC43KSk7CisgICAgICAgICAgICB0aGlzLmNoYW5nZUxhc2VyQ29s
b3IobmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJD
b2xvcjMiXSgwLjcsIDAuNywgMC43KSk7CisgICAgICAgIH0KKyAgICB9OworICAgIFZSRXhwZXJp
ZW5jZUhlbHBlci5wcm90b3R5cGUuX25vdGlmeVNlbGVjdGVkTWVzaFVuc2VsZWN0ZWQgPSBmdW5j
dGlvbiAobWVzaCkgeworICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgdGhpcy5vblNl
bGVjdGVkTWVzaFVuc2VsZWN0ZWQubm90aWZ5T2JzZXJ2ZXJzKG1lc2gpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgbGFzZXIgcmF5IGZy
b20gdGhlIHZyIGNvbnRyb2xsZXJzLgorICAgICAqIEBwYXJhbSBjb2xvciBuZXcgY29sb3IgZm9y
IHRoZSByYXkuCisgICAgICovCisgICAgVlJFeHBlcmllbmNlSGVscGVyLnByb3RvdHlwZS5jaGFu
Z2VMYXNlckNvbG9yID0gZnVuY3Rpb24gKGNvbG9yKSB7CisgICAgICAgIGlmICh0aGlzLl9sZWZ0
Q29udHJvbGxlcikgeworICAgICAgICAgICAgdGhpcy5fbGVmdENvbnRyb2xsZXIuX3NldExhc2Vy
UG9pbnRlckNvbG9yKGNvbG9yKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmlnaHRD
b250cm9sbGVyKSB7CisgICAgICAgICAgICB0aGlzLl9yaWdodENvbnRyb2xsZXIuX3NldExhc2Vy
UG9pbnRlckNvbG9yKGNvbG9yKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
U2V0cyB0aGUgY29sb3Igb2YgdGhlIHJheSBmcm9tIHRoZSB2ciBoZWFkc2V0cyBnYXplLgorICAg
ICAqIEBwYXJhbSBjb2xvciBuZXcgY29sb3IgZm9yIHRoZSByYXkuCisgICAgICovCisgICAgVlJF
eHBlcmllbmNlSGVscGVyLnByb3RvdHlwZS5jaGFuZ2VHYXplQ29sb3IgPSBmdW5jdGlvbiAoY29s
b3IpIHsKKyAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZUdhemVUcmFja2VyQ29sb3IpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2NhbWVyYUdhemVy
Ll9nYXplVHJhY2tlci5tYXRlcmlhbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX2NhbWVyYUdhemVyLl9nYXplVHJhY2tlci5tYXRlcmlhbC5lbWlzc2l2
ZUNvbG9yID0gY29sb3I7CisgICAgICAgIGlmICh0aGlzLl9sZWZ0Q29udHJvbGxlcikgeworICAg
ICAgICAgICAgdGhpcy5fbGVmdENvbnRyb2xsZXIuX2dhemVUcmFja2VyLm1hdGVyaWFsLmVtaXNz
aXZlQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmlnaHRDb250
cm9sbGVyKSB7CisgICAgICAgICAgICB0aGlzLl9yaWdodENvbnRyb2xsZXIuX2dhemVUcmFja2Vy
Lm1hdGVyaWFsLmVtaXNzaXZlQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqCisgICAgICogRXhpdHMgVlIgYW5kIGRpc3Bvc2VzIG9mIHRoZSB2ciBleHBlcmllbmNlIGhl
bHBlcgorICAgICAqLworICAgIFZSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUuZGlzcG9zZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuaXNJblZSTW9kZSkgeworICAgICAgICAg
ICAgdGhpcy5leGl0VlIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcG9zdFByb2Nl
c3NNb3ZlKSB7CisgICAgICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc01vdmUuZGlzcG9zZSgpOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl93ZWJWUkNhbWVyYSkgeworICAgICAgICAgICAg
dGhpcy5fd2ViVlJDYW1lcmEuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
Ll92ckRldmljZU9yaWVudGF0aW9uQ2FtZXJhKSB7CisgICAgICAgICAgICB0aGlzLl92ckRldmlj
ZU9yaWVudGF0aW9uQ2FtZXJhLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRo
aXMuX3VzZUN1c3RvbVZSQnV0dG9uICYmIHRoaXMuX2J0blZSICYmIHRoaXMuX2J0blZSLnBhcmVu
dE5vZGUpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5fYnRu
VlIpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9kZXZpY2VPcmllbnRhdGlvbkNhbWVy
YSAmJiAodGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhICE9IHRoaXMuX2RldmljZU9yaWVudGF0aW9u
Q2FtZXJhKSkgeworICAgICAgICAgICAgdGhpcy5fZGV2aWNlT3JpZW50YXRpb25DYW1lcmEuZGlz
cG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9jYW1lcmFHYXplcikgeworICAg
ICAgICAgICAgdGhpcy5fY2FtZXJhR2F6ZXIuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9sZWZ0Q29udHJvbGxlcikgeworICAgICAgICAgICAgdGhpcy5fbGVmdENvbnRy
b2xsZXIuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9yaWdodENvbnRy
b2xsZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX3JpZ2h0Q29udHJvbGxlci5kaXNwb3NlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3RlbGVwb3J0YXRpb25UYXJnZXQpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3RlbGVwb3J0YXRpb25UYXJnZXQuZGlzcG9zZSgpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2Zsb29yTWVzaGVzQ29sbGVjdGlvbiA9IFtdOworICAgICAgICBkb2N1bWVu
dC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fb25LZXlEb3duKTsKKyAgICAg
ICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3ZyZGlzcGxheXByZXNlbnRjaGFuZ2UnLCB0
aGlzLl9vblZyRGlzcGxheVByZXNlbnRDaGFuZ2UpOworICAgICAgICB3aW5kb3cucmVtb3ZlRXZl
bnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5fb25SZXNpemUpOworICAgICAgICBkb2N1bWVudC5y
ZW1vdmVFdmVudExpc3RlbmVyKCJmdWxsc2NyZWVuY2hhbmdlIiwgdGhpcy5fb25GdWxsc2NyZWVu
Q2hhbmdlKTsKKyAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW96ZnVsbHNj
cmVlbmNoYW5nZSIsIHRoaXMuX29uRnVsbHNjcmVlbkNoYW5nZSk7CisgICAgICAgIGRvY3VtZW50
LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCB0aGlzLl9vbkZ1
bGxzY3JlZW5DaGFuZ2UpOworICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJt
c2Z1bGxzY3JlZW5jaGFuZ2UiLCB0aGlzLl9vbkZ1bGxzY3JlZW5DaGFuZ2UpOworICAgICAgICBk
b2N1bWVudC5vbm1zZnVsbHNjcmVlbmNoYW5nZSA9IG51bGw7CisgICAgICAgIHRoaXMuX3NjZW5l
LmdldEVuZ2luZSgpLm9uVlJEaXNwbGF5Q2hhbmdlZE9ic2VydmFibGUucmVtb3ZlQ2FsbGJhY2so
dGhpcy5fb25WUkRpc3BsYXlDaGFuZ2VkKTsKKyAgICAgICAgdGhpcy5fc2NlbmUuZ2V0RW5naW5l
KCkub25WUlJlcXVlc3RQcmVzZW50U3RhcnQucmVtb3ZlQ2FsbGJhY2sodGhpcy5fb25WUlJlcXVl
c3RQcmVzZW50U3RhcnQpOworICAgICAgICB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5vblZSUmVx
dWVzdFByZXNlbnRDb21wbGV0ZS5yZW1vdmVDYWxsYmFjayh0aGlzLl9vblZSUmVxdWVzdFByZXNl
bnRDb21wbGV0ZSk7CisgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2cmRpc3Bs
YXlwcmVzZW50Y2hhbmdlJywgdGhpcy5fb25WckRpc3BsYXlQcmVzZW50Q2hhbmdlKTsKKyAgICAg
ICAgdGhpcy5fc2NlbmUuZ2FtZXBhZE1hbmFnZXIub25HYW1lcGFkQ29ubmVjdGVkT2JzZXJ2YWJs
ZS5yZW1vdmVDYWxsYmFjayh0aGlzLl9vbk5ld0dhbWVwYWRDb25uZWN0ZWQpOworICAgICAgICB0
aGlzLl9zY2VuZS5nYW1lcGFkTWFuYWdlci5vbkdhbWVwYWREaXNjb25uZWN0ZWRPYnNlcnZhYmxl
LnJlbW92ZUNhbGxiYWNrKHRoaXMuX29uTmV3R2FtZXBhZERpc2Nvbm5lY3RlZCk7CisgICAgICAg
IHRoaXMuX3NjZW5lLnVucmVnaXN0ZXJCZWZvcmVSZW5kZXIodGhpcy5iZWZvcmVSZW5kZXIpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgVlJFeHBlcmllbmNl
SGVscGVyIGNsYXNzCisgICAgICogQHJldHVybnMgIlZSRXhwZXJpZW5jZUhlbHBlciIKKyAgICAg
Ki8KKyAgICBWUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJWUkV4cGVyaWVuY2VIZWxwZXIiOworICAgIH07Cisg
ICAgcmV0dXJuIFZSRXhwZXJpZW5jZUhlbHBlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vQ2FtZXJhcy9WUi93ZWJWUkNhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9WUi93ZWJWUkNhbWVyYS50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBXZWJWUkZyZWVDYW1lcmEgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiV2ViVlJGcmVlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBXZWJWUkZy
ZWVDYW1lcmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2Vy
dmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19mcmVlQ2FtZXJh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9DYW1lcmFzL2ZyZWVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9mcmVlQ2FtZXJhLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DYW1lcmFzL2NhbWVy
YSAqLyAiLi9DYW1lcmFzL2NhbWVyYS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52
ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfR2FtZXBhZHNfZ2FtZXBhZF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vR2FtZXBhZHMvZ2FtZXBhZCAqLyAiLi9HYW1lcGFkcy9nYW1lcGFkLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0dhbWVwYWRzX0NvbnRyb2xsZXJzX3Bvc2VFbmFibGVkQ29udHJv
bGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvcG9zZUVuYWJsZWRDb250cm9sbGVyICovICIu
L0dhbWVwYWRzL0NvbnRyb2xsZXJzL3Bvc2VFbmFibGVkQ29udHJvbGxlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlICovICIuL25vZGUudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTGlnaHRzX2hlbWlzcGhlcmljTGlnaHRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0xpZ2h0cy9o
ZW1pc3BoZXJpY0xpZ2h0ICovICIuL0xpZ2h0cy9oZW1pc3BoZXJpY0xpZ2h0LnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9N
aXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2Vz
X3ZyTXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9Qb3N0UHJvY2Vzc2VzL3Zy
TXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy92ck11
bHRpdmlld1RvU2luZ2xldmlld1Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1JpZ01vZGVzX3dlYlZSUmlnTW9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1JpZ01vZGVzL3dlYlZSUmlnTW9kZSAqLyAi
Li9DYW1lcmFzL1JpZ01vZGVzL3dlYlZSUmlnTW9kZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9FbmdpbmVzX0V4dGVuc2lvbnNfZW5naW5lX3dlYlZSX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9FeHRl
bnNpb25zL2VuZ2luZS53ZWJWUiAqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLndlYlZS
LnRzIik7CisKKworCisKKworCisKKworCisKKworLy8gU2lkZSBlZmZlY3QgaW1wb3J0IHRvIGRl
ZmluZSB0aGUgc3RlcmVvc2NvcGljIG1vZGUuCisKKy8vIFNpZGUgZWZmZWN0IGltcG9ydCB0byBh
ZGQgd2VidnIgc3VwcG9ydCB0byBlbmdpbmUKKworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiV2ViVlJGcmVlQ2FtZXJhIiwgZnVu
Y3Rpb24gKG5hbWUsIHNjZW5lKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5l
dyBXZWJWUkZyZWVDYW1lcmEobmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKTsgfTsKK30pOworX25vZGVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3Rvcigi
V2ViVlJHYW1lcGFkQ2FtZXJhIiwgZnVuY3Rpb24gKG5hbWUsIHNjZW5lKSB7CisgICAgcmV0dXJu
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBXZWJWUkZyZWVDYW1lcmEobmFtZSwgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3RvcjMiXS5aZXJvKCks
IHNjZW5lKTsgfTsKK30pOworLyoqCisgKiBUaGlzIHJlcHJlc2VudHMgYSBXZWJWUiBjYW1lcmEu
CisgKiBUaGUgV2ViVlIgY2FtZXJhIGlzIEJhYnlsb24ncyBzaW1wbGUgaW50ZXJmYWNlIHRvIGlu
dGVyYWN0aW9uIHdpdGggV2luZG93cyBNaXhlZCBSZWFsaXR5LCBIVEMgVml2ZSBhbmQgT2N1bHVz
IFJpZnQuCisgKiBAZXhhbXBsZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3dlYnZy
X2NhbWVyYQorICovCit2YXIgV2ViVlJGcmVlQ2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZXh0ZW5kcyJdKFdlYlZSRnJlZUNhbWVyYSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0
YW50aWF0ZXMgYSBXZWJWUkZyZWVDYW1lcmEuCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUg
b2YgdGhlIFdlYlZSRnJlZUNhbWVyYQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgc3RhcnRp
bmcgYW5jaG9yIHBvc2l0aW9uIGZvciB0aGUgY2FtZXJhCisgICAgICogQHBhcmFtIHNjZW5lIFRo
ZSBzY2VuZSB0aGUgY2FtZXJhIGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gd2ViVlJPcHRpb25z
IGEgc2V0IG9mIGN1c3RvbWl6YWJsZSBvcHRpb25zIGZvciB0aGUgd2ViVlJDYW1lcmEKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBXZWJWUkZyZWVDYW1lcmEobmFtZSwgcG9zaXRpb24sIHNjZW5lLCB3
ZWJWUk9wdGlvbnMpIHsKKyAgICAgICAgaWYgKHdlYlZST3B0aW9ucyA9PT0gdm9pZCAwKSB7IHdl
YlZST3B0aW9ucyA9IHt9OyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMs
IG5hbWUsIHBvc2l0aW9uLCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMud2ViVlJPcHRp
b25zID0gd2ViVlJPcHRpb25zOworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbgorICAg
ICAgICAgKiBUaGUgdnJEaXNwbGF5IHRpZWQgdG8gdGhlIGNhbWVyYS4gU2VlIGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9WUkRpc3BsYXkKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLl92ckRldmljZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaGUgcmF3UG9zZSBvZiB0aGUgdnJEZXZpY2UuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5yYXdQb3NlID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX3NwZWNzVmVyc2lvbiA9ICIxLjEi
OworICAgICAgICBfdGhpcy5fYXR0YWNoZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2Rlc2Nl
bmRhbnRzID0gW107CisgICAgICAgIC8vIFJlcHJlc2VudHMgZGV2aWNlIHBvc2l0aW9uIGFuZCBy
b3RhdGlvbiBpbiByb29tIHNwYWNlLiBTaG91bGQgb25seSBiZSB1c2VkIHRvIGhlbHAgY2FsY3Vs
YXRlIGJhYnlsb24gc3BhY2UgdmFsdWVzCisgICAgICAgIF90aGlzLl9kZXZpY2VSb29tUG9zaXRp
b24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVj
dG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2Rl
dmljZVJvb21Sb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siUXVhdGVybmlvbiJdLklkZW50aXR5KCk7CisgICAgICAgIF90
aGlzLl9zdGFuZGluZ01hdHJpeCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXBy
ZXNlbnRzIGRldmljZSBwb3NpdGlvbiBpbiBiYWJ5bG9uIHNwYWNlLgorICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMuZGV2aWNlUG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFJlcHJlc2VudHMgZGV2aWNlIHJvdGF0aW9uIGluIGJhYnlsb24gc3BhY2UuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5kZXZpY2VSb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUXVhdGVybmlvbiJdLklk
ZW50aXR5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIGRldmlj
ZSB0byBiZSB1c2VkIHdoZW4gdHJhbnNsYXRpbmcgZnJvbSBkZXZpY2Ugc3BhY2UgdG8gYmFieWxv
biBzcGFjZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmRldmljZVNjYWxlRmFjdG9yID0g
MTsKKyAgICAgICAgX3RoaXMuX2RldmljZVRvV29ybGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAg
X3RoaXMuX3dvcmxkVG9EZXZpY2UgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFJlZmVyZW5jZXMgdG8gdGhlIHdlYlZSIGNvbnRyb2xsZXJzIGZvciB0aGUgdnJEZXZpY2Uu
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5jb250cm9sbGVycyA9IFtdOworICAgICAgICAv
KioKKyAgICAgICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIGNvbnRyb2xsZXIgaXMgYXR0YWNo
ZWQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkNvbnRyb2xsZXJzQXR0YWNoZWRPYnNl
cnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbWl0cyBhbiBldmVu
dCB3aGVuIGEgY29udHJvbGxlcidzIG1lc2ggaGFzIGJlZW4gbG9hZGVkOworICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMub25Db250cm9sbGVyTWVzaExvYWRlZE9ic2VydmFibGUgPSBuZXcgX01p
c2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0o
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIEhNRCdz
IHBvc2UgaGFzIGJlZW4gdXBkYXRlZC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uUG9z
ZVVwZGF0ZWRGcm9tRGV2aWNlT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhpcy5f
cG9zZVNldCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgdGhlIHJpZyBjYW1l
cmFzIGJlIHVzZWQgYXMgcGFyZW50IGluc3RlYWQgb2YgdGhpcyBjYW1lcmEuCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5yaWdQYXJlbnRpbmcgPSB0cnVlOworICAgICAgICBfdGhpcy5fZGVm
YXVsdEhlaWdodCA9IHVuZGVmaW5lZDsKKyAgICAgICAgX3RoaXMuX2h0bWxFbGVtZW50QXR0YWNo
ZWQgPSBudWxsOworICAgICAgICBfdGhpcy5fZGV0YWNoSWZBdHRhY2hlZCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHZhciB2ckRpc3BsYXkgPSBfdGhpcy5nZXRFbmdpbmUoKS5nZXRWUkRl
dmljZSgpOworICAgICAgICAgICAgaWYgKHZyRGlzcGxheSAmJiAhdnJEaXNwbGF5LmlzUHJlc2Vu
dGluZyAmJiBfdGhpcy5faHRtbEVsZW1lbnRBdHRhY2hlZCkgeworICAgICAgICAgICAgICAgIF90
aGlzLmRldGFjaENvbnRyb2woX3RoaXMuX2h0bWxFbGVtZW50QXR0YWNoZWQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9OworICAgICAgICBfdGhpcy5fd29ya2luZ1ZlY3RvciA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZWN0b3IzIl0uWmVybygp
OworICAgICAgICBfdGhpcy5fb25lVmVjdG9yID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3RvcjMiXS5PbmUoKTsKKyAgICAgICAgX3RoaXMuX3dv
cmtpbmdNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgX3RoaXMuX3RtcE1hdHJpeCA9IG5l
dyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0cml4
Il0oKTsKKyAgICAgICAgX3RoaXMuX2NhY2hlLnBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAg
IGlmICh3ZWJWUk9wdGlvbnMuZGVmYXVsdEhlaWdodCkgeworICAgICAgICAgICAgX3RoaXMuX2Rl
ZmF1bHRIZWlnaHQgPSB3ZWJWUk9wdGlvbnMuZGVmYXVsdEhlaWdodDsKKyAgICAgICAgICAgIF90
aGlzLnBvc2l0aW9uLnkgPSBfdGhpcy5fZGVmYXVsdEhlaWdodDsKKyAgICAgICAgfQorICAgICAg
ICBfdGhpcy5taW5aID0gMC4xOworICAgICAgICAvL2xlZ2FjeSBzdXBwb3J0IC0gdGhlIGNvbXBl
bnNhdGlvbiBib29sZWFuIHdhcyByZW1vdmVkLgorICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0
aCA9PT0gNSkgeworICAgICAgICAgICAgX3RoaXMud2ViVlJPcHRpb25zID0gYXJndW1lbnRzWzRd
OworICAgICAgICB9CisgICAgICAgIC8vIGRlZmF1bHQgd2ViVlIgb3B0aW9ucworICAgICAgICBp
ZiAoX3RoaXMud2ViVlJPcHRpb25zLnRyYWNrUG9zaXRpb24gPT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgICAgICBfdGhpcy53ZWJWUk9wdGlvbnMudHJhY2tQb3NpdGlvbiA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKF90aGlzLndlYlZST3B0aW9ucy5jb250cm9sbGVyTWVzaGVzID09IHVu
ZGVmaW5lZCkgeworICAgICAgICAgICAgX3RoaXMud2ViVlJPcHRpb25zLmNvbnRyb2xsZXJNZXNo
ZXMgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChfdGhpcy53ZWJWUk9wdGlvbnMuZGVm
YXVsdExpZ2h0aW5nT25Db250cm9sbGVycyA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIF90
aGlzLndlYlZST3B0aW9ucy5kZWZhdWx0TGlnaHRpbmdPbkNvbnRyb2xsZXJzID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBfdGhpcy5yb3RhdGlvblF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlF1YXRlcm5pb24iXSgpOwor
ICAgICAgICBpZiAoX3RoaXMud2ViVlJPcHRpb25zICYmIF90aGlzLndlYlZST3B0aW9ucy5wb3Np
dGlvblNjYWxlKSB7CisgICAgICAgICAgICBfdGhpcy5kZXZpY2VTY2FsZUZhY3RvciA9IF90aGlz
LndlYlZST3B0aW9ucy5wb3NpdGlvblNjYWxlOworICAgICAgICB9CisgICAgICAgIC8vZW5hYmxl
IFZSCisgICAgICAgIHZhciBlbmdpbmUgPSBfdGhpcy5nZXRFbmdpbmUoKTsKKyAgICAgICAgX3Ro
aXMuX29uVlJFbmFibGVkID0gZnVuY3Rpb24gKHN1Y2Nlc3MpIHsgaWYgKHN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgIF90aGlzLmluaXRDb250cm9sbGVycygpOworICAgICAgICB9IH07CisgICAgICAg
IGVuZ2luZS5vblZSUmVxdWVzdFByZXNlbnRDb21wbGV0ZS5hZGQoX3RoaXMuX29uVlJFbmFibGVk
KTsKKyAgICAgICAgZW5naW5lLmluaXRXZWJWUigpLmFkZChmdW5jdGlvbiAoZXZlbnQpIHsKKyAg
ICAgICAgICAgIGlmICghZXZlbnQudnJEaXNwbGF5IHx8IF90aGlzLl92ckRldmljZSA9PT0gZXZl
bnQudnJEaXNwbGF5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgX3RoaXMuX3ZyRGV2aWNlID0gZXZlbnQudnJEaXNwbGF5OworICAgICAgICAg
ICAgLy9yZXNldCB0aGUgcmlnIHBhcmFtZXRlcnMuCisgICAgICAgICAgICBfdGhpcy5zZXRDYW1l
cmFSaWdNb2RlKF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJD
YW1lcmEiXS5SSUdfTU9ERV9XRUJWUiwgeyBwYXJlbnRDYW1lcmE6IF90aGlzLCB2ckRpc3BsYXk6
IF90aGlzLl92ckRldmljZSwgZnJhbWVEYXRhOiBfdGhpcy5fZnJhbWVEYXRhLCBzcGVjczogX3Ro
aXMuX3NwZWNzVmVyc2lvbiB9KTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fYXR0YWNoZWQpIHsK
KyAgICAgICAgICAgICAgICBfdGhpcy5nZXRFbmdpbmUoKS5lbmFibGVWUigpOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICAgICAgaWYgKHR5cGVvZiAoVlJGcmFtZURhdGEpICE9PSAi
dW5kZWZpbmVkIikgeworICAgICAgICAgICAgX3RoaXMuX2ZyYW1lRGF0YSA9IG5ldyBWUkZyYW1l
RGF0YSgpOworICAgICAgICB9CisgICAgICAgIGlmICh3ZWJWUk9wdGlvbnMudXNlTXVsdGl2aWV3
KSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuZ2V0Q2Fw
cygpLm11bHRpdmlldykgeworICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJMb2dnZXIiXS5XYXJuKCJNdWx0aXZpZXcgaXMgbm90IHN1cHBv
cnRlZCwgZmFsbGluZyBiYWNrIHRvIHN0YW5kYXJkIHJlbmRlcmluZyIpOworICAgICAgICAgICAg
ICAgIF90aGlzLl91c2VNdWx0aXZpZXdUb1NpbmdsZVZpZXcgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIF90aGlzLl91c2VNdWx0aXZp
ZXdUb1NpbmdsZVZpZXcgPSB0cnVlOworICAgICAgICAgICAgICAgIF90aGlzLl9yaWdQb3N0UHJv
Y2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc192ck11bHRpdmlld1RvU2luZ2xldmlld1Bvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJWUk11bHRpdmlld1RvU2luZ2xldmll
d1Bvc3RQcm9jZXNzIl0oIlZSTXVsdGl2aWV3VG9TaW5nbGV2aWV3IiwgX3RoaXMsIDEuMCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBpZGVh
IGJlaGluZCB0aGUgZm9sbG93aW5nIGxpbmVzOgorICAgICAgICAgKiBvYmplY3RzIHRoYXQgaGF2
ZSB0aGUgY2FtZXJhIGFzIHBhcmVudCBzaG91bGQgYWN0dWFsbHkgaGF2ZSB0aGUgcmlnIGNhbWVy
YXMgYXMgYSBwYXJlbnQuCisgICAgICAgICAqIEJVVCwgZWFjaCBvZiB0aG9zZSBjYW1lcmFzIGhh
cyBhIGRpZmZlcmVudCB2aWV3IG1hdHJpeCwgd2hpY2ggbWVhbnMgdGhhdCBpZiB3ZSBzZXQgdGhl
IHBhcmVudCB0byB0aGUgZmlyc3QgcmlnIGNhbWVyYSwKKyAgICAgICAgICogdGhlIHNlY29uZCB3
aWxsIG5vdCBzaG93IGl0IGNvcnJlY3RseS4KKyAgICAgICAgICoKKyAgICAgICAgICogVG8gc29s
dmUgdGhpcyAtIGVhY2ggb2JqZWN0IHRoYXQgaGFzIHRoZSBjYW1lcmEgYXMgcGFyZW50IHdpbGwg
YmUgYWRkZWQgdG8gYSBwcm90ZWN0ZWQgYXJyYXkuCisgICAgICAgICAqIFdoZW4gdGhlIHJpZyBj
YW1lcmEgcmVuZGVycywgaXQgd2lsbCB0YWtlIHRoaXMgYXJyYXkgYW5kIHNldCBhbGwgb2YgdGhv
c2UgdG8gYmUgaXRzIGNoaWxkcmVuLgorICAgICAgICAgKiBUaGlzIHdheSwgdGhlIHJpZ2h0IGNh
bWVyYSB3aWxsIGJlIHVzZWQgYXMgYSBwYXJlbnQsIGFuZCB0aGUgbWVzaCB3aWxsIGJlIHJlbmRl
cmVkIGNvcnJlY3RseS4KKyAgICAgICAgICogQW1hemluZyEKKyAgICAgICAgICovCisgICAgICAg
IHNjZW5lLm9uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGNhbWVy
YSkgeworICAgICAgICAgICAgaWYgKGNhbWVyYS5wYXJlbnQgPT09IF90aGlzICYmIF90aGlzLnJp
Z1BhcmVudGluZykgeworICAgICAgICAgICAgICAgIF90aGlzLl9kZXNjZW5kYW50cyA9IF90aGlz
LmdldERlc2NlbmRhbnRzKHRydWUsIGZ1bmN0aW9uIChuKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIGRvbid0IHRha2UgdGhlIGNhbWVyYXMgb3IgdGhlIGNvbnRyb2xsZXJzIQorICAgICAgICAg
ICAgICAgICAgICB2YXIgaXNDb250cm9sbGVyID0gX3RoaXMuY29udHJvbGxlcnMuc29tZShmdW5j
dGlvbiAoY29udHJvbGxlcikgeyByZXR1cm4gY29udHJvbGxlci5fbWVzaCA9PT0gbjsgfSk7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBpc1JpZ0NhbWVyYSA9IF90aGlzLl9yaWdDYW1lcmFzLmlu
ZGV4T2YobikgIT09IC0xOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzQ29udHJvbGxl
ciAmJiAhaXNSaWdDYW1lcmE7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
X3RoaXMuX2Rlc2NlbmRhbnRzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS5wYXJlbnQgPSBjYW1lcmE7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBzY2VuZS5vbkFmdGVyQ2FtZXJhUmVuZGVy
T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICAgICAgaWYgKGNhbWVy
YS5wYXJlbnQgPT09IF90aGlzICYmIF90aGlzLnJpZ1BhcmVudGluZykgeworICAgICAgICAgICAg
ICAgIF90aGlzLl9kZXNjZW5kYW50cy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gX3RoaXM7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQor
ICAgIC8qKgorICAgICAqIEdldHMgdGhlIGRldmljZSBkaXN0YW5jZSBmcm9tIHRoZSBncm91bmQg
aW4gbWV0ZXJzLgorICAgICAqIEByZXR1cm5zIHRoZSBkaXN0YW5jZSBpbiBtZXRlcnMgZnJvbSB0
aGUgdnJEZXZpY2UgdG8gZ3JvdW5kIGluIGRldmljZSBzcGFjZS4gSWYgc3RhbmRpbmcgbWF0cml4
IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSB2ckRldmljZSAwIGlzIHJldHVybmVkLgorICAgICAq
LworICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUuZGV2aWNlRGlzdGFuY2VUb1Jvb21Hcm91
bmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9zdGFuZGluZ01hdHJpeCkgewor
ICAgICAgICAgICAgLy8gQWRkIHN0YW5kaW5nIG1hdHJpeCBvZmZzZXQgdG8gZ2V0IHJlYWwgb2Zm
c2V0IGZyb20gZ3JvdW5kIGluIHJvb20KKyAgICAgICAgICAgIHRoaXMuX3N0YW5kaW5nTWF0cml4
LmdldFRyYW5zbGF0aW9uVG9SZWYodGhpcy5fd29ya2luZ1ZlY3Rvcik7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fZGV2aWNlUm9vbVBvc2l0aW9uLnkgKyB0aGlzLl93b3JraW5nVmVjdG9yLnk7
CisgICAgICAgIH0KKyAgICAgICAgLy9JZiBWUkRpc3BsYXkgZG9lcyBub3QgaW5mb3JtIHN0YWdl
IHBhcmFtZXRlcnMgYW5kIG5vIGRlZmF1bHQgaGVpZ2h0IGlzIHNldCB3ZSBmYWxsYmFjayB0byB6
ZXJvLgorICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEhlaWdodCB8fCAwOworICAgIH07Cisg
ICAgLyoqCisgICAgICogRW5hYmxlcyB0aGUgc3RhbmRpbmcgbWF0cml4IHdoZW4gc3VwcG9ydGVk
LiBUaGlzIGNhbiBiZSB1c2VkIHRvIHBvc2l0aW9uIHRoZSB1c2VyJ3MgdmlldyB0aGUgY29ycmVj
dCBoZWlnaHQgZnJvbSB0aGUgZ3JvdW5kLgorICAgICAqIEBwYXJhbSBjYWxsYmFjayB3aWxsIGJl
IGNhbGxlZCB3aGVuIHRoZSBzdGFuZGluZyBtYXRyaXggaXMgc2V0LiBDYWxsYmFjayBwYXJhbWV0
ZXIgaXMgaWYgdGhlIHN0YW5kaW5nIG1hdHJpeCBpcyBzdXBwb3J0ZWQuCisgICAgICovCisgICAg
V2ViVlJGcmVlQ2FtZXJhLnByb3RvdHlwZS51c2VTdGFuZGluZ01hdHJpeCA9IGZ1bmN0aW9uIChj
YWxsYmFjaykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoY2FsbGJh
Y2sgPT09IHZvaWQgMCkgeyBjYWxsYmFjayA9IGZ1bmN0aW9uIChib29sKSB7IH07IH0KKyAgICAg
ICAgLy8gVXNlIHN0YW5kaW5nIG1hdHJpeCBpZiBhdmFpbGFibGUKKyAgICAgICAgdGhpcy5nZXRF
bmdpbmUoKS5pbml0V2ViVlJBc3luYygpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAg
ICAgICAgaWYgKCFyZXN1bHQudnJEaXNwbGF5IHx8ICFyZXN1bHQudnJEaXNwbGF5LnN0YWdlUGFy
YW1ldGVycyB8fCAhcmVzdWx0LnZyRGlzcGxheS5zdGFnZVBhcmFtZXRlcnMuc2l0dGluZ1RvU3Rh
bmRpbmdUcmFuc2Zvcm0gfHwgIV90aGlzLndlYlZST3B0aW9ucy50cmFja1Bvc2l0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3N0YW5kaW5nTWF0cml4ID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRyaXgiXSgp
OworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJNYXRyaXgiXS5Gcm9tRmxvYXQzMkFycmF5VG9SZWZTY2FsZWQocmVzdWx0LnZy
RGlzcGxheS5zdGFnZVBhcmFtZXRlcnMuc2l0dGluZ1RvU3RhbmRpbmdUcmFuc2Zvcm0sIDAsIDEs
IF90aGlzLl9zdGFuZGluZ01hdHJpeCk7CisgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5nZXRT
Y2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVtKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChf
dGhpcy5fc3RhbmRpbmdNYXRyaXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9z
dGFuZGluZ01hdHJpeC50b2dnbGVNb2RlbE1hdHJpeEhhbmRJblBsYWNlKCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FsbGJhY2so
dHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAg
ICogRW5hYmxlcyB0aGUgc3RhbmRpbmcgbWF0cml4IHdoZW4gc3VwcG9ydGVkLiBUaGlzIGNhbiBi
ZSB1c2VkIHRvIHBvc2l0aW9uIHRoZSB1c2VyJ3MgdmlldyB0aGUgY29ycmVjdCBoZWlnaHQgZnJv
bSB0aGUgZ3JvdW5kLgorICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRoIGEgYm9vbGVhbiBz
ZXQgdG8gaWYgdGhlIHN0YW5kaW5nIG1hdHJpeCBpcyBzdXBwb3J0ZWQuCisgICAgICovCisgICAg
V2ViVlJGcmVlQ2FtZXJhLnByb3RvdHlwZS51c2VTdGFuZGluZ01hdHJpeEFzeW5jID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICByZXR1cm4gbmV3IFBy
b21pc2UoZnVuY3Rpb24gKHJlcykgeworICAgICAgICAgICAgX3RoaXMudXNlU3RhbmRpbmdNYXRy
aXgoZnVuY3Rpb24gKHN1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgIHJlcyhzdXBwb3J0ZWQp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICog
RGlzcG9zZXMgdGhlIGNhbWVyYQorICAgICAqLworICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5
cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fZGV0YWNoSWZBdHRhY2hl
ZCgpOworICAgICAgICB0aGlzLmdldEVuZ2luZSgpLm9uVlJSZXF1ZXN0UHJlc2VudENvbXBsZXRl
LnJlbW92ZUNhbGxiYWNrKHRoaXMuX29uVlJFbmFibGVkKTsKKyAgICAgICAgaWYgKHRoaXMuX3Vw
ZGF0ZUNhY2hlV2hlblRyYWNraW5nRGlzYWJsZWRPYnNlcnZlcikgeworICAgICAgICAgICAgdGhp
cy5fc2NlbmUub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl91cGRhdGVDYWNo
ZVdoZW5UcmFja2luZ0Rpc2FibGVkT2JzZXJ2ZXIpOworICAgICAgICB9CisgICAgICAgIF9zdXBl
ci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0cyBhIHZyQ29udHJvbGxlciBieSBuYW1lLgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1l
IG9mIHRoZSBjb250cm9sbGVyIHRvIHJldHJlaXZlCisgICAgICogQHJldHVybnMgdGhlIGNvbnRy
b2xsZXIgbWF0Y2hpbmcgdGhlIG5hbWUgc3BlY2lmaWVkIG9yIG51bGwgaWYgbm90IGZvdW5kCisg
ICAgICovCisgICAgV2ViVlJGcmVlQ2FtZXJhLnByb3RvdHlwZS5nZXRDb250cm9sbGVyQnlOYW1l
ID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMu
Y29udHJvbGxlcnM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgZ3Ag
PSBfYVtfaV07CisgICAgICAgICAgICBpZiAoZ3AuaGFuZCA9PT0gbmFtZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBncDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJWUkZyZWVDYW1l
cmEucHJvdG90eXBlLCAibGVmdENvbnRyb2xsZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBUaGUgY29udHJvbGxlciBjb3JyZXNwb25kaW5nIHRvIHRoZSB1c2VycyBsZWZ0IGhhbmQuCisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICgh
dGhpcy5fbGVmdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9sZWZ0Q29udHJv
bGxlciA9IHRoaXMuZ2V0Q29udHJvbGxlckJ5TmFtZSgibGVmdCIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRDb250cm9sbGVyOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViVlJGcmVlQ2FtZXJhLnByb3RvdHlwZSwg
InJpZ2h0Q29udHJvbGxlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjb250cm9s
bGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHVzZXJzIHJpZ2h0IGhhbmQuCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fcmlnaHRD
b250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRDb250cm9sbGVyID0gdGhp
cy5nZXRDb250cm9sbGVyQnlOYW1lKCJyaWdodCIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3JpZ2h0Q29udHJvbGxlcjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqCisgICAgICogQ2FzdHMgYSByYXkgZm9yd2FyZCBmcm9tIHRoZSB2ckNhbWVyYSdzIGdhemUu
CisgICAgICogQHBhcmFtIGxlbmd0aCBMZW5ndGggb2YgdGhlIHJheSAoZGVmYXVsdDogMTAwKQor
ICAgICAqIEByZXR1cm5zIHRoZSByYXkgY29ycmVzcG9uZGluZyB0byB0aGUgZ2F6ZQorICAgICAq
LworICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUuZ2V0Rm9yd2FyZFJheSA9IGZ1bmN0aW9u
IChsZW5ndGgpIHsKKyAgICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7IGxlbmd0aCA9IDEw
MDsgfQorICAgICAgICBpZiAodGhpcy5sZWZ0Q2FtZXJhKSB7CisgICAgICAgICAgICAvLyBVc2Ug
bGVmdCBleWUgdG8gYXZvaWQgY29tcHV0YXRpb24gdG8gY29tcHV0ZSBjZW50ZXIgb24gZXZlcnkg
Y2FsbAorICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZ2V0Rm9yd2FyZFJheS5j
YWxsKHRoaXMsIGxlbmd0aCwgdGhpcy5sZWZ0Q2FtZXJhLmdldFdvcmxkTWF0cml4KCksIHRoaXMu
bGVmdENhbWVyYS5nbG9iYWxQb3NpdGlvbik7IC8vIE5lZWQgdGhlIGFjdHVhbCByZW5kZXJlZCBj
YW1lcmEKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBfc3Vw
ZXIucHJvdG90eXBlLmdldEZvcndhcmRSYXkuY2FsbCh0aGlzLCBsZW5ndGgpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICogVXBkYXRlcyB0aGUgY2Ft
ZXJhIGJhc2VkIG9uIGRldmljZSdzIGZyYW1lIGRhdGEKKyAgICAgKi8KKyAgICBXZWJWUkZyZWVD
YW1lcmEucHJvdG90eXBlLl9jaGVja0lucHV0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMuX3ZyRGV2aWNlICYmIHRoaXMuX3ZyRGV2aWNlLmlzUHJlc2VudGluZykgeworICAgICAg
ICAgICAgdGhpcy5fdnJEZXZpY2UuZ2V0RnJhbWVEYXRhKHRoaXMuX2ZyYW1lRGF0YSk7CisgICAg
ICAgICAgICB0aGlzLnVwZGF0ZUZyb21EZXZpY2UodGhpcy5fZnJhbWVEYXRhLnBvc2UpOworICAg
ICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2NoZWNrSW5wdXRzLmNhbGwodGhpcyk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBwb3NlQ29udHJvbGxlZCB2YWx1
ZXMgYmFzZWQgb24gdGhlIGlucHV0IGRldmljZSBwb3NlLgorICAgICAqIEBwYXJhbSBwb3NlRGF0
YSBQb3NlIGNvbWluZyBmcm9tIHRoZSBkZXZpY2UKKyAgICAgKi8KKyAgICBXZWJWUkZyZWVDYW1l
cmEucHJvdG90eXBlLnVwZGF0ZUZyb21EZXZpY2UgPSBmdW5jdGlvbiAocG9zZURhdGEpIHsKKyAg
ICAgICAgaWYgKHBvc2VEYXRhICYmIHBvc2VEYXRhLm9yaWVudGF0aW9uICYmIHBvc2VEYXRhLm9y
aWVudGF0aW9uLmxlbmd0aCA9PT0gNCkgeworICAgICAgICAgICAgdGhpcy5yYXdQb3NlID0gcG9z
ZURhdGE7CisgICAgICAgICAgICB0aGlzLl9kZXZpY2VSb29tUm90YXRpb25RdWF0ZXJuaW9uLmNv
cHlGcm9tRmxvYXRzKHBvc2VEYXRhLm9yaWVudGF0aW9uWzBdLCBwb3NlRGF0YS5vcmllbnRhdGlv
blsxXSwgLXBvc2VEYXRhLm9yaWVudGF0aW9uWzJdLCAtcG9zZURhdGEub3JpZW50YXRpb25bM10p
OworICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkg
eworICAgICAgICAgICAgICAgIHRoaXMuX2RldmljZVJvb21Sb3RhdGlvblF1YXRlcm5pb24ueiAq
PSAtMTsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VSb29tUm90YXRpb25RdWF0ZXJuaW9u
LncgKj0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy53ZWJWUk9wdGlv
bnMudHJhY2tQb3NpdGlvbiAmJiB0aGlzLnJhd1Bvc2UucG9zaXRpb24pIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9kZXZpY2VSb29tUG9zaXRpb24uY29weUZyb21GbG9hdHModGhpcy5yYXdQb3Nl
LnBvc2l0aW9uWzBdLCB0aGlzLnJhd1Bvc2UucG9zaXRpb25bMV0sIC10aGlzLnJhd1Bvc2UucG9z
aXRpb25bMl0pOworICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFNjZW5lKCkudXNlUmlnaHRI
YW5kZWRTeXN0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlUm9vbVBvc2l0
aW9uLnogKj0gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fcG9zZVNldCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIFdlYlZSJ3MgYXR0YWNoIGNvbnRyb2wgd2lsbCBzdGFydCBicm9hZGNhc3RpbmcgZnJhbWVz
IHRvIHRoZSBkZXZpY2UuCisgICAgICogTm90ZSB0aGF0IGluIGNlcnRhaW4gYnJvd3NlcnMgKGNo
cm9tZSBmb3IgZXhhbXBsZSkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAorICAgICAqIHdp
dGhpbiBhIHVzZXItaW50ZXJhY3Rpb24gY2FsbGJhY2suIEV4YW1wbGU6CisgICAgICogPHByZT4g
c2NlbmUub25Qb2ludGVyRG93biA9IGZ1bmN0aW9uKCkgeyBjYW1lcmEuYXR0YWNoQ29udHJvbChj
YW52YXMpOyB9PC9wcmU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gZWxlbWVudCBodG1sIGVsZW1l
bnQgdG8gYXR0YWNoIHRoZSB2ckRldmljZSB0bworICAgICAqIEBwYXJhbSBub1ByZXZlbnREZWZh
dWx0IHByZXZlbnQgdGhlIGRlZmF1bHQgaHRtbCBlbGVtZW50IG9wZXJhdGlvbiB3aGVuIGF0dGFj
aGluZyB0aGUgdnJEZXZpY2UKKyAgICAgKi8KKyAgICBXZWJWUkZyZWVDYW1lcmEucHJvdG90eXBl
LmF0dGFjaENvbnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCkgewor
ICAgICAgICBfc3VwZXIucHJvdG90eXBlLmF0dGFjaENvbnRyb2wuY2FsbCh0aGlzLCBlbGVtZW50
LCBub1ByZXZlbnREZWZhdWx0KTsKKyAgICAgICAgdGhpcy5fYXR0YWNoZWQgPSB0cnVlOworICAg
ICAgICB0aGlzLl9odG1sRWxlbWVudEF0dGFjaGVkID0gZWxlbWVudDsKKyAgICAgICAgbm9QcmV2
ZW50RGVmYXVsdCA9IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJDYW1lcmEiXS5Gb3JjZUF0dGFjaENvbnRyb2xUb0Fsd2F5c1ByZXZlbnREZWZhdWx0ID8gZmFs
c2UgOiBub1ByZXZlbnREZWZhdWx0OworICAgICAgICBpZiAodGhpcy5fdnJEZXZpY2UpIHsKKyAg
ICAgICAgICAgIHRoaXMuZ2V0RW5naW5lKCkuZW5hYmxlVlIoKTsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgaG9zdFdpbmRvdyA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldEhvc3RXaW5kb3co
KTsKKyAgICAgICAgaG9zdFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd2cmRpc3BsYXlwcmVzZW50
Y2hhbmdlJywgdGhpcy5fZGV0YWNoSWZBdHRhY2hlZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBEZXRhY2hlcyB0aGUgY2FtZXJhIGZyb20gdGhlIGh0bWwgZWxlbWVudCBhbmQgZGlzYWJsZXMg
VlIKKyAgICAgKgorICAgICAqIEBwYXJhbSBlbGVtZW50IGh0bWwgZWxlbWVudCB0byBkZXRhY2gg
ZnJvbQorICAgICAqLworICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUuZGV0YWNoQ29udHJv
bCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5nYW1lcGFk
TWFuYWdlci5vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkdhbWVw
YWRDb25uZWN0ZWRPYnNlcnZlcik7CisgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5nYW1lcGFkTWFu
YWdlci5vbkdhbWVwYWREaXNjb25uZWN0ZWRPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkdhbWVw
YWREaXNjb25uZWN0ZWRPYnNlcnZlcik7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGV0YWNo
Q29udHJvbC5jYWxsKHRoaXMsIGVsZW1lbnQpOworICAgICAgICB0aGlzLl9hdHRhY2hlZCA9IGZh
bHNlOworICAgICAgICB0aGlzLmdldEVuZ2luZSgpLmRpc2FibGVWUigpOworICAgICAgICB3aW5k
b3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndnJkaXNwbGF5cHJlc2VudGNoYW5nZScsIHRoaXMuX2Rl
dGFjaElmQXR0YWNoZWQpOworICAgIH07CisgICAgLyoqCisgICAgICogQHJldHVybnMgdGhlIG5h
bWUgb2YgdGhpcyBjbGFzcworICAgICAqLworICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUu
Z2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIldlYlZSRnJlZUNh
bWVyYSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxscyByZXNldFBvc2Ugb24gdGhlIHZy
RGlzcGxheQorICAgICAqIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMv
ZG9jcy9XZWIvQVBJL1ZSRGlzcGxheS9yZXNldFBvc2UKKyAgICAgKi8KKyAgICBXZWJWUkZyZWVD
YW1lcmEucHJvdG90eXBlLnJlc2V0VG9DdXJyZW50Um90YXRpb24gPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIC8vdXNlcyB0aGUgdnJEaXNwbGF5J3MgInJlc2V0UG9zZSgpIi4KKyAgICAgICAgLy9w
aXRjaCBhbmQgcm9sbCB3b24ndCBiZSBhZmZlY3RlZC4KKyAgICAgICAgdGhpcy5fdnJEZXZpY2Uu
cmVzZXRQb3NlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICogVXBk
YXRlcyB0aGUgcmlnIGNhbWVyYXMgKGxlZnQgYW5kIHJpZ2h0IGV5ZSkKKyAgICAgKi8KKyAgICBX
ZWJWUkZyZWVDYW1lcmEucHJvdG90eXBlLl91cGRhdGVSaWdDYW1lcmFzID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgY2FtTGVmdCA9IHRoaXMuX3JpZ0NhbWVyYXNbMF07CisgICAgICAgIHZh
ciBjYW1SaWdodCA9IHRoaXMuX3JpZ0NhbWVyYXNbMV07CisgICAgICAgIGNhbUxlZnQucm90YXRp
b25RdWF0ZXJuaW9uLmNvcHlGcm9tKHRoaXMuX2RldmljZVJvb21Sb3RhdGlvblF1YXRlcm5pb24p
OworICAgICAgICBjYW1SaWdodC5yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odGhpcy5fZGV2
aWNlUm9vbVJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIGNhbUxlZnQucG9zaXRpb24uY29w
eUZyb20odGhpcy5fZGV2aWNlUm9vbVBvc2l0aW9uKTsKKyAgICAgICAgY2FtUmlnaHQucG9zaXRp
b24uY29weUZyb20odGhpcy5fZGV2aWNlUm9vbVBvc2l0aW9uKTsKKyAgICB9OworICAgIC8vIFJl
bW92ZSB0cmFuc2xhdGlvbiBmcm9tIDZkb2YgaGVhZHNldCBpZiB0cmFja3Bvc2l0aW9uIGlzIHNl
dCB0byBmYWxzZQorICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUuX2NvcnJlY3RQb3NpdGlv
bklmTm90VHJhY2tQb3NpdGlvbiA9IGZ1bmN0aW9uIChtYXRyaXgsIGlzVmlld01hdHJpeCkgewor
ICAgICAgICBpZiAoaXNWaWV3TWF0cml4ID09PSB2b2lkIDApIHsgaXNWaWV3TWF0cml4ID0gZmFs
c2U7IH0KKyAgICAgICAgaWYgKHRoaXMucmF3UG9zZSAmJiB0aGlzLnJhd1Bvc2UucG9zaXRpb24g
JiYgIXRoaXMud2ViVlJPcHRpb25zLnRyYWNrUG9zaXRpb24pIHsKKyAgICAgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRyaXgiXS5UcmFu
c2xhdGlvblRvUmVmKHRoaXMucmF3UG9zZS5wb3NpdGlvblswXSwgdGhpcy5yYXdQb3NlLnBvc2l0
aW9uWzFdLCAtdGhpcy5yYXdQb3NlLnBvc2l0aW9uWzJdLCB0aGlzLl90bXBNYXRyaXgpOworICAg
ICAgICAgICAgaWYgKCFpc1ZpZXdNYXRyaXgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90bXBN
YXRyaXguaW52ZXJ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl90bXBNYXRy
aXgubXVsdGlwbHlUb1JlZihtYXRyaXgsIG1hdHJpeCk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAgKiBVcGRhdGVzIHRoZSBjYWNoZWQgdmFsdWVzIG9m
IHRoZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gaWdub3JlUGFyZW50Q2xhc3MgaWdub3JlcyB1cGRh
dGluZyB0aGUgcGFyZW50IGNsYXNzJ3MgY2FjaGUgKGRlZmF1bHQ6IGZhbHNlKQorICAgICAqLwor
ICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUuX3VwZGF0ZUNhY2hlID0gZnVuY3Rpb24gKGln
bm9yZVBhcmVudENsYXNzKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlm
ICghdGhpcy5yb3RhdGlvblF1YXRlcm5pb24uZXF1YWxzKHRoaXMuX2NhY2hlLnJvdGF0aW9uUXVh
dGVybmlvbikgfHwgIXRoaXMucG9zaXRpb24uZXF1YWxzKHRoaXMuX2NhY2hlLnBvc2l0aW9uKSkg
eworICAgICAgICAgICAgLy8gVXBkYXRlIHRvIGVuc3VyZSBkZXZpY2VQb3NpdGlvbiBpcyB1cCB0
byBkYXRlIHdpdGggbW9zdCByZWNlbnQgX2RldmljZVJvb21Qb3NpdGlvbgorICAgICAgICAgICAg
aWYgKCF0aGlzLnVwZGF0ZUNhY2hlQ2FsbGVkKSB7CisgICAgICAgICAgICAgICAgLy8gbWFrZSBz
dXJlIGl0IGlzIG9ubHkgY2FsbGVkIG9uY2UgcGVyIGxvb3AuIHRoaXMudXBkYXRlKCkgbWlnaHQg
Y2F1c2UgYW4gaW5maW5pdGUgbG9vcC4KKyAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hl
Q2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gU2V0IHdvcmtpbmcgdmVjdG9yIHRvIHRoZSBkZXZpY2UgcG9z
aXRpb24gaW4gcm9vbSBzcGFjZSByb3RhdGVkIGJ5IHRoZSBuZXcgcm90YXRpb24KKyAgICAgICAg
ICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uLnRvUm90YXRpb25NYXRyaXgodGhpcy5fd29ya2lu
Z01hdHJpeCk7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYodGhpcy5f
ZGV2aWNlUm9vbVBvc2l0aW9uLCB0aGlzLl93b3JraW5nTWF0cml4LCB0aGlzLl93b3JraW5nVmVj
dG9yKTsKKyAgICAgICAgICAgIC8vIFN1YnRyYWN0IHRoaXMgdmVjdG9yIGZyb20gdGhlIGN1cnJl
bnQgZGV2aWNlIHBvc2l0aW9uIGluIHdvcmxkIHRvIGdldCB0aGUgdHJhbnNsYXRpb24gZm9yIHRo
ZSBkZXZpY2Ugd29ybGQgbWF0cml4CisgICAgICAgICAgICB0aGlzLmRldmljZVBvc2l0aW9uLnN1
YnRyYWN0VG9SZWYodGhpcy5fd29ya2luZ1ZlY3RvciwgdGhpcy5fd29ya2luZ1ZlY3Rvcik7Cisg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siTWF0cml4Il0uQ29tcG9zZVRvUmVmKHRoaXMuX29uZVZlY3RvciwgdGhpcy5yb3RhdGlvblF1
YXRlcm5pb24sIHRoaXMuX3dvcmtpbmdWZWN0b3IsIHRoaXMuX2RldmljZVRvV29ybGQpOworICAg
ICAgICAgICAgLy8gQWRkIHRyYW5zbGF0aW9uIGZyb20gYW5jaG9yIHBvc2l0aW9uCisgICAgICAg
ICAgICB0aGlzLl9kZXZpY2VUb1dvcmxkLmdldFRyYW5zbGF0aW9uVG9SZWYodGhpcy5fd29ya2lu
Z1ZlY3Rvcik7CisgICAgICAgICAgICB0aGlzLl93b3JraW5nVmVjdG9yLmFkZEluUGxhY2UodGhp
cy5wb3NpdGlvbik7CisgICAgICAgICAgICB0aGlzLl93b3JraW5nVmVjdG9yLnN1YnRyYWN0SW5Q
bGFjZSh0aGlzLl9jYWNoZS5wb3NpdGlvbik7CisgICAgICAgICAgICB0aGlzLl9kZXZpY2VUb1dv
cmxkLnNldFRyYW5zbGF0aW9uKHRoaXMuX3dvcmtpbmdWZWN0b3IpOworICAgICAgICAgICAgLy8g
U2V0IGFuIGludmVydGVkIG1hdHJpeCB0byBiZSB1c2VkIHdoZW4gdXBkYXRpbmcgdGhlIGNhbWVy
YQorICAgICAgICAgICAgdGhpcy5fZGV2aWNlVG9Xb3JsZC5pbnZlcnRUb1JlZih0aGlzLl93b3Js
ZFRvRGV2aWNlKTsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZ2FtZXBhZCB0byBlbnN1cmUg
dGhlIG1lc2ggaXMgdXBkYXRlZCBvbiB0aGUgc2FtZSBmcmFtZSBhcyBjYW1lcmEKKyAgICAgICAg
ICAgIHRoaXMuY29udHJvbGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoY29udHJvbGxlcikgeworICAg
ICAgICAgICAgICAgIGNvbnRyb2xsZXIuX2RldmljZVRvV29ybGQuY29weUZyb20oX3RoaXMuX2Rl
dmljZVRvV29ybGQpOworICAgICAgICAgICAgICAgIF90aGlzLl9jb3JyZWN0UG9zaXRpb25JZk5v
dFRyYWNrUG9zaXRpb24oY29udHJvbGxlci5fZGV2aWNlVG9Xb3JsZCk7CisgICAgICAgICAgICAg
ICAgY29udHJvbGxlci51cGRhdGUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
ICAgIGlmICghaWdub3JlUGFyZW50Q2xhc3MpIHsKKyAgICAgICAgICAgIF9zdXBlci5wcm90b3R5
cGUuX3VwZGF0ZUNhY2hlLmNhbGwodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy51cGRh
dGVDYWNoZUNhbGxlZCA9IGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRlbgor
ICAgICAqIEdldCBjdXJyZW50IGRldmljZSBwb3NpdGlvbiBpbiBiYWJ5bG9uIHdvcmxkCisgICAg
ICovCisgICAgV2ViVlJGcmVlQ2FtZXJhLnByb3RvdHlwZS5fY29tcHV0ZURldmljZVBvc2l0aW9u
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYodGhp
cy5fZGV2aWNlUm9vbVBvc2l0aW9uLCB0aGlzLl9kZXZpY2VUb1dvcmxkLCB0aGlzLmRldmljZVBv
c2l0aW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgZGV2
aWNlIHBvc2l0aW9uIGFuZCByb3RhdGlvbiBpbiB0aGUgYmFieWxvbiB3b3JsZAorICAgICAqLwor
ICAgIFdlYlZSRnJlZUNhbWVyYS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB0aGlzLl9jb21wdXRlRGV2aWNlUG9zaXRpb24oKTsKKyAgICAgICAgLy8gR2V0IGN1cnJl
bnQgZGV2aWNlIHJvdGF0aW9uIGluIGJhYnlsb24gd29ybGQKKyAgICAgICAgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdHJpeCJdLkZyb21RdWF0ZXJu
aW9uVG9SZWYodGhpcy5fZGV2aWNlUm9vbVJvdGF0aW9uUXVhdGVybmlvbiwgdGhpcy5fd29ya2lu
Z01hdHJpeCk7CisgICAgICAgIHRoaXMuX3dvcmtpbmdNYXRyaXgubXVsdGlwbHlUb1JlZih0aGlz
Ll9kZXZpY2VUb1dvcmxkLCB0aGlzLl93b3JraW5nTWF0cml4KTsKKyAgICAgICAgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlF1YXRlcm5pb24iXS5Gcm9t
Um90YXRpb25NYXRyaXhUb1JlZih0aGlzLl93b3JraW5nTWF0cml4LCB0aGlzLmRldmljZVJvdGF0
aW9uUXVhdGVybmlvbik7CisgICAgICAgIGlmICh0aGlzLl9wb3NlU2V0KSB7CisgICAgICAgICAg
ICB0aGlzLm9uUG9zZVVwZGF0ZWRGcm9tRGV2aWNlT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMo
bnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0
aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAgKiBHZXRzIHRoZSB2
aWV3IG1hdHJpeCBvZiB0aGlzIGNhbWVyYSAoQWx3YXlzIHNldCB0byBpZGVudGl0eSBhcyBsZWZ0
IGFuZCByaWdodCBleWUgY2FtZXJhcyBjb250YWluIHRoZSBhY3R1YWwgdmlldyBtYXRyaXgpCisg
ICAgICogQHJldHVybnMgYW4gaWRlbnRpdHkgbWF0cml4CisgICAgICovCisgICAgV2ViVlJGcmVl
Q2FtZXJhLnByb3RvdHlwZS5fZ2V0Vmlld01hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJN
YXRyaXgiXS5JZGVudGl0eSgpOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgYnkgdGhlIHR3byBSSUcgY2FtZXJhcy4KKyAgICAgKiAndGhpcycgaXMgdGhl
IGxlZnQgb3IgcmlnaHQgY2FtZXJhIChhbmQgTk9UICghISEpIHRoZSBXZWJWUkZyZWVDYW1lcmEg
aW5zdGFuY2UpCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIFdlYlZSRnJlZUNhbWVyYS5w
cm90b3R5cGUuX2dldFdlYlZSVmlld01hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8g
VXBkYXRlIHRoZSBwYXJlbnQgY2FtZXJhIHByaW9yIHRvIHVzaW5nIGEgY2hpbGQgY2FtZXJhIHRv
IGF2b2lkIGRlc3luY2hyb25pemF0aW9uCisgICAgICAgIHZhciBwYXJlbnRDYW1lcmEgPSB0aGlz
Ll9jYW1lcmFSaWdQYXJhbXNbInBhcmVudENhbWVyYSJdOworICAgICAgICBwYXJlbnRDYW1lcmEu
X3VwZGF0ZUNhY2hlKCk7CisgICAgICAgIC8vV2ViVlIgMS4xCisgICAgICAgIHZhciB2aWV3QXJy
YXkgPSB0aGlzLl9jYW1lcmFSaWdQYXJhbXNbImxlZnQiXSA/IHRoaXMuX2NhbWVyYVJpZ1BhcmFt
c1siZnJhbWVEYXRhIl0ubGVmdFZpZXdNYXRyaXggOiB0aGlzLl9jYW1lcmFSaWdQYXJhbXNbImZy
YW1lRGF0YSJdLnJpZ2h0Vmlld01hdHJpeDsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdHJpeCJdLkZyb21BcnJheVRvUmVmKHZpZXdB
cnJheSwgMCwgdGhpcy5fd2VidnJWaWV3TWF0cml4KTsKKyAgICAgICAgaWYgKCF0aGlzLmdldFNj
ZW5lKCkudXNlUmlnaHRIYW5kZWRTeXN0ZW0pIHsKKyAgICAgICAgICAgIHRoaXMuX3dlYnZyVmll
d01hdHJpeC50b2dnbGVNb2RlbE1hdHJpeEhhbmRJblBsYWNlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gdXBkYXRlIHRoZSBjYW1lcmEgcm90YXRpb24gbWF0cml4CisgICAgICAgIHRoaXMuX3dl
YnZyVmlld01hdHJpeC5nZXRSb3RhdGlvbk1hdHJpeFRvUmVmKHRoaXMuX2NhbWVyYVJvdGF0aW9u
TWF0cml4KTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHRoaXMuX3JlZmVy
ZW5jZVBvaW50LCB0aGlzLl9jYW1lcmFSb3RhdGlvbk1hdHJpeCwgdGhpcy5fdHJhbnNmb3JtZWRS
ZWZlcmVuY2VQb2ludCk7CisgICAgICAgIC8vIENvbXB1dGluZyB0YXJnZXQgYW5kIGZpbmFsIG1h
dHJpeAorICAgICAgICB0aGlzLnBvc2l0aW9uLmFkZFRvUmVmKHRoaXMuX3RyYW5zZm9ybWVkUmVm
ZXJlbmNlUG9pbnQsIHRoaXMuX2N1cnJlbnRUYXJnZXQpOworICAgICAgICAvLyBzaG91bGQgdGhl
IHZpZXcgbWF0cml4IGJlIHVwZGF0ZWQgd2l0aCBzY2FsZSBhbmQgcG9zaXRpb24gb2Zmc2V0Pwor
ICAgICAgICBpZiAocGFyZW50Q2FtZXJhLmRldmljZVNjYWxlRmFjdG9yICE9PSAxKSB7CisgICAg
ICAgICAgICB0aGlzLl93ZWJ2clZpZXdNYXRyaXguaW52ZXJ0KCk7CisgICAgICAgICAgICAvLyBz
Y2FsZSB0aGUgcG9zaXRpb24sIGlmIHNldAorICAgICAgICAgICAgaWYgKHBhcmVudENhbWVyYS5k
ZXZpY2VTY2FsZUZhY3RvcikgeworICAgICAgICAgICAgICAgIHRoaXMuX3dlYnZyVmlld01hdHJp
eC5tdWx0aXBseUF0SW5kZXgoMTIsIHBhcmVudENhbWVyYS5kZXZpY2VTY2FsZUZhY3Rvcik7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fd2VidnJWaWV3TWF0cml4Lm11bHRpcGx5QXRJbmRleCgxMywg
cGFyZW50Q2FtZXJhLmRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgICAgICB0aGlzLl93
ZWJ2clZpZXdNYXRyaXgubXVsdGlwbHlBdEluZGV4KDE0LCBwYXJlbnRDYW1lcmEuZGV2aWNlU2Nh
bGVGYWN0b3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fd2VidnJWaWV3TWF0
cml4LmludmVydCgpOworICAgICAgICB9CisgICAgICAgIC8vIFJlbW92ZSB0cmFuc2xhdGlvbiBm
cm9tIDZkb2YgaGVhZHNldCBpZiB0cmFja3Bvc2l0aW9uIGlzIHNldCB0byBmYWxzZQorICAgICAg
ICBwYXJlbnRDYW1lcmEuX2NvcnJlY3RQb3NpdGlvbklmTm90VHJhY2tQb3NpdGlvbih0aGlzLl93
ZWJ2clZpZXdNYXRyaXgsIHRydWUpOworICAgICAgICBwYXJlbnRDYW1lcmEuX3dvcmxkVG9EZXZp
Y2UubXVsdGlwbHlUb1JlZih0aGlzLl93ZWJ2clZpZXdNYXRyaXgsIHRoaXMuX3dlYnZyVmlld01h
dHJpeCk7CisgICAgICAgIC8vIENvbXB1dGUgZ2xvYmFsIHBvc2l0aW9uCisgICAgICAgIHRoaXMu
X3dvcmtpbmdNYXRyaXggPSB0aGlzLl93b3JraW5nTWF0cml4IHx8IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRyaXgiXS5JZGVudGl0eSgpOworICAg
ICAgICB0aGlzLl93ZWJ2clZpZXdNYXRyaXguaW52ZXJ0VG9SZWYodGhpcy5fd29ya2luZ01hdHJp
eCk7CisgICAgICAgIHRoaXMuX3dvcmtpbmdNYXRyaXgubXVsdGlwbHlUb1JlZihwYXJlbnRDYW1l
cmEuZ2V0V29ybGRNYXRyaXgoKSwgdGhpcy5fd29ya2luZ01hdHJpeCk7CisgICAgICAgIHRoaXMu
X3dvcmtpbmdNYXRyaXguZ2V0VHJhbnNsYXRpb25Ub1JlZih0aGlzLl9nbG9iYWxQb3NpdGlvbik7
CisgICAgICAgIHRoaXMuX21hcmtTeW5jZWRXaXRoUGFyZW50KCk7CisgICAgICAgIHJldHVybiB0
aGlzLl93ZWJ2clZpZXdNYXRyaXg7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFdl
YlZSRnJlZUNhbWVyYS5wcm90b3R5cGUuX2dldFdlYlZSUHJvamVjdGlvbk1hdHJpeCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdmFyIHBhcmVudENhbWVyYSA9IHRoaXMucGFyZW50OworICAgICAg
ICBwYXJlbnRDYW1lcmEuX3ZyRGV2aWNlLmRlcHRoTmVhciA9IHBhcmVudENhbWVyYS5taW5aOwor
ICAgICAgICBwYXJlbnRDYW1lcmEuX3ZyRGV2aWNlLmRlcHRoRmFyID0gcGFyZW50Q2FtZXJhLm1h
eFo7CisgICAgICAgIHZhciBwcm9qZWN0aW9uQXJyYXkgPSB0aGlzLl9jYW1lcmFSaWdQYXJhbXNb
ImxlZnQiXSA/IHRoaXMuX2NhbWVyYVJpZ1BhcmFtc1siZnJhbWVEYXRhIl0ubGVmdFByb2plY3Rp
b25NYXRyaXggOiB0aGlzLl9jYW1lcmFSaWdQYXJhbXNbImZyYW1lRGF0YSJdLnJpZ2h0UHJvamVj
dGlvbk1hdHJpeDsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIk1hdHJpeCJdLkZyb21BcnJheVRvUmVmKHByb2plY3Rpb25BcnJheSwgMCwg
dGhpcy5fcHJvamVjdGlvbk1hdHJpeCk7CisgICAgICAgIC8vYmFieWxvbiBjb21wYXRpYmxlIG1h
dHJpeAorICAgICAgICBpZiAoIXRoaXMuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkg
eworICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbk1hdHJpeC50b2dnbGVQcm9qZWN0aW9uTWF0
cml4SGFuZEluUGxhY2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fcHJvamVj
dGlvbk1hdHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBjb250
cm9sbGVycyBhbmQgdGhlaXIgbWVzaGVzCisgICAgICovCisgICAgV2ViVlJGcmVlQ2FtZXJhLnBy
b3RvdHlwZS5pbml0Q29udHJvbGxlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIHRoaXMuY29udHJvbGxlcnMgPSBbXTsKKyAgICAgICAgdmFyIG1h
bmFnZXIgPSB0aGlzLmdldFNjZW5lKCkuZ2FtZXBhZE1hbmFnZXI7CisgICAgICAgIHRoaXMuX29u
R2FtZXBhZERpc2Nvbm5lY3RlZE9ic2VydmVyID0gbWFuYWdlci5vbkdhbWVwYWREaXNjb25uZWN0
ZWRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZ2FtZXBhZCkgeworICAgICAgICAgICAgaWYgKGdh
bWVwYWQudHlwZSA9PT0gX0dhbWVwYWRzX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siR2FtZXBhZCJdLlBPU0VfRU5BQkxFRCkgeworICAgICAgICAgICAgICAgIHZhciB3ZWJW
ckNvbnRyb2xsZXIgPSBnYW1lcGFkOworICAgICAgICAgICAgICAgIGlmICh3ZWJWckNvbnRyb2xs
ZXIuZGVmYXVsdE1vZGVsKSB7CisgICAgICAgICAgICAgICAgICAgIHdlYlZyQ29udHJvbGxlci5k
ZWZhdWx0TW9kZWwuc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICh3ZWJWckNvbnRyb2xsZXIuaGFuZCA9PT0gInJpZ2h0IikgeworICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5fcmlnaHRDb250cm9sbGVyID0gbnVsbDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHdlYlZyQ29udHJvbGxlci5oYW5kID09PSAibGVm
dCIpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2xlZnRDb250cm9sbGVyID0gbnVsbDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXJJbmRleCA9
IF90aGlzLmNvbnRyb2xsZXJzLmluZGV4T2Yod2ViVnJDb250cm9sbGVyKTsKKyAgICAgICAgICAg
ICAgICBpZiAoY29udHJvbGxlckluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBf
dGhpcy5jb250cm9sbGVycy5zcGxpY2UoY29udHJvbGxlckluZGV4LCAxKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9vbkdhbWVw
YWRDb25uZWN0ZWRPYnNlcnZlciA9IG1hbmFnZXIub25HYW1lcGFkQ29ubmVjdGVkT2JzZXJ2YWJs
ZS5hZGQoZnVuY3Rpb24gKGdhbWVwYWQpIHsKKyAgICAgICAgICAgIGlmIChnYW1lcGFkLnR5cGUg
PT09IF9HYW1lcGFkc19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkdhbWVw
YWQiXS5QT1NFX0VOQUJMRUQpIHsKKyAgICAgICAgICAgICAgICB2YXIgd2ViVnJDb250cm9sbGVy
XzEgPSBnYW1lcGFkOworICAgICAgICAgICAgICAgIGlmICghX3RoaXMud2ViVlJPcHRpb25zLnRy
YWNrUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgd2ViVnJDb250cm9sbGVyXzEuX2Rp
c2FibGVUcmFja1Bvc2l0aW9uKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siVmVjdG9yMyJdKHdlYlZyQ29udHJvbGxlcl8xLmhhbmQgPT0gImxlZnQi
ID8gLTAuMTUgOiAwLjE1LCAtMC41LCAwLjI1KSk7CisgICAgICAgICAgICAgICAgICAgIC8vIENh
Y2hlIG11c3QgYmUgdXBkYXRlZCBiZWZvcmUgcmVuZGVyaW5nIGNvbnRyb2xsZXJzIHRvIGF2b2lk
IHRoZW0gYmVpbmcgb25lIGZyYW1lIGJlaGluZAorICAgICAgICAgICAgICAgICAgICBpZiAoIV90
aGlzLl91cGRhdGVDYWNoZVdoZW5UcmFja2luZ0Rpc2FibGVkT2JzZXJ2ZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVDYWNoZVdoZW5UcmFja2luZ0Rpc2FibGVkT2Jz
ZXJ2ZXIgPSBfdGhpcy5fc2NlbmUub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3VwZGF0ZUNhY2hlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3ZWJWckNvbnRyb2xsZXJfMS5kZXZpY2VT
Y2FsZUZhY3RvciA9IF90aGlzLmRldmljZVNjYWxlRmFjdG9yOworICAgICAgICAgICAgICAgIHdl
YlZyQ29udHJvbGxlcl8xLl9kZXZpY2VUb1dvcmxkLmNvcHlGcm9tKF90aGlzLl9kZXZpY2VUb1dv
cmxkKTsKKyAgICAgICAgICAgICAgICBfdGhpcy5fY29ycmVjdFBvc2l0aW9uSWZOb3RUcmFja1Bv
c2l0aW9uKHdlYlZyQ29udHJvbGxlcl8xLl9kZXZpY2VUb1dvcmxkKTsKKyAgICAgICAgICAgICAg
ICBpZiAoX3RoaXMud2ViVlJPcHRpb25zLmNvbnRyb2xsZXJNZXNoZXMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHdlYlZyQ29udHJvbGxlcl8xLmRlZmF1bHRNb2RlbCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgd2ViVnJDb250cm9sbGVyXzEuZGVmYXVsdE1vZGVsLnNldEVuYWJsZWQo
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIHRoZSBtZXNoZXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHdlYlZyQ29udHJvbGxlcl8xLmluaXRDb250cm9sbGVyTWVzaChfdGhpcy5n
ZXRTY2VuZSgpLCBmdW5jdGlvbiAobG9hZGVkTWVzaCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvYWRlZE1lc2guc2NhbGluZy5zY2FsZUluUGxhY2UoX3RoaXMuZGV2aWNlU2NhbGVG
YWN0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm9uQ29udHJvbGxlck1l
c2hMb2FkZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh3ZWJWckNvbnRyb2xsZXJfMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLndlYlZST3B0aW9ucy5kZWZhdWx0
TGlnaHRpbmdPbkNvbnRyb2xsZXJzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghX3RoaXMuX2xpZ2h0T25Db250cm9sbGVycykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX3RoaXMuX2xpZ2h0T25Db250cm9sbGVycyA9IG5ldyBfTGlnaHRzX2hl
bWlzcGhlcmljTGlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siSGVtaXNwaGVyaWNM
aWdodCJdKCJ2ckNvbnRyb2xsZXJzTGlnaHQiLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3RvcjMiXSgwLCAxLCAwKSwgX3RoaXMuZ2V0U2Nl
bmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2YXRlTGlnaHRPblN1Yk1lc2hlc18xID0gZnVuY3Rp
b24gKG1lc2gsIGxpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgY2hpbGRyZW4gPSBtZXNoLmdldENoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoICE9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChm
dW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaWdodC5pbmNsdWRlZE9ubHlNZXNoZXMucHVzaChtZXNoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGVMaWdodE9uU3ViTWVzaGVzXzEo
bWVzaCwgbGlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fbGlnaHRPbkNvbnRyb2xsZXJzLmluY2x1ZGVkT25seU1lc2hlcy5wdXNoKGxvYWRlZE1lc2gp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZUxpZ2h0T25TdWJNZXNo
ZXNfMShsb2FkZWRNZXNoLCBfdGhpcy5fbGlnaHRPbkNvbnRyb2xsZXJzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3ZWJWckNv
bnRyb2xsZXJfMS5hdHRhY2hUb1Bvc2VDb250cm9sbGVkQ2FtZXJhKF90aGlzKTsKKyAgICAgICAg
ICAgICAgICAvLyBzaW5jZSB0aGlzIGlzIGFzeW5jIC0gc2FuaXR5IGNoZWNrLiBJcyB0aGUgY29u
dHJvbGxlciBhbHJlYWR5IHN0b3JlZD8KKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY29udHJv
bGxlcnMuaW5kZXhPZih3ZWJWckNvbnRyb2xsZXJfMSkgPT09IC0xKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vYWRkIHRvIHRoZSBjb250cm9sbGVycyBhcnJheQorICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5jb250cm9sbGVycy5wdXNoKHdlYlZyQ29udHJvbGxlcl8xKTsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gRm9yY2VkIHRvIGFkZCBzb21lIGNvbnRyb2wgY29kZSBmb3IgVml2ZSBhcyBp
dCBkb2Vzbid0IGFsd2F5cyBmaWxsIHByb3Blcmx5IHRoZSAiaGFuZCIgcHJvcGVydHkKKyAgICAg
ICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzLCBib3RoIGNvbnRyb2xsZXJzIGFyZSBzZXQgY29y
cmVjdGx5IChsZWZ0IGFuZCByaWdodCksIHNvbWV0aW1lcyBub25lLCBzb21ldGltZXMgb25seSBv
bmUgb2YgdGhlbS4uLgorICAgICAgICAgICAgICAgICAgICAvLyBTbyB3ZSdyZSBvdmVycmlkaW5n
IHNldHRpbmcgbGVmdCAmIHJpZ2h0IG1hbnVhbGx5IHRvIGJlIHN1cmUKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGZpcnN0Vml2ZVdhbmREZXRlY3RlZCA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF90aGlzLmNvbnRyb2xsZXJzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY29udHJvbGxlcnNbaV0uY29udHJv
bGxlclR5cGUgPT09IF9HYW1lcGFkc19Db250cm9sbGVyc19wb3NlRW5hYmxlZENvbnRyb2xsZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZSJd
LlZJVkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Vml2ZVdhbmRE
ZXRlY3RlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFZpdmVXYW5k
RGV0ZWN0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5j
b250cm9sbGVyc1tpXS5oYW5kID0gImxlZnQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX3RoaXMuY29udHJvbGxlcnNbaV0uaGFuZCA9ICJyaWdodCI7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vZGlkIHdlIGZpbmQgZW5v
dWdoIGNvbnRyb2xsZXJzPyBHcmVhdCEgbGV0IHRoZSBkZXZlbG9wZXIga25vdy4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKF90aGlzLmNvbnRyb2xsZXJzLmxlbmd0aCA+PSAyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5vbkNvbnRyb2xsZXJzQXR0YWNoZWRPYnNlcnZhYmxlLm5v
dGlmeU9ic2VydmVycyhfdGhpcy5jb250cm9sbGVycyk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07Cisg
ICAgcmV0dXJuIFdlYlZSRnJlZUNhbWVyYTsKK30oX0NhbWVyYXNfZnJlZUNhbWVyYV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJGcmVlQ2FtZXJhIl0pKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9DYW1lcmFzL1hSL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL1hSL2luZGV4LnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFdlYlhSQ2Ft
ZXJhLCBXZWJYUkVudGVyRXhpdFVJQnV0dG9uLCBXZWJYUkVudGVyRXhpdFVJT3B0aW9ucywgV2Vi
WFJFbnRlckV4aXRVSSwgV2ViWFJTdGF0ZSwgV2ViWFJFeHBlcmllbmNlSGVscGVyLCBXZWJYUklu
cHV0LCBXZWJYUkNvbnRyb2xsZXJUZWxlcG9ydGF0aW9uLCBXZWJYUkNvbnRyb2xsZXJQb2ludGVy
U2VsZWN0aW9uLCBXZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciwgV2ViWFJDb250cm9sbGVyLCBX
ZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMsIFdlYlhSU2Vzc2lvbk1hbmFnZXIgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJYUkNhbWVyYV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUkNhbWVy
YSAqLyAiLi9DYW1lcmFzL1hSL3dlYlhSQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldl
YlhSQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfd2ViWFJDYW1lcmFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siV2ViWFJDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfd2ViWFJFbnRlckV4aXRVSV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUkVudGVyRXhpdFVJICovICIuL0NhbWVyYXMv
WFIvd2ViWFJFbnRlckV4aXRVSS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkVudGVyRXhp
dFVJQnV0dG9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfd2ViWFJFbnRlckV4aXRVSV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJXZWJYUkVudGVyRXhpdFVJQnV0dG9uIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIldlYlhSRW50ZXJFeGl0VUlPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfd2ViWFJFbnRlckV4aXRVSV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJXZWJY
UkVudGVyRXhpdFVJT3B0aW9ucyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkVudGVy
RXhpdFVJIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfd2ViWFJFbnRlckV4aXRVSV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJXZWJYUkVudGVyRXhpdFVJIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3dlYlhSRXhwZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUkV4cGVyaWVuY2VIZWxw
ZXIgKi8gIi4vQ2FtZXJhcy9YUi93ZWJYUkV4cGVyaWVuY2VIZWxwZXIudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiV2ViWFJTdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3dlYlhSRXhwZXJpZW5j
ZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJXZWJYUlN0YXRlIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSRXhwZXJpZW5jZUhlbHBlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX3dlYlhSRXhwZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJXZWJYUkV4cGVyaWVuY2VIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfd2ViWFJJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi93ZWJYUklucHV0ICovICIuL0NhbWVyYXMvWFIvd2ViWFJJbnB1dC50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJXZWJYUklucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfd2Vi
WFJJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJXZWJYUklucHV0Il07IH0pOwor
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb25f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
d2ViWFJDb250cm9sbGVyVGVsZXBvcnRhdGlvbiAqLyAiLi9DYW1lcmFzL1hSL3dlYlhSQ29udHJv
bGxlclRlbGVwb3J0YXRpb24udHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJDb250cm9sbGVy
VGVsZXBvcnRhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3dlYlhSQ29udHJvbGxlclRlbGVw
b3J0YXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siV2ViWFJDb250cm9sbGVyVGVs
ZXBvcnRhdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJYUkNvbnRy
b2xsZXJQb2ludGVyU2VsZWN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3dlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb24gKi8g
Ii4vQ2FtZXJhcy9YUi93ZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uLnRzIik7CisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIldlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb24iLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF93ZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIldlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb24iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJDb250cm9sbGVyTW9kZWxMb2FkZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2Vi
WFJDb250cm9sbGVyTW9kZWxMb2FkZXIgKi8gIi4vQ2FtZXJhcy9YUi93ZWJYUkNvbnRyb2xsZXJN
b2RlbExvYWRlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkNvbnRyb2xsZXJNb2RlbExv
YWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3dlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIldlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlYlhSQ29udHJvbGxlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUkNv
bnRyb2xsZXIgKi8gIi4vQ2FtZXJhcy9YUi93ZWJYUkNvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiV2ViWFJDb250cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfd2ViWFJDb250
cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIldlYlhSQ29udHJvbGxlciJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJYUk1hbmFnZWRPdXRwdXRDYW52YXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
d2ViWFJNYW5hZ2VkT3V0cHV0Q2FudmFzICovICIuL0NhbWVyYXMvWFIvd2ViWFJNYW5hZ2VkT3V0
cHV0Q2FudmFzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSTWFuYWdlZE91dHB1dENhbnZh
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3dlYlhSTWFuYWdlZE91dHB1dENhbnZhc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fWyJXZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJTZXNzaW9uTWFuYWdlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUlNlc3Np
b25NYW5hZ2VyICovICIuL0NhbWVyYXMvWFIvd2ViWFJTZXNzaW9uTWFuYWdlci50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJXZWJYUlNlc3Npb25NYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
d2ViWFJTZXNzaW9uTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJYUlNl
c3Npb25NYW5hZ2VyIl07IH0pOworCisKKworCisKKworCisKKworCisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vQ2FtZXJhcy9YUi93ZWJYUkNhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9YUi93ZWJYUkNhbWVy
YS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBXZWJYUkNhbWVyYSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJXZWJYUkNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViWFJDYW1lcmE7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1
bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0Nh
bWVyYXMvY2FtZXJhICovICIuL0NhbWVyYXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0NhbWVyYXNfZnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy9mcmVlQ2FtZXJhICovICIu
L0NhbWVyYXMvZnJlZUNhbWVyYS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1l
cmFzX3RhcmdldENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vQ2FtZXJhcy90YXJnZXRDYW1lcmEgKi8gIi4vQ2FtZXJhcy90
YXJnZXRDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
aWV3cG9ydF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vTWF0aHMvbWF0aC52aWV3cG9ydCAqLyAiLi9NYXRocy9tYXRoLnZpZXdwb3J0
LnRzIik7CisKKworCisKKworCisvKioKKyAqIFdlYlhSIENhbWVyYSB3aGljaCBob2xkcyB0aGUg
dmlld3MgZm9yIHRoZSB4clNlc3Npb24KKyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNv
bS9ob3dfdG8vd2VieHIKKyAqLwordmFyIFdlYlhSQ2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKFdlYlhSQ2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0
ZXMgYSBuZXcgd2ViWFJDYW1lcmEsIHRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IGF0IHRoZSBjYW1l
cmEgYWZ0ZXIgaXQgaGFzIGJlZW4gdXBkYXRlZCBieSB0aGUgeHJTZXNzaW9uTWFuYWdlcgorICAg
ICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgdGhlIHNjZW5lIHRvIGFkZCB0aGUgY2FtZXJhIHRvCisgICAgICovCisgICAgZnVuY3Rpb24g
V2ViWFJDYW1lcmEobmFtZSwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNh
bGwodGhpcywgbmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKSB8fCB0aGlzOworICAgICAgICAvLyBJbml0
aWFsIGNhbWVyYSBjb25maWd1cmF0aW9uCisgICAgICAgIF90aGlzLm1pblogPSAwLjE7CisgICAg
ICAgIF90aGlzLnJvdGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIF90aGlz
LmNhbWVyYVJpZ01vZGUgPSBfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siQ2FtZXJhIl0uUklHX01PREVfQ1VTVE9NOworICAgICAgICBfdGhpcy51cGRhdGVVcFZl
Y3RvckZyb21Sb3RhdGlvbiA9IHRydWU7CisgICAgICAgIF90aGlzLl91cGRhdGVOdW1iZXJPZlJp
Z0NhbWVyYXMoMSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgV2ViWFJDYW1l
cmEucHJvdG90eXBlLl91cGRhdGVOdW1iZXJPZlJpZ0NhbWVyYXMgPSBmdW5jdGlvbiAodmlld0Nv
dW50KSB7CisgICAgICAgIGlmICh2aWV3Q291bnQgPT09IHZvaWQgMCkgeyB2aWV3Q291bnQgPSAx
OyB9CisgICAgICAgIHdoaWxlICh0aGlzLnJpZ0NhbWVyYXMubGVuZ3RoIDwgdmlld0NvdW50KSB7
CisgICAgICAgICAgICB2YXIgbmV3Q2FtZXJhID0gbmV3IF9DYW1lcmFzX3RhcmdldENhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUYXJnZXRDYW1lcmEiXSgidmlldzogIiArIHRo
aXMucmlnQ2FtZXJhcy5sZW5ndGgsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybygpLCB0aGlzLmdldFNjZW5lKCkpOworICAgICAg
ICAgICAgbmV3Q2FtZXJhLm1pblogPSAwLjE7CisgICAgICAgICAgICBuZXdDYW1lcmEucGFyZW50
ID0gdGhpczsKKyAgICAgICAgICAgIG5ld0NhbWVyYS5yb3RhdGlvblF1YXRlcm5pb24gPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlF1YXRlcm5p
b24iXSgpOworICAgICAgICAgICAgbmV3Q2FtZXJhLnVwZGF0ZVVwVmVjdG9yRnJvbVJvdGF0aW9u
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMucmlnQ2FtZXJhcy5wdXNoKG5ld0NhbWVyYSk7Cisg
ICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHRoaXMucmlnQ2FtZXJhcy5sZW5ndGggPiB2aWV3Q291
bnQpIHsKKyAgICAgICAgICAgIHZhciByZW1vdmVkQ2FtZXJhID0gdGhpcy5yaWdDYW1lcmFzLnBv
cCgpOworICAgICAgICAgICAgaWYgKHJlbW92ZWRDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICBy
ZW1vdmVkQ2FtZXJhLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBXZWJYUkNhbWVyYS5wcm90b3R5cGUuX3VwZGF0ZUZv
ckR1YWxFeWVEZWJ1Z2dpbmcgPSBmdW5jdGlvbiAocHVwaWxEaXN0YW5jZSkgeworICAgICAgICBp
ZiAocHVwaWxEaXN0YW5jZSA9PT0gdm9pZCAwKSB7IHB1cGlsRGlzdGFuY2UgPSAwLjAxOyB9Cisg
ICAgICAgIC8vIENyZWF0ZSBpbml0aWFsIGNhbWVyYSByaWdzCisgICAgICAgIHRoaXMuX3VwZGF0
ZU51bWJlck9mUmlnQ2FtZXJhcygyKTsKKyAgICAgICAgdGhpcy5yaWdDYW1lcmFzWzBdLnZpZXdw
b3J0ID0gbmV3IF9NYXRoc19tYXRoX3ZpZXdwb3J0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIlZpZXdwb3J0Il0oMCwgMCwgMC41LCAxLjApOworICAgICAgICB0aGlzLnJpZ0NhbWVyYXNb
MF0ucG9zaXRpb24ueCA9IC1wdXBpbERpc3RhbmNlIC8gMjsKKyAgICAgICAgdGhpcy5yaWdDYW1l
cmFzWzBdLm91dHB1dFJlbmRlclRhcmdldCA9IG51bGw7CisgICAgICAgIHRoaXMucmlnQ2FtZXJh
c1sxXS52aWV3cG9ydCA9IG5ldyBfTWF0aHNfbWF0aF92aWV3cG9ydF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJWaWV3cG9ydCJdKDAuNSwgMCwgMC41LCAxLjApOworICAgICAgICB0aGlz
LnJpZ0NhbWVyYXNbMV0ucG9zaXRpb24ueCA9IHB1cGlsRGlzdGFuY2UgLyAyOworICAgICAgICB0
aGlzLnJpZ0NhbWVyYXNbMV0ub3V0cHV0UmVuZGVyVGFyZ2V0ID0gbnVsbDsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGNhbWVyYXMgcG9zaXRpb24gZnJvbSB0aGUgY3VycmVu
dCBwb3NlIGluZm9ybWF0aW9uIG9mIHRoZSAgWFIgc2Vzc2lvbgorICAgICAqIEBwYXJhbSB4clNl
c3Npb25NYW5hZ2VyIHRoZSBzZXNzaW9uIGNvbnRhaW5pbmcgcG9zZSBpbmZvcm1hdGlvbgorICAg
ICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGNhbWVyYSBoYXMgYmVlbiB1cGRhdGVkLCBmYWxzZSBp
ZiB0aGUgc2Vzc2lvbiBkaWQgbm90IGNvbnRhaW4gcG9zZSBvciBmcmFtZSBkYXRhCisgICAgICov
CisgICAgV2ViWFJDYW1lcmEucHJvdG90eXBlLnVwZGF0ZUZyb21YUlNlc3Npb25NYW5hZ2VyID0g
ZnVuY3Rpb24gKHhyU2Vzc2lvbk1hbmFnZXIpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgLy8gRW5zdXJlIGFsbCBmcmFtZSBkYXRhIGlzIGF2YWlsYWJsZQorICAgICAgICBp
ZiAoIXhyU2Vzc2lvbk1hbmFnZXIuY3VycmVudEZyYW1lIHx8ICF4clNlc3Npb25NYW5hZ2VyLmN1
cnJlbnRGcmFtZS5nZXRWaWV3ZXJQb3NlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHBvc2UgPSB4clNlc3Npb25NYW5hZ2VyLmN1cnJlbnRGcmFt
ZS5nZXRWaWV3ZXJQb3NlKHhyU2Vzc2lvbk1hbmFnZXIucmVmZXJlbmNlU3BhY2UpOworICAgICAg
ICBpZiAoIXBvc2UgfHwgIXBvc2UudHJhbnNmb3JtIHx8ICFwb3NlLnRyYW5zZm9ybS5tYXRyaXgp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAvLyBVcGRh
dGUgdGhlIHBhcmVudCBjYW1lcmFzIG1hdHJpeAorICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uRnJvbUZsb2F0MzJBcnJheVRv
UmVmU2NhbGVkKHBvc2UudHJhbnNmb3JtLm1hdHJpeCwgMCwgMSwgV2ViWFJDYW1lcmEuX1RtcE1h
dHJpeCk7CisgICAgICAgIGlmICghdGhpcy5fc2NlbmUudXNlUmlnaHRIYW5kZWRTeXN0ZW0pIHsK
KyAgICAgICAgICAgIFdlYlhSQ2FtZXJhLl9UbXBNYXRyaXgudG9nZ2xlTW9kZWxNYXRyaXhIYW5k
SW5QbGFjZSgpOworICAgICAgICB9CisgICAgICAgIFdlYlhSQ2FtZXJhLl9UbXBNYXRyaXguZ2V0
VHJhbnNsYXRpb25Ub1JlZih0aGlzLnBvc2l0aW9uKTsKKyAgICAgICAgV2ViWFJDYW1lcmEuX1Rt
cE1hdHJpeC5nZXRSb3RhdGlvbk1hdHJpeFRvUmVmKFdlYlhSQ2FtZXJhLl9UbXBNYXRyaXgpOwor
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
UXVhdGVybmlvbiJdLkZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKFdlYlhSQ2FtZXJhLl9UbXBNYXRy
aXgsIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgdGhpcy5jb21wdXRlV29ybGRN
YXRyaXgoKTsKKyAgICAgICAgLy8gVXBkYXRlIGNhbWVyYSByaWdzCisgICAgICAgIHRoaXMuX3Vw
ZGF0ZU51bWJlck9mUmlnQ2FtZXJhcyhwb3NlLnZpZXdzLmxlbmd0aCk7CisgICAgICAgIHBvc2Uu
dmlld3MuZm9yRWFjaChmdW5jdGlvbiAodmlldywgaSkgeworICAgICAgICAgICAgLy8gVXBkYXRl
IHZpZXcvcHJvamVjdGlvbiBtYXRyaXgKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5Gcm9tRmxvYXQzMkFycmF5VG9S
ZWZTY2FsZWQodmlldy50cmFuc2Zvcm0ubWF0cml4LCAwLCAxLCBfdGhpcy5yaWdDYW1lcmFzW2ld
Ll9jb21wdXRlZFZpZXdNYXRyaXgpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLkZyb21GbG9hdDMyQXJyYXlUb1Jl
ZlNjYWxlZCh2aWV3LnByb2plY3Rpb25NYXRyaXgsIDAsIDEsIF90aGlzLnJpZ0NhbWVyYXNbaV0u
X3Byb2plY3Rpb25NYXRyaXgpOworICAgICAgICAgICAgaWYgKCFfdGhpcy5fc2NlbmUudXNlUmln
aHRIYW5kZWRTeXN0ZW0pIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5yaWdDYW1lcmFzW2ldLl9j
b21wdXRlZFZpZXdNYXRyaXgudG9nZ2xlTW9kZWxNYXRyaXhIYW5kSW5QbGFjZSgpOworICAgICAg
ICAgICAgICAgIF90aGlzLnJpZ0NhbWVyYXNbaV0uX3Byb2plY3Rpb25NYXRyaXgudG9nZ2xlUHJv
amVjdGlvbk1hdHJpeEhhbmRJblBsYWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBVcGRhdGUgdmlld3BvcnQKKyAgICAgICAgICAgIGlmICh4clNlc3Npb25NYW5hZ2VyLnNlc3Np
b24ucmVuZGVyU3RhdGUuYmFzZUxheWVyKSB7CisgICAgICAgICAgICAgICAgdmFyIHZpZXdwb3J0
ID0geHJTZXNzaW9uTWFuYWdlci5zZXNzaW9uLnJlbmRlclN0YXRlLmJhc2VMYXllci5nZXRWaWV3
cG9ydCh2aWV3KTsKKyAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSB4clNlc3Npb25NYW5hZ2Vy
LnNlc3Npb24ucmVuZGVyU3RhdGUuYmFzZUxheWVyLmZyYW1lYnVmZmVyV2lkdGg7CisgICAgICAg
ICAgICAgICAgdmFyIGhlaWdodCA9IHhyU2Vzc2lvbk1hbmFnZXIuc2Vzc2lvbi5yZW5kZXJTdGF0
ZS5iYXNlTGF5ZXIuZnJhbWVidWZmZXJIZWlnaHQ7CisgICAgICAgICAgICAgICAgX3RoaXMucmln
Q2FtZXJhc1tpXS52aWV3cG9ydC53aWR0aCA9IHZpZXdwb3J0LndpZHRoIC8gd2lkdGg7CisgICAg
ICAgICAgICAgICAgX3RoaXMucmlnQ2FtZXJhc1tpXS52aWV3cG9ydC5oZWlnaHQgPSB2aWV3cG9y
dC5oZWlnaHQgLyBoZWlnaHQ7CisgICAgICAgICAgICAgICAgX3RoaXMucmlnQ2FtZXJhc1tpXS52
aWV3cG9ydC54ID0gdmlld3BvcnQueCAvIHdpZHRoOworICAgICAgICAgICAgICAgIF90aGlzLnJp
Z0NhbWVyYXNbaV0udmlld3BvcnQueSA9IHZpZXdwb3J0LnkgLyBoZWlnaHQ7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBTZXQgY2FtZXJhcyB0byByZW5kZXIgdG8gdGhlIHNlc3Npb24n
cyByZW5kZXIgdGFyZ2V0CisgICAgICAgICAgICBfdGhpcy5yaWdDYW1lcmFzW2ldLm91dHB1dFJl
bmRlclRhcmdldCA9IHhyU2Vzc2lvbk1hbmFnZXIuX3Nlc3Npb25SZW5kZXJUYXJnZXRUZXh0dXJl
OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICBXZWJYUkNh
bWVyYS5fVG1wTWF0cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJNYXRyaXgiXSgpOworICAgIHJldHVybiBXZWJYUkNhbWVyYTsKK30oX0Nh
bWVyYXNfZnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJGcmVlQ2FtZXJh
Il0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL1hSL3dlYlhSQ29udHJv
bGxlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL0NhbWVyYXMvWFIvd2ViWFJDb250cm9sbGVyLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBX
ZWJYUkNvbnRyb2xsZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2Vi
WFJDb250cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBXZWJYUkNvbnRyb2xsZXI7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2JzZXJ2
YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVzL2Fic3RyYWN0TWVzaCAqLyAiLi9NZXNo
ZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50
cyIpOworCisKKworLyoqCisgKiBSZXByZXNlbnRzIGFuIFhSIGlucHV0CisgKi8KK3ZhciBXZWJY
UkNvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyB0aGUgY29udHJvbGxlcgorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxv
bmpzLmNvbS9ob3dfdG8vd2VieHIKKyAgICAgKiBAcGFyYW0gc2NlbmUgdGhlIHNjZW5lIHdoaWNo
IHRoZSBjb250cm9sbGVyIHNob3VsZCBiZSBhc3NvY2lhdGVkIHRvCisgICAgICogQHBhcmFtIGlu
cHV0U291cmNlIHRoZSB1bmRlcmx5aW5nIGlucHV0IHNvdXJjZSBmb3IgdGhlIGNvbnRyb2xsZXIK
KyAgICAgKiBAcGFyYW0gcGFyZW50Q29udGFpbmVyIHBhcmVudCB0aGF0IHRoZSBjb250cm9sbGVy
IG1lc2hlcyBzaG91bGQgYmUgY2hpbGRyZW4gb2YKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBXZWJY
UkNvbnRyb2xsZXIoc2NlbmUsIAorICAgIC8qKiBUaGUgdW5kZXJseWluZyBpbnB1dCBzb3VyY2Ug
Zm9yIHRoZSBjb250cm9sbGVyICAqLworICAgIGlucHV0U291cmNlLCBwYXJlbnRDb250YWluZXIp
IHsKKyAgICAgICAgaWYgKHBhcmVudENvbnRhaW5lciA9PT0gdm9pZCAwKSB7IHBhcmVudENvbnRh
aW5lciA9IG51bGw7IH0KKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlz
LmlucHV0U291cmNlID0gaW5wdXRTb3VyY2U7CisgICAgICAgIHRoaXMucGFyZW50Q29udGFpbmVy
ID0gcGFyZW50Q29udGFpbmVyOworICAgICAgICAvKioKKyAgICAgICAgICogRXZlbnQgdGhhdCBm
aXJlcyB3aGVuIHRoZSBjb250cm9sbGVyIGlzIHJlbW92ZWQvZGlzcG9zZWQKKyAgICAgICAgICov
CisgICAgICAgIHRoaXMub25EaXNwb3NlT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0
aGlzLl90bXBNYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk1hdHJpeCJdKCk7CisgICAgICAgIHRoaXMuX3RtcFF1YXRlcm5pb24gPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRl
cm5pb24iXSgpOworICAgICAgICB0aGlzLl90bXBWZWN0b3IgPSBuZXcgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgpOworICAgICAgICB0
aGlzLnBvaW50ZXIgPSBuZXcgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siQWJzdHJhY3RNZXNoIl0oImNvbnRyb2xsZXJQb2ludGVyIiwgc2NlbmUpOwor
ICAgICAgICBpZiAocGFyZW50Q29udGFpbmVyKSB7CisgICAgICAgICAgICBwYXJlbnRDb250YWlu
ZXIuYWRkQ2hpbGQodGhpcy5wb2ludGVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5p
bnB1dFNvdXJjZS5ncmlwU3BhY2UpIHsKKyAgICAgICAgICAgIHRoaXMuZ3JpcCA9IG5ldyBfTWVz
aGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdE1l
c2giXSgiY29udHJvbGxlckdyaXAiLCB0aGlzLnNjZW5lKTsKKyAgICAgICAgICAgIGlmICh0aGlz
LnBhcmVudENvbnRhaW5lcikgeworICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q29udGFpbmVy
LmFkZENoaWxkKHRoaXMuZ3JpcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgY29udHJvbGxlciBwb3NlIGJhc2VkIG9uIHRoZSBn
aXZlbiBYUkZyYW1lCisgICAgICogQHBhcmFtIHhyRnJhbWUgeHIgZnJhbWUgdG8gdXBkYXRlIHRo
ZSBwb3NlIHdpdGgKKyAgICAgKiBAcGFyYW0gcmVmZXJlbmNlU3BhY2UgcmVmZXJlbmNlIHNwYWNl
IHRvIHVzZQorICAgICAqLworICAgIFdlYlhSQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRlRnJv
bVhSRnJhbWUgPSBmdW5jdGlvbiAoeHJGcmFtZSwgcmVmZXJlbmNlU3BhY2UpIHsKKyAgICAgICAg
dmFyIHBvc2UgPSB4ckZyYW1lLmdldFBvc2UodGhpcy5pbnB1dFNvdXJjZS50YXJnZXRSYXlTcGFj
ZSwgcmVmZXJlbmNlU3BhY2UpOworICAgICAgICAvLyBVcGRhdGUgdGhlIHBvaW50ZXIgbWVzaAor
ICAgICAgICBpZiAocG9zZSkgeworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLkZyb21GbG9hdDMyQXJyYXlUb1JlZlNj
YWxlZChwb3NlLnRyYW5zZm9ybS5tYXRyaXgsIDAsIDEsIHRoaXMuX3RtcE1hdHJpeCk7CisgICAg
ICAgICAgICBpZiAoIXRoaXMucG9pbnRlci5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVt
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdG1wTWF0cml4LnRvZ2dsZU1vZGVsTWF0cml4SGFu
ZEluUGxhY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdGhpcy5wb2ludGVy
LnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIHRoaXMucG9pbnRlci5yb3Rh
dGlvblF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlF1YXRlcm5pb24iXSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5fdG1wTWF0cml4LmRlY29tcG9zZSh0aGlzLnBvaW50ZXIuc2NhbGluZywgdGhpcy5wb2lu
dGVyLnJvdGF0aW9uUXVhdGVybmlvbiwgdGhpcy5wb2ludGVyLnBvc2l0aW9uKTsKKyAgICAgICAg
fQorICAgICAgICAvLyBVcGRhdGUgdGhlIGdyaXAgbWVzaCBpZiBpdCBleGlzdHMKKyAgICAgICAg
aWYgKHRoaXMuaW5wdXRTb3VyY2UuZ3JpcFNwYWNlICYmIHRoaXMuZ3JpcCkgeworICAgICAgICAg
ICAgdmFyIHBvc2VfMSA9IHhyRnJhbWUuZ2V0UG9zZSh0aGlzLmlucHV0U291cmNlLmdyaXBTcGFj
ZSwgcmVmZXJlbmNlU3BhY2UpOworICAgICAgICAgICAgaWYgKHBvc2VfMSkgeworICAgICAgICAg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJN
YXRyaXgiXS5Gcm9tRmxvYXQzMkFycmF5VG9SZWZTY2FsZWQocG9zZV8xLnRyYW5zZm9ybS5tYXRy
aXgsIDAsIDEsIHRoaXMuX3RtcE1hdHJpeCk7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdy
aXAuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl90bXBNYXRyaXgudG9nZ2xlTW9kZWxNYXRyaXhIYW5kSW5QbGFjZSgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ3JpcC5yb3RhdGlvblF1YXRl
cm5pb24pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlwLnJvdGF0aW9uUXVhdGVybmlv
biA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
UXVhdGVybmlvbiJdKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMu
X3RtcE1hdHJpeC5kZWNvbXBvc2UodGhpcy5ncmlwLnNjYWxpbmcsIHRoaXMuZ3JpcC5yb3RhdGlv
blF1YXRlcm5pb24sIHRoaXMuZ3JpcC5wb3NpdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSB3b3JsZCBzcGFjZSByYXkgY29taW5n
IGZyb20gdGhlIGNvbnRyb2xsZXIKKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHRpbmcg
cmF5CisgICAgICovCisgICAgV2ViWFJDb250cm9sbGVyLnByb3RvdHlwZS5nZXRXb3JsZFBvaW50
ZXJSYXlUb1JlZiA9IGZ1bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAgLy8gRm9yY2UgdXBkYXRl
IHRvIGVuc3VyZSBwaWNrZWQgcG9pbnQgaXMgc3luY2VkIHdpdGggcmF5CisgICAgICAgIHZhciB3
b3JsZE1hdHJpeCA9IHRoaXMucG9pbnRlci5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAg
ICAgIHdvcmxkTWF0cml4LmRlY29tcG9zZSh1bmRlZmluZWQsIHRoaXMuX3RtcFF1YXRlcm5pb24s
IHVuZGVmaW5lZCk7CisgICAgICAgIHRoaXMuX3RtcFZlY3Rvci5zZXQoMCwgMCwgMSk7CisgICAg
ICAgIHRoaXMuX3RtcFZlY3Rvci5yb3RhdGVCeVF1YXRlcm5pb25Ub1JlZih0aGlzLl90bXBRdWF0
ZXJuaW9uLCB0aGlzLl90bXBWZWN0b3IpOworICAgICAgICByZXN1bHQub3JpZ2luID0gdGhpcy5w
b2ludGVyLmFic29sdXRlUG9zaXRpb247CisgICAgICAgIHJlc3VsdC5kaXJlY3Rpb24uY29weUZy
b20odGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAgcmVzdWx0Lmxlbmd0aCA9IDEwMDA7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyBvZiB0aGUgb2JqZWN0CisgICAgICovCisgICAg
V2ViWFJDb250cm9sbGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAodGhpcy5ncmlwKSB7CisgICAgICAgICAgICB0aGlzLmdyaXAuZGlzcG9zZSgpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMucG9pbnRlci5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMub25E
aXNwb3NlT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOworICAgIH07CisgICAgcmV0dXJu
IFdlYlhSQ29udHJvbGxlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2Ft
ZXJhcy9YUi93ZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlci50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJh
cy9YUi93ZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlci50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBXZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJXZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gV2ViWFJDb250cm9sbGVyTW9kZWxMb2FkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0
aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfR2FtZXBhZHNf
Q29udHJvbGxlcnNfd2luZG93c01vdGlvbkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0dhbWVwYWRzL0NvbnRyb2xs
ZXJzL3dpbmRvd3NNb3Rpb25Db250cm9sbGVyICovICIuL0dhbWVwYWRzL0NvbnRyb2xsZXJzL3dp
bmRvd3NNb3Rpb25Db250cm9sbGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0dh
bWVwYWRzX0NvbnRyb2xsZXJzX29jdWx1c1RvdWNoQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vR2FtZXBhZHMvQ29u
dHJvbGxlcnMvb2N1bHVzVG91Y2hDb250cm9sbGVyICovICIuL0dhbWVwYWRzL0NvbnRyb2xsZXJz
L29jdWx1c1RvdWNoQ29udHJvbGxlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9H
YW1lcGFkc19Db250cm9sbGVyc192aXZlQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vR2FtZXBhZHMvQ29udHJvbGxl
cnMvdml2ZUNvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvdml2ZUNvbnRyb2xs
ZXIudHMiKTsKKworCisKKworLyoqCisgKiBMb2FkcyBhIGNvbnRyb2xsZXIgbW9kZWwgYW5kIGFk
ZHMgaXQgYXMgYSBjaGlsZCBvZiB0aGUgV2ViWFJDb250cm9sbGVycyBncmlwIHdoZW4gdGhlIGNv
bnRyb2xsZXIgaXMgY3JlYXRlZAorICovCit2YXIgV2ViWFJDb250cm9sbGVyTW9kZWxMb2FkZXIg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0
aGUgV2ViWFJDb250cm9sbGVyTW9kZWxMb2FkZXIKKyAgICAgKiBAcGFyYW0gaW5wdXQgeHIgaW5w
dXQgdGhhdCBjcmVhdGVzIHRoZSBjb250cm9sbGVycworICAgICAqLworICAgIGZ1bmN0aW9uIFdl
YlhSQ29udHJvbGxlck1vZGVsTG9hZGVyKGlucHV0KSB7CisgICAgICAgIGlucHV0Lm9uQ29udHJv
bGxlckFkZGVkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGMpIHsKKyAgICAgICAgICAgIGlmIChj
LmlucHV0U291cmNlLmdhbWVwYWQgJiYgYy5pbnB1dFNvdXJjZS5nYW1lcGFkLmlkID09PSAiaHRj
LXZpdmUiKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXJNb2RlbF8xID0gbmV3IF9H
YW1lcGFkc19Db250cm9sbGVyc192aXZlQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWaXZlQ29udHJvbGxlciJdKGMuaW5wdXRTb3VyY2UuZ2FtZXBhZCk7CisgICAgICAg
ICAgICAgICAgY29udHJvbGxlck1vZGVsXzEuaGFuZCA9IGMuaW5wdXRTb3VyY2UuaGFuZGVkbmVz
czsKKyAgICAgICAgICAgICAgICBjb250cm9sbGVyTW9kZWxfMS5pc1hSID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBjb250cm9sbGVyTW9kZWxfMS5pbml0Q29udHJvbGxlck1lc2goYy5ncmlwLmdl
dFNjZW5lKCksIGZ1bmN0aW9uIChtKSB7CisgICAgICAgICAgICAgICAgICAgIG0uaXNQaWNrYWJs
ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtLmdldENoaWxkTWVzaGVzKGZhbHNlKS5m
b3JFYWNoKGZ1bmN0aW9uIChtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtLmlzUGlja2Fi
bGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRyb2xsZXJNb2RlbF8xLm1lc2gucGFyZW50ID0gYy5ncmlwOworICAgICAgICAgICAgICAg
ICAgICBjb250cm9sbGVyTW9kZWxfMS5tZXNoLnJvdGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJRdWF0ZXJuaW9uIl0uRnJv
bUV1bGVyQW5nbGVzKDAsIE1hdGguUEksIDApOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYy5pbnB1dFNvdXJjZS5nYW1lcGFkICYmIGMu
aW5wdXRTb3VyY2UuZ2FtZXBhZC5pZCA9PT0gIm9jdWx1cy10b3VjaCIpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgY29udHJvbGxlck1vZGVsXzIgPSBuZXcgX0dhbWVwYWRzX0NvbnRyb2xsZXJzX29j
dWx1c1RvdWNoQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPY3VsdXNU
b3VjaENvbnRyb2xsZXIiXShjLmlucHV0U291cmNlLmdhbWVwYWQpOworICAgICAgICAgICAgICAg
IGNvbnRyb2xsZXJNb2RlbF8yLmhhbmQgPSBjLmlucHV0U291cmNlLmhhbmRlZG5lc3M7CisgICAg
ICAgICAgICAgICAgY29udHJvbGxlck1vZGVsXzIuaXNYUiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgY29udHJvbGxlck1vZGVsXzIuaW5pdENvbnRyb2xsZXJNZXNoKGMuZ3JpcC5nZXRTY2VuZSgp
LCBmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyTW9kZWxfMi5t
ZXNoLnBhcmVudCA9IGMuZ3JpcDsKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlck1vZGVs
XzIubWVzaC5yb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLkZyb21FdWxlckFuZ2xlcygwLCBNYXRo
LlBJLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlck1vZGVsXzIubWVzaC5wb3Np
dGlvbi55ID0gMC4wMzQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJNb2RlbF8yLm1l
c2gucG9zaXRpb24ueiA9IDAuMDUyOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBpZiAoYy5pbnB1dFNvdXJjZS5nYW1lcGFkICYmIGMuaW5wdXRT
b3VyY2UuZ2FtZXBhZC5pZCA9PT0gIm9jdWx1cy1xdWVzdCIpIHsKKyAgICAgICAgICAgICAgICBf
R2FtZXBhZHNfQ29udHJvbGxlcnNfb2N1bHVzVG91Y2hDb250cm9sbGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk9jdWx1c1RvdWNoQ29udHJvbGxlciJdLl9Jc1F1ZXN0ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlck1vZGVsXzMgPSBuZXcgX0dhbWVwYWRzX0Nv
bnRyb2xsZXJzX29jdWx1c1RvdWNoQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJPY3VsdXNUb3VjaENvbnRyb2xsZXIiXShjLmlucHV0U291cmNlLmdhbWVwYWQpOworICAg
ICAgICAgICAgICAgIGNvbnRyb2xsZXJNb2RlbF8zLmhhbmQgPSBjLmlucHV0U291cmNlLmhhbmRl
ZG5lc3M7CisgICAgICAgICAgICAgICAgY29udHJvbGxlck1vZGVsXzMuaXNYUiA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgY29udHJvbGxlck1vZGVsXzMuaW5pdENvbnRyb2xsZXJNZXNoKGMuZ3Jp
cC5nZXRTY2VuZSgpLCBmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgICAgICAgICBjb250cm9s
bGVyTW9kZWxfMy5tZXNoLnBhcmVudCA9IGMuZ3JpcDsKKyAgICAgICAgICAgICAgICAgICAgY29u
dHJvbGxlck1vZGVsXzMubWVzaC5yb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdLkZyb21FdWxlckFu
Z2xlcyhNYXRoLlBJIC8gLTQsIE1hdGguUEksIDApOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbnRy
b2xsZXJNb2RlbF80ID0gbmV3IF9HYW1lcGFkc19Db250cm9sbGVyc193aW5kb3dzTW90aW9uQ29u
dHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJXaW5kb3dzTW90aW9uQ29udHJv
bGxlciJdKGMuaW5wdXRTb3VyY2UuZ2FtZXBhZCk7CisgICAgICAgICAgICAgICAgY29udHJvbGxl
ck1vZGVsXzQuaGFuZCA9IGMuaW5wdXRTb3VyY2UuaGFuZGVkbmVzczsKKyAgICAgICAgICAgICAg
ICBjb250cm9sbGVyTW9kZWxfNC5pc1hSID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250cm9s
bGVyTW9kZWxfNC5pbml0Q29udHJvbGxlck1lc2goYy5ncmlwLmdldFNjZW5lKCksIGZ1bmN0aW9u
IChtKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJNb2RlbF80Lm1lc2gucGFyZW50
ID0gYy5ncmlwOworICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyTW9kZWxfNC5tZXNoLnJv
dGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJRdWF0ZXJuaW9uIl0uRnJvbUV1bGVyQW5nbGVzKDAsIE1hdGguUEksIDApOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cisg
ICAgcmV0dXJuIFdlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9DYW1lcmFzL1hSL3dlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rp
b24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy9YUi93ZWJYUkNvbnRyb2xsZXJQb2ludGVy
U2VsZWN0aW9uLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogV2ViWFJDb250cm9s
bGVyUG9pbnRlclNlbGVjdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJXZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBX
ZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhz
L21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9DdWxsaW5nX3JheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQ3VsbGluZy9yYXkgKi8gIi4vQ3VsbGluZy9yYXku
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9zdGFuZGFyZE1hdGVyaWFsICovICIuL01hdGVyaWFscy9zdGFuZGFy
ZE1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGguYXhp
cyAqLyAiLi9NYXRocy9tYXRoLmF4aXMudHMiKTsKKworCisKKworCisKKy8qKgorICogSGFuZGxl
cyBwb2ludGVyIGlucHV0IGF1dG9tYXRpY2FsbHkgZm9yIHRoZSBwb2ludGVyIG9mIFhSIGNvbnRy
b2xsZXJzCisgKi8KK3ZhciBXZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBXZWJYUkNv
bnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uCisgICAgICogQHBhcmFtIGlucHV0IGlucHV0IG1hbmFn
ZXIgdG8gc2V0dXAgcG9pbnRlciBzZWxlY3Rpb24KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBXZWJY
UkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uKGlucHV0KSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIHRoaXMuX3RtcFJheSA9IG5ldyBfQ3VsbGluZ19yYXlfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siUmF5Il0obmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oKSwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oKSk7CisgICAgICAgIGlu
cHV0Lm9uQ29udHJvbGxlckFkZGVkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGNvbnRyb2xsZXIp
IHsKKyAgICAgICAgICAgIHZhciBzY2VuZSA9IGNvbnRyb2xsZXIucG9pbnRlci5nZXRTY2VuZSgp
OworICAgICAgICAgICAgdmFyIGxhc2VyUG9pbnRlcjsKKyAgICAgICAgICAgIHZhciBjdXJzb3JN
ZXNoOworICAgICAgICAgICAgdmFyIHRyaWdnZXJEb3duID0gZmFsc2U7CisgICAgICAgICAgICB2
YXIgaWQ7CisgICAgICAgICAgICBpZCA9IFdlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb24u
X2lkQ291bnRlcisrOworICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbGFzZXIgcG9pbnRlciBmb3Ig
dGhlIFhSIGNvbnRyb2xsZXIKKyAgICAgICAgICAgIGxhc2VyUG9pbnRlciA9IF9NZXNoZXNfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uQ3JlYXRlQ3lsaW5kZXIoImxh
c2VyUG9pbnRlciIsIDEsIDAuMDAwMiwgMC4wMDQsIDIwLCAxLCBzY2VuZSwgZmFsc2UpOworICAg
ICAgICAgICAgbGFzZXJQb2ludGVyLnBhcmVudCA9IGNvbnRyb2xsZXIucG9pbnRlcjsKKyAgICAg
ICAgICAgIHZhciBsYXNlclBvaW50ZXJNYXRlcmlhbCA9IG5ldyBfTWF0ZXJpYWxzX3N0YW5kYXJk
TWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU3RhbmRhcmRNYXRlcmlhbCJd
KCJsYXNlclBvaW50ZXJNYXQiLCBzY2VuZSk7CisgICAgICAgICAgICBsYXNlclBvaW50ZXJNYXRl
cmlhbC5lbWlzc2l2ZUNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIkNvbG9yMyJdKDAuNywgMC43LCAwLjcpOworICAgICAgICAgICAgbGFz
ZXJQb2ludGVyTWF0ZXJpYWwuYWxwaGEgPSAwLjY7CisgICAgICAgICAgICBsYXNlclBvaW50ZXIu
bWF0ZXJpYWwgPSBsYXNlclBvaW50ZXJNYXRlcmlhbDsKKyAgICAgICAgICAgIGxhc2VyUG9pbnRl
ci5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7CisgICAgICAgICAgICBfdGhpcy5fdXBkYXRlUG9p
bnRlckRpc3RhbmNlKGxhc2VyUG9pbnRlciwgMSk7CisgICAgICAgICAgICBsYXNlclBvaW50ZXIu
aXNQaWNrYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgLy8gQ3JlYXRlIGEgZ2F6ZSB0cmFja2Vy
IGZvciB0aGUgIFhSIGNvbnRyb2xlbHIKKyAgICAgICAgICAgIGN1cnNvck1lc2ggPSBfTWVzaGVz
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZVRvcnVzKCJn
YXplVHJhY2tlciIsIDAuMDAzNSAqIDMsIDAuMDAyNSAqIDMsIDIwLCBzY2VuZSwgZmFsc2UpOwor
ICAgICAgICAgICAgY3Vyc29yTWVzaC5iYWtlQ3VycmVudFRyYW5zZm9ybUludG9WZXJ0aWNlcygp
OworICAgICAgICAgICAgY3Vyc29yTWVzaC5pc1BpY2thYmxlID0gZmFsc2U7CisgICAgICAgICAg
ICBjdXJzb3JNZXNoLmlzVmlzaWJsZSA9IGZhbHNlOworICAgICAgICAgICAgdmFyIHRhcmdldE1h
dCA9IG5ldyBfTWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siU3RhbmRhcmRNYXRlcmlhbCJdKCJ0YXJnZXRNYXQiLCBzY2VuZSk7CisgICAgICAg
ICAgICB0YXJnZXRNYXQuc3BlY3VsYXJDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yMyJdLkJsYWNrKCk7CisgICAgICAgICAgICB0YXJn
ZXRNYXQuZW1pc3NpdmVDb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJDb2xvcjMiXSgwLjcsIDAuNywgMC43KTsKKyAgICAgICAgICAgIHRh
cmdldE1hdC5iYWNrRmFjZUN1bGxpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIGN1cnNvck1lc2gu
bWF0ZXJpYWwgPSB0YXJnZXRNYXQ7CisgICAgICAgICAgICB2YXIgcmVuZGVyT2JzZXJ2ZXIgPSBz
Y2VuZS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICAgICAvLyBFdmVyeSBmcmFtZSBjaGVjayBjb2xsaXNpb25zL2lucHV0CisgICAgICAgICAg
ICAgICAgY29udHJvbGxlci5nZXRXb3JsZFBvaW50ZXJSYXlUb1JlZihfdGhpcy5fdG1wUmF5KTsK
KyAgICAgICAgICAgICAgICB2YXIgcGljayA9IHNjZW5lLnBpY2tXaXRoUmF5KF90aGlzLl90bXBS
YXkpOworICAgICAgICAgICAgICAgIGlmIChwaWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjb250cm9sbGVyLmlucHV0U291cmNlLmdhbWVwYWQgJiYgY29udHJvbGxlci5pbnB1dFNvdXJj
ZS5nYW1lcGFkLmJ1dHRvbnNbMF0gJiYgY29udHJvbGxlci5pbnB1dFNvdXJjZS5nYW1lcGFkLmJ1
dHRvbnNbMF0udmFsdWUgPiAwLjcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHJp
Z2dlckRvd24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2VuZS5zaW11bGF0ZVBv
aW50ZXJEb3duKHBpY2ssIHsgcG9pbnRlcklkOiBpZCB9KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJEb3duID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0cmlnZ2VyRG93bikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjZW5lLnNpbXVsYXRlUG9pbnRlclVwKHBpY2ssIHsgcG9pbnRlcklkOiBpZCB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJE
b3duID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
c2NlbmUuc2ltdWxhdGVQb2ludGVyTW92ZShwaWNrLCB7IHBvaW50ZXJJZDogaWQgfSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwaWNrICYmIHBpY2sucGlja2VkUG9p
bnQgJiYgcGljay5oaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGxhc2VyIHN0
YXRlCisgICAgICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVQb2ludGVyRGlzdGFuY2UobGFz
ZXJQb2ludGVyLCBwaWNrLmRpc3RhbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRl
IGN1cnNvciBzdGF0ZQorICAgICAgICAgICAgICAgICAgICBjdXJzb3JNZXNoLnBvc2l0aW9uLmNv
cHlGcm9tKHBpY2sucGlja2VkUG9pbnQpOworICAgICAgICAgICAgICAgICAgICBjdXJzb3JNZXNo
LnNjYWxpbmcueCA9IE1hdGguc3FydChwaWNrLmRpc3RhbmNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgY3Vyc29yTWVzaC5zY2FsaW5nLnkgPSBNYXRoLnNxcnQocGljay5kaXN0YW5jZSk7CisgICAg
ICAgICAgICAgICAgICAgIGN1cnNvck1lc2guc2NhbGluZy56ID0gTWF0aC5zcXJ0KHBpY2suZGlz
dGFuY2UpOworICAgICAgICAgICAgICAgICAgICAvLyBUbyBhdm9pZCB6LWZpZ2h0aW5nCisgICAg
ICAgICAgICAgICAgICAgIHZhciBwaWNrTm9ybWFsID0gX3RoaXMuX2NvbnZlcnROb3JtYWxUb0Rp
cmVjdGlvbk9mUmF5KHBpY2suZ2V0Tm9ybWFsKCksIF90aGlzLl90bXBSYXkpOworICAgICAgICAg
ICAgICAgICAgICB2YXIgZGVsdGFGaWdodGluZyA9IDAuMDAyOworICAgICAgICAgICAgICAgICAg
ICBjdXJzb3JNZXNoLnBvc2l0aW9uLmNvcHlGcm9tKHBpY2sucGlja2VkUG9pbnQpOworICAgICAg
ICAgICAgICAgICAgICBpZiAocGlja05vcm1hbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGF4aXMxID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlZlY3RvcjMiXS5Dcm9zcyhfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIkF4aXMiXS5ZLCBwaWNrTm9ybWFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBheGlzMiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJWZWN0b3IzIl0uQ3Jvc3MocGlja05vcm1hbCwgYXhpczEpOworICAgICAgICAgICAgICAg
ICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlZlY3RvcjMiXS5Sb3RhdGlvbkZyb21BeGlzVG9SZWYoYXhpczIsIHBpY2tOb3JtYWwsIGF4aXMx
LCBjdXJzb3JNZXNoLnJvdGF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvck1l
c2gucG9zaXRpb24uYWRkSW5QbGFjZShwaWNrTm9ybWFsLnNjYWxlKGRlbHRhRmlnaHRpbmcpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjdXJzb3JNZXNoLmlz
VmlzaWJsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBjdXJzb3JNZXNoLmlzVmlzaWJsZSA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY29udHJvbGxlci5v
bkRpc3Bvc2VPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg
IGxhc2VyUG9pbnRlci5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgY3Vyc29yTWVzaC5kaXNw
b3NlKCk7CisgICAgICAgICAgICAgICAgc2NlbmUub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLnJl
bW92ZShyZW5kZXJPYnNlcnZlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
fQorICAgIFdlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb24ucHJvdG90eXBlLl9jb252ZXJ0
Tm9ybWFsVG9EaXJlY3Rpb25PZlJheSA9IGZ1bmN0aW9uIChub3JtYWwsIHJheSkgeworICAgICAg
ICBpZiAobm9ybWFsKSB7CisgICAgICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLmFjb3MoX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Eb3Qo
bm9ybWFsLCByYXkuZGlyZWN0aW9uKSk7CisgICAgICAgICAgICBpZiAoYW5nbGUgPCBNYXRoLlBJ
IC8gMikgeworICAgICAgICAgICAgICAgIG5vcm1hbC5zY2FsZUluUGxhY2UoLTEpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBub3JtYWw7CisgICAgfTsKKyAgICBX
ZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uLnByb3RvdHlwZS5fdXBkYXRlUG9pbnRlckRp
c3RhbmNlID0gZnVuY3Rpb24gKF9sYXNlclBvaW50ZXIsIGRpc3RhbmNlKSB7CisgICAgICAgIGlm
IChkaXN0YW5jZSA9PT0gdm9pZCAwKSB7IGRpc3RhbmNlID0gMTAwOyB9CisgICAgICAgIF9sYXNl
clBvaW50ZXIuc2NhbGluZy55ID0gZGlzdGFuY2U7CisgICAgICAgIF9sYXNlclBvaW50ZXIucG9z
aXRpb24ueiA9IGRpc3RhbmNlIC8gMjsKKyAgICB9OworICAgIFdlYlhSQ29udHJvbGxlclBvaW50
ZXJTZWxlY3Rpb24uX2lkQ291bnRlciA9IDA7CisgICAgcmV0dXJuIFdlYlhSQ29udHJvbGxlclBv
aW50ZXJTZWxlY3Rpb247Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVy
YXMvWFIvd2ViWFJDb250cm9sbGVyVGVsZXBvcnRhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1l
cmFzL1hSL3dlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24udHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBXZWJYUkNvbnRyb2xsZXJUZWxlcG9ydGF0aW9uICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb247IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0
b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9DdWxsaW5nL3JheSAqLyAi
Li9DdWxsaW5nL3JheS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
c3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwgKi8gIi4vTWF0
ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX1RleHR1cmVzX2R5bmFtaWNUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMv
ZHluYW1pY1RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2R5bmFtaWNUZXh0dXJlLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0FuaW1hdGlvbnNfZWFzaW5nX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9Bbmlt
YXRpb25zL2Vhc2luZyAqLyAiLi9BbmltYXRpb25zL2Vhc2luZy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQW5pbWF0aW9ucy9hbmltYXRp
b24gKi8gIi4vQW5pbWF0aW9ucy9hbmltYXRpb24udHMiKTsKKworCisKKworCisKKworLyoqCisg
KiBFbmFibGVzIHRlbGVwb3J0YXRpb24KKyAqLwordmFyIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0
YXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyBhIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24KKyAgICAgKiBAcGFyYW0gaW5wdXQg
aW5wdXQgbWFuYWdlciB0byBhZGQgdGVsZXBvcnRhdGlvbiB0bworICAgICAqIEBwYXJhbSBmbG9v
ck1lc2hlcyBmbG9vcm1lc2hlcyB3aGljaCBjYW4gYmUgdGVsZXBvcnRlZCB0bworICAgICAqLwor
ICAgIGZ1bmN0aW9uIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24oaW5wdXQsIGZsb29yTWVz
aGVzKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChmbG9vck1lc2hl
cyA9PT0gdm9pZCAwKSB7IGZsb29yTWVzaGVzID0gW107IH0KKyAgICAgICAgdGhpcy5fdGVsZXBv
cnRhdGlvbkZpbGxDb2xvciA9ICIjNDQ0NDQ0IjsKKyAgICAgICAgdGhpcy5fdGVsZXBvcnRhdGlv
bkJvcmRlckNvbG9yID0gIiNGRkZGRkYiOworICAgICAgICB0aGlzLl90bXBSYXkgPSBuZXcgX0N1
bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlJheSJdKG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKCksIG5l
dyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdKCkpOworICAgICAgICB0aGlzLl90bXBWZWN0b3IgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgpOworICAgICAgICBpbnB1
dC5vbkNvbnRyb2xsZXJBZGRlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChjKSB7CisgICAgICAg
ICAgICB2YXIgc2NlbmUgPSBjLnBvaW50ZXIuZ2V0U2NlbmUoKTsKKyAgICAgICAgICAgIHZhciBm
b3J3YXJkUmVhZHlUb1RlbGVwb3J0ID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgYmFja3dhcmRS
ZWFkeVRvVGVsZXBvcnQgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBsZWZ0UmVhZHlUb1RlbGVw
b3J0ID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgcmlnaHRSZWFkeVRvVGVsZXBvcnQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIC8vIFRlbGVwb3J0IHRhcmdldCBhYmQgaXQncyBhbmltYXRpb24KKyAg
ICAgICAgICAgIHZhciB0ZWxlcG9ydGF0aW9uVGFyZ2V0ID0gX01lc2hlc19tZXNoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DcmVhdGVHcm91bmQoInRlbGVwb3J0YXRpb25U
YXJnZXQiLCAyLCAyLCAyLCBzY2VuZSk7CisgICAgICAgICAgICB0ZWxlcG9ydGF0aW9uVGFyZ2V0
LmlzUGlja2FibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBsZW5ndGggPSA1MTI7CisgICAg
ICAgICAgICB2YXIgZHluYW1pY1RleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19keW5h
bWljVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJEeW5hbWljVGV4dHVyZSJd
KCJEeW5hbWljVGV4dHVyZSIsIGxlbmd0aCwgc2NlbmUsIHRydWUpOworICAgICAgICAgICAgZHlu
YW1pY1RleHR1cmUuaGFzQWxwaGEgPSB0cnVlOworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBk
eW5hbWljVGV4dHVyZS5nZXRDb250ZXh0KCk7CisgICAgICAgICAgICB2YXIgY2VudGVyWCA9IGxl
bmd0aCAvIDI7CisgICAgICAgICAgICB2YXIgY2VudGVyWSA9IGxlbmd0aCAvIDI7CisgICAgICAg
ICAgICB2YXIgcmFkaXVzID0gMjAwOworICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsK
KyAgICAgICAgICAgIGNvbnRleHQuYXJjKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgMCwgMiAq
IE1hdGguUEksIGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gX3RoaXMu
X3RlbGVwb3J0YXRpb25GaWxsQ29sb3I7CisgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTsKKyAg
ICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMTA7CisgICAgICAgICAgICBjb250ZXh0LnN0
cm9rZVN0eWxlID0gX3RoaXMuX3RlbGVwb3J0YXRpb25Cb3JkZXJDb2xvcjsKKyAgICAgICAgICAg
IGNvbnRleHQuc3Ryb2tlKCk7CisgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpOworICAg
ICAgICAgICAgZHluYW1pY1RleHR1cmUudXBkYXRlKCk7CisgICAgICAgICAgICB2YXIgdGVsZXBv
cnRhdGlvbkNpcmNsZU1hdGVyaWFsID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlhbF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTdGFuZGFyZE1hdGVyaWFsIl0oIlRleHRQbGFu
ZU1hdGVyaWFsIiwgc2NlbmUpOworICAgICAgICAgICAgdGVsZXBvcnRhdGlvbkNpcmNsZU1hdGVy
aWFsLmRpZmZ1c2VUZXh0dXJlID0gZHluYW1pY1RleHR1cmU7CisgICAgICAgICAgICB0ZWxlcG9y
dGF0aW9uVGFyZ2V0Lm1hdGVyaWFsID0gdGVsZXBvcnRhdGlvbkNpcmNsZU1hdGVyaWFsOworICAg
ICAgICAgICAgdmFyIHRvcnVzID0gX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIk1lc2giXS5DcmVhdGVUb3J1cygidG9ydXNUZWxlcG9ydGF0aW9uIiwgMC43NSwgMC4x
LCAyNSwgc2NlbmUsIGZhbHNlKTsKKyAgICAgICAgICAgIHRvcnVzLmlzUGlja2FibGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHRvcnVzLnBhcmVudCA9IHRlbGVwb3J0YXRpb25UYXJnZXQ7CisgICAg
ICAgICAgICB2YXIgYW5pbWF0aW9uSW5uZXJDaXJjbGUgPSBuZXcgX0FuaW1hdGlvbnNfYW5pbWF0
aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFuaW1hdGlvbiJdKCJhbmltYXRpb25J
bm5lckNpcmNsZSIsICJwb3NpdGlvbi55IiwgMzAsIF9BbmltYXRpb25zX2FuaW1hdGlvbl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJBbmltYXRpb24iXS5BTklNQVRJT05UWVBFX0ZMT0FU
LCBfQW5pbWF0aW9uc19hbmltYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQW5p
bWF0aW9uIl0uQU5JTUFUSU9OTE9PUE1PREVfQ1lDTEUpOworICAgICAgICAgICAgdmFyIGtleXMg
PSBbXTsKKyAgICAgICAgICAgIGtleXMucHVzaCh7CisgICAgICAgICAgICAgICAgZnJhbWU6IDAs
CisgICAgICAgICAgICAgICAgdmFsdWU6IDAKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
a2V5cy5wdXNoKHsKKyAgICAgICAgICAgICAgICBmcmFtZTogMzAsCisgICAgICAgICAgICAgICAg
dmFsdWU6IDAuNAorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBrZXlzLnB1c2goeworICAg
ICAgICAgICAgICAgIGZyYW1lOiA2MCwKKyAgICAgICAgICAgICAgICB2YWx1ZTogMAorICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBhbmltYXRpb25Jbm5lckNpcmNsZS5zZXRLZXlzKGtleXMp
OworICAgICAgICAgICAgdmFyIGVhc2luZ0Z1bmN0aW9uID0gbmV3IF9BbmltYXRpb25zX2Vhc2lu
Z19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTaW5lRWFzZSJdKCk7CisgICAgICAgICAg
ICBlYXNpbmdGdW5jdGlvbi5zZXRFYXNpbmdNb2RlKF9BbmltYXRpb25zX2Vhc2luZ19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFYXNpbmdGdW5jdGlvbiJdLkVBU0lOR01PREVfRUFTRUlO
T1VUKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbklubmVyQ2lyY2xlLnNldEVhc2luZ0Z1bmN0aW9u
KGVhc2luZ0Z1bmN0aW9uKTsKKyAgICAgICAgICAgIHRvcnVzLmFuaW1hdGlvbnMgPSBbXTsKKyAg
ICAgICAgICAgIHRvcnVzLmFuaW1hdGlvbnMucHVzaChhbmltYXRpb25Jbm5lckNpcmNsZSk7Cisg
ICAgICAgICAgICBzY2VuZS5iZWdpbkFuaW1hdGlvbih0b3J1cywgMCwgNjAsIHRydWUpOworICAg
ICAgICAgICAgLy8gSGFuZGxlIHVzZXIgaW5wdXQgb24gZXZlcnkgZnJhbWUKKyAgICAgICAgICAg
IHZhciByZW5kZXJPYnNlcnZlciA9IHNjZW5lLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5hZGQo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIHRlbGVwb3J0YXRpb25U
YXJnZXQgdG8gd2hlcmUgdGhlIHVzZXIgaXMgdGFyZ2V0dGluZyB0byB0ZWxlcG9ydCB0bworICAg
ICAgICAgICAgICAgIGlmIChmb3J3YXJkUmVhZHlUb1RlbGVwb3J0KSB7CisgICAgICAgICAgICAg
ICAgICAgIGMuZ2V0V29ybGRQb2ludGVyUmF5VG9SZWYoX3RoaXMuX3RtcFJheSk7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBwaWNrID0gc2NlbmUucGlja1dpdGhSYXkoX3RoaXMuX3RtcFJheSwg
ZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbG9vck1lc2hl
cy5pbmRleE9mKG8pICE9PSAtMTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChwaWNrICYmIHBpY2sucGlja2VkUG9pbnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRvIGF2b2lkIHotZmlnaHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRlbGVwb3J0YXRpb25UYXJnZXQucG9zaXRpb24uY29weUZyb20ocGljay5waWNrZWRQb2ludCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZWxlcG9ydGF0aW9uVGFyZ2V0LnBvc2l0aW9uLnkg
Kz0gMC4wMDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGVs
ZXBvcnRhdGlvblRhcmdldC5pc1Zpc2libGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0
ZWxlcG9ydGF0aW9uVGFyZ2V0LmdldENoaWxkcmVuKClbMF0uaXNWaXNpYmxlID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHRlbGVwb3J0YXRpb25UYXJnZXQuaXNWaXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIHRlbGVwb3J0YXRpb25UYXJnZXQuZ2V0Q2hpbGRyZW4oKVswXS5pc1Zpc2libGUgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGMuaW5wdXRTb3Vy
Y2UuZ2FtZXBhZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYy5pbnB1dFNvdXJjZS5nYW1l
cGFkLmF4ZXNbMV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Rm9yd2FyZCB0ZWxlcG9ydGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYy5pbnB1
dFNvdXJjZS5nYW1lcGFkLmF4ZXNbMV0gPCAtMC43KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yd2FyZFJlYWR5VG9UZWxlcG9ydCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZm9yd2FyZFJlYWR5VG9UZWxlcG9ydCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUZWxlcG9ydCB0aGUgdXNlcnMgZmVldCB0byB3aGVyZSB0aGV5
IHRhcmdldHRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdG1wVmVj
dG9yLmNvcHlGcm9tKHRlbGVwb3J0YXRpb25UYXJnZXQucG9zaXRpb24pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdG1wVmVjdG9yLnkgKz0gaW5wdXQuYmFzZUV4cGVy
aWVuY2UuY2FtZXJhLnBvc2l0aW9uLnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlucHV0LmJhc2VFeHBlcmllbmNlLnNldFBvc2l0aW9uT2ZDYW1lcmFVc2luZ0NvbnRhaW5lcihf
dGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZFJlYWR5VG9UZWxlcG9ydCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmFja3dh
cmQgdGVsZXBvcnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMuaW5wdXRTb3Vy
Y2UuZ2FtZXBhZC5heGVzWzFdID4gMC43KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmFja3dhcmRSZWFkeVRvVGVsZXBvcnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGJhY2t3YXJkUmVhZHlUb1RlbGVwb3J0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIENhc3QgYSByYXkgZG93biBmcm9tIGJlaGluZCB0aGUgdXNlcgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FtTWF0ID0gaW5wdXQuYmFzZUV4cGVy
aWVuY2UuY2FtZXJhLmNvbXB1dGVXb3JsZE1hdHJpeCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbU1hdC5kZWNvbXBvc2UodW5kZWZpbmVkLCBxLCBfdGhpcy5fdG1wUmF5Lm9yaWdp
bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90bXBWZWN0b3Iuc2V0
KDAsIDAsIC0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFZl
Y3Rvci5yb3RhdGVCeVF1YXRlcm5pb25Ub1JlZihxLCBfdGhpcy5fdG1wVmVjdG9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFZlY3Rvci55ID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFZlY3Rvci5ub3JtYWxpemUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFZlY3Rvci55ID0gLTEu
NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFZlY3Rvci5ub3Jt
YWxpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFJheS5k
aXJlY3Rpb24uY29weUZyb20oX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBwaWNrID0gc2NlbmUucGlja1dpdGhSYXkoX3RoaXMuX3RtcFJheSwg
ZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmbG9vck1lc2hlcy5pbmRleE9mKG8pICE9PSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaWNrICYm
IHBpY2sucGlja2VkUG9pbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRlbGVwb3J0IHRoZSB1c2VycyBmZWV0IHRvIHdoZXJlIHRoZXkgdGFyZ2V0dGVkCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdG1wVmVjdG9yLmNvcHlGcm9t
KHBpY2sucGlja2VkUG9pbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X3RoaXMuX3RtcFZlY3Rvci55ICs9IGlucHV0LmJhc2VFeHBlcmllbmNlLmNhbWVyYS5wb3NpdGlv
bi55OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuYmFzZUV4cGVy
aWVuY2Uuc2V0UG9zaXRpb25PZkNhbWVyYVVzaW5nQ29udGFpbmVyKF90aGlzLl90bXBWZWN0b3Ip
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkUmVhZHlUb1Rl
bGVwb3J0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGMuaW5wdXRTb3VyY2UuZ2FtZXBhZC5h
eGVzWzBdICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjLmlu
cHV0U291cmNlLmdhbWVwYWQuYXhlc1swXSA8IC0wLjcpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0UmVhZHlUb1RlbGVwb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChsZWZ0UmVhZHlUb1RlbGVwb3J0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0LmJhc2VFeHBlcmllbmNlLnJvdGF0ZUNhbWVyYUJ5UXVhdGVybmlv
blVzaW5nQ29udGFpbmVyKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJRdWF0ZXJuaW9uIl0uRnJvbUV1bGVyQW5nbGVzKDAsIC1NYXRoLlBJIC8gNCwgMCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsZWZ0UmVhZHlUb1RlbGVwb3J0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYy5pbnB1dFNvdXJjZS5nYW1lcGFkLmF4
ZXNbMF0gPiAwLjcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodFJlYWR5VG9U
ZWxlcG9ydCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRS
ZWFkeVRvVGVsZXBvcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQu
YmFzZUV4cGVyaWVuY2Uucm90YXRlQ2FtZXJhQnlRdWF0ZXJuaW9uVXNpbmdDb250YWluZXIoX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlF1YXRlcm5pb24i
XS5Gcm9tRXVsZXJBbmdsZXMoMCwgTWF0aC5QSSAvIDQsIDApKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRSZWFkeVRvVGVs
ZXBvcnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
Yy5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgIHRlbGVwb3J0YXRpb25UYXJnZXQuZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIGR5bmFt
aWNUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgICAgICB0ZWxlcG9ydGF0aW9uQ2lyY2xl
TWF0ZXJpYWwuZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIHRvcnVzLmRpc3Bvc2UoKTsKKyAg
ICAgICAgICAgICAgICBzY2VuZS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHJlbmRl
ck9ic2VydmVyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisgICAgcmV0
dXJuIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb247Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL0NhbWVyYXMvWFIvd2ViWFJEZWZhdWx0RXhwZXJpZW5jZS50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9DYW1lcmFzL1hSL3dlYlhSRGVmYXVsdEV4cGVyaWVuY2UudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBXZWJYUkRlZmF1bHRFeHBlcmllbmNlT3B0aW9ucywgV2ViWFJEZWZhdWx0RXhwZXJpZW5j
ZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkRlZmF1bHRFeHBl
cmllbmNlT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViWFJEZWZhdWx0RXhwZXJpZW5j
ZU9wdGlvbnM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJEZWZhdWx0RXhwZXJpZW5jZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViWFJEZWZhdWx0RXhwZXJpZW5jZTsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3dlYlhSRXhwZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUkV4cGVyaWVuY2VI
ZWxwZXIgKi8gIi4vQ2FtZXJhcy9YUi93ZWJYUkV4cGVyaWVuY2VIZWxwZXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUklucHV0ICovICIuL0NhbWVyYXMv
WFIvd2ViWFJJbnB1dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJYUkNvbnRy
b2xsZXJNb2RlbExvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi93ZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciAqLyAiLi9DYW1lcmFz
L1hSL3dlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX3dlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2ViWFJDb250cm9sbGVyUG9p
bnRlclNlbGVjdGlvbiAqLyAiLi9DYW1lcmFzL1hSL3dlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxl
Y3Rpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJDb250cm9sbGVyVGVs
ZXBvcnRhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi93ZWJYUkNvbnRyb2xsZXJUZWxlcG9ydGF0aW9uICovICIuL0NhbWVyYXMvWFIv
d2ViWFJDb250cm9sbGVyVGVsZXBvcnRhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF93ZWJYUk1hbmFnZWRPdXRwdXRDYW52YXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2ViWFJNYW5hZ2VkT3V0cHV0Q2FudmFzICov
ICIuL0NhbWVyYXMvWFIvd2ViWFJNYW5hZ2VkT3V0cHV0Q2FudmFzLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3dlYlhSRW50ZXJFeGl0VUlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2ViWFJFbnRlckV4aXRVSSAqLyAiLi9D
YW1lcmFzL1hSL3dlYlhSRW50ZXJFeGl0VUkudHMiKTsKKworCisKKworCisKKworLyoqCisgKiBP
cHRpb25zIGZvciB0aGUgZGVmYXVsdCB4ciBoZWxwZXIKKyAqLwordmFyIFdlYlhSRGVmYXVsdEV4
cGVyaWVuY2VPcHRpb25zID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0
aW9uIFdlYlhSRGVmYXVsdEV4cGVyaWVuY2VPcHRpb25zKCkgeworICAgIH0KKyAgICByZXR1cm4g
V2ViWFJEZWZhdWx0RXhwZXJpZW5jZU9wdGlvbnM7Cit9KCkpOworCisvKioKKyAqIERlZmF1bHQg
ZXhwZXJpZW5jZSB3aGljaCBwcm92aWRlcyBhIHNpbWlsYXIgc2V0dXAgdG8gdGhlIHByZXZpb3Vz
IHdlYlZSRXhwZXJpZW5jZQorICovCit2YXIgV2ViWFJEZWZhdWx0RXhwZXJpZW5jZSA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBXZWJYUkRlZmF1bHRFeHBlcmll
bmNlKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IHhyIGV4
cGVyaWVuY2UKKyAgICAgKiBAcGFyYW0gc2NlbmUgc2NlbmUKKyAgICAgKiBAcGFyYW0gb3B0aW9u
cyBvcHRpb25zIGZvciBiYXNpYyBjb25maWd1cmF0aW9uCisgICAgICogQHJldHVybnMgcmVzdWx0
aW5nIFdlYlhSRGVmYXVsdEV4cGVyaWVuY2UKKyAgICAgKi8KKyAgICBXZWJYUkRlZmF1bHRFeHBl
cmllbmNlLkNyZWF0ZUFzeW5jID0gZnVuY3Rpb24gKHNjZW5lLCBvcHRpb25zKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSBuZXcgV2ViWFJEZWZhdWx0RXhwZXJpZW5jZSgpOworICAgICAgICAvLyBD
cmVhdGUgYmFzZSBleHBlcmllbmNlCisgICAgICAgIHJldHVybiBfd2ViWFJFeHBlcmllbmNlSGVs
cGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldlYlhSRXhwZXJpZW5jZUhlbHBlciJd
LkNyZWF0ZUFzeW5jKHNjZW5lKS50aGVuKGZ1bmN0aW9uICh4ckhlbHBlcikgeworICAgICAgICAg
ICAgcmVzdWx0LmJhc2VFeHBlcmllbmNlID0geHJIZWxwZXI7CisgICAgICAgICAgICAvLyBBZGQg
Y29udHJvbGxlciBzdXBwb3J0CisgICAgICAgICAgICByZXN1bHQuaW5wdXQgPSBuZXcgX3dlYlhS
SW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siV2ViWFJJbnB1dCJdKHhySGVscGVy
KTsKKyAgICAgICAgICAgIHJlc3VsdC5jb250cm9sbGVyTW9kZWxMb2FkZXIgPSBuZXcgX3dlYlhS
Q29udHJvbGxlck1vZGVsTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIldlYlhS
Q29udHJvbGxlck1vZGVsTG9hZGVyIl0ocmVzdWx0LmlucHV0KTsKKyAgICAgICAgICAgIHJlc3Vs
dC5wb2ludGVyU2VsZWN0aW9uID0gbmV3IF93ZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIldlYlhSQ29udHJvbGxlclBvaW50ZXJTZWxl
Y3Rpb24iXShyZXN1bHQuaW5wdXQpOworICAgICAgICAgICAgcmVzdWx0LnRlbGVwb3J0YXRpb24g
PSBuZXcgX3dlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siV2ViWFJDb250cm9sbGVyVGVsZXBvcnRhdGlvbiJdKHJlc3VsdC5pbnB1dCwgb3B0
aW9ucy5mbG9vck1lc2hlcyk7CisgICAgICAgICAgICAvLyBDcmVhdGUgb3V0cHV0IGNhbnZhcyBt
YW5hZ2VyICh0aGlzIGNvbnRyb2xzIHdoZXJlIHRoZSB4ciBmcmFtZXMgd2lsbCBiZSByZW5kZXJl
ZCkKKyAgICAgICAgICAgIHJlc3VsdC5vdXRwdXRDYW52YXMgPSBuZXcgX3dlYlhSTWFuYWdlZE91
dHB1dENhbnZhc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJXZWJYUk1hbmFnZWRPdXRw
dXRDYW52YXMiXSh4ckhlbHBlciwgc2NlbmUuZ2V0RW5naW5lKCkuZ2V0UmVuZGVyaW5nQ2FudmFz
KCkpOworICAgICAgICAgICAgLy8gQ3JlYXRlIHVpIGZvciBlbnRlcmluZy9leGl0aW5nIHhyCisg
ICAgICAgICAgICByZXR1cm4gX3dlYlhSRW50ZXJFeGl0VUlfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzZfX1siV2ViWFJFbnRlckV4aXRVSSJdLkNyZWF0ZUFzeW5jKHNjZW5lLCByZXN1bHQuYmFz
ZUV4cGVyaWVuY2UsIHsgd2ViWFJNYW5hZ2VkT3V0cHV0Q2FudmFzOiByZXN1bHQub3V0cHV0Q2Fu
dmFzIH0pOworICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh1aSkgeworICAgICAgICAgICAgcmVz
dWx0LmVudGVyRXhpdFVJID0gdWk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERJc3Bvc2VzIG9mIHRoZSBleHBlcmllbmNl
IGhlbHBlcgorICAgICAqLworICAgIFdlYlhSRGVmYXVsdEV4cGVyaWVuY2UucHJvdG90eXBlLmRp
c3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLmJhc2VFeHBlcmllbmNlKSB7
CisgICAgICAgICAgICB0aGlzLmJhc2VFeHBlcmllbmNlLmRpc3Bvc2UoKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5pbnB1dCkgeworICAgICAgICAgICAgdGhpcy5pbnB1dC5kaXNwb3Nl
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuZW50ZXJFeGl0VUkpIHsKKyAgICAgICAg
ICAgIHRoaXMuZW50ZXJFeGl0VUkuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLm91dHB1dENhbnZhcykgeworICAgICAgICAgICAgdGhpcy5vdXRwdXRDYW52YXMuZGlzcG9z
ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gV2ViWFJEZWZhdWx0RXhwZXJpZW5j
ZTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9YUi93ZWJYUkVu
dGVyRXhpdFVJLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL0NhbWVyYXMvWFIvd2ViWFJFbnRlckV4aXRVSS50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IFdlYlhSRW50ZXJFeGl0VUlCdXR0b24sIFdlYlhSRW50ZXJFeGl0VUlPcHRpb25zLCBX
ZWJYUkVudGVyRXhpdFVJICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldl
YlhSRW50ZXJFeGl0VUlCdXR0b24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYlhSRW50ZXJFeGl0
VUlCdXR0b247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJFbnRlckV4aXRVSU9wdGlvbnMi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYlhSRW50ZXJFeGl0VUlPcHRpb25zOyB9KTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIldlYlhSRW50ZXJFeGl0VUkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYlhS
RW50ZXJFeGl0VUk7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAi
Li4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29i
c2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJFeHBlcmllbmNl
SGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL3dlYlhSRXhwZXJpZW5jZUhlbHBlciAqLyAiLi9DYW1lcmFzL1hSL3dlYlhSRXhwZXJp
ZW5jZUhlbHBlci50cyIpOworCisKKworLyoqCisgKiBCdXR0b24gd2hpY2ggY2FuIGJlIHVzZWQg
dG8gZW50ZXIgYSBkaWZmZXJlbnQgbW9kZSBvZiBYUgorICovCit2YXIgV2ViWFJFbnRlckV4aXRV
SUJ1dHRvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgV2ViWFJFbnRlckV4aXRVSUJ1dHRvbgorICAgICAqIEBwYXJhbSBlbGVtZW50IGJ1
dHRvbiBlbGVtZW50CisgICAgICogQHBhcmFtIHNlc3Npb25Nb2RlIFhSIGluaXRpYWxpemF0aW9u
IHNlc3Npb24gbW9kZQorICAgICAqIEBwYXJhbSByZWZlcmVuY2VTcGFjZVR5cGUgdGhlIHR5cGUg
b2YgcmVmZXJlbmNlIHNwYWNlIHRvIGJlIHVzZWQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBXZWJY
UkVudGVyRXhpdFVJQnV0dG9uKAorICAgIC8qKiBidXR0b24gZWxlbWVudCAqLworICAgIGVsZW1l
bnQsIAorICAgIC8qKiBYUiBpbml0aWFsaXphdGlvbiBvcHRpb25zIGZvciB0aGUgYnV0dG9uICov
CisgICAgc2Vzc2lvbk1vZGUsIAorICAgIC8qKiBSZWZlcmVuY2Ugc3BhY2UgdHlwZSAqLworICAg
IHJlZmVyZW5jZVNwYWNlVHlwZSkgeworICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50Owor
ICAgICAgICB0aGlzLnNlc3Npb25Nb2RlID0gc2Vzc2lvbk1vZGU7CisgICAgICAgIHRoaXMucmVm
ZXJlbmNlU3BhY2VUeXBlID0gcmVmZXJlbmNlU3BhY2VUeXBlOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBPdmVyd3JpdGFibGUgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIHVzZWQgdG8gdXBkYXRlIHRo
ZSBidXR0b24ncyB2aXN1YWxzIHdoZW4gdGhlIHN0YXRlIGNoYW5nZXMKKyAgICAgKiBAcGFyYW0g
YWN0aXZlQnV0dG9uIHRoZSBjdXJyZW50IGFjdGl2ZSBidXR0b24gaW4gdGhlIFVJCisgICAgICov
CisgICAgV2ViWFJFbnRlckV4aXRVSUJ1dHRvbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24g
KGFjdGl2ZUJ1dHRvbikgeworICAgIH07CisgICAgcmV0dXJuIFdlYlhSRW50ZXJFeGl0VUlCdXR0
b247Cit9KCkpOworCisvKioKKyAqIE9wdGlvbnMgdG8gY3JlYXRlIHRoZSB3ZWJYUiBVSQorICov
Cit2YXIgV2ViWFJFbnRlckV4aXRVSU9wdGlvbnMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisgICAgZnVuY3Rpb24gV2ViWFJFbnRlckV4aXRVSU9wdGlvbnMoKSB7CisgICAgfQorICAg
IHJldHVybiBXZWJYUkVudGVyRXhpdFVJT3B0aW9uczsKK30oKSk7CisKKy8qKgorICogVUkgdG8g
YWxsb3cgdGhlIHVzZXIgdG8gZW50ZXIvZXhpdCBYUiBtb2RlCisgKi8KK3ZhciBXZWJYUkVudGVy
RXhpdFVJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFdlYlhS
RW50ZXJFeGl0VUkoc2NlbmUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9idXR0b25zID0gW107
CisgICAgICAgIHRoaXMuX2FjdGl2ZUJ1dHRvbiA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBGaXJlZCBldmVyeSB0aW1lIHRoZSBhY3RpdmUgYnV0dG9uIGlzIGNoYW5nZWQuCisgICAg
ICAgICAqCisgICAgICAgICAqIFdoZW4geHIgaXMgZW50ZXJlZCB2aWEgYSBidXR0b24gdGhhdCBs
YXVuY2hlcyB4ciB0aGF0IGJ1dHRvbiB3aWxsIGJlIHRoZSBjYWxsYmFjayBwYXJhbWV0ZXIKKyAg
ICAgICAgICoKKyAgICAgICAgICogV2hlbiBleGl0aW5nIHhyIHRoZSBjYWxsYmFjayBwYXJhbWV0
ZXIgd2lsbCBiZSBudWxsKQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5hY3RpdmVCdXR0b25D
aGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0aGlzLl9vdmVybGF5ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIHRoaXMuX292ZXJsYXkuc3R5bGUu
Y3NzVGV4dCA9ICJ6LWluZGV4OjExO3Bvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDIwcHg7Ym90
dG9tOiA1MHB4OyI7CisgICAgICAgIGlmIChvcHRpb25zLmN1c3RvbUJ1dHRvbnMpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2J1dHRvbnMgPSBvcHRpb25zLmN1c3RvbUJ1dHRvbnM7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgaG1kQnRuID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiYnV0dG9uIik7CisgICAgICAgICAgICBobWRCdG4uc3R5bGUuY3NzVGV4dCA9ICJj
b2xvcjogIzg2ODY4NjsgYm9yZGVyLWNvbG9yOiAjODY4Njg2OyBib3JkZXItc3R5bGU6IHNvbGlk
OyBtYXJnaW4tbGVmdDogMTBweDsgaGVpZ2h0OiA1MHB4OyB3aWR0aDogODBweDsgYmFja2dyb3Vu
ZC1jb2xvcjogcmdiYSg1MSw1MSw1MSwwLjcpOyBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7
IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgb3V0bGluZTogbm9uZTsiOworICAgICAgICAg
ICAgaG1kQnRuLmlubmVyVGV4dCA9ICJITUQiOworICAgICAgICAgICAgdGhpcy5fYnV0dG9ucy5w
dXNoKG5ldyBXZWJYUkVudGVyRXhpdFVJQnV0dG9uKGhtZEJ0biwgImltbWVyc2l2ZS12ciIsICJs
b2NhbC1mbG9vciIpKTsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvbnNbdGhpcy5fYnV0dG9ucy5s
ZW5ndGggLSAxXS51cGRhdGUgPSBmdW5jdGlvbiAoYWN0aXZlQnV0dG9uKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAoYWN0aXZlQnV0dG9uID09PSBudWxs
IHx8IGFjdGl2ZUJ1dHRvbiA9PT0gdGhpcykgPyAiIiA6ICJub25lIjsKKyAgICAgICAgICAgICAg
ICB0aGlzLmVsZW1lbnQuaW5uZXJUZXh0ID0gYWN0aXZlQnV0dG9uID09PSB0aGlzID8gIkVYSVQi
IDogIkhNRCI7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdGhpcy5fdXBkYXRlQnV0dG9u
cyhudWxsKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcmVuZGVyQ2FudmFzID0gc2NlbmUuZ2V0
RW5naW5lKCkuZ2V0UmVuZGVyaW5nQ2FudmFzKCk7CisgICAgICAgIGlmIChyZW5kZXJDYW52YXMg
JiYgcmVuZGVyQ2FudmFzLnBhcmVudE5vZGUpIHsKKyAgICAgICAgICAgIHJlbmRlckNhbnZhcy5w
YXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX292ZXJsYXkpOworICAgICAgICAgICAgc2NlbmUu
b25EaXNwb3NlT2JzZXJ2YWJsZS5hZGRPbmNlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICBfdGhpcy5kaXNwb3NlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIFVJIHRvIGFsbG93IHRoZSB1c2VyIHRvIGVudGVyL2V4aXQg
WFIgbW9kZQorICAgICAqIEBwYXJhbSBzY2VuZSB0aGUgc2NlbmUgdG8gYWRkIHRoZSB1aSB0bwor
ICAgICAqIEBwYXJhbSBoZWxwZXIgdGhlIHhyIGV4cGVyaWVuY2UgaGVscGVyIHRvIGVudGVyL2V4
aXQgeHIgd2l0aAorICAgICAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnMgdG8gY29uZmlndXJlIHRo
ZSBVSQorICAgICAqIEByZXR1cm5zIHRoZSBjcmVhdGVkIHVpCisgICAgICovCisgICAgV2ViWFJF
bnRlckV4aXRVSS5DcmVhdGVBc3luYyA9IGZ1bmN0aW9uIChzY2VuZSwgaGVscGVyLCBvcHRpb25z
KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciB1aSA9IG5ldyBXZWJY
UkVudGVyRXhpdFVJKHNjZW5lLCBvcHRpb25zKTsKKyAgICAgICAgdmFyIHN1cHBvcnRlZFByb21p
c2VzID0gdWkuX2J1dHRvbnMubWFwKGZ1bmN0aW9uIChidG4pIHsKKyAgICAgICAgICAgIHJldHVy
biBoZWxwZXIuc2Vzc2lvbk1hbmFnZXIuc3VwcG9ydHNTZXNzaW9uQXN5bmMoYnRuLnNlc3Npb25N
b2RlKTsKKyAgICAgICAgfSk7CisgICAgICAgIGhlbHBlci5vblN0YXRlQ2hhbmdlZE9ic2VydmFi
bGUuYWRkKGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICAgICAgaWYgKHN0YXRlID09IF93ZWJY
UkV4cGVyaWVuY2VIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siV2ViWFJTdGF0
ZSJdLk5PVF9JTl9YUikgeworICAgICAgICAgICAgICAgIHVpLl91cGRhdGVCdXR0b25zKG51bGwp
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UuYWxs
KHN1cHBvcnRlZFByb21pc2VzKS50aGVuKGZ1bmN0aW9uIChyZXN1bHRzKSB7CisgICAgICAgICAg
ICByZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHN1cHBvcnRlZCwgaSkgeworICAgICAgICAgICAg
ICAgIGlmIChzdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdWkuX292ZXJsYXkuYXBw
ZW5kQ2hpbGQodWkuX2J1dHRvbnNbaV0uZWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgIHVp
Ll9idXR0b25zW2ldLmVsZW1lbnQub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXdhaXRlciJdKF90aGlzLCB2b2lkIDAs
IHZvaWQgMCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZ2VuZXJhdG9yIl0odGhpcywgZnVu
Y3Rpb24gKF9hKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJl
bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShoZWxwZXIuc3RhdGUgPT0gX3dlYlhSRXhw
ZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJXZWJYUlN0YXRlIl0u
SU5fWFIpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpLl91cGRhdGVCdXR0b25zKG51bGwpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgaGVscGVyLmV4aXRYUkFzeW5j
KCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghKGhlbHBlci5zdGF0ZSA9PSBfd2ViWFJFeHBlcmllbmNlSGVscGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIldlYlhSU3RhdGUiXS5OT1RfSU5fWFIpKSByZXR1cm4gWzMg
LypicmVhayovLCA0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLl91
cGRhdGVCdXR0b25zKHVpLl9idXR0b25zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghb3B0aW9ucy53ZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMpIHJldHVybiBb
MyAvKmJyZWFrKi8sIDRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFs0IC8qeWllbGQqLywgaGVscGVyLmVudGVyWFJBc3luYyh1aS5fYnV0dG9uc1tpXS5zZXNz
aW9uTW9kZSwgdWkuX2J1dHRvbnNbaV0ucmVmZXJlbmNlU3BhY2VUeXBlLCBvcHRpb25zLndlYlhS
TWFuYWdlZE91dHB1dENhbnZhcyldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICB9KTsgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiB1aTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAg
ICBXZWJYUkVudGVyRXhpdFVJLnByb3RvdHlwZS5fdXBkYXRlQnV0dG9ucyA9IGZ1bmN0aW9uIChh
Y3RpdmVCdXR0b24pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5f
YWN0aXZlQnV0dG9uID0gYWN0aXZlQnV0dG9uOworICAgICAgICB0aGlzLl9idXR0b25zLmZvckVh
Y2goZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAgIGIudXBkYXRlKF90aGlzLl9hY3RpdmVCdXR0
b24pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5hY3RpdmVCdXR0b25DaGFuZ2VkT2JzZXJ2
YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcy5fYWN0aXZlQnV0dG9uKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIERpc3Bvc2VzIG9mIHRoZSBvYmplY3QKKyAgICAgKi8KKyAgICBXZWJYUkVudGVy
RXhpdFVJLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcmVu
ZGVyQ2FudmFzID0gdGhpcy5zY2VuZS5nZXRFbmdpbmUoKS5nZXRSZW5kZXJpbmdDYW52YXMoKTsK
KyAgICAgICAgaWYgKHJlbmRlckNhbnZhcyAmJiByZW5kZXJDYW52YXMucGFyZW50Tm9kZSAmJiBy
ZW5kZXJDYW52YXMucGFyZW50Tm9kZS5jb250YWlucyh0aGlzLl9vdmVybGF5KSkgeworICAgICAg
ICAgICAgcmVuZGVyQ2FudmFzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fb3ZlcmxheSk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5hY3RpdmVCdXR0b25DaGFuZ2VkT2JzZXJ2YWJsZS5j
bGVhcigpOworICAgIH07CisgICAgcmV0dXJuIFdlYlhSRW50ZXJFeGl0VUk7Cit9KCkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvWFIvd2ViWFJFeHBlcmllbmNlSGVscGVy
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vQ2FtZXJhcy9YUi93ZWJYUkV4cGVyaWVuY2VIZWxwZXIudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFdlYlhSU3RhdGUsIFdlYlhSRXhwZXJpZW5jZUhlbHBlciAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUlN0YXRlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBXZWJYUlN0YXRlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSRXhwZXJpZW5jZUhl
bHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViWFJFeHBlcmllbmNlSGVscGVyOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFi
bGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRo
LnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYWJzdHJhY3RN
ZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NZXNoZXMvYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1lc2gudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJTZXNzaW9uTWFuYWdlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUlNl
c3Npb25NYW5hZ2VyICovICIuL0NhbWVyYXMvWFIvd2ViWFJTZXNzaW9uTWFuYWdlci50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJYUkNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJYUkNhbWVyYSAqLyAiLi9D
YW1lcmFzL1hSL3dlYlhSQ2FtZXJhLnRzIik7CisKKworCisKKworLyoqCisgKiBTdGF0ZXMgb2Yg
dGhlIHdlYlhSIGV4cGVyaWVuY2UKKyAqLwordmFyIFdlYlhSU3RhdGU7CisoZnVuY3Rpb24gKFdl
YlhSU3RhdGUpIHsKKyAgICAvKioKKyAgICAgKiBUcmFuc2l0aW9uaW5nIHRvIGJlaW5nIGluIFhS
IG1vZGUKKyAgICAgKi8KKyAgICBXZWJYUlN0YXRlW1dlYlhSU3RhdGVbIkVOVEVSSU5HX1hSIl0g
PSAwXSA9ICJFTlRFUklOR19YUiI7CisgICAgLyoqCisgICAgICogVHJhbnNpdGlvbmluZyB0byBu
b24gWFIgbW9kZQorICAgICAqLworICAgIFdlYlhSU3RhdGVbV2ViWFJTdGF0ZVsiRVhJVElOR19Y
UiJdID0gMV0gPSAiRVhJVElOR19YUiI7CisgICAgLyoqCisgICAgICogSW4gWFIgbW9kZSBhbmQg
cHJlc2VudGluZworICAgICAqLworICAgIFdlYlhSU3RhdGVbV2ViWFJTdGF0ZVsiSU5fWFIiXSA9
IDJdID0gIklOX1hSIjsKKyAgICAvKioKKyAgICAgKiBOb3QgZW50ZXJlZCBYUiBtb2RlCisgICAg
ICovCisgICAgV2ViWFJTdGF0ZVtXZWJYUlN0YXRlWyJOT1RfSU5fWFIiXSA9IDNdID0gIk5PVF9J
Tl9YUiI7Cit9KShXZWJYUlN0YXRlIHx8IChXZWJYUlN0YXRlID0ge30pKTsKKy8qKgorICogQmFz
ZSBzZXQgb2YgZnVuY3Rpb25hbGl0eSBuZWVkZWQgdG8gY3JlYXRlIGFuIFhSIGV4cGVyaW5jZSAo
V2ViWFJTZXNzaW9uTWFuYWdlciwgQ2FtZXJhLCBTdGF0ZU1hbmFnZW1lbnQsIGV0Yy4pCisgKiBA
c2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3dlYnhyCisgKi8KK3ZhciBXZWJY
UkV4cGVyaWVuY2VIZWxwZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIFdlYlhSRXhwZXJpZW5jZUhlbHBlcgorICAgICAqIEBwYXJhbSBz
Y2VuZSBUaGUgc2NlbmUgdGhlIGhlbHBlciBzaG91bGQgYmUgY3JlYXRlZCBpbgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIFdlYlhSRXhwZXJpZW5jZUhlbHBlcihzY2VuZSkgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgWFIgZXhwZXJpZW5jZSAoZWcuIHRy
YW5zaXRpb25pbmcsIGluIFhSIG9yIG5vdCBpbiBYUikKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuc3RhdGUgPSBXZWJYUlN0YXRlLk5PVF9JTl9YUjsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEZpcmVzIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBleHBlcmllbmNlIGhlbHBlciBoYXMgY2hhbmdl
ZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vblN0YXRlQ2hhbmdlZE9ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgdGhpcy5fbm9uVlJDYW1lcmEgPSBudWxsOworICAgICAgICB0aGlz
Ll9vcmlnaW5hbFNjZW5lQXV0b0NsZWFyID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc3VwcG9ydGVk
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuY2FtZXJhID0gbmV3IF93ZWJYUkNhbWVyYV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJXZWJYUkNhbWVyYSJdKCIiLCBzY2VuZSk7CisgICAgICAg
IHRoaXMuc2Vzc2lvbk1hbmFnZXIgPSBuZXcgX3dlYlhSU2Vzc2lvbk1hbmFnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siV2ViWFJTZXNzaW9uTWFuYWdlciJdKHNjZW5lKTsKKyAgICAg
ICAgdGhpcy5jb250YWluZXIgPSBuZXcgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siQWJzdHJhY3RNZXNoIl0oIldlYlhSIENvbnRhaW5lciIsIHNjZW5l
KTsKKyAgICAgICAgdGhpcy5jYW1lcmEucGFyZW50ID0gdGhpcy5jb250YWluZXI7CisgICAgICAg
IHNjZW5lLm9uRGlzcG9zZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IF90aGlzLmV4aXRYUkFzeW5jKCk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBXZWJYUkV4cGVy
aWVuY2VIZWxwZXIucHJvdG90eXBlLl9zZXRTdGF0ZSA9IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAg
ICAgdGhpcy5zdGF0ZSA9IHZhbDsKKyAgICAgICAgdGhpcy5vblN0YXRlQ2hhbmdlZE9ic2VydmFi
bGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMuc3RhdGUpOworICAgIH07CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyB0aGUgZXhwZXJpZW5jZSBoZWxwZXIKKyAgICAgKiBAcGFyYW0gc2NlbmUgdGhlIHNj
ZW5lIHRvIGF0dGFjaCB0aGUgZXhwZXJpZW5jZSBoZWxwZXIgdG8KKyAgICAgKiBAcmV0dXJucyBh
IHByb21pc2UgZm9yIHRoZSBleHBlcmllbmNlIGhlbHBlcgorICAgICAqLworICAgIFdlYlhSRXhw
ZXJpZW5jZUhlbHBlci5DcmVhdGVBc3luYyA9IGZ1bmN0aW9uIChzY2VuZSkgeworICAgICAgICB2
YXIgaGVscGVyID0gbmV3IFdlYlhSRXhwZXJpZW5jZUhlbHBlcihzY2VuZSk7CisgICAgICAgIHJl
dHVybiBoZWxwZXIuc2Vzc2lvbk1hbmFnZXIuaW5pdGlhbGl6ZUFzeW5jKCkudGhlbihmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBoZWxwZXIuX3N1cHBvcnRlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gaGVscGVyOworICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gaGVscGVyOworICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEV4aXRzIFhSIG1vZGUgYW5kIHJldHVybnMgdGhlIHNjZW5lIHRvIGl0cyBvcmlnaW5hbCBzdGF0
ZQorICAgICAqIEByZXR1cm5zIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB4ciBtb2RlIGhh
cyBleGl0ZWQKKyAgICAgKi8KKyAgICBXZWJYUkV4cGVyaWVuY2VIZWxwZXIucHJvdG90eXBlLmV4
aXRYUkFzeW5jID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9zZXRTdGF0ZShXZWJYUlN0
YXRlLkVYSVRJTkdfWFIpOworICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uTWFuYWdlci5leGl0
WFJBc3luYygpOworICAgIH07CisgICAgLyoqCisgICAgICogRW50ZXJzIFhSIG1vZGUgKFRoaXMg
bXVzdCBiZSBkb25lIHdpdGhpbiBhIHVzZXIgaW50ZXJhY3Rpb24gaW4gbW9zdCBicm93c2VycyBl
Zy4gYnV0dG9uIGNsaWNrKQorICAgICAqIEBwYXJhbSBzZXNzaW9uQ3JlYXRpb25PcHRpb25zIG9w
dGlvbnMgZm9yIHRoZSBYUiBzZXNzaW9uCisgICAgICogQHBhcmFtIHJlZmVyZW5jZVNwYWNlVHlw
ZSBmcmFtZSBvZiByZWZlcmVuY2Ugb2YgdGhlIFhSIHNlc3Npb24KKyAgICAgKiBAcGFyYW0gb3V0
cHV0Q2FudmFzIHRoZSBvdXRwdXQgY2FudmFzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGVudGVyIFhS
IG1vZGUKKyAgICAgKiBAcmV0dXJucyBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgeHIgbW9k
ZSBoYXMgZW50ZXJlZAorICAgICAqLworICAgIFdlYlhSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5
cGUuZW50ZXJYUkFzeW5jID0gZnVuY3Rpb24gKHNlc3Npb25DcmVhdGlvbk9wdGlvbnMsIHJlZmVy
ZW5jZVNwYWNlVHlwZSwgb3V0cHV0Q2FudmFzKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGlmICghdGhpcy5fc3VwcG9ydGVkKSB7CisgICAgICAgICAgICB0aHJvdyAiWFIg
c2Vzc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciI7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fc2V0U3RhdGUoV2ViWFJTdGF0ZS5FTlRFUklOR19YUik7CisgICAgICAgIHJldHVy
biB0aGlzLnNlc3Npb25NYW5hZ2VyLmluaXRpYWxpemVTZXNzaW9uQXN5bmMoc2Vzc2lvbkNyZWF0
aW9uT3B0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMu
c2Vzc2lvbk1hbmFnZXIuc2V0UmVmZXJlbmNlU3BhY2VBc3luYyhyZWZlcmVuY2VTcGFjZVR5cGUp
OworICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBvdXRw
dXRDYW52YXMuaW5pdGlhbGl6ZVhSTGF5ZXJBc3luYyhfdGhpcy5zZXNzaW9uTWFuYWdlci5zZXNz
aW9uKTsKKyAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
X3RoaXMuc2Vzc2lvbk1hbmFnZXIudXBkYXRlUmVuZGVyU3RhdGVBc3luYyh7IGRlcHRoRmFyOiBf
dGhpcy5jYW1lcmEubWF4WiwgZGVwdGhOZWFyOiBfdGhpcy5jYW1lcmEubWluWiwgYmFzZUxheWVy
OiBvdXRwdXRDYW52YXMueHJMYXllciB9KTsKKyAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuc2Vzc2lvbk1hbmFnZXIuc3RhcnRSZW5kZXJpbmdU
b1hSQXN5bmMoKTsKKyAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAv
LyBDYWNoZSBwcmUgeHIgc2NlbmUgc2V0dGluZ3MKKyAgICAgICAgICAgIF90aGlzLl9vcmlnaW5h
bFNjZW5lQXV0b0NsZWFyID0gX3RoaXMuc2NlbmUuYXV0b0NsZWFyOworICAgICAgICAgICAgX3Ro
aXMuX25vblZSQ2FtZXJhID0gX3RoaXMuc2NlbmUuYWN0aXZlQ2FtZXJhOworICAgICAgICAgICAg
Ly8gT3ZlcndyaXRlIGN1cnJlbnQgc2NlbmUgc2V0dGluZ3MKKyAgICAgICAgICAgIF90aGlzLnNj
ZW5lLmF1dG9DbGVhciA9IGZhbHNlOworICAgICAgICAgICAgX3RoaXMuc2NlbmUuYWN0aXZlQ2Ft
ZXJhID0gX3RoaXMuY2FtZXJhOworICAgICAgICAgICAgX3RoaXMuc2Vzc2lvbk1hbmFnZXIub25Y
UkZyYW1lT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlz
LmNhbWVyYS51cGRhdGVGcm9tWFJTZXNzaW9uTWFuYWdlcihfdGhpcy5zZXNzaW9uTWFuYWdlcik7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIF90aGlzLnNlc3Npb25NYW5hZ2VyLm9uWFJT
ZXNzaW9uRW5kZWQuYWRkT25jZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy8gUmVz
ZXQgY2FtZXJhIHJpZ3Mgb3V0cHV0IHJlbmRlciB0YXJnZXQgdG8gZW5zdXJlIHNlc3Npb25zIHJl
bmRlciB0YXJnZXQgaXMgbm90IGRyYXduIGFmdGVyIGl0IGVuZHMKKyAgICAgICAgICAgICAgICBf
dGhpcy5jYW1lcmEucmlnQ2FtZXJhcy5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7CisgICAgICAgICAg
ICAgICAgICAgIGMub3V0cHV0UmVuZGVyVGFyZ2V0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIHNjZW5lIHNldHRpbmdzCisgICAgICAgICAg
ICAgICAgX3RoaXMuc2NlbmUuYXV0b0NsZWFyID0gX3RoaXMuX29yaWdpbmFsU2NlbmVBdXRvQ2xl
YXI7CisgICAgICAgICAgICAgICAgX3RoaXMuc2NlbmUuYWN0aXZlQ2FtZXJhID0gX3RoaXMuX25v
blZSQ2FtZXJhOworICAgICAgICAgICAgICAgIF90aGlzLl9zZXRTdGF0ZShXZWJYUlN0YXRlLk5P
VF9JTl9YUik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgdGhl
IGZpcnN0IGZyYW1lIGFycml2ZXMgYmVmb3JlIHNldHRpbmcgc3RhdGUgdG8gaW4geHIKKyAgICAg
ICAgICAgIF90aGlzLnNlc3Npb25NYW5hZ2VyLm9uWFJGcmFtZU9ic2VydmFibGUuYWRkT25jZShm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3NldFN0YXRlKFdlYlhSU3RhdGUu
SU5fWFIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7
CisgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKGUu
bWVzc2FnZSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0
aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgYnkgbW92aW5nIHRoZSBjYW1lcmEncyBj
b250YWluZXIKKyAgICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgbW9kaWZ5aW5n
IHRoZSBjYW1lcmEncyBwb3NpdGlvbiBhcyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGFuIHhy
U2Vzc2lvbnMncyB1cGRhdGUgZnJhbWUKKyAgICAgKiBAcGFyYW0gcG9zaXRpb24gVGhlIGRlc2ly
ZWQgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEKKyAgICAgKi8KKyAgICBXZWJYUkV4cGVy
aWVuY2VIZWxwZXIucHJvdG90eXBlLnNldFBvc2l0aW9uT2ZDYW1lcmFVc2luZ0NvbnRhaW5lciA9
IGZ1bmN0aW9uIChwb3NpdGlvbikgeworICAgICAgICB0aGlzLmNhbWVyYS5nbG9iYWxQb3NpdGlv
bi5zdWJ0cmFjdFRvUmVmKHBvc2l0aW9uLCBXZWJYUkV4cGVyaWVuY2VIZWxwZXIuX1RtcFZlY3Rv
cik7CisgICAgICAgIHRoaXMuY29udGFpbmVyLnBvc2l0aW9uLnN1YnRyYWN0SW5QbGFjZShXZWJY
UkV4cGVyaWVuY2VIZWxwZXIuX1RtcFZlY3Rvcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
b3RhdGVzIHRoZSB4ciBjYW1lcmEgYnkgcm90YXRpbmcgdGhlIGNhbWVyYSdzIGNvbnRhaW5lciBh
cm91bmQgdGhlIGNhbWVyYSdzIHBvc2l0aW9uCisgICAgICogVGhpcyBzaG91bGQgYmUgdXNlZCBp
bnN0ZWFkIG9mIG1vZGlmeWluZyB0aGUgY2FtZXJhJ3Mgcm90YXRpb24gYXMgaXQgd2lsbCBiZSBv
dmVyd3JpdHRlbiBieSBhbiB4clNlc3Npb25zJ3MgdXBkYXRlIGZyYW1lCisgICAgICogQHBhcmFt
IHJvdGF0aW9uIHRoZSBkZXNpcmVkIHF1YXRlcm5pb24gcm90YXRpb24gdG8gYXBwbHkgdG8gdGhl
IGNhbWVyYQorICAgICAqLworICAgIFdlYlhSRXhwZXJpZW5jZUhlbHBlci5wcm90b3R5cGUucm90
YXRlQ2FtZXJhQnlRdWF0ZXJuaW9uVXNpbmdDb250YWluZXIgPSBmdW5jdGlvbiAocm90YXRpb24p
IHsKKyAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5lci5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAg
ICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJvdGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl0uRnJvbUV1
bGVyVmVjdG9yKHRoaXMuY29udGFpbmVyLnJvdGF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLmNvbnRhaW5lci5yb3RhdGlvblF1YXRlcm5pb24ubXVsdGlwbHlJblBsYWNlKHJvdGF0aW9u
KTsKKyAgICAgICAgdGhpcy5jb250YWluZXIucG9zaXRpb24ucm90YXRlQnlRdWF0ZXJuaW9uQXJv
dW5kUG9pbnRUb1JlZihyb3RhdGlvbiwgdGhpcy5jYW1lcmEuZ2xvYmFsUG9zaXRpb24sIHRoaXMu
Y29udGFpbmVyLnBvc2l0aW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIG9m
IHRoZSBleHBlcmllbmNlIGhlbHBlcgorICAgICAqLworICAgIFdlYlhSRXhwZXJpZW5jZUhlbHBl
ci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5jYW1lcmEu
ZGlzcG9zZSgpOworICAgICAgICB0aGlzLmNvbnRhaW5lci5kaXNwb3NlKCk7CisgICAgICAgIHRo
aXMub25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMuc2Vzc2lv
bk1hbmFnZXIuZGlzcG9zZSgpOworICAgIH07CisgICAgV2ViWFJFeHBlcmllbmNlSGVscGVyLl9U
bXBWZWN0b3IgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlZlY3RvcjMiXSgpOworICAgIHJldHVybiBXZWJYUkV4cGVyaWVuY2VIZWxwZXI7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvWFIvd2ViWFJJbnB1dC50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9D
YW1lcmFzL1hSL3dlYlhSSW5wdXQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBXZWJYUklucHV0ICovCisvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIFdlYlhSSW5wdXQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2Vy
dmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJFeHBlcmllbmNlSGVscGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3dlYlhSRXhwZXJp
ZW5jZUhlbHBlciAqLyAiLi9DYW1lcmFzL1hSL3dlYlhSRXhwZXJpZW5jZUhlbHBlci50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJYUkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2ViWFJDb250cm9sbGVy
ICovICIuL0NhbWVyYXMvWFIvd2ViWFJDb250cm9sbGVyLnRzIik7CisKKworCisvKioKKyAqIFhS
IGlucHV0IHVzZWQgdG8gdHJhY2sgWFIgaW5wdXRzIHN1Y2ggYXMgY29udHJvbGxlcnMvcmF5cwor
ICovCit2YXIgV2ViWFJJbnB1dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAv
KioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUgV2ViWFJJbnB1dAorICAgICAqIEBwYXJhbSBiYXNl
RXhwZXJpZW5jZSBleHBlcmllbmNlIGhlbHBlciB3aGljaCB0aGUgaW5wdXQgc2hvdWxkIGJlIGNy
ZWF0ZWQgZm9yCisgICAgICovCisgICAgZnVuY3Rpb24gV2ViWFJJbnB1dCgKKyAgICAvKioKKyAg
ICAgKiBCYXNlIGV4cGVyaWVuY2UgdGhlIGlucHV0IGxpc3RlbnMgdG8KKyAgICAgKi8KKyAgICBi
YXNlRXhwZXJpZW5jZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlz
LmJhc2VFeHBlcmllbmNlID0gYmFzZUV4cGVyaWVuY2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBYUiBjb250cm9sbGVycyBiZWluZyB0cmFja2VkCisgICAgICAgICAqLworICAgICAgICB0aGlz
LmNvbnRyb2xsZXJzID0gW107CisgICAgICAgIC8qKgorICAgICAgICAgKiBFdmVudCB3aGVuIGEg
Y29udHJvbGxlciBoYXMgYmVlbiBjb25uZWN0ZWQvYWRkZWQKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMub25Db250cm9sbGVyQWRkZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBFdmVudCB3aGVuIGEgY29udHJvbGxlciBoYXMgYmVlbiByZW1vdmVkL2Rp
c2Nvbm5lY3RlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkNvbnRyb2xsZXJSZW1vdmVk
T2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0aGlzLl9vbklucHV0U291cmNlc0NoYW5n
ZSA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgX3RoaXMuX2FkZEFuZFJlbW92ZUNv
bnRyb2xsZXJzKGV2ZW50LmFkZGVkLCBldmVudC5yZW1vdmVkKTsKKyAgICAgICAgfTsKKyAgICAg
ICAgLy8gUmVtb3ZlIGNvbnRyb2xsZXJzIHdoZW4gZXhpdGluZyBYUgorICAgICAgICB0aGlzLl9z
dGF0ZU9ic2VydmVyID0gYmFzZUV4cGVyaWVuY2Uub25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlLmFk
ZChmdW5jdGlvbiAocykgeworICAgICAgICAgICAgaWYgKHMgPT09IF93ZWJYUkV4cGVyaWVuY2VI
ZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siV2ViWFJTdGF0ZSJdLk5PVF9JTl9Y
UikgeworICAgICAgICAgICAgICAgIF90aGlzLl9hZGRBbmRSZW1vdmVDb250cm9sbGVycyhbXSwg
X3RoaXMuY29udHJvbGxlcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmlucHV0U291cmNl
OyB9KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9mcmFtZU9i
c2VydmVyID0gYmFzZUV4cGVyaWVuY2Uuc2Vzc2lvbk1hbmFnZXIub25YUkZyYW1lT2JzZXJ2YWJs
ZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCFiYXNlRXhwZXJpZW5jZS5zZXNz
aW9uTWFuYWdlci5jdXJyZW50RnJhbWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBTdGFydCBsaXN0aW5nIHRvIGlucHV0IGFkZC9yZW1v
dmUgZXZlbnQKKyAgICAgICAgICAgIGlmIChfdGhpcy5jb250cm9sbGVycy5sZW5ndGggPT0gMCAm
JiBiYXNlRXhwZXJpZW5jZS5zZXNzaW9uTWFuYWdlci5zZXNzaW9uLmlucHV0U291cmNlcykgewor
ICAgICAgICAgICAgICAgIF90aGlzLl9hZGRBbmRSZW1vdmVDb250cm9sbGVycyhiYXNlRXhwZXJp
ZW5jZS5zZXNzaW9uTWFuYWdlci5zZXNzaW9uLmlucHV0U291cmNlcywgW10pOworICAgICAgICAg
ICAgICAgIGJhc2VFeHBlcmllbmNlLnNlc3Npb25NYW5hZ2VyLnNlc3Npb24uYWRkRXZlbnRMaXN0
ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIiwgX3RoaXMuX29uSW5wdXRTb3VyY2VzQ2hhbmdlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFVwZGF0ZSBjb250cm9sbGVyIHBvc2UgaW5m
bworICAgICAgICAgICAgX3RoaXMuY29udHJvbGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoY29udHJv
bGxlcikgeworICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIudXBkYXRlRnJvbVhSRnJhbWUoYmFz
ZUV4cGVyaWVuY2Uuc2Vzc2lvbk1hbmFnZXIuY3VycmVudEZyYW1lLCBiYXNlRXhwZXJpZW5jZS5z
ZXNzaW9uTWFuYWdlci5yZWZlcmVuY2VTcGFjZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSk7CisgICAgfQorICAgIFdlYlhSSW5wdXQucHJvdG90eXBlLl9hZGRBbmRSZW1vdmVDb250cm9s
bGVycyA9IGZ1bmN0aW9uIChhZGRJbnB1dHMsIHJlbW92ZUlucHV0cykgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICAvLyBBZGQgY29udHJvbGxlcnMgaWYgdGhleSBkb24ndCBh
bHJlYWR5IGV4aXN0CisgICAgICAgIHZhciBzb3VyY2VzID0gdGhpcy5jb250cm9sbGVycy5tYXAo
ZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMuaW5wdXRTb3VyY2U7IH0pOworICAgICAgICBmb3IgKHZh
ciBfaSA9IDAsIGFkZElucHV0c18xID0gYWRkSW5wdXRzOyBfaSA8IGFkZElucHV0c18xLmxlbmd0
aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGlucHV0ID0gYWRkSW5wdXRzXzFbX2ldOworICAg
ICAgICAgICAgaWYgKHNvdXJjZXMuaW5kZXhPZihpbnB1dCkgPT09IC0xKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgX3dlYlhSQ29udHJvbGxlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJXZWJYUkNvbnRyb2xsZXIiXSh0aGlzLmJhc2VFeHBlcmllbmNlLmNh
bWVyYS5fc2NlbmUsIGlucHV0LCB0aGlzLmJhc2VFeHBlcmllbmNlLmNvbnRhaW5lcik7CisgICAg
ICAgICAgICAgICAgdGhpcy5jb250cm9sbGVycy5wdXNoKGNvbnRyb2xsZXIpOworICAgICAgICAg
ICAgICAgIHRoaXMub25Db250cm9sbGVyQWRkZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhj
b250cm9sbGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBSZW1vdmUg
YW5kIGRpc3Bvc2Ugb2YgY29udHJvbGxlcnMgdG8gYmUgZGlzcG9zZWQKKyAgICAgICAgdmFyIGtl
ZXBDb250cm9sbGVycyA9IFtdOworICAgICAgICB2YXIgcmVtb3ZlZENvbnRyb2xsZXJzID0gW107
CisgICAgICAgIHRoaXMuY29udHJvbGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoYykgeworICAgICAg
ICAgICAgaWYgKHJlbW92ZUlucHV0cy5pbmRleE9mKGMuaW5wdXRTb3VyY2UpID09PSAtMSkgewor
ICAgICAgICAgICAgICAgIGtlZXBDb250cm9sbGVycy5wdXNoKGMpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlZENvbnRyb2xsZXJzLnB1
c2goYyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0aGlzLmNvbnRyb2xs
ZXJzID0ga2VlcENvbnRyb2xsZXJzOworICAgICAgICByZW1vdmVkQ29udHJvbGxlcnMuZm9yRWFj
aChmdW5jdGlvbiAoYykgeworICAgICAgICAgICAgX3RoaXMub25Db250cm9sbGVyUmVtb3ZlZE9i
c2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGMpOworICAgICAgICAgICAgYy5kaXNwb3NlKCk7Cisg
ICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIG9iamVj
dAorICAgICAqLworICAgIFdlYlhSSW5wdXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRoaXMuY29udHJvbGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoYykgeworICAg
ICAgICAgICAgYy5kaXNwb3NlKCk7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLmJhc2VFeHBl
cmllbmNlLnNlc3Npb25NYW5hZ2VyLm9uWFJGcmFtZU9ic2VydmFibGUucmVtb3ZlKHRoaXMuX2Zy
YW1lT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLmJhc2VFeHBlcmllbmNlLm9uU3RhdGVDaGFuZ2Vk
T2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fc3RhdGVPYnNlcnZlcik7CisgICAgfTsKKyAgICByZXR1
cm4gV2ViWFJJbnB1dDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJh
cy9YUi93ZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL1hSL3dl
YlhSTWFuYWdlZE91dHB1dENhbnZhcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogV2ViWFJN
YW5hZ2VkT3V0cHV0Q2FudmFzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IldlYlhSTWFuYWdlZE91dHB1dENhbnZhcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViWFJNYW5h
Z2VkT3V0cHV0Q2FudmFzOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViWFJFeHBl
cmllbmNlSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3dlYlhSRXhwZXJpZW5jZUhlbHBlciAqLyAiLi9DYW1lcmFzL1hSL3dlYlhS
RXhwZXJpZW5jZUhlbHBlci50cyIpOworCisvKioKKyAqIENyZWF0ZXMgYSBjYW52YXMgdGhhdCBp
cyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIHdlYnBhZ2Ugd2hlbiBlbnRlcmluZy9leGl0aW5nIFhS
CisgKi8KK3ZhciBXZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIGNhbnZhcyB0byBiZSBh
ZGRlZC9yZW1vdmVkIHVwb24gZW50ZXJpbmcvZXhpdGluZyB4cgorICAgICAqIEBwYXJhbSBoZWxw
ZXIgdGhlIHhyIGV4cGVyaWVuY2UgaGVscGVyIHVzZWQgdG8gdHJpZ2dlciBhZGRpbmcvcmVtb3Zp
bmcgb2YgdGhlIGNhbnZhcworICAgICAqIEBwYXJhbSBjYW52YXMgVGhlIGNhbnZhcyB0byBiZSBh
ZGRlZC9yZW1vdmVkIChJZiBub3Qgc3BlY2lmaWVkIGEgZnVsbCBzY3JlZW4gY2FudmFzIHdpbGwg
YmUgY3JlYXRlZCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBXZWJYUk1hbmFnZWRPdXRwdXRDYW52
YXMoaGVscGVyLCBjYW52YXMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
dGhpcy5oZWxwZXIgPSBoZWxwZXI7CisgICAgICAgIHRoaXMuX2NhbnZhcyA9IG51bGw7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiB4ciBsYXllciBmb3IgdGhlIGNhbnZhcworICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy54ckxheWVyID0gbnVsbDsKKyAgICAgICAgaWYgKCFjYW52YXMpIHsKKyAg
ICAgICAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOworICAg
ICAgICAgICAgY2FudmFzLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJzb2x1dGU7IGJvdHRv
bTowcHg7cmlnaHQ6MHB4O3otaW5kZXg6MTA7d2lkdGg6OTAlO2hlaWdodDoxMDAlO2JhY2tncm91
bmQtY29sb3I6ICMwMDAwMDA7IjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zZXRNYW5hZ2Vk
T3V0cHV0Q2FudmFzKGNhbnZhcyk7CisgICAgICAgIGhlbHBlci5vblN0YXRlQ2hhbmdlZE9ic2Vy
dmFibGUuYWRkKGZ1bmN0aW9uIChzdGF0ZUluZm8pIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZUlu
Zm8gPT0gX3dlYlhSRXhwZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJXZWJYUlN0YXRlIl0uRU5URVJJTkdfWFIpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgY2Fu
dmFzIGlzIGFkZGVkIHRvIHRoZSBzY3JlZW4gYmVmb3JlIGVudGVyaW5nIFhSIGJlY2F1c2UgY3Vy
cmVudGx5IHRoZSB4ciBzZXNzaW9uIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2hpbGUgdGhlIGNhbnZh
cyBpcyBhZGRlZCByZW5kZXIgcHJvcGVybHkKKyAgICAgICAgICAgICAgICBfdGhpcy5fYWRkQ2Fu
dmFzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChoZWxwZXIuc3RhdGUg
PT0gX3dlYlhSRXhwZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJX
ZWJYUlN0YXRlIl0uTk9UX0lOX1hSKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3JlbW92ZUNh
bnZhcygpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisgICAgLyoqCisgICAg
ICogSW5pdGlhbGl6ZXMgdGhlIHhyIGxheWVyIGZvciB0aGUgc2Vzc2lvbgorICAgICAqIEBwYXJh
bSB4clNlc3Npb24geHIgc2Vzc2lvbgorICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdp
bGwgcmVzb2x2ZSBvbmNlIHRoZSBYUiBMYXllciBoYXMgYmVlbiBjcmVhdGVkCisgICAgICovCisg
ICAgV2ViWFJNYW5hZ2VkT3V0cHV0Q2FudmFzLnByb3RvdHlwZS5pbml0aWFsaXplWFJMYXllckFz
eW5jID0gZnVuY3Rpb24gKHhyU2Vzc2lvbikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICByZXR1cm4gdGhpcy5jYW52YXNDb250ZXh0Lm1ha2VYUkNvbXBhdGlibGUoKS50aGVu
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLnhyTGF5ZXIgPSBuZXcgWFJXZWJHTExh
eWVyKHhyU2Vzc2lvbiwgX3RoaXMuY2FudmFzQ29udGV4dCk7CisgICAgICAgIH0pOworICAgIH07
CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIG9iamVjdAorICAgICAqLworICAgIFdl
YlhSTWFuYWdlZE91dHB1dENhbnZhcy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGhpcy5fcmVtb3ZlQ2FudmFzKCk7CisgICAgICAgIHRoaXMuX3NldE1hbmFnZWRP
dXRwdXRDYW52YXMobnVsbCk7CisgICAgfTsKKyAgICBXZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMu
cHJvdG90eXBlLl9zZXRNYW5hZ2VkT3V0cHV0Q2FudmFzID0gZnVuY3Rpb24gKGNhbnZhcykgewor
ICAgICAgICB0aGlzLl9yZW1vdmVDYW52YXMoKTsKKyAgICAgICAgaWYgKCFjYW52YXMpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2NhbnZhcyA9IG51bGw7CisgICAgICAgICAgICB0aGlzLmNhbnZhc0Nv
bnRleHQgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhp
cy5fY2FudmFzID0gY2FudmFzOworICAgICAgICAgICAgdGhpcy5jYW52YXNDb250ZXh0ID0gdGhp
cy5fY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJyk7CisgICAgICAgICAgICBpZiAoIXRoaXMuY2Fu
dmFzQ29udGV4dCkgeworICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzQ29udGV4dCA9IHRoaXMu
X2NhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbDInKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisgICAgV2ViWFJNYW5hZ2VkT3V0cHV0Q2FudmFzLnByb3RvdHlwZS5fYWRkQ2FudmFz
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fY2FudmFzICYmIHRoaXMuX2NhbnZh
cyAhPT0gdGhpcy5oZWxwZXIuY29udGFpbmVyLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuZ2V0UmVu
ZGVyaW5nQ2FudmFzKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
dGhpcy5fY2FudmFzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgV2ViWFJNYW5hZ2VkT3V0cHV0
Q2FudmFzLnByb3RvdHlwZS5fcmVtb3ZlQ2FudmFzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAodGhpcy5fY2FudmFzICYmIGRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5fY2FudmFzKSAm
JiB0aGlzLl9jYW52YXMgIT09IHRoaXMuaGVscGVyLmNvbnRhaW5lci5nZXRTY2VuZSgpLmdldEVu
Z2luZSgpLmdldFJlbmRlcmluZ0NhbnZhcygpKSB7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5
LnJlbW92ZUNoaWxkKHRoaXMuX2NhbnZhcyk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVy
biBXZWJYUk1hbmFnZWRPdXRwdXRDYW52YXM7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL0NhbWVyYXMvWFIvd2ViWFJTZXNzaW9uTWFuYWdlci50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL1hS
L3dlYlhSU2Vzc2lvbk1hbmFnZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBXZWJYUlNlc3Npb25N
YW5hZ2VyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSU2Vzc2lv
bk1hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYlhSU2Vzc2lvbk1hbmFnZXI7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9sb2dnZXIgKi8g
Ii4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNl
cnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9UZXh0dXJlcy9pbnRlcm5hbFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxz
L1RleHR1cmVzL2ludGVybmFsVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1Rl
eHR1cmVzL3JlbmRlclRhcmdldFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRl
clRhcmdldFRleHR1cmUudHMiKTsKKworCisKKworLyoqCisgKiBNYW5hZ2VzIGFuIFhSU2Vzc2lv
biB0byB3b3JrIHdpdGggQmFieWxvbidzIGVuZ2luZQorICogQHNlZSBodHRwczovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by93ZWJ4cgorICovCit2YXIgV2ViWFJTZXNzaW9uTWFuYWdlciA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEg
V2ViWFJTZXNzaW9uTWFuYWdlciwgdGhpcyBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGhpbiBhIHVz
ZXIgYWN0aW9uIGJlZm9yZSB1c2FnZQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgd2hp
Y2ggdGhlIHNlc3Npb24gc2hvdWxkIGJlIGNyZWF0ZWQgZm9yCisgICAgICovCisgICAgZnVuY3Rp
b24gV2ViWFJTZXNzaW9uTWFuYWdlcihzY2VuZSkgeworICAgICAgICB0aGlzLnNjZW5lID0gc2Nl
bmU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlcyBldmVyeSB0aW1lIGEgbmV3IHhyRnJh
bWUgYXJyaXZlcyB3aGljaCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIGNhbWVyYQorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5vblhSRnJhbWVPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2Vy
dmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB4ciBzZXNzaW9uIGlzIGVuZGVkIGVp
dGhlciBieSB0aGUgZGV2aWNlIG9yIG1hbnVhbGx5IGRvbmUKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMub25YUlNlc3Npb25FbmRlZCA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKiogQGhpZGRlbiAq
LworICAgICAgICB0aGlzLl9zZXNzaW9uUmVuZGVyVGFyZ2V0VGV4dHVyZSA9IG51bGw7CisgICAg
ICAgIHRoaXMuYmFzZUxheWVyID0gbnVsbDsKKyAgICB9CisgICAgLyoqCisgICAgICogSW5pdGlh
bGl6ZXMgdGhlIG1hbmFnZXIKKyAgICAgKiBBZnRlciBpbml0aWFsaXphdGlvbiBlbnRlclhSIGNh
biBiZSBjYWxsZWQgdG8gc3RhcnQgYW4gWFIgc2Vzc2lvbgorICAgICAqIEByZXR1cm5zIFByb21p
c2Ugd2hpY2ggcmVzb2x2ZXMgYWZ0ZXIgaXQgaXMgaW5pdGlhbGl6ZWQKKyAgICAgKi8KKyAgICBX
ZWJYUlNlc3Npb25NYW5hZ2VyLnByb3RvdHlwZS5pbml0aWFsaXplQXN5bmMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJM
b2dnZXIiXS5XYXJuKCJUaGUgV2ViWFIgQVBJcyBhcmUgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQg
YW5kIGFyZSBzdWJqZWN0IHRvIGNoYW5nZSBpbiB0aGUgZnV0dXJlLiIpOworICAgICAgICAvLyBD
aGVjayBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyB3ZWJYUgorICAgICAgICB0aGlzLl94ck5hdmln
YXRvciA9IG5hdmlnYXRvcjsKKyAgICAgICAgaWYgKCF0aGlzLl94ck5hdmlnYXRvci54cikgewor
ICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJ3ZWJYUiBub3Qgc3VwcG9ydGVkIGJ5
IHRoaXMgYnJvd3NlciIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29s
dmUoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIGFuIHhyIHNlc3Npb24K
KyAgICAgKiBAcGFyYW0geHJTZXNzaW9uTW9kZSBtb2RlIHRvIGluaXRpYWxpemUKKyAgICAgKiBA
cmV0dXJucyBhIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIG9uY2UgdGhlIHNlc3Npb24gaGFz
IGJlZW4gaW5pdGlhbGl6ZWQKKyAgICAgKi8KKyAgICBXZWJYUlNlc3Npb25NYW5hZ2VyLnByb3Rv
dHlwZS5pbml0aWFsaXplU2Vzc2lvbkFzeW5jID0gZnVuY3Rpb24gKHhyU2Vzc2lvbk1vZGUpIHsK
KyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3hyTmF2aWdh
dG9yLnhyLnJlcXVlc3RTZXNzaW9uKHhyU2Vzc2lvbk1vZGUpLnRoZW4oZnVuY3Rpb24gKHNlc3Np
b24pIHsKKyAgICAgICAgICAgIF90aGlzLnNlc3Npb24gPSBzZXNzaW9uOworICAgICAgICAgICAg
Ly8gaGFuZGxlIHdoZW4gdGhlIHNlc3Npb24gaXMgZW5kZWQgKEJ5IGNhbGxpbmcgc2Vzc2lvbi5l
bmQgb3IgZGV2aWNlIGVuZHMgaXRzIG93biBzZXNzaW9uIGVnLiBwcmVzc2luZyBob21lIGJ1dHRv
biBvbiBwaG9uZSkKKyAgICAgICAgICAgIF90aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigi
ZW5kIiwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSByZW5kZXIgdGFy
Z2V0IHRleHR1cmUgYW5kIG5vdGlmeSBmcmFtZSBvYmVydmVycworICAgICAgICAgICAgICAgIF90
aGlzLl9zZXNzaW9uUmVuZGVyVGFyZ2V0VGV4dHVyZSA9IG51bGw7CisgICAgICAgICAgICAgICAg
Ly8gUmVzdG9yZSBmcmFtZSBidWZmZXIgdG8gYXZvaWQgY2xlYXIgb24geHIgZnJhbWVidWZmZXIg
YWZ0ZXIgc2Vzc2lvbiBlbmQKKyAgICAgICAgICAgICAgICBfdGhpcy5zY2VuZS5nZXRFbmdpbmUo
KS5yZXN0b3JlRGVmYXVsdEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgLy8gTmVlZCB0
byByZXN0YXJ0IHJlbmRlciBsb29wIGFzIGFmdGVyIHRoZSBzZXNzaW9uIGlzIGVuZGVkIHRoZSBs
YXN0IHJlcXVlc3QgZm9yIG5ldyBmcmFtZSB3aWxsIG5ldmVyIGNhbGwgY2FsbGJhY2sKKyAgICAg
ICAgICAgICAgICBfdGhpcy5zY2VuZS5nZXRFbmdpbmUoKS5jdXN0b21BbmltYXRpb25GcmFtZVJl
cXVlc3RlciA9IG51bGw7CisgICAgICAgICAgICAgICAgX3RoaXMub25YUlNlc3Npb25FbmRlZC5u
b3RpZnlPYnNlcnZlcnMobnVsbCk7CisgICAgICAgICAgICAgICAgX3RoaXMuc2NlbmUuZ2V0RW5n
aW5lKCkuX3JlbmRlckxvb3AoKTsKKyAgICAgICAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTsKKyAg
ICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSByZWZlcmVuY2Ugc3Bh
Y2Ugb24gdGhlIHhyIHNlc3Npb24KKyAgICAgKiBAcGFyYW0gcmVmZXJlbmNlU3BhY2Ugc3BhY2Ug
dG8gc2V0CisgICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2Ug
dGhlIHJlZmVyZW5jZSBzcGFjZSBoYXMgYmVlbiBzZXQKKyAgICAgKi8KKyAgICBXZWJYUlNlc3Np
b25NYW5hZ2VyLnByb3RvdHlwZS5zZXRSZWZlcmVuY2VTcGFjZUFzeW5jID0gZnVuY3Rpb24gKHJl
ZmVyZW5jZVNwYWNlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHJldHVy
biB0aGlzLnNlc3Npb24ucmVxdWVzdFJlZmVyZW5jZVNwYWNlKHJlZmVyZW5jZVNwYWNlKS50aGVu
KGZ1bmN0aW9uIChyZWZlcmVuY2VTcGFjZSkgeworICAgICAgICAgICAgX3RoaXMucmVmZXJlbmNl
U3BhY2UgPSByZWZlcmVuY2VTcGFjZTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBVcGRhdGVzIHRoZSByZW5kZXIgc3RhdGUgb2YgdGhlIHNlc3Npb24KKyAgICAgKiBAcGFy
YW0gc3RhdGUgc3RhdGUgdG8gc2V0CisgICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVz
b2x2ZXMgb25jZSB0aGUgcmVuZGVyIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQKKyAgICAgKi8KKyAg
ICBXZWJYUlNlc3Npb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVSZW5kZXJTdGF0ZUFzeW5jID0g
ZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIGlmIChzdGF0ZS5iYXNlTGF5ZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMuYmFzZUxheWVyID0gc3RhdGUuYmFzZUxheWVyOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0aGlzLnNlc3Npb24udXBkYXRlUmVuZGVyU3RhdGUoc3RhdGUpOworICAgIH07
CisgICAgLyoqCisgICAgICogU3RhcnRzIHJlbmRlcmluZyB0byB0aGUgeHIgbGF5ZXIKKyAgICAg
KiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSByZW5kZXJpbmcgaGFz
IHN0YXJ0ZWQKKyAgICAgKi8KKyAgICBXZWJYUlNlc3Npb25NYW5hZ2VyLnByb3RvdHlwZS5zdGFy
dFJlbmRlcmluZ1RvWFJBc3luYyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgLy8gVGVsbCB0aGUgZW5naW5lJ3MgcmVuZGVyIGxvb3AgdG8gYmUgZHJp
dmVuIGJ5IHRoZSB4ciBzZXNzaW9uJ3MgcmVmcmVzaCByYXRlIGFuZCBwcm92aWRlIHhyIHBvc2Ug
aW5mb3JtYXRpb24KKyAgICAgICAgdGhpcy5zY2VuZS5nZXRFbmdpbmUoKS5jdXN0b21BbmltYXRp
b25GcmFtZVJlcXVlc3RlciA9IHsKKyAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZTog
dGhpcy5zZXNzaW9uLnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHRoaXMuc2Vzc2lvbiksCisg
ICAgICAgICAgICByZW5kZXJGdW5jdGlvbjogZnVuY3Rpb24gKHRpbWVzdGFtcCwgeHJGcmFtZSkg
eworICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBYUiBmcmFtZSBpbiB0aGUgbWFuYWdlciB0
byBiZSBjb25zdW1lZCBieSB0aGUgWFIgY2FtZXJhIHRvIHVwZGF0ZSBwb3NlCisgICAgICAgICAg
ICAgICAgX3RoaXMuY3VycmVudEZyYW1lID0geHJGcmFtZTsKKyAgICAgICAgICAgICAgICBfdGhp
cy5vblhSRnJhbWVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhudWxsKTsKKyAgICAgICAgICAg
ICAgICBfdGhpcy5zY2VuZS5nZXRFbmdpbmUoKS5fcmVuZGVyTG9vcCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9OworICAgICAgICAvLyBDcmVhdGUgcmVuZGVyIHRhcmdldCB0ZXh0dXJlIGZy
b20geHIncyB3ZWJnbCByZW5kZXIgdGFyZ2V0CisgICAgICAgIHRoaXMuX3Nlc3Npb25SZW5kZXJU
YXJnZXRUZXh0dXJlID0gV2ViWFJTZXNzaW9uTWFuYWdlci5fQ3JlYXRlUmVuZGVyVGFyZ2V0VGV4
dHVyZUZyb21TZXNzaW9uKHRoaXMuc2Vzc2lvbiwgdGhpcy5zY2VuZSwgdGhpcy5iYXNlTGF5ZXIp
OworICAgICAgICAvLyBTdG9wIHdpbmRvdydzIGFuaW1hdGlvbiBmcmFtZSBhbmQgdHJpZ2dlciBz
ZXNzaW9ucyBhbmltYXRpb24gZnJhbWUKKyAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZy
YW1lKHRoaXMuc2NlbmUuZ2V0RW5naW5lKCkuX2ZyYW1lSGFuZGxlcik7CisgICAgICAgIHRoaXMu
c2NlbmUuZ2V0RW5naW5lKCkuX3JlbmRlckxvb3AoKTsKKyAgICAgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcHMgdGhlIHhyU2Vzc2lvbiBh
bmQgcmVzdG9yZXMgdGhlIHJlbmRlcmxvb3AKKyAgICAgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNo
IHJlc29sdmVzIGFmdGVyIGl0IGV4aXRzIFhSCisgICAgICovCisgICAgV2ViWFJTZXNzaW9uTWFu
YWdlci5wcm90b3R5cGUuZXhpdFhSQXN5bmMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLnNlc3Npb24pIHsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5lbmQoKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKCkgeyB9KTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBhIHNlc3Npb24gd291bGQgYmUgc3VwcG9ydGVkIGZv
ciB0aGUgY3JlYXRpb24gb3B0aW9ucyBzcGVjaWZpZWQKKyAgICAgKiBAcGFyYW0gc2Vzc2lvbk1v
ZGUgc2Vzc2lvbiBtb2RlIHRvIGNoZWNrIGlmIHN1cHBvcnRlZCBlZy4gaW1tZXJzaXZlLXZyCisg
ICAgICogQHJldHVybnMgdHJ1ZSBpZiBzdXBwb3J0ZWQKKyAgICAgKi8KKyAgICBXZWJYUlNlc3Np
b25NYW5hZ2VyLnByb3RvdHlwZS5zdXBwb3J0c1Nlc3Npb25Bc3luYyA9IGZ1bmN0aW9uIChzZXNz
aW9uTW9kZSkgeworICAgICAgICBpZiAoIW5hdmlnYXRvci54ciB8fCAhbmF2aWdhdG9yLnhyLnN1
cHBvcnRzU2Vzc2lvbikgeworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxz
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbmF2aWdh
dG9yLnhyLnN1cHBvcnRzU2Vzc2lvbihzZXNzaW9uTW9kZSkudGhlbihmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTsKKyAgICAgICAgICAg
IH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLldhcm4oZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqIENvbnZlcnRz
IHRoZSByZW5kZXIgbGF5ZXIgb2YgeHJTZXNzaW9uIHRvIGEgcmVuZGVyIHRhcmdldAorICAgICAq
IEBwYXJhbSBzZXNzaW9uIHNlc3Npb24gdG8gY3JlYXRlIHJlbmRlciB0YXJnZXQgZm9yCisgICAg
ICogQHBhcmFtIHNjZW5lIHNjZW5lIHRoZSBuZXcgcmVuZGVyIHRhcmdldCBzaG91bGQgYmUgY3Jl
YXRlZCBmb3IKKyAgICAgKi8KKyAgICBXZWJYUlNlc3Npb25NYW5hZ2VyLl9DcmVhdGVSZW5kZXJU
YXJnZXRUZXh0dXJlRnJvbVNlc3Npb24gPSBmdW5jdGlvbiAoc2Vzc2lvbiwgc2NlbmUsIGJhc2VM
YXllcikgeworICAgICAgICBpZiAoIWJhc2VMYXllcikgeworICAgICAgICAgICAgdGhyb3cgIm5v
IGxheWVyIjsKKyAgICAgICAgfQorICAgICAgICAvLyBDcmVhdGUgaW50ZXJuYWwgdGV4dHVyZQor
ICAgICAgICB2YXIgaW50ZXJuYWxUZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfaW50
ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkludGVybmFsVGV4dHVy
ZSJdKHNjZW5lLmdldEVuZ2luZSgpLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09V
UkNFX1VOS05PV04sIHRydWUpOworICAgICAgICBpbnRlcm5hbFRleHR1cmUud2lkdGggPSBiYXNl
TGF5ZXIuZnJhbWVidWZmZXJXaWR0aDsKKyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLmhlaWdodCA9
IGJhc2VMYXllci5mcmFtZWJ1ZmZlckhlaWdodDsKKyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLl9m
cmFtZWJ1ZmZlciA9IGJhc2VMYXllci5mcmFtZWJ1ZmZlcjsKKyAgICAgICAgLy8gQ3JlYXRlIHJl
bmRlciB0YXJnZXQgdGV4dHVyZSBmcm9tIHRoZSBpbnRlcm5hbCB0ZXh0dXJlCisgICAgICAgIHZh
ciByZW5kZXJUYXJnZXRUZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFy
Z2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJSZW5kZXJUYXJnZXRUZXh0
dXJlIl0oIlhSIHJlbmRlclRhcmdldFRleHR1cmUiLCB7IHdpZHRoOiBpbnRlcm5hbFRleHR1cmUu
d2lkdGgsIGhlaWdodDogaW50ZXJuYWxUZXh0dXJlLmhlaWdodCB9LCBzY2VuZSwgdW5kZWZpbmVk
LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwg
dW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSk7CisgICAgICAgIHJlbmRlclRh
cmdldFRleHR1cmUuX3RleHR1cmUgPSBpbnRlcm5hbFRleHR1cmU7CisgICAgICAgIHJldHVybiBy
ZW5kZXJUYXJnZXRUZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2Yg
dGhlIHNlc3Npb24gbWFuYWdlcgorICAgICAqLworICAgIFdlYlhSU2Vzc2lvbk1hbmFnZXIucHJv
dG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMub25YUkZyYW1lT2Jz
ZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uWFJTZXNzaW9uRW5kZWQuY2xlYXIoKTsK
KyAgICB9OworICAgIHJldHVybiBXZWJYUlNlc3Npb25NYW5hZ2VyOworfSgpKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL2FyY1JvdGF0ZUNhbWVyYS50cyI6CisvKiEqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvYXJj
Um90YXRlQ2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBcmNSb3RhdGVDYW1lcmEgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBBcmNSb3RhdGVDYW1lcmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGVjb3JhdG9ycyAqLyAi
Li9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZl
Y3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9ub2RlICovICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01lc2hlcy9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX0JlaGF2aW9yc19DYW1lcmFzX2F1dG9Sb3RhdGlvbkJlaGF2
aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9CZWhhdmlvcnMvQ2FtZXJhcy9hdXRvUm90YXRpb25CZWhhdmlvciAqLyAiLi9CZWhhdmlv
cnMvQ2FtZXJhcy9hdXRvUm90YXRpb25CZWhhdmlvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9CZWhhdmlvcnNfQ2FtZXJhc19ib3VuY2luZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9CZWhhdmlvcnMvQ2Ft
ZXJhcy9ib3VuY2luZ0JlaGF2aW9yICovICIuL0JlaGF2aW9ycy9DYW1lcmFzL2JvdW5jaW5nQmVo
YXZpb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQmVoYXZpb3JzX0NhbWVyYXNf
ZnJhbWluZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9CZWhhdmlvcnMvQ2FtZXJhcy9mcmFtaW5nQmVoYXZpb3IgKi8gIi4v
QmVoYXZpb3JzL0NhbWVyYXMvZnJhbWluZ0JlaGF2aW9yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9jYW1lcmEgKi8gIi4vQ2FtZXJhcy9jYW1lcmEudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfdGFyZ2V0Q2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90YXJnZXRDYW1lcmEgKi8gIi4vQ2Ft
ZXJhcy90YXJnZXRDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJh
c19hcmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1lcmFJ
bnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvYXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGguY29uc3RhbnRzICovICIuL01hdGhzL21hdGguY29uc3RhbnRzLnRzIik7CisKKwor
CisKKworCisKKworCisKKworCisKK19ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
Ik5vZGUiXS5BZGROb2RlQ29uc3RydWN0b3IoIkFyY1JvdGF0ZUNhbWVyYSIsIGZ1bmN0aW9uIChu
YW1lLCBzY2VuZSkgeworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQXJjUm90
YXRlQ2FtZXJhKG5hbWUsIDAsIDAsIDEuMCwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKTsgfTsKK30pOworLyoq
CisgKiBUaGlzIHJlcHJlc2VudHMgYW4gb3JiaXRhbCB0eXBlIG9mIGNhbWVyYS4KKyAqCisgKiBU
aGlzIGNhbWVyYSBhbHdheXMgcG9pbnRzIHRvd2FyZHMgYSBnaXZlbiB0YXJnZXQgcG9zaXRpb24g
YW5kIGNhbiBiZSByb3RhdGVkIGFyb3VuZCB0aGF0IHRhcmdldCB3aXRoIHRoZSB0YXJnZXQgYXMg
dGhlIGNlbnRyZSBvZiByb3RhdGlvbi4gSXQgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCBjdXJzb3Jz
IGFuZCBtb3VzZSwgb3Igd2l0aCB0b3VjaCBldmVudHMuCisgKiBUaGluayBvZiB0aGlzIGNhbWVy
YSBhcyBvbmUgb3JiaXRpbmcgaXRzIHRhcmdldCBwb3NpdGlvbiwgb3IgbW9yZSBpbWFnaW5hdGl2
ZWx5IGFzIGEgc3B5IHNhdGVsbGl0ZSBvcmJpdGluZyB0aGUgZWFydGguIEl0cyBwb3NpdGlvbiBy
ZWxhdGl2ZSB0byB0aGUgdGFyZ2V0IChlYXJ0aCkgY2FuIGJlIHNldCBieSB0aHJlZSBwYXJhbWV0
ZXJzLCBhbHBoYSAocmFkaWFucykgdGhlIGxvbmdpdHVkaW5hbCByb3RhdGlvbiwgYmV0YSAocmFk
aWFucykgdGhlIGxhdGl0dWRpbmFsIHJvdGF0aW9uIGFuZCByYWRpdXMgdGhlIGRpc3RhbmNlIGZy
b20gdGhlIHRhcmdldCBwb3NpdGlvbi4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2JhYnlsb24xMDEvY2FtZXJhcyNhcmMtcm90YXRlLWNhbWVyYQorICovCit2YXIgQXJjUm90YXRl
Q2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEFyY1JvdGF0ZUNhbWVyYSwg
X3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgQXJjUm90YXRlQ2Ft
ZXJhIGluIGEgZ2l2ZW4gc2NlbmUKKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmVzIHRoZSBuYW1l
IG9mIHRoZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gYWxwaGEgRGVmaW5lcyB0aGUgY2FtZXJhIHJv
dGF0aW9uIGFsb25nIHRoZSBsb2dpdHVkaW5hbCBheGlzCisgICAgICogQHBhcmFtIGJldGEgRGVm
aW5lcyB0aGUgY2FtZXJhIHJvdGF0aW9uIGFsb25nIHRoZSBsYXRpdHVkaW5hbCBheGlzCisgICAg
ICogQHBhcmFtIHJhZGl1cyBEZWZpbmVzIHRoZSBjYW1lcmEgZGlzdGFuY2UgZnJvbSBpdHMgdGFy
Z2V0CisgICAgICogQHBhcmFtIHRhcmdldCBEZWZpbmVzIHRoZSBjYW1lcmEgdGFyZ2V0CisgICAg
ICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRoZSBjYW1lcmEgYmVsb25ncyB0bwor
ICAgICAqIEBwYXJhbSBzZXRBY3RpdmVPblNjZW5lSWZOb25lQWN0aXZlIERlZmluZXMgd2hldGVy
IHRoZSBjYW1lcmEgc2hvdWxkIGJlIG1hcmtlZCBhcyBhY3RpdmUgaWYgbm90IG90aGVyIGFjdGl2
ZSBjYW1lcmFzIGhhdmUgYmVlbiBkZWZpbmVkCisgICAgICovCisgICAgZnVuY3Rpb24gQXJjUm90
YXRlQ2FtZXJhKG5hbWUsIGFscGhhLCBiZXRhLCByYWRpdXMsIHRhcmdldCwgc2NlbmUsIHNldEFj
dGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUpIHsKKyAgICAgICAgaWYgKHNldEFjdGl2ZU9uU2NlbmVJ
Zk5vbmVBY3RpdmUgPT09IHZvaWQgMCkgeyBzZXRBY3RpdmVPblNjZW5lSWZOb25lQWN0aXZlID0g
dHJ1ZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlpl
cm8oKSwgc2NlbmUsIHNldEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUpIHx8IHRoaXM7CisgICAg
ICAgIF90aGlzLl91cFZlY3RvciA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVXAoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEN1
cnJlbnQgaW5lcnRpYSB2YWx1ZSBvbiB0aGUgbG9uZ2l0dWRpbmFsIGF4aXMuCisgICAgICAgICAq
IFRoZSBiaWdnZXIgdGhpcyBudW1iZXIgdGhlIGxvbmdlciBpdCB3aWxsIHRha2UgZm9yIHRoZSBj
YW1lcmEgdG8gc3RvcC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmluZXJ0aWFsQWxwaGFP
ZmZzZXQgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogQ3VycmVudCBpbmVydGlhIHZhbHVl
IG9uIHRoZSBsYXRpdHVkaW5hbCBheGlzLgorICAgICAgICAgKiBUaGUgYmlnZ2VyIHRoaXMgbnVt
YmVyIHRoZSBsb25nZXIgaXQgd2lsbCB0YWtlIGZvciB0aGUgY2FtZXJhIHRvIHN0b3AuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5pbmVydGlhbEJldGFPZmZzZXQgPSAwOworICAgICAgICAv
KioKKyAgICAgICAgICogQ3VycmVudCBpbmVydGlhIHZhbHVlIG9uIHRoZSByYWRpdXMgYXhpcy4K
KyAgICAgICAgICogVGhlIGJpZ2dlciB0aGlzIG51bWJlciB0aGUgbG9uZ2VyIGl0IHdpbGwgdGFr
ZSBmb3IgdGhlIGNhbWVyYSB0byBzdG9wLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaW5l
cnRpYWxSYWRpdXNPZmZzZXQgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogTWluaW11bSBh
bGxvd2VkIGFuZ2xlIG9uIHRoZSBsb25naXR1ZGluYWwgYXhpcy4KKyAgICAgICAgICogVGhpcyBj
YW4gaGVscCBsaW1pdGluZyBob3cgdGhlIENhbWVyYSBpcyBhYmxlIHRvIG1vdmUgaW4gdGhlIHNj
ZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubG93ZXJBbHBoYUxpbWl0ID0gbnVsbDsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIE1heGltdW0gYWxsb3dlZCBhbmdsZSBvbiB0aGUgbG9u
Z2l0dWRpbmFsIGF4aXMuCisgICAgICAgICAqIFRoaXMgY2FuIGhlbHAgbGltaXRpbmcgaG93IHRo
ZSBDYW1lcmEgaXMgYWJsZSB0byBtb3ZlIGluIHRoZSBzY2VuZS4KKyAgICAgICAgICovCisgICAg
ICAgIF90aGlzLnVwcGVyQWxwaGFMaW1pdCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBNaW5pbXVtIGFsbG93ZWQgYW5nbGUgb24gdGhlIGxhdGl0dWRpbmFsIGF4aXMuCisgICAgICAg
ICAqIFRoaXMgY2FuIGhlbHAgbGltaXRpbmcgaG93IHRoZSBDYW1lcmEgaXMgYWJsZSB0byBtb3Zl
IGluIHRoZSBzY2VuZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmxvd2VyQmV0YUxpbWl0
ID0gMC4wMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1heGltdW0gYWxsb3dlZCBhbmdsZSBv
biB0aGUgbGF0aXR1ZGluYWwgYXhpcy4KKyAgICAgICAgICogVGhpcyBjYW4gaGVscCBsaW1pdGlu
ZyBob3cgdGhlIENhbWVyYSBpcyBhYmxlIHRvIG1vdmUgaW4gdGhlIHNjZW5lLgorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMudXBwZXJCZXRhTGltaXQgPSBNYXRoLlBJIC0gMC4wMTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIE1pbmltdW0gYWxsb3dlZCBkaXN0YW5jZSBvZiB0aGUgY2FtZXJh
IHRvIHRoZSB0YXJnZXQgKFRoZSBjYW1lcmEgY2FuIG5vdCBnZXQgY2xvc2VyKS4KKyAgICAgICAg
ICogVGhpcyBjYW4gaGVscCBsaW1pdGluZyBob3cgdGhlIENhbWVyYSBpcyBhYmxlIHRvIG1vdmUg
aW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubG93ZXJSYWRpdXNMaW1p
dCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNYXhpbXVtIGFsbG93ZWQgZGlzdGFu
Y2Ugb2YgdGhlIGNhbWVyYSB0byB0aGUgdGFyZ2V0IChUaGUgY2FtZXJhIGNhbiBub3QgZ2V0IGZ1
cnRoZXIpLgorICAgICAgICAgKiBUaGlzIGNhbiBoZWxwIGxpbWl0aW5nIGhvdyB0aGUgQ2FtZXJh
IGlzIGFibGUgdG8gbW92ZSBpbiB0aGUgc2NlbmUuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy51cHBlclJhZGl1c0xpbWl0ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZXMgdGhlIGN1cnJlbnQgaW5lcnRpYSB2YWx1ZSB1c2VkIGR1cmluZyBwYW5uaW5nIG9mIHRoZSBj
YW1lcmEgYWxvbmcgdGhlIFggYXhpcy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmluZXJ0
aWFsUGFubmluZ1ggPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgY3Vy
cmVudCBpbmVydGlhIHZhbHVlIHVzZWQgZHVyaW5nIHBhbm5pbmcgb2YgdGhlIGNhbWVyYSBhbG9u
ZyB0aGUgWSBheGlzLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaW5lcnRpYWxQYW5uaW5n
WSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBkaXN0YW5jZSB1c2Vk
IHRvIGNvbnNpZGVyIHRoZSBjYW1lcmEgaW4gcGFuIG1vZGUgdnMgcGluY2gvem9vbS4KKyAgICAg
ICAgICogQmFzaWNhbGx5IGlmIHlvdXIgZmluZ2VycyBtb3ZlcyBhd2F5IGZyb20gbW9yZSB0aGFu
IHRoaXMgZGlzdGFuY2UgeW91IHdpbGwgYmUgY29uc2lkZXJlZAorICAgICAgICAgKiBpbiBwaW5j
aCBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucGluY2hUb1Bhbk1heERpc3RhbmNl
ID0gMjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBtYXhpbXVtIGRpc3Rh
bmNlIHRoZSBjYW1lcmEgY2FuIHBhbi4KKyAgICAgICAgICogVGhpcyBjb3VsZCBoZWxwIGtlZXBp
bmcgdGhlIGNhbW1lcmEgYWx3YXlzIGluIHlvdXIgc2NlbmUuCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5wYW5uaW5nRGlzdGFuY2VMaW1pdCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBEZWZpbmVzIHRoZSB0YXJnZXQgb2YgdGhlIGNhbWVyYSBiZWZvcmUgcGFuaW5nLgorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMucGFubmluZ09yaWdpblRhcmdldCA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgdmFsdWUgb2YgdGhlIGluZXJ0aWEg
dXNlZCBkdXJpbmcgcGFubmluZy4KKyAgICAgICAgICogMCB3b3VsZCBtZWFuIHN0b3AgaW5lcnRp
YSBhbmQgb25lIHdvdWxkIG1lYW4gbm8gZGVjZWxsZXJhdGlvbiBhdCBhbGwuCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5wYW5uaW5nSW5lcnRpYSA9IDAuOTsKKyAgICAgICAgLy8tLSBlbmQg
cHJvcGVydGllcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgaW5wdXRzCisgICAgICAg
IC8qKgorICAgICAgICAgKiBEZWZpbmVzIGhvdyBtdWNoIHRoZSByYWRpdXMgc2hvdWxkIGJlIHNj
YWxlZCB3aGlsZSB6b21taW5nIG9uIGEgcGFydGljdWxhciBtZXNoICh0aHJvdWdoIHRoZSB6b29t
T24gZnVuY3Rpb24pCisgICAgICAgICAqLworICAgICAgICBfdGhpcy56b29tT25GYWN0b3IgPSAx
OworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBhIHNjcmVlbiBvZmZzZXQgZm9yIHRo
ZSBjYW1lcmEgcG9zaXRpb24uCisgICAgICAgICAqLworICAgICAgICBfdGhpcy50YXJnZXRTY3Jl
ZW5PZmZzZXQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVjdG9yMiJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFsbG93cyB0aGUg
Y2FtZXJhIHRvIGJlIGNvbXBsZXRlbHkgcmV2ZXJzZWQuCisgICAgICAgICAqIElmIGZhbHNlIHRo
ZSBjYW1lcmEgY2FuIG5vdCBhcnJpdmUgdXBzaWRlIGRvd24uCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5hbGxvd1Vwc2lkZURvd24gPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICog
RGVmaW5lIGlmIGRvdWJsZSB0YXAvY2xpY2sgaXMgdXNlZCB0byByZXN0b3JlIHRoZSBwcmV2aW91
c2x5IHNhdmVkIHN0YXRlIG9mIHRoZSBjYW1lcmEuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy51c2VJbnB1dFRvUmVzdG9yZVN0YXRlID0gdHJ1ZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICAgICAgX3RoaXMuX3ZpZXdNYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdKCk7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBEZWZpbmVzIHRoZSBhbGxvd2VkIHBhbm5pbmcgYXhpcy4KKyAgICAgICAgICovCisgICAg
ICAgIF90aGlzLnBhbm5pbmdBeGlzID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMSwgMSwgMCk7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBPYnNlcnZhYmxlIHRyaWdnZXJlZCB3aGVuIHRoZSBtZXNoIHRhcmdldCBoYXMgYmVl
biBjaGFuZ2VkIG9uIHRoZSBjYW1lcmEuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vbk1l
c2hUYXJnZXRDaGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAg
ICAgICogRGVmaW5lcyB3aGV0aGVyIHRoZSBjYW1lcmEgc2hvdWxkIGNoZWNrIGNvbGxpc2lvbiB3
aXRoIHRoZSBvYmplY3RzIG9oIHRoZSBzY2VuZS4KKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9jYW1lcmFzLF9tZXNoX2NvbGxpc2lvbnNfYW5kX2dy
YXZpdHkjaG93LWNhbi1pLWRvLXRoaXMKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmNoZWNr
Q29sbGlzaW9ucyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUg
Y29sbGlzaW9uIHJhZGl1cyBvZiB0aGUgY2FtZXJhLgorICAgICAgICAgKiBUaGlzIHNpbXVsYXRl
cyBhIHNwaGVyZSBhcm91bmQgdGhlIGNhbWVyYS4KKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9jYW1lcmFzLF9tZXNoX2NvbGxpc2lvbnNfYW5kX2dy
YXZpdHkjYXJjcm90YXRlY2FtZXJhCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5jb2xsaXNp
b25SYWRpdXMgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlY3RvcjMiXSgwLjUsIDAuNSwgMC41KTsKKyAgICAgICAgX3RoaXMuX3ByZXZpb3Vz
UG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgX3RoaXMuX2NvbGxpc2lvblZlbG9jaXR5ID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMi
XS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9uZXdQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAg
ICBfdGhpcy5fY29tcHV0YXRpb25WZWN0b3IgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgX3RoaXMuX29u
Q29sbGlzaW9uUG9zaXRpb25DaGFuZ2UgPSBmdW5jdGlvbiAoY29sbGlzaW9uSWQsIG5ld1Bvc2l0
aW9uLCBjb2xsaWRlZE1lc2gpIHsKKyAgICAgICAgICAgIGlmIChjb2xsaWRlZE1lc2ggPT09IHZv
aWQgMCkgeyBjb2xsaWRlZE1lc2ggPSBudWxsOyB9CisgICAgICAgICAgICBpZiAoIWNvbGxpZGVk
TWVzaCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9wcmV2aW91c1Bvc2l0aW9uLmNvcHlGcm9t
KF90aGlzLl9wb3NpdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBfdGhpcy5zZXRQb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgICAg
ICAgICAgaWYgKF90aGlzLm9uQ29sbGlkZSkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5v
bkNvbGxpZGUoY29sbGlkZWRNZXNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAvLyBSZWNvbXB1dGUgYmVjYXVzZSBvZiBjb25zdHJhaW50cworICAgICAg
ICAgICAgdmFyIGNvc2EgPSBNYXRoLmNvcyhfdGhpcy5hbHBoYSk7CisgICAgICAgICAgICB2YXIg
c2luYSA9IE1hdGguc2luKF90aGlzLmFscGhhKTsKKyAgICAgICAgICAgIHZhciBjb3NiID0gTWF0
aC5jb3MoX3RoaXMuYmV0YSk7CisgICAgICAgICAgICB2YXIgc2luYiA9IE1hdGguc2luKF90aGlz
LmJldGEpOworICAgICAgICAgICAgaWYgKHNpbmIgPT09IDApIHsKKyAgICAgICAgICAgICAgICBz
aW5iID0gMC4wMDAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHRhcmdldCA9IF90
aGlzLl9nZXRUYXJnZXRQb3NpdGlvbigpOworICAgICAgICAgICAgX3RoaXMuX2NvbXB1dGF0aW9u
VmVjdG9yLmNvcHlGcm9tRmxvYXRzKF90aGlzLnJhZGl1cyAqIGNvc2EgKiBzaW5iLCBfdGhpcy5y
YWRpdXMgKiBjb3NiLCBfdGhpcy5yYWRpdXMgKiBzaW5hICogc2luYik7CisgICAgICAgICAgICB0
YXJnZXQuYWRkVG9SZWYoX3RoaXMuX2NvbXB1dGF0aW9uVmVjdG9yLCBfdGhpcy5fbmV3UG9zaXRp
b24pOworICAgICAgICAgICAgX3RoaXMuX3Bvc2l0aW9uLmNvcHlGcm9tKF90aGlzLl9uZXdQb3Np
dGlvbik7CisgICAgICAgICAgICB2YXIgdXAgPSBfdGhpcy51cFZlY3RvcjsKKyAgICAgICAgICAg
IGlmIChfdGhpcy5hbGxvd1Vwc2lkZURvd24gJiYgX3RoaXMuYmV0YSA8IDApIHsKKyAgICAgICAg
ICAgICAgICB1cCA9IHVwLmNsb25lKCk7CisgICAgICAgICAgICAgICAgdXAgPSB1cC5uZWdhdGUo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl9jb21wdXRlVmlld01hdHJpeChf
dGhpcy5fcG9zaXRpb24sIHRhcmdldCwgdXApOworICAgICAgICAgICAgX3RoaXMuX3ZpZXdNYXRy
aXguYWRkQXRJbmRleCgxMiwgX3RoaXMudGFyZ2V0U2NyZWVuT2Zmc2V0LngpOworICAgICAgICAg
ICAgX3RoaXMuX3ZpZXdNYXRyaXguYWRkQXRJbmRleCgxMywgX3RoaXMudGFyZ2V0U2NyZWVuT2Zm
c2V0LnkpOworICAgICAgICAgICAgX3RoaXMuX2NvbGxpc2lvblRyaWdnZXJlZCA9IGZhbHNlOwor
ICAgICAgICB9OworICAgICAgICBfdGhpcy5fdGFyZ2V0ID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIGlm
ICh0YXJnZXQpIHsKKyAgICAgICAgICAgIF90aGlzLnNldFRhcmdldCh0YXJnZXQpOworICAgICAg
ICB9CisgICAgICAgIF90aGlzLmFscGhhID0gYWxwaGE7CisgICAgICAgIF90aGlzLmJldGEgPSBi
ZXRhOworICAgICAgICBfdGhpcy5yYWRpdXMgPSByYWRpdXM7CisgICAgICAgIF90aGlzLmdldFZp
ZXdNYXRyaXgoKTsKKyAgICAgICAgX3RoaXMuaW5wdXRzID0gbmV3IF9DYW1lcmFzX2FyY1JvdGF0
ZUNhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkFyY1Jv
dGF0ZUNhbWVyYUlucHV0c01hbmFnZXIiXShfdGhpcyk7CisgICAgICAgIF90aGlzLmlucHV0cy5h
ZGRLZXlib2FyZCgpLmFkZE1vdXNlV2hlZWwoKS5hZGRQb2ludGVycygpOworICAgICAgICByZXR1
cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcmNSb3RhdGVDYW1l
cmEucHJvdG90eXBlLCAidGFyZ2V0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5l
cyB0aGUgdGFyZ2V0IHBvaW50IG9mIHRoZSBjYW1lcmEuCisgICAgICAgICAqIFRoZSBjYW1lcmEg
bG9va3MgdG93YXJkcyBpdCBmb3JtIHRoZSByYWRpdXMgZGlzdGFuY2UuCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90YXJn
ZXQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICB0aGlzLnNldFRhcmdldCh2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAicG9zaXRpb24iLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGN1cnJlbnQgbG9jYWwgcG9zaXRp
b24gb2YgdGhlIGNhbWVyYSBpbiB0aGUgc2NlbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uOworICAgICAg
ICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQb3NpdGlvbikgeworICAgICAgICAgICAg
dGhpcy5zZXRQb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAidXBWZWN0b3Ii
LCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3VwVmVjdG9yOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHZlY3Rv
ciB0aGUgY2FtZXJhIHNob3VsZCBjb25zaWRlciBhcyB1cC4gKGRlZmF1bHQgaXMgVmVjdG9yMygw
LCAxLCAwKSBhcyByZXR1cm5lZCBieSBWZWN0b3IzLlVwKCkpCisgICAgICAgICAqIFNldHRpbmcg
dGhpcyB3aWxsIGNvcHkgdGhlIGdpdmVuIHZlY3RvciB0byB0aGUgY2FtZXJhJ3MgdXBWZWN0b3Is
IGFuZCBzZXQgcm90YXRpb24gbWF0cmljZXMgdG8gYW5kIGZyb20gWSB1cC4KKyAgICAgICAgICog
RE8gTk9UIHNldCB0aGUgdXAgdmVjdG9yIHVzaW5nIGNvcHlGcm9tIG9yIGNvcHlGcm9tRmxvYXRz
LCBhcyB0aGlzIGJ5cGFzc2VzIHNldHRpbmcgdGhlIGFib3ZlIG1hdHJpY2VzLgorICAgICAgICAg
Ki8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmVjKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMu
X3VwVG9ZTWF0cml4KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fWVRvVXBNYXRyaXggPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJd
KCk7CisgICAgICAgICAgICAgICAgdGhpcy5fdXBUb1lNYXRyaXggPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdKCk7CisgICAgICAg
ICAgICAgICAgdGhpcy5fdXBWZWN0b3IgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHZlYy5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgIHRoaXMuX3VwVmVjdG9yLmNvcHlG
cm9tKHZlYyk7CisgICAgICAgICAgICB0aGlzLnNldE1hdFVwKCk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIFktdXAgdG8gY2FtZXJhIHVwLXZlY3RvciByb3Rh
dGlvbiBtYXRyaXgsIGFuZCB0aGUgdXAtdmVjdG9yIHRvIFktdXAgcm90YXRpb24gbWF0cml4Lgor
ICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUuc2V0TWF0VXAgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIC8vIGZyb20geS11cCB0byBjdXN0b20tdXAgKHVzZWQgaW4gX2dldFZp
ZXdNYXRyaXgpCisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJNYXRyaXgiXS5Sb3RhdGlvbkFsaWduVG9SZWYoX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5VcFJlYWRPbmx5LCB0aGlz
Ll91cFZlY3RvciwgdGhpcy5fWVRvVXBNYXRyaXgpOworICAgICAgICAvLyBmcm9tIGN1c3RvbS11
cCB0byB5LXVwICh1c2VkIGluIHJlYnVpbGRBbmdsZXNBbmRSYWRpdXMpCisgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5Sb3Rh
dGlvbkFsaWduVG9SZWYodGhpcy5fdXBWZWN0b3IsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVXBSZWFkT25seSwgdGhpcy5fdXBUb1lN
YXRyaXgpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFyY1JvdGF0ZUNhbWVy
YS5wcm90b3R5cGUsICJhbmd1bGFyU2Vuc2liaWxpdHlYIiwgeworICAgICAgICAvLy0tIGJlZ2lu
IHByb3BlcnRpZXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIGlucHV0cworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyBvciBTZXQgdGhlIHBvaW50ZXIgYW5ndWxhciBzZW5zaWJp
bGl0eSAgYWxvbmcgdGhlIFggYXhpcyBvciBob3cgZmFzdCBpcyB0aGUgY2FtZXJhIHJvdGF0aW5n
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2
YXIgcG9pbnRlcnMgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsicG9pbnRlcnMiXTsKKyAgICAgICAg
ICAgIGlmIChwb2ludGVycykgeworICAgICAgICAgICAgICAgIHJldHVybiBwb2ludGVycy5hbmd1
bGFyU2Vuc2liaWxpdHlYOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2
YXIgcG9pbnRlcnMgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsicG9pbnRlcnMiXTsKKyAgICAgICAg
ICAgIGlmIChwb2ludGVycykgeworICAgICAgICAgICAgICAgIHBvaW50ZXJzLmFuZ3VsYXJTZW5z
aWJpbGl0eVggPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJhbmd1bGFy
U2Vuc2liaWxpdHlZIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBTZXQgdGhl
IHBvaW50ZXIgYW5ndWxhciBzZW5zaWJpbGl0eSBhbG9uZyB0aGUgWSBheGlzIG9yIGhvdyBmYXN0
IGlzIHRoZSBjYW1lcmEgcm90YXRpbmcuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMuaW5wdXRzLmF0dGFjaGVk
WyJwb2ludGVycyJdOworICAgICAgICAgICAgaWYgKHBvaW50ZXJzKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHBvaW50ZXJzLmFuZ3VsYXJTZW5zaWJpbGl0eVk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMuaW5wdXRzLmF0dGFjaGVk
WyJwb2ludGVycyJdOworICAgICAgICAgICAgaWYgKHBvaW50ZXJzKSB7CisgICAgICAgICAgICAg
ICAgcG9pbnRlcnMuYW5ndWxhclNlbnNpYmlsaXR5WSA9IHZhbHVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJjUm90YXRlQ2Ft
ZXJhLnByb3RvdHlwZSwgInBpbmNoUHJlY2lzaW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyBvciBTZXQgdGhlIHBvaW50ZXIgcGluY2ggcHJlY2lzaW9uIG9yIGhvdyBmYXN0IGlz
IHRoZSBjYW1lcmEgem9vbWluZy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIHBvaW50ZXJzID0gdGhpcy5pbnB1dHMuYXR0YWNoZWRbInBv
aW50ZXJzIl07CisgICAgICAgICAgICBpZiAocG9pbnRlcnMpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcG9pbnRlcnMucGluY2hQcmVjaXNpb247CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJwb2ludGVy
cyJdOworICAgICAgICAgICAgaWYgKHBvaW50ZXJzKSB7CisgICAgICAgICAgICAgICAgcG9pbnRl
cnMucGluY2hQcmVjaXNpb24gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUs
ICJwaW5jaERlbHRhUGVyY2VudGFnZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
b3IgU2V0IHRoZSBwb2ludGVyIHBpbmNoIGRlbHRhIHBlcmNlbnRhZ2Ugb3IgaG93IGZhc3QgaXMg
dGhlIGNhbWVyYSB6b29taW5nLgorICAgICAgICAgKiBJdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBv
ZiBwaW5jaERlbHRhUHJlY2lzaW9uIGlmIGRpZmZlcmVudCBmcm9tIDAuCisgICAgICAgICAqIEl0
IGRlZmluZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgY3VycmVudCBjYW1lcmEucmFkaXVzIHRvIHVzZSBh
cyBkZWx0YSB3aGVuIHBpbmNoIHpvb20gaXMgdXNlZC4KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHBvaW50ZXJzID0gdGhpcy5pbnB1dHMu
YXR0YWNoZWRbInBvaW50ZXJzIl07CisgICAgICAgICAgICBpZiAocG9pbnRlcnMpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcG9pbnRlcnMucGluY2hEZWx0YVBlcmNlbnRhZ2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMuaW5wdXRz
LmF0dGFjaGVkWyJwb2ludGVycyJdOworICAgICAgICAgICAgaWYgKHBvaW50ZXJzKSB7CisgICAg
ICAgICAgICAgICAgcG9pbnRlcnMucGluY2hEZWx0YVBlcmNlbnRhZ2UgPSB2YWx1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFy
Y1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJwYW5uaW5nU2Vuc2liaWxpdHkiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIG9yIFNldCB0aGUgcG9pbnRlciBwYW5uaW5nIHNlbnNpYmls
aXR5IG9yIGhvdyBmYXN0IGlzIHRoZSBjYW1lcmEgbW92aW5nLgorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgcG9pbnRlcnMgPSB0aGlzLmlu
cHV0cy5hdHRhY2hlZFsicG9pbnRlcnMiXTsKKyAgICAgICAgICAgIGlmIChwb2ludGVycykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBwb2ludGVycy5wYW5uaW5nU2Vuc2liaWxpdHk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBwb2ludGVycyA9IHRoaXMuaW5w
dXRzLmF0dGFjaGVkWyJwb2ludGVycyJdOworICAgICAgICAgICAgaWYgKHBvaW50ZXJzKSB7Cisg
ICAgICAgICAgICAgICAgcG9pbnRlcnMucGFubmluZ1NlbnNpYmlsaXR5ID0gdmFsdWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShB
cmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAia2V5c1VwIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBvciBTZXQgdGhlIGxpc3Qgb2Yga2V5Ym9hcmQga2V5cyB1c2VkIHRvIGNvbnRy
b2wgYmV0YSBhbmdsZSBpbiBhIHBvc2l0aXZlIGRpcmVjdGlvbi4KKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5p
bnB1dHMuYXR0YWNoZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4ga2V5Ym9hcmQua2V5c1VwOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5pbnB1dHMuYXR0YWNo
ZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsKKyAgICAgICAgICAg
ICAgICBrZXlib2FyZC5rZXlzVXAgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5
cGUsICJrZXlzRG93biIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3IgU2V0IHRo
ZSBsaXN0IG9mIGtleWJvYXJkIGtleXMgdXNlZCB0byBjb250cm9sIGJldGEgYW5nbGUgaW4gYSBu
ZWdhdGl2ZSBkaXJlY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJrZXli
b2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJkKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGtleWJvYXJkLmtleXNEb3duOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IFtdOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5pbnB1dHMuYXR0YWNoZWRbImtleWJvYXJkIl07Cisg
ICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsKKyAgICAgICAgICAgICAgICBrZXlib2FyZC5rZXlz
RG93biA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZSwgImtleXNMZWZ0Iiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBTZXQgdGhlIGxpc3Qgb2Yga2V5Ym9h
cmQga2V5cyB1c2VkIHRvIGNvbnRyb2wgYWxwaGEgYW5nbGUgaW4gYSBuZWdhdGl2ZSBkaXJlY3Rp
b24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHZhciBrZXlib2FyZCA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAg
ICAgICAgaWYgKGtleWJvYXJkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtleWJvYXJkLmtl
eXNMZWZ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIGtleWJv
YXJkID0gdGhpcy5pbnB1dHMuYXR0YWNoZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAo
a2V5Ym9hcmQpIHsKKyAgICAgICAgICAgICAgICBrZXlib2FyZC5rZXlzTGVmdCA9IHZhbHVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZSwgImtleXNSaWdodCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgb3IgU2V0IHRoZSBsaXN0IG9mIGtleWJvYXJkIGtleXMgdXNlZCB0
byBjb250cm9sIGFscGhhIGFuZ2xlIGluIGEgcG9zaXRpdmUgZGlyZWN0aW9uLgorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQg
PSB0aGlzLmlucHV0cy5hdHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlmIChrZXli
b2FyZCkgeworICAgICAgICAgICAgICAgIHJldHVybiBrZXlib2FyZC5rZXlzUmlnaHQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAgIH0sCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQgPSB0aGlzLmlu
cHV0cy5hdHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZCkgewor
ICAgICAgICAgICAgICAgIGtleWJvYXJkLmtleXNSaWdodCA9IHZhbHVlOworICAgICAgICAgICAg
fQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJjUm90YXRl
Q2FtZXJhLnByb3RvdHlwZSwgIndoZWVsUHJlY2lzaW9uIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBvciBTZXQgdGhlIG1vdXNlIHdoZWVsIHByZWNpc2lvbiBvciBob3cgZmFzdCBp
cyB0aGUgY2FtZXJhIHpvb21pbmcuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHZhciBtb3VzZXdoZWVsID0gdGhpcy5pbnB1dHMuYXR0YWNoZWRb
Im1vdXNld2hlZWwiXTsKKyAgICAgICAgICAgIGlmIChtb3VzZXdoZWVsKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1vdXNld2hlZWwud2hlZWxQcmVjaXNpb247CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBtb3VzZXdoZWVsID0gdGhpcy5pbnB1dHMuYXR0YWNo
ZWRbIm1vdXNld2hlZWwiXTsKKyAgICAgICAgICAgIGlmIChtb3VzZXdoZWVsKSB7CisgICAgICAg
ICAgICAgICAgbW91c2V3aGVlbC53aGVlbFByZWNpc2lvbiA9IHZhbHVlOworICAgICAgICAgICAg
fQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJjUm90YXRl
Q2FtZXJhLnByb3RvdHlwZSwgIndoZWVsRGVsdGFQZXJjZW50YWdlIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBvciBTZXQgdGhlIG1vdXNlIHdoZWVsIGRlbHRhIHBlcmNlbnRhZ2Ug
b3IgaG93IGZhc3QgaXMgdGhlIGNhbWVyYSB6b29taW5nLgorICAgICAgICAgKiBJdCB3aWxsIGJl
IHVzZWQgaW5zdGVhZCBvZiBwaW5jaERlbHRhUHJlY2lzaW9uIGlmIGRpZmZlcmVudCBmcm9tIDAu
CisgICAgICAgICAqIEl0IGRlZmluZXMgdGhlIHBlcmNlbnRhZ2Ugb2YgY3VycmVudCBjYW1lcmEu
cmFkaXVzIHRvIHVzZSBhcyBkZWx0YSB3aGVuIHBpbmNoIHpvb20gaXMgdXNlZC4KKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG1vdXNld2hl
ZWwgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsibW91c2V3aGVlbCJdOworICAgICAgICAgICAgaWYg
KG1vdXNld2hlZWwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbW91c2V3aGVlbC53aGVlbERl
bHRhUGVyY2VudGFnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFy
IG1vdXNld2hlZWwgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsibW91c2V3aGVlbCJdOworICAgICAg
ICAgICAgaWYgKG1vdXNld2hlZWwpIHsKKyAgICAgICAgICAgICAgICBtb3VzZXdoZWVsLndoZWVs
RGVsdGFQZXJjZW50YWdlID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAi
Ym91bmNpbmdCZWhhdmlvciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGJv
dW5jaW5nIGJlaGF2aW9yIG9mIHRoZSBjYW1lcmEgaWYgaXQgaGFzIGJlZW4gZW5hYmxlZC4KKyAg
ICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2NhbWVyYV9iZWhh
dmlvcnMjYm91bmNpbmctYmVoYXZpb3IKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5jaW5nQmVoYXZpb3I7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcmNSb3RhdGVDYW1lcmEu
cHJvdG90eXBlLCAidXNlQm91bmNpbmdCZWhhdmlvciIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERlZmluZXMgaWYgdGhlIGJvdW5jaW5nIGJlaGF2aW9yIG9mIHRoZSBjYW1lcmEgaXMgZW5h
YmxlZCBvbiB0aGUgY2FtZXJhLgorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vY2FtZXJhX2JlaGF2aW9ycyNib3VuY2luZy1iZWhhdmlvcgorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
Ym91bmNpbmdCZWhhdmlvciAhPSBudWxsOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLnVzZUJvdW5jaW5n
QmVoYXZpb3IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ib3VuY2luZ0JlaGF2
aW9yID0gbmV3IF9CZWhhdmlvcnNfQ2FtZXJhc19ib3VuY2luZ0JlaGF2aW9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIkJvdW5jaW5nQmVoYXZpb3IiXSgpOworICAgICAgICAgICAgICAg
IHRoaXMuYWRkQmVoYXZpb3IodGhpcy5fYm91bmNpbmdCZWhhdmlvcik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9ib3VuY2luZ0JlaGF2aW9yKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5yZW1vdmVCZWhhdmlvcih0aGlzLl9ib3VuY2luZ0JlaGF2aW9yKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9ib3VuY2luZ0JlaGF2aW9yID0gbnVsbDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFyY1JvdGF0
ZUNhbWVyYS5wcm90b3R5cGUsICJmcmFtaW5nQmVoYXZpb3IiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSBmcmFtaW5nIGJlaGF2aW9yIG9mIHRoZSBjYW1lcmEgaWYgaXQgaGFz
IGJlZW4gZW5hYmxlZC4KKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL2NhbWVyYV9iZWhhdmlvcnMjZnJhbWluZy1iZWhhdmlvcgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWlu
Z0JlaGF2aW9yOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
QXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZSwgInVzZUZyYW1pbmdCZWhhdmlvciIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaWYgdGhlIGZyYW1pbmcgYmVoYXZpb3Igb2YgdGhl
IGNhbWVyYSBpcyBlbmFibGVkIG9uIHRoZSBjYW1lcmEuCisgICAgICAgICAqIEBzZWUgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jYW1lcmFfYmVoYXZpb3JzI2ZyYW1pbmctYmVoYXZp
b3IKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2ZyYW1pbmdCZWhhdmlvciAhPSBudWxsOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlz
LnVzZUZyYW1pbmdCZWhhdmlvcikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2Zy
YW1pbmdCZWhhdmlvciA9IG5ldyBfQmVoYXZpb3JzX0NhbWVyYXNfZnJhbWluZ0JlaGF2aW9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkZyYW1pbmdCZWhhdmlvciJdKCk7CisgICAgICAg
ICAgICAgICAgdGhpcy5hZGRCZWhhdmlvcih0aGlzLl9mcmFtaW5nQmVoYXZpb3IpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fZnJhbWluZ0JlaGF2aW9yKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVCZWhhdmlvcih0aGlzLl9mcmFtaW5nQmVoYXZpb3Ip
OworICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1pbmdCZWhhdmlvciA9IG51bGw7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcmNS
b3RhdGVDYW1lcmEucHJvdG90eXBlLCAiYXV0b1JvdGF0aW9uQmVoYXZpb3IiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBhdXRvIHJvdGF0aW9uIGJlaGF2aW9yIG9mIHRoZSBj
YW1lcmEgaWYgaXQgaGFzIGJlZW4gZW5hYmxlZC4KKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vaG93X3RvL2NhbWVyYV9iZWhhdmlvcnMjYXV0b3JvdGF0aW9uLWJlaGF2
aW9yCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9hdXRvUm90YXRpb25CZWhhdmlvcjsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJ1c2VB
dXRvUm90YXRpb25CZWhhdmlvciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMg
aWYgdGhlIGF1dG8gcm90YXRpb24gYmVoYXZpb3Igb2YgdGhlIGNhbWVyYSBpcyBlbmFibGVkIG9u
IHRoZSBjYW1lcmEuCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hv
d190by9jYW1lcmFfYmVoYXZpb3JzI2F1dG9yb3RhdGlvbi1iZWhhdmlvcgorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXV0
b1JvdGF0aW9uQmVoYXZpb3IgIT0gbnVsbDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy51c2VBdXRvUm90
YXRpb25CZWhhdmlvcikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9Sb3Rh
dGlvbkJlaGF2aW9yID0gbmV3IF9CZWhhdmlvcnNfQ2FtZXJhc19hdXRvUm90YXRpb25CZWhhdmlv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJBdXRvUm90YXRpb25CZWhhdmlvciJdKCk7
CisgICAgICAgICAgICAgICAgdGhpcy5hZGRCZWhhdmlvcih0aGlzLl9hdXRvUm90YXRpb25CZWhh
dmlvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9hdXRvUm90
YXRpb25CZWhhdmlvcikgeworICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQmVoYXZpb3IodGhp
cy5fYXV0b1JvdGF0aW9uQmVoYXZpb3IpOworICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9Sb3Rh
dGlvbkJlaGF2aW9yID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgLy8gQ2FjaGUKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90
b3R5cGUuX2luaXRDYWNoZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlw
ZS5faW5pdENhY2hlLmNhbGwodGhpcyk7CisgICAgICAgIHRoaXMuX2NhY2hlLl90YXJnZXQgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXShOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVF
KTsKKyAgICAgICAgdGhpcy5fY2FjaGUuYWxwaGEgPSB1bmRlZmluZWQ7CisgICAgICAgIHRoaXMu
X2NhY2hlLmJldGEgPSB1bmRlZmluZWQ7CisgICAgICAgIHRoaXMuX2NhY2hlLnJhZGl1cyA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgdGhpcy5fY2FjaGUudGFyZ2V0U2NyZWVuT2Zmc2V0ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjIiXS5aZXJv
KCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90
b3R5cGUuX3VwZGF0ZUNhY2hlID0gZnVuY3Rpb24gKGlnbm9yZVBhcmVudENsYXNzKSB7CisgICAg
ICAgIGlmICghaWdub3JlUGFyZW50Q2xhc3MpIHsKKyAgICAgICAgICAgIF9zdXBlci5wcm90b3R5
cGUuX3VwZGF0ZUNhY2hlLmNhbGwodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2Fj
aGUuX3RhcmdldC5jb3B5RnJvbSh0aGlzLl9nZXRUYXJnZXRQb3NpdGlvbigpKTsKKyAgICAgICAg
dGhpcy5fY2FjaGUuYWxwaGEgPSB0aGlzLmFscGhhOworICAgICAgICB0aGlzLl9jYWNoZS5iZXRh
ID0gdGhpcy5iZXRhOworICAgICAgICB0aGlzLl9jYWNoZS5yYWRpdXMgPSB0aGlzLnJhZGl1czsK
KyAgICAgICAgdGhpcy5fY2FjaGUudGFyZ2V0U2NyZWVuT2Zmc2V0LmNvcHlGcm9tKHRoaXMudGFy
Z2V0U2NyZWVuT2Zmc2V0KTsKKyAgICB9OworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUu
X2dldFRhcmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fdGFy
Z2V0SG9zdCAmJiB0aGlzLl90YXJnZXRIb3N0LmdldEFic29sdXRlUG9zaXRpb24pIHsKKyAgICAg
ICAgICAgIHZhciBwb3MgPSB0aGlzLl90YXJnZXRIb3N0LmFic29sdXRlUG9zaXRpb247CisgICAg
ICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Qm91bmRpbmdDZW50ZXIpIHsKKyAgICAgICAgICAgICAg
ICBwb3MuYWRkVG9SZWYodGhpcy5fdGFyZ2V0Qm91bmRpbmdDZW50ZXIsIHRoaXMuX3RhcmdldCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll90YXJnZXQuY29weUZyb20ocG9zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB2YXIgbG9ja2VkVGFyZ2V0UG9zaXRpb24gPSB0aGlzLl9nZXRMb2NrZWRUYXJnZXRQb3NpdGlv
bigpOworICAgICAgICBpZiAobG9ja2VkVGFyZ2V0UG9zaXRpb24pIHsKKyAgICAgICAgICAgIHJl
dHVybiBsb2NrZWRUYXJnZXRQb3NpdGlvbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp
cy5fdGFyZ2V0OworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcmVzIHRoZSBjdXJyZW50IHN0
YXRlIG9mIHRoZSBjYW1lcmEgKGFscGhhLCBiZXRhLCByYWRpdXMgYW5kIHRhcmdldCkKKyAgICAg
KiBAcmV0dXJucyB0aGUgY2FtZXJhIGl0c2VsZgorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVy
YS5wcm90b3R5cGUuc3RvcmVTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fc3Rv
cmVkQWxwaGEgPSB0aGlzLmFscGhhOworICAgICAgICB0aGlzLl9zdG9yZWRCZXRhID0gdGhpcy5i
ZXRhOworICAgICAgICB0aGlzLl9zdG9yZWRSYWRpdXMgPSB0aGlzLnJhZGl1czsKKyAgICAgICAg
dGhpcy5fc3RvcmVkVGFyZ2V0ID0gdGhpcy5fZ2V0VGFyZ2V0UG9zaXRpb24oKS5jbG9uZSgpOwor
ICAgICAgICB0aGlzLl9zdG9yZWRUYXJnZXRTY3JlZW5PZmZzZXQgPSB0aGlzLnRhcmdldFNjcmVl
bk9mZnNldC5jbG9uZSgpOworICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5zdG9yZVN0
YXRlLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICog
UmVzdG9yZWQgY2FtZXJhIHN0YXRlLiBZb3UgbXVzdCBjYWxsIHN0b3JlU3RhdGUoKSBmaXJzdAor
ICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUuX3Jlc3RvcmVTdGF0ZVZhbHVl
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCFfc3VwZXIucHJvdG90eXBlLl9yZXN0b3Jl
U3RhdGVWYWx1ZXMuY2FsbCh0aGlzKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuc2V0VGFyZ2V0KHRoaXMuX3N0b3JlZFRhcmdldC5jbG9uZSgp
KTsKKyAgICAgICAgdGhpcy5hbHBoYSA9IHRoaXMuX3N0b3JlZEFscGhhOworICAgICAgICB0aGlz
LmJldGEgPSB0aGlzLl9zdG9yZWRCZXRhOworICAgICAgICB0aGlzLnJhZGl1cyA9IHRoaXMuX3N0
b3JlZFJhZGl1czsKKyAgICAgICAgdGhpcy50YXJnZXRTY3JlZW5PZmZzZXQgPSB0aGlzLl9zdG9y
ZWRUYXJnZXRTY3JlZW5PZmZzZXQuY2xvbmUoKTsKKyAgICAgICAgdGhpcy5pbmVydGlhbEFscGhh
T2Zmc2V0ID0gMDsKKyAgICAgICAgdGhpcy5pbmVydGlhbEJldGFPZmZzZXQgPSAwOworICAgICAg
ICB0aGlzLmluZXJ0aWFsUmFkaXVzT2Zmc2V0ID0gMDsKKyAgICAgICAgdGhpcy5pbmVydGlhbFBh
bm5pbmdYID0gMDsKKyAgICAgICAgdGhpcy5pbmVydGlhbFBhbm5pbmdZID0gMDsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvLyBTeW5jaHJvbml6ZWQKKyAgICAvKiogQGhpZGRl
biAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUuX2lzU3luY2hyb25pemVkVmlld01h
dHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCFfc3VwZXIucHJvdG90eXBlLl9pc1N5
bmNocm9uaXplZFZpZXdNYXRyaXguY2FsbCh0aGlzKSkgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5fdGFyZ2V0LmVxdWFs
cyh0aGlzLl9nZXRUYXJnZXRQb3NpdGlvbigpKQorICAgICAgICAgICAgJiYgdGhpcy5fY2FjaGUu
YWxwaGEgPT09IHRoaXMuYWxwaGEKKyAgICAgICAgICAgICYmIHRoaXMuX2NhY2hlLmJldGEgPT09
IHRoaXMuYmV0YQorICAgICAgICAgICAgJiYgdGhpcy5fY2FjaGUucmFkaXVzID09PSB0aGlzLnJh
ZGl1cworICAgICAgICAgICAgJiYgdGhpcy5fY2FjaGUudGFyZ2V0U2NyZWVuT2Zmc2V0LmVxdWFs
cyh0aGlzLnRhcmdldFNjcmVlbk9mZnNldCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRh
Y2hlZCBjb250cm9scyB0byB0aGUgY3VycmVudCBjYW1lcmEuCisgICAgICogQHBhcmFtIGVsZW1l
bnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0aGUgY29udHJvbHMgc2hvdWxkIGJlIGxpc3RlbmVkIGZy
b20KKyAgICAgKiBAcGFyYW0gbm9QcmV2ZW50RGVmYXVsdCBEZWZpbmVzIHdoZXRoZXIgZXZlbnQg
Y2F1Z2h0IGJ5IHRoZSBjb250cm9scyBzaG91bGQgY2FsbCBwcmV2ZW50ZGVmYXVsdCgpIChodHRw
czovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvcHJldmVu
dERlZmF1bHQpCisgICAgICogQHBhcmFtIHVzZUN0cmxGb3JQYW5uaW5nICBEZWZpbmVzIHdoZXRo
ZXIgY3RybCBpcyB1c2VkIGZvciBwYW5pbmcgd2l0aGluIHRoZSBjb250cm9scworICAgICAqIEBw
YXJhbSBwYW5uaW5nTW91c2VCdXR0b24gRGVmaW5lcyB3aGV0aGVyIHBhbm5pbmcgaXMgYWxsb3dl
ZCB0aHJvdWdoIG1vdXNlIGNsaWNrIGJ1dHRvbgorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVy
YS5wcm90b3R5cGUuYXR0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBub1ByZXZlbnRE
ZWZhdWx0LCB1c2VDdHJsRm9yUGFubmluZywgcGFubmluZ01vdXNlQnV0dG9uKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmICh1c2VDdHJsRm9yUGFubmluZyA9PT0gdm9p
ZCAwKSB7IHVzZUN0cmxGb3JQYW5uaW5nID0gdHJ1ZTsgfQorICAgICAgICBpZiAocGFubmluZ01v
dXNlQnV0dG9uID09PSB2b2lkIDApIHsgcGFubmluZ01vdXNlQnV0dG9uID0gMjsgfQorICAgICAg
ICB0aGlzLl91c2VDdHJsRm9yUGFubmluZyA9IHVzZUN0cmxGb3JQYW5uaW5nOworICAgICAgICB0
aGlzLl9wYW5uaW5nTW91c2VCdXR0b24gPSBwYW5uaW5nTW91c2VCdXR0b247CisgICAgICAgIHRo
aXMuaW5wdXRzLmF0dGFjaEVsZW1lbnQoZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCk7CisgICAg
ICAgIHRoaXMuX3Jlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMuaW5lcnRp
YWxBbHBoYU9mZnNldCA9IDA7CisgICAgICAgICAgICBfdGhpcy5pbmVydGlhbEJldGFPZmZzZXQg
PSAwOworICAgICAgICAgICAgX3RoaXMuaW5lcnRpYWxSYWRpdXNPZmZzZXQgPSAwOworICAgICAg
ICAgICAgX3RoaXMuaW5lcnRpYWxQYW5uaW5nWCA9IDA7CisgICAgICAgICAgICBfdGhpcy5pbmVy
dGlhbFBhbm5pbmdZID0gMDsKKyAgICAgICAgfTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERl
dGFjaCB0aGUgY3VycmVudCBjb250cm9scyBmcm9tIHRoZSBjYW1lcmEuCisgICAgICogVGhlIGNh
bWVyYSB3aWxsIHN0b3AgcmVhY3RpbmcgdG8gaW5wdXRzLgorICAgICAqIEBwYXJhbSBlbGVtZW50
IERlZmluZXMgdGhlIGVsZW1lbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdGhlIGlucHV0cyBmcm9tCisg
ICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZS5kZXRhY2hDb250cm9sID0gZnVu
Y3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuZGV0YWNoRWxlbWVudChlbGVt
ZW50KTsKKyAgICAgICAgaWYgKHRoaXMuX3Jlc2V0KSB7CisgICAgICAgICAgICB0aGlzLl9yZXNl
dCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFyY1JvdGF0
ZUNhbWVyYS5wcm90b3R5cGUuX2NoZWNrSW5wdXRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAv
L2lmIChhc3luYykgY29sbGlzaW9uIGluc3BlY3Rpb24gd2FzIHRyaWdnZXJlZCwgZG9uJ3QgdXBk
YXRlIHRoZSBjYW1lcmEncyBwb3NpdGlvbiAtIHVudGlsIHRoZSBjb2xsaXNpb24gY2FsbGJhY2sg
d2FzIGNhbGxlZC4KKyAgICAgICAgaWYgKHRoaXMuX2NvbGxpc2lvblRyaWdnZXJlZCkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuaW5wdXRzLmNoZWNrSW5w
dXRzKCk7CisgICAgICAgIC8vIEluZXJ0aWEKKyAgICAgICAgaWYgKHRoaXMuaW5lcnRpYWxBbHBo
YU9mZnNldCAhPT0gMCB8fCB0aGlzLmluZXJ0aWFsQmV0YU9mZnNldCAhPT0gMCB8fCB0aGlzLmlu
ZXJ0aWFsUmFkaXVzT2Zmc2V0ICE9PSAwKSB7CisgICAgICAgICAgICB2YXIgaW5lcnRpYWxBbHBo
YU9mZnNldCA9IHRoaXMuaW5lcnRpYWxBbHBoYU9mZnNldDsKKyAgICAgICAgICAgIGlmICh0aGlz
LmJldGEgPD0gMCkgeworICAgICAgICAgICAgICAgIGluZXJ0aWFsQWxwaGFPZmZzZXQgKj0gLTE7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5nZXRTY2VuZSgpLnVzZVJpZ2h0
SGFuZGVkU3lzdGVtKSB7CisgICAgICAgICAgICAgICAgaW5lcnRpYWxBbHBoYU9mZnNldCAqPSAt
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBh
cmVudC5fZ2V0V29ybGRNYXRyaXhEZXRlcm1pbmFudCgpIDwgMCkgeworICAgICAgICAgICAgICAg
IGluZXJ0aWFsQWxwaGFPZmZzZXQgKj0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aGlzLmFscGhhICs9IGluZXJ0aWFsQWxwaGFPZmZzZXQ7CisgICAgICAgICAgICB0aGlzLmJldGEg
Kz0gdGhpcy5pbmVydGlhbEJldGFPZmZzZXQ7CisgICAgICAgICAgICB0aGlzLnJhZGl1cyAtPSB0
aGlzLmluZXJ0aWFsUmFkaXVzT2Zmc2V0OworICAgICAgICAgICAgdGhpcy5pbmVydGlhbEFscGhh
T2Zmc2V0ICo9IHRoaXMuaW5lcnRpYTsKKyAgICAgICAgICAgIHRoaXMuaW5lcnRpYWxCZXRhT2Zm
c2V0ICo9IHRoaXMuaW5lcnRpYTsKKyAgICAgICAgICAgIHRoaXMuaW5lcnRpYWxSYWRpdXNPZmZz
ZXQgKj0gdGhpcy5pbmVydGlhOworICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuaW5lcnRp
YWxBbHBoYU9mZnNldCkgPCBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEyX19bIkVwc2lsb24iXSkgeworICAgICAgICAgICAgICAgIHRoaXMuaW5lcnRpYWxB
bHBoYU9mZnNldCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTWF0aC5hYnMo
dGhpcy5pbmVydGlhbEJldGFPZmZzZXQpIDwgX01hdGhzX21hdGhfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMl9fWyJFcHNpbG9uIl0pIHsKKyAgICAgICAgICAgICAgICB0aGlz
LmluZXJ0aWFsQmV0YU9mZnNldCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
TWF0aC5hYnModGhpcy5pbmVydGlhbFJhZGl1c09mZnNldCkgPCB0aGlzLnNwZWVkICogX01hdGhz
X21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJFcHNpbG9uIl0p
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmluZXJ0aWFsUmFkaXVzT2Zmc2V0ID0gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBQYW5uaW5nIGluZXJ0aWEKKyAgICAgICAg
aWYgKHRoaXMuaW5lcnRpYWxQYW5uaW5nWCAhPT0gMCB8fCB0aGlzLmluZXJ0aWFsUGFubmluZ1kg
IT09IDApIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fbG9jYWxEaXJlY3Rpb24pIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9sb2NhbERpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAgICAg
ICAgIHRoaXMuX3RyYW5zZm9ybWVkRGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aGlzLl9sb2NhbERpcmVjdGlvbi5jb3B5RnJvbUZsb2F0cyh0aGlzLmlu
ZXJ0aWFsUGFubmluZ1gsIHRoaXMuaW5lcnRpYWxQYW5uaW5nWSwgdGhpcy5pbmVydGlhbFBhbm5p
bmdZKTsKKyAgICAgICAgICAgIHRoaXMuX2xvY2FsRGlyZWN0aW9uLm11bHRpcGx5SW5QbGFjZSh0
aGlzLnBhbm5pbmdBeGlzKTsKKyAgICAgICAgICAgIHRoaXMuX3ZpZXdNYXRyaXguaW52ZXJ0VG9S
ZWYodGhpcy5fY2FtZXJhVHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3Jt
Tm9ybWFsVG9SZWYodGhpcy5fbG9jYWxEaXJlY3Rpb24sIHRoaXMuX2NhbWVyYVRyYW5zZm9ybU1h
dHJpeCwgdGhpcy5fdHJhbnNmb3JtZWREaXJlY3Rpb24pOworICAgICAgICAgICAgLy9FbGltaW5h
dGUgeSBpZiBtYXAgcGFubmluZyBpcyBlbmFibGVkIChwYW5uaW5nQXhpcyA9PSAxLDAsMSkKKyAg
ICAgICAgICAgIGlmICghdGhpcy5wYW5uaW5nQXhpcy55KSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fdHJhbnNmb3JtZWREaXJlY3Rpb24ueSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIXRoaXMuX3RhcmdldEhvc3QpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5wYW5u
aW5nRGlzdGFuY2VMaW1pdCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1l
ZERpcmVjdGlvbi5hZGRJblBsYWNlKHRoaXMuX3RhcmdldCk7CisgICAgICAgICAgICAgICAgICAg
IHZhciBkaXN0YW5jZVNxdWFyZWQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkRpc3RhbmNlU3F1YXJlZCh0aGlzLl90cmFuc2Zvcm1l
ZERpcmVjdGlvbiwgdGhpcy5wYW5uaW5nT3JpZ2luVGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGRpc3RhbmNlU3F1YXJlZCA8PSAodGhpcy5wYW5uaW5nRGlzdGFuY2VMaW1pdCAqIHRo
aXMucGFubmluZ0Rpc3RhbmNlTGltaXQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Ll90YXJnZXQuY29weUZyb20odGhpcy5fdHJhbnNmb3JtZWREaXJlY3Rpb24pOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXQuYWRkSW5QbGFjZSh0aGlzLl90cmFuc2Zv
cm1lZERpcmVjdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGhpcy5pbmVydGlhbFBhbm5pbmdYICo9IHRoaXMucGFubmluZ0luZXJ0aWE7CisgICAg
ICAgICAgICB0aGlzLmluZXJ0aWFsUGFubmluZ1kgKj0gdGhpcy5wYW5uaW5nSW5lcnRpYTsKKyAg
ICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmluZXJ0aWFsUGFubmluZ1gpIDwgdGhpcy5zcGVl
ZCAqIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1si
RXBzaWxvbiJdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5pbmVydGlhbFBhbm5pbmdYID0gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmluZXJ0aWFsUGFu
bmluZ1kpIDwgdGhpcy5zcGVlZCAqIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTJfX1siRXBzaWxvbiJdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5pbmVy
dGlhbFBhbm5pbmdZID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBM
aW1pdHMKKyAgICAgICAgdGhpcy5fY2hlY2tMaW1pdHMoKTsKKyAgICAgICAgX3N1cGVyLnByb3Rv
dHlwZS5fY2hlY2tJbnB1dHMuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIEFyY1JvdGF0ZUNhbWVy
YS5wcm90b3R5cGUuX2NoZWNrTGltaXRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhp
cy5sb3dlckJldGFMaW1pdCA9PT0gbnVsbCB8fCB0aGlzLmxvd2VyQmV0YUxpbWl0ID09PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmFsbG93VXBzaWRlRG93biAmJiB0aGlzLmJl
dGEgPiBNYXRoLlBJKSB7CisgICAgICAgICAgICAgICAgdGhpcy5iZXRhID0gdGhpcy5iZXRhIC0g
KDIgKiBNYXRoLlBJKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLmJldGEgPCB0aGlzLmxvd2VyQmV0YUxpbWl0KSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5iZXRhID0gdGhpcy5sb3dlckJldGFMaW1pdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy51cHBlckJldGFMaW1pdCA9PT0gbnVsbCB8
fCB0aGlzLnVwcGVyQmV0YUxpbWl0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLmFsbG93VXBzaWRlRG93biAmJiB0aGlzLmJldGEgPCAtTWF0aC5QSSkgeworICAgICAgICAg
ICAgICAgIHRoaXMuYmV0YSA9IHRoaXMuYmV0YSArICgyICogTWF0aC5QSSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAodGhpcy5iZXRh
ID4gdGhpcy51cHBlckJldGFMaW1pdCkgeworICAgICAgICAgICAgICAgIHRoaXMuYmV0YSA9IHRo
aXMudXBwZXJCZXRhTGltaXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMubG93ZXJBbHBoYUxpbWl0ICE9PSBudWxsICYmIHRoaXMuYWxwaGEgPCB0aGlzLmxvd2Vy
QWxwaGFMaW1pdCkgeworICAgICAgICAgICAgdGhpcy5hbHBoYSA9IHRoaXMubG93ZXJBbHBoYUxp
bWl0OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnVwcGVyQWxwaGFMaW1pdCAhPT0gbnVs
bCAmJiB0aGlzLmFscGhhID4gdGhpcy51cHBlckFscGhhTGltaXQpIHsKKyAgICAgICAgICAgIHRo
aXMuYWxwaGEgPSB0aGlzLnVwcGVyQWxwaGFMaW1pdDsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5sb3dlclJhZGl1c0xpbWl0ICE9PSBudWxsICYmIHRoaXMucmFkaXVzIDwgdGhpcy5sb3dl
clJhZGl1c0xpbWl0KSB7CisgICAgICAgICAgICB0aGlzLnJhZGl1cyA9IHRoaXMubG93ZXJSYWRp
dXNMaW1pdDsKKyAgICAgICAgICAgIHRoaXMuaW5lcnRpYWxSYWRpdXNPZmZzZXQgPSAwOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLnVwcGVyUmFkaXVzTGltaXQgIT09IG51bGwgJiYgdGhp
cy5yYWRpdXMgPiB0aGlzLnVwcGVyUmFkaXVzTGltaXQpIHsKKyAgICAgICAgICAgIHRoaXMucmFk
aXVzID0gdGhpcy51cHBlclJhZGl1c0xpbWl0OworICAgICAgICAgICAgdGhpcy5pbmVydGlhbFJh
ZGl1c09mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlYnVp
bGRzIGFuZ2xlcyAoYWxwaGEsIGJldGEpIGFuZCByYWRpdXMgZnJvbSB0aGUgZ2l2ZSBwb3NpdGlv
biBhbmQgdGFyZ2V0CisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZS5yZWJ1
aWxkQW5nbGVzQW5kUmFkaXVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9wb3NpdGlv
bi5zdWJ0cmFjdFRvUmVmKHRoaXMuX2dldFRhcmdldFBvc2l0aW9uKCksIHRoaXMuX2NvbXB1dGF0
aW9uVmVjdG9yKTsKKyAgICAgICAgLy8gbmVlZCB0byByb3RhdGUgdG8gWSB1cCBlcXVpdmFsZW50
IGlmIHVwIHZlY3RvciBub3QgQXhpcy5ZCisgICAgICAgIGlmICh0aGlzLl91cFZlY3Rvci54ICE9
PSAwIHx8IHRoaXMuX3VwVmVjdG9yLnkgIT09IDEuMCB8fCB0aGlzLl91cFZlY3Rvci56ICE9PSAw
KSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYodGhpcy5fY29tcHV0
YXRpb25WZWN0b3IsIHRoaXMuX3VwVG9ZTWF0cml4LCB0aGlzLl9jb21wdXRhdGlvblZlY3Rvcik7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLl9jb21wdXRhdGlvblZlY3Rv
ci5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHRoaXMucmFkaXVzID09PSAwKSB7CisgICAgICAgICAg
ICB0aGlzLnJhZGl1cyA9IDAuMDAwMTsgLy8gSnVzdCB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJv
CisgICAgICAgIH0KKyAgICAgICAgLy8gQWxwaGEKKyAgICAgICAgaWYgKHRoaXMuX2NvbXB1dGF0
aW9uVmVjdG9yLnggPT09IDAgJiYgdGhpcy5fY29tcHV0YXRpb25WZWN0b3IueiA9PT0gMCkgewor
ICAgICAgICAgICAgdGhpcy5hbHBoYSA9IE1hdGguUEkgLyAyOyAvLyBhdm9pZCBkaXZpc2lvbiBi
eSB6ZXJvIHdoZW4gbG9va2luZyBhbG9uZyB1cCBheGlzLCBhbmQgc2V0IHRvIGFjb3MoMCkKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuYWxwaGEgPSBNYXRoLmFj
b3ModGhpcy5fY29tcHV0YXRpb25WZWN0b3IueCAvIE1hdGguc3FydChNYXRoLnBvdyh0aGlzLl9j
b21wdXRhdGlvblZlY3Rvci54LCAyKSArIE1hdGgucG93KHRoaXMuX2NvbXB1dGF0aW9uVmVjdG9y
LnosIDIpKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2NvbXB1dGF0aW9uVmVjdG9y
LnogPCAwKSB7CisgICAgICAgICAgICB0aGlzLmFscGhhID0gMiAqIE1hdGguUEkgLSB0aGlzLmFs
cGhhOworICAgICAgICB9CisgICAgICAgIC8vIEJldGEKKyAgICAgICAgdGhpcy5iZXRhID0gTWF0
aC5hY29zKHRoaXMuX2NvbXB1dGF0aW9uVmVjdG9yLnkgLyB0aGlzLnJhZGl1cyk7CisgICAgICAg
IHRoaXMuX2NoZWNrTGltaXRzKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVc2UgYSBwb3Np
dGlvbiB0byBkZWZpbmUgdGhlIGN1cnJlbnQgY2FtZXJhIHJlbGF0ZWQgaW5mb3JtYXRpb24gbGlr
ZSBhcGxoYSwgYmV0YSBhbmQgcmFkaXVzCisgICAgICogQHBhcmFtIHBvc2l0aW9uIERlZmluZXMg
dGhlIHBvc2l0aW9uIHRvIHNldCB0aGUgY2FtZXJhIGF0CisgICAgICovCisgICAgQXJjUm90YXRl
Q2FtZXJhLnByb3RvdHlwZS5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb3NpdGlvbikgeworICAg
ICAgICBpZiAodGhpcy5fcG9zaXRpb24uZXF1YWxzKHBvc2l0aW9uKSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Bvc2l0aW9uLmNvcHlGcm9tKHBvc2l0
aW9uKTsKKyAgICAgICAgdGhpcy5yZWJ1aWxkQW5nbGVzQW5kUmFkaXVzKCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSB0YXJnZXQgdGhlIGNhbWVyYSBzaG91bGQgbG9vayBh
dC4KKyAgICAgKiBUaGlzIHdpbGwgYXV0b21hdGljYWxseSBhZGFwdCBhbHBoYSBiZXRhIGFuZCBy
YWRpdXMgdG8gZml0IHdpdGhpbiB0aGUgbmV3IHRhcmdldC4KKyAgICAgKiBAcGFyYW0gdGFyZ2V0
IERlZmluZXMgdGhlIG5ldyB0YXJnZXQgYXMgYSBWZWN0b3Igb3IgYSBtZXNoCisgICAgICogQHBh
cmFtIHRvQm91bmRpbmdDZW50ZXIgSW4gY2FzZSBvZiBhIG1lc2ggdGFyZ2V0LCBkZWZpbmVzIHdl
dGhlciB0byB0YXJnZXQgdGhlIG1lc2ggcG9zaXRpb24gb3IgaXRzIGJvdW5kaW5nIGluZm9ybWF0
aW9uIGNlbnRlcgorICAgICAqIEBwYXJhbSBhbGxvd1NhbWVQb3NpdGlvbiBJZiBmYWxzZSwgcHJl
dmVudHMgcmVhcHBseWluZyB0aGUgbmV3IGNvbXB1dGVkIHBvc2l0aW9uIGlmIGl0IGlzIGlkZW50
aWNhbCB0byB0aGUgY3VycmVudCBvbmUgKG9wdGltKQorICAgICAqLworICAgIEFyY1JvdGF0ZUNh
bWVyYS5wcm90b3R5cGUuc2V0VGFyZ2V0ID0gZnVuY3Rpb24gKHRhcmdldCwgdG9Cb3VuZGluZ0Nl
bnRlciwgYWxsb3dTYW1lUG9zaXRpb24pIHsKKyAgICAgICAgaWYgKHRvQm91bmRpbmdDZW50ZXIg
PT09IHZvaWQgMCkgeyB0b0JvdW5kaW5nQ2VudGVyID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGFs
bG93U2FtZVBvc2l0aW9uID09PSB2b2lkIDApIHsgYWxsb3dTYW1lUG9zaXRpb24gPSBmYWxzZTsg
fQorICAgICAgICBpZiAodGFyZ2V0LmdldEJvdW5kaW5nSW5mbykgeworICAgICAgICAgICAgaWYg
KHRvQm91bmRpbmdDZW50ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXRCb3VuZGlu
Z0NlbnRlciA9IHRhcmdldC5nZXRCb3VuZGluZ0luZm8oKS5ib3VuZGluZ0JveC5jZW50ZXJXb3Js
ZC5jbG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5fdGFyZ2V0Qm91bmRpbmdDZW50ZXIgPSBudWxsOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGFyZ2V0LmNvbXB1dGVXb3JsZE1hdHJpeCgpOworICAgICAgICAgICAgdGhp
cy5fdGFyZ2V0SG9zdCA9IHRhcmdldDsKKyAgICAgICAgICAgIHRoaXMuX3RhcmdldCA9IHRoaXMu
X2dldFRhcmdldFBvc2l0aW9uKCk7CisgICAgICAgICAgICB0aGlzLm9uTWVzaFRhcmdldENoYW5n
ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzLl90YXJnZXRIb3N0KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBuZXdUYXJnZXQgPSB0YXJnZXQ7Cisg
ICAgICAgICAgICB2YXIgY3VycmVudFRhcmdldCA9IHRoaXMuX2dldFRhcmdldFBvc2l0aW9uKCk7
CisgICAgICAgICAgICBpZiAoY3VycmVudFRhcmdldCAmJiAhYWxsb3dTYW1lUG9zaXRpb24gJiYg
Y3VycmVudFRhcmdldC5lcXVhbHMobmV3VGFyZ2V0KSkgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3RhcmdldEhvc3QgPSBudWxsOwor
ICAgICAgICAgICAgdGhpcy5fdGFyZ2V0ID0gbmV3VGFyZ2V0OworICAgICAgICAgICAgdGhpcy5f
dGFyZ2V0Qm91bmRpbmdDZW50ZXIgPSBudWxsOworICAgICAgICAgICAgdGhpcy5vbk1lc2hUYXJn
ZXRDaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMobnVsbCk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5yZWJ1aWxkQW5nbGVzQW5kUmFkaXVzKCk7CisgICAgfTsKKyAgICAvKiogQGhp
ZGRlbiAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUuX2dldFZpZXdNYXRyaXggPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIC8vIENvbXB1dGUKKyAgICAgICAgdmFyIGNvc2EgPSBNYXRo
LmNvcyh0aGlzLmFscGhhKTsKKyAgICAgICAgdmFyIHNpbmEgPSBNYXRoLnNpbih0aGlzLmFscGhh
KTsKKyAgICAgICAgdmFyIGNvc2IgPSBNYXRoLmNvcyh0aGlzLmJldGEpOworICAgICAgICB2YXIg
c2luYiA9IE1hdGguc2luKHRoaXMuYmV0YSk7CisgICAgICAgIGlmIChzaW5iID09PSAwKSB7Cisg
ICAgICAgICAgICBzaW5iID0gMC4wMDAxOworICAgICAgICB9CisgICAgICAgIHZhciB0YXJnZXQg
PSB0aGlzLl9nZXRUYXJnZXRQb3NpdGlvbigpOworICAgICAgICB0aGlzLl9jb21wdXRhdGlvblZl
Y3Rvci5jb3B5RnJvbUZsb2F0cyh0aGlzLnJhZGl1cyAqIGNvc2EgKiBzaW5iLCB0aGlzLnJhZGl1
cyAqIGNvc2IsIHRoaXMucmFkaXVzICogc2luYSAqIHNpbmIpOworICAgICAgICAvLyBSb3RhdGUg
YWNjb3JkaW5nIHRvIHVwIHZlY3RvcgorICAgICAgICBpZiAodGhpcy5fdXBWZWN0b3IueCAhPT0g
MCB8fCB0aGlzLl91cFZlY3Rvci55ICE9PSAxLjAgfHwgdGhpcy5fdXBWZWN0b3IueiAhPT0gMCkg
eworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHRoaXMuX2NvbXB1dGF0
aW9uVmVjdG9yLCB0aGlzLl9ZVG9VcE1hdHJpeCwgdGhpcy5fY29tcHV0YXRpb25WZWN0b3IpOwor
ICAgICAgICB9CisgICAgICAgIHRhcmdldC5hZGRUb1JlZih0aGlzLl9jb21wdXRhdGlvblZlY3Rv
ciwgdGhpcy5fbmV3UG9zaXRpb24pOworICAgICAgICBpZiAodGhpcy5nZXRTY2VuZSgpLmNvbGxp
c2lvbnNFbmFibGVkICYmIHRoaXMuY2hlY2tDb2xsaXNpb25zKSB7CisgICAgICAgICAgICB2YXIg
Y29vcmRpbmF0b3IgPSB0aGlzLmdldFNjZW5lKCkuY29sbGlzaW9uQ29vcmRpbmF0b3I7CisgICAg
ICAgICAgICBpZiAoIXRoaXMuX2NvbGxpZGVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY29s
bGlkZXIgPSBjb29yZGluYXRvci5jcmVhdGVDb2xsaWRlcigpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhpcy5fY29sbGlkZXIuX3JhZGl1cyA9IHRoaXMuY29sbGlzaW9uUmFkaXVzOwor
ICAgICAgICAgICAgdGhpcy5fbmV3UG9zaXRpb24uc3VidHJhY3RUb1JlZih0aGlzLl9wb3NpdGlv
biwgdGhpcy5fY29sbGlzaW9uVmVsb2NpdHkpOworICAgICAgICAgICAgdGhpcy5fY29sbGlzaW9u
VHJpZ2dlcmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvb3JkaW5hdG9yLmdldE5ld1Bvc2l0aW9u
KHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9jb2xsaXNpb25WZWxvY2l0eSwgdGhpcy5fY29sbGlkZXIs
IDMsIG51bGwsIHRoaXMuX29uQ29sbGlzaW9uUG9zaXRpb25DaGFuZ2UsIHRoaXMudW5pcXVlSWQp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24u
Y29weUZyb20odGhpcy5fbmV3UG9zaXRpb24pOworICAgICAgICAgICAgdmFyIHVwID0gdGhpcy51
cFZlY3RvcjsKKyAgICAgICAgICAgIGlmICh0aGlzLmFsbG93VXBzaWRlRG93biAmJiBzaW5iIDwg
MCkgeworICAgICAgICAgICAgICAgIHVwID0gdXAubmVnYXRlKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl9jb21wdXRlVmlld01hdHJpeCh0aGlzLl9wb3NpdGlvbiwgdGFyZ2V0
LCB1cCk7CisgICAgICAgICAgICB0aGlzLl92aWV3TWF0cml4LmFkZEF0SW5kZXgoMTIsIHRoaXMu
dGFyZ2V0U2NyZWVuT2Zmc2V0LngpOworICAgICAgICAgICAgdGhpcy5fdmlld01hdHJpeC5hZGRB
dEluZGV4KDEzLCB0aGlzLnRhcmdldFNjcmVlbk9mZnNldC55KTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9jdXJyZW50VGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICByZXR1cm4gdGhpcy5fdmll
d01hdHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFpvb21zIG9uIGEgbWVzaCB0byBiZSBh
dCB0aGUgbWluIGRpc3RhbmNlIHdoZXJlIHdlIGNvdWxkIHNlZSBpdCBmdWxseSBpbiB0aGUgY3Vy
cmVudCB2aWV3cG9ydC4KKyAgICAgKiBAcGFyYW0gbWVzaGVzIERlZmluZXMgdGhlIG1lc2ggdG8g
em9vbSBvbgorICAgICAqIEBwYXJhbSBkb05vdFVwZGF0ZU1heFogRGVmaW5lcyB3aGV0aGVyIG9y
IG5vdCBtYXhaIHNob3VsZCBiZSB1cGRhdGVkIHdoaWxzdCB6b29taW5nIG9uIHRoZSBtZXNoICh0
aGlzIGNhbiBoYXBwZW4gaWYgdGhlIG1lc2ggaXMgYmlnIGFuZCB0aGUgbWF4cmFkaXVzIHByZXR0
eSBzbWFsbCBmb3IgaW5zdGFuY2UpCisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhLnByb3Rv
dHlwZS56b29tT24gPSBmdW5jdGlvbiAobWVzaGVzLCBkb05vdFVwZGF0ZU1heFopIHsKKyAgICAg
ICAgaWYgKGRvTm90VXBkYXRlTWF4WiA9PT0gdm9pZCAwKSB7IGRvTm90VXBkYXRlTWF4WiA9IGZh
bHNlOyB9CisgICAgICAgIG1lc2hlcyA9IG1lc2hlcyB8fCB0aGlzLmdldFNjZW5lKCkubWVzaGVz
OworICAgICAgICB2YXIgbWluTWF4VmVjdG9yID0gX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIk1lc2giXS5NaW5NYXgobWVzaGVzKTsKKyAgICAgICAgdmFyIGRpc3Rh
bmNlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
Y3RvcjMiXS5EaXN0YW5jZShtaW5NYXhWZWN0b3IubWluLCBtaW5NYXhWZWN0b3IubWF4KTsKKyAg
ICAgICAgdGhpcy5yYWRpdXMgPSBkaXN0YW5jZSAqIHRoaXMuem9vbU9uRmFjdG9yOworICAgICAg
ICB0aGlzLmZvY3VzT24oeyBtaW46IG1pbk1heFZlY3Rvci5taW4sIG1heDogbWluTWF4VmVjdG9y
Lm1heCwgZGlzdGFuY2U6IGRpc3RhbmNlIH0sIGRvTm90VXBkYXRlTWF4Wik7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBGb2N1cyBvbiBhIG1lc2ggb3IgYSBib3VuZGluZyBib3guIFRoaXMgYWRh
cHRzIHRoZSB0YXJnZXQgYW5kIG1heFJhZGl1cyBpZiBuZWNlc3NhcnkgYnV0IGRvZXMgbm90IHVw
ZGF0ZSB0aGUgY3VycmVudCByYWRpdXMuCisgICAgICogVGhlIHRhcmdldCB3aWxsIGJlIGNoYW5n
ZWQgYnV0IHRoZSByYWRpdXMKKyAgICAgKiBAcGFyYW0gbWVzaGVzT3JNaW5NYXhWZWN0b3JBbmRE
aXN0YW5jZSBEZWZpbmVzIHRoZSBtZXNoIG9yIGJvdW5kaW5nIGluZm8gdG8gZm9jdXMgb24KKyAg
ICAgKiBAcGFyYW0gZG9Ob3RVcGRhdGVNYXhaIERlZmluZXMgd2hldGhlciBvciBub3QgbWF4WiBz
aG91bGQgYmUgdXBkYXRlZCB3aGlsc3Qgem9vbWluZyBvbiB0aGUgbWVzaCAodGhpcyBjYW4gaGFw
cGVuIGlmIHRoZSBtZXNoIGlzIGJpZyBhbmQgdGhlIG1heHJhZGl1cyBwcmV0dHkgc21hbGwgZm9y
IGluc3RhbmNlKQorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUuZm9jdXNP
biA9IGZ1bmN0aW9uIChtZXNoZXNPck1pbk1heFZlY3RvckFuZERpc3RhbmNlLCBkb05vdFVwZGF0
ZU1heFopIHsKKyAgICAgICAgaWYgKGRvTm90VXBkYXRlTWF4WiA9PT0gdm9pZCAwKSB7IGRvTm90
VXBkYXRlTWF4WiA9IGZhbHNlOyB9CisgICAgICAgIHZhciBtZXNoZXNPck1pbk1heFZlY3RvcjsK
KyAgICAgICAgdmFyIGRpc3RhbmNlOworICAgICAgICBpZiAobWVzaGVzT3JNaW5NYXhWZWN0b3JB
bmREaXN0YW5jZS5taW4gPT09IHVuZGVmaW5lZCkgeyAvLyBtZXNoZXMKKyAgICAgICAgICAgIHZh
ciBtZXNoZXMgPSBtZXNoZXNPck1pbk1heFZlY3RvckFuZERpc3RhbmNlIHx8IHRoaXMuZ2V0U2Nl
bmUoKS5tZXNoZXM7CisgICAgICAgICAgICBtZXNoZXNPck1pbk1heFZlY3RvciA9IF9NZXNoZXNf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNZXNoIl0uTWluTWF4KG1lc2hlcyk7
CisgICAgICAgICAgICBkaXN0YW5jZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uRGlzdGFuY2UobWVzaGVzT3JNaW5NYXhWZWN0b3Iu
bWluLCBtZXNoZXNPck1pbk1heFZlY3Rvci5tYXgpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eyAvL21pbk1heFZlY3RvciBhbmQgZGlzdGFuY2UKKyAgICAgICAgICAgIHZhciBtaW5NYXhWZWN0
b3JBbmREaXN0YW5jZSA9IG1lc2hlc09yTWluTWF4VmVjdG9yQW5kRGlzdGFuY2U7CisgICAgICAg
ICAgICBtZXNoZXNPck1pbk1heFZlY3RvciA9IG1pbk1heFZlY3RvckFuZERpc3RhbmNlOworICAg
ICAgICAgICAgZGlzdGFuY2UgPSBtaW5NYXhWZWN0b3JBbmREaXN0YW5jZS5kaXN0YW5jZTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl90YXJnZXQgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siTWVzaCJdLkNlbnRlcihtZXNoZXNPck1pbk1heFZlY3Rvcik7Cisg
ICAgICAgIGlmICghZG9Ob3RVcGRhdGVNYXhaKSB7CisgICAgICAgICAgICB0aGlzLm1heFogPSBk
aXN0YW5jZSAqIDI7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEBvdmVycmlk
ZQorICAgICAqIE92ZXJyaWRlIENhbWVyYS5jcmVhdGVSaWdDYW1lcmEKKyAgICAgKi8KKyAgICBB
cmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLmNyZWF0ZVJpZ0NhbWVyYSA9IGZ1bmN0aW9uIChuYW1l
LCBjYW1lcmFJbmRleCkgeworICAgICAgICB2YXIgYWxwaGFTaGlmdCA9IDA7CisgICAgICAgIHN3
aXRjaCAodGhpcy5jYW1lcmFSaWdNb2RlKSB7CisgICAgICAgICAgICBjYXNlIF9jYW1lcmFfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ2FtZXJhIl0uUklHX01PREVfU1RFUkVPU0NPUElD
X0FOQUdMWVBIOgorICAgICAgICAgICAgY2FzZSBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19TSURFQllTSURFX1BBUkFM
TEVMOgorICAgICAgICAgICAgY2FzZSBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19PVkVSVU5ERVI6CisgICAgICAgICAg
ICBjYXNlIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ2FtZXJhIl0uUklH
X01PREVfVlI6CisgICAgICAgICAgICAgICAgYWxwaGFTaGlmdCA9IHRoaXMuX2NhbWVyYVJpZ1Bh
cmFtcy5zdGVyZW9IYWxmQW5nbGUgKiAoY2FtZXJhSW5kZXggPT09IDAgPyAxIDogLTEpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfY2FtZXJhX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19TSURFQllT
SURFX0NST1NTRVlFRDoKKyAgICAgICAgICAgICAgICBhbHBoYVNoaWZ0ID0gdGhpcy5fY2FtZXJh
UmlnUGFyYW1zLnN0ZXJlb0hhbGZBbmdsZSAqIChjYW1lcmFJbmRleCA9PT0gMCA/IC0xIDogMSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJpZ0NhbSA9
IG5ldyBBcmNSb3RhdGVDYW1lcmEobmFtZSwgdGhpcy5hbHBoYSArIGFscGhhU2hpZnQsIHRoaXMu
YmV0YSwgdGhpcy5yYWRpdXMsIHRoaXMuX3RhcmdldCwgdGhpcy5nZXRTY2VuZSgpKTsKKyAgICAg
ICAgcmlnQ2FtLl9jYW1lcmFSaWdQYXJhbXMgPSB7fTsKKyAgICAgICAgcmV0dXJuIHJpZ0NhbTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAg
KiBPdmVycmlkZSBDYW1lcmEuX3VwZGF0ZVJpZ0NhbWVyYXMKKyAgICAgKi8KKyAgICBBcmNSb3Rh
dGVDYW1lcmEucHJvdG90eXBlLl91cGRhdGVSaWdDYW1lcmFzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgY2FtTGVmdCA9IHRoaXMuX3JpZ0NhbWVyYXNbMF07CisgICAgICAgIHZhciBjYW1S
aWdodCA9IHRoaXMuX3JpZ0NhbWVyYXNbMV07CisgICAgICAgIGNhbUxlZnQuYmV0YSA9IGNhbVJp
Z2h0LmJldGEgPSB0aGlzLmJldGE7CisgICAgICAgIHN3aXRjaCAodGhpcy5jYW1lcmFSaWdNb2Rl
KSB7CisgICAgICAgICAgICBjYXNlIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siQ2FtZXJhIl0uUklHX01PREVfU1RFUkVPU0NPUElDX0FOQUdMWVBIOgorICAgICAgICAgICAg
Y2FzZSBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNhbWVyYSJdLlJJR19N
T0RFX1NURVJFT1NDT1BJQ19TSURFQllTSURFX1BBUkFMTEVMOgorICAgICAgICAgICAgY2FzZSBf
Y2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNhbWVyYSJdLlJJR19NT0RFX1NU
RVJFT1NDT1BJQ19PVkVSVU5ERVI6CisgICAgICAgICAgICBjYXNlIF9jYW1lcmFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siQ2FtZXJhIl0uUklHX01PREVfVlI6CisgICAgICAgICAgICAg
ICAgY2FtTGVmdC5hbHBoYSA9IHRoaXMuYWxwaGEgLSB0aGlzLl9jYW1lcmFSaWdQYXJhbXMuc3Rl
cmVvSGFsZkFuZ2xlOworICAgICAgICAgICAgICAgIGNhbVJpZ2h0LmFscGhhID0gdGhpcy5hbHBo
YSArIHRoaXMuX2NhbWVyYVJpZ1BhcmFtcy5zdGVyZW9IYWxmQW5nbGU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siQ2FtZXJhIl0uUklHX01PREVfU1RFUkVPU0NPUElDX1NJREVCWVNJREVfQ1JPU1NF
WUVEOgorICAgICAgICAgICAgICAgIGNhbUxlZnQuYWxwaGEgPSB0aGlzLmFscGhhICsgdGhpcy5f
Y2FtZXJhUmlnUGFyYW1zLnN0ZXJlb0hhbGZBbmdsZTsKKyAgICAgICAgICAgICAgICBjYW1SaWdo
dC5hbHBoYSA9IHRoaXMuYWxwaGEgLSB0aGlzLl9jYW1lcmFSaWdQYXJhbXMuc3RlcmVvSGFsZkFu
Z2xlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIF9zdXBlci5w
cm90b3R5cGUuX3VwZGF0ZVJpZ0NhbWVyYXMuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIERlc3Ryb3kgdGhlIGNhbWVyYSBhbmQgcmVsZWFzZSB0aGUgY3VycmVudCByZXNvdXJj
ZXMgaG9sZCBieSBpdC4KKyAgICAgKi8KKyAgICBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLmRp
c3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuaW5wdXRzLmNsZWFyKCk7CisgICAg
ICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgY3VycmVudCBvYmplY3QgY2xhc3MgbmFtZS4KKyAgICAgKiBAcmV0
dXJuIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlw
ZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQXJjUm90YXRl
Q2FtZXJhIjsKKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2Ft
ZXJhLnByb3RvdHlwZSwgImFscGhhIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJiZXRhIiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJyYWRpdXMiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVmVjdG9yMyJdKSgidGFyZ2V0IikKKyAgICBdLCBBcmNS
b3RhdGVDYW1lcmEucHJvdG90eXBlLCAiX3RhcmdldCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
QXNWZWN0b3IzIl0pKCJ1cFZlY3RvciIpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlw
ZSwgIl91cFZlY3RvciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNS
b3RhdGVDYW1lcmEucHJvdG90eXBlLCAiaW5lcnRpYWxBbHBoYU9mZnNldCIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAiaW5l
cnRpYWxCZXRhT2Zmc2V0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFy
Y1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJpbmVydGlhbFJhZGl1c09mZnNldCIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAi
bG93ZXJBbHBoYUxpbWl0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFy
Y1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJ1cHBlckFscGhhTGltaXQiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZSwgImxvd2Vy
QmV0YUxpbWl0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0
ZUNhbWVyYS5wcm90b3R5cGUsICJ1cHBlckJldGFMaW1pdCIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAibG93ZXJSYWRpdXNM
aW1pdCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1l
cmEucHJvdG90eXBlLCAidXBwZXJSYWRpdXNMaW1pdCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAiaW5lcnRpYWxQYW5uaW5n
WCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEu
cHJvdG90eXBlLCAiaW5lcnRpYWxQYW5uaW5nWSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAicGluY2hUb1Bhbk1heERpc3Rh
bmNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVy
YS5wcm90b3R5cGUsICJwYW5uaW5nRGlzdGFuY2VMaW1pdCIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplQXNWZWN0b3IzIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAicGFu
bmluZ09yaWdpblRhcmdldCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBB
cmNSb3RhdGVDYW1lcmEucHJvdG90eXBlLCAicGFubmluZ0luZXJ0aWEiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2FtZXJhLnByb3RvdHlwZSwgInpvb21P
bkZhY3RvciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBBcmNSb3RhdGVD
YW1lcmEucHJvdG90eXBlLCAidGFyZ2V0U2NyZWVuT2Zmc2V0Iiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemUiXSkoKQorICAgIF0sIEFyY1JvdGF0ZUNhbWVyYS5wcm90b3R5cGUsICJhbGxvd1Vwc2lk
ZURvd24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQXJjUm90YXRlQ2Ft
ZXJhLnByb3RvdHlwZSwgInVzZUlucHV0VG9SZXN0b3JlU3RhdGUiLCB2b2lkIDApOworICAgIHJl
dHVybiBBcmNSb3RhdGVDYW1lcmE7Cit9KF90YXJnZXRDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEwX19bIlRhcmdldENhbWVyYSJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0Nh
bWVyYXMvYXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlci50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IEFyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlcjsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIu
ZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfSW5wdXRzX2FyY1Jv
dGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYVBv
aW50ZXJzSW5wdXQgKi8gIi4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJ
bnB1dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX0lucHV0c19hcmNS
b3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2Ft
ZXJhS2V5Ym9hcmRNb3ZlSW5wdXQgKi8gIi4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2FtZXJh
S2V5Ym9hcmRNb3ZlSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJh
c19JbnB1dHNfYXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL0lucHV0cy9h
cmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQgKi8gIi4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90
YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNNYW5hZ2Vy
ICovICIuL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOworCisKKworCisKKy8qKgor
ICogRGVmYXVsdCBJbnB1dHMgbWFuYWdlciBmb3IgdGhlIEFyY1JvdGF0ZUNhbWVyYS4KKyAqIEl0
IGdyb3VwcyBhbGwgdGhlIGRlZmF1bHQgc3VwcG9ydGVkIGlucHV0cyBmb3IgZWFzZSBvZiB1c2Uu
CisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXppbmdfY2Ft
ZXJhX2lucHV0cworICovCit2YXIgQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlciA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShBcmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyLCBf
c3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBBcmNSb3RhdGVDYW1l
cmFJbnB1dHNNYW5hZ2VyLgorICAgICAqIEBwYXJhbSBjYW1lcmEgRGVmaW5lcyB0aGUgY2FtZXJh
IHRoZSBpbnB1dHMgYmVsb25nIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gQXJjUm90YXRlQ2Ft
ZXJhSW5wdXRzTWFuYWdlcihjYW1lcmEpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRo
aXMsIGNhbWVyYSkgfHwgdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIG1vdXNlIHdo
ZWVsIGlucHV0IHN1cHBvcnQgdG8gdGhlIGlucHV0IG1hbmFnZXIuCisgICAgICogQHJldHVybnMg
dGhlIGN1cnJlbnQgaW5wdXQgbWFuYWdlcgorICAgICAqLworICAgIEFyY1JvdGF0ZUNhbWVyYUlu
cHV0c01hbmFnZXIucHJvdG90eXBlLmFkZE1vdXNlV2hlZWwgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuYWRkKG5ldyBfQ2FtZXJhc19JbnB1dHNfYXJjUm90YXRlQ2FtZXJhTW91c2VXaGVl
bElucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFyY1JvdGF0ZUNhbWVyYU1vdXNl
V2hlZWxJbnB1dCJdKCkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFkZCBwb2ludGVycyBpbnB1dCBzdXBwb3J0IHRvIHRoZSBpbnB1dCBtYW5hZ2VyLgor
ICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IGlucHV0IG1hbmFnZXIKKyAgICAgKi8KKyAgICBB
cmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyLnByb3RvdHlwZS5hZGRQb2ludGVycyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdGhpcy5hZGQobmV3IF9DYW1lcmFzX0lucHV0c19hcmNSb3RhdGVD
YW1lcmFQb2ludGVyc0lucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFyY1JvdGF0
ZUNhbWVyYVBvaW50ZXJzSW5wdXQiXSgpKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBZGQga2V5Ym9hcmQgaW5wdXQgc3VwcG9ydCB0byB0aGUgaW5wdXQg
bWFuYWdlci4KKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBpbnB1dCBtYW5hZ2VyCisgICAg
ICovCisgICAgQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlci5wcm90b3R5cGUuYWRkS2V5Ym9h
cmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuYWRkKG5ldyBfQ2FtZXJhc19JbnB1dHNf
YXJjUm90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siQXJjUm90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiXSgpKTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4gQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdl
cjsKK30oX0NhbWVyYXNfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJDYW1lcmFJbnB1dHNNYW5hZ2VyIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9DYW1lcmFzL2NhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL0NhbWVyYXMvY2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDYW1lcmEgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDYW1l
cmE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3NtYXJ0
QXJyYXkgKi8gIi4vTWlzYy9zbWFydEFycmF5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAi
Li9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGUgKi8gIi4vbm9kZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIgKi8g
Ii4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBl
U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGV2VG9vbHMgKi8gIi4vTWlz
Yy9kZXZUb29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3Zp
ZXdwb3J0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0aHMvbWF0aC52aWV3cG9ydCAqLyAiLi9NYXRocy9tYXRoLnZpZXdwb3J0LnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfZnJ1c3R1bV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhz
L21hdGguZnJ1c3R1bSAqLyAiLi9NYXRocy9tYXRoLmZydXN0dW0udHMiKTsKKworCisKKworCisK
KworCisKKworCisKKy8qKgorICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgdGhlIGNh
bWVyYSB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9u
anMuY29tL2ZlYXR1cmVzL2NhbWVyYXMKKyAqLwordmFyIENhbWVyYSA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShDYW1lcmEsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFu
dGlhdGVzIGEgbmV3IGNhbWVyYSBvYmplY3QuCisgICAgICogVGhpcyBzaG91bGQgbm90IGJlIHVz
ZWQgZGlyZWN0bHkgYnV0IHRocm91Z2ggdGhlIGluaGVyaXRlZCBjYW1lcmFzOiBBcmNSb3RhdGUs
IEZyZWUuLi4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9j
YW1lcmFzCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY2FtZXJh
IGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBEZWZpbmVzIHRoZSBwb3NpdGlv
biBvZiB0aGUgY2FtZXJhCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRo
ZSBjYW1lcmEgYmVsb25ncyB0b28KKyAgICAgKiBAcGFyYW0gc2V0QWN0aXZlT25TY2VuZUlmTm9u
ZUFjdGl2ZSBEZWZpbmVzIGlmIHRoZSBjYW1lcmEgc2hvdWxkIGJlIHNldCBhcyBhY3RpdmUgYWZ0
ZXIgY3JlYXRpb24gaWYgbm8gb3RoZXIgY2FtZXJhIGhhdmUgYmVlbiBkZWZpbmVkIGluIHRoZSBz
Y2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIENhbWVyYShuYW1lLCBwb3NpdGlvbiwgc2NlbmUs
IHNldEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUpIHsKKyAgICAgICAgaWYgKHNldEFjdGl2ZU9u
U2NlbmVJZk5vbmVBY3RpdmUgPT09IHZvaWQgMCkgeyBzZXRBY3RpdmVPblNjZW5lSWZOb25lQWN0
aXZlID0gdHJ1ZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1l
LCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMu
X3Bvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgdmVjdG9y
IHRoZSBjYW1lcmEgc2hvdWxkIGNvbnNpZGVyIGFzIHVwLgorICAgICAgICAgKiAoZGVmYXVsdCBp
cyBWZWN0b3IzKDAsIDEsIDApIGFrYSBWZWN0b3IzLlVwKCkpCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy51cFZlY3RvciA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNV9fWyJWZWN0b3IzIl0uVXAoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZSB0aGUgY3VycmVudCBsaW1pdCBvbiB0aGUgbGVmdCBzaWRlIGZvciBhbiBvcnRob2dyYXBoaWMg
Y2FtZXJhCisgICAgICAgICAqIEluIHNjZW5lIHVuaXQKKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLm9ydGhvTGVmdCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhl
IGN1cnJlbnQgbGltaXQgb24gdGhlIHJpZ2h0IHNpZGUgZm9yIGFuIG9ydGhvZ3JhcGhpYyBjYW1l
cmEKKyAgICAgICAgICogSW4gc2NlbmUgdW5pdAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
b3J0aG9SaWdodCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGN1
cnJlbnQgbGltaXQgb24gdGhlIGJvdHRvbSBzaWRlIGZvciBhbiBvcnRob2dyYXBoaWMgY2FtZXJh
CisgICAgICAgICAqIEluIHNjZW5lIHVuaXQKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9y
dGhvQm90dG9tID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0aGUgY3Vy
cmVudCBsaW1pdCBvbiB0aGUgdG9wIHNpZGUgZm9yIGFuIG9ydGhvZ3JhcGhpYyBjYW1lcmEKKyAg
ICAgICAgICogSW4gc2NlbmUgdW5pdAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub3J0aG9U
b3AgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogRmllbGQgT2YgVmlldyBpcyBzZXQg
aW4gUmFkaWFucy4gKGRlZmF1bHQgaXMgMC44KQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
Zm92ID0gMC44OworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGRp
c3RhbmNlIHRoZSBjYW1lcmEgY2FuIHNlZSBmcm9tLgorICAgICAgICAgKiBUaGlzIGlzIGltcG9y
dGFudCB0byBub3RlIHRoYXQgdGhlIGRlcHRoIGJ1ZmZlciBhcmUgbm90IGluZmluaXRlIGFuZCB0
aGUgY2xvc2VyIGl0IHN0YXJ0cworICAgICAgICAgKiB0aGUgbW9yZSB5b3VyIHNjZW5lIG1pZ2h0
IGVuY291bnRlciBkZXB0aCBmaWdodGluZyBpc3N1ZS4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLm1pblogPSAxOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBtYXhpbXVt
IGRpc3RhbmNlIHRoZSBjYW1lcmEgY2FuIHNlZSB0by4KKyAgICAgICAgICogVGhpcyBpcyBpbXBv
cnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBkZXB0aCBidWZmZXIgYXJlIG5vdCBpbmZpbml0ZSBhbmQg
dGhlIGZ1cnRoZXIgaXQgZW5kCisgICAgICAgICAqIHRoZSBtb3JlIHlvdXIgc2NlbmUgbWlnaHQg
ZW5jb3VudGVyIGRlcHRoIGZpZ2h0aW5nIGlzc3VlLgorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMubWF4WiA9IDEwMDAwLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGRl
ZmF1bHQgaW5lcnRpYSBvZiB0aGUgY2FtZXJhLgorICAgICAgICAgKiBUaGlzIGhlbHBzIGdpdmlu
ZyBhIHNtb290aCBmZWVsaW5nIHRvIHRoZSBjYW1lcmEgbW92ZW1lbnQuCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5pbmVydGlhID0gMC45OworICAgICAgICAvKioKKyAgICAgICAgICogRGVm
aW5lIHRoZSBtb2RlIG9mIHRoZSBjYW1lcmEgKENhbWVyYS5QRVJTUEVDVElWRV9DQU1FUkEgb3Ig
Q2FtZXJhLk9SVEhPR1JBUEhJQ19DQU1FUkEpCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5t
b2RlID0gQ2FtZXJhLlBFUlNQRUNUSVZFX0NBTUVSQTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZSB3ZXRoZXIgdGhlIGNhbWVyYSBpcyBpbnRlcm1lZGlhdGUuCisgICAgICAgICAqIFRo
aXMgaXMgdXNlZnVsIHRvIG5vdCBwcmVzZW50IHRoZSBvdXRwdXQgZGlyZWN0bHkgdG8gdGhlIHNj
cmVlbiBpbiBjYXNlIG9mIHJpZyB3aXRob3V0IHBvc3QgcHJvY2VzcyBmb3IgaW5zdGFuY2UKKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLmlzSW50ZXJtZWRpYXRlID0gZmFsc2U7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIHZpZXdwb3J0IG9mIHRoZSBjYW1lcmEuCisgICAg
ICAgICAqIFRoaXMgY29ycmVzcG9uZCB0byB0aGUgcG9ydGlvbiBvZiB0aGUgc2NyZWVuIHRoZSBj
YW1lcmEgd2lsbCByZW5kZXIgdG8gaW4gbm9ybWFsaXplZCAwIHRvIDEgdW5pdC4KKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLnZpZXdwb3J0ID0gbmV3IF9NYXRoc19tYXRoX3ZpZXdwb3J0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJWaWV3cG9ydCJdKDAsIDAsIDEuMCwgMS4wKTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFJlc3RyaWN0cyB0aGUgY2FtZXJhIHRvIHZpZXdpbmcg
b2JqZWN0cyB3aXRoIHRoZSBzYW1lIGxheWVyTWFzay4KKyAgICAgICAgICogQSBjYW1lcmEgd2l0
aCBhIGxheWVyTWFzayBvZiAxIHdpbGwgcmVuZGVyIG1lc2gubGF5ZXJNYXNrICYgY2FtZXJhLmxh
eWVyTWFzayE9PSAwCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5sYXllck1hc2sgPSAweDBG
RkZGRkZGOworICAgICAgICAvKioKKyAgICAgICAgICogZm92TW9kZSBzZXRzIHRoZSBjYW1lcmEg
ZnJ1c3R1bSBib3VuZHMgdG8gdGhlIHZpZXdwb3J0IGJvdW5kcy4gKGRlZmF1bHQgaXMgRk9WTU9E
RV9WRVJUSUNBTF9GSVhFRCkKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmZvdk1vZGUgPSBD
YW1lcmEuRk9WTU9ERV9WRVJUSUNBTF9GSVhFRDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJp
ZyBtb2RlIG9mIHRoZSBjYW1lcmEuCisgICAgICAgICAqIFRoaXMgaXMgdXNlZnVsIHRvIGNyZWF0
ZSB0aGUgY2FtZXJhIHdpdGggdHdvICJleWVzIiBpbnN0ZWFkIG9mIG9uZSB0byBjcmVhdGUgVlIg
b3Igc3RlcmVvc2NvcGljIHNjZW5lcy4KKyAgICAgICAgICogVGhpcyBpcyBub3JtYWxseSBjb250
cm9sbGVkIGJ5dCB0aGUgY2FtZXJhIHRoZW1zZWx2ZXMgYXMgaW50ZXJuYWwgdXNlLgorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMuY2FtZXJhUmlnTW9kZSA9IENhbWVyYS5SSUdfTU9ERV9OT05F
OworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgbGlzdCBvZiBjdXN0b20gcmVu
ZGVyIHRhcmdldCB3aGljaCBhcmUgcmVuZGVyZWQgdG8gYW5kIHRoZW4gdXNlZCBhcyB0aGUgaW5w
dXQgdG8gdGhpcyBjYW1lcmEncyByZW5kZXIuIEVnLiBkaXNwbGF5IGFub3RoZXIgY2FtZXJhIHZp
ZXcgb24gYSBUViBpbiB0aGUgbWFpbiBzY2VuZQorICAgICAgICAgKiBUaGlzIGlzIHByZXR0eSBo
ZWxwZnVsbCBpZiB5b3Ugd2lzaCB0byBtYWtlIGEgY2FtZXJhIHJlbmRlciB0byBhIHRleHR1cmUg
eW91IGNvdWxkIHJldXNlIHNvbWV3aGVyZQorICAgICAgICAgKiBlbHNlIGluIHRoZSBzY2VuZS4g
KEVnLiBzZWN1cml0eSBjYW1lcmEpCisgICAgICAgICAqCisgICAgICAgICAqIFRvIGNoYW5nZSB0
aGUgZmluYWwgb3V0cHV0IHRhcmdldCBvZiB0aGUgY2FtZXJhLCBjYW1lcmEub3V0cHV0UmVuZGVy
VGFyZ2V0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQgKGVnLiB3ZWJYUiByZW5kZXJzIHRvIGEgcmVu
ZGVyIHRhcmdldCBjb3JyaXNwb25kaW5nIHRvIGFuIEhNRCkKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLmN1c3RvbVJlbmRlclRhcmdldHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFdoZW4gc2V0LCB0aGUgY2FtZXJhIHdpbGwgcmVuZGVyIHRvIHRoaXMgcmVuZGVy
IHRhcmdldCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGNhbnZhcworICAgICAgICAgKgorICAgICAg
ICAgKiBJZiB0aGUgZGVzaXJlIGlzIHRvIHVzZSB0aGUgb3V0cHV0IG9mIGEgY2FtZXJhIGFzIGEg
dGV4dHVyZSBpbiB0aGUgc2NlbmUgY29uc2lkZXIgdXNpbmcgY2FtZXJhLmN1c3RvbVJlbmRlclRh
cmdldHMgaW5zdGVhZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub3V0cHV0UmVuZGVyVGFy
Z2V0ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgdHJpZ2dlcmVk
IHdoZW4gdGhlIGNhbWVyYSB2aWV3IG1hdHJpeCBoYXMgY2hhbmdlZC4KKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLm9uVmlld01hdHJpeENoYW5nZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29i
c2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siT2JzZXJ2YWJsZSJdKCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxlIHRyaWdnZXJlZCB3aGVuIHRoZSBjYW1l
cmEgUHJvamVjdGlvbiBtYXRyaXggaGFzIGNoYW5nZWQuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5vblByb2plY3Rpb25NYXRyaXhDaGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNl
cnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk9ic2VydmFibGUiXSgpOworICAg
ICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSB0cmlnZ2VyZWQgd2hlbiB0aGUgaW5wdXRz
IGhhdmUgYmVlbiBwcm9jZXNzZWQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkFmdGVy
Q2hlY2tJbnB1dHNPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBPYnNlcnZhYmxlIHRyaWdnZXJlZCB3aGVuIHJlc2V0IGhhcyBiZWVuIGNhbGxlZCBhbmQgYXBw
bGllZCB0byB0aGUgY2FtZXJhLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25SZXN0b3Jl
U3RhdGVPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAg
ICAgIF90aGlzLl9yaWdDYW1lcmFzID0gbmV3IEFycmF5KCk7CisgICAgICAgIF90aGlzLl93ZWJ2
clZpZXdNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAg
ICAgX3RoaXMuX3NraXBSZW5kZXJpbmcgPSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICAgICAgX3RoaXMuX3Byb2plY3Rpb25NYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1hdHJpeCJdKCk7CisgICAgICAgIC8qKiBA
aGlkZGVuICovCisgICAgICAgIF90aGlzLl9wb3N0UHJvY2Vzc2VzID0gbmV3IEFycmF5KCk7Cisg
ICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9hY3RpdmVNZXNoZXMgPSBuZXcg
X01pc2Nfc21hcnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTbWFydEFycmF5
Il0oMjU2KTsKKyAgICAgICAgX3RoaXMuX2dsb2JhbFBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAg
ICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9jb21wdXRlZFZpZXdNYXRyaXggPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0cml4Il0u
SWRlbnRpdHkoKTsKKyAgICAgICAgX3RoaXMuX2RvTm90Q29tcHV0ZVByb2plY3Rpb25NYXRyaXgg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX3RyYW5zZm9ybU1hdHJpeCA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAg
ICAgIF90aGlzLl9yZWZyZXNoRnJ1c3R1bVBsYW5lcyA9IHRydWU7CisgICAgICAgIC8qKiBAaGlk
ZGVuICovCisgICAgICAgIF90aGlzLl9pc0NhbWVyYSA9IHRydWU7CisgICAgICAgIC8qKiBAaGlk
ZGVuICovCisgICAgICAgIF90aGlzLl9pc0xlZnRDYW1lcmEgPSBmYWxzZTsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2lzUmlnaHRDYW1lcmEgPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuZ2V0U2NlbmUoKS5hZGRDYW1lcmEoX3RoaXMpOworICAgICAgICBpZiAoc2V0QWN0
aXZlT25TY2VuZUlmTm9uZUFjdGl2ZSAmJiAhX3RoaXMuZ2V0U2NlbmUoKS5hY3RpdmVDYW1lcmEp
IHsKKyAgICAgICAgICAgIF90aGlzLmdldFNjZW5lKCkuYWN0aXZlQ2FtZXJhID0gX3RoaXM7Cisg
ICAgICAgIH0KKyAgICAgICAgX3RoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgcmV0
dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FtZXJhLnByb3Rv
dHlwZSwgInBvc2l0aW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBj
dXJyZW50IGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgaW4gdGhlIHNjZW5lCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9wb3NpdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UG9zaXRp
b24pIHsKKyAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3UG9zaXRpb247CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFN0b3JlIGN1cnJlbnQgY2FtZXJhIHN0YXRlIChm
b3YsIHBvc2l0aW9uLCBldGMuLikKKyAgICAgKiBAcmV0dXJucyB0aGUgY2FtZXJhCisgICAgICov
CisgICAgQ2FtZXJhLnByb3RvdHlwZS5zdG9yZVN0YXRlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB0aGlzLl9zdGF0ZVN0b3JlZCA9IHRydWU7CisgICAgICAgIHRoaXMuX3N0b3JlZEZvdiA9IHRo
aXMuZm92OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
c3RvcmVzIHRoZSBjYW1lcmEgc3RhdGUgdmFsdWVzIGlmIGl0IGhhcyBiZWVuIHN0b3JlZC4gWW91
IG11c3QgY2FsbCBzdG9yZVN0YXRlKCkgZmlyc3QKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90
eXBlLl9yZXN0b3JlU3RhdGVWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhp
cy5fc3RhdGVTdG9yZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLmZvdiA9IHRoaXMuX3N0b3JlZEZvdjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXN0b3JlZCBjYW1lcmEgc3RhdGUuIFlvdSBtdXN0
IGNhbGwgc3RvcmVTdGF0ZSgpIGZpcnN0LgorICAgICAqIEByZXR1cm5zIHRydWUgaWYgcmVzdG9y
ZWQgYW5kIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIENhbWVyYS5wcm90b3R5cGUucmVz
dG9yZVN0YXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fcmVzdG9yZVN0YXRl
VmFsdWVzKCkpIHsKKyAgICAgICAgICAgIHRoaXMub25SZXN0b3JlU3RhdGVPYnNlcnZhYmxlLm5v
dGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhl
IGNsYXNzIG5hbWUgb2YgdGhlIGNhbWVyYS4KKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFt
ZQorICAgICAqLworICAgIENhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gIkNhbWVyYSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjYW1lcmEgdXNlZnVsIGZvciBkZWJ1
ZyBwdXJwb3NlLgorICAgICAqIEBwYXJhbSBmdWxsRGV0YWlscyBEZWZpbmVzIHRoYXQgYSBtb3Jl
IHZlcmJvZSBsZXZlbCBvZiBsb2dnaW5nIGlzIHJlcXVpcmVkCisgICAgICogQHJldHVybnMgdGhl
IHN0cmluZyByZXByZXNlbnRhdGlvbgorICAgICAqLworICAgIENhbWVyYS5wcm90b3R5cGUudG9T
dHJpbmcgPSBmdW5jdGlvbiAoZnVsbERldGFpbHMpIHsKKyAgICAgICAgdmFyIHJldCA9ICJOYW1l
OiAiICsgdGhpcy5uYW1lOworICAgICAgICByZXQgKz0gIiwgdHlwZTogIiArIHRoaXMuZ2V0Q2xh
c3NOYW1lKCk7CisgICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbnMpIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hbmltYXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgcmV0ICs9ICIsIGFuaW1hdGlvblswXTogIiArIHRoaXMuYW5pbWF0aW9uc1tpXS50
b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGZ1bGxEZXRhaWxzKSB7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDYW1lcmEucHJvdG90eXBlLCAiZ2xvYmFsUG9z
aXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHdvcmxk
IHNwYWNlIHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEuCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbG9iYWxQb3NpdGlvbjsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGlzdCBvZiBhY3Rp
dmUgbWVzaGVzIHRoaXMgZnJhbWUgKG1lc2hlcyBubyBjdWxsZWQgb3IgZXhjbHVkZWQgYnkgbG9k
IHMgaW4gdGhlIGZyYW1lKQorICAgICAqIEByZXR1cm5zIHRoZSBhY3RpdmUgbWVzaGUgbGlzdAor
ICAgICAqLworICAgIENhbWVyYS5wcm90b3R5cGUuZ2V0QWN0aXZlTWVzaGVzID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlTWVzaGVzOworICAgIH07CisgICAgLyoq
CisgICAgICogQ2hlY2sgd2V0aGVyIGEgbWVzaCBpcyBwYXJ0IG9mIHRoZSBjdXJyZW50IGFjdGl2
ZSBtZXNoIGxpc3Qgb2YgdGhlIGNhbWVyYQorICAgICAqIEBwYXJhbSBtZXNoIERlZmluZXMgdGhl
IG1lc2ggdG8gY2hlY2sKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGFjdGl2ZSwgZmFsc2Ugb3Ro
ZXJ3aXNlCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5pc0FjdGl2ZU1lc2ggPSBmdW5j
dGlvbiAobWVzaCkgeworICAgICAgICByZXR1cm4gKHRoaXMuX2FjdGl2ZU1lc2hlcy5pbmRleE9m
KG1lc2gpICE9PSAtMSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJcyB0aGlzIGNhbWVyYSBy
ZWFkeSB0byBiZSB1c2VkL3JlbmRlcmVkCisgICAgICogQHBhcmFtIGNvbXBsZXRlQ2hlY2sgZGVm
aW5lcyBpZiBhIGNvbXBsZXRlIGNoZWNrIChpbmNsdWRpbmcgcG9zdCBwcm9jZXNzZXMpIGhhcyB0
byBiZSBkb25lIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUg
Y2FtZXJhIGlzIHJlYWR5CisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5pc1JlYWR5ID0g
ZnVuY3Rpb24gKGNvbXBsZXRlQ2hlY2spIHsKKyAgICAgICAgaWYgKGNvbXBsZXRlQ2hlY2sgPT09
IHZvaWQgMCkgeyBjb21wbGV0ZUNoZWNrID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGNvbXBsZXRl
Q2hlY2spIHsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9wb3N0UHJv
Y2Vzc2VzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZhciBwcCA9
IF9hW19pXTsKKyAgICAgICAgICAgICAgICBpZiAocHAgJiYgIXBwLmlzUmVhZHkoKSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmlzUmVh
ZHkuY2FsbCh0aGlzLCBjb21wbGV0ZUNoZWNrKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICov
CisgICAgQ2FtZXJhLnByb3RvdHlwZS5faW5pdENhY2hlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLl9pbml0Q2FjaGUuY2FsbCh0aGlzKTsKKyAgICAgICAgdGhpcy5f
Y2FjaGUucG9zaXRpb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlZlY3RvcjMiXShOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVF
LCBOdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICAgICAgdGhpcy5fY2FjaGUudXBWZWN0b3IgPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMi
XShOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFKTsK
KyAgICAgICAgdGhpcy5fY2FjaGUubW9kZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgdGhpcy5fY2Fj
aGUubWluWiA9IHVuZGVmaW5lZDsKKyAgICAgICAgdGhpcy5fY2FjaGUubWF4WiA9IHVuZGVmaW5l
ZDsKKyAgICAgICAgdGhpcy5fY2FjaGUuZm92ID0gdW5kZWZpbmVkOworICAgICAgICB0aGlzLl9j
YWNoZS5mb3ZNb2RlID0gdW5kZWZpbmVkOworICAgICAgICB0aGlzLl9jYWNoZS5hc3BlY3RSYXRp
byA9IHVuZGVmaW5lZDsKKyAgICAgICAgdGhpcy5fY2FjaGUub3J0aG9MZWZ0ID0gdW5kZWZpbmVk
OworICAgICAgICB0aGlzLl9jYWNoZS5vcnRob1JpZ2h0ID0gdW5kZWZpbmVkOworICAgICAgICB0
aGlzLl9jYWNoZS5vcnRob0JvdHRvbSA9IHVuZGVmaW5lZDsKKyAgICAgICAgdGhpcy5fY2FjaGUu
b3J0aG9Ub3AgPSB1bmRlZmluZWQ7CisgICAgICAgIHRoaXMuX2NhY2hlLnJlbmRlcldpZHRoID0g
dW5kZWZpbmVkOworICAgICAgICB0aGlzLl9jYWNoZS5yZW5kZXJIZWlnaHQgPSB1bmRlZmluZWQ7
CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIENhbWVyYS5wcm90b3R5cGUuX3VwZGF0
ZUNhY2hlID0gZnVuY3Rpb24gKGlnbm9yZVBhcmVudENsYXNzKSB7CisgICAgICAgIGlmICghaWdu
b3JlUGFyZW50Q2xhc3MpIHsKKyAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX3VwZGF0ZUNh
Y2hlLmNhbGwodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2FjaGUucG9zaXRpb24u
Y29weUZyb20odGhpcy5wb3NpdGlvbik7CisgICAgICAgIHRoaXMuX2NhY2hlLnVwVmVjdG9yLmNv
cHlGcm9tKHRoaXMudXBWZWN0b3IpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBD
YW1lcmEucHJvdG90eXBlLl9pc1N5bmNocm9uaXplZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2lzU3luY2hyb25pemVkVmlld01hdHJpeCgpICYmIHRoaXMuX2lzU3luY2hy
b25pemVkUHJvamVjdGlvbk1hdHJpeCgpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBDYW1lcmEucHJvdG90eXBlLl9pc1N5bmNocm9uaXplZFZpZXdNYXRyaXggPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICghX3N1cGVyLnByb3RvdHlwZS5faXNTeW5jaHJvbml6ZWQuY2FsbCh0
aGlzKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLl9jYWNoZS5wb3NpdGlvbi5lcXVhbHModGhpcy5wb3NpdGlvbikKKyAgICAgICAg
ICAgICYmIHRoaXMuX2NhY2hlLnVwVmVjdG9yLmVxdWFscyh0aGlzLnVwVmVjdG9yKQorICAgICAg
ICAgICAgJiYgdGhpcy5pc1N5bmNocm9uaXplZFdpdGhQYXJlbnQoKTsKKyAgICB9OworICAgIC8q
KiBAaGlkZGVuICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5faXNTeW5jaHJvbml6ZWRQcm9qZWN0
aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgY2hlY2sgPSB0aGlzLl9jYWNo
ZS5tb2RlID09PSB0aGlzLm1vZGUKKyAgICAgICAgICAgICYmIHRoaXMuX2NhY2hlLm1pblogPT09
IHRoaXMubWluWgorICAgICAgICAgICAgJiYgdGhpcy5fY2FjaGUubWF4WiA9PT0gdGhpcy5tYXha
OworICAgICAgICBpZiAoIWNoZWNrKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMuZ2V0RW5naW5lKCk7CisgICAgICAgIGlm
ICh0aGlzLm1vZGUgPT09IENhbWVyYS5QRVJTUEVDVElWRV9DQU1FUkEpIHsKKyAgICAgICAgICAg
IGNoZWNrID0gdGhpcy5fY2FjaGUuZm92ID09PSB0aGlzLmZvdgorICAgICAgICAgICAgICAgICYm
IHRoaXMuX2NhY2hlLmZvdk1vZGUgPT09IHRoaXMuZm92TW9kZQorICAgICAgICAgICAgICAgICYm
IHRoaXMuX2NhY2hlLmFzcGVjdFJhdGlvID09PSBlbmdpbmUuZ2V0QXNwZWN0UmF0aW8odGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjaGVjayA9IHRoaXMuX2Nh
Y2hlLm9ydGhvTGVmdCA9PT0gdGhpcy5vcnRob0xlZnQKKyAgICAgICAgICAgICAgICAmJiB0aGlz
Ll9jYWNoZS5vcnRob1JpZ2h0ID09PSB0aGlzLm9ydGhvUmlnaHQKKyAgICAgICAgICAgICAgICAm
JiB0aGlzLl9jYWNoZS5vcnRob0JvdHRvbSA9PT0gdGhpcy5vcnRob0JvdHRvbQorICAgICAgICAg
ICAgICAgICYmIHRoaXMuX2NhY2hlLm9ydGhvVG9wID09PSB0aGlzLm9ydGhvVG9wCisgICAgICAg
ICAgICAgICAgJiYgdGhpcy5fY2FjaGUucmVuZGVyV2lkdGggPT09IGVuZ2luZS5nZXRSZW5kZXJX
aWR0aCgpCisgICAgICAgICAgICAgICAgJiYgdGhpcy5fY2FjaGUucmVuZGVySGVpZ2h0ID09PSBl
bmdpbmUuZ2V0UmVuZGVySGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoZWNr
OworICAgIH07CisgICAgLyoqCisgICAgICogQXR0YWNoIHRoZSBpbnB1dCBjb250cm9scyB0byBh
IHNwZWNpZmljIGRvbSBlbGVtZW50IHRvIGdldCB0aGUgaW5wdXQgZnJvbS4KKyAgICAgKiBAcGFy
YW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVtZW50IHRoZSBjb250cm9scyBzaG91bGQgYmUgbGlz
dGVuZWQgZnJvbQorICAgICAqIEBwYXJhbSBub1ByZXZlbnREZWZhdWx0IERlZmluZXMgd2hldGhl
ciBldmVudCBjYXVnaHQgYnkgdGhlIGNvbnRyb2xzIHNob3VsZCBjYWxsIHByZXZlbnRkZWZhdWx0
KCkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVu
dC9wcmV2ZW50RGVmYXVsdCkKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLmF0dGFjaENv
bnRyb2wgPSBmdW5jdGlvbiAoZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCkgeworICAgIH07Cisg
ICAgLyoqCisgICAgICogRGV0YWNoIHRoZSBjdXJyZW50IGNvbnRyb2xzIGZyb20gdGhlIHNwZWNp
ZmllZCBkb20gZWxlbWVudC4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVt
ZW50IHRvIHN0b3AgbGlzdGVuaW5nIHRoZSBpbnB1dHMgZnJvbQorICAgICAqLworICAgIENhbWVy
YS5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGNhbWVyYSBzdGF0ZSBhY2NvcmRpbmcgdG8gdGhl
IGRpZmZlcmVudCBpbnB1dHMgZ2F0aGVyZWQgZHVyaW5nIHRoZSBmcmFtZS4KKyAgICAgKi8KKyAg
ICBDYW1lcmEucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5f
Y2hlY2tJbnB1dHMoKTsKKyAgICAgICAgaWYgKHRoaXMuY2FtZXJhUmlnTW9kZSAhPT0gQ2FtZXJh
LlJJR19NT0RFX05PTkUpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVJpZ0NhbWVyYXMoKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBDYW1lcmEucHJvdG90
eXBlLl9jaGVja0lucHV0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5vbkFmdGVyQ2hl
Y2tJbnB1dHNPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICB9OworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShDYW1lcmEucHJvdG90eXBlLCAicmlnQ2FtZXJhcyIsIHsKKyAg
ICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fcmlnQ2FtZXJhczsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KENhbWVyYS5wcm90b3R5cGUsICJyaWdQb3N0UHJvY2VzcyIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBvc3QgcHJvY2VzcyB1c2VkIGJ5IHRo
ZSByaWcgY2FtZXJhcworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fcmlnUG9zdFByb2Nlc3M7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIC8qKgorICAgICAqIEludGVybmFsLCBnZXRzIHRoZSBmaXJzdCBwb3N0IHByb2Nlcy4K
KyAgICAgKiBAcmV0dXJucyB0aGUgZmlyc3QgcG9zdCBwcm9jZXNzIHRvIGJlIHJ1biBvbiB0aGlz
IGNhbWVyYS4KKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLl9nZXRGaXJzdFBvc3RQcm9j
ZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBwcEluZGV4ID0gMDsgcHBJbmRl
eCA8IHRoaXMuX3Bvc3RQcm9jZXNzZXMubGVuZ3RoOyBwcEluZGV4KyspIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9wb3N0UHJvY2Vzc2VzW3BwSW5kZXhdICE9PSBudWxsKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3Bvc3RQcm9jZXNzZXNbcHBJbmRleF07CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICBDYW1lcmEucHJv
dG90eXBlLl9jYXNjYWRlUG9zdFByb2Nlc3Nlc1RvUmlnQ2FtcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgLy8gaW52YWxpZGF0ZSBmcmFtZWJ1ZmZlcgorICAgICAgICB2YXIgZmlyc3RQb3N0UHJv
Y2VzcyA9IHRoaXMuX2dldEZpcnN0UG9zdFByb2Nlc3MoKTsKKyAgICAgICAgaWYgKGZpcnN0UG9z
dFByb2Nlc3MpIHsKKyAgICAgICAgICAgIGZpcnN0UG9zdFByb2Nlc3MubWFya1RleHR1cmVEaXJ0
eSgpOworICAgICAgICB9CisgICAgICAgIC8vIGdsdWUgdGhlIHJpZ1Bvc3RQcm9jZXNzIHRvIHRo
ZSBlbmQgb2YgdGhlIHVzZXIgcG9zdHByb2Nlc3NlcyAmIGFzc2lnbiB0byBlYWNoIHN1Yi1jYW1l
cmEKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3JpZ0NhbWVyYXMubGVuZ3Ro
OyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjYW0gPSB0aGlzLl9yaWdDYW1lcmFz
W2ldOworICAgICAgICAgICAgdmFyIHJpZ1Bvc3RQcm9jZXNzID0gY2FtLl9yaWdQb3N0UHJvY2Vz
czsKKyAgICAgICAgICAgIC8vIGZvciBWUiByaWcsIHRoZXJlIGRvZXMgbm90IGhhdmUgdG8gYmUg
YSBwb3N0IHByb2Nlc3MKKyAgICAgICAgICAgIGlmIChyaWdQb3N0UHJvY2VzcykgeworICAgICAg
ICAgICAgICAgIHZhciBpc1Bhc3MgPSByaWdQb3N0UHJvY2Vzcy5nZXRFZmZlY3ROYW1lKCkgPT09
ICJwYXNzIjsKKyAgICAgICAgICAgICAgICBpZiAoaXNQYXNzKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIGFueSByaWcgd2hpY2ggaGFzIGEgUGFzc1Bvc3RQcm9jZXNzIGZvciByaWdbMF0sIGNh
bm5vdCBiZSBpc0ludGVybWVkaWF0ZSB3aGVuIHRoZXJlIGFyZSBhbHNvIHVzZXIgcG9zdFByb2Nl
c3NlcworICAgICAgICAgICAgICAgICAgICBjYW0uaXNJbnRlcm1lZGlhdGUgPSB0aGlzLl9wb3N0
UHJvY2Vzc2VzLmxlbmd0aCA9PT0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY2FtLl9wb3N0UHJvY2Vzc2VzID0gdGhpcy5fcG9zdFByb2Nlc3Nlcy5zbGljZSgwKS5jb25j
YXQocmlnUG9zdFByb2Nlc3MpOworICAgICAgICAgICAgICAgIHJpZ1Bvc3RQcm9jZXNzLm1hcmtU
ZXh0dXJlRGlydHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGNhbS5fcG9zdFByb2Nlc3NlcyA9IHRoaXMuX3Bvc3RQcm9jZXNzZXMuc2xpY2Uo
MCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEF0
dGFjaCBhIHBvc3QgcHJvY2VzcyB0byB0aGUgY2FtZXJhLgorICAgICAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNzZXMjYXR0YWNoLXBv
c3Rwcm9jZXNzCisgICAgICogQHBhcmFtIHBvc3RQcm9jZXNzIFRoZSBwb3N0IHByb2Nlc3MgdG8g
YXR0YWNoIHRvIHRoZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gaW5zZXJ0QXQgVGhlIHBvc2l0aW9u
IG9mIHRoZSBwb3N0IHByb2Nlc3MgaW4gY2FzZSBzZXZlcmFsIG9mIHRoZW0gYXJlIGluIHVzZSBp
biB0aGUgc2NlbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgcG9zaXRpb24gdGhlIHBvc3QgcHJvY2Vz
cyBoYXMgYmVlbiBpbnNlcnRlZCBhdAorICAgICAqLworICAgIENhbWVyYS5wcm90b3R5cGUuYXR0
YWNoUG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAocG9zdFByb2Nlc3MsIGluc2VydEF0KSB7CisgICAg
ICAgIGlmIChpbnNlcnRBdCA9PT0gdm9pZCAwKSB7IGluc2VydEF0ID0gbnVsbDsgfQorICAgICAg
ICBpZiAoIXBvc3RQcm9jZXNzLmlzUmV1c2FibGUoKSAmJiB0aGlzLl9wb3N0UHJvY2Vzc2VzLmlu
ZGV4T2YocG9zdFByb2Nlc3MpID4gLTEpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJMb2dnZXIiXS5FcnJvcigiWW91J3JlIHRyeWluZyB0
byByZXVzZSBhIHBvc3QgcHJvY2VzcyBub3QgZGVmaW5lZCBhcyByZXVzYWJsZS4iKTsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChpbnNlcnRBdCA9PSBudWxs
IHx8IGluc2VydEF0IDwgMCkgeworICAgICAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3Nlcy5wdXNo
KHBvc3RQcm9jZXNzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLl9wb3N0UHJv
Y2Vzc2VzW2luc2VydEF0XSA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5fcG9zdFByb2Nl
c3Nlc1tpbnNlcnRBdF0gPSBwb3N0UHJvY2VzczsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzZXMuc3BsaWNlKGluc2VydEF0LCAwLCBwb3N0
UHJvY2Vzcyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2FzY2FkZVBvc3RQcm9jZXNzZXNU
b1JpZ0NhbXMoKTsgLy8gYWxzbyBlbnN1cmVzIGZyYW1lYnVmZmVyIGludmFsaWRhdGVkCisgICAg
ICAgIHJldHVybiB0aGlzLl9wb3N0UHJvY2Vzc2VzLmluZGV4T2YocG9zdFByb2Nlc3MpOworICAg
IH07CisgICAgLyoqCisgICAgICogRGV0YWNoIGEgcG9zdCBwcm9jZXNzIHRvIHRoZSBjYW1lcmEu
CisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vf
cG9zdHByb2Nlc3NlcyNhdHRhY2gtcG9zdHByb2Nlc3MKKyAgICAgKiBAcGFyYW0gcG9zdFByb2Nl
c3MgVGhlIHBvc3QgcHJvY2VzcyB0byBkZXRhY2ggZnJvbSB0aGUgY2FtZXJhCisgICAgICovCisg
ICAgQ2FtZXJhLnByb3RvdHlwZS5kZXRhY2hQb3N0UHJvY2VzcyA9IGZ1bmN0aW9uIChwb3N0UHJv
Y2VzcykgeworICAgICAgICB2YXIgaWR4ID0gdGhpcy5fcG9zdFByb2Nlc3Nlcy5pbmRleE9mKHBv
c3RQcm9jZXNzKTsKKyAgICAgICAgaWYgKGlkeCAhPT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMu
X3Bvc3RQcm9jZXNzZXNbaWR4XSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2Fz
Y2FkZVBvc3RQcm9jZXNzZXNUb1JpZ0NhbXMoKTsgLy8gYWxzbyBlbnN1cmVzIGZyYW1lYnVmZmVy
IGludmFsaWRhdGVkCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHdv
cmxkIG1hdHJpeCBvZiB0aGUgY2FtZXJhCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5n
ZXRXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2lzU3luY2hy
b25pemVkVmlld01hdHJpeCgpKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRNYXRy
aXg7CisgICAgICAgIH0KKyAgICAgICAgLy8gR2V0dGluZyB0aGUgdGhlIHZpZXcgbWF0cml4IHdp
bGwgYWxzbyBjb21wdXRlIHRoZSB3b3JsZCBtYXRyaXguCisgICAgICAgIHRoaXMuZ2V0Vmlld01h
dHJpeCgpOworICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRNYXRyaXg7CisgICAgfTsKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIENhbWVyYS5wcm90b3R5cGUuX2dldFZpZXdNYXRyaXggPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEdldHMgdGhlIGN1cnJlbnQgdmlldyBtYXRyaXggb2YgdGhlIGNhbWVyYS4KKyAgICAg
KiBAcGFyYW0gZm9yY2UgZm9yY2VzIHRoZSBjYW1lcmEgdG8gcmVjb21wdXRlIHRoZSBtYXRyaXgg
d2l0aG91dCBsb29raW5nIGF0IHRoZSBjYWNoZWQgc3RhdGUKKyAgICAgKiBAcmV0dXJucyB0aGUg
dmlldyBtYXRyaXgKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLmdldFZpZXdNYXRyaXgg
PSBmdW5jdGlvbiAoZm9yY2UpIHsKKyAgICAgICAgaWYgKCFmb3JjZSAmJiB0aGlzLl9pc1N5bmNo
cm9uaXplZFZpZXdNYXRyaXgoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVk
Vmlld01hdHJpeDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7CisgICAg
ICAgIHRoaXMuX2NvbXB1dGVkVmlld01hdHJpeCA9IHRoaXMuX2dldFZpZXdNYXRyaXgoKTsKKyAg
ICAgICAgdGhpcy5fY3VycmVudFJlbmRlcklkID0gdGhpcy5nZXRTY2VuZSgpLmdldFJlbmRlcklk
KCk7CisgICAgICAgIHRoaXMuX2NoaWxkVXBkYXRlSWQrKzsKKyAgICAgICAgdGhpcy5fcmVmcmVz
aEZydXN0dW1QbGFuZXMgPSB0cnVlOworICAgICAgICBpZiAodGhpcy5fY2FtZXJhUmlnUGFyYW1z
ICYmIHRoaXMuX2NhbWVyYVJpZ1BhcmFtcy52clByZVZpZXdNYXRyaXgpIHsKKyAgICAgICAgICAg
IHRoaXMuX2NvbXB1dGVkVmlld01hdHJpeC5tdWx0aXBseVRvUmVmKHRoaXMuX2NhbWVyYVJpZ1Bh
cmFtcy52clByZVZpZXdNYXRyaXgsIHRoaXMuX2NvbXB1dGVkVmlld01hdHJpeCk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gTm90aWZ5IHBhcmVudCBjYW1lcmEgaWYgcmlnIGNhbWVyYSBpcyBjaGFu
Z2VkCisgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5vblZpZXdNYXRyaXhD
aGFuZ2VkT2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgdGhpcy5wYXJlbnQub25WaWV3TWF0cml4
Q2hhbmdlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMucGFyZW50KTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLm9uVmlld01hdHJpeENoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2Vy
dmVycyh0aGlzKTsKKyAgICAgICAgdGhpcy5fY29tcHV0ZWRWaWV3TWF0cml4LmludmVydFRvUmVm
KHRoaXMuX3dvcmxkTWF0cml4KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVkVmlld01h
dHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEZyZWV6ZSB0aGUgcHJvamVjdGlvbiBtYXRy
aXguCisgICAgICogSXQgd2lsbCBwcmV2ZW50IHRoZSBjYWNoZSBjaGVjayBvZiB0aGUgY2FtZXJh
IHByb2plY3Rpb24gY29tcHV0ZSBhbmQgY2FuIHNwZWVkIHVwIHBlcmYKKyAgICAgKiBpZiBubyBw
YXJhbWV0ZXIgb2YgdGhlIGNhbWVyYSBhcmUgbWVhbnQgdG8gY2hhbmdlCisgICAgICogQHBhcmFt
IHByb2plY3Rpb24gRGVmaW5lcyBtYW51YWxseSBhIHByb2plY3Rpb24gaWYgbmVjZXNzYXJ5Cisg
ICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5mcmVlemVQcm9qZWN0aW9uTWF0cml4ID0gZnVu
Y3Rpb24gKHByb2plY3Rpb24pIHsKKyAgICAgICAgdGhpcy5fZG9Ob3RDb21wdXRlUHJvamVjdGlv
bk1hdHJpeCA9IHRydWU7CisgICAgICAgIGlmIChwcm9qZWN0aW9uICE9PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb25NYXRyaXggPSBwcm9qZWN0aW9uOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVbmZyZWV6ZSB0aGUgcHJvamVjdGlvbiBtYXRy
aXggaWYgaXQgaGFzIHByZXZpb3VzbHkgYmVlbiBmcmVlemVkIGJ5IGZyZWV6ZVByb2plY3Rpb25N
YXRyaXguCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS51bmZyZWV6ZVByb2plY3Rpb25N
YXRyaXggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2RvTm90Q29tcHV0ZVByb2plY3Rp
b25NYXRyaXggPSBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJl
bnQgcHJvamVjdGlvbiBtYXRyaXggb2YgdGhlIGNhbWVyYS4KKyAgICAgKiBAcGFyYW0gZm9yY2Ug
Zm9yY2VzIHRoZSBjYW1lcmEgdG8gcmVjb21wdXRlIHRoZSBtYXRyaXggd2l0aG91dCBsb29raW5n
IGF0IHRoZSBjYWNoZWQgc3RhdGUKKyAgICAgKiBAcmV0dXJucyB0aGUgcHJvamVjdGlvbiBtYXRy
aXgKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLmdldFByb2plY3Rpb25NYXRyaXggPSBm
dW5jdGlvbiAoZm9yY2UpIHsKKyAgICAgICAgaWYgKHRoaXMuX2RvTm90Q29tcHV0ZVByb2plY3Rp
b25NYXRyaXggfHwgKCFmb3JjZSAmJiB0aGlzLl9pc1N5bmNocm9uaXplZFByb2plY3Rpb25NYXRy
aXgoKSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9qZWN0aW9uTWF0cml4OworICAg
ICAgICB9CisgICAgICAgIC8vIENhY2hlCisgICAgICAgIHRoaXMuX2NhY2hlLm1vZGUgPSB0aGlz
Lm1vZGU7CisgICAgICAgIHRoaXMuX2NhY2hlLm1pblogPSB0aGlzLm1pblo7CisgICAgICAgIHRo
aXMuX2NhY2hlLm1heFogPSB0aGlzLm1heFo7CisgICAgICAgIC8vIE1hdHJpeAorICAgICAgICB0
aGlzLl9yZWZyZXNoRnJ1c3R1bVBsYW5lcyA9IHRydWU7CisgICAgICAgIHZhciBlbmdpbmUgPSB0
aGlzLmdldEVuZ2luZSgpOworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7Cisg
ICAgICAgIGlmICh0aGlzLm1vZGUgPT09IENhbWVyYS5QRVJTUEVDVElWRV9DQU1FUkEpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2NhY2hlLmZvdiA9IHRoaXMuZm92OworICAgICAgICAgICAgdGhpcy5f
Y2FjaGUuZm92TW9kZSA9IHRoaXMuZm92TW9kZTsKKyAgICAgICAgICAgIHRoaXMuX2NhY2hlLmFz
cGVjdFJhdGlvID0gZW5naW5lLmdldEFzcGVjdFJhdGlvKHRoaXMpOworICAgICAgICAgICAgaWYg
KHRoaXMubWluWiA8PSAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5taW5aID0gMC4xOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjZW5lLnVzZVJpZ2h0SGFuZGVkU3lzdGVtKSB7
CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIk1hdHJpeCJdLlBlcnNwZWN0aXZlRm92UkhUb1JlZih0aGlzLmZvdiwgZW5naW5l
LmdldEFzcGVjdFJhdGlvKHRoaXMpLCB0aGlzLm1pblosIHRoaXMubWF4WiwgdGhpcy5fcHJvamVj
dGlvbk1hdHJpeCwgdGhpcy5mb3ZNb2RlID09PSBDYW1lcmEuRk9WTU9ERV9WRVJUSUNBTF9GSVhF
RCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0cml4Il0u
UGVyc3BlY3RpdmVGb3ZMSFRvUmVmKHRoaXMuZm92LCBlbmdpbmUuZ2V0QXNwZWN0UmF0aW8odGhp
cyksIHRoaXMubWluWiwgdGhpcy5tYXhaLCB0aGlzLl9wcm9qZWN0aW9uTWF0cml4LCB0aGlzLmZv
dk1vZGUgPT09IENhbWVyYS5GT1ZNT0RFX1ZFUlRJQ0FMX0ZJWEVEKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBoYWxmV2lkdGggPSBl
bmdpbmUuZ2V0UmVuZGVyV2lkdGgoKSAvIDIuMDsKKyAgICAgICAgICAgIHZhciBoYWxmSGVpZ2h0
ID0gZW5naW5lLmdldFJlbmRlckhlaWdodCgpIC8gMi4wOworICAgICAgICAgICAgaWYgKHNjZW5l
LnVzZVJpZ2h0SGFuZGVkU3lzdGVtKSB7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1hdHJpeCJdLk9ydGhvT2ZmQ2VudGVy
UkhUb1JlZih0aGlzLm9ydGhvTGVmdCB8fCAtaGFsZldpZHRoLCB0aGlzLm9ydGhvUmlnaHQgfHwg
aGFsZldpZHRoLCB0aGlzLm9ydGhvQm90dG9tIHx8IC1oYWxmSGVpZ2h0LCB0aGlzLm9ydGhvVG9w
IHx8IGhhbGZIZWlnaHQsIHRoaXMubWluWiwgdGhpcy5tYXhaLCB0aGlzLl9wcm9qZWN0aW9uTWF0
cml4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRyaXgi
XS5PcnRob09mZkNlbnRlckxIVG9SZWYodGhpcy5vcnRob0xlZnQgfHwgLWhhbGZXaWR0aCwgdGhp
cy5vcnRob1JpZ2h0IHx8IGhhbGZXaWR0aCwgdGhpcy5vcnRob0JvdHRvbSB8fCAtaGFsZkhlaWdo
dCwgdGhpcy5vcnRob1RvcCB8fCBoYWxmSGVpZ2h0LCB0aGlzLm1pblosIHRoaXMubWF4WiwgdGhp
cy5fcHJvamVjdGlvbk1hdHJpeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9j
YWNoZS5vcnRob0xlZnQgPSB0aGlzLm9ydGhvTGVmdDsKKyAgICAgICAgICAgIHRoaXMuX2NhY2hl
Lm9ydGhvUmlnaHQgPSB0aGlzLm9ydGhvUmlnaHQ7CisgICAgICAgICAgICB0aGlzLl9jYWNoZS5v
cnRob0JvdHRvbSA9IHRoaXMub3J0aG9Cb3R0b207CisgICAgICAgICAgICB0aGlzLl9jYWNoZS5v
cnRob1RvcCA9IHRoaXMub3J0aG9Ub3A7CisgICAgICAgICAgICB0aGlzLl9jYWNoZS5yZW5kZXJX
aWR0aCA9IGVuZ2luZS5nZXRSZW5kZXJXaWR0aCgpOworICAgICAgICAgICAgdGhpcy5fY2FjaGUu
cmVuZGVySGVpZ2h0ID0gZW5naW5lLmdldFJlbmRlckhlaWdodCgpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMub25Qcm9qZWN0aW9uTWF0cml4Q2hhbmdlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2
ZXJzKHRoaXMpOworICAgICAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbk1hdHJpeDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCAoaWUuIHRo
ZSBtdWx0aXBsaWNhdGlvbiBvZiB2aWV3IGJ5IHByb2plY3Rpb24gbWF0cmljZXMpCisgICAgICog
QHJldHVybnMgYSBNYXRyaXgKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLmdldFRyYW5z
Zm9ybWF0aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jb21wdXRlZFZp
ZXdNYXRyaXgubXVsdGlwbHlUb1JlZih0aGlzLl9wcm9qZWN0aW9uTWF0cml4LCB0aGlzLl90cmFu
c2Zvcm1NYXRyaXgpOworICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtTWF0cml4OworICAg
IH07CisgICAgQ2FtZXJhLnByb3RvdHlwZS5fdXBkYXRlRnJ1c3R1bVBsYW5lcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9yZWZyZXNoRnJ1c3R1bVBsYW5lcykgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuZ2V0VHJhbnNmb3JtYXRpb25N
YXRyaXgoKTsKKyAgICAgICAgaWYgKCF0aGlzLl9mcnVzdHVtUGxhbmVzKSB7CisgICAgICAgICAg
ICB0aGlzLl9mcnVzdHVtUGxhbmVzID0gX01hdGhzX21hdGhfZnJ1c3R1bV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTFfX1siRnJ1c3R1bSJdLkdldFBsYW5lcyh0aGlzLl90cmFuc2Zvcm1NYXRy
aXgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX01hdGhzX21hdGhf
ZnJ1c3R1bV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siRnJ1c3R1bSJdLkdldFBsYW5l
c1RvUmVmKHRoaXMuX3RyYW5zZm9ybU1hdHJpeCwgdGhpcy5fZnJ1c3R1bVBsYW5lcyk7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fcmVmcmVzaEZydXN0dW1QbGFuZXMgPSBmYWxzZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBhIGN1bGxhYmxlIG9iamVjdCAobWVzaC4uLikg
aXMgaW4gdGhlIGNhbWVyYSBmcnVzdHVtCisgICAgICogVGhpcyBjaGVja3MgdGhlIGJvdW5kaW5n
IGJveCBjZW50ZXIuIFNlZSBpc0NvbXBsZXRlbHlJbkZydXN0dW0gZm9yIGEgZnVsbCBib3VuZGlu
ZyBjaGVjaworICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0byBjaGVjaworICAgICAq
IEBwYXJhbSBjaGVja1JpZ0NhbWVyYXMgSWYgdGhlIHJpZyBjYW1lcmFzIHNob3VsZCBiZSBjaGVj
a2VkIChlZy4gd2l0aCB3ZWJWUiBjYW1lcmEgYm90aCBleWVzIHNob3VsZCBiZSBjaGVja2VkKSAo
RGVmYXVsdDogZmFsc2UpCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGlu
IGZydXN0dW0gb3RoZXJ3aXNlIGZhbHNlCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5p
c0luRnJ1c3R1bSA9IGZ1bmN0aW9uICh0YXJnZXQsIGNoZWNrUmlnQ2FtZXJhcykgeworICAgICAg
ICBpZiAoY2hlY2tSaWdDYW1lcmFzID09PSB2b2lkIDApIHsgY2hlY2tSaWdDYW1lcmFzID0gZmFs
c2U7IH0KKyAgICAgICAgdGhpcy5fdXBkYXRlRnJ1c3R1bVBsYW5lcygpOworICAgICAgICBpZiAo
Y2hlY2tSaWdDYW1lcmFzICYmIHRoaXMucmlnQ2FtZXJhcy5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLnJpZ0NhbWVyYXMuZm9y
RWFjaChmdW5jdGlvbiAoY2FtKSB7CisgICAgICAgICAgICAgICAgY2FtLl91cGRhdGVGcnVzdHVt
UGxhbmVzKCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRhcmdldC5pc0lu
RnJ1c3R1bShjYW0uX2ZydXN0dW1QbGFuZXMpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuIHRhcmdldC5pc0luRnJ1c3R1bSh0aGlzLl9mcnVzdHVtUGxhbmVzKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIGEgY3VsbGFibGUgb2JqZWN0ICht
ZXNoLi4uKSBpcyBpbiB0aGUgY2FtZXJhIGZydXN0dW0KKyAgICAgKiBVbmxpa2UgaXNJbkZydXN0
dW0gdGhpcyBjaGVrcyB0aGUgZnVsbCBib3VuZGluZyBib3gKKyAgICAgKiBAcGFyYW0gdGFyZ2V0
IFRoZSBvYmplY3QgdG8gY2hlY2sKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3Qg
aXMgaW4gZnJ1c3R1bSBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90
eXBlLmlzQ29tcGxldGVseUluRnJ1c3R1bSA9IGZ1bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAg
dGhpcy5fdXBkYXRlRnJ1c3R1bVBsYW5lcygpOworICAgICAgICByZXR1cm4gdGFyZ2V0LmlzQ29t
cGxldGVseUluRnJ1c3R1bSh0aGlzLl9mcnVzdHVtUGxhbmVzKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEdldHMgYSByYXkgaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uIGZyb20gdGhlIGNhbWVy
YS4KKyAgICAgKiBAcGFyYW0gbGVuZ3RoIERlZmluZXMgdGhlIGxlbmd0aCBvZiB0aGUgcmF5IHRv
IGNyZWF0ZQorICAgICAqIEBwYXJhbSB0cmFuc2Zvcm0gRGVmaW5lcyB0aGUgdHJhbnNmb3JtIHRv
IGFwcGx5IHRvIHRoZSByYXksIGJ5IGRlZmF1bHQgdGhlIHdvcmxkIG1hdHJ4IGlzIHVzZWQgdG8g
Y3JlYXRlIGEgd29ya2Qgc3BhY2UgcmF5CisgICAgICogQHBhcmFtIG9yaWdpbiBEZWZpbmVzIHRo
ZSBzdGFydCBwb2ludCBvZiB0aGUgcmF5IHdoaWNoIGRlZmF1bHRzIHRvIHRoZSBjYW1lcmEgcG9z
aXRpb24KKyAgICAgKiBAcmV0dXJucyB0aGUgZm9yd2FyZCByYXkKKyAgICAgKi8KKyAgICBDYW1l
cmEucHJvdG90eXBlLmdldEZvcndhcmRSYXkgPSBmdW5jdGlvbiAobGVuZ3RoLCB0cmFuc2Zvcm0s
IG9yaWdpbikgeworICAgICAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsgbGVuZ3RoID0gMTAw
OyB9CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIlJheSIpOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmVsZWFzZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5vZGUuCisgICAg
ICogQHBhcmFtIGRvTm90UmVjdXJzZSBTZXQgdG8gdHJ1ZSB0byBub3QgcmVjdXJzZSBpbnRvIGVh
Y2ggY2hpbGRyZW4gKHJlY3Vyc2UgaW50byBlYWNoIGNoaWxkcmVuIGJ5IGRlZmF1bHQpCisgICAg
ICogQHBhcmFtIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzIFNldCB0byB0cnVlIHRvIGFsc28g
ZGlzcG9zZSByZWZlcmVuY2VkIG1hdGVyaWFscyBhbmQgdGV4dHVyZXMgKGZhbHNlIGJ5IGRlZmF1
bHQpCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGRv
Tm90UmVjdXJzZSwgZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMpIHsKKyAgICAgICAgaWYgKGRp
c3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzID09PSB2b2lkIDApIHsgZGlzcG9zZU1hdGVyaWFsQW5k
VGV4dHVyZXMgPSBmYWxzZTsgfQorICAgICAgICAvLyBPYnNlcnZhYmxlcworICAgICAgICB0aGlz
Lm9uVmlld01hdHJpeENoYW5nZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25Q
cm9qZWN0aW9uTWF0cml4Q2hhbmdlZE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5v
bkFmdGVyQ2hlY2tJbnB1dHNPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25SZXN0
b3JlU3RhdGVPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIC8vIElucHV0cworICAgICAgICBp
ZiAodGhpcy5pbnB1dHMpIHsKKyAgICAgICAgICAgIHRoaXMuaW5wdXRzLmNsZWFyKCk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gQW5pbWF0aW9ucworICAgICAgICB0aGlzLmdldFNjZW5lKCkuc3Rv
cEFuaW1hdGlvbih0aGlzKTsKKyAgICAgICAgLy8gUmVtb3ZlIGZyb20gc2NlbmUKKyAgICAgICAg
dGhpcy5nZXRTY2VuZSgpLnJlbW92ZUNhbWVyYSh0aGlzKTsKKyAgICAgICAgd2hpbGUgKHRoaXMu
X3JpZ0NhbWVyYXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMu
X3JpZ0NhbWVyYXMucG9wKCk7CisgICAgICAgICAgICBpZiAoY2FtZXJhKSB7CisgICAgICAgICAg
ICAgICAgY2FtZXJhLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAvLyBQb3N0cHJvY2Vzc2VzCisgICAgICAgIGlmICh0aGlzLl9yaWdQb3N0UHJvY2Vzcykgewor
ICAgICAgICAgICAgdGhpcy5fcmlnUG9zdFByb2Nlc3MuZGlzcG9zZSh0aGlzKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JpZ1Bvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3Bvc3RQ
cm9jZXNzZXMgPSBbXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLmNhbWVyYVJp
Z01vZGUgIT09IENhbWVyYS5SSUdfTU9ERV9OT05FKSB7CisgICAgICAgICAgICB0aGlzLl9yaWdQ
b3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2VzID0gW107
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgaSA9IHRoaXMuX3Bv
c3RQcm9jZXNzZXMubGVuZ3RoOworICAgICAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHBvc3RQcm9jZXNzID0gdGhpcy5fcG9zdFByb2Nlc3Nlc1tpXTsKKyAg
ICAgICAgICAgICAgICBpZiAocG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9z
dFByb2Nlc3MuZGlzcG9zZSh0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVuZGVyIHRhcmdldHMKKyAgICAgICAgdmFyIGkgPSB0
aGlzLmN1c3RvbVJlbmRlclRhcmdldHMubGVuZ3RoOworICAgICAgICB3aGlsZSAoLS1pID49IDAp
IHsKKyAgICAgICAgICAgIHRoaXMuY3VzdG9tUmVuZGVyVGFyZ2V0c1tpXS5kaXNwb3NlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5jdXN0b21SZW5kZXJUYXJnZXRzID0gW107CisgICAgICAg
IC8vIEFjdGl2ZSBNZXNoZXMKKyAgICAgICAgdGhpcy5fYWN0aXZlTWVzaGVzLmRpc3Bvc2UoKTsK
KyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcywgZG9Ob3RSZWN1cnNl
LCBkaXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcyk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoQ2FtZXJhLnByb3RvdHlwZSwgImlzTGVmdENhbWVyYSIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIGxlZnQgY2FtZXJhIG9mIGEgcmlnIHNldHVwIGluIGNhc2Ug
b2YgUmlnZ2VkIENhbWVyYQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNMZWZ0Q2FtZXJhOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FtZXJhLnByb3RvdHlwZSwgImlzUmlnaHRD
YW1lcmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByaWdodCBjYW1lcmEg
b2YgYSByaWcgc2V0dXAgaW4gY2FzZSBvZiBSaWdnZWQgQ2FtZXJhCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1JpZ2h0
Q2FtZXJhOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2Ft
ZXJhLnByb3RvdHlwZSwgImxlZnRDYW1lcmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHRoZSBsZWZ0IGNhbWVyYSBvZiBhIHJpZyBzZXR1cCBpbiBjYXNlIG9mIFJpZ2dlZCBDYW1l
cmEKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX3JpZ0NhbWVyYXMubGVuZ3RoIDwgMSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ0NhbWVy
YXNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDYW1l
cmEucHJvdG90eXBlLCAicmlnaHRDYW1lcmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHRoZSByaWdodCBjYW1lcmEgb2YgYSByaWcgc2V0dXAgaW4gY2FzZSBvZiBSaWdnZWQgQ2Ft
ZXJhCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9yaWdDYW1lcmFzLmxlbmd0aCA8IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yaWdDYW1l
cmFzWzFdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBsZWZ0
IGNhbWVyYSB0YXJnZXQgb2YgYSByaWcgc2V0dXAgaW4gY2FzZSBvZiBSaWdnZWQgQ2FtZXJhCisg
ICAgICogQHJldHVybnMgdGhlIHRhcmdldCBwb3NpdGlvbgorICAgICAqLworICAgIENhbWVyYS5w
cm90b3R5cGUuZ2V0TGVmdFRhcmdldCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMu
X3JpZ0NhbWVyYXMubGVuZ3RoIDwgMSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ0NhbWVyYXNbMF0uZ2V0VGFyZ2V0KCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByaWdodCBjYW1lcmEgdGFyZ2V0IG9mIGEg
cmlnIHNldHVwIGluIGNhc2Ugb2YgUmlnZ2VkIENhbWVyYQorICAgICAqIEByZXR1cm5zIHRoZSB0
YXJnZXQgcG9zaXRpb24KKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLmdldFJpZ2h0VGFy
Z2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fcmlnQ2FtZXJhcy5sZW5ndGgg
PCAyKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdGhpcy5fcmlnQ2FtZXJhc1sxXS5nZXRUYXJnZXQoKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLnNldENhbWVyYVJpZ01v
ZGUgPSBmdW5jdGlvbiAobW9kZSwgcmlnUGFyYW1zKSB7CisgICAgICAgIGlmICh0aGlzLmNhbWVy
YVJpZ01vZGUgPT09IG1vZGUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB3aGlsZSAodGhpcy5fcmlnQ2FtZXJhcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB2
YXIgY2FtZXJhID0gdGhpcy5fcmlnQ2FtZXJhcy5wb3AoKTsKKyAgICAgICAgICAgIGlmIChjYW1l
cmEpIHsKKyAgICAgICAgICAgICAgICBjYW1lcmEuZGlzcG9zZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHRoaXMuY2FtZXJhUmlnTW9kZSA9IG1vZGU7CisgICAgICAgIHRo
aXMuX2NhbWVyYVJpZ1BhcmFtcyA9IHt9OworICAgICAgICAvL3dlIGhhdmUgdG8gaW1wbGVtZW50
IHN0ZXJlbyBjYW1lcmEgY2FsY3VsdGF0aW5nIGxlZnQgYW5kIHJpZ2h0IHZpZXdwb2ludHMgZnJv
bSBpbnRlcmF4aWFsRGlzdGFuY2UgYW5kIHRhcmdldCwKKyAgICAgICAgLy9ub3QgZnJvbSBhIGdp
dmVuIGFuZ2xlIGFzIGl0IGlzIG5vdywgYnV0IHVudGlsIHRoYXQgY29tcGxldGUgY29kZSByZXdy
aXRpbmcgcHJvdmlzaW9uYWwgc3RlcmVvSGFsZkFuZ2xlIHZhbHVlIGlzIGludHJvZHVjZWQKKyAg
ICAgICAgdGhpcy5fY2FtZXJhUmlnUGFyYW1zLmludGVyYXhpYWxEaXN0YW5jZSA9IHJpZ1BhcmFt
cy5pbnRlcmF4aWFsRGlzdGFuY2UgfHwgMC4wNjM3OworICAgICAgICB0aGlzLl9jYW1lcmFSaWdQ
YXJhbXMuc3RlcmVvSGFsZkFuZ2xlID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVG9vbHMiXS5Ub1JhZGlhbnModGhpcy5fY2FtZXJhUmlnUGFyYW1zLmludGVyYXhp
YWxEaXN0YW5jZSAvIDAuMDYzNyk7CisgICAgICAgIC8vIGNyZWF0ZSB0aGUgcmlnIGNhbWVyYXMs
IHVubGVzcyBub25lCisgICAgICAgIGlmICh0aGlzLmNhbWVyYVJpZ01vZGUgIT09IENhbWVyYS5S
SUdfTU9ERV9OT05FKSB7CisgICAgICAgICAgICB2YXIgbGVmdENhbWVyYSA9IHRoaXMuY3JlYXRl
UmlnQ2FtZXJhKHRoaXMubmFtZSArICJfTCIsIDApOworICAgICAgICAgICAgaWYgKGxlZnRDYW1l
cmEpIHsKKyAgICAgICAgICAgICAgICBsZWZ0Q2FtZXJhLl9pc0xlZnRDYW1lcmEgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJpZ2h0Q2FtZXJhID0gdGhpcy5jcmVhdGVS
aWdDYW1lcmEodGhpcy5uYW1lICsgIl9SIiwgMSk7CisgICAgICAgICAgICBpZiAocmlnaHRDYW1l
cmEpIHsKKyAgICAgICAgICAgICAgICByaWdodENhbWVyYS5faXNSaWdodENhbWVyYSA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVmdENhbWVyYSAmJiByaWdodENhbWVy
YSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3JpZ0NhbWVyYXMucHVzaChsZWZ0Q2FtZXJhKTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9yaWdDYW1lcmFzLnB1c2gocmlnaHRDYW1lcmEpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN3aXRjaCAodGhpcy5jYW1lcmFSaWdNb2Rl
KSB7CisgICAgICAgICAgICBjYXNlIENhbWVyYS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNfQU5BR0xZ
UEg6CisgICAgICAgICAgICAgICAgQ2FtZXJhLl9zZXRTdGVyZW9zY29waWNBbmFnbHlwaFJpZ01v
ZGUodGhpcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENhbWVy
YS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNfU0lERUJZU0lERV9QQVJBTExFTDoKKyAgICAgICAgICAg
IGNhc2UgQ2FtZXJhLlJJR19NT0RFX1NURVJFT1NDT1BJQ19TSURFQllTSURFX0NST1NTRVlFRDoK
KyAgICAgICAgICAgIGNhc2UgQ2FtZXJhLlJJR19NT0RFX1NURVJFT1NDT1BJQ19PVkVSVU5ERVI6
CisgICAgICAgICAgICAgICAgQ2FtZXJhLl9zZXRTdGVyZW9zY29waWNSaWdNb2RlKHRoaXMpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDYW1lcmEuUklHX01PREVf
VlI6CisgICAgICAgICAgICAgICAgQ2FtZXJhLl9zZXRWUlJpZ01vZGUodGhpcywgcmlnUGFyYW1z
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ2FtZXJhLlJJR19N
T0RFX1dFQlZSOgorICAgICAgICAgICAgICAgIENhbWVyYS5fc2V0V2ViVlJSaWdNb2RlKHRoaXMs
IHJpZ1BhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fY2FzY2FkZVBvc3RQcm9jZXNzZXNUb1JpZ0NhbXMoKTsKKyAgICAgICAgdGhpcy51cGRh
dGUoKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQ2FtZXJhLl9zZXRTdGVyZW9z
Y29waWNSaWdNb2RlID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICB0aHJvdyAiSW1wb3J0
IENhbWVyYXMvUmlnTW9kZXMvc3RlcmVvc2NvcGljUmlnTW9kZSBiZWZvcmUgdXNpbmcgc3RlcmVv
c2NvcGljIHJpZyBtb2RlIjsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQ2FtZXJh
Ll9zZXRTdGVyZW9zY29waWNBbmFnbHlwaFJpZ01vZGUgPSBmdW5jdGlvbiAoY2FtZXJhKSB7Cisg
ICAgICAgIHRocm93ICJJbXBvcnQgQ2FtZXJhcy9SaWdNb2Rlcy9zdGVyZW9zY29waWNBbmFnbHlw
aFJpZ01vZGUgYmVmb3JlIHVzaW5nIHN0ZXJlb3Njb3BpYyBhbmFnbHlwaCByaWcgbW9kZSI7Cisg
ICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIENhbWVyYS5fc2V0VlJSaWdNb2RlID0gZnVu
Y3Rpb24gKGNhbWVyYSwgcmlnUGFyYW1zKSB7CisgICAgICAgIHRocm93ICJJbXBvcnQgQ2FtZXJh
cy9SaWdNb2Rlcy92clJpZ01vZGUgYmVmb3JlIHVzaW5nIFZSIHJpZyBtb2RlIjsKKyAgICB9Owor
ICAgIC8qKiBAaGlkZGVuICovCisgICAgQ2FtZXJhLl9zZXRXZWJWUlJpZ01vZGUgPSBmdW5jdGlv
biAoY2FtZXJhLCByaWdQYXJhbXMpIHsKKyAgICAgICAgdGhyb3cgIkltcG9ydCBDYW1lcmFzL1Jp
Z01vZGVzL1dlYlZSUmlnTW9kZSBiZWZvcmUgdXNpbmcgV2ViIFZSIHJpZyBtb2RlIjsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5fZ2V0VlJQcm9qZWN0
aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0cml4Il0uUGVyc3BlY3RpdmVGb3ZMSFRvUmVm
KHRoaXMuX2NhbWVyYVJpZ1BhcmFtcy52ck1ldHJpY3MuYXNwZWN0UmF0aW9Gb3YsIHRoaXMuX2Nh
bWVyYVJpZ1BhcmFtcy52ck1ldHJpY3MuYXNwZWN0UmF0aW8sIHRoaXMubWluWiwgdGhpcy5tYXha
LCB0aGlzLl9jYW1lcmFSaWdQYXJhbXMudnJXb3JrTWF0cml4KTsKKyAgICAgICAgdGhpcy5fY2Ft
ZXJhUmlnUGFyYW1zLnZyV29ya01hdHJpeC5tdWx0aXBseVRvUmVmKHRoaXMuX2NhbWVyYVJpZ1Bh
cmFtcy52ckhNYXRyaXgsIHRoaXMuX3Byb2plY3Rpb25NYXRyaXgpOworICAgICAgICByZXR1cm4g
dGhpcy5fcHJvamVjdGlvbk1hdHJpeDsKKyAgICB9OworICAgIENhbWVyYS5wcm90b3R5cGUuX3Vw
ZGF0ZUNhbWVyYVJvdGF0aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvL0hlcmUg
Zm9yIFdlYlZSCisgICAgfTsKKyAgICBDYW1lcmEucHJvdG90eXBlLl91cGRhdGVXZWJWUkNhbWVy
YVJvdGF0aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvL0hlcmUgZm9yIFdlYlZS
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgb3ZlcndyaXR0
ZW4gYnkgdGhlIGRpZmZlcmVudCBXZWJWUiBjYW1lcmFzIGF2YWlsYWJsZS4KKyAgICAgKiBUaGUg
Y29udGV4dCBpbiB3aGljaCBpdCBpcyBydW5uaW5nIGlzIHRoZSBSSUcgY2FtZXJhLiBTbyAndGhp
cycgaXMgdGhlIFRhcmdldENhbWVyYSwgbGVmdCBvciByaWdodC4KKyAgICAgKiBAaGlkZGVuCisg
ICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5fZ2V0V2ViVlJQcm9qZWN0aW9uTWF0cml4ID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRpZmZl
cmVudCBXZWJWUiBjYW1lcmFzIGF2YWlsYWJsZS4KKyAgICAgKiBUaGUgY29udGV4dCBpbiB3aGlj
aCBpdCBpcyBydW5uaW5nIGlzIHRoZSBSSUcgY2FtZXJhLiBTbyAndGhpcycgaXMgdGhlIFRhcmdl
dENhbWVyYSwgbGVmdCBvciByaWdodC4KKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgQ2Ft
ZXJhLnByb3RvdHlwZS5fZ2V0V2ViVlJWaWV3TWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19b
Ik1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIENh
bWVyYS5wcm90b3R5cGUuc2V0Q2FtZXJhUmlnUGFyYW1ldGVyID0gZnVuY3Rpb24gKG5hbWUsIHZh
bHVlKSB7CisgICAgICAgIGlmICghdGhpcy5fY2FtZXJhUmlnUGFyYW1zKSB7CisgICAgICAgICAg
ICB0aGlzLl9jYW1lcmFSaWdQYXJhbXMgPSB7fTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9j
YW1lcmFSaWdQYXJhbXNbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgLy9wcm92aXNpb25uYWxseToK
KyAgICAgICAgaWYgKG5hbWUgPT09ICJpbnRlcmF4aWFsRGlzdGFuY2UiKSB7CisgICAgICAgICAg
ICB0aGlzLl9jYW1lcmFSaWdQYXJhbXMuc3RlcmVvSGFsZkFuZ2xlID0gX01pc2NfdG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG9vbHMiXS5Ub1JhZGlhbnModmFsdWUgLyAwLjA2
MzcpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBuZWVkcyB0byBiZSBvdmVy
cmlkZGVuIGJ5IGNoaWxkcmVuIHNvIHN1YiBoYXMgcmVxdWlyZWQgcHJvcGVydGllcyB0byBiZSBj
b3BpZWQKKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5jcmVh
dGVSaWdDYW1lcmEgPSBmdW5jdGlvbiAobmFtZSwgY2FtZXJhSW5kZXgpIHsKKyAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNYXkgbmVlZCB0byBiZSBvdmVycmlk
ZGVuIGJ5IGNoaWxkcmVuCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIENhbWVyYS5wcm90
b3R5cGUuX3VwZGF0ZVJpZ0NhbWVyYXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5fcmlnQ2FtZXJhcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
dGhpcy5fcmlnQ2FtZXJhc1tpXS5taW5aID0gdGhpcy5taW5aOworICAgICAgICAgICAgdGhpcy5f
cmlnQ2FtZXJhc1tpXS5tYXhaID0gdGhpcy5tYXhaOworICAgICAgICAgICAgdGhpcy5fcmlnQ2Ft
ZXJhc1tpXS5mb3YgPSB0aGlzLmZvdjsKKyAgICAgICAgICAgIHRoaXMuX3JpZ0NhbWVyYXNbaV0u
dXBWZWN0b3IuY29weUZyb20odGhpcy51cFZlY3Rvcik7CisgICAgICAgIH0KKyAgICAgICAgLy8g
b25seSB1cGRhdGUgdmlld3BvcnQgd2hlbiBBTkFHTFlQSAorICAgICAgICBpZiAodGhpcy5jYW1l
cmFSaWdNb2RlID09PSBDYW1lcmEuUklHX01PREVfU1RFUkVPU0NPUElDX0FOQUdMWVBIKSB7Cisg
ICAgICAgICAgICB0aGlzLl9yaWdDYW1lcmFzWzBdLnZpZXdwb3J0ID0gdGhpcy5fcmlnQ2FtZXJh
c1sxXS52aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KiBAaGlkZGVuICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5fc2V0dXBJbnB1dHMgPSBmdW5jdGlv
biAoKSB7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpYXplIHRoZSBjYW1lcmEgc2V0
dXAgdG8gYSBqc29uIHJlcHJlc2VudGlvbgorICAgICAqIEByZXR1cm5zIHRoZSBKU09OIHJlcHJl
c2VudGF0aW9uCisgICAgICovCisgICAgQ2FtZXJhLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0u
U2VyaWFsaXplKHRoaXMpOworICAgICAgICAvLyBUeXBlCisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QudHlwZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIC8vIFBhcmVudAorICAg
ICAgICBpZiAodGhpcy5wYXJlbnQpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
cGFyZW50SWQgPSB0aGlzLnBhcmVudC5pZDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5p
bnB1dHMpIHsKKyAgICAgICAgICAgIHRoaXMuaW5wdXRzLnNlcmlhbGl6ZShzZXJpYWxpemF0aW9u
T2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhl
bHBlciJdLkFwcGVuZFNlcmlhbGl6ZWRBbmltYXRpb25zKHRoaXMsIHNlcmlhbGl6YXRpb25PYmpl
Y3QpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJhbmdlcyA9IHRoaXMuc2VyaWFsaXpl
QW5pbWF0aW9uUmFuZ2VzKCk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0Owor
ICAgIH07CisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBjdXJyZW50IGNhbWVyYS4KKyAgICAg
KiBAcGFyYW0gbmFtZSBUaGUgY2xvbmVkIGNhbWVyYSBuYW1lCisgICAgICogQHJldHVybnMgdGhl
IGNsb25lZCBjYW1lcmEKKyAgICAgKi8KKyAgICBDYW1lcmEucHJvdG90eXBlLmNsb25lID0gZnVu
Y3Rpb24gKG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkNsb25lKENhbWVyYS5H
ZXRDb25zdHJ1Y3RvckZyb21OYW1lKHRoaXMuZ2V0Q2xhc3NOYW1lKCksIG5hbWUsIHRoaXMuZ2V0
U2NlbmUoKSwgdGhpcy5pbnRlcmF4aWFsRGlzdGFuY2UsIHRoaXMuaXNTdGVyZW9zY29waWNTaWRl
QnlTaWRlKSwgdGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBkaXJlY3Rp
b24gb2YgdGhlIGNhbWVyYSByZWxhdGl2ZSB0byBhIGdpdmVuIGxvY2FsIGF4aXMuCisgICAgICog
QHBhcmFtIGxvY2FsQXhpcyBEZWZpbmVzIHRoZSByZWZlcmVuY2UgYXhpcyB0byBwcm92aWRlIGEg
cmVsYXRpdmUgZGlyZWN0aW9uLgorICAgICAqIEByZXR1cm4gdGhlIGRpcmVjdGlvbgorICAgICAq
LworICAgIENhbWVyYS5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uID0gZnVuY3Rpb24gKGxvY2FsQXhp
cykgeworICAgICAgICB2YXIgcmVzdWx0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuZ2V0RGly
ZWN0aW9uVG9SZWYobG9jYWxBeGlzLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBjYW1lcmEg
cmVsYXRpdmUgdG8gYSBnaXZlbiBsb2NhbCBheGlzIGludG8gYSBwYXNzZWQgdmVjdG9yLgorICAg
ICAqIEBwYXJhbSBsb2NhbEF4aXMgRGVmaW5lcyB0aGUgcmVmZXJlbmNlIGF4aXMgdG8gcHJvdmlk
ZSBhIHJlbGF0aXZlIGRpcmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gcmVzdWx0IERlZmluZXMgdGhl
IHZlY3RvciB0byBzdG9yZSB0aGUgcmVzdWx0IGluCisgICAgICovCisgICAgQ2FtZXJhLnByb3Rv
dHlwZS5nZXREaXJlY3Rpb25Ub1JlZiA9IGZ1bmN0aW9uIChsb2NhbEF4aXMsIHJlc3VsdCkgewor
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
VmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKGxvY2FsQXhpcywgdGhpcy5nZXRXb3JsZE1h
dHJpeCgpLCByZXN1bHQpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGNhbWVyYSBj
b25zdHJ1Y3RvciBmb3IgYSBnaXZlbiBjYW1lcmEgdHlwZQorICAgICAqIEBwYXJhbSB0eXBlIFRo
ZSB0eXBlIG9mIHRoZSBjYW1lcmEgdG8gY29uc3RydWN0IChzaG91bGQgYmUgZXF1YWwgdG8gb25l
IG9mIHRoZSBjYW1lcmEgY2xhc3MgbmFtZSkKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBv
ZiB0aGUgY2FtZXJhIHRoZSByZXN1bHQgd2lsbCBiZSBhYmxlIHRvIGluc3RhbnRpYXRlCisgICAg
ICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0aGUgcmVzdWx0IHdpbGwgY29uc3RydWN0IHRoZSBj
YW1lcmEgaW4KKyAgICAgKiBAcGFyYW0gaW50ZXJheGlhbF9kaXN0YW5jZSBJbiBjYXNlIG9mIHN0
ZXJlb3Njb3BpYyBzZXR1cCwgdGhlIGRpc3RhbmNlIGJldHdlZW4gYm90aCBleWVzCisgICAgICog
QHBhcmFtIGlzU3RlcmVvc2NvcGljU2lkZUJ5U2lkZSBJbiBjYXNlIG9mIHN0ZXJlb3Njb3BpYyBz
ZXR1cCwgc2hvdWxkIHRoZSBzZXJlbyBiZSBzaWRlIGIgc2lkZQorICAgICAqIEByZXR1cm5zIGEg
ZmFjdG9yeSBtZXRob2QgdG8gY29uc3RydWMgdGhlIGNhbWVyYQorICAgICAqLworICAgIENhbWVy
YS5HZXRDb25zdHJ1Y3RvckZyb21OYW1lID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNjZW5lLCBp
bnRlcmF4aWFsX2Rpc3RhbmNlLCBpc1N0ZXJlb3Njb3BpY1NpZGVCeVNpZGUpIHsKKyAgICAgICAg
aWYgKGludGVyYXhpYWxfZGlzdGFuY2UgPT09IHZvaWQgMCkgeyBpbnRlcmF4aWFsX2Rpc3RhbmNl
ID0gMDsgfQorICAgICAgICBpZiAoaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlID09PSB2b2lkIDAp
IHsgaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlID0gdHJ1ZTsgfQorICAgICAgICB2YXIgY29uc3Ry
dWN0b3JGdW5jID0gX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siTm9kZSJdLkNv
bnN0cnVjdCh0eXBlLCBuYW1lLCBzY2VuZSwgeworICAgICAgICAgICAgaW50ZXJheGlhbF9kaXN0
YW5jZTogaW50ZXJheGlhbF9kaXN0YW5jZSwKKyAgICAgICAgICAgIGlzU3RlcmVvc2NvcGljU2lk
ZUJ5U2lkZTogaXNTdGVyZW9zY29waWNTaWRlQnlTaWRlCisgICAgICAgIH0pOworICAgICAgICBp
ZiAoY29uc3RydWN0b3JGdW5jKSB7CisgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3JGdW5j
OworICAgICAgICB9CisgICAgICAgIC8vIERlZmF1bHQgdG8gdW5pdmVyc2FsIGNhbWVyYQorICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gQ2FtZXJhLl9jcmVhdGVEZWZhdWx0UGFy
c2VkQ2FtZXJhKG5hbWUsIHNjZW5lKTsgfTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXB1
dGUgdGhlIHdvcmxkICBtYXRyaXggb2YgdGhlIGNhbWVyYS4KKyAgICAgKiBAcmV0dXJucyB0aGUg
Y2FtZXJhIHdvcmtkIG1hdHJpeAorICAgICAqLworICAgIENhbWVyYS5wcm90b3R5cGUuY29tcHV0
ZVdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5nZXRXb3Js
ZE1hdHJpeCgpOworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2UgYSBKU09OIGFuZCBjcmVh
dGVzIHRoZSBjYW1lcmEgZnJvbSB0aGUgcGFyc2VkIGluZm9ybWF0aW9uCisgICAgICogQHBhcmFt
IHBhcnNlZENhbWVyYSBUaGUgSlNPTiB0byBwYXJzZQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUg
c2NlbmUgdG8gaW5zdGFudGlhdGUgdGhlIGNhbWVyYSBpbgorICAgICAqIEByZXR1cm5zIHRoZSBu
ZXdseSBjb25zdHJ1Y3RlZCBjYW1lcmEKKyAgICAgKi8KKyAgICBDYW1lcmEuUGFyc2UgPSBmdW5j
dGlvbiAocGFyc2VkQ2FtZXJhLCBzY2VuZSkgeworICAgICAgICB2YXIgdHlwZSA9IHBhcnNlZENh
bWVyYS50eXBlOworICAgICAgICB2YXIgY29uc3RydWN0ID0gQ2FtZXJhLkdldENvbnN0cnVjdG9y
RnJvbU5hbWUodHlwZSwgcGFyc2VkQ2FtZXJhLm5hbWUsIHNjZW5lLCBwYXJzZWRDYW1lcmEuaW50
ZXJheGlhbF9kaXN0YW5jZSwgcGFyc2VkQ2FtZXJhLmlzU3RlcmVvc2NvcGljU2lkZUJ5U2lkZSk7
CisgICAgICAgIHZhciBjYW1lcmEgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5QYXJzZShjb25zdHJ1Y3QsIHBhcnNl
ZENhbWVyYSwgc2NlbmUpOworICAgICAgICAvLyBQYXJlbnQKKyAgICAgICAgaWYgKHBhcnNlZENh
bWVyYS5wYXJlbnRJZCkgeworICAgICAgICAgICAgY2FtZXJhLl93YWl0aW5nUGFyZW50SWQgPSBw
YXJzZWRDYW1lcmEucGFyZW50SWQ7CisgICAgICAgIH0KKyAgICAgICAgLy9JZiBjYW1lcmEgaGFz
IGFuIGlucHV0IG1hbmFnZXIsIGxldCBpdCBwYXJzZSBpbnB1dHMgc2V0dGluZ3MKKyAgICAgICAg
aWYgKGNhbWVyYS5pbnB1dHMpIHsKKyAgICAgICAgICAgIGNhbWVyYS5pbnB1dHMucGFyc2UocGFy
c2VkQ2FtZXJhKTsKKyAgICAgICAgICAgIGNhbWVyYS5fc2V0dXBJbnB1dHMoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY2FtZXJhLnNldFBvc2l0aW9uKSB7IC8vIG5lZWQgdG8gZm9yY2UgcG9z
aXRpb24KKyAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5RnJvbUZsb2F0cygwLCAwLCAw
KTsKKyAgICAgICAgICAgIGNhbWVyYS5zZXRQb3NpdGlvbihfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZyb21BcnJheShwYXJzZWRDYW1l
cmEucG9zaXRpb24pKTsKKyAgICAgICAgfQorICAgICAgICAvLyBUYXJnZXQKKyAgICAgICAgaWYg
KHBhcnNlZENhbWVyYS50YXJnZXQpIHsKKyAgICAgICAgICAgIGlmIChjYW1lcmEuc2V0VGFyZ2V0
KSB7CisgICAgICAgICAgICAgICAgY2FtZXJhLnNldFRhcmdldChfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZyb21BcnJheShwYXJzZWRD
YW1lcmEudGFyZ2V0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQXBw
bHkgM2QgcmlnLCB3aGVuIGZvdW5kCisgICAgICAgIGlmIChwYXJzZWRDYW1lcmEuY2FtZXJhUmln
TW9kZSkgeworICAgICAgICAgICAgdmFyIHJpZ1BhcmFtcyA9IChwYXJzZWRDYW1lcmEuaW50ZXJh
eGlhbF9kaXN0YW5jZSkgPyB7IGludGVyYXhpYWxEaXN0YW5jZTogcGFyc2VkQ2FtZXJhLmludGVy
YXhpYWxfZGlzdGFuY2UgfSA6IHt9OworICAgICAgICAgICAgY2FtZXJhLnNldENhbWVyYVJpZ01v
ZGUocGFyc2VkQ2FtZXJhLmNhbWVyYVJpZ01vZGUsIHJpZ1BhcmFtcyk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gQW5pbWF0aW9ucworICAgICAgICBpZiAocGFyc2VkQ2FtZXJhLmFuaW1hdGlvbnMp
IHsKKyAgICAgICAgICAgIGZvciAodmFyIGFuaW1hdGlvbkluZGV4ID0gMDsgYW5pbWF0aW9uSW5k
ZXggPCBwYXJzZWRDYW1lcmEuYW5pbWF0aW9ucy5sZW5ndGg7IGFuaW1hdGlvbkluZGV4KyspIHsK
KyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkQW5pbWF0aW9uID0gcGFyc2VkQ2FtZXJhLmFuaW1h
dGlvbnNbYW5pbWF0aW9uSW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbENsYXNz
ID0gX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIl9UeXBlU3Rv
cmUiXS5HZXRDbGFzcygiQkFCWUxPTi5BbmltYXRpb24iKTsKKyAgICAgICAgICAgICAgICBpZiAo
aW50ZXJuYWxDbGFzcykgeworICAgICAgICAgICAgICAgICAgICBjYW1lcmEuYW5pbWF0aW9ucy5w
dXNoKGludGVybmFsQ2xhc3MuUGFyc2UocGFyc2VkQW5pbWF0aW9uKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siTm9kZSJdLlBhcnNlQW5pbWF0aW9uUmFuZ2VzKGNhbWVyYSwgcGFyc2VkQ2Ft
ZXJhLCBzY2VuZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZENhbWVyYS5hdXRvQW5p
bWF0ZSkgeworICAgICAgICAgICAgc2NlbmUuYmVnaW5BbmltYXRpb24oY2FtZXJhLCBwYXJzZWRD
YW1lcmEuYXV0b0FuaW1hdGVGcm9tLCBwYXJzZWRDYW1lcmEuYXV0b0FuaW1hdGVUbywgcGFyc2Vk
Q2FtZXJhLmF1dG9BbmltYXRlTG9vcCwgcGFyc2VkQ2FtZXJhLmF1dG9BbmltYXRlU3BlZWQgfHwg
MS4wKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2FtZXJhOworICAgIH07CisgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICBDYW1lcmEuX2NyZWF0ZURlZmF1bHRQYXJzZWRDYW1lcmEgPSBmdW5j
dGlvbiAobmFtZSwgc2NlbmUpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiVW5pdmVyc2Fs
Q2FtZXJhIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IHBy
b2plY3Rpb24gbW9kZSB1c2VkIGJ5IHRoZSBjYW1lcmFzLgorICAgICAqIEl0IGhlbHBzIHJlY3Jl
YXRpbmcgYSBmZWVsaW5nIG9mIHBlcnNwZWN0aXZlIGFuZCBiZXR0ZXIgYXBwcmVjaWF0ZSBkZXB0
aC4KKyAgICAgKiBUaGlzIGlzIHRoZSBiZXN0IHdheSB0byBzaW11bGF0ZSByZWFsIGxpZmUgY2Ft
ZXJhcy4KKyAgICAgKi8KKyAgICBDYW1lcmEuUEVSU1BFQ1RJVkVfQ0FNRVJBID0gMDsKKyAgICAv
KioKKyAgICAgKiBUaGlzIGhlbHBzIGNyZWF0aW5nIGNhbWVyYSB3aXRoIGFuIG9ydGhvZ3JhcGhp
YyBtb2RlLgorICAgICAqIE9ydGhvZ3JhcGhpYyBpcyBjb21tb25seSB1c2VkIGluIGVuZ2luZWVy
aW5nIGFzIGEgbWVhbnMgdG8gcHJvZHVjZSBvYmplY3Qgc3BlY2lmaWNhdGlvbnMgdGhhdCBjb21t
dW5pY2F0ZSBkaW1lbnNpb25zIHVuYW1iaWd1b3VzbHksIGVhY2ggbGluZSBvZiAxIHVuaXQgbGVu
Z3RoIChjbSwgbWV0ZXIuLndoYXRldmVyKSB3aWxsIGFwcGVhciB0byBoYXZlIHRoZSBzYW1lIGxl
bmd0aCBldmVyeXdoZXJlIG9uIHRoZSBkcmF3aW5nLiBUaGlzIGFsbG93cyB0aGUgZHJhZnRlciB0
byBkaW1lbnNpb24gb25seSBhIHN1YnNldCBvZiBsaW5lcyBhbmQgbGV0IHRoZSByZWFkZXIga25v
dyB0aGF0IG90aGVyIGxpbmVzIG9mIHRoYXQgbGVuZ3RoIG9uIHRoZSBkcmF3aW5nIGFyZSBhbHNv
IHRoYXQgbGVuZ3RoIGluIHJlYWxpdHkuIEV2ZXJ5IHBhcmFsbGVsIGxpbmUgaW4gdGhlIGRyYXdp
bmcgaXMgYWxzbyBwYXJhbGxlbCBpbiB0aGUgb2JqZWN0LgorICAgICAqLworICAgIENhbWVyYS5P
UlRIT0dSQVBISUNfQ0FNRVJBID0gMTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIHRoZSBkZWZh
dWx0IEZPViBtb2RlIGZvciBwZXJzcGVjdGl2ZSBjYW1lcmFzLgorICAgICAqIFRoaXMgc2V0dGlu
ZyBhbGlnbnMgdGhlIHVwcGVyIGFuZCBsb3dlciBib3VuZHMgb2YgdGhlIHZpZXdwb3J0IHRvIHRo
ZSB1cHBlciBhbmQgbG93ZXIgYm91bmRzIG9mIHRoZSBjYW1lcmEgZnJ1c3R1bS4KKyAgICAgKi8K
KyAgICBDYW1lcmEuRk9WTU9ERV9WRVJUSUNBTF9GSVhFRCA9IDA7CisgICAgLyoqCisgICAgICog
VGhpcyBzZXR0aW5nIGFsaWducyB0aGUgbGVmdCBhbmQgcmlnaHQgYm91bmRzIG9mIHRoZSB2aWV3
cG9ydCB0byB0aGUgbGVmdCBhbmQgcmlnaHQgYm91bmRzIG9mIHRoZSBjYW1lcmEgZnJ1c3R1bS4K
KyAgICAgKi8KKyAgICBDYW1lcmEuRk9WTU9ERV9IT1JJWk9OVEFMX0ZJWEVEID0gMTsKKyAgICAv
KioKKyAgICAgKiBUaGlzIHNwZWNpZmllcyB0aGVyIGlzIG5vIG5lZWQgZm9yIGEgY2FtZXJhIHJp
Zy4KKyAgICAgKiBCYXNpY2FsbHkgb25seSBvbmUgZXllIGlzIHJlbmRlcmVkIGNvcnJlc3BvbmRp
bmcgdG8gdGhlIGNhbWVyYS4KKyAgICAgKi8KKyAgICBDYW1lcmEuUklHX01PREVfTk9ORSA9IDA7
CisgICAgLyoqCisgICAgICogU2ltdWxhdGVzIGEgY2FtZXJhIFJpZyB3aXRoIG9uZSBibHVlIGV5
ZSBhbmQgb25lIHJlZCBleWUuCisgICAgICogVGhpcyBjYW4gYmUgdXNlIHdpdGggM2QgYmx1ZSBh
bmQgcmVkIGdsYXNzZXMuCisgICAgICovCisgICAgQ2FtZXJhLlJJR19NT0RFX1NURVJFT1NDT1BJ
Q19BTkFHTFlQSCA9IDEwOworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhhdCBib3RoIGV5ZXMg
b2YgdGhlIGNhbWVyYSB3aWxsIGJlIHJlbmRlcmVkIHNpZGUgYnkgc2lkZSB3aXRoIGEgcGFyYWxs
ZWwgdGFyZ2V0LgorICAgICAqLworICAgIENhbWVyYS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNfU0lE
RUJZU0lERV9QQVJBTExFTCA9IDExOworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhhdCBib3Ro
IGV5ZXMgb2YgdGhlIGNhbWVyYSB3aWxsIGJlIHJlbmRlcmVkIHNpZGUgYnkgc2lkZSB3aXRoIGEg
bm9uZSBwYXJhbGxlbCB0YXJnZXQuCisgICAgICovCisgICAgQ2FtZXJhLlJJR19NT0RFX1NURVJF
T1NDT1BJQ19TSURFQllTSURFX0NST1NTRVlFRCA9IDEyOworICAgIC8qKgorICAgICAqIERlZmlu
ZXMgdGhhdCBib3RoIGV5ZXMgb2YgdGhlIGNhbWVyYSB3aWxsIGJlIHJlbmRlcmVkIG92ZXIgdW5k
ZXIgZWFjaCBvdGhlci4KKyAgICAgKi8KKyAgICBDYW1lcmEuUklHX01PREVfU1RFUkVPU0NPUElD
X09WRVJVTkRFUiA9IDEzOworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhhdCBib3RoIGV5ZXMg
b2YgdGhlIGNhbWVyYSBzaG91bGQgYmUgcmVuZGVyZXJlZCBpbiBhIFZSIG1vZGUgKGNhcmJveCku
CisgICAgICovCisgICAgQ2FtZXJhLlJJR19NT0RFX1ZSID0gMjA7CisgICAgLyoqCisgICAgICog
RGVmaW5lcyB0aGF0IGJvdGggZXllcyBvZiB0aGUgY2FtZXJhIHNob3VsZCBiZSByZW5kZXJlcmVk
IGluIGEgVlIgbW9kZSAod2ViVlIpLgorICAgICAqLworICAgIENhbWVyYS5SSUdfTU9ERV9XRUJW
UiA9IDIxOworICAgIC8qKgorICAgICAqIEN1c3RvbSByaWcgbW9kZSBhbGxvd2luZyByaWcgY2Ft
ZXJhcyB0byBiZSBwb3B1bGF0ZWQgbWFudWFsbHkgd2l0aCBhbnkgbnVtYmVyIG9mIGNhbWVyYXMK
KyAgICAgKi8KKyAgICBDYW1lcmEuUklHX01PREVfQ1VTVE9NID0gMjI7CisgICAgLyoqCisgICAg
ICogRGVmaW5lcyBpZiBieSBkZWZhdWx0IGF0dGFjaGluZyBjb250cm9scyBzaG91bGQgcHJldmVu
dCB0aGUgZGVmYXVsdCBqYXZhc2NyaXB0IGV2ZW50IHRvIGNvbnRpbnVlLgorICAgICAqLworICAg
IENhbWVyYS5Gb3JjZUF0dGFjaENvbnRyb2xUb0Fsd2F5c1ByZXZlbnREZWZhdWx0ID0gZmFsc2U7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplQXNWZWN0b3IzIl0pKCJwb3NpdGlvbiIpCisgICAgXSwgQ2FtZXJhLnBy
b3RvdHlwZSwgIl9wb3NpdGlvbiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNWZWN0b3IzIl0p
KCkKKyAgICBdLCBDYW1lcmEucHJvdG90eXBlLCAidXBWZWN0b3IiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgQ2FtZXJhLnByb3RvdHlwZSwgIm9ydGhvTGVmdCIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBDYW1lcmEucHJvdG90eXBlLCAib3J0aG9S
aWdodCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBDYW1lcmEucHJvdG90
eXBlLCAib3J0aG9Cb3R0b20iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
Q2FtZXJhLnByb3RvdHlwZSwgIm9ydGhvVG9wIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIENhbWVyYS5wcm90b3R5cGUsICJmb3YiLCB2b2lkIDApOworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6
ZSJdKSgpCisgICAgXSwgQ2FtZXJhLnByb3RvdHlwZSwgIm1pbloiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgQ2FtZXJhLnByb3RvdHlwZSwgIm1heFoiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQ2FtZXJhLnByb3RvdHlwZSwgImluZXJ0aWEiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQ2FtZXJhLnByb3RvdHlwZSwgIm1v
ZGUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQ2FtZXJhLnByb3RvdHlw
ZSwgImxheWVyTWFzayIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBDYW1l
cmEucHJvdG90eXBlLCAiZm92TW9kZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAg
ICBdLCBDYW1lcmEucHJvdG90eXBlLCAiY2FtZXJhUmlnTW9kZSIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplIl0pKCkKKyAgICBdLCBDYW1lcmEucHJvdG90eXBlLCAiaW50ZXJheGlhbERpc3RhbmNl
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIENhbWVyYS5wcm90b3R5cGUs
ICJpc1N0ZXJlb3Njb3BpY1NpZGVCeVNpZGUiLCB2b2lkIDApOworICAgIHJldHVybiBDYW1lcmE7
Cit9KF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIk5vZGUiXSkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFuYWdlci50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9D
YW1lcmFzL2NhbWVyYUlucHV0c01hbmFnZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDYW1lcmFJbnB1
dFR5cGVzLCBDYW1lcmFJbnB1dHNNYW5hZ2VyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkNhbWVyYUlucHV0VHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENhbWVyYUlu
cHV0VHlwZXM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2FtZXJhSW5wdXRzTWFuYWdlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gQ2FtZXJhSW5wdXRzTWFuYWdlcjsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGVj
b3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2NhbWVyYSAqLyAiLi9DYW1lcmFzL2NhbWVyYS50cyIpOworCisKKworLyoq
CisgKiBAaWdub3JlCisgKiBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgdGhlIGRpZmZlcmVudCBpbnB1
dCB0eXBlcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gdGhlIGFwcGxpY2F0aW9uLgorICogRm8gaW5z
dGFuY2U6IEFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dC4uLgorICovCit2YXIgQ2FtZXJhSW5w
dXRUeXBlcyA9IHt9OworLyoqCisgKiBUaGlzIHJlcHJlc2VudHMgdGhlIGlucHV0IG1hbmFnZXIg
dXNlZCB3aXRoaW4gYSBjYW1lcmEuCisgKiBJdCBoZWxwcyBkZWFsaW5nIHdpdGggYWxsIHRoZSBk
aWZmZXJlbnQga2luZCBvZiBpbnB1dCBhdHRhY2hlZCB0byBhIGNhbWVyYS4KKyAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jdXN0b21pemluZ19jYW1lcmFfaW5wdXRzCisg
Ki8KK3ZhciBDYW1lcmFJbnB1dHNNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIGEgbmV3IENhbWVyYSBJbnB1dCBNYW5hZ2Vy
LgorICAgICAqIEBwYXJhbSBjYW1lcmEgRGVmaW5lcyB0aGUgY2FtZXJhIHRoZSBpbnB1dCBtYW5h
Z2VyIGJsb25ncyB0bworICAgICAqLworICAgIGZ1bmN0aW9uIENhbWVyYUlucHV0c01hbmFnZXIo
Y2FtZXJhKSB7CisgICAgICAgIHRoaXMuYXR0YWNoZWQgPSB7fTsKKyAgICAgICAgdGhpcy5jYW1l
cmEgPSBjYW1lcmE7CisgICAgICAgIHRoaXMuY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7IH07
CisgICAgfQorICAgIC8qKgorICAgICAqIEFkZCBhbiBpbnB1dCBtZXRob2QgdG8gYSBjYW1lcmEK
KyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXppbmdf
Y2FtZXJhX2lucHV0cworICAgICAqIEBwYXJhbSBpbnB1dCBjYW1lcmEgaW5wdXQgbWV0aG9kCisg
ICAgICovCisgICAgQ2FtZXJhSW5wdXRzTWFuYWdlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24g
KGlucHV0KSB7CisgICAgICAgIHZhciB0eXBlID0gaW5wdXQuZ2V0U2ltcGxlTmFtZSgpOworICAg
ICAgICBpZiAodGhpcy5hdHRhY2hlZFt0eXBlXSkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLldhcm4oImNhbWVyYSBpbnB1
dCBvZiB0eXBlICIgKyB0eXBlICsgIiBhbHJlYWR5IGV4aXN0cyBvbiBjYW1lcmEiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmF0dGFjaGVkW3R5cGVdID0g
aW5wdXQ7CisgICAgICAgIGlucHV0LmNhbWVyYSA9IHRoaXMuY2FtZXJhOworICAgICAgICAvL2Zv
ciBjaGVja0lucHV0cywgd2UgYXJlIGR5bmFtaWNhbGx5IGNyZWF0aW5nIGEgZnVuY3Rpb24KKyAg
ICAgICAgLy90aGUgZ29hbCBpcyB0byBhdm9pZCB0aGUgcGVyZm9ybWFuY2UgcGVuYWx0eSBvZiBs
b29waW5nIGZvciBpbnB1dHMgaW4gdGhlIHJlbmRlciBsb29wCisgICAgICAgIGlmIChpbnB1dC5j
aGVja0lucHV0cykgeworICAgICAgICAgICAgdGhpcy5jaGVja0lucHV0cyA9IHRoaXMuX2FkZENo
ZWNrSW5wdXRzKGlucHV0LmNoZWNrSW5wdXRzLmJpbmQoaW5wdXQpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodGhpcy5hdHRhY2hlZEVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlucHV0LmF0dGFj
aENvbnRyb2wodGhpcy5hdHRhY2hlZEVsZW1lbnQpOworICAgICAgICB9CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBSZW1vdmUgYSBzcGVjaWZpYyBpbnB1dCBtZXRob2QgZnJvbSBhIGNhbWVyYQor
ICAgICAqIGV4YW1wbGU6IGNhbWVyYS5pbnB1dHMucmVtb3ZlKGNhbWVyYS5pbnB1dHMuYXR0YWNo
ZWQubW91c2UpOworICAgICAqIEBwYXJhbSBpbnB1dFRvUmVtb3ZlIGNhbWVyYSBpbnB1dCBtZXRo
b2QKKyAgICAgKi8KKyAgICBDYW1lcmFJbnB1dHNNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmUgPSBm
dW5jdGlvbiAoaW5wdXRUb1JlbW92ZSkgeworICAgICAgICBmb3IgKHZhciBjYW0gaW4gdGhpcy5h
dHRhY2hlZCkgeworICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5hdHRhY2hlZFtjYW1dOwor
ICAgICAgICAgICAgaWYgKGlucHV0ID09PSBpbnB1dFRvUmVtb3ZlKSB7CisgICAgICAgICAgICAg
ICAgaW5wdXQuZGV0YWNoQ29udHJvbCh0aGlzLmF0dGFjaGVkRWxlbWVudCk7CisgICAgICAgICAg
ICAgICAgaW5wdXQuY2FtZXJhID0gbnVsbDsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5h
dHRhY2hlZFtjYW1dOworICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZElucHV0Q2hlY2soKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3Zl
IGEgc3BlY2lmaWMgaW5wdXQgdHlwZSBmcm9tIGEgY2FtZXJhCisgICAgICogZXhhbXBsZTogY2Ft
ZXJhLmlucHV0cy5yZW1vdmUoIkFyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dCIpOworICAgICAq
IEBwYXJhbSBpbnB1dFR5cGUgdGhlIHR5cGUgb2YgdGhlIGlucHV0IHRvIHJlbW92ZQorICAgICAq
LworICAgIENhbWVyYUlucHV0c01hbmFnZXIucHJvdG90eXBlLnJlbW92ZUJ5VHlwZSA9IGZ1bmN0
aW9uIChpbnB1dFR5cGUpIHsKKyAgICAgICAgZm9yICh2YXIgY2FtIGluIHRoaXMuYXR0YWNoZWQp
IHsKKyAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuYXR0YWNoZWRbY2FtXTsKKyAgICAgICAg
ICAgIGlmIChpbnB1dC5nZXRDbGFzc05hbWUoKSA9PT0gaW5wdXRUeXBlKSB7CisgICAgICAgICAg
ICAgICAgaW5wdXQuZGV0YWNoQ29udHJvbCh0aGlzLmF0dGFjaGVkRWxlbWVudCk7CisgICAgICAg
ICAgICAgICAgaW5wdXQuY2FtZXJhID0gbnVsbDsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhp
cy5hdHRhY2hlZFtjYW1dOworICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZElucHV0Q2hlY2so
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgQ2FtZXJhSW5wdXRzTWFu
YWdlci5wcm90b3R5cGUuX2FkZENoZWNrSW5wdXRzID0gZnVuY3Rpb24gKGZuKSB7CisgICAgICAg
IHZhciBjdXJyZW50ID0gdGhpcy5jaGVja0lucHV0czsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIGN1cnJlbnQoKTsKKyAgICAgICAgICAgIGZuKCk7CisgICAgICAg
IH07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIGlucHV0IGNvbnRyb2xzIHRv
IHRoZSBjdXJyZW50bHkgYXR0YWNoZWQgZG9tIGVsZW1lbnQgdG8gbGlzdGVuIHRoZSBldmVudHMg
ZnJvbS4KKyAgICAgKiBAcGFyYW0gaW5wdXQgRGVmaW5lcyB0aGUgaW5wdXQgdG8gYXR0YWNoCisg
ICAgICovCisgICAgQ2FtZXJhSW5wdXRzTWFuYWdlci5wcm90b3R5cGUuYXR0YWNoSW5wdXQgPSBm
dW5jdGlvbiAoaW5wdXQpIHsKKyAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRFbGVtZW50KSB7Cisg
ICAgICAgICAgICBpbnB1dC5hdHRhY2hDb250cm9sKHRoaXMuYXR0YWNoZWRFbGVtZW50LCB0aGlz
Lm5vUHJldmVudERlZmF1bHQpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBB
dHRhY2ggdGhlIGN1cnJlbnQgbWFuYWdlciBpbnB1dHMgY29udHJvbHMgdG8gYSBzcGVjaWZpYyBk
b20gZWxlbWVudCB0byBsaXN0ZW4gdGhlIGV2ZW50cyBmcm9tLgorICAgICAqIEBwYXJhbSBlbGVt
ZW50IERlZmluZXMgdGhlIGRvbSBlbGVtZW50IHRvIGNvbGxlY3QgdGhlIGV2ZW50cyBmcm9tCisg
ICAgICogQHBhcmFtIG5vUHJldmVudERlZmF1bHQgRGVmaW5lcyB3aGV0aGVyIGV2ZW50IGNhdWdo
dCBieSB0aGUgY29udHJvbHMgc2hvdWxkIGNhbGwgcHJldmVudGRlZmF1bHQoKSAoaHR0cHM6Ly9k
ZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L3ByZXZlbnREZWZh
dWx0KQorICAgICAqLworICAgIENhbWVyYUlucHV0c01hbmFnZXIucHJvdG90eXBlLmF0dGFjaEVs
ZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgbm9QcmV2ZW50RGVmYXVsdCkgeworICAgICAgICBp
ZiAobm9QcmV2ZW50RGVmYXVsdCA9PT0gdm9pZCAwKSB7IG5vUHJldmVudERlZmF1bHQgPSBmYWxz
ZTsgfQorICAgICAgICBpZiAodGhpcy5hdHRhY2hlZEVsZW1lbnQpIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBub1ByZXZlbnREZWZhdWx0ID0gX2NhbWVyYV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmEiXS5Gb3JjZUF0dGFjaENvbnRyb2xUb0Fs
d2F5c1ByZXZlbnREZWZhdWx0ID8gZmFsc2UgOiBub1ByZXZlbnREZWZhdWx0OworICAgICAgICB0
aGlzLmF0dGFjaGVkRWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAgIHRoaXMubm9QcmV2ZW50RGVm
YXVsdCA9IG5vUHJldmVudERlZmF1bHQ7CisgICAgICAgIGZvciAodmFyIGNhbSBpbiB0aGlzLmF0
dGFjaGVkKSB7CisgICAgICAgICAgICB0aGlzLmF0dGFjaGVkW2NhbV0uYXR0YWNoQ29udHJvbChl
bGVtZW50LCBub1ByZXZlbnREZWZhdWx0KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogRGV0YWNoIHRoZSBjdXJyZW50IG1hbmFnZXIgaW5wdXRzIGNvbnRyb2xzIGZyb20gYSBz
cGVjaWZpYyBkb20gZWxlbWVudC4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBk
b20gZWxlbWVudCB0byBjb2xsZWN0IHRoZSBldmVudHMgZnJvbQorICAgICAqIEBwYXJhbSBkaXNj
b25uZWN0IERlZmluZXMgd2hldGhlciB0aGUgaW5wdXQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0
aGUgY3VycmVudCBsaXN0IG9mIGF0dGFjaGVkIGlucHV0cworICAgICAqLworICAgIENhbWVyYUlu
cHV0c01hbmFnZXIucHJvdG90eXBlLmRldGFjaEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwg
ZGlzY29ubmVjdCkgeworICAgICAgICBpZiAoZGlzY29ubmVjdCA9PT0gdm9pZCAwKSB7IGRpc2Nv
bm5lY3QgPSBmYWxzZTsgfQorICAgICAgICBpZiAodGhpcy5hdHRhY2hlZEVsZW1lbnQgIT09IGVs
ZW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZh
ciBjYW0gaW4gdGhpcy5hdHRhY2hlZCkgeworICAgICAgICAgICAgdGhpcy5hdHRhY2hlZFtjYW1d
LmRldGFjaENvbnRyb2woZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoZGlzY29ubmVjdCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRbY2FtXS5jYW1lcmEgPSBudWxsOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuYXR0YWNoZWRFbGVtZW50ID0gbnVsbDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJlYnVpbGQgdGhlIGR5bmFtaWMgaW5wdXRDaGVjayBm
dW5jdGlvbiBmcm9tIHRoZSBjdXJyZW50IGxpc3Qgb2YKKyAgICAgKiBkZWZpbmVkIGlucHV0cyBp
biB0aGUgbWFuYWdlci4KKyAgICAgKi8KKyAgICBDYW1lcmFJbnB1dHNNYW5hZ2VyLnByb3RvdHlw
ZS5yZWJ1aWxkSW5wdXRDaGVjayA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5jaGVja0lu
cHV0cyA9IGZ1bmN0aW9uICgpIHsgfTsKKyAgICAgICAgZm9yICh2YXIgY2FtIGluIHRoaXMuYXR0
YWNoZWQpIHsKKyAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuYXR0YWNoZWRbY2FtXTsKKyAg
ICAgICAgICAgIGlmIChpbnB1dC5jaGVja0lucHV0cykgeworICAgICAgICAgICAgICAgIHRoaXMu
Y2hlY2tJbnB1dHMgPSB0aGlzLl9hZGRDaGVja0lucHV0cyhpbnB1dC5jaGVja0lucHV0cy5iaW5k
KGlucHV0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlbW92ZSBhbGwgYXR0YWNoZWQgaW5wdXQgbWV0aG9kcyBmcm9tIGEgY2FtZXJhCisgICAg
ICovCisgICAgQ2FtZXJhSW5wdXRzTWFuYWdlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkRWxlbWVudCkgeworICAgICAgICAgICAgdGhp
cy5kZXRhY2hFbGVtZW50KHRoaXMuYXR0YWNoZWRFbGVtZW50LCB0cnVlKTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLmF0dGFjaGVkID0ge307CisgICAgICAgIHRoaXMuYXR0YWNoZWRFbGVtZW50
ID0gbnVsbDsKKyAgICAgICAgdGhpcy5jaGVja0lucHV0cyA9IGZ1bmN0aW9uICgpIHsgfTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUgY3VycmVudCBpbnB1dCBtYW5hZ2Vy
IGF0dGFjaGVkIHRvIGEgY2FtZXJhLgorICAgICAqIFRoaXMgZW5zdXJlcyB0aGFuIG9uY2UgcGFy
c2VkLAorICAgICAqIHRoZSBpbnB1dCBhc3NvY2lhdGVkIHRvIHRoZSBjYW1lcmEgd2lsbCBiZSBp
ZGVudGljYWwgdG8gdGhlIGN1cnJlbnQgb25lcworICAgICAqIEBwYXJhbSBzZXJpYWxpemVkQ2Ft
ZXJhIERlZmluZXMgdGhlIGNhbWVyYSBzZXJpYWxpemF0aW9uIEpTT04gdGhlIGlucHV0IHNlcmlh
bGl6YXRpb24gc2hvdWxkIHdyaXRlIHRvCisgICAgICovCisgICAgQ2FtZXJhSW5wdXRzTWFuYWdl
ci5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKHNlcmlhbGl6ZWRDYW1lcmEpIHsKKyAg
ICAgICAgdmFyIGlucHV0cyA9IHt9OworICAgICAgICBmb3IgKHZhciBjYW0gaW4gdGhpcy5hdHRh
Y2hlZCkgeworICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5hdHRhY2hlZFtjYW1dOworICAg
ICAgICAgICAgdmFyIHJlcyA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlNlcmlhbGl6ZShpbnB1dCk7CisgICAgICAg
ICAgICBpbnB1dHNbaW5wdXQuZ2V0Q2xhc3NOYW1lKCldID0gcmVzOworICAgICAgICB9CisgICAg
ICAgIHNlcmlhbGl6ZWRDYW1lcmEuaW5wdXRzbWdyID0gaW5wdXRzOworICAgIH07CisgICAgLyoq
CisgICAgICogUGFyc2VzIGFuIGlucHV0IG1hbmFnZXIgc2VyaWFsaXplZCBKU09OIHRvIHJlc3Rv
cmUgdGhlIHByZXZpb3VzIGxpc3Qgb2YgaW5wdXRzCisgICAgICogYW5kIHN0YXRlcyBhc3NvY2lh
dGVkIHRvIGEgY2FtZXJhLgorICAgICAqIEBwYXJhbSBwYXJzZWRDYW1lcmEgRGVmaW5lcyB0aGUg
SlNPTiB0byBwYXJzZQorICAgICAqLworICAgIENhbWVyYUlucHV0c01hbmFnZXIucHJvdG90eXBl
LnBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZENhbWVyYSkgeworICAgICAgICB2YXIgcGFyc2VkSW5w
dXRzID0gcGFyc2VkQ2FtZXJhLmlucHV0c21ncjsKKyAgICAgICAgaWYgKHBhcnNlZElucHV0cykg
eworICAgICAgICAgICAgdGhpcy5jbGVhcigpOworICAgICAgICAgICAgZm9yICh2YXIgbiBpbiBw
YXJzZWRJbnB1dHMpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29uc3RydWN0ID0gQ2FtZXJhSW5w
dXRUeXBlc1tuXTsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3RydWN0KSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBwYXJzZWRpbnB1dCA9IHBhcnNlZElucHV0c1tuXTsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGlucHV0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoZnVuY3Rpb24gKCkgeyByZXR1
cm4gbmV3IGNvbnN0cnVjdCgpOyB9LCBwYXJzZWRpbnB1dCwgbnVsbCk7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuYWRkKGlucHV0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLzIwMTYtMDMtMDggdGhp
cyBwYXJ0IGlzIGZvciBtYW5hZ2luZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisgICAgICAgICAg
ICBmb3IgKHZhciBuIGluIHRoaXMuYXR0YWNoZWQpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29u
c3RydWN0ID0gQ2FtZXJhSW5wdXRUeXBlc1t0aGlzLmF0dGFjaGVkW25dLmdldENsYXNzTmFtZSgp
XTsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3RydWN0KSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBpbnB1dCA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBj
b25zdHJ1Y3QoKTsgfSwgcGFyc2VkQ2FtZXJhLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5yZW1vdmUodGhpcy5hdHRhY2hlZFtuXSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
YWRkKGlucHV0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworICAgIHJldHVybiBDYW1lcmFJbnB1dHNNYW5hZ2VyOworfSgpKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL2RldmljZU9yaWVudGF0aW9uQ2FtZXJhLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9DYW1lcmFzL2RldmljZU9yaWVudGF0aW9uQ2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IERldmljZU9yaWVudGF0aW9uQ2FtZXJhICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkRldmljZU9yaWVudGF0aW9uQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBE
ZXZpY2VPcmllbnRhdGlvbkNhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2ZyZWVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYSAqLyAiLi9DYW1lcmFzL2Zy
ZWVDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9JbnB1dHNfZnJlZUNhbWVyYURldmljZU9yaWVudGF0aW9uSW5w
dXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vSW5wdXRzL2ZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0ICovICIuL0NhbWVyYXMv
SW5wdXRzL2ZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0LnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5heGlzICovICIuL01h
dGhzL21hdGguYXhpcy50cyIpOworCisKKworCisKKworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiRGV2aWNlT3JpZW50YXRpb25D
YW1lcmEiLCBmdW5jdGlvbiAobmFtZSwgc2NlbmUpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkg
eyByZXR1cm4gbmV3IERldmljZU9yaWVudGF0aW9uQ2FtZXJhKG5hbWUsIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpLCBzY2Vu
ZSk7IH07Cit9KTsKKy8vIFdlJ3JlIG1haW5seSBiYXNlZCBvbiB0aGUgbG9naWMgZGVmaW5lZCBp
bnRvIHRoZSBGcmVlQ2FtZXJhIGNvZGUKKy8qKgorICogVGhpcyBpcyBhIGNhbWVyYSBzcGVjaWZp
Y2FsbHkgZGVzaWduZWQgdG8gcmVhY3QgdG8gZGV2aWNlIG9yaWVudGF0aW9uIGV2ZW50cyBzdWNo
IGFzIGEgbW9kZXJuIG1vYmlsZSBkZXZpY2UKKyAqIGJlaW5nIHRpbHRlZCBmb3J3YXJkIG9yIGJh
Y2sgYW5kIGxlZnQgb3IgcmlnaHQuCisgKi8KK3ZhciBEZXZpY2VPcmllbnRhdGlvbkNhbWVyYSA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShEZXZpY2VPcmllbnRhdGlvbkNhbWVyYSwg
X3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGRldmljZSBvcmllbnRhdGlv
biBjYW1lcmEKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY2FtZXJhCisgICAg
ICogQHBhcmFtIHBvc2l0aW9uIFRoZSBzdGFydCBwb3NpdGlvbiBjYW1lcmEKKyAgICAgKiBAcGFy
YW0gc2NlbmUgVGhlIHNjZW5lIHRoZSBjYW1lcmEgYmVsb25ncyB0bworICAgICAqLworICAgIGZ1
bmN0aW9uIERldmljZU9yaWVudGF0aW9uQ2FtZXJhKG5hbWUsIHBvc2l0aW9uLCBzY2VuZSkgewor
ICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBwb3NpdGlvbiwgc2Nl
bmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl90bXBEcmFnUXVhdGVybmlvbiA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJd
KCk7CisgICAgICAgIF90aGlzLl9kaXNhYmxlUG9pbnRlcklucHV0V2hlblVzaW5nRGV2aWNlT3Jp
ZW50YXRpb24gPSB0cnVlOworICAgICAgICBfdGhpcy5fZHJhZ0ZhY3RvciA9IDA7CisgICAgICAg
IF90aGlzLl9xdWF0ZXJuaW9uQ2FjaGUgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRlcm5pb24iXSgpOworICAgICAgICBfdGhpcy5pbnB1
dHMuYWRkRGV2aWNlT3JpZW50YXRpb24oKTsKKyAgICAgICAgLy8gV2hlbiB0aGUgb3JpZW50YXRp
b24gc2Vuc29yIGZpcmVzIGl0J3MgZmlyc3QgZXZlbnQsIGRpc2FibGUgbW91c2UgaW5wdXQKKyAg
ICAgICAgaWYgKF90aGlzLmlucHV0cy5fZGV2aWNlT3JpZW50YXRpb25JbnB1dCkgeworICAgICAg
ICAgICAgX3RoaXMuaW5wdXRzLl9kZXZpY2VPcmllbnRhdGlvbklucHV0Ll9vbkRldmljZU9yaWVu
dGF0aW9uQ2hhbmdlZE9ic2VydmFibGUuYWRkT25jZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICAgICAgaWYgKF90aGlzLl9kaXNhYmxlUG9pbnRlcklucHV0V2hlblVzaW5nRGV2aWNlT3JpZW50
YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmlucHV0cy5fbW91c2VJbnB1
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuaW5wdXRzLl9tb3VzZUlucHV0Ll9h
bGxvd0NhbWVyYVJvdGF0aW9uID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5pbnB1dHMuX21vdXNlSW5wdXQub25Qb2ludGVyTW92ZWRPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fZHJhZ0ZhY3Rv
ciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXMuX2lu
aXRpYWxRdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
dGhpcy5faW5pdGlhbFF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRlcm5pb24iXSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJvdGF0
ZSB0aGUgaW5pdGlhbCBzcGFjZSBhcm91bmQgdGhlIHkgYXhpcyB0byBhbGxvdyB1c2VycyB0byAi
dHVybiBhcm91bmQiIHZpYSB0b3VjaC9tb3VzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVh
dGVybmlvbiJdLkZyb21FdWxlckFuZ2xlc1RvUmVmKDAsIGUub2Zmc2V0WCAqIF90aGlzLl9kcmFn
RmFjdG9yLCAwLCBfdGhpcy5fdG1wRHJhZ1F1YXRlcm5pb24pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5faW5pdGlhbFF1YXRlcm5pb24ubXVsdGlwbHlUb1JlZihfdGhp
cy5fdG1wRHJhZ1F1YXRlcm5pb24sIF90aGlzLl9pbml0aWFsUXVhdGVybmlvbik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShEZXZpY2VPcmllbnRhdGlvbkNhbWVyYS5wcm90b3R5cGUsICJkaXNhYmxlUG9pbnRl
cklucHV0V2hlblVzaW5nRGV2aWNlT3JpZW50YXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCBwb2ludGVyIGlucHV0
IG11c3QgYmUgZGlzYWJsZWQgb24gZmlyc3Qgb3JpZW50YXRpb24gc2Vuc29yIHVwZGF0ZSAoRGVm
YXVsdDogdHJ1ZSkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVQb2ludGVySW5wdXRXaGVuVXNpbmdEZXZpY2VP
cmllbnRhdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVQb2ludGVySW5wdXRXaGVuVXNpbmdEZXZpY2VPcmll
bnRhdGlvbiA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBFbmFi
bGVkIHR1cm5pbmcgb24gdGhlIHkgYXhpcyB3aGVuIHRoZSBvcmllbnRhdGlvbiBzZW5zb3IgaXMg
YWN0aXZlCisgICAgICogQHBhcmFtIGRyYWdGYWN0b3IgdGhlIGZhY3RvciB0aGF0IGNvbnRyb2xz
IHRoZSB0dXJuIHNwZWVkIChkZWZhdWx0OiAxLzMwMCkKKyAgICAgKi8KKyAgICBEZXZpY2VPcmll
bnRhdGlvbkNhbWVyYS5wcm90b3R5cGUuZW5hYmxlSG9yaXpvbnRhbERyYWdnaW5nID0gZnVuY3Rp
b24gKGRyYWdGYWN0b3IpIHsKKyAgICAgICAgaWYgKGRyYWdGYWN0b3IgPT09IHZvaWQgMCkgeyBk
cmFnRmFjdG9yID0gMSAvIDMwMDsgfQorICAgICAgICB0aGlzLl9kcmFnRmFjdG9yID0gZHJhZ0Zh
Y3RvcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ug
Y2xhc3MgbmFtZSAoIkRldmljZU9yaWVudGF0aW9uQ2FtZXJhIikuCisgICAgICogVGhpcyBoZWxw
cyBhdm9pZGluZyBpbnN0YW5jZW9mIGF0IHJ1biB0aW1lLgorICAgICAqIEByZXR1cm5zIHRoZSBj
bGFzcyBuYW1lCisgICAgICovCisgICAgRGV2aWNlT3JpZW50YXRpb25DYW1lcmEucHJvdG90eXBl
LmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJEZXZpY2VPcmll
bnRhdGlvbkNhbWVyYSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICog
Q2hlY2tzIGFuZCBhcHBsaWVzIHRoZSBjdXJyZW50IHZhbHVlcyBvZiB0aGUgaW5wdXRzIHRvIHRo
ZSBjYW1lcmEuIChJbnRlcm5hbCB1c2Ugb25seSkKKyAgICAgKi8KKyAgICBEZXZpY2VPcmllbnRh
dGlvbkNhbWVyYS5wcm90b3R5cGUuX2NoZWNrSW5wdXRzID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLl9jaGVja0lucHV0cy5jYWxsKHRoaXMpOworICAgICAgICB0aGlz
Ll9xdWF0ZXJuaW9uQ2FjaGUuY29weUZyb20odGhpcy5yb3RhdGlvblF1YXRlcm5pb24pOworICAg
ICAgICBpZiAodGhpcy5faW5pdGlhbFF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHRoaXMuX2lu
aXRpYWxRdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYodGhpcy5yb3RhdGlvblF1YXRlcm5pb24sIHRo
aXMucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogUmVzZXQgdGhlIGNhbWVyYSB0byBpdHMgZGVmYXVsdCBvcmllbnRhdGlvbiBvbiB0aGUgc3Bl
Y2lmaWVkIGF4aXMgb25seS4KKyAgICAgKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyB0byByZXNldAor
ICAgICAqLworICAgIERldmljZU9yaWVudGF0aW9uQ2FtZXJhLnByb3RvdHlwZS5yZXNldFRvQ3Vy
cmVudFJvdGF0aW9uID0gZnVuY3Rpb24gKGF4aXMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhp
czsKKyAgICAgICAgaWYgKGF4aXMgPT09IHZvaWQgMCkgeyBheGlzID0gX01hdGhzX21hdGhfYXhp
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJBeGlzIl0uWTsgfQorICAgICAgICAvL2Nh
biBvbmx5IHdvcmsgaWYgdGhpcyBjYW1lcmEgaGFzIGEgcm90YXRpb24gcXVhdGVybmlvbiBhbHJl
YWR5LgorICAgICAgICBpZiAoIXRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsUXVhdGVybmlv
bikgeworICAgICAgICAgICAgdGhpcy5faW5pdGlhbFF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRlcm5pb24iXSgpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2luaXRpYWxRdWF0ZXJuaW9uLmNvcHlGcm9tKHRoaXMu
X3F1YXRlcm5pb25DYWNoZSB8fCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIFsn
eCcsICd5JywgJ3onXS5mb3JFYWNoKGZ1bmN0aW9uIChheGlzTmFtZSkgeworICAgICAgICAgICAg
aWYgKCFheGlzW2F4aXNOYW1lXSkgeworICAgICAgICAgICAgICAgIF90aGlzLl9pbml0aWFsUXVh
dGVybmlvbltheGlzTmFtZV0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgX3RoaXMuX2luaXRpYWxRdWF0ZXJuaW9uW2F4aXNOYW1lXSAqPSAt
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX2luaXRpYWxRdWF0
ZXJuaW9uLm5vcm1hbGl6ZSgpOworICAgICAgICAvL2ZvcmNlIHJvdGF0aW9uIHVwZGF0ZQorICAg
ICAgICB0aGlzLl9pbml0aWFsUXVhdGVybmlvbi5tdWx0aXBseVRvUmVmKHRoaXMucm90YXRpb25R
dWF0ZXJuaW9uLCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgfTsKKyAgICByZXR1cm4g
RGV2aWNlT3JpZW50YXRpb25DYW1lcmE7Cit9KF9mcmVlQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkZyZWVDYW1lcmEiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L0NhbWVyYXMvZmx5Q2FtZXJhLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vQ2FtZXJhcy9mbHlDYW1lcmEudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZseUNhbWVyYSAqLwor
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGbHlDYW1lcmEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIEZseUNhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRz
bGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01p
c2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvZW5naW5l
ICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rh
cmdldENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi90YXJnZXRDYW1lcmEgKi8gIi4vQ2FtZXJhcy90YXJnZXRDYW1lcmEudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmx5Q2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mbHlDYW1l
cmFJbnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMvZmx5Q2FtZXJhSW5wdXRzTWFuYWdlci50cyIp
OworCisKKworCisKKworLyoqCisgKiBUaGlzIGlzIGEgZmx5aW5nIGNhbWVyYSwgZGVzaWduZWQg
Zm9yIDNEIG1vdmVtZW50IGFuZCByb3RhdGlvbiBpbiBhbGwgZGlyZWN0aW9ucywKKyAqIHN1Y2gg
YXMgaW4gYSAzRCBTcGFjZSBTaG9vdGVyIG9yIGEgRmxpZ2h0IFNpbXVsYXRvci4KKyAqLwordmFy
IEZseUNhbWVyYSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShGbHlDYW1lcmEsIF9z
dXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgRmx5Q2FtZXJhLgorICAgICAq
IFRoaXMgaXMgYSBmbHlpbmcgY2FtZXJhLCBkZXNpZ25lZCBmb3IgM0QgbW92ZW1lbnQgYW5kIHJv
dGF0aW9uIGluIGFsbCBkaXJlY3Rpb25zLAorICAgICAqIHN1Y2ggYXMgaW4gYSAzRCBTcGFjZSBT
aG9vdGVyIG9yIGEgRmxpZ2h0IFNpbXVsYXRvci4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUg
dGhlIG5hbWUgb2YgdGhlIGNhbWVyYSBpbiB0aGUgc2NlbmUuCisgICAgICogQHBhcmFtIHBvc2l0
aW9uIERlZmluZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGNhbWVyYSBpbiB0aGUgc2Nl
bmUuCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIGNhbWVyYSBiZWxv
bmdzIHRvLgorICAgICAqIEBwYXJhbSBzZXRBY3RpdmVPblNjZW5lSWZOb25lQWN0aXZlIERlZmlu
ZXMgd2hldGVyIHRoZSBjYW1lcmEgc2hvdWxkIGJlIG1hcmtlZCBhcyBhY3RpdmUsIGlmIG5vIG90
aGVyIGNhbWVyYSBoYXMgYmVlbiBkZWZpbmVkIGFzIGFjdGl2ZS4KKyAgICAqLworICAgIGZ1bmN0
aW9uIEZseUNhbWVyYShuYW1lLCBwb3NpdGlvbiwgc2NlbmUsIHNldEFjdGl2ZU9uU2NlbmVJZk5v
bmVBY3RpdmUpIHsKKyAgICAgICAgaWYgKHNldEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUgPT09
IHZvaWQgMCkgeyBzZXRBY3RpdmVPblNjZW5lSWZOb25lQWN0aXZlID0gdHJ1ZTsgfQorICAgICAg
ICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBwb3NpdGlvbiwgc2NlbmUsIHNl
dEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUpIHx8IHRoaXM7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBEZWZpbmUgdGhlIGNvbGxpc2lvbiBlbGxpcHNvaWQgb2YgdGhlIGNhbWVyYS4KKyAgICAg
ICAgICogVGhpcyBpcyBoZWxwZnVsIGZvciBzaW11bGF0aW5nIGEgY2FtZXJhIGJvZHksIGxpa2Ug
YSBwbGF5ZXIncyBib2R5LgorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNv
bS9iYWJ5bG9uMTAxL2NhbWVyYXMsX21lc2hfY29sbGlzaW9uc19hbmRfZ3Jhdml0eSNhcmNyb3Rh
dGVjYW1lcmEKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmVsbGlwc29pZCA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKDEs
IDEsIDEpOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGFuIG9mZnNldCBmb3IgdGhl
IHBvc2l0aW9uIG9mIHRoZSBlbGxpcHNvaWQgYXJvdW5kIHRoZSBjYW1lcmEuCisgICAgICAgICAq
IFRoaXMgY2FuIGJlIGhlbHBmdWwgaWYgdGhlIGNhbWVyYSBpcyBhdHRhY2hlZCBhd2F5IGZyb20g
dGhlIHBsYXllcidzIGJvZHkgY2VudGVyLAorICAgICAgICAgKiBzdWNoIGFzIGF0IGl0cyBoZWFk
LgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZWxsaXBzb2lkT2Zmc2V0ID0gbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0oMCwg
MCwgMCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSBjb2xsaXNp
b25zIG9mIHRoZSBjYW1lcmEgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc2NlbmUgb2JqZWN0cy4KKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLmNoZWNrQ29sbGlzaW9ucyA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogRW5hYmxlIG9yIGRpc2FibGUgZ3Jhdml0eSBvbiB0aGUgY2FtZXJh
LgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXBwbHlHcmF2aXR5ID0gZmFsc2U7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGN1cnJlbnQgZGlyZWN0aW9uIHRoZSBjYW1l
cmEgaXMgbW92aW5nIHRvLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuY2FtZXJhRGlyZWN0
aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZl
Y3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUcmFjayBSb2xsIHRvIG1h
aW50YWluIHRoZSB3YW50ZWQgUm9sbGluZyB3aGVuIGxvb2tpbmcgYXJvdW5kLgorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuX3RyYWNrUm9sbCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAq
IFNsb3dseSBjb3JyZWN0IHRoZSBSb2xsIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSBhZnRlciBhIFBp
dGNoK1lhdyByb3RhdGlvbi4KKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucm9sbENvcnJlY3Qg
PSAxMDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNaW1pYyBhIGJhbmtlZCB0dXJuLCBSb2xs
aW5nIHRoZSBjYW1lcmEgd2hlbiBZYXdpbmcuCisgICAgICAgICAqIEl0J3MgcmVjb21tZW5kZWQg
dG8gdXNlIHJvbGxDb3JyZWN0ID0gMTAgZm9yIGZhc3RlciBiYW5raW5nIGNvcnJlY3Rpb24uCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5iYW5rZWRUdXJuID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBMaW1pdCBpbiByYWRpYW5zIGZvciBob3cgbXVjaCBSb2xsIGJhbmtpbmcg
d2lsbCBhZGQuIChEZWZhdWx0OiA5MMKwKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYmFu
a2VkVHVybkxpbWl0ID0gTWF0aC5QSSAvIDI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBWYWx1
ZSBvZiAwIGRpc2FibGVzIHRoZSBiYW5rZWQgUm9sbC4KKyAgICAgICAgICogVmFsdWUgb2YgMSBp
cyBlcXVhbCB0byB0aGUgWWF3IGFuZ2xlIGluIHJhZGlhbnMuCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5iYW5rZWRUdXJuTXVsdGlwbGllciA9IDE7CisgICAgICAgIF90aGlzLl9uZWVkTW92
ZUZvckdyYXZpdHkgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX29sZFBvc2l0aW9uID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIF90aGlzLl9kaWZmUG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgX3Ro
aXMuX25ld1Bvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8vIENvbGxpc2lvbnMuCisgICAg
ICAgIF90aGlzLl9jb2xsaXNpb25NYXNrID0gLTE7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisg
ICAgICAgIF90aGlzLl9vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdlID0gZnVuY3Rpb24gKGNvbGxp
c2lvbklkLCBuZXdQb3NpdGlvbiwgY29sbGlkZWRNZXNoKSB7CisgICAgICAgICAgICBpZiAoY29s
bGlkZWRNZXNoID09PSB2b2lkIDApIHsgY29sbGlkZWRNZXNoID0gbnVsbDsgfQorICAgICAgICAg
ICAgdmFyIHVwZGF0ZVBvc2l0aW9uID0gZnVuY3Rpb24gKG5ld1BvcykgeworICAgICAgICAgICAg
ICAgIF90aGlzLl9uZXdQb3NpdGlvbi5jb3B5RnJvbShuZXdQb3MpOworICAgICAgICAgICAgICAg
IF90aGlzLl9uZXdQb3NpdGlvbi5zdWJ0cmFjdFRvUmVmKF90aGlzLl9vbGRQb3NpdGlvbiwgX3Ro
aXMuX2RpZmZQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9kaWZmUG9zaXRp
b24ubGVuZ3RoKCkgPiBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siRW5naW5lIl0uQ29sbGlzaW9uc0Vwc2lsb24pIHsKKyAgICAgICAgICAgICAgICAgICAgX3Ro
aXMucG9zaXRpb24uYWRkSW5QbGFjZShfdGhpcy5fZGlmZlBvc2l0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKF90aGlzLm9uQ29sbGlkZSAmJiBjb2xsaWRlZE1lc2gpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF90aGlzLm9uQ29sbGlkZShjb2xsaWRlZE1lc2gpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIHVwZGF0ZVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKKyAgICAgICAgfTsKKyAgICAgICAgX3Ro
aXMuaW5wdXRzID0gbmV3IF9mbHlDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIkZseUNhbWVyYUlucHV0c01hbmFnZXIiXShfdGhpcyk7CisgICAgICAgIF90
aGlzLmlucHV0cy5hZGRLZXlib2FyZCgpLmFkZE1vdXNlKCk7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZseUNhbWVyYS5wcm90b3R5cGUs
ICJhbmd1bGFyU2Vuc2liaWxpdHkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBpbnB1dCBzZW5zaWJpbGl0eSBmb3IgbW91c2UgaW5wdXQuCisgICAgICAgICAqIEhpZ2hlciB2
YWx1ZXMgcmVkdWNlIHNlbnNpdGl2aXR5LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbW91c2UgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsi
bW91c2UiXTsKKyAgICAgICAgICAgIGlmIChtb3VzZSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBtb3VzZS5hbmd1bGFyU2Vuc2liaWxpdHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGlu
cHV0IHNlbnNpYmlsaXR5IGZvciBhIG1vdXNlIGlucHV0LgorICAgICAgICAgKiBIaWdoZXIgdmFs
dWVzIHJlZHVjZSBzZW5zaXRpdml0eS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIgbW91c2UgPSB0aGlzLmlucHV0cy5hdHRhY2hl
ZFsibW91c2UiXTsKKyAgICAgICAgICAgIGlmIChtb3VzZSkgeworICAgICAgICAgICAgICAgIG1v
dXNlLmFuZ3VsYXJTZW5zaWJpbGl0eSA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmx5Q2FtZXJhLnByb3RvdHlwZSwg
ImtleXNGb3J3YXJkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSBrZXlzIGZv
ciBjYW1lcmEgbW92ZW1lbnQgZm9yd2FyZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5pbnB1dHMuYXR0YWNo
ZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4ga2V5Ym9hcmQua2V5c0ZvcndhcmQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gW107CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAqIFNldCB0
aGUga2V5cyBmb3IgY2FtZXJhIG1vdmVtZW50IGZvcndhcmQuCisgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQgPSB0aGlz
LmlucHV0cy5hdHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZCkg
eworICAgICAgICAgICAgICAgIGtleWJvYXJkLmtleXNGb3J3YXJkID0gdmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbHlD
YW1lcmEucHJvdG90eXBlLCAia2V5c0JhY2t3YXJkIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0IHRoZSBrZXlzIGZvciBjYW1lcmEgbW92ZW1lbnQgYmFja3dhcmQuCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9
IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJv
YXJkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtleWJvYXJkLmtleXNCYWNrd2FyZDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfSwKKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRoaXMu
aW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJkKSB7
CisgICAgICAgICAgICAgICAga2V5Ym9hcmQua2V5c0JhY2t3YXJkID0gdmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbHlD
YW1lcmEucHJvdG90eXBlLCAia2V5c1VwIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
IHRoZSBrZXlzIGZvciBjYW1lcmEgbW92ZW1lbnQgdXAuCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRoaXMuaW5wdXRz
LmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJkKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGtleWJvYXJkLmtleXNVcDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICogU2V0
IHRoZSBrZXlzIGZvciBjYW1lcmEgbW92ZW1lbnQgdXAuCisgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQgPSB0aGlzLmlu
cHV0cy5hdHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZCkgewor
ICAgICAgICAgICAgICAgIGtleWJvYXJkLmtleXNVcCA9IHZhbHVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmx5Q2FtZXJhLnBy
b3RvdHlwZSwgImtleXNEb3duIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSBr
ZXlzIGZvciBjYW1lcmEgbW92ZW1lbnQgZG93bi4KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5pbnB1dHMuYXR0
YWNoZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4ga2V5Ym9hcmQua2V5c0Rvd247CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gW107CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAqIFNldCB0
aGUga2V5cyBmb3IgY2FtZXJhIG1vdmVtZW50IGRvd24uCisgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQgPSB0aGlzLmlu
cHV0cy5hdHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZCkgewor
ICAgICAgICAgICAgICAgIGtleWJvYXJkLmtleXNEb3duID0gdmFsdWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbHlDYW1lcmEu
cHJvdG90eXBlLCAia2V5c0xlZnQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgdGhl
IGtleXMgZm9yIGNhbWVyYSBtb3ZlbWVudCBsZWZ0LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQgPSB0aGlzLmlucHV0cy5h
dHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBrZXlib2FyZC5rZXlzTGVmdDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICogU2V0
IHRoZSBrZXlzIGZvciBjYW1lcmEgbW92ZW1lbnQgbGVmdC4KKyAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRoaXMu
aW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJkKSB7
CisgICAgICAgICAgICAgICAga2V5Ym9hcmQua2V5c0xlZnQgPSB2YWx1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZseUNhbWVy
YS5wcm90b3R5cGUsICJrZXlzUmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQg
dGhlIGtleXMgZm9yIGNhbWVyYSBtb3ZlbWVudCByaWdodC4KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5pbnB1
dHMuYXR0YWNoZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4ga2V5Ym9hcmQua2V5c1JpZ2h0OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAg
KiBTZXQgdGhlIGtleXMgZm9yIGNhbWVyYSBtb3ZlbWVudCByaWdodC4KKyAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9
IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJv
YXJkKSB7CisgICAgICAgICAgICAgICAga2V5Ym9hcmQua2V5c1JpZ2h0ID0gdmFsdWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEF0dGFjaCBhIGNv
bnRyb2wgdG8gdGhlIEhUTUwgRE9NIGVsZW1lbnQuCisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVm
aW5lcyB0aGUgZWxlbWVudCB0aGF0IGxpc3RlbnMgdG8gdGhlIGlucHV0IGV2ZW50cy4KKyAgICAg
KiBAcGFyYW0gbm9QcmV2ZW50RGVmYXVsdCBEZWZpbmVzIHdoZXRoZXIgZXZlbnRzIGNhdWdodCBi
eSB0aGUgY29udHJvbHMgc2hvdWxkIGNhbGwgcHJldmVudGRlZmF1bHQoKS4gaHR0cHM6Ly9kZXZl
bG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L3ByZXZlbnREZWZhdWx0
CisgICAgICovCisgICAgRmx5Q2FtZXJhLnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0gZnVuY3Rp
b24gKGVsZW1lbnQsIG5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuYXR0
YWNoRWxlbWVudChlbGVtZW50LCBub1ByZXZlbnREZWZhdWx0KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIERldGFjaCBhIGNvbnRyb2wgZnJvbSB0aGUgSFRNTCBET00gZWxlbWVudC4KKyAgICAg
KiBUaGUgY2FtZXJhIHdpbGwgc3RvcCByZWFjdGluZyB0byB0aGF0IGlucHV0LgorICAgICAqIEBw
YXJhbSBlbGVtZW50IERlZmluZXMgdGhlIGVsZW1lbnQgdGhhdCBsaXN0ZW5zIHRvIHRoZSBpbnB1
dCBldmVudHMuCisgICAgICovCisgICAgRmx5Q2FtZXJhLnByb3RvdHlwZS5kZXRhY2hDb250cm9s
ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuZGV0YWNoRWxlbWVu
dChlbGVtZW50KTsKKyAgICAgICAgdGhpcy5jYW1lcmFEaXJlY3Rpb24gPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgwLCAwLCAw
KTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGbHlDYW1lcmEucHJvdG90eXBl
LCAiY29sbGlzaW9uTWFzayIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCB0aGUgbWFz
ayB0aGF0IHRoZSBjYW1lcmEgaWdub3JlcyBpbiBjb2xsaXNpb24gZXZlbnRzLgorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
Y29sbGlzaW9uTWFzazsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICogU2V0IHRo
ZSBtYXNrIHRoYXQgdGhlIGNhbWVyYSBpZ25vcmVzIGluIGNvbGxpc2lvbiBldmVudHMuCisgICAg
ICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKG1hc2spIHsKKyAgICAgICAgICAgIHRoaXMu
X2NvbGxpc2lvbk1hc2sgPSAhaXNOYU4obWFzaykgPyBtYXNrIDogLTE7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8qKiBAaGlkZGVuICovCisgICAgRmx5Q2FtZXJhLnByb3RvdHlwZS5fY29sbGlk
ZVdpdGhXb3JsZCA9IGZ1bmN0aW9uIChkaXNwbGFjZW1lbnQpIHsKKyAgICAgICAgdmFyIGdsb2Jh
bFBvc2l0aW9uOworICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHsKKyAgICAgICAgICAgIGdsb2Jh
bFBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlcyh0aGlzLnBvc2l0aW9uLCB0aGlzLnBh
cmVudC5nZXRXb3JsZE1hdHJpeCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGdsb2JhbFBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjsKKyAgICAgICAgfQorICAgICAg
ICBnbG9iYWxQb3NpdGlvbi5zdWJ0cmFjdEZyb21GbG9hdHNUb1JlZigwLCB0aGlzLmVsbGlwc29p
ZC55LCAwLCB0aGlzLl9vbGRQb3NpdGlvbik7CisgICAgICAgIHRoaXMuX29sZFBvc2l0aW9uLmFk
ZEluUGxhY2UodGhpcy5lbGxpcHNvaWRPZmZzZXQpOworICAgICAgICB2YXIgY29vcmRpbmF0b3Ig
PSB0aGlzLmdldFNjZW5lKCkuY29sbGlzaW9uQ29vcmRpbmF0b3I7CisgICAgICAgIGlmICghdGhp
cy5fY29sbGlkZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2NvbGxpZGVyID0gY29vcmRpbmF0b3Iu
Y3JlYXRlQ29sbGlkZXIoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb2xsaWRlci5fcmFk
aXVzID0gdGhpcy5lbGxpcHNvaWQ7CisgICAgICAgIHRoaXMuX2NvbGxpZGVyLmNvbGxpc2lvbk1h
c2sgPSB0aGlzLl9jb2xsaXNpb25NYXNrOworICAgICAgICAvLyBObyBuZWVkIGZvciBjbG9uZSwg
YXMgbG9uZyBhcyBncmF2aXR5IGlzIG5vdCBvbi4KKyAgICAgICAgdmFyIGFjdHVhbERpc3BsYWNl
bWVudCA9IGRpc3BsYWNlbWVudDsKKyAgICAgICAgLy8gQWRkIGdyYXZpdHkgdG8gZGlyZWN0aW9u
IHRvIHByZXZlbnQgZHVhbC1jb2xsaXNpb24gY2hlY2tpbmcuCisgICAgICAgIGlmICh0aGlzLmFw
cGx5R3Jhdml0eSkgeworICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBtZW5kaW5nIHdpdGgg
Y2FtZXJhRGlyZWN0aW9uLCBhIGdsb2JhbCB2YXJpYWJsZSBvZiB0aGUgZmx5IGNhbWVyYSBjbGFz
cy4KKyAgICAgICAgICAgIGFjdHVhbERpc3BsYWNlbWVudCA9IGRpc3BsYWNlbWVudC5hZGQodGhp
cy5nZXRTY2VuZSgpLmdyYXZpdHkpOworICAgICAgICB9CisgICAgICAgIGNvb3JkaW5hdG9yLmdl
dE5ld1Bvc2l0aW9uKHRoaXMuX29sZFBvc2l0aW9uLCBhY3R1YWxEaXNwbGFjZW1lbnQsIHRoaXMu
X2NvbGxpZGVyLCAzLCBudWxsLCB0aGlzLl9vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdlLCB0aGlz
LnVuaXF1ZUlkKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRmx5Q2FtZXJhLnBy
b3RvdHlwZS5fY2hlY2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5f
bG9jYWxEaXJlY3Rpb24pIHsKKyAgICAgICAgICAgIHRoaXMuX2xvY2FsRGlyZWN0aW9uID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1lZERpcmVjdGlvbiA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygp
OworICAgICAgICB9CisgICAgICAgIHRoaXMuaW5wdXRzLmNoZWNrSW5wdXRzKCk7CisgICAgICAg
IF9zdXBlci5wcm90b3R5cGUuX2NoZWNrSW5wdXRzLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIEZseUNhbWVyYS5wcm90b3R5cGUuX2RlY2lkZUlmTmVlZHNUb01v
dmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9uZWVkTW92ZUZvckdyYXZp
dHkgfHwgTWF0aC5hYnModGhpcy5jYW1lcmFEaXJlY3Rpb24ueCkgPiAwIHx8IE1hdGguYWJzKHRo
aXMuY2FtZXJhRGlyZWN0aW9uLnkpID4gMCB8fCBNYXRoLmFicyh0aGlzLmNhbWVyYURpcmVjdGlv
bi56KSA+IDA7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEZseUNhbWVyYS5wcm90
b3R5cGUuX3VwZGF0ZVBvc2l0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5j
aGVja0NvbGxpc2lvbnMgJiYgdGhpcy5nZXRTY2VuZSgpLmNvbGxpc2lvbnNFbmFibGVkKSB7Cisg
ICAgICAgICAgICB0aGlzLl9jb2xsaWRlV2l0aFdvcmxkKHRoaXMuY2FtZXJhRGlyZWN0aW9uKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUu
X3VwZGF0ZVBvc2l0aW9uLmNhbGwodGhpcyk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJlc3RvcmUgdGhlIFJvbGwgdG8gaXRzIHRhcmdldCB2YWx1ZSBhdCB0aGUgcmF0ZSBz
cGVjaWZpZWQuCisgICAgICogQHBhcmFtIHJhdGUgLSBIaWdoZXIgbWVhbnMgc2xvd2VyIHJlc3Rv
cmluZy4KKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgRmx5Q2FtZXJhLnByb3RvdHlwZS5y
ZXN0b3JlUm9sbCA9IGZ1bmN0aW9uIChyYXRlKSB7CisgICAgICAgIHZhciBsaW1pdCA9IHRoaXMu
X3RyYWNrUm9sbDsgLy8gVGFyZ2V0IFJvbGwuCisgICAgICAgIHZhciB6ID0gdGhpcy5yb3RhdGlv
bi56OyAvLyBDdXJyZW50IFJvbGwuCisgICAgICAgIHZhciBkZWx0YSA9IGxpbWl0IC0gejsgLy8g
RGlmZmVyZW5jZSBpbiBSb2xsLgorICAgICAgICB2YXIgbWluUmFkID0gMC4wMDE7IC8vIFRlbnRo
IG9mIGEgcmFkaWFuIGlzIGEgYmFyZWx5IG5vdGljYWJsZSBkaWZmZXJlbmNlLgorICAgICAgICAv
LyBJZiB0aGUgZGlmZmVyZW5jZSBpcyBub3RpY2FibGUsIHJlc3RvcmUgdGhlIFJvbGwuCisgICAg
ICAgIGlmIChNYXRoLmFicyhkZWx0YSkgPj0gbWluUmFkKSB7CisgICAgICAgICAgICAvLyBDaGFu
Z2UgWiByb3RhdGlvbiB0b3dhcmRzIHRoZSB0YXJnZXQgUm9sbC4KKyAgICAgICAgICAgIHRoaXMu
cm90YXRpb24ueiArPSBkZWx0YSAvIHJhdGU7CisgICAgICAgICAgICAvLyBNYXRjaCB3aGVuIG5l
YXIgZW5vdWdoLgorICAgICAgICAgICAgaWYgKE1hdGguYWJzKGxpbWl0IC0gdGhpcy5yb3RhdGlv
bi56KSA8PSBtaW5SYWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnJvdGF0aW9uLnogPSBsaW1p
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGVz
dHJveSB0aGUgY2FtZXJhIGFuZCByZWxlYXNlIHRoZSBjdXJyZW50IHJlc291cmNlcyBoZWxkIGJ5
IGl0LgorICAgICAqLworICAgIEZseUNhbWVyYS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuY2xlYXIoKTsKKyAgICAgICAgX3N1cGVyLnByb3Rv
dHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhl
IGN1cnJlbnQgb2JqZWN0IGNsYXNzIG5hbWUuCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5h
bWUuCisgICAgICovCisgICAgRmx5Q2FtZXJhLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiRmx5Q2FtZXJhIjsKKyAgICB9OworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZUFzVmVjdG9yMyJdKSgpCisgICAgXSwgRmx5Q2FtZXJhLnByb3RvdHlwZSwgImVsbGlwc29p
ZCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNWZWN0b3IzIl0pKCkKKyAgICBdLCBGbHlDYW1l
cmEucHJvdG90eXBlLCAiZWxsaXBzb2lkT2Zmc2V0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIEZseUNhbWVyYS5wcm90b3R5cGUsICJjaGVja0NvbGxpc2lvbnMiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRmx5Q2FtZXJhLnByb3RvdHlwZSwgImFw
cGx5R3Jhdml0eSIsIHZvaWQgMCk7CisgICAgcmV0dXJuIEZseUNhbWVyYTsKK30oX3RhcmdldENh
bWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUYXJnZXRDYW1lcmEiXSkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvZmx5Q2FtZXJhSW5wdXRzTWFuYWdlci50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9DYW1lcmFzL2ZseUNhbWVyYUlucHV0c01hbmFnZXIudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBGbHlDYW1lcmFJbnB1dHNNYW5hZ2VyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkZseUNhbWVyYUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZs
eUNhbWVyYUlucHV0c01hbmFnZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0
c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9jYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NhbWVyYUlucHV0c01hbmFnZXIg
Ki8gIi4vQ2FtZXJhcy9jYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0NhbWVyYXNfSW5wdXRzX2ZseUNhbWVyYU1vdXNlSW5wdXRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NhbWVyYXMvSW5w
dXRzL2ZseUNhbWVyYU1vdXNlSW5wdXQgKi8gIi4vQ2FtZXJhcy9JbnB1dHMvZmx5Q2FtZXJhTW91
c2VJbnB1dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX0lucHV0c19m
bHlDYW1lcmFLZXlib2FyZElucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL0lucHV0cy9mbHlDYW1lcmFLZXlib2FyZElu
cHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZseUNhbWVyYUtleWJvYXJkSW5wdXQudHMiKTsKKwor
CisKKworLyoqCisgKiBEZWZhdWx0IElucHV0cyBtYW5hZ2VyIGZvciB0aGUgRmx5Q2FtZXJhLgor
ICogSXQgZ3JvdXBzIGFsbCB0aGUgZGVmYXVsdCBzdXBwb3J0ZWQgaW5wdXRzIGZvciBlYXNlIG9m
IHVzZS4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jdXN0b21pemlu
Z19jYW1lcmFfaW5wdXRzCisgKi8KK3ZhciBGbHlDYW1lcmFJbnB1dHNNYW5hZ2VyID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEZseUNhbWVyYUlucHV0c01hbmFnZXIsIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgbmV3IEZseUNhbWVyYUlucHV0c01hbmFn
ZXIuCisgICAgICogQHBhcmFtIGNhbWVyYSBEZWZpbmVzIHRoZSBjYW1lcmEgdGhlIGlucHV0cyBi
ZWxvbmcgdG8uCisgICAgICovCisgICAgZnVuY3Rpb24gRmx5Q2FtZXJhSW5wdXRzTWFuYWdlcihj
YW1lcmEpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIGNhbWVyYSkgfHwgdGhp
czsKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIGtleWJvYXJkIGlucHV0IHN1cHBvcnQgdG8g
dGhlIGlucHV0IG1hbmFnZXIuCisgICAgICogQHJldHVybnMgdGhlIG5ldyBGbHlDYW1lcmFLZXli
b2FyZE1vdmVJbnB1dCgpLgorICAgICAqLworICAgIEZseUNhbWVyYUlucHV0c01hbmFnZXIucHJv
dG90eXBlLmFkZEtleWJvYXJkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmFkZChuZXcg
X0NhbWVyYXNfSW5wdXRzX2ZseUNhbWVyYUtleWJvYXJkSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCJdKCkpOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBtb3VzZSBpbnB1dCBzdXBwb3J0IHRv
IHRoZSBpbnB1dCBtYW5hZ2VyLgorICAgICAqIEBwYXJhbSB0b3VjaEVuYWJsZWQgRW5hYmxlIHRv
dWNoIHNjcmVlbiBzdXBwb3J0LgorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgRmx5Q2FtZXJhTW91
c2VJbnB1dCgpLgorICAgICAqLworICAgIEZseUNhbWVyYUlucHV0c01hbmFnZXIucHJvdG90eXBl
LmFkZE1vdXNlID0gZnVuY3Rpb24gKHRvdWNoRW5hYmxlZCkgeworICAgICAgICBpZiAodG91Y2hF
bmFibGVkID09PSB2b2lkIDApIHsgdG91Y2hFbmFibGVkID0gdHJ1ZTsgfQorICAgICAgICB0aGlz
LmFkZChuZXcgX0NhbWVyYXNfSW5wdXRzX2ZseUNhbWVyYU1vdXNlSW5wdXRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siRmx5Q2FtZXJhTW91c2VJbnB1dCJdKHRvdWNoRW5hYmxlZCkpOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBGbHlDYW1lcmFJbnB1dHNN
YW5hZ2VyOworfShfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJDYW1lcmFJbnB1dHNNYW5hZ2VyIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9DYW1lcmFzL2ZvbGxvd0NhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvZm9sbG93Q2FtZXJhLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBG
b2xsb3dDYW1lcmEsIEFyY0ZvbGxvd0NhbWVyYSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJGb2xsb3dDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZvbGxvd0NhbWVy
YTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmNGb2xsb3dDYW1lcmEiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIEFyY0ZvbGxvd0NhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIu
L01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NaXNjL3Rvb2xzICovICIuL01pc2MvdG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfdGFyZ2V0Q2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3RhcmdldENhbWVyYSAqLyAiLi9DYW1lcmFzL3RhcmdldENh
bWVyYS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2ZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZm9sbG93Q2FtZXJhSW5w
dXRzTWFuYWdlciAqLyAiLi9DYW1lcmFzL2ZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIudHMiKTsK
KworCisKKworCisKKworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTm9kZSJd
LkFkZE5vZGVDb25zdHJ1Y3RvcigiRm9sbG93Q2FtZXJhIiwgZnVuY3Rpb24gKG5hbWUsIHNjZW5l
KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBGb2xsb3dDYW1lcmEobmFt
ZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3Rv
cjMiXS5aZXJvKCksIHNjZW5lKTsgfTsKK30pOworX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiQXJjRm9sbG93Q2FtZXJhIiwgZnVu
Y3Rpb24gKG5hbWUsIHNjZW5lKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5l
dyBBcmNGb2xsb3dDYW1lcmEobmFtZSwgMCwgMCwgMS4wLCBudWxsLCBzY2VuZSk7IH07Cit9KTsK
Ky8qKgorICogQSBmb2xsb3cgY2FtZXJhIHRha2VzIGEgbWVzaCBhcyBhIHRhcmdldCBhbmQgZm9s
bG93cyBpdCBhcyBpdCBtb3Zlcy4gQm90aCBhIGZyZWUgY2FtZXJhIHZlcnNpb24gZm9sbG93Q2Ft
ZXJhIGFuZAorICogYW4gYXJjIHJvdGF0ZSB2ZXJzaW9uIGFyY0ZvbGxvd0NhbWVyYSBhcmUgYXZh
aWxhYmxlLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vZmVhdHVyZXMvY2FtZXJh
cyNmb2xsb3ctY2FtZXJhCisgKi8KK3ZhciBGb2xsb3dDYW1lcmEgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19leHRlbmRzIl0oRm9sbG93Q2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIElu
c3RhbnRpYXRlcyB0aGUgZm9sbG93IGNhbWVyYS4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI2ZvbGxvdy1jYW1lcmEKKyAgICAgKiBAcGFyYW0g
bmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGNhbWVyYSBpbiB0aGUgc2NlbmUKKyAgICAgKiBA
cGFyYW0gcG9zaXRpb24gRGVmaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2FtZXJhCisgICAgICog
QHBhcmFtIHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIGNhbWVyYSBiZWxvbmcgdG8KKyAgICAg
KiBAcGFyYW0gbG9ja2VkVGFyZ2V0IERlZmluZSB0aGUgdGFyZ2V0IG9mIHRoZSBjYW1lcmEKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBGb2xsb3dDYW1lcmEobmFtZSwgcG9zaXRpb24sIHNjZW5lLCBs
b2NrZWRUYXJnZXQpIHsKKyAgICAgICAgaWYgKGxvY2tlZFRhcmdldCA9PT0gdm9pZCAwKSB7IGxv
Y2tlZFRhcmdldCA9IG51bGw7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgbmFtZSwgcG9zaXRpb24sIHNjZW5lKSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAg
ICogRGlzdGFuY2UgdGhlIGZvbGxvdyBjYW1lcmEgc2hvdWxkIGZvbGxvdyBhbiBvYmplY3QgYXQK
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLnJhZGl1cyA9IDEyOworICAgICAgICAvKioKKyAg
ICAgICAgICogTWluaW11bSBhbGxvd2VkIGRpc3RhbmNlIG9mIHRoZSBjYW1lcmEgdG8gdGhlIGF4
aXMgb2Ygcm90YXRpb24KKyAgICAgICAgICogKFRoZSBjYW1lcmEgY2FuIG5vdCBnZXQgY2xvc2Vy
KS4KKyAgICAgICAgICogVGhpcyBjYW4gaGVscCBsaW1pdGluZyBob3cgdGhlIENhbWVyYSBpcyBh
YmxlIHRvIG1vdmUgaW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubG93
ZXJSYWRpdXNMaW1pdCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNYXhpbXVtIGFs
bG93ZWQgZGlzdGFuY2Ugb2YgdGhlIGNhbWVyYSB0byB0aGUgYXhpcyBvZiByb3RhdGlvbgorICAg
ICAgICAgKiAoVGhlIGNhbWVyYSBjYW4gbm90IGdldCBmdXJ0aGVyKS4KKyAgICAgICAgICogVGhp
cyBjYW4gaGVscCBsaW1pdGluZyBob3cgdGhlIENhbWVyYSBpcyBhYmxlIHRvIG1vdmUgaW4gdGhl
IHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudXBwZXJSYWRpdXNMaW1pdCA9IG51
bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgYSByb3RhdGlvbiBvZmZzZXQgYmV0
d2VlbiB0aGUgY2FtZXJhIGFuZCB0aGUgb2JqZWN0IGl0IGZvbGxvd3MKKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLnJvdGF0aW9uT2Zmc2V0ID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IE1pbmltdW0gYWxsb3dlZCBhbmdsZSB0byBjYW1lcmEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGFy
Z2V0IG9iamVjdC4KKyAgICAgICAgICogVGhpcyBjYW4gaGVscCBsaW1pdGluZyBob3cgdGhlIENh
bWVyYSBpcyBhYmxlIHRvIG1vdmUgaW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMubG93ZXJSb3RhdGlvbk9mZnNldExpbWl0ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIE1heGltdW0gYWxsb3dlZCBhbmdsZSB0byBjYW1lcmEgcG9zaXRpb24gcmVsYXRpdmUg
dG8gdGFyZ2V0IG9iamVjdC4KKyAgICAgICAgICogVGhpcyBjYW4gaGVscCBsaW1pdGluZyBob3cg
dGhlIENhbWVyYSBpcyBhYmxlIHRvIG1vdmUgaW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMudXBwZXJSb3RhdGlvbk9mZnNldExpbWl0ID0gbnVsbDsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIERlZmluZSBhIGhlaWdodCBvZmZzZXQgYmV0d2VlbiB0aGUgY2FtZXJhIGFu
ZCB0aGUgb2JqZWN0IGl0IGZvbGxvd3MuCisgICAgICAgICAqIEl0IGNhbiBoZWxwIGZvbGxvd2lu
ZyBhbiBvYmplY3QgZnJvbSB0aGUgdG9wIChsaWtlIGEgY2FyIGNoYWluZyBhIHBsYW5lKQorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuaGVpZ2h0T2Zmc2V0ID0gNDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIE1pbmltdW0gYWxsb3dlZCBoZWlnaHQgb2YgY2FtZXJhIHBvc2l0aW9uIHJlbGF0
aXZlIHRvIHRhcmdldCBvYmplY3QuCisgICAgICAgICAqIFRoaXMgY2FuIGhlbHAgbGltaXRpbmcg
aG93IHRoZSBDYW1lcmEgaXMgYWJsZSB0byBtb3ZlIGluIHRoZSBzY2VuZS4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLmxvd2VySGVpZ2h0T2Zmc2V0TGltaXQgPSBudWxsOworICAgICAgICAv
KioKKyAgICAgICAgICogTWF4aW11bSBhbGxvd2VkIGhlaWdodCBvZiBjYW1lcmEgcG9zaXRpb24g
cmVsYXRpdmUgdG8gdGFyZ2V0IG9iamVjdC4KKyAgICAgICAgICogVGhpcyBjYW4gaGVscCBsaW1p
dGluZyBob3cgdGhlIENhbWVyYSBpcyBhYmxlIHRvIG1vdmUgaW4gdGhlIHNjZW5lLgorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMudXBwZXJIZWlnaHRPZmZzZXRMaW1pdCA9IG51bGw7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgaG93IGZhc3QgdGhlIGNhbWVyYSBjYW4gYWNjZWxl
cmF0ZSB0byBmb2xsb3cgaXQgcyB0YXJnZXQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5j
YW1lcmFBY2NlbGVyYXRpb24gPSAwLjA1OworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5l
IHRoZSBzcGVlZCBsaW1pdCBvZiB0aGUgY2FtZXJhIGZvbGxvd2luZyBhbiBvYmplY3QuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5tYXhDYW1lcmFTcGVlZCA9IDIwOworICAgICAgICBfdGhp
cy5sb2NrZWRUYXJnZXQgPSBsb2NrZWRUYXJnZXQ7CisgICAgICAgIF90aGlzLmlucHV0cyA9IG5l
dyBfZm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9f
WyJGb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyIl0oX3RoaXMpOworICAgICAgICBfdGhpcy5pbnB1
dHMuYWRkS2V5Ym9hcmQoKS5hZGRNb3VzZVdoZWVsKCkuYWRkUG9pbnRlcnMoKTsKKyAgICAgICAg
cmV0dXJuIF90aGlzOworICAgICAgICAvLyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHdo
ZW4gdGhlIHJlbGV2YW50IGhhbmRsZXJzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZC4KKyAgICAgICAg
Ly8gdGhpcy5pbnB1dHMuYWRkS2V5Ym9hcmQoKS5hZGRNb3VzZVdoZWVsKCkuYWRkUG9pbnRlcnMo
KS5hZGRWUkRldmljZU9yaWVudGF0aW9uKCk7CisgICAgfQorICAgIEZvbGxvd0NhbWVyYS5wcm90
b3R5cGUuX2ZvbGxvdyA9IGZ1bmN0aW9uIChjYW1lcmFUYXJnZXQpIHsKKyAgICAgICAgaWYgKCFj
YW1lcmFUYXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2
YXIgeVJvdGF0aW9uOworICAgICAgICBpZiAoY2FtZXJhVGFyZ2V0LnJvdGF0aW9uUXVhdGVybmlv
bikgeworICAgICAgICAgICAgdmFyIHJvdE1hdHJpeCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0cml4Il0oKTsKKyAgICAgICAgICAgIGNh
bWVyYVRhcmdldC5yb3RhdGlvblF1YXRlcm5pb24udG9Sb3RhdGlvbk1hdHJpeChyb3RNYXRyaXgp
OworICAgICAgICAgICAgeVJvdGF0aW9uID0gTWF0aC5hdGFuMihyb3RNYXRyaXgubVs4XSwgcm90
TWF0cml4Lm1bMTBdKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHlS
b3RhdGlvbiA9IGNhbWVyYVRhcmdldC5yb3RhdGlvbi55OworICAgICAgICB9CisgICAgICAgIHZh
ciByYWRpYW5zID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9v
bHMiXS5Ub1JhZGlhbnModGhpcy5yb3RhdGlvbk9mZnNldCkgKyB5Um90YXRpb247CisgICAgICAg
IHZhciB0YXJnZXRQb3NpdGlvbiA9IGNhbWVyYVRhcmdldC5nZXRBYnNvbHV0ZVBvc2l0aW9uKCk7
CisgICAgICAgIHZhciB0YXJnZXRYID0gdGFyZ2V0UG9zaXRpb24ueCArIE1hdGguc2luKHJhZGlh
bnMpICogdGhpcy5yYWRpdXM7CisgICAgICAgIHZhciB0YXJnZXRaID0gdGFyZ2V0UG9zaXRpb24u
eiArIE1hdGguY29zKHJhZGlhbnMpICogdGhpcy5yYWRpdXM7CisgICAgICAgIHZhciBkeCA9IHRh
cmdldFggLSB0aGlzLnBvc2l0aW9uLng7CisgICAgICAgIHZhciBkeSA9ICh0YXJnZXRQb3NpdGlv
bi55ICsgdGhpcy5oZWlnaHRPZmZzZXQpIC0gdGhpcy5wb3NpdGlvbi55OworICAgICAgICB2YXIg
ZHogPSAodGFyZ2V0WikgLSB0aGlzLnBvc2l0aW9uLno7CisgICAgICAgIHZhciB2eCA9IGR4ICog
dGhpcy5jYW1lcmFBY2NlbGVyYXRpb24gKiAyOyAvL3RoaXMgaXMgc2V0IHRvIC4wNQorICAgICAg
ICB2YXIgdnkgPSBkeSAqIHRoaXMuY2FtZXJhQWNjZWxlcmF0aW9uOworICAgICAgICB2YXIgdnog
PSBkeiAqIHRoaXMuY2FtZXJhQWNjZWxlcmF0aW9uICogMjsKKyAgICAgICAgaWYgKHZ4ID4gdGhp
cy5tYXhDYW1lcmFTcGVlZCB8fCB2eCA8IC10aGlzLm1heENhbWVyYVNwZWVkKSB7CisgICAgICAg
ICAgICB2eCA9IHZ4IDwgMSA/IC10aGlzLm1heENhbWVyYVNwZWVkIDogdGhpcy5tYXhDYW1lcmFT
cGVlZDsKKyAgICAgICAgfQorICAgICAgICBpZiAodnkgPiB0aGlzLm1heENhbWVyYVNwZWVkIHx8
IHZ5IDwgLXRoaXMubWF4Q2FtZXJhU3BlZWQpIHsKKyAgICAgICAgICAgIHZ5ID0gdnkgPCAxID8g
LXRoaXMubWF4Q2FtZXJhU3BlZWQgOiB0aGlzLm1heENhbWVyYVNwZWVkOworICAgICAgICB9Cisg
ICAgICAgIGlmICh2eiA+IHRoaXMubWF4Q2FtZXJhU3BlZWQgfHwgdnogPCAtdGhpcy5tYXhDYW1l
cmFTcGVlZCkgeworICAgICAgICAgICAgdnogPSB2eiA8IDEgPyAtdGhpcy5tYXhDYW1lcmFTcGVl
ZCA6IHRoaXMubWF4Q2FtZXJhU3BlZWQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5wb3NpdGlv
biA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
VmVjdG9yMyJdKHRoaXMucG9zaXRpb24ueCArIHZ4LCB0aGlzLnBvc2l0aW9uLnkgKyB2eSwgdGhp
cy5wb3NpdGlvbi56ICsgdnopOworICAgICAgICB0aGlzLnNldFRhcmdldCh0YXJnZXRQb3NpdGlv
bik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2hlZCBjb250cm9scyB0byB0aGUgY3Vy
cmVudCBjYW1lcmEuCisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgZWxlbWVudCB0
aGUgY29udHJvbHMgc2hvdWxkIGJlIGxpc3RlbmVkIGZyb20KKyAgICAgKiBAcGFyYW0gbm9QcmV2
ZW50RGVmYXVsdCBEZWZpbmVzIHdoZXRoZXIgZXZlbnQgY2F1Z2h0IGJ5IHRoZSBjb250cm9scyBz
aG91bGQgY2FsbCBwcmV2ZW50ZGVmYXVsdCgpIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9y
Zy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvcHJldmVudERlZmF1bHQpCisgICAgICovCisgICAg
Rm9sbG93Q2FtZXJhLnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQs
IG5vUHJldmVudERlZmF1bHQpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuYXR0YWNoRWxlbWVudChl
bGVtZW50LCBub1ByZXZlbnREZWZhdWx0KTsKKyAgICAgICAgdGhpcy5fcmVzZXQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIH07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRhY2ggdGhlIGN1
cnJlbnQgY29udHJvbHMgZnJvbSB0aGUgY2FtZXJhLgorICAgICAqIFRoZSBjYW1lcmEgd2lsbCBz
dG9wIHJlYWN0aW5nIHRvIGlucHV0cy4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRo
ZSBlbGVtZW50IHRvIHN0b3AgbGlzdGVuaW5nIHRoZSBpbnB1dHMgZnJvbQorICAgICAqLworICAg
IEZvbGxvd0NhbWVyYS5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50
KSB7CisgICAgICAgIHRoaXMuaW5wdXRzLmRldGFjaEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAg
IGlmICh0aGlzLl9yZXNldCkgeworICAgICAgICAgICAgdGhpcy5fcmVzZXQoKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBGb2xsb3dDYW1lcmEucHJvdG90eXBl
Ll9jaGVja0lucHV0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuY2hlY2tJ
bnB1dHMoKTsKKyAgICAgICAgdGhpcy5fY2hlY2tMaW1pdHMoKTsKKyAgICAgICAgX3N1cGVyLnBy
b3RvdHlwZS5fY2hlY2tJbnB1dHMuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMubG9ja2Vk
VGFyZ2V0KSB7CisgICAgICAgICAgICB0aGlzLl9mb2xsb3codGhpcy5sb2NrZWRUYXJnZXQpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBGb2xsb3dDYW1lcmEucHJvdG90eXBlLl9jaGVja0xpbWl0
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMubG93ZXJSYWRpdXNMaW1pdCAhPT0g
bnVsbCAmJiB0aGlzLnJhZGl1cyA8IHRoaXMubG93ZXJSYWRpdXNMaW1pdCkgeworICAgICAgICAg
ICAgdGhpcy5yYWRpdXMgPSB0aGlzLmxvd2VyUmFkaXVzTGltaXQ7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMudXBwZXJSYWRpdXNMaW1pdCAhPT0gbnVsbCAmJiB0aGlzLnJhZGl1cyA+IHRo
aXMudXBwZXJSYWRpdXNMaW1pdCkgeworICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLnVw
cGVyUmFkaXVzTGltaXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubG93ZXJIZWlnaHRP
ZmZzZXRMaW1pdCAhPT0gbnVsbCAmJgorICAgICAgICAgICAgdGhpcy5oZWlnaHRPZmZzZXQgPCB0
aGlzLmxvd2VySGVpZ2h0T2Zmc2V0TGltaXQpIHsKKyAgICAgICAgICAgIHRoaXMuaGVpZ2h0T2Zm
c2V0ID0gdGhpcy5sb3dlckhlaWdodE9mZnNldExpbWl0OworICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLnVwcGVySGVpZ2h0T2Zmc2V0TGltaXQgIT09IG51bGwgJiYKKyAgICAgICAgICAgIHRo
aXMuaGVpZ2h0T2Zmc2V0ID4gdGhpcy51cHBlckhlaWdodE9mZnNldExpbWl0KSB7CisgICAgICAg
ICAgICB0aGlzLmhlaWdodE9mZnNldCA9IHRoaXMudXBwZXJIZWlnaHRPZmZzZXRMaW1pdDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5sb3dlclJvdGF0aW9uT2Zmc2V0TGltaXQgIT09IG51
bGwgJiYKKyAgICAgICAgICAgIHRoaXMucm90YXRpb25PZmZzZXQgPCB0aGlzLmxvd2VyUm90YXRp
b25PZmZzZXRMaW1pdCkgeworICAgICAgICAgICAgdGhpcy5yb3RhdGlvbk9mZnNldCA9IHRoaXMu
bG93ZXJSb3RhdGlvbk9mZnNldExpbWl0OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnVw
cGVyUm90YXRpb25PZmZzZXRMaW1pdCAhPT0gbnVsbCAmJgorICAgICAgICAgICAgdGhpcy5yb3Rh
dGlvbk9mZnNldCA+IHRoaXMudXBwZXJSb3RhdGlvbk9mZnNldExpbWl0KSB7CisgICAgICAgICAg
ICB0aGlzLnJvdGF0aW9uT2Zmc2V0ID0gdGhpcy51cHBlclJvdGF0aW9uT2Zmc2V0TGltaXQ7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGNhbWVyYSBjbGFzcyBu
YW1lLgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgRm9sbG93
Q2FtZXJhLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAiRm9sbG93Q2FtZXJhIjsKKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
Rm9sbG93Q2FtZXJhLnByb3RvdHlwZSwgInJhZGl1cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmEucHJvdG90eXBlLCAibG93ZXJSYWRpdXNMaW1pdCIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmEucHJvdG90
eXBlLCAidXBwZXJSYWRpdXNMaW1pdCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAg
ICBdLCBGb2xsb3dDYW1lcmEucHJvdG90eXBlLCAicm90YXRpb25PZmZzZXQiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJhLnByb3RvdHlwZSwgImxvd2Vy
Um90YXRpb25PZmZzZXRMaW1pdCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBd
LCBGb2xsb3dDYW1lcmEucHJvdG90eXBlLCAidXBwZXJSb3RhdGlvbk9mZnNldExpbWl0Iiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZvbGxvd0NhbWVyYS5wcm90b3R5cGUs
ICJoZWlnaHRPZmZzZXQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9s
bG93Q2FtZXJhLnByb3RvdHlwZSwgImxvd2VySGVpZ2h0T2Zmc2V0TGltaXQiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRm9sbG93Q2FtZXJhLnByb3RvdHlwZSwgInVwcGVy
SGVpZ2h0T2Zmc2V0TGltaXQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
Rm9sbG93Q2FtZXJhLnByb3RvdHlwZSwgImNhbWVyYUFjY2VsZXJhdGlvbiIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBGb2xsb3dDYW1lcmEucHJvdG90eXBlLCAibWF4Q2Ft
ZXJhU3BlZWQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzTWVzaFJlZmVyZW5jZSJdKSgibG9j
a2VkVGFyZ2V0SWQiKQorICAgIF0sIEZvbGxvd0NhbWVyYS5wcm90b3R5cGUsICJsb2NrZWRUYXJn
ZXQiLCB2b2lkIDApOworICAgIHJldHVybiBGb2xsb3dDYW1lcmE7Cit9KF90YXJnZXRDYW1lcmFf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVGFyZ2V0Q2FtZXJhIl0pKTsKKworLyoqCisg
KiBBcmMgUm90YXRlIHZlcnNpb24gb2YgdGhlIGZvbGxvdyBjYW1lcmEuCisgKiBJdCBzdGlsbCBm
b2xsb3dzIGEgRGVmaW5lZCBtZXNoIGJ1dCBpbiBhbiBBcmMgUm90YXRlIENhbWVyYSBmYXNoaW9u
LgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vZmVhdHVyZXMvY2FtZXJhcyNmb2xs
b3ctY2FtZXJhCisgKi8KK3ZhciBBcmNGb2xsb3dDYW1lcmEgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oQXJjRm9sbG93Q2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIElu
c3RhbnRpYXRlcyBhIG5ldyBBcmNGb2xsb3dDYW1lcmEKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI2ZvbGxvdy1jYW1lcmEKKyAgICAgKiBAcGFy
YW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGNhbWVyYQorICAgICAqIEBwYXJhbSBhbHBo
YSBEZWZpbmUgdGhlIHJvdGF0aW9uIGFuZ2xlIG9mIHRoZSBjYW1lcmEgYXJvdW5kIHRoZSBsb2dp
dHVkaW5hbCBheGlzCisgICAgICogQHBhcmFtIGJldGEgRGVmaW5lIHRoZSByb3RhdGlvbiBhbmds
ZSBvZiB0aGUgY2FtZXJhIGFyb3VuZCB0aGUgZWxldmF0aW9uIGF4aXMKKyAgICAgKiBAcGFyYW0g
cmFkaXVzIERlZmluZSB0aGUgcmFkaXVzIG9mIHRoZSBjYW1lcmEgZnJvbSBpdHMgdGFyZ2V0IHBv
aW50CisgICAgICogQHBhcmFtIHRhcmdldCBEZWZpbmUgdGhlIHRhcmdldCBvZiB0aGUgY2FtZXJh
CisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIGNhbWVyYSBiZWxvbmdz
IHRvCisgICAgICovCisgICAgZnVuY3Rpb24gQXJjRm9sbG93Q2FtZXJhKG5hbWUsIAorICAgIC8q
KiBUaGUgbG9uZ2l0dWRpbmFsIGFuZ2xlIG9mIHRoZSBjYW1lcmEgKi8KKyAgICBhbHBoYSwgCisg
ICAgLyoqIFRoZSBsYXRpdHVkaW5hbCBhbmdsZSBvZiB0aGUgY2FtZXJhICovCisgICAgYmV0YSwg
CisgICAgLyoqIFRoZSByYWRpdXMgb2YgdGhlIGNhbWVyYSBmcm9tIGl0cyB0YXJnZXQgKi8KKyAg
ICByYWRpdXMsIAorICAgIC8qKiBEZWZpbmUgdGhlIGNhbWVyYSB0YXJnZXQgKHRoZSBtZXNzaCBp
dCBzaG91bGQgZm9sbG93KSAqLworICAgIHRhcmdldCwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKSB8fCB0aGlzOwor
ICAgICAgICBfdGhpcy5hbHBoYSA9IGFscGhhOworICAgICAgICBfdGhpcy5iZXRhID0gYmV0YTsK
KyAgICAgICAgX3RoaXMucmFkaXVzID0gcmFkaXVzOworICAgICAgICBfdGhpcy50YXJnZXQgPSB0
YXJnZXQ7CisgICAgICAgIF90aGlzLl9jYXJ0ZXNpYW5Db29yZGluYXRlcyA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICBfdGhpcy5fZm9sbG93KCk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9Cisg
ICAgQXJjRm9sbG93Q2FtZXJhLnByb3RvdHlwZS5fZm9sbG93ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAoIXRoaXMudGFyZ2V0KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fY2FydGVzaWFuQ29vcmRpbmF0ZXMueCA9IHRoaXMucmFkaXVzICogTWF0
aC5jb3ModGhpcy5hbHBoYSkgKiBNYXRoLmNvcyh0aGlzLmJldGEpOworICAgICAgICB0aGlzLl9j
YXJ0ZXNpYW5Db29yZGluYXRlcy55ID0gdGhpcy5yYWRpdXMgKiBNYXRoLnNpbih0aGlzLmJldGEp
OworICAgICAgICB0aGlzLl9jYXJ0ZXNpYW5Db29yZGluYXRlcy56ID0gdGhpcy5yYWRpdXMgKiBN
YXRoLnNpbih0aGlzLmFscGhhKSAqIE1hdGguY29zKHRoaXMuYmV0YSk7CisgICAgICAgIHZhciB0
YXJnZXRQb3NpdGlvbiA9IHRoaXMudGFyZ2V0LmdldEFic29sdXRlUG9zaXRpb24oKTsKKyAgICAg
ICAgdGhpcy5wb3NpdGlvbiA9IHRhcmdldFBvc2l0aW9uLmFkZCh0aGlzLl9jYXJ0ZXNpYW5Db29y
ZGluYXRlcyk7CisgICAgICAgIHRoaXMuc2V0VGFyZ2V0KHRhcmdldFBvc2l0aW9uKTsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQXJjRm9sbG93Q2FtZXJhLnByb3RvdHlwZS5fY2hl
Y2tJbnB1dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2NoZWNr
SW5wdXRzLmNhbGwodGhpcyk7CisgICAgICAgIHRoaXMuX2ZvbGxvdygpOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LgorICAgICAq
IEl0IGlzIG1vc3RseSB1c2VkIGludGVybmFsbHkgZm9yIHNlcmlhbGl6YXRpb24gcHVycG9zZXMu
CisgICAgICovCisgICAgQXJjRm9sbG93Q2FtZXJhLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQXJjRm9sbG93Q2FtZXJhIjsKKyAgICB9Owor
ICAgIHJldHVybiBBcmNGb2xsb3dDYW1lcmE7Cit9KF90YXJnZXRDYW1lcmFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siVGFyZ2V0Q2FtZXJhIl0pKTsKKworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9DYW1lcmFzL2ZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2Ft
ZXJhcy9mb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
Rm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJGb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBG
b2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jYW1lcmFJbnB1dHNNYW5h
Z2VyICovICIuL0NhbWVyYXMvY2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9JbnB1dHNfZm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vSW5wdXRz
L2ZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZvbGxv
d0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0lucHV0c19mb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vSW5wdXRzL2ZvbGxvd0NhbWVyYU1v
dXNlV2hlZWxJbnB1dCAqLyAiLi9DYW1lcmFzL0lucHV0cy9mb2xsb3dDYW1lcmFNb3VzZVdoZWVs
SW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfSW5wdXRzX2ZvbGxvd0NhbWVy
YVBvaW50ZXJzSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vSW5wdXRzL2ZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQgKi8gIi4vQ2Ft
ZXJhcy9JbnB1dHMvZm9sbG93Q2FtZXJhUG9pbnRlcnNJbnB1dC50cyIpOworCisKKworCisKKy8q
KgorICogRGVmYXVsdCBJbnB1dHMgbWFuYWdlciBmb3IgdGhlIEZvbGxvd0NhbWVyYS4KKyAqIEl0
IGdyb3VwcyBhbGwgdGhlIGRlZmF1bHQgc3VwcG9ydGVkIGlucHV0cyBmb3IgZWFzZSBvZiB1c2Uu
CisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3VzdG9taXppbmdfY2Ft
ZXJhX2lucHV0cworICovCit2YXIgRm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlciA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2V4dGVuZHMiXShGb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyLCBfc3VwZXIp
OworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBGb2xsb3dDYW1lcmFJbnB1dHNN
YW5hZ2VyLgorICAgICAqIEBwYXJhbSBjYW1lcmEgRGVmaW5lcyB0aGUgY2FtZXJhIHRoZSBpbnB1
dHMgYmVsb25nIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gRm9sbG93Q2FtZXJhSW5wdXRzTWFu
YWdlcihjYW1lcmEpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIGNhbWVyYSkg
fHwgdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIGtleWJvYXJkIGlucHV0IHN1cHBv
cnQgdG8gdGhlIGlucHV0IG1hbmFnZXIuCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgaW5w
dXQgbWFuYWdlcgorICAgICAqLworICAgIEZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIucHJvdG90
eXBlLmFkZEtleWJvYXJkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmFkZChuZXcgX0lu
cHV0c19mb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCJdKCkpOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBtb3VzZSB3aGVlbCBpbnB1dCBz
dXBwb3J0IHRvIHRoZSBpbnB1dCBtYW5hZ2VyLgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50
IGlucHV0IG1hbmFnZXIKKyAgICAgKi8KKyAgICBGb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyLnBy
b3RvdHlwZS5hZGRNb3VzZVdoZWVsID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmFkZChu
ZXcgX0lucHV0c19mb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siRm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0Il0oKSk7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkIHBvaW50ZXJzIGlucHV0IHN1
cHBvcnQgdG8gdGhlIGlucHV0IG1hbmFnZXIuCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQg
aW5wdXQgbWFuYWdlcgorICAgICAqLworICAgIEZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIucHJv
dG90eXBlLmFkZFBvaW50ZXJzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmFkZChuZXcg
X0lucHV0c19mb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQiXSgpKTsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgb3JpZW50YXRpb24gaW5wdXQgc3VwcG9y
dCB0byB0aGUgaW5wdXQgbWFuYWdlci4KKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBpbnB1
dCBtYW5hZ2VyCisgICAgICovCisgICAgRm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlci5wcm90b3R5
cGUuYWRkVlJEZXZpY2VPcmllbnRhdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY29uc29s
ZS53YXJuKCJEZXZpY2VPcmllbnRhdGlvbiBzdXBwb3J0IG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9y
IEZvbGxvd0NhbWVyYS4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1
cm4gRm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlcjsKK30oX2NhbWVyYUlucHV0c01hbmFnZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ2FtZXJhSW5wdXRzTWFuYWdlciJdKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2FtZXJhcy9mcmVlQ2FtZXJhLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvZnJlZUNhbWVy
YS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IEZyZWVDYW1lcmEgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRnJlZUNhbWVyYTsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3Ig
Ki8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RhcmdldENhbWVyYV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90YXJnZXRDYW1lcmEgKi8g
Ii4vQ2FtZXJhcy90YXJnZXRDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
ZnJlZUNhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2Ft
ZXJhcy9mcmVlQ2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOworCisKKworCisKKworLyoqCisgKiBU
aGlzIHJlcHJlc2VudHMgYSBmcmVlIHR5cGUgb2YgY2FtZXJhLiBJdCBjYW4gYmUgdXNlZnVsIGlu
IEZpcnN0IFBlcnNvbiBTaG9vdGVyIGdhbWUgZm9yIGluc3RhbmNlLgorICogUGxlYXNlIGNvbnNp
ZGVyIHVzaW5nIHRoZSBuZXcgVW5pdmVyc2FsQ2FtZXJhIGluc3RlYWQgYXMgaXQgYWRkcyBtb3Jl
IGZ1bmN0aW9uYWxpdHkgbGlrZSB0aGUgZ2FtZXBhZC4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2ZlYXR1cmVzL2NhbWVyYXMjdW5pdmVyc2FsLWNhbWVyYQorICovCit2YXIgRnJl
ZUNhbWVyYSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShGcmVlQ2FtZXJhLCBfc3Vw
ZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIEZyZWUgQ2FtZXJhLgorICAgICAq
IFRoaXMgcmVwcmVzZW50cyBhIGZyZWUgdHlwZSBvZiBjYW1lcmEuIEl0IGNhbiBiZSB1c2VmdWwg
aW4gRmlyc3QgUGVyc29uIFNob290ZXIgZ2FtZSBmb3IgaW5zdGFuY2UuCisgICAgICogUGxlYXNl
IGNvbnNpZGVyIHVzaW5nIHRoZSBuZXcgVW5pdmVyc2FsQ2FtZXJhIGluc3RlYWQgYXMgaXQgYWRk
cyBtb3JlIGZ1bmN0aW9uYWxpdHkgbGlrZSB0b3VjaCB0byB0aGlzIGNhbWVyYS4KKyAgICAgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI3VuaXZlcnNhbC1j
YW1lcmEKKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGNhbWVyYSBp
biB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gcG9zaXRpb24gRGVmaW5lIHRoZSBzdGFydCBwb3Np
dGlvbiBvZiB0aGUgY2FtZXJhIGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZp
bmUgdGhlIHNjZW5lIHRoZSBjYW1lcmEgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBzZXRBY3Rp
dmVPblNjZW5lSWZOb25lQWN0aXZlIERlZmluZXMgd2hldGVyIHRoZSBjYW1lcmEgc2hvdWxkIGJl
IG1hcmtlZCBhcyBhY3RpdmUgaWYgbm90IG90aGVyIGFjdGl2ZSBjYW1lcmFzIGhhdmUgYmVlbiBk
ZWZpbmVkCisgICAgICovCisgICAgZnVuY3Rpb24gRnJlZUNhbWVyYShuYW1lLCBwb3NpdGlvbiwg
c2NlbmUsIHNldEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUpIHsKKyAgICAgICAgaWYgKHNldEFj
dGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUgPT09IHZvaWQgMCkgeyBzZXRBY3RpdmVPblNjZW5lSWZO
b25lQWN0aXZlID0gdHJ1ZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlz
LCBuYW1lLCBwb3NpdGlvbiwgc2NlbmUsIHNldEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUpIHx8
IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGNvbGxpc2lvbiBlbGxp
cHNvaWQgb2YgdGhlIGNhbWVyYS4KKyAgICAgICAgICogVGhpcyBpcyBoZWxwZnVsIHRvIHNpbXVs
YXRlIGEgY2FtZXJhIGJvZHkgbGlrZSB0aGUgcGxheWVyIGJvZHkgYXJvdW5kIHRoZSBjYW1lcmEK
KyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9jYW1l
cmFzLF9tZXNoX2NvbGxpc2lvbnNfYW5kX2dyYXZpdHkjYXJjcm90YXRlY2FtZXJhCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5lbGxpcHNvaWQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgwLjUsIDEsIDAuNSk7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgYW4gb2Zmc2V0IGZvciB0aGUgcG9zaXRpb24gb2Yg
dGhlIGVsbGlwc29pZCBhcm91bmQgdGhlIGNhbWVyYS4KKyAgICAgICAgICogVGhpcyBjYW4gYmUg
aGVscGZ1bCB0byBkZXRlcm1pbmUgdGhlIGNlbnRlciBvZiB0aGUgYm9keSBuZWFyIHRoZSBncmF2
aXR5IGNlbnRlciBvZiB0aGUgYm9keQorICAgICAgICAgKiBpbnN0ZWFkIG9mIGl0cyBoZWFkLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZWxsaXBzb2lkT2Zmc2V0ID0gbmV3IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0oMCwgMCwg
MCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSBjb2xsaXNpb25z
IG9mIHRoZSBjYW1lcmEgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc2NlbmUgb2JqZWN0cy4KKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLmNoZWNrQ29sbGlzaW9ucyA9IGZhbHNlOworICAgICAgICAv
KioKKyAgICAgICAgICogRW5hYmxlIG9yIGRpc2FibGUgZ3Jhdml0eSBvbiB0aGUgY2FtZXJhLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXBwbHlHcmF2aXR5ID0gZmFsc2U7CisgICAgICAg
IF90aGlzLl9uZWVkTW92ZUZvckdyYXZpdHkgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX29sZFBv
c2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9kaWZmUG9zaXRpb24gPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8o
KTsKKyAgICAgICAgX3RoaXMuX25ld1Bvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8vIENv
bGxpc2lvbnMKKyAgICAgICAgX3RoaXMuX2NvbGxpc2lvbk1hc2sgPSAtMTsKKyAgICAgICAgX3Ro
aXMuX29uQ29sbGlzaW9uUG9zaXRpb25DaGFuZ2UgPSBmdW5jdGlvbiAoY29sbGlzaW9uSWQsIG5l
d1Bvc2l0aW9uLCBjb2xsaWRlZE1lc2gpIHsKKyAgICAgICAgICAgIGlmIChjb2xsaWRlZE1lc2gg
PT09IHZvaWQgMCkgeyBjb2xsaWRlZE1lc2ggPSBudWxsOyB9CisgICAgICAgICAgICB2YXIgdXBk
YXRlUG9zaXRpb24gPSBmdW5jdGlvbiAobmV3UG9zKSB7CisgICAgICAgICAgICAgICAgX3RoaXMu
X25ld1Bvc2l0aW9uLmNvcHlGcm9tKG5ld1Bvcyk7CisgICAgICAgICAgICAgICAgX3RoaXMuX25l
d1Bvc2l0aW9uLnN1YnRyYWN0VG9SZWYoX3RoaXMuX29sZFBvc2l0aW9uLCBfdGhpcy5fZGlmZlBv
c2l0aW9uKTsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2RpZmZQb3NpdGlvbi5sZW5ndGgo
KSA+IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUi
XS5Db2xsaXNpb25zRXBzaWxvbikgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5wb3NpdGlv
bi5hZGRJblBsYWNlKF90aGlzLl9kaWZmUG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBp
ZiAoX3RoaXMub25Db2xsaWRlICYmIGNvbGxpZGVkTWVzaCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMub25Db2xsaWRlKGNvbGxpZGVkTWVzaCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdXBkYXRl
UG9zaXRpb24obmV3UG9zaXRpb24pOworICAgICAgICB9OworICAgICAgICBfdGhpcy5pbnB1dHMg
PSBuZXcgX2ZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIkZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyIl0oX3RoaXMpOworICAgICAgICBfdGhpcy5pbnB1
dHMuYWRkS2V5Ym9hcmQoKS5hZGRNb3VzZSgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAg
fQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGcmVlQ2FtZXJhLnByb3RvdHlwZSwgImFuZ3Vs
YXJTZW5zaWJpbGl0eSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGlucHV0
IHNlbnNpYmlsaXR5IGZvciBhIG1vdXNlIGlucHV0LiAoZGVmYXVsdCBpcyAyMDAwLjApCisgICAg
ICAgICAqIEhpZ2hlciB2YWx1ZXMgcmVkdWNlIHNlbnNpdGl2aXR5LgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbW91c2UgPSB0aGlzLmlu
cHV0cy5hdHRhY2hlZFsibW91c2UiXTsKKyAgICAgICAgICAgIGlmIChtb3VzZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBtb3VzZS5hbmd1bGFyU2Vuc2liaWxpdHk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFNldHMgdGhlIGlucHV0IHNlbnNpYmlsaXR5IGZvciBhIG1vdXNlIGlucHV0LiAoZGVmYXVs
dCBpcyAyMDAwLjApCisgICAgICAgICAqIEhpZ2hlciB2YWx1ZXMgcmVkdWNlIHNlbnNpdGl2aXR5
LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIHZhciBtb3VzZSA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJtb3VzZSJdOworICAgICAgICAg
ICAgaWYgKG1vdXNlKSB7CisgICAgICAgICAgICAgICAgbW91c2UuYW5ndWxhclNlbnNpYmlsaXR5
ID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShGcmVlQ2FtZXJhLnByb3RvdHlwZSwgImtleXNVcCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgb3IgU2V0IHRoZSBsaXN0IG9mIGtleWJvYXJkIGtleXMgdXNl
ZCB0byBjb250cm9sIHRoZSBmb3J3YXJkIG1vdmUgb2YgdGhlIGNhbWVyYS4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0g
dGhpcy5pbnB1dHMuYXR0YWNoZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9h
cmQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga2V5Ym9hcmQua2V5c1VwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIGtleWJvYXJkID0gdGhpcy5pbnB1dHMu
YXR0YWNoZWRbImtleWJvYXJkIl07CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmQpIHsKKyAgICAg
ICAgICAgICAgICBrZXlib2FyZC5rZXlzVXAgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZyZWVDYW1lcmEucHJvdG90
eXBlLCAia2V5c0Rvd24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIFNldCB0
aGUgbGlzdCBvZiBrZXlib2FyZCBrZXlzIHVzZWQgdG8gY29udHJvbCB0aGUgYmFja3dhcmQgbW92
ZSBvZiB0aGUgY2FtZXJhLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICB2YXIga2V5Ym9hcmQgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsia2V5Ym9h
cmQiXTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZCkgeworICAgICAgICAgICAgICAgIHJldHVy
biBrZXlib2FyZC5rZXlzRG93bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBb
XTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIHZhciBrZXlib2FyZCA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAg
ICAgICAgICAgaWYgKGtleWJvYXJkKSB7CisgICAgICAgICAgICAgICAga2V5Ym9hcmQua2V5c0Rv
d24gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEZyZWVDYW1lcmEucHJvdG90eXBlLCAia2V5c0xlZnQiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIFNldCB0aGUgbGlzdCBvZiBrZXlib2FyZCBrZXlz
IHVzZWQgdG8gY29udHJvbCB0aGUgbGVmdCBzdHJhZmUgbW92ZSBvZiB0aGUgY2FtZXJhLgorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIga2V5
Ym9hcmQgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsia2V5Ym9hcmQiXTsKKyAgICAgICAgICAgIGlm
IChrZXlib2FyZCkgeworICAgICAgICAgICAgICAgIHJldHVybiBrZXlib2FyZC5rZXlzTGVmdDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfSwKKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRo
aXMuaW5wdXRzLmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJk
KSB7CisgICAgICAgICAgICAgICAga2V5Ym9hcmQua2V5c0xlZnQgPSB2YWx1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZyZWVD
YW1lcmEucHJvdG90eXBlLCAia2V5c1JpZ2h0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyBvciBTZXQgdGhlIGxpc3Qgb2Yga2V5Ym9hcmQga2V5cyB1c2VkIHRvIGNvbnRyb2wgdGhl
IHJpZ2h0IHN0cmFmZSBtb3ZlIG9mIHRoZSBjYW1lcmEuCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRoaXMuaW5wdXRz
LmF0dGFjaGVkWyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJkKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGtleWJvYXJkLmtleXNSaWdodDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBrZXlib2FyZCA9IHRoaXMuaW5wdXRzLmF0dGFjaGVk
WyJrZXlib2FyZCJdOworICAgICAgICAgICAgaWYgKGtleWJvYXJkKSB7CisgICAgICAgICAgICAg
ICAga2V5Ym9hcmQua2V5c1JpZ2h0ID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIC8qKgorICAgICAqIEF0dGFjaGVkIGNvbnRyb2xzIHRvIHRoZSBjdXJyZW50
IGNhbWVyYS4KKyAgICAgKiBAcGFyYW0gZWxlbWVudCBEZWZpbmVzIHRoZSBlbGVtZW50IHRoZSBj
b250cm9scyBzaG91bGQgYmUgbGlzdGVuZWQgZnJvbQorICAgICAqIEBwYXJhbSBub1ByZXZlbnRE
ZWZhdWx0IERlZmluZXMgd2hldGhlciBldmVudCBjYXVnaHQgYnkgdGhlIGNvbnRyb2xzIHNob3Vs
ZCBjYWxsIHByZXZlbnRkZWZhdWx0KCkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2Vu
LVVTL2RvY3MvV2ViL0FQSS9FdmVudC9wcmV2ZW50RGVmYXVsdCkKKyAgICAgKi8KKyAgICBGcmVl
Q2FtZXJhLnByb3RvdHlwZS5hdHRhY2hDb250cm9sID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5vUHJl
dmVudERlZmF1bHQpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMuYXR0YWNoRWxlbWVudChlbGVtZW50
LCBub1ByZXZlbnREZWZhdWx0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGFjaCB0aGUg
Y3VycmVudCBjb250cm9scyBmcm9tIHRoZSBjYW1lcmEuCisgICAgICogVGhlIGNhbWVyYSB3aWxs
IHN0b3AgcmVhY3RpbmcgdG8gaW5wdXRzLgorICAgICAqIEBwYXJhbSBlbGVtZW50IERlZmluZXMg
dGhlIGVsZW1lbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdGhlIGlucHV0cyBmcm9tCisgICAgICovCisg
ICAgRnJlZUNhbWVyYS5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9uIChlbGVtZW50
KSB7CisgICAgICAgIHRoaXMuaW5wdXRzLmRldGFjaEVsZW1lbnQoZWxlbWVudCk7CisgICAgICAg
IHRoaXMuY2FtZXJhRGlyZWN0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0oMCwgMCwgMCk7CisgICAgICAgIHRoaXMuY2Ft
ZXJhUm90YXRpb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlY3RvcjIiXSgwLCAwKTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShGcmVlQ2FtZXJhLnByb3RvdHlwZSwgImNvbGxpc2lvbk1hc2siLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmUgYSBjb2xsaXNpb24gbWFzayB0byBsaW1pdCB0aGUgbGlzdCBv
ZiBvYmplY3QgdGhlIGNhbWVyYSBjYW4gY29sbGlkZSB3aXRoCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb2xsaXNpb25N
YXNrOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXNrKSB7CisgICAgICAg
ICAgICB0aGlzLl9jb2xsaXNpb25NYXNrID0gIWlzTmFOKG1hc2spID8gbWFzayA6IC0xOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEZyZWVDYW1lcmEucHJvdG90
eXBlLl9jb2xsaWRlV2l0aFdvcmxkID0gZnVuY3Rpb24gKGRpc3BsYWNlbWVudCkgeworICAgICAg
ICB2YXIgZ2xvYmFsUG9zaXRpb247CisgICAgICAgIGlmICh0aGlzLnBhcmVudCkgeworICAgICAg
ICAgICAgZ2xvYmFsUG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzKHRoaXMucG9zaXRp
b24sIHRoaXMucGFyZW50LmdldFdvcmxkTWF0cml4KCkpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgZ2xvYmFsUG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uOworICAgICAg
ICB9CisgICAgICAgIGdsb2JhbFBvc2l0aW9uLnN1YnRyYWN0RnJvbUZsb2F0c1RvUmVmKDAsIHRo
aXMuZWxsaXBzb2lkLnksIDAsIHRoaXMuX29sZFBvc2l0aW9uKTsKKyAgICAgICAgdGhpcy5fb2xk
UG9zaXRpb24uYWRkSW5QbGFjZSh0aGlzLmVsbGlwc29pZE9mZnNldCk7CisgICAgICAgIHZhciBj
b29yZGluYXRvciA9IHRoaXMuZ2V0U2NlbmUoKS5jb2xsaXNpb25Db29yZGluYXRvcjsKKyAgICAg
ICAgaWYgKCF0aGlzLl9jb2xsaWRlcikgeworICAgICAgICAgICAgdGhpcy5fY29sbGlkZXIgPSBj
b29yZGluYXRvci5jcmVhdGVDb2xsaWRlcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Nv
bGxpZGVyLl9yYWRpdXMgPSB0aGlzLmVsbGlwc29pZDsKKyAgICAgICAgdGhpcy5fY29sbGlkZXIu
Y29sbGlzaW9uTWFzayA9IHRoaXMuX2NvbGxpc2lvbk1hc2s7CisgICAgICAgIC8vbm8gbmVlZCBm
b3IgY2xvbmUsIGFzIGxvbmcgYXMgZ3Jhdml0eSBpcyBub3Qgb24uCisgICAgICAgIHZhciBhY3R1
YWxEaXNwbGFjZW1lbnQgPSBkaXNwbGFjZW1lbnQ7CisgICAgICAgIC8vYWRkIGdyYXZpdHkgdG8g
dGhlIGRpcmVjdGlvbiB0byBwcmV2ZW50IHRoZSBkdWFsLWNvbGxpc2lvbiBjaGVja2luZworICAg
ICAgICBpZiAodGhpcy5hcHBseUdyYXZpdHkpIHsKKyAgICAgICAgICAgIC8vdGhpcyBwcmV2ZW50
cyBtZW5kaW5nIHdpdGggY2FtZXJhRGlyZWN0aW9uLCBhIGdsb2JhbCB2YXJpYWJsZSBvZiB0aGUg
ZnJlZSBjYW1lcmEgY2xhc3MuCisgICAgICAgICAgICBhY3R1YWxEaXNwbGFjZW1lbnQgPSBkaXNw
bGFjZW1lbnQuYWRkKHRoaXMuZ2V0U2NlbmUoKS5ncmF2aXR5KTsKKyAgICAgICAgfQorICAgICAg
ICBjb29yZGluYXRvci5nZXROZXdQb3NpdGlvbih0aGlzLl9vbGRQb3NpdGlvbiwgYWN0dWFsRGlz
cGxhY2VtZW50LCB0aGlzLl9jb2xsaWRlciwgMywgbnVsbCwgdGhpcy5fb25Db2xsaXNpb25Qb3Np
dGlvbkNoYW5nZSwgdGhpcy51bmlxdWVJZCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIEZyZWVDYW1lcmEucHJvdG90eXBlLl9jaGVja0lucHV0cyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9sb2NhbERpcmVjdGlvbikgeworICAgICAgICAgICAgdGhpcy5fbG9j
YWxEaXJlY3Rpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybWVkRGly
ZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5pbnB1dHMuY2hlY2tJ
bnB1dHMoKTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fY2hlY2tJbnB1dHMuY2FsbCh0aGlz
KTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRnJlZUNhbWVyYS5wcm90b3R5cGUu
X2RlY2lkZUlmTmVlZHNUb01vdmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9uZWVkTW92ZUZvckdyYXZpdHkgfHwgTWF0aC5hYnModGhpcy5jYW1lcmFEaXJlY3Rpb24ueCkg
PiAwIHx8IE1hdGguYWJzKHRoaXMuY2FtZXJhRGlyZWN0aW9uLnkpID4gMCB8fCBNYXRoLmFicyh0
aGlzLmNhbWVyYURpcmVjdGlvbi56KSA+IDA7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIEZyZWVDYW1lcmEucHJvdG90eXBlLl91cGRhdGVQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMuY2hlY2tDb2xsaXNpb25zICYmIHRoaXMuZ2V0U2NlbmUoKS5jb2xs
aXNpb25zRW5hYmxlZCkgeworICAgICAgICAgICAgdGhpcy5fY29sbGlkZVdpdGhXb3JsZCh0aGlz
LmNhbWVyYURpcmVjdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLl91cGRhdGVQb3NpdGlvbi5jYWxsKHRoaXMpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXN0cm95IHRoZSBjYW1lcmEgYW5kIHJlbGVhc2Ug
dGhlIGN1cnJlbnQgcmVzb3VyY2VzIGhvbGQgYnkgaXQuCisgICAgICovCisgICAgRnJlZUNhbWVy
YS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5pbnB1dHMu
Y2xlYXIoKTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IG9iamVjdCBjbGFzcyBuYW1l
LgorICAgICAqIEByZXR1cm4gdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJh
LnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAi
RnJlZUNhbWVyYSI7CisgICAgfTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1ZlY3RvcjMiXSkoKQorICAgIF0s
IEZyZWVDYW1lcmEucHJvdG90eXBlLCAiZWxsaXBzb2lkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emVBc1ZlY3RvcjMiXSkoKQorICAgIF0sIEZyZWVDYW1lcmEucHJvdG90eXBlLCAiZWxsaXBzb2lk
T2Zmc2V0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEZyZWVDYW1lcmEu
cHJvdG90eXBlLCAiY2hlY2tDb2xsaXNpb25zIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIEZyZWVDYW1lcmEucHJvdG90eXBlLCAiYXBwbHlHcmF2aXR5Iiwgdm9pZCAwKTsK
KyAgICByZXR1cm4gRnJlZUNhbWVyYTsKK30oX3RhcmdldENhbWVyYV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJUYXJnZXRDYW1lcmEiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL0NhbWVyYXMvZnJlZUNhbWVyYUlucHV0c01hbmFnZXIudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvZnJl
ZUNhbWVyYUlucHV0c01hbmFnZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRnJlZUNhbWVyYUlu
cHV0c01hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNh
bWVyYUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZyZWVDYW1lcmFJbnB1dHNN
YW5hZ2VyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25v
ZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfY2FtZXJhSW5wdXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jYW1lcmFJbnB1dHNNYW5hZ2VyICovICIuL0NhbWVyYXMv
Y2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1l
cmFzX0lucHV0c19mcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NhbWVyYXMvSW5wdXRzL2Zy
ZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCAqLyAiLi9DYW1lcmFzL0lucHV0cy9mcmVlQ2FtZXJh
S2V5Ym9hcmRNb3ZlSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJh
c19JbnB1dHNfZnJlZUNhbWVyYU1vdXNlSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFN
b3VzZUlucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFNb3VzZUlucHV0LnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfSW5wdXRzX2ZyZWVDYW1lcmFUb3Vj
aElucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9DYW1lcmFzL0lucHV0cy9mcmVlQ2FtZXJhVG91Y2hJbnB1dCAqLyAiLi9DYW1lcmFz
L0lucHV0cy9mcmVlQ2FtZXJhVG91Y2hJbnB1dC50cyIpOworCisKKworCisKKy8qKgorICogRGVm
YXVsdCBJbnB1dHMgbWFuYWdlciBmb3IgdGhlIEZyZWVDYW1lcmEuCisgKiBJdCBncm91cHMgYWxs
IHRoZSBkZWZhdWx0IHN1cHBvcnRlZCBpbnB1dHMgZm9yIGVhc2Ugb2YgdXNlLgorICogQHNlZSBo
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2N1c3RvbWl6aW5nX2NhbWVyYV9pbnB1dHMK
KyAqLwordmFyIEZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZXh0ZW5kcyJdKEZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIEluc3RhbnRpYXRlcyBhIG5ldyBGcmVlQ2FtZXJhSW5wdXRzTWFuYWdlci4KKyAgICAgKiBA
cGFyYW0gY2FtZXJhIERlZmluZXMgdGhlIGNhbWVyYSB0aGUgaW5wdXRzIGJlbG9uZyB0bworICAg
ICAqLworICAgIGZ1bmN0aW9uIEZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyKGNhbWVyYSkgeworICAg
ICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBjYW1lcmEpIHx8IHRoaXM7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5f
bW91c2VJbnB1dCA9IG51bGw7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoq
CisgICAgICogQWRkIGtleWJvYXJkIGlucHV0IHN1cHBvcnQgdG8gdGhlIGlucHV0IG1hbmFnZXIu
CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgaW5wdXQgbWFuYWdlcgorICAgICAqLworICAg
IEZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyLnByb3RvdHlwZS5hZGRLZXlib2FyZCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5hZGQobmV3IF9DYW1lcmFzX0lucHV0c19mcmVlQ2FtZXJhS2V5
Ym9hcmRNb3ZlSW5wdXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRnJlZUNhbWVyYUtl
eWJvYXJkTW92ZUlucHV0Il0oKSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
LyoqCisgICAgICogQWRkIG1vdXNlIGlucHV0IHN1cHBvcnQgdG8gdGhlIGlucHV0IG1hbmFnZXIu
CisgICAgICogQHBhcmFtIHRvdWNoRW5hYmxlZCBpZiB0aGUgRnJlZUNhbWVyYU1vdXNlSW5wdXQg
c2hvdWxkIHN1cHBvcnQgdG91Y2ggKGRlZmF1bHQ6IHRydWUpCisgICAgICogQHJldHVybnMgdGhl
IGN1cnJlbnQgaW5wdXQgbWFuYWdlcgorICAgICAqLworICAgIEZyZWVDYW1lcmFJbnB1dHNNYW5h
Z2VyLnByb3RvdHlwZS5hZGRNb3VzZSA9IGZ1bmN0aW9uICh0b3VjaEVuYWJsZWQpIHsKKyAgICAg
ICAgaWYgKHRvdWNoRW5hYmxlZCA9PT0gdm9pZCAwKSB7IHRvdWNoRW5hYmxlZCA9IHRydWU7IH0K
KyAgICAgICAgaWYgKCF0aGlzLl9tb3VzZUlucHV0KSB7CisgICAgICAgICAgICB0aGlzLl9tb3Vz
ZUlucHV0ID0gbmV3IF9DYW1lcmFzX0lucHV0c19mcmVlQ2FtZXJhTW91c2VJbnB1dF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJGcmVlQ2FtZXJhTW91c2VJbnB1dCJdKHRvdWNoRW5hYmxl
ZCk7CisgICAgICAgICAgICB0aGlzLmFkZCh0aGlzLl9tb3VzZUlucHV0KTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGhl
IG1vdXNlIGlucHV0IHN1cHBvcnQgZnJvbSB0aGUgbWFuYWdlcgorICAgICAqIEByZXR1cm5zIHRo
ZSBjdXJyZW50IGlucHV0IG1hbmFnZXIKKyAgICAgKi8KKyAgICBGcmVlQ2FtZXJhSW5wdXRzTWFu
YWdlci5wcm90b3R5cGUucmVtb3ZlTW91c2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLl9tb3VzZUlucHV0KSB7CisgICAgICAgICAgICB0aGlzLnJlbW92ZSh0aGlzLl9tb3VzZUlu
cHV0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFkZCB0b3VjaCBpbnB1dCBzdXBwb3J0IHRvIHRoZSBpbnB1dCBtYW5hZ2VyLgorICAg
ICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IGlucHV0IG1hbmFnZXIKKyAgICAgKi8KKyAgICBGcmVl
Q2FtZXJhSW5wdXRzTWFuYWdlci5wcm90b3R5cGUuYWRkVG91Y2ggPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuYWRkKG5ldyBfQ2FtZXJhc19JbnB1dHNfZnJlZUNhbWVyYVRvdWNoSW5wdXRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRnJlZUNhbWVyYVRvdWNoSW5wdXQiXSgpKTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxs
IGF0dGFjaGVkIGlucHV0IG1ldGhvZHMgZnJvbSBhIGNhbWVyYQorICAgICAqLworICAgIEZyZWVD
YW1lcmFJbnB1dHNNYW5hZ2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgX3N1cGVyLnByb3RvdHlwZS5jbGVhci5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl9tb3Vz
ZUlucHV0ID0gbnVsbDsKKyAgICB9OworICAgIHJldHVybiBGcmVlQ2FtZXJhSW5wdXRzTWFuYWdl
cjsKK30oX2NhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
Q2FtZXJhSW5wdXRzTWFuYWdlciJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ2Ft
ZXJhcy9nYW1lcGFkQ2FtZXJhLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL0NhbWVyYXMvZ2FtZXBhZENhbWVyYS50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEdh
bWVwYWRDYW1lcmEgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2FtZXBh
ZENhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gR2FtZXBhZENhbWVyYTsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNs
aWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3VuaXZlcnNhbENhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91
bml2ZXJzYWxDYW1lcmEgKi8gIi4vQ2FtZXJhcy91bml2ZXJzYWxDYW1lcmEudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworCisKKworCitfbm9kZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJOb2RlIl0uQWRkTm9kZUNvbnN0cnVjdG9yKCJHYW1lcGFkQ2FtZXJh
IiwgZnVuY3Rpb24gKG5hbWUsIHNjZW5lKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0
dXJuIG5ldyBHYW1lcGFkQ2FtZXJhKG5hbWUsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpLCBzY2VuZSk7IH07Cit9KTsKKy8q
KgorICogVGhpcyByZXByZXNlbnRzIGEgRlBTIHR5cGUgb2YgY2FtZXJhLiBUaGlzIGlzIG9ubHkg
aGVyZSBmb3IgYmFjayBjb21wYXQgcHVycG9zZS4KKyAqIFBsZWFzZSB1c2UgdGhlIFVuaXZlcnNh
bENhbWVyYSBpbnN0ZWFkIGFzIGJvdGggYXJlIGlkZW50aWNhbC4KKyAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL2NhbWVyYXMjdW5pdmVyc2FsLWNhbWVyYQorICovCit2
YXIgR2FtZXBhZENhbWVyYSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShHYW1lcGFk
Q2FtZXJhLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBHYW1l
cGFkIENhbWVyYQorICAgICAqIFRoaXMgcmVwcmVzZW50cyBhIEZQUyB0eXBlIG9mIGNhbWVyYS4g
VGhpcyBpcyBvbmx5IGhlcmUgZm9yIGJhY2sgY29tcGF0IHB1cnBvc2UuCisgICAgICogUGxlYXNl
IHVzZSB0aGUgVW5pdmVyc2FsQ2FtZXJhIGluc3RlYWQgYXMgYm90aCBhcmUgaWRlbnRpY2FsLgor
ICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL2NhbWVyYXMjdW5p
dmVyc2FsLWNhbWVyYQorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUg
Y2FtZXJhIGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBEZWZpbmUgdGhlIHN0
YXJ0IHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgaW4gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIHNj
ZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIGNhbWVyYSBiZWxvbmdzIHRvCisgICAgICovCisgICAg
ZnVuY3Rpb24gR2FtZXBhZENhbWVyYShuYW1lLCBwb3NpdGlvbiwgc2NlbmUpIHsKKyAgICAgICAg
cmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHBvc2l0aW9uLCBzY2VuZSkgfHwgdGhpczsK
KyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBvYmplY3QgY2xhc3MgbmFt
ZS4KKyAgICAgKiBAcmV0dXJuIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgR2FtZXBhZENh
bWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gIkdhbWVwYWRDYW1lcmEiOworICAgIH07CisgICAgcmV0dXJuIEdhbWVwYWRDYW1lcmE7Cit9
KF91bml2ZXJzYWxDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVW5pdmVyc2Fs
Q2FtZXJhIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL2luZGV4LnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL2lu
ZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IENhbWVyYUlucHV0VHlwZXMsIENhbWVyYUlucHV0c01hbmFnZXIsIENhbWVyYSwg
VGFyZ2V0Q2FtZXJhLCBGcmVlQ2FtZXJhLCBGcmVlQ2FtZXJhSW5wdXRzTWFuYWdlciwgVG91Y2hD
YW1lcmEsIEFyY1JvdGF0ZUNhbWVyYSwgQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlciwgRGV2
aWNlT3JpZW50YXRpb25DYW1lcmEsIEZseUNhbWVyYSwgRmx5Q2FtZXJhSW5wdXRzTWFuYWdlciwg
Rm9sbG93Q2FtZXJhLCBBcmNGb2xsb3dDYW1lcmEsIEZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIs
IEdhbWVwYWRDYW1lcmEsIFVuaXZlcnNhbENhbWVyYSwgVmlydHVhbEpveXN0aWNrc0NhbWVyYSwg
QXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0LCBBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dCwgQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LCBBcmNSb3RhdGVDYW1lcmFQb2lu
dGVyc0lucHV0LCBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5wdXQsIEZseUNh
bWVyYUtleWJvYXJkSW5wdXQsIEZseUNhbWVyYU1vdXNlSW5wdXQsIEZvbGxvd0NhbWVyYUtleWJv
YXJkTW92ZUlucHV0LCBGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQsIEZvbGxvd0NhbWVyYVBv
aW50ZXJzSW5wdXQsIEZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0LCBGcmVlQ2FtZXJh
R2FtZXBhZElucHV0LCBGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQsIEZyZWVDYW1lcmFNb3Vz
ZUlucHV0LCBGcmVlQ2FtZXJhVG91Y2hJbnB1dCwgRnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lu
cHV0LCBBbmFnbHlwaEFyY1JvdGF0ZUNhbWVyYSwgQW5hZ2x5cGhGcmVlQ2FtZXJhLCBBbmFnbHlw
aEdhbWVwYWRDYW1lcmEsIEFuYWdseXBoVW5pdmVyc2FsQ2FtZXJhLCBTdGVyZW9zY29waWNBcmNS
b3RhdGVDYW1lcmEsIFN0ZXJlb3Njb3BpY0ZyZWVDYW1lcmEsIFN0ZXJlb3Njb3BpY0dhbWVwYWRD
YW1lcmEsIFN0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYSwgVlJDYW1lcmFNZXRyaWNzLCBWUkRl
dmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhLCBWUkRldmljZU9yaWVudGF0aW9uRnJlZUNh
bWVyYSwgVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEsIE9uQWZ0ZXJFbnRlcmluZ1ZS
T2JzZXJ2YWJsZUV2ZW50LCBWUkV4cGVyaWVuY2VIZWxwZXIsIFdlYlZSRnJlZUNhbWVyYSwgV2Vi
WFJDYW1lcmEsIFdlYlhSRW50ZXJFeGl0VUlCdXR0b24sIFdlYlhSRW50ZXJFeGl0VUlPcHRpb25z
LCBXZWJYUkVudGVyRXhpdFVJLCBXZWJYUlN0YXRlLCBXZWJYUkV4cGVyaWVuY2VIZWxwZXIsIFdl
YlhSSW5wdXQsIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24sIFdlYlhSQ29udHJvbGxlclBv
aW50ZXJTZWxlY3Rpb24sIFdlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyLCBXZWJYUkNvbnRyb2xs
ZXIsIFdlYlhSTWFuYWdlZE91dHB1dENhbnZhcywgV2ViWFJTZXNzaW9uTWFuYWdlciAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0lucHV0c19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9JbnB1
dHMvaW5kZXggKi8gIi4vQ2FtZXJhcy9JbnB1dHMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSW5w
dXRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFyY1JvdGF0ZUNhbWVyYUdh
bWVwYWRJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmNSb3RhdGVDYW1lcmFLZXli
b2FyZE1vdmVJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0lucHV0c19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBcmNSb3RhdGVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmNSb3RhdGVDYW1lcmFNb3VzZVdoZWVsSW5wdXQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0Il07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJjUm90YXRl
Q2FtZXJhUG9pbnRlcnNJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmNSb3RhdGVD
YW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1
dHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJjUm90YXRlQ2FtZXJhVlJE
ZXZpY2VPcmllbnRhdGlvbklucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZseUNhbWVy
YUtleWJvYXJkSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJGbHlDYW1lcmFNb3VzZUlucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfSW5wdXRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZseUNhbWVyYU1v
dXNlSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRm9sbG93Q2FtZXJhS2V5Ym9hcmRN
b3ZlSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRm9sbG93Q2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfSW5wdXRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZv
bGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGb2xs
b3dDYW1lcmFQb2ludGVyc0lucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSW5wdXRzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYURldmljZU9yaWVudGF0aW9uSW5w
dXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRnJlZUNhbWVyYURldmljZU9yaWVudGF0aW9uSW5wdXQiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYUdhbWVwYWRJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0lucHV0c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJGcmVlQ2FtZXJh
R2FtZXBhZElucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmFLZXlib2Fy
ZE1vdmVJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0lucHV0c19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYU1vdXNlSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRnJlZUNhbWVy
YU1vdXNlSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYVRvdWNoSW5w
dXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1dHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRnJlZUNhbWVyYVRvdWNoSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiRnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
SW5wdXRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZyZWVDYW1lcmFWaXJ0
dWFsSm95c3RpY2tJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jYW1l
cmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL2NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9jYW1lcmFJ
bnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNhbWVyYUlucHV0VHlwZXMiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9jYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkNhbWVyYUlucHV0VHlwZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Q2FtZXJhSW5wdXRzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NhbWVyYUlucHV0c01h
bmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ2FtZXJhSW5wdXRzTWFuYWdlciJd
OyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2FtZXJhICovICIuL0Nh
bWVyYXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNhbWVyYSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmEiXTsg
fSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdGFyZ2V0Q2FtZXJhX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RhcmdldENhbWVy
YSAqLyAiLi9DYW1lcmFzL3RhcmdldENhbWVyYS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUYXJn
ZXRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90YXJnZXRDYW1lcmFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siVGFyZ2V0Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2ZyZWVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYSAqLyAiLi9DYW1lcmFzL2ZyZWVDYW1lcmEu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2ZyZWVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRnJlZUNhbWVyYSJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9mcmVlQ2FtZXJhSW5wdXRzTWFuYWdlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9m
cmVlQ2FtZXJhSW5wdXRzTWFuYWdlciAqLyAiLi9DYW1lcmFzL2ZyZWVDYW1lcmFJbnB1dHNNYW5h
Z2VyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfZnJlZUNhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siRnJlZUNhbWVyYUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfdG91Y2hDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdG91Y2hDYW1lcmEgKi8gIi4vQ2FtZXJhcy90
b3VjaENhbWVyYS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUb3VjaENhbWVyYSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX3RvdWNoQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRv
dWNoQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FyY1JvdGF0ZUNh
bWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9hcmNSb3RhdGVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1lcmEudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
YXJjUm90YXRlQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkFyY1JvdGF0ZUNh
bWVyYSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcmNSb3RhdGVDYW1lcmFJ
bnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2FyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9h
cmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1Jv
dGF0ZUNhbWVyYUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hcmNSb3RhdGVD
YW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkFyY1JvdGF0
ZUNhbWVyYUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
ZGV2aWNlT3JpZW50YXRpb25DYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vZGV2aWNlT3JpZW50YXRpb25DYW1lcmEgKi8gIi4vQ2Ft
ZXJhcy9kZXZpY2VPcmllbnRhdGlvbkNhbWVyYS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXZp
Y2VPcmllbnRhdGlvbkNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RldmljZU9yaWVudGF0
aW9uQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkRldmljZU9yaWVudGF0aW9u
Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZseUNhbWVyYV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZmx5
Q2FtZXJhICovICIuL0NhbWVyYXMvZmx5Q2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZs
eUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZseUNhbWVyYV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTBfX1siRmx5Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2ZseUNhbWVyYUlucHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ZseUNhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4v
Q2FtZXJhcy9mbHlDYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZs
eUNhbWVyYUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mbHlDYW1lcmFJbnB1
dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJGbHlDYW1lcmFJbnB1dHNN
YW5hZ2VyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZvbGxvd0NhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
Zm9sbG93Q2FtZXJhICovICIuL0NhbWVyYXMvZm9sbG93Q2FtZXJhLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkZvbGxvd0NhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZvbGxvd0NhbWVyYV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siRm9sbG93Q2FtZXJhIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkFyY0ZvbGxvd0NhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZvbGxv
d0NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siQXJjRm9sbG93Q2FtZXJhIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZvbGxvd0NhbWVyYUlucHV0c01hbmFn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL2ZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJhcy9mb2xsb3dDYW1lcmFJ
bnB1dHNNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZvbGxvd0NhbWVyYUlucHV0c01h
bmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJGb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2dhbWVwYWRDYW1lcmFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2dhbWVwYWRD
YW1lcmEgKi8gIi4vQ2FtZXJhcy9nYW1lcGFkQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9nYW1lcGFkQ2FtZXJhX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJHYW1lcGFkQ2FtZXJhIl07IH0pOworCisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1N0ZXJlb3Njb3BpY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU3RlcmVvc2NvcGljL2luZGV4
ICovICIuL0NhbWVyYXMvU3RlcmVvc2NvcGljL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkFuYWdseXBoQXJjUm90YXRlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfU3RlcmVvc2Nv
cGljX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJBbmFnbHlwaEFyY1JvdGF0
ZUNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmFnbHlwaEZyZWVDYW1lcmEiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9TdGVyZW9zY29waWNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE1X19bIkFuYWdseXBoRnJlZUNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJBbmFnbHlwaEdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9TdGVyZW9zY29w
aWNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIkFuYWdseXBoR2FtZXBhZENh
bWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmFnbHlwaFVuaXZlcnNhbENhbWVyYSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1N0ZXJlb3Njb3BpY19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTVfX1siQW5hZ2x5cGhVbml2ZXJzYWxDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU3RlcmVvc2NvcGljQXJjUm90YXRlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfU3RlcmVvc2NvcGljX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJTdGVy
ZW9zY29waWNBcmNSb3RhdGVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RlcmVv
c2NvcGljRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1N0ZXJlb3Njb3BpY19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siU3RlcmVvc2NvcGljRnJlZUNhbWVyYSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfU3RlcmVvc2NvcGljX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNV9fWyJTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlN0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X1N0ZXJlb3Njb3BpY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siU3RlcmVv
c2NvcGljVW5pdmVyc2FsQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3VuaXZlcnNhbENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vdW5pdmVyc2FsQ2FtZXJhICovICIuL0NhbWVyYXMvdW5pdmVyc2Fs
Q2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlVuaXZlcnNhbENhbWVyYSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX3VuaXZlcnNhbENhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZf
X1siVW5pdmVyc2FsQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Zp
cnR1YWxKb3lzdGlja3NDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZpcnR1YWxKb3lzdGlja3NDYW1lcmEgKi8gIi4vQ2FtZXJh
cy92aXJ0dWFsSm95c3RpY2tzQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpcnR1YWxK
b3lzdGlja3NDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92aXJ0dWFsSm95c3RpY2tzQ2Ft
ZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJWaXJ0dWFsSm95c3RpY2tzQ2FtZXJh
Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1ZSX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9WUi9pbmRleCAq
LyAiLi9DYW1lcmFzL1ZSL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSQ2FtZXJhTWV0
cmljcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1ZSX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xOF9fWyJWUkNhbWVyYU1ldHJpY3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVlJE
ZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1ZS
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJWUkRldmljZU9yaWVudGF0aW9u
QXJjUm90YXRlQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGV2aWNlT3JpZW50
YXRpb25GcmVlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVlJfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE4X19bIlZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfVlJfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4
X19bIlZSRGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIk9uQWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJsZUV2ZW50IiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfVlJfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIk9uQWZ0ZXJFbnRl
cmluZ1ZST2JzZXJ2YWJsZUV2ZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRXhwZXJp
ZW5jZUhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1ZSX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOF9fWyJWUkV4cGVyaWVuY2VIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiV2ViVlJGcmVlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVlJfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIldlYlZSRnJlZUNhbWVyYSJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9YUl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vWFIvaW5kZXggKi8gIi4vQ2FtZXJhcy9Y
Ui9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkNhbWVyYSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX1hSX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJXZWJYUkNh
bWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkVudGVyRXhpdFVJQnV0dG9uIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfWFJfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5
X19bIldlYlhSRW50ZXJFeGl0VUlCdXR0b24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2Vi
WFJFbnRlckV4aXRVSU9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9YUl9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siV2ViWFJFbnRlckV4aXRVSU9wdGlvbnMiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJFbnRlckV4aXRVSSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX1hSX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJXZWJYUkVudGVyRXhp
dFVJIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSU3RhdGUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9YUl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siV2ViWFJTdGF0
ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkV4cGVyaWVuY2VIZWxwZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9YUl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1si
V2ViWFJFeHBlcmllbmNlSGVscGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSSW5w
dXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9YUl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTlfX1siV2ViWFJJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkNvbnRy
b2xsZXJUZWxlcG9ydGF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfWFJfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE5X19bIldlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24iXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJDb250cm9sbGVyUG9pbnRlclNlbGVjdGlvbiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1hSX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
OV9fWyJXZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9uIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIldlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
WFJfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIldlYlhSQ29udHJvbGxlck1v
ZGVsTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSQ29udHJvbGxlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX1hSX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9f
WyJXZWJYUkNvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJNYW5hZ2Vk
T3V0cHV0Q2FudmFzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfWFJfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE5X19bIldlYlhSTWFuYWdlZE91dHB1dENhbnZhcyJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJXZWJYUlNlc3Npb25NYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
WFJfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIldlYlhSU2Vzc2lvbk1hbmFn
ZXIiXTsgfSk7CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvdGFyZ2V0Q2FtZXJhLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJhcy90YXJnZXRD
YW1lcmEudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFRhcmdldENhbWVyYSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJUYXJnZXRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRhcmdldENh
bWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2Rl
X21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2FtZXJhICovICIuL0NhbWVy
YXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5j
b25zdGFudHMgKi8gIi4vTWF0aHMvbWF0aC5jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmF4aXMgKi8gIi4vTWF0aHMv
bWF0aC5heGlzLnRzIik7CisKKworCisKKworCisvKioKKyAqIEEgdGFyZ2V0IGNhbWVyYSB0YWtl
cyBhIG1lc2ggb3IgcG9zaXRpb24gYXMgYSB0YXJnZXQgYW5kIGNvbnRpbnVlcyB0byBsb29rIGF0
IGl0IHdoaWxlIGl0IG1vdmVzLgorICogVGhpcyBpcyB0aGUgYmFzZSBvZiB0aGUgZm9sbG93LCBh
cmMgcm90YXRlIGNhbWVyYXMgYW5kIEZyZWUgY2FtZXJhCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzCisgKi8KK3ZhciBUYXJnZXRDYW1lcmEgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVGFyZ2V0Q2FtZXJhLCBfc3VwZXIpOworICAgIC8q
KgorICAgICAqIEluc3RhbnRpYXRlcyBhIHRhcmdldCBjYW1lcmEgdGhhdCB0YWtlcyBhIG1lc2gg
b3IgcG9zaXRpb24gYXMgYSB0YXJnZXQgYW5kIGNvbnRpbnVlcyB0byBsb29rIGF0IGl0IHdoaWxl
IGl0IG1vdmVzLgorICAgICAqIFRoaXMgaXMgdGhlIGJhc2Ugb2YgdGhlIGZvbGxvdywgYXJjIHJv
dGF0ZSBjYW1lcmFzIGFuZCBGcmVlIGNhbWVyYQorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2ZlYXR1cmVzL2NhbWVyYXMKKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmVzIHRo
ZSBuYW1lIG9mIHRoZSBjYW1lcmEgaW4gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIHBvc2l0aW9u
IERlZmluZXMgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgaW4gdGhlIHNjZW5lCisg
ICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRoZSBjYW1lcmEgYmVsb25ncyB0
bworICAgICAqIEBwYXJhbSBzZXRBY3RpdmVPblNjZW5lSWZOb25lQWN0aXZlIERlZmluZXMgd2hl
dGVyIHRoZSBjYW1lcmEgc2hvdWxkIGJlIG1hcmtlZCBhcyBhY3RpdmUgaWYgbm90IG90aGVyIGFj
dGl2ZSBjYW1lcmFzIGhhdmUgYmVlbiBkZWZpbmVkCisgICAgICovCisgICAgZnVuY3Rpb24gVGFy
Z2V0Q2FtZXJhKG5hbWUsIHBvc2l0aW9uLCBzY2VuZSwgc2V0QWN0aXZlT25TY2VuZUlmTm9uZUFj
dGl2ZSkgeworICAgICAgICBpZiAoc2V0QWN0aXZlT25TY2VuZUlmTm9uZUFjdGl2ZSA9PT0gdm9p
ZCAwKSB7IHNldEFjdGl2ZU9uU2NlbmVJZk5vbmVBY3RpdmUgPSB0cnVlOyB9CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHBvc2l0aW9uLCBzY2VuZSwgc2V0QWN0
aXZlT25TY2VuZUlmTm9uZUFjdGl2ZSkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZSB0aGUgY3VycmVudCBkaXJlY3Rpb24gdGhlIGNhbWVyYSBpcyBtb3ZpbmcgdG8KKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLmNhbWVyYURpcmVjdGlvbiA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDAp
OworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBjdXJyZW50IHJvdGF0aW9uIHRo
ZSBjYW1lcmEgaXMgcm90YXRpbmcgdG8KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmNhbWVy
YVJvdGF0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZWN0b3IyIl0oMCwgMCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBXaGVuIHNl
dCwgdGhlIHVwIHZlY3RvciBvZiB0aGUgY2FtZXJhIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgcm90
YXRpb24gb2YgdGhlIGNhbWVyYQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudXBkYXRlVXBW
ZWN0b3JGcm9tUm90YXRpb24gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX3RtcFF1YXRlcm5pb24g
PSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1
YXRlcm5pb24iXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBjdXJyZW50
IHJvdGF0aW9uIG9mIHRoZSBjYW1lcmEKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnJvdGF0
aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJWZWN0b3IzIl0oMCwgMCwgMCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhl
IGN1cnJlbnQgc3BlZWQgb2YgdGhlIGNhbWVyYQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
c3BlZWQgPSAyLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBZGQgY2NvbnN0cmFpbnQgdG8g
dGhlIGNhbWVyYSB0byBwcmV2ZW50IGl0IHRvIG1vdmUgZnJlZWx5IGluIGFsbCBkaXJlY3Rpb25z
IGFuZAorICAgICAgICAgKiBhcm91bmQgYWxsIGF4aXMuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5ub1JvdGF0aW9uQ29uc3RyYWludCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAg
ICogRGVmaW5lIHRoZSBjdXJyZW50IHRhcmdldCBvZiB0aGUgY2FtZXJhIGFzIGFuIG9iamVjdCBv
ciBhIHBvc2l0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubG9ja2VkVGFyZ2V0ID0g
bnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2N1cnJlbnRUYXJn
ZXQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2lu
aXRpYWxGb2NhbERpc3RhbmNlID0gMTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAg
X3RoaXMuX3ZpZXdNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siTWF0cml4Il0uWmVybygpOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAg
ICAgICBfdGhpcy5fY2FtTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLlplcm8oKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICAgICAgX3RoaXMuX2NhbWVyYVRyYW5zZm9ybU1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAg
IC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9jYW1lcmFSb3RhdGlvbk1hdHJpeCA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5a
ZXJvKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9yZWZlcmVuY2VQ
b2ludCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVjdG9yMyJdKDAsIDAsIDEpOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBf
dGhpcy5fdHJhbnNmb3JtZWRSZWZlcmVuY2VQb2ludCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBfdGhp
cy5fZ2xvYmFsQ3VycmVudFRhcmdldCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBfdGhpcy5fZ2xvYmFs
Q3VycmVudFVwVmVjdG9yID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9kZWZhdWx0VXAgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJd
LlVwKCk7CisgICAgICAgIF90aGlzLl9jYWNoZWRSb3RhdGlvblogPSAwOworICAgICAgICBfdGhp
cy5fY2FjaGVkUXVhdGVybmlvblJvdGF0aW9uWiA9IDA7CisgICAgICAgIHJldHVybiBfdGhpczsK
KyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgcG9zaXRpb24gaW4gZnJvbnQgb2YgdGhl
IGNhbWVyYSBhdCBhIGdpdmVuIGRpc3RhbmNlLgorICAgICAqIEBwYXJhbSBkaXN0YW5jZSBUaGUg
ZGlzdGFuY2UgZnJvbSB0aGUgY2FtZXJhIHdlIHdhbnQgdGhlIHBvc2l0aW9uIHRvIGJlCisgICAg
ICogQHJldHVybnMgdGhlIHBvc2l0aW9uCisgICAgICovCisgICAgVGFyZ2V0Q2FtZXJhLnByb3Rv
dHlwZS5nZXRGcm9udFBvc2l0aW9uID0gZnVuY3Rpb24gKGRpc3RhbmNlKSB7CisgICAgICAgIHRo
aXMuZ2V0V29ybGRNYXRyaXgoKTsKKyAgICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMuZ2V0VGFy
Z2V0KCkuc3VidHJhY3QodGhpcy5wb3NpdGlvbik7CisgICAgICAgIGRpcmVjdGlvbi5ub3JtYWxp
emUoKTsKKyAgICAgICAgZGlyZWN0aW9uLnNjYWxlSW5QbGFjZShkaXN0YW5jZSk7CisgICAgICAg
IHJldHVybiB0aGlzLmdsb2JhbFBvc2l0aW9uLmFkZChkaXJlY3Rpb24pOworICAgIH07CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBUYXJnZXRDYW1lcmEucHJvdG90eXBlLl9nZXRMb2NrZWRUYXJn
ZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmxvY2tlZFRhcmdl
dCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMubG9ja2VkVGFyZ2V0LmFic29sdXRlUG9zaXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMubG9j
a2VkVGFyZ2V0LmNvbXB1dGVXb3JsZE1hdHJpeCgpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzLmxvY2tlZFRhcmdldC5hYnNvbHV0ZVBvc2l0aW9uIHx8IHRoaXMubG9ja2VkVGFyZ2V0
OworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcmUgY3VycmVudCBjYW1lcmEgc3RhdGUgb2Yg
dGhlIGNhbWVyYSAoZm92LCBwb3NpdGlvbiwgcm90YXRpb24sIGV0Yy4uKQorICAgICAqIEByZXR1
cm5zIHRoZSBjYW1lcmEKKyAgICAgKi8KKyAgICBUYXJnZXRDYW1lcmEucHJvdG90eXBlLnN0b3Jl
U3RhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3N0b3JlZFBvc2l0aW9uID0gdGhp
cy5wb3NpdGlvbi5jbG9uZSgpOworICAgICAgICB0aGlzLl9zdG9yZWRSb3RhdGlvbiA9IHRoaXMu
cm90YXRpb24uY2xvbmUoKTsKKyAgICAgICAgaWYgKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7
CisgICAgICAgICAgICB0aGlzLl9zdG9yZWRSb3RhdGlvblF1YXRlcm5pb24gPSB0aGlzLnJvdGF0
aW9uUXVhdGVybmlvbi5jbG9uZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBfc3VwZXIu
cHJvdG90eXBlLnN0b3JlU3RhdGUuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJlc3RvcmVkIGNhbWVyYSBzdGF0ZS4gWW91IG11c3QgY2FsbCBzdG9yZVN0YXRlKCkgZmlyc3QK
KyAgICAgKiBAcmV0dXJucyB3aGV0aGVyIGl0IHdhcyBzdWNjZXNzZnVsIG9yIG5vdAorICAgICAq
IEBoaWRkZW4KKyAgICAgKi8KKyAgICBUYXJnZXRDYW1lcmEucHJvdG90eXBlLl9yZXN0b3JlU3Rh
dGVWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghX3N1cGVyLnByb3RvdHlwZS5f
cmVzdG9yZVN0YXRlVmFsdWVzLmNhbGwodGhpcykpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5fc3RvcmVkUG9zaXRp
b24uY2xvbmUoKTsKKyAgICAgICAgdGhpcy5yb3RhdGlvbiA9IHRoaXMuX3N0b3JlZFJvdGF0aW9u
LmNsb25lKCk7CisgICAgICAgIGlmICh0aGlzLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAg
ICAgICAgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24gPSB0aGlzLl9zdG9yZWRSb3RhdGlvblF1YXRl
cm5pb24uY2xvbmUoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmNhbWVyYURpcmVjdGlvbi5j
b3B5RnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5jYW1lcmFSb3RhdGlvbi5jb3B5
RnJvbUZsb2F0cygwLCAwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIFRhcmdldENhbWVyYS5wcm90b3R5cGUuX2luaXRDYWNoZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5faW5pdENhY2hlLmNhbGwodGhpcyk7
CisgICAgICAgIHRoaXMuX2NhY2hlLmxvY2tlZFRhcmdldCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKE51bWJlci5NQVhfVkFM
VUUsIE51bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUUpOworICAgICAgICB0aGlzLl9j
YWNoZS5yb3RhdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVmVjdG9yMyJdKE51bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUUs
IE51bWJlci5NQVhfVkFMVUUpOworICAgICAgICB0aGlzLl9jYWNoZS5yb3RhdGlvblF1YXRlcm5p
b24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlF1YXRlcm5pb24iXShOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIu
TUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICov
CisgICAgVGFyZ2V0Q2FtZXJhLnByb3RvdHlwZS5fdXBkYXRlQ2FjaGUgPSBmdW5jdGlvbiAoaWdu
b3JlUGFyZW50Q2xhc3MpIHsKKyAgICAgICAgaWYgKCFpZ25vcmVQYXJlbnRDbGFzcykgeworICAg
ICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fdXBkYXRlQ2FjaGUuY2FsbCh0aGlzKTsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgbG9ja2VkVGFyZ2V0UG9zaXRpb24gPSB0aGlzLl9nZXRMb2NrZWRU
YXJnZXRQb3NpdGlvbigpOworICAgICAgICBpZiAoIWxvY2tlZFRhcmdldFBvc2l0aW9uKSB7Cisg
ICAgICAgICAgICB0aGlzLl9jYWNoZS5sb2NrZWRUYXJnZXQgPSBudWxsOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9jYWNoZS5sb2NrZWRUYXJnZXQp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5sb2NrZWRUYXJnZXQgPSBsb2NrZWRUYXJn
ZXRQb3NpdGlvbi5jbG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUubG9ja2VkVGFyZ2V0LmNvcHlGcm9tKGxvY2tlZFRh
cmdldFBvc2l0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9j
YWNoZS5yb3RhdGlvbi5jb3B5RnJvbSh0aGlzLnJvdGF0aW9uKTsKKyAgICAgICAgaWYgKHRoaXMu
cm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICB0aGlzLl9jYWNoZS5yb3RhdGlvblF1
YXRlcm5pb24uY29weUZyb20odGhpcy5yb3RhdGlvblF1YXRlcm5pb24pOworICAgICAgICB9Cisg
ICAgfTsKKyAgICAvLyBTeW5jaHJvbml6ZWQKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFRhcmdl
dENhbWVyYS5wcm90b3R5cGUuX2lzU3luY2hyb25pemVkVmlld01hdHJpeCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKCFfc3VwZXIucHJvdG90eXBlLl9pc1N5bmNocm9uaXplZFZpZXdNYXRy
aXguY2FsbCh0aGlzKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHZhciBsb2NrZWRUYXJnZXRQb3NpdGlvbiA9IHRoaXMuX2dldExvY2tlZFRhcmdldFBv
c2l0aW9uKCk7CisgICAgICAgIHJldHVybiAodGhpcy5fY2FjaGUubG9ja2VkVGFyZ2V0ID8gdGhp
cy5fY2FjaGUubG9ja2VkVGFyZ2V0LmVxdWFscyhsb2NrZWRUYXJnZXRQb3NpdGlvbikgOiAhbG9j
a2VkVGFyZ2V0UG9zaXRpb24pCisgICAgICAgICAgICAmJiAodGhpcy5yb3RhdGlvblF1YXRlcm5p
b24gPyB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbi5lcXVhbHModGhpcy5fY2FjaGUucm90YXRpb25R
dWF0ZXJuaW9uKSA6IHRoaXMuX2NhY2hlLnJvdGF0aW9uLmVxdWFscyh0aGlzLnJvdGF0aW9uKSk7
CisgICAgfTsKKyAgICAvLyBNZXRob2RzCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUYXJnZXRD
YW1lcmEucHJvdG90eXBlLl9jb21wdXRlTG9jYWxDYW1lcmFTcGVlZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMuZ2V0RW5naW5lKCk7CisgICAgICAgIHJldHVybiB0
aGlzLnNwZWVkICogTWF0aC5zcXJ0KChlbmdpbmUuZ2V0RGVsdGFUaW1lKCkgLyAoZW5naW5lLmdl
dEZwcygpICogMTAwLjApKSk7CisgICAgfTsKKyAgICAvLyBUYXJnZXQKKyAgICAvKioKKyAgICAg
KiBEZWZpbmVzIHRoZSB0YXJnZXQgdGhlIGNhbWVyYSBzaG91bGQgbG9vayBhdC4KKyAgICAgKiBA
cGFyYW0gdGFyZ2V0IERlZmluZXMgdGhlIG5ldyB0YXJnZXQgYXMgYSBWZWN0b3Igb3IgYSBtZXNo
CisgICAgICovCisgICAgVGFyZ2V0Q2FtZXJhLnByb3RvdHlwZS5zZXRUYXJnZXQgPSBmdW5jdGlv
biAodGFyZ2V0KSB7CisgICAgICAgIHRoaXMudXBWZWN0b3Iubm9ybWFsaXplKCk7CisgICAgICAg
IHRoaXMuX2luaXRpYWxGb2NhbERpc3RhbmNlID0gdGFyZ2V0LnN1YnRyYWN0KHRoaXMucG9zaXRp
b24pLmxlbmd0aCgpOworICAgICAgICBpZiAodGhpcy5wb3NpdGlvbi56ID09PSB0YXJnZXQueikg
eworICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi56ICs9IF9NYXRoc19tYXRoX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFcHNpbG9uIl07CisgICAgICAgIH0KKyAgICAg
ICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJp
eCJdLkxvb2tBdExIVG9SZWYodGhpcy5wb3NpdGlvbiwgdGFyZ2V0LCB0aGlzLl9kZWZhdWx0VXAs
IHRoaXMuX2NhbU1hdHJpeCk7CisgICAgICAgIHRoaXMuX2NhbU1hdHJpeC5pbnZlcnQoKTsKKyAg
ICAgICAgdGhpcy5yb3RhdGlvbi54ID0gTWF0aC5hdGFuKHRoaXMuX2NhbU1hdHJpeC5tWzZdIC8g
dGhpcy5fY2FtTWF0cml4Lm1bMTBdKTsKKyAgICAgICAgdmFyIHZEaXIgPSB0YXJnZXQuc3VidHJh
Y3QodGhpcy5wb3NpdGlvbik7CisgICAgICAgIGlmICh2RGlyLnggPj0gMC4wKSB7CisgICAgICAg
ICAgICB0aGlzLnJvdGF0aW9uLnkgPSAoLU1hdGguYXRhbih2RGlyLnogLyB2RGlyLngpICsgTWF0
aC5QSSAvIDIuMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlz
LnJvdGF0aW9uLnkgPSAoLU1hdGguYXRhbih2RGlyLnogLyB2RGlyLngpIC0gTWF0aC5QSSAvIDIu
MCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5yb3RhdGlvbi56ID0gMDsKKyAgICAgICAgaWYg
KGlzTmFOKHRoaXMucm90YXRpb24ueCkpIHsKKyAgICAgICAgICAgIHRoaXMucm90YXRpb24ueCA9
IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzTmFOKHRoaXMucm90YXRpb24ueSkpIHsKKyAg
ICAgICAgICAgIHRoaXMucm90YXRpb24ueSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlz
TmFOKHRoaXMucm90YXRpb24ueikpIHsKKyAgICAgICAgICAgIHRoaXMucm90YXRpb24ueiA9IDA7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAg
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
UXVhdGVybmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYodGhpcy5yb3RhdGlvbi55LCB0
aGlzLnJvdGF0aW9uLngsIHRoaXMucm90YXRpb24ueiwgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24p
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQg
dGFyZ2V0IHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEuIFRoaXMgdmFsdWUgaXMgZXhwcmVzc2VkIGlu
IGxvY2FsIHNwYWNlLgorICAgICAqIEByZXR1cm5zIHRoZSB0YXJnZXQgcG9zaXRpb24KKyAgICAg
Ki8KKyAgICBUYXJnZXRDYW1lcmEucHJvdG90eXBlLmdldFRhcmdldCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUYXJnZXQ7CisgICAgfTsKKyAgICAvKiogQGhp
ZGRlbiAqLworICAgIFRhcmdldENhbWVyYS5wcm90b3R5cGUuX2RlY2lkZUlmTmVlZHNUb01vdmUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLmNhbWVyYURpcmVj
dGlvbi54KSA+IDAgfHwgTWF0aC5hYnModGhpcy5jYW1lcmFEaXJlY3Rpb24ueSkgPiAwIHx8IE1h
dGguYWJzKHRoaXMuY2FtZXJhRGlyZWN0aW9uLnopID4gMDsKKyAgICB9OworICAgIC8qKiBAaGlk
ZGVuICovCisgICAgVGFyZ2V0Q2FtZXJhLnByb3RvdHlwZS5fdXBkYXRlUG9zaXRpb24gPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnBhcmVudCkgeworICAgICAgICAgICAgdGhpcy5w
YXJlbnQuZ2V0V29ybGRNYXRyaXgoKS5pbnZlcnRUb1JlZihfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXSk7CisgICAg
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKHRoaXMuY2FtZXJhRGlyZWN0aW9uLCBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJd
Lk1hdHJpeFswXSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdKTsKKyAgICAgICAgICAgIHRoaXMucG9zaXRpb24u
YWRkSW5QbGFjZShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMucG9zaXRpb24uYWRkSW5QbGFjZSh0aGlzLmNhbWVyYURpcmVjdGlv
bik7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFRhcmdldENhbWVyYS5wcm90b3R5
cGUuX2NoZWNrSW5wdXRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbmVlZFRvTW92ZSA9
IHRoaXMuX2RlY2lkZUlmTmVlZHNUb01vdmUoKTsKKyAgICAgICAgdmFyIG5lZWRUb1JvdGF0ZSA9
IE1hdGguYWJzKHRoaXMuY2FtZXJhUm90YXRpb24ueCkgPiAwIHx8IE1hdGguYWJzKHRoaXMuY2Ft
ZXJhUm90YXRpb24ueSkgPiAwOworICAgICAgICAvLyBNb3ZlCisgICAgICAgIGlmIChuZWVkVG9N
b3ZlKSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVQb3NpdGlvbigpOworICAgICAgICB9Cisg
ICAgICAgIC8vIFJvdGF0ZQorICAgICAgICBpZiAobmVlZFRvUm90YXRlKSB7CisgICAgICAgICAg
ICB0aGlzLnJvdGF0aW9uLnggKz0gdGhpcy5jYW1lcmFSb3RhdGlvbi54OworICAgICAgICAgICAg
dGhpcy5yb3RhdGlvbi55ICs9IHRoaXMuY2FtZXJhUm90YXRpb24ueTsKKyAgICAgICAgICAgIC8v
cm90YXRlLCBpZiBxdWF0ZXJuaW9uIGlzIHNldCBhbmQgcm90YXRpb24gd2FzIHVzZWQKKyAgICAg
ICAgICAgIGlmICh0aGlzLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIHZh
ciBsZW4gPSB0aGlzLnJvdGF0aW9uLmxlbmd0aFNxdWFyZWQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAobGVuKSB7CisgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGxU
b1JlZih0aGlzLnJvdGF0aW9uLnksIHRoaXMucm90YXRpb24ueCwgdGhpcy5yb3RhdGlvbi56LCB0
aGlzLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCF0aGlzLm5vUm90YXRpb25Db25zdHJhaW50KSB7CisgICAgICAg
ICAgICAgICAgdmFyIGxpbWl0ID0gMS41NzA3OTY7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMu
cm90YXRpb24ueCA+IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucm90YXRpb24u
eCA9IGxpbWl0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5y
b3RhdGlvbi54IDwgLWxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucm90YXRpb24u
eCA9IC1saW1pdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgLy8gSW5lcnRpYQorICAgICAgICBpZiAobmVlZFRvTW92ZSkgeworICAgICAgICAg
ICAgaWYgKE1hdGguYWJzKHRoaXMuY2FtZXJhRGlyZWN0aW9uLngpIDwgdGhpcy5zcGVlZCAqIF9N
YXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFcHNpbG9u
Il0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYURpcmVjdGlvbi54ID0gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmNhbWVyYURpcmVjdGlvbi55
KSA8IHRoaXMuc3BlZWQgKiBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siRXBzaWxvbiJdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmFEaXJl
Y3Rpb24ueSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTWF0aC5hYnModGhp
cy5jYW1lcmFEaXJlY3Rpb24ueikgPCB0aGlzLnNwZWVkICogX01hdGhzX21hdGhfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVwc2lsb24iXSkgeworICAgICAgICAgICAg
ICAgIHRoaXMuY2FtZXJhRGlyZWN0aW9uLnogPSAwOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5jYW1lcmFEaXJlY3Rpb24uc2NhbGVJblBsYWNlKHRoaXMuaW5lcnRpYSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKG5lZWRUb1JvdGF0ZSkgeworICAgICAgICAgICAgaWYgKE1hdGgu
YWJzKHRoaXMuY2FtZXJhUm90YXRpb24ueCkgPCB0aGlzLnNwZWVkICogX01hdGhzX21hdGhfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVwc2lsb24iXSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuY2FtZXJhUm90YXRpb24ueCA9IDA7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5jYW1lcmFSb3RhdGlvbi55KSA8IHRoaXMuc3BlZWQg
KiBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRXBz
aWxvbiJdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmFSb3RhdGlvbi55ID0gMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuY2FtZXJhUm90YXRpb24uc2NhbGVJblBsYWNl
KHRoaXMuaW5lcnRpYSk7CisgICAgICAgIH0KKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fY2hl
Y2tJbnB1dHMuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIFRhcmdldENhbWVyYS5wcm90b3R5cGUu
X3VwZGF0ZUNhbWVyYVJvdGF0aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHRoaXMucm90YXRpb25RdWF0
ZXJuaW9uLnRvUm90YXRpb25NYXRyaXgodGhpcy5fY2FtZXJhUm90YXRpb25NYXRyaXgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xs
VG9SZWYodGhpcy5yb3RhdGlvbi55LCB0aGlzLnJvdGF0aW9uLngsIHRoaXMucm90YXRpb24ueiwg
dGhpcy5fY2FtZXJhUm90YXRpb25NYXRyaXgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBVcGRhdGUgdGhlIHVwIHZlY3RvciB0byBhcHBseSB0aGUgcm90YXRpb24gb2YgdGhl
IGNhbWVyYSAoU28gaWYgeW91IGNoYW5nZWQgdGhlIGNhbWVyYSByb3RhdGlvbi56IHRoaXMgd2ls
bCBsZXQgeW91IHVwZGF0ZSB0aGUgdXAgdmVjdG9yIGFzIHdlbGwpCisgICAgICogQHJldHVybnMg
dGhlIGN1cnJlbnQgY2FtZXJhCisgICAgICovCisgICAgVGFyZ2V0Q2FtZXJhLnByb3RvdHlwZS5f
cm90YXRlVXBWZWN0b3JXaXRoQ2FtZXJhUm90YXRpb25NYXRyaXggPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsVG9SZWYodGhpcy5fZGVmYXVsdFVwLCB0aGlzLl9jYW1l
cmFSb3RhdGlvbk1hdHJpeCwgdGhpcy51cFZlY3Rvcik7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUYXJnZXRDYW1lcmEucHJvdG90eXBlLl9n
ZXRWaWV3TWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5sb2NrZWRUYXJn
ZXQpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0VGFyZ2V0KHRoaXMuX2dldExvY2tlZFRhcmdldFBv
c2l0aW9uKCkpOworICAgICAgICB9CisgICAgICAgIC8vIENvbXB1dGUKKyAgICAgICAgdGhpcy5f
dXBkYXRlQ2FtZXJhUm90YXRpb25NYXRyaXgoKTsKKyAgICAgICAgLy8gQXBwbHkgdGhlIGNoYW5n
ZWQgcm90YXRpb24gdG8gdGhlIHVwVmVjdG9yCisgICAgICAgIGlmICh0aGlzLnJvdGF0aW9uUXVh
dGVybmlvbiAmJiB0aGlzLl9jYWNoZWRRdWF0ZXJuaW9uUm90YXRpb25aICE9IHRoaXMucm90YXRp
b25RdWF0ZXJuaW9uLnopIHsKKyAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVVwVmVjdG9yV2l0aENh
bWVyYVJvdGF0aW9uTWF0cml4KCk7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWRRdWF0ZXJuaW9u
Um90YXRpb25aID0gdGhpcy5yb3RhdGlvblF1YXRlcm5pb24uejsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICh0aGlzLl9jYWNoZWRSb3RhdGlvblogIT0gdGhpcy5yb3RhdGlvbi56KSB7Cisg
ICAgICAgICAgICB0aGlzLl9yb3RhdGVVcFZlY3RvcldpdGhDYW1lcmFSb3RhdGlvbk1hdHJpeCgp
OworICAgICAgICAgICAgdGhpcy5fY2FjaGVkUm90YXRpb25aID0gdGhpcy5yb3RhdGlvbi56Owor
ICAgICAgICB9CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0aGlzLl9yZWZl
cmVuY2VQb2ludCwgdGhpcy5fY2FtZXJhUm90YXRpb25NYXRyaXgsIHRoaXMuX3RyYW5zZm9ybWVk
UmVmZXJlbmNlUG9pbnQpOworICAgICAgICAvLyBDb21wdXRpbmcgdGFyZ2V0IGFuZCBmaW5hbCBt
YXRyaXgKKyAgICAgICAgdGhpcy5wb3NpdGlvbi5hZGRUb1JlZih0aGlzLl90cmFuc2Zvcm1lZFJl
ZmVyZW5jZVBvaW50LCB0aGlzLl9jdXJyZW50VGFyZ2V0KTsKKyAgICAgICAgaWYgKHRoaXMudXBk
YXRlVXBWZWN0b3JGcm9tUm90YXRpb24pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnJvdGF0aW9u
UXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siQXhpcyJdLlkucm90YXRlQnlRdWF0ZXJuaW9uVG9SZWYodGhp
cy5yb3RhdGlvblF1YXRlcm5pb24sIHRoaXMudXBWZWN0b3IpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXS5Gcm9tRXVsZXJWZWN0b3JUb1Jl
Zih0aGlzLnJvdGF0aW9uLCB0aGlzLl90bXBRdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICBf
TWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkF4aXMiXS5ZLnJv
dGF0ZUJ5UXVhdGVybmlvblRvUmVmKHRoaXMuX3RtcFF1YXRlcm5pb24sIHRoaXMudXBWZWN0b3Ip
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2NvbXB1dGVWaWV3TWF0
cml4KHRoaXMucG9zaXRpb24sIHRoaXMuX2N1cnJlbnRUYXJnZXQsIHRoaXMudXBWZWN0b3IpOwor
ICAgICAgICByZXR1cm4gdGhpcy5fdmlld01hdHJpeDsKKyAgICB9OworICAgIFRhcmdldENhbWVy
YS5wcm90b3R5cGUuX2NvbXB1dGVWaWV3TWF0cml4ID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB0YXJn
ZXQsIHVwKSB7CisgICAgICAgIGlmICh0aGlzLnBhcmVudCkgeworICAgICAgICAgICAgdmFyIHBh
cmVudFdvcmxkTWF0cml4ID0gdGhpcy5wYXJlbnQuZ2V0V29ybGRNYXRyaXgoKTsKKyAgICAgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0
b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihwb3NpdGlvbiwgcGFyZW50V29ybGRNYXRy
aXgsIHRoaXMuX2dsb2JhbFBvc2l0aW9uKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRp
bmF0ZXNUb1JlZih0YXJnZXQsIHBhcmVudFdvcmxkTWF0cml4LCB0aGlzLl9nbG9iYWxDdXJyZW50
VGFyZ2V0KTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsVG9SZWYodXAsIHBhcmVudFdv
cmxkTWF0cml4LCB0aGlzLl9nbG9iYWxDdXJyZW50VXBWZWN0b3IpOworICAgICAgICAgICAgdGhp
cy5fbWFya1N5bmNlZFdpdGhQYXJlbnQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHRoaXMuX2dsb2JhbFBvc2l0aW9uLmNvcHlGcm9tKHBvc2l0aW9uKTsKKyAgICAg
ICAgICAgIHRoaXMuX2dsb2JhbEN1cnJlbnRUYXJnZXQuY29weUZyb20odGFyZ2V0KTsKKyAgICAg
ICAgICAgIHRoaXMuX2dsb2JhbEN1cnJlbnRVcFZlY3Rvci5jb3B5RnJvbSh1cCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgewor
ICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk1hdHJpeCJdLkxvb2tBdFJIVG9SZWYodGhpcy5fZ2xvYmFsUG9zaXRpb24sIHRoaXMuX2ds
b2JhbEN1cnJlbnRUYXJnZXQsIHRoaXMuX2dsb2JhbEN1cnJlbnRVcFZlY3RvciwgdGhpcy5fdmll
d01hdHJpeCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uTG9va0F0
TEhUb1JlZih0aGlzLl9nbG9iYWxQb3NpdGlvbiwgdGhpcy5fZ2xvYmFsQ3VycmVudFRhcmdldCwg
dGhpcy5fZ2xvYmFsQ3VycmVudFVwVmVjdG9yLCB0aGlzLl92aWV3TWF0cml4KTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIFRhcmdldENh
bWVyYS5wcm90b3R5cGUuY3JlYXRlUmlnQ2FtZXJhID0gZnVuY3Rpb24gKG5hbWUsIGNhbWVyYUlu
ZGV4KSB7CisgICAgICAgIGlmICh0aGlzLmNhbWVyYVJpZ01vZGUgIT09IF9jYW1lcmFfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ2FtZXJhIl0uUklHX01PREVfTk9ORSkgeworICAgICAg
ICAgICAgdmFyIHJpZ0NhbWVyYSA9IG5ldyBUYXJnZXRDYW1lcmEobmFtZSwgdGhpcy5wb3NpdGlv
bi5jbG9uZSgpLCB0aGlzLmdldFNjZW5lKCkpOworICAgICAgICAgICAgaWYgKHRoaXMuY2FtZXJh
UmlnTW9kZSA9PT0gX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmEi
XS5SSUdfTU9ERV9WUiB8fCB0aGlzLmNhbWVyYVJpZ01vZGUgPT09IF9jYW1lcmFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siQ2FtZXJhIl0uUklHX01PREVfV0VCVlIpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0oKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmlnQ2FtZXJhLl9jYW1lcmFSaWdQYXJhbXMgPSB7fTsKKyAg
ICAgICAgICAgICAgICByaWdDYW1lcmEucm90YXRpb25RdWF0ZXJuaW9uID0gbmV3IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0oKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByaWdDYW1lcmE7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisg
ICAgICovCisgICAgVGFyZ2V0Q2FtZXJhLnByb3RvdHlwZS5fdXBkYXRlUmlnQ2FtZXJhcyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGNhbUxlZnQgPSB0aGlzLl9yaWdDYW1lcmFzWzBdOwor
ICAgICAgICB2YXIgY2FtUmlnaHQgPSB0aGlzLl9yaWdDYW1lcmFzWzFdOworICAgICAgICB0aGlz
LmNvbXB1dGVXb3JsZE1hdHJpeCgpOworICAgICAgICBzd2l0Y2ggKHRoaXMuY2FtZXJhUmlnTW9k
ZSkgeworICAgICAgICAgICAgY2FzZSBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19BTkFHTFlQSDoKKyAgICAgICAgICAg
IGNhc2UgX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmEiXS5SSUdf
TU9ERV9TVEVSRU9TQ09QSUNfU0lERUJZU0lERV9QQVJBTExFTDoKKyAgICAgICAgICAgIGNhc2Ug
X2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmEiXS5SSUdfTU9ERV9T
VEVSRU9TQ09QSUNfU0lERUJZU0lERV9DUk9TU0VZRUQ6CisgICAgICAgICAgICBjYXNlIF9jYW1l
cmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ2FtZXJhIl0uUklHX01PREVfU1RFUkVP
U0NPUElDX09WRVJVTkRFUjoKKyAgICAgICAgICAgICAgICAvL3Byb3Zpc2lvbm5hbHkgdXNpbmcg
X2NhbWVyYVJpZ1BhcmFtcy5zdGVyZW9IYWxmQW5nbGUgaW5zdGVhZCBvZiBjYWxjdWxhdGlvbnMg
YmFzZWQgb24gX2NhbWVyYVJpZ1BhcmFtcy5pbnRlcmF4aWFsRGlzdGFuY2U6CisgICAgICAgICAg
ICAgICAgdmFyIGxlZnRTaWduID0gKHRoaXMuY2FtZXJhUmlnTW9kZSA9PT0gX2NhbWVyYV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDYW1lcmEiXS5SSUdfTU9ERV9TVEVSRU9TQ09QSUNf
U0lERUJZU0lERV9DUk9TU0VZRUQpID8gMSA6IC0xOworICAgICAgICAgICAgICAgIHZhciByaWdo
dFNpZ24gPSAodGhpcy5jYW1lcmFSaWdNb2RlID09PSBfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkNhbWVyYSJdLlJJR19NT0RFX1NURVJFT1NDT1BJQ19TSURFQllTSURFX0NS
T1NTRVlFRCkgPyAtMSA6IDE7CisgICAgICAgICAgICAgICAgdGhpcy5fZ2V0UmlnQ2FtUG9zaXRp
b25BbmRUYXJnZXQodGhpcy5fY2FtZXJhUmlnUGFyYW1zLnN0ZXJlb0hhbGZBbmdsZSAqIGxlZnRT
aWduLCBjYW1MZWZ0KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9nZXRSaWdDYW1Qb3NpdGlvbkFu
ZFRhcmdldCh0aGlzLl9jYW1lcmFSaWdQYXJhbXMuc3RlcmVvSGFsZkFuZ2xlICogcmlnaHRTaWdu
LCBjYW1SaWdodCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9j
YW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ2FtZXJhIl0uUklHX01PREVfVlI6
CisgICAgICAgICAgICAgICAgaWYgKGNhbUxlZnQucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhbUxlZnQucm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHRoaXMu
cm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgY2FtUmlnaHQucm90YXRp
b25RdWF0ZXJuaW9uLmNvcHlGcm9tKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNh
bUxlZnQucm90YXRpb24uY29weUZyb20odGhpcy5yb3RhdGlvbik7CisgICAgICAgICAgICAgICAg
ICAgIGNhbVJpZ2h0LnJvdGF0aW9uLmNvcHlGcm9tKHRoaXMucm90YXRpb24pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYW1MZWZ0LnBvc2l0aW9uLmNvcHlGcm9tKHRoaXMu
cG9zaXRpb24pOworICAgICAgICAgICAgICAgIGNhbVJpZ2h0LnBvc2l0aW9uLmNvcHlGcm9tKHRo
aXMucG9zaXRpb24pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IF9zdXBlci5wcm90b3R5cGUuX3VwZGF0ZVJpZ0NhbWVyYXMuY2FsbCh0aGlzKTsKKyAgICB9Owor
ICAgIFRhcmdldENhbWVyYS5wcm90b3R5cGUuX2dldFJpZ0NhbVBvc2l0aW9uQW5kVGFyZ2V0ID0g
ZnVuY3Rpb24gKGhhbGZTcGFjZSwgcmlnQ2FtZXJhKSB7CisgICAgICAgIHZhciB0YXJnZXQgPSB0
aGlzLmdldFRhcmdldCgpOworICAgICAgICB0YXJnZXQuc3VidHJhY3RUb1JlZih0aGlzLnBvc2l0
aW9uLCBUYXJnZXRDYW1lcmEuX1RhcmdldEZvY2FsUG9pbnQpOworICAgICAgICBUYXJnZXRDYW1l
cmEuX1RhcmdldEZvY2FsUG9pbnQubm9ybWFsaXplKCkuc2NhbGVJblBsYWNlKHRoaXMuX2luaXRp
YWxGb2NhbERpc3RhbmNlKTsKKyAgICAgICAgdmFyIG5ld0ZvY2FsVGFyZ2V0ID0gVGFyZ2V0Q2Ft
ZXJhLl9UYXJnZXRGb2NhbFBvaW50LmFkZEluUGxhY2UodGhpcy5wb3NpdGlvbik7CisgICAgICAg
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgi
XS5UcmFuc2xhdGlvblRvUmVmKC1uZXdGb2NhbFRhcmdldC54LCAtbmV3Rm9jYWxUYXJnZXQueSwg
LW5ld0ZvY2FsVGFyZ2V0LnosIFRhcmdldENhbWVyYS5fVGFyZ2V0VHJhbnNmb3JtTWF0cml4KTsK
KyAgICAgICAgVGFyZ2V0Q2FtZXJhLl9UYXJnZXRUcmFuc2Zvcm1NYXRyaXgubXVsdGlwbHlUb1Jl
ZihfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4
Il0uUm90YXRpb25ZKGhhbGZTcGFjZSksIFRhcmdldENhbWVyYS5fUmlnQ2FtVHJhbnNmb3JtTWF0
cml4KTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIk1hdHJpeCJdLlRyYW5zbGF0aW9uVG9SZWYobmV3Rm9jYWxUYXJnZXQueCwgbmV3Rm9j
YWxUYXJnZXQueSwgbmV3Rm9jYWxUYXJnZXQueiwgVGFyZ2V0Q2FtZXJhLl9UYXJnZXRUcmFuc2Zv
cm1NYXRyaXgpOworICAgICAgICBUYXJnZXRDYW1lcmEuX1JpZ0NhbVRyYW5zZm9ybU1hdHJpeC5t
dWx0aXBseVRvUmVmKFRhcmdldENhbWVyYS5fVGFyZ2V0VHJhbnNmb3JtTWF0cml4LCBUYXJnZXRD
YW1lcmEuX1JpZ0NhbVRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRp
bmF0ZXNUb1JlZih0aGlzLnBvc2l0aW9uLCBUYXJnZXRDYW1lcmEuX1JpZ0NhbVRyYW5zZm9ybU1h
dHJpeCwgcmlnQ2FtZXJhLnBvc2l0aW9uKTsKKyAgICAgICAgcmlnQ2FtZXJhLnNldFRhcmdldChu
ZXdGb2NhbFRhcmdldCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50
IG9iamVjdCBjbGFzcyBuYW1lLgorICAgICAqIEByZXR1cm4gdGhlIGNsYXNzIG5hbWUKKyAgICAg
Ki8KKyAgICBUYXJnZXRDYW1lcmEucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICJUYXJnZXRDYW1lcmEiOworICAgIH07CisgICAgVGFyZ2V0Q2Ft
ZXJhLl9SaWdDYW1UcmFuc2Zvcm1NYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdKCk7CisgICAgVGFyZ2V0Q2FtZXJhLl9U
YXJnZXRUcmFuc2Zvcm1NYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdKCk7CisgICAgVGFyZ2V0Q2FtZXJhLl9UYXJnZXRG
b2NhbFBvaW50ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZWN0b3IzIl0oKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1ZlY3RvcjMiXSkoKQorICAgIF0s
IFRhcmdldENhbWVyYS5wcm90b3R5cGUsICJyb3RhdGlvbiIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBUYXJnZXRDYW1lcmEucHJvdG90eXBlLCAic3BlZWQiLCB2b2lkIDAp
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZUFzTWVzaFJlZmVyZW5jZSJdKSgibG9ja2VkVGFyZ2V0SWQiKQorICAg
IF0sIFRhcmdldENhbWVyYS5wcm90b3R5cGUsICJsb2NrZWRUYXJnZXQiLCB2b2lkIDApOworICAg
IHJldHVybiBUYXJnZXRDYW1lcmE7Cit9KF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siQ2FtZXJhIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DYW1lcmFzL3Rv
dWNoQ2FtZXJhLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9DYW1lcmFzL3RvdWNoQ2FtZXJhLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFRvdWNoQ2FtZXJhICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvdWNoQ2FtZXJhIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBUb3VjaENhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2ZyZWVDYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZnJlZUNhbWVyYSAqLyAiLi9DYW1lcmFzL2Zy
ZWVDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworCisKKwor
Citfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlIl0uQWRkTm9kZUNvbnN0
cnVjdG9yKCJUb3VjaENhbWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSkgeworICAgIHJldHVy
biBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgVG91Y2hDYW1lcmEobmFtZSwgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCksIHNj
ZW5lKTsgfTsKK30pOworLyoqCisgKiBUaGlzIHJlcHJlc2VudHMgYSBGUFMgdHlwZSBvZiBjYW1l
cmEgY29udHJvbGxlZCBieSB0b3VjaC4KKyAqIFRoaXMgaXMgbGlrZSBhIHVuaXZlcnNhbCBjYW1l
cmEgbWludXMgdGhlIEdhbWVwYWQgY29udHJvbHMuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxv
bmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI3VuaXZlcnNhbC1jYW1lcmEKKyAqLwordmFyIFRvdWNo
Q2FtZXJhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFRvdWNoQ2FtZXJhLCBfc3Vw
ZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyB0b3VjaCBjYW1lcmEuCisg
ICAgICogVGhpcyByZXByZXNlbnRzIGEgRlBTIHR5cGUgb2YgY2FtZXJhIGNvbnRyb2xsZWQgYnkg
dG91Y2guCisgICAgICogVGhpcyBpcyBsaWtlIGEgdW5pdmVyc2FsIGNhbWVyYSBtaW51cyB0aGUg
R2FtZXBhZCBjb250cm9scy4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9m
ZWF0dXJlcy9jYW1lcmFzI3VuaXZlcnNhbC1jYW1lcmEKKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZp
bmUgdGhlIG5hbWUgb2YgdGhlIGNhbWVyYSBpbiB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gcG9z
aXRpb24gRGVmaW5lIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY2FtZXJhIGluIHRoZSBzY2Vu
ZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSBjYW1lcmEgYmVsb25n
cyB0bworICAgICAqLworICAgIGZ1bmN0aW9uIFRvdWNoQ2FtZXJhKG5hbWUsIHBvc2l0aW9uLCBz
Y2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBwb3Np
dGlvbiwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmlucHV0cy5hZGRUb3VjaCgpOwor
ICAgICAgICBfdGhpcy5fc2V0dXBJbnB1dHMoKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAg
IH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG91Y2hDYW1lcmEucHJvdG90eXBlLCAidG91
Y2hBbmd1bGFyU2Vuc2liaWxpdHkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVz
IHRoZSB0b3VjaCBzZW5zaWJpbGl0eSBmb3Igcm90YXRpb24uCisgICAgICAgICAqIFRoZSBoaWdo
ZXIgdGhlIGZhc3Rlci4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgdmFyIHRvdWNoID0gdGhpcy5pbnB1dHMuYXR0YWNoZWRbInRvdWNoIl07Cisg
ICAgICAgICAgICBpZiAodG91Y2gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG91Y2gudG91
Y2hBbmd1bGFyU2Vuc2liaWxpdHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIHZhciB0b3VjaCA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJ0b3VjaCJdOworICAgICAgICAg
ICAgaWYgKHRvdWNoKSB7CisgICAgICAgICAgICAgICAgdG91Y2gudG91Y2hBbmd1bGFyU2Vuc2li
aWxpdHkgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFRvdWNoQ2FtZXJhLnByb3RvdHlwZSwgInRvdWNoTW92ZVNlbnNp
YmlsaXR5IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgdG91Y2ggc2Vu
c2liaWxpdHkgZm9yIG1vdmUuCisgICAgICAgICAqIFRoZSBoaWdoZXIgdGhlIGZhc3Rlci4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHRv
dWNoID0gdGhpcy5pbnB1dHMuYXR0YWNoZWRbInRvdWNoIl07CisgICAgICAgICAgICBpZiAodG91
Y2gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG91Y2gudG91Y2hNb3ZlU2Vuc2liaWxpdHk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciB0b3VjaCA9IHRoaXMu
aW5wdXRzLmF0dGFjaGVkWyJ0b3VjaCJdOworICAgICAgICAgICAgaWYgKHRvdWNoKSB7CisgICAg
ICAgICAgICAgICAgdG91Y2gudG91Y2hNb3ZlU2Vuc2liaWxpdHkgPSB2YWx1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVu
dCBvYmplY3QgY2xhc3MgbmFtZS4KKyAgICAgKiBAcmV0dXJuIHRoZSBjbGFzcyBuYW1lCisgICAg
ICovCisgICAgVG91Y2hDYW1lcmEucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICJUb3VjaENhbWVyYSI7CisgICAgfTsKKyAgICAvKiogQGhpZGRl
biAqLworICAgIFRvdWNoQ2FtZXJhLnByb3RvdHlwZS5fc2V0dXBJbnB1dHMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBtb3VzZSA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJtb3VzZSJdOwor
ICAgICAgICBpZiAobW91c2UpIHsKKyAgICAgICAgICAgIG1vdXNlLnRvdWNoRW5hYmxlZCA9IGZh
bHNlOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gVG91Y2hDYW1lcmE7Cit9KF9mcmVl
Q2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkZyZWVDYW1lcmEiXSkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVyYXMvdW5pdmVyc2FsQ2FtZXJhLnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ2FtZXJh
cy91bml2ZXJzYWxDYW1lcmEudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFVuaXZlcnNhbENhbWVyYSAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJVbml2ZXJzYWxDYW1lcmEiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFVuaXZlcnNhbENhbWVyYTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RvdWNoQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvdWNoQ2FtZXJhICovICIuL0Nh
bWVyYXMvdG91Y2hDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
bm9kZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2FtZXJhICovICIuL0NhbWVyYXMv
Y2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0dhbWVwYWRzX2dhbWVwYWRT
Y2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vR2FtZXBhZHMvZ2FtZXBhZFNjZW5lQ29tcG9uZW50ICovICIuL0dhbWVw
YWRzL2dhbWVwYWRTY2VuZUNvbXBvbmVudC50cyIpOworCisKKworCisKKworX25vZGVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZSJdLkFkZE5vZGVDb25zdHJ1Y3RvcigiRnJlZUNh
bWVyYSIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSkgeworICAgIC8vIEZvcmNpbmcgdG8gdXNlIHRo
ZSBVbml2ZXJzYWwgY2FtZXJhCisgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBV
bml2ZXJzYWxDYW1lcmEobmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKTsgfTsKK30pOworLyoqCisgKiBU
aGUgVW5pdmVyc2FsIENhbWVyYSBpcyB0aGUgb25lIHRvIGNob29zZSBmb3IgZmlyc3QgcGVyc29u
IHNob290ZXIgdHlwZSBnYW1lcywgYW5kIHdvcmtzIHdpdGggYWxsIHRoZSBrZXlib2FyZCwgbW91
c2UsIHRvdWNoIGFuZCBnYW1lcGFkcy4gVGhpcyByZXBsYWNlcyB0aGUgZWFybGllciBGcmVlIENh
bWVyYSwKKyAqIHdoaWNoIHN0aWxsIHdvcmtzIGFuZCB3aWxsIHN0aWxsIGJlIGZvdW5kIGluIG1h
bnkgUGxheWdyb3VuZHMuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJl
cy9jYW1lcmFzI3VuaXZlcnNhbC1jYW1lcmEKKyAqLwordmFyIFVuaXZlcnNhbENhbWVyYSA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShVbml2ZXJzYWxDYW1lcmEsIF9zdXBlcik7Cisg
ICAgLyoqCisgICAgICogVGhlIFVuaXZlcnNhbCBDYW1lcmEgaXMgdGhlIG9uZSB0byBjaG9vc2Ug
Zm9yIGZpcnN0IHBlcnNvbiBzaG9vdGVyIHR5cGUgZ2FtZXMsIGFuZCB3b3JrcyB3aXRoIGFsbCB0
aGUga2V5Ym9hcmQsIG1vdXNlLCB0b3VjaCBhbmQgZ2FtZXBhZHMuIFRoaXMgcmVwbGFjZXMgdGhl
IGVhcmxpZXIgRnJlZSBDYW1lcmEsCisgICAgICogd2hpY2ggc3RpbGwgd29ya3MgYW5kIHdpbGwg
c3RpbGwgYmUgZm91bmQgaW4gbWFueSBQbGF5Z3JvdW5kcy4KKyAgICAgKiBAc2VlIGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI3VuaXZlcnNhbC1jYW1lcmEKKyAgICAg
KiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGNhbWVyYSBpbiB0aGUgc2NlbmUK
KyAgICAgKiBAcGFyYW0gcG9zaXRpb24gRGVmaW5lIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUg
Y2FtZXJhIGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5l
IHRoZSBjYW1lcmEgYmVsb25ncyB0bworICAgICAqLworICAgIGZ1bmN0aW9uIFVuaXZlcnNhbENh
bWVyYShuYW1lLCBwb3NpdGlvbiwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgcG9zaXRpb24sIHNjZW5lKSB8fCB0aGlzOworICAgICAgICBfdGhp
cy5pbnB1dHMuYWRkR2FtZXBhZCgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbml2ZXJzYWxDYW1lcmEucHJvdG90eXBlLCAiZ2FtZXBh
ZEFuZ3VsYXJTZW5zaWJpbGl0eSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMg
dGhlIGdhbWVwYWQgcm90YXRpb24gc2Vuc2libGl0eS4KKyAgICAgICAgICogVGhpcyBpcyB0aGUg
dGhyZXNob2xkIGZyb20gd2hlbiByb3RhdGlvbiBzdGFydHMgdG8gYmUgYWNjb3VudGVkIGZvciB0
byBwcmV2ZW50IGppdHRlcmluZy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIGdhbWVwYWQgPSB0aGlzLmlucHV0cy5hdHRhY2hlZFsiZ2Ft
ZXBhZCJdOworICAgICAgICAgICAgaWYgKGdhbWVwYWQpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2FtZXBhZC5nYW1lcGFkQW5ndWxhclNlbnNpYmlsaXR5OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICB2YXIgZ2FtZXBhZCA9IHRoaXMuaW5wdXRzLmF0dGFjaGVkWyJn
YW1lcGFkIl07CisgICAgICAgICAgICBpZiAoZ2FtZXBhZCkgeworICAgICAgICAgICAgICAgIGdh
bWVwYWQuZ2FtZXBhZEFuZ3VsYXJTZW5zaWJpbGl0eSA9IHZhbHVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVW5pdmVyc2FsQ2Ft
ZXJhLnByb3RvdHlwZSwgImdhbWVwYWRNb3ZlU2Vuc2liaWxpdHkiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBEZWZpbmVzIHRoZSBnYW1lcGFkIG1vdmUgc2Vuc2libGl0eS4KKyAgICAgICAg
ICogVGhpcyBpcyB0aGUgdGhyZXNob2xkIGZyb20gd2hlbiBtb3Zpbmcgc3RhcnRzIHRvIGJlIGFj
Y291bnRlZCBmb3IgZm9yIHRvIHByZXZlbnQgaml0dGVyaW5nLgorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgZ2FtZXBhZCA9IHRoaXMuaW5w
dXRzLmF0dGFjaGVkWyJnYW1lcGFkIl07CisgICAgICAgICAgICBpZiAoZ2FtZXBhZCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnYW1lcGFkLmdhbWVwYWRNb3ZlU2Vuc2liaWxpdHk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBnYW1lcGFkID0gdGhpcy5pbnB1
dHMuYXR0YWNoZWRbImdhbWVwYWQiXTsKKyAgICAgICAgICAgIGlmIChnYW1lcGFkKSB7CisgICAg
ICAgICAgICAgICAgZ2FtZXBhZC5nYW1lcGFkTW92ZVNlbnNpYmlsaXR5ID0gdmFsdWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1
cnJlbnQgb2JqZWN0IGNsYXNzIG5hbWUuCisgICAgICogQHJldHVybiB0aGUgY2xhc3MgbmFtZQor
ICAgICAqLworICAgIFVuaXZlcnNhbENhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlVuaXZlcnNhbENhbWVyYSI7CisgICAgfTsKKyAg
ICByZXR1cm4gVW5pdmVyc2FsQ2FtZXJhOworfShfdG91Y2hDYW1lcmFfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVG91Y2hDYW1lcmEiXSkpOworCitfY2FtZXJhX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIkNhbWVyYSJdLl9jcmVhdGVEZWZhdWx0UGFyc2VkQ2FtZXJhID0gZnVu
Y3Rpb24gKG5hbWUsIHNjZW5lKSB7CisgICAgcmV0dXJuIG5ldyBVbml2ZXJzYWxDYW1lcmEobmFt
ZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXS5aZXJvKCksIHNjZW5lKTsKK307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NhbWVy
YXMvdmlydHVhbEpveXN0aWNrc0NhbWVyYS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DYW1lcmFzL3ZpcnR1YWxKb3lzdGlj
a3NDYW1lcmEudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBWaXJ0dWFsSm95c3RpY2tzQ2FtZXJhICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpcnR1YWxKb3lzdGlja3NDYW1l
cmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFZpcnR1YWxKb3lzdGlja3NDYW1lcmE7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGli
L3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9mcmVlQ2FtZXJhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Zy
ZWVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9mcmVlQ2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2Rl
ICovICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfSW5wdXRzX2ZyZWVD
YW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9JbnB1dHMvZnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlj
a0lucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1
dC50cyIpOworCisKKworCisKK19ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5v
ZGUiXS5BZGROb2RlQ29uc3RydWN0b3IoIlZpcnR1YWxKb3lzdGlja3NDYW1lcmEiLCBmdW5jdGlv
biAobmFtZSwgc2NlbmUpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFZp
cnR1YWxKb3lzdGlja3NDYW1lcmEobmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCksIHNjZW5lKTsgfTsKK30pOworLyoq
CisgKiBUaGlzIHJlcHJlc2VudHMgYSBmcmVlIHR5cGUgb2YgY2FtZXJhLiBJdCBjYW4gYmUgdXNl
ZnVsIGluIEZpcnN0IFBlcnNvbiBTaG9vdGVyIGdhbWUgZm9yIGluc3RhbmNlLgorICogSXQgaXMg
aWRlbnRpY2FsIHRvIHRoZSBGcmVlIENhbWVyYSBhbmQgc2ltcGx5IGFkZHMgYnkgZGVmYXVsdCBh
IHZpcnR1YWwgam95c3RpY2suCisgKiBWaXJ0dWFsIEpveXN0aWNrcyBhcmUgb24tc2NyZWVuIDJE
IGdyYXBoaWNzIHRoYXQgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgY2FtZXJhIG9yIG90aGVyIHNj
ZW5lIGl0ZW1zLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vZmVhdHVyZXMvY2Ft
ZXJhcyN2aXJ0dWFsLWpveXN0aWNrcy1jYW1lcmEKKyAqLwordmFyIFZpcnR1YWxKb3lzdGlja3ND
YW1lcmEgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVmlydHVhbEpveXN0aWNrc0Nh
bWVyYSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnRhbnRpYXRlcyBhIFZpcnR1YWxKb3lz
dGlja3NDYW1lcmEuIEl0IGNhbiBiZSB1c2VmdWwgaW4gRmlyc3QgUGVyc29uIFNob290ZXIgZ2Ft
ZSBmb3IgaW5zdGFuY2UuCisgICAgICogSXQgaXMgaWRlbnRpY2FsIHRvIHRoZSBGcmVlIENhbWVy
YSBhbmQgc2ltcGx5IGFkZHMgYnkgZGVmYXVsdCBhIHZpcnR1YWwgam95c3RpY2suCisgICAgICog
VmlydHVhbCBKb3lzdGlja3MgYXJlIG9uLXNjcmVlbiAyRCBncmFwaGljcyB0aGF0IGFyZSB1c2Vk
IHRvIGNvbnRyb2wgdGhlIGNhbWVyYSBvciBvdGhlciBzY2VuZSBpdGVtcy4KKyAgICAgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9jYW1lcmFzI3ZpcnR1YWwtam95c3Rp
Y2tzLWNhbWVyYQorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgY2Ft
ZXJhIGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBEZWZpbmUgdGhlIHN0YXJ0
IHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgaW4gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIHNjZW5l
IERlZmluZSB0aGUgc2NlbmUgdGhlIGNhbWVyYSBiZWxvbmdzIHRvCisgICAgICovCisgICAgZnVu
Y3Rpb24gVmlydHVhbEpveXN0aWNrc0NhbWVyYShuYW1lLCBwb3NpdGlvbiwgc2NlbmUpIHsKKyAg
ICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgcG9zaXRpb24sIHNjZW5l
KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5pbnB1dHMuYWRkVmlydHVhbEpveXN0aWNrKCk7Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3Vy
cmVudCBvYmplY3QgY2xhc3MgbmFtZS4KKyAgICAgKiBAcmV0dXJuIHRoZSBjbGFzcyBuYW1lCisg
ICAgICovCisgICAgVmlydHVhbEpveXN0aWNrc0NhbWVyYS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlZpcnR1YWxKb3lzdGlja3NDYW1lcmEi
OworICAgIH07CisgICAgcmV0dXJuIFZpcnR1YWxKb3lzdGlja3NDYW1lcmE7Cit9KF9mcmVlQ2Ft
ZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkZyZWVDYW1lcmEiXSkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0NvbGxpc2lvbnMvY29sbGlkZXIudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NvbGxpc2lvbnMvY29sbGlk
ZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogQ29sbGlkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiQ29sbGlkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvbGxpZGVyOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgucGxhbmUgKi8gIi4vTWF0aHMvbWF0aC5wbGFu
ZS50cyIpOworCisKK3ZhciBpbnRlcnNlY3RCb3hBQVNwaGVyZSA9IGZ1bmN0aW9uIChib3hNaW4s
IGJveE1heCwgc3BoZXJlQ2VudGVyLCBzcGhlcmVSYWRpdXMpIHsKKyAgICBpZiAoYm94TWluLngg
PiBzcGhlcmVDZW50ZXIueCArIHNwaGVyZVJhZGl1cykgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGlmIChzcGhlcmVDZW50ZXIueCAtIHNwaGVyZVJhZGl1cyA+IGJveE1heC54
KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGJveE1pbi55ID4gc3Bo
ZXJlQ2VudGVyLnkgKyBzcGhlcmVSYWRpdXMpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAoc3BoZXJlQ2VudGVyLnkgLSBzcGhlcmVSYWRpdXMgPiBib3hNYXgueSkgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChib3hNaW4ueiA+IHNwaGVyZUNl
bnRlci56ICsgc3BoZXJlUmFkaXVzKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKHNwaGVyZUNlbnRlci56IC0gc3BoZXJlUmFkaXVzID4gYm94TWF4LnopIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK307Cit2YXIgZ2V0TG93
ZXN0Um9vdCA9IChmdW5jdGlvbiAoKSB7CisgICAgdmFyIHJlc3VsdCA9IHsgcm9vdDogMCwgZm91
bmQ6IGZhbHNlIH07CisgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjLCBtYXhSKSB7CisgICAg
ICAgIHJlc3VsdC5yb290ID0gMDsKKyAgICAgICAgcmVzdWx0LmZvdW5kID0gZmFsc2U7CisgICAg
ICAgIHZhciBkZXRlcm1pbmFudCA9IGIgKiBiIC0gNC4wICogYSAqIGM7CisgICAgICAgIGlmIChk
ZXRlcm1pbmFudCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIHNxcnREID0gTWF0aC5zcXJ0KGRldGVybWluYW50KTsKKyAgICAgICAgdmFy
IHIxID0gKC1iIC0gc3FydEQpIC8gKDIuMCAqIGEpOworICAgICAgICB2YXIgcjIgPSAoLWIgKyBz
cXJ0RCkgLyAoMi4wICogYSk7CisgICAgICAgIGlmIChyMSA+IHIyKSB7CisgICAgICAgICAgICB2
YXIgdGVtcCA9IHIyOworICAgICAgICAgICAgcjIgPSByMTsKKyAgICAgICAgICAgIHIxID0gdGVt
cDsKKyAgICAgICAgfQorICAgICAgICBpZiAocjEgPiAwICYmIHIxIDwgbWF4UikgeworICAgICAg
ICAgICAgcmVzdWx0LnJvb3QgPSByMTsKKyAgICAgICAgICAgIHJlc3VsdC5mb3VuZCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGlmIChyMiA+
IDAgJiYgcjIgPCBtYXhSKSB7CisgICAgICAgICAgICByZXN1bHQucm9vdCA9IHIyOworICAgICAg
ICAgICAgcmVzdWx0LmZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfSkoKTsKKy8qKiBAaGlk
ZGVuICovCit2YXIgQ29sbGlkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
ZnVuY3Rpb24gQ29sbGlkZXIoKSB7CisgICAgICAgIHRoaXMuX2NvbGxpc2lvblBvaW50ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIHRoaXMuX3BsYW5lSW50ZXJzZWN0aW9uUG9pbnQgPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsK
KyAgICAgICAgdGhpcy5fdGVtcFZlY3RvciA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlzLl90ZW1w
VmVjdG9yMiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlzLl90ZW1wVmVjdG9yMyA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygp
OworICAgICAgICB0aGlzLl90ZW1wVmVjdG9yNCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlzLl9l
ZGdlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2Jhc2VUb1ZlcnRleCA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICB0aGlzLl9kZXN0aW5hdGlvblBvaW50ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMu
X3NsaWRlUGxhbmVOb3JtYWwgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgdGhpcy5fZGlzcGxhY2VtZW50
VmVjdG9yID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMu
X3JhZGl1cyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0uT25lKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMu
X3JldHJ5ID0gMDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fYmFzZVBv
aW50V29ybGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgdGhpcy5fdmVsb2NpdHlXb3JsZCA9IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVy
bygpOworICAgICAgICB0aGlzLl9ub3JtYWxpemVkVmVsb2NpdHkgPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAg
ICAgdGhpcy5fY29sbGlzaW9uTWFzayA9IC0xOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoQ29sbGlkZXIucHJvdG90eXBlLCAiY29sbGlzaW9uTWFzayIsIHsKKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29sbGlzaW9uTWFzazsK
KyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAobWFzaykgeworICAgICAgICAgICAg
dGhpcy5fY29sbGlzaW9uTWFzayA9ICFpc05hTihtYXNrKSA/IG1hc2sgOiAtMTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbGxpZGVyLnByb3RvdHlwZSwg
InNsaWRlUGxhbmVOb3JtYWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBw
bGFuZSBub3JtYWwgdXNlZCB0byBjb21wdXRlIHRoZSBzbGlkaW5nIHJlc3BvbnNlIChpbiBsb2Nh
bCBzcGFjZSkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3NsaWRlUGxhbmVOb3JtYWw7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIC8vIE1ldGhvZHMKKyAgICAvKiogQGhpZGRlbiAqLworICAgIENvbGxpZGVyLnByb3RvdHlw
ZS5faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRpciwgZSkgeworICAgICAgICB0aGlz
Ll92ZWxvY2l0eSA9IGRpcjsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Ob3JtYWxpemVUb1JlZihkaXIsIHRoaXMuX25v
cm1hbGl6ZWRWZWxvY2l0eSk7CisgICAgICAgIHRoaXMuX2Jhc2VQb2ludCA9IHNvdXJjZTsKKyAg
ICAgICAgc291cmNlLm11bHRpcGx5VG9SZWYodGhpcy5fcmFkaXVzLCB0aGlzLl9iYXNlUG9pbnRX
b3JsZCk7CisgICAgICAgIGRpci5tdWx0aXBseVRvUmVmKHRoaXMuX3JhZGl1cywgdGhpcy5fdmVs
b2NpdHlXb3JsZCk7CisgICAgICAgIHRoaXMuX3ZlbG9jaXR5V29ybGRMZW5ndGggPSB0aGlzLl92
ZWxvY2l0eVdvcmxkLmxlbmd0aCgpOworICAgICAgICB0aGlzLl9lcHNpbG9uID0gZTsKKyAgICAg
ICAgdGhpcy5jb2xsaXNpb25Gb3VuZCA9IGZhbHNlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4g
Ki8KKyAgICBDb2xsaWRlci5wcm90b3R5cGUuX2NoZWNrUG9pbnRJblRyaWFuZ2xlID0gZnVuY3Rp
b24gKHBvaW50LCBwYSwgcGIsIHBjLCBuKSB7CisgICAgICAgIHBhLnN1YnRyYWN0VG9SZWYocG9p
bnQsIHRoaXMuX3RlbXBWZWN0b3IpOworICAgICAgICBwYi5zdWJ0cmFjdFRvUmVmKHBvaW50LCB0
aGlzLl90ZW1wVmVjdG9yMik7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZih0aGlzLl90ZW1wVmVjdG9y
LCB0aGlzLl90ZW1wVmVjdG9yMiwgdGhpcy5fdGVtcFZlY3RvcjQpOworICAgICAgICB2YXIgZCA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0uRG90KHRoaXMuX3RlbXBWZWN0b3I0LCBuKTsKKyAgICAgICAgaWYgKGQgPCAwKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcGMuc3VidHJhY3RUb1Jl
Zihwb2ludCwgdGhpcy5fdGVtcFZlY3RvcjMpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkNyb3NzVG9SZWYodGhpcy5f
dGVtcFZlY3RvcjIsIHRoaXMuX3RlbXBWZWN0b3IzLCB0aGlzLl90ZW1wVmVjdG9yNCk7CisgICAg
ICAgIGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLkRvdCh0aGlzLl90ZW1wVmVjdG9yNCwgbik7CisgICAgICAgIGlmIChkIDwgMCkg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uQ3Jvc3NU
b1JlZih0aGlzLl90ZW1wVmVjdG9yMywgdGhpcy5fdGVtcFZlY3RvciwgdGhpcy5fdGVtcFZlY3Rv
cjQpOworICAgICAgICBkID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5Eb3QodGhpcy5fdGVtcFZlY3RvcjQsIG4pOworICAgICAgICBy
ZXR1cm4gZCA+PSAwOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBDb2xsaWRlci5w
cm90b3R5cGUuX2NhbkRvQ29sbGlzaW9uID0gZnVuY3Rpb24gKHNwaGVyZUNlbnRlciwgc3BoZXJl
UmFkaXVzLCB2ZWNNaW4sIHZlY01heCkgeworICAgICAgICB2YXIgZGlzdGFuY2UgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRpc3Rh
bmNlKHRoaXMuX2Jhc2VQb2ludFdvcmxkLCBzcGhlcmVDZW50ZXIpOworICAgICAgICB2YXIgbWF4
ID0gTWF0aC5tYXgodGhpcy5fcmFkaXVzLngsIHRoaXMuX3JhZGl1cy55LCB0aGlzLl9yYWRpdXMu
eik7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IHRoaXMuX3ZlbG9jaXR5V29ybGRMZW5ndGggKyBt
YXggKyBzcGhlcmVSYWRpdXMpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIWludGVyc2VjdEJveEFBU3BoZXJlKHZlY01pbiwgdmVjTWF4LCB0aGlz
Ll9iYXNlUG9pbnRXb3JsZCwgdGhpcy5fdmVsb2NpdHlXb3JsZExlbmd0aCArIG1heCkpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQ29sbGlkZXIucHJvdG90eXBlLl90ZXN0
VHJpYW5nbGUgPSBmdW5jdGlvbiAoZmFjZUluZGV4LCB0cmlhbmdsZVBsYW5lQXJyYXksIHAxLCBw
MiwgcDMsIGhhc01hdGVyaWFsLCBob3N0TWVzaCkgeworICAgICAgICB2YXIgdDA7CisgICAgICAg
IHZhciBlbWJlZGRlZEluUGxhbmUgPSBmYWxzZTsKKyAgICAgICAgLy9kZWZlbnNpdmUgcHJvZ3Jh
bW1pbmcsIGFjdHVhbGx5IG5vdCBuZWVkZWQuCisgICAgICAgIGlmICghdHJpYW5nbGVQbGFuZUFy
cmF5KSB7CisgICAgICAgICAgICB0cmlhbmdsZVBsYW5lQXJyYXkgPSBbXTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIXRyaWFuZ2xlUGxhbmVBcnJheVtmYWNlSW5kZXhdKSB7CisgICAgICAgICAg
ICB0cmlhbmdsZVBsYW5lQXJyYXlbZmFjZUluZGV4XSA9IG5ldyBfTWF0aHNfbWF0aF9wbGFuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQbGFuZSJdKDAsIDAsIDAsIDApOworICAgICAg
ICAgICAgdHJpYW5nbGVQbGFuZUFycmF5W2ZhY2VJbmRleF0uY29weUZyb21Qb2ludHMocDEsIHAy
LCBwMyk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRyaWFuZ2xlUGxhbmUgPSB0cmlhbmdsZVBs
YW5lQXJyYXlbZmFjZUluZGV4XTsKKyAgICAgICAgaWYgKCghaGFzTWF0ZXJpYWwpICYmICF0cmlh
bmdsZVBsYW5lLmlzRnJvbnRGYWNpbmdUbyh0aGlzLl9ub3JtYWxpemVkVmVsb2NpdHksIDApKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNpZ25lZERpc3RU
b1RyaWFuZ2xlUGxhbmUgPSB0cmlhbmdsZVBsYW5lLnNpZ25lZERpc3RhbmNlVG8odGhpcy5fYmFz
ZVBvaW50KTsKKyAgICAgICAgdmFyIG5vcm1hbERvdFZlbG9jaXR5ID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Eb3QodHJpYW5nbGVQ
bGFuZS5ub3JtYWwsIHRoaXMuX3ZlbG9jaXR5KTsKKyAgICAgICAgaWYgKG5vcm1hbERvdFZlbG9j
aXR5ID09IDApIHsKKyAgICAgICAgICAgIGlmIChNYXRoLmFicyhzaWduZWREaXN0VG9Ucmlhbmds
ZVBsYW5lKSA+PSAxLjApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbWJlZGRlZEluUGxhbmUgPSB0cnVlOworICAgICAgICAgICAgdDAgPSAw
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdDAgPSAoLTEuMCAtIHNp
Z25lZERpc3RUb1RyaWFuZ2xlUGxhbmUpIC8gbm9ybWFsRG90VmVsb2NpdHk7CisgICAgICAgICAg
ICB2YXIgdDEgPSAoMS4wIC0gc2lnbmVkRGlzdFRvVHJpYW5nbGVQbGFuZSkgLyBub3JtYWxEb3RW
ZWxvY2l0eTsKKyAgICAgICAgICAgIGlmICh0MCA+IHQxKSB7CisgICAgICAgICAgICAgICAgdmFy
IHRlbXAgPSB0MTsKKyAgICAgICAgICAgICAgICB0MSA9IHQwOworICAgICAgICAgICAgICAgIHQw
ID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0MCA+IDEuMCB8fCB0MSA8
IDAuMCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh0MCA8IDApIHsKKyAgICAgICAgICAgICAgICB0MCA9IDA7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodDAgPiAxLjApIHsKKyAgICAgICAgICAgICAgICB0MCA9IDEuMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb2xsaXNpb25Qb2ludC5j
b3B5RnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7CisgICAg
ICAgIHZhciB0ID0gMS4wOworICAgICAgICBpZiAoIWVtYmVkZGVkSW5QbGFuZSkgeworICAgICAg
ICAgICAgdGhpcy5fYmFzZVBvaW50LnN1YnRyYWN0VG9SZWYodHJpYW5nbGVQbGFuZS5ub3JtYWws
IHRoaXMuX3BsYW5lSW50ZXJzZWN0aW9uUG9pbnQpOworICAgICAgICAgICAgdGhpcy5fdmVsb2Np
dHkuc2NhbGVUb1JlZih0MCwgdGhpcy5fdGVtcFZlY3Rvcik7CisgICAgICAgICAgICB0aGlzLl9w
bGFuZUludGVyc2VjdGlvblBvaW50LmFkZEluUGxhY2UodGhpcy5fdGVtcFZlY3Rvcik7CisgICAg
ICAgICAgICBpZiAodGhpcy5fY2hlY2tQb2ludEluVHJpYW5nbGUodGhpcy5fcGxhbmVJbnRlcnNl
Y3Rpb25Qb2ludCwgcDEsIHAyLCBwMywgdHJpYW5nbGVQbGFuZS5ub3JtYWwpKSB7CisgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIHQgPSB0MDsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9jb2xsaXNpb25Qb2ludC5jb3B5RnJvbSh0aGlzLl9wbGFuZUludGVyc2Vj
dGlvblBvaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWZvdW5k
KSB7CisgICAgICAgICAgICB2YXIgdmVsb2NpdHlTcXVhcmVkTGVuZ3RoID0gdGhpcy5fdmVsb2Np
dHkubGVuZ3RoU3F1YXJlZCgpOworICAgICAgICAgICAgdmFyIGEgPSB2ZWxvY2l0eVNxdWFyZWRM
ZW5ndGg7CisgICAgICAgICAgICB0aGlzLl9iYXNlUG9pbnQuc3VidHJhY3RUb1JlZihwMSwgdGhp
cy5fdGVtcFZlY3Rvcik7CisgICAgICAgICAgICB2YXIgYiA9IDIuMCAqIChfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdCh0aGlzLl92
ZWxvY2l0eSwgdGhpcy5fdGVtcFZlY3RvcikpOworICAgICAgICAgICAgdmFyIGMgPSB0aGlzLl90
ZW1wVmVjdG9yLmxlbmd0aFNxdWFyZWQoKSAtIDEuMDsKKyAgICAgICAgICAgIHZhciBsb3dlc3RS
b290ID0gZ2V0TG93ZXN0Um9vdChhLCBiLCBjLCB0KTsKKyAgICAgICAgICAgIGlmIChsb3dlc3RS
b290LmZvdW5kKSB7CisgICAgICAgICAgICAgICAgdCA9IGxvd2VzdFJvb3Qucm9vdDsKKyAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgdGhpcy5fY29sbGlzaW9u
UG9pbnQuY29weUZyb20ocDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYmFz
ZVBvaW50LnN1YnRyYWN0VG9SZWYocDIsIHRoaXMuX3RlbXBWZWN0b3IpOworICAgICAgICAgICAg
YiA9IDIuMCAqIChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdLkRvdCh0aGlzLl92ZWxvY2l0eSwgdGhpcy5fdGVtcFZlY3RvcikpOworICAg
ICAgICAgICAgYyA9IHRoaXMuX3RlbXBWZWN0b3IubGVuZ3RoU3F1YXJlZCgpIC0gMS4wOworICAg
ICAgICAgICAgbG93ZXN0Um9vdCA9IGdldExvd2VzdFJvb3QoYSwgYiwgYywgdCk7CisgICAgICAg
ICAgICBpZiAobG93ZXN0Um9vdC5mb3VuZCkgeworICAgICAgICAgICAgICAgIHQgPSBsb3dlc3RS
b290LnJvb3Q7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAg
IHRoaXMuX2NvbGxpc2lvblBvaW50LmNvcHlGcm9tKHAyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX2Jhc2VQb2ludC5zdWJ0cmFjdFRvUmVmKHAzLCB0aGlzLl90ZW1wVmVjdG9y
KTsKKyAgICAgICAgICAgIGIgPSAyLjAgKiAoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Eb3QodGhpcy5fdmVsb2NpdHksIHRoaXMuX3Rl
bXBWZWN0b3IpKTsKKyAgICAgICAgICAgIGMgPSB0aGlzLl90ZW1wVmVjdG9yLmxlbmd0aFNxdWFy
ZWQoKSAtIDEuMDsKKyAgICAgICAgICAgIGxvd2VzdFJvb3QgPSBnZXRMb3dlc3RSb290KGEsIGIs
IGMsIHQpOworICAgICAgICAgICAgaWYgKGxvd2VzdFJvb3QuZm91bmQpIHsKKyAgICAgICAgICAg
ICAgICB0ID0gbG93ZXN0Um9vdC5yb290OworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9jb2xsaXNpb25Qb2ludC5jb3B5RnJvbShwMyk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBwMi5zdWJ0cmFjdFRvUmVmKHAxLCB0aGlzLl9lZGdlKTsK
KyAgICAgICAgICAgIHAxLnN1YnRyYWN0VG9SZWYodGhpcy5fYmFzZVBvaW50LCB0aGlzLl9iYXNl
VG9WZXJ0ZXgpOworICAgICAgICAgICAgdmFyIGVkZ2VTcXVhcmVkTGVuZ3RoID0gdGhpcy5fZWRn
ZS5sZW5ndGhTcXVhcmVkKCk7CisgICAgICAgICAgICB2YXIgZWRnZURvdFZlbG9jaXR5ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5E
b3QodGhpcy5fZWRnZSwgdGhpcy5fdmVsb2NpdHkpOworICAgICAgICAgICAgdmFyIGVkZ2VEb3RC
YXNlVG9WZXJ0ZXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMyJdLkRvdCh0aGlzLl9lZGdlLCB0aGlzLl9iYXNlVG9WZXJ0ZXgpOworICAg
ICAgICAgICAgYSA9IGVkZ2VTcXVhcmVkTGVuZ3RoICogKC12ZWxvY2l0eVNxdWFyZWRMZW5ndGgp
ICsgZWRnZURvdFZlbG9jaXR5ICogZWRnZURvdFZlbG9jaXR5OworICAgICAgICAgICAgYiA9IGVk
Z2VTcXVhcmVkTGVuZ3RoICogKDIuMCAqIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KHRoaXMuX3ZlbG9jaXR5LCB0aGlzLl9iYXNl
VG9WZXJ0ZXgpKSAtIDIuMCAqIGVkZ2VEb3RWZWxvY2l0eSAqIGVkZ2VEb3RCYXNlVG9WZXJ0ZXg7
CisgICAgICAgICAgICBjID0gZWRnZVNxdWFyZWRMZW5ndGggKiAoMS4wIC0gdGhpcy5fYmFzZVRv
VmVydGV4Lmxlbmd0aFNxdWFyZWQoKSkgKyBlZGdlRG90QmFzZVRvVmVydGV4ICogZWRnZURvdEJh
c2VUb1ZlcnRleDsKKyAgICAgICAgICAgIGxvd2VzdFJvb3QgPSBnZXRMb3dlc3RSb290KGEsIGIs
IGMsIHQpOworICAgICAgICAgICAgaWYgKGxvd2VzdFJvb3QuZm91bmQpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgZiA9IChlZGdlRG90VmVsb2NpdHkgKiBsb3dlc3RSb290LnJvb3QgLSBlZGdlRG90
QmFzZVRvVmVydGV4KSAvIGVkZ2VTcXVhcmVkTGVuZ3RoOworICAgICAgICAgICAgICAgIGlmIChm
ID49IDAuMCAmJiBmIDw9IDEuMCkgeworICAgICAgICAgICAgICAgICAgICB0ID0gbG93ZXN0Um9v
dC5yb290OworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX2VkZ2Uuc2NhbGVJblBsYWNlKGYpOworICAgICAgICAgICAgICAgICAgICBw
MS5hZGRUb1JlZih0aGlzLl9lZGdlLCB0aGlzLl9jb2xsaXNpb25Qb2ludCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcDMuc3VidHJhY3RUb1JlZihwMiwg
dGhpcy5fZWRnZSk7CisgICAgICAgICAgICBwMi5zdWJ0cmFjdFRvUmVmKHRoaXMuX2Jhc2VQb2lu
dCwgdGhpcy5fYmFzZVRvVmVydGV4KTsKKyAgICAgICAgICAgIGVkZ2VTcXVhcmVkTGVuZ3RoID0g
dGhpcy5fZWRnZS5sZW5ndGhTcXVhcmVkKCk7CisgICAgICAgICAgICBlZGdlRG90VmVsb2NpdHkg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdLkRvdCh0aGlzLl9lZGdlLCB0aGlzLl92ZWxvY2l0eSk7CisgICAgICAgICAgICBlZGdlRG90
QmFzZVRvVmVydGV4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlZlY3RvcjMiXS5Eb3QodGhpcy5fZWRnZSwgdGhpcy5fYmFzZVRvVmVydGV4KTsKKyAg
ICAgICAgICAgIGEgPSBlZGdlU3F1YXJlZExlbmd0aCAqICgtdmVsb2NpdHlTcXVhcmVkTGVuZ3Ro
KSArIGVkZ2VEb3RWZWxvY2l0eSAqIGVkZ2VEb3RWZWxvY2l0eTsKKyAgICAgICAgICAgIGIgPSBl
ZGdlU3F1YXJlZExlbmd0aCAqICgyLjAgKiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdCh0aGlzLl92ZWxvY2l0eSwgdGhpcy5fYmFz
ZVRvVmVydGV4KSkgLSAyLjAgKiBlZGdlRG90VmVsb2NpdHkgKiBlZGdlRG90QmFzZVRvVmVydGV4
OworICAgICAgICAgICAgYyA9IGVkZ2VTcXVhcmVkTGVuZ3RoICogKDEuMCAtIHRoaXMuX2Jhc2VU
b1ZlcnRleC5sZW5ndGhTcXVhcmVkKCkpICsgZWRnZURvdEJhc2VUb1ZlcnRleCAqIGVkZ2VEb3RC
YXNlVG9WZXJ0ZXg7CisgICAgICAgICAgICBsb3dlc3RSb290ID0gZ2V0TG93ZXN0Um9vdChhLCBi
LCBjLCB0KTsKKyAgICAgICAgICAgIGlmIChsb3dlc3RSb290LmZvdW5kKSB7CisgICAgICAgICAg
ICAgICAgZiA9IChlZGdlRG90VmVsb2NpdHkgKiBsb3dlc3RSb290LnJvb3QgLSBlZGdlRG90QmFz
ZVRvVmVydGV4KSAvIGVkZ2VTcXVhcmVkTGVuZ3RoOworICAgICAgICAgICAgICAgIGlmIChmID49
IDAuMCAmJiBmIDw9IDEuMCkgeworICAgICAgICAgICAgICAgICAgICB0ID0gbG93ZXN0Um9vdC5y
b290OworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2VkZ2Uuc2NhbGVJblBsYWNlKGYpOworICAgICAgICAgICAgICAgICAgICBwMi5h
ZGRUb1JlZih0aGlzLl9lZGdlLCB0aGlzLl9jb2xsaXNpb25Qb2ludCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcDEuc3VidHJhY3RUb1JlZihwMywgdGhp
cy5fZWRnZSk7CisgICAgICAgICAgICBwMy5zdWJ0cmFjdFRvUmVmKHRoaXMuX2Jhc2VQb2ludCwg
dGhpcy5fYmFzZVRvVmVydGV4KTsKKyAgICAgICAgICAgIGVkZ2VTcXVhcmVkTGVuZ3RoID0gdGhp
cy5fZWRnZS5sZW5ndGhTcXVhcmVkKCk7CisgICAgICAgICAgICBlZGdlRG90VmVsb2NpdHkgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJd
LkRvdCh0aGlzLl9lZGdlLCB0aGlzLl92ZWxvY2l0eSk7CisgICAgICAgICAgICBlZGdlRG90QmFz
ZVRvVmVydGV4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlZlY3RvcjMiXS5Eb3QodGhpcy5fZWRnZSwgdGhpcy5fYmFzZVRvVmVydGV4KTsKKyAgICAg
ICAgICAgIGEgPSBlZGdlU3F1YXJlZExlbmd0aCAqICgtdmVsb2NpdHlTcXVhcmVkTGVuZ3RoKSAr
IGVkZ2VEb3RWZWxvY2l0eSAqIGVkZ2VEb3RWZWxvY2l0eTsKKyAgICAgICAgICAgIGIgPSBlZGdl
U3F1YXJlZExlbmd0aCAqICgyLjAgKiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdCh0aGlzLl92ZWxvY2l0eSwgdGhpcy5fYmFzZVRv
VmVydGV4KSkgLSAyLjAgKiBlZGdlRG90VmVsb2NpdHkgKiBlZGdlRG90QmFzZVRvVmVydGV4Owor
ICAgICAgICAgICAgYyA9IGVkZ2VTcXVhcmVkTGVuZ3RoICogKDEuMCAtIHRoaXMuX2Jhc2VUb1Zl
cnRleC5sZW5ndGhTcXVhcmVkKCkpICsgZWRnZURvdEJhc2VUb1ZlcnRleCAqIGVkZ2VEb3RCYXNl
VG9WZXJ0ZXg7CisgICAgICAgICAgICBsb3dlc3RSb290ID0gZ2V0TG93ZXN0Um9vdChhLCBiLCBj
LCB0KTsKKyAgICAgICAgICAgIGlmIChsb3dlc3RSb290LmZvdW5kKSB7CisgICAgICAgICAgICAg
ICAgZiA9IChlZGdlRG90VmVsb2NpdHkgKiBsb3dlc3RSb290LnJvb3QgLSBlZGdlRG90QmFzZVRv
VmVydGV4KSAvIGVkZ2VTcXVhcmVkTGVuZ3RoOworICAgICAgICAgICAgICAgIGlmIChmID49IDAu
MCAmJiBmIDw9IDEuMCkgeworICAgICAgICAgICAgICAgICAgICB0ID0gbG93ZXN0Um9vdC5yb290
OworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX2VkZ2Uuc2NhbGVJblBsYWNlKGYpOworICAgICAgICAgICAgICAgICAgICBwMy5hZGRU
b1JlZih0aGlzLl9lZGdlLCB0aGlzLl9jb2xsaXNpb25Qb2ludCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZCkgeworICAgICAg
ICAgICAgdmFyIGRpc3RUb0NvbGxpc2lvbiA9IHQgKiB0aGlzLl92ZWxvY2l0eS5sZW5ndGgoKTsK
KyAgICAgICAgICAgIGlmICghdGhpcy5jb2xsaXNpb25Gb3VuZCB8fCBkaXN0VG9Db2xsaXNpb24g
PCB0aGlzLl9uZWFyZXN0RGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW50
ZXJzZWN0aW9uUG9pbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25Q
b2ludCA9IHRoaXMuX2NvbGxpc2lvblBvaW50LmNsb25lKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVyc2Vj
dGlvblBvaW50LmNvcHlGcm9tKHRoaXMuX2NvbGxpc2lvblBvaW50KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdGhpcy5fbmVhcmVzdERpc3RhbmNlID0gZGlzdFRvQ29sbGlz
aW9uOworICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uRm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHRoaXMuY29sbGlkZWRNZXNoID0gaG9zdE1lc2g7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQ29sbGlkZXIucHJvdG90
eXBlLl9jb2xsaWRlID0gZnVuY3Rpb24gKHRyaWFuZ2xlUGxhbmVBcnJheSwgcHRzLCBpbmRpY2Vz
LCBpbmRleFN0YXJ0LCBpbmRleEVuZCwgZGVjYWwsIGhhc01hdGVyaWFsLCBob3N0TWVzaCkgewor
ICAgICAgICBmb3IgKHZhciBpID0gaW5kZXhTdGFydDsgaSA8IGluZGV4RW5kOyBpICs9IDMpIHsK
KyAgICAgICAgICAgIHZhciBwMSA9IHB0c1tpbmRpY2VzW2ldIC0gZGVjYWxdOworICAgICAgICAg
ICAgdmFyIHAyID0gcHRzW2luZGljZXNbaSArIDFdIC0gZGVjYWxdOworICAgICAgICAgICAgdmFy
IHAzID0gcHRzW2luZGljZXNbaSArIDJdIC0gZGVjYWxdOworICAgICAgICAgICAgdGhpcy5fdGVz
dFRyaWFuZ2xlKGksIHRyaWFuZ2xlUGxhbmVBcnJheSwgcDMsIHAyLCBwMSwgaGFzTWF0ZXJpYWws
IGhvc3RNZXNoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBD
b2xsaWRlci5wcm90b3R5cGUuX2dldFJlc3BvbnNlID0gZnVuY3Rpb24gKHBvcywgdmVsKSB7Cisg
ICAgICAgIHBvcy5hZGRUb1JlZih2ZWwsIHRoaXMuX2Rlc3RpbmF0aW9uUG9pbnQpOworICAgICAg
ICB2ZWwuc2NhbGVJblBsYWNlKCh0aGlzLl9uZWFyZXN0RGlzdGFuY2UgLyB2ZWwubGVuZ3RoKCkp
KTsKKyAgICAgICAgdGhpcy5fYmFzZVBvaW50LmFkZFRvUmVmKHZlbCwgcG9zKTsKKyAgICAgICAg
cG9zLnN1YnRyYWN0VG9SZWYodGhpcy5pbnRlcnNlY3Rpb25Qb2ludCwgdGhpcy5fc2xpZGVQbGFu
ZU5vcm1hbCk7CisgICAgICAgIHRoaXMuX3NsaWRlUGxhbmVOb3JtYWwubm9ybWFsaXplKCk7Cisg
ICAgICAgIHRoaXMuX3NsaWRlUGxhbmVOb3JtYWwuc2NhbGVUb1JlZih0aGlzLl9lcHNpbG9uLCB0
aGlzLl9kaXNwbGFjZW1lbnRWZWN0b3IpOworICAgICAgICBwb3MuYWRkSW5QbGFjZSh0aGlzLl9k
aXNwbGFjZW1lbnRWZWN0b3IpOworICAgICAgICB0aGlzLmludGVyc2VjdGlvblBvaW50LmFkZElu
UGxhY2UodGhpcy5fZGlzcGxhY2VtZW50VmVjdG9yKTsKKyAgICAgICAgdGhpcy5fc2xpZGVQbGFu
ZU5vcm1hbC5zY2FsZUluUGxhY2UoX01hdGhzX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siUGxhbmUiXS5TaWduZWREaXN0YW5jZVRvUGxhbmVGcm9tUG9zaXRpb25BbmRO
b3JtYWwodGhpcy5pbnRlcnNlY3Rpb25Qb2ludCwgdGhpcy5fc2xpZGVQbGFuZU5vcm1hbCwgdGhp
cy5fZGVzdGluYXRpb25Qb2ludCkpOworICAgICAgICB0aGlzLl9kZXN0aW5hdGlvblBvaW50LnN1
YnRyYWN0SW5QbGFjZSh0aGlzLl9zbGlkZVBsYW5lTm9ybWFsKTsKKyAgICAgICAgdGhpcy5fZGVz
dGluYXRpb25Qb2ludC5zdWJ0cmFjdFRvUmVmKHRoaXMuaW50ZXJzZWN0aW9uUG9pbnQsIHZlbCk7
CisgICAgfTsKKyAgICByZXR1cm4gQ29sbGlkZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL0NvbGxpc2lvbnMvY29sbGlzaW9uQ29vcmRpbmF0b3IudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0NvbGxp
c2lvbnMvY29sbGlzaW9uQ29vcmRpbmF0b3IudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRGVmYXVs
dENvbGxpc2lvbkNvb3JkaW5hdG9yICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkRlZmF1bHRDb2xsaXNpb25Db29yZGluYXRvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGVm
YXVsdENvbGxpc2lvbkNvb3JkaW5hdG9yOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
c2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZl
Y3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5n
aW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfY29sbGlkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vY29sbGlkZXIgKi8gIi4vQ29sbGlzaW9ucy9jb2xsaWRlci50cyIp
OworCisKKworCisvKiogQGhpZGRlbiAqLwordmFyIERlZmF1bHRDb2xsaXNpb25Db29yZGluYXRv
ciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBEZWZhdWx0Q29s
bGlzaW9uQ29vcmRpbmF0b3IoKSB7CisgICAgICAgIHRoaXMuX3NjYWxlZFBvc2l0aW9uID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIHRoaXMuX3NjYWxlZFZlbG9jaXR5ID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAg
IHRoaXMuX2ZpbmFsUG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICB9CisgICAgRGVmYXVsdENvbGxp
c2lvbkNvb3JkaW5hdG9yLnByb3RvdHlwZS5nZXROZXdQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb3Np
dGlvbiwgZGlzcGxhY2VtZW50LCBjb2xsaWRlciwgbWF4aW11bVJldHJ5LCBleGNsdWRlZE1lc2gs
IG9uTmV3UG9zaXRpb24sIGNvbGxpc2lvbkluZGV4KSB7CisgICAgICAgIHBvc2l0aW9uLmRpdmlk
ZVRvUmVmKGNvbGxpZGVyLl9yYWRpdXMsIHRoaXMuX3NjYWxlZFBvc2l0aW9uKTsKKyAgICAgICAg
ZGlzcGxhY2VtZW50LmRpdmlkZVRvUmVmKGNvbGxpZGVyLl9yYWRpdXMsIHRoaXMuX3NjYWxlZFZl
bG9jaXR5KTsKKyAgICAgICAgY29sbGlkZXIuY29sbGlkZWRNZXNoID0gbnVsbDsKKyAgICAgICAg
Y29sbGlkZXIuX3JldHJ5ID0gMDsKKyAgICAgICAgY29sbGlkZXIuX2luaXRpYWxWZWxvY2l0eSA9
IHRoaXMuX3NjYWxlZFZlbG9jaXR5OworICAgICAgICBjb2xsaWRlci5faW5pdGlhbFBvc2l0aW9u
ID0gdGhpcy5fc2NhbGVkUG9zaXRpb247CisgICAgICAgIHRoaXMuX2NvbGxpZGVXaXRoV29ybGQo
dGhpcy5fc2NhbGVkUG9zaXRpb24sIHRoaXMuX3NjYWxlZFZlbG9jaXR5LCBjb2xsaWRlciwgbWF4
aW11bVJldHJ5LCB0aGlzLl9maW5hbFBvc2l0aW9uLCBleGNsdWRlZE1lc2gpOworICAgICAgICB0
aGlzLl9maW5hbFBvc2l0aW9uLm11bHRpcGx5SW5QbGFjZShjb2xsaWRlci5fcmFkaXVzKTsKKyAg
ICAgICAgLy9ydW4gdGhlIGNhbGxiYWNrCisgICAgICAgIG9uTmV3UG9zaXRpb24oY29sbGlzaW9u
SW5kZXgsIHRoaXMuX2ZpbmFsUG9zaXRpb24sIGNvbGxpZGVyLmNvbGxpZGVkTWVzaCk7CisgICAg
fTsKKyAgICBEZWZhdWx0Q29sbGlzaW9uQ29vcmRpbmF0b3IucHJvdG90eXBlLmNyZWF0ZUNvbGxp
ZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IF9jb2xsaWRlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb2xsaWRlciJdKCk7CisgICAgfTsKKyAgICBEZWZhdWx0
Q29sbGlzaW9uQ29vcmRpbmF0b3IucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoc2NlbmUpIHsK
KyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZTsKKyAgICB9OworICAgIERlZmF1bHRDb2xsaXNp
b25Db29yZGluYXRvci5wcm90b3R5cGUuX2NvbGxpZGVXaXRoV29ybGQgPSBmdW5jdGlvbiAocG9z
aXRpb24sIHZlbG9jaXR5LCBjb2xsaWRlciwgbWF4aW11bVJldHJ5LCBmaW5hbFBvc2l0aW9uLCBl
eGNsdWRlZE1lc2gpIHsKKyAgICAgICAgaWYgKGV4Y2x1ZGVkTWVzaCA9PT0gdm9pZCAwKSB7IGV4
Y2x1ZGVkTWVzaCA9IG51bGw7IH0KKyAgICAgICAgdmFyIGNsb3NlRGlzdGFuY2UgPSBfRW5naW5l
c19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lIl0uQ29sbGlzaW9u
c0Vwc2lsb24gKiAxMC4wOworICAgICAgICBpZiAoY29sbGlkZXIuX3JldHJ5ID49IG1heGltdW1S
ZXRyeSkgeworICAgICAgICAgICAgZmluYWxQb3NpdGlvbi5jb3B5RnJvbShwb3NpdGlvbik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBp
cyBhIG1lc2ggZWxzZSBjYW1lcmEgb3IgLTEKKyAgICAgICAgdmFyIGNvbGxpc2lvbk1hc2sgPSAo
ZXhjbHVkZWRNZXNoID8gZXhjbHVkZWRNZXNoLmNvbGxpc2lvbk1hc2sgOiBjb2xsaWRlci5jb2xs
aXNpb25NYXNrKTsKKyAgICAgICAgY29sbGlkZXIuX2luaXRpYWxpemUocG9zaXRpb24sIHZlbG9j
aXR5LCBjbG9zZURpc3RhbmNlKTsKKyAgICAgICAgLy8gQ2hlY2sgYWxsIG1lc2hlcworICAgICAg
ICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fc2NlbmUubWVzaGVzLmxlbmd0aDsg
aW5kZXgrKykgeworICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLl9zY2VuZS5tZXNoZXNbaW5k
ZXhdOworICAgICAgICAgICAgaWYgKG1lc2guaXNFbmFibGVkKCkgJiYgbWVzaC5jaGVja0NvbGxp
c2lvbnMgJiYgbWVzaC5zdWJNZXNoZXMgJiYgbWVzaCAhPT0gZXhjbHVkZWRNZXNoICYmICgoY29s
bGlzaW9uTWFzayAmIG1lc2guY29sbGlzaW9uR3JvdXApICE9PSAwKSkgeworICAgICAgICAgICAg
ICAgIG1lc2guX2NoZWNrQ29sbGlzaW9uKGNvbGxpZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWNvbGxpZGVyLmNvbGxpc2lvbkZvdW5kKSB7CisgICAgICAgICAg
ICBwb3NpdGlvbi5hZGRUb1JlZih2ZWxvY2l0eSwgZmluYWxQb3NpdGlvbik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlbG9jaXR5LnggIT09IDAgfHwgdmVs
b2NpdHkueSAhPT0gMCB8fCB2ZWxvY2l0eS56ICE9PSAwKSB7CisgICAgICAgICAgICBjb2xsaWRl
ci5fZ2V0UmVzcG9uc2UocG9zaXRpb24sIHZlbG9jaXR5KTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodmVsb2NpdHkubGVuZ3RoKCkgPD0gY2xvc2VEaXN0YW5jZSkgeworICAgICAgICAgICAgZmlu
YWxQb3NpdGlvbi5jb3B5RnJvbShwb3NpdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY29sbGlkZXIuX3JldHJ5Kys7CisgICAgICAgIHRoaXMuX2NvbGxpZGVX
aXRoV29ybGQocG9zaXRpb24sIHZlbG9jaXR5LCBjb2xsaWRlciwgbWF4aW11bVJldHJ5LCBmaW5h
bFBvc2l0aW9uLCBleGNsdWRlZE1lc2gpOworICAgIH07CisgICAgcmV0dXJuIERlZmF1bHRDb2xs
aXNpb25Db29yZGluYXRvcjsKK30oKSk7CisKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJTY2VuZSJdLkNvbGxpc2lvbkNvb3JkaW5hdG9yRmFjdG9yeSA9IGZ1bmN0aW9uICgp
IHsKKyAgICByZXR1cm4gbmV3IERlZmF1bHRDb2xsaXNpb25Db29yZGluYXRvcigpOworfTsKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vQ29sbGlzaW9ucy9pbmRleC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ29sbGlzaW9ucy9pbmRleC50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBDb2xsaWRlciwgRGVmYXVsdENvbGxpc2lvbkNvb3JkaW5hdG9yLCBQaWNraW5nSW5mbywg
SW50ZXJzZWN0aW9uSW5mbywgX01lc2hDb2xsaXNpb25EYXRhICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29sbGlkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29sbGlkZXIgKi8gIi4vQ29sbGlz
aW9ucy9jb2xsaWRlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xsaWRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2NvbGxpZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbGxp
ZGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbGxpc2lvbkNvb3JkaW5h
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL2NvbGxpc2lvbkNvb3JkaW5hdG9yICovICIuL0NvbGxpc2lvbnMvY29sbGlzaW9uQ29vcmRp
bmF0b3IudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVmYXVsdENvbGxpc2lvbkNvb3JkaW5hdG9y
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29sbGlzaW9uQ29vcmRpbmF0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siRGVmYXVsdENvbGxpc2lvbkNvb3JkaW5hdG9yIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BpY2tpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BpY2tpbmdJbmZvICovICIuL0Nv
bGxpc2lvbnMvcGlja2luZ0luZm8udHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGlja2luZ0luZm8i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9waWNraW5nSW5mb19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJQaWNraW5nSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9p
bnRlcnNlY3Rpb25JbmZvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL2ludGVyc2VjdGlvbkluZm8gKi8gIi4vQ29sbGlzaW9ucy9pbnRlcnNl
Y3Rpb25JbmZvLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkludGVyc2VjdGlvbkluZm8iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbnRlcnNlY3Rpb25JbmZvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIkludGVyc2VjdGlvbkluZm8iXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfbWVzaENvbGxpc2lvbkRhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vbWVzaENvbGxpc2lvbkRhdGEgKi8gIi4vQ29sbGlzaW9ucy9t
ZXNoQ29sbGlzaW9uRGF0YS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfTWVzaENvbGxpc2lvbkRh
dGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tZXNoQ29sbGlzaW9uRGF0YV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJfTWVzaENvbGxpc2lvbkRhdGEiXTsgfSk7CisKKworCisKKworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL0NvbGxpc2lvbnMvaW50ZXJzZWN0aW9uSW5mby50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9Db2xsaXNpb25zL2ludGVyc2VjdGlvbkluZm8udHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBJbnRlcnNl
Y3Rpb25JbmZvICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkludGVyc2Vj
dGlvbkluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIEludGVyc2VjdGlvbkluZm87IH0pOworLyoq
CisgKiBAaGlkZGVuCisgKi8KK3ZhciBJbnRlcnNlY3Rpb25JbmZvID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEludGVyc2VjdGlvbkluZm8oYnUsIGJ2LCBkaXN0
YW5jZSkgeworICAgICAgICB0aGlzLmJ1ID0gYnU7CisgICAgICAgIHRoaXMuYnYgPSBidjsKKyAg
ICAgICAgdGhpcy5kaXN0YW5jZSA9IGRpc3RhbmNlOworICAgICAgICB0aGlzLmZhY2VJZCA9IDA7
CisgICAgICAgIHRoaXMuc3ViTWVzaElkID0gMDsKKyAgICB9CisgICAgcmV0dXJuIEludGVyc2Vj
dGlvbkluZm87Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0NvbGxpc2lvbnMv
bWVzaENvbGxpc2lvbkRhdGEudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL0NvbGxpc2lvbnMvbWVzaENvbGxpc2lvbkRhdGEudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogX01lc2hDb2xsaXNpb25EYXRhICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIl9NZXNoQ29sbGlzaW9uRGF0YSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01lc2hDb2xsaXNpb25EYXRhOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9y
LnRzIik7CisKKy8qKgorICogQGhpZGRlbgorICovCit2YXIgX01lc2hDb2xsaXNpb25EYXRhID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIF9NZXNoQ29sbGlzaW9u
RGF0YSgpIHsKKyAgICAgICAgdGhpcy5fY2hlY2tDb2xsaXNpb25zID0gZmFsc2U7CisgICAgICAg
IHRoaXMuX2NvbGxpc2lvbk1hc2sgPSAtMTsKKyAgICAgICAgdGhpcy5fY29sbGlzaW9uR3JvdXAg
PSAtMTsKKyAgICAgICAgdGhpcy5fY29sbGlkZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vbGRQ
b3NpdGlvbkZvckNvbGxpc2lvbnMgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fZGlm
ZlBvc2l0aW9uRm9yQ29sbGlzaW9ucyA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAgIH0KKyAgICByZXR1
cm4gX01lc2hDb2xsaXNpb25EYXRhOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9Db2xsaXNpb25zL3BpY2tpbmdJbmZvLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9Db2xsaXNpb25zL3BpY2tpbmdJbmZvLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IFBpY2tpbmdJbmZvICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBpY2tpbmdJbmZvIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQaWNraW5nSW5mbzsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3Rv
ciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsK
KworCisvKioKKyAgICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVzdWx0IG9mIHBpY2tpbmcg
d2l0aGluIGEgc2NlbmUKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFi
eWxvbjEwMS9waWNraW5nX2NvbGxpc2lvbnMKKyAgICAgKi8KK3ZhciBQaWNraW5nSW5mbyA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQaWNraW5nSW5mbygpIHsK
KyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fcGlja2luZ1VuYXZhaWxhYmxl
ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0aGUgcGljayBjb2xsaWRlZCB3
aXRoIGFuIG9iamVjdAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5oaXQgPSBmYWxzZTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIERpc3RhbmNlIGF3YXkgd2hlcmUgdGhlIHBpY2sgY29sbGlk
ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGlzdGFuY2UgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogVGhlIGxvY2F0aW9uIG9mIHBpY2sgY29sbGlzaW9uCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLnBpY2tlZFBvaW50ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFRoZSBtZXNoIGNvcnJlc3BvbmRpbmcgdGhlIHRoZSBwaWNrIGNvbGxpc2lvbgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5waWNrZWRNZXNoID0gbnVsbDsKKyAgICAgICAgLyoqIChTZWUgZ2V0
VGV4dHVyZUNvb3JkaW5hdGVzKSBUaGUgYmFyeWNlbnRyaWMgVSBjb29yZGluYXRlIHRoYXQgaXMg
dXNlZCB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIG9mIHRoZSBjb2xs
aXNpb24uKi8KKyAgICAgICAgdGhpcy5idSA9IDA7CisgICAgICAgIC8qKiAoU2VlIGdldFRleHR1
cmVDb29yZGluYXRlcykgVGhlIGJhcnljZW50cmljIFYgY29vcmRpbmF0ZSB0aGF0IGlzIHVzZWQg
d2hlbiBjYWxjdWxhdGluZyB0aGUgdGV4dHVyZSBjb29yZGluYXRlcyBvZiB0aGUgY29sbGlzaW9u
LiovCisgICAgICAgIHRoaXMuYnYgPSAwOworICAgICAgICAvKiogVGhlIGluZGV4IG9mIHRoZSBm
YWNlIG9uIHRoZSBtZXNoIHRoYXQgd2FzIHBpY2tlZCwgb3IgdGhlIGluZGV4IG9mIHRoZSBMaW5l
IGlmIHRoZSBwaWNrZWQgTWVzaCBpcyBhIExpbmVzTWVzaCAqLworICAgICAgICB0aGlzLmZhY2VJ
ZCA9IC0xOworICAgICAgICAvKiogSWQgb2YgdGhlIHRoZSBzdWJtZXNoIHRoYXQgd2FzIHBpY2tl
ZCAqLworICAgICAgICB0aGlzLnN1Yk1lc2hJZCA9IDA7CisgICAgICAgIC8qKiBJZiBhIHNwcml0
ZSB3YXMgcGlja2VkLCB0aGlzIHdpbGwgYmUgdGhlIHNwcml0ZSB0aGUgcGljayBjb2xsaWRlZCB3
aXRoICovCisgICAgICAgIHRoaXMucGlja2VkU3ByaXRlID0gbnVsbDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIElmIGEgbWVzaCB3YXMgdXNlZCB0byBkbyB0aGUgcGlja2luZyAoZWcuIDZkb2Yg
Y29udHJvbGxlcikgdGhpcyB3aWxsIGJlIHBvcHVsYXRlZC4KKyAgICAgICAgICovCisgICAgICAg
IHRoaXMub3JpZ2luTWVzaCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgcmF5
IHRoYXQgd2FzIHVzZWQgdG8gcGVyZm9ybSB0aGUgcGlja2luZy4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMucmF5ID0gbnVsbDsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbm9y
bWFsIGNvcnJlc3BvZG5pbmcgdG8gdGhlIGZhY2UgdGhlIHBpY2sgY29sbGlkZWQgd2l0aAorICAg
ICAqIEBwYXJhbSB1c2VXb3JsZENvb3JkaW5hdGVzIElmIHRoZSByZXN1bHRpbmcgbm9ybWFsIHNo
b3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgd29ybGQgKGRlZmF1bHQ6IGZhbHNlKQorICAgICAqIEBw
YXJhbSB1c2VWZXJ0aWNlc05vcm1hbHMgSWYgdGhlIHZlcnRpY2VzIG5vcm1hbHMgc2hvdWxkIGJl
IHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBub3JtYWwgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIG1hcAor
ICAgICAqIEByZXR1cm5zIFRoZSBub3JtYWwgY29ycmVzcG9kbmluZyB0byB0aGUgZmFjZSB0aGUg
cGljayBjb2xsaWRlZCB3aXRoCisgICAgICovCisgICAgUGlja2luZ0luZm8ucHJvdG90eXBlLmdl
dE5vcm1hbCA9IGZ1bmN0aW9uICh1c2VXb3JsZENvb3JkaW5hdGVzLCB1c2VWZXJ0aWNlc05vcm1h
bHMpIHsKKyAgICAgICAgaWYgKHVzZVdvcmxkQ29vcmRpbmF0ZXMgPT09IHZvaWQgMCkgeyB1c2VX
b3JsZENvb3JkaW5hdGVzID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHVzZVZlcnRpY2VzTm9ybWFs
cyA9PT0gdm9pZCAwKSB7IHVzZVZlcnRpY2VzTm9ybWFscyA9IHRydWU7IH0KKyAgICAgICAgaWYg
KCF0aGlzLnBpY2tlZE1lc2ggfHwgIXRoaXMucGlja2VkTWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNl
bnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVm
ZmVyIl0uTm9ybWFsS2luZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9
CisgICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5waWNrZWRNZXNoLmdldEluZGljZXMoKTsKKyAg
ICAgICAgaWYgKCFpbmRpY2VzKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICB2YXIgcmVzdWx0OworICAgICAgICBpZiAodXNlVmVydGljZXNOb3JtYWxzKSB7
CisgICAgICAgICAgICB2YXIgbm9ybWFscyA9IHRoaXMucGlja2VkTWVzaC5nZXRWZXJ0aWNlc0Rh
dGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVm
ZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAgICAgICB2YXIgbm9ybWFsMCA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5
KG5vcm1hbHMsIGluZGljZXNbdGhpcy5mYWNlSWQgKiAzXSAqIDMpOworICAgICAgICAgICAgdmFy
IG5vcm1hbDEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdLkZyb21BcnJheShub3JtYWxzLCBpbmRpY2VzW3RoaXMuZmFjZUlkICogMyAr
IDFdICogMyk7CisgICAgICAgICAgICB2YXIgbm9ybWFsMiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KG5vcm1hbHMs
IGluZGljZXNbdGhpcy5mYWNlSWQgKiAzICsgMl0gKiAzKTsKKyAgICAgICAgICAgIG5vcm1hbDAg
PSBub3JtYWwwLnNjYWxlKHRoaXMuYnUpOworICAgICAgICAgICAgbm9ybWFsMSA9IG5vcm1hbDEu
c2NhbGUodGhpcy5idik7CisgICAgICAgICAgICBub3JtYWwyID0gbm9ybWFsMi5zY2FsZSgxLjAg
LSB0aGlzLmJ1IC0gdGhpcy5idik7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShub3JtYWww
LnggKyBub3JtYWwxLnggKyBub3JtYWwyLngsIG5vcm1hbDAueSArIG5vcm1hbDEueSArIG5vcm1h
bDIueSwgbm9ybWFsMC56ICsgbm9ybWFsMS56ICsgbm9ybWFsMi56KTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbnMgPSB0aGlzLnBpY2tlZE1lc2gu
Z2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7CisgICAgICAgICAgICB2YXIgdmVydGV4
MSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0
b3IzIl0uRnJvbUFycmF5KHBvc2l0aW9ucywgaW5kaWNlc1t0aGlzLmZhY2VJZCAqIDNdICogMyk7
CisgICAgICAgICAgICB2YXIgdmVydGV4MiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KHBvc2l0aW9ucywgaW5kaWNl
c1t0aGlzLmZhY2VJZCAqIDMgKyAxXSAqIDMpOworICAgICAgICAgICAgdmFyIHZlcnRleDMgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJd
LkZyb21BcnJheShwb3NpdGlvbnMsIGluZGljZXNbdGhpcy5mYWNlSWQgKiAzICsgMl0gKiAzKTsK
KyAgICAgICAgICAgIHZhciBwMXAyID0gdmVydGV4MS5zdWJ0cmFjdCh2ZXJ0ZXgyKTsKKyAgICAg
ICAgICAgIHZhciBwM3AyID0gdmVydGV4My5zdWJ0cmFjdCh2ZXJ0ZXgyKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0uQ3Jvc3MocDFwMiwgcDNwMik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVz
ZVdvcmxkQ29vcmRpbmF0ZXMpIHsKKyAgICAgICAgICAgIHZhciB3bSA9IHRoaXMucGlja2VkTWVz
aC5nZXRXb3JsZE1hdHJpeCgpOworICAgICAgICAgICAgaWYgKHRoaXMucGlja2VkTWVzaC5ub25V
bmlmb3JtU2NhbGluZykgeworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdLmNvcHlGcm9t
KHdtKTsKKyAgICAgICAgICAgICAgICB3bSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdOworICAgICAgICAgICAg
ICAgIHdtLnNldFRyYW5zbGF0aW9uRnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICB3bS5pbnZlcnQoKTsKKyAgICAgICAgICAgICAgICB3bS50cmFuc3Bvc2VUb1JlZihfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLk1h
dHJpeFsxXSk7CisgICAgICAgICAgICAgICAgd20gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsxXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJlc3VsdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKHJlc3VsdCwgd20p
OworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5ub3JtYWxpemUoKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRleHR1cmUgY29vcmRp
bmF0ZXMgb2Ygd2hlcmUgdGhlIHBpY2sgb2NjdXJlZAorICAgICAqIEByZXR1cm5zIHRoZSB2ZWN0
b3IgY29udGFpbmluZyB0aGUgY29vcmRuYXRlcyBvZiB0aGUgdGV4dHVyZQorICAgICAqLworICAg
IFBpY2tpbmdJbmZvLnByb3RvdHlwZS5nZXRUZXh0dXJlQ29vcmRpbmF0ZXMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICghdGhpcy5waWNrZWRNZXNoIHx8ICF0aGlzLnBpY2tlZE1lc2guaXNW
ZXJ0aWNlc0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICB9CisgICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5waWNrZWRNZXNoLmdldElu
ZGljZXMoKTsKKyAgICAgICAgaWYgKCFpbmRpY2VzKSB7CisgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgfQorICAgICAgICB2YXIgdXZzID0gdGhpcy5waWNrZWRNZXNoLmdldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0
ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICBpZiAoIXV2cykgeworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHV2MCA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IyIl0uRnJvbUFycmF5KHV2cywg
aW5kaWNlc1t0aGlzLmZhY2VJZCAqIDNdICogMik7CisgICAgICAgIHZhciB1djEgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdLkZyb21B
cnJheSh1dnMsIGluZGljZXNbdGhpcy5mYWNlSWQgKiAzICsgMV0gKiAyKTsKKyAgICAgICAgdmFy
IHV2MiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IyIl0uRnJvbUFycmF5KHV2cywgaW5kaWNlc1t0aGlzLmZhY2VJZCAqIDMgKyAyXSAqIDIp
OworICAgICAgICB1djAgPSB1djAuc2NhbGUodGhpcy5idSk7CisgICAgICAgIHV2MSA9IHV2MS5z
Y2FsZSh0aGlzLmJ2KTsKKyAgICAgICAgdXYyID0gdXYyLnNjYWxlKDEuMCAtIHRoaXMuYnUgLSB0
aGlzLmJ2KTsKKyAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdKHV2MC54ICsgdXYxLnggKyB1djIueCwgdXYw
LnkgKyB1djEueSArIHV2Mi55KTsKKyAgICB9OworICAgIHJldHVybiBQaWNraW5nSW5mbzsKK30o
KSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ3VsbGluZy9PY3RyZWVzL2luZGV4LnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0N1
bGxpbmcvT2N0cmVlcy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE9jdHJlZSwgT2N0cmVlQmxvY2ssIE9j
dHJlZVNjZW5lQ29tcG9uZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfb2N0cmVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL29jdHJlZSAqLyAiLi9DdWxsaW5nL09jdHJlZXMvb2N0cmVlLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX29jdHJlZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJPY3RyZWUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfb2N0cmVlQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vb2N0cmVlQmxvY2sgKi8gIi4vQ3VsbGluZy9PY3Ry
ZWVzL29jdHJlZUJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZUJsb2NrIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfb2N0cmVlQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siT2N0cmVlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfb2N0cmVl
U2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vb2N0cmVlU2NlbmVDb21wb25lbnQgKi8gIi4vQ3VsbGluZy9PY3RyZWVz
L29jdHJlZVNjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZVNjZW5l
Q29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfb2N0cmVlU2NlbmVDb21wb25lbnRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siT2N0cmVlU2NlbmVDb21wb25lbnQiXTsgfSk7CisK
KworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vQ3VsbGluZy9PY3RyZWVzL29jdHJlZS50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
Q3VsbGluZy9PY3RyZWVzL29jdHJlZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBPY3RyZWUgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT2N0cmVlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBP
Y3RyZWU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3NtYXJ0QXJyYXlfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01pc2Mvc21hcnRBcnJheSAqLyAiLi9NaXNjL3NtYXJ0QXJyYXkudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfb2N0cmVlQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vb2N0cmVlQmxvY2sgKi8gIi4vQ3VsbGluZy9PY3Ry
ZWVzL29jdHJlZUJsb2NrLnRzIik7CisKKworLyoqCisgKiBPY3RyZWVzIGFyZSBhIHJlYWxseSBw
b3dlcmZ1bCBkYXRhIHN0cnVjdHVyZSB0aGF0IGNhbiBxdWlja2x5IHNlbGVjdCBlbnRpdGllcyBi
YXNlZCBvbiBzcGFjZSBjb29yZGluYXRlcy4KKyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vb3B0aW1pemluZ195b3VyX3NjZW5lX3dpdGhfb2N0cmVlcworICovCit2YXIg
T2N0cmVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBvY3RyZWUKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL29wdGltaXppbmdfeW91cl9zY2VuZV93aXRoX29jdHJlZXMKKyAgICAgKiBAcGFyYW0gY3Jl
YXRpb25GdW5jIGZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gaW5zdGF0aWF0ZSB0aGUgb2N0cmVlCisg
ICAgICogQHBhcmFtIG1heEJsb2NrQ2FwYWNpdHkgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIg
b2YgbWVzaGVzIHlvdSB3YW50IG9uIHlvdXIgb2N0cmVlJ3MgbGVhdmVzIChkZWZhdWx0OiA2NCkK
KyAgICAgKiBAcGFyYW0gbWF4RGVwdGggZGVmaW5lcyB0aGUgbWF4aW11bSBkZXB0aCAoc3ViLWxl
dmVscykgZm9yIHlvdXIgb2N0cmVlLiBEZWZhdWx0IHZhbHVlIGlzIDIsIHdoaWNoIG1lYW5zIDgg
OCA4ID0gNTEyIGJsb2NrcyA6KSAoVGhpcyBwYXJhbWV0ZXIgdGFrZXMgcHJlY2VkZW5jZSBvdmVy
IGNhcGFjaXR5LikKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBPY3RyZWUoY3JlYXRpb25GdW5jLCBt
YXhCbG9ja0NhcGFjaXR5LCAKKyAgICAvKiogRGVmaW5lcyB0aGUgbWF4aW11bSBkZXB0aCAoc3Vi
LWxldmVscykgZm9yIHlvdXIgb2N0cmVlLiBEZWZhdWx0IHZhbHVlIGlzIDIsIHdoaWNoIG1lYW5z
IDggOCA4ID0gNTEyIGJsb2NrcyA6KSAoVGhpcyBwYXJhbWV0ZXIgdGFrZXMgcHJlY2VkZW5jZSBv
dmVyIGNhcGFjaXR5LikgKi8KKyAgICBtYXhEZXB0aCkgeworICAgICAgICBpZiAobWF4RGVwdGgg
PT09IHZvaWQgMCkgeyBtYXhEZXB0aCA9IDI7IH0KKyAgICAgICAgdGhpcy5tYXhEZXB0aCA9IG1h
eERlcHRoOworICAgICAgICAvKioKKyAgICAgICAgICogQ29udGVudCBzdG9yZWQgaW4gdGhlIG9j
dHJlZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5keW5hbWljQ29udGVudCA9IG5ldyBBcnJh
eSgpOworICAgICAgICB0aGlzLl9tYXhCbG9ja0NhcGFjaXR5ID0gbWF4QmxvY2tDYXBhY2l0eSB8
fCA2NDsKKyAgICAgICAgdGhpcy5fc2VsZWN0aW9uQ29udGVudCA9IG5ldyBfTWlzY19zbWFydEFy
cmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNtYXJ0QXJyYXlOb0R1cGxpY2F0ZSJd
KDEwMjQpOworICAgICAgICB0aGlzLl9jcmVhdGlvbkZ1bmMgPSBjcmVhdGlvbkZ1bmM7CisgICAg
fQorICAgIC8vIE1ldGhvZHMKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBvY3RyZWUgYnkg
YWRkaW5nIGJsb2NrcyBmb3IgdGhlIHBhc3NlZCBpbiBtZXNoZXMgd2l0aGluIHRoZSBtaW4gYW5k
IG1heCB3b3JsZCBwYXJhbWV0ZXJzCisgICAgICogQHBhcmFtIHdvcmxkTWluIHdvcmxkTWluIGZv
ciB0aGUgb2N0cmVlIGJsb2NrcyB2YXIgYmxvY2tTaXplID0gbmV3IFZlY3RvcjMoKHdvcmxkTWF4
LnggLSB3b3JsZE1pbi54KSAvIDIsICh3b3JsZE1heC55IC0gd29ybGRNaW4ueSkgLyAyLCAod29y
bGRNYXgueiAtIHdvcmxkTWluLnopIC8gMik7CisgICAgICogQHBhcmFtIHdvcmxkTWF4IHdvcmxk
TWF4IGZvciB0aGUgb2N0cmVlIGJsb2NrcyB2YXIgYmxvY2tTaXplID0gbmV3IFZlY3RvcjMoKHdv
cmxkTWF4LnggLSB3b3JsZE1pbi54KSAvIDIsICh3b3JsZE1heC55IC0gd29ybGRNaW4ueSkgLyAy
LCAod29ybGRNYXgueiAtIHdvcmxkTWluLnopIC8gMik7CisgICAgICogQHBhcmFtIGVudHJpZXMg
bWVzaGVzIHRvIGJlIGFkZGVkIHRvIHRoZSBvY3RyZWUgYmxvY2tzCisgICAgICovCisgICAgT2N0
cmVlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAod29ybGRNaW4sIHdvcmxkTWF4LCBlbnRy
aWVzKSB7CisgICAgICAgIF9vY3RyZWVCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJPY3RyZWVCbG9jayJdLl9DcmVhdGVCbG9ja3Mod29ybGRNaW4sIHdvcmxkTWF4LCBlbnRyaWVz
LCB0aGlzLl9tYXhCbG9ja0NhcGFjaXR5LCAwLCB0aGlzLm1heERlcHRoLCB0aGlzLCB0aGlzLl9j
cmVhdGlvbkZ1bmMpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIG1lc2ggdG8gdGhl
IG9jdHJlZQorICAgICAqIEBwYXJhbSBlbnRyeSBNZXNoIHRvIGFkZCB0byB0aGUgb2N0cmVlCisg
ICAgICovCisgICAgT2N0cmVlLnByb3RvdHlwZS5hZGRNZXNoID0gZnVuY3Rpb24gKGVudHJ5KSB7
CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJsb2Nrcy5sZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBibG9jayA9IHRoaXMuYmxvY2tzW2luZGV4XTsK
KyAgICAgICAgICAgIGJsb2NrLmFkZEVudHJ5KGVudHJ5KTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogUmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgb2N0cmVlCisgICAgICog
QHBhcmFtIGVudHJ5IGRlZmluZXMgdGhlIGVsZW1lbnQgdG8gcmVtb3ZlCisgICAgICovCisgICAg
T2N0cmVlLnByb3RvdHlwZS5yZW1vdmVNZXNoID0gZnVuY3Rpb24gKGVudHJ5KSB7CisgICAgICAg
IGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJsb2Nrcy5sZW5ndGg7IGluZGV4Kysp
IHsKKyAgICAgICAgICAgIHZhciBibG9jayA9IHRoaXMuYmxvY2tzW2luZGV4XTsKKyAgICAgICAg
ICAgIGJsb2NrLnJlbW92ZUVudHJ5KGVudHJ5KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogU2VsZWN0cyBhbiBhcnJheSBvZiBtZXNoZXMgd2l0aGluIHRoZSBmcnVzdHVtCisg
ICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgVGhlIGZydXN0dW0gcGxhbmVzIHRvIHVzZSB3aGlj
aCB3aWxsIHNlbGVjdCBhbGwgbWVzaGVzIHdpdGhpbiBpdAorICAgICAqIEBwYXJhbSBhbGxvd0R1
cGxpY2F0ZSBJZiBkdXBsaWNhdGUgb2JqZWN0cyBhcmUgYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5n
IG9iamVjdCBhcnJheQorICAgICAqIEByZXR1cm5zIGFycmF5IG9mIG1lc2hlcyB3aXRoaW4gdGhl
IGZydXN0dW0KKyAgICAgKi8KKyAgICBPY3RyZWUucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9u
IChmcnVzdHVtUGxhbmVzLCBhbGxvd0R1cGxpY2F0ZSkgeworICAgICAgICB0aGlzLl9zZWxlY3Rp
b25Db250ZW50LnJlc2V0KCk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0
aGlzLmJsb2Nrcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBibG9jayA9IHRo
aXMuYmxvY2tzW2luZGV4XTsKKyAgICAgICAgICAgIGJsb2NrLnNlbGVjdChmcnVzdHVtUGxhbmVz
LCB0aGlzLl9zZWxlY3Rpb25Db250ZW50LCBhbGxvd0R1cGxpY2F0ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGFsbG93RHVwbGljYXRlKSB7CisgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25D
b250ZW50LmNvbmNhdCh0aGlzLmR5bmFtaWNDb250ZW50KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbkNvbnRlbnQuY29uY2F0V2l0aE5vRHVw
bGljYXRlKHRoaXMuZHluYW1pY0NvbnRlbnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
aGlzLl9zZWxlY3Rpb25Db250ZW50OworICAgIH07CisgICAgLyoqCisgICAgICogVGVzdCBpZiB0
aGUgb2N0cmVlIGludGVyc2VjdCB3aXRoIHRoZSBnaXZlbiBib3VuZGluZyBzcGhlcmUgYW5kIGlm
IHllcywgdGhlbiBhZGQgaXRzIGNvbnRlbnQgdG8gdGhlIHNlbGVjdGlvbiBhcnJheQorICAgICAq
IEBwYXJhbSBzcGhlcmVDZW50ZXIgZGVmaW5lcyB0aGUgYm91bmRpbmcgc3BoZXJlIGNlbnRlcgor
ICAgICAqIEBwYXJhbSBzcGhlcmVSYWRpdXMgZGVmaW5lcyB0aGUgYm91bmRpbmcgc3BoZXJlIHJh
ZGl1cworICAgICAqIEBwYXJhbSBhbGxvd0R1cGxpY2F0ZSBkZWZpbmVzIGlmIHRoZSBzZWxlY3Rp
b24gYXJyYXkgY2FuIGNvbnRhaW5zIGR1cGxpY2F0ZWQgZW50cmllcworICAgICAqIEByZXR1cm5z
IGFuIGFycmF5IG9mIG9iamVjdHMgdGhhdCBpbnRlcnNlY3QgdGhlIHNwaGVyZQorICAgICAqLwor
ICAgIE9jdHJlZS5wcm90b3R5cGUuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChzcGhlcmVDZW50ZXIs
IHNwaGVyZVJhZGl1cywgYWxsb3dEdXBsaWNhdGUpIHsKKyAgICAgICAgdGhpcy5fc2VsZWN0aW9u
Q29udGVudC5yZXNldCgpOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhp
cy5ibG9ja3MubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgYmxvY2sgPSB0aGlz
LmJsb2Nrc1tpbmRleF07CisgICAgICAgICAgICBibG9jay5pbnRlcnNlY3RzKHNwaGVyZUNlbnRl
ciwgc3BoZXJlUmFkaXVzLCB0aGlzLl9zZWxlY3Rpb25Db250ZW50LCBhbGxvd0R1cGxpY2F0ZSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbG93RHVwbGljYXRlKSB7CisgICAgICAgICAgICB0
aGlzLl9zZWxlY3Rpb25Db250ZW50LmNvbmNhdCh0aGlzLmR5bmFtaWNDb250ZW50KTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbkNvbnRlbnQu
Y29uY2F0V2l0aE5vRHVwbGljYXRlKHRoaXMuZHluYW1pY0NvbnRlbnQpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Db250ZW50OworICAgIH07CisgICAgLyoqCisg
ICAgKiBUZXN0IGlmIHRoZSBvY3RyZWUgaW50ZXJzZWN0IHdpdGggdGhlIGdpdmVuIHJheSBhbmQg
aWYgeWVzLCB0aGVuIGFkZCBpdHMgY29udGVudCB0byByZXN1bHRpbmcgYXJyYXkKKyAgICAgKiBA
cGFyYW0gcmF5IGRlZmluZXMgdGhlIHJheSB0byB0ZXN0IHdpdGgKKyAgICAgKiBAcmV0dXJucyBh
cnJheSBvZiBpbnRlcnNlY3RlZCBvYmplY3RzCisgICAgICovCisgICAgT2N0cmVlLnByb3RvdHlw
ZS5pbnRlcnNlY3RzUmF5ID0gZnVuY3Rpb24gKHJheSkgeworICAgICAgICB0aGlzLl9zZWxlY3Rp
b25Db250ZW50LnJlc2V0KCk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0
aGlzLmJsb2Nrcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBibG9jayA9IHRo
aXMuYmxvY2tzW2luZGV4XTsKKyAgICAgICAgICAgIGJsb2NrLmludGVyc2VjdHNSYXkocmF5LCB0
aGlzLl9zZWxlY3Rpb25Db250ZW50KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zZWxlY3Rp
b25Db250ZW50LmNvbmNhdFdpdGhOb0R1cGxpY2F0ZSh0aGlzLmR5bmFtaWNDb250ZW50KTsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkNvbnRlbnQ7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGRzIGEgbWVzaCBpbnRvIHRoZSBvY3RyZWUgYmxvY2sgaWYgaXQgaW50ZXJzZWN0cyB0
aGUgYmxvY2sKKyAgICAgKi8KKyAgICBPY3RyZWUuQ3JlYXRpb25GdW5jRm9yTWVzaGVzID0gZnVu
Y3Rpb24gKGVudHJ5LCBibG9jaykgeworICAgICAgICB2YXIgYm91bmRpbmdJbmZvID0gZW50cnku
Z2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIGlmICghZW50cnkuaXNCbG9ja2VkICYmIGJvdW5k
aW5nSW5mby5ib3VuZGluZ0JveC5pbnRlcnNlY3RzTWluTWF4KGJsb2NrLm1pblBvaW50LCBibG9j
ay5tYXhQb2ludCkpIHsKKyAgICAgICAgICAgIGJsb2NrLmVudHJpZXMucHVzaChlbnRyeSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgYSBzdWJtZXNoIGludG8gdGhl
IG9jdHJlZSBibG9jayBpZiBpdCBpbnRlcnNlY3RzIHRoZSBibG9jaworICAgICAqLworICAgIE9j
dHJlZS5DcmVhdGlvbkZ1bmNGb3JTdWJNZXNoZXMgPSBmdW5jdGlvbiAoZW50cnksIGJsb2NrKSB7
CisgICAgICAgIHZhciBib3VuZGluZ0luZm8gPSBlbnRyeS5nZXRCb3VuZGluZ0luZm8oKTsKKyAg
ICAgICAgaWYgKGJvdW5kaW5nSW5mby5ib3VuZGluZ0JveC5pbnRlcnNlY3RzTWluTWF4KGJsb2Nr
Lm1pblBvaW50LCBibG9jay5tYXhQb2ludCkpIHsKKyAgICAgICAgICAgIGJsb2NrLmVudHJpZXMu
cHVzaChlbnRyeSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBPY3RyZWU7Cit9KCkp
OworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0N1bGxpbmcvT2N0cmVlcy9vY3RyZWVCbG9j
ay50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9DdWxsaW5nL09jdHJlZXMvb2N0cmVlQmxvY2sudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBP
Y3RyZWVCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPY3RyZWVC
bG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gT2N0cmVlQmxvY2s7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8g
Ii4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ3Vs
bGluZ19ib3VuZGluZ0JveF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vQ3VsbGluZy9ib3VuZGluZ0JveCAqLyAiLi9DdWxsaW5nL2Jv
dW5kaW5nQm94LnRzIik7CisKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHN0b3JlIGEgY2VsbCBp
biBhbiBvY3RyZWUKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9vcHRp
bWl6aW5nX3lvdXJfc2NlbmVfd2l0aF9vY3RyZWVzCisgKi8KK3ZhciBPY3RyZWVCbG9jayA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3
IGJsb2NrCisgICAgICogQHBhcmFtIG1pblBvaW50IGRlZmluZXMgdGhlIG1pbmltdW0gdmVjdG9y
IChpbiB3b3JsZCBzcGFjZSkgb2YgdGhlIGJsb2NrJ3MgYm91bmRpbmcgYm94CisgICAgICogQHBh
cmFtIG1heFBvaW50IGRlZmluZXMgdGhlIG1heGltdW0gdmVjdG9yIChpbiB3b3JsZCBzcGFjZSkg
b2YgdGhlIGJsb2NrJ3MgYm91bmRpbmcgYm94CisgICAgICogQHBhcmFtIGNhcGFjaXR5IGRlZmlu
ZXMgdGhlIG1heGltdW0gY2FwYWNpdHkgb2YgdGhpcyBibG9jayAoaWYgY2FwYWNpdHkgaXMgcmVh
Y2hlZCB0aGUgYmxvY2sgd2lsbCBiZSBzcGxpdCBpbnRvIHN1YiBibG9ja3MpCisgICAgICogQHBh
cmFtIGRlcHRoIGRlZmluZXMgdGhlIGN1cnJlbnQgZGVwdGggb2YgdGhpcyBibG9jayBpbiB0aGUg
b2N0cmVlCisgICAgICogQHBhcmFtIG1heERlcHRoIGRlZmluZXMgdGhlIG1heGltYWwgZGVwdGgg
YWxsb3dlZCAoYmV5b25kIHRoaXMgdmFsdWUsIHRoZSBjYXBhY2l0eSBpcyBpZ25vcmVkKQorICAg
ICAqIEBwYXJhbSBjcmVhdGlvbkZ1bmMgZGVmaW5lcyBhIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiBh
biBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBibG9jaworICAgICAqLworICAgIGZ1bmN0aW9uIE9j
dHJlZUJsb2NrKG1pblBvaW50LCBtYXhQb2ludCwgY2FwYWNpdHksIGRlcHRoLCBtYXhEZXB0aCwg
Y3JlYXRpb25GdW5jKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjb250ZW50
IG9mIHRoZSBjdXJyZW50IGJsb2NrCisgICAgICAgICAqLworICAgICAgICB0aGlzLmVudHJpZXMg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fYm91bmRpbmdWZWN0b3JzID0gbmV3IEFycmF5
KCk7CisgICAgICAgIHRoaXMuX2NhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgICAgIHRoaXMuX2Rl
cHRoID0gZGVwdGg7CisgICAgICAgIHRoaXMuX21heERlcHRoID0gbWF4RGVwdGg7CisgICAgICAg
IHRoaXMuX2NyZWF0aW9uRnVuYyA9IGNyZWF0aW9uRnVuYzsKKyAgICAgICAgdGhpcy5fbWluUG9p
bnQgPSBtaW5Qb2ludDsKKyAgICAgICAgdGhpcy5fbWF4UG9pbnQgPSBtYXhQb2ludDsKKyAgICAg
ICAgdGhpcy5fYm91bmRpbmdWZWN0b3JzLnB1c2gobWluUG9pbnQuY2xvbmUoKSk7CisgICAgICAg
IHRoaXMuX2JvdW5kaW5nVmVjdG9ycy5wdXNoKG1heFBvaW50LmNsb25lKCkpOworICAgICAgICB0
aGlzLl9ib3VuZGluZ1ZlY3RvcnMucHVzaChtaW5Qb2ludC5jbG9uZSgpKTsKKyAgICAgICAgdGhp
cy5fYm91bmRpbmdWZWN0b3JzWzJdLnggPSBtYXhQb2ludC54OworICAgICAgICB0aGlzLl9ib3Vu
ZGluZ1ZlY3RvcnMucHVzaChtaW5Qb2ludC5jbG9uZSgpKTsKKyAgICAgICAgdGhpcy5fYm91bmRp
bmdWZWN0b3JzWzNdLnkgPSBtYXhQb2ludC55OworICAgICAgICB0aGlzLl9ib3VuZGluZ1ZlY3Rv
cnMucHVzaChtaW5Qb2ludC5jbG9uZSgpKTsKKyAgICAgICAgdGhpcy5fYm91bmRpbmdWZWN0b3Jz
WzRdLnogPSBtYXhQb2ludC56OworICAgICAgICB0aGlzLl9ib3VuZGluZ1ZlY3RvcnMucHVzaCht
YXhQb2ludC5jbG9uZSgpKTsKKyAgICAgICAgdGhpcy5fYm91bmRpbmdWZWN0b3JzWzVdLnogPSBt
aW5Qb2ludC56OworICAgICAgICB0aGlzLl9ib3VuZGluZ1ZlY3RvcnMucHVzaChtYXhQb2ludC5j
bG9uZSgpKTsKKyAgICAgICAgdGhpcy5fYm91bmRpbmdWZWN0b3JzWzZdLnggPSBtaW5Qb2ludC54
OworICAgICAgICB0aGlzLl9ib3VuZGluZ1ZlY3RvcnMucHVzaChtYXhQb2ludC5jbG9uZSgpKTsK
KyAgICAgICAgdGhpcy5fYm91bmRpbmdWZWN0b3JzWzddLnkgPSBtaW5Qb2ludC55OworICAgIH0K
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2N0cmVlQmxvY2sucHJvdG90eXBlLCAiY2FwYWNp
dHkiLCB7CisgICAgICAgIC8vIFByb3BlcnR5CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSBtYXhpbXVtIGNhcGFjaXR5IG9mIHRoaXMgYmxvY2sgKGlmIGNhcGFjaXR5IGlzIHJlYWNo
ZWQgdGhlIGJsb2NrIHdpbGwgYmUgc3BsaXQgaW50byBzdWIgYmxvY2tzKQorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fw
YWNpdHk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPY3Ry
ZWVCbG9jay5wcm90b3R5cGUsICJtaW5Qb2ludCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIG1pbmltdW0gdmVjdG9yIChpbiB3b3JsZCBzcGFjZSkgb2YgdGhlIGJsb2NrJ3Mg
Ym91bmRpbmcgYm94CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9taW5Qb2ludDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KE9jdHJlZUJsb2NrLnByb3RvdHlwZSwgIm1heFBvaW50Iiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbWF4aW11bSB2ZWN0b3IgKGluIHdv
cmxkIHNwYWNlKSBvZiB0aGUgYmxvY2sncyBib3VuZGluZyBib3gKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heFBvaW50
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvLyBNZXRob2RzCisgICAgLyoqCisgICAgICogQWRk
IGEgbmV3IGVsZW1lbnQgdG8gdGhpcyBibG9jaworICAgICAqIEBwYXJhbSBlbnRyeSBkZWZpbmVz
IHRoZSBlbGVtZW50IHRvIGFkZAorICAgICAqLworICAgIE9jdHJlZUJsb2NrLnByb3RvdHlwZS5h
ZGRFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkgeworICAgICAgICBpZiAodGhpcy5ibG9ja3MpIHsK
KyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJsb2Nrcy5sZW5n
dGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgYmxvY2sgPSB0aGlzLmJsb2Nrc1tp
bmRleF07CisgICAgICAgICAgICAgICAgYmxvY2suYWRkRW50cnkoZW50cnkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NyZWF0
aW9uRnVuYyhlbnRyeSwgdGhpcyk7CisgICAgICAgIGlmICh0aGlzLmVudHJpZXMubGVuZ3RoID4g
dGhpcy5jYXBhY2l0eSAmJiB0aGlzLl9kZXB0aCA8IHRoaXMuX21heERlcHRoKSB7CisgICAgICAg
ICAgICB0aGlzLmNyZWF0ZUlubmVyQmxvY2tzKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIFJlbW92ZSBhbiBlbGVtZW50IGZyb20gdGhpcyBibG9jaworICAgICAqIEBwYXJh
bSBlbnRyeSBkZWZpbmVzIHRoZSBlbGVtZW50IHRvIHJlbW92ZQorICAgICAqLworICAgIE9jdHJl
ZUJsb2NrLnByb3RvdHlwZS5yZW1vdmVFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkgeworICAgICAg
ICBpZiAodGhpcy5ibG9ja3MpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCB0aGlzLmJsb2Nrcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
YmxvY2sgPSB0aGlzLmJsb2Nrc1tpbmRleF07CisgICAgICAgICAgICAgICAgYmxvY2sucmVtb3Zl
RW50cnkoZW50cnkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHZhciBlbnRyeUluZGV4ID0gdGhpcy5lbnRyaWVzLmluZGV4T2YoZW50cnkp
OworICAgICAgICBpZiAoZW50cnlJbmRleCA+IC0xKSB7CisgICAgICAgICAgICB0aGlzLmVudHJp
ZXMuc3BsaWNlKGVudHJ5SW5kZXgsIDEpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGQgYW4gYXJyYXkgb2YgZWxlbWVudHMgdG8gdGhpcyBibG9jaworICAgICAqIEBwYXJh
bSBlbnRyaWVzIGRlZmluZXMgdGhlIGFycmF5IG9mIGVsZW1lbnRzIHRvIGFkZAorICAgICAqLwor
ICAgIE9jdHJlZUJsb2NrLnByb3RvdHlwZS5hZGRFbnRyaWVzID0gZnVuY3Rpb24gKGVudHJpZXMp
IHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBp
bmRleCsrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IGVudHJpZXNbaW5kZXhdOworICAgICAg
ICAgICAgdGhpcy5hZGRFbnRyeShtZXNoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogVGVzdCBpZiB0aGUgY3VycmVudCBibG9jayBpbnRlcnNlY3RzIHRoZSBmdXJzdHVtIHBs
YW5lcyBhbmQgaWYgeWVzLCB0aGVuIGFkZCBpdHMgY29udGVudCB0byB0aGUgc2VsZWN0aW9uIGFy
cmF5CisgICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgZGVmaW5lcyB0aGUgZnJ1c3R1bSBwbGFu
ZXMgdG8gdGVzdAorICAgICAqIEBwYXJhbSBzZWxlY3Rpb24gZGVmaW5lcyB0aGUgYXJyYXkgdG8g
c3RvcmUgY3VycmVudCBjb250ZW50IGlmIHNlbGVjdGlvbiBpcyBwb3NpdGl2ZQorICAgICAqIEBw
YXJhbSBhbGxvd0R1cGxpY2F0ZSBkZWZpbmVzIGlmIHRoZSBzZWxlY3Rpb24gYXJyYXkgY2FuIGNv
bnRhaW5zIGR1cGxpY2F0ZWQgZW50cmllcworICAgICAqLworICAgIE9jdHJlZUJsb2NrLnByb3Rv
dHlwZS5zZWxlY3QgPSBmdW5jdGlvbiAoZnJ1c3R1bVBsYW5lcywgc2VsZWN0aW9uLCBhbGxvd0R1
cGxpY2F0ZSkgeworICAgICAgICBpZiAoX0N1bGxpbmdfYm91bmRpbmdCb3hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siQm91bmRpbmdCb3giXS5Jc0luRnJ1c3R1bSh0aGlzLl9ib3VuZGlu
Z1ZlY3RvcnMsIGZydXN0dW1QbGFuZXMpKSB7CisgICAgICAgICAgICBpZiAodGhpcy5ibG9ja3Mp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5ibG9j
a3MubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBibG9jayA9IHRo
aXMuYmxvY2tzW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suc2VsZWN0KGZydXN0
dW1QbGFuZXMsIHNlbGVjdGlvbiwgYWxsb3dEdXBsaWNhdGUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
YWxsb3dEdXBsaWNhdGUpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24uY29uY2F0KHRoaXMu
ZW50cmllcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzZWxlY3Rpb24uY29uY2F0V2l0aE5vRHVwbGljYXRlKHRoaXMuZW50cmllcyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFRlc3QgaWYgdGhl
IGN1cnJlbnQgYmxvY2sgaW50ZXJzZWN0IHdpdGggdGhlIGdpdmVuIGJvdW5kaW5nIHNwaGVyZSBh
bmQgaWYgeWVzLCB0aGVuIGFkZCBpdHMgY29udGVudCB0byB0aGUgc2VsZWN0aW9uIGFycmF5Cisg
ICAgICogQHBhcmFtIHNwaGVyZUNlbnRlciBkZWZpbmVzIHRoZSBib3VuZGluZyBzcGhlcmUgY2Vu
dGVyCisgICAgICogQHBhcmFtIHNwaGVyZVJhZGl1cyBkZWZpbmVzIHRoZSBib3VuZGluZyBzcGhl
cmUgcmFkaXVzCisgICAgICogQHBhcmFtIHNlbGVjdGlvbiBkZWZpbmVzIHRoZSBhcnJheSB0byBz
dG9yZSBjdXJyZW50IGNvbnRlbnQgaWYgc2VsZWN0aW9uIGlzIHBvc2l0aXZlCisgICAgICogQHBh
cmFtIGFsbG93RHVwbGljYXRlIGRlZmluZXMgaWYgdGhlIHNlbGVjdGlvbiBhcnJheSBjYW4gY29u
dGFpbnMgZHVwbGljYXRlZCBlbnRyaWVzCisgICAgICovCisgICAgT2N0cmVlQmxvY2sucHJvdG90
eXBlLmludGVyc2VjdHMgPSBmdW5jdGlvbiAoc3BoZXJlQ2VudGVyLCBzcGhlcmVSYWRpdXMsIHNl
bGVjdGlvbiwgYWxsb3dEdXBsaWNhdGUpIHsKKyAgICAgICAgaWYgKF9DdWxsaW5nX2JvdW5kaW5n
Qm94X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkJvdW5kaW5nQm94Il0uSW50ZXJzZWN0
c1NwaGVyZSh0aGlzLl9taW5Qb2ludCwgdGhpcy5fbWF4UG9pbnQsIHNwaGVyZUNlbnRlciwgc3Bo
ZXJlUmFkaXVzKSkgeworICAgICAgICAgICAgaWYgKHRoaXMuYmxvY2tzKSB7CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYmxvY2tzLmxlbmd0aDsgaW5k
ZXgrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2sgPSB0aGlzLmJsb2Nrc1tpbmRl
eF07CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmludGVyc2VjdHMoc3BoZXJlQ2VudGVyLCBz
cGhlcmVSYWRpdXMsIHNlbGVjdGlvbiwgYWxsb3dEdXBsaWNhdGUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoYWxsb3dEdXBsaWNhdGUpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24uY29uY2F0KHRo
aXMuZW50cmllcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzZWxlY3Rpb24uY29uY2F0V2l0aE5vRHVwbGljYXRlKHRoaXMuZW50cmllcyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFRlc3QgaWYg
dGhlIGN1cnJlbnQgYmxvY2sgaW50ZXJzZWN0IHdpdGggdGhlIGdpdmVuIHJheSBhbmQgaWYgeWVz
LCB0aGVuIGFkZCBpdHMgY29udGVudCB0byB0aGUgc2VsZWN0aW9uIGFycmF5CisgICAgICogQHBh
cmFtIHJheSBkZWZpbmVzIHRoZSByYXkgdG8gdGVzdCB3aXRoCisgICAgICogQHBhcmFtIHNlbGVj
dGlvbiBkZWZpbmVzIHRoZSBhcnJheSB0byBzdG9yZSBjdXJyZW50IGNvbnRlbnQgaWYgc2VsZWN0
aW9uIGlzIHBvc2l0aXZlCisgICAgICovCisgICAgT2N0cmVlQmxvY2sucHJvdG90eXBlLmludGVy
c2VjdHNSYXkgPSBmdW5jdGlvbiAocmF5LCBzZWxlY3Rpb24pIHsKKyAgICAgICAgaWYgKHJheS5p
bnRlcnNlY3RzQm94TWluTWF4KHRoaXMuX21pblBvaW50LCB0aGlzLl9tYXhQb2ludCkpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmJsb2NrcykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGlu
ZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJsb2Nrcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGJsb2NrID0gdGhpcy5ibG9ja3NbaW5kZXhdOworICAgICAgICAgICAg
ICAgICAgICBibG9jay5pbnRlcnNlY3RzUmF5KHJheSwgc2VsZWN0aW9uKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgc2VsZWN0aW9uLmNvbmNhdFdpdGhOb0R1cGxpY2F0ZSh0aGlzLmVudHJpZXMpOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTdWJkaXZpZGUgdGhlIGNvbnRlbnQgaW50byBj
aGlsZCBibG9ja3MgKHRoaXMgYmxvY2sgd2lsbCB0aGVuIGJlIGVtcHR5KQorICAgICAqLworICAg
IE9jdHJlZUJsb2NrLnByb3RvdHlwZS5jcmVhdGVJbm5lckJsb2NrcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgT2N0cmVlQmxvY2suX0NyZWF0ZUJsb2Nrcyh0aGlzLl9taW5Qb2ludCwgdGhpcy5f
bWF4UG9pbnQsIHRoaXMuZW50cmllcywgdGhpcy5fY2FwYWNpdHksIHRoaXMuX2RlcHRoLCB0aGlz
Ll9tYXhEZXB0aCwgdGhpcywgdGhpcy5fY3JlYXRpb25GdW5jKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBPY3RyZWVCbG9jay5fQ3JlYXRlQmxvY2tzID0g
ZnVuY3Rpb24gKHdvcmxkTWluLCB3b3JsZE1heCwgZW50cmllcywgbWF4QmxvY2tDYXBhY2l0eSwg
Y3VycmVudERlcHRoLCBtYXhEZXB0aCwgdGFyZ2V0LCBjcmVhdGlvbkZ1bmMpIHsKKyAgICAgICAg
dGFyZ2V0LmJsb2NrcyA9IG5ldyBBcnJheSgpOworICAgICAgICB2YXIgYmxvY2tTaXplID0gbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0oKHdvcmxkTWF4LnggLSB3b3JsZE1pbi54KSAvIDIsICh3b3JsZE1heC55IC0gd29ybGRNaW4u
eSkgLyAyLCAod29ybGRNYXgueiAtIHdvcmxkTWluLnopIC8gMik7CisgICAgICAgIC8vIFNlZ21l
bnRpbmcgc3BhY2UKKyAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCAyOyB4KyspIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgMjsgeSsrKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgeiA9IDA7IHogPCAyOyB6KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2Fs
TWluID0gd29ybGRNaW4uYWRkKGJsb2NrU2l6ZS5tdWx0aXBseUJ5RmxvYXRzKHgsIHksIHopKTsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2FsTWF4ID0gd29ybGRNaW4uYWRkKGJsb2NrU2l6
ZS5tdWx0aXBseUJ5RmxvYXRzKHggKyAxLCB5ICsgMSwgeiArIDEpKTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGJsb2NrID0gbmV3IE9jdHJlZUJsb2NrKGxvY2FsTWluLCBsb2NhbE1heCwgbWF4
QmxvY2tDYXBhY2l0eSwgY3VycmVudERlcHRoICsgMSwgbWF4RGVwdGgsIGNyZWF0aW9uRnVuYyk7
CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmFkZEVudHJpZXMoZW50cmllcyk7CisgICAgICAg
ICAgICAgICAgICAgIHRhcmdldC5ibG9ja3MucHVzaChibG9jayk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gT2N0cmVlQmxv
Y2s7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0N1bGxpbmcvT2N0cmVlcy9v
Y3RyZWVTY2VuZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DdWxsaW5nL09jdHJlZXMvb2N0cmVl
U2NlbmVDb21wb25lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBPY3RyZWVTY2VuZUNv
bXBvbmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPY3RyZWVTY2Vu
ZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gT2N0cmVlU2NlbmVDb21wb25lbnQ7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc2NlbmUgKi8gIi4vc2NlbmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9hYnN0cmFjdE1l
c2ggKi8gIi4vTWVzaGVzL2Fic3RyYWN0TWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9DdWxsaW5nX3JheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vQ3VsbGluZy9yYXkgKi8gIi4vQ3VsbGluZy9yYXkudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3NjZW5lQ29tcG9u
ZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X29jdHJlZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9vY3RyZWUgKi8gIi4vQ3VsbGluZy9PY3RyZWVzL29jdHJlZS50cyIpOworCisKKwor
CisKKworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lIl0ucHJvdG90
eXBlLmNyZWF0ZU9yVXBkYXRlU2VsZWN0aW9uT2N0cmVlID0gZnVuY3Rpb24gKG1heENhcGFjaXR5
LCBtYXhEZXB0aCkgeworICAgIGlmIChtYXhDYXBhY2l0eSA9PT0gdm9pZCAwKSB7IG1heENhcGFj
aXR5ID0gNjQ7IH0KKyAgICBpZiAobWF4RGVwdGggPT09IHZvaWQgMCkgeyBtYXhEZXB0aCA9IDI7
IH0KKyAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVu
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJd
Lk5BTUVfT0NUUkVFKTsKKyAgICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICBjb21wb25lbnQg
PSBuZXcgT2N0cmVlU2NlbmVDb21wb25lbnQodGhpcyk7CisgICAgICAgIHRoaXMuX2FkZENvbXBv
bmVudChjb21wb25lbnQpOworICAgIH0KKyAgICBpZiAoIXRoaXMuX3NlbGVjdGlvbk9jdHJlZSkg
eworICAgICAgICB0aGlzLl9zZWxlY3Rpb25PY3RyZWUgPSBuZXcgX29jdHJlZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJPY3RyZWUiXShfb2N0cmVlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIk9jdHJlZSJdLkNyZWF0aW9uRnVuY0Zvck1lc2hlcywgbWF4Q2FwYWNpdHksIG1h
eERlcHRoKTsKKyAgICB9CisgICAgdmFyIHdvcmxkRXh0ZW5kcyA9IHRoaXMuZ2V0V29ybGRFeHRl
bmRzKCk7CisgICAgLy8gVXBkYXRlIG9jdHJlZQorICAgIHRoaXMuX3NlbGVjdGlvbk9jdHJlZS51
cGRhdGUod29ybGRFeHRlbmRzLm1pbiwgd29ybGRFeHRlbmRzLm1heCwgdGhpcy5tZXNoZXMpOwor
ICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25PY3RyZWU7Cit9OworT2JqZWN0LmRlZmluZVByb3Bl
cnR5KF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2VuZSJdLnByb3RvdHlw
ZSwgInNlbGVjdGlvbk9jdHJlZSIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX3NlbGVjdGlvbk9jdHJlZTsKKyAgICB9LAorICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgY29uZmlndXJhYmxlOiB0cnVlCit9KTsKKy8qKgorICogVGhpcyBmdW5jdGlvbiB3
aWxsIGNyZWF0ZSBhbiBvY3RyZWUgdG8gaGVscCB0byBzZWxlY3QgdGhlIHJpZ2h0IHN1Ym1lc2hl
cyBmb3IgcmVuZGVyaW5nLCBwaWNraW5nIGFuZCBjb2xsaXNpb24gY29tcHV0YXRpb25zLgorICog
UGxlYXNlIG5vdGUgdGhhdCB5b3UgbXVzdCBoYXZlIGEgZGVjZW50IG51bWJlciBvZiBzdWJtZXNo
ZXMgdG8gZ2V0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyB3aGVuIHVzaW5nIGFuIG9jdHJlZQor
ICogQHBhcmFtIG1heENhcGFjaXR5IGRlZmluZXMgdGhlIG1heGltdW0gc2l6ZSBvZiBlYWNoIGJs
b2NrICg2NCBieSBkZWZhdWx0KQorICogQHBhcmFtIG1heERlcHRoIGRlZmluZXMgdGhlIG1heGlt
dW0gZGVwdGggdG8gdXNlIChubyBtb3JlIHRoYW4gMiBsZXZlbHMgYnkgZGVmYXVsdCkKKyAqIEBy
ZXR1cm5zIHRoZSBuZXcgb2N0cmVlCisgKiBAc2VlIGh0dHBzOi8vd3d3LmJhYnlsb25qcy1wbGF5
Z3JvdW5kLmNvbS8jTkE0T1EjMTIKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hv
d190by9vcHRpbWl6aW5nX3lvdXJfc2NlbmVfd2l0aF9vY3RyZWVzCisgKi8KK19NZXNoZXNfYWJz
dHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFic3RyYWN0TWVzaCJdLnBy
b3RvdHlwZS5jcmVhdGVPclVwZGF0ZVN1Ym1lc2hlc09jdHJlZSA9IGZ1bmN0aW9uIChtYXhDYXBh
Y2l0eSwgbWF4RGVwdGgpIHsKKyAgICBpZiAobWF4Q2FwYWNpdHkgPT09IHZvaWQgMCkgeyBtYXhD
YXBhY2l0eSA9IDY0OyB9CisgICAgaWYgKG1heERlcHRoID09PSB2b2lkIDApIHsgbWF4RGVwdGgg
PSAyOyB9CisgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgIHZhciBjb21wb25l
bnQgPSBzY2VuZS5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfT0NUUkVFKTsKKyAg
ICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICBjb21wb25lbnQgPSBuZXcgT2N0cmVlU2NlbmVD
b21wb25lbnQoc2NlbmUpOworICAgICAgICBzY2VuZS5fYWRkQ29tcG9uZW50KGNvbXBvbmVudCk7
CisgICAgfQorICAgIGlmICghdGhpcy5fc3VibWVzaGVzT2N0cmVlKSB7CisgICAgICAgIHRoaXMu
X3N1Ym1lc2hlc09jdHJlZSA9IG5ldyBfb2N0cmVlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIk9jdHJlZSJdKF9vY3RyZWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siT2N0cmVl
Il0uQ3JlYXRpb25GdW5jRm9yU3ViTWVzaGVzLCBtYXhDYXBhY2l0eSwgbWF4RGVwdGgpOworICAg
IH0KKyAgICB0aGlzLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAgICB2YXIgYm91bmRpbmdJ
bmZvID0gdGhpcy5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAvLyBVcGRhdGUgb2N0cmVlCisgICAg
dmFyIGJib3ggPSBib3VuZGluZ0luZm8uYm91bmRpbmdCb3g7CisgICAgdGhpcy5fc3VibWVzaGVz
T2N0cmVlLnVwZGF0ZShiYm94Lm1pbmltdW1Xb3JsZCwgYmJveC5tYXhpbXVtV29ybGQsIHRoaXMu
c3ViTWVzaGVzKTsKKyAgICByZXR1cm4gdGhpcy5fc3VibWVzaGVzT2N0cmVlOworfTsKKy8qKgor
ICogRGVmaW5lcyB0aGUgb2N0cmVlIHNjZW5lIGNvbXBvbmVudCByZXNwb25zaWJsZSB0byBtYW5h
Z2UgYW55IG9jdHJlZXMKKyAqIGluIGEgZ2l2ZW4gc2NlbmUuCisgKi8KK3ZhciBPY3RyZWVTY2Vu
ZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgZm9yIHRoZSBnaXZlbiBz
Y2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0byByZWdpc3RlciB0
aGUgY29tcG9uZW50IGluCisgICAgICovCisgICAgZnVuY3Rpb24gT2N0cmVlU2NlbmVDb21wb25l
bnQoc2NlbmUpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjb21wb25lbnQgbmFtZSBo
ZWxwIHRvIGlkZW50aWZ5IHRoZSBjb21wb25lbnQgaW4gdGhlIGxpc3Qgb2Ygc2NlbmUgY29tcG9u
ZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubmFtZSA9IF9zY2VuZUNvbXBvbmVudF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5B
TUVfT0NUUkVFOworICAgICAgICAvKioKKyAgICAgICAgICogSW5kaWNhdGVzIGlmIHRoZSBtZXNo
ZXMgaGF2ZSBiZWVuIGNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGlzRW5hYmxlZCgpCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmNoZWNrc0lzRW5hYmxlZCA9IHRydWU7CisgICAgICAg
IHRoaXMuX3RlbXBSYXkgPSBuZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlJheSJdKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJWZWN0b3IzIl0uWmVybygpLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXSgxLCAxLCAxKSk7CisgICAgICAgIHRoaXMuc2Nl
bmUgPSBzY2VuZTsKKyAgICAgICAgdGhpcy5zY2VuZS5nZXRBY3RpdmVNZXNoQ2FuZGlkYXRlcyA9
IHRoaXMuZ2V0QWN0aXZlTWVzaENhbmRpZGF0ZXMuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5z
Y2VuZS5nZXRBY3RpdmVTdWJNZXNoQ2FuZGlkYXRlcyA9IHRoaXMuZ2V0QWN0aXZlU3ViTWVzaENh
bmRpZGF0ZXMuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5zY2VuZS5nZXRDb2xsaWRpbmdTdWJN
ZXNoQ2FuZGlkYXRlcyA9IHRoaXMuZ2V0Q29sbGlkaW5nU3ViTWVzaENhbmRpZGF0ZXMuYmluZCh0
aGlzKTsKKyAgICAgICAgdGhpcy5zY2VuZS5nZXRJbnRlcnNlY3RpbmdTdWJNZXNoQ2FuZGlkYXRl
cyA9IHRoaXMuZ2V0SW50ZXJzZWN0aW5nU3ViTWVzaENhbmRpZGF0ZXMuYmluZCh0aGlzKTsKKyAg
ICB9CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25lbnQgaW4gYSBnaXZlbiBz
Y2VuZQorICAgICAqLworICAgIE9jdHJlZVNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWdpc3Rl
ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhp
cy5zY2VuZS5vbk1lc2hSZW1vdmVkT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKG1lc2gpIHsKKyAg
ICAgICAgICAgIHZhciBzY2VuZU9jdHJlZSA9IF90aGlzLnNjZW5lLnNlbGVjdGlvbk9jdHJlZTsK
KyAgICAgICAgICAgIGlmIChzY2VuZU9jdHJlZSAhPT0gdW5kZWZpbmVkICYmIHNjZW5lT2N0cmVl
ICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2NlbmVPY3RyZWUuZHlu
YW1pY0NvbnRlbnQuaW5kZXhPZihtZXNoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09
IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lT2N0cmVlLmR5bmFtaWNDb250ZW50LnNw
bGljZShpbmRleCwgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5zY2VuZS5vbk1lc2hJbXBvcnRlZE9ic2VydmFibGUuYWRkKGZ1
bmN0aW9uIChtZXNoKSB7CisgICAgICAgICAgICB2YXIgc2NlbmVPY3RyZWUgPSBfdGhpcy5zY2Vu
ZS5zZWxlY3Rpb25PY3RyZWU7CisgICAgICAgICAgICBpZiAoc2NlbmVPY3RyZWUgIT09IHVuZGVm
aW5lZCAmJiBzY2VuZU9jdHJlZSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNjZW5lT2N0
cmVlLmFkZE1lc2gobWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBsaXN0IG9mIGFjdGl2ZSBtZXNoZXMKKyAgICAgKiBA
cmV0dXJucyB0aGUgbGlzdCBvZiBhY3RpdmUgbWVzaGVzCisgICAgICovCisgICAgT2N0cmVlU2Nl
bmVDb21wb25lbnQucHJvdG90eXBlLmdldEFjdGl2ZU1lc2hDYW5kaWRhdGVzID0gZnVuY3Rpb24g
KCkgeworICAgICAgICBpZiAodGhpcy5zY2VuZS5fc2VsZWN0aW9uT2N0cmVlKSB7CisgICAgICAg
ICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5zY2VuZS5fc2VsZWN0aW9uT2N0cmVlLnNlbGVjdCh0
aGlzLnNjZW5lLmZydXN0dW1QbGFuZXMpOworICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5zY2VuZS5fZ2V0RGVmYXVsdE1lc2hDYW5k
aWRhdGVzKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgYWN0
aXZlIHN1YiBtZXNoZXMKKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0byBnZXQgdGhlIGNh
bmRpZGF0ZXMgc3ViIG1lc2hlcyBmcm9tCisgICAgICogQHJldHVybnMgdGhlIGxpc3Qgb2YgYWN0
aXZlIHN1YiBtZXNoZXMKKyAgICAgKi8KKyAgICBPY3RyZWVTY2VuZUNvbXBvbmVudC5wcm90b3R5
cGUuZ2V0QWN0aXZlU3ViTWVzaENhbmRpZGF0ZXMgPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAg
ICBpZiAobWVzaC5fc3VibWVzaGVzT2N0cmVlICYmIG1lc2gudXNlT2N0cmVlRm9yUmVuZGVyaW5n
U2VsZWN0aW9uKSB7CisgICAgICAgICAgICB2YXIgaW50ZXJzZWN0aW9ucyA9IG1lc2guX3N1Ym1l
c2hlc09jdHJlZS5zZWxlY3QodGhpcy5zY2VuZS5mcnVzdHVtUGxhbmVzKTsKKyAgICAgICAgICAg
IHJldHVybiBpbnRlcnNlY3Rpb25zOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLnNj
ZW5lLl9nZXREZWZhdWx0U3ViTWVzaENhbmRpZGF0ZXMobWVzaCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2Ygc3ViIG1lc2hlcyBpbnRlcnNlY3Rpbmcgd2l0aCBh
IGdpdmVuIGxvY2FsIHJheQorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIG1lc2ggdG8g
ZmluZCB0aGUgc3VibWVzaCBmb3IKKyAgICAgKiBAcGFyYW0gbG9jYWxSYXkgZGVmaW5lcyB0aGUg
cmF5IGluIGxvY2FsIHNwYWNlCisgICAgICogQHJldHVybnMgdGhlIGxpc3Qgb2YgaW50ZXJzZWN0
aW5nIHN1YiBtZXNoZXMKKyAgICAgKi8KKyAgICBPY3RyZWVTY2VuZUNvbXBvbmVudC5wcm90b3R5
cGUuZ2V0SW50ZXJzZWN0aW5nU3ViTWVzaENhbmRpZGF0ZXMgPSBmdW5jdGlvbiAobWVzaCwgbG9j
YWxSYXkpIHsKKyAgICAgICAgaWYgKG1lc2guX3N1Ym1lc2hlc09jdHJlZSAmJiBtZXNoLnVzZU9j
dHJlZUZvclBpY2tpbmcpIHsKKyAgICAgICAgICAgIF9DdWxsaW5nX3JheV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJSYXkiXS5UcmFuc2Zvcm1Ub1JlZihsb2NhbFJheSwgbWVzaC5nZXRX
b3JsZE1hdHJpeCgpLCB0aGlzLl90ZW1wUmF5KTsKKyAgICAgICAgICAgIHZhciBpbnRlcnNlY3Rp
b25zID0gbWVzaC5fc3VibWVzaGVzT2N0cmVlLmludGVyc2VjdHNSYXkodGhpcy5fdGVtcFJheSk7
CisgICAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uczsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5zY2VuZS5fZ2V0RGVmYXVsdFN1Yk1lc2hDYW5kaWRhdGVzKG1lc2gpOworICAg
IH07CisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBsaXN0IG9mIHN1YiBtZXNoZXMgY29sbGlk
aW5nIHdpdGggYSBjb2xsaWRlcgorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIG1lc2gg
dG8gZmluZCB0aGUgc3VibWVzaCBmb3IKKyAgICAgKiBAcGFyYW0gY29sbGlkZXIgZGVmaW5lcyB0
aGUgY29sbGlkZXIgdG8gZXZhbHVhdGUgdGhlIGNvbGxpc2lvbiBhZ2FpbnN0CisgICAgICogQHJl
dHVybnMgdGhlIGxpc3Qgb2YgY29sbGlkaW5nIHN1YiBtZXNoZXMKKyAgICAgKi8KKyAgICBPY3Ry
ZWVTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuZ2V0Q29sbGlkaW5nU3ViTWVzaENhbmRpZGF0ZXMg
PSBmdW5jdGlvbiAobWVzaCwgY29sbGlkZXIpIHsKKyAgICAgICAgaWYgKG1lc2guX3N1Ym1lc2hl
c09jdHJlZSAmJiBtZXNoLnVzZU9jdHJlZUZvckNvbGxpc2lvbnMpIHsKKyAgICAgICAgICAgIHZh
ciByYWRpdXMgPSBjb2xsaWRlci5fdmVsb2NpdHlXb3JsZExlbmd0aCArIE1hdGgubWF4KGNvbGxp
ZGVyLl9yYWRpdXMueCwgY29sbGlkZXIuX3JhZGl1cy55LCBjb2xsaWRlci5fcmFkaXVzLnopOwor
ICAgICAgICAgICAgdmFyIGludGVyc2VjdGlvbnMgPSBtZXNoLl9zdWJtZXNoZXNPY3RyZWUuaW50
ZXJzZWN0cyhjb2xsaWRlci5fYmFzZVBvaW50V29ybGQsIHJhZGl1cyk7CisgICAgICAgICAgICBy
ZXR1cm4gaW50ZXJzZWN0aW9uczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5zY2Vu
ZS5fZ2V0RGVmYXVsdFN1Yk1lc2hDYW5kaWRhdGVzKG1lc2gpOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmVidWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4g
Y2FzZSBvZgorICAgICAqIGNvbnRleHQgbG9zdCBmb3IgaW5zdGFuY2UuCisgICAgICovCisgICAg
T2N0cmVlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLnJlYnVpbGQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICB9OworICAgIC8qKgorICAgICAqIERp
c3Bvc2VzIHRoZSBjb21wb25lbnQgYW5kIHRoZSBhc3NvY2lhdGVkIHJlc3NvdXJjZXMuCisgICAg
ICovCisgICAgT2N0cmVlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICB9OworICAgIHJldHVy
biBPY3RyZWVTY2VuZUNvbXBvbmVudDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vQ3VsbGluZy9ib3VuZGluZ0JveC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vQ3VsbGluZy9ib3VuZGluZ0JveC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBCb3Vu
ZGluZ0JveCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb3VuZGluZ0Jv
eCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQm91bmRpbmdCb3g7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvYXJyYXlUb29scyAqLyAiLi9NaXNjL2Fy
cmF5VG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNv
bnN0YW50cyAqLyAiLi9NYXRocy9tYXRoLmNvbnN0YW50cy50cyIpOworCisKKworLyoqCisgKiBD
bGFzcyB1c2VkIHRvIHN0b3JlIGJvdW5kaW5nIGJveCBpbmZvcm1hdGlvbgorICovCit2YXIgQm91
bmRpbmdCb3ggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIG5ldyBib3VuZGluZyBib3gKKyAgICAgKiBAcGFyYW0gbWluIGRlZmluZXMgdGhl
IG1pbmltdW0gdmVjdG9yIChpbiBsb2NhbCBzcGFjZSkKKyAgICAgKiBAcGFyYW0gbWF4IGRlZmlu
ZXMgdGhlIG1heGltdW0gdmVjdG9yIChpbiBsb2NhbCBzcGFjZSkKKyAgICAgKiBAcGFyYW0gd29y
bGRNYXRyaXggZGVmaW5lcyB0aGUgbmV3IHdvcmxkIG1hdHJpeAorICAgICAqLworICAgIGZ1bmN0
aW9uIEJvdW5kaW5nQm94KG1pbiwgbWF4LCB3b3JsZE1hdHJpeCkgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgOCB2ZWN0b3JzIHJlcHJlc2VudGluZyB0aGUgYm91bmRpbmcgYm94
IGluIGxvY2FsIHNwYWNlCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZlY3RvcnMgPSBfTWlz
Y19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFycmF5VG9vbHMiXS5C
dWlsZEFycmF5KDgsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJWZWN0b3IzIl0uWmVybyk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBj
ZW50ZXIgb2YgdGhlIGJvdW5kaW5nIGJveCBpbiBsb2NhbCBzcGFjZQorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5jZW50ZXIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIGNlbnRlciBvZiB0aGUgYm91bmRpbmcgYm94IGluIHdvcmxkIHNwYWNlCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmNlbnRlcldvcmxkID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHRoZSBleHRlbmQgc2l6ZSBpbiBsb2NhbCBzcGFjZQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5leHRlbmRTaXplID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSBleHRlbmQgc2l6ZSBpbiB3b3JsZCBzcGFjZQorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5leHRlbmRTaXplV29ybGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIE9CQiAob2JqZWN0IGJvdW5kaW5nIGJveCkgZGlyZWN0aW9ucwor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaXJlY3Rpb25zID0gX01pc2NfYXJyYXlUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBcnJheVRvb2xzIl0uQnVpbGRBcnJheSgzLCBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJd
Llplcm8pOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgOCB2ZWN0b3JzIHJlcHJl
c2VudGluZyB0aGUgYm91bmRpbmcgYm94IGluIHdvcmxkIHNwYWNlCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLnZlY3RvcnNXb3JsZCA9IF9NaXNjX2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siQXJyYXlUb29scyJdLkJ1aWxkQXJyYXkoOCwgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG1pbmltdW0gdmVjdG9yIGluIHdvcmxkIHNwYWNl
CisgICAgICAgICAqLworICAgICAgICB0aGlzLm1pbmltdW1Xb3JsZCA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybygpOworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbWF4aW11bSB2ZWN0b3IgaW4gd29ybGQgc3Bh
Y2UKKyAgICAgICAgICovCisgICAgICAgIHRoaXMubWF4aW11bVdvcmxkID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBtaW5pbXVtIHZlY3RvciBpbiBsb2NhbCBz
cGFjZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5taW5pbXVtID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIHZlY3RvciBpbiBsb2NhbCBzcGFj
ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tYXhpbXVtID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAg
IHRoaXMucmVDb25zdHJ1Y3QobWluLCBtYXgsIHdvcmxkTWF0cml4KTsKKyAgICB9CisgICAgLy8g
TWV0aG9kcworICAgIC8qKgorICAgICAqIFJlY3JlYXRlcyB0aGUgZW50aXJlIGJvdW5kaW5nIGJv
eCBmcm9tIHNjcmF0Y2ggYXMgaWYgd2UgY2FsbCB0aGUgY29uc3RydWN0b3IgaW4gcGxhY2UKKyAg
ICAgKiBAcGFyYW0gbWluIGRlZmluZXMgdGhlIG5ldyBtaW5pbXVtIHZlY3RvciAoaW4gbG9jYWwg
c3BhY2UpCisgICAgICogQHBhcmFtIG1heCBkZWZpbmVzIHRoZSBuZXcgbWF4aW11bSB2ZWN0b3Ig
KGluIGxvY2FsIHNwYWNlKQorICAgICAqIEBwYXJhbSB3b3JsZE1hdHJpeCBkZWZpbmVzIHRoZSBu
ZXcgd29ybGQgbWF0cml4CisgICAgICovCisgICAgQm91bmRpbmdCb3gucHJvdG90eXBlLnJlQ29u
c3RydWN0ID0gZnVuY3Rpb24gKG1pbiwgbWF4LCB3b3JsZE1hdHJpeCkgeworICAgICAgICB2YXIg
bWluWCA9IG1pbi54LCBtaW5ZID0gbWluLnksIG1pblogPSBtaW4ueiwgbWF4WCA9IG1heC54LCBt
YXhZID0gbWF4LnksIG1heFogPSBtYXguejsKKyAgICAgICAgdmFyIHZlY3RvcnMgPSB0aGlzLnZl
Y3RvcnM7CisgICAgICAgIHRoaXMubWluaW11bS5jb3B5RnJvbUZsb2F0cyhtaW5YLCBtaW5ZLCBt
aW5aKTsKKyAgICAgICAgdGhpcy5tYXhpbXVtLmNvcHlGcm9tRmxvYXRzKG1heFgsIG1heFksIG1h
eFopOworICAgICAgICB2ZWN0b3JzWzBdLmNvcHlGcm9tRmxvYXRzKG1pblgsIG1pblksIG1pblop
OworICAgICAgICB2ZWN0b3JzWzFdLmNvcHlGcm9tRmxvYXRzKG1heFgsIG1heFksIG1heFopOwor
ICAgICAgICB2ZWN0b3JzWzJdLmNvcHlGcm9tRmxvYXRzKG1heFgsIG1pblksIG1pblopOworICAg
ICAgICB2ZWN0b3JzWzNdLmNvcHlGcm9tRmxvYXRzKG1pblgsIG1heFksIG1pblopOworICAgICAg
ICB2ZWN0b3JzWzRdLmNvcHlGcm9tRmxvYXRzKG1pblgsIG1pblksIG1heFopOworICAgICAgICB2
ZWN0b3JzWzVdLmNvcHlGcm9tRmxvYXRzKG1heFgsIG1heFksIG1pblopOworICAgICAgICB2ZWN0
b3JzWzZdLmNvcHlGcm9tRmxvYXRzKG1pblgsIG1heFksIG1heFopOworICAgICAgICB2ZWN0b3Jz
WzddLmNvcHlGcm9tRmxvYXRzKG1heFgsIG1pblksIG1heFopOworICAgICAgICAvLyBPQkIKKyAg
ICAgICAgbWF4LmFkZFRvUmVmKG1pbiwgdGhpcy5jZW50ZXIpLnNjYWxlSW5QbGFjZSgwLjUpOwor
ICAgICAgICBtYXguc3VidHJhY3RUb1JlZihtaW4sIHRoaXMuZXh0ZW5kU2l6ZSkuc2NhbGVJblBs
YWNlKDAuNSk7CisgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4ID0gd29ybGRNYXRyaXggfHwgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLklk
ZW50aXR5UmVhZE9ubHk7CisgICAgICAgIHRoaXMuX3VwZGF0ZSh0aGlzLl93b3JsZE1hdHJpeCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0aGUgY3VycmVudCBib3VuZGluZyBib3gg
YnkgYXBwbHlpbmcgYSBzY2FsZSBmYWN0b3IKKyAgICAgKiBAcGFyYW0gZmFjdG9yIGRlZmluZXMg
dGhlIHNjYWxlIGZhY3RvciB0byBhcHBseQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IGJv
dW5kaW5nIGJveAorICAgICAqLworICAgIEJvdW5kaW5nQm94LnByb3RvdHlwZS5zY2FsZSA9IGZ1
bmN0aW9uIChmYWN0b3IpIHsKKyAgICAgICAgdmFyIHRtcFZlY3RvcnMgPSBCb3VuZGluZ0JveC5U
bXBWZWN0b3IzOworICAgICAgICB2YXIgZGlmZiA9IHRoaXMubWF4aW11bS5zdWJ0cmFjdFRvUmVm
KHRoaXMubWluaW11bSwgdG1wVmVjdG9yc1swXSk7CisgICAgICAgIHZhciBsZW4gPSBkaWZmLmxl
bmd0aCgpOworICAgICAgICBkaWZmLm5vcm1hbGl6ZUZyb21MZW5ndGgobGVuKTsKKyAgICAgICAg
dmFyIGRpc3RhbmNlID0gbGVuICogZmFjdG9yOworICAgICAgICB2YXIgbmV3UmFkaXVzID0gZGlm
Zi5zY2FsZUluUGxhY2UoZGlzdGFuY2UgKiAwLjUpOworICAgICAgICB2YXIgbWluID0gdGhpcy5j
ZW50ZXIuc3VidHJhY3RUb1JlZihuZXdSYWRpdXMsIHRtcFZlY3RvcnNbMV0pOworICAgICAgICB2
YXIgbWF4ID0gdGhpcy5jZW50ZXIuYWRkVG9SZWYobmV3UmFkaXVzLCB0bXBWZWN0b3JzWzJdKTsK
KyAgICAgICAgdGhpcy5yZUNvbnN0cnVjdChtaW4sIG1heCwgdGhpcy5fd29ybGRNYXRyaXgpOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHdv
cmxkIG1hdHJpeCBvZiB0aGUgYm91bmRpbmcgYm94CisgICAgICogQHJldHVybnMgYSBtYXRyaXgK
KyAgICAgKi8KKyAgICBCb3VuZGluZ0JveC5wcm90b3R5cGUuZ2V0V29ybGRNYXRyaXggPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl93b3JsZE1hdHJpeDsKKyAgICB9OworICAg
IC8qKiBAaGlkZGVuICovCisgICAgQm91bmRpbmdCb3gucHJvdG90eXBlLl91cGRhdGUgPSBmdW5j
dGlvbiAod29ybGQpIHsKKyAgICAgICAgdmFyIG1pbldvcmxkID0gdGhpcy5taW5pbXVtV29ybGQ7
CisgICAgICAgIHZhciBtYXhXb3JsZCA9IHRoaXMubWF4aW11bVdvcmxkOworICAgICAgICB2YXIg
ZGlyZWN0aW9ucyA9IHRoaXMuZGlyZWN0aW9uczsKKyAgICAgICAgdmFyIHZlY3RvcnNXb3JsZCA9
IHRoaXMudmVjdG9yc1dvcmxkOworICAgICAgICB2YXIgdmVjdG9ycyA9IHRoaXMudmVjdG9yczsK
KyAgICAgICAgaWYgKCF3b3JsZC5pc0lkZW50aXR5KCkpIHsKKyAgICAgICAgICAgIG1pbldvcmxk
LnNldEFsbChOdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICAgICAgICAgIG1heFdvcmxkLnNldEFsbCgt
TnVtYmVyLk1BWF9WQUxVRSk7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4
IDwgODsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIHZhciB2ID0gdmVjdG9yc1dvcmxkW2lu
ZGV4XTsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYodmVjdG9y
c1tpbmRleF0sIHdvcmxkLCB2KTsKKyAgICAgICAgICAgICAgICBtaW5Xb3JsZC5taW5pbWl6ZUlu
UGxhY2Uodik7CisgICAgICAgICAgICAgICAgbWF4V29ybGQubWF4aW1pemVJblBsYWNlKHYpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRXh0ZW5kCisgICAgICAgICAgICBtYXhXb3Js
ZC5zdWJ0cmFjdFRvUmVmKG1pbldvcmxkLCB0aGlzLmV4dGVuZFNpemVXb3JsZCkuc2NhbGVJblBs
YWNlKDAuNSk7CisgICAgICAgICAgICBtYXhXb3JsZC5hZGRUb1JlZihtaW5Xb3JsZCwgdGhpcy5j
ZW50ZXJXb3JsZCkuc2NhbGVJblBsYWNlKDAuNSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBtaW5Xb3JsZC5jb3B5RnJvbSh0aGlzLm1pbmltdW0pOworICAgICAgICAg
ICAgbWF4V29ybGQuY29weUZyb20odGhpcy5tYXhpbXVtKTsKKyAgICAgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCA4OyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgdmVjdG9y
c1dvcmxkW2luZGV4XS5jb3B5RnJvbSh2ZWN0b3JzW2luZGV4XSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBFeHRlbmQKKyAgICAgICAgICAgIHRoaXMuZXh0ZW5kU2l6ZVdvcmxkLmNv
cHlGcm9tKHRoaXMuZXh0ZW5kU2l6ZSk7CisgICAgICAgICAgICB0aGlzLmNlbnRlcldvcmxkLmNv
cHlGcm9tKHRoaXMuY2VudGVyKTsKKyAgICAgICAgfQorICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVm
KHdvcmxkLm0sIDAsIGRpcmVjdGlvbnNbMF0pOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKHdv
cmxkLm0sIDQsIGRpcmVjdGlvbnNbMV0pOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKHdvcmxk
Lm0sIDgsIGRpcmVjdGlvbnNbMl0pOworICAgICAgICB0aGlzLl93b3JsZE1hdHJpeCA9IHdvcmxk
OworICAgIH07CisgICAgLyoqCisgICAgICogVGVzdHMgaWYgdGhlIGJvdW5kaW5nIGJveCBpcyBp
bnRlcnNlY3RpbmcgdGhlIGZydXN0dW0gcGxhbmVzCisgICAgICogQHBhcmFtIGZydXN0dW1QbGFu
ZXMgZGVmaW5lcyB0aGUgZnJ1c3R1bSBwbGFuZXMgdG8gdGVzdAorICAgICAqIEByZXR1cm5zIHRy
dWUgaWYgdGhlcmUgaXMgYW4gaW50ZXJzZWN0aW9uCisgICAgICovCisgICAgQm91bmRpbmdCb3gu
cHJvdG90eXBlLmlzSW5GcnVzdHVtID0gZnVuY3Rpb24gKGZydXN0dW1QbGFuZXMpIHsKKyAgICAg
ICAgcmV0dXJuIEJvdW5kaW5nQm94LklzSW5GcnVzdHVtKHRoaXMudmVjdG9yc1dvcmxkLCBmcnVz
dHVtUGxhbmVzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRlc3RzIGlmIHRoZSBib3VuZGlu
ZyBib3ggaXMgZW50aXJlbHkgaW5zaWRlIHRoZSBmcnVzdHVtIHBsYW5lcworICAgICAqIEBwYXJh
bSBmcnVzdHVtUGxhbmVzIGRlZmluZXMgdGhlIGZydXN0dW0gcGxhbmVzIHRvIHRlc3QKKyAgICAg
KiBAcmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGluY2x1c2lvbgorICAgICAqLworICAgIEJv
dW5kaW5nQm94LnByb3RvdHlwZS5pc0NvbXBsZXRlbHlJbkZydXN0dW0gPSBmdW5jdGlvbiAoZnJ1
c3R1bVBsYW5lcykgeworICAgICAgICByZXR1cm4gQm91bmRpbmdCb3guSXNDb21wbGV0ZWx5SW5G
cnVzdHVtKHRoaXMudmVjdG9yc1dvcmxkLCBmcnVzdHVtUGxhbmVzKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoZSBib3VuZGluZyBib3gKKyAg
ICAgKiBAcGFyYW0gcG9pbnQgZGVmaW5lcyB0aGUgcG9pbnQgdG8gdGVzdAorICAgICAqIEByZXR1
cm5zIHRydWUgaWYgdGhlIHBvaW50IGlzIGluc2lkZSB0aGUgYm91bmRpbmcgYm94CisgICAgICov
CisgICAgQm91bmRpbmdCb3gucHJvdG90eXBlLmludGVyc2VjdHNQb2ludCA9IGZ1bmN0aW9uIChw
b2ludCkgeworICAgICAgICB2YXIgbWluID0gdGhpcy5taW5pbXVtV29ybGQ7CisgICAgICAgIHZh
ciBtYXggPSB0aGlzLm1heGltdW1Xb3JsZDsKKyAgICAgICAgdmFyIG1pblggPSBtaW4ueCwgbWlu
WSA9IG1pbi55LCBtaW5aID0gbWluLnosIG1heFggPSBtYXgueCwgbWF4WSA9IG1heC55LCBtYXha
ID0gbWF4Lno7CisgICAgICAgIHZhciBwb2ludFggPSBwb2ludC54LCBwb2ludFkgPSBwb2ludC55
LCBwb2ludFogPSBwb2ludC56OworICAgICAgICB2YXIgZGVsdGEgPSAtX01hdGhzX21hdGhfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkVwc2lsb24iXTsKKyAgICAgICAg
aWYgKG1heFggLSBwb2ludFggPCBkZWx0YSB8fCBkZWx0YSA+IHBvaW50WCAtIG1pblgpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF4WSAtIHBv
aW50WSA8IGRlbHRhIHx8IGRlbHRhID4gcG9pbnRZIC0gbWluWSkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChtYXhaIC0gcG9pbnRaIDwgZGVsdGEg
fHwgZGVsdGEgPiBwb2ludFogLSBtaW5aKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBU
ZXN0cyBpZiB0aGUgYm91bmRpbmcgYm94IGludGVyc2VjdHMgd2l0aCBhIGJvdW5kaW5nIHNwaGVy
ZQorICAgICAqIEBwYXJhbSBzcGhlcmUgZGVmaW5lcyB0aGUgc3BoZXJlIHRvIHRlc3QKKyAgICAg
KiBAcmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGludGVyc2VjdGlvbgorICAgICAqLworICAg
IEJvdW5kaW5nQm94LnByb3RvdHlwZS5pbnRlcnNlY3RzU3BoZXJlID0gZnVuY3Rpb24gKHNwaGVy
ZSkgeworICAgICAgICByZXR1cm4gQm91bmRpbmdCb3guSW50ZXJzZWN0c1NwaGVyZSh0aGlzLm1p
bmltdW1Xb3JsZCwgdGhpcy5tYXhpbXVtV29ybGQsIHNwaGVyZS5jZW50ZXJXb3JsZCwgc3BoZXJl
LnJhZGl1c1dvcmxkKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRlc3RzIGlmIHRoZSBib3Vu
ZGluZyBib3ggaW50ZXJzZWN0cyB3aXRoIGEgYm94IGRlZmluZWQgYnkgYSBtaW4gYW5kIG1heCB2
ZWN0b3JzCisgICAgICogQHBhcmFtIG1pbiBkZWZpbmVzIHRoZSBtaW4gdmVjdG9yIHRvIHVzZQor
ICAgICAqIEBwYXJhbSBtYXggZGVmaW5lcyB0aGUgbWF4IHZlY3RvciB0byB1c2UKKyAgICAgKiBA
cmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGludGVyc2VjdGlvbgorICAgICAqLworICAgIEJv
dW5kaW5nQm94LnByb3RvdHlwZS5pbnRlcnNlY3RzTWluTWF4ID0gZnVuY3Rpb24gKG1pbiwgbWF4
KSB7CisgICAgICAgIHZhciBteU1pbiA9IHRoaXMubWluaW11bVdvcmxkOworICAgICAgICB2YXIg
bXlNYXggPSB0aGlzLm1heGltdW1Xb3JsZDsKKyAgICAgICAgdmFyIG15TWluWCA9IG15TWluLngs
IG15TWluWSA9IG15TWluLnksIG15TWluWiA9IG15TWluLnosIG15TWF4WCA9IG15TWF4LngsIG15
TWF4WSA9IG15TWF4LnksIG15TWF4WiA9IG15TWF4Lno7CisgICAgICAgIHZhciBtaW5YID0gbWlu
LngsIG1pblkgPSBtaW4ueSwgbWluWiA9IG1pbi56LCBtYXhYID0gbWF4LngsIG1heFkgPSBtYXgu
eSwgbWF4WiA9IG1heC56OworICAgICAgICBpZiAobXlNYXhYIDwgbWluWCB8fCBteU1pblggPiBt
YXhYKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG15TWF4WSA8IG1pblkgfHwgbXlNaW5ZID4gbWF4WSkgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGlmIChteU1heFogPCBtaW5aIHx8IG15TWluWiA+IG1h
eFopIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAgICAgKiBUZXN0cyBp
ZiB0d28gYm91bmRpbmcgYm94ZXMgYXJlIGludGVyc2VjdGlvbnMKKyAgICAgKiBAcGFyYW0gYm94
MCBkZWZpbmVzIHRoZSBmaXJzdCBib3ggdG8gdGVzdAorICAgICAqIEBwYXJhbSBib3gxIGRlZmlu
ZXMgdGhlIHNlY29uZCBib3ggdG8gdGVzdAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlcmUg
aXMgYW4gaW50ZXJzZWN0aW9uCisgICAgICovCisgICAgQm91bmRpbmdCb3guSW50ZXJzZWN0cyA9
IGZ1bmN0aW9uIChib3gwLCBib3gxKSB7CisgICAgICAgIHJldHVybiBib3gwLmludGVyc2VjdHNN
aW5NYXgoYm94MS5taW5pbXVtV29ybGQsIGJveDEubWF4aW11bVdvcmxkKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFRlc3RzIGlmIGEgYm91bmRpbmcgYm94IGRlZmluZXMgYnkgYSBtaW4vbWF4
IHZlY3RvcnMgaW50ZXJzZWN0cyBhIHNwaGVyZQorICAgICAqIEBwYXJhbSBtaW5Qb2ludCBkZWZp
bmVzIHRoZSBtaW5pbXVtIHZlY3RvciBvZiB0aGUgYm91bmRpbmcgYm94CisgICAgICogQHBhcmFt
IG1heFBvaW50IGRlZmluZXMgdGhlIG1heGltdW0gdmVjdG9yIG9mIHRoZSBib3VuZGluZyBib3gK
KyAgICAgKiBAcGFyYW0gc3BoZXJlQ2VudGVyIGRlZmluZXMgdGhlIHNwaGVyZSBjZW50ZXIKKyAg
ICAgKiBAcGFyYW0gc3BoZXJlUmFkaXVzIGRlZmluZXMgdGhlIHNwaGVyZSByYWRpdXMKKyAgICAg
KiBAcmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGludGVyc2VjdGlvbgorICAgICAqLworICAg
IEJvdW5kaW5nQm94LkludGVyc2VjdHNTcGhlcmUgPSBmdW5jdGlvbiAobWluUG9pbnQsIG1heFBv
aW50LCBzcGhlcmVDZW50ZXIsIHNwaGVyZVJhZGl1cykgeworICAgICAgICB2YXIgdmVjdG9yID0g
Qm91bmRpbmdCb3guVG1wVmVjdG9yM1swXTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5DbGFtcFRvUmVmKHNwaGVyZUNl
bnRlciwgbWluUG9pbnQsIG1heFBvaW50LCB2ZWN0b3IpOworICAgICAgICB2YXIgbnVtID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5E
aXN0YW5jZVNxdWFyZWQoc3BoZXJlQ2VudGVyLCB2ZWN0b3IpOworICAgICAgICByZXR1cm4gKG51
bSA8PSAoc3BoZXJlUmFkaXVzICogc3BoZXJlUmFkaXVzKSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBUZXN0cyBpZiBhIGJvdW5kaW5nIGJveCBkZWZpbmVkIHdpdGggOCB2ZWN0b3JzIGlzIGVu
dGlyZWx5IGluc2lkZSBmcnVzdHVtIHBsYW5lcworICAgICAqIEBwYXJhbSBib3VuZGluZ1ZlY3Rv
cnMgZGVmaW5lcyBhbiBhcnJheSBvZiA4IHZlY3RvcnMgcmVwcmVzZW50aW5nIGEgYm91bmRpbmcg
Ym94CisgICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgZGVmaW5lcyB0aGUgZnJ1c3R1bSBwbGFu
ZXMgdG8gdGVzdAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBpbmNsdXNpb24K
KyAgICAgKi8KKyAgICBCb3VuZGluZ0JveC5Jc0NvbXBsZXRlbHlJbkZydXN0dW0gPSBmdW5jdGlv
biAoYm91bmRpbmdWZWN0b3JzLCBmcnVzdHVtUGxhbmVzKSB7CisgICAgICAgIGZvciAodmFyIHAg
PSAwOyBwIDwgNjsgKytwKSB7CisgICAgICAgICAgICB2YXIgZnJ1c3R1bVBsYW5lID0gZnJ1c3R1
bVBsYW5lc1twXTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGZydXN0dW1QbGFuZS5kb3RDb29yZGluYXRlKGJvdW5kaW5nVmVj
dG9yc1tpXSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUZXN0cyBpZiBhIGJvdW5kaW5nIGJveCBkZWZp
bmVkIHdpdGggOCB2ZWN0b3JzIGludGVyc2VjdHMgZnJ1c3R1bSBwbGFuZXMKKyAgICAgKiBAcGFy
YW0gYm91bmRpbmdWZWN0b3JzIGRlZmluZXMgYW4gYXJyYXkgb2YgOCB2ZWN0b3JzIHJlcHJlc2Vu
dGluZyBhIGJvdW5kaW5nIGJveAorICAgICAqIEBwYXJhbSBmcnVzdHVtUGxhbmVzIGRlZmluZXMg
dGhlIGZydXN0dW0gcGxhbmVzIHRvIHRlc3QKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlcmUg
aXMgYW4gaW50ZXJzZWN0aW9uCisgICAgICovCisgICAgQm91bmRpbmdCb3guSXNJbkZydXN0dW0g
PSBmdW5jdGlvbiAoYm91bmRpbmdWZWN0b3JzLCBmcnVzdHVtUGxhbmVzKSB7CisgICAgICAgIGZv
ciAodmFyIHAgPSAwOyBwIDwgNjsgKytwKSB7CisgICAgICAgICAgICB2YXIgY2FuUmV0dXJuRmFs
c2UgPSB0cnVlOworICAgICAgICAgICAgdmFyIGZydXN0dW1QbGFuZSA9IGZydXN0dW1QbGFuZXNb
cF07CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7ICsraSkgeworICAgICAgICAg
ICAgICAgIGlmIChmcnVzdHVtUGxhbmUuZG90Q29vcmRpbmF0ZShib3VuZGluZ1ZlY3RvcnNbaV0p
ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY2FuUmV0dXJuRmFsc2UgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGNhblJldHVybkZhbHNlKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH07CisgICAgQm91bmRpbmdCb3guVG1wVmVjdG9yMyA9IF9NaXNjX2FycmF5VG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJyYXlUb29scyJdLkJ1aWxkQXJyYXkoMywg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMi
XS5aZXJvKTsKKyAgICByZXR1cm4gQm91bmRpbmdCb3g7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL0N1bGxpbmcvYm91bmRpbmdJbmZvLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vQ3VsbGluZy9ib3VuZGluZ0luZm8udHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IEJvdW5kaW5nSW5mbyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJCb3VuZGluZ0luZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJvdW5kaW5nSW5mbzsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfYXJyYXlUb29sc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9hcnJheVRv
b2xzICovICIuL01pc2MvYXJyYXlUb29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52
ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2JvdW5kaW5nQm94X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2JvdW5kaW5nQm94ICovICIuL0N1bGxpbmcv
Ym91bmRpbmdCb3gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm91bmRpbmdTcGhl
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vYm91bmRpbmdTcGhlcmUgKi8gIi4vQ3VsbGluZy9ib3VuZGluZ1NwaGVyZS50cyIpOworCisK
KworCisKK3ZhciBfcmVzdWx0MCA9IHsgbWluOiAwLCBtYXg6IDAgfTsKK3ZhciBfcmVzdWx0MSA9
IHsgbWluOiAwLCBtYXg6IDAgfTsKK3ZhciBjb21wdXRlQm94RXh0ZW50cyA9IGZ1bmN0aW9uIChh
eGlzLCBib3gsIHJlc3VsdCkgeworICAgIHZhciBwID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Eb3QoYm94LmNlbnRlcldvcmxkLCBh
eGlzKTsKKyAgICB2YXIgcjAgPSBNYXRoLmFicyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRvdChib3guZGlyZWN0aW9uc1swXSwgYXhp
cykpICogYm94LmV4dGVuZFNpemUueDsKKyAgICB2YXIgcjEgPSBNYXRoLmFicyhfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRvdChib3gu
ZGlyZWN0aW9uc1sxXSwgYXhpcykpICogYm94LmV4dGVuZFNpemUueTsKKyAgICB2YXIgcjIgPSBN
YXRoLmFicyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVjdG9yMyJdLkRvdChib3guZGlyZWN0aW9uc1syXSwgYXhpcykpICogYm94LmV4dGVuZFNpemUu
ejsKKyAgICB2YXIgciA9IHIwICsgcjEgKyByMjsKKyAgICByZXN1bHQubWluID0gcCAtIHI7Cisg
ICAgcmVzdWx0Lm1heCA9IHAgKyByOworfTsKK3ZhciBheGlzT3ZlcmxhcCA9IGZ1bmN0aW9uIChh
eGlzLCBib3gwLCBib3gxKSB7CisgICAgY29tcHV0ZUJveEV4dGVudHMoYXhpcywgYm94MCwgX3Jl
c3VsdDApOworICAgIGNvbXB1dGVCb3hFeHRlbnRzKGF4aXMsIGJveDEsIF9yZXN1bHQxKTsKKyAg
ICByZXR1cm4gIShfcmVzdWx0MC5taW4gPiBfcmVzdWx0MS5tYXggfHwgX3Jlc3VsdDEubWluID4g
X3Jlc3VsdDAubWF4KTsKK307CisvKioKKyAqIEluZm8gZm9yIGEgYm91bmRpbmcgZGF0YSBvZiBh
IG1lc2gKKyAqLwordmFyIEJvdW5kaW5nSW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgp
IHsKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGJvdW5kaW5nIGluZm8KKyAgICAgKiBAcGFy
YW0gbWluaW11bSBtaW4gdmVjdG9yIG9mIHRoZSBib3VuZGluZyBib3gvc3BoZXJlCisgICAgICog
QHBhcmFtIG1heGltdW0gbWF4IHZlY3RvciBvZiB0aGUgYm91bmRpbmcgYm94L3NwaGVyZQorICAg
ICAqIEBwYXJhbSB3b3JsZE1hdHJpeCBkZWZpbmVzIHRoZSBuZXcgd29ybGQgbWF0cml4CisgICAg
ICovCisgICAgZnVuY3Rpb24gQm91bmRpbmdJbmZvKG1pbmltdW0sIG1heGltdW0sIHdvcmxkTWF0
cml4KSB7CisgICAgICAgIHRoaXMuX2lzTG9ja2VkID0gZmFsc2U7CisgICAgICAgIHRoaXMuYm91
bmRpbmdCb3ggPSBuZXcgX2JvdW5kaW5nQm94X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkJvdW5kaW5nQm94Il0obWluaW11bSwgbWF4aW11bSwgd29ybGRNYXRyaXgpOworICAgICAgICB0
aGlzLmJvdW5kaW5nU3BoZXJlID0gbmV3IF9ib3VuZGluZ1NwaGVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJCb3VuZGluZ1NwaGVyZSJdKG1pbmltdW0sIG1heGltdW0sIHdvcmxkTWF0
cml4KTsKKyAgICB9CisgICAgLyoqCisgICAgICogUmVjcmVhdGVzIHRoZSBlbnRpcmUgYm91bmRp
bmcgaW5mbyBmcm9tIHNjcmF0Y2ggYXMgaWYgd2UgY2FsbCB0aGUgY29uc3RydWN0b3IgaW4gcGxh
Y2UKKyAgICAgKiBAcGFyYW0gbWluIGRlZmluZXMgdGhlIG5ldyBtaW5pbXVtIHZlY3RvciAoaW4g
bG9jYWwgc3BhY2UpCisgICAgICogQHBhcmFtIG1heCBkZWZpbmVzIHRoZSBuZXcgbWF4aW11bSB2
ZWN0b3IgKGluIGxvY2FsIHNwYWNlKQorICAgICAqIEBwYXJhbSB3b3JsZE1hdHJpeCBkZWZpbmVz
IHRoZSBuZXcgd29ybGQgbWF0cml4CisgICAgICovCisgICAgQm91bmRpbmdJbmZvLnByb3RvdHlw
ZS5yZUNvbnN0cnVjdCA9IGZ1bmN0aW9uIChtaW4sIG1heCwgd29ybGRNYXRyaXgpIHsKKyAgICAg
ICAgdGhpcy5ib3VuZGluZ0JveC5yZUNvbnN0cnVjdChtaW4sIG1heCwgd29ybGRNYXRyaXgpOwor
ICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlLnJlQ29uc3RydWN0KG1pbiwgbWF4LCB3b3JsZE1h
dHJpeCk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm91bmRpbmdJbmZvLnBy
b3RvdHlwZSwgIm1pbmltdW0iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBtaW4gdmVjdG9y
IG9mIHRoZSBib3VuZGluZyBib3gvc3BoZXJlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmJvdW5kaW5nQm94Lm1pbmltdW07
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCb3VuZGluZ0lu
Zm8ucHJvdG90eXBlLCAibWF4aW11bSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIG1heCB2
ZWN0b3Igb2YgdGhlIGJvdW5kaW5nIGJveC9zcGhlcmUKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm91bmRpbmdCb3gubWF4
aW11bTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJvdW5k
aW5nSW5mby5wcm90b3R5cGUsICJpc0xvY2tlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IElmIHRoZSBpbmZvIGlzIGxvY2tlZCBhbmQgd29uJ3QgYmUgdXBkYXRlZCB0byBhdm9pZCBwZXJm
IG92ZXJoZWFkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2tlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2lzTG9ja2VkID0gdmFsdWU7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIC8vIE1ldGhvZHMKKyAgICAvKioKKyAgICAgKiBVcGRhdGVz
IHRoZSBib3VuZGluZyBzcGhlcmUgYW5kIGJveAorICAgICAqIEBwYXJhbSB3b3JsZCB3b3JsZCBt
YXRyaXggdG8gYmUgdXNlZCB0byB1cGRhdGUKKyAgICAgKi8KKyAgICBCb3VuZGluZ0luZm8ucHJv
dG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICh3b3JsZCkgeworICAgICAgICBpZiAodGhpcy5faXNM
b2NrZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmJv
dW5kaW5nQm94Ll91cGRhdGUod29ybGQpOworICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlLl91
cGRhdGUod29ybGQpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVjcmVhdGUgdGhlIGJvdW5k
aW5nIGluZm8gdG8gYmUgY2VudGVyZWQgYXJvdW5kIGEgc3BlY2lmaWMgcG9pbnQgZ2l2ZW4gYSBz
cGVjaWZpYyBleHRlbmQuCisgICAgICogQHBhcmFtIGNlbnRlciBOZXcgY2VudGVyIG9mIHRoZSBi
b3VuZGluZyBpbmZvCisgICAgICogQHBhcmFtIGV4dGVuZCBOZXcgZXh0ZW5kIG9mIHRoZSBib3Vu
ZGluZyBpbmZvCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgYm91bmRpbmcgaW5mbworICAg
ICAqLworICAgIEJvdW5kaW5nSW5mby5wcm90b3R5cGUuY2VudGVyT24gPSBmdW5jdGlvbiAoY2Vu
dGVyLCBleHRlbmQpIHsKKyAgICAgICAgdmFyIG1pbmltdW0gPSBCb3VuZGluZ0luZm8uVG1wVmVj
dG9yM1swXS5jb3B5RnJvbShjZW50ZXIpLnN1YnRyYWN0SW5QbGFjZShleHRlbmQpOworICAgICAg
ICB2YXIgbWF4aW11bSA9IEJvdW5kaW5nSW5mby5UbXBWZWN0b3IzWzFdLmNvcHlGcm9tKGNlbnRl
cikuYWRkSW5QbGFjZShleHRlbmQpOworICAgICAgICB0aGlzLmJvdW5kaW5nQm94LnJlQ29uc3Ry
dWN0KG1pbmltdW0sIG1heGltdW0sIHRoaXMuYm91bmRpbmdCb3guZ2V0V29ybGRNYXRyaXgoKSk7
CisgICAgICAgIHRoaXMuYm91bmRpbmdTcGhlcmUucmVDb25zdHJ1Y3QobWluaW11bSwgbWF4aW11
bSwgdGhpcy5ib3VuZGluZ0JveC5nZXRXb3JsZE1hdHJpeCgpKTsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0aGUgY3VycmVudCBib3VuZGluZyBp
bmZvIGJ5IGFwcGx5aW5nIGEgc2NhbGUgZmFjdG9yCisgICAgICogQHBhcmFtIGZhY3RvciBkZWZp
bmVzIHRoZSBzY2FsZSBmYWN0b3IgdG8gYXBwbHkKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVu
dCBib3VuZGluZyBpbmZvCisgICAgICovCisgICAgQm91bmRpbmdJbmZvLnByb3RvdHlwZS5zY2Fs
ZSA9IGZ1bmN0aW9uIChmYWN0b3IpIHsKKyAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5zY2FsZShm
YWN0b3IpOworICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlLnNjYWxlKGZhY3Rvcik7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBgdHJ1ZWAg
aWYgdGhlIGJvdW5kaW5nIGluZm8gaXMgd2l0aGluIHRoZSBmcnVzdHVtIGRlZmluZWQgYnkgdGhl
IHBhc3NlZCBhcnJheSBvZiBwbGFuZXMuCisgICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgZGVm
aW5lcyB0aGUgZnJ1c3R1bSB0byB0ZXN0CisgICAgICogQHBhcmFtIHN0cmF0ZWd5IGRlZmluZXMg
dGhlIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIGN1bGxpbmcgKGRlZmF1bHQgaXMgQkFCWUxPTi5B
YnN0cmFjdE1lc2guQ1VMTElOR1NUUkFURUdZX1NUQU5EQVJEKQorICAgICAqIEByZXR1cm5zIHRy
dWUgaWYgdGhlIGJvdW5kaW5nIGluZm8gaXMgaW4gdGhlIGZydXN0dW0gcGxhbmVzCisgICAgICov
CisgICAgQm91bmRpbmdJbmZvLnByb3RvdHlwZS5pc0luRnJ1c3R1bSA9IGZ1bmN0aW9uIChmcnVz
dHVtUGxhbmVzLCBzdHJhdGVneSkgeworICAgICAgICBpZiAoc3RyYXRlZ3kgPT09IHZvaWQgMCkg
eyBzdHJhdGVneSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJDb25zdGFudHMiXS5NRVNIRVNfQ1VMTElOR1NUUkFURUdZX1NUQU5EQVJEOyB9CisgICAg
ICAgIHZhciBpbmNsdXNpb25UZXN0ID0gKHN0cmF0ZWd5ID09PSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uTUVTSEVTX0NVTExJTkdT
VFJBVEVHWV9PUFRJTUlTVElDX0lOQ0xVU0lPTiB8fCBzdHJhdGVneSA9PT0gX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLk1FU0hFU19D
VUxMSU5HU1RSQVRFR1lfT1BUSU1JU1RJQ19JTkNMVVNJT05fVEhFTl9CU1BIRVJFX09OTFkpOwor
ICAgICAgICBpZiAoaW5jbHVzaW9uVGVzdCkgeworICAgICAgICAgICAgaWYgKHRoaXMuYm91bmRp
bmdTcGhlcmUuaXNDZW50ZXJJbkZydXN0dW0oZnJ1c3R1bVBsYW5lcykpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
IXRoaXMuYm91bmRpbmdTcGhlcmUuaXNJbkZydXN0dW0oZnJ1c3R1bVBsYW5lcykpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYlNwaGVyZU9ubHlU
ZXN0ID0gKHN0cmF0ZWd5ID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uTUVTSEVTX0NVTExJTkdTVFJBVEVHWV9CT1VORElOR1NQ
SEVSRV9PTkxZIHx8IHN0cmF0ZWd5ID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uTUVTSEVTX0NVTExJTkdTVFJBVEVHWV9PUFRJ
TUlTVElDX0lOQ0xVU0lPTl9USEVOX0JTUEhFUkVfT05MWSk7CisgICAgICAgIGlmIChiU3BoZXJl
T25seVRlc3QpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0aGlzLmJvdW5kaW5nQm94LmlzSW5GcnVzdHVtKGZydXN0dW1QbGFuZXMpOworICAg
IH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJvdW5kaW5nSW5mby5wcm90b3R5cGUsICJk
aWFnb25hbExlbmd0aCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHdvcmxk
IGRpc3RhbmNlIGJldHdlZW4gdGhlIG1pbiBhbmQgbWF4IHBvaW50cyBvZiB0aGUgYm91bmRpbmcg
Ym94CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHZhciBib3VuZGluZ0JveCA9IHRoaXMuYm91bmRpbmdCb3g7CisgICAgICAgICAgICB2YXIgZGlh
ZyA9IGJvdW5kaW5nQm94Lm1heGltdW1Xb3JsZC5zdWJ0cmFjdFRvUmVmKGJvdW5kaW5nQm94Lm1p
bmltdW1Xb3JsZCwgQm91bmRpbmdJbmZvLlRtcFZlY3RvcjNbMF0pOworICAgICAgICAgICAgcmV0
dXJuIGRpYWcubGVuZ3RoKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIENo
ZWNrcyBpZiBhIGN1bGxhYmxlIG9iamVjdCAobWVzaC4uLikgaXMgaW4gdGhlIGNhbWVyYSBmcnVz
dHVtCisgICAgICogVW5saWtlIGlzSW5GcnVzdHVtIHRoaXMgY2hla3MgdGhlIGZ1bGwgYm91bmRp
bmcgYm94CisgICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgQ2FtZXJhIG5lYXIvcGxhbmVzCisg
ICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGluIGZydXN0dW0gb3RoZXJ3aXNl
IGZhbHNlCisgICAgICovCisgICAgQm91bmRpbmdJbmZvLnByb3RvdHlwZS5pc0NvbXBsZXRlbHlJ
bkZydXN0dW0gPSBmdW5jdGlvbiAoZnJ1c3R1bVBsYW5lcykgeworICAgICAgICByZXR1cm4gdGhp
cy5ib3VuZGluZ0JveC5pc0NvbXBsZXRlbHlJbkZydXN0dW0oZnJ1c3R1bVBsYW5lcyk7CisgICAg
fTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEJvdW5kaW5nSW5mby5wcm90b3R5cGUuX2NoZWNr
Q29sbGlzaW9uID0gZnVuY3Rpb24gKGNvbGxpZGVyKSB7CisgICAgICAgIHJldHVybiBjb2xsaWRl
ci5fY2FuRG9Db2xsaXNpb24odGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXJXb3JsZCwgdGhpcy5i
b3VuZGluZ1NwaGVyZS5yYWRpdXNXb3JsZCwgdGhpcy5ib3VuZGluZ0JveC5taW5pbXVtV29ybGQs
IHRoaXMuYm91bmRpbmdCb3gubWF4aW11bVdvcmxkKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGUgYm91bmRpbmcgYm94IGFuZCBib3VuZGlu
ZyBzcGhlcmUgb3IgdGhlIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5j
b20vYmFieWxvbjEwMS9pbnRlcnNlY3RfY29sbGlzaW9uc18tX21lc2gKKyAgICAgKiBAcGFyYW0g
cG9pbnQgdGhlIHBvaW50IHRvIGNoZWNrIGludGVyc2VjdGlvbiB3aXRoCisgICAgICogQHJldHVy
bnMgaWYgdGhlIHBvaW50IGludGVyc2VjdHMKKyAgICAgKi8KKyAgICBCb3VuZGluZ0luZm8ucHJv
dG90eXBlLmludGVyc2VjdHNQb2ludCA9IGZ1bmN0aW9uIChwb2ludCkgeworICAgICAgICBpZiAo
IXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyV29ybGQpIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuYm91bmRpbmdTcGhlcmUuaW50ZXJz
ZWN0c1BvaW50KHBvaW50KSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmICghdGhpcy5ib3VuZGluZ0JveC5pbnRlcnNlY3RzUG9pbnQocG9pbnQpKSB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgYW5vdGhlciBib3VuZGluZyBp
bmZvIGludGVyc2VjdHMgdGhlIGJvdW5kaW5nIGJveCBhbmQgYm91bmRpbmcgc3BoZXJlIG9yIHRo
ZSBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEv
aW50ZXJzZWN0X2NvbGxpc2lvbnNfLV9tZXNoCisgICAgICogQHBhcmFtIGJvdW5kaW5nSW5mbyB0
aGUgYm91bmRpbmcgaW5mbyB0byBjaGVjayBpbnRlcnNlY3Rpb24gd2l0aAorICAgICAqIEBwYXJh
bSBwcmVjaXNlIGlmIHRoZSBpbnRlcnNlY3Rpb24gc2hvdWxkIGJlIGRvbmUgdXNpbmcgT0JCCisg
ICAgICogQHJldHVybnMgaWYgdGhlIGJvdW5kaW5nIGluZm8gaW50ZXJzZWN0cworICAgICAqLwor
ICAgIEJvdW5kaW5nSW5mby5wcm90b3R5cGUuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChib3VuZGlu
Z0luZm8sIHByZWNpc2UpIHsKKyAgICAgICAgaWYgKCFfYm91bmRpbmdTcGhlcmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siQm91bmRpbmdTcGhlcmUiXS5JbnRlcnNlY3RzKHRoaXMuYm91
bmRpbmdTcGhlcmUsIGJvdW5kaW5nSW5mby5ib3VuZGluZ1NwaGVyZSkpIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIV9ib3VuZGluZ0JveF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJCb3VuZGluZ0JveCJdLkludGVyc2VjdHModGhpcy5i
b3VuZGluZ0JveCwgYm91bmRpbmdJbmZvLmJvdW5kaW5nQm94KSkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghcHJlY2lzZSkgeworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGJveDAgPSB0aGlzLmJvdW5k
aW5nQm94OworICAgICAgICB2YXIgYm94MSA9IGJvdW5kaW5nSW5mby5ib3VuZGluZ0JveDsKKyAg
ICAgICAgaWYgKCFheGlzT3ZlcmxhcChib3gwLmRpcmVjdGlvbnNbMF0sIGJveDAsIGJveDEpKSB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFheGlz
T3ZlcmxhcChib3gwLmRpcmVjdGlvbnNbMV0sIGJveDAsIGJveDEpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFheGlzT3ZlcmxhcChib3gwLmRp
cmVjdGlvbnNbMl0sIGJveDAsIGJveDEpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFheGlzT3ZlcmxhcChib3gxLmRpcmVjdGlvbnNbMF0sIGJv
eDAsIGJveDEpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFheGlzT3ZlcmxhcChib3gxLmRpcmVjdGlvbnNbMV0sIGJveDAsIGJveDEpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFheGlzT3Zl
cmxhcChib3gxLmRpcmVjdGlvbnNbMl0sIGJveDAsIGJveDEpKSB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFheGlzT3ZlcmxhcChfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKGJv
eDAuZGlyZWN0aW9uc1swXSwgYm94MS5kaXJlY3Rpb25zWzBdKSwgYm94MCwgYm94MSkpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWF4aXNPdmVy
bGFwKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0
b3IzIl0uQ3Jvc3MoYm94MC5kaXJlY3Rpb25zWzBdLCBib3gxLmRpcmVjdGlvbnNbMV0pLCBib3gw
LCBib3gxKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmICghYXhpc092ZXJsYXAoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlZlY3RvcjMiXS5Dcm9zcyhib3gwLmRpcmVjdGlvbnNbMF0sIGJveDEuZGlyZWN0
aW9uc1syXSksIGJveDAsIGJveDEpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFheGlzT3ZlcmxhcChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKGJveDAuZGlyZWN0aW9uc1sx
XSwgYm94MS5kaXJlY3Rpb25zWzBdKSwgYm94MCwgYm94MSkpIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWF4aXNPdmVybGFwKF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uQ3Jvc3MoYm94
MC5kaXJlY3Rpb25zWzFdLCBib3gxLmRpcmVjdGlvbnNbMV0pLCBib3gwLCBib3gxKSkgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghYXhpc092ZXJs
YXAoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3Rv
cjMiXS5Dcm9zcyhib3gwLmRpcmVjdGlvbnNbMV0sIGJveDEuZGlyZWN0aW9uc1syXSksIGJveDAs
IGJveDEpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFheGlzT3ZlcmxhcChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKGJveDAuZGlyZWN0aW9uc1syXSwgYm94MS5kaXJlY3Rp
b25zWzBdKSwgYm94MCwgYm94MSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWF4aXNPdmVybGFwKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uQ3Jvc3MoYm94MC5kaXJlY3Rpb25zWzJd
LCBib3gxLmRpcmVjdGlvbnNbMV0pLCBib3gwLCBib3gxKSkgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghYXhpc092ZXJsYXAoX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Dcm9zcyhib3gw
LmRpcmVjdGlvbnNbMl0sIGJveDEuZGlyZWN0aW9uc1syXSksIGJveDAsIGJveDEpKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfTsKKyAgICBCb3VuZGluZ0luZm8uVG1wVmVjdG9yMyA9IF9NaXNjX2FycmF5VG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJyYXlUb29scyJdLkJ1aWxkQXJyYXkoMiwgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5a
ZXJvKTsKKyAgICByZXR1cm4gQm91bmRpbmdJbmZvOworfSgpKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9DdWxsaW5nL2JvdW5kaW5nU3BoZXJlLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9DdWxsaW5nL2JvdW5kaW5nU3BoZXJl
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IEJvdW5kaW5nU3BoZXJlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkJvdW5kaW5nU3BoZXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCb3VuZGlu
Z1NwaGVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfYXJyYXlUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWlzYy9hcnJheVRvb2xzICovICIuL01pc2MvYXJyYXlUb29scy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4v
TWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gc3RvcmUg
Ym91bmRpbmcgc3BoZXJlIGluZm9ybWF0aW9uCisgKi8KK3ZhciBCb3VuZGluZ1NwaGVyZSA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3
IGJvdW5kaW5nIHNwaGVyZQorICAgICAqIEBwYXJhbSBtaW4gZGVmaW5lcyB0aGUgbWluaW11bSB2
ZWN0b3IgKGluIGxvY2FsIHNwYWNlKQorICAgICAqIEBwYXJhbSBtYXggZGVmaW5lcyB0aGUgbWF4
aW11bSB2ZWN0b3IgKGluIGxvY2FsIHNwYWNlKQorICAgICAqIEBwYXJhbSB3b3JsZE1hdHJpeCBk
ZWZpbmVzIHRoZSBuZXcgd29ybGQgbWF0cml4CisgICAgICovCisgICAgZnVuY3Rpb24gQm91bmRp
bmdTcGhlcmUobWluLCBtYXgsIHdvcmxkTWF0cml4KSB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBjZW50ZXIgb2YgdGhlIGJvdW5kaW5nIHNwaGVyZSBpbiBsb2NhbCBzcGFjZQor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5jZW50ZXIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIGNlbnRlciBvZiB0aGUgYm91bmRpbmcgc3BoZXJlIGluIHdv
cmxkIHNwYWNlCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNlbnRlcldvcmxkID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBtaW5pbXVtIHZlY3RvciBpbiBs
b2NhbCBzcGFjZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5taW5pbXVtID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIHZlY3RvciBpbiBsb2Nh
bCBzcGFjZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tYXhpbXVtID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5aZXJvKCk7Cisg
ICAgICAgIHRoaXMucmVDb25zdHJ1Y3QobWluLCBtYXgsIHdvcmxkTWF0cml4KTsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogUmVjcmVhdGVzIHRoZSBlbnRpcmUgYm91bmRpbmcgc3BoZXJlIGZyb20g
c2NyYXRjaCBhcyBpZiB3ZSBjYWxsIHRoZSBjb25zdHJ1Y3RvciBpbiBwbGFjZQorICAgICAqIEBw
YXJhbSBtaW4gZGVmaW5lcyB0aGUgbmV3IG1pbmltdW0gdmVjdG9yIChpbiBsb2NhbCBzcGFjZSkK
KyAgICAgKiBAcGFyYW0gbWF4IGRlZmluZXMgdGhlIG5ldyBtYXhpbXVtIHZlY3RvciAoaW4gbG9j
YWwgc3BhY2UpCisgICAgICogQHBhcmFtIHdvcmxkTWF0cml4IGRlZmluZXMgdGhlIG5ldyB3b3Js
ZCBtYXRyaXgKKyAgICAgKi8KKyAgICBCb3VuZGluZ1NwaGVyZS5wcm90b3R5cGUucmVDb25zdHJ1
Y3QgPSBmdW5jdGlvbiAobWluLCBtYXgsIHdvcmxkTWF0cml4KSB7CisgICAgICAgIHRoaXMubWlu
aW11bS5jb3B5RnJvbShtaW4pOworICAgICAgICB0aGlzLm1heGltdW0uY29weUZyb20obWF4KTsK
KyAgICAgICAgdmFyIGRpc3RhbmNlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5EaXN0YW5jZShtaW4sIG1heCk7CisgICAgICAgIG1h
eC5hZGRUb1JlZihtaW4sIHRoaXMuY2VudGVyKS5zY2FsZUluUGxhY2UoMC41KTsKKyAgICAgICAg
dGhpcy5yYWRpdXMgPSBkaXN0YW5jZSAqIDAuNTsKKyAgICAgICAgdGhpcy5fdXBkYXRlKHdvcmxk
TWF0cml4IHx8IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJNYXRyaXgiXS5JZGVudGl0eVJlYWRPbmx5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNj
YWxlIHRoZSBjdXJyZW50IGJvdW5kaW5nIHNwaGVyZSBieSBhcHBseWluZyBhIHNjYWxlIGZhY3Rv
cgorICAgICAqIEBwYXJhbSBmYWN0b3IgZGVmaW5lcyB0aGUgc2NhbGUgZmFjdG9yIHRvIGFwcGx5
CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgYm91bmRpbmcgYm94CisgICAgICovCisgICAg
Qm91bmRpbmdTcGhlcmUucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKGZhY3RvcikgeworICAg
ICAgICB2YXIgbmV3UmFkaXVzID0gdGhpcy5yYWRpdXMgKiBmYWN0b3I7CisgICAgICAgIHZhciB0
bXBWZWN0b3JzID0gQm91bmRpbmdTcGhlcmUuVG1wVmVjdG9yMzsKKyAgICAgICAgdmFyIHRlbXBS
YWRpdXNWZWN0b3IgPSB0bXBWZWN0b3JzWzBdLnNldEFsbChuZXdSYWRpdXMpOworICAgICAgICB2
YXIgbWluID0gdGhpcy5jZW50ZXIuc3VidHJhY3RUb1JlZih0ZW1wUmFkaXVzVmVjdG9yLCB0bXBW
ZWN0b3JzWzFdKTsKKyAgICAgICAgdmFyIG1heCA9IHRoaXMuY2VudGVyLmFkZFRvUmVmKHRlbXBS
YWRpdXNWZWN0b3IsIHRtcFZlY3RvcnNbMl0pOworICAgICAgICB0aGlzLnJlQ29uc3RydWN0KG1p
biwgbWF4LCB0aGlzLl93b3JsZE1hdHJpeCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgd29ybGQgbWF0cml4IG9mIHRoZSBib3VuZGluZyBi
b3gKKyAgICAgKiBAcmV0dXJucyBhIG1hdHJpeAorICAgICAqLworICAgIEJvdW5kaW5nU3BoZXJl
LnByb3RvdHlwZS5nZXRXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3dvcmxkTWF0cml4OworICAgIH07CisgICAgLy8gTWV0aG9kcworICAgIC8qKiBAaGlk
ZGVuICovCisgICAgQm91bmRpbmdTcGhlcmUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAo
d29ybGRNYXRyaXgpIHsKKyAgICAgICAgaWYgKCF3b3JsZE1hdHJpeC5pc0lkZW50aXR5KCkpIHsK
KyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0aGlzLmNlbnRlciwgd29y
bGRNYXRyaXgsIHRoaXMuY2VudGVyV29ybGQpOworICAgICAgICAgICAgdmFyIHRlbXBWZWN0b3Ig
PSBCb3VuZGluZ1NwaGVyZS5UbXBWZWN0b3IzWzBdOworICAgICAgICAgICAgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1O
b3JtYWxGcm9tRmxvYXRzVG9SZWYoMS4wLCAxLjAsIDEuMCwgd29ybGRNYXRyaXgsIHRlbXBWZWN0
b3IpOworICAgICAgICAgICAgdGhpcy5yYWRpdXNXb3JsZCA9IE1hdGgubWF4KE1hdGguYWJzKHRl
bXBWZWN0b3IueCksIE1hdGguYWJzKHRlbXBWZWN0b3IueSksIE1hdGguYWJzKHRlbXBWZWN0b3Iu
eikpICogdGhpcy5yYWRpdXM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICB0aGlzLmNlbnRlcldvcmxkLmNvcHlGcm9tKHRoaXMuY2VudGVyKTsKKyAgICAgICAgICAgIHRo
aXMucmFkaXVzV29ybGQgPSB0aGlzLnJhZGl1czsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogVGVzdHMgaWYgdGhlIGJvdW5kaW5nIHNwaGVyZSBpcyBpbnRlcnNlY3RpbmcgdGhl
IGZydXN0dW0gcGxhbmVzCisgICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgZGVmaW5lcyB0aGUg
ZnJ1c3R1bSBwbGFuZXMgdG8gdGVzdAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMg
YW4gaW50ZXJzZWN0aW9uCisgICAgICovCisgICAgQm91bmRpbmdTcGhlcmUucHJvdG90eXBlLmlz
SW5GcnVzdHVtID0gZnVuY3Rpb24gKGZydXN0dW1QbGFuZXMpIHsKKyAgICAgICAgdmFyIGNlbnRl
ciA9IHRoaXMuY2VudGVyV29ybGQ7CisgICAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1c1dv
cmxkOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykgeworICAgICAgICAgICAg
aWYgKGZydXN0dW1QbGFuZXNbaV0uZG90Q29vcmRpbmF0ZShjZW50ZXIpIDw9IC1yYWRpdXMpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUZXN0cyBpZiB0
aGUgYm91bmRpbmcgc3BoZXJlIGNlbnRlciBpcyBpbiBiZXR3ZWVuIHRoZSBmcnVzdHVtIHBsYW5l
cy4KKyAgICAgKiBVc2VkIGZvciBvcHRpbWlzdGljIGZhc3QgaW5jbHVzaW9uLgorICAgICAqIEBw
YXJhbSBmcnVzdHVtUGxhbmVzIGRlZmluZXMgdGhlIGZydXN0dW0gcGxhbmVzIHRvIHRlc3QKKyAg
ICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzcGhlcmUgY2VudGVyIGlzIGluIGJldHdlZW4gdGhl
IGZydXN0dW0gcGxhbmVzCisgICAgICovCisgICAgQm91bmRpbmdTcGhlcmUucHJvdG90eXBlLmlz
Q2VudGVySW5GcnVzdHVtID0gZnVuY3Rpb24gKGZydXN0dW1QbGFuZXMpIHsKKyAgICAgICAgdmFy
IGNlbnRlciA9IHRoaXMuY2VudGVyV29ybGQ7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
NjsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZnJ1c3R1bVBsYW5lc1tpXS5kb3RDb29yZGluYXRl
KGNlbnRlcikgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoqCisg
ICAgICogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhlIGJvdW5kaW5nIHNwaGVyZQorICAg
ICAqIEBwYXJhbSBwb2ludCBkZWZpbmVzIHRoZSBwb2ludCB0byB0ZXN0CisgICAgICogQHJldHVy
bnMgdHJ1ZSBpZiB0aGUgcG9pbnQgaXMgaW5zaWRlIHRoZSBib3VuZGluZyBzcGhlcmUKKyAgICAg
Ki8KKyAgICBCb3VuZGluZ1NwaGVyZS5wcm90b3R5cGUuaW50ZXJzZWN0c1BvaW50ID0gZnVuY3Rp
b24gKHBvaW50KSB7CisgICAgICAgIHZhciBzcXVhcmVEaXN0YW5jZSA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uRGlzdGFuY2VTcXVh
cmVkKHRoaXMuY2VudGVyV29ybGQsIHBvaW50KTsKKyAgICAgICAgaWYgKHRoaXMucmFkaXVzV29y
bGQgKiB0aGlzLnJhZGl1c1dvcmxkIDwgc3F1YXJlRGlzdGFuY2UpIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAg
IC8vIFN0YXRpY3MKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdHdvIHNwaGVyZSBpbnRlcnNj
dAorICAgICAqIEBwYXJhbSBzcGhlcmUwIHNwaGVyZSAwCisgICAgICogQHBhcmFtIHNwaGVyZTEg
c3BoZXJlIDEKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzcGVyZXMgaW50ZXJzZWN0Cisg
ICAgICovCisgICAgQm91bmRpbmdTcGhlcmUuSW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChzcGhlcmUw
LCBzcGhlcmUxKSB7CisgICAgICAgIHZhciBzcXVhcmVEaXN0YW5jZSA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uRGlzdGFuY2VTcXVh
cmVkKHNwaGVyZTAuY2VudGVyV29ybGQsIHNwaGVyZTEuY2VudGVyV29ybGQpOworICAgICAgICB2
YXIgcmFkaXVzU3VtID0gc3BoZXJlMC5yYWRpdXNXb3JsZCArIHNwaGVyZTEucmFkaXVzV29ybGQ7
CisgICAgICAgIGlmIChyYWRpdXNTdW0gKiByYWRpdXNTdW0gPCBzcXVhcmVEaXN0YW5jZSkgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH07CisgICAgQm91bmRpbmdTcGhlcmUuVG1wVmVjdG9yMyA9IF9NaXNjX2FycmF5VG9v
bHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJyYXlUb29scyJdLkJ1aWxkQXJyYXko
MywgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3Rv
cjMiXS5aZXJvKTsKKyAgICByZXR1cm4gQm91bmRpbmdTcGhlcmU7Cit9KCkpOworCisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL0N1bGxpbmcvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL0N1bGxpbmcvaW5kZXgudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQm91bmRpbmdCb3gs
IEJvdW5kaW5nSW5mbywgQm91bmRpbmdTcGhlcmUsIFJheSwgT2N0cmVlLCBPY3RyZWVCbG9jaywg
T2N0cmVlU2NlbmVDb21wb25lbnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9ib3VuZGluZ0JveF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ib3VuZGluZ0JveCAqLyAiLi9DdWxsaW5nL2JvdW5kaW5n
Qm94LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvdW5kaW5nQm94IiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfYm91bmRpbmdCb3hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQm91bmRpbmdC
b3giXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm91bmRpbmdJbmZvX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2JvdW5k
aW5nSW5mbyAqLyAiLi9DdWxsaW5nL2JvdW5kaW5nSW5mby50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJCb3VuZGluZ0luZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ib3VuZGluZ0luZm9fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siQm91bmRpbmdJbmZvIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2JvdW5kaW5nU3BoZXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2JvdW5kaW5nU3BoZXJlICovICIuL0N1bGxp
bmcvYm91bmRpbmdTcGhlcmUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmRpbmdTcGhlcmUi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ib3VuZGluZ1NwaGVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJCb3VuZGluZ1NwaGVyZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9PY3RyZWVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL09jdHJlZXMvaW5kZXggKi8gIi4vQ3VsbGluZy9PY3RyZWVzL2lu
ZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X09jdHJlZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2N0cmVlIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
T2N0cmVlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPY3RyZWVCbG9jayJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJPY3RyZWVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX09jdHJlZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
T2N0cmVlU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL3JheSAqLyAiLi9DdWxsaW5nL3JheS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSYXkiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9yYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUmF5
Il07IH0pOworCisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9DdWxsaW5nL3Jh
eS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0N1bGxpbmcv
cmF5LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBSYXkgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmF5Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBSYXk7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
aXNjX2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvYXJyYXlUb29scyAqLyAiLi9NaXNjL2FycmF5VG9vbHMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21h
dGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0NvbGxpc2lvbnNfcGlja2luZ0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NvbGxpc2lvbnMvcGlja2luZ0luZm8g
Ki8gIi4vQ29sbGlzaW9ucy9waWNraW5nSW5mby50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9Db2xsaXNpb25zX2ludGVyc2VjdGlvbkluZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NvbGxpc2lvbnMvaW50ZXJzZWN0aW9u
SW5mbyAqLyAiLi9Db2xsaXNpb25zL2ludGVyc2VjdGlvbkluZm8udHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL2NhbWVyYSAqLyAiLi9DYW1l
cmFzL2NhbWVyYS50cyIpOworCisKKworCisKKworLyoqCisgKiBDbGFzcyByZXByZXNlbnRpbmcg
YSByYXkgd2l0aCBwb3NpdGlvbiBhbmQgZGlyZWN0aW9uCisgKi8KK3ZhciBSYXkgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyByYXkK
KyAgICAgKiBAcGFyYW0gb3JpZ2luIG9yaWdpbiBwb2ludAorICAgICAqIEBwYXJhbSBkaXJlY3Rp
b24gZGlyZWN0aW9uCisgICAgICogQHBhcmFtIGxlbmd0aCBsZW5ndGggb2YgdGhlIHJheQorICAg
ICAqLworICAgIGZ1bmN0aW9uIFJheSgKKyAgICAvKiogb3JpZ2luIHBvaW50ICovCisgICAgb3Jp
Z2luLCAKKyAgICAvKiogZGlyZWN0aW9uICovCisgICAgZGlyZWN0aW9uLCAKKyAgICAvKiogbGVu
Z3RoIG9mIHRoZSByYXkgKi8KKyAgICBsZW5ndGgpIHsKKyAgICAgICAgaWYgKGxlbmd0aCA9PT0g
dm9pZCAwKSB7IGxlbmd0aCA9IE51bWJlci5NQVhfVkFMVUU7IH0KKyAgICAgICAgdGhpcy5vcmln
aW4gPSBvcmlnaW47CisgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uOworICAgICAg
ICB0aGlzLmxlbmd0aCA9IGxlbmd0aDsKKyAgICB9CisgICAgLy8gTWV0aG9kcworICAgIC8qKgor
ICAgICAqIENoZWNrcyBpZiB0aGUgcmF5IGludGVyc2VjdHMgYSBib3gKKyAgICAgKiBAcGFyYW0g
bWluaW11bSBib3VuZCBvZiB0aGUgYm94CisgICAgICogQHBhcmFtIG1heGltdW0gYm91bmQgb2Yg
dGhlIGJveAorICAgICAqIEBwYXJhbSBpbnRlcnNlY3Rpb25UcmVzaG9sZCBleHRyYSBleHRlbmQg
dG8gYmUgYWRkZWQgdG8gdGhlIGJveCBpbiBhbGwgZGlyZWN0aW9uCisgICAgICogQHJldHVybnMg
aWYgdGhlIGJveCB3YXMgaGl0CisgICAgICovCisgICAgUmF5LnByb3RvdHlwZS5pbnRlcnNlY3Rz
Qm94TWluTWF4ID0gZnVuY3Rpb24gKG1pbmltdW0sIG1heGltdW0sIGludGVyc2VjdGlvblRyZXNo
b2xkKSB7CisgICAgICAgIGlmIChpbnRlcnNlY3Rpb25UcmVzaG9sZCA9PT0gdm9pZCAwKSB7IGlu
dGVyc2VjdGlvblRyZXNob2xkID0gMDsgfQorICAgICAgICB2YXIgbmV3TWluaW11bSA9IFJheS5U
bXBWZWN0b3IzWzBdLmNvcHlGcm9tRmxvYXRzKG1pbmltdW0ueCAtIGludGVyc2VjdGlvblRyZXNo
b2xkLCBtaW5pbXVtLnkgLSBpbnRlcnNlY3Rpb25UcmVzaG9sZCwgbWluaW11bS56IC0gaW50ZXJz
ZWN0aW9uVHJlc2hvbGQpOworICAgICAgICB2YXIgbmV3TWF4aW11bSA9IFJheS5UbXBWZWN0b3Iz
WzFdLmNvcHlGcm9tRmxvYXRzKG1heGltdW0ueCArIGludGVyc2VjdGlvblRyZXNob2xkLCBtYXhp
bXVtLnkgKyBpbnRlcnNlY3Rpb25UcmVzaG9sZCwgbWF4aW11bS56ICsgaW50ZXJzZWN0aW9uVHJl
c2hvbGQpOworICAgICAgICB2YXIgZCA9IDAuMDsKKyAgICAgICAgdmFyIG1heFZhbHVlID0gTnVt
YmVyLk1BWF9WQUxVRTsKKyAgICAgICAgdmFyIGludjsKKyAgICAgICAgdmFyIG1pbjsKKyAgICAg
ICAgdmFyIG1heDsKKyAgICAgICAgdmFyIHRlbXA7CisgICAgICAgIGlmIChNYXRoLmFicyh0aGlz
LmRpcmVjdGlvbi54KSA8IDAuMDAwMDAwMSkgeworICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2lu
LnggPCBuZXdNaW5pbXVtLnggfHwgdGhpcy5vcmlnaW4ueCA+IG5ld01heGltdW0ueCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludiA9IDEuMCAvIHRoaXMuZGlyZWN0aW9uLng7Cisg
ICAgICAgICAgICBtaW4gPSAobmV3TWluaW11bS54IC0gdGhpcy5vcmlnaW4ueCkgKiBpbnY7Cisg
ICAgICAgICAgICBtYXggPSAobmV3TWF4aW11bS54IC0gdGhpcy5vcmlnaW4ueCkgKiBpbnY7Cisg
ICAgICAgICAgICBpZiAobWF4ID09PSAtSW5maW5pdHkpIHsKKyAgICAgICAgICAgICAgICBtYXgg
PSBJbmZpbml0eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtaW4gPiBtYXgpIHsK
KyAgICAgICAgICAgICAgICB0ZW1wID0gbWluOworICAgICAgICAgICAgICAgIG1pbiA9IG1heDsK
KyAgICAgICAgICAgICAgICBtYXggPSB0ZW1wOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZCA9IE1hdGgubWF4KG1pbiwgZCk7CisgICAgICAgICAgICBtYXhWYWx1ZSA9IE1hdGgubWluKG1h
eCwgbWF4VmFsdWUpOworICAgICAgICAgICAgaWYgKGQgPiBtYXhWYWx1ZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoTWF0aC5hYnModGhpcy5kaXJlY3Rpb24ueSkgPCAwLjAwMDAwMDEpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLm9yaWdpbi55IDwgbmV3TWluaW11bS55IHx8IHRoaXMub3JpZ2luLnkgPiBuZXdN
YXhpbXVtLnkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnYgPSAxLjAgLyB0aGlz
LmRpcmVjdGlvbi55OworICAgICAgICAgICAgbWluID0gKG5ld01pbmltdW0ueSAtIHRoaXMub3Jp
Z2luLnkpICogaW52OworICAgICAgICAgICAgbWF4ID0gKG5ld01heGltdW0ueSAtIHRoaXMub3Jp
Z2luLnkpICogaW52OworICAgICAgICAgICAgaWYgKG1heCA9PT0gLUluZmluaXR5KSB7CisgICAg
ICAgICAgICAgICAgbWF4ID0gSW5maW5pdHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAobWluID4gbWF4KSB7CisgICAgICAgICAgICAgICAgdGVtcCA9IG1pbjsKKyAgICAgICAgICAg
ICAgICBtaW4gPSBtYXg7CisgICAgICAgICAgICAgICAgbWF4ID0gdGVtcDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGQgPSBNYXRoLm1heChtaW4sIGQpOworICAgICAgICAgICAgbWF4VmFs
dWUgPSBNYXRoLm1pbihtYXgsIG1heFZhbHVlKTsKKyAgICAgICAgICAgIGlmIChkID4gbWF4VmFs
dWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuZGlyZWN0aW9uLnopIDwgMC4wMDAwMDAx
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5vcmlnaW4ueiA8IG5ld01pbmltdW0ueiB8fCB0aGlz
Lm9yaWdpbi56ID4gbmV3TWF4aW11bS56KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aW52ID0gMS4wIC8gdGhpcy5kaXJlY3Rpb24uejsKKyAgICAgICAgICAgIG1pbiA9IChuZXdNaW5p
bXVtLnogLSB0aGlzLm9yaWdpbi56KSAqIGludjsKKyAgICAgICAgICAgIG1heCA9IChuZXdNYXhp
bXVtLnogLSB0aGlzLm9yaWdpbi56KSAqIGludjsKKyAgICAgICAgICAgIGlmIChtYXggPT09IC1J
bmZpbml0eSkgeworICAgICAgICAgICAgICAgIG1heCA9IEluZmluaXR5OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG1pbiA+IG1heCkgeworICAgICAgICAgICAgICAgIHRlbXAgPSBt
aW47CisgICAgICAgICAgICAgICAgbWluID0gbWF4OworICAgICAgICAgICAgICAgIG1heCA9IHRl
bXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkID0gTWF0aC5tYXgobWluLCBkKTsKKyAg
ICAgICAgICAgIG1heFZhbHVlID0gTWF0aC5taW4obWF4LCBtYXhWYWx1ZSk7CisgICAgICAgICAg
ICBpZiAoZCA+IG1heFZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAg
LyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSByYXkgaW50ZXJzZWN0cyBhIGJveAorICAgICAqIEBw
YXJhbSBib3ggdGhlIGJvdW5kaW5nIGJveCB0byBjaGVjaworICAgICAqIEBwYXJhbSBpbnRlcnNl
Y3Rpb25UcmVzaG9sZCBleHRyYSBleHRlbmQgdG8gYmUgYWRkZWQgdG8gdGhlIEJvdW5kaW5nQm94
IGluIGFsbCBkaXJlY3Rpb24KKyAgICAgKiBAcmV0dXJucyBpZiB0aGUgYm94IHdhcyBoaXQKKyAg
ICAgKi8KKyAgICBSYXkucHJvdG90eXBlLmludGVyc2VjdHNCb3ggPSBmdW5jdGlvbiAoYm94LCBp
bnRlcnNlY3Rpb25UcmVzaG9sZCkgeworICAgICAgICBpZiAoaW50ZXJzZWN0aW9uVHJlc2hvbGQg
PT09IHZvaWQgMCkgeyBpbnRlcnNlY3Rpb25UcmVzaG9sZCA9IDA7IH0KKyAgICAgICAgcmV0dXJu
IHRoaXMuaW50ZXJzZWN0c0JveE1pbk1heChib3gubWluaW11bSwgYm94Lm1heGltdW0sIGludGVy
c2VjdGlvblRyZXNob2xkKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIElmIHRoZSByYXkgaGl0
cyBhIHNwaGVyZQorICAgICAqIEBwYXJhbSBzcGhlcmUgdGhlIGJvdW5kaW5nIHNwaGVyZSB0byBj
aGVjaworICAgICAqIEBwYXJhbSBpbnRlcnNlY3Rpb25UcmVzaG9sZCBleHRyYSBleHRlbmQgdG8g
YmUgYWRkZWQgdG8gdGhlIEJvdW5kaW5nU3BoZXJlIGluIGFsbCBkaXJlY3Rpb24KKyAgICAgKiBA
cmV0dXJucyB0cnVlIGlmIGl0IGhpdHMgdGhlIHNwaGVyZQorICAgICAqLworICAgIFJheS5wcm90
b3R5cGUuaW50ZXJzZWN0c1NwaGVyZSA9IGZ1bmN0aW9uIChzcGhlcmUsIGludGVyc2VjdGlvblRy
ZXNob2xkKSB7CisgICAgICAgIGlmIChpbnRlcnNlY3Rpb25UcmVzaG9sZCA9PT0gdm9pZCAwKSB7
IGludGVyc2VjdGlvblRyZXNob2xkID0gMDsgfQorICAgICAgICB2YXIgeCA9IHNwaGVyZS5jZW50
ZXIueCAtIHRoaXMub3JpZ2luLng7CisgICAgICAgIHZhciB5ID0gc3BoZXJlLmNlbnRlci55IC0g
dGhpcy5vcmlnaW4ueTsKKyAgICAgICAgdmFyIHogPSBzcGhlcmUuY2VudGVyLnogLSB0aGlzLm9y
aWdpbi56OworICAgICAgICB2YXIgcHl0aCA9ICh4ICogeCkgKyAoeSAqIHkpICsgKHogKiB6KTsK
KyAgICAgICAgdmFyIHJhZGl1cyA9IHNwaGVyZS5yYWRpdXMgKyBpbnRlcnNlY3Rpb25UcmVzaG9s
ZDsKKyAgICAgICAgdmFyIHJyID0gcmFkaXVzICogcmFkaXVzOworICAgICAgICBpZiAocHl0aCA8
PSBycikgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IGRvdCA9ICh4ICogdGhpcy5kaXJlY3Rpb24ueCkgKyAoeSAqIHRoaXMuZGlyZWN0aW9uLnkpICsg
KHogKiB0aGlzLmRpcmVjdGlvbi56KTsKKyAgICAgICAgaWYgKGRvdCA8IDAuMCkgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHZhciB0ZW1wID0gcHl0aCAt
IChkb3QgKiBkb3QpOworICAgICAgICByZXR1cm4gdGVtcCA8PSBycjsKKyAgICB9OworICAgIC8q
KgorICAgICAqIElmIHRoZSByYXkgaGl0cyBhIHRyaWFuZ2UKKyAgICAgKiBAcGFyYW0gdmVydGV4
MCB0cmlhbmdsZSB2ZXJ0ZXgKKyAgICAgKiBAcGFyYW0gdmVydGV4MSB0cmlhbmdsZSB2ZXJ0ZXgK
KyAgICAgKiBAcGFyYW0gdmVydGV4MiB0cmlhbmdsZSB2ZXJ0ZXgKKyAgICAgKiBAcmV0dXJucyBp
bnRlcnNlY3Rpb24gaW5mb3JtYXRpb24gaWYgaGl0CisgICAgICovCisgICAgUmF5LnByb3RvdHlw
ZS5pbnRlcnNlY3RzVHJpYW5nbGUgPSBmdW5jdGlvbiAodmVydGV4MCwgdmVydGV4MSwgdmVydGV4
MikgeworICAgICAgICB2YXIgZWRnZTEgPSBSYXkuVG1wVmVjdG9yM1swXTsKKyAgICAgICAgdmFy
IGVkZ2UyID0gUmF5LlRtcFZlY3RvcjNbMV07CisgICAgICAgIHZhciBwdmVjID0gUmF5LlRtcFZl
Y3RvcjNbMl07CisgICAgICAgIHZhciB0dmVjID0gUmF5LlRtcFZlY3RvcjNbM107CisgICAgICAg
IHZhciBxdmVjID0gUmF5LlRtcFZlY3RvcjNbNF07CisgICAgICAgIHZlcnRleDEuc3VidHJhY3RU
b1JlZih2ZXJ0ZXgwLCBlZGdlMSk7CisgICAgICAgIHZlcnRleDIuc3VidHJhY3RUb1JlZih2ZXJ0
ZXgwLCBlZGdlMik7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZih0aGlzLmRpcmVjdGlvbiwgZWRnZTIs
IHB2ZWMpOworICAgICAgICB2YXIgZGV0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Eb3QoZWRnZTEsIHB2ZWMpOworICAgICAgICBp
ZiAoZGV0ID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgaW52ZGV0ID0gMSAvIGRldDsKKyAgICAgICAgdGhpcy5vcmlnaW4uc3VidHJhY3RU
b1JlZih2ZXJ0ZXgwLCB0dmVjKTsKKyAgICAgICAgdmFyIGJ2ID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Eb3QodHZlYywgcHZlYykg
KiBpbnZkZXQ7CisgICAgICAgIGlmIChidiA8IDAgfHwgYnYgPiAxLjApIHsKKyAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZih0dmVjLCBlZGdl
MSwgcXZlYyk7CisgICAgICAgIHZhciBidyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uRG90KHRoaXMuZGlyZWN0aW9uLCBxdmVjKSAq
IGludmRldDsKKyAgICAgICAgaWYgKGJ3IDwgMCB8fCBidiArIGJ3ID4gMS4wKSB7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICAvL2NoZWNrIGlmIHRoZSBkaXN0
YW5jZSBpcyBsb25nZXIgdGhhbiB0aGUgcHJlZGVmaW5lZCBsZW5ndGguCisgICAgICAgIHZhciBk
aXN0YW5jZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJWZWN0b3IzIl0uRG90KGVkZ2UyLCBxdmVjKSAqIGludmRldDsKKyAgICAgICAgaWYgKGRpc3Rh
bmNlID4gdGhpcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBuZXcgX0NvbGxpc2lvbnNfaW50ZXJzZWN0aW9uSW5mb19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJJbnRlcnNlY3Rpb25JbmZvIl0oMSAtIGJ2IC0gYncsIGJ2
LCBkaXN0YW5jZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgcmF5IGludGVy
c2VjdHMgYSBwbGFuZQorICAgICAqIEBwYXJhbSBwbGFuZSB0aGUgcGxhbmUgdG8gY2hlY2sKKyAg
ICAgKiBAcmV0dXJucyB0aGUgZGlzdGFuY2UgYXdheSBpdCB3YXMgaGl0CisgICAgICovCisgICAg
UmF5LnByb3RvdHlwZS5pbnRlcnNlY3RzUGxhbmUgPSBmdW5jdGlvbiAocGxhbmUpIHsKKyAgICAg
ICAgdmFyIGRpc3RhbmNlOworICAgICAgICB2YXIgcmVzdWx0MSA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uRG90KHBsYW5lLm5vcm1h
bCwgdGhpcy5kaXJlY3Rpb24pOworICAgICAgICBpZiAoTWF0aC5hYnMocmVzdWx0MSkgPCA5Ljk5
OTk5OTk3NDc1MjQzRS0wNykgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0MiA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uRG90KHBsYW5lLm5v
cm1hbCwgdGhpcy5vcmlnaW4pOworICAgICAgICAgICAgZGlzdGFuY2UgPSAoLXBsYW5lLmQgLSBy
ZXN1bHQyKSAvIHJlc3VsdDE7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCAwLjApIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCAtOS45OTk5OTk5NzQ3NTI0M0UtMDcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZGlzdGFuY2U7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGN1bGF0ZSB0aGUgaW50ZXJjZXB0
IG9mIGEgcmF5IG9uIGEgZ2l2ZW4gYXhpcworICAgICAqIEBwYXJhbSBheGlzIHRvIGNoZWNrICd4
JyB8ICd5JyB8ICd6JworICAgICAqIEBwYXJhbSBvZmZzZXQgZnJvbSBheGlzIGludGVyY2VwdGlv
biAoaS5lLiBhbiBvZmZzZXQgb2YgMXkgaXMgaW50ZXJjZXB0ZWQgYWJvdmUgZ3JvdW5kKQorICAg
ICAqIEByZXR1cm5zIGEgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvb3JkaW5hdGVzIHdoZXJlICdh
eGlzJyBpcyBlcXVhbCB0byB6ZXJvIChlbHNlIG9mZnNldCksIG9yIG51bGwgaWYgdGhlcmUgaXMg
bm8gaW50ZXJjZXB0LgorICAgICAqLworICAgIFJheS5wcm90b3R5cGUuaW50ZXJzZWN0c0F4aXMg
PSBmdW5jdGlvbiAoYXhpcywgb2Zmc2V0KSB7CisgICAgICAgIGlmIChvZmZzZXQgPT09IHZvaWQg
MCkgeyBvZmZzZXQgPSAwOyB9CisgICAgICAgIHN3aXRjaCAoYXhpcykgeworICAgICAgICAgICAg
Y2FzZSAneSc6CisgICAgICAgICAgICAgICAgdmFyIHQgPSAodGhpcy5vcmlnaW4ueSAtIG9mZnNl
dCkgLyB0aGlzLmRpcmVjdGlvbi55OworICAgICAgICAgICAgICAgIGlmICh0ID4gMCkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVjdG9yMyJdKHRoaXMub3JpZ2luLnggKyAodGhpcy5kaXJlY3Rpb24ueCAq
IC10KSwgb2Zmc2V0LCB0aGlzLm9yaWdpbi56ICsgKHRoaXMuZGlyZWN0aW9uLnogKiAtdCkpOwor
ICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAgdmFyIHQgPSAodGhpcy5vcmln
aW4ueCAtIG9mZnNldCkgLyB0aGlzLmRpcmVjdGlvbi54OworICAgICAgICAgICAgICAgIGlmICh0
ID4gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKG9mZnNldCwgdGhpcy5vcmlnaW4ueSAr
ICh0aGlzLmRpcmVjdGlvbi55ICogLXQpLCB0aGlzLm9yaWdpbi56ICsgKHRoaXMuZGlyZWN0aW9u
LnogKiAtdCkpOworICAgICAgICAgICAgY2FzZSAneic6CisgICAgICAgICAgICAgICAgdmFyIHQg
PSAodGhpcy5vcmlnaW4ueiAtIG9mZnNldCkgLyB0aGlzLmRpcmVjdGlvbi56OworICAgICAgICAg
ICAgICAgIGlmICh0ID4gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKHRoaXMub3JpZ2lu
LnggKyAodGhpcy5kaXJlY3Rpb24ueCAqIC10KSwgdGhpcy5vcmlnaW4ueSArICh0aGlzLmRpcmVj
dGlvbi55ICogLXQpLCBvZmZzZXQpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ2hl
Y2tzIGlmIHJheSBpbnRlcnNlY3RzIGEgbWVzaAorICAgICAqIEBwYXJhbSBtZXNoIHRoZSBtZXNo
IHRvIGNoZWNrCisgICAgICogQHBhcmFtIGZhc3RDaGVjayBpZiBvbmx5IHRoZSBib3VuZGluZyBi
b3ggc2hvdWxkIGNoZWNrZWQKKyAgICAgKiBAcmV0dXJucyBwaWNraW5nIGluZm8gb2YgdGhlIGlu
dGVyc2VjdG9uCisgICAgICovCisgICAgUmF5LnByb3RvdHlwZS5pbnRlcnNlY3RzTWVzaCA9IGZ1
bmN0aW9uIChtZXNoLCBmYXN0Q2hlY2spIHsKKyAgICAgICAgdmFyIHRtID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhb
MF07CisgICAgICAgIG1lc2guZ2V0V29ybGRNYXRyaXgoKS5pbnZlcnRUb1JlZih0bSk7CisgICAg
ICAgIGlmICh0aGlzLl90bXBSYXkpIHsKKyAgICAgICAgICAgIFJheS5UcmFuc2Zvcm1Ub1JlZih0
aGlzLCB0bSwgdGhpcy5fdG1wUmF5KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHRoaXMuX3RtcFJheSA9IFJheS5UcmFuc2Zvcm0odGhpcywgdG0pOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBtZXNoLmludGVyc2VjdHModGhpcy5fdG1wUmF5LCBmYXN0Q2hlY2sp
OworICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHJheSBpbnRlcnNlY3RzIGEgbWVz
aAorICAgICAqIEBwYXJhbSBtZXNoZXMgdGhlIG1lc2hlcyB0byBjaGVjaworICAgICAqIEBwYXJh
bSBmYXN0Q2hlY2sgaWYgb25seSB0aGUgYm91bmRpbmcgYm94IHNob3VsZCBjaGVja2VkCisgICAg
ICogQHBhcmFtIHJlc3VsdHMgYXJyYXkgdG8gc3RvcmUgcmVzdWx0IGluCisgICAgICogQHJldHVy
bnMgQXJyYXkgb2YgcGlja2luZyBpbmZvcworICAgICAqLworICAgIFJheS5wcm90b3R5cGUuaW50
ZXJzZWN0c01lc2hlcyA9IGZ1bmN0aW9uIChtZXNoZXMsIGZhc3RDaGVjaywgcmVzdWx0cykgewor
ICAgICAgICBpZiAocmVzdWx0cykgeworICAgICAgICAgICAgcmVzdWx0cy5sZW5ndGggPSAwOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0cyA9IFtdOworICAg
ICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzaGVzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICB2YXIgcGlja0luZm8gPSB0aGlzLmludGVyc2VjdHNNZXNoKG1lc2hlc1tp
XSwgZmFzdENoZWNrKTsKKyAgICAgICAgICAgIGlmIChwaWNrSW5mby5oaXQpIHsKKyAgICAgICAg
ICAgICAgICByZXN1bHRzLnB1c2gocGlja0luZm8pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJlc3VsdHMuc29ydCh0aGlzLl9jb21wYXJlUGlja2luZ0luZm8pOworICAgICAg
ICByZXR1cm4gcmVzdWx0czsKKyAgICB9OworICAgIFJheS5wcm90b3R5cGUuX2NvbXBhcmVQaWNr
aW5nSW5mbyA9IGZ1bmN0aW9uIChwaWNraW5nSW5mb0EsIHBpY2tpbmdJbmZvQikgeworICAgICAg
ICBpZiAocGlja2luZ0luZm9BLmRpc3RhbmNlIDwgcGlja2luZ0luZm9CLmRpc3RhbmNlKSB7Cisg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocGlja2lu
Z0luZm9BLmRpc3RhbmNlID4gcGlja2luZ0luZm9CLmRpc3RhbmNlKSB7CisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcnNlY3Rpb24gdGVzdCBi
ZXR3ZWVuIHRoZSByYXkgYW5kIGEgZ2l2ZW4gc2VnbWVudCB3aGl0aGluIGEgZ2l2ZW4gdG9sZXJh
bmNlICh0aHJlc2hvbGQpCisgICAgICogQHBhcmFtIHNlZ2EgdGhlIGZpcnN0IHBvaW50IG9mIHRo
ZSBzZWdtZW50IHRvIHRlc3QgdGhlIGludGVyc2VjdGlvbiBhZ2FpbnN0CisgICAgICogQHBhcmFt
IHNlZ2IgdGhlIHNlY29uZCBwb2ludCBvZiB0aGUgc2VnbWVudCB0byB0ZXN0IHRoZSBpbnRlcnNl
Y3Rpb24gYWdhaW5zdAorICAgICAqIEBwYXJhbSB0aHJlc2hvbGQgdGhlIHRvbGVyYW5jZSBtYXJn
aW4sIGlmIHRoZSByYXkgZG9lc24ndCBpbnRlcnNlY3QgdGhlIHNlZ21lbnQgYnV0IGlzIGNsb3Nl
IHRvIHRoZSBnaXZlbiB0aHJlc2hvbGQsIHRoZSBpbnRlcnNlY3Rpb24gaXMgc3VjY2Vzc2Z1bAor
ICAgICAqIEByZXR1cm4gdGhlIGRpc3RhbmNlIGZyb20gdGhlIHJheSBvcmlnaW4gdG8gdGhlIGlu
dGVyc2VjdGlvbiBwb2ludCBpZiB0aGVyZSdzIGludGVyc2VjdGlvbiwgb3IgLTEgaWYgdGhlcmUn
cyBubyBpbnRlcnNlY3Rpb24KKyAgICAgKi8KKyAgICBSYXkucHJvdG90eXBlLmludGVyc2VjdGlv
blNlZ21lbnQgPSBmdW5jdGlvbiAoc2VnYSwgc2VnYiwgdGhyZXNob2xkKSB7CisgICAgICAgIHZh
ciBvID0gdGhpcy5vcmlnaW47CisgICAgICAgIHZhciB1ID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdOworICAg
ICAgICB2YXIgcnNlZ2IgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMV07CisgICAgICAgIHZhciB2ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5W
ZWN0b3IzWzJdOworICAgICAgICB2YXIgdyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1szXTsKKyAgICAgICAgc2Vn
Yi5zdWJ0cmFjdFRvUmVmKHNlZ2EsIHUpOworICAgICAgICB0aGlzLmRpcmVjdGlvbi5zY2FsZVRv
UmVmKFJheS5yYXlsLCB2KTsKKyAgICAgICAgby5hZGRUb1JlZih2LCByc2VnYik7CisgICAgICAg
IHNlZ2Euc3VidHJhY3RUb1JlZihvLCB3KTsKKyAgICAgICAgdmFyIGEgPSBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRvdCh1LCB1KTsg
Ly8gYWx3YXlzID49IDAKKyAgICAgICAgdmFyIGIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRvdCh1LCB2KTsKKyAgICAgICAgdmFy
IGMgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVj
dG9yMyJdLkRvdCh2LCB2KTsgLy8gYWx3YXlzID49IDAKKyAgICAgICAgdmFyIGQgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRvdCh1
LCB3KTsKKyAgICAgICAgdmFyIGUgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRvdCh2LCB3KTsKKyAgICAgICAgdmFyIEQgPSBhICog
YyAtIGIgKiBiOyAvLyBhbHdheXMgPj0gMAorICAgICAgICB2YXIgc2MsIHNOLCBzRCA9IEQ7IC8v
IHNjID0gc04gLyBzRCwgZGVmYXVsdCBzRCA9IEQgPj0gMAorICAgICAgICB2YXIgdGMsIHROLCB0
RCA9IEQ7IC8vIHRjID0gdE4gLyB0RCwgZGVmYXVsdCB0RCA9IEQgPj0gMAorICAgICAgICAvLyBj
b21wdXRlIHRoZSBsaW5lIHBhcmFtZXRlcnMgb2YgdGhlIHR3byBjbG9zZXN0IHBvaW50cworICAg
ICAgICBpZiAoRCA8IFJheS5zbWFsbG51bSkgeyAvLyB0aGUgbGluZXMgYXJlIGFsbW9zdCBwYXJh
bGxlbAorICAgICAgICAgICAgc04gPSAwLjA7IC8vIGZvcmNlIHVzaW5nIHBvaW50IFAwIG9uIHNl
Z21lbnQgUzEKKyAgICAgICAgICAgIHNEID0gMS4wOyAvLyB0byBwcmV2ZW50IHBvc3NpYmxlIGRp
dmlzaW9uIGJ5IDAuMCBsYXRlcgorICAgICAgICAgICAgdE4gPSBlOworICAgICAgICAgICAgdEQg
PSBjOworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAvLyBnZXQgdGhlIGNsb3Nlc3QgcG9pbnRz
IG9uIHRoZSBpbmZpbml0ZSBsaW5lcworICAgICAgICAgICAgc04gPSAoYiAqIGUgLSBjICogZCk7
CisgICAgICAgICAgICB0TiA9IChhICogZSAtIGIgKiBkKTsKKyAgICAgICAgICAgIGlmIChzTiA8
IDAuMCkgeyAvLyBzYyA8IDAgPT4gdGhlIHM9MCBlZGdlIGlzIHZpc2libGUKKyAgICAgICAgICAg
ICAgICBzTiA9IDAuMDsKKyAgICAgICAgICAgICAgICB0TiA9IGU7CisgICAgICAgICAgICAgICAg
dEQgPSBjOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc04gPiBzRCkgeyAv
LyBzYyA+IDEgPT4gdGhlIHM9MSBlZGdlIGlzIHZpc2libGUKKyAgICAgICAgICAgICAgICBzTiA9
IHNEOworICAgICAgICAgICAgICAgIHROID0gZSArIGI7CisgICAgICAgICAgICAgICAgdEQgPSBj
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0TiA8IDAuMCkgeyAvLyB0
YyA8IDAgPT4gdGhlIHQ9MCBlZGdlIGlzIHZpc2libGUKKyAgICAgICAgICAgIHROID0gMC4wOwor
ICAgICAgICAgICAgLy8gcmVjb21wdXRlIHNjIGZvciB0aGlzIGVkZ2UKKyAgICAgICAgICAgIGlm
ICgtZCA8IDAuMCkgeworICAgICAgICAgICAgICAgIHNOID0gMC4wOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAoLWQgPiBhKSB7CisgICAgICAgICAgICAgICAgc04gPSBzRDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNOID0g
LWQ7CisgICAgICAgICAgICAgICAgc0QgPSBhOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHROID4gdEQpIHsgLy8gdGMgPiAxID0+IHRoZSB0PTEgZWRnZSBpcyB2
aXNpYmxlCisgICAgICAgICAgICB0TiA9IHREOworICAgICAgICAgICAgLy8gcmVjb21wdXRlIHNj
IGZvciB0aGlzIGVkZ2UKKyAgICAgICAgICAgIGlmICgoLWQgKyBiKSA8IDAuMCkgeworICAgICAg
ICAgICAgICAgIHNOID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCgt
ZCArIGIpID4gYSkgeworICAgICAgICAgICAgICAgIHNOID0gc0Q7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzTiA9ICgtZCArIGIpOworICAgICAg
ICAgICAgICAgIHNEID0gYTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBm
aW5hbGx5IGRvIHRoZSBkaXZpc2lvbiB0byBnZXQgc2MgYW5kIHRjCisgICAgICAgIHNjID0gKE1h
dGguYWJzKHNOKSA8IFJheS5zbWFsbG51bSA/IDAuMCA6IHNOIC8gc0QpOworICAgICAgICB0YyA9
IChNYXRoLmFicyh0TikgPCBSYXkuc21hbGxudW0gPyAwLjAgOiB0TiAvIHREKTsKKyAgICAgICAg
Ly8gZ2V0IHRoZSBkaWZmZXJlbmNlIG9mIHRoZSB0d28gY2xvc2VzdCBwb2ludHMKKyAgICAgICAg
dmFyIHF0YyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJUbXBWZWN0b3JzIl0uVmVjdG9yM1s0XTsKKyAgICAgICAgdi5zY2FsZVRvUmVmKHRjLCBxdGMp
OworICAgICAgICB2YXIgcXNjID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzVdOworICAgICAgICB1LnNjYWxlVG9S
ZWYoc2MsIHFzYyk7CisgICAgICAgIHFzYy5hZGRJblBsYWNlKHcpOworICAgICAgICB2YXIgZFAg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG1wVmVj
dG9ycyJdLlZlY3RvcjNbNl07CisgICAgICAgIHFzYy5zdWJ0cmFjdFRvUmVmKHF0YywgZFApOyAv
LyA9IFMxKHNjKSAtIFMyKHRjKQorICAgICAgICB2YXIgaXNJbnRlcnNlY3RlZCA9ICh0YyA+IDAp
ICYmICh0YyA8PSB0aGlzLmxlbmd0aCkgJiYgKGRQLmxlbmd0aFNxdWFyZWQoKSA8ICh0aHJlc2hv
bGQgKiB0aHJlc2hvbGQpKTsgLy8gcmV0dXJuIGludGVyc2VjdGlvbiByZXN1bHQKKyAgICAgICAg
aWYgKGlzSW50ZXJzZWN0ZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBxc2MubGVuZ3RoKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH07CisgICAgLyoqCisgICAgICogVXBk
YXRlIHRoZSByYXkgZnJvbSB2aWV3cG9ydCBwb3NpdGlvbgorICAgICAqIEBwYXJhbSB4IHBvc2l0
aW9uCisgICAgICogQHBhcmFtIHkgeSBwb3NpdGlvbgorICAgICAqIEBwYXJhbSB2aWV3cG9ydFdp
ZHRoIHZpZXdwb3J0IHdpZHRoCisgICAgICogQHBhcmFtIHZpZXdwb3J0SGVpZ2h0IHZpZXdwb3J0
IGhlaWdodAorICAgICAqIEBwYXJhbSB3b3JsZCB3b3JsZCBtYXRyaXgKKyAgICAgKiBAcGFyYW0g
dmlldyB2aWV3IG1hdHJpeAorICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIHByb2plY3Rpb24gbWF0
cml4CisgICAgICogQHJldHVybnMgdGhpcyByYXkgdXBkYXRlZAorICAgICAqLworICAgIFJheS5w
cm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKHgsIHksIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0
SGVpZ2h0LCB3b3JsZCwgdmlldywgcHJvamVjdGlvbikgeworICAgICAgICB0aGlzLnVucHJvamVj
dFJheVRvUmVmKHgsIHksIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB3b3JsZCwgdmll
dywgcHJvamVjdGlvbik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLy8gU3Rh
dGljcworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSByYXkgd2l0aCBvcmlnaW4gYW5kIGRpcmVj
dGlvbiBvZiAwLDAsMAorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgcmF5CisgICAgICovCisgICAg
UmF5Llplcm8gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgUmF5KF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybygp
LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9y
MyJdLlplcm8oKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHJheSBm
cm9tIHNjcmVlbiBzcGFjZSBhbmQgdmlld3BvcnQKKyAgICAgKiBAcGFyYW0geCBwb3NpdGlvbgor
ICAgICAqIEBwYXJhbSB5IHkgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gdmlld3BvcnRXaWR0aCB2
aWV3cG9ydCB3aWR0aAorICAgICAqIEBwYXJhbSB2aWV3cG9ydEhlaWdodCB2aWV3cG9ydCBoZWln
aHQKKyAgICAgKiBAcGFyYW0gd29ybGQgd29ybGQgbWF0cml4CisgICAgICogQHBhcmFtIHZpZXcg
dmlldyBtYXRyaXgKKyAgICAgKiBAcGFyYW0gcHJvamVjdGlvbiBwcm9qZWN0aW9uIG1hdHJpeAor
ICAgICAqIEByZXR1cm5zIG5ldyByYXkKKyAgICAgKi8KKyAgICBSYXkuQ3JlYXRlTmV3ID0gZnVu
Y3Rpb24gKHgsIHksIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB3b3JsZCwgdmlldywg
cHJvamVjdGlvbikgeworICAgICAgICB2YXIgcmVzdWx0ID0gUmF5Llplcm8oKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC51cGRhdGUoeCwgeSwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQs
IHdvcmxkLCB2aWV3LCBwcm9qZWN0aW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICogRnVuY3Rp
b24gd2lsbCBjcmVhdGUgYSBuZXcgdHJhbnNmb3JtZWQgcmF5IHN0YXJ0aW5nIGZyb20gb3JpZ2lu
IGFuZCBlbmRpbmcgYXQgdGhlIGVuZCBwb2ludC4gUmF5J3MgbGVuZ3RoIHdpbGwgYmUgc2V0LCBh
bmQgcmF5IHdpbGwgYmUKKyAgICAqIHRyYW5zZm9ybWVkIHRvIHRoZSBnaXZlbiB3b3JsZCBtYXRy
aXguCisgICAgKiBAcGFyYW0gb3JpZ2luIFRoZSBvcmlnaW4gcG9pbnQKKyAgICAqIEBwYXJhbSBl
bmQgVGhlIGVuZCBwb2ludAorICAgICogQHBhcmFtIHdvcmxkIGEgbWF0cml4IHRvIHRyYW5zZm9y
bSB0aGUgcmF5IHRvLiBEZWZhdWx0IGlzIHRoZSBpZGVudGl0eSBtYXRyaXguCisgICAgKiBAcmV0
dXJucyB0aGUgbmV3IHJheQorICAgICovCisgICAgUmF5LkNyZWF0ZU5ld0Zyb21UbyA9IGZ1bmN0
aW9uIChvcmlnaW4sIGVuZCwgd29ybGQpIHsKKyAgICAgICAgaWYgKHdvcmxkID09PSB2b2lkIDAp
IHsgd29ybGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siTWF0cml4Il0uSWRlbnRpdHlSZWFkT25seTsgfQorICAgICAgICB2YXIgZGlyZWN0aW9uID0g
ZW5kLnN1YnRyYWN0KG9yaWdpbik7CisgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLnNxcnQoKGRp
cmVjdGlvbi54ICogZGlyZWN0aW9uLngpICsgKGRpcmVjdGlvbi55ICogZGlyZWN0aW9uLnkpICsg
KGRpcmVjdGlvbi56ICogZGlyZWN0aW9uLnopKTsKKyAgICAgICAgZGlyZWN0aW9uLm5vcm1hbGl6
ZSgpOworICAgICAgICByZXR1cm4gUmF5LlRyYW5zZm9ybShuZXcgUmF5KG9yaWdpbiwgZGlyZWN0
aW9uLCBsZW5ndGgpLCB3b3JsZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUcmFuc2Zvcm1z
IGEgcmF5IGJ5IGEgbWF0cml4CisgICAgICogQHBhcmFtIHJheSByYXkgdG8gdHJhbnNmb3JtCisg
ICAgICogQHBhcmFtIG1hdHJpeCBtYXRyaXggdG8gYXBwbHkKKyAgICAgKiBAcmV0dXJucyB0aGUg
cmVzdWx0aW5nIG5ldyByYXkKKyAgICAgKi8KKyAgICBSYXkuVHJhbnNmb3JtID0gZnVuY3Rpb24g
KHJheSwgbWF0cml4KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgUmF5KG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAsIDAs
IDApLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlY3RvcjMiXSgwLCAwLCAwKSk7CisgICAgICAgIFJheS5UcmFuc2Zvcm1Ub1JlZihyYXksIG1h
dHJpeCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFRyYW5zZm9ybXMgYSByYXkgYnkgYSBtYXRyaXgKKyAgICAgKiBAcGFyYW0gcmF5IHJh
eSB0byB0cmFuc2Zvcm0KKyAgICAgKiBAcGFyYW0gbWF0cml4IG1hdHJpeCB0byBhcHBseQorICAg
ICAqIEBwYXJhbSByZXN1bHQgcmF5IHRvIHN0b3JlIHJlc3VsdCBpbgorICAgICAqLworICAgIFJh
eS5UcmFuc2Zvcm1Ub1JlZiA9IGZ1bmN0aW9uIChyYXksIG1hdHJpeCwgcmVzdWx0KSB7CisgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0
b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihyYXkub3JpZ2luLCBtYXRyaXgsIHJlc3Vs
dC5vcmlnaW4pOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKHJheS5kaXJlY3Rpb24s
IG1hdHJpeCwgcmVzdWx0LmRpcmVjdGlvbik7CisgICAgICAgIHJlc3VsdC5sZW5ndGggPSByYXku
bGVuZ3RoOworICAgICAgICB2YXIgZGlyID0gcmVzdWx0LmRpcmVjdGlvbjsKKyAgICAgICAgdmFy
IGxlbiA9IGRpci5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCEobGVuID09PSAwIHx8IGxlbiA9PT0g
MSkpIHsKKyAgICAgICAgICAgIHZhciBudW0gPSAxLjAgLyBsZW47CisgICAgICAgICAgICBkaXIu
eCAqPSBudW07CisgICAgICAgICAgICBkaXIueSAqPSBudW07CisgICAgICAgICAgICBkaXIueiAq
PSBudW07CisgICAgICAgICAgICByZXN1bHQubGVuZ3RoICo9IGxlbjsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICAqIFVucHJvamVjdCBhIHJheSBmcm9tIHNjcmVlbiBzcGFjZSB0
byBvYmplY3Qgc3BhY2UKKyAgICAgICogQHBhcmFtIHNvdXJjZVggZGVmaW5lcyB0aGUgc2NyZWVu
IHNwYWNlIHggY29vcmRpbmF0ZSB0byB1c2UKKyAgICAgICogQHBhcmFtIHNvdXJjZVkgZGVmaW5l
cyB0aGUgc2NyZWVuIHNwYWNlIHkgY29vcmRpbmF0ZSB0byB1c2UKKyAgICAgICogQHBhcmFtIHZp
ZXdwb3J0V2lkdGggZGVmaW5lcyB0aGUgY3VycmVudCB3aWR0aCBvZiB0aGUgdmlld3BvcnQKKyAg
ICAgICogQHBhcmFtIHZpZXdwb3J0SGVpZ2h0IGRlZmluZXMgdGhlIGN1cnJlbnQgaGVpZ2h0IG9m
IHRoZSB2aWV3cG9ydAorICAgICAgKiBAcGFyYW0gd29ybGQgZGVmaW5lcyB0aGUgd29ybGQgbWF0
cml4IHRvIHVzZSAoY2FuIGJlIHNldCB0byBJZGVudGl0eSB0byBnbyB0byB3b3JsZCBzcGFjZSkK
KyAgICAgICogQHBhcmFtIHZpZXcgZGVmaW5lcyB0aGUgdmlldyBtYXRyaXggdG8gdXNlCisgICAg
ICAqIEBwYXJhbSBwcm9qZWN0aW9uIGRlZmluZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IHRvIHVz
ZQorICAgICAgKi8KKyAgICBSYXkucHJvdG90eXBlLnVucHJvamVjdFJheVRvUmVmID0gZnVuY3Rp
b24gKHNvdXJjZVgsIHNvdXJjZVksIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB3b3Js
ZCwgdmlldywgcHJvamVjdGlvbikgeworICAgICAgICB2YXIgbWF0cml4ID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhb
MF07CisgICAgICAgIHdvcmxkLm11bHRpcGx5VG9SZWYodmlldywgbWF0cml4KTsKKyAgICAgICAg
bWF0cml4Lm11bHRpcGx5VG9SZWYocHJvamVjdGlvbiwgbWF0cml4KTsKKyAgICAgICAgbWF0cml4
LmludmVydCgpOworICAgICAgICB2YXIgbmVhclNjcmVlblNvdXJjZSA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1sw
XTsKKyAgICAgICAgbmVhclNjcmVlblNvdXJjZS54ID0gc291cmNlWCAvIHZpZXdwb3J0V2lkdGgg
KiAyIC0gMTsKKyAgICAgICAgbmVhclNjcmVlblNvdXJjZS55ID0gLShzb3VyY2VZIC8gdmlld3Bv
cnRIZWlnaHQgKiAyIC0gMSk7CisgICAgICAgIG5lYXJTY3JlZW5Tb3VyY2UueiA9IC0xLjA7Cisg
ICAgICAgIHZhciBmYXJTY3JlZW5Tb3VyY2UgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMV0uY29weUZyb21GbG9h
dHMobmVhclNjcmVlblNvdXJjZS54LCBuZWFyU2NyZWVuU291cmNlLnksIDEuMCk7CisgICAgICAg
IHZhciBuZWFyVmVjMyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1syXTsKKyAgICAgICAgdmFyIGZhclZlYzMgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG1wVmVjdG9y
cyJdLlZlY3RvcjNbM107CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uX1VucHJvamVjdEZyb21JbnZlcnRlZE1hdHJpeFRv
UmVmKG5lYXJTY3JlZW5Tb3VyY2UsIG1hdHJpeCwgbmVhclZlYzMpOworICAgICAgICBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLl9VbnBy
b2plY3RGcm9tSW52ZXJ0ZWRNYXRyaXhUb1JlZihmYXJTY3JlZW5Tb3VyY2UsIG1hdHJpeCwgZmFy
VmVjMyk7CisgICAgICAgIHRoaXMub3JpZ2luLmNvcHlGcm9tKG5lYXJWZWMzKTsKKyAgICAgICAg
ZmFyVmVjMy5zdWJ0cmFjdFRvUmVmKG5lYXJWZWMzLCB0aGlzLmRpcmVjdGlvbik7CisgICAgICAg
IHRoaXMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpOworICAgIH07CisgICAgUmF5LlRtcFZlY3RvcjMg
PSBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFycmF5VG9v
bHMiXS5CdWlsZEFycmF5KDYsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybyk7CisgICAgUmF5LnNtYWxsbnVtID0gMC4wMDAwMDAw
MTsKKyAgICBSYXkucmF5bCA9IDEwZTg7CisgICAgcmV0dXJuIFJheTsKK30oKSk7CisKK19zY2Vu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZSJdLnByb3RvdHlwZS5jcmVhdGVQ
aWNraW5nUmF5ID0gZnVuY3Rpb24gKHgsIHksIHdvcmxkLCBjYW1lcmEsIGNhbWVyYVZpZXdTcGFj
ZSkgeworICAgIGlmIChjYW1lcmFWaWV3U3BhY2UgPT09IHZvaWQgMCkgeyBjYW1lcmFWaWV3U3Bh
Y2UgPSBmYWxzZTsgfQorICAgIHZhciByZXN1bHQgPSBSYXkuWmVybygpOworICAgIHRoaXMuY3Jl
YXRlUGlja2luZ1JheVRvUmVmKHgsIHksIHdvcmxkLCByZXN1bHQsIGNhbWVyYSwgY2FtZXJhVmll
d1NwYWNlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJTY2VuZSJdLnByb3RvdHlwZS5jcmVhdGVQaWNraW5nUmF5VG9SZWYgPSBm
dW5jdGlvbiAoeCwgeSwgd29ybGQsIHJlc3VsdCwgY2FtZXJhLCBjYW1lcmFWaWV3U3BhY2UpIHsK
KyAgICBpZiAoY2FtZXJhVmlld1NwYWNlID09PSB2b2lkIDApIHsgY2FtZXJhVmlld1NwYWNlID0g
ZmFsc2U7IH0KKyAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRFbmdpbmUoKTsKKyAgICBpZiAoIWNh
bWVyYSkgeworICAgICAgICBpZiAoIXRoaXMuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIkFjdGl2ZSBjYW1lcmEgbm90IHNldCIpOworICAgICAgICB9CisgICAg
ICAgIGNhbWVyYSA9IHRoaXMuYWN0aXZlQ2FtZXJhOworICAgIH0KKyAgICB2YXIgY2FtZXJhVmll
d3BvcnQgPSBjYW1lcmEudmlld3BvcnQ7CisgICAgdmFyIHZpZXdwb3J0ID0gY2FtZXJhVmlld3Bv
cnQudG9HbG9iYWwoZW5naW5lLmdldFJlbmRlcldpZHRoKCksIGVuZ2luZS5nZXRSZW5kZXJIZWln
aHQoKSk7CisgICAgLy8gTW92aW5nIGNvb3JkaW5hdGVzIHRvIGxvY2FsIHZpZXdwb3J0IHdvcmxk
CisgICAgeCA9IHggLyBlbmdpbmUuZ2V0SGFyZHdhcmVTY2FsaW5nTGV2ZWwoKSAtIHZpZXdwb3J0
Lng7CisgICAgeSA9IHkgLyBlbmdpbmUuZ2V0SGFyZHdhcmVTY2FsaW5nTGV2ZWwoKSAtIChlbmdp
bmUuZ2V0UmVuZGVySGVpZ2h0KCkgLSB2aWV3cG9ydC55IC0gdmlld3BvcnQuaGVpZ2h0KTsKKyAg
ICByZXN1bHQudXBkYXRlKHgsIHksIHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQsIHdv
cmxkID8gd29ybGQgOiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siTWF0cml4Il0uSWRlbnRpdHlSZWFkT25seSwgY2FtZXJhVmlld1NwYWNlID8gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLklkZW50
aXR5UmVhZE9ubHkgOiBjYW1lcmEuZ2V0Vmlld01hdHJpeCgpLCBjYW1lcmEuZ2V0UHJvamVjdGlv
bk1hdHJpeCgpKTsKKyAgICByZXR1cm4gdGhpczsKK307Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siU2NlbmUiXS5wcm90b3R5cGUuY3JlYXRlUGlja2luZ1JheUluQ2FtZXJh
U3BhY2UgPSBmdW5jdGlvbiAoeCwgeSwgY2FtZXJhKSB7CisgICAgdmFyIHJlc3VsdCA9IFJheS5a
ZXJvKCk7CisgICAgdGhpcy5jcmVhdGVQaWNraW5nUmF5SW5DYW1lcmFTcGFjZVRvUmVmKHgsIHks
IHJlc3VsdCwgY2FtZXJhKTsKKyAgICByZXR1cm4gcmVzdWx0OworfTsKK19zY2VuZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZSJdLnByb3RvdHlwZS5jcmVhdGVQaWNraW5nUmF5
SW5DYW1lcmFTcGFjZVRvUmVmID0gZnVuY3Rpb24gKHgsIHksIHJlc3VsdCwgY2FtZXJhKSB7Cisg
ICAgaWYgKCFfQ29sbGlzaW9uc19waWNraW5nSW5mb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJQaWNraW5nSW5mbyJdKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgICB2
YXIgZW5naW5lID0gdGhpcy5nZXRFbmdpbmUoKTsKKyAgICBpZiAoIWNhbWVyYSkgeworICAgICAg
ICBpZiAoIXRoaXMuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkFjdGl2ZSBjYW1lcmEgbm90IHNldCIpOworICAgICAgICB9CisgICAgICAgIGNhbWVyYSA9IHRo
aXMuYWN0aXZlQ2FtZXJhOworICAgIH0KKyAgICB2YXIgY2FtZXJhVmlld3BvcnQgPSBjYW1lcmEu
dmlld3BvcnQ7CisgICAgdmFyIHZpZXdwb3J0ID0gY2FtZXJhVmlld3BvcnQudG9HbG9iYWwoZW5n
aW5lLmdldFJlbmRlcldpZHRoKCksIGVuZ2luZS5nZXRSZW5kZXJIZWlnaHQoKSk7CisgICAgdmFy
IGlkZW50aXR5ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgLy8gTW92aW5nIGNvb3JkaW5hdGVzIHRvIGxv
Y2FsIHZpZXdwb3J0IHdvcmxkCisgICAgeCA9IHggLyBlbmdpbmUuZ2V0SGFyZHdhcmVTY2FsaW5n
TGV2ZWwoKSAtIHZpZXdwb3J0Lng7CisgICAgeSA9IHkgLyBlbmdpbmUuZ2V0SGFyZHdhcmVTY2Fs
aW5nTGV2ZWwoKSAtIChlbmdpbmUuZ2V0UmVuZGVySGVpZ2h0KCkgLSB2aWV3cG9ydC55IC0gdmll
d3BvcnQuaGVpZ2h0KTsKKyAgICByZXN1bHQudXBkYXRlKHgsIHksIHZpZXdwb3J0LndpZHRoLCB2
aWV3cG9ydC5oZWlnaHQsIGlkZW50aXR5LCBpZGVudGl0eSwgY2FtZXJhLmdldFByb2plY3Rpb25N
YXRyaXgoKSk7CisgICAgcmV0dXJuIHRoaXM7Cit9OworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIlNjZW5lIl0ucHJvdG90eXBlLl9pbnRlcm5hbFBpY2sgPSBmdW5jdGlvbiAo
cmF5RnVuY3Rpb24sIHByZWRpY2F0ZSwgZmFzdENoZWNrLCB0cmlhbmdsZVByZWRpY2F0ZSkgewor
ICAgIGlmICghX0NvbGxpc2lvbnNfcGlja2luZ0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siUGlja2luZ0luZm8iXSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAg
dmFyIHBpY2tpbmdJbmZvID0gbnVsbDsKKyAgICBmb3IgKHZhciBtZXNoSW5kZXggPSAwOyBtZXNo
SW5kZXggPCB0aGlzLm1lc2hlcy5sZW5ndGg7IG1lc2hJbmRleCsrKSB7CisgICAgICAgIHZhciBt
ZXNoID0gdGhpcy5tZXNoZXNbbWVzaEluZGV4XTsKKyAgICAgICAgaWYgKHByZWRpY2F0ZSkgewor
ICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUobWVzaCkpIHsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghbWVzaC5p
c0VuYWJsZWQoKSB8fCAhbWVzaC5pc1Zpc2libGUgfHwgIW1lc2guaXNQaWNrYWJsZSkgeworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHdvcmxkID0gbWVzaC5n
ZXRXb3JsZE1hdHJpeCgpOworICAgICAgICB2YXIgcmF5ID0gcmF5RnVuY3Rpb24od29ybGQpOwor
ICAgICAgICB2YXIgcmVzdWx0ID0gbWVzaC5pbnRlcnNlY3RzKHJheSwgZmFzdENoZWNrLCB0cmlh
bmdsZVByZWRpY2F0ZSk7CisgICAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuaGl0KSB7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWZhc3RDaGVjayAm
JiBwaWNraW5nSW5mbyAhPSBudWxsICYmIHJlc3VsdC5kaXN0YW5jZSA+PSBwaWNraW5nSW5mby5k
aXN0YW5jZSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcGlj
a2luZ0luZm8gPSByZXN1bHQ7CisgICAgICAgIGlmIChmYXN0Q2hlY2spIHsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwaWNraW5nSW5mbyB8fCBuZXcg
X0NvbGxpc2lvbnNfcGlja2luZ0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUGlj
a2luZ0luZm8iXSgpOworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJT
Y2VuZSJdLnByb3RvdHlwZS5faW50ZXJuYWxNdWx0aVBpY2sgPSBmdW5jdGlvbiAocmF5RnVuY3Rp
b24sIHByZWRpY2F0ZSwgdHJpYW5nbGVQcmVkaWNhdGUpIHsKKyAgICBpZiAoIV9Db2xsaXNpb25z
X3BpY2tpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBpY2tpbmdJbmZvIl0p
IHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHZhciBwaWNraW5nSW5mb3MgPSBu
ZXcgQXJyYXkoKTsKKyAgICBmb3IgKHZhciBtZXNoSW5kZXggPSAwOyBtZXNoSW5kZXggPCB0aGlz
Lm1lc2hlcy5sZW5ndGg7IG1lc2hJbmRleCsrKSB7CisgICAgICAgIHZhciBtZXNoID0gdGhpcy5t
ZXNoZXNbbWVzaEluZGV4XTsKKyAgICAgICAgaWYgKHByZWRpY2F0ZSkgeworICAgICAgICAgICAg
aWYgKCFwcmVkaWNhdGUobWVzaCkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghbWVzaC5pc0VuYWJsZWQoKSB8
fCAhbWVzaC5pc1Zpc2libGUgfHwgIW1lc2guaXNQaWNrYWJsZSkgeworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHdvcmxkID0gbWVzaC5nZXRXb3JsZE1hdHJp
eCgpOworICAgICAgICB2YXIgcmF5ID0gcmF5RnVuY3Rpb24od29ybGQpOworICAgICAgICB2YXIg
cmVzdWx0ID0gbWVzaC5pbnRlcnNlY3RzKHJheSwgZmFsc2UsIHRyaWFuZ2xlUHJlZGljYXRlKTsK
KyAgICAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5oaXQpIHsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIHBpY2tpbmdJbmZvcy5wdXNoKHJlc3VsdCk7CisgICAg
fQorICAgIHJldHVybiBwaWNraW5nSW5mb3M7Cit9OworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIlNjZW5lIl0ucHJvdG90eXBlLnBpY2sgPSBmdW5jdGlvbiAoeCwgeSwgcHJl
ZGljYXRlLCBmYXN0Q2hlY2ssIGNhbWVyYSwgdHJpYW5nbGVQcmVkaWNhdGUpIHsKKyAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgIGlmICghX0NvbGxpc2lvbnNfcGlja2luZ0luZm9fX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siUGlja2luZ0luZm8iXSkgeworICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9CisgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2ludGVybmFsUGljayhmdW5jdGlvbiAo
d29ybGQpIHsKKyAgICAgICAgaWYgKCFfdGhpcy5fdGVtcFBpY2tpbmdSYXkpIHsKKyAgICAgICAg
ICAgIF90aGlzLl90ZW1wUGlja2luZ1JheSA9IFJheS5aZXJvKCk7CisgICAgICAgIH0KKyAgICAg
ICAgX3RoaXMuY3JlYXRlUGlja2luZ1JheVRvUmVmKHgsIHksIHdvcmxkLCBfdGhpcy5fdGVtcFBp
Y2tpbmdSYXksIGNhbWVyYSB8fCBudWxsKTsKKyAgICAgICAgcmV0dXJuIF90aGlzLl90ZW1wUGlj
a2luZ1JheTsKKyAgICB9LCBwcmVkaWNhdGUsIGZhc3RDaGVjaywgdHJpYW5nbGVQcmVkaWNhdGUp
OworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnJheSA9IHRoaXMuY3JlYXRlUGlj
a2luZ1JheSh4LCB5LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siTWF0cml4Il0uSWRlbnRpdHkoKSwgY2FtZXJhIHx8IG51bGwpOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJT
Y2VuZSJdLnByb3RvdHlwZS5waWNrV2l0aFJheSA9IGZ1bmN0aW9uIChyYXksIHByZWRpY2F0ZSwg
ZmFzdENoZWNrLCB0cmlhbmdsZVByZWRpY2F0ZSkgeworICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgdmFyIHJlc3VsdCA9IHRoaXMuX2ludGVybmFsUGljayhmdW5jdGlvbiAod29ybGQpIHsKKyAg
ICAgICAgaWYgKCFfdGhpcy5fcGlja1dpdGhSYXlJbnZlcnNlTWF0cml4KSB7CisgICAgICAgICAg
ICBfdGhpcy5fcGlja1dpdGhSYXlJbnZlcnNlTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgICAg
IH0KKyAgICAgICAgd29ybGQuaW52ZXJ0VG9SZWYoX3RoaXMuX3BpY2tXaXRoUmF5SW52ZXJzZU1h
dHJpeCk7CisgICAgICAgIGlmICghX3RoaXMuX2NhY2hlZFJheUZvclRyYW5zZm9ybSkgeworICAg
ICAgICAgICAgX3RoaXMuX2NhY2hlZFJheUZvclRyYW5zZm9ybSA9IFJheS5aZXJvKCk7CisgICAg
ICAgIH0KKyAgICAgICAgUmF5LlRyYW5zZm9ybVRvUmVmKHJheSwgX3RoaXMuX3BpY2tXaXRoUmF5
SW52ZXJzZU1hdHJpeCwgX3RoaXMuX2NhY2hlZFJheUZvclRyYW5zZm9ybSk7CisgICAgICAgIHJl
dHVybiBfdGhpcy5fY2FjaGVkUmF5Rm9yVHJhbnNmb3JtOworICAgIH0sIHByZWRpY2F0ZSwgZmFz
dENoZWNrLCB0cmlhbmdsZVByZWRpY2F0ZSk7CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICBy
ZXN1bHQucmF5ID0gcmF5OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfTsKK19zY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZSJdLnByb3RvdHlwZS5tdWx0aVBpY2sg
PSBmdW5jdGlvbiAoeCwgeSwgcHJlZGljYXRlLCBjYW1lcmEsIHRyaWFuZ2xlUHJlZGljYXRlKSB7
CisgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxNdWx0aVBp
Y2soZnVuY3Rpb24gKHdvcmxkKSB7IHJldHVybiBfdGhpcy5jcmVhdGVQaWNraW5nUmF5KHgsIHks
IHdvcmxkLCBjYW1lcmEgfHwgbnVsbCk7IH0sIHByZWRpY2F0ZSwgdHJpYW5nbGVQcmVkaWNhdGUp
OworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZSJdLnByb3Rv
dHlwZS5tdWx0aVBpY2tXaXRoUmF5ID0gZnVuY3Rpb24gKHJheSwgcHJlZGljYXRlLCB0cmlhbmds
ZVByZWRpY2F0ZSkgeworICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgcmV0dXJuIHRoaXMuX2lu
dGVybmFsTXVsdGlQaWNrKGZ1bmN0aW9uICh3b3JsZCkgeworICAgICAgICBpZiAoIV90aGlzLl9w
aWNrV2l0aFJheUludmVyc2VNYXRyaXgpIHsKKyAgICAgICAgICAgIF90aGlzLl9waWNrV2l0aFJh
eUludmVyc2VNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgfQorICAgICAgICB3b3JsZC5p
bnZlcnRUb1JlZihfdGhpcy5fcGlja1dpdGhSYXlJbnZlcnNlTWF0cml4KTsKKyAgICAgICAgaWYg
KCFfdGhpcy5fY2FjaGVkUmF5Rm9yVHJhbnNmb3JtKSB7CisgICAgICAgICAgICBfdGhpcy5fY2Fj
aGVkUmF5Rm9yVHJhbnNmb3JtID0gUmF5Llplcm8oKTsKKyAgICAgICAgfQorICAgICAgICBSYXku
VHJhbnNmb3JtVG9SZWYocmF5LCBfdGhpcy5fcGlja1dpdGhSYXlJbnZlcnNlTWF0cml4LCBfdGhp
cy5fY2FjaGVkUmF5Rm9yVHJhbnNmb3JtKTsKKyAgICAgICAgcmV0dXJuIF90aGlzLl9jYWNoZWRS
YXlGb3JUcmFuc2Zvcm07CisgICAgfSwgcHJlZGljYXRlLCB0cmlhbmdsZVByZWRpY2F0ZSk7Cit9
OworX0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNhbWVyYSJd
LnByb3RvdHlwZS5nZXRGb3J3YXJkUmF5ID0gZnVuY3Rpb24gKGxlbmd0aCwgdHJhbnNmb3JtLCBv
cmlnaW4pIHsKKyAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsgbGVuZ3RoID0gMTAwOyB9Cisg
ICAgaWYgKCF0cmFuc2Zvcm0pIHsKKyAgICAgICAgdHJhbnNmb3JtID0gdGhpcy5nZXRXb3JsZE1h
dHJpeCgpOworICAgIH0KKyAgICBpZiAoIW9yaWdpbikgeworICAgICAgICBvcmlnaW4gPSB0aGlz
LnBvc2l0aW9uOworICAgIH0KKyAgICB2YXIgZm9yd2FyZCA9IHRoaXMuX3NjZW5lLnVzZVJpZ2h0
SGFuZGVkU3lzdGVtID8gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0oMCwgMCwgLTEpIDogbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0oMCwgMCwgMSk7CisgICAgdmFy
IGZvcndhcmRXb3JsZCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKGZvcndhcmQsIHRyYW5zZm9ybSk7Cisg
ICAgdmFyIGRpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uTm9ybWFsaXplKGZvcndhcmRXb3JsZCk7CisgICAgcmV0dXJu
IG5ldyBSYXkob3JpZ2luLCBkaXJlY3Rpb24sIGxlbmd0aCk7Cit9OworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9EZWJ1Zy9heGVzVmlld2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9EZWJ1Zy9heGVzVmlld2VyLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEF4ZXNWaWV3
ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXhlc1ZpZXdlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gQXhlc1ZpZXdlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRo
LnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfc3RhbmRh
cmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL3N0
YW5kYXJkTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfR2l6bW9zX2F4
aXNEcmFnR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL0dpem1vcy9heGlzRHJhZ0dpem1vICovICIuL0dpem1vcy9heGlzRHJhZ0dp
em1vLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworCisKKworCisvKioK
KyAgICAgKiBUaGUgQXhlcyB2aWV3ZXIgd2lsbCBzaG93IDMgYXhlcyBpbiBhIHNwZWNpZmljIHBv
aW50IGluIHNwYWNlCisgICAgICovCit2YXIgQXhlc1ZpZXdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEF4ZXNWaWV3ZXIKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJh
bSBzY2FsZUxpbmVzIGRlZmluZXMgYSBudW1iZXIgdXNlZCB0byBzY2FsZSBsaW5lIGxlbmd0aCAo
MSBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSByZW5kZXJpbmdHcm91cElkIGRlZmluZXMgYSBu
dW1iZXIgdXNlZCB0byBzZXQgdGhlIHJlbmRlcmluZ0dyb3VwSWQgb2YgdGhlIG1lc2hlcyAoMiBi
eSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSB4QXhpcyBkZWZpbmVzIHRoZSBub2RlIGhpZXJhcmNo
eSB1c2VkIHRvIHJlbmRlciB0aGUgeC1heGlzCisgICAgICogQHBhcmFtIHlBeGlzIGRlZmluZXMg
dGhlIG5vZGUgaGllcmFyY2h5IHVzZWQgdG8gcmVuZGVyIHRoZSB5LWF4aXMKKyAgICAgKiBAcGFy
YW0gekF4aXMgZGVmaW5lcyB0aGUgbm9kZSBoaWVyYXJjaHkgdXNlZCB0byByZW5kZXIgdGhlIHot
YXhpcworICAgICAqLworICAgIGZ1bmN0aW9uIEF4ZXNWaWV3ZXIoc2NlbmUsIHNjYWxlTGluZXMs
IHJlbmRlcmluZ0dyb3VwSWQsIHhBeGlzLCB5QXhpcywgekF4aXMpIHsKKyAgICAgICAgaWYgKHNj
YWxlTGluZXMgPT09IHZvaWQgMCkgeyBzY2FsZUxpbmVzID0gMTsgfQorICAgICAgICBpZiAocmVu
ZGVyaW5nR3JvdXBJZCA9PT0gdm9pZCAwKSB7IHJlbmRlcmluZ0dyb3VwSWQgPSAyOyB9CisgICAg
ICAgIHRoaXMuX3NjYWxlTGluZXNGYWN0b3IgPSA0OworICAgICAgICB0aGlzLl9pbnN0YW5jZWQg
PSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIG51bWJlciB1
c2VkIHRvIHNjYWxlIGxpbmUgbGVuZ3RoCisgICAgICAgICAqLworICAgICAgICB0aGlzLnNjYWxl
TGluZXMgPSAxOworICAgICAgICB0aGlzLnNjYWxlTGluZXMgPSBzY2FsZUxpbmVzOworICAgICAg
ICBpZiAoIXhBeGlzKSB7CisgICAgICAgICAgICB2YXIgcmVkQ29sb3JlZE1hdGVyaWFsID0gbmV3
IF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJTdGFuZGFyZE1hdGVyaWFsIl0oIiIsIHNjZW5lKTsKKyAgICAgICAgICAgIHJlZENvbG9yZWRN
YXRlcmlhbC5kaXNhYmxlTGlnaHRpbmcgPSB0cnVlOworICAgICAgICAgICAgcmVkQ29sb3JlZE1h
dGVyaWFsLmVtaXNzaXZlQ29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJDb2xvcjMiXS5SZWQoKS5zY2FsZSgwLjUpOworICAgICAgICAgICAgeEF4
aXMgPSBfR2l6bW9zX2F4aXNEcmFnR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
QXhpc0RyYWdHaXptbyJdLl9DcmVhdGVBcnJvdyhzY2VuZSwgcmVkQ29sb3JlZE1hdGVyaWFsKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIXlBeGlzKSB7CisgICAgICAgICAgICB2YXIgZ3JlZW5D
b2xvcmVkTWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlN0YW5kYXJkTWF0ZXJpYWwiXSgiIiwgc2NlbmUpOworICAg
ICAgICAgICAgZ3JlZW5Db2xvcmVkTWF0ZXJpYWwuZGlzYWJsZUxpZ2h0aW5nID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGdyZWVuQ29sb3JlZE1hdGVyaWFsLmVtaXNzaXZlQ29sb3IgPSBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb2xvcjMiXS5HcmVlbigpLnNj
YWxlKDAuNSk7CisgICAgICAgICAgICB5QXhpcyA9IF9HaXptb3NfYXhpc0RyYWdHaXptb19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBeGlzRHJhZ0dpem1vIl0uX0NyZWF0ZUFycm93KHNj
ZW5lLCBncmVlbkNvbG9yZWRNYXRlcmlhbCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF6QXhp
cykgeworICAgICAgICAgICAgdmFyIGJsdWVDb2xvcmVkTWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFs
c19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlN0YW5kYXJk
TWF0ZXJpYWwiXSgiIiwgc2NlbmUpOworICAgICAgICAgICAgYmx1ZUNvbG9yZWRNYXRlcmlhbC5k
aXNhYmxlTGlnaHRpbmcgPSB0cnVlOworICAgICAgICAgICAgYmx1ZUNvbG9yZWRNYXRlcmlhbC5l
bWlzc2l2ZUNvbG9yID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siQ29sb3IzIl0uQmx1ZSgpLnNjYWxlKDAuNSk7CisgICAgICAgICAgICB6QXhpcyA9IF9H
aXptb3NfYXhpc0RyYWdHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBeGlzRHJh
Z0dpem1vIl0uX0NyZWF0ZUFycm93KHNjZW5lLCBibHVlQ29sb3JlZE1hdGVyaWFsKTsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl94QXhpcyA9IHhBeGlzOworICAgICAgICB0aGlzLl94QXhpcy5z
Y2FsaW5nLnNldEFsbCh0aGlzLnNjYWxlTGluZXMgKiB0aGlzLl9zY2FsZUxpbmVzRmFjdG9yKTsK
KyAgICAgICAgdGhpcy5feUF4aXMgPSB5QXhpczsKKyAgICAgICAgdGhpcy5feUF4aXMuc2NhbGlu
Zy5zZXRBbGwodGhpcy5zY2FsZUxpbmVzICogdGhpcy5fc2NhbGVMaW5lc0ZhY3Rvcik7CisgICAg
ICAgIHRoaXMuX3pBeGlzID0gekF4aXM7CisgICAgICAgIHRoaXMuX3pBeGlzLnNjYWxpbmcuc2V0
QWxsKHRoaXMuc2NhbGVMaW5lcyAqIHRoaXMuX3NjYWxlTGluZXNGYWN0b3IpOworICAgICAgICBp
ZiAocmVuZGVyaW5nR3JvdXBJZCAhPSBudWxsKSB7CisgICAgICAgICAgICBBeGVzVmlld2VyLl9T
ZXRSZW5kZXJpbmdHcm91cElkKHRoaXMuX3hBeGlzLCByZW5kZXJpbmdHcm91cElkKTsKKyAgICAg
ICAgICAgIEF4ZXNWaWV3ZXIuX1NldFJlbmRlcmluZ0dyb3VwSWQodGhpcy5feUF4aXMsIHJlbmRl
cmluZ0dyb3VwSWQpOworICAgICAgICAgICAgQXhlc1ZpZXdlci5fU2V0UmVuZGVyaW5nR3JvdXBJ
ZCh0aGlzLl96QXhpcywgcmVuZGVyaW5nR3JvdXBJZCk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLnVwZGF0ZShuZXcgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgpLCBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlJpZ2h0KCks
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0uVXAoKSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlZlY3RvcjMiXS5Gb3J3YXJkKCkpOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
QXhlc1ZpZXdlci5wcm90b3R5cGUsICJ4QXhpcyIsIHsKKyAgICAgICAgLyoqIEdldHMgdGhlIG5v
ZGUgaGllcmFyY2h5IHVzZWQgdG8gcmVuZGVyIHgtYXhpcyAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl94QXhpczsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEF4ZXNWaWV3ZXIucHJvdG90eXBlLCAieUF4
aXMiLCB7CisgICAgICAgIC8qKiBHZXRzIHRoZSBub2RlIGhpZXJhcmNoeSB1c2VkIHRvIHJlbmRl
ciB5LWF4aXMgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5feUF4aXM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShBeGVzVmlld2VyLnByb3RvdHlwZSwgInpBeGlzIiwgeworICAgICAgICAvKiogR2V0cyB0
aGUgbm9kZSBoaWVyYXJjaHkgdXNlZCB0byByZW5kZXIgei1heGlzICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3pBeGlzOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSB0aGUgdmlld2VyIHRvIHVwZGF0ZQorICAg
ICAqIEBwYXJhbSBwb3NpdGlvbiBkZWZpbmVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgdmlld2VyCisg
ICAgICogQHBhcmFtIHhheGlzIGRlZmluZXMgdGhlIHggYXhpcyBvZiB0aGUgdmlld2VyCisgICAg
ICogQHBhcmFtIHlheGlzIGRlZmluZXMgdGhlIHkgYXhpcyBvZiB0aGUgdmlld2VyCisgICAgICog
QHBhcmFtIHpheGlzIGRlZmluZXMgdGhlIHogYXhpcyBvZiB0aGUgdmlld2VyCisgICAgICovCisg
ICAgQXhlc1ZpZXdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB4YXhp
cywgeWF4aXMsIHpheGlzKSB7CisgICAgICAgIHRoaXMuX3hBeGlzLnBvc2l0aW9uLmNvcHlGcm9t
KHBvc2l0aW9uKTsKKyAgICAgICAgdGhpcy5feEF4aXMuc2V0RGlyZWN0aW9uKHhheGlzKTsKKyAg
ICAgICAgdGhpcy5feEF4aXMuc2NhbGluZy5zZXRBbGwodGhpcy5zY2FsZUxpbmVzICogdGhpcy5f
c2NhbGVMaW5lc0ZhY3Rvcik7CisgICAgICAgIHRoaXMuX3lBeGlzLnBvc2l0aW9uLmNvcHlGcm9t
KHBvc2l0aW9uKTsKKyAgICAgICAgdGhpcy5feUF4aXMuc2V0RGlyZWN0aW9uKHlheGlzKTsKKyAg
ICAgICAgdGhpcy5feUF4aXMuc2NhbGluZy5zZXRBbGwodGhpcy5zY2FsZUxpbmVzICogdGhpcy5f
c2NhbGVMaW5lc0ZhY3Rvcik7CisgICAgICAgIHRoaXMuX3pBeGlzLnBvc2l0aW9uLmNvcHlGcm9t
KHBvc2l0aW9uKTsKKyAgICAgICAgdGhpcy5fekF4aXMuc2V0RGlyZWN0aW9uKHpheGlzKTsKKyAg
ICAgICAgdGhpcy5fekF4aXMuc2NhbGluZy5zZXRBbGwodGhpcy5zY2FsZUxpbmVzICogdGhpcy5f
c2NhbGVMaW5lc0ZhY3Rvcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIGlu
c3RhbmNlIG9mIHRoaXMgYXhlcyB2aWV3ZXIuCisgICAgICogQHJldHVybnMgYSBuZXcgYXhlcyB2
aWV3ZXIgd2l0aCBpbnN0YW5jZWQgbWVzaGVzCisgICAgICovCisgICAgQXhlc1ZpZXdlci5wcm90
b3R5cGUuY3JlYXRlSW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB4QXhpcyA9
IF9HaXptb3NfYXhpc0RyYWdHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBeGlz
RHJhZ0dpem1vIl0uX0NyZWF0ZUFycm93SW5zdGFuY2UodGhpcy5zY2VuZSwgdGhpcy5feEF4aXMp
OworICAgICAgICB2YXIgeUF4aXMgPSBfR2l6bW9zX2F4aXNEcmFnR2l6bW9fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siQXhpc0RyYWdHaXptbyJdLl9DcmVhdGVBcnJvd0luc3RhbmNlKHRo
aXMuc2NlbmUsIHRoaXMuX3lBeGlzKTsKKyAgICAgICAgdmFyIHpBeGlzID0gX0dpem1vc19heGlz
RHJhZ0dpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkF4aXNEcmFnR2l6bW8iXS5f
Q3JlYXRlQXJyb3dJbnN0YW5jZSh0aGlzLnNjZW5lLCB0aGlzLl96QXhpcyk7CisgICAgICAgIHZh
ciBheGVzVmlld2VyID0gbmV3IEF4ZXNWaWV3ZXIodGhpcy5zY2VuZSwgdGhpcy5zY2FsZUxpbmVz
LCBudWxsLCB4QXhpcywgeUF4aXMsIHpBeGlzKTsKKyAgICAgICAgYXhlc1ZpZXdlci5faW5zdGFu
Y2VkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGF4ZXNWaWV3ZXI7CisgICAgfTsKKyAgICAvKiog
UmVsZWFzZXMgcmVzb3VyY2VzICovCisgICAgQXhlc1ZpZXdlci5wcm90b3R5cGUuZGlzcG9zZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3hBeGlzKSB7CisgICAgICAgICAgICB0
aGlzLl94QXhpcy5kaXNwb3NlKGZhbHNlLCAhdGhpcy5faW5zdGFuY2VkKTsKKyAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl94QXhpczsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5feUF4aXMp
IHsKKyAgICAgICAgICAgIHRoaXMuX3lBeGlzLmRpc3Bvc2UoZmFsc2UsICF0aGlzLl9pbnN0YW5j
ZWQpOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3lBeGlzOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl96QXhpcykgeworICAgICAgICAgICAgdGhpcy5fekF4aXMuZGlzcG9zZShmYWxz
ZSwgIXRoaXMuX2luc3RhbmNlZCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fekF4aXM7Cisg
ICAgICAgIH0KKyAgICAgICAgZGVsZXRlIHRoaXMuc2NlbmU7CisgICAgfTsKKyAgICBBeGVzVmll
d2VyLl9TZXRSZW5kZXJpbmdHcm91cElkID0gZnVuY3Rpb24gKG5vZGUsIGlkKSB7CisgICAgICAg
IG5vZGUuZ2V0Q2hpbGRNZXNoZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAg
ICAgICBtZXNoLnJlbmRlcmluZ0dyb3VwSWQgPSBpZDsKKyAgICAgICAgfSk7CisgICAgfTsKKyAg
ICByZXR1cm4gQXhlc1ZpZXdlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
RGVidWcvYm9uZUF4ZXNWaWV3ZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9EZWJ1Zy9ib25lQXhlc1ZpZXdlci50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQm9u
ZUF4ZXNWaWV3ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm9uZUF4
ZXNWaWV3ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJvbmVBeGVzVmlld2VyOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90
c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRGVidWdfYXhlc1ZpZXdl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vRGVidWcvYXhlc1ZpZXdlciAqLyAiLi9EZWJ1Zy9heGVzVmlld2VyLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAq
LyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguYXhpcyAqLyAiLi9NYXRocy9tYXRoLmF4aXMudHMi
KTsKKworCisKKworLyoqCisgICAgICogVGhlIEJvbmVBeGVzVmlld2VyIHdpbGwgYXR0YWNoIDMg
YXhlcyB0byBhIHNwZWNpZmljIGJvbmUgb2YgYSBzcGVjaWZpYyBtZXNoCisgICAgICogQHNlZSBk
ZW1vIGhlcmU6IGh0dHBzOi8vd3d3LmJhYnlsb25qcy1wbGF5Z3JvdW5kLmNvbS8jMERFOEY0IzgK
KyAgICAgKi8KK3ZhciBCb25lQXhlc1ZpZXdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChf
c3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVu
ZHMiXShCb25lQXhlc1ZpZXdlciwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEg
bmV3IEJvbmVBeGVzVmlld2VyCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rp
bmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gYm9uZSBkZWZpbmVzIHRoZSB0YXJnZXQgYm9uZQorICAg
ICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIHRhcmdldCBtZXNoCisgICAgICogQHBhcmFtIHNj
YWxlTGluZXMgZGVmaW5lcyBhIHNjYWxpbmcgZmFjdG9yIGZvciBsaW5lIGxlbmd0aCAoMSBieSBk
ZWZhdWx0KQorICAgICAqLworICAgIGZ1bmN0aW9uIEJvbmVBeGVzVmlld2VyKHNjZW5lLCBib25l
LCBtZXNoLCBzY2FsZUxpbmVzKSB7CisgICAgICAgIGlmIChzY2FsZUxpbmVzID09PSB2b2lkIDAp
IHsgc2NhbGVMaW5lcyA9IDE7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgc2NlbmUsIHNjYWxlTGluZXMpIHx8IHRoaXM7CisgICAgICAgIC8qKiBHZXRzIGN1cnJlbnQg
cG9zaXRpb24gKi8KKyAgICAgICAgX3RoaXMucG9zID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKiBH
ZXRzIGRpcmVjdGlvbiBvZiBYIGF4aXMgKi8KKyAgICAgICAgX3RoaXMueGF4aXMgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8o
KTsKKyAgICAgICAgLyoqIEdldHMgZGlyZWN0aW9uIG9mIFkgYXhpcyAqLworICAgICAgICBfdGhp
cy55YXhpcyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAvKiogR2V0cyBkaXJlY3Rpb24gb2YgWiBheGlz
ICovCisgICAgICAgIF90aGlzLnpheGlzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLm1lc2gg
PSBtZXNoOworICAgICAgICBfdGhpcy5ib25lID0gYm9uZTsKKyAgICAgICAgcmV0dXJuIF90aGlz
OworICAgIH0KKyAgICAvKioKKyAgICAgKiBGb3JjZSB0aGUgdmlld2VyIHRvIHVwZGF0ZQorICAg
ICAqLworICAgIEJvbmVBeGVzVmlld2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICghdGhpcy5tZXNoIHx8ICF0aGlzLmJvbmUpIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgYm9uZSA9IHRoaXMuYm9uZTsKKyAgICAgICAg
Ym9uZS5fbWFya0FzRGlydHlBbmRDb21wb3NlKCk7CisgICAgICAgIGJvbmUuZ2V0QWJzb2x1dGVQ
b3NpdGlvblRvUmVmKHRoaXMubWVzaCwgdGhpcy5wb3MpOworICAgICAgICBib25lLmdldERpcmVj
dGlvblRvUmVmKF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
QXhpcyJdLlgsIHRoaXMubWVzaCwgdGhpcy54YXhpcyk7CisgICAgICAgIGJvbmUuZ2V0RGlyZWN0
aW9uVG9SZWYoX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJB
eGlzIl0uWSwgdGhpcy5tZXNoLCB0aGlzLnlheGlzKTsKKyAgICAgICAgYm9uZS5nZXREaXJlY3Rp
b25Ub1JlZihfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkF4
aXMiXS5aLCB0aGlzLm1lc2gsIHRoaXMuemF4aXMpOworICAgICAgICBfc3VwZXIucHJvdG90eXBl
LnVwZGF0ZS5jYWxsKHRoaXMsIHRoaXMucG9zLCB0aGlzLnhheGlzLCB0aGlzLnlheGlzLCB0aGlz
LnpheGlzKTsKKyAgICB9OworICAgIC8qKiBSZWxlYXNlcyByZXNvdXJjZXMgKi8KKyAgICBCb25l
QXhlc1ZpZXdlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMubWVzaCkgeworICAgICAgICAgICAgdGhpcy5tZXNoID0gbnVsbDsKKyAgICAgICAgICAg
IHRoaXMuYm9uZSA9IG51bGw7CisgICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2Uu
Y2FsbCh0aGlzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIEJvbmVBeGVzVmlld2Vy
OworfShfRGVidWdfYXhlc1ZpZXdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBeGVz
Vmlld2VyIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9EZWJ1Zy9kZWJ1Z0xheWVy
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9EZWJ1
Zy9kZWJ1Z0xheWVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IERlYnVnTGF5ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRGVidWdMYXllciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGVidWdMYXll
cjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNj
L29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5l
ICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworCisKKworCisK
K09iamVjdC5kZWZpbmVQcm9wZXJ0eShfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siU2NlbmUiXS5wcm90b3R5cGUsICJkZWJ1Z0xheWVyIiwgeworICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICBpZiAoIXRoaXMuX2RlYnVnTGF5ZXIpIHsKKyAgICAgICAgICAgIHRoaXMu
X2RlYnVnTGF5ZXIgPSBuZXcgRGVidWdMYXllcih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5fZGVidWdMYXllcjsKKyAgICB9LAorICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgY29uZmlndXJhYmxlOiB0cnVlCit9KTsKKy8qKgorICogVGhlIGRlYnVnIGxheWVyIChha2Eg
SW5zcGVjdG9yKSBpcyB0aGUgZ28gdG8gdG9vbCBpbiBvcmRlciB0byBiZXR0ZXIgdW5kZXJzdGFu
ZAorICogd2hhdCBpcyBoYXBwZW5pbmcgaW4geW91ciBzY2VuZQorICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vZmVhdHVyZXMvcGxheWdyb3VuZF9kZWJ1Z2xheWVyCisgKi8KK3ZhciBE
ZWJ1Z0xheWVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAq
IEluc3RhbnRpYXRlcyBhIG5ldyBkZWJ1ZyBsYXllci4KKyAgICAgKiBUaGUgZGVidWcgbGF5ZXIg
KGFrYSBJbnNwZWN0b3IpIGlzIHRoZSBnbyB0byB0b29sIGluIG9yZGVyIHRvIGJldHRlciB1bmRl
cnN0YW5kCisgICAgICogd2hhdCBpcyBoYXBwZW5pbmcgaW4geW91ciBzY2VuZQorICAgICAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL3BsYXlncm91bmRfZGVidWdsYXll
cgorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0byBpbnNwZWN0CisgICAg
ICovCisgICAgZnVuY3Rpb24gRGVidWdMYXllcihzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMg
PSB0aGlzOworICAgICAgICB0aGlzLkJKU0lOU1BFQ1RPUiA9IHRoaXMuX2dldEdsb2JhbEluc3Bl
Y3RvcigpOworICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9zY2Vu
ZS5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyBE
ZWJ1ZyBsYXllcgorICAgICAgICAgICAgaWYgKF90aGlzLl9zY2VuZS5fZGVidWdMYXllcikgewor
ICAgICAgICAgICAgICAgIF90aGlzLl9zY2VuZS5fZGVidWdMYXllci5oaWRlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGVi
dWdMYXllci5wcm90b3R5cGUsICJvblByb3BlcnR5Q2hhbmdlZE9ic2VydmFibGUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxlIHRyaWdnZXJlZCB3aGVuIGEgcHJvcGVydHkg
aXMgY2hhbmdlZCB0aHJvdWdoIHRoZSBpbnNwZWN0b3IuCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLkJKU0lOU1BFQ1RPUiAmJiB0
aGlzLkJKU0lOU1BFQ1RPUi5JbnNwZWN0b3IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5CSlNJTlNQRUNUT1IuSW5zcGVjdG9yLk9uUHJvcGVydHlDaGFuZ2VkT2JzZXJ2YWJsZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdGhpcy5fb25Qcm9wZXJ0eUNoYW5nZWRPYnNl
cnZhYmxlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fb25Qcm9wZXJ0eUNoYW5nZWRPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
b25Qcm9wZXJ0eUNoYW5nZWRPYnNlcnZhYmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKiog
Q3JlYXRlcyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4gKi8KKyAgICBEZWJ1Z0xheWVyLnByb3RvdHlw
ZS5fY3JlYXRlSW5zcGVjdG9yID0gZnVuY3Rpb24gKGNvbmZpZykgeworICAgICAgICBpZiAodGhp
cy5pc1Zpc2libGUoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9vblByb3BlcnR5Q2hhbmdlZE9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9vblByb3BlcnR5Q2hhbmdlZE9ic2VydmFibGUub2Jz
ZXJ2ZXJzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZhciBvYnNl
cnZlciA9IF9hW19pXTsKKyAgICAgICAgICAgICAgICB0aGlzLkJKU0lOU1BFQ1RPUi5JbnNwZWN0
b3IuT25Qcm9wZXJ0eUNoYW5nZWRPYnNlcnZhYmxlLmFkZChvYnNlcnZlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9vblByb3BlcnR5Q2hhbmdlZE9ic2VydmFibGUuY2xlYXIo
KTsKKyAgICAgICAgICAgIHRoaXMuX29uUHJvcGVydHlDaGFuZ2VkT2JzZXJ2YWJsZSA9IHVuZGVm
aW5lZDsKKyAgICAgICAgfQorICAgICAgICB2YXIgdXNlck9wdGlvbnMgPSB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fzc2lnbiJdKHsgb3ZlcmxheTogZmFsc2UsIHNob3dF
eHBsb3JlcjogdHJ1ZSwgc2hvd0luc3BlY3RvcjogdHJ1ZSwgZW1iZWRNb2RlOiBmYWxzZSwgaGFu
ZGxlUmVzaXplOiB0cnVlLCBlbmFibGVQb3B1cDogdHJ1ZSB9LCBjb25maWcpOworICAgICAgICB0
aGlzLkJKU0lOU1BFQ1RPUiA9IHRoaXMuQkpTSU5TUEVDVE9SIHx8IHRoaXMuX2dldEdsb2JhbElu
c3BlY3RvcigpOworICAgICAgICB0aGlzLkJKU0lOU1BFQ1RPUi5JbnNwZWN0b3IuU2hvdyh0aGlz
Ll9zY2VuZSwgdXNlck9wdGlvbnMpOworICAgIH07CisgICAgLyoqCisgICAgICogU2VsZWN0IGEg
c3BlY2lmaWMgZW50aXR5IGluIHRoZSBzY2VuZSBleHBsb3JlciBhbmQgaGlnaGxpZ2h0IGEgc3Bl
Y2lmaWMgYmxvY2sgaW4gdGhhdCBlbnRpdHkgcHJvcGVydHkgZ3JpZAorICAgICAqIEBwYXJhbSBl
bnRpdHkgZGVmaW5lcyB0aGUgZW50aXR5IHRvIHNlbGVjdAorICAgICAqIEBwYXJhbSBsaW5lQ29u
dGFpbmVyVGl0bGUgZGVmaW5lcyB0aGUgc3BlY2lmaWMgYmxvY2sgdG8gaGlnaGxpZ2h0CisgICAg
ICovCisgICAgRGVidWdMYXllci5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24gKGVudGl0eSwg
bGluZUNvbnRhaW5lclRpdGxlKSB7CisgICAgICAgIGlmICh0aGlzLkJKU0lOU1BFQ1RPUikgewor
ICAgICAgICAgICAgdGhpcy5CSlNJTlNQRUNUT1IuSW5zcGVjdG9yLk1hcmtMaW5lQ29udGFpbmVy
VGl0bGVGb3JIaWdobGlnaHRpbmcobGluZUNvbnRhaW5lclRpdGxlKTsKKyAgICAgICAgICAgIHRo
aXMuQkpTSU5TUEVDVE9SLkluc3BlY3Rvci5PblNlbGVjdGlvbkNoYW5nZU9ic2VydmFibGUubm90
aWZ5T2JzZXJ2ZXJzKGVudGl0eSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBHZXQgdGhl
IGluc3BlY3RvciBmcm9tIGJ1bmRsZSBvciBnbG9iYWwgKi8KKyAgICBEZWJ1Z0xheWVyLnByb3Rv
dHlwZS5fZ2V0R2xvYmFsSW5zcGVjdG9yID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBVTUQg
R2xvYmFsIG5hbWUgZGV0ZWN0aW9uIGZyb20gV2VicGFjayBCdW5kbGUgVU1EIE5hbWUuCisgICAg
ICAgIGlmICh0eXBlb2YgSU5TUEVDVE9SICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAg
cmV0dXJuIElOU1BFQ1RPUjsKKyAgICAgICAgfQorICAgICAgICAvLyBJbiBjYXNlIG9mIG1vZHVs
ZSBsZXQgcyBjaGVjayB0aGUgZ2xvYmFsIGVtaXR0ZWQgZnJvbSB0aGUgSW5zcGVjdG9yIGVudHJ5
IHBvaW50LgorICAgICAgICBpZiAodHlwZW9mIEJBQllMT04gIT09ICd1bmRlZmluZWQnICYmIHR5
cGVvZiBCQUJZTE9OLkluc3BlY3RvciAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgIHJl
dHVybiBCQUJZTE9OOworICAgICAgICB9CisgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXQgaWYgdGhlIGluc3BlY3RvciBpcyB2aXNpYmxlIG9yIG5v
dC4KKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHZpc2libGUgb3RoZXJ3aXNlLCBmYWxzZQorICAg
ICAqLworICAgIERlYnVnTGF5ZXIucHJvdG90eXBlLmlzVmlzaWJsZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuQkpTSU5TUEVDVE9SICYmIHRoaXMuQkpTSU5TUEVDVE9SLklu
c3BlY3Rvci5Jc1Zpc2libGU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBIaWRlIHRoZSBpbnNw
ZWN0b3IgYW5kIGNsb3NlIGl0cyB3aW5kb3cuCisgICAgICovCisgICAgRGVidWdMYXllci5wcm90
b3R5cGUuaGlkZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuQkpTSU5TUEVDVE9S
KSB7CisgICAgICAgICAgICB0aGlzLkJKU0lOU1BFQ1RPUi5JbnNwZWN0b3IuSGlkZSgpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgICogTGF1bmNoIHRoZSBkZWJ1Z0xheWVyLgor
ICAgICAgKiBAcGFyYW0gY29uZmlnIERlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgaW5z
cGVjdG9yCisgICAgICAqIEByZXR1cm4gYSBwcm9taXNlIGZ1bGZpbGxlZCB3aGVuIHRoZSBkZWJ1
ZyBsYXllciBpcyB2aXNpYmxlCisgICAgICAqLworICAgIERlYnVnTGF5ZXIucHJvdG90eXBlLnNo
b3cgPSBmdW5jdGlvbiAoY29uZmlnKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAg
ICAgICAgICBpZiAodHlwZW9mIF90aGlzLkJKU0lOU1BFQ1RPUiA9PSAndW5kZWZpbmVkJykgewor
ICAgICAgICAgICAgICAgIHZhciBpbnNwZWN0b3JVcmwgPSBjb25maWcgJiYgY29uZmlnLmluc3Bl
Y3RvclVSTCA/IGNvbmZpZy5pbnNwZWN0b3JVUkwgOiBEZWJ1Z0xheWVyLkluc3BlY3RvclVSTDsK
KyAgICAgICAgICAgICAgICAvLyBMb2FkIGluc3BlY3RvciBhbmQgYWRkIGl0IHRvIHRoZSBET00K
KyAgICAgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJUb29scyJdLkxvYWRTY3JpcHQoaW5zcGVjdG9yVXJsLCBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl9jcmVhdGVJbnNwZWN0b3IoY29uZmlnKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZShfdGhpcyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgY3Jl
YXRlcyB0aGUgaW5zcGVjdG9yCisgICAgICAgICAgICAgICAgX3RoaXMuX2NyZWF0ZUluc3BlY3Rv
cihjb25maWcpOworICAgICAgICAgICAgICAgIHJlc29sdmUoX3RoaXMpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmluZSB0aGUgdXJsIHRv
IGdldCB0aGUgaW5zcGVjdG9yIHNjcmlwdCBmcm9tLgorICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNl
cyB0aGUgYmFieWxvbmpzIENETi4KKyAgICAgKiBAaWdub3JlTmFtaW5nCisgICAgICovCisgICAg
RGVidWdMYXllci5JbnNwZWN0b3JVUkwgPSAiaHR0cHM6Ly91bnBrZy5jb20vYmFieWxvbmpzLWlu
c3BlY3RvckAiICsgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkVuZ2luZSJdLlZlcnNpb24gKyAiL2JhYnlsb24uaW5zcGVjdG9yLmJ1bmRsZS5qcyI7CisgICAg
cmV0dXJuIERlYnVnTGF5ZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0Rl
YnVnL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
RGVidWcvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IEF4ZXNWaWV3ZXIsIEJvbmVBeGVzVmlld2VyLCBEZWJ1Z0xheWVyLCBQ
aHlzaWNzVmlld2VyLCBSYXlIZWxwZXIsIFNrZWxldG9uVmlld2VyICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXhlc1ZpZXdlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9heGVzVmlld2VyICovICIu
L0RlYnVnL2F4ZXNWaWV3ZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXhlc1ZpZXdlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2F4ZXNWaWV3ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQXhlc1ZpZXdlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ib25lQXhl
c1ZpZXdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9ib25lQXhlc1ZpZXdlciAqLyAiLi9EZWJ1Zy9ib25lQXhlc1ZpZXdlci50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJCb25lQXhlc1ZpZXdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Jv
bmVBeGVzVmlld2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkJvbmVBeGVzVmlld2Vy
Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlYnVnTGF5ZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVidWdMYXll
ciAqLyAiLi9EZWJ1Zy9kZWJ1Z0xheWVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlYnVnTGF5
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWJ1Z0xheWVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIkRlYnVnTGF5ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cGh5c2ljc1ZpZXdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9waHlzaWNzVmlld2VyICovICIuL0RlYnVnL3BoeXNpY3NWaWV3ZXIudHMi
KTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1ZpZXdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X3BoeXNpY3NWaWV3ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUGh5c2ljc1ZpZXdl
ciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yYXlIZWxwZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmF5SGVscGVy
ICovICIuL0RlYnVnL3JheUhlbHBlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSYXlIZWxwZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9yYXlIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siUmF5SGVscGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NrZWxl
dG9uVmlld2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL3NrZWxldG9uVmlld2VyICovICIuL0RlYnVnL3NrZWxldG9uVmlld2VyLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlNrZWxldG9uVmlld2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
c2tlbGV0b25WaWV3ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2tlbGV0b25WaWV3
ZXIiXTsgfSk7CisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRGVidWcv
cGh5c2ljc1ZpZXdlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vRGVidWcvcGh5c2ljc1ZpZXdlci50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQaHlzaWNzVmlld2Vy
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NWaWV3ZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIFBoeXNpY3NWaWV3ZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJzX2JveEJ1aWxkZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01l
c2hlcy9CdWlsZGVycy9ib3hCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9ib3hCdWlsZGVy
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWlsZGVyc19zcGhlcmVC
dWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRl
cnMvc3BoZXJlQnVpbGRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0
aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvZW5naW5lU3RvcmUgKi8gIi4vRW5n
aW5lcy9lbmdpbmVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlh
bHNfc3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwgKi8gIi4vTWF0
ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
UGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL1BoeXNpY3MvcGh5c2ljc0ltcG9zdG9yICovICIuL1Bo
eXNpY3MvcGh5c2ljc0ltcG9zdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Jl
bmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJlbmRl
cmVyICovICIuL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfY3lsaW5kZXJCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMv
QnVpbGRlcnMvY3lsaW5kZXJCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1
aWxkZXIudHMiKTsKKworCisKKworCisKKworCisKKworLyoqCisgICAgICogVXNlZCB0byBzaG93
IHRoZSBwaHlzaWNzIGltcG9zdG9yIGFyb3VuZCB0aGUgc3BlY2lmaWMgbWVzaAorICAgICAqLwor
dmFyIFBoeXNpY3NWaWV3ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIG5ldyBQaHlzaWNzVmlld2VyCisgICAgICogQHBhcmFtIHNjZW5l
IGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQaHlzaWNz
Vmlld2VyKHNjZW5lKSB7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2lt
cG9zdG9ycyA9IFtdOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9tZXNo
ZXMgPSBbXTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fbnVtTWVzaGVz
ID0gMDsKKyAgICAgICAgdGhpcy5fZGVidWdNZXNoTWVzaGVzID0gbmV3IEFycmF5KCk7CisgICAg
ICAgIHRoaXMuX3NjZW5lID0gc2NlbmUgfHwgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZFNjZW5lOworICAg
ICAgICB2YXIgcGh5c2ljRW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0UGh5c2ljc0VuZ2luZSgpOwor
ICAgICAgICBpZiAocGh5c2ljRW5naW5lKSB7CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzRW5n
aW5lUGx1Z2luID0gcGh5c2ljRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl91dGlsaXR5TGF5ZXIgPSBuZXcgX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJS
ZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJVdGlsaXR5TGF5ZXJSZW5kZXJl
ciJdKHRoaXMuX3NjZW5lLCBmYWxzZSk7CisgICAgICAgIHRoaXMuX3V0aWxpdHlMYXllci5waWNr
VXRpbGl0eVNjZW5lRmlyc3QgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdXRpbGl0eUxheWVyLnV0
aWxpdHlMYXllclNjZW5lLmF1dG9DbGVhckRlcHRoQW5kU3RlbmNpbCA9IHRydWU7CisgICAgfQor
ICAgIC8qKiBAaGlkZGVuICovCisgICAgUGh5c2ljc1ZpZXdlci5wcm90b3R5cGUuX3VwZGF0ZURl
YnVnTWVzaGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcGx1Z2luID0gdGhpcy5fcGh5
c2ljc0VuZ2luZVBsdWdpbjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9udW1N
ZXNoZXM7IGkrKykgeworICAgICAgICAgICAgdmFyIGltcG9zdG9yID0gdGhpcy5faW1wb3N0b3Jz
W2ldOworICAgICAgICAgICAgaWYgKCFpbXBvc3RvcikgeworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGltcG9zdG9yLmlzRGlzcG9zZWQp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmhpZGVJbXBvc3Rvcih0aGlzLl9pbXBvc3RvcnNbaS0t
XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaW1wb3N0b3IudHlwZSA9PT0gX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIlBoeXNpY3NJbXBvc3RvciJdLk1lc2hJbXBvc3RvcikgeworICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgdmFyIG1lc2ggPSB0aGlzLl9tZXNoZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKG1l
c2ggJiYgcGx1Z2luKSB7CisgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5zeW5jTWVzaFdpdGhJ
bXBvc3RvcihtZXNoLCBpbXBvc3Rvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIGEgc3BlY2lmaWVk
IHBoeXNpYyBpbXBvc3RvcgorICAgICAqIEBwYXJhbSBpbXBvc3RvciBkZWZpbmVzIHRoZSBpbXBv
c3RvciB0byByZW5kZXIKKyAgICAgKiBAcGFyYW0gdGFyZ2V0TWVzaCBkZWZpbmVzIHRoZSBtZXNo
IHJlcHJlc2VudGVkIGJ5IHRoZSBpbXBvc3RvcgorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgZGVi
dWcgbWVzaCB1c2VkIHRvIHJlbmRlciB0aGUgaW1wb3N0b3IKKyAgICAgKi8KKyAgICBQaHlzaWNz
Vmlld2VyLnByb3RvdHlwZS5zaG93SW1wb3N0b3IgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIHRhcmdl
dE1lc2gpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9zY2VuZSkgeworICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9udW1N
ZXNoZXM7IGkrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuX2ltcG9zdG9yc1tpXSA9PSBpbXBv
c3RvcikgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHZhciBkZWJ1Z01lc2ggPSB0aGlzLl9nZXREZWJ1Z01lc2goaW1wb3N0
b3IsIHRhcmdldE1lc2gpOworICAgICAgICBpZiAoZGVidWdNZXNoKSB7CisgICAgICAgICAgICB0
aGlzLl9pbXBvc3RvcnNbdGhpcy5fbnVtTWVzaGVzXSA9IGltcG9zdG9yOworICAgICAgICAgICAg
dGhpcy5fbWVzaGVzW3RoaXMuX251bU1lc2hlc10gPSBkZWJ1Z01lc2g7CisgICAgICAgICAgICBp
ZiAodGhpcy5fbnVtTWVzaGVzID09PSAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVy
RnVuY3Rpb24gPSB0aGlzLl91cGRhdGVEZWJ1Z01lc2hlcy5iaW5kKHRoaXMpOworICAgICAgICAg
ICAgICAgIHRoaXMuX3NjZW5lLnJlZ2lzdGVyQmVmb3JlUmVuZGVyKHRoaXMuX3JlbmRlckZ1bmN0
aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX251bU1lc2hlcysrOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBkZWJ1Z01lc2g7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBIaWRlcyBhIHNwZWNpZmllZCBwaHlzaWMgaW1wb3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0
b3IgZGVmaW5lcyB0aGUgaW1wb3N0b3IgdG8gaGlkZQorICAgICAqLworICAgIFBoeXNpY3NWaWV3
ZXIucHJvdG90eXBlLmhpZGVJbXBvc3RvciA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAg
ICBpZiAoIWltcG9zdG9yIHx8ICF0aGlzLl9zY2VuZSB8fCAhdGhpcy5fdXRpbGl0eUxheWVyKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJlbW92ZWQgPSBm
YWxzZTsKKyAgICAgICAgdmFyIHV0aWxpdHlMYXllclNjZW5lID0gdGhpcy5fdXRpbGl0eUxheWVy
LnV0aWxpdHlMYXllclNjZW5lOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX251
bU1lc2hlczsgaSsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5faW1wb3N0b3JzW2ldID09IGlt
cG9zdG9yKSB7CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLl9tZXNoZXNbaV07Cisg
ICAgICAgICAgICAgICAgaWYgKCFtZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1dGlsaXR5TGF5ZXJTY2VuZS5y
ZW1vdmVNZXNoKG1lc2gpOworICAgICAgICAgICAgICAgIG1lc2guZGlzcG9zZSgpOworICAgICAg
ICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2RlYnVnTWVzaE1lc2hlcy5pbmRleE9mKG1lc2gp
OworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX2RlYnVnTWVzaE1lc2hlcy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB0aGlzLl9udW1NZXNoZXMtLTsKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fbnVtTWVzaGVzID4gMCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNo
ZXNbaV0gPSB0aGlzLl9tZXNoZXNbdGhpcy5fbnVtTWVzaGVzXTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5faW1wb3N0b3JzW2ldID0gdGhpcy5faW1wb3N0b3JzW3RoaXMuX251bU1lc2hlc107
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc2hlc1t0aGlzLl9udW1NZXNoZXNdID0gbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5faW1wb3N0b3JzW3RoaXMuX251bU1lc2hlc10g
PSBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fbWVzaGVzWzBdID0gbnVsbDsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5faW1wb3N0b3JzWzBdID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmVtb3ZlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlbW92ZWQgJiYgdGhpcy5fbnVtTWVzaGVz
ID09PSAwKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS51bnJlZ2lzdGVyQmVmb3JlUmVuZGVy
KHRoaXMuX3JlbmRlckZ1bmN0aW9uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgUGh5c2ljc1Zp
ZXdlci5wcm90b3R5cGUuX2dldERlYnVnTWF0ZXJpYWwgPSBmdW5jdGlvbiAoc2NlbmUpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9kZWJ1Z01hdGVyaWFsKSB7CisgICAgICAgICAgICB0aGlzLl9kZWJ1
Z01hdGVyaWFsID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fWyJTdGFuZGFyZE1hdGVyaWFsIl0oJycsIHNjZW5lKTsKKyAgICAgICAg
ICAgIHRoaXMuX2RlYnVnTWF0ZXJpYWwud2lyZWZyYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgIHRo
aXMuX2RlYnVnTWF0ZXJpYWwuZW1pc3NpdmVDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yMyJdLldoaXRlKCk7CisgICAgICAgICAgICB0
aGlzLl9kZWJ1Z01hdGVyaWFsLmRpc2FibGVMaWdodGluZyA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2RlYnVnTWF0ZXJpYWw7CisgICAgfTsKKyAgICBQaHlzaWNzVmll
d2VyLnByb3RvdHlwZS5fZ2V0RGVidWdCb3hNZXNoID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAg
ICAgIGlmICghdGhpcy5fZGVidWdCb3hNZXNoKSB7CisgICAgICAgICAgICB0aGlzLl9kZWJ1Z0Jv
eE1lc2ggPSBfTWVzaGVzX0J1aWxkZXJzX2JveEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siQm94QnVpbGRlciJdLkNyZWF0ZUJveCgncGh5c2ljc0JvZHlCb3hWaWV3TWVzaCcs
IHsgc2l6ZTogMSB9LCBzY2VuZSk7CisgICAgICAgICAgICB0aGlzLl9kZWJ1Z0JveE1lc2gucm90
YXRpb25RdWF0ZXJuaW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlF1YXRlcm5pb24iXS5JZGVudGl0eSgpOworICAgICAgICAgICAgdGhpcy5fZGVi
dWdCb3hNZXNoLm1hdGVyaWFsID0gdGhpcy5fZ2V0RGVidWdNYXRlcmlhbChzY2VuZSk7CisgICAg
ICAgICAgICB0aGlzLl9kZWJ1Z0JveE1lc2guc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoaXMuX2RlYnVnQm94TWVzaC5jcmVhdGVJbnN0YW5jZSgncGh5c2lj
c0JvZHlCb3hWaWV3SW5zdGFuY2UnKTsKKyAgICB9OworICAgIFBoeXNpY3NWaWV3ZXIucHJvdG90
eXBlLl9nZXREZWJ1Z1NwaGVyZU1lc2ggPSBmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9kZWJ1Z1NwaGVyZU1lc2gpIHsKKyAgICAgICAgICAgIHRoaXMuX2RlYnVnU3BoZXJl
TWVzaCA9IF9NZXNoZXNfQnVpbGRlcnNfc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJTcGhlcmVCdWlsZGVyIl0uQ3JlYXRlU3BoZXJlKCdwaHlzaWNzQm9keVNwaGVy
ZVZpZXdNZXNoJywgeyBkaWFtZXRlcjogMSB9LCBzY2VuZSk7CisgICAgICAgICAgICB0aGlzLl9k
ZWJ1Z1NwaGVyZU1lc2gucm90YXRpb25RdWF0ZXJuaW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXS5JZGVudGl0eSgpOworICAg
ICAgICAgICAgdGhpcy5fZGVidWdTcGhlcmVNZXNoLm1hdGVyaWFsID0gdGhpcy5fZ2V0RGVidWdN
YXRlcmlhbChzY2VuZSk7CisgICAgICAgICAgICB0aGlzLl9kZWJ1Z1NwaGVyZU1lc2guc2V0RW5h
YmxlZChmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2RlYnVnU3BoZXJl
TWVzaC5jcmVhdGVJbnN0YW5jZSgncGh5c2ljc0JvZHlCb3hWaWV3SW5zdGFuY2UnKTsKKyAgICB9
OworICAgIFBoeXNpY3NWaWV3ZXIucHJvdG90eXBlLl9nZXREZWJ1Z0N5bGluZGVyTWVzaCA9IGZ1
bmN0aW9uIChzY2VuZSkgeworICAgICAgICBpZiAoIXRoaXMuX2RlYnVnQ3lsaW5kZXJNZXNoKSB7
CisgICAgICAgICAgICB0aGlzLl9kZWJ1Z0N5bGluZGVyTWVzaCA9IF9NZXNoZXNfQnVpbGRlcnNf
Y3lsaW5kZXJCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkN5bGluZGVyQnVp
bGRlciJdLkNyZWF0ZUN5bGluZGVyKCdwaHlzaWNzQm9keUN5bGluZGVyVmlld01lc2gnLCB7IGRp
YW1ldGVyVG9wOiAxLCBkaWFtZXRlckJvdHRvbTogMSwgaGVpZ2h0OiAxIH0sIHNjZW5lKTsKKyAg
ICAgICAgICAgIHRoaXMuX2RlYnVnQ3lsaW5kZXJNZXNoLnJvdGF0aW9uUXVhdGVybmlvbiA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9u
Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIHRoaXMuX2RlYnVnQ3lsaW5kZXJNZXNoLm1hdGVy
aWFsID0gdGhpcy5fZ2V0RGVidWdNYXRlcmlhbChzY2VuZSk7CisgICAgICAgICAgICB0aGlzLl9k
ZWJ1Z0N5bGluZGVyTWVzaC5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5fZGVidWdDeWxpbmRlck1lc2guY3JlYXRlSW5zdGFuY2UoJ3BoeXNpY3NCb2R5
Qm94Vmlld0luc3RhbmNlJyk7CisgICAgfTsKKyAgICBQaHlzaWNzVmlld2VyLnByb3RvdHlwZS5f
Z2V0RGVidWdNZXNoTWVzaCA9IGZ1bmN0aW9uIChtZXNoLCBzY2VuZSkgeworICAgICAgICB2YXIg
d2lyZWZyYW1lT3ZlciA9IG5ldyBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTWVzaCJdKG1lc2gubmFtZSwgc2NlbmUsIG51bGwsIG1lc2gpOworICAgICAgICB3aXJl
ZnJhbWVPdmVyLnBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHdpcmVmcmFtZU92ZXIuc2V0
UGFyZW50KG1lc2gpOworICAgICAgICB3aXJlZnJhbWVPdmVyLm1hdGVyaWFsID0gdGhpcy5fZ2V0
RGVidWdNYXRlcmlhbChzY2VuZSk7CisgICAgICAgIHRoaXMuX2RlYnVnTWVzaE1lc2hlcy5wdXNo
KHdpcmVmcmFtZU92ZXIpOworICAgICAgICByZXR1cm4gd2lyZWZyYW1lT3ZlcjsKKyAgICB9Owor
ICAgIFBoeXNpY3NWaWV3ZXIucHJvdG90eXBlLl9nZXREZWJ1Z01lc2ggPSBmdW5jdGlvbiAoaW1w
b3N0b3IsIHRhcmdldE1lc2gpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
aWYgKCF0aGlzLl91dGlsaXR5TGF5ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICB9CisgICAgICAgIC8vIE9ubHkgY3JlYXRlIGNoaWxkIGltcG9zdG9yIGRlYnVnIG1lc2hl
cyB3aGVuIGV2YWx1YXRpbmcgdGhlIHBhcmVudAorICAgICAgICBpZiAodGFyZ2V0TWVzaCAmJiB0
YXJnZXRNZXNoLnBhcmVudCAmJiB0YXJnZXRNZXNoLnBhcmVudC5waHlzaWNzSW1wb3N0b3IpIHsK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBtZXNoID0g
bnVsbDsKKyAgICAgICAgdmFyIHV0aWxpdHlMYXllclNjZW5lID0gdGhpcy5fdXRpbGl0eUxheWVy
LnV0aWxpdHlMYXllclNjZW5lOworICAgICAgICBzd2l0Y2ggKGltcG9zdG9yLnR5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X19bIlBoeXNpY3NJbXBvc3RvciJdLkJveEltcG9zdG9yOgorICAgICAgICAgICAg
ICAgIG1lc2ggPSB0aGlzLl9nZXREZWJ1Z0JveE1lc2godXRpbGl0eUxheWVyU2NlbmUpOworICAg
ICAgICAgICAgICAgIGltcG9zdG9yLmdldEJveFNpemVUb1JlZihtZXNoLnNjYWxpbmcpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSW1w
b3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUGh5c2ljc0ltcG9zdG9yIl0uU3Bo
ZXJlSW1wb3N0b3I6CisgICAgICAgICAgICAgICAgbWVzaCA9IHRoaXMuX2dldERlYnVnU3BoZXJl
TWVzaCh1dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgICAgICAgICAgdmFyIHJhZGl1cyA9IGlt
cG9zdG9yLmdldFJhZGl1cygpOworICAgICAgICAgICAgICAgIG1lc2guc2NhbGluZy54ID0gcmFk
aXVzICogMjsKKyAgICAgICAgICAgICAgICBtZXNoLnNjYWxpbmcueSA9IHJhZGl1cyAqIDI7Cisg
ICAgICAgICAgICAgICAgbWVzaC5zY2FsaW5nLnogPSByYWRpdXMgKiAyOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUGh5c2ljc0ltcG9zdG9yIl0uTWVzaEltcG9zdG9y
OgorICAgICAgICAgICAgICAgIGlmICh0YXJnZXRNZXNoKSB7CisgICAgICAgICAgICAgICAgICAg
IG1lc2ggPSB0aGlzLl9nZXREZWJ1Z01lc2hNZXNoKHRhcmdldE1lc2gsIHV0aWxpdHlMYXllclNj
ZW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJQaHlzaWNzSW1wb3N0b3IiXS5Ob0ltcG9zdG9yOgorICAgICAgICAgICAgICAgIGlm
ICh0YXJnZXRNZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBjb21wb3VuZCBp
bXBvc3RvcnMKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkTWVzaGVzID0gdGFyZ2V0TWVz
aC5nZXRDaGlsZE1lc2hlcygpLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5waHlzaWNz
SW1wb3N0b3IgPyAxIDogMDsgfSk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkTWVzaGVzLmZv
ckVhY2goZnVuY3Rpb24gKG0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gX3Ro
aXMuX2dldERlYnVnQm94TWVzaCh1dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhLnBhcmVudCA9IG07CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNp
Y3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlBoeXNpY3NJ
bXBvc3RvciJdLkN5bGluZGVySW1wb3N0b3I6CisgICAgICAgICAgICAgICAgbWVzaCA9IHRoaXMu
X2dldERlYnVnQ3lsaW5kZXJNZXNoKHV0aWxpdHlMYXllclNjZW5lKTsKKyAgICAgICAgICAgICAg
ICB2YXIgYmkgPSBpbXBvc3Rvci5vYmplY3QuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAg
ICAgICAgbWVzaC5zY2FsaW5nLnggPSBiaS5ib3VuZGluZ0JveC5tYXhpbXVtLnggLSBiaS5ib3Vu
ZGluZ0JveC5taW5pbXVtLng7CisgICAgICAgICAgICAgICAgbWVzaC5zY2FsaW5nLnkgPSBiaS5i
b3VuZGluZ0JveC5tYXhpbXVtLnkgLSBiaS5ib3VuZGluZ0JveC5taW5pbXVtLnk7CisgICAgICAg
ICAgICAgICAgbWVzaC5zY2FsaW5nLnogPSBiaS5ib3VuZGluZ0JveC5tYXhpbXVtLnogLSBiaS5i
b3VuZGluZ0JveC5taW5pbXVtLno7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG1lc2g7CisgICAgfTsKKyAgICAvKiogUmVsZWFzZXMgYWxsIHJlc291
cmNlcyAqLworICAgIFBoeXNpY3NWaWV3ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBjb3VudCA9IHRoaXMuX251bU1lc2hlczsKKyAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyBpbmRleCsrKSB7CisgICAgICAgICAgICB0aGlz
LmhpZGVJbXBvc3Rvcih0aGlzLl9pbXBvc3RvcnNbMF0pOworICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLl9kZWJ1Z0JveE1lc2gpIHsKKyAgICAgICAgICAgIHRoaXMuX2RlYnVnQm94TWVzaC5k
aXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2RlYnVnU3BoZXJlTWVzaCkg
eworICAgICAgICAgICAgdGhpcy5fZGVidWdTcGhlcmVNZXNoLmRpc3Bvc2UoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5fZGVidWdDeWxpbmRlck1lc2gpIHsKKyAgICAgICAgICAgIHRo
aXMuX2RlYnVnQ3lsaW5kZXJNZXNoLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fZGVidWdNYXRlcmlhbCkgeworICAgICAgICAgICAgdGhpcy5fZGVidWdNYXRlcmlhbC5k
aXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5faW1wb3N0b3JzLmxlbmd0aCA9IDA7
CisgICAgICAgIHRoaXMuX3NjZW5lID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcGh5c2ljc0VuZ2lu
ZVBsdWdpbiA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLl91dGlsaXR5TGF5ZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3V0aWxpdHlMYXllci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl91
dGlsaXR5TGF5ZXIgPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gUGh5c2lj
c1ZpZXdlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRGVidWcvcmF5SGVs
cGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0Rl
YnVnL3JheUhlbHBlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJheUhlbHBlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJSYXlIZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJheUhlbHBlcjsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9t
YXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVpbGRl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWVzaGVzL0J1aWxkZXJzL2xpbmVzQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvbGlu
ZXNCdWlsZGVyLnRzIik7CisKKworCisvKioKKyAqIEFzIHJheWNhc3QgbWlnaHQgYmUgaGFyZCB0
byBkZWJ1ZywgdGhlIFJheUhlbHBlciBjYW4gaGVscCByZW5kZXJpbmcgdGhlIGRpZmZlcmVudCBy
YXlzCisgKiBpbiBvcmRlciB0byBiZXR0ZXIgYXBwcmVjaWF0ZSB0aGUgaXNzdWUgb25lIG1pZ2h0
IGhhdmUuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL3JheWNh
c3RzI2RlYnVnZ2luZworICovCit2YXIgUmF5SGVscGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIGEgbmV3IHJheSBoZWxwZXIuCisg
ICAgICogQXMgcmF5Y2FzdCBtaWdodCBiZSBoYXJkIHRvIGRlYnVnLCB0aGUgUmF5SGVscGVyIGNh
biBoZWxwIHJlbmRlcmluZyB0aGUgZGlmZmVyZW50IHJheXMKKyAgICAgKiBpbiBvcmRlciB0byBi
ZXR0ZXIgYXBwcmVjaWF0ZSB0aGUgaXNzdWUgb25lIG1pZ2h0IGhhdmUuCisgICAgICogQHNlZSBo
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9yYXljYXN0cyNkZWJ1Z2dpbmcKKyAg
ICAgKiBAcGFyYW0gcmF5IERlZmluZXMgdGhlIHJheSB3ZSBhcmUgY3VycmVudGx5IHRyeWluIHRv
IHZpc3VhbGl6ZQorICAgICAqLworICAgIGZ1bmN0aW9uIFJheUhlbHBlcihyYXkpIHsKKyAgICAg
ICAgdGhpcy5yYXkgPSByYXk7CisgICAgfQorICAgIC8qKgorICAgICAqIEhlbHBlciBmdW5jdGlv
biB0byBjcmVhdGUgYSBjb2xvcmVkIGhlbHBlciBpbiBhIHNjZW5lIGluIG9uZSBsaW5lLgorICAg
ICAqIEBwYXJhbSByYXkgRGVmaW5lcyB0aGUgcmF5IHdlIGFyZSBjdXJyZW50bHkgdHJ5aW4gdG8g
dmlzdWFsaXplCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRoZSByYXkg
aXMgdXNlZCBpbgorICAgICAqIEBwYXJhbSBjb2xvciBEZWZpbmVzIHRoZSBjb2xvciB3ZSB3YW50
IHRvIHNlZSB0aGUgcmF5IGluCisgICAgICogQHJldHVybnMgVGhlIG5ld2x5IGNyZWF0ZWQgcmF5
IGhlbHBlci4KKyAgICAgKi8KKyAgICBSYXlIZWxwZXIuQ3JlYXRlQW5kU2hvdyA9IGZ1bmN0aW9u
IChyYXksIHNjZW5lLCBjb2xvcikgeworICAgICAgICB2YXIgaGVscGVyID0gbmV3IFJheUhlbHBl
cihyYXkpOworICAgICAgICBoZWxwZXIuc2hvdyhzY2VuZSwgY29sb3IpOworICAgICAgICByZXR1
cm4gaGVscGVyOworICAgIH07CisgICAgLyoqCisgICAgICogU2hvd3MgdGhlIHJheSB3ZSBhcmUg
d2lsbGluZyB0byBkZWJ1Zy4KKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lcyB0aGUgc2NlbmUg
dGhlIHJheSBuZWVkcyB0byBiZSByZW5kZXJlZCBpbgorICAgICAqIEBwYXJhbSBjb2xvciBEZWZp
bmVzIHRoZSBjb2xvciB0aGUgcmF5IG5lZWRzIHRvIGJlIHJlbmRlcmVkIGluCisgICAgICovCisg
ICAgUmF5SGVscGVyLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKHNjZW5lLCBjb2xvcikgewor
ICAgICAgICBpZiAoIXRoaXMuX3JlbmRlckZ1bmN0aW9uICYmIHRoaXMucmF5KSB7CisgICAgICAg
ICAgICB2YXIgcmF5ID0gdGhpcy5yYXk7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJGdW5jdGlv
biA9IHRoaXMuX3JlbmRlci5iaW5kKHRoaXMpOworICAgICAgICAgICAgdGhpcy5fc2NlbmUgPSBz
Y2VuZTsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlclBvaW50cyA9IFtyYXkub3JpZ2luLCByYXku
b3JpZ2luLmFkZChyYXkuZGlyZWN0aW9uLnNjYWxlKHJheS5sZW5ndGgpKV07CisgICAgICAgICAg
ICB0aGlzLl9yZW5kZXJMaW5lID0gX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIk1lc2giXS5DcmVhdGVMaW5lcygicmF5IiwgdGhpcy5fcmVuZGVyUG9pbnRzLCBzY2Vu
ZSwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyRnVuY3Rpb24pIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9zY2VuZS5yZWdpc3RlckJlZm9yZVJlbmRlcih0aGlzLl9yZW5kZXJG
dW5jdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbG9yICYm
IHRoaXMuX3JlbmRlckxpbmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlckxpbmUuY29sb3Iu
Y29weUZyb20oY29sb3IpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBIaWRl
cyB0aGUgcmF5IHdlIGFyZSBkZWJ1Z2dpbmcuCisgICAgICovCisgICAgUmF5SGVscGVyLnByb3Rv
dHlwZS5oaWRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fcmVuZGVyRnVuY3Rp
b24gJiYgdGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLnVucmVnaXN0ZXJC
ZWZvcmVSZW5kZXIodGhpcy5fcmVuZGVyRnVuY3Rpb24pOworICAgICAgICAgICAgdGhpcy5fc2Nl
bmUgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fcmVuZGVyRnVuY3Rpb24gPSBudWxsOworICAg
ICAgICAgICAgaWYgKHRoaXMuX3JlbmRlckxpbmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9y
ZW5kZXJMaW5lLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJMaW5lID0g
bnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3JlbmRlclBvaW50cyA9IFtd
OworICAgICAgICB9CisgICAgfTsKKyAgICBSYXlIZWxwZXIucHJvdG90eXBlLl9yZW5kZXIgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHZhciByYXkgPSB0aGlzLnJheTsKKyAgICAgICAgaWYgKCFy
YXkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgcG9pbnQg
PSB0aGlzLl9yZW5kZXJQb2ludHNbMV07CisgICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihyYXku
bGVuZ3RoLCAxMDAwMDAwKTsKKyAgICAgICAgcG9pbnQuY29weUZyb20ocmF5LmRpcmVjdGlvbik7
CisgICAgICAgIHBvaW50LnNjYWxlSW5QbGFjZShsZW4pOworICAgICAgICBwb2ludC5hZGRJblBs
YWNlKHJheS5vcmlnaW4pOworICAgICAgICBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZUxpbmVzKCJyYXkiLCB0aGlzLl9yZW5kZXJQb2ludHMs
IHRoaXMuX3NjZW5lLCB0cnVlLCB0aGlzLl9yZW5kZXJMaW5lKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEF0dGFjaCBhIHJheSBoZWxwZXIgdG8gYSBtZXNoIHNvIHRoYXQgd2UgY2FuIGVhc2ls
eSBzZWUgaXRzIG9yaWVudGF0aW9uIGZvciBpbnN0YW5jZSBvciBpbmZvcm1hdGlvbiBsaWtlIGl0
cyBub3JtYWxzLgorICAgICAqIEBwYXJhbSBtZXNoIERlZmluZXMgdGhlIG1lc2ggd2Ugd2FudCB0
aGUgaGVscGVyIGF0dGFjaGVkIHRvCisgICAgICogQHBhcmFtIG1lc2hTcGFjZURpcmVjdGlvbiBE
ZWZpbmVzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIFJheSBpbiBtZXNoIHNwYWNlIChsb2NhbCBzcGFj
ZSBvZiB0aGUgbWVzaCBub2RlKQorICAgICAqIEBwYXJhbSBtZXNoU3BhY2VPcmlnaW4gRGVmaW5l
cyB0aGUgb3JpZ2luIG9mIHRoZSBSYXkgaW4gbWVzaCBzcGFjZSAobG9jYWwgc3BhY2Ugb2YgdGhl
IG1lc2ggbm9kZSkKKyAgICAgKiBAcGFyYW0gbGVuZ3RoIERlZmluZXMgdGhlIGxlbmd0aCBvZiB0
aGUgcmF5CisgICAgICovCisgICAgUmF5SGVscGVyLnByb3RvdHlwZS5hdHRhY2hUb01lc2ggPSBm
dW5jdGlvbiAobWVzaCwgbWVzaFNwYWNlRGlyZWN0aW9uLCBtZXNoU3BhY2VPcmlnaW4sIGxlbmd0
aCkgeworICAgICAgICB0aGlzLl9hdHRhY2hlZFRvTWVzaCA9IG1lc2g7CisgICAgICAgIHZhciBy
YXkgPSB0aGlzLnJheTsKKyAgICAgICAgaWYgKCFyYXkpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIXJheS5kaXJlY3Rpb24pIHsKKyAgICAgICAgICAgIHJh
eS5kaXJlY3Rpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJheS5vcmln
aW4pIHsKKyAgICAgICAgICAgIHJheS5vcmlnaW4gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobGVuZ3RoKSB7CisgICAgICAgICAgICByYXkubGVuZ3RoID0gbGVuZ3RoOworICAg
ICAgICB9CisgICAgICAgIGlmICghbWVzaFNwYWNlT3JpZ2luKSB7CisgICAgICAgICAgICBtZXNo
U3BhY2VPcmlnaW4gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1lc2hTcGFj
ZURpcmVjdGlvbikgeworICAgICAgICAgICAgLy8gLTEgc28gdGhhdCB0aGlzIHdpbGwgd29yayB3
aXRoIE1lc2gubG9va0F0CisgICAgICAgICAgICBtZXNoU3BhY2VEaXJlY3Rpb24gPSBuZXcgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgw
LCAwLCAtMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9tZXNoU3BhY2VEaXJlY3Rp
b24pIHsKKyAgICAgICAgICAgIHRoaXMuX21lc2hTcGFjZURpcmVjdGlvbiA9IG1lc2hTcGFjZURp
cmVjdGlvbi5jbG9uZSgpOworICAgICAgICAgICAgdGhpcy5fbWVzaFNwYWNlT3JpZ2luID0gbWVz
aFNwYWNlT3JpZ2luLmNsb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLl9tZXNoU3BhY2VEaXJlY3Rpb24uY29weUZyb20obWVzaFNwYWNlRGlyZWN0aW9u
KTsKKyAgICAgICAgICAgIHRoaXMuX21lc2hTcGFjZU9yaWdpbi5jb3B5RnJvbShtZXNoU3BhY2VP
cmlnaW4pOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fdXBkYXRlVG9NZXNoRnVuY3Rp
b24pIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRvTWVzaEZ1bmN0aW9uID0gdGhpcy5fdXBk
YXRlVG9NZXNoLmJpbmQodGhpcyk7CisgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZFRvTWVzaC5n
ZXRTY2VuZSgpLnJlZ2lzdGVyQmVmb3JlUmVuZGVyKHRoaXMuX3VwZGF0ZVRvTWVzaEZ1bmN0aW9u
KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl91cGRhdGVUb01lc2goKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIERldGFjaCB0aGUgcmF5IGhlbHBlciBmcm9tIHRoZSBtZXNoIGl0IGhhcyBw
cmV2aW91c2x5IGJlZW4gYXR0YWNoZWQgdG8uCisgICAgICovCisgICAgUmF5SGVscGVyLnByb3Rv
dHlwZS5kZXRhY2hGcm9tTWVzaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2F0
dGFjaGVkVG9NZXNoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdXBkYXRlVG9NZXNoRnVuY3Rp
b24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZFRvTWVzaC5nZXRTY2VuZSgpLnVu
cmVnaXN0ZXJCZWZvcmVSZW5kZXIodGhpcy5fdXBkYXRlVG9NZXNoRnVuY3Rpb24pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYXR0YWNoZWRUb01lc2ggPSBudWxsOworICAgICAg
ICAgICAgdGhpcy5fdXBkYXRlVG9NZXNoRnVuY3Rpb24gPSBudWxsOworICAgICAgICB9CisgICAg
fTsKKyAgICBSYXlIZWxwZXIucHJvdG90eXBlLl91cGRhdGVUb01lc2ggPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciByYXkgPSB0aGlzLnJheTsKKyAgICAgICAgaWYgKCF0aGlzLl9hdHRhY2hl
ZFRvTWVzaCB8fCAhcmF5KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuX2F0dGFjaGVkVG9NZXNoLl9pc0Rpc3Bvc2VkKSB7CisgICAgICAgICAgICB0
aGlzLmRldGFjaEZyb21NZXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fYXR0YWNoZWRUb01lc2guZ2V0RGlyZWN0aW9uVG9SZWYodGhpcy5fbWVzaFNw
YWNlRGlyZWN0aW9uLCByYXkuZGlyZWN0aW9uKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGlu
YXRlc1RvUmVmKHRoaXMuX21lc2hTcGFjZU9yaWdpbiwgdGhpcy5fYXR0YWNoZWRUb01lc2guZ2V0
V29ybGRNYXRyaXgoKSwgcmF5Lm9yaWdpbik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNw
b3NlIHRoZSBoZWxwZXIgYW5kIHJlbGVhc2UgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICAg
ICAqLworICAgIFJheUhlbHBlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5oaWRlKCk7CisgICAgICAgIHRoaXMuZGV0YWNoRnJvbU1lc2goKTsKKyAgICAg
ICAgdGhpcy5yYXkgPSBudWxsOworICAgIH07CisgICAgcmV0dXJuIFJheUhlbHBlcjsKK30oKSk7
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRGVidWcvc2tlbGV0b25WaWV3ZXIudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9EZWJ1Zy9z
a2VsZXRvblZpZXdlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2tlbGV0b25WaWV3ZXIgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2tlbGV0b25WaWV3ZXIiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIFNrZWxldG9uVmlld2VyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21h
dGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfbGluZXNCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvbGlu
ZXNCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9saW5lc0J1aWxkZXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfUmVuZGVyaW5nX3V0aWxpdHlMYXllclJlbmRlcmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9SZW5k
ZXJpbmcvdXRpbGl0eUxheWVyUmVuZGVyZXIgKi8gIi4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJl
bmRlcmVyLnRzIik7CisKKworCisKKy8qKgorICAgICAqIENsYXNzIHVzZWQgdG8gcmVuZGVyIGEg
ZGVidWcgdmlldyBvZiBhIGdpdmVuIHNrZWxldG9uCisgICAgICogQHNlZSBodHRwOi8vd3d3LmJh
Ynlsb25qcy1wbGF5Z3JvdW5kLmNvbS8jMUJaSlZKIzgKKyAgICAgKi8KK3ZhciBTa2VsZXRvblZp
ZXdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IFNrZWxldG9uVmlld2VyCisgICAgICogQHBhcmFtIHNrZWxldG9uIGRlZmluZXMg
dGhlIHNrZWxldG9uIHRvIHJlbmRlcgorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIG1l
c2ggYXR0YWNoZWQgdG8gdGhlIHNrZWxldG9uCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMg
dGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gYXV0b1VwZGF0ZUJvbmVzTWF0cmljZXMg
ZGVmaW5lcyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBib25lcyBtYXRyaWNlcyBtdXN0IGJlIGZv
cmNlZCB0byB1cGRhdGUgYmVmb3JlIHJlbmRlcmluZyAodHJ1ZSBieSBkZWZhdWx0KQorICAgICAq
IEBwYXJhbSByZW5kZXJpbmdHcm91cElkIGRlZmluZXMgdGhlIHJlbmRlcmluZyBncm91cCBpZCB0
byB1c2Ugd2l0aCB0aGUgdmlld2VyCisgICAgICovCisgICAgZnVuY3Rpb24gU2tlbGV0b25WaWV3
ZXIoCisgICAgLyoqIGRlZmluZXMgdGhlIHNrZWxldG9uIHRvIHJlbmRlciAqLworICAgIHNrZWxl
dG9uLCAKKyAgICAvKiogZGVmaW5lcyB0aGUgbWVzaCBhdHRhY2hlZCB0byB0aGUgc2tlbGV0b24g
Ki8KKyAgICBtZXNoLCBzY2VuZSwgCisgICAgLyoqIGRlZmluZXMgYSBib29sZWFuIGluZGljYXRp
bmcgaWYgYm9uZXMgbWF0cmljZXMgbXVzdCBiZSBmb3JjZWQgdG8gdXBkYXRlIGJlZm9yZSByZW5k
ZXJpbmcgKHRydWUgYnkgZGVmYXVsdCkgICovCisgICAgYXV0b1VwZGF0ZUJvbmVzTWF0cmljZXMs
IAorICAgIC8qKiBkZWZpbmVzIHRoZSByZW5kZXJpbmcgZ3JvdXAgaWQgdG8gdXNlIHdpdGggdGhl
IHZpZXdlciAqLworICAgIHJlbmRlcmluZ0dyb3VwSWQpIHsKKyAgICAgICAgaWYgKGF1dG9VcGRh
dGVCb25lc01hdHJpY2VzID09PSB2b2lkIDApIHsgYXV0b1VwZGF0ZUJvbmVzTWF0cmljZXMgPSB0
cnVlOyB9CisgICAgICAgIGlmIChyZW5kZXJpbmdHcm91cElkID09PSB2b2lkIDApIHsgcmVuZGVy
aW5nR3JvdXBJZCA9IDE7IH0KKyAgICAgICAgdGhpcy5za2VsZXRvbiA9IHNrZWxldG9uOworICAg
ICAgICB0aGlzLm1lc2ggPSBtZXNoOworICAgICAgICB0aGlzLmF1dG9VcGRhdGVCb25lc01hdHJp
Y2VzID0gYXV0b1VwZGF0ZUJvbmVzTWF0cmljZXM7CisgICAgICAgIHRoaXMucmVuZGVyaW5nR3Jv
dXBJZCA9IHJlbmRlcmluZ0dyb3VwSWQ7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIGNv
bG9yIHVzZWQgdG8gcmVuZGVyIHRoZSBza2VsZXRvbiAqLworICAgICAgICB0aGlzLmNvbG9yID0g
X01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3IzIl0u
V2hpdGUoKTsKKyAgICAgICAgdGhpcy5fZGVidWdMaW5lcyA9IG5ldyBBcnJheSgpOworICAgICAg
ICB0aGlzLl9pc0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZTsK
KyAgICAgICAgdGhpcy5fdXRpbGl0eUxheWVyID0gbmV3IF9SZW5kZXJpbmdfdXRpbGl0eUxheWVy
UmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVXRpbGl0eUxheWVyUmVuZGVy
ZXIiXSh0aGlzLl9zY2VuZSwgZmFsc2UpOworICAgICAgICB0aGlzLl91dGlsaXR5TGF5ZXIucGlj
a1V0aWxpdHlTY2VuZUZpcnN0ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3V0aWxpdHlMYXllci51
dGlsaXR5TGF5ZXJTY2VuZS5hdXRvQ2xlYXJEZXB0aEFuZFN0ZW5jaWwgPSB0cnVlOworICAgICAg
ICB0aGlzLnVwZGF0ZSgpOworICAgICAgICB0aGlzLl9yZW5kZXJGdW5jdGlvbiA9IHRoaXMudXBk
YXRlLmJpbmQodGhpcyk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTa2VsZXRv
blZpZXdlci5wcm90b3R5cGUsICJkZWJ1Z01lc2giLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBSZXR1cm5zIHRoZSBtZXNoIHVzZWQgdG8gcmVuZGVyIHRoZSBib25lcworICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVi
dWdNZXNoOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2tl
bGV0b25WaWV3ZXIucHJvdG90eXBlLCAiaXNFbmFibGVkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0VuYWJsZWQ7CisgICAgICAgIH0s
CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHZp
ZXdlciBpcyBlbmFibGVkICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5faXNFbmFibGVkID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IHZh
bHVlOworICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2Nl
bmUucmVnaXN0ZXJCZWZvcmVSZW5kZXIodGhpcy5fcmVuZGVyRnVuY3Rpb24pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUudW5y
ZWdpc3RlckJlZm9yZVJlbmRlcih0aGlzLl9yZW5kZXJGdW5jdGlvbik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIFNrZWxldG9uVmlld2VyLnByb3RvdHlwZS5fZ2V0Qm9u
ZVBvc2l0aW9uID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBib25lLCBtZXNoTWF0LCB4LCB5LCB6KSB7
CisgICAgICAgIGlmICh4ID09PSB2b2lkIDApIHsgeCA9IDA7IH0KKyAgICAgICAgaWYgKHkgPT09
IHZvaWQgMCkgeyB5ID0gMDsgfQorICAgICAgICBpZiAoeiA9PT0gdm9pZCAwKSB7IHogPSAwOyB9
CisgICAgICAgIHZhciB0bWF0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF07CisgICAgICAgIHZhciBwYXJlbnRC
b25lID0gYm9uZS5nZXRQYXJlbnQoKTsKKyAgICAgICAgdG1hdC5jb3B5RnJvbShib25lLmdldExv
Y2FsTWF0cml4KCkpOworICAgICAgICBpZiAoeCAhPT0gMCB8fCB5ICE9PSAwIHx8IHogIT09IDAp
IHsKKyAgICAgICAgICAgIHZhciB0bWF0MiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzFdOworICAgICAgICAgICAg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJd
LklkZW50aXR5VG9SZWYodG1hdDIpOworICAgICAgICAgICAgdG1hdDIuc2V0VHJhbnNsYXRpb25G
cm9tRmxvYXRzKHgsIHksIHopOworICAgICAgICAgICAgdG1hdDIubXVsdGlwbHlUb1JlZih0bWF0
LCB0bWF0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyZW50Qm9uZSkgeworICAgICAgICAg
ICAgdG1hdC5tdWx0aXBseVRvUmVmKHBhcmVudEJvbmUuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0oKSwg
dG1hdCk7CisgICAgICAgIH0KKyAgICAgICAgdG1hdC5tdWx0aXBseVRvUmVmKG1lc2hNYXQsIHRt
YXQpOworICAgICAgICBwb3NpdGlvbi54ID0gdG1hdC5tWzEyXTsKKyAgICAgICAgcG9zaXRpb24u
eSA9IHRtYXQubVsxM107CisgICAgICAgIHBvc2l0aW9uLnogPSB0bWF0Lm1bMTRdOworICAgIH07
CisgICAgU2tlbGV0b25WaWV3ZXIucHJvdG90eXBlLl9nZXRMaW5lc0ZvckJvbmVzV2l0aExlbmd0
aCA9IGZ1bmN0aW9uIChib25lcywgbWVzaE1hdCkgeworICAgICAgICB2YXIgbGVuID0gYm9uZXMu
bGVuZ3RoOworICAgICAgICB2YXIgbWVzaCA9IHRoaXMubWVzaC5fZWZmZWN0aXZlTWVzaDsKKyAg
ICAgICAgdmFyIG1lc2hQb3MgPSBtZXNoLnBvc2l0aW9uOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYm9uZSA9IGJvbmVzW2ldOworICAg
ICAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMuX2RlYnVnTGluZXNbaV07CisgICAgICAgICAgICBp
ZiAoIXBvaW50cykgeworICAgICAgICAgICAgICAgIHBvaW50cyA9IFtfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKSwgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJv
KCldOworICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnTGluZXNbaV0gPSBwb2ludHM7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9nZXRCb25lUG9zaXRpb24ocG9pbnRzWzBdLCBi
b25lLCBtZXNoTWF0KTsKKyAgICAgICAgICAgIHRoaXMuX2dldEJvbmVQb3NpdGlvbihwb2ludHNb
MV0sIGJvbmUsIG1lc2hNYXQsIDAsIGJvbmUubGVuZ3RoLCAwKTsKKyAgICAgICAgICAgIHBvaW50
c1swXS5zdWJ0cmFjdEluUGxhY2UobWVzaFBvcyk7CisgICAgICAgICAgICBwb2ludHNbMV0uc3Vi
dHJhY3RJblBsYWNlKG1lc2hQb3MpOworICAgICAgICB9CisgICAgfTsKKyAgICBTa2VsZXRvblZp
ZXdlci5wcm90b3R5cGUuX2dldExpbmVzRm9yQm9uZXNOb0xlbmd0aCA9IGZ1bmN0aW9uIChib25l
cywgbWVzaE1hdCkgeworICAgICAgICB2YXIgbGVuID0gYm9uZXMubGVuZ3RoOworICAgICAgICB2
YXIgYm9uZU51bSA9IDA7CisgICAgICAgIHZhciBtZXNoID0gdGhpcy5tZXNoLl9lZmZlY3RpdmVN
ZXNoOworICAgICAgICB2YXIgbWVzaFBvcyA9IG1lc2gucG9zaXRpb247CisgICAgICAgIGZvciAo
dmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgdmFyIGNoaWxkQm9u
ZSA9IGJvbmVzW2ldOworICAgICAgICAgICAgdmFyIHBhcmVudEJvbmUgPSBjaGlsZEJvbmUuZ2V0
UGFyZW50KCk7CisgICAgICAgICAgICBpZiAoIXBhcmVudEJvbmUpIHsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBwb2ludHMgPSB0aGlz
Ll9kZWJ1Z0xpbmVzW2JvbmVOdW1dOworICAgICAgICAgICAgaWYgKCFwb2ludHMpIHsKKyAgICAg
ICAgICAgICAgICBwb2ludHMgPSBbX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCksIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpXTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9kZWJ1Z0xpbmVzW2JvbmVOdW1dID0gcG9pbnRzOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2hpbGRCb25lLmdldEFic29sdXRlUG9zaXRpb25Ub1JlZihtZXNoLCBwb2ludHNb
MF0pOworICAgICAgICAgICAgcGFyZW50Qm9uZS5nZXRBYnNvbHV0ZVBvc2l0aW9uVG9SZWYobWVz
aCwgcG9pbnRzWzFdKTsKKyAgICAgICAgICAgIHBvaW50c1swXS5zdWJ0cmFjdEluUGxhY2UobWVz
aFBvcyk7CisgICAgICAgICAgICBwb2ludHNbMV0uc3VidHJhY3RJblBsYWNlKG1lc2hQb3MpOwor
ICAgICAgICAgICAgYm9uZU51bSsrOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogVXBkYXRl
IHRoZSB2aWV3ZXIgdG8gc3luYyB3aXRoIGN1cnJlbnQgc2tlbGV0b24gc3RhdGUgKi8KKyAgICBT
a2VsZXRvblZpZXdlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAoIXRoaXMuX3V0aWxpdHlMYXllcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGlmICh0aGlzLmF1dG9VcGRhdGVCb25lc01hdHJpY2VzKSB7CisgICAgICAgICAg
ICB0aGlzLnNrZWxldG9uLmNvbXB1dGVBYnNvbHV0ZVRyYW5zZm9ybXMoKTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgbWVzaCA9IHRoaXMubWVzaC5fZWZmZWN0aXZlTWVzaDsKKyAgICAgICAgaWYg
KHRoaXMuc2tlbGV0b24uYm9uZXNbMF0ubGVuZ3RoID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2dldExpbmVzRm9yQm9uZXNOb0xlbmd0aCh0aGlzLnNrZWxldG9uLmJvbmVzLCBt
ZXNoLmdldFdvcmxkTWF0cml4KCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdGhpcy5fZ2V0TGluZXNGb3JCb25lc1dpdGhMZW5ndGgodGhpcy5za2VsZXRvbi5ib25l
cywgbWVzaC5nZXRXb3JsZE1hdHJpeCgpKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgdGFyZ2V0
U2NlbmUgPSB0aGlzLl91dGlsaXR5TGF5ZXIudXRpbGl0eUxheWVyU2NlbmU7CisgICAgICAgIGlm
ICghdGhpcy5fZGVidWdNZXNoKSB7CisgICAgICAgICAgICB0aGlzLl9kZWJ1Z01lc2ggPSBfTWVz
aGVzX0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJM
aW5lc0J1aWxkZXIiXS5DcmVhdGVMaW5lU3lzdGVtKCIiLCB7IGxpbmVzOiB0aGlzLl9kZWJ1Z0xp
bmVzLCB1cGRhdGFibGU6IHRydWUsIGluc3RhbmNlOiBudWxsIH0sIHRhcmdldFNjZW5lKTsKKyAg
ICAgICAgICAgIHRoaXMuX2RlYnVnTWVzaC5yZW5kZXJpbmdHcm91cElkID0gdGhpcy5yZW5kZXJp
bmdHcm91cElkOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX01lc2hl
c19CdWlsZGVyc19saW5lc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTGlu
ZXNCdWlsZGVyIl0uQ3JlYXRlTGluZVN5c3RlbSgiIiwgeyBsaW5lczogdGhpcy5fZGVidWdMaW5l
cywgdXBkYXRhYmxlOiB0cnVlLCBpbnN0YW5jZTogdGhpcy5fZGVidWdNZXNoIH0sIHRhcmdldFNj
ZW5lKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9kZWJ1Z01lc2gucG9zaXRpb24uY29weUZy
b20odGhpcy5tZXNoLnBvc2l0aW9uKTsKKyAgICAgICAgdGhpcy5fZGVidWdNZXNoLmNvbG9yID0g
dGhpcy5jb2xvcjsKKyAgICB9OworICAgIC8qKiBSZWxlYXNlIGFzc29jaWF0ZWQgcmVzb3VyY2Vz
ICovCisgICAgU2tlbGV0b25WaWV3ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMuaXNFbmFibGVkID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlzLl9kZWJ1
Z01lc2gpIHsKKyAgICAgICAgICAgIHRoaXMuaXNFbmFibGVkID0gZmFsc2U7CisgICAgICAgICAg
ICB0aGlzLl9kZWJ1Z01lc2guZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fZGVidWdNZXNo
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fdXRpbGl0eUxheWVyKSB7Cisg
ICAgICAgICAgICB0aGlzLl91dGlsaXR5TGF5ZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhp
cy5fdXRpbGl0eUxheWVyID0gbnVsbDsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIFNr
ZWxldG9uVmlld2VyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVz
L0V4dGVuc2lvbnMvZW5naW5lLmN1YmVUZXh0dXJlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9FbmdpbmVzL0V4
dGVuc2lvbnMvZW5naW5lLmN1YmVUZXh0dXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIG5vIGV4cG9ydHMgcHJvdmlk
ZWQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xp
YiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5n
aW5lcy9lbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4
dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJuYWxUZXh0dXJlLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9N
aXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2ZpbGVUb29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTWlzYy9maWxlVG9vbHMgKi8gIi4vTWlzYy9maWxlVG9vbHMudHMiKTsKKworCisKKwor
CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0u
cHJvdG90eXBlLl9jcmVhdGVEZXB0aFN0ZW5jaWxDdWJlVGV4dHVyZSA9IGZ1bmN0aW9uIChzaXpl
LCBvcHRpb25zKSB7CisgICAgdmFyIGludGVybmFsVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRl
cm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09VUkNF
X1VOS05PV04pOworICAgIGludGVybmFsVGV4dHVyZS5pc0N1YmUgPSB0cnVlOworICAgIGlmICh0
aGlzLndlYkdMVmVyc2lvbiA9PT0gMSkgeworICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siTG9nZ2VyIl0uRXJyb3IoIkRlcHRoIGN1YmUgdGV4dHVyZSBp
cyBub3Qgc3VwcG9ydGVkIGJ5IFdlYkdMIDEuIik7CisgICAgICAgIHJldHVybiBpbnRlcm5hbFRl
eHR1cmU7CisgICAgfQorICAgIHZhciBpbnRlcm5hbE9wdGlvbnMgPSB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fzc2lnbiJdKHsgYmlsaW5lYXJGaWx0ZXJpbmc6IGZhbHNl
LCBjb21wYXJpc29uRnVuY3Rpb246IDAsIGdlbmVyYXRlU3RlbmNpbDogZmFsc2UgfSwgb3B0aW9u
cyk7CisgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3Rs
eShnbC5URVhUVVJFX0NVQkVfTUFQLCBpbnRlcm5hbFRleHR1cmUsIHRydWUpOworICAgIHRoaXMu
X3NldHVwRGVwdGhTdGVuY2lsVGV4dHVyZShpbnRlcm5hbFRleHR1cmUsIHNpemUsIGludGVybmFs
T3B0aW9ucy5nZW5lcmF0ZVN0ZW5jaWwsIGludGVybmFsT3B0aW9ucy5iaWxpbmVhckZpbHRlcmlu
ZywgaW50ZXJuYWxPcHRpb25zLmNvbXBhcmlzb25GdW5jdGlvbik7CisgICAgLy8gQ3JlYXRlIHRo
ZSBkZXB0aC9zdGVuY2lsIGJ1ZmZlcgorICAgIGZvciAodmFyIGZhY2UgPSAwOyBmYWNlIDwgNjsg
ZmFjZSsrKSB7CisgICAgICAgIGlmIChpbnRlcm5hbE9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsKSB7
CisgICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCArIGZhY2UsIDAsIGdsLkRFUFRIMjRfU1RFTkNJTDgsIHNpemUsIHNpemUsIDAsIGdsLkRFUFRI
X1NURU5DSUwsIGdsLlVOU0lHTkVEX0lOVF8yNF84LCBudWxsKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YICsgZmFjZSwgMCwgZ2wuREVQVEhfQ09NUE9ORU5UMjQsIHNpemUsIHNpemUsIDAs
IGdsLkRFUFRIX0NPTVBPTkVOVCwgZ2wuVU5TSUdORURfSU5ULCBudWxsKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfQ1VCRV9NQVAs
IG51bGwpOworICAgIHJldHVybiBpbnRlcm5hbFRleHR1cmU7Cit9OworX0VuZ2luZXNfZW5naW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2luZSJdLnByb3RvdHlwZS5fcGFydGlh
bExvYWRGaWxlID0gZnVuY3Rpb24gKHVybCwgaW5kZXgsIGxvYWRlZEZpbGVzLCBvbmZpbmlzaCwg
b25FcnJvckNhbGxCYWNrKSB7CisgICAgaWYgKG9uRXJyb3JDYWxsQmFjayA9PT0gdm9pZCAwKSB7
IG9uRXJyb3JDYWxsQmFjayA9IG51bGw7IH0KKyAgICB2YXIgb25sb2FkID0gZnVuY3Rpb24gKGRh
dGEpIHsKKyAgICAgICAgbG9hZGVkRmlsZXNbaW5kZXhdID0gZGF0YTsKKyAgICAgICAgbG9hZGVk
RmlsZXMuX2ludGVybmFsQ291bnQrKzsKKyAgICAgICAgaWYgKGxvYWRlZEZpbGVzLl9pbnRlcm5h
bENvdW50ID09PSA2KSB7CisgICAgICAgICAgICBvbmZpbmlzaChsb2FkZWRGaWxlcyk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIHZhciBvbmVycm9yID0gZnVuY3Rpb24gKHJlcXVlc3QsIGV4Y2Vw
dGlvbikgeworICAgICAgICBpZiAob25FcnJvckNhbGxCYWNrICYmIHJlcXVlc3QpIHsKKyAgICAg
ICAgICAgIG9uRXJyb3JDYWxsQmFjayhyZXF1ZXN0LnN0YXR1cyArICIgIiArIHJlcXVlc3Quc3Rh
dHVzVGV4dCwgZXhjZXB0aW9uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5fbG9hZEZp
bGUodXJsLCBvbmxvYWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlLCBvbmVycm9yKTsKK307
CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0u
cHJvdG90eXBlLl9jYXNjYWRlTG9hZEZpbGVzID0gZnVuY3Rpb24gKHNjZW5lLCBvbmZpbmlzaCwg
ZmlsZXMsIG9uRXJyb3IpIHsKKyAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3Ig
PSBudWxsOyB9CisgICAgdmFyIGxvYWRlZEZpbGVzID0gW107CisgICAgbG9hZGVkRmlsZXMuX2lu
dGVybmFsQ291bnQgPSAwOworICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCA2OyBpbmRl
eCsrKSB7CisgICAgICAgIHRoaXMuX3BhcnRpYWxMb2FkRmlsZShmaWxlc1tpbmRleF0sIGluZGV4
LCBsb2FkZWRGaWxlcywgb25maW5pc2gsIG9uRXJyb3IpOworICAgIH0KK307CitfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0ucHJvdG90eXBlLl9j
YXNjYWRlTG9hZEltZ3MgPSBmdW5jdGlvbiAoc2NlbmUsIG9uZmluaXNoLCBmaWxlcywgb25FcnJv
cikgeworICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG51bGw7IH0KKyAg
ICB2YXIgbG9hZGVkSW1hZ2VzID0gW107CisgICAgbG9hZGVkSW1hZ2VzLl9pbnRlcm5hbENvdW50
ID0gMDsKKyAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgNjsgaW5kZXgrKykgeworICAg
ICAgICB0aGlzLl9wYXJ0aWFsTG9hZEltZyhmaWxlc1tpbmRleF0sIGluZGV4LCBsb2FkZWRJbWFn
ZXMsIHNjZW5lLCBvbmZpbmlzaCwgb25FcnJvcik7CisgICAgfQorfTsKK19FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5wcm90b3R5cGUuX3BhcnRp
YWxMb2FkSW1nID0gZnVuY3Rpb24gKHVybCwgaW5kZXgsIGxvYWRlZEltYWdlcywgc2NlbmUsIG9u
ZmluaXNoLCBvbkVycm9yQ2FsbEJhY2spIHsKKyAgICBpZiAob25FcnJvckNhbGxCYWNrID09PSB2
b2lkIDApIHsgb25FcnJvckNhbGxCYWNrID0gbnVsbDsgfQorICAgIHZhciBpbWc7CisgICAgdmFy
IG9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgbG9hZGVkSW1hZ2VzW2luZGV4XSA9IGlt
ZzsKKyAgICAgICAgbG9hZGVkSW1hZ2VzLl9pbnRlcm5hbENvdW50Kys7CisgICAgICAgIGlmIChz
Y2VuZSkgeworICAgICAgICAgICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKGltZyk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGxvYWRlZEltYWdlcy5faW50ZXJuYWxDb3VudCA9PT0gNikgewor
ICAgICAgICAgICAgb25maW5pc2gobG9hZGVkSW1hZ2VzKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgdmFyIG9uZXJyb3IgPSBmdW5jdGlvbiAobWVzc2FnZSwgZXhjZXB0aW9uKSB7CisgICAgICAg
IGlmIChzY2VuZSkgeworICAgICAgICAgICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKGltZyk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9uRXJyb3JDYWxsQmFjaykgeworICAgICAgICAgICAg
b25FcnJvckNhbGxCYWNrKG1lc3NhZ2UsIGV4Y2VwdGlvbik7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIGltZyA9IF9NaXNjX2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJG
aWxlVG9vbHMiXS5Mb2FkSW1hZ2UodXJsLCBvbmxvYWQsIG9uZXJyb3IsIHNjZW5lID8gc2NlbmUu
b2ZmbGluZVByb3ZpZGVyIDogbnVsbCk7CisgICAgaWYgKHNjZW5lKSB7CisgICAgICAgIHNjZW5l
Ll9hZGRQZW5kaW5nRGF0YShpbWcpOworICAgIH0KK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0ucHJvdG90eXBlLmNyZWF0ZUN1YmVUZXh0
dXJlID0gZnVuY3Rpb24gKHJvb3RVcmwsIHNjZW5lLCBmaWxlcywgbm9NaXBtYXAsIG9uTG9hZCwg
b25FcnJvciwgZm9ybWF0LCBmb3JjZWRFeHRlbnNpb24sIGNyZWF0ZVBvbHlub21pYWxzLCBsb2RT
Y2FsZSwgbG9kT2Zmc2V0LCBmYWxsYmFjaywgZXhjbHVkZUxvYWRlcnMpIHsKKyAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgIGlmIChvbkxvYWQgPT09IHZvaWQgMCkgeyBvbkxvYWQgPSBudWxsOyB9
CisgICAgaWYgKG9uRXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbnVsbDsgfQorICAgIGlm
IChmb3JjZWRFeHRlbnNpb24gPT09IHZvaWQgMCkgeyBmb3JjZWRFeHRlbnNpb24gPSBudWxsOyB9
CisgICAgaWYgKGNyZWF0ZVBvbHlub21pYWxzID09PSB2b2lkIDApIHsgY3JlYXRlUG9seW5vbWlh
bHMgPSBmYWxzZTsgfQorICAgIGlmIChsb2RTY2FsZSA9PT0gdm9pZCAwKSB7IGxvZFNjYWxlID0g
MDsgfQorICAgIGlmIChsb2RPZmZzZXQgPT09IHZvaWQgMCkgeyBsb2RPZmZzZXQgPSAwOyB9Cisg
ICAgaWYgKGZhbGxiYWNrID09PSB2b2lkIDApIHsgZmFsbGJhY2sgPSBudWxsOyB9CisgICAgaWYg
KGV4Y2x1ZGVMb2FkZXJzID09PSB2b2lkIDApIHsgZXhjbHVkZUxvYWRlcnMgPSBbXTsgfQorICAg
IHZhciBnbCA9IHRoaXMuX2dsOworICAgIHZhciB0ZXh0dXJlID0gZmFsbGJhY2sgPyBmYWxsYmFj
ayA6IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1
cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5h
bFRleHR1cmUiXS5EQVRBU09VUkNFX0NVQkUpOworICAgIHRleHR1cmUuaXNDdWJlID0gdHJ1ZTsK
KyAgICB0ZXh0dXJlLnVybCA9IHJvb3RVcmw7CisgICAgdGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMg
PSAhbm9NaXBtYXA7CisgICAgdGV4dHVyZS5fbG9kR2VuZXJhdGlvblNjYWxlID0gbG9kU2NhbGU7
CisgICAgdGV4dHVyZS5fbG9kR2VuZXJhdGlvbk9mZnNldCA9IGxvZE9mZnNldDsKKyAgICBpZiAo
IXRoaXMuX2RvTm90SGFuZGxlQ29udGV4dExvc3QpIHsKKyAgICAgICAgdGV4dHVyZS5fZXh0ZW5z
aW9uID0gZm9yY2VkRXh0ZW5zaW9uOworICAgICAgICB0ZXh0dXJlLl9maWxlcyA9IGZpbGVzOwor
ICAgIH0KKyAgICB2YXIgbGFzdERvdCA9IHJvb3RVcmwubGFzdEluZGV4T2YoJy4nKTsKKyAgICB2
YXIgZXh0ZW5zaW9uID0gZm9yY2VkRXh0ZW5zaW9uID8gZm9yY2VkRXh0ZW5zaW9uIDogKGxhc3RE
b3QgPiAtMSA/IHJvb3RVcmwuc3Vic3RyaW5nKGxhc3REb3QpLnRvTG93ZXJDYXNlKCkgOiAiIik7
CisgICAgdmFyIGxvYWRlciA9IG51bGw7CisgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5fVGV4dHVy
ZUxvYWRlcnM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgIHZhciBhdmFpbGFibGVM
b2FkZXIgPSBfYVtfaV07CisgICAgICAgIGlmIChleGNsdWRlTG9hZGVycy5pbmRleE9mKGF2YWls
YWJsZUxvYWRlcikgPT09IC0xICYmIGF2YWlsYWJsZUxvYWRlci5jYW5Mb2FkKGV4dGVuc2lvbiwg
dGhpcy5fdGV4dHVyZUZvcm1hdEluVXNlLCBmYWxsYmFjaywgZmFsc2UsIGZhbHNlKSkgeworICAg
ICAgICAgICAgbG9hZGVyID0gYXZhaWxhYmxlTG9hZGVyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgdmFyIG9uSW50ZXJuYWxFcnJvciA9IGZ1bmN0aW9uIChyZXF1
ZXN0LCBleGNlcHRpb24pIHsKKyAgICAgICAgaWYgKGxvYWRlcikgeworICAgICAgICAgICAgdmFy
IGZhbGxiYWNrVXJsID0gbG9hZGVyLmdldEZhbGxiYWNrVGV4dHVyZVVybCh0ZXh0dXJlLnVybCwg
X3RoaXMuX3RleHR1cmVGb3JtYXRJblVzZSk7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTG9nZ2VyIl0uV2Fybihsb2FkZXIuY29uc3RydWN0
b3IubmFtZSArICIgZmFpbGVkIHdoZW4gdHJ5aW5nIHRvIGxvYWQgIiArIHRleHR1cmUudXJsICsg
IiwgZmFsbGluZyBiYWNrIHRvIHRoZSBuZXh0IHN1cHBvcnRlZCBsb2FkZXIiKTsKKyAgICAgICAg
ICAgIGlmIChmYWxsYmFja1VybCkgeworICAgICAgICAgICAgICAgIGV4Y2x1ZGVMb2FkZXJzLnB1
c2gobG9hZGVyKTsKKyAgICAgICAgICAgICAgICBfdGhpcy5jcmVhdGVDdWJlVGV4dHVyZShmYWxs
YmFja1VybCwgc2NlbmUsIGZpbGVzLCBub01pcG1hcCwgb25Mb2FkLCBvbkVycm9yLCBmb3JtYXQs
IGV4dGVuc2lvbiwgY3JlYXRlUG9seW5vbWlhbHMsIGxvZFNjYWxlLCBsb2RPZmZzZXQsIHRleHR1
cmUsIGV4Y2x1ZGVMb2FkZXJzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9uRXJyb3IgJiYgcmVxdWVzdCkgeworICAgICAg
ICAgICAgb25FcnJvcihyZXF1ZXN0LnN0YXR1cyArICIgIiArIHJlcXVlc3Quc3RhdHVzVGV4dCwg
ZXhjZXB0aW9uKTsKKyAgICAgICAgfQorICAgIH07CisgICAgaWYgKGxvYWRlcikgeworICAgICAg
ICByb290VXJsID0gbG9hZGVyLnRyYW5zZm9ybVVybChyb290VXJsLCB0aGlzLl90ZXh0dXJlRm9y
bWF0SW5Vc2UpOworICAgICAgICB2YXIgb25sb2FkZGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7Cisg
ICAgICAgICAgICBfdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQ
LCB0ZXh0dXJlLCB0cnVlKTsKKyAgICAgICAgICAgIGxvYWRlci5sb2FkQ3ViZURhdGEoZGF0YSwg
dGV4dHVyZSwgY3JlYXRlUG9seW5vbWlhbHMsIG9uTG9hZCwgb25FcnJvcik7CisgICAgICAgIH07
CisgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPT09IDYpIHsKKyAgICAgICAgICAg
IGlmIChsb2FkZXIuc3VwcG9ydENhc2NhZGVzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY2Fz
Y2FkZUxvYWRGaWxlcyhzY2VuZSwgb25sb2FkZGF0YSwgZmlsZXMsIG9uRXJyb3IpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3Ip
IHsKKyAgICAgICAgICAgICAgICAgICAgb25FcnJvcigiVGV4dHVyZXMgdHlwZSBkb2VzIG5vdCBz
dXBwb3J0IGNhc2NhZGVzLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkxvZ2dlciJdLldhcm4oIlRleHR1cmUgbG9hZGVyIGRvZXMgbm90IHN1cHBv
cnQgY2FzY2FkZXMuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fbG9hZEZpbGUocm9vdFVybCwg
b25sb2FkZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUsIG9uSW50ZXJuYWxFcnJvcik7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmICghZmlsZXMpIHsKKyAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGxvYWQgY3ViZW1hcCBiZWNhdXNlIGZp
bGVzIHdlcmUgbm90IGRlZmluZWQiKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYXNjYWRl
TG9hZEltZ3Moc2NlbmUsIGZ1bmN0aW9uIChpbWdzKSB7CisgICAgICAgICAgICB2YXIgd2lkdGgg
PSBfdGhpcy5uZWVkUE9UVGV4dHVyZXMgPyBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siRW5naW5lIl0uR2V0RXhwb25lbnRPZlR3byhpbWdzWzBdLndpZHRoLCBf
dGhpcy5fY2Fwcy5tYXhDdWJlbWFwVGV4dHVyZVNpemUpIDogaW1nc1swXS53aWR0aDsKKyAgICAg
ICAgICAgIHZhciBoZWlnaHQgPSB3aWR0aDsKKyAgICAgICAgICAgIF90aGlzLl9wcmVwYXJlV29y
a2luZ0NhbnZhcygpOworICAgICAgICAgICAgaWYgKCFfdGhpcy5fd29ya2luZ0NhbnZhcyB8fCAh
X3RoaXMuX3dvcmtpbmdDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgX3RoaXMuX3dvcmtpbmdDYW52YXMud2lkdGggPSB3aWR0aDsK
KyAgICAgICAgICAgIF90aGlzLl93b3JraW5nQ2FudmFzLmhlaWdodCA9IGhlaWdodDsKKyAgICAg
ICAgICAgIHZhciBmYWNlcyA9IFsKKyAgICAgICAgICAgICAgICBnbC5URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1gsIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwgZ2wuVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9aLAorICAgICAgICAgICAgICAgIGdsLlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWCwgZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZLCBnbC5URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1oKKyAgICAgICAgICAgIF07CisgICAgICAgICAgICBfdGhpcy5fYmlu
ZFRleHR1cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlLCB0cnVlKTsKKyAg
ICAgICAgICAgIF90aGlzLl91bnBhY2tGbGlwWShmYWxzZSk7CisgICAgICAgICAgICB2YXIgaW50
ZXJuYWxGb3JtYXQgPSBmb3JtYXQgPyBfdGhpcy5fZ2V0SW50ZXJuYWxGb3JtYXQoZm9ybWF0KSA6
IF90aGlzLl9nbC5SR0JBOworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IGZhY2VzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIGlmIChpbWdzW2luZGV4
XS53aWR0aCAhPT0gd2lkdGggfHwgaW1nc1tpbmRleF0uaGVpZ2h0ICE9PSBoZWlnaHQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgX3RoaXMuX3dvcmtpbmdDb250ZXh0LmRyYXdJbWFnZShpbWdzW2lu
ZGV4XSwgMCwgMCwgaW1nc1tpbmRleF0ud2lkdGgsIGltZ3NbaW5kZXhdLmhlaWdodCwgMCwgMCwg
d2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZmFjZXNb
aW5kZXhdLCAwLCBpbnRlcm5hbEZvcm1hdCwgaW50ZXJuYWxGb3JtYXQsIGdsLlVOU0lHTkVEX0JZ
VEUsIF90aGlzLl93b3JraW5nQ2FudmFzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZmFjZXNbaW5k
ZXhdLCAwLCBpbnRlcm5hbEZvcm1hdCwgaW50ZXJuYWxGb3JtYXQsIGdsLlVOU0lHTkVEX0JZVEUs
IGltZ3NbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIW5vTWlwbWFwKSB7CisgICAgICAgICAgICAgICAgZ2wuZ2VuZXJhdGVNaXBtYXAo
Z2wuVEVYVFVSRV9DVUJFX01BUCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfdGhpcy5f
c2V0Q3ViZU1hcFRleHR1cmVQYXJhbXMoIW5vTWlwbWFwKTsKKyAgICAgICAgICAgIHRleHR1cmUu
d2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0OworICAg
ICAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChmb3JtYXQp
IHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLmZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRleHR1cmUub25Mb2FkZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyh0ZXh0dXJlKTsKKyAgICAgICAgICAgIHRleHR1cmUub25Mb2FkZWRPYnNlcnZhYmxlLmNsZWFy
KCk7CisgICAgICAgICAgICBpZiAob25Mb2FkKSB7CisgICAgICAgICAgICAgICAgb25Mb2FkKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sIGZpbGVzLCBvbkVycm9yKTsKKyAgICB9CisgICAg
dGhpcy5faW50ZXJuYWxUZXh0dXJlc0NhY2hlLnB1c2godGV4dHVyZSk7CisgICAgcmV0dXJuIHRl
eHR1cmU7Cit9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMv
ZW5naW5lLm11bHRpUmVuZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5n
aW5lLm11bHRpUmVuZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIG5vIGV4cG9ydHMgcHJvdmlkZWQgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
RW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50
ZXJuYWxUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworCisKKworX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS51
bkJpbmRNdWx0aUNvbG9yQXR0YWNobWVudEZyYW1lYnVmZmVyID0gZnVuY3Rpb24gKHRleHR1cmVz
LCBkaXNhYmxlR2VuZXJhdGVNaXBNYXBzLCBvbkJlZm9yZVVuYmluZCkgeworICAgIGlmIChkaXNh
YmxlR2VuZXJhdGVNaXBNYXBzID09PSB2b2lkIDApIHsgZGlzYWJsZUdlbmVyYXRlTWlwTWFwcyA9
IGZhbHNlOyB9CisgICAgdGhpcy5fY3VycmVudFJlbmRlclRhcmdldCA9IG51bGw7CisgICAgLy8g
SWYgTVNBQSwgd2UgbmVlZCB0byBiaXRibHQgYmFjayB0byBtYWluIHRleHR1cmUKKyAgICB2YXIg
Z2wgPSB0aGlzLl9nbDsKKyAgICBpZiAodGV4dHVyZXNbMF0uX01TQUFGcmFtZWJ1ZmZlcikgewor
ICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuUkVBRF9GUkFNRUJVRkZFUiwgdGV4dHVyZXNb
MF0uX01TQUFGcmFtZWJ1ZmZlcik7CisgICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5EUkFX
X0ZSQU1FQlVGRkVSLCB0ZXh0dXJlc1swXS5fZnJhbWVidWZmZXIpOworICAgICAgICB2YXIgYXR0
YWNobWVudHMgPSB0ZXh0dXJlc1swXS5fYXR0YWNobWVudHM7CisgICAgICAgIGlmICghYXR0YWNo
bWVudHMpIHsKKyAgICAgICAgICAgIGF0dGFjaG1lbnRzID0gbmV3IEFycmF5KHRleHR1cmVzLmxl
bmd0aCk7CisgICAgICAgICAgICB0ZXh0dXJlc1swXS5fYXR0YWNobWVudHMgPSBhdHRhY2htZW50
czsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHR1cmVzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRleHR1cmVzW2ldOworICAgICAg
ICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRhY2htZW50cy5sZW5ndGg7IGorKykgeworICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRzW2pdID0gZ2wuTk9ORTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGF0dGFjaG1lbnRzW2ldID0gZ2xbdGhpcy53ZWJHTFZlcnNpb24gPiAxID8gIkNP
TE9SX0FUVEFDSE1FTlQiICsgaSA6ICJDT0xPUl9BVFRBQ0hNRU5UIiArIGkgKyAiX1dFQkdMIl07
CisgICAgICAgICAgICBnbC5yZWFkQnVmZmVyKGF0dGFjaG1lbnRzW2ldKTsKKyAgICAgICAgICAg
IGdsLmRyYXdCdWZmZXJzKGF0dGFjaG1lbnRzKTsKKyAgICAgICAgICAgIGdsLmJsaXRGcmFtZWJ1
ZmZlcigwLCAwLCB0ZXh0dXJlLndpZHRoLCB0ZXh0dXJlLmhlaWdodCwgMCwgMCwgdGV4dHVyZS53
aWR0aCwgdGV4dHVyZS5oZWlnaHQsIGdsLkNPTE9SX0JVRkZFUl9CSVQsIGdsLk5FQVJFU1QpOwor
ICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0YWNobWVudHMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGF0dGFjaG1lbnRzW2ldID0gZ2xbdGhpcy53ZWJHTFZlcnNp
b24gPiAxID8gIkNPTE9SX0FUVEFDSE1FTlQiICsgaSA6ICJDT0xPUl9BVFRBQ0hNRU5UIiArIGkg
KyAiX1dFQkdMIl07CisgICAgICAgIH0KKyAgICAgICAgZ2wuZHJhd0J1ZmZlcnMoYXR0YWNobWVu
dHMpOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHR1cmVzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgIHZhciB0ZXh0dXJlID0gdGV4dHVyZXNbaV07CisgICAgICAgIGlmICh0ZXh0
dXJlLmdlbmVyYXRlTWlwTWFwcyAmJiAhZGlzYWJsZUdlbmVyYXRlTWlwTWFwcyAmJiAhdGV4dHVy
ZS5pc0N1YmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkoZ2wuVEVY
VFVSRV8yRCwgdGV4dHVyZSk7CisgICAgICAgICAgICBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhU
VVJFXzJEKTsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkoZ2wuVEVYVFVS
RV8yRCwgbnVsbCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG9uQmVmb3JlVW5iaW5kKSB7
CisgICAgICAgIGlmICh0ZXh0dXJlc1swXS5fTVNBQUZyYW1lYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBCaW5kIHRoZSBjb3JyZWN0IGZyYW1lYnVmZmVyCisgICAgICAgICAgICB0aGlzLl9iaW5k
VW5ib3VuZEZyYW1lYnVmZmVyKHRleHR1cmVzWzBdLl9mcmFtZWJ1ZmZlcik7CisgICAgICAgIH0K
KyAgICAgICAgb25CZWZvcmVVbmJpbmQoKTsKKyAgICB9CisgICAgdGhpcy5fYmluZFVuYm91bmRG
cmFtZWJ1ZmZlcihudWxsKTsKK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmNyZWF0ZU11bHRpcGxlUmVuZGVyVGFyZ2V0
ID0gZnVuY3Rpb24gKHNpemUsIG9wdGlvbnMpIHsKKyAgICB2YXIgZ2VuZXJhdGVNaXBNYXBzID0g
ZmFsc2U7CisgICAgdmFyIGdlbmVyYXRlRGVwdGhCdWZmZXIgPSB0cnVlOworICAgIHZhciBnZW5l
cmF0ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKKyAgICB2YXIgZ2VuZXJhdGVEZXB0aFRleHR1cmUg
PSBmYWxzZTsKKyAgICB2YXIgdGV4dHVyZUNvdW50ID0gMTsKKyAgICB2YXIgZGVmYXVsdFR5cGUg
PSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgIHZhciBkZWZhdWx0U2FtcGxpbmdNb2RlID0g
X0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLlRF
WFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERTsKKyAgICB2YXIgdHlwZXMgPSBuZXcgQXJyYXko
KTsKKyAgICB2YXIgc2FtcGxpbmdNb2RlcyA9IG5ldyBBcnJheSgpOworICAgIGlmIChvcHRpb25z
ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgZ2VuZXJhdGVNaXBNYXBzID0gb3B0aW9ucy5nZW5l
cmF0ZU1pcE1hcHMgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogb3B0aW9ucy5nZW5lcmF0ZU1pcE1h
cHM7CisgICAgICAgIGdlbmVyYXRlRGVwdGhCdWZmZXIgPSBvcHRpb25zLmdlbmVyYXRlRGVwdGhC
dWZmZXIgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb25zLmdlbmVyYXRlRGVwdGhCdWZmZXI7
CisgICAgICAgIGdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA9IG9wdGlvbnMuZ2VuZXJhdGVTdGVuY2ls
QnVmZmVyID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVm
ZmVyOworICAgICAgICBnZW5lcmF0ZURlcHRoVGV4dHVyZSA9IG9wdGlvbnMuZ2VuZXJhdGVEZXB0
aFRleHR1cmUgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogb3B0aW9ucy5nZW5lcmF0ZURlcHRoVGV4
dHVyZTsKKyAgICAgICAgdGV4dHVyZUNvdW50ID0gb3B0aW9ucy50ZXh0dXJlQ291bnQgfHwgMTsK
KyAgICAgICAgaWYgKG9wdGlvbnMudHlwZXMpIHsKKyAgICAgICAgICAgIHR5cGVzID0gb3B0aW9u
cy50eXBlczsKKyAgICAgICAgfQorICAgICAgICBpZiAob3B0aW9ucy5zYW1wbGluZ01vZGVzKSB7
CisgICAgICAgICAgICBzYW1wbGluZ01vZGVzID0gb3B0aW9ucy5zYW1wbGluZ01vZGVzOworICAg
ICAgICB9CisgICAgfQorICAgIHZhciBnbCA9IHRoaXMuX2dsOworICAgIC8vIENyZWF0ZSB0aGUg
ZnJhbWVidWZmZXIKKyAgICB2YXIgZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigp
OworICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAgIHZh
ciB3aWR0aCA9IHNpemUud2lkdGggfHwgc2l6ZTsKKyAgICB2YXIgaGVpZ2h0ID0gc2l6ZS5oZWln
aHQgfHwgc2l6ZTsKKyAgICB2YXIgdGV4dHVyZXMgPSBbXTsKKyAgICB2YXIgYXR0YWNobWVudHMg
PSBbXTsKKyAgICB2YXIgZGVwdGhTdGVuY2lsQnVmZmVyID0gdGhpcy5fc2V0dXBGcmFtZWJ1ZmZl
ckRlcHRoQXR0YWNobWVudHMoZ2VuZXJhdGVTdGVuY2lsQnVmZmVyLCBnZW5lcmF0ZURlcHRoQnVm
ZmVyLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHR1cmVDb3Vu
dDsgaSsrKSB7CisgICAgICAgIHZhciBzYW1wbGluZ01vZGUgPSBzYW1wbGluZ01vZGVzW2ldIHx8
IGRlZmF1bHRTYW1wbGluZ01vZGU7CisgICAgICAgIHZhciB0eXBlID0gdHlwZXNbaV0gfHwgZGVm
YXVsdFR5cGU7CisgICAgICAgIGlmICh0eXBlID09PSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVfRkxPQVQgJiYgIXRoaXMu
X2NhcHMudGV4dHVyZUZsb2F0TGluZWFyRmlsdGVyaW5nKSB7CisgICAgICAgICAgICAvLyBpZiBm
bG9hdGluZyBwb2ludCBsaW5lYXIgKGdsLkZMT0FUKSB0aGVuIGZvcmNlIHRvIE5FQVJFU1RfU0FN
UExJTkdNT0RFCisgICAgICAgICAgICBzYW1wbGluZ01vZGUgPSBfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRV9ORUFSRVNUX1NBTVBM
SU5HTU9ERTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09PSBfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVf
SEFMRl9GTE9BVCAmJiAhdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZsb2F0TGluZWFyRmlsdGVyaW5n
KSB7CisgICAgICAgICAgICAvLyBpZiBmbG9hdGluZyBwb2ludCBsaW5lYXIgKEhBTEZfRkxPQVQp
IHRoZW4gZm9yY2UgdG8gTkVBUkVTVF9TQU1QTElOR01PREUKKyAgICAgICAgICAgIHNhbXBsaW5n
TW9kZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdp
bmUiXS5URVhUVVJFX05FQVJFU1RfU0FNUExJTkdNT0RFOworICAgICAgICB9CisgICAgICAgIHZh
ciBmaWx0ZXJzID0gdGhpcy5fZ2V0U2FtcGxpbmdQYXJhbWV0ZXJzKHNhbXBsaW5nTW9kZSwgZ2Vu
ZXJhdGVNaXBNYXBzKTsKKyAgICAgICAgaWYgKHR5cGUgPT09IF9FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5URVhUVVJFVFlQRV9GTE9BVCAmJiAh
dGhpcy5fY2Fwcy50ZXh0dXJlRmxvYXQpIHsKKyAgICAgICAgICAgIHR5cGUgPSBfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVf
VU5TSUdORURfSU5UOworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkxvZ2dlciJdLldhcm4oIkZsb2F0IHRleHR1cmVzIGFyZSBub3Qgc3VwcG9y
dGVkLiBSZW5kZXIgdGFyZ2V0IGZvcmNlZCB0byBURVhUVVJFVFlQRV9VTlNJR05FRF9CWVRFIHR5
cGUiKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnRl
cm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09VUkNF
X01VTFRJUkVOREVSVEFSR0VUKTsKKyAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSBnbFt0aGlzLndl
YkdMVmVyc2lvbiA+IDEgPyAiQ09MT1JfQVRUQUNITUVOVCIgKyBpIDogIkNPTE9SX0FUVEFDSE1F
TlQiICsgaSArICJfV0VCR0wiXTsKKyAgICAgICAgdGV4dHVyZXMucHVzaCh0ZXh0dXJlKTsKKyAg
ICAgICAgYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTsKKyAgICAgICAgZ2wuYWN0aXZlVGV4
dHVyZShnbFsiVEVYVFVSRSIgKyBpXSk7CisgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRV
UkVfMkQsIHRleHR1cmUuX3dlYkdMVGV4dHVyZSk7CisgICAgICAgIGdsLnRleFBhcmFtZXRlcmko
Z2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXJzLm1hZyk7CisgICAg
ICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVS
LCBmaWx0ZXJzLm1pbik7CisgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwg
Z2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpOworICAgICAgICBnbC50ZXhQYXJh
bWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdF
KTsKKyAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLl9nZXRSR0JB
QnVmZmVySW50ZXJuYWxTaXplZEZvcm1hdCh0eXBlKSwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuUkdC
QSwgdGhpcy5fZ2V0V2ViR0xUZXh0dXJlVHlwZSh0eXBlKSwgbnVsbCk7CisgICAgICAgIGdsLmZy
YW1lYnVmZmVyVGV4dHVyZTJEKGdsLkRSQVdfRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIGdsLlRF
WFRVUkVfMkQsIHRleHR1cmUuX3dlYkdMVGV4dHVyZSwgMCk7CisgICAgICAgIGlmIChnZW5lcmF0
ZU1pcE1hcHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmdlbmVyYXRlTWlwbWFwKHRoaXMuX2ds
LlRFWFRVUkVfMkQpOworICAgICAgICB9CisgICAgICAgIC8vIFVuYmluZAorICAgICAgICB0aGlz
Ll9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIG51bGwpOworICAgICAgICB0ZXh0
dXJlLl9mcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOworICAgICAgICB0ZXh0dXJlLl9kZXB0aFN0
ZW5jaWxCdWZmZXIgPSBkZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgICAgIHRleHR1cmUuYmFzZVdp
ZHRoID0gd2lkdGg7CisgICAgICAgIHRleHR1cmUuYmFzZUhlaWdodCA9IGhlaWdodDsKKyAgICAg
ICAgdGV4dHVyZS53aWR0aCA9IHdpZHRoOworICAgICAgICB0ZXh0dXJlLmhlaWdodCA9IGhlaWdo
dDsKKyAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgdGV4dHVyZS5zYW1w
bGVzID0gMTsKKyAgICAgICAgdGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMgPSBnZW5lcmF0ZU1pcE1h
cHM7CisgICAgICAgIHRleHR1cmUuc2FtcGxpbmdNb2RlID0gc2FtcGxpbmdNb2RlOworICAgICAg
ICB0ZXh0dXJlLnR5cGUgPSB0eXBlOworICAgICAgICB0ZXh0dXJlLl9nZW5lcmF0ZURlcHRoQnVm
ZmVyID0gZ2VuZXJhdGVEZXB0aEJ1ZmZlcjsKKyAgICAgICAgdGV4dHVyZS5fZ2VuZXJhdGVTdGVu
Y2lsQnVmZmVyID0gZ2VuZXJhdGVTdGVuY2lsQnVmZmVyOworICAgICAgICB0ZXh0dXJlLl9hdHRh
Y2htZW50cyA9IGF0dGFjaG1lbnRzOworICAgICAgICB0aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2Fj
aGUucHVzaCh0ZXh0dXJlKTsKKyAgICB9CisgICAgaWYgKGdlbmVyYXRlRGVwdGhUZXh0dXJlICYm
IHRoaXMuX2NhcHMuZGVwdGhUZXh0dXJlRXh0ZW5zaW9uKSB7CisgICAgICAgIC8vIERlcHRoIHRl
eHR1cmUKKyAgICAgICAgdmFyIGRlcHRoVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVz
X2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnRlcm5hbFRl
eHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09VUkNFX01VTFRJ
UkVOREVSVEFSR0VUKTsKKyAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7Cisg
ICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGRlcHRoVGV4dHVyZS5fd2ViR0xU
ZXh0dXJlKTsKKyAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhU
VVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1QpOworICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGds
LlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgICAg
IGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNM
QU1QX1RPX0VER0UpOworICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGds
LlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2wudGV4SW1hZ2Uy
RChnbC5URVhUVVJFXzJELCAwLCB0aGlzLndlYkdMVmVyc2lvbiA8IDIgPyBnbC5ERVBUSF9DT01Q
T05FTlQgOiBnbC5ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuREVQVEhf
Q09NUE9ORU5ULCBnbC5VTlNJR05FRF9TSE9SVCwgbnVsbCk7CisgICAgICAgIGdsLmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9BVFRBQ0hNRU5ULCBnbC5URVhU
VVJFXzJELCBkZXB0aFRleHR1cmUuX3dlYkdMVGV4dHVyZSwgMCk7CisgICAgICAgIGRlcHRoVGV4
dHVyZS5fZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKKyAgICAgICAgZGVwdGhUZXh0dXJlLmJh
c2VXaWR0aCA9IHdpZHRoOworICAgICAgICBkZXB0aFRleHR1cmUuYmFzZUhlaWdodCA9IGhlaWdo
dDsKKyAgICAgICAgZGVwdGhUZXh0dXJlLndpZHRoID0gd2lkdGg7CisgICAgICAgIGRlcHRoVGV4
dHVyZS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGRlcHRoVGV4dHVyZS5pc1JlYWR5ID0gdHJ1
ZTsKKyAgICAgICAgZGVwdGhUZXh0dXJlLnNhbXBsZXMgPSAxOworICAgICAgICBkZXB0aFRleHR1
cmUuZ2VuZXJhdGVNaXBNYXBzID0gZ2VuZXJhdGVNaXBNYXBzOworICAgICAgICBkZXB0aFRleHR1
cmUuc2FtcGxpbmdNb2RlID0gZ2wuTkVBUkVTVDsKKyAgICAgICAgZGVwdGhUZXh0dXJlLl9nZW5l
cmF0ZURlcHRoQnVmZmVyID0gZ2VuZXJhdGVEZXB0aEJ1ZmZlcjsKKyAgICAgICAgZGVwdGhUZXh0
dXJlLl9nZW5lcmF0ZVN0ZW5jaWxCdWZmZXIgPSBnZW5lcmF0ZVN0ZW5jaWxCdWZmZXI7CisgICAg
ICAgIHRleHR1cmVzLnB1c2goZGVwdGhUZXh0dXJlKTsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxU
ZXh0dXJlc0NhY2hlLnB1c2goZGVwdGhUZXh0dXJlKTsKKyAgICB9CisgICAgZ2wuZHJhd0J1ZmZl
cnMoYXR0YWNobWVudHMpOworICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVS
LCBudWxsKTsKKyAgICB0aGlzLl9iaW5kVW5ib3VuZEZyYW1lYnVmZmVyKG51bGwpOworICAgIHRo
aXMucmVzZXRUZXh0dXJlQ2FjaGUoKTsKKyAgICByZXR1cm4gdGV4dHVyZXM7Cit9OworX0VuZ2lu
ZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlw
ZS51cGRhdGVNdWx0aXBsZVJlbmRlclRhcmdldFRleHR1cmVTYW1wbGVDb3VudCA9IGZ1bmN0aW9u
ICh0ZXh0dXJlcywgc2FtcGxlcykgeworICAgIGlmICh0aGlzLndlYkdMVmVyc2lvbiA8IDIgfHwg
IXRleHR1cmVzIHx8IHRleHR1cmVzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgIHJldHVybiAxOwor
ICAgIH0KKyAgICBpZiAodGV4dHVyZXNbMF0uc2FtcGxlcyA9PT0gc2FtcGxlcykgeworICAgICAg
ICByZXR1cm4gc2FtcGxlczsKKyAgICB9CisgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgc2Ft
cGxlcyA9IE1hdGgubWluKHNhbXBsZXMsIHRoaXMuZ2V0Q2FwcygpLm1heE1TQUFTYW1wbGVzKTsK
KyAgICAvLyBEaXNwb3NlIHByZXZpb3VzIHJlbmRlciBidWZmZXJzCisgICAgaWYgKHRleHR1cmVz
WzBdLl9kZXB0aFN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgZ2wuZGVsZXRlUmVuZGVyYnVmZmVy
KHRleHR1cmVzWzBdLl9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB0ZXh0dXJlc1swXS5f
ZGVwdGhTdGVuY2lsQnVmZmVyID0gbnVsbDsKKyAgICB9CisgICAgaWYgKHRleHR1cmVzWzBdLl9N
U0FBRnJhbWVidWZmZXIpIHsKKyAgICAgICAgZ2wuZGVsZXRlRnJhbWVidWZmZXIodGV4dHVyZXNb
MF0uX01TQUFGcmFtZWJ1ZmZlcik7CisgICAgICAgIHRleHR1cmVzWzBdLl9NU0FBRnJhbWVidWZm
ZXIgPSBudWxsOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHR1cmVzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgIGlmICh0ZXh0dXJlc1tpXS5fTVNBQVJlbmRlckJ1ZmZlcikgewor
ICAgICAgICAgICAgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRleHR1cmVzW2ldLl9NU0FBUmVuZGVy
QnVmZmVyKTsKKyAgICAgICAgICAgIHRleHR1cmVzW2ldLl9NU0FBUmVuZGVyQnVmZmVyID0gbnVs
bDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc2FtcGxlcyA+IDEpIHsKKyAgICAgICAgdmFy
IGZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICAgICAgaWYgKCFmcmFt
ZWJ1ZmZlcikgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gY3JlYXRl
IG11bHRpIHNhbXBsZWQgZnJhbWVidWZmZXIiKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9i
aW5kVW5ib3VuZEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKyAgICAgICAgdmFyIGRlcHRoU3Rl
bmNpbEJ1ZmZlciA9IHRoaXMuX3NldHVwRnJhbWVidWZmZXJEZXB0aEF0dGFjaG1lbnRzKHRleHR1
cmVzWzBdLl9nZW5lcmF0ZVN0ZW5jaWxCdWZmZXIsIHRleHR1cmVzWzBdLl9nZW5lcmF0ZURlcHRo
QnVmZmVyLCB0ZXh0dXJlc1swXS53aWR0aCwgdGV4dHVyZXNbMF0uaGVpZ2h0LCBzYW1wbGVzKTsK
KyAgICAgICAgdmFyIGF0dGFjaG1lbnRzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGV4dHVyZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGV4
dHVyZXNbaV07CisgICAgICAgICAgICB2YXIgYXR0YWNobWVudCA9IGdsW3RoaXMud2ViR0xWZXJz
aW9uID4gMSA/ICJDT0xPUl9BVFRBQ0hNRU5UIiArIGkgOiAiQ09MT1JfQVRUQUNITUVOVCIgKyBp
ICsgIl9XRUJHTCJdOworICAgICAgICAgICAgdmFyIGNvbG9yUmVuZGVyYnVmZmVyID0gZ2wuY3Jl
YXRlUmVuZGVyYnVmZmVyKCk7CisgICAgICAgICAgICBpZiAoIWNvbG9yUmVuZGVyYnVmZmVyKSB7
CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gY3JlYXRlIG11bHRp
IHNhbXBsZWQgZnJhbWVidWZmZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsLmJp
bmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCBjb2xvclJlbmRlcmJ1ZmZlcik7CisgICAg
ICAgICAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoZ2wuUkVOREVSQlVGRkVS
LCBzYW1wbGVzLCB0aGlzLl9nZXRSR0JBTXVsdGlTYW1wbGVCdWZmZXJGb3JtYXQodGV4dHVyZS50
eXBlKSwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQpOworICAgICAgICAgICAgZ2wuZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIGdsLlJFTkRF
UkJVRkZFUiwgY29sb3JSZW5kZXJidWZmZXIpOworICAgICAgICAgICAgdGV4dHVyZS5fTVNBQUZy
YW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CisgICAgICAgICAgICB0ZXh0dXJlLl9NU0FBUmVuZGVy
QnVmZmVyID0gY29sb3JSZW5kZXJidWZmZXI7CisgICAgICAgICAgICB0ZXh0dXJlLnNhbXBsZXMg
PSBzYW1wbGVzOworICAgICAgICAgICAgdGV4dHVyZS5fZGVwdGhTdGVuY2lsQnVmZmVyID0gZGVw
dGhTdGVuY2lsQnVmZmVyOworICAgICAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5E
RVJCVUZGRVIsIG51bGwpOworICAgICAgICAgICAgYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50
KTsKKyAgICAgICAgfQorICAgICAgICBnbC5kcmF3QnVmZmVycyhhdHRhY2htZW50cyk7CisgICAg
fQorICAgIGVsc2UgeworICAgICAgICB0aGlzLl9iaW5kVW5ib3VuZEZyYW1lYnVmZmVyKHRleHR1
cmVzWzBdLl9mcmFtZWJ1ZmZlcik7CisgICAgfQorICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVi
dWZmZXIobnVsbCk7CisgICAgcmV0dXJuIHNhbXBsZXM7Cit9OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLm11bHRpdmlldy50cyI6CisvKiEqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUubXVsdGl2aWV3LnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBubyBleHBvcnRz
IHByb3ZpZGVkICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
Q2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL0NhbWVyYXMvY2FtZXJhICovICIuL0NhbWVyYXMvY2FtZXJhLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVz
L2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vc2NlbmUgKi8gIi4vc2NlbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxz
L1RleHR1cmVzL2ludGVybmFsVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJu
YWxUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfdW5pZm9ybUJ1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0
ZXJpYWxzL3VuaWZvcm1CdWZmZXIgKi8gIi4vTWF0ZXJpYWxzL3VuaWZvcm1CdWZmZXIudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX011bHRpdmlld1Jl
bmRlclRhcmdldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL011bHRpdmlld1JlbmRlclRhcmdldCAq
LyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvTXVsdGl2aWV3UmVuZGVyVGFyZ2V0LnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfZnJ1c3R1bV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5m
cnVzdHVtICovICIuL01hdGhzL21hdGguZnJ1c3R1bS50cyIpOworCisKKworCisKKworCisKK19F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5wcm90
b3R5cGUuY3JlYXRlTXVsdGl2aWV3UmVuZGVyVGFyZ2V0VGV4dHVyZSA9IGZ1bmN0aW9uICh3aWR0
aCwgaGVpZ2h0KSB7CisgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgaWYgKCF0aGlzLmdldENh
cHMoKS5tdWx0aXZpZXcpIHsKKyAgICAgICAgdGhyb3cgIk11bHRpdmlldyBpcyBub3Qgc3VwcG9y
dGVkIjsKKyAgICB9CisgICAgdmFyIGludGVybmFsVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJJbnRl
cm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09VUkNF
X1VOS05PV04sIHRydWUpOworICAgIGludGVybmFsVGV4dHVyZS53aWR0aCA9IHdpZHRoOworICAg
IGludGVybmFsVGV4dHVyZS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgaW50ZXJuYWxUZXh0dXJlLl9m
cmFtZWJ1ZmZlciA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgaW50ZXJuYWxUZXh0dXJl
Ll9jb2xvclRleHR1cmVBcnJheSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4
dHVyZShnbC5URVhUVVJFXzJEX0FSUkFZLCBpbnRlcm5hbFRleHR1cmUuX2NvbG9yVGV4dHVyZUFy
cmF5KTsKKyAgICBnbC50ZXhTdG9yYWdlM0QoZ2wuVEVYVFVSRV8yRF9BUlJBWSwgMSwgZ2wuUkdC
QTgsIHdpZHRoLCBoZWlnaHQsIDIpOworICAgIGludGVybmFsVGV4dHVyZS5fZGVwdGhTdGVuY2ls
VGV4dHVyZUFycmF5ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJpbmRUZXh0dXJlKGds
LlRFWFRVUkVfMkRfQVJSQVksIGludGVybmFsVGV4dHVyZS5fZGVwdGhTdGVuY2lsVGV4dHVyZUFy
cmF5KTsKKyAgICBnbC50ZXhTdG9yYWdlM0QoZ2wuVEVYVFVSRV8yRF9BUlJBWSwgMSwgZ2wuREVQ
VEgzMkZfU1RFTkNJTDgsIHdpZHRoLCBoZWlnaHQsIDIpOworICAgIGludGVybmFsVGV4dHVyZS5p
c1JlYWR5ID0gdHJ1ZTsKKyAgICByZXR1cm4gaW50ZXJuYWxUZXh0dXJlOworfTsKK19FbmdpbmVz
X2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5wcm90b3R5cGUu
YmluZE11bHRpdmlld0ZyYW1lYnVmZmVyID0gZnVuY3Rpb24gKG11bHRpdmlld1RleHR1cmUpIHsK
KyAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAgICB2YXIgZXh0ID0gdGhpcy5nZXRDYXBzKCkubXVs
dGl2aWV3OworICAgIHRoaXMuYmluZEZyYW1lYnVmZmVyKG11bHRpdmlld1RleHR1cmUsIHVuZGVm
aW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUpOworICAgIGdsLmJpbmRGcmFtZWJ1ZmZl
cihnbC5EUkFXX0ZSQU1FQlVGRkVSLCBtdWx0aXZpZXdUZXh0dXJlLl9mcmFtZWJ1ZmZlcik7Cisg
ICAgaWYgKG11bHRpdmlld1RleHR1cmUuX2NvbG9yVGV4dHVyZUFycmF5ICYmIG11bHRpdmlld1Rl
eHR1cmUuX2RlcHRoU3RlbmNpbFRleHR1cmVBcnJheSkgeworICAgICAgICBleHQuZnJhbWVidWZm
ZXJUZXh0dXJlTXVsdGl2aWV3T1ZSKGdsLkRSQVdfRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFD
SE1FTlQwLCBtdWx0aXZpZXdUZXh0dXJlLl9jb2xvclRleHR1cmVBcnJheSwgMCwgMCwgMik7Cisg
ICAgICAgIGV4dC5mcmFtZWJ1ZmZlclRleHR1cmVNdWx0aXZpZXdPVlIoZ2wuRFJBV19GUkFNRUJV
RkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBtdWx0aXZpZXdUZXh0dXJlLl9kZXB0
aFN0ZW5jaWxUZXh0dXJlQXJyYXksIDAsIDAsIDIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAg
ICAgdGhyb3cgIkludmFsaWQgbXVsdGl2aWV3IGZyYW1lIGJ1ZmZlciI7CisgICAgfQorfTsKK19D
YW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDYW1lcmEiXS5wcm90
b3R5cGUuX3VzZU11bHRpdmlld1RvU2luZ2xlVmlldyA9IGZhbHNlOworX0NhbWVyYXNfY2FtZXJh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNhbWVyYSJdLnByb3RvdHlwZS5fbXVsdGl2
aWV3VGV4dHVyZSA9IG51bGw7CitfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQ2FtZXJhIl0ucHJvdG90eXBlLl9yZXNpemVPckNyZWF0ZU11bHRpdmlld1RleHR1
cmUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkgeworICAgIGlmICghdGhpcy5fbXVsdGl2aWV3
VGV4dHVyZSkgeworICAgICAgICB0aGlzLl9tdWx0aXZpZXdUZXh0dXJlID0gbmV3IF9NYXRlcmlh
bHNfVGV4dHVyZXNfTXVsdGl2aWV3UmVuZGVyVGFyZ2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIk11bHRpdmlld1JlbmRlclRhcmdldCJdKHRoaXMuZ2V0U2NlbmUoKSwgeyB3aWR0aDog
d2lkdGgsIGhlaWdodDogaGVpZ2h0IH0pOworICAgIH0KKyAgICBlbHNlIGlmICh0aGlzLl9tdWx0
aXZpZXdUZXh0dXJlLmdldFJlbmRlcldpZHRoKCkgIT0gd2lkdGggfHwgdGhpcy5fbXVsdGl2aWV3
VGV4dHVyZS5nZXRSZW5kZXJIZWlnaHQoKSAhPSBoZWlnaHQpIHsKKyAgICAgICAgdGhpcy5fbXVs
dGl2aWV3VGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMuX211bHRpdmlld1RleHR1cmUg
PSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19NdWx0aXZpZXdSZW5kZXJUYXJnZXRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siTXVsdGl2aWV3UmVuZGVyVGFyZ2V0Il0odGhpcy5nZXRTY2Vu
ZSgpLCB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfSk7CisgICAgfQorfTsKK19zY2Vu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2VuZSJdLnByb3RvdHlwZS5fdHJhbnNm
b3JtTWF0cml4UiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJNYXRyaXgiXS5aZXJvKCk7Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siU2NlbmUiXS5wcm90b3R5cGUuX211bHRpdmlld1NjZW5lVWJvID0gbnVsbDsKK19zY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2VuZSJdLnByb3RvdHlwZS5fY3JlYXRlTXVs
dGl2aWV3VWJvID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuX211bHRpdmlld1NjZW5lVWJvID0g
bmV3IF9NYXRlcmlhbHNfdW5pZm9ybUJ1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJVbmlmb3JtQnVmZmVyIl0odGhpcy5nZXRFbmdpbmUoKSwgdW5kZWZpbmVkLCB0cnVlKTsKKyAg
ICB0aGlzLl9tdWx0aXZpZXdTY2VuZVViby5hZGRVbmlmb3JtKCJ2aWV3UHJvamVjdGlvbiIsIDE2
KTsKKyAgICB0aGlzLl9tdWx0aXZpZXdTY2VuZVViby5hZGRVbmlmb3JtKCJ2aWV3UHJvamVjdGlv
blIiLCAxNik7CisgICAgdGhpcy5fbXVsdGl2aWV3U2NlbmVVYm8uYWRkVW5pZm9ybSgidmlldyIs
IDE2KTsKK307Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NlbmUiXS5w
cm90b3R5cGUuX3VwZGF0ZU11bHRpdmlld1VibyA9IGZ1bmN0aW9uICh2aWV3UiwgcHJvamVjdGlv
blIpIHsKKyAgICBpZiAodmlld1IgJiYgcHJvamVjdGlvblIpIHsKKyAgICAgICAgdmlld1IubXVs
dGlwbHlUb1JlZihwcm9qZWN0aW9uUiwgdGhpcy5fdHJhbnNmb3JtTWF0cml4Uik7CisgICAgfQor
ICAgIGlmICh2aWV3UiAmJiBwcm9qZWN0aW9uUikgeworICAgICAgICB2aWV3Ui5tdWx0aXBseVRv
UmVmKHByb2plY3Rpb25SLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXSk7CisgICAgICAgIF9NYXRoc19tYXRoX2Zy
dXN0dW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRnJ1c3R1bSJdLkdldFJpZ2h0UGxh
bmVUb1JlZihfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
VG1wVmVjdG9ycyJdLk1hdHJpeFswXSwgdGhpcy5fZnJ1c3R1bVBsYW5lc1szXSk7IC8vIFJlcGxh
Y2UgcmlnaHQgcGxhbmUgYnkgc2Vjb25kIGNhbWVyYSByaWdodCBwbGFuZQorICAgIH0KKyAgICBp
ZiAodGhpcy5fbXVsdGl2aWV3U2NlbmVVYm8pIHsKKyAgICAgICAgdGhpcy5fbXVsdGl2aWV3U2Nl
bmVVYm8udXBkYXRlTWF0cml4KCJ2aWV3UHJvamVjdGlvbiIsIHRoaXMuZ2V0VHJhbnNmb3JtTWF0
cml4KCkpOworICAgICAgICB0aGlzLl9tdWx0aXZpZXdTY2VuZVViby51cGRhdGVNYXRyaXgoInZp
ZXdQcm9qZWN0aW9uUiIsIHRoaXMuX3RyYW5zZm9ybU1hdHJpeFIpOworICAgICAgICB0aGlzLl9t
dWx0aXZpZXdTY2VuZVViby51cGRhdGVNYXRyaXgoInZpZXciLCB0aGlzLl92aWV3TWF0cml4KTsK
KyAgICAgICAgdGhpcy5fbXVsdGl2aWV3U2NlbmVVYm8udXBkYXRlKCk7CisgICAgfQorfTsKK19z
Y2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2VuZSJdLnByb3RvdHlwZS5fcmVu
ZGVyTXVsdGl2aWV3VG9TaW5nbGVWaWV3ID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgIC8vIE11
bHRpdmlldyBpcyBvbmx5IGFibGUgdG8gYmUgZGlzcGxheWVkIGRpcmVjdGx5IGZvciBBUEkncyBz
dWNoIGFzIHdlYlhSCisgICAgLy8gVGhpcyBkaXNwbGF5cyBhIG11bHRpdmlldyBpbWFnZSBieSBy
ZW5kZXJpbmcgdG8gdGhlIG11bHRpdmlldyBpbWFnZSBhbmQgdGhlbgorICAgIC8vIGNvcHlpbmcg
dGhlIHJlc3VsdCBpbnRvIHRoZSBzdWIgY2FtZXJhcyBpbnN0ZWFkIG9mIHJlbmRlcmluZyB0aGVt
IGFuZCBwcm9jZWVkaW5nIGFzIG5vcm1hbCBmcm9tIHRoZXJlCisgICAgLy8gUmVuZGVyIHRvIGEg
bXVsdGl2aWV3IHRleHR1cmUKKyAgICBjYW1lcmEuX3Jlc2l6ZU9yQ3JlYXRlTXVsdGl2aWV3VGV4
dHVyZSgoY2FtZXJhLl9yaWdQb3N0UHJvY2VzcyAmJiBjYW1lcmEuX3JpZ1Bvc3RQcm9jZXNzICYm
IGNhbWVyYS5fcmlnUG9zdFByb2Nlc3Mud2lkdGggPiAwKSA/IGNhbWVyYS5fcmlnUG9zdFByb2Nl
c3Mud2lkdGggLyAyIDogdGhpcy5nZXRFbmdpbmUoKS5nZXRSZW5kZXJXaWR0aCh0cnVlKSAvIDIs
IChjYW1lcmEuX3JpZ1Bvc3RQcm9jZXNzICYmIGNhbWVyYS5fcmlnUG9zdFByb2Nlc3MgJiYgY2Ft
ZXJhLl9yaWdQb3N0UHJvY2Vzcy5oZWlnaHQgPiAwKSA/IGNhbWVyYS5fcmlnUG9zdFByb2Nlc3Mu
aGVpZ2h0IDogdGhpcy5nZXRFbmdpbmUoKS5nZXRSZW5kZXJIZWlnaHQodHJ1ZSkpOworICAgIGlm
ICghdGhpcy5fbXVsdGl2aWV3U2NlbmVVYm8pIHsKKyAgICAgICAgdGhpcy5fY3JlYXRlTXVsdGl2
aWV3VWJvKCk7CisgICAgfQorICAgIGNhbWVyYS5vdXRwdXRSZW5kZXJUYXJnZXQgPSBjYW1lcmEu
X211bHRpdmlld1RleHR1cmU7CisgICAgdGhpcy5fcmVuZGVyRm9yQ2FtZXJhKGNhbWVyYSk7Cisg
ICAgY2FtZXJhLm91dHB1dFJlbmRlclRhcmdldCA9IG51bGw7CisgICAgLy8gQ29uc3VtZSB0aGUg
bXVsdGl2aWV3IHRleHR1cmUgdGhyb3VnaCBhIHNoYWRlciBmb3IgZWFjaCBleWUKKyAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgY2FtZXJhLl9yaWdDYW1lcmFzLmxlbmd0aDsgaW5kZXgr
KykgeworICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRFbmdpbmUoKTsKKyAgICAgICAgdGhp
cy5fYWN0aXZlQ2FtZXJhID0gY2FtZXJhLl9yaWdDYW1lcmFzW2luZGV4XTsKKyAgICAgICAgZW5n
aW5lLnNldFZpZXdwb3J0KHRoaXMuX2FjdGl2ZUNhbWVyYS52aWV3cG9ydCk7CisgICAgICAgIGlm
ICh0aGlzLnBvc3RQcm9jZXNzTWFuYWdlcikgeworICAgICAgICAgICAgdGhpcy5wb3N0UHJvY2Vz
c01hbmFnZXIuX3ByZXBhcmVGcmFtZSgpOworICAgICAgICAgICAgdGhpcy5wb3N0UHJvY2Vzc01h
bmFnZXIuX2ZpbmFsaXplRnJhbWUodGhpcy5fYWN0aXZlQ2FtZXJhLmlzSW50ZXJtZWRpYXRlKTsK
KyAgICAgICAgfQorICAgIH0KK307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMv
RXh0ZW5zaW9ucy9lbmdpbmUub2NjbHVzaW9uUXVlcnkudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2lu
ZXMvRXh0ZW5zaW9ucy9lbmdpbmUub2NjbHVzaW9uUXVlcnkudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogX09jY2x1c2lvbkRhdGFTdG9yYWdlICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIl9PY2NsdXNpb25EYXRhU3RvcmFnZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX09jY2x1c2lvbkRhdGFTdG9yYWdlOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01l
c2hlcy9hYnN0cmFjdE1lc2ggKi8gIi4vTWVzaGVzL2Fic3RyYWN0TWVzaC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9JbnN0cnVtZW50YXRpb25fdGltZVRva2VuX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9JbnN0cnVt
ZW50YXRpb24vdGltZVRva2VuICovICIuL0luc3RydW1lbnRhdGlvbi90aW1lVG9rZW4udHMiKTsK
KworCisKKy8qKiBAaGlkZGVuICovCit2YXIgX09jY2x1c2lvbkRhdGFTdG9yYWdlID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIF9PY2NsdXNpb25EYXRhU3RvcmFn
ZSgpIHsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5vY2NsdXNpb25JbnRl
cm5hbFJldHJ5Q291bnRlciA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRo
aXMuaXNPY2NsdXNpb25RdWVyeUluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICAgICAgdGhpcy5pc09jY2x1ZGVkID0gZmFsc2U7CisgICAgICAgIC8qKiBAaGlk
ZGVuICovCisgICAgICAgIHRoaXMub2NjbHVzaW9uUmV0cnlDb3VudCA9IC0xOworICAgICAgICAv
KiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLm9jY2x1c2lvblR5cGUgPSBfTWVzaGVzX2Fic3Ry
YWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdE1lc2giXS5PQ0NM
VVNJT05fVFlQRV9OT05FOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLm9j
Y2x1c2lvblF1ZXJ5QWxnb3JpdGhtVHlwZSA9IF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkFic3RyYWN0TWVzaCJdLk9DQ0xVU0lPTl9BTEdPUklUSE1f
VFlQRV9DT05TRVJWQVRJVkU7CisgICAgfQorICAgIHJldHVybiBfT2NjbHVzaW9uRGF0YVN0b3Jh
Z2U7Cit9KCkpOworCitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRW5naW5lIl0ucHJvdG90eXBlLmNyZWF0ZVF1ZXJ5ID0gZnVuY3Rpb24gKCkgeworICAgIHJl
dHVybiB0aGlzLl9nbC5jcmVhdGVRdWVyeSgpOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuZGVsZXRlUXVlcnkgPSBm
dW5jdGlvbiAocXVlcnkpIHsKKyAgICB0aGlzLl9nbC5kZWxldGVRdWVyeShxdWVyeSk7CisgICAg
cmV0dXJuIHRoaXM7Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS5pc1F1ZXJ5UmVzdWx0QXZhaWxhYmxlID0gZnVuY3Rp
b24gKHF1ZXJ5KSB7CisgICAgcmV0dXJuIHRoaXMuX2dsLmdldFF1ZXJ5UGFyYW1ldGVyKHF1ZXJ5
LCB0aGlzLl9nbC5RVUVSWV9SRVNVTFRfQVZBSUxBQkxFKTsKK307CitfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmdldFF1ZXJ5
UmVzdWx0ID0gZnVuY3Rpb24gKHF1ZXJ5KSB7CisgICAgcmV0dXJuIHRoaXMuX2dsLmdldFF1ZXJ5
UGFyYW1ldGVyKHF1ZXJ5LCB0aGlzLl9nbC5RVUVSWV9SRVNVTFQpOworfTsKK19FbmdpbmVzX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuYmVn
aW5PY2NsdXNpb25RdWVyeSA9IGZ1bmN0aW9uIChhbGdvcml0aG1UeXBlLCBxdWVyeSkgeworICAg
IHZhciBnbEFsZ29yaXRobSA9IHRoaXMuX2dldEdsQWxnb3JpdGhtVHlwZShhbGdvcml0aG1UeXBl
KTsKKyAgICB0aGlzLl9nbC5iZWdpblF1ZXJ5KGdsQWxnb3JpdGhtLCBxdWVyeSk7CisgICAgcmV0
dXJuIHRoaXM7Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkVuZ2luZSJdLnByb3RvdHlwZS5lbmRPY2NsdXNpb25RdWVyeSA9IGZ1bmN0aW9uIChhbGdv
cml0aG1UeXBlKSB7CisgICAgdmFyIGdsQWxnb3JpdGhtID0gdGhpcy5fZ2V0R2xBbGdvcml0aG1U
eXBlKGFsZ29yaXRobVR5cGUpOworICAgIHRoaXMuX2dsLmVuZFF1ZXJ5KGdsQWxnb3JpdGhtKTsK
KyAgICByZXR1cm4gdGhpczsKK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLl9jcmVhdGVUaW1lUXVlcnkgPSBmdW5jdGlv
biAoKSB7CisgICAgdmFyIHRpbWVyUXVlcnkgPSB0aGlzLmdldENhcHMoKS50aW1lclF1ZXJ5Owor
ICAgIGlmICh0aW1lclF1ZXJ5LmNyZWF0ZVF1ZXJ5RVhUKSB7CisgICAgICAgIHJldHVybiB0aW1l
clF1ZXJ5LmNyZWF0ZVF1ZXJ5RVhUKCk7CisgICAgfQorICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1
ZXJ5KCk7Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkVuZ2luZSJdLnByb3RvdHlwZS5fZGVsZXRlVGltZVF1ZXJ5ID0gZnVuY3Rpb24gKHF1ZXJ5KSB7
CisgICAgdmFyIHRpbWVyUXVlcnkgPSB0aGlzLmdldENhcHMoKS50aW1lclF1ZXJ5OworICAgIGlm
ICh0aW1lclF1ZXJ5LmRlbGV0ZVF1ZXJ5RVhUKSB7CisgICAgICAgIHRpbWVyUXVlcnkuZGVsZXRl
UXVlcnlFWFQocXVlcnkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHRoaXMuZGVsZXRl
UXVlcnkocXVlcnkpOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuX2dldFRpbWVRdWVyeVJlc3VsdCA9IGZ1bmN0aW9u
IChxdWVyeSkgeworICAgIHZhciB0aW1lclF1ZXJ5ID0gdGhpcy5nZXRDYXBzKCkudGltZXJRdWVy
eTsKKyAgICBpZiAodGltZXJRdWVyeS5nZXRRdWVyeU9iamVjdEVYVCkgeworICAgICAgICByZXR1
cm4gdGltZXJRdWVyeS5nZXRRdWVyeU9iamVjdEVYVChxdWVyeSwgdGltZXJRdWVyeS5RVUVSWV9S
RVNVTFRfRVhUKTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlSZXN1bHQocXVlcnkp
OworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdp
bmUiXS5wcm90b3R5cGUuX2dldFRpbWVRdWVyeUF2YWlsYWJpbGl0eSA9IGZ1bmN0aW9uIChxdWVy
eSkgeworICAgIHZhciB0aW1lclF1ZXJ5ID0gdGhpcy5nZXRDYXBzKCkudGltZXJRdWVyeTsKKyAg
ICBpZiAodGltZXJRdWVyeS5nZXRRdWVyeU9iamVjdEVYVCkgeworICAgICAgICByZXR1cm4gdGlt
ZXJRdWVyeS5nZXRRdWVyeU9iamVjdEVYVChxdWVyeSwgdGltZXJRdWVyeS5RVUVSWV9SRVNVTFRf
QVZBSUxBQkxFX0VYVCk7CisgICAgfQorICAgIHJldHVybiB0aGlzLmlzUXVlcnlSZXN1bHRBdmFp
bGFibGUocXVlcnkpOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuc3RhcnRUaW1lUXVlcnkgPSBmdW5jdGlvbiAoKSB7
CisgICAgdmFyIGNhcHMgPSB0aGlzLmdldENhcHMoKTsKKyAgICB2YXIgdGltZXJRdWVyeSA9IGNh
cHMudGltZXJRdWVyeTsKKyAgICBpZiAoIXRpbWVyUXVlcnkpIHsKKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfQorICAgIHZhciB0b2tlbiA9IG5ldyBfSW5zdHJ1bWVudGF0aW9uX3RpbWVUb2tl
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfVGltZVRva2VuIl0oKTsKKyAgICB0aGlz
Ll9nbC5nZXRQYXJhbWV0ZXIodGltZXJRdWVyeS5HUFVfRElTSk9JTlRfRVhUKTsKKyAgICBpZiAo
Y2Fwcy5jYW5Vc2VUaW1lc3RhbXBGb3JUaW1lclF1ZXJ5KSB7CisgICAgICAgIHRva2VuLl9zdGFy
dFRpbWVRdWVyeSA9IHRoaXMuX2NyZWF0ZVRpbWVRdWVyeSgpOworICAgICAgICB0aW1lclF1ZXJ5
LnF1ZXJ5Q291bnRlckVYVCh0b2tlbi5fc3RhcnRUaW1lUXVlcnksIHRpbWVyUXVlcnkuVElNRVNU
QU1QX0VYVCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAodGhpcy5fY3VycmVudE5v
blRpbWVzdGFtcFRva2VuKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudE5vblRp
bWVzdGFtcFRva2VuOworICAgICAgICB9CisgICAgICAgIHRva2VuLl90aW1lRWxhcHNlZFF1ZXJ5
ID0gdGhpcy5fY3JlYXRlVGltZVF1ZXJ5KCk7CisgICAgICAgIGlmICh0aW1lclF1ZXJ5LmJlZ2lu
UXVlcnlFWFQpIHsKKyAgICAgICAgICAgIHRpbWVyUXVlcnkuYmVnaW5RdWVyeUVYVCh0aW1lclF1
ZXJ5LlRJTUVfRUxBUFNFRF9FWFQsIHRva2VuLl90aW1lRWxhcHNlZFF1ZXJ5KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmJlZ2luUXVlcnkodGltZXJR
dWVyeS5USU1FX0VMQVBTRURfRVhULCB0b2tlbi5fdGltZUVsYXBzZWRRdWVyeSk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fY3VycmVudE5vblRpbWVzdGFtcFRva2VuID0gdG9rZW47CisgICAg
fQorICAgIHJldHVybiB0b2tlbjsKK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmVuZFRpbWVRdWVyeSA9IGZ1bmN0aW9u
ICh0b2tlbikgeworICAgIHZhciBjYXBzID0gdGhpcy5nZXRDYXBzKCk7CisgICAgdmFyIHRpbWVy
UXVlcnkgPSBjYXBzLnRpbWVyUXVlcnk7CisgICAgaWYgKCF0aW1lclF1ZXJ5IHx8ICF0b2tlbikg
eworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChjYXBzLmNhblVzZVRpbWVzdGFt
cEZvclRpbWVyUXVlcnkpIHsKKyAgICAgICAgaWYgKCF0b2tlbi5fc3RhcnRUaW1lUXVlcnkpIHsK
KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRva2VuLl9l
bmRUaW1lUXVlcnkpIHsKKyAgICAgICAgICAgIHRva2VuLl9lbmRUaW1lUXVlcnkgPSB0aGlzLl9j
cmVhdGVUaW1lUXVlcnkoKTsKKyAgICAgICAgICAgIHRpbWVyUXVlcnkucXVlcnlDb3VudGVyRVhU
KHRva2VuLl9lbmRUaW1lUXVlcnksIHRpbWVyUXVlcnkuVElNRVNUQU1QX0VYVCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAoIXRva2VuLl90aW1lRWxhcHNlZFF1ZXJ5RW5kZWQpIHsK
KyAgICAgICAgaWYgKCF0b2tlbi5fdGltZUVsYXBzZWRRdWVyeSkgeworICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICh0aW1lclF1ZXJ5LmVuZFF1ZXJ5RVhUKSB7
CisgICAgICAgICAgICB0aW1lclF1ZXJ5LmVuZFF1ZXJ5RVhUKHRpbWVyUXVlcnkuVElNRV9FTEFQ
U0VEX0VYVCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9n
bC5lbmRRdWVyeSh0aW1lclF1ZXJ5LlRJTUVfRUxBUFNFRF9FWFQpOworICAgICAgICB9CisgICAg
ICAgIHRva2VuLl90aW1lRWxhcHNlZFF1ZXJ5RW5kZWQgPSB0cnVlOworICAgIH0KKyAgICB2YXIg
ZGlzam9pbnQgPSB0aGlzLl9nbC5nZXRQYXJhbWV0ZXIodGltZXJRdWVyeS5HUFVfRElTSk9JTlRf
RVhUKTsKKyAgICB2YXIgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgaWYgKHRva2VuLl9lbmRUaW1l
UXVlcnkpIHsKKyAgICAgICAgYXZhaWxhYmxlID0gdGhpcy5fZ2V0VGltZVF1ZXJ5QXZhaWxhYmls
aXR5KHRva2VuLl9lbmRUaW1lUXVlcnkpOworICAgIH0KKyAgICBlbHNlIGlmICh0b2tlbi5fdGlt
ZUVsYXBzZWRRdWVyeSkgeworICAgICAgICBhdmFpbGFibGUgPSB0aGlzLl9nZXRUaW1lUXVlcnlB
dmFpbGFiaWxpdHkodG9rZW4uX3RpbWVFbGFwc2VkUXVlcnkpOworICAgIH0KKyAgICBpZiAoYXZh
aWxhYmxlICYmICFkaXNqb2ludCkgeworICAgICAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICAgICAg
aWYgKGNhcHMuY2FuVXNlVGltZXN0YW1wRm9yVGltZXJRdWVyeSkgeworICAgICAgICAgICAgaWYg
KCF0b2tlbi5fc3RhcnRUaW1lUXVlcnkgfHwgIXRva2VuLl9lbmRUaW1lUXVlcnkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgdGlt
ZVN0YXJ0ID0gdGhpcy5fZ2V0VGltZVF1ZXJ5UmVzdWx0KHRva2VuLl9zdGFydFRpbWVRdWVyeSk7
CisgICAgICAgICAgICB2YXIgdGltZUVuZCA9IHRoaXMuX2dldFRpbWVRdWVyeVJlc3VsdCh0b2tl
bi5fZW5kVGltZVF1ZXJ5KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRpbWVFbmQgLSB0aW1lU3Rh
cnQ7CisgICAgICAgICAgICB0aGlzLl9kZWxldGVUaW1lUXVlcnkodG9rZW4uX3N0YXJ0VGltZVF1
ZXJ5KTsKKyAgICAgICAgICAgIHRoaXMuX2RlbGV0ZVRpbWVRdWVyeSh0b2tlbi5fZW5kVGltZVF1
ZXJ5KTsKKyAgICAgICAgICAgIHRva2VuLl9zdGFydFRpbWVRdWVyeSA9IG51bGw7CisgICAgICAg
ICAgICB0b2tlbi5fZW5kVGltZVF1ZXJ5ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGlmICghdG9rZW4uX3RpbWVFbGFwc2VkUXVlcnkpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQgPSB0
aGlzLl9nZXRUaW1lUXVlcnlSZXN1bHQodG9rZW4uX3RpbWVFbGFwc2VkUXVlcnkpOworICAgICAg
ICAgICAgdGhpcy5fZGVsZXRlVGltZVF1ZXJ5KHRva2VuLl90aW1lRWxhcHNlZFF1ZXJ5KTsKKyAg
ICAgICAgICAgIHRva2VuLl90aW1lRWxhcHNlZFF1ZXJ5ID0gbnVsbDsKKyAgICAgICAgICAgIHRv
a2VuLl90aW1lRWxhcHNlZFF1ZXJ5RW5kZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2N1
cnJlbnROb25UaW1lc3RhbXBUb2tlbiA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuX2dldEdsQWxnb3Jp
dGhtVHlwZSA9IGZ1bmN0aW9uIChhbGdvcml0aG1UeXBlKSB7CisgICAgcmV0dXJuIGFsZ29yaXRo
bVR5cGUgPT09IF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkFic3RyYWN0TWVzaCJdLk9DQ0xVU0lPTl9BTEdPUklUSE1fVFlQRV9DT05TRVJWQVRJVkUg
PyB0aGlzLl9nbC5BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFIDogdGhpcy5fZ2wuQU5Z
X1NBTVBMRVNfUEFTU0VEOworfTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShfTWVzaGVzX2Fic3Ry
YWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdE1lc2giXS5wcm90
b3R5cGUsICJpc09jY2x1c2lvblF1ZXJ5SW5Qcm9ncmVzcyIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX29jY2x1c2lvbkRhdGFTdG9yYWdlLmlzT2NjbHVz
aW9uUXVlcnlJblByb2dyZXNzOworICAgIH0sCisgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAg
Y29uZmlndXJhYmxlOiB0cnVlCit9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShfTWVzaGVzX2Fi
c3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdE1lc2giXS5w
cm90b3R5cGUsICJfb2NjbHVzaW9uRGF0YVN0b3JhZ2UiLCB7CisgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICghdGhpcy5fX29jY2x1c2lvbkRhdGFTdG9yYWdlKSB7CisgICAgICAg
ICAgICB0aGlzLl9fb2NjbHVzaW9uRGF0YVN0b3JhZ2UgPSBuZXcgX09jY2x1c2lvbkRhdGFTdG9y
YWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX19vY2NsdXNpb25EYXRhU3Rv
cmFnZTsKKyAgICB9LAorICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoX01lc2hlc19hYnN0cmFjdE1lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJzdHJhY3RNZXNoIl0ucHJvdG90eXBlLCAiaXNP
Y2NsdWRlZCIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X29jY2x1c2lvbkRhdGFTdG9yYWdlLmlzT2NjbHVkZWQ7CisgICAgfSwKKyAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICB0aGlzLl9vY2NsdXNpb25EYXRhU3RvcmFnZS5pc09jY2x1
ZGVkID0gdmFsdWU7CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoX01lc2hlc19hYnN0cmFjdE1l
c2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJzdHJhY3RNZXNoIl0ucHJvdG90eXBl
LCAib2NjbHVzaW9uUXVlcnlBbGdvcml0aG1UeXBlIiwgeworICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5fb2NjbHVzaW9uRGF0YVN0b3JhZ2Uub2NjbHVzaW9uUXVl
cnlBbGdvcml0aG1UeXBlOworICAgIH0sCisgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgdGhpcy5fb2NjbHVzaW9uRGF0YVN0b3JhZ2Uub2NjbHVzaW9uUXVlcnlBbGdvcml0aG1U
eXBlID0gdmFsdWU7CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoX01lc2hlc19hYnN0cmFjdE1l
c2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJzdHJhY3RNZXNoIl0ucHJvdG90eXBl
LCAib2NjbHVzaW9uVHlwZSIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX29jY2x1c2lvbkRhdGFTdG9yYWdlLm9jY2x1c2lvblR5cGU7CisgICAgfSwKKyAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB0aGlzLl9vY2NsdXNpb25EYXRhU3Rv
cmFnZS5vY2NsdXNpb25UeXBlID0gdmFsdWU7CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoX01l
c2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJzdHJhY3RN
ZXNoIl0ucHJvdG90eXBlLCAib2NjbHVzaW9uUmV0cnlDb3VudCIsIHsKKyAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX29jY2x1c2lvbkRhdGFTdG9yYWdlLm9jY2x1
c2lvblJldHJ5Q291bnQ7CisgICAgfSwKKyAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICB0aGlzLl9vY2NsdXNpb25EYXRhU3RvcmFnZS5vY2NsdXNpb25SZXRyeUNvdW50ID0gdmFs
dWU7CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorfSk7CisvLyBXZSBhbHNvIG5lZWQgdG8gdXBkYXRlIEFic3RyYWN0TWVzaCBhcyB0aGVyZSBp
cyBhIHBvcnRpb24gb2YgdGhlIGNvZGUgdGhlcmUKK19NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFic3RyYWN0TWVzaCJdLnByb3RvdHlwZS5fY2hlY2tP
Y2NsdXNpb25RdWVyeSA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgZGF0YVN0b3JhZ2UgPSB0aGlz
Ll9vY2NsdXNpb25EYXRhU3RvcmFnZTsKKyAgICBpZiAoZGF0YVN0b3JhZ2Uub2NjbHVzaW9uVHlw
ZSA9PT0gX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
QWJzdHJhY3RNZXNoIl0uT0NDTFVTSU9OX1RZUEVfTk9ORSkgeworICAgICAgICBkYXRhU3RvcmFn
ZS5pc09jY2x1ZGVkID0gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
dmFyIGVuZ2luZSA9IHRoaXMuZ2V0RW5naW5lKCk7CisgICAgaWYgKGVuZ2luZS53ZWJHTFZlcnNp
b24gPCAyKSB7CisgICAgICAgIGRhdGFTdG9yYWdlLmlzT2NjbHVkZWQgPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIWVuZ2luZS5pc1F1ZXJ5UmVzdWx0QXZh
aWxhYmxlKSB7IC8vIE9jY2x1c2lvbiBxdWVyeSB3aGVyZSBub3QgcmVmZXJlbmNlZAorICAgICAg
ICBkYXRhU3RvcmFnZS5pc09jY2x1ZGVkID0gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKHRoaXMuaXNPY2NsdXNpb25RdWVyeUluUHJvZ3Jlc3MgJiYgdGhpcy5f
b2NjbHVzaW9uUXVlcnkpIHsKKyAgICAgICAgdmFyIGlzT2NjbHVzaW9uUXVlcnlBdmFpbGFibGUg
PSBlbmdpbmUuaXNRdWVyeVJlc3VsdEF2YWlsYWJsZSh0aGlzLl9vY2NsdXNpb25RdWVyeSk7Cisg
ICAgICAgIGlmIChpc09jY2x1c2lvblF1ZXJ5QXZhaWxhYmxlKSB7CisgICAgICAgICAgICB2YXIg
b2NjbHVzaW9uUXVlcnlSZXN1bHQgPSBlbmdpbmUuZ2V0UXVlcnlSZXN1bHQodGhpcy5fb2NjbHVz
aW9uUXVlcnkpOworICAgICAgICAgICAgZGF0YVN0b3JhZ2UuaXNPY2NsdXNpb25RdWVyeUluUHJv
Z3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIGRhdGFTdG9yYWdlLm9jY2x1c2lvbkludGVybmFs
UmV0cnlDb3VudGVyID0gMDsKKyAgICAgICAgICAgIGRhdGFTdG9yYWdlLmlzT2NjbHVkZWQgPSBv
Y2NsdXNpb25RdWVyeVJlc3VsdCA9PT0gMSA/IGZhbHNlIDogdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRhdGFTdG9yYWdlLm9jY2x1c2lvbkludGVybmFsUmV0
cnlDb3VudGVyKys7CisgICAgICAgICAgICBpZiAoZGF0YVN0b3JhZ2Uub2NjbHVzaW9uUmV0cnlD
b3VudCAhPT0gLTEgJiYgZGF0YVN0b3JhZ2Uub2NjbHVzaW9uSW50ZXJuYWxSZXRyeUNvdW50ZXIg
PiBkYXRhU3RvcmFnZS5vY2NsdXNpb25SZXRyeUNvdW50KSB7CisgICAgICAgICAgICAgICAgZGF0
YVN0b3JhZ2UuaXNPY2NsdXNpb25RdWVyeUluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBkYXRhU3RvcmFnZS5vY2NsdXNpb25JbnRlcm5hbFJldHJ5Q291bnRlciA9IDA7CisgICAg
ICAgICAgICAgICAgLy8gaWYgb3B0aW1pc3RpYyBzZXQgaXNPY2NsdWRlZCB0byBmYWxzZSByZWdh
cmRsZXNzIG9mIHRoZSBzdGF0dXMgb2YgaXNPY2NsdWRlZC4gKFJlbmRlciBpbiB0aGUgY3VycmVu
dCByZW5kZXIgbG9vcCkKKyAgICAgICAgICAgICAgICAvLyBpZiBzdHJpY3QgY29udGludWUgdGhl
IGxhc3Qgc3RhdGUgb2YgdGhlIG9iamVjdC4KKyAgICAgICAgICAgICAgICBkYXRhU3RvcmFnZS5p
c09jY2x1ZGVkID0gZGF0YVN0b3JhZ2Uub2NjbHVzaW9uVHlwZSA9PT0gX01lc2hlc19hYnN0cmFj
dE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJzdHJhY3RNZXNoIl0uT0NDTFVT
SU9OX1RZUEVfT1BUSU1JU1RJQyA/IGZhbHNlIDogZGF0YVN0b3JhZ2UuaXNPY2NsdWRlZDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB2YXIgc2NlbmUgPSB0
aGlzLmdldFNjZW5lKCk7CisgICAgaWYgKHNjZW5lLmdldEJvdW5kaW5nQm94UmVuZGVyZXIpIHsK
KyAgICAgICAgdmFyIG9jY2x1c2lvbkJvdW5kaW5nQm94UmVuZGVyZXIgPSBzY2VuZS5nZXRCb3Vu
ZGluZ0JveFJlbmRlcmVyKCk7CisgICAgICAgIGlmICghdGhpcy5fb2NjbHVzaW9uUXVlcnkpIHsK
KyAgICAgICAgICAgIHRoaXMuX29jY2x1c2lvblF1ZXJ5ID0gZW5naW5lLmNyZWF0ZVF1ZXJ5KCk7
CisgICAgICAgIH0KKyAgICAgICAgZW5naW5lLmJlZ2luT2NjbHVzaW9uUXVlcnkoZGF0YVN0b3Jh
Z2Uub2NjbHVzaW9uUXVlcnlBbGdvcml0aG1UeXBlLCB0aGlzLl9vY2NsdXNpb25RdWVyeSk7Cisg
ICAgICAgIG9jY2x1c2lvbkJvdW5kaW5nQm94UmVuZGVyZXIucmVuZGVyT2NjbHVzaW9uQm91bmRp
bmdCb3godGhpcyk7CisgICAgICAgIGVuZ2luZS5lbmRPY2NsdXNpb25RdWVyeShkYXRhU3RvcmFn
ZS5vY2NsdXNpb25RdWVyeUFsZ29yaXRobVR5cGUpOworICAgICAgICB0aGlzLl9vY2NsdXNpb25E
YXRhU3RvcmFnZS5pc09jY2x1c2lvblF1ZXJ5SW5Qcm9ncmVzcyA9IHRydWU7CisgICAgfQorICAg
IHJldHVybiBkYXRhU3RvcmFnZS5pc09jY2x1ZGVkOworfTsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vRW5naW5lcy9FeHRlbnNpb25zL2VuZ2luZS5yYXdUZXh0dXJlLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUucmF3VGV4dHVyZS50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIG5vIGV4cG9y
dHMgcHJvdmlkZWQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVy
bmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZSAqLyAiLi9N
YXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJuYWxUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3Rvb2xz
ICovICIuL01pc2MvdG9vbHMudHMiKTsKKworCisKKworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS51cGRhdGVSYXdUZXh0dXJl
ID0gZnVuY3Rpb24gKHRleHR1cmUsIGRhdGEsIGZvcm1hdCwgaW52ZXJ0WSwgY29tcHJlc3Npb24s
IHR5cGUpIHsKKyAgICBpZiAoY29tcHJlc3Npb24gPT09IHZvaWQgMCkgeyBjb21wcmVzc2lvbiA9
IG51bGw7IH0KKyAgICBpZiAodHlwZSA9PT0gdm9pZCAwKSB7IHR5cGUgPSBfRW5naW5lc19lbmdp
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVfVU5T
SUdORURfSU5UOyB9CisgICAgaWYgKCF0ZXh0dXJlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgLy8gQmFieWxvbidzIGludGVybmFsU2l6ZWRGb21hdCBidXQgZ2wncyB0ZXhJbWFnZTJE
IGludGVybmFsRm9ybWF0CisgICAgdmFyIGludGVybmFsU2l6ZWRGb21hdCA9IHRoaXMuX2dldFJH
QkFCdWZmZXJJbnRlcm5hbFNpemVkRm9ybWF0KHR5cGUsIGZvcm1hdCk7CisgICAgLy8gQmFieWxv
bidzIGludGVybmFsRm9ybWF0IGJ1dCBnbCdzIHRleEltYWdlMkQgZm9ybWF0CisgICAgdmFyIGlu
dGVybmFsRm9ybWF0ID0gdGhpcy5fZ2V0SW50ZXJuYWxGb3JtYXQoZm9ybWF0KTsKKyAgICB2YXIg
dGV4dHVyZVR5cGUgPSB0aGlzLl9nZXRXZWJHTFRleHR1cmVUeXBlKHR5cGUpOworICAgIHRoaXMu
X2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSwgdHJ1ZSk7
CisgICAgdGhpcy5fdW5wYWNrRmxpcFkoaW52ZXJ0WSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IChp
bnZlcnRZID8gdHJ1ZSA6IGZhbHNlKSk7CisgICAgaWYgKCF0aGlzLl9kb05vdEhhbmRsZUNvbnRl
eHRMb3N0KSB7CisgICAgICAgIHRleHR1cmUuX2J1ZmZlclZpZXcgPSBkYXRhOworICAgICAgICB0
ZXh0dXJlLmZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgdGV4dHVyZS50eXBlID0gdHlwZTsKKyAg
ICAgICAgdGV4dHVyZS5pbnZlcnRZID0gaW52ZXJ0WTsKKyAgICAgICAgdGV4dHVyZS5fY29tcHJl
c3Npb24gPSBjb21wcmVzc2lvbjsKKyAgICB9CisgICAgaWYgKHRleHR1cmUud2lkdGggJSA0ICE9
PSAwKSB7CisgICAgICAgIHRoaXMuX2dsLnBpeGVsU3RvcmVpKHRoaXMuX2dsLlVOUEFDS19BTElH
Tk1FTlQsIDEpOworICAgIH0KKyAgICBpZiAoY29tcHJlc3Npb24gJiYgZGF0YSkgeworICAgICAg
ICB0aGlzLl9nbC5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0aGlzLl9nbC5URVhUVVJFXzJELCAwLCB0
aGlzLmdldENhcHMoKS5zM3RjW2NvbXByZXNzaW9uXSwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5o
ZWlnaHQsIDAsIGRhdGEpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgdGhpcy5fZ2wudGV4
SW1hZ2UyRCh0aGlzLl9nbC5URVhUVVJFXzJELCAwLCBpbnRlcm5hbFNpemVkRm9tYXQsIHRleHR1
cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LCAwLCBpbnRlcm5hbEZvcm1hdCwgdGV4dHVyZVR5cGUs
IGRhdGEpOworICAgIH0KKyAgICBpZiAodGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAg
ICAgdGhpcy5fZ2wuZ2VuZXJhdGVNaXBtYXAodGhpcy5fZ2wuVEVYVFVSRV8yRCk7CisgICAgfQor
ICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVYVFVSRV8yRCwgbnVsbCk7
CisgICAgLy8gIHRoaXMucmVzZXRUZXh0dXJlQ2FjaGUoKTsKKyAgICB0ZXh0dXJlLmlzUmVhZHkg
PSB0cnVlOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJFbmdpbmUiXS5wcm90b3R5cGUuY3JlYXRlUmF3VGV4dHVyZSA9IGZ1bmN0aW9uIChkYXRhLCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2FtcGxpbmdN
b2RlLCBjb21wcmVzc2lvbiwgdHlwZSkgeworICAgIGlmIChjb21wcmVzc2lvbiA9PT0gdm9pZCAw
KSB7IGNvbXByZXNzaW9uID0gbnVsbDsgfQorICAgIGlmICh0eXBlID09PSB2b2lkIDApIHsgdHlw
ZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUi
XS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7IH0KKyAgICB2YXIgdGV4dHVyZSA9IG5ldyBfTWF0
ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJJbnRlcm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFs
VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnRlcm5hbFRleHR1cmUiXS5E
QVRBU09VUkNFX1JBVyk7CisgICAgdGV4dHVyZS5iYXNlV2lkdGggPSB3aWR0aDsKKyAgICB0ZXh0
dXJlLmJhc2VIZWlnaHQgPSBoZWlnaHQ7CisgICAgdGV4dHVyZS53aWR0aCA9IHdpZHRoOworICAg
IHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0OworICAgIHRleHR1cmUuZm9ybWF0ID0gZm9ybWF0Owor
ICAgIHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzID0gZ2VuZXJhdGVNaXBNYXBzOworICAgIHRleHR1
cmUuc2FtcGxpbmdNb2RlID0gc2FtcGxpbmdNb2RlOworICAgIHRleHR1cmUuaW52ZXJ0WSA9IGlu
dmVydFk7CisgICAgdGV4dHVyZS5fY29tcHJlc3Npb24gPSBjb21wcmVzc2lvbjsKKyAgICB0ZXh0
dXJlLnR5cGUgPSB0eXBlOworICAgIGlmICghdGhpcy5fZG9Ob3RIYW5kbGVDb250ZXh0TG9zdCkg
eworICAgICAgICB0ZXh0dXJlLl9idWZmZXJWaWV3ID0gZGF0YTsKKyAgICB9CisgICAgdGhpcy51
cGRhdGVSYXdUZXh0dXJlKHRleHR1cmUsIGRhdGEsIGZvcm1hdCwgaW52ZXJ0WSwgY29tcHJlc3Np
b24sIHR5cGUpOworICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVYVFVS
RV8yRCwgdGV4dHVyZSwgdHJ1ZSk7CisgICAgLy8gRmlsdGVycworICAgIHZhciBmaWx0ZXJzID0g
dGhpcy5fZ2V0U2FtcGxpbmdQYXJhbWV0ZXJzKHNhbXBsaW5nTW9kZSwgZ2VuZXJhdGVNaXBNYXBz
KTsKKyAgICB0aGlzLl9nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRoaXMu
X2dsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVycy5tYWcpOworICAgIHRoaXMuX2dsLnRleFBh
cmFtZXRlcmkodGhpcy5fZ2wuVEVYVFVSRV8yRCwgdGhpcy5fZ2wuVEVYVFVSRV9NSU5fRklMVEVS
LCBmaWx0ZXJzLm1pbik7CisgICAgaWYgKGdlbmVyYXRlTWlwTWFwcykgeworICAgICAgICB0aGlz
Ll9nbC5nZW5lcmF0ZU1pcG1hcCh0aGlzLl9nbC5URVhUVVJFXzJEKTsKKyAgICB9CisgICAgdGhp
cy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzJELCBudWxsKTsKKyAgICB0
aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2FjaGUucHVzaCh0ZXh0dXJlKTsKKyAgICByZXR1cm4gdGV4
dHVyZTsKK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RW5naW5lIl0ucHJvdG90eXBlLmNyZWF0ZVJhd0N1YmVUZXh0dXJlID0gZnVuY3Rpb24gKGRhdGEs
IHNpemUsIGZvcm1hdCwgdHlwZSwgZ2VuZXJhdGVNaXBNYXBzLCBpbnZlcnRZLCBzYW1wbGluZ01v
ZGUsIGNvbXByZXNzaW9uKSB7CisgICAgaWYgKGNvbXByZXNzaW9uID09PSB2b2lkIDApIHsgY29t
cHJlc3Npb24gPSBudWxsOyB9CisgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgdmFyIHRleHR1
cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siSW50ZXJuYWxUZXh0dXJlIl0odGhpcywgX01hdGVyaWFsc19UZXh0
dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siSW50ZXJu
YWxUZXh0dXJlIl0uREFUQVNPVVJDRV9DVUJFUkFXKTsKKyAgICB0ZXh0dXJlLmlzQ3ViZSA9IHRy
dWU7CisgICAgdGV4dHVyZS5mb3JtYXQgPSBmb3JtYXQ7CisgICAgdGV4dHVyZS50eXBlID0gdHlw
ZTsKKyAgICBpZiAoIXRoaXMuX2RvTm90SGFuZGxlQ29udGV4dExvc3QpIHsKKyAgICAgICAgdGV4
dHVyZS5fYnVmZmVyVmlld0FycmF5ID0gZGF0YTsKKyAgICB9CisgICAgdmFyIHRleHR1cmVUeXBl
ID0gdGhpcy5fZ2V0V2ViR0xUZXh0dXJlVHlwZSh0eXBlKTsKKyAgICB2YXIgaW50ZXJuYWxGb3Jt
YXQgPSB0aGlzLl9nZXRJbnRlcm5hbEZvcm1hdChmb3JtYXQpOworICAgIGlmIChpbnRlcm5hbEZv
cm1hdCA9PT0gZ2wuUkdCKSB7CisgICAgICAgIGludGVybmFsRm9ybWF0ID0gZ2wuUkdCQTsKKyAg
ICB9CisgICAgLy8gTWlwbWFwIGdlbmVyYXRpb24gbmVlZHMgYSBzaXplZCBpbnRlcm5hbCBmb3Jt
YXQgdGhhdCBpcyBib3RoIGNvbG9yLXJlbmRlcmFibGUgYW5kIHRleHR1cmUtZmlsdGVyYWJsZQor
ICAgIGlmICh0ZXh0dXJlVHlwZSA9PT0gZ2wuRkxPQVQgJiYgIXRoaXMuX2NhcHMudGV4dHVyZUZs
b2F0TGluZWFyRmlsdGVyaW5nKSB7CisgICAgICAgIGdlbmVyYXRlTWlwTWFwcyA9IGZhbHNlOwor
ICAgICAgICBzYW1wbGluZ01vZGUgPSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5HTU9ERTsKKyAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkxvZ2dlciJdLldh
cm4oIkZsb2F0IHRleHR1cmUgZmlsdGVyaW5nIGlzIG5vdCBzdXBwb3J0ZWQuIE1pcG1hcCBnZW5l
cmF0aW9uIGFuZCBzYW1wbGluZyBtb2RlIGFyZSBmb3JjZWQgdG8gZmFsc2UgYW5kIFRFWFRVUkVf
TkVBUkVTVF9TQU1QTElOR01PREUsIHJlc3BlY3RpdmVseS4iKTsKKyAgICB9CisgICAgZWxzZSBp
ZiAodGV4dHVyZVR5cGUgPT09IHRoaXMuX2dsLkhBTEZfRkxPQVRfT0VTICYmICF0aGlzLl9jYXBz
LnRleHR1cmVIYWxmRmxvYXRMaW5lYXJGaWx0ZXJpbmcpIHsKKyAgICAgICAgZ2VuZXJhdGVNaXBN
YXBzID0gZmFsc2U7CisgICAgICAgIHNhbXBsaW5nTW9kZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5URVhUVVJFX05FQVJFU1RfU0FNUExJ
TkdNT0RFOworICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTG9nZ2VyIl0uV2FybigiSGFsZiBmbG9hdCB0ZXh0dXJlIGZpbHRlcmluZyBpcyBub3Qgc3Vw
cG9ydGVkLiBNaXBtYXAgZ2VuZXJhdGlvbiBhbmQgc2FtcGxpbmcgbW9kZSBhcmUgZm9yY2VkIHRv
IGZhbHNlIGFuZCBURVhUVVJFX05FQVJFU1RfU0FNUExJTkdNT0RFLCByZXNwZWN0aXZlbHkuIik7
CisgICAgfQorICAgIGVsc2UgaWYgKHRleHR1cmVUeXBlID09PSBnbC5GTE9BVCAmJiAhdGhpcy5f
Y2Fwcy50ZXh0dXJlRmxvYXRSZW5kZXIpIHsKKyAgICAgICAgZ2VuZXJhdGVNaXBNYXBzID0gZmFs
c2U7CisgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJM
b2dnZXIiXS5XYXJuKCJSZW5kZXIgdG8gZmxvYXQgdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZC4g
TWlwbWFwIGdlbmVyYXRpb24gZm9yY2VkIHRvIGZhbHNlLiIpOworICAgIH0KKyAgICBlbHNlIGlm
ICh0ZXh0dXJlVHlwZSA9PT0gZ2wuSEFMRl9GTE9BVCAmJiAhdGhpcy5fY2Fwcy5jb2xvckJ1ZmZl
ckZsb2F0KSB7CisgICAgICAgIGdlbmVyYXRlTWlwTWFwcyA9IGZhbHNlOworICAgICAgICBfTWlz
Y19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTG9nZ2VyIl0uV2FybigiUmVu
ZGVyIHRvIGhhbGYgZmxvYXQgdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZC4gTWlwbWFwIGdlbmVy
YXRpb24gZm9yY2VkIHRvIGZhbHNlLiIpOworICAgIH0KKyAgICB2YXIgd2lkdGggPSBzaXplOwor
ICAgIHZhciBoZWlnaHQgPSB3aWR0aDsKKyAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7CisgICAg
dGV4dHVyZS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgLy8gRG91YmxlIGNoZWNrIG9uIFBPVCB0byBn
ZW5lcmF0ZSBNaXBzLgorICAgIHZhciBpc1BvdCA9ICF0aGlzLm5lZWRQT1RUZXh0dXJlcyB8fCAo
X01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG9vbHMiXS5Jc0V4cG9u
ZW50T2ZUd28odGV4dHVyZS53aWR0aCkgJiYgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVG9vbHMiXS5Jc0V4cG9uZW50T2ZUd28odGV4dHVyZS5oZWlnaHQpKTsKKyAg
ICBpZiAoIWlzUG90KSB7CisgICAgICAgIGdlbmVyYXRlTWlwTWFwcyA9IGZhbHNlOworICAgIH0K
KyAgICAvLyBVcGxvYWQgZGF0YSBpZiBuZWVkZWQuIFRoZSB0ZXh0dXJlIHdvbid0IGJlIHJlYWR5
IHVudGlsIHRoZW4uCisgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgdGhpcy51cGRhdGVSYXdDdWJl
VGV4dHVyZSh0ZXh0dXJlLCBkYXRhLCBmb3JtYXQsIHR5cGUsIGludmVydFksIGNvbXByZXNzaW9u
KTsKKyAgICB9CisgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJF
X0NVQkVfTUFQLCB0ZXh0dXJlLCB0cnVlKTsKKyAgICAvLyBGaWx0ZXJzCisgICAgaWYgKGRhdGEg
JiYgZ2VuZXJhdGVNaXBNYXBzKSB7CisgICAgICAgIHRoaXMuX2dsLmdlbmVyYXRlTWlwbWFwKHRo
aXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVApOworICAgIH0KKyAgICB2YXIgZmlsdGVycyA9IHRoaXMu
X2dldFNhbXBsaW5nUGFyYW1ldGVycyhzYW1wbGluZ01vZGUsIGdlbmVyYXRlTWlwTWFwcyk7Cisg
ICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFX0NVQkVfTUFQLCBnbC5URVhUVVJFX01BR19G
SUxURVIsIGZpbHRlcnMubWFnKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfQ1VC
RV9NQVAsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZmlsdGVycy5taW4pOworICAgIGdsLnRleFBh
cmFtZXRlcmkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1Q
X1RPX0VER0UpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wu
VEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpOworICAgIHRoaXMuX2JpbmRUZXh0dXJl
RGlyZWN0bHkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7CisgICAgdGV4dHVyZS5nZW5lcmF0
ZU1pcE1hcHMgPSBnZW5lcmF0ZU1pcE1hcHM7CisgICAgcmV0dXJuIHRleHR1cmU7Cit9OworX0Vu
Z2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3Rv
dHlwZS51cGRhdGVSYXdDdWJlVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBkYXRhLCBmb3Jt
YXQsIHR5cGUsIGludmVydFksIGNvbXByZXNzaW9uLCBsZXZlbCkgeworICAgIGlmIChjb21wcmVz
c2lvbiA9PT0gdm9pZCAwKSB7IGNvbXByZXNzaW9uID0gbnVsbDsgfQorICAgIGlmIChsZXZlbCA9
PT0gdm9pZCAwKSB7IGxldmVsID0gMDsgfQorICAgIHRleHR1cmUuX2J1ZmZlclZpZXdBcnJheSA9
IGRhdGE7CisgICAgdGV4dHVyZS5mb3JtYXQgPSBmb3JtYXQ7CisgICAgdGV4dHVyZS50eXBlID0g
dHlwZTsKKyAgICB0ZXh0dXJlLmludmVydFkgPSBpbnZlcnRZOworICAgIHRleHR1cmUuX2NvbXBy
ZXNzaW9uID0gY29tcHJlc3Npb247CisgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgdmFyIHRl
eHR1cmVUeXBlID0gdGhpcy5fZ2V0V2ViR0xUZXh0dXJlVHlwZSh0eXBlKTsKKyAgICB2YXIgaW50
ZXJuYWxGb3JtYXQgPSB0aGlzLl9nZXRJbnRlcm5hbEZvcm1hdChmb3JtYXQpOworICAgIHZhciBp
bnRlcm5hbFNpemVkRm9tYXQgPSB0aGlzLl9nZXRSR0JBQnVmZmVySW50ZXJuYWxTaXplZEZvcm1h
dCh0eXBlKTsKKyAgICB2YXIgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBpZiAoaW50ZXJu
YWxGb3JtYXQgPT09IGdsLlJHQikgeworICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IGdsLlJHQkE7
CisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICB9CisgICAgdGhpcy5fYmluZFRl
eHR1cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlLCB0cnVlKTsKKyAgICB0
aGlzLl91bnBhY2tGbGlwWShpbnZlcnRZID09PSB1bmRlZmluZWQgPyB0cnVlIDogKGludmVydFkg
PyB0cnVlIDogZmFsc2UpKTsKKyAgICBpZiAodGV4dHVyZS53aWR0aCAlIDQgIT09IDApIHsKKyAg
ICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgfQorICAg
IC8vIERhdGEgYXJlIGtub3duIHRvIGJlIGluICtYICtZICtaIC1YIC1ZIC1aCisgICAgZm9yICh2
YXIgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspIHsKKyAgICAgICAg
dmFyIGZhY2VEYXRhID0gZGF0YVtmYWNlSW5kZXhdOworICAgICAgICBpZiAoY29tcHJlc3Npb24p
IHsKKyAgICAgICAgICAgIGdsLmNvbXByZXNzZWRUZXhJbWFnZTJEKGdsLlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCArIGZhY2VJbmRleCwgbGV2ZWwsICh0aGlzLmdldENhcHMoKS5zM3RjKVtj
b21wcmVzc2lvbl0sIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LCAwLCBmYWNlRGF0YSk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAobmVlZENvbnZlcnNp
b24pIHsKKyAgICAgICAgICAgICAgICBmYWNlRGF0YSA9IHRoaXMuX2NvbnZlcnRSR0J0b1JHQkFU
ZXh0dXJlRGF0YShmYWNlRGF0YSwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsIHR5cGUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlSW5kZXgsIGxldmVsLCBpbnRlcm5hbFNpemVkRm9tYXQs
IHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LCAwLCBpbnRlcm5hbEZvcm1hdCwgdGV4dHVy
ZVR5cGUsIGZhY2VEYXRhKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2YXIgaXNQb3QgPSAhdGhp
cy5uZWVkUE9UVGV4dHVyZXMgfHwgKF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlRvb2xzIl0uSXNFeHBvbmVudE9mVHdvKHRleHR1cmUud2lkdGgpICYmIF9NaXNjX3Rv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRvb2xzIl0uSXNFeHBvbmVudE9mVHdv
KHRleHR1cmUuaGVpZ2h0KSk7CisgICAgaWYgKGlzUG90ICYmIHRleHR1cmUuZ2VuZXJhdGVNaXBN
YXBzICYmIGxldmVsID09PSAwKSB7CisgICAgICAgIHRoaXMuX2dsLmdlbmVyYXRlTWlwbWFwKHRo
aXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVApOworICAgIH0KKyAgICB0aGlzLl9iaW5kVGV4dHVyZURp
cmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpOworICAgIC8vIHRoaXMucmVz
ZXRUZXh0dXJlQ2FjaGUoKTsKKyAgICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworfTsKK19Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5
cGUuY3JlYXRlUmF3Q3ViZVRleHR1cmVGcm9tVXJsID0gZnVuY3Rpb24gKHVybCwgc2NlbmUsIHNp
emUsIGZvcm1hdCwgdHlwZSwgbm9NaXBtYXAsIGNhbGxiYWNrLCBtaXBtYXBHZW5lcmF0b3IsIG9u
TG9hZCwgb25FcnJvciwgc2FtcGxpbmdNb2RlLCBpbnZlcnRZKSB7CisgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICBpZiAob25Mb2FkID09PSB2b2lkIDApIHsgb25Mb2FkID0gbnVsbDsgfQorICAg
IGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG51bGw7IH0KKyAgICBpZiAoc2Ft
cGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gX0VuZ2luZXNfZW5naW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLlRFWFRVUkVfVFJJTElORUFSX1NB
TVBMSU5HTU9ERTsgfQorICAgIGlmIChpbnZlcnRZID09PSB2b2lkIDApIHsgaW52ZXJ0WSA9IGZh
bHNlOyB9CisgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgdmFyIHRleHR1cmUgPSB0aGlzLmNy
ZWF0ZVJhd0N1YmVUZXh0dXJlKG51bGwsIHNpemUsIGZvcm1hdCwgdHlwZSwgIW5vTWlwbWFwLCBp
bnZlcnRZLCBzYW1wbGluZ01vZGUpOworICAgIHNjZW5lLl9hZGRQZW5kaW5nRGF0YSh0ZXh0dXJl
KTsKKyAgICB0ZXh0dXJlLnVybCA9IHVybDsKKyAgICB0aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2Fj
aGUucHVzaCh0ZXh0dXJlKTsKKyAgICB2YXIgb25lcnJvciA9IGZ1bmN0aW9uIChyZXF1ZXN0LCBl
eGNlcHRpb24pIHsKKyAgICAgICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKHRleHR1cmUpOwor
ICAgICAgICBpZiAob25FcnJvciAmJiByZXF1ZXN0KSB7CisgICAgICAgICAgICBvbkVycm9yKHJl
cXVlc3Quc3RhdHVzICsgIiAiICsgcmVxdWVzdC5zdGF0dXNUZXh0LCBleGNlcHRpb24pOworICAg
ICAgICB9CisgICAgfTsKKyAgICB2YXIgaW50ZXJuYWxDYWxsYmFjayA9IGZ1bmN0aW9uIChkYXRh
KSB7CisgICAgICAgIHZhciB3aWR0aCA9IHRleHR1cmUud2lkdGg7CisgICAgICAgIHZhciBmYWNl
RGF0YUFycmF5cyA9IGNhbGxiYWNrKGRhdGEpOworICAgICAgICBpZiAoIWZhY2VEYXRhQXJyYXlz
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1pcG1hcEdl
bmVyYXRvcikgeworICAgICAgICAgICAgdmFyIHRleHR1cmVUeXBlID0gX3RoaXMuX2dldFdlYkdM
VGV4dHVyZVR5cGUodHlwZSk7CisgICAgICAgICAgICB2YXIgaW50ZXJuYWxGb3JtYXQgPSBfdGhp
cy5fZ2V0SW50ZXJuYWxGb3JtYXQoZm9ybWF0KTsKKyAgICAgICAgICAgIHZhciBpbnRlcm5hbFNp
emVkRm9tYXQgPSBfdGhpcy5fZ2V0UkdCQUJ1ZmZlckludGVybmFsU2l6ZWRGb3JtYXQodHlwZSk7
CisgICAgICAgICAgICB2YXIgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGlm
IChpbnRlcm5hbEZvcm1hdCA9PT0gZ2wuUkdCKSB7CisgICAgICAgICAgICAgICAgaW50ZXJuYWxG
b3JtYXQgPSBnbC5SR0JBOworICAgICAgICAgICAgICAgIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGds
LlRFWFRVUkVfQ1VCRV9NQVAsIHRleHR1cmUsIHRydWUpOworICAgICAgICAgICAgX3RoaXMuX3Vu
cGFja0ZsaXBZKGZhbHNlKTsKKyAgICAgICAgICAgIHZhciBtaXBEYXRhID0gbWlwbWFwR2VuZXJh
dG9yKGZhY2VEYXRhQXJyYXlzKTsKKyAgICAgICAgICAgIGZvciAodmFyIGxldmVsID0gMDsgbGV2
ZWwgPCBtaXBEYXRhLmxlbmd0aDsgbGV2ZWwrKykgeworICAgICAgICAgICAgICAgIHZhciBtaXBT
aXplID0gd2lkdGggPj4gbGV2ZWw7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgZmFjZUluZGV4
ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIG1pcEZhY2VEYXRhID0gbWlwRGF0YVtsZXZlbF1bZmFjZUluZGV4XTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5lZWRDb252ZXJzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
aXBGYWNlRGF0YSA9IF90aGlzLl9jb252ZXJ0UkdCdG9SR0JBVGV4dHVyZURhdGEobWlwRmFjZURh
dGEsIG1pcFNpemUsIG1pcFNpemUsIHR5cGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZmFjZUluZGV4LCBsZXZlbCwgaW50ZXJuYWxT
aXplZEZvbWF0LCBtaXBTaXplLCBtaXBTaXplLCAwLCBpbnRlcm5hbEZvcm1hdCwgdGV4dHVyZVR5
cGUsIG1pcEZhY2VEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBfdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQLCBu
dWxsKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF90aGlzLnVwZGF0
ZVJhd0N1YmVUZXh0dXJlKHRleHR1cmUsIGZhY2VEYXRhQXJyYXlzLCBmb3JtYXQsIHR5cGUsIGlu
dmVydFkpOworICAgICAgICB9CisgICAgICAgIHRleHR1cmUuaXNSZWFkeSA9IHRydWU7CisgICAg
ICAgIC8vIHRoaXMucmVzZXRUZXh0dXJlQ2FjaGUoKTsKKyAgICAgICAgc2NlbmUuX3JlbW92ZVBl
bmRpbmdEYXRhKHRleHR1cmUpOworICAgICAgICBpZiAob25Mb2FkKSB7CisgICAgICAgICAgICBv
bkxvYWQoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5fbG9hZEZpbGUodXJsLCBmdW5j
dGlvbiAoZGF0YSkgeworICAgICAgICBpbnRlcm5hbENhbGxiYWNrKGRhdGEpOworICAgIH0sIHVu
ZGVmaW5lZCwgc2NlbmUub2ZmbGluZVByb3ZpZGVyLCB0cnVlLCBvbmVycm9yKTsKKyAgICByZXR1
cm4gdGV4dHVyZTsKK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmNyZWF0ZVJhd1RleHR1cmUzRCA9IGZ1bmN0aW9uIChk
YXRhLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBnZW5lcmF0ZU1pcE1hcHMsIGludmVy
dFksIHNhbXBsaW5nTW9kZSwgY29tcHJlc3Npb24sIHRleHR1cmVUeXBlKSB7CisgICAgaWYgKGNv
bXByZXNzaW9uID09PSB2b2lkIDApIHsgY29tcHJlc3Npb24gPSBudWxsOyB9CisgICAgaWYgKHRl
eHR1cmVUeXBlID09PSB2b2lkIDApIHsgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVfVU5TSUdORURf
SU5UOyB9CisgICAgdmFyIHRleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5h
bFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siSW50ZXJuYWxUZXh0dXJlIl0o
dGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9SQVczRCk7CisgICAg
dGV4dHVyZS5iYXNlV2lkdGggPSB3aWR0aDsKKyAgICB0ZXh0dXJlLmJhc2VIZWlnaHQgPSBoZWln
aHQ7CisgICAgdGV4dHVyZS5iYXNlRGVwdGggPSBkZXB0aDsKKyAgICB0ZXh0dXJlLndpZHRoID0g
d2lkdGg7CisgICAgdGV4dHVyZS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgdGV4dHVyZS5kZXB0aCA9
IGRlcHRoOworICAgIHRleHR1cmUuZm9ybWF0ID0gZm9ybWF0OworICAgIHRleHR1cmUudHlwZSA9
IHRleHR1cmVUeXBlOworICAgIHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzID0gZ2VuZXJhdGVNaXBN
YXBzOworICAgIHRleHR1cmUuc2FtcGxpbmdNb2RlID0gc2FtcGxpbmdNb2RlOworICAgIHRleHR1
cmUuaXMzRCA9IHRydWU7CisgICAgaWYgKCF0aGlzLl9kb05vdEhhbmRsZUNvbnRleHRMb3N0KSB7
CisgICAgICAgIHRleHR1cmUuX2J1ZmZlclZpZXcgPSBkYXRhOworICAgIH0KKyAgICB0aGlzLnVw
ZGF0ZVJhd1RleHR1cmUzRCh0ZXh0dXJlLCBkYXRhLCBmb3JtYXQsIGludmVydFksIGNvbXByZXNz
aW9uLCB0ZXh0dXJlVHlwZSk7CisgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlzLl9n
bC5URVhUVVJFXzNELCB0ZXh0dXJlLCB0cnVlKTsKKyAgICAvLyBGaWx0ZXJzCisgICAgdmFyIGZp
bHRlcnMgPSB0aGlzLl9nZXRTYW1wbGluZ1BhcmFtZXRlcnMoc2FtcGxpbmdNb2RlLCBnZW5lcmF0
ZU1pcE1hcHMpOworICAgIHRoaXMuX2dsLnRleFBhcmFtZXRlcmkodGhpcy5fZ2wuVEVYVFVSRV8z
RCwgdGhpcy5fZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXJzLm1hZyk7CisgICAgdGhpcy5f
Z2wudGV4UGFyYW1ldGVyaSh0aGlzLl9nbC5URVhUVVJFXzNELCB0aGlzLl9nbC5URVhUVVJFX01J
Tl9GSUxURVIsIGZpbHRlcnMubWluKTsKKyAgICBpZiAoZ2VuZXJhdGVNaXBNYXBzKSB7CisgICAg
ICAgIHRoaXMuX2dsLmdlbmVyYXRlTWlwbWFwKHRoaXMuX2dsLlRFWFRVUkVfM0QpOworICAgIH0K
KyAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfM0QsIG51bGwp
OworICAgIHRoaXMuX2ludGVybmFsVGV4dHVyZXNDYWNoZS5wdXNoKHRleHR1cmUpOworICAgIHJl
dHVybiB0ZXh0dXJlOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUudXBkYXRlUmF3VGV4dHVyZTNEID0gZnVuY3Rpb24g
KHRleHR1cmUsIGRhdGEsIGZvcm1hdCwgaW52ZXJ0WSwgY29tcHJlc3Npb24sIHRleHR1cmVUeXBl
KSB7CisgICAgaWYgKGNvbXByZXNzaW9uID09PSB2b2lkIDApIHsgY29tcHJlc3Npb24gPSBudWxs
OyB9CisgICAgaWYgKHRleHR1cmVUeXBlID09PSB2b2lkIDApIHsgdGV4dHVyZVR5cGUgPSBfRW5n
aW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uVEVYVFVS
RVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgdmFyIGludGVybmFsVHlwZSA9IHRoaXMuX2dldFdl
YkdMVGV4dHVyZVR5cGUodGV4dHVyZVR5cGUpOworICAgIHZhciBpbnRlcm5hbEZvcm1hdCA9IHRo
aXMuX2dldEludGVybmFsRm9ybWF0KGZvcm1hdCk7CisgICAgdmFyIGludGVybmFsU2l6ZWRGb21h
dCA9IHRoaXMuX2dldFJHQkFCdWZmZXJJbnRlcm5hbFNpemVkRm9ybWF0KHRleHR1cmVUeXBlLCBm
b3JtYXQpOworICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVYVFVSRV8z
RCwgdGV4dHVyZSwgdHJ1ZSk7CisgICAgdGhpcy5fdW5wYWNrRmxpcFkoaW52ZXJ0WSA9PT0gdW5k
ZWZpbmVkID8gdHJ1ZSA6IChpbnZlcnRZID8gdHJ1ZSA6IGZhbHNlKSk7CisgICAgaWYgKCF0aGlz
Ll9kb05vdEhhbmRsZUNvbnRleHRMb3N0KSB7CisgICAgICAgIHRleHR1cmUuX2J1ZmZlclZpZXcg
PSBkYXRhOworICAgICAgICB0ZXh0dXJlLmZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgdGV4dHVy
ZS5pbnZlcnRZID0gaW52ZXJ0WTsKKyAgICAgICAgdGV4dHVyZS5fY29tcHJlc3Npb24gPSBjb21w
cmVzc2lvbjsKKyAgICB9CisgICAgaWYgKHRleHR1cmUud2lkdGggJSA0ICE9PSAwKSB7CisgICAg
ICAgIHRoaXMuX2dsLnBpeGVsU3RvcmVpKHRoaXMuX2dsLlVOUEFDS19BTElHTk1FTlQsIDEpOwor
ICAgIH0KKyAgICBpZiAoY29tcHJlc3Npb24gJiYgZGF0YSkgeworICAgICAgICB0aGlzLl9nbC5j
b21wcmVzc2VkVGV4SW1hZ2UzRCh0aGlzLl9nbC5URVhUVVJFXzNELCAwLCB0aGlzLmdldENhcHMo
KS5zM3RjW2NvbXByZXNzaW9uXSwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsIHRleHR1
cmUuZGVwdGgsIDAsIGRhdGEpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgdGhpcy5fZ2wu
dGV4SW1hZ2UzRCh0aGlzLl9nbC5URVhUVVJFXzNELCAwLCBpbnRlcm5hbFNpemVkRm9tYXQsIHRl
eHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LCB0ZXh0dXJlLmRlcHRoLCAwLCBpbnRlcm5hbEZv
cm1hdCwgaW50ZXJuYWxUeXBlLCBkYXRhKTsKKyAgICB9CisgICAgaWYgKHRleHR1cmUuZ2VuZXJh
dGVNaXBNYXBzKSB7CisgICAgICAgIHRoaXMuX2dsLmdlbmVyYXRlTWlwbWFwKHRoaXMuX2dsLlRF
WFRVUkVfM0QpOworICAgIH0KKyAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2ds
LlRFWFRVUkVfM0QsIG51bGwpOworICAgIC8vIHRoaXMucmVzZXRUZXh0dXJlQ2FjaGUoKTsKKyAg
ICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
RW5naW5lcy9FeHRlbnNpb25zL2VuZ2luZS5yZW5kZXJUYXJnZXQudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9F
bmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLnJlbmRlclRhcmdldC50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgbm8gZXhw
b3J0cyBwcm92aWRlZCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL2VuZ2lu
ZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRlcmlhbHNfVGV4dHVyZXNfaW50ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMv
aW50ZXJuYWxUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9pbnRlcm5hbFRleHR1cmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvbG9n
Z2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisKKworCisKK19FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5wcm90b3R5cGUuY3JlYXRlUmVuZGVy
VGFyZ2V0Q3ViZVRleHR1cmUgPSBmdW5jdGlvbiAoc2l6ZSwgb3B0aW9ucykgeworICAgIHZhciBm
dWxsT3B0aW9ucyA9IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXNzaWdu
Il0oeyBnZW5lcmF0ZU1pcE1hcHM6IHRydWUsIGdlbmVyYXRlRGVwdGhCdWZmZXI6IHRydWUsIGdl
bmVyYXRlU3RlbmNpbEJ1ZmZlcjogZmFsc2UsIHR5cGU6IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQs
IHNhbXBsaW5nTW9kZTogX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkVuZ2luZSJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERSwgZm9ybWF0OiBfRW5n
aW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uVEVYVFVS
RUZPUk1BVF9SR0JBIH0sIG9wdGlvbnMpOworICAgIGZ1bGxPcHRpb25zLmdlbmVyYXRlU3RlbmNp
bEJ1ZmZlciA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlRGVwdGhCdWZmZXIgJiYgZnVsbE9wdGlvbnMu
Z2VuZXJhdGVTdGVuY2lsQnVmZmVyOworICAgIGlmIChmdWxsT3B0aW9ucy50eXBlID09PSBfRW5n
aW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uVEVYVFVS
RVRZUEVfRkxPQVQgJiYgIXRoaXMuX2NhcHMudGV4dHVyZUZsb2F0TGluZWFyRmlsdGVyaW5nKSB7
CisgICAgICAgIC8vIGlmIGZsb2F0aW5nIHBvaW50IGxpbmVhciAoZ2wuRkxPQVQpIHRoZW4gZm9y
Y2UgdG8gTkVBUkVTVF9TQU1QTElOR01PREUKKyAgICAgICAgZnVsbE9wdGlvbnMuc2FtcGxpbmdN
b2RlID0gX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2lu
ZSJdLlRFWFRVUkVfTkVBUkVTVF9TQU1QTElOR01PREU7CisgICAgfQorICAgIGVsc2UgaWYgKGZ1
bGxPcHRpb25zLnR5cGUgPT09IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUICYmICF0aGlzLl9jYXBzLnRl
eHR1cmVIYWxmRmxvYXRMaW5lYXJGaWx0ZXJpbmcpIHsKKyAgICAgICAgLy8gaWYgZmxvYXRpbmcg
cG9pbnQgbGluZWFyIChIQUxGX0ZMT0FUKSB0aGVuIGZvcmNlIHRvIE5FQVJFU1RfU0FNUExJTkdN
T0RFCisgICAgICAgIGZ1bGxPcHRpb25zLnNhbXBsaW5nTW9kZSA9IF9FbmdpbmVzX2VuZ2luZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX05FQVJFU1RfU0FN
UExJTkdNT0RFOworICAgIH0KKyAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAgICB2YXIgdGV4dHVy
ZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1
cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5h
bFRleHR1cmUiXS5EQVRBU09VUkNFX1JFTkRFUlRBUkdFVCk7CisgICAgdGhpcy5fYmluZFRleHR1
cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlLCB0cnVlKTsKKyAgICB2YXIg
ZmlsdGVycyA9IHRoaXMuX2dldFNhbXBsaW5nUGFyYW1ldGVycyhmdWxsT3B0aW9ucy5zYW1wbGlu
Z01vZGUsIGZ1bGxPcHRpb25zLmdlbmVyYXRlTWlwTWFwcyk7CisgICAgaWYgKGZ1bGxPcHRpb25z
LnR5cGUgPT09IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJF
bmdpbmUiXS5URVhUVVJFVFlQRV9GTE9BVCAmJiAhdGhpcy5fY2Fwcy50ZXh0dXJlRmxvYXQpIHsK
KyAgICAgICAgZnVsbE9wdGlvbnMudHlwZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7CisgICAg
ICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJMb2dnZXIiXS5X
YXJuKCJGbG9hdCB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZC4gQ3ViZSByZW5kZXIgdGFyZ2V0
IGZvcmNlZCB0byBURVhUVVJFVFlQRV9VTkVTSUdORURfQllURSB0eXBlIik7CisgICAgfQorICAg
IGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wuVEVYVFVSRV9NQUdfRklM
VEVSLCBmaWx0ZXJzLm1hZyk7CisgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFX0NVQkVf
TUFQLCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcnMubWluKTsKKyAgICBnbC50ZXhQYXJh
bWV0ZXJpKGdsLlRFWFRVUkVfQ1VCRV9NQVAsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9U
T19FREdFKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfQ1VCRV9NQVAsIGdsLlRF
WFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTsKKyAgICBmb3IgKHZhciBmYWNlID0gMDsg
ZmFjZSA8IDY7IGZhY2UrKykgeworICAgICAgICBnbC50ZXhJbWFnZTJEKChnbC5URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlKSwgMCwgdGhpcy5fZ2V0UkdCQUJ1ZmZlckludGVybmFs
U2l6ZWRGb3JtYXQoZnVsbE9wdGlvbnMudHlwZSwgZnVsbE9wdGlvbnMuZm9ybWF0KSwgc2l6ZSwg
c2l6ZSwgMCwgdGhpcy5fZ2V0SW50ZXJuYWxGb3JtYXQoZnVsbE9wdGlvbnMuZm9ybWF0KSwgdGhp
cy5fZ2V0V2ViR0xUZXh0dXJlVHlwZShmdWxsT3B0aW9ucy50eXBlKSwgbnVsbCk7CisgICAgfQor
ICAgIC8vIENyZWF0ZSB0aGUgZnJhbWVidWZmZXIKKyAgICB2YXIgZnJhbWVidWZmZXIgPSBnbC5j
cmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVidWZmZXIoZnJh
bWVidWZmZXIpOworICAgIHRleHR1cmUuX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IHRoaXMuX3NldHVw
RnJhbWVidWZmZXJEZXB0aEF0dGFjaG1lbnRzKGZ1bGxPcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1
ZmZlciwgZnVsbE9wdGlvbnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlciwgc2l6ZSwgc2l6ZSk7CisgICAg
Ly8gTWlwTWFwcworICAgIGlmIChmdWxsT3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAg
ICAgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV9DVUJFX01BUCk7CisgICAgfQorICAgIC8v
IFVuYmluZAorICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkoZ2wuVEVYVFVSRV9DVUJFX01B
UCwgbnVsbCk7CisgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIG51bGwp
OworICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVidWZmZXIobnVsbCk7CisgICAgdGV4dHVyZS5f
ZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKKyAgICB0ZXh0dXJlLndpZHRoID0gc2l6ZTsKKyAg
ICB0ZXh0dXJlLmhlaWdodCA9IHNpemU7CisgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAg
ICB0ZXh0dXJlLmlzQ3ViZSA9IHRydWU7CisgICAgdGV4dHVyZS5zYW1wbGVzID0gMTsKKyAgICB0
ZXh0dXJlLmdlbmVyYXRlTWlwTWFwcyA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlTWlwTWFwczsKKyAg
ICB0ZXh0dXJlLnNhbXBsaW5nTW9kZSA9IGZ1bGxPcHRpb25zLnNhbXBsaW5nTW9kZTsKKyAgICB0
ZXh0dXJlLnR5cGUgPSBmdWxsT3B0aW9ucy50eXBlOworICAgIHRleHR1cmUuZm9ybWF0ID0gZnVs
bE9wdGlvbnMuZm9ybWF0OworICAgIHRleHR1cmUuX2dlbmVyYXRlRGVwdGhCdWZmZXIgPSBmdWxs
T3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyOworICAgIHRleHR1cmUuX2dlbmVyYXRlU3RlbmNp
bEJ1ZmZlciA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlcjsKKyAgICB0aGlzLl9p
bnRlcm5hbFRleHR1cmVzQ2FjaGUucHVzaCh0ZXh0dXJlKTsKKyAgICByZXR1cm4gdGV4dHVyZTsK
K307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUu
dHJhbnNmb3JtRmVlZGJhY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvRXh0ZW5zaW9u
cy9lbmdpbmUudHJhbnNmb3JtRmVlZGJhY2sudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogX2ZvcmNlVHJhbnNmb3JtRmVlZGJhY2tUb0J1bmRsZSAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJfZm9yY2VUcmFuc2Zvcm1GZWVkYmFja1RvQnVuZGxlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfZm9yY2VUcmFuc2Zvcm1GZWVkYmFja1RvQnVuZGxlOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvZW5naW5l
ICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisKKy8qKiBAaGlkZGVuICovCit2YXIgX2ZvcmNl
VHJhbnNmb3JtRmVlZGJhY2tUb0J1bmRsZSA9IHRydWU7CitfRW5naW5lc19lbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmNyZWF0ZVRyYW5zZm9y
bUZlZWRiYWNrID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiB0aGlzLl9nbC5jcmVhdGVUcmFu
c2Zvcm1GZWVkYmFjaygpOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2sgPSBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICB0aGlzLl9nbC5kZWxldGVUcmFuc2Zvcm1GZWVkYmFjayh2
YWx1ZSk7Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkVuZ2luZSJdLnByb3RvdHlwZS5iaW5kVHJhbnNmb3JtRmVlZGJhY2sgPSBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICB0aGlzLl9nbC5iaW5kVHJhbnNmb3JtRmVlZGJhY2sodGhpcy5fZ2wuVFJBTlNG
T1JNX0ZFRURCQUNLLCB2YWx1ZSk7Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS5iZWdpblRyYW5zZm9ybUZlZWRiYWNr
ID0gZnVuY3Rpb24gKHVzZVBvaW50cykgeworICAgIGlmICh1c2VQb2ludHMgPT09IHZvaWQgMCkg
eyB1c2VQb2ludHMgPSB0cnVlOyB9CisgICAgdGhpcy5fZ2wuYmVnaW5UcmFuc2Zvcm1GZWVkYmFj
ayh1c2VQb2ludHMgPyB0aGlzLl9nbC5QT0lOVFMgOiB0aGlzLl9nbC5UUklBTkdMRVMpOworfTsK
K19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5w
cm90b3R5cGUuZW5kVHJhbnNmb3JtRmVlZGJhY2sgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5f
Z2wuZW5kVHJhbnNmb3JtRmVlZGJhY2soKTsKK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLnNldFRyYW5mb3JtRmVlZGJh
Y2tWYXJ5aW5ncyA9IGZ1bmN0aW9uIChwcm9ncmFtLCB2YWx1ZSkgeworICAgIHRoaXMuX2dsLnRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MocHJvZ3JhbSwgdmFsdWUsIHRoaXMuX2dsLklOVEVSTEVB
VkVEX0FUVFJJQlMpOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuYmluZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyID0g
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgdGhpcy5fZ2wuYmluZEJ1ZmZlckJhc2UodGhpcy5fZ2wu
VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUiwgMCwgdmFsdWUgPyB2YWx1ZS51bmRlcmx5aW5nUmVz
b3VyY2UgOiBudWxsKTsKK307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMvRXh0
ZW5zaW9ucy9lbmdpbmUud2ViVlIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUu
d2ViVlIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgbm8gZXhwb3J0cyBwcm92aWRlZCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL2VuZ2luZSAq
LyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRo
c19tYXRoX3NpemVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGguc2l6ZSAqLyAiLi9NYXRocy9tYXRoLnNpemUudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29i
c2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RvbU1hbmFnZW1lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZG9t
TWFuYWdlbWVudCAqLyAiLi9NaXNjL2RvbU1hbmFnZW1lbnQudHMiKTsKKworCisKKworCitPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZSwgImlzSW5WUkV4Y2x1c2l2ZVBvaW50ZXJNb2RlIiwg
eworICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdnJFeGNsdXNp
dmVQb2ludGVyTW9kZTsKKyAgICB9LAorICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgY29uZmln
dXJhYmxlOiB0cnVlCit9KTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuX3ByZXBhcmVWUkNvbXBvbmVudCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICB0aGlzLl92clN1cHBvcnRlZCA9IGZhbHNlOworICAgIHRoaXMuX3ZyRXhjbHVz
aXZlUG9pbnRlck1vZGUgPSBmYWxzZTsKKyAgICB0aGlzLm9uVlJEaXNwbGF5Q2hhbmdlZE9ic2Vy
dmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJPYnNlcnZhYmxlIl0oKTsKKyAgICB0aGlzLm9uVlJSZXF1ZXN0UHJlc2VudENvbXBsZXRlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgdGhpcy5vblZSUmVxdWVzdFByZXNlbnRTdGFydCA9IG5ldyBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgpOwor
fTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUi
XS5wcm90b3R5cGUuaXNWUkRldmljZVByZXNlbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJu
ICEhdGhpcy5fdnJEaXNwbGF5OworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuZ2V0VlJEZXZpY2UgPSBmdW5jdGlvbiAo
KSB7CisgICAgcmV0dXJuIHRoaXMuX3ZyRGlzcGxheTsKK307CitfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmluaXRXZWJWUiA9
IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLmluaXRXZWJWUkFzeW5jKCk7CisgICAgcmV0dXJuIHRo
aXMub25WUkRpc3BsYXlDaGFuZ2VkT2JzZXJ2YWJsZTsKK307CitfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0ucHJvdG90eXBlLmluaXRXZWJWUkFz
eW5jID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgdmFyIG5vdGlm
eU9ic2VydmVycyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGV2ZW50QXJncyA9IHsKKyAg
ICAgICAgICAgIHZyRGlzcGxheTogX3RoaXMuX3ZyRGlzcGxheSwKKyAgICAgICAgICAgIHZyU3Vw
cG9ydGVkOiBfdGhpcy5fdnJTdXBwb3J0ZWQKKyAgICAgICAgfTsKKyAgICAgICAgX3RoaXMub25W
UkRpc3BsYXlDaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoZXZlbnRBcmdzKTsKKyAg
ICAgICAgX3RoaXMuX3dlYlZSSW5pdFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVz
KSB7IHJlcyhldmVudEFyZ3MpOyB9KTsKKyAgICB9OworICAgIGlmICghdGhpcy5fb25WckRpc3Bs
YXlDb25uZWN0KSB7CisgICAgICAgIHRoaXMuX29uVnJEaXNwbGF5Q29ubmVjdCA9IGZ1bmN0aW9u
IChldmVudCkgeworICAgICAgICAgICAgX3RoaXMuX3ZyRGlzcGxheSA9IGV2ZW50LmRpc3BsYXk7
CisgICAgICAgICAgICBub3RpZnlPYnNlcnZlcnMoKTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhp
cy5fb25WckRpc3BsYXlEaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3Ro
aXMuX3ZyRGlzcGxheS5jYW5jZWxBbmltYXRpb25GcmFtZShfdGhpcy5fZnJhbWVIYW5kbGVyKTsK
KyAgICAgICAgICAgIF90aGlzLl92ckRpc3BsYXkgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICBf
dGhpcy5fZnJhbWVIYW5kbGVyID0gX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVuZ2luZSJdLlF1ZXVlTmV3RnJhbWUoX3RoaXMuX2JpbmRlZFJlbmRlckZ1bmN0
aW9uKTsKKyAgICAgICAgICAgIG5vdGlmeU9ic2VydmVycygpOworICAgICAgICB9OworICAgICAg
ICB0aGlzLl9vblZyRGlzcGxheVByZXNlbnRDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICBfdGhpcy5fdnJFeGNsdXNpdmVQb2ludGVyTW9kZSA9IF90aGlzLl92ckRpc3BsYXkgJiYg
X3RoaXMuX3ZyRGlzcGxheS5pc1ByZXNlbnRpbmc7CisgICAgICAgIH07CisgICAgICAgIHZhciBo
b3N0V2luZG93ID0gdGhpcy5nZXRIb3N0V2luZG93KCk7CisgICAgICAgIGhvc3RXaW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigndnJkaXNwbGF5Y29ubmVjdCcsIHRoaXMuX29uVnJEaXNwbGF5Q29ubmVj
dCk7CisgICAgICAgIGhvc3RXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndnJkaXNwbGF5ZGlzY29u
bmVjdCcsIHRoaXMuX29uVnJEaXNwbGF5RGlzY29ubmVjdCk7CisgICAgICAgIGhvc3RXaW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigndnJkaXNwbGF5cHJlc2VudGNoYW5nZScsIHRoaXMuX29uVnJEaXNw
bGF5UHJlc2VudENoYW5nZSk7CisgICAgfQorICAgIHRoaXMuX3dlYlZSSW5pdFByb21pc2UgPSB0
aGlzLl93ZWJWUkluaXRQcm9taXNlIHx8IHRoaXMuX2dldFZSRGlzcGxheXNBc3luYygpOworICAg
IHRoaXMuX3dlYlZSSW5pdFByb21pc2UudGhlbihub3RpZnlPYnNlcnZlcnMpOworICAgIHJldHVy
biB0aGlzLl93ZWJWUkluaXRQcm9taXNlOworfTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5wcm90b3R5cGUuX2dldFZSRGlzcGxheXNBc3lu
YyA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbiAocmVzKSB7CisgICAgICAgIGlmIChuYXZpZ2F0b3IuZ2V0VlJEaXNw
bGF5cykgeworICAgICAgICAgICAgbmF2aWdhdG9yLmdldFZSRGlzcGxheXMoKS50aGVuKGZ1bmN0
aW9uIChkZXZpY2VzKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3ZyU3VwcG9ydGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAvLyBub3RlIHRoYXQgZGV2aWNlcyBtYXkgYWN0dWFsbHkgYmUg
YW4gZW1wdHkgYXJyYXkuIFRoaXMgaXMgZmluZTsKKyAgICAgICAgICAgICAgICAvLyB3ZSBleHBl
Y3QgdGhpcy5fdnJEaXNwbGF5IHRvIGJlIHVuZGVmaW5lZCBpbiB0aGlzIGNhc2UuCisgICAgICAg
ICAgICAgICAgX3RoaXMuX3ZyRGlzcGxheSA9IGRldmljZXNbMF07CisgICAgICAgICAgICAgICAg
cmVzKHsKKyAgICAgICAgICAgICAgICAgICAgdnJEaXNwbGF5OiBfdGhpcy5fdnJEaXNwbGF5LAor
ICAgICAgICAgICAgICAgICAgICB2clN1cHBvcnRlZDogX3RoaXMuX3ZyU3VwcG9ydGVkCisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIF90aGlzLl92ckRpc3BsYXkgPSB1bmRlZmluZWQ7CisgICAgICAgICAg
ICBfdGhpcy5fdnJTdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJlcyh7CisgICAgICAg
ICAgICAgICAgdnJEaXNwbGF5OiBfdGhpcy5fdnJEaXNwbGF5LAorICAgICAgICAgICAgICAgIHZy
U3VwcG9ydGVkOiBfdGhpcy5fdnJTdXBwb3J0ZWQKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
CisgICAgfSk7Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkVuZ2luZSJdLnByb3RvdHlwZS5lbmFibGVWUiA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgIGlmICh0aGlzLl92ckRpc3BsYXkgJiYgIXRoaXMuX3ZyRGlzcGxh
eS5pc1ByZXNlbnRpbmcpIHsKKyAgICAgICAgdmFyIG9uUmVzb2x2ZWQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICBfdGhpcy5vblZSUmVxdWVzdFByZXNlbnRDb21wbGV0ZS5ub3RpZnlPYnNl
cnZlcnModHJ1ZSk7CisgICAgICAgICAgICBfdGhpcy5fb25WUkZ1bGxTY3JlZW5UcmlnZ2VyZWQo
KTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIG9uUmVqZWN0ZWQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBfdGhpcy5vblZSUmVxdWVzdFByZXNlbnRDb21wbGV0ZS5ub3RpZnlPYnNlcnZl
cnMoZmFsc2UpOworICAgICAgICB9OworICAgICAgICB0aGlzLm9uVlJSZXF1ZXN0UHJlc2VudFN0
YXJ0Lm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgdGhpcy5fdnJEaXNwbGF5LnJlcXVl
c3RQcmVzZW50KFt7IHNvdXJjZTogdGhpcy5nZXRSZW5kZXJpbmdDYW52YXMoKSB9XSkudGhlbihv
blJlc29sdmVkKS5jYXRjaChvblJlamVjdGVkKTsKKyAgICB9Cit9OworX0VuZ2luZXNfZW5naW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS5fb25WUkZ1
bGxTY3JlZW5UcmlnZ2VyZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHRoaXMuX3ZyRGlzcGxh
eSAmJiB0aGlzLl92ckRpc3BsYXkuaXNQcmVzZW50aW5nKSB7CisgICAgICAgIC8vZ2V0IHRoZSBv
bGQgc2l6ZSBiZWZvcmUgd2UgY2hhbmdlCisgICAgICAgIHRoaXMuX29sZFNpemUgPSBuZXcgX01h
dGhzX21hdGhfc2l6ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTaXplIl0odGhpcy5n
ZXRSZW5kZXJXaWR0aCgpLCB0aGlzLmdldFJlbmRlckhlaWdodCgpKTsKKyAgICAgICAgdGhpcy5f
b2xkSGFyZHdhcmVTY2FsZUZhY3RvciA9IHRoaXMuZ2V0SGFyZHdhcmVTY2FsaW5nTGV2ZWwoKTsK
KyAgICAgICAgLy9nZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQsIGNoYW5nZSB0aGUgcmVuZGVyIHNp
emUKKyAgICAgICAgdmFyIGxlZnRFeWUgPSB0aGlzLl92ckRpc3BsYXkuZ2V0RXllUGFyYW1ldGVy
cygnbGVmdCcpOworICAgICAgICB0aGlzLnNldEhhcmR3YXJlU2NhbGluZ0xldmVsKDEpOworICAg
ICAgICB0aGlzLnNldFNpemUobGVmdEV5ZS5yZW5kZXJXaWR0aCAqIDIsIGxlZnRFeWUucmVuZGVy
SGVpZ2h0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHRoaXMuc2V0SGFyZHdhcmVTY2Fs
aW5nTGV2ZWwodGhpcy5fb2xkSGFyZHdhcmVTY2FsZUZhY3Rvcik7CisgICAgICAgIHRoaXMuc2V0
U2l6ZSh0aGlzLl9vbGRTaXplLndpZHRoLCB0aGlzLl9vbGRTaXplLmhlaWdodCk7CisgICAgfQor
fTsKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUi
XS5wcm90b3R5cGUuZGlzYWJsZVZSID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBfdGhpcyA9IHRo
aXM7CisgICAgaWYgKHRoaXMuX3ZyRGlzcGxheSAmJiB0aGlzLl92ckRpc3BsYXkuaXNQcmVzZW50
aW5nKSB7CisgICAgICAgIHRoaXMuX3ZyRGlzcGxheS5leGl0UHJlc2VudCgpCisgICAgICAgICAg
ICAudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fb25WUkZ1bGxTY3JlZW5UcmlnZ2Vy
ZWQoKTsgfSkKKyAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5f
b25WUkZ1bGxTY3JlZW5UcmlnZ2VyZWQoKTsgfSk7CisgICAgfQorICAgIGlmIChfTWlzY19kb21N
YW5hZ2VtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkRvbU1hbmFnZW1lbnQiXS5J
c1dpbmRvd09iamVjdEV4aXN0KCkpIHsKKyAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoJ3ZyZGlzcGxheXBvaW50ZXJyZXN0cmljdGVkJywgdGhpcy5fb25WUkRpc3BsYXlQb2ludGVy
UmVzdHJpY3RlZCk7CisgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2cmRpc3Bs
YXlwb2ludGVydW5yZXN0cmljdGVkJywgdGhpcy5fb25WUkRpc3BsYXlQb2ludGVyVW5yZXN0cmlj
dGVkKTsKKyAgICAgICAgaWYgKHRoaXMuX29uVnJEaXNwbGF5Q29ubmVjdCkgeworICAgICAgICAg
ICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3ZyZGlzcGxheWNvbm5lY3QnLCB0aGlzLl9v
blZyRGlzcGxheUNvbm5lY3QpOworICAgICAgICAgICAgaWYgKHRoaXMuX29uVnJEaXNwbGF5RGlz
Y29ubmVjdCkgeworICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2
cmRpc3BsYXlkaXNjb25uZWN0JywgdGhpcy5fb25WckRpc3BsYXlEaXNjb25uZWN0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9vblZyRGlzcGxheVByZXNlbnRDaGFuZ2Up
IHsKKyAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndnJkaXNwbGF5
cHJlc2VudGNoYW5nZScsIHRoaXMuX29uVnJEaXNwbGF5UHJlc2VudENoYW5nZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl9vblZyRGlzcGxheUNvbm5lY3QgPSBudWxsOworICAg
ICAgICAgICAgdGhpcy5fb25WckRpc3BsYXlEaXNjb25uZWN0ID0gbnVsbDsKKyAgICAgICAgfQor
ICAgIH0KK307CitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RW5naW5lIl0ucHJvdG90eXBlLl9jb25uZWN0VlJFdmVudHMgPSBmdW5jdGlvbiAoY2FudmFzLCBk
b2N1bWVudCkgeworICAgIHRoaXMuX29uVlJEaXNwbGF5UG9pbnRlclJlc3RyaWN0ZWQgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmIChjYW52YXMpIHsKKyAgICAgICAgICAgIGNhbnZhcy5yZXF1
ZXN0UG9pbnRlckxvY2soKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5fb25WUkRpc3Bs
YXlQb2ludGVyVW5yZXN0cmljdGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIWRvY3Vt
ZW50LmV4aXRQb2ludGVyTG9jaykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGRvY3VtZW50LmV4aXRQb2ludGVyTG9jaygpOworICAgIH07CisgICAgaWYgKF9NaXNj
X2RvbU1hbmFnZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRG9tTWFuYWdlbWVu
dCJdLklzV2luZG93T2JqZWN0RXhpc3QoKSkgeworICAgICAgICB2YXIgaG9zdFdpbmRvdyA9IHRo
aXMuZ2V0SG9zdFdpbmRvdygpOworICAgICAgICBob3N0V2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
J3ZyZGlzcGxheXBvaW50ZXJyZXN0cmljdGVkJywgdGhpcy5fb25WUkRpc3BsYXlQb2ludGVyUmVz
dHJpY3RlZCwgZmFsc2UpOworICAgICAgICBob3N0V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Zy
ZGlzcGxheXBvaW50ZXJ1bnJlc3RyaWN0ZWQnLCB0aGlzLl9vblZSRGlzcGxheVBvaW50ZXJVbnJl
c3RyaWN0ZWQsIGZhbHNlKTsKKyAgICB9Cit9OworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS5fc3VibWl0VlJGcmFtZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAvLyBTdWJtaXQgZnJhbWUgdG8gdGhlIHZyIGRldmljZSwgaWYgZW5h
YmxlZAorICAgIGlmICh0aGlzLl92ckRpc3BsYXkgJiYgdGhpcy5fdnJEaXNwbGF5LmlzUHJlc2Vu
dGluZykgeworICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgb25seSBzdWJtaXQgdGhlIGZyYW1l
IGlmIHdlIHJlYWQgZnJhbWVEYXRhIHN1Y2Nlc3NmdWxseS4KKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIHRoaXMuX3ZyRGlzcGxheS5zdWJtaXRGcmFtZSgpOworICAgICAgICB9CisgICAgICAg
IGNhdGNoIChlKSB7CisgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJUb29scyJdLldhcm4oIndlYlZSIHN1Ym1pdEZyYW1lIGhhcyBoYWQgYW4gdW5l
eHBlY3RlZCBmYWlsdXJlOiAiICsgZSk7CisgICAgICAgIH0KKyAgICB9Cit9OworX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS5p
c1ZSUHJlc2VudGluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gdGhpcy5fdnJEaXNwbGF5
ICYmIHRoaXMuX3ZyRGlzcGxheS5pc1ByZXNlbnRpbmc7Cit9OworX0VuZ2luZXNfZW5naW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLnByb3RvdHlwZS5fcmVxdWVzdFZS
RnJhbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5fZnJhbWVIYW5kbGVyID0gX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLlF1ZXVlTmV3RnJh
bWUodGhpcy5fYmluZGVkUmVuZGVyRnVuY3Rpb24sIHRoaXMuX3ZyRGlzcGxheSk7Cit9OworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5l
cy9FeHRlbnNpb25zL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogX09jY2x1c2lvbkRhdGFTdG9yYWdl
LCBfZm9yY2VUcmFuc2Zvcm1GZWVkYmFja1RvQnVuZGxlICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZW5naW5lX29jY2x1c2lvblF1ZXJ5X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VuZ2luZS5vY2Ns
dXNpb25RdWVyeSAqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLm9jY2x1c2lvblF1ZXJ5
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9PY2NsdXNpb25EYXRhU3RvcmFnZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2VuZ2luZV9vY2NsdXNpb25RdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfT2NjbHVzaW9uRGF0YVN0b3JhZ2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfZW5naW5lX3RyYW5zZm9ybUZlZWRiYWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VuZ2luZS50cmFuc2Zvcm1GZWVkYmFj
ayAqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLnRyYW5zZm9ybUZlZWRiYWNrLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIl9mb3JjZVRyYW5zZm9ybUZlZWRiYWNrVG9CdW5kbGUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9lbmdpbmVfdHJhbnNmb3JtRmVlZGJhY2tfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siX2ZvcmNlVHJhbnNmb3JtRmVlZGJhY2tUb0J1bmRsZSJdOyB9KTsKKwor
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRW5naW5lcy9OYXRpdmUvbmF0aXZlU2hhZGVy
UHJvY2Vzc29yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvTmF0aXZlL25hdGl2ZVNoYWRlclByb2Nl
c3Nvci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE5hdGl2ZVNoYWRlclByb2Nlc3NvciAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOYXRpdmVTaGFkZXJQcm9jZXNz
b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE5hdGl2ZVNoYWRlclByb2Nlc3NvcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIv
dHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1dlYkdMX3dlYkdMMlNo
YWRlclByb2Nlc3NvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL1dlYkdML3dlYkdMMlNoYWRlclByb2Nlc3NvcnMgKi8gIi4vRW5naW5l
cy9XZWJHTC93ZWJHTDJTaGFkZXJQcm9jZXNzb3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZl
ci50cyIpOwordmFyIF9hOworCisKKworLy8gVGhlc2UgbnVtYmVycyBtdXN0IG1hdGNoIHRoZSB2
YWx1ZXMgZm9yIGJnZng6OkF0dHJpYjo6RW51bQordmFyIGF0dHJpYnV0ZUxvY2F0aW9ucyA9IChf
YSA9IHt9LAorICAgIF9hW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0gPSAwLAorICAgIF9hW19NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtp
bmRdID0gMSwKKyAgICBfYVtfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJWZXJ0ZXhCdWZmZXIiXS5UYW5nZW50S2luZF0gPSAyLAorICAgIF9hW19NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2lu
ZF0gPSA0LAorICAgIF9hW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0tpbmRdID0gOCwKKyAgICBfYVtfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5N
YXRyaWNlc1dlaWdodHNLaW5kXSA9IDksCisgICAgX2EpOworLy8gTXVzdCBtYXRjaCBiZ2Z4OjpB
dHRyaWI6OlRleENvb3JkMAordmFyIGZpcnN0R2VuZXJpY0F0dHJpYnV0ZUxvY2F0aW9uID0gMTA7
CisvLyBNdXN0IG1hdGNoIGJnZng6OkF0dHJpYjo6VGV4Q29vcmQ3Cit2YXIgbGFzdEdlbmVyaWNB
dHRyaWJ1dGVMb2NhdGlvbiA9IDE3OworLyoqIEBoaWRkZW4gKi8KK3ZhciBOYXRpdmVTaGFkZXJQ
cm9jZXNzb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTmF0aXZlU2hhZGVyUHJv
Y2Vzc29yLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIE5hdGl2ZVNoYWRlclByb2Nlc3NvcigpIHsK
KyAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJn
dW1lbnRzKSB8fCB0aGlzOworICAgIH0KKyAgICBOYXRpdmVTaGFkZXJQcm9jZXNzb3IucHJvdG90
eXBlLmxpbmVQcm9jZXNzb3IgPSBmdW5jdGlvbiAobGluZSkgeworICAgICAgICBmb3IgKHZhciBf
aSA9IDAsIF9hID0gdGhpcy5fcmVwbGFjZW1lbnRzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewor
ICAgICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gX2FbX2ldOworICAgICAgICAgICAgbGluZSA9
IGxpbmUucmVwbGFjZShyZXBsYWNlbWVudC5zZWFyY2hWYWx1ZSwgcmVwbGFjZW1lbnQucmVwbGFj
ZVZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGluZTsKKyAgICB9OworICAgIE5h
dGl2ZVNoYWRlclByb2Nlc3Nvci5wcm90b3R5cGUuYXR0cmlidXRlUHJvY2Vzc29yID0gZnVuY3Rp
b24gKGF0dHJpYnV0ZSkgeworICAgICAgICB2YXIgbWF0Y2ggPSBhdHRyaWJ1dGUubWF0Y2goL2F0
dHJpYnV0ZVxzK1teXHNdK1xzKyhbXlxzXSspXHMqKD86XFsuK1xdKT9ccyo7Lyk7CisgICAgICAg
IHZhciBuYW1lID0gbWF0Y2hbMV07CisgICAgICAgIHZhciBsb2NhdGlvbiA9IGF0dHJpYnV0ZUxv
Y2F0aW9uc1tuYW1lXTsKKyAgICAgICAgaWYgKGxvY2F0aW9uID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgIGxvY2F0aW9uID0gdGhpcy5fZ2VuZXJpY0F0dHJpYnV0ZUxvY2F0aW9uKys7Cisg
ICAgICAgICAgICBpZiAobG9jYXRpb24gPiBsYXN0R2VuZXJpY0F0dHJpYnV0ZUxvY2F0aW9uKSB7
CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeGNlZWRlZCBtYXhpbXVtIGN1c3Rv
bSBhdHRyaWJ1dGVzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
ICJsYXlvdXQobG9jYXRpb249IiArIGxvY2F0aW9uICsgIikgIiArIF9zdXBlci5wcm90b3R5cGUu
YXR0cmlidXRlUHJvY2Vzc29yLmNhbGwodGhpcywgYXR0cmlidXRlKTsKKyAgICB9OworICAgIE5h
dGl2ZVNoYWRlclByb2Nlc3Nvci5wcm90b3R5cGUudmFyeWluZ1Byb2Nlc3NvciA9IGZ1bmN0aW9u
ICh2YXJ5aW5nLCBpc0ZyYWdtZW50KSB7CisgICAgICAgIHZhciBsb2NhdGlvbjsKKyAgICAgICAg
aWYgKGlzRnJhZ21lbnQpIHsKKyAgICAgICAgICAgIGxvY2F0aW9uID0gdGhpcy5fdmFyeWluZ0xv
Y2F0aW9uTWFwW3ZhcnlpbmddOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgbG9jYXRpb24gPSB0aGlzLl92YXJ5aW5nTG9jYXRpb25Db3VudCsrOworICAgICAgICAgICAg
dGhpcy5fdmFyeWluZ0xvY2F0aW9uTWFwW3ZhcnlpbmddID0gbG9jYXRpb247CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuICJsYXlvdXQobG9jYXRpb249IiArIGxvY2F0aW9uICsgIikgIiArIF9z
dXBlci5wcm90b3R5cGUudmFyeWluZ1Byb2Nlc3Nvci5jYWxsKHRoaXMsIHZhcnlpbmcsIGlzRnJh
Z21lbnQpOworICAgIH07CisgICAgTmF0aXZlU2hhZGVyUHJvY2Vzc29yLnByb3RvdHlwZS51bmlm
b3JtUHJvY2Vzc29yID0gZnVuY3Rpb24gKHVuaWZvcm0pIHsKKyAgICAgICAgdmFyIG1hdGNoID0g
dW5pZm9ybS5tYXRjaCgvdW5pZm9ybVxzKyhbXlxzXSspXHMrKFteXHNdKylccyooPzpcWy4rXF0p
P1xzKjsvKTsKKyAgICAgICAgdmFyIHR5cGUgPSBtYXRjaFsxXTsKKyAgICAgICAgdmFyIG5hbWUg
PSBtYXRjaFsyXTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlICJz
YW1wbGVyMkQiOgorICAgICAgICAgICAgY2FzZSAic2FtcGxlckN1YmUiOiB7CisgICAgICAgICAg
ICAgICAgdmFyIHN1ZmZpeCA9IHR5cGUuc3Vic3RyKDcpOworICAgICAgICAgICAgICAgIHZhciBi
aW5kaW5nID0gdGhpcy5fdGV4dHVyZUNvdW50Kys7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVw
bGFjZW1lbnRzLnB1c2goeyBzZWFyY2hWYWx1ZTogbmV3IFJlZ0V4cCgiXFxiIiArIG5hbWUgKyAi
XFxiIiksIHJlcGxhY2VWYWx1ZTogInNhbXBsZXIiICsgc3VmZml4ICsgIigiICsgbmFtZSArICJU
ZXh0dXJlLCAiICsgbmFtZSArICIpIiB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gImxheW91
dChiaW5kaW5nPSIgKyBiaW5kaW5nICsgIikgdW5pZm9ybSB0ZXh0dXJlIiArIHN1ZmZpeCArICIg
IiArIG5hbWUgKyAiVGV4dHVyZTtcbmxheW91dChiaW5kaW5nPSIgKyBiaW5kaW5nICsgIikgdW5p
Zm9ybSBzYW1wbGVyICIgKyBuYW1lICsgIjsiOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX3VuaWZvcm1zLnB1c2godW5pZm9ybSk7CisgICAgICAgIHJldHVybiB0aGlz
Ll91bmlmb3Jtcy5sZW5ndGggPT09IDEgPyAiPFVOSUZPUk0+IiA6ICIiOworICAgIH07CisgICAg
TmF0aXZlU2hhZGVyUHJvY2Vzc29yLnByb3RvdHlwZS5wcmVQcm9jZXNzb3IgPSBmdW5jdGlvbiAo
Y29kZSwgZGVmaW5lcywgaXNGcmFnbWVudCkgeworICAgICAgICB0aGlzLl9nZW5lcmljQXR0cmli
dXRlTG9jYXRpb24gPSBmaXJzdEdlbmVyaWNBdHRyaWJ1dGVMb2NhdGlvbjsKKyAgICAgICAgaWYg
KCFpc0ZyYWdtZW50KSB7CisgICAgICAgICAgICB0aGlzLl92YXJ5aW5nTG9jYXRpb25Db3VudCA9
IDA7CisgICAgICAgICAgICB0aGlzLl92YXJ5aW5nTG9jYXRpb25NYXAgPSB7fTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLl9yZXBsYWNlbWVudHMgPSBbXTsKKyAgICAgICAgdGhpcy5fdGV4dHVy
ZUNvdW50ID0gMDsKKyAgICAgICAgdGhpcy5fdW5pZm9ybXMgPSBbXTsKKyAgICAgICAgcmV0dXJu
IGNvZGU7CisgICAgfTsKKyAgICBOYXRpdmVTaGFkZXJQcm9jZXNzb3IucHJvdG90eXBlLnBvc3RQ
cm9jZXNzb3IgPSBmdW5jdGlvbiAoY29kZSwgZGVmaW5lcywgaXNGcmFnbWVudCkgeworICAgICAg
ICBjb2RlID0gX3N1cGVyLnByb3RvdHlwZS5wb3N0UHJvY2Vzc29yLmNhbGwodGhpcywgY29kZSwg
ZGVmaW5lcywgaXNGcmFnbWVudCk7CisgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoIjxVTklG
T1JNPiIsICJ1bmlmb3JtIEZyYW1lIHtcbiIgKyB0aGlzLl91bmlmb3Jtcy5qb2luKCJcbiIpICsg
IlxufTsiKTsKKyAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgib3V0IHZlYzQgZ2xGcmFnQ29s
b3IiLCAibGF5b3V0KGxvY2F0aW9uPTApIG91dCB2ZWM0IGdsRnJhZ0NvbG9yIik7CisgICAgICAg
IHJldHVybiBjb2RlOworICAgIH07CisgICAgcmV0dXJuIE5hdGl2ZVNoYWRlclByb2Nlc3NvcjsK
K30oX1dlYkdMX3dlYkdMMlNoYWRlclByb2Nlc3NvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siV2ViR0wyU2hhZGVyUHJvY2Vzc29yIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9FbmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvT3BlcmF0b3JzL3NoYWRlckRlZmlu
ZUFuZE9wZXJhdG9yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9F
bmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvT3BlcmF0b3JzL3NoYWRlckRlZmluZUFuZE9w
ZXJhdG9yLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IFNoYWRlckRlZmluZUFuZE9wZXJhdG9yICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlNoYWRlckRlZmluZUFuZE9wZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBTaGFkZXJEZWZpbmVBbmRPcGVyYXRvcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3NoYWRlckRlZmluZUV4cHJlc3Npb25fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NoYWRlckRlZmlu
ZUV4cHJlc3Npb24gKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL0V4cHJlc3Npb25zL3NoYWRlckRl
ZmluZUV4cHJlc3Npb24udHMiKTsKKworCisvKiogQGhpZGRlbiAqLwordmFyIFNoYWRlckRlZmlu
ZUFuZE9wZXJhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFNoYWRlckRlZmlu
ZUFuZE9wZXJhdG9yLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIFNoYWRlckRlZmluZUFuZE9wZXJh
dG9yKCkgeworICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0
aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CisgICAgfQorICAgIFNoYWRlckRlZmluZUFuZE9wZXJh
dG9yLnByb3RvdHlwZS5pc1RydWUgPSBmdW5jdGlvbiAocHJlcHJvY2Vzc29ycykgeworICAgICAg
ICByZXR1cm4gdGhpcy5sZWZ0T3BlcmFuZC5pc1RydWUocHJlcHJvY2Vzc29ycykgJiYgdGhpcy5y
aWdodE9wZXJhbmQuaXNUcnVlKHByZXByb2Nlc3NvcnMpOworICAgIH07CisgICAgcmV0dXJuIFNo
YWRlckRlZmluZUFuZE9wZXJhdG9yOworfShfc2hhZGVyRGVmaW5lRXhwcmVzc2lvbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTaGFkZXJEZWZpbmVFeHByZXNzaW9uIl0pKTsKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvT3Bl
cmF0b3JzL3NoYWRlckRlZmluZUFyaXRobWV0aWNPcGVyYXRvci50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvUHJvY2Vzc29ycy9FeHByZXNz
aW9ucy9PcGVyYXRvcnMvc2hhZGVyRGVmaW5lQXJpdGhtZXRpY09wZXJhdG9yLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTaGFk
ZXJEZWZpbmVBcml0aG1ldGljT3BlcmF0b3IgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU2hhZGVyRGVmaW5lQXJpdGhtZXRpY09wZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBTaGFkZXJEZWZpbmVBcml0aG1ldGljT3BlcmF0b3I7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5q
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zaGFkZXJEZWZpbmVFeHByZXNzaW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9z
aGFkZXJEZWZpbmVFeHByZXNzaW9uICovICIuL0VuZ2luZXMvUHJvY2Vzc29ycy9FeHByZXNzaW9u
cy9zaGFkZXJEZWZpbmVFeHByZXNzaW9uLnRzIik7CisKKworLyoqIEBoaWRkZW4gKi8KK3ZhciBT
aGFkZXJEZWZpbmVBcml0aG1ldGljT3BlcmF0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
X3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRl
bmRzIl0oU2hhZGVyRGVmaW5lQXJpdGhtZXRpY09wZXJhdG9yLCBfc3VwZXIpOworICAgIGZ1bmN0
aW9uIFNoYWRlckRlZmluZUFyaXRobWV0aWNPcGVyYXRvcihkZWZpbmUsIG9wZXJhbmQsIHRlc3RW
YWx1ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwor
ICAgICAgICBfdGhpcy5kZWZpbmUgPSBkZWZpbmU7CisgICAgICAgIF90aGlzLm9wZXJhbmQgPSBv
cGVyYW5kOworICAgICAgICBfdGhpcy50ZXN0VmFsdWUgPSB0ZXN0VmFsdWU7CisgICAgICAgIHJl
dHVybiBfdGhpczsKKyAgICB9CisgICAgU2hhZGVyRGVmaW5lQXJpdGhtZXRpY09wZXJhdG9yLnBy
b3RvdHlwZS5pc1RydWUgPSBmdW5jdGlvbiAocHJlcHJvY2Vzc29ycykgeworICAgICAgICB2YXIg
dmFsdWUgPSBwcmVwcm9jZXNzb3JzW3RoaXMuZGVmaW5lXTsKKyAgICAgICAgaWYgKHZhbHVlID09
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgY29uZGl0aW9uID0gZmFsc2U7CisgICAgICAgIHZhciBsZWZ0ID0gcGFyc2VJbnQo
dmFsdWUpOworICAgICAgICB2YXIgcmlnaHQgPSBwYXJzZUludCh0aGlzLnRlc3RWYWx1ZSk7Cisg
ICAgICAgIHN3aXRjaCAodGhpcy5vcGVyYW5kKSB7CisgICAgICAgICAgICBjYXNlICI+IjoKKyAg
ICAgICAgICAgICAgICBjb25kaXRpb24gPSBsZWZ0ID4gcmlnaHQ7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlICI8IjoKKyAgICAgICAgICAgICAgICBjb25kaXRpb24g
PSBsZWZ0IDwgcmlnaHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
ICI8PSI6CisgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gbGVmdCA8PSByaWdodDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIj49IjoKKyAgICAgICAgICAgICAg
ICBjb25kaXRpb24gPSBsZWZ0ID49IHJpZ2h0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSAiPT0iOgorICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IGxlZnQgPT09
IHJpZ2h0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBjb25kaXRpb247CisgICAgfTsKKyAgICByZXR1cm4gU2hhZGVyRGVmaW5lQXJpdGhtZXRpY09w
ZXJhdG9yOworfShfc2hhZGVyRGVmaW5lRXhwcmVzc2lvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJTaGFkZXJEZWZpbmVFeHByZXNzaW9uIl0pKTsKKworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9FbmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvT3BlcmF0b3JzL3NoYWRlckRl
ZmluZUlzRGVmaW5lZE9wZXJhdG9yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9FbmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvT3BlcmF0b3JzL3No
YWRlckRlZmluZUlzRGVmaW5lZE9wZXJhdG9yLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNoYWRlckRlZmluZUlzRGVmaW5lZE9w
ZXJhdG9yICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNoYWRlckRlZmlu
ZUlzRGVmaW5lZE9wZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTaGFkZXJEZWZpbmVJc0Rl
ZmluZWRPcGVyYXRvcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3NoYWRlckRlZmluZUV4cHJlc3Npb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NoYWRlckRlZmluZUV4cHJlc3Npb24g
Ki8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL0V4cHJlc3Npb25zL3NoYWRlckRlZmluZUV4cHJlc3Np
b24udHMiKTsKKworCisvKiogQGhpZGRlbiAqLwordmFyIFNoYWRlckRlZmluZUlzRGVmaW5lZE9w
ZXJhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFNoYWRlckRlZmluZUlzRGVm
aW5lZE9wZXJhdG9yLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIFNoYWRlckRlZmluZUlzRGVmaW5l
ZE9wZXJhdG9yKGRlZmluZSwgbm90KSB7CisgICAgICAgIGlmIChub3QgPT09IHZvaWQgMCkgeyBu
b3QgPSBmYWxzZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0
aGlzOworICAgICAgICBfdGhpcy5kZWZpbmUgPSBkZWZpbmU7CisgICAgICAgIF90aGlzLm5vdCA9
IG5vdDsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBTaGFkZXJEZWZpbmVJc0Rl
ZmluZWRPcGVyYXRvci5wcm90b3R5cGUuaXNUcnVlID0gZnVuY3Rpb24gKHByZXByb2Nlc3NvcnMp
IHsKKyAgICAgICAgdmFyIGNvbmRpdGlvbiA9IHByZXByb2Nlc3NvcnNbdGhpcy5kZWZpbmVdICE9
PSB1bmRlZmluZWQ7CisgICAgICAgIGlmICh0aGlzLm5vdCkgeworICAgICAgICAgICAgY29uZGl0
aW9uID0gIWNvbmRpdGlvbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29uZGl0aW9uOwor
ICAgIH07CisgICAgcmV0dXJuIFNoYWRlckRlZmluZUlzRGVmaW5lZE9wZXJhdG9yOworfShfc2hh
ZGVyRGVmaW5lRXhwcmVzc2lvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTaGFkZXJE
ZWZpbmVFeHByZXNzaW9uIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVz
L1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvT3BlcmF0b3JzL3NoYWRlckRlZmluZU9yT3BlcmF0b3Iu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5lcy9Qcm9jZXNz
b3JzL0V4cHJlc3Npb25zL09wZXJhdG9ycy9zaGFkZXJEZWZpbmVPck9wZXJhdG9yLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2hhZGVyRGVm
aW5lT3JPcGVyYXRvciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaGFk
ZXJEZWZpbmVPck9wZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTaGFkZXJEZWZpbmVPck9w
ZXJhdG9yOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25v
ZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfc2hhZGVyRGVmaW5lRXhwcmVzc2lvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vc2hhZGVyRGVmaW5lRXhwcmVzc2lvbiAqLyAiLi9F
bmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvc2hhZGVyRGVmaW5lRXhwcmVzc2lvbi50cyIp
OworCisKKy8qKiBAaGlkZGVuICovCit2YXIgU2hhZGVyRGVmaW5lT3JPcGVyYXRvciA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShTaGFkZXJEZWZpbmVPck9wZXJhdG9yLCBfc3VwZXIp
OworICAgIGZ1bmN0aW9uIFNoYWRlckRlZmluZU9yT3BlcmF0b3IoKSB7CisgICAgICAgIHJldHVy
biBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhp
czsKKyAgICB9CisgICAgU2hhZGVyRGVmaW5lT3JPcGVyYXRvci5wcm90b3R5cGUuaXNUcnVlID0g
ZnVuY3Rpb24gKHByZXByb2Nlc3NvcnMpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubGVmdE9wZXJh
bmQuaXNUcnVlKHByZXByb2Nlc3NvcnMpIHx8IHRoaXMucmlnaHRPcGVyYW5kLmlzVHJ1ZShwcmVw
cm9jZXNzb3JzKTsKKyAgICB9OworICAgIHJldHVybiBTaGFkZXJEZWZpbmVPck9wZXJhdG9yOwor
fShfc2hhZGVyRGVmaW5lRXhwcmVzc2lvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
aGFkZXJEZWZpbmVFeHByZXNzaW9uIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9F
bmdpbmVzL1Byb2Nlc3NvcnMvRXhwcmVzc2lvbnMvc2hhZGVyRGVmaW5lRXhwcmVzc2lvbi50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvUHJvY2Vzc29ycy9FeHByZXNzaW9u
cy9zaGFkZXJEZWZpbmVFeHByZXNzaW9uLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBTaGFkZXJEZWZpbmVFeHByZXNzaW9uICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlNoYWRlckRlZmluZUV4cHJlc3Npb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFNoYWRlckRlZmluZUV4cHJlc3Npb247IH0pOworLyoqIEBoaWRkZW4gKi8KK3ZhciBT
aGFkZXJEZWZpbmVFeHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAg
IGZ1bmN0aW9uIFNoYWRlckRlZmluZUV4cHJlc3Npb24oKSB7CisgICAgfQorICAgIFNoYWRlckRl
ZmluZUV4cHJlc3Npb24ucHJvdG90eXBlLmlzVHJ1ZSA9IGZ1bmN0aW9uIChwcmVwcm9jZXNzb3Jz
KSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgcmV0dXJuIFNoYWRlckRlZmlu
ZUV4cHJlc3Npb247Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMv
UHJvY2Vzc29ycy9zaGFkZXJDb2RlQ29uZGl0aW9uTm9kZS50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9F
bmdpbmVzL1Byb2Nlc3NvcnMvc2hhZGVyQ29kZUNvbmRpdGlvbk5vZGUudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBTaGFkZXJDb2RlQ29uZGl0aW9uTm9kZSAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaGFkZXJDb2RlQ29uZGl0aW9uTm9kZSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gU2hhZGVyQ29kZUNvbmRpdGlvbk5vZGU7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVz
Ni5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zaGFkZXJDb2RlTm9kZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zaGFkZXJD
b2RlTm9kZSAqLyAiLi9FbmdpbmVzL1Byb2Nlc3NvcnMvc2hhZGVyQ29kZU5vZGUudHMiKTsKKwor
CisvKiogQGhpZGRlbiAqLwordmFyIFNoYWRlckNvZGVDb25kaXRpb25Ob2RlID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKFNoYWRlckNvZGVDb25kaXRpb25Ob2RlLCBfc3VwZXIpOwor
ICAgIGZ1bmN0aW9uIFNoYWRlckNvZGVDb25kaXRpb25Ob2RlKCkgeworICAgICAgICByZXR1cm4g
X3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7
CisgICAgfQorICAgIFNoYWRlckNvZGVDb25kaXRpb25Ob2RlLnByb3RvdHlwZS5wcm9jZXNzID0g
ZnVuY3Rpb24gKHByZXByb2Nlc3NvcnMsIG9wdGlvbnMpIHsKKyAgICAgICAgZm9yICh2YXIgaW5k
ZXggPSAwOyBpbmRleCA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuY2hpbGRyZW5baW5kZXhdOworICAgICAgICAgICAgaWYgKG5v
ZGUuaXNWYWxpZChwcmVwcm9jZXNzb3JzKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
LnByb2Nlc3MocHJlcHJvY2Vzc29ycywgb3B0aW9ucyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuICIiOworICAgIH07CisgICAgcmV0dXJuIFNoYWRlckNvZGVDb25k
aXRpb25Ob2RlOworfShfc2hhZGVyQ29kZU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siU2hhZGVyQ29kZU5vZGUiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2lu
ZXMvUHJvY2Vzc29ycy9zaGFkZXJDb2RlQ3Vyc29yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5lcy9Qcm9j
ZXNzb3JzL3NoYWRlckNvZGVDdXJzb3IudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNoYWRl
ckNvZGVDdXJzb3IgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hhZGVy
Q29kZUN1cnNvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2hhZGVyQ29kZUN1cnNvcjsgfSk7Cisv
KiogQGhpZGRlbiAqLwordmFyIFNoYWRlckNvZGVDdXJzb3IgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgZnVuY3Rpb24gU2hhZGVyQ29kZUN1cnNvcigpIHsKKyAgICB9CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlckNvZGVDdXJzb3IucHJvdG90eXBlLCAiY3VycmVu
dExpbmUiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2xpbmVzW3RoaXMubGluZUluZGV4XTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlckNvZGVDdXJzb3IucHJvdG90eXBlLCAiY2FuUmVhZCIs
IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5s
aW5lSW5kZXggPCB0aGlzLl9saW5lcy5sZW5ndGggLSAxOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyQ29kZUN1cnNvci5wcm90b3R5cGUsICJsaW5l
cyIsIHsKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMu
X2xpbmVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIHZhbHVlXzEgPSB2YWx1
ZTsgX2kgPCB2YWx1ZV8xLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZhciBsaW5l
ID0gdmFsdWVfMVtfaV07CisgICAgICAgICAgICAgICAgLy8gUHJldmVudCByZW1vdmluZyBsaW5l
IGJyZWFrIGluIG1hY3Jvcy4KKyAgICAgICAgICAgICAgICBpZiAobGluZVswXSA9PT0gIiMiKSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVzLnB1c2gobGluZSk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2
YXIgc3BsaXQgPSBsaW5lLnNwbGl0KCI7Iik7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5k
ZXggPSAwOyBpbmRleCA8IHNwbGl0Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgc3ViTGluZSA9IHNwbGl0W2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgc3Vi
TGluZSA9IHN1YkxpbmUudHJpbSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YkxpbmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVzLnB1c2goc3ViTGluZSArIChpbmRl
eCAhPT0gc3BsaXQubGVuZ3RoIC0gMSA/ICI7IiA6ICIiKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICByZXR1cm4gU2hhZGVyQ29kZUN1
cnNvcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRW5naW5lcy9Qcm9jZXNz
b3JzL3NoYWRlckNvZGVOb2RlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvUHJvY2Vzc29ycy9zaGFkZXJD
b2RlTm9kZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNoYWRlckNvZGVOb2RlICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNoYWRlckNvZGVOb2RlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBTaGFkZXJDb2RlTm9kZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2Nfc3RyaW5nVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvc3RyaW5nVG9vbHMgKi8gIi4vTWlzYy9zdHJpbmdU
b29scy50cyIpOworCisvKiogQGhpZGRlbiAqLwordmFyIFNoYWRlckNvZGVOb2RlID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFNoYWRlckNvZGVOb2RlKCkgewor
ICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107CisgICAgfQorICAgIFNoYWRlckNvZGVOb2RlLnBy
b3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24gKHByZXByb2Nlc3NvcnMpIHsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfTsKKyAgICBTaGFkZXJDb2RlTm9kZS5wcm90b3R5cGUucHJvY2VzcyA9
IGZ1bmN0aW9uIChwcmVwcm9jZXNzb3JzLCBvcHRpb25zKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSAiIjsKKyAgICAgICAgaWYgKHRoaXMubGluZSkgeworICAgICAgICAgICAgdmFyIHZhbHVlID0g
dGhpcy5saW5lOworICAgICAgICAgICAgdmFyIHByb2Nlc3NvciA9IG9wdGlvbnMucHJvY2Vzc29y
OworICAgICAgICAgICAgaWYgKHByb2Nlc3NvcikgeworICAgICAgICAgICAgICAgIC8vIFRoaXMg
bXVzdCBiZSBkb25lIGJlZm9yZSBvdGhlciByZXBsYWNlbWVudHMgdG8gYXZvaWQgbWlzdGFrZW5s
eSBjaGFuZ2luZyBzb21ldGhpbmcgdGhhdCB3YXMgYWxyZWFkeSBjaGFuZ2VkLgorICAgICAgICAg
ICAgICAgIGlmIChwcm9jZXNzb3IubGluZVByb2Nlc3NvcikgeworICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHByb2Nlc3Nvci5saW5lUHJvY2Vzc29yKHZhbHVlLCBvcHRpb25zLmlzRnJhZ21l
bnQsIG9wdGlvbnMucHJvY2Vzc2luZ0NvbnRleHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAocHJvY2Vzc29yLmF0dHJpYnV0ZVByb2Nlc3NvciAmJiBfTWlzY19zdHJp
bmdUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdHJpbmdUb29scyJdLlN0YXJ0
c1dpdGgodGhpcy5saW5lLCAiYXR0cmlidXRlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBwcm9jZXNzb3IuYXR0cmlidXRlUHJvY2Vzc29yKHRoaXMubGluZSwgb3B0aW9ucy5wcm9j
ZXNzaW5nQ29udGV4dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHByb2Nlc3Nvci52YXJ5aW5nUHJvY2Vzc29yICYmIF9NaXNjX3N0cmluZ1Rvb2xzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlN0cmluZ1Rvb2xzIl0uU3RhcnRzV2l0aCh0aGlzLmxp
bmUsICJ2YXJ5aW5nIikpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzb3Iu
dmFyeWluZ1Byb2Nlc3Nvcih0aGlzLmxpbmUsIG9wdGlvbnMuaXNGcmFnbWVudCwgb3B0aW9ucy5w
cm9jZXNzaW5nQ29udGV4dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKChwcm9jZXNzb3IudW5pZm9ybVByb2Nlc3NvciB8fCBwcm9jZXNzb3IudW5pZm9ybUJ1
ZmZlclByb2Nlc3NvcikgJiYgX01pc2Nfc3RyaW5nVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siU3RyaW5nVG9vbHMiXS5TdGFydHNXaXRoKHRoaXMubGluZSwgInVuaWZvcm0iKSAm
JiAhb3B0aW9ucy5sb29rRm9yQ2xvc2luZ0JyYWNrZXRGb3JVbmlmb3JtQnVmZmVyKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciByZWdleCA9IC91bmlmb3JtXHMrKFxTKylccysoXFMrKVxzKjsv
OworICAgICAgICAgICAgICAgICAgICBpZiAocmVnZXgudGVzdCh0aGlzLmxpbmUpKSB7IC8vIHVu
aWZvcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzb3IudW5pZm9ybVByb2Nl
c3NvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc29yLnVu
aWZvcm1Qcm9jZXNzb3IodGhpcy5saW5lLCBvcHRpb25zLmlzRnJhZ21lbnQsIHByZXByb2Nlc3Nv
cnMsIG9wdGlvbnMucHJvY2Vzc2luZ0NvbnRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBV
bmlmb3JtIGJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3Nvci51bmlm
b3JtQnVmZmVyUHJvY2Vzc29yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBwcm9jZXNzb3IudW5pZm9ybUJ1ZmZlclByb2Nlc3Nvcih0aGlzLmxpbmUsIG9wdGlvbnMuaXNG
cmFnbWVudCwgb3B0aW9ucy5wcm9jZXNzaW5nQ29udGV4dCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3B0aW9ucy5sb29rRm9yQ2xvc2luZ0JyYWNrZXRGb3JVbmlmb3JtQnVmZmVyID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sb29rRm9yQ2xv
c2luZ0JyYWNrZXRGb3JVbmlmb3JtQnVmZmVyICYmIHRoaXMubGluZS5pbmRleE9mKCJ9IikgIT09
IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubG9va0ZvckNsb3NpbmdCcmFja2V0
Rm9yVW5pZm9ybUJ1ZmZlciA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vz
c29yLmVuZE9mVW5pZm9ybUJ1ZmZlclByb2Nlc3NvcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBwcm9jZXNzb3IuZW5kT2ZVbmlmb3JtQnVmZmVyUHJvY2Vzc29yKHRoaXMubGlu
ZSwgb3B0aW9ucy5pc0ZyYWdtZW50LCBvcHRpb25zLnByb2Nlc3NpbmdDb250ZXh0KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJlc3VsdCArPSB2YWx1ZSArICJcclxuIjsKKyAgICAgICAgfQorICAgICAgICB0aGlz
LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7CisgICAgICAgICAgICByZXN1bHQg
Kz0gY2hpbGQucHJvY2VzcyhwcmVwcm9jZXNzb3JzLCBvcHRpb25zKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIGlmICh0aGlzLmFkZGl0aW9uYWxEZWZpbmVLZXkpIHsKKyAgICAgICAgICAgIHByZXBy
b2Nlc3NvcnNbdGhpcy5hZGRpdGlvbmFsRGVmaW5lS2V5XSA9IHRoaXMuYWRkaXRpb25hbERlZmlu
ZVZhbHVlIHx8ICJ0cnVlIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07CisgICAgcmV0dXJuIFNoYWRlckNvZGVOb2RlOworfSgpKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9FbmdpbmVzL1Byb2Nlc3NvcnMvc2hhZGVyQ29kZVRlc3ROb2RlLnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9FbmdpbmVzL1Byb2Nlc3NvcnMvc2hhZGVyQ29kZVRlc3ROb2RlLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFNoYWRlckNvZGVUZXN0Tm9kZSAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTaGFkZXJDb2RlVGVzdE5vZGUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIFNoYWRlckNvZGVUZXN0Tm9kZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3NoYWRlckNvZGVOb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NoYWRlckNvZGVOb2RlICovICIuL0Vu
Z2luZXMvUHJvY2Vzc29ycy9zaGFkZXJDb2RlTm9kZS50cyIpOworCisKKy8qKiBAaGlkZGVuICov
Cit2YXIgU2hhZGVyQ29kZVRlc3ROb2RlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBl
cikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJd
KFNoYWRlckNvZGVUZXN0Tm9kZSwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBTaGFkZXJDb2RlVGVz
dE5vZGUoKSB7CisgICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpczsKKyAgICB9CisgICAgU2hhZGVyQ29kZVRlc3ROb2Rl
LnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24gKHByZXByb2Nlc3NvcnMpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMudGVzdEV4cHJlc3Npb24uaXNUcnVlKHByZXByb2Nlc3NvcnMpOworICAgIH07
CisgICAgcmV0dXJuIFNoYWRlckNvZGVUZXN0Tm9kZTsKK30oX3NoYWRlckNvZGVOb2RlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNoYWRlckNvZGVOb2RlIl0pKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9FbmdpbmVzL1Byb2Nlc3NvcnMvc2hhZGVyUHJvY2Vzc29yLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9FbmdpbmVzL1Byb2Nlc3NvcnMvc2hhZGVyUHJvY2Vzc29yLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFNoYWRlclByb2Nlc3NvciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTaGFkZXJQcm9jZXNzb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNoYWRlclBy
b2Nlc3NvcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NoYWRlckNvZGVOb2RlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3No
YWRlckNvZGVOb2RlICovICIuL0VuZ2luZXMvUHJvY2Vzc29ycy9zaGFkZXJDb2RlTm9kZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zaGFkZXJDb2RlQ3Vyc29yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NoYWRlckNvZGVD
dXJzb3IgKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL3NoYWRlckNvZGVDdXJzb3IudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2hhZGVyQ29kZUNvbmRpdGlvbk5vZGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2hhZGVyQ29k
ZUNvbmRpdGlvbk5vZGUgKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL3NoYWRlckNvZGVDb25kaXRp
b25Ob2RlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NoYWRlckNvZGVUZXN0Tm9k
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9zaGFkZXJDb2RlVGVzdE5vZGUgKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL3NoYWRlckNvZGVU
ZXN0Tm9kZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FeHByZXNzaW9uc19PcGVy
YXRvcnNfc2hhZGVyRGVmaW5lSXNEZWZpbmVkT3BlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vRXhwcmVzc2lvbnMvT3BlcmF0b3Jz
L3NoYWRlckRlZmluZUlzRGVmaW5lZE9wZXJhdG9yICovICIuL0VuZ2luZXMvUHJvY2Vzc29ycy9F
eHByZXNzaW9ucy9PcGVyYXRvcnMvc2hhZGVyRGVmaW5lSXNEZWZpbmVkT3BlcmF0b3IudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXhwcmVzc2lvbnNfT3BlcmF0b3JzX3NoYWRlckRl
ZmluZU9yT3BlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vRXhwcmVzc2lvbnMvT3BlcmF0b3JzL3NoYWRlckRlZmluZU9yT3BlcmF0
b3IgKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL0V4cHJlc3Npb25zL09wZXJhdG9ycy9zaGFkZXJE
ZWZpbmVPck9wZXJhdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0V4cHJlc3Np
b25zX09wZXJhdG9yc19zaGFkZXJEZWZpbmVBbmRPcGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9FeHByZXNzaW9ucy9PcGVyYXRv
cnMvc2hhZGVyRGVmaW5lQW5kT3BlcmF0b3IgKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL0V4cHJl
c3Npb25zL09wZXJhdG9ycy9zaGFkZXJEZWZpbmVBbmRPcGVyYXRvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9FeHByZXNzaW9uc19PcGVyYXRvcnNfc2hhZGVyRGVmaW5lQXJpdGht
ZXRpY09wZXJhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL0V4cHJlc3Npb25zL09wZXJhdG9ycy9zaGFkZXJEZWZpbmVBcml0aG1ldGlj
T3BlcmF0b3IgKi8gIi4vRW5naW5lcy9Qcm9jZXNzb3JzL0V4cHJlc3Npb25zL09wZXJhdG9ycy9z
aGFkZXJEZWZpbmVBcml0aG1ldGljT3BlcmF0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWlzY19maWxlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZmlsZVRvb2xzICovICIuL01pc2MvZmlsZVRv
b2xzLnRzIik7CisKKworCisKKworCisKKworCisvKiogQGhpZGRlbiAqLwordmFyIFNoYWRlclBy
b2Nlc3NvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBTaGFk
ZXJQcm9jZXNzb3IoKSB7CisgICAgfQorICAgIFNoYWRlclByb2Nlc3Nvci5Qcm9jZXNzID0gZnVu
Y3Rpb24gKHNvdXJjZUNvZGUsIG9wdGlvbnMsIGNhbGxiYWNrKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIHRoaXMuX1Byb2Nlc3NJbmNsdWRlcyhzb3VyY2VDb2RlLCBvcHRp
b25zLCBmdW5jdGlvbiAoY29kZVdpdGhJbmNsdWRlcykgeworICAgICAgICAgICAgdmFyIG1pZ3Jh
dGVkQ29kZSA9IF90aGlzLl9Qcm9jZXNzU2hhZGVyQ29udmVyc2lvbihjb2RlV2l0aEluY2x1ZGVz
LCBvcHRpb25zKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKG1pZ3JhdGVkQ29kZSk7CisgICAgICAg
IH0pOworICAgIH07CisgICAgU2hhZGVyUHJvY2Vzc29yLkZpbmFsaXplID0gZnVuY3Rpb24gKHZl
cnRleENvZGUsIGZyYWdtZW50Q29kZSwgb3B0aW9ucykgeworICAgICAgICBpZiAoIW9wdGlvbnMu
cHJvY2Vzc29yIHx8ICFvcHRpb25zLnByb2Nlc3Nvci5maW5hbGl6ZVNoYWRlcnMpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7IHZlcnRleENvZGU6IHZlcnRleENvZGUsIGZyYWdtZW50Q29kZTogZnJh
Z21lbnRDb2RlIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9wdGlvbnMucHJvY2Vzc29y
LmZpbmFsaXplU2hhZGVycyh2ZXJ0ZXhDb2RlLCBmcmFnbWVudENvZGUsIG9wdGlvbnMucHJvY2Vz
c2luZ0NvbnRleHQpOworICAgIH07CisgICAgU2hhZGVyUHJvY2Vzc29yLl9Qcm9jZXNzUHJlY2lz
aW9uID0gZnVuY3Rpb24gKHNvdXJjZSwgb3B0aW9ucykgeworICAgICAgICB2YXIgc2hvdWxkVXNl
SGlnaFByZWNpc2lvblNoYWRlciA9IG9wdGlvbnMuc2hvdWxkVXNlSGlnaFByZWNpc2lvblNoYWRl
cjsKKyAgICAgICAgaWYgKHNvdXJjZS5pbmRleE9mKCJwcmVjaXNpb24gaGlnaHAgZmxvYXQiKSA9
PT0gLTEpIHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkVXNlSGlnaFByZWNpc2lvblNoYWRlcikg
eworICAgICAgICAgICAgICAgIHNvdXJjZSA9ICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIg
KyBzb3VyY2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzb3VyY2UgPSAicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuIiArIHNvdXJjZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICghc2hv
dWxkVXNlSGlnaFByZWNpc2lvblNoYWRlcikgeyAvLyBNb3ZpbmcgaGlnaHAgdG8gbWVkaXVtcAor
ICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5yZXBsYWNlKCJwcmVjaXNpb24gaGlnaHAg
ZmxvYXQiLCAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gc291cmNlOworICAgIH07CisgICAgU2hhZGVyUHJvY2Vzc29y
Ll9FeHRyYWN0T3BlcmF0aW9uID0gZnVuY3Rpb24gKGV4cHJlc3Npb24pIHsKKyAgICAgICAgdmFy
IHJlZ2V4ID0gL2RlZmluZWRcKCguKylcKS87CisgICAgICAgIHZhciBtYXRjaCA9IHJlZ2V4LmV4
ZWMoZXhwcmVzc2lvbik7CisgICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaC5sZW5ndGgpIHsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgX0V4cHJlc3Npb25zX09wZXJhdG9yc19zaGFkZXJEZWZpbmVJ
c0RlZmluZWRPcGVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTaGFkZXJEZWZp
bmVJc0RlZmluZWRPcGVyYXRvciJdKG1hdGNoWzFdLnRyaW0oKSwgZXhwcmVzc2lvblswXSA9PT0g
IiEiKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgb3BlcmF0b3JzID0gWyI9PSIsICI+PSIsICI8
PSIsICI8IiwgIj4iXTsKKyAgICAgICAgdmFyIG9wZXJhdG9yID0gIiI7CisgICAgICAgIHZhciBp
bmRleE9wZXJhdG9yID0gMDsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBvcGVyYXRvcnNfMSA9
IG9wZXJhdG9yczsgX2kgPCBvcGVyYXRvcnNfMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAg
IG9wZXJhdG9yID0gb3BlcmF0b3JzXzFbX2ldOworICAgICAgICAgICAgaW5kZXhPcGVyYXRvciA9
IGV4cHJlc3Npb24uaW5kZXhPZihvcGVyYXRvcik7CisgICAgICAgICAgICBpZiAoaW5kZXhPcGVy
YXRvciA+IC0xKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGluZGV4T3BlcmF0b3IgPT09IC0xKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IF9FeHByZXNzaW9uc19PcGVyYXRvcnNfc2hhZGVyRGVmaW5lSXNEZWZpbmVkT3Bl
cmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2hhZGVyRGVmaW5lSXNEZWZpbmVk
T3BlcmF0b3IiXShleHByZXNzaW9uKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZGVmaW5lID0g
ZXhwcmVzc2lvbi5zdWJzdHJpbmcoMCwgaW5kZXhPcGVyYXRvcikudHJpbSgpOworICAgICAgICB2
YXIgdmFsdWUgPSBleHByZXNzaW9uLnN1YnN0cmluZyhpbmRleE9wZXJhdG9yICsgb3BlcmF0b3Iu
bGVuZ3RoKS50cmltKCk7CisgICAgICAgIHJldHVybiBuZXcgX0V4cHJlc3Npb25zX09wZXJhdG9y
c19zaGFkZXJEZWZpbmVBcml0aG1ldGljT3BlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzdfX1siU2hhZGVyRGVmaW5lQXJpdGhtZXRpY09wZXJhdG9yIl0oZGVmaW5lLCBvcGVyYXRvciwg
dmFsdWUpOworICAgIH07CisgICAgU2hhZGVyUHJvY2Vzc29yLl9CdWlsZFN1YkV4cHJlc3Npb24g
PSBmdW5jdGlvbiAoZXhwcmVzc2lvbikgeworICAgICAgICB2YXIgaW5kZXhPciA9IGV4cHJlc3Np
b24uaW5kZXhPZigifHwiKTsKKyAgICAgICAgaWYgKGluZGV4T3IgPT09IC0xKSB7CisgICAgICAg
ICAgICB2YXIgaW5kZXhBbmQgPSBleHByZXNzaW9uLmluZGV4T2YoIiYmIik7CisgICAgICAgICAg
ICBpZiAoaW5kZXhBbmQgPiAtMSkgeworICAgICAgICAgICAgICAgIHZhciBhbmRPcGVyYXRvciA9
IG5ldyBfRXhwcmVzc2lvbnNfT3BlcmF0b3JzX3NoYWRlckRlZmluZUFuZE9wZXJhdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNoYWRlckRlZmluZUFuZE9wZXJhdG9yIl0oKTsKKyAg
ICAgICAgICAgICAgICB2YXIgbGVmdFBhcnQgPSBleHByZXNzaW9uLnN1YnN0cmluZygwLCBpbmRl
eEFuZCkudHJpbSgpOworICAgICAgICAgICAgICAgIHZhciByaWdodFBhcnQgPSBleHByZXNzaW9u
LnN1YnN0cmluZyhpbmRleEFuZCArIDIpLnRyaW0oKTsKKyAgICAgICAgICAgICAgICBhbmRPcGVy
YXRvci5sZWZ0T3BlcmFuZCA9IHRoaXMuX0J1aWxkU3ViRXhwcmVzc2lvbihsZWZ0UGFydCk7Cisg
ICAgICAgICAgICAgICAgYW5kT3BlcmF0b3IucmlnaHRPcGVyYW5kID0gdGhpcy5fQnVpbGRTdWJF
eHByZXNzaW9uKHJpZ2h0UGFydCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFuZE9wZXJhdG9y
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX0V4dHJhY3RPcGVyYXRpb24oZXhwcmVzc2lvbik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgb3JPcGVyYXRvciA9IG5l
dyBfRXhwcmVzc2lvbnNfT3BlcmF0b3JzX3NoYWRlckRlZmluZU9yT3BlcmF0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siU2hhZGVyRGVmaW5lT3JPcGVyYXRvciJdKCk7CisgICAgICAg
ICAgICB2YXIgbGVmdFBhcnQgPSBleHByZXNzaW9uLnN1YnN0cmluZygwLCBpbmRleE9yKS50cmlt
KCk7CisgICAgICAgICAgICB2YXIgcmlnaHRQYXJ0ID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcoaW5k
ZXhPciArIDIpLnRyaW0oKTsKKyAgICAgICAgICAgIG9yT3BlcmF0b3IubGVmdE9wZXJhbmQgPSB0
aGlzLl9CdWlsZFN1YkV4cHJlc3Npb24obGVmdFBhcnQpOworICAgICAgICAgICAgb3JPcGVyYXRv
ci5yaWdodE9wZXJhbmQgPSB0aGlzLl9CdWlsZFN1YkV4cHJlc3Npb24ocmlnaHRQYXJ0KTsKKyAg
ICAgICAgICAgIHJldHVybiBvck9wZXJhdG9yOworICAgICAgICB9CisgICAgfTsKKyAgICBTaGFk
ZXJQcm9jZXNzb3IuX0J1aWxkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChsaW5lLCBzdGFydCkgewor
ICAgICAgICB2YXIgbm9kZSA9IG5ldyBfc2hhZGVyQ29kZVRlc3ROb2RlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlNoYWRlckNvZGVUZXN0Tm9kZSJdKCk7CisgICAgICAgIHZhciBjb21t
YW5kID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnQpOworICAgICAgICB2YXIgZXhwcmVzc2lvbiA9
IGxpbmUuc3Vic3RyaW5nKHN0YXJ0KS50cmltKCk7CisgICAgICAgIGlmIChjb21tYW5kID09PSAi
I2lmZGVmIikgeworICAgICAgICAgICAgbm9kZS50ZXN0RXhwcmVzc2lvbiA9IG5ldyBfRXhwcmVz
c2lvbnNfT3BlcmF0b3JzX3NoYWRlckRlZmluZUlzRGVmaW5lZE9wZXJhdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlNoYWRlckRlZmluZUlzRGVmaW5lZE9wZXJhdG9yIl0oZXhwcmVz
c2lvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29tbWFuZCA9PT0gIiNpZm5kZWYi
KSB7CisgICAgICAgICAgICBub2RlLnRlc3RFeHByZXNzaW9uID0gbmV3IF9FeHByZXNzaW9uc19P
cGVyYXRvcnNfc2hhZGVyRGVmaW5lSXNEZWZpbmVkT3BlcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siU2hhZGVyRGVmaW5lSXNEZWZpbmVkT3BlcmF0b3IiXShleHByZXNzaW9uLCB0
cnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5vZGUudGVzdEV4
cHJlc3Npb24gPSB0aGlzLl9CdWlsZFN1YkV4cHJlc3Npb24oZXhwcmVzc2lvbik7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfTsKKyAgICBTaGFkZXJQcm9jZXNzb3IuX01v
dmVDdXJzb3JXaXRoaW5JZiA9IGZ1bmN0aW9uIChjdXJzb3IsIHJvb3ROb2RlLCBpZk5vZGUpIHsK
KyAgICAgICAgdmFyIGxpbmUgPSBjdXJzb3IuY3VycmVudExpbmU7CisgICAgICAgIHdoaWxlICh0
aGlzLl9Nb3ZlQ3Vyc29yKGN1cnNvciwgaWZOb2RlKSkgeworICAgICAgICAgICAgbGluZSA9IGN1
cnNvci5jdXJyZW50TGluZTsKKyAgICAgICAgICAgIHZhciBmaXJzdDUgPSBsaW5lLnN1YnN0cmlu
ZygwLCA1KS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgaWYgKGZpcnN0NSA9PT0gIiNlbHNl
IikgeworICAgICAgICAgICAgICAgIHZhciBlbHNlTm9kZSA9IG5ldyBfc2hhZGVyQ29kZU5vZGVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2hhZGVyQ29kZU5vZGUiXSgpOworICAgICAg
ICAgICAgICAgIHJvb3ROb2RlLmNoaWxkcmVuLnB1c2goZWxzZU5vZGUpOworICAgICAgICAgICAg
ICAgIHRoaXMuX01vdmVDdXJzb3IoY3Vyc29yLCBlbHNlTm9kZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3Q1ID09PSAi
I2VsaWYiKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsaWZOb2RlID0gdGhpcy5fQnVpbGRFeHBy
ZXNzaW9uKGxpbmUsIDUpOworICAgICAgICAgICAgICAgIHJvb3ROb2RlLmNoaWxkcmVuLnB1c2go
ZWxpZk5vZGUpOworICAgICAgICAgICAgICAgIGlmTm9kZSA9IGVsaWZOb2RlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBTaGFkZXJQcm9jZXNzb3IuX01vdmVDdXJzb3Ig
PSBmdW5jdGlvbiAoY3Vyc29yLCByb290Tm9kZSkgeworICAgICAgICB3aGlsZSAoY3Vyc29yLmNh
blJlYWQpIHsKKyAgICAgICAgICAgIGN1cnNvci5saW5lSW5kZXgrKzsKKyAgICAgICAgICAgIHZh
ciBsaW5lID0gY3Vyc29yLmN1cnJlbnRMaW5lOworICAgICAgICAgICAgdmFyIGtleXdvcmRzID0g
LygjaWZkZWYpfCgjZWxzZSl8KCNlbGlmKXwoI2VuZGlmKXwoI2lmbmRlZil8KCNpZikvOworICAg
ICAgICAgICAgdmFyIG1hdGNoZXMgPSBrZXl3b3Jkcy5leGVjKGxpbmUpOworICAgICAgICAgICAg
aWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB2YXIga2V5
d29yZCA9IG1hdGNoZXNbMF07CisgICAgICAgICAgICAgICAgc3dpdGNoIChrZXl3b3JkKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgIiNpZmRlZiI6IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBuZXdSb290Tm9kZSA9IG5ldyBfc2hhZGVyQ29kZUNvbmRpdGlvbk5vZGVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2hhZGVyQ29kZUNvbmRpdGlvbk5vZGUiXSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcm9vdE5vZGUuY2hpbGRyZW4ucHVzaChuZXdSb290Tm9kZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWZOb2RlID0gdGhpcy5fQnVpbGRFeHByZXNz
aW9uKGxpbmUsIDYpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Um9vdE5vZGUuY2hpbGRy
ZW4ucHVzaChpZk5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fTW92ZUN1cnNv
cldpdGhpbklmKGN1cnNvciwgbmV3Um9vdE5vZGUsIGlmTm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBjYXNlICIjZWxzZSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiNlbGlmIjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICBjYXNl
ICIjZW5kaWYiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBjYXNlICIjaWZuZGVmIjogeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG5ld1Jvb3ROb2RlID0gbmV3IF9zaGFkZXJDb2RlQ29uZGl0aW9uTm9kZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJTaGFkZXJDb2RlQ29uZGl0aW9uTm9kZSJdKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByb290Tm9kZS5jaGlsZHJlbi5wdXNoKG5ld1Jvb3ROb2RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBpZk5vZGUgPSB0aGlzLl9CdWlsZEV4cHJlc3Npb24o
bGluZSwgNyk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdSb290Tm9kZS5jaGlsZHJlbi5w
dXNoKGlmTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9Nb3ZlQ3Vyc29yV2l0
aGluSWYoY3Vyc29yLCBuZXdSb290Tm9kZSwgaWZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgIiNpZiI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdSb290Tm9kZSA9IG5l
dyBfc2hhZGVyQ29kZUNvbmRpdGlvbk5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
U2hhZGVyQ29kZUNvbmRpdGlvbk5vZGUiXSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGlmTm9kZSA9IHRoaXMuX0J1aWxkRXhwcmVzc2lvbihsaW5lLCAzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJvb3ROb2RlLmNoaWxkcmVuLnB1c2gobmV3Um9vdE5vZGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3Um9vdE5vZGUuY2hpbGRyZW4ucHVzaChpZk5vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fTW92ZUN1cnNvcldpdGhpbklmKGN1cnNvciwgbmV3Um9v
dE5vZGUsIGlmTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gbmV3IF9zaGFkZXJDb2Rl
Tm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTaGFkZXJDb2RlTm9kZSJdKCk7Cisg
ICAgICAgICAgICAgICAgbmV3Tm9kZS5saW5lID0gbGluZTsKKyAgICAgICAgICAgICAgICByb290
Tm9kZS5jaGlsZHJlbi5wdXNoKG5ld05vZGUpOworICAgICAgICAgICAgICAgIC8vIERldGVjdCBh
ZGRpdGlvbmFsIGRlZmluZXMKKyAgICAgICAgICAgICAgICBpZiAobGluZVswXSA9PT0gIiMiICYm
IGxpbmVbMV0gPT09ICJkIikgeworICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXQgPSBsaW5l
LnJlcGxhY2UoIjsiLCAiIikuc3BsaXQoIiAiKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Tm9k
ZS5hZGRpdGlvbmFsRGVmaW5lS2V5ID0gc3BsaXRbMV07CisgICAgICAgICAgICAgICAgICAgIGlm
IChzcGxpdC5sZW5ndGggPT09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUu
YWRkaXRpb25hbERlZmluZVZhbHVlID0gc3BsaXRbMl07CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CisgICAgU2hhZGVyUHJvY2Vzc29yLl9FdmFsdWF0ZVByZVByb2Nl
c3NvcnMgPSBmdW5jdGlvbiAoc291cmNlQ29kZSwgcHJlcHJvY2Vzc29ycywgb3B0aW9ucykgewor
ICAgICAgICB2YXIgcm9vdE5vZGUgPSBuZXcgX3NoYWRlckNvZGVOb2RlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlNoYWRlckNvZGVOb2RlIl0oKTsKKyAgICAgICAgdmFyIGN1cnNvciA9
IG5ldyBfc2hhZGVyQ29kZUN1cnNvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTaGFk
ZXJDb2RlQ3Vyc29yIl0oKTsKKyAgICAgICAgY3Vyc29yLmxpbmVJbmRleCA9IC0xOworICAgICAg
ICBjdXJzb3IubGluZXMgPSBzb3VyY2VDb2RlLnNwbGl0KCJcbiIpOworICAgICAgICAvLyBEZWNv
bXBvc2UgKFdlIGtlZXAgaXQgaW4gMiBzdGVwcyBzbyBpdCBpcyBlYXNpZXIgdG8gbWFpbnRhaW4g
YW5kIHBlcmYgaGl0IGlzIGluc2lnbmlmaWNhbnQpCisgICAgICAgIHRoaXMuX01vdmVDdXJzb3Io
Y3Vyc29yLCByb290Tm9kZSk7CisgICAgICAgIC8vIFJlY29tcG9zZQorICAgICAgICByZXR1cm4g
cm9vdE5vZGUucHJvY2VzcyhwcmVwcm9jZXNzb3JzLCBvcHRpb25zKTsKKyAgICB9OworICAgIFNo
YWRlclByb2Nlc3Nvci5fUHJlcGFyZVByZVByb2Nlc3NvcnMgPSBmdW5jdGlvbiAob3B0aW9ucykg
eworICAgICAgICB2YXIgZGVmaW5lcyA9IG9wdGlvbnMuZGVmaW5lczsKKyAgICAgICAgdmFyIHBy
ZXByb2Nlc3NvcnMgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBkZWZpbmVzXzEgPSBk
ZWZpbmVzOyBfaSA8IGRlZmluZXNfMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBk
ZWZpbmUgPSBkZWZpbmVzXzFbX2ldOworICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZGVmaW5l
LnJlcGxhY2UoIiNkZWZpbmUiLCAiIikucmVwbGFjZSgiOyIsICIiKS50cmltKCk7CisgICAgICAg
ICAgICB2YXIgc3BsaXQgPSBrZXlWYWx1ZS5zcGxpdCgiICIpOworICAgICAgICAgICAgcHJlcHJv
Y2Vzc29yc1tzcGxpdFswXV0gPSBzcGxpdC5sZW5ndGggPiAxID8gc3BsaXRbMV0gOiAiIjsKKyAg
ICAgICAgfQorICAgICAgICBwcmVwcm9jZXNzb3JzWyJHTF9FUyJdID0gInRydWUiOworICAgICAg
ICBwcmVwcm9jZXNzb3JzWyJfX1ZFUlNJT05fXyJdID0gb3B0aW9ucy52ZXJzaW9uOworICAgICAg
ICBwcmVwcm9jZXNzb3JzW29wdGlvbnMucGxhdGZvcm1OYW1lXSA9ICJ0cnVlIjsKKyAgICAgICAg
cmV0dXJuIHByZXByb2Nlc3NvcnM7CisgICAgfTsKKyAgICBTaGFkZXJQcm9jZXNzb3IuX1Byb2Nl
c3NTaGFkZXJDb252ZXJzaW9uID0gZnVuY3Rpb24gKHNvdXJjZUNvZGUsIG9wdGlvbnMpIHsKKyAg
ICAgICAgdmFyIHByZXBhcmVkU291cmNlQ29kZSA9IHRoaXMuX1Byb2Nlc3NQcmVjaXNpb24oc291
cmNlQ29kZSwgb3B0aW9ucyk7CisgICAgICAgIGlmICghb3B0aW9ucy5wcm9jZXNzb3IpIHsKKyAg
ICAgICAgICAgIHJldHVybiBwcmVwYXJlZFNvdXJjZUNvZGU7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQWxyZWFkeSBjb252ZXJ0ZWQKKyAgICAgICAgaWYgKHByZXBhcmVkU291cmNlQ29kZS5pbmRl
eE9mKCIjdmVyc2lvbiAzIikgIT09IC0xKSB7CisgICAgICAgICAgICByZXR1cm4gcHJlcGFyZWRT
b3VyY2VDb2RlLnJlcGxhY2UoIiN2ZXJzaW9uIDMwMCBlcyIsICIiKTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgZGVmaW5lcyA9IG9wdGlvbnMuZGVmaW5lczsKKyAgICAgICAgdmFyIHByZXByb2Nl
c3NvcnMgPSB0aGlzLl9QcmVwYXJlUHJlUHJvY2Vzc29ycyhvcHRpb25zKTsKKyAgICAgICAgLy8g
R2VuZXJhbCBwcmUgcHJvY2Vzc2luZworICAgICAgICBpZiAob3B0aW9ucy5wcm9jZXNzb3IucHJl
UHJvY2Vzc29yKSB7CisgICAgICAgICAgICBwcmVwYXJlZFNvdXJjZUNvZGUgPSBvcHRpb25zLnBy
b2Nlc3Nvci5wcmVQcm9jZXNzb3IocHJlcGFyZWRTb3VyY2VDb2RlLCBkZWZpbmVzLCBvcHRpb25z
LmlzRnJhZ21lbnQsIG9wdGlvbnMucHJvY2Vzc2luZ0NvbnRleHQpOworICAgICAgICB9CisgICAg
ICAgIHByZXBhcmVkU291cmNlQ29kZSA9IHRoaXMuX0V2YWx1YXRlUHJlUHJvY2Vzc29ycyhwcmVw
YXJlZFNvdXJjZUNvZGUsIHByZXByb2Nlc3NvcnMsIG9wdGlvbnMpOworICAgICAgICAvLyBQb3N0
IHByb2Nlc3NpbmcKKyAgICAgICAgaWYgKG9wdGlvbnMucHJvY2Vzc29yLnBvc3RQcm9jZXNzb3Ip
IHsKKyAgICAgICAgICAgIHByZXBhcmVkU291cmNlQ29kZSA9IG9wdGlvbnMucHJvY2Vzc29yLnBv
c3RQcm9jZXNzb3IocHJlcGFyZWRTb3VyY2VDb2RlLCBkZWZpbmVzLCBvcHRpb25zLmlzRnJhZ21l
bnQsIG9wdGlvbnMucHJvY2Vzc2luZ0NvbnRleHQpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBwcmVwYXJlZFNvdXJjZUNvZGU7CisgICAgfTsKKyAgICBTaGFkZXJQcm9jZXNzb3IuX1Byb2Nl
c3NJbmNsdWRlcyA9IGZ1bmN0aW9uIChzb3VyY2VDb2RlLCBvcHRpb25zLCBjYWxsYmFjaykgewor
ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgcmVnZXggPSAvI2luY2x1ZGU8
KC4rKT4oXCgoLiopXCkpKihcWyguKilcXSkqL2c7CisgICAgICAgIHZhciBtYXRjaCA9IHJlZ2V4
LmV4ZWMoc291cmNlQ29kZSk7CisgICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG5ldyBTdHJpbmco
c291cmNlQ29kZSk7CisgICAgICAgIHdoaWxlIChtYXRjaCAhPSBudWxsKSB7CisgICAgICAgICAg
ICB2YXIgaW5jbHVkZUZpbGUgPSBtYXRjaFsxXTsKKyAgICAgICAgICAgIC8vIFVuaWZvcm0gZGVj
bGFyYXRpb24KKyAgICAgICAgICAgIGlmIChpbmNsdWRlRmlsZS5pbmRleE9mKCJfX2RlY2xfXyIp
ICE9PSAtMSkgeworICAgICAgICAgICAgICAgIGluY2x1ZGVGaWxlID0gaW5jbHVkZUZpbGUucmVw
bGFjZSgvX19kZWNsX18vLCAiIik7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3VwcG9y
dHNVbmlmb3JtQnVmZmVycykgeworICAgICAgICAgICAgICAgICAgICBpbmNsdWRlRmlsZSA9IGlu
Y2x1ZGVGaWxlLnJlcGxhY2UoL1ZlcnRleC8sICJVYm8iKTsKKyAgICAgICAgICAgICAgICAgICAg
aW5jbHVkZUZpbGUgPSBpbmNsdWRlRmlsZS5yZXBsYWNlKC9GcmFnbWVudC8sICJVYm8iKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5jbHVkZUZpbGUgPSBpbmNsdWRlRmls
ZSArICJEZWNsYXJhdGlvbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3B0aW9u
cy5pbmNsdWRlc1NoYWRlcnNTdG9yZVtpbmNsdWRlRmlsZV0pIHsKKyAgICAgICAgICAgICAgICAv
LyBTdWJzdGl0dXRpb24KKyAgICAgICAgICAgICAgICB2YXIgaW5jbHVkZUNvbnRlbnQgPSBvcHRp
b25zLmluY2x1ZGVzU2hhZGVyc1N0b3JlW2luY2x1ZGVGaWxlXTsKKyAgICAgICAgICAgICAgICBp
ZiAobWF0Y2hbMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNwbGl0cyA9IG1hdGNoWzNd
LnNwbGl0KCIsIik7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBzcGxpdHMubGVuZ3RoOyBpbmRleCArPSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgc291cmNlID0gbmV3IFJlZ0V4cChzcGxpdHNbaW5kZXhdLCAiZyIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGRlc3QgPSBzcGxpdHNbaW5kZXggKyAxXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluY2x1ZGVDb250ZW50ID0gaW5jbHVkZUNvbnRlbnQucmVwbGFjZShzb3Vy
Y2UsIGRlc3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChtYXRjaFs0XSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgaW5k
ZXhTdHJpbmcgPSBtYXRjaFs1XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4U3RyaW5n
LmluZGV4T2YoIi4uIikgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5k
ZXhTcGxpdHMgPSBpbmRleFN0cmluZy5zcGxpdCgiLi4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBtaW5JbmRleCA9IHBhcnNlSW50KGluZGV4U3BsaXRzWzBdKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBtYXhJbmRleCA9IHBhcnNlSW50KGluZGV4U3BsaXRzWzFdKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VJbmNsdWRlQ29udGVudCA9IGluY2x1ZGVD
b250ZW50LnNsaWNlKDApOworICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZUNvbnRlbnQg
PSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihtYXhJbmRleCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG9wdGlvbnMuaW5kZXhQYXJhbWV0
ZXJzW2luZGV4U3BsaXRzWzFdXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBtaW5JbmRleDsgaSA8IG1heEluZGV4OyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuc3VwcG9ydHNVbmlm
b3JtQnVmZmVycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVYm8gcmVw
bGFjZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSW5jbHVkZUNv
bnRlbnQgPSBzb3VyY2VJbmNsdWRlQ29udGVudC5yZXBsYWNlKC9saWdodFx7WFx9LihcdyopL2cs
IGZ1bmN0aW9uIChzdHIsIHAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcDEgKyAie1h9IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluY2x1ZGVDb250ZW50ICs9IHNvdXJjZUluY2x1ZGVDb250ZW50LnJlcGxhY2UoL1x7WFx9
L2csIGkudG9TdHJpbmcoKSkgKyAiXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN1cHBvcnRzVW5pZm9ybUJ1ZmZlcnMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVYm8gcmVwbGFjZW1lbnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmNsdWRlQ29udGVudCA9IGluY2x1ZGVDb250ZW50LnJlcGxhY2Uo
L2xpZ2h0XHtYXH0uKFx3KikvZywgZnVuY3Rpb24gKHN0ciwgcDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxICsgIntYfSI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNsdWRlQ29udGVudCA9IGluY2x1ZGVDb250ZW50LnJlcGxhY2UoL1x7WFx9L2cs
IGluZGV4U3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyBSZXBsYWNlCisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUg
PSByZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoWzBdLCBpbmNsdWRlQ29udGVudCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgaW5jbHVkZVNo
YWRlclVybCA9IG9wdGlvbnMuc2hhZGVyc1JlcG9zaXRvcnkgKyAiU2hhZGVyc0luY2x1ZGUvIiAr
IGluY2x1ZGVGaWxlICsgIi5meCI7CisgICAgICAgICAgICAgICAgX01pc2NfZmlsZVRvb2xzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkZpbGVUb29scyJdLkxvYWRGaWxlKGluY2x1ZGVT
aGFkZXJVcmwsIGZ1bmN0aW9uIChmaWxlQ29udGVudCkgeworICAgICAgICAgICAgICAgICAgICBv
cHRpb25zLmluY2x1ZGVzU2hhZGVyc1N0b3JlW2luY2x1ZGVGaWxlXSA9IGZpbGVDb250ZW50Owor
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5fUHJvY2Vzc0luY2x1ZGVzKHJldHVyblZhbHVlLCBv
cHRpb25zLCBjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2ggPSByZWdleC5leGVjKHNv
dXJjZUNvZGUpOworICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKHJldHVyblZhbHVlKTsKKyAg
ICB9OworICAgIHJldHVybiBTaGFkZXJQcm9jZXNzb3I7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL0VuZ2luZXMvV2ViR0wvd2ViR0wyU2hhZGVyUHJvY2Vzc29ycy50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9FbmdpbmVzL1dlYkdML3dlYkdMMlNoYWRlclByb2Nlc3NvcnMudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBXZWJHTDJTaGFkZXJQcm9jZXNzb3IgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViR0wyU2hhZGVyUHJvY2Vzc29yIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBXZWJHTDJTaGFkZXJQcm9jZXNzb3I7IH0pOworLyoqIEBoaWRkZW4gKi8KK3ZhciBX
ZWJHTDJTaGFkZXJQcm9jZXNzb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
ZnVuY3Rpb24gV2ViR0wyU2hhZGVyUHJvY2Vzc29yKCkgeworICAgIH0KKyAgICBXZWJHTDJTaGFk
ZXJQcm9jZXNzb3IucHJvdG90eXBlLmF0dHJpYnV0ZVByb2Nlc3NvciA9IGZ1bmN0aW9uIChhdHRy
aWJ1dGUpIHsKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS5yZXBsYWNlKCJhdHRyaWJ1dGUiLCAi
aW4iKTsKKyAgICB9OworICAgIFdlYkdMMlNoYWRlclByb2Nlc3Nvci5wcm90b3R5cGUudmFyeWlu
Z1Byb2Nlc3NvciA9IGZ1bmN0aW9uICh2YXJ5aW5nLCBpc0ZyYWdtZW50KSB7CisgICAgICAgIHJl
dHVybiB2YXJ5aW5nLnJlcGxhY2UoInZhcnlpbmciLCBpc0ZyYWdtZW50ID8gImluIiA6ICJvdXQi
KTsKKyAgICB9OworICAgIFdlYkdMMlNoYWRlclByb2Nlc3Nvci5wcm90b3R5cGUucG9zdFByb2Nl
c3NvciA9IGZ1bmN0aW9uIChjb2RlLCBkZWZpbmVzLCBpc0ZyYWdtZW50KSB7CisgICAgICAgIHZh
ciBoYXNEcmF3QnVmZmVyc0V4dGVuc2lvbiA9IGNvZGUuc2VhcmNoKC8jZXh0ZW5zaW9uLitHTF9F
WFRfZHJhd19idWZmZXJzLityZXF1aXJlLykgIT09IC0xOworICAgICAgICAvLyBSZW1vdmUgZXh0
ZW5zaW9ucworICAgICAgICB2YXIgcmVnZXggPSAvI2V4dGVuc2lvbi4rKEdMX09WUl9tdWx0aXZp
ZXcyfEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlc3xHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9k
fEdMX0VYVF9mcmFnX2RlcHRofEdMX0VYVF9kcmF3X2J1ZmZlcnMpLisoZW5hYmxlfHJlcXVpcmUp
L2c7CisgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UocmVnZXgsICIiKTsKKyAgICAgICAgLy8g
UmVwbGFjZSBpbnN0cnVjdGlvbnMKKyAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgvdGV4dHVy
ZTJEXHMqXCgvZywgInRleHR1cmUoIik7CisgICAgICAgIGlmIChpc0ZyYWdtZW50KSB7CisgICAg
ICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC90ZXh0dXJlMkRMb2RFWFRccypcKC9nLCAidGV4
dHVyZUxvZCgiKTsKKyAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL3RleHR1cmVDdWJl
TG9kRVhUXHMqXCgvZywgInRleHR1cmVMb2QoIik7CisgICAgICAgICAgICBjb2RlID0gY29kZS5y
ZXBsYWNlKC90ZXh0dXJlQ3ViZVxzKlwoL2csICJ0ZXh0dXJlKCIpOworICAgICAgICAgICAgY29k
ZSA9IGNvZGUucmVwbGFjZSgvZ2xfRnJhZ0RlcHRoRVhUL2csICJnbF9GcmFnRGVwdGgiKTsKKyAg
ICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL2dsX0ZyYWdDb2xvci9nLCAiZ2xGcmFnQ29s
b3IiKTsKKyAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL2dsX0ZyYWdEYXRhL2csICJn
bEZyYWdEYXRhIik7CisgICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC92b2lkXHMrP21h
aW5ccypcKC9nLCAoaGFzRHJhd0J1ZmZlcnNFeHRlbnNpb24gPyAiIiA6ICJvdXQgdmVjNCBnbEZy
YWdDb2xvcjtcbiIpICsgInZvaWQgbWFpbigiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHZhciBoYXNNdWx0aXZpZXdFeHRlbnNpb24gPSBkZWZpbmVzLmluZGV4T2Yo
IiNkZWZpbmUgTVVMVElWSUVXIikgIT09IC0xOworICAgICAgICAgICAgaWYgKGhhc011bHRpdmll
d0V4dGVuc2lvbikgeworICAgICAgICAgICAgICAgIHJldHVybiAiI2V4dGVuc2lvbiBHTF9PVlJf
bXVsdGl2aWV3MiA6IHJlcXVpcmVcbmxheW91dCAobnVtX3ZpZXdzID0gMikgaW47XG4iICsgY29k
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29kZTsKKyAgICB9
OworICAgIHJldHVybiBXZWJHTDJTaGFkZXJQcm9jZXNzb3I7Cit9KCkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL0VuZ2luZXMvV2ViR0wvd2ViR0xQaXBlbGluZUNvbnRleHQudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL0VuZ2luZXMvV2ViR0wvd2ViR0xQaXBlbGluZUNvbnRleHQudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogV2ViR0xQaXBlbGluZUNvbnRleHQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiV2ViR0xQaXBlbGluZUNvbnRleHQiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFdlYkdMUGlwZWxpbmVDb250ZXh0OyB9KTsKKy8qKiBAaGlkZGVuICovCit2YXIgV2ViR0xQaXBl
bGluZUNvbnRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24g
V2ViR0xQaXBlbGluZUNvbnRleHQoKSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGUgPSB7fTsK
KyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYkdMUGlwZWxpbmVDb250ZXh0LnBy
b3RvdHlwZSwgImlzQXN5bmMiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuaXNQYXJhbGxlbENvbXBpbGVkOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBl
LCAiaXNSZWFkeSIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5wcm9ncmFtKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQYXJhbGxlbENv
bXBpbGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuZ2luZS5faXNSZW5k
ZXJpbmdTdGF0ZUNvbXBpbGVkKHRoaXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBl
Ll9oYW5kbGVzU3BlY3RvclJlYnVpbGRDYWxsYmFjayA9IGZ1bmN0aW9uIChvbkNvbXBpbGVkKSB7
CisgICAgICAgIGlmIChvbkNvbXBpbGVkICYmIHRoaXMucHJvZ3JhbSkgeworICAgICAgICAgICAg
b25Db21waWxlZCh0aGlzLnByb2dyYW0pOworICAgICAgICB9CisgICAgfTsKKyAgICBXZWJHTFBp
cGVsaW5lQ29udGV4dC5wcm90b3R5cGUuX2ZpbGxFZmZlY3RJbmZvcm1hdGlvbiA9IGZ1bmN0aW9u
IChlZmZlY3QsIHVuaWZvcm1CdWZmZXJzTmFtZXMsIHVuaWZvcm1zTmFtZXMsIHVuaWZvcm1zLCBz
YW1wbGVyTGlzdCwgc2FtcGxlcnMsIGF0dHJpYnV0ZXNOYW1lcywgYXR0cmlidXRlcykgeworICAg
ICAgICB2YXIgZW5naW5lID0gdGhpcy5lbmdpbmU7CisgICAgICAgIGlmIChlbmdpbmUuc3VwcG9y
dHNVbmlmb3JtQnVmZmVycykgeworICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB1bmlmb3Jt
QnVmZmVyc05hbWVzKSB7CisgICAgICAgICAgICAgICAgZWZmZWN0LmJpbmRVbmlmb3JtQmxvY2so
bmFtZSwgdW5pZm9ybUJ1ZmZlcnNOYW1lc1tuYW1lXSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGVmZmVjdEF2YWlsYWJsZVVuaWZvcm1zID0gdGhpcy5lbmdpbmUuZ2V0
VW5pZm9ybXModGhpcywgdW5pZm9ybXNOYW1lcyk7CisgICAgICAgIGVmZmVjdEF2YWlsYWJsZVVu
aWZvcm1zLmZvckVhY2goZnVuY3Rpb24gKHVuaWZvcm0sIGluZGV4KSB7CisgICAgICAgICAgICB1
bmlmb3Jtc1t1bmlmb3Jtc05hbWVzW2luZGV4XV0gPSB1bmlmb3JtOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy5fdW5pZm9ybXMgPSB1bmlmb3JtczsKKyAgICAgICAgdmFyIGluZGV4OworICAg
ICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzYW1wbGVyTGlzdC5sZW5ndGg7IGluZGV4Kysp
IHsKKyAgICAgICAgICAgIHZhciBzYW1wbGVyID0gZWZmZWN0LmdldFVuaWZvcm0oc2FtcGxlckxp
c3RbaW5kZXhdKTsKKyAgICAgICAgICAgIGlmIChzYW1wbGVyID09IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICBzYW1wbGVyTGlzdC5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgICAgIGlu
ZGV4LS07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2FtcGxlckxpc3QuZm9y
RWFjaChmdW5jdGlvbiAobmFtZSwgaW5kZXgpIHsKKyAgICAgICAgICAgIHNhbXBsZXJzW25hbWVd
ID0gaW5kZXg7CisgICAgICAgIH0pOworICAgICAgICBhdHRyaWJ1dGVzLnB1c2guYXBwbHkoYXR0
cmlidXRlcywgZW5naW5lLmdldEF0dHJpYnV0ZXModGhpcywgYXR0cmlidXRlc05hbWVzKSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4K
KyAgICAgKiovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLmRpc3Bvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3VuaWZvcm1zID0ge307CisgICAgfTsKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIFdlYkdMUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5fY2FjaGVN
YXRyaXggPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIG1hdHJpeCkgeworICAgICAgICB2YXIgY2Fj
aGUgPSB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXTsKKyAgICAgICAgdmFyIGZsYWcgPSBt
YXRyaXgudXBkYXRlRmxhZzsKKyAgICAgICAgaWYgKGNhY2hlICE9PSB1bmRlZmluZWQgJiYgY2Fj
aGUgPT09IGZsYWcpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXSA9IGZsYWc7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBXZWJHTFBpcGVsaW5lQ29u
dGV4dC5wcm90b3R5cGUuX2NhY2hlRmxvYXQyID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB4LCB5
KSB7CisgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdOwor
ICAgICAgICBpZiAoIWNhY2hlKSB7CisgICAgICAgICAgICBjYWNoZSA9IFt4LCB5XTsKKyAgICAg
ICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gY2FjaGU7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICBpZiAoY2FjaGVbMF0gIT09IHgpIHsKKyAgICAgICAgICAgIGNhY2hlWzBdID0geDsK
KyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChjYWNo
ZVsxXSAhPT0geSkgeworICAgICAgICAgICAgY2FjaGVbMV0gPSB5OworICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIFdlYkdMUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5f
Y2FjaGVGbG9hdDMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIHgsIHksIHopIHsKKyAgICAgICAg
dmFyIGNhY2hlID0gdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV07CisgICAgICAgIGlmICgh
Y2FjaGUpIHsKKyAgICAgICAgICAgIGNhY2hlID0gW3gsIHksIHpdOworICAgICAgICAgICAgdGhp
cy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBjYWNoZTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGlm
IChjYWNoZVswXSAhPT0geCkgeworICAgICAgICAgICAgY2FjaGVbMF0gPSB4OworICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhY2hlWzFdICE9PSB5
KSB7CisgICAgICAgICAgICBjYWNoZVsxXSA9IHk7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FjaGVbMl0gIT09IHopIHsKKyAgICAgICAgICAg
IGNhY2hlWzJdID0gejsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBX
ZWJHTFBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuX2NhY2hlRmxvYXQ0ID0gZnVuY3Rpb24gKHVu
aWZvcm1OYW1lLCB4LCB5LCB6LCB3KSB7CisgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX3ZhbHVl
Q2FjaGVbdW5pZm9ybU5hbWVdOworICAgICAgICBpZiAoIWNhY2hlKSB7CisgICAgICAgICAgICBj
YWNoZSA9IFt4LCB5LCB6LCB3XTsKKyAgICAgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9y
bU5hbWVdID0gY2FjaGU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBpZiAoY2FjaGVbMF0gIT09IHgpIHsK
KyAgICAgICAgICAgIGNhY2hlWzBdID0geDsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChjYWNoZVsxXSAhPT0geSkgeworICAgICAgICAgICAgY2Fj
aGVbMV0gPSB5OworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNhY2hlWzJdICE9PSB6KSB7CisgICAgICAgICAgICBjYWNoZVsyXSA9IHo7CisgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FjaGVbM10g
IT09IHcpIHsKKyAgICAgICAgICAgIGNhY2hlWzNdID0gdzsKKyAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH07CisgICAg
LyoqCisgICAgICogU2V0cyBhbiBpbnRlcmdlciB2YWx1ZSBvbiBhIHVuaWZvcm0gdmFyaWFibGUu
CisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAq
IEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGlu
ZUNvbnRleHQucHJvdG90eXBlLnNldEludCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgdmFsdWUp
IHsKKyAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV07Cisg
ICAgICAgIGlmIChjYWNoZSAhPT0gdW5kZWZpbmVkICYmIGNhY2hlID09PSB2YWx1ZSkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5p
Zm9ybU5hbWVdID0gdmFsdWU7CisgICAgICAgIHRoaXMuZW5naW5lLnNldEludCh0aGlzLl91bmlm
b3Jtc1t1bmlmb3JtTmFtZV0sIHZhbHVlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMg
YW4gaW50IGFycmF5IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9y
bU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5IHRv
IGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHTFBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0
SW50QXJyYXkgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMu
X3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0
SW50QXJyYXkodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTZXRzIGFuIGludCBhcnJheSAyIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4g
KEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIsMyw0XSB3aWxsIHJl
c3VsdCBpbiBbWzEsMl0sWzMsNF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZv
cm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0
byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNl
dEludEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhp
cy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVuZ2luZS5z
ZXRJbnRBcnJheTIodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGludCBhcnJheSAzIG9uIGEgdW5pZm9ybSB2YXJpYWJs
ZS4gKEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIsMyw0LDUsNl0g
d2lsbCByZXN1bHQgaW4gW1sxLDIsM10sWzQsNSw2XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBA
cGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFy
cmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHTFBpcGVsaW5lQ29udGV4dC5w
cm90b3R5cGUuc2V0SW50QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgewor
ICAgICAgICB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXSA9IG51bGw7CisgICAgICAgIHRo
aXMuZW5naW5lLnNldEludEFycmF5Myh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIGFycmF5
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYW4gaW50IGFycmF5IDQgb24gYSB1bmlm
b3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEs
MiwzLDQsNSw2LDcsOF0gd2lsbCByZXN1bHQgaW4gW1sxLDIsMyw0XSxbNSw2LDcsOF1dIGluIHRo
ZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxl
LgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisgICAgV2Vi
R0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEludEFycmF5NCA9IGZ1bmN0aW9uICh1bmlm
b3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0g
PSBudWxsOworICAgICAgICB0aGlzLmVuZ2luZS5zZXRJbnRBcnJheTQodGhpcy5fdW5pZm9ybXNb
dW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGZs
b2F0IGFycmF5IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5h
bWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5IHRvIGJl
IHNldC4KKyAgICAgKi8KKyAgICBXZWJHTFBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0Rmxv
YXRBcnJheSA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhpcy5f
dmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVuZ2luZS5zZXRG
bG9hdEFycmF5KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgYXJyYXkpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU2V0cyBhbiBmbG9hdCBhcnJheSAyIG9uIGEgdW5pZm9ybSB2YXJpYWJs
ZS4gKEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIsMyw0XSB3aWxs
IHJlc3VsdCBpbiBbWzEsMl0sWzMsNF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVu
aWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJh
eSB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBl
LnNldEZsb2F0QXJyYXkyID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAg
ICB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXSA9IG51bGw7CisgICAgICAgIHRoaXMuZW5n
aW5lLnNldEZsb2F0QXJyYXkyKHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgYXJyYXkpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBmbG9hdCBhcnJheSAzIG9uIGEgdW5pZm9y
bSB2YXJpYWJsZS4gKEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIs
Myw0LDUsNl0gd2lsbCByZXN1bHQgaW4gW1sxLDIsM10sWzQsNSw2XV0gaW4gdGhlIHNoYWRlcikK
KyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICog
QHBhcmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHTFBpcGVsaW5l
Q29udGV4dC5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUs
IGFycmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsK
KyAgICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXRBcnJheTModGhpcy5fdW5pZm9ybXNbdW5pZm9y
bU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGZsb2F0IGFy
cmF5IDQgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmds
ZSBhcnJheSBlZy4gWzEsMiwzLDQsNSw2LDcsOF0gd2lsbCByZXN1bHQgaW4gW1sxLDIsMyw0XSxb
NSw2LDcsOF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUg
b2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisg
ICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEZsb2F0QXJyYXk0
ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aGlzLl92YWx1ZUNh
Y2hlW3VuaWZvcm1OYW1lXSA9IG51bGw7CisgICAgICAgIHRoaXMuZW5naW5lLnNldEZsb2F0QXJy
YXk0KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgYXJyYXkpOworICAgIH07CisgICAgLyoq
CisgICAgICogU2V0cyBhbiBhcnJheSBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBh
cmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJh
eSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJv
dG90eXBlLnNldEFycmF5ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAg
ICB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXSA9IG51bGw7CisgICAgICAgIHRoaXMuZW5n
aW5lLnNldEFycmF5KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgYXJyYXkpOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0cyBhbiBhcnJheSAyIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4g
KEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIsMyw0XSB3aWxsIHJl
c3VsdCBpbiBbWzEsMl0sWzMsNF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZv
cm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0
byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNl
dEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhpcy5f
dmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVuZ2luZS5zZXRB
cnJheTIodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIGFuIGFycmF5IDMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkg
aXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDQsNSw2XSB3aWxsIHJlc3Vs
dCBpbiBbWzEsMiwzXSxbNCw1LDZdXSBpbiB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlm
b3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkg
dG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIFdl
YkdMUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9y
bU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0g
bnVsbDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0QXJyYXkzKHRoaXMuX3VuaWZvcm1zW3VuaWZv
cm1OYW1lXSwgYXJyYXkpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBhcnJheSA0
IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4gKEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJy
YXkgZWcuIFsxLDIsMyw0LDUsNiw3LDhdIHdpbGwgcmVzdWx0IGluIFtbMSwyLDMsNF0sWzUsNiw3
LDhdXSBpbiB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRo
ZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAq
LworICAgIFdlYkdMUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRBcnJheTQgPSBmdW5jdGlv
biAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9y
bU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0QXJyYXk0KHRoaXMuX3VuaWZv
cm1zW3VuaWZvcm1OYW1lXSwgYXJyYXkpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBt
YXRyaWNlcyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1l
IE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBtYXRyaWNlcyBtYXRyaWNlcyB0
byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNl
dE1hdHJpY2VzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBtYXRyaWNlcykgeworICAgICAgICBp
ZiAoIW1hdHJpY2VzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVuZ2lu
ZS5zZXRNYXRyaWNlcyh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIG1hdHJpY2VzKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNldHMgbWF0cml4IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4K
KyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICog
QHBhcmFtIG1hdHJpeCBtYXRyaXggdG8gYmUgc2V0LgorICAgICAqLworICAgIFdlYkdMUGlwZWxp
bmVDb250ZXh0LnByb3RvdHlwZS5zZXRNYXRyaXggPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIG1h
dHJpeCkgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVNYXRyaXgodW5pZm9ybU5hbWUsIG1hdHJp
eCkpIHsKKyAgICAgICAgICAgIHRoaXMuZW5naW5lLnNldE1hdHJpY2VzKHRoaXMuX3VuaWZvcm1z
W3VuaWZvcm1OYW1lXSwgbWF0cml4LnRvQXJyYXkoKSk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHMgYSAzeDMgbWF0cml4IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4gKFNw
ZWljaWZpZWQgYXMgWzEsMiwzLDQsNSw2LDcsOCw5XSB3aWxsIHJlc3VsdCBpbiBbMSwyLDNdWzQs
NSw2XVs3LDgsOV0gbWF0cml4KQorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRo
ZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gbWF0cml4IG1hdHJpeCB0byBiZSBzZXQuCisgICAg
ICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldE1hdHJpeDN4MyA9IGZ1
bmN0aW9uICh1bmlmb3JtTmFtZSwgbWF0cml4KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVb
dW5pZm9ybU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0TWF0cml4M3gzKHRo
aXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgbWF0cml4KTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldHMgYSAyeDIgbWF0cml4IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4gKFNwZWljaWZpZWQg
YXMgWzEsMiwzLDRdIHdpbGwgcmVzdWx0IGluIFsxLDJdWzMsNF0gbWF0cml4KQorICAgICAqIEBw
YXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gbWF0
cml4IG1hdHJpeCB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQu
cHJvdG90eXBlLnNldE1hdHJpeDJ4MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgbWF0cml4KSB7
CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsKKyAgICAgICAg
dGhpcy5lbmdpbmUuc2V0TWF0cml4MngyKHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgbWF0
cml4KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYSBmbG9hdCBvbiBhIHVuaWZvcm0g
dmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxl
LgorICAgICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBiZSBzZXQuCisgICAgICogQHJldHVybnMg
dGhpcyBlZmZlY3QuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBl
LnNldEZsb2F0ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB2YWx1ZSkgeworICAgICAgICB2YXIg
Y2FjaGUgPSB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXTsKKyAgICAgICAgaWYgKGNhY2hl
ICE9PSB1bmRlZmluZWQgJiYgY2FjaGUgPT09IHZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSB2YWx1
ZTsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXQodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5h
bWVdLCB2YWx1ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgYm9vbGVhbiBvbiBh
IHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhl
IHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBib29sIHZhbHVlIHRvIGJlIHNldC4KKyAgICAgKi8K
KyAgICBXZWJHTFBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0Qm9vbCA9IGZ1bmN0aW9uICh1
bmlmb3JtTmFtZSwgYm9vbCkgeworICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl92YWx1ZUNhY2hl
W3VuaWZvcm1OYW1lXTsKKyAgICAgICAgaWYgKGNhY2hlICE9PSB1bmRlZmluZWQgJiYgY2FjaGUg
PT09IGJvb2wpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXSA9IGJvb2w7CisgICAgICAgIHRoaXMuZW5naW5lLnNl
dEJvb2wodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBib29sID8gMSA6IDApOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0cyBhIFZlY3RvcjIgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgor
ICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBA
cGFyYW0gdmVjdG9yMiB2ZWN0b3IyIHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHTFBpcGVs
aW5lQ29udGV4dC5wcm90b3R5cGUuc2V0VmVjdG9yMiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwg
dmVjdG9yMikgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDIodW5pZm9ybU5hbWUsIHZl
Y3RvcjIueCwgdmVjdG9yMi55KSkgeworICAgICAgICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXQy
KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgdmVjdG9yMi54LCB2ZWN0b3IyLnkpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgZmxvYXQyIG9uIGEgdW5pZm9y
bSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFi
bGUuCisgICAgICogQHBhcmFtIHggRmlyc3QgZmxvYXQgaW4gZmxvYXQyLgorICAgICAqIEBwYXJh
bSB5IFNlY29uZCBmbG9hdCBpbiBmbG9hdDIuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNv
bnRleHQucHJvdG90eXBlLnNldEZsb2F0MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgeCwgeSkg
eworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDIodW5pZm9ybU5hbWUsIHgsIHkpKSB7Cisg
ICAgICAgICAgICB0aGlzLmVuZ2luZS5zZXRGbG9hdDIodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5h
bWVdLCB4LCB5KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIFZl
Y3RvcjMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBO
YW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdmVjdG9yMyBWYWx1ZSB0byBiZSBz
ZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldFZlY3Rv
cjMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIHZlY3RvcjMpIHsKKyAgICAgICAgaWYgKHRoaXMu
X2NhY2hlRmxvYXQzKHVuaWZvcm1OYW1lLCB2ZWN0b3IzLngsIHZlY3RvcjMueSwgdmVjdG9yMy56
KSkgeworICAgICAgICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXQzKHRoaXMuX3VuaWZvcm1zW3Vu
aWZvcm1OYW1lXSwgdmVjdG9yMy54LCB2ZWN0b3IzLnksIHZlY3RvcjMueik7CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYSBmbG9hdDMgb24gYSB1bmlmb3JtIHZhcmlh
YmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAg
ICAgKiBAcGFyYW0geCBGaXJzdCBmbG9hdCBpbiBmbG9hdDMuCisgICAgICogQHBhcmFtIHkgU2Vj
b25kIGZsb2F0IGluIGZsb2F0My4KKyAgICAgKiBAcGFyYW0geiBUaGlyZCBmbG9hdCBpbiBmbG9h
dDMuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEZsb2F0
MyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgeCwgeSwgeikgeworICAgICAgICBpZiAodGhpcy5f
Y2FjaGVGbG9hdDModW5pZm9ybU5hbWUsIHgsIHksIHopKSB7CisgICAgICAgICAgICB0aGlzLmVu
Z2luZS5zZXRGbG9hdDModGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCB4LCB5LCB6KTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIFZlY3RvcjQgb24gYSB1bmlm
b3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJp
YWJsZS4KKyAgICAgKiBAcGFyYW0gdmVjdG9yNCBWYWx1ZSB0byBiZSBzZXQuCisgICAgICovCisg
ICAgV2ViR0xQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldFZlY3RvcjQgPSBmdW5jdGlvbiAo
dW5pZm9ybU5hbWUsIHZlY3RvcjQpIHsKKyAgICAgICAgaWYgKHRoaXMuX2NhY2hlRmxvYXQ0KHVu
aWZvcm1OYW1lLCB2ZWN0b3I0LngsIHZlY3RvcjQueSwgdmVjdG9yNC56LCB2ZWN0b3I0LncpKSB7
CisgICAgICAgICAgICB0aGlzLmVuZ2luZS5zZXRGbG9hdDQodGhpcy5fdW5pZm9ybXNbdW5pZm9y
bU5hbWVdLCB2ZWN0b3I0LngsIHZlY3RvcjQueSwgdmVjdG9yNC56LCB2ZWN0b3I0LncpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgZmxvYXQ0IG9uIGEgdW5pZm9y
bSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFi
bGUuCisgICAgICogQHBhcmFtIHggRmlyc3QgZmxvYXQgaW4gZmxvYXQ0LgorICAgICAqIEBwYXJh
bSB5IFNlY29uZCBmbG9hdCBpbiBmbG9hdDQuCisgICAgICogQHBhcmFtIHogVGhpcmQgZmxvYXQg
aW4gZmxvYXQ0LgorICAgICAqIEBwYXJhbSB3IEZvdXJ0aCBmbG9hdCBpbiBmbG9hdDQuCisgICAg
ICogQHJldHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNvbnRl
eHQucHJvdG90eXBlLnNldEZsb2F0NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgeCwgeSwgeiwg
dykgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDQodW5pZm9ybU5hbWUsIHgsIHksIHos
IHcpKSB7CisgICAgICAgICAgICB0aGlzLmVuZ2luZS5zZXRGbG9hdDQodGhpcy5fdW5pZm9ybXNb
dW5pZm9ybU5hbWVdLCB4LCB5LCB6LCB3KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0cyBhIENvbG9yMyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFt
IHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBjb2xvcjMg
VmFsdWUgdG8gYmUgc2V0LgorICAgICAqLworICAgIFdlYkdMUGlwZWxpbmVDb250ZXh0LnByb3Rv
dHlwZS5zZXRDb2xvcjMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGNvbG9yMykgeworICAgICAg
ICBpZiAodGhpcy5fY2FjaGVGbG9hdDModW5pZm9ybU5hbWUsIGNvbG9yMy5yLCBjb2xvcjMuZywg
Y29sb3IzLmIpKSB7CisgICAgICAgICAgICB0aGlzLmVuZ2luZS5zZXRGbG9hdDModGhpcy5fdW5p
Zm9ybXNbdW5pZm9ybU5hbWVdLCBjb2xvcjMuciwgY29sb3IzLmcsIGNvbG9yMy5iKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIENvbG9yNCBvbiBhIHVuaWZvcm0g
dmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxl
LgorICAgICAqIEBwYXJhbSBjb2xvcjMgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSBh
bHBoYSBBbHBoYSB2YWx1ZSB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR0xQaXBlbGluZUNv
bnRleHQucHJvdG90eXBlLnNldENvbG9yNCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgY29sb3Iz
LCBhbHBoYSkgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDQodW5pZm9ybU5hbWUsIGNv
bG9yMy5yLCBjb2xvcjMuZywgY29sb3IzLmIsIGFscGhhKSkgeworICAgICAgICAgICAgdGhpcy5l
bmdpbmUuc2V0RmxvYXQ0KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgY29sb3IzLnIsIGNv
bG9yMy5nLCBjb2xvcjMuYiwgYWxwaGEpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXRzIGEgQ29sb3I0IG9uIGEgdW5pZm9ybSB2YXJpYWJsZQorICAgICAqIEBwYXJhbSB1
bmlmb3JtTmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZQorICAgICAqIEBwYXJh
bSBjb2xvcjQgZGVmaW5lcyB0aGUgdmFsdWUgdG8gYmUgc2V0CisgICAgICovCisgICAgV2ViR0xQ
aXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldERpcmVjdENvbG9yNCA9IGZ1bmN0aW9uICh1bmlm
b3JtTmFtZSwgY29sb3I0KSB7CisgICAgICAgIGlmICh0aGlzLl9jYWNoZUZsb2F0NCh1bmlmb3Jt
TmFtZSwgY29sb3I0LnIsIGNvbG9yNC5nLCBjb2xvcjQuYiwgY29sb3I0LmEpKSB7CisgICAgICAg
ICAgICB0aGlzLmVuZ2luZS5zZXREaXJlY3RDb2xvcjQodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5h
bWVdLCBjb2xvcjQpOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gV2ViR0xQaXBlbGlu
ZUNvbnRleHQ7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMvV2Vi
R1BVL3dlYmdwdUNvbnN0YW50cy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9FbmdpbmVzL1dlYkdQVS93ZWJncHVDb25zdGFu
dHMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBXZWJHUFVDb25zdGFudHMgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViR1BVQ29uc3RhbnRzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBXZWJHUFVDb25zdGFudHM7IH0pOworLyoqIEBoaWRkZW4gKi8KK3ZhciBXZWJHUFVDb25z
dGFudHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gV2ViR1BV
Q29uc3RhbnRzKCkgeworICAgIH0KKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQ3VsbE1vZGVfbm9u
ZSA9ICJub25lIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQ3VsbE1vZGVfZnJvbnQgPSAiZnJv
bnQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVDdWxsTW9kZV9iYWNrID0gImJhY2siOworICAg
IFdlYkdQVUNvbnN0YW50cy5HUFVGcm9udEZhY2VfY2N3ID0gImNjdyI7CisgICAgV2ViR1BVQ29u
c3RhbnRzLkdQVUZyb250RmFjZV9jdyA9ICJjdyI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUlu
ZGV4Rm9ybWF0X3VpbnQxNiA9ICJ1aW50MTYiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVJbmRl
eEZvcm1hdF91aW50MzIgPSAidWludDMyIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVTG9hZE9w
X2xvYWQgPSAibG9hZCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVN0b3JlT3Bfc3RvcmUgPSAi
c3RvcmUiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVTdG9yZU9wX2NsZWFyID0gImNsZWFyIjsK
KyAgICBXZWJHUFVDb25zdGFudHMuR1BVUHJpbWl0aXZlVG9wb2xvZ3lfcG9pbnRMaXN0ID0gInBv
aW50LWxpc3QiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVQcmltaXRpdmVUb3BvbG9neV9saW5l
TGlzdCA9ICJsaW5lLWxpc3QiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVQcmltaXRpdmVUb3Bv
bG9neV9saW5lU3RyaXAgPSAibGluZS1zdHJpcCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVBy
aW1pdGl2ZVRvcG9sb2d5X3RyaWFuZ2xlTGlzdCA9ICJ0cmlhbmdsZS1saXN0IjsKKyAgICBXZWJH
UFVDb25zdGFudHMuR1BVUHJpbWl0aXZlVG9wb2xvZ3lfdHJpYW5nbGVTdHJpcCA9ICJ0cmlhbmds
ZS1zdHJpcCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVEaW1lbnNpb25fMWQgPSAi
MWQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRGltZW5zaW9uXzJkID0gIjJkIjsK
KyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZURpbWVuc2lvbl8zZCA9ICIzZCI7CisgICAg
LyogTm9ybWFsIDggYml0IGZvcm1hdHMgKi8KKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVy
ZUZvcm1hdF9yOHVub3JtID0gInI4dW5vcm0iOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0
dXJlRm9ybWF0X3I4c25vcm0gPSAicjhzbm9ybSI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRl
eHR1cmVGb3JtYXRfcjh1aW50ID0gInI4dWludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRl
eHR1cmVGb3JtYXRfcjhzaW50ID0gInI4c2ludCI7CisgICAgLyogTm9ybWFsIDE2IGJpdCBmb3Jt
YXRzICovCisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRfcjE2dWludCA9ICJy
MTZ1aW50IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUZvcm1hdF9yMTZzaW50ID0g
InIxNnNpbnQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3IxNmZsb2F0
ID0gInIxNmZsb2F0IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUZvcm1hdF9yZzh1
bm9ybSA9ICJyZzh1bm9ybSI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRf
cmc4c25vcm0gPSAicmc4c25vcm0iOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9y
bWF0X3JnOHVpbnQgPSAicmc4dWludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVG
b3JtYXRfcmc4c2ludCA9ICJyZzhzaW50IjsKKyAgICAvKiBOb3JtYWwgMzIgYml0IGZvcm1hdHMg
Ki8KKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUZvcm1hdF9yMzJ1aW50ID0gInIzMnVp
bnQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3IzMnNpbnQgPSAicjMy
c2ludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRfcjMyZmxvYXQgPSAi
cjMyZmxvYXQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3JnMTZ1aW50
ID0gInJnMTZ1aW50IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUZvcm1hdF9yZzE2
c2ludCA9ICJyZzE2c2ludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRf
cmcxNmZsb2F0ID0gInJnMTZmbG9hdCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVG
b3JtYXRfcmdiYTh1bm9ybSA9ICJyZ2JhOHVub3JtIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BV
VGV4dHVyZUZvcm1hdF9yZ2JhOHVub3JtU3JnYiA9ICJyZ2JhOHVub3JtLXNyZ2IiOworICAgIFdl
YkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3JnYmE4c25vcm0gPSAicmdiYThzbm9ybSI7
CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRfcmdiYTh1aW50ID0gInJnYmE4
dWludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRfcmdiYThzaW50ID0g
InJnYmE4c2ludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRfYmdyYTh1
bm9ybSA9ICJiZ3JhOHVub3JtIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUZvcm1h
dF9iZ3JhOHVub3JtU3JnYiA9ICJiZ3JhOHVub3JtLXNyZ2IiOworICAgIC8qIFBhY2tlZCAzMiBi
aXQgZm9ybWF0cyAqLworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3JnYjEw
YTJ1bm9ybSA9ICJyZ2IxMGEydW5vcm0iOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJl
Rm9ybWF0X3JnMTFiMTBmbG9hdCA9ICJyZzExYjEwZmxvYXQiOworICAgIC8qIE5vcm1hbCA2NCBi
aXQgZm9ybWF0cyAqLworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3JnMzJ1
aW50ID0gInJnMzJ1aW50IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUZvcm1hdF9y
ZzMyc2ludCA9ICJyZzMyc2ludCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3Jt
YXRfcmczMmZsb2F0ID0gInJnMzJmbG9hdCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1
cmVGb3JtYXRfcmdiYTE2dWludCA9ICJyZ2JhMTZ1aW50IjsKKyAgICBXZWJHUFVDb25zdGFudHMu
R1BVVGV4dHVyZUZvcm1hdF9yZ2JhMTZzaW50ID0gInJnYmExNnNpbnQiOworICAgIFdlYkdQVUNv
bnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3JnYmExNmZsb2F0ID0gInJnYmExNmZsb2F0IjsKKyAg
ICAvKiBOb3JtYWwgMTI4IGJpdCBmb3JtYXRzICovCisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRl
eHR1cmVGb3JtYXRfcmdiYTMydWludCA9ICJyZ2JhMzJ1aW50IjsKKyAgICBXZWJHUFVDb25zdGFu
dHMuR1BVVGV4dHVyZUZvcm1hdF9yZ2JhMzJzaW50ID0gInJnYmEzMnNpbnQiOworICAgIFdlYkdQ
VUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X3JnYmEzMmZsb2F0ID0gInJnYmEzMmZsb2F0IjsK
KyAgICAvKiBEZXB0aCBhbmQgU3RlbmNpbCBmb3JtYXRzICovCisgICAgV2ViR1BVQ29uc3RhbnRz
LkdQVVRleHR1cmVGb3JtYXRfZGVwdGgzMmZsb2F0ID0gImRlcHRoMzJmbG9hdCI7CisgICAgV2Vi
R1BVQ29uc3RhbnRzLkdQVVRleHR1cmVGb3JtYXRfZGVwdGgyNHBsdXMgPSAiZGVwdGgyNHBsdXMi
OworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlRm9ybWF0X2RlcHRoMjRwbHVzU3RlbmNp
bDggPSAiZGVwdGgyNHBsdXMtc3RlbmNpbDgiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0
dXJlVmlld0RpbWVuc2lvbl8xZCA9ICIxZCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1
cmVWaWV3RGltZW5zaW9uXzJkID0gIjJkIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVy
ZVZpZXdEaW1lbnNpb25fMmRBcnJheSA9ICIyZC1hcnJheSI7CisgICAgV2ViR1BVQ29uc3RhbnRz
LkdQVVRleHR1cmVWaWV3RGltZW5zaW9uX2N1YmUgPSAiY3ViZSI7CisgICAgV2ViR1BVQ29uc3Rh
bnRzLkdQVVRleHR1cmVWaWV3RGltZW5zaW9uX2N1YmVBcnJheSA9ICJjdWJlLWFycmF5IjsKKyAg
ICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fM2QgPSAiM2QiOworICAg
IFdlYkdQVUNvbnN0YW50cy5HUFVQb3dlclByZWZlcmVuY2VfbG93UG93ZXIgPSAibG93LXBvd2Vy
IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVUG93ZXJQcmVmZXJlbmNlX2hpZ2hQZXJmb3JtYW5j
ZSA9ICJoaWdoLXBlcmZvcm1hbmNlIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVydGV4Rm9y
bWF0X3VjaGFyMiA9ICJ1Y2hhcjIiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVWZXJ0ZXhGb3Jt
YXRfdWNoYXI0ID0gInVjaGFyNCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1h
dF9jaGFyMiA9ICJjaGFyMiI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF9j
aGFyNCA9ICJjaGFyNCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF91Y2hh
cjJub3JtID0gInVjaGFyMm5vcm0iOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVWZXJ0ZXhGb3Jt
YXRfdWNoYXI0bm9ybSA9ICJ1Y2hhcjRub3JtIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVy
dGV4Rm9ybWF0X2NoYXIybm9ybSA9ICJjaGFyMm5vcm0iOworICAgIFdlYkdQVUNvbnN0YW50cy5H
UFVWZXJ0ZXhGb3JtYXRfY2hhcjRub3JtID0gImNoYXI0bm9ybSI7CisgICAgV2ViR1BVQ29uc3Rh
bnRzLkdQVVZlcnRleEZvcm1hdF91c2hvcnQyID0gInVzaG9ydDIiOworICAgIFdlYkdQVUNvbnN0
YW50cy5HUFVWZXJ0ZXhGb3JtYXRfdXNob3J0NCA9ICJ1c2hvcnQ0IjsKKyAgICBXZWJHUFVDb25z
dGFudHMuR1BVVmVydGV4Rm9ybWF0X3Nob3J0MiA9ICJzaG9ydDIiOworICAgIFdlYkdQVUNvbnN0
YW50cy5HUFVWZXJ0ZXhGb3JtYXRfc2hvcnQ0ID0gInNob3J0NCI7CisgICAgV2ViR1BVQ29uc3Rh
bnRzLkdQVVZlcnRleEZvcm1hdF91c2hvcnQybm9ybSA9ICJ1c2hvcnQybm9ybSI7CisgICAgV2Vi
R1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF91c2hvcnQ0bm9ybSA9ICJ1c2hvcnQ0bm9ybSI7
CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF9zaG9ydDJub3JtID0gInNob3J0
Mm5vcm0iOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVWZXJ0ZXhGb3JtYXRfc2hvcnQ0bm9ybSA9
ICJzaG9ydDRub3JtIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVydGV4Rm9ybWF0X2hhbGYy
ID0gImhhbGYyIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVydGV4Rm9ybWF0X2hhbGY0ID0g
ImhhbGY0IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVydGV4Rm9ybWF0X2Zsb2F0ID0gImZs
b2F0IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVydGV4Rm9ybWF0X2Zsb2F0MiA9ICJmbG9h
dDIiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVWZXJ0ZXhGb3JtYXRfZmxvYXQzID0gImZsb2F0
MyI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF9mbG9hdDQgPSAiZmxvYXQ0
IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVmVydGV4Rm9ybWF0X3VpbnQgPSAidWludCI7Cisg
ICAgV2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF91aW50MiA9ICJ1aW50MiI7CisgICAg
V2ViR1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF91aW50MyA9ICJ1aW50MyI7CisgICAgV2Vi
R1BVQ29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF91aW50NCA9ICJ1aW50NCI7CisgICAgV2ViR1BV
Q29uc3RhbnRzLkdQVVZlcnRleEZvcm1hdF9pbnQgPSAiaW50IjsKKyAgICBXZWJHUFVDb25zdGFu
dHMuR1BVVmVydGV4Rm9ybWF0X2ludDIgPSAiaW50MiI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQ
VVZlcnRleEZvcm1hdF9pbnQzID0gImludDMiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVWZXJ0
ZXhGb3JtYXRfaW50NCA9ICJpbnQ0IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQnVmZmVyVXNh
Z2VfTk9ORSA9IDA7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJ1ZmZlclVzYWdlX01BUF9SRUFE
ID0gMTsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQnVmZmVyVXNhZ2VfTUFQX1dSSVRFID0gMjsK
KyAgICBXZWJHUFVDb25zdGFudHMuR1BVQnVmZmVyVXNhZ2VfVFJBTlNGRVJfU1JDID0gNDsKKyAg
ICBXZWJHUFVDb25zdGFudHMuR1BVQnVmZmVyVXNhZ2VfVFJBTlNGRVJfRFNUID0gODsKKyAgICBX
ZWJHUFVDb25zdGFudHMuR1BVQnVmZmVyVXNhZ2VfSU5ERVggPSAxNjsKKyAgICBXZWJHUFVDb25z
dGFudHMuR1BVQnVmZmVyVXNhZ2VfVkVSVEVYID0gMzI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQ
VUJ1ZmZlclVzYWdlX1VOSUZPUk0gPSA2NDsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQnVmZmVy
VXNhZ2VfU1RPUkFHRSA9IDEyODsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQ29sb3JXcml0ZUJp
dHNfTk9ORSA9IDA7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUNvbG9yV3JpdGVCaXRzX1JFRCA9
IDE7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUNvbG9yV3JpdGVCaXRzX0dSRUVOID0gMjsKKyAg
ICBXZWJHUFVDb25zdGFudHMuR1BVQ29sb3JXcml0ZUJpdHNfQkxVRSA9IDQ7CisgICAgV2ViR1BV
Q29uc3RhbnRzLkdQVUNvbG9yV3JpdGVCaXRzX0FMUEhBID0gODsKKyAgICBXZWJHUFVDb25zdGFu
dHMuR1BVQ29sb3JXcml0ZUJpdHNfQUxMID0gMTU7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVNo
YWRlclN0YWdlQml0X05PTkUgPSAwOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVTaGFkZXJTdGFn
ZUJpdF9WRVJURVggPSAxOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVTaGFkZXJTdGFnZUJpdF9G
UkFHTUVOVCA9IDI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVNoYWRlclN0YWdlQml0X0NPTVBV
VEUgPSA0OworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlQXNwZWN0X2FsbCA9ICJhbGwi
OworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlQXNwZWN0X2RlcHRoT25seSA9ICJkZXB0
aC1vbmx5IjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVVGV4dHVyZUFzcGVjdF9zdGVuY2lsT25s
eSA9ICJzdGVuY2lsLW9ubHkiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVUZXh0dXJlVXNhZ2Vf
Tk9ORSA9IDA7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVVc2FnZV9DT1BZX1NSQyA9
IDE7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVVc2FnZV9DT1BZX0RTVCA9IDI7Cisg
ICAgV2ViR1BVQ29uc3RhbnRzLkdQVVRleHR1cmVVc2FnZV9TQU1QTEVEID0gNDsKKyAgICBXZWJH
UFVDb25zdGFudHMuR1BVVGV4dHVyZVVzYWdlX1NUT1JBR0UgPSA4OworICAgIFdlYkdQVUNvbnN0
YW50cy5HUFVUZXh0dXJlVXNhZ2VfT1VUUFVUX0FUVEFDSE1FTlQgPSAxNjsKKyAgICBXZWJHUFVD
b25zdGFudHMuR1BVQ29tcGFyZUZ1bmN0aW9uX25ldmVyID0gIm5ldmVyIjsKKyAgICBXZWJHUFVD
b25zdGFudHMuR1BVQ29tcGFyZUZ1bmN0aW9uX2xlc3MgPSAibGVzcyI7CisgICAgV2ViR1BVQ29u
c3RhbnRzLkdQVUNvbXBhcmVGdW5jdGlvbl9lcXVhbCA9ICJlcXVhbCI7CisgICAgV2ViR1BVQ29u
c3RhbnRzLkdQVUNvbXBhcmVGdW5jdGlvbl9sZXNzRXF1YWwgPSAibGVzc0VxdWFsIjsKKyAgICBX
ZWJHUFVDb25zdGFudHMuR1BVQ29tcGFyZUZ1bmN0aW9uX2dyZWF0ZXIgPSAiZ3JlYXRlciI7Cisg
ICAgV2ViR1BVQ29uc3RhbnRzLkdQVUNvbXBhcmVGdW5jdGlvbl9ub3RFcXVhbCA9ICJub3RFcXVh
bCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUNvbXBhcmVGdW5jdGlvbl9ncmVhdGVyRXF1YWwg
PSAiZ3JlYXRlckVxdWFsIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVQ29tcGFyZUZ1bmN0aW9u
X2Fsd2F5cyA9ICJhbHdheXMiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVCaW5kaW5nVHlwZV91
bmlmb3JtQnVmZmVyID0gInVuaWZvcm0tYnVmZmVyIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BV
QmluZGluZ1R5cGVfc2FtcGxlciA9ICJzYW1wbGVyIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BV
QmluZGluZ1R5cGVfc2FtcGxlZFRleHR1cmUgPSAic2FtcGxlZC10ZXh0dXJlIjsKKyAgICBXZWJH
UFVDb25zdGFudHMuR1BVQmluZGluZ1R5cGVfc3RvcmFnZUJ1ZmZlciA9ICJzdG9yYWdlLWJ1ZmZl
ciI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUlucHV0U3RlcE1vZGVfdmVydGV4ID0gInZlcnRl
eCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUlucHV0U3RlcE1vZGVfaW5zdGFuY2UgPSAiaW5z
dGFuY2UiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVTdGVuY2lsT3BlcmF0aW9uX2tlZXAgPSAi
a2VlcCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVVN0ZW5jaWxPcGVyYXRpb25femVybyA9ICJ6
ZXJvIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVU3RlbmNpbE9wZXJhdGlvbl9yZXBsYWNlID0g
InJlcGxhY2UiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVTdGVuY2lsT3BlcmF0aW9uX2ludmVy
dCA9ICJpbnZlcnQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVTdGVuY2lsT3BlcmF0aW9uX2lu
Y3JlbWVudENsYW1wID0gImluY3JlbWVudC1jbGFtcCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQ
VVN0ZW5jaWxPcGVyYXRpb25fZGVjcmVtZW50Q2xhbXAgPSAiZGVjcmVtZW50LWNsYW1wIjsKKyAg
ICBXZWJHUFVDb25zdGFudHMuR1BVU3RlbmNpbE9wZXJhdGlvbl9pbmNyZW1lbnRXcmFwID0gImlu
Y3JlbWVudC13cmFwIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BVU3RlbmNpbE9wZXJhdGlvbl9k
ZWNyZW1lbnRXcmFwID0gImRlY3JlbWVudC13cmFwIjsKKyAgICBXZWJHUFVDb25zdGFudHMuR1BV
RmlsdGVyTW9kZV9uZWFyZXN0ID0gIm5lYXJlc3QiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVG
aWx0ZXJNb2RlX2xpbmVhciA9ICJsaW5lYXIiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVBZGRy
ZXNzTW9kZV9jbGFtcFRvRWRnZSA9ICJjbGFtcC10by1lZGdlIjsKKyAgICBXZWJHUFVDb25zdGFu
dHMuR1BVQWRkcmVzc01vZGVfcmVwZWF0ID0gInJlcGVhdCI7CisgICAgV2ViR1BVQ29uc3RhbnRz
LkdQVUFkZHJlc3NNb2RlX21pcnJvclJlcGVhdCA9ICJtaXJyb3ItcmVwZWF0IjsKKyAgICBXZWJH
UFVDb25zdGFudHMuR1BVQmxlbmRGYWN0b3JfemVybyA9ICJ6ZXJvIjsKKyAgICBXZWJHUFVDb25z
dGFudHMuR1BVQmxlbmRGYWN0b3Jfb25lID0gIm9uZSI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQ
VUJsZW5kRmFjdG9yX3NyY0NvbG9yID0gInNyYy1jb2xvciI7CisgICAgV2ViR1BVQ29uc3RhbnRz
LkdQVUJsZW5kRmFjdG9yX29uZU1pbnVzU3JjQ29sb3IgPSAib25lLW1pbnVzLXNyYy1jb2xvciI7
CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5kRmFjdG9yX3NyY0FscGhhID0gInNyYy1hbHBo
YSI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5kRmFjdG9yX29uZU1pbnVzU3JjQWxwaGEg
PSAib25lLW1pbnVzLXNyYy1hbHBoYSI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5kRmFj
dG9yX2RzdENvbG9yID0gImRzdC1jb2xvciI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5k
RmFjdG9yX29uZU1pbnVzRHN0Q29sb3IgPSAib25lLW1pbnVzLWRzdC1jb2xvciI7CisgICAgV2Vi
R1BVQ29uc3RhbnRzLkdQVUJsZW5kRmFjdG9yX2RzdEFscGhhID0gImRzdC1hbHBoYSI7CisgICAg
V2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5kRmFjdG9yX29uZU1pbnVzRHN0QWxwaGEgPSAib25lLW1p
bnVzLWRzdC1hbHBoYSI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5kRmFjdG9yX3NyY0Fs
cGhhU2F0dXJhdGVkID0gInNyYy1hbHBoYS1zYXR1cmF0ZWQiOworICAgIFdlYkdQVUNvbnN0YW50
cy5HUFVCbGVuZEZhY3Rvcl9ibGVuZENvbG9yID0gImJsZW5kLWNvbG9yIjsKKyAgICBXZWJHUFVD
b25zdGFudHMuR1BVQmxlbmRGYWN0b3Jfb25lTWludXNCbGVuZENvbG9yID0gIm9uZS1taW51cy1i
bGVuZC1jb2xvciI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQVUJsZW5kT3BlcmF0aW9uX2FkZCA9
ICJhZGQiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVCbGVuZE9wZXJhdGlvbl9zdWJzdHJhY3Qg
PSAic3VidHJhY3QiOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVCbGVuZE9wZXJhdGlvbl9yZXZl
cnNlU3VidHJhY3QgPSAicmV2ZXJzZS1zdWJ0cmFjdCI7CisgICAgV2ViR1BVQ29uc3RhbnRzLkdQ
VUJsZW5kT3BlcmF0aW9uX21pbiA9ICJtaW4iOworICAgIFdlYkdQVUNvbnN0YW50cy5HUFVCbGVu
ZE9wZXJhdGlvbl9tYXggPSAibWF4IjsKKyAgICByZXR1cm4gV2ViR1BVQ29uc3RhbnRzOworfSgp
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL1dlYkdQVS93ZWJncHVQaXBl
bGluZUNvbnRleHQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5lcy9XZWJHUFUvd2ViZ3B1UGlwZWxpbmVD
b250ZXh0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogV2ViR1BVUGlwZWxpbmVDb250ZXh0
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkdQVVBpcGVsaW5lQ29u
dGV4dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViR1BVUGlwZWxpbmVDb250ZXh0OyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX3VuaWZvcm1CdWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVy
aWFscy91bmlmb3JtQnVmZmVyICovICIuL01hdGVyaWFscy91bmlmb3JtQnVmZmVyLnRzIik7CisK
K3ZhciBfdW5pZm9ybVNpemVzID0geworICAgICJmbG9hdCI6IDEsCisgICAgInZlYzIiOiAyLAor
ICAgICJ2ZWMzIjogMywKKyAgICAidmVjNCI6IDQsCisgICAgIm1hdDIiOiA0LAorICAgICJtYXQz
IjogOSwKKyAgICAibWF0NCI6IDE2Cit9OworLyoqIEBoaWRkZW4gKi8KK3ZhciBXZWJHUFVQaXBl
bGluZUNvbnRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24g
V2ViR1BVUGlwZWxpbmVDb250ZXh0KHNoYWRlclByb2Nlc3NpbmdDb250ZXh0LCBlbmdpbmUpIHsK
KyAgICAgICAgdGhpcy5zYW1wbGVycyA9IHt9OworICAgICAgICBpZiAoc2hhZGVyUHJvY2Vzc2lu
Z0NvbnRleHQpIHsKKyAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQXR0cmlidXRlcyA9IHNoYWRl
clByb2Nlc3NpbmdDb250ZXh0LmF2YWlsYWJsZUF0dHJpYnV0ZXM7CisgICAgICAgICAgICB0aGlz
LmF2YWlsYWJsZVVCT3MgPSBzaGFkZXJQcm9jZXNzaW5nQ29udGV4dC5hdmFpbGFibGVVQk9zOwor
ICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVTYW1wbGVycyA9IHNoYWRlclByb2Nlc3NpbmdDb250
ZXh0LmF2YWlsYWJsZVNhbXBsZXJzOworICAgICAgICAgICAgdGhpcy5vcmRlcmVkQXR0cmlidXRl
cyA9IHNoYWRlclByb2Nlc3NpbmdDb250ZXh0Lm9yZGVyZWRBdHRyaWJ1dGVzOworICAgICAgICAg
ICAgdGhpcy5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzID0gc2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQu
b3JkZXJlZFVCT3NBbmRTYW1wbGVyczsKKyAgICAgICAgICAgIHRoaXMubGVmdE92ZXJVbmlmb3Jt
cyA9IHNoYWRlclByb2Nlc3NpbmdDb250ZXh0LmxlZnRPdmVyVW5pZm9ybXM7CisgICAgICAgICAg
ICB0aGlzLmxlZnRPdmVyVW5pZm9ybXNCeU5hbWUgPSB7fTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZSwg
ImlzQXN5bmMiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
V2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZSwgImlzUmVhZHkiLCB7CisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRoaXMuc3RhZ2VzKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4dC5wcm90
b3R5cGUuX2hhbmRsZXNTcGVjdG9yUmVidWlsZENhbGxiYWNrID0gZnVuY3Rpb24gKG9uQ29tcGls
ZWQpIHsKKyAgICAgICAgLy8gTm90aGluZyB0byBkbyB5ZXQgZm9yIHNwZWN0b3IuCisgICAgfTsK
KyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLl9maWxsRWZmZWN0SW5mb3JtYXRp
b24gPSBmdW5jdGlvbiAoZWZmZWN0LCB1bmlmb3JtQnVmZmVyc05hbWVzLCB1bmlmb3Jtc05hbWVz
LCB1bmlmb3Jtcywgc2FtcGxlckxpc3QsIHNhbXBsZXJzLCBhdHRyaWJ1dGVzTmFtZXMsIGF0dHJp
YnV0ZXMpIHsKKyAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMuZW5naW5lOworICAgICAgICAvLyBU
T0RPIFdFQkdQVS4gQ2xlYW51cCBTRUIgb24gdGhpcyBlbnRpcmUgZnVuY3Rpb24uIFNob3VsZCBu
b3QgbmVlZCBhbnl0aGluZyBpbiBoZXJlIG9yIGFsbW9zdC4KKyAgICAgICAgdmFyIGVmZmVjdEF2
YWlsYWJsZVVuaWZvcm1zID0gZW5naW5lLmdldFVuaWZvcm1zKHRoaXMsIHVuaWZvcm1zTmFtZXMp
OworICAgICAgICBlZmZlY3RBdmFpbGFibGVVbmlmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uICh1bmlm
b3JtLCBpbmRleCkgeworICAgICAgICAgICAgdW5pZm9ybXNbdW5pZm9ybXNOYW1lc1tpbmRleF1d
ID0gdW5pZm9ybTsKKyAgICAgICAgfSk7CisgICAgICAgIC8vIFByZXZlbnQgTWVtb3J5IExlYWsg
YnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBzdHJpbmcsIHJlZmVyIHRvIHRoZSBzdHJpbmcgaW5z
dGVhZCBvZiBjb3B5LgorICAgICAgICBlZmZlY3QuX2ZyYWdtZW50U291cmNlQ29kZSA9ICIiOwor
ICAgICAgICBlZmZlY3QuX3ZlcnRleFNvdXJjZUNvZGUgPSAiIjsKKyAgICAgICAgLy8gdGhpcy5f
ZnJhZ21lbnRTb3VyY2VDb2RlT3ZlcnJpZGUgPSAiIjsKKyAgICAgICAgLy8gdGhpcy5fdmVydGV4
U291cmNlQ29kZU92ZXJyaWRlID0gIiI7CisgICAgICAgIHZhciBmb3VuZFNhbXBsZXJzID0gdGhp
cy5hdmFpbGFibGVTYW1wbGVyczsKKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICBmb3IgKGlu
ZGV4ID0gMDsgaW5kZXggPCBzYW1wbGVyTGlzdC5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgIHZhciBuYW1lXzEgPSBzYW1wbGVyTGlzdFtpbmRleF07CisgICAgICAgICAgICB2YXIgc2Ft
cGxlciA9IGZvdW5kU2FtcGxlcnNbc2FtcGxlckxpc3RbaW5kZXhdXTsKKyAgICAgICAgICAgIGlm
IChzYW1wbGVyID09IG51bGwgfHwgc2FtcGxlciA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
ICAgICBzYW1wbGVyTGlzdC5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgICAgIGluZGV4
LS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
YW1wbGVyc1tuYW1lXzFdID0gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgYXR0cmlidXRlcy5wdXNoLmFwcGx5KGF0dHJpYnV0ZXMsIGVuZ2luZS5nZXRBdHRyaWJ1dGVz
KHRoaXMsIGF0dHJpYnV0ZXNOYW1lcykpOworICAgICAgICAvLyBCdWlsZCB0aGUgdW5pZm9ybSBs
YXlvdXQgZm9yIHRoZSBsZWZ0IG92ZXIgdW5pZm9ybXMuCisgICAgICAgIHRoaXMuYnVpbGRVbmlm
b3JtTGF5b3V0KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCdWlsZCB0aGUgdW5pZm9ybSBi
dWZmZXIgdXNlZCBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICovCisgICAgV2ViR1BVUGlwZWxpbmVD
b250ZXh0LnByb3RvdHlwZS5idWlsZFVuaWZvcm1MYXlvdXQgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICghdGhpcy5sZWZ0T3ZlclVuaWZvcm1zLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZlciA9IG5ldyBfTWF0ZXJp
YWxzX3VuaWZvcm1CdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVW5pZm9ybUJ1
ZmZlciJdKHRoaXMuZW5naW5lKTsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMu
bGVmdE92ZXJVbmlmb3JtczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZh
ciBsZWZ0T3ZlclVuaWZvcm0gPSBfYVtfaV07CisgICAgICAgICAgICB2YXIgc2l6ZSA9IF91bmlm
b3JtU2l6ZXNbbGVmdE92ZXJVbmlmb3JtLnR5cGVdOworICAgICAgICAgICAgdGhpcy51bmlmb3Jt
QnVmZmVyLmFkZFVuaWZvcm0obGVmdE92ZXJVbmlmb3JtLm5hbWUsIHNpemUsIGxlZnRPdmVyVW5p
Zm9ybS5sZW5ndGgpOworICAgICAgICAgICAgLy8gVE9ETyBXRUJHUFUuIFJlcGxhY2Ugd2l0aCBp
bmZvIGZyb20gdW5pZm9ybSBidWZmZXIgY2xhc3MKKyAgICAgICAgICAgIHRoaXMubGVmdE92ZXJV
bmlmb3Jtc0J5TmFtZVtsZWZ0T3ZlclVuaWZvcm0ubmFtZV0gPSBsZWZ0T3ZlclVuaWZvcm0udHlw
ZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnVuaWZvcm1CdWZmZXIuY3JlYXRlKCk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAg
ICAgKiovCisgICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy51bmlmb3JtQnVmZmVyKSB7CisgICAgICAgICAg
ICB0aGlzLnVuaWZvcm1CdWZmZXIuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIGFuIGludGVyZ2VyIHZhbHVlIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4K
KyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICog
QHBhcmFtIHZhbHVlIFZhbHVlIHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHUFVQaXBlbGlu
ZUNvbnRleHQucHJvdG90eXBlLnNldEludCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgdmFsdWUp
IHsKKyAgICAgICAgdGhyb3cgInNldEludCBub3QgU3VwcG9ydGVkIGluIExlZnRPdmVyIFVCTy4i
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBpbnQgYXJyYXkgb24gYSB1bmlmb3Jt
IHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJs
ZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqLworICAgIFdl
YkdQVVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0SW50QXJyYXkgPSBmdW5jdGlvbiAodW5p
Zm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRocm93ICJzZXRJbnRBcnJheSBub3QgU3VwcG9y
dGVkIGluIExlZnRPdmVyIFVCTy4iOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBp
bnQgYXJyYXkgMiBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJheSBpcyBzcGVjaWZpZWQgYXMg
c2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNF0gd2lsbCByZXN1bHQgaW4gW1sxLDJdLFszLDRdXSBp
biB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJp
YWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqLworICAg
IFdlYkdQVVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0SW50QXJyYXkyID0gZnVuY3Rpb24g
KHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aHJvdyAic2V0SW50QXJyYXkyIG5vdCBT
dXBwb3J0ZWQgaW4gTGVmdE92ZXIgVUJPLiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRz
IGFuIGludCBhcnJheSAzIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4gKEFycmF5IGlzIHNwZWNpZmll
ZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIsMyw0LDUsNl0gd2lsbCByZXN1bHQgaW4gW1sxLDIs
M10sWzQsNSw2XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFt
ZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4K
KyAgICAgKi8KKyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEludEFycmF5
MyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhyb3cgInNldElu
dEFycmF5MyBub3QgU3VwcG9ydGVkIGluIExlZnRPdmVyIFVCTy4iOworICAgIH07CisgICAgLyoq
CisgICAgICogU2V0cyBhbiBpbnQgYXJyYXkgNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJh
eSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNCw1LDYsNyw4XSB3aWxs
IHJlc3VsdCBpbiBbWzEsMiwzLDRdLFs1LDYsNyw4XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBA
cGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFy
cmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQu
cHJvdG90eXBlLnNldEludEFycmF5NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsK
KyAgICAgICAgdGhyb3cgInNldEludEFycmF5NCBub3QgU3VwcG9ydGVkIGluIExlZnRPdmVyIFVC
Ty4iOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBmbG9hdCBhcnJheSBvbiBhIHVu
aWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZh
cmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisg
ICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRGbG9hdEFycmF5ID0gZnVuY3Rp
b24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICBpZiAoIXRoaXMudW5pZm9ybUJ1ZmZl
ciB8fCAhdGhpcy5sZWZ0T3ZlclVuaWZvcm1zQnlOYW1lW3VuaWZvcm1OYW1lXSkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZlci51cGRh
dGVGbG9hdEFycmF5KHVuaWZvcm1OYW1lLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIGFuIGZsb2F0IGFycmF5IDIgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMg
c3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDRdIHdpbGwgcmVzdWx0IGluIFtb
MSwyXSxbMyw0XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFt
ZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4K
KyAgICAgKi8KKyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEZsb2F0QXJy
YXkyID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aHJvdyAic2V0
RmxvYXRBcnJheTIgbm90IFN1cHBvcnRlZCBpbiBMZWZ0T3ZlciBVQk8uIjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHMgYW4gZmxvYXQgYXJyYXkgMyBvbiBhIHVuaWZvcm0gdmFyaWFibGUu
IChBcnJheSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNCw1LDZdIHdp
bGwgcmVzdWx0IGluIFtbMSwyLDNdLFs0LDUsNl1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBh
cmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJh
eSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnBy
b3RvdHlwZS5zZXRGbG9hdEFycmF5MyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsK
KyAgICAgICAgdGhyb3cgInNldEZsb2F0QXJyYXkzIG5vdCBTdXBwb3J0ZWQgaW4gTGVmdE92ZXIg
VUJPLiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGZsb2F0IGFycmF5IDQgb24g
YSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBl
Zy4gWzEsMiwzLDQsNSw2LDcsOF0gd2lsbCByZXN1bHQgaW4gW1sxLDIsMyw0XSxbNSw2LDcsOF1d
IGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZh
cmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisg
ICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRGbG9hdEFycmF5NCA9IGZ1bmN0
aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhyb3cgInNldEZsb2F0QXJyYXk0
IG5vdCBTdXBwb3J0ZWQgaW4gTGVmdE92ZXIgVUJPLiI7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIGFuIGFycmF5IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5p
Zm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5
IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBl
LnNldEFycmF5ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aHJv
dyAic2V0QXJyYXkgbm90IFN1cHBvcnRlZCBpbiBMZWZ0T3ZlciBVQk8uIjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHMgYW4gYXJyYXkgMiBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJh
eSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNF0gd2lsbCByZXN1bHQg
aW4gW1sxLDJdLFszLDRdXSBpbiB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFt
ZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUg
c2V0LgorICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0QXJy
YXkyID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aHJvdyAic2V0
QXJyYXkyIG5vdCBTdXBwb3J0ZWQgaW4gTGVmdE92ZXIgVUJPLiI7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTZXRzIGFuIGFycmF5IDMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMg
c3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDQsNSw2XSB3aWxsIHJlc3VsdCBp
biBbWzEsMiwzXSxbNCw1LDZdXSBpbiB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlmb3Jt
TmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8g
YmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIFdlYkdQ
VVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm1O
YW1lLCBhcnJheSkgeworICAgICAgICB0aHJvdyAic2V0QXJyYXkzIG5vdCBTdXBwb3J0ZWQgaW4g
TGVmdE92ZXIgVUJPLiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGFycmF5IDQg
b24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJh
eSBlZy4gWzEsMiwzLDQsNSw2LDcsOF0gd2lsbCByZXN1bHQgaW4gW1sxLDIsMyw0XSxbNSw2LDcs
OF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhl
IHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAgICov
CisgICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRBcnJheTQgPSBmdW5jdGlv
biAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRocm93ICJzZXRBcnJheTQgbm90IFN1
cHBvcnRlZCBpbiBMZWZ0T3ZlciBVQk8uIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMg
bWF0cmljZXMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFt
ZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gbWF0cmljZXMgbWF0cmljZXMg
dG8gYmUgc2V0LgorICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUu
c2V0TWF0cmljZXMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIG1hdHJpY2VzKSB7CisgICAgICAg
IGlmICghdGhpcy51bmlmb3JtQnVmZmVyIHx8ICF0aGlzLmxlZnRPdmVyVW5pZm9ybXNCeU5hbWVb
dW5pZm9ybU5hbWVdKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy51bmlmb3JtQnVmZmVyLnVwZGF0ZU1hdHJpY2VzKHVuaWZvcm1OYW1lLCBtYXRyaWNlcyk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIG1hdHJpeCBvbiBhIHVuaWZvcm0gdmFyaWFi
bGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAg
ICAqIEBwYXJhbSBtYXRyaXggbWF0cml4IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJHUFVQ
aXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldE1hdHJpeCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFt
ZSwgbWF0cml4KSB7CisgICAgICAgIGlmICghdGhpcy51bmlmb3JtQnVmZmVyIHx8ICF0aGlzLmxl
ZnRPdmVyVW5pZm9ybXNCeU5hbWVbdW5pZm9ybU5hbWVdKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy51bmlmb3JtQnVmZmVyLnVwZGF0ZU1hdHJpeCh1bmlm
b3JtTmFtZSwgbWF0cml4KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYSAzeDMgbWF0
cml4IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4gKFNwZWljaWZpZWQgYXMgWzEsMiwzLDQsNSw2LDcs
OCw5XSB3aWxsIHJlc3VsdCBpbiBbMSwyLDNdWzQsNSw2XVs3LDgsOV0gbWF0cml4KQorICAgICAq
IEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0g
bWF0cml4IG1hdHJpeCB0byBiZSBzZXQuCisgICAgICovCisgICAgV2ViR1BVUGlwZWxpbmVDb250
ZXh0LnByb3RvdHlwZS5zZXRNYXRyaXgzeDMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIG1hdHJp
eCkgeworICAgICAgICBpZiAoIXRoaXMudW5pZm9ybUJ1ZmZlciB8fCAhdGhpcy5sZWZ0T3ZlclVu
aWZvcm1zQnlOYW1lW3VuaWZvcm1OYW1lXSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZlci51cGRhdGVNYXRyaXgzeDModW5pZm9ybU5h
bWUsIG1hdHJpeCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgMngyIG1hdHJpeCBv
biBhIHVuaWZvcm0gdmFyaWFibGUuIChTcGVpY2lmaWVkIGFzIFsxLDIsMyw0XSB3aWxsIHJlc3Vs
dCBpbiBbMSwyXVszLDRdIG1hdHJpeCkKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBv
ZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIG1hdHJpeCBtYXRyaXggdG8gYmUgc2V0Lgor
ICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0TWF0cml4Mngy
ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBtYXRyaXgpIHsKKyAgICAgICAgaWYgKCF0aGlzLnVu
aWZvcm1CdWZmZXIgfHwgIXRoaXMubGVmdE92ZXJVbmlmb3Jtc0J5TmFtZVt1bmlmb3JtTmFtZV0p
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnVuaWZvcm1C
dWZmZXIudXBkYXRlTWF0cml4MngyKHVuaWZvcm1OYW1lLCBtYXRyaXgpOworICAgIH07CisgICAg
LyoqCisgICAgICogU2V0cyBhIGZsb2F0IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBA
cGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIHZh
bHVlIHZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAg
Ki8KKyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEZsb2F0ID0gZnVuY3Rp
b24gKHVuaWZvcm1OYW1lLCB2YWx1ZSkgeworICAgICAgICBpZiAoIXRoaXMudW5pZm9ybUJ1ZmZl
ciB8fCAhdGhpcy5sZWZ0T3ZlclVuaWZvcm1zQnlOYW1lW3VuaWZvcm1OYW1lXSkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZlci51cGRh
dGVGbG9hdCh1bmlmb3JtTmFtZSwgdmFsdWUpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
cyBhIGJvb2xlYW4gb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3Jt
TmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYm9vbCB2YWx1ZSB0byBi
ZSBzZXQuCisgICAgICovCisgICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRC
b29sID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBib29sKSB7CisgICAgICAgIHRocm93ICJzZXRC
b29sIG5vdCBTdXBwb3J0ZWQgaW4gTGVmdE92ZXIgVUJPLiI7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXRzIGEgVmVjdG9yMiBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFt
IHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB2ZWN0b3Iy
IHZlY3RvcjIgdG8gYmUgc2V0LgorICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4dC5w
cm90b3R5cGUuc2V0VmVjdG9yMiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgdmVjdG9yMikgewor
ICAgICAgICB0aGlzLnNldEZsb2F0Mih1bmlmb3JtTmFtZSwgdmVjdG9yMi54LCB2ZWN0b3IyLnkp
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIGZsb2F0MiBvbiBhIHVuaWZvcm0gdmFy
aWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgor
ICAgICAqIEBwYXJhbSB4IEZpcnN0IGZsb2F0IGluIGZsb2F0Mi4KKyAgICAgKiBAcGFyYW0geSBT
ZWNvbmQgZmxvYXQgaW4gZmxvYXQyLgorICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4
dC5wcm90b3R5cGUuc2V0RmxvYXQyID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB4LCB5KSB7Cisg
ICAgICAgIGlmICghdGhpcy51bmlmb3JtQnVmZmVyIHx8ICF0aGlzLmxlZnRPdmVyVW5pZm9ybXNC
eU5hbWVbdW5pZm9ybU5hbWVdKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy51bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0Mih1bmlmb3JtTmFtZSwgeCwgeSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgVmVjdG9yMyBvbiBhIHVuaWZvcm0gdmFy
aWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgor
ICAgICAqIEBwYXJhbSB2ZWN0b3IzIFZhbHVlIHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBXZWJH
UFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldFZlY3RvcjMgPSBmdW5jdGlvbiAodW5pZm9y
bU5hbWUsIHZlY3RvcjMpIHsKKyAgICAgICAgdGhpcy5zZXRGbG9hdDModW5pZm9ybU5hbWUsIHZl
Y3RvcjMueCwgdmVjdG9yMy55LCB2ZWN0b3IzLnopOworICAgIH07CisgICAgLyoqCisgICAgICog
U2V0cyBhIGZsb2F0MyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZv
cm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB4IEZpcnN0IGZsb2F0
IGluIGZsb2F0My4KKyAgICAgKiBAcGFyYW0geSBTZWNvbmQgZmxvYXQgaW4gZmxvYXQzLgorICAg
ICAqIEBwYXJhbSB6IFRoaXJkIGZsb2F0IGluIGZsb2F0My4KKyAgICAgKi8KKyAgICBXZWJHUFVQ
aXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEZsb2F0MyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFt
ZSwgeCwgeSwgeikgeworICAgICAgICBpZiAoIXRoaXMudW5pZm9ybUJ1ZmZlciB8fCAhdGhpcy5s
ZWZ0T3ZlclVuaWZvcm1zQnlOYW1lW3VuaWZvcm1OYW1lXSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDModW5p
Zm9ybU5hbWUsIHgsIHksIHopOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIFZlY3Rv
cjQgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1l
IG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdmVjdG9yNCBWYWx1ZSB0byBiZSBzZXQu
CisgICAgICovCisgICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRWZWN0b3I0
ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB2ZWN0b3I0KSB7CisgICAgICAgIHRoaXMuc2V0Rmxv
YXQ0KHVuaWZvcm1OYW1lLCB2ZWN0b3I0LngsIHZlY3RvcjQueSwgdmVjdG9yNC56LCB2ZWN0b3I0
LncpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIGZsb2F0NCBvbiBhIHVuaWZvcm0g
dmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxl
LgorICAgICAqIEBwYXJhbSB4IEZpcnN0IGZsb2F0IGluIGZsb2F0NC4KKyAgICAgKiBAcGFyYW0g
eSBTZWNvbmQgZmxvYXQgaW4gZmxvYXQ0LgorICAgICAqIEBwYXJhbSB6IFRoaXJkIGZsb2F0IGlu
IGZsb2F0NC4KKyAgICAgKiBAcGFyYW0gdyBGb3VydGggZmxvYXQgaW4gZmxvYXQ0LgorICAgICAq
IEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4
dC5wcm90b3R5cGUuc2V0RmxvYXQ0ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB4LCB5LCB6LCB3
KSB7CisgICAgICAgIGlmICghdGhpcy51bmlmb3JtQnVmZmVyIHx8ICF0aGlzLmxlZnRPdmVyVW5p
Zm9ybXNCeU5hbWVbdW5pZm9ybU5hbWVdKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy51bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCh1bmlmb3JtTmFtZSwg
eCwgeSwgeiwgdyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgQ29sb3IzIG9uIGEg
dW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUg
dmFyaWFibGUuCisgICAgICogQHBhcmFtIGNvbG9yMyBWYWx1ZSB0byBiZSBzZXQuCisgICAgICov
CisgICAgV2ViR1BVUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRDb2xvcjMgPSBmdW5jdGlv
biAodW5pZm9ybU5hbWUsIGNvbG9yMykgeworICAgICAgICB0aGlzLnNldEZsb2F0Myh1bmlmb3Jt
TmFtZSwgY29sb3IzLmIsIGNvbG9yMy5nLCBjb2xvcjMuYik7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXRzIGEgQ29sb3I0IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0g
dW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGNvbG9yMyBW
YWx1ZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtIGFscGhhIEFscGhhIHZhbHVlIHRvIGJlIHNl
dC4KKyAgICAgKi8KKyAgICBXZWJHUFVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldENvbG9y
NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgY29sb3IzLCBhbHBoYSkgeworICAgICAgICB0aGlz
LnNldEZsb2F0NCh1bmlmb3JtTmFtZSwgY29sb3IzLmIsIGNvbG9yMy5nLCBjb2xvcjMuYiwgYWxw
aGEpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIENvbG9yNCBvbiBhIHVuaWZvcm0g
dmFyaWFibGUKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0
aGUgdmFyaWFibGUKKyAgICAgKiBAcGFyYW0gY29sb3I0IGRlZmluZXMgdGhlIHZhbHVlIHRvIGJl
IHNldAorICAgICAqLworICAgIFdlYkdQVVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0RGly
ZWN0Q29sb3I0ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBjb2xvcjQpIHsKKyAgICAgICAgdGhp
cy5zZXRGbG9hdDQodW5pZm9ybU5hbWUsIGNvbG9yNC5yLCBjb2xvcjQuZywgY29sb3I0LmIsIGNv
bG9yNC5hKTsKKyAgICB9OworICAgIHJldHVybiBXZWJHUFVQaXBlbGluZUNvbnRleHQ7Cit9KCkp
OworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMvV2ViR1BVL3dlYmdwdVNoYWRl
clByb2Nlc3NpbmdDb250ZXh0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5lcy9XZWJHUFUv
d2ViZ3B1U2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQudHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IFdlYkdQVVNoYWRlclByb2Nlc3NpbmdDb250ZXh0ICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkdQVVNoYWRlclByb2Nlc3NpbmdDb250ZXh0IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBXZWJHUFVTaGFkZXJQcm9jZXNzaW5nQ29udGV4dDsgfSk7Cit2YXIg
X21heFNldHMgPSA0OwordmFyIF9tYXhCaW5kaW5nc1BlclNldCA9IDE2OworLyoqCisgKiBAaGlk
ZGVuCisgKi8KK3ZhciBXZWJHUFVTaGFkZXJQcm9jZXNzaW5nQ29udGV4dCA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBXZWJHUFVTaGFkZXJQcm9jZXNzaW5nQ29u
dGV4dCgpIHsKKyAgICAgICAgdGhpcy5hdHRyaWJ1dGVOZXh0TG9jYXRpb24gPSAwOworICAgICAg
ICB0aGlzLnZhcnlpbmdOZXh0TG9jYXRpb24gPSAwOworICAgICAgICB0aGlzLmZyZWVTZXRJbmRl
eCA9IDI7CisgICAgICAgIHRoaXMuZnJlZUJpbmRpbmdJbmRleCA9IDA7CisgICAgICAgIHRoaXMu
YXZhaWxhYmxlVmFyeWluZ3MgPSB7fTsKKyAgICAgICAgdGhpcy5hdmFpbGFibGVBdHRyaWJ1dGVz
ID0ge307CisgICAgICAgIHRoaXMuYXZhaWxhYmxlVUJPcyA9IHt9OworICAgICAgICB0aGlzLmF2
YWlsYWJsZVNhbXBsZXJzID0ge307CisgICAgICAgIHRoaXMub3JkZXJlZEF0dHJpYnV0ZXMgPSBb
XTsKKyAgICAgICAgdGhpcy5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzID0gW107CisgICAgICAgIHRo
aXMubGVmdE92ZXJVbmlmb3JtcyA9IFtdOworICAgIH0KKyAgICBXZWJHUFVTaGFkZXJQcm9jZXNz
aW5nQ29udGV4dC5wcm90b3R5cGUuZ2V0TmV4dEZyZWVVQk9CaW5kaW5nID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TmV4dEZyZWVCaW5kaW5nKDEpOworICAgIH07Cisg
ICAgV2ViR1BVU2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQucHJvdG90eXBlLmdldE5leHRGcmVlVGV4
dHVyZUJpbmRpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9nZXROZXh0
RnJlZUJpbmRpbmcoMik7CisgICAgfTsKKyAgICBXZWJHUFVTaGFkZXJQcm9jZXNzaW5nQ29udGV4
dC5wcm90b3R5cGUuX2dldE5leHRGcmVlQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nQ291bnQp
IHsKKyAgICAgICAgaWYgKHRoaXMuZnJlZUJpbmRpbmdJbmRleCA+IF9tYXhCaW5kaW5nc1BlclNl
dCAtIGJpbmRpbmdDb3VudCkgeworICAgICAgICAgICAgdGhpcy5mcmVlU2V0SW5kZXgrKzsKKyAg
ICAgICAgICAgIHRoaXMuZnJlZUJpbmRpbmdJbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuZnJlZVNldEluZGV4ID09PSBfbWF4U2V0cykgeworICAgICAgICAgICAgdGhyb3cg
IlRvbyBtYW55IHRleHR1cmVzIG9yIFVCT3MgaGF2ZSBiZWVuIGRlY2xhcmVkIGFuZCBpdCBpcyBu
b3Qgc3VwcHJ0ZWQgaW4gV2ViR1BVLiI7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJldHVyblZh
bHVlID0geworICAgICAgICAgICAgc2V0SW5kZXg6IHRoaXMuZnJlZVNldEluZGV4LAorICAgICAg
ICAgICAgYmluZGluZ0luZGV4OiB0aGlzLmZyZWVCaW5kaW5nSW5kZXgKKyAgICAgICAgfTsKKyAg
ICAgICAgdGhpcy5mcmVlQmluZGluZ0luZGV4ICs9IGJpbmRpbmdDb3VudDsKKyAgICAgICAgcmV0
dXJuIHJldHVyblZhbHVlOworICAgIH07CisgICAgcmV0dXJuIFdlYkdQVVNoYWRlclByb2Nlc3Np
bmdDb250ZXh0OworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL1dl
YkdQVS93ZWJncHVTaGFkZXJQcm9jZXNzb3JzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9FbmdpbmVzL1dlYkdQ
VS93ZWJncHVTaGFkZXJQcm9jZXNzb3JzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFdl
YkdQVVNoYWRlclByb2Nlc3NvciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJXZWJHUFVTaGFkZXJQcm9jZXNzb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYkdQVVNoYWRl
clByb2Nlc3NvcjsgfSk7Cit2YXIgX2tub3duVUJPcyA9IHsKKyAgICAiU2NlbmUiOiB7IHNldElu
ZGV4OiAwLCBiaW5kaW5nSW5kZXg6IDAgfSwKKyAgICAiTGlnaHQwIjogeyBzZXRJbmRleDogMCwg
YmluZGluZ0luZGV4OiA1IH0sCisgICAgIkxpZ2h0MSI6IHsgc2V0SW5kZXg6IDAsIGJpbmRpbmdJ
bmRleDogNiB9LAorICAgICJMaWdodDIiOiB7IHNldEluZGV4OiAwLCBiaW5kaW5nSW5kZXg6IDcg
fSwKKyAgICAiTGlnaHQzIjogeyBzZXRJbmRleDogMCwgYmluZGluZ0luZGV4OiA4IH0sCisgICAg
Ik1hdGVyaWFsIjogeyBzZXRJbmRleDogMSwgYmluZGluZ0luZGV4OiAwIH0sCisgICAgIk1lc2gi
OiB7IHNldEluZGV4OiAxLCBiaW5kaW5nSW5kZXg6IDEgfSwKK307Cit2YXIgX2tub3duU2FtcGxl
cnMgPSB7CisgICAgImVudmlyb25tZW50QnJkZlNhbXBsZXIiOiB7IHNldEluZGV4OiAwLCBiaW5k
aW5nSW5kZXg6IDEgfSwKK307CisvLyBUT0RPIFdFQkdQVS4gc2FtcGxlcjNECit2YXIgX3NhbXBs
ZXJGdW5jdGlvbkJ5V2ViR0xTYW1wbGVyVHlwZSA9IHsKKyAgICAidGV4dHVyZUN1YmUiOiAic2Ft
cGxlckN1YmUiLAorICAgICJ0ZXh0dXJlMkQiOiAic2FtcGxlcjJEIiwKKyAgICAic2FtcGxlcjJE
IjogInNhbXBsZXIyRCIsCisgICAgInNhbXBsZXJDdWJlIjogInNhbXBsZXJDdWJlIgorfTsKK3Zh
ciBfdGV4dHVyZVR5cGVCeVdlYkdMU2FtcGxlclR5cGUgPSB7CisgICAgInRleHR1cmVDdWJlIjog
InRleHR1cmVDdWJlIiwKKyAgICAidGV4dHVyZTJEIjogInRleHR1cmUyRCIsCisgICAgInNhbXBs
ZXIyRCI6ICJ0ZXh0dXJlMkQiLAorICAgICJzYW1wbGVyQ3ViZSI6ICJ0ZXh0dXJlQ3ViZSIKK307
CisvKiogQGhpZGRlbiAqLwordmFyIFdlYkdQVVNoYWRlclByb2Nlc3NvciA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBXZWJHUFVTaGFkZXJQcm9jZXNzb3IoKSB7
CisgICAgfQorICAgIFdlYkdQVVNoYWRlclByb2Nlc3Nvci5wcm90b3R5cGUudmFyeWluZ1Byb2Nl
c3NvciA9IGZ1bmN0aW9uICh2YXJ5aW5nLCBpc0ZyYWdtZW50LCBwcm9jZXNzaW5nQ29udGV4dCkg
eworICAgICAgICB2YXIgd2ViZ3B1UHJvY2Vzc2luZ0NvbnRleHQgPSBwcm9jZXNzaW5nQ29udGV4
dDsKKyAgICAgICAgdmFyIHZhcnlpbmdSZWdleCA9IG5ldyBSZWdFeHAoL1xzKnZhcnlpbmdccyso
XFMrKVxzKyhcUyspXHMqOy9nbSk7CisgICAgICAgIHZhciBtYXRjaCA9IHZhcnlpbmdSZWdleC5l
eGVjKHZhcnlpbmcpOworICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbCkgeworICAgICAgICAgICAg
dmFyIG5hbWVfMSA9IG1hdGNoWzJdOworICAgICAgICAgICAgdmFyIGxvY2F0aW9uXzE7CisgICAg
ICAgICAgICBpZiAoaXNGcmFnbWVudCkgeworICAgICAgICAgICAgICAgIGxvY2F0aW9uXzEgPSB3
ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5hdmFpbGFibGVWYXJ5aW5nc1tuYW1lXzFdOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbG9jYXRpb25fMSA9
IHdlYmdwdVByb2Nlc3NpbmdDb250ZXh0LnZhcnlpbmdOZXh0TG9jYXRpb24rKzsKKyAgICAgICAg
ICAgICAgICB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5hdmFpbGFibGVWYXJ5aW5nc1tuYW1lXzFd
ID0gbG9jYXRpb25fMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcnlpbmcgPSB2YXJ5
aW5nLnJlcGxhY2UobWF0Y2hbMF0sICJsYXlvdXQobG9jYXRpb24gPSAiICsgbG9jYXRpb25fMSAr
ICIpICIgKyAoaXNGcmFnbWVudCA/ICJpbiIgOiAib3V0IikgKyAiICIgKyBtYXRjaFsxXSArICIg
IiArIG5hbWVfMSArICI7Iik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhcnlpbmc7Cisg
ICAgfTsKKyAgICBXZWJHUFVTaGFkZXJQcm9jZXNzb3IucHJvdG90eXBlLmF0dHJpYnV0ZVByb2Nl
c3NvciA9IGZ1bmN0aW9uIChhdHRyaWJ1dGUsIHByb2Nlc3NpbmdDb250ZXh0KSB7CisgICAgICAg
IHZhciB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dCA9IHByb2Nlc3NpbmdDb250ZXh0OworICAgICAg
ICB2YXIgYXR0cmliUmVnZXggPSBuZXcgUmVnRXhwKC9ccyphdHRyaWJ1dGVccysoXFMrKVxzKyhc
UyspXHMqOy9nbSk7CisgICAgICAgIHZhciBtYXRjaCA9IGF0dHJpYlJlZ2V4LmV4ZWMoYXR0cmli
dXRlKTsKKyAgICAgICAgaWYgKG1hdGNoICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBuYW1l
XzIgPSBtYXRjaFsyXTsKKyAgICAgICAgICAgIHZhciBsb2NhdGlvbl8yID0gd2ViZ3B1UHJvY2Vz
c2luZ0NvbnRleHQuYXR0cmlidXRlTmV4dExvY2F0aW9uKys7CisgICAgICAgICAgICB3ZWJncHVQ
cm9jZXNzaW5nQ29udGV4dC5hdmFpbGFibGVBdHRyaWJ1dGVzW25hbWVfMl0gPSBsb2NhdGlvbl8y
OworICAgICAgICAgICAgd2ViZ3B1UHJvY2Vzc2luZ0NvbnRleHQub3JkZXJlZEF0dHJpYnV0ZXNb
bG9jYXRpb25fMl0gPSBuYW1lXzI7CisgICAgICAgICAgICBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUu
cmVwbGFjZShtYXRjaFswXSwgImxheW91dChsb2NhdGlvbiA9ICIgKyBsb2NhdGlvbl8yICsgIikg
aW4gIiArIG1hdGNoWzFdICsgIiAiICsgbmFtZV8yICsgIjsiKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gYXR0cmlidXRlOworICAgIH07CisgICAgV2ViR1BVU2hhZGVyUHJvY2Vzc29yLnBy
b3RvdHlwZS51bmlmb3JtUHJvY2Vzc29yID0gZnVuY3Rpb24gKHVuaWZvcm0sIGlzRnJhZ21lbnQs
IHByZVByb2Nlc3NvcnMsIHByb2Nlc3NpbmdDb250ZXh0KSB7CisgICAgICAgIHZhciB3ZWJncHVQ
cm9jZXNzaW5nQ29udGV4dCA9IHByb2Nlc3NpbmdDb250ZXh0OworICAgICAgICB2YXIgdW5pZm9y
bVJlZ2V4ID0gbmV3IFJlZ0V4cCgvXHMqdW5pZm9ybVxzKyhcUyspXHMrKFxTKylccyo7L2dtKTsK
KyAgICAgICAgdmFyIG1hdGNoID0gdW5pZm9ybVJlZ2V4LmV4ZWModW5pZm9ybSk7CisgICAgICAg
IGlmIChtYXRjaCAhPSBudWxsKSB7CisgICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSBtYXRj
aFsxXTsKKyAgICAgICAgICAgIHZhciBuYW1lXzMgPSBtYXRjaFsyXTsKKyAgICAgICAgICAgIGlm
ICh1bmlmb3JtVHlwZS5pbmRleE9mKCJ0ZXh0dXJlIikgPT09IDAgfHwgdW5pZm9ybVR5cGUuaW5k
ZXhPZigic2FtcGxlciIpID09PSAwKSB7CisgICAgICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZv
ID0gX2tub3duU2FtcGxlcnNbbmFtZV8zXTsKKyAgICAgICAgICAgICAgICBpZiAoIXNhbXBsZXJJ
bmZvKSB7CisgICAgICAgICAgICAgICAgICAgIHNhbXBsZXJJbmZvID0gd2ViZ3B1UHJvY2Vzc2lu
Z0NvbnRleHQuYXZhaWxhYmxlU2FtcGxlcnNbbmFtZV8zXTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFzYW1wbGVySW5mbykgeworICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlckluZm8g
PSB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5nZXROZXh0RnJlZVRleHR1cmVCaW5kaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dmFyIHNldEluZGV4ID0gc2FtcGxlckluZm8uc2V0SW5kZXg7CisgICAgICAgICAgICAgICAgdmFy
IHRleHR1cmVCaW5kaW5nSW5kZXggPSBzYW1wbGVySW5mby5iaW5kaW5nSW5kZXg7CisgICAgICAg
ICAgICAgICAgdmFyIHNhbXBsZXJCaW5kaW5nSW5kZXggPSBzYW1wbGVySW5mby5iaW5kaW5nSW5k
ZXggKyAxOworICAgICAgICAgICAgICAgIHZhciBzYW1wbGVyRnVuY3Rpb24gPSBfc2FtcGxlckZ1
bmN0aW9uQnlXZWJHTFNhbXBsZXJUeXBlW3VuaWZvcm1UeXBlXTsKKyAgICAgICAgICAgICAgICB2
YXIgdGV4dHVyZVR5cGUgPSBfdGV4dHVyZVR5cGVCeVdlYkdMU2FtcGxlclR5cGVbdW5pZm9ybVR5
cGVdOworICAgICAgICAgICAgICAgIC8vIE1hbmFnZSB0ZXh0dXJlcyBhbmQgc2FtcGxlcnMuCisg
ICAgICAgICAgICAgICAgdW5pZm9ybSA9ICJsYXlvdXQoc2V0ID0gIiArIHNldEluZGV4ICsgIiwg
YmluZGluZyA9ICIgKyB0ZXh0dXJlQmluZGluZ0luZGV4ICsgIikgdW5pZm9ybSAiICsgdGV4dHVy
ZVR5cGUgKyAiICIgKyBuYW1lXzMgKyAiVGV4dHVyZTtcbiAgICAgICAgICAgICAgICAgICAgbGF5
b3V0KHNldCA9ICIgKyBzZXRJbmRleCArICIsIGJpbmRpbmcgPSAiICsgc2FtcGxlckJpbmRpbmdJ
bmRleCArICIpIHVuaWZvcm0gc2FtcGxlciAiICsgbmFtZV8zICsgIlNhbXBsZXI7XG4gICAgICAg
ICAgICAgICAgICAgICNkZWZpbmUgIiArIG5hbWVfMyArICIgIiArIHNhbXBsZXJGdW5jdGlvbiAr
ICIoIiArIG5hbWVfMyArICJUZXh0dXJlLCAiICsgbmFtZV8zICsgIlNhbXBsZXIpIjsKKyAgICAg
ICAgICAgICAgICB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5hdmFpbGFibGVTYW1wbGVyc1tuYW1l
XzNdID0gc2FtcGxlckluZm87CisgICAgICAgICAgICAgICAgaWYgKCF3ZWJncHVQcm9jZXNzaW5n
Q29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzW3NldEluZGV4XSkgeworICAgICAgICAgICAg
ICAgICAgICB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzW3Nl
dEluZGV4XSA9IFtdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3ZWJncHVQ
cm9jZXNzaW5nQ29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzW3NldEluZGV4XVt0ZXh0dXJl
QmluZGluZ0luZGV4XSA9IHsgaXNTYW1wbGVyOiB0cnVlLCBuYW1lOiBuYW1lXzMgfTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRo
ZSBzaXplIG9mIHRoZSB1bmlmb3JtIGFycmF5IGluIGNhc2Ugb2YgYXJyYXkuCisgICAgICAgICAg
ICAgICAgdmFyIGxlbmd0aF8xID0gMDsKKyAgICAgICAgICAgICAgICB2YXIgc3RhcnRBcnJheSA9
IG5hbWVfMy5pbmRleE9mKCJbIik7CisgICAgICAgICAgICAgICAgdmFyIGVuZEFycmF5ID0gbmFt
ZV8zLmluZGV4T2YoIl0iKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRBcnJheSA+IDAgJiYg
ZW5kQXJyYXkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGhJblN0cmluZyA9
IG5hbWVfMy5zdWJzdHJpbmcoc3RhcnRBcnJheSArIDEsIGVuZEFycmF5KTsKKyAgICAgICAgICAg
ICAgICAgICAgbGVuZ3RoXzEgPSArKGxlbmd0aEluU3RyaW5nKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzTmFOKGxlbmd0aF8xKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3Ro
XzEgPSArKHByZVByb2Nlc3NvcnNbbGVuZ3RoSW5TdHJpbmddKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBuYW1lXzMgPSBuYW1lXzMuc3Vic3RyKDAsIHN0YXJ0
QXJyYXkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHdlYmdwdVByb2Nlc3NpbmdDb250ZXh0LmxlZnRPdmVyVW5pZm9ybXMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdlYmdwdVByb2Nlc3NpbmdDb250ZXh0Lmxl
ZnRPdmVyVW5pZm9ybXNbaV0ubmFtZSA9PT0gbmFtZV8zKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gIiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgd2ViZ3B1UHJvY2Vzc2luZ0NvbnRleHQubGVmdE92ZXJVbmlmb3Jt
cy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZV8zLAorICAgICAgICAgICAg
ICAgICAgICB0eXBlOiB1bmlmb3JtVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBs
ZW5ndGhfMQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHVuaWZvcm0gPSAi
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdW5pZm9ybTsKKyAg
ICB9OworICAgIFdlYkdQVVNoYWRlclByb2Nlc3Nvci5wcm90b3R5cGUudW5pZm9ybUJ1ZmZlclBy
b2Nlc3NvciA9IGZ1bmN0aW9uICh1bmlmb3JtQnVmZmVyLCBpc0ZyYWdtZW50LCBwcm9jZXNzaW5n
Q29udGV4dCkgeworICAgICAgICB2YXIgd2ViZ3B1UHJvY2Vzc2luZ0NvbnRleHQgPSBwcm9jZXNz
aW5nQ29udGV4dDsKKyAgICAgICAgdmFyIHVib1JlZ2V4ID0gbmV3IFJlZ0V4cCgvdW5pZm9ybVxz
KyhcdyspL2dtKTsKKyAgICAgICAgdmFyIG1hdGNoID0gdWJvUmVnZXguZXhlYyh1bmlmb3JtQnVm
ZmVyKTsKKyAgICAgICAgaWYgKG1hdGNoICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBuYW1l
XzQgPSBtYXRjaFsxXTsKKyAgICAgICAgICAgIHZhciBzZXRJbmRleCA9IHZvaWQgMDsKKyAgICAg
ICAgICAgIHZhciBiaW5kaW5nSW5kZXggPSB2b2lkIDA7CisgICAgICAgICAgICB2YXIga25vd25V
Qk8gPSBfa25vd25VQk9zW25hbWVfNF07CisgICAgICAgICAgICBpZiAoa25vd25VQk8pIHsKKyAg
ICAgICAgICAgICAgICBzZXRJbmRleCA9IGtub3duVUJPLnNldEluZGV4OworICAgICAgICAgICAg
ICAgIGJpbmRpbmdJbmRleCA9IGtub3duVUJPLmJpbmRpbmdJbmRleDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc0ZyYWdtZW50KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBhdmFpbGFibGVVQk8gPSB3ZWJncHVQcm9jZXNzaW5nQ29u
dGV4dC5hdmFpbGFibGVVQk9zW25hbWVfNF07CisgICAgICAgICAgICAgICAgICAgIGlmIChhdmFp
bGFibGVVQk8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldEluZGV4ID0gYXZhaWxhYmxl
VUJPLnNldEluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZ0luZGV4ID0gYXZh
aWxhYmxlVUJPLmJpbmRpbmdJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0QmluZGlu
ZyA9IHdlYmdwdVByb2Nlc3NpbmdDb250ZXh0LmdldE5leHRGcmVlVUJPQmluZGluZygpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0SW5kZXggPSBuZXh0QmluZGluZy5zZXRJbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdJbmRleCA9IG5leHRCaW5kaW5nLmJpbmRpbmdJ
bmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRCaW5kaW5nID0gd2Vi
Z3B1UHJvY2Vzc2luZ0NvbnRleHQuZ2V0TmV4dEZyZWVVQk9CaW5kaW5nKCk7CisgICAgICAgICAg
ICAgICAgICAgIHNldEluZGV4ID0gbmV4dEJpbmRpbmcuc2V0SW5kZXg7CisgICAgICAgICAgICAg
ICAgICAgIGJpbmRpbmdJbmRleCA9IG5leHRCaW5kaW5nLmJpbmRpbmdJbmRleDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3ZWJncHVQcm9jZXNzaW5nQ29u
dGV4dC5hdmFpbGFibGVVQk9zW25hbWVfNF0gPSB7IHNldEluZGV4OiBzZXRJbmRleCwgYmluZGlu
Z0luZGV4OiBiaW5kaW5nSW5kZXggfTsKKyAgICAgICAgICAgIGlmICghd2ViZ3B1UHJvY2Vzc2lu
Z0NvbnRleHQub3JkZXJlZFVCT3NBbmRTYW1wbGVyc1tzZXRJbmRleF0pIHsKKyAgICAgICAgICAg
ICAgICB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzW3NldElu
ZGV4XSA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2ViZ3B1UHJvY2Vzc2luZ0Nv
bnRleHQub3JkZXJlZFVCT3NBbmRTYW1wbGVyc1tzZXRJbmRleF1bYmluZGluZ0luZGV4XSA9IHsg
aXNTYW1wbGVyOiBmYWxzZSwgbmFtZTogbmFtZV80IH07CisgICAgICAgICAgICB1bmlmb3JtQnVm
ZmVyID0gdW5pZm9ybUJ1ZmZlci5yZXBsYWNlKCJ1bmlmb3JtIiwgImxheW91dChzZXQgPSAiICsg
c2V0SW5kZXggKyAiLCBiaW5kaW5nID0gIiArIGJpbmRpbmdJbmRleCArICIpIHVuaWZvcm0iKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdW5pZm9ybUJ1ZmZlcjsKKyAgICB9OworICAgIC8v
IHB1YmxpYyBlbmRPZlVuaWZvcm1CdWZmZXJQcm9jZXNzb3IoY2xvc2luZ0JyYWNrZXRMaW5lOiBz
dHJpbmcsIGlzRnJhZ21lbnQ6IGJvb2xlYW4pOiBzdHJpbmcgeworICAgIC8vICAgICBjb25zb2xl
LmxvZygidW5pZm9ybUJ1ZmZlciBjbG9zaW5nQnJhY2tldExpbmUgIiwgY2xvc2luZ0JyYWNrZXRM
aW5lKTsKKyAgICAvLyAgICAgcmV0dXJuIGNsb3NpbmdCcmFja2V0TGluZTsKKyAgICAvLyB9Cisg
ICAgV2ViR1BVU2hhZGVyUHJvY2Vzc29yLnByb3RvdHlwZS5wb3N0UHJvY2Vzc29yID0gZnVuY3Rp
b24gKGNvZGUsIGRlZmluZXMsIGlzRnJhZ21lbnQsIHByb2Nlc3NpbmdDb250ZXh0KSB7CisgICAg
ICAgIHZhciBoYXNEcmF3QnVmZmVyc0V4dGVuc2lvbiA9IGNvZGUuc2VhcmNoKC8jZXh0ZW5zaW9u
LitHTF9FWFRfZHJhd19idWZmZXJzLityZXF1aXJlLykgIT09IC0xOworICAgICAgICAvLyBSZW1v
dmUgZXh0ZW5zaW9ucworICAgICAgICB2YXIgcmVnZXggPSAvI2V4dGVuc2lvbi4rKEdMX09WUl9t
dWx0aXZpZXcyfEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlc3xHTF9FWFRfc2hhZGVyX3RleHR1
cmVfbG9kfEdMX0VYVF9mcmFnX2RlcHRofEdMX0VYVF9kcmF3X2J1ZmZlcnMpLisoZW5hYmxlfHJl
cXVpcmUpL2c7CisgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UocmVnZXgsICIiKTsKKyAgICAg
ICAgLy8gUmVwbGFjZSBpbnN0cnVjdGlvbnMKKyAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgv
dGV4dHVyZTJEXHMqXCgvZywgInRleHR1cmUoIik7CisgICAgICAgIGlmIChpc0ZyYWdtZW50KSB7
CisgICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC90ZXh0dXJlMkRMb2RFWFRccypcKC9n
LCAidGV4dHVyZUxvZCgiKTsKKyAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL3RleHR1
cmVDdWJlTG9kRVhUXHMqXCgvZywgInRleHR1cmVMb2QoIik7CisgICAgICAgICAgICBjb2RlID0g
Y29kZS5yZXBsYWNlKC90ZXh0dXJlQ3ViZVxzKlwoL2csICJ0ZXh0dXJlKCIpOworICAgICAgICAg
ICAgY29kZSA9IGNvZGUucmVwbGFjZSgvZ2xfRnJhZ0RlcHRoRVhUL2csICJnbF9GcmFnRGVwdGgi
KTsKKyAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL2dsX0ZyYWdDb2xvci9nLCAiZ2xG
cmFnQ29sb3IiKTsKKyAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL2dsX0ZyYWdEYXRh
L2csICJnbEZyYWdEYXRhIik7CisgICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC92b2lk
XHMrP21haW5ccypcKC9nLCAoaGFzRHJhd0J1ZmZlcnNFeHRlbnNpb24gPyAiIiA6ICJsYXlvdXQo
bG9jYXRpb24gPSAwKSBvdXQgdmVjNCBnbEZyYWdDb2xvcjtcbiIpICsgInZvaWQgbWFpbigiKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBoYXNNdWx0aXZpZXdF
eHRlbnNpb24gPSBkZWZpbmVzLmluZGV4T2YoIiNkZWZpbmUgTVVMVElWSUVXIikgIT09IC0xOwor
ICAgICAgICAgICAgaWYgKGhhc011bHRpdmlld0V4dGVuc2lvbikgeworICAgICAgICAgICAgICAg
IHJldHVybiAiI2V4dGVuc2lvbiBHTF9PVlJfbXVsdGl2aWV3MiA6IHJlcXVpcmVcbmxheW91dCAo
bnVtX3ZpZXdzID0gMikgaW47XG4iICsgY29kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAvLyBGbGlwIFkuCisgICAgICAgIC8vIFRPRE8gV0VCR1BVLiBUcmlwbGUgY2hlY2sg
dGhpcyBwYXJ0IGFuZCB3YWl0IG9uIEdvb2dsZSBOZXdzIGZvciB0aGlzIGlzc3VlLgorICAgICAg
ICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ3B1d2ViL2dwdXdlYi9pc3N1ZXMvMzc5CisgICAgICAg
IGlmICghaXNGcmFnbWVudCkgeworICAgICAgICAgICAgdmFyIGxhc3RDbG9zaW5nQ3VybHkgPSBj
b2RlLmxhc3RJbmRleE9mKCJ9Iik7CisgICAgICAgICAgICBjb2RlID0gY29kZS5zdWJzdHJpbmco
MCwgbGFzdENsb3NpbmdDdXJseSk7CisgICAgICAgICAgICBjb2RlICs9ICJnbF9Qb3NpdGlvbi55
ICo9IC0xLjsgfSI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgfTsKKyAg
ICBXZWJHUFVTaGFkZXJQcm9jZXNzb3IucHJvdG90eXBlLmZpbmFsaXplU2hhZGVycyA9IGZ1bmN0
aW9uICh2ZXJ0ZXhDb2RlLCBmcmFnbWVudENvZGUsIHByb2Nlc3NpbmdDb250ZXh0KSB7CisgICAg
ICAgIC8vIEJ1aWxkcyB0aGUgbGVmdG92ZXIgVUJPcy4KKyAgICAgICAgdmFyIHdlYmdwdVByb2Nl
c3NpbmdDb250ZXh0ID0gcHJvY2Vzc2luZ0NvbnRleHQ7CisgICAgICAgIGlmICh3ZWJncHVQcm9j
ZXNzaW5nQ29udGV4dC5sZWZ0T3ZlclVuaWZvcm1zLmxlbmd0aCkgeworICAgICAgICAgICAgdmFy
IG5hbWVfNSA9ICJMZWZ0T3ZlciI7CisgICAgICAgICAgICB2YXIgYXZhaWxhYmxlVUJPID0gd2Vi
Z3B1UHJvY2Vzc2luZ0NvbnRleHQuYXZhaWxhYmxlVUJPc1tuYW1lXzVdOworICAgICAgICAgICAg
aWYgKCFhdmFpbGFibGVVQk8pIHsKKyAgICAgICAgICAgICAgICBhdmFpbGFibGVVQk8gPSB3ZWJn
cHVQcm9jZXNzaW5nQ29udGV4dC5nZXROZXh0RnJlZVVCT0JpbmRpbmcoKTsKKyAgICAgICAgICAg
ICAgICB3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5hdmFpbGFibGVVQk9zW25hbWVfNV0gPSBhdmFp
bGFibGVVQk87CisgICAgICAgICAgICAgICAgaWYgKCF3ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5v
cmRlcmVkVUJPc0FuZFNhbXBsZXJzW2F2YWlsYWJsZVVCTy5zZXRJbmRleF0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgd2ViZ3B1UHJvY2Vzc2luZ0NvbnRleHQub3JkZXJlZFVCT3NBbmRTYW1wbGVy
c1thdmFpbGFibGVVQk8uc2V0SW5kZXhdID0gW107CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHdlYmdwdVByb2Nlc3NpbmdDb250ZXh0Lm9yZGVyZWRVQk9zQW5kU2FtcGxlcnNb
YXZhaWxhYmxlVUJPLnNldEluZGV4XVthdmFpbGFibGVVQk8uYmluZGluZ0luZGV4XSA9IHsgaXNT
YW1wbGVyOiBmYWxzZSwgbmFtZTogbmFtZV81IH07CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YXIgdWJvID0gImxheW91dChzZXQgPSAiICsgYXZhaWxhYmxlVUJPLnNldEluZGV4ICsgIiwg
YmluZGluZyA9ICIgKyBhdmFpbGFibGVVQk8uYmluZGluZ0luZGV4ICsgIikgdW5pZm9ybSAiICsg
bmFtZV81ICsgIiB7XG4gICAgIjsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB3
ZWJncHVQcm9jZXNzaW5nQ29udGV4dC5sZWZ0T3ZlclVuaWZvcm1zOyBfaSA8IF9hLmxlbmd0aDsg
X2krKykgeworICAgICAgICAgICAgICAgIHZhciBsZWZ0T3ZlclVuaWZvcm0gPSBfYVtfaV07Cisg
ICAgICAgICAgICAgICAgaWYgKGxlZnRPdmVyVW5pZm9ybS5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIHVibyArPSAiICAgICIgKyBsZWZ0T3ZlclVuaWZvcm0udHlwZSArICIgIiAr
IGxlZnRPdmVyVW5pZm9ybS5uYW1lICsgIlsiICsgbGVmdE92ZXJVbmlmb3JtLmxlbmd0aCArICJd
O1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHVibyArPSAiICAgICIgKyBsZWZ0T3ZlclVuaWZvcm0udHlwZSArICIgIiAr
IGxlZnRPdmVyVW5pZm9ybS5uYW1lICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdWJvICs9ICJ9O1xuXG4iOworICAgICAgICAgICAgLy8gQ3Vy
cmVudGx5IHNldCBpbiBib3RoIHZlcnQgYW5kIGZyYWcgYnV0IGNvdWxkIGJlIG9wdGltIGF3YXkg
aWYgbmVjZXNzYXJ5LgorICAgICAgICAgICAgdmVydGV4Q29kZSA9IHVibyArIHZlcnRleENvZGU7
CisgICAgICAgICAgICBmcmFnbWVudENvZGUgPSB1Ym8gKyBmcmFnbWVudENvZGU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHsgdmVydGV4Q29kZTogdmVydGV4Q29kZSwgZnJhZ21lbnRDb2Rl
OiBmcmFnbWVudENvZGUgfTsKKyAgICB9OworICAgIHJldHVybiBXZWJHUFVTaGFkZXJQcm9jZXNz
b3I7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMvY29uc3RhbnRz
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5n
aW5lcy9jb25zdGFudHMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbnN0YW50cyAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJDb25zdGFudHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvbnN0YW50
czsgfSk7CisvKiogRGVmaW5lcyB0aGUgY3Jvc3MgbW9kdWxlIHVzZWQgY29uc3RhbnRzIHRvIGF2
b2lkIGNpcmN1bGFyIGRlcGVuZG5jaWVzICovCit2YXIgQ29uc3RhbnRzID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIENvbnN0YW50cygpIHsKKyAgICB9CisgICAg
LyoqIERlZmluZXMgdGhhdCBhbHBoYSBibGVuZGluZyBpcyBkaXNhYmxlZCAqLworICAgIENvbnN0
YW50cy5BTFBIQV9ESVNBQkxFID0gMDsKKyAgICAvKiogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5k
aW5nIHRvIFNSQyBBTFBIQSAqIFNSQyArIERFU1QgKi8KKyAgICBDb25zdGFudHMuQUxQSEFfQURE
ID0gMTsKKyAgICAvKiogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5kaW5nIHRvIFNSQyBBTFBIQSAq
IFNSQyArICgxIC0gU1JDIEFMUEhBKSAqIERFU1QgKi8KKyAgICBDb25zdGFudHMuQUxQSEFfQ09N
QklORSA9IDI7CisgICAgLyoqIERlZmluZXMgdGhhdCBhbHBoYSBibGVuZGluZyB0byBERVNUIC0g
U1JDICogREVTVCAqLworICAgIENvbnN0YW50cy5BTFBIQV9TVUJUUkFDVCA9IDM7CisgICAgLyoq
IERlZmluZXMgdGhhdCBhbHBoYSBibGVuZGluZyB0byBTUkMgKiBERVNUICovCisgICAgQ29uc3Rh
bnRzLkFMUEhBX01VTFRJUExZID0gNDsKKyAgICAvKiogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5k
aW5nIHRvIFNSQyBBTFBIQSAqIFNSQyArICgxIC0gU1JDKSAqIERFU1QgKi8KKyAgICBDb25zdGFu
dHMuQUxQSEFfTUFYSU1JWkVEID0gNTsKKyAgICAvKiogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5k
aW5nIHRvIFNSQyArIERFU1QgKi8KKyAgICBDb25zdGFudHMuQUxQSEFfT05FT05FID0gNjsKKyAg
ICAvKiogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5kaW5nIHRvIFNSQyArICgxIC0gU1JDIEFMUEhB
KSAqIERFU1QgKi8KKyAgICBDb25zdGFudHMuQUxQSEFfUFJFTVVMVElQTElFRCA9IDc7CisgICAg
LyoqCisgICAgICogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5kaW5nIHRvIFNSQyArICgxIC0gU1JD
IEFMUEhBKSAqIERFU1QKKyAgICAgKiBBbHBoYSB3aWxsIGJlIHNldCB0byAoMSAtIFNSQyBBTFBI
QSkgKiBERVNUIEFMUEhBCisgICAgICovCisgICAgQ29uc3RhbnRzLkFMUEhBX1BSRU1VTFRJUExJ
RURfUE9SVEVSRFVGRiA9IDg7CisgICAgLyoqIERlZmluZXMgdGhhdCBhbHBoYSBibGVuZGluZyB0
byBDU1QgKiBTUkMgKyAoMSAtIENTVCkgKiBERVNUICovCisgICAgQ29uc3RhbnRzLkFMUEhBX0lO
VEVSUE9MQVRFID0gOTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoYXQgYWxwaGEgYmxlbmRp
bmcgdG8gU1JDICsgKDEgLSBTUkMpICogREVTVAorICAgICAqIEFscGhhIHdpbGwgYmUgc2V0IHRv
IFNSQyBBTFBIQSArICgxIC0gU1JDIEFMUEhBKSAqIERFU1QgQUxQSEEKKyAgICAgKi8KKyAgICBD
b25zdGFudHMuQUxQSEFfU0NSRUVOTU9ERSA9IDEwOworICAgIC8qKiBEZWZpbmVzIHRoYXQgdGhl
IHJlc3NvdXJjZSBpcyBub3QgZGVsYXllZCovCisgICAgQ29uc3RhbnRzLkRFTEFZTE9BRFNUQVRF
X05PTkUgPSAwOworICAgIC8qKiBEZWZpbmVzIHRoYXQgdGhlIHJlc3NvdXJjZSB3YXMgc3VjY2Vz
c2Z1bGx5IGRlbGF5IGxvYWRlZCAqLworICAgIENvbnN0YW50cy5ERUxBWUxPQURTVEFURV9MT0FE
RUQgPSAxOworICAgIC8qKiBEZWZpbmVzIHRoYXQgdGhlIHJlc3NvdXJjZSBpcyBjdXJyZW50bHkg
ZGVsYXkgbG9hZGluZyAqLworICAgIENvbnN0YW50cy5ERUxBWUxPQURTVEFURV9MT0FESU5HID0g
MjsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRoZSByZXNzb3VyY2UgaXMgZGVsYXllZCBhbmQgaGFz
IG5vdCBzdGFydGVkIGxvYWRpbmcgKi8KKyAgICBDb25zdGFudHMuREVMQVlMT0FEU1RBVEVfTk9U
TE9BREVEID0gNDsKKyAgICAvLyBEZXBodCBvciBTdGVuY2lsIHRlc3QgQ29uc3RhbnRzLgorICAg
IC8qKiBQYXNzZWQgdG8gZGVwdGhGdW5jdGlvbiBvciBzdGVuY2lsRnVuY3Rpb24gdG8gc3BlY2lm
eSBkZXB0aCBvciBzdGVuY2lsIHRlc3RzIHdpbGwgbmV2ZXIgcGFzcy4gaS5lLiBOb3RoaW5nIHdp
bGwgYmUgZHJhd24gKi8KKyAgICBDb25zdGFudHMuTkVWRVIgPSAweDAyMDA7CisgICAgLyoqIFBh
c3NlZCB0byBkZXB0aEZ1bmN0aW9uIG9yIHN0ZW5jaWxGdW5jdGlvbiB0byBzcGVjaWZ5IGRlcHRo
IG9yIHN0ZW5jaWwgdGVzdHMgd2lsbCBhbHdheXMgcGFzcy4gaS5lLiBQaXhlbHMgd2lsbCBiZSBk
cmF3biBpbiB0aGUgb3JkZXIgdGhleSBhcmUgZHJhd24gKi8KKyAgICBDb25zdGFudHMuQUxXQVlT
ID0gMHgwMjA3OworICAgIC8qKiBQYXNzZWQgdG8gZGVwdGhGdW5jdGlvbiBvciBzdGVuY2lsRnVu
Y3Rpb24gdG8gc3BlY2lmeSBkZXB0aCBvciBzdGVuY2lsIHRlc3RzIHdpbGwgcGFzcyBpZiB0aGUg
bmV3IGRlcHRoIHZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgc3RvcmVkIHZhbHVlICovCisgICAgQ29u
c3RhbnRzLkxFU1MgPSAweDAyMDE7CisgICAgLyoqIFBhc3NlZCB0byBkZXB0aEZ1bmN0aW9uIG9y
IHN0ZW5jaWxGdW5jdGlvbiB0byBzcGVjaWZ5IGRlcHRoIG9yIHN0ZW5jaWwgdGVzdHMgd2lsbCBw
YXNzIGlmIHRoZSBuZXcgZGVwdGggdmFsdWUgaXMgZXF1YWxzIHRvIHRoZSBzdG9yZWQgdmFsdWUg
Ki8KKyAgICBDb25zdGFudHMuRVFVQUwgPSAweDAyMDI7CisgICAgLyoqIFBhc3NlZCB0byBkZXB0
aEZ1bmN0aW9uIG9yIHN0ZW5jaWxGdW5jdGlvbiB0byBzcGVjaWZ5IGRlcHRoIG9yIHN0ZW5jaWwg
dGVzdHMgd2lsbCBwYXNzIGlmIHRoZSBuZXcgZGVwdGggdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVx
dWFsIHRvIHRoZSBzdG9yZWQgdmFsdWUgKi8KKyAgICBDb25zdGFudHMuTEVRVUFMID0gMHgwMjAz
OworICAgIC8qKiBQYXNzZWQgdG8gZGVwdGhGdW5jdGlvbiBvciBzdGVuY2lsRnVuY3Rpb24gdG8g
c3BlY2lmeSBkZXB0aCBvciBzdGVuY2lsIHRlc3RzIHdpbGwgcGFzcyBpZiB0aGUgbmV3IGRlcHRo
IHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3RvcmVkIHZhbHVlICovCisgICAgQ29uc3RhbnRz
LkdSRUFURVIgPSAweDAyMDQ7CisgICAgLyoqIFBhc3NlZCB0byBkZXB0aEZ1bmN0aW9uIG9yIHN0
ZW5jaWxGdW5jdGlvbiB0byBzcGVjaWZ5IGRlcHRoIG9yIHN0ZW5jaWwgdGVzdHMgd2lsbCBwYXNz
IGlmIHRoZSBuZXcgZGVwdGggdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBz
dG9yZWQgdmFsdWUgKi8KKyAgICBDb25zdGFudHMuR0VRVUFMID0gMHgwMjA2OworICAgIC8qKiBQ
YXNzZWQgdG8gZGVwdGhGdW5jdGlvbiBvciBzdGVuY2lsRnVuY3Rpb24gdG8gc3BlY2lmeSBkZXB0
aCBvciBzdGVuY2lsIHRlc3RzIHdpbGwgcGFzcyBpZiB0aGUgbmV3IGRlcHRoIHZhbHVlIGlzIG5v
dCBlcXVhbCB0byB0aGUgc3RvcmVkIHZhbHVlICovCisgICAgQ29uc3RhbnRzLk5PVEVRVUFMID0g
MHgwMjA1OworICAgIC8vIFN0ZW5jaWwgQWN0aW9ucyBDb25zdGFudHMuCisgICAgLyoqIFBhc3Nl
ZCB0byBzdGVuY2lsT3BlcmF0aW9uIHRvIHNwZWNpZnkgdGhhdCBzdGVuY2lsIHZhbHVlIG11c3Qg
YmUga2VwdCAqLworICAgIENvbnN0YW50cy5LRUVQID0gMHgxRTAwOworICAgIC8qKiBQYXNzZWQg
dG8gc3RlbmNpbE9wZXJhdGlvbiB0byBzcGVjaWZ5IHRoYXQgc3RlbmNpbCB2YWx1ZSBtdXN0IGJl
IHplcm8gKi8KKyAgICBDb25zdGFudHMuWkVSTyA9IDB4MDAwMDsKKyAgICAvKiogUGFzc2VkIHRv
IHN0ZW5jaWxPcGVyYXRpb24gdG8gc3BlY2lmeSB0aGF0IHN0ZW5jaWwgdmFsdWUgbXVzdCBiZSBy
ZXBsYWNlZCAqLworICAgIENvbnN0YW50cy5SRVBMQUNFID0gMHgxRTAxOworICAgIC8qKiBQYXNz
ZWQgdG8gc3RlbmNpbE9wZXJhdGlvbiB0byBzcGVjaWZ5IHRoYXQgc3RlbmNpbCB2YWx1ZSBtdXN0
IGJlIGluY3JlbWVudGVkICovCisgICAgQ29uc3RhbnRzLklOQ1IgPSAweDFFMDI7CisgICAgLyoq
IFBhc3NlZCB0byBzdGVuY2lsT3BlcmF0aW9uIHRvIHNwZWNpZnkgdGhhdCBzdGVuY2lsIHZhbHVl
IG11c3QgYmUgZGVjcmVtZW50ZWQgKi8KKyAgICBDb25zdGFudHMuREVDUiA9IDB4MUUwMzsKKyAg
ICAvKiogUGFzc2VkIHRvIHN0ZW5jaWxPcGVyYXRpb24gdG8gc3BlY2lmeSB0aGF0IHN0ZW5jaWwg
dmFsdWUgbXVzdCBiZSBpbnZlcnRlZCAqLworICAgIENvbnN0YW50cy5JTlZFUlQgPSAweDE1MEE7
CisgICAgLyoqIFBhc3NlZCB0byBzdGVuY2lsT3BlcmF0aW9uIHRvIHNwZWNpZnkgdGhhdCBzdGVu
Y2lsIHZhbHVlIG11c3QgYmUgaW5jcmVtZW50ZWQgd2l0aCB3cmFwcGluZyAqLworICAgIENvbnN0
YW50cy5JTkNSX1dSQVAgPSAweDg1MDc7CisgICAgLyoqIFBhc3NlZCB0byBzdGVuY2lsT3BlcmF0
aW9uIHRvIHNwZWNpZnkgdGhhdCBzdGVuY2lsIHZhbHVlIG11c3QgYmUgZGVjcmVtZW50ZWQgd2l0
aCB3cmFwcGluZyAqLworICAgIENvbnN0YW50cy5ERUNSX1dSQVAgPSAweDg1MDg7CisgICAgLyoq
IFRleHR1cmUgaXMgbm90IHJlcGVhdGluZyBvdXRzaWRlIG9mIDAuLjEgVVZzICovCisgICAgQ29u
c3RhbnRzLlRFWFRVUkVfQ0xBTVBfQUREUkVTU01PREUgPSAwOworICAgIC8qKiBUZXh0dXJlIGlz
IHJlcGVhdGluZyBvdXRzaWRlIG9mIDAuLjEgVVZzICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVf
V1JBUF9BRERSRVNTTU9ERSA9IDE7CisgICAgLyoqIFRleHR1cmUgaXMgcmVwZWF0aW5nIGFuZCBt
aXJyb3JlZCAqLworICAgIENvbnN0YW50cy5URVhUVVJFX01JUlJPUl9BRERSRVNTTU9ERSA9IDI7
CisgICAgLyoqIEFMUEhBICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVGT1JNQVRfQUxQSEEgPSAw
OworICAgIC8qKiBMVU1JTkFOQ0UgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRUZPUk1BVF9MVU1J
TkFOQ0UgPSAxOworICAgIC8qKiBMVU1JTkFOQ0VfQUxQSEEgKi8KKyAgICBDb25zdGFudHMuVEVY
VFVSRUZPUk1BVF9MVU1JTkFOQ0VfQUxQSEEgPSAyOworICAgIC8qKiBSR0IgKi8KKyAgICBDb25z
dGFudHMuVEVYVFVSRUZPUk1BVF9SR0IgPSA0OworICAgIC8qKiBSR0JBICovCisgICAgQ29uc3Rh
bnRzLlRFWFRVUkVGT1JNQVRfUkdCQSA9IDU7CisgICAgLyoqIFJFRCAqLworICAgIENvbnN0YW50
cy5URVhUVVJFRk9STUFUX1JFRCA9IDY7CisgICAgLyoqIFJFRCAoMm5kIHJlZmVyZW5jZSkgKi8K
KyAgICBDb25zdGFudHMuVEVYVFVSRUZPUk1BVF9SID0gNjsKKyAgICAvKiogUkcgKi8KKyAgICBD
b25zdGFudHMuVEVYVFVSRUZPUk1BVF9SRyA9IDc7CisgICAgLyoqIFJFRF9JTlRFR0VSICovCisg
ICAgQ29uc3RhbnRzLlRFWFRVUkVGT1JNQVRfUkVEX0lOVEVHRVIgPSA4OworICAgIC8qKiBSRURf
SU5URUdFUiAoMm5kIHJlZmVyZW5jZSkgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRUZPUk1BVF9S
X0lOVEVHRVIgPSA4OworICAgIC8qKiBSR19JTlRFR0VSICovCisgICAgQ29uc3RhbnRzLlRFWFRV
UkVGT1JNQVRfUkdfSU5URUdFUiA9IDk7CisgICAgLyoqIFJHQl9JTlRFR0VSICovCisgICAgQ29u
c3RhbnRzLlRFWFRVUkVGT1JNQVRfUkdCX0lOVEVHRVIgPSAxMDsKKyAgICAvKiogUkdCQV9JTlRF
R0VSICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVGT1JNQVRfUkdCQV9JTlRFR0VSID0gMTE7Cisg
ICAgLyoqIFVOU0lHTkVEX0JZVEUgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRVRZUEVfVU5TSUdO
RURfQllURSA9IDA7CisgICAgLyoqIFVOU0lHTkVEX0JZVEUgKDJuZCByZWZlcmVuY2UpICovCisg
ICAgQ29uc3RhbnRzLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCA9IDA7CisgICAgLyoqIEZMT0FU
ICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVUWVBFX0ZMT0FUID0gMTsKKyAgICAvKiogSEFMRl9G
TE9BVCAqLworICAgIENvbnN0YW50cy5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUID0gMjsKKyAgICAv
KiogQllURSAqLworICAgIENvbnN0YW50cy5URVhUVVJFVFlQRV9CWVRFID0gMzsKKyAgICAvKiog
U0hPUlQgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRVRZUEVfU0hPUlQgPSA0OworICAgIC8qKiBV
TlNJR05FRF9TSE9SVCAqLworICAgIENvbnN0YW50cy5URVhUVVJFVFlQRV9VTlNJR05FRF9TSE9S
VCA9IDU7CisgICAgLyoqIElOVCAqLworICAgIENvbnN0YW50cy5URVhUVVJFVFlQRV9JTlQgPSA2
OworICAgIC8qKiBVTlNJR05FRF9JTlQgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRVRZUEVfVU5T
SUdORURfSU5URUdFUiA9IDc7CisgICAgLyoqIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgKi8KKyAg
ICBDb25zdGFudHMuVEVYVFVSRVRZUEVfVU5TSUdORURfU0hPUlRfNF80XzRfNCA9IDg7CisgICAg
LyoqIFVOU0lHTkVEX1NIT1JUXzVfNV81XzEgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRVRZUEVf
VU5TSUdORURfU0hPUlRfNV81XzVfMSA9IDk7CisgICAgLyoqIFVOU0lHTkVEX1NIT1JUXzVfNl81
ICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVUWVBFX1VOU0lHTkVEX1NIT1JUXzVfNl81ID0gMTA7
CisgICAgLyoqIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAqLworICAgIENvbnN0YW50cy5U
RVhUVVJFVFlQRV9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgPSAxMTsKKyAgICAvKiogVU5T
SUdORURfSU5UXzI0XzggKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5U
XzI0XzggPSAxMjsKKyAgICAvKiogVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViAqLworICAg
IENvbnN0YW50cy5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWID0gMTM7
CisgICAgLyoqIFVOU0lHTkVEX0lOVF81XzlfOV85X1JFViAqLworICAgIENvbnN0YW50cy5URVhU
VVJFVFlQRV9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYgPSAxNDsKKyAgICAvKiogRkxPQVRfMzJf
VU5TSUdORURfSU5UXzI0XzhfUkVWICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVUWVBFX0ZMT0FU
XzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViA9IDE1OworICAgIC8qKiBuZWFyZXN0IGlzIG1hZyA9
IG5lYXJlc3QgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1pcCA9IGxpbmVhciAqLworICAgIENvbnN0
YW50cy5URVhUVVJFX05FQVJFU1RfU0FNUExJTkdNT0RFID0gMTsKKyAgICAvKiogQmlsaW5lYXIg
aXMgbWFnID0gbGluZWFyIGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IG5lYXJlc3QgKi8KKyAg
ICBDb25zdGFudHMuVEVYVFVSRV9CSUxJTkVBUl9TQU1QTElOR01PREUgPSAyOworICAgIC8qKiBU
cmlsaW5lYXIgaXMgbWFnID0gbGluZWFyIGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IGxpbmVh
ciAqLworICAgIENvbnN0YW50cy5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01PREUgPSAzOwor
ICAgIC8qKiBuZWFyZXN0IGlzIG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1p
cCA9IGxpbmVhciAqLworICAgIENvbnN0YW50cy5URVhUVVJFX05FQVJFU1RfTkVBUkVTVF9NSVBM
SU5FQVIgPSAxOworICAgIC8qKiBCaWxpbmVhciBpcyBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IGxp
bmVhciBhbmQgbWlwID0gbmVhcmVzdCAqLworICAgIENvbnN0YW50cy5URVhUVVJFX0xJTkVBUl9M
SU5FQVJfTUlQTkVBUkVTVCA9IDI7CisgICAgLyoqIFRyaWxpbmVhciBpcyBtYWcgPSBsaW5lYXIg
YW5kIG1pbiA9IGxpbmVhciBhbmQgbWlwID0gbGluZWFyICovCisgICAgQ29uc3RhbnRzLlRFWFRV
UkVfTElORUFSX0xJTkVBUl9NSVBMSU5FQVIgPSAzOworICAgIC8qKiBtYWcgPSBuZWFyZXN0IGFu
ZCBtaW4gPSBuZWFyZXN0IGFuZCBtaXAgPSBuZWFyZXN0ICovCisgICAgQ29uc3RhbnRzLlRFWFRV
UkVfTkVBUkVTVF9ORUFSRVNUX01JUE5FQVJFU1QgPSA0OworICAgIC8qKiBtYWcgPSBuZWFyZXN0
IGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IG5lYXJlc3QgKi8KKyAgICBDb25zdGFudHMuVEVY
VFVSRV9ORUFSRVNUX0xJTkVBUl9NSVBORUFSRVNUID0gNTsKKyAgICAvKiogbWFnID0gbmVhcmVz
dCBhbmQgbWluID0gbGluZWFyIGFuZCBtaXAgPSBsaW5lYXIgKi8KKyAgICBDb25zdGFudHMuVEVY
VFVSRV9ORUFSRVNUX0xJTkVBUl9NSVBMSU5FQVIgPSA2OworICAgIC8qKiBtYWcgPSBuZWFyZXN0
IGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IG5vbmUgKi8KKyAgICBDb25zdGFudHMuVEVYVFVS
RV9ORUFSRVNUX0xJTkVBUiA9IDc7CisgICAgLyoqIG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IG5l
YXJlc3QgYW5kIG1pcCA9IG5vbmUgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRV9ORUFSRVNUX05F
QVJFU1QgPSA4OworICAgIC8qKiBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1p
cCA9IG5lYXJlc3QgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRV9MSU5FQVJfTkVBUkVTVF9NSVBO
RUFSRVNUID0gOTsKKyAgICAvKiogbWFnID0gbGluZWFyIGFuZCBtaW4gPSBuZWFyZXN0IGFuZCBt
aXAgPSBsaW5lYXIgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRV9MSU5FQVJfTkVBUkVTVF9NSVBM
SU5FQVIgPSAxMDsKKyAgICAvKiogbWFnID0gbGluZWFyIGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1p
cCA9IG5vbmUgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRV9MSU5FQVJfTElORUFSID0gMTE7Cisg
ICAgLyoqIG1hZyA9IGxpbmVhciBhbmQgbWluID0gbmVhcmVzdCBhbmQgbWlwID0gbm9uZSAqLwor
ICAgIENvbnN0YW50cy5URVhUVVJFX0xJTkVBUl9ORUFSRVNUID0gMTI7CisgICAgLyoqIEV4cGxp
Y2l0IGNvb3JkaW5hdGVzIG1vZGUgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRV9FWFBMSUNJVF9N
T0RFID0gMDsKKyAgICAvKiogU3BoZXJpY2FsIGNvb3JkaW5hdGVzIG1vZGUgKi8KKyAgICBDb25z
dGFudHMuVEVYVFVSRV9TUEhFUklDQUxfTU9ERSA9IDE7CisgICAgLyoqIFBsYW5hciBjb29yZGlu
YXRlcyBtb2RlICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVfUExBTkFSX01PREUgPSAyOworICAg
IC8qKiBDdWJpYyBjb29yZGluYXRlcyBtb2RlICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVfQ1VC
SUNfTU9ERSA9IDM7CisgICAgLyoqIFByb2plY3Rpb24gY29vcmRpbmF0ZXMgbW9kZSAqLworICAg
IENvbnN0YW50cy5URVhUVVJFX1BST0pFQ1RJT05fTU9ERSA9IDQ7CisgICAgLyoqIFNreWJveCBj
b29yZGluYXRlcyBtb2RlICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVfU0tZQk9YX01PREUgPSA1
OworICAgIC8qKiBJbnZlcnNlIEN1YmljIGNvb3JkaW5hdGVzIG1vZGUgKi8KKyAgICBDb25zdGFu
dHMuVEVYVFVSRV9JTlZDVUJJQ19NT0RFID0gNjsKKyAgICAvKiogRXF1aXJlY3Rhbmd1bGFyIGNv
b3JkaW5hdGVzIG1vZGUgKi8KKyAgICBDb25zdGFudHMuVEVYVFVSRV9FUVVJUkVDVEFOR1VMQVJf
TU9ERSA9IDc7CisgICAgLyoqIEVxdWlyZWN0YW5ndWxhciBGaXhlZCBjb29yZGluYXRlcyBtb2Rl
ICovCisgICAgQ29uc3RhbnRzLlRFWFRVUkVfRklYRURfRVFVSVJFQ1RBTkdVTEFSX01PREUgPSA4
OworICAgIC8qKiBFcXVpcmVjdGFuZ3VsYXIgRml4ZWQgTWlycm9yZWQgY29vcmRpbmF0ZXMgbW9k
ZSAqLworICAgIENvbnN0YW50cy5URVhUVVJFX0ZJWEVEX0VRVUlSRUNUQU5HVUxBUl9NSVJST1JF
RF9NT0RFID0gOTsKKyAgICAvLyBUZXh0dXJlIHJlc2NhbGluZyBtb2RlCisgICAgLyoqIERlZmlu
ZXMgdGhhdCB0ZXh0dXJlIHJlc2NhbGluZyB3aWxsIHVzZSBhIGZsb29yIHRvIGZpbmQgdGhlIGNs
b3NlciBwb3dlciBvZiAyIHNpemUgKi8KKyAgICBDb25zdGFudHMuU0NBTEVNT0RFX0ZMT09SID0g
MTsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRleHR1cmUgcmVzY2FsaW5nIHdpbGwgbG9vayBmb3Ig
dGhlIG5lYXJlc3QgcG93ZXIgb2YgMiBzaXplICovCisgICAgQ29uc3RhbnRzLlNDQUxFTU9ERV9O
RUFSRVNUID0gMjsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRleHR1cmUgcmVzY2FsaW5nIHdpbGwg
dXNlIGEgY2VpbCB0byBmaW5kIHRoZSBjbG9zZXIgcG93ZXIgb2YgMiBzaXplICovCisgICAgQ29u
c3RhbnRzLlNDQUxFTU9ERV9DRUlMSU5HID0gMzsKKyAgICAvKioKKyAgICAgKiBUaGUgZGlydHkg
dGV4dHVyZSBmbGFnIHZhbHVlCisgICAgICovCisgICAgQ29uc3RhbnRzLk1BVEVSSUFMX1RleHR1
cmVEaXJ0eUZsYWcgPSAxOworICAgIC8qKgorICAgICAqIFRoZSBkaXJ0eSBsaWdodCBmbGFnIHZh
bHVlCisgICAgICovCisgICAgQ29uc3RhbnRzLk1BVEVSSUFMX0xpZ2h0RGlydHlGbGFnID0gMjsK
KyAgICAvKioKKyAgICAgKiBUaGUgZGlydHkgZnJlc25lbCBmbGFnIHZhbHVlCisgICAgICovCisg
ICAgQ29uc3RhbnRzLk1BVEVSSUFMX0ZyZXNuZWxEaXJ0eUZsYWcgPSA0OworICAgIC8qKgorICAg
ICAqIFRoZSBkaXJ0eSBhdHRyaWJ1dGUgZmxhZyB2YWx1ZQorICAgICAqLworICAgIENvbnN0YW50
cy5NQVRFUklBTF9BdHRyaWJ1dGVzRGlydHlGbGFnID0gODsKKyAgICAvKioKKyAgICAgKiBUaGUg
ZGlydHkgbWlzYyBmbGFnIHZhbHVlCisgICAgICovCisgICAgQ29uc3RhbnRzLk1BVEVSSUFMX01p
c2NEaXJ0eUZsYWcgPSAxNjsKKyAgICAvKioKKyAgICAgKiBUaGUgYWxsIGRpcnR5IGZsYWcgdmFs
dWUKKyAgICAgKi8KKyAgICBDb25zdGFudHMuTUFURVJJQUxfQWxsRGlydHlGbGFnID0gMzE7Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdHJpYW5nbGUgZmlsbCBtb2RlCisgICAgICovCisg
ICAgQ29uc3RhbnRzLk1BVEVSSUFMX1RyaWFuZ2xlRmlsbE1vZGUgPSAwOworICAgIC8qKgorICAg
ICAqIFJldHVybnMgdGhlIHdpcmVmcmFtZSBtb2RlCisgICAgICovCisgICAgQ29uc3RhbnRzLk1B
VEVSSUFMX1dpcmVGcmFtZUZpbGxNb2RlID0gMTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSBwb2ludCBmaWxsIG1vZGUKKyAgICAgKi8KKyAgICBDb25zdGFudHMuTUFURVJJQUxfUG9pbnRG
aWxsTW9kZSA9IDI7CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgcG9pbnQgbGlzdCBkcmF3
IG1vZGUKKyAgICAgKi8KKyAgICBDb25zdGFudHMuTUFURVJJQUxfUG9pbnRMaXN0RHJhd01vZGUg
PSAzOworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGxpbmUgbGlzdCBkcmF3IG1vZGUKKyAg
ICAgKi8KKyAgICBDb25zdGFudHMuTUFURVJJQUxfTGluZUxpc3REcmF3TW9kZSA9IDQ7CisgICAg
LyoqCisgICAgICogUmV0dXJucyB0aGUgbGluZSBsb29wIGRyYXcgbW9kZQorICAgICAqLworICAg
IENvbnN0YW50cy5NQVRFUklBTF9MaW5lTG9vcERyYXdNb2RlID0gNTsKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIHRoZSBsaW5lIHN0cmlwIGRyYXcgbW9kZQorICAgICAqLworICAgIENvbnN0YW50
cy5NQVRFUklBTF9MaW5lU3RyaXBEcmF3TW9kZSA9IDY7CisgICAgLyoqCisgICAgICogUmV0dXJu
cyB0aGUgdHJpYW5nbGUgc3RyaXAgZHJhdyBtb2RlCisgICAgICovCisgICAgQ29uc3RhbnRzLk1B
VEVSSUFMX1RyaWFuZ2xlU3RyaXBEcmF3TW9kZSA9IDc7CisgICAgLyoqCisgICAgICogUmV0dXJu
cyB0aGUgdHJpYW5nbGUgZmFuIGRyYXcgbW9kZQorICAgICAqLworICAgIENvbnN0YW50cy5NQVRF
UklBTF9UcmlhbmdsZUZhbkRyYXdNb2RlID0gODsKKyAgICAvKioKKyAgICAgKiBTdG9yZXMgdGhl
IGNsb2NrLXdpc2Ugc2lkZSBvcmllbnRhdGlvbgorICAgICAqLworICAgIENvbnN0YW50cy5NQVRF
UklBTF9DbG9ja1dpc2VTaWRlT3JpZW50YXRpb24gPSAwOworICAgIC8qKgorICAgICAqIFN0b3Jl
cyB0aGUgY291bnRlciBjbG9jay13aXNlIHNpZGUgb3JpZW50YXRpb24KKyAgICAgKi8KKyAgICBD
b25zdGFudHMuTUFURVJJQUxfQ291bnRlckNsb2NrV2lzZVNpZGVPcmllbnRhdGlvbiA9IDE7Cisg
ICAgLyoqCisgICAgICogTm90aGluZworICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBDb25z
dGFudHMuQUNUSU9OX05vdGhpbmdUcmlnZ2VyID0gMDsKKyAgICAvKioKKyAgICAgKiBPbiBwaWNr
CisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vf
YWN0aW9ucyN0cmlnZ2VycworICAgICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25QaWNrVHJp
Z2dlciA9IDE7CisgICAgLyoqCisgICAgICogT24gbGVmdCBwaWNrCisgICAgICogQHNlZSBodHRw
Oi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucyN0cmlnZ2Vycwor
ICAgICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25MZWZ0UGlja1RyaWdnZXIgPSAyOworICAg
IC8qKgorICAgICAqIE9uIHJpZ2h0IHBpY2sKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxv
bmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJzCisgICAgICovCisgICAg
Q29uc3RhbnRzLkFDVElPTl9PblJpZ2h0UGlja1RyaWdnZXIgPSAzOworICAgIC8qKgorICAgICAq
IE9uIGNlbnRlciBwaWNrCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL2hvd190b191c2VfYWN0aW9ucyN0cmlnZ2VycworICAgICAqLworICAgIENvbnN0YW50cy5B
Q1RJT05fT25DZW50ZXJQaWNrVHJpZ2dlciA9IDQ7CisgICAgLyoqCisgICAgICogT24gcGljayBk
b3duCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191
c2VfYWN0aW9ucyN0cmlnZ2VycworICAgICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25QaWNr
RG93blRyaWdnZXIgPSA1OworICAgIC8qKgorICAgICAqIE9uIGRvdWJsZSBwaWNrCisgICAgICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucyN0
cmlnZ2VycworICAgICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25Eb3VibGVQaWNrVHJpZ2dl
ciA9IDY7CisgICAgLyoqCisgICAgICogT24gcGljayB1cAorICAgICAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAg
Ki8KKyAgICBDb25zdGFudHMuQUNUSU9OX09uUGlja1VwVHJpZ2dlciA9IDc7CisgICAgLyoqCisg
ICAgICogT24gcGljayBvdXQuCisgICAgICogVGhpcyB0cmlnZ2VyIHdpbGwgb25seSBiZSByYWlz
ZWQgaWYgeW91IGFsc28gZGVjbGFyZWQgYSBPblBpY2tEb3duCisgICAgICogQHNlZSBodHRwOi8v
ZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucyN0cmlnZ2VycworICAg
ICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25QaWNrT3V0VHJpZ2dlciA9IDE2OworICAgIC8q
KgorICAgICAqIE9uIGxvbmcgcHJlc3MKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25zI3RyaWdnZXJzCisgICAgICovCisgICAgQ29u
c3RhbnRzLkFDVElPTl9PbkxvbmdQcmVzc1RyaWdnZXIgPSA4OworICAgIC8qKgorICAgICAqIE9u
IHBvaW50ZXIgb3ZlcgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBDb25zdGFudHMuQUNU
SU9OX09uUG9pbnRlck92ZXJUcmlnZ2VyID0gOTsKKyAgICAvKioKKyAgICAgKiBPbiBwb2ludGVy
IG91dAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9f
dXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBDb25zdGFudHMuQUNUSU9OX09uUG9p
bnRlck91dFRyaWdnZXIgPSAxMDsKKyAgICAvKioKKyAgICAgKiBPbiBldmVyeSBmcmFtZQorICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlv
bnMjdHJpZ2dlcnMKKyAgICAgKi8KKyAgICBDb25zdGFudHMuQUNUSU9OX09uRXZlcnlGcmFtZVRy
aWdnZXIgPSAxMTsKKyAgICAvKioKKyAgICAgKiBPbiBpbnRlcnNlY3Rpb24gZW50ZXIKKyAgICAg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hY3Rpb25z
I3RyaWdnZXJzCisgICAgICovCisgICAgQ29uc3RhbnRzLkFDVElPTl9PbkludGVyc2VjdGlvbkVu
dGVyVHJpZ2dlciA9IDEyOworICAgIC8qKgorICAgICAqIE9uIGludGVyc2VjdGlvbiBleGl0Cisg
ICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0
aW9ucyN0cmlnZ2VycworICAgICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25JbnRlcnNlY3Rp
b25FeGl0VHJpZ2dlciA9IDEzOworICAgIC8qKgorICAgICAqIE9uIGtleSBkb3duCisgICAgICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfYWN0aW9ucyN0
cmlnZ2VycworICAgICAqLworICAgIENvbnN0YW50cy5BQ1RJT05fT25LZXlEb3duVHJpZ2dlciA9
IDE0OworICAgIC8qKgorICAgICAqIE9uIGtleSB1cAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMjdHJpZ2dlcnMKKyAgICAgKi8K
KyAgICBDb25zdGFudHMuQUNUSU9OX09uS2V5VXBUcmlnZ2VyID0gMTU7CisgICAgLyoqCisgICAg
ICogQmlsbGJvYXJkIG1vZGUgd2lsbCBvbmx5IGFwcGx5IHRvIFkgYXhpcworICAgICAqLworICAg
IENvbnN0YW50cy5QQVJUSUNMRVNfQklMTEJPQVJETU9ERV9ZID0gMjsKKyAgICAvKioKKyAgICAg
KiBCaWxsYm9hcmQgbW9kZSB3aWxsIGFwcGx5IHRvIGFsbCBheGVzCisgICAgICovCisgICAgQ29u
c3RhbnRzLlBBUlRJQ0xFU19CSUxMQk9BUkRNT0RFX0FMTCA9IDc7CisgICAgLyoqCisgICAgICog
U3BlY2lhbCBiaWxsYm9hcmQgbW9kZSB3aGVyZSB0aGUgcGFydGljbGUgd2lsbCBiZSBiaWlsYm9h
cmQgdG8gdGhlIGNhbWVyYSBidXQgcm90YXRlZCB0byBhbGlnbiB3aXRoIGRpcmVjdGlvbgorICAg
ICAqLworICAgIENvbnN0YW50cy5QQVJUSUNMRVNfQklMTEJPQVJETU9ERV9TVFJFVENIRUQgPSA4
OworICAgIC8qKgorICAgICAqIEdldHMgb3Igc2V0cyBiYXNlIEFzc2V0cyBVUkwKKyAgICAgKi8K
KyAgICBDb25zdGFudHMuUEFSVElDTEVTX0Jhc2VBc3NldHNVcmwgPSAiaHR0cHM6Ly9hc3NldHMu
YmFieWxvbmpzLmNvbS9wYXJ0aWNsZXMiOworICAgIC8qKiBEZWZhdWx0IGN1bGxpbmcgc3RyYXRl
Z3kgOiB0aGlzIGlzIGFuIGV4Y2x1c2lvbiB0ZXN0IGFuZCBpdCdzIHRoZSBtb3JlIGFjY3VyYXRl
LgorICAgICAqICBUZXN0IG9yZGVyIDoKKyAgICAgKiAgSXMgdGhlIGJvdW5kaW5nIHNwaGVyZSBv
dXRzaWRlIHRoZSBmcnVzdHVtID8KKyAgICAgKiAgSWYgbm90LCBhcmUgdGhlIGJvdW5kaW5nIGJv
eCB2ZXJ0aWNlcyBvdXRzaWRlIHRoZSBmcnVzdHVtID8KKyAgICAgKiAgSXQgbm90LCB0aGVuIHRo
ZSBjdWxsYWJsZSBvYmplY3QgaXMgaW4gdGhlIGZydXN0dW0uCisgICAgICovCisgICAgQ29uc3Rh
bnRzLk1FU0hFU19DVUxMSU5HU1RSQVRFR1lfU1RBTkRBUkQgPSAwOworICAgIC8qKiBDdWxsaW5n
IHN0cmF0ZWd5IDogQm91bmRpbmcgU3BoZXJlIE9ubHkuCisgICAgICogIFRoaXMgaXMgYW4gZXhj
bHVzaW9uIHRlc3QuIEl0J3MgZmFzdGVyIHRoYW4gdGhlIHN0YW5kYXJkIHN0cmF0ZWd5IGJlY2F1
c2UgdGhlIGJvdW5kaW5nIGJveCBpcyBub3QgdGVzdGVkLgorICAgICAqICBJdCdzIGFsc28gbGVz
cyBhY2N1cmF0ZSB0aGFuIHRoZSBzdGFuZGFyZCBiZWNhdXNlIHNvbWUgbm90IHZpc2libGUgb2Jq
ZWN0cyBjYW4gc3RpbGwgYmUgc2VsZWN0ZWQuCisgICAgICogIFRlc3QgOiBpcyB0aGUgYm91bmRp
bmcgc3BoZXJlIG91dHNpZGUgdGhlIGZydXN0dW0gPworICAgICAqICBJZiBub3QsIHRoZW4gdGhl
IGN1bGxhYmxlIG9iamVjdCBpcyBpbiB0aGUgZnJ1c3R1bS4KKyAgICAgKi8KKyAgICBDb25zdGFu
dHMuTUVTSEVTX0NVTExJTkdTVFJBVEVHWV9CT1VORElOR1NQSEVSRV9PTkxZID0gMTsKKyAgICAv
KiogQ3VsbGluZyBzdHJhdGVneSA6IE9wdGltaXN0aWMgSW5jbHVzaW9uLgorICAgICAqICBUaGlz
IGluIGFuIGluY2x1c2lvbiB0ZXN0IGZpcnN0LCB0aGVuIHRoZSBzdGFuZGFyZCBleGNsdXNpb24g
dGVzdC4KKyAgICAgKiAgVGhpcyBjYW4gYmUgZmFzdGVyIHdoZW4gYSBjdWxsYWJsZSBvYmplY3Qg
aXMgZXhwZWN0ZWQgdG8gYmUgYWxtb3N0IGFsd2F5cyBpbiB0aGUgY2FtZXJhIGZydXN0dW0uCisg
ICAgICogIFRoaXMgY291bGQgYWxzbyBiZSBhIGxpdHRsZSBzbG93ZXIgdGhhbiB0aGUgc3RhbmRh
cmQgdGVzdCB3aGVuIHRoZSB0ZXN0ZWQgb2JqZWN0IGNlbnRlciBpcyBub3QgdGhlIGZydXN0dW0g
YnV0IG9uZSBvZiBpdHMgYm91bmRpbmcgYm94IHZlcnRleCBpcyBzdGlsbCBpbnNpZGUuCisgICAg
ICogIEFueXdheSwgaXQncyBhcyBhY2N1cmF0ZSBhcyB0aGUgc3RhbmRhcmQgc3RyYXRlZ3kuCisg
ICAgICogIFRlc3QgOgorICAgICAqICBJcyB0aGUgY3VsbGFibGUgb2JqZWN0IGJvdW5kaW5nIHNw
aGVyZSBjZW50ZXIgaW4gdGhlIGZydXN0dW0gPworICAgICAqICBJZiBub3QsIGFwcGx5IHRoZSBk
ZWZhdWx0IGN1bGxpbmcgc3RyYXRlZ3kuCisgICAgICovCisgICAgQ29uc3RhbnRzLk1FU0hFU19D
VUxMSU5HU1RSQVRFR1lfT1BUSU1JU1RJQ19JTkNMVVNJT04gPSAyOworICAgIC8qKiBDdWxsaW5n
IHN0cmF0ZWd5IDogT3B0aW1pc3RpYyBJbmNsdXNpb24gdGhlbiBCb3VuZGluZyBTcGhlcmUgT25s
eS4KKyAgICAgKiAgVGhpcyBpbiBhbiBpbmNsdXNpb24gdGVzdCBmaXJzdCwgdGhlbiB0aGUgYm91
bmRpbmcgc3BoZXJlIG9ubHkgZXhjbHVzaW9uIHRlc3QuCisgICAgICogIFRoaXMgY2FuIGJlIHRo
ZSBmYXN0ZXN0IHRlc3Qgd2hlbiBhIGN1bGxhYmxlIG9iamVjdCBpcyBleHBlY3RlZCB0byBiZSBh
bG1vc3QgYWx3YXlzIGluIHRoZSBjYW1lcmEgZnJ1c3R1bS4KKyAgICAgKiAgVGhpcyBjb3VsZCBh
bHNvIGJlIGEgbGl0dGxlIHNsb3dlciB0aGFuIHRoZSBCb3VuZGluZ1NwaGVyZU9ubHkgc3RyYXRl
Z3kgd2hlbiB0aGUgdGVzdGVkIG9iamVjdCBjZW50ZXIgaXMgbm90IGluIHRoZSBmcnVzdHVtIGJ1
dCBpdHMgYm91bmRpbmcgc3BoZXJlIHN0aWxsIGludGVyc2VjdHMgaXQuCisgICAgICogIEl0J3Mg
bGVzcyBhY2N1cmF0ZSB0aGFuIHRoZSBzdGFuZGFyZCBzdHJhdGVneSBhbmQgYXMgYWNjdXJhdGUg
YXMgdGhlIEJvdW5kaW5nU3BoZXJlT25seSBzdHJhdGVneS4KKyAgICAgKiAgVGVzdCA6CisgICAg
ICogIElzIHRoZSBjdWxsYWJsZSBvYmplY3QgYm91bmRpbmcgc3BoZXJlIGNlbnRlciBpbiB0aGUg
ZnJ1c3R1bSA/CisgICAgICogIElmIG5vdCwgYXBwbHkgdGhlIEJvdW5kaW5nIFNwaGVyZSBPbmx5
IHN0cmF0ZWd5LiBObyBCb3VuZGluZyBCb3ggaXMgdGVzdGVkIGhlcmUuCisgICAgICovCisgICAg
Q29uc3RhbnRzLk1FU0hFU19DVUxMSU5HU1RSQVRFR1lfT1BUSU1JU1RJQ19JTkNMVVNJT05fVEhF
Tl9CU1BIRVJFX09OTFkgPSAzOworICAgIC8qKgorICAgICAqIE5vIGxvZ2dpbmcgd2hpbGUgbG9h
ZGluZworICAgICAqLworICAgIENvbnN0YW50cy5TQ0VORUxPQURFUl9OT19MT0dHSU5HID0gMDsK
KyAgICAvKioKKyAgICAgKiBNaW5pbWFsIGxvZ2dpbmcgd2hpbGUgbG9hZGluZworICAgICAqLwor
ICAgIENvbnN0YW50cy5TQ0VORUxPQURFUl9NSU5JTUFMX0xPR0dJTkcgPSAxOworICAgIC8qKgor
ICAgICAqIFN1bW1hcnkgbG9nZ2luZyB3aGlsZSBsb2FkaW5nCisgICAgICovCisgICAgQ29uc3Rh
bnRzLlNDRU5FTE9BREVSX1NVTU1BUllfTE9HR0lORyA9IDI7CisgICAgLyoqCisgICAgICogRGV0
YWlsbGVkIGxvZ2dpbmcgd2hpbGUgbG9hZGluZworICAgICAqLworICAgIENvbnN0YW50cy5TQ0VO
RUxPQURFUl9ERVRBSUxFRF9MT0dHSU5HID0gMzsKKyAgICByZXR1cm4gQ29uc3RhbnRzOworfSgp
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvZW5naW5lLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBJbnN0YW5jaW5nQXR0cmlidXRlSW5mbywgRGVwdGhUZXh0dXJlQ3JlYXRpb25PcHRpb25z
LCBFbmdpbmVDYXBhYmlsaXRpZXMsIEVuZ2luZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJJbnN0YW5jaW5nQXR0cmlidXRlSW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
SW5zdGFuY2luZ0F0dHJpYnV0ZUluZm87IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhUZXh0
dXJlQ3JlYXRpb25PcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEZXB0aFRleHR1cmVDcmVh
dGlvbk9wdGlvbnM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRW5naW5lQ2FwYWJpbGl0aWVzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBFbmdpbmVDYXBhYmlsaXRpZXM7IH0pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFbmdpbmU7IH0pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGli
LmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01p
c2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWlzY19wZXJmb3JtYW5jZU1vbml0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvcGVyZm9ybWFuY2VNb25p
dG9yICovICIuL01pc2MvcGVyZm9ybWFuY2VNb25pdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2Nfc3RyaW5nRGljdGlvbmFyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9zdHJpbmdEaWN0aW9uYXJ5ICov
ICIuL01pc2Mvc3RyaW5nRGljdGlvbmFyeS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZl
Y3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2lu
dGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZSAqLyAiLi9N
YXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJuYWxUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1N0YXRlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU3RhdGVzL2luZGV4ICovICIuL1N0YXRlcy9pbmRleC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29uc3RhbnRzICovICIu
L0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
ZG9tTWFuYWdlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWlzYy9kb21NYW5hZ2VtZW50ICovICIuL01pc2MvZG9tTWFuYWdlbWVu
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dn
ZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZW5n
aW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5lU3RvcmUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldENy
ZWF0aW9uT3B0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRDcmVhdGlvbk9w
dGlvbnMgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRlclRhcmdldENyZWF0aW9uT3B0aW9u
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RldlRvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9k
ZXZUb29scyAqLyAiLi9NaXNjL2RldlRvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1dlYkdMX3dlYkdMUGlwZWxpbmVDb250ZXh0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9XZWJHTC93ZWJHTFBpcGVsaW5lQ29udGV4
dCAqLyAiLi9FbmdpbmVzL1dlYkdML3dlYkdMUGlwZWxpbmVDb250ZXh0LnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01lc2hlc19XZWJHTF93ZWJHTERhdGFCdWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMv
V2ViR0wvd2ViR0xEYXRhQnVmZmVyICovICIuL01lc2hlcy9XZWJHTC93ZWJHTERhdGFCdWZmZXIu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfV2ViR0xfd2ViR0wyU2hhZGVyUHJvY2Vz
c29yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vV2ViR0wvd2ViR0wyU2hhZGVyUHJvY2Vzc29ycyAqLyAiLi9FbmdpbmVzL1dlYkdML3dl
YkdMMlNoYWRlclByb2Nlc3NvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlz
Y19wZXJmQ291bnRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvcGVyZkNvdW50ZXIgKi8gIi4vTWlzYy9wZXJmQ291bnRlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2ZpbGVUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZmls
ZVRvb2xzICovICIuL01pc2MvZmlsZVRvb2xzLnRzIik7CisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisvKioKKyAqIEtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgYnVmZmVyIGluZm8g
dXNlZCBpbiBlbmdpbmUuCisgKi8KK3ZhciBCdWZmZXJQb2ludGVyID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEJ1ZmZlclBvaW50ZXIoKSB7CisgICAgfQorICAg
IHJldHVybiBCdWZmZXJQb2ludGVyOworfSgpKTsKKy8qKgorICogSW50ZXJmYWNlIGZvciBhdHRy
aWJ1dGUgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGJ1ZmZlciBpbnN0YW5jaWF0aW9uCisg
Ki8KK3ZhciBJbnN0YW5jaW5nQXR0cmlidXRlSW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICBmdW5jdGlvbiBJbnN0YW5jaW5nQXR0cmlidXRlSW5mbygpIHsKKyAgICB9Cisg
ICAgcmV0dXJuIEluc3RhbmNpbmdBdHRyaWJ1dGVJbmZvOworfSgpKTsKKworLyoqCisgKiBEZWZp
bmUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSBhIGRlcHRoIHRleHR1cmUKKyAqLwordmFyIERlcHRo
VGV4dHVyZUNyZWF0aW9uT3B0aW9ucyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICBmdW5jdGlvbiBEZXB0aFRleHR1cmVDcmVhdGlvbk9wdGlvbnMoKSB7CisgICAgfQorICAgIHJl
dHVybiBEZXB0aFRleHR1cmVDcmVhdGlvbk9wdGlvbnM7Cit9KCkpOworCisvKioKKyAqIENsYXNz
IHVzZWQgdG8gZGVzY3JpYmUgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZW5naW5lIHJlbGF0aXZl
bHkgdG8gdGhlIGN1cnJlbnQgYnJvd3NlcgorICovCit2YXIgRW5naW5lQ2FwYWJpbGl0aWVzID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEVuZ2luZUNhcGFiaWxp
dGllcygpIHsKKyAgICAgICAgLyoqIE1heCBudW1iZXIgb2YgdGV4dHVyZSBzYW1wbGVzIGZvciBN
U0FBICovCisgICAgICAgIHRoaXMubWF4TVNBQVNhbXBsZXMgPSAxOworICAgIH0KKyAgICByZXR1
cm4gRW5naW5lQ2FwYWJpbGl0aWVzOworfSgpKTsKKworLyoqCisgKiBUaGUgZW5naW5lIGNsYXNz
IGlzIHJlc3BvbnNpYmxlIGZvciBpbnRlcmZhY2luZyB3aXRoIGFsbCBsb3dlci1sZXZlbCBBUElz
IHN1Y2ggYXMgV2ViR0wgYW5kIEF1ZGlvCisgKi8KK3ZhciBFbmdpbmUgPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBlbmdpbmUKKyAg
ICAgKiBAcGFyYW0gY2FudmFzT3JDb250ZXh0IGRlZmluZXMgdGhlIGNhbnZhcyBvciBXZWJHTCBj
b250ZXh0IHRvIHVzZSBmb3IgcmVuZGVyaW5nLiBJZiB5b3UgcHJvdmlkZSBhIFdlYkdMIGNvbnRl
eHQsIEJhYnlsb24uanMgd2lsbCBub3QgaG9vayBldmVudHMgb24gdGhlIGNhbnZhcyAobGlrZSBw
b2ludGVycywga2V5Ym9hcmRzLCBldGMuLi4pIHNvIG5vIGV2ZW50IG9ic2VydmFibGVzIHdpbGwg
YmUgYXZhaWxhYmxlLiBUaGlzIGlzIG1vc3RseSB1c2VkIHdoZW4gQmFieWxvbi5qcyBpcyB1c2Vk
IGFzIGEgcGx1Z2luIG9uIGEgc3lzdGVtIHdoaWNoIGFscmVheSB1c2VkIHRoZSBXZWJHTCBjb250
ZXh0CisgICAgICogQHBhcmFtIGFudGlhbGlhcyBkZWZpbmVzIGVuYWJsZSBhbnRpYWxpYXNpbmcg
KGRlZmF1bHQ6IGZhbHNlKQorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgZnVydGhlciBv
cHRpb25zIHRvIGJlIHNlbnQgdG8gdGhlIGdldENvbnRleHQoKSBmdW5jdGlvbgorICAgICAqIEBw
YXJhbSBhZGFwdFRvRGV2aWNlUmF0aW8gZGVmaW5lcyB3aGV0aGVyIHRvIGFkYXB0IHRvIHRoZSBk
ZXZpY2UncyB2aWV3cG9ydCBjaGFyYWN0ZXJpc3RpY3MgKGRlZmF1bHQ6IGZhbHNlKQorICAgICAq
LworICAgIGZ1bmN0aW9uIEVuZ2luZShjYW52YXNPckNvbnRleHQsIGFudGlhbGlhcywgb3B0aW9u
cywgYWRhcHRUb0RldmljZVJhdGlvKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIGlmIChhZGFwdFRvRGV2aWNlUmF0aW8gPT09IHZvaWQgMCkgeyBhZGFwdFRvRGV2aWNlUmF0
aW8gPSBmYWxzZTsgfQorICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9v
bGVhbiB0aGF0IGluZGljYXRlcyBpZiB0ZXh0dXJlcyBtdXN0IGJlIGZvcmNlZCB0byBwb3dlciBv
ZiAyIHNpemUgZXZlbiBpZiBub3QgcmVxdWlyZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
Zm9yY2VQT1RUZXh0dXJlcyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBh
IGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgZW5naW5lIGlzIGN1cnJlbnRseSByZW5kZXJpbmcg
aW4gZnVsbHNjcmVlbiBtb2RlCisgICAgICAgICAqLworICAgICAgICB0aGlzLmlzRnVsbHNjcmVl
biA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNh
dGluZyBpZiB0aGUgcG9pbnRlciBpcyBjdXJyZW50bHkgbG9ja2VkCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLmlzUG9pbnRlckxvY2sgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBiYWNrIGZhY2VzIG11c3QgYmUg
Y3VsbGVkICh0cnVlIGJ5IGRlZmF1bHQpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmN1bGxC
YWNrRmFjZXMgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBlbmdpbmUgbXVzdCBrZWVwIHJlbmRlcmluZyBldmVu
IGlmIHRoZSB3aW5kb3cgaXMgbm90IGluIGZvcmVncm91bgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5yZW5kZXJFdmVuSW5CYWNrZ3JvdW5kID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGNhY2hlIGNhbiBiZSBr
ZXB0IGJldHdlZW4gZnJhbWVzCisgICAgICAgICAqLworICAgICAgICB0aGlzLnByZXZlbnRDYWNo
ZVdpcGVCZXR3ZWVuRnJhbWVzID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IG9yIHNldHMgYSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIEluZGV4ZWREQiBzdXBwb3J0IGFu
ZCBhdm9pZCBYSFIgb24gLm1hbmlmZXN0CisgICAgICAgICAqKi8KKyAgICAgICAgdGhpcy5lbmFi
bGVPZmZsaW5lU3VwcG9ydCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBv
ciBzZXRzIGEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjaGVja2luZyBtYW5pZmVzdCBpZiBJ
bmRleGVkREIgc3VwcG9ydCBpcyBlbmFibGVkIChqcyB3aWxsIGFsd2F5cyBjb25zaWRlciB0aGUg
ZGF0YWJhc2UgaXMgdXAgdG8gZGF0ZSkKKyAgICAgICAgICoqLworICAgICAgICB0aGlzLmRpc2Fi
bGVNYW5pZmVzdENoZWNrID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBsaXN0IG9mIGNyZWF0ZWQgc2NlbmVzCisgICAgICAgICAqLworICAgICAgICB0aGlzLnNjZW5l
cyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogRXZlbnQgcmFpc2VkIHdo
ZW4gYSBuZXcgc2NlbmUgaXMgY3JlYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbk5l
d1NjZW5lQWRkZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBsaXN0IG9mIGNyZWF0ZWQgcG9zdHByb2Nlc3NlcworICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5wb3N0UHJvY2Vzc2VzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKiBHZXRz
IG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGVuZ2luZSBzaG91bGQgdmFsaWRh
dGUgcHJvZ3JhbXMgYWZ0ZXIgY29tcGlsYXRpb24gKi8KKyAgICAgICAgdGhpcy52YWxpZGF0ZVNo
YWRlclByb2dyYW1zID0gZmFsc2U7CisgICAgICAgIC8vIE9ic2VydmFibGVzCisgICAgICAgIC8q
KgorICAgICAgICAgKiBPYnNlcnZhYmxlIGV2ZW50IHRyaWdnZXJlZCBlYWNoIHRpbWUgdGhlIHJl
bmRlcmluZyBjYW52YXMgaXMgcmVzaXplZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vblJl
c2l6ZU9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2Vy
dmFibGUgZXZlbnQgdHJpZ2dlcmVkIGVhY2ggdGltZSB0aGUgY2FudmFzIGxvc2VzIGZvY3VzCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLm9uQ2FudmFzQmx1ck9ic2VydmFibGUgPSBuZXcgX01p
c2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0o
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgZXZlbnQgdHJpZ2dlcmVkIGVh
Y2ggdGltZSB0aGUgY2FudmFzIGdhaW5zIGZvY3VzCisgICAgICAgICAqLworICAgICAgICB0aGlz
Lm9uQ2FudmFzRm9jdXNPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBPYnNlcnZhYmxlIGV2ZW50IHRyaWdnZXJlZCBlYWNoIHRpbWUgdGhlIGNhbnZhcyByZWNl
aXZlcyBwb2ludGVyb3V0IGV2ZW50CisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uQ2FudmFz
UG9pbnRlck91dE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IE9ic2VydmFibGUgZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSBlYWNoIHRleHR1cmUgaXMgaW5pdGlh
bGl6ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25CZWZvcmVUZXh0dXJlSW5pdE9ic2Vy
dmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLy8gVW5pZm9ybSBidWZmZXJzIGxpc3QKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0
IHVuaWZvcm0gYnVmZmVycyBtdXN0IGJlIGRpc2FibGVkIGV2ZW4gaWYgdGhleSBhcmUgc3VwcG9y
dGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLmRpc2FibGVVbmlmb3JtQnVmZmVycyA9IGZh
bHNlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVy
cyA9IG5ldyBBcnJheSgpOworICAgICAgICAvLyBPYnNlcnZhYmxlcworICAgICAgICAvKioKKyAg
ICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiB0aGUgZW5naW5lIGJlZ2lucyBhIG5ldyBm
cmFtZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkJlZ2luRnJhbWVPYnNlcnZhYmxlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBzZXQsIHdpbGwgYmUgdXNlZCB0
byByZXF1ZXN0IHRoZSBuZXh0IGFuaW1hdGlvbiBmcmFtZSBmb3IgdGhlIHJlbmRlciBsb29wCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmN1c3RvbUFuaW1hdGlvbkZyYW1lUmVxdWVzdGVyID0g
bnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgcmFpc2VkIHdoZW4gdGhl
IGVuZ2luZSBlbmRzIHRoZSBjdXJyZW50IGZyYW1lCisgICAgICAgICAqLworICAgICAgICB0aGlz
Lm9uRW5kRnJhbWVPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBPYnNlcnZhYmxlIHJhaXNlZCB3aGVuIHRoZSBlbmdpbmUgaXMgYWJvdXQgdG8gY29tcGlsZSBh
IHNoYWRlcgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkJlZm9yZVNoYWRlckNvbXBpbGF0
aW9uT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2
YWJsZSByYWlzZWQgd2hlbiB0aGUgZW5naW5lIGhhcyBqc3V0IGNvbXBpbGVkIGEgc2hhZGVyCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLm9uQWZ0ZXJTaGFkZXJDb21waWxhdGlvbk9ic2VydmFi
bGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJP
YnNlcnZhYmxlIl0oKTsKKyAgICAgICAgdGhpcy5fd2luZG93SXNCYWNrZ3JvdW5kID0gZmFsc2U7
CisgICAgICAgIHRoaXMuX3dlYkdMVmVyc2lvbiA9IDEuMDsKKyAgICAgICAgdGhpcy5faGlnaFBy
ZWNpc2lvblNoYWRlcnNBbGxvd2VkID0gdHJ1ZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICAgICAgdGhpcy5fYmFkT1MgPSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAg
ICAgdGhpcy5fYmFkRGVza3RvcE9TID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NvbG9yV3JpdGUg
PSB0cnVlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9kcmF3Q2FsbHMg
PSBuZXcgX01pc2NfcGVyZkNvdW50ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIlBl
cmZDb3VudGVyIl0oKTsKKyAgICAgICAgdGhpcy5fcmVuZGVyaW5nUXVldWVMYXVuY2hlZCA9IGZh
bHNlOworICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJMb29wcyA9IG5ldyBBcnJheSgpOworICAg
ICAgICAvLyBEZXRlcm1pbmlzdGljIGxvY2tzdGVwTWF4U3RlcHMKKyAgICAgICAgdGhpcy5fZGV0
ZXJtaW5pc3RpY0xvY2tzdGVwID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2xvY2tzdGVwTWF4U3Rl
cHMgPSA0OworICAgICAgICAvLyBMb3N0IGNvbnRleHQKKyAgICAgICAgLyoqCisgICAgICAgICAq
IE9ic2VydmFibGUgc2lnbmFsZWQgd2hlbiBhIGNvbnRleHQgbG9zdCBldmVudCBpcyByYWlzZWQK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMub25Db250ZXh0TG9zdE9ic2VydmFibGUgPSBuZXcg
X01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxl
Il0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgc2lnbmFsZWQgd2hlbiBh
IGNvbnRleHQgcmVzdG9yZWQgZXZlbnQgaXMgcmFpc2VkCisgICAgICAgICAqLworICAgICAgICB0
aGlzLm9uQ29udGV4dFJlc3RvcmVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0aGlz
Ll9jb250ZXh0V2FzTG9zdCA9IGZhbHNlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAg
ICB0aGlzLl9kb05vdEhhbmRsZUNvbnRleHRMb3N0ID0gZmFsc2U7CisgICAgICAgIC8vIEZQUwor
ICAgICAgICB0aGlzLl9wZXJmb3JtYW5jZU1vbml0b3IgPSBuZXcgX01pc2NfcGVyZm9ybWFuY2VN
b25pdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBlcmZvcm1hbmNlTW9uaXRvciJd
KCk7CisgICAgICAgIHRoaXMuX2ZwcyA9IDYwOworICAgICAgICB0aGlzLl9kZWx0YVRpbWUgPSAw
OworICAgICAgICAvKioKKyAgICAgICAgICogVHVybiB0aGlzIHZhbHVlIG9uIGlmIHlvdSB3YW50
IHRvIHBhdXNlIEZQUyBjb21wdXRhdGlvbiB3aGVuIGluIGJhY2tncm91bmQKKyAgICAgICAgICov
CisgICAgICAgIHRoaXMuZGlzYWJsZVBlcmZvcm1hbmNlTW9uaXRvckluQmFja2dyb3VuZCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRp
Y2F0aW5nIHRoYXQgdmVydGV4IGFycmF5IG9iamVjdCBtdXN0IGJlIGRpc2FibGVkIGV2ZW4gaWYg
dGhleSBhcmUgc3VwcG9ydGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLmRpc2FibGVWZXJ0
ZXhBcnJheU9iamVjdHMgPSBmYWxzZTsKKyAgICAgICAgLy8gU3RhdGVzCisgICAgICAgIC8qKiBA
aGlkZGVuICovCisgICAgICAgIHRoaXMuX2RlcHRoQ3VsbGluZ1N0YXRlID0gbmV3IF9TdGF0ZXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siX0RlcHRoQ3VsbGluZ1N0YXRlIl0o
KTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fc3RlbmNpbFN0YXRlID0g
bmV3IF9TdGF0ZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siX1N0ZW5jaWxT
dGF0ZSJdKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2FscGhhU3Rh
dGUgPSBuZXcgX1N0YXRlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJfQWxw
aGFTdGF0ZSJdKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2FscGhh
TW9kZSA9IEVuZ2luZS5BTFBIQV9ESVNBQkxFOworICAgICAgICAvLyBDYWNoZQorICAgICAgICAv
KiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2FjaGUgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fYWN0aXZlQ2hh
bm5lbCA9IDA7CisgICAgICAgIHRoaXMuX2N1cnJlbnRUZXh0dXJlQ2hhbm5lbCA9IC0xOworICAg
ICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9ib3VuZFRleHR1cmVzQ2FjaGUgPSB7
fTsKKyAgICAgICAgdGhpcy5fY29tcGlsZWRFZmZlY3RzID0ge307CisgICAgICAgIHRoaXMuX3Zl
cnRleEF0dHJpYkFycmF5c0VuYWJsZWQgPSBbXTsKKyAgICAgICAgdGhpcy5fdWludEluZGljZXND
dXJyZW50bHlTZXQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kQnVmZmVyID0g
bmV3IEFycmF5KCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2N1cnJl
bnRGcmFtZWJ1ZmZlciA9IG51bGw7CisgICAgICAgIHRoaXMuX2N1cnJlbnRCdWZmZXJQb2ludGVy
cyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLl9jdXJyZW50SW5zdGFuY2VMb2NhdGlvbnMg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fY3VycmVudEluc3RhbmNlQnVmZmVycyA9IG5l
dyBBcnJheSgpOworICAgICAgICB0aGlzLl92YW9SZWNvcmRJblByb2dyZXNzID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMuX211c3RXaXBlVmVydGV4QXR0cmlidXRlcyA9IGZhbHNlOworICAgICAgICB0
aGlzLl9uZXh0RnJlZVRleHR1cmVTbG90cyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLl9t
YXhTaW11bHRhbmVvdXNUZXh0dXJlcyA9IDA7CisgICAgICAgIHRoaXMuX2FjdGl2ZVJlcXVlc3Rz
ID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8vIEhhcmR3YXJlIHN1cHBvcnRlZCBDb21wcmVzc2Vk
IFRleHR1cmVzCisgICAgICAgIHRoaXMuX3RleHR1cmVzU3VwcG9ydGVkID0gbmV3IEFycmF5KCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIGVuZ2luZSBoYXMg
YmVlbiBjcmVhdGVkIHdpdGggdGhlIHByZW11bHRpcGxpZWRBbHBoYSBvcHRpb24gb24gb3Igbm90
LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlOwor
ICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9pc1dlYkdQVSA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl92aWV3cG9ydENhY2hlZCA9IHsgeDogMCwgeTogMCwgejogMCwgdzogMCB9
OworICAgICAgICB0aGlzLl91bnBhY2tGbGlwWUNhY2hlZCA9IG51bGw7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBJbiBjYXNlIHlvdSBhcmUgc2hhcmluZyB0aGUgY29udGV4dCB3aXRoIG90aGVy
IGFwcGxpY2F0aW9ucywgaXQgbWlnaHQKKyAgICAgICAgICogYmUgaW50ZXJlc3RlZCB0byBub3Qg
Y2FjaGUgdGhlIHVucGFjayBmbGlwIHkgc3RhdGUgdG8gZW5zdXJlIGEgY29uc2lzdGVudAorICAg
ICAgICAgKiB2YWx1ZSB3b3VsZCBiZSBzZXQuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmVu
YWJsZVVucGFja0ZsaXBZQ2FjaGVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fYm91bmRVbmlmb3Jt
cyA9IHt9OworICAgICAgICB2YXIgY2FudmFzID0gbnVsbDsKKyAgICAgICAgRW5naW5lLkluc3Rh
bmNlcy5wdXNoKHRoaXMpOworICAgICAgICBpZiAoIWNhbnZhc09yQ29udGV4dCkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9
OworICAgICAgICBpZiAoY2FudmFzT3JDb250ZXh0LmdldENvbnRleHQpIHsKKyAgICAgICAgICAg
IGlmIChvcHRpb25zLnByZW11bHRpcGxpZWRBbHBoYSA9PT0gZmFsc2UpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGFudGlhbGlhcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgb3B0aW9u
cy5hbnRpYWxpYXMgPSBhbnRpYWxpYXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
b3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgICAgIG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAob3B0aW9ucy5zdGVuY2lsID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgICAgICBvcHRpb25zLnN0ZW5jaWwgPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG9wdGlvbnMuZGV0ZXJtaW5pc3RpY0xvY2tzdGVwID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgICAgICBvcHRpb25zLmRldGVybWluaXN0aWNMb2Nrc3RlcCA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9wdGlvbnMubG9ja3N0ZXBNYXhTdGVw
cyA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2Nrc3RlcE1heFN0
ZXBzID0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLmF1ZGlvRW5n
aW5lID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zLmF1ZGlvRW5naW5l
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2RldGVybWluaXN0aWNM
b2Nrc3RlcCA9IG9wdGlvbnMuZGV0ZXJtaW5pc3RpY0xvY2tzdGVwOworICAgICAgICAgICAgdGhp
cy5fbG9ja3N0ZXBNYXhTdGVwcyA9IG9wdGlvbnMubG9ja3N0ZXBNYXhTdGVwczsKKyAgICAgICAg
ICAgIHRoaXMuX2RvTm90SGFuZGxlQ29udGV4dExvc3QgPSBvcHRpb25zLmRvTm90SGFuZGxlQ29u
dGV4dExvc3QgPyB0cnVlIDogZmFsc2U7CisgICAgICAgICAgICAvLyBFeGNlcHRpb25zCisgICAg
ICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50OworICAgICAgICAgICAgICAgIGZv
ciAodmFyIF9pID0gMCwgX2EgPSBFbmdpbmUuRXhjZXB0aW9uTGlzdDsgX2kgPCBfYS5sZW5ndGg7
IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGV4Y2VwdGlvbiA9IF9hW19pXTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGV4Y2VwdGlvbi5rZXk7CisgICAgICAgICAgICAg
ICAgICAgIHZhciB0YXJnZXRzID0gZXhjZXB0aW9uLnRhcmdldHM7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBjaGVjayA9IG5ldyBSZWdFeHAoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNoZWNrLnRlc3QodWEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9u
LmNhcHR1cmUgJiYgZXhjZXB0aW9uLmNhcHR1cmVDb25zdHJhaW50KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGNhcHR1cmUgPSBleGNlcHRpb24uY2FwdHVyZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgY29uc3RyYWludCA9IGV4Y2VwdGlvbi5jYXB0dXJlQ29u
c3RyYWludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVnZXggPSBuZXcgUmVn
RXhwKGNhcHR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzID0g
cmVnZXguZXhlYyh1YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMg
JiYgbWF0Y2hlcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBjYXB0dXJlZFZhbHVlID0gcGFyc2VJbnQobWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFd
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhcHR1cmVkVmFsdWUgPj0g
Y29uc3RyYWludCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHZhciBfYiA9IDAsIHRhcmdldHNfMSA9IHRhcmdldHM7IF9iIDwgdGFyZ2V0
c18xLmxlbmd0aDsgX2IrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXJn
ZXQgPSB0YXJnZXRzXzFbX2JdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInVuaWZvcm1C
dWZmZXIiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxl
VW5pZm9ybUJ1ZmZlcnMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInZhbyI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVWZXJ0ZXhBcnJh
eU9iamVjdHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FudmFzID0gY2FudmFzT3JDb250ZXh0OworICAgICAgICAgICAg
Ly8gR0wKKyAgICAgICAgICAgIGlmICghb3B0aW9ucy5kaXNhYmxlV2ViR0wyU3VwcG9ydCkgewor
ICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dsID0gKGNh
bnZhcy5nZXRDb250ZXh0KCJ3ZWJnbDIiLCBvcHRpb25zKSB8fCBjYW52YXMuZ2V0Q29udGV4dCgi
ZXhwZXJpbWVudGFsLXdlYmdsMiIsIG9wdGlvbnMpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMuX2dsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93ZWJHTFZlcnNpb24g
PSAyLjA7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGFkZXJQbGF0Zm9ybU5hbWUg
PSAiV0VCR0wyIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgd2VpcmQgYnJv
d3NlcnMgdG8gbGllIDotKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9nbC5k
ZWxldGVRdWVyeSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlYkdMVmVy
c2lvbiA9IDEuMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGFkZXJQbGF0
Zm9ybU5hbWUgPSAiV0VCR0wxIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAo
ZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0aGlzLl9nbCkgeworICAgICAgICAg
ICAgICAgIGlmICghY2FudmFzKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiVGhlIHByb3ZpZGVkIGNhbnZhcyBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5fZ2wgPSAoY2FudmFzLmdldENvbnRleHQoIndlYmdsIiwgb3B0aW9ucykgfHwgY2FudmFzLmdl
dENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsIG9wdGlvbnMpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJXZWJHTCBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0aGlzLl9nbCkgeworICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiV2ViR0wgbm90IHN1cHBvcnRlZCIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5fc2hhcmVkSW5pdChjYW52YXMsICEhb3B0aW9ucy5kb05vdEhh
bmRsZVRvdWNoQWN0aW9uLCBvcHRpb25zLmF1ZGlvRW5naW5lKTsKKyAgICAgICAgICAgIC8vIEVu
c3VyZXMgYSBjb25zaXN0ZW50IGNvbG9yIHNwYWNlIHVucGFja2luZyBvZiB0ZXh0dXJlcyBjcm9z
cyBicm93c2VyLgorICAgICAgICAgICAgdGhpcy5fZ2wucGl4ZWxTdG9yZWkodGhpcy5fZ2wuVU5Q
QUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCwgdGhpcy5fZ2wuTk9ORSk7CisgICAgICAg
ICAgICAvLyBDb250ZXh0IGxvc3QKKyAgICAgICAgICAgIGlmICghdGhpcy5fZG9Ob3RIYW5kbGVD
b250ZXh0TG9zdCkgeworICAgICAgICAgICAgICAgIHRoaXMuX29uQ29udGV4dExvc3QgPSBmdW5j
dGlvbiAoZXZ0KSB7CisgICAgICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOwor
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY29udGV4dFdhc0xvc3QgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
TG9nZ2VyIl0uV2FybigiV2ViR0wgY29udGV4dCBsb3N0LiIpOworICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5vbkNvbnRleHRMb3N0T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoX3RoaXMpOwor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdGhpcy5fb25Db250ZXh0UmVzdG9y
ZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFkZGluZyBhIHRpbWVv
dXQgdG8gYXZvaWQgcmFjZSBjb25kaXRpb24gYXQgYnJvd3NlciBsZXZlbAorICAgICAgICAgICAg
ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFJlYnVpbGQgZ2wgY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2lu
aXRHTENvbnRleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYnVpbGQgZWZmZWN0
cworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3JlYnVpbGRFZmZlY3RzKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBSZWJ1aWxkIHRleHR1cmVzCisgICAgICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5fcmVidWlsZEludGVybmFsVGV4dHVyZXMoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlYnVpbGQgYnVmZmVycworICAgICAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuX3JlYnVpbGRCdWZmZXJzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMud2lwZUNhY2hlcyh0cnVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
WyJMb2dnZXIiXS5XYXJuKCJXZWJHTCBjb250ZXh0IHN1Y2Nlc3NmdWxseSByZXN0b3JlZC4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm9uQ29udGV4dFJlc3RvcmVkT2JzZXJ2YWJs
ZS5ub3RpZnlPYnNlcnZlcnMoX3RoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMu
X2NvbnRleHRXYXNMb3N0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0sIDApOworICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIo
IndlYmdsY29udGV4dGxvc3QiLCB0aGlzLl9vbkNvbnRleHRMb3N0LCBmYWxzZSk7CisgICAgICAg
ICAgICAgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIiwg
dGhpcy5fb25Db250ZXh0UmVzdG9yZWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBvcHRpb25z
LnBvd2VyUHJlZmVyZW5jZSA9ICJoaWdoLXBlcmZvcm1hbmNlIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2dsID0gY2FudmFzT3JD
b250ZXh0OworICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nQ2FudmFzID0gdGhpcy5fZ2wuY2Fu
dmFzOworICAgICAgICAgICAgaWYgKHRoaXMuX2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3dlYkdMVmVyc2lvbiA9IDIuMDsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9zaGFkZXJQbGF0Zm9ybU5hbWUgPSAiV0VCR0wyIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5fZ2wuZ2V0Q29udGV4dEF0
dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7CisgICAgICAgICAgICAg
ICAgb3B0aW9ucy5zdGVuY2lsID0gYXR0cmlidXRlcy5zdGVuY2lsOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGlmIChvcHRpb25zLnVzZUhpZ2hQcmVjaXNpb25GbG9hdHMgIT09
IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdGhpcy5faGlnaFByZWNpc2lvblNoYWRlcnNBbGxv
d2VkID0gb3B0aW9ucy51c2VIaWdoUHJlY2lzaW9uRmxvYXRzOworICAgICAgICB9CisgICAgICAg
IC8vIFZpZXdwb3J0CisgICAgICAgIHZhciBkZXZpY2VQaXhlbFJhdGlvID0gX01pc2NfZG9tTWFu
YWdlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJEb21NYW5hZ2VtZW50Il0uSXNX
aW5kb3dPYmplY3RFeGlzdCgpID8gKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEuMCkgOiAx
LjA7CisgICAgICAgIHZhciBsaW1pdERldmljZVJhdGlvID0gb3B0aW9ucy5saW1pdERldmljZVJh
dGlvIHx8IGRldmljZVBpeGVsUmF0aW87CisgICAgICAgIHRoaXMuX2hhcmR3YXJlU2NhbGluZ0xl
dmVsID0gYWRhcHRUb0RldmljZVJhdGlvID8gMS4wIC8gTWF0aC5taW4obGltaXREZXZpY2VSYXRp
bywgZGV2aWNlUGl4ZWxSYXRpbykgOiAxLjA7CisgICAgICAgIHRoaXMucmVzaXplKCk7CisgICAg
ICAgIHRoaXMuX2lzU3RlbmNpbEVuYWJsZSA9IG9wdGlvbnMuc3RlbmNpbCA/IHRydWUgOiBmYWxz
ZTsKKyAgICAgICAgdGhpcy5faW5pdEdMQ29udGV4dCgpOworICAgICAgICBpZiAoY2FudmFzKSB7
CisgICAgICAgICAgICB2YXIgYW55RG9jXzEgPSBkb2N1bWVudDsKKyAgICAgICAgICAgIC8vIEZ1
bGxzY3JlZW4KKyAgICAgICAgICAgIHRoaXMuX29uRnVsbHNjcmVlbkNoYW5nZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYW55RG9jXzEuZnVsbHNjcmVlbiAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmlzRnVsbHNjcmVlbiA9IGFueURvY18x
LmZ1bGxzY3JlZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGFueURvY18xLm1vekZ1bGxTY3JlZW4gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAg
ICAgICBfdGhpcy5pc0Z1bGxzY3JlZW4gPSBhbnlEb2NfMS5tb3pGdWxsU2NyZWVuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhbnlEb2NfMS53ZWJraXRJc0Z1
bGxTY3JlZW4gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5pc0Z1
bGxzY3JlZW4gPSBhbnlEb2NfMS53ZWJraXRJc0Z1bGxTY3JlZW47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFueURvY18xLm1zSXNGdWxsU2NyZWVuICE9PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuaXNGdWxsc2NyZWVuID0gYW55
RG9jXzEubXNJc0Z1bGxTY3JlZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vIFBvaW50ZXIgbG9jaworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5pc0Z1bGxzY3JlZW4g
JiYgX3RoaXMuX3BvaW50ZXJMb2NrUmVxdWVzdGVkICYmIGNhbnZhcykgeworICAgICAgICAgICAg
ICAgICAgICBFbmdpbmUuX1JlcXVlc3RQb2ludGVybG9jayhjYW52YXMpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCJmdWxsc2NyZWVuY2hhbmdlIiwgdGhpcy5fb25GdWxsc2NyZWVuQ2hhbmdlLCBmYWxzZSk7
CisgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3pmdWxsc2NyZWVuY2hh
bmdlIiwgdGhpcy5fb25GdWxsc2NyZWVuQ2hhbmdlLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1
bWVudC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIiwgdGhpcy5fb25G
dWxsc2NyZWVuQ2hhbmdlLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExp
c3RlbmVyKCJtc2Z1bGxzY3JlZW5jaGFuZ2UiLCB0aGlzLl9vbkZ1bGxzY3JlZW5DaGFuZ2UsIGZh
bHNlKTsKKyAgICAgICAgICAgIC8vIFBvaW50ZXIgbG9jaworICAgICAgICAgICAgdGhpcy5fb25Q
b2ludGVyTG9ja0NoYW5nZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5p
c1BvaW50ZXJMb2NrID0gKGFueURvY18xLm1velBvaW50ZXJMb2NrRWxlbWVudCA9PT0gY2FudmFz
IHx8CisgICAgICAgICAgICAgICAgICAgIGFueURvY18xLndlYmtpdFBvaW50ZXJMb2NrRWxlbWVu
dCA9PT0gY2FudmFzIHx8CisgICAgICAgICAgICAgICAgICAgIGFueURvY18xLm1zUG9pbnRlckxv
Y2tFbGVtZW50ID09PSBjYW52YXMgfHwKKyAgICAgICAgICAgICAgICAgICAgYW55RG9jXzEucG9p
bnRlckxvY2tFbGVtZW50ID09PSBjYW52YXMpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJsb2NrY2hhbmdlIiwgdGhpcy5fb25Q
b2ludGVyTG9ja0NoYW5nZSwgZmFsc2UpOworICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigibXNwb2ludGVybG9ja2NoYW5nZSIsIHRoaXMuX29uUG9pbnRlckxvY2tDaGFuZ2Us
IGZhbHNlKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1venBvaW50
ZXJsb2NrY2hhbmdlIiwgdGhpcy5fb25Qb2ludGVyTG9ja0NoYW5nZSwgZmFsc2UpOworICAgICAg
ICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0cG9pbnRlcmxvY2tjaGFuZ2Ui
LCB0aGlzLl9vblBvaW50ZXJMb2NrQ2hhbmdlLCBmYWxzZSk7CisgICAgICAgICAgICB0aGlzLl9j
b25uZWN0VlJFdmVudHMoY2FudmFzLCBhbnlEb2NfMSk7CisgICAgICAgIH0KKyAgICAgICAgLy8g
UHJlcGFyZSBidWZmZXIgcG9pbnRlcnMKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
Ll9jYXBzLm1heFZlcnRleEF0dHJpYnM7IGkrKykgeworICAgICAgICAgICAgdGhpcy5fY3VycmVu
dEJ1ZmZlclBvaW50ZXJzW2ldID0gbmV3IEJ1ZmZlclBvaW50ZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBMb2FkIFdlYlZSIERldmljZXMKKyAgICAgICAgdGhpcy5fcHJlcGFyZVZSQ29tcG9u
ZW50KCk7CisgICAgICAgIGlmIChvcHRpb25zLmF1dG9FbmFibGVXZWJWUikgeworICAgICAgICAg
ICAgdGhpcy5pbml0V2ViVlIoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBEZXRlY3QgaWYgd2Ug
YXJlIHJ1bm5pbmcgb24gYSBmYXVsdHkgYnVnZ3kgT1MuCisgICAgICAgIHRoaXMuX2JhZE9TID0g
L2lQYWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpIHx8IC9pUGhvbmUvaS50ZXN0KG5hdmln
YXRvci51c2VyQWdlbnQpOworICAgICAgICAvLyBEZXRlY3QgaWYgd2UgYXJlIHJ1bm5pbmcgb24g
YSBmYXVsdHkgYnVnZ3kgZGVza3RvcCBPUy4KKyAgICAgICAgdGhpcy5fYmFkRGVza3RvcE9TID0g
L14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50
KTsKKyAgICAgICAgY29uc29sZS5sb2coIkJhYnlsb24uanMgdiIgKyBFbmdpbmUuVmVyc2lvbiAr
ICIgLSAiICsgdGhpcy5kZXNjcmlwdGlvbik7CisgICAgICAgIHRoaXMuZW5hYmxlT2ZmbGluZVN1
cHBvcnQgPSBFbmdpbmUuT2ZmbGluZVByb3ZpZGVyRmFjdG9yeSAhPT0gdW5kZWZpbmVkOworICAg
IH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lLCAiSW5zdGFuY2VzIiwgeworICAg
ICAgICAvKiogR2V0cyB0aGUgbGlzdCBvZiBjcmVhdGVkIGVuZ2luZXMgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX2VuZ2luZVN0b3JlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMF9fWyJFbmdpbmVTdG9yZSJdLkluc3RhbmNlczsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuZ2luZSwgIkxhc3RDcmVhdGVk
RW5naW5lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGF0ZXN0IGNyZWF0
ZWQgZW5naW5lCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiBfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19b
IkVuZ2luZVN0b3JlIl0uTGFzdENyZWF0ZWRFbmdpbmU7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUsICJMYXN0Q3JlYXRlZFNjZW5lIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGF0ZXN0IGNyZWF0ZWQgc2NlbmUKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9l
bmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siRW5naW5lU3RvcmUiXS5M
YXN0Q3JlYXRlZFNjZW5lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBXaWxs
IGZsYWcgYWxsIG1hdGVyaWFscyBpbiBhbGwgc2NlbmVzIGluIGFsbCBlbmdpbmVzIGFzIGRpcnR5
IHRvIHRyaWdnZXIgbmV3IHNoYWRlciBjb21waWxhdGlvbgorICAgICAqIEBwYXJhbSBmbGFnIGRl
ZmluZXMgd2hpY2ggcGFydCBvZiB0aGUgbWF0ZXJpYWxzIG11c3QgYmUgbWFya2VkIGFzIGRpcnR5
CisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBkZWZpbmVzIGEgcHJlZGljYXRlIHVzZWQgdG8gZmls
dGVyIHdoaWNoIG1hdGVyaWFscyBzaG91bGQgYmUgYWZmZWN0ZWQKKyAgICAgKi8KKyAgICBFbmdp
bmUuTWFya0FsbE1hdGVyaWFsc0FzRGlydHkgPSBmdW5jdGlvbiAoZmxhZywgcHJlZGljYXRlKSB7
CisgICAgICAgIGZvciAodmFyIGVuZ2luZUluZGV4ID0gMDsgZW5naW5lSW5kZXggPCBFbmdpbmUu
SW5zdGFuY2VzLmxlbmd0aDsgZW5naW5lSW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGVuZ2lu
ZSA9IEVuZ2luZS5JbnN0YW5jZXNbZW5naW5lSW5kZXhdOworICAgICAgICAgICAgZm9yICh2YXIg
c2NlbmVJbmRleCA9IDA7IHNjZW5lSW5kZXggPCBlbmdpbmUuc2NlbmVzLmxlbmd0aDsgc2NlbmVJ
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgZW5naW5lLnNjZW5lc1tzY2VuZUluZGV4XS5tYXJr
QWxsTWF0ZXJpYWxzQXNEaXJ0eShmbGFnLCBwcmVkaWNhdGUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lLCAiTnBtUGFj
a2FnZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbnBt
IHBhY2thZ2Ugb2YgdGhlIHNkaworICAgICAgICAgKi8KKyAgICAgICAgLy8gTm90IG1peGVkIHdp
dGggVmVyc2lvbiBmb3IgdG9vbGluZyBwdXJwb3NlLgorICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiAiYmFieWxvbmpzQDQuMS4wLWFscGhhLjE3IjsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuZ2luZSwgIlZlcnNpb24i
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHZlcnNpb24g
b2YgdGhlIGZyYW1ld29yaworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gIjQuMS4wLWFscGhhLjE3IjsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuZ2luZS5wcm90b3R5cGUsICJkZXNjcmlwdGlv
biIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmlu
ZyB0aGUgY3VycmVudCBlbmdpbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gIldlYkdMIiArIHRoaXMud2ViR0xW
ZXJzaW9uOworICAgICAgICAgICAgaWYgKHRoaXMuX2NhcHMucGFyYWxsZWxTaGFkZXJDb21waWxl
KSB7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gIiAtIFBhcmFsbGVsIHNoYWRlciBj
b21waWxhdGlvbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRp
b247CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUs
ICJTaGFkZXJzUmVwb3NpdG9yeSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Ig
c2V0cyB0aGUgcmVsYXRpdmUgdXJsIHVzZWQgdG8gbG9hZCBzaGFkZXJzIGlmIHVzaW5nIHRoZSBl
bmdpbmUgaW4gbm9uLW1pbmlmaWVkIG1vZGUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIkVmZmVjdCJdLlNoYWRlcnNSZXBvc2l0b3J5OworICAgICAg
ICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgX01hdGVy
aWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRWZmZWN0Il0uU2hhZGVy
c1JlcG9zaXRvcnkgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICog
TWV0aG9kIGNhbGxlZCB0byBjcmVhdGUgdGhlIGRlZmF1bHQgbG9hZGluZyBzY3JlZW4uCisgICAg
ICogVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIGluIHlvdXIgb3duIGFwcC4KKyAgICAgKiBAcGFyYW0g
Y2FudmFzIFRoZSByZW5kZXJpbmcgY2FudmFzIGVsZW1lbnQKKyAgICAgKiBAcmV0dXJucyBUaGUg
bG9hZGluZyBzY3JlZW4KKyAgICAgKi8KKyAgICBFbmdpbmUuRGVmYXVsdExvYWRpbmdTY3JlZW5G
YWN0b3J5ID0gZnVuY3Rpb24gKGNhbnZhcykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgi
TG9hZGluZ1NjcmVlbiIpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuZ2lu
ZS5wcm90b3R5cGUsICJzdXBwb3J0c1VuaWZvcm1CdWZmZXJzIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBlbmdpbmUgc3VwcG9y
dHMgdW5pZm9ybSBidWZmZXJzCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2ZlYXR1cmVzL3dlYmdsMiN1bmlmb3JtLWJ1ZmZlci1vYmpldHMKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMud2ViR0xW
ZXJzaW9uID4gMSAmJiAhdGhpcy5kaXNhYmxlVW5pZm9ybUJ1ZmZlcnM7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAiX3Nob3Vs
ZFVzZUhpZ2hQcmVjaXNpb25TaGFkZXIiLCB7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHMuaGln
aFByZWNpc2lvblNoYWRlclN1cHBvcnRlZCAmJiB0aGlzLl9oaWdoUHJlY2lzaW9uU2hhZGVyc0Fs
bG93ZWQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdp
bmUucHJvdG90eXBlLCAibmVlZFBPVFRleHR1cmVzIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IG9ubHkgcG93ZXIgb2YgMiB0ZXh0dXJl
cyBhcmUgc3VwcG9ydGVkCisgICAgICAgICAqIFBsZWFzZSBub3RlIHRoYXQgeW91IGNhbiBzdGls
bCB1c2Ugbm9uIHBvd2VyIG9mIDIgdGV4dHVyZXMgYnV0IGluIHRoaXMgY2FzZSB0aGUgZW5naW5l
IHdpbGwgZm9yY2VmdWxseSBjb252ZXJ0IHRoZW0KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlYkdMVmVyc2lvbiA8IDIg
fHwgdGhpcy5mb3JjZVBPVFRleHR1cmVzOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoRW5naW5lLnByb3RvdHlwZSwgImRvTm90SGFuZGxlQ29udGV4dExvc3Qi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGlj
YXRpbmcgaWYgcmVzb3VyY2VzIHNob3VsZCBiZSByZXRhaW5lZCB0byBiZSBhYmxlIHRvIGhhbmRs
ZSBjb250ZXh0IGxvc3QgZXZlbnRzCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9vcHRpbWl6aW5nX3lvdXJfc2NlbmUjaGFuZGxpbmctd2ViZ2wtY29udGV4
dC1sb3N0CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9kb05vdEhhbmRsZUNvbnRleHRMb3N0OworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fZG9Ob3RIYW5k
bGVDb250ZXh0TG9zdCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoRW5naW5lLnByb3RvdHlwZSwgInBlcmZvcm1hbmNlTW9uaXRvciIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3IgYXR0YWNo
ZWQgdG8gdGhpcyBlbmdpbmUKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL29wdGltaXppbmdfeW91cl9zY2VuZSNlbmdpbmVpbnN0cnVtZW50YXRpb24KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3BlcmZvcm1hbmNlTW9uaXRvcjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEVuZ2luZS5wcm90b3R5cGUsICJ0ZXh0dXJlc1N1cHBvcnRlZCIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgdGV4dHVyZSBmb3JtYXRz
IHN1cHBvcnRlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXNTdXBwb3J0ZWQ7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAidGV4dHVyZUZv
cm1hdEluVXNlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiB0
ZXh0dXJlIGZvcm1hdHMgaW4gdXNlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlRm9ybWF0SW5Vc2U7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBl
LCAiY3VycmVudFZpZXdwb3J0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUg
Y3VycmVudCB2aWV3cG9ydAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkVmlld3BvcnQ7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAiZW1wdHlU
ZXh0dXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCBlbXB0
eSB0ZXh0dXJlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIGlmICghdGhpcy5fZW1wdHlUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
ZW1wdHlUZXh0dXJlID0gdGhpcy5jcmVhdGVSYXdUZXh0dXJlKG5ldyBVaW50OEFycmF5KDQpLCAx
LCAxLCBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBLCBmYWxzZSwgZmFsc2UsIEVuZ2luZS5URVhU
VVJFX05FQVJFU1RfU0FNUExJTkdNT0RFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9lbXB0eVRleHR1cmU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAiZW1wdHlUZXh0dXJlM0QiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IGVtcHR5IDNEIHRleHR1cmUKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0
aGlzLl9lbXB0eVRleHR1cmUzRCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2VtcHR5VGV4dHVy
ZTNEID0gdGhpcy5jcmVhdGVSYXdUZXh0dXJlM0QobmV3IFVpbnQ4QXJyYXkoNCksIDEsIDEsIDEs
IEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQkEsIGZhbHNlLCBmYWxzZSwgRW5naW5lLlRFWFRVUkVf
TkVBUkVTVF9TQU1QTElOR01PREUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2VtcHR5VGV4dHVyZTNEOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoRW5naW5lLnByb3RvdHlwZSwgImVtcHR5Q3ViZVRleHR1cmUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IGVtcHR5IGN1YmUgdGV4dHVyZQor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAo
IXRoaXMuX2VtcHR5Q3ViZVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB2YXIgZmFjZURhdGEg
PSBuZXcgVWludDhBcnJheSg0KTsKKyAgICAgICAgICAgICAgICB2YXIgY3ViZURhdGEgPSBbZmFj
ZURhdGEsIGZhY2VEYXRhLCBmYWNlRGF0YSwgZmFjZURhdGEsIGZhY2VEYXRhLCBmYWNlRGF0YV07
CisgICAgICAgICAgICAgICAgdGhpcy5fZW1wdHlDdWJlVGV4dHVyZSA9IHRoaXMuY3JlYXRlUmF3
Q3ViZVRleHR1cmUoY3ViZURhdGEsIDEsIEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQkEsIEVuZ2lu
ZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQsIGZhbHNlLCBmYWxzZSwgRW5naW5lLlRFWFRVUkVf
TkVBUkVTVF9TQU1QTElOR01PREUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2VtcHR5Q3ViZVRleHR1cmU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAiaXNXZWJHUFUiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBlbmdpbmUgcnVu
cyBpbiBXZWJHUFUgb3Igbm90LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNXZWJHUFU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAic2hhZGVyUGxh
dGZvcm1OYW1lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgc2hhZGVyIHBs
YXRmcm9tIG5hbWUgdXNlZCBieSB0aGUgZWZmZWN0cy4KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRlclBsYXRmb3Jt
TmFtZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogU2hhcmVkIGluaXRpYWxp
emF0aW9uIGFjcm9zcyBlbmdpbmVzIHR5cGVzLgorICAgICAqIEBwYXJhbSBjYW52YXMgVGhlIGNh
bnZhcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnN0YW5jZSBvZiB0aGUgZW5naW5lLgorICAgICAq
IEBwYXJhbSBkb05vdEhhbmRsZVRvdWNoQWN0aW9uIERlZmluZXMgdGhhdCBlbmdpbmUgc2hvdWxk
IGlnbm9yZSBtb2RpZnlpbmcgdG91Y2ggYWN0aW9uIGF0dHJpYnV0ZSBhbmQgc3R5bGUKKyAgICAg
KiBAcGFyYW0gYXVkaW9FbmdpbmUgRGVmaW5lcyBpZiBhbiBhdWRpbyBlbmdpbmUgc2hvdWxkIGJl
IGNyZWF0ZWQgYnkgZGVmYXVsdAorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3NoYXJl
ZEluaXQgPSBmdW5jdGlvbiAoY2FudmFzLCBkb05vdEhhbmRsZVRvdWNoQWN0aW9uLCBhdWRpb0Vu
Z2luZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl9yZW5kZXJp
bmdDYW52YXMgPSBjYW52YXM7CisgICAgICAgIHRoaXMuX29uQ2FudmFzRm9jdXMgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBfdGhpcy5vbkNhbnZhc0ZvY3VzT2JzZXJ2YWJsZS5ub3RpZnlP
YnNlcnZlcnMoX3RoaXMpOworICAgICAgICB9OworICAgICAgICB0aGlzLl9vbkNhbnZhc0JsdXIg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5vbkNhbnZhc0JsdXJPYnNlcnZhYmxl
Lm5vdGlmeU9ic2VydmVycyhfdGhpcyk7CisgICAgICAgIH07CisgICAgICAgIGNhbnZhcy5hZGRF
dmVudExpc3RlbmVyKCJmb2N1cyIsIHRoaXMuX29uQ2FudmFzRm9jdXMpOworICAgICAgICBjYW52
YXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsIHRoaXMuX29uQ2FudmFzQmx1cik7CisgICAgICAg
IHRoaXMuX29uQmx1ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5kaXNh
YmxlUGVyZm9ybWFuY2VNb25pdG9ySW5CYWNrZ3JvdW5kKSB7CisgICAgICAgICAgICAgICAgX3Ro
aXMuX3BlcmZvcm1hbmNlTW9uaXRvci5kaXNhYmxlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBfdGhpcy5fd2luZG93SXNCYWNrZ3JvdW5kID0gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICAg
ICAgdGhpcy5fb25Gb2N1cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5k
aXNhYmxlUGVyZm9ybWFuY2VNb25pdG9ySW5CYWNrZ3JvdW5kKSB7CisgICAgICAgICAgICAgICAg
X3RoaXMuX3BlcmZvcm1hbmNlTW9uaXRvci5lbmFibGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIF90aGlzLl93aW5kb3dJc0JhY2tncm91bmQgPSBmYWxzZTsKKyAgICAgICAgfTsKKyAg
ICAgICAgdGhpcy5fb25DYW52YXNQb2ludGVyT3V0ID0gZnVuY3Rpb24gKGV2KSB7CisgICAgICAg
ICAgICBfdGhpcy5vbkNhbnZhc1BvaW50ZXJPdXRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhl
dik7CisgICAgICAgIH07CisgICAgICAgIGlmIChfTWlzY19kb21NYW5hZ2VtZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIkRvbU1hbmFnZW1lbnQiXS5Jc1dpbmRvd09iamVjdEV4aXN0
KCkpIHsKKyAgICAgICAgICAgIHZhciBob3N0V2luZG93ID0gdGhpcy5nZXRIb3N0V2luZG93KCk7
CisgICAgICAgICAgICBob3N0V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlzLl9v
bkJsdXIpOworICAgICAgICAgICAgaG9zdFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIs
IHRoaXMuX29uRm9jdXMpOworICAgICAgICB9CisgICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3Rl
bmVyKCJwb2ludGVyb3V0IiwgdGhpcy5fb25DYW52YXNQb2ludGVyT3V0KTsKKyAgICAgICAgaWYg
KCFkb05vdEhhbmRsZVRvdWNoQWN0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl9kaXNhYmxlVG91
Y2hBY3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDcmVhdGUgQXVkaW8gRW5naW5lIGlm
IG5lZWRlZC4KKyAgICAgICAgaWYgKCFFbmdpbmUuYXVkaW9FbmdpbmUgJiYgYXVkaW9FbmdpbmUg
JiYgRW5naW5lLkF1ZGlvRW5naW5lRmFjdG9yeSkgeworICAgICAgICAgICAgRW5naW5lLmF1ZGlv
RW5naW5lID0gRW5naW5lLkF1ZGlvRW5naW5lRmFjdG9yeSh0aGlzLmdldFJlbmRlcmluZ0NhbnZh
cygpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBTaGFkZXIgcHJvY2Vzc29yCisgICAgICAgIHRo
aXMuX3NoYWRlclByb2Nlc3NvciA9IHRoaXMuX2dldFNoYWRlclByb2Nlc3NvcigpOworICAgIH07
CisgICAgLyoqCisgICAgICogR2V0cyBhIHNoYWRlciBwcm9jZXNzb3IgaW1wbGVtZW50YXRpb24g
Zml0dGluZyB3aXRoIHRoZSBjdXJyZW50IGVuZ2luZSB0eXBlLgorICAgICAqIEByZXR1cm5zIFRo
ZSBzaGFkZXIgcHJvY2Vzc29yIGltcGxlbWVudGF0aW9uLgorICAgICAqLworICAgIEVuZ2luZS5w
cm90b3R5cGUuX2dldFNoYWRlclByb2Nlc3NvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMud2ViR0xWZXJzaW9uID4gMSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBfV2ViR0xf
d2ViR0wyU2hhZGVyUHJvY2Vzc29yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siV2Vi
R0wyU2hhZGVyUHJvY2Vzc29yIl0oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fZ2V0U2hh
ZGVyUHJvY2Vzc2luZ0NvbnRleHQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBudWxs
OworICAgIH07CisgICAgLy8gV2ViVlIKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyBhIHdl
YlZSIGRpc3BsYXkgYW5kIHN0YXJ0cyBsaXN0ZW5pbmcgdG8gZGlzcGxheSBjaGFuZ2UgZXZlbnRz
CisgICAgICogVGhlIG9uVlJEaXNwbGF5Q2hhbmdlZE9ic2VydmFibGUgd2lsbCBiZSBub3RpZmll
ZCB1cG9uIHRoZXNlIGNoYW5nZXMKKyAgICAgKiBAcmV0dXJucyBUaGUgb25WUkRpc3BsYXlDaGFu
Z2VkT2JzZXJ2YWJsZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuaW5pdFdlYlZSID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiV2ViVlJDYW1lcmEiKTsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fcHJlcGFy
ZVZSQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBEbyBub3RoaW5nIGFzIHRo
ZSBlbmdpbmUgc2lkZSBlZmZlY3Qgd2lsbCBvdmVybG9hZCBpdAorICAgIH07CisgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9jb25uZWN0VlJFdmVudHMgPSBmdW5jdGlv
biAoY2FudmFzLCBkb2N1bWVudCkgeworICAgICAgICAvLyBEbyBub3RoaW5nIGFzIHRoZSBlbmdp
bmUgc2lkZSBlZmZlY3Qgd2lsbCBvdmVybG9hZCBpdAorICAgIH07CisgICAgLyoqIEBoaWRkZW4g
Ki8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9zdWJtaXRWUkZyYW1lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAvLyBEbyBub3RoaW5nIGFzIHRoZSBlbmdpbmUgc2lkZSBlZmZlY3Qgd2lsbCBvdmVy
bG9hZCBpdAorICAgIH07CisgICAgLyoqCisgICAgICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGxl
YXZlIHdlYlZSIG1vZGUKKyAgICAgKiBXaWxsIGRvIG5vdGhpbmcgaWYgd2ViVlIgaXMgbm90IHN1
cHBvcnRlZCBvciBpZiB0aGVyZSBpcyBubyB3ZWJWUiBkZXZpY2UKKyAgICAgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vd2VidnJfY2FtZXJhCisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5kaXNhYmxlVlIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIERvIG5v
dGhpbmcgYXMgdGhlIGVuZ2luZSBzaWRlIGVmZmVjdCB3aWxsIG92ZXJsb2FkIGl0CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhlIHN5c3Rl
bSBpcyBpbiBWUiBtb2RlIGFuZCBpcyBwcmVzZW50aW5nCisgICAgICogQHJldHVybnMgdHJ1ZSBp
ZiBWUiBtb2RlIGlzIGVuZ2FnZWQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmlzVlJQ
cmVzZW50aW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3JlcXVlc3RWUkZyYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBEbyBub3RoaW5nIGFzIHRoZSBlbmdpbmUgc2lk
ZSBlZmZlY3Qgd2lsbCBvdmVybG9hZCBpdAorICAgIH07CisgICAgRW5naW5lLnByb3RvdHlwZS5f
ZGlzYWJsZVRvdWNoQWN0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX3Jl
bmRlcmluZ0NhbnZhcykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX3JlbmRlcmluZ0NhbnZhcy5zZXRBdHRyaWJ1dGUoInRvdWNoLWFjdGlvbiIsICJub25l
Iik7CisgICAgICAgIHRoaXMuX3JlbmRlcmluZ0NhbnZhcy5zdHlsZS50b3VjaEFjdGlvbiA9ICJu
b25lIjsKKyAgICAgICAgdGhpcy5fcmVuZGVyaW5nQ2FudmFzLnN0eWxlLm1zVG91Y2hBY3Rpb24g
PSAibm9uZSI7CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl9yZWJ1aWxkSW50ZXJuYWxU
ZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHRoaXMu
X2ludGVybmFsVGV4dHVyZXNDYWNoZS5zbGljZSgpOyAvLyBEbyBhIGNvcHkgYmVjYXVzZSB0aGUg
cmVidWlsZCB3aWxsIGFkZCBwcm94aWVzCisgICAgICAgIGZvciAodmFyIF9pID0gMCwgY3VycmVu
dFN0YXRlXzEgPSBjdXJyZW50U3RhdGU7IF9pIDwgY3VycmVudFN0YXRlXzEubGVuZ3RoOyBfaSsr
KSB7CisgICAgICAgICAgICB2YXIgaW50ZXJuYWxUZXh0dXJlID0gY3VycmVudFN0YXRlXzFbX2ld
OworICAgICAgICAgICAgaW50ZXJuYWxUZXh0dXJlLl9yZWJ1aWxkKCk7CisgICAgICAgIH0KKyAg
ICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX3JlYnVpbGRFZmZlY3RzID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5fY29tcGlsZWRFZmZlY3RzKSB7CisgICAg
ICAgICAgICB2YXIgZWZmZWN0ID0gdGhpcy5fY29tcGlsZWRFZmZlY3RzW2tleV07CisgICAgICAg
ICAgICBlZmZlY3QuX3ByZXBhcmVFZmZlY3QoKTsKKyAgICAgICAgfQorICAgICAgICBfTWF0ZXJp
YWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFZmZlY3QiXS5SZXNldENh
Y2hlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5n
IGlmIGFsbCBjcmVhdGVkIGVmZmVjdHMgYXJlIHJlYWR5CisgICAgICogQHJldHVybnMgdHJ1ZSBp
ZiBhbGwgZWZmZWN0cyBhcmUgcmVhZHkKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmFy
ZUFsbEVmZmVjdHNSZWFkeSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIga2V5IGlu
IHRoaXMuX2NvbXBpbGVkRWZmZWN0cykgeworICAgICAgICAgICAgdmFyIGVmZmVjdCA9IHRoaXMu
X2NvbXBpbGVkRWZmZWN0c1trZXldOworICAgICAgICAgICAgaWYgKCFlZmZlY3QuaXNSZWFkeSgp
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgRW5naW5lLnByb3RvdHlwZS5f
cmVidWlsZEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIEluZGV4IC8gVmVydGV4
CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLnNjZW5lczsgX2kgPCBfYS5sZW5n
dGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBzY2VuZSA9IF9hW19pXTsKKyAgICAgICAgICAg
IHNjZW5lLnJlc2V0Q2FjaGVkTWF0ZXJpYWwoKTsKKyAgICAgICAgICAgIHNjZW5lLl9yZWJ1aWxk
R2VvbWV0cmllcygpOworICAgICAgICAgICAgc2NlbmUuX3JlYnVpbGRUZXh0dXJlcygpOworICAg
ICAgICB9CisgICAgICAgIC8vIFVuaWZvcm1zCisgICAgICAgIGZvciAodmFyIF9iID0gMCwgX2Mg
PSB0aGlzLl91bmlmb3JtQnVmZmVyczsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHsKKyAgICAgICAg
ICAgIHZhciB1bmlmb3JtQnVmZmVyID0gX2NbX2JdOworICAgICAgICAgICAgdW5pZm9ybUJ1ZmZl
ci5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl9p
bml0R0xDb250ZXh0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBDYXBzCisgICAgICAgIHRo
aXMuX2NhcHMgPSBuZXcgRW5naW5lQ2FwYWJpbGl0aWVzKCk7CisgICAgICAgIHRoaXMuX2NhcHMu
bWF4VGV4dHVyZXNJbWFnZVVuaXRzID0gdGhpcy5fZ2wuZ2V0UGFyYW1ldGVyKHRoaXMuX2dsLk1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICAgICAgdGhpcy5fY2Fwcy5tYXhDb21iaW5lZFRl
eHR1cmVzSW1hZ2VVbml0cyA9IHRoaXMuX2dsLmdldFBhcmFtZXRlcih0aGlzLl9nbC5NQVhfQ09N
QklORURfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgICAgIHRoaXMuX2NhcHMubWF4VmVydGV4
VGV4dHVyZUltYWdlVW5pdHMgPSB0aGlzLl9nbC5nZXRQYXJhbWV0ZXIodGhpcy5fZ2wuTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICAgICAgdGhpcy5fY2Fwcy5tYXhUZXh0dXJl
U2l6ZSA9IHRoaXMuX2dsLmdldFBhcmFtZXRlcih0aGlzLl9nbC5NQVhfVEVYVFVSRV9TSVpFKTsK
KyAgICAgICAgdGhpcy5fY2Fwcy5tYXhDdWJlbWFwVGV4dHVyZVNpemUgPSB0aGlzLl9nbC5nZXRQ
YXJhbWV0ZXIodGhpcy5fZ2wuTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSk7CisgICAgICAgIHRo
aXMuX2NhcHMubWF4UmVuZGVyVGV4dHVyZVNpemUgPSB0aGlzLl9nbC5nZXRQYXJhbWV0ZXIodGhp
cy5fZ2wuTUFYX1JFTkRFUkJVRkZFUl9TSVpFKTsKKyAgICAgICAgdGhpcy5fY2Fwcy5tYXhWZXJ0
ZXhBdHRyaWJzID0gdGhpcy5fZ2wuZ2V0UGFyYW1ldGVyKHRoaXMuX2dsLk1BWF9WRVJURVhfQVRU
UklCUyk7CisgICAgICAgIHRoaXMuX2NhcHMubWF4VmFyeWluZ1ZlY3RvcnMgPSB0aGlzLl9nbC5n
ZXRQYXJhbWV0ZXIodGhpcy5fZ2wuTUFYX1ZBUllJTkdfVkVDVE9SUyk7CisgICAgICAgIHRoaXMu
X2NhcHMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9IHRoaXMuX2dsLmdldFBhcmFtZXRlcih0
aGlzLl9nbC5NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTKTsKKyAgICAgICAgdGhpcy5fY2Fw
cy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IHRoaXMuX2dsLmdldFBhcmFtZXRlcih0aGlzLl9n
bC5NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyk7CisgICAgICAgIC8vIEluZm9zCisgICAgICAg
IHRoaXMuX2dsVmVyc2lvbiA9IHRoaXMuX2dsLmdldFBhcmFtZXRlcih0aGlzLl9nbC5WRVJTSU9O
KTsKKyAgICAgICAgdmFyIHJlbmRlcmVySW5mbyA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbigiV0VC
R0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOworICAgICAgICBpZiAocmVuZGVyZXJJbmZvICE9IG51
bGwpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsUmVuZGVyZXIgPSB0aGlzLl9nbC5nZXRQYXJhbWV0
ZXIocmVuZGVyZXJJbmZvLlVOTUFTS0VEX1JFTkRFUkVSX1dFQkdMKTsKKyAgICAgICAgICAgIHRo
aXMuX2dsVmVuZG9yID0gdGhpcy5fZ2wuZ2V0UGFyYW1ldGVyKHJlbmRlcmVySW5mby5VTk1BU0tF
RF9WRU5ET1JfV0VCR0wpOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fZ2xWZW5kb3Ip
IHsKKyAgICAgICAgICAgIHRoaXMuX2dsVmVuZG9yID0gIlVua25vd24gdmVuZG9yIjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXRoaXMuX2dsUmVuZGVyZXIpIHsKKyAgICAgICAgICAgIHRoaXMu
X2dsUmVuZGVyZXIgPSAiVW5rbm93biByZW5kZXJlciI7CisgICAgICAgIH0KKyAgICAgICAgLy8g
Q29uc3RhbnRzCisgICAgICAgIHRoaXMuX2dsLkhBTEZfRkxPQVRfT0VTID0gMHg4RDYxOyAvLyBI
YWxmIGZsb2F0aW5nLXBvaW50IHR5cGUgKDE2LWJpdCkuCisgICAgICAgIGlmICh0aGlzLl9nbC5S
R0JBMTZGICE9PSAweDg4MUEpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLlJHQkExNkYgPSAweDg4
MUE7IC8vIFJHQkEgMTYtYml0IGZsb2F0aW5nLXBvaW50IGNvbG9yLXJlbmRlcmFibGUgaW50ZXJu
YWwgc2l6ZWQgZm9ybWF0LgorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9nbC5SR0JBMzJG
ICE9PSAweDg4MTQpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLlJHQkEzMkYgPSAweDg4MTQ7IC8v
IFJHQkEgMzItYml0IGZsb2F0aW5nLXBvaW50IGNvbG9yLXJlbmRlcmFibGUgaW50ZXJuYWwgc2l6
ZWQgZm9ybWF0LgorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9nbC5ERVBUSDI0X1NURU5D
SUw4ICE9PSAzNTA1NikgeworICAgICAgICAgICAgdGhpcy5fZ2wuREVQVEgyNF9TVEVOQ0lMOCA9
IDM1MDU2OworICAgICAgICB9CisgICAgICAgIC8vIEV4dGVuc2lvbnMKKyAgICAgICAgdGhpcy5f
Y2Fwcy5zdGFuZGFyZERlcml2YXRpdmVzID0gdGhpcy5fd2ViR0xWZXJzaW9uID4gMSB8fCAodGhp
cy5fZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnKSAhPT0gbnVsbCk7
CisgICAgICAgIHRoaXMuX2NhcHMuYXN0YyA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbignV0VCR0xf
Y29tcHJlc3NlZF90ZXh0dXJlX2FzdGMnKSB8fCB0aGlzLl9nbC5nZXRFeHRlbnNpb24oJ1dFQktJ
VF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YycpOworICAgICAgICB0aGlzLl9jYXBzLnMz
dGMgPSB0aGlzLl9nbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3Rj
JykgfHwgdGhpcy5fZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0
dXJlX3MzdGMnKTsKKyAgICAgICAgdGhpcy5fY2Fwcy5wdnJ0YyA9IHRoaXMuX2dsLmdldEV4dGVu
c2lvbignV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJykgfHwgdGhpcy5fZ2wuZ2V0RXh0
ZW5zaW9uKCdXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyk7CisgICAgICAg
IHRoaXMuX2NhcHMuZXRjMSA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbignV0VCR0xfY29tcHJlc3Nl
ZF90ZXh0dXJlX2V0YzEnKSB8fCB0aGlzLl9nbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9XRUJHTF9j
b21wcmVzc2VkX3RleHR1cmVfZXRjMScpOworICAgICAgICB0aGlzLl9jYXBzLmV0YzIgPSB0aGlz
Ll9nbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMnKSB8fCB0aGlz
Ll9nbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjJykg
fHwKKyAgICAgICAgICAgIHRoaXMuX2dsLmdldEV4dGVuc2lvbignV0VCR0xfY29tcHJlc3NlZF90
ZXh0dXJlX2VzM18wJyk7IC8vIGFsc28gYSByZXF1aXJlbWVudCBvZiBPcGVuR0wgRVMgMworICAg
ICAgICB0aGlzLl9jYXBzLnRleHR1cmVBbmlzb3Ryb3BpY0ZpbHRlckV4dGVuc2lvbiA9IHRoaXMu
X2dsLmdldEV4dGVuc2lvbignRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJykgfHwgdGhp
cy5fZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
JykgfHwgdGhpcy5fZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljJyk7CisgICAgICAgIHRoaXMuX2NhcHMubWF4QW5pc290cm9weSA9IHRoaXMuX2NhcHMu
dGV4dHVyZUFuaXNvdHJvcGljRmlsdGVyRXh0ZW5zaW9uID8gdGhpcy5fZ2wuZ2V0UGFyYW1ldGVy
KHRoaXMuX2NhcHMudGV4dHVyZUFuaXNvdHJvcGljRmlsdGVyRXh0ZW5zaW9uLk1BWF9URVhUVVJF
X01BWF9BTklTT1RST1BZX0VYVCkgOiAwOworICAgICAgICB0aGlzLl9jYXBzLnVpbnRJbmRpY2Vz
ID0gdGhpcy5fd2ViR0xWZXJzaW9uID4gMSB8fCB0aGlzLl9nbC5nZXRFeHRlbnNpb24oJ09FU19l
bGVtZW50X2luZGV4X3VpbnQnKSAhPT0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2Fwcy5mcmFnbWVu
dERlcHRoU3VwcG9ydGVkID0gdGhpcy5fd2ViR0xWZXJzaW9uID4gMSB8fCB0aGlzLl9nbC5nZXRF
eHRlbnNpb24oJ0VYVF9mcmFnX2RlcHRoJykgIT09IG51bGw7CisgICAgICAgIHRoaXMuX2NhcHMu
aGlnaFByZWNpc2lvblNoYWRlclN1cHBvcnRlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9jYXBz
LnRpbWVyUXVlcnkgPSB0aGlzLl9nbC5nZXRFeHRlbnNpb24oJ0VYVF9kaXNqb2ludF90aW1lcl9x
dWVyeV93ZWJnbDInKSB8fCB0aGlzLl9nbC5nZXRFeHRlbnNpb24oIkVYVF9kaXNqb2ludF90aW1l
cl9xdWVyeSIpOworICAgICAgICBpZiAodGhpcy5fY2Fwcy50aW1lclF1ZXJ5KSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fd2ViR0xWZXJzaW9uID09PSAxKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fZ2wuZ2V0UXVlcnkgPSB0aGlzLl9jYXBzLnRpbWVyUXVlcnkuZ2V0UXVlcnlFWFQuYmluZCh0
aGlzLl9jYXBzLnRpbWVyUXVlcnkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
Y2Fwcy5jYW5Vc2VUaW1lc3RhbXBGb3JUaW1lclF1ZXJ5ID0gdGhpcy5fZ2wuZ2V0UXVlcnkodGhp
cy5fY2Fwcy50aW1lclF1ZXJ5LlRJTUVTVEFNUF9FWFQsIHRoaXMuX2NhcHMudGltZXJRdWVyeS5R
VUVSWV9DT1VOVEVSX0JJVFNfRVhUKSA+IDA7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2tz
IGlmIHNvbWUgb2YgdGhlIGZvcm1hdCByZW5kZXJzIGZpcnN0IHRvIGFsbG93IHRoZSB1c2Ugb2Yg
d2ViZ2wgaW5zcGVjdG9yLgorICAgICAgICB0aGlzLl9jYXBzLmNvbG9yQnVmZmVyRmxvYXQgPSB0
aGlzLl93ZWJHTFZlcnNpb24gPiAxICYmIHRoaXMuX2dsLmdldEV4dGVuc2lvbignRVhUX2NvbG9y
X2J1ZmZlcl9mbG9hdCcpOworICAgICAgICB0aGlzLl9jYXBzLnRleHR1cmVGbG9hdCA9ICh0aGlz
Ll93ZWJHTFZlcnNpb24gPiAxIHx8IHRoaXMuX2dsLmdldEV4dGVuc2lvbignT0VTX3RleHR1cmVf
ZmxvYXQnKSkgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIHRoaXMuX2NhcHMudGV4dHVyZUZsb2F0
TGluZWFyRmlsdGVyaW5nID0gdGhpcy5fY2Fwcy50ZXh0dXJlRmxvYXQgJiYgdGhpcy5fZ2wuZ2V0
RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInKSA/IHRydWUgOiBmYWxzZTsKKyAg
ICAgICAgdGhpcy5fY2Fwcy50ZXh0dXJlRmxvYXRSZW5kZXIgPSB0aGlzLl9jYXBzLnRleHR1cmVG
bG9hdCAmJiB0aGlzLl9jYW5SZW5kZXJUb0Zsb2F0RnJhbWVidWZmZXIoKSA/IHRydWUgOiBmYWxz
ZTsKKyAgICAgICAgdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZsb2F0ID0gKHRoaXMuX3dlYkdMVmVy
c2lvbiA+IDEgfHwgdGhpcy5fZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
JykpID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICB0aGlzLl9jYXBzLnRleHR1cmVIYWxmRmxvYXRM
aW5lYXJGaWx0ZXJpbmcgPSAodGhpcy5fd2ViR0xWZXJzaW9uID4gMSB8fCAodGhpcy5fY2Fwcy50
ZXh0dXJlSGFsZkZsb2F0ICYmIHRoaXMuX2dsLmdldEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdF9saW5lYXInKSkpID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICBpZiAodGhpcy5fd2Vi
R0xWZXJzaW9uID4gMSkgeworICAgICAgICAgICAgdGhpcy5fZ2wuSEFMRl9GTE9BVF9PRVMgPSAw
eDE0MEI7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZsb2F0UmVu
ZGVyID0gdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZsb2F0ICYmIHRoaXMuX2NhblJlbmRlclRvSGFs
ZkZsb2F0RnJhbWVidWZmZXIoKTsKKyAgICAgICAgdGhpcy5fY2Fwcy50ZXh0dXJlTE9EID0gKHRo
aXMuX3dlYkdMVmVyc2lvbiA+IDEgfHwgdGhpcy5fZ2wuZ2V0RXh0ZW5zaW9uKCdFWFRfc2hhZGVy
X3RleHR1cmVfbG9kJykpID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICB0aGlzLl9jYXBzLm11bHRp
dmlldyA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbignT1ZSX211bHRpdmlldzInKTsKKyAgICAgICAg
Ly8gRHJhdyBidWZmZXJzCisgICAgICAgIGlmICh0aGlzLl93ZWJHTFZlcnNpb24gPiAxKSB7Cisg
ICAgICAgICAgICB0aGlzLl9jYXBzLmRyYXdCdWZmZXJzRXh0ZW5zaW9uID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHRoaXMuX2NhcHMubWF4TVNBQVNhbXBsZXMgPSB0aGlzLl9nbC5nZXRQYXJhbWV0ZXIo
dGhpcy5fZ2wuTUFYX1NBTVBMRVMpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdmFyIGRyYXdCdWZmZXJzRXh0ZW5zaW9uID0gdGhpcy5fZ2wuZ2V0RXh0ZW5zaW9uKCdX
RUJHTF9kcmF3X2J1ZmZlcnMnKTsKKyAgICAgICAgICAgIGlmIChkcmF3QnVmZmVyc0V4dGVuc2lv
biAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2NhcHMuZHJhd0J1ZmZlcnNFeHRl
bnNpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMuX2dsLmRyYXdCdWZmZXJzID0gZHJh
d0J1ZmZlcnNFeHRlbnNpb24uZHJhd0J1ZmZlcnNXRUJHTC5iaW5kKGRyYXdCdWZmZXJzRXh0ZW5z
aW9uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9nbC5EUkFXX0ZSQU1FQlVGRkVSID0gdGhpcy5f
Z2wuRlJBTUVCVUZGRVI7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dsWyJDT0xPUl9BVFRBQ0hNRU5UIiAr
IGkgKyAiX1dFQkdMIl0gPSBkcmF3QnVmZmVyc0V4dGVuc2lvblsiQ09MT1JfQVRUQUNITUVOVCIg
KyBpICsgIl9XRUJHTCJdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX2NhcHMuZHJhd0J1ZmZlcnNFeHRl
bnNpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBTaGFk
ZXIgY29tcGlsZXIgdGhyZWFkcworICAgICAgICB0aGlzLl9jYXBzLnBhcmFsbGVsU2hhZGVyQ29t
cGlsZSA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbignS0hSX3BhcmFsbGVsX3NoYWRlcl9jb21waWxl
Jyk7CisgICAgICAgIC8vIERlcHRoIFRleHR1cmUKKyAgICAgICAgaWYgKHRoaXMuX3dlYkdMVmVy
c2lvbiA+IDEpIHsKKyAgICAgICAgICAgIHRoaXMuX2NhcHMuZGVwdGhUZXh0dXJlRXh0ZW5zaW9u
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBkZXB0
aFRleHR1cmVFeHRlbnNpb24gPSB0aGlzLl9nbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2RlcHRoX3Rl
eHR1cmUnKTsKKyAgICAgICAgICAgIGlmIChkZXB0aFRleHR1cmVFeHRlbnNpb24gIT0gbnVsbCkg
eworICAgICAgICAgICAgICAgIHRoaXMuX2NhcHMuZGVwdGhUZXh0dXJlRXh0ZW5zaW9uID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9nbC5VTlNJR05FRF9JTlRfMjRfOCA9IGRlcHRoVGV4
dHVyZUV4dGVuc2lvbi5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAvLyBWZXJ0ZXggYXJyYXkgb2JqZWN0CisgICAgICAgIGlmICh0aGlz
LmRpc2FibGVWZXJ0ZXhBcnJheU9iamVjdHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2NhcHMudmVy
dGV4QXJyYXlPYmplY3QgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlz
Ll93ZWJHTFZlcnNpb24gPiAxKSB7CisgICAgICAgICAgICB0aGlzLl9jYXBzLnZlcnRleEFycmF5
T2JqZWN0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZh
ciB2ZXJ0ZXhBcnJheU9iamVjdEV4dGVuc2lvbiA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbignT0VT
X3ZlcnRleF9hcnJheV9vYmplY3QnKTsKKyAgICAgICAgICAgIGlmICh2ZXJ0ZXhBcnJheU9iamVj
dEV4dGVuc2lvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY2Fwcy52ZXJ0ZXhB
cnJheU9iamVjdCA9IHRydWU7CisgICAgICAgICAgICAgICAgdGhpcy5fZ2wuY3JlYXRlVmVydGV4
QXJyYXkgPSB2ZXJ0ZXhBcnJheU9iamVjdEV4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUy5i
aW5kKHZlcnRleEFycmF5T2JqZWN0RXh0ZW5zaW9uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9n
bC5iaW5kVmVydGV4QXJyYXkgPSB2ZXJ0ZXhBcnJheU9iamVjdEV4dGVuc2lvbi5iaW5kVmVydGV4
QXJyYXlPRVMuYmluZCh2ZXJ0ZXhBcnJheU9iamVjdEV4dGVuc2lvbik7CisgICAgICAgICAgICAg
ICAgdGhpcy5fZ2wuZGVsZXRlVmVydGV4QXJyYXkgPSB2ZXJ0ZXhBcnJheU9iamVjdEV4dGVuc2lv
bi5kZWxldGVWZXJ0ZXhBcnJheU9FUy5iaW5kKHZlcnRleEFycmF5T2JqZWN0RXh0ZW5zaW9uKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMu
X2NhcHMudmVydGV4QXJyYXlPYmplY3QgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAvLyBJbnN0YW5jZXMgY291bnQKKyAgICAgICAgaWYgKHRoaXMuX3dlYkdMVmVy
c2lvbiA+IDEpIHsKKyAgICAgICAgICAgIHRoaXMuX2NhcHMuaW5zdGFuY2VkQXJyYXlzID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBpbnN0YW5jZUV4
dGVuc2lvbiA9IHRoaXMuX2dsLmdldEV4dGVuc2lvbignQU5HTEVfaW5zdGFuY2VkX2FycmF5cycp
OworICAgICAgICAgICAgaWYgKGluc3RhbmNlRXh0ZW5zaW9uICE9IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9jYXBzLmluc3RhbmNlZEFycmF5cyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgdGhpcy5fZ2wuZHJhd0FycmF5c0luc3RhbmNlZCA9IGluc3RhbmNlRXh0ZW5zaW9uLmRyYXdB
cnJheXNJbnN0YW5jZWRBTkdMRS5iaW5kKGluc3RhbmNlRXh0ZW5zaW9uKTsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9nbC5kcmF3RWxlbWVudHNJbnN0YW5jZWQgPSBpbnN0YW5jZUV4dGVuc2lvbi5k
cmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRS5iaW5kKGluc3RhbmNlRXh0ZW5zaW9uKTsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9nbC52ZXJ0ZXhBdHRyaWJEaXZpc29yID0gaW5zdGFuY2VFeHRlbnNp
b24udmVydGV4QXR0cmliRGl2aXNvckFOR0xFLmJpbmQoaW5zdGFuY2VFeHRlbnNpb24pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY2Fw
cy5pbnN0YW5jZWRBcnJheXMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAvLyBJbnRlbGxpZ2VudGx5IGFkZCBzdXBwb3J0ZWQgY29tcHJlc3NlZCBmb3JtYXRzIGlu
IG9yZGVyIHRvIGNoZWNrIGZvci4KKyAgICAgICAgLy8gQ2hlY2sgZm9yIEFTVEMgc3VwcG9ydCBm
aXJzdCBhcyBpdCBpcyBtb3N0IHBvd2VyZnVsIGFuZCB0byBiZSB2ZXJ5IGNyb3NzIHBsYXRmb3Jt
LgorICAgICAgICAvLyBOZXh0IFBWUlRDICYgRFhULCB3aGljaCBhcmUgcHJvYmFibHkgc3VwZXJp
b3IgdG8gRVRDMS8yLgorICAgICAgICAvLyBMaWtlbHkgbm8gaGFyZHdhcmUgd2hpY2ggc3VwcG9y
dHMgYm90aCBQVlIgJiBEWFQsIHNvIG9yZGVyIG1hdHRlcnMgbGl0dGxlLgorICAgICAgICAvLyBF
VEMyIGlzIG5ld2VyIGFuZCBoYW5kbGVzIEVUQzEgKG5vIGFscGhhIGNhcGFiaWxpdHkpLCBzbyBj
aGVjayBmb3IgZmlyc3QuCisgICAgICAgIGlmICh0aGlzLl9jYXBzLmFzdGMpIHsKKyAgICAgICAg
ICAgIHRoaXMudGV4dHVyZXNTdXBwb3J0ZWQucHVzaCgnLWFzdGMua3R4Jyk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuX2NhcHMuczN0YykgeworICAgICAgICAgICAgdGhpcy50ZXh0dXJl
c1N1cHBvcnRlZC5wdXNoKCctZHh0Lmt0eCcpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
Ll9jYXBzLnB2cnRjKSB7CisgICAgICAgICAgICB0aGlzLnRleHR1cmVzU3VwcG9ydGVkLnB1c2go
Jy1wdnJ0Yy5rdHgnKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY2Fwcy5ldGMyKSB7
CisgICAgICAgICAgICB0aGlzLnRleHR1cmVzU3VwcG9ydGVkLnB1c2goJy1ldGMyLmt0eCcpOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9jYXBzLmV0YzEpIHsKKyAgICAgICAgICAgIHRo
aXMudGV4dHVyZXNTdXBwb3J0ZWQucHVzaCgnLWV0YzEua3R4Jyk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuX2dsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCkgeworICAgICAgICAgICAg
dmFyIHZlcnRleF9oaWdocCA9IHRoaXMuX2dsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCh0aGlz
Ll9nbC5WRVJURVhfU0hBREVSLCB0aGlzLl9nbC5ISUdIX0ZMT0FUKTsKKyAgICAgICAgICAgIHZh
ciBmcmFnbWVudF9oaWdocCA9IHRoaXMuX2dsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCh0aGlz
Ll9nbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuX2dsLkhJR0hfRkxPQVQpOworICAgICAgICAgICAg
aWYgKHZlcnRleF9oaWdocCAmJiBmcmFnbWVudF9oaWdocCkgeworICAgICAgICAgICAgICAgIHRo
aXMuX2NhcHMuaGlnaFByZWNpc2lvblNoYWRlclN1cHBvcnRlZCA9IHZlcnRleF9oaWdocC5wcmVj
aXNpb24gIT09IDAgJiYgZnJhZ21lbnRfaGlnaHAucHJlY2lzaW9uICE9PSAwOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIERlcHRoIGJ1ZmZlcgorICAgICAgICB0aGlzLnNl
dERlcHRoQnVmZmVyKHRydWUpOworICAgICAgICB0aGlzLnNldERlcHRoRnVuY3Rpb25Ub0xlc3NP
ckVxdWFsKCk7CisgICAgICAgIHRoaXMuc2V0RGVwdGhXcml0ZSh0cnVlKTsKKyAgICAgICAgLy8g
VGV4dHVyZSBtYXBzCisgICAgICAgIHRoaXMuX21heFNpbXVsdGFuZW91c1RleHR1cmVzID0gdGhp
cy5fY2Fwcy5tYXhDb21iaW5lZFRleHR1cmVzSW1hZ2VVbml0czsKKyAgICAgICAgZm9yICh2YXIg
c2xvdCA9IDA7IHNsb3QgPCB0aGlzLl9tYXhTaW11bHRhbmVvdXNUZXh0dXJlczsgc2xvdCsrKSB7
CisgICAgICAgICAgICB0aGlzLl9uZXh0RnJlZVRleHR1cmVTbG90cy5wdXNoKHNsb3QpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lLnByb3RvdHlw
ZSwgIndlYkdMVmVyc2lvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdmVyc2lv
biBvZiB0aGUgY3VycmVudCB3ZWJHTCBjb250ZXh0CisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWJHTFZlcnNpb247Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldHMgYSBzdHJpbmcgaWRlbmZpZnlp
bmcgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCisgICAgICogQHJldHVybnMgIkVuZ2luZSIgc3RyaW5n
CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiAiRW5naW5lIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShFbmdpbmUucHJvdG90eXBlLCAiaXNTdGVuY2lsRW5hYmxlIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzdGVuY2lsIGJ1ZmZlciBoYXMgYmVl
biBlbmFibGVkIHRocm91Z2ggdGhlIGNyZWF0aW9uIG9wdGlvbiBvZiB0aGUgY29udGV4dC4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2lzU3RlbmNpbEVuYWJsZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9wcmVwYXJlV29ya2luZ0NhbnZhcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3dvcmtpbmdDYW52YXMpIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl93b3JraW5nQ2FudmFzID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5f
d29ya2luZ0NhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgICAgICBpZiAoY29udGV4dCkgewor
ICAgICAgICAgICAgdGhpcy5fd29ya2luZ0NvbnRleHQgPSBjb250ZXh0OworICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXNldCB0aGUgdGV4dHVyZSBjYWNoZSB0byBlbXB0eSBz
dGF0ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUucmVzZXRUZXh0dXJlQ2FjaGUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl9ib3VuZFRleHR1cmVz
Q2FjaGUpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fYm91bmRUZXh0dXJlc0NhY2hlLmhhc093
blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuX2JvdW5kVGV4dHVyZXNDYWNoZVtrZXldID0gbnVsbDsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50VGV4dHVyZUNoYW5uZWwgPSAtMTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCB0aGUgZW5n
aW5lIGlzIHJ1bm5pbmcgaW4gZGV0ZXJtaW5pc3RpYyBsb2NrIHN0ZXAgbW9kZQorICAgICAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1p
bmlzdGljLWxvY2tzdGVwCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBlbmdpbmUgaXMgaW4gZGV0
ZXJtaW5pc3RpYyBsb2NrIHN0ZXAgbW9kZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUu
aXNEZXRlcm1pbmlzdGljTG9ja1N0ZXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0
aGlzLl9kZXRlcm1pbmlzdGljTG9ja3N0ZXA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRz
IHRoZSBtYXggc3RlcHMgd2hlbiBlbmdpbmUgaXMgcnVubmluZyBpbiBkZXRlcm1pbmlzdGljIGxv
Y2sgc3RlcAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEv
YW5pbWF0aW9ucyNkZXRlcm1pbmlzdGljLWxvY2tzdGVwCisgICAgICogQHJldHVybnMgdGhlIG1h
eCBzdGVwcworICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuZ2V0TG9ja3N0ZXBNYXhTdGVw
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2tzdGVwTWF4U3RlcHM7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGFuIG9iamVjdCBjb250YWluaW5nIGluZm9y
bWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHdlYkdMIGNvbnRleHQKKyAgICAgKiBAcmV0dXJucyBh
biBvYmplY3QgY29udGFpbmluZyB0aGUgdmVuZGVyLCB0aGUgcmVuZGVyZXIgYW5kIHRoZSB2ZXJz
aW9uIG9mIHRoZSBjdXJyZW50IHdlYkdMIGNvbnRleHQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJv
dG90eXBlLmdldEdsSW5mbyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgIHZlbmRvcjogdGhpcy5fZ2xWZW5kb3IsCisgICAgICAgICAgICByZW5kZXJlcjogdGhp
cy5fZ2xSZW5kZXJlciwKKyAgICAgICAgICAgIHZlcnNpb246IHRoaXMuX2dsVmVyc2lvbgorICAg
ICAgICB9OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBjdXJyZW50IGFzcGVjdCByYXRp
bworICAgICAqIEBwYXJhbSB2aWV3cG9ydE93bmVyIGRlZmluZXMgdGhlIGNhbWVyYSB0byB1c2Ug
dG8gZ2V0IHRoZSBhc3BlY3QgcmF0aW8KKyAgICAgKiBAcGFyYW0gdXNlU2NyZWVuIGRlZmluZXMg
aWYgc2NyZWVuIHNpemUgbXVzdCBiZSB1c2VkIChvciB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0
IGlmIGFueSkKKyAgICAgKiBAcmV0dXJucyBhIG51bWJlciBkZWZpbmluZyB0aGUgYXNwZWN0IHJh
dGlvCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRBc3BlY3RSYXRpbyA9IGZ1bmN0
aW9uICh2aWV3cG9ydE93bmVyLCB1c2VTY3JlZW4pIHsKKyAgICAgICAgaWYgKHVzZVNjcmVlbiA9
PT0gdm9pZCAwKSB7IHVzZVNjcmVlbiA9IGZhbHNlOyB9CisgICAgICAgIHZhciB2aWV3cG9ydCA9
IHZpZXdwb3J0T3duZXIudmlld3BvcnQ7CisgICAgICAgIHJldHVybiAodGhpcy5nZXRSZW5kZXJX
aWR0aCh1c2VTY3JlZW4pICogdmlld3BvcnQud2lkdGgpIC8gKHRoaXMuZ2V0UmVuZGVySGVpZ2h0
KHVzZVNjcmVlbikgKiB2aWV3cG9ydC5oZWlnaHQpOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0cyBjdXJyZW50IHNjcmVlbiBhc3BlY3QgcmF0aW8KKyAgICAgKiBAcmV0dXJucyBhIG51bWJl
ciBkZWZpbmluZyB0aGUgYXNwZWN0IHJhdGlvCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlw
ZS5nZXRTY3JlZW5Bc3BlY3RSYXRpbyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICh0
aGlzLmdldFJlbmRlcldpZHRoKHRydWUpKSAvICh0aGlzLmdldFJlbmRlckhlaWdodCh0cnVlKSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHJlbmRlciB3aWR0aAor
ICAgICAqIEBwYXJhbSB1c2VTY3JlZW4gZGVmaW5lcyBpZiBzY3JlZW4gc2l6ZSBtdXN0IGJlIHVz
ZWQgKG9yIHRoZSBjdXJyZW50IHJlbmRlciB0YXJnZXQgaWYgYW55KQorICAgICAqIEByZXR1cm5z
IGEgbnVtYmVyIGRlZmluaW5nIHRoZSBjdXJyZW50IHJlbmRlciB3aWR0aAorICAgICAqLworICAg
IEVuZ2luZS5wcm90b3R5cGUuZ2V0UmVuZGVyV2lkdGggPSBmdW5jdGlvbiAodXNlU2NyZWVuKSB7
CisgICAgICAgIGlmICh1c2VTY3JlZW4gPT09IHZvaWQgMCkgeyB1c2VTY3JlZW4gPSBmYWxzZTsg
fQorICAgICAgICBpZiAoIXVzZVNjcmVlbiAmJiB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0KSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlbmRlclRhcmdldC53aWR0aDsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRoOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCByZW5kZXIgaGVpZ2h0CisgICAg
ICogQHBhcmFtIHVzZVNjcmVlbiBkZWZpbmVzIGlmIHNjcmVlbiBzaXplIG11c3QgYmUgdXNlZCAo
b3IgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCBpZiBhbnkpCisgICAgICogQHJldHVybnMgYSBu
dW1iZXIgZGVmaW5pbmcgdGhlIGN1cnJlbnQgcmVuZGVyIGhlaWdodAorICAgICAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUuZ2V0UmVuZGVySGVpZ2h0ID0gZnVuY3Rpb24gKHVzZVNjcmVlbikgewor
ICAgICAgICBpZiAodXNlU2NyZWVuID09PSB2b2lkIDApIHsgdXNlU2NyZWVuID0gZmFsc2U7IH0K
KyAgICAgICAgaWYgKCF1c2VTY3JlZW4gJiYgdGhpcy5fY3VycmVudFJlbmRlclRhcmdldCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQuaGVpZ2h0OworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0OworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgSFRNTCBjYW52YXMgYXR0YWNoZWQgd2l0aCB0
aGUgY3VycmVudCB3ZWJHTCBjb250ZXh0CisgICAgICogQHJldHVybnMgYSBIVE1MIGNhbnZhcwor
ICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuZ2V0UmVuZGVyaW5nQ2FudmFzID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyaW5nQ2FudmFzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyBob3N0IHdpbmRvdworICAgICAqIEByZXR1cm5zIHRoZSBob3N0
IHdpbmRvdyBvYmplY3QKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmdldEhvc3RXaW5k
b3cgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9yZW5kZXJpbmdDYW52YXMgJiYg
dGhpcy5fcmVuZGVyaW5nQ2FudmFzLm93bmVyRG9jdW1lbnQgJiYgdGhpcy5fcmVuZGVyaW5nQ2Fu
dmFzLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9yZW5kZXJpbmdDYW52YXMub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldzsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gd2luZG93OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBob3N0
IGRvY3VtZW50CisgICAgICogQHJldHVybnMgdGhlIGhvc3QgZG9jdW1lbnQgb2JqZWN0CisgICAg
ICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRIb3N0RG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICh0aGlzLl9yZW5kZXJpbmdDYW52YXMgJiYgdGhpcy5fcmVuZGVyaW5nQ2Fu
dmFzLm93bmVyRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJpbmdD
YW52YXMub3duZXJEb2N1bWVudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZG9jdW1lbnQ7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGllbnQgcmVjdCBvZiB0aGUgSFRN
TCBjYW52YXMgYXR0YWNoZWQgd2l0aCB0aGUgY3VycmVudCB3ZWJHTCBjb250ZXh0CisgICAgICog
QHJldHVybnMgYSBjbGllbnQgcmVjdGFuZ2xlZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5
cGUuZ2V0UmVuZGVyaW5nQ2FudmFzQ2xpZW50UmVjdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9yZW5kZXJpbmdDYW52YXMpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJpbmdDYW52YXMuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBoYXJk
d2FyZSBzY2FsaW5nIGxldmVsLgorICAgICAqIEJ5IGRlZmF1bHQgdGhlIGhhcmR3YXJlIHNjYWxp
bmcgbGV2ZWwgaXMgY29tcHV0ZWQgZnJvbSB0aGUgd2luZG93IGRldmljZSByYXRpby4KKyAgICAg
KiBpZiBsZXZlbCA9IDEgdGhlbiB0aGUgZW5naW5lIHdpbGwgcmVuZGVyIGF0IHRoZSBleGFjdCBy
ZXNvbHV0aW9uIG9mIHRoZSBjYW52YXMuIElmIGxldmVsID0gMC41IHRoZW4gdGhlIGVuZ2luZSB3
aWxsIHJlbmRlciBhdCB0d2ljZSB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLgorICAgICAqIEBwYXJh
bSBsZXZlbCBkZWZpbmVzIHRoZSBsZXZlbCB0byB1c2UKKyAgICAgKi8KKyAgICBFbmdpbmUucHJv
dG90eXBlLnNldEhhcmR3YXJlU2NhbGluZ0xldmVsID0gZnVuY3Rpb24gKGxldmVsKSB7CisgICAg
ICAgIHRoaXMuX2hhcmR3YXJlU2NhbGluZ0xldmVsID0gbGV2ZWw7CisgICAgICAgIHRoaXMucmVz
aXplKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGhhcmR3YXJl
IHNjYWxpbmcgbGV2ZWwuCisgICAgICogQnkgZGVmYXVsdCB0aGUgaGFyZHdhcmUgc2NhbGluZyBs
ZXZlbCBpcyBjb21wdXRlZCBmcm9tIHRoZSB3aW5kb3cgZGV2aWNlIHJhdGlvLgorICAgICAqIGlm
IGxldmVsID0gMSB0aGVuIHRoZSBlbmdpbmUgd2lsbCByZW5kZXIgYXQgdGhlIGV4YWN0IHJlc29s
dXRpb24gb2YgdGhlIGNhbnZhcy4gSWYgbGV2ZWwgPSAwLjUgdGhlbiB0aGUgZW5naW5lIHdpbGwg
cmVuZGVyIGF0IHR3aWNlIHRoZSBzaXplIG9mIHRoZSBjYW52YXMuCisgICAgICogQHJldHVybnMg
YSBudW1iZXIgaW5kaWNhdGluZyB0aGUgY3VycmVudCBoYXJkd2FyZSBzY2FsaW5nIGxldmVsCisg
ICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRIYXJkd2FyZVNjYWxpbmdMZXZlbCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2hhcmR3YXJlU2NhbGluZ0xldmVsOwor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGlzdCBvZiBsb2FkZWQgdGV4dHVyZXMK
KyAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIGFsbCBsb2FkZWQgdGV4dHVyZXMK
KyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmdldExvYWRlZFRleHR1cmVzQ2FjaGUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2FjaGU7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBvYmplY3QgY29udGFpbmluZyBhbGwg
ZW5naW5lIGNhcGFiaWxpdGllcworICAgICAqIEByZXR1cm5zIHRoZSBFbmdpbmVDYXBhYmlsaXRp
ZXMgb2JqZWN0CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRDYXBzID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fY2FwczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIGN1cnJlbnQgZGVwdGggZnVuY3Rpb24KKyAgICAgKiBAcmV0dXJucyBhIG51
bWJlciBkZWZpbmluZyB0aGUgZGVwdGggZnVuY3Rpb24KKyAgICAgKi8KKyAgICBFbmdpbmUucHJv
dG90eXBlLmdldERlcHRoRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0
aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5kZXB0aEZ1bmM7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSBjdXJyZW50IGRlcHRoIGZ1bmN0aW9uCisgICAgICogQHBhcmFtIGRlcHRoRnVu
YyBkZWZpbmVzIHRoZSBmdW5jdGlvbiB0byB1c2UKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90
eXBlLnNldERlcHRoRnVuY3Rpb24gPSBmdW5jdGlvbiAoZGVwdGhGdW5jKSB7CisgICAgICAgIHRo
aXMuX2RlcHRoQ3VsbGluZ1N0YXRlLmRlcHRoRnVuYyA9IGRlcHRoRnVuYzsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHMgdGhlIGN1cnJlbnQgZGVwdGggZnVuY3Rpb24gdG8gR1JFQVRFUgor
ICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0RGVwdGhGdW5jdGlvblRvR3JlYXRlciA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUuZGVwdGhGdW5j
ID0gdGhpcy5fZ2wuR1JFQVRFUjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGN1
cnJlbnQgZGVwdGggZnVuY3Rpb24gdG8gR0VRVUFMCisgICAgICovCisgICAgRW5naW5lLnByb3Rv
dHlwZS5zZXREZXB0aEZ1bmN0aW9uVG9HcmVhdGVyT3JFcXVhbCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUuZGVwdGhGdW5jID0gdGhpcy5fZ2wuR0VRVUFM
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3VycmVudCBkZXB0aCBmdW5jdGlv
biB0byBMRVNTCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXREZXB0aEZ1bmN0aW9u
VG9MZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5k
ZXB0aEZ1bmMgPSB0aGlzLl9nbC5MRVNTOworICAgIH07CisgICAgLyoqCisgICAgICogQ2FjaGVz
IHRoZSB0aGUgc3RhdGUgb2YgdGhlIHN0ZW5jaWwgYnVmZmVyCisgICAgICovCisgICAgRW5naW5l
LnByb3RvdHlwZS5jYWNoZVN0ZW5jaWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy5fY2FjaGVkU3RlbmNpbEJ1ZmZlciA9IHRoaXMuZ2V0U3RlbmNpbEJ1ZmZlcigpOworICAgICAg
ICB0aGlzLl9jYWNoZWRTdGVuY2lsRnVuY3Rpb24gPSB0aGlzLmdldFN0ZW5jaWxGdW5jdGlvbigp
OworICAgICAgICB0aGlzLl9jYWNoZWRTdGVuY2lsTWFzayA9IHRoaXMuZ2V0U3RlbmNpbE1hc2so
KTsKKyAgICAgICAgdGhpcy5fY2FjaGVkU3RlbmNpbE9wZXJhdGlvblBhc3MgPSB0aGlzLmdldFN0
ZW5jaWxPcGVyYXRpb25QYXNzKCk7CisgICAgICAgIHRoaXMuX2NhY2hlZFN0ZW5jaWxPcGVyYXRp
b25GYWlsID0gdGhpcy5nZXRTdGVuY2lsT3BlcmF0aW9uRmFpbCgpOworICAgICAgICB0aGlzLl9j
YWNoZWRTdGVuY2lsT3BlcmF0aW9uRGVwdGhGYWlsID0gdGhpcy5nZXRTdGVuY2lsT3BlcmF0aW9u
RGVwdGhGYWlsKCk7CisgICAgICAgIHRoaXMuX2NhY2hlZFN0ZW5jaWxSZWZlcmVuY2UgPSB0aGlz
LmdldFN0ZW5jaWxGdW5jdGlvblJlZmVyZW5jZSgpOworICAgIH07CisgICAgLyoqCisgICAgICog
UmVzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBzdGVuY2lsIGJ1ZmZlcgorICAgICAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUucmVzdG9yZVN0ZW5jaWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdGhpcy5zZXRTdGVuY2lsRnVuY3Rpb24odGhpcy5fY2FjaGVkU3RlbmNpbEZ1bmN0aW9uKTsK
KyAgICAgICAgdGhpcy5zZXRTdGVuY2lsTWFzayh0aGlzLl9jYWNoZWRTdGVuY2lsTWFzayk7Cisg
ICAgICAgIHRoaXMuc2V0U3RlbmNpbEJ1ZmZlcih0aGlzLl9jYWNoZWRTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgdGhpcy5zZXRTdGVuY2lsT3BlcmF0aW9uUGFzcyh0aGlzLl9jYWNoZWRTdGVuY2ls
T3BlcmF0aW9uUGFzcyk7CisgICAgICAgIHRoaXMuc2V0U3RlbmNpbE9wZXJhdGlvbkZhaWwodGhp
cy5fY2FjaGVkU3RlbmNpbE9wZXJhdGlvbkZhaWwpOworICAgICAgICB0aGlzLnNldFN0ZW5jaWxP
cGVyYXRpb25EZXB0aEZhaWwodGhpcy5fY2FjaGVkU3RlbmNpbE9wZXJhdGlvbkRlcHRoRmFpbCk7
CisgICAgICAgIHRoaXMuc2V0U3RlbmNpbEZ1bmN0aW9uUmVmZXJlbmNlKHRoaXMuX2NhY2hlZFN0
ZW5jaWxSZWZlcmVuY2UpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3VycmVu
dCBkZXB0aCBmdW5jdGlvbiB0byBMRVFVQUwKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBl
LnNldERlcHRoRnVuY3Rpb25Ub0xlc3NPckVxdWFsID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0
aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5kZXB0aEZ1bmMgPSB0aGlzLl9nbC5MRVFVQUw7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHN0ZW5jaWwg
YnVmZmVyIGlzIGVuYWJsZWQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBzdGVuY2lsIGJ1
ZmZlciBzdGF0ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuZ2V0U3RlbmNpbEJ1ZmZl
ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVu
Y2lsVGVzdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBz
dGVuY2lsIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBlbmFibGUgZGVmaW5lcyBpZiB0aGUgc3RlbmNp
bCBidWZmZXIgbXVzdCBiZSBlbmFibGVkIG9yIGRpc2FibGVkCisgICAgICovCisgICAgRW5naW5l
LnByb3RvdHlwZS5zZXRTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24gKGVuYWJsZSkgeworICAgICAg
ICB0aGlzLl9zdGVuY2lsU3RhdGUuc3RlbmNpbFRlc3QgPSBlbmFibGU7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHN0ZW5jaWwgbWFzaworICAgICAqIEByZXR1cm5z
IGEgbnVtYmVyIGRlZmluaW5nIHRoZSBuZXcgc3RlbmNpbCBtYXNrIHRvIHVzZQorICAgICAqLwor
ICAgIEVuZ2luZS5wcm90b3R5cGUuZ2V0U3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9zdGVuY2lsU3RhdGUuc3RlbmNpbE1hc2s7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIHRoZSBjdXJyZW50IHN0ZW5jaWwgbWFzaworICAgICAqIEBwYXJhbSBt
YXNrIGRlZmluZXMgdGhlIG5ldyBzdGVuY2lsIG1hc2sgdG8gdXNlCisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5zZXRTdGVuY2lsTWFzayA9IGZ1bmN0aW9uIChtYXNrKSB7CisgICAgICAg
IHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsTWFzayA9IG1hc2s7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHN0ZW5jaWwgZnVuY3Rpb24KKyAgICAgKiBAcmV0dXJu
cyBhIG51bWJlciBkZWZpbmluZyB0aGUgc3RlbmNpbCBmdW5jdGlvbiB0byB1c2UKKyAgICAgKi8K
KyAgICBFbmdpbmUucHJvdG90eXBlLmdldFN0ZW5jaWxGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsRnVuYzsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RlbmNpbCByZWZlcmVuY2UgdmFsdWUK
KyAgICAgKiBAcmV0dXJucyBhIG51bWJlciBkZWZpbmluZyB0aGUgc3RlbmNpbCByZWZlcmVuY2Ug
dmFsdWUgdG8gdXNlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRTdGVuY2lsRnVu
Y3Rpb25SZWZlcmVuY2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9zdGVu
Y2lsU3RhdGUuc3RlbmNpbEZ1bmNSZWY7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRo
ZSBjdXJyZW50IHN0ZW5jaWwgbWFzaworICAgICAqIEByZXR1cm5zIGEgbnVtYmVyIGRlZmluaW5n
IHRoZSBzdGVuY2lsIG1hc2sgdG8gdXNlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5n
ZXRTdGVuY2lsRnVuY3Rpb25NYXNrID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5fc3RlbmNpbFN0YXRlLnN0ZW5jaWxGdW5jTWFzazsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFNldHMgdGhlIGN1cnJlbnQgc3RlbmNpbCBmdW5jdGlvbgorICAgICAqIEBwYXJhbSBzdGVuY2ls
RnVuYyBkZWZpbmVzIHRoZSBuZXcgc3RlbmNpbCBmdW5jdGlvbiB0byB1c2UKKyAgICAgKi8KKyAg
ICBFbmdpbmUucHJvdG90eXBlLnNldFN0ZW5jaWxGdW5jdGlvbiA9IGZ1bmN0aW9uIChzdGVuY2ls
RnVuYykgeworICAgICAgICB0aGlzLl9zdGVuY2lsU3RhdGUuc3RlbmNpbEZ1bmMgPSBzdGVuY2ls
RnVuYzsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGN1cnJlbnQgc3RlbmNpbCBy
ZWZlcmVuY2UKKyAgICAgKiBAcGFyYW0gcmVmZXJlbmNlIGRlZmluZXMgdGhlIG5ldyBzdGVuY2ls
IHJlZmVyZW5jZSB0byB1c2UKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldFN0ZW5j
aWxGdW5jdGlvblJlZmVyZW5jZSA9IGZ1bmN0aW9uIChyZWZlcmVuY2UpIHsKKyAgICAgICAgdGhp
cy5fc3RlbmNpbFN0YXRlLnN0ZW5jaWxGdW5jUmVmID0gcmVmZXJlbmNlOworICAgIH07CisgICAg
LyoqCisgICAgICogU2V0cyB0aGUgY3VycmVudCBzdGVuY2lsIG1hc2sKKyAgICAgKiBAcGFyYW0g
bWFzayBkZWZpbmVzIHRoZSBuZXcgc3RlbmNpbCBtYXNrIHRvIHVzZQorICAgICAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUuc2V0U3RlbmNpbEZ1bmN0aW9uTWFzayA9IGZ1bmN0aW9uIChtYXNrKSB7
CisgICAgICAgIHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsRnVuY01hc2sgPSBtYXNrOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBzdGVuY2lsIG9wZXJhdGlvbiB3
aGVuIHN0ZW5jaWwgZmFpbHMKKyAgICAgKiBAcmV0dXJucyBhIG51bWJlciBkZWZpbmluZyBzdGVu
Y2lsIG9wZXJhdGlvbiB0byB1c2Ugd2hlbiBzdGVuY2lsIGZhaWxzCisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5nZXRTdGVuY2lsT3BlcmF0aW9uRmFpbCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsT3BTdGVuY2lsRmFpbDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RlbmNpbCBvcGVyYXRpb24g
d2hlbiBkZXB0aCBmYWlscworICAgICAqIEByZXR1cm5zIGEgbnVtYmVyIGRlZmluaW5nIHN0ZW5j
aWwgb3BlcmF0aW9uIHRvIHVzZSB3aGVuIGRlcHRoIGZhaWxzCisgICAgICovCisgICAgRW5naW5l
LnByb3RvdHlwZS5nZXRTdGVuY2lsT3BlcmF0aW9uRGVwdGhGYWlsID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fc3RlbmNpbFN0YXRlLnN0ZW5jaWxPcERlcHRoRmFpbDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RlbmNpbCBvcGVyYXRpb24g
d2hlbiBzdGVuY2lsIHBhc3NlcworICAgICAqIEByZXR1cm5zIGEgbnVtYmVyIGRlZmluaW5nIHN0
ZW5jaWwgb3BlcmF0aW9uIHRvIHVzZSB3aGVuIHN0ZW5jaWwgcGFzc2VzCisgICAgICovCisgICAg
RW5naW5lLnByb3RvdHlwZS5nZXRTdGVuY2lsT3BlcmF0aW9uUGFzcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsT3BTdGVuY2lsRGVwdGhQ
YXNzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgc3RlbmNpbCBvcGVyYXRpb24g
dG8gdXNlIHdoZW4gc3RlbmNpbCBmYWlscworICAgICAqIEBwYXJhbSBvcGVyYXRpb24gZGVmaW5l
cyB0aGUgc3RlbmNpbCBvcGVyYXRpb24gdG8gdXNlIHdoZW4gc3RlbmNpbCBmYWlscworICAgICAq
LworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0U3RlbmNpbE9wZXJhdGlvbkZhaWwgPSBmdW5jdGlv
biAob3BlcmF0aW9uKSB7CisgICAgICAgIHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsT3BTdGVu
Y2lsRmFpbCA9IG9wZXJhdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHN0
ZW5jaWwgb3BlcmF0aW9uIHRvIHVzZSB3aGVuIGRlcHRoIGZhaWxzCisgICAgICogQHBhcmFtIG9w
ZXJhdGlvbiBkZWZpbmVzIHRoZSBzdGVuY2lsIG9wZXJhdGlvbiB0byB1c2Ugd2hlbiBkZXB0aCBm
YWlscworICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0U3RlbmNpbE9wZXJhdGlvbkRl
cHRoRmFpbCA9IGZ1bmN0aW9uIChvcGVyYXRpb24pIHsKKyAgICAgICAgdGhpcy5fc3RlbmNpbFN0
YXRlLnN0ZW5jaWxPcERlcHRoRmFpbCA9IG9wZXJhdGlvbjsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldHMgdGhlIHN0ZW5jaWwgb3BlcmF0aW9uIHRvIHVzZSB3aGVuIHN0ZW5jaWwgcGFzc2Vz
CisgICAgICogQHBhcmFtIG9wZXJhdGlvbiBkZWZpbmVzIHRoZSBzdGVuY2lsIG9wZXJhdGlvbiB0
byB1c2Ugd2hlbiBzdGVuY2lsIHBhc3NlcworICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUu
c2V0U3RlbmNpbE9wZXJhdGlvblBhc3MgPSBmdW5jdGlvbiAob3BlcmF0aW9uKSB7CisgICAgICAg
IHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsT3BTdGVuY2lsRGVwdGhQYXNzID0gb3BlcmF0aW9u
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0
aGUgZGl0aGVyaW5nIHN0YXRlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQKKyAgICAgKiBAcGFyYW0g
dmFsdWUgZGVmaW5lcyB0aGUgZGl0aGVyaW5nIHN0YXRlCisgICAgICovCisgICAgRW5naW5lLnBy
b3RvdHlwZS5zZXREaXRoZXJpbmdTdGF0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBp
ZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmVuYWJsZSh0aGlzLl9nbC5ESVRIRVIp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZ2wuZGlzYWJs
ZSh0aGlzLl9nbC5ESVRIRVIpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSByYXN0ZXJpemVyIHN0YXRlIGlzIGVuYWJs
ZWQgb3IgZGlzYWJsZWQKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5lcyB0aGUgcmFzdGVyaXpl
ciBzdGF0ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0UmFzdGVyaXplclN0YXRl
ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAg
dGhpcy5fZ2wuZGlzYWJsZSh0aGlzLl9nbC5SQVNURVJJWkVSX0RJU0NBUkQpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZ2wuZW5hYmxlKHRoaXMuX2dsLlJB
U1RFUklaRVJfRElTQ0FSRCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIHN0
b3AgZXhlY3V0aW5nIGEgcmVuZGVyIGxvb3AgZnVuY3Rpb24gYW5kIHJlbW92ZSBpdCBmcm9tIHRo
ZSBleGVjdXRpb24gYXJyYXkKKyAgICAgKiBAcGFyYW0gcmVuZGVyRnVuY3Rpb24gZGVmaW5lcyB0
aGUgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZC4gSWYgbm90IHByb3ZpZGVkIGFsbCBmdW5jdGlvbnMg
d2lsbCBiZSByZW1vdmVkLgorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc3RvcFJlbmRl
ckxvb3AgPSBmdW5jdGlvbiAocmVuZGVyRnVuY3Rpb24pIHsKKyAgICAgICAgaWYgKCFyZW5kZXJG
dW5jdGlvbikgeworICAgICAgICAgICAgdGhpcy5fYWN0aXZlUmVuZGVyTG9vcHMgPSBbXTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9h
Y3RpdmVSZW5kZXJMb29wcy5pbmRleE9mKHJlbmRlckZ1bmN0aW9uKTsKKyAgICAgICAgaWYgKGlu
ZGV4ID49IDApIHsKKyAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlckxvb3BzLnNwbGljZShp
bmRleCwgMSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5fcmVuZGVyTG9vcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0
aGlzLl9jb250ZXh0V2FzTG9zdCkgeworICAgICAgICAgICAgdmFyIHNob3VsZFJlbmRlciA9IHRy
dWU7CisgICAgICAgICAgICBpZiAoIXRoaXMucmVuZGVyRXZlbkluQmFja2dyb3VuZCAmJiB0aGlz
Ll93aW5kb3dJc0JhY2tncm91bmQpIHsKKyAgICAgICAgICAgICAgICBzaG91bGRSZW5kZXIgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzaG91bGRSZW5kZXIpIHsKKyAg
ICAgICAgICAgICAgICAvLyBTdGFydCBuZXcgZnJhbWUKKyAgICAgICAgICAgICAgICB0aGlzLmJl
Z2luRnJhbWUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwg
dGhpcy5fYWN0aXZlUmVuZGVyTG9vcHMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciByZW5kZXJGdW5jdGlvbiA9IHRoaXMuX2FjdGl2ZVJlbmRlckxvb3BzW2luZGV4
XTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyRnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgLy8gUHJlc2VudAorICAgICAgICAgICAgICAgIHRoaXMuZW5k
RnJhbWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYWN0
aXZlUmVuZGVyTG9vcHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgLy8gUmVnaXN0ZXIgbmV3
IGZyYW1lCisgICAgICAgICAgICBpZiAodGhpcy5jdXN0b21BbmltYXRpb25GcmFtZVJlcXVlc3Rl
cikgeworICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tQW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZXIu
cmVxdWVzdElEID0gdGhpcy5fcXVldWVOZXdGcmFtZSh0aGlzLmN1c3RvbUFuaW1hdGlvbkZyYW1l
UmVxdWVzdGVyLnJlbmRlckZ1bmN0aW9uIHx8IHRoaXMuX2JpbmRlZFJlbmRlckZ1bmN0aW9uLCB0
aGlzLmN1c3RvbUFuaW1hdGlvbkZyYW1lUmVxdWVzdGVyKTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9mcmFtZUhhbmRsZXIgPSB0aGlzLmN1c3RvbUFuaW1hdGlvbkZyYW1lUmVxdWVzdGVyLnJlcXVl
c3RJRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNWUlByZXNl
bnRpbmcoKSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RWUkZyYW1lKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9mcmFt
ZUhhbmRsZXIgPSB0aGlzLl9xdWV1ZU5ld0ZyYW1lKHRoaXMuX2JpbmRlZFJlbmRlckZ1bmN0aW9u
LCB0aGlzLmdldEhvc3RXaW5kb3coKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdRdWV1ZUxhdW5jaGVkID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENhbiBiZSB1c2VkIHRvIG92
ZXJyaWRlIHRoZSBjdXJyZW50IHJlcXVlc3RBbmltYXRpb25GcmFtZSByZXF1ZXN0ZXIuCisgICAg
ICogQGhpZGRlbgorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3F1ZXVlTmV3RnJhbWUg
PSBmdW5jdGlvbiAoYmluZGVkUmVuZGVyRnVuY3Rpb24sIHJlcXVlc3RlcikgeworICAgICAgICBy
ZXR1cm4gRW5naW5lLlF1ZXVlTmV3RnJhbWUoYmluZGVkUmVuZGVyRnVuY3Rpb24sIHJlcXVlc3Rl
cik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlciBhbmQgZXhlY3V0ZSBhIHJlbmRl
ciBsb29wLiBUaGUgZW5naW5lIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgcmVuZGVyIGZ1bmN0aW9u
CisgICAgICogQHBhcmFtIHJlbmRlckZ1bmN0aW9uIGRlZmluZXMgdGhlIGZ1bmN0aW9uIHRvIGNv
bnRpbnVvdXNseSBleGVjdXRlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5ydW5SZW5k
ZXJMb29wID0gZnVuY3Rpb24gKHJlbmRlckZ1bmN0aW9uKSB7CisgICAgICAgIGlmICh0aGlzLl9h
Y3RpdmVSZW5kZXJMb29wcy5pbmRleE9mKHJlbmRlckZ1bmN0aW9uKSAhPT0gLTEpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJMb29w
cy5wdXNoKHJlbmRlckZ1bmN0aW9uKTsKKyAgICAgICAgaWYgKCF0aGlzLl9yZW5kZXJpbmdRdWV1
ZUxhdW5jaGVkKSB7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdRdWV1ZUxhdW5jaGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRlZFJlbmRlckZ1bmN0aW9uID0gdGhpcy5fcmVu
ZGVyTG9vcC5iaW5kKHRoaXMpOworICAgICAgICAgICAgdGhpcy5fZnJhbWVIYW5kbGVyID0gdGhp
cy5fcXVldWVOZXdGcmFtZSh0aGlzLl9iaW5kZWRSZW5kZXJGdW5jdGlvbiwgdGhpcy5nZXRIb3N0
V2luZG93KCkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUb2dnbGUgZnVs
bCBzY3JlZW4gbW9kZQorICAgICAqIEBwYXJhbSByZXF1ZXN0UG9pbnRlckxvY2sgZGVmaW5lcyBp
ZiBhIHBvaW50ZXIgbG9jayBzaG91bGQgYmUgcmVxdWVzdGVkIGZyb20gdGhlIHVzZXIKKyAgICAg
Ki8KKyAgICBFbmdpbmUucHJvdG90eXBlLnN3aXRjaEZ1bGxzY3JlZW4gPSBmdW5jdGlvbiAocmVx
dWVzdFBvaW50ZXJMb2NrKSB7CisgICAgICAgIGlmICh0aGlzLmlzRnVsbHNjcmVlbikgeworICAg
ICAgICAgICAgdGhpcy5leGl0RnVsbHNjcmVlbigpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgdGhpcy5lbnRlckZ1bGxzY3JlZW4ocmVxdWVzdFBvaW50ZXJMb2NrKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRW50ZXJzIGZ1bGwgc2NyZWVuIG1v
ZGUKKyAgICAgKiBAcGFyYW0gcmVxdWVzdFBvaW50ZXJMb2NrIGRlZmluZXMgaWYgYSBwb2ludGVy
IGxvY2sgc2hvdWxkIGJlIHJlcXVlc3RlZCBmcm9tIHRoZSB1c2VyCisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5lbnRlckZ1bGxzY3JlZW4gPSBmdW5jdGlvbiAocmVxdWVzdFBvaW50ZXJM
b2NrKSB7CisgICAgICAgIGlmICghdGhpcy5pc0Z1bGxzY3JlZW4pIHsKKyAgICAgICAgICAgIHRo
aXMuX3BvaW50ZXJMb2NrUmVxdWVzdGVkID0gcmVxdWVzdFBvaW50ZXJMb2NrOworICAgICAgICAg
ICAgaWYgKHRoaXMuX3JlbmRlcmluZ0NhbnZhcykgeworICAgICAgICAgICAgICAgIEVuZ2luZS5f
UmVxdWVzdEZ1bGxzY3JlZW4odGhpcy5fcmVuZGVyaW5nQ2FudmFzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRXhpdHMgZnVsbCBzY3JlZW4gbW9k
ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuZXhpdEZ1bGxzY3JlZW4gPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGlmICh0aGlzLmlzRnVsbHNjcmVlbikgeworICAgICAgICAgICAgRW5n
aW5lLl9FeGl0RnVsbHNjcmVlbigpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBFbnRlcnMgUG9pbnRlcmxvY2sgbW9kZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUu
ZW50ZXJQb2ludGVybG9jayA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRl
cmluZ0NhbnZhcykgeworICAgICAgICAgICAgRW5naW5lLl9SZXF1ZXN0UG9pbnRlcmxvY2sodGhp
cy5fcmVuZGVyaW5nQ2FudmFzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
RXhpdHMgUG9pbnRlcmxvY2sgbW9kZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuZXhp
dFBvaW50ZXJsb2NrID0gZnVuY3Rpb24gKCkgeworICAgICAgICBFbmdpbmUuX0V4aXRQb2ludGVy
bG9jaygpOworICAgIH07CisgICAgLyoqCisgICAgICogQ2xlYXIgdGhlIGN1cnJlbnQgcmVuZGVy
IGJ1ZmZlciBvciB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IChpZiBhbnkgaXMgc2V0IHVwKQor
ICAgICAqIEBwYXJhbSBjb2xvciBkZWZpbmVzIHRoZSBjb2xvciB0byB1c2UKKyAgICAgKiBAcGFy
YW0gYmFja0J1ZmZlciBkZWZpbmVzIGlmIHRoZSBiYWNrIGJ1ZmZlciBtdXN0IGJlIGNsZWFyZWQK
KyAgICAgKiBAcGFyYW0gZGVwdGggZGVmaW5lcyBpZiB0aGUgZGVwdGggYnVmZmVyIG11c3QgYmUg
Y2xlYXJlZAorICAgICAqIEBwYXJhbSBzdGVuY2lsIGRlZmluZXMgaWYgdGhlIHN0ZW5jaWwgYnVm
ZmVyIG11c3QgYmUgY2xlYXJlZAorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuY2xlYXIg
PSBmdW5jdGlvbiAoY29sb3IsIGJhY2tCdWZmZXIsIGRlcHRoLCBzdGVuY2lsKSB7CisgICAgICAg
IGlmIChzdGVuY2lsID09PSB2b2lkIDApIHsgc3RlbmNpbCA9IGZhbHNlOyB9CisgICAgICAgIHRo
aXMuYXBwbHlTdGF0ZXMoKTsKKyAgICAgICAgdmFyIG1vZGUgPSAwOworICAgICAgICBpZiAoYmFj
a0J1ZmZlciAmJiBjb2xvcikgeworICAgICAgICAgICAgdGhpcy5fZ2wuY2xlYXJDb2xvcihjb2xv
ci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hICE9PSB1bmRlZmluZWQgPyBjb2xvci5hIDog
MS4wKTsKKyAgICAgICAgICAgIG1vZGUgfD0gdGhpcy5fZ2wuQ09MT1JfQlVGRkVSX0JJVDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZGVwdGgpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmNsZWFy
RGVwdGgoMS4wKTsKKyAgICAgICAgICAgIG1vZGUgfD0gdGhpcy5fZ2wuREVQVEhfQlVGRkVSX0JJ
VDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RlbmNpbCkgeworICAgICAgICAgICAgdGhpcy5f
Z2wuY2xlYXJTdGVuY2lsKDApOworICAgICAgICAgICAgbW9kZSB8PSB0aGlzLl9nbC5TVEVOQ0lM
X0JVRkZFUl9CSVQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2wuY2xlYXIobW9kZSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlcyBhIHNjaXNzb3IgY2xlYXIgKGllLiBhIGNs
ZWFyIG9uIGEgc3BlY2lmaWMgcG9ydGlvbiBvZiB0aGUgc2NyZWVuKQorICAgICAqIEBwYXJhbSB4
IGRlZmluZXMgdGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBj
bGVhciByZWN0YW5nbGUKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5LWNvb3JkaW5hdGUg
b2YgdGhlIGNvcm5lciBvZiB0aGUgY2xlYXIgcmVjdGFuZ2xlCisgICAgICogQHBhcmFtIHdpZHRo
IGRlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBjbGVhciByZWN0YW5nbGUKKyAgICAgKiBAcGFyYW0g
aGVpZ2h0IGRlZmluZXMgdGhlIGhlaWdodCBvZiB0aGUgY2xlYXIgcmVjdGFuZ2xlCisgICAgICog
QHBhcmFtIGNsZWFyQ29sb3IgZGVmaW5lcyB0aGUgY2xlYXIgY29sb3IKKyAgICAgKi8KKyAgICBF
bmdpbmUucHJvdG90eXBlLnNjaXNzb3JDbGVhciA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBjbGVhckNvbG9yKSB7CisgICAgICAgIHRoaXMuZW5hYmxlU2Npc3Nvcih4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICAgICAgdGhpcy5jbGVhcihjbGVhckNvbG9yLCB0cnVlLCB0cnVlLCB0
cnVlKTsKKyAgICAgICAgdGhpcy5kaXNhYmxlU2Npc3NvcigpOworICAgIH07CisgICAgLyoqCisg
ICAgICogRW5hYmxlIHNjaXNzb3IgdGVzdCBvbiBhIHNwZWNpZmljIHJlY3RhbmdsZSAoaWUuIHJl
bmRlciB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYSBzcGVjaWZpYyBwb3J0aW9uIG9mIHRoZSBz
Y3JlZW4pCisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgeC1jb29yZGluYXRlIG9mIHRoZSB0
b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGNsZWFyIHJlY3RhbmdsZQorICAgICAqIEBwYXJhbSB5IGRl
ZmluZXMgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY29ybmVyIG9mIHRoZSBjbGVhciByZWN0YW5n
bGUKKyAgICAgKiBAcGFyYW0gd2lkdGggZGVmaW5lcyB0aGUgd2lkdGggb2YgdGhlIGNsZWFyIHJl
Y3RhbmdsZQorICAgICAqIEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgaGVpZ2h0IG9mIHRoZSBj
bGVhciByZWN0YW5nbGUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmVuYWJsZVNjaXNz
b3IgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCkgeworICAgICAgICB2YXIgZ2wgPSB0
aGlzLl9nbDsKKyAgICAgICAgLy8gQ2hhbmdlIHN0YXRlCisgICAgICAgIGdsLmVuYWJsZShnbC5T
Q0lTU09SX1RFU1QpOworICAgICAgICBnbC5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogRGlzYWJsZSBwcmV2aW91c2x5IHNldCBzY2lzc29yIHRl
c3QgcmVjdGFuZ2xlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5kaXNhYmxlU2Npc3Nv
ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIGds
LmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgRW5naW5lLnByb3RvdHlwZS5fdmlld3BvcnQgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhl
aWdodCkgeworICAgICAgICBpZiAoeCAhPT0gdGhpcy5fdmlld3BvcnRDYWNoZWQueCB8fAorICAg
ICAgICAgICAgeSAhPT0gdGhpcy5fdmlld3BvcnRDYWNoZWQueSB8fAorICAgICAgICAgICAgd2lk
dGggIT09IHRoaXMuX3ZpZXdwb3J0Q2FjaGVkLnogfHwKKyAgICAgICAgICAgIGhlaWdodCAhPT0g
dGhpcy5fdmlld3BvcnRDYWNoZWQudykgeworICAgICAgICAgICAgdGhpcy5fdmlld3BvcnRDYWNo
ZWQueCA9IHg7CisgICAgICAgICAgICB0aGlzLl92aWV3cG9ydENhY2hlZC55ID0geTsKKyAgICAg
ICAgICAgIHRoaXMuX3ZpZXdwb3J0Q2FjaGVkLnogPSB3aWR0aDsKKyAgICAgICAgICAgIHRoaXMu
X3ZpZXdwb3J0Q2FjaGVkLncgPSBoZWlnaHQ7CisgICAgICAgICAgICB0aGlzLl9nbC52aWV3cG9y
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0IHRoZSBXZWJHTCdzIHZpZXdwb3J0CisgICAgICogQHBhcmFtIHZpZXdwb3J0IGRlZmlu
ZXMgdGhlIHZpZXdwb3J0IGVsZW1lbnQgdG8gYmUgdXNlZAorICAgICAqIEBwYXJhbSByZXF1aXJl
ZFdpZHRoIGRlZmluZXMgdGhlIHdpZHRoIHJlcXVpcmVkIGZvciByZW5kZXJpbmcuIElmIG5vdCBw
cm92aWRlZCB0aGUgcmVuZGVyaW5nIGNhbnZhcycgd2lkdGggaXMgdXNlZAorICAgICAqIEBwYXJh
bSByZXF1aXJlZEhlaWdodCBkZWZpbmVzIHRoZSBoZWlnaHQgcmVxdWlyZWQgZm9yIHJlbmRlcmlu
Zy4gSWYgbm90IHByb3ZpZGVkIHRoZSByZW5kZXJpbmcgY2FudmFzJyBoZWlnaHQgaXMgdXNlZAor
ICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0Vmlld3BvcnQgPSBmdW5jdGlvbiAodmll
d3BvcnQsIHJlcXVpcmVkV2lkdGgsIHJlcXVpcmVkSGVpZ2h0KSB7CisgICAgICAgIHZhciB3aWR0
aCA9IHJlcXVpcmVkV2lkdGggfHwgdGhpcy5nZXRSZW5kZXJXaWR0aCgpOworICAgICAgICB2YXIg
aGVpZ2h0ID0gcmVxdWlyZWRIZWlnaHQgfHwgdGhpcy5nZXRSZW5kZXJIZWlnaHQoKTsKKyAgICAg
ICAgdmFyIHggPSB2aWV3cG9ydC54IHx8IDA7CisgICAgICAgIHZhciB5ID0gdmlld3BvcnQueSB8
fCAwOworICAgICAgICB0aGlzLl9jYWNoZWRWaWV3cG9ydCA9IHZpZXdwb3J0OworICAgICAgICB0
aGlzLl92aWV3cG9ydCh4ICogd2lkdGgsIHkgKiBoZWlnaHQsIHdpZHRoICogdmlld3BvcnQud2lk
dGgsIGhlaWdodCAqIHZpZXdwb3J0LmhlaWdodCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBE
aXJlY3RseSBzZXQgdGhlIFdlYkdMIFZpZXdwb3J0CisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0
aGUgeCBjb29yZGluYXRlIG9mIHRoZSB2aWV3cG9ydCAoaW4gc2NyZWVuIHNwYWNlKQorICAgICAq
IEBwYXJhbSB5IGRlZmluZXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgdmlld3BvcnQgKGluIHNj
cmVlbiBzcGFjZSkKKyAgICAgKiBAcGFyYW0gd2lkdGggZGVmaW5lcyB0aGUgd2lkdGggb2YgdGhl
IHZpZXdwb3J0IChpbiBzY3JlZW4gc3BhY2UpCisgICAgICogQHBhcmFtIGhlaWdodCBkZWZpbmVz
IHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0IChpbiBzY3JlZW4gc3BhY2UpCisgICAgICogQHJl
dHVybiB0aGUgY3VycmVudCB2aWV3cG9ydCBPYmplY3QgKGlmIGFueSkgdGhhdCBpcyBiZWluZyBy
ZXBsYWNlZCBieSB0aGlzIGNhbGwuIFlvdSBjYW4gcmVzdG9yZSB0aGlzIHZpZXdwb3J0IGxhdGVy
IG9uIHRvIGdvIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHN0YXRlCisgICAgICovCisgICAgRW5naW5l
LnByb3RvdHlwZS5zZXREaXJlY3RWaWV3cG9ydCA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVp
Z2h0KSB7CisgICAgICAgIHZhciBjdXJyZW50Vmlld3BvcnQgPSB0aGlzLl9jYWNoZWRWaWV3cG9y
dDsKKyAgICAgICAgdGhpcy5fY2FjaGVkVmlld3BvcnQgPSBudWxsOworICAgICAgICB0aGlzLl92
aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRWaWV3
cG9ydDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJlZ2luIGEgbmV3IGZyYW1lCisgICAgICov
CisgICAgRW5naW5lLnByb3RvdHlwZS5iZWdpbkZyYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB0aGlzLm9uQmVnaW5GcmFtZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAg
ICAgICB0aGlzLl9tZWFzdXJlRnBzKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFbmYgdGhl
IGN1cnJlbnQgZnJhbWUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmVuZEZyYW1lID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBGb3JjZSBhIGZsdXNoIGluIGNhc2Ugd2UgYXJlIHVz
aW5nIGEgYmFkIE9TLgorICAgICAgICBpZiAodGhpcy5fYmFkT1MpIHsKKyAgICAgICAgICAgIHRo
aXMuZmx1c2hGcmFtZWJ1ZmZlcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3N1Ym1pdFZS
RnJhbWUoKTsKKyAgICAgICAgdGhpcy5vbkVuZEZyYW1lT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZl
cnModGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXNpemUgdGhlIHZpZXcgYWNjb3Jk
aW5nIHRvIHRoZSBjYW52YXMnIHNpemUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnJl
c2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gV2UncmUgbm90IHJlc2l6aW5nIHRoZSBz
aXplIG9mIHRoZSBjYW52YXMgd2hpbGUgaW4gVlIgbW9kZSAmIHByZXNlbnRpbmcKKyAgICAgICAg
aWYgKCF0aGlzLmlzVlJQcmVzZW50aW5nKCkpIHsKKyAgICAgICAgICAgIHZhciB3aWR0aCA9IHRo
aXMuX3JlbmRlcmluZ0NhbnZhcyA/IHRoaXMuX3JlbmRlcmluZ0NhbnZhcy5jbGllbnRXaWR0aCA6
IHdpbmRvdy5pbm5lcldpZHRoOworICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuX3JlbmRl
cmluZ0NhbnZhcyA/IHRoaXMuX3JlbmRlcmluZ0NhbnZhcy5jbGllbnRIZWlnaHQgOiB3aW5kb3cu
aW5uZXJIZWlnaHQ7CisgICAgICAgICAgICB0aGlzLnNldFNpemUod2lkdGggLyB0aGlzLl9oYXJk
d2FyZVNjYWxpbmdMZXZlbCwgaGVpZ2h0IC8gdGhpcy5faGFyZHdhcmVTY2FsaW5nTGV2ZWwpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSBhIHNwZWNpZmljIHNpemUg
b2YgdGhlIGNhbnZhcworICAgICAqIEBwYXJhbSB3aWR0aCBkZWZpbmVzIHRoZSBuZXcgY2FudmFz
JyB3aWR0aAorICAgICAqIEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgbmV3IGNhbnZhcycgaGVp
Z2h0CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXRTaXplID0gZnVuY3Rpb24gKHdp
ZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9yZW5kZXJpbmdDYW52YXMpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB3aWR0aCA9IHdpZHRoIHwgMDsK
KyAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDsKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmlu
Z0NhbnZhcy53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy5fcmVuZGVyaW5nQ2FudmFzLmhlaWdodCA9
PT0gaGVpZ2h0KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fcmVuZGVyaW5nQ2FudmFzLndpZHRoID0gd2lkdGg7CisgICAgICAgIHRoaXMuX3JlbmRlcmlu
Z0NhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCB0aGlzLnNjZW5lcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBzY2Vu
ZSA9IHRoaXMuc2NlbmVzW2luZGV4XTsKKyAgICAgICAgICAgIGZvciAodmFyIGNhbUluZGV4ID0g
MDsgY2FtSW5kZXggPCBzY2VuZS5jYW1lcmFzLmxlbmd0aDsgY2FtSW5kZXgrKykgeworICAgICAg
ICAgICAgICAgIHZhciBjYW0gPSBzY2VuZS5jYW1lcmFzW2NhbUluZGV4XTsKKyAgICAgICAgICAg
ICAgICBjYW0uX2N1cnJlbnRSZW5kZXJJZCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMub25SZXNpemVPYnNlcnZhYmxlLmhhc09ic2VydmVycykgeworICAg
ICAgICAgICAgdGhpcy5vblJlc2l6ZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgZnJhbWUgYnVmZmVy
IHRvIHRoZSBzcGVjaWZpZWQgdGV4dHVyZS4KKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBUaGUgdGV4
dHVyZSB0byByZW5kZXIgdG8gb3IgbnVsbCBmb3IgdGhlIGRlZmF1bHQgY2FudmFzCisgICAgICog
QHBhcmFtIGZhY2VJbmRleCBUaGUgZmFjZSBvZiB0aGUgdGV4dHVyZSB0byByZW5kZXIgdG8gaW4g
Y2FzZSBvZiBjdWJlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gcmVxdWlyZWRXaWR0aCBUaGUgd2lk
dGggb2YgdGhlIHRhcmdldCB0byByZW5kZXIgdG8KKyAgICAgKiBAcGFyYW0gcmVxdWlyZWRIZWln
aHQgVGhlIGhlaWdodCBvZiB0aGUgdGFyZ2V0IHRvIHJlbmRlciB0bworICAgICAqIEBwYXJhbSBm
b3JjZUZ1bGxzY3JlZW5WaWV3cG9ydCBGb3JjZXMgdGhlIHZpZXdwb3J0IHRvIGJlIHRoZSBlbnRp
cmUgdGV4dHVyZS9zY3JlZW4gaWYgdHJ1ZQorICAgICAqIEBwYXJhbSBkZXB0aFN0ZW5jaWxUZXh0
dXJlIFRoZSBkZXB0aCBzdGVuY2lsIHRleHR1cmUgdG8gdXNlIHRvIHJlbmRlcgorICAgICAqIEBw
YXJhbSBsb2RMZXZlbCBkZWZpbmVzIGxlIGxvZCBsZXZlbCB0byBiaW5kIHRvIHRoZSBmcmFtZSBi
dWZmZXIKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmJpbmRGcmFtZWJ1ZmZlciA9IGZ1
bmN0aW9uICh0ZXh0dXJlLCBmYWNlSW5kZXgsIHJlcXVpcmVkV2lkdGgsIHJlcXVpcmVkSGVpZ2h0
LCBmb3JjZUZ1bGxzY3JlZW5WaWV3cG9ydCwgZGVwdGhTdGVuY2lsVGV4dHVyZSwgbG9kTGV2ZWwp
IHsKKyAgICAgICAgaWYgKGxvZExldmVsID09PSB2b2lkIDApIHsgbG9kTGV2ZWwgPSAwOyB9Cisg
ICAgICAgIGlmICh0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICB0aGlz
LnVuQmluZEZyYW1lYnVmZmVyKHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQgPSB0ZXh0dXJlOworICAgICAgICB0
aGlzLl9iaW5kVW5ib3VuZEZyYW1lYnVmZmVyKHRleHR1cmUuX01TQUFGcmFtZWJ1ZmZlciA/IHRl
eHR1cmUuX01TQUFGcmFtZWJ1ZmZlciA6IHRleHR1cmUuX2ZyYW1lYnVmZmVyKTsKKyAgICAgICAg
dmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIGlmICh0ZXh0dXJlLmlzQ3ViZSkgeworICAgICAg
ICAgICAgaWYgKGZhY2VJbmRleCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgZmFj
ZUluZGV4ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4
dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCB0ZXh0dXJlLl93ZWJHTFRleHR1cmUsIGxv
ZExldmVsKTsKKyAgICAgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxUZXh0dXJlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFRleHR1cmUuX2dlbmVyYXRlU3RlbmNpbEJ1ZmZlcikg
eworICAgICAgICAgICAgICAgICAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJV
RkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlSW5kZXgsIGRlcHRoU3RlbmNpbFRleHR1cmUuX3dlYkdMVGV4dHVyZSwg
bG9kTGV2ZWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIs
IGdsLkRFUFRIX0FUVEFDSE1FTlQsIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZh
Y2VJbmRleCwgZGVwdGhTdGVuY2lsVGV4dHVyZS5fd2ViR0xUZXh0dXJlLCBsb2RMZXZlbCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLl9jYWNoZWRWaWV3cG9ydCAmJiAhZm9yY2VGdWxsc2NyZWVuVmlld3BvcnQpIHsKKyAgICAg
ICAgICAgIHRoaXMuc2V0Vmlld3BvcnQodGhpcy5fY2FjaGVkVmlld3BvcnQsIHJlcXVpcmVkV2lk
dGgsIHJlcXVpcmVkSGVpZ2h0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGlmICghcmVxdWlyZWRXaWR0aCkgeworICAgICAgICAgICAgICAgIHJlcXVpcmVkV2lkdGgg
PSB0ZXh0dXJlLndpZHRoOworICAgICAgICAgICAgICAgIGlmIChsb2RMZXZlbCkgeworICAgICAg
ICAgICAgICAgICAgICByZXF1aXJlZFdpZHRoID0gcmVxdWlyZWRXaWR0aCAvIE1hdGgucG93KDIs
IGxvZExldmVsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIXJlcXVpcmVkSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgcmVxdWlyZWRIZWlnaHQg
PSB0ZXh0dXJlLmhlaWdodDsKKyAgICAgICAgICAgICAgICBpZiAobG9kTGV2ZWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVxdWlyZWRIZWlnaHQgPSByZXF1aXJlZEhlaWdodCAvIE1hdGgucG93
KDIsIGxvZExldmVsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl92aWV3cG9ydCgwLCAwLCByZXF1aXJlZFdpZHRoLCByZXF1aXJlZEhlaWdodCk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy53aXBlQ2FjaGVzKCk7CisgICAgfTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX2JpbmRVbmJvdW5kRnJhbWVidWZmZXIg
PSBmdW5jdGlvbiAoZnJhbWVidWZmZXIpIHsKKyAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRGcmFt
ZWJ1ZmZlciAhPT0gZnJhbWVidWZmZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmJpbmRGcmFt
ZWJ1ZmZlcih0aGlzLl9nbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpOworICAgICAgICAgICAg
dGhpcy5fY3VycmVudEZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIFVuYmluZCB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRleHR1
cmUgZnJvbSB0aGUgd2ViR0wgY29udGV4dAorICAgICAqIEBwYXJhbSB0ZXh0dXJlIGRlZmluZXMg
dGhlIHJlbmRlciB0YXJnZXQgdGV4dHVyZSB0byB1bmJpbmQKKyAgICAgKiBAcGFyYW0gZGlzYWJs
ZUdlbmVyYXRlTWlwTWFwcyBkZWZpbmVzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgbWlwbWFw
cyBtdXN0IG5vdCBiZSBnZW5lcmF0ZWQKKyAgICAgKiBAcGFyYW0gb25CZWZvcmVVbmJpbmQgZGVm
aW5lcyBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgZWZmZWN0aXZl
IHVuYmluZAorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUudW5CaW5kRnJhbWVidWZmZXIg
PSBmdW5jdGlvbiAodGV4dHVyZSwgZGlzYWJsZUdlbmVyYXRlTWlwTWFwcywgb25CZWZvcmVVbmJp
bmQpIHsKKyAgICAgICAgaWYgKGRpc2FibGVHZW5lcmF0ZU1pcE1hcHMgPT09IHZvaWQgMCkgeyBk
aXNhYmxlR2VuZXJhdGVNaXBNYXBzID0gZmFsc2U7IH0KKyAgICAgICAgdGhpcy5fY3VycmVudFJl
bmRlclRhcmdldCA9IG51bGw7CisgICAgICAgIC8vIElmIE1TQUEsIHdlIG5lZWQgdG8gYml0Ymx0
IGJhY2sgdG8gbWFpbiB0ZXh0dXJlCisgICAgICAgIHZhciBnbCA9IHRoaXMuX2dsOworICAgICAg
ICBpZiAodGV4dHVyZS5fTVNBQUZyYW1lYnVmZmVyKSB7CisgICAgICAgICAgICBnbC5iaW5kRnJh
bWVidWZmZXIoZ2wuUkVBRF9GUkFNRUJVRkZFUiwgdGV4dHVyZS5fTVNBQUZyYW1lYnVmZmVyKTsK
KyAgICAgICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5EUkFXX0ZSQU1FQlVGRkVSLCB0ZXh0
dXJlLl9mcmFtZWJ1ZmZlcik7CisgICAgICAgICAgICBnbC5ibGl0RnJhbWVidWZmZXIoMCwgMCwg
dGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsIDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1
cmUuaGVpZ2h0LCBnbC5DT0xPUl9CVUZGRVJfQklULCBnbC5ORUFSRVNUKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMgJiYgIWRpc2FibGVHZW5lcmF0ZU1p
cE1hcHMgJiYgIXRleHR1cmUuaXNDdWJlKSB7CisgICAgICAgICAgICB0aGlzLl9iaW5kVGV4dHVy
ZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIHRleHR1cmUsIHRydWUpOworICAgICAgICAgICAgZ2wu
Z2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7CisgICAgICAgICAgICB0aGlzLl9iaW5kVGV4
dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIG51bGwpOworICAgICAgICB9CisgICAgICAgIGlm
IChvbkJlZm9yZVVuYmluZCkgeworICAgICAgICAgICAgaWYgKHRleHR1cmUuX01TQUFGcmFtZWJ1
ZmZlcikgeworICAgICAgICAgICAgICAgIC8vIEJpbmQgdGhlIGNvcnJlY3QgZnJhbWVidWZmZXIK
KyAgICAgICAgICAgICAgICB0aGlzLl9iaW5kVW5ib3VuZEZyYW1lYnVmZmVyKHRleHR1cmUuX2Zy
YW1lYnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9uQmVmb3JlVW5iaW5kKCk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYmluZFVuYm91bmRGcmFtZWJ1ZmZlcihudWxsKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEZvcmNlIHRoZSBtaXBtYXAgZ2VuZXJhdGlvbiBmb3Ig
dGhlIGdpdmVuIHJlbmRlciB0YXJnZXQgdGV4dHVyZQorICAgICAqIEBwYXJhbSB0ZXh0dXJlIGRl
ZmluZXMgdGhlIHJlbmRlciB0YXJnZXQgdGV4dHVyZSB0byB1c2UKKyAgICAgKi8KKyAgICBFbmdp
bmUucHJvdG90eXBlLmdlbmVyYXRlTWlwTWFwc0ZvckN1YmVtYXAgPSBmdW5jdGlvbiAodGV4dHVy
ZSkgeworICAgICAgICBpZiAodGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAgICAgICAg
IHZhciBnbCA9IHRoaXMuX2dsOworICAgICAgICAgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3Rs
eShnbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlLCB0cnVlKTsKKyAgICAgICAgICAgIGdsLmdl
bmVyYXRlTWlwbWFwKGdsLlRFWFRVUkVfQ1VCRV9NQVApOworICAgICAgICAgICAgdGhpcy5fYmlu
ZFRleHR1cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQLCBudWxsKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqCisgICAgICogRm9yY2UgYSB3ZWJHTCBmbHVzaCAoaWUuIGEgZmx1c2gg
b2YgYWxsIHdhaXRpbmcgd2ViR0wgY29tbWFuZHMpCisgICAgICovCisgICAgRW5naW5lLnByb3Rv
dHlwZS5mbHVzaEZyYW1lYnVmZmVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9nbC5m
bHVzaCgpOworICAgIH07CisgICAgLyoqCisgICAgICogVW5iaW5kIHRoZSBjdXJyZW50IHJlbmRl
ciB0YXJnZXQgYW5kIGJpbmQgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIKKyAgICAgKi8KKyAgICBF
bmdpbmUucHJvdG90eXBlLnJlc3RvcmVEZWZhdWx0RnJhbWVidWZmZXIgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICB0
aGlzLnVuQmluZEZyYW1lYnVmZmVyKHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fYmluZFVuYm91bmRGcmFtZWJ1
ZmZlcihudWxsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY2FjaGVkVmlld3BvcnQp
IHsKKyAgICAgICAgICAgIHRoaXMuc2V0Vmlld3BvcnQodGhpcy5fY2FjaGVkVmlld3BvcnQpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMud2lwZUNhY2hlcygpOworICAgIH07CisgICAgLy8gVUJP
cworICAgIC8qKgorICAgICAqIENyZWF0ZSBhbiB1bmlmb3JtIGJ1ZmZlcgorICAgICAqIEBzZWUg
aHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL3dlYmdsMiN1bmlmb3JtLWJ1ZmZlci1v
YmpldHMKKyAgICAgKiBAcGFyYW0gZWxlbWVudHMgZGVmaW5lcyB0aGUgY29udGVudCBvZiB0aGUg
dW5pZm9ybSBidWZmZXIKKyAgICAgKiBAcmV0dXJucyB0aGUgd2ViR0wgdW5pZm9ybSBidWZmZXIK
KyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVVuaWZvcm1CdWZmZXIgPSBmdW5j
dGlvbiAoZWxlbWVudHMpIHsKKyAgICAgICAgdmFyIHVibyA9IHRoaXMuX2dsLmNyZWF0ZUJ1ZmZl
cigpOworICAgICAgICBpZiAoIXVibykgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJV
bmFibGUgdG8gY3JlYXRlIHVuaWZvcm0gYnVmZmVyIik7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHJlc3VsdCA9IG5ldyBfTWVzaGVzX1dlYkdMX3dlYkdMRGF0YUJ1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfX1siV2ViR0xEYXRhQnVmZmVyIl0odWJvKTsKKyAgICAgICAgdGhpcy5i
aW5kVW5pZm9ybUJ1ZmZlcihyZXN1bHQpOworICAgICAgICBpZiAoZWxlbWVudHMgaW5zdGFuY2Vv
ZiBGbG9hdDMyQXJyYXkpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmJ1ZmZlckRhdGEodGhpcy5f
Z2wuVU5JRk9STV9CVUZGRVIsIGVsZW1lbnRzLCB0aGlzLl9nbC5TVEFUSUNfRFJBVyk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9nbC5idWZmZXJEYXRhKHRo
aXMuX2dsLlVOSUZPUk1fQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KGVsZW1lbnRzKSwgdGhpcy5f
Z2wuU1RBVElDX0RSQVcpOworICAgICAgICB9CisgICAgICAgIHRoaXMuYmluZFVuaWZvcm1CdWZm
ZXIobnVsbCk7CisgICAgICAgIHJlc3VsdC5yZWZlcmVuY2VzID0gMTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGR5bmFtaWMgdW5pZm9y
bSBidWZmZXIKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy93
ZWJnbDIjdW5pZm9ybS1idWZmZXItb2JqZXRzCisgICAgICogQHBhcmFtIGVsZW1lbnRzIGRlZmlu
ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHVuaWZvcm0gYnVmZmVyCisgICAgICogQHJldHVybnMgdGhl
IHdlYkdMIHVuaWZvcm0gYnVmZmVyCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5jcmVh
dGVEeW5hbWljVW5pZm9ybUJ1ZmZlciA9IGZ1bmN0aW9uIChlbGVtZW50cykgeworICAgICAgICB2
YXIgdWJvID0gdGhpcy5fZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgICAgIGlmICghdWJvKSB7Cisg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgZHluYW1pYyB1bmlm
b3JtIGJ1ZmZlciIpOworICAgICAgICB9CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgX01lc2hl
c19XZWJHTF93ZWJHTERhdGFCdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIldl
YkdMRGF0YUJ1ZmZlciJdKHVibyk7CisgICAgICAgIHRoaXMuYmluZFVuaWZvcm1CdWZmZXIocmVz
dWx0KTsKKyAgICAgICAgaWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSB7Cisg
ICAgICAgICAgICB0aGlzLl9nbC5idWZmZXJEYXRhKHRoaXMuX2dsLlVOSUZPUk1fQlVGRkVSLCBl
bGVtZW50cywgdGhpcy5fZ2wuRFlOQU1JQ19EUkFXKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmJ1ZmZlckRhdGEodGhpcy5fZ2wuVU5JRk9STV9CVUZG
RVIsIG5ldyBGbG9hdDMyQXJyYXkoZWxlbWVudHMpLCB0aGlzLl9nbC5EWU5BTUlDX0RSQVcpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuYmluZFVuaWZvcm1CdWZmZXIobnVsbCk7CisgICAgICAg
IHJlc3VsdC5yZWZlcmVuY2VzID0gMTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFVwZGF0ZSBhbiBleGlzdGluZyB1bmlmb3JtIGJ1ZmZlcgorICAgICAq
IEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL3dlYmdsMiN1bmlmb3JtLWJ1
ZmZlci1vYmpldHMKKyAgICAgKiBAcGFyYW0gdW5pZm9ybUJ1ZmZlciBkZWZpbmVzIHRoZSB0YXJn
ZXQgdW5pZm9ybSBidWZmZXIKKyAgICAgKiBAcGFyYW0gZWxlbWVudHMgZGVmaW5lcyB0aGUgY29u
dGVudCB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gb2Zmc2V0IGRlZmluZXMgdGhlIG9mZnNldCBp
biB0aGUgdW5pZm9ybSBidWZmZXIgd2hlcmUgdXBkYXRlIHNob3VsZCBzdGFydAorICAgICAqIEBw
YXJhbSBjb3VudCBkZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBkYXRhIHRvIHVwZGF0ZQorICAgICAq
LworICAgIEVuZ2luZS5wcm90b3R5cGUudXBkYXRlVW5pZm9ybUJ1ZmZlciA9IGZ1bmN0aW9uICh1
bmlmb3JtQnVmZmVyLCBlbGVtZW50cywgb2Zmc2V0LCBjb3VudCkgeworICAgICAgICB0aGlzLmJp
bmRVbmlmb3JtQnVmZmVyKHVuaWZvcm1CdWZmZXIpOworICAgICAgICBpZiAob2Zmc2V0ID09PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGNvdW50ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50cyBpbnN0
YW5jZW9mIEZsb2F0MzJBcnJheSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2dsLmJ1ZmZlclN1
YkRhdGEodGhpcy5fZ2wuVU5JRk9STV9CVUZGRVIsIG9mZnNldCwgZWxlbWVudHMpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZ2wuYnVm
ZmVyU3ViRGF0YSh0aGlzLl9nbC5VTklGT1JNX0JVRkZFUiwgb2Zmc2V0LCBuZXcgRmxvYXQzMkFy
cmF5KGVsZW1lbnRzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9nbC5idWZmZXJTdWJEYXRhKHRoaXMuX2dsLlVOSUZPUk1fQlVG
RkVSLCAwLCBlbGVtZW50cy5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGNvdW50KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9nbC5i
dWZmZXJTdWJEYXRhKHRoaXMuX2dsLlVOSUZPUk1fQlVGRkVSLCAwLCBuZXcgRmxvYXQzMkFycmF5
KGVsZW1lbnRzKS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGNvdW50KSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5iaW5kVW5pZm9ybUJ1ZmZlcihudWxsKTsKKyAg
ICB9OworICAgIC8vIFZCT3MKKyAgICBFbmdpbmUucHJvdG90eXBlLl9yZXNldFZlcnRleEJ1ZmZl
ckJpbmRpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuYmluZEFycmF5QnVmZmVyKG51
bGwpOworICAgICAgICB0aGlzLl9jYWNoZWRWZXJ0ZXhCdWZmZXJzID0gbnVsbDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSB2ZXJ0ZXggYnVmZmVyCisgICAgICogQHBhcmFtIGRh
dGEgdGhlIGRhdGEgZm9yIHRoZSB2ZXJ0ZXggYnVmZmVyCisgICAgICogQHJldHVybnMgdGhlIG5l
dyBXZWJHTCBzdGF0aWMgYnVmZmVyCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5jcmVh
dGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB2YXIgdmJvID0gdGhp
cy5fZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgICAgIGlmICghdmJvKSB7CisgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgdmVydGV4IGJ1ZmZlciIpOworICAgICAg
ICB9CisgICAgICAgIHZhciBkYXRhQnVmZmVyID0gbmV3IF9NZXNoZXNfV2ViR0xfd2ViR0xEYXRh
QnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJXZWJHTERhdGFCdWZmZXIiXSh2
Ym8pOworICAgICAgICB0aGlzLmJpbmRBcnJheUJ1ZmZlcihkYXRhQnVmZmVyKTsKKyAgICAgICAg
aWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgdGhpcy5fZ2wuYnVmZmVy
RGF0YSh0aGlzLl9nbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoZGF0YSksIHRoaXMu
X2dsLlNUQVRJQ19EUkFXKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHRoaXMuX2dsLmJ1ZmZlckRhdGEodGhpcy5fZ2wuQVJSQVlfQlVGRkVSLCBkYXRhLCB0aGlzLl9n
bC5TVEFUSUNfRFJBVyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVzZXRWZXJ0ZXhCdWZm
ZXJCaW5kaW5nKCk7CisgICAgICAgIGRhdGFCdWZmZXIucmVmZXJlbmNlcyA9IDE7CisgICAgICAg
IHJldHVybiBkYXRhQnVmZmVyOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGR5
bmFtaWMgdmVydGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBkYXRhIHRoZSBkYXRhIGZvciB0aGUg
ZHluYW1pYyB2ZXJ0ZXggYnVmZmVyCisgICAgICogQHJldHVybnMgdGhlIG5ldyBXZWJHTCBkeW5h
bWljIGJ1ZmZlcgorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuY3JlYXRlRHluYW1pY1Zl
cnRleEJ1ZmZlciA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIHZhciB2Ym8gPSB0aGlzLl9n
bC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgaWYgKCF2Ym8pIHsKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBkeW5hbWljIHZlcnRleCBidWZmZXIiKTsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IF9NZXNoZXNfV2ViR0xfd2ViR0xEYXRh
QnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJXZWJHTERhdGFCdWZmZXIiXSh2
Ym8pOworICAgICAgICB0aGlzLmJpbmRBcnJheUJ1ZmZlcihyZXN1bHQpOworICAgICAgICBpZiAo
ZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICB0aGlzLl9nbC5idWZmZXJEYXRh
KHRoaXMuX2dsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShkYXRhKSwgdGhpcy5fZ2wu
RFlOQU1JQ19EUkFXKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRo
aXMuX2dsLmJ1ZmZlckRhdGEodGhpcy5fZ2wuQVJSQVlfQlVGRkVSLCBkYXRhLCB0aGlzLl9nbC5E
WU5BTUlDX0RSQVcpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Jlc2V0VmVydGV4QnVmZmVy
QmluZGluZygpOworICAgICAgICByZXN1bHQucmVmZXJlbmNlcyA9IDE7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgYSBkeW5hbWljIGluZGV4
IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBpbmRleEJ1ZmZlciBkZWZpbmVzIHRoZSB0YXJnZXQgaW5k
ZXggYnVmZmVyCisgICAgICogQHBhcmFtIGluZGljZXMgZGVmaW5lcyB0aGUgZGF0YSB0byB1cGRh
dGUKKyAgICAgKiBAcGFyYW0gb2Zmc2V0IGRlZmluZXMgdGhlIG9mZnNldCBpbiB0aGUgdGFyZ2V0
IGluZGV4IGJ1ZmZlciB3aGVyZSB1cGRhdGUgc2hvdWxkIHN0YXJ0CisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS51cGRhdGVEeW5hbWljSW5kZXhCdWZmZXIgPSBmdW5jdGlvbiAoaW5kZXhC
dWZmZXIsIGluZGljZXMsIG9mZnNldCkgeworICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDAp
IHsgb2Zmc2V0ID0gMDsgfQorICAgICAgICAvLyBGb3JjZSBjYWNoZSB1cGRhdGUKKyAgICAgICAg
dGhpcy5fY3VycmVudEJvdW5kQnVmZmVyW3RoaXMuX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSXSA9
IG51bGw7CisgICAgICAgIHRoaXMuYmluZEluZGV4QnVmZmVyKGluZGV4QnVmZmVyKTsKKyAgICAg
ICAgdmFyIGFycmF5QnVmZmVyOworICAgICAgICBpZiAoaW5kaWNlcyBpbnN0YW5jZW9mIFVpbnQx
NkFycmF5IHx8IGluZGljZXMgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkgeworICAgICAgICAgICAg
YXJyYXlCdWZmZXIgPSBpbmRpY2VzOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYXJyYXlCdWZmZXIgPSBpbmRleEJ1ZmZlci5pczMyQml0cyA/IG5ldyBVaW50MzJBcnJh
eShpbmRpY2VzKSA6IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9nbC5idWZmZXJEYXRhKHRoaXMuX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBhcnJh
eUJ1ZmZlciwgdGhpcy5fZ2wuRFlOQU1JQ19EUkFXKTsKKyAgICAgICAgdGhpcy5fcmVzZXRJbmRl
eEJ1ZmZlckJpbmRpbmcoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgYSBkeW5h
bWljIHZlcnRleCBidWZmZXIuCisgICAgICogQHBhcmFtIHZlcnRleEJ1ZmZlciB0aGUgdmVydGV4
IGJ1ZmZlciB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSB1c2VkIHRvIHVw
ZGF0ZSB0aGUgdmVydGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBieXRlT2Zmc2V0IHRoZSBieXRl
IG9mZnNldCBvZiB0aGUgZGF0YQorICAgICAqIEBwYXJhbSBieXRlTGVuZ3RoIHRoZSBieXRlIGxl
bmd0aCBvZiB0aGUgZGF0YQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUudXBkYXRlRHlu
YW1pY1ZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uICh2ZXJ0ZXhCdWZmZXIsIGRhdGEsIGJ5dGVPZmZz
ZXQsIGJ5dGVMZW5ndGgpIHsKKyAgICAgICAgdGhpcy5iaW5kQXJyYXlCdWZmZXIodmVydGV4QnVm
ZmVyKTsKKyAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgYnl0ZU9mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ5dGVMZW5ndGggPT09
IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX2dsLmJ1ZmZlclN1YkRhdGEodGhpcy5fZ2wuQVJSQVlfQlVG
RkVSLCBieXRlT2Zmc2V0LCBuZXcgRmxvYXQzMkFycmF5KGRhdGEpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX2dsLmJ1ZmZlclN1YkRh
dGEodGhpcy5fZ2wuQVJSQVlfQlVGRkVSLCBieXRlT2Zmc2V0LCBkYXRhKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChkYXRhIGluc3Rh
bmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9nbC5idWZmZXJTdWJEYXRhKHRo
aXMuX2dsLkFSUkFZX0JVRkZFUiwgMCwgbmV3IEZsb2F0MzJBcnJheShkYXRhKS5zdWJhcnJheShi
eXRlT2Zmc2V0LCBieXRlT2Zmc2V0ICsgYnl0ZUxlbmd0aCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJh
eUJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0
YSwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXko
ZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl9nbC5idWZmZXJTdWJEYXRh
KHRoaXMuX2dsLkFSUkFZX0JVRkZFUiwgMCwgZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fcmVzZXRWZXJ0ZXhCdWZmZXJCaW5kaW5nKCk7CisgICAgfTsKKyAg
ICBFbmdpbmUucHJvdG90eXBlLl9yZXNldEluZGV4QnVmZmVyQmluZGluZyA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdGhpcy5iaW5kSW5kZXhCdWZmZXIobnVsbCk7CisgICAgICAgIHRoaXMuX2Nh
Y2hlZEluZGV4QnVmZmVyID0gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgaW5kZXggYnVmZmVyCisgICAgICogQHBhcmFtIGluZGljZXMgZGVmaW5lcyB0aGUgY29u
dGVudCBvZiB0aGUgaW5kZXggYnVmZmVyCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVz
IGlmIHRoZSBpbmRleCBidWZmZXIgbXVzdCBiZSB1cGRhdGFibGUKKyAgICAgKiBAcmV0dXJucyBh
IG5ldyB3ZWJHTCBidWZmZXIKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmNyZWF0ZUlu
ZGV4QnVmZmVyID0gZnVuY3Rpb24gKGluZGljZXMsIHVwZGF0YWJsZSkgeworICAgICAgICB2YXIg
dmJvID0gdGhpcy5fZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgICAgIHZhciBkYXRhQnVmZmVyID0g
bmV3IF9NZXNoZXNfV2ViR0xfd2ViR0xEYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xNF9fWyJXZWJHTERhdGFCdWZmZXIiXSh2Ym8pOworICAgICAgICBpZiAoIXZibykgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGJ1ZmZlciIp
OworICAgICAgICB9CisgICAgICAgIHRoaXMuYmluZEluZGV4QnVmZmVyKGRhdGFCdWZmZXIpOwor
ICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX25vcm1hbGl6ZUluZGV4RGF0YShpbmRpY2VzKTsKKyAg
ICAgICAgdGhpcy5fZ2wuYnVmZmVyRGF0YSh0aGlzLl9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwg
ZGF0YSwgdXBkYXRhYmxlID8gdGhpcy5fZ2wuRFlOQU1JQ19EUkFXIDogdGhpcy5fZ2wuU1RBVElD
X0RSQVcpOworICAgICAgICB0aGlzLl9yZXNldEluZGV4QnVmZmVyQmluZGluZygpOworICAgICAg
ICBkYXRhQnVmZmVyLnJlZmVyZW5jZXMgPSAxOworICAgICAgICBkYXRhQnVmZmVyLmlzMzJCaXRz
ID0gKGRhdGEuQllURVNfUEVSX0VMRU1FTlQgPT09IDQpOworICAgICAgICByZXR1cm4gZGF0YUJ1
ZmZlcjsKKyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX25vcm1hbGl6ZUluZGV4RGF0YSA9
IGZ1bmN0aW9uIChpbmRpY2VzKSB7CisgICAgICAgIGlmIChpbmRpY2VzIGluc3RhbmNlb2YgVWlu
dDE2QXJyYXkpIHsKKyAgICAgICAgICAgIHJldHVybiBpbmRpY2VzOworICAgICAgICB9CisgICAg
ICAgIC8vIENoZWNrIDMyIGJpdCBzdXBwb3J0CisgICAgICAgIGlmICh0aGlzLl9jYXBzLnVpbnRJ
bmRpY2VzKSB7CisgICAgICAgICAgICBpZiAoaW5kaWNlcyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGljZXM7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBudW1iZXJbXSBvciBJbnQzMkFycmF5
LCBjaGVjayBpZiAzMiBiaXQgaXMgbmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IGluZGljZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpbmRpY2VzW2luZGV4XSA+PSA2NTUzNSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyBVaW50MzJBcnJheShpbmRpY2VzKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVp
bnQxNkFycmF5KGluZGljZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IE5vIDMyIGJpdCBzdXBwb3J0LCBmb3JjZSBjb252ZXJzaW9uIHRvIDE2IGJpdCAodmFsdWVzIGdy
ZWF0ZXIgMTYgYml0IGFyZSBsb3N0KQorICAgICAgICByZXR1cm4gbmV3IFVpbnQxNkFycmF5KGlu
ZGljZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogQmluZCBhIHdlYkdMIGJ1ZmZlciB0byB0
aGUgd2ViR0wgY29udGV4dAorICAgICAqIEBwYXJhbSBidWZmZXIgZGVmaW5lcyB0aGUgYnVmZmVy
IHRvIGJpbmQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmJpbmRBcnJheUJ1ZmZlciA9
IGZ1bmN0aW9uIChidWZmZXIpIHsKKyAgICAgICAgaWYgKCF0aGlzLl92YW9SZWNvcmRJblByb2dy
ZXNzKSB7CisgICAgICAgICAgICB0aGlzLl91bmJpbmRWZXJ0ZXhBcnJheU9iamVjdCgpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuYmluZEJ1ZmZlcihidWZmZXIsIHRoaXMuX2dsLkFSUkFZX0JV
RkZFUik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kIGFuIHVuaWZvcm0gYnVmZmVyIHRv
IHRoZSBjdXJyZW50IHdlYkdMIGNvbnRleHQKKyAgICAgKiBAcGFyYW0gYnVmZmVyIGRlZmluZXMg
dGhlIGJ1ZmZlciB0byBiaW5kCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5iaW5kVW5p
Zm9ybUJ1ZmZlciA9IGZ1bmN0aW9uIChidWZmZXIpIHsKKyAgICAgICAgdGhpcy5fZ2wuYmluZEJ1
ZmZlcih0aGlzLl9nbC5VTklGT1JNX0JVRkZFUiwgYnVmZmVyID8gYnVmZmVyLnVuZGVybHlpbmdS
ZXNvdXJjZSA6IG51bGwpOworICAgIH07CisgICAgLyoqCisgICAgICogQmluZCBhIGJ1ZmZlciB0
byB0aGUgY3VycmVudCB3ZWJHTCBjb250ZXh0IGF0IGEgZ2l2ZW4gbG9jYXRpb24KKyAgICAgKiBA
cGFyYW0gYnVmZmVyIGRlZmluZXMgdGhlIGJ1ZmZlciB0byBiaW5kCisgICAgICogQHBhcmFtIGxv
Y2F0aW9uIGRlZmluZXMgdGhlIGluZGV4IHdoZXJlIHRvIGJpbmQgdGhlIGJ1ZmZlcgorICAgICAq
IEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHVuaWZvcm0gdmFyaWFibGUgdG8gYmluZAorICAgICAq
LworICAgIEVuZ2luZS5wcm90b3R5cGUuYmluZFVuaWZvcm1CdWZmZXJCYXNlID0gZnVuY3Rpb24g
KGJ1ZmZlciwgbG9jYXRpb24sIG5hbWUpIHsKKyAgICAgICAgdGhpcy5fZ2wuYmluZEJ1ZmZlckJh
c2UodGhpcy5fZ2wuVU5JRk9STV9CVUZGRVIsIGxvY2F0aW9uLCBidWZmZXIgPyBidWZmZXIudW5k
ZXJseWluZ1Jlc291cmNlIDogbnVsbCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kIGEg
c3BlY2lmaWMgYmxvY2sgYXQgYSBnaXZlbiBpbmRleCBpbiBhIHNwZWNpZmljIHNoYWRlciBwcm9n
cmFtCisgICAgICogQHBhcmFtIHBpcGVsaW5lQ29udGV4dCBkZWZpbmVzIHRoZSBwaXBlbGluZSBj
b250ZXh0IHRvIHVzZQorICAgICAqIEBwYXJhbSBibG9ja05hbWUgZGVmaW5lcyB0aGUgYmxvY2sg
bmFtZQorICAgICAqIEBwYXJhbSBpbmRleCBkZWZpbmVzIHRoZSBpbmRleCB3aGVyZSB0byBiaW5k
IHRoZSBibG9jaworICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuYmluZFVuaWZvcm1CbG9j
ayA9IGZ1bmN0aW9uIChwaXBlbGluZUNvbnRleHQsIGJsb2NrTmFtZSwgaW5kZXgpIHsKKyAgICAg
ICAgdmFyIHByb2dyYW0gPSBwaXBlbGluZUNvbnRleHQucHJvZ3JhbTsKKyAgICAgICAgdmFyIHVu
aWZvcm1Mb2NhdGlvbiA9IHRoaXMuX2dsLmdldFVuaWZvcm1CbG9ja0luZGV4KHByb2dyYW0sIGJs
b2NrTmFtZSk7CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm1CbG9ja0JpbmRpbmcocHJvZ3JhbSwg
dW5pZm9ybUxvY2F0aW9uLCBpbmRleCk7CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLmJp
bmRJbmRleEJ1ZmZlciA9IGZ1bmN0aW9uIChidWZmZXIpIHsKKyAgICAgICAgaWYgKCF0aGlzLl92
YW9SZWNvcmRJblByb2dyZXNzKSB7CisgICAgICAgICAgICB0aGlzLl91bmJpbmRWZXJ0ZXhBcnJh
eU9iamVjdCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuYmluZEJ1ZmZlcihidWZmZXIsIHRo
aXMuX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSKTsKKyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5
cGUuYmluZEJ1ZmZlciA9IGZ1bmN0aW9uIChidWZmZXIsIHRhcmdldCkgeworICAgICAgICBpZiAo
dGhpcy5fdmFvUmVjb3JkSW5Qcm9ncmVzcyB8fCB0aGlzLl9jdXJyZW50Qm91bmRCdWZmZXJbdGFy
Z2V0XSAhPT0gYnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9nbC5iaW5kQnVmZmVyKHRhcmdl
dCwgYnVmZmVyID8gYnVmZmVyLnVuZGVybHlpbmdSZXNvdXJjZSA6IG51bGwpOworICAgICAgICAg
ICAgdGhpcy5fY3VycmVudEJvdW5kQnVmZmVyW3RhcmdldF0gPSBidWZmZXI7CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKgorICAgICAqIHVwZGF0ZSB0aGUgYm91bmQgYnVmZmVyIHdpdGggdGhl
IGdpdmVuIGRhdGEKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHRvIHVwZGF0
ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUudXBkYXRlQXJyYXlCdWZmZXIgPSBmdW5j
dGlvbiAoZGF0YSkgeworICAgICAgICB0aGlzLl9nbC5idWZmZXJTdWJEYXRhKHRoaXMuX2dsLkFS
UkFZX0JVRkZFUiwgMCwgZGF0YSk7CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl92ZXJ0
ZXhBdHRyaWJQb2ludGVyID0gZnVuY3Rpb24gKGJ1ZmZlciwgaW5keCwgc2l6ZSwgdHlwZSwgbm9y
bWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpIHsKKyAgICAgICAgdmFyIHBvaW50ZXIgPSB0aGlzLl9j
dXJyZW50QnVmZmVyUG9pbnRlcnNbaW5keF07CisgICAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7
CisgICAgICAgIGlmICghcG9pbnRlci5hY3RpdmUpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgcG9pbnRlci5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgcG9p
bnRlci5pbmRleCA9IGluZHg7CisgICAgICAgICAgICBwb2ludGVyLnNpemUgPSBzaXplOworICAg
ICAgICAgICAgcG9pbnRlci50eXBlID0gdHlwZTsKKyAgICAgICAgICAgIHBvaW50ZXIubm9ybWFs
aXplZCA9IG5vcm1hbGl6ZWQ7CisgICAgICAgICAgICBwb2ludGVyLnN0cmlkZSA9IHN0cmlkZTsK
KyAgICAgICAgICAgIHBvaW50ZXIub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgcG9pbnRl
ci5idWZmZXIgPSBidWZmZXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBpZiAocG9pbnRlci5idWZmZXIgIT09IGJ1ZmZlcikgeworICAgICAgICAgICAgICAgIHBvaW50
ZXIuYnVmZmVyID0gYnVmZmVyOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvaW50ZXIuc2l6ZSAhPT0gc2l6ZSkgeworICAg
ICAgICAgICAgICAgIHBvaW50ZXIuc2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAgY2hhbmdl
ZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9pbnRlci50eXBlICE9
PSB0eXBlKSB7CisgICAgICAgICAgICAgICAgcG9pbnRlci50eXBlID0gdHlwZTsKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChw
b2ludGVyLm5vcm1hbGl6ZWQgIT09IG5vcm1hbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICBwb2lu
dGVyLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvaW50ZXIuc3RyaWRlICE9PSBz
dHJpZGUpIHsKKyAgICAgICAgICAgICAgICBwb2ludGVyLnN0cmlkZSA9IHN0cmlkZTsKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChwb2ludGVyLm9mZnNldCAhPT0gb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgcG9pbnRlci5v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoYW5nZWQgfHwgdGhpcy5fdmFvUmVjb3Jk
SW5Qcm9ncmVzcykgeworICAgICAgICAgICAgdGhpcy5iaW5kQXJyYXlCdWZmZXIoYnVmZmVyKTsK
KyAgICAgICAgICAgIHRoaXMuX2dsLnZlcnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlw
ZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpOworICAgICAgICB9CisgICAgfTsKKyAgICBF
bmdpbmUucHJvdG90eXBlLl9iaW5kSW5kZXhCdWZmZXJXaXRoQ2FjaGUgPSBmdW5jdGlvbiAoaW5k
ZXhCdWZmZXIpIHsKKyAgICAgICAgaWYgKGluZGV4QnVmZmVyID09IG51bGwpIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY2FjaGVkSW5kZXhCdWZm
ZXIgIT09IGluZGV4QnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWRJbmRleEJ1ZmZl
ciA9IGluZGV4QnVmZmVyOworICAgICAgICAgICAgdGhpcy5iaW5kSW5kZXhCdWZmZXIoaW5kZXhC
dWZmZXIpOworICAgICAgICAgICAgdGhpcy5fdWludEluZGljZXNDdXJyZW50bHlTZXQgPSBpbmRl
eEJ1ZmZlci5pczMyQml0czsKKyAgICAgICAgfQorICAgIH07CisgICAgRW5naW5lLnByb3RvdHlw
ZS5fYmluZFZlcnRleEJ1ZmZlcnNBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHZlcnRleEJ1ZmZlcnMs
IGVmZmVjdCkgeworICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGVmZmVjdC5nZXRBdHRyaWJ1dGVz
TmFtZXMoKTsKKyAgICAgICAgaWYgKCF0aGlzLl92YW9SZWNvcmRJblByb2dyZXNzKSB7CisgICAg
ICAgICAgICB0aGlzLl91bmJpbmRWZXJ0ZXhBcnJheU9iamVjdCgpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMudW5iaW5kQWxsQXR0cmlidXRlcygpOworICAgICAgICBmb3IgKHZhciBpbmRleCA9
IDA7IGluZGV4IDwgYXR0cmlidXRlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZh
ciBvcmRlciA9IGVmZmVjdC5nZXRBdHRyaWJ1dGVMb2NhdGlvbihpbmRleCk7CisgICAgICAgICAg
ICBpZiAob3JkZXIgPj0gMCkgeworICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB2
ZXJ0ZXhCdWZmZXJzW2F0dHJpYnV0ZXNbaW5kZXhdXTsKKyAgICAgICAgICAgICAgICBpZiAoIXZl
cnRleEJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5fZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
b3JkZXIpOworICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdmFvUmVjb3JkSW5Qcm9ncmVzcykg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJBcnJheXNFbmFibGVkW29y
ZGVyXSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBidWZm
ZXIgPSB2ZXJ0ZXhCdWZmZXIuZ2V0QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZl
cikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJQb2ludGVyKGJ1ZmZl
ciwgb3JkZXIsIHZlcnRleEJ1ZmZlci5nZXRTaXplKCksIHZlcnRleEJ1ZmZlci50eXBlLCB2ZXJ0
ZXhCdWZmZXIubm9ybWFsaXplZCwgdmVydGV4QnVmZmVyLmJ5dGVTdHJpZGUsIHZlcnRleEJ1ZmZl
ci5ieXRlT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnRleEJ1ZmZlci5nZXRJ
c0luc3RhbmNlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nbC52ZXJ0ZXhB
dHRyaWJEaXZpc29yKG9yZGVyLCB2ZXJ0ZXhCdWZmZXIuZ2V0SW5zdGFuY2VEaXZpc29yKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl92YW9SZWNvcmRJblByb2dyZXNzKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEluc3RhbmNlTG9jYXRp
b25zLnB1c2gob3JkZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJl
bnRJbnN0YW5jZUJ1ZmZlcnMucHVzaChidWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWNvcmRzIGEgdmVydGV4IGFy
cmF5IG9iamVjdAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVz
L3dlYmdsMiN2ZXJ0ZXgtYXJyYXktb2JqZWN0cworICAgICAqIEBwYXJhbSB2ZXJ0ZXhCdWZmZXJz
IGRlZmluZXMgdGhlIGxpc3Qgb2YgdmVydGV4IGJ1ZmZlcnMgdG8gc3RvcmUKKyAgICAgKiBAcGFy
YW0gaW5kZXhCdWZmZXIgZGVmaW5lcyB0aGUgaW5kZXggYnVmZmVyIHRvIHN0b3JlCisgICAgICog
QHBhcmFtIGVmZmVjdCBkZWZpbmVzIHRoZSBlZmZlY3QgdG8gc3RvcmUKKyAgICAgKiBAcmV0dXJu
cyB0aGUgbmV3IHZlcnRleCBhcnJheSBvYmplY3QKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90
eXBlLnJlY29yZFZlcnRleEFycmF5T2JqZWN0ID0gZnVuY3Rpb24gKHZlcnRleEJ1ZmZlcnMsIGlu
ZGV4QnVmZmVyLCBlZmZlY3QpIHsKKyAgICAgICAgdmFyIHZhbyA9IHRoaXMuX2dsLmNyZWF0ZVZl
cnRleEFycmF5KCk7CisgICAgICAgIHRoaXMuX3Zhb1JlY29yZEluUHJvZ3Jlc3MgPSB0cnVlOwor
ICAgICAgICB0aGlzLl9nbC5iaW5kVmVydGV4QXJyYXkodmFvKTsKKyAgICAgICAgdGhpcy5fbXVz
dFdpcGVWZXJ0ZXhBdHRyaWJ1dGVzID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fYmluZFZlcnRleEJ1
ZmZlcnNBdHRyaWJ1dGVzKHZlcnRleEJ1ZmZlcnMsIGVmZmVjdCk7CisgICAgICAgIHRoaXMuYmlu
ZEluZGV4QnVmZmVyKGluZGV4QnVmZmVyKTsKKyAgICAgICAgdGhpcy5fdmFvUmVjb3JkSW5Qcm9n
cmVzcyA9IGZhbHNlOworICAgICAgICB0aGlzLl9nbC5iaW5kVmVydGV4QXJyYXkobnVsbCk7Cisg
ICAgICAgIHJldHVybiB2YW87CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kIGEgc3BlY2lm
aWMgdmVydGV4IGFycmF5IG9iamVjdAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2ZlYXR1cmVzL3dlYmdsMiN2ZXJ0ZXgtYXJyYXktb2JqZWN0cworICAgICAqIEBwYXJhbSB2
ZXJ0ZXhBcnJheU9iamVjdCBkZWZpbmVzIHRoZSB2ZXJ0ZXggYXJyYXkgb2JqZWN0IHRvIGJpbmQK
KyAgICAgKiBAcGFyYW0gaW5kZXhCdWZmZXIgZGVmaW5lcyB0aGUgaW5kZXggYnVmZmVyIHRvIGJp
bmQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmJpbmRWZXJ0ZXhBcnJheU9iamVjdCA9
IGZ1bmN0aW9uICh2ZXJ0ZXhBcnJheU9iamVjdCwgaW5kZXhCdWZmZXIpIHsKKyAgICAgICAgaWYg
KHRoaXMuX2NhY2hlZFZlcnRleEFycmF5T2JqZWN0ICE9PSB2ZXJ0ZXhBcnJheU9iamVjdCkgewor
ICAgICAgICAgICAgdGhpcy5fY2FjaGVkVmVydGV4QXJyYXlPYmplY3QgPSB2ZXJ0ZXhBcnJheU9i
amVjdDsKKyAgICAgICAgICAgIHRoaXMuX2dsLmJpbmRWZXJ0ZXhBcnJheSh2ZXJ0ZXhBcnJheU9i
amVjdCk7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWRWZXJ0ZXhCdWZmZXJzID0gbnVsbDsKKyAg
ICAgICAgICAgIHRoaXMuX2NhY2hlZEluZGV4QnVmZmVyID0gbnVsbDsKKyAgICAgICAgICAgIHRo
aXMuX3VpbnRJbmRpY2VzQ3VycmVudGx5U2V0ID0gaW5kZXhCdWZmZXIgIT0gbnVsbCAmJiBpbmRl
eEJ1ZmZlci5pczMyQml0czsKKyAgICAgICAgICAgIHRoaXMuX211c3RXaXBlVmVydGV4QXR0cmli
dXRlcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmQgd2Vi
R2wgYnVmZmVycyBkaXJlY3RseSB0byB0aGUgd2ViR0wgY29udGV4dAorICAgICAqIEBwYXJhbSB2
ZXJ0ZXhCdWZmZXIgZGVmaW5lcyB0aGUgdmVydGV4IGJ1ZmZlciB0byBiaW5kCisgICAgICogQHBh
cmFtIGluZGV4QnVmZmVyIGRlZmluZXMgdGhlIGluZGV4IGJ1ZmZlciB0byBiaW5kCisgICAgICog
QHBhcmFtIHZlcnRleERlY2xhcmF0aW9uIGRlZmluZXMgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiB0
byB1c2Ugd2l0aCB0aGUgdmVydGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSB2ZXJ0ZXhTdHJpZGVT
aXplIGRlZmluZXMgdGhlIHZlcnRleCBzdHJpZGUgb2YgdGhlIHZlcnRleCBidWZmZXIKKyAgICAg
KiBAcGFyYW0gZWZmZWN0IGRlZmluZXMgdGhlIGVmZmVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHZl
cnRleCBidWZmZXIKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmJpbmRCdWZmZXJzRGly
ZWN0bHkgPSBmdW5jdGlvbiAodmVydGV4QnVmZmVyLCBpbmRleEJ1ZmZlciwgdmVydGV4RGVjbGFy
YXRpb24sIHZlcnRleFN0cmlkZVNpemUsIGVmZmVjdCkgeworICAgICAgICBpZiAodGhpcy5fY2Fj
aGVkVmVydGV4QnVmZmVycyAhPT0gdmVydGV4QnVmZmVyIHx8IHRoaXMuX2NhY2hlZEVmZmVjdEZv
clZlcnRleEJ1ZmZlcnMgIT09IGVmZmVjdCkgeworICAgICAgICAgICAgdGhpcy5fY2FjaGVkVmVy
dGV4QnVmZmVycyA9IHZlcnRleEJ1ZmZlcjsKKyAgICAgICAgICAgIHRoaXMuX2NhY2hlZEVmZmVj
dEZvclZlcnRleEJ1ZmZlcnMgPSBlZmZlY3Q7CisgICAgICAgICAgICB2YXIgYXR0cmlidXRlc0Nv
dW50ID0gZWZmZWN0LmdldEF0dHJpYnV0ZXNDb3VudCgpOworICAgICAgICAgICAgdGhpcy5fdW5i
aW5kVmVydGV4QXJyYXlPYmplY3QoKTsKKyAgICAgICAgICAgIHRoaXMudW5iaW5kQWxsQXR0cmli
dXRlcygpOworICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7CisgICAgICAgICAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgYXR0cmlidXRlc0NvdW50OyBpbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGluZGV4IDwgdmVydGV4RGVjbGFyYXRpb24ubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBvcmRlciA9IGVmZmVjdC5nZXRBdHRyaWJ1dGVMb2NhdGlvbihpbmRl
eCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvcmRlciA+PSAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShvcmRlcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJBcnJheXNFbmFibGVkW29yZGVy
XSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJQb2lu
dGVyKHZlcnRleEJ1ZmZlciwgb3JkZXIsIHZlcnRleERlY2xhcmF0aW9uW2luZGV4XSwgdGhpcy5f
Z2wuRkxPQVQsIGZhbHNlLCB2ZXJ0ZXhTdHJpZGVTaXplLCBvZmZzZXQpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB2ZXJ0ZXhEZWNsYXJhdGlv
bltpbmRleF0gKiA0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICB0aGlzLl9iaW5kSW5kZXhCdWZmZXJXaXRoQ2FjaGUoaW5kZXhCdWZmZXIpOwor
ICAgIH07CisgICAgRW5naW5lLnByb3RvdHlwZS5fdW5iaW5kVmVydGV4QXJyYXlPYmplY3QgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fY2FjaGVkVmVydGV4QXJyYXlPYmplY3Qp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYWNoZWRW
ZXJ0ZXhBcnJheU9iamVjdCA9IG51bGw7CisgICAgICAgIHRoaXMuX2dsLmJpbmRWZXJ0ZXhBcnJh
eShudWxsKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmQgYSBsaXN0IG9mIHZlcnRleCBi
dWZmZXJzIHRvIHRoZSB3ZWJHTCBjb250ZXh0CisgICAgICogQHBhcmFtIHZlcnRleEJ1ZmZlcnMg
ZGVmaW5lcyB0aGUgbGlzdCBvZiB2ZXJ0ZXggYnVmZmVycyB0byBiaW5kCisgICAgICogQHBhcmFt
IGluZGV4QnVmZmVyIGRlZmluZXMgdGhlIGluZGV4IGJ1ZmZlciB0byBiaW5kCisgICAgICogQHBh
cmFtIGVmZmVjdCBkZWZpbmVzIHRoZSBlZmZlY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSB2ZXJ0ZXgg
YnVmZmVycworICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuYmluZEJ1ZmZlcnMgPSBmdW5j
dGlvbiAodmVydGV4QnVmZmVycywgaW5kZXhCdWZmZXIsIGVmZmVjdCkgeworICAgICAgICBpZiAo
dGhpcy5fY2FjaGVkVmVydGV4QnVmZmVycyAhPT0gdmVydGV4QnVmZmVycyB8fCB0aGlzLl9jYWNo
ZWRFZmZlY3RGb3JWZXJ0ZXhCdWZmZXJzICE9PSBlZmZlY3QpIHsKKyAgICAgICAgICAgIHRoaXMu
X2NhY2hlZFZlcnRleEJ1ZmZlcnMgPSB2ZXJ0ZXhCdWZmZXJzOworICAgICAgICAgICAgdGhpcy5f
Y2FjaGVkRWZmZWN0Rm9yVmVydGV4QnVmZmVycyA9IGVmZmVjdDsKKyAgICAgICAgICAgIHRoaXMu
X2JpbmRWZXJ0ZXhCdWZmZXJzQXR0cmlidXRlcyh2ZXJ0ZXhCdWZmZXJzLCBlZmZlY3QpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2JpbmRJbmRleEJ1ZmZlcldpdGhDYWNoZShpbmRleEJ1ZmZl
cik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVbmJpbmQgYWxsIGluc3RhbmNlIGF0dHJpYnV0
ZXMKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnVuYmluZEluc3RhbmNlQXR0cmlidXRl
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGJvdW5kQnVmZmVyOworICAgICAgICBmb3Ig
KHZhciBpID0gMCwgdWwgPSB0aGlzLl9jdXJyZW50SW5zdGFuY2VMb2NhdGlvbnMubGVuZ3RoOyBp
IDwgdWw7IGkrKykgeworICAgICAgICAgICAgdmFyIGluc3RhbmNlc0J1ZmZlciA9IHRoaXMuX2N1
cnJlbnRJbnN0YW5jZUJ1ZmZlcnNbaV07CisgICAgICAgICAgICBpZiAoYm91bmRCdWZmZXIgIT0g
aW5zdGFuY2VzQnVmZmVyICYmIGluc3RhbmNlc0J1ZmZlci5yZWZlcmVuY2VzKSB7CisgICAgICAg
ICAgICAgICAgYm91bmRCdWZmZXIgPSBpbnN0YW5jZXNCdWZmZXI7CisgICAgICAgICAgICAgICAg
dGhpcy5iaW5kQXJyYXlCdWZmZXIoaW5zdGFuY2VzQnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBvZmZzZXRMb2NhdGlvbiA9IHRoaXMuX2N1cnJlbnRJbnN0YW5jZUxvY2F0
aW9uc1tpXTsKKyAgICAgICAgICAgIHRoaXMuX2dsLnZlcnRleEF0dHJpYkRpdmlzb3Iob2Zmc2V0
TG9jYXRpb24sIDApOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2N1cnJlbnRJbnN0YW5jZUJ1
ZmZlcnMubGVuZ3RoID0gMDsKKyAgICAgICAgdGhpcy5fY3VycmVudEluc3RhbmNlTG9jYXRpb25z
Lmxlbmd0aCA9IDA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIGFuZCBmcmVlIHRo
ZSBtZW1vcnkgb2YgYSB2ZXJ0ZXggYXJyYXkgb2JqZWN0CisgICAgICogQHBhcmFtIHZhbyBkZWZp
bmVzIHRoZSB2ZXJ0ZXggYXJyYXkgb2JqZWN0IHRvIGRlbGV0ZQorICAgICAqLworICAgIEVuZ2lu
ZS5wcm90b3R5cGUucmVsZWFzZVZlcnRleEFycmF5T2JqZWN0ID0gZnVuY3Rpb24gKHZhbykgewor
ICAgICAgICB0aGlzLl9nbC5kZWxldGVWZXJ0ZXhBcnJheSh2YW8pOworICAgIH07CisgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9yZWxlYXNlQnVmZmVyID0gZnVuY3Rp
b24gKGJ1ZmZlcikgeworICAgICAgICBidWZmZXIucmVmZXJlbmNlcy0tOworICAgICAgICBpZiAo
YnVmZmVyLnJlZmVyZW5jZXMgPT09IDApIHsKKyAgICAgICAgICAgIHRoaXMuX2RlbGV0ZUJ1ZmZl
cihidWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH07CisgICAgRW5naW5lLnByb3RvdHlwZS5fZGVsZXRlQnVmZmVy
ID0gZnVuY3Rpb24gKGJ1ZmZlcikgeworICAgICAgICB0aGlzLl9nbC5kZWxldGVCdWZmZXIoYnVm
ZmVyLnVuZGVybHlpbmdSZXNvdXJjZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgd2ViR0wgYnVmZmVyIHRvIHVzZSB3aXRoIGluc3RhbmNpYXRpb24KKyAgICAgKiBAcGFyYW0g
Y2FwYWNpdHkgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyCisgICAgICogQHJldHVybnMg
dGhlIHdlYkdMIGJ1ZmZlcgorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuY3JlYXRlSW5z
dGFuY2VzQnVmZmVyID0gZnVuY3Rpb24gKGNhcGFjaXR5KSB7CisgICAgICAgIHZhciBidWZmZXIg
PSB0aGlzLl9nbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBpbnN0YW5jZSBidWZmZXIi
KTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IF9NZXNoZXNfV2ViR0xfd2Vi
R0xEYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJXZWJHTERhdGFCdWZm
ZXIiXShidWZmZXIpOworICAgICAgICByZXN1bHQuY2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICAg
ICAgdGhpcy5iaW5kQXJyYXlCdWZmZXIocmVzdWx0KTsKKyAgICAgICAgdGhpcy5fZ2wuYnVmZmVy
RGF0YSh0aGlzLl9nbC5BUlJBWV9CVUZGRVIsIGNhcGFjaXR5LCB0aGlzLl9nbC5EWU5BTUlDX0RS
QVcpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogRGVs
ZXRlIGEgd2ViR0wgYnVmZmVyIHVzZWQgd2l0aCBpbnN0YW5jaWF0aW9uCisgICAgICogQHBhcmFt
IGJ1ZmZlciBkZWZpbmVzIHRoZSB3ZWJHTCBidWZmZXIgdG8gZGVsZXRlCisgICAgICovCisgICAg
RW5naW5lLnByb3RvdHlwZS5kZWxldGVJbnN0YW5jZXNCdWZmZXIgPSBmdW5jdGlvbiAoYnVmZmVy
KSB7CisgICAgICAgIHRoaXMuX2dsLmRlbGV0ZUJ1ZmZlcihidWZmZXIpOworICAgIH07CisgICAg
LyoqCisgICAgICogVXBkYXRlIHRoZSBjb250ZW50IG9mIGEgd2ViR0wgYnVmZmVyIHVzZWQgd2l0
aCBpbnN0YW5jaWF0aW9uIGFuZCBiaW5kIGl0IHRvIHRoZSB3ZWJHTCBjb250ZXh0CisgICAgICog
QHBhcmFtIGluc3RhbmNlc0J1ZmZlciBkZWZpbmVzIHRoZSB3ZWJHTCBidWZmZXIgdG8gdXBkYXRl
IGFuZCBiaW5kCisgICAgICogQHBhcmFtIGRhdGEgZGVmaW5lcyB0aGUgZGF0YSB0byBzdG9yZSBp
biB0aGUgYnVmZmVyCisgICAgICogQHBhcmFtIG9mZnNldExvY2F0aW9ucyBkZWZpbmVzIHRoZSBv
ZmZzZXRzIG9yIGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24gdXNlZCB0byBkZXRlcm1pbmUgd2hlcmUg
ZGF0YSBtdXN0IGJlIHN0b3JlZCBpbiB0aGUgYnVmZmVyCisgICAgICovCisgICAgRW5naW5lLnBy
b3RvdHlwZS51cGRhdGVBbmRCaW5kSW5zdGFuY2VzQnVmZmVyID0gZnVuY3Rpb24gKGluc3RhbmNl
c0J1ZmZlciwgZGF0YSwgb2Zmc2V0TG9jYXRpb25zKSB7CisgICAgICAgIHRoaXMuYmluZEFycmF5
QnVmZmVyKGluc3RhbmNlc0J1ZmZlcik7CisgICAgICAgIGlmIChkYXRhKSB7CisgICAgICAgICAg
ICB0aGlzLl9nbC5idWZmZXJTdWJEYXRhKHRoaXMuX2dsLkFSUkFZX0JVRkZFUiwgMCwgZGF0YSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9mZnNldExvY2F0aW9uc1swXS5pbmRleCAhPT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICB2YXIgc3RyaWRlID0gMDsKKyAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgb2Zmc2V0TG9jYXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGFpID0gb2Zmc2V0TG9jYXRpb25zW2ldOworICAgICAgICAgICAgICAgIHN0cmlk
ZSArPSBhaS5hdHRyaWJ1dGVTaXplICogNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgb2Zmc2V0TG9jYXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGFpID0gb2Zmc2V0TG9jYXRpb25zW2ldOworICAgICAgICAgICAgICAgIGlm
ICghdGhpcy5fdmVydGV4QXR0cmliQXJyYXlzRW5hYmxlZFthaS5pbmRleF0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYWkuaW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJBcnJheXNFbmFibGVkW2FpLmlu
ZGV4XSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX3Zl
cnRleEF0dHJpYlBvaW50ZXIoaW5zdGFuY2VzQnVmZmVyLCBhaS5pbmRleCwgYWkuYXR0cmlidXRl
U2l6ZSwgYWkuYXR0cmlieXRlVHlwZSB8fCB0aGlzLl9nbC5GTE9BVCwgYWkubm9ybWFsaXplZCB8
fCBmYWxzZSwgc3RyaWRlLCBhaS5vZmZzZXQpOworICAgICAgICAgICAgICAgIHRoaXMuX2dsLnZl
cnRleEF0dHJpYkRpdmlzb3IoYWkuaW5kZXgsIDEpOworICAgICAgICAgICAgICAgIHRoaXMuX2N1
cnJlbnRJbnN0YW5jZUxvY2F0aW9ucy5wdXNoKGFpLmluZGV4KTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9jdXJyZW50SW5zdGFuY2VCdWZmZXJzLnB1c2goaW5zdGFuY2VzQnVmZmVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCA0OyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIG9m
ZnNldExvY2F0aW9uID0gb2Zmc2V0TG9jYXRpb25zW2luZGV4XTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMuX3ZlcnRleEF0dHJpYkFycmF5c0VuYWJsZWRbb2Zmc2V0TG9jYXRpb25dKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2dsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG9mZnNl
dExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmVydGV4QXR0cmliQXJyYXlz
RW5hYmxlZFtvZmZzZXRMb2NhdGlvbl0gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJQb2ludGVyKGluc3RhbmNlc0J1ZmZlciwgb2Zm
c2V0TG9jYXRpb24sIDQsIHRoaXMuX2dsLkZMT0FULCBmYWxzZSwgNjQsIGluZGV4ICogMTYpOwor
ICAgICAgICAgICAgICAgIHRoaXMuX2dsLnZlcnRleEF0dHJpYkRpdmlzb3Iob2Zmc2V0TG9jYXRp
b24sIDEpOworICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbnN0YW5jZUxvY2F0aW9ucy5w
dXNoKG9mZnNldExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50SW5zdGFu
Y2VCdWZmZXJzLnB1c2goaW5zdGFuY2VzQnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogQXBwbHkgYWxsIGNhY2hlZCBzdGF0ZXMgKGRlcHRo
LCBjdWxsaW5nLCBzdGVuY2lsIGFuZCBhbHBoYSkKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90
eXBlLmFwcGx5U3RhdGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9kZXB0aEN1bGxp
bmdTdGF0ZS5hcHBseSh0aGlzLl9nbCk7CisgICAgICAgIHRoaXMuX3N0ZW5jaWxTdGF0ZS5hcHBs
eSh0aGlzLl9nbCk7CisgICAgICAgIHRoaXMuX2FscGhhU3RhdGUuYXBwbHkodGhpcy5fZ2wpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogU2VuZCBhIGRyYXcgb3JkZXIKKyAgICAgKiBAcGFyYW0g
dXNlVHJpYW5nbGVzIGRlZmluZXMgaWYgdHJpYW5nbGVzIG11c3QgYmUgdXNlZCB0byBkcmF3IChl
bHNlIHdpcmVmcmFtZSB3aWxsIGJlIHVzZWQpCisgICAgICogQHBhcmFtIGluZGV4U3RhcnQgZGVm
aW5lcyB0aGUgc3RhcnRpbmcgaW5kZXgKKyAgICAgKiBAcGFyYW0gaW5kZXhDb3VudCBkZWZpbmVz
IHRoZSBudW1iZXIgb2YgaW5kZXggdG8gZHJhdworICAgICAqIEBwYXJhbSBpbnN0YW5jZXNDb3Vu
dCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgaW5zdGFuY2VzIHRvIGRyYXcgKGlmIGluc3RhbmNpYXRp
b24gaXMgZW5hYmxlZCkKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmRyYXcgPSBmdW5j
dGlvbiAodXNlVHJpYW5nbGVzLCBpbmRleFN0YXJ0LCBpbmRleENvdW50LCBpbnN0YW5jZXNDb3Vu
dCkgeworICAgICAgICB0aGlzLmRyYXdFbGVtZW50c1R5cGUodXNlVHJpYW5nbGVzID8gX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5NQVRFUklBTF9U
cmlhbmdsZUZpbGxNb2RlIDogX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJDb25zdGFudHMiXS5NQVRFUklBTF9XaXJlRnJhbWVGaWxsTW9kZSwgaW5kZXhTdGFydCwgaW5k
ZXhDb3VudCwgaW5zdGFuY2VzQ291bnQpOworICAgIH07CisgICAgLyoqCisgICAgICogRHJhdyBh
IGxpc3Qgb2YgcG9pbnRzCisgICAgICogQHBhcmFtIHZlcnRpY2VzU3RhcnQgZGVmaW5lcyB0aGUg
aW5kZXggb2YgZmlyc3QgdmVydGV4IHRvIGRyYXcKKyAgICAgKiBAcGFyYW0gdmVydGljZXNDb3Vu
dCBkZWZpbmVzIHRoZSBjb3VudCBvZiB2ZXJ0aWNlcyB0byBkcmF3CisgICAgICogQHBhcmFtIGlu
c3RhbmNlc0NvdW50IGRlZmluZXMgdGhlIG51bWJlciBvZiBpbnN0YW5jZXMgdG8gZHJhdyAoaWYg
aW5zdGFuY2lhdGlvbiBpcyBlbmFibGVkKQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUu
ZHJhd1BvaW50Q2xvdWRzID0gZnVuY3Rpb24gKHZlcnRpY2VzU3RhcnQsIHZlcnRpY2VzQ291bnQs
IGluc3RhbmNlc0NvdW50KSB7CisgICAgICAgIHRoaXMuZHJhd0FycmF5c1R5cGUoX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5NQVRFUklBTF9Qb2lu
dEZpbGxNb2RlLCB2ZXJ0aWNlc1N0YXJ0LCB2ZXJ0aWNlc0NvdW50LCBpbnN0YW5jZXNDb3VudCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEcmF3IGEgbGlzdCBvZiB1bmluZGV4ZWQgcHJpbWl0
aXZlcworICAgICAqIEBwYXJhbSB1c2VUcmlhbmdsZXMgZGVmaW5lcyBpZiB0cmlhbmdsZXMgbXVz
dCBiZSB1c2VkIHRvIGRyYXcgKGVsc2Ugd2lyZWZyYW1lIHdpbGwgYmUgdXNlZCkKKyAgICAgKiBA
cGFyYW0gdmVydGljZXNTdGFydCBkZWZpbmVzIHRoZSBpbmRleCBvZiBmaXJzdCB2ZXJ0ZXggdG8g
ZHJhdworICAgICAqIEBwYXJhbSB2ZXJ0aWNlc0NvdW50IGRlZmluZXMgdGhlIGNvdW50IG9mIHZl
cnRpY2VzIHRvIGRyYXcKKyAgICAgKiBAcGFyYW0gaW5zdGFuY2VzQ291bnQgZGVmaW5lcyB0aGUg
bnVtYmVyIG9mIGluc3RhbmNlcyB0byBkcmF3IChpZiBpbnN0YW5jaWF0aW9uIGlzIGVuYWJsZWQp
CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5kcmF3VW5JbmRleGVkID0gZnVuY3Rpb24g
KHVzZVRyaWFuZ2xlcywgdmVydGljZXNTdGFydCwgdmVydGljZXNDb3VudCwgaW5zdGFuY2VzQ291
bnQpIHsKKyAgICAgICAgdGhpcy5kcmF3QXJyYXlzVHlwZSh1c2VUcmlhbmdsZXMgPyBfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1Ry
aWFuZ2xlRmlsbE1vZGUgOiBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19b
IkNvbnN0YW50cyJdLk1BVEVSSUFMX1dpcmVGcmFtZUZpbGxNb2RlLCB2ZXJ0aWNlc1N0YXJ0LCB2
ZXJ0aWNlc0NvdW50LCBpbnN0YW5jZXNDb3VudCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBE
cmF3IGEgbGlzdCBvZiBpbmRleGVkIHByaW1pdGl2ZXMKKyAgICAgKiBAcGFyYW0gZmlsbE1vZGUg
ZGVmaW5lcyB0aGUgcHJpbWl0aXZlIHRvIHVzZQorICAgICAqIEBwYXJhbSBpbmRleFN0YXJ0IGRl
ZmluZXMgdGhlIHN0YXJ0aW5nIGluZGV4CisgICAgICogQHBhcmFtIGluZGV4Q291bnQgZGVmaW5l
cyB0aGUgbnVtYmVyIG9mIGluZGV4IHRvIGRyYXcKKyAgICAgKiBAcGFyYW0gaW5zdGFuY2VzQ291
bnQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGluc3RhbmNlcyB0byBkcmF3IChpZiBpbnN0YW5jaWF0
aW9uIGlzIGVuYWJsZWQpCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5kcmF3RWxlbWVu
dHNUeXBlID0gZnVuY3Rpb24gKGZpbGxNb2RlLCBpbmRleFN0YXJ0LCBpbmRleENvdW50LCBpbnN0
YW5jZXNDb3VudCkgeworICAgICAgICAvLyBBcHBseSBzdGF0ZXMKKyAgICAgICAgdGhpcy5hcHBs
eVN0YXRlcygpOworICAgICAgICB0aGlzLl9kcmF3Q2FsbHMuYWRkQ291bnQoMSwgZmFsc2UpOwor
ICAgICAgICAvLyBSZW5kZXIKKyAgICAgICAgdmFyIGRyYXdNb2RlID0gdGhpcy5fZHJhd01vZGUo
ZmlsbE1vZGUpOworICAgICAgICB2YXIgaW5kZXhGb3JtYXQgPSB0aGlzLl91aW50SW5kaWNlc0N1
cnJlbnRseVNldCA/IHRoaXMuX2dsLlVOU0lHTkVEX0lOVCA6IHRoaXMuX2dsLlVOU0lHTkVEX1NI
T1JUOworICAgICAgICB2YXIgbXVsdCA9IHRoaXMuX3VpbnRJbmRpY2VzQ3VycmVudGx5U2V0ID8g
NCA6IDI7CisgICAgICAgIGlmIChpbnN0YW5jZXNDb3VudCkgeworICAgICAgICAgICAgdGhpcy5f
Z2wuZHJhd0VsZW1lbnRzSW5zdGFuY2VkKGRyYXdNb2RlLCBpbmRleENvdW50LCBpbmRleEZvcm1h
dCwgaW5kZXhTdGFydCAqIG11bHQsIGluc3RhbmNlc0NvdW50KTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmRyYXdFbGVtZW50cyhkcmF3TW9kZSwgaW5k
ZXhDb3VudCwgaW5kZXhGb3JtYXQsIGluZGV4U3RhcnQgKiBtdWx0KTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogRHJhdyBhIGxpc3Qgb2YgdW5pbmRleGVkIHByaW1pdGl2ZXMK
KyAgICAgKiBAcGFyYW0gZmlsbE1vZGUgZGVmaW5lcyB0aGUgcHJpbWl0aXZlIHRvIHVzZQorICAg
ICAqIEBwYXJhbSB2ZXJ0aWNlc1N0YXJ0IGRlZmluZXMgdGhlIGluZGV4IG9mIGZpcnN0IHZlcnRl
eCB0byBkcmF3CisgICAgICogQHBhcmFtIHZlcnRpY2VzQ291bnQgZGVmaW5lcyB0aGUgY291bnQg
b2YgdmVydGljZXMgdG8gZHJhdworICAgICAqIEBwYXJhbSBpbnN0YW5jZXNDb3VudCBkZWZpbmVz
IHRoZSBudW1iZXIgb2YgaW5zdGFuY2VzIHRvIGRyYXcgKGlmIGluc3RhbmNpYXRpb24gaXMgZW5h
YmxlZCkKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmRyYXdBcnJheXNUeXBlID0gZnVu
Y3Rpb24gKGZpbGxNb2RlLCB2ZXJ0aWNlc1N0YXJ0LCB2ZXJ0aWNlc0NvdW50LCBpbnN0YW5jZXND
b3VudCkgeworICAgICAgICAvLyBBcHBseSBzdGF0ZXMKKyAgICAgICAgdGhpcy5hcHBseVN0YXRl
cygpOworICAgICAgICB0aGlzLl9kcmF3Q2FsbHMuYWRkQ291bnQoMSwgZmFsc2UpOworICAgICAg
ICB2YXIgZHJhd01vZGUgPSB0aGlzLl9kcmF3TW9kZShmaWxsTW9kZSk7CisgICAgICAgIGlmIChp
bnN0YW5jZXNDb3VudCkgeworICAgICAgICAgICAgdGhpcy5fZ2wuZHJhd0FycmF5c0luc3RhbmNl
ZChkcmF3TW9kZSwgdmVydGljZXNTdGFydCwgdmVydGljZXNDb3VudCwgaW5zdGFuY2VzQ291bnQp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZ2wuZHJhd0Fy
cmF5cyhkcmF3TW9kZSwgdmVydGljZXNTdGFydCwgdmVydGljZXNDb3VudCk7CisgICAgICAgIH0K
KyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX2RyYXdNb2RlID0gZnVuY3Rpb24gKGZpbGxN
b2RlKSB7CisgICAgICAgIHN3aXRjaCAoZmlsbE1vZGUpIHsKKyAgICAgICAgICAgIC8vIFRyaWFu
Z2xlIHZpZXdzCisgICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVHJpYW5nbGVGaWxsTW9kZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuVFJJQU5HTEVTOworICAgICAgICAgICAgY2FzZSBf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLk1BVEVS
SUFMX1BvaW50RmlsbE1vZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlBPSU5U
UzsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJDb25zdGFudHMiXS5NQVRFUklBTF9XaXJlRnJhbWVGaWxsTW9kZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fZ2wuTElORVM7CisgICAgICAgICAgICAvLyBEcmF3IG1vZGVzCisg
ICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
Q29uc3RhbnRzIl0uTUFURVJJQUxfUG9pbnRMaXN0RHJhd01vZGU6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2dsLlBPSU5UUzsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5NQVRFUklBTF9MaW5lTGlzdERy
YXdNb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5MSU5FUzsKKyAgICAgICAg
ICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFu
dHMiXS5NQVRFUklBTF9MaW5lTG9vcERyYXdNb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLl9nbC5MSU5FX0xPT1A7CisgICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfTGluZVN0cmlwRHJhd01v
ZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLkxJTkVfU1RSSVA7CisgICAgICAg
ICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3Rh
bnRzIl0uTUFURVJJQUxfVHJpYW5nbGVTdHJpcERyYXdNb2RlOgorICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9nbC5UUklBTkdMRV9TVFJJUDsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5NQVRFUklBTF9Ucmlh
bmdsZUZhbkRyYXdNb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5UUklBTkdM
RV9GQU47CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9nbC5UUklBTkdMRVM7CisgICAgICAgIH0KKyAgICB9OworICAgIC8vIFNoYWRlcnMKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3JlbGVhc2VFZmZlY3QgPSBmdW5j
dGlvbiAoZWZmZWN0KSB7CisgICAgICAgIGlmICh0aGlzLl9jb21waWxlZEVmZmVjdHNbZWZmZWN0
Ll9rZXldKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fY29tcGlsZWRFZmZlY3RzW2VmZmVj
dC5fa2V5XTsKKyAgICAgICAgICAgIHRoaXMuX2RlbGV0ZVBpcGVsaW5lQ29udGV4dChlZmZlY3Qu
Z2V0UGlwZWxpbmVDb250ZXh0KCkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRl
biAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX2RlbGV0ZVBpcGVsaW5lQ29udGV4dCA9IGZ1bmN0
aW9uIChwaXBlbGluZUNvbnRleHQpIHsKKyAgICAgICAgdmFyIHdlYkdMUGlwZWxpbmVDb250ZXh0
ID0gcGlwZWxpbmVDb250ZXh0OworICAgICAgICBpZiAod2ViR0xQaXBlbGluZUNvbnRleHQgJiYg
d2ViR0xQaXBlbGluZUNvbnRleHQucHJvZ3JhbSkgeworICAgICAgICAgICAgd2ViR0xQaXBlbGlu
ZUNvbnRleHQucHJvZ3JhbS5fX1NQRUNUT1JfcmVidWlsZFByb2dyYW0gPSBudWxsOworICAgICAg
ICAgICAgaWYgKHdlYkdMUGlwZWxpbmVDb250ZXh0LnRyYW5zZm9ybUZlZWRiYWNrKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5kZWxldGVUcmFuc2Zvcm1GZWVkYmFjayh3ZWJHTFBpcGVsaW5lQ29u
dGV4dC50cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgICAgICAgICAgICAgd2ViR0xQaXBlbGluZUNv
bnRleHQudHJhbnNmb3JtRmVlZGJhY2sgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fZ2wuZGVsZXRlUHJvZ3JhbSh3ZWJHTFBpcGVsaW5lQ29udGV4dC5wcm9ncmFtKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IGVmZmVjdCAo
dXNlZCB0byBzdG9yZSB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycykKKyAgICAgKiBAcGFyYW0gYmFz
ZU5hbWUgZGVmaW5lcyB0aGUgYmFzZSBuYW1lIG9mIHRoZSBlZmZlY3QgKFRoZSBuYW1lIG9mIGZp
bGUgd2l0aG91dCAuZnJhZ21lbnQuZnggb3IgLnZlcnRleC5meCkKKyAgICAgKiBAcGFyYW0gYXR0
cmlidXRlc05hbWVzT3JPcHRpb25zIGRlZmluZXMgZWl0aGVyIGEgbGlzdCBvZiBhdHRyaWJ1dGUg
bmFtZXMgb3IgYW4gRWZmZWN0Q3JlYXRpb25PcHRpb25zIG9iamVjdAorICAgICAqIEBwYXJhbSB1
bmlmb3Jtc05hbWVzT3JFbmdpbmUgZGVmaW5lcyBlaXRoZXIgYSBsaXN0IG9mIHVuaWZvcm0gbmFt
ZXMgb3IgdGhlIGVuZ2luZSB0byB1c2UKKyAgICAgKiBAcGFyYW0gc2FtcGxlcnMgZGVmaW5lcyBh
biBhcnJheSBvZiBzdHJpbmcgdXNlZCB0byByZXByZXNlbnQgdGV4dHVyZXMKKyAgICAgKiBAcGFy
YW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVmaW5lcyB0byB1
c2UgdG8gY29tcGlsZSB0aGUgc2hhZGVycworICAgICAqIEBwYXJhbSBmYWxsYmFja3MgZGVmaW5l
cyB0aGUgbGlzdCBvZiBwb3RlbnRpYWwgZmFsbGJhY2tzIHRvIHVzZSBpZiBzaGFkZXIgY29ubXBp
bGF0aW9uIGZhaWxzCisgICAgICogQHBhcmFtIG9uQ29tcGlsZWQgZGVmaW5lcyBhIGZ1bmN0aW9u
IHRvIGNhbGwgd2hlbiB0aGUgZWZmZWN0IGNyZWF0aW9uIGlzIHN1Y2Nlc3NmdWwKKyAgICAgKiBA
cGFyYW0gb25FcnJvciBkZWZpbmVzIGEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBlZmZlY3Qg
Y3JlYXRpb24gaGFzIGZhaWxlZAorICAgICAqIEBwYXJhbSBpbmRleFBhcmFtZXRlcnMgZGVmaW5l
cyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgaW5kZXggdmFsdWVzIHRvIHVzZSB0byBjb21waWxl
IHNoYWRlcnMgKGxpa2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBsaWdodHMp
CisgICAgICogQHJldHVybnMgdGhlIG5ldyBFZmZlY3QKKyAgICAgKi8KKyAgICBFbmdpbmUucHJv
dG90eXBlLmNyZWF0ZUVmZmVjdCA9IGZ1bmN0aW9uIChiYXNlTmFtZSwgYXR0cmlidXRlc05hbWVz
T3JPcHRpb25zLCB1bmlmb3Jtc05hbWVzT3JFbmdpbmUsIHNhbXBsZXJzLCBkZWZpbmVzLCBmYWxs
YmFja3MsIG9uQ29tcGlsZWQsIG9uRXJyb3IsIGluZGV4UGFyYW1ldGVycykgeworICAgICAgICB2
YXIgdmVydGV4ID0gYmFzZU5hbWUudmVydGV4RWxlbWVudCB8fCBiYXNlTmFtZS52ZXJ0ZXggfHwg
YmFzZU5hbWU7CisgICAgICAgIHZhciBmcmFnbWVudCA9IGJhc2VOYW1lLmZyYWdtZW50RWxlbWVu
dCB8fCBiYXNlTmFtZS5mcmFnbWVudCB8fCBiYXNlTmFtZTsKKyAgICAgICAgdmFyIG5hbWUgPSB2
ZXJ0ZXggKyAiKyIgKyBmcmFnbWVudCArICJAIiArIChkZWZpbmVzID8gZGVmaW5lcyA6IGF0dHJp
YnV0ZXNOYW1lc09yT3B0aW9ucy5kZWZpbmVzKTsKKyAgICAgICAgaWYgKHRoaXMuX2NvbXBpbGVk
RWZmZWN0c1tuYW1lXSkgeworICAgICAgICAgICAgdmFyIGNvbXBpbGVkRWZmZWN0ID0gdGhpcy5f
Y29tcGlsZWRFZmZlY3RzW25hbWVdOworICAgICAgICAgICAgaWYgKG9uQ29tcGlsZWQgJiYgY29t
cGlsZWRFZmZlY3QuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgb25Db21waWxlZChjb21w
aWxlZEVmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZWRF
ZmZlY3Q7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVmZmVjdCA9IG5ldyBfTWF0ZXJpYWxzX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFZmZlY3QiXShiYXNlTmFtZSwgYXR0
cmlidXRlc05hbWVzT3JPcHRpb25zLCB1bmlmb3Jtc05hbWVzT3JFbmdpbmUsIHNhbXBsZXJzLCB0
aGlzLCBkZWZpbmVzLCBmYWxsYmFja3MsIG9uQ29tcGlsZWQsIG9uRXJyb3IsIGluZGV4UGFyYW1l
dGVycywgbmFtZSk7CisgICAgICAgIHRoaXMuX2NvbXBpbGVkRWZmZWN0c1tuYW1lXSA9IGVmZmVj
dDsKKyAgICAgICAgcmV0dXJuIGVmZmVjdDsKKyAgICB9OworICAgIEVuZ2luZS5fY29uY2F0ZW5h
dGVTaGFkZXIgPSBmdW5jdGlvbiAoc291cmNlLCBkZWZpbmVzLCBzaGFkZXJWZXJzaW9uKSB7Cisg
ICAgICAgIGlmIChzaGFkZXJWZXJzaW9uID09PSB2b2lkIDApIHsgc2hhZGVyVmVyc2lvbiA9ICIi
OyB9CisgICAgICAgIHJldHVybiBzaGFkZXJWZXJzaW9uICsgKGRlZmluZXMgPyBkZWZpbmVzICsg
IlxuIiA6ICIiKSArIHNvdXJjZTsKKyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX2NvbXBp
bGVTaGFkZXIgPSBmdW5jdGlvbiAoc291cmNlLCB0eXBlLCBkZWZpbmVzLCBzaGFkZXJWZXJzaW9u
KSB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb21waWxlUmF3U2hhZGVyKEVuZ2luZS5fY29uY2F0
ZW5hdGVTaGFkZXIoc291cmNlLCBkZWZpbmVzLCBzaGFkZXJWZXJzaW9uKSwgdHlwZSk7CisgICAg
fTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl9jb21waWxlUmF3U2hhZGVyID0gZnVuY3Rpb24gKHNv
dXJjZSwgdHlwZSkgeworICAgICAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAgICAgICAgdmFyIHNo
YWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlID09PSAidmVydGV4IiA/IGdsLlZFUlRFWF9TSEFE
RVIgOiBnbC5GUkFHTUVOVF9TSEFERVIpOworICAgICAgICBpZiAoIXNoYWRlcikgeworICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBjb21waWxl
IHRoZSBzaGFkZXIuIik7CisgICAgICAgIH0KKyAgICAgICAgZ2wuc2hhZGVyU291cmNlKHNoYWRl
ciwgc291cmNlKTsKKyAgICAgICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgICAgICBy
ZXR1cm4gc2hhZGVyOworICAgIH07CisgICAgLyoqCisgICAgICogRGlyZWN0bHkgY3JlYXRlcyBh
IHdlYkdMIHByb2dyYW0KKyAgICAgKiBAcGFyYW0gcGlwZWxpbmVDb250ZXh0ICBkZWZpbmVzIHRo
ZSBwaXBlbGluZSBjb250ZXh0IHRvIGF0dGFjaCB0bworICAgICAqIEBwYXJhbSB2ZXJ0ZXhDb2Rl
IGRlZmluZXMgdGhlIHZlcnRleCBzaGFkZXIgY29kZSB0byB1c2UKKyAgICAgKiBAcGFyYW0gZnJh
Z21lbnRDb2RlIGRlZmluZXMgdGhlIGZyYWdtZW50IHNoYWRlciBjb2RlIHRvIHVzZQorICAgICAq
IEBwYXJhbSBjb250ZXh0IGRlZmluZXMgdGhlIHdlYkdMIGNvbnRleHQgdG8gdXNlIChpZiBub3Qg
c2V0LCB0aGUgY3VycmVudCBvbmUgd2lsbCBiZSB1c2VkKQorICAgICAqIEBwYXJhbSB0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzIGRlZmluZXMgdGhlIGxpc3Qgb2YgdHJhbnNmb3JtIGZlZWRiYWNr
IHZhcnlpbmdzIHRvIHVzZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgd2ViR0wgcHJvZ3JhbQor
ICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuY3JlYXRlUmF3U2hhZGVyUHJvZ3JhbSA9IGZ1
bmN0aW9uIChwaXBlbGluZUNvbnRleHQsIHZlcnRleENvZGUsIGZyYWdtZW50Q29kZSwgY29udGV4
dCwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncykgeworICAgICAgICBpZiAodHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5ncyA9PT0gdm9pZCAwKSB7IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MgPSBu
dWxsOyB9CisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IHRoaXMuX2dsOworICAgICAgICB2
YXIgdmVydGV4U2hhZGVyID0gdGhpcy5fY29tcGlsZVJhd1NoYWRlcih2ZXJ0ZXhDb2RlLCAidmVy
dGV4Iik7CisgICAgICAgIHZhciBmcmFnbWVudFNoYWRlciA9IHRoaXMuX2NvbXBpbGVSYXdTaGFk
ZXIoZnJhZ21lbnRDb2RlLCAiZnJhZ21lbnQiKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0
ZVNoYWRlclByb2dyYW0ocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hh
ZGVyLCBjb250ZXh0LCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYSB3ZWJHTCBwcm9ncmFtCisgICAgICogQHBhcmFtIHBpcGVsaW5l
Q29udGV4dCAgZGVmaW5lcyB0aGUgcGlwZWxpbmUgY29udGV4dCB0byBhdHRhY2ggdG8KKyAgICAg
KiBAcGFyYW0gdmVydGV4Q29kZSAgZGVmaW5lcyB0aGUgdmVydGV4IHNoYWRlciBjb2RlIHRvIHVz
ZQorICAgICAqIEBwYXJhbSBmcmFnbWVudENvZGUgZGVmaW5lcyB0aGUgZnJhZ21lbnQgc2hhZGVy
IGNvZGUgdG8gdXNlCisgICAgICogQHBhcmFtIGRlZmluZXMgZGVmaW5lcyB0aGUgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIGRlZmluZXMgdG8gdXNlIHRvIGNvbXBpbGUgdGhlIHNoYWRlcnMKKyAgICAg
KiBAcGFyYW0gY29udGV4dCBkZWZpbmVzIHRoZSB3ZWJHTCBjb250ZXh0IHRvIHVzZSAoaWYgbm90
IHNldCwgdGhlIGN1cnJlbnQgb25lIHdpbGwgYmUgdXNlZCkKKyAgICAgKiBAcGFyYW0gdHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5ncyBkZWZpbmVzIHRoZSBsaXN0IG9mIHRyYW5zZm9ybSBmZWVkYmFj
ayB2YXJ5aW5ncyB0byB1c2UKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IHdlYkdMIHByb2dyYW0K
KyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVNoYWRlclByb2dyYW0gPSBmdW5j
dGlvbiAocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhDb2RlLCBmcmFnbWVudENvZGUsIGRlZmluZXMs
IGNvbnRleHQsIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpIHsKKyAgICAgICAgaWYgKHRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ3MgPT09IHZvaWQgMCkgeyB0cmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdzID0gbnVsbDsgfQorICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLl9nbDsKKyAg
ICAgICAgdGhpcy5vbkJlZm9yZVNoYWRlckNvbXBpbGF0aW9uT2JzZXJ2YWJsZS5ub3RpZnlPYnNl
cnZlcnModGhpcyk7CisgICAgICAgIHZhciBzaGFkZXJWZXJzaW9uID0gKHRoaXMuX3dlYkdMVmVy
c2lvbiA+IDEpID8gIiN2ZXJzaW9uIDMwMCBlc1xuI2RlZmluZSBXRUJHTDIgXG4iIDogIiI7Cisg
ICAgICAgIHZhciB2ZXJ0ZXhTaGFkZXIgPSB0aGlzLl9jb21waWxlU2hhZGVyKHZlcnRleENvZGUs
ICJ2ZXJ0ZXgiLCBkZWZpbmVzLCBzaGFkZXJWZXJzaW9uKTsKKyAgICAgICAgdmFyIGZyYWdtZW50
U2hhZGVyID0gdGhpcy5fY29tcGlsZVNoYWRlcihmcmFnbWVudENvZGUsICJmcmFnbWVudCIsIGRl
ZmluZXMsIHNoYWRlclZlcnNpb24pOworICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMuX2NyZWF0
ZVNoYWRlclByb2dyYW0ocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hh
ZGVyLCBjb250ZXh0LCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKKyAgICAgICAgdGhpcy5v
bkFmdGVyU2hhZGVyQ29tcGlsYXRpb25PYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsK
KyAgICAgICAgcmV0dXJuIHByb2dyYW07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgbmV3IHBpcGVsaW5lIGNvbnRleHQKKyAgICAgKiBAcGFyYW0gc2hhZGVyUHJvY2Vzc2luZ0Nv
bnRleHQgZGVmaW5lcyB0aGUgc2hhZGVyIHByb2Nlc3NpbmcgY29udGV4dCB1c2VkIGR1cmluZyB0
aGUgcHJvY2Vzc2luZyBpZiBhdmFpbGFibGUKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IHBpcGVs
aW5lCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5jcmVhdGVQaXBlbGluZUNvbnRleHQg
PSBmdW5jdGlvbiAoc2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQpIHsKKyAgICAgICAgdmFyIHBpcGVs
aW5lQ29udGV4dCA9IG5ldyBfV2ViR0xfd2ViR0xQaXBlbGluZUNvbnRleHRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEzX19bIldlYkdMUGlwZWxpbmVDb250ZXh0Il0oKTsKKyAgICAgICAgcGlw
ZWxpbmVDb250ZXh0LmVuZ2luZSA9IHRoaXM7CisgICAgICAgIGlmICh0aGlzLl9jYXBzLnBhcmFs
bGVsU2hhZGVyQ29tcGlsZSkgeworICAgICAgICAgICAgcGlwZWxpbmVDb250ZXh0LmlzUGFyYWxs
ZWxDb21waWxlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBpcGVsaW5lQ29u
dGV4dDsKKyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX2NyZWF0ZVNoYWRlclByb2dyYW0g
PSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVy
LCBjb250ZXh0LCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKSB7CisgICAgICAgIGlmICh0cmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzID09PSB2b2lkIDApIHsgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5ncyA9IG51bGw7IH0KKyAgICAgICAgdmFyIHNoYWRlclByb2dyYW0gPSBjb250ZXh0LmNyZWF0
ZVByb2dyYW0oKTsKKyAgICAgICAgcGlwZWxpbmVDb250ZXh0LnByb2dyYW0gPSBzaGFkZXJQcm9n
cmFtOworICAgICAgICBpZiAoIXNoYWRlclByb2dyYW0pIHsKKyAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBwcm9ncmFtIik7CisgICAgICAgIH0KKyAgICAgICAg
Y29udGV4dC5hdHRhY2hTaGFkZXIoc2hhZGVyUHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICAg
ICAgY29udGV4dC5hdHRhY2hTaGFkZXIoc2hhZGVyUHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwor
ICAgICAgICBpZiAodGhpcy53ZWJHTFZlcnNpb24gPiAxICYmIHRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ3MpIHsKKyAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1GZWVkYmFjayA9IHRoaXMuY3JlYXRl
VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIHRoaXMuYmluZFRyYW5zZm9ybUZlZWRi
YWNrKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICAgICAgICAgIHRoaXMuc2V0VHJhbmZvcm1GZWVk
YmFja1ZhcnlpbmdzKHNoYWRlclByb2dyYW0sIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOwor
ICAgICAgICAgICAgcGlwZWxpbmVDb250ZXh0LnRyYW5zZm9ybUZlZWRiYWNrID0gdHJhbnNmb3Jt
RmVlZGJhY2s7CisgICAgICAgIH0KKyAgICAgICAgY29udGV4dC5saW5rUHJvZ3JhbShzaGFkZXJQ
cm9ncmFtKTsKKyAgICAgICAgaWYgKHRoaXMud2ViR0xWZXJzaW9uID4gMSAmJiB0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzKSB7CisgICAgICAgICAgICB0aGlzLmJpbmRUcmFuc2Zvcm1GZWVkYmFj
ayhudWxsKTsKKyAgICAgICAgfQorICAgICAgICBwaXBlbGluZUNvbnRleHQuY29udGV4dCA9IGNv
bnRleHQ7CisgICAgICAgIHBpcGVsaW5lQ29udGV4dC52ZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFk
ZXI7CisgICAgICAgIHBpcGVsaW5lQ29udGV4dC5mcmFnbWVudFNoYWRlciA9IGZyYWdtZW50U2hh
ZGVyOworICAgICAgICBpZiAoIXBpcGVsaW5lQ29udGV4dC5pc1BhcmFsbGVsQ29tcGlsZWQpIHsK
KyAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplUGlwZWxpbmVDb250ZXh0KHBpcGVsaW5lQ29udGV4
dCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNoYWRlclByb2dyYW07CisgICAgfTsKKyAg
ICBFbmdpbmUucHJvdG90eXBlLl9maW5hbGl6ZVBpcGVsaW5lQ29udGV4dCA9IGZ1bmN0aW9uIChw
aXBlbGluZUNvbnRleHQpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBwaXBlbGluZUNvbnRleHQu
Y29udGV4dDsKKyAgICAgICAgdmFyIHZlcnRleFNoYWRlciA9IHBpcGVsaW5lQ29udGV4dC52ZXJ0
ZXhTaGFkZXI7CisgICAgICAgIHZhciBmcmFnbWVudFNoYWRlciA9IHBpcGVsaW5lQ29udGV4dC5m
cmFnbWVudFNoYWRlcjsKKyAgICAgICAgdmFyIHByb2dyYW0gPSBwaXBlbGluZUNvbnRleHQucHJv
Z3JhbTsKKyAgICAgICAgdmFyIGxpbmtlZCA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihw
cm9ncmFtLCBjb250ZXh0LkxJTktfU1RBVFVTKTsKKyAgICAgICAgaWYgKCFsaW5rZWQpIHsgLy8g
R2V0IG1vcmUgaW5mbworICAgICAgICAgICAgLy8gVmVydGV4CisgICAgICAgICAgICBpZiAoIXRo
aXMuX2dsLmdldFNoYWRlclBhcmFtZXRlcih2ZXJ0ZXhTaGFkZXIsIHRoaXMuX2dsLkNPTVBJTEVf
U1RBVFVTKSkgeworICAgICAgICAgICAgICAgIHZhciBsb2cgPSB0aGlzLl9nbC5nZXRTaGFkZXJJ
bmZvTG9nKHZlcnRleFNoYWRlcik7CisgICAgICAgICAgICAgICAgaWYgKGxvZykgeworICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlZFUlRFWCBTSEFERVIgIiArIGxvZyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRnJhZ21lbnQK
KyAgICAgICAgICAgIGlmICghdGhpcy5fZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZyYWdtZW50U2hh
ZGVyLCB0aGlzLl9nbC5DT01QSUxFX1NUQVRVUykpIHsKKyAgICAgICAgICAgICAgICB2YXIgbG9n
ID0gdGhpcy5fZ2wuZ2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNoYWRlcik7CisgICAgICAgICAg
ICAgICAgaWYgKGxvZykgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkZS
QUdNRU5UIFNIQURFUiAiICsgbG9nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXIgZXJyb3IgPSBjb250ZXh0LmdldFByb2dyYW1JbmZvTG9nKHByb2dy
YW0pOworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy52YWxpZGF0ZVNoYWRlclByb2dyYW1zKSB7CisgICAgICAgICAgICBjb250ZXh0LnZhbGlkYXRl
UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgIHZhciB2YWxpZGF0ZWQgPSBjb250ZXh0Lmdl
dFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgY29udGV4dC5WQUxJREFURV9TVEFUVVMpOworICAg
ICAgICAgICAgaWYgKCF2YWxpZGF0ZWQpIHsKKyAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBj
b250ZXh0LmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pOworICAgICAgICAgICAgICAgIGlmIChl
cnJvcikgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb250ZXh0
LmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBjb250ZXh0LmRlbGV0ZVNoYWRl
cihmcmFnbWVudFNoYWRlcik7CisgICAgICAgIHBpcGVsaW5lQ29udGV4dC52ZXJ0ZXhTaGFkZXIg
PSB1bmRlZmluZWQ7CisgICAgICAgIHBpcGVsaW5lQ29udGV4dC5mcmFnbWVudFNoYWRlciA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgaWYgKHBpcGVsaW5lQ29udGV4dC5vbkNvbXBpbGVkKSB7CisgICAg
ICAgICAgICBwaXBlbGluZUNvbnRleHQub25Db21waWxlZCgpOworICAgICAgICAgICAgcGlwZWxp
bmVDb250ZXh0Lm9uQ29tcGlsZWQgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fcHJlcGFyZVBpcGVsaW5lQ29u
dGV4dCA9IGZ1bmN0aW9uIChwaXBlbGluZUNvbnRleHQsIHZlcnRleFNvdXJjZUNvZGUsIGZyYWdt
ZW50U291cmNlQ29kZSwgY3JlYXRlQXNSYXcsIHJlYnVpbGRSZWJpbmQsIGRlZmluZXMsIHRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ3MsIGtleSkgeworICAgICAgICB2YXIgd2ViR0xSZW5kZXJpbmdT
dGF0ZSA9IHBpcGVsaW5lQ29udGV4dDsKKyAgICAgICAgaWYgKGNyZWF0ZUFzUmF3KSB7CisgICAg
ICAgICAgICB3ZWJHTFJlbmRlcmluZ1N0YXRlLnByb2dyYW0gPSB0aGlzLmNyZWF0ZVJhd1NoYWRl
clByb2dyYW0od2ViR0xSZW5kZXJpbmdTdGF0ZSwgdmVydGV4U291cmNlQ29kZSwgZnJhZ21lbnRT
b3VyY2VDb2RlLCB1bmRlZmluZWQsIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgd2ViR0xSZW5kZXJpbmdTdGF0ZS5wcm9n
cmFtID0gdGhpcy5jcmVhdGVTaGFkZXJQcm9ncmFtKHdlYkdMUmVuZGVyaW5nU3RhdGUsIHZlcnRl
eFNvdXJjZUNvZGUsIGZyYWdtZW50U291cmNlQ29kZSwgZGVmaW5lcywgdW5kZWZpbmVkLCB0cmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKKyAgICAgICAgfQorICAgICAgICB3ZWJHTFJlbmRlcmlu
Z1N0YXRlLnByb2dyYW0uX19TUEVDVE9SX3JlYnVpbGRQcm9ncmFtID0gcmVidWlsZFJlYmluZDsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5faXNSZW5k
ZXJpbmdTdGF0ZUNvbXBpbGVkID0gZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCkgeworICAgICAg
ICB2YXIgd2ViR0xQaXBlbGluZUNvbnRleHQgPSBwaXBlbGluZUNvbnRleHQ7CisgICAgICAgIGlm
ICh0aGlzLl9nbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHdlYkdMUGlwZWxpbmVDb250ZXh0LnByb2dy
YW0sIHRoaXMuX2NhcHMucGFyYWxsZWxTaGFkZXJDb21waWxlLkNPTVBMRVRJT05fU1RBVFVTX0tI
UikpIHsKKyAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplUGlwZWxpbmVDb250ZXh0KHdlYkdMUGlw
ZWxpbmVDb250ZXh0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5l
LnByb3RvdHlwZS5fZXhlY3V0ZVdoZW5SZW5kZXJpbmdTdGF0ZUlzQ29tcGlsZWQgPSBmdW5jdGlv
biAocGlwZWxpbmVDb250ZXh0LCBhY3Rpb24pIHsKKyAgICAgICAgdmFyIHdlYkdMUGlwZWxpbmVD
b250ZXh0ID0gcGlwZWxpbmVDb250ZXh0OworICAgICAgICBpZiAoIXdlYkdMUGlwZWxpbmVDb250
ZXh0LmlzUGFyYWxsZWxDb21waWxlZCkgeworICAgICAgICAgICAgYWN0aW9uKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgd2ViR0xQaXBlbGluZUNvbnRleHQub25D
b21waWxlZCA9IGFjdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxpc3Qg
b2Ygd2ViR0wgdW5pZm9ybSBsb2NhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgcHJv
Z3JhbSBiYXNlZCBvbiBhIGxpc3Qgb2YgdW5pZm9ybSBuYW1lcworICAgICAqIEBwYXJhbSBwaXBl
bGluZUNvbnRleHQgZGVmaW5lcyB0aGUgcGlwZWxpbmUgY29udGV4dCB0byB1c2UKKyAgICAgKiBA
cGFyYW0gdW5pZm9ybXNOYW1lcyBkZWZpbmVzIHRoZSBsaXN0IG9mIHVuaWZvcm0gbmFtZXMKKyAg
ICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9ucworICAgICAq
LworICAgIEVuZ2luZS5wcm90b3R5cGUuZ2V0VW5pZm9ybXMgPSBmdW5jdGlvbiAocGlwZWxpbmVD
b250ZXh0LCB1bmlmb3Jtc05hbWVzKSB7CisgICAgICAgIHZhciByZXN1bHRzID0gbmV3IEFycmF5
KCk7CisgICAgICAgIHZhciB3ZWJHTFBpcGVsaW5lQ29udGV4dCA9IHBpcGVsaW5lQ29udGV4dDsK
KyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHVuaWZvcm1zTmFtZXMubGVuZ3Ro
OyBpbmRleCsrKSB7CisgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fZ2wuZ2V0VW5pZm9y
bUxvY2F0aW9uKHdlYkdMUGlwZWxpbmVDb250ZXh0LnByb2dyYW0sIHVuaWZvcm1zTmFtZXNbaW5k
ZXhdKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBsc2l0IG9mIGFjdGl2ZSBhdHRyaWJ1dGVzIGZvciBhIGdpdmVu
IHdlYkdMIHByb2dyYW0KKyAgICAgKiBAcGFyYW0gcGlwZWxpbmVDb250ZXh0IGRlZmluZXMgdGhl
IHBpcGVsaW5lIGNvbnRleHQgdG8gdXNlCisgICAgICogQHBhcmFtIGF0dHJpYnV0ZXNOYW1lcyBk
ZWZpbmVzIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZSBuYW1lcyB0byBnZXQKKyAgICAgKiBAcmV0dXJu
cyBhbiBhcnJheSBvZiBpbmRpY2VzIGluZGljYXRpbmcgdGhlIG9mZnNldCBvZiBlYWNoIGF0dHJp
YnV0ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuZ2V0QXR0cmlidXRlcyA9IGZ1bmN0
aW9uIChwaXBlbGluZUNvbnRleHQsIGF0dHJpYnV0ZXNOYW1lcykgeworICAgICAgICB2YXIgcmVz
dWx0cyA9IFtdOworICAgICAgICB2YXIgd2ViR0xQaXBlbGluZUNvbnRleHQgPSBwaXBlbGluZUNv
bnRleHQ7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVzTmFt
ZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAg
IHJlc3VsdHMucHVzaCh0aGlzLl9nbC5nZXRBdHRyaWJMb2NhdGlvbih3ZWJHTFBpcGVsaW5lQ29u
dGV4dC5wcm9ncmFtLCBhdHRyaWJ1dGVzTmFtZXNbaW5kZXhdKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCgtMSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBY3RpdmF0ZXMgYW4gZWZmZWN0LCBta2FpbmcgaXQgdGhlIGN1
cnJlbnQgb25lIChpZS4gdGhlIG9uZSB1c2VkIGZvciByZW5kZXJpbmcpCisgICAgICogQHBhcmFt
IGVmZmVjdCBkZWZpbmVzIHRoZSBlZmZlY3QgdG8gYWN0aXZhdGUKKyAgICAgKi8KKyAgICBFbmdp
bmUucHJvdG90eXBlLmVuYWJsZUVmZmVjdCA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAg
aWYgKCFlZmZlY3QgfHwgZWZmZWN0ID09PSB0aGlzLl9jdXJyZW50RWZmZWN0KSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gVXNlIHByb2dyYW0KKyAgICAgICAg
dGhpcy5iaW5kU2FtcGxlcnMoZWZmZWN0KTsKKyAgICAgICAgdGhpcy5fY3VycmVudEVmZmVjdCA9
IGVmZmVjdDsKKyAgICAgICAgaWYgKGVmZmVjdC5vbkJpbmQpIHsKKyAgICAgICAgICAgIGVmZmVj
dC5vbkJpbmQoZWZmZWN0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZWZmZWN0Ll9vbkJpbmRP
YnNlcnZhYmxlKSB7CisgICAgICAgICAgICBlZmZlY3QuX29uQmluZE9ic2VydmFibGUubm90aWZ5
T2JzZXJ2ZXJzKGVmZmVjdCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
dCB0aGUgdmFsdWUgb2YgYW4gdW5pZm9ybSB0byBhbiBhcnJheSBvZiBpbnQzMgorICAgICAqIEBw
YXJhbSB1bmlmb3JtIGRlZmluZXMgdGhlIHdlYkdMIHVuaWZvcm0gbG9jYXRpb24gd2hlcmUgdG8g
c3RvcmUgdGhlIHZhbHVlCisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIGFycmF5IG9m
IGludDMyIHRvIHN0b3JlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXRJbnRBcnJh
eSA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3Jt
MWl2KHVuaWZvcm0sIGFycmF5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFs
dWUgb2YgYW4gdW5pZm9ybSB0byBhbiBhcnJheSBvZiBpbnQzMiAoc3RvcmVkIGFzIHZlYzIpCisg
ICAgICogQHBhcmFtIHVuaWZvcm0gZGVmaW5lcyB0aGUgd2ViR0wgdW5pZm9ybSBsb2NhdGlvbiB3
aGVyZSB0byBzdG9yZSB0aGUgdmFsdWUKKyAgICAgKiBAcGFyYW0gYXJyYXkgZGVmaW5lcyB0aGUg
YXJyYXkgb2YgaW50MzIgdG8gc3RvcmUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNl
dEludEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVu
aWZvcm0gfHwgYXJyYXkubGVuZ3RoICUgMiAhPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm0yaXYodW5pZm9ybSwgYXJyYXkpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhbiB1bmlmb3JtIHRvIGFu
IGFycmF5IG9mIGludDMyIChzdG9yZWQgYXMgdmVjMykKKyAgICAgKiBAcGFyYW0gdW5pZm9ybSBk
ZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRoZSB2YWx1
ZQorICAgICAqIEBwYXJhbSBhcnJheSBkZWZpbmVzIHRoZSBhcnJheSBvZiBpbnQzMiB0byBzdG9y
ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0SW50QXJyYXkzID0gZnVuY3Rpb24g
KHVuaWZvcm0sIGFycmF5KSB7CisgICAgICAgIGlmICghdW5pZm9ybSB8fCBhcnJheS5sZW5ndGgg
JSAzICE9PSAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZ2wudW5pZm9ybTNpdih1bmlmb3JtLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXQgdGhlIHZhbHVlIG9mIGFuIHVuaWZvcm0gdG8gYW4gYXJyYXkgb2YgaW50MzIgKHN0b3Jl
ZCBhcyB2ZWM0KQorICAgICAqIEBwYXJhbSB1bmlmb3JtIGRlZmluZXMgdGhlIHdlYkdMIHVuaWZv
cm0gbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgdGhlIHZhbHVlCisgICAgICogQHBhcmFtIGFycmF5
IGRlZmluZXMgdGhlIGFycmF5IG9mIGludDMyIHRvIHN0b3JlCisgICAgICovCisgICAgRW5naW5l
LnByb3RvdHlwZS5zZXRJbnRBcnJheTQgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAg
ICAgICAgaWYgKCF1bmlmb3JtIHx8IGFycmF5Lmxlbmd0aCAlIDQgIT09IDApIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3JtNGl2KHVuaWZv
cm0sIGFycmF5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYW4g
dW5pZm9ybSB0byBhbiBhcnJheSBvZiBmbG9hdDMyCisgICAgICogQHBhcmFtIHVuaWZvcm0gZGVm
aW5lcyB0aGUgd2ViR0wgdW5pZm9ybSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUgdmFsdWUK
KyAgICAgKiBAcGFyYW0gYXJyYXkgZGVmaW5lcyB0aGUgYXJyYXkgb2YgZmxvYXQzMiB0byBzdG9y
ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXRBcnJheSA9IGZ1bmN0aW9u
ICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3JtMWZ2KHVuaWZvcm0s
IGFycmF5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYW4gdW5p
Zm9ybSB0byBhbiBhcnJheSBvZiBmbG9hdDMyIChzdG9yZWQgYXMgdmVjMikKKyAgICAgKiBAcGFy
YW0gdW5pZm9ybSBkZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRvIHN0
b3JlIHRoZSB2YWx1ZQorICAgICAqIEBwYXJhbSBhcnJheSBkZWZpbmVzIHRoZSBhcnJheSBvZiBm
bG9hdDMyIHRvIHN0b3JlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXRGbG9hdEFy
cmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVuaWZvcm0g
fHwgYXJyYXkubGVuZ3RoICUgMiAhPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm0yZnYodW5pZm9ybSwgYXJyYXkpOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhbiB1bmlmb3JtIHRvIGFuIGFycmF5
IG9mIGZsb2F0MzIgKHN0b3JlZCBhcyB2ZWMzKQorICAgICAqIEBwYXJhbSB1bmlmb3JtIGRlZmlu
ZXMgdGhlIHdlYkdMIHVuaWZvcm0gbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgdGhlIHZhbHVlCisg
ICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIGFycmF5IG9mIGZsb2F0MzIgdG8gc3RvcmUK
KyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0QXJyYXkzID0gZnVuY3Rpb24g
KHVuaWZvcm0sIGFycmF5KSB7CisgICAgICAgIGlmICghdW5pZm9ybSB8fCBhcnJheS5sZW5ndGgg
JSAzICE9PSAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZ2wudW5pZm9ybTNmdih1bmlmb3JtLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXQgdGhlIHZhbHVlIG9mIGFuIHVuaWZvcm0gdG8gYW4gYXJyYXkgb2YgZmxvYXQzMiAoc3Rv
cmVkIGFzIHZlYzQpCisgICAgICogQHBhcmFtIHVuaWZvcm0gZGVmaW5lcyB0aGUgd2ViR0wgdW5p
Zm9ybSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUgdmFsdWUKKyAgICAgKiBAcGFyYW0gYXJy
YXkgZGVmaW5lcyB0aGUgYXJyYXkgb2YgZmxvYXQzMiB0byBzdG9yZQorICAgICAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTQgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkp
IHsKKyAgICAgICAgaWYgKCF1bmlmb3JtIHx8IGFycmF5Lmxlbmd0aCAlIDQgIT09IDApIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3JtNGZ2
KHVuaWZvcm0sIGFycmF5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFsdWUg
b2YgYW4gdW5pZm9ybSB0byBhbiBhcnJheSBvZiBudW1iZXIKKyAgICAgKiBAcGFyYW0gdW5pZm9y
bSBkZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRoZSB2
YWx1ZQorICAgICAqIEBwYXJhbSBhcnJheSBkZWZpbmVzIHRoZSBhcnJheSBvZiBudW1iZXIgdG8g
c3RvcmUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldEFycmF5ID0gZnVuY3Rpb24g
KHVuaWZvcm0sIGFycmF5KSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm0xZnYodW5pZm9ybSwg
YXJyYXkpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhbiB1bmlm
b3JtIHRvIGFuIGFycmF5IG9mIG51bWJlciAoc3RvcmVkIGFzIHZlYzIpCisgICAgICogQHBhcmFt
IHVuaWZvcm0gZGVmaW5lcyB0aGUgd2ViR0wgdW5pZm9ybSBsb2NhdGlvbiB3aGVyZSB0byBzdG9y
ZSB0aGUgdmFsdWUKKyAgICAgKiBAcGFyYW0gYXJyYXkgZGVmaW5lcyB0aGUgYXJyYXkgb2YgbnVt
YmVyIHRvIHN0b3JlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXRBcnJheTIgPSBm
dW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtIHx8IGFycmF5
Lmxlbmd0aCAlIDIgIT09IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9nbC51bmlmb3JtMmZ2KHVuaWZvcm0sIGFycmF5KTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYW4gdW5pZm9ybSB0byBhbiBhcnJheSBvZiBudW1i
ZXIgKHN0b3JlZCBhcyB2ZWMzKQorICAgICAqIEBwYXJhbSB1bmlmb3JtIGRlZmluZXMgdGhlIHdl
YkdMIHVuaWZvcm0gbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgdGhlIHZhbHVlCisgICAgICogQHBh
cmFtIGFycmF5IGRlZmluZXMgdGhlIGFycmF5IG9mIG51bWJlciB0byBzdG9yZQorICAgICAqLwor
ICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5
KSB7CisgICAgICAgIGlmICghdW5pZm9ybSB8fCBhcnJheS5sZW5ndGggJSAzICE9PSAwKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2wudW5pZm9ybTNm
dih1bmlmb3JtLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHZhbHVl
IG9mIGFuIHVuaWZvcm0gdG8gYW4gYXJyYXkgb2YgbnVtYmVyIChzdG9yZWQgYXMgdmVjNCkKKyAg
ICAgKiBAcGFyYW0gdW5pZm9ybSBkZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdo
ZXJlIHRvIHN0b3JlIHRoZSB2YWx1ZQorICAgICAqIEBwYXJhbSBhcnJheSBkZWZpbmVzIHRoZSBh
cnJheSBvZiBudW1iZXIgdG8gc3RvcmUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNl
dEFycmF5NCA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVuaWZv
cm0gfHwgYXJyYXkubGVuZ3RoICUgNCAhPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm00ZnYodW5pZm9ybSwgYXJyYXkpOworICAg
IH07CisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhbiB1bmlmb3JtIHRvIGFuIGFy
cmF5IG9mIGZsb2F0MzIgKHN0b3JlZCBhcyBtYXRyaWNlcykKKyAgICAgKiBAcGFyYW0gdW5pZm9y
bSBkZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRoZSB2
YWx1ZQorICAgICAqIEBwYXJhbSBtYXRyaWNlcyBkZWZpbmVzIHRoZSBhcnJheSBvZiBmbG9hdDMy
IHRvIHN0b3JlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXRNYXRyaWNlcyA9IGZ1
bmN0aW9uICh1bmlmb3JtLCBtYXRyaWNlcykgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3JtTWF0
cml4NGZ2KHVuaWZvcm0sIGZhbHNlLCBtYXRyaWNlcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXQgdGhlIHZhbHVlIG9mIGFuIHVuaWZvcm0gdG8gYSBtYXRyaXggKDN4MykKKyAgICAgKiBA
cGFyYW0gdW5pZm9ybSBkZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRv
IHN0b3JlIHRoZSB2YWx1ZQorICAgICAqIEBwYXJhbSBtYXRyaXggZGVmaW5lcyB0aGUgRmxvYXQz
MkFycmF5IHJlcHJlc2VudGluZyB0aGUgM3gzIG1hdHJpeCB0byBzdG9yZQorICAgICAqLworICAg
IEVuZ2luZS5wcm90b3R5cGUuc2V0TWF0cml4M3gzID0gZnVuY3Rpb24gKHVuaWZvcm0sIG1hdHJp
eCkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3JtTWF0cml4M2Z2KHVuaWZvcm0sIGZhbHNlLCBt
YXRyaXgpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhbiB1bmlm
b3JtIHRvIGEgbWF0cml4ICgyeDIpCisgICAgICogQHBhcmFtIHVuaWZvcm0gZGVmaW5lcyB0aGUg
d2ViR0wgdW5pZm9ybSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUgdmFsdWUKKyAgICAgKiBA
cGFyYW0gbWF0cml4IGRlZmluZXMgdGhlIEZsb2F0MzJBcnJheSByZXByZXNlbnRpbmcgdGhlIDJ4
MiBtYXRyaXggdG8gc3RvcmUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldE1hdHJp
eDJ4MiA9IGZ1bmN0aW9uICh1bmlmb3JtLCBtYXRyaXgpIHsKKyAgICAgICAgaWYgKCF1bmlmb3Jt
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2wudW5p
Zm9ybU1hdHJpeDJmdih1bmlmb3JtLCBmYWxzZSwgbWF0cml4KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYW4gdW5pZm9ybSB0byBhIG51bWJlciAoaW50KQorICAg
ICAqIEBwYXJhbSB1bmlmb3JtIGRlZmluZXMgdGhlIHdlYkdMIHVuaWZvcm0gbG9jYXRpb24gd2hl
cmUgdG8gc3RvcmUgdGhlIHZhbHVlCisgICAgICogQHBhcmFtIHZhbHVlIGRlZmluZXMgdGhlIGlu
dCBudW1iZXIgdG8gc3RvcmUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldEludCA9
IGZ1bmN0aW9uICh1bmlmb3JtLCB2YWx1ZSkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9nbC51bmlmb3JtMWko
dW5pZm9ybSwgdmFsdWUpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBv
ZiBhbiB1bmlmb3JtIHRvIGEgbnVtYmVyIChmbG9hdCkKKyAgICAgKiBAcGFyYW0gdW5pZm9ybSBk
ZWZpbmVzIHRoZSB3ZWJHTCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRoZSB2YWx1
ZQorICAgICAqIEBwYXJhbSB2YWx1ZSBkZWZpbmVzIHRoZSBmbG9hdCBudW1iZXIgdG8gc3RvcmUK
KyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0ID0gZnVuY3Rpb24gKHVuaWZv
cm0sIHZhbHVlKSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm0xZih1bmlmb3JtLCB2YWx1ZSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHZhbHVlIG9mIGFuIHVuaWZvcm0gdG8g
YSB2ZWMyCisgICAgICogQHBhcmFtIHVuaWZvcm0gZGVmaW5lcyB0aGUgd2ViR0wgdW5pZm9ybSBs
b2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUgdmFsdWUKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVz
IHRoZSAxc3QgY29tcG9uZW50IG9mIHRoZSB2YWx1ZQorICAgICAqIEBwYXJhbSB5IGRlZmluZXMg
dGhlIDJuZCBjb21wb25lbnQgb2YgdGhlIHZhbHVlCisgICAgICovCisgICAgRW5naW5lLnByb3Rv
dHlwZS5zZXRGbG9hdDIgPSBmdW5jdGlvbiAodW5pZm9ybSwgeCwgeSkgeworICAgICAgICBpZiAo
IXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9nbC51bmlmb3JtMmYodW5pZm9ybSwgeCwgeSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXQgdGhlIHZhbHVlIG9mIGFuIHVuaWZvcm0gdG8gYSB2ZWMzCisgICAgICogQHBhcmFtIHVuaWZv
cm0gZGVmaW5lcyB0aGUgd2ViR0wgdW5pZm9ybSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUg
dmFsdWUKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSAxc3QgY29tcG9uZW50IG9mIHRoZSB2
YWx1ZQorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgdGhlIDJuZCBjb21wb25lbnQgb2YgdGhlIHZh
bHVlCisgICAgICogQHBhcmFtIHogZGVmaW5lcyB0aGUgM3JkIGNvbXBvbmVudCBvZiB0aGUgdmFs
dWUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0MyA9IGZ1bmN0aW9uICh1
bmlmb3JtLCB4LCB5LCB6KSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm0zZih1bmlmb3JtLCB4
LCB5LCB6KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYW4gdW5p
Zm9ybSB0byBhIGJvb2xlYW4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybSBkZWZpbmVzIHRoZSB3ZWJH
TCB1bmlmb3JtIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRoZSB2YWx1ZQorICAgICAqIEBwYXJh
bSBib29sIGRlZmluZXMgdGhlIGJvb2xlYW4gdG8gc3RvcmUKKyAgICAgKi8KKyAgICBFbmdpbmUu
cHJvdG90eXBlLnNldEJvb2wgPSBmdW5jdGlvbiAodW5pZm9ybSwgYm9vbCkgeworICAgICAgICBp
ZiAoIXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9nbC51bmlmb3JtMWkodW5pZm9ybSwgYm9vbCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXQgdGhlIHZhbHVlIG9mIGFuIHVuaWZvcm0gdG8gYSB2ZWM0CisgICAgICogQHBhcmFtIHVu
aWZvcm0gZGVmaW5lcyB0aGUgd2ViR0wgdW5pZm9ybSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0
aGUgdmFsdWUKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSAxc3QgY29tcG9uZW50IG9mIHRo
ZSB2YWx1ZQorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgdGhlIDJuZCBjb21wb25lbnQgb2YgdGhl
IHZhbHVlCisgICAgICogQHBhcmFtIHogZGVmaW5lcyB0aGUgM3JkIGNvbXBvbmVudCBvZiB0aGUg
dmFsdWUKKyAgICAgKiBAcGFyYW0gdyBkZWZpbmVzIHRoZSA0dGggY29tcG9uZW50IG9mIHRoZSB2
YWx1ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXQ0ID0gZnVuY3Rpb24g
KHVuaWZvcm0sIHgsIHksIHosIHcpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2wudW5pZm9ybTRmKHVuaWZv
cm0sIHgsIHksIHosIHcpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIENvbG9yNCBv
biBhIHVuaWZvcm0gdmFyaWFibGUKKyAgICAgKiBAcGFyYW0gdW5pZm9ybSBkZWZpbmVzIHRoZSB1
bmlmb3JtIGxvY2F0aW9uCisgICAgICogQHBhcmFtIGNvbG9yNCBkZWZpbmVzIHRoZSB2YWx1ZSB0
byBiZSBzZXQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldERpcmVjdENvbG9yNCA9
IGZ1bmN0aW9uICh1bmlmb3JtLCBjb2xvcjQpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2wudW5pZm9ybTRm
KHVuaWZvcm0sIGNvbG9yNC5yLCBjb2xvcjQuZywgY29sb3I0LmIsIGNvbG9yNC5hKTsKKyAgICB9
OworICAgIC8vIFN0YXRlcworICAgIC8qKgorICAgICAqIFNldCB2YXJpb3VzIHN0YXRlcyB0byB0
aGUgd2ViR0wgY29udGV4dAorICAgICAqIEBwYXJhbSBjdWxsaW5nIGRlZmluZXMgYmFja2ZhY2Ug
Y3VsbGluZyBzdGF0ZQorICAgICAqIEBwYXJhbSB6T2Zmc2V0IGRlZmluZXMgdGhlIHZhbHVlIHRv
IGFwcGx5IHRvIHpPZmZzZXQgKDAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gZm9yY2UgZGVm
aW5lcyBpZiBzdGF0ZXMgbXVzdCBiZSBhcHBsaWVkIGV2ZW4gaWYgY2FjaGUgaXMgdXAgdG8gZGF0
ZQorICAgICAqIEBwYXJhbSByZXZlcnNlU2lkZSBkZWZpbmVzIGlmIGN1bGxpbmcgbXVzdCBiZSBy
ZXZlcnNlZCAoQ0NXIGluc3RlYWQgb2YgQ1cgYW5kIENXIGluc3RlYWQgb2YgQ0NXKQorICAgICAq
LworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAoY3VsbGluZywgek9m
ZnNldCwgZm9yY2UsIHJldmVyc2VTaWRlKSB7CisgICAgICAgIGlmICh6T2Zmc2V0ID09PSB2b2lk
IDApIHsgek9mZnNldCA9IDA7IH0KKyAgICAgICAgaWYgKHJldmVyc2VTaWRlID09PSB2b2lkIDAp
IHsgcmV2ZXJzZVNpZGUgPSBmYWxzZTsgfQorICAgICAgICAvLyBDdWxsaW5nCisgICAgICAgIGlm
ICh0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5jdWxsICE9PSBjdWxsaW5nIHx8IGZvcmNlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5jdWxsID0gY3VsbGluZzsKKyAgICAg
ICAgfQorICAgICAgICAvLyBDdWxsIGZhY2UKKyAgICAgICAgdmFyIGN1bGxGYWNlID0gdGhpcy5j
dWxsQmFja0ZhY2VzID8gdGhpcy5fZ2wuQkFDSyA6IHRoaXMuX2dsLkZST05UOworICAgICAgICBp
ZiAodGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUuY3VsbEZhY2UgIT09IGN1bGxGYWNlIHx8IGZvcmNl
KSB7CisgICAgICAgICAgICB0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5jdWxsRmFjZSA9IGN1bGxG
YWNlOworICAgICAgICB9CisgICAgICAgIC8vIFogb2Zmc2V0CisgICAgICAgIHRoaXMuc2V0Wk9m
ZnNldCh6T2Zmc2V0KTsKKyAgICAgICAgLy8gRnJvbnQgZmFjZQorICAgICAgICB2YXIgZnJvbnRG
YWNlID0gcmV2ZXJzZVNpZGUgPyB0aGlzLl9nbC5DVyA6IHRoaXMuX2dsLkNDVzsKKyAgICAgICAg
aWYgKHRoaXMuX2RlcHRoQ3VsbGluZ1N0YXRlLmZyb250RmFjZSAhPT0gZnJvbnRGYWNlIHx8IGZv
cmNlKSB7CisgICAgICAgICAgICB0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5mcm9udEZhY2UgPSBm
cm9udEZhY2U7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgeiBv
ZmZzZXQgdG8gYXBwbHkgdG8gY3VycmVudCByZW5kZXJpbmcKKyAgICAgKiBAcGFyYW0gdmFsdWUg
ZGVmaW5lcyB0aGUgb2Zmc2V0IHRvIGFwcGx5CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlw
ZS5zZXRaT2Zmc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2RlcHRoQ3Vs
bGluZ1N0YXRlLnpPZmZzZXQgPSB2YWx1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMg
dGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHpPZmZzZXQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3Vy
cmVudCB6T2Zmc2V0IHN0YXRlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRaT2Zm
c2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGhDdWxsaW5nU3Rh
dGUuek9mZnNldDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIGRl
cHRoIGJ1ZmZlcmluZworICAgICAqIEBwYXJhbSBlbmFibGUgZGVmaW5lcyB0aGUgc3RhdGUgdG8g
c2V0CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXREZXB0aEJ1ZmZlciA9IGZ1bmN0
aW9uIChlbmFibGUpIHsKKyAgICAgICAgdGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUuZGVwdGhUZXN0
ID0gZW5hYmxlOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNh
dGluZyBpZiBkZXB0aCB3cml0aW5nIGlzIGVuYWJsZWQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3Vy
cmVudCBkZXB0aCB3cml0aW5nIHN0YXRlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5n
ZXREZXB0aFdyaXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGhD
dWxsaW5nU3RhdGUuZGVwdGhNYXNrOworICAgIH07CisgICAgLyoqCisgICAgICogRW5hYmxlIG9y
IGRpc2FibGUgZGVwdGggd3JpdGluZworICAgICAqIEBwYXJhbSBlbmFibGUgZGVmaW5lcyB0aGUg
c3RhdGUgdG8gc2V0CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5zZXREZXB0aFdyaXRl
ID0gZnVuY3Rpb24gKGVuYWJsZSkgeworICAgICAgICB0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5k
ZXB0aE1hc2sgPSBlbmFibGU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFbmFibGUgb3IgZGlz
YWJsZSBjb2xvciB3cml0aW5nCisgICAgICogQHBhcmFtIGVuYWJsZSBkZWZpbmVzIHRoZSBzdGF0
ZSB0byBzZXQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldENvbG9yV3JpdGUgPSBm
dW5jdGlvbiAoZW5hYmxlKSB7CisgICAgICAgIHRoaXMuX2dsLmNvbG9yTWFzayhlbmFibGUsIGVu
YWJsZSwgZW5hYmxlLCBlbmFibGUpOworICAgICAgICB0aGlzLl9jb2xvcldyaXRlID0gZW5hYmxl
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBj
b2xvciB3cml0aW5nIGlzIGVuYWJsZWQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBjb2xv
ciB3cml0aW5nIHN0YXRlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRDb2xvcldy
aXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fY29sb3JXcml0ZTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNldHMgYWxwaGEgY29uc3RhbnRzIHVzZWQgYnkgc29tZSBh
bHBoYSBibGVuZGluZyBtb2RlcworICAgICAqIEBwYXJhbSByIGRlZmluZXMgdGhlIHJlZCBjb21w
b25lbnQKKyAgICAgKiBAcGFyYW0gZyBkZWZpbmVzIHRoZSBncmVlbiBjb21wb25lbnQKKyAgICAg
KiBAcGFyYW0gYiBkZWZpbmVzIHRoZSBibHVlIGNvbXBvbmVudAorICAgICAqIEBwYXJhbSBhIGRl
ZmluZXMgdGhlIGFscGhhIGNvbXBvbmVudAorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUu
c2V0QWxwaGFDb25zdGFudHMgPSBmdW5jdGlvbiAociwgZywgYiwgYSkgeworICAgICAgICB0aGlz
Ll9hbHBoYVN0YXRlLnNldEFscGhhQmxlbmRDb25zdGFudHMociwgZywgYiwgYSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGFscGhhIG1vZGUKKyAgICAgKiBAcGFy
YW0gbW9kZSBkZWZpbmVzIHRoZSBtb2RlIHRvIHVzZSAob25lIG9mIHRoZSBFbmdpbmUuQUxQSEFf
WFhYKQorICAgICAqIEBwYXJhbSBub0RlcHRoV3JpdGVDaGFuZ2UgZGVmaW5lcyBpZiBkZXB0aCB3
cml0aW5nIHN0YXRlIHNob3VsZCByZW1haW5zIHVuY2hhbmdlZCAoZmFsc2UgYnkgZGVmYXVsdCkK
KyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9yZXNvdXJjZXMvdHJhbnNwYXJl
bmN5X2FuZF9ob3dfbWVzaGVzX2FyZV9yZW5kZXJlZAorICAgICAqLworICAgIEVuZ2luZS5wcm90
b3R5cGUuc2V0QWxwaGFNb2RlID0gZnVuY3Rpb24gKG1vZGUsIG5vRGVwdGhXcml0ZUNoYW5nZSkg
eworICAgICAgICBpZiAobm9EZXB0aFdyaXRlQ2hhbmdlID09PSB2b2lkIDApIHsgbm9EZXB0aFdy
aXRlQ2hhbmdlID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHRoaXMuX2FscGhhTW9kZSA9PT0gbW9k
ZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAobW9k
ZSkgeworICAgICAgICAgICAgY2FzZSBFbmdpbmUuQUxQSEFfRElTQUJMRToKKyAgICAgICAgICAg
ICAgICB0aGlzLl9hbHBoYVN0YXRlLmFscGhhQmxlbmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLkFMUEhBX1BSRU1VTFRJUExJRUQ6Cisg
ICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJh
bWV0ZXJzKHRoaXMuX2dsLk9ORSwgdGhpcy5fZ2wuT05FX01JTlVTX1NSQ19BTFBIQSwgdGhpcy5f
Z2wuT05FLCB0aGlzLl9nbC5PTkUpOworICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUu
YWxwaGFCbGVuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEVuZ2luZS5BTFBIQV9QUkVNVUxUSVBMSUVEX1BPUlRFUkRVRkY6CisgICAgICAgICAgICAg
ICAgdGhpcy5fYWxwaGFTdGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzKHRoaXMu
X2dsLk9ORSwgdGhpcy5fZ2wuT05FX01JTlVTX1NSQ19BTFBIQSwgdGhpcy5fZ2wuT05FLCB0aGlz
Ll9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0
YXRlLmFscGhhQmxlbmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBFbmdpbmUuQUxQSEFfQ09NQklORToKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBo
YVN0YXRlLnNldEFscGhhQmxlbmRGdW5jdGlvblBhcmFtZXRlcnModGhpcy5fZ2wuU1JDX0FMUEhB
LCB0aGlzLl9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBLCB0aGlzLl9nbC5PTkUsIHRoaXMuX2dsLk9O
RSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJsZW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLkFMUEhBX09O
RU9ORToKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnNldEFscGhhQmxlbmRGdW5j
dGlvblBhcmFtZXRlcnModGhpcy5fZ2wuT05FLCB0aGlzLl9nbC5PTkUsIHRoaXMuX2dsLlpFUk8s
IHRoaXMuX2dsLk9ORSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJs
ZW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRW5n
aW5lLkFMUEhBX0FERDoKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnNldEFscGhh
QmxlbmRGdW5jdGlvblBhcmFtZXRlcnModGhpcy5fZ2wuU1JDX0FMUEhBLCB0aGlzLl9nbC5PTkUs
IHRoaXMuX2dsLlpFUk8sIHRoaXMuX2dsLk9ORSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYWxw
aGFTdGF0ZS5hbHBoYUJsZW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRW5naW5lLkFMUEhBX1NVQlRSQUNUOgorICAgICAgICAgICAgICAgIHRoaXMu
X2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9nbC5aRVJP
LCB0aGlzLl9nbC5PTkVfTUlOVVNfU1JDX0NPTE9SLCB0aGlzLl9nbC5PTkUsIHRoaXMuX2dsLk9O
RSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJsZW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLkFMUEhBX01V
TFRJUExZOgorICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1
bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9nbC5EU1RfQ09MT1IsIHRoaXMuX2dsLlpFUk8sIHRoaXMu
X2dsLk9ORSwgdGhpcy5fZ2wuT05FKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRl
LmFscGhhQmxlbmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBFbmdpbmUuQUxQSEFfTUFYSU1JWkVEOgorICAgICAgICAgICAgICAgIHRoaXMuX2FscGhh
U3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9nbC5TUkNfQUxQSEEs
IHRoaXMuX2dsLk9ORV9NSU5VU19TUkNfQ09MT1IsIHRoaXMuX2dsLk9ORSwgdGhpcy5fZ2wuT05F
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLmFscGhhQmxlbmQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuQUxQSEFfSU5U
RVJQT0xBVEU6CisgICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5zZXRBbHBoYUJsZW5k
RnVuY3Rpb25QYXJhbWV0ZXJzKHRoaXMuX2dsLkNPTlNUQU5UX0NPTE9SLCB0aGlzLl9nbC5PTkVf
TUlOVVNfQ09OU1RBTlRfQ09MT1IsIHRoaXMuX2dsLkNPTlNUQU5UX0FMUEhBLCB0aGlzLl9nbC5P
TkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpOworICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3Rh
dGUuYWxwaGFCbGVuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEVuZ2luZS5BTFBIQV9TQ1JFRU5NT0RFOgorICAgICAgICAgICAgICAgIHRoaXMuX2Fs
cGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9nbC5PTkUsIHRo
aXMuX2dsLk9ORV9NSU5VU19TUkNfQ09MT1IsIHRoaXMuX2dsLk9ORSwgdGhpcy5fZ2wuT05FX01J
TlVTX1NSQ19BTFBIQSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJs
ZW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIW5vRGVwdGhXcml0ZUNoYW5nZSkgeworICAgICAgICAgICAgdGhpcy5zZXREZXB0aFdyaXRl
KG1vZGUgPT09IEVuZ2luZS5BTFBIQV9ESVNBQkxFKTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9hbHBoYU1vZGUgPSBtb2RlOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3Vy
cmVudCBhbHBoYSBtb2RlCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vcmVz
b3VyY2VzL3RyYW5zcGFyZW5jeV9hbmRfaG93X21lc2hlc19hcmVfcmVuZGVyZWQKKyAgICAgKiBA
cmV0dXJucyB0aGUgY3VycmVudCBhbHBoYSBtb2RlCisgICAgICovCisgICAgRW5naW5lLnByb3Rv
dHlwZS5nZXRBbHBoYU1vZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9h
bHBoYU1vZGU7CisgICAgfTsKKyAgICAvLyBUZXh0dXJlcworICAgIC8qKgorICAgICAqIENsZWFy
cyB0aGUgbGlzdCBvZiB0ZXh0dXJlIGFjY2Vzc2libGUgdGhyb3VnaCBlbmdpbmUuCisgICAgICog
VGhpcyBjYW4gaGVscCBwcmV2ZW50aW5nIHRleHR1cmUgbG9hZCBjb25mbGljdCBkdWUgdG8gbmFt
ZSBjb2xsaXNpb24uCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5jbGVhckludGVybmFs
VGV4dHVyZXNDYWNoZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxUZXh0
dXJlc0NhY2hlID0gW107CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSB0aGUgZW50aXJl
IGNhY2hlIHRvIGJlIGNsZWFyZWQKKyAgICAgKiBZb3Ugc2hvdWxkIG5vdCBoYXZlIHRvIHVzZSB0
aGlzIGZ1bmN0aW9uIHVubGVzcyB5b3VyIGVuZ2luZSBuZWVkcyB0byBzaGFyZSB0aGUgd2ViR0wg
Y29udGV4dCB3aXRoIGFub3RoZXIgZW5naW5lCisgICAgICogQHBhcmFtIGJydXRlRm9yY2UgZGVm
aW5lcyBhIGJvb2xlYW4gdG8gZm9yY2UgY2xlYXJpbmcgQUxMIGNhY2hlcyAoaW5jbHVkaW5nIHN0
ZW5jaWwsIGRldG9oIGFuZCBhbHBoYSBzdGF0ZXMpCisgICAgICovCisgICAgRW5naW5lLnByb3Rv
dHlwZS53aXBlQ2FjaGVzID0gZnVuY3Rpb24gKGJydXRlRm9yY2UpIHsKKyAgICAgICAgaWYgKHRo
aXMucHJldmVudENhY2hlV2lwZUJldHdlZW5GcmFtZXMgJiYgIWJydXRlRm9yY2UpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0ID0g
bnVsbDsKKyAgICAgICAgdGhpcy5fdmlld3BvcnRDYWNoZWQueCA9IDA7CisgICAgICAgIHRoaXMu
X3ZpZXdwb3J0Q2FjaGVkLnkgPSAwOworICAgICAgICB0aGlzLl92aWV3cG9ydENhY2hlZC56ID0g
MDsKKyAgICAgICAgdGhpcy5fdmlld3BvcnRDYWNoZWQudyA9IDA7CisgICAgICAgIGlmIChicnV0
ZUZvcmNlKSB7CisgICAgICAgICAgICB0aGlzLnJlc2V0VGV4dHVyZUNhY2hlKCk7CisgICAgICAg
ICAgICB0aGlzLl9jdXJyZW50UHJvZ3JhbSA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl9zdGVu
Y2lsU3RhdGUucmVzZXQoKTsKKyAgICAgICAgICAgIHRoaXMuX2RlcHRoQ3VsbGluZ1N0YXRlLnJl
c2V0KCk7CisgICAgICAgICAgICB0aGlzLnNldERlcHRoRnVuY3Rpb25Ub0xlc3NPckVxdWFsKCk7
CisgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnJlc2V0KCk7CisgICAgICAgICAgICB0aGlz
Ll91bnBhY2tGbGlwWUNhY2hlZCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVz
ZXRWZXJ0ZXhCdWZmZXJCaW5kaW5nKCk7CisgICAgICAgIHRoaXMuX2NhY2hlZEluZGV4QnVmZmVy
ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2FjaGVkRWZmZWN0Rm9yVmVydGV4QnVmZmVycyA9IG51
bGw7CisgICAgICAgIHRoaXMuX3VuYmluZFZlcnRleEFycmF5T2JqZWN0KCk7CisgICAgICAgIHRo
aXMuYmluZEluZGV4QnVmZmVyKG51bGwpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0IHRo
ZSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IHRvIHVzZSwgYmFzZWQgb24gdGhlIGZvcm1hdHMg
eW91IGhhdmUsIGFuZCB0aGUgZm9ybWF0cworICAgICAqIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdh
cmUgLyBicm93c2VyLgorICAgICAqCisgICAgICogS2hyb25vcyBUZXh0dXJlIENvbnRhaW5lciAo
Lmt0eCkgZmlsZXMgYXJlIHVzZWQgdG8gc3VwcG9ydCB0aGlzLiAgVGhpcyBmb3JtYXQgaGFzIHRo
ZQorICAgICAqIGFkdmFudGFnZSBvZiBiZWluZyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIE9w
ZW5HTC4gIEhlYWRlciBlbGVtZW50cyBkaXJlY3RseSBjb3JyZXNwb25kCisgICAgICogdG8gQVBJ
IGFyZ3VtZW50cyBuZWVkZWQgdG8gY29tcHJlc3NlZCB0ZXh0dXJlcy4gIFRoaXMgcHV0cyB0aGUg
YnVyZGVuIG9uIHRoZSBjb250YWluZXIKKyAgICAgKiBnZW5lcmF0b3IgdG8gaG91c2UgdGhlIGFy
Y2FuZSBjb2RlIGZvciBkZXRlcm1pbmluZyB0aGVzZSBmb3IgY3VycmVudCAmIGZ1dHVyZSBmb3Jt
YXRzLgorICAgICAqCisgICAgICogZm9yIGRlc2NyaXB0aW9uIHNlZSBodHRwczovL3d3dy5raHJv
bm9zLm9yZy9vcGVuZ2xlcy9zZGsvdG9vbHMvS1RYLworICAgICAqIGZvciBmaWxlIGxheW91dCBz
ZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL3Rvb2xzL0tUWC9maWxlX2Zv
cm1hdF9zcGVjLworICAgICAqCisgICAgICogTm90ZTogVGhlIHJlc3VsdCBvZiB0aGlzIGNhbGwg
aXMgbm90IHRha2VuIGludG8gYWNjb3VudCB3aGVuIGEgdGV4dHVyZSBpcyBiYXNlNjQuCisgICAg
ICoKKyAgICAgKiBAcGFyYW0gZm9ybWF0c0F2YWlsYWJsZSBkZWZpbmVzIHRoZSBsaXN0IG9mIHRo
b3NlIGZvcm1hdCBmYW1pbGllcyB5b3UgaGF2ZSBjcmVhdGVkCisgICAgICogb24geW91ciBzZXJ2
ZXIuICBTeW50YXg6ICctJyArIGZvcm1hdCBmYW1pbHkgKyAnLmt0eCcuICAoQ2FzZSBhbmQgb3Jk
ZXIgZG8gbm90IG1hdHRlci4pCisgICAgICoKKyAgICAgKiBDdXJyZW50IGZhbWlsaWVzIGFyZSBh
c3RjLCBkeHQsIHB2cnRjLCBldGMyLCAmIGV0YzEuCisgICAgICogQHJldHVybnMgVGhlIGV4dGVu
c2lvbiBzZWxlY3RlZC4KKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnNldFRleHR1cmVG
b3JtYXRUb1VzZSA9IGZ1bmN0aW9uIChmb3JtYXRzQXZhaWxhYmxlKSB7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBsZW4xID0gdGhpcy50ZXh0dXJlc1N1cHBvcnRlZC5sZW5ndGg7IGkgPCBsZW4x
OyBpKyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBsZW4yID0gZm9ybWF0c0F2YWls
YWJsZS5sZW5ndGg7IGogPCBsZW4yOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5f
dGV4dHVyZXNTdXBwb3J0ZWRbaV0gPT09IGZvcm1hdHNBdmFpbGFibGVbal0udG9Mb3dlckNhc2Uo
KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZUZvcm1hdEluVXNl
ID0gdGhpcy5fdGV4dHVyZXNTdXBwb3J0ZWRbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGFjdGl2ZWx5IHNldCBmb3JtYXQgdG8gbm90
aGluZywgdG8gYWxsb3cgdGhpcyB0byBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAg
Ly8gYW5kIHBvc3NpYmx5IGZhaWwgdGhlIDJuZCB0aW1lCisgICAgICAgIHRoaXMuX3RleHR1cmVG
b3JtYXRJblVzZSA9IG51bGw7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9nZXRTYW1wbGluZ1BhcmFtZXRlcnMg
PSBmdW5jdGlvbiAoc2FtcGxpbmdNb2RlLCBnZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAgICAgdmFy
IGdsID0gdGhpcy5fZ2w7CisgICAgICAgIHZhciBtYWdGaWx0ZXIgPSBnbC5ORUFSRVNUOworICAg
ICAgICB2YXIgbWluRmlsdGVyID0gZ2wuTkVBUkVTVDsKKyAgICAgICAgc3dpdGNoIChzYW1wbGlu
Z01vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVfQklMSU5FQVJfU0FNUExJ
TkdNT0RFOgorICAgICAgICAgICAgICAgIG1hZ0ZpbHRlciA9IGdsLkxJTkVBUjsKKyAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVNaXBNYXBzKSB7CisgICAgICAgICAgICAgICAgICAgIG1pbkZp
bHRlciA9IGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9IGdsLkxJ
TkVBUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEVuZ2luZS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01PREU6CisgICAgICAg
ICAgICAgICAgbWFnRmlsdGVyID0gZ2wuTElORUFSOworICAgICAgICAgICAgICAgIGlmIChnZW5l
cmF0ZU1pcE1hcHMpIHsKKyAgICAgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTElORUFS
X01JUE1BUF9MSU5FQVI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPSBnbC5MSU5FQVI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFbmdpbmUu
VEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5HTU9ERToKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIg
PSBnbC5ORUFSRVNUOworICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZU1pcE1hcHMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTkVBUkVTVF9NSVBNQVBfTElORUFSOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgbWluRmlsdGVyID0gZ2wuTkVBUkVTVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFX05FQVJFU1Rf
TkVBUkVTVF9NSVBORUFSRVNUOgorICAgICAgICAgICAgICAgIG1hZ0ZpbHRlciA9IGdsLk5FQVJF
U1Q7CisgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlTWlwTWFwcykgeworICAgICAgICAgICAg
ICAgICAgICBtaW5GaWx0ZXIgPSBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbWlu
RmlsdGVyID0gZ2wuTkVBUkVTVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFX05FQVJFU1RfTElORUFSX01J
UE5FQVJFU1Q6CisgICAgICAgICAgICAgICAgbWFnRmlsdGVyID0gZ2wuTkVBUkVTVDsKKyAgICAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdGVNaXBNYXBzKSB7CisgICAgICAgICAgICAgICAgICAgIG1p
bkZpbHRlciA9IGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9IGds
LkxJTkVBUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFX05FQVJFU1RfTElORUFSX01JUExJTkVBUjoKKyAg
ICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBnbC5ORUFSRVNUOworICAgICAgICAgICAgICAgIGlm
IChnZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wu
TElORUFSX01JUE1BUF9MSU5FQVI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPSBnbC5MSU5FQVI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBF
bmdpbmUuVEVYVFVSRV9ORUFSRVNUX0xJTkVBUjoKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIg
PSBnbC5ORUFSRVNUOworICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9IGdsLkxJTkVBUjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVfTkVB
UkVTVF9ORUFSRVNUOgorICAgICAgICAgICAgICAgIG1hZ0ZpbHRlciA9IGdsLk5FQVJFU1Q7Cisg
ICAgICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTkVBUkVTVDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVfTElORUFSX05FQVJFU1RfTUlQ
TkVBUkVTVDoKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBnbC5MSU5FQVI7CisgICAgICAg
ICAgICAgICAgaWYgKGdlbmVyYXRlTWlwTWFwcykgeworICAgICAgICAgICAgICAgICAgICBtaW5G
aWx0ZXIgPSBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wu
TkVBUkVTVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFX0xJTkVBUl9ORUFSRVNUX01JUExJTkVBUjoKKyAg
ICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBnbC5MSU5FQVI7CisgICAgICAgICAgICAgICAgaWYg
KGdlbmVyYXRlTWlwTWFwcykgeworICAgICAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPSBnbC5O
RUFSRVNUX01JUE1BUF9MSU5FQVI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPSBnbC5ORUFSRVNUOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
RW5naW5lLlRFWFRVUkVfTElORUFSX0xJTkVBUjoKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIg
PSBnbC5MSU5FQVI7CisgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTElORUFSOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRV9MSU5F
QVJfTkVBUkVTVDoKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBnbC5MSU5FQVI7CisgICAg
ICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTkVBUkVTVDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgbWluOiBtaW5GaWx0
ZXIsCisgICAgICAgICAgICBtYWc6IG1hZ0ZpbHRlcgorICAgICAgICB9OworICAgIH07CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9jcmVhdGVUZXh0dXJlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2dsLmNyZWF0ZVRleHR1cmUo
KTsKKyAgICAgICAgaWYgKCF0ZXh0dXJlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IlVuYWJsZSB0byBjcmVhdGUgdGV4dHVyZSIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
ZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICogVXN1YWxseSBjYWxsZWQgZnJvbSBUZXh0
dXJlLnRzLgorICAgICAqIFBhc3NlZCBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBXZWJHTFRleHR1
cmUKKyAgICAgKiBAcGFyYW0gdXJsQXJnIGRlZmluZXMgYSB2YWx1ZSB3aGljaCBjb250YWlucyBv
bmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgKiAqIEEgY29udmVudGlvbmFsIGh0dHAgVVJMLCBl
LmcuICdodHRwOi8vLi4uJyBvciAnZmlsZTovLy4uLicKKyAgICAgKiAqIEEgYmFzZTY0IHN0cmlu
ZyBvZiBpbi1saW5lIHRleHR1cmUgZGF0YSwgZS5nLiAnZGF0YTppbWFnZS9qcGc7YmFzZTY0LC8u
Li4nCisgICAgICogKiBBbiBpbmRpY2F0b3IgdGhhdCBkYXRhIGJlaW5nIHBhc3NlZCB1c2luZyB0
aGUgYnVmZmVyIHBhcmFtZXRlciwgZS5nLiAnZGF0YTpteXRleHR1cmUuanBnJworICAgICAqIEBw
YXJhbSBub01pcG1hcCBkZWZpbmVzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgbm8gbWlwbWFw
cyBzaGFsbCBiZSBnZW5lcmF0ZWQuICBJZ25vcmVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzLiAg
VGhleSBtdXN0IGJlIGluIHRoZSBmaWxlCisgICAgICogQHBhcmFtIGludmVydFkgd2hlbiB0cnVl
LCBpbWFnZSBpcyBmbGlwcGVkIHdoZW4gbG9hZGVkLiAgWW91IHByb2JhYmx5IHdhbnQgdHJ1ZS4g
Q2VydGFpbiBjb21wcmVzc2VkIHRleHR1cmVzIG1heSBpbnZlcnQgdGhpcyBpZiB0aGVpciBkZWZh
dWx0IGlzIGludmVydGVkIChlZy4ga3R4KQorICAgICAqIEBwYXJhbSBzY2VuZSBuZWVkZWQgZm9y
IGxvYWRpbmcgdG8gdGhlIGNvcnJlY3Qgc2NlbmUKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2Rl
IG1vZGUgd2l0aCBzaG91bGQgYmUgdXNlZCBzYW1wbGUgLyBhY2Nlc3MgdGhlIHRleHR1cmUgKERl
ZmF1bHQ6IFRleHR1cmUuVFJJTElORUFSX1NBTVBMSU5HTU9ERSkKKyAgICAgKiBAcGFyYW0gb25M
b2FkIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxl
dGlvbgorICAgICAqIEBwYXJhbSBvbkVycm9yIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGNhbGxl
ZCB1cG9uIGZhaWx1cmUKKyAgICAgKiBAcGFyYW0gYnVmZmVyIGEgc291cmNlIG9mIGEgZmlsZSBw
cmV2aW91c2x5IGZldGNoZWQgYXMgZWl0aGVyIGEgYmFzZTY0IHN0cmluZywgYW4gQXJyYXlCdWZm
ZXIgKGNvbXByZXNzZWQgb3IgaW1hZ2UgZm9ybWF0KSwgSFRNTEltYWdlRWxlbWVudCAoaW1hZ2Ug
Zm9ybWF0KSwgb3IgYSBCbG9iCisgICAgICogQHBhcmFtIGZhbGxiYWNrIGFuIGludGVybmFsIGFy
Z3VtZW50IGluIGNhc2UgdGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFnYWluLCBkdWUgdG8g
ZXRjMSBub3QgaGF2aW5nIGFscGhhIGNhcGFiaWxpdGllcworICAgICAqIEBwYXJhbSBmb3JtYXQg
aW50ZXJuYWwgZm9ybWF0LiAgRGVmYXVsdDogUkdCIHdoZW4gZXh0ZW5zaW9uIGlzICcuanBnJyBl
bHNlIFJHQkEuICBJZ25vcmVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCisgICAgICogQHBhcmFt
IGZvcmNlZEV4dGVuc2lvbiBkZWZpbmVzIHRoZSBleHRlbnNpb24gdG8gdXNlIHRvIHBpY2sgdGhl
IHJpZ2h0IGxvYWRlcgorICAgICAqIEBwYXJhbSBleGNsdWRlTG9hZGVycyBhcnJheSBvZiB0ZXh0
dXJlIGxvYWRlcnMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgd2hlbiBwaWNraW5nIGEgbG9hZGVy
IGZvciB0aGUgdGV4dHVyZSAoZGVmYXVsdDogZW1wdHkgYXJyYXkpCisgICAgICogQHJldHVybnMg
YSBJbnRlcm5hbFRleHR1cmUgZm9yIGFzc2lnbm1lbnQgYmFjayBpbnRvIEJBQllMT04uVGV4dHVy
ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuY3JlYXRlVGV4dHVyZSA9IGZ1bmN0aW9u
ICh1cmxBcmcsIG5vTWlwbWFwLCBpbnZlcnRZLCBzY2VuZSwgc2FtcGxpbmdNb2RlLCBvbkxvYWQs
IG9uRXJyb3IsIGJ1ZmZlciwgZmFsbGJhY2ssIGZvcm1hdCwgZm9yY2VkRXh0ZW5zaW9uLCBleGNs
dWRlTG9hZGVycykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoc2Ft
cGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gRW5naW5lLlRFWFRVUkVfVFJJ
TElORUFSX1NBTVBMSU5HTU9ERTsgfQorICAgICAgICBpZiAob25Mb2FkID09PSB2b2lkIDApIHsg
b25Mb2FkID0gbnVsbDsgfQorICAgICAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJy
b3IgPSBudWxsOyB9CisgICAgICAgIGlmIChidWZmZXIgPT09IHZvaWQgMCkgeyBidWZmZXIgPSBu
dWxsOyB9CisgICAgICAgIGlmIChmYWxsYmFjayA9PT0gdm9pZCAwKSB7IGZhbGxiYWNrID0gbnVs
bDsgfQorICAgICAgICBpZiAoZm9ybWF0ID09PSB2b2lkIDApIHsgZm9ybWF0ID0gbnVsbDsgfQor
ICAgICAgICBpZiAoZm9yY2VkRXh0ZW5zaW9uID09PSB2b2lkIDApIHsgZm9yY2VkRXh0ZW5zaW9u
ID0gbnVsbDsgfQorICAgICAgICBpZiAoZXhjbHVkZUxvYWRlcnMgPT09IHZvaWQgMCkgeyBleGNs
dWRlTG9hZGVycyA9IFtdOyB9CisgICAgICAgIHZhciB1cmwgPSBTdHJpbmcodXJsQXJnKTsgLy8g
YXNzaWduIGEgbmV3IHN0cmluZywgc28gdGhhdCB0aGUgb3JpZ2luYWwgaXMgc3RpbGwgYXZhaWxh
YmxlIGluIGNhc2Ugb2YgZmFsbGJhY2sKKyAgICAgICAgdmFyIGZyb21EYXRhID0gdXJsLnN1YnN0
cigwLCA1KSA9PT0gImRhdGE6IjsKKyAgICAgICAgdmFyIGZyb21CbG9iID0gdXJsLnN1YnN0cigw
LCA1KSA9PT0gImJsb2I6IjsKKyAgICAgICAgdmFyIGlzQmFzZTY0ID0gZnJvbURhdGEgJiYgdXJs
LmluZGV4T2YoIjtiYXNlNjQsIikgIT09IC0xOworICAgICAgICB2YXIgdGV4dHVyZSA9IGZhbGxi
YWNrID8gZmFsbGJhY2sgOiBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW50ZXJuYWxUZXh0dXJlIl0odGhpcywgX01h
dGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9VUkwpOworICAgICAgICAvLyBlc3Rh
Ymxpc2ggdGhlIGZpbGUgZXh0ZW5zaW9uLCBpZiBwb3NzaWJsZQorICAgICAgICB2YXIgbGFzdERv
dCA9IHVybC5sYXN0SW5kZXhPZignLicpOworICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZm9yY2Vk
RXh0ZW5zaW9uID8gZm9yY2VkRXh0ZW5zaW9uIDogKGxhc3REb3QgPiAtMSA/IHVybC5zdWJzdHJp
bmcobGFzdERvdCkudG9Mb3dlckNhc2UoKSA6ICIiKTsKKyAgICAgICAgdmFyIGxvYWRlciA9IG51
bGw7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBFbmdpbmUuX1RleHR1cmVMb2FkZXJz
OyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGF2YWlsYWJsZUxvYWRl
ciA9IF9hW19pXTsKKyAgICAgICAgICAgIGlmIChleGNsdWRlTG9hZGVycy5pbmRleE9mKGF2YWls
YWJsZUxvYWRlcikgPT09IC0xICYmIGF2YWlsYWJsZUxvYWRlci5jYW5Mb2FkKGV4dGVuc2lvbiwg
dGhpcy5fdGV4dHVyZUZvcm1hdEluVXNlLCBmYWxsYmFjaywgaXNCYXNlNjQsIGJ1ZmZlciA/IHRy
dWUgOiBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBhdmFpbGFibGVMb2FkZXI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGxvYWRlcikgeworICAgICAgICAgICAgdXJsID0gbG9hZGVyLnRyYW5zZm9ybVVybCh1
cmwsIHRoaXMuX3RleHR1cmVGb3JtYXRJblVzZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNj
ZW5lKSB7CisgICAgICAgICAgICBzY2VuZS5fYWRkUGVuZGluZ0RhdGEodGV4dHVyZSk7CisgICAg
ICAgIH0KKyAgICAgICAgdGV4dHVyZS51cmwgPSB1cmw7CisgICAgICAgIHRleHR1cmUuZ2VuZXJh
dGVNaXBNYXBzID0gIW5vTWlwbWFwOworICAgICAgICB0ZXh0dXJlLnNhbXBsaW5nTW9kZSA9IHNh
bXBsaW5nTW9kZTsKKyAgICAgICAgdGV4dHVyZS5pbnZlcnRZID0gaW52ZXJ0WTsKKyAgICAgICAg
aWYgKCF0aGlzLl9kb05vdEhhbmRsZUNvbnRleHRMb3N0KSB7CisgICAgICAgICAgICAvLyBLZWVw
IGEgbGluayB0byB0aGUgYnVmZmVyIG9ubHkgaWYgd2UgcGxhbiB0byBoYW5kbGUgY29udGV4dCBs
b3N0CisgICAgICAgICAgICB0ZXh0dXJlLl9idWZmZXIgPSBidWZmZXI7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIG9uTG9hZE9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgaWYgKG9uTG9hZCAmJiAh
ZmFsbGJhY2spIHsKKyAgICAgICAgICAgIG9uTG9hZE9ic2VydmVyID0gdGV4dHVyZS5vbkxvYWRl
ZE9ic2VydmFibGUuYWRkKG9uTG9hZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmYWxsYmFj
aykgeworICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxUZXh0dXJlc0NhY2hlLnB1c2godGV4dHVy
ZSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9uSW50ZXJuYWxFcnJvciA9IGZ1bmN0aW9uICht
ZXNzYWdlLCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIGlmIChzY2VuZSkgeworICAgICAgICAg
ICAgICAgIHNjZW5lLl9yZW1vdmVQZW5kaW5nRGF0YSh0ZXh0dXJlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZhciBjdXN0b21GYWxsYmFjayA9IGZhbHNlOworICAgICAgICAgICAgaWYg
KGxvYWRlcikgeworICAgICAgICAgICAgICAgIHZhciBmYWxsYmFja1VybCA9IGxvYWRlci5nZXRG
YWxsYmFja1RleHR1cmVVcmwodXJsLCBfdGhpcy5fdGV4dHVyZUZvcm1hdEluVXNlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZmFsbGJhY2tVcmwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQWRk
IEJhY2sKKyAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmFsbGJhY2sgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBleGNsdWRlTG9hZGVycy5wdXNoKGxvYWRlcik7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLmNyZWF0ZVRleHR1cmUodXJsQXJnLCBub01pcG1hcCwgdGV4dHVyZS5pbnZl
cnRZLCBzY2VuZSwgc2FtcGxpbmdNb2RlLCBudWxsLCBvbkVycm9yLCBidWZmZXIsIHRleHR1cmUs
IHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBleGNsdWRlTG9hZGVycyk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIWN1c3RvbUZhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgaWYgKG9uTG9hZE9ic2Vy
dmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUub25Mb2FkZWRPYnNlcnZhYmxlLnJl
bW92ZShvbkxvYWRPYnNlcnZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkVuZ2luZVN0
b3JlIl0uVXNlRmFsbGJhY2tUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmNy
ZWF0ZVRleHR1cmUoX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJF
bmdpbmVTdG9yZSJdLkZhbGxiYWNrVGV4dHVyZSwgbm9NaXBtYXAsIHRleHR1cmUuaW52ZXJ0WSwg
c2NlbmUsIHNhbXBsaW5nTW9kZSwgbnVsbCwgb25FcnJvciwgYnVmZmVyLCB0ZXh0dXJlKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChvbkVycm9yKSB7CisgICAgICAgICAgICAgICAgb25FcnJvciht
ZXNzYWdlIHx8ICJVbmtub3duIGVycm9yIiwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKyAgICAgICAgLy8gcHJvY2Vzc2luZyBmb3Igbm9uLWltYWdlIGZvcm1hdHMKKyAg
ICAgICAgaWYgKGxvYWRlcikgeworICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24g
KGRhdGEpIHsKKyAgICAgICAgICAgICAgICBsb2FkZXIubG9hZERhdGEoZGF0YSwgdGV4dHVyZSwg
ZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIGxvYWRNaXBtYXAsIGlzQ29tcHJlc3NlZCwgZG9uZSwg
bG9hZEZhaWxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEZhaWxlZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb25JbnRlcm5hbEVycm9yKCJUZXh0dXJlTG9hZGVyIGZhaWxl
ZCB0byBsb2FkIGRhdGEiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wcmVwYXJlV2ViR0xU
ZXh0dXJlKHRleHR1cmUsIHNjZW5lLCB3aWR0aCwgaGVpZ2h0LCB0ZXh0dXJlLmludmVydFksICFs
b2FkTWlwbWFwLCBpc0NvbXByZXNzZWQsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2FtcGxpbmdNb2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fbG9hZEZpbGUodXJs
LCBjYWxsYmFjaywgdW5kZWZpbmVkLCBzY2VuZSA/IHNjZW5lLm9mZmxpbmVQcm92aWRlciA6IHVu
ZGVmaW5lZCwgdHJ1ZSwgZnVuY3Rpb24gKHJlcXVlc3QsIGV4Y2VwdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICBvbkludGVybmFsRXJyb3IoIlVuYWJsZSB0byBsb2FkICIgKyAocmVxdWVzdCA/
IHJlcXVlc3QucmVzcG9uc2VVUkwgOiB1cmwsIGV4Y2VwdGlvbikpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
Ly9jYWxsYmFjayhidWZmZXIgYXMgQXJyYXlCdWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChi
dWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBjYWxs
YmFjayhidWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9uRXJyb3IoIlVuYWJsZSB0byBsb2FkOiBvbmx5IEFycmF5QnVmZmVyIHN1cHBvcnRlZCBo
ZXJlIiwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIg
b25sb2FkID0gZnVuY3Rpb24gKGltZykgeworICAgICAgICAgICAgICAgIGlmIChmcm9tQmxvYiAm
JiAhX3RoaXMuX2RvTm90SGFuZGxlQ29udGV4dExvc3QpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBzdG9yZSB0aGUgaW1hZ2UgaWYgd2UgbmVlZCB0byByZWJ1aWxkIHRoZSB0
ZXh0dXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgYSB3ZWJnbCBjb250ZXh0
IGxvc3QKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5fYnVmZmVyID0gaW1nOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBfdGhpcy5fcHJlcGFyZVdlYkdMVGV4dHVyZSh0
ZXh0dXJlLCBzY2VuZSwgaW1nLndpZHRoLCBpbWcuaGVpZ2h0LCB0ZXh0dXJlLmludmVydFksIG5v
TWlwbWFwLCBmYWxzZSwgZnVuY3Rpb24gKHBvdFdpZHRoLCBwb3RIZWlnaHQsIGNvbnRpbnVhdGlv
bkNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBnbCA9IF90aGlzLl9nbDsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGlzUG90ID0gKGltZy53aWR0aCA9PT0gcG90V2lkdGggJiYg
aW1nLmhlaWdodCA9PT0gcG90SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGludGVy
bmFsRm9ybWF0ID0gZm9ybWF0ID8gX3RoaXMuX2dldEludGVybmFsRm9ybWF0KGZvcm1hdCkgOiAo
KGV4dGVuc2lvbiA9PT0gIi5qcGciKSA/IGdsLlJHQiA6IGdsLlJHQkEpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNQb3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsLnRleEltYWdl
MkQoZ2wuVEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxGb3JtYXQsIGludGVybmFsRm9ybWF0LCBnbC5V
TlNJR05FRF9CWVRFLCBpbWcpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhciBtYXhUZXh0
dXJlU2l6ZSA9IF90aGlzLl9jYXBzLm1heFRleHR1cmVTaXplOworICAgICAgICAgICAgICAgICAg
ICBpZiAoaW1nLndpZHRoID4gbWF4VGV4dHVyZVNpemUgfHwgaW1nLmhlaWdodCA+IG1heFRleHR1
cmVTaXplIHx8IEVuZ2luZS5fUmVzY2FsZVBvc3RQcm9jZXNzRmFjdG9yeSA9PT0gbnVsbCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ByZXBhcmVXb3JraW5nQ2FudmFzKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLl93b3JraW5nQ2FudmFzIHx8ICFfdGhp
cy5fd29ya2luZ0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5fd29ya2luZ0NhbnZhcy53aWR0aCA9IHBvdFdpZHRoOworICAgICAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX3dvcmtpbmdDYW52YXMuaGVpZ2h0ID0gcG90SGVpZ2h0OworICAgICAg
ICAgICAgICAgICAgICAgICAgX3RoaXMuX3dvcmtpbmdDb250ZXh0LmRyYXdJbWFnZShpbWcsIDAs
IDAsIGltZy53aWR0aCwgaW1nLmhlaWdodCwgMCwgMCwgcG90V2lkdGgsIHBvdEhlaWdodCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGlu
dGVybmFsRm9ybWF0LCBpbnRlcm5hbEZvcm1hdCwgZ2wuVU5TSUdORURfQllURSwgX3RoaXMuX3dv
cmtpbmdDYW52YXMpOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS53aWR0aCA9IHBv
dFdpZHRoOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBwb3RIZWln
aHQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBVc2luZyBzaGFkZXJzIHdoZW4gcG9zc2libGUgdG8gcmVzY2FsZSBiZWNhdXNlIGNh
bnZhcy5kcmF3SW1hZ2UgaXMgbG9zc3kKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3Vy
Y2VfMSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJJbnRlcm5hbFRleHR1cmUiXShfdGhpcywgX01hdGVyaWFsc19U
ZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW50
ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9URU1QKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IF90aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIHNvdXJjZV8xLCB0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwg
MCwgaW50ZXJuYWxGb3JtYXQsIGludGVybmFsRm9ybWF0LCBnbC5VTlNJR05FRF9CWVRFLCBpbWcp
OworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Jlc2NhbGVUZXh0dXJlKHNvdXJjZV8x
LCB0ZXh0dXJlLCBzY2VuZSwgaW50ZXJuYWxGb3JtYXQsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcmVsZWFzZVRleHR1cmUoc291cmNlXzEpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRF
WFRVUkVfMkQsIHRleHR1cmUsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVhdGlvbkNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9LCBzYW1wbGluZ01vZGUpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IGlmICghZnJvbURhdGEgfHwgaXNCYXNlNjQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVy
IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICBvbmxv
YWQoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIF9NaXNjX2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTdfX1siRmlsZVRvb2xzIl0uTG9hZEltYWdlKHVybCwgb25sb2FkLCBvbkludGVybmFsRXJy
b3IsIHNjZW5lID8gc2NlbmUub2ZmbGluZVByb3ZpZGVyIDogbnVsbCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGJ1ZmZlciA9
PT0gInN0cmluZyIgfHwgYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZm
ZXIuaXNWaWV3KGJ1ZmZlcikgfHwgYnVmZmVyIGluc3RhbmNlb2YgQmxvYikgeworICAgICAgICAg
ICAgICAgIF9NaXNjX2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siRmls
ZVRvb2xzIl0uTG9hZEltYWdlKGJ1ZmZlciwgb25sb2FkLCBvbkludGVybmFsRXJyb3IsIHNjZW5l
ID8gc2NlbmUub2ZmbGluZVByb3ZpZGVyIDogbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBvbmxvYWQoYnVmZmVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEBoaWRkZW4KKyAgICAgKiBSZXNjYWxlcyBhIHRleHR1cmUKKyAgICAgKiBAcGFyYW0g
c291cmNlIGlucHV0IHRleHV0cmUKKyAgICAgKiBAcGFyYW0gZGVzdGluYXRpb24gZGVzdGluYXRp
b24gdGV4dHVyZQorICAgICAqIEBwYXJhbSBzY2VuZSBzY2VuZSB0byB1c2UgdG8gcmVuZGVyIHRo
ZSByZXNpemUKKyAgICAgKiBAcGFyYW0gaW50ZXJuYWxGb3JtYXQgZm9ybWF0IHRvIHVzZSB3aGVu
IHJlc2l6aW5nCisgICAgICogQHBhcmFtIG9uQ29tcGxldGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVk
IHdoZW4gcmVzaXplIGhhcyBjb21wbGV0ZWQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBl
Ll9yZXNjYWxlVGV4dHVyZSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3RpbmF0aW9uLCBzY2VuZSwg
aW50ZXJuYWxGb3JtYXQsIG9uQ29tcGxldGUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgdGhpcy5fZ2wudGV4UGFyYW1ldGVyaSh0aGlzLl9nbC5URVhUVVJFXzJELCB0aGlz
Ll9nbC5URVhUVVJFX01BR19GSUxURVIsIHRoaXMuX2dsLkxJTkVBUik7CisgICAgICAgIHRoaXMu
X2dsLnRleFBhcmFtZXRlcmkodGhpcy5fZ2wuVEVYVFVSRV8yRCwgdGhpcy5fZ2wuVEVYVFVSRV9N
SU5fRklMVEVSLCB0aGlzLl9nbC5MSU5FQVIpOworICAgICAgICB0aGlzLl9nbC50ZXhQYXJhbWV0
ZXJpKHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRoaXMuX2dsLlRFWFRVUkVfV1JBUF9TLCB0aGlzLl9n
bC5DTEFNUF9UT19FREdFKTsKKyAgICAgICAgdGhpcy5fZ2wudGV4UGFyYW1ldGVyaSh0aGlzLl9n
bC5URVhUVVJFXzJELCB0aGlzLl9nbC5URVhUVVJFX1dSQVBfVCwgdGhpcy5fZ2wuQ0xBTVBfVE9f
RURHRSk7CisgICAgICAgIHZhciBydHQgPSB0aGlzLmNyZWF0ZVJlbmRlclRhcmdldFRleHR1cmUo
eworICAgICAgICAgICAgd2lkdGg6IGRlc3RpbmF0aW9uLndpZHRoLAorICAgICAgICAgICAgaGVp
Z2h0OiBkZXN0aW5hdGlvbi5oZWlnaHQsCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIGdlbmVy
YXRlTWlwTWFwczogZmFsc2UsCisgICAgICAgICAgICB0eXBlOiBFbmdpbmUuVEVYVFVSRVRZUEVf
VU5TSUdORURfSU5ULAorICAgICAgICAgICAgc2FtcGxpbmdNb2RlOiBFbmdpbmUuVEVYVFVSRV9C
SUxJTkVBUl9TQU1QTElOR01PREUsCisgICAgICAgICAgICBnZW5lcmF0ZURlcHRoQnVmZmVyOiBm
YWxzZSwKKyAgICAgICAgICAgIGdlbmVyYXRlU3RlbmNpbEJ1ZmZlcjogZmFsc2UKKyAgICAgICAg
fSk7CisgICAgICAgIGlmICghdGhpcy5fcmVzY2FsZVBvc3RQcm9jZXNzICYmIEVuZ2luZS5fUmVz
Y2FsZVBvc3RQcm9jZXNzRmFjdG9yeSkgeworICAgICAgICAgICAgdGhpcy5fcmVzY2FsZVBvc3RQ
cm9jZXNzID0gRW5naW5lLl9SZXNjYWxlUG9zdFByb2Nlc3NGYWN0b3J5KHRoaXMpOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX3Jlc2NhbGVQb3N0UHJvY2Vzcy5nZXRFZmZlY3QoKS5leGVjdXRl
V2hlbkNvbXBpbGVkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl9yZXNjYWxlUG9z
dFByb2Nlc3Mub25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgICAgICBl
ZmZlY3QuX2JpbmRUZXh0dXJlKCJ0ZXh0dXJlU2FtcGxlciIsIHNvdXJjZSk7CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgdmFyIGhvc3RpbmdTY2VuZSA9IHNjZW5lOworICAgICAgICAgICAg
aWYgKCFob3N0aW5nU2NlbmUpIHsKKyAgICAgICAgICAgICAgICBob3N0aW5nU2NlbmUgPSBfdGhp
cy5zY2VuZXNbX3RoaXMuc2NlbmVzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaG9zdGluZ1NjZW5lLnBvc3RQcm9jZXNzTWFuYWdlci5kaXJlY3RSZW5kZXIoW190aGlz
Ll9yZXNjYWxlUG9zdFByb2Nlc3NdLCBydHQsIHRydWUpOworICAgICAgICAgICAgX3RoaXMuX2Jp
bmRUZXh0dXJlRGlyZWN0bHkoX3RoaXMuX2dsLlRFWFRVUkVfMkQsIGRlc3RpbmF0aW9uLCB0cnVl
KTsKKyAgICAgICAgICAgIF90aGlzLl9nbC5jb3B5VGV4SW1hZ2UyRChfdGhpcy5fZ2wuVEVYVFVS
RV8yRCwgMCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIGRlc3RpbmF0aW9uLndpZHRoLCBkZXN0aW5h
dGlvbi5oZWlnaHQsIDApOworICAgICAgICAgICAgX3RoaXMudW5CaW5kRnJhbWVidWZmZXIocnR0
KTsKKyAgICAgICAgICAgIF90aGlzLl9yZWxlYXNlVGV4dHVyZShydHQpOworICAgICAgICAgICAg
aWYgKG9uQ29tcGxldGUpIHsKKyAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHJh
dyB0ZXh0dXJlCisgICAgICogQHBhcmFtIGRhdGEgZGVmaW5lcyB0aGUgZGF0YSB0byBzdG9yZSBp
biB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSB3aWR0aCBkZWZpbmVzIHRoZSB3aWR0aCBvZiB0
aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgaGVpZ2h0IG9mIHRo
ZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGZvcm1hdCBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgdGhl
IGRhdGEKKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVNaXBNYXBzIGRlZmluZXMgaWYgdGhlIGVuZ2lu
ZSBzaG91bGQgZ2VuZXJhdGUgdGhlIG1pcCBsZXZlbHMKKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBk
ZWZpbmVzIGlmIGRhdGEgbXVzdCBiZSBzdG9yZWQgd2l0aCBZIGF4aXMgaW52ZXJ0ZWQKKyAgICAg
KiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZXMgdGhlIHJlcXVpcmVkIHNhbXBsaW5nIG1vZGUg
KFRleHR1cmUuTkVBUkVTVF9TQU1QTElOR01PREUgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0g
Y29tcHJlc3Npb24gZGVmaW5lcyB0aGUgY29tcHJlc3Npb24gdXNlZCAobnVsbCBieSBkZWZhdWx0
KQorICAgICAqIEBwYXJhbSB0eXBlIGRlZmluZXMgdGhlIHR5cGUgZm8gdGhlIGRhdGEgKEVuZ2lu
ZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQgYnkgZGVmYXVsdCkKKyAgICAgKiBAcmV0dXJucyB0
aGUgcmF3IHRleHR1cmUgaW5zaWRlIGFuIEludGVybmFsVGV4dHVyZQorICAgICAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUuY3JlYXRlUmF3VGV4dHVyZSA9IGZ1bmN0aW9uIChkYXRhLCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlLCBj
b21wcmVzc2lvbiwgdHlwZSkgeworICAgICAgICBpZiAoY29tcHJlc3Npb24gPT09IHZvaWQgMCkg
eyBjb21wcmVzc2lvbiA9IG51bGw7IH0KKyAgICAgICAgaWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0
eXBlID0gRW5naW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICB0aHJvdyBf
TWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siX0RldlRvb2xzIl0u
V2FybkltcG9ydCgiRW5naW5lLlJhd1RleHR1cmUiKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVu
ICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fdW5wYWNrRmxpcFkgPSBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgaWYgKHRoaXMuX3VucGFja0ZsaXBZQ2FjaGVkICE9PSB2YWx1ZSkgeworICAg
ICAgICAgICAgdGhpcy5fZ2wucGl4ZWxTdG9yZWkodGhpcy5fZ2wuVU5QQUNLX0ZMSVBfWV9XRUJH
TCwgdmFsdWUgPyAxIDogMCk7CisgICAgICAgICAgICBpZiAodGhpcy5lbmFibGVVbnBhY2tGbGlw
WUNhY2hlZCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3VucGFja0ZsaXBZQ2FjaGVkID0gdmFs
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICov
CisgICAgRW5naW5lLnByb3RvdHlwZS5fZ2V0VW5wYWNrQWxpZ25lbWVudCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2dsLmdldFBhcmFtZXRlcih0aGlzLl9nbC5VTlBBQ0tf
QUxJR05NRU5UKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBkeW5hbWljIHRl
eHR1cmUKKyAgICAgKiBAcGFyYW0gd2lkdGggZGVmaW5lcyB0aGUgd2lkdGggb2YgdGhlIHRleHR1
cmUKKyAgICAgKiBAcGFyYW0gaGVpZ2h0IGRlZmluZXMgdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVy
ZQorICAgICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMgZGVmaW5lcyBpZiB0aGUgZW5naW5lIHNo
b3VsZCBnZW5lcmF0ZSB0aGUgbWlwIGxldmVscworICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUg
ZGVmaW5lcyB0aGUgcmVxdWlyZWQgc2FtcGxpbmcgbW9kZSAoVGV4dHVyZS5ORUFSRVNUX1NBTVBM
SU5HTU9ERSBieSBkZWZhdWx0KQorICAgICAqIEByZXR1cm5zIHRoZSBkeW5hbWljIHRleHR1cmUg
aW5zaWRlIGFuIEludGVybmFsVGV4dHVyZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUu
Y3JlYXRlRHluYW1pY1RleHR1cmUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgZ2VuZXJhdGVN
aXBNYXBzLCBzYW1wbGluZ01vZGUpIHsKKyAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgX01hdGVy
aWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siSW50ZXJuYWxUZXh0dXJlIl0odGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFU
QVNPVVJDRV9EWU5BTUlDKTsKKyAgICAgICAgdGV4dHVyZS5iYXNlV2lkdGggPSB3aWR0aDsKKyAg
ICAgICAgdGV4dHVyZS5iYXNlSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBpZiAoZ2VuZXJhdGVN
aXBNYXBzKSB7CisgICAgICAgICAgICB3aWR0aCA9IHRoaXMubmVlZFBPVFRleHR1cmVzID8gRW5n
aW5lLkdldEV4cG9uZW50T2ZUd28od2lkdGgsIHRoaXMuX2NhcHMubWF4VGV4dHVyZVNpemUpIDog
d2lkdGg7CisgICAgICAgICAgICBoZWlnaHQgPSB0aGlzLm5lZWRQT1RUZXh0dXJlcyA/IEVuZ2lu
ZS5HZXRFeHBvbmVudE9mVHdvKGhlaWdodCwgdGhpcy5fY2Fwcy5tYXhUZXh0dXJlU2l6ZSkgOiBo
ZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gIHRoaXMucmVzZXRUZXh0dXJlQ2FjaGUoKTsK
KyAgICAgICAgdGV4dHVyZS53aWR0aCA9IHdpZHRoOworICAgICAgICB0ZXh0dXJlLmhlaWdodCA9
IGhlaWdodDsKKyAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gZmFsc2U7CisgICAgICAgIHRleHR1
cmUuZ2VuZXJhdGVNaXBNYXBzID0gZ2VuZXJhdGVNaXBNYXBzOworICAgICAgICB0ZXh0dXJlLnNh
bXBsaW5nTW9kZSA9IHNhbXBsaW5nTW9kZTsKKyAgICAgICAgdGhpcy51cGRhdGVUZXh0dXJlU2Ft
cGxpbmdNb2RlKHNhbXBsaW5nTW9kZSwgdGV4dHVyZSk7CisgICAgICAgIHRoaXMuX2ludGVybmFs
VGV4dHVyZXNDYWNoZS5wdXNoKHRleHR1cmUpOworICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgc2FtcGxpbmcgbW9kZSBvZiBhIGdpdmVu
IHRleHR1cmUKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZXMgdGhlIHJlcXVpcmVk
IHNhbXBsaW5nIG1vZGUKKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBkZWZpbmVzIHRoZSB0ZXh0dXJl
IHRvIHVwZGF0ZQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUudXBkYXRlVGV4dHVyZVNh
bXBsaW5nTW9kZSA9IGZ1bmN0aW9uIChzYW1wbGluZ01vZGUsIHRleHR1cmUpIHsKKyAgICAgICAg
dmFyIGZpbHRlcnMgPSB0aGlzLl9nZXRTYW1wbGluZ1BhcmFtZXRlcnMoc2FtcGxpbmdNb2RlLCB0
ZXh0dXJlLmdlbmVyYXRlTWlwTWFwcyk7CisgICAgICAgIGlmICh0ZXh0dXJlLmlzQ3ViZSkgewor
ICAgICAgICAgICAgdGhpcy5fc2V0VGV4dHVyZVBhcmFtZXRlckludGVnZXIodGhpcy5fZ2wuVEVY
VFVSRV9DVUJFX01BUCwgdGhpcy5fZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXJzLm1hZywg
dGV4dHVyZSk7CisgICAgICAgICAgICB0aGlzLl9zZXRUZXh0dXJlUGFyYW1ldGVySW50ZWdlcih0
aGlzLl9nbC5URVhUVVJFX0NVQkVfTUFQLCB0aGlzLl9nbC5URVhUVVJFX01JTl9GSUxURVIsIGZp
bHRlcnMubWluKTsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5f
Z2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
dGV4dHVyZS5pczNEKSB7CisgICAgICAgICAgICB0aGlzLl9zZXRUZXh0dXJlUGFyYW1ldGVySW50
ZWdlcih0aGlzLl9nbC5URVhUVVJFXzNELCB0aGlzLl9nbC5URVhUVVJFX01BR19GSUxURVIsIGZp
bHRlcnMubWFnLCB0ZXh0dXJlKTsKKyAgICAgICAgICAgIHRoaXMuX3NldFRleHR1cmVQYXJhbWV0
ZXJJbnRlZ2VyKHRoaXMuX2dsLlRFWFRVUkVfM0QsIHRoaXMuX2dsLlRFWFRVUkVfTUlOX0ZJTFRF
UiwgZmlsdGVycy5taW4pOworICAgICAgICAgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseSh0
aGlzLl9nbC5URVhUVVJFXzNELCBudWxsKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHRoaXMuX3NldFRleHR1cmVQYXJhbWV0ZXJJbnRlZ2VyKHRoaXMuX2dsLlRFWFRV
UkVfMkQsIHRoaXMuX2dsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVycy5tYWcsIHRleHR1cmUp
OworICAgICAgICAgICAgdGhpcy5fc2V0VGV4dHVyZVBhcmFtZXRlckludGVnZXIodGhpcy5fZ2wu
VEVYVFVSRV8yRCwgdGhpcy5fZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXJzLm1pbik7Cisg
ICAgICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfMkQs
IG51bGwpOworICAgICAgICB9CisgICAgICAgIHRleHR1cmUuc2FtcGxpbmdNb2RlID0gc2FtcGxp
bmdNb2RlOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBjb250ZW50IG9mIGEg
ZHluYW1pYyB0ZXh0dXJlCisgICAgICogQHBhcmFtIHRleHR1cmUgZGVmaW5lcyB0aGUgdGV4dHVy
ZSB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gY2FudmFzIGRlZmluZXMgdGhlIGNhbnZhcyBjb250
YWluaW5nIHRoZSBzb3VyY2UKKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmVzIGlmIGRhdGEg
bXVzdCBiZSBzdG9yZWQgd2l0aCBZIGF4aXMgaW52ZXJ0ZWQKKyAgICAgKiBAcGFyYW0gcHJlbXVs
QWxwaGEgZGVmaW5lcyBpZiBhbHBoYSBpcyBzdG9yZWQgYXMgcHJlbXVsdGlwbGllZAorICAgICAq
IEBwYXJhbSBmb3JtYXQgZGVmaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhCisgICAgICogQHBh
cmFtIGZvcmNlQmluZFRleHR1cmUgaWYgdGhlIHRleHR1cmUgc2hvdWxkIGJlIGZvcmNlZCB0byBi
ZSBib3VuZCBlZy4gYWZ0ZXIgYSBncmFwaGljcyBjb250ZXh0IGxvc3MgKERlZmF1bHQ6IGZhbHNl
KQorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUudXBkYXRlRHluYW1pY1RleHR1cmUgPSBm
dW5jdGlvbiAodGV4dHVyZSwgY2FudmFzLCBpbnZlcnRZLCBwcmVtdWxBbHBoYSwgZm9ybWF0LCBm
b3JjZUJpbmRUZXh0dXJlKSB7CisgICAgICAgIGlmIChwcmVtdWxBbHBoYSA9PT0gdm9pZCAwKSB7
IHByZW11bEFscGhhID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGZvcmNlQmluZFRleHR1cmUgPT09
IHZvaWQgMCkgeyBmb3JjZUJpbmRUZXh0dXJlID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCF0ZXh0
dXJlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYmlu
ZFRleHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzJELCB0ZXh0dXJlLCB0cnVlLCBmb3Jj
ZUJpbmRUZXh0dXJlKTsKKyAgICAgICAgdGhpcy5fdW5wYWNrRmxpcFkoaW52ZXJ0WSk7CisgICAg
ICAgIGlmIChwcmVtdWxBbHBoYSkgeworICAgICAgICAgICAgdGhpcy5fZ2wucGl4ZWxTdG9yZWko
dGhpcy5fZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCAxKTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgaW50ZXJuYWxGb3JtYXQgPSBmb3JtYXQgPyB0aGlzLl9nZXRJbnRlcm5hbEZv
cm1hdChmb3JtYXQpIDogdGhpcy5fZ2wuUkdCQTsKKyAgICAgICAgdGhpcy5fZ2wudGV4SW1hZ2Uy
RCh0aGlzLl9nbC5URVhUVVJFXzJELCAwLCBpbnRlcm5hbEZvcm1hdCwgaW50ZXJuYWxGb3JtYXQs
IHRoaXMuX2dsLlVOU0lHTkVEX0JZVEUsIGNhbnZhcyk7CisgICAgICAgIGlmICh0ZXh0dXJlLmdl
bmVyYXRlTWlwTWFwcykgeworICAgICAgICAgICAgdGhpcy5fZ2wuZ2VuZXJhdGVNaXBtYXAodGhp
cy5fZ2wuVEVYVFVSRV8yRCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYmluZFRleHR1cmVE
aXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzJELCBudWxsKTsKKyAgICAgICAgaWYgKHByZW11bEFs
cGhhKSB7CisgICAgICAgICAgICB0aGlzLl9nbC5waXhlbFN0b3JlaSh0aGlzLl9nbC5VTlBBQ0tf
UFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIDApOworICAgICAgICB9CisgICAgICAgIHRleHR1cmUu
aXNSZWFkeSA9IHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgYSB2aWRlbyB0
ZXh0dXJlCisgICAgICogQHBhcmFtIHRleHR1cmUgZGVmaW5lcyB0aGUgdGV4dHVyZSB0byB1cGRh
dGUKKyAgICAgKiBAcGFyYW0gdmlkZW8gZGVmaW5lcyB0aGUgdmlkZW8gZWxlbWVudCB0byB1c2UK
KyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmVzIGlmIGRhdGEgbXVzdCBiZSBzdG9yZWQgd2l0
aCBZIGF4aXMgaW52ZXJ0ZWQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnVwZGF0ZVZp
ZGVvVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCB2aWRlbywgaW52ZXJ0WSkgeworICAgICAg
ICBpZiAoIXRleHR1cmUgfHwgdGV4dHVyZS5faXNEaXNhYmxlZCkgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHZhciB3YXNQcmV2aW91c2x5Qm91bmQgPSB0aGlzLl9i
aW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRleHR1cmUsIHRydWUpOwor
ICAgICAgICB0aGlzLl91bnBhY2tGbGlwWSghaW52ZXJ0WSk7IC8vIFZpZGVvIGFyZSB1cHNpZGUg
ZG93biBieSBkZWZhdWx0CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBUZXN0aW5nIHZp
ZGVvIHRleHR1cmUgc3VwcG9ydAorICAgICAgICAgICAgaWYgKHRoaXMuX3ZpZGVvVGV4dHVyZVN1
cHBvcnRlZCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZ2wudGV4SW1h
Z2UyRCh0aGlzLl9nbC5URVhUVVJFXzJELCAwLCB0aGlzLl9nbC5SR0JBLCB0aGlzLl9nbC5SR0JB
LCB0aGlzLl9nbC5VTlNJR05FRF9CWVRFLCB2aWRlbyk7CisgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX2dsLmdldEVycm9yKCkgIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlk
ZW9UZXh0dXJlU3VwcG9ydGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl92aWRlb1RleHR1cmVTdXBw
b3J0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIC8vIENvcHkgdmlkZW8gdGhyb3VnaCB0aGUgY3VycmVudCB3b3JraW5nIGNhbnZhcyBpZiB2
aWRlbyB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgICAgIGlmICghdGhpcy5fdmlk
ZW9UZXh0dXJlU3VwcG9ydGVkKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLl93b3Jr
aW5nQ2FudmFzKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuX3dvcmtpbmdDYW52YXMg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGNvbnRleHQgPSB0ZXh0dXJlLl93b3JraW5nQ2FudmFzLmdldENvbnRleHQoIjJkIik7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZ2V0IDJkIGNvbnRleHQiKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLl93b3JraW5nQ29udGV4
dCA9IGNvbnRleHQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuX3dvcmtpbmdDYW52YXMu
d2lkdGggPSB0ZXh0dXJlLndpZHRoOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLl93b3Jr
aW5nQ2FudmFzLmhlaWdodCA9IHRleHR1cmUuaGVpZ2h0OworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB0ZXh0dXJlLl93b3JraW5nQ29udGV4dC5kcmF3SW1hZ2UodmlkZW8sIDAs
IDAsIHZpZGVvLnZpZGVvV2lkdGgsIHZpZGVvLnZpZGVvSGVpZ2h0LCAwLCAwLCB0ZXh0dXJlLndp
ZHRoLCB0ZXh0dXJlLmhlaWdodCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZ2wudGV4SW1hZ2Uy
RCh0aGlzLl9nbC5URVhUVVJFXzJELCAwLCB0aGlzLl9nbC5SR0JBLCB0aGlzLl9nbC5SR0JBLCB0
aGlzLl9nbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLl93b3JraW5nQ2FudmFzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX2dsLnRleElt
YWdlMkQodGhpcy5fZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5fZ2wuUkdCQSwgdGhpcy5fZ2wuUkdC
QSwgdGhpcy5fZ2wuVU5TSUdORURfQllURSwgdmlkZW8pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fZ2wuZ2VuZXJhdGVNaXBtYXAodGhpcy5fZ2wuVEVYVFVSRV8yRCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoIXdhc1ByZXZpb3VzbHlCb3VuZCkgeworICAgICAgICAgICAgICAg
IHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVYVFVSRV8yRCwgbnVsbCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAgICB0aGlzLnJlc2V0VGV4dHVyZUNhY2hlKCk7
CisgICAgICAgICAgICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IGNhdGNoIChleCkgeworICAgICAgICAgICAgLy8gU29tZXRoaW5nIHVuZXhwZWN0ZWQKKyAgICAg
ICAgICAgIC8vIExldCdzIGRpc2FibGUgdGhlIHRleHR1cmUKKyAgICAgICAgICAgIHRleHR1cmUu
X2lzRGlzYWJsZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBV
cGRhdGVzIGEgZGVwdGggdGV4dHVyZSBDb21wYXJpc29uIE1vZGUgYW5kIEZ1bmN0aW9uLgorICAg
ICAqIElmIHRoZSBjb21wYXJpc29uIEZ1bmN0aW9uIGlzIGVxdWFsIHRvIDAsIHRoZSBtb2RlIHdp
bGwgYmUgc2V0IHRvIG5vbmUuCisgICAgICogT3RoZXJ3aXNlLCB0aGlzIG9ubHkgd29ya3MgaW4g
d2ViZ2wgMiBhbmQgcmVxdWlyZXMgYSBzaGFkb3cgc2FtcGxlciBpbiB0aGUgc2hhZGVyLgorICAg
ICAqIEBwYXJhbSB0ZXh0dXJlIFRoZSB0ZXh0dXJlIHRvIHNldCB0aGUgY29tcGFyaXNvbiBmdW5j
dGlvbiBmb3IKKyAgICAgKiBAcGFyYW0gY29tcGFyaXNvbkZ1bmN0aW9uIFRoZSBjb21wYXJpc29u
IGZ1bmN0aW9uIHRvIHNldCwgMCBpZiBubyBjb21wYXJpc29uIHJlcXVpcmVkCisgICAgICovCisg
ICAgRW5naW5lLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlQ29tcGFyaXNvbkZ1bmN0aW9uID0gZnVu
Y3Rpb24gKHRleHR1cmUsIGNvbXBhcmlzb25GdW5jdGlvbikgeworICAgICAgICBpZiAodGhpcy53
ZWJHTFZlcnNpb24gPT09IDEpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJMb2dnZXIiXS5FcnJvcigiV2ViR0wgMSBkb2VzIG5vdCBzdXBw
b3J0IHRleHR1cmUgY29tcGFyaXNvbi4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAgICAgICAgaWYgKHRleHR1cmUuaXNDdWJl
KSB7CisgICAgICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRV
UkVfQ1VCRV9NQVAsIHRleHR1cmUsIHRydWUpOworICAgICAgICAgICAgaWYgKGNvbXBhcmlzb25G
dW5jdGlvbiA9PT0gMCkgeworICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVY
VFVSRV9DVUJFX01BUCwgZ2wuVEVYVFVSRV9DT01QQVJFX0ZVTkMsIEVuZ2luZS5MRVFVQUwpOwor
ICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wu
VEVYVFVSRV9DT01QQVJFX01PREUsIGdsLk5PTkUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFX0NV
QkVfTUFQLCBnbC5URVhUVVJFX0NPTVBBUkVfRlVOQywgY29tcGFyaXNvbkZ1bmN0aW9uKTsKKyAg
ICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfQ1VCRV9NQVAsIGdsLlRF
WFRVUkVfQ09NUEFSRV9NT0RFLCBnbC5DT01QQVJFX1JFRl9UT19URVhUVVJFKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVY
VFVSRV9DVUJFX01BUCwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRleHR1
cmUsIHRydWUpOworICAgICAgICAgICAgaWYgKGNvbXBhcmlzb25GdW5jdGlvbiA9PT0gMCkgewor
ICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVS
RV9DT01QQVJFX0ZVTkMsIEVuZ2luZS5MRVFVQUwpOworICAgICAgICAgICAgICAgIGdsLnRleFBh
cmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9DT01QQVJFX01PREUsIGdsLk5PTkUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZ2wu
dGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX0NPTVBBUkVfRlVOQywgY29t
cGFyaXNvbkZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRF
WFRVUkVfMkQsIGdsLlRFWFRVUkVfQ09NUEFSRV9NT0RFLCBnbC5DT01QQVJFX1JFRl9UT19URVhU
VVJFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0
bHkodGhpcy5fZ2wuVEVYVFVSRV8yRCwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgdGV4dHVy
ZS5fY29tcGFyaXNvbkZ1bmN0aW9uID0gY29tcGFyaXNvbkZ1bmN0aW9uOworICAgIH07CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9zZXR1cERlcHRoU3RlbmNpbFRl
eHR1cmUgPSBmdW5jdGlvbiAoaW50ZXJuYWxUZXh0dXJlLCBzaXplLCBnZW5lcmF0ZVN0ZW5jaWws
IGJpbGluZWFyRmlsdGVyaW5nLCBjb21wYXJpc29uRnVuY3Rpb24pIHsKKyAgICAgICAgdmFyIHdp
ZHRoID0gc2l6ZS53aWR0aCB8fCBzaXplOworICAgICAgICB2YXIgaGVpZ2h0ID0gc2l6ZS5oZWln
aHQgfHwgc2l6ZTsKKyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLmJhc2VXaWR0aCA9IHdpZHRoOwor
ICAgICAgICBpbnRlcm5hbFRleHR1cmUuYmFzZUhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgaW50
ZXJuYWxUZXh0dXJlLndpZHRoID0gd2lkdGg7CisgICAgICAgIGludGVybmFsVGV4dHVyZS5oZWln
aHQgPSBoZWlnaHQ7CisgICAgICAgIGludGVybmFsVGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAg
ICAgICAgaW50ZXJuYWxUZXh0dXJlLnNhbXBsZXMgPSAxOworICAgICAgICBpbnRlcm5hbFRleHR1
cmUuZ2VuZXJhdGVNaXBNYXBzID0gZmFsc2U7CisgICAgICAgIGludGVybmFsVGV4dHVyZS5fZ2Vu
ZXJhdGVEZXB0aEJ1ZmZlciA9IHRydWU7CisgICAgICAgIGludGVybmFsVGV4dHVyZS5fZ2VuZXJh
dGVTdGVuY2lsQnVmZmVyID0gZ2VuZXJhdGVTdGVuY2lsOworICAgICAgICBpbnRlcm5hbFRleHR1
cmUuc2FtcGxpbmdNb2RlID0gYmlsaW5lYXJGaWx0ZXJpbmcgPyBFbmdpbmUuVEVYVFVSRV9CSUxJ
TkVBUl9TQU1QTElOR01PREUgOiBFbmdpbmUuVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5HTU9ERTsK
KyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLnR5cGUgPSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdO
RURfSU5UOworICAgICAgICBpbnRlcm5hbFRleHR1cmUuX2NvbXBhcmlzb25GdW5jdGlvbiA9IGNv
bXBhcmlzb25GdW5jdGlvbjsKKyAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIHZh
ciB0YXJnZXQgPSBpbnRlcm5hbFRleHR1cmUuaXNDdWJlID8gZ2wuVEVYVFVSRV9DVUJFX01BUCA6
IGdsLlRFWFRVUkVfMkQ7CisgICAgICAgIHZhciBzYW1wbGluZ1BhcmFtZXRlcnMgPSB0aGlzLl9n
ZXRTYW1wbGluZ1BhcmFtZXRlcnMoaW50ZXJuYWxUZXh0dXJlLnNhbXBsaW5nTW9kZSwgZmFsc2Up
OworICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVS
LCBzYW1wbGluZ1BhcmFtZXRlcnMubWFnKTsKKyAgICAgICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJn
ZXQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgc2FtcGxpbmdQYXJhbWV0ZXJzLm1pbik7CisgICAg
ICAgIGdsLnRleFBhcmFtZXRlcmkodGFyZ2V0LCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBf
VE9fRURHRSk7CisgICAgICAgIGdsLnRleFBhcmFtZXRlcmkodGFyZ2V0LCBnbC5URVhUVVJFX1dS
QVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIGlmIChjb21wYXJpc29uRnVuY3Rpb24g
PT09IDApIHsKKyAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkodGFyZ2V0LCBnbC5URVhUVVJF
X0NPTVBBUkVfRlVOQywgRW5naW5lLkxFUVVBTCk7CisgICAgICAgICAgICBnbC50ZXhQYXJhbWV0
ZXJpKHRhcmdldCwgZ2wuVEVYVFVSRV9DT01QQVJFX01PREUsIGdsLk5PTkUpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIGds
LlRFWFRVUkVfQ09NUEFSRV9GVU5DLCBjb21wYXJpc29uRnVuY3Rpb24pOworICAgICAgICAgICAg
Z2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIGdsLlRFWFRVUkVfQ09NUEFSRV9NT0RFLCBnbC5DT01Q
QVJFX1JFRl9UT19URVhUVVJFKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZS4KKyAgICAgKiBUaGlzIGlzIG9ubHkgYXZh
aWxhYmxlIGluIFdlYkdMIDIgb3Igd2l0aCB0aGUgZGVwdGggdGV4dHVyZSBleHRlbnNpb24gYXZh
aWxhYmxlLgorICAgICAqIEBwYXJhbSBzaXplIFRoZSBzaXplIG9mIGZhY2UgZWRnZSBpbiB0aGUg
dGV4dHVyZS4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBkZWZpbmluZyB0aGUg
dGV4dHVyZS4KKyAgICAgKiBAcmV0dXJucyBUaGUgdGV4dHVyZQorICAgICAqLworICAgIEVuZ2lu
ZS5wcm90b3R5cGUuY3JlYXRlRGVwdGhTdGVuY2lsVGV4dHVyZSA9IGZ1bmN0aW9uIChzaXplLCBv
cHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25zLmlzQ3ViZSkgeworICAgICAgICAgICAgdmFy
IHdpZHRoID0gc2l6ZS53aWR0aCB8fCBzaXplOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Ny
ZWF0ZURlcHRoU3RlbmNpbEN1YmVUZXh0dXJlKHdpZHRoLCBvcHRpb25zKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVEZXB0aFN0ZW5j
aWxUZXh0dXJlKHNpemUsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgZGVwdGggc3RlbmNpbCB0ZXh0dXJlLgorICAgICAqIFRoaXMgaXMgb25s
eSBhdmFpbGFibGUgaW4gV2ViR0wgMiBvciB3aXRoIHRoZSBkZXB0aCB0ZXh0dXJlIGV4dGVuc2lv
biBhdmFpbGFibGUuCisgICAgICogQHBhcmFtIHNpemUgVGhlIHNpemUgb2YgZmFjZSBlZGdlIGlu
IHRoZSB0ZXh0dXJlLgorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGRlZmluaW5n
IHRoZSB0ZXh0dXJlLgorICAgICAqIEByZXR1cm5zIFRoZSB0ZXh0dXJlCisgICAgICovCisgICAg
RW5naW5lLnByb3RvdHlwZS5fY3JlYXRlRGVwdGhTdGVuY2lsVGV4dHVyZSA9IGZ1bmN0aW9uIChz
aXplLCBvcHRpb25zKSB7CisgICAgICAgIHZhciBpbnRlcm5hbFRleHR1cmUgPSBuZXcgX01hdGVy
aWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siSW50ZXJuYWxUZXh0dXJlIl0odGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFU
QVNPVVJDRV9ERVBUSFRFWFRVUkUpOworICAgICAgICBpZiAoIXRoaXMuX2NhcHMuZGVwdGhUZXh0
dXJlRXh0ZW5zaW9uKSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siTG9nZ2VyIl0uRXJyb3IoIkRlcHRoIHRleHR1cmUgaXMgbm90IHN1cHBv
cnRlZCBieSB5b3VyIGJyb3dzZXIgb3IgaGFyZHdhcmUuIik7CisgICAgICAgICAgICByZXR1cm4g
aW50ZXJuYWxUZXh0dXJlOworICAgICAgICB9CisgICAgICAgIHZhciBpbnRlcm5hbE9wdGlvbnMg
PSB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fzc2lnbiJdKHsgYmlsaW5l
YXJGaWx0ZXJpbmc6IGZhbHNlLCBjb21wYXJpc29uRnVuY3Rpb246IDAsIGdlbmVyYXRlU3RlbmNp
bDogZmFsc2UgfSwgb3B0aW9ucyk7CisgICAgICAgIHZhciBnbCA9IHRoaXMuX2dsOworICAgICAg
ICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIGludGVybmFsVGV4dHVy
ZSwgdHJ1ZSk7CisgICAgICAgIHRoaXMuX3NldHVwRGVwdGhTdGVuY2lsVGV4dHVyZShpbnRlcm5h
bFRleHR1cmUsIHNpemUsIGludGVybmFsT3B0aW9ucy5nZW5lcmF0ZVN0ZW5jaWwsIGludGVybmFs
T3B0aW9ucy5iaWxpbmVhckZpbHRlcmluZywgaW50ZXJuYWxPcHRpb25zLmNvbXBhcmlzb25GdW5j
dGlvbik7CisgICAgICAgIGlmICh0aGlzLndlYkdMVmVyc2lvbiA+IDEpIHsKKyAgICAgICAgICAg
IGlmIChpbnRlcm5hbE9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsKSB7CisgICAgICAgICAgICAgICAg
Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5ERVBUSDI0X1NURU5DSUw4LCBpbnRl
cm5hbFRleHR1cmUud2lkdGgsIGludGVybmFsVGV4dHVyZS5oZWlnaHQsIDAsIGdsLkRFUFRIX1NU
RU5DSUwsIGdsLlVOU0lHTkVEX0lOVF8yNF84LCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8y
RCwgMCwgZ2wuREVQVEhfQ09NUE9ORU5UMjQsIGludGVybmFsVGV4dHVyZS53aWR0aCwgaW50ZXJu
YWxUZXh0dXJlLmhlaWdodCwgMCwgZ2wuREVQVEhfQ09NUE9ORU5ULCBnbC5VTlNJR05FRF9JTlQs
IG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgaWYgKGludGVybmFsT3B0aW9ucy5nZW5lcmF0ZVN0ZW5jaWwpIHsKKyAgICAgICAgICAg
ICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLkRFUFRIX1NURU5DSUwsIGlu
dGVybmFsVGV4dHVyZS53aWR0aCwgaW50ZXJuYWxUZXh0dXJlLmhlaWdodCwgMCwgZ2wuREVQVEhf
U1RFTkNJTCwgZ2wuVU5TSUdORURfSU5UXzI0XzgsIG51bGwpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJF
XzJELCAwLCBnbC5ERVBUSF9DT01QT05FTlQsIGludGVybmFsVGV4dHVyZS53aWR0aCwgaW50ZXJu
YWxUZXh0dXJlLmhlaWdodCwgMCwgZ2wuREVQVEhfQ09NUE9ORU5ULCBnbC5VTlNJR05FRF9JTlQs
IG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2JpbmRUZXh0
dXJlRGlyZWN0bHkoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7CisgICAgICAgIHJldHVybiBpbnRlcm5h
bFRleHR1cmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBmcmFtZSBidWZmZXIg
RGVwdGggLyBTdGVuY2lsIGF0dGFjaGVtZW50IG9mIHRoZSByZW5kZXIgdGFyZ2V0IHRvIHRoZSBk
ZWZpbmVkIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZS4KKyAgICAgKiBAcGFyYW0gcmVuZGVyVGFyZ2V0
IFRoZSByZW5kZXIgdGFyZ2V0IHRvIHNldCB0aGUgZnJhbWUgYnVmZmVyIGZvcgorICAgICAqLwor
ICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0RnJhbWVCdWZmZXJEZXB0aFN0ZW5jaWxUZXh0dXJlID0g
ZnVuY3Rpb24gKHJlbmRlclRhcmdldCkgeworICAgICAgICAvLyBDcmVhdGUgdGhlIGZyYW1lYnVm
ZmVyCisgICAgICAgIHZhciBpbnRlcm5hbFRleHR1cmUgPSByZW5kZXJUYXJnZXQuZ2V0SW50ZXJu
YWxUZXh0dXJlKCk7CisgICAgICAgIGlmICghaW50ZXJuYWxUZXh0dXJlIHx8ICFpbnRlcm5hbFRl
eHR1cmUuX2ZyYW1lYnVmZmVyIHx8ICFyZW5kZXJUYXJnZXQuZGVwdGhTdGVuY2lsVGV4dHVyZSkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBnbCA9IHRoaXMu
X2dsOworICAgICAgICB2YXIgZGVwdGhTdGVuY2lsVGV4dHVyZSA9IHJlbmRlclRhcmdldC5kZXB0
aFN0ZW5jaWxUZXh0dXJlOworICAgICAgICB0aGlzLl9iaW5kVW5ib3VuZEZyYW1lYnVmZmVyKGlu
dGVybmFsVGV4dHVyZS5fZnJhbWVidWZmZXIpOworICAgICAgICBpZiAoZGVwdGhTdGVuY2lsVGV4
dHVyZS5pc0N1YmUpIHsKKyAgICAgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxUZXh0dXJlLl9nZW5l
cmF0ZVN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBnbC5mcmFtZWJ1ZmZlclRleHR1
cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIGRlcHRoU3RlbmNpbFRleHR1cmUuX3dlYkdMVGV4dHVy
ZSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfQVRUQUNI
TUVOVCwgZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCBkZXB0aFN0ZW5jaWxUZXh0dXJl
Ll93ZWJHTFRleHR1cmUsIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFRleHR1cmUuX2dlbmVyYXRlU3RlbmNp
bEJ1ZmZlcikgeworICAgICAgICAgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZS
QU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlRFWFRVUkVfMkQsIGRl
cHRoU3RlbmNpbFRleHR1cmUuX3dlYkdMVGV4dHVyZSwgMCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChn
bC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfQVRUQUNITUVOVCwgZ2wuVEVYVFVSRV8yRCwgZGVwdGhT
dGVuY2lsVGV4dHVyZS5fd2ViR0xUZXh0dXJlLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICB0aGlzLl9iaW5kVW5ib3VuZEZyYW1lYnVmZmVyKG51bGwpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyByZW5kZXIgdGFyZ2V0IHRleHR1cmUKKyAgICAg
KiBAcGFyYW0gc2l6ZSBkZWZpbmVzIHRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBh
cmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dHVy
ZQorICAgICAqIEByZXR1cm5zIGEgbmV3IHJlbmRlciB0YXJnZXQgdGV4dHVyZSBzdG9yZWQgaW4g
YW4gSW50ZXJuYWxUZXh0dXJlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5jcmVhdGVS
ZW5kZXJUYXJnZXRUZXh0dXJlID0gZnVuY3Rpb24gKHNpemUsIG9wdGlvbnMpIHsKKyAgICAgICAg
dmFyIGZ1bGxPcHRpb25zID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0Q3Jl
YXRpb25PcHRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJSZW5kZXJUYXJnZXRD
cmVhdGlvbk9wdGlvbnMiXSgpOworICAgICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYm
IHR5cGVvZiBvcHRpb25zID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgZnVsbE9wdGlvbnMu
Z2VuZXJhdGVNaXBNYXBzID0gb3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHM7CisgICAgICAgICAgICBm
dWxsT3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyID0gb3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVm
ZmVyID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyOwor
ICAgICAgICAgICAgZnVsbE9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVmZmVyID0gZnVsbE9wdGlv
bnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlciAmJiBvcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlcjsK
KyAgICAgICAgICAgIGZ1bGxPcHRpb25zLnR5cGUgPSBvcHRpb25zLnR5cGUgPT09IHVuZGVmaW5l
ZCA/IEVuZ2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQgOiBvcHRpb25zLnR5cGU7CisgICAg
ICAgICAgICBmdWxsT3B0aW9ucy5zYW1wbGluZ01vZGUgPSBvcHRpb25zLnNhbXBsaW5nTW9kZSA9
PT0gdW5kZWZpbmVkID8gRW5naW5lLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERSA6IG9w
dGlvbnMuc2FtcGxpbmdNb2RlOworICAgICAgICAgICAgZnVsbE9wdGlvbnMuZm9ybWF0ID0gb3B0
aW9ucy5mb3JtYXQgPT09IHVuZGVmaW5lZCA/IEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQkEgOiBv
cHRpb25zLmZvcm1hdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZ1
bGxPcHRpb25zLmdlbmVyYXRlTWlwTWFwcyA9IG9wdGlvbnM7CisgICAgICAgICAgICBmdWxsT3B0
aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyID0gdHJ1ZTsKKyAgICAgICAgICAgIGZ1bGxPcHRpb25z
LmdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA9IGZhbHNlOworICAgICAgICAgICAgZnVsbE9wdGlvbnMu
dHlwZSA9IEVuZ2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7CisgICAgICAgICAgICBmdWxs
T3B0aW9ucy5zYW1wbGluZ01vZGUgPSBFbmdpbmUuVEVYVFVSRV9UUklMSU5FQVJfU0FNUExJTkdN
T0RFOworICAgICAgICAgICAgZnVsbE9wdGlvbnMuZm9ybWF0ID0gRW5naW5lLlRFWFRVUkVGT1JN
QVRfUkdCQTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVsbE9wdGlvbnMudHlwZSA9PT0gRW5n
aW5lLlRFWFRVUkVUWVBFX0ZMT0FUICYmICF0aGlzLl9jYXBzLnRleHR1cmVGbG9hdExpbmVhckZp
bHRlcmluZykgeworICAgICAgICAgICAgLy8gaWYgZmxvYXRpbmcgcG9pbnQgbGluZWFyIChnbC5G
TE9BVCkgdGhlbiBmb3JjZSB0byBORUFSRVNUX1NBTVBMSU5HTU9ERQorICAgICAgICAgICAgZnVs
bE9wdGlvbnMuc2FtcGxpbmdNb2RlID0gRW5naW5lLlRFWFRVUkVfTkVBUkVTVF9TQU1QTElOR01P
REU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZnVsbE9wdGlvbnMudHlwZSA9PT0gRW5n
aW5lLlRFWFRVUkVUWVBFX0hBTEZfRkxPQVQgJiYgIXRoaXMuX2NhcHMudGV4dHVyZUhhbGZGbG9h
dExpbmVhckZpbHRlcmluZykgeworICAgICAgICAgICAgLy8gaWYgZmxvYXRpbmcgcG9pbnQgbGlu
ZWFyIChIQUxGX0ZMT0FUKSB0aGVuIGZvcmNlIHRvIE5FQVJFU1RfU0FNUExJTkdNT0RFCisgICAg
ICAgICAgICBmdWxsT3B0aW9ucy5zYW1wbGluZ01vZGUgPSBFbmdpbmUuVEVYVFVSRV9ORUFSRVNU
X1NBTVBMSU5HTU9ERTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAg
ICAgICAgdmFyIHRleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW50ZXJuYWxUZXh0dXJlIl0odGhpcywg
X01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9SRU5ERVJUQVJHRVQpOworICAg
ICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIHRleHR1cmUsIHRy
dWUpOworICAgICAgICB2YXIgd2lkdGggPSBzaXplLndpZHRoIHx8IHNpemU7CisgICAgICAgIHZh
ciBoZWlnaHQgPSBzaXplLmhlaWdodCB8fCBzaXplOworICAgICAgICB2YXIgZmlsdGVycyA9IHRo
aXMuX2dldFNhbXBsaW5nUGFyYW1ldGVycyhmdWxsT3B0aW9ucy5zYW1wbGluZ01vZGUsIGZ1bGxP
cHRpb25zLmdlbmVyYXRlTWlwTWFwcyA/IHRydWUgOiBmYWxzZSk7CisgICAgICAgIGlmIChmdWxs
T3B0aW9ucy50eXBlID09PSBFbmdpbmUuVEVYVFVSRVRZUEVfRkxPQVQgJiYgIXRoaXMuX2NhcHMu
dGV4dHVyZUZsb2F0KSB7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy50eXBlID0gRW5naW5lLlRF
WFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJMb2dnZXIiXS5XYXJuKCJGbG9hdCB0ZXh0dXJlcyBhcmUg
bm90IHN1cHBvcnRlZC4gUmVuZGVyIHRhcmdldCBmb3JjZWQgdG8gVEVYVFVSRVRZUEVfVU5TSUdO
RURfQllURSB0eXBlIik7CisgICAgICAgIH0KKyAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5U
RVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGZpbHRlcnMubWFnKTsKKyAgICAgICAg
Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGZp
bHRlcnMubWluKTsKKyAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5U
RVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIGdsLnRleFBhcmFtZXRl
cmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpOwor
ICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuX2dldFJHQkFCdWZm
ZXJJbnRlcm5hbFNpemVkRm9ybWF0KGZ1bGxPcHRpb25zLnR5cGUsIGZ1bGxPcHRpb25zLmZvcm1h
dCksIHdpZHRoLCBoZWlnaHQsIDAsIHRoaXMuX2dldEludGVybmFsRm9ybWF0KGZ1bGxPcHRpb25z
LmZvcm1hdCksIHRoaXMuX2dldFdlYkdMVGV4dHVyZVR5cGUoZnVsbE9wdGlvbnMudHlwZSksIG51
bGwpOworICAgICAgICAvLyBDcmVhdGUgdGhlIGZyYW1lYnVmZmVyCisgICAgICAgIHZhciBjdXJy
ZW50RnJhbWVCdWZmZXIgPSB0aGlzLl9jdXJyZW50RnJhbWVidWZmZXI7CisgICAgICAgIHZhciBm
cmFtZWJ1ZmZlciA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgICAgIHRoaXMuX2JpbmRV
bmJvdW5kRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAgICAgICBnbC5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVf
MkQsIHRleHR1cmUuX3dlYkdMVGV4dHVyZSwgMCk7CisgICAgICAgIHRleHR1cmUuX2RlcHRoU3Rl
bmNpbEJ1ZmZlciA9IHRoaXMuX3NldHVwRnJhbWVidWZmZXJEZXB0aEF0dGFjaG1lbnRzKGZ1bGxP
cHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA/IHRydWUgOiBmYWxzZSwgZnVsbE9wdGlvbnMu
Z2VuZXJhdGVEZXB0aEJ1ZmZlciwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGlmIChmdWxsT3B0
aW9ucy5nZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLmdlbmVyYXRlTWlw
bWFwKHRoaXMuX2dsLlRFWFRVUkVfMkQpOworICAgICAgICB9CisgICAgICAgIC8vIFVuYmluZAor
ICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIG51bGwpOwor
ICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgbnVsbCk7CisgICAg
ICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVidWZmZXIoY3VycmVudEZyYW1lQnVmZmVyKTsKKyAg
ICAgICAgdGV4dHVyZS5fZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKKyAgICAgICAgdGV4dHVy
ZS5iYXNlV2lkdGggPSB3aWR0aDsKKyAgICAgICAgdGV4dHVyZS5iYXNlSGVpZ2h0ID0gaGVpZ2h0
OworICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7CisgICAgICAgIHRleHR1cmUuaGVpZ2h0
ID0gaGVpZ2h0OworICAgICAgICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAgICAgICB0ZXh0
dXJlLnNhbXBsZXMgPSAxOworICAgICAgICB0ZXh0dXJlLmdlbmVyYXRlTWlwTWFwcyA9IGZ1bGxP
cHRpb25zLmdlbmVyYXRlTWlwTWFwcyA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgdGV4dHVyZS5z
YW1wbGluZ01vZGUgPSBmdWxsT3B0aW9ucy5zYW1wbGluZ01vZGU7CisgICAgICAgIHRleHR1cmUu
dHlwZSA9IGZ1bGxPcHRpb25zLnR5cGU7CisgICAgICAgIHRleHR1cmUuZm9ybWF0ID0gZnVsbE9w
dGlvbnMuZm9ybWF0OworICAgICAgICB0ZXh0dXJlLl9nZW5lcmF0ZURlcHRoQnVmZmVyID0gZnVs
bE9wdGlvbnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlcjsKKyAgICAgICAgdGV4dHVyZS5fZ2VuZXJhdGVT
dGVuY2lsQnVmZmVyID0gZnVsbE9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVmZmVyID8gdHJ1ZSA6
IGZhbHNlOworICAgICAgICAvLyB0aGlzLnJlc2V0VGV4dHVyZUNhY2hlKCk7CisgICAgICAgIHRo
aXMuX2ludGVybmFsVGV4dHVyZXNDYWNoZS5wdXNoKHRleHR1cmUpOworICAgICAgICByZXR1cm4g
dGV4dHVyZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlw
ZS5fc2V0dXBGcmFtZWJ1ZmZlckRlcHRoQXR0YWNobWVudHMgPSBmdW5jdGlvbiAoZ2VuZXJhdGVT
dGVuY2lsQnVmZmVyLCBnZW5lcmF0ZURlcHRoQnVmZmVyLCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVz
KSB7CisgICAgICAgIGlmIChzYW1wbGVzID09PSB2b2lkIDApIHsgc2FtcGxlcyA9IDE7IH0KKyAg
ICAgICAgdmFyIGRlcHRoU3RlbmNpbEJ1ZmZlciA9IG51bGw7CisgICAgICAgIHZhciBnbCA9IHRo
aXMuX2dsOworICAgICAgICAvLyBDcmVhdGUgdGhlIGRlcHRoL3N0ZW5jaWwgYnVmZmVyCisgICAg
ICAgIGlmIChnZW5lcmF0ZVN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgICAgIGRlcHRoU3RlbmNp
bEJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgICAgICAgICAgZ2wuYmluZFJl
bmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIGRlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAg
ICAgICBpZiAoc2FtcGxlcyA+IDEpIHsKKyAgICAgICAgICAgICAgICBnbC5yZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUoZ2wuUkVOREVSQlVGRkVSLCBzYW1wbGVzLCBnbC5ERVBUSDI0X1NU
RU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVS
LCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBU
SF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgZGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChnZW5lcmF0ZURlcHRoQnVmZmVyKSB7Cisg
ICAgICAgICAgICBkZXB0aFN0ZW5jaWxCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTsK
KyAgICAgICAgICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCBkZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgaWYgKHNhbXBsZXMgPiAxKSB7CisgICAgICAgICAg
ICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKGdsLlJFTkRFUkJVRkZFUiwg
c2FtcGxlcywgZ2wuREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZ2wucmVuZGVyYnVmZmVy
U3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIs
IGRlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlcHRoU3Rl
bmNpbEJ1ZmZlcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIHNhbXBsZSBj
b3VudCBvZiBhIHJlbmRlciB0YXJnZXQgdGV4dHVyZQorICAgICAqIEBzZWUgaHR0cDovL2RvYy5i
YWJ5bG9uanMuY29tL2ZlYXR1cmVzL3dlYmdsMiNtdWx0aXNhbXBsZS1yZW5kZXItdGFyZ2V0cwor
ICAgICAqIEBwYXJhbSB0ZXh0dXJlIGRlZmluZXMgdGhlIHRleHR1cmUgdG8gdXBkYXRlCisgICAg
ICogQHBhcmFtIHNhbXBsZXMgZGVmaW5lcyB0aGUgc2FtcGxlIGNvdW50IHRvIHNldAorICAgICAq
IEByZXR1cm5zIHRoZSBlZmZlY3RpdmUgc2FtcGxlIGNvdW50IChjb3VsZCBiZSAwIGlmIG11bHRp
c2FtcGxlIHJlbmRlciB0YXJnZXRzIGFyZSBub3Qgc3VwcG9ydGVkKQorICAgICAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUudXBkYXRlUmVuZGVyVGFyZ2V0VGV4dHVyZVNhbXBsZUNvdW50ID0gZnVu
Y3Rpb24gKHRleHR1cmUsIHNhbXBsZXMpIHsKKyAgICAgICAgaWYgKHRoaXMud2ViR0xWZXJzaW9u
IDwgMiB8fCAhdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRleHR1cmUuc2FtcGxlcyA9PT0gc2FtcGxlcykgeworICAgICAgICAgICAgcmV0
dXJuIHNhbXBsZXM7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAg
ICAgIHNhbXBsZXMgPSBNYXRoLm1pbihzYW1wbGVzLCB0aGlzLmdldENhcHMoKS5tYXhNU0FBU2Ft
cGxlcyk7CisgICAgICAgIC8vIERpc3Bvc2UgcHJldmlvdXMgcmVuZGVyIGJ1ZmZlcnMKKyAgICAg
ICAgaWYgKHRleHR1cmUuX2RlcHRoU3RlbmNpbEJ1ZmZlcikgeworICAgICAgICAgICAgZ2wuZGVs
ZXRlUmVuZGVyYnVmZmVyKHRleHR1cmUuX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAg
ICB0ZXh0dXJlLl9kZXB0aFN0ZW5jaWxCdWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAg
IGlmICh0ZXh0dXJlLl9NU0FBRnJhbWVidWZmZXIpIHsKKyAgICAgICAgICAgIGdsLmRlbGV0ZUZy
YW1lYnVmZmVyKHRleHR1cmUuX01TQUFGcmFtZWJ1ZmZlcik7CisgICAgICAgICAgICB0ZXh0dXJl
Ll9NU0FBRnJhbWVidWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJl
Ll9NU0FBUmVuZGVyQnVmZmVyKSB7CisgICAgICAgICAgICBnbC5kZWxldGVSZW5kZXJidWZmZXIo
dGV4dHVyZS5fTVNBQVJlbmRlckJ1ZmZlcik7CisgICAgICAgICAgICB0ZXh0dXJlLl9NU0FBUmVu
ZGVyQnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2FtcGxlcyA+IDEpIHsK
KyAgICAgICAgICAgIHZhciBmcmFtZWJ1ZmZlciA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7Cisg
ICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJVbmFibGUgdG8gY3JlYXRlIG11bHRpIHNhbXBsZWQgZnJhbWVidWZmZXIiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHR1cmUuX01TQUFGcmFtZWJ1ZmZlciA9IGZyYW1l
YnVmZmVyOworICAgICAgICAgICAgdGhpcy5fYmluZFVuYm91bmRGcmFtZWJ1ZmZlcih0ZXh0dXJl
Ll9NU0FBRnJhbWVidWZmZXIpOworICAgICAgICAgICAgdmFyIGNvbG9yUmVuZGVyYnVmZmVyID0g
Z2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgICAgICAgICBpZiAoIWNvbG9yUmVuZGVyYnVm
ZmVyKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gY3JlYXRl
IG11bHRpIHNhbXBsZWQgZnJhbWVidWZmZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCBjb2xvclJlbmRlcmJ1ZmZlcik7
CisgICAgICAgICAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoZ2wuUkVOREVS
QlVGRkVSLCBzYW1wbGVzLCB0aGlzLl9nZXRSR0JBTXVsdGlTYW1wbGVCdWZmZXJGb3JtYXQodGV4
dHVyZS50eXBlKSwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQpOworICAgICAgICAgICAg
Z2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFD
SE1FTlQwLCBnbC5SRU5ERVJCVUZGRVIsIGNvbG9yUmVuZGVyYnVmZmVyKTsKKyAgICAgICAgICAg
IHRleHR1cmUuX01TQUFSZW5kZXJCdWZmZXIgPSBjb2xvclJlbmRlcmJ1ZmZlcjsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVidWZm
ZXIodGV4dHVyZS5fZnJhbWVidWZmZXIpOworICAgICAgICB9CisgICAgICAgIHRleHR1cmUuc2Ft
cGxlcyA9IHNhbXBsZXM7CisgICAgICAgIHRleHR1cmUuX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IHRo
aXMuX3NldHVwRnJhbWVidWZmZXJEZXB0aEF0dGFjaG1lbnRzKHRleHR1cmUuX2dlbmVyYXRlU3Rl
bmNpbEJ1ZmZlciwgdGV4dHVyZS5fZ2VuZXJhdGVEZXB0aEJ1ZmZlciwgdGV4dHVyZS53aWR0aCwg
dGV4dHVyZS5oZWlnaHQsIHNhbXBsZXMpOworICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGds
LlJFTkRFUkJVRkZFUiwgbnVsbCk7CisgICAgICAgIHRoaXMuX2JpbmRVbmJvdW5kRnJhbWVidWZm
ZXIobnVsbCk7CisgICAgICAgIHJldHVybiBzYW1wbGVzOworICAgIH07CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl91cGxvYWRDb21wcmVzc2VkRGF0YVRvVGV4dHVy
ZURpcmVjdGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBkYXRhLCBmYWNlSW5kZXgsIGxvZCkgeworICAgICAgICBpZiAoZmFjZUluZGV4ID09PSB2
b2lkIDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAgICAgICBpZiAobG9kID09PSB2b2lkIDApIHsg
bG9kID0gMDsgfQorICAgICAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAgICAgICAgdmFyIHRhcmdl
dCA9IGdsLlRFWFRVUkVfMkQ7CisgICAgICAgIGlmICh0ZXh0dXJlLmlzQ3ViZSkgeworICAgICAg
ICAgICAgdGFyZ2V0ID0gZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dsLmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdl
dCwgbG9kLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZGF0YSk7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3VwbG9hZERhdGFUb1Rl
eHR1cmVEaXJlY3RseSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpbWFnZURhdGEsIGZhY2VJbmRleCwg
bG9kLCBiYWJ5bG9uSW50ZXJuYWxGb3JtYXQsIHVzZVRleHR1cmVXaWR0aEFuZEhlaWdodCkgewor
ICAgICAgICBpZiAoZmFjZUluZGV4ID09PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAg
ICAgICBpZiAobG9kID09PSB2b2lkIDApIHsgbG9kID0gMDsgfQorICAgICAgICBpZiAodXNlVGV4
dHVyZVdpZHRoQW5kSGVpZ2h0ID09PSB2b2lkIDApIHsgdXNlVGV4dHVyZVdpZHRoQW5kSGVpZ2h0
ID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIHZhciB0ZXh0
dXJlVHlwZSA9IHRoaXMuX2dldFdlYkdMVGV4dHVyZVR5cGUodGV4dHVyZS50eXBlKTsKKyAgICAg
ICAgdmFyIGZvcm1hdCA9IHRoaXMuX2dldEludGVybmFsRm9ybWF0KHRleHR1cmUuZm9ybWF0KTsK
KyAgICAgICAgdmFyIGludGVybmFsRm9ybWF0ID0gYmFieWxvbkludGVybmFsRm9ybWF0ID09PSB1
bmRlZmluZWQgPyB0aGlzLl9nZXRSR0JBQnVmZmVySW50ZXJuYWxTaXplZEZvcm1hdCh0ZXh0dXJl
LnR5cGUsIGZvcm1hdCkgOiB0aGlzLl9nZXRJbnRlcm5hbEZvcm1hdChiYWJ5bG9uSW50ZXJuYWxG
b3JtYXQpOworICAgICAgICB0aGlzLl91bnBhY2tGbGlwWSh0ZXh0dXJlLmludmVydFkpOworICAg
ICAgICB2YXIgdGFyZ2V0ID0gZ2wuVEVYVFVSRV8yRDsKKyAgICAgICAgaWYgKHRleHR1cmUuaXND
dWJlKSB7CisgICAgICAgICAgICB0YXJnZXQgPSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1ggKyBmYWNlSW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGxvZE1heFdpZHRoID0gTWF0
aC5yb3VuZChNYXRoLmxvZyh0ZXh0dXJlLndpZHRoKSAqIE1hdGguTE9HMkUpOworICAgICAgICB2
YXIgbG9kTWF4SGVpZ2h0ID0gTWF0aC5yb3VuZChNYXRoLmxvZyh0ZXh0dXJlLmhlaWdodCkgKiBN
YXRoLkxPRzJFKTsKKyAgICAgICAgdmFyIHdpZHRoID0gdXNlVGV4dHVyZVdpZHRoQW5kSGVpZ2h0
ID8gdGV4dHVyZS53aWR0aCA6IE1hdGgucG93KDIsIE1hdGgubWF4KGxvZE1heFdpZHRoIC0gbG9k
LCAwKSk7CisgICAgICAgIHZhciBoZWlnaHQgPSB1c2VUZXh0dXJlV2lkdGhBbmRIZWlnaHQgPyB0
ZXh0dXJlLmhlaWdodCA6IE1hdGgucG93KDIsIE1hdGgubWF4KGxvZE1heEhlaWdodCAtIGxvZCwg
MCkpOworICAgICAgICBnbC50ZXhJbWFnZTJEKHRhcmdldCwgbG9kLCBpbnRlcm5hbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0ZXh0dXJlVHlwZSwgaW1hZ2VEYXRhKTsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fdXBsb2FkQXJyYXlC
dWZmZXJWaWV3VG9UZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGltYWdlRGF0YSwgZmFjZUlu
ZGV4LCBsb2QpIHsKKyAgICAgICAgaWYgKGZhY2VJbmRleCA9PT0gdm9pZCAwKSB7IGZhY2VJbmRl
eCA9IDA7IH0KKyAgICAgICAgaWYgKGxvZCA9PT0gdm9pZCAwKSB7IGxvZCA9IDA7IH0KKyAgICAg
ICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIHZhciBiaW5kVGFyZ2V0ID0gdGV4dHVyZS5p
c0N1YmUgPyBnbC5URVhUVVJFX0NVQkVfTUFQIDogZ2wuVEVYVFVSRV8yRDsKKyAgICAgICAgdGhp
cy5fYmluZFRleHR1cmVEaXJlY3RseShiaW5kVGFyZ2V0LCB0ZXh0dXJlLCB0cnVlKTsKKyAgICAg
ICAgdGhpcy5fdXBsb2FkRGF0YVRvVGV4dHVyZURpcmVjdGx5KHRleHR1cmUsIGltYWdlRGF0YSwg
ZmFjZUluZGV4LCBsb2QpOworICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGJpbmRU
YXJnZXQsIG51bGwsIHRydWUpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBFbmdp
bmUucHJvdG90eXBlLl91cGxvYWRJbWFnZVRvVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBp
bWFnZSwgZmFjZUluZGV4LCBsb2QpIHsKKyAgICAgICAgaWYgKGZhY2VJbmRleCA9PT0gdm9pZCAw
KSB7IGZhY2VJbmRleCA9IDA7IH0KKyAgICAgICAgaWYgKGxvZCA9PT0gdm9pZCAwKSB7IGxvZCA9
IDA7IH0KKyAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIHZhciB0ZXh0dXJlVHlw
ZSA9IHRoaXMuX2dldFdlYkdMVGV4dHVyZVR5cGUodGV4dHVyZS50eXBlKTsKKyAgICAgICAgdmFy
IGZvcm1hdCA9IHRoaXMuX2dldEludGVybmFsRm9ybWF0KHRleHR1cmUuZm9ybWF0KTsKKyAgICAg
ICAgdmFyIGludGVybmFsRm9ybWF0ID0gdGhpcy5fZ2V0UkdCQUJ1ZmZlckludGVybmFsU2l6ZWRG
b3JtYXQodGV4dHVyZS50eXBlLCBmb3JtYXQpOworICAgICAgICB2YXIgYmluZFRhcmdldCA9IHRl
eHR1cmUuaXNDdWJlID8gZ2wuVEVYVFVSRV9DVUJFX01BUCA6IGdsLlRFWFRVUkVfMkQ7CisgICAg
ICAgIHRoaXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkoYmluZFRhcmdldCwgdGV4dHVyZSwgdHJ1ZSk7
CisgICAgICAgIHRoaXMuX3VucGFja0ZsaXBZKHRleHR1cmUuaW52ZXJ0WSk7CisgICAgICAgIHZh
ciB0YXJnZXQgPSBnbC5URVhUVVJFXzJEOworICAgICAgICBpZiAodGV4dHVyZS5pc0N1YmUpIHsK
KyAgICAgICAgICAgIHRhcmdldCA9IGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZh
Y2VJbmRleDsKKyAgICAgICAgfQorICAgICAgICBnbC50ZXhJbWFnZTJEKHRhcmdldCwgbG9kLCBp
bnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0ZXh0dXJlVHlwZSwgaW1hZ2UpOworICAgICAgICB0aGlz
Ll9iaW5kVGV4dHVyZURpcmVjdGx5KGJpbmRUYXJnZXQsIG51bGwsIHRydWUpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3Nl
dEN1YmVNYXBUZXh0dXJlUGFyYW1zID0gZnVuY3Rpb24gKGxvYWRNaXBtYXApIHsKKyAgICAgICAg
dmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV9D
VUJFX01BUCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpOworICAgICAgICBnbC50
ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfQ1VCRV9NQVAsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwg
bG9hZE1pcG1hcCA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTElORUFSKTsKKyAgICAg
ICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFX0NVQkVfTUFQLCBnbC5URVhUVVJFX1dSQVBf
UywgZ2wuQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVS
RV9DVUJFX01BUCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpOworICAgICAg
ICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyByYXcgY3ViZSB0ZXh0dXJlCisg
ICAgICogQHBhcmFtIGRhdGEgZGVmaW5lcyB0aGUgYXJyYXkgb2YgZGF0YSB0byB1c2UgdG8gY3Jl
YXRlIGVhY2ggZmFjZQorICAgICAqIEBwYXJhbSBzaXplIGRlZmluZXMgdGhlIHNpemUgb2YgdGhl
IHRleHR1cmVzCisgICAgICogQHBhcmFtIGZvcm1hdCBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgdGhl
IGRhdGEKKyAgICAgKiBAcGFyYW0gdHlwZSBkZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSBkYXRhIChs
aWtlIEVuZ2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQpCisgICAgICogQHBhcmFtIGdlbmVy
YXRlTWlwTWFwcyAgZGVmaW5lcyBpZiB0aGUgZW5naW5lIHNob3VsZCBnZW5lcmF0ZSB0aGUgbWlw
IGxldmVscworICAgICAqIEBwYXJhbSBpbnZlcnRZIGRlZmluZXMgaWYgZGF0YSBtdXN0IGJlIHN0
b3JlZCB3aXRoIFkgYXhpcyBpbnZlcnRlZAorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgZGVm
aW5lcyB0aGUgcmVxdWlyZWQgc2FtcGxpbmcgbW9kZSAobGlrZSBUZXh0dXJlLk5FQVJFU1RfU0FN
UExJTkdNT0RFKQorICAgICAqIEBwYXJhbSBjb21wcmVzc2lvbiBkZWZpbmVzIHRoZSBjb21wcmVz
c2lvbiB1c2VkIChudWxsIGJ5IGRlZmF1bHQpCisgICAgICogQHJldHVybnMgdGhlIGN1YmUgdGV4
dHVyZSBhcyBhbiBJbnRlcm5hbFRleHR1cmUKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBl
LmNyZWF0ZVJhd0N1YmVUZXh0dXJlID0gZnVuY3Rpb24gKGRhdGEsIHNpemUsIGZvcm1hdCwgdHlw
ZSwgZ2VuZXJhdGVNaXBNYXBzLCBpbnZlcnRZLCBzYW1wbGluZ01vZGUsIGNvbXByZXNzaW9uKSB7
CisgICAgICAgIGlmIChjb21wcmVzc2lvbiA9PT0gdm9pZCAwKSB7IGNvbXByZXNzaW9uID0gbnVs
bDsgfQorICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiRW5naW5lLlJhd1RleHR1cmUiKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgcmF3IDNEIHRleHR1cmUKKyAgICAg
KiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0dXJl
CisgICAgICogQHBhcmFtIHdpZHRoIGRlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlCisg
ICAgICogQHBhcmFtIGhlaWdodCBkZWZpbmVzIHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUKKyAg
ICAgKiBAcGFyYW0gZGVwdGggZGVmaW5lcyB0aGUgZGVwdGggb2YgdGhlIHRleHR1cmUKKyAgICAg
KiBAcGFyYW0gZm9ybWF0IGRlZmluZXMgdGhlIGZvcm1hdCBvZiB0aGUgdGV4dHVyZQorICAgICAq
IEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMgZGVmaW5lcyBpZiB0aGUgZW5naW5lIG11c3QgZ2VuZXJh
dGUgbWlwIGxldmVscworICAgICAqIEBwYXJhbSBpbnZlcnRZIGRlZmluZXMgaWYgZGF0YSBtdXN0
IGJlIHN0b3JlZCB3aXRoIFkgYXhpcyBpbnZlcnRlZAorICAgICAqIEBwYXJhbSBzYW1wbGluZ01v
ZGUgZGVmaW5lcyB0aGUgcmVxdWlyZWQgc2FtcGxpbmcgbW9kZSAobGlrZSBUZXh0dXJlLk5FQVJF
U1RfU0FNUExJTkdNT0RFKQorICAgICAqIEBwYXJhbSBjb21wcmVzc2lvbiBkZWZpbmVzIHRoZSBj
b21wcmVzc2VkIHVzZWQgKGNhbiBiZSBudWxsKQorICAgICAqIEBwYXJhbSB0ZXh0dXJlVHlwZSBk
ZWZpbmVzIHRoZSBjb21wcmVzc2VkIHVzZWQgKGNhbiBiZSBudWxsKQorICAgICAqIEByZXR1cm5z
IGEgbmV3IHJhdyAzRCB0ZXh0dXJlIChzdG9yZWQgaW4gYW4gSW50ZXJuYWxUZXh0dXJlKQorICAg
ICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuY3JlYXRlUmF3VGV4dHVyZTNEID0gZnVuY3Rpb24g
KGRhdGEsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGdlbmVyYXRlTWlwTWFwcywgaW52
ZXJ0WSwgc2FtcGxpbmdNb2RlLCBjb21wcmVzc2lvbiwgdGV4dHVyZVR5cGUpIHsKKyAgICAgICAg
aWYgKGNvbXByZXNzaW9uID09PSB2b2lkIDApIHsgY29tcHJlc3Npb24gPSBudWxsOyB9CisgICAg
ICAgIGlmICh0ZXh0dXJlVHlwZSA9PT0gdm9pZCAwKSB7IHRleHR1cmVUeXBlID0gRW5naW5lLlRF
WFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiRW5n
aW5lLlJhd1RleHR1cmUiKTsKKyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX3ByZXBhcmVX
ZWJHTFRleHR1cmVDb250aW51YXRpb24gPSBmdW5jdGlvbiAodGV4dHVyZSwgc2NlbmUsIG5vTWlw
bWFwLCBpc0NvbXByZXNzZWQsIHNhbXBsaW5nTW9kZSkgeworICAgICAgICB2YXIgZ2wgPSB0aGlz
Ll9nbDsKKyAgICAgICAgaWYgKCFnbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHZhciBmaWx0ZXJzID0gdGhpcy5fZ2V0U2FtcGxpbmdQYXJhbWV0ZXJzKHNhbXBs
aW5nTW9kZSwgIW5vTWlwbWFwKTsKKyAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJF
XzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGZpbHRlcnMubWFnKTsKKyAgICAgICAgZ2wudGV4
UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcnMu
bWluKTsKKyAgICAgICAgaWYgKCFub01pcG1hcCAmJiAhaXNDb21wcmVzc2VkKSB7CisgICAgICAg
ICAgICBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KGdsLlRFWFRVUkVfMkQsIG51bGwpOworICAgICAg
ICAvLyB0aGlzLnJlc2V0VGV4dHVyZUNhY2hlKCk7CisgICAgICAgIGlmIChzY2VuZSkgeworICAg
ICAgICAgICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKHRleHR1cmUpOworICAgICAgICB9Cisg
ICAgICAgIHRleHR1cmUub25Mb2FkZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0ZXh0dXJl
KTsKKyAgICAgICAgdGV4dHVyZS5vbkxvYWRlZE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICB9Owor
ICAgIEVuZ2luZS5wcm90b3R5cGUuX3ByZXBhcmVXZWJHTFRleHR1cmUgPSBmdW5jdGlvbiAodGV4
dHVyZSwgc2NlbmUsIHdpZHRoLCBoZWlnaHQsIGludmVydFksIG5vTWlwbWFwLCBpc0NvbXByZXNz
ZWQsIHByb2Nlc3NGdW5jdGlvbiwgc2FtcGxpbmdNb2RlKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIGlmIChzYW1wbGluZ01vZGUgPT09IHZvaWQgMCkgeyBzYW1wbGluZ01v
ZGUgPSBFbmdpbmUuVEVYVFVSRV9UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIHZh
ciBtYXhUZXh0dXJlU2l6ZSA9IHRoaXMuZ2V0Q2FwcygpLm1heFRleHR1cmVTaXplOworICAgICAg
ICB2YXIgcG90V2lkdGggPSBNYXRoLm1pbihtYXhUZXh0dXJlU2l6ZSwgdGhpcy5uZWVkUE9UVGV4
dHVyZXMgPyBFbmdpbmUuR2V0RXhwb25lbnRPZlR3byh3aWR0aCwgbWF4VGV4dHVyZVNpemUpIDog
d2lkdGgpOworICAgICAgICB2YXIgcG90SGVpZ2h0ID0gTWF0aC5taW4obWF4VGV4dHVyZVNpemUs
IHRoaXMubmVlZFBPVFRleHR1cmVzID8gRW5naW5lLkdldEV4cG9uZW50T2ZUd28oaGVpZ2h0LCBt
YXhUZXh0dXJlU2l6ZSkgOiBoZWlnaHQpOworICAgICAgICB2YXIgZ2wgPSB0aGlzLl9nbDsKKyAg
ICAgICAgaWYgKCFnbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGlmICghdGV4dHVyZS5fd2ViR0xUZXh0dXJlKSB7CisgICAgICAgICAgICAvLyAgdGhpcy5yZXNl
dFRleHR1cmVDYWNoZSgpOworICAgICAgICAgICAgaWYgKHNjZW5lKSB7CisgICAgICAgICAgICAg
ICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKHRleHR1cmUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlRGly
ZWN0bHkoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSwgdHJ1ZSk7CisgICAgICAgIHRoaXMuX3VucGFj
a0ZsaXBZKGludmVydFkgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAoaW52ZXJ0WSA/IHRydWUgOiBm
YWxzZSkpOworICAgICAgICB0ZXh0dXJlLmJhc2VXaWR0aCA9IHdpZHRoOworICAgICAgICB0ZXh0
dXJlLmJhc2VIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIHRleHR1cmUud2lkdGggPSBwb3RXaWR0
aDsKKyAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBwb3RIZWlnaHQ7CisgICAgICAgIHRleHR1cmUu
aXNSZWFkeSA9IHRydWU7CisgICAgICAgIGlmIChwcm9jZXNzRnVuY3Rpb24ocG90V2lkdGgsIHBv
dEhlaWdodCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMuX3ByZXBhcmVXZWJHTFRl
eHR1cmVDb250aW51YXRpb24odGV4dHVyZSwgc2NlbmUsIG5vTWlwbWFwLCBpc0NvbXByZXNzZWQs
IHNhbXBsaW5nTW9kZSk7CisgICAgICAgIH0pKSB7CisgICAgICAgICAgICAvLyBSZXR1cm5pbmcg
YXMgdGV4dHVyZSBuZWVkcyBleHRyYSBhc3luYyBzdGVwcworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX3ByZXBhcmVXZWJHTFRleHR1cmVDb250aW51YXRpb24o
dGV4dHVyZSwgc2NlbmUsIG5vTWlwbWFwLCBpc0NvbXByZXNzZWQsIHNhbXBsaW5nTW9kZSk7Cisg
ICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX2NvbnZlcnRS
R0J0b1JHQkFUZXh0dXJlRGF0YSA9IGZ1bmN0aW9uIChyZ2JEYXRhLCB3aWR0aCwgaGVpZ2h0LCB0
ZXh0dXJlVHlwZSkgeworICAgICAgICAvLyBDcmVhdGUgbmV3IFJHQkEgZGF0YSBjb250YWluZXIu
CisgICAgICAgIHZhciByZ2JhRGF0YTsKKyAgICAgICAgaWYgKHRleHR1cmVUeXBlID09PSBFbmdp
bmUuVEVYVFVSRVRZUEVfRkxPQVQpIHsKKyAgICAgICAgICAgIHJnYmFEYXRhID0gbmV3IEZsb2F0
MzJBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgcmdiYURhdGEgPSBuZXcgVWludDMyQXJyYXkod2lkdGggKiBoZWlnaHQgKiA0
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb252ZXJ0IGVhY2ggcGl4ZWwuCisgICAgICAgIGZv
ciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgZm9yICh2YXIgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAgIHZhciBpbmRleCA9ICh5ICog
d2lkdGggKyB4KSAqIDM7CisgICAgICAgICAgICAgICAgdmFyIG5ld0luZGV4ID0gKHkgKiB3aWR0
aCArIHgpICogNDsKKyAgICAgICAgICAgICAgICAvLyBNYXAgT2xkIFZhbHVlIHRvIG5ldyB2YWx1
ZS4KKyAgICAgICAgICAgICAgICByZ2JhRGF0YVtuZXdJbmRleCArIDBdID0gcmdiRGF0YVtpbmRl
eCArIDBdOworICAgICAgICAgICAgICAgIHJnYmFEYXRhW25ld0luZGV4ICsgMV0gPSByZ2JEYXRh
W2luZGV4ICsgMV07CisgICAgICAgICAgICAgICAgcmdiYURhdGFbbmV3SW5kZXggKyAyXSA9IHJn
YkRhdGFbaW5kZXggKyAyXTsKKyAgICAgICAgICAgICAgICAvLyBBZGQgZnVsbHkgb3BhcXVlIGFs
cGhhIGNoYW5uZWwuCisgICAgICAgICAgICAgICAgcmdiYURhdGFbbmV3SW5kZXggKyAzXSA9IDE7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJnYmFEYXRhOworICAg
IH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9yZWxlYXNlRnJh
bWVidWZmZXJPYmplY3RzID0gZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAgICAgICAgdmFyIGdsID0g
dGhpcy5fZ2w7CisgICAgICAgIGlmICh0ZXh0dXJlLl9mcmFtZWJ1ZmZlcikgeworICAgICAgICAg
ICAgZ2wuZGVsZXRlRnJhbWVidWZmZXIodGV4dHVyZS5fZnJhbWVidWZmZXIpOworICAgICAgICAg
ICAgdGV4dHVyZS5fZnJhbWVidWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0
ZXh0dXJlLl9kZXB0aFN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgICAgIGdsLmRlbGV0ZVJlbmRl
cmJ1ZmZlcih0ZXh0dXJlLl9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgdGV4dHVy
ZS5fZGVwdGhTdGVuY2lsQnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGV4
dHVyZS5fTVNBQUZyYW1lYnVmZmVyKSB7CisgICAgICAgICAgICBnbC5kZWxldGVGcmFtZWJ1ZmZl
cih0ZXh0dXJlLl9NU0FBRnJhbWVidWZmZXIpOworICAgICAgICAgICAgdGV4dHVyZS5fTVNBQUZy
YW1lYnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZS5fTVNBQVJl
bmRlckJ1ZmZlcikgeworICAgICAgICAgICAgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRleHR1cmUu
X01TQUFSZW5kZXJCdWZmZXIpOworICAgICAgICAgICAgdGV4dHVyZS5fTVNBQVJlbmRlckJ1ZmZl
ciA9IG51bGw7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5fcmVsZWFzZVRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAg
ICAgICB0aGlzLl9yZWxlYXNlRnJhbWVidWZmZXJPYmplY3RzKHRleHR1cmUpOworICAgICAgICB0
aGlzLl9kZWxldGVUZXh0dXJlKHRleHR1cmUuX3dlYkdMVGV4dHVyZSk7CisgICAgICAgIC8vIFVu
YmluZCBjaGFubmVscworICAgICAgICB0aGlzLnVuYmluZEFsbFRleHR1cmVzKCk7CisgICAgICAg
IHZhciBpbmRleCA9IHRoaXMuX2ludGVybmFsVGV4dHVyZXNDYWNoZS5pbmRleE9mKHRleHR1cmUp
OworICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICB0aGlzLl9pbnRlcm5h
bFRleHR1cmVzQ2FjaGUuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJ
bnRlZ3JhdGVkIGZpeGVkIGxvZCBzYW1wbGVycy4KKyAgICAgICAgaWYgKHRleHR1cmUuX2xvZFRl
eHR1cmVIaWdoKSB7CisgICAgICAgICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJlSGlnaC5kaXNwb3Nl
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmUuX2xvZFRleHR1cmVNaWQpIHsKKyAg
ICAgICAgICAgIHRleHR1cmUuX2xvZFRleHR1cmVNaWQuZGlzcG9zZSgpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0ZXh0dXJlLl9sb2RUZXh0dXJlTG93KSB7CisgICAgICAgICAgICB0ZXh0dXJl
Ll9sb2RUZXh0dXJlTG93LmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbnRlZ3Jh
dGVkIGlycmFkaWFuY2UgbWFwLgorICAgICAgICBpZiAodGV4dHVyZS5faXJyYWRpYW5jZVRleHR1
cmUpIHsKKyAgICAgICAgICAgIHRleHR1cmUuX2lycmFkaWFuY2VUZXh0dXJlLmRpc3Bvc2UoKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBTZXQgb3V0cHV0IHRleHR1cmUgb2YgcG9zdCBwcm9jZXNz
IHRvIG51bGwgaWYgdGhlIHRleHR1cmUgaGFzIGJlZW4gcmVsZWFzZWQvZGlzcG9zZWQKKyAgICAg
ICAgdGhpcy5zY2VuZXMuZm9yRWFjaChmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICAgICAgICAgIHNj
ZW5lLnBvc3RQcm9jZXNzZXMuZm9yRWFjaChmdW5jdGlvbiAocG9zdFByb2Nlc3MpIHsKKyAgICAg
ICAgICAgICAgICBpZiAocG9zdFByb2Nlc3MuX291dHB1dFRleHR1cmUgPT0gdGV4dHVyZSkgewor
ICAgICAgICAgICAgICAgICAgICBwb3N0UHJvY2Vzcy5fb3V0cHV0VGV4dHVyZSA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzY2VuZS5jYW1l
cmFzLmZvckVhY2goZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICAgICAgICAgIGNhbWVyYS5f
cG9zdFByb2Nlc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChwb3N0UHJvY2VzcykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAocG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwb3N0UHJvY2Vzcy5fb3V0cHV0VGV4dHVyZSA9PSB0ZXh0dXJlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9zdFByb2Nlc3MuX291dHB1dFRleHR1cmUgPSBudWxsOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBFbmdpbmUu
cHJvdG90eXBlLl9kZWxldGVUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAgICAgICAg
dGhpcy5fZ2wuZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTsKKyAgICB9OworICAgIEVuZ2luZS5wcm90
b3R5cGUuX3NldFByb2dyYW0gPSBmdW5jdGlvbiAocHJvZ3JhbSkgeworICAgICAgICBpZiAodGhp
cy5fY3VycmVudFByb2dyYW0gIT09IHByb2dyYW0pIHsKKyAgICAgICAgICAgIHRoaXMuX2dsLnVz
ZVByb2dyYW0ocHJvZ3JhbSk7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50UHJvZ3JhbSA9IHBy
b2dyYW07CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRzIGFuIGVmZmVj
dCB0byB0aGUgd2ViR0wgY29udGV4dAorICAgICAqIEBwYXJhbSBlZmZlY3QgZGVmaW5lcyB0aGUg
ZWZmZWN0IHRvIGJpbmQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmJpbmRTYW1wbGVy
cyA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgdmFyIHdlYkdMUGlwZWxpbmVDb250ZXh0
ID0gZWZmZWN0LmdldFBpcGVsaW5lQ29udGV4dCgpOworICAgICAgICB0aGlzLl9zZXRQcm9ncmFt
KHdlYkdMUGlwZWxpbmVDb250ZXh0LnByb2dyYW0pOworICAgICAgICB2YXIgc2FtcGxlcnMgPSBl
ZmZlY3QuZ2V0U2FtcGxlcnMoKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IHNhbXBsZXJzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHVuaWZvcm0gPSBl
ZmZlY3QuZ2V0VW5pZm9ybShzYW1wbGVyc1tpbmRleF0pOworICAgICAgICAgICAgaWYgKHVuaWZv
cm0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ib3VuZFVuaWZvcm1zW2luZGV4XSA9IHVuaWZv
cm07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY3VycmVudEVmZmVj
dCA9IG51bGw7CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl9hY3RpdmF0ZUN1cnJlbnRU
ZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fY3VycmVudFRleHR1cmVD
aGFubmVsICE9PSB0aGlzLl9hY3RpdmVDaGFubmVsKSB7CisgICAgICAgICAgICB0aGlzLl9nbC5h
Y3RpdmVUZXh0dXJlKHRoaXMuX2dsLlRFWFRVUkUwICsgdGhpcy5fYWN0aXZlQ2hhbm5lbCk7Cisg
ICAgICAgICAgICB0aGlzLl9jdXJyZW50VGV4dHVyZUNoYW5uZWwgPSB0aGlzLl9hY3RpdmVDaGFu
bmVsOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEVuZ2luZS5w
cm90b3R5cGUuX2JpbmRUZXh0dXJlRGlyZWN0bHkgPSBmdW5jdGlvbiAodGFyZ2V0LCB0ZXh0dXJl
LCBmb3JUZXh0dXJlRGF0YVVwZGF0ZSwgZm9yY2UpIHsKKyAgICAgICAgaWYgKGZvclRleHR1cmVE
YXRhVXBkYXRlID09PSB2b2lkIDApIHsgZm9yVGV4dHVyZURhdGFVcGRhdGUgPSBmYWxzZTsgfQor
ICAgICAgICBpZiAoZm9yY2UgPT09IHZvaWQgMCkgeyBmb3JjZSA9IGZhbHNlOyB9CisgICAgICAg
IHZhciB3YXNQcmV2aW91c2x5Qm91bmQgPSBmYWxzZTsKKyAgICAgICAgdmFyIGlzVGV4dHVyZUZv
clJlbmRlcmluZyA9IHRleHR1cmUgJiYgdGV4dHVyZS5fYXNzb2NpYXRlZENoYW5uZWwgPiAtMTsK
KyAgICAgICAgaWYgKGZvclRleHR1cmVEYXRhVXBkYXRlICYmIGlzVGV4dHVyZUZvclJlbmRlcmlu
ZykgeworICAgICAgICAgICAgdGhpcy5fYWN0aXZlQ2hhbm5lbCA9IHRleHR1cmUuX2Fzc29jaWF0
ZWRDaGFubmVsOworICAgICAgICB9CisgICAgICAgIHZhciBjdXJyZW50VGV4dHVyZUJvdW5kID0g
dGhpcy5fYm91bmRUZXh0dXJlc0NhY2hlW3RoaXMuX2FjdGl2ZUNoYW5uZWxdOworICAgICAgICBp
ZiAoY3VycmVudFRleHR1cmVCb3VuZCAhPT0gdGV4dHVyZSB8fCBmb3JjZSkgeworICAgICAgICAg
ICAgdGhpcy5fYWN0aXZhdGVDdXJyZW50VGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKHRleHR1
cmUgJiYgdGV4dHVyZS5pc011bHRpdmlldykgeworICAgICAgICAgICAgICAgIHRoaXMuX2dsLmJp
bmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSA/IHRleHR1cmUuX2NvbG9yVGV4dHVyZUFycmF5IDog
bnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9nbC5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUgPyB0ZXh0dXJlLl93ZWJHTFRl
eHR1cmUgOiBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2JvdW5kVGV4
dHVyZXNDYWNoZVt0aGlzLl9hY3RpdmVDaGFubmVsXSA9IHRleHR1cmU7CisgICAgICAgICAgICBp
ZiAodGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRleHR1cmUuX2Fzc29jaWF0ZWRDaGFubmVs
ID0gdGhpcy5fYWN0aXZlQ2hhbm5lbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChmb3JUZXh0dXJlRGF0YVVwZGF0ZSkgeworICAgICAgICAgICAgd2FzUHJldmlv
dXNseUJvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX2FjdGl2YXRlQ3VycmVudFRleHR1
cmUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNUZXh0dXJlRm9yUmVuZGVyaW5nICYmICFm
b3JUZXh0dXJlRGF0YVVwZGF0ZSkgeworICAgICAgICAgICAgdGhpcy5fYmluZFNhbXBsZXJVbmlm
b3JtVG9DaGFubmVsKHRleHR1cmUuX2Fzc29jaWF0ZWRDaGFubmVsLCB0aGlzLl9hY3RpdmVDaGFu
bmVsKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gd2FzUHJldmlvdXNseUJvdW5kOworICAg
IH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLl9iaW5kVGV4dHVy
ZSA9IGZ1bmN0aW9uIChjaGFubmVsLCB0ZXh0dXJlKSB7CisgICAgICAgIGlmIChjaGFubmVsID09
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGV4dHVyZSkgeworICAgICAgICAgICAgdGV4dHVyZS5fYXNzb2NpYXRlZENoYW5uZWwgPSBj
aGFubmVsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2FjdGl2ZUNoYW5uZWwgPSBjaGFubmVs
OworICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfMkQs
IHRleHR1cmUpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIHRleHR1cmUgdG8gdGhl
IHdlYkdMIGNvbnRleHQgZnJvbSBhIHBvc3Rwcm9jZXNzCisgICAgICogQHBhcmFtIGNoYW5uZWwg
ZGVmaW5lcyB0aGUgY2hhbm5lbCB0byB1c2UKKyAgICAgKiBAcGFyYW0gcG9zdFByb2Nlc3MgZGVm
aW5lcyB0aGUgc291cmNlIHBvc3Rwcm9jZXNzCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlw
ZS5zZXRUZXh0dXJlRnJvbVBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKGNoYW5uZWwsIHBvc3RQcm9j
ZXNzKSB7CisgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJlKGNoYW5uZWwsIHBvc3RQcm9jZXNzID8g
cG9zdFByb2Nlc3MuX3RleHR1cmVzLmRhdGFbcG9zdFByb2Nlc3MuX2N1cnJlbnRSZW5kZXJUZXh0
dXJlSW5kXSA6IG51bGwpOworICAgIH07CisgICAgLyoqCisgICAgICogQmluZHMgdGhlIG91dHB1
dCBvZiB0aGUgcGFzc2VkIGluIHBvc3QgcHJvY2VzcyB0byB0aGUgdGV4dHVyZSBjaGFubmVsIHNw
ZWNpZmllZAorICAgICAqIEBwYXJhbSBjaGFubmVsIFRoZSBjaGFubmVsIHRoZSB0ZXh0dXJlIHNo
b3VsZCBiZSBib3VuZCB0bworICAgICAqIEBwYXJhbSBwb3N0UHJvY2VzcyBUaGUgcG9zdCBwcm9j
ZXNzIHdoaWNoJ3Mgb3V0cHV0IHNob3VsZCBiZSBib3VuZAorICAgICAqLworICAgIEVuZ2luZS5w
cm90b3R5cGUuc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2Vzc091dHB1dCA9IGZ1bmN0aW9uIChjaGFu
bmVsLCBwb3N0UHJvY2VzcykgeworICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZShjaGFubmVsLCBw
b3N0UHJvY2VzcyA/IHBvc3RQcm9jZXNzLl9vdXRwdXRUZXh0dXJlIDogbnVsbCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBVbmJpbmQgYWxsIHRleHR1cmVzIGZyb20gdGhlIHdlYkdMIGNvbnRl
eHQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnVuYmluZEFsbFRleHR1cmVzID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBjaGFubmVsID0gMDsgY2hhbm5lbCA8IHRoaXMu
X21heFNpbXVsdGFuZW91c1RleHR1cmVzOyBjaGFubmVsKyspIHsKKyAgICAgICAgICAgIHRoaXMu
X2FjdGl2ZUNoYW5uZWwgPSBjaGFubmVsOworICAgICAgICAgICAgdGhpcy5fYmluZFRleHR1cmVE
aXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzJELCBudWxsKTsKKyAgICAgICAgICAgIHRoaXMuX2Jp
bmRUZXh0dXJlRGlyZWN0bHkodGhpcy5fZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7CisgICAg
ICAgICAgICBpZiAodGhpcy53ZWJHTFZlcnNpb24gPiAxKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzNELCBudWxsKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIHRleHR1
cmUgdG8gdGhlIGFjY29yZGluZyB1bmlmb3JtLgorICAgICAqIEBwYXJhbSBjaGFubmVsIFRoZSB0
ZXh0dXJlIGNoYW5uZWwKKyAgICAgKiBAcGFyYW0gdW5pZm9ybSBUaGUgdW5pZm9ybSB0byBzZXQK
KyAgICAgKiBAcGFyYW0gdGV4dHVyZSBUaGUgdGV4dHVyZSB0byBhcHBseQorICAgICAqIEBwYXJh
bSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGluIHRoZSBlZmZlY3QKKyAgICAgKi8KKyAg
ICBFbmdpbmUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbiAoY2hhbm5lbCwgdW5pZm9y
bSwgdGV4dHVyZSwgbmFtZSkgeworICAgICAgICBpZiAoY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVuaWZvcm0pIHsK
KyAgICAgICAgICAgIHRoaXMuX2JvdW5kVW5pZm9ybXNbY2hhbm5lbF0gPSB1bmlmb3JtOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX3NldFRleHR1cmUoY2hhbm5lbCwgdGV4dHVyZSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgZGVwdGggc3RlbmNpbCB0ZXh0dXJlIGZyb20gYSBy
ZW5kZXIgdGFyZ2V0IHRvIHRoZSBhY2NvcmRpbmcgdW5pZm9ybS4KKyAgICAgKiBAcGFyYW0gY2hh
bm5lbCBUaGUgdGV4dHVyZSBjaGFubmVsCisgICAgICogQHBhcmFtIHVuaWZvcm0gVGhlIHVuaWZv
cm0gdG8gc2V0CisgICAgICogQHBhcmFtIHRleHR1cmUgVGhlIHJlbmRlciB0YXJnZXQgdGV4dHVy
ZSBjb250YWluaW5nIHRoZSBkZXB0aCBzdGVuY2lsIHRleHR1cmUgdG8gYXBwbHkKKyAgICAgKi8K
KyAgICBFbmdpbmUucHJvdG90eXBlLnNldERlcHRoU3RlbmNpbFRleHR1cmUgPSBmdW5jdGlvbiAo
Y2hhbm5lbCwgdW5pZm9ybSwgdGV4dHVyZSkgeworICAgICAgICBpZiAoY2hhbm5lbCA9PT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVu
aWZvcm0pIHsKKyAgICAgICAgICAgIHRoaXMuX2JvdW5kVW5pZm9ybXNbY2hhbm5lbF0gPSB1bmlm
b3JtOworICAgICAgICB9CisgICAgICAgIGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS5kZXB0aFN0
ZW5jaWxUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9zZXRUZXh0dXJlKGNoYW5uZWwsIG51
bGwpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fc2V0VGV4
dHVyZShjaGFubmVsLCB0ZXh0dXJlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIEVuZ2luZS5wcm90b3R5cGUuX2JpbmRTYW1wbGVyVW5pZm9ybVRvQ2hhbm5lbCA9IGZ1bmN0
aW9uIChzb3VyY2VTbG90LCBkZXN0aW5hdGlvbikgeworICAgICAgICB2YXIgdW5pZm9ybSA9IHRo
aXMuX2JvdW5kVW5pZm9ybXNbc291cmNlU2xvdF07CisgICAgICAgIGlmICghdW5pZm9ybSB8fCB1
bmlmb3JtLl9jdXJyZW50U3RhdGUgPT09IGRlc3RpbmF0aW9uKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2wudW5pZm9ybTFpKHVuaWZvcm0sIGRlc3Rp
bmF0aW9uKTsKKyAgICAgICAgdW5pZm9ybS5fY3VycmVudFN0YXRlID0gZGVzdGluYXRpb247Cisg
ICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl9nZXRUZXh0dXJlV3JhcE1vZGUgPSBmdW5jdGlv
biAobW9kZSkgeworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRW5n
aW5lLlRFWFRVUkVfV1JBUF9BRERSRVNTTU9ERToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fZ2wuUkVQRUFUOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRV9DTEFNUF9BRERS
RVNTTU9ERToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuQ0xBTVBfVE9fRURHRTsK
KyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVfTUlSUk9SX0FERFJFU1NNT0RFOgorICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5NSVJST1JFRF9SRVBFQVQ7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJFUEVBVDsKKyAgICB9OworICAgIEVuZ2luZS5wcm90
b3R5cGUuX3NldFRleHR1cmUgPSBmdW5jdGlvbiAoY2hhbm5lbCwgdGV4dHVyZSwgaXNQYXJ0T2ZU
ZXh0dXJlQXJyYXksIGRlcHRoU3RlbmNpbFRleHR1cmUpIHsKKyAgICAgICAgaWYgKGlzUGFydE9m
VGV4dHVyZUFycmF5ID09PSB2b2lkIDApIHsgaXNQYXJ0T2ZUZXh0dXJlQXJyYXkgPSBmYWxzZTsg
fQorICAgICAgICBpZiAoZGVwdGhTdGVuY2lsVGV4dHVyZSA9PT0gdm9pZCAwKSB7IGRlcHRoU3Rl
bmNpbFRleHR1cmUgPSBmYWxzZTsgfQorICAgICAgICAvLyBOb3QgcmVhZHk/CisgICAgICAgIGlm
ICghdGV4dHVyZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2JvdW5kVGV4dHVyZXNDYWNoZVtj
aGFubmVsXSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlQ2hhbm5lbCA9
IGNoYW5uZWw7CisgICAgICAgICAgICAgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlz
Ll9nbC5URVhUVVJFXzJELCBudWxsKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9iaW5kVGV4dHVy
ZURpcmVjdGx5KHRoaXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpOworICAgICAgICAgICAg
ICAgIGlmICh0aGlzLndlYkdMVmVyc2lvbiA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzNELCBudWxsKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gVmlkZW8KKyAgICAgICAgaWYgKHRleHR1cmUudmlkZW8pIHsK
KyAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUNoYW5uZWwgPSBjaGFubmVsOworICAgICAgICAgICAg
dGV4dHVyZS51cGRhdGUoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0ZXh0dXJlLmRl
bGF5TG9hZFN0YXRlID09PSBFbmdpbmUuREVMQVlMT0FEU1RBVEVfTk9UTE9BREVEKSB7IC8vIERl
bGF5IGxvYWRpbmcKKyAgICAgICAgICAgIHRleHR1cmUuZGVsYXlMb2FkKCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGludGVybmFsVGV4dHVyZTsK
KyAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFRleHR1cmUpIHsKKyAgICAgICAgICAgIGludGVybmFs
VGV4dHVyZSA9IHRleHR1cmUuZGVwdGhTdGVuY2lsVGV4dHVyZTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICh0ZXh0dXJlLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgaW50ZXJuYWxUZXh0
dXJlID0gdGV4dHVyZS5nZXRJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmICh0ZXh0dXJlLmlzQ3ViZSkgeworICAgICAgICAgICAgaW50ZXJuYWxUZXh0dXJlID0g
dGhpcy5lbXB0eUN1YmVUZXh0dXJlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRleHR1
cmUuaXMzRCkgeworICAgICAgICAgICAgaW50ZXJuYWxUZXh0dXJlID0gdGhpcy5lbXB0eVRleHR1
cmUzRDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludGVybmFsVGV4
dHVyZSA9IHRoaXMuZW1wdHlUZXh0dXJlOworICAgICAgICB9CisgICAgICAgIGlmICghaXNQYXJ0
T2ZUZXh0dXJlQXJyYXkgJiYgaW50ZXJuYWxUZXh0dXJlKSB7CisgICAgICAgICAgICBpbnRlcm5h
bFRleHR1cmUuX2Fzc29jaWF0ZWRDaGFubmVsID0gY2hhbm5lbDsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgbmVlZFRvQmluZCA9IHRydWU7CisgICAgICAgIGlmICh0aGlzLl9ib3VuZFRleHR1cmVz
Q2FjaGVbY2hhbm5lbF0gPT09IGludGVybmFsVGV4dHVyZSkgeworICAgICAgICAgICAgaWYgKCFp
c1BhcnRPZlRleHR1cmVBcnJheSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2JpbmRTYW1wbGVy
VW5pZm9ybVRvQ2hhbm5lbChpbnRlcm5hbFRleHR1cmUuX2Fzc29jaWF0ZWRDaGFubmVsLCBjaGFu
bmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5lZWRUb0JpbmQgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9hY3RpdmVDaGFubmVsID0gY2hhbm5lbDsKKyAgICAgICAg
aWYgKGludGVybmFsVGV4dHVyZSAmJiBpbnRlcm5hbFRleHR1cmUuaXNNdWx0aXZpZXcpIHsKKyAg
ICAgICAgICAgIGlmIChuZWVkVG9CaW5kKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYmluZFRl
eHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzJEX0FSUkFZLCBpbnRlcm5hbFRleHR1cmUs
IGlzUGFydE9mVGV4dHVyZUFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChpbnRlcm5hbFRleHR1cmUgJiYgaW50ZXJuYWxUZXh0dXJlLmlzM0QpIHsKKyAg
ICAgICAgICAgIGlmIChuZWVkVG9CaW5kKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYmluZFRl
eHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFXzNELCBpbnRlcm5hbFRleHR1cmUsIGlzUGFy
dE9mVGV4dHVyZUFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnRlcm5h
bFRleHR1cmUgJiYgaW50ZXJuYWxUZXh0dXJlLl9jYWNoZWRXcmFwVSAhPT0gdGV4dHVyZS53cmFw
VSkgeworICAgICAgICAgICAgICAgIGludGVybmFsVGV4dHVyZS5fY2FjaGVkV3JhcFUgPSB0ZXh0
dXJlLndyYXBVOworICAgICAgICAgICAgICAgIHRoaXMuX3NldFRleHR1cmVQYXJhbWV0ZXJJbnRl
Z2VyKHRoaXMuX2dsLlRFWFRVUkVfM0QsIHRoaXMuX2dsLlRFWFRVUkVfV1JBUF9TLCB0aGlzLl9n
ZXRUZXh0dXJlV3JhcE1vZGUodGV4dHVyZS53cmFwVSksIGludGVybmFsVGV4dHVyZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW50ZXJuYWxUZXh0dXJlICYmIGludGVybmFsVGV4
dHVyZS5fY2FjaGVkV3JhcFYgIT09IHRleHR1cmUud3JhcFYpIHsKKyAgICAgICAgICAgICAgICBp
bnRlcm5hbFRleHR1cmUuX2NhY2hlZFdyYXBWID0gdGV4dHVyZS53cmFwVjsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9zZXRUZXh0dXJlUGFyYW1ldGVySW50ZWdlcih0aGlzLl9nbC5URVhUVVJFXzNE
LCB0aGlzLl9nbC5URVhUVVJFX1dSQVBfVCwgdGhpcy5fZ2V0VGV4dHVyZVdyYXBNb2RlKHRleHR1
cmUud3JhcFYpLCBpbnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGludGVybmFsVGV4dHVyZSAmJiBpbnRlcm5hbFRleHR1cmUuX2NhY2hlZFdyYXBSICE9PSB0
ZXh0dXJlLndyYXBSKSB7CisgICAgICAgICAgICAgICAgaW50ZXJuYWxUZXh0dXJlLl9jYWNoZWRX
cmFwUiA9IHRleHR1cmUud3JhcFI7CisgICAgICAgICAgICAgICAgdGhpcy5fc2V0VGV4dHVyZVBh
cmFtZXRlckludGVnZXIodGhpcy5fZ2wuVEVYVFVSRV8zRCwgdGhpcy5fZ2wuVEVYVFVSRV9XUkFQ
X1IsIHRoaXMuX2dldFRleHR1cmVXcmFwTW9kZSh0ZXh0dXJlLndyYXBSKSwgaW50ZXJuYWxUZXh0
dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3NldEFuaXNvdHJvcGljTGV2
ZWwodGhpcy5fZ2wuVEVYVFVSRV8zRCwgdGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAoaW50ZXJuYWxUZXh0dXJlICYmIGludGVybmFsVGV4dHVyZS5pc0N1YmUpIHsKKyAgICAg
ICAgICAgIGlmIChuZWVkVG9CaW5kKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYmluZFRleHR1
cmVEaXJlY3RseSh0aGlzLl9nbC5URVhUVVJFX0NVQkVfTUFQLCBpbnRlcm5hbFRleHR1cmUsIGlz
UGFydE9mVGV4dHVyZUFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnRl
cm5hbFRleHR1cmUuX2NhY2hlZENvb3JkaW5hdGVzTW9kZSAhPT0gdGV4dHVyZS5jb29yZGluYXRl
c01vZGUpIHsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbFRleHR1cmUuX2NhY2hlZENvb3JkaW5h
dGVzTW9kZSA9IHRleHR1cmUuY29vcmRpbmF0ZXNNb2RlOworICAgICAgICAgICAgICAgIC8vIENV
QklDX01PREUgYW5kIFNLWUJPWF9NT0RFIGJvdGggcmVxdWlyZSBDTEFNUF9UT19FREdFLiAgQWxs
IG90aGVyIG1vZGVzIHVzZSBSRVBFQVQuCisgICAgICAgICAgICAgICAgdmFyIHRleHR1cmVXcmFw
TW9kZSA9ICh0ZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSAhPT0gRW5naW5lLlRFWFRVUkVfQ1VCSUNf
TU9ERSAmJiB0ZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSAhPT0gRW5naW5lLlRFWFRVUkVfU0tZQk9Y
X01PREUpID8gdGhpcy5fZ2wuUkVQRUFUIDogdGhpcy5fZ2wuQ0xBTVBfVE9fRURHRTsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9zZXRUZXh0dXJlUGFyYW1ldGVySW50ZWdlcih0aGlzLl9nbC5URVhU
VVJFX0NVQkVfTUFQLCB0aGlzLl9nbC5URVhUVVJFX1dSQVBfUywgdGV4dHVyZVdyYXBNb2RlLCBp
bnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgICAgIHRoaXMuX3NldFRleHR1cmVQYXJhbWV0
ZXJJbnRlZ2VyKHRoaXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuX2dsLlRFWFRVUkVfV1JB
UF9ULCB0ZXh0dXJlV3JhcE1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
c2V0QW5pc290cm9waWNMZXZlbCh0aGlzLl9nbC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChuZWVkVG9CaW5kKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseSh0aGlzLl9nbC5URVhU
VVJFXzJELCBpbnRlcm5hbFRleHR1cmUsIGlzUGFydE9mVGV4dHVyZUFycmF5KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChpbnRlcm5hbFRleHR1cmUgJiYgaW50ZXJuYWxUZXh0dXJl
Ll9jYWNoZWRXcmFwVSAhPT0gdGV4dHVyZS53cmFwVSkgeworICAgICAgICAgICAgICAgIGludGVy
bmFsVGV4dHVyZS5fY2FjaGVkV3JhcFUgPSB0ZXh0dXJlLndyYXBVOworICAgICAgICAgICAgICAg
IHRoaXMuX3NldFRleHR1cmVQYXJhbWV0ZXJJbnRlZ2VyKHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRo
aXMuX2dsLlRFWFRVUkVfV1JBUF9TLCB0aGlzLl9nZXRUZXh0dXJlV3JhcE1vZGUodGV4dHVyZS53
cmFwVSksIGludGVybmFsVGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aW50ZXJuYWxUZXh0dXJlICYmIGludGVybmFsVGV4dHVyZS5fY2FjaGVkV3JhcFYgIT09IHRleHR1
cmUud3JhcFYpIHsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbFRleHR1cmUuX2NhY2hlZFdyYXBW
ID0gdGV4dHVyZS53cmFwVjsKKyAgICAgICAgICAgICAgICB0aGlzLl9zZXRUZXh0dXJlUGFyYW1l
dGVySW50ZWdlcih0aGlzLl9nbC5URVhUVVJFXzJELCB0aGlzLl9nbC5URVhUVVJFX1dSQVBfVCwg
dGhpcy5fZ2V0VGV4dHVyZVdyYXBNb2RlKHRleHR1cmUud3JhcFYpLCBpbnRlcm5hbFRleHR1cmUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2V0QW5pc290cm9waWNMZXZlbCh0
aGlzLl9nbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYW4gYXJyYXkgb2YgdGV4dHVyZSB0
byB0aGUgd2ViR0wgY29udGV4dAorICAgICAqIEBwYXJhbSBjaGFubmVsIGRlZmluZXMgdGhlIGNo
YW5uZWwgd2hlcmUgdGhlIHRleHR1cmUgYXJyYXkgbXVzdCBiZSBzZXQKKyAgICAgKiBAcGFyYW0g
dW5pZm9ybSBkZWZpbmVzIHRoZSBhc3NvY2lhdGVkIHVuaWZvcm0gbG9jYXRpb24KKyAgICAgKiBA
cGFyYW0gdGV4dHVyZXMgZGVmaW5lcyB0aGUgYXJyYXkgb2YgdGV4dHVyZXMgdG8gYmluZAorICAg
ICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuc2V0VGV4dHVyZUFycmF5ID0gZnVuY3Rpb24gKGNo
YW5uZWwsIHVuaWZvcm0sIHRleHR1cmVzKSB7CisgICAgICAgIGlmIChjaGFubmVsID09PSB1bmRl
ZmluZWQgfHwgIXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIXRoaXMuX3RleHR1cmVVbml0cyB8fCB0aGlzLl90ZXh0dXJlVW5pdHMubGVuZ3Ro
ICE9PSB0ZXh0dXJlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuX3RleHR1cmVVbml0cyA9
IG5ldyBJbnQzMkFycmF5KHRleHR1cmVzLmxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0ZXh0dXJlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFy
IHRleHR1cmUgPSB0ZXh0dXJlc1tpXS5nZXRJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAgICAgICAg
IGlmICh0ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZVVuaXRzW2ldID0g
Y2hhbm5lbCArIGk7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5fYXNzb2NpYXRlZENoYW5uZWwg
PSBjaGFubmVsICsgaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHRoaXMuX3RleHR1cmVVbml0c1tpXSA9IC0xOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2dsLnVuaWZvcm0xaXYodW5pZm9ybSwgdGhpcy5fdGV4dHVy
ZVVuaXRzKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRleHR1cmVzLmxl
bmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdGhpcy5fc2V0VGV4dHVyZSh0aGlzLl90ZXh0
dXJlVW5pdHNbaW5kZXhdLCB0ZXh0dXJlc1tpbmRleF0sIHRydWUpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEVuZ2luZS5wcm90b3R5cGUuX3NldEFuaXNvdHJv
cGljTGV2ZWwgPSBmdW5jdGlvbiAodGFyZ2V0LCB0ZXh0dXJlKSB7CisgICAgICAgIHZhciBpbnRl
cm5hbFRleHR1cmUgPSB0ZXh0dXJlLmdldEludGVybmFsVGV4dHVyZSgpOworICAgICAgICBpZiAo
IWludGVybmFsVGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHZhciBhbmlzb3Ryb3BpY0ZpbHRlckV4dGVuc2lvbiA9IHRoaXMuX2NhcHMudGV4dHVyZUFu
aXNvdHJvcGljRmlsdGVyRXh0ZW5zaW9uOworICAgICAgICB2YXIgdmFsdWUgPSB0ZXh0dXJlLmFu
aXNvdHJvcGljRmlsdGVyaW5nTGV2ZWw7CisgICAgICAgIGlmIChpbnRlcm5hbFRleHR1cmUuc2Ft
cGxpbmdNb2RlICE9PSBFbmdpbmUuVEVYVFVSRV9MSU5FQVJfTElORUFSX01JUE5FQVJFU1QKKyAg
ICAgICAgICAgICYmIGludGVybmFsVGV4dHVyZS5zYW1wbGluZ01vZGUgIT09IEVuZ2luZS5URVhU
VVJFX0xJTkVBUl9MSU5FQVJfTUlQTElORUFSCisgICAgICAgICAgICAmJiBpbnRlcm5hbFRleHR1
cmUuc2FtcGxpbmdNb2RlICE9PSBFbmdpbmUuVEVYVFVSRV9MSU5FQVJfTElORUFSKSB7CisgICAg
ICAgICAgICB2YWx1ZSA9IDE7IC8vIEZvcmNpbmcgdGhlIGFuaXNvdHJvcGljIHRvIDEgYmVjYXVz
ZSBlbHNlIHdlYmdsIHdpbGwgZm9yY2UgZmlsdGVycyB0byBsaW5lYXIKKyAgICAgICAgfQorICAg
ICAgICBpZiAoYW5pc290cm9waWNGaWx0ZXJFeHRlbnNpb24gJiYgaW50ZXJuYWxUZXh0dXJlLl9j
YWNoZWRBbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsICE9PSB2YWx1ZSkgeworICAgICAgICAgICAg
dGhpcy5fc2V0VGV4dHVyZVBhcmFtZXRlckZsb2F0KHRhcmdldCwgYW5pc290cm9waWNGaWx0ZXJF
eHRlbnNpb24uVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsIE1hdGgubWluKHZhbHVlLCB0aGlz
Ll9jYXBzLm1heEFuaXNvdHJvcHkpLCBpbnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgaW50
ZXJuYWxUZXh0dXJlLl9jYWNoZWRBbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsID0gdmFsdWU7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIEVuZ2luZS5wcm90b3R5cGUuX3NldFRleHR1cmVQYXJhbWV0
ZXJGbG9hdCA9IGZ1bmN0aW9uICh0YXJnZXQsIHBhcmFtZXRlciwgdmFsdWUsIHRleHR1cmUpIHsK
KyAgICAgICAgdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseSh0YXJnZXQsIHRleHR1cmUsIHRydWUs
IHRydWUpOworICAgICAgICB0aGlzLl9nbC50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcGFyYW1ldGVy
LCB2YWx1ZSk7CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90eXBlLl9zZXRUZXh0dXJlUGFyYW1l
dGVySW50ZWdlciA9IGZ1bmN0aW9uICh0YXJnZXQsIHBhcmFtZXRlciwgdmFsdWUsIHRleHR1cmUp
IHsKKyAgICAgICAgaWYgKHRleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRUZXh0dXJl
RGlyZWN0bHkodGFyZ2V0LCB0ZXh0dXJlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9nbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcGFyYW1ldGVyLCB2YWx1ZSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZWFkcyBwaXhlbHMgZnJvbSB0aGUgY3VycmVudCBmcmFtZSBi
dWZmZXIuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gYmUgc2xvdworICAgICAq
IEBwYXJhbSB4IGRlZmluZXMgdGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcmVjdGFuZ2xlIHdoZXJl
IHBpeGVscyBtdXN0IGJlIHJlYWQKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5IGNvb3Jk
aW5hdGUgb2YgdGhlIHJlY3RhbmdsZSB3aGVyZSBwaXhlbHMgbXVzdCBiZSByZWFkCisgICAgICog
QHBhcmFtIHdpZHRoIGRlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUgd2hlcmUgcGl4
ZWxzIG11c3QgYmUgcmVhZAorICAgICAqIEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgaGVpZ2h0
IG9mIHRoZSByZWN0YW5nbGUgd2hlcmUgcGl4ZWxzIG11c3QgYmUgcmVhZAorICAgICAqIEByZXR1
cm5zIGEgVWludDhBcnJheSBjb250YWluaW5nIFJHQkEgY29sb3JzCisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5yZWFkUGl4ZWxzID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQp
IHsKKyAgICAgICAgdmFyIGRhdGEgPSBuZXcgVWludDhBcnJheShoZWlnaHQgKiB3aWR0aCAqIDQp
OworICAgICAgICB0aGlzLl9nbC5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIHRoaXMu
X2dsLlJHQkEsIHRoaXMuX2dsLlVOU0lHTkVEX0JZVEUsIGRhdGEpOworICAgICAgICByZXR1cm4g
ZGF0YTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBhbiBleHRlcm5hbHkgYXR0YWNoZWQg
ZGF0YSBmcm9tIGl0cyBrZXkuCisgICAgICogVGhpcyBtZXRob2QgY2FsbCB3aWxsIGZhaWwgYW5k
IHJldHVybiBmYWxzZSwgaWYgc3VjaCBrZXkgYWxyZWFkeSBleGlzdHMuCisgICAgICogSWYgeW91
IGRvbid0IGNhcmUgYW5kIGp1c3Qgd2FudCB0byBnZXQgdGhlIGRhdGEgbm8gbWF0dGVyIHdoYXQs
IHVzZSB0aGUgbW9yZSBjb252ZW5pZW50IGdldE9yQWRkRXh0ZXJuYWxEYXRhV2l0aEZhY3Rvcnko
KSBtZXRob2QuCisgICAgICogQHBhcmFtIGtleSB0aGUgdW5pcXVlIGtleSB0aGF0IGlkZW50aWZp
ZXMgdGhlIGRhdGEKKyAgICAgKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSBvYmplY3QgdG8gYXNzb2Np
YXRlIHRvIHRoZSBrZXkgZm9yIHRoaXMgRW5naW5lIGluc3RhbmNlCisgICAgICogQHJldHVybiB0
cnVlIGlmIG5vIHN1Y2gga2V5IHdlcmUgYWxyZWFkeSBwcmVzZW50IGFuZCB0aGUgZGF0YSB3YXMg
YWRkZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBFbmdpbmUu
cHJvdG90eXBlLmFkZEV4dGVybmFsRGF0YSA9IGZ1bmN0aW9uIChrZXksIGRhdGEpIHsKKyAgICAg
ICAgaWYgKCF0aGlzLl9leHRlcm5hbERhdGEpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4dGVybmFs
RGF0YSA9IG5ldyBfTWlzY19zdHJpbmdEaWN0aW9uYXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlN0cmluZ0RpY3Rpb25hcnkiXSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
aGlzLl9leHRlcm5hbERhdGEuYWRkKGtleSwgZGF0YSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBHZXQgYW4gZXh0ZXJuYWx5IGF0dGFjaGVkIGRhdGEgZnJvbSBpdHMga2V5CisgICAgICogQHBh
cmFtIGtleSB0aGUgdW5pcXVlIGtleSB0aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEKKyAgICAgKiBA
cmV0dXJuIHRoZSBhc3NvY2lhdGVkIGRhdGEsIGlmIHByZXNlbnQgKGNhbiBiZSBudWxsKSwgb3Ig
dW5kZWZpbmVkIGlmIG5vdCBwcmVzZW50CisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5n
ZXRFeHRlcm5hbERhdGEgPSBmdW5jdGlvbiAoa2V5KSB7CisgICAgICAgIGlmICghdGhpcy5fZXh0
ZXJuYWxEYXRhKSB7CisgICAgICAgICAgICB0aGlzLl9leHRlcm5hbERhdGEgPSBuZXcgX01pc2Nf
c3RyaW5nRGljdGlvbmFyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTdHJpbmdEaWN0
aW9uYXJ5Il0oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fZXh0ZXJuYWxEYXRh
LmdldChrZXkpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGFuIGV4dGVybmFseSBhdHRh
Y2hlZCBkYXRhIGZyb20gaXRzIGtleSwgY3JlYXRlIGl0IHVzaW5nIGEgZmFjdG9yeSBpZiBpdCdz
IG5vdCBhbHJlYWR5IHByZXNlbnQKKyAgICAgKiBAcGFyYW0ga2V5IHRoZSB1bmlxdWUga2V5IHRo
YXQgaWRlbnRpZmllcyB0aGUgZGF0YQorICAgICAqIEBwYXJhbSBmYWN0b3J5IHRoZSBmYWN0b3J5
IHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gY3JlYXRlIHRoZSBpbnN0YW5jZSBpZiBhbmQgb25seSBp
ZiBpdCBkb2Vzbid0IGV4aXN0cworICAgICAqIEByZXR1cm4gdGhlIGFzc29jaWF0ZWQgZGF0YSwg
Y2FuIGJlIG51bGwgaWYgdGhlIGZhY3RvcnkgcmV0dXJuZWQgbnVsbC4KKyAgICAgKi8KKyAgICBF
bmdpbmUucHJvdG90eXBlLmdldE9yQWRkRXh0ZXJuYWxEYXRhV2l0aEZhY3RvcnkgPSBmdW5jdGlv
biAoa2V5LCBmYWN0b3J5KSB7CisgICAgICAgIGlmICghdGhpcy5fZXh0ZXJuYWxEYXRhKSB7Cisg
ICAgICAgICAgICB0aGlzLl9leHRlcm5hbERhdGEgPSBuZXcgX01pc2Nfc3RyaW5nRGljdGlvbmFy
eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTdHJpbmdEaWN0aW9uYXJ5Il0oKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fZXh0ZXJuYWxEYXRhLmdldE9yQWRkV2l0aEZh
Y3Rvcnkoa2V5LCBmYWN0b3J5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhbiBl
eHRlcm5hbHkgYXR0YWNoZWQgZGF0YSBmcm9tIHRoZSBFbmdpbmUgaW5zdGFuY2UKKyAgICAgKiBA
cGFyYW0ga2V5IHRoZSB1bmlxdWUga2V5IHRoYXQgaWRlbnRpZmllcyB0aGUgZGF0YQorICAgICAq
IEByZXR1cm4gdHJ1ZSBpZiB0aGUgZGF0YSB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQsIGZhbHNl
IGlmIGl0IGRvZXNuJ3QgZXhpc3QKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLnJlbW92
ZUV4dGVybmFsRGF0YSA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leHRl
cm5hbERhdGEpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4dGVybmFsRGF0YSA9IG5ldyBfTWlzY19z
dHJpbmdEaWN0aW9uYXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlN0cmluZ0RpY3Rp
b25hcnkiXSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9leHRlcm5hbERhdGEu
cmVtb3ZlKGtleSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVbmJpbmQgYWxsIHZlcnRleCBh
dHRyaWJ1dGVzIGZyb20gdGhlIHdlYkdMIGNvbnRleHQKKyAgICAgKi8KKyAgICBFbmdpbmUucHJv
dG90eXBlLnVuYmluZEFsbEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLl9tdXN0V2lwZVZlcnRleEF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX211c3RX
aXBlVmVydGV4QXR0cmlidXRlcyA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0aGlzLl9jYXBzLm1heFZlcnRleEF0dHJpYnM7IGkrKykgeworICAgICAgICAgICAgICAg
IHRoaXMuX2dsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTsKKyAgICAgICAgICAgICAgICB0
aGlzLl92ZXJ0ZXhBdHRyaWJBcnJheXNFbmFibGVkW2ldID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgdGhpcy5fY3VycmVudEJ1ZmZlclBvaW50ZXJzW2ldLmFjdGl2ZSA9IGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAodmFy
IGkgPSAwLCB1bCA9IHRoaXMuX3ZlcnRleEF0dHJpYkFycmF5c0VuYWJsZWQubGVuZ3RoOyBpIDwg
dWw7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPj0gdGhpcy5fY2Fwcy5tYXhWZXJ0ZXhBdHRy
aWJzIHx8ICF0aGlzLl92ZXJ0ZXhBdHRyaWJBcnJheXNFbmFibGVkW2ldKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9nbC5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoaSk7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhBdHRyaWJB
cnJheXNFbmFibGVkW2ldID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50QnVmZmVy
UG9pbnRlcnNbaV0uYWN0aXZlID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIEZvcmNlIHRoZSBlbmdpbmUgdG8gcmVsZWFzZSBhbGwgY2FjaGVkIGVmZmVjdHMuIFRo
aXMgbWVhbnMgdGhhdCBuZXh0IGVmZmVjdCBjb21waWxhdGlvbiB3aWxsIGhhdmUgdG8gYmUgZG9u
ZSBjb21wbGV0ZWx5IGV2ZW4gaWYgYSBzaW1pbGFyIGVmZmVjdCB3YXMgYWxyZWFkeSBjb21waWxl
ZAorICAgICAqLworICAgIEVuZ2luZS5wcm90b3R5cGUucmVsZWFzZUVmZmVjdHMgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fY29tcGlsZWRFZmZlY3RzKSB7
CisgICAgICAgICAgICB2YXIgd2ViR0xQaXBlbGluZUNvbnRleHQgPSB0aGlzLl9jb21waWxlZEVm
ZmVjdHNbbmFtZV0uZ2V0UGlwZWxpbmVDb250ZXh0KCk7CisgICAgICAgICAgICB0aGlzLl9kZWxl
dGVQaXBlbGluZUNvbnRleHQod2ViR0xQaXBlbGluZUNvbnRleHQpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2NvbXBpbGVkRWZmZWN0cyA9IHt9OworICAgIH07CisgICAgLyoqCisgICAgICog
RGlzcG9zZSBhbmQgcmVsZWFzZSBhbGwgYXNzb2NpYXRlZCByZXNvdXJjZXMKKyAgICAgKi8KKyAg
ICBFbmdpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMu
aGlkZUxvYWRpbmdVSSgpOworICAgICAgICB0aGlzLnN0b3BSZW5kZXJMb29wKCk7CisgICAgICAg
IHRoaXMub25OZXdTY2VuZUFkZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICAvLyBSZWxl
YXNlIHBvc3RQcm9jZXNzZXMKKyAgICAgICAgd2hpbGUgKHRoaXMucG9zdFByb2Nlc3Nlcy5sZW5n
dGgpIHsKKyAgICAgICAgICAgIHRoaXMucG9zdFByb2Nlc3Nlc1swXS5kaXNwb3NlKCk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gRW1wdHkgdGV4dHVyZQorICAgICAgICBpZiAodGhpcy5fZW1wdHlU
ZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9yZWxlYXNlVGV4dHVyZSh0aGlzLl9lbXB0eVRl
eHR1cmUpOworICAgICAgICAgICAgdGhpcy5fZW1wdHlUZXh0dXJlID0gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5fZW1wdHlDdWJlVGV4dHVyZSkgeworICAgICAgICAgICAgdGhp
cy5fcmVsZWFzZVRleHR1cmUodGhpcy5fZW1wdHlDdWJlVGV4dHVyZSk7CisgICAgICAgICAgICB0
aGlzLl9lbXB0eUN1YmVUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXNj
YWxlIFBQCisgICAgICAgIGlmICh0aGlzLl9yZXNjYWxlUG9zdFByb2Nlc3MpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3Jlc2NhbGVQb3N0UHJvY2Vzcy5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gUmVsZWFzZSBzY2VuZXMKKyAgICAgICAgd2hpbGUgKHRoaXMuc2NlbmVzLmxlbmd0aCkg
eworICAgICAgICAgICAgdGhpcy5zY2VuZXNbMF0uZGlzcG9zZSgpOworICAgICAgICB9CisgICAg
ICAgIC8vIFJlbGVhc2UgYXVkaW8gZW5naW5lCisgICAgICAgIGlmIChFbmdpbmUuSW5zdGFuY2Vz
Lmxlbmd0aCA9PT0gMSAmJiBFbmdpbmUuYXVkaW9FbmdpbmUpIHsKKyAgICAgICAgICAgIEVuZ2lu
ZS5hdWRpb0VuZ2luZS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVsZWFzZSBl
ZmZlY3RzCisgICAgICAgIHRoaXMucmVsZWFzZUVmZmVjdHMoKTsKKyAgICAgICAgLy8gVW5iaW5k
CisgICAgICAgIHRoaXMudW5iaW5kQWxsQXR0cmlidXRlcygpOworICAgICAgICB0aGlzLl9ib3Vu
ZFVuaWZvcm1zID0gW107CisgICAgICAgIGlmICh0aGlzLl9kdW1teUZyYW1lYnVmZmVyKSB7Cisg
ICAgICAgICAgICB0aGlzLl9nbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLl9kdW1teUZyYW1lYnVm
ZmVyKTsKKyAgICAgICAgfQorICAgICAgICAvL1dlYlZSCisgICAgICAgIHRoaXMuZGlzYWJsZVZS
KCk7CisgICAgICAgIC8vIEV2ZW50cworICAgICAgICBpZiAoX01pc2NfZG9tTWFuYWdlbWVudF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJEb21NYW5hZ2VtZW50Il0uSXNXaW5kb3dPYmpl
Y3RFeGlzdCgpKSB7CisgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1
ciIsIHRoaXMuX29uQmx1cik7CisgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5l
cigiZm9jdXMiLCB0aGlzLl9vbkZvY3VzKTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZW5kZXJp
bmdDYW52YXMpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdDYW52YXMucmVtb3Zl
RXZlbnRMaXN0ZW5lcigiZm9jdXMiLCB0aGlzLl9vbkNhbnZhc0ZvY3VzKTsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9yZW5kZXJpbmdDYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsIHRo
aXMuX29uQ2FudmFzQmx1cik7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nQ2FudmFz
LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJvdXQiLCB0aGlzLl9vbkNhbnZhc1BvaW50ZXJP
dXQpOworICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZG9Ob3RIYW5kbGVDb250ZXh0TG9zdCkg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdDYW52YXMucmVtb3ZlRXZlbnRM
aXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsIHRoaXMuX29uQ29udGV4dExvc3QpOworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdDYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
d2ViZ2xjb250ZXh0cmVzdG9yZWQiLCB0aGlzLl9vbkNvbnRleHRSZXN0b3JlZCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZl
bnRMaXN0ZW5lcigiZnVsbHNjcmVlbmNoYW5nZSIsIHRoaXMuX29uRnVsbHNjcmVlbkNoYW5nZSk7
CisgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3pmdWxsc2NyZWVu
Y2hhbmdlIiwgdGhpcy5fb25GdWxsc2NyZWVuQ2hhbmdlKTsKKyAgICAgICAgICAgIGRvY3VtZW50
LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCB0aGlzLl9vbkZ1
bGxzY3JlZW5DaGFuZ2UpOworICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5l
cigibXNmdWxsc2NyZWVuY2hhbmdlIiwgdGhpcy5fb25GdWxsc2NyZWVuQ2hhbmdlKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJsb2NrY2hhbmdlIiwg
dGhpcy5fb25Qb2ludGVyTG9ja0NoYW5nZSk7CisgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVF
dmVudExpc3RlbmVyKCJtc3BvaW50ZXJsb2NrY2hhbmdlIiwgdGhpcy5fb25Qb2ludGVyTG9ja0No
YW5nZSk7CisgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3pwb2lu
dGVybG9ja2NoYW5nZSIsIHRoaXMuX29uUG9pbnRlckxvY2tDaGFuZ2UpOworICAgICAgICAgICAg
ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2Via2l0cG9pbnRlcmxvY2tjaGFuZ2UiLCB0
aGlzLl9vblBvaW50ZXJMb2NrQ2hhbmdlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZW1vdmUg
ZnJvbSBJbnN0YW5jZXMKKyAgICAgICAgdmFyIGluZGV4ID0gRW5naW5lLkluc3RhbmNlcy5pbmRl
eE9mKHRoaXMpOworICAgICAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAgICAgICAgRW5naW5l
Lkluc3RhbmNlcy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3dv
cmtpbmdDYW52YXMgPSBudWxsOworICAgICAgICB0aGlzLl93b3JraW5nQ29udGV4dCA9IG51bGw7
CisgICAgICAgIHRoaXMuX2N1cnJlbnRCdWZmZXJQb2ludGVycyA9IFtdOworICAgICAgICB0aGlz
Ll9yZW5kZXJpbmdDYW52YXMgPSBudWxsOworICAgICAgICB0aGlzLl9jdXJyZW50UHJvZ3JhbSA9
IG51bGw7CisgICAgICAgIHRoaXMuX2JpbmRlZFJlbmRlckZ1bmN0aW9uID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5vblJlc2l6ZU9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkNhbnZh
c0JsdXJPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25DYW52YXNGb2N1c09ic2Vy
dmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkNhbnZhc1BvaW50ZXJPdXRPYnNlcnZhYmxl
LmNsZWFyKCk7CisgICAgICAgIHRoaXMub25CZWdpbkZyYW1lT2JzZXJ2YWJsZS5jbGVhcigpOwor
ICAgICAgICB0aGlzLm9uRW5kRnJhbWVPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIF9NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVmZmVjdCJdLlJlc2V0
Q2FjaGUoKTsKKyAgICAgICAgLy8gQWJvcnQgYWN0aXZlIHJlcXVlc3RzCisgICAgICAgIGZvciAo
dmFyIF9pID0gMCwgX2EgPSB0aGlzLl9hY3RpdmVSZXF1ZXN0czsgX2kgPCBfYS5sZW5ndGg7IF9p
KyspIHsKKyAgICAgICAgICAgIHZhciByZXF1ZXN0ID0gX2FbX2ldOworICAgICAgICAgICAgcmVx
dWVzdC5hYm9ydCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvLyBMb2FkaW5nIHNjcmVlbgor
ICAgIC8qKgorICAgICAqIERpc3BsYXkgdGhlIGxvYWRpbmcgc2NyZWVuCisgICAgICogQHNlZSBo
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2NyZWF0aW5nX2FfY3VzdG9tX2xvYWRpbmdf
c2NyZWVuCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5kaXNwbGF5TG9hZGluZ1VJID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIV9NaXNjX2RvbU1hbmFnZW1lbnRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfX1siRG9tTWFuYWdlbWVudCJdLklzV2luZG93T2JqZWN0RXhpc3Qo
KSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBsb2FkaW5n
U2NyZWVuID0gdGhpcy5sb2FkaW5nU2NyZWVuOworICAgICAgICBpZiAobG9hZGluZ1NjcmVlbikg
eworICAgICAgICAgICAgbG9hZGluZ1NjcmVlbi5kaXNwbGF5TG9hZGluZ1VJKCk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEhpZGUgdGhlIGxvYWRpbmcgc2NyZWVuCisgICAg
ICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2NyZWF0aW5nX2FfY3VzdG9t
X2xvYWRpbmdfc2NyZWVuCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5oaWRlTG9hZGlu
Z1VJID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIV9NaXNjX2RvbU1hbmFnZW1lbnRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siRG9tTWFuYWdlbWVudCJdLklzV2luZG93T2JqZWN0
RXhpc3QoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBs
b2FkaW5nU2NyZWVuID0gdGhpcy5fbG9hZGluZ1NjcmVlbjsKKyAgICAgICAgaWYgKGxvYWRpbmdT
Y3JlZW4pIHsKKyAgICAgICAgICAgIGxvYWRpbmdTY3JlZW4uaGlkZUxvYWRpbmdVSSgpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lLnByb3RvdHlw
ZSwgImxvYWRpbmdTY3JlZW4iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBj
dXJyZW50IGxvYWRpbmcgc2NyZWVuIG9iamVjdAorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vY3JlYXRpbmdfYV9jdXN0b21fbG9hZGluZ19zY3JlZW4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0
aGlzLl9sb2FkaW5nU2NyZWVuICYmIHRoaXMuX3JlbmRlcmluZ0NhbnZhcykgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2xvYWRpbmdTY3JlZW4gPSBFbmdpbmUuRGVmYXVsdExvYWRpbmdTY3JlZW5G
YWN0b3J5KHRoaXMuX3JlbmRlcmluZ0NhbnZhcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fbG9hZGluZ1NjcmVlbjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNldHMgdGhlIGN1cnJlbnQgbG9hZGluZyBzY3JlZW4gb2JqZWN0CisgICAgICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jcmVhdGluZ19hX2N1c3Rv
bV9sb2FkaW5nX3NjcmVlbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9h
ZGluZ1NjcmVlbikgeworICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1NjcmVlbiA9IGxvYWRpbmdT
Y3JlZW47CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmdp
bmUucHJvdG90eXBlLCAibG9hZGluZ1VJVGV4dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFNldHMgdGhlIGN1cnJlbnQgbG9hZGluZyBzY3JlZW4gdGV4dAorICAgICAgICAgKiBAc2VlIGh0
dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3JlYXRpbmdfYV9jdXN0b21fbG9hZGluZ19z
Y3JlZW4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpIHsKKyAgICAg
ICAgICAgIHRoaXMubG9hZGluZ1NjcmVlbi5sb2FkaW5nVUlUZXh0ID0gdGV4dDsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuZ2luZS5wcm90b3R5cGUsICJs
b2FkaW5nVUlCYWNrZ3JvdW5kQ29sb3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRz
IHRoZSBjdXJyZW50IGxvYWRpbmcgc2NyZWVuIGJhY2tncm91bmQgY29sb3IKKyAgICAgICAgICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2NyZWF0aW5nX2FfY3VzdG9tX2xv
YWRpbmdfc2NyZWVuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb2xvcikg
eworICAgICAgICAgICAgdGhpcy5sb2FkaW5nU2NyZWVuLmxvYWRpbmdVSUJhY2tncm91bmRDb2xv
ciA9IGNvbG9yOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2ggYSBu
ZXcgY2FsbGJhY2sgcmFpc2VkIHdoZW4gY29udGV4dCBsb3N0IGV2ZW50IGlzIGZpcmVkCisgICAg
ICogQHBhcmFtIGNhbGxiYWNrIGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIGNhbGwKKyAgICAgKi8K
KyAgICBFbmdpbmUucHJvdG90eXBlLmF0dGFjaENvbnRleHRMb3N0RXZlbnQgPSBmdW5jdGlvbiAo
Y2FsbGJhY2spIHsKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmluZ0NhbnZhcykgeworICAgICAg
ICAgICAgdGhpcy5fcmVuZGVyaW5nQ2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4
dGxvc3QiLCBjYWxsYmFjaywgZmFsc2UpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBdHRhY2ggYSBuZXcgY2FsbGJhY2sgcmFpc2VkIHdoZW4gY29udGV4dCByZXN0b3JlZCBl
dmVudCBpcyBmaXJlZAorICAgICAqIEBwYXJhbSBjYWxsYmFjayBkZWZpbmVzIHRoZSBjYWxsYmFj
ayB0byBjYWxsCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5hdHRhY2hDb250ZXh0UmVz
dG9yZWRFdmVudCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICBpZiAodGhpcy5fcmVu
ZGVyaW5nQ2FudmFzKSB7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdDYW52YXMuYWRkRXZl
bnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCBjYWxsYmFjaywgZmFsc2UpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzb3VyY2UgY29kZSBvZiB0
aGUgdmVydGV4IHNoYWRlciBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyB3ZWJHTCBwcm9ncmFt
CisgICAgICogQHBhcmFtIHByb2dyYW0gZGVmaW5lcyB0aGUgcHJvZ3JhbSB0byB1c2UKKyAgICAg
KiBAcmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgdmVy
dGV4IHNoYWRlciBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2dyYW0KKyAgICAgKi8KKyAgICBFbmdp
bmUucHJvdG90eXBlLmdldFZlcnRleFNoYWRlclNvdXJjZSA9IGZ1bmN0aW9uIChwcm9ncmFtKSB7
CisgICAgICAgIHZhciBzaGFkZXJzID0gdGhpcy5fZ2wuZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dy
YW0pOworICAgICAgICBpZiAoIXNoYWRlcnMpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nbC5nZXRTaGFkZXJTb3VyY2Uoc2hhZGVy
c1swXSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzb3VyY2UgY29kZSBvZiB0
aGUgZnJhZ21lbnQgc2hhZGVyIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIHdlYkdMIHByb2dy
YW0KKyAgICAgKiBAcGFyYW0gcHJvZ3JhbSBkZWZpbmVzIHRoZSBwcm9ncmFtIHRvIHVzZQorICAg
ICAqIEByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBm
cmFnbWVudCBzaGFkZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9ncmFtCisgICAgICovCisgICAg
RW5naW5lLnByb3RvdHlwZS5nZXRGcmFnbWVudFNoYWRlclNvdXJjZSA9IGZ1bmN0aW9uIChwcm9n
cmFtKSB7CisgICAgICAgIHZhciBzaGFkZXJzID0gdGhpcy5fZ2wuZ2V0QXR0YWNoZWRTaGFkZXJz
KHByb2dyYW0pOworICAgICAgICBpZiAoIXNoYWRlcnMpIHsKKyAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nbC5nZXRTaGFkZXJTb3VyY2Uo
c2hhZGVyc1sxXSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgZXJy
b3IgY29kZSBvZiB0aGUgd2ViR0wgY29udGV4dAorICAgICAqIEByZXR1cm5zIHRoZSBlcnJvciBj
b2RlCisgICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2Nz
L1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2dldEVycm9yCisgICAgICovCisgICAgRW5n
aW5lLnByb3RvdHlwZS5nZXRFcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2dsLmdldEVycm9yKCk7CisgICAgfTsKKyAgICAvLyBGUFMKKyAgICAvKioKKyAgICAgKiBH
ZXRzIHRoZSBjdXJyZW50IGZyYW1lcmF0ZQorICAgICAqIEByZXR1cm5zIGEgbnVtYmVyIHJlcHJl
c2VudGluZyB0aGUgZnJhbWVyYXRlCisgICAgICovCisgICAgRW5naW5lLnByb3RvdHlwZS5nZXRG
cHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9mcHM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXRzIHRoZSB0aW1lIHNwZW50IGJldHdlZW4gY3VycmVudCBhbmQgcHJl
dmlvdXMgZnJhbWUKKyAgICAgKiBAcmV0dXJucyBhIG51bWJlciByZXByZXNlbnRpbmcgdGhlIGRl
bHRhIHRpbWUgaW4gbXMKKyAgICAgKi8KKyAgICBFbmdpbmUucHJvdG90eXBlLmdldERlbHRhVGlt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RlbHRhVGltZTsKKyAgICB9
OworICAgIEVuZ2luZS5wcm90b3R5cGUuX21lYXN1cmVGcHMgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX3BlcmZvcm1hbmNlTW9uaXRvci5zYW1wbGVGcmFtZSgpOworICAgICAgICB0aGlz
Ll9mcHMgPSB0aGlzLl9wZXJmb3JtYW5jZU1vbml0b3IuYXZlcmFnZUZQUzsKKyAgICAgICAgdGhp
cy5fZGVsdGFUaW1lID0gdGhpcy5fcGVyZm9ybWFuY2VNb25pdG9yLmluc3RhbnRhbmVvdXNGcmFt
ZVRpbWUgfHwgMDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3Rv
dHlwZS5fcmVhZFRleHR1cmVQaXhlbHMgPSBmdW5jdGlvbiAodGV4dHVyZSwgd2lkdGgsIGhlaWdo
dCwgZmFjZUluZGV4LCBsZXZlbCwgYnVmZmVyKSB7CisgICAgICAgIGlmIChmYWNlSW5kZXggPT09
IHZvaWQgMCkgeyBmYWNlSW5kZXggPSAtMTsgfQorICAgICAgICBpZiAobGV2ZWwgPT09IHZvaWQg
MCkgeyBsZXZlbCA9IDA7IH0KKyAgICAgICAgaWYgKGJ1ZmZlciA9PT0gdm9pZCAwKSB7IGJ1ZmZl
ciA9IG51bGw7IH0KKyAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CisgICAgICAgIGlmICghdGhp
cy5fZHVtbXlGcmFtZWJ1ZmZlcikgeworICAgICAgICAgICAgdmFyIGR1bW15ID0gZ2wuY3JlYXRl
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGlmICghZHVtbXkpIHsKKyAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgZHVtbXkgZnJhbWVidWZmZXIiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2R1bW15RnJhbWVidWZmZXIgPSBkdW1t
eTsKKyAgICAgICAgfQorICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIs
IHRoaXMuX2R1bW15RnJhbWVidWZmZXIpOworICAgICAgICBpZiAoZmFjZUluZGV4ID4gLTEpIHsK
KyAgICAgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5D
T0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUlu
ZGV4LCB0ZXh0dXJlLl93ZWJHTFRleHR1cmUsIGxldmVsKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVS
LCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fd2ViR0xUZXh0
dXJlLCBsZXZlbCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJlYWRUeXBlID0gKHRleHR1cmUu
dHlwZSAhPT0gdW5kZWZpbmVkKSA/IHRoaXMuX2dldFdlYkdMVGV4dHVyZVR5cGUodGV4dHVyZS50
eXBlKSA6IGdsLlVOU0lHTkVEX0JZVEU7CisgICAgICAgIHN3aXRjaCAocmVhZFR5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgZ2wuVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICBpZiAoIWJ1
ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBuZXcgVWludDhBcnJheSg0ICog
d2lkdGggKiBoZWlnaHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZWFk
VHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVhZFR5cGUgPSBnbC5GTE9BVDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBnbC5yZWFkUGl4ZWxz
KDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIHJlYWRUeXBlLCBidWZmZXIpOworICAgICAg
ICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuX2N1cnJlbnRGcmFtZWJ1
ZmZlcik7CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgfTsKKyAgICBFbmdpbmUucHJvdG90
eXBlLl9jYW5SZW5kZXJUb0Zsb2F0RnJhbWVidWZmZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICh0aGlzLl93ZWJHTFZlcnNpb24gPiAxKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
Y2Fwcy5jb2xvckJ1ZmZlckZsb2F0OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9j
YW5SZW5kZXJUb0ZyYW1lYnVmZmVyKEVuZ2luZS5URVhUVVJFVFlQRV9GTE9BVCk7CisgICAgfTsK
KyAgICBFbmdpbmUucHJvdG90eXBlLl9jYW5SZW5kZXJUb0hhbGZGbG9hdEZyYW1lYnVmZmVyID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fd2ViR0xWZXJzaW9uID4gMSkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHMuY29sb3JCdWZmZXJGbG9hdDsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpcy5fY2FuUmVuZGVyVG9GcmFtZWJ1ZmZlcihFbmdpbmUuVEVYVFVS
RVRZUEVfSEFMRl9GTE9BVCk7CisgICAgfTsKKyAgICAvLyBUaGFuayB5b3UgOiBodHRwOi8vc3Rh
Y2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI4ODI3NTExL3dlYmdsLWlvcy1yZW5kZXItdG8tZmxv
YXRpbmctcG9pbnQtdGV4dHVyZQorICAgIEVuZ2luZS5wcm90b3R5cGUuX2NhblJlbmRlclRvRnJh
bWVidWZmZXIgPSBmdW5jdGlvbiAodHlwZSkgeworICAgICAgICB2YXIgZ2wgPSB0aGlzLl9nbDsK
KyAgICAgICAgLy9jbGVhciBleGlzdGluZyBlcnJvcnMKKyAgICAgICAgd2hpbGUgKGdsLmdldEVy
cm9yKCkgIT09IGdsLk5PX0VSUk9SKSB7IH0KKyAgICAgICAgdmFyIHN1Y2Nlc3NmdWwgPSB0cnVl
OworICAgICAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgZ2wu
YmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgICAgIGdsLnRleEltYWdl
MkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5fZ2V0UkdCQUJ1ZmZlckludGVybmFsU2l6ZWRGb3Jt
YXQodHlwZSksIDEsIDEsIDAsIGdsLlJHQkEsIHRoaXMuX2dldFdlYkdMVGV4dHVyZVR5cGUodHlw
ZSksIG51bGwpOworICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRF
WFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgICAgIGdsLnRleFBhcmFtZXRlcmko
Z2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICAg
ICAgdmFyIGZiID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICAgICAgZ2wuYmluZEZyYW1l
YnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmYik7CisgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVy
ZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwg
dGV4dHVyZSwgMCk7CisgICAgICAgIHZhciBzdGF0dXMgPSBnbC5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKGdsLkZSQU1FQlVGRkVSKTsKKyAgICAgICAgc3VjY2Vzc2Z1bCA9IHN1Y2Nlc3NmdWwgJiYg
KHN0YXR1cyA9PT0gZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUpOworICAgICAgICBzdWNjZXNzZnVs
ID0gc3VjY2Vzc2Z1bCAmJiAoZ2wuZ2V0RXJyb3IoKSA9PT0gZ2wuTk9fRVJST1IpOworICAgICAg
ICAvL3RyeSByZW5kZXIgYnkgY2xlYXJpbmcgZnJhbWUgYnVmZmVyJ3MgY29sb3IgYnVmZmVyCisg
ICAgICAgIGlmIChzdWNjZXNzZnVsKSB7CisgICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9C
VUZGRVJfQklUKTsKKyAgICAgICAgICAgIHN1Y2Nlc3NmdWwgPSBzdWNjZXNzZnVsICYmIChnbC5n
ZXRFcnJvcigpID09PSBnbC5OT19FUlJPUik7CisgICAgICAgIH0KKyAgICAgICAgLy90cnkgcmVh
ZGluZyBmcm9tIGZyYW1lIHRvIGVuc3VyZSByZW5kZXIgb2NjdXJzIChqdXN0IGNyZWF0aW5nIHRo
ZSBGQk8gaXMgbm90IHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lIGlmIHJlbmRlcmluZyBpcyBzdXBw
b3J0ZWQpCisgICAgICAgIGlmIChzdWNjZXNzZnVsKSB7CisgICAgICAgICAgICAvL2luIHByYWN0
aWNlIGl0J3Mgc3VmZmljaWVudCB0byBqdXN0IHJlYWQgZnJvbSB0aGUgYmFja2J1ZmZlciByYXRo
ZXIgdGhhbiBoYW5kbGUgcG90ZW50aWFsbHkgaXNzdWVzIHJlYWRpbmcgZnJvbSB0aGUgdGV4dHVy
ZQorICAgICAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTsK
KyAgICAgICAgICAgIHZhciByZWFkRm9ybWF0ID0gZ2wuUkdCQTsKKyAgICAgICAgICAgIHZhciBy
ZWFkVHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7CisgICAgICAgICAgICB2YXIgYnVmZmVyID0gbmV3
IFVpbnQ4QXJyYXkoNCk7CisgICAgICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIDEsIDEsIHJl
YWRGb3JtYXQsIHJlYWRUeXBlLCBidWZmZXIpOworICAgICAgICAgICAgc3VjY2Vzc2Z1bCA9IHN1
Y2Nlc3NmdWwgJiYgKGdsLmdldEVycm9yKCkgPT09IGdsLk5PX0VSUk9SKTsKKyAgICAgICAgfQor
ICAgICAgICAvL2NsZWFuIHVwCisgICAgICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7Cisg
ICAgICAgIGdsLmRlbGV0ZUZyYW1lYnVmZmVyKGZiKTsKKyAgICAgICAgZ2wuYmluZEZyYW1lYnVm
ZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTsKKyAgICAgICAgLy9jbGVhciBhY2N1bXVsYXRlZCBl
cnJvcnMKKyAgICAgICAgd2hpbGUgKCFzdWNjZXNzZnVsICYmIChnbC5nZXRFcnJvcigpICE9PSBn
bC5OT19FUlJPUikpIHsgfQorICAgICAgICByZXR1cm4gc3VjY2Vzc2Z1bDsKKyAgICB9OworICAg
IC8qKiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fZ2V0V2ViR0xUZXh0dXJlVHlw
ZSA9IGZ1bmN0aW9uICh0eXBlKSB7CisgICAgICAgIGlmICh0aGlzLl93ZWJHTFZlcnNpb24gPT09
IDEpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
RW5naW5lLlRFWFRVUkVUWVBFX0ZMT0FUOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fZ2wuRkxPQVQ7CisgICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfSEFM
Rl9GTE9BVDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLkhBTEZfRkxPQVRf
T0VTOworICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0JZ
VEU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5VTlNJR05FRF9CWVRFOwor
ICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX1NIT1JUXzRf
NF80XzQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5VTlNJR05FRF9TSE9S
VF80XzRfNF80OworICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX1VOU0lH
TkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5V
TlNJR05FRF9TSE9SVF81XzVfNV8xOworICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRV
UkVUWVBFX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5fZ2wuVU5TSUdORURfU0hPUlRfNV82XzU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ2wuVU5TSUdORURfQllURTsKKyAgICAgICAgfQorICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX0JZVEU6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLkJZVEU7CisgICAgICAgICAgICBjYXNlIEVu
Z2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLl9nbC5VTlNJR05FRF9CWVRFOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZ
UEVfU0hPUlQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlNIT1JUOworICAgICAg
ICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2dsLlVOU0lHTkVEX1NIT1JUOworICAgICAgICAgICAgY2FzZSBF
bmdpbmUuVEVYVFVSRVRZUEVfSU5UOgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5J
TlQ7CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlRFR0VS
OiAvLyBSZWZlcnMgdG8gVU5TSUdORURfSU5UCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2dsLlVOU0lHTkVEX0lOVDsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX0ZM
T0FUOgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5GTE9BVDsKKyAgICAgICAgICAg
IGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX0hBTEZfRkxPQVQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2dsLkhBTEZfRkxPQVQ7CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJF
VFlQRV9VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9nbC5VTlNJR05FRF9TSE9SVF80XzRfNF80OworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVY
VFVSRVRZUEVfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5fZ2wuVU5TSUdORURfU0hPUlRfNV81XzVfMTsKKyAgICAgICAgICAgIGNhc2UgRW5naW5l
LlRFWFRVUkVUWVBFX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLl9nbC5VTlNJR05FRF9TSE9SVF81XzZfNTsKKyAgICAgICAgICAgIGNhc2UgRW5naW5l
LlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ2wuVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOworICAgICAgICAg
ICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UXzI0Xzg6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2dsLlVOU0lHTkVEX0lOVF8yNF84OworICAgICAgICAgICAgY2Fz
ZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjsK
KyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVF81XzlfOV85
X1JFVjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuVU5TSUdORURfSU5UXzVfOV85
XzlfUkVWOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfRkxPQVRfMzJfVU5T
SUdORURfSU5UXzI0XzhfUkVWOgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5GTE9B
VF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXMuX2dsLlVOU0lHTkVEX0JZVEU7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEVu
Z2luZS5wcm90b3R5cGUuX2dldEludGVybmFsRm9ybWF0ID0gZnVuY3Rpb24gKGZvcm1hdCkgewor
ICAgICAgICB2YXIgaW50ZXJuYWxGb3JtYXQgPSB0aGlzLl9nbC5SR0JBOworICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9BTFBI
QToKKyAgICAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IHRoaXMuX2dsLkFMUEhBOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1B
VF9MVU1JTkFOQ0U6CisgICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSB0aGlzLl9nbC5M
VU1JTkFOQ0U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVuZ2lu
ZS5URVhUVVJFRk9STUFUX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgICAgICBpbnRlcm5h
bEZvcm1hdCA9IHRoaXMuX2dsLkxVTUlOQU5DRV9BTFBIQTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkVEOgorICAgICAgICAg
ICAgICAgIGludGVybmFsRm9ybWF0ID0gdGhpcy5fZ2wuUkVEOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SRzoKKyAgICAgICAg
ICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IHRoaXMuX2dsLlJHOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0I6CisgICAgICAg
ICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSB0aGlzLl9nbC5SR0I7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQkE6CisgICAg
ICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSB0aGlzLl9nbC5SR0JBOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl93ZWJHTFZlcnNpb24gPiAx
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAgICAgICAgIGNhc2Ug
RW5naW5lLlRFWFRVUkVGT1JNQVRfUkVEX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgIGlu
dGVybmFsRm9ybWF0ID0gdGhpcy5fZ2wuUkVEX0lOVEVHRVI7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdfSU5U
RUdFUjoKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSB0aGlzLl9nbC5SR19J
TlRFR0VSOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQl9JTlRFR0VSOgorICAgICAgICAgICAgICAgICAgICBp
bnRlcm5hbEZvcm1hdCA9IHRoaXMuX2dsLlJHQl9JTlRFR0VSOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQkFf
SU5URUdFUjoKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSB0aGlzLl9nbC5S
R0JBX0lOVEVHRVI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdDsKKyAgICB9OworICAgIC8q
KiBAaGlkZGVuICovCisgICAgRW5naW5lLnByb3RvdHlwZS5fZ2V0UkdCQUJ1ZmZlckludGVybmFs
U2l6ZWRGb3JtYXQgPSBmdW5jdGlvbiAodHlwZSwgZm9ybWF0KSB7CisgICAgICAgIGlmICh0aGlz
Ll93ZWJHTFZlcnNpb24gPT09IDEpIHsKKyAgICAgICAgICAgIGlmIChmb3JtYXQgIT09IHVuZGVm
aW5lZCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfQUxQSEE6CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fZ2wuQUxQSEE7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RW5naW5lLlRFWFRVUkVGT1JNQVRfTFVNSU5BTkNFOgorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2dsLkxVTUlOQU5DRTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdp
bmUuVEVYVFVSRUZPUk1BVF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ2wuTFVNSU5BTkNFX0FMUEhBOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0JBOworICAgICAgICB9
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVS
RVRZUEVfQllURToKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JFRDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SOF9TTk9STTsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SRzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9nbC5SRzhfU05PUk07CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5l
LlRFWFRVUkVGT1JNQVRfUkdCOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2dsLlJHQjhfU05PUk07CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVG
T1JNQVRfUkVEX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
Z2wuUjhJOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JH
X0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkc4STsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JfSU5URUdF
UjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0I4STsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBX0lOVEVHRVI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQThJOworICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2dsLlJHQkE4X1NOT1JNOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRW5n
aW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgc3dpdGNoIChm
b3JtYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9S
RUQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUjg7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkc6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkc4OworICAgICAgICAgICAgICAgICAgICBjYXNl
IEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLl9nbC5SR0I4OyAvLyBCeSBkZWZhdWx0LiBPdGhlciBwb3NzaWJpbGl0aWVzIGFyZSBS
R0I1NjUsIFNSR0I4LgorICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9S
TUFUX1JHQkE6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQTg7
IC8vIEJ5IGRlZmF1bHQuIE90aGVyIHBvc3NpYmlsaXRpZXMgYXJlIFJHQjVfQTEsIFJHQkE0LCBT
UkdCOF9BTFBIQTguCisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JN
QVRfUkVEX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wu
UjhVSTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR19J
TlRFR0VSOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHOFVJOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQl9JTlRFR0VS
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQjhVSTsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBX0lOVEVHRVI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQThVSTsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9BTFBIQToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5BTFBIQTsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9MVU1JTkFOQ0U6CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fZ2wuTFVNSU5BTkNFOworICAgICAgICAgICAgICAgICAgICBjYXNl
IEVuZ2luZS5URVhUVVJFRk9STUFUX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9nbC5MVU1JTkFOQ0VfQUxQSEE7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdC
QTg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZ
UEVfU0hPUlQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SRURfSU5URUdFUjoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SMTZJOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JHX0lOVEVHRVI6CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkcxNkk7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ2wuUkdCMTZJOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2lu
ZS5URVhUVVJFRk9STUFUX1JHQkFfSU5URUdFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9nbC5SR0JBMTZJOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQkExNkk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfU0hP
UlQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SRURfSU5URUdFUjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SMTZVSTsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR19JTlRFR0VSOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2dsLlJHMTZVSTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdp
bmUuVEVYVFVSRUZPUk1BVF9SR0JfSU5URUdFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9nbC5SR0IxNlVJOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5U
RVhUVVJFRk9STUFUX1JHQkFfSU5URUdFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLl9nbC5SR0JBMTZVSTsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0JBMTZVSTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFVFlQRV9JTlQ6CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdp
bmUuVEVYVFVSRUZPUk1BVF9SRURfSU5URUdFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9nbC5SMzJJOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhU
VVJFRk9STUFUX1JHX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fZ2wuUkczMkk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JN
QVRfUkdCX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wu
UkdCMzJJOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFRk9STUFUX1JH
QkFfSU5URUdFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0JB
MzJJOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2dsLlJHQkEzMkk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5URUdFUjogLy8gUmVmZXJzIHRv
IFVOU0lHTkVEX0lOVAorICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkVEX0lOVEVHRVI6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUjMyVUk7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdfSU5URUdFUjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SRzMyVUk7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCX0lOVEVHRVI6CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCMzJVSTsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBX0lOVEVHRVI6CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQTMyVUk7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQTMyVUk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfRkxP
QVQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SRUQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ2wuUjMyRjsgLy8gQnkgZGVmYXVsdC4gT3RoZXIgcG9zc2liaWxpdHkg
aXMgUjE2Ri4KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9S
RzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SRzMyRjsgLy8gQnkg
ZGVmYXVsdC4gT3RoZXIgcG9zc2liaWxpdHkgaXMgUkcxNkYuCisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCOgorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2dsLlJHQjMyRjsgLy8gQnkgZGVmYXVsdC4gT3RoZXIgcG9zc2liaWxpdGll
cyBhcmUgUkdCMTZGLCBSMTFGX0cxMUZfQjEwRiwgUkdCOV9FNS4KKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2dsLlJHQkEzMkY7IC8vIEJ5IGRlZmF1bHQuIE90aGVyIHBvc3NpYmls
aXR5IGlzIFJHQkExNkYuCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQTMyRjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEVuZ2luZS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUOgorICAgICAg
ICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5n
aW5lLlRFWFRVUkVGT1JNQVRfUkVEOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2dsLlIxNkY7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JN
QVRfUkc6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkcxNkY7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQjE2RjsgLy8gQnkgZGVmYXVsdC4g
T3RoZXIgcG9zc2liaWxpdGllcyBhcmUgUjExRl9HMTFGX0IxMEYsIFJHQjlfRTUuCisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCQToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0JBMTZGOworICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQkEx
NkY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZ
UEVfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ds
LlJHQjU2NTsKKyAgICAgICAgICAgIGNhc2UgRW5naW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lO
VF8xMEZfMTFGXzExRl9SRVY6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlIxMUZf
RzExRl9CMTBGOworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURf
SU5UXzVfOV85XzlfUkVWOgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0I5X0U1
OworICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfU0hPUlRfNF80
XzRfNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQTQ7CisgICAgICAgICAg
ICBjYXNlIEVuZ2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9nbC5SR0I1X0ExOworICAgICAgICAgICAgY2FzZSBFbmdp
bmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAgICAgICAg
ICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRW5naW5lLlRF
WFRVUkVGT1JNQVRfUkdCQToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9n
bC5SR0IxMF9BMjsgLy8gQnkgZGVmYXVsdC4gT3RoZXIgcG9zc2liaWxpdHkgaXMgUkdCNV9BMS4K
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBX0lOVEVH
RVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCMTBfQTJVSTsK
KyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9nbC5SR0IxMF9BMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQkE4OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBFbmdpbmUucHJvdG90eXBlLl9nZXRSR0JBTXVsdGlTYW1wbGVCdWZmZXJGb3JtYXQgPSBm
dW5jdGlvbiAodHlwZSkgeworICAgICAgICBpZiAodHlwZSA9PT0gRW5naW5lLlRFWFRVUkVUWVBF
X0ZMT0FUKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2wuUkdCQTMyRjsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmICh0eXBlID09PSBFbmdpbmUuVEVYVFVSRVRZUEVfSEFMRl9GTE9B
VCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQkExNkY7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2dsLlJHQkE4OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBFbmdpbmUucHJvdG90eXBlLl9sb2FkRmlsZSA9IGZ1bmN0aW9uICh1cmwsIG9uU3VjY2Vz
cywgb25Qcm9ncmVzcywgb2ZmbGluZVByb3ZpZGVyLCB1c2VBcnJheUJ1ZmZlciwgb25FcnJvcikg
eworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgcmVxdWVzdCA9IF9NaXNj
X2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siRmlsZVRvb2xzIl0uTG9h
ZEZpbGUodXJsLCBvblN1Y2Nlc3MsIG9uUHJvZ3Jlc3MsIG9mZmxpbmVQcm92aWRlciwgdXNlQXJy
YXlCdWZmZXIsIG9uRXJyb3IpOworICAgICAgICB0aGlzLl9hY3RpdmVSZXF1ZXN0cy5wdXNoKHJl
cXVlc3QpOworICAgICAgICByZXF1ZXN0Lm9uQ29tcGxldGVPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAocmVxdWVzdCkgeworICAgICAgICAgICAgX3RoaXMuX2FjdGl2ZVJlcXVlc3RzLnNwbGljZShf
dGhpcy5fYWN0aXZlUmVxdWVzdHMuaW5kZXhPZihyZXF1ZXN0KSwgMSk7CisgICAgICAgIH0pOwor
ICAgICAgICByZXR1cm4gcmVxdWVzdDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAg
RW5naW5lLnByb3RvdHlwZS5fbG9hZEZpbGVBc3luYyA9IGZ1bmN0aW9uICh1cmwsIG9mZmxpbmVQ
cm92aWRlciwgdXNlQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAg
ICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAg
ICAgICAgICAgIF90aGlzLl9sb2FkRmlsZSh1cmwsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAg
ICAgICAgICAgcmVzb2x2ZShkYXRhKTsKKyAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgb2ZmbGlu
ZVByb3ZpZGVyLCB1c2VBcnJheUJ1ZmZlciwgZnVuY3Rpb24gKHJlcXVlc3QsIGV4Y2VwdGlvbikg
eworICAgICAgICAgICAgICAgIHJlamVjdChleGNlcHRpb24pOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBFbmdpbmUucHJvdG90
eXBlLl9zaG91bGRPbmx5VXBkYXRlQ2FtZXJhcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CisgICAgLy8gU3RhdGljcworICAgIC8qKgorICAgICAqIEdldHMg
YSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGVuZ2luZSBjYW4gYmUgaW5zdGFuY2lhdGVkIChp
ZS4gaWYgYSB3ZWJHTCBjb250ZXh0IGNhbiBiZSBmb3VuZCkKKyAgICAgKiBAcmV0dXJucyB0cnVl
IGlmIHRoZSBlbmdpbmUgY2FuIGJlIGNyZWF0ZWQKKyAgICAgKiBAaWdub3JlbmFtaW5nCisgICAg
ICovCisgICAgRW5naW5lLmlzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0cnkg
eworICAgICAgICAgICAgdmFyIHRlbXBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJj
YW52YXMiKTsKKyAgICAgICAgICAgIHZhciBnbCA9IHRlbXBjYW52YXMuZ2V0Q29udGV4dCgid2Vi
Z2wiKSB8fCB0ZW1wY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIpOworICAg
ICAgICAgICAgcmV0dXJuIGdsICE9IG51bGwgJiYgISF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250
ZXh0OworICAgICAgICB9CisgICAgICAgIGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEZpbmQgdGhlIG5leHQg
aGlnaGVzdCBwb3dlciBvZiB0d28uCisgICAgICogQHBhcmFtIHggTnVtYmVyIHRvIHN0YXJ0IHNl
YXJjaCBmcm9tLgorICAgICAqIEByZXR1cm4gTmV4dCBoaWdoZXN0IHBvd2VyIG9mIHR3by4KKyAg
ICAgKi8KKyAgICBFbmdpbmUuQ2VpbGluZ1BPVCA9IGZ1bmN0aW9uICh4KSB7CisgICAgICAgIHgt
LTsKKyAgICAgICAgeCB8PSB4ID4+IDE7CisgICAgICAgIHggfD0geCA+PiAyOworICAgICAgICB4
IHw9IHggPj4gNDsKKyAgICAgICAgeCB8PSB4ID4+IDg7CisgICAgICAgIHggfD0geCA+PiAxNjsK
KyAgICAgICAgeCsrOworICAgICAgICByZXR1cm4geDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEZpbmQgdGhlIG5leHQgbG93ZXN0IHBvd2VyIG9mIHR3by4KKyAgICAgKiBAcGFyYW0geCBOdW1i
ZXIgdG8gc3RhcnQgc2VhcmNoIGZyb20uCisgICAgICogQHJldHVybiBOZXh0IGxvd2VzdCBwb3dl
ciBvZiB0d28uCisgICAgICovCisgICAgRW5naW5lLkZsb29yUE9UID0gZnVuY3Rpb24gKHgpIHsK
KyAgICAgICAgeCA9IHggfCAoeCA+PiAxKTsKKyAgICAgICAgeCA9IHggfCAoeCA+PiAyKTsKKyAg
ICAgICAgeCA9IHggfCAoeCA+PiA0KTsKKyAgICAgICAgeCA9IHggfCAoeCA+PiA4KTsKKyAgICAg
ICAgeCA9IHggfCAoeCA+PiAxNik7CisgICAgICAgIHJldHVybiB4IC0gKHggPj4gMSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBGaW5kIHRoZSBuZWFyZXN0IHBvd2VyIG9mIHR3by4KKyAgICAg
KiBAcGFyYW0geCBOdW1iZXIgdG8gc3RhcnQgc2VhcmNoIGZyb20uCisgICAgICogQHJldHVybiBO
ZXh0IG5lYXJlc3QgcG93ZXIgb2YgdHdvLgorICAgICAqLworICAgIEVuZ2luZS5OZWFyZXN0UE9U
ID0gZnVuY3Rpb24gKHgpIHsKKyAgICAgICAgdmFyIGMgPSBFbmdpbmUuQ2VpbGluZ1BPVCh4KTsK
KyAgICAgICAgdmFyIGYgPSBFbmdpbmUuRmxvb3JQT1QoeCk7CisgICAgICAgIHJldHVybiAoYyAt
IHgpID4gKHggLSBmKSA/IGYgOiBjOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBj
bG9zZXN0IGV4cG9uZW50IG9mIHR3bworICAgICAqIEBwYXJhbSB2YWx1ZSBkZWZpbmVzIHRoZSB2
YWx1ZSB0byBhcHByb3hpbWF0ZQorICAgICAqIEBwYXJhbSBtYXggZGVmaW5lcyB0aGUgbWF4aW11
bSB2YWx1ZSB0byByZXR1cm4KKyAgICAgKiBAcGFyYW0gbW9kZSBkZWZpbmVzIGhvdyB0byBkZWZp
bmUgdGhlIGNsb3Nlc3QgdmFsdWUKKyAgICAgKiBAcmV0dXJucyBjbG9zZXN0IGV4cG9uZW50IG9m
IHR3byBvZiB0aGUgZ2l2ZW4gdmFsdWUKKyAgICAgKi8KKyAgICBFbmdpbmUuR2V0RXhwb25lbnRP
ZlR3byA9IGZ1bmN0aW9uICh2YWx1ZSwgbWF4LCBtb2RlKSB7CisgICAgICAgIGlmIChtb2RlID09
PSB2b2lkIDApIHsgbW9kZSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
X1siQ29uc3RhbnRzIl0uU0NBTEVNT0RFX05FQVJFU1Q7IH0KKyAgICAgICAgdmFyIHBvdDsKKyAg
ICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uU0NBTEVNT0RFX0ZMT09SOgorICAg
ICAgICAgICAgICAgIHBvdCA9IEVuZ2luZS5GbG9vclBPVCh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uU0NBTEVNT0RFX05FQVJFU1Q6CisgICAgICAgICAgICAg
ICAgcG90ID0gRW5naW5lLk5lYXJlc3RQT1QodmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83
X19bIkNvbnN0YW50cyJdLlNDQUxFTU9ERV9DRUlMSU5HOgorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBwb3QgPSBFbmdpbmUuQ2VpbGluZ1BPVCh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE1hdGgubWluKHBvdCwg
bWF4KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFF1ZXVlIGEgbmV3IGZ1bmN0aW9uIGludG8g
dGhlIHJlcXVlc3RlZCBhbmltYXRpb24gZnJhbWUgcG9vbCAoaWUuIHRoaXMgZnVuY3Rpb24gd2ls
bCBiZSBleGVjdXRlZCBieXQgdGhlIGJyb3dzZXIgZm9yIHRoZSBuZXh0IGZyYW1lKQorICAgICAq
IEBwYXJhbSBmdW5jIC0gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZAorICAgICAqIEBwYXJhbSBy
ZXF1ZXN0ZXIgLSB0aGUgb2JqZWN0IHRoYXQgd2lsbCByZXF1ZXN0IHRoZSBuZXh0IGZyYW1lLiBG
YWxscyBiYWNrIHRvIHdpbmRvdy4KKyAgICAgKiBAcmV0dXJucyBmcmFtZSBudW1iZXIKKyAgICAg
Ki8KKyAgICBFbmdpbmUuUXVldWVOZXdGcmFtZSA9IGZ1bmN0aW9uIChmdW5jLCByZXF1ZXN0ZXIp
IHsKKyAgICAgICAgaWYgKCFfTWlzY19kb21NYW5hZ2VtZW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIkRvbU1hbmFnZW1lbnQiXS5Jc1dpbmRvd09iamVjdEV4aXN0KCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmMsIDE2KTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXJlcXVlc3RlcikgeworICAgICAgICAgICAgcmVxdWVzdGVyID0gd2luZG93OworICAgICAg
ICB9CisgICAgICAgIGlmIChyZXF1ZXN0ZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7CisgICAg
ICAgICAgICByZXR1cm4gcmVxdWVzdGVyLnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChyZXF1ZXN0ZXIubXNSZXF1ZXN0QW5pbWF0aW9uRnJh
bWUpIHsKKyAgICAgICAgICAgIHJldHVybiByZXF1ZXN0ZXIubXNSZXF1ZXN0QW5pbWF0aW9uRnJh
bWUoZnVuYyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocmVxdWVzdGVyLndlYmtpdFJl
cXVlc3RBbmltYXRpb25GcmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Rlci53ZWJr
aXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuYyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAocmVxdWVzdGVyLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSkgeworICAgICAgICAgICAgcmV0
dXJuIHJlcXVlc3Rlci5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuYyk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAocmVxdWVzdGVyLm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHsKKyAg
ICAgICAgICAgIHJldHVybiByZXF1ZXN0ZXIub1JlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3cuc2V0
VGltZW91dChmdW5jLCAxNik7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEFz
ayB0aGUgYnJvd3NlciB0byBwcm9tb3RlIHRoZSBjdXJyZW50IGVsZW1lbnQgdG8gcG9pbnRlcmxv
Y2sgbW9kZQorICAgICAqIEBwYXJhbSBlbGVtZW50IGRlZmluZXMgdGhlIERPTSBlbGVtZW50IHRv
IHByb21vdGUKKyAgICAgKi8KKyAgICBFbmdpbmUuX1JlcXVlc3RQb2ludGVybG9jayA9IGZ1bmN0
aW9uIChlbGVtZW50KSB7CisgICAgICAgIGVsZW1lbnQucmVxdWVzdFBvaW50ZXJMb2NrID0gZWxl
bWVudC5yZXF1ZXN0UG9pbnRlckxvY2sgfHwgZWxlbWVudC5tc1JlcXVlc3RQb2ludGVyTG9jayB8
fCBlbGVtZW50Lm1velJlcXVlc3RQb2ludGVyTG9jayB8fCBlbGVtZW50LndlYmtpdFJlcXVlc3RQ
b2ludGVyTG9jazsKKyAgICAgICAgaWYgKGVsZW1lbnQucmVxdWVzdFBvaW50ZXJMb2NrKSB7Cisg
ICAgICAgICAgICBlbGVtZW50LnJlcXVlc3RQb2ludGVyTG9jaygpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBc2tzIHRoZSBicm93c2VyIHRvIGV4aXQgcG9pbnRlcmxvY2sg
bW9kZQorICAgICAqLworICAgIEVuZ2luZS5fRXhpdFBvaW50ZXJsb2NrID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgYW55RG9jID0gZG9jdW1lbnQ7CisgICAgICAgIGRvY3VtZW50LmV4aXRQ
b2ludGVyTG9jayA9IGRvY3VtZW50LmV4aXRQb2ludGVyTG9jayB8fCBhbnlEb2MubXNFeGl0UG9p
bnRlckxvY2sgfHwgYW55RG9jLm1vekV4aXRQb2ludGVyTG9jayB8fCBhbnlEb2Mud2Via2l0RXhp
dFBvaW50ZXJMb2NrOworICAgICAgICBpZiAoZG9jdW1lbnQuZXhpdFBvaW50ZXJMb2NrKSB7Cisg
ICAgICAgICAgICBkb2N1bWVudC5leGl0UG9pbnRlckxvY2soKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogQXNrIHRoZSBicm93c2VyIHRvIHByb21vdGUgdGhlIGN1cnJlbnQg
ZWxlbWVudCB0byBmdWxsc2NyZWVuIHJlbmRlcmluZyBtb2RlCisgICAgICogQHBhcmFtIGVsZW1l
bnQgZGVmaW5lcyB0aGUgRE9NIGVsZW1lbnQgdG8gcHJvbW90ZQorICAgICAqLworICAgIEVuZ2lu
ZS5fUmVxdWVzdEZ1bGxzY3JlZW4gPSBmdW5jdGlvbiAoZWxlbWVudCkgeworICAgICAgICB2YXIg
cmVxdWVzdEZ1bmN0aW9uID0gZWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbiB8fCBlbGVtZW50Lm1z
UmVxdWVzdEZ1bGxzY3JlZW4gfHwgZWxlbWVudC53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiB8fCBl
bGVtZW50Lm1velJlcXVlc3RGdWxsU2NyZWVuOworICAgICAgICBpZiAoIXJlcXVlc3RGdW5jdGlv
bikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlcXVlc3RGdW5j
dGlvbi5jYWxsKGVsZW1lbnQpOworICAgIH07CisgICAgLyoqCisgICAgICogQXNrcyB0aGUgYnJv
d3NlciB0byBleGl0IGZ1bGxzY3JlZW4gbW9kZQorICAgICAqLworICAgIEVuZ2luZS5fRXhpdEZ1
bGxzY3JlZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBhbnlEb2MgPSBkb2N1bWVudDsK
KyAgICAgICAgaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7CisgICAgICAgICAgICBkb2N1
bWVudC5leGl0RnVsbHNjcmVlbigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFueURv
Yy5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7CisgICAgICAgICAgICBhbnlEb2MubW96Q2FuY2VsRnVs
bFNjcmVlbigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFueURvYy53ZWJraXRDYW5j
ZWxGdWxsU2NyZWVuKSB7CisgICAgICAgICAgICBhbnlEb2Mud2Via2l0Q2FuY2VsRnVsbFNjcmVl
bigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFueURvYy5tc0NhbmNlbEZ1bGxTY3Jl
ZW4pIHsKKyAgICAgICAgICAgIGFueURvYy5tc0NhbmNlbEZ1bGxTY3JlZW4oKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqIFVzZSB0aGlzIGFycmF5IHRvIHR1cm4gb2ZmIHNvbWUgV2ViR0wy
IGZlYXR1cmVzIG9uIGtub3duIGJ1Z2d5IGJyb3dzZXJzIHZlcnNpb24gKi8KKyAgICBFbmdpbmUu
RXhjZXB0aW9uTGlzdCA9IFsKKyAgICAgICAgeyBrZXk6ICJDaHJvbWVcLzYzXC4wIiwgY2FwdHVy
ZTogIjYzXFwuMFxcLjMyMzlcXC4oXFxkKykiLCBjYXB0dXJlQ29uc3RyYWludDogMTA4LCB0YXJn
ZXRzOiBbInVuaWZvcm1CdWZmZXIiXSB9LAorICAgICAgICB7IGtleTogIkZpcmVmb3hcLzU4Iiwg
Y2FwdHVyZTogbnVsbCwgY2FwdHVyZUNvbnN0cmFpbnQ6IG51bGwsIHRhcmdldHM6IFsidW5pZm9y
bUJ1ZmZlciJdIH0sCisgICAgICAgIHsga2V5OiAiRmlyZWZveFwvNTkiLCBjYXB0dXJlOiBudWxs
LCBjYXB0dXJlQ29uc3RyYWludDogbnVsbCwgdGFyZ2V0czogWyJ1bmlmb3JtQnVmZmVyIl0gfSwK
KyAgICAgICAgeyBrZXk6ICJDaHJvbWVcLzcyLis/TW9iaWxlIiwgY2FwdHVyZTogbnVsbCwgY2Fw
dHVyZUNvbnN0cmFpbnQ6IG51bGwsIHRhcmdldHM6IFsidmFvIl0gfSwKKyAgICAgICAgeyBrZXk6
ICJDaHJvbWVcLzczLis/TW9iaWxlIiwgY2FwdHVyZTogbnVsbCwgY2FwdHVyZUNvbnN0cmFpbnQ6
IG51bGwsIHRhcmdldHM6IFsidmFvIl0gfSwKKyAgICAgICAgeyBrZXk6ICJDaHJvbWVcLzc0Lis/
TW9iaWxlIiwgY2FwdHVyZTogbnVsbCwgY2FwdHVyZUNvbnN0cmFpbnQ6IG51bGwsIHRhcmdldHM6
IFsidmFvIl0gfSwKKyAgICAgICAgeyBrZXk6ICJNYWMgT1MuK0Nocm9tZVwvNzEiLCBjYXB0dXJl
OiBudWxsLCBjYXB0dXJlQ29uc3RyYWludDogbnVsbCwgdGFyZ2V0czogWyJ2YW8iXSB9LAorICAg
ICAgICB7IGtleTogIk1hYyBPUy4rQ2hyb21lXC83MiIsIGNhcHR1cmU6IG51bGwsIGNhcHR1cmVD
b25zdHJhaW50OiBudWxsLCB0YXJnZXRzOiBbInZhbyJdIH0KKyAgICBdOworICAgIC8qKiBAaGlk
ZGVuICovCisgICAgRW5naW5lLl9UZXh0dXJlTG9hZGVycyA9IFtdOworICAgIC8vIENvbnN0IHN0
YXRpY3MKKyAgICAvKiogRGVmaW5lcyB0aGF0IGFscGhhIGJsZW5kaW5nIGlzIGRpc2FibGVkICov
CisgICAgRW5naW5lLkFMUEhBX0RJU0FCTEUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X19bIkNvbnN0YW50cyJdLkFMUEhBX0RJU0FCTEU7CisgICAgLyoqIERlZmluZXMg
dGhhdCBhbHBoYSBibGVuZGluZyB0byBTUkMgQUxQSEEgKiBTUkMgKyBERVNUICovCisgICAgRW5n
aW5lLkFMUEhBX0FERCA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
Q29uc3RhbnRzIl0uQUxQSEFfQUREOworICAgIC8qKiBEZWZpbmVzIHRoYXQgYWxwaGEgYmxlbmRp
bmcgdG8gU1JDIEFMUEhBICogU1JDICsgKDEgLSBTUkMgQUxQSEEpICogREVTVCAqLworICAgIEVu
Z2luZS5BTFBIQV9DT01CSU5FID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJDb25zdGFudHMiXS5BTFBIQV9DT01CSU5FOworICAgIC8qKiBEZWZpbmVzIHRoYXQgYWxw
aGEgYmxlbmRpbmcgdG8gREVTVCAtIFNSQyAqIERFU1QgKi8KKyAgICBFbmdpbmUuQUxQSEFfU1VC
VFJBQ1QgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50
cyJdLkFMUEhBX1NVQlRSQUNUOworICAgIC8qKiBEZWZpbmVzIHRoYXQgYWxwaGEgYmxlbmRpbmcg
dG8gU1JDICogREVTVCAqLworICAgIEVuZ2luZS5BTFBIQV9NVUxUSVBMWSA9IF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uQUxQSEFfTVVMVElQTFk7
CisgICAgLyoqIERlZmluZXMgdGhhdCBhbHBoYSBibGVuZGluZyB0byBTUkMgQUxQSEEgKiBTUkMg
KyAoMSAtIFNSQykgKiBERVNUICovCisgICAgRW5naW5lLkFMUEhBX01BWElNSVpFRCA9IF9jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uQUxQSEFfTUFY
SU1JWkVEOworICAgIC8qKiBEZWZpbmVzIHRoYXQgYWxwaGEgYmxlbmRpbmcgdG8gU1JDICsgREVT
VCAqLworICAgIEVuZ2luZS5BTFBIQV9PTkVPTkUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLkFMUEhBX09ORU9ORTsKKyAgICAvKiogRGVmaW5l
cyB0aGF0IGFscGhhIGJsZW5kaW5nIHRvIFNSQyArICgxIC0gU1JDIEFMUEhBKSAqIERFU1QgKi8K
KyAgICBFbmdpbmUuQUxQSEFfUFJFTVVMVElQTElFRCA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uQUxQSEFfUFJFTVVMVElQTElFRDsKKyAgICAv
KioKKyAgICAgKiBEZWZpbmVzIHRoYXQgYWxwaGEgYmxlbmRpbmcgdG8gU1JDICsgKDEgLSBTUkMg
QUxQSEEpICogREVTVAorICAgICAqIEFscGhhIHdpbGwgYmUgc2V0IHRvICgxIC0gU1JDIEFMUEhB
KSAqIERFU1QgQUxQSEEKKyAgICAgKi8KKyAgICBFbmdpbmUuQUxQSEFfUFJFTVVMVElQTElFRF9Q
T1JURVJEVUZGID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25z
dGFudHMiXS5BTFBIQV9QUkVNVUxUSVBMSUVEX1BPUlRFUkRVRkY7CisgICAgLyoqIERlZmluZXMg
dGhhdCBhbHBoYSBibGVuZGluZyB0byBDU1QgKiBTUkMgKyAoMSAtIENTVCkgKiBERVNUICovCisg
ICAgRW5naW5lLkFMUEhBX0lOVEVSUE9MQVRFID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5BTFBIQV9JTlRFUlBPTEFURTsKKyAgICAvKioKKyAg
ICAgKiBEZWZpbmVzIHRoYXQgYWxwaGEgYmxlbmRpbmcgdG8gU1JDICsgKDEgLSBTUkMpICogREVT
VAorICAgICAqIEFscGhhIHdpbGwgYmUgc2V0IHRvIFNSQyBBTFBIQSArICgxIC0gU1JDIEFMUEhB
KSAqIERFU1QgQUxQSEEKKyAgICAgKi8KKyAgICBFbmdpbmUuQUxQSEFfU0NSRUVOTU9ERSA9IF9j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uQUxQSEFf
U0NSRUVOTU9ERTsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRoZSByZXNzb3VyY2UgaXMgbm90IGRl
bGF5ZWQqLworICAgIEVuZ2luZS5ERUxBWUxPQURTVEFURV9OT05FID0gX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9OT05F
OworICAgIC8qKiBEZWZpbmVzIHRoYXQgdGhlIHJlc3NvdXJjZSB3YXMgc3VjY2Vzc2Z1bGx5IGRl
bGF5IGxvYWRlZCAqLworICAgIEVuZ2luZS5ERUxBWUxPQURTVEFURV9MT0FERUQgPSBfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNU
QVRFX0xPQURFRDsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRoZSByZXNzb3VyY2UgaXMgY3VycmVu
dGx5IGRlbGF5IGxvYWRpbmcgKi8KKyAgICBFbmdpbmUuREVMQVlMT0FEU1RBVEVfTE9BRElORyA9
IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uREVM
QVlMT0FEU1RBVEVfTE9BRElORzsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRoZSByZXNzb3VyY2Ug
aXMgZGVsYXllZCBhbmQgaGFzIG5vdCBzdGFydGVkIGxvYWRpbmcgKi8KKyAgICBFbmdpbmUuREVM
QVlMT0FEU1RBVEVfTk9UTE9BREVEID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9OT1RMT0FERUQ7CisgICAgLy8gRGVw
aHQgb3IgU3RlbmNpbCB0ZXN0IENvbnN0YW50cy4KKyAgICAvKiogUGFzc2VkIHRvIGRlcHRoRnVu
Y3Rpb24gb3Igc3RlbmNpbEZ1bmN0aW9uIHRvIHNwZWNpZnkgZGVwdGggb3Igc3RlbmNpbCB0ZXN0
cyB3aWxsIG5ldmVyIHBhc3MuIGkuZS4gTm90aGluZyB3aWxsIGJlIGRyYXduICovCisgICAgRW5n
aW5lLk5FVkVSID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25z
dGFudHMiXS5ORVZFUjsKKyAgICAvKiogUGFzc2VkIHRvIGRlcHRoRnVuY3Rpb24gb3Igc3RlbmNp
bEZ1bmN0aW9uIHRvIHNwZWNpZnkgZGVwdGggb3Igc3RlbmNpbCB0ZXN0cyB3aWxsIGFsd2F5cyBw
YXNzLiBpLmUuIFBpeGVscyB3aWxsIGJlIGRyYXduIGluIHRoZSBvcmRlciB0aGV5IGFyZSBkcmF3
biAqLworICAgIEVuZ2luZS5BTFdBWVMgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkNvbnN0YW50cyJdLkFMV0FZUzsKKyAgICAvKiogUGFzc2VkIHRvIGRlcHRoRnVu
Y3Rpb24gb3Igc3RlbmNpbEZ1bmN0aW9uIHRvIHNwZWNpZnkgZGVwdGggb3Igc3RlbmNpbCB0ZXN0
cyB3aWxsIHBhc3MgaWYgdGhlIG5ldyBkZXB0aCB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIHN0b3Jl
ZCB2YWx1ZSAqLworICAgIEVuZ2luZS5MRVNTID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5MRVNTOworICAgIC8qKiBQYXNzZWQgdG8gZGVwdGhG
dW5jdGlvbiBvciBzdGVuY2lsRnVuY3Rpb24gdG8gc3BlY2lmeSBkZXB0aCBvciBzdGVuY2lsIHRl
c3RzIHdpbGwgcGFzcyBpZiB0aGUgbmV3IGRlcHRoIHZhbHVlIGlzIGVxdWFscyB0byB0aGUgc3Rv
cmVkIHZhbHVlICovCisgICAgRW5naW5lLkVRVUFMID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5FUVVBTDsKKyAgICAvKiogUGFzc2VkIHRvIGRl
cHRoRnVuY3Rpb24gb3Igc3RlbmNpbEZ1bmN0aW9uIHRvIHNwZWNpZnkgZGVwdGggb3Igc3RlbmNp
bCB0ZXN0cyB3aWxsIHBhc3MgaWYgdGhlIG5ldyBkZXB0aCB2YWx1ZSBpcyBsZXNzIHRoYW4gb3Ig
ZXF1YWwgdG8gdGhlIHN0b3JlZCB2YWx1ZSAqLworICAgIEVuZ2luZS5MRVFVQUwgPSBfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLkxFUVVBTDsKKyAg
ICAvKiogUGFzc2VkIHRvIGRlcHRoRnVuY3Rpb24gb3Igc3RlbmNpbEZ1bmN0aW9uIHRvIHNwZWNp
ZnkgZGVwdGggb3Igc3RlbmNpbCB0ZXN0cyB3aWxsIHBhc3MgaWYgdGhlIG5ldyBkZXB0aCB2YWx1
ZSBpcyBncmVhdGVyIHRoYW4gdGhlIHN0b3JlZCB2YWx1ZSAqLworICAgIEVuZ2luZS5HUkVBVEVS
ID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5H
UkVBVEVSOworICAgIC8qKiBQYXNzZWQgdG8gZGVwdGhGdW5jdGlvbiBvciBzdGVuY2lsRnVuY3Rp
b24gdG8gc3BlY2lmeSBkZXB0aCBvciBzdGVuY2lsIHRlc3RzIHdpbGwgcGFzcyBpZiB0aGUgbmV3
IGRlcHRoIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc3RvcmVkIHZhbHVl
ICovCisgICAgRW5naW5lLkdFUVVBTCA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siQ29uc3RhbnRzIl0uR0VRVUFMOworICAgIC8qKiBQYXNzZWQgdG8gZGVwdGhGdW5j
dGlvbiBvciBzdGVuY2lsRnVuY3Rpb24gdG8gc3BlY2lmeSBkZXB0aCBvciBzdGVuY2lsIHRlc3Rz
IHdpbGwgcGFzcyBpZiB0aGUgbmV3IGRlcHRoIHZhbHVlIGlzIG5vdCBlcXVhbCB0byB0aGUgc3Rv
cmVkIHZhbHVlICovCisgICAgRW5naW5lLk5PVEVRVUFMID0gX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5OT1RFUVVBTDsKKyAgICAvLyBTdGVuY2ls
IEFjdGlvbnMgQ29uc3RhbnRzLgorICAgIC8qKiBQYXNzZWQgdG8gc3RlbmNpbE9wZXJhdGlvbiB0
byBzcGVjaWZ5IHRoYXQgc3RlbmNpbCB2YWx1ZSBtdXN0IGJlIGtlcHQgKi8KKyAgICBFbmdpbmUu
S0VFUCA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRz
Il0uS0VFUDsKKyAgICAvKiogUGFzc2VkIHRvIHN0ZW5jaWxPcGVyYXRpb24gdG8gc3BlY2lmeSB0
aGF0IHN0ZW5jaWwgdmFsdWUgbXVzdCBiZSByZXBsYWNlZCAqLworICAgIEVuZ2luZS5SRVBMQUNF
ID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5S
RVBMQUNFOworICAgIC8qKiBQYXNzZWQgdG8gc3RlbmNpbE9wZXJhdGlvbiB0byBzcGVjaWZ5IHRo
YXQgc3RlbmNpbCB2YWx1ZSBtdXN0IGJlIGluY3JlbWVudGVkICovCisgICAgRW5naW5lLklOQ1Ig
PSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLklO
Q1I7CisgICAgLyoqIFBhc3NlZCB0byBzdGVuY2lsT3BlcmF0aW9uIHRvIHNwZWNpZnkgdGhhdCBz
dGVuY2lsIHZhbHVlIG11c3QgYmUgZGVjcmVtZW50ZWQgKi8KKyAgICBFbmdpbmUuREVDUiA9IF9j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uREVDUjsK
KyAgICAvKiogUGFzc2VkIHRvIHN0ZW5jaWxPcGVyYXRpb24gdG8gc3BlY2lmeSB0aGF0IHN0ZW5j
aWwgdmFsdWUgbXVzdCBiZSBpbnZlcnRlZCAqLworICAgIEVuZ2luZS5JTlZFUlQgPSBfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLklOVkVSVDsKKyAg
ICAvKiogUGFzc2VkIHRvIHN0ZW5jaWxPcGVyYXRpb24gdG8gc3BlY2lmeSB0aGF0IHN0ZW5jaWwg
dmFsdWUgbXVzdCBiZSBpbmNyZW1lbnRlZCB3aXRoIHdyYXBwaW5nICovCisgICAgRW5naW5lLklO
Q1JfV1JBUCA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3Rh
bnRzIl0uSU5DUl9XUkFQOworICAgIC8qKiBQYXNzZWQgdG8gc3RlbmNpbE9wZXJhdGlvbiB0byBz
cGVjaWZ5IHRoYXQgc3RlbmNpbCB2YWx1ZSBtdXN0IGJlIGRlY3JlbWVudGVkIHdpdGggd3JhcHBp
bmcgKi8KKyAgICBFbmdpbmUuREVDUl9XUkFQID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5ERUNSX1dSQVA7CisgICAgLyoqIFRleHR1cmUgaXMg
bm90IHJlcGVhdGluZyBvdXRzaWRlIG9mIDAuLjEgVVZzICovCisgICAgRW5naW5lLlRFWFRVUkVf
Q0xBTVBfQUREUkVTU01PREUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83
X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfQ0xBTVBfQUREUkVTU01PREU7CisgICAgLyoqIFRleHR1
cmUgaXMgcmVwZWF0aW5nIG91dHNpZGUgb2YgMC4uMSBVVnMgKi8KKyAgICBFbmdpbmUuVEVYVFVS
RV9XUkFQX0FERFJFU1NNT0RFID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJDb25zdGFudHMiXS5URVhUVVJFX1dSQVBfQUREUkVTU01PREU7CisgICAgLyoqIFRleHR1
cmUgaXMgcmVwZWF0aW5nIGFuZCBtaXJyb3JlZCAqLworICAgIEVuZ2luZS5URVhUVVJFX01JUlJP
Ul9BRERSRVNTTU9ERSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
Q29uc3RhbnRzIl0uVEVYVFVSRV9NSVJST1JfQUREUkVTU01PREU7CisgICAgLyoqIEFMUEhBICov
CisgICAgRW5naW5lLlRFWFRVUkVGT1JNQVRfQUxQSEEgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfQUxQSEE7CisgICAg
LyoqIExVTUlOQU5DRSAqLworICAgIEVuZ2luZS5URVhUVVJFRk9STUFUX0xVTUlOQU5DRSA9IF9j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RUZPUk1BVF9MVU1JTkFOQ0U7CisgICAgLyoqIExVTUlOQU5DRV9BTFBIQSAqLworICAgIEVuZ2lu
ZS5URVhUVVJFRk9STUFUX0xVTUlOQU5DRV9BTFBIQSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9MVU1JTkFOQ0VfQUxQ
SEE7CisgICAgLyoqIFJHQiAqLworICAgIEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQiA9IF9jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZP
Uk1BVF9SR0I7CisgICAgLyoqIFJHQkEgKi8KKyAgICBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JB
ID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5U
RVhUVVJFRk9STUFUX1JHQkE7CisgICAgLyoqIFJFRCAqLworICAgIEVuZ2luZS5URVhUVVJFRk9S
TUFUX1JFRCA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3Rh
bnRzIl0uVEVYVFVSRUZPUk1BVF9SRUQ7CisgICAgLyoqIFJFRCAoMm5kIHJlZmVyZW5jZSkgKi8K
KyAgICBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFRk9STUFUX1I7CisgICAgLyoqIFJHICov
CisgICAgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkcgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfUkc7CisgICAgLyoqIFJF
RF9JTlRFR0VSICovCisgICAgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkVEX0lOVEVHRVIgPSBfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVG
T1JNQVRfUkVEX0lOVEVHRVI7CisgICAgLyoqIFJFRF9JTlRFR0VSICgybmQgcmVmZXJlbmNlKSAq
LworICAgIEVuZ2luZS5URVhUVVJFRk9STUFUX1JfSU5URUdFUiA9IF9jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SX0lOVEVH
RVI7CisgICAgLyoqIFJHX0lOVEVHRVIgKi8KKyAgICBFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR19J
TlRFR0VSID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFu
dHMiXS5URVhUVVJFRk9STUFUX1JHX0lOVEVHRVI7CisgICAgLyoqIFJHQl9JTlRFR0VSICovCisg
ICAgRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCX0lOVEVHRVIgPSBfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCX0lOVEVH
RVI7CisgICAgLyoqIFJHQkFfSU5URUdFUiAqLworICAgIEVuZ2luZS5URVhUVVJFRk9STUFUX1JH
QkFfSU5URUdFUiA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBX0lOVEVHRVI7CisgICAgLyoqIFVOU0lHTkVEX0JZ
VEUgKi8KKyAgICBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfQllURSA9IF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5T
SUdORURfQllURTsKKyAgICAvKiogVU5TSUdORURfQllURSAoMm5kIHJlZmVyZW5jZSkgKi8KKyAg
ICBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UID0gX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7
CisgICAgLyoqIEZMT0FUICovCisgICAgRW5naW5lLlRFWFRVUkVUWVBFX0ZMT0FUID0gX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQ
RV9GTE9BVDsKKyAgICAvKiogSEFMRl9GTE9BVCAqLworICAgIEVuZ2luZS5URVhUVVJFVFlQRV9I
QUxGX0ZMT0FUID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUOworICAgIC8qKiBCWVRFICovCisgICAgRW5n
aW5lLlRFWFRVUkVUWVBFX0JZVEUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0JZVEU7CisgICAgLyoqIFNIT1JUICovCisg
ICAgRW5naW5lLlRFWFRVUkVUWVBFX1NIT1JUID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9TSE9SVDsKKyAgICAvKiogVU5T
SUdORURfU0hPUlQgKi8KKyAgICBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfU0hPUlQgPSBf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRV
UkVUWVBFX1VOU0lHTkVEX1NIT1JUOworICAgIC8qKiBJTlQgKi8KKyAgICBFbmdpbmUuVEVYVFVS
RVRZUEVfSU5UID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9JTlQ7CisgICAgLyoqIFVOU0lHTkVEX0lOVCAqLworICAgIEVu
Z2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlRFR0VSID0gX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlRF
R0VSOworICAgIC8qKiBVTlNJR05FRF9TSE9SVF80XzRfNF80ICovCisgICAgRW5naW5lLlRFWFRV
UkVUWVBFX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX1NIT1JUXzRf
NF80XzQ7CisgICAgLyoqIFVOU0lHTkVEX1NIT1JUXzVfNV81XzEgKi8KKyAgICBFbmdpbmUuVEVY
VFVSRVRZUEVfVU5TSUdORURfU0hPUlRfNV81XzVfMSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfU0hPUlRf
NV81XzVfMTsKKyAgICAvKiogVU5TSUdORURfU0hPUlRfNV82XzUgKi8KKyAgICBFbmdpbmUuVEVY
VFVSRVRZUEVfVU5TSUdORURfU0hPUlRfNV82XzUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX1NIT1JUXzVf
Nl81OworICAgIC8qKiBVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgKi8KKyAgICBFbmdpbmUu
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWID0gX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVY7CisgICAgLyoqIFVOU0lHTkVEX0lOVF8yNF84ICovCisgICAg
RW5naW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVF8yNF84ID0gX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9J
TlRfMjRfODsKKyAgICAvKiogVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViAqLworICAgIEVu
Z2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWID0gX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9V
TlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOworICAgIC8qKiBVTlNJR05FRF9JTlRfNV85Xzlf
OV9SRVYgKi8KKyAgICBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UXzVfOV85XzlfUkVW
ID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5U
RVhUVVJFVFlQRV9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVY7CisgICAgLyoqIEZMT0FUXzMyX1VO
U0lHTkVEX0lOVF8yNF84X1JFViAqLworICAgIEVuZ2luZS5URVhUVVJFVFlQRV9GTE9BVF8zMl9V
TlNJR05FRF9JTlRfMjRfOF9SRVYgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84
X1JFVjsKKyAgICAvKiogbmVhcmVzdCBpcyBtYWcgPSBuZWFyZXN0IGFuZCBtaW4gPSBuZWFyZXN0
IGFuZCBtaXAgPSBsaW5lYXIgKi8KKyAgICBFbmdpbmUuVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5H
TU9ERSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRz
Il0uVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5HTU9ERTsKKyAgICAvKiogQmlsaW5lYXIgaXMgbWFn
ID0gbGluZWFyIGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IG5lYXJlc3QgKi8KKyAgICBFbmdp
bmUuVEVYVFVSRV9CSUxJTkVBUl9TQU1QTElOR01PREUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfQklMSU5FQVJfU0FNUExJTkdN
T0RFOworICAgIC8qKiBUcmlsaW5lYXIgaXMgbWFnID0gbGluZWFyIGFuZCBtaW4gPSBsaW5lYXIg
YW5kIG1pcCA9IGxpbmVhciAqLworICAgIEVuZ2luZS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElO
R01PREUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50
cyJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERTsKKyAgICAvKiogbmVhcmVzdCBpcyBt
YWcgPSBuZWFyZXN0IGFuZCBtaW4gPSBuZWFyZXN0IGFuZCBtaXAgPSBsaW5lYXIgKi8KKyAgICBF
bmdpbmUuVEVYVFVSRV9ORUFSRVNUX05FQVJFU1RfTUlQTElORUFSID0gX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1RfTkVB
UkVTVF9NSVBMSU5FQVI7CisgICAgLyoqIEJpbGluZWFyIGlzIG1hZyA9IGxpbmVhciBhbmQgbWlu
ID0gbGluZWFyIGFuZCBtaXAgPSBuZWFyZXN0ICovCisgICAgRW5naW5lLlRFWFRVUkVfTElORUFS
X0xJTkVBUl9NSVBORUFSRVNUID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJDb25zdGFudHMiXS5URVhUVVJFX0xJTkVBUl9MSU5FQVJfTUlQTkVBUkVTVDsKKyAgICAv
KiogVHJpbGluZWFyIGlzIG1hZyA9IGxpbmVhciBhbmQgbWluID0gbGluZWFyIGFuZCBtaXAgPSBs
aW5lYXIgKi8KKyAgICBFbmdpbmUuVEVYVFVSRV9MSU5FQVJfTElORUFSX01JUExJTkVBUiA9IF9j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RV9MSU5FQVJfTElORUFSX01JUExJTkVBUjsKKyAgICAvKiogbWFnID0gbmVhcmVzdCBhbmQgbWlu
ID0gbmVhcmVzdCBhbmQgbWlwID0gbmVhcmVzdCAqLworICAgIEVuZ2luZS5URVhUVVJFX05FQVJF
U1RfTkVBUkVTVF9NSVBORUFSRVNUID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1RfTkVBUkVTVF9NSVBORUFSRVNUOwor
ICAgIC8qKiBtYWcgPSBuZWFyZXN0IGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IG5lYXJlc3Qg
Ki8KKyAgICBFbmdpbmUuVEVYVFVSRV9ORUFSRVNUX0xJTkVBUl9NSVBORUFSRVNUID0gX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX05F
QVJFU1RfTElORUFSX01JUE5FQVJFU1Q7CisgICAgLyoqIG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9
IGxpbmVhciBhbmQgbWlwID0gbGluZWFyICovCisgICAgRW5naW5lLlRFWFRVUkVfTkVBUkVTVF9M
SU5FQVJfTUlQTElORUFSID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1RfTElORUFSX01JUExJTkVBUjsKKyAgICAvKiog
bWFnID0gbmVhcmVzdCBhbmQgbWluID0gbGluZWFyIGFuZCBtaXAgPSBub25lICovCisgICAgRW5n
aW5lLlRFWFRVUkVfTkVBUkVTVF9MSU5FQVIgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfTkVBUkVTVF9MSU5FQVI7CisgICAgLyoq
IG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1pcCA9IG5vbmUgKi8KKyAgICBF
bmdpbmUuVEVYVFVSRV9ORUFSRVNUX05FQVJFU1QgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfTkVBUkVTVF9ORUFSRVNUOworICAg
IC8qKiBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1pcCA9IG5lYXJlc3QgKi8K
KyAgICBFbmdpbmUuVEVYVFVSRV9MSU5FQVJfTkVBUkVTVF9NSVBORUFSRVNUID0gX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX0xJTkVB
Ul9ORUFSRVNUX01JUE5FQVJFU1Q7CisgICAgLyoqIG1hZyA9IGxpbmVhciBhbmQgbWluID0gbmVh
cmVzdCBhbmQgbWlwID0gbGluZWFyICovCisgICAgRW5naW5lLlRFWFRVUkVfTElORUFSX05FQVJF
U1RfTUlQTElORUFSID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJD
b25zdGFudHMiXS5URVhUVVJFX0xJTkVBUl9ORUFSRVNUX01JUExJTkVBUjsKKyAgICAvKiogbWFn
ID0gbGluZWFyIGFuZCBtaW4gPSBsaW5lYXIgYW5kIG1pcCA9IG5vbmUgKi8KKyAgICBFbmdpbmUu
VEVYVFVSRV9MSU5FQVJfTElORUFSID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX0xJTkVBUl9MSU5FQVI7CisgICAgLyoqIG1hZyA9
IGxpbmVhciBhbmQgbWluID0gbmVhcmVzdCBhbmQgbWlwID0gbm9uZSAqLworICAgIEVuZ2luZS5U
RVhUVVJFX0xJTkVBUl9ORUFSRVNUID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX0xJTkVBUl9ORUFSRVNUOworICAgIC8qKiBFeHBs
aWNpdCBjb29yZGluYXRlcyBtb2RlICovCisgICAgRW5naW5lLlRFWFRVUkVfRVhQTElDSVRfTU9E
RSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRV9FWFBMSUNJVF9NT0RFOworICAgIC8qKiBTcGhlcmljYWwgY29vcmRpbmF0ZXMgbW9k
ZSAqLworICAgIEVuZ2luZS5URVhUVVJFX1NQSEVSSUNBTF9NT0RFID0gX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX1NQSEVSSUNBTF9N
T0RFOworICAgIC8qKiBQbGFuYXIgY29vcmRpbmF0ZXMgbW9kZSAqLworICAgIEVuZ2luZS5URVhU
VVJFX1BMQU5BUl9NT0RFID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJDb25zdGFudHMiXS5URVhUVVJFX1BMQU5BUl9NT0RFOworICAgIC8qKiBDdWJpYyBjb29yZGlu
YXRlcyBtb2RlICovCisgICAgRW5naW5lLlRFWFRVUkVfQ1VCSUNfTU9ERSA9IF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9DVUJJQ19N
T0RFOworICAgIC8qKiBQcm9qZWN0aW9uIGNvb3JkaW5hdGVzIG1vZGUgKi8KKyAgICBFbmdpbmUu
VEVYVFVSRV9QUk9KRUNUSU9OX01PREUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfUFJPSkVDVElPTl9NT0RFOworICAgIC8qKiBT
a3lib3ggY29vcmRpbmF0ZXMgbW9kZSAqLworICAgIEVuZ2luZS5URVhUVVJFX1NLWUJPWF9NT0RF
ID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5U
RVhUVVJFX1NLWUJPWF9NT0RFOworICAgIC8qKiBJbnZlcnNlIEN1YmljIGNvb3JkaW5hdGVzIG1v
ZGUgKi8KKyAgICBFbmdpbmUuVEVYVFVSRV9JTlZDVUJJQ19NT0RFID0gX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5URVhUVVJFX0lOVkNVQklDX01P
REU7CisgICAgLyoqIEVxdWlyZWN0YW5ndWxhciBjb29yZGluYXRlcyBtb2RlICovCisgICAgRW5n
aW5lLlRFWFRVUkVfRVFVSVJFQ1RBTkdVTEFSX01PREUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfRVFVSVJFQ1RBTkdVTEFSX01P
REU7CisgICAgLyoqIEVxdWlyZWN0YW5ndWxhciBGaXhlZCBjb29yZGluYXRlcyBtb2RlICovCisg
ICAgRW5naW5lLlRFWFRVUkVfRklYRURfRVFVSVJFQ1RBTkdVTEFSX01PREUgPSBfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfRklYRURf
RVFVSVJFQ1RBTkdVTEFSX01PREU7CisgICAgLyoqIEVxdWlyZWN0YW5ndWxhciBGaXhlZCBNaXJy
b3JlZCBjb29yZGluYXRlcyBtb2RlICovCisgICAgRW5naW5lLlRFWFRVUkVfRklYRURfRVFVSVJF
Q1RBTkdVTEFSX01JUlJPUkVEX01PREUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfRklYRURfRVFVSVJFQ1RBTkdVTEFSX01JUlJP
UkVEX01PREU7CisgICAgLy8gVGV4dHVyZSByZXNjYWxpbmcgbW9kZQorICAgIC8qKiBEZWZpbmVz
IHRoYXQgdGV4dHVyZSByZXNjYWxpbmcgd2lsbCB1c2UgYSBmbG9vciB0byBmaW5kIHRoZSBjbG9z
ZXIgcG93ZXIgb2YgMiBzaXplICovCisgICAgRW5naW5lLlNDQUxFTU9ERV9GTE9PUiA9IF9jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uU0NBTEVNT0RF
X0ZMT09SOworICAgIC8qKiBEZWZpbmVzIHRoYXQgdGV4dHVyZSByZXNjYWxpbmcgd2lsbCBsb29r
IGZvciB0aGUgbmVhcmVzdCBwb3dlciBvZiAyIHNpemUgKi8KKyAgICBFbmdpbmUuU0NBTEVNT0RF
X05FQVJFU1QgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0
YW50cyJdLlNDQUxFTU9ERV9ORUFSRVNUOworICAgIC8qKiBEZWZpbmVzIHRoYXQgdGV4dHVyZSBy
ZXNjYWxpbmcgd2lsbCB1c2UgYSBjZWlsIHRvIGZpbmQgdGhlIGNsb3NlciBwb3dlciBvZiAyIHNp
emUgKi8KKyAgICBFbmdpbmUuU0NBTEVNT0RFX0NFSUxJTkcgPSBfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlNDQUxFTU9ERV9DRUlMSU5HOworICAg
IC8vIFVwZGF0YWJsZSBzdGF0aWNzIHNvIHN0aWNrIHdpdGggdmFycyBoZXJlCisgICAgLyoqCisg
ICAgICogR2V0cyBvciBzZXRzIHRoZSBlcHNpbG9uIHZhbHVlIHVzZWQgYnkgY29sbGlzaW9uIGVu
Z2luZQorICAgICAqLworICAgIEVuZ2luZS5Db2xsaXNpb25zRXBzaWxvbiA9IDAuMDAxOworICAg
IC8qKgorICAgICAqIE1ldGhvZCBjYWxsZWQgdG8gY3JlYXRlIHRoZSBkZWZhdWx0IHJlc2NhbGUg
cG9zdCBwcm9jZXNzIG9uIGVhY2ggZW5naW5lLgorICAgICAqLworICAgIEVuZ2luZS5fUmVzY2Fs
ZVBvc3RQcm9jZXNzRmFjdG9yeSA9IG51bGw7CisgICAgcmV0dXJuIEVuZ2luZTsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRW5naW5lcy9lbmdpbmVTdG9yZS50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5lcy9lbmdp
bmVTdG9yZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBFbmdpbmVTdG9yZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJFbmdpbmVTdG9yZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRW5naW5lU3Rv
cmU7IH0pOworLyoqCisgKiBUaGUgZW5naW5lIHN0b3JlIGNsYXNzIGlzIHJlc3BvbnNpYmxlIHRv
IGhvbGQgYWxsIHRoZSBpbnN0YW5jZXMgb2YgRW5naW5lIGFuZCBTY2VuZSBjcmVhdGVkCisgKiBk
dXJpbmcgdGhlIGxpZmUgdGltZSBvZiB0aGUgYXBwbGljYXRpb24uCisgKi8KK3ZhciBFbmdpbmVT
dG9yZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBFbmdpbmVT
dG9yZSgpIHsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuZ2luZVN0b3JlLCAi
TGFzdENyZWF0ZWRFbmdpbmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBs
YXRlc3QgY3JlYXRlZCBlbmdpbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgaWYgKHRoaXMuSW5zdGFuY2VzLmxlbmd0aCA9PT0gMCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHRoaXMuSW5zdGFuY2VzW3RoaXMuSW5zdGFuY2VzLmxlbmd0aCAtIDFdOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lU3RvcmUsICJMYXN0Q3Jl
YXRlZFNjZW5lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGF0ZXN0IGNy
ZWF0ZWQgc2NlbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX0xhc3RDcmVhdGVkU2NlbmU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIC8qKiBHZXRzIHRoZSBsaXN0IG9mIGNyZWF0ZWQgZW5naW5lcyAqLworICAgIEVuZ2lu
ZVN0b3JlLkluc3RhbmNlcyA9IG5ldyBBcnJheSgpOworICAgIC8qKiBAaGlkZGVuICovCisgICAg
RW5naW5lU3RvcmUuX0xhc3RDcmVhdGVkU2NlbmUgPSBudWxsOworICAgIC8qKgorICAgICAqIEdl
dHMgb3Igc2V0cyBhIGdsb2JhbCB2YXJpYWJsZSBpbmRpY2F0aW5nIGlmIGZhbGxiYWNrIHRleHR1
cmUgbXVzdCBiZSB1c2VkIHdoZW4gYSB0ZXh0dXJlIGNhbm5vdCBiZSBsb2FkZWQKKyAgICAgKiBA
aWdub3JlbmFtaW5nCisgICAgICovCisgICAgRW5naW5lU3RvcmUuVXNlRmFsbGJhY2tUZXh0dXJl
ID0gdHJ1ZTsKKyAgICAvKioKKyAgICAgKiBUZXh0dXJlIGNvbnRlbnQgdXNlZCBpZiBhIHRleHR1
cmUgY2Fubm90IGxvYWRlZAorICAgICAqIEBpZ25vcmVuYW1pbmcKKyAgICAgKi8KKyAgICBFbmdp
bmVTdG9yZS5GYWxsYmFja1RleHR1cmUgPSAiIjsKKyAgICByZXR1cm4gRW5naW5lU3RvcmU7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0VuZ2luZXMvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvaW5kZXgudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogQ29uc3RhbnRzLCBJbnN0YW5jaW5nQXR0cmlidXRlSW5mbywgRGVwdGhUZXh0dXJlQ3JlYXRp
b25PcHRpb25zLCBFbmdpbmVDYXBhYmlsaXRpZXMsIEVuZ2luZSwgRW5naW5lU3RvcmUsIE51bGxF
bmdpbmVPcHRpb25zLCBOdWxsRW5naW5lLCBXZWJHTFBpcGVsaW5lQ29udGV4dCwgV2ViR1BVQ29u
c3RhbnRzLCBXZWJHUFVFbmdpbmUsIFdlYkdMMlNoYWRlclByb2Nlc3NvciwgTmF0aXZlRW5naW5l
LCBfT2NjbHVzaW9uRGF0YVN0b3JhZ2UsIF9mb3JjZVRyYW5zZm9ybUZlZWRiYWNrVG9CdW5kbGUg
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
Y29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkNvbnN0YW50cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJDb25zdGFudHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJJbnN0YW5jaW5nQXR0cmlidXRlSW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnN0YW5jaW5nQXR0cmlidXRlSW5m
byJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aFRleHR1cmVDcmVhdGlvbk9wdGlvbnMi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siRGVwdGhUZXh0dXJlQ3JlYXRpb25PcHRpb25zIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkVuZ2luZUNhcGFiaWxpdGllcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2VuZ2luZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmVDYXBhYmlsaXRpZXMiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZW5naW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2luZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3Jl
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVuZ2luZVN0b3JlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lU3RvcmUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbnVsbEVuZ2luZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9udWxsRW5naW5l
ICovICIuL0VuZ2luZXMvbnVsbEVuZ2luZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOdWxsRW5n
aW5lT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX251bGxFbmdpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siTnVsbEVuZ2luZU9wdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTnVsbEVuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX251bGxFbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siTnVsbEVuZ2luZSJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9FeHRlbnNpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0V4dGVuc2lvbnMvaW5kZXggKi8gIi4vRW5n
aW5lcy9FeHRlbnNpb25zL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9PY2NsdXNpb25E
YXRhU3RvcmFnZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0V4dGVuc2lvbnNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siX09jY2x1c2lvbkRhdGFTdG9yYWdlIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIl9mb3JjZVRyYW5zZm9ybUZlZWRiYWNrVG9CdW5kbGUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9FeHRlbnNpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIl9mb3JjZVRyYW5zZm9ybUZlZWRiYWNrVG9CdW5kbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfV2ViR0xfd2ViR0xQaXBlbGluZUNvbnRleHRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vV2ViR0wvd2ViR0xQaXBl
bGluZUNvbnRleHQgKi8gIi4vRW5naW5lcy9XZWJHTC93ZWJHTFBpcGVsaW5lQ29udGV4dC50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJXZWJHTFBpcGVsaW5lQ29udGV4dCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX1dlYkdMX3dlYkdMUGlwZWxpbmVDb250ZXh0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X19bIldlYkdMUGlwZWxpbmVDb250ZXh0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vV2ViR1BVL3dlYmdwdUNvbnN0YW50cyAqLyAi
Li9FbmdpbmVzL1dlYkdQVS93ZWJncHVDb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
V2ViR1BVQ29uc3RhbnRzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJXZWJHUFVDb25zdGFudHMiXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViZ3B1RW5naW5lX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3dlYmdwdUVuZ2luZSAq
LyAiLi9FbmdpbmVzL3dlYmdwdUVuZ2luZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJHUFVF
bmdpbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF93ZWJncHVFbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzdfX1siV2ViR1BVRW5naW5lIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1dlYkdMX3dlYkdMMlNoYWRlclByb2Nlc3NvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vV2ViR0wvd2ViR0wyU2hhZGVyUHJv
Y2Vzc29ycyAqLyAiLi9FbmdpbmVzL1dlYkdML3dlYkdMMlNoYWRlclByb2Nlc3NvcnMudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiV2ViR0wyU2hhZGVyUHJvY2Vzc29yIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfV2ViR0xfd2ViR0wyU2hhZGVyUHJvY2Vzc29yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJXZWJHTDJTaGFkZXJQcm9jZXNzb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbmF0aXZlRW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL25hdGl2ZUVuZ2luZSAqLyAiLi9FbmdpbmVzL25hdGl2ZUVu
Z2luZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOYXRpdmVFbmdpbmUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9uYXRpdmVFbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siTmF0aXZl
RW5naW5lIl07IH0pOworCisKKworCisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vRW5naW5lcy9uYXRpdmVFbmdpbmUudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9FbmdpbmVzL25hdGl2ZUVuZ2luZS50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogTmF0aXZlRW5naW5lICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5h
dGl2ZUVuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTmF0aXZlRW5naW5lOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90
c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFs
cy9UZXh0dXJlcy9pbnRlcm5hbFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVy
bmFsVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxz
L1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVz
X2RhdGFCdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01lc2hlcy9kYXRhQnVmZmVyICovICIuL01lc2hlcy9kYXRhQnVmZmVyLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8g
Ii4vTWlzYy90b29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2Vudmly
b25tZW50VGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2Vudmlyb25tZW50VGV4dHVyZVRvb2xzICovICIuL01p
c2MvZW52aXJvbm1lbnRUZXh0dXJlVG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldENyZWF0aW9uT3B0aW9uc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL3JlbmRlclRhcmdldENyZWF0aW9uT3B0aW9ucyAqLyAiLi9NYXRlcmlhbHMv
VGV4dHVyZXMvcmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25zLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX05hdGl2ZV9uYXRpdmVTaGFkZXJQcm9jZXNzb3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vTmF0aXZlL25hdGl2ZVNo
YWRlclByb2Nlc3NvciAqLyAiLi9FbmdpbmVzL05hdGl2ZS9uYXRpdmVTaGFkZXJQcm9jZXNzb3Iu
dHMiKTsKKworCisKKworCisKKworCisKK3ZhciBOYXRpdmVQaXBlbGluZUNvbnRleHQgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gTmF0aXZlUGlwZWxpbmVDb250
ZXh0KCkgeworICAgICAgICAvLyBUT0RPOiBhc3luYyBzaG91bGQgYmUgdHJ1ZT8KKyAgICAgICAg
dGhpcy5pc0FzeW5jID0gZmFsc2U7CisgICAgICAgIHRoaXMuaXNSZWFkeSA9IGZhbHNlOworICAg
ICAgICB0aGlzLl92YWx1ZUNhY2hlID0ge307CisgICAgfQorICAgIC8vIFRPRE86IHdoYXQgc2hv
dWxkIHRoaXMgZG8/CisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5faGFuZGxl
c1NwZWN0b3JSZWJ1aWxkQ2FsbGJhY2sgPSBmdW5jdGlvbiAob25Db21waWxlZCkgeworICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOworICAgIH07CisgICAgTmF0aXZl
UGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5fZmlsbEVmZmVjdEluZm9ybWF0aW9uID0gZnVuY3Rp
b24gKGVmZmVjdCwgdW5pZm9ybUJ1ZmZlcnNOYW1lcywgdW5pZm9ybXNOYW1lcywgdW5pZm9ybXMs
IHNhbXBsZXJMaXN0LCBzYW1wbGVycywgYXR0cmlidXRlc05hbWVzLCBhdHRyaWJ1dGVzKSB7Cisg
ICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLmVuZ2luZTsKKyAgICAgICAgaWYgKGVuZ2luZS5zdXBw
b3J0c1VuaWZvcm1CdWZmZXJzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHVuaWZv
cm1CdWZmZXJzTmFtZXMpIHsKKyAgICAgICAgICAgICAgICBlZmZlY3QuYmluZFVuaWZvcm1CbG9j
ayhuYW1lLCB1bmlmb3JtQnVmZmVyc05hbWVzW25hbWVdKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB2YXIgZWZmZWN0QXZhaWxhYmxlVW5pZm9ybXMgPSB0aGlzLmVuZ2luZS5n
ZXRVbmlmb3Jtcyh0aGlzLCB1bmlmb3Jtc05hbWVzKTsKKyAgICAgICAgZWZmZWN0QXZhaWxhYmxl
VW5pZm9ybXMuZm9yRWFjaChmdW5jdGlvbiAodW5pZm9ybSwgaW5kZXgpIHsKKyAgICAgICAgICAg
IHVuaWZvcm1zW3VuaWZvcm1zTmFtZXNbaW5kZXhdXSA9IHVuaWZvcm07CisgICAgICAgIH0pOwor
ICAgICAgICB0aGlzLl91bmlmb3JtcyA9IHVuaWZvcm1zOworICAgICAgICB2YXIgaW5kZXg7Cisg
ICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNhbXBsZXJMaXN0Lmxlbmd0aDsgaW5kZXgr
KykgeworICAgICAgICAgICAgdmFyIHNhbXBsZXIgPSBlZmZlY3QuZ2V0VW5pZm9ybShzYW1wbGVy
TGlzdFtpbmRleF0pOworICAgICAgICAgICAgaWYgKHNhbXBsZXIgPT0gbnVsbCkgeworICAgICAg
ICAgICAgICAgIHNhbXBsZXJMaXN0LnNwbGljZShpbmRleCwgMSk7CisgICAgICAgICAgICAgICAg
aW5kZXgtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzYW1wbGVyTGlzdC5m
b3JFYWNoKGZ1bmN0aW9uIChuYW1lLCBpbmRleCkgeworICAgICAgICAgICAgc2FtcGxlcnNbbmFt
ZV0gPSBpbmRleDsKKyAgICAgICAgfSk7CisgICAgICAgIGF0dHJpYnV0ZXMucHVzaC5hcHBseShh
dHRyaWJ1dGVzLCBlbmdpbmUuZ2V0QXR0cmlidXRlcyh0aGlzLCBhdHRyaWJ1dGVzTmFtZXMpKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJlbGVhc2UgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2Vz
LgorICAgICAqKi8KKyAgICBOYXRpdmVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLmRpc3Bvc2Ug
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3VuaWZvcm1zID0ge307CisgICAgfTsKKyAg
ICAvKiogQGhpZGRlbiAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuX2Nh
Y2hlTWF0cml4ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBtYXRyaXgpIHsKKyAgICAgICAgdmFy
IGNhY2hlID0gdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV07CisgICAgICAgIHZhciBmbGFn
ID0gbWF0cml4LnVwZGF0ZUZsYWc7CisgICAgICAgIGlmIChjYWNoZSAhPT0gdW5kZWZpbmVkICYm
IGNhY2hlID09PSBmbGFnKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBmbGFnOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTmF0aXZlUGlwZWxp
bmVDb250ZXh0LnByb3RvdHlwZS5fY2FjaGVGbG9hdDIgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUs
IHgsIHkpIHsKKyAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFt
ZV07CisgICAgICAgIGlmICghY2FjaGUpIHsKKyAgICAgICAgICAgIGNhY2hlID0gW3gsIHldOwor
ICAgICAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBjYWNoZTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHZhciBjaGFuZ2VkID0gZmFs
c2U7CisgICAgICAgIGlmIChjYWNoZVswXSAhPT0geCkgeworICAgICAgICAgICAgY2FjaGVbMF0g
PSB4OworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNhY2hlWzFdICE9PSB5KSB7CisgICAgICAgICAgICBjYWNoZVsxXSA9IHk7CisgICAgICAgICAg
ICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAg
ICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3Rv
dHlwZS5fY2FjaGVGbG9hdDMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIHgsIHksIHopIHsKKyAg
ICAgICAgdmFyIGNhY2hlID0gdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV07CisgICAgICAg
IGlmICghY2FjaGUpIHsKKyAgICAgICAgICAgIGNhY2hlID0gW3gsIHksIHpdOworICAgICAgICAg
ICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBjYWNoZTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGlmIChjYWNoZVswXSAhPT0geCkgeworICAgICAgICAgICAgY2FjaGVbMF0gPSB4OworICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhY2hlWzFd
ICE9PSB5KSB7CisgICAgICAgICAgICBjYWNoZVsxXSA9IHk7CisgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FjaGVbMl0gIT09IHopIHsKKyAgICAg
ICAgICAgIGNhY2hlWzJdID0gejsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBOYXRpdmVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLl9jYWNoZUZsb2F0NCA9IGZ1bmN0
aW9uICh1bmlmb3JtTmFtZSwgeCwgeSwgeiwgdykgeworICAgICAgICB2YXIgY2FjaGUgPSB0aGlz
Ll92YWx1ZUNhY2hlW3VuaWZvcm1OYW1lXTsKKyAgICAgICAgaWYgKCFjYWNoZSkgeworICAgICAg
ICAgICAgY2FjaGUgPSBbeCwgeSwgeiwgd107CisgICAgICAgICAgICB0aGlzLl92YWx1ZUNhY2hl
W3VuaWZvcm1OYW1lXSA9IGNhY2hlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGNhY2hlWzBdICE9
PSB4KSB7CisgICAgICAgICAgICBjYWNoZVswXSA9IHg7CisgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FjaGVbMV0gIT09IHkpIHsKKyAgICAgICAg
ICAgIGNhY2hlWzFdID0geTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIGlmIChjYWNoZVsyXSAhPT0geikgeworICAgICAgICAgICAgY2FjaGVbMl0gPSB6
OworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNh
Y2hlWzNdICE9PSB3KSB7CisgICAgICAgICAgICBjYWNoZVszXSA9IHc7CisgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgYW4gaW50ZXJnZXIgdmFsdWUgb24gYSB1bmlmb3JtIHZh
cmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4K
KyAgICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqLworICAgIE5hdGl2
ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0SW50ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1l
LCB2YWx1ZSkgeworICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl92YWx1ZUNhY2hlW3VuaWZvcm1O
YW1lXTsKKyAgICAgICAgaWYgKGNhY2hlICE9PSB1bmRlZmluZWQgJiYgY2FjaGUgPT09IHZhbHVl
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdmFsdWVD
YWNoZVt1bmlmb3JtTmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0SW50KHRo
aXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgdmFsdWUpOworICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0cyBhbiBpbnQgYXJyYXkgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJh
bSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkg
YXJyYXkgdG8gYmUgc2V0LgorICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90
b3R5cGUuc2V0SW50QXJyYXkgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAg
ICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhpcy5l
bmdpbmUuc2V0SW50QXJyYXkodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGludCBhcnJheSAyIG9uIGEgdW5pZm9ybSB2
YXJpYWJsZS4gKEFycmF5IGlzIHNwZWNpZmllZCBhcyBzaW5nbGUgYXJyYXkgZWcuIFsxLDIsMyw0
XSB3aWxsIHJlc3VsdCBpbiBbWzEsMl0sWzMsNF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBh
cmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJh
eSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnBy
b3RvdHlwZS5zZXRJbnRBcnJheTIgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFycmF5KSB7Cisg
ICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhp
cy5lbmdpbmUuc2V0SW50QXJyYXkyKHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgYXJyYXkp
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBpbnQgYXJyYXkgMyBvbiBhIHVuaWZv
cm0gdmFyaWFibGUuIChBcnJheSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwy
LDMsNCw1LDZdIHdpbGwgcmVzdWx0IGluIFtbMSwyLDNdLFs0LDUsNl1dIGluIHRoZSBzaGFkZXIp
CisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAq
IEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAgICovCisgICAgTmF0aXZlUGlwZWxp
bmVDb250ZXh0LnByb3RvdHlwZS5zZXRJbnRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUs
IGFycmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsK
KyAgICAgICAgdGhpcy5lbmdpbmUuc2V0SW50QXJyYXkzKHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1O
YW1lXSwgYXJyYXkpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhbiBpbnQgYXJyYXkg
NCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJheSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFy
cmF5IGVnLiBbMSwyLDMsNCw1LDYsNyw4XSB3aWxsIHJlc3VsdCBpbiBbWzEsMiwzLDRdLFs1LDYs
Nyw4XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0
aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAg
Ki8KKyAgICBOYXRpdmVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldEludEFycmF5NCA9IGZ1
bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1
bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVuZ2luZS5zZXRJbnRBcnJheTQodGhp
cy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIGFuIGZsb2F0IGFycmF5IG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFy
YW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5
IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBOYXRpdmVQaXBlbGluZUNvbnRleHQucHJv
dG90eXBlLnNldEZsb2F0QXJyYXkgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFycmF5KSB7Cisg
ICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhp
cy5lbmdpbmUuc2V0RmxvYXRBcnJheSh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIGFycmF5
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYW4gZmxvYXQgYXJyYXkgMiBvbiBhIHVu
aWZvcm0gdmFyaWFibGUuIChBcnJheSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBb
MSwyLDMsNF0gd2lsbCByZXN1bHQgaW4gW1sxLDJdLFszLDRdXSBpbiB0aGUgc2hhZGVyKQorICAg
ICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFy
YW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29u
dGV4dC5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTIgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFy
cmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXRBcnJheTIodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5h
bWVdLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGZsb2F0IGFycmF5
IDMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBh
cnJheSBlZy4gWzEsMiwzLDQsNSw2XSB3aWxsIHJlc3VsdCBpbiBbWzEsMiwzXSxbNCw1LDZdXSBp
biB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJp
YWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqLworICAg
IE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTMgPSBmdW5jdGlv
biAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9y
bU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXRBcnJheTModGhpcy5f
dW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXRzIGFuIGZsb2F0IGFycmF5IDQgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3Bl
Y2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDQsNSw2LDcsOF0gd2lsbCByZXN1bHQg
aW4gW1sxLDIsMyw0XSxbNSw2LDcsOF1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVu
aWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJh
eSB0byBiZSBzZXQuCisgICAgICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3RvdHlw
ZS5zZXRGbG9hdEFycmF5NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAg
ICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVu
Z2luZS5zZXRGbG9hdEFycmF5NCh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIGFycmF5KTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYW4gYXJyYXkgb24gYSB1bmlmb3JtIHZhcmlh
YmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAg
ICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqLworICAgIE5hdGl2ZVBp
cGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0QXJyYXkgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUs
IGFycmF5KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gbnVsbDsK
KyAgICAgICAgdGhpcy5lbmdpbmUuc2V0QXJyYXkodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVd
LCBhcnJheSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGFycmF5IDIgb24gYSB1
bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4g
WzEsMiwzLDRdIHdpbGwgcmVzdWx0IGluIFtbMSwyXSxbMyw0XV0gaW4gdGhlIHNoYWRlcikKKyAg
ICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBh
cmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBOYXRpdmVQaXBlbGluZUNv
bnRleHQucHJvdG90eXBlLnNldEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkp
IHsKKyAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAg
ICB0aGlzLmVuZ2luZS5zZXRBcnJheTIodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJh
eSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGFycmF5IDMgb24gYSB1bmlmb3Jt
IHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwz
LDQsNSw2XSB3aWxsIHJlc3VsdCBpbiBbWzEsMiwzXSxbNCw1LDZdXSBpbiB0aGUgc2hhZGVyKQor
ICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBA
cGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0
LgorICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0QXJyYXkz
ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aGlzLl92YWx1ZUNh
Y2hlW3VuaWZvcm1OYW1lXSA9IG51bGw7CisgICAgICAgIHRoaXMuZW5naW5lLnNldEFycmF5Myh0
aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIGFycmF5KTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldHMgYW4gYXJyYXkgNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJheSBpcyBzcGVj
aWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNCw1LDYsNyw4XSB3aWxsIHJlc3VsdCBp
biBbWzEsMiwzLDRdLFs1LDYsNyw4XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0gdW5p
Zm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5
IHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBOYXRpdmVQaXBlbGluZUNvbnRleHQucHJvdG90eXBl
LnNldEFycmF5NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhp
cy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlzLmVuZ2luZS5z
ZXRBcnJheTQodGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBhcnJheSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTZXRzIG1hdHJpY2VzIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAg
KiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFt
IG1hdHJpY2VzIG1hdHJpY2VzIHRvIGJlIHNldC4KKyAgICAgKi8KKyAgICBOYXRpdmVQaXBlbGlu
ZUNvbnRleHQucHJvdG90eXBlLnNldE1hdHJpY2VzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBt
YXRyaWNlcykgeworICAgICAgICBpZiAoIW1hdHJpY2VzKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxs
OworICAgICAgICB0aGlzLmVuZ2luZS5zZXRNYXRyaWNlcyh0aGlzLl91bmlmb3Jtc1t1bmlmb3Jt
TmFtZV0sIG1hdHJpY2VzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgbWF0cml4IG9u
IGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0
aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIG1hdHJpeCBtYXRyaXggdG8gYmUgc2V0LgorICAg
ICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0TWF0cml4ID0gZnVu
Y3Rpb24gKHVuaWZvcm1OYW1lLCBtYXRyaXgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2NhY2hlTWF0
cml4KHVuaWZvcm1OYW1lLCBtYXRyaXgpKSB7CisgICAgICAgICAgICB0aGlzLmVuZ2luZS5zZXRN
YXRyaWNlcyh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIG1hdHJpeC50b0FycmF5KCkpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgM3gzIG1hdHJpeCBvbiBh
IHVuaWZvcm0gdmFyaWFibGUuIChTcGVpY2lmaWVkIGFzIFsxLDIsMyw0LDUsNiw3LDgsOV0gd2ls
bCByZXN1bHQgaW4gWzEsMiwzXVs0LDUsNl1bNyw4LDldIG1hdHJpeCkKKyAgICAgKiBAcGFyYW0g
dW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIG1hdHJpeCBt
YXRyaXggdG8gYmUgc2V0LgorICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90
b3R5cGUuc2V0TWF0cml4M3gzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBtYXRyaXgpIHsKKyAg
ICAgICAgdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3JtTmFtZV0gPSBudWxsOworICAgICAgICB0aGlz
LmVuZ2luZS5zZXRNYXRyaXgzeDModGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBtYXRyaXgp
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIDJ4MiBtYXRyaXggb24gYSB1bmlmb3Jt
IHZhcmlhYmxlLiAoU3BlaWNpZmllZCBhcyBbMSwyLDMsNF0gd2lsbCByZXN1bHQgaW4gWzEsMl1b
Myw0XSBtYXRyaXgpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlh
YmxlLgorICAgICAqIEBwYXJhbSBtYXRyaXggbWF0cml4IHRvIGJlIHNldC4KKyAgICAgKi8KKyAg
ICBOYXRpdmVQaXBlbGluZUNvbnRleHQucHJvdG90eXBlLnNldE1hdHJpeDJ4MiA9IGZ1bmN0aW9u
ICh1bmlmb3JtTmFtZSwgbWF0cml4KSB7CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9y
bU5hbWVdID0gbnVsbDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0TWF0cml4MngyKHRoaXMuX3Vu
aWZvcm1zW3VuaWZvcm1OYW1lXSwgbWF0cml4KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
dHMgYSBmbG9hdCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1O
YW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBi
ZSBzZXQuCisgICAgICogQHJldHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisgICAgTmF0aXZl
UGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRGbG9hdCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFt
ZSwgdmFsdWUpIHsKKyAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fdmFsdWVDYWNoZVt1bmlmb3Jt
TmFtZV07CisgICAgICAgIGlmIChjYWNoZSAhPT0gdW5kZWZpbmVkICYmIGNhY2hlID09PSB2YWx1
ZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3ZhbHVl
Q2FjaGVbdW5pZm9ybU5hbWVdID0gdmFsdWU7CisgICAgICAgIHRoaXMuZW5naW5lLnNldEZsb2F0
KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgdmFsdWUpOworICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0cyBhIGJvb2xlYW4gb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJh
bSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYm9vbCB2
YWx1ZSB0byBiZSBzZXQuCisgICAgICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3Rv
dHlwZS5zZXRCb29sID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBib29sKSB7CisgICAgICAgIHZh
ciBjYWNoZSA9IHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdOworICAgICAgICBpZiAoY2Fj
aGUgIT09IHVuZGVmaW5lZCAmJiBjYWNoZSA9PT0gYm9vbCkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX3ZhbHVlQ2FjaGVbdW5pZm9ybU5hbWVdID0gYm9v
bDsKKyAgICAgICAgdGhpcy5lbmdpbmUuc2V0Qm9vbCh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFt
ZV0sIGJvb2wgPyAxIDogMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgVmVjdG9y
MiBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUg
b2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB2ZWN0b3IyIHZlY3RvcjIgdG8gYmUgc2V0
LgorICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0VmVjdG9y
MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgdmVjdG9yMikgeworICAgICAgICBpZiAodGhpcy5f
Y2FjaGVGbG9hdDIodW5pZm9ybU5hbWUsIHZlY3RvcjIueCwgdmVjdG9yMi55KSkgeworICAgICAg
ICAgICAgdGhpcy5lbmdpbmUuc2V0RmxvYXQyKHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwg
dmVjdG9yMi54LCB2ZWN0b3IyLnkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIGEgZmxvYXQyIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5p
Zm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIHggRmlyc3QgZmxv
YXQgaW4gZmxvYXQyLgorICAgICAqIEBwYXJhbSB5IFNlY29uZCBmbG9hdCBpbiBmbG9hdDIuCisg
ICAgICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRGbG9hdDIgPSBm
dW5jdGlvbiAodW5pZm9ybU5hbWUsIHgsIHkpIHsKKyAgICAgICAgaWYgKHRoaXMuX2NhY2hlRmxv
YXQyKHVuaWZvcm1OYW1lLCB4LCB5KSkgeworICAgICAgICAgICAgdGhpcy5lbmdpbmUuc2V0Rmxv
YXQyKHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgeCwgeSk7CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgYSBWZWN0b3IzIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4K
KyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICog
QHBhcmFtIHZlY3RvcjMgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqLworICAgIE5hdGl2ZVBpcGVs
aW5lQ29udGV4dC5wcm90b3R5cGUuc2V0VmVjdG9yMyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwg
dmVjdG9yMykgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDModW5pZm9ybU5hbWUsIHZl
Y3RvcjMueCwgdmVjdG9yMy55LCB2ZWN0b3IzLnopKSB7CisgICAgICAgICAgICB0aGlzLmVuZ2lu
ZS5zZXRGbG9hdDModGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCB2ZWN0b3IzLngsIHZlY3Rv
cjMueSwgdmVjdG9yMy56KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0
cyBhIGZsb2F0MyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1O
YW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB4IEZpcnN0IGZsb2F0IGlu
IGZsb2F0My4KKyAgICAgKiBAcGFyYW0geSBTZWNvbmQgZmxvYXQgaW4gZmxvYXQzLgorICAgICAq
IEBwYXJhbSB6IFRoaXJkIGZsb2F0IGluIGZsb2F0My4KKyAgICAgKi8KKyAgICBOYXRpdmVQaXBl
bGluZUNvbnRleHQucHJvdG90eXBlLnNldEZsb2F0MyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwg
eCwgeSwgeikgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDModW5pZm9ybU5hbWUsIHgs
IHksIHopKSB7CisgICAgICAgICAgICB0aGlzLmVuZ2luZS5zZXRGbG9hdDModGhpcy5fdW5pZm9y
bXNbdW5pZm9ybU5hbWVdLCB4LCB5LCB6KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0cyBhIFZlY3RvcjQgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJh
bSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdmVjdG9y
NCBWYWx1ZSB0byBiZSBzZXQuCisgICAgICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnBy
b3RvdHlwZS5zZXRWZWN0b3I0ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB2ZWN0b3I0KSB7Cisg
ICAgICAgIGlmICh0aGlzLl9jYWNoZUZsb2F0NCh1bmlmb3JtTmFtZSwgdmVjdG9yNC54LCB2ZWN0
b3I0LnksIHZlY3RvcjQueiwgdmVjdG9yNC53KSkgeworICAgICAgICAgICAgdGhpcy5lbmdpbmUu
c2V0RmxvYXQ0KHRoaXMuX3VuaWZvcm1zW3VuaWZvcm1OYW1lXSwgdmVjdG9yNC54LCB2ZWN0b3I0
LnksIHZlY3RvcjQueiwgdmVjdG9yNC53KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0cyBhIGZsb2F0NCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFt
IHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB4IEZpcnN0
IGZsb2F0IGluIGZsb2F0NC4KKyAgICAgKiBAcGFyYW0geSBTZWNvbmQgZmxvYXQgaW4gZmxvYXQ0
LgorICAgICAqIEBwYXJhbSB6IFRoaXJkIGZsb2F0IGluIGZsb2F0NC4KKyAgICAgKiBAcGFyYW0g
dyBGb3VydGggZmxvYXQgaW4gZmxvYXQ0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0Lgor
ICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5cGUuc2V0RmxvYXQ0ID0g
ZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB4LCB5LCB6LCB3KSB7CisgICAgICAgIGlmICh0aGlzLl9j
YWNoZUZsb2F0NCh1bmlmb3JtTmFtZSwgeCwgeSwgeiwgdykpIHsKKyAgICAgICAgICAgIHRoaXMu
ZW5naW5lLnNldEZsb2F0NCh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIHgsIHksIHosIHcp
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgQ29sb3IzIG9uIGEg
dW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUg
dmFyaWFibGUuCisgICAgICogQHBhcmFtIGNvbG9yMyBWYWx1ZSB0byBiZSBzZXQuCisgICAgICov
CisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRDb2xvcjMgPSBmdW5jdGlv
biAodW5pZm9ybU5hbWUsIGNvbG9yMykgeworICAgICAgICBpZiAodGhpcy5fY2FjaGVGbG9hdDMo
dW5pZm9ybU5hbWUsIGNvbG9yMy5yLCBjb2xvcjMuZywgY29sb3IzLmIpKSB7CisgICAgICAgICAg
ICB0aGlzLmVuZ2luZS5zZXRGbG9hdDModGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdLCBjb2xv
cjMuciwgY29sb3IzLmcsIGNvbG9yMy5iKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0cyBhIENvbG9yNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFt
IHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBjb2xvcjMg
VmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSBhbHBoYSBBbHBoYSB2YWx1ZSB0byBiZSBz
ZXQuCisgICAgICovCisgICAgTmF0aXZlUGlwZWxpbmVDb250ZXh0LnByb3RvdHlwZS5zZXRDb2xv
cjQgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGNvbG9yMywgYWxwaGEpIHsKKyAgICAgICAgaWYg
KHRoaXMuX2NhY2hlRmxvYXQ0KHVuaWZvcm1OYW1lLCBjb2xvcjMuciwgY29sb3IzLmcsIGNvbG9y
My5iLCBhbHBoYSkpIHsKKyAgICAgICAgICAgIHRoaXMuZW5naW5lLnNldEZsb2F0NCh0aGlzLl91
bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIGNvbG9yMy5yLCBjb2xvcjMuZywgY29sb3IzLmIsIGFscGhh
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIENvbG9yNCBvbiBh
IHVuaWZvcm0gdmFyaWFibGUKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgZGVmaW5lcyB0aGUg
bmFtZSBvZiB0aGUgdmFyaWFibGUKKyAgICAgKiBAcGFyYW0gY29sb3I0IGRlZmluZXMgdGhlIHZh
bHVlIHRvIGJlIHNldAorICAgICAqLworICAgIE5hdGl2ZVBpcGVsaW5lQ29udGV4dC5wcm90b3R5
cGUuc2V0RGlyZWN0Q29sb3I0ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBjb2xvcjQpIHsKKyAg
ICAgICAgaWYgKHRoaXMuX2NhY2hlRmxvYXQ0KHVuaWZvcm1OYW1lLCBjb2xvcjQuciwgY29sb3I0
LmcsIGNvbG9yNC5iLCBjb2xvcjQuYSkpIHsKKyAgICAgICAgICAgIHRoaXMuZW5naW5lLnNldERp
cmVjdENvbG9yNCh0aGlzLl91bmlmb3Jtc1t1bmlmb3JtTmFtZV0sIGNvbG9yNCk7CisgICAgICAg
IH0KKyAgICB9OworICAgIHJldHVybiBOYXRpdmVQaXBlbGluZUNvbnRleHQ7Cit9KCkpOworLyoq
CisgKiBDb250YWluZXIgZm9yIGFjY2Vzc29ycyBmb3IgbmF0aXZlbHktc3RvcmVkIG1lc2ggZGF0
YSBidWZmZXJzLgorICovCit2YXIgTmF0aXZlRGF0YUJ1ZmZlciA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2V4dGVuZHMiXShOYXRpdmVEYXRhQnVmZmVyLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIE5h
dGl2ZURhdGFCdWZmZXIoKSB7CisgICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1
cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpczsKKyAgICB9CisgICAgcmV0dXJuIE5h
dGl2ZURhdGFCdWZmZXI7Cit9KF9NZXNoZXNfZGF0YUJ1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJEYXRhQnVmZmVyIl0pKTsKKy8vIFRPRE86IGNoYW5nZSB0aGlzIHRvIG1hdGNo
IGJnZnguCisvLyBNdXN0IG1hdGNoIEZpbHRlciBlbnVtIGluIFNwZWN0cmVFbmdpbmUuaC4KK3Zh
ciBOYXRpdmVGaWx0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rp
b24gTmF0aXZlRmlsdGVyKCkgeworICAgIH0KKyAgICBOYXRpdmVGaWx0ZXIuUE9JTlQgPSAwOwor
ICAgIE5hdGl2ZUZpbHRlci5NSU5QT0lOVF9NQUdQT0lOVF9NSVBQT0lOVCA9IE5hdGl2ZUZpbHRl
ci5QT0lOVDsKKyAgICBOYXRpdmVGaWx0ZXIuQklMSU5FQVIgPSAxOworICAgIE5hdGl2ZUZpbHRl
ci5NSU5MSU5FQVJfTUFHTElORUFSX01JUFBPSU5UID0gTmF0aXZlRmlsdGVyLkJJTElORUFSOwor
ICAgIE5hdGl2ZUZpbHRlci5UUklMSU5FQVIgPSAyOworICAgIE5hdGl2ZUZpbHRlci5NSU5MSU5F
QVJfTUFHTElORUFSX01JUExJTkVBUiA9IE5hdGl2ZUZpbHRlci5UUklMSU5FQVI7CisgICAgTmF0
aXZlRmlsdGVyLkFOSVNPVFJPUElDID0gMzsKKyAgICBOYXRpdmVGaWx0ZXIuUE9JTlRfQ09NUEFS
RSA9IDQ7CisgICAgTmF0aXZlRmlsdGVyLlRSSUxJTkVBUl9DT01QQVJFID0gNTsKKyAgICBOYXRp
dmVGaWx0ZXIuTUlOQklMSU5FQVJfTUFHUE9JTlQgPSA2OworICAgIE5hdGl2ZUZpbHRlci5NSU5M
SU5FQVJfTUFHUE9JTlRfTUlQTElORUFSID0gTmF0aXZlRmlsdGVyLk1JTkJJTElORUFSX01BR1BP
SU5UOworICAgIE5hdGl2ZUZpbHRlci5NSU5QT0lOVF9NQUdQT0lOVF9NSVBMSU5FQVIgPSA3Owor
ICAgIE5hdGl2ZUZpbHRlci5NSU5QT0lOVF9NQUdMSU5FQVJfTUlQUE9JTlQgPSA4OworICAgIE5h
dGl2ZUZpbHRlci5NSU5QT0lOVF9NQUdMSU5FQVJfTUlQTElORUFSID0gOTsKKyAgICBOYXRpdmVG
aWx0ZXIuTUlOTElORUFSX01BR1BPSU5UX01JUFBPSU5UID0gMTA7CisgICAgcmV0dXJuIE5hdGl2
ZUZpbHRlcjsKK30oKSk7CisvLyBUT0RPOiBjaGFuZ2UgdGhpcyB0byBtYXRjaCBiZ2Z4LgorLy8g
TXVzdCBtYXRjaCBBZGRyZXNzTW9kZSBlbnVtIGluIFNwZWN0cmVFbmdpbmUuaC4KK3ZhciBOYXRp
dmVBZGRyZXNzTW9kZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlv
biBOYXRpdmVBZGRyZXNzTW9kZSgpIHsKKyAgICB9CisgICAgTmF0aXZlQWRkcmVzc01vZGUuV1JB
UCA9IDA7CisgICAgTmF0aXZlQWRkcmVzc01vZGUuTUlSUk9SID0gMTsKKyAgICBOYXRpdmVBZGRy
ZXNzTW9kZS5DTEFNUCA9IDI7CisgICAgTmF0aXZlQWRkcmVzc01vZGUuQk9SREVSID0gMzsKKyAg
ICBOYXRpdmVBZGRyZXNzTW9kZS5NSVJST1JfT05DRSA9IDQ7CisgICAgcmV0dXJuIE5hdGl2ZUFk
ZHJlc3NNb2RlOworfSgpKTsKKy8qKiBAaGlkZGVuICovCit2YXIgTmF0aXZlRW5naW5lID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKE5hdGl2ZUVuZ2luZSwgX3N1cGVyKTsKKyAgICBm
dW5jdGlvbiBOYXRpdmVFbmdpbmUoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxs
KHRoaXMsIG51bGwpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9uYXRpdmUgPSBuYXRpdmVFbmdp
bmU7CisgICAgICAgIF90aGlzLl93ZWJHTFZlcnNpb24gPSAyOworICAgICAgICBfdGhpcy5kaXNh
YmxlVW5pZm9ybUJ1ZmZlcnMgPSB0cnVlOworICAgICAgICAvLyBUT0RPOiBJbml0aWFsaXplIHRo
aXMgbW9yZSBjb3JyZWN0bHkgYmFzZWQgb24gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4KKyAg
ICAgICAgLy8gSW5pdCBjYXBzCisgICAgICAgIF90aGlzLl9jYXBzID0gbmV3IF9FbmdpbmVzX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmVDYXBhYmlsaXRpZXMiXSgp
OworICAgICAgICBfdGhpcy5fY2Fwcy5tYXhUZXh0dXJlc0ltYWdlVW5pdHMgPSAxNjsKKyAgICAg
ICAgX3RoaXMuX2NhcHMubWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAxNjsKKyAgICAgICAg
X3RoaXMuX2NhcHMubWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgICAgIF90aGlzLl9jYXBzLm1h
eEN1YmVtYXBUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAgICAgX3RoaXMuX2NhcHMubWF4UmVuZGVy
VGV4dHVyZVNpemUgPSA1MTI7CisgICAgICAgIF90aGlzLl9jYXBzLm1heFZlcnRleEF0dHJpYnMg
PSAxNjsKKyAgICAgICAgX3RoaXMuX2NhcHMubWF4VmFyeWluZ1ZlY3RvcnMgPSAxNjsKKyAgICAg
ICAgX3RoaXMuX2NhcHMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9IDE2OworICAgICAgICBf
dGhpcy5fY2Fwcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IDE2OworICAgICAgICAvLyBFeHRl
bnNpb25zCisgICAgICAgIF90aGlzLl9jYXBzLnN0YW5kYXJkRGVyaXZhdGl2ZXMgPSB0cnVlOwor
ICAgICAgICBfdGhpcy5fY2Fwcy5hc3RjID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX2NhcHMuczN0
YyA9IG51bGw7CisgICAgICAgIF90aGlzLl9jYXBzLnB2cnRjID0gbnVsbDsKKyAgICAgICAgX3Ro
aXMuX2NhcHMuZXRjMSA9IG51bGw7CisgICAgICAgIF90aGlzLl9jYXBzLmV0YzIgPSBudWxsOwor
ICAgICAgICBfdGhpcy5fY2Fwcy5tYXhBbmlzb3Ryb3B5ID0gMTY7IC8vIFRPRE86IFJldHJpZXZl
IHRoaXMgc21hcnRseS4gQ3VycmVudGx5IHNldCB0byBEM0QxMSBtYXhpbXVtIGFsbG93YWJsZSB2
YWx1ZS4KKyAgICAgICAgX3RoaXMuX2NhcHMudWludEluZGljZXMgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuX2NhcHMuZnJhZ21lbnREZXB0aFN1cHBvcnRlZCA9IGZhbHNlOworICAgICAgICBfdGhp
cy5fY2Fwcy5oaWdoUHJlY2lzaW9uU2hhZGVyU3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgX3Ro
aXMuX2NhcHMuY29sb3JCdWZmZXJGbG9hdCA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2Fwcy50
ZXh0dXJlRmxvYXQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2NhcHMudGV4dHVyZUZsb2F0TGlu
ZWFyRmlsdGVyaW5nID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9jYXBzLnRleHR1cmVGbG9hdFJl
bmRlciA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZsb2F0ID0gZmFs
c2U7CisgICAgICAgIF90aGlzLl9jYXBzLnRleHR1cmVIYWxmRmxvYXRMaW5lYXJGaWx0ZXJpbmcg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2NhcHMudGV4dHVyZUhhbGZGbG9hdFJlbmRlciA9IGZh
bHNlOworICAgICAgICBfdGhpcy5fY2Fwcy50ZXh0dXJlTE9EID0gdHJ1ZTsKKyAgICAgICAgX3Ro
aXMuX2NhcHMuZHJhd0J1ZmZlcnNFeHRlbnNpb24gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2Nh
cHMuZGVwdGhUZXh0dXJlRXh0ZW5zaW9uID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9jYXBzLnZl
cnRleEFycmF5T2JqZWN0ID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX2NhcHMuaW5zdGFuY2VkQXJy
YXlzID0gZmFsc2U7CisgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X19bIlRvb2xzIl0uTG9nKCJCYWJ5bG9uIE5hdGl2ZSAodiIgKyBfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uVmVyc2lvbiArICIpIGxhdW5j
aGVkIik7CisgICAgICAgIC8vIFdyYXBwZXJzCisgICAgICAgIGlmICh0eXBlb2YgVVJMID09PSAi
dW5kZWZpbmVkIikgeworICAgICAgICAgICAgd2luZG93LlVSTCA9IHsKKyAgICAgICAgICAgICAg
ICBjcmVhdGVPYmplY3RVUkw6IGZ1bmN0aW9uICgpIHsgfSwKKyAgICAgICAgICAgICAgICByZXZv
a2VPYmplY3RVUkw6IGZ1bmN0aW9uICgpIHsgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodHlwZW9mIEJsb2IgPT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICB3
aW5kb3cuQmxvYiA9IGZ1bmN0aW9uICgpIHsgfTsKKyAgICAgICAgfQorICAgICAgICAvLyBTaGFk
ZXIgcHJvY2Vzc29yCisgICAgICAgIF90aGlzLl9zaGFkZXJQcm9jZXNzb3IgPSBuZXcgX05hdGl2
ZV9uYXRpdmVTaGFkZXJQcm9jZXNzb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTmF0
aXZlU2hhZGVyUHJvY2Vzc29yIl0oKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAg
ICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLmdldEhhcmR3YXJlU2NhbGluZ0xldmVsID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gMS4wOworICAgIH07CisgICAgLyoqCisgICAgICogQ2Fu
IGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGN1cnJlbnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHJl
cXVlc3Rlci4KKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgTmF0aXZlRW5naW5lLnByb3Rv
dHlwZS5fcXVldWVOZXdGcmFtZSA9IGZ1bmN0aW9uIChiaW5kZWRSZW5kZXJGdW5jdGlvbiwgcmVx
dWVzdGVyKSB7CisgICAgICAgIHRoaXMuX25hdGl2ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYmlu
ZGVkUmVuZGVyRnVuY3Rpb24pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9OworICAgIE5hdGl2
ZUVuZ2luZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoY29sb3IsIGJhY2tCdWZmZXIsIGRl
cHRoLCBzdGVuY2lsKSB7CisgICAgICAgIGlmIChzdGVuY2lsID09PSB2b2lkIDApIHsgc3RlbmNp
bCA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMuX25hdGl2ZS5jbGVhcihjb2xvci5yLCBjb2xvci5n
LCBjb2xvci5iLCBjb2xvci5hLCBiYWNrQnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgfTsK
KyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24g
KGluZGljZXMpIHsKKyAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9ub3JtYWxpemVJbmRleERhdGEo
aW5kaWNlcyk7CisgICAgICAgIHZhciBidWZmZXIgPSBuZXcgTmF0aXZlRGF0YUJ1ZmZlcigpOwor
ICAgICAgICBidWZmZXIucmVmZXJlbmNlcyA9IDE7CisgICAgICAgIGJ1ZmZlci5pczMyQml0cyA9
IChkYXRhLkJZVEVTX1BFUl9FTEVNRU5UID09PSA0KTsKKyAgICAgICAgYnVmZmVyLm5hdGl2ZUlu
ZGV4QnVmZmVyID0gdGhpcy5fbmF0aXZlLmNyZWF0ZUluZGV4QnVmZmVyKGRhdGEpOworICAgICAg
ICByZXR1cm4gYnVmZmVyOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5jcmVh
dGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB2YXIgYnVmZmVyID0g
bmV3IE5hdGl2ZURhdGFCdWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLnJlZmVyZW5jZXMgPSAxOwor
ICAgICAgICBidWZmZXIubmF0aXZlVmVydGV4QnVmZmVyID0gdGhpcy5fbmF0aXZlLmNyZWF0ZVZl
cnRleEJ1ZmZlcihBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkgPyBkYXRhIDogbmV3IEZsb2F0MzJB
cnJheShkYXRhKSk7CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgfTsKKyAgICBOYXRpdmVF
bmdpbmUucHJvdG90eXBlLnJlY29yZFZlcnRleEFycmF5T2JqZWN0ID0gZnVuY3Rpb24gKHZlcnRl
eEJ1ZmZlcnMsIGluZGV4QnVmZmVyLCBlZmZlY3QpIHsKKyAgICAgICAgdmFyIHZlcnRleEFycmF5
ID0gdGhpcy5fbmF0aXZlLmNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgICAgIGlmIChpbmRleEJ1
ZmZlcikgeworICAgICAgICAgICAgdGhpcy5fbmF0aXZlLnJlY29yZEluZGV4QnVmZmVyKHZlcnRl
eEFycmF5LCBpbmRleEJ1ZmZlci5uYXRpdmVJbmRleEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIGF0dHJpYnV0ZXMgPSBlZmZlY3QuZ2V0QXR0cmlidXRlc05hbWVzKCk7CisgICAgICAg
IGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaW5kZXgrKykg
eworICAgICAgICAgICAgdmFyIGxvY2F0aW9uXzEgPSBlZmZlY3QuZ2V0QXR0cmlidXRlTG9jYXRp
b24oaW5kZXgpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uXzEgPj0gMCkgeworICAgICAgICAg
ICAgICAgIHZhciBraW5kID0gYXR0cmlidXRlc1tpbmRleF07CisgICAgICAgICAgICAgICAgdmFy
IHZlcnRleEJ1ZmZlciA9IHZlcnRleEJ1ZmZlcnNba2luZF07CisgICAgICAgICAgICAgICAgaWYg
KHZlcnRleEJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdmVydGV4
QnVmZmVyLmdldEJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9uYXRpdmUucmVjb3JkVmVydGV4QnVmZmVyKHZl
cnRleEFycmF5LCBidWZmZXIubmF0aXZlVmVydGV4QnVmZmVyLCBsb2NhdGlvbl8xLCB2ZXJ0ZXhC
dWZmZXIuYnl0ZU9mZnNldCwgdmVydGV4QnVmZmVyLmJ5dGVTdHJpZGUsIHZlcnRleEJ1ZmZlci5n
ZXRTaXplKCksIHZlcnRleEJ1ZmZlci50eXBlLCB2ZXJ0ZXhCdWZmZXIubm9ybWFsaXplZCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZlcnRleEFycmF5OworICAgIH07CisgICAgTmF0aXZl
RW5naW5lLnByb3RvdHlwZS5iaW5kVmVydGV4QXJyYXlPYmplY3QgPSBmdW5jdGlvbiAodmVydGV4
QXJyYXkpIHsKKyAgICAgICAgdGhpcy5fbmF0aXZlLmJpbmRWZXJ0ZXhBcnJheSh2ZXJ0ZXhBcnJh
eSk7CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnJlbGVhc2VWZXJ0ZXhBcnJh
eU9iamVjdCA9IGZ1bmN0aW9uICh2ZXJ0ZXhBcnJheSkgeworICAgICAgICB0aGlzLl9uYXRpdmUu
ZGVsZXRlVmVydGV4QXJyYXkodmVydGV4QXJyYXkpOworICAgIH07CisgICAgTmF0aXZlRW5naW5l
LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCwgYXR0
cmlidXRlc05hbWVzKSB7CisgICAgICAgIHZhciBuYXRpdmVQaXBlbGluZUNvbnRleHQgPSBwaXBl
bGluZUNvbnRleHQ7CisgICAgICAgIHJldHVybiB0aGlzLl9uYXRpdmUuZ2V0QXR0cmlidXRlcyhu
YXRpdmVQaXBlbGluZUNvbnRleHQubmF0aXZlUHJvZ3JhbSwgYXR0cmlidXRlc05hbWVzKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIERyYXcgYSBsaXN0IG9mIGluZGV4ZWQgcHJpbWl0aXZlcwor
ICAgICAqIEBwYXJhbSBmaWxsTW9kZSBkZWZpbmVzIHRoZSBwcmltaXRpdmUgdG8gdXNlCisgICAg
ICogQHBhcmFtIGluZGV4U3RhcnQgZGVmaW5lcyB0aGUgc3RhcnRpbmcgaW5kZXgKKyAgICAgKiBA
cGFyYW0gaW5kZXhDb3VudCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgaW5kZXggdG8gZHJhdworICAg
ICAqIEBwYXJhbSBpbnN0YW5jZXNDb3VudCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgaW5zdGFuY2Vz
IHRvIGRyYXcgKGlmIGluc3RhbmNpYXRpb24gaXMgZW5hYmxlZCkKKyAgICAgKi8KKyAgICBOYXRp
dmVFbmdpbmUucHJvdG90eXBlLmRyYXdFbGVtZW50c1R5cGUgPSBmdW5jdGlvbiAoZmlsbE1vZGUs
IGluZGV4U3RhcnQsIGluZGV4Q291bnQsIGluc3RhbmNlc0NvdW50KSB7CisgICAgICAgIC8vIEFw
cGx5IHN0YXRlcworICAgICAgICB0aGlzLl9kcmF3Q2FsbHMuYWRkQ291bnQoMSwgZmFsc2UpOwor
ICAgICAgICAvLyBUT0RPOiBNYWtlIHRoaXMgaW1wbGVtZW50YXRpb24gbW9yZSByb2J1c3QgbGlr
ZSBjb3JlIEVuZ2luZSB2ZXJzaW9uLgorICAgICAgICAvLyBSZW5kZXIKKyAgICAgICAgLy92YXIg
aW5kZXhGb3JtYXQgPSB0aGlzLl91aW50SW5kaWNlc0N1cnJlbnRseVNldCA/IHRoaXMuX2dsLlVO
U0lHTkVEX0lOVCA6IHRoaXMuX2dsLlVOU0lHTkVEX1NIT1JUOworICAgICAgICAvL3ZhciBtdWx0
ID0gdGhpcy5fdWludEluZGljZXNDdXJyZW50bHlTZXQgPyA0IDogMjsKKyAgICAgICAgLy8gaWYg
KGluc3RhbmNlc0NvdW50KSB7CisgICAgICAgIC8vICAgICB0aGlzLl9nbC5kcmF3RWxlbWVudHNJ
bnN0YW5jZWQoZHJhd01vZGUsIGluZGV4Q291bnQsIGluZGV4Rm9ybWF0LCBpbmRleFN0YXJ0ICog
bXVsdCwgaW5zdGFuY2VzQ291bnQpOworICAgICAgICAvLyB9IGVsc2UgeworICAgICAgICB0aGlz
Ll9uYXRpdmUuZHJhd0luZGV4ZWQoZmlsbE1vZGUsIGluZGV4U3RhcnQsIGluZGV4Q291bnQpOwor
ICAgICAgICAvLyB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEcmF3IGEgbGlzdCBvZiB1bmlu
ZGV4ZWQgcHJpbWl0aXZlcworICAgICAqIEBwYXJhbSBmaWxsTW9kZSBkZWZpbmVzIHRoZSBwcmlt
aXRpdmUgdG8gdXNlCisgICAgICogQHBhcmFtIHZlcnRpY2VzU3RhcnQgZGVmaW5lcyB0aGUgaW5k
ZXggb2YgZmlyc3QgdmVydGV4IHRvIGRyYXcKKyAgICAgKiBAcGFyYW0gdmVydGljZXNDb3VudCBk
ZWZpbmVzIHRoZSBjb3VudCBvZiB2ZXJ0aWNlcyB0byBkcmF3CisgICAgICogQHBhcmFtIGluc3Rh
bmNlc0NvdW50IGRlZmluZXMgdGhlIG51bWJlciBvZiBpbnN0YW5jZXMgdG8gZHJhdyAoaWYgaW5z
dGFuY2lhdGlvbiBpcyBlbmFibGVkKQorICAgICAqLworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5
cGUuZHJhd0FycmF5c1R5cGUgPSBmdW5jdGlvbiAoZmlsbE1vZGUsIHZlcnRpY2VzU3RhcnQsIHZl
cnRpY2VzQ291bnQsIGluc3RhbmNlc0NvdW50KSB7CisgICAgICAgIC8vIEFwcGx5IHN0YXRlcwor
ICAgICAgICB0aGlzLl9kcmF3Q2FsbHMuYWRkQ291bnQoMSwgZmFsc2UpOworICAgICAgICAvLyBU
T0RPOiBNYWtlIHRoaXMgaW1wbGVtZW50YXRpb24gbW9yZSByb2J1c3QgbGlrZSBjb3JlIEVuZ2lu
ZSB2ZXJzaW9uLgorICAgICAgICAvLyBpZiAoaW5zdGFuY2VzQ291bnQpIHsKKyAgICAgICAgLy8g
ICAgIHRoaXMuX2dsLmRyYXdBcnJheXNJbnN0YW5jZWQoZHJhd01vZGUsIHZlcnRpY2VzU3RhcnQs
IHZlcnRpY2VzQ291bnQsIGluc3RhbmNlc0NvdW50KTsKKyAgICAgICAgLy8gfSBlbHNlIHsKKyAg
ICAgICAgdGhpcy5fbmF0aXZlLmRyYXcoZmlsbE1vZGUsIHZlcnRpY2VzU3RhcnQsIHZlcnRpY2Vz
Q291bnQpOworICAgICAgICAvLyB9CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBl
LmNyZWF0ZVBpcGVsaW5lQ29udGV4dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBOYXRpdmVQaXBlbGluZUNvbnRleHQoKTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90
b3R5cGUuX3ByZXBhcmVQaXBlbGluZUNvbnRleHQgPSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0
LCB2ZXJ0ZXhTb3VyY2VDb2RlLCBmcmFnbWVudFNvdXJjZUNvZGUsIGNyZWF0ZUFzUmF3LCByZWJ1
aWxkUmViaW5kLCBkZWZpbmVzLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKSB7CisgICAgICAg
IHZhciBuYXRpdmVQaXBlbGluZUNvbnRleHQgPSBwaXBlbGluZUNvbnRleHQ7CisgICAgICAgIGlm
IChjcmVhdGVBc1JhdykgeworICAgICAgICAgICAgbmF0aXZlUGlwZWxpbmVDb250ZXh0Lm5hdGl2
ZVByb2dyYW0gPSB0aGlzLmNyZWF0ZVJhd1NoYWRlclByb2dyYW0ocGlwZWxpbmVDb250ZXh0LCB2
ZXJ0ZXhTb3VyY2VDb2RlLCBmcmFnbWVudFNvdXJjZUNvZGUsIHVuZGVmaW5lZCwgdHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBuYXRpdmVQaXBlbGluZUNvbnRleHQubmF0aXZlUHJvZ3JhbSA9IHRoaXMuY3JlYXRlU2hhZGVy
UHJvZ3JhbShwaXBlbGluZUNvbnRleHQsIHZlcnRleFNvdXJjZUNvZGUsIGZyYWdtZW50U291cmNl
Q29kZSwgZGVmaW5lcywgdW5kZWZpbmVkLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOYXRpdmVFbmdpbmUucHJv
dG90eXBlLl9pc1JlbmRlcmluZ1N0YXRlQ29tcGlsZWQgPSBmdW5jdGlvbiAocGlwZWxpbmVDb250
ZXh0KSB7CisgICAgICAgIC8vIFRPRE86IHN1cHBvcnQgYXN5bmMgc2hhZGVyIGNvbXBpbGNhdGlv
bgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAg
TmF0aXZlRW5naW5lLnByb3RvdHlwZS5fZXhlY3V0ZVdoZW5SZW5kZXJpbmdTdGF0ZUlzQ29tcGls
ZWQgPSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0LCBhY3Rpb24pIHsKKyAgICAgICAgLy8gVE9E
Tzogc3VwcG9ydCBhc3luYyBzaGFkZXIgY29tcGlsY2F0aW9uCisgICAgICAgIGFjdGlvbigpOwor
ICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5jcmVhdGVSYXdTaGFkZXJQcm9ncmFt
ID0gZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCwgdmVydGV4Q29kZSwgZnJhZ21lbnRDb2RlLCBj
b250ZXh0LCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKSB7CisgICAgICAgIGlmICh0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzID09PSB2b2lkIDApIHsgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyA9IG51bGw7IH0KKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgU3VwcG9ydGVkIik7Cisg
ICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVNoYWRlclByb2dyYW0gPSBm
dW5jdGlvbiAocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhDb2RlLCBmcmFnbWVudENvZGUsIGRlZmlu
ZXMsIGNvbnRleHQsIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpIHsKKyAgICAgICAgaWYgKHRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MgPT09IHZvaWQgMCkgeyB0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzID0gbnVsbDsgfQorICAgICAgICB0aGlzLm9uQmVmb3JlU2hhZGVyQ29tcGlsYXRpb25P
YnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgdmFyIHByb2dyYW0gPSB0
aGlzLl9uYXRpdmUuY3JlYXRlUHJvZ3JhbShfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siRW5naW5lIl0uX2NvbmNhdGVuYXRlU2hhZGVyKHZlcnRleENvZGUsIGRl
ZmluZXMpLCBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5n
aW5lIl0uX2NvbmNhdGVuYXRlU2hhZGVyKGZyYWdtZW50Q29kZSwgZGVmaW5lcykpOworICAgICAg
ICB0aGlzLm9uQWZ0ZXJTaGFkZXJDb21waWxhdGlvbk9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJz
KHRoaXMpOworICAgICAgICByZXR1cm4gcHJvZ3JhbTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2lu
ZS5wcm90b3R5cGUuX3NldFByb2dyYW0gPSBmdW5jdGlvbiAocHJvZ3JhbSkgeworICAgICAgICBp
ZiAodGhpcy5fY3VycmVudFByb2dyYW0gIT09IHByb2dyYW0pIHsKKyAgICAgICAgICAgIHRoaXMu
X25hdGl2ZS5zZXRQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgdGhpcy5fY3VycmVudFBy
b2dyYW0gPSBwcm9ncmFtOworICAgICAgICB9CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJv
dG90eXBlLl9yZWxlYXNlRWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAvLyBU
T0RPCisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLl9kZWxldGVQaXBlbGluZUNv
bnRleHQgPSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0KSB7CisgICAgICAgIC8vIFRPRE8KKyAg
ICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuZ2V0VW5pZm9ybXMgPSBmdW5jdGlvbiAo
cGlwZWxpbmVDb250ZXh0LCB1bmlmb3Jtc05hbWVzKSB7CisgICAgICAgIHZhciBuYXRpdmVQaXBl
bGluZUNvbnRleHQgPSBwaXBlbGluZUNvbnRleHQ7CisgICAgICAgIHJldHVybiB0aGlzLl9uYXRp
dmUuZ2V0VW5pZm9ybXMobmF0aXZlUGlwZWxpbmVDb250ZXh0Lm5hdGl2ZVByb2dyYW0sIHVuaWZv
cm1zTmFtZXMpOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5iaW5kVW5pZm9y
bUJsb2NrID0gZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCwgYmxvY2tOYW1lLCBpbmRleCkgewor
ICAgICAgICAvLyBUT0RPCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IEltcGxlbWVudGVk
Iik7CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLmJpbmRTYW1wbGVycyA9IGZ1
bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgdmFyIG5hdGl2ZVBpcGVsaW5lQ29udGV4dCA9IGVm
ZmVjdC5nZXRQaXBlbGluZUNvbnRleHQoKTsKKyAgICAgICAgdGhpcy5fc2V0UHJvZ3JhbShuYXRp
dmVQaXBlbGluZUNvbnRleHQubmF0aXZlUHJvZ3JhbSk7CisgICAgICAgIC8vIFRPRE86IHNoYXJl
IHRoaXMgd2l0aCBlbmdpbmU/CisgICAgICAgIHZhciBzYW1wbGVycyA9IGVmZmVjdC5nZXRTYW1w
bGVycygpOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc2FtcGxlcnMubGVu
Z3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgdW5pZm9ybSA9IGVmZmVjdC5nZXRVbmlm
b3JtKHNhbXBsZXJzW2luZGV4XSk7CisgICAgICAgICAgICBpZiAodW5pZm9ybSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuX2JvdW5kVW5pZm9ybXNbaW5kZXhdID0gdW5pZm9ybTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0ID0gbnVsbDsKKyAg
ICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0TWF0cml4ID0gZnVuY3Rpb24gKHVu
aWZvcm0sIG1hdHJpeCkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRpdmUuc2V0TWF0cml4KHVuaWZvcm0s
IG1hdHJpeC50b0FycmF5KCkpOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5n
ZXRSZW5kZXJXaWR0aCA9IGZ1bmN0aW9uICh1c2VTY3JlZW4pIHsKKyAgICAgICAgaWYgKHVzZVNj
cmVlbiA9PT0gdm9pZCAwKSB7IHVzZVNjcmVlbiA9IGZhbHNlOyB9CisgICAgICAgIGlmICghdXNl
U2NyZWVuICYmIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0LndpZHRoOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLl9uYXRpdmUuZ2V0UmVuZGVyV2lkdGgoKTsKKyAgICB9OworICAgIE5hdGl2ZUVu
Z2luZS5wcm90b3R5cGUuZ2V0UmVuZGVySGVpZ2h0ID0gZnVuY3Rpb24gKHVzZVNjcmVlbikgewor
ICAgICAgICBpZiAodXNlU2NyZWVuID09PSB2b2lkIDApIHsgdXNlU2NyZWVuID0gZmFsc2U7IH0K
KyAgICAgICAgaWYgKCF1c2VTY3JlZW4gJiYgdGhpcy5fY3VycmVudFJlbmRlclRhcmdldCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQuaGVpZ2h0OworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9uYXRpdmUuZ2V0UmVuZGVySGVpZ2h0KCk7Cisg
ICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnNldFZpZXdwb3J0ID0gZnVuY3Rpb24g
KHZpZXdwb3J0LCByZXF1aXJlZFdpZHRoLCByZXF1aXJlZEhlaWdodCkgeworICAgICAgICAvLyBU
T0RPOiBJbXBsZW1lbnQuCisgICAgICAgIHRoaXMuX2NhY2hlZFZpZXdwb3J0ID0gdmlld3BvcnQ7
CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24g
KGN1bGxpbmcsIHpPZmZzZXQsIGZvcmNlLCByZXZlcnNlU2lkZSkgeworICAgICAgICBpZiAoek9m
ZnNldCA9PT0gdm9pZCAwKSB7IHpPZmZzZXQgPSAwOyB9CisgICAgICAgIGlmIChyZXZlcnNlU2lk
ZSA9PT0gdm9pZCAwKSB7IHJldmVyc2VTaWRlID0gZmFsc2U7IH0KKyAgICAgICAgdGhpcy5fbmF0
aXZlLnNldFN0YXRlKGN1bGxpbmcsIHpPZmZzZXQsIHJldmVyc2VTaWRlKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldCB0aGUgeiBvZmZzZXQgdG8gYXBwbHkgdG8gY3VycmVudCByZW5kZXJp
bmcKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5lcyB0aGUgb2Zmc2V0IHRvIGFwcGx5CisgICAg
ICovCisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5zZXRaT2Zmc2V0ID0gZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgIHRoaXMuX25hdGl2ZS5zZXRaT2Zmc2V0KHZhbHVlKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHpPZmZzZXQKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB6T2Zmc2V0IHN0YXRlCisgICAgICovCisgICAgTmF0
aXZlRW5naW5lLnByb3RvdHlwZS5nZXRaT2Zmc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fbmF0aXZlLmdldFpPZmZzZXQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEVuYWJsZSBvciBkaXNhYmxlIGRlcHRoIGJ1ZmZlcmluZworICAgICAqIEBwYXJhbSBlbmFibGUg
ZGVmaW5lcyB0aGUgc3RhdGUgdG8gc2V0CisgICAgICovCisgICAgTmF0aXZlRW5naW5lLnByb3Rv
dHlwZS5zZXREZXB0aEJ1ZmZlciA9IGZ1bmN0aW9uIChlbmFibGUpIHsKKyAgICAgICAgdGhpcy5f
bmF0aXZlLnNldERlcHRoVGVzdChlbmFibGUpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0
cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBkZXB0aCB3cml0aW5nIGlzIGVuYWJsZWQKKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCBkZXB0aCB3cml0aW5nIHN0YXRlCisgICAgICovCisgICAg
TmF0aXZlRW5naW5lLnByb3RvdHlwZS5nZXREZXB0aFdyaXRlID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5fbmF0aXZlLmdldERlcHRoV3JpdGUoKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIGRlcHRoIHdyaXRpbmcKKyAgICAgKiBAcGFyYW0g
ZW5hYmxlIGRlZmluZXMgdGhlIHN0YXRlIHRvIHNldAorICAgICAqLworICAgIE5hdGl2ZUVuZ2lu
ZS5wcm90b3R5cGUuc2V0RGVwdGhXcml0ZSA9IGZ1bmN0aW9uIChlbmFibGUpIHsKKyAgICAgICAg
dGhpcy5fbmF0aXZlLnNldERlcHRoV3JpdGUoZW5hYmxlKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEVuYWJsZSBvciBkaXNhYmxlIGNvbG9yIHdyaXRpbmcKKyAgICAgKiBAcGFyYW0gZW5hYmxl
IGRlZmluZXMgdGhlIHN0YXRlIHRvIHNldAorICAgICAqLworICAgIE5hdGl2ZUVuZ2luZS5wcm90
b3R5cGUuc2V0Q29sb3JXcml0ZSA9IGZ1bmN0aW9uIChlbmFibGUpIHsKKyAgICAgICAgdGhpcy5f
bmF0aXZlLnNldENvbG9yV3JpdGUoZW5hYmxlKTsKKyAgICAgICAgdGhpcy5fY29sb3JXcml0ZSA9
IGVuYWJsZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRp
bmcgaWYgY29sb3Igd3JpdGluZyBpcyBlbmFibGVkCisgICAgICogQHJldHVybnMgdGhlIGN1cnJl
bnQgY29sb3Igd3JpdGluZyBzdGF0ZQorICAgICAqLworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5
cGUuZ2V0Q29sb3JXcml0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Nv
bG9yV3JpdGU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFscGhhIGNvbnN0YW50cyB1
c2VkIGJ5IHNvbWUgYWxwaGEgYmxlbmRpbmcgbW9kZXMKKyAgICAgKiBAcGFyYW0gciBkZWZpbmVz
IHRoZSByZWQgY29tcG9uZW50CisgICAgICogQHBhcmFtIGcgZGVmaW5lcyB0aGUgZ3JlZW4gY29t
cG9uZW50CisgICAgICogQHBhcmFtIGIgZGVmaW5lcyB0aGUgYmx1ZSBjb21wb25lbnQKKyAgICAg
KiBAcGFyYW0gYSBkZWZpbmVzIHRoZSBhbHBoYSBjb21wb25lbnQKKyAgICAgKi8KKyAgICBOYXRp
dmVFbmdpbmUucHJvdG90eXBlLnNldEFscGhhQ29uc3RhbnRzID0gZnVuY3Rpb24gKHIsIGcsIGIs
IGEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nIGFscGhhIGJsZW5kIGNvbnN0
YW50IGNvbG9yIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIik7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSBjdXJyZW50IGFscGhhIG1vZGUKKyAgICAgKiBAcGFyYW0gbW9kZSBkZWZpbmVz
IHRoZSBtb2RlIHRvIHVzZSAob25lIG9mIHRoZSBCQUJZTE9OLkVuZ2luZS5BTFBIQV9YWFgpCisg
ICAgICogQHBhcmFtIG5vRGVwdGhXcml0ZUNoYW5nZSBkZWZpbmVzIGlmIGRlcHRoIHdyaXRpbmcg
c3RhdGUgc2hvdWxkIHJlbWFpbnMgdW5jaGFuZ2VkIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAq
IEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL3Jlc291cmNlcy90cmFuc3BhcmVuY3lfYW5k
X2hvd19tZXNoZXNfYXJlX3JlbmRlcmVkCisgICAgICovCisgICAgTmF0aXZlRW5naW5lLnByb3Rv
dHlwZS5zZXRBbHBoYU1vZGUgPSBmdW5jdGlvbiAobW9kZSwgbm9EZXB0aFdyaXRlQ2hhbmdlKSB7
CisgICAgICAgIGlmIChub0RlcHRoV3JpdGVDaGFuZ2UgPT09IHZvaWQgMCkgeyBub0RlcHRoV3Jp
dGVDaGFuZ2UgPSBmYWxzZTsgfQorICAgICAgICBpZiAodGhpcy5fYWxwaGFNb2RlID09PSBtb2Rl
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbmF0aXZl
LnNldEJsZW5kTW9kZShtb2RlKTsKKyAgICAgICAgaWYgKCFub0RlcHRoV3JpdGVDaGFuZ2UpIHsK
KyAgICAgICAgICAgIHRoaXMuc2V0RGVwdGhXcml0ZShtb2RlID09PSBfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uQUxQSEFfRElTQUJMRSk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWxwaGFNb2RlID0gbW9kZTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgYWxwaGEgbW9kZQorICAgICAqIEBzZWUgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL3Jlc291cmNlcy90cmFuc3BhcmVuY3lfYW5kX2hvd19tZXNoZXNf
YXJlX3JlbmRlcmVkCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgYWxwaGEgbW9kZQorICAg
ICAqLworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuZ2V0QWxwaGFNb2RlID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYWxwaGFNb2RlOworICAgIH07CisgICAgTmF0aXZl
RW5naW5lLnByb3RvdHlwZS5zZXRJbnRBcnJheSA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkg
eworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLl9uYXRpdmUuc2V0SW50QXJyYXkodW5pZm9ybSwgYXJyYXkpOworICAg
IH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5zZXRJbnRBcnJheTIgPSBmdW5jdGlvbiAo
dW5pZm9ybSwgYXJyYXkpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbmF0aXZlLnNldEludEFycmF5Mih1bmlm
b3JtLCBhcnJheSk7CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnNldEludEFy
cmF5MyA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVuaWZvcm0p
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRpdmUu
c2V0SW50QXJyYXkzKHVuaWZvcm0sIGFycmF5KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5w
cm90b3R5cGUuc2V0SW50QXJyYXk0ID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5KSB7CisgICAg
ICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX25hdGl2ZS5zZXRJbnRBcnJheTQodW5pZm9ybSwgYXJyYXkpOworICAgIH07Cisg
ICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5zZXRGbG9hdEFycmF5ID0gZnVuY3Rpb24gKHVuaWZv
cm0sIGFycmF5KSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX25hdGl2ZS5zZXRGbG9hdEFycmF5KHVuaWZvcm0s
IGFycmF5KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXRBcnJh
eTIgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbmF0aXZlLnNl
dEZsb2F0QXJyYXkyKHVuaWZvcm0sIGFycmF5KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5w
cm90b3R5cGUuc2V0RmxvYXRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAg
ICAgICAgaWYgKCF1bmlmb3JtKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fbmF0aXZlLnNldEZsb2F0QXJyYXkzKHVuaWZvcm0sIGFycmF5KTsKKyAgICB9
OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTQgPSBmdW5jdGlvbiAo
dW5pZm9ybSwgYXJyYXkpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbmF0aXZlLnNldEZsb2F0QXJyYXk0KHVu
aWZvcm0sIGFycmF5KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0QXJy
YXkgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbmF0aXZlLnNl
dEZsb2F0QXJyYXkodW5pZm9ybSwgYXJyYXkpOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnBy
b3RvdHlwZS5zZXRBcnJheTIgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICAgICAg
aWYgKCF1bmlmb3JtKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fbmF0aXZlLnNldEZsb2F0QXJyYXkyKHVuaWZvcm0sIGFycmF5KTsKKyAgICB9OworICAg
IE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFy
cmF5KSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX25hdGl2ZS5zZXRGbG9hdEFycmF5Myh1bmlmb3JtLCBhcnJh
eSk7CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnNldEFycmF5NCA9IGZ1bmN0
aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRpdmUuc2V0RmxvYXRBcnJh
eTQodW5pZm9ybSwgYXJyYXkpOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5z
ZXRNYXRyaWNlcyA9IGZ1bmN0aW9uICh1bmlmb3JtLCBtYXRyaWNlcykgeworICAgICAgICBpZiAo
IXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9uYXRpdmUuc2V0TWF0cmljZXModW5pZm9ybSwgbWF0cmljZXMpOworICAgIH07CisgICAgTmF0
aXZlRW5naW5lLnByb3RvdHlwZS5zZXRNYXRyaXgzeDMgPSBmdW5jdGlvbiAodW5pZm9ybSwgbWF0
cml4KSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX25hdGl2ZS5zZXRNYXRyaXgzeDModW5pZm9ybSwgbWF0cml4
KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0TWF0cml4MngyID0gZnVu
Y3Rpb24gKHVuaWZvcm0sIG1hdHJpeCkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRpdmUuc2V0TWF0cml4
MngyKHVuaWZvcm0sIG1hdHJpeCk7CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBl
LnNldEZsb2F0ID0gZnVuY3Rpb24gKHVuaWZvcm0sIHZhbHVlKSB7CisgICAgICAgIGlmICghdW5p
Zm9ybSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX25h
dGl2ZS5zZXRGbG9hdCh1bmlmb3JtLCB2YWx1ZSk7CisgICAgfTsKKyAgICBOYXRpdmVFbmdpbmUu
cHJvdG90eXBlLnNldEZsb2F0MiA9IGZ1bmN0aW9uICh1bmlmb3JtLCB4LCB5KSB7CisgICAgICAg
IGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX25hdGl2ZS5zZXRGbG9hdDIodW5pZm9ybSwgeCwgeSk7CisgICAgfTsKKyAgICBOYXRp
dmVFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0MyA9IGZ1bmN0aW9uICh1bmlmb3JtLCB4LCB5LCB6
KSB7CisgICAgICAgIGlmICghdW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX25hdGl2ZS5zZXRGbG9hdDModW5pZm9ybSwgeCwgeSwgeik7Cisg
ICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnNldEJvb2wgPSBmdW5jdGlvbiAodW5p
Zm9ybSwgYm9vbCkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRpdmUuc2V0Qm9vbCh1bmlmb3JtLCBib29s
KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXQ0ID0gZnVuY3Rp
b24gKHVuaWZvcm0sIHgsIHksIHosIHcpIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbmF0aXZlLnNldEZsb2F0
NCh1bmlmb3JtLCB4LCB5LCB6LCB3KTsKKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5
cGUuc2V0Q29sb3IzID0gZnVuY3Rpb24gKHVuaWZvcm0sIGNvbG9yMykgeworICAgICAgICBpZiAo
IXVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9uYXRpdmUuc2V0RmxvYXQzKHVuaWZvcm0sIGNvbG9yMy5yLCBjb2xvcjMuZywgY29sb3IzLmIp
OworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5zZXRDb2xvcjQgPSBmdW5jdGlv
biAodW5pZm9ybSwgY29sb3IzLCBhbHBoYSkgeworICAgICAgICBpZiAoIXVuaWZvcm0pIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRpdmUuc2V0Rmxv
YXQ0KHVuaWZvcm0sIGNvbG9yMy5yLCBjb2xvcjMuZywgY29sb3IzLmIsIGFscGhhKTsKKyAgICB9
OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUud2lwZUNhY2hlcyA9IGZ1bmN0aW9uIChicnV0
ZUZvcmNlKSB7CisgICAgICAgIGlmICh0aGlzLnByZXZlbnRDYWNoZVdpcGVCZXR3ZWVuRnJhbWVz
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5yZXNldFRl
eHR1cmVDYWNoZSgpOworICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0ID0gbnVsbDsKKyAgICAg
ICAgaWYgKGJydXRlRm9yY2UpIHsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQcm9ncmFtID0g
bnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3N0ZW5jaWxTdGF0ZS5yZXNldCgpOworICAgICAgICAg
ICAgdGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUucmVzZXQoKTsKKyAgICAgICAgICAgIHRoaXMuX2Fs
cGhhU3RhdGUucmVzZXQoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYWNoZWRWZXJ0ZXhC
dWZmZXJzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2FjaGVkSW5kZXhCdWZmZXIgPSBudWxsOwor
ICAgICAgICB0aGlzLl9jYWNoZWRFZmZlY3RGb3JWZXJ0ZXhCdWZmZXJzID0gbnVsbDsKKyAgICB9
OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuX2NyZWF0ZVRleHR1cmUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiB0aGlzLl9uYXRpdmUuY3JlYXRlVGV4dHVyZSgpOworICAgIH07
CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5fZGVsZXRlVGV4dHVyZSA9IGZ1bmN0aW9uICh0
ZXh0dXJlKSB7CisgICAgICAgIHRoaXMuX25hdGl2ZS5kZWxldGVUZXh0dXJlKHRleHR1cmUpOwor
ICAgIH07CisgICAgLy8gVE9ETzogUmVmYWN0b3IgdG8gc2hhcmUgbW9yZSBsb2dpYyB3aXRoIGJh
Ynlsb24uZW5naW5lLnRzIHZlcnNpb24uCisgICAgLyoqCisgICAgICogVXN1YWxseSBjYWxsZWQg
ZnJvbSBCQUJZTE9OLlRleHR1cmUudHMuCisgICAgICogUGFzc2VkIGluZm9ybWF0aW9uIHRvIGNy
ZWF0ZSBhIFdlYkdMVGV4dHVyZQorICAgICAqIEBwYXJhbSB1cmxBcmcgZGVmaW5lcyBhIHZhbHVl
IHdoaWNoIGNvbnRhaW5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAqICogQSBjb252ZW50
aW9uYWwgaHR0cCBVUkwsIGUuZy4gJ2h0dHA6Ly8uLi4nIG9yICdmaWxlOi8vLi4uJworICAgICAq
ICogQSBiYXNlNjQgc3RyaW5nIG9mIGluLWxpbmUgdGV4dHVyZSBkYXRhLCBlLmcuICdkYXRhOmlt
YWdlL2pwZztiYXNlNjQsLy4uLicKKyAgICAgKiAqIEFuIGluZGljYXRvciB0aGF0IGRhdGEgYmVp
bmcgcGFzc2VkIHVzaW5nIHRoZSBidWZmZXIgcGFyYW1ldGVyLCBlLmcuICdkYXRhOm15dGV4dHVy
ZS5qcGcnCisgICAgICogQHBhcmFtIG5vTWlwbWFwIGRlZmluZXMgYSBib29sZWFuIGluZGljYXRp
bmcgdGhhdCBubyBtaXBtYXBzIHNoYWxsIGJlIGdlbmVyYXRlZC4gIElnbm9yZWQgZm9yIGNvbXBy
ZXNzZWQgdGV4dHVyZXMuICBUaGV5IG11c3QgYmUgaW4gdGhlIGZpbGUKKyAgICAgKiBAcGFyYW0g
aW52ZXJ0WSB3aGVuIHRydWUsIGltYWdlIGlzIGZsaXBwZWQgd2hlbiBsb2FkZWQuICBZb3UgcHJv
YmFibHkgd2FudCB0cnVlLiBJZ25vcmVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzLiAgTXVzdCBi
ZSBmbGlwcGVkIGluIHRoZSBmaWxlCisgICAgICogQHBhcmFtIHNjZW5lIG5lZWRlZCBmb3IgbG9h
ZGluZyB0byB0aGUgY29ycmVjdCBzY2VuZQorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgbW9k
ZSB3aXRoIHNob3VsZCBiZSB1c2VkIHNhbXBsZSAvIGFjY2VzcyB0aGUgdGV4dHVyZSAoRGVmYXVs
dDogQkFCWUxPTi5UZXh0dXJlLlRSSUxJTkVBUl9TQU1QTElOR01PREUpCisgICAgICogQHBhcmFt
IG9uTG9hZCBvcHRpb25hbCBjYWxsYmFjayB0byBiZSBjYWxsZWQgdXBvbiBzdWNjZXNzZnVsIGNv
bXBsZXRpb24KKyAgICAgKiBAcGFyYW0gb25FcnJvciBvcHRpb25hbCBjYWxsYmFjayB0byBiZSBj
YWxsZWQgdXBvbiBmYWlsdXJlCisgICAgICogQHBhcmFtIGJ1ZmZlciBhIHNvdXJjZSBvZiBhIGZp
bGUgcHJldmlvdXNseSBmZXRjaGVkIGFzIGVpdGhlciBhIGJhc2U2NCBzdHJpbmcsIGFuIEFycmF5
QnVmZmVyIChjb21wcmVzc2VkIG9yIGltYWdlIGZvcm1hdCksIG9yIGEgQmxvYgorICAgICAqIEBw
YXJhbSBmYWxsYmFjayBhbiBpbnRlcm5hbCBhcmd1bWVudCBpbiBjYXNlIHRoZSBmdW5jdGlvbiBt
dXN0IGJlIGNhbGxlZCBhZ2FpbiwgZHVlIHRvIGV0YzEgbm90IGhhdmluZyBhbHBoYSBjYXBhYmls
aXRpZXMKKyAgICAgKiBAcGFyYW0gZm9ybWF0IGludGVybmFsIGZvcm1hdC4gIERlZmF1bHQ6IFJH
QiB3aGVuIGV4dGVuc2lvbiBpcyAnLmpwZycgZWxzZSBSR0JBLiAgSWdub3JlZCBmb3IgY29tcHJl
c3NlZCB0ZXh0dXJlcworICAgICAqIEBwYXJhbSBmb3JjZWRFeHRlbnNpb24gZGVmaW5lcyB0aGUg
ZXh0ZW5zaW9uIHRvIHVzZSB0byBwaWNrIHRoZSByaWdodCBsb2FkZXIKKyAgICAgKiBAcmV0dXJu
cyBhIEludGVybmFsVGV4dHVyZSBmb3IgYXNzaWdubWVudCBiYWNrIGludG8gQkFCWUxPTi5UZXh0
dXJlCisgICAgICovCisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5jcmVhdGVUZXh0dXJlID0g
ZnVuY3Rpb24gKHVybEFyZywgbm9NaXBtYXAsIGludmVydFksIHNjZW5lLCBzYW1wbGluZ01vZGUs
IG9uTG9hZCwgb25FcnJvciwgYnVmZmVyLCBmYWxsYmFjaywgZm9ybWF0LCBmb3JjZWRFeHRlbnNp
b24pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHNhbXBsaW5nTW9k
ZSA9PT0gdm9pZCAwKSB7IHNhbXBsaW5nTW9kZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01P
REU7IH0KKyAgICAgICAgaWYgKG9uTG9hZCA9PT0gdm9pZCAwKSB7IG9uTG9hZCA9IG51bGw7IH0K
KyAgICAgICAgaWYgKG9uRXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbnVsbDsgfQorICAg
ICAgICBpZiAoYnVmZmVyID09PSB2b2lkIDApIHsgYnVmZmVyID0gbnVsbDsgfQorICAgICAgICBp
ZiAoZmFsbGJhY2sgPT09IHZvaWQgMCkgeyBmYWxsYmFjayA9IG51bGw7IH0KKyAgICAgICAgaWYg
KGZvcm1hdCA9PT0gdm9pZCAwKSB7IGZvcm1hdCA9IG51bGw7IH0KKyAgICAgICAgaWYgKGZvcmNl
ZEV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IGZvcmNlZEV4dGVuc2lvbiA9IG51bGw7IH0KKyAgICAg
ICAgdmFyIHVybCA9IFN0cmluZyh1cmxBcmcpOyAvLyBhc3NpZ24gYSBuZXcgc3RyaW5nLCBzbyB0
aGF0IHRoZSBvcmlnaW5hbCBpcyBzdGlsbCBhdmFpbGFibGUgaW4gY2FzZSBvZiBmYWxsYmFjawor
ICAgICAgICB2YXIgZnJvbURhdGEgPSB1cmwuc3Vic3RyKDAsIDUpID09PSAiZGF0YToiOworICAg
ICAgICB2YXIgZnJvbUJsb2IgPSB1cmwuc3Vic3RyKDAsIDUpID09PSAiYmxvYjoiOworICAgICAg
ICB2YXIgaXNCYXNlNjQgPSBmcm9tRGF0YSAmJiB1cmwuaW5kZXhPZigiYmFzZTY0IikgIT09IC0x
OworICAgICAgICB2YXIgdGV4dHVyZSA9IGZhbGxiYWNrID8gZmFsbGJhY2sgOiBuZXcgX01hdGVy
aWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siSW50ZXJuYWxUZXh0dXJlIl0odGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFU
QVNPVVJDRV9VUkwpOworICAgICAgICAvLyBlc3RhYmxpc2ggdGhlIGZpbGUgZXh0ZW5zaW9uLCBp
ZiBwb3NzaWJsZQorICAgICAgICB2YXIgbGFzdERvdCA9IHVybC5sYXN0SW5kZXhPZignLicpOwor
ICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZm9yY2VkRXh0ZW5zaW9uID8gZm9yY2VkRXh0ZW5zaW9u
IDogKGxhc3REb3QgPiAtMSA/IHVybC5zdWJzdHJpbmcobGFzdERvdCkudG9Mb3dlckNhc2UoKSA6
ICIiKTsKKyAgICAgICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgdGV4dHVy
ZSBmb3JtYXRzLgorICAgICAgICB2YXIgdGV4dHVyZUZvcm1hdEluVXNlID0gbnVsbDsKKyAgICAg
ICAgdmFyIGxvYWRlciA9IG51bGw7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBfRW5n
aW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uX1RleHR1
cmVMb2FkZXJzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGF2YWls
YWJsZUxvYWRlciA9IF9hW19pXTsKKyAgICAgICAgICAgIGlmIChhdmFpbGFibGVMb2FkZXIuY2Fu
TG9hZChleHRlbnNpb24sIHRleHR1cmVGb3JtYXRJblVzZSwgZmFsbGJhY2ssIGlzQmFzZTY0LCBi
dWZmZXIgPyB0cnVlIDogZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgbG9hZGVyID0gYXZhaWxh
YmxlTG9hZGVyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmIChsb2FkZXIpIHsKKyAgICAgICAgICAgIHVybCA9IGxvYWRlci50cmFu
c2Zvcm1VcmwodXJsLCB0ZXh0dXJlRm9ybWF0SW5Vc2UpOworICAgICAgICB9CisgICAgICAgIGlm
IChzY2VuZSkgeworICAgICAgICAgICAgc2NlbmUuX2FkZFBlbmRpbmdEYXRhKHRleHR1cmUpOwor
ICAgICAgICB9CisgICAgICAgIHRleHR1cmUudXJsID0gdXJsOworICAgICAgICB0ZXh0dXJlLmdl
bmVyYXRlTWlwTWFwcyA9ICFub01pcG1hcDsKKyAgICAgICAgdGV4dHVyZS5zYW1wbGluZ01vZGUg
PSBzYW1wbGluZ01vZGU7CisgICAgICAgIHRleHR1cmUuaW52ZXJ0WSA9IGludmVydFk7CisgICAg
ICAgIGlmICghdGhpcy5kb05vdEhhbmRsZUNvbnRleHRMb3N0KSB7CisgICAgICAgICAgICAvLyBL
ZWVwIGEgbGluayB0byB0aGUgYnVmZmVyIG9ubHkgaWYgd2UgcGxhbiB0byBoYW5kbGUgY29udGV4
dCBsb3N0CisgICAgICAgICAgICB0ZXh0dXJlLl9idWZmZXIgPSBidWZmZXI7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIG9uTG9hZE9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgaWYgKG9uTG9hZCAm
JiAhZmFsbGJhY2spIHsKKyAgICAgICAgICAgIG9uTG9hZE9ic2VydmVyID0gdGV4dHVyZS5vbkxv
YWRlZE9ic2VydmFibGUuYWRkKG9uTG9hZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmYWxs
YmFjaykgeworICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxUZXh0dXJlc0NhY2hlLnB1c2godGV4
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9uSW50ZXJuYWxFcnJvciA9IGZ1bmN0aW9u
IChtZXNzYWdlLCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIGlmIChzY2VuZSkgeworICAgICAg
ICAgICAgICAgIHNjZW5lLl9yZW1vdmVQZW5kaW5nRGF0YSh0ZXh0dXJlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBjdXN0b21GYWxsYmFjayA9IGZhbHNlOworICAgICAgICAgICAg
aWYgKGxvYWRlcikgeworICAgICAgICAgICAgICAgIHZhciBmYWxsYmFja1VybCA9IGxvYWRlci5n
ZXRGYWxsYmFja1RleHR1cmVVcmwodXJsLCB0ZXh0dXJlRm9ybWF0SW5Vc2UpOworICAgICAgICAg
ICAgICAgIGlmIChmYWxsYmFja1VybCkgeworICAgICAgICAgICAgICAgICAgICAvLyBBZGQgQmFj
aworICAgICAgICAgICAgICAgICAgICBjdXN0b21GYWxsYmFjayA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLmNyZWF0ZVRleHR1cmUodXJsQXJnLCBub01pcG1hcCwgaW52ZXJ0WSwg
c2NlbmUsIHNhbXBsaW5nTW9kZSwgbnVsbCwgb25FcnJvciwgYnVmZmVyLCB0ZXh0dXJlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWN1c3RvbUZh
bGxiYWNrKSB7CisgICAgICAgICAgICAgICAgaWYgKG9uTG9hZE9ic2VydmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUub25Mb2FkZWRPYnNlcnZhYmxlLnJlbW92ZShvbkxvYWRPYnNl
cnZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChfTWlzY190b29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLlVzZUZhbGxiYWNrVGV4dHVy
ZSkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5jcmVhdGVUZXh0dXJlKF9NaXNjX3Rvb2xz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRvb2xzIl0uZmFsbGJhY2tUZXh0dXJlLCBu
b01pcG1hcCwgaW52ZXJ0WSwgc2NlbmUsIHNhbXBsaW5nTW9kZSwgbnVsbCwgb25FcnJvciwgYnVm
ZmVyLCB0ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAob25FcnJvcikgeworICAgICAgICAgICAgICAgIG9uRXJyb3IobWVzc2FnZSB8fCAi
VW5rbm93biBlcnJvciIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH07Cisg
ICAgICAgIC8vIHByb2Nlc3NpbmcgZm9yIG5vbi1pbWFnZSBmb3JtYXRzCisgICAgICAgIGlmIChs
b2FkZXIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTG9hZGluZyB0ZXh0dXJlcyBm
cm9tIElJbnRlcm5hbFRleHR1cmVMb2FkZXIgbm90IHlldCBpbXBsZW1lbnRlZC4iKTsKKyAgICAg
ICAgICAgIC8vIHZhciBjYWxsYmFjayA9IChkYXRhOiBzdHJpbmcgfCBBcnJheUJ1ZmZlcikgPT4g
eworICAgICAgICAgICAgLy8gICAgIGxvYWRlciEubG9hZERhdGEoZGF0YSBhcyBBcnJheUJ1ZmZl
ciwgdGV4dHVyZSwgKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBsb2FkTWlwbWFwOiBi
b29sZWFuLCBpc0NvbXByZXNzZWQ6IGJvb2xlYW4sIGRvbmU6ICgpID0+IHZvaWQpID0+IHsKKyAg
ICAgICAgICAgIC8vICAgICAgICAgdGhpcy5fcHJlcGFyZVdlYkdMVGV4dHVyZSh0ZXh0dXJlLCBz
Y2VuZSwgd2lkdGgsIGhlaWdodCwgaW52ZXJ0WSwgIWxvYWRNaXBtYXAsIGlzQ29tcHJlc3NlZCwg
KCkgPT4geworICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAvLyAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgLy8gICAgICAgICAgICAgc2FtcGxpbmdNb2RlKTsKKyAg
ICAgICAgICAgIC8vICAgICB9KTsKKyAgICAgICAgICAgIC8vIH0KKyAgICAgICAgICAgIC8vIGlm
ICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyAgICAgdGhpcy5fbG9hZEZpbGUodXJsLCBjYWxs
YmFjaywgdW5kZWZpbmVkLCBzY2VuZSA/IHNjZW5lLmRhdGFiYXNlIDogdW5kZWZpbmVkLCB0cnVl
LCAocmVxdWVzdD86IFhNTEh0dHBSZXF1ZXN0LCBleGNlcHRpb24/OiBhbnkpID0+IHsKKyAgICAg
ICAgICAgIC8vICAgICAgICAgb25JbnRlcm5hbEVycm9yKCJVbmFibGUgdG8gbG9hZCAiICsgKHJl
cXVlc3QgPyByZXF1ZXN0LnJlc3BvbnNlVVJMIDogdXJsLCBleGNlcHRpb24pKTsKKyAgICAgICAg
ICAgIC8vICAgICB9KTsKKyAgICAgICAgICAgIC8vIH0gZWxzZSB7CisgICAgICAgICAgICAvLyAg
ICAgY2FsbGJhY2soYnVmZmVyIGFzIEFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgIC8vIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBvbmxvYWQgPSBmdW5jdGlv
biAoZGF0YSwgcmVzcG9uc2VVUkwpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChkYXRh
KSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJM
b2FkaW5nIHRleHR1cmVzIGZyb20gc3RyaW5nIGRhdGEgbm90IHlldCBpbXBsZW1lbnRlZC4iKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZyb21CbG9iICYmICFfdGhp
cy5kb05vdEhhbmRsZUNvbnRleHRMb3N0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gc3RvcmUgdGhlIGltYWdlIGlmIHdlIG5lZWQgdG8gcmVidWlsZCB0aGUgdGV4dHVyZQor
ICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGEgd2ViZ2wgY29udGV4dCBsb3N0Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUuX2J1ZmZlciA9IGRhdGE7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHZhciB3ZWJHTFRleHR1cmUgPSB0ZXh0dXJlLl93ZWJHTFRl
eHR1cmU7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWJHTFRleHR1cmUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gIHRoaXMucmVzZXRUZXh0dXJlQ2FjaGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHNjZW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2VuZS5fcmVtb3ZlUGVu
ZGluZ0RhdGEodGV4dHVyZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBfdGhpcy5f
bmF0aXZlLmxvYWRUZXh0dXJlKHdlYkdMVGV4dHVyZSwgZGF0YSwgIW5vTWlwbWFwKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW52ZXJ0WSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIlN1cHBvcnQgZm9yIHRleHR1cmVzIHdpdGggaW52ZXJ0ZWQgWSBjb29yZGluYXRlcyBu
b3QgeWV0IGltcGxlbWVudGVkLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAvL3RoaXMuX3VucGFja0ZsaXBZKGludmVydFkgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAoaW52
ZXJ0WSA/IHRydWUgOiBmYWxzZSkpOworICAgICAgICAgICAgICAgIHRleHR1cmUuYmFzZVdpZHRo
ID0gX3RoaXMuX25hdGl2ZS5nZXRUZXh0dXJlV2lkdGgod2ViR0xUZXh0dXJlKTsKKyAgICAgICAg
ICAgICAgICB0ZXh0dXJlLmJhc2VIZWlnaHQgPSBfdGhpcy5fbmF0aXZlLmdldFRleHR1cmVIZWln
aHQod2ViR0xUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLndpZHRoID0gdGV4dHVy
ZS5iYXNlV2lkdGg7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSB0ZXh0dXJlLmJh
c2VIZWlnaHQ7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB2YXIgZmlsdGVyID0gX3RoaXMuX2dldFNhbXBsaW5nRmlsdGVyKHNhbXBsaW5n
TW9kZSk7CisgICAgICAgICAgICAgICAgX3RoaXMuX25hdGl2ZS5zZXRUZXh0dXJlU2FtcGxpbmco
d2ViR0xUZXh0dXJlLCBmaWx0ZXIpOworICAgICAgICAgICAgICAgIC8vIHRoaXMucmVzZXRUZXh0
dXJlQ2FjaGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2NlbmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKHRleHR1cmUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB0ZXh0dXJlLm9uTG9hZGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNl
cnZlcnModGV4dHVyZSk7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5vbkxvYWRlZE9ic2VydmFi
bGUuY2xlYXIoKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoYnVmZmVyIGluc3Rh
bmNlb2YgQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBvbmxvYWQoYnVmZmVyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhidWZm
ZXIpKSB7CisgICAgICAgICAgICAgICAgb25sb2FkKGJ1ZmZlci5idWZmZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYnVmZmVyIGluc3RhbmNlb2YgQmxvYikgeworICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTG9hZGluZyB0ZXh0dXJlIGZyb20gQmxvYiBu
b3QgeWV0IGltcGxlbWVudGVkLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoIWZyb21EYXRhKSB7CisgICAgICAgICAgICAgICAgdmFyIG9uTG9hZEZpbGVFcnJvciA9IGZ1
bmN0aW9uIChyZXF1ZXN0LCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgb25JbnRl
cm5hbEVycm9yKCJGYWlsZWQgdG8gcmV0cmlldmUgIiArIHVybCArICIuIiwgZXhjZXB0aW9uKTsK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlRvb2xzIl0uTG9hZEZpbGUodXJsLCBvbmxvYWQsIHVuZGVm
aW5lZCwgdW5kZWZpbmVkLCAvKnVzZUFycmF5QnVmZmVyKi8gdHJ1ZSwgb25Mb2FkRmlsZUVycm9y
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG9u
bG9hZChfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLkRl
Y29kZUJhc2U2NChidWZmZXIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGV4dHVyZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBjdWJlIHRl
eHR1cmUKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSB1cmwgd2hlcmUgdGhlIGZp
bGVzIHRvIGxvYWQgaXMgbG9jYXRlZAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBj
dXJyZW50IHNjZW5lCisgICAgICogQHBhcmFtIGZpbGVzIGRlZmluZXMgdGhlIGxpc3Qgb2YgZmls
ZXMgdG8gbG9hZCAoMSBwZXIgZmFjZSkKKyAgICAgKiBAcGFyYW0gbm9NaXBtYXAgZGVmaW5lcyBh
IGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IG5vIG1pcG1hcHMgc2hhbGwgYmUgZ2VuZXJhdGVkIChm
YWxzZSBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBvbkxvYWQgZGVmaW5lcyBhbiBvcHRpb25h
bCBjYWxsYmFjayByYWlzZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyBsb2FkZWQKKyAgICAgKiBAcGFy
YW0gb25FcnJvciBkZWZpbmVzIGFuIG9wdGlvbmFsIGNhbGxiYWNrIHJhaXNlZCBpZiB0aGVyZSBp
cyBhbiBpc3N1ZSB0byBsb2FkIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGZvcm1hdCBkZWZp
bmVzIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEKKyAgICAgKiBAcGFyYW0gZm9yY2VkRXh0ZW5zaW9u
IGRlZmluZXMgdGhlIGV4dGVuc2lvbiB0byB1c2UgdG8gcGljayB0aGUgcmlnaHQgbG9hZGVyCisg
ICAgICogQHBhcmFtIGNyZWF0ZVBvbHlub21pYWxzIGlmIGEgcG9seW5vbWlhbCBzcGhlcmUgc2hv
dWxkIGJlIGNyZWF0ZWQgZm9yIHRoZSBjdWJlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gbG9kU2Nh
bGUgZGVmaW5lcyB0aGUgc2NhbGUgYXBwbGllZCB0byBlbnZpcm9ubWVudCB0ZXh0dXJlLiBUaGlz
IG1hbmFnZXMgdGhlIHJhbmdlIG9mIExPRCBsZXZlbCB1c2VkIGZvciBJQkwgYWNjb3JkaW5nIHRv
IHRoZSByb3VnaG5lc3MKKyAgICAgKiBAcGFyYW0gbG9kT2Zmc2V0IGRlZmluZXMgdGhlIG9mZnNl
dCBhcHBsaWVkIHRvIGVudmlyb25tZW50IHRleHR1cmUuIFRoaXMgbWFuYWdlcyBmaXJzdCBMT0Qg
bGV2ZWwgdXNlZCBmb3IgSUJMIGFjY29yZGluZyB0byB0aGUgcm91Z2huZXNzCisgICAgICogQHBh
cmFtIGZhbGxiYWNrIGRlZmluZXMgdGV4dHVyZSB0byB1c2Ugd2hpbGUgZmFsbGluZyBiYWNrIHdo
ZW4gKGNvbXByZXNzZWQpIHRleHR1cmUgZmlsZSBub3QgZm91bmQuCisgICAgICogQHJldHVybnMg
dGhlIGN1YmUgdGV4dHVyZSBhcyBhbiBJbnRlcm5hbFRleHR1cmUKKyAgICAgKi8KKyAgICBOYXRp
dmVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZUN1YmVUZXh0dXJlID0gZnVuY3Rpb24gKHJvb3RVcmws
IHNjZW5lLCBmaWxlcywgbm9NaXBtYXAsIG9uTG9hZCwgb25FcnJvciwgZm9ybWF0LCBmb3JjZWRF
eHRlbnNpb24sIGNyZWF0ZVBvbHlub21pYWxzLCBsb2RTY2FsZSwgbG9kT2Zmc2V0LCBmYWxsYmFj
aykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAob25Mb2FkID09PSB2
b2lkIDApIHsgb25Mb2FkID0gbnVsbDsgfQorICAgICAgICBpZiAob25FcnJvciA9PT0gdm9pZCAw
KSB7IG9uRXJyb3IgPSBudWxsOyB9CisgICAgICAgIGlmIChmb3JjZWRFeHRlbnNpb24gPT09IHZv
aWQgMCkgeyBmb3JjZWRFeHRlbnNpb24gPSBudWxsOyB9CisgICAgICAgIGlmIChjcmVhdGVQb2x5
bm9taWFscyA9PT0gdm9pZCAwKSB7IGNyZWF0ZVBvbHlub21pYWxzID0gZmFsc2U7IH0KKyAgICAg
ICAgaWYgKGxvZFNjYWxlID09PSB2b2lkIDApIHsgbG9kU2NhbGUgPSAwOyB9CisgICAgICAgIGlm
IChsb2RPZmZzZXQgPT09IHZvaWQgMCkgeyBsb2RPZmZzZXQgPSAwOyB9CisgICAgICAgIGlmIChm
YWxsYmFjayA9PT0gdm9pZCAwKSB7IGZhbGxiYWNrID0gbnVsbDsgfQorICAgICAgICB2YXIgdGV4
dHVyZSA9IGZhbGxiYWNrID8gZmFsbGJhY2sgOiBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19pbnRl
cm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siSW50ZXJuYWxUZXh0dXJl
Il0odGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9DVUJFKTsKKyAg
ICAgICAgdGV4dHVyZS5pc0N1YmUgPSB0cnVlOworICAgICAgICB0ZXh0dXJlLnVybCA9IHJvb3RV
cmw7CisgICAgICAgIHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzID0gIW5vTWlwbWFwOworICAgICAg
ICB0ZXh0dXJlLl9sb2RHZW5lcmF0aW9uU2NhbGUgPSBsb2RTY2FsZTsKKyAgICAgICAgdGV4dHVy
ZS5fbG9kR2VuZXJhdGlvbk9mZnNldCA9IGxvZE9mZnNldDsKKyAgICAgICAgaWYgKCF0aGlzLl9k
b05vdEhhbmRsZUNvbnRleHRMb3N0KSB7CisgICAgICAgICAgICB0ZXh0dXJlLl9leHRlbnNpb24g
PSBmb3JjZWRFeHRlbnNpb247CisgICAgICAgICAgICB0ZXh0dXJlLl9maWxlcyA9IGZpbGVzOwor
ICAgICAgICB9CisgICAgICAgIHZhciBsYXN0RG90ID0gcm9vdFVybC5sYXN0SW5kZXhPZignLicp
OworICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZm9yY2VkRXh0ZW5zaW9uID8gZm9yY2VkRXh0ZW5z
aW9uIDogKGxhc3REb3QgPiAtMSA/IHJvb3RVcmwuc3Vic3RyaW5nKGxhc3REb3QpLnRvTG93ZXJD
YXNlKCkgOiAiIik7CisgICAgICAgIGlmIChleHRlbnNpb24gPT09ICIuZW52IikgeworICAgICAg
ICAgICAgdmFyIG9ubG9hZGRhdGEgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgICAg
IGRhdGEgPSBkYXRhOworICAgICAgICAgICAgICAgIHZhciBpbmZvID0gX01pc2NfZW52aXJvbm1l
bnRUZXh0dXJlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRW52aXJvbm1lbnRU
ZXh0dXJlVG9vbHMiXS5HZXRFbnZJbmZvKGRhdGEpOworICAgICAgICAgICAgICAgIHRleHR1cmUu
d2lkdGggPSBpbmZvLndpZHRoOworICAgICAgICAgICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gaW5m
by53aWR0aDsKKyAgICAgICAgICAgICAgICBfTWlzY19lbnZpcm9ubWVudFRleHR1cmVUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJFbnZpcm9ubWVudFRleHR1cmVUb29scyJdLlVw
bG9hZEVudlNwaGVyaWNhbCh0ZXh0dXJlLCBpbmZvKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5m
by52ZXJzaW9uICE9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
VW5zdXBwb3J0ZWQgYmFieWxvbiBlbnZpcm9ubWVudCBtYXAgdmVyc2lvbiBcIiIgKyBpbmZvLnZl
cnNpb24gKyAiXCIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHNw
ZWN1bGFySW5mbyA9IGluZm8uc3BlY3VsYXI7CisgICAgICAgICAgICAgICAgaWYgKCFzcGVjdWxh
ckluZm8pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3RoaW5nIGVs
c2UgcGFyc2VkIHNvIGZhciIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0
ZXh0dXJlLl9sb2RHZW5lcmF0aW9uU2NhbGUgPSBzcGVjdWxhckluZm8ubG9kR2VuZXJhdGlvblNj
YWxlOworICAgICAgICAgICAgICAgIHZhciBpbWFnZURhdGEgPSBfTWlzY19lbnZpcm9ubWVudFRl
eHR1cmVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJFbnZpcm9ubWVudFRleHR1
cmVUb29scyJdLkNyZWF0ZUltYWdlRGF0YUFycmF5QnVmZmVyVmlld3MoZGF0YSwgaW5mbyk7Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZS5mb3JtYXQgPSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uVEVYVFVSRUZPUk1BVF9SR0JBOworICAgICAg
ICAgICAgICAgIHRleHR1cmUudHlwZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7CisgICAgICAg
ICAgICAgICAgdGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMgPSB0cnVlOworICAgICAgICAgICAgICAg
IHRleHR1cmUuZ2V0RW5naW5lKCkudXBkYXRlVGV4dHVyZVNhbXBsaW5nTW9kZShfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVGV4dHVyZSJd
LlRSSUxJTkVBUl9TQU1QTElOR01PREUsIHRleHR1cmUpOworICAgICAgICAgICAgICAgIHRleHR1
cmUuX2lzUkdCRCA9IHRydWU7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5pbnZlcnRZID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBfdGhpcy5fbmF0aXZlLmxvYWRDdWJlVGV4dHVyZSh0ZXh0dXJl
Ll93ZWJHTFRleHR1cmUsIGltYWdlRGF0YSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgdGV4dHVy
ZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAob25Mb2FkKSB7CisgICAgICAg
ICAgICAgICAgICAgIG9uTG9hZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID09PSA2KSB7CisgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJNdWx0aS1maWxlIGxvYWRpbmcgbm90IHlldCBzdXBw
b3J0ZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB2YXIgb25JbnRlcm5hbEVycm9yID0gZnVuY3Rpb24gKHJlcXVlc3QsIGV4Y2VwdGlvbikg
eworICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciAmJiByZXF1ZXN0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBvbkVycm9yKHJlcXVlc3Quc3RhdHVzICsgIiAiICsgcmVxdWVzdC5z
dGF0dXNUZXh0LCBleGNlcHRpb24pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICB0aGlzLl9sb2FkRmlsZShyb290VXJsLCBvbmxvYWRk
YXRhLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSwgb25JbnRlcm5hbEVycm9yKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiQ2Fubm90IGxvYWQgY3ViZW1hcDogbm9uLUVOViBmb3JtYXQgbm90IHN1cHBvcnRl
ZC4iKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2FjaGUucHVz
aCh0ZXh0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfTsKKyAgICAvLyBSZXR1
cm5zIGEgTmF0aXZlRmlsdGVyLlhYWFggdmFsdWUuCisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlw
ZS5fZ2V0U2FtcGxpbmdGaWx0ZXIgPSBmdW5jdGlvbiAoc2FtcGxpbmdNb2RlKSB7CisgICAgICAg
IHN3aXRjaCAoc2FtcGxpbmdNb2RlKSB7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX0JJTElORUFS
X1NBTVBMSU5HTU9ERToKKyAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRmlsdGVyLk1JTkxJ
TkVBUl9NQUdMSU5FQVJfTUlQUE9JTlQ7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX1RSSUxJTkVB
Ul9TQU1QTElOR01PREU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUZpbHRlci5NSU5M
SU5FQVJfTUFHTElORUFSX01JUExJTkVBUjsKKyAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2luZSJdLlRFWFRVUkVfTkVBUkVT
VF9TQU1QTElOR01PREU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUZpbHRlci5NSU5Q
T0lOVF9NQUdQT0lOVF9NSVBMSU5FQVI7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX05FQVJFU1Rf
TkVBUkVTVF9NSVBORUFSRVNUOgorICAgICAgICAgICAgICAgIHJldHVybiBOYXRpdmVGaWx0ZXIu
TUlOUE9JTlRfTUFHUE9JTlRfTUlQUE9JTlQ7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX05FQVJF
U1RfTElORUFSX01JUE5FQVJFU1Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUZpbHRl
ci5NSU5MSU5FQVJfTUFHUE9JTlRfTUlQUE9JTlQ7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVz
X2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX05F
QVJFU1RfTElORUFSX01JUExJTkVBUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRmls
dGVyLk1JTkxJTkVBUl9NQUdQT0lOVF9NSVBMSU5FQVI7CisgICAgICAgICAgICBjYXNlIF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJF
X05FQVJFU1RfTElORUFSOgorICAgICAgICAgICAgICAgIHJldHVybiBOYXRpdmVGaWx0ZXIuTUlO
TElORUFSX01BR1BPSU5UX01JUExJTkVBUjsKKyAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2luZSJdLlRFWFRVUkVfTkVBUkVT
VF9ORUFSRVNUOgorICAgICAgICAgICAgICAgIHJldHVybiBOYXRpdmVGaWx0ZXIuTUlOUE9JTlRf
TUFHUE9JTlRfTUlQUE9JTlQ7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX0xJTkVBUl9ORUFSRVNU
X01JUE5FQVJFU1Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUZpbHRlci5NSU5QT0lO
VF9NQUdMSU5FQVJfTUlQUE9JTlQ7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX0xJTkVBUl9ORUFS
RVNUX01JUExJTkVBUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRmlsdGVyLk1JTlBP
SU5UX01BR0xJTkVBUl9NSVBMSU5FQVI7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5URVhUVVJFX0xJTkVBUl9M
SU5FQVI6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUZpbHRlci5NSU5MSU5FQVJfTUFH
TElORUFSX01JUExJTkVBUjsKKyAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfZW5naW5lX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2luZSJdLlRFWFRVUkVfTElORUFSX05FQVJFU1Q6
CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUZpbHRlci5NSU5QT0lOVF9NQUdMSU5FQVJf
TUlQTElORUFSOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc2FtcGxpbmcgbW9kZTogIiArIHNhbXBsaW5nTW9kZSArICIu
Iik7CisgICAgICAgIH0KKyAgICB9OworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuY3JlYXRl
UmVuZGVyVGFyZ2V0VGV4dHVyZSA9IGZ1bmN0aW9uIChzaXplLCBvcHRpb25zKSB7CisgICAgICAg
IHZhciBmdWxsT3B0aW9ucyA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldENy
ZWF0aW9uT3B0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJSZW5kZXJUYXJnZXRD
cmVhdGlvbk9wdGlvbnMiXSgpOworICAgICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYm
IHR5cGVvZiBvcHRpb25zID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgZnVsbE9wdGlvbnMu
Z2VuZXJhdGVNaXBNYXBzID0gb3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHM7CisgICAgICAgICAgICBm
dWxsT3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyID0gb3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVm
ZmVyID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyOwor
ICAgICAgICAgICAgZnVsbE9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVmZmVyID0gZnVsbE9wdGlv
bnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlciAmJiBvcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlcjsK
KyAgICAgICAgICAgIGZ1bGxPcHRpb25zLnR5cGUgPSBvcHRpb25zLnR5cGUgPT09IHVuZGVmaW5l
ZCA/IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUi
XS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQgOiBvcHRpb25zLnR5cGU7CisgICAgICAgICAgICBm
dWxsT3B0aW9ucy5zYW1wbGluZ01vZGUgPSBvcHRpb25zLnNhbXBsaW5nTW9kZSA9PT0gdW5kZWZp
bmVkID8gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFIDogb3B0aW9ucy5zYW1wbGlu
Z01vZGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmdWxsT3B0aW9u
cy5nZW5lcmF0ZU1pcE1hcHMgPSBvcHRpb25zOworICAgICAgICAgICAgZnVsbE9wdGlvbnMuZ2Vu
ZXJhdGVEZXB0aEJ1ZmZlciA9IHRydWU7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy5nZW5lcmF0
ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGZ1bGxPcHRpb25zLnR5cGUgPSBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uVEVY
VFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICAgICAgZnVsbE9wdGlvbnMuc2FtcGxpbmdN
b2RlID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOworICAgICAgICB9CisgICAg
ICAgIHZhciB0ZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfaW50ZXJuYWxUZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkludGVybmFsVGV4dHVyZSJdKHRoaXMsIF9N
YXRlcmlhbHNfVGV4dHVyZXNfaW50ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkludGVybmFsVGV4dHVyZSJdLkRBVEFTT1VSQ0VfUkVOREVSVEFSR0VUKTsKKyAgICAg
ICAgdmFyIHdpZHRoID0gc2l6ZS53aWR0aCB8fCBzaXplOworICAgICAgICB2YXIgaGVpZ2h0ID0g
c2l6ZS5oZWlnaHQgfHwgc2l6ZTsKKyAgICAgICAgdGV4dHVyZS5fZGVwdGhTdGVuY2lsQnVmZmVy
ID0ge307CisgICAgICAgIHRleHR1cmUuX2ZyYW1lYnVmZmVyID0ge307CisgICAgICAgIHRleHR1
cmUuYmFzZVdpZHRoID0gd2lkdGg7CisgICAgICAgIHRleHR1cmUuYmFzZUhlaWdodCA9IGhlaWdo
dDsKKyAgICAgICAgdGV4dHVyZS53aWR0aCA9IHdpZHRoOworICAgICAgICB0ZXh0dXJlLmhlaWdo
dCA9IGhlaWdodDsKKyAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgdGV4
dHVyZS5zYW1wbGVzID0gMTsKKyAgICAgICAgdGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMgPSBmdWxs
T3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHMgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIHRleHR1cmUu
c2FtcGxpbmdNb2RlID0gZnVsbE9wdGlvbnMuc2FtcGxpbmdNb2RlOworICAgICAgICB0ZXh0dXJl
LnR5cGUgPSBmdWxsT3B0aW9ucy50eXBlOworICAgICAgICB0ZXh0dXJlLl9nZW5lcmF0ZURlcHRo
QnVmZmVyID0gZnVsbE9wdGlvbnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlcjsKKyAgICAgICAgdGV4dHVy
ZS5fZ2VuZXJhdGVTdGVuY2lsQnVmZmVyID0gZnVsbE9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVm
ZmVyID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICB0aGlzLl9pbnRlcm5hbFRleHR1cmVzQ2FjaGUu
cHVzaCh0ZXh0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfTsKKyAgICBOYXRp
dmVFbmdpbmUucHJvdG90eXBlLnVwZGF0ZVRleHR1cmVTYW1wbGluZ01vZGUgPSBmdW5jdGlvbiAo
c2FtcGxpbmdNb2RlLCB0ZXh0dXJlKSB7CisgICAgICAgIGlmICh0ZXh0dXJlLl93ZWJHTFRleHR1
cmUpIHsKKyAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLl9nZXRTYW1wbGluZ0ZpbHRlcihz
YW1wbGluZ01vZGUpOworICAgICAgICAgICAgdGhpcy5fbmF0aXZlLnNldFRleHR1cmVTYW1wbGlu
Zyh0ZXh0dXJlLl93ZWJHTFRleHR1cmUsIGZpbHRlcik7CisgICAgICAgIH0KKyAgICAgICAgdGV4
dHVyZS5zYW1wbGluZ01vZGUgPSBzYW1wbGluZ01vZGU7CisgICAgfTsKKyAgICBOYXRpdmVFbmdp
bmUucHJvdG90eXBlLmJpbmRGcmFtZWJ1ZmZlciA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBmYWNlSW5k
ZXgsIHJlcXVpcmVkV2lkdGgsIHJlcXVpcmVkSGVpZ2h0LCBmb3JjZUZ1bGxzY3JlZW5WaWV3cG9y
dCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJpbmRGcmFtZWJ1ZmZlciBub3QgeWV0IGlt
cGxlbWVudGVkLiIpOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS51bkJpbmRG
cmFtZWJ1ZmZlciA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBkaXNhYmxlR2VuZXJhdGVNaXBNYXBzLCBv
bkJlZm9yZVVuYmluZCkgeworICAgICAgICBpZiAoZGlzYWJsZUdlbmVyYXRlTWlwTWFwcyA9PT0g
dm9pZCAwKSB7IGRpc2FibGVHZW5lcmF0ZU1pcE1hcHMgPSBmYWxzZTsgfQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoInVuQmluZEZyYW1lYnVmZmVyIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIik7Cisg
ICAgfTsKKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZUR5bmFtaWNWZXJ0ZXhCdWZm
ZXIgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNyZWF0ZUR5
bmFtaWNWZXJ0ZXhCdWZmZXIgbm90IHlldCBpbXBsZW1lbnRlZC4iKTsKKyAgICB9OworICAgIE5h
dGl2ZUVuZ2luZS5wcm90b3R5cGUudXBkYXRlRHluYW1pY0luZGV4QnVmZmVyID0gZnVuY3Rpb24g
KGluZGV4QnVmZmVyLCBpbmRpY2VzLCBvZmZzZXQpIHsKKyAgICAgICAgaWYgKG9mZnNldCA9PT0g
dm9pZCAwKSB7IG9mZnNldCA9IDA7IH0KKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ1cGRhdGVE
eW5hbWljSW5kZXhCdWZmZXIgbm90IHlldCBpbXBsZW1lbnRlZC4iKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFVwZGF0ZXMgYSBkeW5hbWljIHZlcnRleCBidWZmZXIuCisgICAgICogQHBhcmFt
IHZlcnRleEJ1ZmZlciB0aGUgdmVydGV4IGJ1ZmZlciB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0g
ZGF0YSB0aGUgZGF0YSB1c2VkIHRvIHVwZGF0ZSB0aGUgdmVydGV4IGJ1ZmZlcgorICAgICAqIEBw
YXJhbSBieXRlT2Zmc2V0IHRoZSBieXRlIG9mZnNldCBvZiB0aGUgZGF0YSAob3B0aW9uYWwpCisg
ICAgICogQHBhcmFtIGJ5dGVMZW5ndGggdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBkYXRhIChvcHRp
b25hbCkKKyAgICAgKi8KKyAgICBOYXRpdmVFbmdpbmUucHJvdG90eXBlLnVwZGF0ZUR5bmFtaWNW
ZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbiAodmVydGV4QnVmZmVyLCBkYXRhLCBieXRlT2Zmc2V0LCBi
eXRlTGVuZ3RoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigidXBkYXRlRHluYW1pY1ZlcnRl
eEJ1ZmZlciBub3QgeWV0IGltcGxlbWVudGVkLiIpOworICAgIH07CisgICAgLy8gVE9ETzogUmVm
YWN0b3IgdG8gc2hhcmUgbW9yZSBsb2dpYyB3aXRoIGJhc2UgRW5naW5lIGltcGxlbWVudGF0aW9u
LgorICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuX3NldFRleHR1cmUgPSBmdW5jdGlvbiAoY2hh
bm5lbCwgdGV4dHVyZSwgaXNQYXJ0T2ZUZXh0dXJlQXJyYXksIGRlcHRoU3RlbmNpbFRleHR1cmUp
IHsKKyAgICAgICAgaWYgKGlzUGFydE9mVGV4dHVyZUFycmF5ID09PSB2b2lkIDApIHsgaXNQYXJ0
T2ZUZXh0dXJlQXJyYXkgPSBmYWxzZTsgfQorICAgICAgICBpZiAoZGVwdGhTdGVuY2lsVGV4dHVy
ZSA9PT0gdm9pZCAwKSB7IGRlcHRoU3RlbmNpbFRleHR1cmUgPSBmYWxzZTsgfQorICAgICAgICB2
YXIgdW5pZm9ybSA9IHRoaXMuX2JvdW5kVW5pZm9ybXNbY2hhbm5lbF07CisgICAgICAgIGlmICgh
dW5pZm9ybSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IC8vIE5vdCByZWFkeT8KKyAgICAgICAgaWYgKCF0ZXh0dXJlKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fYm91bmRUZXh0dXJlc0NhY2hlW2NoYW5uZWxdICE9IG51bGwpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9hY3RpdmVDaGFubmVsID0gY2hhbm5lbDsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9uYXRpdmUuc2V0VGV4dHVyZSh1bmlmb3JtLCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAvLyBWaWRlbworICAgICAg
ICBpZiAodGV4dHVyZS52aWRlbykgeworICAgICAgICAgICAgdGhpcy5fYWN0aXZlQ2hhbm5lbCA9
IGNoYW5uZWw7CisgICAgICAgICAgICB0ZXh0dXJlLnVwZGF0ZSgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHRleHR1cmUuZGVsYXlMb2FkU3RhdGUgPT09IF9FbmdpbmVzX2VuZ2luZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5ERUxBWUxPQURTVEFURV9OT1RM
T0FERUQpIHsgLy8gRGVsYXkgbG9hZGluZworICAgICAgICAgICAgdGV4dHVyZS5kZWxheUxvYWQo
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW50
ZXJuYWxUZXh0dXJlOworICAgICAgICBpZiAoZGVwdGhTdGVuY2lsVGV4dHVyZSkgeworICAgICAg
ICAgICAgaW50ZXJuYWxUZXh0dXJlID0gdGV4dHVyZS5kZXB0aFN0ZW5jaWxUZXh0dXJlOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRleHR1cmUuaXNSZWFkeSgpKSB7CisgICAgICAgICAg
ICBpbnRlcm5hbFRleHR1cmUgPSB0ZXh0dXJlLmdldEludGVybmFsVGV4dHVyZSgpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHRleHR1cmUuaXNDdWJlKSB7CisgICAgICAgICAgICBpbnRl
cm5hbFRleHR1cmUgPSB0aGlzLmVtcHR5Q3ViZVRleHR1cmU7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAodGV4dHVyZS5pczNEKSB7CisgICAgICAgICAgICBpbnRlcm5hbFRleHR1cmUgPSB0
aGlzLmVtcHR5VGV4dHVyZTNEOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaW50ZXJuYWxUZXh0dXJlID0gdGhpcy5lbXB0eVRleHR1cmU7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fYWN0aXZlQ2hhbm5lbCA9IGNoYW5uZWw7CisgICAgICAgIGlmICghaW50ZXJuYWxU
ZXh0dXJlIHx8CisgICAgICAgICAgICAhaW50ZXJuYWxUZXh0dXJlLl93ZWJHTFRleHR1cmUpIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9uYXRp
dmUuc2V0VGV4dHVyZVdyYXBNb2RlKGludGVybmFsVGV4dHVyZS5fd2ViR0xUZXh0dXJlLCB0aGlz
Ll9nZXRBZGRyZXNzTW9kZSh0ZXh0dXJlLndyYXBVKSwgdGhpcy5fZ2V0QWRkcmVzc01vZGUodGV4
dHVyZS53cmFwViksIHRoaXMuX2dldEFkZHJlc3NNb2RlKHRleHR1cmUud3JhcFIpKTsKKyAgICAg
ICAgdGhpcy5fdXBkYXRlQW5pc290cm9waWNMZXZlbCh0ZXh0dXJlKTsKKyAgICAgICAgdGhpcy5f
bmF0aXZlLnNldFRleHR1cmUodW5pZm9ybSwgaW50ZXJuYWxUZXh0dXJlLl93ZWJHTFRleHR1cmUp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8vIFRPRE86IFNoYXJlIG1vcmUg
b2YgdGhpcyBsb2dpYyB3aXRoIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uLgorICAgIC8vIFRPRE86
IFJlbmFtZSB0byBtYXRjaCBuYW1pbmcgaW4gYmFzZSBpbXBsZW1lbnRhdGlvbiBvbmNlIHJlZmFj
dG9yaW5nIGFsbG93cyBkaWZmZXJlbnQgcGFyYW1ldGVycy4KKyAgICBOYXRpdmVFbmdpbmUucHJv
dG90eXBlLl91cGRhdGVBbmlzb3Ryb3BpY0xldmVsID0gZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAg
ICAgICAgdmFyIGludGVybmFsVGV4dHVyZSA9IHRleHR1cmUuZ2V0SW50ZXJuYWxUZXh0dXJlKCk7
CisgICAgICAgIHZhciB2YWx1ZSA9IHRleHR1cmUuYW5pc290cm9waWNGaWx0ZXJpbmdMZXZlbDsK
KyAgICAgICAgaWYgKCFpbnRlcm5hbFRleHR1cmUgfHwgIWludGVybmFsVGV4dHVyZS5fd2ViR0xU
ZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlu
dGVybmFsVGV4dHVyZS5fY2FjaGVkQW5pc290cm9waWNGaWx0ZXJpbmdMZXZlbCAhPT0gdmFsdWUp
IHsKKyAgICAgICAgICAgIHRoaXMuX25hdGl2ZS5zZXRUZXh0dXJlQW5pc290cm9waWNMZXZlbChp
bnRlcm5hbFRleHR1cmUuX3dlYkdMVGV4dHVyZSwgdmFsdWUpOworICAgICAgICAgICAgaW50ZXJu
YWxUZXh0dXJlLl9jYWNoZWRBbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsID0gdmFsdWU7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8vIFJldHVybnMgYSBOYXRpdmVBZGRyZXNzTW9kZS5YWFggdmFs
dWUuCisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5fZ2V0QWRkcmVzc01vZGUgPSBmdW5jdGlv
biAod3JhcE1vZGUpIHsKKyAgICAgICAgc3dpdGNoICh3cmFwTW9kZSkgeworICAgICAgICAgICAg
Y2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5l
Il0uVEVYVFVSRV9XUkFQX0FERFJFU1NNT0RFOgorICAgICAgICAgICAgICAgIHJldHVybiBOYXRp
dmVBZGRyZXNzTW9kZS5XUkFQOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0uVEVYVFVSRV9DTEFNUF9BRERSRVNT
TU9ERToKKyAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlQWRkcmVzc01vZGUuQ0xBTVA7Cisg
ICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJFbmdpbmUiXS5URVhUVVJFX01JUlJPUl9BRERSRVNTTU9ERToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTmF0aXZlQWRkcmVzc01vZGUuTUlSUk9SOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgd3JhcCBtb2RlOiAi
ICsgd3JhcE1vZGUgKyAiLiIpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIE5hdGl2ZUVuZ2luZS5wcm90b3R5cGUuX2JpbmRUZXh0dXJlID0gZnVuY3Rpb24gKGNo
YW5uZWwsIHRleHR1cmUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJfYmluZFRleHR1cmUg
bm90IGltcGxlbWVudGVkLiIpOworICAgIH07CisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5f
ZGVsZXRlQnVmZmVyID0gZnVuY3Rpb24gKGJ1ZmZlcikgeworICAgICAgICBpZiAoYnVmZmVyLm5h
dGl2ZUluZGV4QnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9uYXRpdmUuZGVsZXRlSW5kZXhC
dWZmZXIoYnVmZmVyLm5hdGl2ZUluZGV4QnVmZmVyKTsKKyAgICAgICAgICAgIGRlbGV0ZSBidWZm
ZXIubmF0aXZlSW5kZXhCdWZmZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1ZmZlci5uYXRp
dmVWZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX25hdGl2ZS5kZWxldGVWZXJ0ZXhC
dWZmZXIoYnVmZmVyLm5hdGl2ZVZlcnRleEJ1ZmZlcik7CisgICAgICAgICAgICBkZWxldGUgYnVm
ZmVyLm5hdGl2ZVZlcnRleEJ1ZmZlcjsKKyAgICAgICAgfQorICAgIH07CisgICAgTmF0aXZlRW5n
aW5lLnByb3RvdHlwZS5yZWxlYXNlRWZmZWN0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8g
VE9ETworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOYXRpdmVFbmdpbmUucHJvdG90
eXBlLl91cGxvYWRDb21wcmVzc2VkRGF0YVRvVGV4dHVyZURpcmVjdGx5ID0gZnVuY3Rpb24gKHRl
eHR1cmUsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkYXRhLCBmYWNlSW5kZXgsIGxv
ZCkgeworICAgICAgICBpZiAoZmFjZUluZGV4ID09PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsg
fQorICAgICAgICBpZiAobG9kID09PSB2b2lkIDApIHsgbG9kID0gMDsgfQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIl91cGxvYWRDb21wcmVzc2VkRGF0YVRvVGV4dHVyZURpcmVjdGx5IG5vdCBp
bXBsZW1lbnRlZC4iKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTmF0aXZlRW5n
aW5lLnByb3RvdHlwZS5fdXBsb2FkRGF0YVRvVGV4dHVyZURpcmVjdGx5ID0gZnVuY3Rpb24gKHRl
eHR1cmUsIGltYWdlRGF0YSwgZmFjZUluZGV4LCBsb2QpIHsKKyAgICAgICAgaWYgKGZhY2VJbmRl
eCA9PT0gdm9pZCAwKSB7IGZhY2VJbmRleCA9IDA7IH0KKyAgICAgICAgaWYgKGxvZCA9PT0gdm9p
ZCAwKSB7IGxvZCA9IDA7IH0KKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJfdXBsb2FkRGF0YVRv
VGV4dHVyZURpcmVjdGx5IG5vdCBpbXBsZW1lbnRlZC4iKTsKKyAgICB9OworICAgIC8qKiBAaGlk
ZGVuICovCisgICAgTmF0aXZlRW5naW5lLnByb3RvdHlwZS5fdXBsb2FkQXJyYXlCdWZmZXJWaWV3
VG9UZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGltYWdlRGF0YSwgZmFjZUluZGV4LCBsb2Qp
IHsKKyAgICAgICAgaWYgKGZhY2VJbmRleCA9PT0gdm9pZCAwKSB7IGZhY2VJbmRleCA9IDA7IH0K
KyAgICAgICAgaWYgKGxvZCA9PT0gdm9pZCAwKSB7IGxvZCA9IDA7IH0KKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJfdXBsb2FkQXJyYXlCdWZmZXJWaWV3VG9UZXh0dXJlIG5vdCBpbXBsZW1lbnRl
ZC4iKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTmF0aXZlRW5naW5lLnByb3Rv
dHlwZS5fdXBsb2FkSW1hZ2VUb1RleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgaW1hZ2UsIGZh
Y2VJbmRleCwgbG9kKSB7CisgICAgICAgIGlmIChmYWNlSW5kZXggPT09IHZvaWQgMCkgeyBmYWNl
SW5kZXggPSAwOyB9CisgICAgICAgIGlmIChsb2QgPT09IHZvaWQgMCkgeyBsb2QgPSAwOyB9Cisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiX3VwbG9hZEFycmF5QnVmZmVyVmlld1RvVGV4dHVyZSBu
b3QgaW1wbGVtZW50ZWQuIik7CisgICAgfTsKKyAgICByZXR1cm4gTmF0aXZlRW5naW5lOworfShf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRW5naW5lIl0pKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FbmdpbmVzL251bGxFbmdpbmUudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRW5naW5lcy9udWxs
RW5naW5lLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogTnVsbEVuZ2luZU9wdGlvbnMsIE51bGxFbmdpbmUgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkg
ey8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIk51bGxFbmdpbmVPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBOdWxsRW5naW5lT3B0aW9uczsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOdWxsRW5naW5lIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBOdWxsRW5naW5lOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIu
L01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0Q3JlYXRpb25P
cHRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25zICov
ICIuL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRDcmVhdGlvbk9wdGlvbnMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMv
VGV4dHVyZXMvaW50ZXJuYWxUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2RhdGFCdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9kYXRhQnVmZmVy
ICovICIuL01lc2hlcy9kYXRhQnVmZmVyLnRzIik7CisKKworCisKKworCisKKy8qKgorICogT3B0
aW9ucyB0byBjcmVhdGUgdGhlIG51bGwgZW5naW5lCisgKi8KK3ZhciBOdWxsRW5naW5lT3B0aW9u
cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBOdWxsRW5naW5l
T3B0aW9ucygpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJlbmRlciB3aWR0aCAoRGVmYXVs
dDogNTEyKQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZW5kZXJXaWR0aCA9IDUxMjsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFJlbmRlciBoZWlnaHQgKERlZmF1bHQ6IDI1NikKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMucmVuZGVySGVpZ2h0ID0gMjU2OworICAgICAgICAvKioKKyAg
ICAgICAgICogVGV4dHVyZSBzaXplIChEZWZhdWx0OiA1MTIpCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLnRleHR1cmVTaXplID0gNTEyOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgZGVs
dGEgdGltZSBiZXR3ZWVuIGZyYW1lcyBzaG91bGQgYmUgY29uc3RhbnQKKyAgICAgICAgICogQHNl
ZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1p
bmlzdGljLWxvY2tzdGVwCisgICAgICAgICAqLworICAgICAgICB0aGlzLmRldGVybWluaXN0aWNM
b2Nrc3RlcCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogTWF4aW11bSBhYm91dCBv
ZiBzdGVwcyBiZXR3ZWVuIGZyYW1lcyAoRGVmYXVsdDogNCkKKyAgICAgICAgICogQHNlZSBodHRw
czovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1pbmlzdGlj
LWxvY2tzdGVwCisgICAgICAgICAqLworICAgICAgICB0aGlzLmxvY2tzdGVwTWF4U3RlcHMgPSA0
OworICAgIH0KKyAgICByZXR1cm4gTnVsbEVuZ2luZU9wdGlvbnM7Cit9KCkpOworCisvKioKKyAq
IFRoZSBudWxsIGVuZ2luZSBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciBoZWFkbGVzcyB2ZXJz
aW9uIG9mIGJhYnlsb24uanMuCisgKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNlcnZlciBzaWRlIHNj
ZW5hcmlvIG9yIGZvciB0ZXN0aW5nIHB1cnBvc2VzCisgKi8KK3ZhciBOdWxsRW5naW5lID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKE51bGxFbmdpbmUsIF9zdXBlcik7CisgICAgZnVu
Y3Rpb24gTnVsbEVuZ2luZShvcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25zID09PSB2b2lk
IDApIHsgb3B0aW9ucyA9IG5ldyBOdWxsRW5naW5lT3B0aW9ucygpOyB9CisgICAgICAgIHZhciBf
dGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG51bGwpIHx8IHRoaXM7CisgICAgICAgIGlmIChvcHRp
b25zLmRldGVybWluaXN0aWNMb2Nrc3RlcCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBv
cHRpb25zLmRldGVybWluaXN0aWNMb2Nrc3RlcCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmIChvcHRpb25zLmxvY2tzdGVwTWF4U3RlcHMgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgb3B0aW9ucy5sb2Nrc3RlcE1heFN0ZXBzID0gNDsKKyAgICAgICAgfQorICAgICAgICBfdGhp
cy5fb3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIC8vIEluaXQgY2FwcworICAgICAgICAvLyBX
ZSBjb25zaWRlciB3ZSBhcmUgb24gYSB3ZWJnbDEgY2FwYWJsZSBkZXZpY2UKKyAgICAgICAgX3Ro
aXMuX2NhcHMgPSBuZXcgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkVuZ2luZUNhcGFiaWxpdGllcyJdKCk7CisgICAgICAgIF90aGlzLl9jYXBzLm1heFRleHR1
cmVzSW1hZ2VVbml0cyA9IDE2OworICAgICAgICBfdGhpcy5fY2Fwcy5tYXhWZXJ0ZXhUZXh0dXJl
SW1hZ2VVbml0cyA9IDE2OworICAgICAgICBfdGhpcy5fY2Fwcy5tYXhUZXh0dXJlU2l6ZSA9IDUx
MjsKKyAgICAgICAgX3RoaXMuX2NhcHMubWF4Q3ViZW1hcFRleHR1cmVTaXplID0gNTEyOworICAg
ICAgICBfdGhpcy5fY2Fwcy5tYXhSZW5kZXJUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICAgICAgX3Ro
aXMuX2NhcHMubWF4VmVydGV4QXR0cmlicyA9IDE2OworICAgICAgICBfdGhpcy5fY2Fwcy5tYXhW
YXJ5aW5nVmVjdG9ycyA9IDE2OworICAgICAgICBfdGhpcy5fY2Fwcy5tYXhGcmFnbWVudFVuaWZv
cm1WZWN0b3JzID0gMTY7CisgICAgICAgIF90aGlzLl9jYXBzLm1heFZlcnRleFVuaWZvcm1WZWN0
b3JzID0gMTY7CisgICAgICAgIC8vIEV4dGVuc2lvbnMKKyAgICAgICAgX3RoaXMuX2NhcHMuc3Rh
bmRhcmREZXJpdmF0aXZlcyA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2Fwcy5hc3RjID0gbnVs
bDsKKyAgICAgICAgX3RoaXMuX2NhcHMuczN0YyA9IG51bGw7CisgICAgICAgIF90aGlzLl9jYXBz
LnB2cnRjID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX2NhcHMuZXRjMSA9IG51bGw7CisgICAgICAg
IF90aGlzLl9jYXBzLmV0YzIgPSBudWxsOworICAgICAgICBfdGhpcy5fY2Fwcy50ZXh0dXJlQW5p
c290cm9waWNGaWx0ZXJFeHRlbnNpb24gPSBudWxsOworICAgICAgICBfdGhpcy5fY2Fwcy5tYXhB
bmlzb3Ryb3B5ID0gMDsKKyAgICAgICAgX3RoaXMuX2NhcHMudWludEluZGljZXMgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuX2NhcHMuZnJhZ21lbnREZXB0aFN1cHBvcnRlZCA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5fY2Fwcy5oaWdoUHJlY2lzaW9uU2hhZGVyU3VwcG9ydGVkID0gdHJ1ZTsKKyAg
ICAgICAgX3RoaXMuX2NhcHMuY29sb3JCdWZmZXJGbG9hdCA9IGZhbHNlOworICAgICAgICBfdGhp
cy5fY2Fwcy50ZXh0dXJlRmxvYXQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2NhcHMudGV4dHVy
ZUZsb2F0TGluZWFyRmlsdGVyaW5nID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9jYXBzLnRleHR1
cmVGbG9hdFJlbmRlciA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZs
b2F0ID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9jYXBzLnRleHR1cmVIYWxmRmxvYXRMaW5lYXJG
aWx0ZXJpbmcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2NhcHMudGV4dHVyZUhhbGZGbG9hdFJl
bmRlciA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2Fwcy50ZXh0dXJlTE9EID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLl9jYXBzLmRyYXdCdWZmZXJzRXh0ZW5zaW9uID0gZmFsc2U7CisgICAgICAg
IF90aGlzLl9jYXBzLmRlcHRoVGV4dHVyZUV4dGVuc2lvbiA9IGZhbHNlOworICAgICAgICBfdGhp
cy5fY2Fwcy52ZXJ0ZXhBcnJheU9iamVjdCA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2Fwcy5p
bnN0YW5jZWRBcnJheXMgPSBmYWxzZTsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkxvZygiQmFieWxvbi5qcyB2IiArIF9FbmdpbmVz
X2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmUiXS5WZXJzaW9uICsg
IiAtIE51bGwgZW5naW5lIik7CisgICAgICAgIC8vIFdyYXBwZXJzCisgICAgICAgIHZhciB0aGVD
dXJyZW50R2xvYmFsID0gKHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBl
b2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHdpbmRvdyk7CisgICAgICAgIGlm
ICh0eXBlb2YgVVJMID09PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgdGhlQ3VycmVudEds
b2JhbC5VUkwgPSB7CisgICAgICAgICAgICAgICAgY3JlYXRlT2JqZWN0VVJMOiBmdW5jdGlvbiAo
KSB7IH0sCisgICAgICAgICAgICAgICAgcmV2b2tlT2JqZWN0VVJMOiBmdW5jdGlvbiAoKSB7IH0K
KyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiBCbG9iID09PSAi
dW5kZWZpbmVkIikgeworICAgICAgICAgICAgdGhlQ3VycmVudEdsb2JhbC5CbG9iID0gZnVuY3Rp
b24gKCkgeyB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAg
LyoqCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5p
bWF0aW9ucyNkZXRlcm1pbmlzdGljLWxvY2tzdGVwCisgICAgICovCisgICAgTnVsbEVuZ2luZS5w
cm90b3R5cGUuaXNEZXRlcm1pbmlzdGljTG9ja1N0ZXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLl9vcHRpb25zLmRldGVybWluaXN0aWNMb2Nrc3RlcDsKKyAgICB9OworICAg
IC8qKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9hbmltYXRpb25z
I2RldGVybWluaXN0aWMtbG9ja3N0ZXAgKi8KKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5nZXRM
b2Nrc3RlcE1heFN0ZXBzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fb3B0
aW9ucy5sb2Nrc3RlcE1heFN0ZXBzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBoYXJk
d2FyZSBzY2FsaW5nLCB1c2VkIHRvIHNhdmUgcGVyZm9ybWFuY2UgaWYgbmVlZGVkCisgICAgICog
QHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3NjZW5lb3B0
aW1pemVyCisgICAgICovCisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuZ2V0SGFyZHdhcmVTY2Fs
aW5nTGV2ZWwgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAxLjA7CisgICAgfTsKKyAg
ICBOdWxsRW5naW5lLnByb3RvdHlwZS5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbiAodmVy
dGljZXMpIHsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBfTWVzaGVzX2RhdGFCdWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRGF0YUJ1ZmZlciJdKCk7CisgICAgICAgIGJ1ZmZl
ci5yZWZlcmVuY2VzID0gMTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9OworICAgIE51
bGxFbmdpbmUucHJvdG90eXBlLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24gKGluZGljZXMp
IHsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBfTWVzaGVzX2RhdGFCdWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siRGF0YUJ1ZmZlciJdKCk7CisgICAgICAgIGJ1ZmZlci5yZWZl
cmVuY2VzID0gMTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9OworICAgIE51bGxFbmdp
bmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGNvbG9yLCBiYWNrQnVmZmVyLCBkZXB0aCwg
c3RlbmNpbCkgeworICAgICAgICBpZiAoc3RlbmNpbCA9PT0gdm9pZCAwKSB7IHN0ZW5jaWwgPSBm
YWxzZTsgfQorICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuZ2V0UmVuZGVyV2lkdGgg
PSBmdW5jdGlvbiAodXNlU2NyZWVuKSB7CisgICAgICAgIGlmICh1c2VTY3JlZW4gPT09IHZvaWQg
MCkgeyB1c2VTY3JlZW4gPSBmYWxzZTsgfQorICAgICAgICBpZiAoIXVzZVNjcmVlbiAmJiB0aGlz
Ll9jdXJyZW50UmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVu
dFJlbmRlclRhcmdldC53aWR0aDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fb3B0
aW9ucy5yZW5kZXJXaWR0aDsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLmdldFJl
bmRlckhlaWdodCA9IGZ1bmN0aW9uICh1c2VTY3JlZW4pIHsKKyAgICAgICAgaWYgKHVzZVNjcmVl
biA9PT0gdm9pZCAwKSB7IHVzZVNjcmVlbiA9IGZhbHNlOyB9CisgICAgICAgIGlmICghdXNlU2Ny
ZWVuICYmIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0LmhlaWdodDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdGhpcy5fb3B0aW9ucy5yZW5kZXJIZWlnaHQ7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnBy
b3RvdHlwZS5zZXRWaWV3cG9ydCA9IGZ1bmN0aW9uICh2aWV3cG9ydCwgcmVxdWlyZWRXaWR0aCwg
cmVxdWlyZWRIZWlnaHQpIHsKKyAgICAgICAgdGhpcy5fY2FjaGVkVmlld3BvcnQgPSB2aWV3cG9y
dDsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVNoYWRlclByb2dyYW0g
PSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhDb2RlLCBmcmFnbWVudENvZGUsIGRl
ZmluZXMsIGNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIF9fU1BFQ1RP
Ul9yZWJ1aWxkUHJvZ3JhbTogbnVsbCwKKyAgICAgICAgfTsKKyAgICB9OworICAgIE51bGxFbmdp
bmUucHJvdG90eXBlLmdldFVuaWZvcm1zID0gZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCwgdW5p
Zm9ybXNOYW1lcykgeworICAgICAgICByZXR1cm4gW107CisgICAgfTsKKyAgICBOdWxsRW5naW5l
LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCwgYXR0
cmlidXRlc05hbWVzKSB7CisgICAgICAgIHJldHVybiBbXTsKKyAgICB9OworICAgIE51bGxFbmdp
bmUucHJvdG90eXBlLmJpbmRTYW1wbGVycyA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAg
dGhpcy5fY3VycmVudEVmZmVjdCA9IG51bGw7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3Rv
dHlwZS5lbmFibGVFZmZlY3QgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgIHRoaXMuX2N1
cnJlbnRFZmZlY3QgPSBlZmZlY3Q7CisgICAgICAgIGlmIChlZmZlY3Qub25CaW5kKSB7CisgICAg
ICAgICAgICBlZmZlY3Qub25CaW5kKGVmZmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVm
ZmVjdC5fb25CaW5kT2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgZWZmZWN0Ll9vbkJpbmRPYnNl
cnZhYmxlLm5vdGlmeU9ic2VydmVycyhlZmZlY3QpOworICAgICAgICB9CisgICAgfTsKKyAgICBO
dWxsRW5naW5lLnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChjdWxsaW5nLCB6T2Zmc2V0
LCBmb3JjZSwgcmV2ZXJzZVNpZGUpIHsKKyAgICAgICAgaWYgKHpPZmZzZXQgPT09IHZvaWQgMCkg
eyB6T2Zmc2V0ID0gMDsgfQorICAgICAgICBpZiAocmV2ZXJzZVNpZGUgPT09IHZvaWQgMCkgeyBy
ZXZlcnNlU2lkZSA9IGZhbHNlOyB9CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5z
ZXRJbnRBcnJheSA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgIH07CisgICAgTnVs
bEVuZ2luZS5wcm90b3R5cGUuc2V0SW50QXJyYXkyID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5
KSB7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5zZXRJbnRBcnJheTMgPSBmdW5j
dGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBl
LnNldEludEFycmF5NCA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgIH07CisgICAg
TnVsbEVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXRBcnJheSA9IGZ1bmN0aW9uICh1bmlmb3JtLCBh
cnJheSkgeworICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTIg
PSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJv
dG90eXBlLnNldEZsb2F0QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5KSB7CisgICAg
fTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5zZXRGbG9hdEFycmF5NCA9IGZ1bmN0aW9uICh1
bmlmb3JtLCBhcnJheSkgeworICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuc2V0QXJy
YXkgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUu
cHJvdG90eXBlLnNldEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgIH07
CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuc2V0QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm0s
IGFycmF5KSB7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5zZXRBcnJheTQgPSBm
dW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90
eXBlLnNldE1hdHJpY2VzID0gZnVuY3Rpb24gKHVuaWZvcm0sIG1hdHJpY2VzKSB7CisgICAgfTsK
KyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5zZXRNYXRyaXgzeDMgPSBmdW5jdGlvbiAodW5pZm9y
bSwgbWF0cml4KSB7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5zZXRNYXRyaXgy
eDIgPSBmdW5jdGlvbiAodW5pZm9ybSwgbWF0cml4KSB7CisgICAgfTsKKyAgICBOdWxsRW5naW5l
LnByb3RvdHlwZS5zZXRGbG9hdCA9IGZ1bmN0aW9uICh1bmlmb3JtLCB2YWx1ZSkgeworICAgIH07
CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXQyID0gZnVuY3Rpb24gKHVuaWZvcm0s
IHgsIHkpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0MyA9IGZ1
bmN0aW9uICh1bmlmb3JtLCB4LCB5LCB6KSB7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3Rv
dHlwZS5zZXRCb29sID0gZnVuY3Rpb24gKHVuaWZvcm0sIGJvb2wpIHsKKyAgICB9OworICAgIE51
bGxFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0NCA9IGZ1bmN0aW9uICh1bmlmb3JtLCB4LCB5LCB6
LCB3KSB7CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5zZXRBbHBoYU1vZGUgPSBm
dW5jdGlvbiAobW9kZSwgbm9EZXB0aFdyaXRlQ2hhbmdlKSB7CisgICAgICAgIGlmIChub0RlcHRo
V3JpdGVDaGFuZ2UgPT09IHZvaWQgMCkgeyBub0RlcHRoV3JpdGVDaGFuZ2UgPSBmYWxzZTsgfQor
ICAgICAgICBpZiAodGhpcy5fYWxwaGFNb2RlID09PSBtb2RlKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJsZW5kID0gKG1v
ZGUgIT09IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRz
Il0uQUxQSEFfRElTQUJMRSk7CisgICAgICAgIGlmICghbm9EZXB0aFdyaXRlQ2hhbmdlKSB7Cisg
ICAgICAgICAgICB0aGlzLnNldERlcHRoV3JpdGUobW9kZSA9PT0gX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5BTFBIQV9ESVNBQkxFKTsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9hbHBoYU1vZGUgPSBtb2RlOworICAgIH07CisgICAgTnVsbEVu
Z2luZS5wcm90b3R5cGUuYmluZEJ1ZmZlcnMgPSBmdW5jdGlvbiAodmVydGV4QnVmZmVycywgaW5k
ZXhCdWZmZXIsIGVmZmVjdCkgeworICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUud2lw
ZUNhY2hlcyA9IGZ1bmN0aW9uIChicnV0ZUZvcmNlKSB7CisgICAgICAgIGlmICh0aGlzLnByZXZl
bnRDYWNoZVdpcGVCZXR3ZWVuRnJhbWVzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5yZXNldFRleHR1cmVDYWNoZSgpOworICAgICAgICB0aGlzLl9jdXJy
ZW50RWZmZWN0ID0gbnVsbDsKKyAgICAgICAgaWYgKGJydXRlRm9yY2UpIHsKKyAgICAgICAgICAg
IHRoaXMuX2N1cnJlbnRQcm9ncmFtID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3N0ZW5jaWxT
dGF0ZS5yZXNldCgpOworICAgICAgICAgICAgdGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUucmVzZXQo
KTsKKyAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUucmVzZXQoKTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9jYWNoZWRWZXJ0ZXhCdWZmZXJzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2Fj
aGVkSW5kZXhCdWZmZXIgPSBudWxsOworICAgICAgICB0aGlzLl9jYWNoZWRFZmZlY3RGb3JWZXJ0
ZXhCdWZmZXJzID0gbnVsbDsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLmRyYXcg
PSBmdW5jdGlvbiAodXNlVHJpYW5nbGVzLCBpbmRleFN0YXJ0LCBpbmRleENvdW50LCBpbnN0YW5j
ZXNDb3VudCkgeworICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuZHJhd0VsZW1lbnRz
VHlwZSA9IGZ1bmN0aW9uIChmaWxsTW9kZSwgaW5kZXhTdGFydCwgaW5kZXhDb3VudCwgaW5zdGFu
Y2VzQ291bnQpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLmRyYXdBcnJheXNU
eXBlID0gZnVuY3Rpb24gKGZpbGxNb2RlLCB2ZXJ0aWNlc1N0YXJ0LCB2ZXJ0aWNlc0NvdW50LCBp
bnN0YW5jZXNDb3VudCkgeworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOdWxsRW5n
aW5lLnByb3RvdHlwZS5fY3JlYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIHt9OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOdWxsRW5naW5lLnByb3Rv
dHlwZS5fcmVsZWFzZVRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgIH07CisgICAg
TnVsbEVuZ2luZS5wcm90b3R5cGUuY3JlYXRlVGV4dHVyZSA9IGZ1bmN0aW9uICh1cmxBcmcsIG5v
TWlwbWFwLCBpbnZlcnRZLCBzY2VuZSwgc2FtcGxpbmdNb2RlLCBvbkxvYWQsIG9uRXJyb3IsIGJ1
ZmZlciwgZmFsbEJhY2ssIGZvcm1hdCkgeworICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2
b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01PREU7IH0KKyAg
ICAgICAgaWYgKG9uTG9hZCA9PT0gdm9pZCAwKSB7IG9uTG9hZCA9IG51bGw7IH0KKyAgICAgICAg
aWYgKG9uRXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbnVsbDsgfQorICAgICAgICBpZiAo
YnVmZmVyID09PSB2b2lkIDApIHsgYnVmZmVyID0gbnVsbDsgfQorICAgICAgICB2YXIgdGV4dHVy
ZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJJbnRlcm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJpYWxzX1RleHR1
cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJJbnRlcm5h
bFRleHR1cmUiXS5EQVRBU09VUkNFX1VSTCk7CisgICAgICAgIHZhciB1cmwgPSBTdHJpbmcodXJs
QXJnKTsKKyAgICAgICAgdGV4dHVyZS51cmwgPSB1cmw7CisgICAgICAgIHRleHR1cmUuZ2VuZXJh
dGVNaXBNYXBzID0gIW5vTWlwbWFwOworICAgICAgICB0ZXh0dXJlLnNhbXBsaW5nTW9kZSA9IHNh
bXBsaW5nTW9kZTsKKyAgICAgICAgdGV4dHVyZS5pbnZlcnRZID0gaW52ZXJ0WTsKKyAgICAgICAg
dGV4dHVyZS5iYXNlV2lkdGggPSB0aGlzLl9vcHRpb25zLnRleHR1cmVTaXplOworICAgICAgICB0
ZXh0dXJlLmJhc2VIZWlnaHQgPSB0aGlzLl9vcHRpb25zLnRleHR1cmVTaXplOworICAgICAgICB0
ZXh0dXJlLndpZHRoID0gdGhpcy5fb3B0aW9ucy50ZXh0dXJlU2l6ZTsKKyAgICAgICAgdGV4dHVy
ZS5oZWlnaHQgPSB0aGlzLl9vcHRpb25zLnRleHR1cmVTaXplOworICAgICAgICBpZiAoZm9ybWF0
KSB7CisgICAgICAgICAgICB0ZXh0dXJlLmZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgfQorICAg
ICAgICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAgICAgICBpZiAob25Mb2FkKSB7CisgICAg
ICAgICAgICBvbkxvYWQoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pbnRlcm5hbFRleHR1
cmVzQ2FjaGUucHVzaCh0ZXh0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfTsK
KyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5jcmVhdGVSZW5kZXJUYXJnZXRUZXh0dXJlID0gZnVu
Y3Rpb24gKHNpemUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIGZ1bGxPcHRpb25zID0gbmV3IF9N
YXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25zX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlJlbmRlclRhcmdldENyZWF0aW9uT3B0aW9ucyJdKCk7CisgICAg
ICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICJvYmpl
Y3QiKSB7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHMgPSBvcHRpb25z
LmdlbmVyYXRlTWlwTWFwczsKKyAgICAgICAgICAgIGZ1bGxPcHRpb25zLmdlbmVyYXRlRGVwdGhC
dWZmZXIgPSBvcHRpb25zLmdlbmVyYXRlRGVwdGhCdWZmZXIgPT09IHVuZGVmaW5lZCA/IHRydWUg
OiBvcHRpb25zLmdlbmVyYXRlRGVwdGhCdWZmZXI7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy5n
ZW5lcmF0ZVN0ZW5jaWxCdWZmZXIgPSBmdWxsT3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyICYm
IG9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVmZmVyOworICAgICAgICAgICAgZnVsbE9wdGlvbnMu
dHlwZSA9IG9wdGlvbnMudHlwZSA9PT0gdW5kZWZpbmVkID8gX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQg
OiBvcHRpb25zLnR5cGU7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy5zYW1wbGluZ01vZGUgPSBv
cHRpb25zLnNhbXBsaW5nTW9kZSA9PT0gdW5kZWZpbmVkID8gX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElO
R01PREUgOiBvcHRpb25zLnNhbXBsaW5nTW9kZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGZ1bGxPcHRpb25zLmdlbmVyYXRlTWlwTWFwcyA9IG9wdGlvbnM7CisgICAg
ICAgICAgICBmdWxsT3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGZ1bGxPcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA9IGZhbHNlOworICAgICAgICAg
ICAgZnVsbE9wdGlvbnMudHlwZSA9IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICAgICAg
ZnVsbE9wdGlvbnMuc2FtcGxpbmdNb2RlID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01PREU7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19p
bnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siSW50ZXJuYWxUZXh0
dXJlIl0odGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9SRU5ERVJU
QVJHRVQpOworICAgICAgICB2YXIgd2lkdGggPSBzaXplLndpZHRoIHx8IHNpemU7CisgICAgICAg
IHZhciBoZWlnaHQgPSBzaXplLmhlaWdodCB8fCBzaXplOworICAgICAgICB0ZXh0dXJlLl9kZXB0
aFN0ZW5jaWxCdWZmZXIgPSB7fTsKKyAgICAgICAgdGV4dHVyZS5fZnJhbWVidWZmZXIgPSB7fTsK
KyAgICAgICAgdGV4dHVyZS5iYXNlV2lkdGggPSB3aWR0aDsKKyAgICAgICAgdGV4dHVyZS5iYXNl
SGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7CisgICAgICAg
IHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVl
OworICAgICAgICB0ZXh0dXJlLnNhbXBsZXMgPSAxOworICAgICAgICB0ZXh0dXJlLmdlbmVyYXRl
TWlwTWFwcyA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlTWlwTWFwcyA/IHRydWUgOiBmYWxzZTsKKyAg
ICAgICAgdGV4dHVyZS5zYW1wbGluZ01vZGUgPSBmdWxsT3B0aW9ucy5zYW1wbGluZ01vZGU7Cisg
ICAgICAgIHRleHR1cmUudHlwZSA9IGZ1bGxPcHRpb25zLnR5cGU7CisgICAgICAgIHRleHR1cmUu
X2dlbmVyYXRlRGVwdGhCdWZmZXIgPSBmdWxsT3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyOwor
ICAgICAgICB0ZXh0dXJlLl9nZW5lcmF0ZVN0ZW5jaWxCdWZmZXIgPSBmdWxsT3B0aW9ucy5nZW5l
cmF0ZVN0ZW5jaWxCdWZmZXIgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIHRoaXMuX2ludGVybmFs
VGV4dHVyZXNDYWNoZS5wdXNoKHRleHR1cmUpOworICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAg
ICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLnVwZGF0ZVRleHR1cmVTYW1wbGluZ01vZGUg
PSBmdW5jdGlvbiAoc2FtcGxpbmdNb2RlLCB0ZXh0dXJlKSB7CisgICAgICAgIHRleHR1cmUuc2Ft
cGxpbmdNb2RlID0gc2FtcGxpbmdNb2RlOworICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5
cGUuYmluZEZyYW1lYnVmZmVyID0gZnVuY3Rpb24gKHRleHR1cmUsIGZhY2VJbmRleCwgcmVxdWly
ZWRXaWR0aCwgcmVxdWlyZWRIZWlnaHQsIGZvcmNlRnVsbHNjcmVlblZpZXdwb3J0KSB7CisgICAg
ICAgIGlmICh0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICB0aGlzLnVu
QmluZEZyYW1lYnVmZmVyKHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQgPSB0ZXh0dXJlOworICAgICAgICB0aGlz
Ll9jdXJyZW50RnJhbWVidWZmZXIgPSB0ZXh0dXJlLl9NU0FBRnJhbWVidWZmZXIgPyB0ZXh0dXJl
Ll9NU0FBRnJhbWVidWZmZXIgOiB0ZXh0dXJlLl9mcmFtZWJ1ZmZlcjsKKyAgICAgICAgaWYgKHRo
aXMuX2NhY2hlZFZpZXdwb3J0ICYmICFmb3JjZUZ1bGxzY3JlZW5WaWV3cG9ydCkgeworICAgICAg
ICAgICAgdGhpcy5zZXRWaWV3cG9ydCh0aGlzLl9jYWNoZWRWaWV3cG9ydCwgcmVxdWlyZWRXaWR0
aCwgcmVxdWlyZWRIZWlnaHQpOworICAgICAgICB9CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnBy
b3RvdHlwZS51bkJpbmRGcmFtZWJ1ZmZlciA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBkaXNhYmxlR2Vu
ZXJhdGVNaXBNYXBzLCBvbkJlZm9yZVVuYmluZCkgeworICAgICAgICBpZiAoZGlzYWJsZUdlbmVy
YXRlTWlwTWFwcyA9PT0gdm9pZCAwKSB7IGRpc2FibGVHZW5lcmF0ZU1pcE1hcHMgPSBmYWxzZTsg
fQorICAgICAgICB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0ID0gbnVsbDsKKyAgICAgICAgaWYg
KG9uQmVmb3JlVW5iaW5kKSB7CisgICAgICAgICAgICBpZiAodGV4dHVyZS5fTVNBQUZyYW1lYnVm
ZmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEZyYW1lYnVmZmVyID0gdGV4dHVy
ZS5fZnJhbWVidWZmZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvbkJlZm9yZVVuYmlu
ZCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2N1cnJlbnRGcmFtZWJ1ZmZlciA9IG51bGw7
CisgICAgfTsKKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS5jcmVhdGVEeW5hbWljVmVydGV4QnVm
ZmVyID0gZnVuY3Rpb24gKHZlcnRpY2VzKSB7CisgICAgICAgIHZhciBidWZmZXIgPSBuZXcgX01l
c2hlc19kYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkRhdGFCdWZmZXIi
XSgpOworICAgICAgICBidWZmZXIucmVmZXJlbmNlcyA9IDE7CisgICAgICAgIGJ1ZmZlci5jYXBh
Y2l0eSA9IDE7CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgfTsKKyAgICBOdWxsRW5naW5l
LnByb3RvdHlwZS51cGRhdGVEeW5hbWljVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjYW52
YXMsIGludmVydFksIHByZW11bEFscGhhLCBmb3JtYXQpIHsKKyAgICAgICAgaWYgKHByZW11bEFs
cGhhID09PSB2b2lkIDApIHsgcHJlbXVsQWxwaGEgPSBmYWxzZTsgfQorICAgIH07CisgICAgTnVs
bEVuZ2luZS5wcm90b3R5cGUuYXJlQWxsRWZmZWN0c1JlYWR5ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAg
KiBHZXQgdGhlIGN1cnJlbnQgZXJyb3IgY29kZSBvZiB0aGUgd2ViR0wgY29udGV4dAorICAgICAq
IEByZXR1cm5zIHRoZSBlcnJvciBjb2RlCisgICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5t
b3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2dldEVy
cm9yCisgICAgICovCisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuZ2V0RXJyb3IgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBOdWxsRW5naW5lLnByb3RvdHlwZS5fZ2V0VW5wYWNrQWxpZ25lbWVudCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE51
bGxFbmdpbmUucHJvdG90eXBlLl91bnBhY2tGbGlwWSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
IH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUudXBkYXRlRHluYW1pY0luZGV4QnVmZmVyID0g
ZnVuY3Rpb24gKGluZGV4QnVmZmVyLCBpbmRpY2VzLCBvZmZzZXQpIHsKKyAgICAgICAgaWYgKG9m
ZnNldCA9PT0gdm9pZCAwKSB7IG9mZnNldCA9IDA7IH0KKyAgICB9OworICAgIC8qKgorICAgICAq
IFVwZGF0ZXMgYSBkeW5hbWljIHZlcnRleCBidWZmZXIuCisgICAgICogQHBhcmFtIHZlcnRleEJ1
ZmZlciB0aGUgdmVydGV4IGJ1ZmZlciB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gZGF0YSB0aGUg
ZGF0YSB1c2VkIHRvIHVwZGF0ZSB0aGUgdmVydGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBieXRl
T2Zmc2V0IHRoZSBieXRlIG9mZnNldCBvZiB0aGUgZGF0YSAob3B0aW9uYWwpCisgICAgICogQHBh
cmFtIGJ5dGVMZW5ndGggdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBkYXRhIChvcHRpb25hbCkKKyAg
ICAgKi8KKyAgICBOdWxsRW5naW5lLnByb3RvdHlwZS51cGRhdGVEeW5hbWljVmVydGV4QnVmZmVy
ID0gZnVuY3Rpb24gKHZlcnRleEJ1ZmZlciwgdmVydGljZXMsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLl9iaW5kVGV4dHVyZURpcmVj
dGx5ID0gZnVuY3Rpb24gKHRhcmdldCwgdGV4dHVyZSkgeworICAgICAgICBpZiAodGhpcy5fYm91
bmRUZXh0dXJlc0NhY2hlW3RoaXMuX2FjdGl2ZUNoYW5uZWxdICE9PSB0ZXh0dXJlKSB7CisgICAg
ICAgICAgICB0aGlzLl9ib3VuZFRleHR1cmVzQ2FjaGVbdGhpcy5fYWN0aXZlQ2hhbm5lbF0gPSB0
ZXh0dXJlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOdWxsRW5naW5lLnBy
b3RvdHlwZS5fYmluZFRleHR1cmUgPSBmdW5jdGlvbiAoY2hhbm5lbCwgdGV4dHVyZSkgeworICAg
ICAgICBpZiAoY2hhbm5lbCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KDAsIHRleHR1cmUpOworICAgIH07Cisg
ICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuX2RlbGV0ZUJ1ZmZlciA9IGZ1bmN0aW9uIChidWZmZXIp
IHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLnJlbGVhc2VFZmZlY3RzID0gZnVu
Y3Rpb24gKCkgeworICAgIH07CisgICAgTnVsbEVuZ2luZS5wcm90b3R5cGUuZGlzcGxheUxvYWRp
bmdVSSA9IGZ1bmN0aW9uICgpIHsKKyAgICB9OworICAgIE51bGxFbmdpbmUucHJvdG90eXBlLmhp
ZGVMb2FkaW5nVUkgPSBmdW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIE51bGxFbmdpbmUucHJvdG90eXBlLl91cGxvYWRDb21wcmVzc2VkRGF0YVRvVGV4dHVyZURp
cmVjdGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBkYXRhLCBmYWNlSW5kZXgsIGxvZCkgeworICAgICAgICBpZiAoZmFjZUluZGV4ID09PSB2b2lk
IDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAgICAgICBpZiAobG9kID09PSB2b2lkIDApIHsgbG9k
ID0gMDsgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOdWxsRW5naW5lLnByb3Rv
dHlwZS5fdXBsb2FkRGF0YVRvVGV4dHVyZURpcmVjdGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGlt
YWdlRGF0YSwgZmFjZUluZGV4LCBsb2QpIHsKKyAgICAgICAgaWYgKGZhY2VJbmRleCA9PT0gdm9p
ZCAwKSB7IGZhY2VJbmRleCA9IDA7IH0KKyAgICAgICAgaWYgKGxvZCA9PT0gdm9pZCAwKSB7IGxv
ZCA9IDA7IH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTnVsbEVuZ2luZS5wcm90
b3R5cGUuX3VwbG9hZEFycmF5QnVmZmVyVmlld1RvVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJl
LCBpbWFnZURhdGEsIGZhY2VJbmRleCwgbG9kKSB7CisgICAgICAgIGlmIChmYWNlSW5kZXggPT09
IHZvaWQgMCkgeyBmYWNlSW5kZXggPSAwOyB9CisgICAgICAgIGlmIChsb2QgPT09IHZvaWQgMCkg
eyBsb2QgPSAwOyB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE51bGxFbmdpbmUu
cHJvdG90eXBlLl91cGxvYWRJbWFnZVRvVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpbWFn
ZSwgZmFjZUluZGV4LCBsb2QpIHsKKyAgICAgICAgaWYgKGZhY2VJbmRleCA9PT0gdm9pZCAwKSB7
IGZhY2VJbmRleCA9IDA7IH0KKyAgICAgICAgaWYgKGxvZCA9PT0gdm9pZCAwKSB7IGxvZCA9IDA7
IH0KKyAgICB9OworICAgIHJldHVybiBOdWxsRW5naW5lOworfShfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lIl0pKTsKKworCisvKiBXRUJQQUNLIFZB
UiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi8uLi8u
Li9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyAqLyAiLi4vbm9kZV9tb2R1
bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMiKSkpCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9FbmdpbmVzL3dlYmdwdUVuZ2luZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL0VuZ2luZXMvd2ViZ3B1RW5naW5lLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBX
ZWJHUFVFbmdpbmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViR1BV
RW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBXZWJHUFVFbmdpbmU7IH0pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGli
LmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9s
b2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0aHMvbWF0aCAqLyAiLi9NYXRocy9tYXRoLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnNjYWxhciAqLyAi
Li9NYXRocy9tYXRoLnNjYWxhci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldENy
ZWF0aW9uT3B0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRlclRhcmdldENyZWF0aW9uT3B0
aW9ucyAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25z
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19pbnRl
cm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9pbnRlcm5hbFRleHR1cmUgKi8gIi4vTWF0
ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFs
cy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbnN0
YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1dlYkdQVS93ZWJncHVDb25zdGFudHMgKi8gIi4v
RW5naW5lcy9XZWJHUFUvd2ViZ3B1Q29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfV2ViR1BVX3dlYmdwdVBpcGVsaW5lQ29u
dGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vV2ViR1BVL3dlYmdwdVBpcGVsaW5lQ29udGV4dCAqLyAiLi9FbmdpbmVzL1dlYkdQVS93
ZWJncHVQaXBlbGluZUNvbnRleHQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVz
aGVzX1dlYkdQVV93ZWJncHVEYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL1dlYkdQVS93ZWJncHVEYXRhQnVm
ZmVyICovICIuL01lc2hlcy9XZWJHUFUvd2ViZ3B1RGF0YUJ1ZmZlci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9XZWJHUFVfd2ViZ3B1U2hhZGVyUHJvY2Vzc29yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vV2ViR1BVL3dl
YmdwdVNoYWRlclByb2Nlc3NvcnMgKi8gIi4vRW5naW5lcy9XZWJHUFUvd2ViZ3B1U2hhZGVyUHJv
Y2Vzc29ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9XZWJHUFVfd2ViZ3B1U2hh
ZGVyUHJvY2Vzc2luZ0NvbnRleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL1dlYkdQVS93ZWJncHVTaGFkZXJQcm9jZXNzaW5nQ29udGV4
dCAqLyAiLi9FbmdpbmVzL1dlYkdQVS93ZWJncHVTaGFkZXJQcm9jZXNzaW5nQ29udGV4dC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAi
Li9NaXNjL3Rvb2xzLnRzIik7CisKKworCisKKworCisKKworCisKKworCisKKworCisKKy8qKgor
ICogVGhlIHdlYiBHUFUgZW5naW5lIGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFdlYkdQVSB2
ZXJzaW9uIG9mIGJhYnlsb24uanMuCisgKi8KK3ZhciBXZWJHUFVFbmdpbmUgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19leHRlbmRzIl0oV2ViR1BVRW5naW5lLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgZ3B1IGVuZ2luZS4KKyAgICAgKiBAcGFy
YW0gY2FudmFzIERlZmluZXMgdGhlIGNhbnZhcyB0byB1c2UgdG8gZGlzcGxheSB0aGUgcmVzdWx0
CisgICAgICogQHBhcmFtIG9wdGlvbnMgRGVmaW5lcyB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhl
IGVuZ2luZSB0byBjcmVhdGUgdGhlIEdQVSBjb250ZXh0IGRlcGVuZGVuY2llcworICAgICAqLwor
ICAgIGZ1bmN0aW9uIFdlYkdQVUVuZ2luZShjYW52YXMsIG9wdGlvbnMpIHsKKyAgICAgICAgaWYg
KG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH0KKyAgICAgICAgdmFyIF90aGlz
ID0gX3N1cGVyLmNhbGwodGhpcywgbnVsbCkgfHwgdGhpczsKKyAgICAgICAgLy8gUGFnZSBMaWZl
IGN5Y2xlIGFuZCBjb25zdGFudHMKKyAgICAgICAgX3RoaXMuX3VwbG9hZEVuY29kZXJEZXNjcmlw
dG9yID0geyBsYWJlbDogInVwbG9hZCIgfTsKKyAgICAgICAgX3RoaXMuX3JlbmRlckVuY29kZXJE
ZXNjcmlwdG9yID0geyBsYWJlbDogInJlbmRlciIgfTsKKyAgICAgICAgX3RoaXMuX2NsZWFyRGVw
dGhWYWx1ZSA9IDE7CisgICAgICAgIF90aGlzLl9jbGVhclN0ZW5jaWxWYWx1ZSA9IDA7CisgICAg
ICAgIF90aGlzLl9kZWZhdWx0U2FtcGxlQ291bnQgPSA0OyAvLyBPbmx5IHN1cHBvcnRlZCB2YWx1
ZSBmb3Igbm93LgorICAgICAgICBfdGhpcy5fc2hhZGVyYyA9IG51bGw7CisgICAgICAgIF90aGlz
Ll9jb21tYW5kQnVmZmVycyA9IFtudWxsLCBudWxsXTsKKyAgICAgICAgLy8gRnJhbWUgQnVmZmVy
IExpZmUgQ3ljbGUgKHJlY3JlYXRlZCBmb3IgZWFjaCByZW5kZXIgdGFyZ2V0IHBhc3MpCisgICAg
ICAgIF90aGlzLl9jdXJyZW50UmVuZGVyUGFzcyA9IG51bGw7CisgICAgICAgIC8vIERyYXdDYWxs
IExpZmUgQ3ljbGUKKyAgICAgICAgLy8gRWZmZWN0IGlzIG9uIHRoZSBwYXJlbnQgY2xhc3MKKyAg
ICAgICAgLy8gcHJvdGVjdGVkIF9jdXJyZW50RWZmZWN0OiBOdWxsYWJsZTxFZmZlY3Q+ID0gbnVs
bDsKKyAgICAgICAgX3RoaXMuX2N1cnJlbnRWZXJ0ZXhCdWZmZXJzID0gbnVsbDsKKyAgICAgICAg
X3RoaXMuX2N1cnJlbnRJbmRleEJ1ZmZlciA9IG51bGw7CisgICAgICAgIF90aGlzLl9fY29sb3JX
cml0ZSA9IHRydWU7CisgICAgICAgIF90aGlzLl91bmlmb3Jtc0J1ZmZlcnMgPSB7fTsKKyAgICAg
ICAgLy8gQ2FjaGVzCisgICAgICAgIF90aGlzLl9jb21waWxlZFNoYWRlcnMgPSB7fTsKKyAgICAg
ICAgLy8gVE9ETyBXRUJHUFUuIFRleHR1cmUgTWFuYWdlbWVudC4gVGVtcG9yYXJ5Li4uCisgICAg
ICAgIF90aGlzLl9kZWNvZGVDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMi
KTsKKyAgICAgICAgX3RoaXMuX2RlY29kZUVuZ2luZSA9IG5ldyBfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0oX3RoaXMuX2RlY29kZUNhbnZhcywg
ZmFsc2UsIHsKKyAgICAgICAgICAgIGFscGhhOiB0cnVlLAorICAgICAgICAgICAgcHJlbXVsdGlw
bGllZEFscGhhOiBmYWxzZSwKKyAgICAgICAgfSwgZmFsc2UpOworICAgICAgICBfdGhpcy5fZnJl
ZXplQ29tbWFuZHMgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2Zyb3plbkNvbW1hbmRzID0gbnVs
bDsKKyAgICAgICAgb3B0aW9ucy5kZXZpY2VEZXNjcmlwdG9yID0gb3B0aW9ucy5kZXZpY2VEZXNj
cmlwdG9yIHx8IHt9OworICAgICAgICBvcHRpb25zLnN3YXBDaGFpbkZvcm1hdCA9IG9wdGlvbnMu
c3dhcENoYWluRm9ybWF0IHx8IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVRleHR1cmVGb3JtYXRfYmdyYTh1
bm9ybTsKKyAgICAgICAgb3B0aW9ucy5hbnRpYWxpYXNpbmcgPSBvcHRpb25zLmFudGlhbGlhc2lu
ZyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuYW50aWFsaWFzaW5nOworICAgICAgICBf
dGhpcy5fZGVjb2RlRW5naW5lLmdldENhcHMoKS50ZXh0dXJlRmxvYXQgPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuX2RlY29kZUVuZ2luZS5nZXRDYXBzKCkudGV4dHVyZUZsb2F0UmVuZGVyID0gZmFs
c2U7CisgICAgICAgIF90aGlzLl9kZWNvZGVFbmdpbmUuZ2V0Q2FwcygpLnRleHR1cmVIYWxmRmxv
YXQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2RlY29kZUVuZ2luZS5nZXRDYXBzKCkudGV4dHVy
ZUhhbGZGbG9hdFJlbmRlciA9IGZhbHNlOworICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uTG9nKCJCYWJ5bG9uLmpzIHYiICsgX0VuZ2lu
ZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdLlZlcnNpb24g
KyAiIC0gV2ViR1BVIGVuZ2luZSIpOworICAgICAgICBpZiAoIW5hdmlnYXRvci5ncHUpIHsKKyAg
ICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dn
ZXIiXS5FcnJvcigiV2ViR1BVIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLiIpOwor
ICAgICAgICAgICAgcmV0dXJuIF90aGlzOworICAgICAgICB9CisgICAgICAgIF90aGlzLl9pc1dl
YkdQVSA9IHRydWU7CisgICAgICAgIF90aGlzLl9zaGFkZXJQbGF0Zm9ybU5hbWUgPSAiV0VCR1BV
IjsKKyAgICAgICAgaWYgKG9wdGlvbnMuZGV0ZXJtaW5pc3RpY0xvY2tzdGVwID09PSB1bmRlZmlu
ZWQpIHsKKyAgICAgICAgICAgIG9wdGlvbnMuZGV0ZXJtaW5pc3RpY0xvY2tzdGVwID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdGlvbnMubG9ja3N0ZXBNYXhTdGVwcyA9PT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICBvcHRpb25zLmxvY2tzdGVwTWF4U3RlcHMgPSA0OworICAg
ICAgICB9CisgICAgICAgIGlmIChvcHRpb25zLmF1ZGlvRW5naW5lID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIG9wdGlvbnMuYXVkaW9FbmdpbmUgPSB0cnVlOworICAgICAgICB9CisgICAg
ICAgIF90aGlzLl9kZXRlcm1pbmlzdGljTG9ja3N0ZXAgPSBvcHRpb25zLmRldGVybWluaXN0aWNM
b2Nrc3RlcDsKKyAgICAgICAgX3RoaXMuX2xvY2tzdGVwTWF4U3RlcHMgPSBvcHRpb25zLmxvY2tz
dGVwTWF4U3RlcHM7CisgICAgICAgIF90aGlzLl9kb05vdEhhbmRsZUNvbnRleHRMb3N0ID0gdHJ1
ZTsKKyAgICAgICAgX3RoaXMuX2NhbnZhcyA9IGNhbnZhczsKKyAgICAgICAgX3RoaXMuX29wdGlv
bnMgPSBvcHRpb25zOworICAgICAgICBfdGhpcy5faGFyZHdhcmVTY2FsaW5nTGV2ZWwgPSAxOwor
ICAgICAgICBfdGhpcy5fbWFpblBhc3NTYW1wbGVDb3VudCA9IG9wdGlvbnMuYW50aWFsaWFzaW5n
ID8gX3RoaXMuX2RlZmF1bHRTYW1wbGVDb3VudCA6IDE7CisgICAgICAgIF90aGlzLl9zaGFyZWRJ
bml0KGNhbnZhcywgISFvcHRpb25zLmRvTm90SGFuZGxlVG91Y2hBY3Rpb24sIG9wdGlvbnMuYXVk
aW9FbmdpbmUpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShXZWJHUFVFbmdpbmUucHJvdG90eXBlLCAic3VwcG9ydHNVbmlmb3JtQnVmZmVy
cyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRpbmcg
dGhhdCB0aGUgZW5naW5lIHN1cHBvcnRzIHVuaWZvcm0gYnVmZmVycworICAgICAgICAgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy93ZWJnbDIjdW5pZm9ybS1idWZmZXIt
b2JqZXRzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6YXRp
b24KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8qKgorICAgICAqIEluaXRpYWxp
emVzIHRoZSBXZWJHUFUgY29udGV4dCBhbmQgZGVwZW5kZW5jaWVzLgorICAgICAqIEBwYXJhbSBz
aGFkZXJjT3B0aW9ucyBEZWZpbmVzIHRoZSBTaGFkZXJDIGNvbXBpbGVyIG9wdGlvbnMgaWYgbmVj
ZXNzYXJ5CisgICAgICogQHJldHVybnMgYSBwcm9taXNlIG5vdGlmeWluZyB0aGUgcmVhZGluZXNz
IG9mIHRoZSBlbmdpbmUuCisgICAgICovCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5pbml0
QXN5bmMgPSBmdW5jdGlvbiAoc2hhZGVyY09wdGlvbnMpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRTaGFkZXJjKHNoYWRlcmNPcHRpb25zKQor
ICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHNoYWRlcmMpIHsKKyAgICAgICAgICAgIF90aGlz
Ll9zaGFkZXJjID0gc2hhZGVyYzsKKyAgICAgICAgICAgIHJldHVybiBuYXZpZ2F0b3IuZ3B1LnJl
cXVlc3RBZGFwdGVyKF90aGlzLl9vcHRpb25zKTsKKyAgICAgICAgfSkKKyAgICAgICAgICAgIC50
aGVuKGZ1bmN0aW9uIChhZGFwdGVyKSB7CisgICAgICAgICAgICBfdGhpcy5fYWRhcHRlciA9IGFk
YXB0ZXI7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2FkYXB0ZXIucmVxdWVzdERldmljZShf
dGhpcy5fb3B0aW9ucy5kZXZpY2VEZXNjcmlwdG9yKTsKKyAgICAgICAgfSkKKyAgICAgICAgICAg
IC50aGVuKGZ1bmN0aW9uIChkZXZpY2UpIHsgcmV0dXJuIF90aGlzLl9kZXZpY2UgPSBkZXZpY2U7
IH0pCisgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5f
aW5pdGlhbGl6ZUxpbWl0cygpOworICAgICAgICAgICAgX3RoaXMuX2luaXRpYWxpemVDb250ZXh0
QW5kU3dhcENoYWluKCk7CisgICAgICAgICAgICAvLyB0aGlzLl9pbml0aWFsaXplTWFpbkF0dGFj
aG1lbnRzKCk7CisgICAgICAgICAgICAvLyBJbml0aWFsaXphdGlvbiBpcyBpbiB0aGUgcmVzaXpl
IDotKQorICAgICAgICAgICAgX3RoaXMucmVzaXplKCk7CisgICAgICAgIH0pCisgICAgICAgICAg
ICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJvcigiQ2FuIG5vdCBjcmVhdGUgV2Vi
R1BVIERldmljZSBhbmQvb3IgY29udGV4dC4iKTsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJvcihlKTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9pbml0U2hhZGVyYyA9IGZ1
bmN0aW9uIChzaGFkZXJjT3B0aW9ucykgeworICAgICAgICBzaGFkZXJjT3B0aW9ucyA9IHNoYWRl
cmNPcHRpb25zIHx8IHt9OworICAgICAgICBzaGFkZXJjT3B0aW9ucyA9IHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXNzaWduIl0oe30sIFdlYkdQVUVuZ2luZS5fc2hhZGVy
Y0RlZmF1bHRPcHRpb25zLCBzaGFkZXJjT3B0aW9ucyk7CisgICAgICAgIGlmIChzaGFkZXJjT3B0
aW9ucy5zaGFkZXJjKSB7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNoYWRl
cmNPcHRpb25zLnNoYWRlcmMpOworICAgICAgICB9CisgICAgICAgIHZhciB3YXNtT3B0aW9ucyA9
IHsKKyAgICAgICAgICAgIHdhc21CaW5hcnlGaWxlOiBzaGFkZXJjT3B0aW9ucy53YXNtUGF0aAor
ICAgICAgICB9OworICAgICAgICBpZiAod2luZG93LlNoYWRlcmMpIHsKKyAgICAgICAgICAgIHJl
dHVybiB3aW5kb3cuU2hhZGVyYyh3YXNtT3B0aW9ucyk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHNoYWRlcmNPcHRpb25zLmpzUGF0aCAmJiBzaGFkZXJjT3B0aW9ucy53YXNtUGF0aCkgeworICAg
ICAgICAgICAgcmV0dXJuIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9f
WyJUb29scyJdLkxvYWRTY3JpcHRBc3luYyhzaGFkZXJjT3B0aW9ucy5qc1BhdGgpCisgICAgICAg
ICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB3aW5k
b3cuU2hhZGVyYyh3YXNtT3B0aW9ucyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoInNoYWRlcmMgaXMgbm90IGF2YWlsYWJsZS4iKTsK
KyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2luaXRpYWxpemVMaW1pdHMgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIC8vIEluaXQgY2FwcworICAgICAgICAvLyBUT0RPIFdFQkdQ
VSBSZWFsIENhcGFiaWxpdHkgY2hlY2sgb25jZSBsaW1pdHMgd2lsbCBiZSB3b3JraW5nLgorICAg
ICAgICB0aGlzLl9jYXBzID0gbmV3IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJFbmdpbmVDYXBhYmlsaXRpZXMiXSgpOworICAgICAgICB0aGlzLl9jYXBzLm1h
eFRleHR1cmVzSW1hZ2VVbml0cyA9IDE2OworICAgICAgICB0aGlzLl9jYXBzLm1heFZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzID0gMTY7CisgICAgICAgIHRoaXMuX2NhcHMubWF4VGV4dHVyZVNpemUg
PSAyMDQ4OworICAgICAgICB0aGlzLl9jYXBzLm1heEN1YmVtYXBUZXh0dXJlU2l6ZSA9IDIwNDg7
CisgICAgICAgIHRoaXMuX2NhcHMubWF4UmVuZGVyVGV4dHVyZVNpemUgPSAyMDQ4OworICAgICAg
ICB0aGlzLl9jYXBzLm1heFZlcnRleEF0dHJpYnMgPSAxNjsKKyAgICAgICAgdGhpcy5fY2Fwcy5t
YXhWYXJ5aW5nVmVjdG9ycyA9IDE2OworICAgICAgICB0aGlzLl9jYXBzLm1heEZyYWdtZW50VW5p
Zm9ybVZlY3RvcnMgPSAxMDI0OworICAgICAgICB0aGlzLl9jYXBzLm1heFZlcnRleFVuaWZvcm1W
ZWN0b3JzID0gMTAyNDsKKyAgICAgICAgLy8gRXh0ZW5zaW9ucworICAgICAgICB0aGlzLl9jYXBz
LnN0YW5kYXJkRGVyaXZhdGl2ZXMgPSB0cnVlOworICAgICAgICB0aGlzLl9jYXBzLmFzdGMgPSBu
dWxsOworICAgICAgICB0aGlzLl9jYXBzLnMzdGMgPSBudWxsOworICAgICAgICB0aGlzLl9jYXBz
LnB2cnRjID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2Fwcy5ldGMxID0gbnVsbDsKKyAgICAgICAg
dGhpcy5fY2Fwcy5ldGMyID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2Fwcy50ZXh0dXJlQW5pc290
cm9waWNGaWx0ZXJFeHRlbnNpb24gPSBudWxsOworICAgICAgICB0aGlzLl9jYXBzLm1heEFuaXNv
dHJvcHkgPSAwOworICAgICAgICB0aGlzLl9jYXBzLnVpbnRJbmRpY2VzID0gdHJ1ZTsKKyAgICAg
ICAgdGhpcy5fY2Fwcy5mcmFnbWVudERlcHRoU3VwcG9ydGVkID0gZmFsc2U7CisgICAgICAgIHRo
aXMuX2NhcHMuaGlnaFByZWNpc2lvblNoYWRlclN1cHBvcnRlZCA9IHRydWU7CisgICAgICAgIHRo
aXMuX2NhcHMuY29sb3JCdWZmZXJGbG9hdCA9IHRydWU7CisgICAgICAgIHRoaXMuX2NhcHMudGV4
dHVyZUZsb2F0ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NhcHMudGV4dHVyZUZsb2F0TGluZWFy
RmlsdGVyaW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NhcHMudGV4dHVyZUZsb2F0UmVuZGVy
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NhcHMudGV4dHVyZUhhbGZGbG9hdCA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl9jYXBzLnRleHR1cmVIYWxmRmxvYXRMaW5lYXJGaWx0ZXJpbmcgPSBmYWxz
ZTsKKyAgICAgICAgdGhpcy5fY2Fwcy50ZXh0dXJlSGFsZkZsb2F0UmVuZGVyID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMuX2NhcHMudGV4dHVyZUxPRCA9IHRydWU7CisgICAgICAgIHRoaXMuX2NhcHMu
ZHJhd0J1ZmZlcnNFeHRlbnNpb24gPSB0cnVlOworICAgICAgICB0aGlzLl9jYXBzLmRlcHRoVGV4
dHVyZUV4dGVuc2lvbiA9IHRydWU7CisgICAgICAgIHRoaXMuX2NhcHMudmVydGV4QXJyYXlPYmpl
Y3QgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY2Fwcy5pbnN0YW5jZWRBcnJheXMgPSB0cnVlOwor
ICAgICAgICB0aGlzLl9jYXBzLnBhcmFsbGVsU2hhZGVyQ29tcGlsZSA9IG51bGw7CisgICAgfTsK
KyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9pbml0aWFsaXplQ29udGV4dEFuZFN3YXBDaGFp
biA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fY29udGV4dCA9IHRoaXMuX2NhbnZhcy5n
ZXRDb250ZXh0KCdncHUnKTsKKyAgICAgICAgdGhpcy5fc3dhcENoYWluID0gdGhpcy5fY29udGV4
dC5jb25maWd1cmVTd2FwQ2hhaW4oeworICAgICAgICAgICAgZGV2aWNlOiB0aGlzLl9kZXZpY2Us
CisgICAgICAgICAgICBmb3JtYXQ6IHRoaXMuX29wdGlvbnMuc3dhcENoYWluRm9ybWF0LAorICAg
ICAgICAgICAgdXNhZ2U6IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVRleHR1cmVVc2FnZV9PVVRQVVRfQVRU
QUNITUVOVCB8IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVRleHR1cmVVc2FnZV9DT1BZX1NSQywKKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgYXMgV2ViR0wgd2l0aCBk
ZXB0aCBhbmQgc3RlbmNpbCBhdHRhY2htZW50IGZvciB0aGUgYnJvYWRlc3QgQ29tcGF0LgorICAg
IFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2luaXRpYWxpemVNYWluQXR0YWNobWVudHMgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRoaXMuX21haW5UZXh0dXJlRXh0ZW5kcyA9IHsKKyAgICAgICAg
ICAgIHdpZHRoOiB0aGlzLmdldFJlbmRlcldpZHRoKCksCisgICAgICAgICAgICBoZWlnaHQ6IHRo
aXMuZ2V0UmVuZGVySGVpZ2h0KCksCisgICAgICAgICAgICBkZXB0aDogMQorICAgICAgICB9Owor
ICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5hbnRpYWxpYXNpbmcpIHsKKyAgICAgICAgICAgIHZh
ciBtYWluVGV4dHVyZURlc2NyaXB0b3IgPSB7CisgICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5f
bWFpblRleHR1cmVFeHRlbmRzLAorICAgICAgICAgICAgICAgIGFycmF5TGF5ZXJDb3VudDogMSwK
KyAgICAgICAgICAgICAgICBtaXBMZXZlbENvdW50OiAxLAorICAgICAgICAgICAgICAgIHNhbXBs
ZUNvdW50OiB0aGlzLl9tYWluUGFzc1NhbXBsZUNvdW50LAorICAgICAgICAgICAgICAgIGRpbWVu
c2lvbjogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVGV4dHVyZURpbWVuc2lvbl8yZCwKKyAgICAgICAgICAg
ICAgICBmb3JtYXQ6IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVRleHR1cmVGb3JtYXRfYmdyYTh1bm9ybSwK
KyAgICAgICAgICAgICAgICB1c2FnZTogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVGV4dHVyZVVzYWdlX09V
VFBVVF9BVFRBQ0hNRU5ULAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9t
YWluVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX21haW5UZXh0dXJlLmRlc3Ryb3ko
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX21haW5UZXh0dXJlID0gdGhpcy5f
ZGV2aWNlLmNyZWF0ZVRleHR1cmUobWFpblRleHR1cmVEZXNjcmlwdG9yKTsKKyAgICAgICAgICAg
IHRoaXMuX21haW5Db2xvckF0dGFjaG1lbnRzID0gW3sKKyAgICAgICAgICAgICAgICAgICAgYXR0
YWNobWVudDogdGhpcy5fbWFpblRleHR1cmUuY3JlYXRlVmlldygpLAorICAgICAgICAgICAgICAg
ICAgICBsb2FkVmFsdWU6IG5ldyBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJDb2xvcjQiXSgwLCAwLCAwLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgbG9hZE9wOiAi
Y2xlYXIiLAorICAgICAgICAgICAgICAgICAgICBjbGVhckNvbG9yOiBuZXcgX01hdGhzX21hdGhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29sb3I0Il0oMCwgMCwgMCwgMSksCisgICAg
ICAgICAgICAgICAgICAgIHN0b3JlT3A6IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0b3JlT3Bfc3RvcmUK
KyAgICAgICAgICAgICAgICB9XTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHRoaXMuX21haW5Db2xvckF0dGFjaG1lbnRzID0gW3sKKyAgICAgICAgICAgICAgICAgICAg
YXR0YWNobWVudDogdGhpcy5fc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCkuY3JlYXRlRGVm
YXVsdFZpZXcoKSwKKyAgICAgICAgICAgICAgICAgICAgbG9hZFZhbHVlOiBuZXcgX01hdGhzX21h
dGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29sb3I0Il0oMCwgMCwgMCwgMSksCisg
ICAgICAgICAgICAgICAgICAgIGxvYWRPcDogImNsZWFyIiwKKyAgICAgICAgICAgICAgICAgICAg
Y2xlYXJDb2xvcjogbmV3IF9NYXRoc19tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IkNvbG9yNCJdKDAsIDAsIDAsIDEpLAorICAgICAgICAgICAgICAgICAgICBzdG9yZU9wOiBfV2Vi
R1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVD
b25zdGFudHMiXS5HUFVTdG9yZU9wX3N0b3JlCisgICAgICAgICAgICAgICAgfV07CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGRlcHRoVGV4dHVyZURlc2NyaXB0b3IgPSB7CisgICAgICAgICAgICBz
aXplOiB0aGlzLl9tYWluVGV4dHVyZUV4dGVuZHMsCisgICAgICAgICAgICBhcnJheUxheWVyQ291
bnQ6IDEsCisgICAgICAgICAgICBtaXBMZXZlbENvdW50OiAxLAorICAgICAgICAgICAgc2FtcGxl
Q291bnQ6IHRoaXMuX21haW5QYXNzU2FtcGxlQ291bnQsCisgICAgICAgICAgICBkaW1lbnNpb246
IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldl
YkdQVUNvbnN0YW50cyJdLkdQVVRleHR1cmVEaW1lbnNpb25fMmQsCisgICAgICAgICAgICBmb3Jt
YXQ6ICJkZXB0aDMyZmxvYXQtc3RlbmNpbDgiLAorICAgICAgICAgICAgdXNhZ2U6IF9XZWJHUFVf
d2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0
YW50cyJdLkdQVVRleHR1cmVVc2FnZV9PVVRQVVRfQVRUQUNITUVOVAorICAgICAgICB9OworICAg
ICAgICBpZiAodGhpcy5fZGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9kZXB0aFRl
eHR1cmUuZGVzdHJveSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2RlcHRoVGV4dHVyZSA9
IHRoaXMuX2RldmljZS5jcmVhdGVUZXh0dXJlKGRlcHRoVGV4dHVyZURlc2NyaXB0b3IpOworICAg
ICAgICB0aGlzLl9tYWluRGVwdGhBdHRhY2htZW50ID0geworICAgICAgICAgICAgYXR0YWNobWVu
dDogdGhpcy5fZGVwdGhUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCksCisgICAgICAgICAgICBk
ZXB0aExvYWRWYWx1ZTogdGhpcy5fY2xlYXJEZXB0aFZhbHVlLAorICAgICAgICAgICAgZGVwdGhM
b2FkT3A6ICJjbGVhciIsCisgICAgICAgICAgICBjbGVhckRlcHRoOiB0aGlzLl9jbGVhckRlcHRo
VmFsdWUsCisgICAgICAgICAgICBkZXB0aFN0b3JlT3A6IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0b3Jl
T3Bfc3RvcmUsCisgICAgICAgICAgICBzdGVuY2lsTG9hZFZhbHVlOiB0aGlzLl9jbGVhclN0ZW5j
aWxWYWx1ZSwKKyAgICAgICAgICAgIHN0ZW5jaWxMb2FkT3A6ICJjbGVhciIsCisgICAgICAgICAg
ICBjbGVhclN0ZW5jaWw6IHRoaXMuX2NsZWFyU3RlbmNpbFZhbHVlLAorICAgICAgICAgICAgc3Rl
bmNpbFN0b3JlT3A6IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0b3JlT3Bfc3RvcmUsCisgICAgICAgIH07
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc2hhZGVyIHByb2Nlc3NvciBpbXBsZW1l
bnRhdGlvbiBmaXR0aW5nIHdpdGggdGhlIGN1cnJlbnQgZW5naW5lIHR5cGUuCisgICAgICogQHJl
dHVybnMgVGhlIHNoYWRlciBwcm9jZXNzb3IgaW1wbGVtZW50YXRpb24uCisgICAgICovCisgICAg
V2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZ2V0U2hhZGVyUHJvY2Vzc29yID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gbmV3IF9XZWJHUFVfd2ViZ3B1U2hhZGVyUHJvY2Vzc29yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siV2ViR1BVU2hhZGVyUHJvY2Vzc29yIl0oKTsKKyAg
ICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZ2V0
U2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBu
ZXcgX1dlYkdQVV93ZWJncHVTaGFkZXJQcm9jZXNzaW5nQ29udGV4dF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTRfX1siV2ViR1BVU2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQiXSgpOworICAgIH07
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhdGljIFBpcGVsaW5lIFdlYkdQVSBTdGF0ZXMKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUud2lwZUNhY2hlcyA9IGZ1bmN0aW9u
IChicnV0ZUZvcmNlKSB7CisgICAgICAgIGlmICh0aGlzLnByZXZlbnRDYWNoZVdpcGVCZXR3ZWVu
RnJhbWVzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5y
ZXNldFRleHR1cmVDYWNoZSgpOworICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0ID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fY3VycmVudEluZGV4QnVmZmVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
Y3VycmVudFZlcnRleEJ1ZmZlcnMgPSBudWxsOworICAgICAgICBpZiAoYnJ1dGVGb3JjZSkgewor
ICAgICAgICAgICAgdGhpcy5fY3VycmVudFByb2dyYW0gPSBudWxsOworICAgICAgICAgICAgdGhp
cy5fc3RlbmNpbFN0YXRlLnJlc2V0KCk7CisgICAgICAgICAgICB0aGlzLl9kZXB0aEN1bGxpbmdT
dGF0ZS5yZXNldCgpOworICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5yZXNldCgpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2NhY2hlZFZlcnRleEJ1ZmZlcnMgPSBudWxsOworICAgICAg
ICB0aGlzLl9jYWNoZWRJbmRleEJ1ZmZlciA9IG51bGw7CisgICAgICAgIHRoaXMuX2NhY2hlZEVm
ZmVjdEZvclZlcnRleEJ1ZmZlcnMgPSBudWxsOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnBy
b3RvdHlwZS5zZXRDb2xvcldyaXRlID0gZnVuY3Rpb24gKGVuYWJsZSkgeworICAgICAgICB0aGlz
Ll9fY29sb3JXcml0ZSA9IGVuYWJsZTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5
cGUuZ2V0Q29sb3JXcml0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX19j
b2xvcldyaXRlOworICAgIH07CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWMgV2ViR1BVIFN0YXRlcworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fdmlld3Bv
cnQgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCkgeworICAgICAgICAvLyBUT0RPIFdF
QkdQVS4gQ2FjaGUuCisgICAgICAgIC8vIGlmICh4ICE9PSB0aGlzLl92aWV3cG9ydENhY2hlZC54
IHx8CisgICAgICAgIC8vICAgICB5ICE9PSB0aGlzLl92aWV3cG9ydENhY2hlZC55IHx8CisgICAg
ICAgIC8vICAgICB3aWR0aCAhPT0gdGhpcy5fdmlld3BvcnRDYWNoZWQueiB8fAorICAgICAgICAv
LyAgICAgaGVpZ2h0ICE9PSB0aGlzLl92aWV3cG9ydENhY2hlZC53KSB7CisgICAgICAgIC8vICAg
ICB0aGlzLl92aWV3cG9ydENhY2hlZC54ID0geDsKKyAgICAgICAgLy8gICAgIHRoaXMuX3ZpZXdw
b3J0Q2FjaGVkLnkgPSB5OworICAgICAgICAvLyAgICAgdGhpcy5fdmlld3BvcnRDYWNoZWQueiA9
IHdpZHRoOworICAgICAgICAvLyAgICAgdGhpcy5fdmlld3BvcnRDYWNoZWQudyA9IGhlaWdodDsK
KyAgICAgICAgLy8gICAgIHRoaXMuX2dsLnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICAvLyB9CisgICAgICAgIGlmICghdGhpcy5fY3VycmVudFJlbmRlclBhc3MpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3N0YXJ0TWFpblJlbmRlclBhc3MoKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBUT0RPIFdFQkdQVS4gVmlld3BvcnQuCisgICAgICAgIC8vIFVzZSAwIDEgbGlrZSB0aGUg
ZGVmYXVsdCB3ZWJnbCB2YWx1ZXMuCisgICAgICAgIC8vIHRoaXMuX2N1cnJlbnRSZW5kZXJQYXNz
IS5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCAwLCAxKTsKKyAgICB9OworICAgIFdl
YkdQVUVuZ2luZS5wcm90b3R5cGUuZW5hYmxlU2Npc3NvciA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0
aCwgaGVpZ2h0KSB7CisgICAgICAgIGlmICghdGhpcy5fY3VycmVudFJlbmRlclBhc3MpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3N0YXJ0TWFpblJlbmRlclBhc3MoKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9jdXJyZW50UmVuZGVyUGFzcy5zZXRTY2lzc29yUmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuZGlzYWJsZVNjaXNzb3Ig
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fY3VycmVudFJlbmRlclBhc3MpIHsK
KyAgICAgICAgICAgIHRoaXMuX3N0YXJ0TWFpblJlbmRlclBhc3MoKTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9jdXJyZW50UmVuZGVyUGFzcy5zZXRTY2lzc29yUmVjdCgwLCAwLCB0aGlzLmdl
dFJlbmRlcldpZHRoKCksIHRoaXMuZ2V0UmVuZGVySGVpZ2h0KCkpOworICAgIH07CisgICAgV2Vi
R1BVRW5naW5lLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIChjb2xvciwgYmFja0J1ZmZlciwg
ZGVwdGgsIHN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKHN0ZW5jaWwgPT09IHZvaWQgMCkgeyBzdGVu
Y2lsID0gZmFsc2U7IH0KKyAgICAgICAgLy8gU29tZSBQR3MgYXJlIHVzaW5nIGNvbG9yMy4uLgor
ICAgICAgICBpZiAoY29sb3IuYSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBjb2xvci5h
ID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmFja0J1ZmZlcikgeworICAgICAgICAgICAg
dGhpcy5fbWFpbkNvbG9yQXR0YWNobWVudHNbMF0ubG9hZFZhbHVlID0gY29sb3I7CisgICAgICAg
ICAgICB0aGlzLl9tYWluQ29sb3JBdHRhY2htZW50c1swXS5sb2FkT3AgPSAiY2xlYXIiOworICAg
ICAgICAgICAgdGhpcy5fbWFpbkNvbG9yQXR0YWNobWVudHNbMF0uY2xlYXJDb2xvciA9IGNvbG9y
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5fbWFpbkNvbG9yQXR0YWNobWVu
dHNbMF0ubG9hZFZhbHVlID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVTG9hZE9wX2xvYWQ7CisgICAgICAg
ICAgICB0aGlzLl9tYWluQ29sb3JBdHRhY2htZW50c1swXS5sb2FkT3AgPSBfV2ViR1BVX3dlYmdw
dUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMi
XS5HUFVMb2FkT3BfbG9hZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVwdGgpIHsKKyAgICAg
ICAgICAgIHRoaXMuX21haW5EZXB0aEF0dGFjaG1lbnQuZGVwdGhMb2FkVmFsdWUgPSB0aGlzLl9j
bGVhckRlcHRoVmFsdWU7CisgICAgICAgICAgICB0aGlzLl9tYWluRGVwdGhBdHRhY2htZW50LmRl
cHRoTG9hZE9wID0gImNsZWFyIjsKKyAgICAgICAgICAgIHRoaXMuX21haW5EZXB0aEF0dGFjaG1l
bnQuY2xlYXJEZXB0aCA9IHRoaXMuX2NsZWFyRGVwdGhWYWx1ZTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHRoaXMuX21haW5EZXB0aEF0dGFjaG1lbnQuZGVwdGhMb2FkVmFsdWUgPSBf
V2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJH
UFVDb25zdGFudHMiXS5HUFVMb2FkT3BfbG9hZDsKKyAgICAgICAgICAgIHRoaXMuX21haW5EZXB0
aEF0dGFjaG1lbnQuZGVwdGhMb2FkT3AgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVMb2FkT3BfbG9hZDsK
KyAgICAgICAgICAgIHRoaXMuX21haW5EZXB0aEF0dGFjaG1lbnQuY2xlYXJEZXB0aCA9IDA7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHN0ZW5jaWwpIHsKKyAgICAgICAgICAgIHRoaXMuX21haW5E
ZXB0aEF0dGFjaG1lbnQuc3RlbmNpbExvYWRWYWx1ZSA9IHRoaXMuX2NsZWFyU3RlbmNpbFZhbHVl
OworICAgICAgICAgICAgdGhpcy5fbWFpbkRlcHRoQXR0YWNobWVudC5zdGVuY2lsTG9hZE9wID0g
ImNsZWFyIjsKKyAgICAgICAgICAgIHRoaXMuX21haW5EZXB0aEF0dGFjaG1lbnQuY2xlYXJTdGVu
Y2lsID0gdGhpcy5fY2xlYXJTdGVuY2lsVmFsdWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLl9tYWluRGVwdGhBdHRhY2htZW50LnN0ZW5jaWxMb2FkVmFsdWUgPSBfV2ViR1BV
X3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25z
dGFudHMiXS5HUFVMb2FkT3BfbG9hZDsKKyAgICAgICAgICAgIHRoaXMuX21haW5EZXB0aEF0dGFj
aG1lbnQuc3RlbmNpbExvYWRPcCA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUxvYWRPcF9sb2FkOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX3N0YXJ0TWFpblJlbmRlclBhc3MoKTsKKyAgICB9OworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJHUFUgQnVmZmVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgV2Vi
R1BVRW5naW5lLnByb3RvdHlwZS5fY3JlYXRlQnVmZmVyID0gZnVuY3Rpb24gKHZpZXcsIGZsYWdz
KSB7CisgICAgICAgIHZhciBwYWRkaW5nID0gdmlldy5ieXRlTGVuZ3RoICUgNDsKKyAgICAgICAg
dmFyIHZlcnRpY2VzQnVmZmVyRGVzY3JpcHRvciA9IHsKKyAgICAgICAgICAgIHNpemU6IHZpZXcu
Ynl0ZUxlbmd0aCArIHBhZGRpbmcsCisgICAgICAgICAgICB1c2FnZTogZmxhZ3MKKyAgICAgICAg
fTsKKyAgICAgICAgdmFyIFtidWZmZXIsIGFycl0gPSB0aGlzLl9kZXZpY2UuY3JlYXRlQnVmZmVy
TWFwcGVkKHZlcnRpY2VzQnVmZmVyRGVzY3JpcHRvcik7CisgICAgICAgIHZhciB1aW50OFZpZXcg
PSBuZXcgVWludDhBcnJheSh2aWV3LmJ1ZmZlciwgdmlldy5ieXRlT2Zmc2V0KTsKKyAgICAgICAg
dmFyIHVpbnQ4QXJyID0gbmV3IFVpbnQ4QXJyYXkoYXJyKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB1aW50OFZpZXcubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB1aW50OEFycltpXSA9
IHVpbnQ4Vmlld1tpXTsKKyAgICAgICAgYnVmZmVyLnVubWFwKCk7CisgICAgICAgIHZhciBkYXRh
QnVmZmVyID0gbmV3IF9NZXNoZXNfV2ViR1BVX3dlYmdwdURhdGFCdWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEyX19bIldlYkdQVURhdGFCdWZmZXIiXShidWZmZXIpOworICAgICAgICBk
YXRhQnVmZmVyLnJlZmVyZW5jZXMgPSAxOworICAgICAgICBkYXRhQnVmZmVyLmNhcGFjaXR5ID0g
dmlldy5ieXRlTGVuZ3RoOworICAgICAgICByZXR1cm4gZGF0YUJ1ZmZlcjsKKyAgICB9OworICAg
IFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX3NldFN1YkRhdGEgPSBmdW5jdGlvbiAoZGF0YUJ1ZmZl
ciwgZHN0Qnl0ZU9mZnNldCwgc3JjLCBzcmNCeXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7CisgICAg
ICAgIGlmIChzcmNCeXRlT2Zmc2V0ID09PSB2b2lkIDApIHsgc3JjQnl0ZU9mZnNldCA9IDA7IH0K
KyAgICAgICAgaWYgKGJ5dGVMZW5ndGggPT09IHZvaWQgMCkgeyBieXRlTGVuZ3RoID0gMDsgfQor
ICAgICAgICB2YXIgYnVmZmVyID0gZGF0YUJ1ZmZlci51bmRlcmx5aW5nUmVzb3VyY2U7CisgICAg
ICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHx8IHNyYy5ieXRlTGVuZ3RoOworICAgICAgICBi
eXRlTGVuZ3RoID0gTWF0aC5taW4oYnl0ZUxlbmd0aCwgZGF0YUJ1ZmZlci5jYXBhY2l0eSAtIGRz
dEJ5dGVPZmZzZXQpOworICAgICAgICAvLyBUT0RPIFdFQkdQVS4gRGVwcmVjYXRlZCBzb29uIHRv
IGJlIHJlbW92ZWQuLi4gcmVwbGFjZSBieSBtYXBwZWRCdWZmZXJzCisgICAgICAgIHZhciBidWZm
ZXJEZXNjcmlwdG9yID0geworICAgICAgICAgICAgc2l6ZTogYnl0ZUxlbmd0aCwKKyAgICAgICAg
ICAgIHVzYWdlOiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCdWZmZXJVc2FnZV9NQVBfV1JJVEUgfCBfV2Vi
R1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVD
b25zdGFudHMiXS5HUFVCdWZmZXJVc2FnZV9UUkFOU0ZFUl9TUkMKKyAgICAgICAgfTsKKyAgICAg
ICAgdmFyIFt0ZW1wQnVmZmVyLCBhcnJdID0gdGhpcy5fZGV2aWNlLmNyZWF0ZUJ1ZmZlck1hcHBl
ZChidWZmZXJEZXNjcmlwdG9yKTsKKyAgICAgICAgdmFyIHVpbnQ4U3JjID0gbmV3IFVpbnQ4QXJy
YXkoc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQpOworICAgICAgICB2YXIgdWludDhBcnIgPSBu
ZXcgVWludDhBcnJheShhcnIpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVMZW5n
dGg7ICsraSkKKyAgICAgICAgICAgIHVpbnQ4QXJyW2ldID0gdWludDhTcmNbc3JjQnl0ZU9mZnNl
dCArIGldOworICAgICAgICB0ZW1wQnVmZmVyLnVubWFwKCk7CisgICAgICAgIHZhciBjb21tYW5k
RW5jb2RlciA9IHRoaXMuX2RldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOworICAgICAgICBj
b21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIodGVtcEJ1ZmZlciwgMCwgYnVmZmVyLCBk
c3RCeXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKKyAgICAgICAgdmFyIGNvbW1hbmRCdWZmZXIgPSBj
b21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICAgICAgdGhpcy5fZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisgICAgICAgIHRlbXBCdWZmZXIuZGVzdHJveSgpOwor
ICAgIH07CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZlcnRleC9JbmRleCBCdWZmZXJzCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVZlcnRleEJ1ZmZlciA9
IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIHZhciB2aWV3OworICAgICAgICBpZiAoZGF0YSBp
bnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICB2aWV3ID0gbmV3IEZsb2F0MzJBcnJheShk
YXRhKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlC
dWZmZXIpIHsKKyAgICAgICAgICAgIHZpZXcgPSBuZXcgVWludDhBcnJheShkYXRhKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZpZXcgPSBkYXRhOworICAgICAgICB9
CisgICAgICAgIHZhciBkYXRhQnVmZmVyID0gdGhpcy5fY3JlYXRlQnVmZmVyKHZpZXcsIF9XZWJH
UFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNv
bnN0YW50cyJdLkdQVUJ1ZmZlclVzYWdlX1ZFUlRFWCB8IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJ1ZmZl
clVzYWdlX1RSQU5TRkVSX0RTVCk7CisgICAgICAgIHJldHVybiBkYXRhQnVmZmVyOworICAgIH07
CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5jcmVhdGVEeW5hbWljVmVydGV4QnVmZmVyID0g
ZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVmVydGV4QnVmZmVy
KGRhdGEpOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS51cGRhdGVEeW5hbWlj
VmVydGV4QnVmZmVyID0gZnVuY3Rpb24gKHZlcnRleEJ1ZmZlciwgZGF0YSwgYnl0ZU9mZnNldCwg
Ynl0ZUxlbmd0aCkgeworICAgICAgICB2YXIgZGF0YUJ1ZmZlciA9IHZlcnRleEJ1ZmZlcjsKKyAg
ICAgICAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgYnl0ZU9m
ZnNldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHZpZXc7CisgICAgICAgIGlmIChieXRl
TGVuZ3RoID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2Yg
QXJyYXkpIHsKKyAgICAgICAgICAgICAgICB2aWV3ID0gbmV3IEZsb2F0MzJBcnJheShkYXRhKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJh
eUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIHZpZXcgPSBuZXcgVWludDhBcnJheShkYXRhKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZpZXcg
PSBkYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHZpZXcuYnl0
ZUxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChkYXRh
IGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgICAgICB2aWV3ID0gbmV3IEZsb2F0MzJB
cnJheShkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEgaW5z
dGFuY2VvZiBBcnJheUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIHZpZXcgPSBuZXcgVWludDhB
cnJheShkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIHZpZXcgPSBkYXRhOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRo
aXMuX3NldFN1YkRhdGEoZGF0YUJ1ZmZlciwgYnl0ZU9mZnNldCwgdmlldywgMCwgYnl0ZUxlbmd0
aCk7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZUluZGV4QnVmZmVy
ID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdmFyIGlzMzJCaXRzID0gdHJ1ZTsKKyAgICAg
ICAgdmFyIHZpZXc7CisgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkgfHwg
ZGF0YSBpbnN0YW5jZW9mIEludDMyQXJyYXkpIHsKKyAgICAgICAgICAgIHZpZXcgPSBkYXRhOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkg
eworICAgICAgICAgICAgdmlldyA9IGRhdGE7CisgICAgICAgICAgICBpczMyQml0cyA9IGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3Ro
ID4gNjU1MzUpIHsKKyAgICAgICAgICAgICAgICB2aWV3ID0gbmV3IFVpbnQzMkFycmF5KGRhdGEp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmll
dyA9IG5ldyBVaW50MTZBcnJheShkYXRhKTsKKyAgICAgICAgICAgICAgICBpczMyQml0cyA9IGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBkYXRhQnVmZmVyID0g
dGhpcy5fY3JlYXRlQnVmZmVyKHZpZXcsIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJ1ZmZlclVzYWdlX0lO
REVYIHwgX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQnVmZmVyVXNhZ2VfVFJBTlNGRVJfRFNUKTsKKyAgICAg
ICAgZGF0YUJ1ZmZlci5pczMyQml0cyA9IGlzMzJCaXRzOworICAgICAgICByZXR1cm4gZGF0YUJ1
ZmZlcjsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUudXBkYXRlRHluYW1pY0lu
ZGV4QnVmZmVyID0gZnVuY3Rpb24gKGluZGV4QnVmZmVyLCBpbmRpY2VzLCBvZmZzZXQpIHsKKyAg
ICAgICAgaWYgKG9mZnNldCA9PT0gdm9pZCAwKSB7IG9mZnNldCA9IDA7IH0KKyAgICAgICAgdmFy
IGdwdUJ1ZmZlciA9IGluZGV4QnVmZmVyOworICAgICAgICB2YXIgdmlldzsKKyAgICAgICAgaWYg
KGluZGljZXMgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkgeworICAgICAgICAgICAgaWYgKGluZGV4
QnVmZmVyLmlzMzJCaXRzKSB7CisgICAgICAgICAgICAgICAgdmlldyA9IFVpbnQzMkFycmF5LmZy
b20oaW5kaWNlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2aWV3ID0gaW5kaWNlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChpbmRpY2VzIGluc3RhbmNlb2YgVWludDMyQXJyYXkpIHsKKyAgICAgICAgICAg
IGlmIChpbmRleEJ1ZmZlci5pczMyQml0cykgeworICAgICAgICAgICAgICAgIHZpZXcgPSBpbmRp
Y2VzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
dmlldyA9IFVpbnQxNkFycmF5LmZyb20oaW5kaWNlcyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoaW5kZXhCdWZmZXIuaXMzMkJpdHMp
IHsKKyAgICAgICAgICAgICAgICB2aWV3ID0gbmV3IFVpbnQzMkFycmF5KGluZGljZXMpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmlldyA9IG5l
dyBVaW50MTZBcnJheShpbmRpY2VzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9zZXRTdWJEYXRhKGdwdUJ1ZmZlciwgb2Zmc2V0LCB2aWV3KTsKKyAgICB9OworICAg
IFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuYmluZEJ1ZmZlcnNEaXJlY3RseSA9IGZ1bmN0aW9uICh2
ZXJ0ZXhCdWZmZXIsIGluZGV4QnVmZmVyLCB2ZXJ0ZXhEZWNsYXJhdGlvbiwgdmVydGV4U3RyaWRl
U2l6ZSwgZWZmZWN0KSB7CisgICAgICAgIHRocm93ICJOb3QgaW1wbGVtZW50ZWQgb24gV2ViR1BV
IHNvIGZhci4iOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS51cGRhdGVBbmRC
aW5kSW5zdGFuY2VzQnVmZmVyID0gZnVuY3Rpb24gKGluc3RhbmNlc0J1ZmZlciwgZGF0YSwgb2Zm
c2V0TG9jYXRpb25zKSB7CisgICAgICAgIHRocm93ICJOb3QgaW1wbGVtZW50ZWQgb24gV2ViR1BV
IHNvIGZhci4iOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5iaW5kQnVmZmVy
cyA9IGZ1bmN0aW9uICh2ZXJ0ZXhCdWZmZXJzLCBpbmRleEJ1ZmZlciwgZWZmZWN0KSB7CisgICAg
ICAgIHRoaXMuX2N1cnJlbnRJbmRleEJ1ZmZlciA9IGluZGV4QnVmZmVyOworICAgICAgICB0aGlz
Ll9jdXJyZW50VmVydGV4QnVmZmVycyA9IHZlcnRleEJ1ZmZlcnM7CisgICAgfTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX3JlbGVhc2VCdWZmZXIgPSBm
dW5jdGlvbiAoYnVmZmVyKSB7CisgICAgICAgIGJ1ZmZlci5yZWZlcmVuY2VzLS07CisgICAgICAg
IGlmIChidWZmZXIucmVmZXJlbmNlcyA9PT0gMCkgeworICAgICAgICAgICAgYnVmZmVyLnVuZGVy
bHlpbmdSZXNvdXJjZS5kZXN0cm95KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUJPCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVVu
aWZvcm1CdWZmZXIgPSBmdW5jdGlvbiAoZWxlbWVudHMpIHsKKyAgICAgICAgdmFyIHZpZXc7Cisg
ICAgICAgIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICB2aWV3
ID0gbmV3IEZsb2F0MzJBcnJheShlbGVtZW50cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB2aWV3ID0gZWxlbWVudHM7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRh
dGFCdWZmZXIgPSB0aGlzLl9jcmVhdGVCdWZmZXIodmlldywgX1dlYkdQVV93ZWJncHVDb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQnVm
ZmVyVXNhZ2VfVU5JRk9STSB8IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJ1ZmZlclVzYWdlX1RSQU5TRkVS
X0RTVCk7CisgICAgICAgIHJldHVybiBkYXRhQnVmZmVyOworICAgIH07CisgICAgV2ViR1BVRW5n
aW5lLnByb3RvdHlwZS5jcmVhdGVEeW5hbWljVW5pZm9ybUJ1ZmZlciA9IGZ1bmN0aW9uIChlbGVt
ZW50cykgeworICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVVbmlmb3JtQnVmZmVyKGVsZW1lbnRz
KTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUudXBkYXRlVW5pZm9ybUJ1ZmZl
ciA9IGZ1bmN0aW9uICh1bmlmb3JtQnVmZmVyLCBlbGVtZW50cywgb2Zmc2V0LCBjb3VudCkgewor
ICAgICAgICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIG9mZnNldCA9
IDA7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRhdGFCdWZmZXIgPSB1bmlmb3JtQnVmZmVyOwor
ICAgICAgICB2YXIgdmlldzsKKyAgICAgICAgaWYgKGNvdW50ID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkgeworICAgICAg
ICAgICAgICAgIHZpZXcgPSBlbGVtZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHZpZXcgPSBuZXcgRmxvYXQzMkFycmF5KGVsZW1lbnRzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50ID0gdmlldy5ieXRlTGVuZ3RoOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGVsZW1lbnRzIGluc3RhbmNl
b2YgRmxvYXQzMkFycmF5KSB7CisgICAgICAgICAgICAgICAgdmlldyA9IGVsZW1lbnRzOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmlldyA9IG5l
dyBGbG9hdDMyQXJyYXkoZWxlbWVudHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHRoaXMuX3NldFN1YkRhdGEoZGF0YUJ1ZmZlciwgb2Zmc2V0LCB2aWV3LCAwLCBjb3VudCk7
CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmJpbmRVbmlmb3JtQnVmZmVyQmFz
ZSA9IGZ1bmN0aW9uIChidWZmZXIsIGxvY2F0aW9uLCBuYW1lKSB7CisgICAgICAgIHRoaXMuX3Vu
aWZvcm1zQnVmZmVyc1tuYW1lXSA9IGJ1ZmZlcjsKKyAgICB9OworICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RzCisg
ICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmNy
ZWF0ZUVmZmVjdCA9IGZ1bmN0aW9uIChiYXNlTmFtZSwgYXR0cmlidXRlc05hbWVzT3JPcHRpb25z
LCB1bmlmb3Jtc05hbWVzT3JFbmdpbmUsIHNhbXBsZXJzLCBkZWZpbmVzLCBmYWxsYmFja3MsIG9u
Q29tcGlsZWQsIG9uRXJyb3IsIGluZGV4UGFyYW1ldGVycykgeworICAgICAgICB2YXIgdmVydGV4
ID0gYmFzZU5hbWUudmVydGV4RWxlbWVudCB8fCBiYXNlTmFtZS52ZXJ0ZXggfHwgYmFzZU5hbWU7
CisgICAgICAgIHZhciBmcmFnbWVudCA9IGJhc2VOYW1lLmZyYWdtZW50RWxlbWVudCB8fCBiYXNl
TmFtZS5mcmFnbWVudCB8fCBiYXNlTmFtZTsKKyAgICAgICAgdmFyIG5hbWUgPSB2ZXJ0ZXggKyAi
KyIgKyBmcmFnbWVudCArICJAIiArIChkZWZpbmVzID8gZGVmaW5lcyA6IGF0dHJpYnV0ZXNOYW1l
c09yT3B0aW9ucy5kZWZpbmVzKTsKKyAgICAgICAgdmFyIHNoYWRlciA9IHRoaXMuX2NvbXBpbGVk
U2hhZGVyc1tuYW1lXTsKKyAgICAgICAgaWYgKHNoYWRlcikgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJFZmZl
Y3QiXShiYXNlTmFtZSwgYXR0cmlidXRlc05hbWVzT3JPcHRpb25zLCB1bmlmb3Jtc05hbWVzT3JF
bmdpbmUsIHNhbXBsZXJzLCB0aGlzLCBkZWZpbmVzLCBmYWxsYmFja3MsIG9uQ29tcGlsZWQsIG9u
RXJyb3IsIGluZGV4UGFyYW1ldGVycywgbmFtZSwgc2hhZGVyLnNvdXJjZXMpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJFZmZlY3QiXShiYXNlTmFtZSwgYXR0cmli
dXRlc05hbWVzT3JPcHRpb25zLCB1bmlmb3Jtc05hbWVzT3JFbmdpbmUsIHNhbXBsZXJzLCB0aGlz
LCBkZWZpbmVzLCBmYWxsYmFja3MsIG9uQ29tcGlsZWQsIG9uRXJyb3IsIGluZGV4UGFyYW1ldGVy
cywgbmFtZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUu
X2NvbXBpbGVSYXdTaGFkZXJUb1NwaXJWID0gZnVuY3Rpb24gKHNvdXJjZSwgdHlwZSkgeworICAg
ICAgICB2YXIgU2hhZGVyYyA9IHRoaXMuX3NoYWRlcmM7CisgICAgICAgIHZhciBjb21waWxlciA9
IG5ldyBTaGFkZXJjLkNvbXBpbGVyKCk7CisgICAgICAgIHZhciBvcHRzID0gbmV3IFNoYWRlcmMu
Q29tcGlsZU9wdGlvbnMoKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGNvbXBpbGVyLkNvbXBpbGVH
bHNsVG9TcHYoc291cmNlLCB0eXBlID09PSAiZnJhZ21lbnQiID8gU2hhZGVyYy5zaGFkZXJfa2lu
ZC5mcmFnbWVudCA6CisgICAgICAgICAgICB0eXBlID09PSAidmVydGV4IiA/IFNoYWRlcmMuc2hh
ZGVyX2tpbmQudmVydGV4IDoKKyAgICAgICAgICAgICAgICB0eXBlID09PSAiY29tcHV0ZSIgPyBT
aGFkZXJjLnNoYWRlcl9raW5kLmNvbXB1dGUgOiBudWxsLCAidGVtcENvbXBpbGF0aW9uLmdsc2wi
LCAibWFpbiIsIG9wdHMpOworICAgICAgICB2YXIgZXJyb3IgPSByZXN1bHQuR2V0RXJyb3JNZXNz
YWdlKCk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVycm9yKGVycm9yKTsKKyAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgY29tcGls
ZSB0aGUgc2hhZGVyLiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQuR2V0Qmlu
YXJ5KCkuc2xpY2UoKTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2NvbXBp
bGVTaGFkZXJUb1NwaXJWID0gZnVuY3Rpb24gKHNvdXJjZSwgdHlwZSwgZGVmaW5lcywgc2hhZGVy
VmVyc2lvbikgeworICAgICAgICByZXR1cm4gdGhpcy5fY29tcGlsZVJhd1NoYWRlclRvU3BpclYo
c2hhZGVyVmVyc2lvbiArIChkZWZpbmVzID8gZGVmaW5lcyArICJcbiIgOiAiIikgKyBzb3VyY2Us
IHR5cGUpOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fY3JlYXRlUGlwZWxp
bmVTdGFnZURlc2NyaXB0b3IgPSBmdW5jdGlvbiAodmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRl
cikgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdmVydGV4U3RhZ2U6IHsKKyAgICAg
ICAgICAgICAgICBtb2R1bGU6IHRoaXMuX2RldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoeworICAg
ICAgICAgICAgICAgICAgICBjb2RlOiB2ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgfSks
CisgICAgICAgICAgICAgICAgZW50cnlQb2ludDogIm1haW4iLAorICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIGZyYWdtZW50U3RhZ2U6IHsKKyAgICAgICAgICAgICAgICBtb2R1bGU6IHRoaXMu
X2RldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoeworICAgICAgICAgICAgICAgICAgICBjb2RlOiBm
cmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgICAgICBlbnRy
eVBvaW50OiAibWFpbiIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9OworICAgIFdl
YkdQVUVuZ2luZS5wcm90b3R5cGUuX2NvbXBpbGVSYXdQaXBlbGluZVN0YWdlRGVzY3JpcHRvciA9
IGZ1bmN0aW9uICh2ZXJ0ZXhDb2RlLCBmcmFnbWVudENvZGUpIHsKKyAgICAgICAgdmFyIHZlcnRl
eFNoYWRlciA9IHRoaXMuX2NvbXBpbGVSYXdTaGFkZXJUb1NwaXJWKHZlcnRleENvZGUsICJ2ZXJ0
ZXgiKTsKKyAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gdGhpcy5fY29tcGlsZVJhd1NoYWRl
clRvU3BpclYoZnJhZ21lbnRDb2RlLCAiZnJhZ21lbnQiKTsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2NyZWF0ZVBpcGVsaW5lU3RhZ2VEZXNjcmlwdG9yKHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFk
ZXIpOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fY29tcGlsZVBpcGVsaW5l
U3RhZ2VEZXNjcmlwdG9yID0gZnVuY3Rpb24gKHZlcnRleENvZGUsIGZyYWdtZW50Q29kZSwgZGVm
aW5lcykgeworICAgICAgICB0aGlzLm9uQmVmb3JlU2hhZGVyQ29tcGlsYXRpb25PYnNlcnZhYmxl
Lm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgdmFyIHNoYWRlclZlcnNpb24gPSAiI3Zl
cnNpb24gNDUwXG4iOworICAgICAgICB2YXIgdmVydGV4U2hhZGVyID0gdGhpcy5fY29tcGlsZVNo
YWRlclRvU3BpclYodmVydGV4Q29kZSwgInZlcnRleCIsIGRlZmluZXMsIHNoYWRlclZlcnNpb24p
OworICAgICAgICB2YXIgZnJhZ21lbnRTaGFkZXIgPSB0aGlzLl9jb21waWxlU2hhZGVyVG9TcGly
VihmcmFnbWVudENvZGUsICJmcmFnbWVudCIsIGRlZmluZXMsIHNoYWRlclZlcnNpb24pOworICAg
ICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMuX2NyZWF0ZVBpcGVsaW5lU3RhZ2VEZXNjcmlwdG9yKHZl
cnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOworICAgICAgICB0aGlzLm9uQWZ0ZXJTaGFkZXJD
b21waWxhdGlvbk9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICByZXR1
cm4gcHJvZ3JhbTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuY3JlYXRlUmF3
U2hhZGVyUHJvZ3JhbSA9IGZ1bmN0aW9uIChwaXBlbGluZUNvbnRleHQsIHZlcnRleENvZGUsIGZy
YWdtZW50Q29kZSwgY29udGV4dCwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncykgeworICAgICAg
ICBpZiAodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyA9PT0gdm9pZCAwKSB7IHRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ3MgPSBudWxsOyB9CisgICAgICAgIHRocm93ICJOb3QgYXZhaWxhYmxlIG9u
IFdlYkdQVSI7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVNoYWRl
clByb2dyYW0gPSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0LCB2ZXJ0ZXhDb2RlLCBmcmFnbWVu
dENvZGUsIGRlZmluZXMsIGNvbnRleHQsIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpIHsKKyAg
ICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MgPT09IHZvaWQgMCkgeyB0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzID0gbnVsbDsgfQorICAgICAgICB0aHJvdyAiTm90IGF2YWlsYWJs
ZSBvbiBXZWJHUFUiOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5jcmVhdGVQ
aXBlbGluZUNvbnRleHQgPSBmdW5jdGlvbiAoc2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQpIHsKKyAg
ICAgICAgdmFyIHBpcGVsaW5lQ29udGV4dCA9IG5ldyBfV2ViR1BVX3dlYmdwdVBpcGVsaW5lQ29u
dGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siV2ViR1BVUGlwZWxpbmVDb250ZXh0
Il0oc2hhZGVyUHJvY2Vzc2luZ0NvbnRleHQsIHRoaXMpOworICAgICAgICBwaXBlbGluZUNvbnRl
eHQuZW5naW5lID0gdGhpczsKKyAgICAgICAgcmV0dXJuIHBpcGVsaW5lQ29udGV4dDsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fcHJlcGFy
ZVBpcGVsaW5lQ29udGV4dCA9IGZ1bmN0aW9uIChwaXBlbGluZUNvbnRleHQsIHZlcnRleFNvdXJj
ZUNvZGUsIGZyYWdtZW50U291cmNlQ29kZSwgY3JlYXRlQXNSYXcsIHJlYnVpbGRSZWJpbmQsIGRl
ZmluZXMsIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIGtleSkgeworICAgICAgICB2YXIgd2Vi
R3B1Q29udGV4dCA9IHBpcGVsaW5lQ29udGV4dDsKKyAgICAgICAgLy8gVE9ETyBXRUJHUFUuIENo
ZWNrIGlmIGNhY2hlcyBjb3VsZCBiZSByZXVzZSBmcm9tIHBpZXBsaW5lID8/PworICAgICAgICB2
YXIgc2hhZGVyID0gdGhpcy5fY29tcGlsZWRTaGFkZXJzW2tleV07CisgICAgICAgIGlmIChzaGFk
ZXIpIHsKKyAgICAgICAgICAgIHdlYkdwdUNvbnRleHQuc3RhZ2VzID0gc2hhZGVyLnN0YWdlczsK
KyAgICAgICAgICAgIHdlYkdwdUNvbnRleHQuYXZhaWxhYmxlQXR0cmlidXRlcyA9IHNoYWRlci5h
dmFpbGFibGVBdHRyaWJ1dGVzOworICAgICAgICAgICAgd2ViR3B1Q29udGV4dC5hdmFpbGFibGVV
Qk9zID0gc2hhZGVyLmF2YWlsYWJsZVVCT3M7CisgICAgICAgICAgICB3ZWJHcHVDb250ZXh0LmF2
YWlsYWJsZVNhbXBsZXJzID0gc2hhZGVyLmF2YWlsYWJsZVNhbXBsZXJzOworICAgICAgICAgICAg
d2ViR3B1Q29udGV4dC5vcmRlcmVkQXR0cmlidXRlcyA9IHNoYWRlci5vcmRlcmVkQXR0cmlidXRl
czsKKyAgICAgICAgICAgIHdlYkdwdUNvbnRleHQub3JkZXJlZFVCT3NBbmRTYW1wbGVycyA9IHNo
YWRlci5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzOworICAgICAgICAgICAgd2ViR3B1Q29udGV4dC5s
ZWZ0T3ZlclVuaWZvcm1zID0gc2hhZGVyLmxlZnRPdmVyVW5pZm9ybXM7CisgICAgICAgICAgICB3
ZWJHcHVDb250ZXh0LmxlZnRPdmVyVW5pZm9ybXNCeU5hbWUgPSBzaGFkZXIubGVmdE92ZXJVbmlm
b3Jtc0J5TmFtZTsKKyAgICAgICAgICAgIHdlYkdwdUNvbnRleHQuc291cmNlcyA9IHNoYWRlci5z
b3VyY2VzOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGNyZWF0
ZUFzUmF3KSB7CisgICAgICAgICAgICAgICAgd2ViR3B1Q29udGV4dC5zdGFnZXMgPSB0aGlzLl9j
b21waWxlUmF3UGlwZWxpbmVTdGFnZURlc2NyaXB0b3IodmVydGV4U291cmNlQ29kZSwgZnJhZ21l
bnRTb3VyY2VDb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHdlYkdwdUNvbnRleHQuc3RhZ2VzID0gdGhpcy5fY29tcGlsZVBpcGVsaW5lU3Rh
Z2VEZXNjcmlwdG9yKHZlcnRleFNvdXJjZUNvZGUsIGZyYWdtZW50U291cmNlQ29kZSwgZGVmaW5l
cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9jb21waWxlZFNoYWRlcnNba2V5
XSA9IHsKKyAgICAgICAgICAgICAgICBzdGFnZXM6IHdlYkdwdUNvbnRleHQuc3RhZ2VzLAorICAg
ICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZXM6IHdlYkdwdUNvbnRleHQuYXZhaWxhYmxl
QXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICBhdmFpbGFibGVVQk9zOiB3ZWJHcHVDb250ZXh0
LmF2YWlsYWJsZVVCT3MsCisgICAgICAgICAgICAgICAgYXZhaWxhYmxlU2FtcGxlcnM6IHdlYkdw
dUNvbnRleHQuYXZhaWxhYmxlU2FtcGxlcnMsCisgICAgICAgICAgICAgICAgb3JkZXJlZEF0dHJp
YnV0ZXM6IHdlYkdwdUNvbnRleHQub3JkZXJlZEF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAg
b3JkZXJlZFVCT3NBbmRTYW1wbGVyczogd2ViR3B1Q29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBs
ZXJzLAorICAgICAgICAgICAgICAgIGxlZnRPdmVyVW5pZm9ybXM6IHdlYkdwdUNvbnRleHQubGVm
dE92ZXJVbmlmb3JtcywKKyAgICAgICAgICAgICAgICBsZWZ0T3ZlclVuaWZvcm1zQnlOYW1lOiB3
ZWJHcHVDb250ZXh0LmxlZnRPdmVyVW5pZm9ybXNCeU5hbWUsCisgICAgICAgICAgICAgICAgc291
cmNlczogeworICAgICAgICAgICAgICAgICAgICBmcmFnbWVudDogZnJhZ21lbnRTb3VyY2VDb2Rl
LAorICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXg6IHZlcnRleFNvdXJjZUNvZGUKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfTsKKyAgICBXZWJHUFVF
bmdpbmUucHJvdG90eXBlLmdldEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0
LCBhdHRyaWJ1dGVzTmFtZXMpIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkoYXR0
cmlidXRlc05hbWVzLmxlbmd0aCk7CisgICAgICAgIHZhciBncHVQaXBlbGluZUNvbnRleHQgPSBw
aXBlbGluZUNvbnRleHQ7CisgICAgICAgIC8vIFRPRE8gV0VCR1BVLiBIYXJkIGNvZGVkIGZvciBX
ZWJHUFUgdW50aWwgYW4gaW50cm9zcGVjdGlvbiBsaWIgaXMgYXZhaWxhYmxlLgorICAgICAgICAv
LyBTaG91bGQgYmUgZG9uZSBhdCBwcm9jZXNzaW5nIHRpbWUsIG5vdCBuZWVkIHRvIGRvdWJsZSB0
aGUgd29yayBpbiBoZXJlLgorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXNO
YW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBhdHRy
aWJ1dGVzTmFtZXNbaV07CisgICAgICAgICAgICB2YXIgYXR0cmlidXRlTG9jYXRpb24gPSBncHVQ
aXBlbGluZUNvbnRleHQuYXZhaWxhYmxlQXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXTsKKyAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGVMb2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHRzW2ldID0g
YXR0cmlidXRlTG9jYXRpb247CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7Cisg
ICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmVuYWJsZUVmZmVjdCA9IGZ1bmN0aW9u
IChlZmZlY3QpIHsKKyAgICAgICAgdGhpcy5fY3VycmVudEVmZmVjdCA9IGVmZmVjdDsKKyAgICAg
ICAgaWYgKGVmZmVjdC5vbkJpbmQpIHsKKyAgICAgICAgICAgIGVmZmVjdC5vbkJpbmQoZWZmZWN0
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZWZmZWN0Ll9vbkJpbmRPYnNlcnZhYmxlKSB7Cisg
ICAgICAgICAgICBlZmZlY3QuX29uQmluZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGVmZmVj
dCk7CisgICAgICAgIH0KKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX3JlbGVh
c2VFZmZlY3QgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgIC8vIEVmZmVjdCBnZXRzIGdh
cmJhZ2UgY29sbGVjdGVkIHdpdGhvdXQgZXhwbGljaXQgZGVzdHJveSBpbiBXZWJHUFUuCisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSB0aGUgZW5naW5lIHRvIHJlbGVhc2UgYWxsIGNhY2hl
ZCBlZmZlY3RzLiBUaGlzIG1lYW5zIHRoYXQgbmV4dCBlZmZlY3QgY29tcGlsYXRpb24gd2lsbCBo
YXZlIHRvIGJlIGRvbmUgY29tcGxldGVseSBldmVuIGlmIGEgc2ltaWxhciBlZmZlY3Qgd2FzIGFs
cmVhZHkgY29tcGlsZWQKKyAgICAgKi8KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnJlbGVh
c2VFZmZlY3RzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBFZmZlY3QgZ2V0cyBnYXJiYWdl
IGNvbGxlY3RlZCB3aXRob3V0IGV4cGxpY2l0IGRlc3Ryb3kgaW4gV2ViR1BVLgorICAgIH07Cisg
ICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZGVsZXRlUGlwZWxpbmVDb250ZXh0ID0gZnVuY3Rp
b24gKHBpcGVsaW5lQ29udGV4dCkgeworICAgICAgICB2YXIgd2ViZ3B1UGlwZWxpbmVDb250ZXh0
ID0gcGlwZWxpbmVDb250ZXh0OworICAgICAgICBpZiAod2ViZ3B1UGlwZWxpbmVDb250ZXh0KSB7
CisgICAgICAgICAgICBwaXBlbGluZUNvbnRleHQuZGlzcG9zZSgpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVGV4dHVyZXMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8q
KiBAaGlkZGVuICovCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fY3JlYXRlVGV4dHVyZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gVE9ETyBXRUJHUFUuIFRoaXMgc2hvdWxkIHJldHVy
biB0aGUgR1BVVGV4dHVyZSwgV2ViR0xUZXh0dXJlIG1pZ2h0IG5lZWQgdG8gYmUgd3JhcHBlZCBs
aWtlIHRoZSBidWZmZXJzLgorICAgICAgICByZXR1cm4ge307CisgICAgfTsKKyAgICAvKiogQGhp
ZGRlbiAqLworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX3JlbGVhc2VUZXh0dXJlID0gZnVu
Y3Rpb24gKHRleHR1cmUpIHsKKyAgICAgICAgaWYgKHRleHR1cmUuX3dlYkdQVVRleHR1cmUpIHsK
KyAgICAgICAgICAgIHRleHR1cmUuX3dlYkdQVVRleHR1cmUuZGVzdHJveSgpOworICAgICAgICB9
CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9qdXN0VGhlVXBsb2FkID0gZnVu
Y3Rpb24gKHBpeGVscywgZ3B1VGV4dHVyZSwgd2lkdGgsIGhlaWdodCwgZmFjZSwgbWlwKSB7Cisg
ICAgICAgIHZhciB0ZXh0dXJlVmlldyA9IHsKKyAgICAgICAgICAgIHRleHR1cmU6IGdwdVRleHR1
cmUsCisgICAgICAgICAgICBvcmlnaW46IHsKKyAgICAgICAgICAgICAgICB4OiAwLAorICAgICAg
ICAgICAgICAgIHk6IDAsCisgICAgICAgICAgICAgICAgejogMAorICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIG1pcExldmVsOiBtaXAsCisgICAgICAgICAgICBhcnJheUxheWVyOiBNYXRoLm1h
eChmYWNlLCAwKSwKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHRleHR1cmVFeHRlbnQgPSB7Cisg
ICAgICAgICAgICB3aWR0aDogd2lkdGgsCisgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCwKKyAg
ICAgICAgICAgIGRlcHRoOiAxCisgICAgICAgIH07CisgICAgICAgIHZhciBjb21tYW5kRW5jb2Rl
ciA9IHRoaXMuX2RldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcih7fSk7CisgICAgICAgIHZhciBy
b3dQaXRjaCA9IE1hdGguY2VpbCh3aWR0aCAqIDQgLyAyNTYpICogMjU2OworICAgICAgICB2YXIg
ZGF0YUJ1ZmZlcjsKKyAgICAgICAgaWYgKHJvd1BpdGNoID09IHdpZHRoICogNCkgeworICAgICAg
ICAgICAgZGF0YUJ1ZmZlciA9IHRoaXMuX2NyZWF0ZUJ1ZmZlcihwaXhlbHMsIF9XZWJHUFVfd2Vi
Z3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50
cyJdLkdQVUJ1ZmZlclVzYWdlX1RSQU5TRkVSX1NSQyB8IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJ1ZmZl
clVzYWdlX1RSQU5TRkVSX0RTVCk7CisgICAgICAgICAgICB2YXIgYnVmZmVyVmlldyA9IHsKKyAg
ICAgICAgICAgICAgICBidWZmZXI6IGRhdGFCdWZmZXIudW5kZXJseWluZ1Jlc291cmNlLAorICAg
ICAgICAgICAgICAgIHJvd1BpdGNoOiByb3dQaXRjaCwKKyAgICAgICAgICAgICAgICBpbWFnZUhl
aWdodDogaGVpZ2h0LAorICAgICAgICAgICAgICAgIG9mZnNldDogMCwKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9UZXh0dXJlKGJ1ZmZlclZp
ZXcsIHRleHR1cmVWaWV3LCB0ZXh0dXJlRXh0ZW50KTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHZhciBhbGlnbmVkUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkocm93UGl0
Y2ggKiBoZWlnaHQpOworICAgICAgICAgICAgdmFyIHBpeGVsc0luZGV4ID0gMDsKKyAgICAgICAg
ICAgIGZvciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGkgPSB4ICogNCArIHkgKiByb3dQaXRjaDsKKyAgICAgICAgICAgICAgICAgICAgYWxpZ25lZFBp
eGVsc1tpXSA9IHBpeGVsc1twaXhlbHNJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGFsaWdu
ZWRQaXhlbHNbaSArIDFdID0gcGl4ZWxzW3BpeGVsc0luZGV4ICsgMV07CisgICAgICAgICAgICAg
ICAgICAgIGFsaWduZWRQaXhlbHNbaSArIDJdID0gcGl4ZWxzW3BpeGVsc0luZGV4ICsgMl07Cisg
ICAgICAgICAgICAgICAgICAgIGFsaWduZWRQaXhlbHNbaSArIDNdID0gcGl4ZWxzW3BpeGVsc0lu
ZGV4ICsgM107CisgICAgICAgICAgICAgICAgICAgIHBpeGVsc0luZGV4ICs9IDQ7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUJ1ZmZlciA9IHRoaXMu
X2NyZWF0ZUJ1ZmZlcihhbGlnbmVkUGl4ZWxzLCBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCdWZmZXJVc2Fn
ZV9UUkFOU0ZFUl9TUkMgfCBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCdWZmZXJVc2FnZV9UUkFOU0ZFUl9E
U1QpOworICAgICAgICAgICAgdmFyIGJ1ZmZlclZpZXcgPSB7CisgICAgICAgICAgICAgICAgYnVm
ZmVyOiBkYXRhQnVmZmVyLnVuZGVybHlpbmdSZXNvdXJjZSwKKyAgICAgICAgICAgICAgICByb3dQ
aXRjaDogcm93UGl0Y2gsCisgICAgICAgICAgICAgICAgaW1hZ2VIZWlnaHQ6IGhlaWdodCwKKyAg
ICAgICAgICAgICAgICBvZmZzZXQ6IDAsCisgICAgICAgICAgICB9OworICAgICAgICAgICAgY29t
bWFuZEVuY29kZXIuY29weUJ1ZmZlclRvVGV4dHVyZShidWZmZXJWaWV3LCB0ZXh0dXJlVmlldywg
dGV4dHVyZUV4dGVudCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGV2aWNlLmdldFF1ZXVl
KCkuc3VibWl0KFtjb21tYW5kRW5jb2Rlci5maW5pc2goKV0pOworICAgICAgICB0aGlzLl9yZWxl
YXNlQnVmZmVyKGRhdGFCdWZmZXIpOworICAgIH0KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBl
Ll91cGxvYWRNaXBNYXBzRnJvbVdlYmdsVGV4dHVyZSA9IGZ1bmN0aW9uIChtaXBNYXBzLCB3ZWJn
bEVuZ2luZVRleHR1cmUsIGdwdVRleHR1cmUsIHdpZHRoLCBoZWlnaHQsIGZhY2UpIHsKKyAgICAg
ICAgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBTYWZhcmkgVGVjaG5vbG9neSBQcmV2aWV3
IG9ubHkgc3VwcG9ydHMgV2ViR0wgMS4KKyAgICAgICAgLy8gSW4gV2ViR0wgMSwgdGhlICJtaXAi
IGFyZ3VtZW50IHRvIF9yZWFkVGV4dHVyZVBpeGVscygpIG11c3QgYmUgMCwgd2hpY2ggbWVhbnMg
aXQncyBpbXBvc3NpYmxlIHRvIHJlYWRQaXhlbHMoKSBhIG5vbi0wIG1pcGxldmVsIG9mIGEgdGV4
dHVyZS4KKyAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIGdlbmVyYXRlIG91ciBvd24g
bWlwbWFwcyBvbiB0aGUgQ1BVIGhlcmUuCisgICAgICAgIHZhciBwaXhlbHMgPSB0aGlzLl9kZWNv
ZGVFbmdpbmUuX3JlYWRUZXh0dXJlUGl4ZWxzKHdlYmdsRW5naW5lVGV4dHVyZSwgd2ViZ2xFbmdp
bmVUZXh0dXJlLndpZHRoLCB3ZWJnbEVuZ2luZVRleHR1cmUuaGVpZ2h0LCBmYWNlLCAwKTsKKyAg
ICAgICAgaWYgKHBpeGVscyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkgeworICAgICAgICAgICAg
dmFyIG5ld1BpeGVsc18xID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHBpeGVscy5sZW5ndGgpOwor
ICAgICAgICAgICAgcGl4ZWxzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgeyByZXR1
cm4gbmV3UGl4ZWxzXzFbaW5kZXhdID0gdmFsdWUgKiAyNTU7IH0pOworICAgICAgICAgICAgcGl4
ZWxzID0gbmV3UGl4ZWxzXzE7CisgICAgICAgIH0KKyAgICAgICAgbGV0IG9yaWdpbmFsQ2FudmFz
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgICAgIG9yaWdpbmFsQ2Fu
dmFzLndpZHRoID0gd2ViZ2xFbmdpbmVUZXh0dXJlLndpZHRoOworICAgICAgICBvcmlnaW5hbENh
bnZhcy5oZWlnaHQgPSB3ZWJnbEVuZ2luZVRleHR1cmUuaGVpZ2h0OworICAgICAgICBsZXQgb3Jp
Z2luYWxDb250ZXh0ID0gb3JpZ2luYWxDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICAgICAg
bGV0IGltYWdlRGF0YSA9IG5ldyBJbWFnZURhdGEobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHBpeGVs
cyksIHdlYmdsRW5naW5lVGV4dHVyZS53aWR0aCwgd2ViZ2xFbmdpbmVUZXh0dXJlLndpZHRoKTsK
KyAgICAgICAgb3JpZ2luYWxDb250ZXh0LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApOwor
CisgICAgICAgIHZhciBmYWNlV2lkdGggPSB3aWR0aDsKKyAgICAgICAgdmFyIGZhY2VIZWlnaHQg
PSBoZWlnaHQ7CisgICAgICAgIHZhciBtaXAgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICBsZXQgc21hbGxDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKKyAg
ICAgICAgICAgIHNtYWxsQ2FudmFzLndpZHRoID0gZmFjZVdpZHRoOworICAgICAgICAgICAgc21h
bGxDYW52YXMuaGVpZ2h0ID0gZmFjZUhlaWdodDsKKyAgICAgICAgICAgIGxldCBzbWFsbENvbnRl
eHQgPSBzbWFsbENhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgICAgICAgICAgc21hbGxDb250
ZXh0LmRyYXdJbWFnZShvcmlnaW5hbENhbnZhcywgMCwgMCwgZmFjZVdpZHRoLCBmYWNlSGVpZ2h0
KTsKKyAgICAgICAgICAgIGxldCBpbWFnZURhdGEgPSBzbWFsbENvbnRleHQuZ2V0SW1hZ2VEYXRh
KDAsIDAsIGZhY2VXaWR0aCwgZmFjZUhlaWdodCk7CisgICAgICAgICAgICB0aGlzLl9qdXN0VGhl
VXBsb2FkKGltYWdlRGF0YS5kYXRhLCBncHVUZXh0dXJlLCBmYWNlV2lkdGgsIGZhY2VIZWlnaHQs
IGZhY2UsIG1pcCk7CisgICAgICAgICAgICBpZiAoZmFjZVdpZHRoIDw9IDEgJiYgZmFjZUhlaWdo
dCA8PSAxKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZmFjZVdpZHRoIC89
IDI7CisgICAgICAgICAgICBmYWNlSGVpZ2h0IC89IDI7CisgICAgICAgICAgICArK21pcDsKKyAg
ICAgICAgfSB3aGlsZSAodHJ1ZSk7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBl
Ll91cGxvYWRGcm9tV2ViZ2xUZXh0dXJlID0gZnVuY3Rpb24gKHdlYmdsRW5naW5lVGV4dHVyZSwg
Z3B1VGV4dHVyZSwgd2lkdGgsIGhlaWdodCwgZmFjZSwgbWlwKSB7CisgICAgICAgIGlmIChtaXAg
PT09IHZvaWQgMCkgeyBtaXAgPSAwOyB9CisgICAgICAgIHZhciBwaXhlbHMgPSB0aGlzLl9kZWNv
ZGVFbmdpbmUuX3JlYWRUZXh0dXJlUGl4ZWxzKHdlYmdsRW5naW5lVGV4dHVyZSwgd2lkdGgsIGhl
aWdodCwgZmFjZSwgbWlwKTsKKyAgICAgICAgaWYgKHBpeGVscyBpbnN0YW5jZW9mIEZsb2F0MzJB
cnJheSkgeworICAgICAgICAgICAgdmFyIG5ld1BpeGVsc18xID0gbmV3IFVpbnQ4Q2xhbXBlZEFy
cmF5KHBpeGVscy5sZW5ndGgpOworICAgICAgICAgICAgcGl4ZWxzLmZvckVhY2goZnVuY3Rpb24g
KHZhbHVlLCBpbmRleCkgeyByZXR1cm4gbmV3UGl4ZWxzXzFbaW5kZXhdID0gdmFsdWUgKiAyNTU7
IH0pOworICAgICAgICAgICAgcGl4ZWxzID0gbmV3UGl4ZWxzXzE7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHRleHR1cmVWaWV3ID0geworICAgICAgICAgICAgdGV4dHVyZTogZ3B1VGV4dHVyZSwK
KyAgICAgICAgICAgIG9yaWdpbjogeworICAgICAgICAgICAgICAgIHg6IDAsCisgICAgICAgICAg
ICAgICAgeTogMCwKKyAgICAgICAgICAgICAgICB6OiAwCisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgbWlwTGV2ZWw6IG1pcCwKKyAgICAgICAgICAgIGFycmF5TGF5ZXI6IE1hdGgubWF4KGZh
Y2UsIDApLAorICAgICAgICB9OworICAgICAgICB2YXIgdGV4dHVyZUV4dGVudCA9IHsKKyAgICAg
ICAgICAgIHdpZHRoOiB3aWR0aCwKKyAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAorICAgICAg
ICAgICAgZGVwdGg6IDEKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIGNvbW1hbmRFbmNvZGVyID0g
dGhpcy5fZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKHt9KTsKKyAgICAgICAgdmFyIHJvd1Bp
dGNoID0gTWF0aC5jZWlsKHdpZHRoICogNCAvIDI1NikgKiAyNTY7CisgICAgICAgIHZhciBkYXRh
QnVmZmVyOworICAgICAgICBpZiAocm93UGl0Y2ggPT0gd2lkdGggKiA0KSB7CisgICAgICAgICAg
ICBkYXRhQnVmZmVyID0gdGhpcy5fY3JlYXRlQnVmZmVyKHBpeGVscywgX1dlYkdQVV93ZWJncHVD
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0u
R1BVQnVmZmVyVXNhZ2VfVFJBTlNGRVJfU1JDIHwgX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQnVmZmVyVXNh
Z2VfVFJBTlNGRVJfRFNUKTsKKyAgICAgICAgICAgIHZhciBidWZmZXJWaWV3ID0geworICAgICAg
ICAgICAgICAgIGJ1ZmZlcjogZGF0YUJ1ZmZlci51bmRlcmx5aW5nUmVzb3VyY2UsCisgICAgICAg
ICAgICAgICAgcm93UGl0Y2g6IHJvd1BpdGNoLAorICAgICAgICAgICAgICAgIGltYWdlSGVpZ2h0
OiBoZWlnaHQsCisgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLAorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb1RleHR1cmUoYnVmZmVyVmlldywg
dGV4dHVyZVZpZXcsIHRleHR1cmVFeHRlbnQpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgdmFyIGFsaWduZWRQaXhlbHMgPSBuZXcgVWludDhBcnJheShyb3dQaXRjaCAq
IGhlaWdodCk7CisgICAgICAgICAgICB2YXIgcGl4ZWxzSW5kZXggPSAwOworICAgICAgICAgICAg
Zm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgeworICAgICAgICAgICAgICAgIGZvciAo
dmFyIHggPSAwOyB4IDwgd2lkdGg7ICsreCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgaSA9
IHggKiA0ICsgeSAqIHJvd1BpdGNoOworICAgICAgICAgICAgICAgICAgICBhbGlnbmVkUGl4ZWxz
W2ldID0gcGl4ZWxzW3BpeGVsc0luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgYWxpZ25lZFBp
eGVsc1tpICsgMV0gPSBwaXhlbHNbcGl4ZWxzSW5kZXggKyAxXTsKKyAgICAgICAgICAgICAgICAg
ICAgYWxpZ25lZFBpeGVsc1tpICsgMl0gPSBwaXhlbHNbcGl4ZWxzSW5kZXggKyAyXTsKKyAgICAg
ICAgICAgICAgICAgICAgYWxpZ25lZFBpeGVsc1tpICsgM10gPSBwaXhlbHNbcGl4ZWxzSW5kZXgg
KyAzXTsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxzSW5kZXggKz0gNDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhQnVmZmVyID0gdGhpcy5fY3Jl
YXRlQnVmZmVyKGFsaWduZWRQaXhlbHMsIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJ1ZmZlclVzYWdlX1RS
QU5TRkVSX1NSQyB8IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJ1ZmZlclVzYWdlX1RSQU5TRkVSX0RTVCk7
CisgICAgICAgICAgICB2YXIgYnVmZmVyVmlldyA9IHsKKyAgICAgICAgICAgICAgICBidWZmZXI6
IGRhdGFCdWZmZXIudW5kZXJseWluZ1Jlc291cmNlLAorICAgICAgICAgICAgICAgIHJvd1BpdGNo
OiByb3dQaXRjaCwKKyAgICAgICAgICAgICAgICBpbWFnZUhlaWdodDogaGVpZ2h0LAorICAgICAg
ICAgICAgICAgIG9mZnNldDogMCwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBjb21tYW5k
RW5jb2Rlci5jb3B5QnVmZmVyVG9UZXh0dXJlKGJ1ZmZlclZpZXcsIHRleHR1cmVWaWV3LCB0ZXh0
dXJlRXh0ZW50KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9kZXZpY2UuZ2V0UXVldWUoKS5z
dWJtaXQoW2NvbW1hbmRFbmNvZGVyLmZpbmlzaCgpXSk7CisgICAgICAgIHRoaXMuX3JlbGVhc2VC
dWZmZXIoZGF0YUJ1ZmZlcik7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9n
ZXRTYW1wbGVyRmlsdGVyRGVzY3JpcHRvciA9IGZ1bmN0aW9uIChpbnRlcm5hbFRleHR1cmUpIHsK
KyAgICAgICAgdmFyIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBtaXBtYXBGaWx0ZXI7CisgICAgICAg
IHN3aXRjaCAoaW50ZXJuYWxUZXh0dXJlLnNhbXBsaW5nTW9kZSkgeworICAgICAgICAgICAgY2Fz
ZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0u
VEVYVFVSRV9CSUxJTkVBUl9TQU1QTElOR01PREU6CisgICAgICAgICAgICAgICAgbWFnRmlsdGVy
ID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
V2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9kZV9saW5lYXI7CisgICAgICAgICAgICAgICAg
bWluRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9kZV9saW5lYXI7CisgICAgICAg
ICAgICAgICAgbWlwbWFwRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9kZV9uZWFy
ZXN0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uVEVYVFVSRV9UUklM
SU5FQVJfU0FNUExJTkdNT0RFOgorICAgICAgICAgICAgICAgIG1hZ0ZpbHRlciA9IF9XZWJHUFVf
d2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0
YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFyOworICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9
IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldl
YkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFyOworICAgICAgICAgICAgICAgIG1p
cG1hcEZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFyOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5H
TU9ERToKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0
ZXJNb2RlX25lYXJlc3Q7CisgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gX1dlYkdQVV93ZWJn
cHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRz
Il0uR1BVRmlsdGVyTW9kZV9uZWFyZXN0OworICAgICAgICAgICAgICAgIG1pcG1hcEZpbHRlciA9
IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldl
YkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFyOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siRW5naW5lIl0uVEVYVFVSRV9ORUFSRVNUX05FQVJFU1RfTUlQTkVBUkVTVDoK
KyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2Rl
X25lYXJlc3Q7CisgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BV
RmlsdGVyTW9kZV9uZWFyZXN0OworICAgICAgICAgICAgICAgIG1pcG1hcEZpbHRlciA9IF9XZWJH
UFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNv
bnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbmVhcmVzdDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkVuZ2luZSJdLlRFWFRVUkVfTkVBUkVTVF9MSU5FQVJfTUlQTkVBUkVTVDoKKyAgICAg
ICAgICAgICAgICBtYWdGaWx0ZXIgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX25lYXJl
c3Q7CisgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVy
TW9kZV9saW5lYXI7CisgICAgICAgICAgICAgICAgbWlwbWFwRmlsdGVyID0gX1dlYkdQVV93ZWJn
cHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRz
Il0uR1BVRmlsdGVyTW9kZV9uZWFyZXN0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
RW5naW5lIl0uVEVYVFVSRV9ORUFSRVNUX0xJTkVBUl9NSVBMSU5FQVI6CisgICAgICAgICAgICAg
ICAgbWFnRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9kZV9uZWFyZXN0OworICAg
ICAgICAgICAgICAgIG1pbkZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGlu
ZWFyOworICAgICAgICAgICAgICAgIG1pcG1hcEZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZp
bHRlck1vZGVfbGluZWFyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0u
VEVYVFVSRV9ORUFSRVNUX0xJTkVBUjoKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIgPSBfV2Vi
R1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVD
b25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX25lYXJlc3Q7CisgICAgICAgICAgICAgICAgbWluRmls
dGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9kZV9saW5lYXI7CisgICAgICAgICAgICAg
ICAgbWlwbWFwRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9kZV9uZWFyZXN0Owor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uVEVYVFVSRV9ORUFSRVNUX05F
QVJFU1Q6CisgICAgICAgICAgICAgICAgbWFnRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmls
dGVyTW9kZV9uZWFyZXN0OworICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9IF9XZWJHUFVfd2Vi
Z3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50
cyJdLkdQVUZpbHRlck1vZGVfbmVhcmVzdDsKKyAgICAgICAgICAgICAgICBtaXBtYXBGaWx0ZXIg
PSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX25lYXJlc3Q7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5URVhUVVJFX0xJTkVBUl9ORUFSRVNUX01JUE5FQVJFU1Q6
CisgICAgICAgICAgICAgICAgbWFnRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVRmlsdGVyTW9k
ZV9saW5lYXI7CisgICAgICAgICAgICAgICAgbWluRmlsdGVyID0gX1dlYkdQVV93ZWJncHVDb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BV
RmlsdGVyTW9kZV9uZWFyZXN0OworICAgICAgICAgICAgICAgIG1pcG1hcEZpbHRlciA9IF9XZWJH
UFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNv
bnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbmVhcmVzdDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkVuZ2luZSJdLlRFWFRVUkVfTElORUFSX05FQVJFU1RfTUlQTElORUFSOgorICAgICAg
ICAgICAgICAgIG1hZ0ZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFy
OworICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1v
ZGVfbmVhcmVzdDsKKyAgICAgICAgICAgICAgICBtaXBtYXBGaWx0ZXIgPSBfV2ViR1BVX3dlYmdw
dUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMi
XS5HUFVGaWx0ZXJNb2RlX2xpbmVhcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVu
Z2luZSJdLlRFWFRVUkVfTElORUFSX0xJTkVBUjoKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXIg
PSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX2xpbmVhcjsKKyAgICAgICAgICAgICAgICBt
aW5GaWx0ZXIgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX2xpbmVhcjsKKyAgICAgICAg
ICAgICAgICBtaXBtYXBGaWx0ZXIgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX25lYXJl
c3Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5URVhUVVJFX0xJTkVB
Ul9ORUFSRVNUOgorICAgICAgICAgICAgICAgIG1hZ0ZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQ
VUZpbHRlck1vZGVfbGluZWFyOworICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9IF9XZWJHUFVf
d2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0
YW50cyJdLkdQVUZpbHRlck1vZGVfbmVhcmVzdDsKKyAgICAgICAgICAgICAgICBtaXBtYXBGaWx0
ZXIgPSBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
WyJXZWJHUFVDb25zdGFudHMiXS5HUFVGaWx0ZXJNb2RlX25lYXJlc3Q7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1hZ0ZpbHRl
ciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFyOworICAgICAgICAgICAgICAg
IG1pbkZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGluZWFyOworICAgICAg
ICAgICAgICAgIG1pcG1hcEZpbHRlciA9IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUZpbHRlck1vZGVfbGlu
ZWFyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICBtYWdGaWx0ZXI6IG1hZ0ZpbHRlciwKKyAgICAgICAgICAgIG1pbkZpbHRl
cjogbWluRmlsdGVyLAorICAgICAgICAgICAgbWlwbWFwRmlsdGVyOiBtaXBtYXBGaWx0ZXIKKyAg
ICAgICAgfTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2dldFdyYXBwaW5n
TW9kZSA9IGZ1bmN0aW9uIChtb2RlKSB7CisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAg
ICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
RW5naW5lIl0uVEVYVFVSRV9XUkFQX0FERFJFU1NNT0RFOgorICAgICAgICAgICAgICAgIHJldHVy
biBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVBZGRyZXNzTW9kZV9yZXBlYXQ7CisgICAgICAgICAgICBjYXNl
IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5U
RVhUVVJFX0NMQU1QX0FERFJFU1NNT0RFOgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BV
X3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25z
dGFudHMiXS5HUFVBZGRyZXNzTW9kZV9jbGFtcFRvRWRnZTsKKyAgICAgICAgICAgIGNhc2UgX0Vu
Z2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdLlRFWFRV
UkVfTUlSUk9SX0FERFJFU1NNT0RFOgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dl
YmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFu
dHMiXS5HUFVBZGRyZXNzTW9kZV9taXJyb3JSZXBlYXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IldlYkdQVUNvbnN0YW50cyJdLkdQVUFkZHJlc3NNb2RlX3JlcGVhdDsKKyAgICB9OworICAgIFdl
YkdQVUVuZ2luZS5wcm90b3R5cGUuX2dldFNhbXBsZXJXcmFwcGluZ0Rlc2NyaXB0b3IgPSBmdW5j
dGlvbiAoaW50ZXJuYWxUZXh0dXJlKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBh
ZGRyZXNzTW9kZVU6IHRoaXMuX2dldFdyYXBwaW5nTW9kZShpbnRlcm5hbFRleHR1cmUuX2NhY2hl
ZFdyYXBVKSwKKyAgICAgICAgICAgIGFkZHJlc3NNb2RlVjogdGhpcy5fZ2V0V3JhcHBpbmdNb2Rl
KGludGVybmFsVGV4dHVyZS5fY2FjaGVkV3JhcFYpLAorICAgICAgICAgICAgYWRkcmVzc01vZGVX
OiB0aGlzLl9nZXRXcmFwcGluZ01vZGUoaW50ZXJuYWxUZXh0dXJlLl9jYWNoZWRXcmFwUiksCisg
ICAgICAgIH07CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRTYW1wbGVy
RGVzY3JpcHRvciA9IGZ1bmN0aW9uIChpbnRlcm5hbFRleHR1cmUpIHsKKyAgICAgICAgcmV0dXJu
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXNzaWduIl0oe30sIHRoaXMu
X2dldFNhbXBsZXJGaWx0ZXJEZXNjcmlwdG9yKGludGVybmFsVGV4dHVyZSksIHRoaXMuX2dldFNh
bXBsZXJXcmFwcGluZ0Rlc2NyaXB0b3IoaW50ZXJuYWxUZXh0dXJlKSk7CisgICAgfTsKKyAgICBX
ZWJHUFVFbmdpbmUucHJvdG90eXBlLmNyZWF0ZVRleHR1cmUgPSBmdW5jdGlvbiAodXJsQXJnLCBu
b01pcG1hcCwgaW52ZXJ0WSwgc2NlbmUsIHNhbXBsaW5nTW9kZSwgb25Mb2FkLCBvbkVycm9yLCBi
dWZmZXIsIGZhbGxCYWNrLCBmb3JtYXQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAg
ICAgICAgaWYgKHNhbXBsaW5nTW9kZSA9PT0gdm9pZCAwKSB7IHNhbXBsaW5nTW9kZSA9IF9jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9U
UklMSU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIGlmIChvbkxvYWQgPT09IHZvaWQgMCkg
eyBvbkxvYWQgPSBudWxsOyB9CisgICAgICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25F
cnJvciA9IG51bGw7IH0KKyAgICAgICAgaWYgKGJ1ZmZlciA9PT0gdm9pZCAwKSB7IGJ1ZmZlciA9
IG51bGw7IH0KKyAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19p
bnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW50ZXJuYWxUZXh0
dXJlIl0odGhpcywgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9VUkwpOwor
ICAgICAgICB2YXIgdXJsID0gU3RyaW5nKHVybEFyZyk7CisgICAgICAgIC8vIFRPRE8gV0VCR1BV
LiBGaW5kIGEgYmV0dGVyIHdheS4KKyAgICAgICAgLy8gVE9ETyBXRUJHUFUuIHRoaXMuX29wdGlv
bnMudGV4dHVyZVNpemUKKyAgICAgICAgdGV4dHVyZS51cmwgPSB1cmw7CisgICAgICAgIHRleHR1
cmUuZ2VuZXJhdGVNaXBNYXBzID0gIW5vTWlwbWFwOworICAgICAgICB0ZXh0dXJlLnNhbXBsaW5n
TW9kZSA9IHNhbXBsaW5nTW9kZTsKKyAgICAgICAgdGV4dHVyZS5pbnZlcnRZID0gaW52ZXJ0WTsK
KyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgdGV4dHVyZS5mb3JtYXQgPSBmb3Jt
YXQ7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHdlYmdsRW5naW5lVGV4dHVyZTsKKyAgICAgICAg
dmFyIG9uTG9hZEludGVybmFsID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGV4dHVyZS5p
c1JlYWR5ID0gd2ViZ2xFbmdpbmVUZXh0dXJlLmlzUmVhZHk7CisgICAgICAgICAgICB2YXIgd2lk
dGggPSB3ZWJnbEVuZ2luZVRleHR1cmUud2lkdGg7CisgICAgICAgICAgICB2YXIgaGVpZ2h0ID0g
d2ViZ2xFbmdpbmVUZXh0dXJlLmhlaWdodDsKKyAgICAgICAgICAgIHRleHR1cmUud2lkdGggPSB3
aWR0aDsKKyAgICAgICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAg
dGV4dHVyZS5iYXNlV2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHRleHR1cmUuYmFzZUhlaWdo
dCA9IGhlaWdodDsKKyAgICAgICAgICAgIHRleHR1cmUuX2lzUkdCRCA9IHdlYmdsRW5naW5lVGV4
dHVyZS5faXNSR0JEOworICAgICAgICAgICAgdGV4dHVyZS5fc3BoZXJpY2FsUG9seW5vbWlhbCA9
IHdlYmdsRW5naW5lVGV4dHVyZS5fc3BoZXJpY2FsUG9seW5vbWlhbDsKKyAgICAgICAgICAgIHZh
ciBtaXBNYXBzID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlNjYWxhciJdLkxvZzIoTWF0aC5tYXgod2lkdGgsIGhlaWdodCkpOworICAgICAgICAgICAg
bWlwTWFwcyA9IE1hdGguZmxvb3IobWlwTWFwcyk7CisgICAgICAgICAgICB2YXIgdGV4dHVyZUV4
dGVudCA9IHsKKyAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsCisgICAgICAgICAgICAgICAg
aGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAgICAgICAgZGVwdGg6IDEKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICB2YXIgdGV4dHVyZURlc2NyaXB0b3IgPSB7CisgICAgICAgICAgICAgICAg
ZGltZW5zaW9uOiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVUZXh0dXJlRGltZW5zaW9uXzJkLAorICAgICAg
ICAgICAgICAgIGZvcm1hdDogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVGV4dHVyZUZvcm1hdF9yZ2JhOHVu
b3JtLAorICAgICAgICAgICAgICAgIGFycmF5TGF5ZXJDb3VudDogMSwKKyAgICAgICAgICAgICAg
ICBtaXBMZXZlbENvdW50OiBub01pcG1hcCA/IDEgOiBtaXBNYXBzICsgMSwKKyAgICAgICAgICAg
ICAgICBzYW1wbGVDb3VudDogMSwKKyAgICAgICAgICAgICAgICBzaXplOiB0ZXh0dXJlRXh0ZW50
LAorICAgICAgICAgICAgICAgIHVzYWdlOiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVUZXh0dXJlVXNhZ2Vf
Q09QWV9EU1QgfCBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVUZXh0dXJlVXNhZ2VfU0FNUExFRAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIHZhciBncHVUZXh0dXJlID0gX3RoaXMuX2RldmljZS5jcmVh
dGVUZXh0dXJlKHRleHR1cmVEZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIHRleHR1cmUuX3dlYkdQ
VVRleHR1cmUgPSBncHVUZXh0dXJlOworICAgICAgICAgICAgaWYgKG5vTWlwbWFwKSB7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX3VwbG9hZEZyb21XZWJnbFRleHR1cmUod2ViZ2xFbmdpbmVUZXh0
dXJlLCBncHVUZXh0dXJlLCB3aWR0aCwgaGVpZ2h0LCAtMSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdXBsb2FkTWlwTWFwc0Zyb21X
ZWJnbFRleHR1cmUobWlwTWFwcywgd2ViZ2xFbmdpbmVUZXh0dXJlLCBncHVUZXh0dXJlLCB3aWR0
aCwgaGVpZ2h0LCAtMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0dXJlLl93ZWJH
UFVUZXh0dXJlVmlldyA9IGdwdVRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKyAgICAgICAg
ICAgIHdlYmdsRW5naW5lVGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0ZXh0dXJlLm9u
TG9hZGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGV4dHVyZSk7CisgICAgICAgICAgICB0
ZXh0dXJlLm9uTG9hZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICAgICAgaWYgKG9uTG9h
ZCkgeworICAgICAgICAgICAgICAgIG9uTG9hZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgICAgICB3ZWJnbEVuZ2luZVRleHR1cmUgPSB0aGlzLl9kZWNvZGVFbmdpbmUuY3JlYXRl
VGV4dHVyZSh1cmxBcmcsIG5vTWlwbWFwLCBpbnZlcnRZLCBzY2VuZSwgc2FtcGxpbmdNb2RlLCBv
bkxvYWRJbnRlcm5hbCwgb25FcnJvciwgYnVmZmVyLCBmYWxsQmFjaywgZm9ybWF0KTsKKyAgICAg
ICAgdGhpcy5faW50ZXJuYWxUZXh0dXJlc0NhY2hlLnB1c2godGV4dHVyZSk7CisgICAgICAgIHJl
dHVybiB0ZXh0dXJlOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5jcmVhdGVD
dWJlVGV4dHVyZSA9IGZ1bmN0aW9uIChyb290VXJsLCBzY2VuZSwgZmlsZXMsIG5vTWlwbWFwLCBv
bkxvYWQsIG9uRXJyb3IsIGZvcm1hdCwgZm9yY2VkRXh0ZW5zaW9uLCBjcmVhdGVQb2x5bm9taWFs
cywgbG9kU2NhbGUsIGxvZE9mZnNldCwgZmFsbGJhY2ssIGV4Y2x1ZGVMb2FkZXJzKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChvbkxvYWQgPT09IHZvaWQgMCkgeyBv
bkxvYWQgPSBudWxsOyB9CisgICAgICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJv
ciA9IG51bGw7IH0KKyAgICAgICAgaWYgKGZvcmNlZEV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IGZv
cmNlZEV4dGVuc2lvbiA9IG51bGw7IH0KKyAgICAgICAgaWYgKGNyZWF0ZVBvbHlub21pYWxzID09
PSB2b2lkIDApIHsgY3JlYXRlUG9seW5vbWlhbHMgPSBmYWxzZTsgfQorICAgICAgICBpZiAobG9k
U2NhbGUgPT09IHZvaWQgMCkgeyBsb2RTY2FsZSA9IDA7IH0KKyAgICAgICAgaWYgKGxvZE9mZnNl
dCA9PT0gdm9pZCAwKSB7IGxvZE9mZnNldCA9IDA7IH0KKyAgICAgICAgaWYgKGZhbGxiYWNrID09
PSB2b2lkIDApIHsgZmFsbGJhY2sgPSBudWxsOyB9CisgICAgICAgIGlmIChleGNsdWRlTG9hZGVy
cyA9PT0gdm9pZCAwKSB7IGV4Y2x1ZGVMb2FkZXJzID0gW107IH0KKyAgICAgICAgdmFyIHRleHR1
cmUgPSBmYWxsYmFjayA/IGZhbGxiYWNrIDogbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfaW50ZXJu
YWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkludGVybmFsVGV4dHVyZSJd
KHRoaXMsIF9NYXRlcmlhbHNfVGV4dHVyZXNfaW50ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIkludGVybmFsVGV4dHVyZSJdLkRBVEFTT1VSQ0VfQ1VCRSk7CisgICAg
ICAgIHRleHR1cmUuaXNDdWJlID0gdHJ1ZTsKKyAgICAgICAgdGV4dHVyZS51cmwgPSByb290VXJs
OworICAgICAgICB0ZXh0dXJlLmdlbmVyYXRlTWlwTWFwcyA9ICFub01pcG1hcDsKKyAgICAgICAg
Ly8gVE9ETyBXRUJHUFUuIEN1YmUgVGV4dHVyZSBTYW1wbGluZyBNb2RlLgorICAgICAgICB0ZXh0
dXJlLnNhbXBsaW5nTW9kZSA9IG5vTWlwbWFwID8gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5URVhUVVJFX0JJTElORUFSX1NBTVBMSU5HTU9ERSA6
IF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVY
VFVSRV9UUklMSU5FQVJfU0FNUExJTkdNT0RFOworICAgICAgICB0ZXh0dXJlLl9sb2RHZW5lcmF0
aW9uU2NhbGUgPSBsb2RTY2FsZTsKKyAgICAgICAgdGV4dHVyZS5fbG9kR2VuZXJhdGlvbk9mZnNl
dCA9IGxvZE9mZnNldDsKKyAgICAgICAgaWYgKCF0aGlzLl9kb05vdEhhbmRsZUNvbnRleHRMb3N0
KSB7CisgICAgICAgICAgICB0ZXh0dXJlLl9leHRlbnNpb24gPSBmb3JjZWRFeHRlbnNpb247Cisg
ICAgICAgICAgICB0ZXh0dXJlLl9maWxlcyA9IGZpbGVzOworICAgICAgICB9CisgICAgICAgIHZh
ciB3ZWJnbEVuZ2luZVRleHR1cmU7CisgICAgICAgIHZhciBvbkxvYWRJbnRlcm5hbCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHRleHR1cmUuaXNSZWFkeSA9IHdlYmdsRW5naW5lVGV4dHVy
ZS5pc1JlYWR5OworICAgICAgICAgICAgdmFyIHdpZHRoOworICAgICAgICAgICAgdmFyIGhlaWdo
dDsKKyAgICAgICAgICAgIGlmIChub01pcG1hcCkgeworICAgICAgICAgICAgICAgIHdpZHRoID0g
d2ViZ2xFbmdpbmVUZXh0dXJlLndpZHRoOworICAgICAgICAgICAgICAgIGhlaWdodCA9IHdlYmds
RW5naW5lVGV4dHVyZS5oZWlnaHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIFdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgU2FmYXJpIFRlY2huaWNhbCBQcmV2aWV3
IGJyYW5jaGVkIGJlZm9yZSBTYW1wbGVMZXZlbCgpIHdhcyBpbXBsZW1lbnRlZC4KKyAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxMzg1
CisgICAgICAgICAgICAgICAgdmFyIGN1YmVNYXBUZXh0dXJlQ2FwID0gMTY7CisgICAgICAgICAg
ICAgICAgaWYgKHdlYmdsRW5naW5lVGV4dHVyZS53aWR0aCA8IGN1YmVNYXBUZXh0dXJlQ2FwIHx8
IHdlYmdsRW5naW5lVGV4dHVyZS5oZWlnaHQgPCBjdWJlTWFwVGV4dHVyZUNhcCkKKyAgICAgICAg
ICAgICAgICAgICAgYWxlcnQoIlRleHR1cmUgdG9vIHNtYWxsIik7CisgICAgICAgICAgICAgICAg
d2lkdGggPSBjdWJlTWFwVGV4dHVyZUNhcDsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBjdWJl
TWFwVGV4dHVyZUNhcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBkZXB0aCA9IDE7
CisgICAgICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7CisgICAgICAgICAgICB0ZXh0dXJl
LmhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgIHRleHR1cmUuYmFzZVdpZHRoID0gd2lkdGg7
CisgICAgICAgICAgICB0ZXh0dXJlLmJhc2VIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICB0
ZXh0dXJlLmRlcHRoID0gZGVwdGg7CisgICAgICAgICAgICB0ZXh0dXJlLmJhc2VEZXB0aCA9IGRl
cHRoOworICAgICAgICAgICAgdGV4dHVyZS5faXNSR0JEID0gd2ViZ2xFbmdpbmVUZXh0dXJlLl9p
c1JHQkQ7CisgICAgICAgICAgICB0ZXh0dXJlLl9zcGhlcmljYWxQb2x5bm9taWFsID0gd2ViZ2xF
bmdpbmVUZXh0dXJlLl9zcGhlcmljYWxQb2x5bm9taWFsOworICAgICAgICAgICAgdmFyIG1pcE1h
cHMgPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2Nh
bGFyIl0uTG9nMih3aWR0aCk7CisgICAgICAgICAgICBtaXBNYXBzID0gTWF0aC5yb3VuZChtaXBN
YXBzKTsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlRXh0ZW50ID0geworICAgICAgICAgICAgICAg
IHdpZHRoOiB3aWR0aCwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCwKKyAgICAgICAg
ICAgICAgICBkZXB0aDogZGVwdGgsCisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIHRl
eHR1cmVEZXNjcmlwdG9yID0geworICAgICAgICAgICAgICAgIGRpbWVuc2lvbjogX1dlYkdQVV93
ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3Rh
bnRzIl0uR1BVVGV4dHVyZURpbWVuc2lvbl8yZCwKKyAgICAgICAgICAgICAgICBmb3JtYXQ6IF9X
ZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQ
VUNvbnN0YW50cyJdLkdQVVRleHR1cmVGb3JtYXRfcmdiYTh1bm9ybSwKKyAgICAgICAgICAgICAg
ICBhcnJheUxheWVyQ291bnQ6IDEsCisgICAgICAgICAgICAgICAgbWlwTGV2ZWxDb3VudDogbm9N
aXBtYXAgPyAxIDogbWlwTWFwcyArIDEsCisgICAgICAgICAgICAgICAgc2FtcGxlQ291bnQ6IDEs
CisgICAgICAgICAgICAgICAgc2l6ZTogdGV4dHVyZUV4dGVudCwKKyAgICAgICAgICAgICAgICB1
c2FnZTogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVGV4dHVyZVVzYWdlX0NPUFlfRFNUIHwgX1dlYkdQVV93
ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3Rh
bnRzIl0uR1BVVGV4dHVyZVVzYWdlX1NBTVBMRUQKKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB2YXIgZ3B1VGV4dHVyZSA9IF90aGlzLl9kZXZpY2UuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlRGVz
Y3JpcHRvcik7CisgICAgICAgICAgICB0ZXh0dXJlLl93ZWJHUFVUZXh0dXJlID0gZ3B1VGV4dHVy
ZTsKKyAgICAgICAgICAgIHZhciBmYWNlcyA9IFswXTsKKyAgICAgICAgICAgIGZvciAodmFyIF9p
ID0gMCwgZmFjZXNfMSA9IGZhY2VzOyBfaSA8IGZhY2VzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGZhY2UgPSBmYWNlc18xW19pXTsKKyAgICAgICAgICAgICAgICBpZiAo
bm9NaXBtYXApIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3VwbG9hZEZyb21XZWJnbFRl
eHR1cmUod2ViZ2xFbmdpbmVUZXh0dXJlLCBncHVUZXh0dXJlLCB3aWR0aCwgaGVpZ2h0LCBmYWNl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl91cGxvYWRNaXBNYXBzRnJvbVdlYmdsVGV4dHVyZShtaXBNYXBzLCB3
ZWJnbEVuZ2luZVRleHR1cmUsIGdwdVRleHR1cmUsIHdpZHRoLCBoZWlnaHQsIGZhY2UpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHR1cmUuX3dlYkdQ
VVRleHR1cmVWaWV3ID0gZ3B1VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworICAgICAgICAg
ICAgd2ViZ2xFbmdpbmVUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIG9uTG9hZCAmJiBv
bkxvYWQoKTsKKyAgICAgICAgfTsKKyAgICAgICAgd2ViZ2xFbmdpbmVUZXh0dXJlID0gdGhpcy5f
ZGVjb2RlRW5naW5lLmNyZWF0ZUN1YmVUZXh0dXJlKHJvb3RVcmwsIHNjZW5lLCBmaWxlcywgbm9N
aXBtYXAsIG9uTG9hZEludGVybmFsLCBvbkVycm9yLCBmb3JtYXQsIGZvcmNlZEV4dGVuc2lvbiwg
Y3JlYXRlUG9seW5vbWlhbHMsIGxvZFNjYWxlLCBsb2RPZmZzZXQsIGZhbGxiYWNrLCBleGNsdWRl
TG9hZGVycyk7CisgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dHVyZXNDYWNoZS5wdXNoKHRleHR1
cmUpOworICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5w
cm90b3R5cGUudXBkYXRlVGV4dHVyZVNhbXBsaW5nTW9kZSA9IGZ1bmN0aW9uIChzYW1wbGluZ01v
ZGUsIHRleHR1cmUpIHsKKyAgICAgICAgdGV4dHVyZS5zYW1wbGluZ01vZGUgPSBzYW1wbGluZ01v
ZGU7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnVwZGF0ZUR5bmFtaWNUZXh0
dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGNhbnZhcywgaW52ZXJ0WSwgcHJlbXVsQWxwaGEsIGZv
cm1hdCkgeworICAgICAgICBpZiAocHJlbXVsQWxwaGEgPT09IHZvaWQgMCkgeyBwcmVtdWxBbHBo
YSA9IGZhbHNlOyB9CisgICAgICAgIHRocm93ICJVbmltcGxlbWVudGVkIHVwZGF0ZUR5bmFtaWNU
ZXh0dXJlIG9uIFdlYkdQVSBzbyBmYXIiOworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3Rv
dHlwZS5zZXRUZXh0dXJlID0gZnVuY3Rpb24gKGNoYW5uZWwsIF8sIHRleHR1cmUsIG5hbWUpIHsK
KyAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRFZmZlY3QpIHsKKyAgICAgICAgICAgIHZhciBwaXBl
bGluZSA9IHRoaXMuX2N1cnJlbnRFZmZlY3QuX3BpcGVsaW5lQ29udGV4dDsKKyAgICAgICAgICAg
IGlmICghdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHBpcGVsaW5lLnNhbXBsZXJzW25hbWVd
ID0gbnVsbDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgaW50ZXJuYWxUZXh0dXJlID0gdGV4dHVyZS5nZXRJbnRlcm5hbFRleHR1cmUoKTsK
KyAgICAgICAgICAgIGlmIChpbnRlcm5hbFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBpbnRl
cm5hbFRleHR1cmUuX2NhY2hlZFdyYXBVID0gdGV4dHVyZS53cmFwVTsKKyAgICAgICAgICAgICAg
ICBpbnRlcm5hbFRleHR1cmUuX2NhY2hlZFdyYXBWID0gdGV4dHVyZS53cmFwVjsKKyAgICAgICAg
ICAgICAgICBpbnRlcm5hbFRleHR1cmUuX2NhY2hlZFdyYXBSID0gdGV4dHVyZS53cmFwUjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwaXBlbGluZS5zYW1wbGVyc1tuYW1lXSkgewor
ICAgICAgICAgICAgICAgIHBpcGVsaW5lLnNhbXBsZXJzW25hbWVdLnRleHR1cmUgPSBpbnRlcm5h
bFRleHR1cmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBUT0RPIFdFQkdQVS4gMTIxIG1hcHBpbmcgc2FtcGxlcnMgPC0+IGF2YWlsYWJsZVNh
bXBsZXJzCisgICAgICAgICAgICAgICAgdmFyIGF2YWlsYWJsZVNhbXBsZXIgPSBwaXBlbGluZS5h
dmFpbGFibGVTYW1wbGVyc1tuYW1lXTsKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlU2Ft
cGxlcikgeworICAgICAgICAgICAgICAgICAgICBwaXBlbGluZS5zYW1wbGVyc1tuYW1lXSA9IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNldEluZGV4OiBhdmFpbGFibGVTYW1wbGVyLnNldElu
ZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUJpbmRpbmc6IGF2YWlsYWJsZVNh
bXBsZXIuYmluZGluZ0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlckJpbmRp
bmc6IGF2YWlsYWJsZVNhbXBsZXIuYmluZGluZ0luZGV4ICsgMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmU6IGludGVybmFsVGV4dHVyZQorICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAg
V2ViR1BVRW5naW5lLnByb3RvdHlwZS5iaW5kU2FtcGxlcnMgPSBmdW5jdGlvbiAoZWZmZWN0KSB7
IH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fYmluZFRleHR1cmVEaXJlY3RseSA9IGZ1
bmN0aW9uICh0YXJnZXQsIHRleHR1cmUpIHsKKyAgICAgICAgaWYgKHRoaXMuX2JvdW5kVGV4dHVy
ZXNDYWNoZVt0aGlzLl9hY3RpdmVDaGFubmVsXSAhPT0gdGV4dHVyZSkgeworICAgICAgICAgICAg
dGhpcy5fYm91bmRUZXh0dXJlc0NhY2hlW3RoaXMuX2FjdGl2ZUNoYW5uZWxdID0gdGV4dHVyZTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlw
ZS5fYmluZFRleHR1cmUgPSBmdW5jdGlvbiAoY2hhbm5lbCwgdGV4dHVyZSkgeworICAgICAgICBp
ZiAoY2hhbm5lbCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9iaW5kVGV4dHVyZURpcmVjdGx5KDAsIHRleHR1cmUpOworICAgIH07CisgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl91cGxvYWRDb21wcmVzc2Vk
RGF0YVRvVGV4dHVyZURpcmVjdGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBkYXRhLCBmYWNlSW5kZXgsIGxvZCkgeworICAgICAgICBpZiAoZmFj
ZUluZGV4ID09PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAgICAgICBpZiAobG9kID09
PSB2b2lkIDApIHsgbG9kID0gMDsgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBX
ZWJHUFVFbmdpbmUucHJvdG90eXBlLl91cGxvYWREYXRhVG9UZXh0dXJlRGlyZWN0bHkgPSBmdW5j
dGlvbiAodGV4dHVyZSwgaW1hZ2VEYXRhLCBmYWNlSW5kZXgsIGxvZCkgeworICAgICAgICBpZiAo
ZmFjZUluZGV4ID09PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAgICAgICBpZiAobG9k
ID09PSB2b2lkIDApIHsgbG9kID0gMDsgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl91cGxvYWRBcnJheUJ1ZmZlclZpZXdUb1RleHR1cmUg
PSBmdW5jdGlvbiAodGV4dHVyZSwgaW1hZ2VEYXRhLCBmYWNlSW5kZXgsIGxvZCkgeworICAgICAg
ICBpZiAoZmFjZUluZGV4ID09PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAgICAgICBp
ZiAobG9kID09PSB2b2lkIDApIHsgbG9kID0gMDsgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4g
Ki8KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl91cGxvYWRJbWFnZVRvVGV4dHVyZSA9IGZ1
bmN0aW9uICh0ZXh0dXJlLCBpbWFnZSwgZmFjZUluZGV4LCBsb2QpIHsKKyAgICAgICAgaWYgKGZh
Y2VJbmRleCA9PT0gdm9pZCAwKSB7IGZhY2VJbmRleCA9IDA7IH0KKyAgICAgICAgaWYgKGxvZCA9
PT0gdm9pZCAwKSB7IGxvZCA9IDA7IH0KKyAgICB9OworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXIgVGFyZ2V0IFRl
eHR1cmVzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXZWJHUFVFbmdpbmUucHJv
dG90eXBlLmNyZWF0ZVJlbmRlclRhcmdldFRleHR1cmUgPSBmdW5jdGlvbiAoc2l6ZSwgb3B0aW9u
cykgeworICAgICAgICB2YXIgZnVsbE9wdGlvbnMgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19y
ZW5kZXJUYXJnZXRDcmVhdGlvbk9wdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
UmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25zIl0oKTsKKyAgICAgICAgaWYgKG9wdGlvbnMgIT09
IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAg
IGZ1bGxPcHRpb25zLmdlbmVyYXRlTWlwTWFwcyA9IG9wdGlvbnMuZ2VuZXJhdGVNaXBNYXBzOwor
ICAgICAgICAgICAgZnVsbE9wdGlvbnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlciA9IG9wdGlvbnMuZ2Vu
ZXJhdGVEZXB0aEJ1ZmZlciA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuZ2VuZXJhdGVE
ZXB0aEJ1ZmZlcjsKKyAgICAgICAgICAgIGZ1bGxPcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZl
ciA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlRGVwdGhCdWZmZXIgJiYgb3B0aW9ucy5nZW5lcmF0ZVN0
ZW5jaWxCdWZmZXI7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy50eXBlID0gb3B0aW9ucy50eXBl
ID09PSB1bmRlZmluZWQgPyBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCA6IG9wdGlvbnMudHlwZTsKKyAg
ICAgICAgICAgIGZ1bGxPcHRpb25zLnNhbXBsaW5nTW9kZSA9IG9wdGlvbnMuc2FtcGxpbmdNb2Rl
ID09PSB1bmRlZmluZWQgPyBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IkNvbnN0YW50cyJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERSA6IG9wdGlvbnMuc2Ft
cGxpbmdNb2RlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZnVsbE9w
dGlvbnMuZ2VuZXJhdGVNaXBNYXBzID0gb3B0aW9uczsKKyAgICAgICAgICAgIGZ1bGxPcHRpb25z
LmdlbmVyYXRlRGVwdGhCdWZmZXIgPSB0cnVlOworICAgICAgICAgICAgZnVsbE9wdGlvbnMuZ2Vu
ZXJhdGVTdGVuY2lsQnVmZmVyID0gZmFsc2U7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy50eXBl
ID0gX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5U
RVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7CisgICAgICAgICAgICBmdWxsT3B0aW9ucy5zYW1wbGlu
Z01vZGUgPSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50
cyJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERTsKKyAgICAgICAgfQorICAgICAgICB2
YXIgdGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJJbnRlcm5hbFRleHR1cmUiXSh0aGlzLCBfTWF0ZXJp
YWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9f
WyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09VUkNFX1JFTkRFUlRBUkdFVCk7CisgICAgICAgIHZh
ciB3aWR0aCA9IHNpemUud2lkdGggfHwgc2l6ZTsKKyAgICAgICAgdmFyIGhlaWdodCA9IHNpemUu
aGVpZ2h0IHx8IHNpemU7CisgICAgICAgIHRleHR1cmUuX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IHt9
OworICAgICAgICB0ZXh0dXJlLl9mcmFtZWJ1ZmZlciA9IHt9OworICAgICAgICB0ZXh0dXJlLmJh
c2VXaWR0aCA9IHdpZHRoOworICAgICAgICB0ZXh0dXJlLmJhc2VIZWlnaHQgPSBoZWlnaHQ7Cisg
ICAgICAgIHRleHR1cmUud2lkdGggPSB3aWR0aDsKKyAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBo
ZWlnaHQ7CisgICAgICAgIHRleHR1cmUuaXNSZWFkeSA9IHRydWU7CisgICAgICAgIHRleHR1cmUu
c2FtcGxlcyA9IDE7CisgICAgICAgIHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzID0gZnVsbE9wdGlv
bnMuZ2VuZXJhdGVNaXBNYXBzID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICB0ZXh0dXJlLnNhbXBs
aW5nTW9kZSA9IGZ1bGxPcHRpb25zLnNhbXBsaW5nTW9kZTsKKyAgICAgICAgdGV4dHVyZS50eXBl
ID0gZnVsbE9wdGlvbnMudHlwZTsKKyAgICAgICAgdGV4dHVyZS5fZ2VuZXJhdGVEZXB0aEJ1ZmZl
ciA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlRGVwdGhCdWZmZXI7CisgICAgICAgIHRleHR1cmUuX2dl
bmVyYXRlU3RlbmNpbEJ1ZmZlciA9IGZ1bGxPcHRpb25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA/
IHRydWUgOiBmYWxzZTsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxUZXh0dXJlc0NhY2hlLnB1c2go
dGV4dHVyZSk7CisgICAgICAgIHJldHVybiB0ZXh0dXJlOworICAgIH07CisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRl
ciBDb21tYW5kcworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLyoqCisgICAgICog
QmVnaW4gYSBuZXcgZnJhbWUKKyAgICAgKi8KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmJl
Z2luRnJhbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuYmVnaW5G
cmFtZS5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl91cGxvYWRFbmNvZGVyID0gdGhpcy5fZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKHRoaXMuX3VwbG9hZEVuY29kZXJEZXNjcmlwdG9yKTsK
KyAgICAgICAgdGhpcy5fcmVuZGVyRW5jb2RlciA9IHRoaXMuX2RldmljZS5jcmVhdGVDb21tYW5k
RW5jb2Rlcih0aGlzLl9yZW5kZXJFbmNvZGVyRGVzY3JpcHRvcik7CisgICAgfTsKKyAgICBXZWJH
UFVFbmdpbmUucHJvdG90eXBlLl9zaG91bGRPbmx5VXBkYXRlQ2FtZXJhcyA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Zyb3plbkNvbW1hbmRzICE9PSBudWxsOworICAgIH07
CisgICAgLyoqCisgICAgICogRW5kIHRoZSBjdXJyZW50IGZyYW1lCisgICAgICovCisgICAgV2Vi
R1BVRW5naW5lLnByb3RvdHlwZS5lbmRGcmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy5fZW5kUmVuZGVyUGFzcygpOworICAgICAgICBpZiAodGhpcy5fZnJlZXplQ29tbWFuZHMgJiYg
dGhpcy5fZnJvemVuQ29tbWFuZHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2NvbW1hbmRCdWZmZXJz
WzBdID0gdGhpcy5fZnJvemVuQ29tbWFuZHNbMF07CisgICAgICAgICAgICB0aGlzLl9jb21tYW5k
QnVmZmVyc1sxXSA9IHRoaXMuX2Zyb3plbkNvbW1hbmRzWzFdOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGhpcy5fY29tbWFuZEJ1ZmZlcnNbMF0gPSB0aGlzLl91cGxv
YWRFbmNvZGVyLmZpbmlzaCgpOworICAgICAgICAgICAgdGhpcy5fY29tbWFuZEJ1ZmZlcnNbMV0g
PSB0aGlzLl9yZW5kZXJFbmNvZGVyLmZpbmlzaCgpOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLl9mcmVlemVDb21tYW5kcyAmJiAhdGhpcy5fZnJvemVuQ29tbWFuZHMpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2Zyb3plbkNvbW1hbmRzID0gW107CisgICAgICAgICAgICB0aGlzLl9mcm96ZW5D
b21tYW5kc1swXSA9IHRoaXMuX2NvbW1hbmRCdWZmZXJzWzBdOworICAgICAgICAgICAgdGhpcy5f
ZnJvemVuQ29tbWFuZHNbMV0gPSB0aGlzLl9jb21tYW5kQnVmZmVyc1sxXTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9kZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQodGhpcy5fY29tbWFuZEJ1ZmZl
cnMpOworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmVuZEZyYW1lLmNhbGwodGhpcyk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBGcmVlemVzIHRoZSBjdXJyZW50IGxpc3Qgb2YgY29tbWFuZHMg
dG8gc3BlZWQgdXAgcmVuZGVyaW5nIG9mIHN1YiBzZXF1ZW50IGZyYW1lcy4KKyAgICAgKi8KKyAg
ICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLmZyZWV6ZUNvbW1hbmRzID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB0aGlzLl9mcmVlemVDb21tYW5kcyA9IHRydWU7CisgICAgICAgIHRoaXMuX2Zyb3pl
bkNvbW1hbmRzID0gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEZyZWV6ZXMgdGhlIGN1
cnJlbnQgbGlzdCBvZiBjb21tYW5kcyB0byBzcGVlZCB1cCByZW5kZXJpbmcgb2Ygc3ViIHNlcXVl
bnQgZnJhbWVzLgorICAgICAqLworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUudW5GcmVlemVD
b21tYW5kcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fZnJlZXplQ29tbWFuZHMgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5fZnJvemVuQ29tbWFuZHMgPSBudWxsOworICAgIH07CisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlbmRlciBQYXNzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXZWJHUFVF
bmdpbmUucHJvdG90eXBlLl9zdGFydE1haW5SZW5kZXJQYXNzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAodGhpcy5fY3VycmVudFJlbmRlclBhc3MpIHsKKyAgICAgICAgICAgIHRoaXMuX2Vu
ZFJlbmRlclBhc3MoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXNvbHZlIGluIGNhc2Ugb2Yg
TVNBQQorICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5hbnRpYWxpYXNpbmcpIHsKKyAgICAgICAg
ICAgIHRoaXMuX21haW5Db2xvckF0dGFjaG1lbnRzWzBdLnJlc29sdmVUYXJnZXQgPSB0aGlzLl9z
d2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKS5jcmVhdGVWaWV3KCk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9tYWluQ29sb3JBdHRhY2htZW50c1swXS5h
dHRhY2htZW50ID0gdGhpcy5fc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCkuY3JlYXRlRGVm
YXVsdFZpZXcoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50UmVuZGVyUGFzcyA9
IHRoaXMuX3JlbmRlckVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHsKKyAgICAgICAgICAgIGNvbG9y
QXR0YWNobWVudHM6IHRoaXMuX21haW5Db2xvckF0dGFjaG1lbnRzLAorICAgICAgICAgICAgZGVw
dGhTdGVuY2lsQXR0YWNobWVudDogdGhpcy5fbWFpbkRlcHRoQXR0YWNobWVudAorICAgICAgICB9
KTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2VuZFJlbmRlclBhc3MgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50UmVuZGVyUGFzcykgeworICAg
ICAgICAgICAgdGhpcy5fY3VycmVudFJlbmRlclBhc3MuZW5kUGFzcygpOworICAgICAgICAgICAg
dGhpcy5fY3VycmVudFJlbmRlclBhc3MgPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICBX
ZWJHUFVFbmdpbmUucHJvdG90eXBlLmJpbmRGcmFtZWJ1ZmZlciA9IGZ1bmN0aW9uICh0ZXh0dXJl
LCBmYWNlSW5kZXgsIHJlcXVpcmVkV2lkdGgsIHJlcXVpcmVkSGVpZ2h0LCBmb3JjZUZ1bGxzY3Jl
ZW5WaWV3cG9ydCkgeworICAgICAgICBpZiAodGhpcy5fY3VycmVudFJlbmRlclRhcmdldCkgewor
ICAgICAgICAgICAgdGhpcy51bkJpbmRGcmFtZWJ1ZmZlcih0aGlzLl9jdXJyZW50UmVuZGVyVGFy
Z2V0KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0ID0gdGV4
dHVyZTsKKyAgICAgICAgdGhpcy5fY3VycmVudEZyYW1lYnVmZmVyID0gdGV4dHVyZS5fTVNBQUZy
YW1lYnVmZmVyID8gdGV4dHVyZS5fTVNBQUZyYW1lYnVmZmVyIDogdGV4dHVyZS5fZnJhbWVidWZm
ZXI7CisgICAgICAgIGlmICh0aGlzLl9jYWNoZWRWaWV3cG9ydCAmJiAhZm9yY2VGdWxsc2NyZWVu
Vmlld3BvcnQpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0Vmlld3BvcnQodGhpcy5fY2FjaGVkVmll
d3BvcnQsIHJlcXVpcmVkV2lkdGgsIHJlcXVpcmVkSGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH07
CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS51bkJpbmRGcmFtZWJ1ZmZlciA9IGZ1bmN0aW9u
ICh0ZXh0dXJlLCBkaXNhYmxlR2VuZXJhdGVNaXBNYXBzLCBvbkJlZm9yZVVuYmluZCkgeworICAg
ICAgICBpZiAoZGlzYWJsZUdlbmVyYXRlTWlwTWFwcyA9PT0gdm9pZCAwKSB7IGRpc2FibGVHZW5l
cmF0ZU1pcE1hcHMgPSBmYWxzZTsgfQorICAgICAgICB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0
ID0gbnVsbDsKKyAgICAgICAgaWYgKG9uQmVmb3JlVW5iaW5kKSB7CisgICAgICAgICAgICBpZiAo
dGV4dHVyZS5fTVNBQUZyYW1lYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVu
dEZyYW1lYnVmZmVyID0gdGV4dHVyZS5fZnJhbWVidWZmZXI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBvbkJlZm9yZVVuYmluZCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2N1cnJl
bnRGcmFtZWJ1ZmZlciA9IG51bGw7CisgICAgfTsKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRUb3BvbG9n
eSA9IGZ1bmN0aW9uIChmaWxsTW9kZSkgeworICAgICAgICBzd2l0Y2ggKGZpbGxNb2RlKSB7Cisg
ICAgICAgICAgICAvLyBUcmlhbmdsZSB2aWV3cworICAgICAgICAgICAgY2FzZSBfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RyaWFu
Z2xlRmlsbE1vZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVBy
aW1pdGl2ZVRvcG9sb2d5X3RyaWFuZ2xlTGlzdDsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9Qb2lu
dEZpbGxNb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVQcmlt
aXRpdmVUb3BvbG9neV9wb2ludExpc3Q7CisgICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfV2lyZUZyYW1l
RmlsbE1vZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVByaW1p
dGl2ZVRvcG9sb2d5X2xpbmVMaXN0OworICAgICAgICAgICAgLy8gRHJhdyBtb2RlcworICAgICAg
ICAgICAgY2FzZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0
YW50cyJdLk1BVEVSSUFMX1BvaW50TGlzdERyYXdNb2RlOgorICAgICAgICAgICAgICAgIHJldHVy
biBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVQcmltaXRpdmVUb3BvbG9neV9wb2ludExpc3Q7CisgICAgICAg
ICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3Rh
bnRzIl0uTUFURVJJQUxfTGluZUxpc3REcmF3TW9kZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
X1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2Vi
R1BVQ29uc3RhbnRzIl0uR1BVUHJpbWl0aXZlVG9wb2xvZ3lfbGluZUxpc3Q7CisgICAgICAgICAg
ICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRz
Il0uTUFURVJJQUxfTGluZUxvb3BEcmF3TW9kZToKKyAgICAgICAgICAgICAgICAvLyByZXR1cm4g
dGhpcy5fZ2wuTElORV9MT09QOworICAgICAgICAgICAgICAgIC8vIFRPRE8gV0VCR1BVLiBMaW5l
IExvb3AgTW9kZSBGYWxsYmFjayBhdCBidWZmZXIgbG9hZCB0aW1lLgorICAgICAgICAgICAgICAg
IHRocm93ICJMaW5lTG9vcCBpcyBhbiB1bnN1cHBvcnRlZCBmaWxsbW9kZSBpbiBXZWJHUFUiOwor
ICAgICAgICAgICAgY2FzZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IkNvbnN0YW50cyJdLk1BVEVSSUFMX0xpbmVTdHJpcERyYXdNb2RlOgorICAgICAgICAgICAgICAg
IHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVQcmltaXRpdmVUb3BvbG9neV9saW5lU3RyaXA7Cisg
ICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
Q29uc3RhbnRzIl0uTUFURVJJQUxfVHJpYW5nbGVTdHJpcERyYXdNb2RlOgorICAgICAgICAgICAg
ICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVQcmltaXRpdmVUb3BvbG9neV90cmlhbmdsZVN0
cmlwOworICAgICAgICAgICAgY2FzZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV84X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RyaWFuZ2xlRmFuRHJhd01vZGU6CisgICAgICAg
ICAgICAgICAgLy8gcmV0dXJuIHRoaXMuX2dsLlRSSUFOR0xFX0ZBTjsKKyAgICAgICAgICAgICAg
ICAvLyBUT0RPIFdFQkdQVS4gVHJpYW5nbGUgRmFuIE1vZGUgRmFsbGJhY2sgYXQgYnVmZmVyIGxv
YWQgdGltZS4KKyAgICAgICAgICAgICAgICB0aHJvdyAiVHJpYW5nbGVGYW4gaXMgYW4gdW5zdXBw
b3J0ZWQgZmlsbG1vZGUgaW4gV2ViR1BVIjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVByaW1pdGl2ZVRvcG9sb2d5X3RyaWFu
Z2xlTGlzdDsKKyAgICAgICAgfQorICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5f
Z2V0Q29tcGFyZUZ1bmN0aW9uID0gZnVuY3Rpb24gKGNvbXBhcmVGdW5jdGlvbikgeworICAgICAg
ICBzd2l0Y2ggKGNvbXBhcmVGdW5jdGlvbikgeworICAgICAgICAgICAgY2FzZSBfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLkFMV0FZUzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQ29tcGFyZUZ1bmN0aW9uX2Fsd2F5
czsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJDb25zdGFudHMiXS5FUVVBTDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93
ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3Rh
bnRzIl0uR1BVQ29tcGFyZUZ1bmN0aW9uX2VxdWFsOworICAgICAgICAgICAgY2FzZSBfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLkdSRUFURVI6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUNvbXBhcmVGdW5jdGlvbl9n
cmVhdGVyOworICAgICAgICAgICAgY2FzZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIkNvbnN0YW50cyJdLkdFUVVBTDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dl
YkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BV
Q29uc3RhbnRzIl0uR1BVQ29tcGFyZUZ1bmN0aW9uX2dyZWF0ZXJFcXVhbDsKKyAgICAgICAgICAg
IGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMi
XS5MRVNTOgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVDb21wYXJl
RnVuY3Rpb25fbGVzczsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5MRVFVQUw6CisgICAgICAgICAgICAgICAgcmV0
dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IldlYkdQVUNvbnN0YW50cyJdLkdQVUNvbXBhcmVGdW5jdGlvbl9sZXNzRXF1YWw7CisgICAgICAg
ICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3Rh
bnRzIl0uTkVWRVI6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUNv
bXBhcmVGdW5jdGlvbl9uZXZlcjsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5OT1RFUVVBTDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQ29tcGFyZUZ1bmN0aW9uX25vdEVxdWFsOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJn
cHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRz
Il0uR1BVQ29tcGFyZUZ1bmN0aW9uX2xlc3M7CisgICAgICAgIH0KKyAgICB9OworICAgIFdlYkdQ
VUVuZ2luZS5wcm90b3R5cGUuX2dldE9wRnVuY3Rpb24gPSBmdW5jdGlvbiAob3BlcmF0aW9uLCBk
ZWZhdWx0T3ApIHsKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKKyAgICAgICAgICAgIGNh
c2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5L
RUVQOgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVTdGVuY2lsT3Bl
cmF0aW9uX2tlZXA7CisgICAgICAgICAgICBjYXNlIF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uWkVSTzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
X1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2Vi
R1BVQ29uc3RhbnRzIl0uR1BVU3RlbmNpbE9wZXJhdGlvbl96ZXJvOworICAgICAgICAgICAgY2Fz
ZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLlJF
UExBQ0U6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0ZW5jaWxP
cGVyYXRpb25fcmVwbGFjZTsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5JTlZFUlQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0ZW5jaWxPcGVyYXRpb25faW52ZXJ0OworICAgICAg
ICAgICAgY2FzZSBfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0
YW50cyJdLklOQ1I6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0
ZW5jaWxPcGVyYXRpb25faW5jcmVtZW50Q2xhbXA7CisgICAgICAgICAgICBjYXNlIF9jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uREVDUjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVU3RlbmNpbE9wZXJhdGlvbl9kZWNy
ZW1lbnRDbGFtcDsKKyAgICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5JTkNSX1dSQVA6CisgICAgICAgICAgICAgICAgcmV0
dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IldlYkdQVUNvbnN0YW50cyJdLkdQVVN0ZW5jaWxPcGVyYXRpb25faW5jcmVtZW50V3JhcDsKKyAg
ICAgICAgICAgIGNhc2UgX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJD
b25zdGFudHMiXS5ERUNSX1dSQVA6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2Vi
Z3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50
cyJdLkdQVVN0ZW5jaWxPcGVyYXRpb25fZGVjcmVtZW50V3JhcDsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRPcDsKKyAgICAgICAgfQorICAgIH07
CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZ2V0RGVwdGhTdGVuY2lsU3RhdGVEZXNjcmlw
dG9yID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBUT0RPIFdFQkdQVS4gRGVwdGggU3RhdGUg
YWNjb3JkaW5nIHRvIHRoZSBjYWNoZWQgc3RhdGUuCisgICAgICAgIC8vIEFuZCB0aGUgY3VycmVu
dCByZW5kZXIgcGFzcyBhdHRhY2htZW50IHNldHVwLgorICAgICAgICB2YXIgc3RlbmNpbEZyb250
QmFjayA9IHsKKyAgICAgICAgICAgIGNvbXBhcmU6IHRoaXMuX2dldENvbXBhcmVGdW5jdGlvbih0
aGlzLl9zdGVuY2lsU3RhdGUuc3RlbmNpbEZ1bmMpLAorICAgICAgICAgICAgZGVwdGhGYWlsT3A6
IHRoaXMuX2dldE9wRnVuY3Rpb24odGhpcy5fc3RlbmNpbFN0YXRlLnN0ZW5jaWxPcERlcHRoRmFp
bCwgX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
V2ViR1BVQ29uc3RhbnRzIl0uR1BVU3RlbmNpbE9wZXJhdGlvbl9rZWVwKSwKKyAgICAgICAgICAg
IGZhaWxPcDogdGhpcy5fZ2V0T3BGdW5jdGlvbih0aGlzLl9zdGVuY2lsU3RhdGUuc3RlbmNpbE9w
U3RlbmNpbEZhaWwsIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0ZW5jaWxPcGVyYXRpb25fa2VlcCksCisg
ICAgICAgICAgICBwYXNzT3A6IHRoaXMuX2dldE9wRnVuY3Rpb24odGhpcy5fc3RlbmNpbFN0YXRl
LnN0ZW5jaWxPcFN0ZW5jaWxEZXB0aFBhc3MsIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVN0ZW5jaWxPcGVy
YXRpb25fcmVwbGFjZSkKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IGRlcHRoV3JpdGVFbmFibGVkOiB0aGlzLmdldERlcHRoV3JpdGUoKSwKKyAgICAgICAgICAgIGRl
cHRoQ29tcGFyZTogdGhpcy5fZ2V0Q29tcGFyZUZ1bmN0aW9uKHRoaXMuZ2V0RGVwdGhGdW5jdGlv
bigpKSwKKyAgICAgICAgICAgIGZvcm1hdDogImRlcHRoMzJmbG9hdC1zdGVuY2lsOCIsCisgICAg
ICAgICAgICBzdGVuY2lsRnJvbnQ6IHN0ZW5jaWxGcm9udEJhY2ssCisgICAgICAgICAgICBzdGVu
Y2lsQmFjazogc3RlbmNpbEZyb250QmFjaywKKyAgICAgICAgICAgIHN0ZW5jaWxSZWFkTWFzazog
dGhpcy5fc3RlbmNpbFN0YXRlLnN0ZW5jaWxGdW5jTWFzaywKKyAgICAgICAgICAgIHN0ZW5jaWxX
cml0ZU1hc2s6IHRoaXMuX3N0ZW5jaWxTdGF0ZS5zdGVuY2lsTWFzaywKKyAgICAgICAgfTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNldCB2YXJpb3VzIHN0YXRlcyB0byB0aGUgd2ViR0wgY29u
dGV4dAorICAgICAqIEBwYXJhbSBjdWxsaW5nIGRlZmluZXMgYmFja2ZhY2UgY3VsbGluZyBzdGF0
ZQorICAgICAqIEBwYXJhbSB6T2Zmc2V0IGRlZmluZXMgdGhlIHZhbHVlIHRvIGFwcGx5IHRvIHpP
ZmZzZXQgKDAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gZm9yY2UgZGVmaW5lcyBpZiBzdGF0
ZXMgbXVzdCBiZSBhcHBsaWVkIGV2ZW4gaWYgY2FjaGUgaXMgdXAgdG8gZGF0ZQorICAgICAqIEBw
YXJhbSByZXZlcnNlU2lkZSBkZWZpbmVzIGlmIGN1bGxpbmcgbXVzdCBiZSByZXZlcnNlZCAoQ0NX
IGluc3RlYWQgb2YgQ1cgYW5kIENXIGluc3RlYWQgb2YgQ0NXKQorICAgICAqLworICAgIFdlYkdQ
VUVuZ2luZS5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAoY3VsbGluZywgek9mZnNldCwg
Zm9yY2UsIHJldmVyc2VTaWRlKSB7CisgICAgICAgIGlmICh6T2Zmc2V0ID09PSB2b2lkIDApIHsg
ek9mZnNldCA9IDA7IH0KKyAgICAgICAgaWYgKHJldmVyc2VTaWRlID09PSB2b2lkIDApIHsgcmV2
ZXJzZVNpZGUgPSBmYWxzZTsgfQorICAgICAgICAvLyBDdWxsaW5nCisgICAgICAgIGlmICh0aGlz
Ll9kZXB0aEN1bGxpbmdTdGF0ZS5jdWxsICE9PSBjdWxsaW5nIHx8IGZvcmNlKSB7CisgICAgICAg
ICAgICB0aGlzLl9kZXB0aEN1bGxpbmdTdGF0ZS5jdWxsID0gY3VsbGluZzsKKyAgICAgICAgfQor
ICAgICAgICAvLyBDdWxsIGZhY2UKKyAgICAgICAgLy8gdmFyIGN1bGxGYWNlID0gdGhpcy5jdWxs
QmFja0ZhY2VzID8gdGhpcy5fZ2wuQkFDSyA6IHRoaXMuX2dsLkZST05UOworICAgICAgICB2YXIg
Y3VsbEZhY2UgPSB0aGlzLmN1bGxCYWNrRmFjZXMgPyAxIDogMjsKKyAgICAgICAgaWYgKHRoaXMu
X2RlcHRoQ3VsbGluZ1N0YXRlLmN1bGxGYWNlICE9PSBjdWxsRmFjZSB8fCBmb3JjZSkgeworICAg
ICAgICAgICAgdGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUuY3VsbEZhY2UgPSBjdWxsRmFjZTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBaIG9mZnNldAorICAgICAgICB0aGlzLnNldFpPZmZzZXQoek9m
ZnNldCk7CisgICAgICAgIC8vIEZyb250IGZhY2UKKyAgICAgICAgLy8gdmFyIGZyb250RmFjZSA9
IHJldmVyc2VTaWRlID8gdGhpcy5fZ2wuQ1cgOiB0aGlzLl9nbC5DQ1c7CisgICAgICAgIHZhciBm
cm9udEZhY2UgPSByZXZlcnNlU2lkZSA/IDEgOiAyOworICAgICAgICBpZiAodGhpcy5fZGVwdGhD
dWxsaW5nU3RhdGUuZnJvbnRGYWNlICE9PSBmcm9udEZhY2UgfHwgZm9yY2UpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2RlcHRoQ3VsbGluZ1N0YXRlLmZyb250RmFjZSA9IGZyb250RmFjZTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZ2V0RnJvbnRGYWNlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBzd2l0Y2ggKHRoaXMuX2RlcHRoQ3VsbGluZ1N0YXRlLmZy
b250RmFjZSkgeworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIHJldHVybiBf
V2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJH
UFVDb25zdGFudHMiXS5HUFVGcm9udEZhY2VfY3c7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVGcm9udEZhY2VfY2N3OworICAg
ICAgICB9CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRDdWxsTW9kZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2RlcHRoQ3VsbGluZ1N0YXRlLmN1bGwg
PT09IGZhbHNlKSB7CisgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQ3VsbE1v
ZGVfbm9uZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZGVwdGhDdWxsaW5nU3RhdGUu
Y3VsbEZhY2UgPT09IDIpIHsKKyAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVD
dWxsTW9kZV9mcm9udDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJl
dHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
WyJXZWJHUFVDb25zdGFudHMiXS5HUFVDdWxsTW9kZV9iYWNrOworICAgICAgICB9CisgICAgfTsK
KyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRSYXN0ZXJpemF0aW9uU3RhdGVEZXNjcmlw
dG9yID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgZnJvbnRG
YWNlOiB0aGlzLl9nZXRGcm9udEZhY2UoKSwKKyAgICAgICAgICAgIGN1bGxNb2RlOiB0aGlzLl9n
ZXRDdWxsTW9kZSgpLAorICAgICAgICAgICAgZGVwdGhCaWFzOiB0aGlzLl9kZXB0aEN1bGxpbmdT
dGF0ZS56T2Zmc2V0LAorICAgICAgICB9OworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3Rv
dHlwZS5fZ2V0V3JpdGVNYXNrID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fX2Nv
bG9yV3JpdGUpIHsKKyAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVDb2xvcldy
aXRlQml0c19BTEw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQ
VUNvbG9yV3JpdGVCaXRzX05PTkU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBj
dXJyZW50IGFscGhhIG1vZGUKKyAgICAgKiBAcGFyYW0gbW9kZSBkZWZpbmVzIHRoZSBtb2RlIHRv
IHVzZSAob25lIG9mIHRoZSBFbmdpbmUuQUxQSEFfWFhYKQorICAgICAqIEBwYXJhbSBub0RlcHRo
V3JpdGVDaGFuZ2UgZGVmaW5lcyBpZiBkZXB0aCB3cml0aW5nIHN0YXRlIHNob3VsZCByZW1haW5z
IHVuY2hhbmdlZCAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9yZXNvdXJjZXMvdHJhbnNwYXJlbmN5X2FuZF9ob3dfbWVzaGVzX2FyZV9yZW5k
ZXJlZAorICAgICAqLworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuc2V0QWxwaGFNb2RlID0g
ZnVuY3Rpb24gKG1vZGUsIG5vRGVwdGhXcml0ZUNoYW5nZSkgeworICAgICAgICBpZiAobm9EZXB0
aFdyaXRlQ2hhbmdlID09PSB2b2lkIDApIHsgbm9EZXB0aFdyaXRlQ2hhbmdlID0gZmFsc2U7IH0K
KyAgICAgICAgaWYgKHRoaXMuX2FscGhhTW9kZSA9PT0gbW9kZSkgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICAgICAgY2Fz
ZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0u
QUxQSEFfRElTQUJMRToKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLmFscGhhQmxl
bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX0Vu
Z2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdLkFMUEhB
X1BSRU1VTFRJUExJRUQ6CisgICAgICAgICAgICAgICAgLy8gdGhpcy5fYWxwaGFTdGF0ZS5zZXRB
bHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzKHRoaXMuX2dsLk9ORSwgdGhpcy5fZ2wuT05FX01J
TlVTX1NSQ19BTFBIQSwgdGhpcy5fZ2wuT05FLCB0aGlzLl9nbC5PTkUpOworICAgICAgICAgICAg
ICAgIHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycygxLCAw
eDAzMDMsIDEsIDEpOworICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUuYWxwaGFCbGVu
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5BTFBIQV9Q
UkVNVUxUSVBMSUVEX1BPUlRFUkRVRkY6CisgICAgICAgICAgICAgICAgLy8gdGhpcy5fYWxwaGFT
dGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzKHRoaXMuX2dsLk9ORSwgdGhpcy5f
Z2wuT05FX01JTlVTX1NSQ19BTFBIQSwgdGhpcy5fZ2wuT05FLCB0aGlzLl9nbC5PTkVfTUlOVVNf
U1JDX0FMUEhBKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnNldEFscGhhQmxl
bmRGdW5jdGlvblBhcmFtZXRlcnMoMSwgMHgwMzAzLCAxLCAweDAzMDMpOworICAgICAgICAgICAg
ICAgIHRoaXMuX2FscGhhU3RhdGUuYWxwaGFCbGVuZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5BTFBIQV9DT01CSU5FOgorICAgICAgICAgICAgICAgIC8v
IHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9n
bC5TUkNfQUxQSEEsIHRoaXMuX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEsIHRoaXMuX2dsLk9ORSwg
dGhpcy5fZ2wuT05FKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnNldEFscGhh
QmxlbmRGdW5jdGlvblBhcmFtZXRlcnMoMHgwMzAyLCAweDAzMDMsIDEsIDEpOworICAgICAgICAg
ICAgICAgIHRoaXMuX2FscGhhU3RhdGUuYWxwaGFCbGVuZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5BTFBIQV9PTkVPTkU6CisgICAgICAgICAgICAgICAg
Ly8gdGhpcy5fYWxwaGFTdGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzKHRoaXMu
X2dsLk9ORSwgdGhpcy5fZ2wuT05FLCB0aGlzLl9nbC5aRVJPLCB0aGlzLl9nbC5PTkUpOworICAg
ICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1l
dGVycygxLCAxLCAwLCAxKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLmFscGhh
QmxlbmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uQUxQ
SEFfQUREOgorICAgICAgICAgICAgICAgIC8vIHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVu
ZEZ1bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9nbC5TUkNfQUxQSEEsIHRoaXMuX2dsLk9ORSwgdGhp
cy5fZ2wuWkVSTywgdGhpcy5fZ2wuT05FKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0
YXRlLnNldEFscGhhQmxlbmRGdW5jdGlvblBhcmFtZXRlcnMoMHgwMzAyLCAxLCAwLCAxKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLmFscGhhQmxlbmQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uQUxQSEFfU1VCVFJBQ1Q6CisgICAgICAg
ICAgICAgICAgLy8gdGhpcy5fYWxwaGFTdGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0
ZXJzKHRoaXMuX2dsLlpFUk8sIHRoaXMuX2dsLk9ORV9NSU5VU19TUkNfQ09MT1IsIHRoaXMuX2ds
Lk9ORSwgdGhpcy5fZ2wuT05FKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnNl
dEFscGhhQmxlbmRGdW5jdGlvblBhcmFtZXRlcnMoMCwgMHgwMzAxLCAxLCAxKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLmFscGhhQmxlbmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uQUxQSEFfTVVMVElQTFk6CisgICAgICAgICAgICAg
ICAgLy8gdGhpcy5fYWxwaGFTdGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzKHRo
aXMuX2dsLkRTVF9DT0xPUiwgdGhpcy5fZ2wuWkVSTywgdGhpcy5fZ2wuT05FLCB0aGlzLl9nbC5P
TkUpOworICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0
aW9uUGFyYW1ldGVycygweDAzMDYsIDAsIDEsIDEpOworICAgICAgICAgICAgICAgIHRoaXMuX2Fs
cGhhU3RhdGUuYWxwaGFCbGVuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJFbmdpbmUiXS5BTFBIQV9NQVhJTUlaRUQ6CisgICAgICAgICAgICAgICAgLy8gdGhpcy5fYWxw
aGFTdGF0ZS5zZXRBbHBoYUJsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzKHRoaXMuX2dsLlNSQ19BTFBI
QSwgdGhpcy5fZ2wuT05FX01JTlVTX1NSQ19DT0xPUiwgdGhpcy5fZ2wuT05FLCB0aGlzLl9nbC5P
TkUpOworICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0
aW9uUGFyYW1ldGVycygweDAzMDIsIDB4MDMwMSwgMSwgMSk7CisgICAgICAgICAgICAgICAgdGhp
cy5fYWxwaGFTdGF0ZS5hbHBoYUJsZW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkVuZ2luZSJdLkFMUEhBX0lOVEVSUE9MQVRFOgorICAgICAgICAgICAgICAgIC8vIHRo
aXMuX2FscGhhU3RhdGUuc2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycyh0aGlzLl9nbC5D
T05TVEFOVF9DT0xPUiwgdGhpcy5fZ2wuT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SLCB0aGlzLl9n
bC5DT05TVEFOVF9BTFBIQSwgdGhpcy5fZ2wuT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9hbHBoYVN0YXRlLnNldEFscGhhQmxlbmRGdW5jdGlvblBhcmFt
ZXRlcnMoMHg4MDAxLCAweDgwMDIsIDB4ODAwMywgMHg4MDA0KTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9hbHBoYVN0YXRlLmFscGhhQmxlbmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siRW5naW5lIl0uQUxQSEFfU0NSRUVOTU9ERToKKyAgICAgICAgICAgICAgICAvLyB0
aGlzLl9hbHBoYVN0YXRlLnNldEFscGhhQmxlbmRGdW5jdGlvblBhcmFtZXRlcnModGhpcy5fZ2wu
T05FLCB0aGlzLl9nbC5PTkVfTUlOVVNfU1JDX0NPTE9SLCB0aGlzLl9nbC5PTkUsIHRoaXMuX2ds
Lk9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICAgICAgICAgIHRoaXMuX2FscGhhU3RhdGUu
c2V0QWxwaGFCbGVuZEZ1bmN0aW9uUGFyYW1ldGVycygxLCAweDAzMDEsIDEsIDB4MDMwMyk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJsZW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW5vRGVwdGhXcml0ZUNo
YW5nZSkgeworICAgICAgICAgICAgdGhpcy5zZXREZXB0aFdyaXRlKG1vZGUgPT09IF9FbmdpbmVz
X2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5BTFBIQV9ESVNB
QkxFKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hbHBoYU1vZGUgPSBtb2RlOworICAgIH07
CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZ2V0QXBoYUJsZW5kT3BlcmF0aW9uID0gZnVu
Y3Rpb24gKG9wZXJhdGlvbikgeworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbikgeworICAgICAg
ICAgICAgY2FzZSAweDgwMDY6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1
Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJd
LkdQVUJsZW5kT3BlcmF0aW9uX2FkZDsKKyAgICAgICAgICAgIGNhc2UgMHg4MDBBOgorICAgICAg
ICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCbGVuZE9wZXJhdGlvbl9zdWJzdHJh
Y3Q7CisgICAgICAgICAgICBjYXNlIDB4ODAwQjoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dl
YkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BV
Q29uc3RhbnRzIl0uR1BVQmxlbmRPcGVyYXRpb25fcmV2ZXJzZVN1YnRyYWN0OworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQmxl
bmRPcGVyYXRpb25fYWRkOworICAgICAgICB9CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJv
dG90eXBlLl9nZXRBcGhhQmxlbmRGYWN0b3IgPSBmdW5jdGlvbiAoZmFjdG9yKSB7CisgICAgICAg
IHN3aXRjaCAoZmFjdG9yKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAg
cmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJsZW5kRmFjdG9yX3plcm87CisgICAgICAgICAgICBj
YXNlIDE6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJsZW5kRmFj
dG9yX29uZTsKKyAgICAgICAgICAgIGNhc2UgMHgwMzAwOgorICAgICAgICAgICAgICAgIHJldHVy
biBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVCbGVuZEZhY3Rvcl9zcmNDb2xvcjsKKyAgICAgICAgICAgIGNh
c2UgMHgwMzAxOgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCbGVu
ZEZhY3Rvcl9vbmVNaW51c1NyY0NvbG9yOworICAgICAgICAgICAgY2FzZSAweDAzMDI6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJsZW5kRmFjdG9yX3NyY0FscGhh
OworICAgICAgICAgICAgY2FzZSAweDAzMDM6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJH
UFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNv
bnN0YW50cyJdLkdQVUJsZW5kRmFjdG9yX29uZU1pbnVzU3JjQWxwaGE7CisgICAgICAgICAgICBj
YXNlIDB4MDMwNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQmxl
bmRGYWN0b3JfZHN0QWxwaGE7CisgICAgICAgICAgICBjYXNlIDB4MDMwNToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQmxlbmRGYWN0b3Jfb25lTWludXNEc3RBbHBo
YTsKKyAgICAgICAgICAgIGNhc2UgMHgwMzA2OgorICAgICAgICAgICAgICAgIHJldHVybiBfV2Vi
R1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVD
b25zdGFudHMiXS5HUFVCbGVuZEZhY3Rvcl9kc3RDb2xvcjsKKyAgICAgICAgICAgIGNhc2UgMHgw
MzA3OgorICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCbGVuZEZhY3Rv
cl9vbmVNaW51c0RzdENvbG9yOworICAgICAgICAgICAgY2FzZSAweDAzMDg6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJsZW5kRmFjdG9yX3NyY0FscGhhU2F0dXJh
dGVkOworICAgICAgICAgICAgY2FzZSAweDgwMDE6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9X
ZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQ
VUNvbnN0YW50cyJdLkdQVUJsZW5kRmFjdG9yX2JsZW5kQ29sb3I7CisgICAgICAgICAgICBjYXNl
IDB4ODAwMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQmxlbmRG
YWN0b3Jfb25lTWludXNCbGVuZENvbG9yOworICAgICAgICAgICAgY2FzZSAweDgwMDM6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUJsZW5kRmFjdG9yX2JsZW5kQ29s
b3I7CisgICAgICAgICAgICBjYXNlIDB4ODAwNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dl
YkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BV
Q29uc3RhbnRzIl0uR1BVQmxlbmRGYWN0b3Jfb25lTWludXNCbGVuZENvbG9yOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVQmxl
bmRGYWN0b3Jfb25lOworICAgICAgICB9CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90
eXBlLl9nZXRBcGhhQmxlbmRTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlz
Ll9hbHBoYVN0YXRlLmFscGhhQmxlbmQpIHsKKyAgICAgICAgICAgIHJldHVybiB7fTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgc3JjRmFjdG9yOiB0aGlzLl9nZXRB
cGhhQmxlbmRGYWN0b3IodGhpcy5fYWxwaGFTdGF0ZS5fYmxlbmRGdW5jdGlvblBhcmFtZXRlcnNb
Ml0pLAorICAgICAgICAgICAgZHN0RmFjdG9yOiB0aGlzLl9nZXRBcGhhQmxlbmRGYWN0b3IodGhp
cy5fYWxwaGFTdGF0ZS5fYmxlbmRGdW5jdGlvblBhcmFtZXRlcnNbM10pLAorICAgICAgICAgICAg
b3BlcmF0aW9uOiB0aGlzLl9nZXRBcGhhQmxlbmRPcGVyYXRpb24odGhpcy5fYWxwaGFTdGF0ZS5f
YmxlbmRFcXVhdGlvblBhcmFtZXRlcnNbMV0pLAorICAgICAgICB9OworICAgIH07CisgICAgV2Vi
R1BVRW5naW5lLnByb3RvdHlwZS5fZ2V0Q29sb3JCbGVuZFN0YXRlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICBpZiAoIXRoaXMuX2FscGhhU3RhdGUuYWxwaGFCbGVuZCkgeworICAgICAgICAgICAg
cmV0dXJuIHt9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBzcmNG
YWN0b3I6IHRoaXMuX2dldEFwaGFCbGVuZEZhY3Rvcih0aGlzLl9hbHBoYVN0YXRlLl9ibGVuZEZ1
bmN0aW9uUGFyYW1ldGVyc1swXSksCisgICAgICAgICAgICBkc3RGYWN0b3I6IHRoaXMuX2dldEFw
aGFCbGVuZEZhY3Rvcih0aGlzLl9hbHBoYVN0YXRlLl9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1sx
XSksCisgICAgICAgICAgICBvcGVyYXRpb246IHRoaXMuX2dldEFwaGFCbGVuZE9wZXJhdGlvbih0
aGlzLl9hbHBoYVN0YXRlLl9ibGVuZEVxdWF0aW9uUGFyYW1ldGVyc1swXSksCisgICAgICAgIH07
CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRDb2xvclN0YXRlRGVzY3Jp
cHRvcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIFRPRE8gV0VCR1BVLiBNYW5hZ2UgTXVs
dGkgcmVuZGVyIHRhcmdldC4KKyAgICAgICAgcmV0dXJuIFt7CisgICAgICAgICAgICAgICAgZm9y
bWF0OiB0aGlzLl9vcHRpb25zLnN3YXBDaGFpbkZvcm1hdCwKKyAgICAgICAgICAgICAgICBhbHBo
YUJsZW5kOiB0aGlzLl9nZXRBcGhhQmxlbmRTdGF0ZSgpLAorICAgICAgICAgICAgICAgIGNvbG9y
QmxlbmQ6IHRoaXMuX2dldENvbG9yQmxlbmRTdGF0ZSgpLAorICAgICAgICAgICAgICAgIHdyaXRl
TWFzazogdGhpcy5fZ2V0V3JpdGVNYXNrKCksCisgICAgICAgICAgICB9XTsKKyAgICB9OworICAg
IFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2dldFN0YWdlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIGdwdVBpcGVsaW5lID0gdGhpcy5fY3VycmVudEVmZmVjdC5fcGlwZWxpbmVDb250ZXh0
OworICAgICAgICByZXR1cm4gZ3B1UGlwZWxpbmUuc3RhZ2VzOworICAgIH07CisgICAgV2ViR1BV
RW5naW5lLnByb3RvdHlwZS5fZ2V0VmVydGV4SW5wdXREZXNjcmlwdG9yRm9ybWF0ID0gZnVuY3Rp
b24gKHZlcnRleEJ1ZmZlcikgeworICAgICAgICB2YXIga2luZCA9IHZlcnRleEJ1ZmZlci5nZXRL
aW5kKCk7CisgICAgICAgIHZhciB0eXBlID0gdmVydGV4QnVmZmVyLnR5cGU7CisgICAgICAgIHZh
ciBub3JtYWxpemVkID0gdmVydGV4QnVmZmVyLm5vcm1hbGl6ZWQ7CisgICAgICAgIHZhciBzaXpl
ID0gdmVydGV4QnVmZmVyLmdldFNpemUoKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgICAgICBjYXNlIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9f
WyJWZXJ0ZXhCdWZmZXIiXS5CWVRFOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoc2l6ZSkgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9ybWFsaXplZCA/IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVZlcnRleEZvcm1hdF9jaGFyMm5vcm0g
OiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfY2hhcjI7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVkID8g
X1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2Vi
R1BVQ29uc3RhbnRzIl0uR1BVVmVydGV4Rm9ybWF0X2NoYXI0bm9ybSA6IF9XZWJHUFVfd2ViZ3B1
Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJd
LkdQVVZlcnRleEZvcm1hdF9jaGFyNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJWZXJ0ZXhC
dWZmZXIiXS5VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoc2l6ZSkgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9ybWFsaXplZCA/IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVZlcnRleEZvcm1hdF91Y2hhcjJub3Jt
IDogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
V2ViR1BVQ29uc3RhbnRzIl0uR1BVVmVydGV4Rm9ybWF0X3VjaGFyMjsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQg
PyBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfdWNoYXI0bm9ybSA6IF9XZWJHUFVfd2Vi
Z3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50
cyJdLkdQVVZlcnRleEZvcm1hdF91Y2hhcjQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siVmVy
dGV4QnVmZmVyIl0uU0hPUlQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChzaXplKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b3JtYWxpemVkID8gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVmVydGV4Rm9ybWF0X3Nob3J0Mm5vcm0gOiBf
V2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJH
UFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfc2hvcnQyOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZCA/IF9X
ZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQ
VUNvbnN0YW50cyJdLkdQVVZlcnRleEZvcm1hdF9zaG9ydDRub3JtIDogX1dlYkdQVV93ZWJncHVD
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0u
R1BVVmVydGV4Rm9ybWF0X3Nob3J0NDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJWZXJ0ZXhC
dWZmZXIiXS5VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNpemUpIHsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vcm1hbGl6ZWQgPyBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfdXNob3J0Mm5v
cm0gOiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
WyJXZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfdXNob3J0MjsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6
ZWQgPyBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
WyJXZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfdXNob3J0NG5vcm0gOiBfV2ViR1BV
X3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25z
dGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfdXNob3J0NDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9f
WyJWZXJ0ZXhCdWZmZXIiXS5JTlQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChzaXplKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfaW50OworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVD
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0u
R1BVVmVydGV4Rm9ybWF0X2ludDI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRf
aW50MzsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVZlcnRleEZvcm1hdF9pbnQ0OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzEwX19bIlZlcnRleEJ1ZmZlciJdLlVOU0lHTkVEX0lOVDoKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVZlcnRleEZvcm1hdF91
aW50OworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVmVydGV4Rm9ybWF0X3VpbnQyOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQ
VV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29u
c3RhbnRzIl0uR1BVVmVydGV4Rm9ybWF0X3VpbnQzOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVmVy
dGV4Rm9ybWF0X3VpbnQ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlZlcnRleEJ1ZmZlciJd
LkZMT0FUOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoc2l6ZSkgeworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJn
cHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRz
Il0uR1BVVmVydGV4Rm9ybWF0X2Zsb2F0OworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVVmVydGV4Rm9y
bWF0X2Zsb2F0MjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVVZlcnRleEZvcm1hdF9mbG9hdDM7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJX
ZWJHUFVDb25zdGFudHMiXS5HUFVWZXJ0ZXhGb3JtYXRfZmxvYXQ0OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRm9ybWF0ICci
ICsga2luZCArICInIik7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRW
ZXJ0ZXhJbnB1dERlc2NyaXB0b3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBkZXNjcmlw
dG9ycyA9IFtdOworICAgICAgICB2YXIgZWZmZWN0ID0gdGhpcy5fY3VycmVudEVmZmVjdDsKKyAg
ICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBlZmZlY3QuZ2V0QXR0cmlidXRlc05hbWVzKCk7CisgICAg
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaW5kZXgr
KykgeworICAgICAgICAgICAgdmFyIGxvY2F0aW9uXzEgPSBlZmZlY3QuZ2V0QXR0cmlidXRlTG9j
YXRpb24oaW5kZXgpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uXzEgPj0gMCkgeworICAgICAg
ICAgICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB0aGlzLl9jdXJyZW50VmVydGV4QnVmZmVyc1th
dHRyaWJ1dGVzW2luZGV4XV07CisgICAgICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhCdWZmZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHZhciBwb3NpdGlvbkF0dHJpYnV0ZURlc2NyaXB0b3IgPSB7CisgICAgICAgICAg
ICAgICAgICAgIHNoYWRlckxvY2F0aW9uOiBsb2NhdGlvbl8xLAorICAgICAgICAgICAgICAgICAg
ICBvZmZzZXQ6IDAsCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogdGhpcy5fZ2V0VmVydGV4
SW5wdXREZXNjcmlwdG9yRm9ybWF0KHZlcnRleEJ1ZmZlciksCisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAvLyBUT0RPIFdFQkdQVS4gRmFjdG9yaXplIHRoZSBvbmUgd2l0aCB0
aGUgc2FtZSB1bmRlcmx5aW5nIGJ1ZmZlci4KKyAgICAgICAgICAgICAgICB2YXIgdmVydGV4QnVm
ZmVyRGVzY3JpcHRvciA9IHsKKyAgICAgICAgICAgICAgICAgICAgc3RyaWRlOiB2ZXJ0ZXhCdWZm
ZXIuYnl0ZVN0cmlkZSwKKyAgICAgICAgICAgICAgICAgICAgc3RlcE1vZGU6IHZlcnRleEJ1ZmZl
ci5nZXRJc0luc3RhbmNlZCgpID8gX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVSW5wdXRTdGVwTW9kZV9pbnN0
YW5jZSA6IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUlucHV0U3RlcE1vZGVfdmVydGV4LAorICAgICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGVTZXQ6IFtwb3NpdGlvbkF0dHJpYnV0ZURlc2NyaXB0b3JdCisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9ycy5wdXNoKHZlcnRl
eEJ1ZmZlckRlc2NyaXB0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
ICghdGhpcy5fY3VycmVudEluZGV4QnVmZmVyKSB7CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIGluZGV4Rm9ybWF0OiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVJbmRleEZvcm1hdF91
aW50MzIsCisgICAgICAgICAgICAgICAgdmVydGV4QnVmZmVyczogZGVzY3JpcHRvcnMKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgdmFyIGlucHV0U3RhdGVEZXNjcmlwdG9yID0g
eworICAgICAgICAgICAgaW5kZXhGb3JtYXQ6IHRoaXMuX2N1cnJlbnRJbmRleEJ1ZmZlci5pczMy
Qml0cyA/IF9XZWJHUFVfd2ViZ3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X19bIldlYkdQVUNvbnN0YW50cyJdLkdQVUluZGV4Rm9ybWF0X3VpbnQzMiA6IF9XZWJHUFVfd2Vi
Z3B1Q29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIldlYkdQVUNvbnN0YW50
cyJdLkdQVUluZGV4Rm9ybWF0X3VpbnQxNiwKKyAgICAgICAgICAgIHZlcnRleEJ1ZmZlcnM6IGRl
c2NyaXB0b3JzCisgICAgICAgIH07CisgICAgICAgIHJldHVybiBpbnB1dFN0YXRlRGVzY3JpcHRv
cjsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2dldFBpcGVsaW5lTGF5b3V0
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgYmluZEdyb3VwTGF5b3V0cyA9IFtdOworICAg
ICAgICB2YXIgd2ViZ3B1UGlwZWxpbmVDb250ZXh0ID0gdGhpcy5fY3VycmVudEVmZmVjdC5fcGlw
ZWxpbmVDb250ZXh0OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdlYmdwdVBpcGVsaW5l
Q29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBsZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICB2YXIgc2V0RGVmaW5pdGlvbiA9IHdlYmdwdVBpcGVsaW5lQ29udGV4dC5vcmRlcmVkVUJPc0Fu
ZFNhbXBsZXJzW2ldOworICAgICAgICAgICAgaWYgKHNldERlZmluaXRpb24gPT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgICAgIHZhciBiaW5kaW5nc18xID0gW107CisgICAgICAgICAgICAg
ICAgdmFyIHVuaWZvcm1zQmluZEdyb3VwTGF5b3V0ID0gdGhpcy5fZGV2aWNlLmNyZWF0ZUJpbmRH
cm91cExheW91dCh7CisgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdzOiBiaW5kaW5nc18xLAor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGJpbmRHcm91cExheW91dHNbaV0g
PSB1bmlmb3Jtc0JpbmRHcm91cExheW91dDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IFtdOworICAgICAgICAgICAg
Zm9yICh2YXIgaiA9IDA7IGogPCBzZXREZWZpbml0aW9uLmxlbmd0aDsgaisrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGJpbmRpbmdEZWZpbml0aW9uID0gd2ViZ3B1UGlwZWxpbmVDb250ZXh0Lm9y
ZGVyZWRVQk9zQW5kU2FtcGxlcnNbaV1bal07CisgICAgICAgICAgICAgICAgaWYgKGJpbmRpbmdE
ZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFRPRE8gV0VCR1BVLiBPcHRp
bWl6ZSBzaGFyZWQgc2FtcGxlcnMgdmlzaWJpbGl0eSBmb3IgdmVydGV4L2ZyYW1nZW50LgorICAg
ICAgICAgICAgICAgIGlmIChiaW5kaW5nRGVmaW5pdGlvbi5pc1NhbXBsZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYmluZGluZ3MucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAgICBiaW5k
aW5nOiBqLAorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogX1dlYkdQVV93ZWJn
cHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRz
Il0uR1BVU2hhZGVyU3RhZ2VCaXRfVkVSVEVYIHwgX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVU2hhZGVyU3Rh
Z2VCaXRfRlJBR01FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBfV2ViR1BVX3dl
YmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFu
dHMiXS5HUFVCaW5kaW5nVHlwZV9zYW1wbGVkVGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAg
fSwgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBXRUJHUFUuIE5vIE1hZ2ljICsg
MSAoY29taW5nIGZyb20gY3VycmVudCAxIHRleHR1cmUgMSBzYW1wbGVyIHN0YXJ0ZWd5KS4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmc6IGogKyAxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdmlzaWJpbGl0eTogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVU2hhZGVyU3RhZ2VCaXRfVkVSVEVY
IHwgX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
V2ViR1BVQ29uc3RhbnRzIl0uR1BVU2hhZGVyU3RhZ2VCaXRfRlJBR01FTlQsCisgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlOiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCaW5kaW5nVHlwZV9zYW1wbGVy
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHVzaCh7CisgICAgICAg
ICAgICAgICAgICAgICAgICBiaW5kaW5nOiBqLAorICAgICAgICAgICAgICAgICAgICAgICAgdmlz
aWJpbGl0eTogX1dlYkdQVV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfX1siV2ViR1BVQ29uc3RhbnRzIl0uR1BVU2hhZGVyU3RhZ2VCaXRfVkVSVEVYIHwgX1dlYkdQ
VV93ZWJncHVDb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siV2ViR1BVQ29u
c3RhbnRzIl0uR1BVU2hhZGVyU3RhZ2VCaXRfRlJBR01FTlQsCisgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlOiBfV2ViR1BVX3dlYmdwdUNvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJXZWJHUFVDb25zdGFudHMiXS5HUFVCaW5kaW5nVHlwZV91bmlmb3JtQnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoYmluZGluZ3MubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAg
IHZhciB1bmlmb3Jtc0JpbmRHcm91cExheW91dCA9IHRoaXMuX2RldmljZS5jcmVhdGVCaW5kR3Jv
dXBMYXlvdXQoeworICAgICAgICAgICAgICAgICAgICBiaW5kaW5nczogYmluZGluZ3MsCisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgYmluZEdyb3VwTGF5b3V0c1tpXSA9IHVu
aWZvcm1zQmluZEdyb3VwTGF5b3V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHdlYmdwdVBpcGVsaW5lQ29udGV4dC5iaW5kR3JvdXBMYXlvdXRzID0gYmluZEdyb3VwTGF5b3V0
czsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5jcmVhdGVQaXBlbGluZUxheW91dCh7IGJp
bmRHcm91cExheW91dHM6IGJpbmRHcm91cExheW91dHMgfSk7CisgICAgfTsKKyAgICBXZWJHUFVF
bmdpbmUucHJvdG90eXBlLl9nZXRSZW5kZXJQaXBlbGluZSA9IGZ1bmN0aW9uIChmaWxsTW9kZSkg
eworICAgICAgICAvLyBUaGlzIGlzIHdyb25nIHRvIGNhY2hlIHRoaXMgd2F5IGJ1dCB3b3JrYXJv
dW5kcyB0aGUgbmVlZCBvZiBjYWNoZSBpbiB0aGUgc2ltcGxlIGRlbW8gY29udGV4dC4KKyAgICAg
ICAgdmFyIGdwdVBpcGVsaW5lID0gdGhpcy5fY3VycmVudEVmZmVjdC5fcGlwZWxpbmVDb250ZXh0
OworICAgICAgICBpZiAoZ3B1UGlwZWxpbmUucmVuZGVyUGlwZWxpbmUpIHsKKyAgICAgICAgICAg
IHJldHVybiBncHVQaXBlbGluZS5yZW5kZXJQaXBlbGluZTsKKyAgICAgICAgfQorICAgICAgICAv
LyBVbnN1cHBvcnRlZCBhdCB0aGUgbW9tZW50IGJ1dCBuZWVkcyB0byBiZSBleHRyYWN0ZWQgZnJv
bSB0aGUgTVNBQSBwYXJhbS4KKyAgICAgICAgdmFyIHRvcG9sb2d5ID0gdGhpcy5fZ2V0VG9wb2xv
Z3koZmlsbE1vZGUpOworICAgICAgICB2YXIgcmFzdGVyaXphdGlvblN0YXRlRGVzY3JpcHRvciA9
IHRoaXMuX2dldFJhc3Rlcml6YXRpb25TdGF0ZURlc2NyaXB0b3IoKTsKKyAgICAgICAgdmFyIGRl
cHRoU3RhdGVEZXNjcmlwdG9yID0gdGhpcy5fZ2V0RGVwdGhTdGVuY2lsU3RhdGVEZXNjcmlwdG9y
KCk7CisgICAgICAgIHZhciBjb2xvclN0YXRlRGVzY3JpcHRvcnMgPSB0aGlzLl9nZXRDb2xvclN0
YXRlRGVzY3JpcHRvcnMoKTsKKyAgICAgICAgdmFyIHN0YWdlcyA9IHRoaXMuX2dldFN0YWdlcygp
OworICAgICAgICB2YXIgaW5wdXRTdGF0ZURlc2NyaXB0b3IgPSB0aGlzLl9nZXRWZXJ0ZXhJbnB1
dERlc2NyaXB0b3IoKTsKKyAgICAgICAgdmFyIHBpcGVsaW5lTGF5b3V0ID0gdGhpcy5fZ2V0UGlw
ZWxpbmVMYXlvdXQoKTsKKyAgICAgICAgZ3B1UGlwZWxpbmUucmVuZGVyUGlwZWxpbmUgPSB0aGlz
Ll9kZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUodHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19hc3NpZ24iXSh7IHNhbXBsZUNvdW50OiB0aGlzLl9tYWluUGFzc1NhbXBsZUNv
dW50LCBwcmltaXRpdmVUb3BvbG9neTogdG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZTogcmFz
dGVyaXphdGlvblN0YXRlRGVzY3JpcHRvciwgZGVwdGhTdGVuY2lsU3RhdGU6IGRlcHRoU3RhdGVE
ZXNjcmlwdG9yLCBjb2xvclN0YXRlczogY29sb3JTdGF0ZURlc2NyaXB0b3JzIH0sIHN0YWdlcywg
eyB2ZXJ0ZXhJbnB1dDogaW5wdXRTdGF0ZURlc2NyaXB0b3IsIGxheW91dDogcGlwZWxpbmVMYXlv
dXQgfSkpOworICAgICAgICByZXR1cm4gZ3B1UGlwZWxpbmUucmVuZGVyUGlwZWxpbmU7CisgICAg
fTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRWZXJ0ZXhJbnB1dHNUb1JlbmRlciA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGVmZmVjdCA9IHRoaXMuX2N1cnJlbnRFZmZlY3Q7
CisgICAgICAgIHZhciBncHVDb250ZXh0ID0gdGhpcy5fY3VycmVudEVmZmVjdC5fcGlwZWxpbmVD
b250ZXh0OworICAgICAgICB2YXIgdmVydGV4SW5wdXRzID0gZ3B1Q29udGV4dC52ZXJ0ZXhJbnB1
dHM7CisgICAgICAgIGlmICh2ZXJ0ZXhJbnB1dHMpIHsKKyAgICAgICAgICAgIHJldHVybiB2ZXJ0
ZXhJbnB1dHM7CisgICAgICAgIH0KKyAgICAgICAgdmVydGV4SW5wdXRzID0geworICAgICAgICAg
ICAgaW5kZXhCdWZmZXI6IG51bGwsCisgICAgICAgICAgICBpbmRleE9mZnNldDogMCwKKyAgICAg
ICAgICAgIHZlcnRleFN0YXJ0U2xvdDogMCwKKyAgICAgICAgICAgIHZlcnRleEJ1ZmZlcnM6IFtd
LAorICAgICAgICAgICAgdmVydGV4T2Zmc2V0czogW10sCisgICAgICAgIH07CisgICAgICAgIGdw
dUNvbnRleHQudmVydGV4SW5wdXRzID0gdmVydGV4SW5wdXRzOworICAgICAgICBpZiAodGhpcy5f
Y3VycmVudEluZGV4QnVmZmVyKSB7CisgICAgICAgICAgICAvLyBUT0RPIFdFQkdQVS4gQ2hlY2sg
aWYgY2FjaGUgd291bGQgYmUgd29ydGggaXQuCisgICAgICAgICAgICB2ZXJ0ZXhJbnB1dHMuaW5k
ZXhCdWZmZXIgPSB0aGlzLl9jdXJyZW50SW5kZXhCdWZmZXIudW5kZXJseWluZ1Jlc291cmNlOwor
ICAgICAgICAgICAgdmVydGV4SW5wdXRzLmluZGV4T2Zmc2V0ID0gMDsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZlcnRleElucHV0cy5pbmRleEJ1ZmZlciA9IG51bGw7
CisgICAgICAgIH0KKyAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBlZmZlY3QuZ2V0QXR0cmlidXRl
c05hbWVzKCk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVz
Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIG9yZGVyID0gZWZmZWN0LmdldEF0
dHJpYnV0ZUxvY2F0aW9uKGluZGV4KTsKKyAgICAgICAgICAgIGlmIChvcmRlciA+PSAwKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHZlcnRleEJ1ZmZlciA9IHRoaXMuX2N1cnJlbnRWZXJ0ZXhCdWZm
ZXJzW2F0dHJpYnV0ZXNbaW5kZXhdXTsKKyAgICAgICAgICAgICAgICBpZiAoIXZlcnRleEJ1ZmZl
cikgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHZlcnRleEJ1ZmZlci5nZXRCdWZmZXIoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleElu
cHV0cy52ZXJ0ZXhCdWZmZXJzLnB1c2goYnVmZmVyLnVuZGVybHlpbmdSZXNvdXJjZSk7CisgICAg
ICAgICAgICAgICAgICAgIHZlcnRleElucHV0cy52ZXJ0ZXhPZmZzZXRzLnB1c2godmVydGV4QnVm
ZmVyLmJ5dGVPZmZzZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAvLyBUT0RPIFdFQkdQVS4gT3B0aW1pemUgYnVmZmVyIHJldXNhYmlsaXR5
IGFuZCB0eXBlcyBhcyBtb3JlIGFyZSBub3cgYWxsb3dlZC4KKyAgICAgICAgcmV0dXJuIHZlcnRl
eElucHV0czsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX2dldEJpbmRHcm91
cHNUb1JlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHdlYmdwdVBpcGVsaW5lQ29u
dGV4dCA9IHRoaXMuX2N1cnJlbnRFZmZlY3QuX3BpcGVsaW5lQ29udGV4dDsKKyAgICAgICAgdmFy
IGJpbmRHcm91cHMgPSB3ZWJncHVQaXBlbGluZUNvbnRleHQuYmluZEdyb3VwczsKKyAgICAgICAg
aWYgKGJpbmRHcm91cHMpIHsKKyAgICAgICAgICAgIGlmICh3ZWJncHVQaXBlbGluZUNvbnRleHQu
dW5pZm9ybUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIHdlYmdwdVBpcGVsaW5lQ29udGV4dC51
bmlmb3JtQnVmZmVyLnVwZGF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGJpbmRHcm91cHM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdlYmdwdVBpcGVsaW5lQ29udGV4
dC51bmlmb3JtQnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLmJpbmRVbmlmb3JtQnVmZmVyQmFz
ZSh3ZWJncHVQaXBlbGluZUNvbnRleHQudW5pZm9ybUJ1ZmZlci5nZXRCdWZmZXIoKSwgMCwgIkxl
ZnRPdmVyIik7CisgICAgICAgICAgICB3ZWJncHVQaXBlbGluZUNvbnRleHQudW5pZm9ybUJ1ZmZl
ci51cGRhdGUoKTsKKyAgICAgICAgfQorICAgICAgICBiaW5kR3JvdXBzID0gW107CisgICAgICAg
IHdlYmdwdVBpcGVsaW5lQ29udGV4dC5iaW5kR3JvdXBzID0gYmluZEdyb3VwczsKKyAgICAgICAg
dmFyIGJpbmRHcm91cExheW91dHMgPSB3ZWJncHVQaXBlbGluZUNvbnRleHQuYmluZEdyb3VwTGF5
b3V0czsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3ZWJncHVQaXBlbGluZUNvbnRleHQu
b3JkZXJlZFVCT3NBbmRTYW1wbGVycy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIHNl
dERlZmluaXRpb24gPSB3ZWJncHVQaXBlbGluZUNvbnRleHQub3JkZXJlZFVCT3NBbmRTYW1wbGVy
c1tpXTsKKyAgICAgICAgICAgIGlmIChzZXREZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgZ3JvdXBMYXlvdXRfMSA9IGJpbmRHcm91cExheW91dHNbaV07Cisg
ICAgICAgICAgICAgICAgaWYgKGdyb3VwTGF5b3V0XzEpIHsKKyAgICAgICAgICAgICAgICAgICAg
YmluZEdyb3Vwc1tpXSA9IHRoaXMuX2RldmljZS5jcmVhdGVCaW5kR3JvdXAoeworICAgICAgICAg
ICAgICAgICAgICAgICAgbGF5b3V0OiBncm91cExheW91dF8xLAorICAgICAgICAgICAgICAgICAg
ICAgICAgYmluZGluZ3M6IFtdLAorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgYmluZGluZ3MgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
c2V0RGVmaW5pdGlvbi5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIHZhciBiaW5kaW5n
RGVmaW5pdGlvbiA9IHdlYmdwdVBpcGVsaW5lQ29udGV4dC5vcmRlcmVkVUJPc0FuZFNhbXBsZXJz
W2ldW2pdOworICAgICAgICAgICAgICAgIGlmIChiaW5kaW5nRGVmaW5pdGlvbiA9PT0gdW5kZWZp
bmVkKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyBUT0RPIFdFQkdQVS4gQXV0aG9yaXplIHNoYXJlZCBzYW1wbGVy
cyBhbmQgVmVydGV4IFRleHR1cmVzLgorICAgICAgICAgICAgICAgIGlmIChiaW5kaW5nRGVmaW5p
dGlvbi5pc1NhbXBsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGJpbmRpbmdJbmZvID0g
d2ViZ3B1UGlwZWxpbmVDb250ZXh0LnNhbXBsZXJzW2JpbmRpbmdEZWZpbml0aW9uLm5hbWVdOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoYmluZGluZ0luZm8pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghYmluZGluZ0luZm8udGV4dHVyZS5fd2ViR1BVU2FtcGxlcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzYW1wbGVyRGVzY3JpcHRvciA9IHRoaXMuX2dldFNh
bXBsZXJEZXNjcmlwdG9yKGJpbmRpbmdJbmZvLnRleHR1cmUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBncHVTYW1wbGVyID0gdGhpcy5fZGV2aWNlLmNyZWF0ZVNhbXBsZXIoc2Ft
cGxlckRlc2NyaXB0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdJbmZv
LnRleHR1cmUuX3dlYkdQVVNhbXBsZXIgPSBncHVTYW1wbGVyOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHVzaCh7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmluZGluZzogYmluZGluZ0luZm8udGV4dHVyZUJpbmRpbmcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2U6IGJpbmRpbmdJbmZvLnRleHR1
cmUuX3dlYkdQVVRleHR1cmVWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmc6IGJpbmRpbmdJbmZvLnNhbXBsZXJCaW5k
aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiBiaW5kaW5nSW5mby50
ZXh0dXJlLl93ZWJHUFVTYW1wbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TG9nZ2VyIl0uRXJyb3IoIlNhbXBsZXIgaGFzIG5vdCBiZWVuIGJvdW5kOiAiICsgYmluZGluZ0Rl
ZmluaXRpb24ubmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhQnVm
ZmVyID0gdGhpcy5fdW5pZm9ybXNCdWZmZXJzW2JpbmRpbmdEZWZpbml0aW9uLm5hbWVdOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZGF0YUJ1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHdlYmdwdUJ1ZmZlciA9IGRhdGFCdWZmZXIudW5kZXJseWluZ1Jlc291cmNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHVzaCh7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmluZGluZzogaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJj
ZTogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI6IHdlYmdwdUJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBkYXRhQnVmZmVyLmNhcGFjaXR5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJMb2dnZXIiXS5FcnJvcigiVUJPIGhhcyBub3QgYmVlbiBib3VuZDogIiArIGJpbmRpbmdEZWZp
bml0aW9uLm5hbWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGdyb3VwTGF5b3V0ID0gYmluZEdyb3VwTGF5
b3V0c1tpXTsKKyAgICAgICAgICAgIGlmIChncm91cExheW91dCkgeworICAgICAgICAgICAgICAg
IGJpbmRHcm91cHNbaV0gPSB0aGlzLl9kZXZpY2UuY3JlYXRlQmluZEdyb3VwKHsKKyAgICAgICAg
ICAgICAgICAgICAgbGF5b3V0OiBncm91cExheW91dCwKKyAgICAgICAgICAgICAgICAgICAgYmlu
ZGluZ3M6IGJpbmRpbmdzLAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBiaW5kR3JvdXBzOworICAgIH07CisgICAgV2ViR1BVRW5n
aW5lLnByb3RvdHlwZS5fYmluZFZlcnRleElucHV0cyA9IGZ1bmN0aW9uICh2ZXJ0ZXhJbnB1dHMp
IHsKKyAgICAgICAgdmFyIHJlbmRlclBhc3MgPSB0aGlzLl9jdXJyZW50UmVuZGVyUGFzczsKKyAg
ICAgICAgaWYgKHZlcnRleElucHV0cy5pbmRleEJ1ZmZlcikgeworICAgICAgICAgICAgLy8gVE9E
TyBXRUJHUFUuIENoZWNrIGlmIGNhY2hlIHdvdWxkIGJlIHdvcnRoIGl0LgorICAgICAgICAgICAg
cmVuZGVyUGFzcy5zZXRJbmRleEJ1ZmZlcih2ZXJ0ZXhJbnB1dHMuaW5kZXhCdWZmZXIsIHZlcnRl
eElucHV0cy5pbmRleE9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETyBXRUJHUFUu
IE9wdGltaXplIGJ1ZmZlciByZXVzYWJpbGl0eSBhbmQgdHlwZXMgYXMgbW9yZSBhcmUgbm93IGFs
bG93ZWQuCisgICAgICAgIHRoaXMuX2N1cnJlbnRSZW5kZXJQYXNzLnNldFZlcnRleEJ1ZmZlcnMo
dmVydGV4SW5wdXRzLnZlcnRleFN0YXJ0U2xvdCwgdmVydGV4SW5wdXRzLnZlcnRleEJ1ZmZlcnMs
IHZlcnRleElucHV0cy52ZXJ0ZXhPZmZzZXRzKTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5w
cm90b3R5cGUuX3NldFJlbmRlckJpbmRHcm91cHMgPSBmdW5jdGlvbiAoYmluZEdyb3Vwcykgewor
ICAgICAgICAvLyBUT0RPIFdFQkdQVS4gT25seSBzZXQgZ3JvdXBzIGlmIGNoYW5nZXMgaGFwcGVu
ZWQuCisgICAgICAgIHZhciByZW5kZXJQYXNzID0gdGhpcy5fY3VycmVudFJlbmRlclBhc3M7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmluZEdyb3Vwcy5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgcmVuZGVyUGFzcy5zZXRCaW5kR3JvdXAoaSwgYmluZEdyb3Vwc1tpXSk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuX3NldFJlbmRlclBpcGVs
aW5lID0gZnVuY3Rpb24gKGZpbGxNb2RlKSB7CisgICAgICAgIHZhciBwaXBlbGluZSA9IHRoaXMu
X2dldFJlbmRlclBpcGVsaW5lKGZpbGxNb2RlKTsKKyAgICAgICAgdGhpcy5fY3VycmVudFJlbmRl
clBhc3Muc2V0UGlwZWxpbmUocGlwZWxpbmUpOworICAgICAgICB2YXIgdmVydGV4SW5wdXRzID0g
dGhpcy5fZ2V0VmVydGV4SW5wdXRzVG9SZW5kZXIoKTsKKyAgICAgICAgdGhpcy5fYmluZFZlcnRl
eElucHV0cyh2ZXJ0ZXhJbnB1dHMpOworICAgICAgICB2YXIgYmluZEdyb3VwcyA9IHRoaXMuX2dl
dEJpbmRHcm91cHNUb1JlbmRlcigpOworICAgICAgICB0aGlzLl9zZXRSZW5kZXJCaW5kR3JvdXBz
KGJpbmRHcm91cHMpOworICAgICAgICBpZiAodGhpcy5fYWxwaGFTdGF0ZS5hbHBoYUJsZW5kICYm
IHRoaXMuX2FscGhhU3RhdGUuX2lzQmxlbmRDb25zdGFudHNEaXJ0eSkgeworICAgICAgICAgICAg
dGhpcy5fY3VycmVudFJlbmRlclBhc3Muc2V0QmxlbmRDb2xvcih0aGlzLl9hbHBoYVN0YXRlLl9i
bGVuZENvbnN0YW50cyk7CisgICAgICAgIH0KKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90
b3R5cGUuZHJhd0VsZW1lbnRzVHlwZSA9IGZ1bmN0aW9uIChmaWxsTW9kZSwgaW5kZXhTdGFydCwg
aW5kZXhDb3VudCwgaW5zdGFuY2VzQ291bnQpIHsKKyAgICAgICAgaWYgKGluc3RhbmNlc0NvdW50
ID09PSB2b2lkIDApIHsgaW5zdGFuY2VzQ291bnQgPSAxOyB9CisgICAgICAgIHRoaXMuX3NldFJl
bmRlclBpcGVsaW5lKGZpbGxNb2RlKTsKKyAgICAgICAgdGhpcy5fY3VycmVudFJlbmRlclBhc3Mu
ZHJhd0luZGV4ZWQoaW5kZXhDb3VudCwgaW5zdGFuY2VzQ291bnQsIGluZGV4U3RhcnQsIDAsIDAp
OworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5kcmF3QXJyYXlzVHlwZSA9IGZ1
bmN0aW9uIChmaWxsTW9kZSwgdmVydGljZXNTdGFydCwgdmVydGljZXNDb3VudCwgaW5zdGFuY2Vz
Q291bnQpIHsKKyAgICAgICAgaWYgKGluc3RhbmNlc0NvdW50ID09PSB2b2lkIDApIHsgaW5zdGFu
Y2VzQ291bnQgPSAxOyB9CisgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleEJ1ZmZlciA9IG51bGw7
CisgICAgICAgIHRoaXMuX3NldFJlbmRlclBpcGVsaW5lKGZpbGxNb2RlKTsKKyAgICAgICAgdGhp
cy5fY3VycmVudFJlbmRlclBhc3MuZHJhdyh2ZXJ0aWNlc0NvdW50LCBpbnN0YW5jZXNDb3VudCwg
dmVydGljZXNTdGFydCwgMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSBhIHNwZWNp
ZmljIHNpemUgb2YgdGhlIGNhbnZhcworICAgICAqIEBwYXJhbSB3aWR0aCBkZWZpbmVzIHRoZSBu
ZXcgY2FudmFzJyB3aWR0aAorICAgICAqIEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgbmV3IGNh
bnZhcycgaGVpZ2h0CisgICAgICovCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5zZXRTaXpl
ID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5z
ZXRTaXplLmNhbGwodGhpcywgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIHRoaXMuX2luaXRpYWxp
emVNYWluQXR0YWNobWVudHMoKTsKKyAgICB9OworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwb3NlCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvKioKKyAgICAgKiBEaXNwb3NlIGFuZCByZWxlYXNlIGFs
bCBhc3NvY2lhdGVkIHJlc291cmNlcworICAgICAqLworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5
cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fZGVjb2RlRW5naW5lLmRp
c3Bvc2UoKTsKKyAgICAgICAgdGhpcy5fY29tcGlsZWRTaGFkZXJzID0ge307CisgICAgICAgIGlm
ICh0aGlzLl9tYWluVGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5fbWFpblRleHR1cmUuZGVz
dHJveSgpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9kZXB0aFRleHR1cmUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2RlcHRoVGV4dHVyZS5kZXN0cm95KCk7CisgICAgICAgIH0KKyAgICAg
ICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWlzYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgV2ViR1BVRW5naW5lLnByb3Rv
dHlwZS5nZXRSZW5kZXJXaWR0aCA9IGZ1bmN0aW9uICh1c2VTY3JlZW4pIHsKKyAgICAgICAgaWYg
KHVzZVNjcmVlbiA9PT0gdm9pZCAwKSB7IHVzZVNjcmVlbiA9IGZhbHNlOyB9CisgICAgICAgIGlm
ICghdXNlU2NyZWVuICYmIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0LndpZHRoOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0aGlzLl9jYW52YXMud2lkdGg7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUu
cHJvdG90eXBlLmdldFJlbmRlckhlaWdodCA9IGZ1bmN0aW9uICh1c2VTY3JlZW4pIHsKKyAgICAg
ICAgaWYgKHVzZVNjcmVlbiA9PT0gdm9pZCAwKSB7IHVzZVNjcmVlbiA9IGZhbHNlOyB9CisgICAg
ICAgIGlmICghdXNlU2NyZWVuICYmIHRoaXMuX2N1cnJlbnRSZW5kZXJUYXJnZXQpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50UmVuZGVyVGFyZ2V0LmhlaWdodDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpcy5fY2FudmFzLmhlaWdodDsKKyAgICB9OworICAgIFdlYkdQ
VUVuZ2luZS5wcm90b3R5cGUuZ2V0UmVuZGVyaW5nQ2FudmFzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5fY2FudmFzOworICAgIH07CisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9ycworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5nZXRFcnJv
ciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gVE9ETyBXRUJHUFUuIGZyb20gdGhlIHdlYmdw
dSBlcnJvcnMuCisgICAgICAgIHJldHVybiAwOworICAgIH07CisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVudXNlZCBXZWJH
UFUKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5
cGUuYXJlQWxsRWZmZWN0c1JlYWR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBObyBwYXJh
bGxlbCBzaGFkZXIgY29tcGlsYXRpb24uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07Cisg
ICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fZXhlY3V0ZVdoZW5SZW5kZXJpbmdTdGF0ZUlzQ29t
cGlsZWQgPSBmdW5jdGlvbiAocGlwZWxpbmVDb250ZXh0LCBhY3Rpb24pIHsKKyAgICAgICAgLy8g
Tm8gcGFyYWxsZWwgc2hhZGVyIGNvbXBpbGF0aW9uLgorICAgICAgICAvLyBObyBBc3luYywgc28g
ZGlyZWN0IGxhdW5jaAorICAgICAgICBhY3Rpb24oKTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2lu
ZS5wcm90b3R5cGUuX2lzUmVuZGVyaW5nU3RhdGVDb21waWxlZCA9IGZ1bmN0aW9uIChwaXBlbGlu
ZUNvbnRleHQpIHsKKyAgICAgICAgLy8gTm8gcGFyYWxsZWwgc2hhZGVyIGNvbXBpbGF0aW9uLgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUu
X2dldFVucGFja0FsaWduZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAxOwor
ICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5fdW5wYWNrRmxpcFkgPSBmdW5jdGlv
biAodmFsdWUpIHsgfTsKKyAgICAvLyBUT0RPIFdFQkdQVS4gQWxsIG9mIHRoZSBiZWxvdyBzaG91
bGQgZ28gb25jZSBlbmdpbmUgc3BsaXQgd2l0aCBiYXNlRW5naW5lLgorICAgIFdlYkdQVUVuZ2lu
ZS5wcm90b3R5cGUuYXBwbHlTdGF0ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIEFwcGx5
IFN0YXRlcyBkeW5hbWljYWxseS4KKyAgICAgICAgLy8gVGhpcyBpcyBkb25lIGF0IHRoZSBwaXBl
bGluZSBjcmVhdGlvbiBsZXZlbCBmb3IgdGhlIG1vbWVudC4uLgorICAgIH07CisgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLl9nZXRTYW1wbGluZ1BhcmFtZXRl
cnMgPSBmdW5jdGlvbiAoc2FtcGxpbmdNb2RlLCBnZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAgICAg
dGhyb3cgIl9nZXRTYW1wbGluZ1BhcmFtZXRlcnMgaXMgbm90IGF2YWlsYWJsZSBpbiBXZWJHUFUi
OworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5iaW5kVW5pZm9ybUJsb2NrID0g
ZnVuY3Rpb24gKHBpcGVsaW5lQ29udGV4dCwgYmxvY2tOYW1lLCBpbmRleCkgeworICAgIH07Cisg
ICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5nZXRVbmlmb3JtcyA9IGZ1bmN0aW9uIChwaXBlbGlu
ZUNvbnRleHQsIHVuaWZvcm1zTmFtZXMpIHsKKyAgICAgICAgcmV0dXJuIFtdOworICAgIH07Cisg
ICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5zZXRJbnRBcnJheSA9IGZ1bmN0aW9uICh1bmlmb3Jt
LCBhcnJheSkgeworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5zZXRJbnRBcnJh
eTIgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsKKyAgICB9OworICAgIFdlYkdQVUVuZ2lu
ZS5wcm90b3R5cGUuc2V0SW50QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5KSB7Cisg
ICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnNldEludEFycmF5NCA9IGZ1bmN0aW9u
ICh1bmlmb3JtLCBhcnJheSkgeworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5z
ZXRGbG9hdEFycmF5ID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5KSB7CisgICAgfTsKKyAgICBX
ZWJHUFVFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0QXJyYXkyID0gZnVuY3Rpb24gKHVuaWZvcm0s
IGFycmF5KSB7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnNldEZsb2F0QXJy
YXkzID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5KSB7CisgICAgfTsKKyAgICBXZWJHUFVFbmdp
bmUucHJvdG90eXBlLnNldEZsb2F0QXJyYXk0ID0gZnVuY3Rpb24gKHVuaWZvcm0sIGFycmF5KSB7
CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnNldEFycmF5ID0gZnVuY3Rpb24g
KHVuaWZvcm0sIGFycmF5KSB7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnNl
dEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtLCBhcnJheSkgeworICAgIH07CisgICAgV2ViR1BV
RW5naW5lLnByb3RvdHlwZS5zZXRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9ybSwgYXJyYXkpIHsK
KyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuc2V0QXJyYXk0ID0gZnVuY3Rpb24g
KHVuaWZvcm0sIGFycmF5KSB7CisgICAgfTsKKyAgICBXZWJHUFVFbmdpbmUucHJvdG90eXBlLnNl
dE1hdHJpY2VzID0gZnVuY3Rpb24gKHVuaWZvcm0sIG1hdHJpY2VzKSB7CisgICAgfTsKKyAgICBX
ZWJHUFVFbmdpbmUucHJvdG90eXBlLnNldE1hdHJpeDN4MyA9IGZ1bmN0aW9uICh1bmlmb3JtLCBt
YXRyaXgpIHsKKyAgICB9OworICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuc2V0TWF0cml4Mngy
ID0gZnVuY3Rpb24gKHVuaWZvcm0sIG1hdHJpeCkgeworICAgIH07CisgICAgV2ViR1BVRW5naW5l
LnByb3RvdHlwZS5zZXRGbG9hdCA9IGZ1bmN0aW9uICh1bmlmb3JtLCB2YWx1ZSkgeworICAgIH07
CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5zZXRGbG9hdDIgPSBmdW5jdGlvbiAodW5pZm9y
bSwgeCwgeSkgeworICAgIH07CisgICAgV2ViR1BVRW5naW5lLnByb3RvdHlwZS5zZXRGbG9hdDMg
PSBmdW5jdGlvbiAodW5pZm9ybSwgeCwgeSwgeikgeworICAgIH07CisgICAgV2ViR1BVRW5naW5l
LnByb3RvdHlwZS5zZXRCb29sID0gZnVuY3Rpb24gKHVuaWZvcm0sIGJvb2wpIHsKKyAgICB9Owor
ICAgIFdlYkdQVUVuZ2luZS5wcm90b3R5cGUuc2V0RmxvYXQ0ID0gZnVuY3Rpb24gKHVuaWZvcm0s
IHgsIHksIHosIHcpIHsKKyAgICB9OworICAgIC8vIERlZmF1bHQgc2hhZGVyYyBvcHRpb25zLgor
ICAgIFdlYkdQVUVuZ2luZS5fc2hhZGVyY0RlZmF1bHRPcHRpb25zID0geworICAgICAgICBqc1Bh
dGg6ICJodHRwczovL3ByZXZpZXcuYmFieWxvbmpzLmNvbS9zaGFkZXJjL3NoYWRlcmMuanMiLAor
ICAgICAgICB3YXNtUGF0aDogImh0dHBzOi8vcHJldmlldy5iYWJ5bG9uanMuY29tL3NoYWRlcmMv
c2hhZGVyYy53YXNtIgorICAgIH07CisgICAgcmV0dXJuIFdlYkdQVUVuZ2luZTsKK30oX0VuZ2lu
ZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vRXZlbnRzL2NsaXBib2FyZEV2ZW50cy50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRXZlbnRzL2Ns
aXBib2FyZEV2ZW50cy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDbGlwYm9hcmRFdmVudFR5cGVzLCBDbGlwYm9h
cmRJbmZvICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNsaXBib2FyZEV2
ZW50VHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENsaXBib2FyZEV2ZW50VHlwZXM7IH0pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQ2xpcGJvYXJkSW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ2xp
cGJvYXJkSW5mbzsgfSk7CisvKioKKyAqIEdhdGhlciB0aGUgbGlzdCBvZiBjbGlwYm9hcmQgZXZl
bnQgdHlwZXMgYXMgY29uc3RhbnRzLgorICovCit2YXIgQ2xpcGJvYXJkRXZlbnRUeXBlcyA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBDbGlwYm9hcmRFdmVudFR5
cGVzKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBUaGUgY2xpcGJvYXJkIGV2ZW50IGlzIGZp
cmVkIHdoZW4gYSBjb3B5IGNvbW1hbmQgaXMgYWN0aXZlIChwcmVzc2VkKS4KKyAgICAgKi8KKyAg
ICBDbGlwYm9hcmRFdmVudFR5cGVzLkNPUFkgPSAweDAxOyAvLworICAgIC8qKgorICAgICAqICBU
aGUgY2xpcGJvYXJkIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBjdXQgY29tbWFuZCBpcyBhY3RpdmUg
KHByZXNzZWQpLgorICAgICAqLworICAgIENsaXBib2FyZEV2ZW50VHlwZXMuQ1VUID0gMHgwMjsK
KyAgICAvKioKKyAgICAgKiBUaGUgY2xpcGJvYXJkIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBwYXN0
ZSBjb21tYW5kIGlzIGFjdGl2ZSAocHJlc3NlZCkuCisgICAgICovCisgICAgQ2xpcGJvYXJkRXZl
bnRUeXBlcy5QQVNURSA9IDB4MDM7CisgICAgcmV0dXJuIENsaXBib2FyZEV2ZW50VHlwZXM7Cit9
KCkpOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBzdG9yZSBjbGlwYm9hcmQgcmVs
YXRlZCBpbmZvIGZvciB0aGUgb25DbGlwYm9hcmRPYnNlcnZhYmxlIGV2ZW50LgorICovCit2YXIg
Q2xpcGJvYXJkSW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAg
ICAgKkNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQ2xpcGJvYXJkSW5mby4KKyAgICAgKiBAcGFyYW0g
dHlwZSBEZWZpbmVzIHRoZSB0eXBlIG9mIGV2ZW50IChCQUJZTE9OLkNsaXBib2FyZEV2ZW50VHlw
ZXMpCisgICAgICogQHBhcmFtIGV2ZW50IERlZmluZXMgdGhlIHJlbGF0ZWQgZG9tIGV2ZW50Cisg
ICAgICovCisgICAgZnVuY3Rpb24gQ2xpcGJvYXJkSW5mbygKKyAgICAvKioKKyAgICAgKiBEZWZp
bmVzIHRoZSB0eXBlIG9mIGV2ZW50IChCQUJZTE9OLkNsaXBib2FyZEV2ZW50VHlwZXMpCisgICAg
ICovCisgICAgdHlwZSwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgcmVsYXRlZCBkb20g
ZXZlbnQKKyAgICAgKi8KKyAgICBldmVudCkgeworICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwor
ICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7CisgICAgfQorICAgIC8qKgorICAgICAqICBHZXQg
dGhlIGNsaXBib2FyZCBldmVudCdzIHR5cGUgZnJvbSB0aGUga2V5Y29kZS4KKyAgICAgKiBAcGFy
YW0ga2V5Q29kZSBEZWZpbmVzIHRoZSBrZXlDb2RlIGZvciB0aGUgY3VycmVudCBrZXlib2FyZCBl
dmVudC4KKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICovCisgICAgQ2xpcGJvYXJkSW5m
by5HZXRUeXBlRnJvbUNoYXJhY3RlciA9IGZ1bmN0aW9uIChrZXlDb2RlKSB7CisgICAgICAgIHZh
ciBjaGFyQ29kZSA9IGtleUNvZGU7CisgICAgICAgIC8vVE9ETzogYWRkIGNvZGVzIGZvciBleHRl
bmRlZCBBU0NJSQorICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7CisgICAgICAgICAgICBjYXNl
IDY3OiByZXR1cm4gQ2xpcGJvYXJkRXZlbnRUeXBlcy5DT1BZOworICAgICAgICAgICAgY2FzZSA4
NjogcmV0dXJuIENsaXBib2FyZEV2ZW50VHlwZXMuUEFTVEU7CisgICAgICAgICAgICBjYXNlIDg4
OiByZXR1cm4gQ2xpcGJvYXJkRXZlbnRUeXBlcy5DVVQ7CisgICAgICAgICAgICBkZWZhdWx0OiBy
ZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBDbGlwYm9hcmRJbmZvOwor
fSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9FdmVudHMvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRXZlbnRzL2luZGV4LnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
S2V5Ym9hcmRFdmVudFR5cGVzLCBLZXlib2FyZEluZm8sIEtleWJvYXJkSW5mb1ByZSwgUG9pbnRl
ckV2ZW50VHlwZXMsIFBvaW50ZXJJbmZvQmFzZSwgUG9pbnRlckluZm9QcmUsIFBvaW50ZXJJbmZv
LCBDbGlwYm9hcmRFdmVudFR5cGVzLCBDbGlwYm9hcmRJbmZvICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfa2V5Ym9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4va2V5Ym9hcmRFdmVudHMg
Ki8gIi4vRXZlbnRzL2tleWJvYXJkRXZlbnRzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktleWJv
YXJkRXZlbnRUeXBlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2tleWJvYXJkRXZlbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIktleWJvYXJkRXZlbnRUeXBlcyJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJLZXlib2FyZEluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9rZXlib2Fy
ZEV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJLZXlib2FyZEluZm8iXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiS2V5Ym9hcmRJbmZvUHJlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfa2V5Ym9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siS2V5Ym9hcmRJ
bmZvUHJlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvaW50ZXJFdmVudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
cG9pbnRlckV2ZW50cyAqLyAiLi9FdmVudHMvcG9pbnRlckV2ZW50cy50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQb2ludGVyRXZlbnRUeXBlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BvaW50ZXJF
dmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUG9pbnRlckV2ZW50VHlwZXMiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRlckluZm9CYXNlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb2ludGVy
SW5mb0Jhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRlckluZm9QcmUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlBvaW50ZXJJbmZvUHJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvaW50ZXJJbmZv
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJQb2ludGVySW5mbyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9jbGlwYm9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vY2xpcGJvYXJkRXZlbnRzICovICIuL0V2ZW50cy9jbGlwYm9hcmRF
dmVudHMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2xpcGJvYXJkRXZlbnRUeXBlcyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2NsaXBib2FyZEV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJDbGlwYm9hcmRFdmVudFR5cGVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNsaXBi
b2FyZEluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jbGlwYm9hcmRFdmVudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siQ2xpcGJvYXJkSW5mbyJdOyB9KTsKKworCisKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9FdmVudHMva2V5Ym9hcmRFdmVudHMudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vRXZlbnRzL2tleWJvYXJk
RXZlbnRzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogS2V5Ym9hcmRFdmVudFR5cGVzLCBLZXlib2FyZEluZm8sIEtl
eWJvYXJkSW5mb1ByZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJLZXli
b2FyZEV2ZW50VHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEtleWJvYXJkRXZlbnRUeXBlczsg
fSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJLZXlib2FyZEluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEtleWJvYXJkSW5mbzsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJLZXlib2FyZEluZm9QcmUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIEtleWJvYXJkSW5mb1ByZTsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lmpz
Iik7CisKKy8qKgorICogR2F0aGVyIHRoZSBsaXN0IG9mIGtleWJvYXJkIGV2ZW50IHR5cGVzIGFz
IGNvbnN0YW50cy4KKyAqLwordmFyIEtleWJvYXJkRXZlbnRUeXBlcyA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBLZXlib2FyZEV2ZW50VHlwZXMoKSB7CisgICAg
fQorICAgIC8qKgorICAgICAqIFRoZSBrZXlkb3duIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBrZXkg
YmVjb21lcyBhY3RpdmUgKHByZXNzZWQpLgorICAgICAqLworICAgIEtleWJvYXJkRXZlbnRUeXBl
cy5LRVlET1dOID0gMHgwMTsKKyAgICAvKioKKyAgICAgKiBUaGUga2V5dXAgZXZlbnQgaXMgZmly
ZWQgd2hlbiBhIGtleSBoYXMgYmVlbiByZWxlYXNlZC4KKyAgICAgKi8KKyAgICBLZXlib2FyZEV2
ZW50VHlwZXMuS0VZVVAgPSAweDAyOworICAgIHJldHVybiBLZXlib2FyZEV2ZW50VHlwZXM7Cit9
KCkpOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBzdG9yZSBrZXlib2FyZCByZWxh
dGVkIGluZm8gZm9yIHRoZSBvbktleWJvYXJkT2JzZXJ2YWJsZSBldmVudC4KKyAqLwordmFyIEtl
eWJvYXJkSW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBJbnN0YW50aWF0ZXMgYSBuZXcga2V5Ym9hcmQgaW5mby4KKyAgICAgKiBUaGlzIGNsYXNzIGlz
IHVzZWQgdG8gc3RvcmUga2V5Ym9hcmQgcmVsYXRlZCBpbmZvIGZvciB0aGUgb25LZXlib2FyZE9i
c2VydmFibGUgZXZlbnQuCisgICAgICogQHBhcmFtIHR5cGUgRGVmaW5lcyB0aGUgdHlwZSBvZiBl
dmVudCAoS2V5Ym9hcmRFdmVudFR5cGVzKQorICAgICAqIEBwYXJhbSBldmVudCBEZWZpbmVzIHRo
ZSByZWxhdGVkIGRvbSBldmVudAorICAgICAqLworICAgIGZ1bmN0aW9uIEtleWJvYXJkSW5mbygK
KyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSB0eXBlIG9mIGV2ZW50IChLZXlib2FyZEV2ZW50
VHlwZXMpCisgICAgICovCisgICAgdHlwZSwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUg
cmVsYXRlZCBkb20gZXZlbnQKKyAgICAgKi8KKyAgICBldmVudCkgeworICAgICAgICB0aGlzLnR5
cGUgPSB0eXBlOworICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7CisgICAgfQorICAgIHJldHVy
biBLZXlib2FyZEluZm87Cit9KCkpOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBz
dG9yZSBrZXlib2FyZCByZWxhdGVkIGluZm8gZm9yIHRoZSBvblByZUtleWJvYXJkT2JzZXJ2YWJs
ZSBldmVudC4KKyAqIFNldCB0aGUgc2tpcE9uS2V5Ym9hcmRPYnNlcnZhYmxlIHByb3BlcnR5IHRv
IHRydWUgaWYgeW91IHdhbnQgdGhlIGVuZ2luZSB0byBzdG9wIGFueSBwcm9jZXNzIGFmdGVyIHRo
aXMgZXZlbnQgaXMgdHJpZ2dlcmVkLCBldmVuIG5vdCBjYWxsaW5nIG9uS2V5Ym9hcmRPYnNlcnZh
YmxlCisgKi8KK3ZhciBLZXlib2FyZEluZm9QcmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
X3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRl
bmRzIl0oS2V5Ym9hcmRJbmZvUHJlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRp
YXRlcyBhIG5ldyBrZXlib2FyZCBwcmUgaW5mby4KKyAgICAgKiBUaGlzIGNsYXNzIGlzIHVzZWQg
dG8gc3RvcmUga2V5Ym9hcmQgcmVsYXRlZCBpbmZvIGZvciB0aGUgb25QcmVLZXlib2FyZE9ic2Vy
dmFibGUgZXZlbnQuCisgICAgICogQHBhcmFtIHR5cGUgRGVmaW5lcyB0aGUgdHlwZSBvZiBldmVu
dCAoS2V5Ym9hcmRFdmVudFR5cGVzKQorICAgICAqIEBwYXJhbSBldmVudCBEZWZpbmVzIHRoZSBy
ZWxhdGVkIGRvbSBldmVudAorICAgICAqLworICAgIGZ1bmN0aW9uIEtleWJvYXJkSW5mb1ByZSgK
KyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSB0eXBlIG9mIGV2ZW50IChLZXlib2FyZEV2ZW50
VHlwZXMpCisgICAgICovCisgICAgdHlwZSwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUg
cmVsYXRlZCBkb20gZXZlbnQKKyAgICAgKi8KKyAgICBldmVudCkgeworICAgICAgICB2YXIgX3Ro
aXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0eXBlLCBldmVudCkgfHwgdGhpczsKKyAgICAgICAgX3Ro
aXMudHlwZSA9IHR5cGU7CisgICAgICAgIF90aGlzLmV2ZW50ID0gZXZlbnQ7CisgICAgICAgIF90
aGlzLnNraXBPblBvaW50ZXJPYnNlcnZhYmxlID0gZmFsc2U7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgcmV0dXJuIEtleWJvYXJkSW5mb1ByZTsKK30oS2V5Ym9hcmRJbmZvKSk7
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vRXZlbnRzL3BvaW50ZXJFdmVudHMudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9FdmVudHMv
cG9pbnRlckV2ZW50cy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9pbnRlckV2ZW50VHlwZXMsIFBvaW50ZXJJbmZv
QmFzZSwgUG9pbnRlckluZm9QcmUsIFBvaW50ZXJJbmZvICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBvaW50ZXJFdmVudFR5cGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQ
b2ludGVyRXZlbnRUeXBlczsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2ludGVySW5mb0Jhc2Ui
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvaW50ZXJJbmZvQmFzZTsgfSk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJQb2ludGVySW5mb1ByZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUG9pbnRlckluZm9QcmU7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRlckluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFBvaW50ZXJJbmZvOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8g
Ii4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhz
L21hdGgudmVjdG9yLnRzIik7CisKKworLyoqCisgKiBHYXRoZXIgdGhlIGxpc3Qgb2YgcG9pbnRl
ciBldmVudCB0eXBlcyBhcyBjb25zdGFudHMuCisgKi8KK3ZhciBQb2ludGVyRXZlbnRUeXBlcyA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQb2ludGVyRXZlbnRU
eXBlcygpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogVGhlIHBvaW50ZXJkb3duIGV2ZW50IGlz
IGZpcmVkIHdoZW4gYSBwb2ludGVyIGJlY29tZXMgYWN0aXZlLiBGb3IgbW91c2UsIGl0IGlzIGZp
cmVkIHdoZW4gdGhlIGRldmljZSB0cmFuc2l0aW9ucyBmcm9tIG5vIGJ1dHRvbnMgZGVwcmVzc2Vk
IHRvIGF0IGxlYXN0IG9uZSBidXR0b24gZGVwcmVzc2VkLiBGb3IgdG91Y2gsIGl0IGlzIGZpcmVk
IHdoZW4gcGh5c2ljYWwgY29udGFjdCBpcyBtYWRlIHdpdGggdGhlIGRpZ2l0aXplci4gRm9yIHBl
biwgaXQgaXMgZmlyZWQgd2hlbiB0aGUgc3R5bHVzIG1ha2VzIHBoeXNpY2FsIGNvbnRhY3Qgd2l0
aCB0aGUgZGlnaXRpemVyLgorICAgICAqLworICAgIFBvaW50ZXJFdmVudFR5cGVzLlBPSU5URVJE
T1dOID0gMHgwMTsKKyAgICAvKioKKyAgICAgKiBUaGUgcG9pbnRlcnVwIGV2ZW50IGlzIGZpcmVk
IHdoZW4gYSBwb2ludGVyIGlzIG5vIGxvbmdlciBhY3RpdmUuCisgICAgICovCisgICAgUG9pbnRl
ckV2ZW50VHlwZXMuUE9JTlRFUlVQID0gMHgwMjsKKyAgICAvKioKKyAgICAgKiBUaGUgcG9pbnRl
cm1vdmUgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIHBvaW50ZXIgY2hhbmdlcyBjb29yZGluYXRlcy4K
KyAgICAgKi8KKyAgICBQb2ludGVyRXZlbnRUeXBlcy5QT0lOVEVSTU9WRSA9IDB4MDQ7CisgICAg
LyoqCisgICAgICogVGhlIHBvaW50ZXJ3aGVlbCBldmVudCBpcyBmaXJlZCB3aGVuIGEgbW91c2Ug
d2hlZWwgaGFzIGJlZW4gcm90YXRlZC4KKyAgICAgKi8KKyAgICBQb2ludGVyRXZlbnRUeXBlcy5Q
T0lOVEVSV0hFRUwgPSAweDA4OworICAgIC8qKgorICAgICAqIFRoZSBwb2ludGVycGljayBldmVu
dCBpcyBmaXJlZCB3aGVuIGEgbWVzaCBvciBzcHJpdGUgaGFzIGJlZW4gcGlja2VkIGJ5IHRoZSBw
b2ludGVyLgorICAgICAqLworICAgIFBvaW50ZXJFdmVudFR5cGVzLlBPSU5URVJQSUNLID0gMHgx
MDsKKyAgICAvKioKKyAgICAgKiBUaGUgcG9pbnRlcnRhcCBldmVudCBpcyBmaXJlZCB3aGVuIGEg
dGhlIG9iamVjdCBoYXMgYmVlbiB0b3VjaGVkIGFuZCByZWxlYXNlZCB3aXRob3V0IGRyYWcuCisg
ICAgICovCisgICAgUG9pbnRlckV2ZW50VHlwZXMuUE9JTlRFUlRBUCA9IDB4MjA7CisgICAgLyoq
CisgICAgICogVGhlIHBvaW50ZXJkb3VibGV0YXAgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIHRoZSBv
YmplY3QgaGFzIGJlZW4gdG91Y2hlZCBhbmQgcmVsZWFzZWQgdHdpY2Ugd2l0aG91dCBkcmFnLgor
ICAgICAqLworICAgIFBvaW50ZXJFdmVudFR5cGVzLlBPSU5URVJET1VCTEVUQVAgPSAweDQwOwor
ICAgIHJldHVybiBQb2ludGVyRXZlbnRUeXBlczsKK30oKSk7CisKKy8qKgorICogQmFzZSBjbGFz
cyBvZiBwb2ludGVyIGluZm8gdHlwZXMuCisgKi8KK3ZhciBQb2ludGVySW5mb0Jhc2UgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIHRo
ZSBiYXNlIGNsYXNzIG9mIHBvaW50ZXJzIGluZm8uCisgICAgICogQHBhcmFtIHR5cGUgRGVmaW5l
cyB0aGUgdHlwZSBvZiBldmVudCAoUG9pbnRlckV2ZW50VHlwZXMpCisgICAgICogQHBhcmFtIGV2
ZW50IERlZmluZXMgdGhlIHJlbGF0ZWQgZG9tIGV2ZW50CisgICAgICovCisgICAgZnVuY3Rpb24g
UG9pbnRlckluZm9CYXNlKAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIHR5cGUgb2YgZXZl
bnQgKFBvaW50ZXJFdmVudFR5cGVzKQorICAgICAqLworICAgIHR5cGUsIAorICAgIC8qKgorICAg
ICAqIERlZmluZXMgdGhlIHJlbGF0ZWQgZG9tIGV2ZW50CisgICAgICovCisgICAgZXZlbnQpIHsK
KyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICAgICAgdGhpcy5ldmVudCA9IGV2ZW50Owor
ICAgIH0KKyAgICByZXR1cm4gUG9pbnRlckluZm9CYXNlOworfSgpKTsKKworLyoqCisgKiBUaGlz
IGNsYXNzIGlzIHVzZWQgdG8gc3RvcmUgcG9pbnRlciByZWxhdGVkIGluZm8gZm9yIHRoZSBvblBy
ZVBvaW50ZXJPYnNlcnZhYmxlIGV2ZW50LgorICogU2V0IHRoZSBza2lwT25Qb2ludGVyT2JzZXJ2
YWJsZSBwcm9wZXJ0eSB0byB0cnVlIGlmIHlvdSB3YW50IHRoZSBlbmdpbmUgdG8gc3RvcCBhbnkg
cHJvY2VzcyBhZnRlciB0aGlzIGV2ZW50IGlzIHRyaWdnZXJlZCwgZXZlbiBub3QgY2FsbGluZyBv
blBvaW50ZXJPYnNlcnZhYmxlCisgKi8KK3ZhciBQb2ludGVySW5mb1ByZSA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2V4dGVuZHMiXShQb2ludGVySW5mb1ByZSwgX3N1cGVyKTsKKyAgICAvKioKKyAg
ICAgKiBJbnN0YW50aWF0ZXMgYSBQb2ludGVySW5mb1ByZSB0byBzdG9yZSBwb2ludGVyIHJlbGF0
ZWQgaW5mbyB0byB0aGUgb25QcmVQb2ludGVyT2JzZXJ2YWJsZSBldmVudC4KKyAgICAgKiBAcGFy
YW0gdHlwZSBEZWZpbmVzIHRoZSB0eXBlIG9mIGV2ZW50IChQb2ludGVyRXZlbnRUeXBlcykKKyAg
ICAgKiBAcGFyYW0gZXZlbnQgRGVmaW5lcyB0aGUgcmVsYXRlZCBkb20gZXZlbnQKKyAgICAgKiBA
cGFyYW0gbG9jYWxYIERlZmluZXMgdGhlIGxvY2FsIHggY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50
ZXIgd2hlbiB0aGUgZXZlbnQgb2NjdXJlZAorICAgICAqIEBwYXJhbSBsb2NhbFkgRGVmaW5lcyB0
aGUgbG9jYWwgeSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnRlciB3aGVuIHRoZSBldmVudCBvY2N1
cmVkCisgICAgICovCisgICAgZnVuY3Rpb24gUG9pbnRlckluZm9QcmUodHlwZSwgZXZlbnQsIGxv
Y2FsWCwgbG9jYWxZKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5
cGUsIGV2ZW50KSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAgICogUmF5IGZyb20gYSBw
b2ludGVyIGlmIGF2YWlsaWJsZSAoZWcuIDZkb2YgY29udHJvbGxlcikKKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLnJheSA9IG51bGw7CisgICAgICAgIF90aGlzLnNraXBPblBvaW50ZXJPYnNl
cnZhYmxlID0gZmFsc2U7CisgICAgICAgIF90aGlzLmxvY2FsUG9zaXRpb24gPSBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjIiXShsb2Nh
bFgsIGxvY2FsWSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgcmV0dXJuIFBv
aW50ZXJJbmZvUHJlOworfShQb2ludGVySW5mb0Jhc2UpKTsKKworLyoqCisgKiBUaGlzIHR5cGUg
Y29udGFpbnMgYWxsIHRoZSBkYXRhIHJlbGF0ZWQgdG8gYSBwb2ludGVyIGV2ZW50IGluIEJhYnls
b24uanMuCisgKiBUaGUgZXZlbnQgbWVtYmVyIGlzIGFuIGluc3RhbmNlIG9mIFBvaW50ZXJFdmVu
dCBmb3IgYWxsIHR5cGVzIGV4Y2VwdCBQb2ludGVyV2hlZWwgYW5kIGlzIG9mIHR5cGUgTW91c2VX
aGVlbEV2ZW50IHdoZW4gdHlwZSBlcXVhbHMgUG9pbnRlcldoZWVsLiBUaGUgZGlmZmVyZW50IGV2
ZW50IHR5cGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUG9pbnRlckV2ZW50VHlwZXMgY2xhc3MuCisg
Ki8KK3ZhciBQb2ludGVySW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShQb2lu
dGVySW5mbywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBQb2ludGVy
SW5mbyB0byBzdG9yZSBwb2ludGVyIHJlbGF0ZWQgaW5mbyB0byB0aGUgb25Qb2ludGVyT2JzZXJ2
YWJsZSBldmVudC4KKyAgICAgKiBAcGFyYW0gdHlwZSBEZWZpbmVzIHRoZSB0eXBlIG9mIGV2ZW50
IChQb2ludGVyRXZlbnRUeXBlcykKKyAgICAgKiBAcGFyYW0gZXZlbnQgRGVmaW5lcyB0aGUgcmVs
YXRlZCBkb20gZXZlbnQKKyAgICAgKiBAcGFyYW0gcGlja0luZm8gRGVmaW5lcyB0aGUgcGlja2lu
ZyBpbmZvIGFzc29jaWF0ZWQgdG8gdGhlIGluZm8gKGlmIGFueSlcCisgICAgICovCisgICAgZnVu
Y3Rpb24gUG9pbnRlckluZm8odHlwZSwgZXZlbnQsIAorICAgIC8qKgorICAgICAqIERlZmluZXMg
dGhlIHBpY2tpbmcgaW5mbyBhc3NvY2lhdGVkIHRvIHRoZSBpbmZvIChpZiBhbnkpXAorICAgICAq
LworICAgIHBpY2tJbmZvKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMs
IHR5cGUsIGV2ZW50KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5waWNrSW5mbyA9IHBpY2tJbmZv
OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIHJldHVybiBQb2ludGVySW5mbzsK
K30oUG9pbnRlckluZm9CYXNlKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vR2FtZXBh
ZHMvQ29udHJvbGxlcnMvZGF5ZHJlYW1Db250cm9sbGVyLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dhbWVw
YWRzL0NvbnRyb2xsZXJzL2RheWRyZWFtQ29udHJvbGxlci50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IERheWRyZWFtQ29udHJvbGxlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJEYXlkcmVhbUNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERheWRy
ZWFtQ29udHJvbGxlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9M
b2FkaW5nL3NjZW5lTG9hZGVyICovICIuL0xvYWRpbmcvc2NlbmVMb2FkZXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfd2ViVlJDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3dlYlZSQ29udHJvbGxlciAqLyAi
Li9HYW1lcGFkcy9Db250cm9sbGVycy93ZWJWUkNvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc2VFbmFibGVkQ29udHJvbGxl
ciAqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy9wb3NlRW5hYmxlZENvbnRyb2xsZXIudHMiKTsK
KworCisKKworCisvKioKKyAqIEdvb2dsZSBEYXlkcmVhbSBjb250cm9sbGVyCisgKi8KK3ZhciBE
YXlkcmVhbUNvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oRGF5ZHJl
YW1Db250cm9sbGVyLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgRGF5
ZHJlYW1Db250cm9sbGVyIGZyb20gYSBnYW1lcGFkCisgICAgICogQHBhcmFtIHZyR2FtZXBhZCB0
aGUgZ2FtZXBhZCB0aGF0IHRoZSBjb250cm9sbGVyIHNob3VsZCBiZSBjcmVhdGVkIGZyb20KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBEYXlkcmVhbUNvbnRyb2xsZXIodnJHYW1lcGFkKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHZyR2FtZXBhZCkgfHwgdGhpczsKKyAg
ICAgICAgX3RoaXMuY29udHJvbGxlclR5cGUgPSBfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvc2VFbmFibGVkQ29udHJvbGxlclR5cGUiXS5EQVlE
UkVBTTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBJbXBs
ZW1lbnRzIGFic3RyYWN0IG1ldGhvZCBvbiBXZWJWUkNvbnRyb2xsZXIgY2xhc3MsIGxvYWRpbmcg
Y29udHJvbGxlciBtZXNoZXMgYW5kIGNhbGxpbmcgdGhpcy5hdHRhY2hUb01lc2ggaWYgc3VjY2Vz
c2Z1bC4KKyAgICAgKiBAcGFyYW0gc2NlbmUgc2NlbmUgaW4gd2hpY2ggdG8gYWRkIG1lc2hlcwor
ICAgICAqIEBwYXJhbSBtZXNoTG9hZGVkIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQg
d2lsbCBiZSBjYWxsZWQgaWYgdGhlIG1lc2ggbG9hZHMgc3VjY2Vzc2Z1bGx5LgorICAgICAqLwor
ICAgIERheWRyZWFtQ29udHJvbGxlci5wcm90b3R5cGUuaW5pdENvbnRyb2xsZXJNZXNoID0gZnVu
Y3Rpb24gKHNjZW5lLCBtZXNoTG9hZGVkKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlNjZW5lTG9hZGVyIl0uSW1wb3J0TWVzaCgiIiwgRGF5ZHJlYW1Db250cm9sbGVyLk1PREVMX0JB
U0VfVVJMLCBEYXlkcmVhbUNvbnRyb2xsZXIuTU9ERUxfRklMRU5BTUUsIHNjZW5lLCBmdW5jdGlv
biAobmV3TWVzaGVzKSB7CisgICAgICAgICAgICBfdGhpcy5fZGVmYXVsdE1vZGVsID0gbmV3TWVz
aGVzWzFdOworICAgICAgICAgICAgX3RoaXMuYXR0YWNoVG9NZXNoKF90aGlzLl9kZWZhdWx0TW9k
ZWwpOworICAgICAgICAgICAgaWYgKG1lc2hMb2FkZWQpIHsKKyAgICAgICAgICAgICAgICBtZXNo
TG9hZGVkKF90aGlzLl9kZWZhdWx0TW9kZWwpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxlZCBvbmNlIGZvciBlYWNoIGJ1dHRvbiB0aGF0
IGNoYW5nZWQgc3RhdGUgc2luY2UgdGhlIGxhc3QgZnJhbWUKKyAgICAgKiBAcGFyYW0gYnV0dG9u
SWR4IFdoaWNoIGJ1dHRvbiBpbmRleCBjaGFuZ2VkCisgICAgICogQHBhcmFtIHN0YXRlIE5ldyBz
dGF0ZSBvZiB0aGUgYnV0dG9uCisgICAgICogQHBhcmFtIGNoYW5nZXMgV2hpY2ggcHJvcGVydGll
cyBvbiB0aGUgc3RhdGUgY2hhbmdlZCBzaW5jZSBsYXN0IGZyYW1lCisgICAgICovCisgICAgRGF5
ZHJlYW1Db250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlQnV0dG9uQ2hhbmdlID0gZnVuY3Rpb24g
KGJ1dHRvbklkeCwgc3RhdGUsIGNoYW5nZXMpIHsKKyAgICAgICAgLy8gRGF5ZHJlYW0gY29udHJv
bGxlciBvbmx5IGhhcyAxIEdhbWVwYWRCdXR0b24gKG9uIHRoZSB0cmFja3BhZCkuCisgICAgICAg
IGlmIChidXR0b25JZHggPT09IDApIHsKKyAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gdGhp
cy5vblRyaWdnZXJTdGF0ZUNoYW5nZWRPYnNlcnZhYmxlOworICAgICAgICAgICAgaWYgKG9ic2Vy
dmFibGUpIHsKKyAgICAgICAgICAgICAgICBvYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhzdGF0
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAvLyBJZiB0aGUgYXBwIG9yIGhvbWUgYnV0dG9ucyBhcmUgZXZlciBtYWRlIGF2YWlsYWJsZQor
ICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxv
Z2dlciJdLldhcm4oIlVucmVjb2duaXplZCBEYXlkcmVhbSBidXR0b24gaW5kZXg6ICIgKyBidXR0
b25JZHgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCYXNlIFVybCBmb3Ig
dGhlIGNvbnRyb2xsZXIgbW9kZWwuCisgICAgICovCisgICAgRGF5ZHJlYW1Db250cm9sbGVyLk1P
REVMX0JBU0VfVVJMID0gJ2h0dHBzOi8vY29udHJvbGxlcnMuYmFieWxvbmpzLmNvbS9nZW5lcmlj
Lyc7CisgICAgLyoqCisgICAgICogRmlsZSBuYW1lIGZvciB0aGUgY29udHJvbGxlciBtb2RlbC4K
KyAgICAgKi8KKyAgICBEYXlkcmVhbUNvbnRyb2xsZXIuTU9ERUxfRklMRU5BTUUgPSAnZ2VuZXJp
Yy5iYWJ5bG9uJzsKKyAgICAvKioKKyAgICAgKiBHYW1lcGFkIElkIHByZWZpeCB1c2VkIHRvIGlk
ZW50aWZ5IERheWRyZWFtIENvbnRyb2xsZXIuCisgICAgICovCisgICAgRGF5ZHJlYW1Db250cm9s
bGVyLkdBTUVQQURfSURfUFJFRklYID0gJ0RheWRyZWFtJzsgLy8gaWQgaXMgJ0RheWRyZWFtIENv
bnRyb2xsZXInCisgICAgcmV0dXJuIERheWRyZWFtQ29udHJvbGxlcjsKK30oX3dlYlZSQ29udHJv
bGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJXZWJWUkNvbnRyb2xsZXIiXSkpOwor
CitfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBv
c2VFbmFibGVkQ29udHJvbGxlckhlbHBlciJdLl9Db250cm9sbGVyRmFjdG9yaWVzLnB1c2goewor
ICAgIGNhbkNyZWF0ZTogZnVuY3Rpb24gKGdhbWVwYWRJbmZvKSB7CisgICAgICAgIHJldHVybiBn
YW1lcGFkSW5mby5pZC5pbmRleE9mKERheWRyZWFtQ29udHJvbGxlci5HQU1FUEFEX0lEX1BSRUZJ
WCkgPT09IDA7CisgICAgfSwKKyAgICBjcmVhdGU6IGZ1bmN0aW9uIChnYW1lcGFkSW5mbykgewor
ICAgICAgICByZXR1cm4gbmV3IERheWRyZWFtQ29udHJvbGxlcihnYW1lcGFkSW5mbyk7CisgICAg
fQorfSk7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0dhbWVwYWRzL0NvbnRyb2xsZXJzL2dl
YXJWUkNvbnRyb2xsZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dhbWVwYWRzL0NvbnRyb2xsZXJzL2dlYXJW
UkNvbnRyb2xsZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogR2VhclZSQ29udHJvbGxl
ciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHZWFyVlJDb250cm9sbGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBHZWFyVlJDb250cm9sbGVyOyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5l
czYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNo
ZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Mb2FkaW5nX3NjZW5lTG9h
ZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9Mb2FkaW5nL3NjZW5lTG9hZGVyICovICIuL0xvYWRpbmcvc2NlbmVMb2FkZXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2ViVlJDb250cm9sbGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3dlYlZSQ29udHJv
bGxlciAqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy93ZWJWUkNvbnRyb2xsZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc2VFbmFibGVk
Q29udHJvbGxlciAqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy9wb3NlRW5hYmxlZENvbnRyb2xs
ZXIudHMiKTsKKworCisKKworCisKKy8qKgorICAgICAqIEdlYXIgVlIgQ29udHJvbGxlcgorICAg
ICAqLwordmFyIEdlYXJWUkNvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1
cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRz
Il0oR2VhclZSQ29udHJvbGxlciwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEg
bmV3IEdlYXJWUkNvbnRyb2xsZXIgZnJvbSBhIGdhbWVwYWQKKyAgICAgKiBAcGFyYW0gdnJHYW1l
cGFkIHRoZSBnYW1lcGFkIHRoYXQgdGhlIGNvbnRyb2xsZXIgc2hvdWxkIGJlIGNyZWF0ZWQgZnJv
bQorICAgICAqLworICAgIGZ1bmN0aW9uIEdlYXJWUkNvbnRyb2xsZXIodnJHYW1lcGFkKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHZyR2FtZXBhZCkgfHwgdGhpczsK
KyAgICAgICAgX3RoaXMuX2J1dHRvbkluZGV4VG9PYnNlcnZhYmxlTmFtZU1hcCA9IFsKKyAgICAg
ICAgICAgICdvblBhZFN0YXRlQ2hhbmdlZE9ic2VydmFibGUnLAorICAgICAgICAgICAgJ29uVHJp
Z2dlclN0YXRlQ2hhbmdlZE9ic2VydmFibGUnIC8vIFRyaWdnZXIKKyAgICAgICAgXTsKKyAgICAg
ICAgX3RoaXMuY29udHJvbGxlclR5cGUgPSBfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlBvc2VFbmFibGVkQ29udHJvbGxlclR5cGUiXS5HRUFSX1ZS
OworICAgICAgICAvLyBJbml0aWFsIHN0YXJ0aW5nIHBvc2l0aW9uIGRlZmF1bHRzIHRvIHdoZXJl
IGhhbmQgd291bGQgYmUgKGluY2FzZSBvZiBvbmx5IDNkb2YgY29udHJvbGxlcikKKyAgICAgICAg
X3RoaXMuX2NhbGN1bGF0ZWRQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKF90aGlzLmhhbmQgPT0gImxlZnQiID8g
LTAuMTUgOiAwLjE1LCAtMC41LCAwLjI1KTsKKyAgICAgICAgX3RoaXMuX2Rpc2FibGVUcmFja1Bv
c2l0aW9uKF90aGlzLl9jYWxjdWxhdGVkUG9zaXRpb24pOworICAgICAgICByZXR1cm4gX3RoaXM7
CisgICAgfQorICAgIC8qKgorICAgICAqIEltcGxlbWVudHMgYWJzdHJhY3QgbWV0aG9kIG9uIFdl
YlZSQ29udHJvbGxlciBjbGFzcywgbG9hZGluZyBjb250cm9sbGVyIG1lc2hlcyBhbmQgY2FsbGlu
ZyB0aGlzLmF0dGFjaFRvTWVzaCBpZiBzdWNjZXNzZnVsLgorICAgICAqIEBwYXJhbSBzY2VuZSBz
Y2VuZSBpbiB3aGljaCB0byBhZGQgbWVzaGVzCisgICAgICogQHBhcmFtIG1lc2hMb2FkZWQgb3B0
aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBpZiB0aGUgbWVzaCBs
b2FkcyBzdWNjZXNzZnVsbHkuCisgICAgICovCisgICAgR2VhclZSQ29udHJvbGxlci5wcm90b3R5
cGUuaW5pdENvbnRyb2xsZXJNZXNoID0gZnVuY3Rpb24gKHNjZW5lLCBtZXNoTG9hZGVkKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlNjZW5lTG9hZGVyIl0uSW1wb3J0TWVzaCgiIiwg
R2VhclZSQ29udHJvbGxlci5NT0RFTF9CQVNFX1VSTCwgR2VhclZSQ29udHJvbGxlci5NT0RFTF9G
SUxFTkFNRSwgc2NlbmUsIGZ1bmN0aW9uIChuZXdNZXNoZXMpIHsKKyAgICAgICAgICAgIC8vIE9m
ZnNldCB0aGUgY29udHJvbGxlciBzbyBpdCB3aWxsIHJvdGF0ZSBhcm91bmQgdGhlIHVzZXJzIHdy
aXN0CisgICAgICAgICAgICB2YXIgbWVzaCA9IG5ldyBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTWVzaCJdKCIiLCBzY2VuZSk7CisgICAgICAgICAgICBuZXdNZXNo
ZXNbMV0ucGFyZW50ID0gbWVzaDsKKyAgICAgICAgICAgIG5ld01lc2hlc1sxXS5wb3NpdGlvbi56
ID0gLTAuMTU7CisgICAgICAgICAgICBfdGhpcy5fZGVmYXVsdE1vZGVsID0gbWVzaDsKKyAgICAg
ICAgICAgIF90aGlzLmF0dGFjaFRvTWVzaChfdGhpcy5fZGVmYXVsdE1vZGVsKTsKKyAgICAgICAg
ICAgIGlmIChtZXNoTG9hZGVkKSB7CisgICAgICAgICAgICAgICAgbWVzaExvYWRlZChfdGhpcy5f
ZGVmYXVsdE1vZGVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDYWxsZWQgb25jZSBmb3IgZWFjaCBidXR0b24gdGhhdCBjaGFuZ2VkIHN0YXRl
IHNpbmNlIHRoZSBsYXN0IGZyYW1lCisgICAgICogQHBhcmFtIGJ1dHRvbklkeCBXaGljaCBidXR0
b24gaW5kZXggY2hhbmdlZAorICAgICAqIEBwYXJhbSBzdGF0ZSBOZXcgc3RhdGUgb2YgdGhlIGJ1
dHRvbgorICAgICAqIEBwYXJhbSBjaGFuZ2VzIFdoaWNoIHByb3BlcnRpZXMgb24gdGhlIHN0YXRl
IGNoYW5nZWQgc2luY2UgbGFzdCBmcmFtZQorICAgICAqLworICAgIEdlYXJWUkNvbnRyb2xsZXIu
cHJvdG90eXBlLl9oYW5kbGVCdXR0b25DaGFuZ2UgPSBmdW5jdGlvbiAoYnV0dG9uSWR4LCBzdGF0
ZSwgY2hhbmdlcykgeworICAgICAgICBpZiAoYnV0dG9uSWR4IDwgdGhpcy5fYnV0dG9uSW5kZXhU
b09ic2VydmFibGVOYW1lTWFwLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIG9ic2VydmFibGVO
YW1lID0gdGhpcy5fYnV0dG9uSW5kZXhUb09ic2VydmFibGVOYW1lTWFwW2J1dHRvbklkeF07Cisg
ICAgICAgICAgICAvLyBPbmx5IGVtaXQgZXZlbnRzIGZvciBidXR0b25zIHRoYXQgd2Uga25vdyBo
b3cgdG8gbWFwIGZyb20gaW5kZXggdG8gb2JzZXJ2YWJsZQorICAgICAgICAgICAgdmFyIG9ic2Vy
dmFibGUgPSB0aGlzW29ic2VydmFibGVOYW1lXTsKKyAgICAgICAgICAgIGlmIChvYnNlcnZhYmxl
KSB7CisgICAgICAgICAgICAgICAgb2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoc3RhdGUpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCYXNlIFVy
bCBmb3IgdGhlIGNvbnRyb2xsZXIgbW9kZWwuCisgICAgICovCisgICAgR2VhclZSQ29udHJvbGxl
ci5NT0RFTF9CQVNFX1VSTCA9ICdodHRwczovL2NvbnRyb2xsZXJzLmJhYnlsb25qcy5jb20vZ2Vu
ZXJpYy8nOworICAgIC8qKgorICAgICAqIEZpbGUgbmFtZSBmb3IgdGhlIGNvbnRyb2xsZXIgbW9k
ZWwuCisgICAgICovCisgICAgR2VhclZSQ29udHJvbGxlci5NT0RFTF9GSUxFTkFNRSA9ICdnZW5l
cmljLmJhYnlsb24nOworICAgIC8qKgorICAgICAqIEdhbWVwYWQgSWQgcHJlZml4IHVzZWQgdG8g
aWRlbnRpZnkgdGhpcyBjb250cm9sbGVyLgorICAgICAqLworICAgIEdlYXJWUkNvbnRyb2xsZXIu
R0FNRVBBRF9JRF9QUkVGSVggPSAnR2VhciBWUic7IC8vIGlkIGlzICdHZWFyIFZSIENvbnRyb2xs
ZXInCisgICAgcmV0dXJuIEdlYXJWUkNvbnRyb2xsZXI7Cit9KF93ZWJWUkNvbnRyb2xsZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siV2ViVlJDb250cm9sbGVyIl0pKTsKKworX3Bvc2VF
bmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJQb3NlRW5hYmxl
ZENvbnRyb2xsZXJIZWxwZXIiXS5fQ29udHJvbGxlckZhY3Rvcmllcy5wdXNoKHsKKyAgICBjYW5D
cmVhdGU6IGZ1bmN0aW9uIChnYW1lcGFkSW5mbykgeworICAgICAgICByZXR1cm4gZ2FtZXBhZElu
Zm8uaWQuaW5kZXhPZihHZWFyVlJDb250cm9sbGVyLkdBTUVQQURfSURfUFJFRklYKSA9PT0gMCB8
fAorICAgICAgICAgICAgZ2FtZXBhZEluZm8uaWQuaW5kZXhPZignT2N1bHVzIEdvJykgIT09IC0x
IHx8CisgICAgICAgICAgICBnYW1lcGFkSW5mby5pZC5pbmRleE9mKCdWaXZlIEZvY3VzJykgIT09
IC0xOworICAgIH0sCisgICAgY3JlYXRlOiBmdW5jdGlvbiAoZ2FtZXBhZEluZm8pIHsKKyAgICAg
ICAgcmV0dXJuIG5ldyBHZWFyVlJDb250cm9sbGVyKGdhbWVwYWRJbmZvKTsKKyAgICB9Cit9KTsK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvZ2VuZXJpY0Nv
bnRyb2xsZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9HYW1lcGFkcy9Db250cm9sbGVycy9nZW5lcmljQ29u
dHJvbGxlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogR2VuZXJpY0NvbnRyb2xsZXIg
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2VuZXJpY0NvbnRyb2xsZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIEdlbmVyaWNDb250cm9sbGVyOyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5l
czYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTG9hZGluZ19zY2VuZUxvYWRlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTG9hZGluZy9zY2VuZUxvYWRlciAqLyAiLi9Mb2FkaW5nL3NjZW5lTG9hZGVyLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlYlZSQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJWUkNvbnRyb2xsZXIg
Ki8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvd2ViVlJDb250cm9sbGVyLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3Bvc2VFbmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3NlRW5hYmxlZENvbnRy
b2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvcG9zZUVuYWJsZWRDb250cm9sbGVyLnRz
Iik7CisKKworCisKKy8qKgorICogR2VuZXJpYyBDb250cm9sbGVyCisgKi8KK3ZhciBHZW5lcmlj
Q29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShHZW5lcmljQ29udHJv
bGxlciwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEdlbmVyaWNDb250
cm9sbGVyIGZyb20gYSBnYW1lcGFkCisgICAgICogQHBhcmFtIHZyR2FtZXBhZCB0aGUgZ2FtZXBh
ZCB0aGF0IHRoZSBjb250cm9sbGVyIHNob3VsZCBiZSBjcmVhdGVkIGZyb20KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBHZW5lcmljQ29udHJvbGxlcih2ckdhbWVwYWQpIHsKKyAgICAgICAgcmV0dXJu
IF9zdXBlci5jYWxsKHRoaXMsIHZyR2FtZXBhZCkgfHwgdGhpczsKKyAgICB9CisgICAgLyoqCisg
ICAgICogSW1wbGVtZW50cyBhYnN0cmFjdCBtZXRob2Qgb24gV2ViVlJDb250cm9sbGVyIGNsYXNz
LCBsb2FkaW5nIGNvbnRyb2xsZXIgbWVzaGVzIGFuZCBjYWxsaW5nIHRoaXMuYXR0YWNoVG9NZXNo
IGlmIHN1Y2Nlc3NmdWwuCisgICAgICogQHBhcmFtIHNjZW5lIHNjZW5lIGluIHdoaWNoIHRvIGFk
ZCBtZXNoZXMKKyAgICAgKiBAcGFyYW0gbWVzaExvYWRlZCBvcHRpb25hbCBjYWxsYmFjayBmdW5j
dGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGlmIHRoZSBtZXNoIGxvYWRzIHN1Y2Nlc3NmdWxseS4K
KyAgICAgKi8KKyAgICBHZW5lcmljQ29udHJvbGxlci5wcm90b3R5cGUuaW5pdENvbnRyb2xsZXJN
ZXNoID0gZnVuY3Rpb24gKHNjZW5lLCBtZXNoTG9hZGVkKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlNjZW5lTG9hZGVyIl0uSW1wb3J0TWVzaCgiIiwgR2VuZXJpY0NvbnRyb2xsZXIu
TU9ERUxfQkFTRV9VUkwsIEdlbmVyaWNDb250cm9sbGVyLk1PREVMX0ZJTEVOQU1FLCBzY2VuZSwg
ZnVuY3Rpb24gKG5ld01lc2hlcykgeworICAgICAgICAgICAgX3RoaXMuX2RlZmF1bHRNb2RlbCA9
IG5ld01lc2hlc1sxXTsKKyAgICAgICAgICAgIF90aGlzLmF0dGFjaFRvTWVzaChfdGhpcy5fZGVm
YXVsdE1vZGVsKTsKKyAgICAgICAgICAgIGlmIChtZXNoTG9hZGVkKSB7CisgICAgICAgICAgICAg
ICAgbWVzaExvYWRlZChfdGhpcy5fZGVmYXVsdE1vZGVsKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgb25jZSBmb3IgZWFjaCBidXR0
b24gdGhhdCBjaGFuZ2VkIHN0YXRlIHNpbmNlIHRoZSBsYXN0IGZyYW1lCisgICAgICogQHBhcmFt
IGJ1dHRvbklkeCBXaGljaCBidXR0b24gaW5kZXggY2hhbmdlZAorICAgICAqIEBwYXJhbSBzdGF0
ZSBOZXcgc3RhdGUgb2YgdGhlIGJ1dHRvbgorICAgICAqIEBwYXJhbSBjaGFuZ2VzIFdoaWNoIHBy
b3BlcnRpZXMgb24gdGhlIHN0YXRlIGNoYW5nZWQgc2luY2UgbGFzdCBmcmFtZQorICAgICAqLwor
ICAgIEdlbmVyaWNDb250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlQnV0dG9uQ2hhbmdlID0gZnVu
Y3Rpb24gKGJ1dHRvbklkeCwgc3RhdGUsIGNoYW5nZXMpIHsKKyAgICAgICAgY29uc29sZS5sb2co
IkJ1dHRvbiBpZDogIiArIGJ1dHRvbklkeCArICJzdGF0ZTogIik7CisgICAgICAgIGNvbnNvbGUu
ZGlyKHN0YXRlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJhc2UgVXJsIGZvciB0aGUgY29u
dHJvbGxlciBtb2RlbC4KKyAgICAgKi8KKyAgICBHZW5lcmljQ29udHJvbGxlci5NT0RFTF9CQVNF
X1VSTCA9ICdodHRwczovL2NvbnRyb2xsZXJzLmJhYnlsb25qcy5jb20vZ2VuZXJpYy8nOworICAg
IC8qKgorICAgICAqIEZpbGUgbmFtZSBmb3IgdGhlIGNvbnRyb2xsZXIgbW9kZWwuCisgICAgICov
CisgICAgR2VuZXJpY0NvbnRyb2xsZXIuTU9ERUxfRklMRU5BTUUgPSAnZ2VuZXJpYy5iYWJ5bG9u
JzsKKyAgICByZXR1cm4gR2VuZXJpY0NvbnRyb2xsZXI7Cit9KF93ZWJWUkNvbnRyb2xsZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siV2ViVlJDb250cm9sbGVyIl0pKTsKKworX3Bvc2VF
bmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb3NlRW5hYmxl
ZENvbnRyb2xsZXJIZWxwZXIiXS5fRGVmYXVsdENvbnRyb2xsZXJGYWN0b3J5ID0gZnVuY3Rpb24g
KGdhbWVwYWRJbmZvKSB7IHJldHVybiBuZXcgR2VuZXJpY0NvbnRyb2xsZXIoZ2FtZXBhZEluZm8p
OyB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy9pbmRl
eC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL0dhbWVwYWRzL0NvbnRyb2xsZXJzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBEYXlk
cmVhbUNvbnRyb2xsZXIsIEdlYXJWUkNvbnRyb2xsZXIsIEdlbmVyaWNDb250cm9sbGVyLCBPY3Vs
dXNUb3VjaENvbnRyb2xsZXIsIFBvc2VFbmFibGVkQ29udHJvbGxlclR5cGUsIFBvc2VFbmFibGVk
Q29udHJvbGxlckhlbHBlciwgUG9zZUVuYWJsZWRDb250cm9sbGVyLCBWaXZlQ29udHJvbGxlciwg
V2ViVlJDb250cm9sbGVyLCBXaW5kb3dzTW90aW9uQ29udHJvbGxlciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RheWRyZWFtQ29udHJvbGxlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kYXlkcmVh
bUNvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvZGF5ZHJlYW1Db250cm9sbGVy
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRheWRyZWFtQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2RheWRyZWFtQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJEYXlkcmVhbUNvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
Z2VhclZSQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9nZWFyVlJDb250cm9sbGVyICovICIuL0dhbWVwYWRzL0NvbnRyb2xs
ZXJzL2dlYXJWUkNvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2VhclZSQ29udHJv
bGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2dlYXJWUkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siR2VhclZSQ29udHJvbGxlciJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9nZW5lcmljQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9nZW5lcmljQ29udHJvbGxlciAqLyAiLi9H
YW1lcGFkcy9Db250cm9sbGVycy9nZW5lcmljQ29udHJvbGxlci50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJHZW5lcmljQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2dlbmVyaWNDb250
cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdlbmVyaWNDb250cm9sbGVyIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX29jdWx1c1RvdWNoQ29udHJvbGxlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9v
Y3VsdXNUb3VjaENvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvb2N1bHVzVG91
Y2hDb250cm9sbGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdWx1c1RvdWNoQ29udHJvbGxl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX29jdWx1c1RvdWNoQ29udHJvbGxlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJPY3VsdXNUb3VjaENvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc2VFbmFibGVkQ29u
dHJvbGxlciAqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy9wb3NlRW5hYmxlZENvbnRyb2xsZXIu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX3Bvc2VFbmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXJUeXBlIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X3Bvc2VFbmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQb3Nl
RW5hYmxlZENvbnRyb2xsZXJIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zZUVu
YWJsZWRDb250cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9zZUVuYWJsZWRDb250cm9s
bGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvc2VFbmFibGVkQ29udHJvbGxlciJd
OyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92aXZlQ29udHJvbGxlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi92aXZlQ29u
dHJvbGxlciAqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy92aXZlQ29udHJvbGxlci50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJWaXZlQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Zp
dmVDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZpdmVDb250cm9sbGVy
Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlYlZSQ29udHJvbGxlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi93ZWJW
UkNvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29udHJvbGxlcnMvd2ViVlJDb250cm9sbGVyLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlZSQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX3dlYlZSQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJXZWJWUkNv
bnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd2luZG93c01vdGlv
bkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vd2luZG93c01vdGlvbkNvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29udHJv
bGxlcnMvd2luZG93c01vdGlvbkNvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2lu
ZG93c01vdGlvbkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF93aW5kb3dzTW90aW9u
Q29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJXaW5kb3dzTW90aW9uQ29u
dHJvbGxlciJdOyB9KTsKKworCisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vR2FtZXBhZHMvQ29udHJvbGxlcnMvb2N1bHVzVG91Y2hDb250cm9sbGVyLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL0dhbWVwYWRzL0NvbnRyb2xsZXJzL29jdWx1c1RvdWNoQ29udHJvbGxlci50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE9jdWx1c1RvdWNoQ29udHJvbGxlciAqLwor
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPY3VsdXNUb3VjaENvbnRyb2xsZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIE9jdWx1c1RvdWNoQ29udHJvbGxlcjsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNs
aWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9Mb2FkaW5nL3NjZW5lTG9h
ZGVyICovICIuL0xvYWRpbmcvc2NlbmVMb2FkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfd2ViVlJDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3dlYlZSQ29udHJvbGxlciAqLyAiLi9HYW1lcGFkcy9Db250
cm9sbGVycy93ZWJWUkNvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc2VFbmFibGVkQ29udHJvbGxlciAqLyAiLi9HYW1lcGFk
cy9Db250cm9sbGVycy9wb3NlRW5hYmxlZENvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2lu
ZXMvZW5naW5lLnRzIik7CisKKworCisKKworCisvKioKKyAqIE9jdWx1cyBUb3VjaCBDb250cm9s
bGVyCisgKi8KK3ZhciBPY3VsdXNUb3VjaENvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oT2N1bHVzVG91Y2hDb250cm9sbGVyLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBuZXcgT2N1bHVzVG91Y2hDb250cm9sbGVyIGZyb20gYSBnYW1lcGFkCisg
ICAgICogQHBhcmFtIHZyR2FtZXBhZCB0aGUgZ2FtZXBhZCB0aGF0IHRoZSBjb250cm9sbGVyIHNo
b3VsZCBiZSBjcmVhdGVkIGZyb20KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBPY3VsdXNUb3VjaENv
bnRyb2xsZXIodnJHYW1lcGFkKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRo
aXMsIHZyR2FtZXBhZCkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZpcmVkIHdo
ZW4gdGhlIHNlY29uZGFyeSB0cmlnZ2VyIG9uIHRoaXMgY29udHJvbGxlciBpcyBtb2RpZmllZAor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25TZWNvbmRhcnlUcmlnZ2VyU3RhdGVDaGFuZ2Vk
T2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogRmlyZWQgd2hl
biB0aGUgdGh1bWIgcmVzdCBvbiB0aGlzIGNvbnRyb2xsZXIgaXMgbW9kaWZpZWQKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLm9uVGh1bWJSZXN0Q2hhbmdlZE9ic2VydmFibGUgPSBuZXcgX01p
c2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0o
KTsKKyAgICAgICAgX3RoaXMuY29udHJvbGxlclR5cGUgPSBfcG9zZUVuYWJsZWRDb250cm9sbGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvc2VFbmFibGVkQ29udHJvbGxlclR5cGUi
XS5PQ1VMVVM7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICog
SW1wbGVtZW50cyBhYnN0cmFjdCBtZXRob2Qgb24gV2ViVlJDb250cm9sbGVyIGNsYXNzLCBsb2Fk
aW5nIGNvbnRyb2xsZXIgbWVzaGVzIGFuZCBjYWxsaW5nIHRoaXMuYXR0YWNoVG9NZXNoIGlmIHN1
Y2Nlc3NmdWwuCisgICAgICogQHBhcmFtIHNjZW5lIHNjZW5lIGluIHdoaWNoIHRvIGFkZCBtZXNo
ZXMKKyAgICAgKiBAcGFyYW0gbWVzaExvYWRlZCBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0
aGF0IHdpbGwgYmUgY2FsbGVkIGlmIHRoZSBtZXNoIGxvYWRzIHN1Y2Nlc3NmdWxseS4KKyAgICAg
Ki8KKyAgICBPY3VsdXNUb3VjaENvbnRyb2xsZXIucHJvdG90eXBlLmluaXRDb250cm9sbGVyTWVz
aCA9IGZ1bmN0aW9uIChzY2VuZSwgbWVzaExvYWRlZCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0
aGlzOworICAgICAgICB2YXIgbWVzaE5hbWU7CisgICAgICAgIC8vIEhhbmQKKyAgICAgICAgaWYg
KHRoaXMuaGFuZCA9PT0gJ2xlZnQnKSB7CisgICAgICAgICAgICBtZXNoTmFtZSA9IE9jdWx1c1Rv
dWNoQ29udHJvbGxlci5NT0RFTF9MRUZUX0ZJTEVOQU1FOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeyAvLyBSaWdodCBpcyB0aGUgZGVmYXVsdCBpZiBubyBoYW5kIGlzIHNwZWNpZmllZAorICAg
ICAgICAgICAgbWVzaE5hbWUgPSBPY3VsdXNUb3VjaENvbnRyb2xsZXIuTU9ERUxfUklHSFRfRklM
RU5BTUU7CisgICAgICAgIH0KKyAgICAgICAgX0xvYWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siU2NlbmVMb2FkZXIiXS5JbXBvcnRNZXNoKCIiLCBPY3VsdXNU
b3VjaENvbnRyb2xsZXIuX0lzUXVlc3QgPyBPY3VsdXNUb3VjaENvbnRyb2xsZXIuUVVFU1RfTU9E
RUxfQkFTRV9VUkwgOiBPY3VsdXNUb3VjaENvbnRyb2xsZXIuTU9ERUxfQkFTRV9VUkwsIG1lc2hO
YW1lLCBzY2VuZSwgZnVuY3Rpb24gKG5ld01lc2hlcykgeworICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgIFBhcmVudCBNZXNoIG5hbWU6IG9jdWx1c190b3VjaF9sZWZ0CisgICAgICAgICAgICAt
IGJvZHkKKyAgICAgICAgICAgIC0gdHJpZ2dlcgorICAgICAgICAgICAgLSB0aHVtYnN0aWNrCisg
ICAgICAgICAgICAtIGdyaXAKKyAgICAgICAgICAgIC0gYnV0dG9uX3kKKyAgICAgICAgICAgIC0g
YnV0dG9uX3gKKyAgICAgICAgICAgIC0gYnV0dG9uX2VudGVyCisgICAgICAgICAgICAqLworICAg
ICAgICAgICAgX3RoaXMuX2RlZmF1bHRNb2RlbCA9IE9jdWx1c1RvdWNoQ29udHJvbGxlci5fSXNR
dWVzdCA/IG5ld01lc2hlc1swXSA6IG5ld01lc2hlc1sxXTsKKyAgICAgICAgICAgIF90aGlzLmF0
dGFjaFRvTWVzaChfdGhpcy5fZGVmYXVsdE1vZGVsKTsKKyAgICAgICAgICAgIGlmIChtZXNoTG9h
ZGVkKSB7CisgICAgICAgICAgICAgICAgbWVzaExvYWRlZChfdGhpcy5fZGVmYXVsdE1vZGVsKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoT2N1bHVzVG91Y2hDb250cm9sbGVyLnByb3RvdHlwZSwgIm9uQUJ1dHRvblN0YXRlQ2hh
bmdlZE9ic2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3aGVuIHRo
ZSBBIGJ1dHRvbiBvbiB0aGlzIGNvbnRyb2xsZXIgaXMgbW9kaWZpZWQKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRoaXMuaGFuZCA9PT0g
J3JpZ2h0JykgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9uTWFpbkJ1dHRvblN0YXRl
Q2hhbmdlZE9ic2VydmFibGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIEEgYnV0dG9uIG9uIGxlZnQgaGFuZCcp
OworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoT2N1bHVzVG91Y2hDb250cm9sbGVyLnByb3RvdHlwZSwgIm9uQkJ1dHRvblN0YXRlQ2hh
bmdlZE9ic2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3aGVuIHRo
ZSBCIGJ1dHRvbiBvbiB0aGlzIGNvbnRyb2xsZXIgaXMgbW9kaWZpZWQKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRoaXMuaGFuZCA9PT0g
J3JpZ2h0JykgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9uU2Vjb25kYXJ5QnV0dG9u
U3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gQiBidXR0b24gb24gbGVmdCBo
YW5kJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShPY3VsdXNUb3VjaENvbnRyb2xsZXIucHJvdG90eXBlLCAib25YQnV0dG9uU3Rh
dGVDaGFuZ2VkT2JzZXJ2YWJsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZpcmVkIHdo
ZW4gdGhlIFggYnV0dG9uIG9uIHRoaXMgY29udHJvbGxlciBpcyBtb2RpZmllZAorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5oYW5k
ID09PSAnbGVmdCcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vbk1haW5CdXR0b25T
dGF0ZUNoYW5nZWRPYnNlcnZhYmxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBYIGJ1dHRvbiBvbiByaWdodCBo
YW5kJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShPY3VsdXNUb3VjaENvbnRyb2xsZXIucHJvdG90eXBlLCAib25ZQnV0dG9uU3Rh
dGVDaGFuZ2VkT2JzZXJ2YWJsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZpcmVkIHdo
ZW4gdGhlIFkgYnV0dG9uIG9uIHRoaXMgY29udHJvbGxlciBpcyBtb2RpZmllZAorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5oYW5k
ID09PSAnbGVmdCcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vblNlY29uZGFyeUJ1
dHRvblN0YXRlQ2hhbmdlZE9ic2VydmFibGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFkgYnV0dG9uIG9uIHJp
Z2h0IGhhbmQnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisg
ICAgICAqIENhbGxlZCBvbmNlIGZvciBlYWNoIGJ1dHRvbiB0aGF0IGNoYW5nZWQgc3RhdGUgc2lu
Y2UgdGhlIGxhc3QgZnJhbWUKKyAgICAgICogMCkgdGh1bWIgc3RpY2sgKHRvdWNoLCBwcmVzcywg
dmFsdWUgPSBwcmVzc2VkICgwLDEpKS4gdmFsdWUgaXMgaW4gdGhpcy5sZWZ0U3RpY2sKKyAgICAg
ICogMSkgaW5kZXggdHJpZ2dlciAodG91Y2ggKD8pLCBwcmVzcyAob25seSB3aGVuIHZhbHVlID4g
MC4xKSwgdmFsdWUgMCB0byAxKQorICAgICAgKiAyKSBzZWNvbmRhcnkgdHJpZ2dlciAoc2FtZSkK
KyAgICAgICogMykgQSAocmlnaHQpIFggKGxlZnQpLCB0b3VjaCwgcHJlc3NlZCA9IHZhbHVlCisg
ICAgICAqIDQpIEIgLyBZCisgICAgICAqIDUpIHRodW1iIHJlc3QKKyAgICAgICogQHBhcmFtIGJ1
dHRvbklkeCBXaGljaCBidXR0b24gaW5kZXggY2hhbmdlZAorICAgICAgKiBAcGFyYW0gc3RhdGUg
TmV3IHN0YXRlIG9mIHRoZSBidXR0b24KKyAgICAgICogQHBhcmFtIGNoYW5nZXMgV2hpY2ggcHJv
cGVydGllcyBvbiB0aGUgc3RhdGUgY2hhbmdlZCBzaW5jZSBsYXN0IGZyYW1lCisgICAgICAqLwor
ICAgIE9jdWx1c1RvdWNoQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZUJ1dHRvbkNoYW5nZSA9
IGZ1bmN0aW9uIChidXR0b25JZHgsIHN0YXRlLCBjaGFuZ2VzKSB7CisgICAgICAgIHZhciBub3Rp
ZnlPYmplY3QgPSBzdGF0ZTsgLy97IHN0YXRlOiBzdGF0ZSwgY2hhbmdlczogY2hhbmdlcyB9Owor
ICAgICAgICB2YXIgdHJpZ2dlckRpcmVjdGlvbiA9IHRoaXMuaGFuZCA9PT0gJ3JpZ2h0JyA/IC0x
IDogMTsKKyAgICAgICAgc3dpdGNoIChidXR0b25JZHgpIHsKKyAgICAgICAgICAgIGNhc2UgMDoK
KyAgICAgICAgICAgICAgICB0aGlzLm9uUGFkU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlP
YnNlcnZlcnMobm90aWZ5T2JqZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBjYXNlIDE6IC8vIGluZGV4IHRyaWdnZXIKKyAgICAgICAgICAgICAgICBpZiAoIU9jdWx1
c1RvdWNoQ29udHJvbGxlci5fSXNRdWVzdCAmJiB0aGlzLl9kZWZhdWx0TW9kZWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgKHRoaXMuX2RlZmF1bHRNb2RlbC5nZXRDaGlsZHJlbigpWzNdKS5yb3Rh
dGlvbi54ID0gLW5vdGlmeU9iamVjdC52YWx1ZSAqIDAuMjA7CisgICAgICAgICAgICAgICAgICAg
ICh0aGlzLl9kZWZhdWx0TW9kZWwuZ2V0Q2hpbGRyZW4oKVszXSkucG9zaXRpb24ueSA9IC1ub3Rp
ZnlPYmplY3QudmFsdWUgKiAwLjAwNTsKKyAgICAgICAgICAgICAgICAgICAgKHRoaXMuX2RlZmF1
bHRNb2RlbC5nZXRDaGlsZHJlbigpWzNdKS5wb3NpdGlvbi56ID0gLW5vdGlmeU9iamVjdC52YWx1
ZSAqIDAuMDA1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLm9uVHJp
Z2dlclN0YXRlQ2hhbmdlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKG5vdGlmeU9iamVjdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2FzZSAyOiAvLyBzZWNvbmRh
cnkgdHJpZ2dlcgorICAgICAgICAgICAgICAgIGlmICghT2N1bHVzVG91Y2hDb250cm9sbGVyLl9J
c1F1ZXN0ICYmIHRoaXMuX2RlZmF1bHRNb2RlbCkgeworICAgICAgICAgICAgICAgICAgICAodGhp
cy5fZGVmYXVsdE1vZGVsLmdldENoaWxkcmVuKClbNF0pLnBvc2l0aW9uLnggPSB0cmlnZ2VyRGly
ZWN0aW9uICogbm90aWZ5T2JqZWN0LnZhbHVlICogMC4wMDM1OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB0aGlzLm9uU2Vjb25kYXJ5VHJpZ2dlclN0YXRlQ2hhbmdlZE9ic2Vy
dmFibGUubm90aWZ5T2JzZXJ2ZXJzKG5vdGlmeU9iamVjdCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIGlmICghT2N1bHVzVG91
Y2hDb250cm9sbGVyLl9Jc1F1ZXN0ICYmIHRoaXMuX2RlZmF1bHRNb2RlbCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobm90aWZ5T2JqZWN0LnByZXNzZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICh0aGlzLl9kZWZhdWx0TW9kZWwuZ2V0Q2hpbGRyZW4oKVsxXSkucG9zaXRpb24ueSA9
IC0wLjAwMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLl9kZWZhdWx0TW9kZWwuZ2V0Q2hpbGRy
ZW4oKVsxXSkucG9zaXRpb24ueSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5vbk1haW5CdXR0b25TdGF0ZUNoYW5nZWRP
YnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhub3RpZnlPYmplY3QpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBpZiAoIU9jdWx1
c1RvdWNoQ29udHJvbGxlci5fSXNRdWVzdCAmJiB0aGlzLl9kZWZhdWx0TW9kZWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vdGlmeU9iamVjdC5wcmVzc2VkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAodGhpcy5fZGVmYXVsdE1vZGVsLmdldENoaWxkcmVuKClbMl0pLnBvc2l0aW9u
LnkgPSAtMC4wMDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5fZGVmYXVsdE1vZGVsLmdldENo
aWxkcmVuKClbMl0pLnBvc2l0aW9uLnkgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMub25TZWNvbmRhcnlCdXR0b25TdGF0
ZUNoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhub3RpZnlPYmplY3QpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICB0
aGlzLm9uVGh1bWJSZXN0Q2hhbmdlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKG5vdGlmeU9i
amVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBCYXNlIFVybCBmb3IgdGhlIGNvbnRyb2xsZXIgbW9kZWwuCisgICAgICovCisg
ICAgT2N1bHVzVG91Y2hDb250cm9sbGVyLk1PREVMX0JBU0VfVVJMID0gJ2h0dHBzOi8vY29udHJv
bGxlcnMuYmFieWxvbmpzLmNvbS9vY3VsdXMvJzsKKyAgICAvKioKKyAgICAgKiBGaWxlIG5hbWUg
Zm9yIHRoZSBsZWZ0IGNvbnRyb2xsZXIgbW9kZWwuCisgICAgICovCisgICAgT2N1bHVzVG91Y2hD
b250cm9sbGVyLk1PREVMX0xFRlRfRklMRU5BTUUgPSAnbGVmdC5iYWJ5bG9uJzsKKyAgICAvKioK
KyAgICAgKiBGaWxlIG5hbWUgZm9yIHRoZSByaWdodCBjb250cm9sbGVyIG1vZGVsLgorICAgICAq
LworICAgIE9jdWx1c1RvdWNoQ29udHJvbGxlci5NT0RFTF9SSUdIVF9GSUxFTkFNRSA9ICdyaWdo
dC5iYWJ5bG9uJzsKKyAgICAvKioKKyAgICAgKiBCYXNlIFVybCBmb3IgdGhlIFF1ZXN0IGNvbnRy
b2xsZXIgbW9kZWwuCisgICAgICovCisgICAgT2N1bHVzVG91Y2hDb250cm9sbGVyLlFVRVNUX01P
REVMX0JBU0VfVVJMID0gJ2h0dHBzOi8vY29udHJvbGxlcnMuYmFieWxvbmpzLmNvbS9vY3VsdXNR
dWVzdC8nOworICAgIC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAgKiBJZiB0aGUgY29udHJvbGxl
cnMgYXJlIHJ1bm5pbmcgb24gYSBkZXZpY2UgdGhhdCBuZWVkcyB0aGUgdXBkYXRlZCBRdWVzdCBj
b250cm9sbGVyIG1vZGVscworICAgICAqLworICAgIE9jdWx1c1RvdWNoQ29udHJvbGxlci5fSXNR
dWVzdCA9IGZhbHNlOworICAgIHJldHVybiBPY3VsdXNUb3VjaENvbnRyb2xsZXI7Cit9KF93ZWJW
UkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siV2ViVlJDb250cm9sbGVy
Il0pKTsKKworX3Bvc2VFbmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXJIZWxwZXIiXS5fQ29udHJvbGxlckZhY3Rvcmllcy5w
dXNoKHsKKyAgICBjYW5DcmVhdGU6IGZ1bmN0aW9uIChnYW1lcGFkSW5mbykgeworICAgICAgICAv
LyBJZiB0aGUgaGVhZHNldCByZXBvcnRzIGJlaW5nIGFuIE9jdWx1cyBRdWVzdCwgdXNlIHRoZSBR
dWVzdCBjb250cm9sbGVyIG1vZGVscworICAgICAgICBpZiAoX0VuZ2luZXNfZW5naW5lX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkVuZ2luZSJdLkxhc3RDcmVhdGVkRW5naW5lICYmIF9F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFbmdpbmUiXS5MYXN0
Q3JlYXRlZEVuZ2luZS5fdnJEaXNwbGF5ICYmIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJFbmdpbmUiXS5MYXN0Q3JlYXRlZEVuZ2luZS5fdnJEaXNwbGF5LmRp
c3BsYXlOYW1lID09PSAiT2N1bHVzIFF1ZXN0IikgeworICAgICAgICAgICAgT2N1bHVzVG91Y2hD
b250cm9sbGVyLl9Jc1F1ZXN0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2Ft
ZXBhZEluZm8uaWQuaW5kZXhPZignT2N1bHVzIFRvdWNoJykgIT09IC0xOworICAgIH0sCisgICAg
Y3JlYXRlOiBmdW5jdGlvbiAoZ2FtZXBhZEluZm8pIHsKKyAgICAgICAgcmV0dXJuIG5ldyBPY3Vs
dXNUb3VjaENvbnRyb2xsZXIoZ2FtZXBhZEluZm8pOworICAgIH0KK30pOworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy9wb3NlRW5hYmxlZENvbnRyb2xsZXIu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vR2FtZXBhZHMvQ29udHJvbGxlcnMvcG9zZUVuYWJsZWRDb250
cm9sbGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9zZUVuYWJsZWRDb250
cm9sbGVyVHlwZSwgUG9zZUVuYWJsZWRDb250cm9sbGVySGVscGVyLCBQb3NlRW5hYmxlZENvbnRy
b2xsZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zZUVuYWJsZWRD
b250cm9sbGVyVHlwZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUG9zZUVuYWJsZWRDb250cm9sbGVy
VHlwZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NlRW5hYmxlZENvbnRyb2xsZXJIZWxwZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlcjsgfSk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQb3NlRW5hYmxlZENvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIFBvc2VFbmFibGVkQ29udHJvbGxlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9vYnNlcnZhYmxl
ICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52
ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ3VsbGluZ19yYXlfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0N1
bGxpbmcvcmF5ICovICIuL0N1bGxpbmcvcmF5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvZW5naW5lU3RvcmUgKi8gIi4vRW5n
aW5lcy9lbmdpbmVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9HYW1lcGFk
c19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9HYW1lcGFkcy9nYW1lcGFkICovICIuL0dhbWVwYWRzL2dhbWVwYWQudHMi
KTsKKworCisKKworCisKKy8qKgorKiBEZWZpbmVzIHRoZSB0eXBlcyBvZiBwb3NlIGVuYWJsZWQg
Y29udHJvbGxlcnMgdGhhdCBhcmUgc3VwcG9ydGVkCisqLwordmFyIFBvc2VFbmFibGVkQ29udHJv
bGxlclR5cGU7CisoZnVuY3Rpb24gKFBvc2VFbmFibGVkQ29udHJvbGxlclR5cGUpIHsKKyAgICAv
KioKKyAgICAgKiBIVEMgVml2ZQorICAgICAqLworICAgIFBvc2VFbmFibGVkQ29udHJvbGxlclR5
cGVbUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZVsiVklWRSJdID0gMF0gPSAiVklWRSI7CisgICAg
LyoqCisgICAgICogT2N1bHVzIFJpZnQKKyAgICAgKi8KKyAgICBQb3NlRW5hYmxlZENvbnRyb2xs
ZXJUeXBlW1Bvc2VFbmFibGVkQ29udHJvbGxlclR5cGVbIk9DVUxVUyJdID0gMV0gPSAiT0NVTFVT
IjsKKyAgICAvKioKKyAgICAgKiBXaW5kb3dzIG1peGVkIHJlYWxpdHkKKyAgICAgKi8KKyAgICBQ
b3NlRW5hYmxlZENvbnRyb2xsZXJUeXBlW1Bvc2VFbmFibGVkQ29udHJvbGxlclR5cGVbIldJTkRP
V1MiXSA9IDJdID0gIldJTkRPV1MiOworICAgIC8qKgorICAgICAqIFNhbXN1bmcgZ2VhciBWUgor
ICAgICAqLworICAgIFBvc2VFbmFibGVkQ29udHJvbGxlclR5cGVbUG9zZUVuYWJsZWRDb250cm9s
bGVyVHlwZVsiR0VBUl9WUiJdID0gM10gPSAiR0VBUl9WUiI7CisgICAgLyoqCisgICAgICogR29v
Z2xlIERheWRyZWFtCisgICAgICovCisgICAgUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZVtQb3Nl
RW5hYmxlZENvbnRyb2xsZXJUeXBlWyJEQVlEUkVBTSJdID0gNF0gPSAiREFZRFJFQU0iOworICAg
IC8qKgorICAgICAqIEdlbmVyaWMKKyAgICAgKi8KKyAgICBQb3NlRW5hYmxlZENvbnRyb2xsZXJU
eXBlW1Bvc2VFbmFibGVkQ29udHJvbGxlclR5cGVbIkdFTkVSSUMiXSA9IDVdID0gIkdFTkVSSUMi
OworfSkoUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZSB8fCAoUG9zZUVuYWJsZWRDb250cm9sbGVy
VHlwZSA9IHt9KSk7CisvKioKKyAqIERlZmluZXMgdGhlIFBvc2VFbmFibGVkQ29udHJvbGxlckhl
bHBlciBvYmplY3QgdGhhdCBpcyB1c2VkIGluaXRpYWxpemUgYSBnYW1lcGFkIGFzIHRoZSBjb250
cm9sbGVyIHR5cGUgaXQgaXMgc3BlY2lmaWVkIGFzIChlZy4gd2luZG93cyBtaXhlZCByZWFsaXR5
IGNvbnRyb2xsZXIpCisgKi8KK3ZhciBQb3NlRW5hYmxlZENvbnRyb2xsZXJIZWxwZXIgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gUG9zZUVuYWJsZWRDb250cm9s
bGVySGVscGVyKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyBhIGdhbWVw
YWQgYXMgdGhlIGNvbnRyb2xsZXIgdHlwZSBpdCBpcyBzcGVjaWZpZWQgYXMgKGVnLiB3aW5kb3dz
IG1peGVkIHJlYWxpdHkgY29udHJvbGxlcikKKyAgICAgKiBAcGFyYW0gdnJHYW1lcGFkIHRoZSBn
YW1lcGFkIHRvIGluaXRpYWxpemVkCisgICAgICogQHJldHVybnMgYSB2ciBjb250cm9sbGVyIG9m
IHRoZSB0eXBlIHRoZSBnYW1lcGFkIGlkZW50aWZpZWQgYXMKKyAgICAgKi8KKyAgICBQb3NlRW5h
YmxlZENvbnRyb2xsZXJIZWxwZXIuSW5pdGlhdGVDb250cm9sbGVyID0gZnVuY3Rpb24gKHZyR2Ft
ZXBhZCkgeworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fQ29udHJvbGxlckZh
Y3RvcmllczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBmYWN0b3J5
ID0gX2FbX2ldOworICAgICAgICAgICAgaWYgKGZhY3RvcnkuY2FuQ3JlYXRlKHZyR2FtZXBhZCkp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeS5jcmVhdGUodnJHYW1lcGFkKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fRGVmYXVsdENvbnRyb2xs
ZXJGYWN0b3J5KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fRGVmYXVsdENvbnRyb2xsZXJG
YWN0b3J5KHZyR2FtZXBhZCk7CisgICAgICAgIH0KKyAgICAgICAgdGhyb3cgIlRoZSB0eXBlIG9m
IGdhbWVwYWQgeW91IGFyZSB0cnlpbmcgdG8gbG9hZCBuZWVkcyB0byBiZSBpbXBvcnRlZCBmaXJz
dCBvciBpcyBub3Qgc3VwcG9ydGVkLiI7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAg
IFBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlci5fQ29udHJvbGxlckZhY3RvcmllcyA9IFtdOwor
ICAgIC8qKiBAaGlkZGVuICovCisgICAgUG9zZUVuYWJsZWRDb250cm9sbGVySGVscGVyLl9EZWZh
dWx0Q29udHJvbGxlckZhY3RvcnkgPSBudWxsOworICAgIHJldHVybiBQb3NlRW5hYmxlZENvbnRy
b2xsZXJIZWxwZXI7Cit9KCkpOworCisvKioKKyAqIERlZmluZXMgdGhlIFBvc2VFbmFibGVkQ29u
dHJvbGxlciBvYmplY3QgdGhhdCBjb250YWlucyBzdGF0ZSBvZiBhIHZyIGNhcGFibGUgY29udHJv
bGxlcgorICovCit2YXIgUG9zZUVuYWJsZWRDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKFBvc2VFbmFibGVkQ29udHJvbGxlciwgX3N1cGVyKTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgbmV3IFBvc2VFbmFibGVkQ29udHJvbGxlciBmcm9tIGEgZ2FtZXBhZAor
ICAgICAqIEBwYXJhbSBicm93c2VyR2FtZXBhZCB0aGUgZ2FtZXBhZCB0aGF0IHRoZSBQb3NlRW5h
YmxlZENvbnRyb2xsZXIgc2hvdWxkIGJlIGNyZWF0ZWQgZnJvbQorICAgICAqLworICAgIGZ1bmN0
aW9uIFBvc2VFbmFibGVkQ29udHJvbGxlcihicm93c2VyR2FtZXBhZCkgeworICAgICAgICB2YXIg
X3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBicm93c2VyR2FtZXBhZC5pZCwgYnJvd3NlckdhbWVw
YWQuaW5kZXgsIGJyb3dzZXJHYW1lcGFkKSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAg
ICogSWYgdGhlIGNvbnRyb2xsZXIgaXMgdXNlZCBpbiBhIHdlYlhSIHNlc3Npb24KKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLmlzWFIgPSBmYWxzZTsKKyAgICAgICAgLy8gUmVwcmVzZW50cyBk
ZXZpY2UgcG9zaXRpb24gYW5kIHJvdGF0aW9uIGluIHJvb20gc3BhY2UuIFNob3VsZCBvbmx5IGJl
IHVzZWQgdG8gaGVscCBjYWxjdWxhdGUgYmFieWxvbiBzcGFjZSB2YWx1ZXMKKyAgICAgICAgX3Ro
aXMuX2RldmljZVJvb21Qb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBfdGhpcy5fZGV2aWNl
Um9vbVJvdGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaGUgZGV2aWNlIHBvc2l0aW9uIGluIGJhYnlsb24gc3BhY2UKKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLmRldmljZVBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBUaGUgZGV2aWNlIHJvdGF0aW9uIGluIGJhYnlsb24gc3BhY2UKKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLmRldmljZVJvdGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJdKCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBkZXZpY2UgaW4g
YmFieWxvbiBzcGFjZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZGV2aWNlU2NhbGVGYWN0
b3IgPSAxOworICAgICAgICAvLyBVc2VkIHRvIGNvbnZlcnQgNmRvZiBjb250cm9sbGVycyB0byAz
ZG9mCisgICAgICAgIF90aGlzLl90cmFja1Bvc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMu
X21heFJvdGF0aW9uRGlzdEZyb21IZWFkc2V0ID0gTWF0aC5QSSAvIDU7CisgICAgICAgIF90aGlz
Ll9kcmFnZ2VkUm9vbVJvdGF0aW9uID0gMDsKKyAgICAgICAgX3RoaXMuX2xlZnRIYW5kU3lzdGVt
UXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJbnRlcm5h
bCwgbWF0cml4IHVzZWQgdG8gY29udmVydCByb29tIHNwYWNlIHRvIGJhYnlsb24gc3BhY2UKKyAg
ICAgICAgICogQGhpZGRlbgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2RldmljZVRvV29y
bGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWF0
cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE5vZGUgdG8gYmUgdXNl
ZCB3aGVuIGNhc3RpbmcgYSByYXkgZnJvbSB0aGUgY29udHJvbGxlcgorICAgICAgICAgKiBAaGlk
ZGVuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fcG9pbnRpbmdQb3NlTm9kZSA9IG51bGw7
CisgICAgICAgIF90aGlzLl93b3JraW5nTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fbWVzaEF0
dGFjaGVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhpcy50eXBlID0gX0dhbWVw
YWRzX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siR2FtZXBhZCJdLlBPU0Vf
RU5BQkxFRDsKKyAgICAgICAgX3RoaXMuY29udHJvbGxlclR5cGUgPSBQb3NlRW5hYmxlZENvbnRy
b2xsZXJUeXBlLkdFTkVSSUM7CisgICAgICAgIF90aGlzLnBvc2l0aW9uID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7Cisg
ICAgICAgIF90aGlzLnJvdGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIF90
aGlzLl9jYWxjdWxhdGVkUG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgX3RoaXMuX2NhbGN1
bGF0ZWRSb3RhdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRj
aFJvbGxUb1JlZihNYXRoLlBJLCAwLCAwLCBfdGhpcy5fbGVmdEhhbmRTeXN0ZW1RdWF0ZXJuaW9u
KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBAaGlkZGVu
CisgICAgICovCisgICAgUG9zZUVuYWJsZWRDb250cm9sbGVyLnByb3RvdHlwZS5fZGlzYWJsZVRy
YWNrUG9zaXRpb24gPSBmdW5jdGlvbiAoZml4ZWRQb3NpdGlvbikgeworICAgICAgICBpZiAodGhp
cy5fdHJhY2tQb3NpdGlvbikgeworICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlZFBvc2l0aW9u
LmNvcHlGcm9tKGZpeGVkUG9zaXRpb24pOworICAgICAgICAgICAgdGhpcy5fdHJhY2tQb3NpdGlv
biA9IGZhbHNlOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRo
ZSBzdGF0ZSBvZiB0aGUgcG9zZSBlbmJhbGVkIGNvbnRyb2xsZXIgYW5kIG1lc2ggYmFzZWQgb24g
dGhlIGN1cnJlbnQgcG9zaXRpb24gYW5kIHJvdGF0aW9uIG9mIHRoZSBjb250cm9sbGVyCisgICAg
ICovCisgICAgUG9zZUVuYWJsZWRDb250cm9sbGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGlmICh0aGlzLmlzWFIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVwZGF0ZS5jYWxsKHRoaXMpOworICAg
ICAgICB0aGlzLl91cGRhdGVQb3NlQW5kTWVzaCgpOworICAgIH07CisgICAgLyoqCisgICAgICog
VXBkYXRlcyBvbmx5IHRoZSBwb3NlIGRldmljZSBhbmQgbWVzaCB3aXRob3V0IGRvaW5nIGFueSBi
dXR0b24gZXZlbnQgY2hlY2tpbmcKKyAgICAgKi8KKyAgICBQb3NlRW5hYmxlZENvbnRyb2xsZXIu
cHJvdG90eXBlLl91cGRhdGVQb3NlQW5kTWVzaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMuaXNYUikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZh
ciBwb3NlID0gdGhpcy5icm93c2VyR2FtZXBhZC5wb3NlOworICAgICAgICB0aGlzLnVwZGF0ZUZy
b21EZXZpY2UocG9zZSk7CisgICAgICAgIGlmICghdGhpcy5fdHJhY2tQb3NpdGlvbiAmJiBfRW5n
aW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFbmdpbmVTdG9y
ZSJdLkxhc3RDcmVhdGVkU2NlbmUgJiYgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZFNjZW5lLmFjdGl2ZUNh
bWVyYSAmJiBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmUuYWN0aXZlQ2FtZXJhLmRldmljZVBvc2l0
aW9uKSB7CisgICAgICAgICAgICB2YXIgY2FtZXJhID0gX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZFNjZW5l
LmFjdGl2ZUNhbWVyYTsKKyAgICAgICAgICAgIGNhbWVyYS5fY29tcHV0ZURldmljZVBvc2l0aW9u
KCk7CisgICAgICAgICAgICB0aGlzLl9kZXZpY2VUb1dvcmxkLnNldFRyYW5zbGF0aW9uKGNhbWVy
YS5kZXZpY2VQb3NpdGlvbik7CisgICAgICAgICAgICBpZiAoY2FtZXJhLmRldmljZVJvdGF0aW9u
UXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIHZhciBjYW1lcmEgPSBjYW1lcmE7CisgICAg
ICAgICAgICAgICAgY2FtZXJhLl9kZXZpY2VSb29tUm90YXRpb25RdWF0ZXJuaW9uLnRvRXVsZXJB
bmdsZXNUb1JlZihfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF0pOworICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhl
IHJhZGlhbiBkaXN0YW5jZSBhd2F5IHRoYXQgdGhlIGhlYWRzZXQgaXMgZnJvbSB0aGUgY29udHJv
bGxlcnMgcm90YXRpb24KKyAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2VBd2F5ID0gTWF0aC5h
dGFuMihNYXRoLnNpbihfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF0ueSAtIHRoaXMuX2RyYWdnZWRSb29tUm90YXRp
b24pLCBNYXRoLmNvcyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF0ueSAtIHRoaXMuX2RyYWdnZWRSb29tUm90YXRp
b24pKTsKKyAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoZGlzdGFuY2VBd2F5KSA+IHRoaXMu
X21heFJvdGF0aW9uRGlzdEZyb21IZWFkc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE9u
bHkgcm90YXRlIGVub3VwaCB0byBiZSB3aXRoaW4gdGhlIF9tYXhSb3RhdGlvbkRpc3RGcm9tSGVh
ZHNldAorICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRpb25BbW91bnQgPSBkaXN0YW5jZUF3
YXkgLSAoZGlzdGFuY2VBd2F5IDwgMCA/IC10aGlzLl9tYXhSb3RhdGlvbkRpc3RGcm9tSGVhZHNl
dCA6IHRoaXMuX21heFJvdGF0aW9uRGlzdEZyb21IZWFkc2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fZHJhZ2dlZFJvb21Sb3RhdGlvbiArPSByb3RhdGlvbkFtb3VudDsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gUm90YXRlIGNvbnRyb2xsZXIgYXJvdW5kIGhlYWRzZXQKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHNpbiA9IE1hdGguc2luKC1yb3RhdGlvbkFtb3VudCk7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBjb3MgPSBNYXRoLmNvcygtcm90YXRpb25BbW91bnQpOworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVkUG9zaXRpb24ueCA9IHRoaXMuX2NhbGN1bGF0
ZWRQb3NpdGlvbi54ICogY29zIC0gdGhpcy5fY2FsY3VsYXRlZFBvc2l0aW9uLnogKiBzaW47Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZWRQb3NpdGlvbi56ID0gdGhpcy5fY2Fs
Y3VsYXRlZFBvc2l0aW9uLnggKiBzaW4gKyB0aGlzLl9jYWxjdWxhdGVkUG9zaXRpb24ueiAqIGNv
czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMi
XS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHRoaXMuX2NhbGN1bGF0ZWRQb3NpdGlvbiwgdGhp
cy5fZGV2aWNlVG9Xb3JsZCwgdGhpcy5kZXZpY2VQb3NpdGlvbik7CisgICAgICAgIHRoaXMuX2Rl
dmljZVRvV29ybGQuZ2V0Um90YXRpb25NYXRyaXhUb1JlZih0aGlzLl93b3JraW5nTWF0cml4KTsK
KyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlF1YXRlcm5pb24iXS5Gcm9tUm90YXRpb25NYXRyaXhUb1JlZih0aGlzLl93b3JraW5nTWF0cml4
LCB0aGlzLmRldmljZVJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIHRoaXMuZGV2aWNlUm90
YXRpb25RdWF0ZXJuaW9uLm11bHRpcGx5SW5QbGFjZSh0aGlzLl9jYWxjdWxhdGVkUm90YXRpb24p
OworICAgICAgICBpZiAodGhpcy5fbWVzaCkgeworICAgICAgICAgICAgdGhpcy5fbWVzaC5wb3Np
dGlvbi5jb3B5RnJvbSh0aGlzLmRldmljZVBvc2l0aW9uKTsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9tZXNoLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIHRoaXMuX21lc2gu
cm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHRoaXMuZGV2aWNlUm90YXRpb25RdWF0ZXJuaW9u
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogVXBk
YXRlcyB0aGUgc3RhdGUgb2YgdGhlIHBvc2UgZW5iYWxlZCBjb250cm9sbGVyIGJhc2VkIG9uIHRo
ZSByYXcgcG9zZSBkYXRhIGZyb20gdGhlIGRldmljZQorICAgICAqIEBwYXJhbSBwb3NlRGF0YSBy
YXcgcG9zZSBmcm9tdGhlIGRldmljZQorICAgICAqLworICAgIFBvc2VFbmFibGVkQ29udHJvbGxl
ci5wcm90b3R5cGUudXBkYXRlRnJvbURldmljZSA9IGZ1bmN0aW9uIChwb3NlRGF0YSkgeworICAg
ICAgICBpZiAodGhpcy5pc1hSKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHBvc2VEYXRhKSB7CisgICAgICAgICAgICB0aGlzLnJhd1Bvc2UgPSBwb3NlRGF0
YTsKKyAgICAgICAgICAgIGlmIChwb3NlRGF0YS5wb3NpdGlvbikgeworICAgICAgICAgICAgICAg
IHRoaXMuX2RldmljZVJvb21Qb3NpdGlvbi5jb3B5RnJvbUZsb2F0cyhwb3NlRGF0YS5wb3NpdGlv
blswXSwgcG9zZURhdGEucG9zaXRpb25bMV0sIC1wb3NlRGF0YS5wb3NpdGlvblsyXSk7CisgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuX21lc2ggJiYgdGhpcy5fbWVzaC5nZXRTY2VuZSgpLnVzZVJp
Z2h0SGFuZGVkU3lzdGVtKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RldmljZVJvb21Q
b3NpdGlvbi56ICo9IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fdHJhY2tQb3NpdGlvbikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VS
b29tUG9zaXRpb24uc2NhbGVUb1JlZih0aGlzLmRldmljZVNjYWxlRmFjdG9yLCB0aGlzLl9jYWxj
dWxhdGVkUG9zaXRpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlz
Ll9jYWxjdWxhdGVkUG9zaXRpb24uYWRkSW5QbGFjZSh0aGlzLnBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhciBwb3NlID0gdGhpcy5yYXdQb3NlOworICAgICAgICAgICAg
aWYgKHBvc2VEYXRhLm9yaWVudGF0aW9uICYmIHBvc2Uub3JpZW50YXRpb24gJiYgcG9zZS5vcmll
bnRhdGlvbi5sZW5ndGggPT09IDQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZXZpY2VSb29t
Um90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tRmxvYXRzKHBvc2Uub3JpZW50YXRpb25bMF0sIHBv
c2Uub3JpZW50YXRpb25bMV0sIC1wb3NlLm9yaWVudGF0aW9uWzJdLCAtcG9zZS5vcmllbnRhdGlv
blszXSk7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21lc2gpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX21lc2guZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlUm9vbVJvdGF0aW9uUXVhdGVybmlv
bi56ICo9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlUm9vbVJvdGF0
aW9uUXVhdGVybmlvbi53ICo9IC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNlUm9v
bVJvdGF0aW9uUXVhdGVybmlvbi5tdWx0aXBseVRvUmVmKHRoaXMuX2xlZnRIYW5kU3lzdGVtUXVh
dGVybmlvbiwgdGhpcy5fZGV2aWNlUm9vbVJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gaWYgdGhl
IGNhbWVyYSBpcyBzZXQsIHJvdGF0ZSB0byB0aGUgY2FtZXJhJ3Mgcm90YXRpb24KKyAgICAgICAg
ICAgICAgICB0aGlzLl9kZXZpY2VSb29tUm90YXRpb25RdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYo
dGhpcy5yb3RhdGlvblF1YXRlcm5pb24sIHRoaXMuX2NhbGN1bGF0ZWRSb3RhdGlvbik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEF0dGFjaGVzIGEg
bWVzaCB0byB0aGUgY29udHJvbGxlcgorICAgICAqIEBwYXJhbSBtZXNoIHRoZSBtZXNoIHRvIGJl
IGF0dGFjaGVkCisgICAgICovCisgICAgUG9zZUVuYWJsZWRDb250cm9sbGVyLnByb3RvdHlwZS5h
dHRhY2hUb01lc2ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICBpZiAodGhpcy5fbWVzaCkg
eworICAgICAgICAgICAgdGhpcy5fbWVzaC5wYXJlbnQgPSBudWxsOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX21lc2ggPSBtZXNoOworICAgICAgICBpZiAodGhpcy5fcG9zZUNvbnRyb2xsZWRD
YW1lcmEpIHsKKyAgICAgICAgICAgIHRoaXMuX21lc2gucGFyZW50ID0gdGhpcy5fcG9zZUNvbnRy
b2xsZWRDYW1lcmE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9tZXNoLnJvdGF0aW9u
UXVhdGVybmlvbikgeworICAgICAgICAgICAgdGhpcy5fbWVzaC5yb3RhdGlvblF1YXRlcm5pb24g
PSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlF1
YXRlcm5pb24iXSgpOworICAgICAgICB9CisgICAgICAgIC8vIFN5bmMgY29udHJvbGxlciBtZXNo
IGFuZCBwb2ludGluZyBwb3NlIG5vZGUncyBzdGF0ZSB3aXRoIGNvbnRyb2xsZXIsIHRoaXMgaXMg
ZG9uZSB0byBhdm9pZCBhIGZyYW1lIHdoZXJlIHBvc2l0aW9uIGlzIDAsMCwwIHdoZW4gYXR0YWNo
aW5nIG1lc2gKKyAgICAgICAgaWYgKCF0aGlzLmlzWFIpIHsKKyAgICAgICAgICAgIHRoaXMuX3Vw
ZGF0ZVBvc2VBbmRNZXNoKCk7CisgICAgICAgICAgICBpZiAodGhpcy5fcG9pbnRpbmdQb3NlTm9k
ZSkgeworICAgICAgICAgICAgICAgIHZhciBwYXJlbnRzID0gW107CisgICAgICAgICAgICAgICAg
dmFyIG9iaiA9IHRoaXMuX3BvaW50aW5nUG9zZU5vZGU7CisgICAgICAgICAgICAgICAgd2hpbGUg
KG9iai5wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKG9iai5wYXJl
bnQpOworICAgICAgICAgICAgICAgICAgICBvYmogPSBvYmoucGFyZW50OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBwYXJlbnRzLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9u
IChwKSB7IHAuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOyB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9tZXNoQXR0YWNoZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2Vy
dmVycyhtZXNoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEF0dGFjaGVzIHRoZSBjb250cm9s
bGVycyBtZXNoIHRvIGEgY2FtZXJhCisgICAgICogQHBhcmFtIGNhbWVyYSB0aGUgY2FtZXJhIHRo
ZSBtZXNoIHNob3VsZCBiZSBhdHRhY2hlZCB0bworICAgICAqLworICAgIFBvc2VFbmFibGVkQ29u
dHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG9Qb3NlQ29udHJvbGxlZENhbWVyYSA9IGZ1bmN0aW9u
IChjYW1lcmEpIHsKKyAgICAgICAgdGhpcy5fcG9zZUNvbnRyb2xsZWRDYW1lcmEgPSBjYW1lcmE7
CisgICAgICAgIGlmICh0aGlzLl9tZXNoKSB7CisgICAgICAgICAgICB0aGlzLl9tZXNoLnBhcmVu
dCA9IHRoaXMuX3Bvc2VDb250cm9sbGVkQ2FtZXJhOworICAgICAgICB9CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBEaXNwb3NlcyBvZiB0aGUgY29udHJvbGxlcgorICAgICAqLworICAgIFBvc2VF
bmFibGVkQ29udHJvbGxlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgaWYgKHRoaXMuX21lc2gpIHsKKyAgICAgICAgICAgIHRoaXMuX21lc2guZGlzcG9zZSgpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX21lc2ggPSBudWxsOworICAgICAgICBfc3VwZXIucHJv
dG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShQb3NlRW5hYmxlZENvbnRyb2xsZXIucHJvdG90eXBlLCAibWVzaCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFRoZSBtZXNoIHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhlIGNvbnRyb2xs
ZXIKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX21lc2g7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdl
dHMgdGhlIHJheSBvZiB0aGUgY29udHJvbGxlciBpbiB0aGUgZGlyZWN0aW9uIHRoZSBjb250cm9s
bGVyIGlzIHBvaW50aW5nCisgICAgICogQHBhcmFtIGxlbmd0aCB0aGUgbGVuZ3RoIHRoZSByZXN1
bHRpbmcgcmF5IHNob3VsZCBiZQorICAgICAqIEByZXR1cm5zIGEgcmF5IGluIHRoZSBkaXJlY3Rp
b24gdGhlIGNvbnRyb2xsZXIgaXMgcG9pbnRpbmcKKyAgICAgKi8KKyAgICBQb3NlRW5hYmxlZENv
bnRyb2xsZXIucHJvdG90eXBlLmdldEZvcndhcmRSYXkgPSBmdW5jdGlvbiAobGVuZ3RoKSB7Cisg
ICAgICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCkgeyBsZW5ndGggPSAxMDA7IH0KKyAgICAgICAg
aWYgKCF0aGlzLm1lc2gpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgX0N1bGxpbmdfcmF5X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlJheSJdKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpLCBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgwLCAwLCAx
KSwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbSA9IHRoaXMuX3BvaW50aW5nUG9z
ZU5vZGUgPyB0aGlzLl9wb2ludGluZ1Bvc2VOb2RlLmdldFdvcmxkTWF0cml4KCkgOiB0aGlzLm1l
c2guZ2V0V29ybGRNYXRyaXgoKTsKKyAgICAgICAgdmFyIG9yaWdpbiA9IG0uZ2V0VHJhbnNsYXRp
b24oKTsKKyAgICAgICAgdmFyIGZvcndhcmQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgwLCAwLCAtMSk7CisgICAgICAgIHZh
ciBmb3J3YXJkV29ybGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbChmb3J3YXJkLCBtKTsKKyAgICAgICAg
dmFyIGRpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJWZWN0b3IzIl0uTm9ybWFsaXplKGZvcndhcmRXb3JsZCk7CisgICAgICAgIHJldHVy
biBuZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlJheSJdKG9y
aWdpbiwgZGlyZWN0aW9uLCBsZW5ndGgpOworICAgIH07CisgICAgLyoqCisgICAgICogTmFtZSBv
ZiB0aGUgY2hpbGQgbWVzaCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNhc3QgYSByYXkgZnJvbSB0aGUg
Y29udHJvbGxlcgorICAgICAqLworICAgIFBvc2VFbmFibGVkQ29udHJvbGxlci5QT0lOVElOR19Q
T1NFID0gIlBPSU5USU5HX1BPU0UiOworICAgIHJldHVybiBQb3NlRW5hYmxlZENvbnRyb2xsZXI7
Cit9KF9HYW1lcGFkc19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkdhbWVw
YWQiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0dhbWVwYWRzL0NvbnRyb2xsZXJz
L3ZpdmVDb250cm9sbGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vR2FtZXBhZHMvQ29udHJvbGxlcnMvdml2ZUNv
bnRyb2xsZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFZpdmVDb250cm9sbGVyICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpdmVDb250cm9sbGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBWaXZlQ29udHJvbGxlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0xvYWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0xvYWRpbmcv
c2NlbmVMb2FkZXIgKi8gIi4vTG9hZGluZy9zY2VuZUxvYWRlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF93ZWJWUkNvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2ViVlJDb250cm9sbGVyICovICIuL0dhbWVw
YWRzL0NvbnRyb2xsZXJzL3dlYlZSQ29udHJvbGxlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9wb3NlRW5hYmxlZENvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9zZUVuYWJsZWRDb250cm9sbGVyICovICIu
L0dhbWVwYWRzL0NvbnRyb2xsZXJzL3Bvc2VFbmFibGVkQ29udHJvbGxlci50cyIpOworCisKKwor
CisvKioKKyAqIFZpdmUgQ29udHJvbGxlcgorICovCit2YXIgVml2ZUNvbnRyb2xsZXIgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVml2ZUNvbnRyb2xsZXIsIF9zdXBlcik7CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBWaXZlQ29udHJvbGxlciBmcm9tIGEgZ2FtZXBhZAor
ICAgICAqIEBwYXJhbSB2ckdhbWVwYWQgdGhlIGdhbWVwYWQgdGhhdCB0aGUgY29udHJvbGxlciBz
aG91bGQgYmUgY3JlYXRlZCBmcm9tCisgICAgICovCisgICAgZnVuY3Rpb24gVml2ZUNvbnRyb2xs
ZXIodnJHYW1lcGFkKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHZy
R2FtZXBhZCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuY29udHJvbGxlclR5cGUgPSBfcG9zZUVu
YWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBvc2VFbmFibGVk
Q29udHJvbGxlclR5cGUiXS5WSVZFOworICAgICAgICBfdGhpcy5faW52ZXJ0TGVmdFN0aWNrWSA9
IHRydWU7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogSW1w
bGVtZW50cyBhYnN0cmFjdCBtZXRob2Qgb24gV2ViVlJDb250cm9sbGVyIGNsYXNzLCBsb2FkaW5n
IGNvbnRyb2xsZXIgbWVzaGVzIGFuZCBjYWxsaW5nIHRoaXMuYXR0YWNoVG9NZXNoIGlmIHN1Y2Nl
c3NmdWwuCisgICAgICogQHBhcmFtIHNjZW5lIHNjZW5lIGluIHdoaWNoIHRvIGFkZCBtZXNoZXMK
KyAgICAgKiBAcGFyYW0gbWVzaExvYWRlZCBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0
IHdpbGwgYmUgY2FsbGVkIGlmIHRoZSBtZXNoIGxvYWRzIHN1Y2Nlc3NmdWxseS4KKyAgICAgKi8K
KyAgICBWaXZlQ29udHJvbGxlci5wcm90b3R5cGUuaW5pdENvbnRyb2xsZXJNZXNoID0gZnVuY3Rp
b24gKHNjZW5lLCBtZXNoTG9hZGVkKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNj
ZW5lTG9hZGVyIl0uSW1wb3J0TWVzaCgiIiwgVml2ZUNvbnRyb2xsZXIuTU9ERUxfQkFTRV9VUkws
IFZpdmVDb250cm9sbGVyLk1PREVMX0ZJTEVOQU1FLCBzY2VuZSwgZnVuY3Rpb24gKG5ld01lc2hl
cykgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgIFBhcmVudCBNZXNoIG5hbWU6IFZpdmVX
YW5kCisgICAgICAgICAgICAtIGJvZHkKKyAgICAgICAgICAgIC0gcl9ncmlwcGVyCisgICAgICAg
ICAgICAtIGxfZ3JpcHBlcgorICAgICAgICAgICAgLSBtZW51X2J1dHRvbgorICAgICAgICAgICAg
LSBzeXN0ZW1fYnV0dG9uCisgICAgICAgICAgICAtIHRyYWNrcGFkCisgICAgICAgICAgICAtIHRy
aWdnZXIKKyAgICAgICAgICAgIC0gTEVECisgICAgICAgICAgICAqLworICAgICAgICAgICAgX3Ro
aXMuX2RlZmF1bHRNb2RlbCA9IG5ld01lc2hlc1sxXTsKKyAgICAgICAgICAgIF90aGlzLmF0dGFj
aFRvTWVzaChfdGhpcy5fZGVmYXVsdE1vZGVsKTsKKyAgICAgICAgICAgIGlmIChtZXNoTG9hZGVk
KSB7CisgICAgICAgICAgICAgICAgbWVzaExvYWRlZChfdGhpcy5fZGVmYXVsdE1vZGVsKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoVml2ZUNvbnRyb2xsZXIucHJvdG90eXBlLCAib25MZWZ0QnV0dG9uU3RhdGVDaGFuZ2VkT2Jz
ZXJ2YWJsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZpcmVkIHdoZW4gdGhlIGxlZnQg
YnV0dG9uIG9uIHRoaXMgY29udHJvbGxlciBpcyBtb2RpZmllZAorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5vbk1haW5CdXR0
b25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoVml2ZUNvbnRyb2xsZXIucHJvdG90eXBlLCAib25SaWdodEJ1dHRvblN0
YXRlQ2hhbmdlZE9ic2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3
aGVuIHRoZSByaWdodCBidXR0b24gb24gdGhpcyBjb250cm9sbGVyIGlzIG1vZGlmaWVkCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLm9uTWFpbkJ1dHRvblN0YXRlQ2hhbmdlZE9ic2VydmFibGU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWaXZlQ29udHJvbGxlci5wcm90b3R5cGUsICJv
bk1lbnVCdXR0b25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogRmlyZWQgd2hlbiB0aGUgbWVudSBidXR0b24gb24gdGhpcyBjb250cm9sbGVyIGlzIG1v
ZGlmaWVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLm9uU2Vjb25kYXJ5QnV0dG9uU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQ2FsbGVkIG9uY2UgZm9yIGVhY2gg
YnV0dG9uIHRoYXQgY2hhbmdlZCBzdGF0ZSBzaW5jZSB0aGUgbGFzdCBmcmFtZQorICAgICAqIFZp
dmUgbWFwcGluZzoKKyAgICAgKiAwOiB0b3VjaHBhZAorICAgICAqIDE6IHRyaWdnZXIKKyAgICAg
KiAyOiBsZWZ0IEFORCByaWdodCBidXR0b25zCisgICAgICogMzogbWVudSBidXR0b24KKyAgICAg
KiBAcGFyYW0gYnV0dG9uSWR4IFdoaWNoIGJ1dHRvbiBpbmRleCBjaGFuZ2VkCisgICAgICogQHBh
cmFtIHN0YXRlIE5ldyBzdGF0ZSBvZiB0aGUgYnV0dG9uCisgICAgICogQHBhcmFtIGNoYW5nZXMg
V2hpY2ggcHJvcGVydGllcyBvbiB0aGUgc3RhdGUgY2hhbmdlZCBzaW5jZSBsYXN0IGZyYW1lCisg
ICAgICovCisgICAgVml2ZUNvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVCdXR0b25DaGFuZ2Ug
PSBmdW5jdGlvbiAoYnV0dG9uSWR4LCBzdGF0ZSwgY2hhbmdlcykgeworICAgICAgICB2YXIgbm90
aWZ5T2JqZWN0ID0gc3RhdGU7IC8veyBzdGF0ZTogc3RhdGUsIGNoYW5nZXM6IGNoYW5nZXMgfTsK
KyAgICAgICAgc3dpdGNoIChidXR0b25JZHgpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAg
ICAgICAgICAgICB0aGlzLm9uUGFkU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZl
cnMobm90aWZ5T2JqZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBj
YXNlIDE6IC8vIGluZGV4IHRyaWdnZXIKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVs
dE1vZGVsKSB7CisgICAgICAgICAgICAgICAgICAgICh0aGlzLl9kZWZhdWx0TW9kZWwuZ2V0Q2hp
bGRyZW4oKVs2XSkucm90YXRpb24ueCA9IC1ub3RpZnlPYmplY3QudmFsdWUgKiAwLjE1OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLm9uVHJpZ2dlclN0YXRlQ2hhbmdl
ZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKG5vdGlmeU9iamVjdCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgY2FzZSAyOiAvLyBsZWZ0IEFORCByaWdodCBidXR0b24K
KyAgICAgICAgICAgICAgICB0aGlzLm9uTWFpbkJ1dHRvblN0YXRlQ2hhbmdlZE9ic2VydmFibGUu
bm90aWZ5T2JzZXJ2ZXJzKG5vdGlmeU9iamVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kZWZhdWx0TW9k
ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vdGlmeU9iamVjdC5wcmVzc2VkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5fZGVmYXVsdE1vZGVsLmdldENoaWxkcmVuKClb
Ml0pLnBvc2l0aW9uLnkgPSAtMC4wMDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5fZGVmYXVs
dE1vZGVsLmdldENoaWxkcmVuKClbMl0pLnBvc2l0aW9uLnkgPSAwOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMub25TZWNvbmRh
cnlCdXR0b25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhub3RpZnlPYmpl
Y3QpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogQmFzZSBVcmwgZm9yIHRoZSBjb250cm9sbGVyIG1vZGVsLgorICAgICAqLworICAg
IFZpdmVDb250cm9sbGVyLk1PREVMX0JBU0VfVVJMID0gJ2h0dHBzOi8vY29udHJvbGxlcnMuYmFi
eWxvbmpzLmNvbS92aXZlLyc7CisgICAgLyoqCisgICAgICogRmlsZSBuYW1lIGZvciB0aGUgY29u
dHJvbGxlciBtb2RlbC4KKyAgICAgKi8KKyAgICBWaXZlQ29udHJvbGxlci5NT0RFTF9GSUxFTkFN
RSA9ICd3YW5kLmJhYnlsb24nOworICAgIHJldHVybiBWaXZlQ29udHJvbGxlcjsKK30oX3dlYlZS
Q29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJXZWJWUkNvbnRyb2xsZXIi
XSkpOworCitfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlciJdLl9Db250cm9sbGVyRmFjdG9yaWVzLnB1
c2goeworICAgIGNhbkNyZWF0ZTogZnVuY3Rpb24gKGdhbWVwYWRJbmZvKSB7CisgICAgICAgIHJl
dHVybiBnYW1lcGFkSW5mby5pZC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ29wZW52cicpICE9PSAt
MTsKKyAgICB9LAorICAgIGNyZWF0ZTogZnVuY3Rpb24gKGdhbWVwYWRJbmZvKSB7CisgICAgICAg
IHJldHVybiBuZXcgVml2ZUNvbnRyb2xsZXIoZ2FtZXBhZEluZm8pOworICAgIH0KK30pOworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy93ZWJWUkNvbnRyb2xs
ZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vR2FtZXBhZHMvQ29udHJvbGxlcnMvd2ViVlJDb250cm9sbGVyLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogV2ViVlJDb250cm9sbGVyICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlZSQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gV2ViVlJDb250cm9sbGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
dHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8g
Ii4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc2VF
bmFibGVkQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9wb3NlRW5hYmxlZENvbnRyb2xsZXIgKi8gIi4vR2FtZXBhZHMvQ29u
dHJvbGxlcnMvcG9zZUVuYWJsZWRDb250cm9sbGVyLnRzIik7CisKKworCisvKioKKyAqIERlZmlu
ZXMgdGhlIFdlYlZSQ29udHJvbGxlciBvYmplY3QgdGhhdCByZXByZXNlbnRzIGNvbnRyb2xsZXJz
IHRyYWNrZWQgaW4gM0Qgc3BhY2UKKyAqLwordmFyIFdlYlZSQ29udHJvbGxlciA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2V4dGVuZHMiXShXZWJWUkNvbnRyb2xsZXIsIF9zdXBlcik7CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIG5ldyBXZWJWUkNvbnRyb2xsZXIgZnJvbSBhIGdhbWVwYWQKKyAg
ICAgKiBAcGFyYW0gdnJHYW1lcGFkIHRoZSBnYW1lcGFkIHRoYXQgdGhlIFdlYlZSQ29udHJvbGxl
ciBzaG91bGQgYmUgY3JlYXRlZCBmcm9tCisgICAgICovCisgICAgZnVuY3Rpb24gV2ViVlJDb250
cm9sbGVyKHZyR2FtZXBhZCkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlz
LCB2ckdhbWVwYWQpIHx8IHRoaXM7CisgICAgICAgIC8vIE9ic2VydmFibGVzCisgICAgICAgIC8q
KgorICAgICAgICAgKiBGaXJlZCB3aGVuIHRoZSB0cmlnZ2VyIHN0YXRlIGhhcyBjaGFuZ2VkCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5vblRyaWdnZXJTdGF0ZUNoYW5nZWRPYnNlcnZhYmxl
ID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2Jz
ZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3aGVuIHRoZSBtYWlu
IGJ1dHRvbiBzdGF0ZSBoYXMgY2hhbmdlZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25N
YWluQnV0dG9uU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioK
KyAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgc2Vjb25kYXJ5IGJ1dHRvbiBzdGF0ZSBoYXMgY2hh
bmdlZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25TZWNvbmRhcnlCdXR0b25TdGF0ZUNo
YW5nZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJl
ZCB3aGVuIHRoZSBwYWQgc3RhdGUgaGFzIGNoYW5nZWQKKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLm9uUGFkU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioK
KyAgICAgICAgICogRmlyZWQgd2hlbiBjb250cm9sbGVycyBzdGljayB2YWx1ZXMgaGF2ZSBjaGFu
Z2VkCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vblBhZFZhbHVlc0NoYW5nZWRPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBYIGFuZCBZIGF4aXMgY29y
cmVzcG9uZGluZyB0byB0aGUgY29udHJvbGxlcnMgam95c3RpY2sKKyAgICAgICAgICovCisgICAg
ICAgIF90aGlzLnBhZCA9IHsgeDogMCwgeTogMCB9OworICAgICAgICAvLyBhdm9pZCBHQywgc3Rv
cmUgc3RhdGUgaW4gYSB0bXAgb2JqZWN0CisgICAgICAgIF90aGlzLl9jaGFuZ2VzID0geworICAg
ICAgICAgICAgcHJlc3NDaGFuZ2VkOiBmYWxzZSwKKyAgICAgICAgICAgIHRvdWNoQ2hhbmdlZDog
ZmFsc2UsCisgICAgICAgICAgICB2YWx1ZUNoYW5nZWQ6IGZhbHNlLAorICAgICAgICAgICAgY2hh
bmdlZDogZmFsc2UKKyAgICAgICAgfTsKKyAgICAgICAgX3RoaXMuX2J1dHRvbnMgPSBuZXcgQXJy
YXkodnJHYW1lcGFkLmJ1dHRvbnMubGVuZ3RoKTsKKyAgICAgICAgX3RoaXMuaGFuZCA9IHZyR2Ft
ZXBhZC5oYW5kOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAq
IEZpcmVkIHdoZW4gYSBjb250cm9sbGVyIGJ1dHRvbidzIHN0YXRlIGhhcyBjaGFuZ2VkCisgICAg
ICogQHBhcmFtIGNhbGxiYWNrIHRoZSBjYWxsYmFjayBjb250YWluaW5nIHRoZSBidXR0b24gdGhh
dCB3YXMgbW9kaWZpZWQKKyAgICAgKi8KKyAgICBXZWJWUkNvbnRyb2xsZXIucHJvdG90eXBlLm9u
QnV0dG9uU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5f
b25CdXR0b25TdGF0ZUNoYW5nZSA9IGNhbGxiYWNrOworICAgIH07CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KFdlYlZSQ29udHJvbGxlci5wcm90b3R5cGUsICJkZWZhdWx0TW9kZWwiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZGVmYXVsdCBjb250cm9sbGVyIG1vZGVsIGZvciB0
aGUgY29udHJvbGxlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdE1vZGVsOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiB0aGUgY29udHJvbGxlciBhbmQg
bWVzaCBiYXNlZCBvbiB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgcm90YXRpb24gb2YgdGhlIGNv
bnRyb2xsZXIKKyAgICAgKi8KKyAgICBXZWJWUkNvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlz
KTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2J1dHRvbnMubGVu
Z3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB0aGlzLl9zZXRCdXR0b25WYWx1ZSh0aGlzLmJy
b3dzZXJHYW1lcGFkLmJ1dHRvbnNbaW5kZXhdLCB0aGlzLl9idXR0b25zW2luZGV4XSwgaW5kZXgp
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmxlZnRTdGljay54ICE9PSB0aGlzLnBhZC54
IHx8IHRoaXMubGVmdFN0aWNrLnkgIT09IHRoaXMucGFkLnkpIHsKKyAgICAgICAgICAgIHRoaXMu
cGFkLnggPSB0aGlzLmxlZnRTdGljay54OworICAgICAgICAgICAgdGhpcy5wYWQueSA9IHRoaXMu
bGVmdFN0aWNrLnk7CisgICAgICAgICAgICB0aGlzLm9uUGFkVmFsdWVzQ2hhbmdlZE9ic2VydmFi
bGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMucGFkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgV2Vi
VlJDb250cm9sbGVyLnByb3RvdHlwZS5fc2V0QnV0dG9uVmFsdWUgPSBmdW5jdGlvbiAobmV3U3Rh
dGUsIGN1cnJlbnRTdGF0ZSwgYnV0dG9uSW5kZXgpIHsKKyAgICAgICAgaWYgKCFuZXdTdGF0ZSkg
eworICAgICAgICAgICAgbmV3U3RhdGUgPSB7CisgICAgICAgICAgICAgICAgcHJlc3NlZDogZmFs
c2UsCisgICAgICAgICAgICAgICAgdG91Y2hlZDogZmFsc2UsCisgICAgICAgICAgICAgICAgdmFs
dWU6IDAKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjdXJyZW50U3Rh
dGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvbnNbYnV0dG9uSW5kZXhdID0geworICAgICAg
ICAgICAgICAgIHByZXNzZWQ6IG5ld1N0YXRlLnByZXNzZWQsCisgICAgICAgICAgICAgICAgdG91
Y2hlZDogbmV3U3RhdGUudG91Y2hlZCwKKyAgICAgICAgICAgICAgICB2YWx1ZTogbmV3U3RhdGUu
dmFsdWUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fY2hlY2tDaGFuZ2VzKG5ld1N0YXRlLCBjdXJyZW50U3RhdGUpOworICAgICAg
ICBpZiAodGhpcy5fY2hhbmdlcy5jaGFuZ2VkKSB7CisgICAgICAgICAgICB0aGlzLl9vbkJ1dHRv
blN0YXRlQ2hhbmdlICYmIHRoaXMuX29uQnV0dG9uU3RhdGVDaGFuZ2UodGhpcy5pbmRleCwgYnV0
dG9uSW5kZXgsIG5ld1N0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX2hhbmRsZUJ1dHRvbkNoYW5n
ZShidXR0b25JbmRleCwgbmV3U3RhdGUsIHRoaXMuX2NoYW5nZXMpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2J1dHRvbnNbYnV0dG9uSW5kZXhdLnByZXNzZWQgPSBuZXdTdGF0ZS5wcmVzc2Vk
OworICAgICAgICB0aGlzLl9idXR0b25zW2J1dHRvbkluZGV4XS50b3VjaGVkID0gbmV3U3RhdGUu
dG91Y2hlZDsKKyAgICAgICAgLy8gb2N1bHVzIHRyaWdnZXJzIGFyZSBuZXZlciAwLCB0aG91IG5v
dCB0b3VjaGVkLgorICAgICAgICB0aGlzLl9idXR0b25zW2J1dHRvbkluZGV4XS52YWx1ZSA9IG5l
d1N0YXRlLnZhbHVlIDwgMC4wMDAwMDAwMSA/IDAgOiBuZXdTdGF0ZS52YWx1ZTsKKyAgICB9Owor
ICAgIFdlYlZSQ29udHJvbGxlci5wcm90b3R5cGUuX2NoZWNrQ2hhbmdlcyA9IGZ1bmN0aW9uIChu
ZXdTdGF0ZSwgY3VycmVudFN0YXRlKSB7CisgICAgICAgIHRoaXMuX2NoYW5nZXMucHJlc3NDaGFu
Z2VkID0gbmV3U3RhdGUucHJlc3NlZCAhPT0gY3VycmVudFN0YXRlLnByZXNzZWQ7CisgICAgICAg
IHRoaXMuX2NoYW5nZXMudG91Y2hDaGFuZ2VkID0gbmV3U3RhdGUudG91Y2hlZCAhPT0gY3VycmVu
dFN0YXRlLnRvdWNoZWQ7CisgICAgICAgIHRoaXMuX2NoYW5nZXMudmFsdWVDaGFuZ2VkID0gbmV3
U3RhdGUudmFsdWUgIT09IGN1cnJlbnRTdGF0ZS52YWx1ZTsKKyAgICAgICAgdGhpcy5fY2hhbmdl
cy5jaGFuZ2VkID0gdGhpcy5fY2hhbmdlcy5wcmVzc0NoYW5nZWQgfHwgdGhpcy5fY2hhbmdlcy50
b3VjaENoYW5nZWQgfHwgdGhpcy5fY2hhbmdlcy52YWx1ZUNoYW5nZWQ7CisgICAgICAgIHJldHVy
biB0aGlzLl9jaGFuZ2VzOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGgg
d2ViVlJDT250cm9sbGVyCisgICAgICovCisgICAgV2ViVlJDb250cm9sbGVyLnByb3RvdHlwZS5k
aXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2Uu
Y2FsbCh0aGlzKTsKKyAgICAgICAgdGhpcy5vblRyaWdnZXJTdGF0ZUNoYW5nZWRPYnNlcnZhYmxl
LmNsZWFyKCk7CisgICAgICAgIHRoaXMub25NYWluQnV0dG9uU3RhdGVDaGFuZ2VkT2JzZXJ2YWJs
ZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uU2Vjb25kYXJ5QnV0dG9uU3RhdGVDaGFuZ2VkT2Jz
ZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uUGFkU3RhdGVDaGFuZ2VkT2JzZXJ2YWJs
ZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uUGFkVmFsdWVzQ2hhbmdlZE9ic2VydmFibGUuY2xl
YXIoKTsKKyAgICB9OworICAgIHJldHVybiBXZWJWUkNvbnRyb2xsZXI7Cit9KF9wb3NlRW5hYmxl
ZENvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUG9zZUVuYWJsZWRDb250
cm9sbGVyIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9HYW1lcGFkcy9Db250cm9s
bGVycy93aW5kb3dzTW90aW9uQ29udHJvbGxlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dhbWVw
YWRzL0NvbnRyb2xsZXJzL3dpbmRvd3NNb3Rpb25Db250cm9sbGVyLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBXaW5kb3dzTW90aW9uQ29udHJvbGxlciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJXaW5kb3dzTW90aW9uQ29udHJvbGxlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gV2luZG93c01vdGlvbkNvbnRyb2xsZXI7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVz
Ni5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9s
b2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9N
YXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVz
L21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ3VsbGluZ19yYXlfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0N1
bGxpbmcvcmF5ICovICIuL0N1bGxpbmcvcmF5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0xvYWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0xvYWRpbmcvc2NlbmVMb2FkZXIgKi8gIi4vTG9h
ZGluZy9zY2VuZUxvYWRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF93ZWJWUkNv
bnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vd2ViVlJDb250cm9sbGVyICovICIuL0dhbWVwYWRzL0NvbnRyb2xsZXJzL3dlYlZS
Q29udHJvbGxlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9nZW5lcmljQ29udHJv
bGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9nZW5lcmljQ29udHJvbGxlciAqLyAiLi9HYW1lcGFkcy9Db250cm9sbGVycy9nZW5lcmlj
Q29udHJvbGxlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3NlRW5hYmxlZENv
bnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vcG9zZUVuYWJsZWRDb250cm9sbGVyICovICIuL0dhbWVwYWRzL0NvbnRyb2xsZXJz
L3Bvc2VFbmFibGVkQ29udHJvbGxlci50cyIpOworCisKKworCisKKworCisKKworCisvKioKKyAq
IERlZmluZXMgdGhlIExvYWRlZE1lc2hJbmZvIG9iamVjdCB0aGF0IGRlc2NyaWJlcyBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgbG9hZGVkIHdlYlZSIGNvbnRyb2xsZXIgbWVzaAorICovCit2YXIgTG9h
ZGVkTWVzaEluZm8gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24g
TG9hZGVkTWVzaEluZm8oKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNYXAgb2YgdGhlIGJ1
dHRvbiBtZXNoZXMgY29udGFpbmVkIGluIHRoZSBjb250cm9sbGVyCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLmJ1dHRvbk1lc2hlcyA9IHt9OworICAgICAgICAvKioKKyAgICAgICAgICogTWFw
IG9mIHRoZSBheGlzIG1lc2hlcyBjb250YWluZWQgaW4gdGhlIGNvbnRyb2xsZXIKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuYXhpc01lc2hlcyA9IHt9OworICAgIH0KKyAgICByZXR1cm4gTG9h
ZGVkTWVzaEluZm87Cit9KCkpOworLyoqCisgKiBEZWZpbmVzIHRoZSBXaW5kb3dzTW90aW9uQ29u
dHJvbGxlciBvYmplY3QgdGhhdCB0aGUgc3RhdGUgb2YgdGhlIHdpbmRvd3MgbW90aW9uIGNvbnRy
b2xsZXIKKyAqLwordmFyIFdpbmRvd3NNb3Rpb25Db250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZXh0ZW5kcyJdKFdpbmRvd3NNb3Rpb25Db250cm9sbGVyLCBfc3VwZXIpOworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYSBuZXcgV2luZG93c01vdGlvbkNvbnRyb2xsZXIgZnJvbSBhIGdh
bWVwYWQKKyAgICAgKiBAcGFyYW0gdnJHYW1lcGFkIHRoZSBnYW1lcGFkIHRoYXQgdGhlIGNvbnRy
b2xsZXIgc2hvdWxkIGJlIGNyZWF0ZWQgZnJvbQorICAgICAqLworICAgIGZ1bmN0aW9uIFdpbmRv
d3NNb3Rpb25Db250cm9sbGVyKHZyR2FtZXBhZCkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3Vw
ZXIuY2FsbCh0aGlzLCB2ckdhbWVwYWQpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9tYXBwaW5n
ID0geworICAgICAgICAgICAgLy8gU2VtYW50aWMgYnV0dG9uIG5hbWVzCisgICAgICAgICAgICBi
dXR0b25zOiBbJ3RodW1ic3RpY2snLCAndHJpZ2dlcicsICdncmlwJywgJ21lbnUnLCAndHJhY2tw
YWQnXSwKKyAgICAgICAgICAgIC8vIEEgbWFwcGluZyBvZiB0aGUgYnV0dG9uIG5hbWUgdG8gZ2xU
RiBtb2RlbCBub2RlIG5hbWUKKyAgICAgICAgICAgIC8vIHRoYXQgc2hvdWxkIGJlIHRyYW5zZm9y
bWVkIGJ5IGJ1dHRvbiB2YWx1ZS4KKyAgICAgICAgICAgIGJ1dHRvbk1lc2hOYW1lczogeworICAg
ICAgICAgICAgICAgICd0cmlnZ2VyJzogJ1NFTEVDVCcsCisgICAgICAgICAgICAgICAgJ21lbnUn
OiAnTUVOVScsCisgICAgICAgICAgICAgICAgJ2dyaXAnOiAnR1JBU1AnLAorICAgICAgICAgICAg
ICAgICd0aHVtYnN0aWNrJzogJ1RIVU1CU1RJQ0tfUFJFU1MnLAorICAgICAgICAgICAgICAgICd0
cmFja3BhZCc6ICdUT1VDSFBBRF9QUkVTUycKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAv
LyBUaGlzIG1hcHBpbmcgaXMgdXNlZCB0byB0cmFuc2xhdGUgZnJvbSB0aGUgTW90aW9uIENvbnRy
b2xsZXIgdG8gQmFieWxvbiBzZW1hbnRpY3MKKyAgICAgICAgICAgIGJ1dHRvbk9ic2VydmFibGVO
YW1lczogeworICAgICAgICAgICAgICAgICd0cmlnZ2VyJzogJ29uVHJpZ2dlclN0YXRlQ2hhbmdl
ZE9ic2VydmFibGUnLAorICAgICAgICAgICAgICAgICdtZW51JzogJ29uU2Vjb25kYXJ5QnV0dG9u
U3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZScsCisgICAgICAgICAgICAgICAgJ2dyaXAnOiAnb25NYWlu
QnV0dG9uU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZScsCisgICAgICAgICAgICAgICAgJ3RodW1ic3Rp
Y2snOiAnb25QYWRTdGF0ZUNoYW5nZWRPYnNlcnZhYmxlJywKKyAgICAgICAgICAgICAgICAndHJh
Y2twYWQnOiAnb25UcmFja3BhZENoYW5nZWRPYnNlcnZhYmxlJworICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIC8vIEEgbWFwcGluZyBvZiB0aGUgYXhpcyBuYW1lIHRvIGdsVEYgbW9kZWwgbm9k
ZSBuYW1lCisgICAgICAgICAgICAvLyB0aGF0IHNob3VsZCBiZSB0cmFuc2Zvcm1lZCBieSBheGlz
IHZhbHVlLgorICAgICAgICAgICAgLy8gVGhpcyBhcnJheSBtaXJyb3JzIHRoZSBicm93c2VyR2Ft
ZXBhZC5heGVzIGFycmF5LCBzdWNoIHRoYXQKKyAgICAgICAgICAgIC8vIHRoZSBtZXNoIGNvcnJl
c3BvbmRpbmcgdG8gYXhpcyAwIGlzIGluIHRoaXMgYXJyYXkgaW5kZXggMC4KKyAgICAgICAgICAg
IGF4aXNNZXNoTmFtZXM6IFsKKyAgICAgICAgICAgICAgICAnVEhVTUJTVElDS19YJywKKyAgICAg
ICAgICAgICAgICAnVEhVTUJTVElDS19ZJywKKyAgICAgICAgICAgICAgICAnVE9VQ0hQQURfVE9V
Q0hfWCcsCisgICAgICAgICAgICAgICAgJ1RPVUNIUEFEX1RPVUNIX1knCisgICAgICAgICAgICBd
LAorICAgICAgICAgICAgcG9pbnRpbmdQb3NlTWVzaE5hbWU6IF9wb3NlRW5hYmxlZENvbnRyb2xs
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUG9zZUVuYWJsZWRDb250cm9sbGVyIl0u
UE9JTlRJTkdfUE9TRQorICAgICAgICB9OworICAgICAgICAvKioKKyAgICAgICAgICogRmlyZWQg
d2hlbiB0aGUgdHJhY2twYWQgb24gdGhpcyBjb250cm9sbGVyIGlzIGNsaWNrZWQKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLm9uVHJhY2twYWRDaGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlz
Y19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgp
OworICAgICAgICAvKioKKyAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgdHJhY2twYWQgb24gdGhp
cyBjb250cm9sbGVyIGlzIG1vZGlmaWVkCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vblRy
YWNrcGFkVmFsdWVzQ2hhbmdlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFRoZSBjdXJyZW50IHggYW5kIHkgdmFsdWVzIG9mIHRoaXMgY29udHJvbGxlcidz
IHRyYWNrcGFkCisgICAgICAgICAqLworICAgICAgICBfdGhpcy50cmFja3BhZCA9IHsgeDogMCwg
eTogMCB9OworICAgICAgICBfdGhpcy5jb250cm9sbGVyVHlwZSA9IF9wb3NlRW5hYmxlZENvbnRy
b2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUG9zZUVuYWJsZWRDb250cm9sbGVy
VHlwZSJdLldJTkRPV1M7CisgICAgICAgIF90aGlzLl9sb2FkZWRNZXNoSW5mbyA9IG51bGw7Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdp
bmRvd3NNb3Rpb25Db250cm9sbGVyLnByb3RvdHlwZSwgIm9uVHJpZ2dlckJ1dHRvblN0YXRlQ2hh
bmdlZE9ic2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3aGVuIHRo
ZSB0cmlnZ2VyIG9uIHRoaXMgY29udHJvbGxlciBpcyBtb2RpZmllZAorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5vblRyaWdn
ZXJTdGF0ZUNoYW5nZWRPYnNlcnZhYmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoV2luZG93c01vdGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLCAib25NZW51
QnV0dG9uU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEZpcmVkIHdoZW4gdGhlIG1lbnUgYnV0dG9uIG9uIHRoaXMgY29udHJvbGxlciBpcyBtb2RpZmll
ZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5vblNlY29uZGFyeUJ1dHRvblN0YXRlQ2hhbmdlZE9ic2VydmFibGU7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5kb3dzTW90aW9uQ29u
dHJvbGxlci5wcm90b3R5cGUsICJvbkdyaXBCdXR0b25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgZ3JpcCBidXR0b24gb24g
dGhpcyBjb250cm9sbGVyIGlzIG1vZGlmaWVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm9uTWFpbkJ1dHRvblN0YXRlQ2hh
bmdlZE9ic2VydmFibGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShXaW5kb3dzTW90aW9uQ29udHJvbGxlci5wcm90b3R5cGUsICJvblRodW1ic3RpY2tCdXR0
b25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRmly
ZWQgd2hlbiB0aGUgdGh1bWJzdGljayBidXR0b24gb24gdGhpcyBjb250cm9sbGVyIGlzIG1vZGlm
aWVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLm9uUGFkU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpbmRvd3NNb3Rpb25Db250cm9sbGVyLnBy
b3RvdHlwZSwgIm9uVG91Y2hwYWRCdXR0b25TdGF0ZUNoYW5nZWRPYnNlcnZhYmxlIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgdG91Y2hwYWQgYnV0dG9uIG9uIHRo
aXMgY29udHJvbGxlciBpcyBtb2RpZmllZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5vblRyYWNrcGFkQ2hhbmdlZE9ic2Vy
dmFibGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5k
b3dzTW90aW9uQ29udHJvbGxlci5wcm90b3R5cGUsICJvblRvdWNocGFkVmFsdWVzQ2hhbmdlZE9i
c2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3aGVuIHRoZSB0b3Vj
aHBhZCB2YWx1ZXMgb24gdGhpcyBjb250cm9sbGVyIGFyZSBtb2RpZmllZAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5vblRy
YWNrcGFkVmFsdWVzQ2hhbmdlZE9ic2VydmFibGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIFdp
bmRvd3NNb3Rpb25Db250cm9sbGVyLnByb3RvdHlwZS5fdXBkYXRlVHJhY2twYWQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGlmICh0aGlzLmJyb3dzZXJHYW1lcGFkLmF4ZXMgJiYgKHRoaXMuYnJv
d3NlckdhbWVwYWQuYXhlc1syXSAhPSB0aGlzLnRyYWNrcGFkLnggfHwgdGhpcy5icm93c2VyR2Ft
ZXBhZC5heGVzWzNdICE9IHRoaXMudHJhY2twYWQueSkpIHsKKyAgICAgICAgICAgIHRoaXMudHJh
Y2twYWQueCA9IHRoaXMuYnJvd3NlckdhbWVwYWRbImF4ZXMiXVsyXTsKKyAgICAgICAgICAgIHRo
aXMudHJhY2twYWQueSA9IHRoaXMuYnJvd3NlckdhbWVwYWRbImF4ZXMiXVszXTsKKyAgICAgICAg
ICAgIHRoaXMub25UcmFja3BhZFZhbHVlc0NoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyh0aGlzLnRyYWNrcGFkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ2Fs
bGVkIG9uY2UgcGVyIGZyYW1lIGJ5IHRoZSBlbmdpbmUuCisgICAgICovCisgICAgV2luZG93c01v
dGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
X3N1cGVyLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMuYnJv
d3NlckdhbWVwYWQuYXhlcykgeworICAgICAgICAgICAgdGhpcy5fdXBkYXRlVHJhY2twYWQoKTsK
KyAgICAgICAgICAgIC8vIE9ubHkgbmVlZCB0byBhbmltYXRlIGF4ZXMgaWYgdGhlcmUgaXMgYSBs
b2FkZWQgbWVzaAorICAgICAgICAgICAgaWYgKHRoaXMuX2xvYWRlZE1lc2hJbmZvKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgYXhpcyA9IDA7IGF4aXMgPCB0aGlzLl9tYXBwaW5nLmF4aXNN
ZXNoTmFtZXMubGVuZ3RoOyBheGlzKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGVy
cEF4aXNUcmFuc2Zvcm0oYXhpcywgdGhpcy5icm93c2VyR2FtZXBhZC5heGVzW2F4aXNdKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIENhbGxlZCBvbmNlIGZvciBlYWNoIGJ1dHRvbiB0aGF0IGNoYW5nZWQgc3RhdGUg
c2luY2UgdGhlIGxhc3QgZnJhbWUKKyAgICAgKiBAcGFyYW0gYnV0dG9uSWR4IFdoaWNoIGJ1dHRv
biBpbmRleCBjaGFuZ2VkCisgICAgICogQHBhcmFtIHN0YXRlIE5ldyBzdGF0ZSBvZiB0aGUgYnV0
dG9uCisgICAgICogQHBhcmFtIGNoYW5nZXMgV2hpY2ggcHJvcGVydGllcyBvbiB0aGUgc3RhdGUg
Y2hhbmdlZCBzaW5jZSBsYXN0IGZyYW1lCisgICAgICovCisgICAgV2luZG93c01vdGlvbkNvbnRy
b2xsZXIucHJvdG90eXBlLl9oYW5kbGVCdXR0b25DaGFuZ2UgPSBmdW5jdGlvbiAoYnV0dG9uSWR4
LCBzdGF0ZSwgY2hhbmdlcykgeworICAgICAgICB2YXIgYnV0dG9uTmFtZSA9IHRoaXMuX21hcHBp
bmcuYnV0dG9uc1tidXR0b25JZHhdOworICAgICAgICBpZiAoIWJ1dHRvbk5hbWUpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBVcGRhdGUgdGhlIHRyYWNrcGFk
IHRvIGVuc3VyZSB0cmFja3BhZC54L3kgYXJlIGFjY3VyYXRlIGR1cmluZyBidXR0b24gZXZlbnRz
IGJldHdlZW4gZnJhbWVzCisgICAgICAgIHRoaXMuX3VwZGF0ZVRyYWNrcGFkKCk7CisgICAgICAg
IC8vIE9ubHkgZW1pdCBldmVudHMgZm9yIGJ1dHRvbnMgdGhhdCB3ZSBrbm93IGhvdyB0byBtYXAg
ZnJvbSBpbmRleCB0byBuYW1lCisgICAgICAgIHZhciBvYnNlcnZhYmxlID0gdGhpc1sodGhpcy5f
bWFwcGluZy5idXR0b25PYnNlcnZhYmxlTmFtZXMpW2J1dHRvbk5hbWVdXTsKKyAgICAgICAgaWYg
KG9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIG9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHN0
YXRlKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9sZXJwQnV0dG9uVHJhbnNmb3JtKGJ1dHRv
bk5hbWUsIHN0YXRlLnZhbHVlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1vdmVzIHRoZSBi
dXR0b25zIG9uIHRoZSBjb250cm9sbGVyIG1lc2ggYmFzZWQgb24gdGhlaXIgY3VycmVudCBzdGF0
ZQorICAgICAqIEBwYXJhbSBidXR0b25OYW1lIHRoZSBuYW1lIG9mIHRoZSBidXR0b24gdG8gbW92
ZQorICAgICAqIEBwYXJhbSBidXR0b25WYWx1ZSB0aGUgdmFsdWUgb2YgdGhlIGJ1dHRvbiB3aGlj
aCBkZXRlcm1pbmVzIHRoZSBidXR0b25zIG5ldyBwb3NpdGlvbgorICAgICAqLworICAgIFdpbmRv
d3NNb3Rpb25Db250cm9sbGVyLnByb3RvdHlwZS5fbGVycEJ1dHRvblRyYW5zZm9ybSA9IGZ1bmN0
aW9uIChidXR0b25OYW1lLCBidXR0b25WYWx1ZSkgeworICAgICAgICAvLyBJZiB0aGVyZSBpcyBu
byBsb2FkZWQgbWVzaCwgdGhlcmUgaXMgbm90aGluZyB0byB0cmFuc2Zvcm0uCisgICAgICAgIGlm
ICghdGhpcy5fbG9hZGVkTWVzaEluZm8pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB2YXIgbWVzaEluZm8gPSB0aGlzLl9sb2FkZWRNZXNoSW5mby5idXR0b25NZXNo
ZXNbYnV0dG9uTmFtZV07CisgICAgICAgIGlmICghbWVzaEluZm8udW5wcmVzc2VkLnJvdGF0aW9u
UXVhdGVybmlvbiB8fCAhbWVzaEluZm8ucHJlc3NlZC5yb3RhdGlvblF1YXRlcm5pb24gfHwgIW1l
c2hJbmZvLnZhbHVlLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0uU2xlcnBUb1JlZihtZXNoSW5mby51bnByZXNzZWQucm90
YXRpb25RdWF0ZXJuaW9uLCBtZXNoSW5mby5wcmVzc2VkLnJvdGF0aW9uUXVhdGVybmlvbiwgYnV0
dG9uVmFsdWUsIG1lc2hJbmZvLnZhbHVlLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0u
TGVycFRvUmVmKG1lc2hJbmZvLnVucHJlc3NlZC5wb3NpdGlvbiwgbWVzaEluZm8ucHJlc3NlZC5w
b3NpdGlvbiwgYnV0dG9uVmFsdWUsIG1lc2hJbmZvLnZhbHVlLnBvc2l0aW9uKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIE1vdmVzIHRoZSBheGlzIG9uIHRoZSBjb250cm9sbGVyIG1lc2ggYmFz
ZWQgb24gaXRzIGN1cnJlbnQgc3RhdGUKKyAgICAgKiBAcGFyYW0gYXhpcyB0aGUgaW5kZXggb2Yg
dGhlIGF4aXMKKyAgICAgKiBAcGFyYW0gYXhpc1ZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgYXhpcyB3
aGljaCBkZXRlcm1pbmVzIHRoZSBtZXNoZXMgbmV3IHBvc2l0aW9uCisgICAgICogQGhpZGRlbgor
ICAgICAqLworICAgIFdpbmRvd3NNb3Rpb25Db250cm9sbGVyLnByb3RvdHlwZS5fbGVycEF4aXNU
cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXhpcywgYXhpc1ZhbHVlKSB7CisgICAgICAgIGlmICghdGhp
cy5fbG9hZGVkTWVzaEluZm8pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgbWVzaEluZm8gPSB0aGlzLl9sb2FkZWRNZXNoSW5mby5heGlzTWVzaGVzW2F4aXNd
OworICAgICAgICBpZiAoIW1lc2hJbmZvKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFtZXNoSW5mby5taW4ucm90YXRpb25RdWF0ZXJuaW9uIHx8ICFtZXNo
SW5mby5tYXgucm90YXRpb25RdWF0ZXJuaW9uIHx8ICFtZXNoSW5mby52YWx1ZS5yb3RhdGlvblF1
YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBD
b252ZXJ0IGZyb20gZ2FtZXBhZCB2YWx1ZSByYW5nZSAoLTEgdG8gKzEpIHRvIGxlcnAgcmFuZ2Ug
KDAgdG8gMSkKKyAgICAgICAgdmFyIGxlcnBWYWx1ZSA9IGF4aXNWYWx1ZSAqIDAuNSArIDAuNTsK
KyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlF1YXRlcm5pb24iXS5TbGVycFRvUmVmKG1lc2hJbmZvLm1pbi5yb3RhdGlvblF1YXRlcm5pb24s
IG1lc2hJbmZvLm1heC5yb3RhdGlvblF1YXRlcm5pb24sIGxlcnBWYWx1ZSwgbWVzaEluZm8udmFs
dWUucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5MZXJwVG9SZWYobWVzaEluZm8ubWlu
LnBvc2l0aW9uLCBtZXNoSW5mby5tYXgucG9zaXRpb24sIGxlcnBWYWx1ZSwgbWVzaEluZm8udmFs
dWUucG9zaXRpb24pOworICAgIH07CisgICAgLyoqCisgICAgICogSW1wbGVtZW50cyBhYnN0cmFj
dCBtZXRob2Qgb24gV2ViVlJDb250cm9sbGVyIGNsYXNzLCBsb2FkaW5nIGNvbnRyb2xsZXIgbWVz
aGVzIGFuZCBjYWxsaW5nIHRoaXMuYXR0YWNoVG9NZXNoIGlmIHN1Y2Nlc3NmdWwuCisgICAgICog
QHBhcmFtIHNjZW5lIHNjZW5lIGluIHdoaWNoIHRvIGFkZCBtZXNoZXMKKyAgICAgKiBAcGFyYW0g
bWVzaExvYWRlZCBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVk
IGlmIHRoZSBtZXNoIGxvYWRzIHN1Y2Nlc3NmdWxseS4KKyAgICAgKi8KKyAgICBXaW5kb3dzTW90
aW9uQ29udHJvbGxlci5wcm90b3R5cGUuaW5pdENvbnRyb2xsZXJNZXNoID0gZnVuY3Rpb24gKHNj
ZW5lLCBtZXNoTG9hZGVkLCBmb3JjZURlZmF1bHQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhp
czsKKyAgICAgICAgaWYgKGZvcmNlRGVmYXVsdCA9PT0gdm9pZCAwKSB7IGZvcmNlRGVmYXVsdCA9
IGZhbHNlOyB9CisgICAgICAgIHZhciBwYXRoOworICAgICAgICB2YXIgZmlsZW5hbWU7CisgICAg
ICAgIC8vIENoZWNraW5nIGlmIEdMQiBsb2FkZXIgaXMgcHJlc2VudAorICAgICAgICBpZiAoX0xv
YWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siU2NlbmVMb2Fk
ZXIiXS5Jc1BsdWdpbkZvckV4dGVuc2lvbkF2YWlsYWJsZSgiLmdsYiIpKSB7CisgICAgICAgICAg
ICAvLyBEZXRlcm1pbmUgdGhlIGRldmljZSBzcGVjaWZpYyBmb2xkZXIgYmFzZWQgb24gdGhlIElE
IHN1ZmZpeAorICAgICAgICAgICAgdmFyIGRldmljZSA9ICdkZWZhdWx0JzsKKyAgICAgICAgICAg
IGlmICh0aGlzLmlkICYmICFmb3JjZURlZmF1bHQpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0
Y2ggPSB0aGlzLmlkLm1hdGNoKFdpbmRvd3NNb3Rpb25Db250cm9sbGVyLkdBTUVQQURfSURfUEFU
VEVSTik7CisgICAgICAgICAgICAgICAgZGV2aWNlID0gKChtYXRjaCAmJiBtYXRjaFswXSkgfHwg
ZGV2aWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEhhbmQKKyAgICAgICAgICAg
IGlmICh0aGlzLmhhbmQgPT09ICdsZWZ0JykgeworICAgICAgICAgICAgICAgIGZpbGVuYW1lID0g
V2luZG93c01vdGlvbkNvbnRyb2xsZXIuTU9ERUxfTEVGVF9GSUxFTkFNRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeyAvLyBSaWdodCBpcyB0aGUgZGVmYXVsdCBpZiBubyBoYW5k
IGlzIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gV2luZG93c01vdGlvbkNv
bnRyb2xsZXIuTU9ERUxfUklHSFRfRklMRU5BTUU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBwYXRoID0gV2luZG93c01vdGlvbkNvbnRyb2xsZXIuTU9ERUxfQkFTRV9VUkwgKyBkZXZpY2Ug
KyAnLyc7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uV2FybigiWW91IG5lZWQg
dG8gcmVmZXJlbmNlIEdMVEYgbG9hZGVyIHRvIGxvYWQgV2luZG93cyBNb3Rpb24gQ29udHJvbGxl
cnMgbW9kZWwuIEZhbGxpbmcgYmFjayB0byBnZW5lcmljIG1vZGVscyIpOworICAgICAgICAgICAg
cGF0aCA9IF9nZW5lcmljQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJH
ZW5lcmljQ29udHJvbGxlciJdLk1PREVMX0JBU0VfVVJMOworICAgICAgICAgICAgZmlsZW5hbWUg
PSBfZ2VuZXJpY0NvbnRyb2xsZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siR2VuZXJp
Y0NvbnRyb2xsZXIiXS5NT0RFTF9GSUxFTkFNRTsKKyAgICAgICAgfQorICAgICAgICBfTG9hZGlu
Z19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTY2VuZUxvYWRlciJd
LkltcG9ydE1lc2goIiIsIHBhdGgsIGZpbGVuYW1lLCBzY2VuZSwgZnVuY3Rpb24gKG1lc2hlcykg
eworICAgICAgICAgICAgLy8gZ2xURiBmaWxlcyBzdWNjZXNzZnVsbHkgbG9hZGVkIGZyb20gdGhl
IHJlbW90ZSBzZXJ2ZXIsIG5vdyBwcm9jZXNzIHRoZW0gdG8gZW5zdXJlIHRoZXkgYXJlIGluIHRo
ZSByaWdodCBmb3JtYXQuCisgICAgICAgICAgICBfdGhpcy5fbG9hZGVkTWVzaEluZm8gPSBfdGhp
cy5wcm9jZXNzTW9kZWwoc2NlbmUsIG1lc2hlcyk7CisgICAgICAgICAgICBpZiAoIV90aGlzLl9s
b2FkZWRNZXNoSW5mbykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIF90aGlzLl9kZWZhdWx0TW9kZWwgPSBfdGhpcy5fbG9hZGVkTWVzaEluZm8u
cm9vdE5vZGU7CisgICAgICAgICAgICBfdGhpcy5hdHRhY2hUb01lc2goX3RoaXMuX2RlZmF1bHRN
b2RlbCk7CisgICAgICAgICAgICBpZiAobWVzaExvYWRlZCkgeworICAgICAgICAgICAgICAgIG1l
c2hMb2FkZWQoX3RoaXMuX2RlZmF1bHRNb2RlbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
IG51bGwsIGZ1bmN0aW9uIChzY2VuZSwgbWVzc2FnZSkgeworICAgICAgICAgICAgX01pc2NfbG9n
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkxvZyhtZXNzYWdlKTsK
KyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJM
b2dnZXIiXS5XYXJuKCdGYWlsZWQgdG8gcmV0cmlldmUgY29udHJvbGxlciBtb2RlbCBmcm9tIHRo
ZSByZW1vdGUgc2VydmVyOiAnICsgcGF0aCArIGZpbGVuYW1lKTsKKyAgICAgICAgICAgIGlmICgh
Zm9yY2VEZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgX3RoaXMuaW5pdENvbnRyb2xsZXJNZXNo
KHNjZW5lLCBtZXNoTG9hZGVkLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBUYWtlcyBhIGxpc3Qgb2YgbWVzaGVzIChhcyBsb2FkZWQg
ZnJvbSB0aGUgZ2xURiBmaWxlKSBhbmQgZmluZHMgdGhlIHJvb3Qgbm9kZSwgYXMgd2VsbCBhcyBu
b2RlcyB0aGF0CisgICAgICogY2FuIGJlIHRyYW5zZm9ybWVkIGJ5IGJ1dHRvbiBwcmVzc2VzIGFu
ZCBheGVzIHZhbHVlcywgYmFzZWQgb24gdGhpcy5fbWFwcGluZy4KKyAgICAgKgorICAgICAqIEBw
YXJhbSBzY2VuZSBzY2VuZSBpbiB3aGljaCB0aGUgbWVzaGVzIGV4aXN0CisgICAgICogQHBhcmFt
IG1lc2hlcyBsaXN0IG9mIG1lc2hlcyB0aGF0IG1ha2UgdXAgdGhlIGNvbnRyb2xsZXIgbW9kZWwg
dG8gcHJvY2VzcworICAgICAqIEByZXR1cm4gc3RydWN0dXJlZCB2aWV3IG9mIHRoZSBnaXZlbiBt
ZXNoZXMsIHdpdGggbWFwcGluZyBvZiBidXR0b25zIGFuZCBheGVzIHRvIG1lc2hlcyB0aGF0IGNh
biBiZSB0cmFuc2Zvcm1lZC4KKyAgICAgKi8KKyAgICBXaW5kb3dzTW90aW9uQ29udHJvbGxlci5w
cm90b3R5cGUucHJvY2Vzc01vZGVsID0gZnVuY3Rpb24gKHNjZW5lLCBtZXNoZXMpIHsKKyAgICAg
ICAgdmFyIGxvYWRlZE1lc2hJbmZvID0gbnVsbDsKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG1l
c2ggdG8gY29udGFpbiB0aGUgZ2xURiBoaWVyYXJjaHkKKyAgICAgICAgdmFyIHBhcmVudE1lc2gg
PSBuZXcgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1lc2giXSh0
aGlzLmlkICsgIiAiICsgdGhpcy5oYW5kLCBzY2VuZSk7CisgICAgICAgIC8vIEZpbmQgdGhlIHJv
b3Qgbm9kZSBpbiB0aGUgbG9hZGVkIGdsVEYgc2NlbmUsIGFuZCBhdHRhY2ggaXQgYXMgYSBjaGls
ZCBvZiAncGFyZW50TWVzaCcKKyAgICAgICAgdmFyIGNoaWxkTWVzaCA9IG51bGw7CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbWVzaGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2
YXIgbWVzaCA9IG1lc2hlc1tpXTsKKyAgICAgICAgICAgIGlmICghbWVzaC5wYXJlbnQpIHsKKyAg
ICAgICAgICAgICAgICAvLyBFeGNsdWRlIGNvbnRyb2xsZXIgbWVzaGVzIGZyb20gcGlja2luZyBy
ZXN1bHRzCisgICAgICAgICAgICAgICAgbWVzaC5pc1BpY2thYmxlID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgLy8gSGFuZGxlIHJvb3Qgbm9kZSwgYXR0YWNoIHRvIHRoZSBuZXcgcGFyZW50TWVz
aAorICAgICAgICAgICAgICAgIGNoaWxkTWVzaCA9IG1lc2g7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoaWxkTWVzaCkgewor
ICAgICAgICAgICAgY2hpbGRNZXNoLnNldFBhcmVudChwYXJlbnRNZXNoKTsKKyAgICAgICAgICAg
IC8vIENyZWF0ZSBvdXIgbWVzaCBpbmZvLiBOb3RlIHRoYXQgdGhpcyBtZXRob2Qgd2lsbCBhbHdh
eXMgcmV0dXJuIG5vbi1udWxsLgorICAgICAgICAgICAgbG9hZGVkTWVzaEluZm8gPSB0aGlzLmNy
ZWF0ZU1lc2hJbmZvKHBhcmVudE1lc2gpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dl
ciJdLldhcm4oJ0NvdWxkIG5vdCBmaW5kIHJvb3Qgbm9kZSBpbiBtb2RlbCBmaWxlLicpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBsb2FkZWRNZXNoSW5mbzsKKyAgICB9OworICAgIFdpbmRv
d3NNb3Rpb25Db250cm9sbGVyLnByb3RvdHlwZS5jcmVhdGVNZXNoSW5mbyA9IGZ1bmN0aW9uIChy
b290Tm9kZSkgeworICAgICAgICB2YXIgbG9hZGVkTWVzaEluZm8gPSBuZXcgTG9hZGVkTWVzaElu
Zm8oKTsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIGxvYWRlZE1lc2hJbmZvLnJvb3ROb2RlID0g
cm9vdE5vZGU7CisgICAgICAgIC8vIFJlc2V0IHRoZSBjYWNoZXMKKyAgICAgICAgbG9hZGVkTWVz
aEluZm8uYnV0dG9uTWVzaGVzID0ge307CisgICAgICAgIGxvYWRlZE1lc2hJbmZvLmF4aXNNZXNo
ZXMgPSB7fTsKKyAgICAgICAgLy8gQnV0dG9uIE1lc2hlcworICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgdGhpcy5fbWFwcGluZy5idXR0b25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIg
YnV0dG9uTWVzaE5hbWUgPSB0aGlzLl9tYXBwaW5nLmJ1dHRvbk1lc2hOYW1lc1t0aGlzLl9tYXBw
aW5nLmJ1dHRvbnNbaV1dOworICAgICAgICAgICAgaWYgKCFidXR0b25NZXNoTmFtZSkgeworICAg
ICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJM
b2dnZXIiXS5Mb2coJ1NraXBwaW5nIHVua25vd24gYnV0dG9uIGF0IGluZGV4OiAnICsgaSArICcg
d2l0aCBtYXBwZWQgbmFtZTogJyArIHRoaXMuX21hcHBpbmcuYnV0dG9uc1tpXSk7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYnV0dG9u
TWVzaCA9IGdldENoaWxkQnlOYW1lKHJvb3ROb2RlLCBidXR0b25NZXNoTmFtZSk7CisgICAgICAg
ICAgICBpZiAoIWJ1dHRvbk1lc2gpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uV2FybignTWlzc2luZyBidXR0b24g
bWVzaCB3aXRoIG5hbWU6ICcgKyBidXR0b25NZXNoTmFtZSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYnV0dG9uTWVzaEluZm8gPSB7
CisgICAgICAgICAgICAgICAgaW5kZXg6IGksCisgICAgICAgICAgICAgICAgdmFsdWU6IGdldElt
bWVkaWF0ZUNoaWxkQnlOYW1lKGJ1dHRvbk1lc2gsICdWQUxVRScpLAorICAgICAgICAgICAgICAg
IHByZXNzZWQ6IGdldEltbWVkaWF0ZUNoaWxkQnlOYW1lKGJ1dHRvbk1lc2gsICdQUkVTU0VEJyks
CisgICAgICAgICAgICAgICAgdW5wcmVzc2VkOiBnZXRJbW1lZGlhdGVDaGlsZEJ5TmFtZShidXR0
b25NZXNoLCAnVU5QUkVTU0VEJykKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoYnV0
dG9uTWVzaEluZm8udmFsdWUgJiYgYnV0dG9uTWVzaEluZm8ucHJlc3NlZCAmJiBidXR0b25NZXNo
SW5mby51bnByZXNzZWQpIHsKKyAgICAgICAgICAgICAgICBsb2FkZWRNZXNoSW5mby5idXR0b25N
ZXNoZXNbdGhpcy5fbWFwcGluZy5idXR0b25zW2ldXSA9IGJ1dHRvbk1lc2hJbmZvOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlk
bid0IGZpbmQgdGhlIG1lc2gsIGl0IHNpbXBseSBtZWFucyB0aGlzIGJ1dHRvbiB3b24ndCBoYXZl
IHRyYW5zZm9ybXMgYXBwbGllZCBhcyBtYXBwZWQgYnV0dG9uIHZhbHVlIGNoYW5nZXMuCisgICAg
ICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxv
Z2dlciJdLldhcm4oJ01pc3NpbmcgYnV0dG9uIHN1Ym1lc2ggdW5kZXIgbWVzaCB3aXRoIG5hbWU6
ICcgKyBidXR0b25NZXNoTmFtZSArCisgICAgICAgICAgICAgICAgICAgICcoVkFMVUU6ICcgKyAh
IWJ1dHRvbk1lc2hJbmZvLnZhbHVlICsKKyAgICAgICAgICAgICAgICAgICAgJywgUFJFU1NFRDog
JyArICEhYnV0dG9uTWVzaEluZm8ucHJlc3NlZCArCisgICAgICAgICAgICAgICAgICAgICcsIFVO
UFJFU1NFRDonICsgISFidXR0b25NZXNoSW5mby51bnByZXNzZWQgKworICAgICAgICAgICAgICAg
ICAgICAnKScpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEF4aXMgTWVz
aGVzCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLl9tYXBwaW5nLmF4aXNNZXNoTmFtZXMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBheGlzTWVzaE5hbWUgPSB0aGlzLl9tYXBw
aW5nLmF4aXNNZXNoTmFtZXNbaV07CisgICAgICAgICAgICBpZiAoIWF4aXNNZXNoTmFtZSkgewor
ICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJMb2dnZXIiXS5Mb2coJ1NraXBwaW5nIHVua25vd24gYXhpcyBhdCBpbmRleDogJyArIGkpOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFy
IGF4aXNNZXNoID0gZ2V0Q2hpbGRCeU5hbWUocm9vdE5vZGUsIGF4aXNNZXNoTmFtZSk7CisgICAg
ICAgICAgICBpZiAoIWF4aXNNZXNoKSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4oJ01pc3NpbmcgYXhpcyBt
ZXNoIHdpdGggbmFtZTogJyArIGF4aXNNZXNoTmFtZSk7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYXhpc01lc2hJbmZvID0geworICAg
ICAgICAgICAgICAgIGluZGV4OiBpLAorICAgICAgICAgICAgICAgIHZhbHVlOiBnZXRJbW1lZGlh
dGVDaGlsZEJ5TmFtZShheGlzTWVzaCwgJ1ZBTFVFJyksCisgICAgICAgICAgICAgICAgbWluOiBn
ZXRJbW1lZGlhdGVDaGlsZEJ5TmFtZShheGlzTWVzaCwgJ01JTicpLAorICAgICAgICAgICAgICAg
IG1heDogZ2V0SW1tZWRpYXRlQ2hpbGRCeU5hbWUoYXhpc01lc2gsICdNQVgnKQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGlmIChheGlzTWVzaEluZm8udmFsdWUgJiYgYXhpc01lc2hJbmZv
Lm1pbiAmJiBheGlzTWVzaEluZm8ubWF4KSB7CisgICAgICAgICAgICAgICAgbG9hZGVkTWVzaElu
Zm8uYXhpc01lc2hlc1tpXSA9IGF4aXNNZXNoSW5mbzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIHRoZSBtZXNo
LCBpdCBzaW1wbHkgbWVhbnMgdGhpdCBheGlzIHdvbid0IGhhdmUgdHJhbnNmb3JtcyBhcHBsaWVk
IGFzIG1hcHBlZCBheGlzIHZhbHVlcyBjaGFuZ2UuCisgICAgICAgICAgICAgICAgX01pc2NfbG9n
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4oJ01pc3Npbmcg
YXhpcyBzdWJtZXNoIHVuZGVyIG1lc2ggd2l0aCBuYW1lOiAnICsgYXhpc01lc2hOYW1lICsKKyAg
ICAgICAgICAgICAgICAgICAgJyhWQUxVRTogJyArICEhYXhpc01lc2hJbmZvLnZhbHVlICsKKyAg
ICAgICAgICAgICAgICAgICAgJywgTUlOOiAnICsgISFheGlzTWVzaEluZm8ubWluICsKKyAgICAg
ICAgICAgICAgICAgICAgJywgTUFYOicgKyAhIWF4aXNNZXNoSW5mby5tYXggKworICAgICAgICAg
ICAgICAgICAgICAnKScpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFBv
aW50aW5nIFJheQorICAgICAgICBsb2FkZWRNZXNoSW5mby5wb2ludGluZ1Bvc2VOb2RlID0gZ2V0
Q2hpbGRCeU5hbWUocm9vdE5vZGUsIHRoaXMuX21hcHBpbmcucG9pbnRpbmdQb3NlTWVzaE5hbWUp
OworICAgICAgICBpZiAoIWxvYWRlZE1lc2hJbmZvLnBvaW50aW5nUG9zZU5vZGUpIHsKKyAgICAg
ICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIi
XS5XYXJuKCdNaXNzaW5nIHBvaW50aW5nIHBvc2UgbWVzaCB3aXRoIG5hbWU6ICcgKyB0aGlzLl9t
YXBwaW5nLnBvaW50aW5nUG9zZU1lc2hOYW1lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHRoaXMuX3BvaW50aW5nUG9zZU5vZGUgPSBsb2FkZWRNZXNoSW5mby5wb2lu
dGluZ1Bvc2VOb2RlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsb2FkZWRNZXNoSW5mbzsK
KyAgICAgICAgLy8gTG9vayB0aHJvdWdoIGFsbCBjaGlsZHJlbiByZWN1cnNpdmVseS4gVGhpcyB3
aWxsIHJldHVybiBudWxsIGlmIG5vIG1lc2ggZXhpc3RzIHdpdGggdGhlIGdpdmVuIG5hbWUuCisg
ICAgICAgIGZ1bmN0aW9uIGdldENoaWxkQnlOYW1lKG5vZGUsIG5hbWUpIHsKKyAgICAgICAgICAg
IHJldHVybiBub2RlLmdldENoaWxkcmVuKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuLm5hbWUgPT09
IG5hbWU7IH0sIGZhbHNlKVswXTsKKyAgICAgICAgfQorICAgICAgICAvLyBMb29rIHRocm91Z2gg
b25seSBpbW1lZGlhdGUgY2hpbGRyZW4uIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiBubyBtZXNo
IGV4aXN0cyB3aXRoIHRoZSBnaXZlbiBuYW1lLgorICAgICAgICBmdW5jdGlvbiBnZXRJbW1lZGlh
dGVDaGlsZEJ5TmFtZShub2RlLCBuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5nZXRD
aGlsZHJlbihmdW5jdGlvbiAobikgeyByZXR1cm4gbi5uYW1lID09IG5hbWU7IH0sIHRydWUpWzBd
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByYXkgb2YgdGhl
IGNvbnRyb2xsZXIgaW4gdGhlIGRpcmVjdGlvbiB0aGUgY29udHJvbGxlciBpcyBwb2ludGluZwor
ICAgICAqIEBwYXJhbSBsZW5ndGggdGhlIGxlbmd0aCB0aGUgcmVzdWx0aW5nIHJheSBzaG91bGQg
YmUKKyAgICAgKiBAcmV0dXJucyBhIHJheSBpbiB0aGUgZGlyZWN0aW9uIHRoZSBjb250cm9sbGVy
IGlzIHBvaW50aW5nCisgICAgICovCisgICAgV2luZG93c01vdGlvbkNvbnRyb2xsZXIucHJvdG90
eXBlLmdldEZvcndhcmRSYXkgPSBmdW5jdGlvbiAobGVuZ3RoKSB7CisgICAgICAgIGlmIChsZW5n
dGggPT09IHZvaWQgMCkgeyBsZW5ndGggPSAxMDA7IH0KKyAgICAgICAgaWYgKCEodGhpcy5fbG9h
ZGVkTWVzaEluZm8gJiYgdGhpcy5fbG9hZGVkTWVzaEluZm8ucG9pbnRpbmdQb3NlTm9kZSkpIHsK
KyAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldEZvcndhcmRSYXkuY2FsbCh0
aGlzLCBsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIHZhciBtID0gdGhpcy5fbG9hZGVkTWVz
aEluZm8ucG9pbnRpbmdQb3NlTm9kZS5nZXRXb3JsZE1hdHJpeCgpOworICAgICAgICB2YXIgb3Jp
Z2luID0gbS5nZXRUcmFuc2xhdGlvbigpOworICAgICAgICB2YXIgZm9yd2FyZCA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAs
IDAsIC0xKTsKKyAgICAgICAgdmFyIGZvcndhcmRXb3JsZCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKGZv
cndhcmQsIG0pOworICAgICAgICB2YXIgZGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5Ob3JtYWxpemUoZm9yd2FyZFdv
cmxkKTsKKyAgICAgICAgcmV0dXJuIG5ldyBfQ3VsbGluZ19yYXlfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siUmF5Il0ob3JpZ2luLCBkaXJlY3Rpb24sIGxlbmd0aCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAqIERpc3Bvc2VzIG9mIHRoZSBjb250cm9sbGVyCisgICAgKi8KKyAgICBXaW5k
b3dzTW90aW9uQ29udHJvbGxlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7CisgICAgICAgIHRoaXMu
b25UcmFja3BhZENoYW5nZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBUaGUgYmFzZSB1cmwgdXNlZCB0byBsb2FkIHRoZSBsZWZ0IGFuZCByaWdodCBjb250cm9s
bGVyIG1vZGVscworICAgICAqLworICAgIFdpbmRvd3NNb3Rpb25Db250cm9sbGVyLk1PREVMX0JB
U0VfVVJMID0gJ2h0dHBzOi8vY29udHJvbGxlcnMuYmFieWxvbmpzLmNvbS9taWNyb3NvZnQvJzsK
KyAgICAvKioKKyAgICAgKiBUaGUgbmFtZSBvZiB0aGUgbGVmdCBjb250cm9sbGVyIG1vZGVsIGZp
bGUKKyAgICAgKi8KKyAgICBXaW5kb3dzTW90aW9uQ29udHJvbGxlci5NT0RFTF9MRUZUX0ZJTEVO
QU1FID0gJ2xlZnQuZ2xiJzsKKyAgICAvKioKKyAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcmlnaHQg
Y29udHJvbGxlciBtb2RlbCBmaWxlCisgICAgICovCisgICAgV2luZG93c01vdGlvbkNvbnRyb2xs
ZXIuTU9ERUxfUklHSFRfRklMRU5BTUUgPSAncmlnaHQuZ2xiJzsKKyAgICAvKioKKyAgICAgKiBU
aGUgY29udHJvbGxlciBuYW1lIHByZWZpeCBmb3IgdGhpcyBjb250cm9sbGVyIHR5cGUKKyAgICAg
Ki8KKyAgICBXaW5kb3dzTW90aW9uQ29udHJvbGxlci5HQU1FUEFEX0lEX1BSRUZJWCA9ICdTcGF0
aWFsIENvbnRyb2xsZXIgKFNwYXRpYWwgSW50ZXJhY3Rpb24gU291cmNlKSAnOworICAgIC8qKgor
ICAgICAqIFRoZSBjb250cm9sbGVyIGlkIHBhdHRlcm4gZm9yIHRoaXMgY29udHJvbGxlciB0eXBl
CisgICAgICovCisgICAgV2luZG93c01vdGlvbkNvbnRyb2xsZXIuR0FNRVBBRF9JRF9QQVRURVJO
ID0gLyhbMC05YS16QS1aXSstWzAtOWEtekEtWl0rKSQvOworICAgIHJldHVybiBXaW5kb3dzTW90
aW9uQ29udHJvbGxlcjsKK30oX3dlYlZSQ29udHJvbGxlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJXZWJWUkNvbnRyb2xsZXIiXSkpOworCitfcG9zZUVuYWJsZWRDb250cm9sbGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlciJd
Ll9Db250cm9sbGVyRmFjdG9yaWVzLnB1c2goeworICAgIGNhbkNyZWF0ZTogZnVuY3Rpb24gKGdh
bWVwYWRJbmZvKSB7CisgICAgICAgIHJldHVybiBnYW1lcGFkSW5mby5pZC5pbmRleE9mKFdpbmRv
d3NNb3Rpb25Db250cm9sbGVyLkdBTUVQQURfSURfUFJFRklYKSA9PT0gMDsKKyAgICB9LAorICAg
IGNyZWF0ZTogZnVuY3Rpb24gKGdhbWVwYWRJbmZvKSB7CisgICAgICAgIHJldHVybiBuZXcgV2lu
ZG93c01vdGlvbkNvbnRyb2xsZXIoZ2FtZXBhZEluZm8pOworICAgIH0KK30pOworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9HYW1lcGFkcy9kdWFsU2hvY2tHYW1lcGFkLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HYW1lcGFkcy9k
dWFsU2hvY2tHYW1lcGFkLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IER1YWxTaG9ja0J1dHRvbiwgRHVhbFNo
b2NrRHBhZCwgRHVhbFNob2NrUGFkICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkR1YWxTaG9ja0J1dHRvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRHVhbFNob2NrQnV0dG9u
OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkR1YWxTaG9ja0RwYWQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIER1YWxTaG9ja0RwYWQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRHVhbFNob2NrUGFkIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBEdWFsU2hvY2tQYWQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2
YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfZ2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9nYW1lcGFkICovICIuL0dhbWVwYWRzL2dhbWVwYWQudHMiKTsKKworCisKKy8q
KgorICogRGVmaW5lcyBzdXBwb3J0ZWQgYnV0dG9ucyBmb3IgRHVhbFNob2NrIGNvbXBhdGlibGUg
Z2FtZXBhZHMKKyAqLwordmFyIER1YWxTaG9ja0J1dHRvbjsKKyhmdW5jdGlvbiAoRHVhbFNob2Nr
QnV0dG9uKSB7CisgICAgLyoqIENyb3NzICovCisgICAgRHVhbFNob2NrQnV0dG9uW0R1YWxTaG9j
a0J1dHRvblsiQ3Jvc3MiXSA9IDBdID0gIkNyb3NzIjsKKyAgICAvKiogQ2lyY2xlICovCisgICAg
RHVhbFNob2NrQnV0dG9uW0R1YWxTaG9ja0J1dHRvblsiQ2lyY2xlIl0gPSAxXSA9ICJDaXJjbGUi
OworICAgIC8qKiBTcXVhcmUgKi8KKyAgICBEdWFsU2hvY2tCdXR0b25bRHVhbFNob2NrQnV0dG9u
WyJTcXVhcmUiXSA9IDJdID0gIlNxdWFyZSI7CisgICAgLyoqIFRyaWFuZ2xlICovCisgICAgRHVh
bFNob2NrQnV0dG9uW0R1YWxTaG9ja0J1dHRvblsiVHJpYW5nbGUiXSA9IDNdID0gIlRyaWFuZ2xl
IjsKKyAgICAvKiogT3B0aW9ucyAqLworICAgIER1YWxTaG9ja0J1dHRvbltEdWFsU2hvY2tCdXR0
b25bIk9wdGlvbnMiXSA9IDRdID0gIk9wdGlvbnMiOworICAgIC8qKiBTaGFyZSAqLworICAgIER1
YWxTaG9ja0J1dHRvbltEdWFsU2hvY2tCdXR0b25bIlNoYXJlIl0gPSA1XSA9ICJTaGFyZSI7Cisg
ICAgLyoqIEwxICovCisgICAgRHVhbFNob2NrQnV0dG9uW0R1YWxTaG9ja0J1dHRvblsiTDEiXSA9
IDZdID0gIkwxIjsKKyAgICAvKiogUjEgKi8KKyAgICBEdWFsU2hvY2tCdXR0b25bRHVhbFNob2Nr
QnV0dG9uWyJSMSJdID0gN10gPSAiUjEiOworICAgIC8qKiBMZWZ0IHN0aWNrICovCisgICAgRHVh
bFNob2NrQnV0dG9uW0R1YWxTaG9ja0J1dHRvblsiTGVmdFN0aWNrIl0gPSA4XSA9ICJMZWZ0U3Rp
Y2siOworICAgIC8qKiBSaWdodCBzdGljayAqLworICAgIER1YWxTaG9ja0J1dHRvbltEdWFsU2hv
Y2tCdXR0b25bIlJpZ2h0U3RpY2siXSA9IDldID0gIlJpZ2h0U3RpY2siOworfSkoRHVhbFNob2Nr
QnV0dG9uIHx8IChEdWFsU2hvY2tCdXR0b24gPSB7fSkpOworLyoqIERlZmluZXMgdmFsdWVzIGZv
ciBEdWFsU2hvY2sgRFBhZCAgKi8KK3ZhciBEdWFsU2hvY2tEcGFkOworKGZ1bmN0aW9uIChEdWFs
U2hvY2tEcGFkKSB7CisgICAgLyoqIFVwICovCisgICAgRHVhbFNob2NrRHBhZFtEdWFsU2hvY2tE
cGFkWyJVcCJdID0gMF0gPSAiVXAiOworICAgIC8qKiBEb3duICovCisgICAgRHVhbFNob2NrRHBh
ZFtEdWFsU2hvY2tEcGFkWyJEb3duIl0gPSAxXSA9ICJEb3duIjsKKyAgICAvKiogTGVmdCAqLwor
ICAgIER1YWxTaG9ja0RwYWRbRHVhbFNob2NrRHBhZFsiTGVmdCJdID0gMl0gPSAiTGVmdCI7Cisg
ICAgLyoqIFJpZ2h0ICovCisgICAgRHVhbFNob2NrRHBhZFtEdWFsU2hvY2tEcGFkWyJSaWdodCJd
ID0gM10gPSAiUmlnaHQiOworfSkoRHVhbFNob2NrRHBhZCB8fCAoRHVhbFNob2NrRHBhZCA9IHt9
KSk7CisvKioKKyAqIERlZmluZXMgYSBEdWFsU2hvY2sgZ2FtZXBhZAorICovCit2YXIgRHVhbFNo
b2NrUGFkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKER1YWxTaG9ja1BhZCwgX3N1
cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IER1YWxTaG9jayBnYW1lcGFkIG9i
amVjdAorICAgICAqIEBwYXJhbSBpZCBkZWZpbmVzIHRoZSBpZCBvZiB0aGlzIGdhbWVwYWQKKyAg
ICAgKiBAcGFyYW0gaW5kZXggZGVmaW5lcyBpdHMgaW5kZXgKKyAgICAgKiBAcGFyYW0gZ2FtZXBh
ZCBkZWZpbmVzIHRoZSBpbnRlcm5hbCBIVE1MIGdhbWVwYWQgb2JqZWN0CisgICAgICovCisgICAg
ZnVuY3Rpb24gRHVhbFNob2NrUGFkKGlkLCBpbmRleCwgZ2FtZXBhZCkgeworICAgICAgICB2YXIg
X3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBpZC5yZXBsYWNlKCJTVEFOREFSRCBHQU1FUEFEIiwg
IlNPTlkgUExBWVNUQVRJT04gRFVBTFNIT0NLIiksIGluZGV4LCBnYW1lcGFkLCAwLCAxLCAyLCAz
KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fbGVmdFRyaWdnZXIgPSAwOworICAgICAgICBfdGhp
cy5fcmlnaHRUcmlnZ2VyID0gMDsKKyAgICAgICAgLyoqIE9ic2VydmFibGUgcmFpc2VkIHdoZW4g
YSBidXR0b24gaXMgcHJlc3NlZCAqLworICAgICAgICBfdGhpcy5vbkJ1dHRvbkRvd25PYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKiBPYnNlcnZhYmxlIHJhaXNlZCB3aGVuIGEgYnV0
dG9uIGlzIHJlbGVhc2VkICovCisgICAgICAgIF90aGlzLm9uQnV0dG9uVXBPYnNlcnZhYmxlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgICAgIC8qKiBPYnNlcnZhYmxlIHJhaXNlZCB3aGVuIGEgcGFkIGlzIHBy
ZXNzZWQgKi8KKyAgICAgICAgX3RoaXMub25QYWREb3duT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOwor
ICAgICAgICAvKiogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiBhIHBhZCBpcyByZWxlYXNlZCAqLwor
ICAgICAgICBfdGhpcy5vblBhZFVwT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhp
cy5fYnV0dG9uQ3Jvc3MgPSAwOworICAgICAgICBfdGhpcy5fYnV0dG9uQ2lyY2xlID0gMDsKKyAg
ICAgICAgX3RoaXMuX2J1dHRvblNxdWFyZSA9IDA7CisgICAgICAgIF90aGlzLl9idXR0b25Ucmlh
bmdsZSA9IDA7CisgICAgICAgIF90aGlzLl9idXR0b25TaGFyZSA9IDA7CisgICAgICAgIF90aGlz
Ll9idXR0b25PcHRpb25zID0gMDsKKyAgICAgICAgX3RoaXMuX2J1dHRvbkwxID0gMDsKKyAgICAg
ICAgX3RoaXMuX2J1dHRvblIxID0gMDsKKyAgICAgICAgX3RoaXMuX2J1dHRvbkxlZnRTdGljayA9
IDA7CisgICAgICAgIF90aGlzLl9idXR0b25SaWdodFN0aWNrID0gMDsKKyAgICAgICAgX3RoaXMu
X2RQYWRVcCA9IDA7CisgICAgICAgIF90aGlzLl9kUGFkRG93biA9IDA7CisgICAgICAgIF90aGlz
Ll9kUGFkTGVmdCA9IDA7CisgICAgICAgIF90aGlzLl9kUGFkUmlnaHQgPSAwOworICAgICAgICBf
dGhpcy50eXBlID0gX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR2FtZXBh
ZCJdLkRVQUxTSE9DSzsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gbGVmdCB0cmlnZ2VyIGlzIHBy
ZXNzZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdXNl
CisgICAgICovCisgICAgRHVhbFNob2NrUGFkLnByb3RvdHlwZS5vbmxlZnR0cmlnZ2VyY2hhbmdl
ZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9vbmxlZnR0cmlnZ2VyY2hh
bmdlZCA9IGNhbGxiYWNrOworICAgIH07CisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgY2Fs
bGJhY2sgdG8gY2FsbCB3aGVuIHJpZ2h0IHRyaWdnZXIgaXMgcHJlc3NlZAorICAgICAqIEBwYXJh
bSBjYWxsYmFjayBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byB1c2UKKyAgICAgKi8KKyAgICBEdWFs
U2hvY2tQYWQucHJvdG90eXBlLm9ucmlnaHR0cmlnZ2VyY2hhbmdlZCA9IGZ1bmN0aW9uIChjYWxs
YmFjaykgeworICAgICAgICB0aGlzLl9vbnJpZ2h0dHJpZ2dlcmNoYW5nZWQgPSBjYWxsYmFjazsK
KyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hvY2tQYWQucHJvdG90eXBl
LCAibGVmdFRyaWdnZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBsZWZ0
IHRyaWdnZXIgdmFsdWUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRUcmlnZ2VyOworICAgICAgICB9LAorICAgICAg
ICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgbGVmdCB0cmlnZ2VyIHZhbHVlCisgICAgICAgICAq
LworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuX29ubGVmdHRyaWdnZXJjaGFuZ2VkICYmIHRoaXMuX2xlZnRUcmlnZ2VyICE9PSBuZXdWYWx1
ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX29ubGVmdHRyaWdnZXJjaGFuZ2VkKG5ld1ZhbHVl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2xlZnRUcmlnZ2VyID0gbmV3VmFs
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hv
Y2tQYWQucHJvdG90eXBlLCAicmlnaHRUcmlnZ2VyIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgcmlnaHQgdHJpZ2dlciB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmlnaHRUcmlnZ2VyOwor
ICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgcmlnaHQgdHJpZ2dl
ciB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl9vbnJpZ2h0dHJpZ2dlcmNoYW5nZWQgJiYgdGhpcy5fcmln
aHRUcmlnZ2VyICE9PSBuZXdWYWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX29ucmlnaHR0
cmlnZ2VyY2hhbmdlZChuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9yaWdodFRyaWdnZXIgPSBuZXdWYWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisg
ICAgICogRGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIGEgYnV0dG9uIGlzIHByZXNz
ZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdXNlCisg
ICAgICovCisgICAgRHVhbFNob2NrUGFkLnByb3RvdHlwZS5vbmJ1dHRvbmRvd24gPSBmdW5jdGlv
biAoY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5fb25idXR0b25kb3duID0gY2FsbGJhY2s7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4g
YSBidXR0b24gaXMgcmVsZWFzZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgZGVmaW5lcyB0aGUg
Y2FsbGJhY2sgdG8gdXNlCisgICAgICovCisgICAgRHVhbFNob2NrUGFkLnByb3RvdHlwZS5vbmJ1
dHRvbnVwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgIHRoaXMuX29uYnV0dG9udXAg
PSBjYWxsYmFjazsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGNhbGxiYWNr
IHRvIGNhbGwgd2hlbiBhIHBhZCBpcyBwcmVzc2VkCisgICAgICogQHBhcmFtIGNhbGxiYWNrIGRl
ZmluZXMgdGhlIGNhbGxiYWNrIHRvIHVzZQorICAgICAqLworICAgIER1YWxTaG9ja1BhZC5wcm90
b3R5cGUub25kcGFkZG93biA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9v
bmRwYWRkb3duID0gY2FsbGJhY2s7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRo
ZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gYSBwYWQgaXMgcmVsZWFzZWQKKyAgICAgKiBAcGFyYW0g
Y2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdXNlCisgICAgICovCisgICAgRHVhbFNo
b2NrUGFkLnByb3RvdHlwZS5vbmRwYWR1cCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAg
ICB0aGlzLl9vbmRwYWR1cCA9IGNhbGxiYWNrOworICAgIH07CisgICAgRHVhbFNob2NrUGFkLnBy
b3RvdHlwZS5fc2V0QnV0dG9uVmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUsIGN1cnJlbnRWYWx1
ZSwgYnV0dG9uVHlwZSkgeworICAgICAgICBpZiAobmV3VmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkg
eworICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSAxKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRoaXMuX29uYnV0dG9uZG93bikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbmJ1dHRv
bmRvd24oYnV0dG9uVHlwZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRo
aXMub25CdXR0b25Eb3duT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoYnV0dG9uVHlwZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IDApIHsKKyAgICAgICAg
ICAgICAgICBpZiAodGhpcy5fb25idXR0b251cCkgeworICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9vbmJ1dHRvbnVwKGJ1dHRvblR5cGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB0aGlzLm9uQnV0dG9uVXBPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhidXR0b25UeXBl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3VmFsdWU7Cisg
ICAgfTsKKyAgICBEdWFsU2hvY2tQYWQucHJvdG90eXBlLl9zZXREUGFkVmFsdWUgPSBmdW5jdGlv
biAobmV3VmFsdWUsIGN1cnJlbnRWYWx1ZSwgYnV0dG9uVHlwZSkgeworICAgICAgICBpZiAobmV3
VmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkgeworICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSAx
KSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29uZHBhZGRvd24pIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fb25kcGFkZG93bihidXR0b25UeXBlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdGhpcy5vblBhZERvd25PYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyhidXR0b25UeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9
PT0gMCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vbmRwYWR1cCkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9vbmRwYWR1cChidXR0b25UeXBlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdGhpcy5vblBhZFVwT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMo
YnV0dG9uVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5l
d1ZhbHVlOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KER1YWxTaG9ja1BhZC5w
cm90b3R5cGUsICJidXR0b25Dcm9zcyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
dGhlIHZhbHVlIG9mIHRoZSBgQ3Jvc3NgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uQ3Jvc3M7Cisg
ICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUg
YENyb3NzYCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9idXR0b25Dcm9zcyA9IHRoaXMuX3NldEJ1dHRvblZhbHVl
KHZhbHVlLCB0aGlzLl9idXR0b25Dcm9zcywgRHVhbFNob2NrQnV0dG9uLkNyb3NzKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KER1YWxTaG9ja1BhZC5wcm90
b3R5cGUsICJidXR0b25DaXJjbGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSB2YWx1ZSBvZiB0aGUgYENpcmNsZWAgYnV0dG9uCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9idXR0b25DaXJjbGU7Cisg
ICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUg
YENpcmNsZWAgYnV0dG9uCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdGhpcy5fYnV0dG9uQ2lyY2xlID0gdGhpcy5fc2V0QnV0dG9uVmFs
dWUodmFsdWUsIHRoaXMuX2J1dHRvbkNpcmNsZSwgRHVhbFNob2NrQnV0dG9uLkNpcmNsZSk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hvY2tQYWQu
cHJvdG90eXBlLCAiYnV0dG9uU3F1YXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgdmFsdWUgb2YgdGhlIGBTcXVhcmVgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uU3F1YXJl
OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2Yg
dGhlIGBTcXVhcmVgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvblNxdWFyZSA9IHRoaXMuX3NldEJ1dHRv
blZhbHVlKHZhbHVlLCB0aGlzLl9idXR0b25TcXVhcmUsIER1YWxTaG9ja0J1dHRvbi5TcXVhcmUp
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRHVhbFNob2Nr
UGFkLnByb3RvdHlwZSwgImJ1dHRvblRyaWFuZ2xlIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBUcmlhbmdsZWAgYnV0dG9uCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9idXR0
b25UcmlhbmdsZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhl
IHZhbHVlIG9mIHRoZSBgVHJpYW5nbGVgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvblRyaWFuZ2xlID0g
dGhpcy5fc2V0QnV0dG9uVmFsdWUodmFsdWUsIHRoaXMuX2J1dHRvblRyaWFuZ2xlLCBEdWFsU2hv
Y2tCdXR0b24uVHJpYW5nbGUpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoRHVhbFNob2NrUGFkLnByb3RvdHlwZSwgImJ1dHRvbk9wdGlvbnMiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYE9wdGlvbnNgIGJ1dHRv
bgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fYnV0dG9uT3B0aW9uczsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBgT3B0aW9uc2AgYnV0dG9uCisgICAgICAgICAq
LworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYnV0
dG9uT3B0aW9ucyA9IHRoaXMuX3NldEJ1dHRvblZhbHVlKHZhbHVlLCB0aGlzLl9idXR0b25PcHRp
b25zLCBEdWFsU2hvY2tCdXR0b24uT3B0aW9ucyk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hvY2tQYWQucHJvdG90eXBlLCAiYnV0dG9uU2hhcmUi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYFNoYXJl
YCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblNoYXJlOworICAgICAgICB9LAorICAgICAgICAvKioK
KyAgICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBTaGFyZWAgYnV0dG9uCisgICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5f
YnV0dG9uU2hhcmUgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uU2hh
cmUsIER1YWxTaG9ja0J1dHRvbi5TaGFyZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hvY2tQYWQucHJvdG90eXBlLCAiYnV0dG9uTDEiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYEwxYCBidXR0b24K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2J1dHRvbkwxOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICog
U2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBMMWAgYnV0dG9uCisgICAgICAgICAqLworICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYnV0dG9uTDEgPSB0aGlz
Ll9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uTDEsIER1YWxTaG9ja0J1dHRvbi5M
MSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hv
Y2tQYWQucHJvdG90eXBlLCAiYnV0dG9uUjEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYFIxYCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblIxOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBS
MWAgYnV0dG9uCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgdGhpcy5fYnV0dG9uUjEgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwg
dGhpcy5fYnV0dG9uUjEsIER1YWxTaG9ja0J1dHRvbi5SMSk7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hvY2tQYWQucHJvdG90eXBlLCAiYnV0dG9u
TGVmdFN0aWNrIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdmFsdWUgb2Yg
dGhlIExlZnQgam95c3RpY2sKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvbkxlZnRTdGljazsKKyAgICAgICAgfSwK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBMZWZ0IGpveXN0
aWNrCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgdGhpcy5fYnV0dG9uTGVmdFN0aWNrID0gdGhpcy5fc2V0QnV0dG9uVmFsdWUodmFsdWUs
IHRoaXMuX2J1dHRvbkxlZnRTdGljaywgRHVhbFNob2NrQnV0dG9uLkxlZnRTdGljayk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdWFsU2hvY2tQYWQucHJv
dG90eXBlLCAiYnV0dG9uUmlnaHRTdGljayIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIHZhbHVlIG9mIHRoZSBSaWdodCBqb3lzdGljaworICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uUmlnaHRT
dGljazsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHZhbHVl
IG9mIHRoZSBSaWdodCBqb3lzdGljaworICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvblJpZ2h0U3RpY2sgPSB0aGlzLl9z
ZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uUmlnaHRTdGljaywgRHVhbFNob2NrQnV0
dG9uLlJpZ2h0U3RpY2spOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoRHVhbFNob2NrUGFkLnByb3RvdHlwZSwgImRQYWRVcCIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIHZhbHVlIG9mIEQtcGFkIHVwCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kUGFkVXA7Cisg
ICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBELXBh
ZCB1cAorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2RQYWRVcCA9IHRoaXMuX3NldERQYWRWYWx1ZSh2YWx1ZSwgdGhpcy5fZFBh
ZFVwLCBEdWFsU2hvY2tEcGFkLlVwKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KER1YWxTaG9ja1BhZC5wcm90b3R5cGUsICJkUGFkRG93biIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHZhbHVlIG9mIEQtcGFkIGRvd24KKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2RQYWREb3duOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUg
dmFsdWUgb2YgRC1wYWQgZG93bgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2RQYWREb3duID0gdGhpcy5fc2V0RFBhZFZhbHVl
KHZhbHVlLCB0aGlzLl9kUGFkRG93biwgRHVhbFNob2NrRHBhZC5Eb3duKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KER1YWxTaG9ja1BhZC5wcm90b3R5cGUs
ICJkUGFkTGVmdCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHZhbHVlIG9m
IEQtcGFkIGxlZnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2RQYWRMZWZ0OworICAgICAgICB9LAorICAgICAgICAvKioK
KyAgICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgRC1wYWQgbGVmdAorICAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2RQYWRMZWZ0
ID0gdGhpcy5fc2V0RFBhZFZhbHVlKHZhbHVlLCB0aGlzLl9kUGFkTGVmdCwgRHVhbFNob2NrRHBh
ZC5MZWZ0KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KER1
YWxTaG9ja1BhZC5wcm90b3R5cGUsICJkUGFkUmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiBELXBhZCByaWdodAorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZFBhZFJpZ2h0Owor
ICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgRC1w
YWQgcmlnaHQKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9kUGFkUmlnaHQgPSB0aGlzLl9zZXREUGFkVmFsdWUodmFsdWUsIHRo
aXMuX2RQYWRSaWdodCwgRHVhbFNob2NrRHBhZC5SaWdodCk7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIC8qKgorICAgICAqIEZvcmNlIHRoZSBnYW1lcGFkIHRvIHN5bmNocm9uaXplIHdpdGggZGV2
aWNlIHZhbHVlcworICAgICAqLworICAgIER1YWxTaG9ja1BhZC5wcm90b3R5cGUudXBkYXRlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVwZGF0ZS5jYWxsKHRoaXMp
OworICAgICAgICB0aGlzLmJ1dHRvbkNyb3NzID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25z
WzBdLnZhbHVlOworICAgICAgICB0aGlzLmJ1dHRvbkNpcmNsZSA9IHRoaXMuYnJvd3NlckdhbWVw
YWQuYnV0dG9uc1sxXS52YWx1ZTsKKyAgICAgICAgdGhpcy5idXR0b25TcXVhcmUgPSB0aGlzLmJy
b3dzZXJHYW1lcGFkLmJ1dHRvbnNbMl0udmFsdWU7CisgICAgICAgIHRoaXMuYnV0dG9uVHJpYW5n
bGUgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbM10udmFsdWU7CisgICAgICAgIHRoaXMu
YnV0dG9uTDEgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbNF0udmFsdWU7CisgICAgICAg
IHRoaXMuYnV0dG9uUjEgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbNV0udmFsdWU7Cisg
ICAgICAgIHRoaXMubGVmdFRyaWdnZXIgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbNl0u
dmFsdWU7CisgICAgICAgIHRoaXMucmlnaHRUcmlnZ2VyID0gdGhpcy5icm93c2VyR2FtZXBhZC5i
dXR0b25zWzddLnZhbHVlOworICAgICAgICB0aGlzLmJ1dHRvblNoYXJlID0gdGhpcy5icm93c2Vy
R2FtZXBhZC5idXR0b25zWzhdLnZhbHVlOworICAgICAgICB0aGlzLmJ1dHRvbk9wdGlvbnMgPSB0
aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbOV0udmFsdWU7CisgICAgICAgIHRoaXMuYnV0dG9u
TGVmdFN0aWNrID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzEwXS52YWx1ZTsKKyAgICAg
ICAgdGhpcy5idXR0b25SaWdodFN0aWNrID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzEx
XS52YWx1ZTsKKyAgICAgICAgdGhpcy5kUGFkVXAgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRv
bnNbMTJdLnZhbHVlOworICAgICAgICB0aGlzLmRQYWREb3duID0gdGhpcy5icm93c2VyR2FtZXBh
ZC5idXR0b25zWzEzXS52YWx1ZTsKKyAgICAgICAgdGhpcy5kUGFkTGVmdCA9IHRoaXMuYnJvd3Nl
ckdhbWVwYWQuYnV0dG9uc1sxNF0udmFsdWU7CisgICAgICAgIHRoaXMuZFBhZFJpZ2h0ID0gdGhp
cy5icm93c2VyR2FtZXBhZC5idXR0b25zWzE1XS52YWx1ZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIERpc3Bvc2VzIHRoZSBnYW1lcGFkCisgICAgICovCisgICAgRHVhbFNob2NrUGFkLnByb3Rv
dHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRp
c3Bvc2UuY2FsbCh0aGlzKTsKKyAgICAgICAgdGhpcy5vbkJ1dHRvbkRvd25PYnNlcnZhYmxlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMub25CdXR0b25VcE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAg
ICAgdGhpcy5vblBhZERvd25PYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25QYWRV
cE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICB9OworICAgIHJldHVybiBEdWFsU2hvY2tQYWQ7Cit9
KF9nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdhbWVwYWQiXSkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL0dhbWVwYWRzL2dhbWVwYWQudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dhbWVwYWRzL2dhbWVwYWQudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogU3RpY2tWYWx1ZXMsIEdhbWVwYWQsIEdlbmVyaWNQYWQgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU3RpY2tWYWx1ZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN0
aWNrVmFsdWVzOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdhbWVwYWQiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIEdhbWVwYWQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2VuZXJpY1BhZCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gR2VuZXJpY1BhZDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICov
ICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworCisKKy8qKgorICogUmVwcmVzZW50cyBhIGdhbWVw
YWQgY29udHJvbCBzdGljayBwb3NpdGlvbgorICovCit2YXIgU3RpY2tWYWx1ZXMgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIGdh
bWVwYWQgeCBhbmQgeSBjb250cm9sIHN0aWNrIHZhbHVlcworICAgICAqIEBwYXJhbSB4IFRoZSB4
IGNvbXBvbmVudCBvZiB0aGUgZ2FtZXBhZCBjb250cm9sIHN0aWNrIHZhbHVlCisgICAgICogQHBh
cmFtIHkgVGhlIHkgY29tcG9uZW50IG9mIHRoZSBnYW1lcGFkIGNvbnRyb2wgc3RpY2sgdmFsdWUK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdGlja1ZhbHVlcygKKyAgICAvKioKKyAgICAgKiBUaGUg
eCBjb21wb25lbnQgb2YgdGhlIGNvbnRyb2wgc3RpY2sKKyAgICAgKi8KKyAgICB4LCAKKyAgICAv
KioKKyAgICAgKiBUaGUgeSBjb21wb25lbnQgb2YgdGhlIGNvbnRyb2wgc3RpY2sKKyAgICAgKi8K
KyAgICB5KSB7CisgICAgICAgIHRoaXMueCA9IHg7CisgICAgICAgIHRoaXMueSA9IHk7CisgICAg
fQorICAgIHJldHVybiBTdGlja1ZhbHVlczsKK30oKSk7CisKKy8qKgorICogUmVwcmVzZW50cyBh
IGdhbWVwYWQKKyAqLwordmFyIEdhbWVwYWQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIGdhbWVwYWQKKyAgICAgKiBAcGFyYW0g
aWQgVGhlIGlkIG9mIHRoZSBnYW1lcGFkCisgICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBv
ZiB0aGUgZ2FtZXBhZAorICAgICAqIEBwYXJhbSBicm93c2VyR2FtZXBhZCBUaGUgYnJvd3NlciBn
YW1lcGFkCisgICAgICogQHBhcmFtIGxlZnRTdGlja1ggVGhlIHggY29tcG9uZW50IG9mIHRoZSBs
ZWZ0IGpveXN0aWNrCisgICAgICogQHBhcmFtIGxlZnRTdGlja1kgVGhlIHkgY29tcG9uZW50IG9m
IHRoZSBsZWZ0IGpveXN0aWNrCisgICAgICogQHBhcmFtIHJpZ2h0U3RpY2tYIFRoZSB4IGNvbXBv
bmVudCBvZiB0aGUgcmlnaHQgam95c3RpY2sKKyAgICAgKiBAcGFyYW0gcmlnaHRTdGlja1kgVGhl
IHkgY29tcG9uZW50IG9mIHRoZSByaWdodCBqb3lzdGljaworICAgICAqLworICAgIGZ1bmN0aW9u
IEdhbWVwYWQoCisgICAgLyoqCisgICAgICogVGhlIGlkIG9mIHRoZSBnYW1lcGFkCisgICAgICov
CisgICAgaWQsIAorICAgIC8qKgorICAgICAqIFRoZSBpbmRleCBvZiB0aGUgZ2FtZXBhZAorICAg
ICAqLworICAgIGluZGV4LCAKKyAgICAvKioKKyAgICAgKiBUaGUgYnJvd3NlciBnYW1lcGFkCisg
ICAgICovCisgICAgYnJvd3NlckdhbWVwYWQsIGxlZnRTdGlja1gsIGxlZnRTdGlja1ksIHJpZ2h0
U3RpY2tYLCByaWdodFN0aWNrWSkgeworICAgICAgICBpZiAobGVmdFN0aWNrWCA9PT0gdm9pZCAw
KSB7IGxlZnRTdGlja1ggPSAwOyB9CisgICAgICAgIGlmIChsZWZ0U3RpY2tZID09PSB2b2lkIDAp
IHsgbGVmdFN0aWNrWSA9IDE7IH0KKyAgICAgICAgaWYgKHJpZ2h0U3RpY2tYID09PSB2b2lkIDAp
IHsgcmlnaHRTdGlja1ggPSAyOyB9CisgICAgICAgIGlmIChyaWdodFN0aWNrWSA9PT0gdm9pZCAw
KSB7IHJpZ2h0U3RpY2tZID0gMzsgfQorICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgIHRo
aXMuaW5kZXggPSBpbmRleDsKKyAgICAgICAgdGhpcy5icm93c2VyR2FtZXBhZCA9IGJyb3dzZXJH
YW1lcGFkOworICAgICAgICB0aGlzLl9sZWZ0U3RpY2sgPSB7IHg6IDAsIHk6IDAgfTsKKyAgICAg
ICAgdGhpcy5fcmlnaHRTdGljayA9IHsgeDogMCwgeTogMCB9OworICAgICAgICAvKiogQGhpZGRl
biAqLworICAgICAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IHRydWU7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgbGVmdCBjb250cm9sIHN0aWNrIHNob3VsZCBi
ZSBZLWludmVydGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9pbnZlcnRMZWZ0U3RpY2tZ
ID0gZmFsc2U7CisgICAgICAgIHRoaXMudHlwZSA9IEdhbWVwYWQuR0FNRVBBRDsKKyAgICAgICAg
dGhpcy5fbGVmdFN0aWNrQXhpc1ggPSBsZWZ0U3RpY2tYOworICAgICAgICB0aGlzLl9sZWZ0U3Rp
Y2tBeGlzWSA9IGxlZnRTdGlja1k7CisgICAgICAgIHRoaXMuX3JpZ2h0U3RpY2tBeGlzWCA9IHJp
Z2h0U3RpY2tYOworICAgICAgICB0aGlzLl9yaWdodFN0aWNrQXhpc1kgPSByaWdodFN0aWNrWTsK
KyAgICAgICAgaWYgKHRoaXMuYnJvd3NlckdhbWVwYWQuYXhlcy5sZW5ndGggPj0gMikgeworICAg
ICAgICAgICAgdGhpcy5fbGVmdFN0aWNrID0geyB4OiB0aGlzLmJyb3dzZXJHYW1lcGFkLmF4ZXNb
dGhpcy5fbGVmdFN0aWNrQXhpc1hdLCB5OiB0aGlzLmJyb3dzZXJHYW1lcGFkLmF4ZXNbdGhpcy5f
bGVmdFN0aWNrQXhpc1ldIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuYnJvd3Nlckdh
bWVwYWQuYXhlcy5sZW5ndGggPj0gNCkgeworICAgICAgICAgICAgdGhpcy5fcmlnaHRTdGljayA9
IHsgeDogdGhpcy5icm93c2VyR2FtZXBhZC5heGVzW3RoaXMuX3JpZ2h0U3RpY2tBeGlzWF0sIHk6
IHRoaXMuYnJvd3NlckdhbWVwYWQuYXhlc1t0aGlzLl9yaWdodFN0aWNrQXhpc1ldIH07CisgICAg
ICAgIH0KKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEdhbWVwYWQucHJvdG90eXBl
LCAiaXNDb25uZWN0ZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgaWYg
dGhlIGdhbWVwYWQgaGFzIGJlZW4gY29ubmVjdGVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0Nvbm5lY3RlZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQ2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4g
dGhlIGxlZnQgam95c3RpY2sgaGFzIGNoYW5nZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sKKyAg
ICAgKi8KKyAgICBHYW1lcGFkLnByb3RvdHlwZS5vbmxlZnRzdGlja2NoYW5nZWQgPSBmdW5jdGlv
biAoY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5fb25sZWZ0c3RpY2tjaGFuZ2VkID0gY2FsbGJh
Y2s7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUg
cmlnaHQgam95c3RpY2sgaGFzIGNoYW5nZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sKKyAgICAg
Ki8KKyAgICBHYW1lcGFkLnByb3RvdHlwZS5vbnJpZ2h0c3RpY2tjaGFuZ2VkID0gZnVuY3Rpb24g
KGNhbGxiYWNrKSB7CisgICAgICAgIHRoaXMuX29ucmlnaHRzdGlja2NoYW5nZWQgPSBjYWxsYmFj
azsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHYW1lcGFkLnByb3RvdHlwZSwg
ImxlZnRTdGljayIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxlZnQgam95
c3RpY2sKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2xlZnRTdGljazsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFNldHMgdGhlIGxlZnQgam95c3RpY2sgdmFsdWVzCisgICAgICAgICAqLworICAgICAg
ICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWx1ZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbmxl
ZnRzdGlja2NoYW5nZWQgJiYgKHRoaXMuX2xlZnRTdGljay54ICE9PSBuZXdWYWx1ZXMueCB8fCB0
aGlzLl9sZWZ0U3RpY2sueSAhPT0gbmV3VmFsdWVzLnkpKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fb25sZWZ0c3RpY2tjaGFuZ2VkKG5ld1ZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl9sZWZ0U3RpY2sgPSBuZXdWYWx1ZXM7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHYW1lcGFkLnByb3RvdHlwZSwgInJpZ2h0U3RpY2siLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByaWdodCBqb3lzdGljaworICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fcmlnaHRTdGljazsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMg
dGhlIHJpZ2h0IGpveXN0aWNrIHZhbHVlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uIChuZXdWYWx1ZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbnJpZ2h0c3RpY2tjaGFu
Z2VkICYmICh0aGlzLl9yaWdodFN0aWNrLnggIT09IG5ld1ZhbHVlcy54IHx8IHRoaXMuX3JpZ2h0
U3RpY2sueSAhPT0gbmV3VmFsdWVzLnkpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fb25yaWdo
dHN0aWNrY2hhbmdlZChuZXdWYWx1ZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5fcmlnaHRTdGljayA9IG5ld1ZhbHVlczsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisg
ICAgICogVXBkYXRlcyB0aGUgZ2FtZXBhZCBqb3lzdGljayBwb3NpdGlvbnMKKyAgICAgKi8KKyAg
ICBHYW1lcGFkLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLl9sZWZ0U3RpY2spIHsKKyAgICAgICAgICAgIHRoaXMubGVmdFN0aWNrID0geyB4OiB0aGlz
LmJyb3dzZXJHYW1lcGFkLmF4ZXNbdGhpcy5fbGVmdFN0aWNrQXhpc1hdLCB5OiB0aGlzLmJyb3dz
ZXJHYW1lcGFkLmF4ZXNbdGhpcy5fbGVmdFN0aWNrQXhpc1ldIH07CisgICAgICAgICAgICBpZiAo
dGhpcy5faW52ZXJ0TGVmdFN0aWNrWSkgeworICAgICAgICAgICAgICAgIHRoaXMubGVmdFN0aWNr
LnkgKj0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Jp
Z2h0U3RpY2spIHsKKyAgICAgICAgICAgIHRoaXMucmlnaHRTdGljayA9IHsgeDogdGhpcy5icm93
c2VyR2FtZXBhZC5heGVzW3RoaXMuX3JpZ2h0U3RpY2tBeGlzWF0sIHk6IHRoaXMuYnJvd3Nlckdh
bWVwYWQuYXhlc1t0aGlzLl9yaWdodFN0aWNrQXhpc1ldIH07CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBnYW1lcGFkCisgICAgICovCisgICAgR2FtZXBh
ZC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlcHJlc2VudHMgYSBnYW1lcGFkIGNvbnRyb2xsZXIKKyAgICAgKi8KKyAgICBHYW1lcGFk
LkdBTUVQQUQgPSAwOworICAgIC8qKgorICAgICAqIFJlcHJlc2VudHMgYSBnZW5lcmljIGNvbnRy
b2xsZXIKKyAgICAgKi8KKyAgICBHYW1lcGFkLkdFTkVSSUMgPSAxOworICAgIC8qKgorICAgICAq
IFJlcHJlc2VudHMgYW4gWEJveCBjb250cm9sbGVyCisgICAgICovCisgICAgR2FtZXBhZC5YQk9Y
ID0gMjsKKyAgICAvKioKKyAgICAgKiBSZXByZXNlbnRzIGEgcG9zZS1lbmFibGVkIGNvbnRyb2xs
ZXIKKyAgICAgKi8KKyAgICBHYW1lcGFkLlBPU0VfRU5BQkxFRCA9IDM7CisgICAgLyoqCisgICAg
ICogUmVwcmVzZW50cyBhbiBEdWFsIFNob2NrIGNvbnRyb2xsZXIKKyAgICAgKi8KKyAgICBHYW1l
cGFkLkRVQUxTSE9DSyA9IDQ7CisgICAgcmV0dXJuIEdhbWVwYWQ7Cit9KCkpOworCisvKioKKyAq
IFJlcHJlc2VudHMgYSBnZW5lcmljIGdhbWVwYWQKKyAqLwordmFyIEdlbmVyaWNQYWQgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oR2VuZXJpY1BhZCwgX3N1cGVyKTsKKyAgICAvKioK
KyAgICAgKiBJbml0aWFsaXplcyB0aGUgZ2VuZXJpYyBnYW1lcGFkCisgICAgICogQHBhcmFtIGlk
IFRoZSBpZCBvZiB0aGUgZ2VuZXJpYyBnYW1lcGFkCisgICAgICogQHBhcmFtIGluZGV4IFRoZSBp
bmRleCBvZiB0aGUgZ2VuZXJpYyBnYW1lcGFkCisgICAgICogQHBhcmFtIGJyb3dzZXJHYW1lcGFk
IFRoZSBicm93c2VyIGdhbWVwYWQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBHZW5lcmljUGFkKGlk
LCBpbmRleCwgYnJvd3NlckdhbWVwYWQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNh
bGwodGhpcywgaWQsIGluZGV4LCBicm93c2VyR2FtZXBhZCkgfHwgdGhpczsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIE9ic2VydmFibGUgdHJpZ2dlcmVkIHdoZW4gYSBidXR0b24gaGFzIGJlZW4g
cHJlc3NlZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25CdXR0b25Eb3duT2JzZXJ2YWJs
ZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9i
c2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSB0cmlnZ2Vy
ZWQgd2hlbiBhIGJ1dHRvbiBoYXMgYmVlbiByZWxlYXNlZAorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMub25CdXR0b25VcE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgX3RoaXMudHlw
ZSA9IEdhbWVwYWQuR0VORVJJQzsKKyAgICAgICAgX3RoaXMuX2J1dHRvbnMgPSBuZXcgQXJyYXko
YnJvd3NlckdhbWVwYWQuYnV0dG9ucy5sZW5ndGgpOworICAgICAgICByZXR1cm4gX3RoaXM7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIENhbGxiYWNrIHRyaWdnZXJlZCB3aGVuIGEgYnV0dG9uIGhh
cyBiZWVuIHByZXNzZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGVkIHdoZW4gYSBidXR0
b24gaGFzIGJlZW4gcHJlc3NlZAorICAgICAqLworICAgIEdlbmVyaWNQYWQucHJvdG90eXBlLm9u
YnV0dG9uZG93biA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9vbmJ1dHRv
bmRvd24gPSBjYWxsYmFjazsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxiYWNrIHRyaWdn
ZXJlZCB3aGVuIGEgYnV0dG9uIGhhcyBiZWVuIHJlbGVhc2VkCisgICAgICogQHBhcmFtIGNhbGxi
YWNrIENhbGxlZCB3aGVuIGEgYnV0dG9uIGhhcyBiZWVuIHJlbGVhc2VkCisgICAgICovCisgICAg
R2VuZXJpY1BhZC5wcm90b3R5cGUub25idXR0b251cCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewor
ICAgICAgICB0aGlzLl9vbmJ1dHRvbnVwID0gY2FsbGJhY2s7CisgICAgfTsKKyAgICBHZW5lcmlj
UGFkLnByb3RvdHlwZS5fc2V0QnV0dG9uVmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUsIGN1cnJl
bnRWYWx1ZSwgYnV0dG9uSW5kZXgpIHsKKyAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBjdXJyZW50
VmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gMSkgeworICAgICAgICAgICAg
ICAgIGlmICh0aGlzLl9vbmJ1dHRvbmRvd24pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
b25idXR0b25kb3duKGJ1dHRvbkluZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgdGhpcy5vbkJ1dHRvbkRvd25PYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhidXR0b25J
bmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IDApIHsK
KyAgICAgICAgICAgICAgICBpZiAodGhpcy5fb25idXR0b251cCkgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9vbmJ1dHRvbnVwKGJ1dHRvbkluZGV4KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdGhpcy5vbkJ1dHRvblVwT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMo
YnV0dG9uSW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBu
ZXdWYWx1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGdlbmVyaWMgZ2Ft
ZXBhZAorICAgICAqLworICAgIEdlbmVyaWNQYWQucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzKTsKKyAgICAg
ICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2J1dHRvbnMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICB0aGlzLl9idXR0b25zW2luZGV4XSA9IHRoaXMuX3NldEJ1dHRv
blZhbHVlKHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9uc1tpbmRleF0udmFsdWUsIHRoaXMuX2J1
dHRvbnNbaW5kZXhdLCBpbmRleCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAq
IERpc3Bvc2VzIHRoZSBnZW5lcmljIGdhbWVwYWQKKyAgICAgKi8KKyAgICBHZW5lcmljUGFkLnBy
b3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBl
LmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAgICAgICAgdGhpcy5vbkJ1dHRvbkRvd25PYnNlcnZhYmxl
LmNsZWFyKCk7CisgICAgICAgIHRoaXMub25CdXR0b25VcE9ic2VydmFibGUuY2xlYXIoKTsKKyAg
ICB9OworICAgIHJldHVybiBHZW5lcmljUGFkOworfShHYW1lcGFkKSk7CisKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vR2FtZXBhZHMvZ2FtZXBhZE1hbmFnZXIudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HYW1lcGFkcy9nYW1lcGFk
TWFuYWdlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogR2FtZXBhZE1hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiR2FtZXBhZE1hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEdhbWVwYWRNYW5hZ2VyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNl
cnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZG9tTWFuYWdlbWVudF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kb21NYW5hZ2Vt
ZW50ICovICIuL01pc2MvZG9tTWFuYWdlbWVudC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9HYW1lcGFkc19Db250cm9sbGVyc19wb3NlRW5hYmxlZENvbnRyb2xsZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0dhbWVwYWRz
L0NvbnRyb2xsZXJzL3Bvc2VFbmFibGVkQ29udHJvbGxlciAqLyAiLi9HYW1lcGFkcy9Db250cm9s
bGVycy9wb3NlRW5hYmxlZENvbnRyb2xsZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfeGJveEdhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4veGJveEdhbWVwYWQgKi8gIi4vR2FtZXBhZHMveGJveEdhbWVwYWQudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZ2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9nYW1lcGFkICovICIuL0dhbWVw
YWRzL2dhbWVwYWQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdp
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2R1YWxTaG9ja0dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZHVhbFNob2NrR2FtZXBhZCAqLyAiLi9H
YW1lcGFkcy9kdWFsU2hvY2tHYW1lcGFkLnRzIik7CisKKworCisKKworCisKKy8qKgorICogTWFu
YWdlciBmb3IgaGFuZGxpbmcgZ2FtZXBhZHMKKyAqLwordmFyIEdhbWVwYWRNYW5hZ2VyID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRo
ZSBnYW1lcGFkIG1hbmFnZXIKKyAgICAgKiBAcGFyYW0gX3NjZW5lIEJhYnlsb25KUyBzY2VuZQor
ICAgICAqLworICAgIGZ1bmN0aW9uIEdhbWVwYWRNYW5hZ2VyKF9zY2VuZSkgeworICAgICAgICB2
YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl9zY2VuZSA9IF9zY2VuZTsKKyAgICAgICAg
dGhpcy5fYmFieWxvbkdhbWVwYWRzID0gW107CisgICAgICAgIHRoaXMuX29uZUdhbWVwYWRDb25u
ZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5faXNN
b25pdG9yaW5nID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBvYnNlcnZhYmxlIHRv
IGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBnYW1lcGFkIGNvbnRyb2xsZXIgaGFzIGJlZW4gZGlzY29u
bmVjdGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uR2FtZXBhZERpc2Nvbm5lY3RlZE9i
c2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgaWYgKCFfTWlzY19kb21NYW5hZ2VtZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkRvbU1hbmFnZW1lbnQiXS5Jc1dpbmRvd09iamVj
dEV4aXN0KCkpIHsKKyAgICAgICAgICAgIHRoaXMuX2dhbWVwYWRFdmVudFN1cHBvcnRlZCA9IGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZ2FtZXBh
ZEV2ZW50U3VwcG9ydGVkID0gJ0dhbWVwYWRFdmVudCcgaW4gd2luZG93OworICAgICAgICAgICAg
dGhpcy5fZ2FtZXBhZFN1cHBvcnQgPSAobmF2aWdhdG9yLmdldEdhbWVwYWRzIHx8CisgICAgICAg
ICAgICAgICAgbmF2aWdhdG9yLndlYmtpdEdldEdhbWVwYWRzIHx8IG5hdmlnYXRvci5tc0dldEdh
bWVwYWRzIHx8IG5hdmlnYXRvci53ZWJraXRHYW1lcGFkcyk7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKGZ1bmN0aW9uIChvYnNl
cnZlcikgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcmFpc2UgdGhlIG9u
R2FtZXBhZENvbm5lY3RlZCBmb3IgYWxsIGdhbWVwYWRzIEFMUkVBRFkgY29ubmVjdGVkCisgICAg
ICAgICAgICBmb3IgKHZhciBpIGluIF90aGlzLl9iYWJ5bG9uR2FtZXBhZHMpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgZ2FtZXBhZCA9IF90aGlzLl9iYWJ5bG9uR2FtZXBhZHNbaV07CisgICAgICAg
ICAgICAgICAgaWYgKGdhbWVwYWQgJiYgZ2FtZXBhZC5faXNDb25uZWN0ZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgX3RoaXMub25HYW1lcGFkQ29ubmVjdGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNl
cnZlcihvYnNlcnZlciwgZ2FtZXBhZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fb25HYW1lcGFkQ29ubmVjdGVkRXZlbnQgPSBm
dW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICB2YXIgZ2FtZXBhZCA9IGV2dC5nYW1lcGFkOwor
ICAgICAgICAgICAgaWYgKGdhbWVwYWQuaW5kZXggaW4gX3RoaXMuX2JhYnlsb25HYW1lcGFkcykg
eworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fYmFieWxvbkdhbWVwYWRzW2dhbWVwYWQuaW5k
ZXhdLmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbmV3R2FtZXBhZDsKKyAg
ICAgICAgICAgIGlmIChfdGhpcy5fYmFieWxvbkdhbWVwYWRzW2dhbWVwYWQuaW5kZXhdKSB7Cisg
ICAgICAgICAgICAgICAgbmV3R2FtZXBhZCA9IF90aGlzLl9iYWJ5bG9uR2FtZXBhZHNbZ2FtZXBh
ZC5pbmRleF07CisgICAgICAgICAgICAgICAgbmV3R2FtZXBhZC5icm93c2VyR2FtZXBhZCA9IGdh
bWVwYWQ7CisgICAgICAgICAgICAgICAgbmV3R2FtZXBhZC5faXNDb25uZWN0ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbmV3R2Ft
ZXBhZCA9IF90aGlzLl9hZGROZXdHYW1lcGFkKGdhbWVwYWQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgX3RoaXMub25HYW1lcGFkQ29ubmVjdGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZl
cnMobmV3R2FtZXBhZCk7CisgICAgICAgICAgICBfdGhpcy5fc3RhcnRNb25pdG9yaW5nR2FtZXBh
ZHMoKTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fb25HYW1lcGFkRGlzY29ubmVjdGVkRXZl
bnQgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICB2YXIgZ2FtZXBhZCA9IGV2dC5nYW1l
cGFkOworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBnYW1lcGFkIGZyb20gdGhlIGxpc3Qgb2Yg
Z2FtZXBhZHMgdG8gbW9uaXRvci4KKyAgICAgICAgICAgIGZvciAodmFyIGkgaW4gX3RoaXMuX2Jh
Ynlsb25HYW1lcGFkcykgeworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fYmFieWxvbkdhbWVw
YWRzW2ldLmluZGV4ID09PSBnYW1lcGFkLmluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBkaXNjb25uZWN0ZWRHYW1lcGFkID0gX3RoaXMuX2JhYnlsb25HYW1lcGFkc1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgZGlzY29ubmVjdGVkR2FtZXBhZC5faXNDb25uZWN0ZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25HYW1lcGFkRGlzY29ubmVjdGVkT2JzZXJ2YWJs
ZS5ub3RpZnlPYnNlcnZlcnMoZGlzY29ubmVjdGVkR2FtZXBhZCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KyAgICAgICAgaWYgKHRoaXMuX2dhbWVwYWRTdXBwb3J0KSB7CisgICAgICAgICAgICAvL2ZpcnN0
IGFkZCBhbHJlYWR5LWNvbm5lY3RlZCBnYW1lcGFkcworICAgICAgICAgICAgdGhpcy5fdXBkYXRl
R2FtZXBhZE9iamVjdHMoKTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9iYWJ5bG9uR2FtZXBhZHMu
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRNb25pdG9yaW5nR2FtZXBhZHMo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENoZWNraW5nIGlmIHRoZSBnYW1lcGFk
IGNvbm5lY3RlZCBldmVudCBpcyBzdXBwb3J0ZWQgKGxpa2UgaW4gRmlyZWZveCkKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9nYW1lcGFkRXZlbnRTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgICAgICB2
YXIgaG9zdFdpbmRvdyA9IHRoaXMuX3NjZW5lID8gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZ2V0
SG9zdFdpbmRvdygpIDogd2luZG93OworICAgICAgICAgICAgICAgIGhvc3RXaW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcignZ2FtZXBhZGNvbm5lY3RlZCcsIHRoaXMuX29uR2FtZXBhZENvbm5lY3RlZEV2
ZW50LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgaG9zdFdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCdnYW1lcGFkZGlzY29ubmVjdGVkJywgdGhpcy5fb25HYW1lcGFkRGlzY29ubmVjdGVkRXZlbnQs
IGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHRoaXMuX3N0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEdhbWVwYWRNYW5hZ2VyLnBy
b3RvdHlwZSwgImdhbWVwYWRzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGdhbWVw
YWRzIGluIHRoZSBnYW1lIHBhZCBtYW5hZ2VyCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYWJ5bG9uR2FtZXBhZHM7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldCB0aGUgZ2FtZXBhZCBjb250cm9s
bGVycyBiYXNlZCBvbiB0eXBlCisgICAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgZ2FtZXBh
ZCBjb250cm9sbGVyCisgICAgICogQHJldHVybnMgTnVsbGFibGUgZ2FtZXBhZAorICAgICAqLwor
ICAgIEdhbWVwYWRNYW5hZ2VyLnByb3RvdHlwZS5nZXRHYW1lcGFkQnlUeXBlID0gZnVuY3Rpb24g
KHR5cGUpIHsKKyAgICAgICAgaWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0eXBlID0gX2dhbWVwYWRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siR2FtZXBhZCJdLlhCT1g7IH0KKyAgICAgICAg
Zm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX2JhYnlsb25HYW1lcGFkczsgX2kgPCBfYS5sZW5n
dGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBnYW1lcGFkID0gX2FbX2ldOworICAgICAgICAg
ICAgaWYgKGdhbWVwYWQgJiYgZ2FtZXBhZC50eXBlID09PSB0eXBlKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdhbWVwYWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgZ2FtZXBhZCBt
YW5hZ2VyCisgICAgICovCisgICAgR2FtZXBhZE1hbmFnZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9nYW1lcGFkRXZlbnRTdXBwb3J0ZWQpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl9vbkdhbWVwYWRDb25uZWN0ZWRFdmVudCkgeworICAgICAg
ICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdnYW1lcGFkY29ubmVjdGVkJywg
dGhpcy5fb25HYW1lcGFkQ29ubmVjdGVkRXZlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHRoaXMuX29uR2FtZXBhZERpc2Nvbm5lY3RlZEV2ZW50KSB7CisgICAgICAgICAgICAg
ICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2dhbWVwYWRkaXNjb25uZWN0ZWQnLCB0aGlz
Ll9vbkdhbWVwYWREaXNjb25uZWN0ZWRFdmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0aGlzLl9vbkdhbWVwYWRDb25uZWN0ZWRFdmVudCA9IG51bGw7CisgICAgICAgICAgICB0aGlz
Ll9vbkdhbWVwYWREaXNjb25uZWN0ZWRFdmVudCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fYmFieWxvbkdhbWVwYWRzLmZvckVhY2goZnVuY3Rpb24gKGdhbWVwYWQpIHsKKyAgICAg
ICAgICAgIGdhbWVwYWQuZGlzcG9zZSgpOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5vbkdh
bWVwYWRDb25uZWN0ZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25HYW1lcGFk
RGlzY29ubmVjdGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLl9vbmVHYW1lcGFk
Q29ubmVjdGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3N0b3BNb25pdG9yaW5nR2FtZXBhZHMo
KTsKKyAgICAgICAgdGhpcy5fYmFieWxvbkdhbWVwYWRzID0gW107CisgICAgfTsKKyAgICBHYW1l
cGFkTWFuYWdlci5wcm90b3R5cGUuX2FkZE5ld0dhbWVwYWQgPSBmdW5jdGlvbiAoZ2FtZXBhZCkg
eworICAgICAgICBpZiAoIXRoaXMuX29uZUdhbWVwYWRDb25uZWN0ZWQpIHsKKyAgICAgICAgICAg
IHRoaXMuX29uZUdhbWVwYWRDb25uZWN0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHZh
ciBuZXdHYW1lcGFkOworICAgICAgICB2YXIgZHVhbFNob2NrID0gKGdhbWVwYWQuaWQuc2VhcmNo
KCIwNTRjIikgIT09IC0xKTsKKyAgICAgICAgdmFyIHhib3hPbmUgPSAoZ2FtZXBhZC5pZC5zZWFy
Y2goIlhib3ggT25lIikgIT09IC0xKTsKKyAgICAgICAgaWYgKHhib3hPbmUgfHwgZ2FtZXBhZC5p
ZC5zZWFyY2goIlhib3ggMzYwIikgIT09IC0xIHx8IGdhbWVwYWQuaWQuc2VhcmNoKCJ4aW5wdXQi
KSAhPT0gLTEpIHsKKyAgICAgICAgICAgIG5ld0dhbWVwYWQgPSBuZXcgX3hib3hHYW1lcGFkX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlhib3gzNjBQYWQiXShnYW1lcGFkLmlkLCBnYW1l
cGFkLmluZGV4LCBnYW1lcGFkLCB4Ym94T25lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChkdWFsU2hvY2spIHsKKyAgICAgICAgICAgIG5ld0dhbWVwYWQgPSBuZXcgX2R1YWxTaG9ja0dh
bWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRHVhbFNob2NrUGFkIl0oZ2FtZXBh
ZC5pZCwgZ2FtZXBhZC5pbmRleCwgZ2FtZXBhZCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gaWYg
cG9zZSBpcyBzdXBwb3J0ZWQsIHVzZSB0aGUgKFdlYlZSKSBwb3NlIGVuYWJsZWQgY29udHJvbGxl
cgorICAgICAgICBlbHNlIGlmIChnYW1lcGFkLnBvc2UpIHsKKyAgICAgICAgICAgIG5ld0dhbWVw
YWQgPSBfR2FtZXBhZHNfQ29udHJvbGxlcnNfcG9zZUVuYWJsZWRDb250cm9sbGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlciJdLkluaXRp
YXRlQ29udHJvbGxlcihnYW1lcGFkKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIG5ld0dhbWVwYWQgPSBuZXcgX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siR2VuZXJpY1BhZCJdKGdhbWVwYWQuaWQsIGdhbWVwYWQuaW5kZXgsIGdhbWVwYWQpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2JhYnlsb25HYW1lcGFkc1tuZXdHYW1lcGFkLmluZGV4
XSA9IG5ld0dhbWVwYWQ7CisgICAgICAgIHJldHVybiBuZXdHYW1lcGFkOworICAgIH07CisgICAg
R2FtZXBhZE1hbmFnZXIucHJvdG90eXBlLl9zdGFydE1vbml0b3JpbmdHYW1lcGFkcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9pc01vbml0b3JpbmcpIHsKKyAgICAgICAgICAg
IHRoaXMuX2lzTW9uaXRvcmluZyA9IHRydWU7CisgICAgICAgICAgICAvL2JhY2stY29tcAorICAg
ICAgICAgICAgaWYgKCF0aGlzLl9zY2VuZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNr
R2FtZXBhZHNTdGF0dXMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAg
R2FtZXBhZE1hbmFnZXIucHJvdG90eXBlLl9zdG9wTW9uaXRvcmluZ0dhbWVwYWRzID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB0aGlzLl9pc01vbml0b3JpbmcgPSBmYWxzZTsKKyAgICB9OworICAg
IC8qKiBAaGlkZGVuICovCisgICAgR2FtZXBhZE1hbmFnZXIucHJvdG90eXBlLl9jaGVja0dhbWVw
YWRzU3RhdHVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICAvLyBIYWNrIHRvIGJlIGNvbXBhdGlibGUgQ2hyb21lCisgICAgICAgIHRoaXMuX3VwZGF0
ZUdhbWVwYWRPYmplY3RzKCk7CisgICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5fYmFieWxvbkdh
bWVwYWRzKSB7CisgICAgICAgICAgICB2YXIgZ2FtZXBhZCA9IHRoaXMuX2JhYnlsb25HYW1lcGFk
c1tpXTsKKyAgICAgICAgICAgIGlmICghZ2FtZXBhZCB8fCAhZ2FtZXBhZC5pc0Nvbm5lY3RlZCkg
eworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Z2FtZXBhZC51cGRhdGUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5faXNNb25pdG9y
aW5nICYmICF0aGlzLl9zY2VuZSkgeworICAgICAgICAgICAgX0VuZ2luZXNfZW5naW5lX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkVuZ2luZSJdLlF1ZXVlTmV3RnJhbWUoZnVuY3Rpb24g
KCkgeyBfdGhpcy5fY2hlY2tHYW1lcGFkc1N0YXR1cygpOyB9KTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBvbiBDaHJvbWUsIHdoaWNoIGRv
ZXMgbm90IHByb3Blcmx5IHN1cHBvcnQKKyAgICAvLyBjb25uZWN0aW9uL2Rpc2Nvbm5lY3Rpb24g
ZXZlbnRzIGFuZCBmb3JjZXMgeW91IHRvIHJlY29weSBhZ2FpbiB0aGUgZ2FtZXBhZCBvYmplY3QK
KyAgICBHYW1lcGFkTWFuYWdlci5wcm90b3R5cGUuX3VwZGF0ZUdhbWVwYWRPYmplY3RzID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgZ2FtZXBhZHMgPSBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMg
PyBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMoKSA6IChuYXZpZ2F0b3Iud2Via2l0R2V0R2FtZXBhZHMg
PyBuYXZpZ2F0b3Iud2Via2l0R2V0R2FtZXBhZHMoKSA6IFtdKTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBnYW1lcGFkcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGdhbWVw
YWQgPSBnYW1lcGFkc1tpXTsKKyAgICAgICAgICAgIGlmIChnYW1lcGFkKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLl9iYWJ5bG9uR2FtZXBhZHNbZ2FtZXBhZC5pbmRleF0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG5ld0dhbWVwYWQgPSB0aGlzLl9hZGROZXdHYW1lcGFkKGdhbWVw
YWQpOworICAgICAgICAgICAgICAgICAgICB0aGlzLm9uR2FtZXBhZENvbm5lY3RlZE9ic2VydmFi
bGUubm90aWZ5T2JzZXJ2ZXJzKG5ld0dhbWVwYWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2VkIHRvIGNvcHkg
YWdhaW4gdGhpcyBvYmplY3QgZm9yIENocm9tZSBmb3IgdW5rbm93biByZWFzb24KKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fYmFieWxvbkdhbWVwYWRzW2ldLmJyb3dzZXJHYW1lcGFkID0gZ2Ft
ZXBhZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9iYWJ5bG9uR2FtZXBhZHNbaV0u
aXNDb25uZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JhYnlsb25HYW1l
cGFkc1tpXS5faXNDb25uZWN0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5vbkdhbWVwYWRDb25uZWN0ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzLl9iYWJ5
bG9uR2FtZXBhZHNbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gR2FtZXBhZE1h
bmFnZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0dhbWVwYWRzL2dhbWVw
YWRTY2VuZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9HYW1lcGFkcy9nYW1lcGFkU2NlbmVDb21wb25lbnQu
dHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBHYW1lcGFkU3lzdGVtU2NlbmVDb21wb25lbnQgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2FtZXBhZFN5c3RlbVNjZW5lQ29tcG9u
ZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBHYW1lcGFkU3lzdGVtU2NlbmVDb21wb25lbnQ7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vc2NlbmUgKi8gIi4vc2NlbmUudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lQ29tcG9u
ZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2dhbWVwYWRNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL2dhbWVwYWRNYW5hZ2VyICovICIuL0dhbWVwYWRzL2dhbWVwYWRNYW5h
Z2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfZnJlZUNhbWVyYUlu
cHV0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL0NhbWVyYXMvZnJlZUNhbWVyYUlucHV0c01hbmFnZXIgKi8gIi4vQ2FtZXJh
cy9mcmVlQ2FtZXJhSW5wdXRzTWFuYWdlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9DYW1lcmFzX0lucHV0c19mcmVlQ2FtZXJhR2FtZXBhZElucHV0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL0lucHV0cy9m
cmVlQ2FtZXJhR2FtZXBhZElucHV0ICovICIuL0NhbWVyYXMvSW5wdXRzL2ZyZWVDYW1lcmFHYW1l
cGFkSW5wdXQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19hcmNSb3Rh
dGVDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL2FyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFn
ZXIgKi8gIi4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfSW5wdXRzX2FyY1JvdGF0ZUNhbWVyYUdhbWVw
YWRJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vQ2FtZXJhcy9JbnB1dHMvYXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0ICovICIu
L0NhbWVyYXMvSW5wdXRzL2FyY1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dC50cyIpOworCisKKwor
CisKKworCitPYmplY3QuZGVmaW5lUHJvcGVydHkoX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlNjZW5lIl0ucHJvdG90eXBlLCAiZ2FtZXBhZE1hbmFnZXIiLCB7CisgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fZ2FtZXBhZE1hbmFnZXIpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2dhbWVwYWRNYW5hZ2VyID0gbmV3IF9nYW1lcGFkTWFuYWdlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHYW1lcGFkTWFuYWdlciJdKHRoaXMpOworICAgICAg
ICAgICAgdmFyIGNvbXBvbmVudCA9IHRoaXMuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5O
QU1FX0dBTUVQQUQpOworICAgICAgICAgICAgaWYgKCFjb21wb25lbnQpIHsKKyAgICAgICAgICAg
ICAgICBjb21wb25lbnQgPSBuZXcgR2FtZXBhZFN5c3RlbVNjZW5lQ29tcG9uZW50KHRoaXMpOwor
ICAgICAgICAgICAgICAgIHRoaXMuX2FkZENvbXBvbmVudChjb21wb25lbnQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nYW1lcGFkTWFuYWdlcjsKKyAg
ICB9LAorICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgY29uZmlndXJhYmxlOiB0cnVlCit9KTsK
Ky8qKgorICogQWRkcyBhIGdhbWVwYWQgdG8gdGhlIGZyZWUgY2FtZXJhIGlucHV0cyBtYW5hZ2Vy
CisgKi8KK19DYW1lcmFzX2ZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyIl0ucHJvdG90eXBlLmFkZEdhbWVw
YWQgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5hZGQobmV3IF9DYW1lcmFzX0lucHV0c19mcmVl
Q2FtZXJhR2FtZXBhZElucHV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkZyZWVDYW1l
cmFHYW1lcGFkSW5wdXQiXSgpKTsKKyAgICByZXR1cm4gdGhpczsKK307CisvKioKKyAqIEFkZHMg
YSBnYW1lcGFkIHRvIHRoZSBhcmMgcm90YXRlIGNhbWVyYSBpbnB1dHMgbWFuYWdlcgorICovCitf
Q2FtZXJhc19hcmNSb3RhdGVDYW1lcmFJbnB1dHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIkFyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIiXS5wcm90b3R5cGUuYWRkR2Ft
ZXBhZCA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLmFkZChuZXcgX0NhbWVyYXNfSW5wdXRzX2Fy
Y1JvdGF0ZUNhbWVyYUdhbWVwYWRJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJB
cmNSb3RhdGVDYW1lcmFHYW1lcGFkSW5wdXQiXSgpKTsKKyAgICByZXR1cm4gdGhpczsKK307Cisv
KioKKyAgKiBEZWZpbmVzIHRoZSBnYW1lcGFkIHNjZW5lIGNvbXBvbmVudCByZXNwb25zaWJsZSB0
byBtYW5hZ2UgZ2FtZXBhZHMgaW4gYSBnaXZlbiBzY2VuZQorICAqLwordmFyIEdhbWVwYWRTeXN0
ZW1TY2VuZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgZm9yIHRoZSBn
aXZlbiBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0byByZWdp
c3RlciB0aGUgY29tcG9uZW50IGluCisgICAgICovCisgICAgZnVuY3Rpb24gR2FtZXBhZFN5c3Rl
bVNjZW5lQ29tcG9uZW50KHNjZW5lKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY29t
cG9uZW50IG5hbWUgaGVscGZ1bGwgdG8gaWRlbnRpZnkgdGhlIGNvbXBvbmVudCBpbiB0aGUgbGlz
dCBvZiBzY2VuZSBjb21wb25lbnRzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5uYW1lID0g
X3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lQ29tcG9u
ZW50Q29uc3RhbnRzIl0uTkFNRV9HQU1FUEFEOworICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7
CisgICAgfQorICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyB0aGUgY29tcG9uZW50IGluIGEgZ2l2
ZW4gc2NlbmUKKyAgICAgKi8KKyAgICBHYW1lcGFkU3lzdGVtU2NlbmVDb21wb25lbnQucHJvdG90
eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLnNjZW5lLl9iZWZvcmVD
YW1lcmFVcGRhdGVTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9CRUZPUkVD
QU1FUkFVUERBVEVfR0FNRVBBRCwgdGhpcywgdGhpcy5fYmVmb3JlQ2FtZXJhVXBkYXRlKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJlYnVpbGRzIHRoZSBlbGVtZW50cyByZWxhdGVkIHRvIHRo
aXMgY29tcG9uZW50IGluIGNhc2Ugb2YKKyAgICAgKiBjb250ZXh0IGxvc3QgZm9yIGluc3RhbmNl
LgorICAgICAqLworICAgIEdhbWVwYWRTeXN0ZW1TY2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVi
dWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gTm90aGluZyB0byBkbyBmb3IgZ2FtZXBh
ZHMKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBjb21wb25lbnQgYW5kIHRo
ZSBhc3NvY2lhdGVkIHJlc3NvdXJjZXMKKyAgICAgKi8KKyAgICBHYW1lcGFkU3lzdGVtU2NlbmVD
b21wb25lbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBn
YW1lcGFkTWFuYWdlciA9IHRoaXMuc2NlbmUuX2dhbWVwYWRNYW5hZ2VyOworICAgICAgICBpZiAo
Z2FtZXBhZE1hbmFnZXIpIHsKKyAgICAgICAgICAgIGdhbWVwYWRNYW5hZ2VyLmRpc3Bvc2UoKTsK
KyAgICAgICAgICAgIHRoaXMuc2NlbmUuX2dhbWVwYWRNYW5hZ2VyID0gbnVsbDsKKyAgICAgICAg
fQorICAgIH07CisgICAgR2FtZXBhZFN5c3RlbVNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5fYmVm
b3JlQ2FtZXJhVXBkYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgZ2FtZXBhZE1hbmFn
ZXIgPSB0aGlzLnNjZW5lLl9nYW1lcGFkTWFuYWdlcjsKKyAgICAgICAgaWYgKGdhbWVwYWRNYW5h
Z2VyICYmIGdhbWVwYWRNYW5hZ2VyLl9pc01vbml0b3JpbmcpIHsKKyAgICAgICAgICAgIGdhbWVw
YWRNYW5hZ2VyLl9jaGVja0dhbWVwYWRzU3RhdHVzKCk7CisgICAgICAgIH0KKyAgICB9OworICAg
IHJldHVybiBHYW1lcGFkU3lzdGVtU2NlbmVDb21wb25lbnQ7Cit9KCkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL0dhbWVwYWRzL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vR2FtZXBhZHMvaW5kZXgudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN0aWNrVmFsdWVz
LCBHYW1lcGFkLCBHZW5lcmljUGFkLCBHYW1lcGFkTWFuYWdlciwgR2FtZXBhZFN5c3RlbVNjZW5l
Q29tcG9uZW50LCBYYm94MzYwQnV0dG9uLCBYYm94MzYwRHBhZCwgWGJveDM2MFBhZCwgRHVhbFNo
b2NrQnV0dG9uLCBEdWFsU2hvY2tEcGFkLCBEdWFsU2hvY2tQYWQsIERheWRyZWFtQ29udHJvbGxl
ciwgR2VhclZSQ29udHJvbGxlciwgR2VuZXJpY0NvbnRyb2xsZXIsIE9jdWx1c1RvdWNoQ29udHJv
bGxlciwgUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZSwgUG9zZUVuYWJsZWRDb250cm9sbGVySGVs
cGVyLCBQb3NlRW5hYmxlZENvbnRyb2xsZXIsIFZpdmVDb250cm9sbGVyLCBXZWJWUkNvbnRyb2xs
ZXIsIFdpbmRvd3NNb3Rpb25Db250cm9sbGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfQ29udHJvbGxlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQ29udHJvbGxlcnMvaW5kZXggKi8g
Ii4vR2FtZXBhZHMvQ29udHJvbGxlcnMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGF5
ZHJlYW1Db250cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ29udHJvbGxlcnNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRGF5ZHJlYW1Db250cm9sbGVyIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkdlYXJWUkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9Db250cm9sbGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHZWFyVlJD
b250cm9sbGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdlbmVyaWNDb250cm9sbGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfQ29udHJvbGxlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siR2VuZXJpY0NvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
T2N1bHVzVG91Y2hDb250cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ29udHJvbGxlcnNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2N1bHVzVG91Y2hDb250cm9sbGVy
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc2VFbmFibGVkQ29udHJvbGxlclR5cGUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9Db250cm9sbGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXJUeXBlIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0NvbnRyb2xsZXJzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvc2VFbmFi
bGVkQ29udHJvbGxlckhlbHBlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NlRW5hYmxl
ZENvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Db250cm9sbGVyc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXIiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiVml2ZUNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9D
b250cm9sbGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWaXZlQ29udHJv
bGxlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJWUkNvbnRyb2xsZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9Db250cm9sbGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJXZWJWUkNvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2luZG93c01v
dGlvbkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Db250cm9sbGVyc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXaW5kb3dzTW90aW9uQ29udHJvbGxlciJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2dhbWVwYWQgKi8gIi4vR2Ft
ZXBhZHMvZ2FtZXBhZC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGlja1ZhbHVlcyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU3Rp
Y2tWYWx1ZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2FtZXBhZCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siR2FtZXBhZCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJHZW5lcmljUGFkIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfZ2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJHZW5lcmljUGFkIl07IH0p
OworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2dhbWVwYWRNYW5hZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2dhbWVwYWRNYW5h
Z2VyICovICIuL0dhbWVwYWRzL2dhbWVwYWRNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkdhbWVwYWRNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZ2FtZXBhZE1hbmFnZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR2FtZXBhZE1hbmFnZXIiXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfZ2FtZXBhZFNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2dhbWVwYWRTY2VuZUNv
bXBvbmVudCAqLyAiLi9HYW1lcGFkcy9nYW1lcGFkU2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiR2FtZXBhZFN5c3RlbVNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfZ2FtZXBhZFNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkdhbWVwYWRTeXN0ZW1TY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF94Ym94R2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi94Ym94R2FtZXBhZCAqLyAiLi9HYW1lcGFkcy94Ym94R2FtZXBh
ZC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJYYm94MzYwQnV0dG9uIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfeGJveEdhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siWGJveDM2MEJ1
dHRvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJYYm94MzYwRHBhZCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX3hib3hHYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlhib3gz
NjBEcGFkIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlhib3gzNjBQYWQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF94Ym94R2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJYYm94
MzYwUGFkIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2R1YWxTaG9ja0dhbWVw
YWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vZHVhbFNob2NrR2FtZXBhZCAqLyAiLi9HYW1lcGFkcy9kdWFsU2hvY2tHYW1lcGFkLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkR1YWxTaG9ja0J1dHRvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2R1YWxTaG9ja0dhbWVwYWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRHVhbFNob2Nr
QnV0dG9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkR1YWxTaG9ja0RwYWQiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9kdWFsU2hvY2tHYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIkR1YWxTaG9ja0RwYWQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRHVhbFNob2NrUGFk
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZHVhbFNob2NrR2FtZXBhZF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJEdWFsU2hvY2tQYWQiXTsgfSk7CisKKworCisKKworCisKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vR2FtZXBhZHMveGJveEdhbWVwYWQudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HYW1lcGFkcy94Ym94R2FtZXBh
ZC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogWGJveDM2MEJ1dHRvbiwgWGJveDM2MERwYWQsIFhib3gzNjBQYWQgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiWGJveDM2MEJ1dHRvbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gWGJveDM2MEJ1dHRvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJYYm94
MzYwRHBhZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gWGJveDM2MERwYWQ7IH0pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiWGJveDM2MFBhZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gWGJveDM2MFBhZDsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9HYW1lcGFkc19nYW1lcGFkX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9HYW1lcGFkcy9nYW1lcGFk
ICovICIuL0dhbWVwYWRzL2dhbWVwYWQudHMiKTsKKworCisKKy8qKgorICogRGVmaW5lcyBzdXBw
b3J0ZWQgYnV0dG9ucyBmb3IgWEJveDM2MCBjb21wYXRpYmxlIGdhbWVwYWRzCisgKi8KK3ZhciBY
Ym94MzYwQnV0dG9uOworKGZ1bmN0aW9uIChYYm94MzYwQnV0dG9uKSB7CisgICAgLyoqIEEgKi8K
KyAgICBYYm94MzYwQnV0dG9uW1hib3gzNjBCdXR0b25bIkEiXSA9IDBdID0gIkEiOworICAgIC8q
KiBCICovCisgICAgWGJveDM2MEJ1dHRvbltYYm94MzYwQnV0dG9uWyJCIl0gPSAxXSA9ICJCIjsK
KyAgICAvKiogWCAqLworICAgIFhib3gzNjBCdXR0b25bWGJveDM2MEJ1dHRvblsiWCJdID0gMl0g
PSAiWCI7CisgICAgLyoqIFkgKi8KKyAgICBYYm94MzYwQnV0dG9uW1hib3gzNjBCdXR0b25bIlki
XSA9IDNdID0gIlkiOworICAgIC8qKiBTdGFydCAqLworICAgIFhib3gzNjBCdXR0b25bWGJveDM2
MEJ1dHRvblsiU3RhcnQiXSA9IDRdID0gIlN0YXJ0IjsKKyAgICAvKiogQmFjayAqLworICAgIFhi
b3gzNjBCdXR0b25bWGJveDM2MEJ1dHRvblsiQmFjayJdID0gNV0gPSAiQmFjayI7CisgICAgLyoq
IExlZnQgYnV0dG9uICovCisgICAgWGJveDM2MEJ1dHRvbltYYm94MzYwQnV0dG9uWyJMQiJdID0g
Nl0gPSAiTEIiOworICAgIC8qKiBSaWdodCBidXR0b24gKi8KKyAgICBYYm94MzYwQnV0dG9uW1hi
b3gzNjBCdXR0b25bIlJCIl0gPSA3XSA9ICJSQiI7CisgICAgLyoqIExlZnQgc3RpY2sgKi8KKyAg
ICBYYm94MzYwQnV0dG9uW1hib3gzNjBCdXR0b25bIkxlZnRTdGljayJdID0gOF0gPSAiTGVmdFN0
aWNrIjsKKyAgICAvKiogUmlnaHQgc3RpY2sgKi8KKyAgICBYYm94MzYwQnV0dG9uW1hib3gzNjBC
dXR0b25bIlJpZ2h0U3RpY2siXSA9IDldID0gIlJpZ2h0U3RpY2siOworfSkoWGJveDM2MEJ1dHRv
biB8fCAoWGJveDM2MEJ1dHRvbiA9IHt9KSk7CisvKiogRGVmaW5lcyB2YWx1ZXMgZm9yIFhCb3gz
NjAgRFBhZCAgKi8KK3ZhciBYYm94MzYwRHBhZDsKKyhmdW5jdGlvbiAoWGJveDM2MERwYWQpIHsK
KyAgICAvKiogVXAgKi8KKyAgICBYYm94MzYwRHBhZFtYYm94MzYwRHBhZFsiVXAiXSA9IDBdID0g
IlVwIjsKKyAgICAvKiogRG93biAqLworICAgIFhib3gzNjBEcGFkW1hib3gzNjBEcGFkWyJEb3du
Il0gPSAxXSA9ICJEb3duIjsKKyAgICAvKiogTGVmdCAqLworICAgIFhib3gzNjBEcGFkW1hib3gz
NjBEcGFkWyJMZWZ0Il0gPSAyXSA9ICJMZWZ0IjsKKyAgICAvKiogUmlnaHQgKi8KKyAgICBYYm94
MzYwRHBhZFtYYm94MzYwRHBhZFsiUmlnaHQiXSA9IDNdID0gIlJpZ2h0IjsKK30pKFhib3gzNjBE
cGFkIHx8IChYYm94MzYwRHBhZCA9IHt9KSk7CisvKioKKyAqIERlZmluZXMgYSBYQm94MzYwIGdh
bWVwYWQKKyAqLwordmFyIFhib3gzNjBQYWQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1
cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRz
Il0oWGJveDM2MFBhZCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFhC
b3gzNjAgZ2FtZXBhZCBvYmplY3QKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgaWQgb2Yg
dGhpcyBnYW1lcGFkCisgICAgICogQHBhcmFtIGluZGV4IGRlZmluZXMgaXRzIGluZGV4CisgICAg
ICogQHBhcmFtIGdhbWVwYWQgZGVmaW5lcyB0aGUgaW50ZXJuYWwgSFRNTCBnYW1lcGFkIG9iamVj
dAorICAgICAqIEBwYXJhbSB4Ym94T25lIGRlZmluZXMgaWYgaXQgaXMgYSBYQm94IE9uZSBnYW1l
cGFkCisgICAgICovCisgICAgZnVuY3Rpb24gWGJveDM2MFBhZChpZCwgaW5kZXgsIGdhbWVwYWQs
IHhib3hPbmUpIHsKKyAgICAgICAgaWYgKHhib3hPbmUgPT09IHZvaWQgMCkgeyB4Ym94T25lID0g
ZmFsc2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgaWQsIGluZGV4
LCBnYW1lcGFkLCAwLCAxLCAyLCAzKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fbGVmdFRyaWdn
ZXIgPSAwOworICAgICAgICBfdGhpcy5fcmlnaHRUcmlnZ2VyID0gMDsKKyAgICAgICAgLyoqIE9i
c2VydmFibGUgcmFpc2VkIHdoZW4gYSBidXR0b24gaXMgcHJlc3NlZCAqLworICAgICAgICBfdGhp
cy5vbkJ1dHRvbkRvd25PYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKiBPYnNlcnZh
YmxlIHJhaXNlZCB3aGVuIGEgYnV0dG9uIGlzIHJlbGVhc2VkICovCisgICAgICAgIF90aGlzLm9u
QnV0dG9uVXBPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKiBPYnNlcnZhYmxlIHJh
aXNlZCB3aGVuIGEgcGFkIGlzIHByZXNzZWQgKi8KKyAgICAgICAgX3RoaXMub25QYWREb3duT2Jz
ZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKiogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiBh
IHBhZCBpcyByZWxlYXNlZCAqLworICAgICAgICBfdGhpcy5vblBhZFVwT2JzZXJ2YWJsZSA9IG5l
dyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFi
bGUiXSgpOworICAgICAgICBfdGhpcy5fYnV0dG9uQSA9IDA7CisgICAgICAgIF90aGlzLl9idXR0
b25CID0gMDsKKyAgICAgICAgX3RoaXMuX2J1dHRvblggPSAwOworICAgICAgICBfdGhpcy5fYnV0
dG9uWSA9IDA7CisgICAgICAgIF90aGlzLl9idXR0b25CYWNrID0gMDsKKyAgICAgICAgX3RoaXMu
X2J1dHRvblN0YXJ0ID0gMDsKKyAgICAgICAgX3RoaXMuX2J1dHRvbkxCID0gMDsKKyAgICAgICAg
X3RoaXMuX2J1dHRvblJCID0gMDsKKyAgICAgICAgX3RoaXMuX2J1dHRvbkxlZnRTdGljayA9IDA7
CisgICAgICAgIF90aGlzLl9idXR0b25SaWdodFN0aWNrID0gMDsKKyAgICAgICAgX3RoaXMuX2RQ
YWRVcCA9IDA7CisgICAgICAgIF90aGlzLl9kUGFkRG93biA9IDA7CisgICAgICAgIF90aGlzLl9k
UGFkTGVmdCA9IDA7CisgICAgICAgIF90aGlzLl9kUGFkUmlnaHQgPSAwOworICAgICAgICBfdGhp
cy5faXNYYm94T25lUGFkID0gZmFsc2U7CisgICAgICAgIF90aGlzLnR5cGUgPSBfR2FtZXBhZHNf
Z2FtZXBhZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHYW1lcGFkIl0uWEJPWDsKKyAg
ICAgICAgX3RoaXMuX2lzWGJveE9uZVBhZCA9IHhib3hPbmU7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gY2FsbCB3
aGVuIGxlZnQgdHJpZ2dlciBpcyBwcmVzc2VkCisgICAgICogQHBhcmFtIGNhbGxiYWNrIGRlZmlu
ZXMgdGhlIGNhbGxiYWNrIHRvIHVzZQorICAgICAqLworICAgIFhib3gzNjBQYWQucHJvdG90eXBl
Lm9ubGVmdHRyaWdnZXJjaGFuZ2VkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgIHRo
aXMuX29ubGVmdHRyaWdnZXJjaGFuZ2VkID0gY2FsbGJhY2s7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gcmlnaHQgdHJpZ2dlciBpcyBw
cmVzc2VkCisgICAgICogQHBhcmFtIGNhbGxiYWNrIGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIHVz
ZQorICAgICAqLworICAgIFhib3gzNjBQYWQucHJvdG90eXBlLm9ucmlnaHR0cmlnZ2VyY2hhbmdl
ZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9vbnJpZ2h0dHJpZ2dlcmNo
YW5nZWQgPSBjYWxsYmFjazsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYYm94
MzYwUGFkLnByb3RvdHlwZSwgImxlZnRUcmlnZ2VyIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgbGVmdCB0cmlnZ2VyIHZhbHVlCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZWZ0VHJpZ2dlcjsKKyAg
ICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGxlZnQgdHJpZ2dlciB2
YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsdWUpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9vbmxlZnR0cmlnZ2VyY2hhbmdlZCAmJiB0aGlzLl9sZWZ0VHJp
Z2dlciAhPT0gbmV3VmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbmxlZnR0cmlnZ2Vy
Y2hhbmdlZChuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9sZWZ0
VHJpZ2dlciA9IG5ld1ZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoWGJveDM2MFBhZC5wcm90b3R5cGUsICJyaWdodFRyaWdnZXIiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByaWdodCB0cmlnZ2VyIHZhbHVlCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9y
aWdodFRyaWdnZXI7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRo
ZSByaWdodCB0cmlnZ2VyIHZhbHVlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9u
IChuZXdWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX29ucmlnaHR0cmlnZ2VyY2hhbmdl
ZCAmJiB0aGlzLl9yaWdodFRyaWdnZXIgIT09IG5ld1ZhbHVlKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fb25yaWdodHRyaWdnZXJjaGFuZ2VkKG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX3JpZ2h0VHJpZ2dlciA9IG5ld1ZhbHVlOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gYSBi
dXR0b24gaXMgcHJlc3NlZAorICAgICAqIEBwYXJhbSBjYWxsYmFjayBkZWZpbmVzIHRoZSBjYWxs
YmFjayB0byB1c2UKKyAgICAgKi8KKyAgICBYYm94MzYwUGFkLnByb3RvdHlwZS5vbmJ1dHRvbmRv
d24gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5fb25idXR0b25kb3duID0g
Y2FsbGJhY2s7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0
byBjYWxsIHdoZW4gYSBidXR0b24gaXMgcmVsZWFzZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sg
ZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdXNlCisgICAgICovCisgICAgWGJveDM2MFBhZC5wcm90
b3R5cGUub25idXR0b251cCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9v
bmJ1dHRvbnVwID0gY2FsbGJhY2s7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRo
ZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gYSBwYWQgaXMgcHJlc3NlZAorICAgICAqIEBwYXJhbSBj
YWxsYmFjayBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byB1c2UKKyAgICAgKi8KKyAgICBYYm94MzYw
UGFkLnByb3RvdHlwZS5vbmRwYWRkb3duID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAg
IHRoaXMuX29uZHBhZGRvd24gPSBjYWxsYmFjazsKKyAgICB9OworICAgIC8qKgorICAgICAqIERl
ZmluZXMgdGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiBhIHBhZCBpcyByZWxlYXNlZAorICAgICAq
IEBwYXJhbSBjYWxsYmFjayBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byB1c2UKKyAgICAgKi8KKyAg
ICBYYm94MzYwUGFkLnByb3RvdHlwZS5vbmRwYWR1cCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewor
ICAgICAgICB0aGlzLl9vbmRwYWR1cCA9IGNhbGxiYWNrOworICAgIH07CisgICAgWGJveDM2MFBh
ZC5wcm90b3R5cGUuX3NldEJ1dHRvblZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlLCBjdXJyZW50
VmFsdWUsIGJ1dHRvblR5cGUpIHsKKyAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBjdXJyZW50VmFs
dWUpIHsKKyAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gMSkgeworICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9vbmJ1dHRvbmRvd24pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25i
dXR0b25kb3duKGJ1dHRvblR5cGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB0aGlzLm9uQnV0dG9uRG93bk9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGJ1dHRvblR5cGUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSAwKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuX29uYnV0dG9udXApIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5fb25idXR0b251cChidXR0b25UeXBlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdGhpcy5vbkJ1dHRvblVwT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoYnV0dG9u
VHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ld1ZhbHVl
OworICAgIH07CisgICAgWGJveDM2MFBhZC5wcm90b3R5cGUuX3NldERQYWRWYWx1ZSA9IGZ1bmN0
aW9uIChuZXdWYWx1ZSwgY3VycmVudFZhbHVlLCBidXR0b25UeXBlKSB7CisgICAgICAgIGlmIChu
ZXdWYWx1ZSAhPT0gY3VycmVudFZhbHVlKSB7CisgICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09
IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fb25kcGFkZG93bikgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9vbmRwYWRkb3duKGJ1dHRvblR5cGUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB0aGlzLm9uUGFkRG93bk9ic2VydmFibGUubm90aWZ5T2JzZXJ2
ZXJzKGJ1dHRvblR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5ld1ZhbHVl
ID09PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29uZHBhZHVwKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX29uZHBhZHVwKGJ1dHRvblR5cGUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB0aGlzLm9uUGFkVXBPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyhidXR0b25UeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bmV3VmFsdWU7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWGJveDM2MFBhZC5w
cm90b3R5cGUsICJidXR0b25BIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUg
dmFsdWUgb2YgdGhlIGBBYCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvbkE7CisgICAgICAgIH0sCisg
ICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYEFgIGJ1dHRvbgor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IHRoaXMuX2J1dHRvbkEgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9u
QSwgWGJveDM2MEJ1dHRvbi5BKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KFhib3gzNjBQYWQucHJvdG90eXBlLCAiYnV0dG9uQiIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSBgQmAgYnV0dG9uCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9i
dXR0b25COworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgdmFs
dWUgb2YgdGhlIGBCYCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9idXR0b25CID0gdGhpcy5fc2V0QnV0dG9uVmFs
dWUodmFsdWUsIHRoaXMuX2J1dHRvbkIsIFhib3gzNjBCdXR0b24uQik7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYYm94MzYwUGFkLnByb3RvdHlwZSwgImJ1
dHRvblgiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUg
YFhgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uWDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBgWGAgYnV0dG9uCisgICAgICAgICAqLwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYnV0dG9u
WCA9IHRoaXMuX3NldEJ1dHRvblZhbHVlKHZhbHVlLCB0aGlzLl9idXR0b25YLCBYYm94MzYwQnV0
dG9uLlgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWGJv
eDM2MFBhZC5wcm90b3R5cGUsICJidXR0b25ZIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBZYCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblk7CisgICAg
ICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYFlg
IGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2J1dHRvblkgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhp
cy5fYnV0dG9uWSwgWGJveDM2MEJ1dHRvbi5ZKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFhib3gzNjBQYWQucHJvdG90eXBlLCAiYnV0dG9uU3RhcnQiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYFN0YXJ0YCBi
dXR0b24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2J1dHRvblN0YXJ0OworICAgICAgICB9LAorICAgICAgICAvKioKKyAg
ICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBTdGFydGAgYnV0dG9uCisgICAgICAgICAq
LworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYnV0
dG9uU3RhcnQgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uU3RhcnQs
IFhib3gzNjBCdXR0b24uU3RhcnQpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoWGJveDM2MFBhZC5wcm90b3R5cGUsICJidXR0b25CYWNrIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBCYWNrYCBidXR0b24KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2J1dHRvbkJhY2s7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBT
ZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYEJhY2tgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvbkJhY2sgPSB0
aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uQmFjaywgWGJveDM2MEJ1dHRv
bi5CYWNrKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhi
b3gzNjBQYWQucHJvdG90eXBlLCAiYnV0dG9uTEIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYExlZnRgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uTEI7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0
aGUgYExlZnRgIGJ1dHRvbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1dHRvbkxCID0gdGhpcy5fc2V0QnV0dG9uVmFsdWUo
dmFsdWUsIHRoaXMuX2J1dHRvbkxCLCBYYm94MzYwQnV0dG9uLkxCKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhib3gzNjBQYWQucHJvdG90eXBlLCAiYnV0
dG9uUkIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUg
YFJpZ2h0YCBidXR0b24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblJCOworICAgICAgICB9LAorICAgICAgICAv
KioKKyAgICAgICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBSaWdodGAgYnV0dG9uCisgICAg
ICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhp
cy5fYnV0dG9uUkIgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uUkIs
IFhib3gzNjBCdXR0b24uUkIpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoWGJveDM2MFBhZC5wcm90b3R5cGUsICJidXR0b25MZWZ0U3RpY2siLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgTGVmdCBqb3lzdGljawor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fYnV0dG9uTGVmdFN0aWNrOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAg
ICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIExlZnQgam95c3RpY2sKKyAgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9idXR0b25M
ZWZ0U3RpY2sgPSB0aGlzLl9zZXRCdXR0b25WYWx1ZSh2YWx1ZSwgdGhpcy5fYnV0dG9uTGVmdFN0
aWNrLCBYYm94MzYwQnV0dG9uLkxlZnRTdGljayk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShYYm94MzYwUGFkLnByb3RvdHlwZSwgImJ1dHRvblJpZ2h0U3Rp
Y2siLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgUmln
aHQgam95c3RpY2sKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblJpZ2h0U3RpY2s7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgUmlnaHQgam95c3RpY2sK
KyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLl9idXR0b25SaWdodFN0aWNrID0gdGhpcy5fc2V0QnV0dG9uVmFsdWUodmFsdWUsIHRo
aXMuX2J1dHRvblJpZ2h0U3RpY2ssIFhib3gzNjBCdXR0b24uUmlnaHRTdGljayk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYYm94MzYwUGFkLnByb3RvdHlw
ZSwgImRQYWRVcCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHZhbHVlIG9m
IEQtcGFkIHVwCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9kUGFkVXA7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBELXBhZCB1cAorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2RQYWRVcCA9IHRoaXMu
X3NldERQYWRWYWx1ZSh2YWx1ZSwgdGhpcy5fZFBhZFVwLCBYYm94MzYwRHBhZC5VcCk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYYm94MzYwUGFkLnByb3Rv
dHlwZSwgImRQYWREb3duIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdmFs
dWUgb2YgRC1wYWQgZG93bgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZFBhZERvd247CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBELXBhZCBkb3duCisgICAgICAgICAq
LworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fZFBh
ZERvd24gPSB0aGlzLl9zZXREUGFkVmFsdWUodmFsdWUsIHRoaXMuX2RQYWREb3duLCBYYm94MzYw
RHBhZC5Eb3duKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFhib3gzNjBQYWQucHJvdG90eXBlLCAiZFBhZExlZnQiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiBELXBhZCBsZWZ0CisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kUGFkTGVmdDsKKyAg
ICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIEQtcGFk
IGxlZnQKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICB0aGlzLl9kUGFkTGVmdCA9IHRoaXMuX3NldERQYWRWYWx1ZSh2YWx1ZSwgdGhpcy5f
ZFBhZExlZnQsIFhib3gzNjBEcGFkLkxlZnQpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoWGJveDM2MFBhZC5wcm90b3R5cGUsICJkUGFkUmlnaHQiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiBELXBhZCByaWdodAorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fZFBhZFJpZ2h0OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0
cyB0aGUgdmFsdWUgb2YgRC1wYWQgcmlnaHQKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9kUGFkUmlnaHQgPSB0aGlzLl9zZXRE
UGFkVmFsdWUodmFsdWUsIHRoaXMuX2RQYWRSaWdodCwgWGJveDM2MERwYWQuUmlnaHQpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSB0aGUgZ2FtZXBhZCB0byBzeW5j
aHJvbml6ZSB3aXRoIGRldmljZSB2YWx1ZXMKKyAgICAgKi8KKyAgICBYYm94MzYwUGFkLnByb3Rv
dHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUudXBk
YXRlLmNhbGwodGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9pc1hib3hPbmVQYWQpIHsKKyAgICAg
ICAgICAgIHRoaXMuYnV0dG9uQSA9IHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9uc1swXS52YWx1
ZTsKKyAgICAgICAgICAgIHRoaXMuYnV0dG9uQiA9IHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9u
c1sxXS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYnV0dG9uWCA9IHRoaXMuYnJvd3NlckdhbWVw
YWQuYnV0dG9uc1syXS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYnV0dG9uWSA9IHRoaXMuYnJv
d3NlckdhbWVwYWQuYnV0dG9uc1szXS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYnV0dG9uTEIg
PSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbNF0udmFsdWU7CisgICAgICAgICAgICB0aGlz
LmJ1dHRvblJCID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzVdLnZhbHVlOworICAgICAg
ICAgICAgdGhpcy5sZWZ0VHJpZ2dlciA9IHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9uc1s2XS52
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMucmlnaHRUcmlnZ2VyID0gdGhpcy5icm93c2VyR2FtZXBh
ZC5idXR0b25zWzddLnZhbHVlOworICAgICAgICAgICAgdGhpcy5idXR0b25CYWNrID0gdGhpcy5i
cm93c2VyR2FtZXBhZC5idXR0b25zWzhdLnZhbHVlOworICAgICAgICAgICAgdGhpcy5idXR0b25T
dGFydCA9IHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9uc1s5XS52YWx1ZTsKKyAgICAgICAgICAg
IHRoaXMuYnV0dG9uTGVmdFN0aWNrID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzEwXS52
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYnV0dG9uUmlnaHRTdGljayA9IHRoaXMuYnJvd3Nlckdh
bWVwYWQuYnV0dG9uc1sxMV0udmFsdWU7CisgICAgICAgICAgICB0aGlzLmRQYWRVcCA9IHRoaXMu
YnJvd3NlckdhbWVwYWQuYnV0dG9uc1sxMl0udmFsdWU7CisgICAgICAgICAgICB0aGlzLmRQYWRE
b3duID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzEzXS52YWx1ZTsKKyAgICAgICAgICAg
IHRoaXMuZFBhZExlZnQgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbMTRdLnZhbHVlOwor
ICAgICAgICAgICAgdGhpcy5kUGFkUmlnaHQgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNb
MTVdLnZhbHVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5i
dXR0b25BID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzBdLnZhbHVlOworICAgICAgICAg
ICAgdGhpcy5idXR0b25CID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzFdLnZhbHVlOwor
ICAgICAgICAgICAgdGhpcy5idXR0b25YID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzJd
LnZhbHVlOworICAgICAgICAgICAgdGhpcy5idXR0b25ZID0gdGhpcy5icm93c2VyR2FtZXBhZC5i
dXR0b25zWzNdLnZhbHVlOworICAgICAgICAgICAgdGhpcy5idXR0b25MQiA9IHRoaXMuYnJvd3Nl
ckdhbWVwYWQuYnV0dG9uc1s0XS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYnV0dG9uUkIgPSB0
aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbNV0udmFsdWU7CisgICAgICAgICAgICB0aGlzLmxl
ZnRUcmlnZ2VyID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25zWzZdLnZhbHVlOworICAgICAg
ICAgICAgdGhpcy5yaWdodFRyaWdnZXIgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbN10u
dmFsdWU7CisgICAgICAgICAgICB0aGlzLmJ1dHRvbkJhY2sgPSB0aGlzLmJyb3dzZXJHYW1lcGFk
LmJ1dHRvbnNbOF0udmFsdWU7CisgICAgICAgICAgICB0aGlzLmJ1dHRvblN0YXJ0ID0gdGhpcy5i
cm93c2VyR2FtZXBhZC5idXR0b25zWzldLnZhbHVlOworICAgICAgICAgICAgdGhpcy5idXR0b25M
ZWZ0U3RpY2sgPSB0aGlzLmJyb3dzZXJHYW1lcGFkLmJ1dHRvbnNbMTBdLnZhbHVlOworICAgICAg
ICAgICAgdGhpcy5idXR0b25SaWdodFN0aWNrID0gdGhpcy5icm93c2VyR2FtZXBhZC5idXR0b25z
WzExXS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuZFBhZFVwID0gdGhpcy5icm93c2VyR2FtZXBh
ZC5idXR0b25zWzEyXS52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuZFBhZERvd24gPSB0aGlzLmJy
b3dzZXJHYW1lcGFkLmJ1dHRvbnNbMTNdLnZhbHVlOworICAgICAgICAgICAgdGhpcy5kUGFkTGVm
dCA9IHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9uc1sxNF0udmFsdWU7CisgICAgICAgICAgICB0
aGlzLmRQYWRSaWdodCA9IHRoaXMuYnJvd3NlckdhbWVwYWQuYnV0dG9uc1sxNV0udmFsdWU7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBnYW1lcGFkCisg
ICAgICovCisgICAgWGJveDM2MFBhZC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7CisgICAgICAgIHRo
aXMub25CdXR0b25Eb3duT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQnV0dG9u
VXBPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25QYWREb3duT2JzZXJ2YWJsZS5j
bGVhcigpOworICAgICAgICB0aGlzLm9uUGFkVXBPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgfTsK
KyAgICByZXR1cm4gWGJveDM2MFBhZDsKK30oX0dhbWVwYWRzX2dhbWVwYWRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siR2FtZXBhZCJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vR2l6bW9zL2F4aXNEcmFnR2l6bW8udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9HaXptb3MvYXhpc0RyYWdHaXptby50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
QXhpc0RyYWdHaXptbyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBeGlz
RHJhZ0dpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBeGlzRHJhZ0dpem1vOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90
c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAi
Li9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNo
ZXNfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL3RyYW5zZm9ybU5vZGUgKi8gIi4vTWVzaGVzL3RyYW5z
Zm9ybU5vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJz
X2N5bGluZGVyQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL0J1aWxkZXJzL2N5bGluZGVyQnVpbGRlciAqLyAiLi9N
ZXNoZXMvQnVpbGRlcnMvY3lsaW5kZXJCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0JlaGF2aW9yc19NZXNoZXNfcG9pbnRlckRyYWdCZWhhdmlvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQmVoYXZpb3JzL01l
c2hlcy9wb2ludGVyRHJhZ0JlaGF2aW9yICovICIuL0JlaGF2aW9ycy9NZXNoZXMvcG9pbnRlckRy
YWdCZWhhdmlvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9naXptb19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9naXptbyAq
LyAiLi9HaXptb3MvZ2l6bW8udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUmVuZGVy
aW5nX3V0aWxpdHlMYXllclJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9SZW5kZXJpbmcvdXRpbGl0eUxheWVyUmVuZGVyZXIg
Ki8gIi4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJlbmRlcmVyLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc3RhbmRh
cmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICov
ICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKworCisKKworCisKKworCisKKworLyoqCisgKiBT
aW5nbGUgYXhpcyBkcmFnIGdpem1vCisgKi8KK3ZhciBBeGlzRHJhZ0dpem1vID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKEF4aXNEcmFnR2l6bW8sIF9zdXBlcik7CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhbiBBeGlzRHJhZ0dpem1vCisgICAgICogQHBhcmFtIGdpem1vTGF5ZXIg
VGhlIHV0aWxpdHkgbGF5ZXIgdGhlIGdpem1vIHdpbGwgYmUgYWRkZWQgdG8KKyAgICAgKiBAcGFy
YW0gZHJhZ0F4aXMgVGhlIGF4aXMgd2hpY2ggdGhlIGdpem1vIHdpbGwgYmUgYWJsZSB0byBkcmFn
IG9uCisgICAgICogQHBhcmFtIGNvbG9yIFRoZSBjb2xvciBvZiB0aGUgZ2l6bW8KKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBBeGlzRHJhZ0dpem1vKGRyYWdBeGlzLCBjb2xvciwgZ2l6bW9MYXllciwg
cGFyZW50KSB7CisgICAgICAgIGlmIChjb2xvciA9PT0gdm9pZCAwKSB7IGNvbG9yID0gX01hdGhz
X21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ29sb3IzIl0uR3JheSgp
OyB9CisgICAgICAgIGlmIChnaXptb0xheWVyID09PSB2b2lkIDApIHsgZ2l6bW9MYXllciA9IF9S
ZW5kZXJpbmdfdXRpbGl0eUxheWVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
X1siVXRpbGl0eUxheWVyUmVuZGVyZXIiXS5EZWZhdWx0VXRpbGl0eUxheWVyOyB9CisgICAgICAg
IGlmIChwYXJlbnQgPT09IHZvaWQgMCkgeyBwYXJlbnQgPSBudWxsOyB9CisgICAgICAgIHZhciBf
dGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGdpem1vTGF5ZXIpIHx8IHRoaXM7CisgICAgICAgIF90
aGlzLl9wb2ludGVyT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogRHJh
ZyBkaXN0YW5jZSBpbiBiYWJ5bG9uIHVuaXRzIHRoYXQgdGhlIGdpem1vIHdpbGwgc25hcCB0byB3
aGVuIGRyYWdnZWQgKERlZmF1bHQ6IDApCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5zbmFw
RGlzdGFuY2UgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogRXZlbnQgdGhhdCBmaXJlcyBl
YWNoIHRpbWUgdGhlIGdpem1vIHNuYXBzIHRvIGEgbmV3IGxvY2F0aW9uLgorICAgICAgICAgKiAq
IHNuYXBEaXN0YW5jZSBpcyB0aGUgdGhlIGNoYW5nZSBpbiBkaXN0YW5jZQorICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMub25TbmFwT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhp
cy5faXNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX3BhcmVudCA9IG51bGw7CisgICAg
ICAgIF90aGlzLl9wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIC8vIENyZWF0ZSBNYXRlcmlhbAor
ICAgICAgICBfdGhpcy5fY29sb3JlZE1hdGVyaWFsID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRhcmRN
YXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJTdGFuZGFyZE1hdGVyaWFsIl0o
IiIsIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpOworICAgICAgICBfdGhpcy5fY29sb3Jl
ZE1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGNvbG9yOworICAgICAgICBfdGhpcy5fY29sb3JlZE1h
dGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBjb2xvci5zdWJ0cmFjdChuZXcgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ29sb3IzIl0oMC4xLCAwLjEsIDAuMSkp
OworICAgICAgICBfdGhpcy5faG92ZXJNYXRlcmlhbCA9IG5ldyBfTWF0ZXJpYWxzX3N0YW5kYXJk
TWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siU3RhbmRhcmRNYXRlcmlhbCJd
KCIiLCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKTsKKyAgICAgICAgX3RoaXMuX2hvdmVy
TWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gY29sb3IuYWRkKG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJDb2xvcjMiXSgwLjMsIDAuMywgMC4zKSk7Cisg
ICAgICAgIC8vIEJ1aWxkIG1lc2ggb24gcm9vdCBub2RlCisgICAgICAgIF90aGlzLl9hcnJvdyA9
IEF4aXNEcmFnR2l6bW8uX0NyZWF0ZUFycm93KGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUs
IF90aGlzLl9jb2xvcmVkTWF0ZXJpYWwpOworICAgICAgICBfdGhpcy5fYXJyb3cubG9va0F0KF90
aGlzLl9yb290TWVzaC5wb3NpdGlvbi5hZGQoZHJhZ0F4aXMpKTsKKyAgICAgICAgX3RoaXMuX2Fy
cm93LnNjYWxpbmcuc2NhbGVJblBsYWNlKDEgLyAzKTsKKyAgICAgICAgX3RoaXMuX2Fycm93LnBh
cmVudCA9IF90aGlzLl9yb290TWVzaDsKKyAgICAgICAgdmFyIGN1cnJlbnRTbmFwRHJhZ0Rpc3Rh
bmNlID0gMDsKKyAgICAgICAgdmFyIHRtcFZlY3RvciA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKCk7CisgICAgICAgIHZhciB0
bXBTbmFwRXZlbnQgPSB7IHNuYXBEaXN0YW5jZTogMCB9OworICAgICAgICAvLyBBZGQgZHJhZyBi
ZWhhdmlvciB0byBoYW5kbGUgZXZlbnRzIHdoZW4gdGhlIGdpem1vIGlzIGRyYWdnZWQKKyAgICAg
ICAgX3RoaXMuZHJhZ0JlaGF2aW9yID0gbmV3IF9CZWhhdmlvcnNfTWVzaGVzX3BvaW50ZXJEcmFn
QmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUG9pbnRlckRyYWdCZWhhdmlv
ciJdKHsgZHJhZ0F4aXM6IGRyYWdBeGlzIH0pOworICAgICAgICBfdGhpcy5kcmFnQmVoYXZpb3Iu
bW92ZUF0dGFjaGVkID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9yb290TWVzaC5hZGRCZWhhdmlv
cihfdGhpcy5kcmFnQmVoYXZpb3IpOworICAgICAgICB2YXIgbG9jYWxEZWx0YSA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKCk7
CisgICAgICAgIHZhciB0bXBNYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdKCk7CisgICAgICAgIF90aGlzLmRyYWdCZWhh
dmlvci5vbkRyYWdPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAg
IGlmIChfdGhpcy5hdHRhY2hlZE1lc2gpIHsKKyAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGRl
bHRhIHRvIGxvY2FsIHRyYW5zbGF0aW9uIGlmIGl0IGhhcyBhIHBhcmVudAorICAgICAgICAgICAg
ICAgIGlmIChfdGhpcy5hdHRhY2hlZE1lc2gucGFyZW50KSB7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLmF0dGFjaGVkTWVzaC5wYXJlbnQuY29tcHV0ZVdvcmxkTWF0cml4KCkuaW52ZXJ0VG9S
ZWYodG1wTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgdG1wTWF0cml4LnNldFRyYW5zbGF0
aW9uRnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1D
b29yZGluYXRlc1RvUmVmKGV2ZW50LmRlbHRhLCB0bXBNYXRyaXgsIGxvY2FsRGVsdGEpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgbG9jYWxEZWx0YS5jb3B5RnJvbShldmVudC5kZWx0YSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIC8vIFNuYXBwaW5nIGxvZ2ljCisgICAgICAgICAgICAgICAgaWYgKF90
aGlzLnNuYXBEaXN0YW5jZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmF0dGFj
aGVkTWVzaC5wb3NpdGlvbi5hZGRJblBsYWNlKGxvY2FsRGVsdGEpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNu
YXBEcmFnRGlzdGFuY2UgKz0gZXZlbnQuZHJhZ0Rpc3RhbmNlOworICAgICAgICAgICAgICAgICAg
ICBpZiAoTWF0aC5hYnMoY3VycmVudFNuYXBEcmFnRGlzdGFuY2UpID4gX3RoaXMuc25hcERpc3Rh
bmNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHJhZ1N0ZXBzID0gTWF0aC5mbG9v
cihNYXRoLmFicyhjdXJyZW50U25hcERyYWdEaXN0YW5jZSkgLyBfdGhpcy5zbmFwRGlzdGFuY2Up
OworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNuYXBEcmFnRGlzdGFuY2UgPSBjdXJy
ZW50U25hcERyYWdEaXN0YW5jZSAlIF90aGlzLnNuYXBEaXN0YW5jZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2FsRGVsdGEubm9ybWFsaXplVG9SZWYodG1wVmVjdG9yKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRtcFZlY3Rvci5zY2FsZUluUGxhY2UoX3RoaXMuc25hcERpc3RhbmNl
ICogZHJhZ1N0ZXBzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmF0dGFjaGVkTWVz
aC5wb3NpdGlvbi5hZGRJblBsYWNlKHRtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0bXBTbmFwRXZlbnQuc25hcERpc3RhbmNlID0gX3RoaXMuc25hcERpc3RhbmNlICogZHJhZ1N0
ZXBzOworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub25TbmFwT2JzZXJ2YWJsZS5ub3Rp
ZnlPYnNlcnZlcnModG1wU25hcEV2ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLl9w
b2ludGVyT2JzZXJ2ZXIgPSBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lLm9uUG9pbnRlck9i
c2VydmFibGUuYWRkKGZ1bmN0aW9uIChwb2ludGVySW5mbykgeworICAgICAgICAgICAgaWYgKF90
aGlzLl9jdXN0b21NZXNoU2V0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIGlzSG92ZXJlZCA9IHBvaW50ZXJJbmZvLnBpY2tJbmZvICYm
IChfdGhpcy5fcm9vdE1lc2guZ2V0Q2hpbGRNZXNoZXMoKS5pbmRleE9mKHBvaW50ZXJJbmZvLnBp
Y2tJbmZvLnBpY2tlZE1lc2gpICE9IC0xKTsKKyAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IGlz
SG92ZXJlZCA/IF90aGlzLl9ob3Zlck1hdGVyaWFsIDogX3RoaXMuX2NvbG9yZWRNYXRlcmlhbDsK
KyAgICAgICAgICAgIF90aGlzLl9yb290TWVzaC5nZXRDaGlsZE1lc2hlcygpLmZvckVhY2goZnVu
Y3Rpb24gKG0pIHsKKyAgICAgICAgICAgICAgICBtLm1hdGVyaWFsID0gbWF0ZXJpYWw7CisgICAg
ICAgICAgICAgICAgaWYgKG0uY29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgbS5jb2xvciA9
IG1hdGVyaWFsLmRpZmZ1c2VDb2xvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHZhciBsaWdodCA9IGdpem1vTGF5ZXIuX2dldFNoYXJl
ZEdpem1vTGlnaHQoKTsKKyAgICAgICAgbGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVzID0gbGlnaHQu
aW5jbHVkZWRPbmx5TWVzaGVzLmNvbmNhdChfdGhpcy5fcm9vdE1lc2guZ2V0Q2hpbGRNZXNoZXMo
ZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAq
LworICAgIEF4aXNEcmFnR2l6bW8uX0NyZWF0ZUFycm93ID0gZnVuY3Rpb24gKHNjZW5lLCBtYXRl
cmlhbCkgeworICAgICAgICB2YXIgYXJyb3cgPSBuZXcgX01lc2hlc190cmFuc2Zvcm1Ob2RlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRyYW5zZm9ybU5vZGUiXSgiYXJyb3ciLCBzY2Vu
ZSk7CisgICAgICAgIHZhciBjeWxpbmRlciA9IF9NZXNoZXNfQnVpbGRlcnNfY3lsaW5kZXJCdWls
ZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkN5bGluZGVyQnVpbGRlciJdLkNyZWF0
ZUN5bGluZGVyKCJjeWxpbmRlciIsIHsgZGlhbWV0ZXJUb3A6IDAsIGhlaWdodDogMC4wNzUsIGRp
YW1ldGVyQm90dG9tOiAwLjAzNzUsIHRlc3NlbGxhdGlvbjogOTYgfSwgc2NlbmUpOworICAgICAg
ICB2YXIgbGluZSA9IF9NZXNoZXNfQnVpbGRlcnNfY3lsaW5kZXJCdWlsZGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIkN5bGluZGVyQnVpbGRlciJdLkNyZWF0ZUN5bGluZGVyKCJjeWxp
bmRlciIsIHsgZGlhbWV0ZXJUb3A6IDAuMDA1LCBoZWlnaHQ6IDAuMjc1LCBkaWFtZXRlckJvdHRv
bTogMC4wMDUsIHRlc3NlbGxhdGlvbjogOTYgfSwgc2NlbmUpOworICAgICAgICBsaW5lLm1hdGVy
aWFsID0gbWF0ZXJpYWw7CisgICAgICAgIGN5bGluZGVyLnBhcmVudCA9IGFycm93OworICAgICAg
ICBsaW5lLnBhcmVudCA9IGFycm93OworICAgICAgICAvLyBQb3NpdGlvbiBhcnJvdyBwb2ludGlu
ZyBpbiBpdHMgZHJhZyBheGlzCisgICAgICAgIGN5bGluZGVyLm1hdGVyaWFsID0gbWF0ZXJpYWw7
CisgICAgICAgIGN5bGluZGVyLnJvdGF0aW9uLnggPSBNYXRoLlBJIC8gMjsKKyAgICAgICAgY3ls
aW5kZXIucG9zaXRpb24ueiArPSAwLjM7CisgICAgICAgIGxpbmUucG9zaXRpb24ueiArPSAwLjI3
NSAvIDI7CisgICAgICAgIGxpbmUucm90YXRpb24ueCA9IE1hdGguUEkgLyAyOworICAgICAgICBy
ZXR1cm4gYXJyb3c7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEF4aXNEcmFnR2l6
bW8uX0NyZWF0ZUFycm93SW5zdGFuY2UgPSBmdW5jdGlvbiAoc2NlbmUsIGFycm93KSB7CisgICAg
ICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfTWVzaGVzX3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siVHJhbnNmb3JtTm9kZSJdKCJhcnJvdyIsIHNjZW5lKTsKKyAgICAg
ICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IGFycm93LmdldENoaWxkTWVzaGVzKCk7IF9pIDwgX2Eu
bGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IF9hW19pXTsKKyAgICAgICAg
ICAgIHZhciBjaGlsZEluc3RhbmNlID0gbWVzaC5jcmVhdGVJbnN0YW5jZShtZXNoLm5hbWUpOwor
ICAgICAgICAgICAgY2hpbGRJbnN0YW5jZS5wYXJlbnQgPSBpbnN0YW5jZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfTsKKyAgICBBeGlzRHJhZ0dpem1vLnByb3Rv
dHlwZS5fYXR0YWNoZWRNZXNoQ2hhbmdlZCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBp
ZiAodGhpcy5kcmFnQmVoYXZpb3IpIHsKKyAgICAgICAgICAgIHRoaXMuZHJhZ0JlaGF2aW9yLmVu
YWJsZWQgPSB2YWx1ZSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KEF4aXNEcmFnR2l6bW8ucHJvdG90eXBlLCAiaXNFbmFibGVkIiwg
eworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9p
c0VuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0aGUgZ2l6
bW8gaXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAgaWYg
KCF2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRNZXNoID0gbnVsbDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0aGlz
Ll9wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hlZE1lc2ggPSB0aGlz
Ll9wYXJlbnQuYXR0YWNoZWRNZXNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIGdpem1v
CisgICAgICovCisgICAgQXhpc0RyYWdHaXptby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5vblNuYXBPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRo
aXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLnJlbW92
ZSh0aGlzLl9wb2ludGVyT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLmRyYWdCZWhhdmlvci5kZXRh
Y2goKTsKKyAgICAgICAgaWYgKHRoaXMuX2Fycm93KSB7CisgICAgICAgICAgICB0aGlzLl9hcnJv
dy5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgW3RoaXMuX2NvbG9yZWRNYXRlcmlhbCwg
dGhpcy5faG92ZXJNYXRlcmlhbF0uZm9yRWFjaChmdW5jdGlvbiAobWF0bCkgeworICAgICAgICAg
ICAgaWYgKG1hdGwpIHsKKyAgICAgICAgICAgICAgICBtYXRsLmRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxs
KHRoaXMpOworICAgIH07CisgICAgcmV0dXJuIEF4aXNEcmFnR2l6bW87Cit9KF9naXptb19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJHaXptbyJdKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vR2l6bW9zL2F4aXNTY2FsZUdpem1vLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dpem1vcy9heGlzU2NhbGVHaXptby50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IEF4aXNTY2FsZUdpem1vICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkF4aXNTY2FsZUdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBeGlzU2NhbGVHaXpt
bzsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0
aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2Fic3RyYWN0TWVzaCAqLyAiLi9N
ZXNoZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hl
c19CdWlsZGVyc19ib3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvYm94QnVpbGRlciAqLyAiLi9N
ZXNoZXMvQnVpbGRlcnMvYm94QnVpbGRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NZXNoZXNfQnVpbGRlcnNfY3lsaW5kZXJCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvY3lsaW5k
ZXJCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1aWxkZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVy
aWFscy9zdGFuZGFyZE1hdGVyaWFsICovICIuL01hdGVyaWFscy9zdGFuZGFyZE1hdGVyaWFsLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0JlaGF2aW9yc19NZXNoZXNfcG9pbnRlckRy
YWdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vQmVoYXZpb3JzL01lc2hlcy9wb2ludGVyRHJhZ0JlaGF2aW9yICovICIuL0Jl
aGF2aW9ycy9NZXNoZXMvcG9pbnRlckRyYWdCZWhhdmlvci50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9naXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9naXptbyAqLyAiLi9HaXptb3MvZ2l6bW8udHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfUmVuZGVyaW5nX3V0aWxpdHlMYXllclJlbmRlcmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9SZW5kZXJp
bmcvdXRpbGl0eUxheWVyUmVuZGVyZXIgKi8gIi4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJlbmRl
cmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKworCisKKworCisK
KworCisKKworCisvKioKKyAqIFNpbmdsZSBheGlzIHNjYWxlIGdpem1vCisgKi8KK3ZhciBBeGlz
U2NhbGVHaXptbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShBeGlzU2NhbGVHaXpt
bywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIEF4aXNTY2FsZUdpem1vCisg
ICAgICogQHBhcmFtIGdpem1vTGF5ZXIgVGhlIHV0aWxpdHkgbGF5ZXIgdGhlIGdpem1vIHdpbGwg
YmUgYWRkZWQgdG8KKyAgICAgKiBAcGFyYW0gZHJhZ0F4aXMgVGhlIGF4aXMgd2hpY2ggdGhlIGdp
em1vIHdpbGwgYmUgYWJsZSB0byBzY2FsZSBvbgorICAgICAqIEBwYXJhbSBjb2xvciBUaGUgY29s
b3Igb2YgdGhlIGdpem1vCisgICAgICovCisgICAgZnVuY3Rpb24gQXhpc1NjYWxlR2l6bW8oZHJh
Z0F4aXMsIGNvbG9yLCBnaXptb0xheWVyLCBwYXJlbnQpIHsKKyAgICAgICAgaWYgKGNvbG9yID09
PSB2b2lkIDApIHsgY29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTBfX1siQ29sb3IzIl0uR3JheSgpOyB9CisgICAgICAgIGlmIChnaXptb0xheWVyID09
PSB2b2lkIDApIHsgZ2l6bW9MYXllciA9IF9SZW5kZXJpbmdfdXRpbGl0eUxheWVyUmVuZGVyZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVXRpbGl0eUxheWVyUmVuZGVyZXIiXS5EZWZh
dWx0VXRpbGl0eUxheWVyOyB9CisgICAgICAgIGlmIChwYXJlbnQgPT09IHZvaWQgMCkgeyBwYXJl
bnQgPSBudWxsOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGdpem1v
TGF5ZXIpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9wb2ludGVyT2JzZXJ2ZXIgPSBudWxsOwor
ICAgICAgICAvKioKKyAgICAgICAgICogU2NhbGUgZGlzdGFuY2UgaW4gYmFieWxvbiB1bml0cyB0
aGF0IHRoZSBnaXptbyB3aWxsIHNuYXAgdG8gd2hlbiBkcmFnZ2VkIChEZWZhdWx0OiAwKQorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuc25hcERpc3RhbmNlID0gMDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEV2ZW50IHRoYXQgZmlyZXMgZWFjaCB0aW1lIHRoZSBnaXptbyBzbmFwcyB0byBh
IG5ldyBsb2NhdGlvbi4KKyAgICAgICAgICogKiBzbmFwRGlzdGFuY2UgaXMgdGhlIHRoZSBjaGFu
Z2UgaW4gZGlzdGFuY2UKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uU25hcE9ic2VydmFi
bGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJP
YnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBzY2FsaW5nIG9w
ZXJhdGlvbiBzaG91bGQgYmUgZG9uZSBvbiBhbGwgYXhpcyAoZGVmYXVsdDogZmFsc2UpCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy51bmlmb3JtU2NhbGluZyA9IGZhbHNlOworICAgICAgICBf
dGhpcy5faXNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX3BhcmVudCA9IG51bGw7Cisg
ICAgICAgIF90aGlzLl9wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIC8vIENyZWF0ZSBNYXRlcmlh
bAorICAgICAgICBfdGhpcy5fY29sb3JlZE1hdGVyaWFsID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRh
cmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTdGFuZGFyZE1hdGVyaWFs
Il0oIiIsIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpOworICAgICAgICBfdGhpcy5fY29s
b3JlZE1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGNvbG9yOworICAgICAgICBfdGhpcy5fY29sb3Jl
ZE1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBjb2xvci5zdWJ0cmFjdChuZXcgX01hdGhzX21hdGhf
Y29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNvbG9yMyJdKDAuMSwgMC4xLCAw
LjEpKTsKKyAgICAgICAgX3RoaXMuX2hvdmVyTWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFsc19zdGFu
ZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlN0YW5kYXJkTWF0ZXJp
YWwiXSgiIiwgZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgIF90aGlzLl9o
b3Zlck1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGNvbG9yLmFkZChuZXcgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNvbG9yMyJdKDAuMywgMC4zLCAwLjMp
KTsKKyAgICAgICAgLy8gQnVpbGQgbWVzaCBvbiByb290IG5vZGUKKyAgICAgICAgX3RoaXMuX2Fy
cm93ID0gbmV3IF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIkFic3RyYWN0TWVzaCJdKCIiLCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKTsKKyAg
ICAgICAgdmFyIGFycm93TWVzaCA9IF9NZXNoZXNfQnVpbGRlcnNfYm94QnVpbGRlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJCb3hCdWlsZGVyIl0uQ3JlYXRlQm94KCJ5UG9zTWVzaCIs
IHsgc2l6ZTogMC40IH0sIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpOworICAgICAgICB2
YXIgYXJyb3dUYWlsID0gX01lc2hlc19CdWlsZGVyc19jeWxpbmRlckJ1aWxkZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siQ3lsaW5kZXJCdWlsZGVyIl0uQ3JlYXRlQ3lsaW5kZXIoImN5
bGluZGVyIiwgeyBkaWFtZXRlclRvcDogMC4wMDUsIGhlaWdodDogMC4yNzUsIGRpYW1ldGVyQm90
dG9tOiAwLjAwNSwgdGVzc2VsbGF0aW9uOiA5NiB9LCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNj
ZW5lKTsKKyAgICAgICAgYXJyb3dUYWlsLm1hdGVyaWFsID0gX3RoaXMuX2NvbG9yZWRNYXRlcmlh
bDsKKyAgICAgICAgX3RoaXMuX2Fycm93LmFkZENoaWxkKGFycm93TWVzaCk7CisgICAgICAgIF90
aGlzLl9hcnJvdy5hZGRDaGlsZChhcnJvd1RhaWwpOworICAgICAgICAvLyBQb3NpdGlvbiBhcnJv
dyBwb2ludGluZyBpbiBpdHMgZHJhZyBheGlzCisgICAgICAgIGFycm93TWVzaC5zY2FsaW5nLnNj
YWxlSW5QbGFjZSgwLjEpOworICAgICAgICBhcnJvd01lc2gubWF0ZXJpYWwgPSBfdGhpcy5fY29s
b3JlZE1hdGVyaWFsOworICAgICAgICBhcnJvd01lc2gucm90YXRpb24ueCA9IE1hdGguUEkgLyAy
OworICAgICAgICBhcnJvd01lc2gucG9zaXRpb24ueiArPSAwLjM7CisgICAgICAgIGFycm93VGFp
bC5wb3NpdGlvbi56ICs9IDAuMjc1IC8gMjsKKyAgICAgICAgYXJyb3dUYWlsLnJvdGF0aW9uLngg
PSBNYXRoLlBJIC8gMjsKKyAgICAgICAgX3RoaXMuX2Fycm93Lmxvb2tBdChfdGhpcy5fcm9vdE1l
c2gucG9zaXRpb24uYWRkKGRyYWdBeGlzKSk7CisgICAgICAgIF90aGlzLl9yb290TWVzaC5hZGRD
aGlsZChfdGhpcy5fYXJyb3cpOworICAgICAgICBfdGhpcy5fYXJyb3cuc2NhbGluZy5zY2FsZUlu
UGxhY2UoMSAvIDMpOworICAgICAgICAvLyBBZGQgZHJhZyBiZWhhdmlvciB0byBoYW5kbGUgZXZl
bnRzIHdoZW4gdGhlIGdpem1vIGlzIGRyYWdnZWQKKyAgICAgICAgX3RoaXMuZHJhZ0JlaGF2aW9y
ID0gbmV3IF9CZWhhdmlvcnNfTWVzaGVzX3BvaW50ZXJEcmFnQmVoYXZpb3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siUG9pbnRlckRyYWdCZWhhdmlvciJdKHsgZHJhZ0F4aXM6IGRyYWdB
eGlzIH0pOworICAgICAgICBfdGhpcy5kcmFnQmVoYXZpb3IubW92ZUF0dGFjaGVkID0gZmFsc2U7
CisgICAgICAgIF90aGlzLl9yb290TWVzaC5hZGRCZWhhdmlvcihfdGhpcy5kcmFnQmVoYXZpb3Ip
OworICAgICAgICB2YXIgY3VycmVudFNuYXBEcmFnRGlzdGFuY2UgPSAwOworICAgICAgICB2YXIg
dG1wVmVjdG9yID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJWZWN0b3IzIl0oKTsKKyAgICAgICAgdmFyIHRtcFNuYXBFdmVudCA9IHsgc25hcERp
c3RhbmNlOiAwIH07CisgICAgICAgIF90aGlzLmRyYWdCZWhhdmlvci5vbkRyYWdPYnNlcnZhYmxl
LmFkZChmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5hdHRhY2hlZE1l
c2gpIHsKKyAgICAgICAgICAgICAgICAvLyBEcmFnIHN0cmVuZ3RoIGlzIG1vZGlmaWVkIGJ5IHRo
ZSBzY2FsZSBvZiB0aGUgZ2l6bW8gKGVnLiBmb3Igc21hbGwgb2JqZWN0cyBsaWtlIGJvb21ib3gg
dGhlIHN0cmVuZ3RoIHdpbGwgYmUgaW5jcmVhc2VkIHRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBs
YXJnZXIgb2JqZWN0cykKKyAgICAgICAgICAgICAgICB2YXIgZHJhZ1N0cmVuZ3RoID0gZXZlbnQu
ZHJhZ0Rpc3RhbmNlICogKChfdGhpcy5zY2FsZVJhdGlvICogMykgLyBfdGhpcy5fcm9vdE1lc2gu
c2NhbGluZy5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgLy8gU25hcHBpbmcgbG9naWMKKyAg
ICAgICAgICAgICAgICB2YXIgc25hcHBlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHZhciBk
cmFnU3RlcHMgPSAwOworICAgICAgICAgICAgICAgIGlmIChfdGhpcy51bmlmb3JtU2NhbGluZykg
eworICAgICAgICAgICAgICAgICAgICBfdGhpcy5hdHRhY2hlZE1lc2guc2NhbGluZy5ub3JtYWxp
emVUb1JlZih0bXBWZWN0b3IpOworICAgICAgICAgICAgICAgICAgICBpZiAodG1wVmVjdG9yLnkg
PCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXBWZWN0b3Iuc2NhbGVJblBsYWNlKC0x
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdG1wVmVjdG9yLmNvcHlGcm9tKGRyYWdB
eGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLnNuYXBE
aXN0YW5jZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcFZlY3Rvci5zY2FsZVRvUmVm
KGRyYWdTdHJlbmd0aCwgdG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTbmFwRHJhZ0Rpc3RhbmNl
ICs9IGRyYWdTdHJlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGN1cnJl
bnRTbmFwRHJhZ0Rpc3RhbmNlKSA+IF90aGlzLnNuYXBEaXN0YW5jZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZHJhZ1N0ZXBzID0gTWF0aC5mbG9vcihNYXRoLmFicyhjdXJyZW50U25hcERy
YWdEaXN0YW5jZSkgLyBfdGhpcy5zbmFwRGlzdGFuY2UpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGN1cnJlbnRTbmFwRHJhZ0Rpc3RhbmNlIDwgMCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRyYWdTdGVwcyAqPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTbmFwRHJhZ0Rpc3RhbmNlID0gY3VycmVudFNu
YXBEcmFnRGlzdGFuY2UgJSBfdGhpcy5zbmFwRGlzdGFuY2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0bXBWZWN0b3Iuc2NhbGVUb1JlZihfdGhpcy5zbmFwRGlzdGFuY2UgKiBkcmFnU3RlcHMs
IHRtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRtcFZlY3Rvci5zY2FsZUluUGxhY2UoMCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgX3RoaXMuYXR0YWNo
ZWRNZXNoLnNjYWxpbmcuYWRkSW5QbGFjZSh0bXBWZWN0b3IpOworICAgICAgICAgICAgICAgIGlm
IChzbmFwcGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcFNuYXBFdmVudC5zbmFwRGlzdGFu
Y2UgPSBfdGhpcy5zbmFwRGlzdGFuY2UgKiBkcmFnU3RlcHM7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLm9uU25hcE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRtcFNuYXBFdmVudCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgX3Ro
aXMuX3BvaW50ZXJPYnNlcnZlciA9IGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUub25Qb2lu
dGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHBvaW50ZXJJbmZvKSB7CisgICAgICAgICAgICBp
ZiAoX3RoaXMuX2N1c3RvbU1lc2hTZXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YXIgaXNIb3ZlcmVkID0gcG9pbnRlckluZm8ucGlja0lu
Zm8gJiYgKF90aGlzLl9yb290TWVzaC5nZXRDaGlsZE1lc2hlcygpLmluZGV4T2YocG9pbnRlcklu
Zm8ucGlja0luZm8ucGlja2VkTWVzaCkgIT0gLTEpOworICAgICAgICAgICAgdmFyIG1hdGVyaWFs
ID0gaXNIb3ZlcmVkID8gX3RoaXMuX2hvdmVyTWF0ZXJpYWwgOiBfdGhpcy5fY29sb3JlZE1hdGVy
aWFsOworICAgICAgICAgICAgX3RoaXMuX3Jvb3RNZXNoLmdldENoaWxkTWVzaGVzKCkuZm9yRWFj
aChmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgICAgIG0ubWF0ZXJpYWwgPSBtYXRlcmlhbDsK
KyAgICAgICAgICAgICAgICBpZiAobS5jb2xvcikgeworICAgICAgICAgICAgICAgICAgICBtLmNv
bG9yID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9KTsKKyAgICAgICAgdmFyIGxpZ2h0ID0gZ2l6bW9MYXllci5fZ2V0
U2hhcmVkR2l6bW9MaWdodCgpOworICAgICAgICBsaWdodC5pbmNsdWRlZE9ubHlNZXNoZXMgPSBs
aWdodC5pbmNsdWRlZE9ubHlNZXNoZXMuY29uY2F0KF90aGlzLl9yb290TWVzaC5nZXRDaGlsZE1l
c2hlcygpKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBBeGlzU2NhbGVHaXpt
by5wcm90b3R5cGUuX2F0dGFjaGVkTWVzaENoYW5nZWQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgaWYgKHRoaXMuZHJhZ0JlaGF2aW9yKSB7CisgICAgICAgICAgICB0aGlzLmRyYWdCZWhh
dmlvci5lbmFibGVkID0gdmFsdWUgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBeGlzU2NhbGVHaXptby5wcm90b3R5cGUsICJpc0Vu
YWJsZWQiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2lzRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICogSWYgdGhl
IGdpem1vIGlzIGVuYWJsZWQKKyAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAgaWYg
KCF2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRNZXNoID0gbnVsbDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0aGlz
Ll9wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hlZE1lc2ggPSB0aGlz
Ll9wYXJlbnQuYXR0YWNoZWRNZXNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIGdpem1v
CisgICAgICovCisgICAgQXhpc1NjYWxlR2l6bW8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRoaXMub25TbmFwT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0
aGlzLmdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUub25Qb2ludGVyT2JzZXJ2YWJsZS5yZW1v
dmUodGhpcy5fcG9pbnRlck9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5kcmFnQmVoYXZpb3IuZGV0
YWNoKCk7CisgICAgICAgIGlmICh0aGlzLl9hcnJvdykgeworICAgICAgICAgICAgdGhpcy5fYXJy
b3cuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIFt0aGlzLl9jb2xvcmVkTWF0ZXJpYWws
IHRoaXMuX2hvdmVyTWF0ZXJpYWxdLmZvckVhY2goZnVuY3Rpb24gKG1hdGwpIHsKKyAgICAgICAg
ICAgIGlmIChtYXRsKSB7CisgICAgICAgICAgICAgICAgbWF0bC5kaXNwb3NlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2Fs
bCh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIGFuZCByZXBsYWNlcyB0
aGUgY3VycmVudCBtZXNoZXMgaW4gdGhlIGdpem1vIHdpdGggdGhlIHNwZWNpZmllZCBtZXNoCisg
ICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gcmVwbGFjZSB0aGUgZGVmYXVsdCBtZXNoIG9m
IHRoZSBnaXptbworICAgICAqIEBwYXJhbSB1c2VHaXptb01hdGVyaWFsIElmIHRoZSBnaXptbydz
IGRlZmF1bHQgbWF0ZXJpYWwgc2hvdWxkIGJlIHVzZWQgKGRlZmF1bHQ6IGZhbHNlKQorICAgICAq
LworICAgIEF4aXNTY2FsZUdpem1vLnByb3RvdHlwZS5zZXRDdXN0b21NZXNoID0gZnVuY3Rpb24g
KG1lc2gsIHVzZUdpem1vTWF0ZXJpYWwpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAg
ICAgICAgaWYgKHVzZUdpem1vTWF0ZXJpYWwgPT09IHZvaWQgMCkgeyB1c2VHaXptb01hdGVyaWFs
ID0gZmFsc2U7IH0KKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRDdXN0b21NZXNoLmNhbGwo
dGhpcywgbWVzaCk7CisgICAgICAgIGlmICh1c2VHaXptb01hdGVyaWFsKSB7CisgICAgICAgICAg
ICB0aGlzLl9yb290TWVzaC5nZXRDaGlsZE1lc2hlcygpLmZvckVhY2goZnVuY3Rpb24gKG0pIHsK
KyAgICAgICAgICAgICAgICBtLm1hdGVyaWFsID0gX3RoaXMuX2NvbG9yZWRNYXRlcmlhbDsKKyAg
ICAgICAgICAgICAgICBpZiAobS5jb2xvcikgeworICAgICAgICAgICAgICAgICAgICBtLmNvbG9y
ID0gX3RoaXMuX2NvbG9yZWRNYXRlcmlhbC5kaWZmdXNlQ29sb3I7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0aGlzLl9jdXN0b21NZXNoU2V0ID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBBeGlzU2NhbGVHaXptbzsKK30oX2dp
em1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkdpem1vIl0pKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9HaXptb3MvYm91bmRpbmdCb3hHaXptby50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dpem1vcy9ib3VuZGlu
Z0JveEdpem1vLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBCb3VuZGluZ0JveEdpem1vICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvdW5kaW5nQm94R2l6bW8iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIEJvdW5kaW5nQm94R2l6bW87IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAi
Li9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19s
b2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9N
YXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNf
YWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1l
c2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9t
ZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01l
c2hlc19CdWlsZGVyc19zcGhlcmVCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRl
ciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfYm94QnVpbGRlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL0J1aWxkZXJz
L2JveEJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL2JveEJ1aWxkZXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVz
L0J1aWxkZXJzL2xpbmVzQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvbGluZXNCdWlsZGVy
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0JlaGF2aW9yc19NZXNoZXNfcG9pbnRl
ckRyYWdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vQmVoYXZpb3JzL01lc2hlcy9wb2ludGVyRHJhZ0JlaGF2aW9yICovICIu
L0JlaGF2aW9ycy9NZXNoZXMvcG9pbnRlckRyYWdCZWhhdmlvci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9naXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vZ2l6bW8gKi8gIi4vR2l6bW9zL2dpem1vLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1Jl
bmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlciAqLyAiLi9SZW5kZXJpbmcvdXRpbGl0eUxheWVy
UmVuZGVyZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX3N0YW5k
YXJkTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMv
c3RhbmRhcmRNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Bp
dm90VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NaXNjL3Bpdm90VG9vbHMgKi8gIi4vTWlzYy9waXZvdFRvb2xzLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNv
bG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbnN0YW50cyAqLyAiLi9NYXRo
cy9tYXRoLmNvbnN0YW50cy50cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
Ky8qKgorICogQm91bmRpbmcgYm94IGdpem1vCisgKi8KK3ZhciBCb3VuZGluZ0JveEdpem1vID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEJvdW5kaW5nQm94R2l6bW8sIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBCb3VuZGluZ0JveEdpem1vCisgICAgICogQHBh
cmFtIGdpem1vTGF5ZXIgVGhlIHV0aWxpdHkgbGF5ZXIgdGhlIGdpem1vIHdpbGwgYmUgYWRkZWQg
dG8KKyAgICAgKiBAcGFyYW0gY29sb3IgVGhlIGNvbG9yIG9mIHRoZSBnaXptbworICAgICAqLwor
ICAgIGZ1bmN0aW9uIEJvdW5kaW5nQm94R2l6bW8oY29sb3IsIGdpem1vTGF5ZXIpIHsKKyAgICAg
ICAgaWYgKGNvbG9yID09PSB2b2lkIDApIHsgY29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siQ29sb3IzIl0uR3JheSgpOyB9CisgICAgICAgIGlm
IChnaXptb0xheWVyID09PSB2b2lkIDApIHsgZ2l6bW9MYXllciA9IF9SZW5kZXJpbmdfdXRpbGl0
eUxheWVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIlV0aWxpdHlMYXll
clJlbmRlcmVyIl0uRGVmYXVsdEtlZXBEZXB0aFV0aWxpdHlMYXllcjsgfQorICAgICAgICB2YXIg
X3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBnaXptb0xheWVyKSB8fCB0aGlzOworICAgICAgICBf
dGhpcy5fYm91bmRpbmdEaW1lbnNpb25zID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMSwgMSwgMSk7CisgICAgICAgIF90aGlz
Ll9yZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIF90aGlzLl9wb2ludGVyT2JzZXJ2ZXIg
PSBudWxsOworICAgICAgICBfdGhpcy5fc2NhbGVEcmFnU3BlZWQgPSAwLjI7CisgICAgICAgIF90
aGlzLl90bXBRdWF0ZXJuaW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0oKTsKKyAgICAgICAgX3RoaXMuX3RtcFZlY3Rv
ciA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdKDAsIDAsIDApOworICAgICAgICBfdGhpcy5fdG1wUm90YXRpb25NYXRyaXggPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJp
eCJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBjaGlsZCBtZXNoZXMgc2hvdWxkIGJl
IGlnbm9yZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgYm91ZG5pbmcgYm94LiBUaGlzIHNob3VsZCBi
ZSBzZXQgdG8gdHJ1ZSB0byBhdm9pZCBwZXJmIGhpdHMgd2l0aCBoZWF2aWx5IG5lc3RlZCBtZXNo
ZXMgKERlZmF1bHQ6IGZhbHNlKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaWdub3JlQ2hp
bGRyZW4gPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiBh
IGRlc2NlbmRhbnQgc2hvdWxkIGJlIGluY2x1ZGVkIHdoZW4gY29tcHV0aW5nIHRoZSBib3VuZGlu
ZyBib3guIFdoZW4gbnVsbCwgYWxsIGRlc2NlbmRhbnRzIGFyZSBpbmNsdWRlZC4gSWYgaWdub3Jl
Q2hpbGRyZW4gaXMgc2V0IHRoaXMgd2lsbCBiZSBpZ25vcmVkLiAoRGVmYXVsdDogbnVsbCkKKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLmluY2x1ZGVDaGlsZFByZWRpY2F0ZSA9IG51bGw7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgcm90YXRpb24gc3BoZXJlcyBh
dHRhY2hlZCB0byB0aGUgYm91bmRpbmcgYm94IChEZWZhdWx0OiAwLjEpCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5yb3RhdGlvblNwaGVyZVNpemUgPSAwLjE7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgc2NhbGUgYm94ZXMgYXR0YWNoZWQgdG8gdGhlIGJvdW5k
aW5nIGJveCAoRGVmYXVsdDogMC4xKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuc2NhbGVC
b3hTaXplID0gMC4xOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgc2V0LCB0aGUgcm90YXRp
b24gc3BoZXJlcyBhbmQgc2NhbGUgYm94ZXMgd2lsbCBpbmNyZWFzZSBpbiBzaXplIGJhc2VkIG9u
IHRoZSBkaXN0YW5jZSBhd2F5IGZyb20gdGhlIGNhbWVyYSB0byBoYXZlIGEgY29uc2lzdGVudCBz
Y3JlZW4gc2l6ZSAoRGVmYXVsdDogZmFsc2UpCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5m
aXhlZERyYWdNZXNoU2NyZWVuU2l6ZSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICog
VGhlIGRpc3RhbmNlIGF3YXkgZnJvbSB0aGUgb2JqZWN0IHdoaWNoIHRoZSBkcmFnZ2FibGUgbWVz
aGVzIHNob3VsZCBhcHBlYXIgd29ybGQgc2l6ZWQgd2hlbiBmaXhlZERyYWdNZXNoU2NyZWVuU2l6
ZSBpcyBzZXQgdG8gdHJ1ZSAoZGVmYXVsdDogMTApCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5maXhlZERyYWdNZXNoU2NyZWVuU2l6ZURpc3RhbmNlRmFjdG9yID0gMTA7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBGaXJlZCB3aGVuIGEgcm90YXRpb24gc3BoZXJlIG9yIHNjYWxlIGJveCBp
cyBkcmFnZ2VkCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkRyYWdTdGFydE9ic2VydmFi
bGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJP
YnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZpcmVkIHdoZW4gYSBzY2Fs
ZSBib3ggaXMgZHJhZ2dlZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25TY2FsZUJveERy
YWdPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgICogRmlyZWQg
d2hlbiBhIHNjYWxlIGJveCBkcmFnIGlzIGVuZGVkCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5vblNjYWxlQm94RHJhZ0VuZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEZpcmVkIHdoZW4gYSByb3RhdGlvbiBzcGhlcmUgaXMgZHJhZ2dlZAorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMub25Sb3RhdGlvblNwaGVyZURyYWdPYnNlcnZhYmxlID0gbmV3
IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJs
ZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGaXJlZCB3aGVuIGEgcm90YXRpb24gc3Bo
ZXJlIGRyYWcgaXMgZW5kZWQKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uUm90YXRpb25T
cGhlcmVEcmFnRW5kT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAg
ICogUmVsYXRpdmUgYm91bmRpbmcgYm94IHBpdm90IHVzZWQgd2hlbiBzY2FsaW5nIHRoZSBhdHRh
Y2hlZCBtZXNoLiBXaGVuIG51bGwgb2JqZWN0IHdpdGggc2NhbGUgZnJvbSB0aGUgb3Bwb3NpdGUg
Y29ybmVyLiAwLjUsMC41LDAuNSBmb3IgY2VudGVyIGFuZCAwLjUsMCwwLjUgZm9yIGJvdHRvbSAo
RGVmYXVsdDogbnVsbCkKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnNjYWxlUGl2b3QgPSBu
dWxsOworICAgICAgICBfdGhpcy5fZXhpc3RpbmdNZXNoU2NhbGUgPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgpOworICAgICAg
ICAvLyBEcmFnZ2luZworICAgICAgICBfdGhpcy5fZHJhZ01lc2ggPSBudWxsOworICAgICAgICBf
dGhpcy5wb2ludGVyRHJhZ0JlaGF2aW9yID0gbmV3IF9CZWhhdmlvcnNfTWVzaGVzX3BvaW50ZXJE
cmFnQmVoYXZpb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUG9pbnRlckRyYWdCZWhh
dmlvciJdKCk7CisgICAgICAgIC8vIERvIG5vdCB1cGRhdGUgdGhlIGdpem1vJ3Mgc2NhbGUgc28g
aXQgaGFzIGEgZml4ZWQgc2l6ZSB0byB0aGUgb2JqZWN0IGl0cyBhdHRhY2hlZCB0bworICAgICAg
ICBfdGhpcy51cGRhdGVTY2FsZSA9IGZhbHNlOworICAgICAgICBfdGhpcy5fYW5jaG9yTWVzaCA9
IG5ldyBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJB
YnN0cmFjdE1lc2giXSgiYW5jaG9yIiwgZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSk7Cisg
ICAgICAgIC8vIENyZWF0ZSBNYXRlcmlhbHMKKyAgICAgICAgX3RoaXMuY29sb3JlZE1hdGVyaWFs
ID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTJfX1siU3RhbmRhcmRNYXRlcmlhbCJdKCIiLCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNj
ZW5lKTsKKyAgICAgICAgX3RoaXMuY29sb3JlZE1hdGVyaWFsLmRpc2FibGVMaWdodGluZyA9IHRy
dWU7CisgICAgICAgIF90aGlzLmhvdmVyQ29sb3JlZE1hdGVyaWFsID0gbmV3IF9NYXRlcmlhbHNf
c3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siU3RhbmRhcmRN
YXRlcmlhbCJdKCIiLCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKTsKKyAgICAgICAgX3Ro
aXMuaG92ZXJDb2xvcmVkTWF0ZXJpYWwuZGlzYWJsZUxpZ2h0aW5nID0gdHJ1ZTsKKyAgICAgICAg
Ly8gQnVpbGQgYm91bmRpbmcgYm94IG91dCBvZiBsaW5lcworICAgICAgICBfdGhpcy5fbGluZUJv
dW5kaW5nQm94ID0gbmV3IF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIkFic3RyYWN0TWVzaCJdKCIiLCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5l
KTsKKyAgICAgICAgX3RoaXMuX2xpbmVCb3VuZGluZ0JveC5yb3RhdGlvblF1YXRlcm5pb24gPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRl
cm5pb24iXSgpOworICAgICAgICB2YXIgbGluZXMgPSBbXTsKKyAgICAgICAgbGluZXMucHVzaChf
TWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
WyJMaW5lc0J1aWxkZXIiXS5DcmVhdGVMaW5lcygibGluZXMiLCB7IHBvaW50czogW25ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAs
IDAsIDApLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlZlY3RvcjMiXShfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLngsIDAsIDApXSB9LCBnaXpt
b0xheWVyLnV0aWxpdHlMYXllclNjZW5lKSk7CisgICAgICAgIGxpbmVzLnB1c2goX01lc2hlc19C
dWlsZGVyc19saW5lc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTGluZXNC
dWlsZGVyIl0uQ3JlYXRlTGluZXMoImxpbmVzIiwgeyBwb2ludHM6IFtuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgwLCAwLCAwKSwg
bmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0
b3IzIl0oMCwgX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy55LCAwKV0gfSwgZ2l6bW9MYXllci51
dGlsaXR5TGF5ZXJTY2VuZSkpOworICAgICAgICBsaW5lcy5wdXNoKF9NZXNoZXNfQnVpbGRlcnNf
bGluZXNCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkxpbmVzQnVpbGRlciJd
LkNyZWF0ZUxpbmVzKCJsaW5lcyIsIHsgcG9pbnRzOiBbbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMCwgMCksIG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAs
IDAsIF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueildIH0sIGdpem1vTGF5ZXIudXRpbGl0eUxh
eWVyU2NlbmUpKTsKKyAgICAgICAgbGluZXMucHVzaChfTWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVp
bGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJMaW5lc0J1aWxkZXIiXS5DcmVhdGVM
aW5lcygibGluZXMiLCB7IHBvaW50czogW25ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMu
eCwgMCwgMCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVjdG9yMyJdKF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueCwgX3RoaXMuX2JvdW5k
aW5nRGltZW5zaW9ucy55LCAwKV0gfSwgZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSkpOwor
ICAgICAgICBsaW5lcy5wdXNoKF9NZXNoZXNfQnVpbGRlcnNfbGluZXNCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIkxpbmVzQnVpbGRlciJdLkNyZWF0ZUxpbmVzKCJsaW5lcyIs
IHsgcG9pbnRzOiBbbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZWN0b3IzIl0oX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy54LCAwLCAwKSwgbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3Iz
Il0oX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy54LCAwLCBfdGhpcy5fYm91bmRpbmdEaW1lbnNp
b25zLnopXSB9LCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKSk7CisgICAgICAgIGxpbmVz
LnB1c2goX01lc2hlc19CdWlsZGVyc19saW5lc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siTGluZXNCdWlsZGVyIl0uQ3JlYXRlTGluZXMoImxpbmVzIiwgeyBwb2ludHM6IFtu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXSgwLCBfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnksIDApLCBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXShfdGhpcy5fYm91
bmRpbmdEaW1lbnNpb25zLngsIF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueSwgMCldIH0sIGdp
em1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpKTsKKyAgICAgICAgbGluZXMucHVzaChfTWVzaGVz
X0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJMaW5l
c0J1aWxkZXIiXS5DcmVhdGVMaW5lcygibGluZXMiLCB7IHBvaW50czogW25ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIF90aGlz
Ll9ib3VuZGluZ0RpbWVuc2lvbnMueSwgMCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIF90aGlzLl9ib3VuZGluZ0RpbWVu
c2lvbnMueSwgX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy56KV0gfSwgZ2l6bW9MYXllci51dGls
aXR5TGF5ZXJTY2VuZSkpOworICAgICAgICBsaW5lcy5wdXNoKF9NZXNoZXNfQnVpbGRlcnNfbGlu
ZXNCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkxpbmVzQnVpbGRlciJdLkNy
ZWF0ZUxpbmVzKCJsaW5lcyIsIHsgcG9pbnRzOiBbbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMCwgX3RoaXMuX2JvdW5kaW5n
RGltZW5zaW9ucy56KSwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZWN0b3IzIl0oX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy54LCAwLCBfdGhp
cy5fYm91bmRpbmdEaW1lbnNpb25zLnopXSB9LCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5l
KSk7CisgICAgICAgIGxpbmVzLnB1c2goX01lc2hlc19CdWlsZGVyc19saW5lc0J1aWxkZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTGluZXNCdWlsZGVyIl0uQ3JlYXRlTGluZXMoImxp
bmVzIiwgeyBwb2ludHM6IFtuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlY3RvcjMiXSgwLCAwLCBfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnop
LCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
Y3RvcjMiXSgwLCBfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnksIF90aGlzLl9ib3VuZGluZ0Rp
bWVuc2lvbnMueildIH0sIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpKTsKKyAgICAgICAg
bGluZXMucHVzaChfTWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fWyJMaW5lc0J1aWxkZXIiXS5DcmVhdGVMaW5lcygibGluZXMiLCB7IHBvaW50
czogW25ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdKF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueCwgX3RoaXMuX2JvdW5kaW5nRGlt
ZW5zaW9ucy55LCBfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnopLCBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgwLCBfdGhpcy5f
Ym91bmRpbmdEaW1lbnNpb25zLnksIF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueildIH0sIGdp
em1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpKTsKKyAgICAgICAgbGluZXMucHVzaChfTWVzaGVz
X0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJMaW5l
c0J1aWxkZXIiXS5DcmVhdGVMaW5lcygibGluZXMiLCB7IHBvaW50czogW25ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKF90aGlzLl9i
b3VuZGluZ0RpbWVuc2lvbnMueCwgX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy55LCBfdGhpcy5f
Ym91bmRpbmdEaW1lbnNpb25zLnopLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXShfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLngs
IDAsIF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueildIH0sIGdpem1vTGF5ZXIudXRpbGl0eUxh
eWVyU2NlbmUpKTsKKyAgICAgICAgbGluZXMucHVzaChfTWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVp
bGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJMaW5lc0J1aWxkZXIiXS5DcmVhdGVM
aW5lcygibGluZXMiLCB7IHBvaW50czogW25ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKF90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMu
eCwgX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy55LCBfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25z
LnopLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXShfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLngsIF90aGlzLl9ib3VuZGluZ0Rp
bWVuc2lvbnMueSwgMCldIH0sIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpKTsKKyAgICAg
ICAgbGluZXMuZm9yRWFjaChmdW5jdGlvbiAobCkgeworICAgICAgICAgICAgbC5jb2xvciA9IGNv
bG9yOworICAgICAgICAgICAgbC5wb3NpdGlvbi5hZGRJblBsYWNlKG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKC1fdGhpcy5fYm91
bmRpbmdEaW1lbnNpb25zLnggLyAyLCAtX3RoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy55IC8gMiwg
LV90aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueiAvIDIpKTsKKyAgICAgICAgICAgIGwuaXNQaWNr
YWJsZSA9IGZhbHNlOworICAgICAgICAgICAgX3RoaXMuX2xpbmVCb3VuZGluZ0JveC5hZGRDaGls
ZChsKTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLl9yb290TWVzaC5hZGRDaGlsZChfdGhp
cy5fbGluZUJvdW5kaW5nQm94KTsKKyAgICAgICAgX3RoaXMuc2V0Q29sb3IoY29sb3IpOworICAg
ICAgICAvLyBDcmVhdGUgcm90YXRpb24gc3BoZXJlcworICAgICAgICBfdGhpcy5fcm90YXRlU3Bo
ZXJlc1BhcmVudCA9IG5ldyBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJBYnN0cmFjdE1lc2giXSgiIiwgZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2Vu
ZSk7CisgICAgICAgIF90aGlzLl9yb3RhdGVTcGhlcmVzUGFyZW50LnJvdGF0aW9uUXVhdGVybmlv
biA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
UXVhdGVybmlvbiJdKCk7CisgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGlfMSkgewor
ICAgICAgICAgICAgdmFyIHNwaGVyZSA9IF9NZXNoZXNfQnVpbGRlcnNfc3BoZXJlQnVpbGRlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTcGhlcmVCdWlsZGVyIl0uQ3JlYXRlU3BoZXJl
KCIiLCB7IGRpYW1ldGVyOiAxIH0sIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpOworICAg
ICAgICAgICAgc3BoZXJlLnJvdGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAg
ICAgICBzcGhlcmUubWF0ZXJpYWwgPSB0aGlzXzEuY29sb3JlZE1hdGVyaWFsOworICAgICAgICAg
ICAgLy8gRHJhZyBiZWhhdmlvcgorICAgICAgICAgICAgX2RyYWdCZWhhdmlvciA9IG5ldyBfQmVo
YXZpb3JzX01lc2hlc19wb2ludGVyRHJhZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIlBvaW50ZXJEcmFnQmVoYXZpb3IiXSh7fSk7CisgICAgICAgICAgICBfZHJhZ0JlaGF2
aW9yLm1vdmVBdHRhY2hlZCA9IGZhbHNlOworICAgICAgICAgICAgX2RyYWdCZWhhdmlvci51cGRh
dGVEcmFnUGxhbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIHNwaGVyZS5hZGRCZWhhdmlvcihfZHJh
Z0JlaGF2aW9yKTsKKyAgICAgICAgICAgIHZhciBzdGFydGluZ1R1cm5EaXJlY3Rpb24gPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMi
XSgxLCAwLCAwKTsKKyAgICAgICAgICAgIHZhciB0b3RhbFR1cm5BbW91bnRPZkRyYWcgPSAwOwor
ICAgICAgICAgICAgX2RyYWdCZWhhdmlvci5vbkRyYWdTdGFydE9ic2VydmFibGUuYWRkKGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgICAgICBzdGFydGluZ1R1cm5EaXJlY3Rpb24uY29weUZyb20o
c3BoZXJlLmZvcndhcmQpOworICAgICAgICAgICAgICAgIHRvdGFsVHVybkFtb3VudE9mRHJhZyA9
IDA7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIF9kcmFnQmVoYXZpb3Iub25EcmFnT2Jz
ZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgX3RoaXMub25S
b3RhdGlvblNwaGVyZURyYWdPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7fSk7CisgICAgICAg
ICAgICAgICAgaWYgKF90aGlzLmF0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgb3JpZ2luYWxQYXJlbnQgPSBfdGhpcy5hdHRhY2hlZE1lc2gucGFyZW50OworICAgICAgICAg
ICAgICAgICAgICBpZiAob3JpZ2luYWxQYXJlbnQgJiYgKG9yaWdpbmFsUGFyZW50LnNjYWxpbmcg
JiYgb3JpZ2luYWxQYXJlbnQuc2NhbGluZy5pc05vblVuaWZvcm1XaXRoaW5FcHNpbG9uKDAuMDAx
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5XYXJuKCJCb3VuZGluZ0JveEdpem1vIGNvbnRyb2xz
IGFyZSBub3Qgc3VwcG9ydGVkIG9uIGNoaWxkIG1lc2hlcyB3aXRoIG5vbi11bmlmb3JtIHBhcmVu
dCBzY2FsaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgX01pc2NfcGl2b3RUb29sc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUGl2b3RUb29scyJdLl9SZW1vdmVBbmRTdG9yZVBpdm90
UG9pbnQoX3RoaXMuYXR0YWNoZWRNZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmxk
RHJhZ0RpcmVjdGlvbiA9IHN0YXJ0aW5nVHVybkRpcmVjdGlvbjsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gUHJvamVjdCB0aGUgd29ybGQgcmlnaHQgb24gdG8gdGhlIGRyYWcgcGxhbmUKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHRvU3ViID0gZXZlbnQuZHJhZ1BsYW5lTm9ybWFsLnNjYWxlKF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0u
RG90KGV2ZW50LmRyYWdQbGFuZU5vcm1hbCwgd29ybGREcmFnRGlyZWN0aW9uKSk7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBkcmFnQXhpcyA9IHdvcmxkRHJhZ0RpcmVjdGlvbi5zdWJ0cmFjdCh0
b1N1Yikubm9ybWFsaXplVG9OZXcoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJvamVjdCBk
cmFnIGRlbHRhIG9uIHRvIHRoZSByZXN1bHRpbmcgZHJhZyBheGlzIGFuZCByb3RhdGUgYmFzZWQg
b24gdGhhdAorICAgICAgICAgICAgICAgICAgICB2YXIgcHJvamVjdERpc3QgPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkRvdChkcmFn
QXhpcywgZXZlbnQuZGVsdGEpIDwgMCA/IE1hdGguYWJzKGV2ZW50LmRlbHRhLmxlbmd0aCgpKSA6
IC1NYXRoLmFicyhldmVudC5kZWx0YS5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgIC8v
IE1ha2Ugcm90YXRpb24gcmVsYXRpdmUgdG8gc2l6ZSBvZiBtZXNoLgorICAgICAgICAgICAgICAg
ICAgICBwcm9qZWN0RGlzdCA9IChwcm9qZWN0RGlzdCAvIF90aGlzLl9ib3VuZGluZ0RpbWVuc2lv
bnMubGVuZ3RoKCkpICogX3RoaXMuX2FuY2hvck1lc2guc2NhbGluZy5sZW5ndGgoKTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gUm90YXRlIGJhc2VkIG9uIGF4aXMKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFfdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5p
b24iXS5Sb3RhdGlvbllhd1BpdGNoUm9sbChfdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb24ueSwg
X3RoaXMuYXR0YWNoZWRNZXNoLnJvdGF0aW9uLngsIF90aGlzLmF0dGFjaGVkTWVzaC5yb3RhdGlv
bi56KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIV90
aGlzLl9hbmNob3JNZXNoLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMuX2FuY2hvck1lc2gucm90YXRpb25RdWF0ZXJuaW9uID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlv
bllhd1BpdGNoUm9sbChfdGhpcy5fYW5jaG9yTWVzaC5yb3RhdGlvbi55LCBfdGhpcy5fYW5jaG9y
TWVzaC5yb3RhdGlvbi54LCBfdGhpcy5fYW5jaG9yTWVzaC5yb3RhdGlvbi56KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cgdGhlIG9i
amVjdCB0byB0dXJuIG1vcmUgdGhhbiBhIGZ1bGwgY2lyY2xlCisgICAgICAgICAgICAgICAgICAg
IHRvdGFsVHVybkFtb3VudE9mRHJhZyArPSBwcm9qZWN0RGlzdDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKE1hdGguYWJzKHRvdGFsVHVybkFtb3VudE9mRHJhZykgPD0gMiAqIE1hdGguUEkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpXzEgPj0gOCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZigwLCAwLCBwcm9qZWN0
RGlzdCwgX3RoaXMuX3RtcFF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaV8xID49IDQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siUXVhdGVybmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYocHJvamVjdERp
c3QsIDAsIDAsIF90aGlzLl90bXBRdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJR
dWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZigwLCBwcm9qZWN0RGlzdCwgMCwg
X3RoaXMuX3RtcFF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUm90YXRlIGFyb3VuZCBjZW50ZXIgb2YgYm91bmRpbmcgYm94
CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYW5jaG9yTWVzaC5hZGRDaGlsZChfdGhp
cy5hdHRhY2hlZE1lc2gpOworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FuY2hvck1l
c2gucm90YXRpb25RdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYoX3RoaXMuX3RtcFF1YXRlcm5pb24s
IF90aGlzLl9hbmNob3JNZXNoLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5fYW5jaG9yTWVzaC5yZW1vdmVDaGlsZChfdGhpcy5hdHRhY2hlZE1lc2gp
OworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoLnNldFBhcmVudChv
cmlnaW5hbFBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgX3RoaXMudXBkYXRlQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgICAgICAgICAgX01pc2Nf
cGl2b3RUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUGl2b3RUb29scyJdLl9S
ZXN0b3JlUGl2b3RQb2ludChfdGhpcy5hdHRhY2hlZE1lc2gpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBfdGhpcy5fdXBkYXRlRHVtbXkoKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgLy8gU2VsZWN0aW9uL2Rlc2VsZWN0aW9uCisgICAgICAgICAgICBfZHJhZ0Jl
aGF2aW9yLm9uRHJhZ1N0YXJ0T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgICAgIF90aGlzLm9uRHJhZ1N0YXJ0T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOwor
ICAgICAgICAgICAgICAgIF90aGlzLl9zZWxlY3ROb2RlKHNwaGVyZSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIF9kcmFnQmVoYXZpb3Iub25EcmFnRW5kT2JzZXJ2YWJsZS5hZGQoZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLm9uUm90YXRpb25TcGhlcmVEcmFnRW5k
T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOworICAgICAgICAgICAgICAgIF90aGlzLl9z
ZWxlY3ROb2RlKG51bGwpOworICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVEdW1teSgpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0aGlzXzEuX3JvdGF0ZVNwaGVyZXNQYXJlbnQu
YWRkQ2hpbGQoc3BoZXJlKTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHRoaXNfMSA9IHRoaXMs
IF9kcmFnQmVoYXZpb3I7CisgICAgICAgIGZvciAodmFyIGlfMSA9IDA7IGlfMSA8IDEyOyBpXzEr
KykgeworICAgICAgICAgICAgX2xvb3BfMShpXzEpOworICAgICAgICB9CisgICAgICAgIF90aGlz
Ll9yb290TWVzaC5hZGRDaGlsZChfdGhpcy5fcm90YXRlU3BoZXJlc1BhcmVudCk7CisgICAgICAg
IC8vIENyZWF0ZSBzY2FsZSBjdWJlcworICAgICAgICBfdGhpcy5fc2NhbGVCb3hlc1BhcmVudCA9
IG5ldyBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJB
YnN0cmFjdE1lc2giXSgiIiwgZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAg
IF90aGlzLl9zY2FsZUJveGVzUGFyZW50LnJvdGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdKCk7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IDI7IGorKykgeworICAgICAgICAgICAgICAgIHZhciBfbG9vcF8yID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgYm94ID0gX01lc2hlc19CdWls
ZGVyc19ib3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkJveEJ1aWxkZXIi
XS5DcmVhdGVCb3goIiIsIHsgc2l6ZTogMSB9LCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5l
KTsKKyAgICAgICAgICAgICAgICAgICAgYm94Lm1hdGVyaWFsID0gdGhpc18yLmNvbG9yZWRNYXRl
cmlhbDsKKyAgICAgICAgICAgICAgICAgICAgLy8gRHJhZ2dpbmcgbG9naWMKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGRyYWdBeGlzID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oaSA9PSAwID8gLTEgOiAxLCBqID09IDAgPyAt
MSA6IDEsIGsgPT0gMCA/IC0xIDogMSk7CisgICAgICAgICAgICAgICAgICAgIF9kcmFnQmVoYXZp
b3IgPSBuZXcgX0JlaGF2aW9yc19NZXNoZXNfcG9pbnRlckRyYWdCZWhhdmlvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJQb2ludGVyRHJhZ0JlaGF2aW9yIl0oeyBkcmFnQXhpczogZHJh
Z0F4aXMgfSk7CisgICAgICAgICAgICAgICAgICAgIF9kcmFnQmVoYXZpb3IubW92ZUF0dGFjaGVk
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJveC5hZGRCZWhhdmlvcihfZHJhZ0JlaGF2
aW9yKTsKKyAgICAgICAgICAgICAgICAgICAgX2RyYWdCZWhhdmlvci5vbkRyYWdPYnNlcnZhYmxl
LmFkZChmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm9u
U2NhbGVCb3hEcmFnT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKF90aGlzLmF0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBvcmlnaW5hbFBhcmVudCA9IF90aGlzLmF0dGFjaGVkTWVzaC5wYXJlbnQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsUGFyZW50ICYmIChvcmln
aW5hbFBhcmVudC5zY2FsaW5nICYmIG9yaWdpbmFsUGFyZW50LnNjYWxpbmcuaXNOb25Vbmlmb3Jt
V2l0aGluRXBzaWxvbigwLjAwMSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5XYXJu
KCJCb3VuZGluZ0JveEdpem1vIGNvbnRyb2xzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGNoaWxkIG1l
c2hlcyB3aXRoIG5vbi11bmlmb3JtIHBhcmVudCBzY2FsaW5nIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX01pc2NfcGl2b3RUb29sc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTNfX1siUGl2b3RUb29scyJdLl9SZW1vdmVBbmRTdG9yZVBpdm90UG9pbnQo
X3RoaXMuYXR0YWNoZWRNZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVs
YXRpdmVEcmFnRGlzdGFuY2UgPSAoZXZlbnQuZHJhZ0Rpc3RhbmNlIC8gX3RoaXMuX2JvdW5kaW5n
RGltZW5zaW9ucy5sZW5ndGgoKSkgKiBfdGhpcy5fYW5jaG9yTWVzaC5zY2FsaW5nLmxlbmd0aCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YVNjYWxlID0gbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0ocmVs
YXRpdmVEcmFnRGlzdGFuY2UsIHJlbGF0aXZlRHJhZ0Rpc3RhbmNlLCByZWxhdGl2ZURyYWdEaXN0
YW5jZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFTY2FsZS5zY2FsZUluUGxh
Y2UoX3RoaXMuX3NjYWxlRHJhZ1NwZWVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
dGhpcy51cGRhdGVCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChfdGhpcy5zY2FsZVBpdm90KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90
aGlzLmF0dGFjaGVkTWVzaC5nZXRXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4VG9SZWYo
X3RoaXMuX3RtcFJvdGF0aW9uTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTW92ZSBhbmNob3IgdG8gZGVzaXJlZCBwaXZvdCBwb2ludCAoQm90dG9tIGxlZnQgY29y
bmVyICsgZGltZW5zaW9uLzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlz
Ll9ib3VuZGluZ0RpbWVuc2lvbnMuc2NhbGVUb1JlZigwLjUsIF90aGlzLl90bXBWZWN0b3IpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9S
ZWYoX3RoaXMuX3RtcFZlY3RvciwgX3RoaXMuX3RtcFJvdGF0aW9uTWF0cml4LCBfdGhpcy5fdG1w
VmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FuY2hvck1l
c2gucG9zaXRpb24uc3VidHJhY3RJblBsYWNlKF90aGlzLl90bXBWZWN0b3IpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLm11bHRpcGx5
VG9SZWYoX3RoaXMuc2NhbGVQaXZvdCwgX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihfdGhpcy5fdG1w
VmVjdG9yLCBfdGhpcy5fdG1wUm90YXRpb25NYXRyaXgsIF90aGlzLl90bXBWZWN0b3IpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYW5jaG9yTWVzaC5wb3NpdGlvbi5h
ZGRJblBsYWNlKF90aGlzLl90bXBWZWN0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU2NhbGUgZnJvbSB0aGUgcG9zaXRpb24gb2YgdGhlIG9wcG9zaXRl
IGNvcm5lcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3guYWJzb2x1dGVQb3Np
dGlvbi5zdWJ0cmFjdFRvUmVmKF90aGlzLl9hbmNob3JNZXNoLnBvc2l0aW9uLCBfdGhpcy5fdG1w
VmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FuY2hvck1l
c2gucG9zaXRpb24uc3VidHJhY3RJblBsYWNlKF90aGlzLl90bXBWZWN0b3IpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5f
YW5jaG9yTWVzaC5hZGRDaGlsZChfdGhpcy5hdHRhY2hlZE1lc2gpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl9hbmNob3JNZXNoLnNjYWxpbmcuYWRkSW5QbGFjZShkZWx0YVNj
YWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2FuY2hvck1lc2gu
c2NhbGluZy54IDwgMCB8fCBfdGhpcy5fYW5jaG9yTWVzaC5zY2FsaW5nLnkgPCAwIHx8IF90aGlz
Ll9hbmNob3JNZXNoLnNjYWxpbmcueiA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMuX2FuY2hvck1lc2guc2NhbGluZy5zdWJ0cmFjdEluUGxhY2UoZGVsdGFTY2Fs
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl9hbmNob3JNZXNoLnJlbW92ZUNoaWxkKF90aGlzLmF0dGFjaGVkTWVzaCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoLnNldFBhcmVu
dChvcmlnaW5hbFBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01pc2NfcGl2
b3RUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUGl2b3RUb29scyJdLl9SZXN0
b3JlUGl2b3RQb2ludChfdGhpcy5hdHRhY2hlZE1lc2gpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3VwZGF0ZUR1bW15KCk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3Rpb24vZGVz
ZWxlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgX2RyYWdCZWhhdmlvci5vbkRyYWdTdGFydE9i
c2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlz
Lm9uRHJhZ1N0YXJ0T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOworICAgICAgICAgICAg
ICAgICAgICAgICAgX3RoaXMuX3NlbGVjdE5vZGUoYm94KTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgICAgIF9kcmFnQmVoYXZpb3Iub25EcmFnRW5kT2JzZXJ2YWJs
ZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub25TY2Fs
ZUJveERyYWdFbmRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7fSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5fc2VsZWN0Tm9kZShudWxsKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF90aGlzLl91cGRhdGVEdW1teSgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpc18yLl9zY2FsZUJveGVzUGFyZW50LmFkZENoaWxkKGJveCk7Cisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB2YXIgdGhpc18yID0gdGhpcywgX2Ry
YWdCZWhhdmlvcjsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDI7IGsrKykg
eworICAgICAgICAgICAgICAgICAgICBfbG9vcF8yKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIF90aGlzLl9yb290TWVzaC5hZGRDaGlsZChf
dGhpcy5fc2NhbGVCb3hlc1BhcmVudCk7CisgICAgICAgIC8vIEhvdmVyIGNvbG9yIGNoYW5nZQor
ICAgICAgICB2YXIgcG9pbnRlcklkcyA9IG5ldyBBcnJheSgpOworICAgICAgICBfdGhpcy5fcG9p
bnRlck9ic2VydmVyID0gZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5vblBvaW50ZXJPYnNl
cnZhYmxlLmFkZChmdW5jdGlvbiAocG9pbnRlckluZm8pIHsKKyAgICAgICAgICAgIGlmICghcG9p
bnRlcklkc1twb2ludGVySW5mby5ldmVudC5wb2ludGVySWRdKSB7CisgICAgICAgICAgICAgICAg
X3RoaXMuX3JvdGF0ZVNwaGVyZXNQYXJlbnQuZ2V0Q2hpbGRNZXNoZXMoKS5jb25jYXQoX3RoaXMu
X3NjYWxlQm94ZXNQYXJlbnQuZ2V0Q2hpbGRNZXNoZXMoKSkuZm9yRWFjaChmdW5jdGlvbiAobWVz
aCkgeworICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnRlckluZm8ucGlja0luZm8gJiYgcG9p
bnRlckluZm8ucGlja0luZm8ucGlja2VkTWVzaCA9PSBtZXNoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwb2ludGVySWRzW3BvaW50ZXJJbmZvLmV2ZW50LnBvaW50ZXJJZF0gPSBtZXNoOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbCA9IF90aGlzLmhvdmVyQ29sb3Jl
ZE1hdGVyaWFsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocG9p
bnRlckluZm8ucGlja0luZm8gJiYgcG9pbnRlckluZm8ucGlja0luZm8ucGlja2VkTWVzaCAhPSBw
b2ludGVySWRzW3BvaW50ZXJJbmZvLmV2ZW50LnBvaW50ZXJJZF0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgcG9pbnRlcklkc1twb2ludGVySW5mby5ldmVudC5wb2ludGVySWRdLm1hdGVyaWFsID0g
X3RoaXMuY29sb3JlZE1hdGVyaWFsOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcG9pbnRl
cklkc1twb2ludGVySW5mby5ldmVudC5wb2ludGVySWRdOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIC8vIFVwZGF0ZSBib3VuZGluZyBib3gg
cG9zaXRpb25zCisgICAgICAgIF90aGlzLl9yZW5kZXJPYnNlcnZlciA9IF90aGlzLmdpem1vTGF5
ZXIub3JpZ2luYWxTY2VuZS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBib3VkaW5nIGJveCBpZiBzY2FsaW5n
IGhhcyBjaGFuZ2VkCisgICAgICAgICAgICBpZiAoX3RoaXMuYXR0YWNoZWRNZXNoICYmICFfdGhp
cy5fZXhpc3RpbmdNZXNoU2NhbGUuZXF1YWxzKF90aGlzLmF0dGFjaGVkTWVzaC5zY2FsaW5nKSkg
eworICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZUJvdW5kaW5nQm94KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5maXhlZERyYWdNZXNoU2NyZWVuU2l6ZSkg
eworICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVSb3RhdGlvblNwaGVyZXMoKTsKKyAgICAg
ICAgICAgICAgICBfdGhpcy5fdXBkYXRlU2NhbGVCb3hlcygpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgLy8gSWYgZHJhZ2cgbWVzaCBpcyBlbmFibGVkIGFuZCBkcmFnZ2luZywgdXBkYXRl
IHRoZSBhdHRhY2hlZCBtZXNoIHBvc2UgdG8gbWF0Y2ggdGhlIGRyYWcgbWVzaAorICAgICAgICAg
ICAgaWYgKF90aGlzLl9kcmFnTWVzaCAmJiBfdGhpcy5hdHRhY2hlZE1lc2ggJiYgX3RoaXMucG9p
bnRlckRyYWdCZWhhdmlvci5kcmFnZ2luZykgeworICAgICAgICAgICAgICAgIF90aGlzLl9saW5l
Qm91bmRpbmdCb3gucG9zaXRpb24ucm90YXRlQnlRdWF0ZXJuaW9uVG9SZWYoX3RoaXMuX3Jvb3RN
ZXNoLnJvdGF0aW9uUXVhdGVybmlvbiwgX3RoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICAg
ICAgX3RoaXMuYXR0YWNoZWRNZXNoLnNldEFic29sdXRlUG9zaXRpb24oX3RoaXMuX2RyYWdNZXNo
LnBvc2l0aW9uLmFkZChfdGhpcy5fdG1wVmVjdG9yLnNjYWxlKC0xKSkpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICAgICAgX3RoaXMudXBkYXRlQm91bmRpbmdCb3goKTsKKyAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjb2xvciBv
ZiB0aGUgYm91bmRpbmcgYm94IGdpem1vCisgICAgICogQHBhcmFtIGNvbG9yIHRoZSBjb2xvciB0
byBzZXQKKyAgICAgKi8KKyAgICBCb3VuZGluZ0JveEdpem1vLnByb3RvdHlwZS5zZXRDb2xvciA9
IGZ1bmN0aW9uIChjb2xvcikgeworICAgICAgICB0aGlzLmNvbG9yZWRNYXRlcmlhbC5lbWlzc2l2
ZUNvbG9yID0gY29sb3I7CisgICAgICAgIHRoaXMuaG92ZXJDb2xvcmVkTWF0ZXJpYWwuZW1pc3Np
dmVDb2xvciA9IGNvbG9yLmNsb25lKCkuYWRkKG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTRfX1siQ29sb3IzIl0oMC4zLCAwLjMsIDAuMykpOworICAgICAg
ICB0aGlzLl9saW5lQm91bmRpbmdCb3guZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uIChs
KSB7CisgICAgICAgICAgICBpZiAobC5jb2xvcikgeworICAgICAgICAgICAgICAgIGwuY29sb3Ig
PSBjb2xvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBCb3VuZGlu
Z0JveEdpem1vLnByb3RvdHlwZS5fYXR0YWNoZWRNZXNoQ2hhbmdlZCA9IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIC8vIFJlc2V0IGFuY2hvciBtZXNoIHRvIG1hdGNoIGF0dGFjaGVkIG1lc2gncyBz
Y2FsZQorICAgICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgaW52YWxpZCBib3gv
c3BoZXJlIHBvc2l0aW9uIG9uIGZpcnN0IGRyYWcKKyAgICAgICAgICAgIF9NaXNjX3Bpdm90VG9v
bHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlBpdm90VG9vbHMiXS5fUmVtb3ZlQW5k
U3RvcmVQaXZvdFBvaW50KHZhbHVlKTsKKyAgICAgICAgICAgIHZhciBvcmlnaW5hbFBhcmVudCA9
IHZhbHVlLnBhcmVudDsKKyAgICAgICAgICAgIHRoaXMuX2FuY2hvck1lc2guYWRkQ2hpbGQodmFs
dWUpOworICAgICAgICAgICAgdGhpcy5fYW5jaG9yTWVzaC5yZW1vdmVDaGlsZCh2YWx1ZSk7Cisg
ICAgICAgICAgICB2YWx1ZS5zZXRQYXJlbnQob3JpZ2luYWxQYXJlbnQpOworICAgICAgICAgICAg
X01pc2NfcGl2b3RUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUGl2b3RUb29s
cyJdLl9SZXN0b3JlUGl2b3RQb2ludCh2YWx1ZSk7CisgICAgICAgICAgICB0aGlzLnVwZGF0ZUJv
dW5kaW5nQm94KCk7CisgICAgICAgICAgICB2YWx1ZS5nZXRDaGlsZE1lc2hlcyhmYWxzZSkuZm9y
RWFjaChmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgICAgIG0ubWFya0FzRGlydHkoInNjYWxp
bmciKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5naXptb0xheWVyLnV0aWxp
dHlMYXllclNjZW5lLm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVEdW1teSgpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICB9OworICAgIEJvdW5kaW5nQm94R2l6bW8ucHJvdG90eXBlLl9zZWxl
Y3ROb2RlID0gZnVuY3Rpb24gKHNlbGVjdGVkTWVzaCkgeworICAgICAgICB0aGlzLl9yb3RhdGVT
cGhlcmVzUGFyZW50LmdldENoaWxkTWVzaGVzKCkKKyAgICAgICAgICAgIC5jb25jYXQodGhpcy5f
c2NhbGVCb3hlc1BhcmVudC5nZXRDaGlsZE1lc2hlcygpKS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7
CisgICAgICAgICAgICBtLmlzVmlzaWJsZSA9ICghc2VsZWN0ZWRNZXNoIHx8IG0gPT0gc2VsZWN0
ZWRNZXNoKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRo
ZSBib3VuZGluZyBib3ggaW5mb3JtYXRpb24gZm9yIHRoZSBHaXptbworICAgICAqLworICAgIEJv
dW5kaW5nQm94R2l6bW8ucHJvdG90eXBlLnVwZGF0ZUJvdW5kaW5nQm94ID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBpZiAodGhpcy5hdHRhY2hlZE1lc2gpIHsKKyAgICAgICAgICAgIF9NaXNjX3Bp
dm90VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlBpdm90VG9vbHMiXS5fUmVt
b3ZlQW5kU3RvcmVQaXZvdFBvaW50KHRoaXMuYXR0YWNoZWRNZXNoKTsKKyAgICAgICAgICAgIC8v
IFN0b3JlIG9yaWdpbmFsIHBhcmVudAorICAgICAgICAgICAgdmFyIG9yaWdpbmFsUGFyZW50ID0g
dGhpcy5hdHRhY2hlZE1lc2gucGFyZW50OworICAgICAgICAgICAgdGhpcy5hdHRhY2hlZE1lc2gu
c2V0UGFyZW50KG51bGwpOworICAgICAgICAgICAgLy8gU3RvcmUgb3JpZ2luYWwgc2tlbHRvbiBv
dmVycmlkZSBtZXNoCisgICAgICAgICAgICB2YXIgb3JpZ2luYWxTa2VsZXRvbk92ZXJyaWRlTWVz
aCA9IG51bGw7CisgICAgICAgICAgICBpZiAodGhpcy5hdHRhY2hlZE1lc2guc2tlbGV0b24pIHsK
KyAgICAgICAgICAgICAgICBvcmlnaW5hbFNrZWxldG9uT3ZlcnJpZGVNZXNoID0gdGhpcy5hdHRh
Y2hlZE1lc2guc2tlbGV0b24ub3ZlcnJpZGVNZXNoOworICAgICAgICAgICAgICAgIHRoaXMuYXR0
YWNoZWRNZXNoLnNrZWxldG9uLm92ZXJyaWRlTWVzaCA9IG51bGw7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl91cGRhdGUoKTsKKyAgICAgICAgICAgIC8vIFJvdGF0ZSBiYXNlZCBv
biBheGlzCisgICAgICAgICAgICBpZiAoIXRoaXMuYXR0YWNoZWRNZXNoLnJvdGF0aW9uUXVhdGVy
bmlvbikgeworICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRNZXNoLnJvdGF0aW9uUXVhdGVy
bmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJR
dWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGwodGhpcy5hdHRhY2hlZE1lc2gucm90YXRp
b24ueSwgdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb24ueCwgdGhpcy5hdHRhY2hlZE1lc2gucm90
YXRpb24ueik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXRoaXMuX2FuY2hvck1l
c2gucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYW5jaG9yTWVz
aC5yb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsKHRoaXMuX2Fu
Y2hvck1lc2gucm90YXRpb24ueSwgdGhpcy5fYW5jaG9yTWVzaC5yb3RhdGlvbi54LCB0aGlzLl9h
bmNob3JNZXNoLnJvdGF0aW9uLnopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
YW5jaG9yTWVzaC5yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odGhpcy5hdHRhY2hlZE1lc2gu
cm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgIC8vIFN0b3JlIG9yaWdpbmFsIHBvc2l0
aW9uIGFuZCByZXNldCBtZXNoIHRvIG9yaWdpbiBiZWZvcmUgY29tcHV0aW5nIHRoZSBib3VuZGlu
ZyBib3gKKyAgICAgICAgICAgIHRoaXMuX3RtcFF1YXRlcm5pb24uY29weUZyb20odGhpcy5hdHRh
Y2hlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgIHRoaXMuX3RtcFZlY3Rv
ci5jb3B5RnJvbSh0aGlzLmF0dGFjaGVkTWVzaC5wb3NpdGlvbik7CisgICAgICAgICAgICB0aGlz
LmF0dGFjaGVkTWVzaC5yb3RhdGlvblF1YXRlcm5pb24uc2V0KDAsIDAsIDAsIDEpOworICAgICAg
ICAgICAgdGhpcy5hdHRhY2hlZE1lc2gucG9zaXRpb24uc2V0KDAsIDAsIDApOworICAgICAgICAg
ICAgLy8gVXBkYXRlIGJvdW5kaW5nIGRpbWVuc2lvbnMvcG9zaXRpb25zCisgICAgICAgICAgICB2
YXIgYm91bmRpbmdNaW5NYXggPSB0aGlzLmF0dGFjaGVkTWVzaC5nZXRIaWVyYXJjaHlCb3VuZGlu
Z1ZlY3RvcnMoIXRoaXMuaWdub3JlQ2hpbGRyZW4sIHRoaXMuaW5jbHVkZUNoaWxkUHJlZGljYXRl
KTsKKyAgICAgICAgICAgIGJvdW5kaW5nTWluTWF4Lm1heC5zdWJ0cmFjdFRvUmVmKGJvdW5kaW5n
TWluTWF4Lm1pbiwgdGhpcy5fYm91bmRpbmdEaW1lbnNpb25zKTsKKyAgICAgICAgICAgIC8vIFVw
ZGF0ZSBnaXptbyB0byBtYXRjaCBib3VuZGluZyBib3ggc2NhbGluZyBhbmQgcm90YXRpb24KKyAg
ICAgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBzZXQgaGVyZSBpcyB0aGUgb2Zmc2V0IGZyb20gdGhl
IG9yaWdpbiBmb3IgdGhlIGJvdW5kaW5nYm94IHdoZW4gdGhlIGF0dGFjaGVkIG1lc2ggaXMgYXQg
dGhlIG9yaWdpbgorICAgICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSBnaXptbyBpcyB0
aGVuIHNldCB0byB0aGUgYXR0YWNoZWRNZXNoIGluIGdpem1vLl91cGRhdGUKKyAgICAgICAgICAg
IHRoaXMuX2xpbmVCb3VuZGluZ0JveC5zY2FsaW5nLmNvcHlGcm9tKHRoaXMuX2JvdW5kaW5nRGlt
ZW5zaW9ucyk7CisgICAgICAgICAgICB0aGlzLl9saW5lQm91bmRpbmdCb3gucG9zaXRpb24uc2V0
KChib3VuZGluZ01pbk1heC5tYXgueCArIGJvdW5kaW5nTWluTWF4Lm1pbi54KSAvIDIsIChib3Vu
ZGluZ01pbk1heC5tYXgueSArIGJvdW5kaW5nTWluTWF4Lm1pbi55KSAvIDIsIChib3VuZGluZ01p
bk1heC5tYXgueiArIGJvdW5kaW5nTWluTWF4Lm1pbi56KSAvIDIpOworICAgICAgICAgICAgdGhp
cy5fcm90YXRlU3BoZXJlc1BhcmVudC5wb3NpdGlvbi5jb3B5RnJvbSh0aGlzLl9saW5lQm91bmRp
bmdCb3gucG9zaXRpb24pOworICAgICAgICAgICAgdGhpcy5fc2NhbGVCb3hlc1BhcmVudC5wb3Np
dGlvbi5jb3B5RnJvbSh0aGlzLl9saW5lQm91bmRpbmdCb3gucG9zaXRpb24pOworICAgICAgICAg
ICAgdGhpcy5fbGluZUJvdW5kaW5nQm94LmNvbXB1dGVXb3JsZE1hdHJpeCgpOworICAgICAgICAg
ICAgdGhpcy5fYW5jaG9yTWVzaC5wb3NpdGlvbi5jb3B5RnJvbSh0aGlzLl9saW5lQm91bmRpbmdC
b3guYWJzb2x1dGVQb3NpdGlvbik7CisgICAgICAgICAgICAvLyBSZXN0b3JlIHBvc2l0aW9uL3Jv
dGF0aW9uIHZhbHVlcworICAgICAgICAgICAgdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb25RdWF0
ZXJuaW9uLmNvcHlGcm9tKHRoaXMuX3RtcFF1YXRlcm5pb24pOworICAgICAgICAgICAgdGhpcy5h
dHRhY2hlZE1lc2gucG9zaXRpb24uY29weUZyb20odGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAg
ICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgcGFyZW50CisgICAgICAgICAgICB0aGlzLmF0dGFjaGVk
TWVzaC5zZXRQYXJlbnQob3JpZ2luYWxQYXJlbnQpOworICAgICAgICAgICAgLy8gUmVzdG9yZSBv
cmlnaW5hbCBza2VsZXRvbiBvdmVycmlkZSBtZXNoCisgICAgICAgICAgICBpZiAodGhpcy5hdHRh
Y2hlZE1lc2guc2tlbGV0b24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaGVkTWVzaC5z
a2VsZXRvbi5vdmVycmlkZU1lc2ggPSBvcmlnaW5hbFNrZWxldG9uT3ZlcnJpZGVNZXNoOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZVJvdGF0aW9uU3BoZXJl
cygpOworICAgICAgICB0aGlzLl91cGRhdGVTY2FsZUJveGVzKCk7CisgICAgICAgIGlmICh0aGlz
LmF0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgdGhpcy5fZXhpc3RpbmdNZXNoU2NhbGUuY29w
eUZyb20odGhpcy5hdHRhY2hlZE1lc2guc2NhbGluZyk7CisgICAgICAgICAgICBfTWlzY19waXZv
dFRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJQaXZvdFRvb2xzIl0uX1Jlc3Rv
cmVQaXZvdFBvaW50KHRoaXMuYXR0YWNoZWRNZXNoKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
Qm91bmRpbmdCb3hHaXptby5wcm90b3R5cGUuX3VwZGF0ZVJvdGF0aW9uU3BoZXJlcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdmFyIHJvdGF0ZVNwaGVyZXMgPSB0aGlzLl9yb3RhdGVTcGhlcmVz
UGFyZW50LmdldENoaWxkTWVzaGVzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsg
aSsrKSB7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDI7IGorKykgeworICAgICAg
ICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgMjsgaysrKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBpbmRleCA9ICgoaSAqIDQpICsgKGogKiAyKSkgKyBrOworICAgICAgICAgICAgICAg
ICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVTcGhlcmVz
W2luZGV4XS5wb3NpdGlvbi5zZXQodGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnggLyAyLCB0aGlz
Ll9ib3VuZGluZ0RpbWVuc2lvbnMueSAqIGosIHRoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy56ICog
ayk7CisgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVTcGhlcmVzW2luZGV4XS5wb3NpdGlv
bi5hZGRJblBsYWNlKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdKC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueCAvIDIsIC10aGlz
Ll9ib3VuZGluZ0RpbWVuc2lvbnMueSAvIDIsIC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueiAv
IDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVNwaGVyZXNbaW5kZXhdLmxvb2tB
dChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9y
MyJdLkNyb3NzKHJvdGF0ZVNwaGVyZXNbaW5kZXhdLnBvc2l0aW9uLm5vcm1hbGl6ZVRvTmV3KCks
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3Iz
Il0uUmlnaHQoKSkubm9ybWFsaXplVG9OZXcoKS5hZGQocm90YXRlU3BoZXJlc1tpbmRleF0ucG9z
aXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
aSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVTcGhlcmVzW2luZGV4XS5w
b3NpdGlvbi5zZXQodGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnggKiBqLCB0aGlzLl9ib3VuZGlu
Z0RpbWVuc2lvbnMueSAvIDIsIHRoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy56ICogayk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByb3RhdGVTcGhlcmVzW2luZGV4XS5wb3NpdGlvbi5hZGRJblBs
YWNlKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdKC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueCAvIDIsIC10aGlzLl9ib3VuZGlu
Z0RpbWVuc2lvbnMueSAvIDIsIC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueiAvIDIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVNwaGVyZXNbaW5kZXhdLmxvb2tBdChfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkNyb3Nz
KHJvdGF0ZVNwaGVyZXNbaW5kZXhdLnBvc2l0aW9uLm5vcm1hbGl6ZVRvTmV3KCksIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVXAoKSku
bm9ybWFsaXplVG9OZXcoKS5hZGQocm90YXRlU3BoZXJlc1tpbmRleF0ucG9zaXRpb24pKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVTcGhlcmVzW2luZGV4XS5wb3NpdGlvbi5zZXQo
dGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnggKiBqLCB0aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMu
eSAqIGssIHRoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy56IC8gMik7CisgICAgICAgICAgICAgICAg
ICAgICAgICByb3RhdGVTcGhlcmVzW2luZGV4XS5wb3NpdGlvbi5hZGRJblBsYWNlKG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKC10
aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueCAvIDIsIC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMu
eSAvIDIsIC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueiAvIDIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJvdGF0ZVNwaGVyZXNbaW5kZXhdLmxvb2tBdChfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLkNyb3NzKHJvdGF0ZVNwaGVy
ZXNbaW5kZXhdLnBvc2l0aW9uLm5vcm1hbGl6ZVRvTmV3KCksIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uRm9yd2FyZCgpKS5ub3JtYWxp
emVUb05ldygpLmFkZChyb3RhdGVTcGhlcmVzW2luZGV4XS5wb3NpdGlvbikpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpeGVkRHJhZ01lc2hT
Y3JlZW5TaXplICYmIHRoaXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5hY3RpdmVDYW1l
cmEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVNwaGVyZXNbaW5kZXhdLmFic29s
dXRlUG9zaXRpb24uc3VidHJhY3RUb1JlZih0aGlzLmdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2Nl
bmUuYWN0aXZlQ2FtZXJhLnBvc2l0aW9uLCB0aGlzLl90bXBWZWN0b3IpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGRpc3RhbmNlRnJvbUNhbWVyYSA9IHRoaXMucm90YXRpb25TcGhlcmVT
aXplICogdGhpcy5fdG1wVmVjdG9yLmxlbmd0aCgpIC8gdGhpcy5maXhlZERyYWdNZXNoU2NyZWVu
U2l6ZURpc3RhbmNlRmFjdG9yOworICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlU3BoZXJl
c1tpbmRleF0uc2NhbGluZy5zZXQoZGlzdGFuY2VGcm9tQ2FtZXJhLCBkaXN0YW5jZUZyb21DYW1l
cmEsIGRpc3RhbmNlRnJvbUNhbWVyYSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVTcGhlcmVz
W2luZGV4XS5zY2FsaW5nLnNldCh0aGlzLnJvdGF0aW9uU3BoZXJlU2l6ZSwgdGhpcy5yb3RhdGlv
blNwaGVyZVNpemUsIHRoaXMucm90YXRpb25TcGhlcmVTaXplKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgQm91bmRpbmdCb3hHaXptby5wcm90b3R5cGUuX3VwZGF0ZVNjYWxlQm94ZXMgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciBzY2FsZUJveGVzID0gdGhpcy5fc2NhbGVCb3hlc1BhcmVu
dC5nZXRDaGlsZE1lc2hlcygpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI7IGkrKykg
eworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAyOyBqKyspIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHZhciBrID0gMDsgayA8IDI7IGsrKykgeworICAgICAgICAgICAgICAgICAgICB2
YXIgaW5kZXggPSAoKGkgKiA0KSArIChqICogMikpICsgazsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHNjYWxlQm94ZXNbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZUJv
eGVzW2luZGV4XS5wb3NpdGlvbi5zZXQodGhpcy5fYm91bmRpbmdEaW1lbnNpb25zLnggKiBpLCB0
aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueSAqIGosIHRoaXMuX2JvdW5kaW5nRGltZW5zaW9ucy56
ICogayk7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZUJveGVzW2luZGV4XS5wb3NpdGlv
bi5hZGRJblBsYWNlKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdKC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueCAvIDIsIC10aGlz
Ll9ib3VuZGluZ0RpbWVuc2lvbnMueSAvIDIsIC10aGlzLl9ib3VuZGluZ0RpbWVuc2lvbnMueiAv
IDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpeGVkRHJhZ01lc2hTY3Jl
ZW5TaXplICYmIHRoaXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5hY3RpdmVDYW1lcmEp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZUJveGVzW2luZGV4XS5hYnNvbHV0
ZVBvc2l0aW9uLnN1YnRyYWN0VG9SZWYodGhpcy5naXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5l
LmFjdGl2ZUNhbWVyYS5wb3NpdGlvbiwgdGhpcy5fdG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgZGlzdGFuY2VGcm9tQ2FtZXJhID0gdGhpcy5zY2FsZUJveFNpemUg
KiB0aGlzLl90bXBWZWN0b3IubGVuZ3RoKCkgLyB0aGlzLmZpeGVkRHJhZ01lc2hTY3JlZW5TaXpl
RGlzdGFuY2VGYWN0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVCb3hlc1tp
bmRleF0uc2NhbGluZy5zZXQoZGlzdGFuY2VGcm9tQ2FtZXJhLCBkaXN0YW5jZUZyb21DYW1lcmEs
IGRpc3RhbmNlRnJvbUNhbWVyYSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2Fs
ZUJveGVzW2luZGV4XS5zY2FsaW5nLnNldCh0aGlzLnNjYWxlQm94U2l6ZSwgdGhpcy5zY2FsZUJv
eFNpemUsIHRoaXMuc2NhbGVCb3hTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRW5hYmxlcyByb3RhdGlvbiBvbiB0aGUg
c3BlY2lmaWVkIGF4aXMgYW5kIGRpc2FibGVzIHJvdGF0aW9uIG9uIHRoZSBvdGhlcnMKKyAgICAg
KiBAcGFyYW0gYXhpcyBUaGUgbGlzdCBvZiBheGlzIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgKGVn
LiAieHkiIG9yICJ4eXoiKQorICAgICAqLworICAgIEJvdW5kaW5nQm94R2l6bW8ucHJvdG90eXBl
LnNldEVuYWJsZWRSb3RhdGlvbkF4aXMgPSBmdW5jdGlvbiAoYXhpcykgeworICAgICAgICB0aGlz
Ll9yb3RhdGVTcGhlcmVzUGFyZW50LmdldENoaWxkTWVzaGVzKCkuZm9yRWFjaChmdW5jdGlvbiAo
bSwgaSkgeworICAgICAgICAgICAgaWYgKGkgPCA0KSB7CisgICAgICAgICAgICAgICAgbS5zZXRF
bmFibGVkKGF4aXMuaW5kZXhPZigieCIpICE9IC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKGkgPCA4KSB7CisgICAgICAgICAgICAgICAgbS5zZXRFbmFibGVkKGF4aXMu
aW5kZXhPZigieSIpICE9IC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIG0uc2V0RW5hYmxlZChheGlzLmluZGV4T2YoInoiKSAhPSAtMSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogRW5hYmxl
cy9kaXNhYmxlcyBzY2FsaW5nCisgICAgICogQHBhcmFtIGVuYWJsZSBpZiBzY2FsaW5nIHNob3Vs
ZCBiZSBlbmFibGVkCisgICAgICovCisgICAgQm91bmRpbmdCb3hHaXptby5wcm90b3R5cGUuc2V0
RW5hYmxlZFNjYWxpbmcgPSBmdW5jdGlvbiAoZW5hYmxlKSB7CisgICAgICAgIHRoaXMuX3NjYWxl
Qm94ZXNQYXJlbnQuZ2V0Q2hpbGRNZXNoZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChtLCBpKSB7Cisg
ICAgICAgICAgICBtLnNldEVuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAg
ICBCb3VuZGluZ0JveEdpem1vLnByb3RvdHlwZS5fdXBkYXRlRHVtbXkgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICh0aGlzLl9kcmFnTWVzaCkgeworICAgICAgICAgICAgdGhpcy5fZHJhZ01l
c2gucG9zaXRpb24uY29weUZyb20odGhpcy5fbGluZUJvdW5kaW5nQm94LmdldEFic29sdXRlUG9z
aXRpb24oKSk7CisgICAgICAgICAgICB0aGlzLl9kcmFnTWVzaC5zY2FsaW5nLmNvcHlGcm9tKHRo
aXMuX2xpbmVCb3VuZGluZ0JveC5zY2FsaW5nKTsKKyAgICAgICAgICAgIHRoaXMuX2RyYWdNZXNo
LnJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbSh0aGlzLl9yb290TWVzaC5yb3RhdGlvblF1YXRl
cm5pb24pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFbmFibGVzIGEgcG9p
bnRlciBkcmFnIGJlaGF2aW9yIG9uIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIGdpem1vCisgICAg
ICovCisgICAgQm91bmRpbmdCb3hHaXptby5wcm90b3R5cGUuZW5hYmxlRHJhZ0JlaGF2aW9yID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9kcmFnTWVzaCA9IF9NZXNoZXNfbWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNZXNoIl0uQ3JlYXRlQm94KCJkdW1teSIsIDEsIHRo
aXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgIHRoaXMuX2RyYWdNZXNo
LnZpc2liaWxpdHkgPSAwOworICAgICAgICB0aGlzLl9kcmFnTWVzaC5yb3RhdGlvblF1YXRlcm5p
b24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlF1YXRlcm5pb24iXSgpOworICAgICAgICB0aGlzLnBvaW50ZXJEcmFnQmVoYXZpb3IudXNlT2Jq
ZWN0T3JpZW5hdGlvbkZvckRyYWdnaW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2RyYWdNZXNo
LmFkZEJlaGF2aW9yKHRoaXMucG9pbnRlckRyYWdCZWhhdmlvcik7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBEaXNwb3NlcyBvZiB0aGUgZ2l6bW8KKyAgICAgKi8KKyAgICBCb3VuZGluZ0JveEdp
em1vLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmdpem1v
TGF5ZXIudXRpbGl0eUxheWVyU2NlbmUub25Qb2ludGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5f
cG9pbnRlck9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5naXptb0xheWVyLm9yaWdpbmFsU2NlbmUu
b25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9yZW5kZXJPYnNlcnZlcik7Cisg
ICAgICAgIHRoaXMuX2xpbmVCb3VuZGluZ0JveC5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMuX3Jv
dGF0ZVNwaGVyZXNQYXJlbnQuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9zY2FsZUJveGVzUGFy
ZW50LmRpc3Bvc2UoKTsKKyAgICAgICAgaWYgKHRoaXMuX2RyYWdNZXNoKSB7CisgICAgICAgICAg
ICB0aGlzLl9kcmFnTWVzaC5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgX3N1cGVyLnBy
b3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNYWtl
cyBhIG1lc2ggbm90IHBpY2thYmxlIGFuZCB3cmFwcyB0aGUgbWVzaCBpbnNpZGUgb2YgYSBib3Vu
ZGluZyBib3ggbWVzaCB0aGF0IGlzIHBpY2thYmxlLiAoVGhpcyBpcyB1c2VmdWwgdG8gYXZvaWQg
cGlja2luZyB3aXRoaW4gY29tcGxleCBnZW9tZXRyeSkKKyAgICAgKiBAcGFyYW0gbWVzaCB0aGUg
bWVzaCB0byB3cmFwIGluIHRoZSBib3VuZGluZyBib3ggbWVzaCBhbmQgbWFrZSBub3QgcGlja2Fi
bGUKKyAgICAgKiBAcmV0dXJucyB0aGUgYm91bmRpbmcgYm94IG1lc2ggd2l0aCB0aGUgcGFzc2Vk
IGluIG1lc2ggYXMgYSBjaGlsZAorICAgICAqLworICAgIEJvdW5kaW5nQm94R2l6bW8uTWFrZU5v
dFBpY2thYmxlQW5kV3JhcEluQm91bmRpbmdCb3ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAg
ICB2YXIgbWFrZU5vdFBpY2thYmxlID0gZnVuY3Rpb24gKHJvb3QpIHsKKyAgICAgICAgICAgIHJv
b3QuaXNQaWNrYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgcm9vdC5nZXRDaGlsZE1lc2hlcygp
LmZvckVhY2goZnVuY3Rpb24gKGMpIHsKKyAgICAgICAgICAgICAgICBtYWtlTm90UGlja2FibGUo
Yyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAgICAgICAgbWFrZU5vdFBpY2thYmxl
KG1lc2gpOworICAgICAgICAvLyBSZXNldCBwb3NpdGlvbiB0byBnZXQgYm91ZG5pbmcgYm94IGZy
b20gb3JpZ2luIHdpdGggbm8gcm90YXRpb24KKyAgICAgICAgaWYgKCFtZXNoLnJvdGF0aW9uUXVh
dGVybmlvbikgeworICAgICAgICAgICAgbWVzaC5yb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdLlJv
dGF0aW9uWWF3UGl0Y2hSb2xsKG1lc2gucm90YXRpb24ueSwgbWVzaC5yb3RhdGlvbi54LCBtZXNo
LnJvdGF0aW9uLnopOworICAgICAgICB9CisgICAgICAgIHZhciBvbGRQb3MgPSBtZXNoLnBvc2l0
aW9uLmNsb25lKCk7CisgICAgICAgIHZhciBvbGRSb3QgPSBtZXNoLnJvdGF0aW9uUXVhdGVybmlv
bi5jbG9uZSgpOworICAgICAgICBtZXNoLnJvdGF0aW9uUXVhdGVybmlvbi5zZXQoMCwgMCwgMCwg
MSk7CisgICAgICAgIG1lc2gucG9zaXRpb24uc2V0KDAsIDAsIDApOworICAgICAgICAvLyBVcGRh
dGUgYm91bmRpbmcgZGltZW5zaW9ucy9wb3NpdGlvbnMKKyAgICAgICAgdmFyIGJveCA9IF9NZXNo
ZXNfQnVpbGRlcnNfYm94QnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJCb3hC
dWlsZGVyIl0uQ3JlYXRlQm94KCJib3giLCB7IHNpemU6IDEgfSwgbWVzaC5nZXRTY2VuZSgpKTsK
KyAgICAgICAgdmFyIGJvdW5kaW5nTWluTWF4ID0gbWVzaC5nZXRIaWVyYXJjaHlCb3VuZGluZ1Zl
Y3RvcnMoKTsKKyAgICAgICAgYm91bmRpbmdNaW5NYXgubWF4LnN1YnRyYWN0VG9SZWYoYm91bmRp
bmdNaW5NYXgubWluLCBib3guc2NhbGluZyk7CisgICAgICAgIC8vIEFkanVzdCBzY2FsZSB0byBh
dm9pZCB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiBhZGRpbmcgY2hpbGQKKyAgICAgICAgaWYgKGJv
eC5zY2FsaW5nLnkgPT09IDApIHsKKyAgICAgICAgICAgIGJveC5zY2FsaW5nLnkgPSBfTWF0aHNf
bWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIkVwc2lsb24iXTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoYm94LnNjYWxpbmcueCA9PT0gMCkgeworICAgICAgICAg
ICAgYm94LnNjYWxpbmcueCA9IF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTVfX1siRXBzaWxvbiJdOworICAgICAgICB9CisgICAgICAgIGlmIChib3guc2Nh
bGluZy56ID09PSAwKSB7CisgICAgICAgICAgICBib3guc2NhbGluZy56ID0gX01hdGhzX21hdGhf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJFcHNpbG9uIl07CisgICAg
ICAgIH0KKyAgICAgICAgYm94LnBvc2l0aW9uLnNldCgoYm91bmRpbmdNaW5NYXgubWF4LnggKyBi
b3VuZGluZ01pbk1heC5taW4ueCkgLyAyLCAoYm91bmRpbmdNaW5NYXgubWF4LnkgKyBib3VuZGlu
Z01pbk1heC5taW4ueSkgLyAyLCAoYm91bmRpbmdNaW5NYXgubWF4LnogKyBib3VuZGluZ01pbk1h
eC5taW4ueikgLyAyKTsKKyAgICAgICAgLy8gUmVzdG9yZSBvcmlnaW5hbCBwb3NpdGlvbnMKKyAg
ICAgICAgbWVzaC5hZGRDaGlsZChib3gpOworICAgICAgICBtZXNoLnJvdGF0aW9uUXVhdGVybmlv
bi5jb3B5RnJvbShvbGRSb3QpOworICAgICAgICBtZXNoLnBvc2l0aW9uLmNvcHlGcm9tKG9sZFBv
cyk7CisgICAgICAgIC8vIFJldmVyc2UgcGFyZW50aW5nCisgICAgICAgIG1lc2gucmVtb3ZlQ2hp
bGQoYm94KTsKKyAgICAgICAgYm94LmFkZENoaWxkKG1lc2gpOworICAgICAgICBib3gudmlzaWJp
bGl0eSA9IDA7CisgICAgICAgIHJldHVybiBib3g7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
dXN0b21NZXNoZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBnaXptbworICAgICAqIEBwYXJh
bSBtZXNoIFRoZSBtZXNoIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgbWVzaCBvZiB0aGUgZ2l6bW8K
KyAgICAgKi8KKyAgICBCb3VuZGluZ0JveEdpem1vLnByb3RvdHlwZS5zZXRDdXN0b21NZXNoID0g
ZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkxvZ2dlciJdLkVycm9yKCJDdXN0b20gbWVzaGVzIGFyZSBub3Qgc3VwcG9y
dGVkIG9uIHRoaXMgZ2l6bW8iKTsKKyAgICB9OworICAgIHJldHVybiBCb3VuZGluZ0JveEdpem1v
OworfShfZ2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkdpem1vIl0pKTsKKwor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9HaXptb3MvZ2l6bW8udHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vR2l6bW9zL2dpem1vLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogR2l6bW8gKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2l6bW8iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIEdpem1vOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9N
ZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9SZW5kZXJpbmdfdXRp
bGl0eUxheWVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlciAqLyAiLi9S
ZW5kZXJpbmcvdXRpbGl0eUxheWVyUmVuZGVyZXIudHMiKTsKKworCisKKy8qKgorICogUmVuZGVy
cyBnaXptb3Mgb24gdG9wIG9mIGFuIGV4aXN0aW5nIHNjZW5lIHdoaWNoIHByb3ZpZGUgY29udHJv
bHMgZm9yIHBvc2l0aW9uLCByb3RhdGlvbiwgZXRjLgorICovCit2YXIgR2l6bW8gPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGdpem1vCisg
ICAgICogQHBhcmFtIGdpem1vTGF5ZXIgVGhlIHV0aWxpdHkgbGF5ZXIgdGhlIGdpem1vIHdpbGwg
YmUgYWRkZWQgdG8KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBHaXptbygKKyAgICAvKiogVGhlIHV0
aWxpdHkgbGF5ZXIgdGhlIGdpem1vIHdpbGwgYmUgYWRkZWQgdG8gKi8KKyAgICBnaXptb0xheWVy
KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChnaXptb0xheWVyID09
PSB2b2lkIDApIHsgZ2l6bW9MYXllciA9IF9SZW5kZXJpbmdfdXRpbGl0eUxheWVyUmVuZGVyZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVXRpbGl0eUxheWVyUmVuZGVyZXIiXS5EZWZh
dWx0VXRpbGl0eUxheWVyOyB9CisgICAgICAgIHRoaXMuZ2l6bW9MYXllciA9IGdpem1vTGF5ZXI7
CisgICAgICAgIHRoaXMuX2F0dGFjaGVkTWVzaCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBSYXRpbyBmb3IgdGhlIHNjYWxlIG9mIHRoZSBnaXptbyAoRGVmYXVsdDogMSkKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuc2NhbGVSYXRpbyA9IDE7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBJZiBhIGN1c3RvbSBtZXNoIGhhcyBiZWVuIHNldCAoRGVmYXVsdDogZmFsc2UpCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLl9jdXN0b21NZXNoU2V0ID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBJZiBzZXQgdGhlIGdpem1vJ3Mgcm90YXRpb24gd2lsbCBiZSB1cGRhdGVk
IHRvIG1hdGNoIHRoZSBhdHRhY2hlZCBtZXNoIGVhY2ggZnJhbWUgKERlZmF1bHQ6IHRydWUpCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLnVwZGF0ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0YWNo
ZWRNZXNoID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHNldCB0aGUgZ2l6bW8n
cyBwb3NpdGlvbiB3aWxsIGJlIHVwZGF0ZWQgdG8gbWF0Y2ggdGhlIGF0dGFjaGVkIG1lc2ggZWFj
aCBmcmFtZSAoRGVmYXVsdDogdHJ1ZSkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudXBkYXRl
R2l6bW9Qb3NpdGlvblRvTWF0Y2hBdHRhY2hlZE1lc2ggPSB0cnVlOworICAgICAgICAvKioKKyAg
ICAgICAgICogV2hlbiBzZXQsIHRoZSBnaXptbyB3aWxsIGFsd2F5cyBhcHBlYXIgdGhlIHNhbWUg
c2l6ZSBubyBtYXR0ZXIgd2hlcmUgdGhlIGNhbWVyYSBpcyAoZGVmYXVsdDogdHJ1ZSkKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMudXBkYXRlU2NhbGUgPSB0cnVlOworICAgICAgICB0aGlzLl9p
bnRlcmFjdGlvbnNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fdGVtcFZlY3RvciA9IG5l
dyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdKCk7CisgICAgICAgIHRoaXMuX3Jvb3RNZXNoID0gbmV3IF9NZXNoZXNfbWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0oImdpem1vUm9vdE5vZGUiLCBnaXptb0xheWVy
LnV0aWxpdHlMYXllclNjZW5lKTsKKyAgICAgICAgdGhpcy5fcm9vdE1lc2gucm90YXRpb25RdWF0
ZXJuaW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlF1YXRlcm5pb24iXS5JZGVudGl0eSgpOworICAgICAgICB0aGlzLl9iZWZvcmVSZW5kZXJPYnNl
cnZlciA9IHRoaXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5vbkJlZm9yZVJlbmRlck9i
c2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl91cGRhdGUoKTsK
KyAgICAgICAgfSk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHaXptby5wcm90
b3R5cGUsICJhdHRhY2hlZE1lc2giLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNZXNoIHRo
YXQgdGhlIGdpem1vIHdpbGwgYmUgYXR0YWNoZWQgdG8uIChlZy4gb24gYSBkcmFnIGdpem1vIHRo
ZSBtZXNoIHRoYXQgd2lsbCBiZSBkcmFnZ2VkKQorICAgICAgICAgKiAqIFdoZW4gc2V0LCBpbnRl
cmFjdGlvbnMgd2lsbCBiZSBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hlZE1lc2g7CisgICAgICAg
IH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9h
dHRhY2hlZE1lc2ggPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX3Jvb3RNZXNoLnNldEVuYWJs
ZWQodmFsdWUgPyB0cnVlIDogZmFsc2UpOworICAgICAgICAgICAgdGhpcy5fYXR0YWNoZWRNZXNo
Q2hhbmdlZCh2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIERpc3Bv
c2VzIGFuZCByZXBsYWNlcyB0aGUgY3VycmVudCBtZXNoZXMgaW4gdGhlIGdpem1vIHdpdGggdGhl
IHNwZWNpZmllZCBtZXNoCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gcmVwbGFjZSB0
aGUgZGVmYXVsdCBtZXNoIG9mIHRoZSBnaXptbworICAgICAqLworICAgIEdpem1vLnByb3RvdHlw
ZS5zZXRDdXN0b21NZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKG1lc2guZ2V0
U2NlbmUoKSAhPSB0aGlzLmdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpIHsKKyAgICAgICAg
ICAgIHRocm93ICJXaGVuIHNldHRpbmcgYSBjdXN0b20gbWVzaCBvbiBhIGdpem1vLCB0aGUgY3Vz
dG9tIG1lc2hlcyBzY2VuZSBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBnaXptb3MgKGVnLiBnaXpt
by5naXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKSI7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fcm9vdE1lc2guZ2V0Q2hpbGRNZXNoZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7CisgICAg
ICAgICAgICBjLmRpc3Bvc2UoKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1lc2gucGFyZW50ID0g
dGhpcy5fcm9vdE1lc2g7CisgICAgICAgIHRoaXMuX2N1c3RvbU1lc2hTZXQgPSB0cnVlOworICAg
IH07CisgICAgR2l6bW8ucHJvdG90eXBlLl9hdHRhY2hlZE1lc2hDaGFuZ2VkID0gZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBnaXptbyB0byBt
YXRjaCB0aGUgYXR0YWNoZWQgbWVzaCdzIHBvc2l0aW9uL3JvdGF0aW9uCisgICAgICovCisgICAg
R2l6bW8ucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
LmF0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgdmFyIGVmZmVjdGl2ZU1lc2ggPSB0aGlzLmF0
dGFjaGVkTWVzaC5fZWZmZWN0aXZlTWVzaCB8fCB0aGlzLmF0dGFjaGVkTWVzaDsKKyAgICAgICAg
ICAgIC8vIFBvc2l0aW9uCisgICAgICAgICAgICBpZiAodGhpcy51cGRhdGVHaXptb1Bvc2l0aW9u
VG9NYXRjaEF0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3RNZXNoLnBv
c2l0aW9uLmNvcHlGcm9tKGVmZmVjdGl2ZU1lc2guYWJzb2x1dGVQb3NpdGlvbik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBSb3RhdGlvbgorICAgICAgICAgICAgaWYgKHRoaXMudXBk
YXRlR2l6bW9Sb3RhdGlvblRvTWF0Y2hBdHRhY2hlZE1lc2gpIHsKKyAgICAgICAgICAgICAgICBl
ZmZlY3RpdmVNZXNoLmdldFdvcmxkTWF0cml4KCkuZGVjb21wb3NlKHVuZGVmaW5lZCwgdGhpcy5f
cm9vdE1lc2gucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3RNZXNoLnJvdGF0aW9uUXVhdGVybmlv
bi5zZXQoMCwgMCwgMCwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBTY2FsZQor
ICAgICAgICAgICAgaWYgKHRoaXMudXBkYXRlU2NhbGUpIHsKKyAgICAgICAgICAgICAgICB2YXIg
YWN0aXZlQ2FtZXJhID0gdGhpcy5naXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lLmFjdGl2ZUNh
bWVyYTsKKyAgICAgICAgICAgICAgICB2YXIgY2FtZXJhUG9zaXRpb24gPSBhY3RpdmVDYW1lcmEu
Z2xvYmFsUG9zaXRpb247CisgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUNhbWVyYS5kZXZpY2VQ
b3NpdGlvbikgeworICAgICAgICAgICAgICAgICAgICBjYW1lcmFQb3NpdGlvbiA9IGFjdGl2ZUNh
bWVyYS5kZXZpY2VQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dGhpcy5fcm9vdE1lc2gucG9zaXRpb24uc3VidHJhY3RUb1JlZihjYW1lcmFQb3NpdGlvbiwgdGhp
cy5fdGVtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgdmFyIGRpc3QgPSB0aGlzLl90ZW1wVmVj
dG9yLmxlbmd0aCgpICogdGhpcy5zY2FsZVJhdGlvOworICAgICAgICAgICAgICAgIHRoaXMuX3Jv
b3RNZXNoLnNjYWxpbmcuc2V0KGRpc3QsIGRpc3QsIGRpc3QpOworICAgICAgICAgICAgICAgIC8v
IEFjY291bnQgZm9yIGhhbmRlZG5lc3MsIHNpbWlsYXIgdG8gTWF0cml4LmRlY29tcG9zZQorICAg
ICAgICAgICAgICAgIGlmIChlZmZlY3RpdmVNZXNoLl9nZXRXb3JsZE1hdHJpeERldGVybWluYW50
KCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3RNZXNoLnNjYWxpbmcueSAq
PSAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yb290TWVzaC5zY2FsaW5nLnNldEFsbCh0aGlzLnNj
YWxlUmF0aW8pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBEaXNwb3NlcyBvZiB0aGUgZ2l6bW8KKyAgICAgKi8KKyAgICBHaXptby5wcm90b3R5cGUu
ZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fcm9vdE1lc2guZGlzcG9zZSgp
OworICAgICAgICBpZiAodGhpcy5fYmVmb3JlUmVuZGVyT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAg
IHRoaXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5vbkJlZm9yZVJlbmRlck9ic2VydmFi
bGUucmVtb3ZlKHRoaXMuX2JlZm9yZVJlbmRlck9ic2VydmVyKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgcmV0dXJuIEdpem1vOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9H
aXptb3MvZ2l6bW9NYW5hZ2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9HaXptb3MvZ2l6bW9NYW5hZ2VyLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEdpem1vTWFu
YWdlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHaXptb01hbmFnZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIEdpem1vTWFuYWdlcjsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2Jz
ZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FdmVudHNfcG9pbnRlckV2
ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vRXZlbnRzL3BvaW50ZXJFdmVudHMgKi8gIi4vRXZlbnRzL3BvaW50ZXJFdmVudHMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVz
L2Fic3RyYWN0TWVzaCAqLyAiLi9NZXNoZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmVuZGVyaW5n
L3V0aWxpdHlMYXllclJlbmRlcmVyICovICIuL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJl
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRo
cy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfQmVoYXZpb3JzX01lc2hlc19zaXhEb2ZEcmFnQmVoYXZpb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0JlaGF2aW9y
cy9NZXNoZXMvc2l4RG9mRHJhZ0JlaGF2aW9yICovICIuL0JlaGF2aW9ycy9NZXNoZXMvc2l4RG9m
RHJhZ0JlaGF2aW9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JvdGF0aW9uR2l6
bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vcm90YXRpb25HaXptbyAqLyAiLi9HaXptb3Mvcm90YXRpb25HaXptby50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9wb3NpdGlvbkdpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc2l0aW9uR2l6bW8gKi8gIi4vR2l6
bW9zL3Bvc2l0aW9uR2l6bW8udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NhbGVH
aXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9zY2FsZUdpem1vICovICIuL0dpem1vcy9zY2FsZUdpem1vLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2JvdW5kaW5nQm94R2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYm91bmRpbmdCb3hHaXptbyAqLyAiLi9H
aXptb3MvYm91bmRpbmdCb3hHaXptby50cyIpOworCisKKworCisKKworCisKKworCisvKioKKyAq
IEhlbHBzIHNldHVwIGdpem1vJ3MgaW4gdGhlIHNjZW5lIHRvIHJvdGF0ZS9zY2FsZS9wb3NpdGlv
biBtZXNoZXMKKyAqLwordmFyIEdpem1vTWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICAvKioKKyAgICAgKiBJbnN0YXRpYXRlcyBhIGdpem1vIG1hbmFnZXIKKyAgICAg
KiBAcGFyYW0gc2NlbmUgdGhlIHNjZW5lIHRvIG92ZXJsYXkgdGhlIGdpem1vcyBvbiB0b3Agb2YK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBHaXptb01hbmFnZXIoc2NlbmUpIHsKKyAgICAgICAgdmFy
IF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICAvKiog
V2hlbiB0cnVlLCB0aGUgZ2l6bW8gd2lsbCBiZSBkZXRhY2hlZCBmcm9tIHRoZSBjdXJyZW50IG9i
amVjdCB3aGVuIGEgcG9pbnRlciBkb3duIG9jY3VycyB3aXRoIGFuIGVtcHR5IHBpY2tlZCBtZXNo
ICovCisgICAgICAgIHRoaXMuY2xlYXJHaXptb09uRW1wdHlQb2ludGVyRXZlbnQgPSBmYWxzZTsK
KyAgICAgICAgLyoqIEZpcmVzIGFuIGV2ZW50IHdoZW4gdGhlIG1hbmFnZXIgaXMgYXR0YWNoZWQg
dG8gYSBtZXNoICovCisgICAgICAgIHRoaXMub25BdHRhY2hlZFRvTWVzaE9ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgdGhpcy5fZ2l6bW9zRW5hYmxlZCA9IHsgcG9zaXRpb25HaXptbzog
ZmFsc2UsIHJvdGF0aW9uR2l6bW86IGZhbHNlLCBzY2FsZUdpem1vOiBmYWxzZSwgYm91bmRpbmdC
b3hHaXptbzogZmFsc2UgfTsKKyAgICAgICAgdGhpcy5fcG9pbnRlck9ic2VydmVyID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fYXR0YWNoZWRNZXNoID0gbnVsbDsKKyAgICAgICAgdGhpcy5fYm91bmRp
bmdCb3hDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIkNvbG9yMyJdLkZyb21IZXhTdHJpbmcoIiMwOTg0ZTMiKTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFdoZW4gYm91bmRpbmcgYm94IGdpem1vIGlzIGVuYWJsZWQsIHRoaXMgY2FuIGJlIHVz
ZWQgdG8gdHJhY2sgZHJhZy9lbmQgZXZlbnRzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmJv
dW5kaW5nQm94RHJhZ0JlaGF2aW9yID0gbmV3IF9CZWhhdmlvcnNfTWVzaGVzX3NpeERvZkRyYWdC
ZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTaXhEb2ZEcmFnQmVoYXZpb3Ii
XSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQXJyYXkgb2YgbWVzaGVzIHdoaWNoIHdpbGwg
aGF2ZSB0aGUgZ2l6bW8gYXR0YWNoZWQgd2hlbiBhIHBvaW50ZXIgc2VsZWN0ZWQgdGhlbS4gSWYg
bnVsbCwgYWxsIG1lc2hlcyBhcmUgYXR0YWNoYWJsZS4gKERlZmF1bHQ6IG51bGwpCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmF0dGFjaGFibGVNZXNoZXMgPSBudWxsOworICAgICAgICAvKioK
KyAgICAgICAgICogSWYgcG9pbnRlciBldmVudHMgc2hvdWxkIHBlcmZvcm0gYXR0YWNoaW5nL2Rl
dGFjaGluZyBhIGdpem1vLCBpZiBmYWxzZSB0aGlzIGNhbiBiZSBkb25lIG1hbnVhbGx5IHZpYSBh
dHRhY2hUb01lc2guIChEZWZhdWx0OiB0cnVlKQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy51
c2VQb2ludGVyVG9BdHRhY2hHaXptb3MgPSB0cnVlOworICAgICAgICB0aGlzLl9kZWZhdWx0S2Vl
cERlcHRoVXRpbGl0eUxheWVyID0gbmV3IF9SZW5kZXJpbmdfdXRpbGl0eUxheWVyUmVuZGVyZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVXRpbGl0eUxheWVyUmVuZGVyZXIiXShzY2Vu
ZSk7CisgICAgICAgIHRoaXMuX2RlZmF1bHRLZWVwRGVwdGhVdGlsaXR5TGF5ZXIudXRpbGl0eUxh
eWVyU2NlbmUuYXV0b0NsZWFyRGVwdGhBbmRTdGVuY2lsID0gZmFsc2U7CisgICAgICAgIHRoaXMu
X2RlZmF1bHRVdGlsaXR5TGF5ZXIgPSBuZXcgX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJVdGlsaXR5TGF5ZXJSZW5kZXJlciJdKHNj
ZW5lKTsKKyAgICAgICAgdGhpcy5naXptb3MgPSB7IHBvc2l0aW9uR2l6bW86IG51bGwsIHJvdGF0
aW9uR2l6bW86IG51bGwsIHNjYWxlR2l6bW86IG51bGwsIGJvdW5kaW5nQm94R2l6bW86IG51bGwg
fTsKKyAgICAgICAgLy8gSW5zdGF0aWF0ZS9kaXNwb3NlIGdpem1vcyBiYXNlZCBvbiBwb2ludGVy
IGFjdGlvbnMKKyAgICAgICAgdGhpcy5fcG9pbnRlck9ic2VydmVyID0gc2NlbmUub25Qb2ludGVy
T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHBvaW50ZXJJbmZvKSB7CisgICAgICAgICAgICBpZiAo
IV90aGlzLnVzZVBvaW50ZXJUb0F0dGFjaEdpem1vcykgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwb2ludGVySW5mby50eXBlID09IF9F
dmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb2ludGVy
RXZlbnRUeXBlcyJdLlBPSU5URVJET1dOKSB7CisgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXJJ
bmZvLnBpY2tJbmZvICYmIHBvaW50ZXJJbmZvLnBpY2tJbmZvLnBpY2tlZE1lc2gpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBwb2ludGVySW5mby5waWNrSW5mby5waWNrZWRNZXNo
OworICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuYXR0YWNoYWJsZU1lc2hlcyA9PSBudWxs
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRhY2ggdG8gdGhlIG1vc3QgcGFyZW50
IG5vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50
ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJl
bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRh
Y2ggdG8gdGhlIHBhcmVudCBub2RlIHRoYXQgaXMgYW4gYXR0YWNoYWJsZU1lc2gKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgX3RoaXMuYXR0YWNoYWJsZU1lc2hlcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXNoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUgJiYgKG5vZGUgPT0gbWVzaCB8fCBub2Rl
LmlzRGVzY2VuZGFudE9mKG1lc2gpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlID0gbWVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlIGlu
c3RhbmNlb2YgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQWJzdHJhY3RNZXNoIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5f
YXR0YWNoZWRNZXNoICE9IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5hdHRhY2hUb01lc2gobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoX3RoaXMuY2xlYXJHaXptb09uRW1wdHlQb2ludGVyRXZlbnQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5hdHRhY2hUb01lc2gobnVsbCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChf
dGhpcy5jbGVhckdpem1vT25FbXB0eVBvaW50ZXJFdmVudCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMuYXR0YWNoVG9NZXNoKG51bGwpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KEdpem1vTWFuYWdlci5wcm90b3R5cGUsICJrZWVwRGVwdGhV
dGlsaXR5TGF5ZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVdGlsaXR5IGxheWVyIHRo
YXQgdGhlIGJvdW5kaW5nIGJveCBnaXptbyBiZWxvbmdzIHRvCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0S2Vl
cERlcHRoVXRpbGl0eUxheWVyOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoR2l6bW9NYW5hZ2VyLnByb3RvdHlwZSwgInV0aWxpdHlMYXllciIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFV0aWxpdHkgbGF5ZXIgdGhhdCBhbGwgZ2l6bW9zIGJlc2lkZXMg
Ym91bmRpbmcgYm94IGJlbG9uZyB0bworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFV0aWxpdHlMYXllcjsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQXR0YWNoZXMgYSBzZXQgb2YgZ2l6bW9z
IHRvIHRoZSBzcGVjaWZpZWQgbWVzaAorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRoZSBn
aXptbydzIHNob3VsZCBiZSBhdHRhY2hlZCB0bworICAgICAqLworICAgIEdpem1vTWFuYWdlci5w
cm90b3R5cGUuYXR0YWNoVG9NZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKHRo
aXMuX2F0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgdGhpcy5fYXR0YWNoZWRNZXNoLnJlbW92
ZUJlaGF2aW9yKHRoaXMuYm91bmRpbmdCb3hEcmFnQmVoYXZpb3IpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2F0dGFjaGVkTWVzaCA9IG1lc2g7CisgICAgICAgIGZvciAodmFyIGtleSBpbiB0
aGlzLmdpem1vcykgeworICAgICAgICAgICAgdmFyIGdpem1vID0gKHRoaXMuZ2l6bW9zW2tleV0p
OworICAgICAgICAgICAgaWYgKGdpem1vICYmIHRoaXMuX2dpem1vc0VuYWJsZWRba2V5XSkgewor
ICAgICAgICAgICAgICAgIGdpem1vLmF0dGFjaGVkTWVzaCA9IG1lc2g7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuYm91bmRpbmdCb3hHaXptb0VuYWJsZWQgJiYg
dGhpcy5fYXR0YWNoZWRNZXNoKSB7CisgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZE1lc2guYWRk
QmVoYXZpb3IodGhpcy5ib3VuZGluZ0JveERyYWdCZWhhdmlvcik7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5vbkF0dGFjaGVkVG9NZXNoT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMobWVzaCk7
CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2l6bW9NYW5hZ2VyLnByb3RvdHlw
ZSwgInBvc2l0aW9uR2l6bW9FbmFibGVkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9naXptb3NFbmFibGVkLnBvc2l0aW9uR2l6bW87Cisg
ICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0aGUgcG9zaXRpb24gZ2l6bW8g
aXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmICghdGhpcy5naXpt
b3MucG9zaXRpb25HaXptbykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmdpem1vcy5wb3Np
dGlvbkdpem1vID0gbmV3IF9wb3NpdGlvbkdpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83
X19bIlBvc2l0aW9uR2l6bW8iXSh0aGlzLl9kZWZhdWx0VXRpbGl0eUxheWVyKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5naXptb3MucG9zaXRpb25HaXptby5hdHRh
Y2hlZE1lc2ggPSB0aGlzLl9hdHRhY2hlZE1lc2g7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmICh0aGlzLmdpem1vcy5wb3NpdGlvbkdpem1vKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5naXptb3MucG9zaXRpb25HaXptby5hdHRhY2hlZE1lc2ggPSBudWxsOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fZ2l6bW9zRW5hYmxlZC5wb3NpdGlvbkdpem1vID0gdmFs
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHaXptb01h
bmFnZXIucHJvdG90eXBlLCAicm90YXRpb25HaXptb0VuYWJsZWQiLCB7CisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dpem1vc0VuYWJsZWQucm90
YXRpb25HaXptbzsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBy
b3RhdGlvbiBnaXptbyBpcyBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
aWYgKCF0aGlzLmdpem1vcy5yb3RhdGlvbkdpem1vKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuZ2l6bW9zLnJvdGF0aW9uR2l6bW8gPSBuZXcgX3JvdGF0aW9uR2l6bW9fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfX1siUm90YXRpb25HaXptbyJdKHRoaXMuX2RlZmF1bHRVdGlsaXR5TGF5
ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLmdpem1vcy5yb3Rh
dGlvbkdpem1vLmF0dGFjaGVkTWVzaCA9IHRoaXMuX2F0dGFjaGVkTWVzaDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZ2l6bW9zLnJvdGF0aW9uR2l6bW8pIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLmdpem1vcy5yb3RhdGlvbkdpem1vLmF0dGFjaGVkTWVzaCA9IG51
bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9naXptb3NFbmFibGVkLnJvdGF0
aW9uR2l6bW8gPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEdpem1vTWFuYWdlci5wcm90b3R5cGUsICJzY2FsZUdpem1vRW5hYmxlZCIsIHsKKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2l6bW9z
RW5hYmxlZC5zY2FsZUdpem1vOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICog
SWYgdGhlIHNjYWxlIGdpem1vIGlzIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLmdpem1vcy5zY2FsZUdpem1vID0gdGhpcy5naXptb3Muc2NhbGVHaXptbyB8fCBu
ZXcgX3NjYWxlR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2NhbGVHaXptbyJd
KHRoaXMuX2RlZmF1bHRVdGlsaXR5TGF5ZXIpOworICAgICAgICAgICAgICAgIHRoaXMuZ2l6bW9z
LnNjYWxlR2l6bW8uYXR0YWNoZWRNZXNoID0gdGhpcy5fYXR0YWNoZWRNZXNoOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5naXptb3Muc2NhbGVHaXptbykgeworICAg
ICAgICAgICAgICAgIHRoaXMuZ2l6bW9zLnNjYWxlR2l6bW8uYXR0YWNoZWRNZXNoID0gbnVsbDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2dpem1vc0VuYWJsZWQuc2NhbGVHaXpt
byA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
R2l6bW9NYW5hZ2VyLnByb3RvdHlwZSwgImJvdW5kaW5nQm94R2l6bW9FbmFibGVkIiwgeworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9naXptb3NF
bmFibGVkLmJvdW5kaW5nQm94R2l6bW87CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBJZiB0aGUgYm91bmRpbmdCb3ggZ2l6bW8gaXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuZ2l6bW9zLmJvdW5kaW5nQm94R2l6bW8gPSB0aGlzLmdpem1v
cy5ib3VuZGluZ0JveEdpem1vIHx8IG5ldyBfYm91bmRpbmdCb3hHaXptb19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOV9fWyJCb3VuZGluZ0JveEdpem1vIl0odGhpcy5fYm91bmRpbmdCb3hDb2xv
ciwgdGhpcy5fZGVmYXVsdEtlZXBEZXB0aFV0aWxpdHlMYXllcik7CisgICAgICAgICAgICAgICAg
dGhpcy5naXptb3MuYm91bmRpbmdCb3hHaXptby5hdHRhY2hlZE1lc2ggPSB0aGlzLl9hdHRhY2hl
ZE1lc2g7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkTWVzaCkgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZE1lc2gucmVtb3ZlQmVoYXZpb3IodGhpcy5ib3Vu
ZGluZ0JveERyYWdCZWhhdmlvcik7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFjaGVk
TWVzaC5hZGRCZWhhdmlvcih0aGlzLmJvdW5kaW5nQm94RHJhZ0JlaGF2aW9yKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmdpem1v
cy5ib3VuZGluZ0JveEdpem1vKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVk
TWVzaCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2hlZE1lc2gucmVtb3ZlQmVo
YXZpb3IodGhpcy5ib3VuZGluZ0JveERyYWdCZWhhdmlvcik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHRoaXMuZ2l6bW9zLmJvdW5kaW5nQm94R2l6bW8uYXR0YWNoZWRNZXNo
ID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2dpem1vc0VuYWJsZWQu
Ym91bmRpbmdCb3hHaXptbyA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAg
ICAgKiBEaXNwb3NlcyBvZiB0aGUgZ2l6bW8gbWFuYWdlcgorICAgICAqLworICAgIEdpem1vTWFu
YWdlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2Vu
ZS5vblBvaW50ZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9wb2ludGVyT2JzZXJ2ZXIpOworICAg
ICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5naXptb3MpIHsKKyAgICAgICAgICAgIHZhciBnaXpt
byA9ICh0aGlzLmdpem1vc1trZXldKTsKKyAgICAgICAgICAgIGlmIChnaXptbykgeworICAgICAg
ICAgICAgICAgIGdpem1vLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9kZWZhdWx0S2VlcERlcHRoVXRpbGl0eUxheWVyLmRpc3Bvc2UoKTsKKyAgICAg
ICAgdGhpcy5fZGVmYXVsdFV0aWxpdHlMYXllci5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMuYm91
bmRpbmdCb3hEcmFnQmVoYXZpb3IuZGV0YWNoKCk7CisgICAgICAgIHRoaXMub25BdHRhY2hlZFRv
TWVzaE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICB9OworICAgIHJldHVybiBHaXptb01hbmFnZXI7
Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0dpem1vcy9pbmRleC50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HaXptb3MvaW5kZXgudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBBeGlzRHJhZ0dpem1vLCBBeGlzU2NhbGVHaXptbywgQm91bmRpbmdCb3hHaXptbywgR2l6bW8s
IEdpem1vTWFuYWdlciwgUGxhbmVSb3RhdGlvbkdpem1vLCBQb3NpdGlvbkdpem1vLCBSb3RhdGlv
bkdpem1vLCBTY2FsZUdpem1vLCBMaWdodEdpem1vLCBQbGFuZURyYWdHaXptbyAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2F4aXNEcmFnR2l6bW9fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXhpc0Ry
YWdHaXptbyAqLyAiLi9HaXptb3MvYXhpc0RyYWdHaXptby50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJBeGlzRHJhZ0dpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYXhpc0RyYWdHaXptb19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBeGlzRHJhZ0dpem1vIl07IH0pOworCisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2F4aXNTY2FsZUdpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2F4aXNTY2FsZUdpem1vICovICIuL0dp
em1vcy9heGlzU2NhbGVHaXptby50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBeGlzU2NhbGVHaXpt
byIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2F4aXNTY2FsZUdpem1vX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkF4aXNTY2FsZUdpem1vIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2JvdW5kaW5nQm94R2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vYm91bmRpbmdCb3hHaXptbyAqLyAiLi9HaXptb3MvYm91
bmRpbmdCb3hHaXptby50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb3VuZGluZ0JveEdpem1vIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfYm91bmRpbmdCb3hHaXptb19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJCb3VuZGluZ0JveEdpem1vIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2dpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2dpem1vICovICIuL0dpem1vcy9naXptby50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2dpem1vX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkdpem1vIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2dp
em1vTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9naXptb01hbmFnZXIgKi8gIi4vR2l6bW9zL2dpem1vTWFuYWdlci50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJHaXptb01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9naXpt
b01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siR2l6bW9NYW5hZ2VyIl07IH0p
OworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BsYW5lUm90YXRpb25HaXptb19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wbGFuZVJv
dGF0aW9uR2l6bW8gKi8gIi4vR2l6bW9zL3BsYW5lUm90YXRpb25HaXptby50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJQbGFuZVJvdGF0aW9uR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wbGFu
ZVJvdGF0aW9uR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUGxhbmVSb3RhdGlv
bkdpem1vIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc2l0aW9uR2l6bW9f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
cG9zaXRpb25HaXptbyAqLyAiLi9HaXptb3MvcG9zaXRpb25HaXptby50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQb3NpdGlvbkdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9zaXRpb25HaXpt
b19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQb3NpdGlvbkdpem1vIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JvdGF0aW9uR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcm90YXRpb25HaXptbyAqLyAi
Li9HaXptb3Mvcm90YXRpb25HaXptby50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSb3RhdGlvbkdp
em1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcm90YXRpb25HaXptb19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJSb3RhdGlvbkdpem1vIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX3NjYWxlR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vc2NhbGVHaXptbyAqLyAiLi9HaXptb3Mvc2NhbGVHaXptby50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTY2FsZUdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2Nh
bGVHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJTY2FsZUdpem1vIl07IH0pOwor
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xpZ2h0R2l6bW9fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbGlnaHRHaXptbyAqLyAiLi9H
aXptb3MvbGlnaHRHaXptby50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaWdodEdpem1vIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfbGlnaHRHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
WyJMaWdodEdpem1vIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BsYW5lRHJh
Z0dpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9wbGFuZURyYWdHaXptbyAqLyAiLi9HaXptb3MvcGxhbmVEcmFnR2l6bW8udHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUGxhbmVEcmFnR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9w
bGFuZURyYWdHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siUGxhbmVEcmFnR2l6
bW8iXTsgfSk7CisKKworCisKKworCisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL0dpem1vcy9saWdodEdpem1vLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vR2l6bW9zL2xpZ2h0R2l6bW8udHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IExpZ2h0R2l6bW8g
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGlnaHRHaXptbyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gTGlnaHRHaXptbzsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3Rv
ciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29s
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWVzaGVzL2Fic3RyYWN0TWVzaCAqLyAiLi9NZXNoZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNo
ZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9naXptb19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9naXptbyAqLyAi
Li9HaXptb3MvZ2l6bW8udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X3N0YW5kYXJkTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9zdGFuZGFyZE1hdGVyaWFsICovICIuL01hdGVy
aWFscy9zdGFuZGFyZE1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0xp
Z2h0c19oZW1pc3BoZXJpY0xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9MaWdodHMvaGVtaXNwaGVyaWNMaWdodCAqLyAiLi9MaWdo
dHMvaGVtaXNwaGVyaWNMaWdodC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9MaWdo
dHNfZGlyZWN0aW9uYWxMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTGlnaHRzL2RpcmVjdGlvbmFsTGlnaHQgKi8gIi4vTGlnaHRz
L2RpcmVjdGlvbmFsTGlnaHQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVz
X0J1aWxkZXJzX3NwaGVyZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9CdWlsZGVycy9zcGhlcmVCdWlsZGVyICov
ICIuL01lc2hlcy9CdWlsZGVycy9zcGhlcmVCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01lc2hlc19CdWlsZGVyc19oZW1pc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9CdWls
ZGVycy9oZW1pc3BoZXJlQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvaGVtaXNwaGVyZUJ1
aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTGlnaHRzX3Nwb3RMaWdodF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L0xpZ2h0cy9zcG90TGlnaHQgKi8gIi4vTGlnaHRzL3Nwb3RMaWdodC50cyIpOworCisKKworCisK
KworCisKKworCisKKworLyoqCisgKiBHaXptbyB0aGF0IGVuYWJsZXMgdmlld2luZyBhIGxpZ2h0
CisgKi8KK3ZhciBMaWdodEdpem1vID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikg
eworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKExp
Z2h0R2l6bW8sIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIExpZ2h0R2l6bW8K
KyAgICAgKiBAcGFyYW0gZ2l6bW9MYXllciBUaGUgdXRpbGl0eSBsYXllciB0aGUgZ2l6bW8gd2ls
bCBiZSBhZGRlZCB0bworICAgICAqLworICAgIGZ1bmN0aW9uIExpZ2h0R2l6bW8oZ2l6bW9MYXll
cikgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBnaXptb0xheWVyKSB8
fCB0aGlzOworICAgICAgICBfdGhpcy5jYWNoZWRQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKCk7CisgICAgICAg
IF90aGlzLmNhY2hlZEZvcndhcmQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXSgwLCAwLCAxKTsKKyAgICAgICAgX3RoaXMuX2xp
Z2h0ID0gbnVsbDsKKyAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoID0gbmV3IF9NZXNoZXNfYWJz
dHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFic3RyYWN0TWVzaCJdKCIi
LCBfdGhpcy5naXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKTsKKyAgICAgICAgX3RoaXMuX21h
dGVyaWFsID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fWyJTdGFuZGFyZE1hdGVyaWFsIl0oImxpZ2h0IiwgX3RoaXMuZ2l6bW9MYXll
ci5vcmlnaW5hbFNjZW5lKTsKKyAgICAgICAgX3RoaXMuX21hdGVyaWFsLmRpZmZ1c2VDb2xvciA9
IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb2xv
cjMiXSgwLjUsIDAuNSwgMC41KTsKKyAgICAgICAgX3RoaXMuX21hdGVyaWFsLnNwZWN1bGFyQ29s
b3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Q29sb3IzIl0oMC4xLCAwLjEsIDAuMSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExpZ2h0R2l6bW8ucHJvdG90eXBlLCAibGlnaHQiLCB7
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xp
Z2h0OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGxpZ2h0IHRoYXQg
dGhlIGdpem1vIGlzIGF0dGFjaGVkIHRvCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uIChsaWdodCkgeworICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgICAg
IHRoaXMuX2xpZ2h0ID0gbGlnaHQ7CisgICAgICAgICAgICBpZiAobGlnaHQpIHsKKyAgICAgICAg
ICAgICAgICAvLyBDcmVhdGUgdGhlIG1lc2ggZm9yIHRoZSBnaXZlbiBsaWdodCB0eXBlCisgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0TWVzaCkgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLl9saWdodE1lc2guZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAobGlnaHQgaW5zdGFuY2VvZiBfTGlnaHRzX2hlbWlzcGhlcmljTGlnaHRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfX1siSGVtaXNwaGVyaWNMaWdodCJdKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2xpZ2h0TWVzaCA9IExpZ2h0R2l6bW8uX0NyZWF0ZUhlbWlzcGhlcmlj
TGlnaHRNZXNoKHRoaXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxpZ2h0IGluc3RhbmNlb2YgX0xpZ2h0
c19kaXJlY3Rpb25hbExpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkRpcmVjdGlv
bmFsTGlnaHQiXSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9saWdodE1lc2ggPSBMaWdo
dEdpem1vLl9DcmVhdGVEaXJlY3Rpb25hbExpZ2h0TWVzaCh0aGlzLmdpem1vTGF5ZXIudXRpbGl0
eUxheWVyU2NlbmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChsaWdodCBpbnN0YW5jZW9mIF9MaWdodHNfc3BvdExpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xMV9fWyJTcG90TGlnaHQiXSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9saWdo
dE1lc2ggPSBMaWdodEdpem1vLl9DcmVhdGVTcG90TGlnaHRNZXNoKHRoaXMuZ2l6bW9MYXllci51
dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9saWdodE1lc2ggPSBMaWdodEdpem1vLl9D
cmVhdGVQb2ludExpZ2h0TWVzaCh0aGlzLmdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl9saWdodE1lc2guZ2V0Q2hp
bGRNZXNoZXMoZmFsc2UpLmZvckVhY2goZnVuY3Rpb24gKG0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgbS5tYXRlcmlhbCA9IF90aGlzLl9tYXRlcmlhbDsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9saWdodE1lc2gucGFyZW50ID0gdGhpcy5fcm9vdE1lc2g7Cisg
ICAgICAgICAgICAgICAgLy8gQWRkIGxpZ2h0aW5nIHRvIHRoZSBsaWdodCBnaXptbworICAgICAg
ICAgICAgICAgIHZhciBnaXptb0xpZ2h0ID0gdGhpcy5naXptb0xheWVyLl9nZXRTaGFyZWRHaXpt
b0xpZ2h0KCk7CisgICAgICAgICAgICAgICAgZ2l6bW9MaWdodC5pbmNsdWRlZE9ubHlNZXNoZXMg
PSBnaXptb0xpZ2h0LmluY2x1ZGVkT25seU1lc2hlcy5jb25jYXQodGhpcy5fbGlnaHRNZXNoLmdl
dENoaWxkTWVzaGVzKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRNZXNoLnJv
dGF0aW9uUXVhdGVybmlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdKCk7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlz
LmF0dGFjaGVkTWVzaC5yZXNlcnZlZERhdGFTdG9yZSkgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLmF0dGFjaGVkTWVzaC5yZXNlcnZlZERhdGFTdG9yZSA9IHt9OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaGVkTWVzaC5yZXNlcnZlZERhdGFTdG9yZS5s
aWdodEdpem1vID0gdGhpczsKKyAgICAgICAgICAgICAgICAvLyBHZXQgdXBkYXRlIHBvc2l0aW9u
IGFuZCBkaXJlY3Rpb24gaWYgdGhlIGxpZ2h0IGhhcyBpdAorICAgICAgICAgICAgICAgIGlmIChs
aWdodC5wb3NpdGlvbikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaGVkTWVzaC5w
b3NpdGlvbi5jb3B5RnJvbShsaWdodC5wb3NpdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChsaWdodC5kaXJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5hdHRhY2hlZE1lc2guc2V0RGlyZWN0aW9uKGxpZ2h0LmRpcmVjdGlvbik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHRHaXpt
by5wcm90b3R5cGUsICJtYXRlcmlhbCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
dGhlIG1hdGVyaWFsIHVzZWQgdG8gcmVuZGVyIHRoZSBsaWdodCBnaXptbworICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF0
ZXJpYWw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAg
KiBVcGRhdGVzIHRoZSBnaXptbyB0byBtYXRjaCB0aGUgYXR0YWNoZWQgbWVzaCdzIHBvc2l0aW9u
L3JvdGF0aW9uCisgICAgICovCisgICAgTGlnaHRHaXptby5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7
CisgICAgICAgIGlmICghdGhpcy5fbGlnaHQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5fbGlnaHQucG9zaXRpb24pIHsKKyAgICAgICAgICAgIC8v
IElmIHRoZSBnaXptbyBpcyBtb3ZlZCB1cGRhdGUgdGhlIGxpZ2h0IG90aGVyd2lzZSB1cGRhdGUg
dGhlIGdpem1vIHRvIG1hdGNoIHRoZSBsaWdodAorICAgICAgICAgICAgaWYgKCF0aGlzLmF0dGFj
aGVkTWVzaC5wb3NpdGlvbi5lcXVhbHModGhpcy5jYWNoZWRQb3NpdGlvbikpIHsKKyAgICAgICAg
ICAgICAgICAvLyB1cGRhdGUgbGlnaHQgdG8gbWF0Y2ggZ2l6bW8KKyAgICAgICAgICAgICAgICB0
aGlzLl9saWdodC5wb3NpdGlvbi5jb3B5RnJvbSh0aGlzLmF0dGFjaGVkTWVzaC5wb3NpdGlvbik7
CisgICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRQb3NpdGlvbi5jb3B5RnJvbSh0aGlzLmF0dGFj
aGVkTWVzaC5wb3NpdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyB1cGRhdGUgZ2l6bW8gdG8gbWF0Y2ggbGlnaHQKKyAgICAgICAgICAg
ICAgICB0aGlzLmF0dGFjaGVkTWVzaC5wb3NpdGlvbi5jb3B5RnJvbSh0aGlzLl9saWdodC5wb3Np
dGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xpZ2h0
LmRpcmVjdGlvbikgeworICAgICAgICAgICAgLy8gSWYgdGhlIGdpem1vIGlzIG1vdmVkIHVwZGF0
ZSB0aGUgbGlnaHQgb3RoZXJ3aXNlIHVwZGF0ZSB0aGUgZ2l6bW8gdG8gbWF0Y2ggdGhlIGxpZ2h0
CisgICAgICAgICAgICBpZiAoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlZlY3RvcjMiXS5EaXN0YW5jZVNxdWFyZWQodGhpcy5hdHRhY2hlZE1lc2guZm9y
d2FyZCwgdGhpcy5jYWNoZWRGb3J3YXJkKSA+IDAuMDAwMSkgeworICAgICAgICAgICAgICAgIC8v
IHVwZGF0ZSBsaWdodCB0byBtYXRjaCBnaXptbworICAgICAgICAgICAgICAgIHRoaXMuX2xpZ2h0
LmRpcmVjdGlvbi5jb3B5RnJvbSh0aGlzLmF0dGFjaGVkTWVzaC5mb3J3YXJkKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLmNhY2hlZEZvcndhcmQuY29weUZyb20odGhpcy5hdHRhY2hlZE1lc2guZm9y
d2FyZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkRpc3RhbmNlU3F1
YXJlZCh0aGlzLmF0dGFjaGVkTWVzaC5mb3J3YXJkLCB0aGlzLl9saWdodC5kaXJlY3Rpb24pID4g
MC4wMDAxKSB7CisgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGdpem1vIHRvIG1hdGNoIGxpZ2h0
CisgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hlZE1lc2guc2V0RGlyZWN0aW9uKHRoaXMuX2xp
Z2h0LmRpcmVjdGlvbik7CisgICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRGb3J3YXJkLmNvcHlG
cm9tKHRoaXMuX2xpZ2h0TWVzaC5mb3J3YXJkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBpZiAoIXRoaXMuX2xpZ2h0LmlzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICB0aGlz
Ll9tYXRlcmlhbC5kaWZmdXNlQ29sb3Iuc2V0KDAsIDAsIDApOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGhpcy5fbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLnNldCh0aGlz
Ll9saWdodC5kaWZmdXNlLnIgLyAzLCB0aGlzLl9saWdodC5kaWZmdXNlLmcgLyAzLCB0aGlzLl9s
aWdodC5kaWZmdXNlLmIgLyAzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
RGlzcG9zZXMgb2YgdGhlIGxpZ2h0IGdpem1vCisgICAgICovCisgICAgTGlnaHRHaXptby5wcm90
b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fbWF0ZXJpYWwuZGlz
cG9zZSgpOworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAg
ICB9OworICAgIExpZ2h0R2l6bW8uX0NyZWF0ZUhlbWlzcGhlcmljTGlnaHRNZXNoID0gZnVuY3Rp
b24gKHNjZW5lKSB7CisgICAgICAgIHZhciByb290ID0gbmV3IF9NZXNoZXNfbWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0oImhlbWlzcGhlcmVMaWdodCIsIHNjZW5lKTsK
KyAgICAgICAgdmFyIGhlbWlzcGhlcmUgPSBfTWVzaGVzX0J1aWxkZXJzX2hlbWlzcGhlcmVCdWls
ZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJIZW1pc3BoZXJlQnVpbGRlciJdLkNy
ZWF0ZUhlbWlzcGhlcmUocm9vdC5uYW1lLCB7IHNlZ21lbnRzOiAxMCwgZGlhbWV0ZXI6IDEgfSwg
c2NlbmUpOworICAgICAgICBoZW1pc3BoZXJlLnBvc2l0aW9uLnogPSAtMC4xNTsKKyAgICAgICAg
aGVtaXNwaGVyZS5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7CisgICAgICAgIGhlbWlzcGhlcmUu
cGFyZW50ID0gcm9vdDsKKyAgICAgICAgdmFyIGxpbmVzID0gdGhpcy5fY3JlYXRlTGlnaHRMaW5l
cygzLCBzY2VuZSk7CisgICAgICAgIGxpbmVzLnBhcmVudCA9IHJvb3Q7CisgICAgICAgIGxpbmVz
LnBvc2l0aW9uLnogLSAwLjE1OworICAgICAgICByb290LnNjYWxpbmcuc2NhbGVJblBsYWNlKExp
Z2h0R2l6bW8uX1NjYWxlKTsKKyAgICAgICAgcm9vdC5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7
CisgICAgICAgIHJldHVybiByb290OworICAgIH07CisgICAgTGlnaHRHaXptby5fQ3JlYXRlUG9p
bnRMaWdodE1lc2ggPSBmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICAgICAgdmFyIHJvb3QgPSBuZXcg
X01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1lc2giXSgicG9pbnRM
aWdodCIsIHNjZW5lKTsKKyAgICAgICAgdmFyIHNwaGVyZSA9IF9NZXNoZXNfQnVpbGRlcnNfc3Bo
ZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJTcGhlcmVCdWlsZGVyIl0u
Q3JlYXRlU3BoZXJlKHJvb3QubmFtZSwgeyBzZWdtZW50czogMTAsIGRpYW1ldGVyOiAxIH0sIHNj
ZW5lKTsKKyAgICAgICAgc3BoZXJlLnJvdGF0aW9uLnggPSBNYXRoLlBJIC8gMjsKKyAgICAgICAg
c3BoZXJlLnBhcmVudCA9IHJvb3Q7CisgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuX2NyZWF0ZUxp
Z2h0TGluZXMoNSwgc2NlbmUpOworICAgICAgICBsaW5lcy5wYXJlbnQgPSByb290OworICAgICAg
ICByb290LnNjYWxpbmcuc2NhbGVJblBsYWNlKExpZ2h0R2l6bW8uX1NjYWxlKTsKKyAgICAgICAg
cm9vdC5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7CisgICAgICAgIHJldHVybiByb290OworICAg
IH07CisgICAgTGlnaHRHaXptby5fQ3JlYXRlU3BvdExpZ2h0TWVzaCA9IGZ1bmN0aW9uIChzY2Vu
ZSkgeworICAgICAgICB2YXIgcm9vdCA9IG5ldyBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siTWVzaCJdKCJzcG90TGlnaHQiLCBzY2VuZSk7CisgICAgICAgIHZhciBz
cGhlcmUgPSBfTWVzaGVzX0J1aWxkZXJzX3NwaGVyZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siU3BoZXJlQnVpbGRlciJdLkNyZWF0ZVNwaGVyZShyb290Lm5hbWUsIHsgc2Vn
bWVudHM6IDEwLCBkaWFtZXRlcjogMSB9LCBzY2VuZSk7CisgICAgICAgIHNwaGVyZS5wYXJlbnQg
PSByb290OworICAgICAgICB2YXIgaGVtaXNwaGVyZSA9IF9NZXNoZXNfQnVpbGRlcnNfaGVtaXNw
aGVyZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkhlbWlzcGhlcmVCdWls
ZGVyIl0uQ3JlYXRlSGVtaXNwaGVyZShyb290Lm5hbWUsIHsgc2VnbWVudHM6IDEwLCBkaWFtZXRl
cjogMiB9LCBzY2VuZSk7CisgICAgICAgIGhlbWlzcGhlcmUucGFyZW50ID0gcm9vdDsKKyAgICAg
ICAgaGVtaXNwaGVyZS5yb3RhdGlvbi54ID0gLU1hdGguUEkgLyAyOworICAgICAgICB2YXIgbGlu
ZXMgPSB0aGlzLl9jcmVhdGVMaWdodExpbmVzKDIsIHNjZW5lKTsKKyAgICAgICAgbGluZXMucGFy
ZW50ID0gcm9vdDsKKyAgICAgICAgcm9vdC5zY2FsaW5nLnNjYWxlSW5QbGFjZShMaWdodEdpem1v
Ll9TY2FsZSk7CisgICAgICAgIHJvb3Qucm90YXRpb24ueCA9IE1hdGguUEkgLyAyOworICAgICAg
ICByZXR1cm4gcm9vdDsKKyAgICB9OworICAgIExpZ2h0R2l6bW8uX0NyZWF0ZURpcmVjdGlvbmFs
TGlnaHRNZXNoID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAgICAgIHZhciByb290ID0gbmV3IF9N
ZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0oImRpcmVjdGlv
bmFsTGlnaHQiLCBzY2VuZSk7CisgICAgICAgIHZhciBtZXNoID0gbmV3IF9NZXNoZXNfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0ocm9vdC5uYW1lLCBzY2VuZSk7Cisg
ICAgICAgIG1lc2gucGFyZW50ID0gcm9vdDsKKyAgICAgICAgdmFyIHNwaGVyZSA9IF9NZXNoZXNf
QnVpbGRlcnNfc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJTcGhl
cmVCdWlsZGVyIl0uQ3JlYXRlU3BoZXJlKHJvb3QubmFtZSwgeyBkaWFtZXRlcjogMS4yLCBzZWdt
ZW50czogMTAgfSwgc2NlbmUpOworICAgICAgICBzcGhlcmUucGFyZW50ID0gbWVzaDsKKyAgICAg
ICAgdmFyIGxpbmUgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
TWVzaCJdLkNyZWF0ZUN5bGluZGVyKHJvb3QubmFtZSwgNiwgMC4zLCAwLjMsIDYsIDEsIHNjZW5l
KTsKKyAgICAgICAgbGluZS5wYXJlbnQgPSBtZXNoOworICAgICAgICB2YXIgbGVmdCA9IGxpbmUu
Y2xvbmUocm9vdC5uYW1lKTsKKyAgICAgICAgbGVmdC5zY2FsaW5nLnkgPSAwLjU7CisgICAgICAg
IGxlZnQucG9zaXRpb24ueCArPSAxLjI1OworICAgICAgICB2YXIgcmlnaHQgPSBsaW5lLmNsb25l
KHJvb3QubmFtZSk7CisgICAgICAgIHJpZ2h0LnNjYWxpbmcueSA9IDAuNTsKKyAgICAgICAgcmln
aHQucG9zaXRpb24ueCArPSAtMS4yNTsKKyAgICAgICAgdmFyIGFycm93SGVhZCA9IF9NZXNoZXNf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0uQ3JlYXRlQ3lsaW5kZXIo
cm9vdC5uYW1lLCAxLCAwLCAwLjYsIDYsIDEsIHNjZW5lKTsKKyAgICAgICAgYXJyb3dIZWFkLnBv
c2l0aW9uLnkgKz0gMzsKKyAgICAgICAgYXJyb3dIZWFkLnBhcmVudCA9IG1lc2g7CisgICAgICAg
IHZhciBsZWZ0ID0gYXJyb3dIZWFkLmNsb25lKHJvb3QubmFtZSk7CisgICAgICAgIGxlZnQucG9z
aXRpb24ueSA9IDEuNTsKKyAgICAgICAgbGVmdC5wb3NpdGlvbi54ICs9IDEuMjU7CisgICAgICAg
IHZhciByaWdodCA9IGFycm93SGVhZC5jbG9uZShyb290Lm5hbWUpOworICAgICAgICByaWdodC5w
b3NpdGlvbi55ID0gMS41OworICAgICAgICByaWdodC5wb3NpdGlvbi54ICs9IC0xLjI1OworICAg
ICAgICBtZXNoLnNjYWxpbmcuc2NhbGVJblBsYWNlKExpZ2h0R2l6bW8uX1NjYWxlKTsKKyAgICAg
ICAgbWVzaC5yb3RhdGlvbi56ID0gTWF0aC5QSSAvIDI7CisgICAgICAgIG1lc2gucm90YXRpb24u
eSA9IE1hdGguUEkgLyAyOworICAgICAgICByZXR1cm4gcm9vdDsKKyAgICB9OworICAgIC8vIFN0
YXRpYyBoZWxwZXIgbWV0aG9kcworICAgIExpZ2h0R2l6bW8uX1NjYWxlID0gMC4wMDc7CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyB0aGUgbGluZXMgZm9yIGEgbGlnaHQgbWVzaAorICAgICAqLwor
ICAgIExpZ2h0R2l6bW8uX2NyZWF0ZUxpZ2h0TGluZXMgPSBmdW5jdGlvbiAobGV2ZWxzLCBzY2Vu
ZSkgeworICAgICAgICB2YXIgZGlzdEZyb21TcGhlcmUgPSAxLjI7CisgICAgICAgIHZhciByb290
ID0gbmV3IF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0o
InJvb3QiLCBzY2VuZSk7CisgICAgICAgIHJvb3Qucm90YXRpb24ueCA9IE1hdGguUEkgLyAyOwor
ICAgICAgICAvLyBDcmVhdGUgdGhlIHRvcCBsaW5lLCB0aGlzIHdpbGwgYmUgY2xvbmVkIGZvciBh
bGwgb3RoZXIgbGluZXMKKyAgICAgICAgdmFyIGxpbmVQaXZvdCA9IG5ldyBfTWVzaGVzX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWVzaCJdKCJsaW5lUGl2b3QiLCBzY2VuZSk7
CisgICAgICAgIGxpbmVQaXZvdC5wYXJlbnQgPSByb290OworICAgICAgICB2YXIgbGluZSA9IF9N
ZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0uQ3JlYXRlQ3ls
aW5kZXIoImxpbmUiLCAyLCAwLjIsIDAuMywgNiwgMSwgc2NlbmUpOworICAgICAgICBsaW5lLnBv
c2l0aW9uLnkgPSBsaW5lLnNjYWxpbmcueSAvIDIgKyBkaXN0RnJvbVNwaGVyZTsKKyAgICAgICAg
bGluZS5wYXJlbnQgPSBsaW5lUGl2b3Q7CisgICAgICAgIGlmIChsZXZlbHMgPCAyKSB7CisgICAg
ICAgICAgICByZXR1cm4gbGluZVBpdm90OworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgbCA9IGxpbmVQaXZvdC5jbG9uZSgi
bGluZVBhcmVudENsb25lIik7CisgICAgICAgICAgICBsLnJvdGF0aW9uLnogPSBNYXRoLlBJIC8g
NDsKKyAgICAgICAgICAgIGwucm90YXRpb24ueSA9IChNYXRoLlBJIC8gMikgKyAoTWF0aC5QSSAv
IDIgKiBpKTsKKyAgICAgICAgICAgIGwuZ2V0Q2hpbGRNZXNoZXMoKVswXS5zY2FsaW5nLnkgPSAw
LjU7CisgICAgICAgICAgICBsLmdldENoaWxkTWVzaGVzKClbMF0uc2NhbGluZy54ID0gbC5nZXRD
aGlsZE1lc2hlcygpWzBdLnNjYWxpbmcueiA9IDAuODsKKyAgICAgICAgICAgIGwuZ2V0Q2hpbGRN
ZXNoZXMoKVswXS5wb3NpdGlvbi55ID0gbC5nZXRDaGlsZE1lc2hlcygpWzBdLnNjYWxpbmcueSAv
IDIgKyBkaXN0RnJvbVNwaGVyZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGV2ZWxzIDwgMykg
eworICAgICAgICAgICAgcmV0dXJuIHJvb3Q7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgICAgIHZhciBsID0gbGluZVBpdm90LmNsb25l
KCJsaW5lUGl2b3RDbG9uZSIpOworICAgICAgICAgICAgbC5yb3RhdGlvbi56ID0gTWF0aC5QSSAv
IDI7CisgICAgICAgICAgICBsLnJvdGF0aW9uLnkgPSAoTWF0aC5QSSAvIDIgKiBpKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAobGV2ZWxzIDwgNCkgeworICAgICAgICAgICAgcmV0dXJuIHJvb3Q7
CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAg
ICAgICAgIHZhciBsID0gbGluZVBpdm90LmNsb25lKCJsaW5lUGl2b3RDbG9uZSIpOworICAgICAg
ICAgICAgbC5yb3RhdGlvbi56ID0gTWF0aC5QSSArIChNYXRoLlBJIC8gNCk7CisgICAgICAgICAg
ICBsLnJvdGF0aW9uLnkgPSAoTWF0aC5QSSAvIDIpICsgKE1hdGguUEkgLyAyICogaSk7CisgICAg
ICAgICAgICBsLmdldENoaWxkTWVzaGVzKClbMF0uc2NhbGluZy55ID0gMC41OworICAgICAgICAg
ICAgbC5nZXRDaGlsZE1lc2hlcygpWzBdLnNjYWxpbmcueCA9IGwuZ2V0Q2hpbGRNZXNoZXMoKVsw
XS5zY2FsaW5nLnogPSAwLjg7CisgICAgICAgICAgICBsLmdldENoaWxkTWVzaGVzKClbMF0ucG9z
aXRpb24ueSA9IGwuZ2V0Q2hpbGRNZXNoZXMoKVswXS5zY2FsaW5nLnkgLyAyICsgZGlzdEZyb21T
cGhlcmU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxldmVscyA8IDUpIHsKKyAgICAgICAgICAg
IHJldHVybiByb290OworICAgICAgICB9CisgICAgICAgIHZhciBsID0gbGluZVBpdm90LmNsb25l
KCJsaW5lUGl2b3RDbG9uZSIpOworICAgICAgICBsLnJvdGF0aW9uLnogPSBNYXRoLlBJOworICAg
ICAgICByZXR1cm4gcm9vdDsKKyAgICB9OworICAgIHJldHVybiBMaWdodEdpem1vOworfShfZ2l6
bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siR2l6bW8iXSkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL0dpem1vcy9wbGFuZURyYWdHaXptby50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HaXptb3MvcGxhbmVEcmFnR2l6
bW8udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBQbGFuZURyYWdHaXptbyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJQbGFuZURyYWdHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGxhbmVE
cmFnR2l6bW87IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFi
bGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4v
TWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNf
dHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWVzaGVzL3RyYW5zZm9ybU5vZGUgKi8gIi4vTWVzaGVzL3RyYW5zZm9y
bU5vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJzX3Bs
YW5lQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWVzaGVzL0J1aWxkZXJzL3BsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVp
bGRlcnMvcGxhbmVCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0JlaGF2
aW9yc19NZXNoZXNfcG9pbnRlckRyYWdCZWhhdmlvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQmVoYXZpb3JzL01lc2hlcy9wb2ludGVy
RHJhZ0JlaGF2aW9yICovICIuL0JlaGF2aW9ycy9NZXNoZXMvcG9pbnRlckRyYWdCZWhhdmlvci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9naXptb19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9naXptbyAqLyAiLi9HaXptb3Mv
Z2l6bW8udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUmVuZGVyaW5nX3V0aWxpdHlM
YXllclJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9SZW5kZXJpbmcvdXRpbGl0eUxheWVyUmVuZGVyZXIgKi8gIi4vUmVuZGVy
aW5nL3V0aWxpdHlMYXllclJlbmRlcmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbCAq
LyAiLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbC50cyIpOworCisKKworCisKKworCisKKwor
CisvKioKKyAqIFNpbmdsZSBwbGFuZSBkcmFnIGdpem1vCisgKi8KK3ZhciBQbGFuZURyYWdHaXpt
byA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShQbGFuZURyYWdHaXptbywgX3N1cGVy
KTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgUGxhbmVEcmFnR2l6bW8KKyAgICAgKiBAcGFy
YW0gZ2l6bW9MYXllciBUaGUgdXRpbGl0eSBsYXllciB0aGUgZ2l6bW8gd2lsbCBiZSBhZGRlZCB0
bworICAgICAqIEBwYXJhbSBkcmFnUGxhbmVOb3JtYWwgVGhlIGF4aXMgbm9ybWFsIHRvIHdoaWNo
IHRoZSBnaXptbyB3aWxsIGJlIGFibGUgdG8gZHJhZyBvbgorICAgICAqIEBwYXJhbSBjb2xvciBU
aGUgY29sb3Igb2YgdGhlIGdpem1vCisgICAgICovCisgICAgZnVuY3Rpb24gUGxhbmVEcmFnR2l6
bW8oZHJhZ1BsYW5lTm9ybWFsLCBjb2xvciwgZ2l6bW9MYXllciwgcGFyZW50KSB7CisgICAgICAg
IGlmIChjb2xvciA9PT0gdm9pZCAwKSB7IGNvbG9yID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29sb3IzIl0uR3JheSgpOyB9CisgICAgICAgIGlmIChn
aXptb0xheWVyID09PSB2b2lkIDApIHsgZ2l6bW9MYXllciA9IF9SZW5kZXJpbmdfdXRpbGl0eUxh
eWVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVXRpbGl0eUxheWVyUmVu
ZGVyZXIiXS5EZWZhdWx0VXRpbGl0eUxheWVyOyB9CisgICAgICAgIGlmIChwYXJlbnQgPT09IHZv
aWQgMCkgeyBwYXJlbnQgPSBudWxsOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxs
KHRoaXMsIGdpem1vTGF5ZXIpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9wb2ludGVyT2JzZXJ2
ZXIgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogRHJhZyBkaXN0YW5jZSBpbiBiYWJ5
bG9uIHVuaXRzIHRoYXQgdGhlIGdpem1vIHdpbGwgc25hcCB0byB3aGVuIGRyYWdnZWQgKERlZmF1
bHQ6IDApCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5zbmFwRGlzdGFuY2UgPSAwOworICAg
ICAgICAvKioKKyAgICAgICAgICogRXZlbnQgdGhhdCBmaXJlcyBlYWNoIHRpbWUgdGhlIGdpem1v
IHNuYXBzIHRvIGEgbmV3IGxvY2F0aW9uLgorICAgICAgICAgKiAqIHNuYXBEaXN0YW5jZSBpcyB0
aGUgdGhlIGNoYW5nZSBpbiBkaXN0YW5jZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25T
bmFwT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhpcy5faXNFbmFibGVkID0gZmFs
c2U7CisgICAgICAgIF90aGlzLl9wYXJlbnQgPSBudWxsOworICAgICAgICBfdGhpcy5fcGFyZW50
ID0gcGFyZW50OworICAgICAgICAvLyBDcmVhdGUgTWF0ZXJpYWwKKyAgICAgICAgX3RoaXMuX2Nv
bG9yZWRNYXRlcmlhbCA9IG5ldyBfTWF0ZXJpYWxzX3N0YW5kYXJkTWF0ZXJpYWxfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siU3RhbmRhcmRNYXRlcmlhbCJdKCIiLCBnaXptb0xheWVyLnV0
aWxpdHlMYXllclNjZW5lKTsKKyAgICAgICAgX3RoaXMuX2NvbG9yZWRNYXRlcmlhbC5kaWZmdXNl
Q29sb3IgPSBjb2xvcjsKKyAgICAgICAgX3RoaXMuX2NvbG9yZWRNYXRlcmlhbC5zcGVjdWxhckNv
bG9yID0gY29sb3Iuc3VidHJhY3QobmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIkNvbG9yMyJdKDAuMSwgMC4xLCAwLjEpKTsKKyAgICAgICAgX3RoaXMu
X2hvdmVyTWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIlN0YW5kYXJkTWF0ZXJpYWwiXSgiIiwgZ2l6bW9MYXllci51
dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgIF90aGlzLl9ob3Zlck1hdGVyaWFsLmRpZmZ1c2VD
b2xvciA9IGNvbG9yLmFkZChuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siQ29sb3IzIl0oMC4zLCAwLjMsIDAuMykpOworICAgICAgICAvLyBCdWlsZCBw
bGFuZSBtZXNoIG9uIHJvb3Qgbm9kZQorICAgICAgICBfdGhpcy5fcGxhbmUgPSBQbGFuZURyYWdH
aXptby5fQ3JlYXRlUGxhbmUoZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSwgX3RoaXMuX2Nv
bG9yZWRNYXRlcmlhbCk7CisgICAgICAgIF90aGlzLl9wbGFuZS5sb29rQXQoX3RoaXMuX3Jvb3RN
ZXNoLnBvc2l0aW9uLmFkZChkcmFnUGxhbmVOb3JtYWwpKTsKKyAgICAgICAgX3RoaXMuX3BsYW5l
LnNjYWxpbmcuc2NhbGVJblBsYWNlKDEgLyAzKTsKKyAgICAgICAgX3RoaXMuX3BsYW5lLnBhcmVu
dCA9IF90aGlzLl9yb290TWVzaDsKKyAgICAgICAgdmFyIGN1cnJlbnRTbmFwRHJhZ0Rpc3RhbmNl
ID0gMDsKKyAgICAgICAgdmFyIHRtcFZlY3RvciA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKCk7CisgICAgICAgIHZhciB0bXBT
bmFwRXZlbnQgPSB7IHNuYXBEaXN0YW5jZTogMCB9OworICAgICAgICAvLyBBZGQgZHJhZ1BsYW5l
Tm9ybWFsIGRyYWcgYmVoYXZpb3IgdG8gaGFuZGxlIGV2ZW50cyB3aGVuIHRoZSBnaXptbyBpcyBk
cmFnZ2VkCisgICAgICAgIF90aGlzLmRyYWdCZWhhdmlvciA9IG5ldyBfQmVoYXZpb3JzX01lc2hl
c19wb2ludGVyRHJhZ0JlaGF2aW9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvaW50
ZXJEcmFnQmVoYXZpb3IiXSh7IGRyYWdQbGFuZU5vcm1hbDogZHJhZ1BsYW5lTm9ybWFsIH0pOwor
ICAgICAgICBfdGhpcy5kcmFnQmVoYXZpb3IubW92ZUF0dGFjaGVkID0gZmFsc2U7CisgICAgICAg
IF90aGlzLl9yb290TWVzaC5hZGRCZWhhdmlvcihfdGhpcy5kcmFnQmVoYXZpb3IpOworICAgICAg
ICB2YXIgbG9jYWxEZWx0YSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKCk7CisgICAgICAgIHZhciB0bXBNYXRyaXggPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJd
KCk7CisgICAgICAgIF90aGlzLmRyYWdCZWhhdmlvci5vbkRyYWdPYnNlcnZhYmxlLmFkZChmdW5j
dGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5hdHRhY2hlZE1lc2gpIHsKKyAg
ICAgICAgICAgICAgICAvLyBDb252ZXJ0IGRlbHRhIHRvIGxvY2FsIHRyYW5zbGF0aW9uIGlmIGl0
IGhhcyBhIHBhcmVudAorICAgICAgICAgICAgICAgIGlmIChfdGhpcy5hdHRhY2hlZE1lc2gucGFy
ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmF0dGFjaGVkTWVzaC5wYXJlbnQuY29t
cHV0ZVdvcmxkTWF0cml4KCkuaW52ZXJ0VG9SZWYodG1wTWF0cml4KTsKKyAgICAgICAgICAgICAg
ICAgICAgdG1wTWF0cml4LnNldFRyYW5zbGF0aW9uRnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKGV2ZW50LmRlbHRhLCB0
bXBNYXRyaXgsIGxvY2FsRGVsdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxEZWx0YS5jb3B5RnJvbShldmVudC5k
ZWx0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFNuYXBwaW5nIGxv
Z2ljCisgICAgICAgICAgICAgICAgaWYgKF90aGlzLnNuYXBEaXN0YW5jZSA9PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIF90aGlzLmF0dGFjaGVkTWVzaC5wb3NpdGlvbi5hZGRJblBsYWNlKGxv
Y2FsRGVsdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNuYXBEcmFnRGlzdGFuY2UgKz0gZXZlbnQuZHJhZ0Rp
c3RhbmNlOworICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoY3VycmVudFNuYXBEcmFn
RGlzdGFuY2UpID4gX3RoaXMuc25hcERpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZHJhZ1N0ZXBzID0gTWF0aC5mbG9vcihNYXRoLmFicyhjdXJyZW50U25hcERyYWdEaXN0
YW5jZSkgLyBfdGhpcy5zbmFwRGlzdGFuY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNuYXBEcmFnRGlzdGFuY2UgPSBjdXJyZW50U25hcERyYWdEaXN0YW5jZSAlIF90aGlzLnNu
YXBEaXN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsRGVsdGEubm9ybWFsaXpl
VG9SZWYodG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcFZlY3Rvci5zY2Fs
ZUluUGxhY2UoX3RoaXMuc25hcERpc3RhbmNlICogZHJhZ1N0ZXBzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLmF0dGFjaGVkTWVzaC5wb3NpdGlvbi5hZGRJblBsYWNlKHRtcFZlY3Rv
cik7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXBTbmFwRXZlbnQuc25hcERpc3RhbmNlID0g
X3RoaXMuc25hcERpc3RhbmNlICogZHJhZ1N0ZXBzOworICAgICAgICAgICAgICAgICAgICAgICAg
X3RoaXMub25TbmFwT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModG1wU25hcEV2ZW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CisgICAgICAgIF90aGlzLl9wb2ludGVyT2JzZXJ2ZXIgPSBnaXptb0xheWVyLnV0
aWxpdHlMYXllclNjZW5lLm9uUG9pbnRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChwb2ludGVy
SW5mbykgeworICAgICAgICAgICAgaWYgKF90aGlzLl9jdXN0b21NZXNoU2V0KSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGlzSG92ZXJl
ZCA9IHBvaW50ZXJJbmZvLnBpY2tJbmZvICYmIChfdGhpcy5fcm9vdE1lc2guZ2V0Q2hpbGRNZXNo
ZXMoKS5pbmRleE9mKHBvaW50ZXJJbmZvLnBpY2tJbmZvLnBpY2tlZE1lc2gpICE9IC0xKTsKKyAg
ICAgICAgICAgIHZhciBtYXRlcmlhbCA9IGlzSG92ZXJlZCA/IF90aGlzLl9ob3Zlck1hdGVyaWFs
IDogX3RoaXMuX2NvbG9yZWRNYXRlcmlhbDsKKyAgICAgICAgICAgIF90aGlzLl9yb290TWVzaC5n
ZXRDaGlsZE1lc2hlcygpLmZvckVhY2goZnVuY3Rpb24gKG0pIHsKKyAgICAgICAgICAgICAgICBt
Lm1hdGVyaWFsID0gbWF0ZXJpYWw7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHZhciBsaWdodCA9IGdpem1vTGF5ZXIuX2dldFNoYXJlZEdpem1vTGlnaHQoKTsKKyAgICAg
ICAgbGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVzID0gbGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVzLmNv
bmNhdChfdGhpcy5fcm9vdE1lc2guZ2V0Q2hpbGRNZXNoZXMoZmFsc2UpKTsKKyAgICAgICAgcmV0
dXJuIF90aGlzOworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBsYW5lRHJhZ0dpem1v
Ll9DcmVhdGVQbGFuZSA9IGZ1bmN0aW9uIChzY2VuZSwgbWF0ZXJpYWwpIHsKKyAgICAgICAgdmFy
IHBsYW5lID0gbmV3IF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJUcmFuc2Zvcm1Ob2RlIl0oInBsYW5lIiwgc2NlbmUpOworICAgICAgICAvL21ha2Ug
c3VyZSBwbGFuZSBpcyBkb3VibGUgc2lkZWQKKyAgICAgICAgdmFyIGRyYWdQbGFuZSA9IF9NZXNo
ZXNfQnVpbGRlcnNfcGxhbmVCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlBs
YW5lQnVpbGRlciJdLkNyZWF0ZVBsYW5lKCJkcmFnUGxhbmUiLCB7IHdpZHRoOiAuMTM3NSwgaGVp
Z2h0OiAuMTM3NSwgc2lkZU9yaWVudGF0aW9uOiAyIH0sIHNjZW5lKTsKKyAgICAgICAgZHJhZ1Bs
YW5lLm1hdGVyaWFsID0gbWF0ZXJpYWw7CisgICAgICAgIGRyYWdQbGFuZS5wYXJlbnQgPSBwbGFu
ZTsKKyAgICAgICAgLy8gUG9zaXRpb24gcGxhbmUgcG9pbnRpbmcgbm9ybWFsIHRvIGRyYWdQbGFu
ZSBub3JtYWwKKyAgICAgICAgZHJhZ1BsYW5lLm1hdGVyaWFsID0gbWF0ZXJpYWw7CisgICAgICAg
IHJldHVybiBwbGFuZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgUGxhbmVEcmFn
R2l6bW8uX0NyZWF0ZUFycm93SW5zdGFuY2UgPSBmdW5jdGlvbiAoc2NlbmUsIGFycm93KSB7Cisg
ICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBfTWVzaGVzX3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siVHJhbnNmb3JtTm9kZSJdKCJhcnJvdyIsIHNjZW5lKTsKKyAg
ICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IGFycm93LmdldENoaWxkTWVzaGVzKCk7IF9pIDwg
X2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IF9hW19pXTsKKyAgICAg
ICAgICAgIHZhciBjaGlsZEluc3RhbmNlID0gbWVzaC5jcmVhdGVJbnN0YW5jZShtZXNoLm5hbWUp
OworICAgICAgICAgICAgY2hpbGRJbnN0YW5jZS5wYXJlbnQgPSBpbnN0YW5jZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfTsKKyAgICBQbGFuZURyYWdHaXptby5w
cm90b3R5cGUuX2F0dGFjaGVkTWVzaENoYW5nZWQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg
ICAgaWYgKHRoaXMuZHJhZ0JlaGF2aW9yKSB7CisgICAgICAgICAgICB0aGlzLmRyYWdCZWhhdmlv
ci5lbmFibGVkID0gdmFsdWUgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQbGFuZURyYWdHaXptby5wcm90b3R5cGUsICJpc0VuYWJs
ZWQiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2lzRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRo
ZSBnaXptbyBpcyBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faXNFbmFibGVkID0gdmFsdWU7CisgICAgICAgICAg
ICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hlZE1lc2ggPSBudWxs
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYg
KHRoaXMuX3BhcmVudCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaGVkTWVzaCA9
IHRoaXMuX3BhcmVudC5hdHRhY2hlZE1lc2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyBvZiB0aGUg
Z2l6bW8KKyAgICAgKi8KKyAgICBQbGFuZURyYWdHaXptby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5vblNuYXBPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAg
ICAgIHRoaXMuZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxl
LnJlbW92ZSh0aGlzLl9wb2ludGVyT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLmRyYWdCZWhhdmlv
ci5kZXRhY2goKTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7
CisgICAgICAgIGlmICh0aGlzLl9wbGFuZSkgeworICAgICAgICAgICAgdGhpcy5fcGxhbmUuZGlz
cG9zZSgpOworICAgICAgICB9CisgICAgICAgIFt0aGlzLl9jb2xvcmVkTWF0ZXJpYWwsIHRoaXMu
X2hvdmVyTWF0ZXJpYWxdLmZvckVhY2goZnVuY3Rpb24gKG1hdGwpIHsKKyAgICAgICAgICAgIGlm
IChtYXRsKSB7CisgICAgICAgICAgICAgICAgbWF0bC5kaXNwb3NlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0pOworICAgIH07CisgICAgcmV0dXJuIFBsYW5lRHJhZ0dpem1vOworfShfZ2l6
bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siR2l6bW8iXSkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL0dpem1vcy9wbGFuZVJvdGF0aW9uR2l6bW8udHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dpem1vcy9wbGFu
ZVJvdGF0aW9uR2l6bW8udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUGxhbmVSb3RhdGlvbkdpem1vICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBsYW5lUm90YXRpb25HaXptbyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gUGxhbmVSb3RhdGlvbkdpem1vOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL29i
c2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2Fic3RyYWN0
TWVzaCAqLyAiLi9NZXNoZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9CZWhhdmlvcnNfTWVzaGVzX3BvaW50ZXJEcmFnQmVo
YXZpb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL0JlaGF2aW9ycy9NZXNoZXMvcG9pbnRlckRyYWdCZWhhdmlvciAqLyAiLi9CZWhhdmlv
cnMvTWVzaGVzL3BvaW50ZXJEcmFnQmVoYXZpb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfZ2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vZ2l6bW8gKi8gIi4vR2l6bW9zL2dpem1vLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmVuZGVyaW5nL3V0
aWxpdHlMYXllclJlbmRlcmVyICovICIuL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlh
bF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL3N0YW5kYXJkTWF0
ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJzX2xp
bmVzQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01lc2hlcy9CdWlsZGVycy9saW5lc0J1aWxkZXIgKi8gIi4vTWVzaGVzL0J1
aWxkZXJzL2xpbmVzQnVpbGRlci50cyIpOworCisKKworCisKKworCisKKworCisKKy8qKgorICog
U2luZ2xlIHBsYW5lIHJvdGF0aW9uIGdpem1vCisgKi8KK3ZhciBQbGFuZVJvdGF0aW9uR2l6bW8g
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUGxhbmVSb3RhdGlvbkdpem1vLCBfc3Vw
ZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBQbGFuZVJvdGF0aW9uR2l6bW8KKyAgICAg
KiBAcGFyYW0gZ2l6bW9MYXllciBUaGUgdXRpbGl0eSBsYXllciB0aGUgZ2l6bW8gd2lsbCBiZSBh
ZGRlZCB0bworICAgICAqIEBwYXJhbSBwbGFuZU5vcm1hbCBUaGUgbm9ybWFsIG9mIHRoZSBwbGFu
ZSB3aGljaCB0aGUgZ2l6bW8gd2lsbCBiZSBhYmxlIHRvIHJvdGF0ZSBvbgorICAgICAqIEBwYXJh
bSBjb2xvciBUaGUgY29sb3Igb2YgdGhlIGdpem1vCisgICAgICogQHBhcmFtIHRlc3NlbGxhdGlv
biBBbW91bnQgb2YgdGVzc2VsbGF0aW9uIHRvIGJlIHVzZWQgd2hlbiBjcmVhdGluZyByb3RhdGlv
biBjaXJjbGVzCisgICAgICogQHBhcmFtIHVzZUV1bGVyUm90YXRpb24gVXNlIGFuZCB1cGRhdGUg
RXVsZXIgYW5nbGUgaW5zdGVhZCBvZiBxdWF0ZXJuaW9uCisgICAgICovCisgICAgZnVuY3Rpb24g
UGxhbmVSb3RhdGlvbkdpem1vKHBsYW5lTm9ybWFsLCBjb2xvciwgZ2l6bW9MYXllciwgdGVzc2Vs
bGF0aW9uLCBwYXJlbnQsIHVzZUV1bGVyUm90YXRpb24pIHsKKyAgICAgICAgaWYgKGNvbG9yID09
PSB2b2lkIDApIHsgY29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJDb2xvcjMiXS5HcmF5KCk7IH0KKyAgICAgICAgaWYgKGdpem1vTGF5ZXIgPT09
IHZvaWQgMCkgeyBnaXptb0xheWVyID0gX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJVdGlsaXR5TGF5ZXJSZW5kZXJlciJdLkRlZmF1
bHRVdGlsaXR5TGF5ZXI7IH0KKyAgICAgICAgaWYgKHRlc3NlbGxhdGlvbiA9PT0gdm9pZCAwKSB7
IHRlc3NlbGxhdGlvbiA9IDMyOyB9CisgICAgICAgIGlmIChwYXJlbnQgPT09IHZvaWQgMCkgeyBw
YXJlbnQgPSBudWxsOyB9CisgICAgICAgIGlmICh1c2VFdWxlclJvdGF0aW9uID09PSB2b2lkIDAp
IHsgdXNlRXVsZXJSb3RhdGlvbiA9IGZhbHNlOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIGdpem1vTGF5ZXIpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9wb2ludGVy
T2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogUm90YXRpb24gZGlzdGFu
Y2UgaW4gcmFkaWFucyB0aGF0IHRoZSBnaXptbyB3aWxsIHNuYXAgdG8gKERlZmF1bHQ6IDApCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5zbmFwRGlzdGFuY2UgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogRXZlbnQgdGhhdCBmaXJlcyBlYWNoIHRpbWUgdGhlIGdpem1vIHNuYXBzIHRv
IGEgbmV3IGxvY2F0aW9uLgorICAgICAgICAgKiAqIHNuYXBEaXN0YW5jZSBpcyB0aGUgdGhlIGNo
YW5nZSBpbiBkaXN0YW5jZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25TbmFwT2JzZXJ2
YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
Ik9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhpcy5faXNFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgX3RoaXMuX3BhcmVudCA9IG51bGw7CisgICAgICAgIF90aGlzLl9wYXJlbnQgPSBwYXJlbnQ7
CisgICAgICAgIC8vIENyZWF0ZSBNYXRlcmlhbAorICAgICAgICB2YXIgY29sb3JlZE1hdGVyaWFs
ID0gbmV3IF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJTdGFuZGFyZE1hdGVyaWFsIl0oIiIsIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2Nl
bmUpOworICAgICAgICBjb2xvcmVkTWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gY29sb3I7CisgICAg
ICAgIGNvbG9yZWRNYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gY29sb3Iuc3VidHJhY3QobmV3IF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbG9yMyJdKDAu
MSwgMC4xLCAwLjEpKTsKKyAgICAgICAgdmFyIGhvdmVyTWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFs
c19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlN0YW5kYXJk
TWF0ZXJpYWwiXSgiIiwgZ2l6bW9MYXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgIGhv
dmVyTWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gY29sb3IuYWRkKG5ldyBfTWF0aHNfbWF0aF9jb2xv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb2xvcjMiXSgwLjMsIDAuMywgMC4zKSk7
CisgICAgICAgIC8vIEJ1aWxkIG1lc2ggb24gcm9vdCBub2RlCisgICAgICAgIHZhciBwYXJlbnRN
ZXNoID0gbmV3IF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIkFic3RyYWN0TWVzaCJdKCIiLCBnaXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKTsKKyAg
ICAgICAgdmFyIGRyYWcgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siTWVzaCJdLkNyZWF0ZVRvcnVzKCIiLCAwLjYsIDAuMDMsIHRlc3NlbGxhdGlvbiwgZ2l6bW9M
YXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgIGRyYWcudmlzaWJpbGl0eSA9IDA7Cisg
ICAgICAgIHZhciByb3RhdGlvbk1lc2ggPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siTWVzaCJdLkNyZWF0ZVRvcnVzKCIiLCAwLjYsIDAuMDA1LCB0ZXNzZWxsYXRp
b24sIGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUpOworICAgICAgICByb3RhdGlvbk1lc2gu
bWF0ZXJpYWwgPSBjb2xvcmVkTWF0ZXJpYWw7CisgICAgICAgIC8vIFBvc2l0aW9uIGFycm93IHBv
aW50aW5nIGluIGl0cyBkcmFnIGF4aXMKKyAgICAgICAgcm90YXRpb25NZXNoLnJvdGF0aW9uLngg
PSBNYXRoLlBJIC8gMjsKKyAgICAgICAgZHJhZy5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7Cisg
ICAgICAgIHBhcmVudE1lc2guYWRkQ2hpbGQocm90YXRpb25NZXNoKTsKKyAgICAgICAgcGFyZW50
TWVzaC5hZGRDaGlsZChkcmFnKTsKKyAgICAgICAgcGFyZW50TWVzaC5sb29rQXQoX3RoaXMuX3Jv
b3RNZXNoLnBvc2l0aW9uLmFkZChwbGFuZU5vcm1hbCkpOworICAgICAgICBfdGhpcy5fcm9vdE1l
c2guYWRkQ2hpbGQocGFyZW50TWVzaCk7CisgICAgICAgIHBhcmVudE1lc2guc2NhbGluZy5zY2Fs
ZUluUGxhY2UoMSAvIDMpOworICAgICAgICAvLyBBZGQgZHJhZyBiZWhhdmlvciB0byBoYW5kbGUg
ZXZlbnRzIHdoZW4gdGhlIGdpem1vIGlzIGRyYWdnZWQKKyAgICAgICAgX3RoaXMuZHJhZ0JlaGF2
aW9yID0gbmV3IF9CZWhhdmlvcnNfTWVzaGVzX3BvaW50ZXJEcmFnQmVoYXZpb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siUG9pbnRlckRyYWdCZWhhdmlvciJdKHsgZHJhZ1BsYW5lTm9y
bWFsOiBwbGFuZU5vcm1hbCB9KTsKKyAgICAgICAgX3RoaXMuZHJhZ0JlaGF2aW9yLm1vdmVBdHRh
Y2hlZCA9IGZhbHNlOworICAgICAgICBfdGhpcy5kcmFnQmVoYXZpb3IubWF4RHJhZ0FuZ2xlID0g
TWF0aC5QSSAqIDkgLyAyMDsKKyAgICAgICAgX3RoaXMuZHJhZ0JlaGF2aW9yLl91c2VBbHRlcm5h
dGVQaWNrZWRQb2ludEFib3ZlTWF4RHJhZ0FuZ2xlID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX3Jv
b3RNZXNoLmFkZEJlaGF2aW9yKF90aGlzLmRyYWdCZWhhdmlvcik7CisgICAgICAgIHZhciBsYXN0
RHJhZ1Bvc2l0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZWN0b3IzIl0oKTsKKyAgICAgICAgX3RoaXMuZHJhZ0JlaGF2aW9yLm9uRHJh
Z1N0YXJ0T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGlmIChfdGhp
cy5hdHRhY2hlZE1lc2gpIHsKKyAgICAgICAgICAgICAgICBsYXN0RHJhZ1Bvc2l0aW9uLmNvcHlG
cm9tKGUuZHJhZ1BsYW5lUG9pbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAg
ICAgdmFyIHJvdGF0aW9uTWF0cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJNYXRyaXgiXSgpOworICAgICAgICB2YXIgcGxhbmVOb3JtYWxU
b3dhcmRzQ2FtZXJhID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZWN0b3IzIl0oKTsKKyAgICAgICAgdmFyIGxvY2FsUGxhbmVOb3JtYWxUb3dh
cmRzQ2FtZXJhID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJWZWN0b3IzIl0oKTsKKyAgICAgICAgdmFyIHRtcFNuYXBFdmVudCA9IHsgc25hcERp
c3RhbmNlOiAwIH07CisgICAgICAgIHZhciBjdXJyZW50U25hcERyYWdEaXN0YW5jZSA9IDA7Cisg
ICAgICAgIHZhciB0bXBNYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdKCk7CisgICAgICAgIHZhciB0bXBWZWN0b3IgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3Rv
cjMiXSgpOworICAgICAgICB2YXIgYW1vdW50VG9Sb3RhdGUgPSBuZXcgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRlcm5pb24iXSgpOworICAgICAg
ICBfdGhpcy5kcmFnQmVoYXZpb3Iub25EcmFnT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGV2ZW50
KSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuYXR0YWNoZWRNZXNoKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFfdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uIHx8IHVzZUV1bGVy
Um90YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoLnJvdGF0
aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQaXRjaFJvbGwoX3RoaXMuYXR0YWNoZWRN
ZXNoLnJvdGF0aW9uLnksIF90aGlzLmF0dGFjaGVkTWVzaC5yb3RhdGlvbi54LCBfdGhpcy5hdHRh
Y2hlZE1lc2gucm90YXRpb24ueik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vIFJlbW92ZSBwYXJlbnQgcHJpb3J0IHRvIHJvdGF0aW5nCisgICAgICAgICAgICAgICAgdmFy
IGF0dGFjaGVkTWVzaFBhcmVudCA9IF90aGlzLmF0dGFjaGVkTWVzaC5wYXJlbnQ7CisgICAgICAg
ICAgICAgICAgaWYgKGF0dGFjaGVkTWVzaFBhcmVudCkgeworICAgICAgICAgICAgICAgICAgICBf
dGhpcy5hdHRhY2hlZE1lc2guc2V0UGFyZW50KG51bGwpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyBDYWxjIGFuZ2xlIG92ZXIgZnVsbCAzNjAgZGVncmVlIChodHRwczov
L3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MzQ5MzcxMS90aGUtYW5nbGUtYmV0d2Vlbi10
d28tM2QtdmVjdG9ycy13aXRoLWEtcmVzdWx0LXJhbmdlLTAtMzYwKQorICAgICAgICAgICAgICAg
IHZhciBuZXdWZWN0b3IgPSBldmVudC5kcmFnUGxhbmVQb2ludC5zdWJ0cmFjdChfdGhpcy5hdHRh
Y2hlZE1lc2guYWJzb2x1dGVQb3NpdGlvbikubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAg
dmFyIG9yaWdpbmFsVmVjdG9yID0gbGFzdERyYWdQb3NpdGlvbi5zdWJ0cmFjdChfdGhpcy5hdHRh
Y2hlZE1lc2guYWJzb2x1dGVQb3NpdGlvbikubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAg
dmFyIGNyb3NzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlY3RvcjMiXS5Dcm9zcyhuZXdWZWN0b3IsIG9yaWdpbmFsVmVjdG9yKTsKKyAgICAgICAg
ICAgICAgICB2YXIgZG90ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlY3RvcjMiXS5Eb3QobmV3VmVjdG9yLCBvcmlnaW5hbFZlY3Rvcik7CisgICAg
ICAgICAgICAgICAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuMihjcm9zcy5sZW5ndGgoKSwgZG90KTsK
KyAgICAgICAgICAgICAgICBwbGFuZU5vcm1hbFRvd2FyZHNDYW1lcmEuY29weUZyb20ocGxhbmVO
b3JtYWwpOworICAgICAgICAgICAgICAgIGxvY2FsUGxhbmVOb3JtYWxUb3dhcmRzQ2FtZXJhLmNv
cHlGcm9tKHBsYW5lTm9ybWFsKTsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMudXBkYXRlR2l6
bW9Sb3RhdGlvblRvTWF0Y2hBdHRhY2hlZE1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuYXR0YWNoZWRNZXNoLnJvdGF0aW9uUXVhdGVybmlvbi50b1JvdGF0aW9uTWF0cml4KHJvdGF0
aW9uTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxQbGFuZU5vcm1hbFRvd2FyZHND
YW1lcmEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
VmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzKHBsYW5lTm9ybWFsVG93YXJkc0NhbWVyYSwg
cm90YXRpb25NYXRyaXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBG
bGlwIHVwIHZlY3RvciBkZXBlbmRpbmcgb24gd2hpY2ggc2lkZSB0aGUgY2FtZXJhIGlzIG9uCisg
ICAgICAgICAgICAgICAgaWYgKGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUuYWN0aXZlQ2Ft
ZXJhKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjYW1WZWMgPSBnaXptb0xheWVyLnV0aWxp
dHlMYXllclNjZW5lLmFjdGl2ZUNhbWVyYS5wb3NpdGlvbi5zdWJ0cmFjdChfdGhpcy5hdHRhY2hl
ZE1lc2gucG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBpZiAoX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5Eb3QoY2FtVmVjLCBs
b2NhbFBsYW5lTm9ybWFsVG93YXJkc0NhbWVyYSkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwbGFuZU5vcm1hbFRvd2FyZHNDYW1lcmEuc2NhbGVJblBsYWNlKC0xKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2FsUGxhbmVOb3JtYWxUb3dhcmRzQ2FtZXJhLnNjYWxlSW5QbGFj
ZSgtMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdmFyIGhhbGZDaXJjbGVTaWRlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5Eb3QobG9jYWxQbGFuZU5vcm1hbFRvd2Fy
ZHNDYW1lcmEsIGNyb3NzKSA+IDAuMDsKKyAgICAgICAgICAgICAgICBpZiAoaGFsZkNpcmNsZVNp
ZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSAtYW5nbGU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vIFNuYXBwaW5nIGxvZ2ljCisgICAgICAgICAgICAgICAg
dmFyIHNuYXBwZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuc25hcERpc3Rh
bmNlICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNuYXBEcmFnRGlzdGFuY2Ug
Kz0gYW5nbGU7CisgICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhjdXJyZW50U25hcERy
YWdEaXN0YW5jZSkgPiBfdGhpcy5zbmFwRGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBkcmFnU3RlcHMgPSBNYXRoLmZsb29yKE1hdGguYWJzKGN1cnJlbnRTbmFwRHJhZ0Rp
c3RhbmNlKSAvIF90aGlzLnNuYXBEaXN0YW5jZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudFNuYXBEcmFnRGlzdGFuY2UgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZHJhZ1N0ZXBzICo9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNuYXBEcmFnRGlzdGFuY2UgPSBjdXJyZW50U25hcERy
YWdEaXN0YW5jZSAlIF90aGlzLnNuYXBEaXN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFuZ2xlID0gX3RoaXMuc25hcERpc3RhbmNlICogZHJhZ1N0ZXBzOworICAgICAgICAgICAgICAg
ICAgICAgICAgc25hcHBlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIG1lc2ggaGFzIGEgcGFyZW50LCBjb252ZXJ0IG5lZWRlZCB3b3JsZCByb3RhdGlv
biB0byBsb2NhbCByb3RhdGlvbgorICAgICAgICAgICAgICAgIHRtcE1hdHJpeC5yZXNldCgpOwor
ICAgICAgICAgICAgICAgIGlmIChfdGhpcy5hdHRhY2hlZE1lc2gucGFyZW50KSB7CisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLmF0dGFjaGVkTWVzaC5wYXJlbnQuY29tcHV0ZVdvcmxkTWF0cml4
KCkuaW52ZXJ0VG9SZWYodG1wTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgdG1wTWF0cml4
LmdldFJvdGF0aW9uTWF0cml4VG9SZWYodG1wTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMi
XS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHBsYW5lTm9ybWFsVG93YXJkc0NhbWVyYSwgdG1w
TWF0cml4LCBwbGFuZU5vcm1hbFRvd2FyZHNDYW1lcmEpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyBDb252ZXJ0IGFuZ2xlIGFuZCBheGlzIHRvIHF1YXRlcm5pb24gKGh0
dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2dlb21ldHJ5L3JvdGF0aW9ucy9jb252
ZXJzaW9ucy9hbmdsZVRvUXVhdGVybmlvbi9pbmRleC5odG0pCisgICAgICAgICAgICAgICAgdmFy
IHF1YXRlcm5pb25Db2VmZmljaWVudCA9IE1hdGguc2luKGFuZ2xlIC8gMik7CisgICAgICAgICAg
ICAgICAgYW1vdW50VG9Sb3RhdGUuc2V0KHBsYW5lTm9ybWFsVG93YXJkc0NhbWVyYS54ICogcXVh
dGVybmlvbkNvZWZmaWNpZW50LCBwbGFuZU5vcm1hbFRvd2FyZHNDYW1lcmEueSAqIHF1YXRlcm5p
b25Db2VmZmljaWVudCwgcGxhbmVOb3JtYWxUb3dhcmRzQ2FtZXJhLnogKiBxdWF0ZXJuaW9uQ29l
ZmZpY2llbnQsIE1hdGguY29zKGFuZ2xlIC8gMikpOworICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBtZXNoZXMgbG9jYWwgc2NhbGUgaXMgaW52ZXJ0ZWQgKGVnLiBsb2FkZWQgZ2x0ZiBmaWxlIHBh
cmVudCB3aXRoIHogc2NhbGUgb2YgLTEpIHRoZSByb3RhdGlvbiBuZWVkcyB0byBiZSBpbnZlcnRl
ZCBvbiB0aGUgeSBheGlzCisgICAgICAgICAgICAgICAgaWYgKHRtcE1hdHJpeC5kZXRlcm1pbmFu
dCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICBhbW91bnRUb1JvdGF0ZS50b0V1bGVyQW5n
bGVzVG9SZWYodG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbllh
d1BpdGNoUm9sbFRvUmVmKHRtcFZlY3Rvci55LCAtdG1wVmVjdG9yLngsIC10bXBWZWN0b3Iueiwg
YW1vdW50VG9Sb3RhdGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
X3RoaXMudXBkYXRlR2l6bW9Sb3RhdGlvblRvTWF0Y2hBdHRhY2hlZE1lc2gpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gUm90YXRlIHNlbGVjdGVkIG1lc2ggcXVhdGVybmlvbiBvdmVyIGZpeGVk
IGF4aXMKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoLnJvdGF0aW9uUXVh
dGVybmlvbi5tdWx0aXBseVRvUmVmKGFtb3VudFRvUm90YXRlLCBfdGhpcy5hdHRhY2hlZE1lc2gu
cm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJvdGF0ZSBzZWxlY3RlZCBtZXNoIHF1YXRl
cm5pb24gb3ZlciByb3RhdGVkIGF4aXMKKyAgICAgICAgICAgICAgICAgICAgYW1vdW50VG9Sb3Rh
dGUubXVsdGlwbHlUb1JlZihfdGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uLCBf
dGhpcy5hdHRhY2hlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKHVzZUV1bGVyUm90YXRpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoLnJvdGF0aW9uUXVhdGVybmlvbi50b0V1bGVyQW5nbGVz
VG9SZWYodG1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNo
LnJvdGF0aW9uUXVhdGVybmlvbiA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmF0
dGFjaGVkTWVzaC5yb3RhdGlvbi5jb3B5RnJvbSh0bXBWZWN0b3IpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBsYXN0RHJhZ1Bvc2l0aW9uLmNvcHlGcm9tKGV2ZW50LmRyYWdQ
bGFuZVBvaW50KTsKKyAgICAgICAgICAgICAgICBpZiAoc25hcHBlZCkgeworICAgICAgICAgICAg
ICAgICAgICB0bXBTbmFwRXZlbnQuc25hcERpc3RhbmNlID0gYW5nbGU7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLm9uU25hcE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRtcFNuYXBFdmVu
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgcGFyZW50
CisgICAgICAgICAgICAgICAgaWYgKGF0dGFjaGVkTWVzaFBhcmVudCkgeworICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5hdHRhY2hlZE1lc2guc2V0UGFyZW50KGF0dGFjaGVkTWVzaFBhcmVudCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAg
X3RoaXMuX3BvaW50ZXJPYnNlcnZlciA9IGdpem1vTGF5ZXIudXRpbGl0eUxheWVyU2NlbmUub25Q
b2ludGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHBvaW50ZXJJbmZvKSB7CisgICAgICAgICAg
ICBpZiAoX3RoaXMuX2N1c3RvbU1lc2hTZXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgaXNIb3ZlcmVkID0gcG9pbnRlckluZm8ucGlj
a0luZm8gJiYgKF90aGlzLl9yb290TWVzaC5nZXRDaGlsZE1lc2hlcygpLmluZGV4T2YocG9pbnRl
ckluZm8ucGlja0luZm8ucGlja2VkTWVzaCkgIT0gLTEpOworICAgICAgICAgICAgdmFyIG1hdGVy
aWFsID0gaXNIb3ZlcmVkID8gaG92ZXJNYXRlcmlhbCA6IGNvbG9yZWRNYXRlcmlhbDsKKyAgICAg
ICAgICAgIF90aGlzLl9yb290TWVzaC5nZXRDaGlsZE1lc2hlcygpLmZvckVhY2goZnVuY3Rpb24g
KG0pIHsKKyAgICAgICAgICAgICAgICBtLm1hdGVyaWFsID0gbWF0ZXJpYWw7CisgICAgICAgICAg
ICAgICAgaWYgKG0uY29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgbS5jb2xvciA9IG1hdGVy
aWFsLmRpZmZ1c2VDb2xvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7CisgICAgICAgIHZhciBsaWdodCA9IGdpem1vTGF5ZXIuX2dldFNoYXJlZEdpem1v
TGlnaHQoKTsKKyAgICAgICAgbGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVzID0gbGlnaHQuaW5jbHVk
ZWRPbmx5TWVzaGVzLmNvbmNhdChfdGhpcy5fcm9vdE1lc2guZ2V0Q2hpbGRNZXNoZXMoZmFsc2Up
KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBQbGFuZVJvdGF0aW9uR2l6bW8u
cHJvdG90eXBlLl9hdHRhY2hlZE1lc2hDaGFuZ2VkID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgIGlmICh0aGlzLmRyYWdCZWhhdmlvcikgeworICAgICAgICAgICAgdGhpcy5kcmFnQmVoYXZp
b3IuZW5hYmxlZCA9IHZhbHVlID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICB9CisgICAgfTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGxhbmVSb3RhdGlvbkdpem1vLnByb3RvdHlwZSwgImlz
RW5hYmxlZCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5faXNFbmFibGVkOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICAg
ICAqIElmIHRoZSBnaXptbyBpcyBlbmFibGVkCisgICAgICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IHZhbHVl
OworICAgICAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNo
ZWRNZXNoID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5h
dHRhY2hlZE1lc2ggPSB0aGlzLl9wYXJlbnQuYXR0YWNoZWRNZXNoOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRGlz
cG9zZXMgb2YgdGhlIGdpem1vCisgICAgICovCisgICAgUGxhbmVSb3RhdGlvbkdpem1vLnByb3Rv
dHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLm9uU25hcE9ic2VydmFi
bGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5naXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lLm9u
UG9pbnRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX3BvaW50ZXJPYnNlcnZlcik7CisgICAgICAg
IHRoaXMuZHJhZ0JlaGF2aW9yLmRldGFjaCgpOworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRp
c3Bvc2UuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIHJldHVybiBQbGFuZVJvdGF0aW9uR2l6bW87
Cit9KF9naXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJHaXptbyJdKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vR2l6bW9zL3Bvc2l0aW9uR2l6bW8udHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HaXptb3MvcG9zaXRp
b25HaXptby50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogUG9zaXRpb25HaXptbyAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQb3NpdGlvbkdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQb3Np
dGlvbkdpem1vOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4u
L25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxl
ICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX2dpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2dpem1vICovICIuL0dpem1vcy9naXptby50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9heGlzRHJhZ0dpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2F4aXNEcmFnR2l6bW8gKi8gIi4vR2l6
bW9zL2F4aXNEcmFnR2l6bW8udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGxhbmVE
cmFnR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vcGxhbmVEcmFnR2l6bW8gKi8gIi4vR2l6bW9zL3BsYW5lRHJhZ0dpem1vLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJlbmRlcmVyICovICIuL1JlbmRlcmluZy91dGlsaXR5
TGF5ZXJSZW5kZXJlci50cyIpOworCisKKworCisKKworCisKKworLyoqCisgKiBHaXptbyB0aGF0
IGVuYWJsZXMgZHJhZ2dpbmcgYSBtZXNoIGFsb25nIDMgYXhpcworICovCit2YXIgUG9zaXRpb25H
aXptbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShQb3NpdGlvbkdpem1vLCBfc3Vw
ZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBQb3NpdGlvbkdpem1vCisgICAgICogQHBh
cmFtIGdpem1vTGF5ZXIgVGhlIHV0aWxpdHkgbGF5ZXIgdGhlIGdpem1vIHdpbGwgYmUgYWRkZWQg
dG8KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQb3NpdGlvbkdpem1vKGdpem1vTGF5ZXIpIHsKKyAg
ICAgICAgaWYgKGdpem1vTGF5ZXIgPT09IHZvaWQgMCkgeyBnaXptb0xheWVyID0gX1JlbmRlcmlu
Z191dGlsaXR5TGF5ZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJVdGls
aXR5TGF5ZXJSZW5kZXJlciJdLkRlZmF1bHRVdGlsaXR5TGF5ZXI7IH0KKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZ2l6bW9MYXllcikgfHwgdGhpczsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIHByaXZhdGUgdmFyaWFibGVzCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5fbWVzaEF0dGFjaGVkID0gbnVsbDsKKyAgICAgICAgLyoqIEZpcmVzIGFuIGV2ZW50IHdoZW4g
YW55IG9mIGl0J3Mgc3ViIGdpem1vcyBhcmUgZHJhZ2dlZCAqLworICAgICAgICBfdGhpcy5vbkRy
YWdTdGFydE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqIEZpcmVzIGFuIGV2ZW50
IHdoZW4gYW55IG9mIGl0J3Mgc3ViIGdpem1vcyBhcmUgcmVsZWFzZWQgZnJvbSBkcmFnZ2luZyAq
LworICAgICAgICBfdGhpcy5vbkRyYWdFbmRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFi
bGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgcGxhbmFyIGRyYWcgaXMgZW5hYmxlZAor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3BsYW5hckdpem1vRW5hYmxlZCA9IGZhbHNlOwor
ICAgICAgICBfdGhpcy54R2l6bW8gPSBuZXcgX2F4aXNEcmFnR2l6bW9fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siQXhpc0RyYWdHaXptbyJdKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDEsIDAsIDApLCBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb2xvcjMiXS5SZWQoKS5zY2Fs
ZSgwLjUpLCBnaXptb0xheWVyLCBfdGhpcyk7CisgICAgICAgIF90aGlzLnlHaXptbyA9IG5ldyBf
YXhpc0RyYWdHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJBeGlzRHJhZ0dpem1v
Il0obmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZWN0b3IzIl0oMCwgMSwgMCksIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIkNvbG9yMyJdLkdyZWVuKCkuc2NhbGUoMC41KSwgZ2l6bW9MYXllciwgX3RoaXMp
OworICAgICAgICBfdGhpcy56R2l6bW8gPSBuZXcgX2F4aXNEcmFnR2l6bW9fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfX1siQXhpc0RyYWdHaXptbyJdKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDEpLCBfTWF0aHNf
bWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb2xvcjMiXS5CbHVlKCku
c2NhbGUoMC41KSwgZ2l6bW9MYXllciwgX3RoaXMpOworICAgICAgICBfdGhpcy54UGxhbmVHaXpt
byA9IG5ldyBfcGxhbmVEcmFnR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUGxh
bmVEcmFnR2l6bW8iXShuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXSgxLCAwLCAwKSwgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siQ29sb3IzIl0uUmVkKCkuc2NhbGUoMC41KSwgX3RoaXMuZ2l6
bW9MYXllciwgX3RoaXMpOworICAgICAgICBfdGhpcy55UGxhbmVHaXptbyA9IG5ldyBfcGxhbmVE
cmFnR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUGxhbmVEcmFnR2l6bW8iXShu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXSgwLCAxLCAwKSwgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siQ29sb3IzIl0uR3JlZW4oKS5zY2FsZSgwLjUpLCBfdGhpcy5naXptb0xheWVyLCBfdGhp
cyk7CisgICAgICAgIF90aGlzLnpQbGFuZUdpem1vID0gbmV3IF9wbGFuZURyYWdHaXptb19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJQbGFuZURyYWdHaXptbyJdKG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDAsIDEp
LCBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb2xvcjMi
XS5CbHVlKCkuc2NhbGUoMC41KSwgX3RoaXMuZ2l6bW9MYXllciwgX3RoaXMpOworICAgICAgICAv
LyBSZWxheSBkcmFnIGV2ZW50cworICAgICAgICBbX3RoaXMueEdpem1vLCBfdGhpcy55R2l6bW8s
IF90aGlzLnpHaXptbywgX3RoaXMueFBsYW5lR2l6bW8sIF90aGlzLnlQbGFuZUdpem1vLCBfdGhp
cy56UGxhbmVHaXptb10uZm9yRWFjaChmdW5jdGlvbiAoZ2l6bW8pIHsKKyAgICAgICAgICAgIGdp
em1vLmRyYWdCZWhhdmlvci5vbkRyYWdTdGFydE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgICAgICBfdGhpcy5vbkRyYWdTdGFydE9ic2VydmFibGUubm90aWZ5T2JzZXJ2
ZXJzKHt9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZ2l6bW8uZHJhZ0JlaGF2aW9y
Lm9uRHJhZ0VuZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBf
dGhpcy5vbkRyYWdFbmRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7fSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLmF0dGFjaGVkTWVzaCA9IG51bGw7Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBv
c2l0aW9uR2l6bW8ucHJvdG90eXBlLCAiYXR0YWNoZWRNZXNoIiwgeworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXNoQXR0YWNoZWQ7CisgICAg
ICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgICAgIHRoaXMu
X21lc2hBdHRhY2hlZCA9IG1lc2g7CisgICAgICAgICAgICBbdGhpcy54R2l6bW8sIHRoaXMueUdp
em1vLCB0aGlzLnpHaXptbywgdGhpcy54UGxhbmVHaXptbywgdGhpcy55UGxhbmVHaXptbywgdGhp
cy56UGxhbmVHaXptb10uZm9yRWFjaChmdW5jdGlvbiAoZ2l6bW8pIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZ2l6bW8uaXNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGdpem1vLmF0dGFj
aGVkTWVzaCA9IG1lc2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBnaXptby5hdHRhY2hlZE1lc2ggPSBudWxsOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoUG9zaXRpb25HaXptby5wcm90b3R5cGUsICJwbGFuYXJHaXptb0Vu
YWJsZWQiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3BsYW5hckdpem1vRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIElmIHRoZSBwbGFuYXIgZHJhZyBnaXptbyBpcyBlbmFibGVkCisgICAgICAgICAqIHNl
dHRpbmcgdGhpcyB3aWxsIGVuYWJsZS9kaXNhYmxlIFhZLCBYWiBhbmQgWVogcGxhbmVzIHJlZ2Fy
ZGxlc3Mgb2YgaW5kaXZpZHVhbCBnaXptbyBzZXR0aW5ncy4KKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICAgICAgdGhpcy5fcGxhbmFyR2l6bW9FbmFibGVkID0gdmFsdWU7CisgICAgICAgICAg
ICBbdGhpcy54UGxhbmVHaXptbywgdGhpcy55UGxhbmVHaXptbywgdGhpcy56UGxhbmVHaXptb10u
Zm9yRWFjaChmdW5jdGlvbiAoZ2l6bW8pIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2l6bW8pIHsK
KyAgICAgICAgICAgICAgICAgICAgZ2l6bW8uaXNFbmFibGVkID0gdmFsdWU7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ2l6bW8uYXR0
YWNoZWRNZXNoID0gX3RoaXMuYXR0YWNoZWRNZXNoOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgdGhpcyk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3NpdGlvbkdpem1vLnByb3RvdHlwZSwgInVw
ZGF0ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0YWNoZWRNZXNoIiwgeworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVHaXptb1JvdGF0aW9u
VG9NYXRjaEF0dGFjaGVkTWVzaDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0
YWNoZWRNZXNoID0gdmFsdWU7CisgICAgICAgICAgICBbdGhpcy54R2l6bW8sIHRoaXMueUdpem1v
LCB0aGlzLnpHaXptbywgdGhpcy54UGxhbmVHaXptbywgdGhpcy55UGxhbmVHaXptbywgdGhpcy56
UGxhbmVHaXptb10uZm9yRWFjaChmdW5jdGlvbiAoZ2l6bW8pIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZ2l6bW8pIHsKKyAgICAgICAgICAgICAgICAgICAgZ2l6bW8udXBkYXRlR2l6bW9Sb3RhdGlv
blRvTWF0Y2hBdHRhY2hlZE1lc2ggPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBv
c2l0aW9uR2l6bW8ucHJvdG90eXBlLCAic25hcERpc3RhbmNlIiwgeworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zbmFwRGlzdGFuY2U7CisgICAg
ICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBEcmFnIGRpc3RhbmNlIGluIGJhYnlsb24g
dW5pdHMgdGhhdCB0aGUgZ2l6bW8gd2lsbCBzbmFwIHRvIHdoZW4gZHJhZ2dlZCAoRGVmYXVsdDog
MCkKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICB0aGlzLl9zbmFwRGlzdGFuY2UgPSB2YWx1ZTsKKyAgICAgICAgICAgIFt0aGlzLnhHaXpt
bywgdGhpcy55R2l6bW8sIHRoaXMuekdpem1vLCB0aGlzLnhQbGFuZUdpem1vLCB0aGlzLnlQbGFu
ZUdpem1vLCB0aGlzLnpQbGFuZUdpem1vXS5mb3JFYWNoKGZ1bmN0aW9uIChnaXptbykgeworICAg
ICAgICAgICAgICAgIGlmIChnaXptbykgeworICAgICAgICAgICAgICAgICAgICBnaXptby5zbmFw
RGlzdGFuY2UgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvc2l0aW9uR2l6bW8u
cHJvdG90eXBlLCAic2NhbGVSYXRpbyIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGVSYXRpbzsKKyAgICAgICAgfSwKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFJhdGlvIGZvciB0aGUgc2NhbGUgb2YgdGhlIGdpem1vIChEZWZhdWx0
OiAxKQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3NjYWxlUmF0aW8gPSB2YWx1ZTsKKyAgICAgICAgICAgIFt0aGlzLnhHaXpt
bywgdGhpcy55R2l6bW8sIHRoaXMuekdpem1vLCB0aGlzLnhQbGFuZUdpem1vLCB0aGlzLnlQbGFu
ZUdpem1vLCB0aGlzLnpQbGFuZUdpem1vXS5mb3JFYWNoKGZ1bmN0aW9uIChnaXptbykgeworICAg
ICAgICAgICAgICAgIGlmIChnaXptbykgeworICAgICAgICAgICAgICAgICAgICBnaXptby5zY2Fs
ZVJhdGlvID0gdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIG9mIHRoZSBnaXptbworICAg
ICAqLworICAgIFBvc2l0aW9uR2l6bW8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIFt0aGlzLnhHaXptbywgdGhpcy55R2l6bW8sIHRoaXMuekdpem1vLCB0aGlzLnhQ
bGFuZUdpem1vLCB0aGlzLnlQbGFuZUdpem1vLCB0aGlzLnpQbGFuZUdpem1vXS5mb3JFYWNoKGZ1
bmN0aW9uIChnaXptbykgeworICAgICAgICAgICAgaWYgKGdpem1vKSB7CisgICAgICAgICAgICAg
ICAgZ2l6bW8uZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAg
dGhpcy5vbkRyYWdTdGFydE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkRyYWdF
bmRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDdXN0b21NZXNo
ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBnaXptbworICAgICAqIEBwYXJhbSBtZXNoIFRo
ZSBtZXNoIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgbWVzaCBvZiB0aGUgZ2l6bW8KKyAgICAgKi8K
KyAgICBQb3NpdGlvbkdpem1vLnByb3RvdHlwZS5zZXRDdXN0b21NZXNoID0gZnVuY3Rpb24gKG1l
c2gpIHsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkxvZ2dlciJdLkVycm9yKCJDdXN0b20gbWVzaGVzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMg
Z2l6bW8sIHBsZWFzZSBzZXQgdGhlIGN1c3RvbSBtZXNoZXMgb24gdGhlIGdpem1vcyBjb250YWlu
ZWQgd2l0aGluIHRoaXMgb25lIChnaXptby54R2l6bW8sIGdpem1vLnlHaXptbywgZ2l6bW8uekdp
em1vLGdpem1vLnhQbGFuZUdpem1vLCBnaXptby55UGxhbmVHaXptbywgZ2l6bW8uelBsYW5lR2l6
bW8pIik7CisgICAgfTsKKyAgICByZXR1cm4gUG9zaXRpb25HaXptbzsKK30oX2dpem1vX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkdpem1vIl0pKTsKKworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9HaXptb3Mvcm90YXRpb25HaXptby50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0dpem1vcy9yb3RhdGlvbkdpem1vLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBSb3RhdGlvbkdpem1vICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlJvdGF0aW9uR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJvdGF0aW9uR2l6bW87IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3Rz
bGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWlzYy9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNl
cnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICov
ICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZ2l6
bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vZ2l6bW8gKi8gIi4vR2l6bW9zL2dpem1vLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3BsYW5lUm90YXRpb25HaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wbGFuZVJvdGF0aW9uR2l6bW8gKi8gIi4vR2l6bW9zL3Bs
YW5lUm90YXRpb25HaXptby50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9SZW5kZXJp
bmdfdXRpbGl0eUxheWVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlciAq
LyAiLi9SZW5kZXJpbmcvdXRpbGl0eUxheWVyUmVuZGVyZXIudHMiKTsKKworCisKKworCisKKwor
CisvKioKKyAqIEdpem1vIHRoYXQgZW5hYmxlcyByb3RhdGluZyBhIG1lc2ggYWxvbmcgMyBheGlz
CisgKi8KK3ZhciBSb3RhdGlvbkdpem1vID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBl
cikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJd
KFJvdGF0aW9uR2l6bW8sIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIFJvdGF0
aW9uR2l6bW8KKyAgICAgKiBAcGFyYW0gZ2l6bW9MYXllciBUaGUgdXRpbGl0eSBsYXllciB0aGUg
Z2l6bW8gd2lsbCBiZSBhZGRlZCB0bworICAgICAqIEBwYXJhbSB0ZXNzZWxsYXRpb24gQW1vdW50
IG9mIHRlc3NlbGxhdGlvbiB0byBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgcm90YXRpb24gY2lyY2xl
cworICAgICAqIEBwYXJhbSB1c2VFdWxlclJvdGF0aW9uIFVzZSBhbmQgdXBkYXRlIEV1bGVyIGFu
Z2xlIGluc3RlYWQgb2YgcXVhdGVybmlvbgorICAgICAqLworICAgIGZ1bmN0aW9uIFJvdGF0aW9u
R2l6bW8oZ2l6bW9MYXllciwgdGVzc2VsbGF0aW9uLCB1c2VFdWxlclJvdGF0aW9uKSB7CisgICAg
ICAgIGlmIChnaXptb0xheWVyID09PSB2b2lkIDApIHsgZ2l6bW9MYXllciA9IF9SZW5kZXJpbmdf
dXRpbGl0eUxheWVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVXRpbGl0
eUxheWVyUmVuZGVyZXIiXS5EZWZhdWx0VXRpbGl0eUxheWVyOyB9CisgICAgICAgIGlmICh0ZXNz
ZWxsYXRpb24gPT09IHZvaWQgMCkgeyB0ZXNzZWxsYXRpb24gPSAzMjsgfQorICAgICAgICBpZiAo
dXNlRXVsZXJSb3RhdGlvbiA9PT0gdm9pZCAwKSB7IHVzZUV1bGVyUm90YXRpb24gPSBmYWxzZTsg
fQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBnaXptb0xheWVyKSB8fCB0
aGlzOworICAgICAgICAvKiogRmlyZXMgYW4gZXZlbnQgd2hlbiBhbnkgb2YgaXQncyBzdWIgZ2l6
bW9zIGFyZSBkcmFnZ2VkICovCisgICAgICAgIF90aGlzLm9uRHJhZ1N0YXJ0T2JzZXJ2YWJsZSA9
IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2Vy
dmFibGUiXSgpOworICAgICAgICAvKiogRmlyZXMgYW4gZXZlbnQgd2hlbiBhbnkgb2YgaXQncyBz
dWIgZ2l6bW9zIGFyZSByZWxlYXNlZCBmcm9tIGRyYWdnaW5nICovCisgICAgICAgIF90aGlzLm9u
RHJhZ0VuZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgX3RoaXMueEdpem1vID0gbmV3
IF9wbGFuZVJvdGF0aW9uR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUGxhbmVS
b3RhdGlvbkdpem1vIl0obmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZWN0b3IzIl0oMSwgMCwgMCksIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yMyJdLlJlZCgpLnNjYWxlKDAuNSksIGdpem1vTGF5
ZXIsIHRlc3NlbGxhdGlvbiwgX3RoaXMsIHVzZUV1bGVyUm90YXRpb24pOworICAgICAgICBfdGhp
cy55R2l6bW8gPSBuZXcgX3BsYW5lUm90YXRpb25HaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fWyJQbGFuZVJvdGF0aW9uR2l6bW8iXShuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgwLCAxLCAwKSwgX01hdGhzX21hdGhf
Y29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29sb3IzIl0uR3JlZW4oKS5zY2Fs
ZSgwLjUpLCBnaXptb0xheWVyLCB0ZXNzZWxsYXRpb24sIF90aGlzLCB1c2VFdWxlclJvdGF0aW9u
KTsKKyAgICAgICAgX3RoaXMuekdpem1vID0gbmV3IF9wbGFuZVJvdGF0aW9uR2l6bW9fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siUGxhbmVSb3RhdGlvbkdpem1vIl0obmV3IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMCwg
MSksIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9y
MyJdLkJsdWUoKS5zY2FsZSgwLjUpLCBnaXptb0xheWVyLCB0ZXNzZWxsYXRpb24sIF90aGlzLCB1
c2VFdWxlclJvdGF0aW9uKTsKKyAgICAgICAgLy8gUmVsYXkgZHJhZyBldmVudHMKKyAgICAgICAg
W190aGlzLnhHaXptbywgX3RoaXMueUdpem1vLCBfdGhpcy56R2l6bW9dLmZvckVhY2goZnVuY3Rp
b24gKGdpem1vKSB7CisgICAgICAgICAgICBnaXptby5kcmFnQmVoYXZpb3Iub25EcmFnU3RhcnRP
YnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMub25EcmFn
U3RhcnRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7fSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIGdpem1vLmRyYWdCZWhhdmlvci5vbkRyYWdFbmRPYnNlcnZhYmxlLmFkZChmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMub25EcmFnRW5kT2JzZXJ2YWJsZS5ub3Rp
ZnlPYnNlcnZlcnMoe30pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBf
dGhpcy5hdHRhY2hlZE1lc2ggPSBudWxsOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSb3RhdGlvbkdpem1vLnByb3RvdHlwZSwgImF0dGFj
aGVkTWVzaCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fbWVzaEF0dGFjaGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
IChtZXNoKSB7CisgICAgICAgICAgICB0aGlzLl9tZXNoQXR0YWNoZWQgPSBtZXNoOworICAgICAg
ICAgICAgW3RoaXMueEdpem1vLCB0aGlzLnlHaXptbywgdGhpcy56R2l6bW9dLmZvckVhY2goZnVu
Y3Rpb24gKGdpem1vKSB7CisgICAgICAgICAgICAgICAgaWYgKGdpem1vLmlzRW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgICAgICBnaXptby5hdHRhY2hlZE1lc2ggPSBtZXNoOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ2l6
bW8uYXR0YWNoZWRNZXNoID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJvdGF0aW9u
R2l6bW8ucHJvdG90eXBlLCAidXBkYXRlR2l6bW9Sb3RhdGlvblRvTWF0Y2hBdHRhY2hlZE1lc2gi
LCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
eEdpem1vLnVwZGF0ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0YWNoZWRNZXNoOworICAgICAgICB9
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMu
eEdpem1vKSB7CisgICAgICAgICAgICAgICAgdGhpcy54R2l6bW8udXBkYXRlR2l6bW9Sb3RhdGlv
blRvTWF0Y2hBdHRhY2hlZE1lc2ggPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLnlHaXpt
by51cGRhdGVHaXptb1JvdGF0aW9uVG9NYXRjaEF0dGFjaGVkTWVzaCA9IHZhbHVlOworICAgICAg
ICAgICAgICAgIHRoaXMuekdpem1vLnVwZGF0ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0YWNoZWRN
ZXNoID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShSb3RhdGlvbkdpem1vLnByb3RvdHlwZSwgInNuYXBEaXN0YW5jZSIs
IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy54
R2l6bW8uc25hcERpc3RhbmNlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICog
RHJhZyBkaXN0YW5jZSBpbiBiYWJ5bG9uIHVuaXRzIHRoYXQgdGhlIGdpem1vIHdpbGwgc25hcCB0
byB3aGVuIGRyYWdnZWQgKERlZmF1bHQ6IDApCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMueEdpem1vKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy54R2l6bW8uc25hcERpc3RhbmNlID0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgdGhpcy55R2l6bW8uc25hcERpc3RhbmNlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdGhp
cy56R2l6bW8uc25hcERpc3RhbmNlID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSb3RhdGlvbkdpem1vLnByb3RvdHlw
ZSwgInNjYWxlUmF0aW8iLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMueEdpem1vLnNjYWxlUmF0aW87CisgICAgICAgIH0sCisgICAgICAgIC8q
KgorICAgICAgICAgKiBSYXRpbyBmb3IgdGhlIHNjYWxlIG9mIHRoZSBnaXptbyAoRGVmYXVsdDog
MSkKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy54R2l6bW8pIHsKKyAgICAgICAgICAgICAgICB0aGlzLnhHaXptby5zY2Fs
ZVJhdGlvID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdGhpcy55R2l6bW8uc2NhbGVSYXRpbyA9
IHZhbHVlOworICAgICAgICAgICAgICAgIHRoaXMuekdpem1vLnNjYWxlUmF0aW8gPSB2YWx1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRGlzcG9z
ZXMgb2YgdGhlIGdpem1vCisgICAgICovCisgICAgUm90YXRpb25HaXptby5wcm90b3R5cGUuZGlz
cG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy54R2l6bW8uZGlzcG9zZSgpOworICAg
ICAgICB0aGlzLnlHaXptby5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMuekdpem1vLmRpc3Bvc2Uo
KTsKKyAgICAgICAgdGhpcy5vbkRyYWdTdGFydE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAg
dGhpcy5vbkRyYWdFbmRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBDdXN0b21NZXNoZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBnaXptbworICAgICAqIEBw
YXJhbSBtZXNoIFRoZSBtZXNoIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgbWVzaCBvZiB0aGUgZ2l6
bW8KKyAgICAgKi8KKyAgICBSb3RhdGlvbkdpem1vLnByb3RvdHlwZS5zZXRDdXN0b21NZXNoID0g
ZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkxvZ2dlciJdLkVycm9yKCJDdXN0b20gbWVzaGVzIGFyZSBub3Qgc3VwcG9y
dGVkIG9uIHRoaXMgZ2l6bW8sIHBsZWFzZSBzZXQgdGhlIGN1c3RvbSBtZXNoZXMgb24gdGhlIGdp
em1vcyBjb250YWluZWQgd2l0aGluIHRoaXMgb25lIChnaXptby54R2l6bW8sIGdpem1vLnlHaXpt
bywgZ2l6bW8uekdpem1vKSIpOworICAgIH07CisgICAgcmV0dXJuIFJvdGF0aW9uR2l6bW87Cit9
KF9naXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJHaXptbyJdKSk7CisKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vR2l6bW9zL3NjYWxlR2l6bW8udHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9HaXptb3Mvc2NhbGVHaXptby50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogU2NhbGVHaXptbyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJT
Y2FsZUdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTY2FsZUdpem1vOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xp
Yi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mv
bG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMv
bWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRo
cy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWls
ZGVyc19wb2x5aGVkcm9uQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL0J1aWxkZXJzL3BvbHloZWRyb25CdWlsZGVy
ICovICIuL01lc2hlcy9CdWlsZGVycy9wb2x5aGVkcm9uQnVpbGRlci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9naXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9naXptbyAqLyAiLi9HaXptb3MvZ2l6bW8udHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXhpc1NjYWxlR2l6bW9fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXhpc1NjYWxlR2l6bW8gKi8g
Ii4vR2l6bW9zL2F4aXNTY2FsZUdpem1vLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1JlbmRlcmluZ191dGlsaXR5TGF5ZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJl
bmRlcmVyICovICIuL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlci50cyIpOworCisKKwor
CisKKworCisKKworLyoqCisgKiBHaXptbyB0aGF0IGVuYWJsZXMgc2NhbGluZyBhIG1lc2ggYWxv
bmcgMyBheGlzCisgKi8KK3ZhciBTY2FsZUdpem1vID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0
ZW5kcyJdKFNjYWxlR2l6bW8sIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIFNj
YWxlR2l6bW8KKyAgICAgKiBAcGFyYW0gZ2l6bW9MYXllciBUaGUgdXRpbGl0eSBsYXllciB0aGUg
Z2l6bW8gd2lsbCBiZSBhZGRlZCB0bworICAgICAqLworICAgIGZ1bmN0aW9uIFNjYWxlR2l6bW8o
Z2l6bW9MYXllcikgeworICAgICAgICBpZiAoZ2l6bW9MYXllciA9PT0gdm9pZCAwKSB7IGdpem1v
TGF5ZXIgPSBfUmVuZGVyaW5nX3V0aWxpdHlMYXllclJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV84X19bIlV0aWxpdHlMYXllclJlbmRlcmVyIl0uRGVmYXVsdFV0aWxpdHlMYXllcjsg
fQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBnaXptb0xheWVyKSB8fCB0
aGlzOworICAgICAgICBfdGhpcy5fbWVzaEF0dGFjaGVkID0gbnVsbDsKKyAgICAgICAgLyoqIEZp
cmVzIGFuIGV2ZW50IHdoZW4gYW55IG9mIGl0J3Mgc3ViIGdpem1vcyBhcmUgZHJhZ2dlZCAqLwor
ICAgICAgICBfdGhpcy5vbkRyYWdTdGFydE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJs
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAg
LyoqIEZpcmVzIGFuIGV2ZW50IHdoZW4gYW55IG9mIGl0J3Mgc3ViIGdpem1vcyBhcmUgcmVsZWFz
ZWQgZnJvbSBkcmFnZ2luZyAqLworICAgICAgICBfdGhpcy5vbkRyYWdFbmRPYnNlcnZhYmxlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgICAgIF90aGlzLnhHaXptbyA9IG5ldyBfYXhpc1NjYWxlR2l6bW9fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQXhpc1NjYWxlR2l6bW8iXShuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgxLCAwLCAw
KSwgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29sb3Iz
Il0uUmVkKCkuc2NhbGUoMC41KSwgZ2l6bW9MYXllciwgX3RoaXMpOworICAgICAgICBfdGhpcy55
R2l6bW8gPSBuZXcgX2F4aXNTY2FsZUdpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19b
IkF4aXNTY2FsZUdpem1vIl0obmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMSwgMCksIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yMyJdLkdyZWVuKCkuc2NhbGUoMC41KSwgZ2l6
bW9MYXllciwgX3RoaXMpOworICAgICAgICBfdGhpcy56R2l6bW8gPSBuZXcgX2F4aXNTY2FsZUdp
em1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkF4aXNTY2FsZUdpem1vIl0obmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0o
MCwgMCwgMSksIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkNvbG9yMyJdLkJsdWUoKS5zY2FsZSgwLjUpLCBnaXptb0xheWVyLCBfdGhpcyk7CisgICAgICAg
IC8vIENyZWF0ZSB1bmlmb3JtIHNjYWxlIGdpem1vCisgICAgICAgIF90aGlzLnVuaWZvcm1TY2Fs
ZUdpem1vID0gbmV3IF9heGlzU2NhbGVHaXptb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJBeGlzU2NhbGVHaXptbyJdKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAsIDEsIDApLCBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb2xvcjMiXS5ZZWxsb3coKS5zY2FsZSgwLjUpLCBn
aXptb0xheWVyLCBfdGhpcyk7CisgICAgICAgIF90aGlzLnVuaWZvcm1TY2FsZUdpem1vLnVwZGF0
ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0YWNoZWRNZXNoID0gZmFsc2U7CisgICAgICAgIF90aGlz
LnVuaWZvcm1TY2FsZUdpem1vLnVuaWZvcm1TY2FsaW5nID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMu
X3VuaWZvcm1TY2FsaW5nTWVzaCA9IF9NZXNoZXNfQnVpbGRlcnNfcG9seWhlZHJvbkJ1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUG9seWhlZHJvbkJ1aWxkZXIiXS5DcmVhdGVQ
b2x5aGVkcm9uKCIiLCB7IHR5cGU6IDEgfSwgX3RoaXMudW5pZm9ybVNjYWxlR2l6bW8uZ2l6bW9M
YXllci51dGlsaXR5TGF5ZXJTY2VuZSk7CisgICAgICAgIF90aGlzLl91bmlmb3JtU2NhbGluZ01l
c2guc2NhbGluZy5zY2FsZUluUGxhY2UoMC4wMik7CisgICAgICAgIF90aGlzLl91bmlmb3JtU2Nh
bGluZ01lc2gudmlzaWJpbGl0eSA9IDA7CisgICAgICAgIF90aGlzLl9vY3RhaGVkcm9uID0gX01l
c2hlc19CdWlsZGVyc19wb2x5aGVkcm9uQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fWyJQb2x5aGVkcm9uQnVpbGRlciJdLkNyZWF0ZVBvbHloZWRyb24oIiIsIHsgdHlwZTogMSB9
LCBfdGhpcy51bmlmb3JtU2NhbGVHaXptby5naXptb0xheWVyLnV0aWxpdHlMYXllclNjZW5lKTsK
KyAgICAgICAgX3RoaXMuX29jdGFoZWRyb24uc2NhbGluZy5zY2FsZUluUGxhY2UoMC4wMDcpOwor
ICAgICAgICBfdGhpcy5fdW5pZm9ybVNjYWxpbmdNZXNoLmFkZENoaWxkKF90aGlzLl9vY3RhaGVk
cm9uKTsKKyAgICAgICAgX3RoaXMudW5pZm9ybVNjYWxlR2l6bW8uc2V0Q3VzdG9tTWVzaChfdGhp
cy5fdW5pZm9ybVNjYWxpbmdNZXNoLCB0cnVlKTsKKyAgICAgICAgdmFyIGxpZ2h0ID0gZ2l6bW9M
YXllci5fZ2V0U2hhcmVkR2l6bW9MaWdodCgpOworICAgICAgICBsaWdodC5pbmNsdWRlZE9ubHlN
ZXNoZXMgPSBsaWdodC5pbmNsdWRlZE9ubHlNZXNoZXMuY29uY2F0KF90aGlzLl9vY3RhaGVkcm9u
KTsKKyAgICAgICAgLy8gUmVsYXkgZHJhZyBldmVudHMKKyAgICAgICAgW190aGlzLnhHaXptbywg
X3RoaXMueUdpem1vLCBfdGhpcy56R2l6bW8sIF90aGlzLnVuaWZvcm1TY2FsZUdpem1vXS5mb3JF
YWNoKGZ1bmN0aW9uIChnaXptbykgeworICAgICAgICAgICAgZ2l6bW8uZHJhZ0JlaGF2aW9yLm9u
RHJhZ1N0YXJ0T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90
aGlzLm9uRHJhZ1N0YXJ0T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBnaXptby5kcmFnQmVoYXZpb3Iub25EcmFnRW5kT2JzZXJ2YWJs
ZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLm9uRHJhZ0VuZE9ic2Vy
dmFibGUubm90aWZ5T2JzZXJ2ZXJzKHt9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsK
KyAgICAgICAgX3RoaXMuYXR0YWNoZWRNZXNoID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIF90aGlz
OworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NhbGVHaXptby5wcm90b3R5cGUs
ICJhdHRhY2hlZE1lc2giLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX21lc2hBdHRhY2hlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgdGhpcy5fbWVzaEF0dGFjaGVkID0gbWVzaDsK
KyAgICAgICAgICAgIFt0aGlzLnhHaXptbywgdGhpcy55R2l6bW8sIHRoaXMuekdpem1vLCB0aGlz
LnVuaWZvcm1TY2FsZUdpem1vXS5mb3JFYWNoKGZ1bmN0aW9uIChnaXptbykgeworICAgICAgICAg
ICAgICAgIGlmIChnaXptby5pc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2l6bW8u
YXR0YWNoZWRNZXNoID0gbWVzaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGdpem1vLmF0dGFjaGVkTWVzaCA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2FsZUdpem1vLnByb3RvdHlwZSwgInVwZGF0ZUdpem1v
Um90YXRpb25Ub01hdGNoQXR0YWNoZWRNZXNoIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVHaXptb1JvdGF0aW9uVG9NYXRjaEF0
dGFjaGVkTWVzaDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uV2FybigiU2V0dGluZyB1cGRh
dGVHaXptb1JvdGF0aW9uVG9NYXRjaEF0dGFjaGVkTWVzaCA9IGZhbHNlIG9uIHNjYWxpbmcgZ2l6
bW8gaXMgbm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUdpem1vUm90YXRpb25Ub01hdGNoQXR0YWNo
ZWRNZXNoID0gdmFsdWU7CisgICAgICAgICAgICAgICAgW3RoaXMueEdpem1vLCB0aGlzLnlHaXpt
bywgdGhpcy56R2l6bW8sIHRoaXMudW5pZm9ybVNjYWxlR2l6bW9dLmZvckVhY2goZnVuY3Rpb24g
KGdpem1vKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChnaXptbykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZ2l6bW8udXBkYXRlR2l6bW9Sb3RhdGlvblRvTWF0Y2hBdHRhY2hlZE1lc2gg
PSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
U2NhbGVHaXptby5wcm90b3R5cGUsICJzbmFwRGlzdGFuY2UiLCB7CisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBEaXN0YW5jZTsKKyAgICAg
ICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIERyYWcgZGlzdGFuY2UgaW4gYmFieWxvbiB1
bml0cyB0aGF0IHRoZSBnaXptbyB3aWxsIHNuYXAgdG8gd2hlbiBkcmFnZ2VkIChEZWZhdWx0OiAw
KQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3NuYXBEaXN0YW5jZSA9IHZhbHVlOworICAgICAgICAgICAgW3RoaXMueEdpem1v
LCB0aGlzLnlHaXptbywgdGhpcy56R2l6bW8sIHRoaXMudW5pZm9ybVNjYWxlR2l6bW9dLmZvckVh
Y2goZnVuY3Rpb24gKGdpem1vKSB7CisgICAgICAgICAgICAgICAgaWYgKGdpem1vKSB7CisgICAg
ICAgICAgICAgICAgICAgIGdpem1vLnNuYXBEaXN0YW5jZSA9IHZhbHVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoU2NhbGVHaXptby5wcm90b3R5cGUsICJzY2FsZVJhdGlvIiwgeworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZVJhdGlv
OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogUmF0aW8gZm9yIHRoZSBzY2Fs
ZSBvZiB0aGUgZ2l6bW8gKERlZmF1bHQ6IDEpCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fc2NhbGVSYXRpbyA9IHZhbHVlOwor
ICAgICAgICAgICAgW3RoaXMueEdpem1vLCB0aGlzLnlHaXptbywgdGhpcy56R2l6bW8sIHRoaXMu
dW5pZm9ybVNjYWxlR2l6bW9dLmZvckVhY2goZnVuY3Rpb24gKGdpem1vKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGdpem1vKSB7CisgICAgICAgICAgICAgICAgICAgIGdpem1vLnNjYWxlUmF0aW8g
PSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIGdpem1vCisgICAgICovCisg
ICAgU2NhbGVHaXptby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
W3RoaXMueEdpem1vLCB0aGlzLnlHaXptbywgdGhpcy56R2l6bW8sIHRoaXMudW5pZm9ybVNjYWxl
R2l6bW9dLmZvckVhY2goZnVuY3Rpb24gKGdpem1vKSB7CisgICAgICAgICAgICBpZiAoZ2l6bW8p
IHsKKyAgICAgICAgICAgICAgICBnaXptby5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgICAgICB0aGlzLm9uRHJhZ1N0YXJ0T2JzZXJ2YWJsZS5jbGVhcigpOworICAg
ICAgICB0aGlzLm9uRHJhZ0VuZE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgW3RoaXMuX3Vu
aWZvcm1TY2FsaW5nTWVzaCwgdGhpcy5fb2N0YWhlZHJvbl0uZm9yRWFjaChmdW5jdGlvbiAobXNo
KSB7CisgICAgICAgICAgICBpZiAobXNoKSB7CisgICAgICAgICAgICAgICAgbXNoLmRpc3Bvc2Uo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICByZXR1cm4gU2NhbGVH
aXptbzsKK30oX2dpem1vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkdpem1vIl0pKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9IZWxwZXJzL2Vudmlyb25tZW50SGVscGVyLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9IZWxwZXJzL2Vudmlyb25tZW50SGVscGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEVudmlyb25tZW50
SGVscGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVudmlyb25tZW50
SGVscGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFbnZpcm9ubWVudEhlbHBlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIv
dHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJs
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2FyY1JvdGF0ZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ2FtZXJhcy9hcmNSb3Rh
dGVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIu
L01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2ggKi8g
Ii4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X1RleHR1cmVzX2Jhc2VUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvYmFzZVRleHR1cmUgKi8g
Ii4vTWF0ZXJpYWxzL1RleHR1cmVzL2Jhc2VUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMv
dGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfbWlycm9yVGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL21pcnJvclRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL21pcnJv
clRleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1
cmVzX2N1YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvY3ViZVRleHR1cmUgKi8gIi4vTWF0
ZXJpYWxzL1RleHR1cmVzL2N1YmVUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19CYWNrZ3JvdW5kX2JhY2tncm91bmRNYXRlcmlhbF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9C
YWNrZ3JvdW5kL2JhY2tncm91bmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvQmFja2dyb3VuZC9i
YWNrZ3JvdW5kTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfcGxhbmVCdWls
ZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWVzaGVzL0J1aWxkZXJzL3BsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMv
cGxhbmVCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWls
ZGVyc19ib3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL0J1aWxkZXJzL2JveEJ1aWxkZXIgKi8gIi4vTWVzaGVz
L0J1aWxkZXJzL2JveEJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
aHNfbWF0aF9wbGFuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgucGxhbmUgKi8gIi4vTWF0aHMvbWF0aC5wbGFuZS50
cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKworLyoqCisgKiBUaGUgRW52aXJvbm1l
bnQgaGVscGVyIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGFkZCBhIGZ1bGx5IGZlYXR1cmVhZCBub25l
IGV4cGVuc2l2ZSBiYWNrZ3JvdW5kIHRvIHlvdXIgc2NlbmUuCisgKiBJdCBpbmNsdWRlcyBieSBk
ZWZhdWx0IGEgc2t5Ym94IGFuZCBhIGdyb3VuZCByZWx5aW5nIG9uIHRoZSBCYWNrZ3JvdW5kTWF0
ZXJpYWwuCisgKiBJdCBhbHNvIGhlbHBzIHdpdGggdGhlIGRlZmF1bHQgc2V0dXAgb2YgeW91ciBp
bWFnZVByb2Nlc3NpbmcgY29uZmlndXJhdGlvbi4KKyAqLwordmFyIEVudmlyb25tZW50SGVscGVy
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIGNvbnN0cnVj
dG9yCisgICAgICogQHBhcmFtIG9wdGlvbnMgRGVmaW5lcyB0aGUgb3B0aW9ucyB3ZSB3YW50IHRv
IGN1c3RvbWl6ZSB0aGUgaGVscGVyCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0byBh
ZGQgdGhlIG1hdGVyaWFsIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gRW52aXJvbm1lbnRIZWxw
ZXIob3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
dGhpcy5fZXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGV4Y2VwdGlvbikgeworICAg
ICAgICAgICAgX3RoaXMub25FcnJvck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHsgbWVzc2Fn
ZTogbWVzc2FnZSwgZXhjZXB0aW9uOiBleGNlcHRpb24gfSk7CisgICAgICAgIH07CisgICAgICAg
IHRoaXMuX29wdGlvbnMgPSB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fz
c2lnbiJdKHt9LCBFbnZpcm9ubWVudEhlbHBlci5fZ2V0RGVmYXVsdE9wdGlvbnMoKSwgb3B0aW9u
cyk7CisgICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7CisgICAgICAgIHRoaXMub25FcnJvck9i
c2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgdGhpcy5fc2V0dXBCYWNrZ3JvdW5kKCk7Cisg
ICAgICAgIHRoaXMuX3NldHVwSW1hZ2VQcm9jZXNzaW5nKCk7CisgICAgfQorICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIGhlbHBlci4KKyAgICAgKi8K
KyAgICBFbnZpcm9ubWVudEhlbHBlci5fZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBjcmVhdGVHcm91bmQ6IHRydWUsCisgICAg
ICAgICAgICBncm91bmRTaXplOiAxNSwKKyAgICAgICAgICAgIGdyb3VuZFRleHR1cmU6IHRoaXMu
X2dyb3VuZFRleHR1cmVDRE5VcmwsCisgICAgICAgICAgICBncm91bmRDb2xvcjogbmV3IF9NYXRo
c19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yMyJdKDAuMiwg
MC4yLCAwLjMpLnRvTGluZWFyU3BhY2UoKS5zY2FsZSgzKSwKKyAgICAgICAgICAgIGdyb3VuZE9w
YWNpdHk6IDAuOSwKKyAgICAgICAgICAgIGVuYWJsZUdyb3VuZFNoYWRvdzogdHJ1ZSwKKyAgICAg
ICAgICAgIGdyb3VuZFNoYWRvd0xldmVsOiAwLjUsCisgICAgICAgICAgICBlbmFibGVHcm91bmRN
aXJyb3I6IGZhbHNlLAorICAgICAgICAgICAgZ3JvdW5kTWlycm9yU2l6ZVJhdGlvOiAwLjMsCisg
ICAgICAgICAgICBncm91bmRNaXJyb3JCbHVyS2VybmVsOiA2NCwKKyAgICAgICAgICAgIGdyb3Vu
ZE1pcnJvckFtb3VudDogMSwKKyAgICAgICAgICAgIGdyb3VuZE1pcnJvckZyZXNuZWxXZWlnaHQ6
IDEsCisgICAgICAgICAgICBncm91bmRNaXJyb3JGYWxsT2ZmRGlzdGFuY2U6IDAsCisgICAgICAg
ICAgICBncm91bmRNaXJyb3JUZXh0dXJlVHlwZTogX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9J
TlQsCisgICAgICAgICAgICBncm91bmRZQmlhczogMC4wMDAwMSwKKyAgICAgICAgICAgIGNyZWF0
ZVNreWJveDogdHJ1ZSwKKyAgICAgICAgICAgIHNreWJveFNpemU6IDIwLAorICAgICAgICAgICAg
c2t5Ym94VGV4dHVyZTogdGhpcy5fc2t5Ym94VGV4dHVyZUNETlVybCwKKyAgICAgICAgICAgIHNr
eWJveENvbG9yOiBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siQ29sb3IzIl0oMC4yLCAwLjIsIDAuMykudG9MaW5lYXJTcGFjZSgpLnNjYWxlKDMpLAor
ICAgICAgICAgICAgYmFja2dyb3VuZFlSb3RhdGlvbjogMCwKKyAgICAgICAgICAgIHNpemVBdXRv
OiB0cnVlLAorICAgICAgICAgICAgcm9vdFBvc2l0aW9uOiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKSwKKyAgICAgICAgICAg
IHNldHVwSW1hZ2VQcm9jZXNzaW5nOiB0cnVlLAorICAgICAgICAgICAgZW52aXJvbm1lbnRUZXh0
dXJlOiB0aGlzLl9lbnZpcm9ubWVudFRleHR1cmVDRE5VcmwsCisgICAgICAgICAgICBjYW1lcmFF
eHBvc3VyZTogMC44LAorICAgICAgICAgICAgY2FtZXJhQ29udHJhc3Q6IDEuMiwKKyAgICAgICAg
ICAgIHRvbmVNYXBwaW5nRW5hYmxlZDogdHJ1ZSwKKyAgICAgICAgfTsKKyAgICB9OworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShFbnZpcm9ubWVudEhlbHBlci5wcm90b3R5cGUsICJyb290TWVz
aCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHJvb3QgbWVzaCBjcmVhdGVk
IGJ5IHRoZSBoZWxwZXIuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb290TWVzaDsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVudmlyb25tZW50SGVscGVyLnByb3RvdHlwZSwgInNr
eWJveCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHNreWJveCBjcmVhdGVk
IGJ5IHRoZSBoZWxwZXIuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9za3lib3g7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbnZpcm9ubWVudEhlbHBlci5wcm90b3R5cGUsICJza3li
b3hUZXh0dXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgc2t5Ym94IHRl
eHR1cmUgY3JlYXRlZCBieSB0aGUgaGVscGVyLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2t5Ym94VGV4dHVyZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVudmlyb25tZW50SGVs
cGVyLnByb3RvdHlwZSwgInNreWJveE1hdGVyaWFsIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgc2t5Ym94IG1hdGVyaWFsIGNyZWF0ZWQgYnkgdGhlIGhlbHBlci4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3NreWJveE1hdGVyaWFsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoRW52aXJvbm1lbnRIZWxwZXIucHJvdG90eXBlLCAiZ3JvdW5kIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZ3JvdW5kIG1lc2ggY3JlYXRlZCBieSB0aGUgaGVs
cGVyLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZ3JvdW5kOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoRW52aXJvbm1lbnRIZWxwZXIucHJvdG90eXBlLCAiZ3JvdW5kVGV4dHVyZSIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGdyb3VuZCB0ZXh0dXJlIGNyZWF0
ZWQgYnkgdGhlIGhlbHBlci4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VuZFRleHR1cmU7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbnZpcm9ubWVudEhlbHBlci5wcm90b3R5
cGUsICJncm91bmRNaXJyb3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBn
cm91bmQgbWlycm9yIGNyZWF0ZWQgYnkgdGhlIGhlbHBlci4KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VuZE1pcnJv
cjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVudmlyb25t
ZW50SGVscGVyLnByb3RvdHlwZSwgImdyb3VuZE1pcnJvclJlbmRlckxpc3QiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBncm91bmQgbWlycm9yIHJlbmRlciBsaXN0IHRvIGhl
bHBzIHB1c2hpbmcgdGhlIG1lc2hlcworICAgICAgICAgKiB5b3Ugd2lzaCBpbiB0aGUgZ3JvdW5k
IHJlZmxlY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9ncm91bmRNaXJyb3IpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fZ3JvdW5kTWlycm9yLnJlbmRlckxpc3Q7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEVudmlyb25tZW50SGVscGVyLnByb3RvdHlwZSwgImdyb3VuZE1hdGVyaWFsIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZ3JvdW5kIG1hdGVyaWFsIGNyZWF0ZWQg
YnkgdGhlIGhlbHBlci4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VuZE1hdGVyaWFsOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBiYWNrZ3JvdW5kIGFjY29yZGluZyB0byB0
aGUgbmV3IG9wdGlvbnMKKyAgICAgKiBAcGFyYW0gb3B0aW9ucworICAgICAqLworICAgIEVudmly
b25tZW50SGVscGVyLnByb3RvdHlwZS51cGRhdGVPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMp
IHsKKyAgICAgICAgdmFyIG5ld09wdGlvbnMgPSB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2Fzc2lnbiJdKHt9LCB0aGlzLl9vcHRpb25zLCBvcHRpb25zKTsKKyAgICAgICAg
aWYgKHRoaXMuX2dyb3VuZCAmJiAhbmV3T3B0aW9ucy5jcmVhdGVHcm91bmQpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2dyb3VuZC5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9ncm91bmQgPSBu
dWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9ncm91bmRNYXRlcmlhbCAmJiAhbmV3
T3B0aW9ucy5jcmVhdGVHcm91bmQpIHsKKyAgICAgICAgICAgIHRoaXMuX2dyb3VuZE1hdGVyaWFs
LmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX2dyb3VuZE1hdGVyaWFsID0gbnVsbDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZ3JvdW5kVGV4dHVyZSkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX29wdGlvbnMuZ3JvdW5kVGV4dHVyZSAhPSBuZXdPcHRpb25zLmdyb3VuZFRleHR1
cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ncm91bmRUZXh0dXJlLmRpc3Bvc2UoKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9ncm91bmRUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc2t5Ym94ICYmICFuZXdPcHRpb25zLmNyZWF0
ZVNreWJveCkgeworICAgICAgICAgICAgdGhpcy5fc2t5Ym94LmRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgIHRoaXMuX3NreWJveCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Nr
eWJveE1hdGVyaWFsICYmICFuZXdPcHRpb25zLmNyZWF0ZVNreWJveCkgeworICAgICAgICAgICAg
dGhpcy5fc2t5Ym94TWF0ZXJpYWwuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fc2t5Ym94
TWF0ZXJpYWwgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9za3lib3hUZXh0
dXJlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5za3lib3hUZXh0dXJlICE9IG5l
d09wdGlvbnMuc2t5Ym94VGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3NreWJveFRl
eHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIHRoaXMuX3NreWJveFRleHR1cmUgPSBu
dWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9ncm91bmRN
aXJyb3IgJiYgIW5ld09wdGlvbnMuZW5hYmxlR3JvdW5kTWlycm9yKSB7CisgICAgICAgICAgICB0
aGlzLl9ncm91bmRNaXJyb3IuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fZ3JvdW5kTWly
cm9yID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc2NlbmUuZW52aXJvbm1l
bnRUZXh0dXJlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5lbnZpcm9ubWVudFRl
eHR1cmUgIT0gbmV3T3B0aW9ucy5lbnZpcm9ubWVudFRleHR1cmUpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9zY2VuZS5lbnZpcm9ubWVudFRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHRoaXMuX29wdGlvbnMgPSBuZXdPcHRpb25zOworICAgICAg
ICB0aGlzLl9zZXR1cEJhY2tncm91bmQoKTsKKyAgICAgICAgdGhpcy5fc2V0dXBJbWFnZVByb2Nl
c3NpbmcoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHByaW1hcnkgY29sb3Ig
b2YgYWxsIHRoZSBhdmFpbGFibGUgZWxlbWVudHMuCisgICAgICogQHBhcmFtIGNvbG9yIHRoZSBt
YWluIGNvbG9yIHRvIGFmZmVjdCB0byB0aGUgZ3JvdW5kIGFuZCB0aGUgYmFja2dyb3VuZAorICAg
ICAqLworICAgIEVudmlyb25tZW50SGVscGVyLnByb3RvdHlwZS5zZXRNYWluQ29sb3IgPSBmdW5j
dGlvbiAoY29sb3IpIHsKKyAgICAgICAgaWYgKHRoaXMuZ3JvdW5kTWF0ZXJpYWwpIHsKKyAgICAg
ICAgICAgIHRoaXMuZ3JvdW5kTWF0ZXJpYWwucHJpbWFyeUNvbG9yID0gY29sb3I7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuc2t5Ym94TWF0ZXJpYWwpIHsKKyAgICAgICAgICAgIHRoaXMu
c2t5Ym94TWF0ZXJpYWwucHJpbWFyeUNvbG9yID0gY29sb3I7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuZ3JvdW5kTWlycm9yKSB7CisgICAgICAgICAgICB0aGlzLmdyb3VuZE1pcnJvci5j
bGVhckNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkNvbG9yNCJdKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIDEuMCk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHVwIHRoZSBpbWFnZSBwcm9jZXNzaW5nIGFj
Y29yZGluZyB0byB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuCisgICAgICovCisgICAgRW52aXJvbm1l
bnRIZWxwZXIucHJvdG90eXBlLl9zZXR1cEltYWdlUHJvY2Vzc2luZyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuc2V0dXBJbWFnZVByb2Nlc3NpbmcpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3NjZW5lLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uY29udHJhc3Qg
PSB0aGlzLl9vcHRpb25zLmNhbWVyYUNvbnRyYXN0OworICAgICAgICAgICAgdGhpcy5fc2NlbmUu
aW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5leHBvc3VyZSA9IHRoaXMuX29wdGlvbnMuY2Ft
ZXJhRXhwb3N1cmU7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5pbWFnZVByb2Nlc3NpbmdDb25m
aWd1cmF0aW9uLnRvbmVNYXBwaW5nRW5hYmxlZCA9IHRoaXMuX29wdGlvbnMudG9uZU1hcHBpbmdF
bmFibGVkOworICAgICAgICAgICAgdGhpcy5fc2V0dXBFbnZpcm9ubWVudFRleHR1cmUoKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU2V0dXAgdGhlIGVudmlyb25tZW50IHRl
eHR1cmUgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgb3B0aW9ucy4KKyAgICAgKi8KKyAgICBF
bnZpcm9ubWVudEhlbHBlci5wcm90b3R5cGUuX3NldHVwRW52aXJvbm1lbnRUZXh0dXJlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29wdGlv
bnMuZW52aXJvbm1lbnRUZXh0dXJlIGluc3RhbmNlb2YgX01hdGVyaWFsc19UZXh0dXJlc19iYXNl
VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJCYXNlVGV4dHVyZSJdKSB7Cisg
ICAgICAgICAgICB0aGlzLl9zY2VuZS5lbnZpcm9ubWVudFRleHR1cmUgPSB0aGlzLl9vcHRpb25z
LmVudmlyb25tZW50VGV4dHVyZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgZW52aXJvbm1lbnRUZXh0dXJlID0gX01hdGVyaWFsc19UZXh0dXJlc19jdWJlVGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJDdWJlVGV4dHVyZSJdLkNyZWF0ZUZy
b21QcmVmaWx0ZXJlZERhdGEodGhpcy5fb3B0aW9ucy5lbnZpcm9ubWVudFRleHR1cmUsIHRoaXMu
X3NjZW5lKTsKKyAgICAgICAgdGhpcy5fc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlID0gZW52aXJv
bm1lbnRUZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0dXAgdGhlIGJhY2tncm91
bmQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgb3B0aW9ucy4KKyAgICAgKi8KKyAgICBFbnZp
cm9ubWVudEhlbHBlci5wcm90b3R5cGUuX3NldHVwQmFja2dyb3VuZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9yb290TWVzaCkgeworICAgICAgICAgICAgdGhpcy5fcm9vdE1l
c2ggPSBuZXcgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1lc2gi
XSgiQmFja2dyb3VuZEhlbHBlciIsIHRoaXMuX3NjZW5lKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9yb290TWVzaC5yb3RhdGlvbi55ID0gdGhpcy5fb3B0aW9ucy5iYWNrZ3JvdW5kWVJvdGF0
aW9uOworICAgICAgICB2YXIgc2NlbmVTaXplID0gdGhpcy5fZ2V0U2NlbmVTaXplKCk7CisgICAg
ICAgIGlmICh0aGlzLl9vcHRpb25zLmNyZWF0ZUdyb3VuZCkgeworICAgICAgICAgICAgdGhpcy5f
c2V0dXBHcm91bmQoc2NlbmVTaXplKTsKKyAgICAgICAgICAgIHRoaXMuX3NldHVwR3JvdW5kTWF0
ZXJpYWwoKTsKKyAgICAgICAgICAgIHRoaXMuX3NldHVwR3JvdW5kRGlmZnVzZVRleHR1cmUoKTsK
KyAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmVuYWJsZUdyb3VuZE1pcnJvcikgeworICAg
ICAgICAgICAgICAgIHRoaXMuX3NldHVwR3JvdW5kTWlycm9yVGV4dHVyZShzY2VuZVNpemUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2V0dXBNaXJyb3JJbkdyb3VuZE1hdGVy
aWFsKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuY3JlYXRlU2t5Ym94
KSB7CisgICAgICAgICAgICB0aGlzLl9zZXR1cFNreWJveChzY2VuZVNpemUpOworICAgICAgICAg
ICAgdGhpcy5fc2V0dXBTa3lib3hNYXRlcmlhbCgpOworICAgICAgICAgICAgdGhpcy5fc2V0dXBT
a3lib3hSZWZsZWN0aW9uVGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Jvb3RN
ZXNoLnBvc2l0aW9uLnggPSBzY2VuZVNpemUucm9vdFBvc2l0aW9uLng7CisgICAgICAgIHRoaXMu
X3Jvb3RNZXNoLnBvc2l0aW9uLnogPSBzY2VuZVNpemUucm9vdFBvc2l0aW9uLno7CisgICAgICAg
IHRoaXMuX3Jvb3RNZXNoLnBvc2l0aW9uLnkgPSBzY2VuZVNpemUucm9vdFBvc2l0aW9uLnk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHNjZW5lIHNpemVzIGFjY29yZGluZyB0byB0
aGUgc2V0dXAuCisgICAgICovCisgICAgRW52aXJvbm1lbnRIZWxwZXIucHJvdG90eXBlLl9nZXRT
Y2VuZVNpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIHZhciBncm91bmRTaXplID0gdGhpcy5fb3B0aW9ucy5ncm91bmRTaXplOworICAgICAgICB2
YXIgc2t5Ym94U2l6ZSA9IHRoaXMuX29wdGlvbnMuc2t5Ym94U2l6ZTsKKyAgICAgICAgdmFyIHJv
b3RQb3NpdGlvbiA9IHRoaXMuX29wdGlvbnMucm9vdFBvc2l0aW9uOworICAgICAgICBpZiAoIXRo
aXMuX3NjZW5lLm1lc2hlcyB8fCB0aGlzLl9zY2VuZS5tZXNoZXMubGVuZ3RoID09PSAxKSB7IC8v
IDEgb25seSBtZWFucyB0aGUgcm9vdCBvZiB0aGUgaGVscGVyLgorICAgICAgICAgICAgcmV0dXJu
IHsgZ3JvdW5kU2l6ZTogZ3JvdW5kU2l6ZSwgc2t5Ym94U2l6ZTogc2t5Ym94U2l6ZSwgcm9vdFBv
c2l0aW9uOiByb290UG9zaXRpb24gfTsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2NlbmVFeHRl
bmRzID0gdGhpcy5fc2NlbmUuZ2V0V29ybGRFeHRlbmRzKGZ1bmN0aW9uIChtZXNoKSB7CisgICAg
ICAgICAgICByZXR1cm4gKG1lc2ggIT09IF90aGlzLl9ncm91bmQgJiYgbWVzaCAhPT0gX3RoaXMu
X3Jvb3RNZXNoICYmIG1lc2ggIT09IF90aGlzLl9za3lib3gpOworICAgICAgICB9KTsKKyAgICAg
ICAgdmFyIHNjZW5lRGlhZ29uYWwgPSBzY2VuZUV4dGVuZHMubWF4LnN1YnRyYWN0KHNjZW5lRXh0
ZW5kcy5taW4pOworICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5zaXplQXV0bykgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSBpbnN0YW5jZW9mIF9DYW1lcmFzX2Fy
Y1JvdGF0ZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBcmNSb3RhdGVDYW1l
cmEiXSAmJgorICAgICAgICAgICAgICAgIHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS51cHBlclJh
ZGl1c0xpbWl0KSB7CisgICAgICAgICAgICAgICAgZ3JvdW5kU2l6ZSA9IHRoaXMuX3NjZW5lLmFj
dGl2ZUNhbWVyYS51cHBlclJhZGl1c0xpbWl0ICogMjsKKyAgICAgICAgICAgICAgICBza3lib3hT
aXplID0gZ3JvdW5kU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBzY2VuZURp
YWdvbmFsTGVuZ2h0ID0gc2NlbmVEaWFnb25hbC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChz
Y2VuZURpYWdvbmFsTGVuZ2h0ID4gZ3JvdW5kU2l6ZSkgeworICAgICAgICAgICAgICAgIGdyb3Vu
ZFNpemUgPSBzY2VuZURpYWdvbmFsTGVuZ2h0ICogMjsKKyAgICAgICAgICAgICAgICBza3lib3hT
aXplID0gZ3JvdW5kU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIDEwICUgYmln
Z2VyLgorICAgICAgICAgICAgZ3JvdW5kU2l6ZSAqPSAxLjE7CisgICAgICAgICAgICBza3lib3hT
aXplICo9IDEuNTsKKyAgICAgICAgICAgIHJvb3RQb3NpdGlvbiA9IHNjZW5lRXh0ZW5kcy5taW4u
YWRkKHNjZW5lRGlhZ29uYWwuc2NhbGUoMC41KSk7CisgICAgICAgICAgICByb290UG9zaXRpb24u
eSA9IHNjZW5lRXh0ZW5kcy5taW4ueSAtIHRoaXMuX29wdGlvbnMuZ3JvdW5kWUJpYXM7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHsgZ3JvdW5kU2l6ZTogZ3JvdW5kU2l6ZSwgc2t5Ym94U2l6
ZTogc2t5Ym94U2l6ZSwgcm9vdFBvc2l0aW9uOiByb290UG9zaXRpb24gfTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHVwIHRoZSBncm91bmQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQg
b3B0aW9ucy4KKyAgICAgKi8KKyAgICBFbnZpcm9ubWVudEhlbHBlci5wcm90b3R5cGUuX3NldHVw
R3JvdW5kID0gZnVuY3Rpb24gKHNjZW5lU2l6ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlz
OworICAgICAgICBpZiAoIXRoaXMuX2dyb3VuZCB8fCB0aGlzLl9ncm91bmQuaXNEaXNwb3NlZCgp
KSB7CisgICAgICAgICAgICB0aGlzLl9ncm91bmQgPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siTWVzaCJdLkNyZWF0ZVBsYW5lKCJCYWNrZ3JvdW5kUGxhbmUiLCBz
Y2VuZVNpemUuZ3JvdW5kU2l6ZSwgdGhpcy5fc2NlbmUpOworICAgICAgICAgICAgdGhpcy5fZ3Jv
dW5kLnJvdGF0aW9uLnggPSBNYXRoLlBJIC8gMjsgLy8gRmFjZSB1cCBieSBkZWZhdWx0LgorICAg
ICAgICAgICAgdGhpcy5fZ3JvdW5kLnBhcmVudCA9IHRoaXMuX3Jvb3RNZXNoOworICAgICAgICAg
ICAgdGhpcy5fZ3JvdW5kLm9uRGlzcG9zZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsgX3Ro
aXMuX2dyb3VuZCA9IG51bGw7IH0pOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dyb3VuZC5y
ZWNlaXZlU2hhZG93cyA9IHRoaXMuX29wdGlvbnMuZW5hYmxlR3JvdW5kU2hhZG93OworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0dXAgdGhlIGdyb3VuZCBtYXRlcmlhbCBhY2NvcmRpbmcgdG8g
dGhlIHNwZWNpZmllZCBvcHRpb25zLgorICAgICAqLworICAgIEVudmlyb25tZW50SGVscGVyLnBy
b3RvdHlwZS5fc2V0dXBHcm91bmRNYXRlcmlhbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9ncm91bmRNYXRlcmlhbCkgeworICAgICAgICAgICAgdGhpcy5fZ3JvdW5kTWF0ZXJp
YWwgPSBuZXcgX01hdGVyaWFsc19CYWNrZ3JvdW5kX2JhY2tncm91bmRNYXRlcmlhbF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQmFja2dyb3VuZE1hdGVyaWFsIl0oIkJhY2tncm91bmRQ
bGFuZU1hdGVyaWFsIiwgdGhpcy5fc2NlbmUpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dy
b3VuZE1hdGVyaWFsLmFscGhhID0gdGhpcy5fb3B0aW9ucy5ncm91bmRPcGFjaXR5OworICAgICAg
ICB0aGlzLl9ncm91bmRNYXRlcmlhbC5hbHBoYU1vZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkNvbnN0YW50cyJdLkFMUEhBX1BSRU1VTFRJUExJ
RURfUE9SVEVSRFVGRjsKKyAgICAgICAgdGhpcy5fZ3JvdW5kTWF0ZXJpYWwuc2hhZG93TGV2ZWwg
PSB0aGlzLl9vcHRpb25zLmdyb3VuZFNoYWRvd0xldmVsOworICAgICAgICB0aGlzLl9ncm91bmRN
YXRlcmlhbC5wcmltYXJ5Q29sb3IgPSB0aGlzLl9vcHRpb25zLmdyb3VuZENvbG9yOworICAgICAg
ICB0aGlzLl9ncm91bmRNYXRlcmlhbC51c2VSR0JDb2xvciA9IGZhbHNlOworICAgICAgICB0aGlz
Ll9ncm91bmRNYXRlcmlhbC5lbmFibGVOb2lzZSA9IHRydWU7CisgICAgICAgIGlmICh0aGlzLl9n
cm91bmQpIHsKKyAgICAgICAgICAgIHRoaXMuX2dyb3VuZC5tYXRlcmlhbCA9IHRoaXMuX2dyb3Vu
ZE1hdGVyaWFsOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXR1cCB0aGUg
Z3JvdW5kIGRpZmZ1c2UgdGV4dHVyZSBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBvcHRpb25z
LgorICAgICAqLworICAgIEVudmlyb25tZW50SGVscGVyLnByb3RvdHlwZS5fc2V0dXBHcm91bmRE
aWZmdXNlVGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9ncm91bmRN
YXRlcmlhbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLl9ncm91bmRUZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuX29wdGlvbnMuZ3JvdW5kVGV4dHVyZSBpbnN0YW5jZW9mIF9NYXRlcmlh
bHNfVGV4dHVyZXNfYmFzZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQmFz
ZVRleHR1cmUiXSkgeworICAgICAgICAgICAgdGhpcy5fZ3JvdW5kTWF0ZXJpYWwuZGlmZnVzZVRl
eHR1cmUgPSB0aGlzLl9vcHRpb25zLmdyb3VuZFRleHR1cmU7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRpZmZ1c2VUZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNf
VGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJUZXh0dXJlIl0o
dGhpcy5fb3B0aW9ucy5ncm91bmRUZXh0dXJlLCB0aGlzLl9zY2VuZSwgdW5kZWZpbmVkLCB1bmRl
ZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLl9lcnJvckhhbmRsZXIpOworICAgICAg
ICBkaWZmdXNlVGV4dHVyZS5nYW1tYVNwYWNlID0gZmFsc2U7CisgICAgICAgIGRpZmZ1c2VUZXh0
dXJlLmhhc0FscGhhID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fZ3JvdW5kTWF0ZXJpYWwuZGlmZnVz
ZVRleHR1cmUgPSBkaWZmdXNlVGV4dHVyZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHVw
IHRoZSBncm91bmQgbWlycm9yIHRleHR1cmUgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgb3B0
aW9ucy4KKyAgICAgKi8KKyAgICBFbnZpcm9ubWVudEhlbHBlci5wcm90b3R5cGUuX3NldHVwR3Jv
dW5kTWlycm9yVGV4dHVyZSA9IGZ1bmN0aW9uIChzY2VuZVNpemUpIHsKKyAgICAgICAgdmFyIHdy
YXBwaW5nID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgaWYgKCF0aGlz
Ll9ncm91bmRNaXJyb3IpIHsKKyAgICAgICAgICAgIHRoaXMuX2dyb3VuZE1pcnJvciA9IG5ldyBf
TWF0ZXJpYWxzX1RleHR1cmVzX21pcnJvclRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siTWlycm9yVGV4dHVyZSJdKCJCYWNrZ3JvdW5kUGxhbmVNaXJyb3JUZXh0dXJlIiwgeyBy
YXRpbzogdGhpcy5fb3B0aW9ucy5ncm91bmRNaXJyb3JTaXplUmF0aW8gfSwgdGhpcy5fc2NlbmUs
IGZhbHNlLCB0aGlzLl9vcHRpb25zLmdyb3VuZE1pcnJvclRleHR1cmVUeXBlLCBfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVGV4dHVyZSJd
LkJJTElORUFSX1NBTVBMSU5HTU9ERSwgdHJ1ZSk7CisgICAgICAgICAgICB0aGlzLl9ncm91bmRN
aXJyb3IubWlycm9yUGxhbmUgPSBuZXcgX01hdGhzX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE0X19bIlBsYW5lIl0oMCwgLTEsIDAsIHNjZW5lU2l6ZS5yb290UG9zaXRpb24u
eSk7CisgICAgICAgICAgICB0aGlzLl9ncm91bmRNaXJyb3IuYW5pc290cm9waWNGaWx0ZXJpbmdM
ZXZlbCA9IDE7CisgICAgICAgICAgICB0aGlzLl9ncm91bmRNaXJyb3Iud3JhcFUgPSB3cmFwcGlu
ZzsKKyAgICAgICAgICAgIHRoaXMuX2dyb3VuZE1pcnJvci53cmFwViA9IHdyYXBwaW5nOworICAg
ICAgICAgICAgdGhpcy5fZ3JvdW5kTWlycm9yLmdhbW1hU3BhY2UgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9ncm91bmRNaXJyb3IucmVuZGVyTGlzdCkgeworICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2NlbmUubWVzaGVzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fc2NlbmUubWVzaGVzW2ldOworICAg
ICAgICAgICAgICAgICAgICBpZiAobWVzaCAhPT0gdGhpcy5fZ3JvdW5kICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICBtZXNoICE9PSB0aGlzLl9za3lib3ggJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1lc2ggIT09IHRoaXMuX3Jvb3RNZXNoKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9ncm91bmRNaXJyb3IucmVuZGVyTGlzdC5wdXNoKG1lc2gpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2dyb3VuZE1pcnJvci5jbGVhckNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yNCJdKHRoaXMuX29wdGlvbnMu
Z3JvdW5kQ29sb3IuciwgdGhpcy5fb3B0aW9ucy5ncm91bmRDb2xvci5nLCB0aGlzLl9vcHRpb25z
Lmdyb3VuZENvbG9yLmIsIDEpOworICAgICAgICB0aGlzLl9ncm91bmRNaXJyb3IuYWRhcHRpdmVC
bHVyS2VybmVsID0gdGhpcy5fb3B0aW9ucy5ncm91bmRNaXJyb3JCbHVyS2VybmVsOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0dXAgdGhlIGdyb3VuZCB0byByZWNlaXZlIHRoZSBtaXJyb3Ig
dGV4dHVyZS4KKyAgICAgKi8KKyAgICBFbnZpcm9ubWVudEhlbHBlci5wcm90b3R5cGUuX3NldHVw
TWlycm9ySW5Hcm91bmRNYXRlcmlhbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMu
X2dyb3VuZE1hdGVyaWFsKSB7CisgICAgICAgICAgICB0aGlzLl9ncm91bmRNYXRlcmlhbC5yZWZs
ZWN0aW9uVGV4dHVyZSA9IHRoaXMuX2dyb3VuZE1pcnJvcjsKKyAgICAgICAgICAgIHRoaXMuX2dy
b3VuZE1hdGVyaWFsLnJlZmxlY3Rpb25GcmVzbmVsID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMu
X2dyb3VuZE1hdGVyaWFsLnJlZmxlY3Rpb25BbW91bnQgPSB0aGlzLl9vcHRpb25zLmdyb3VuZE1p
cnJvckFtb3VudDsKKyAgICAgICAgICAgIHRoaXMuX2dyb3VuZE1hdGVyaWFsLnJlZmxlY3Rpb25T
dGFuZGFyZEZyZXNuZWxXZWlnaHQgPSB0aGlzLl9vcHRpb25zLmdyb3VuZE1pcnJvckZyZXNuZWxX
ZWlnaHQ7CisgICAgICAgICAgICB0aGlzLl9ncm91bmRNYXRlcmlhbC5yZWZsZWN0aW9uRmFsbG9m
ZkRpc3RhbmNlID0gdGhpcy5fb3B0aW9ucy5ncm91bmRNaXJyb3JGYWxsT2ZmRGlzdGFuY2U7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHVwIHRoZSBza3lib3ggYWNjb3Jk
aW5nIHRvIHRoZSBzcGVjaWZpZWQgb3B0aW9ucy4KKyAgICAgKi8KKyAgICBFbnZpcm9ubWVudEhl
bHBlci5wcm90b3R5cGUuX3NldHVwU2t5Ym94ID0gZnVuY3Rpb24gKHNjZW5lU2l6ZSkgeworICAg
ICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoIXRoaXMuX3NreWJveCB8fCB0aGlz
Ll9za3lib3guaXNEaXNwb3NlZCgpKSB7CisgICAgICAgICAgICB0aGlzLl9za3lib3ggPSBfTWVz
aGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWVzaCJdLkNyZWF0ZUJveCgi
QmFja2dyb3VuZFNreWJveCIsIHNjZW5lU2l6ZS5za3lib3hTaXplLCB0aGlzLl9zY2VuZSwgdW5k
ZWZpbmVkLCBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWVzaCJd
LkJBQ0tTSURFKTsKKyAgICAgICAgICAgIHRoaXMuX3NreWJveC5vbkRpc3Bvc2VPYnNlcnZhYmxl
LmFkZChmdW5jdGlvbiAoKSB7IF90aGlzLl9za3lib3ggPSBudWxsOyB9KTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9za3lib3gucGFyZW50ID0gdGhpcy5fcm9vdE1lc2g7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTZXR1cCB0aGUgc2t5Ym94IG1hdGVyaWFsIGFjY29yZGluZyB0byB0aGUg
c3BlY2lmaWVkIG9wdGlvbnMuCisgICAgICovCisgICAgRW52aXJvbm1lbnRIZWxwZXIucHJvdG90
eXBlLl9zZXR1cFNreWJveE1hdGVyaWFsID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRo
aXMuX3NreWJveCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlm
ICghdGhpcy5fc2t5Ym94TWF0ZXJpYWwpIHsKKyAgICAgICAgICAgIHRoaXMuX3NreWJveE1hdGVy
aWFsID0gbmV3IF9NYXRlcmlhbHNfQmFja2dyb3VuZF9iYWNrZ3JvdW5kTWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkJhY2tncm91bmRNYXRlcmlhbCJdKCJCYWNrZ3JvdW5k
U2t5Ym94TWF0ZXJpYWwiLCB0aGlzLl9zY2VuZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
c2t5Ym94TWF0ZXJpYWwudXNlUkdCQ29sb3IgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc2t5Ym94
TWF0ZXJpYWwucHJpbWFyeUNvbG9yID0gdGhpcy5fb3B0aW9ucy5za3lib3hDb2xvcjsKKyAgICAg
ICAgdGhpcy5fc2t5Ym94TWF0ZXJpYWwuZW5hYmxlTm9pc2UgPSB0cnVlOworICAgICAgICB0aGlz
Ll9za3lib3gubWF0ZXJpYWwgPSB0aGlzLl9za3lib3hNYXRlcmlhbDsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFNldHVwIHRoZSBza3lib3ggcmVmbGVjdGlvbiB0ZXh0dXJlIGFjY29yZGluZyB0
byB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuCisgICAgICovCisgICAgRW52aXJvbm1lbnRIZWxwZXIu
cHJvdG90eXBlLl9zZXR1cFNreWJveFJlZmxlY3Rpb25UZXh0dXJlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICBpZiAoIXRoaXMuX3NreWJveE1hdGVyaWFsKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3NreWJveFRleHR1cmUpIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5za3lib3hU
ZXh0dXJlIGluc3RhbmNlb2YgX01hdGVyaWFsc19UZXh0dXJlc19iYXNlVGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJCYXNlVGV4dHVyZSJdKSB7CisgICAgICAgICAgICB0aGlz
Ll9za3lib3hNYXRlcmlhbC5yZWZsZWN0aW9uVGV4dHVyZSA9IHRoaXMuX29wdGlvbnMuc2t5Ym94
VGV4dHVyZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9z
a3lib3hUZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfY3ViZVRleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ3ViZVRleHR1cmUiXSh0aGlzLl9vcHRpb25zLnNreWJv
eFRleHR1cmUsIHRoaXMuX3NjZW5lLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1
bmRlZmluZWQsIHRoaXMuX2Vycm9ySGFuZGxlcik7CisgICAgICAgIHRoaXMuX3NreWJveFRleHR1
cmUuY29vcmRpbmF0ZXNNb2RlID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIlRleHR1cmUiXS5TS1lCT1hfTU9ERTsKKyAgICAgICAgdGhp
cy5fc2t5Ym94VGV4dHVyZS5nYW1tYVNwYWNlID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3NreWJv
eE1hdGVyaWFsLnJlZmxlY3Rpb25UZXh0dXJlID0gdGhpcy5fc2t5Ym94VGV4dHVyZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIERpc3Bvc2UgYWxsIHRoZSBlbGVtZW50cyBjcmVhdGVkIGJ5IHRo
ZSBIZWxwZXIuCisgICAgICovCisgICAgRW52aXJvbm1lbnRIZWxwZXIucHJvdG90eXBlLmRpc3Bv
c2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9ncm91bmRNYXRlcmlhbCkgewor
ICAgICAgICAgICAgdGhpcy5fZ3JvdW5kTWF0ZXJpYWwuZGlzcG9zZSh0cnVlLCB0cnVlKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc2t5Ym94TWF0ZXJpYWwpIHsKKyAgICAgICAgICAg
IHRoaXMuX3NreWJveE1hdGVyaWFsLmRpc3Bvc2UodHJ1ZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fcm9vdE1lc2guZGlzcG9zZShmYWxzZSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBEZWZhdWx0IGdyb3VuZCB0ZXh0dXJlIFVSTC4KKyAgICAgKi8KKyAgICBFbnZpcm9ubWVu
dEhlbHBlci5fZ3JvdW5kVGV4dHVyZUNETlVybCA9ICJodHRwczovL2Fzc2V0cy5iYWJ5bG9uanMu
Y29tL2Vudmlyb25tZW50cy9iYWNrZ3JvdW5kR3JvdW5kLnBuZyI7CisgICAgLyoqCisgICAgICog
RGVmYXVsdCBza3lib3ggdGV4dHVyZSBVUkwuCisgICAgICovCisgICAgRW52aXJvbm1lbnRIZWxw
ZXIuX3NreWJveFRleHR1cmVDRE5VcmwgPSAiaHR0cHM6Ly9hc3NldHMuYmFieWxvbmpzLmNvbS9l
bnZpcm9ubWVudHMvYmFja2dyb3VuZFNreWJveC5kZHMiOworICAgIC8qKgorICAgICAqIERlZmF1
bHQgZW52aXJvbm1lbnQgdGV4dHVyZSBVUkwuCisgICAgICovCisgICAgRW52aXJvbm1lbnRIZWxw
ZXIuX2Vudmlyb25tZW50VGV4dHVyZUNETlVybCA9ICJodHRwczovL2Fzc2V0cy5iYWJ5bG9uanMu
Y29tL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudFNwZWN1bGFyLmVudiI7CisgICAgcmV0dXJuIEVu
dmlyb25tZW50SGVscGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9IZWxw
ZXJzL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9IZWxwZXJzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IEVudmlyb25tZW50SGVscGVyLCBQaG90b0RvbWUsIF9mb3Jj
ZVNjZW5lSGVscGVyc1RvQnVuZGxlLCBWaWRlb0RvbWUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lbnZpcm9ubWVudEhlbHBlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lbnZpcm9ubWVudEhlbHBl
ciAqLyAiLi9IZWxwZXJzL2Vudmlyb25tZW50SGVscGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkVudmlyb25tZW50SGVscGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZW52aXJvbm1lbnRIZWxw
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW52aXJvbm1lbnRIZWxwZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGhvdG9Eb21lX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bob3RvRG9tZSAqLyAiLi9I
ZWxwZXJzL3Bob3RvRG9tZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaG90b0RvbWUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9waG90b0RvbWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
UGhvdG9Eb21lIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lSGVscGVy
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9zY2VuZUhlbHBlcnMgKi8gIi4vSGVscGVycy9zY2VuZUhlbHBlcnMudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiX2ZvcmNlU2NlbmVIZWxwZXJzVG9CdW5kbGUiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9zY2VuZUhlbHBlcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siX2ZvcmNlU2NlbmVI
ZWxwZXJzVG9CdW5kbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdmlkZW9E
b21lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL3ZpZGVvRG9tZSAqLyAiLi9IZWxwZXJzL3ZpZGVvRG9tZS50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJWaWRlb0RvbWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92aWRlb0RvbWVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVmlkZW9Eb21lIl07IH0pOworCisKKworCisKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vSGVscGVycy9waG90b0RvbWUudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9IZWxwZXJzL3Bob3RvRG9tZS50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogUGhvdG9Eb21lICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBob3Rv
RG9tZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGhvdG9Eb21lOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL29i
c2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01lc2hlc190cmFuc2Zvcm1Ob2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvdHJhbnNmb3JtTm9kZSAqLyAiLi9N
ZXNoZXMvdHJhbnNmb3JtTm9kZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNo
ZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0
dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19CYWNrZ3JvdW5kX2JhY2tncm91bmRNYXRl
cmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWF0ZXJpYWxzL0JhY2tncm91bmQvYmFja2dyb3VuZE1hdGVyaWFsICovICIuL01hdGVy
aWFscy9CYWNrZ3JvdW5kL2JhY2tncm91bmRNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL0J1aWxkZXJz
L3NwaGVyZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3NwaGVyZUJ1aWxkZXIudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgu
dmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisKKworCisKKworCisKKworLyoq
CisgKiBEaXNwbGF5IGEgMzYwIGRlZ3JlZSBwaG90byBvbiBhbiBhcHByb3hpbWF0ZWx5IHNwaGVy
aWNhbCBzdXJmYWNlLCB1c2VmdWwgZm9yIFZSIGFwcGxpY2F0aW9ucyBvciBza3lib3hlcy4KKyAq
IEFzIGEgc3ViY2xhc3Mgb2YgVHJhbnNmb3JtTm9kZSwgdGhpcyBhbGxvdyBwYXJlbnRpbmcgdG8g
dGhlIGNhbWVyYSB3aXRoIGRpZmZlcmVudCBsb2NhdGlvbnMgaW4gdGhlIHNjZW5lLgorICogVGhp
cyBjbGFzcyBhY2hpZXZlcyBpdHMgZWZmZWN0IHdpdGggYSBUZXh0dXJlIGFuZCBhIGNvcnJlY3Rs
eSBjb25maWd1cmVkIEJhY2tncm91bmRNYXRlcmlhbCBvbiBhbiBpbnZlcnRlZCBzcGhlcmUuCisg
KiBQb3RlbnRpYWwgYWRkaXRpb25zIHRvIHRoaXMgaGVscGVyIGluY2x1ZGUgem9vbSBhbmQgYW5k
IG5vbi1pbmZpbml0ZSBkaXN0YW5jZSByZW5kZXJpbmcgZWZmZWN0cy4KKyAqLwordmFyIFBob3Rv
RG9tZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShQaG90b0RvbWUsIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYW5kIHBh
c3MgdGhyb3VnaCB0aGUgcGFyYW1ldGVycyB0byB0aGUgcmVsZXZhbnQgY2xhc3NlcywgVGV4dHVy
ZSwgU3RhbmRhcmRNYXRlcmlhbCwgYW5kIE1lc2guCisgICAgICogQHBhcmFtIG5hbWUgRWxlbWVu
dCdzIG5hbWUsIGNoaWxkIGVsZW1lbnRzIHdpbGwgYXBwZW5kIHN1ZmZpeGVzIGZvciB0aGVpciBv
d24gbmFtZXMuCisgICAgICogQHBhcmFtIHVybHNPZlBob3RvIGRlZmluZXMgdGhlIHVybCBvZiB0
aGUgcGhvdG8gdG8gZGlzcGxheQorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgYW4gb2Jq
ZWN0IGNvbnRhaW5pbmcgb3B0aW9uYWwgb3IgZXhwb3NlZCBzdWIgZWxlbWVudCBwcm9wZXJ0aWVz
CisgICAgICogQHBhcmFtIG9uRXJyb3IgZGVmaW5lcyBhIGNhbGxiYWNrIGNhbGxlZCB3aGVuIGFu
IGVycm9yIG9jY3VyZWQgd2hpbGUgbG9hZGluZyB0aGUgdGV4dHVyZQorICAgICAqLworICAgIGZ1
bmN0aW9uIFBob3RvRG9tZShuYW1lLCB1cmxPZlBob3RvLCBvcHRpb25zLCBzY2VuZSwgb25FcnJv
cikgeworICAgICAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBudWxsOyB9
CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0
aGlzOworICAgICAgICBfdGhpcy5fdXNlRGlyZWN0TWFwcGluZyA9IGZhbHNlOworICAgICAgICAv
KioKKyAgICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiBhbiBlcnJvciBvY2N1cmVkIHdo
aWxlIGxvYWRpbmcgdGhlIDM2MCBpbWFnZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25M
b2FkRXJyb3JPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIF90aGlzLl9pbWFnZU1vZGUg
PSBQaG90b0RvbWUuTU9ERV9NT05PU0NPUElDOworICAgICAgICBfdGhpcy5fb25CZWZvcmVDYW1l
cmFSZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIC8vIHNldCBkZWZhdWx0cyBhbmQgbWFu
YWdlIHZhbHVlcworICAgICAgICBuYW1lID0gbmFtZSB8fCAicGhvdG9Eb21lIjsKKyAgICAgICAg
b3B0aW9ucy5yZXNvbHV0aW9uID0gKE1hdGguYWJzKG9wdGlvbnMucmVzb2x1dGlvbikgfCAwKSB8
fCAzMjsKKyAgICAgICAgb3B0aW9ucy5zaXplID0gTWF0aC5hYnMob3B0aW9ucy5zaXplKSB8fCAo
c2NlbmUuYWN0aXZlQ2FtZXJhID8gc2NlbmUuYWN0aXZlQ2FtZXJhLm1heFogKiAwLjQ4IDogMTAw
MCk7CisgICAgICAgIGlmIChvcHRpb25zLnVzZURpcmVjdE1hcHBpbmcgPT09IHVuZGVmaW5lZCkg
eworICAgICAgICAgICAgX3RoaXMuX3VzZURpcmVjdE1hcHBpbmcgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX3RoaXMuX3VzZURpcmVjdE1hcHBpbmcgPSBv
cHRpb25zLnVzZURpcmVjdE1hcHBpbmc7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdGlvbnMu
ZmFjZUZvcndhcmQgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgb3B0aW9ucy5mYWNlRm9y
d2FyZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgX3RoaXMuX3NldFJlYWR5KGZhbHNlKTsK
KyAgICAgICAgLy8gY3JlYXRlCisgICAgICAgIHZhciBtYXRlcmlhbCA9IF90aGlzLl9tYXRlcmlh
bCA9IG5ldyBfTWF0ZXJpYWxzX0JhY2tncm91bmRfYmFja2dyb3VuZE1hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIkJhY2tncm91bmRNYXRlcmlhbCJdKG5hbWUgKyAiX21hdGVy
aWFsIiwgc2NlbmUpOworICAgICAgICBfdGhpcy5fbWVzaCA9IF9NZXNoZXNfbWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJNZXNoIl0uQ3JlYXRlU3BoZXJlKG5hbWUgKyAiX21lc2gi
LCBvcHRpb25zLnJlc29sdXRpb24sIG9wdGlvbnMuc2l6ZSwgc2NlbmUsIGZhbHNlLCBfTWVzaGVz
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWVzaCJdLkJBQ0tTSURFKTsKKyAg
ICAgICAgLy8gY29uZmlndXJlIG1hdGVyaWFsCisgICAgICAgIG1hdGVyaWFsLm9wYWNpdHlGcmVz
bmVsID0gZmFsc2U7CisgICAgICAgIG1hdGVyaWFsLnVzZUVxdWlyZWN0YW5ndWxhckZPViA9IHRy
dWU7CisgICAgICAgIG1hdGVyaWFsLmZvdk11bHRpcGxpZXIgPSAxLjA7CisgICAgICAgIF90aGlz
LnBob3RvVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siVGV4dHVyZSJdKHVybE9mUGhvdG8sIHNjZW5lLCB0cnVlLCAh
X3RoaXMuX3VzZURpcmVjdE1hcHBpbmcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAo
bWVzc2FnZSwgZXhjZXB0aW9uKSB7CisgICAgICAgICAgICBfdGhpcy5vbkxvYWRFcnJvck9ic2Vy
dmFibGUubm90aWZ5T2JzZXJ2ZXJzKG1lc3NhZ2UgfHwgIlVua25vd24gZXJyb3Igb2NjdXJlZCIp
OworICAgICAgICAgICAgaWYgKG9uRXJyb3IpIHsKKyAgICAgICAgICAgICAgICBvbkVycm9yKG1l
c3NhZ2UsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBf
dGhpcy5waG90b1RleHR1cmUub25Mb2FkT2JzZXJ2YWJsZS5hZGRPbmNlKGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIF90aGlzLl9zZXRSZWFkeSh0cnVlKTsKKyAgICAgICAgfSk7CisgICAgICAg
IC8vIGNvbmZpZ3VyZSBtZXNoCisgICAgICAgIF90aGlzLl9tZXNoLm1hdGVyaWFsID0gbWF0ZXJp
YWw7CisgICAgICAgIF90aGlzLl9tZXNoLnBhcmVudCA9IF90aGlzOworICAgICAgICAvLyBJbml0
aWFsIHJvdGF0aW9uCisgICAgICAgIGlmIChvcHRpb25zLmZhY2VGb3J3YXJkICYmIHNjZW5lLmFj
dGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHNjZW5lLmFjdGl2ZUNhbWVy
YTsKKyAgICAgICAgICAgIHZhciBmb3J3YXJkID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIlZlY3RvcjMiXS5Gb3J3YXJkKCk7CisgICAgICAgICAgICB2
YXIgZGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwoZm9yd2FyZCwgY2FtZXJhLmdldFZpZXdN
YXRyaXgoKSk7CisgICAgICAgICAgICBkaXJlY3Rpb24ubm9ybWFsaXplKCk7CisgICAgICAgICAg
ICBfdGhpcy5yb3RhdGlvbi55ID0gTWF0aC5hY29zKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZWN0b3IzIl0uRG90KGZvcndhcmQsIGRpcmVjdGlvbikp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFBob3RvRG9tZS5wcm90b3R5cGUsICJwaG90b1RleHR1cmUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHRleHR1cmUgYmVpbmcgZGlzcGxh
eWVkIG9uIHRoZSBzcGhlcmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bob3RvVGV4dHVyZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9waG90
b1RleHR1cmUgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fcGhvdG9UZXh0dXJlID0gdmFsdWU7CisgICAgICAgICAg
ICBpZiAodGhpcy5fdXNlRGlyZWN0TWFwcGluZykgeworICAgICAgICAgICAgICAgIHRoaXMuX3Bo
b3RvVGV4dHVyZS53cmFwVSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAg
ICAgICAgICAgdGhpcy5fcGhvdG9UZXh0dXJlLndyYXBWID0gX01hdGVyaWFsc19UZXh0dXJlc190
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXS5DTEFNUF9BRERS
RVNTTU9ERTsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXRlcmlhbC5kaWZmdXNlVGV4dHVyZSA9
IHRoaXMuX3Bob3RvVGV4dHVyZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIHRoaXMuX3Bob3RvVGV4dHVyZS5jb29yZGluYXRlc01vZGUgPSBfTWF0
ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGV4
dHVyZSJdLkZJWEVEX0VRVUlSRUNUQU5HVUxBUl9NSVJST1JFRF9NT0RFOyAvLyBtYXRjaGVzIG9y
aWVudGF0aW9uCisgICAgICAgICAgICAgICAgdGhpcy5fcGhvdG9UZXh0dXJlLndyYXBWID0gX01h
dGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRl
eHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXRlcmlh
bC5yZWZsZWN0aW9uVGV4dHVyZSA9IHRoaXMuX3Bob3RvVGV4dHVyZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBob3RvRG9tZS5w
cm90b3R5cGUsICJmb3ZNdWx0aXBsaWVyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhl
IGN1cnJlbnQgZm92KGZpZWxkIG9mIHZpZXcpIG11bHRpcGxpZXIsIDAuMCAtIDIuMC4gRGVmYXVs
dHMgdG8gMS4wLiBMb3dlciB2YWx1ZXMgInpvb20gaW4iIGFuZCBoaWdoZXIgdmFsdWVzICJ6b29t
IG91dCIuCisgICAgICAgICAqIEFsc28gc2VlIHRoZSBvcHRpb25zLnJlc29sdXRpb24gcHJvcGVy
dHkuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9tYXRlcmlhbC5mb3ZNdWx0aXBsaWVyOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbWF0ZXJpYWwuZm92
TXVsdGlwbGllciA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoUGhvdG9Eb21lLnByb3RvdHlwZSwgImltYWdlTW9kZSIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgb3Igc2V0IHRoZSBjdXJyZW50IHZpZGVvIG1vZGUgZm9yIHRoZSB2
aWRlby4gSXQgY2FuIGJlOgorICAgICAgICAgKiAqIFBob3RvRG9tZS5NT0RFX01PTk9TQ09QSUMg
OiBEZWZpbmUgdGhlIGltYWdlIGFzIGEgTW9ub3Njb3BpYyBwYW5vcmFtaWMgMzYwIGltYWdlLgor
ICAgICAgICAgKiAqIFBob3RvRG9tZS5NT0RFX1RPUEJPVFRPTSAgOiBEZWZpbmUgdGhlIGltYWdl
IGFzIGEgU3RlcmVvc2NvcGljIFRvcEJvdHRvbS9PdmVyVW5kZXIgcGFub3JhbWljIDM2MCBpbWFn
ZS4KKyAgICAgICAgICogKiBQaG90b0RvbWUuTU9ERV9TSURFQllTSURFIDogRGVmaW5lIHRoZSBp
bWFnZSBhcyBhIFN0ZXJlb3Njb3BpYyBTaWRlIGJ5IFNpZGUgcGFub3JhbWljIDM2MCBpbWFnZS4K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2ltYWdlTW9kZTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pbWFnZU1vZGUgPT09IHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
Y2hhbmdlSW1hZ2VNb2RlKHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgUGhvdG9Eb21l
LnByb3RvdHlwZS5fY2hhbmdlSW1hZ2VNb2RlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMuX3NjZW5lLm9uQmVmb3JlQ2FtZXJhUmVu
ZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZlcik7
CisgICAgICAgIHRoaXMuX2ltYWdlTW9kZSA9IHZhbHVlOworICAgICAgICAvLyBEZWZhdWx0IFNl
dHVwIGFuZCBSZXNldC4KKyAgICAgICAgdGhpcy5fcGhvdG9UZXh0dXJlLnVTY2FsZSA9IDE7Cisg
ICAgICAgIHRoaXMuX3Bob3RvVGV4dHVyZS52U2NhbGUgPSAxOworICAgICAgICB0aGlzLl9waG90
b1RleHR1cmUudU9mZnNldCA9IDA7CisgICAgICAgIHRoaXMuX3Bob3RvVGV4dHVyZS52T2Zmc2V0
ID0gMDsKKyAgICAgICAgc3dpdGNoICh2YWx1ZSkgeworICAgICAgICAgICAgY2FzZSBQaG90b0Rv
bWUuTU9ERV9TSURFQllTSURFOgorICAgICAgICAgICAgICAgIHRoaXMuX3Bob3RvVGV4dHVyZS51
U2NhbGUgPSAwLjU7CisgICAgICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVDYW1lcmFSZW5kZXJP
YnNlcnZlciA9IHRoaXMuX3NjZW5lLm9uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5hZGQo
ZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcGhvdG9UZXh0
dXJlLnVPZmZzZXQgPSBjYW1lcmEuaXNSaWdodENhbWVyYSA/IDAuNSA6IDAuMDsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUGhv
dG9Eb21lLk1PREVfVE9QQk9UVE9NOgorICAgICAgICAgICAgICAgIHRoaXMuX3Bob3RvVGV4dHVy
ZS52U2NhbGUgPSAwLjU7CisgICAgICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVDYW1lcmFSZW5k
ZXJPYnNlcnZlciA9IHRoaXMuX3NjZW5lLm9uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5h
ZGQoZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcGhvdG9U
ZXh0dXJlLnZPZmZzZXQgPSBjYW1lcmEuaXNSaWdodENhbWVyYSA/IDAuNSA6IDAuMDsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogUmVsZWFzZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlz
IG5vZGUuCisgICAgICogQHBhcmFtIGRvTm90UmVjdXJzZSBTZXQgdG8gdHJ1ZSB0byBub3QgcmVj
dXJzZSBpbnRvIGVhY2ggY2hpbGRyZW4gKHJlY3Vyc2UgaW50byBlYWNoIGNoaWxkcmVuIGJ5IGRl
ZmF1bHQpCisgICAgICogQHBhcmFtIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzIFNldCB0byB0
cnVlIHRvIGFsc28gZGlzcG9zZSByZWZlcmVuY2VkIG1hdGVyaWFscyBhbmQgdGV4dHVyZXMgKGZh
bHNlIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgUGhvdG9Eb21lLnByb3RvdHlwZS5kaXNwb3Nl
ID0gZnVuY3Rpb24gKGRvTm90UmVjdXJzZSwgZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMpIHsK
KyAgICAgICAgaWYgKGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzID09PSB2b2lkIDApIHsgZGlz
cG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMgPSBmYWxzZTsgfQorICAgICAgICB0aGlzLl9waG90b1Rl
eHR1cmUuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9tZXNoLmRpc3Bvc2UoKTsKKyAgICAgICAg
dGhpcy5fbWF0ZXJpYWwuZGlzcG9zZSgpOworICAgICAgICB0aGlzLm9uTG9hZEVycm9yT2JzZXJ2
YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLl9zY2VuZS5vbkJlZm9yZUNhbWVyYVJlbmRlck9i
c2VydmFibGUucmVtb3ZlKHRoaXMuX29uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIpOworICAg
ICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzLCBkb05vdFJlY3Vyc2UsIGRp
c3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmlu
ZSB0aGUgaW1hZ2UgYXMgYSBNb25vc2NvcGljIHBhbm9yYW1pYyAzNjAgaW1hZ2UuCisgICAgICov
CisgICAgUGhvdG9Eb21lLk1PREVfTU9OT1NDT1BJQyA9IDA7CisgICAgLyoqCisgICAgICogRGVm
aW5lIHRoZSBpbWFnZSBhcyBhIFN0ZXJlb3Njb3BpYyBUb3BCb3R0b20vT3ZlclVuZGVyIHBhbm9y
YW1pYyAzNjAgaW1hZ2UuCisgICAgICovCisgICAgUGhvdG9Eb21lLk1PREVfVE9QQk9UVE9NID0g
MTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmUgdGhlIGltYWdlIGFzIGEgU3RlcmVvc2NvcGljIFNp
ZGUgYnkgU2lkZSBwYW5vcmFtaWMgMzYwIGltYWdlLgorICAgICAqLworICAgIFBob3RvRG9tZS5N
T0RFX1NJREVCWVNJREUgPSAyOworICAgIHJldHVybiBQaG90b0RvbWU7Cit9KF9NZXNoZXNfdHJh
bnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUcmFuc2Zvcm1Ob2RlIl0p
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9IZWxwZXJzL3NjZW5lSGVscGVycy50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0hlbHBl
cnMvc2NlbmVIZWxwZXJzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBfZm9yY2VTY2VuZUhlbHBlcnNUb0J1bmRsZSAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfZm9yY2VTY2VuZUhlbHBlcnNU
b0J1bmRsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZvcmNlU2NlbmVIZWxwZXJzVG9CdW5kbGU7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIg
Ki8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2gg
Ki8gIi4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJp
YWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01h
dGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbCAq
LyAiLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRlcmlhbHNfUEJSX3Bick1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvUEJSL3Bick1hdGVy
aWFsICovICIuL01hdGVyaWFscy9QQlIvcGJyTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTGlnaHRzX2hlbWlzcGhlcmljTGlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0xpZ2h0cy9oZW1pc3BoZXJpY0xp
Z2h0ICovICIuL0xpZ2h0cy9oZW1pc3BoZXJpY0xpZ2h0LnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2Vudmlyb25tZW50SGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Vudmlyb25tZW50SGVscGVyICovICIuL0hlbHBl
cnMvZW52aXJvbm1lbnRIZWxwZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2Ft
ZXJhc19mcmVlQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL2ZyZWVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9mcmVlQ2Ft
ZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0NhbWVyYXNfYXJjUm90YXRlQ2Ft
ZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1lcmEgKi8gIi4vQ2FtZXJhcy9hcmNSb3RhdGVDYW1l
cmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19WUl92ckV4cGVyaWVu
Y2VIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9DYW1lcmFzL1ZSL3ZyRXhwZXJpZW5jZUhlbHBlciAqLyAiLi9DYW1lcmFzL1ZS
L3ZyRXhwZXJpZW5jZUhlbHBlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfVGV4dHVyZXNfTG9hZGVyc19kZHNUZXh0dXJlTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1
cmVzL0xvYWRlcnMvZGRzVGV4dHVyZUxvYWRlciAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvTG9h
ZGVycy9kZHNUZXh0dXJlTG9hZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19UZXh0dXJlc19Mb2FkZXJzX2VudlRleHR1cmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4
dHVyZXMvTG9hZGVycy9lbnZUZXh0dXJlTG9hZGVyICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9M
b2FkZXJzL2VudlRleHR1cmVMb2FkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX1RleHR1cmVzX0xvYWRlcnNfa3R4VGV4dHVyZUxvYWRlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9U
ZXh0dXJlcy9Mb2FkZXJzL2t0eFRleHR1cmVMb2FkZXIgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVz
L0xvYWRlcnMva3R4VGV4dHVyZUxvYWRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NZXNoZXNfQnVpbGRlcnNfYm94QnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9CdWlsZGVycy9ib3hCdWlsZGVy
ICovICIuL01lc2hlcy9CdWlsZGVycy9ib3hCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0NhbWVyYXNfWFJfd2ViWFJEZWZhdWx0RXhwZXJpZW5jZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NhbWVyYXMvWFIv
d2ViWFJEZWZhdWx0RXhwZXJpZW5jZSAqLyAiLi9DYW1lcmFzL1hSL3dlYlhSRGVmYXVsdEV4cGVy
aWVuY2UudHMiKTsKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisvKiogQGhpZGRl
biAqLwordmFyIF9mb3JjZVNjZW5lSGVscGVyc1RvQnVuZGxlID0gdHJ1ZTsKK19zY2VuZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2VuZSJdLnByb3RvdHlwZS5jcmVhdGVEZWZhdWx0
TGlnaHQgPSBmdW5jdGlvbiAocmVwbGFjZSkgeworICAgIGlmIChyZXBsYWNlID09PSB2b2lkIDAp
IHsgcmVwbGFjZSA9IGZhbHNlOyB9CisgICAgLy8gRGlzcG9zZSBleGlzdGluZyBsaWdodCBpbiBy
ZXBsYWNlIG1vZGUuCisgICAgaWYgKHJlcGxhY2UpIHsKKyAgICAgICAgaWYgKHRoaXMubGlnaHRz
KSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlnaHRzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5saWdodHNbaV0uZGlzcG9zZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8vIExpZ2h0CisgICAgaWYgKHRoaXMubGln
aHRzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICBuZXcgX0xpZ2h0c19oZW1pc3BoZXJpY0xpZ2h0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkhlbWlzcGhlcmljTGlnaHQiXSgiZGVmYXVs
dCBsaWdodCIsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJWZWN0b3IzIl0uVXAoKSwgdGhpcyk7CisgICAgfQorfTsKK19zY2VuZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJTY2VuZSJdLnByb3RvdHlwZS5jcmVhdGVEZWZhdWx0Q2FtZXJhID0g
ZnVuY3Rpb24gKGNyZWF0ZUFyY1JvdGF0ZUNhbWVyYSwgcmVwbGFjZSwgYXR0YWNoQ2FtZXJhQ29u
dHJvbHMpIHsKKyAgICBpZiAoY3JlYXRlQXJjUm90YXRlQ2FtZXJhID09PSB2b2lkIDApIHsgY3Jl
YXRlQXJjUm90YXRlQ2FtZXJhID0gZmFsc2U7IH0KKyAgICBpZiAocmVwbGFjZSA9PT0gdm9pZCAw
KSB7IHJlcGxhY2UgPSBmYWxzZTsgfQorICAgIGlmIChhdHRhY2hDYW1lcmFDb250cm9scyA9PT0g
dm9pZCAwKSB7IGF0dGFjaENhbWVyYUNvbnRyb2xzID0gZmFsc2U7IH0KKyAgICAvLyBEaXNwb3Nl
IGV4aXN0aW5nIGNhbWVyYSBpbiByZXBsYWNlIG1vZGUuCisgICAgaWYgKHJlcGxhY2UpIHsKKyAg
ICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICB0aGlzLmFjdGl2ZUNh
bWVyYS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYSA9IG51bGw7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgLy8gQ2FtZXJhCisgICAgaWYgKCF0aGlzLmFjdGl2ZUNhbWVy
YSkgeworICAgICAgICB2YXIgd29ybGRFeHRlbmRzID0gdGhpcy5nZXRXb3JsZEV4dGVuZHMoKTsK
KyAgICAgICAgdmFyIHdvcmxkU2l6ZSA9IHdvcmxkRXh0ZW5kcy5tYXguc3VidHJhY3Qod29ybGRF
eHRlbmRzLm1pbik7CisgICAgICAgIHZhciB3b3JsZENlbnRlciA9IHdvcmxkRXh0ZW5kcy5taW4u
YWRkKHdvcmxkU2l6ZS5zY2FsZSgwLjUpKTsKKyAgICAgICAgdmFyIGNhbWVyYTsKKyAgICAgICAg
dmFyIHJhZGl1cyA9IHdvcmxkU2l6ZS5sZW5ndGgoKSAqIDEuNTsKKyAgICAgICAgLy8gZW1wdHkg
c2NlbmUgc2NlbmFyaW8hCisgICAgICAgIGlmICghaXNGaW5pdGUocmFkaXVzKSkgeworICAgICAg
ICAgICAgcmFkaXVzID0gMTsKKyAgICAgICAgICAgIHdvcmxkQ2VudGVyLmNvcHlGcm9tRmxvYXRz
KDAsIDAsIDApOworICAgICAgICB9CisgICAgICAgIGlmIChjcmVhdGVBcmNSb3RhdGVDYW1lcmEp
IHsKKyAgICAgICAgICAgIHZhciBhcmNSb3RhdGVDYW1lcmEgPSBuZXcgX0NhbWVyYXNfYXJjUm90
YXRlQ2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJBcmNSb3RhdGVDYW1lcmEi
XSgiZGVmYXVsdCBjYW1lcmEiLCAtKE1hdGguUEkgLyAyKSwgTWF0aC5QSSAvIDIsIHJhZGl1cywg
d29ybGRDZW50ZXIsIHRoaXMpOworICAgICAgICAgICAgYXJjUm90YXRlQ2FtZXJhLmxvd2VyUmFk
aXVzTGltaXQgPSByYWRpdXMgKiAwLjAxOworICAgICAgICAgICAgYXJjUm90YXRlQ2FtZXJhLndo
ZWVsUHJlY2lzaW9uID0gMTAwIC8gcmFkaXVzOworICAgICAgICAgICAgY2FtZXJhID0gYXJjUm90
YXRlQ2FtZXJhOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGZy
ZWVDYW1lcmEgPSBuZXcgX0NhbWVyYXNfZnJlZUNhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJGcmVlQ2FtZXJhIl0oImRlZmF1bHQgY2FtZXJhIiwgbmV3IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0od29ybGRDZW50ZXIu
eCwgd29ybGRDZW50ZXIueSwgLXJhZGl1cyksIHRoaXMpOworICAgICAgICAgICAgZnJlZUNhbWVy
YS5zZXRUYXJnZXQod29ybGRDZW50ZXIpOworICAgICAgICAgICAgY2FtZXJhID0gZnJlZUNhbWVy
YTsKKyAgICAgICAgfQorICAgICAgICBjYW1lcmEubWluWiA9IHJhZGl1cyAqIDAuMDE7CisgICAg
ICAgIGNhbWVyYS5tYXhaID0gcmFkaXVzICogMTAwMDsKKyAgICAgICAgY2FtZXJhLnNwZWVkID0g
cmFkaXVzICogMC4yOworICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYSA9IGNhbWVyYTsKKyAgICAg
ICAgdmFyIGNhbnZhcyA9IHRoaXMuZ2V0RW5naW5lKCkuZ2V0UmVuZGVyaW5nQ2FudmFzKCk7Cisg
ICAgICAgIGlmIChhdHRhY2hDYW1lcmFDb250cm9scyAmJiBjYW52YXMpIHsKKyAgICAgICAgICAg
IGNhbWVyYS5hdHRhY2hDb250cm9sKGNhbnZhcyk7CisgICAgICAgIH0KKyAgICB9Cit9OworX3Nj
ZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lIl0ucHJvdG90eXBlLmNyZWF0
ZURlZmF1bHRDYW1lcmFPckxpZ2h0ID0gZnVuY3Rpb24gKGNyZWF0ZUFyY1JvdGF0ZUNhbWVyYSwg
cmVwbGFjZSwgYXR0YWNoQ2FtZXJhQ29udHJvbHMpIHsKKyAgICBpZiAoY3JlYXRlQXJjUm90YXRl
Q2FtZXJhID09PSB2b2lkIDApIHsgY3JlYXRlQXJjUm90YXRlQ2FtZXJhID0gZmFsc2U7IH0KKyAg
ICBpZiAocmVwbGFjZSA9PT0gdm9pZCAwKSB7IHJlcGxhY2UgPSBmYWxzZTsgfQorICAgIGlmIChh
dHRhY2hDYW1lcmFDb250cm9scyA9PT0gdm9pZCAwKSB7IGF0dGFjaENhbWVyYUNvbnRyb2xzID0g
ZmFsc2U7IH0KKyAgICB0aGlzLmNyZWF0ZURlZmF1bHRMaWdodChyZXBsYWNlKTsKKyAgICB0aGlz
LmNyZWF0ZURlZmF1bHRDYW1lcmEoY3JlYXRlQXJjUm90YXRlQ2FtZXJhLCByZXBsYWNlLCBhdHRh
Y2hDYW1lcmFDb250cm9scyk7Cit9OworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlNjZW5lIl0ucHJvdG90eXBlLmNyZWF0ZURlZmF1bHRTa3lib3ggPSBmdW5jdGlvbiAoZW52
aXJvbm1lbnRUZXh0dXJlLCBwYnIsIHNjYWxlLCBibHVyLCBzZXRHbG9iYWxFbnZUZXh0dXJlKSB7
CisgICAgaWYgKHBiciA9PT0gdm9pZCAwKSB7IHBiciA9IGZhbHNlOyB9CisgICAgaWYgKHNjYWxl
ID09PSB2b2lkIDApIHsgc2NhbGUgPSAxMDAwOyB9CisgICAgaWYgKGJsdXIgPT09IHZvaWQgMCkg
eyBibHVyID0gMDsgfQorICAgIGlmIChzZXRHbG9iYWxFbnZUZXh0dXJlID09PSB2b2lkIDApIHsg
c2V0R2xvYmFsRW52VGV4dHVyZSA9IHRydWU7IH0KKyAgICBpZiAoIWVudmlyb25tZW50VGV4dHVy
ZSkgeworICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
TG9nZ2VyIl0uV2FybigiQ2FuIG5vdCBjcmVhdGUgZGVmYXVsdCBza3lib3ggd2l0aG91dCBlbnZp
cm9ubWVudCB0ZXh0dXJlLiIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgaWYg
KHNldEdsb2JhbEVudlRleHR1cmUpIHsKKyAgICAgICAgaWYgKGVudmlyb25tZW50VGV4dHVyZSkg
eworICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudFRleHR1cmUgPSBlbnZpcm9ubWVudFRleHR1
cmU7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gU2t5Ym94CisgICAgdmFyIGhkclNreWJveCA9
IF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNZXNoIl0uQ3JlYXRl
Qm94KCJoZHJTa3lCb3giLCBzY2FsZSwgdGhpcyk7CisgICAgaWYgKHBicikgeworICAgICAgICB2
YXIgaGRyU2t5Ym94TWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFsc19QQlJfcGJyTWF0ZXJpYWxfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUEJSTWF0ZXJpYWwiXSgic2t5Qm94IiwgdGhpcyk7
CisgICAgICAgIGhkclNreWJveE1hdGVyaWFsLmJhY2tGYWNlQ3VsbGluZyA9IGZhbHNlOworICAg
ICAgICBoZHJTa3lib3hNYXRlcmlhbC5yZWZsZWN0aW9uVGV4dHVyZSA9IGVudmlyb25tZW50VGV4
dHVyZS5jbG9uZSgpOworICAgICAgICBpZiAoaGRyU2t5Ym94TWF0ZXJpYWwucmVmbGVjdGlvblRl
eHR1cmUpIHsKKyAgICAgICAgICAgIGhkclNreWJveE1hdGVyaWFsLnJlZmxlY3Rpb25UZXh0dXJl
LmNvb3JkaW5hdGVzTW9kZSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uU0tZQk9YX01PREU7CisgICAgICAgIH0KKyAg
ICAgICAgaGRyU2t5Ym94TWF0ZXJpYWwubWljcm9TdXJmYWNlID0gMS4wIC0gYmx1cjsKKyAgICAg
ICAgaGRyU2t5Ym94TWF0ZXJpYWwuZGlzYWJsZUxpZ2h0aW5nID0gdHJ1ZTsKKyAgICAgICAgaGRy
U2t5Ym94TWF0ZXJpYWwudHdvU2lkZWRMaWdodGluZyA9IHRydWU7CisgICAgICAgIGhkclNreWJv
eC5pbmZpbml0ZURpc3RhbmNlID0gdHJ1ZTsKKyAgICAgICAgaGRyU2t5Ym94Lm1hdGVyaWFsID0g
aGRyU2t5Ym94TWF0ZXJpYWw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB2YXIgc2t5Ym94
TWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIlN0YW5kYXJkTWF0ZXJpYWwiXSgic2t5Qm94IiwgdGhpcyk7CisgICAg
ICAgIHNreWJveE1hdGVyaWFsLmJhY2tGYWNlQ3VsbGluZyA9IGZhbHNlOworICAgICAgICBza3li
b3hNYXRlcmlhbC5yZWZsZWN0aW9uVGV4dHVyZSA9IGVudmlyb25tZW50VGV4dHVyZS5jbG9uZSgp
OworICAgICAgICBpZiAoc2t5Ym94TWF0ZXJpYWwucmVmbGVjdGlvblRleHR1cmUpIHsKKyAgICAg
ICAgICAgIHNreWJveE1hdGVyaWFsLnJlZmxlY3Rpb25UZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSA9
IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJUZXh0dXJlIl0uU0tZQk9YX01PREU7CisgICAgICAgIH0KKyAgICAgICAgc2t5Ym94TWF0ZXJp
YWwuZGlzYWJsZUxpZ2h0aW5nID0gdHJ1ZTsKKyAgICAgICAgaGRyU2t5Ym94LmluZmluaXRlRGlz
dGFuY2UgPSB0cnVlOworICAgICAgICBoZHJTa3lib3gubWF0ZXJpYWwgPSBza3lib3hNYXRlcmlh
bDsKKyAgICB9CisgICAgaGRyU2t5Ym94LmlzUGlja2FibGUgPSBmYWxzZTsKKyAgICByZXR1cm4g
aGRyU2t5Ym94OworfTsKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2Vu
ZSJdLnByb3RvdHlwZS5jcmVhdGVEZWZhdWx0RW52aXJvbm1lbnQgPSBmdW5jdGlvbiAob3B0aW9u
cykgeworICAgIGlmIChfZW52aXJvbm1lbnRIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siRW52aXJvbm1lbnRIZWxwZXIiXSkgeworICAgICAgICByZXR1cm4gbmV3IF9lbnZpcm9u
bWVudEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJFbnZpcm9ubWVudEhlbHBl
ciJdKG9wdGlvbnMsIHRoaXMpOworICAgIH0KKyAgICByZXR1cm4gbnVsbDsKK307Citfc2NlbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmUiXS5wcm90b3R5cGUuY3JlYXRlRGVm
YXVsdFZSRXhwZXJpZW5jZSA9IGZ1bmN0aW9uICh3ZWJWUk9wdGlvbnMpIHsKKyAgICBpZiAod2Vi
VlJPcHRpb25zID09PSB2b2lkIDApIHsgd2ViVlJPcHRpb25zID0ge307IH0KKyAgICByZXR1cm4g
bmV3IF9DYW1lcmFzX1ZSX3ZyRXhwZXJpZW5jZUhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfX1siVlJFeHBlcmllbmNlSGVscGVyIl0odGhpcywgd2ViVlJPcHRpb25zKTsKK307Citf
c2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmUiXS5wcm90b3R5cGUuY3Jl
YXRlRGVmYXVsdFhSRXhwZXJpZW5jZUFzeW5jID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICBy
ZXR1cm4gX0NhbWVyYXNfWFJfd2ViWFJEZWZhdWx0RXhwZXJpZW5jZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTZfX1siV2ViWFJEZWZhdWx0RXhwZXJpZW5jZSJdLkNyZWF0ZUFzeW5jKHRoaXMs
IG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKGhlbHBlcikgeworICAgICAgICByZXR1cm4gaGVscGVy
OworICAgIH0pOworfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vSGVscGVycy92aWRlb0Rv
bWUudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9I
ZWxwZXJzL3ZpZGVvRG9tZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogVmlkZW9Eb21lICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlZpZGVvRG9tZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVmlkZW9E
b21lOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVf
bW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWVzaGVzX3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy90cmFuc2Zvcm1Ob2RlICovICIuL01lc2hlcy90
cmFuc2Zvcm1Ob2RlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3Rl
eHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3ZpZGVvVGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxz
L1RleHR1cmVzL3ZpZGVvVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdmlkZW9UZXh0
dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19CYWNrZ3JvdW5k
X2JhY2tncm91bmRNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL0JhY2tncm91bmQvYmFja2dyb3VuZE1hdGVy
aWFsICovICIuL01hdGVyaWFscy9CYWNrZ3JvdW5kL2JhY2tncm91bmRNYXRlcmlhbC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfc3BoZXJlQnVpbGRlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWVzaGVzL0J1aWxkZXJzL3NwaGVyZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3NwaGVy
ZUJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGggKi8gIi4vTWF0aHMv
bWF0aC50cyIpOworCisKKworCisKKworCisKKworCisvKioKKyAqIERpc3BsYXkgYSAzNjAvMTgw
IGRlZ3JlZSB2aWRlbyBvbiBhbiBhcHByb3hpbWF0ZWx5IHNwaGVyaWNhbCBzdXJmYWNlLCB1c2Vm
dWwgZm9yIFZSIGFwcGxpY2F0aW9ucyBvciBza3lib3hlcy4KKyAqIEFzIGEgc3ViY2xhc3Mgb2Yg
VHJhbnNmb3JtTm9kZSwgdGhpcyBhbGxvdyBwYXJlbnRpbmcgdG8gdGhlIGNhbWVyYSBvciBtdWx0
aXBsZSB2aWRlb3Mgd2l0aCBkaWZmZXJlbnQgbG9jYXRpb25zIGluIHRoZSBzY2VuZS4KKyAqIFRo
aXMgY2xhc3MgYWNoaWV2ZXMgaXRzIGVmZmVjdCB3aXRoIGEgVmlkZW9UZXh0dXJlIGFuZCBhIGNv
cnJlY3RseSBjb25maWd1cmVkIEJhY2tncm91bmRNYXRlcmlhbCBvbiBhbiBpbnZlcnRlZCBzcGhl
cmUuCisgKiBQb3RlbnRpYWwgYWRkaXRpb25zIHRvIHRoaXMgaGVscGVyIGluY2x1ZGUgem9vbSBh
bmQgYW5kIG5vbi1pbmZpbml0ZSBkaXN0YW5jZSByZW5kZXJpbmcgZWZmZWN0cy4KKyAqLwordmFy
IFZpZGVvRG9tZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShWaWRlb0RvbWUsIF9z
dXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mg
YW5kIHBhc3MgdGhyb3VnaCB0aGUgcGFyYW1ldGVycyB0byB0aGUgcmVsZXZhbnQgY2xhc3Nlcywg
VmlkZW9UZXh0dXJlLCBTdGFuZGFyZE1hdGVyaWFsLCBhbmQgTWVzaC4KKyAgICAgKiBAcGFyYW0g
bmFtZSBFbGVtZW50J3MgbmFtZSwgY2hpbGQgZWxlbWVudHMgd2lsbCBhcHBlbmQgc3VmZml4ZXMg
Zm9yIHRoZWlyIG93biBuYW1lcy4KKyAgICAgKiBAcGFyYW0gdXJsc09yVmlkZW8gZGVmaW5lcyB0
aGUgdXJsKHMpIG9yIHRoZSB2aWRlbyBlbGVtZW50IHRvIHVzZQorICAgICAqIEBwYXJhbSBvcHRp
b25zIEFuIG9iamVjdCBjb250YWluaW5nIG9wdGlvbmFsIG9yIGV4cG9zZWQgc3ViIGVsZW1lbnQg
cHJvcGVydGllcworICAgICAqLworICAgIGZ1bmN0aW9uIFZpZGVvRG9tZShuYW1lLCB1cmxzT3JW
aWRlbywgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwo
dGhpcywgbmFtZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9oYWxmRG9tZSA9IGZh
bHNlOworICAgICAgICBfdGhpcy5fdXNlRGlyZWN0TWFwcGluZyA9IGZhbHNlOworICAgICAgICBf
dGhpcy5fdmlkZW9Nb2RlID0gVmlkZW9Eb21lLk1PREVfTU9OT1NDT1BJQzsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIE9iZXJzZXJ2ZXIgdXNlZCBpbiBTdGVyZW9zY29waWMgVlIgTW9kZS4KKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLl9vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2VydmVyID0g
bnVsbDsKKyAgICAgICAgc2NlbmUgPSBfdGhpcy5nZXRTY2VuZSgpOworICAgICAgICAvLyBzZXQg
ZGVmYXVsdHMgYW5kIG1hbmFnZSB2YWx1ZXMKKyAgICAgICAgbmFtZSA9IG5hbWUgfHwgInZpZGVv
RG9tZSI7CisgICAgICAgIG9wdGlvbnMucmVzb2x1dGlvbiA9IChNYXRoLmFicyhvcHRpb25zLnJl
c29sdXRpb24pIHwgMCkgfHwgMzI7CisgICAgICAgIG9wdGlvbnMuY2xpY2tUb1BsYXkgPSBCb29s
ZWFuKG9wdGlvbnMuY2xpY2tUb1BsYXkpOworICAgICAgICBvcHRpb25zLmF1dG9QbGF5ID0gb3B0
aW9ucy5hdXRvUGxheSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IEJvb2xlYW4ob3B0aW9ucy5hdXRv
UGxheSk7CisgICAgICAgIG9wdGlvbnMubG9vcCA9IG9wdGlvbnMubG9vcCA9PT0gdW5kZWZpbmVk
ID8gdHJ1ZSA6IEJvb2xlYW4ob3B0aW9ucy5sb29wKTsKKyAgICAgICAgb3B0aW9ucy5zaXplID0g
TWF0aC5hYnMob3B0aW9ucy5zaXplKSB8fCAoc2NlbmUuYWN0aXZlQ2FtZXJhID8gc2NlbmUuYWN0
aXZlQ2FtZXJhLm1heFogKiAwLjQ4IDogMTAwMCk7CisgICAgICAgIGlmIChvcHRpb25zLnVzZURp
cmVjdE1hcHBpbmcgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgX3RoaXMuX3VzZURpcmVj
dE1hcHBpbmcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
X3RoaXMuX3VzZURpcmVjdE1hcHBpbmcgPSBvcHRpb25zLnVzZURpcmVjdE1hcHBpbmc7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKG9wdGlvbnMuZmFjZUZvcndhcmQgPT09IHVuZGVmaW5lZCkgewor
ICAgICAgICAgICAgb3B0aW9ucy5mYWNlRm9yd2FyZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgX3RoaXMuX3NldFJlYWR5KGZhbHNlKTsKKyAgICAgICAgLy8gY3JlYXRlCisgICAgICAgIHZh
ciB0ZW1wT3B0aW9ucyA9IHsgbG9vcDogb3B0aW9ucy5sb29wLCBhdXRvUGxheTogb3B0aW9ucy5h
dXRvUGxheSwgYXV0b1VwZGF0ZVRleHR1cmU6IHRydWUsIHBvc3Rlcjogb3B0aW9ucy5wb3N0ZXIg
fTsKKyAgICAgICAgdmFyIG1hdGVyaWFsID0gX3RoaXMuX21hdGVyaWFsID0gbmV3IF9NYXRlcmlh
bHNfQmFja2dyb3VuZF9iYWNrZ3JvdW5kTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siQmFja2dyb3VuZE1hdGVyaWFsIl0obmFtZSArICJfbWF0ZXJpYWwiLCBzY2VuZSk7Cisg
ICAgICAgIHZhciB0ZXh0dXJlID0gX3RoaXMuX3ZpZGVvVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxz
X1RleHR1cmVzX3ZpZGVvVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWaWRl
b1RleHR1cmUiXShuYW1lICsgIl90ZXh0dXJlIiwgdXJsc09yVmlkZW8sIHNjZW5lLCBmYWxzZSwg
X3RoaXMuX3VzZURpcmVjdE1hcHBpbmcsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUZXh0dXJlIl0uVFJJTElORUFSX1NBTVBMSU5HTU9E
RSwgdGVtcE9wdGlvbnMpOworICAgICAgICBfdGhpcy5fbWVzaCA9IF9NZXNoZXNfbWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uQ3JlYXRlU3BoZXJlKG5hbWUgKyAiX21l
c2giLCBvcHRpb25zLnJlc29sdXRpb24sIG9wdGlvbnMuc2l6ZSwgc2NlbmUsIGZhbHNlLCBfTWVz
aGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdLkJBQ0tTSURFKTsK
KyAgICAgICAgdGV4dHVyZS5vbkxvYWRPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgX3RoaXMuX3NldFJlYWR5KHRydWUpOworICAgICAgICB9KTsKKyAgICAgICAg
Ly8gY29uZmlndXJlIG1hdGVyaWFsCisgICAgICAgIG1hdGVyaWFsLnVzZUVxdWlyZWN0YW5ndWxh
ckZPViA9IHRydWU7CisgICAgICAgIG1hdGVyaWFsLmZvdk11bHRpcGxpZXIgPSAxLjA7CisgICAg
ICAgIG1hdGVyaWFsLm9wYWNpdHlGcmVzbmVsID0gZmFsc2U7CisgICAgICAgIGlmIChfdGhpcy5f
dXNlRGlyZWN0TWFwcGluZykgeworICAgICAgICAgICAgdGV4dHVyZS53cmFwVSA9IF9NYXRlcmlh
bHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUZXh0dXJl
Il0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgICAgICB0ZXh0dXJlLndyYXBWID0gX01hdGVy
aWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRleHR1
cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgICAgIG1hdGVyaWFsLmRpZmZ1c2VUZXh0
dXJlID0gdGV4dHVyZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRl
eHR1cmUuY29vcmRpbmF0ZXNNb2RlID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRleHR1cmUiXS5GSVhFRF9FUVVJUkVDVEFOR1VMQVJf
TUlSUk9SRURfTU9ERTsgLy8gbWF0Y2hlcyBvcmllbnRhdGlvbgorICAgICAgICAgICAgdGV4dHVy
ZS53cmFwViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgICAgICBtYXRl
cmlhbC5yZWZsZWN0aW9uVGV4dHVyZSA9IHRleHR1cmU7CisgICAgICAgIH0KKyAgICAgICAgLy8g
Y29uZmlndXJlIG1lc2gKKyAgICAgICAgX3RoaXMuX21lc2gubWF0ZXJpYWwgPSBtYXRlcmlhbDsK
KyAgICAgICAgX3RoaXMuX21lc2gucGFyZW50ID0gX3RoaXM7CisgICAgICAgIC8vIGNyZWF0ZSBh
IChkaXNhYmxlZCB1bnRpbCBuZWVkZWQpIG1hc2sgdG8gY292ZXIgdW5uZWVkZWQgc2VnbWVudHMg
b2YgMTgwIHZpZGVvcy4KKyAgICAgICAgX3RoaXMuX2hhbGZEb21lTWFzayA9IF9NZXNoZXNfQnVp
bGRlcnNfc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTcGhlcmVC
dWlsZGVyIl0uQ3JlYXRlU3BoZXJlKCIiLCB7IHNsaWNlOiAwLjUsIGRpYW1ldGVyOiBvcHRpb25z
LnNpemUgKiAwLjk5LCBzZWdtZW50czogb3B0aW9ucy5yZXNvbHV0aW9uLCBzaWRlT3JpZW50YXRp
b246IF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uQkFD
S1NJREUgfSwgc2NlbmUpOworICAgICAgICBfdGhpcy5faGFsZkRvbWVNYXNrLnJvdGF0ZShfTWF0
aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJBeGlzIl0uWCwgLU1hdGguUEkg
LyAyKTsKKyAgICAgICAgLy8gc2V0IHRoZSBwYXJlbnQsIHNvIGl0IHdpbGwgYWx3YXlzIGJlIHBv
c2l0aW9uZWQgY29ycmVjdGx5IEFORCB3aWxsIGJlIGRpc3Bvc2VkIHdoZW4gdGhlIG1haW4gc3Bo
ZXJlIGlzIGRpc3Bvc2VkCisgICAgICAgIF90aGlzLl9oYWxmRG9tZU1hc2sucGFyZW50ID0gX3Ro
aXMuX21lc2g7CisgICAgICAgIF90aGlzLl9oYWxmRG9tZSA9ICEhb3B0aW9ucy5oYWxmRG9tZU1v
ZGU7CisgICAgICAgIC8vIGVuYWJsZSBvciBkaXNhYmxlIGFjY29yZGluZyB0byB0aGUgc2V0dGlu
Z3MKKyAgICAgICAgX3RoaXMuX2hhbGZEb21lTWFzay5zZXRFbmFibGVkKF90aGlzLl9oYWxmRG9t
ZSk7CisgICAgICAgIC8vIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgaWYgKG9wdGlv
bnMuY2xpY2tUb1BsYXkpIHsKKyAgICAgICAgICAgIHNjZW5lLm9uUG9pbnRlclVwID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLl92aWRlb1RleHR1cmUudmlkZW8ucGxheSgp
OworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbml0aWFsIHJvdGF0aW9u
CisgICAgICAgIGlmIChvcHRpb25zLmZhY2VGb3J3YXJkICYmIHNjZW5lLmFjdGl2ZUNhbWVyYSkg
eworICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHNjZW5lLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAg
ICAgIHZhciBmb3J3YXJkID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIlZlY3RvcjMiXS5Gb3J3YXJkKCk7CisgICAgICAgICAgICB2YXIgZGlyZWN0aW9u
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlY3Rv
cjMiXS5UcmFuc2Zvcm1Ob3JtYWwoZm9yd2FyZCwgY2FtZXJhLmdldFZpZXdNYXRyaXgoKSk7Cisg
ICAgICAgICAgICBkaXJlY3Rpb24ubm9ybWFsaXplKCk7CisgICAgICAgICAgICBfdGhpcy5yb3Rh
dGlvbi55ID0gTWF0aC5hY29zKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fWyJWZWN0b3IzIl0uRG90KGZvcndhcmQsIGRpcmVjdGlvbikpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFZpZGVvRG9tZS5wcm90b3R5cGUsICJ2aWRlb1RleHR1cmUiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSB2aWRlbyB0ZXh0dXJlIGJlaW5nIGRpc3BsYXllZCBvbiB0aGUgc3Bo
ZXJlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl92aWRlb1RleHR1cmU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShWaWRlb0RvbWUucHJvdG90eXBlLCAiZm92TXVsdGlwbGllciIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjdXJyZW50IGZvdihmaWVsZCBvZiB2aWV3KSBt
dWx0aXBsaWVyLCAwLjAgLSAyLjAuIERlZmF1bHRzIHRvIDEuMC4gTG93ZXIgdmFsdWVzICJ6b29t
IGluIiBhbmQgaGlnaGVyIHZhbHVlcyAiem9vbSBvdXQiLgorICAgICAgICAgKiBBbHNvIHNlZSB0
aGUgb3B0aW9ucy5yZXNvbHV0aW9uIHByb3BlcnR5LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF0ZXJpYWwuZm92TXVs
dGlwbGllcjsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX21hdGVyaWFsLmZvdk11bHRpcGxpZXIgPSB2YWx1ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZpZGVvRG9tZS5wcm90b3R5cGUs
ICJ2aWRlb01vZGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldCB0aGUg
Y3VycmVudCB2aWRlbyBtb2RlIGZvciB0aGUgdmlkZW8uIEl0IGNhbiBiZToKKyAgICAgICAgICog
KiBWaWRlb0RvbWUuTU9ERV9NT05PU0NPUElDIDogRGVmaW5lIHRoZSB2aWRlbyBzb3VyY2UgYXMg
YSBNb25vc2NvcGljIHBhbm9yYW1pYyAzNjAgdmlkZW8uCisgICAgICAgICAqICogVmlkZW9Eb21l
Lk1PREVfVE9QQk9UVE9NICA6IERlZmluZSB0aGUgdmlkZW8gc291cmNlIGFzIGEgU3RlcmVvc2Nv
cGljIFRvcEJvdHRvbS9PdmVyVW5kZXIgcGFub3JhbWljIDM2MCB2aWRlby4KKyAgICAgICAgICog
KiBWaWRlb0RvbWUuTU9ERV9TSURFQllTSURFIDogRGVmaW5lIHRoZSB2aWRlbyBzb3VyY2UgYXMg
YSBTdGVyZW9zY29waWMgU2lkZSBieSBTaWRlIHBhbm9yYW1pYyAzNjAgdmlkZW8uCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll92aWRlb01vZGU7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fdmlkZW9Nb2RlID09PSB2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2NoYW5nZVZp
ZGVvTW9kZSh2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShWaWRlb0RvbWUucHJvdG90eXBlLCAiaGFsZkRvbWUiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBJcyB0aGUgdmlkZW8gYSAxODAgZGVncmVlcyB2aWRlbyAoaGFsZiBkb21lKSBvciAz
NjAgdmlkZW8gKGZ1bGwgZG9tZSkKKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhbGZEb21lOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0IHRoZSBoYWxmRG9tZSBtb2RlLiBJ
ZiBzZXQsIG9ubHkgdGhlIGZyb250ICgxODAgZGVncmVlcykgd2lsbCBiZSBkaXNwbGF5ZWQgYW5k
IHRoZSBiYWNrIHdpbGwgYmUgYmxhY2tlZCBvdXQuCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uIChlbmFibGVkKSB7CisgICAgICAgICAgICB0aGlzLl9oYWxmRG9tZSA9IGVuYWJs
ZWQ7CisgICAgICAgICAgICB0aGlzLl9oYWxmRG9tZU1hc2suc2V0RW5hYmxlZChlbmFibGVkKTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgVmlkZW9Eb21lLnByb3RvdHlwZS5fY2hhbmdlVmlkZW9N
b2RlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIHRoaXMuX3NjZW5lLm9uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhp
cy5fb25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZlcik7CisgICAgICAgIHRoaXMuX3ZpZGVvTW9k
ZSA9IHZhbHVlOworICAgICAgICAvLyBEZWZhdWx0IFNldHVwIGFuZCBSZXNldC4KKyAgICAgICAg
dGhpcy5fdmlkZW9UZXh0dXJlLnVTY2FsZSA9IDE7CisgICAgICAgIHRoaXMuX3ZpZGVvVGV4dHVy
ZS52U2NhbGUgPSAxOworICAgICAgICB0aGlzLl92aWRlb1RleHR1cmUudU9mZnNldCA9IDA7Cisg
ICAgICAgIHRoaXMuX3ZpZGVvVGV4dHVyZS52T2Zmc2V0ID0gMDsKKyAgICAgICAgc3dpdGNoICh2
YWx1ZSkgeworICAgICAgICAgICAgY2FzZSBWaWRlb0RvbWUuTU9ERV9TSURFQllTSURFOgorICAg
ICAgICAgICAgICAgIC8vIGluIGhhbGYtZG9tZSBtb2RlIHRoZSB1U2NhbGUgc2hvdWxkIGJlIGRv
dWJsZSBvZiAzNjAgdmlkZW9zCisgICAgICAgICAgICAgICAgLy8gVXNlIDAuOTk5OTkgdG8gYm9v
c3QgcGVyZiBieSBub3Qgc3dpdGNoaW5nIHByb2dyYW0KKyAgICAgICAgICAgICAgICB0aGlzLl92
aWRlb1RleHR1cmUudVNjYWxlID0gdGhpcy5faGFsZkRvbWUgPyAwLjk5OTk5IDogMC41OworICAg
ICAgICAgICAgICAgIHZhciByaWdodE9mZnNldF8xID0gdGhpcy5faGFsZkRvbWUgPyAwLjAgOiAw
LjU7CisgICAgICAgICAgICAgICAgdmFyIGxlZnRPZmZzZXRfMSA9IHRoaXMuX2hhbGZEb21lID8g
MC41IDogMC4wOworICAgICAgICAgICAgICAgIHRoaXMuX29uQmVmb3JlQ2FtZXJhUmVuZGVyT2Jz
ZXJ2ZXIgPSB0aGlzLl9zY2VuZS5vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2VydmFibGUuYWRkKGZ1
bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ZpZGVvVGV4dHVy
ZS51T2Zmc2V0ID0gY2FtZXJhLmlzUmlnaHRDYW1lcmEgPyByaWdodE9mZnNldF8xIDogbGVmdE9m
ZnNldF8xOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBWaWRlb0RvbWUuTU9ERV9UT1BCT1RUT006CisgICAgICAgICAgICAgICAg
Ly8gaW4gaGFsZi1kb21lIG1vZGUgdGhlIHZTY2FsZSBzaG91bGQgYmUgZG91YmxlIG9mIDM2MCB2
aWRlb3MKKyAgICAgICAgICAgICAgICAvLyBVc2UgMC45OTk5OSB0byBib29zdCBwZXJmIGJ5IG5v
dCBzd2l0Y2hpbmcgcHJvZ3JhbQorICAgICAgICAgICAgICAgIHRoaXMuX3ZpZGVvVGV4dHVyZS52
U2NhbGUgPSB0aGlzLl9oYWxmRG9tZSA/IDAuOTk5OTkgOiAwLjU7CisgICAgICAgICAgICAgICAg
dGhpcy5fb25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZlciA9IHRoaXMuX3NjZW5lLm9uQmVmb3Jl
Q2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5fdmlkZW9UZXh0dXJlLnZPZmZzZXQgPSBjYW1lcmEuaXNSaWdodENh
bWVyYSA/IDAuNSA6IDAuMDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZXMgcmVzb3Vy
Y2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5vZGUuCisgICAgICogQHBhcmFtIGRvTm90UmVjdXJz
ZSBTZXQgdG8gdHJ1ZSB0byBub3QgcmVjdXJzZSBpbnRvIGVhY2ggY2hpbGRyZW4gKHJlY3Vyc2Ug
aW50byBlYWNoIGNoaWxkcmVuIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGRpc3Bvc2VNYXRl
cmlhbEFuZFRleHR1cmVzIFNldCB0byB0cnVlIHRvIGFsc28gZGlzcG9zZSByZWZlcmVuY2VkIG1h
dGVyaWFscyBhbmQgdGV4dHVyZXMgKGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgVmlk
ZW9Eb21lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGRvTm90UmVjdXJzZSwgZGlzcG9z
ZU1hdGVyaWFsQW5kVGV4dHVyZXMpIHsKKyAgICAgICAgaWYgKGRpc3Bvc2VNYXRlcmlhbEFuZFRl
eHR1cmVzID09PSB2b2lkIDApIHsgZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMgPSBmYWxzZTsg
fQorICAgICAgICB0aGlzLl92aWRlb1RleHR1cmUuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9t
ZXNoLmRpc3Bvc2UoKTsKKyAgICAgICAgdGhpcy5fbWF0ZXJpYWwuZGlzcG9zZSgpOworICAgICAg
ICB0aGlzLl9zY2VuZS5vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMu
X29uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIpOworICAgICAgICBfc3VwZXIucHJvdG90eXBl
LmRpc3Bvc2UuY2FsbCh0aGlzLCBkb05vdFJlY3Vyc2UsIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1
cmVzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmluZSB0aGUgdmlkZW8gc291cmNlIGFz
IGEgTW9ub3Njb3BpYyBwYW5vcmFtaWMgMzYwIHZpZGVvLgorICAgICAqLworICAgIFZpZGVvRG9t
ZS5NT0RFX01PTk9TQ09QSUMgPSAwOworICAgIC8qKgorICAgICAqIERlZmluZSB0aGUgdmlkZW8g
c291cmNlIGFzIGEgU3RlcmVvc2NvcGljIFRvcEJvdHRvbS9PdmVyVW5kZXIgcGFub3JhbWljIDM2
MCB2aWRlby4KKyAgICAgKi8KKyAgICBWaWRlb0RvbWUuTU9ERV9UT1BCT1RUT00gPSAxOworICAg
IC8qKgorICAgICAqIERlZmluZSB0aGUgdmlkZW8gc291cmNlIGFzIGEgU3RlcmVvc2NvcGljIFNp
ZGUgYnkgU2lkZSBwYW5vcmFtaWMgMzYwIHZpZGVvLgorICAgICAqLworICAgIFZpZGVvRG9tZS5N
T0RFX1NJREVCWVNJREUgPSAyOworICAgIHJldHVybiBWaWRlb0RvbWU7Cit9KF9NZXNoZXNfdHJh
bnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUcmFuc2Zvcm1Ob2RlIl0p
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9JbnB1dHMvc2NlbmUuaW5wdXRNYW5hZ2Vy
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9JbnB1dHMvc2NlbmUuaW5wdXRNYW5hZ2VyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IElucHV0TWFu
YWdlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbnB1dE1hbmFnZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIElucHV0TWFuYWdlcjsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FdmVudHMvcG9pbnRlckV2ZW50cyAqLyAi
Li9FdmVudHMvcG9pbnRlckV2ZW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9B
Y3Rpb25zX2Fic3RyYWN0QWN0aW9uTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQWN0aW9ucy9hYnN0cmFjdEFjdGlvbk1hbmFn
ZXIgKi8gIi4vQWN0aW9ucy9hYnN0cmFjdEFjdGlvbk1hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIu
L01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9BY3Rpb25zX2FjdGlvbkV2ZW50X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9BY3Rp
b25zL2FjdGlvbkV2ZW50ICovICIuL0FjdGlvbnMvYWN0aW9uRXZlbnQudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0V2ZW50c19rZXlib2FyZEV2ZW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
RXZlbnRzL2tleWJvYXJkRXZlbnRzICovICIuL0V2ZW50cy9rZXlib2FyZEV2ZW50cy50cyIpOwor
CisKKworCisKKworCisvKiogQGhpZGRlbiAqLwordmFyIF9DbGlja0luZm8gPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gX0NsaWNrSW5mbygpIHsKKyAgICAgICAg
dGhpcy5fc2luZ2xlQ2xpY2sgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZG91YmxlQ2xpY2sgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5faGFzU3dpcGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2ln
bm9yZSA9IGZhbHNlOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX0NsaWNrSW5m
by5wcm90b3R5cGUsICJzaW5nbGVDbGljayIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2luZ2xlQ2xpY2s7CisgICAgICAgIH0sCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAgIHRoaXMuX3NpbmdsZUNsaWNrID0g
YjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9DbGlja0lu
Zm8ucHJvdG90eXBlLCAiZG91YmxlQ2xpY2siLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RvdWJsZUNsaWNrOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uIChiKSB7CisgICAgICAgICAgICB0aGlzLl9kb3VibGVDbGljayA9
IGI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfQ2xpY2tJ
bmZvLnByb3RvdHlwZSwgImhhc1N3aXBlZCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzU3dpcGVkOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uIChiKSB7CisgICAgICAgICAgICB0aGlzLl9oYXNTd2lwZWQgPSBiOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX0NsaWNrSW5mby5w
cm90b3R5cGUsICJpZ25vcmUiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2lnbm9yZTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAoYikgeworICAgICAgICAgICAgdGhpcy5faWdub3JlID0gYjsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgcmV0dXJuIF9DbGlja0luZm87Cit9KCkpOworLyoqCisgKiBDbGFzcyB1c2VkIHRv
IG1hbmFnZSBhbGwgaW5wdXRzIGZvciB0aGUgc2NlbmUuCisgKi8KK3ZhciBJbnB1dE1hbmFnZXIg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBh
IG5ldyBJbnB1dE1hbmFnZXIKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGlu
ZyBzY2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIElucHV0TWFuYWdlcihzY2VuZSkgeworICAg
ICAgICAvLyBQb2ludGVycworICAgICAgICB0aGlzLl93aGVlbEV2ZW50TmFtZSA9ICIiOworICAg
ICAgICB0aGlzLl9tZXNoUGlja1Byb2NlZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY3VycmVu
dFBpY2tSZXN1bHQgPSBudWxsOworICAgICAgICB0aGlzLl9wcmV2aW91c1BpY2tSZXN1bHQgPSBu
dWxsOworICAgICAgICB0aGlzLl90b3RhbFBvaW50ZXJzUHJlc3NlZCA9IDA7CisgICAgICAgIHRo
aXMuX2RvdWJsZUNsaWNrT2NjdXJlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9wb2ludGVyWCA9
IDA7CisgICAgICAgIHRoaXMuX3BvaW50ZXJZID0gMDsKKyAgICAgICAgdGhpcy5fc3RhcnRpbmdQ
b2ludGVyUG9zaXRpb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlZlY3RvcjIiXSgwLCAwKTsKKyAgICAgICAgdGhpcy5fcHJldmlvdXNTdGFy
dGluZ1BvaW50ZXJQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVjdG9yMiJdKDAsIDApOworICAgICAgICB0aGlzLl9zdGFydGlu
Z1BvaW50ZXJUaW1lID0gMDsKKyAgICAgICAgdGhpcy5fcHJldmlvdXNTdGFydGluZ1BvaW50ZXJU
aW1lID0gMDsKKyAgICAgICAgdGhpcy5fcG9pbnRlckNhcHR1cmVzID0ge307CisgICAgICAgIHRo
aXMuX3NjZW5lID0gc2NlbmU7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnB1
dE1hbmFnZXIucHJvdG90eXBlLCAibWVzaFVuZGVyUG9pbnRlciIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICogR2V0cyB0aGUgbWVzaCB0aGF0IGlzIGN1cnJlbnRseSB1bmRlciB0aGUgcG9pbnRl
cgorICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9wb2ludGVyT3Zlck1lc2g7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShJbnB1dE1hbmFnZXIucHJvdG90eXBlLCAidW5UcmFuc2xhdGVkUG9p
bnRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBvaW50ZXIgY29vcmRp
bmF0ZXMgaW4gMkQgd2l0aG91dCBhbnkgdHJhbnNsYXRpb24gKGllLiBzdHJhaWdodCBvdXQgb2Yg
dGhlIHBvaW50ZXIgZXZlbnQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjIiXSh0aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWCwg
dGhpcy5fdW5UcmFuc2xhdGVkUG9pbnRlclkpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoSW5wdXRNYW5hZ2VyLnByb3RvdHlwZSwgInBvaW50ZXJYIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBjdXJyZW50IG9uLXNjcmVl
biBYIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb2ludGVyWDsKKyAgICAgICAg
fSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3Bv
aW50ZXJYID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShJbnB1dE1hbmFnZXIucHJvdG90eXBlLCAicG9pbnRlclkiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGN1cnJlbnQgb24tc2NyZWVuIFkgcG9zaXRpb24g
b2YgdGhlIHBvaW50ZXIKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BvaW50ZXJZOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fcG9pbnRlclkgPSB2YWx1
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5fdXBkYXRl
UG9pbnRlclBvc2l0aW9uID0gZnVuY3Rpb24gKGV2dCkgeworICAgICAgICB2YXIgY2FudmFzUmVj
dCA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldFJlbmRlcmluZ0NhbnZhc0NsaWVudFJlY3Qo
KTsKKyAgICAgICAgaWYgKCFjYW52YXNSZWN0KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fcG9pbnRlclggPSBldnQuY2xpZW50WCAtIGNhbnZhc1JlY3Qu
bGVmdDsKKyAgICAgICAgdGhpcy5fcG9pbnRlclkgPSBldnQuY2xpZW50WSAtIGNhbnZhc1JlY3Qu
dG9wOworICAgICAgICB0aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWCA9IHRoaXMuX3BvaW50ZXJY
OworICAgICAgICB0aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWSA9IHRoaXMuX3BvaW50ZXJZOwor
ICAgIH07CisgICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5fcHJvY2Vzc1BvaW50ZXJNb3ZlID0g
ZnVuY3Rpb24gKHBpY2tSZXN1bHQsIGV2dCkgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9z
Y2VuZTsKKyAgICAgICAgdmFyIGNhbnZhcyA9IHNjZW5lLmdldEVuZ2luZSgpLmdldFJlbmRlcmlu
Z0NhbnZhcygpOworICAgICAgICBpZiAoIWNhbnZhcykgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGNhbnZhcy50YWJJbmRleCA9IDE7CisgICAgICAgIC8vIFJlc3Rv
cmUgcG9pbnRlcgorICAgICAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gc2NlbmUuZGVmYXVsdEN1
cnNvcjsKKyAgICAgICAgdmFyIGlzTWVzaFBpY2tlZCA9IChwaWNrUmVzdWx0ICYmIHBpY2tSZXN1
bHQuaGl0ICYmIHBpY2tSZXN1bHQucGlja2VkTWVzaCkgPyB0cnVlIDogZmFsc2U7CisgICAgICAg
IGlmIChpc01lc2hQaWNrZWQpIHsKKyAgICAgICAgICAgIHNjZW5lLnNldFBvaW50ZXJPdmVyTWVz
aChwaWNrUmVzdWx0LnBpY2tlZE1lc2gpOworICAgICAgICAgICAgaWYgKHRoaXMuX3BvaW50ZXJP
dmVyTWVzaCAmJiB0aGlzLl9wb2ludGVyT3Zlck1lc2guYWN0aW9uTWFuYWdlciAmJiB0aGlzLl9w
b2ludGVyT3Zlck1lc2guYWN0aW9uTWFuYWdlci5oYXNQb2ludGVyVHJpZ2dlcnMpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fcG9pbnRlck92ZXJNZXNoLmFjdGlvbk1hbmFnZXIuaG92ZXJD
dXJzb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IHRoaXMu
X3BvaW50ZXJPdmVyTWVzaC5hY3Rpb25NYW5hZ2VyLmhvdmVyQ3Vyc29yOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FudmFz
LnN0eWxlLmN1cnNvciA9IHNjZW5lLmhvdmVyQ3Vyc29yOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNjZW5l
LnNldFBvaW50ZXJPdmVyTWVzaChudWxsKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBf
aSA9IDAsIF9hID0gc2NlbmUuX3BvaW50ZXJNb3ZlU3RhZ2U7IF9pIDwgX2EubGVuZ3RoOyBfaSsr
KSB7CisgICAgICAgICAgICB2YXIgc3RlcCA9IF9hW19pXTsKKyAgICAgICAgICAgIHBpY2tSZXN1
bHQgPSBzdGVwLmFjdGlvbih0aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWCwgdGhpcy5fdW5UcmFu
c2xhdGVkUG9pbnRlclksIHBpY2tSZXN1bHQsIGlzTWVzaFBpY2tlZCwgY2FudmFzKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocGlja1Jlc3VsdCkgeworICAgICAgICAgICAgdmFyIHR5cGUgPSBl
dnQudHlwZSA9PT0gdGhpcy5fd2hlZWxFdmVudE5hbWUgPyBfRXZlbnRzX3BvaW50ZXJFdmVudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVS
V0hFRUwgOiBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRTsKKyAgICAgICAgICAgIGlmIChzY2Vu
ZS5vblBvaW50ZXJNb3ZlKSB7CisgICAgICAgICAgICAgICAgc2NlbmUub25Qb2ludGVyTW92ZShl
dnQsIHBpY2tSZXN1bHQsIHR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNj
ZW5lLm9uUG9pbnRlck9ic2VydmFibGUuaGFzT2JzZXJ2ZXJzKCkpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcGkgPSBuZXcgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlBvaW50ZXJJbmZvIl0odHlwZSwgZXZ0LCBwaWNrUmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9zZXRSYXlPblBvaW50ZXJJbmZvKHBpKTsKKyAgICAgICAgICAgICAgICBz
Y2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhwaSwgdHlwZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8vIFBvaW50ZXJzIGhhbmRsaW5nCisg
ICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5fc2V0UmF5T25Qb2ludGVySW5mbyA9IGZ1bmN0aW9u
IChwb2ludGVySW5mbykgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTsKKyAgICAg
ICAgaWYgKHBvaW50ZXJJbmZvLnBpY2tJbmZvICYmICFwb2ludGVySW5mby5waWNrSW5mby5fcGlj
a2luZ1VuYXZhaWxhYmxlKSB7CisgICAgICAgICAgICBpZiAoIXBvaW50ZXJJbmZvLnBpY2tJbmZv
LnJheSkgeworICAgICAgICAgICAgICAgIHBvaW50ZXJJbmZvLnBpY2tJbmZvLnJheSA9IHNjZW5l
LmNyZWF0ZVBpY2tpbmdSYXkocG9pbnRlckluZm8uZXZlbnQub2Zmc2V0WCwgcG9pbnRlckluZm8u
ZXZlbnQub2Zmc2V0WSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIk1hdHJpeCJdLklkZW50aXR5KCksIHNjZW5lLmFjdGl2ZUNhbWVyYSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIElucHV0TWFuYWdlci5wcm90b3R5cGUuX2No
ZWNrUHJlUG9pbnRlck9ic2VydmFibGUgPSBmdW5jdGlvbiAocGlja1Jlc3VsdCwgZXZ0LCB0eXBl
KSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3NjZW5lOworICAgICAgICB2YXIgcGkgPSBu
ZXcgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBv
aW50ZXJJbmZvUHJlIl0odHlwZSwgZXZ0LCB0aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWCwgdGhp
cy5fdW5UcmFuc2xhdGVkUG9pbnRlclkpOworICAgICAgICBpZiAocGlja1Jlc3VsdCkgeworICAg
ICAgICAgICAgcGkucmF5ID0gcGlja1Jlc3VsdC5yYXk7CisgICAgICAgIH0KKyAgICAgICAgc2Nl
bmUub25QcmVQb2ludGVyT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMocGksIHR5cGUpOworICAg
ICAgICBpZiAocGkuc2tpcE9uUG9pbnRlck9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVc2UgdGhpcyBtZXRob2Qg
dG8gc2ltdWxhdGUgYSBwb2ludGVyIG1vdmUgb24gYSBtZXNoCisgICAgICogVGhlIHBpY2tSZXN1
bHQgcGFyYW1ldGVyIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGEgc2NlbmUucGljayBvciBzY2VuZS5w
aWNrV2l0aFJheQorICAgICAqIEBwYXJhbSBwaWNrUmVzdWx0IHBpY2tpbmdJbmZvIG9mIHRoZSBv
YmplY3Qgd2lzaGVkIHRvIHNpbXVsYXRlIHBvaW50ZXIgZXZlbnQgb24KKyAgICAgKiBAcGFyYW0g
cG9pbnRlckV2ZW50SW5pdCBwb2ludGVyIGV2ZW50IHN0YXRlIHRvIGJlIHVzZWQgd2hlbiBzaW11
bGF0aW5nIHRoZSBwb2ludGVyIGV2ZW50IChlZy4gcG9pbnRlciBpZCBmb3IgbXVsdGl0b3VjaCkK
KyAgICAgKi8KKyAgICBJbnB1dE1hbmFnZXIucHJvdG90eXBlLnNpbXVsYXRlUG9pbnRlck1vdmUg
PSBmdW5jdGlvbiAocGlja1Jlc3VsdCwgcG9pbnRlckV2ZW50SW5pdCkgeworICAgICAgICB2YXIg
ZXZ0ID0gbmV3IFBvaW50ZXJFdmVudCgicG9pbnRlcm1vdmUiLCBwb2ludGVyRXZlbnRJbml0KTsK
KyAgICAgICAgaWYgKHRoaXMuX2NoZWNrUHJlUG9pbnRlck9ic2VydmFibGUocGlja1Jlc3VsdCwg
ZXZ0LCBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
UG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRSkpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9wcm9jZXNzUG9pbnRlck1vdmUocGlja1Jlc3VsdCwg
ZXZ0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVzZSB0aGlzIG1ldGhvZCB0byBzaW11bGF0
ZSBhIHBvaW50ZXIgZG93biBvbiBhIG1lc2gKKyAgICAgKiBUaGUgcGlja1Jlc3VsdCBwYXJhbWV0
ZXIgY2FuIGJlIG9idGFpbmVkIGZyb20gYSBzY2VuZS5waWNrIG9yIHNjZW5lLnBpY2tXaXRoUmF5
CisgICAgICogQHBhcmFtIHBpY2tSZXN1bHQgcGlja2luZ0luZm8gb2YgdGhlIG9iamVjdCB3aXNo
ZWQgdG8gc2ltdWxhdGUgcG9pbnRlciBldmVudCBvbgorICAgICAqIEBwYXJhbSBwb2ludGVyRXZl
bnRJbml0IHBvaW50ZXIgZXZlbnQgc3RhdGUgdG8gYmUgdXNlZCB3aGVuIHNpbXVsYXRpbmcgdGhl
IHBvaW50ZXIgZXZlbnQgKGVnLiBwb2ludGVyIGlkIGZvciBtdWx0aXRvdWNoKQorICAgICAqLwor
ICAgIElucHV0TWFuYWdlci5wcm90b3R5cGUuc2ltdWxhdGVQb2ludGVyRG93biA9IGZ1bmN0aW9u
IChwaWNrUmVzdWx0LCBwb2ludGVyRXZlbnRJbml0KSB7CisgICAgICAgIHZhciBldnQgPSBuZXcg
UG9pbnRlckV2ZW50KCJwb2ludGVyZG93biIsIHBvaW50ZXJFdmVudEluaXQpOworICAgICAgICBp
ZiAodGhpcy5fY2hlY2tQcmVQb2ludGVyT2JzZXJ2YWJsZShwaWNrUmVzdWx0LCBldnQsIF9FdmVu
dHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVyRXZl
bnRUeXBlcyJdLlBPSU5URVJET1dOKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX3Byb2Nlc3NQb2ludGVyRG93bihwaWNrUmVzdWx0LCBldnQpOworICAg
IH07CisgICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5fcHJvY2Vzc1BvaW50ZXJEb3duID0gZnVu
Y3Rpb24gKHBpY2tSZXN1bHQsIGV2dCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTsKKyAgICAgICAgaWYgKHBpY2tSZXN1bHQgJiYg
cGlja1Jlc3VsdC5oaXQgJiYgcGlja1Jlc3VsdC5waWNrZWRNZXNoKSB7CisgICAgICAgICAgICB0
aGlzLl9waWNrZWREb3duTWVzaCA9IHBpY2tSZXN1bHQucGlja2VkTWVzaDsKKyAgICAgICAgICAg
IHZhciBhY3Rpb25NYW5hZ2VyID0gcGlja1Jlc3VsdC5waWNrZWRNZXNoLl9nZXRBY3Rpb25NYW5h
Z2VyRm9yVHJpZ2dlcigpOworICAgICAgICAgICAgaWYgKGFjdGlvbk1hbmFnZXIpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYWN0aW9uTWFuYWdlci5oYXNQaWNrVHJpZ2dlcnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYWN0aW9uTWFuYWdlci5wcm9jZXNzVHJpZ2dlcihfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uUGlj
a0Rvd25UcmlnZ2VyLCBfQWN0aW9uc19hY3Rpb25FdmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJBY3Rpb25FdmVudCJdLkNyZWF0ZU5ldyhwaWNrUmVzdWx0LnBpY2tlZE1lc2gsIGV2
dCkpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2dC5idXR0b24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rp
b25NYW5hZ2VyLnByb2Nlc3NUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5BQ1RJT05fT25MZWZ0UGlja1RyaWdnZXIsIF9B
Y3Rpb25zX2FjdGlvbkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFjdGlvbkV2
ZW50Il0uQ3JlYXRlTmV3KHBpY2tSZXN1bHQucGlja2VkTWVzaCwgZXZ0KSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uTWFuYWdlci5wcm9jZXNzVHJpZ2dl
cihfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3Rh
bnRzIl0uQUNUSU9OX09uQ2VudGVyUGlja1RyaWdnZXIsIF9BY3Rpb25zX2FjdGlvbkV2ZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFjdGlvbkV2ZW50Il0uQ3JlYXRlTmV3KHBpY2tS
ZXN1bHQucGlja2VkTWVzaCwgZXZ0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWN0aW9uTWFuYWdlci5wcm9jZXNzVHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uUmlnaHRQ
aWNrVHJpZ2dlciwgX0FjdGlvbnNfYWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siQWN0aW9uRXZlbnQiXS5DcmVhdGVOZXcocGlja1Jlc3VsdC5waWNrZWRNZXNoLCBldnQp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYWN0aW9uTWFuYWdl
ci5oYXNTcGVjaWZpY1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkNvbnN0YW50cyJdLkFDVElPTl9PbkxvbmdQcmVzc1RyaWdnZXIpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBwaWNrUmVzdWx0ID0gc2NlbmUucGljayhfdGhpcy5fdW5U
cmFuc2xhdGVkUG9pbnRlclgsIF90aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWSwgZnVuY3Rpb24g
KG1lc2gpIHsgcmV0dXJuIChtZXNoLmlzUGlja2FibGUgJiYgbWVzaC5pc1Zpc2libGUgJiYgbWVz
aC5pc1JlYWR5KCkgJiYgbWVzaC5hY3Rpb25NYW5hZ2VyICYmIG1lc2guYWN0aW9uTWFuYWdlci5o
YXNTcGVjaWZpY1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIkNvbnN0YW50cyJdLkFDVElPTl9PbkxvbmdQcmVzc1RyaWdnZXIpICYmIG1lc2gg
PT0gX3RoaXMuX3BpY2tlZERvd25NZXNoKTsgfSwgZmFsc2UsIHNjZW5lLmNhbWVyYVRvVXNlRm9y
UG9pbnRlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQgJiYgcGlj
a1Jlc3VsdC5oaXQgJiYgcGlja1Jlc3VsdC5waWNrZWRNZXNoICYmIGFjdGlvbk1hbmFnZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX3RvdGFsUG9pbnRlcnNQcmVz
c2VkICE9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRGF0ZS5ub3co
KSAtIF90aGlzLl9zdGFydGluZ1BvaW50ZXJUaW1lKSA+IElucHV0TWFuYWdlci5Mb25nUHJlc3NE
ZWxheSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIV90aGlzLl9pc1BvaW50
ZXJTd2lwaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N0
YXJ0aW5nUG9pbnRlclRpbWUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
Y3Rpb25NYW5hZ2VyLnByb2Nlc3NUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5BQ1RJT05fT25Mb25nUHJlc3NUcmlnZ2Vy
LCBfQWN0aW9uc19hY3Rpb25FdmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBY3Rp
b25FdmVudCJdLkNyZWF0ZU5ldyhwaWNrUmVzdWx0LnBpY2tlZE1lc2gsIGV2dCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfSwgSW5wdXRNYW5hZ2VyLkxvbmdQcmVzc0RlbGF5KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gc2NlbmUuX3BvaW50ZXJEb3duU3RhZ2U7IF9p
IDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBfYVtfaV07
CisgICAgICAgICAgICAgICAgcGlja1Jlc3VsdCA9IHN0ZXAuYWN0aW9uKHRoaXMuX3VuVHJhbnNs
YXRlZFBvaW50ZXJYLCB0aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWSwgcGlja1Jlc3VsdCwgZXZ0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGlja1Jlc3VsdCkgewor
ICAgICAgICAgICAgdmFyIHR5cGUgPSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9XTjsKKyAgICAg
ICAgICAgIGlmIChzY2VuZS5vblBvaW50ZXJEb3duKSB7CisgICAgICAgICAgICAgICAgc2NlbmUu
b25Qb2ludGVyRG93bihldnQsIHBpY2tSZXN1bHQsIHR5cGUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHNjZW5lLm9uUG9pbnRlck9ic2VydmFibGUuaGFzT2JzZXJ2ZXJzKCkpIHsK
KyAgICAgICAgICAgICAgICB2YXIgcGkgPSBuZXcgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJJbmZvIl0odHlwZSwgZXZ0LCBwaWNrUmVz
dWx0KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zZXRSYXlPblBvaW50ZXJJbmZvKHBpKTsKKyAg
ICAgICAgICAgICAgICBzY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhw
aSwgdHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlk
ZGVuICovCisgICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5faXNQb2ludGVyU3dpcGluZyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuX3N0YXJ0aW5nUG9pbnRl
clBvc2l0aW9uLnggLSB0aGlzLl9wb2ludGVyWCkgPiBJbnB1dE1hbmFnZXIuRHJhZ01vdmVtZW50
VGhyZXNob2xkIHx8CisgICAgICAgICAgICBNYXRoLmFicyh0aGlzLl9zdGFydGluZ1BvaW50ZXJQ
b3NpdGlvbi55IC0gdGhpcy5fcG9pbnRlclkpID4gSW5wdXRNYW5hZ2VyLkRyYWdNb3ZlbWVudFRo
cmVzaG9sZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVzZSB0aGlzIG1ldGhvZCB0byBzaW11
bGF0ZSBhIHBvaW50ZXIgdXAgb24gYSBtZXNoCisgICAgICogVGhlIHBpY2tSZXN1bHQgcGFyYW1l
dGVyIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGEgc2NlbmUucGljayBvciBzY2VuZS5waWNrV2l0aFJh
eQorICAgICAqIEBwYXJhbSBwaWNrUmVzdWx0IHBpY2tpbmdJbmZvIG9mIHRoZSBvYmplY3Qgd2lz
aGVkIHRvIHNpbXVsYXRlIHBvaW50ZXIgZXZlbnQgb24KKyAgICAgKiBAcGFyYW0gcG9pbnRlckV2
ZW50SW5pdCBwb2ludGVyIGV2ZW50IHN0YXRlIHRvIGJlIHVzZWQgd2hlbiBzaW11bGF0aW5nIHRo
ZSBwb2ludGVyIGV2ZW50IChlZy4gcG9pbnRlciBpZCBmb3IgbXVsdGl0b3VjaCkKKyAgICAgKiBA
cGFyYW0gZG91YmxlVGFwIGluZGljYXRlcyB0aGF0IHRoZSBwb2ludGVyIHVwIGV2ZW50IHNob3Vs
ZCBiZSBjb25zaWRlcmVkIGFzIHBhcnQgb2YgYSBkb3VibGUgY2xpY2sgKGZhbHNlIGJ5IGRlZmF1
bHQpCisgICAgICovCisgICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5zaW11bGF0ZVBvaW50ZXJV
cCA9IGZ1bmN0aW9uIChwaWNrUmVzdWx0LCBwb2ludGVyRXZlbnRJbml0LCBkb3VibGVUYXApIHsK
KyAgICAgICAgdmFyIGV2dCA9IG5ldyBQb2ludGVyRXZlbnQoInBvaW50ZXJ1cCIsIHBvaW50ZXJF
dmVudEluaXQpOworICAgICAgICB2YXIgY2xpY2tJbmZvID0gbmV3IF9DbGlja0luZm8oKTsKKyAg
ICAgICAgaWYgKGRvdWJsZVRhcCkgeworICAgICAgICAgICAgY2xpY2tJbmZvLmRvdWJsZUNsaWNr
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNsaWNrSW5m
by5zaW5nbGVDbGljayA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2NoZWNr
UHJlUG9pbnRlck9ic2VydmFibGUocGlja1Jlc3VsdCwgZXZ0LCBfRXZlbnRzX3BvaW50ZXJFdmVu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lO
VEVSVVApKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
cHJvY2Vzc1BvaW50ZXJVcChwaWNrUmVzdWx0LCBldnQsIGNsaWNrSW5mbyk7CisgICAgfTsKKyAg
ICBJbnB1dE1hbmFnZXIucHJvdG90eXBlLl9wcm9jZXNzUG9pbnRlclVwID0gZnVuY3Rpb24gKHBp
Y2tSZXN1bHQsIGV2dCwgY2xpY2tJbmZvKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3Nj
ZW5lOworICAgICAgICBpZiAocGlja1Jlc3VsdCAmJiBwaWNrUmVzdWx0ICYmIHBpY2tSZXN1bHQu
cGlja2VkTWVzaCkgeworICAgICAgICAgICAgdGhpcy5fcGlja2VkVXBNZXNoID0gcGlja1Jlc3Vs
dC5waWNrZWRNZXNoOworICAgICAgICAgICAgaWYgKHRoaXMuX3BpY2tlZERvd25NZXNoID09PSB0
aGlzLl9waWNrZWRVcE1lc2gpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2NlbmUub25Qb2ludGVy
UGljaykgeworICAgICAgICAgICAgICAgICAgICBzY2VuZS5vblBvaW50ZXJQaWNrKGV2dCwgcGlj
a1Jlc3VsdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjbGlja0lu
Zm8uc2luZ2xlQ2xpY2sgJiYgIWNsaWNrSW5mby5pZ25vcmUgJiYgc2NlbmUub25Qb2ludGVyT2Jz
ZXJ2YWJsZS5oYXNPYnNlcnZlcnMoKSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZV8x
ID0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBv
aW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUlBJQ0s7CisgICAgICAgICAgICAgICAgICAgIHZhciBw
aSA9IG5ldyBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUG9pbnRlckluZm8iXSh0eXBlXzEsIGV2dCwgcGlja1Jlc3VsdCk7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX3NldFJheU9uUG9pbnRlckluZm8ocGkpOworICAgICAgICAgICAgICAgICAg
ICBzY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhwaSwgdHlwZV8xKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYWN0aW9u
TWFuYWdlciA9IHBpY2tSZXN1bHQucGlja2VkTWVzaC5fZ2V0QWN0aW9uTWFuYWdlckZvclRyaWdn
ZXIoKTsKKyAgICAgICAgICAgIGlmIChhY3Rpb25NYW5hZ2VyICYmICFjbGlja0luZm8uaWdub3Jl
KSB7CisgICAgICAgICAgICAgICAgYWN0aW9uTWFuYWdlci5wcm9jZXNzVHJpZ2dlcihfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNU
SU9OX09uUGlja1VwVHJpZ2dlciwgX0FjdGlvbnNfYWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siQWN0aW9uRXZlbnQiXS5DcmVhdGVOZXcocGlja1Jlc3VsdC5waWNrZWRN
ZXNoLCBldnQpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNsaWNrSW5mby5oYXNTd2lwZWQgJiYg
Y2xpY2tJbmZvLnNpbmdsZUNsaWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdGlvbk1hbmFn
ZXIucHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBpY2tUcmlnZ2VyLCBfQWN0aW9uc19hY3Rp
b25FdmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBY3Rpb25FdmVudCJdLkNyZWF0
ZU5ldyhwaWNrUmVzdWx0LnBpY2tlZE1lc2gsIGV2dCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB2YXIgZG91YmxlQ2xpY2tBY3Rpb25NYW5hZ2VyID0gcGlja1Jlc3VsdC5w
aWNrZWRNZXNoLl9nZXRBY3Rpb25NYW5hZ2VyRm9yVHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uRG91Ymxl
UGlja1RyaWdnZXIpOworICAgICAgICAgICAgICAgIGlmIChjbGlja0luZm8uZG91YmxlQ2xpY2sg
JiYgZG91YmxlQ2xpY2tBY3Rpb25NYW5hZ2VyKSB7CisgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZUNsaWNrQWN0aW9uTWFuYWdlci5wcm9jZXNzVHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uRG91YmxlUGlj
a1RyaWdnZXIsIF9BY3Rpb25zX2FjdGlvbkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIkFjdGlvbkV2ZW50Il0uQ3JlYXRlTmV3KHBpY2tSZXN1bHQucGlja2VkTWVzaCwgZXZ0KSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgaWYgKCFjbGlja0luZm8uaWdub3JlKSB7CisgICAgICAgICAgICAg
ICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHNjZW5lLl9wb2ludGVyVXBTdGFnZTsgX2kgPCBfYS5s
ZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBfYVtfaV07Cisg
ICAgICAgICAgICAgICAgICAgIHBpY2tSZXN1bHQgPSBzdGVwLmFjdGlvbih0aGlzLl91blRyYW5z
bGF0ZWRQb2ludGVyWCwgdGhpcy5fdW5UcmFuc2xhdGVkUG9pbnRlclksIHBpY2tSZXN1bHQsIGV2
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9waWNrZWREb3duTWVzaCAmJiB0aGlzLl9waWNrZWREb3duTWVzaCAhPT0gdGhp
cy5fcGlja2VkVXBNZXNoKSB7CisgICAgICAgICAgICB2YXIgcGlja2VkRG93bkFjdGlvbk1hbmFn
ZXIgPSB0aGlzLl9waWNrZWREb3duTWVzaC5fZ2V0QWN0aW9uTWFuYWdlckZvclRyaWdnZXIoX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJd
LkFDVElPTl9PblBpY2tPdXRUcmlnZ2VyKTsKKyAgICAgICAgICAgIGlmIChwaWNrZWREb3duQWN0
aW9uTWFuYWdlcikgeworICAgICAgICAgICAgICAgIHBpY2tlZERvd25BY3Rpb25NYW5hZ2VyLnBy
b2Nlc3NUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJDb25zdGFudHMiXS5BQ1RJT05fT25QaWNrT3V0VHJpZ2dlciwgX0FjdGlvbnNfYWN0aW9u
RXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQWN0aW9uRXZlbnQiXS5DcmVhdGVO
ZXcodGhpcy5fcGlja2VkRG93bk1lc2gsIGV2dCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHZhciB0eXBlID0gMDsKKyAgICAgICAgaWYgKHNjZW5lLm9uUG9pbnRlck9ic2Vy
dmFibGUuaGFzT2JzZXJ2ZXJzKCkpIHsKKyAgICAgICAgICAgIGlmICghY2xpY2tJbmZvLmlnbm9y
ZSAmJiAhY2xpY2tJbmZvLmhhc1N3aXBlZCkgeworICAgICAgICAgICAgICAgIGlmIChjbGlja0lu
Zm8uc2luZ2xlQ2xpY2sgJiYgc2NlbmUub25Qb2ludGVyT2JzZXJ2YWJsZS5oYXNTcGVjaWZpY01h
c2soX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBv
aW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUlRBUCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQ
b2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJUQVA7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGNsaWNrSW5mby5kb3VibGVDbGljayAmJiBzY2VuZS5vblBvaW50
ZXJPYnNlcnZhYmxlLmhhc1NwZWNpZmljTWFzayhfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9VQkxF
VEFQKSkgeworICAgICAgICAgICAgICAgICAgICB0eXBlID0gX0V2ZW50c19wb2ludGVyRXZlbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRF
UkRPVUJMRVRBUDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHR5cGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBpID0gbmV3IF9FdmVudHNfcG9pbnRlckV2ZW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVySW5mbyJdKHR5cGUsIGV2dCwg
cGlja1Jlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFJheU9uUG9pbnRlcklu
Zm8ocGkpOworICAgICAgICAgICAgICAgICAgICBzY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLm5v
dGlmeU9ic2VydmVycyhwaSwgdHlwZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCFjbGlja0luZm8uaWdub3JlKSB7CisgICAgICAgICAgICAgICAg
dHlwZSA9IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJVUDsKKyAgICAgICAgICAgICAgICB2YXIgcGkg
PSBuZXcgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlBvaW50ZXJJbmZvIl0odHlwZSwgZXZ0LCBwaWNrUmVzdWx0KTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9zZXRSYXlPblBvaW50ZXJJbmZvKHBpKTsKKyAgICAgICAgICAgICAgICBzY2VuZS5vblBv
aW50ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhwaSwgdHlwZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjZW5lLm9uUG9pbnRlclVwICYmICFjbGlja0luZm8u
aWdub3JlKSB7CisgICAgICAgICAgICBzY2VuZS5vblBvaW50ZXJVcChldnQsIHBpY2tSZXN1bHQs
IHR5cGUpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVh
biBpbmRpY2F0aW5nIGlmIHRoZSBjdXJyZW50IHBvaW50ZXIgZXZlbnQgaXMgY2FwdHVyZWQgKG1l
YW5pbmcgdGhhdCB0aGUgc2NlbmUgaGFzIGFscmVhZHkgaGFuZGxlZCB0aGUgcG9pbnRlciBkb3du
KQorICAgICAqIEBwYXJhbSBwb2ludGVySWQgZGVmaW5lcyB0aGUgcG9pbnRlciBpZCB0byB1c2Ug
aW4gYSBtdWx0aS10b3VjaCBzY2VuYXJpbyAoMCBieSBkZWZhdWx0KQorICAgICAqIEByZXR1cm5z
IHRydWUgaWYgdGhlIHBvaW50ZXIgd2FzIGNhcHR1cmVkCisgICAgICovCisgICAgSW5wdXRNYW5h
Z2VyLnByb3RvdHlwZS5pc1BvaW50ZXJDYXB0dXJlZCA9IGZ1bmN0aW9uIChwb2ludGVySWQpIHsK
KyAgICAgICAgaWYgKHBvaW50ZXJJZCA9PT0gdm9pZCAwKSB7IHBvaW50ZXJJZCA9IDA7IH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3BvaW50ZXJDYXB0dXJlc1twb2ludGVySWRdOworICAgIH07Cisg
ICAgLyoqCisgICAgKiBBdHRhY2ggZXZlbnRzIHRvIHRoZSBjYW52YXMgKFRvIGhhbmRsZSBhY3Rp
b25NYW5hZ2VycyB0cmlnZ2VycyBhbmQgcmFpc2Ugb25Qb2ludGVyTW92ZSwgb25Qb2ludGVyRG93
biBhbmQgb25Qb2ludGVyVXAKKyAgICAqIEBwYXJhbSBhdHRhY2hVcCBkZWZpbmVzIGlmIHlvdSB3
YW50IHRvIGF0dGFjaCBldmVudHMgdG8gcG9pbnRlcnVwCisgICAgKiBAcGFyYW0gYXR0YWNoRG93
biBkZWZpbmVzIGlmIHlvdSB3YW50IHRvIGF0dGFjaCBldmVudHMgdG8gcG9pbnRlcmRvd24KKyAg
ICAqIEBwYXJhbSBhdHRhY2hNb3ZlIGRlZmluZXMgaWYgeW91IHdhbnQgdG8gYXR0YWNoIGV2ZW50
cyB0byBwb2ludGVybW92ZQorICAgICovCisgICAgSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5hdHRh
Y2hDb250cm9sID0gZnVuY3Rpb24gKGF0dGFjaFVwLCBhdHRhY2hEb3duLCBhdHRhY2hNb3ZlKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChhdHRhY2hVcCA9PT0gdm9p
ZCAwKSB7IGF0dGFjaFVwID0gdHJ1ZTsgfQorICAgICAgICBpZiAoYXR0YWNoRG93biA9PT0gdm9p
ZCAwKSB7IGF0dGFjaERvd24gPSB0cnVlOyB9CisgICAgICAgIGlmIChhdHRhY2hNb3ZlID09PSB2
b2lkIDApIHsgYXR0YWNoTW92ZSA9IHRydWU7IH0KKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5f
c2NlbmU7CisgICAgICAgIHZhciBjYW52YXMgPSBzY2VuZS5nZXRFbmdpbmUoKS5nZXRSZW5kZXJp
bmdDYW52YXMoKTsKKyAgICAgICAgaWYgKCFjYW52YXMpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAg
ICAgIHRoaXMuX2luaXRBY3Rpb25NYW5hZ2VyID0gZnVuY3Rpb24gKGFjdCwgY2xpY2tJbmZvKSB7
CisgICAgICAgICAgICBpZiAoIV90aGlzLl9tZXNoUGlja1Byb2NlZWQpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgcGlja1Jlc3VsdCA9IHNjZW5lLnBpY2soX3RoaXMuX3VuVHJhbnNsYXRlZFBvaW50
ZXJYLCBfdGhpcy5fdW5UcmFuc2xhdGVkUG9pbnRlclksIHNjZW5lLnBvaW50ZXJEb3duUHJlZGlj
YXRlLCBmYWxzZSwgc2NlbmUuY2FtZXJhVG9Vc2VGb3JQb2ludGVycyk7CisgICAgICAgICAgICAg
ICAgX3RoaXMuX2N1cnJlbnRQaWNrUmVzdWx0ID0gcGlja1Jlc3VsdDsKKyAgICAgICAgICAgICAg
ICBpZiAocGlja1Jlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBhY3QgPSAocGlja1Jlc3Vs
dC5oaXQgJiYgcGlja1Jlc3VsdC5waWNrZWRNZXNoKSA/IHBpY2tSZXN1bHQucGlja2VkTWVzaC5f
Z2V0QWN0aW9uTWFuYWdlckZvclRyaWdnZXIoKSA6IG51bGw7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIF90aGlzLl9tZXNoUGlja1Byb2NlZWQgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGFjdDsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5f
ZGVsYXllZFNpbXBsZUNsaWNrID0gZnVuY3Rpb24gKGJ0biwgY2xpY2tJbmZvLCBjYikgeworICAg
ICAgICAgICAgLy8gZG91YmxlIGNsaWNrIGRlbGF5IGlzIG92ZXIgYW5kIHRoYXQgbm8gZG91Ymxl
IGNsaWNrIGhhcyBiZWVuIHJhaXNlZCBzaW5jZSwgb3IgdGhlIDIgY29uc2VjdXRpdmUga2V5cyBw
cmVzc2VkIGFyZSBkaWZmZXJlbnQKKyAgICAgICAgICAgIGlmICgoRGF0ZS5ub3coKSAtIF90aGlz
Ll9wcmV2aW91c1N0YXJ0aW5nUG9pbnRlclRpbWUgPiBJbnB1dE1hbmFnZXIuRG91YmxlQ2xpY2tE
ZWxheSAmJiAhX3RoaXMuX2RvdWJsZUNsaWNrT2NjdXJlZCkgfHwKKyAgICAgICAgICAgICAgICBi
dG4gIT09IF90aGlzLl9wcmV2aW91c0J1dHRvblByZXNzZWQpIHsKKyAgICAgICAgICAgICAgICBf
dGhpcy5fZG91YmxlQ2xpY2tPY2N1cmVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY2xpY2tJ
bmZvLnNpbmdsZUNsaWNrID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjbGlja0luZm8uaWdub3Jl
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY2IoY2xpY2tJbmZvLCBfdGhpcy5fY3VycmVudFBp
Y2tSZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB0aGlzLl9pbml0
Q2xpY2tFdmVudCA9IGZ1bmN0aW9uIChvYnMxLCBvYnMyLCBldnQsIGNiKSB7CisgICAgICAgICAg
ICB2YXIgY2xpY2tJbmZvID0gbmV3IF9DbGlja0luZm8oKTsKKyAgICAgICAgICAgIF90aGlzLl9j
dXJyZW50UGlja1Jlc3VsdCA9IG51bGw7CisgICAgICAgICAgICB2YXIgYWN0ID0gbnVsbDsKKyAg
ICAgICAgICAgIHZhciBjaGVja1BpY2tpbmcgPSBvYnMxLmhhc1NwZWNpZmljTWFzayhfRXZlbnRz
X3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50
VHlwZXMiXS5QT0lOVEVSUElDSykgfHwgb2JzMi5oYXNTcGVjaWZpY01hc2soX0V2ZW50c19wb2lu
dGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJFdmVudFR5cGVz
Il0uUE9JTlRFUlBJQ0spCisgICAgICAgICAgICAgICAgfHwgb2JzMS5oYXNTcGVjaWZpY01hc2so
X0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50
ZXJFdmVudFR5cGVzIl0uUE9JTlRFUlRBUCkgfHwgb2JzMi5oYXNTcGVjaWZpY01hc2soX0V2ZW50
c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJFdmVu
dFR5cGVzIl0uUE9JTlRFUlRBUCkKKyAgICAgICAgICAgICAgICB8fCBvYnMxLmhhc1NwZWNpZmlj
TWFzayhfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
UG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9VQkxFVEFQKSB8fCBvYnMyLmhhc1NwZWNpZmlj
TWFzayhfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
UG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9VQkxFVEFQKTsKKyAgICAgICAgICAgIGlmICgh
Y2hlY2tQaWNraW5nICYmIF9BY3Rpb25zX2Fic3RyYWN0QWN0aW9uTWFuYWdlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdEFjdGlvbk1hbmFnZXIiXSkgeworICAgICAgICAg
ICAgICAgIGFjdCA9IF90aGlzLl9pbml0QWN0aW9uTWFuYWdlcihhY3QsIGNsaWNrSW5mbyk7Cisg
ICAgICAgICAgICAgICAgaWYgKGFjdCkgeworICAgICAgICAgICAgICAgICAgICBjaGVja1BpY2tp
bmcgPSBhY3QuaGFzUGlja1RyaWdnZXJzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBuZWVkVG9JZ25vcmVOZXh0ID0gZmFsc2U7CisgICAgICAgICAg
ICBpZiAoY2hlY2tQaWNraW5nKSB7CisgICAgICAgICAgICAgICAgdmFyIGJ0biA9IGV2dC5idXR0
b247CisgICAgICAgICAgICAgICAgY2xpY2tJbmZvLmhhc1N3aXBlZCA9IF90aGlzLl9pc1BvaW50
ZXJTd2lwaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFjbGlja0luZm8uaGFzU3dpcGVkKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja1NpbmdsZUNsaWNrSW1tZWRpYXRlbHkgPSAh
SW5wdXRNYW5hZ2VyLkV4Y2x1c2l2ZURvdWJsZUNsaWNrTW9kZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjaGVja1NpbmdsZUNsaWNrSW1tZWRpYXRlbHkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNoZWNrU2luZ2xlQ2xpY2tJbW1lZGlhdGVseSA9ICFvYnMxLmhhc1NwZWNpZmljTWFz
ayhfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9p
bnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9VQkxFVEFQKSAmJgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICFvYnMyLmhhc1NwZWNpZmljTWFzayhfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9V
QkxFVEFQKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja1NpbmdsZUNsaWNrSW1t
ZWRpYXRlbHkgJiYgIV9BY3Rpb25zX2Fic3RyYWN0QWN0aW9uTWFuYWdlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdEFjdGlvbk1hbmFnZXIiXS5IYXNTcGVjaWZpY1RyaWdn
ZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0
YW50cyJdLkFDVElPTl9PbkRvdWJsZVBpY2tUcmlnZ2VyKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFjdCA9IF90aGlzLl9pbml0QWN0aW9uTWFuYWdlcihhY3QsIGNsaWNrSW5mbyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGVja1NpbmdsZUNsaWNrSW1tZWRpYXRlbHkgPSAhYWN0Lmhhc1Nw
ZWNpZmljVHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uRG91YmxlUGlja1RyaWdnZXIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tTaW5nbGVDbGlja0lt
bWVkaWF0ZWx5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5nbGUgY2xpY2sgZGV0
ZWN0ZWQgaWYgZG91YmxlIGNsaWNrIGRlbGF5IGlzIG92ZXIgb3IgdHdvIGRpZmZlcmVudCBzdWNj
ZXNzaXZlIGtleXMgcHJlc3NlZCB3aXRob3V0IGV4Y2x1c2l2ZSBkb3VibGUgY2xpY2sgb3Igbm8g
ZG91YmxlIGNsaWNrIHJlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZS5u
b3coKSAtIF90aGlzLl9wcmV2aW91c1N0YXJ0aW5nUG9pbnRlclRpbWUgPiBJbnB1dE1hbmFnZXIu
RG91YmxlQ2xpY2tEZWxheSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0biAhPT0g
X3RoaXMuX3ByZXZpb3VzQnV0dG9uUHJlc3NlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsaWNrSW5mby5zaW5nbGVDbGljayA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2IoY2xpY2tJbmZvLCBfdGhpcy5fY3VycmVudFBpY2tSZXN1bHQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5lZWRUb0lnbm9yZU5leHQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIGF0IGxlYXN0IG9uZSBkb3VibGUgY2xpY2sgaXMgcmVxdWlyZWQgdG8gYmUgY2hlY2sgYW5k
IGV4Y2x1c2l2ZSBkb3VibGUgY2xpY2sgaXMgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdGhhdCBubyBkb3VibGUgY2xp
Y2sgaGFzIGJlZW4gcmFpc2VkIGR1cmluZyB0aGUgZG91YmxlIGNsaWNrIGRlbGF5CisgICAgICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5fcHJldmlvdXNEZWxheWVkU2ltcGxlQ2xpY2tUaW1lb3V0
ID0gX3RoaXMuX2RlbGF5ZWRTaW1wbGVDbGlja1RpbWVvdXQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICBfdGhpcy5fZGVsYXllZFNpbXBsZUNsaWNrVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0
KF90aGlzLl9kZWxheWVkU2ltcGxlQ2xpY2suYmluZChfdGhpcywgYnRuLCBjbGlja0luZm8sIGNi
KSwgSW5wdXRNYW5hZ2VyLkRvdWJsZUNsaWNrRGVsYXkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja0RvdWJsZUNsaWNrID0gb2JzMS5oYXNTcGVj
aWZpY01hc2soX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPVUJMRVRBUCkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG9iczIuaGFzU3BlY2lmaWNNYXNrKF9FdmVudHNfcG9pbnRlckV2ZW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJE
T1VCTEVUQVApOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrRG91YmxlQ2xpY2sgJiYg
X0FjdGlvbnNfYWJzdHJhY3RBY3Rpb25NYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkFic3RyYWN0QWN0aW9uTWFuYWdlciJdLkhhc1NwZWNpZmljVHJpZ2dlcihfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNUSU9O
X09uRG91YmxlUGlja1RyaWdnZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhY3QgPSBf
dGhpcy5faW5pdEFjdGlvbk1hbmFnZXIoYWN0LCBjbGlja0luZm8pOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFjdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRG91
YmxlQ2xpY2sgPSBhY3QuaGFzU3BlY2lmaWNUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5BQ1RJT05fT25Eb3VibGVQaWNr
VHJpZ2dlcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrRG91YmxlQ2xpY2spIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHR3byBzdWNjZXNzaXZlIGtleXMgcHJlc3NlZCBhcmUgZXF1YWws
IGRvdWJsZSBjbGljayBkZWxheSBpcyBub3Qgb3ZlciBhbmQgZG91YmxlIGNsaWNrIGhhcyBub3Qg
anVzdCBvY2N1cnJlZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ0biA9PT0gX3RoaXMu
X3ByZXZpb3VzQnV0dG9uUHJlc3NlZCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERh
dGUubm93KCkgLSBfdGhpcy5fcHJldmlvdXNTdGFydGluZ1BvaW50ZXJUaW1lIDwgSW5wdXRNYW5h
Z2VyLkRvdWJsZUNsaWNrRGVsYXkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhX3Ro
aXMuX2RvdWJsZUNsaWNrT2NjdXJlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHBvaW50ZXIgaGFzIG5vdCBtb3ZlZCBmb3IgMiBjbGlja3MsIGl0J3MgYSBkb3VibGUgY2xpY2sK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsaWNrSW5mby5oYXNTd2lwZWQgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIV90aGlzLl9pc1BvaW50ZXJTd2lwaW5n
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ByZXZpb3VzU3Rh
cnRpbmdQb2ludGVyVGltZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90
aGlzLl9kb3VibGVDbGlja09jY3VyZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGlja0luZm8uZG91YmxlQ2xpY2sgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGlja0luZm8uaWdub3JlID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChJbnB1dE1hbmFnZXIuRXhjbHVzaXZlRG91YmxlQ2xpY2tNb2Rl
ICYmIF90aGlzLl9wcmV2aW91c0RlbGF5ZWRTaW1wbGVDbGlja1RpbWVvdXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChfdGhpcy5fcHJldmlvdXNE
ZWxheWVkU2ltcGxlQ2xpY2tUaW1lb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcHJldmlvdXNEZWxh
eWVkU2ltcGxlQ2xpY2tUaW1lb3V0ID0gX3RoaXMuX2RlbGF5ZWRTaW1wbGVDbGlja1RpbWVvdXQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiKGNsaWNrSW5mbywgX3RoaXMuX2N1
cnJlbnRQaWNrUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHR3byBzdWNjZXNzaXZlIGNsaWNrcyBhcmUg
dG9vIGZhciwgaXQncyBqdXN0IHR3byBzaW1wbGUgY2xpY2tzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9k
b3VibGVDbGlja09jY3VyZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX3RoaXMuX3ByZXZpb3VzU3RhcnRpbmdQb2ludGVyVGltZSA9IF90aGlzLl9zdGFydGluZ1Bv
aW50ZXJUaW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcHJldmlv
dXNTdGFydGluZ1BvaW50ZXJQb3NpdGlvbi54ID0gX3RoaXMuX3N0YXJ0aW5nUG9pbnRlclBvc2l0
aW9uLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wcmV2aW91c1N0
YXJ0aW5nUG9pbnRlclBvc2l0aW9uLnkgPSBfdGhpcy5fc3RhcnRpbmdQb2ludGVyUG9zaXRpb24u
eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ByZXZpb3VzQnV0dG9u
UHJlc3NlZCA9IGJ0bjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElucHV0
TWFuYWdlci5FeGNsdXNpdmVEb3VibGVDbGlja01vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fcHJldmlvdXNEZWxheWVkU2ltcGxlQ2xpY2tUaW1l
b3V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1l
b3V0KF90aGlzLl9wcmV2aW91c0RlbGF5ZWRTaW1wbGVDbGlja1RpbWVvdXQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX3ByZXZpb3VzRGVsYXllZFNpbXBsZUNsaWNrVGltZW91dCA9IF90aGlz
Ll9kZWxheWVkU2ltcGxlQ2xpY2tUaW1lb3V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2IoY2xpY2tJbmZvLCBfdGhpcy5fcHJldmlvdXNQaWNrUmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiKGNsaWNr
SW5mbywgX3RoaXMuX2N1cnJlbnRQaWNrUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZWVkVG9JZ25vcmVOZXh0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgdGhlIGZpcnN0IGNsaWNr
IG9mIHRoZSBkb3VibGUgaGFzIGJlZW4gcmFpc2VkCisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZG91YmxlQ2xpY2tPY2N1
cmVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ByZXZpb3Vz
U3RhcnRpbmdQb2ludGVyVGltZSA9IF90aGlzLl9zdGFydGluZ1BvaW50ZXJUaW1lOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wcmV2aW91c1N0YXJ0aW5nUG9pbnRlclBvc2l0
aW9uLnggPSBfdGhpcy5fc3RhcnRpbmdQb2ludGVyUG9zaXRpb24ueDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5fcHJldmlvdXNTdGFydGluZ1BvaW50ZXJQb3NpdGlvbi55ID0g
X3RoaXMuX3N0YXJ0aW5nUG9pbnRlclBvc2l0aW9uLnk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMuX3ByZXZpb3VzQnV0dG9uUHJlc3NlZCA9IGJ0bjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbmVlZFRvSWdub3JlTmV4dCkgeworICAgICAg
ICAgICAgICAgIGNiKGNsaWNrSW5mbywgX3RoaXMuX2N1cnJlbnRQaWNrUmVzdWx0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fb25Qb2ludGVyTW92ZSA9IGZ1bmN0
aW9uIChldnQpIHsKKyAgICAgICAgICAgIF90aGlzLl91cGRhdGVQb2ludGVyUG9zaXRpb24oZXZ0
KTsKKyAgICAgICAgICAgIC8vIFByZU9ic2VydmFibGUgc3VwcG9ydAorICAgICAgICAgICAgaWYg
KF90aGlzLl9jaGVja1ByZVBvaW50ZXJPYnNlcnZhYmxlKG51bGwsIGV2dCwgZXZ0LnR5cGUgPT09
IF90aGlzLl93aGVlbEV2ZW50TmFtZSA/IF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJXSEVFTCA6IF9F
dmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVy
RXZlbnRUeXBlcyJdLlBPSU5URVJNT1ZFKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc2NlbmUuY2FtZXJhVG9Vc2VGb3JQb2ludGVy
cyAmJiAhc2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzY2VuZS5wb2ludGVyTW92ZVByZWRpY2F0ZSkg
eworICAgICAgICAgICAgICAgIHNjZW5lLnBvaW50ZXJNb3ZlUHJlZGljYXRlID0gZnVuY3Rpb24g
KG1lc2gpIHsgcmV0dXJuIChtZXNoLmlzUGlja2FibGUgJiYgbWVzaC5pc1Zpc2libGUgJiYgbWVz
aC5pc1JlYWR5KCkgJiYgbWVzaC5pc0VuYWJsZWQoKSAmJiAobWVzaC5lbmFibGVQb2ludGVyTW92
ZUV2ZW50cyB8fCBzY2VuZS5jb25zdGFudGx5VXBkYXRlTWVzaFVuZGVyUG9pbnRlciB8fCAobWVz
aC5fZ2V0QWN0aW9uTWFuYWdlckZvclRyaWdnZXIoKSAhPSBudWxsKSkgJiYgKCFzY2VuZS5jYW1l
cmFUb1VzZUZvclBvaW50ZXJzIHx8IChzY2VuZS5jYW1lcmFUb1VzZUZvclBvaW50ZXJzLmxheWVy
TWFzayAmIG1lc2gubGF5ZXJNYXNrKSAhPT0gMCkpOyB9OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gTWVzaGVzCisgICAgICAgICAgICB2YXIgcGlja1Jlc3VsdCA9IHNjZW5lLnBpY2so
X3RoaXMuX3VuVHJhbnNsYXRlZFBvaW50ZXJYLCBfdGhpcy5fdW5UcmFuc2xhdGVkUG9pbnRlclks
IHNjZW5lLnBvaW50ZXJNb3ZlUHJlZGljYXRlLCBmYWxzZSwgc2NlbmUuY2FtZXJhVG9Vc2VGb3JQ
b2ludGVycyk7CisgICAgICAgICAgICBfdGhpcy5fcHJvY2Vzc1BvaW50ZXJNb3ZlKHBpY2tSZXN1
bHQsIGV2dCk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMuX29uUG9pbnRlckRvd24gPSBmdW5j
dGlvbiAoZXZ0KSB7CisgICAgICAgICAgICBfdGhpcy5fdG90YWxQb2ludGVyc1ByZXNzZWQrKzsK
KyAgICAgICAgICAgIF90aGlzLl9waWNrZWREb3duTWVzaCA9IG51bGw7CisgICAgICAgICAgICBf
dGhpcy5fbWVzaFBpY2tQcm9jZWVkID0gZmFsc2U7CisgICAgICAgICAgICBfdGhpcy5fdXBkYXRl
UG9pbnRlclBvc2l0aW9uKGV2dCk7CisgICAgICAgICAgICBpZiAoc2NlbmUucHJldmVudERlZmF1
bHRPblBvaW50ZXJEb3duICYmIGNhbnZhcykgeworICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50
RGVmYXVsdCgpOworICAgICAgICAgICAgICAgIGNhbnZhcy5mb2N1cygpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgX3RoaXMuX3N0YXJ0aW5nUG9pbnRlclBvc2l0aW9uLnggPSBfdGhpcy5f
cG9pbnRlclg7CisgICAgICAgICAgICBfdGhpcy5fc3RhcnRpbmdQb2ludGVyUG9zaXRpb24ueSA9
IF90aGlzLl9wb2ludGVyWTsKKyAgICAgICAgICAgIF90aGlzLl9zdGFydGluZ1BvaW50ZXJUaW1l
ID0gRGF0ZS5ub3coKTsKKyAgICAgICAgICAgIC8vIFByZU9ic2VydmFibGUgc3VwcG9ydAorICAg
ICAgICAgICAgaWYgKF90aGlzLl9jaGVja1ByZVBvaW50ZXJPYnNlcnZhYmxlKG51bGwsIGV2dCwg
X0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50
ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzY2VuZS5jYW1lcmFUb1VzZUZvclBvaW50
ZXJzICYmICFzY2VuZS5hY3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBfdGhpcy5fcG9pbnRlckNhcHR1cmVzW2V2dC5wb2lu
dGVySWRdID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICghc2NlbmUucG9pbnRlckRvd25QcmVkaWNh
dGUpIHsKKyAgICAgICAgICAgICAgICBzY2VuZS5wb2ludGVyRG93blByZWRpY2F0ZSA9IGZ1bmN0
aW9uIChtZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNoLmlzUGlja2FibGUg
JiYgbWVzaC5pc1Zpc2libGUgJiYgbWVzaC5pc1JlYWR5KCkgJiYgbWVzaC5pc0VuYWJsZWQoKSAm
JiAoIXNjZW5lLmNhbWVyYVRvVXNlRm9yUG9pbnRlcnMgfHwgKHNjZW5lLmNhbWVyYVRvVXNlRm9y
UG9pbnRlcnMubGF5ZXJNYXNrICYgbWVzaC5sYXllck1hc2spICE9PSAwKTsKKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gTWVzaGVzCisgICAgICAgICAg
ICBfdGhpcy5fcGlja2VkRG93bk1lc2ggPSBudWxsOworICAgICAgICAgICAgdmFyIHBpY2tSZXN1
bHQgPSBzY2VuZS5waWNrKF90aGlzLl91blRyYW5zbGF0ZWRQb2ludGVyWCwgX3RoaXMuX3VuVHJh
bnNsYXRlZFBvaW50ZXJZLCBzY2VuZS5wb2ludGVyRG93blByZWRpY2F0ZSwgZmFsc2UsIHNjZW5l
LmNhbWVyYVRvVXNlRm9yUG9pbnRlcnMpOworICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NQb2lu
dGVyRG93bihwaWNrUmVzdWx0LCBldnQpOworICAgICAgICB9OworICAgICAgICB0aGlzLl9vblBv
aW50ZXJVcCA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fdG90YWxQ
b2ludGVyc1ByZXNzZWQgPT09IDApIHsgLy8gV2UgYXJlIGF0dGFjaGluZyB0aGUgcG9pbnRlciB1
cCB0byB3aW5kb3dzIGJlY2F1c2Ugb2YgYSBidWcgaW4gRkYKKyAgICAgICAgICAgICAgICByZXR1
cm47IC8vIFNvIHdlIG5lZWQgdG8gdGVzdCBpdCB0aGUgcG9pbnRlciBkb3duIHdhcyBwcmVzc2Vk
IGJlZm9yZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl90b3RhbFBvaW50ZXJz
UHJlc3NlZC0tOworICAgICAgICAgICAgX3RoaXMuX3BpY2tlZFVwTWVzaCA9IG51bGw7CisgICAg
ICAgICAgICBfdGhpcy5fbWVzaFBpY2tQcm9jZWVkID0gZmFsc2U7CisgICAgICAgICAgICBfdGhp
cy5fdXBkYXRlUG9pbnRlclBvc2l0aW9uKGV2dCk7CisgICAgICAgICAgICBpZiAoc2NlbmUucHJl
dmVudERlZmF1bHRPblBvaW50ZXJVcCAmJiBjYW52YXMpIHsKKyAgICAgICAgICAgICAgICBldnQu
cHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICBjYW52YXMuZm9jdXMoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl9pbml0Q2xpY2tFdmVudChzY2VuZS5vblByZVBv
aW50ZXJPYnNlcnZhYmxlLCBzY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLCBldnQsIGZ1bmN0aW9u
IChjbGlja0luZm8sIHBpY2tSZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAvLyBQcmVPYnNlcnZh
YmxlIHN1cHBvcnQKKyAgICAgICAgICAgICAgICBpZiAoc2NlbmUub25QcmVQb2ludGVyT2JzZXJ2
YWJsZS5oYXNPYnNlcnZlcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNsaWNrSW5m
by5pZ25vcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2xpY2tJbmZvLmhhc1N3
aXBlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGlja0luZm8uc2luZ2xl
Q2xpY2sgJiYgc2NlbmUub25QcmVQb2ludGVyT2JzZXJ2YWJsZS5oYXNTcGVjaWZpY01hc2soX0V2
ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJF
dmVudFR5cGVzIl0uUE9JTlRFUlRBUCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKF90aGlzLl9jaGVja1ByZVBvaW50ZXJPYnNlcnZhYmxlKG51bGwsIGV2dCwgX0V2ZW50
c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJFdmVu
dFR5cGVzIl0uUE9JTlRFUlRBUCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xp
Y2tJbmZvLmRvdWJsZUNsaWNrICYmIHNjZW5lLm9uUHJlUG9pbnRlck9ic2VydmFibGUuaGFzU3Bl
Y2lmaWNNYXNrKF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJET1VCTEVUQVApKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fY2hlY2tQcmVQb2ludGVyT2JzZXJ2YWJs
ZShudWxsLCBldnQsIF9FdmVudHNfcG9pbnRlckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJQb2ludGVyRXZlbnRUeXBlcyJdLlBPSU5URVJET1VCTEVUQVApKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2NoZWNr
UHJlUG9pbnRlck9ic2VydmFibGUobnVsbCwgZXZ0LCBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSVVAp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICghX3RoaXMuX3BvaW50ZXJDYXB0dXJlc1tldnQucG9pbnRlcklkXSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIF90aGlzLl9wb2ludGVyQ2FwdHVyZXNbZXZ0LnBvaW50ZXJJZF0gPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBpZiAoIXNjZW5lLmNhbWVyYVRvVXNlRm9yUG9pbnRlcnMgJiYgIXNj
ZW5lLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghc2NlbmUucG9pbnRlclVwUHJlZGljYXRl
KSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLnBvaW50ZXJVcFByZWRpY2F0ZSA9IGZ1bmN0
aW9uIChtZXNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzaC5pc1BpY2th
YmxlICYmIG1lc2guaXNWaXNpYmxlICYmIG1lc2guaXNSZWFkeSgpICYmIG1lc2guaXNFbmFibGVk
KCkgJiYgKCFzY2VuZS5jYW1lcmFUb1VzZUZvclBvaW50ZXJzIHx8IChzY2VuZS5jYW1lcmFUb1Vz
ZUZvclBvaW50ZXJzLmxheWVyTWFzayAmIG1lc2gubGF5ZXJNYXNrKSAhPT0gMCk7CisgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE1l
c2hlcworICAgICAgICAgICAgICAgIGlmICghX3RoaXMuX21lc2hQaWNrUHJvY2VlZCAmJiAoX0Fj
dGlvbnNfYWJzdHJhY3RBY3Rpb25NYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkFic3RyYWN0QWN0aW9uTWFuYWdlciJdICYmIF9BY3Rpb25zX2Fic3RyYWN0QWN0aW9uTWFuYWdl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdEFjdGlvbk1hbmFnZXIiXS5I
YXNUcmlnZ2VycyB8fCBzY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLmhhc09ic2VydmVycygpKSkg
eworICAgICAgICAgICAgICAgICAgICBfdGhpcy5faW5pdEFjdGlvbk1hbmFnZXIobnVsbCwgY2xp
Y2tJbmZvKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFwaWNrUmVz
dWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHBpY2tSZXN1bHQgPSBfdGhpcy5fY3VycmVudFBp
Y2tSZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF90aGlzLl9wcm9j
ZXNzUG9pbnRlclVwKHBpY2tSZXN1bHQsIGV2dCwgY2xpY2tJbmZvKTsKKyAgICAgICAgICAgICAg
ICBfdGhpcy5fcHJldmlvdXNQaWNrUmVzdWx0ID0gX3RoaXMuX2N1cnJlbnRQaWNrUmVzdWx0Owor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMuX29uS2V5RG93biA9IGZ1
bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgIHZhciB0eXBlID0gX0V2ZW50c19rZXlib2FyZEV2
ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJLZXlib2FyZEV2ZW50VHlwZXMiXS5L
RVlET1dOOworICAgICAgICAgICAgaWYgKHNjZW5lLm9uUHJlS2V5Ym9hcmRPYnNlcnZhYmxlLmhh
c09ic2VydmVycygpKSB7CisgICAgICAgICAgICAgICAgdmFyIHBpID0gbmV3IF9FdmVudHNfa2V5
Ym9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siS2V5Ym9hcmRJbmZvUHJl
Il0odHlwZSwgZXZ0KTsKKyAgICAgICAgICAgICAgICBzY2VuZS5vblByZUtleWJvYXJkT2JzZXJ2
YWJsZS5ub3RpZnlPYnNlcnZlcnMocGksIHR5cGUpOworICAgICAgICAgICAgICAgIGlmIChwaS5z
a2lwT25Qb2ludGVyT2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjZW5lLm9u
S2V5Ym9hcmRPYnNlcnZhYmxlLmhhc09ic2VydmVycygpKSB7CisgICAgICAgICAgICAgICAgdmFy
IHBpID0gbmV3IF9FdmVudHNfa2V5Ym9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfX1siS2V5Ym9hcmRJbmZvIl0odHlwZSwgZXZ0KTsKKyAgICAgICAgICAgICAgICBzY2VuZS5v
bktleWJvYXJkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMocGksIHR5cGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHNjZW5lLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAg
ICAgICBzY2VuZS5hY3Rpb25NYW5hZ2VyLnByb2Nlc3NUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5BQ1RJT05fT25LZXlE
b3duVHJpZ2dlciwgX0FjdGlvbnNfYWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siQWN0aW9uRXZlbnQiXS5DcmVhdGVOZXdGcm9tU2NlbmUoc2NlbmUsIGV2dCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB0aGlzLl9vbktleVVwID0gZnVuY3Rpb24g
KGV2dCkgeworICAgICAgICAgICAgdmFyIHR5cGUgPSBfRXZlbnRzX2tleWJvYXJkRXZlbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIktleWJvYXJkRXZlbnRUeXBlcyJdLktFWVVQOwor
ICAgICAgICAgICAgaWYgKHNjZW5lLm9uUHJlS2V5Ym9hcmRPYnNlcnZhYmxlLmhhc09ic2VydmVy
cygpKSB7CisgICAgICAgICAgICAgICAgdmFyIHBpID0gbmV3IF9FdmVudHNfa2V5Ym9hcmRFdmVu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siS2V5Ym9hcmRJbmZvUHJlIl0odHlwZSwg
ZXZ0KTsKKyAgICAgICAgICAgICAgICBzY2VuZS5vblByZUtleWJvYXJkT2JzZXJ2YWJsZS5ub3Rp
ZnlPYnNlcnZlcnMocGksIHR5cGUpOworICAgICAgICAgICAgICAgIGlmIChwaS5za2lwT25Qb2lu
dGVyT2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjZW5lLm9uS2V5Ym9hcmRP
YnNlcnZhYmxlLmhhc09ic2VydmVycygpKSB7CisgICAgICAgICAgICAgICAgdmFyIHBpID0gbmV3
IF9FdmVudHNfa2V5Ym9hcmRFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siS2V5
Ym9hcmRJbmZvIl0odHlwZSwgZXZ0KTsKKyAgICAgICAgICAgICAgICBzY2VuZS5vbktleWJvYXJk
T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMocGksIHR5cGUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHNjZW5lLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAgICAgICBzY2Vu
ZS5hY3Rpb25NYW5hZ2VyLnByb2Nlc3NUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5BQ1RJT05fT25LZXlVcFRyaWdnZXIs
IF9BY3Rpb25zX2FjdGlvbkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFjdGlv
bkV2ZW50Il0uQ3JlYXRlTmV3RnJvbVNjZW5lKHNjZW5lLCBldnQpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICAgICAgLy8gS2V5Ym9hcmQgZXZlbnRzCisgICAgICAgIHRoaXMuX29u
Q2FudmFzRm9jdXNPYnNlcnZlciA9IGVuZ2luZS5vbkNhbnZhc0ZvY3VzT2JzZXJ2YWJsZS5hZGQo
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWNhbnZhcykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVy
KCJrZXlkb3duIiwgX3RoaXMuX29uS2V5RG93biwgZmFsc2UpOworICAgICAgICAgICAgICAgIGNh
bnZhcy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIF90aGlzLl9vbktleVVwLCBmYWxzZSk7Cisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09
IGNhbnZhcykgeworICAgICAgICAgICAgICAgIGZuKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gZm47CisgICAgICAgIH0pKCkpOworICAgICAgICB0aGlzLl9vbkNhbnZhc0Js
dXJPYnNlcnZlciA9IGVuZ2luZS5vbkNhbnZhc0JsdXJPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBpZiAoIWNhbnZhcykgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJr
ZXlkb3duIiwgX3RoaXMuX29uS2V5RG93bik7CisgICAgICAgICAgICBjYW52YXMucmVtb3ZlRXZl
bnRMaXN0ZW5lcigia2V5dXAiLCBfdGhpcy5fb25LZXlVcCk7CisgICAgICAgIH0pOworICAgICAg
ICAvLyBQb2ludGVyIGV2ZW50cworICAgICAgICB2YXIgZXZlbnRQcmVmaXggPSBfTWlzY190b29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLkdldFBvaW50ZXJQcmVmaXgo
KTsKKyAgICAgICAgaWYgKGF0dGFjaE1vdmUpIHsKKyAgICAgICAgICAgIGNhbnZhcy5hZGRFdmVu
dExpc3RlbmVyKGV2ZW50UHJlZml4ICsgIm1vdmUiLCB0aGlzLl9vblBvaW50ZXJNb3ZlLCBmYWxz
ZSk7CisgICAgICAgICAgICAvLyBXaGVlbAorICAgICAgICAgICAgdGhpcy5fd2hlZWxFdmVudE5h
bWUgPSAib253aGVlbCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikgPyAid2hlZWwi
IDogLy8gTW9kZXJuIGJyb3dzZXJzIHN1cHBvcnQgIndoZWVsIgorICAgICAgICAgICAgICAgIGRv
Y3VtZW50Lm9ubW91c2V3aGVlbCAhPT0gdW5kZWZpbmVkID8gIm1vdXNld2hlZWwiIDogLy8gV2Vi
a2l0IGFuZCBJRSBzdXBwb3J0IGF0IGxlYXN0ICJtb3VzZXdoZWVsIgorICAgICAgICAgICAgICAg
ICAgICAiRE9NTW91c2VTY3JvbGwiOyAvLyBsZXQncyBhc3N1bWUgdGhhdCByZW1haW5pbmcgYnJv
d3NlcnMgYXJlIG9sZGVyIEZpcmVmb3gKKyAgICAgICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3Rl
bmVyKHRoaXMuX3doZWVsRXZlbnROYW1lLCB0aGlzLl9vblBvaW50ZXJNb3ZlLCBmYWxzZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGF0dGFjaERvd24pIHsKKyAgICAgICAgICAgIGNhbnZhcy5h
ZGRFdmVudExpc3RlbmVyKGV2ZW50UHJlZml4ICsgImRvd24iLCB0aGlzLl9vblBvaW50ZXJEb3du
LCBmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGF0dGFjaFVwKSB7CisgICAgICAgICAg
ICB2YXIgaG9zdFdpbmRvdyA9IHNjZW5lLmdldEVuZ2luZSgpLmdldEhvc3RXaW5kb3coKTsKKyAg
ICAgICAgICAgIGhvc3RXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihldmVudFByZWZpeCArICJ1cCIs
IHRoaXMuX29uUG9pbnRlclVwLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIERldGFjaGVzIGFsbCBldmVudCBoYW5kbGVycworICAgICAqLworICAgIElucHV0TWFu
YWdlci5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IGV2ZW50UHJlZml4ID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
VG9vbHMiXS5HZXRQb2ludGVyUHJlZml4KCk7CisgICAgICAgIHZhciBjYW52YXMgPSB0aGlzLl9z
Y2VuZS5nZXRFbmdpbmUoKS5nZXRSZW5kZXJpbmdDYW52YXMoKTsKKyAgICAgICAgdmFyIGVuZ2lu
ZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAoIWNhbnZhcykgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFBvaW50ZXIKKyAgICAgICAg
Y2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRQcmVmaXggKyAibW92ZSIsIHRoaXMuX29u
UG9pbnRlck1vdmUpOworICAgICAgICBjYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl93
aGVlbEV2ZW50TmFtZSwgdGhpcy5fb25Qb2ludGVyTW92ZSk7CisgICAgICAgIGNhbnZhcy5yZW1v
dmVFdmVudExpc3RlbmVyKGV2ZW50UHJlZml4ICsgImRvd24iLCB0aGlzLl9vblBvaW50ZXJEb3du
KTsKKyAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRQcmVmaXggKyAidXAi
LCB0aGlzLl9vblBvaW50ZXJVcCk7CisgICAgICAgIC8vIEJsdXIgLyBGb2N1cworICAgICAgICBp
ZiAodGhpcy5fb25DYW52YXNCbHVyT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIGVuZ2luZS5vbkNh
bnZhc0JsdXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkNhbnZhc0JsdXJPYnNlcnZlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29uQ2FudmFzRm9jdXNPYnNlcnZlcikgeworICAg
ICAgICAgICAgZW5naW5lLm9uQ2FudmFzRm9jdXNPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkNh
bnZhc0ZvY3VzT2JzZXJ2ZXIpOworICAgICAgICB9CisgICAgICAgIC8vIEtleWJvYXJkCisgICAg
ICAgIGNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fb25LZXlEb3du
KTsKKyAgICAgICAgY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIiwgdGhpcy5fb25L
ZXlVcCk7CisgICAgICAgIC8vIEN1cnNvcgorICAgICAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0g
dGhpcy5fc2NlbmUuZGVmYXVsdEN1cnNvcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEZvcmNl
IHRoZSB2YWx1ZSBvZiBtZXNoVW5kZXJQb2ludGVyCisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5l
cyB0aGUgbWVzaCB0byB1c2UKKyAgICAgKi8KKyAgICBJbnB1dE1hbmFnZXIucHJvdG90eXBlLnNl
dFBvaW50ZXJPdmVyTWVzaCA9IGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgIGlmICh0aGlzLl9w
b2ludGVyT3Zlck1lc2ggPT09IG1lc2gpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB2YXIgYWN0aW9uTWFuYWdlcjsKKyAgICAgICAgaWYgKHRoaXMuX3BvaW50ZXJP
dmVyTWVzaCkgeworICAgICAgICAgICAgYWN0aW9uTWFuYWdlciA9IHRoaXMuX3BvaW50ZXJPdmVy
TWVzaC5fZ2V0QWN0aW9uTWFuYWdlckZvclRyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBvaW50ZXJPdXRU
cmlnZ2VyKTsKKyAgICAgICAgICAgIGlmIChhY3Rpb25NYW5hZ2VyKSB7CisgICAgICAgICAgICAg
ICAgYWN0aW9uTWFuYWdlci5wcm9jZXNzVHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uUG9pbnRlck91dFRy
aWdnZXIsIF9BY3Rpb25zX2FjdGlvbkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkFjdGlvbkV2ZW50Il0uQ3JlYXRlTmV3KHRoaXMuX3BvaW50ZXJPdmVyTWVzaCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3BvaW50ZXJPdmVyTWVzaCA9IG1lc2g7
CisgICAgICAgIGlmICh0aGlzLl9wb2ludGVyT3Zlck1lc2gpIHsKKyAgICAgICAgICAgIGFjdGlv
bk1hbmFnZXIgPSB0aGlzLl9wb2ludGVyT3Zlck1lc2guX2dldEFjdGlvbk1hbmFnZXJGb3JUcmln
Z2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25z
dGFudHMiXS5BQ1RJT05fT25Qb2ludGVyT3ZlclRyaWdnZXIpOworICAgICAgICAgICAgaWYgKGFj
dGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAgICAgICBhY3Rpb25NYW5hZ2VyLnByb2Nlc3NUcmln
Z2VyKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25z
dGFudHMiXS5BQ1RJT05fT25Qb2ludGVyT3ZlclRyaWdnZXIsIF9BY3Rpb25zX2FjdGlvbkV2ZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFjdGlvbkV2ZW50Il0uQ3JlYXRlTmV3KHRo
aXMuX3BvaW50ZXJPdmVyTWVzaCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBtZXNoIHVuZGVyIHRoZSBwb2ludGVyCisgICAgICog
QHJldHVybnMgYSBNZXNoIG9yIG51bGwgaWYgbm8gbWVzaCBpcyB1bmRlciB0aGUgcG9pbnRlcgor
ICAgICAqLworICAgIElucHV0TWFuYWdlci5wcm90b3R5cGUuZ2V0UG9pbnRlck92ZXJNZXNoID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fcG9pbnRlck92ZXJNZXNoOworICAg
IH07CisgICAgLyoqIFRoZSBkaXN0YW5jZSBpbiBwaXhlbCB0aGF0IHlvdSBoYXZlIHRvIG1vdmUg
dG8gcHJldmVudCBzb21lIGV2ZW50cyAqLworICAgIElucHV0TWFuYWdlci5EcmFnTW92ZW1lbnRU
aHJlc2hvbGQgPSAxMDsgLy8gaW4gcGl4ZWxzCisgICAgLyoqIFRpbWUgaW4gbWlsbGlzZWNvbmRz
IHRvIHdhaXQgdG8gcmFpc2UgbG9uZyBwcmVzcyBldmVudHMgaWYgYnV0dG9uIGlzIHN0aWxsIHBy
ZXNzZWQgKi8KKyAgICBJbnB1dE1hbmFnZXIuTG9uZ1ByZXNzRGVsYXkgPSA1MDA7IC8vIGluIG1p
bGxpc2Vjb25kcworICAgIC8qKiBUaW1lIGluIG1pbGxpc2Vjb25kcyB3aXRoIHR3byBjb25zZWN1
dGl2ZSBjbGlja3Mgd2lsbCBiZSBjb25zaWRlcmVkIGFzIGEgZG91YmxlIGNsaWNrICovCisgICAg
SW5wdXRNYW5hZ2VyLkRvdWJsZUNsaWNrRGVsYXkgPSAzMDA7IC8vIGluIG1pbGxpc2Vjb25kcwor
ICAgIC8qKiBJZiB5b3UgbmVlZCB0byBjaGVjayBkb3VibGUgY2xpY2sgd2l0aG91dCByYWlzaW5n
IGEgc2luZ2xlIGNsaWNrIGF0IGZpcnN0IGNsaWNrLCBlbmFibGUgdGhpcyBmbGFnICovCisgICAg
SW5wdXRNYW5hZ2VyLkV4Y2x1c2l2ZURvdWJsZUNsaWNrTW9kZSA9IGZhbHNlOworICAgIHJldHVy
biBJbnB1dE1hbmFnZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0luc3Ry
dW1lbnRhdGlvbi9lbmdpbmVJbnN0cnVtZW50YXRpb24udHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0luc3RydW1l
bnRhdGlvbi9lbmdpbmVJbnN0cnVtZW50YXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogRW5naW5lSW5zdHJ1bWVudGF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkVuZ2luZUluc3RydW1lbnRhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRW5naW5l
SW5zdHJ1bWVudGF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19wZXJm
Q291bnRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWlzYy9wZXJmQ291bnRlciAqLyAiLi9NaXNjL3BlcmZDb3VudGVyLnRzIik7CisK
Ky8qKgorICogVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBnZXQgaW5zdHJ1bWVudGF0aW9uIGRh
dGEgZnJvbSBhIEJhYnlsb24gZW5naW5lCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNv
bS9ob3dfdG8vb3B0aW1pemluZ195b3VyX3NjZW5lI2VuZ2luZWluc3RydW1lbnRhdGlvbgorICov
Cit2YXIgRW5naW5lSW5zdHJ1bWVudGF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBlbmdpbmUgaW5zdHJ1bWVudGF0
aW9uLgorICAgICAqIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gZ2V0IGluc3RydW1lbnRhdGlv
biBkYXRhIGZyb20gYSBCYWJ5bG9uIGVuZ2luZQorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9vcHRpbWl6aW5nX3lvdXJfc2NlbmUjZW5naW5laW5zdHJ1bWVudGF0
aW9uCisgICAgICogQHBhcmFtIGVuZ2luZSBEZWZpbmVzIHRoZSBlbmdpbmUgdG8gaW5zdHJ1bWVu
dAorICAgICAqLworICAgIGZ1bmN0aW9uIEVuZ2luZUluc3RydW1lbnRhdGlvbigKKyAgICAvKioK
KyAgICAgKiBEZWZpbmUgdGhlIGluc3RydW1lbnRlZCBlbmdpbmUuCisgICAgICovCisgICAgZW5n
aW5lKSB7CisgICAgICAgIHRoaXMuZW5naW5lID0gZW5naW5lOworICAgICAgICB0aGlzLl9jYXB0
dXJlR1BVRnJhbWVUaW1lID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2dwdUZyYW1lVGltZSA9IG5l
dyBfTWlzY19wZXJmQ291bnRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQZXJmQ291
bnRlciJdKCk7CisgICAgICAgIHRoaXMuX2NhcHR1cmVTaGFkZXJDb21waWxhdGlvblRpbWUgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5fc2hhZGVyQ29tcGlsYXRpb25UaW1lID0gbmV3IF9NaXNjX3Bl
cmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBlcmZDb3VudGVyIl0oKTsK
KyAgICAgICAgLy8gT2JzZXJ2ZXJzCisgICAgICAgIHRoaXMuX29uQmVnaW5GcmFtZU9ic2VydmVy
ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fb25FbmRGcmFtZU9ic2VydmVyID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fb25CZWZvcmVTaGFkZXJDb21waWxhdGlvbk9ic2VydmVyID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fb25BZnRlclNoYWRlckNvbXBpbGF0aW9uT2JzZXJ2ZXIgPSBudWxsOworICAgIH0K
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lSW5zdHJ1bWVudGF0aW9uLnByb3RvdHlw
ZSwgImdwdUZyYW1lVGltZUNvdW50ZXIiLCB7CisgICAgICAgIC8vIFByb3BlcnRpZXMKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmYgY291bnRlciB1c2VkIGZvciBHUFUgZnJh
bWUgdGltZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fZ3B1RnJhbWVUaW1lOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoRW5naW5lSW5zdHJ1bWVudGF0aW9uLnByb3RvdHlwZSwgImNh
cHR1cmVHUFVGcmFtZVRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBH
UFUgZnJhbWUgdGltZSBjYXB0dXJlIHN0YXR1cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FwdHVyZUdQVUZyYW1lVGlt
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuYWJsZSBvciBkaXNhYmxl
IHRoZSBHUFUgZnJhbWUgdGltZSBjYXB0dXJlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fY2FwdHVyZUdQVUZyYW1lVGltZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2NhcHR1cmVH
UFVGcmFtZVRpbWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHRoaXMuX29uQmVnaW5GcmFtZU9ic2VydmVyID0gdGhpcy5lbmdpbmUub25CZWdpbkZy
YW1lT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IV90aGlzLl9ncHVGcmFtZVRpbWVUb2tlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuX2dwdUZyYW1lVGltZVRva2VuID0gX3RoaXMuZW5naW5lLnN0YXJ0VGltZVF1ZXJ5KCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9vbkVuZEZyYW1lT2JzZXJ2ZXIgPSB0aGlzLmVuZ2luZS5vbkVuZEZyYW1lT2JzZXJ2
YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLl9n
cHVGcmFtZVRpbWVUb2tlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhciB0aW1lID0gX3RoaXMu
ZW5naW5lLmVuZFRpbWVRdWVyeShfdGhpcy5fZ3B1RnJhbWVUaW1lVG9rZW4pOworICAgICAgICAg
ICAgICAgICAgICBpZiAodGltZSA+IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fZ3B1RnJhbWVUaW1lVG9rZW4gPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuX2dwdUZyYW1lVGltZS5mZXRjaE5ld0ZyYW1lKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5fZ3B1RnJhbWVUaW1lLmFkZENvdW50KHRpbWUsIHRydWUpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS5vbkJlZ2luRnJhbWVPYnNlcnZh
YmxlLnJlbW92ZSh0aGlzLl9vbkJlZ2luRnJhbWVPYnNlcnZlcik7CisgICAgICAgICAgICAgICAg
dGhpcy5fb25CZWdpbkZyYW1lT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAgICAgICAgIHRoaXMu
ZW5naW5lLm9uRW5kRnJhbWVPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkVuZEZyYW1lT2JzZXJ2
ZXIpOworICAgICAgICAgICAgICAgIHRoaXMuX29uRW5kRnJhbWVPYnNlcnZlciA9IG51bGw7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShFbmdpbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAic2hhZGVyQ29tcGlsYXRpb25UaW1l
Q291bnRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmYgY291bnRl
ciB1c2VkIGZvciBzaGFkZXIgY29tcGlsYXRpb24gdGltZQorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZGVyQ29tcGls
YXRpb25UaW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
RW5naW5lSW5zdHJ1bWVudGF0aW9uLnByb3RvdHlwZSwgImNhcHR1cmVTaGFkZXJDb21waWxhdGlv
blRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBzaGFkZXIgY29tcGls
YXRpb24gdGltZSBjYXB0dXJlIHN0YXR1cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FwdHVyZVNoYWRlckNvbXBpbGF0
aW9uVGltZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuYWJsZSBvciBk
aXNhYmxlIHRoZSBzaGFkZXIgY29tcGlsYXRpb24gdGltZSBjYXB0dXJlCisgICAgICAgICAqLwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fY2FwdHVyZVNoYWRlckNvbXBp
bGF0aW9uVGltZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX2NhcHR1cmVTaGFkZXJDb21waWxhdGlvblRpbWUgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX29uQmVmb3JlU2hh
ZGVyQ29tcGlsYXRpb25PYnNlcnZlciA9IHRoaXMuZW5naW5lLm9uQmVmb3JlU2hhZGVyQ29tcGls
YXRpb25PYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIF90
aGlzLl9zaGFkZXJDb21waWxhdGlvblRpbWUuZmV0Y2hOZXdGcmFtZSgpOworICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5fc2hhZGVyQ29tcGlsYXRpb25UaW1lLmJlZ2luTW9uaXRvcmluZygpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJTaGFkZXJD
b21waWxhdGlvbk9ic2VydmVyID0gdGhpcy5lbmdpbmUub25BZnRlclNoYWRlckNvbXBpbGF0aW9u
T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5f
c2hhZGVyQ29tcGlsYXRpb25UaW1lLmVuZE1vbml0b3JpbmcoKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRo
aXMuZW5naW5lLm9uQmVmb3JlU2hhZGVyQ29tcGlsYXRpb25PYnNlcnZhYmxlLnJlbW92ZSh0aGlz
Ll9vbkJlZm9yZVNoYWRlckNvbXBpbGF0aW9uT2JzZXJ2ZXIpOworICAgICAgICAgICAgICAgIHRo
aXMuX29uQmVmb3JlU2hhZGVyQ29tcGlsYXRpb25PYnNlcnZlciA9IG51bGw7CisgICAgICAgICAg
ICAgICAgdGhpcy5lbmdpbmUub25BZnRlclNoYWRlckNvbXBpbGF0aW9uT2JzZXJ2YWJsZS5yZW1v
dmUodGhpcy5fb25BZnRlclNoYWRlckNvbXBpbGF0aW9uT2JzZXJ2ZXIpOworICAgICAgICAgICAg
ICAgIHRoaXMuX29uQWZ0ZXJTaGFkZXJDb21waWxhdGlvbk9ic2VydmVyID0gbnVsbDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRGlzcG9zZSBhbmQg
cmVsZWFzZSBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAgICAgKi8KKyAgICBFbmdpbmVJbnN0cnVt
ZW50YXRpb24ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMu
ZW5naW5lLm9uQmVnaW5GcmFtZU9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQmVnaW5GcmFtZU9i
c2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25CZWdpbkZyYW1lT2JzZXJ2ZXIgPSBudWxsOworICAg
ICAgICB0aGlzLmVuZ2luZS5vbkVuZEZyYW1lT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25FbmRG
cmFtZU9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25FbmRGcmFtZU9ic2VydmVyID0gbnVsbDsK
KyAgICAgICAgdGhpcy5lbmdpbmUub25CZWZvcmVTaGFkZXJDb21waWxhdGlvbk9ic2VydmFibGUu
cmVtb3ZlKHRoaXMuX29uQmVmb3JlU2hhZGVyQ29tcGlsYXRpb25PYnNlcnZlcik7CisgICAgICAg
IHRoaXMuX29uQmVmb3JlU2hhZGVyQ29tcGlsYXRpb25PYnNlcnZlciA9IG51bGw7CisgICAgICAg
IHRoaXMuZW5naW5lLm9uQWZ0ZXJTaGFkZXJDb21waWxhdGlvbk9ic2VydmFibGUucmVtb3ZlKHRo
aXMuX29uQWZ0ZXJTaGFkZXJDb21waWxhdGlvbk9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25B
ZnRlclNoYWRlckNvbXBpbGF0aW9uT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLmVuZ2lu
ZSA9IG51bGw7CisgICAgfTsKKyAgICByZXR1cm4gRW5naW5lSW5zdHJ1bWVudGF0aW9uOworfSgp
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9JbnN0cnVtZW50YXRpb24vaW5kZXgudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vSW5z
dHJ1bWVudGF0aW9uL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRW5naW5lSW5zdHJ1bWVudGF0aW9uLCBT
Y2VuZUluc3RydW1lbnRhdGlvbiwgX1RpbWVUb2tlbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2VuZ2luZUluc3RydW1lbnRhdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lbmdpbmVJbnN0cnVt
ZW50YXRpb24gKi8gIi4vSW5zdHJ1bWVudGF0aW9uL2VuZ2luZUluc3RydW1lbnRhdGlvbi50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJFbmdpbmVJbnN0cnVtZW50YXRpb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9lbmdpbmVJbnN0cnVtZW50YXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRW5naW5lSW5zdHJ1bWVudGF0aW9uIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3NjZW5lSW5zdHJ1bWVudGF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NjZW5lSW5zdHJ1bWVudGF0aW9uICovICIuL0luc3Ry
dW1lbnRhdGlvbi9zY2VuZUluc3RydW1lbnRhdGlvbi50cyIpOworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJT
Y2VuZUluc3RydW1lbnRhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lSW5zdHJ1bWVu
dGF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lSW5zdHJ1bWVudGF0aW9u
Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RpbWVUb2tlbl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90aW1lVG9rZW4g
Ki8gIi4vSW5zdHJ1bWVudGF0aW9uL3RpbWVUb2tlbi50cyIpOworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJf
VGltZVRva2VuIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdGltZVRva2VuX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIl9UaW1lVG9rZW4iXTsgfSk7CisKKworCisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vSW5zdHJ1bWVudGF0aW9uL3NjZW5lSW5zdHJ1bWVudGF0aW9uLnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL0luc3RydW1lbnRhdGlvbi9zY2VuZUluc3RydW1lbnRhdGlvbi50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IFNjZW5lSW5zdHJ1bWVudGF0aW9uICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lSW5zdHJ1bWVudGF0aW9uIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBTY2VuZUluc3RydW1lbnRhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX3BlcmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3BlcmZDb3VudGVyICovICIu
L01pc2MvcGVyZkNvdW50ZXIudHMiKTsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgY2FuIGJlIHVz
ZWQgdG8gZ2V0IGluc3RydW1lbnRhdGlvbiBkYXRhIGZyb20gYSBCYWJ5bG9uIGVuZ2luZQorICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL29wdGltaXppbmdfeW91cl9zY2Vu
ZSNzY2VuZWluc3RydW1lbnRhdGlvbgorICovCit2YXIgU2NlbmVJbnN0cnVtZW50YXRpb24gPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVz
IGEgbmV3IHNjZW5lIGluc3RydW1lbnRhdGlvbi4KKyAgICAgKiBUaGlzIGNsYXNzIGNhbiBiZSB1
c2VkIHRvIGdldCBpbnN0cnVtZW50YXRpb24gZGF0YSBmcm9tIGEgQmFieWxvbiBlbmdpbmUKKyAg
ICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vb3B0aW1pemluZ195b3Vy
X3NjZW5lI3NjZW5laW5zdHJ1bWVudGF0aW9uCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMg
dGhlIHNjZW5lIHRvIGluc3RydW1lbnQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTY2VuZUluc3Ry
dW1lbnRhdGlvbigKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBzY2VuZSB0byBpbnN0cnVt
ZW50CisgICAgICovCisgICAgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAg
ICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9jYXB0dXJlQWN0aXZlTWVz
aGVzRXZhbHVhdGlvblRpbWUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fYWN0aXZlTWVzaGVzRXZh
bHVhdGlvblRpbWUgPSBuZXcgX01pc2NfcGVyZkNvdW50ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siUGVyZkNvdW50ZXIiXSgpOworICAgICAgICB0aGlzLl9jYXB0dXJlUmVuZGVyVGFy
Z2V0c1JlbmRlclRpbWUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcmVuZGVyVGFyZ2V0c1JlbmRl
clRpbWUgPSBuZXcgX01pc2NfcGVyZkNvdW50ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siUGVyZkNvdW50ZXIiXSgpOworICAgICAgICB0aGlzLl9jYXB0dXJlRnJhbWVUaW1lID0gZmFs
c2U7CisgICAgICAgIHRoaXMuX2ZyYW1lVGltZSA9IG5ldyBfTWlzY19wZXJmQ291bnRlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQZXJmQ291bnRlciJdKCk7CisgICAgICAgIHRoaXMu
X2NhcHR1cmVSZW5kZXJUaW1lID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3JlbmRlclRpbWUgPSBu
ZXcgX01pc2NfcGVyZkNvdW50ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUGVyZkNv
dW50ZXIiXSgpOworICAgICAgICB0aGlzLl9jYXB0dXJlSW50ZXJGcmFtZVRpbWUgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5faW50ZXJGcmFtZVRpbWUgPSBuZXcgX01pc2NfcGVyZkNvdW50ZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUGVyZkNvdW50ZXIiXSgpOworICAgICAgICB0aGlz
Ll9jYXB0dXJlUGFydGljbGVzUmVuZGVyVGltZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9wYXJ0
aWNsZXNSZW5kZXJUaW1lID0gbmV3IF9NaXNjX3BlcmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlBlcmZDb3VudGVyIl0oKTsKKyAgICAgICAgdGhpcy5fY2FwdHVyZVNwcml0
ZXNSZW5kZXJUaW1lID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3Nwcml0ZXNSZW5kZXJUaW1lID0g
bmV3IF9NaXNjX3BlcmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBlcmZD
b3VudGVyIl0oKTsKKyAgICAgICAgdGhpcy5fY2FwdHVyZVBoeXNpY3NUaW1lID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMuX3BoeXNpY3NUaW1lID0gbmV3IF9NaXNjX3BlcmZDb3VudGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlBlcmZDb3VudGVyIl0oKTsKKyAgICAgICAgdGhpcy5fY2Fw
dHVyZUFuaW1hdGlvbnNUaW1lID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2FuaW1hdGlvbnNUaW1l
ID0gbmV3IF9NaXNjX3BlcmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBl
cmZDb3VudGVyIl0oKTsKKyAgICAgICAgdGhpcy5fY2FwdHVyZUNhbWVyYVJlbmRlclRpbWUgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5fY2FtZXJhUmVuZGVyVGltZSA9IG5ldyBfTWlzY19wZXJmQ291
bnRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQZXJmQ291bnRlciJdKCk7CisgICAg
ICAgIC8vIE9ic2VydmVycworICAgICAgICB0aGlzLl9vbkJlZm9yZUFjdGl2ZU1lc2hlc0V2YWx1
YXRpb25PYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuX29uQWZ0ZXJBY3RpdmVNZXNoZXNF
dmFsdWF0aW9uT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vbkJlZm9yZVJlbmRlclRh
cmdldHNSZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuX29uQWZ0ZXJSZW5kZXJU
YXJnZXRzUmVuZGVyT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vbkFmdGVyUmVuZGVy
T2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vbkJlZm9yZURyYXdQaGFzZU9ic2VydmVy
ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fb25BZnRlckRyYXdQaGFzZU9ic2VydmVyID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fb25CZWZvcmVBbmltYXRpb25zT2JzZXJ2ZXIgPSBudWxsOworICAgICAg
ICB0aGlzLl9vbkJlZm9yZVBhcnRpY2xlc1JlbmRlcmluZ09ic2VydmVyID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fb25BZnRlclBhcnRpY2xlc1JlbmRlcmluZ09ic2VydmVyID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fb25CZWZvcmVTcHJpdGVzUmVuZGVyaW5nT2JzZXJ2ZXIgPSBudWxsOworICAgICAg
ICB0aGlzLl9vbkFmdGVyU3ByaXRlc1JlbmRlcmluZ09ic2VydmVyID0gbnVsbDsKKyAgICAgICAg
dGhpcy5fb25CZWZvcmVQaHlzaWNzT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vbkFm
dGVyUGh5c2ljc09ic2VydmVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5fb25BZnRlckFuaW1hdGlv
bnNPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuX29uQmVmb3JlQ2FtZXJhUmVuZGVyT2Jz
ZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vbkFmdGVyQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIg
PSBudWxsOworICAgICAgICAvLyBCZWZvcmUgcmVuZGVyCisgICAgICAgIHRoaXMuX29uQmVmb3Jl
QW5pbWF0aW9uc09ic2VydmVyID0gc2NlbmUub25CZWZvcmVBbmltYXRpb25zT2JzZXJ2YWJsZS5h
ZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKF90aGlzLl9jYXB0dXJlQWN0aXZlTWVz
aGVzRXZhbHVhdGlvblRpbWUpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fYWN0aXZlTWVzaGVz
RXZhbHVhdGlvblRpbWUuZmV0Y2hOZXdGcmFtZSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKF90aGlzLl9jYXB0dXJlUmVuZGVyVGFyZ2V0c1JlbmRlclRpbWUpIHsKKyAgICAgICAg
ICAgICAgICBfdGhpcy5fcmVuZGVyVGFyZ2V0c1JlbmRlclRpbWUuZmV0Y2hOZXdGcmFtZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF90aGlzLl9jYXB0dXJlRnJhbWVUaW1lKSB7
CisgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVG9vbHMiXS5TdGFydFBlcmZvcm1hbmNlQ291bnRlcigiU2NlbmUgcmVuZGVyaW5nIik7Cisg
ICAgICAgICAgICAgICAgX3RoaXMuX2ZyYW1lVGltZS5iZWdpbk1vbml0b3JpbmcoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfdGhpcy5fY2FwdHVyZUludGVyRnJhbWVUaW1lKSB7
CisgICAgICAgICAgICAgICAgX3RoaXMuX2ludGVyRnJhbWVUaW1lLmVuZE1vbml0b3JpbmcoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfdGhpcy5fY2FwdHVyZVBhcnRpY2xlc1Jl
bmRlclRpbWUpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fcGFydGljbGVzUmVuZGVyVGltZS5m
ZXRjaE5ld0ZyYW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX3RoaXMuX2Nh
cHR1cmVTcHJpdGVzUmVuZGVyVGltZSkgeworICAgICAgICAgICAgICAgIF90aGlzLl9zcHJpdGVz
UmVuZGVyVGltZS5mZXRjaE5ld0ZyYW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoX3RoaXMuX2NhcHR1cmVBbmltYXRpb25zVGltZSkgeworICAgICAgICAgICAgICAgIF90aGlz
Ll9hbmltYXRpb25zVGltZS5iZWdpbk1vbml0b3JpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIF90aGlzLnNjZW5lLmdldEVuZ2luZSgpLl9kcmF3Q2FsbHMuZmV0Y2hOZXdGcmFtZSgp
OworICAgICAgICB9KTsKKyAgICAgICAgLy8gQWZ0ZXIgcmVuZGVyCisgICAgICAgIHRoaXMuX29u
QWZ0ZXJSZW5kZXJPYnNlcnZlciA9IHNjZW5lLm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLmFkZChm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuX2NhcHR1cmVGcmFtZVRpbWUpIHsK
KyAgICAgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJUb29scyJdLkVuZFBlcmZvcm1hbmNlQ291bnRlcigiU2NlbmUgcmVuZGVyaW5nIik7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX2ZyYW1lVGltZS5lbmRNb25pdG9yaW5nKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoX3RoaXMuX2NhcHR1cmVSZW5kZXJUaW1lKSB7CisgICAgICAg
ICAgICAgICAgX3RoaXMuX3JlbmRlclRpbWUuZW5kTW9uaXRvcmluZyhmYWxzZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoX3RoaXMuX2NhcHR1cmVJbnRlckZyYW1lVGltZSkgewor
ICAgICAgICAgICAgICAgIF90aGlzLl9pbnRlckZyYW1lVGltZS5iZWdpbk1vbml0b3JpbmcoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJhY3RpdmVNZXNoZXNFdmFsdWF0
aW9uVGltZUNvdW50ZXIiLCB7CisgICAgICAgIC8vIFByb3BlcnRpZXMKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIHBlcmYgY291bnRlciB1c2VkIGZvciBhY3RpdmUgbWVzaGVzIGV2
YWx1YXRpb24gdGltZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlTWVzaGVzRXZhbHVhdGlvblRpbWU7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZUluc3RydW1lbnRh
dGlvbi5wcm90b3R5cGUsICJjYXB0dXJlQWN0aXZlTWVzaGVzRXZhbHVhdGlvblRpbWUiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBhY3RpdmUgbWVzaGVzIGV2YWx1YXRpb24g
dGltZSBjYXB0dXJlIHN0YXR1cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FwdHVyZUFjdGl2ZU1lc2hlc0V2YWx1YXRp
b25UaW1lOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogRW5hYmxlIG9yIGRp
c2FibGUgdGhlIGFjdGl2ZSBtZXNoZXMgZXZhbHVhdGlvbiB0aW1lIGNhcHR1cmUKKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9jYXB0dXJlQWN0aXZl
TWVzaGVzRXZhbHVhdGlvblRpbWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl9jYXB0dXJlQWN0aXZlTWVzaGVzRXZhbHVhdGlvblRp
bWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX29uQmVmb3JlQWN0aXZlTWVzaGVzRXZhbHVhdGlvbk9ic2VydmVyID0gdGhpcy5zY2VuZS5v
bkJlZm9yZUFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlRvb2xzIl0uU3RhcnRQZXJmb3JtYW5jZUNvdW50ZXIoIkFjdGl2ZSBtZXNoZXMgZXZh
bHVhdGlvbiIpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYWN0aXZlTWVzaGVzRXZhbHVh
dGlvblRpbWUuYmVnaW5Nb25pdG9yaW5nKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgdGhpcy5fb25BZnRlckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZlciA9IHRo
aXMuc2NlbmUub25BZnRlckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZhYmxlLmFkZChmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlRvb2xzIl0uRW5kUGVyZm9ybWFuY2VDb3VudGVyKCJBY3RpdmUgbWVz
aGVzIGV2YWx1YXRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FjdGl2ZU1lc2hl
c0V2YWx1YXRpb25UaW1lLmVuZE1vbml0b3JpbmcoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuc2Nl
bmUub25CZWZvcmVBY3RpdmVNZXNoZXNFdmFsdWF0aW9uT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5f
b25CZWZvcmVBY3RpdmVNZXNoZXNFdmFsdWF0aW9uT2JzZXJ2ZXIpOworICAgICAgICAgICAgICAg
IHRoaXMuX29uQmVmb3JlQWN0aXZlTWVzaGVzRXZhbHVhdGlvbk9ic2VydmVyID0gbnVsbDsKKyAg
ICAgICAgICAgICAgICB0aGlzLnNjZW5lLm9uQWZ0ZXJBY3RpdmVNZXNoZXNFdmFsdWF0aW9uT2Jz
ZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25BZnRlckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZl
cik7CisgICAgICAgICAgICAgICAgdGhpcy5fb25BZnRlckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25P
YnNlcnZlciA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJyZW5k
ZXJUYXJnZXRzUmVuZGVyVGltZUNvdW50ZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHRoZSBwZXJmIGNvdW50ZXIgdXNlZCBmb3IgcmVuZGVyIHRhcmdldHMgcmVuZGVyIHRpbWUK
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3JlbmRlclRhcmdldHNSZW5kZXJUaW1lOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAi
Y2FwdHVyZVJlbmRlclRhcmdldHNSZW5kZXJUaW1lIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgcmVuZGVyIHRhcmdldHMgcmVuZGVyIHRpbWUgY2FwdHVyZSBzdGF0dXMKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2NhcHR1cmVSZW5kZXJUYXJnZXRzUmVuZGVyVGltZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSByZW5kZXIgdGFyZ2V0cyBy
ZW5kZXIgdGltZSBjYXB0dXJlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgICAgIGlmICh2
YWx1ZSA9PT0gdGhpcy5fY2FwdHVyZVJlbmRlclRhcmdldHNSZW5kZXJUaW1lKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY2FwdHVy
ZVJlbmRlclRhcmdldHNSZW5kZXJUaW1lID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodmFsdWUp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkJlZm9yZVJlbmRlclRhcmdldHNSZW5kZXJPYnNl
cnZlciA9IHRoaXMuc2NlbmUub25CZWZvcmVSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2YWJsZS5h
ZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLlN0YXJ0UGVyZm9ybWFuY2VDb3VudGVyKCJS
ZW5kZXIgdGFyZ2V0cyByZW5kZXJpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Jl
bmRlclRhcmdldHNSZW5kZXJUaW1lLmJlZ2luTW9uaXRvcmluZygpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJSZW5kZXJUYXJnZXRzUmVuZGVyT2Jz
ZXJ2ZXIgPSB0aGlzLnNjZW5lLm9uQWZ0ZXJSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2YWJsZS5h
ZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLkVuZFBlcmZvcm1hbmNlQ291bnRlcigiUmVu
ZGVyIHRhcmdldHMgcmVuZGVyaW5nIik7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yZW5k
ZXJUYXJnZXRzUmVuZGVyVGltZS5lbmRNb25pdG9yaW5nKGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHRoaXMuc2NlbmUub25CZWZvcmVSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUo
dGhpcy5fb25CZWZvcmVSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2ZXIpOworICAgICAgICAgICAg
ICAgIHRoaXMuX29uQmVmb3JlUmVuZGVyVGFyZ2V0c1JlbmRlck9ic2VydmVyID0gbnVsbDsKKyAg
ICAgICAgICAgICAgICB0aGlzLnNjZW5lLm9uQWZ0ZXJSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2
YWJsZS5yZW1vdmUodGhpcy5fb25BZnRlclJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZlcik7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fb25BZnRlclJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZlciA9
IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJwYXJ0aWNsZXNSZW5k
ZXJUaW1lQ291bnRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmYg
Y291bnRlciB1c2VkIGZvciBwYXJ0aWNsZXMgcmVuZGVyIHRpbWUKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpY2xl
c1JlbmRlclRpbWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJjYXB0dXJlUGFydGljbGVzUmVuZGVy
VGltZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBhcnRpY2xlcyByZW5k
ZXIgdGltZSBjYXB0dXJlIHN0YXR1cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FwdHVyZVBhcnRpY2xlc1JlbmRlclRp
bWU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJs
ZSB0aGUgcGFydGljbGVzIHJlbmRlciB0aW1lIGNhcHR1cmUKKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9jYXB0dXJlUGFydGljbGVzUmVuZGVyVGlt
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX2NhcHR1cmVQYXJ0aWNsZXNSZW5kZXJUaW1lID0gdmFsdWU7CisgICAgICAgICAgICBp
ZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkJlZm9yZVBhcnRpY2xlc1JlbmRl
cmluZ09ic2VydmVyID0gdGhpcy5zY2VuZS5vbkJlZm9yZVBhcnRpY2xlc1JlbmRlcmluZ09ic2Vy
dmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5TdGFydFBlcmZvcm1hbmNlQ291
bnRlcigiUGFydGljbGVzIik7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wYXJ0aWNsZXNS
ZW5kZXJUaW1lLmJlZ2luTW9uaXRvcmluZygpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIHRoaXMuX29uQWZ0ZXJQYXJ0aWNsZXNSZW5kZXJpbmdPYnNlcnZlciA9IHRoaXMu
c2NlbmUub25BZnRlclBhcnRpY2xlc1JlbmRlcmluZ09ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVG9vbHMiXS5FbmRQZXJmb3JtYW5jZUNvdW50ZXIoIlBhcnRpY2xlcyIpOworICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5fcGFydGljbGVzUmVuZGVyVGltZS5lbmRNb25pdG9yaW5n
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUub25CZWZvcmVQYXJ0aWNsZXNSZW5k
ZXJpbmdPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkJlZm9yZVBhcnRpY2xlc1JlbmRlcmluZ09i
c2VydmVyKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkJlZm9yZVBhcnRpY2xlc1JlbmRlcmlu
Z09ic2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLm9uQWZ0ZXJQYXJ0
aWNsZXNSZW5kZXJpbmdPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFmdGVyUGFydGljbGVzUmVu
ZGVyaW5nT2JzZXJ2ZXIpOworICAgICAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJQYXJ0aWNsZXNS
ZW5kZXJpbmdPYnNlcnZlciA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5
cGUsICJzcHJpdGVzUmVuZGVyVGltZUNvdW50ZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBwZXJmIGNvdW50ZXIgdXNlZCBmb3Igc3ByaXRlcyByZW5kZXIgdGltZQorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fc3ByaXRlc1JlbmRlclRpbWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJjYXB0dXJlU3By
aXRlc1JlbmRlclRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBzcHJp
dGVzIHJlbmRlciB0aW1lIGNhcHR1cmUgc3RhdHVzCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXB0dXJlU3ByaXRlc1Jl
bmRlclRpbWU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3Ig
ZGlzYWJsZSB0aGUgc3ByaXRlcyByZW5kZXIgdGltZSBjYXB0dXJlCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIF90aGlzID0gdGhp
czsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fY2FwdHVyZVNwcml0ZXNSZW5kZXJU
aW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fY2FwdHVyZVNwcml0ZXNSZW5kZXJUaW1lID0gdmFsdWU7CisgICAgICAgICAgICBp
ZiAoIXRoaXMuc2NlbmUuc3ByaXRlTWFuYWdlcnMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9vbkJlZm9yZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZlciA9IHRoaXMuc2NlbmUub25C
ZWZvcmVTcHJpdGVzUmVuZGVyaW5nT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJU
b29scyJdLlN0YXJ0UGVyZm9ybWFuY2VDb3VudGVyKCJTcHJpdGVzIik7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl9zcHJpdGVzUmVuZGVyVGltZS5iZWdpbk1vbml0b3JpbmcoKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkFmdGVyU3ByaXRlc1JlbmRl
cmluZ09ic2VydmVyID0gdGhpcy5zY2VuZS5vbkFmdGVyU3ByaXRlc1JlbmRlcmluZ09ic2VydmFi
bGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5FbmRQZXJmb3JtYW5jZUNvdW50ZXIo
IlNwcml0ZXMiKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Nwcml0ZXNSZW5kZXJUaW1l
LmVuZE1vbml0b3JpbmcoZmFsc2UpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5vbkJlZm9y
ZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkJlZm9yZVNwcml0ZXNS
ZW5kZXJpbmdPYnNlcnZlcik7CisgICAgICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVTcHJpdGVz
UmVuZGVyaW5nT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUub25B
ZnRlclNwcml0ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFmdGVyU3ByaXRl
c1JlbmRlcmluZ09ic2VydmVyKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkFmdGVyU3ByaXRl
c1JlbmRlcmluZ09ic2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lSW5zdHJ1bWVudGF0aW9uLnByb3Rv
dHlwZSwgInBoeXNpY3NUaW1lQ291bnRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIHBlcmYgY291bnRlciB1c2VkIGZvciBwaHlzaWNzIHRpbWUKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BoeXNp
Y3NUaW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2Nl
bmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAiY2FwdHVyZVBoeXNpY3NUaW1lIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgcGh5c2ljcyB0aW1lIGNhcHR1cmUgc3RhdHVz
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9jYXB0dXJlUGh5c2ljc1RpbWU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgor
ICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgcGh5c2ljcyB0aW1lIGNhcHR1cmUKKyAg
ICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2
YXIgX3RoaXMgPSB0aGlzOworICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9jYXB0dXJl
UGh5c2ljc1RpbWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIXRoaXMuc2NlbmUub25CZWZvcmVQaHlzaWNzT2JzZXJ2YWJsZSkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X2NhcHR1cmVQaHlzaWNzVGltZSA9IHZhbHVlOworICAgICAgICAgICAgaWYgKHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVQaHlzaWNzT2JzZXJ2ZXIgPSB0aGlzLnNjZW5l
Lm9uQmVmb3JlUGh5c2ljc09ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMi
XS5TdGFydFBlcmZvcm1hbmNlQ291bnRlcigiUGh5c2ljcyIpOworICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5fcGh5c2ljc1RpbWUuYmVnaW5Nb25pdG9yaW5nKCk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgdGhpcy5fb25BZnRlclBoeXNpY3NPYnNlcnZlciA9IHRoaXMu
c2NlbmUub25BZnRlclBoeXNpY3NPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRv
b2xzIl0uRW5kUGVyZm9ybWFuY2VDb3VudGVyKCJQaHlzaWNzIik7CisgICAgICAgICAgICAgICAg
ICAgIF90aGlzLl9waHlzaWNzVGltZS5lbmRNb25pdG9yaW5nKCk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0
aGlzLnNjZW5lLm9uQmVmb3JlUGh5c2ljc09ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQmVmb3Jl
UGh5c2ljc09ic2VydmVyKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkJlZm9yZVBoeXNpY3NP
YnNlcnZlciA9IG51bGw7CisgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5vbkFmdGVyUGh5c2lj
c09ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJQaHlzaWNzT2JzZXJ2ZXIpOworICAgICAg
ICAgICAgICAgIHRoaXMuX29uQWZ0ZXJQaHlzaWNzT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAg
ICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmVJ
bnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAiYW5pbWF0aW9uc1RpbWVDb3VudGVyIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgcGVyZiBjb3VudGVyIHVzZWQgZm9yIGFuaW1h
dGlvbnMgdGltZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fYW5pbWF0aW9uc1RpbWU7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUs
ICJjYXB0dXJlQW5pbWF0aW9uc1RpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSBhbmltYXRpb25zIHRpbWUgY2FwdHVyZSBzdGF0dXMKKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHR1cmVBbmlt
YXRpb25zVGltZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuYWJsZSBv
ciBkaXNhYmxlIHRoZSBhbmltYXRpb25zIHRpbWUgY2FwdHVyZQorICAgICAgICAgKi8KKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX2NhcHR1cmVBbmltYXRpb25zVGltZSkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX2NhcHR1cmVBbmltYXRpb25zVGltZSA9IHZhbHVlOworICAgICAgICAgICAgaWYgKHZhbHVl
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fb25BZnRlckFuaW1hdGlvbnNPYnNlcnZlciA9IHRo
aXMuc2NlbmUub25BZnRlckFuaW1hdGlvbnNPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl9hbmltYXRpb25zVGltZS5lbmRNb25pdG9yaW5nKCk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLm9uQWZ0ZXJBbmltYXRpb25zT2JzZXJ2YWJsZS5y
ZW1vdmUodGhpcy5fb25BZnRlckFuaW1hdGlvbnNPYnNlcnZlcik7CisgICAgICAgICAgICAgICAg
dGhpcy5fb25BZnRlckFuaW1hdGlvbnNPYnNlcnZlciA9IG51bGw7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZUluc3RydW1l
bnRhdGlvbi5wcm90b3R5cGUsICJmcmFtZVRpbWVDb3VudGVyIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgcGVyZiBjb3VudGVyIHVzZWQgZm9yIGZyYW1lIHRpbWUgY2FwdHVy
ZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fZnJhbWVUaW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoU2NlbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAiY2FwdHVyZUZyYW1l
VGltZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGZyYW1lIHRpbWUgY2Fw
dHVyZSBzdGF0dXMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHR1cmVGcmFtZVRpbWU7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgZnJhbWUgdGltZSBjYXB0
dXJlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgdGhpcy5fY2FwdHVyZUZyYW1lVGltZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBl
LCAiaW50ZXJGcmFtZVRpbWVDb3VudGVyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgcGVyZiBjb3VudGVyIHVzZWQgZm9yIGludGVyLWZyYW1lcyB0aW1lIGNhcHR1cmUKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2ludGVyRnJhbWVUaW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoU2NlbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAiY2FwdHVyZUludGVy
RnJhbWVUaW1lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgaW50ZXItZnJh
bWVzIHRpbWUgY2FwdHVyZSBzdGF0dXMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHR1cmVJbnRlckZyYW1lVGltZTsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHRo
ZSBpbnRlci1mcmFtZXMgdGltZSBjYXB0dXJlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fY2FwdHVyZUludGVyRnJhbWVUaW1l
ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShT
Y2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJyZW5kZXJUaW1lQ291bnRlciIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmYgY291bnRlciB1c2VkIGZvciByZW5k
ZXIgdGltZSBjYXB0dXJlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJUaW1lOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBl
LCAiY2FwdHVyZVJlbmRlclRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSByZW5kZXIgdGltZSBjYXB0dXJlIHN0YXR1cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FwdHVyZVJlbmRlclRpbWU7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0
aGUgcmVuZGVyIHRpbWUgY2FwdHVyZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgICAgICBp
ZiAodmFsdWUgPT09IHRoaXMuX2NhcHR1cmVSZW5kZXJUaW1lKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY2FwdHVyZVJlbmRlclRp
bWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX29uQmVmb3JlRHJhd1BoYXNlT2JzZXJ2ZXIgPSB0aGlzLnNjZW5lLm9uQmVmb3JlRHJhd1Bo
YXNlT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fcmVuZGVyVGltZS5iZWdpbk1vbml0b3JpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgX01p
c2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5TdGFydFBlcmZv
cm1hbmNlQ291bnRlcigiTWFpbiByZW5kZXIiKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9vbkFmdGVyRHJhd1BoYXNlT2JzZXJ2ZXIgPSB0aGlzLnNjZW5lLm9u
QWZ0ZXJEcmF3UGhhc2VPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl9yZW5kZXJUaW1lLmVuZE1vbml0b3JpbmcoZmFsc2UpOworICAgICAgICAg
ICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29s
cyJdLkVuZFBlcmZvcm1hbmNlQ291bnRlcigiTWFpbiByZW5kZXIiKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHRoaXMuc2NlbmUub25CZWZvcmVEcmF3UGhhc2VPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkJl
Zm9yZURyYXdQaGFzZU9ic2VydmVyKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkJlZm9yZURy
YXdQaGFzZU9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLm9uQWZ0
ZXJEcmF3UGhhc2VPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFmdGVyRHJhd1BoYXNlT2JzZXJ2
ZXIpOworICAgICAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJEcmF3UGhhc2VPYnNlcnZlciA9IG51
bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShTY2VuZUluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUsICJjYW1lcmFSZW5kZXJUaW1l
Q291bnRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmYgY291bnRl
ciB1c2VkIGZvciBjYW1lcmEgcmVuZGVyIHRpbWUgY2FwdHVyZQorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhUmVu
ZGVyVGltZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNj
ZW5lSW5zdHJ1bWVudGF0aW9uLnByb3RvdHlwZSwgImNhcHR1cmVDYW1lcmFSZW5kZXJUaW1lIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgY2FtZXJhIHJlbmRlciB0aW1lIGNh
cHR1cmUgc3RhdHVzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9jYXB0dXJlQ2FtZXJhUmVuZGVyVGltZTsKKyAgICAgICAg
fSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBjYW1lcmEg
cmVuZGVyIHRpbWUgY2FwdHVyZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgICAgICBpZiAo
dmFsdWUgPT09IHRoaXMuX2NhcHR1cmVDYW1lcmFSZW5kZXJUaW1lKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY2FwdHVyZUNhbWVy
YVJlbmRlclRpbWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHRoaXMuX29uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIgPSB0aGlzLnNjZW5lLm9u
QmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGNhbWVyYSkgeworICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5fY2FtZXJhUmVuZGVyVGltZS5iZWdpbk1vbml0b3Jpbmco
KTsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVG9vbHMiXS5TdGFydFBlcmZvcm1hbmNlQ291bnRlcigiUmVuZGVyaW5nIGNhbWVy
YSAiICsgY2FtZXJhLm5hbWUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IHRoaXMuX29uQWZ0ZXJDYW1lcmFSZW5kZXJPYnNlcnZlciA9IHRoaXMuc2NlbmUub25BZnRlckNh
bWVyYVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX2NhbWVyYVJlbmRlclRpbWUuZW5kTW9uaXRvcmluZyhmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlRvb2xzIl0uRW5kUGVyZm9ybWFuY2VDb3VudGVyKCJSZW5kZXJpbmcgY2FtZXJhICIgKyBj
YW1lcmEubmFtZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLm9uQmVmb3JlQ2FtZXJhUmVu
ZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZlcik7
CisgICAgICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZlciA9IG51
bGw7CisgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5vbkFmdGVyQ2FtZXJhUmVuZGVyT2JzZXJ2
YWJsZS5yZW1vdmUodGhpcy5fb25BZnRlckNhbWVyYVJlbmRlck9ic2VydmVyKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9vbkFmdGVyQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIgPSBudWxsOworICAgICAg
ICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2Nl
bmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLCAiZHJhd0NhbGxzQ291bnRlciIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBlcmYgY291bnRlciB1c2VkIGZvciBkcmF3IGNh
bGxzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLnNjZW5lLmdldEVuZ2luZSgpLl9kcmF3Q2FsbHM7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8qKgorICAgICAqIERpc3Bvc2UgYW5kIHJlbGVhc2UgYXNzb2NpYXRlZCByZXNv
dXJjZXMuCisgICAgICovCisgICAgU2NlbmVJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLmRpc3Bv
c2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuc2NlbmUub25BZnRlclJlbmRlck9ic2Vy
dmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJSZW5kZXJPYnNlcnZlcik7CisgICAgICAgIHRoaXMu
X29uQWZ0ZXJSZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2NlbmUub25CZWZv
cmVBY3RpdmVNZXNoZXNFdmFsdWF0aW9uT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25CZWZvcmVB
Y3RpdmVNZXNoZXNFdmFsdWF0aW9uT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLl9vbkJlZm9yZUFj
dGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2NlbmUu
b25BZnRlckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFm
dGVyQWN0aXZlTWVzaGVzRXZhbHVhdGlvbk9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25BZnRl
ckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2Nl
bmUub25CZWZvcmVSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25C
ZWZvcmVSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLl9vbkJlZm9y
ZVJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2NlbmUu
b25BZnRlclJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFmdGVy
UmVuZGVyVGFyZ2V0c1JlbmRlck9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25BZnRlclJlbmRl
clRhcmdldHNSZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2NlbmUub25CZWZv
cmVBbmltYXRpb25zT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25CZWZvcmVBbmltYXRpb25zT2Jz
ZXJ2ZXIpOworICAgICAgICB0aGlzLl9vbkJlZm9yZUFuaW1hdGlvbnNPYnNlcnZlciA9IG51bGw7
CisgICAgICAgIHRoaXMuc2NlbmUub25CZWZvcmVQYXJ0aWNsZXNSZW5kZXJpbmdPYnNlcnZhYmxl
LnJlbW92ZSh0aGlzLl9vbkJlZm9yZVBhcnRpY2xlc1JlbmRlcmluZ09ic2VydmVyKTsKKyAgICAg
ICAgdGhpcy5fb25CZWZvcmVQYXJ0aWNsZXNSZW5kZXJpbmdPYnNlcnZlciA9IG51bGw7CisgICAg
ICAgIHRoaXMuc2NlbmUub25BZnRlclBhcnRpY2xlc1JlbmRlcmluZ09ic2VydmFibGUucmVtb3Zl
KHRoaXMuX29uQWZ0ZXJQYXJ0aWNsZXNSZW5kZXJpbmdPYnNlcnZlcik7CisgICAgICAgIHRoaXMu
X29uQWZ0ZXJQYXJ0aWNsZXNSZW5kZXJpbmdPYnNlcnZlciA9IG51bGw7CisgICAgICAgIGlmICh0
aGlzLl9vbkJlZm9yZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZlcikgeworICAgICAgICAgICAgdGhp
cy5zY2VuZS5vbkJlZm9yZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9v
bkJlZm9yZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZlcik7CisgICAgICAgICAgICB0aGlzLl9vbkJl
Zm9yZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZlciA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX29uQWZ0ZXJTcHJpdGVzUmVuZGVyaW5nT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAg
IHRoaXMuc2NlbmUub25BZnRlclNwcml0ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLnJlbW92ZSh0aGlz
Ll9vbkFmdGVyU3ByaXRlc1JlbmRlcmluZ09ic2VydmVyKTsKKyAgICAgICAgICAgIHRoaXMuX29u
QWZ0ZXJTcHJpdGVzUmVuZGVyaW5nT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAg
IHRoaXMuc2NlbmUub25CZWZvcmVEcmF3UGhhc2VPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkJl
Zm9yZURyYXdQaGFzZU9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25CZWZvcmVEcmF3UGhhc2VP
YnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2NlbmUub25BZnRlckRyYXdQaGFzZU9ic2Vy
dmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJEcmF3UGhhc2VPYnNlcnZlcik7CisgICAgICAgIHRo
aXMuX29uQWZ0ZXJEcmF3UGhhc2VPYnNlcnZlciA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLl9v
bkJlZm9yZVBoeXNpY3NPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5zY2VuZS5vbkJlZm9y
ZVBoeXNpY3NPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkJlZm9yZVBoeXNpY3NPYnNlcnZlcik7
CisgICAgICAgICAgICB0aGlzLl9vbkJlZm9yZVBoeXNpY3NPYnNlcnZlciA9IG51bGw7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29uQWZ0ZXJQaHlzaWNzT2JzZXJ2ZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMuc2NlbmUub25BZnRlclBoeXNpY3NPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9v
bkFmdGVyUGh5c2ljc09ic2VydmVyKTsKKyAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJQaHlzaWNz
T2JzZXJ2ZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuc2NlbmUub25BZnRlckFu
aW1hdGlvbnNPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFmdGVyQW5pbWF0aW9uc09ic2VydmVy
KTsKKyAgICAgICAgdGhpcy5fb25BZnRlckFuaW1hdGlvbnNPYnNlcnZlciA9IG51bGw7CisgICAg
ICAgIHRoaXMuc2NlbmUub25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlz
Ll9vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb25CZWZvcmVD
YW1lcmFSZW5kZXJPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuc2NlbmUub25BZnRlckNh
bWVyYVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJDYW1lcmFSZW5kZXJPYnNl
cnZlcik7CisgICAgICAgIHRoaXMuX29uQWZ0ZXJDYW1lcmFSZW5kZXJPYnNlcnZlciA9IG51bGw7
CisgICAgICAgIHRoaXMuc2NlbmUgPSBudWxsOworICAgIH07CisgICAgcmV0dXJuIFNjZW5lSW5z
dHJ1bWVudGF0aW9uOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9JbnN0cnVt
ZW50YXRpb24vdGltZVRva2VuLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9JbnN0cnVtZW50YXRpb24vdGltZVRva2VuLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IF9UaW1lVG9rZW4gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiX1RpbWVUb2tlbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1RpbWVUb2tlbjsgfSk7CisvKioK
KyAqIEBoaWRkZW4KKyAqKi8KK3ZhciBfVGltZVRva2VuID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgeworICAgIGZ1bmN0aW9uIF9UaW1lVG9rZW4oKSB7CisgICAgICAgIHRoaXMuX3RpbWVF
bGFwc2VkUXVlcnlFbmRlZCA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gX1RpbWVUb2tlbjsK
K30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTGF5ZXJzL2VmZmVjdExheWVyLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0xheWVy
cy9lZmZlY3RMYXllci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEVmZmVjdExheWVyICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdExheWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFZmZl
Y3RMYXllcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9u
b2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9y
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3Rvb2xz
ICovICIuL01pc2MvdG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29s
b3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5l
cy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVz
L2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVy
ZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1Rl
eHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJU
YXJnZXRUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRl
cmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL21hdGVyaWFsICovICIu
L01hdGVyaWFscy9tYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIgKi8gIi4vTWF0
ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFu
dHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19nbG93TWFwR2VuZXJh
dGlvbl9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZ2xvd01hcEdlbmVyYXRpb24uZnJhZ21lbnQgKi8gIi4v
U2hhZGVycy9nbG93TWFwR2VuZXJhdGlvbi5mcmFnbWVudC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9TaGFkZXJzX2dsb3dNYXBHZW5lcmF0aW9uX3ZlcnRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZ2xv
d01hcEdlbmVyYXRpb24udmVydGV4ICovICIuL1NoYWRlcnMvZ2xvd01hcEdlbmVyYXRpb24udmVy
dGV4LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGV2VG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNj
L2RldlRvb2xzICovICIuL01pc2MvZGV2VG9vbHMudHMiKTsKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisvKioKKyAqIFRoZSBlZmZlY3QgbGF5ZXIgSGVscHMgYWRkaW5nIHBvc3Qg
cHJvY2VzcyBlZmZlY3QgYmxlbmRlZCB3aXRoIHRoZSBtYWluIHBhc3MuCisgKgorICogVGhpcyBj
YW4gYmUgZm9yIGluc3RhbmNlIHVzZSB0byBnZW5lcmF0ZSBnbG93IG9yIGhpZ2xpZ2h0IGVmZmVj
dHMgb24gdGhlIHNjZW5lLgorICoKKyAqIFRoZSBlZmZlY3QgbGF5ZXIgY2xhc3MgY2FuIG5vdCBi
ZSB1c2VkIGRpcmVjdGx5IGFuZCBpcyBpbnRlbnRlZCB0byBpbmhlcml0ZWQgZnJvbSB0byBiZQor
ICogY3VzdG9taXplZCBwZXIgZWZmZWN0cy4KKyAqLwordmFyIEVmZmVjdExheWVyID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5l
dyBlZmZlY3QgTGF5ZXIgYW5kIHJlZmVyZW5jZXMgaXQgaW4gdGhlIHNjZW5lLgorICAgICAqIEBw
YXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBsYXllcgorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUg
c2NlbmUgdG8gdXNlIHRoZSBsYXllciBpbgorICAgICAqLworICAgIGZ1bmN0aW9uIEVmZmVjdExh
eWVyKAorICAgIC8qKiBUaGUgRnJpZW5kbHkgb2YgdGhlIGVmZmVjdCBpbiB0aGUgc2NlbmUgKi8K
KyAgICBuYW1lLCBzY2VuZSkgeworICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzID0ge307Cisg
ICAgICAgIHRoaXMuX21heFNpemUgPSAwOworICAgICAgICB0aGlzLl9tYWluVGV4dHVyZURlc2ly
ZWRTaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07CisgICAgICAgIHRoaXMuX3Nob3VsZFJl
bmRlciA9IHRydWU7CisgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzZXMgPSBbXTsKKyAgICAgICAg
dGhpcy5fdGV4dHVyZXMgPSBbXTsKKyAgICAgICAgdGhpcy5fZW1pc3NpdmVUZXh0dXJlQW5kQ29s
b3IgPSB7IHRleHR1cmU6IG51bGwsIGNvbG9yOiBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29sb3I0Il0oKSB9OworICAgICAgICAvKioKKyAgICAg
ICAgICogVGhlIGNsZWFyIGNvbG9yIG9mIHRoZSB0ZXh0dXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhl
IGdsb3cgbWFwLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5uZXV0cmFsQ29sb3IgPSBuZXcg
X01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29sb3I0Il0o
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyB3ZXRoZXIgdGhlIGhpZ2hsaWdo
dCBsYXllciBpcyBlbmFibGVkIG9yIG5vdC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaXNF
bmFibGVkID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJl
ZCB3aGVuIHRoZSBlZmZlY3QgbGF5ZXIgaGFzIGJlZW4gZGlzcG9zZWQuCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBlZmZlY3QgbGF5ZXIgaXMg
YWJvdXQgcmVuZGVyaW5nIHRoZSBtYWluIHRleHR1cmUgd2l0aCB0aGUgZ2xvd3kgcGFydHMuCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLm9uQmVmb3JlUmVuZGVyTWFpblRleHR1cmVPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBbiBldmVudCB0cmlnZ2Vy
ZWQgd2hlbiB0aGUgZ2VuZXJhdGVkIHRleHR1cmUgaXMgYmVpbmcgbWVyZ2VkIGluIHRoZSBzY2Vu
ZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25CZWZvcmVDb21wb3NlT2JzZXJ2YWJsZSA9
IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2Vy
dmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdo
ZW4gdGhlIGdlbmVyYXRlZCB0ZXh0dXJlIGhhcyBiZWVuIG1lcmdlZCBpbiB0aGUgc2NlbmUuCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLm9uQWZ0ZXJDb21wb3NlT2JzZXJ2YWJsZSA9IG5ldyBf
TWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUi
XSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhl
IGVmZmZlY3QgbGF5ZXIgY2hhbmdlcyBpdHMgc2l6ZS4KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMub25TaXplQ2hhbmdlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgdGhpcy5uYW1l
ID0gbmFtZTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8fCBfRW5naW5lc19lbmdpbmVT
dG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVh
dGVkU2NlbmU7CisgICAgICAgIEVmZmVjdExheWVyLl9TY2VuZUNvbXBvbmVudEluaXRpYWxpemF0
aW9uKHRoaXMuX3NjZW5lKTsKKyAgICAgICAgdGhpcy5fZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0
RW5naW5lKCk7CisgICAgICAgIHRoaXMuX21heFNpemUgPSB0aGlzLl9lbmdpbmUuZ2V0Q2Fwcygp
Lm1heFRleHR1cmVTaXplOworICAgICAgICB0aGlzLl9zY2VuZS5lZmZlY3RMYXllcnMucHVzaCh0
aGlzKTsKKyAgICAgICAgLy8gR2VuZXJhdGUgQnVmZmVycworICAgICAgICB0aGlzLl9nZW5lcmF0
ZUluZGV4QnVmZmVyKCk7CisgICAgICAgIHRoaXMuX2dlbmVyYXRlVmVydGV4QnVmZmVyKCk7Cisg
ICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFZmZlY3RMYXllci5wcm90b3R5cGUsICJj
YW1lcmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjYW1lcmEgYXR0YWNo
ZWQgdG8gdGhlIGxheWVyLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZWZmZWN0TGF5ZXJPcHRpb25zLmNhbWVyYTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVmZmVjdExheWVyLnBy
b3RvdHlwZSwgInJlbmRlcmluZ0dyb3VwSWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHRoZSByZW5kZXJpbmcgZ3JvdXAgaWQgdGhlIGxheWVyIHNob3VsZCByZW5kZXIgaW4uCisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9lZmZlY3RMYXllck9wdGlvbnMucmVuZGVyaW5nR3JvdXBJZDsKKyAgICAgICAgfSwK
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAocmVuZGVyaW5nR3JvdXBJZCkgeworICAgICAgICAgICAg
dGhpcy5fZWZmZWN0TGF5ZXJPcHRpb25zLnJlbmRlcmluZ0dyb3VwSWQgPSByZW5kZXJpbmdHcm91
cElkOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUg
ZWZmZWN0IGxheWVyIHdpdGggdGhlIHJlcXVpcmVkIG9wdGlvbnMuCisgICAgICogQHBhcmFtIG9w
dGlvbnMgU2V0cyBvZiBub25lIG1hbmRhdG9yeSBvcHRpb25zIHRvIHVzZSB3aXRoIHRoZSBsYXll
ciAoc2VlIElFZmZlY3RMYXllck9wdGlvbnMgZm9yIG1vcmUgaW5mb3JtYXRpb24pCisgICAgICov
CisgICAgRWZmZWN0TGF5ZXIucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsK
KyAgICAgICAgLy8gQWRhcHQgb3B0aW9ucworICAgICAgICB0aGlzLl9lZmZlY3RMYXllck9wdGlv
bnMgPSB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fzc2lnbiJdKHsgbWFp
blRleHR1cmVSYXRpbzogMC41LCBhbHBoYUJsZW5kaW5nTW9kZTogX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJDb25zdGFudHMiXS5BTFBIQV9DT01CSU5F
LCBjYW1lcmE6IG51bGwsIHJlbmRlcmluZ0dyb3VwSWQ6IC0xIH0sIG9wdGlvbnMpOworICAgICAg
ICB0aGlzLl9zZXRNYWluVGV4dHVyZVNpemUoKTsKKyAgICAgICAgdGhpcy5fY3JlYXRlTWFpblRl
eHR1cmUoKTsKKyAgICAgICAgdGhpcy5fY3JlYXRlVGV4dHVyZUFuZFBvc3RQcm9jZXNzZXMoKTsK
KyAgICAgICAgdGhpcy5fbWVyZ2VFZmZlY3QgPSB0aGlzLl9jcmVhdGVNZXJnZUVmZmVjdCgpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogR2VuZXJhdGVzIHRoZSBpbmRleCBidWZmZXIgb2YgdGhl
IGZ1bGwgc2NyZWVuIHF1YWQgYmxlbmRpbmcgdG8gdGhlIG1haW4gY2FudmFzLgorICAgICAqLwor
ICAgIEVmZmVjdExheWVyLnByb3RvdHlwZS5fZ2VuZXJhdGVJbmRleEJ1ZmZlciA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgLy8gSW5kaWNlcworICAgICAgICB2YXIgaW5kaWNlcyA9IFtdOworICAg
ICAgICBpbmRpY2VzLnB1c2goMCk7CisgICAgICAgIGluZGljZXMucHVzaCgxKTsKKyAgICAgICAg
aW5kaWNlcy5wdXNoKDIpOworICAgICAgICBpbmRpY2VzLnB1c2goMCk7CisgICAgICAgIGluZGlj
ZXMucHVzaCgyKTsKKyAgICAgICAgaW5kaWNlcy5wdXNoKDMpOworICAgICAgICB0aGlzLl9pbmRl
eEJ1ZmZlciA9IHRoaXMuX2VuZ2luZS5jcmVhdGVJbmRleEJ1ZmZlcihpbmRpY2VzKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdlbmVyYXRlcyB0aGUgdmVydGV4IGJ1ZmZlciBvZiB0aGUgZnVs
bCBzY3JlZW4gcXVhZCBibGVuZGluZyB0byB0aGUgbWFpbiBjYW52YXMuCisgICAgICovCisgICAg
RWZmZWN0TGF5ZXIucHJvdG90eXBlLl9nZW5lcmF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgLy8gVkJPCisgICAgICAgIHZhciB2ZXJ0aWNlcyA9IFtdOworICAgICAgICB2
ZXJ0aWNlcy5wdXNoKDEsIDEpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKC0xLCAxKTsKKyAgICAg
ICAgdmVydGljZXMucHVzaCgtMSwgLTEpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKDEsIC0xKTsK
KyAgICAgICAgdmFyIHZlcnRleEJ1ZmZlciA9IG5ldyBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJWZXJ0ZXhCdWZmZXIiXSh0aGlzLl9lbmdpbmUsIHZlcnRpY2Vz
LCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZXJ0ZXhCdWZm
ZXIiXS5Qb3NpdGlvbktpbmQsIGZhbHNlLCBmYWxzZSwgMik7CisgICAgICAgIHRoaXMuX3ZlcnRl
eEJ1ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVy
dGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXSA9IHZlcnRleEJ1ZmZlcjsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFNldHMgdGhlIG1haW4gdGV4dHVyZSBkZXNpcmVkIHNpemUgd2hpY2ggaXMgdGhl
IGNsb3Nlc3QgcG93ZXIgb2YgdHdvCisgICAgICogb2YgdGhlIGVuZ2luZSBjYW52YXMgc2l6ZS4K
KyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuX3NldE1haW5UZXh0dXJlU2l6ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2VmZmVjdExheWVyT3B0aW9ucy5tYWlu
VGV4dHVyZUZpeGVkU2l6ZSkgeworICAgICAgICAgICAgdGhpcy5fbWFpblRleHR1cmVEZXNpcmVk
U2l6ZS53aWR0aCA9IHRoaXMuX2VmZmVjdExheWVyT3B0aW9ucy5tYWluVGV4dHVyZUZpeGVkU2l6
ZTsKKyAgICAgICAgICAgIHRoaXMuX21haW5UZXh0dXJlRGVzaXJlZFNpemUuaGVpZ2h0ID0gdGhp
cy5fZWZmZWN0TGF5ZXJPcHRpb25zLm1haW5UZXh0dXJlRml4ZWRTaXplOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fbWFpblRleHR1cmVEZXNpcmVkU2l6ZS53
aWR0aCA9IHRoaXMuX2VuZ2luZS5nZXRSZW5kZXJXaWR0aCgpICogdGhpcy5fZWZmZWN0TGF5ZXJP
cHRpb25zLm1haW5UZXh0dXJlUmF0aW87CisgICAgICAgICAgICB0aGlzLl9tYWluVGV4dHVyZURl
c2lyZWRTaXplLmhlaWdodCA9IHRoaXMuX2VuZ2luZS5nZXRSZW5kZXJIZWlnaHQoKSAqIHRoaXMu
X2VmZmVjdExheWVyT3B0aW9ucy5tYWluVGV4dHVyZVJhdGlvOworICAgICAgICAgICAgdGhpcy5f
bWFpblRleHR1cmVEZXNpcmVkU2l6ZS53aWR0aCA9IHRoaXMuX2VuZ2luZS5uZWVkUE9UVGV4dHVy
ZXMgPyBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRW5naW5l
Il0uR2V0RXhwb25lbnRPZlR3byh0aGlzLl9tYWluVGV4dHVyZURlc2lyZWRTaXplLndpZHRoLCB0
aGlzLl9tYXhTaXplKSA6IHRoaXMuX21haW5UZXh0dXJlRGVzaXJlZFNpemUud2lkdGg7CisgICAg
ICAgICAgICB0aGlzLl9tYWluVGV4dHVyZURlc2lyZWRTaXplLmhlaWdodCA9IHRoaXMuX2VuZ2lu
ZS5uZWVkUE9UVGV4dHVyZXMgPyBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siRW5naW5lIl0uR2V0RXhwb25lbnRPZlR3byh0aGlzLl9tYWluVGV4dHVyZURlc2ly
ZWRTaXplLmhlaWdodCwgdGhpcy5fbWF4U2l6ZSkgOiB0aGlzLl9tYWluVGV4dHVyZURlc2lyZWRT
aXplLmhlaWdodDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9tYWluVGV4dHVyZURlc2lyZWRT
aXplLndpZHRoID0gTWF0aC5mbG9vcih0aGlzLl9tYWluVGV4dHVyZURlc2lyZWRTaXplLndpZHRo
KTsKKyAgICAgICAgdGhpcy5fbWFpblRleHR1cmVEZXNpcmVkU2l6ZS5oZWlnaHQgPSBNYXRoLmZs
b29yKHRoaXMuX21haW5UZXh0dXJlRGVzaXJlZFNpemUuaGVpZ2h0KTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgdGhlIG1haW4gdGV4dHVyZSBmb3IgdGhlIGVmZmVjdCBsYXllci4K
KyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuX2NyZWF0ZU1haW5UZXh0dXJlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl9t
YWluVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdKCJIaWdo
bGlnaHRMYXllck1haW5SVFQiLCB7CisgICAgICAgICAgICB3aWR0aDogdGhpcy5fbWFpblRleHR1
cmVEZXNpcmVkU2l6ZS53aWR0aCwKKyAgICAgICAgICAgIGhlaWdodDogdGhpcy5fbWFpblRleHR1
cmVEZXNpcmVkU2l6ZS5oZWlnaHQKKyAgICAgICAgfSwgdGhpcy5fc2NlbmUsIGZhbHNlLCB0cnVl
LCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkNvbnN0
YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCk7CisgICAgICAgIHRoaXMuX21haW5UZXh0
dXJlLmFjdGl2ZUNhbWVyYSA9IHRoaXMuX2VmZmVjdExheWVyT3B0aW9ucy5jYW1lcmE7CisgICAg
ICAgIHRoaXMuX21haW5UZXh0dXJlLndyYXBVID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNTTU9E
RTsKKyAgICAgICAgdGhpcy5fbWFpblRleHR1cmUud3JhcFYgPSBfTWF0ZXJpYWxzX1RleHR1cmVz
X3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVGV4dHVyZSJdLkNMQU1QX0FE
RFJFU1NNT0RFOworICAgICAgICB0aGlzLl9tYWluVGV4dHVyZS5hbmlzb3Ryb3BpY0ZpbHRlcmlu
Z0xldmVsID0gMTsKKyAgICAgICAgdGhpcy5fbWFpblRleHR1cmUudXBkYXRlU2FtcGxpbmdNb2Rl
KF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
WyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFKTsKKyAgICAgICAgdGhpcy5fbWFpblRl
eHR1cmUucmVuZGVyUGFydGljbGVzID0gZmFsc2U7CisgICAgICAgIHRoaXMuX21haW5UZXh0dXJl
LnJlbmRlckxpc3QgPSBudWxsOworICAgICAgICB0aGlzLl9tYWluVGV4dHVyZS5pZ25vcmVDYW1l
cmFWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIC8vIEN1c3RvbSByZW5kZXIgZnVuY3Rpb24KKyAg
ICAgICAgdGhpcy5fbWFpblRleHR1cmUuY3VzdG9tUmVuZGVyRnVuY3Rpb24gPSBmdW5jdGlvbiAo
b3BhcXVlU3ViTWVzaGVzLCBhbHBoYVRlc3RTdWJNZXNoZXMsIHRyYW5zcGFyZW50U3ViTWVzaGVz
LCBkZXB0aE9ubHlTdWJNZXNoZXMpIHsKKyAgICAgICAgICAgIF90aGlzLm9uQmVmb3JlUmVuZGVy
TWFpblRleHR1cmVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhfdGhpcyk7CisgICAgICAgICAg
ICB2YXIgaW5kZXg7CisgICAgICAgICAgICB2YXIgZW5naW5lID0gX3RoaXMuX3NjZW5lLmdldEVu
Z2luZSgpOworICAgICAgICAgICAgaWYgKGRlcHRoT25seVN1Yk1lc2hlcy5sZW5ndGgpIHsKKyAg
ICAgICAgICAgICAgICBlbmdpbmUuc2V0Q29sb3JXcml0ZShmYWxzZSk7CisgICAgICAgICAgICAg
ICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZGVwdGhPbmx5U3ViTWVzaGVzLmxlbmd0aDsgaW5k
ZXgrKykgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcmVuZGVyU3ViTWVzaChkZXB0aE9u
bHlTdWJNZXNoZXMuZGF0YVtpbmRleF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbmdpbmUuc2V0Q29sb3JXcml0ZSh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG9wYXF1ZVN1Yk1lc2hlcy5sZW5ndGg7IGluZGV4
KyspIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fcmVuZGVyU3ViTWVzaChvcGFxdWVTdWJNZXNo
ZXMuZGF0YVtpbmRleF0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbmRleCA9
IDA7IGluZGV4IDwgYWxwaGFUZXN0U3ViTWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgICAgIF90aGlzLl9yZW5kZXJTdWJNZXNoKGFscGhhVGVzdFN1Yk1lc2hlcy5kYXRhW2lu
ZGV4XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcHJldmlvdXNBbHBoYU1vZGUg
PSBlbmdpbmUuZ2V0QWxwaGFNb2RlKCk7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5k
ZXggPCB0cmFuc3BhcmVudFN1Yk1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAg
ICAgICBfdGhpcy5fcmVuZGVyU3ViTWVzaCh0cmFuc3BhcmVudFN1Yk1lc2hlcy5kYXRhW2luZGV4
XSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbmdpbmUuc2V0QWxwaGFNb2Rl
KHByZXZpb3VzQWxwaGFNb2RlKTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fbWFpblRleHR1
cmUub25DbGVhck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlbmdpbmUpIHsKKyAgICAgICAgICAg
IGVuZ2luZS5jbGVhcihfdGhpcy5uZXV0cmFsQ29sb3IsIHRydWUsIHRydWUsIHRydWUpOworICAg
ICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgc3BlY2lmaWMgZWZmZWN0cyBk
ZWZpbmVzLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIFRoZSBkZWZpbmVzIHRvIGFkZCBzcGVjaWZp
Y3MgdG8uCisgICAgICovCisgICAgRWZmZWN0TGF5ZXIucHJvdG90eXBlLl9hZGRDdXN0b21FZmZl
Y3REZWZpbmVzID0gZnVuY3Rpb24gKGRlZmluZXMpIHsKKyAgICAgICAgLy8gTm90aGluZyB0byBh
ZGQgYnkgZGVmYXVsdC4KKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyBmb3IgdGhlIHJl
YWRpbmVzcyBvZiB0aGUgZWxlbWVudCBjb21wb3NpbmcgdGhlIGxheWVyLgorICAgICAqIEBwYXJh
bSBzdWJNZXNoIHRoZSBtZXNoIHRvIGNoZWNrIGZvcgorICAgICAqIEBwYXJhbSB1c2VJbnN0YW5j
ZXMgc3BlY2lmeSB3ZXRoZXIgb3Igbm90IHRvIHVzZSBpbnN0YW5jZXMgdG8gcmVuZGVyIHRoZSBt
ZXNoCisgICAgICogQHBhcmFtIGVtaXNzaXZlVGV4dHVyZSB0aGUgYXNzb2NpYXRlZCBlbWlzc2l2
ZSB0ZXh0dXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGdsb3cKKyAgICAgKiBAcmV0dXJuIHRydWUg
aWYgcmVhZHkgb3RoZXJ3aXNlLCBmYWxzZQorICAgICAqLworICAgIEVmZmVjdExheWVyLnByb3Rv
dHlwZS5faXNSZWFkeSA9IGZ1bmN0aW9uIChzdWJNZXNoLCB1c2VJbnN0YW5jZXMsIGVtaXNzaXZl
VGV4dHVyZSkgeworICAgICAgICB2YXIgbWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7
CisgICAgICAgIGlmICghbWF0ZXJpYWwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIW1hdGVyaWFsLmlzUmVhZHlGb3JTdWJNZXNoKHN1Yk1lc2gu
Z2V0TWVzaCgpLCBzdWJNZXNoLCB1c2VJbnN0YW5jZXMpKSB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRlZmluZXMgPSBbXTsKKyAgICAgICAgdmFy
IGF0dHJpYnMgPSBbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
VmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgdmFyIG1lc2ggPSBzdWJNZXNo
LmdldE1lc2goKTsKKyAgICAgICAgdmFyIHV2MSA9IGZhbHNlOworICAgICAgICB2YXIgdXYyID0g
ZmFsc2U7CisgICAgICAgIC8vIERpZmZ1c2UKKyAgICAgICAgaWYgKG1hdGVyaWFsKSB7CisgICAg
ICAgICAgICB2YXIgbmVlZEFscGhhVGVzdCA9IG1hdGVyaWFsLm5lZWRBbHBoYVRlc3RpbmcoKTsK
KyAgICAgICAgICAgIHZhciBkaWZmdXNlVGV4dHVyZSA9IG1hdGVyaWFsLmdldEFscGhhVGVzdFRl
eHR1cmUoKTsKKyAgICAgICAgICAgIHZhciBuZWVkQWxwaGFCbGVuZEZyb21EaWZmdXNlID0gZGlm
ZnVzZVRleHR1cmUgJiYgZGlmZnVzZVRleHR1cmUuaGFzQWxwaGEgJiYKKyAgICAgICAgICAgICAg
ICAobWF0ZXJpYWwudXNlQWxwaGFGcm9tRGlmZnVzZVRleHR1cmUgfHwgbWF0ZXJpYWwuX3VzZUFs
cGhhRnJvbUFsYmVkb1RleHR1cmUpOworICAgICAgICAgICAgaWYgKGRpZmZ1c2VUZXh0dXJlICYm
IChuZWVkQWxwaGFUZXN0IHx8IG5lZWRBbHBoYUJsZW5kRnJvbURpZmZ1c2UpKSB7CisgICAgICAg
ICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIERJRkZVU0UiKTsKKyAgICAgICAgICAgICAg
ICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4QnVmZmVyIl0uVVYyS2luZCkgJiYKKyAgICAgICAg
ICAgICAgICAgICAgZGlmZnVzZVRleHR1cmUuY29vcmRpbmF0ZXNJbmRleCA9PT0gMSkgeworICAg
ICAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgRElGRlVTRVVWMiIpOworICAg
ICAgICAgICAgICAgICAgICB1djIgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChtZXNoLmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpKSB7
CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBESUZGVVNFVVYxIik7
CisgICAgICAgICAgICAgICAgICAgIHV2MSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChuZWVkQWxwaGFUZXN0KSB7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmluZXMucHVzaCgiI2RlZmluZSBBTFBIQVRFU1QiKTsKKyAgICAgICAgICAgICAgICAgICAgZGVm
aW5lcy5wdXNoKCIjZGVmaW5lIEFMUEhBVEVTVFZBTFVFIDAuNCIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBvcGFjaXR5VGV4dHVyZSA9IG1hdGVy
aWFsLm9wYWNpdHlUZXh0dXJlOworICAgICAgICAgICAgaWYgKG9wYWNpdHlUZXh0dXJlKSB7Cisg
ICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIE9QQUNJVFkiKTsKKyAgICAgICAg
ICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4QnVmZmVyIl0uVVYyS2luZCkgJiYKKyAg
ICAgICAgICAgICAgICAgICAgb3BhY2l0eVRleHR1cmUuY29vcmRpbmF0ZXNJbmRleCA9PT0gMSkg
eworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgT1BBQ0lUWVVWMiIp
OworICAgICAgICAgICAgICAgICAgICB1djIgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChtZXNoLmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktp
bmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBPUEFDSVRZ
VVYxIik7CisgICAgICAgICAgICAgICAgICAgIHV2MSA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEVtaXNzaXZlCisgICAgICAg
IGlmIChlbWlzc2l2ZVRleHR1cmUpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmlu
ZSBFTUlTU0lWRSIpOworICAgICAgICAgICAgaWYgKG1lc2guaXNWZXJ0aWNlc0RhdGFQcmVzZW50
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1ZmZl
ciJdLlVWMktpbmQpICYmCisgICAgICAgICAgICAgICAgZW1pc3NpdmVUZXh0dXJlLmNvb3JkaW5h
dGVzSW5kZXggPT09IDEpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUg
RU1JU1NJVkVVVjIiKTsKKyAgICAgICAgICAgICAgICB1djIgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4QnVmZmVyIl0uVVZL
aW5kKSkgeworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBFTUlTU0lWRVVW
MSIpOworICAgICAgICAgICAgICAgIHV2MSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgLy8gVmVydGV4CisgICAgICAgIGlmIChtZXNoLmlzVmVydGljZXNEYXRhUHJl
c2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZXJ0ZXhC
dWZmZXIiXS5Db2xvcktpbmQpICYmIG1lc2guaGFzVmVydGV4QWxwaGEpIHsKKyAgICAgICAgICAg
IGF0dHJpYnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQpOworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIj
ZGVmaW5lIFZFUlRFWEFMUEhBIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHV2MSkgeworICAg
ICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCk7CisgICAgICAgICAgICBkZWZpbmVzLnB1
c2goIiNkZWZpbmUgVVYxIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHV2MikgeworICAgICAg
ICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIlZlcnRleEJ1ZmZlciJdLlVWMktpbmQpOworICAgICAgICAgICAgZGVmaW5lcy5wdXNo
KCIjZGVmaW5lIFVWMiIpOworICAgICAgICB9CisgICAgICAgIC8vIEJvbmVzCisgICAgICAgIHZh
ciBmYWxsYmFja3MgPSBuZXcgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEwX19bIkVmZmVjdEZhbGxiYWNrcyJdKCk7CisgICAgICAgIGlmIChtZXNoLnVzZUJvbmVz
ICYmIG1lc2guY29tcHV0ZUJvbmVzVXNpbmdTaGFkZXJzKSB7CisgICAgICAgICAgICBhdHRyaWJz
LnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4
QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCk7CisgICAgICAgICAgICBhdHRyaWJzLnB1c2go
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4QnVmZmVy
Il0uTWF0cmljZXNXZWlnaHRzS2luZCk7CisgICAgICAgICAgICBpZiAobWVzaC5udW1Cb25lSW5m
bHVlbmNlcnMgPiA0KSB7CisgICAgICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2Vz
SW5kaWNlc0V4dHJhS2luZCk7CisgICAgICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLk1hdHJp
Y2VzV2VpZ2h0c0V4dHJhS2luZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZpbmVz
LnB1c2goIiNkZWZpbmUgTlVNX0JPTkVfSU5GTFVFTkNFUlMgIiArIG1lc2gubnVtQm9uZUluZmx1
ZW5jZXJzKTsKKyAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IG1lc2guc2tlbGV0b247CisgICAg
ICAgICAgICBpZiAoc2tlbGV0b24gJiYgc2tlbGV0b24uaXNVc2luZ1RleHR1cmVGb3JNYXRyaWNl
cykgeworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBCT05FVEVYVFVSRSIp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZGVm
aW5lcy5wdXNoKCIjZGVmaW5lIEJvbmVzUGVyTWVzaCAiICsgKHNrZWxldG9uID8gKHNrZWxldG9u
LmJvbmVzLmxlbmd0aCArIDEpIDogMCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KG1lc2gubnVtQm9uZUluZmx1ZW5jZXJzID4gMCkgeworICAgICAgICAgICAgICAgIGZhbGxiYWNr
cy5hZGRDUFVTa2lubmluZ0ZhbGxiYWNrKDAsIG1lc2gpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIE5V
TV9CT05FX0lORkxVRU5DRVJTIDAiKTsKKyAgICAgICAgfQorICAgICAgICAvLyBNb3JwaCB0YXJn
ZXRzCisgICAgICAgIHZhciBtYW5hZ2VyID0gbWVzaC5tb3JwaFRhcmdldE1hbmFnZXI7CisgICAg
ICAgIHZhciBtb3JwaEluZmx1ZW5jZXJzID0gMDsKKyAgICAgICAgaWYgKG1hbmFnZXIpIHsKKyAg
ICAgICAgICAgIGlmIChtYW5hZ2VyLm51bUluZmx1ZW5jZXJzID4gMCkgeworICAgICAgICAgICAg
ICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBNT1JQSFRBUkdFVFMiKTsKKyAgICAgICAgICAgICAg
ICBtb3JwaEluZmx1ZW5jZXJzID0gbWFuYWdlci5udW1JbmZsdWVuY2VyczsKKyAgICAgICAgICAg
ICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgTlVNX01PUlBIX0lORkxVRU5DRVJTICIgKyBtb3Jw
aEluZmx1ZW5jZXJzKTsKKyAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVB
dHRyaWJ1dGVzRm9yTW9ycGhUYXJnZXRzSW5mbHVlbmNlcnMoYXR0cmlicywgbWVzaCwgbW9ycGhJ
bmZsdWVuY2Vycyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5zdGFu
Y2VzCisgICAgICAgIGlmICh1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVz
aCgiI2RlZmluZSBJTlNUQU5DRVMiKTsKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxI
ZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIk1hdGVyaWFsSGVscGVyIl0uUHVz
aEF0dHJpYnV0ZXNGb3JJbnN0YW5jZXMoYXR0cmlicyk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fYWRkQ3VzdG9tRWZmZWN0RGVmaW5lcyhkZWZpbmVzKTsKKyAgICAgICAgLy8gR2V0IGNvcnJl
Y3QgZWZmZWN0CisgICAgICAgIHZhciBqb2luID0gZGVmaW5lcy5qb2luKCJcbiIpOworICAgICAg
ICBpZiAodGhpcy5fY2FjaGVkRGVmaW5lcyAhPT0gam9pbikgeworICAgICAgICAgICAgdGhpcy5f
Y2FjaGVkRGVmaW5lcyA9IGpvaW47CisgICAgICAgICAgICB0aGlzLl9lZmZlY3RMYXllck1hcEdl
bmVyYXRpb25FZmZlY3QgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5jcmVhdGVFZmZlY3QoImds
b3dNYXBHZW5lcmF0aW9uIiwgYXR0cmlicywgWyJ3b3JsZCIsICJtQm9uZXMiLCAidmlld1Byb2pl
Y3Rpb24iLAorICAgICAgICAgICAgICAgICJnbG93Q29sb3IiLCAibW9ycGhUYXJnZXRJbmZsdWVu
Y2VzIiwgImJvbmVUZXh0dXJlV2lkdGgiLAorICAgICAgICAgICAgICAgICJkaWZmdXNlTWF0cml4
IiwgImVtaXNzaXZlTWF0cml4IiwgIm9wYWNpdHlNYXRyaXgiLCAib3BhY2l0eUludGVuc2l0eSJd
LCBbImRpZmZ1c2VTYW1wbGVyIiwgImVtaXNzaXZlU2FtcGxlciIsICJvcGFjaXR5U2FtcGxlciIs
ICJib25lU2FtcGxlciJdLCBqb2luLCBmYWxsYmFja3MsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7
IG1heFNpbXVsdGFuZW91c01vcnBoVGFyZ2V0czogbW9ycGhJbmZsdWVuY2VycyB9KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fZWZmZWN0TGF5ZXJNYXBHZW5lcmF0aW9uRWZmZWN0
LmlzUmVhZHkoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbmRlcnMgdGhlIGdsb3dpbmcg
cGFydCBvZiB0aGUgc2NlbmUgYnkgYmxlbmRpbmcgdGhlIGJsdXJyZWQgZ2xvd2luZyBtZXNoZXMg
b24gdG9wIG9mIHRoZSByZW5kZXJlZCBzY2VuZS4KKyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5w
cm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgY3VycmVudEVmZmVj
dCA9IHRoaXMuX21lcmdlRWZmZWN0OworICAgICAgICAvLyBDaGVjaworICAgICAgICBpZiAoIWN1
cnJlbnRFZmZlY3QuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wb3N0UHJvY2Vzc2VzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3Bvc3RQcm9jZXNzZXNbaV0uaXNSZWFkeSgp
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgdGhp
cy5vbkJlZm9yZUNvbXBvc2VPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAg
ICAgLy8gUmVuZGVyCisgICAgICAgIGVuZ2luZS5lbmFibGVFZmZlY3QoY3VycmVudEVmZmVjdCk7
CisgICAgICAgIGVuZ2luZS5zZXRTdGF0ZShmYWxzZSk7CisgICAgICAgIC8vIFZCT3MKKyAgICAg
ICAgZW5naW5lLmJpbmRCdWZmZXJzKHRoaXMuX3ZlcnRleEJ1ZmZlcnMsIHRoaXMuX2luZGV4QnVm
ZmVyLCBjdXJyZW50RWZmZWN0KTsKKyAgICAgICAgLy8gQ2FjaGUKKyAgICAgICAgdmFyIHByZXZp
b3VzQWxwaGFNb2RlID0gZW5naW5lLmdldEFscGhhTW9kZSgpOworICAgICAgICAvLyBHbyBCbGVu
ZC4KKyAgICAgICAgZW5naW5lLnNldEFscGhhTW9kZSh0aGlzLl9lZmZlY3RMYXllck9wdGlvbnMu
YWxwaGFCbGVuZGluZ01vZGUpOworICAgICAgICAvLyBCbGVuZHMgdGhlIG1hcCBvbiB0aGUgbWFp
biBjYW52YXMuCisgICAgICAgIHRoaXMuX2ludGVybmFsUmVuZGVyKGN1cnJlbnRFZmZlY3QpOwor
ICAgICAgICAvLyBSZXN0b3JlIEFscGhhCisgICAgICAgIGVuZ2luZS5zZXRBbHBoYU1vZGUocHJl
dmlvdXNBbHBoYU1vZGUpOworICAgICAgICB0aGlzLm9uQWZ0ZXJDb21wb3NlT2JzZXJ2YWJsZS5u
b3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIC8vIEhhbmRsZSBzaXplIGNoYW5nZXMuCisg
ICAgICAgIHZhciBzaXplID0gdGhpcy5fbWFpblRleHR1cmUuZ2V0U2l6ZSgpOworICAgICAgICB0
aGlzLl9zZXRNYWluVGV4dHVyZVNpemUoKTsKKyAgICAgICAgaWYgKHNpemUud2lkdGggIT09IHRo
aXMuX21haW5UZXh0dXJlRGVzaXJlZFNpemUud2lkdGggfHwgc2l6ZS5oZWlnaHQgIT09IHRoaXMu
X21haW5UZXh0dXJlRGVzaXJlZFNpemUuaGVpZ2h0KSB7CisgICAgICAgICAgICAvLyBSZWNyZWF0
ZSBSVFQgYW5kIHBvc3QgcHJvY2Vzc2VzIG9uIHNpemUgY2hhbmdlLgorICAgICAgICAgICAgdGhp
cy5vblNpemVDaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAg
ICAgICB0aGlzLl9kaXNwb3NlVGV4dHVyZUFuZFBvc3RQcm9jZXNzZXMoKTsKKyAgICAgICAgICAg
IHRoaXMuX2NyZWF0ZU1haW5UZXh0dXJlKCk7CisgICAgICAgICAgICB0aGlzLl9jcmVhdGVUZXh0
dXJlQW5kUG9zdFByb2Nlc3NlcygpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBEZXRlcm1pbmUgaWYgYSBnaXZlbiBtZXNoIHdpbGwgYmUgdXNlZCBpbiB0aGUgY3VycmVudCBl
ZmZlY3QuCisgICAgICogQHBhcmFtIG1lc2ggbWVzaCB0byB0ZXN0CisgICAgICogQHJldHVybnMg
dHJ1ZSBpZiB0aGUgbWVzaCB3aWxsIGJlIHVzZWQKKyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5w
cm90b3R5cGUuaGFzTWVzaCA9IGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgIGlmICh0aGlzLnJl
bmRlcmluZ0dyb3VwSWQgPT09IC0xIHx8IG1lc2gucmVuZGVyaW5nR3JvdXBJZCA9PT0gdGhpcy5y
ZW5kZXJpbmdHcm91cElkKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRy
dWUgaWYgdGhlIGxheWVyIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRvIGRpc3BsYXksIG90aGVyd2lz
ZSBmYWxzZS4KKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBnbG93IGxheWVyIHNob3VsZCBi
ZSByZW5kZXJlZAorICAgICAqLworICAgIEVmZmVjdExheWVyLnByb3RvdHlwZS5zaG91bGRSZW5k
ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmlzRW5hYmxlZCAmJiB0aGlz
Ll9zaG91bGRSZW5kZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYg
dGhlIG1lc2ggc2hvdWxkIHJlbmRlciwgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSBt
ZXNoIFRoZSBtZXNoIHRvIHJlbmRlcgorICAgICAqIEByZXR1cm5zIHRydWUgaWYgaXQgc2hvdWxk
IHJlbmRlciBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5
cGUuX3Nob3VsZFJlbmRlck1lc2ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWVzaCBj
YW4gYmUgcmVuZGVyZWQsIG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUg
bWVzaCB0byByZW5kZXIKKyAgICAgKiBAcGFyYW0gbWF0ZXJpYWwgVGhlIG1hdGVyaWFsIHVzZWQg
b24gdGhlIG1lc2gKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGl0IGNhbiBiZSByZW5kZXJlZCBv
dGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuX2NhblJl
bmRlck1lc2ggPSBmdW5jdGlvbiAobWVzaCwgbWF0ZXJpYWwpIHsKKyAgICAgICAgcmV0dXJuICFt
YXRlcmlhbC5uZWVkQWxwaGFCbGVuZGluZ0Zvck1lc2gobWVzaCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggc2hvdWxkIHJlbmRlciwgb3RoZXJ3aXNl
IGZhbHNlLgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRvIHJlbmRlcgorICAgICAqIEBy
ZXR1cm5zIHRydWUgaWYgaXQgc2hvdWxkIHJlbmRlciBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8K
KyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuX3Nob3VsZFJlbmRlckVtaXNzaXZlVGV4dHVyZUZv
ck1lc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAg
LyoqCisgICAgICogUmVuZGVycyB0aGUgc3VibWVzaCBwYXNzZWQgaW4gcGFyYW1ldGVyIHRvIHRo
ZSBnZW5lcmF0aW9uIG1hcC4KKyAgICAgKi8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuX3Jl
bmRlclN1Yk1lc2ggPSBmdW5jdGlvbiAoc3ViTWVzaCwgZW5hYmxlQWxwaGFNb2RlKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChlbmFibGVBbHBoYU1vZGUgPT09IHZv
aWQgMCkgeyBlbmFibGVBbHBoYU1vZGUgPSBmYWxzZTsgfQorICAgICAgICBpZiAoIXRoaXMuc2hv
dWxkUmVuZGVyKCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2
YXIgbWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7CisgICAgICAgIHZhciBtZXNoID0g
c3ViTWVzaC5nZXRSZW5kZXJpbmdNZXNoKCk7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3Nj
ZW5lOworICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIG1l
c2guX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2lzQWN0aXZlSW50ZXJtZWRpYXRlID0g
ZmFsc2U7CisgICAgICAgIGlmICghbWF0ZXJpYWwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAvLyBEbyBub3QgYmxvY2sgaW4gYmxlbmQgbW9kZS4KKyAgICAgICAg
aWYgKCF0aGlzLl9jYW5SZW5kZXJNZXNoKG1lc2gsIG1hdGVyaWFsKSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEN1bGxpbmcKKyAgICAgICAgZW5naW5lLnNl
dFN0YXRlKG1hdGVyaWFsLmJhY2tGYWNlQ3VsbGluZyk7CisgICAgICAgIC8vIE1hbmFnaW5nIGlu
c3RhbmNlcworICAgICAgICB2YXIgYmF0Y2ggPSBtZXNoLl9nZXRJbnN0YW5jZXNSZW5kZXJMaXN0
KHN1Yk1lc2guX2lkKTsKKyAgICAgICAgaWYgKGJhdGNoLm11c3RSZXR1cm4pIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBFYXJseSBFeGl0IHBlciBtZXNoCisg
ICAgICAgIGlmICghdGhpcy5fc2hvdWxkUmVuZGVyTWVzaChtZXNoKSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmlu
ZyA9IGJhdGNoLmhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nW3N1Yk1lc2guX2lkXTsKKyAgICAg
ICAgdGhpcy5fc2V0RW1pc3NpdmVUZXh0dXJlQW5kQ29sb3IobWVzaCwgc3ViTWVzaCwgbWF0ZXJp
YWwpOworICAgICAgICBpZiAodGhpcy5faXNSZWFkeShzdWJNZXNoLCBoYXJkd2FyZUluc3RhbmNl
ZFJlbmRlcmluZywgdGhpcy5fZW1pc3NpdmVUZXh0dXJlQW5kQ29sb3IudGV4dHVyZSkpIHsKKyAg
ICAgICAgICAgIGVuZ2luZS5lbmFibGVFZmZlY3QodGhpcy5fZWZmZWN0TGF5ZXJNYXBHZW5lcmF0
aW9uRWZmZWN0KTsKKyAgICAgICAgICAgIG1lc2guX2JpbmQoc3ViTWVzaCwgdGhpcy5fZWZmZWN0
TGF5ZXJNYXBHZW5lcmF0aW9uRWZmZWN0LCBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbCJdLlRyaWFuZ2xlRmlsbE1vZGUpOworICAgICAg
ICAgICAgdGhpcy5fZWZmZWN0TGF5ZXJNYXBHZW5lcmF0aW9uRWZmZWN0LnNldE1hdHJpeCgidmll
d1Byb2plY3Rpb24iLCBzY2VuZS5nZXRUcmFuc2Zvcm1NYXRyaXgoKSk7CisgICAgICAgICAgICB0
aGlzLl9lZmZlY3RMYXllck1hcEdlbmVyYXRpb25FZmZlY3Quc2V0RmxvYXQ0KCJnbG93Q29sb3Ii
LCB0aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci5jb2xvci5yLCB0aGlzLl9lbWlzc2l2ZVRl
eHR1cmVBbmRDb2xvci5jb2xvci5nLCB0aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci5jb2xv
ci5iLCB0aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci5jb2xvci5hKTsKKyAgICAgICAgICAg
IHZhciBuZWVkQWxwaGFUZXN0ID0gbWF0ZXJpYWwubmVlZEFscGhhVGVzdGluZygpOworICAgICAg
ICAgICAgdmFyIGRpZmZ1c2VUZXh0dXJlID0gbWF0ZXJpYWwuZ2V0QWxwaGFUZXN0VGV4dHVyZSgp
OworICAgICAgICAgICAgdmFyIG5lZWRBbHBoYUJsZW5kRnJvbURpZmZ1c2UgPSBkaWZmdXNlVGV4
dHVyZSAmJiBkaWZmdXNlVGV4dHVyZS5oYXNBbHBoYSAmJgorICAgICAgICAgICAgICAgIChtYXRl
cmlhbC51c2VBbHBoYUZyb21EaWZmdXNlVGV4dHVyZSB8fCBtYXRlcmlhbC5fdXNlQWxwaGFGcm9t
QWxiZWRvVGV4dHVyZSk7CisgICAgICAgICAgICBpZiAoZGlmZnVzZVRleHR1cmUgJiYgKG5lZWRB
bHBoYVRlc3QgfHwgbmVlZEFscGhhQmxlbmRGcm9tRGlmZnVzZSkpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9lZmZlY3RMYXllck1hcEdlbmVyYXRpb25FZmZlY3Quc2V0VGV4dHVyZSgiZGlmZnVz
ZVNhbXBsZXIiLCBkaWZmdXNlVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgdmFyIHRleHR1cmVN
YXRyaXggPSBkaWZmdXNlVGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KCk7CisgICAgICAgICAgICAg
ICAgaWYgKHRleHR1cmVNYXRyaXgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0
TGF5ZXJNYXBHZW5lcmF0aW9uRWZmZWN0LnNldE1hdHJpeCgiZGlmZnVzZU1hdHJpeCIsIHRleHR1
cmVNYXRyaXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciBvcGFjaXR5VGV4dHVyZSA9IG1hdGVyaWFsLm9wYWNpdHlUZXh0dXJlOworICAgICAgICAg
ICAgaWYgKG9wYWNpdHlUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0TGF5
ZXJNYXBHZW5lcmF0aW9uRWZmZWN0LnNldFRleHR1cmUoIm9wYWNpdHlTYW1wbGVyIiwgb3BhY2l0
eVRleHR1cmUpOworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdExheWVyTWFwR2VuZXJhdGlv
bkVmZmVjdC5zZXRGbG9hdCgib3BhY2l0eUludGVuc2l0eSIsIG9wYWNpdHlUZXh0dXJlLmxldmVs
KTsKKyAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZU1hdHJpeCA9IG9wYWNpdHlUZXh0dXJlLmdl
dFRleHR1cmVNYXRyaXgoKTsKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZU1hdHJpeCkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3RMYXllck1hcEdlbmVyYXRpb25FZmZlY3Qu
c2V0TWF0cml4KCJvcGFjaXR5TWF0cml4IiwgdGV4dHVyZU1hdHJpeCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gR2xvdyBlbWlzc2l2ZSBvbmx5Cisg
ICAgICAgICAgICBpZiAodGhpcy5fZW1pc3NpdmVUZXh0dXJlQW5kQ29sb3IudGV4dHVyZSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdExheWVyTWFwR2VuZXJhdGlvbkVmZmVjdC5zZXRU
ZXh0dXJlKCJlbWlzc2l2ZVNhbXBsZXIiLCB0aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci50
ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3RMYXllck1hcEdlbmVyYXRpb25F
ZmZlY3Quc2V0TWF0cml4KCJlbWlzc2l2ZU1hdHJpeCIsIHRoaXMuX2VtaXNzaXZlVGV4dHVyZUFu
ZENvbG9yLnRleHR1cmUuZ2V0VGV4dHVyZU1hdHJpeCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIEJvbmVzCisgICAgICAgICAgICBpZiAobWVzaC51c2VCb25lcyAmJiBtZXNoLmNv
bXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBtZXNoLnNrZWxldG9uKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHNrZWxldG9uID0gbWVzaC5za2VsZXRvbjsKKyAgICAgICAgICAgICAgICBpZiAoc2tl
bGV0b24uaXNVc2luZ1RleHR1cmVGb3JNYXRyaWNlcykgeworICAgICAgICAgICAgICAgICAgICB2
YXIgYm9uZVRleHR1cmUgPSBza2VsZXRvbi5nZXRUcmFuc2Zvcm1NYXRyaXhUZXh0dXJlKG1lc2gp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWJvbmVUZXh0dXJlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fZWZmZWN0TGF5ZXJNYXBHZW5lcmF0aW9uRWZmZWN0LnNldFRleHR1cmUoImJv
bmVTYW1wbGVyIiwgYm9uZVRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZmZl
Y3RMYXllck1hcEdlbmVyYXRpb25FZmZlY3Quc2V0RmxvYXQoImJvbmVUZXh0dXJlV2lkdGgiLCA0
LjAgKiAoc2tlbGV0b24uYm9uZXMubGVuZ3RoICsgMSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0TGF5
ZXJNYXBHZW5lcmF0aW9uRWZmZWN0LnNldE1hdHJpY2VzKCJtQm9uZXMiLCBza2VsZXRvbi5nZXRU
cmFuc2Zvcm1NYXRyaWNlcygobWVzaCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBNb3JwaCB0YXJnZXRzCisgICAgICAgICAgICBfTWF0ZXJpYWxz
X21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJNYXRlcmlhbEhl
bHBlciJdLkJpbmRNb3JwaFRhcmdldFBhcmFtZXRlcnMobWVzaCwgdGhpcy5fZWZmZWN0TGF5ZXJN
YXBHZW5lcmF0aW9uRWZmZWN0KTsKKyAgICAgICAgICAgIC8vIEFscGhhIG1vZGUKKyAgICAgICAg
ICAgIGlmIChlbmFibGVBbHBoYU1vZGUpIHsKKyAgICAgICAgICAgICAgICBlbmdpbmUuc2V0QWxw
aGFNb2RlKG1hdGVyaWFsLmFscGhhTW9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBEcmF3CisgICAgICAgICAgICBtZXNoLl9wcm9jZXNzUmVuZGVyaW5nKHN1Yk1lc2gsIHRoaXMu
X2VmZmVjdExheWVyTWFwR2VuZXJhdGlvbkVmZmVjdCwgX01hdGVyaWFsc19tYXRlcmlhbF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0ZXJpYWwiXS5UcmlhbmdsZUZpbGxNb2RlLCBi
YXRjaCwgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcsIGZ1bmN0aW9uIChpc0luc3RhbmNlLCB3
b3JsZCkgeyByZXR1cm4gX3RoaXMuX2VmZmVjdExheWVyTWFwR2VuZXJhdGlvbkVmZmVjdC5zZXRN
YXRyaXgoIndvcmxkIiwgd29ybGQpOyB9KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIE5lZWQgdG8gcmVzZXQgcmVmcmVzaCByYXRlIG9mIHRoZSBtYWluIG1hcAor
ICAgICAgICAgICAgdGhpcy5fbWFpblRleHR1cmUucmVzZXRSZWZyZXNoQ291bnRlcigpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWJ1aWxkIHRoZSByZXF1aXJlZCBidWZm
ZXJzLgorICAgICAqIEBoaWRkZW4gSW50ZXJuYWwgdXNlIG9ubHkuCisgICAgICovCisgICAgRWZm
ZWN0TGF5ZXIucHJvdG90eXBlLl9yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIg
dmIgPSB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAgIGlmICh2
YikgeworICAgICAgICAgICAgdmIuX3JlYnVpbGQoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9nZW5lcmF0ZUluZGV4QnVmZmVyKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3Nl
IG9ubHkgdGhlIHJlbmRlciB0YXJnZXQgdGV4dHVyZXMgYW5kIHBvc3QgcHJvY2Vzcy4KKyAgICAg
Ki8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuX2Rpc3Bvc2VUZXh0dXJlQW5kUG9zdFByb2Nl
c3NlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fbWFpblRleHR1cmUuZGlzcG9zZSgp
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Bvc3RQcm9jZXNzZXMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9wb3N0UHJvY2Vzc2VzW2ldKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3Nlc1tpXS5kaXNwb3NlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3NlcyA9IFtdOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHR1cmVzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5fdGV4dHVyZXNbaV0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90
ZXh0dXJlc1tpXS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fdGV4dHVyZXMgPSBbXTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2UgdGhl
IGhpZ2hsaWdodCBsYXllciBhbmQgZnJlZSByZXNvdXJjZXMuCisgICAgICovCisgICAgRWZmZWN0
TGF5ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB2ZXJ0
ZXhCdWZmZXIgPSB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAg
IGlmICh2ZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5kaXNwb3NlKCk7
CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0gPSBudWxs
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pbmRleEJ1ZmZlcikgeworICAgICAgICAg
ICAgdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuX3JlbGVhc2VCdWZmZXIodGhpcy5faW5kZXhCdWZm
ZXIpOworICAgICAgICAgICAgdGhpcy5faW5kZXhCdWZmZXIgPSBudWxsOworICAgICAgICB9Cisg
ICAgICAgIC8vIENsZWFuIHRleHR1cmVzIGFuZCBwb3N0IHByb2Nlc3NlcworICAgICAgICB0aGlz
Ll9kaXNwb3NlVGV4dHVyZUFuZFBvc3RQcm9jZXNzZXMoKTsKKyAgICAgICAgLy8gUmVtb3ZlIGZy
b20gc2NlbmUKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2NlbmUuZWZmZWN0TGF5ZXJzLmlu
ZGV4T2YodGhpcywgMCk7CisgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgICAgICB0
aGlzLl9zY2VuZS5lZmZlY3RMYXllcnMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBDYWxsYmFjaworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUubm90aWZ5
T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUuY2xlYXIo
KTsKKyAgICAgICAgdGhpcy5vbkJlZm9yZVJlbmRlck1haW5UZXh0dXJlT2JzZXJ2YWJsZS5jbGVh
cigpOworICAgICAgICB0aGlzLm9uQmVmb3JlQ29tcG9zZU9ic2VydmFibGUuY2xlYXIoKTsKKyAg
ICAgICAgdGhpcy5vbkFmdGVyQ29tcG9zZU9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhp
cy5vblNpemVDaGFuZ2VkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgIH07CisgICAgLyoqCisgICAg
ICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVmZmVjdCBsYXllcgorICAgICAgKiBAcmV0
dXJucyB0aGUgc3RyaW5nIHdpdGggdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVmZmVjdCBsYXllcgor
ICAgICAgKi8KKyAgICBFZmZlY3RMYXllci5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gIkVmZmVjdExheWVyIjsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgYW4gZWZmZWN0IGxheWVyIGZyb20gcGFyc2VkIGVmZmVjdCBsYXllciBk
YXRhCisgICAgICogQHBhcmFtIHBhcnNlZEVmZmVjdExheWVyIGRlZmluZXMgZWZmZWN0IGxheWVy
IGRhdGEKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgY3VycmVudCBzY2VuZQorICAg
ICAqIEBwYXJhbSByb290VXJsIGRlZmluZXMgdGhlIHJvb3QgVVJMIGNvbnRhaW5pbmcgdGhlIGVm
ZmVjdCBsYXllciBpbmZvcm1hdGlvbgorICAgICAqIEByZXR1cm5zIGEgcGFyc2VkIGVmZmVjdCBM
YXllcgorICAgICAqLworICAgIEVmZmVjdExheWVyLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZEVm
ZmVjdExheWVyLCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICB2YXIgZWZmZWN0TGF5ZXJUeXBl
ID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5JbnN0
YW50aWF0ZShwYXJzZWRFZmZlY3RMYXllci5jdXN0b21UeXBlKTsKKyAgICAgICAgcmV0dXJuIGVm
ZmVjdExheWVyVHlwZS5QYXJzZShwYXJzZWRFZmZlY3RMYXllciwgc2NlbmUsIHJvb3RVcmwpOwor
ICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBFZmZlY3RMYXllci5fU2NlbmVDb21wb25l
bnRJbml0aWFsaXphdGlvbiA9IGZ1bmN0aW9uIChfKSB7CisgICAgICAgIHRocm93IF9NaXNjX2Rl
dlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1w
b3J0KCJFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50Iik7CisgICAgfTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIEVmZmVjdExheWVyLnByb3RvdHlwZSwgIm5hbWUiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZUFzQ29sb3I0Il0pKCkKKyAgICBdLCBFZmZlY3RMYXllci5wcm90b3R5cGUsICJu
ZXV0cmFsQ29sb3IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRWZmZWN0
TGF5ZXIucHJvdG90eXBlLCAiaXNFbmFibGVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0Nh
bWVyYVJlZmVyZW5jZSJdKSgpCisgICAgXSwgRWZmZWN0TGF5ZXIucHJvdG90eXBlLCAiY2FtZXJh
IiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBFZmZlY3RMYXllci5wcm90b3R5
cGUsICJyZW5kZXJpbmdHcm91cElkIiwgbnVsbCk7CisgICAgcmV0dXJuIEVmZmVjdExheWVyOwor
fSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9MYXllcnMvZWZmZWN0TGF5ZXJTY2Vu
ZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL0xheWVycy9lZmZlY3RMYXllclNjZW5lQ29tcG9uZW50LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50ICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdExheWVyU2NlbmVDb21wb25lbnQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIEVmZmVjdExheWVyU2NlbmVDb21wb25lbnQ7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ2FtZXJhcy9jYW1lcmEgKi8g
Ii4vQ2FtZXJhcy9jYW1lcmEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVD
b21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2VmZmVjdExheWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VmZmVjdExheWVyICovICIuL0xheWVy
cy9lZmZlY3RMYXllci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hYnN0cmFjdFNj
ZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9hYnN0cmFjdFNjZW5lICovICIuL2Fic3RyYWN0U2NlbmUudHMiKTsKKworCisKKworLy8g
QWRkcyB0aGUgcGFyc2VyIHRvIHRoZSBzY2VuZSBwYXJzZXJzLgorX2Fic3RyYWN0U2NlbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQWJzdHJhY3RTY2VuZSJdLkFkZFBhcnNlcihfc2Nl
bmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRD
b25zdGFudHMiXS5OQU1FX0VGRkVDVExBWUVSLCBmdW5jdGlvbiAocGFyc2VkRGF0YSwgc2NlbmUs
IGNvbnRhaW5lciwgcm9vdFVybCkgeworICAgIGlmIChwYXJzZWREYXRhLmVmZmVjdExheWVycykg
eworICAgICAgICBpZiAoIWNvbnRhaW5lci5lZmZlY3RMYXllcnMpIHsKKyAgICAgICAgICAgIGNv
bnRhaW5lci5lZmZlY3RMYXllcnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgfQorICAgICAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcGFyc2VkRGF0YS5lZmZlY3RMYXllcnMubGVuZ3Ro
OyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgZWZmZWN0TGF5ZXIgPSBfZWZmZWN0TGF5ZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRWZmZWN0TGF5ZXIiXS5QYXJzZShwYXJzZWRE
YXRhLmVmZmVjdExheWVyc1tpbmRleF0sIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgICAgIGNv
bnRhaW5lci5lZmZlY3RMYXllcnMucHVzaChlZmZlY3RMYXllcik7CisgICAgICAgIH0KKyAgICB9
Cit9KTsKK19hYnN0cmFjdFNjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFic3Ry
YWN0U2NlbmUiXS5wcm90b3R5cGUucmVtb3ZlRWZmZWN0TGF5ZXIgPSBmdW5jdGlvbiAodG9SZW1v
dmUpIHsKKyAgICB2YXIgaW5kZXggPSB0aGlzLmVmZmVjdExheWVycy5pbmRleE9mKHRvUmVtb3Zl
KTsKKyAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgIHRoaXMuZWZmZWN0TGF5ZXJzLnNw
bGljZShpbmRleCwgMSk7CisgICAgfQorICAgIHJldHVybiBpbmRleDsKK307CitfYWJzdHJhY3RT
Y2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJBYnN0cmFjdFNjZW5lIl0ucHJvdG90
eXBlLmFkZEVmZmVjdExheWVyID0gZnVuY3Rpb24gKG5ld0VmZmVjdExheWVyKSB7CisgICAgdGhp
cy5lZmZlY3RMYXllcnMucHVzaChuZXdFZmZlY3RMYXllcik7Cit9OworLyoqCisgKiBEZWZpbmVz
IHRoZSBsYXllciBzY2VuZSBjb21wb25lbnQgcmVzcG9uc2libGUgdG8gbWFuYWdlIGFueSBlZmZl
Y3QgbGF5ZXJzCisgKiBpbiBhIGdpdmVuIHNjZW5lLgorICovCit2YXIgRWZmZWN0TGF5ZXJTY2Vu
ZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgZm9yIHRoZSBnaXZlbiBz
Y2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0byByZWdpc3RlciB0
aGUgY29tcG9uZW50IGluCisgICAgICovCisgICAgZnVuY3Rpb24gRWZmZWN0TGF5ZXJTY2VuZUNv
bXBvbmVudChzY2VuZSkgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbXBvbmVudCBu
YW1lIGhlbHBmdWxsIHRvIGlkZW50aWZ5IHRoZSBjb21wb25lbnQgaW4gdGhlIGxpc3Qgb2Ygc2Nl
bmUgY29tcG9uZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubmFtZSA9IF9zY2VuZUNv
bXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2VuZUNvbXBvbmVudENvbnN0
YW50cyJdLk5BTUVfRUZGRUNUTEFZRVI7CisgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdHMgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5fbmVlZFN0ZW5jaWwgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5f
cHJldmlvdXNTdGVuY2lsU3RhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5l
OworICAgICAgICB0aGlzLl9lbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgc2Nl
bmUuZWZmZWN0TGF5ZXJzID0gbmV3IEFycmF5KCk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJl
Z2lzdGVycyB0aGUgY29tcG9uZW50IGluIGEgZ2l2ZW4gc2NlbmUKKyAgICAgKi8KKyAgICBFZmZl
Y3RMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGhpcy5zY2VuZS5faXNSZWFkeUZvck1lc2hTdGFnZS5yZWdpc3RlclN0ZXAoX3Nj
ZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lQ29tcG9uZW50
Q29uc3RhbnRzIl0uU1RFUF9JU1JFQURZRk9STUVTSF9FRkZFQ1RMQVlFUiwgdGhpcywgdGhpcy5f
aXNSZWFkeUZvck1lc2gpOworICAgICAgICB0aGlzLnNjZW5lLl9jYW1lcmFEcmF3UmVuZGVyVGFy
Z2V0U3RhZ2UucmVnaXN0ZXJTdGVwKF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLlNURVBfQ0FNRVJBRFJBV1JFTkRF
UlRBUkdFVF9FRkZFQ1RMQVlFUiwgdGhpcywgdGhpcy5fcmVuZGVyTWFpblRleHR1cmUpOworICAg
ICAgICB0aGlzLnNjZW5lLl9iZWZvcmVDYW1lcmFEcmF3U3RhZ2UucmVnaXN0ZXJTdGVwKF9zY2Vu
ZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2VuZUNvbXBvbmVudENv
bnN0YW50cyJdLlNURVBfQkVGT1JFQ0FNRVJBRFJBV19FRkZFQ1RMQVlFUiwgdGhpcywgdGhpcy5f
c2V0U3RlbmNpbCk7CisgICAgICAgIHRoaXMuc2NlbmUuX2FmdGVyUmVuZGVyaW5nR3JvdXBEcmF3
U3RhZ2UucmVnaXN0ZXJTdGVwKF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLlNURVBfQUZURVJSRU5ERVJJTkdHUk9V
UERSQVdfRUZGRUNUTEFZRVJfRFJBVywgdGhpcywgdGhpcy5fZHJhd1JlbmRlcmluZ0dyb3VwKTsK
KyAgICAgICAgdGhpcy5zY2VuZS5fYWZ0ZXJDYW1lcmFEcmF3U3RhZ2UucmVnaXN0ZXJTdGVwKF9z
Y2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2VuZUNvbXBvbmVu
dENvbnN0YW50cyJdLlNURVBfQUZURVJDQU1FUkFEUkFXX0VGRkVDVExBWUVSLCB0aGlzLCB0aGlz
Ll9zZXRTdGVuY2lsQmFjayk7CisgICAgICAgIHRoaXMuc2NlbmUuX2FmdGVyQ2FtZXJhRHJhd1N0
YWdlLnJlZ2lzdGVyU3RlcChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5TVEVQX0FGVEVSQ0FNRVJBRFJBV19FRkZF
Q1RMQVlFUl9EUkFXLCB0aGlzLCB0aGlzLl9kcmF3Q2FtZXJhKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJlYnVpbGRzIHRoZSBlbGVtZW50cyByZWxhdGVkIHRvIHRoaXMgY29tcG9uZW50IGlu
IGNhc2Ugb2YKKyAgICAgKiBjb250ZXh0IGxvc3QgZm9yIGluc3RhbmNlLgorICAgICAqLworICAg
IEVmZmVjdExheWVyU2NlbmVDb21wb25lbnQucHJvdG90eXBlLnJlYnVpbGQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBsYXllcnMgPSB0aGlzLnNjZW5lLmVmZmVjdExheWVyczsKKyAgICAg
ICAgZm9yICh2YXIgX2kgPSAwLCBsYXllcnNfMSA9IGxheWVyczsgX2kgPCBsYXllcnNfMS5sZW5n
dGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBlZmZlY3RMYXllciA9IGxheWVyc18xW19pXTsK
KyAgICAgICAgICAgIGVmZmVjdExheWVyLl9yZWJ1aWxkKCk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGNvbXBvbmVudCBkYXRhIHRvIHRoZSBzcGVj
aWZpZWQganNvbiBvYmplY3QKKyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlvbk9iamVjdCBUaGUg
b2JqZWN0IHRvIHNlcmlhbGl6ZSB0bworICAgICAqLworICAgIEVmZmVjdExheWVyU2NlbmVDb21w
b25lbnQucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0
KSB7CisgICAgICAgIC8vIEVmZmVjdCBsYXllcnMKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC5lZmZlY3RMYXllcnMgPSBbXTsKKyAgICAgICAgdmFyIGxheWVycyA9IHRoaXMuc2NlbmUuZWZm
ZWN0TGF5ZXJzOworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGxheWVyc18yID0gbGF5ZXJzOyBf
aSA8IGxheWVyc18yLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGVmZmVjdExheWVy
ID0gbGF5ZXJzXzJbX2ldOworICAgICAgICAgICAgaWYgKGVmZmVjdExheWVyLnNlcmlhbGl6ZSkg
eworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZWZmZWN0TGF5ZXJzLnB1c2go
ZWZmZWN0TGF5ZXIuc2VyaWFsaXplKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUgY29udGFp
bmVyIHRvIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBjb250YWluZXIgdGhlIGNvbnRhaW5lciBo
b2xkaW5nIHRoZSBlbGVtZW50cworICAgICAqLworICAgIEVmZmVjdExheWVyU2NlbmVDb21wb25l
bnQucHJvdG90eXBlLmFkZEZyb21Db250YWluZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmICghY29udGFpbmVyLmVmZmVjdExh
eWVycykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNvbnRhaW5l
ci5lZmZlY3RMYXllcnMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAgICAgICAgICAgX3RoaXMu
c2NlbmUuYWRkRWZmZWN0TGF5ZXIobyk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmVtb3ZlcyBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBjb250YWluZXIgZnJvbSB0aGUg
c2NlbmUKKyAgICAgKiBAcGFyYW0gY29udGFpbmVyIGNvbnRhaW5zIHRoZSBlbGVtZW50cyB0byBy
ZW1vdmUKKyAgICAgKiBAcGFyYW0gZGlzcG9zZSBpZiB0aGUgcmVtb3ZlZCBlbGVtZW50IHNob3Vs
ZCBiZSBkaXNwb3NlZCAoZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgRWZmZWN0TGF5ZXJT
Y2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVtb3ZlRnJvbUNvbnRhaW5lciA9IGZ1bmN0aW9uIChj
b250YWluZXIsIGRpc3Bvc2UpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
aWYgKCFjb250YWluZXIuZWZmZWN0TGF5ZXJzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY29udGFpbmVyLmVmZmVjdExheWVycy5mb3JFYWNoKGZ1bmN0aW9uIChv
KSB7CisgICAgICAgICAgICBfdGhpcy5zY2VuZS5yZW1vdmVFZmZlY3RMYXllcihvKTsKKyAgICAg
ICAgICAgIGlmIChkaXNwb3NlKSB7CisgICAgICAgICAgICAgICAgby5kaXNwb3NlKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMg
dGhlIGNvbXBvbmVudCBhbmQgdGhlIGFzc29jaWF0ZWQgcmVzc291cmNlcy4KKyAgICAgKi8KKyAg
ICBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24g
KCkgeworICAgICAgICB2YXIgbGF5ZXJzID0gdGhpcy5zY2VuZS5lZmZlY3RMYXllcnM7CisgICAg
ICAgIHdoaWxlIChsYXllcnMubGVuZ3RoKSB7CisgICAgICAgICAgICBsYXllcnNbMF0uZGlzcG9z
ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50LnBy
b3RvdHlwZS5faXNSZWFkeUZvck1lc2ggPSBmdW5jdGlvbiAobWVzaCwgaGFyZHdhcmVJbnN0YW5j
ZWRSZW5kZXJpbmcpIHsKKyAgICAgICAgdmFyIGxheWVycyA9IHRoaXMuc2NlbmUuZWZmZWN0TGF5
ZXJzOworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGxheWVyc18zID0gbGF5ZXJzOyBfaSA8IGxh
eWVyc18zLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGxheWVyID0gbGF5ZXJzXzNb
X2ldOworICAgICAgICAgICAgaWYgKCFsYXllci5oYXNNZXNoKG1lc2gpKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBfYSA9
IDAsIF9iID0gbWVzaC5zdWJNZXNoZXM7IF9hIDwgX2IubGVuZ3RoOyBfYSsrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHN1Yk1lc2ggPSBfYltfYV07CisgICAgICAgICAgICAgICAgaWYgKCFsYXll
ci5pc1JlYWR5KHN1Yk1lc2gsIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nKSkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgRWZmZWN0
TGF5ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX3JlbmRlck1haW5UZXh0dXJlID0gZnVuY3Rp
b24gKGNhbWVyYSkgeworICAgICAgICB0aGlzLl9yZW5kZXJFZmZlY3RzID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX25lZWRTdGVuY2lsID0gZmFsc2U7CisgICAgICAgIHZhciBuZWVkUmViaW5kID0g
ZmFsc2U7CisgICAgICAgIHZhciBsYXllcnMgPSB0aGlzLnNjZW5lLmVmZmVjdExheWVyczsKKyAg
ICAgICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdGhp
cy5fcHJldmlvdXNTdGVuY2lsU3RhdGUgPSB0aGlzLl9lbmdpbmUuZ2V0U3RlbmNpbEJ1ZmZlcigp
OworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBsYXllcnNfNCA9IGxheWVyczsgX2kgPCBs
YXllcnNfNC5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgZWZmZWN0TGF5ZXIg
PSBsYXllcnNfNFtfaV07CisgICAgICAgICAgICAgICAgaWYgKGVmZmVjdExheWVyLnNob3VsZFJl
bmRlcigpICYmCisgICAgICAgICAgICAgICAgICAgICghZWZmZWN0TGF5ZXIuY2FtZXJhIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAoZWZmZWN0TGF5ZXIuY2FtZXJhLmNhbWVyYVJpZ01vZGUg
PT09IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDYW1lcmEi
XS5SSUdfTU9ERV9OT05FICYmIGNhbWVyYSA9PT0gZWZmZWN0TGF5ZXIuY2FtZXJhKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgKGVmZmVjdExheWVyLmNhbWVyYS5jYW1lcmFSaWdNb2RlICE9
PSBfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ2FtZXJhIl0u
UklHX01PREVfTk9ORSAmJiBlZmZlY3RMYXllci5jYW1lcmEuX3JpZ0NhbWVyYXMuaW5kZXhPZihj
YW1lcmEpID4gLTEpKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJFZmZlY3Rz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmVlZFN0ZW5jaWwgPSB0aGlzLl9u
ZWVkU3RlbmNpbCB8fCBlZmZlY3RMYXllci5uZWVkU3RlbmNpbCgpOworICAgICAgICAgICAgICAg
ICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gZWZmZWN0TGF5ZXIuX21haW5UZXh0dXJlOworICAgICAg
ICAgICAgICAgICAgICBpZiAocmVuZGVyVGFyZ2V0Ll9zaG91bGRSZW5kZXIoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5pbmNyZW1lbnRSZW5kZXJJZCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LnJlbmRlcihmYWxzZSwgZmFsc2UpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbmVlZFJlYmluZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
LnNjZW5lLmluY3JlbWVudFJlbmRlcklkKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5l
ZWRSZWJpbmQ7CisgICAgfTsKKyAgICBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlw
ZS5fc2V0U3RlbmNpbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gQWN0aXZhdGUgZWZmZWN0
IExheWVyIHN0ZW5jaWwKKyAgICAgICAgaWYgKHRoaXMuX25lZWRTdGVuY2lsKSB7CisgICAgICAg
ICAgICB0aGlzLl9lbmdpbmUuc2V0U3RlbmNpbEJ1ZmZlcih0cnVlKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgRWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX3NldFN0ZW5jaWxC
YWNrID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBSZXN0b3JlIGVmZmVjdCBMYXllciBzdGVu
Y2lsCisgICAgICAgIGlmICh0aGlzLl9uZWVkU3RlbmNpbCkgeworICAgICAgICAgICAgdGhpcy5f
ZW5naW5lLnNldFN0ZW5jaWxCdWZmZXIodGhpcy5fcHJldmlvdXNTdGVuY2lsU3RhdGUpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5f
ZHJhdyA9IGZ1bmN0aW9uIChyZW5kZXJpbmdHcm91cElkKSB7CisgICAgICAgIGlmICh0aGlzLl9y
ZW5kZXJFZmZlY3RzKSB7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0RGVwdGhCdWZmZXIo
ZmFsc2UpOworICAgICAgICAgICAgdmFyIGxheWVycyA9IHRoaXMuc2NlbmUuZWZmZWN0TGF5ZXJz
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICB2YXIgZWZmZWN0TGF5ZXIgPSBsYXllcnNbaV07CisgICAgICAgICAg
ICAgICAgaWYgKGVmZmVjdExheWVyLnJlbmRlcmluZ0dyb3VwSWQgPT09IHJlbmRlcmluZ0dyb3Vw
SWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVmZmVjdExheWVyLnNob3VsZFJlbmRlcigp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RMYXllci5yZW5kZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX2VuZ2luZS5zZXREZXB0aEJ1ZmZlcih0cnVlKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgRWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX2RyYXdDYW1lcmEg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9yZW5kZXJFZmZlY3RzKSB7CisgICAg
ICAgICAgICB0aGlzLl9kcmF3KC0xKTsKKyAgICAgICAgfQorICAgIH07CisgICAgRWZmZWN0TGF5
ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX2RyYXdSZW5kZXJpbmdHcm91cCA9IGZ1bmN0aW9u
IChpbmRleCkgeworICAgICAgICBpZiAoIXRoaXMuc2NlbmUuX2lzSW5JbnRlcm1lZGlhdGVSZW5k
ZXJpbmcoKSAmJiB0aGlzLl9yZW5kZXJFZmZlY3RzKSB7CisgICAgICAgICAgICB0aGlzLl9kcmF3
KGluZGV4KTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIEVmZmVjdExheWVyU2NlbmVD
b21wb25lbnQ7Cit9KCkpOworCitfZWZmZWN0TGF5ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siRWZmZWN0TGF5ZXIiXS5fU2NlbmVDb21wb25lbnRJbml0aWFsaXphdGlvbiA9IGZ1bmN0
aW9uIChzY2VuZSkgeworICAgIHZhciBjb21wb25lbnQgPSBzY2VuZS5fZ2V0Q29tcG9uZW50KF9z
Y2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2VuZUNvbXBvbmVu
dENvbnN0YW50cyJdLk5BTUVfRUZGRUNUTEFZRVIpOworICAgIGlmICghY29tcG9uZW50KSB7Cisg
ICAgICAgIGNvbXBvbmVudCA9IG5ldyBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50KHNjZW5lKTsK
KyAgICAgICAgc2NlbmUuX2FkZENvbXBvbmVudChjb21wb25lbnQpOworICAgIH0KK307CisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0xheWVycy9nbG93TGF5ZXIudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0xheWVycy9nbG93TGF5ZXIudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogR2xvd0xheWVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdsb3dM
YXllciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gR2xvd0xheWVyOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2Rl
Y29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJl
cy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJnZXRUZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMv
VGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlh
bHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nl
c19ibHVyUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL1Bvc3RQcm9jZXNzZXMvYmx1clBvc3RQcm9jZXNzICovICIuL1Bv
c3RQcm9jZXNzZXMvYmx1clBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2VmZmVjdExheWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL2VmZmVjdExheWVyICovICIuL0xheWVycy9lZmZlY3RMYXllci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hYnN0cmFjdFNjZW5lX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9hYnN0cmFjdFNjZW5l
ICovICIuL2Fic3RyYWN0U2NlbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mv
dHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdp
bmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9TaGFkZXJzX2dsb3dNYXBNZXJnZV9mcmFnbWVudF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZ2xv
d01hcE1lcmdlLmZyYWdtZW50ICovICIuL1NoYWRlcnMvZ2xvd01hcE1lcmdlLmZyYWdtZW50LnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfZ2xvd01hcE1lcmdlX3ZlcnRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL1NoYWRlcnMvZ2xvd01hcE1lcmdlLnZlcnRleCAqLyAiLi9TaGFkZXJzL2dsb3dNYXBNZXJn
ZS52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTGF5ZXJzX2VmZmVjdExh
eWVyU2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9MYXllcnMvZWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudCAqLyAi
Li9MYXllcnMvZWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudC50cyIpOworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKK19hYnN0cmFjdFNjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIkFic3RyYWN0U2NlbmUiXS5wcm90b3R5cGUuZ2V0R2xvd0xheWVyQnlOYW1lID0gZnVu
Y3Rpb24gKG5hbWUpIHsKKyAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5lZmZl
Y3RMYXllcnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgIGlmICh0aGlzLmVmZmVjdExheWVy
c1tpbmRleF0ubmFtZSA9PT0gbmFtZSAmJiB0aGlzLmVmZmVjdExheWVyc1tpbmRleF0uZ2V0RWZm
ZWN0TmFtZSgpID09PSBHbG93TGF5ZXIuRWZmZWN0TmFtZSkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZWZmZWN0TGF5ZXJzW2luZGV4XTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
bnVsbDsKK307CisvKioKKyAqIFRoZSBnbG93IGxheWVyIEhlbHBzIGFkZGluZyBhIGdsb3cgZWZm
ZWN0IGFyb3VuZCB0aGUgZW1pc3NpdmUgcGFydHMgb2YgYSBtZXNoLgorICoKKyAqIE9uY2UgaW5z
dGFudGlhdGVkIGluIGEgc2NlbmUsIHNpbXBseSB1c2UgdGhlIHB1c2hNZXNoIG9yIHJlbW92ZU1l
c2ggbWV0aG9kIHRvIGFkZCBvciByZW1vdmUKKyAqIGdsb3d5IG1lc2hlcyB0byB5b3VyIHNjZW5l
LgorICoKKyAqIERvY3VtZW50YXRpb246IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3Rv
L2dsb3dfbGF5ZXIKKyAqLwordmFyIEdsb3dMYXllciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShHbG93TGF5ZXIsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVz
IGEgbmV3IGdsb3cgTGF5ZXIgYW5kIHJlZmVyZW5jZXMgaXQgdG8gdGhlIHNjZW5lLgorICAgICAq
IEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBsYXllcgorICAgICAqIEBwYXJhbSBzY2VuZSBU
aGUgc2NlbmUgdG8gdXNlIHRoZSBsYXllciBpbgorICAgICAqIEBwYXJhbSBvcHRpb25zIFNldHMg
b2Ygbm9uZSBtYW5kYXRvcnkgb3B0aW9ucyB0byB1c2Ugd2l0aCB0aGUgbGF5ZXIgKHNlZSBJR2xv
d0xheWVyT3B0aW9ucyBmb3IgbW9yZSBpbmZvcm1hdGlvbikKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBHbG93TGF5ZXIobmFtZSwgc2NlbmUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
X3N1cGVyLmNhbGwodGhpcywgbmFtZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9p
bnRlbnNpdHkgPSAxLjA7CisgICAgICAgIF90aGlzLl9pbmNsdWRlZE9ubHlNZXNoZXMgPSBbXTsK
KyAgICAgICAgX3RoaXMuX2V4Y2x1ZGVkTWVzaGVzID0gW107CisgICAgICAgIF90aGlzLm5ldXRy
YWxDb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTNfX1siQ29sb3I0Il0oMCwgMCwgMCwgMSk7CisgICAgICAgIC8vIEFkYXB0IG9wdGlvbnMKKyAg
ICAgICAgX3RoaXMuX29wdGlvbnMgPSB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2Fzc2lnbiJdKHsgbWFpblRleHR1cmVSYXRpbzogR2xvd0xheWVyLkRlZmF1bHRUZXh0dXJl
UmF0aW8sIGJsdXJLZXJuZWxTaXplOiAzMiwgbWFpblRleHR1cmVGaXhlZFNpemU6IHVuZGVmaW5l
ZCwgY2FtZXJhOiBudWxsLCBtYWluVGV4dHVyZVNhbXBsZXM6IDEsIHJlbmRlcmluZ0dyb3VwSWQ6
IC0xIH0sIG9wdGlvbnMpOworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBsYXllcgorICAgICAg
ICBfdGhpcy5faW5pdCh7CisgICAgICAgICAgICBhbHBoYUJsZW5kaW5nTW9kZTogX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJDb25zdGFudHMiXS5BTFBI
QV9BREQsCisgICAgICAgICAgICBjYW1lcmE6IF90aGlzLl9vcHRpb25zLmNhbWVyYSwKKyAgICAg
ICAgICAgIG1haW5UZXh0dXJlRml4ZWRTaXplOiBfdGhpcy5fb3B0aW9ucy5tYWluVGV4dHVyZUZp
eGVkU2l6ZSwKKyAgICAgICAgICAgIG1haW5UZXh0dXJlUmF0aW86IF90aGlzLl9vcHRpb25zLm1h
aW5UZXh0dXJlUmF0aW8sCisgICAgICAgICAgICByZW5kZXJpbmdHcm91cElkOiBfdGhpcy5fb3B0
aW9ucy5yZW5kZXJpbmdHcm91cElkCisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX3RoaXM7
CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG93TGF5ZXIucHJvdG90eXBlLCAi
Ymx1cktlcm5lbFNpemUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBrZXJu
ZWwgc2l6ZSBvZiB0aGUgYmx1ci4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hvcml6b250YWxCbHVyUG9zdHByb2Nlc3Mx
Lmtlcm5lbDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGtl
cm5lbCBzaXplIG9mIHRoZSBibHVyLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2hvcml6b250YWxCbHVyUG9zdHByb2Nlc3Mx
Lmtlcm5lbCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdmVydGljYWxCbHVyUG9zdHByb2Nl
c3MxLmtlcm5lbCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0
cHJvY2VzczIua2VybmVsID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl92ZXJ0aWNhbEJsdXJQ
b3N0cHJvY2VzczIua2VybmVsID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShHbG93TGF5ZXIucHJvdG90eXBlLCAiaW50ZW5zaXR5IiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZ2xvdyBpbnRlbnNpdHkuCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9p
bnRlbnNpdHk7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBn
bG93IGludGVuc2l0eS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9pbnRlbnNpdHkgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgLyoqCisgICAgICogR2V0IHRoZSBlZmZlY3QgbmFtZSBvZiB0aGUgbGF5ZXIuCisg
ICAgICogQHJldHVybiBUaGUgZWZmZWN0IG5hbWUKKyAgICAgKi8KKyAgICBHbG93TGF5ZXIucHJv
dG90eXBlLmdldEVmZmVjdE5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBHbG93
TGF5ZXIuRWZmZWN0TmFtZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZSB0aGUgbWVy
Z2UgZWZmZWN0LiBUaGlzIGlzIHRoZSBzaGFkZXIgdXNlIHRvIGJsaXQgdGhlIGluZm9ybWF0aW9u
IGJhY2sKKyAgICAgKiB0byB0aGUgbWFpbiBjYW52YXMgYXQgdGhlIGVuZCBvZiB0aGUgc2NlbmUg
cmVuZGVyaW5nLgorICAgICAqLworICAgIEdsb3dMYXllci5wcm90b3R5cGUuX2NyZWF0ZU1lcmdl
RWZmZWN0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBFZmZlY3QKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2VuZ2luZS5jcmVhdGVFZmZlY3QoImdsb3dNYXBNZXJnZSIsIFtfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktp
bmRdLCBbIm9mZnNldCJdLCBbInRleHR1cmVTYW1wbGVyIiwgInRleHR1cmVTYW1wbGVyMiJdLCAi
I2RlZmluZSBFTUlTU0lWRSBcbiIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0
aGUgcmVuZGVyIHRhcmdldCB0ZXh0dXJlcyBhbmQgcG9zdCBwcm9jZXNzZXMgdXNlZCBpbiB0aGUg
Z2xvdyBsYXllci4KKyAgICAgKi8KKyAgICBHbG93TGF5ZXIucHJvdG90eXBlLl9jcmVhdGVUZXh0
dXJlQW5kUG9zdFByb2Nlc3NlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgdmFyIGJsdXJUZXh0dXJlV2lkdGggPSB0aGlzLl9tYWluVGV4dHVyZURl
c2lyZWRTaXplLndpZHRoOworICAgICAgICB2YXIgYmx1clRleHR1cmVIZWlnaHQgPSB0aGlzLl9t
YWluVGV4dHVyZURlc2lyZWRTaXplLmhlaWdodDsKKyAgICAgICAgYmx1clRleHR1cmVXaWR0aCA9
IHRoaXMuX2VuZ2luZS5uZWVkUE9UVGV4dHVyZXMgPyBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzEyX19bIkVuZ2luZSJdLkdldEV4cG9uZW50T2ZUd28oYmx1clRleHR1
cmVXaWR0aCwgdGhpcy5fbWF4U2l6ZSkgOiBibHVyVGV4dHVyZVdpZHRoOworICAgICAgICBibHVy
VGV4dHVyZUhlaWdodCA9IHRoaXMuX2VuZ2luZS5uZWVkUE9UVGV4dHVyZXMgPyBfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIkVuZ2luZSJdLkdldEV4cG9uZW50
T2ZUd28oYmx1clRleHR1cmVIZWlnaHQsIHRoaXMuX21heFNpemUpIDogYmx1clRleHR1cmVIZWln
aHQ7CisgICAgICAgIHZhciB0ZXh0dXJlVHlwZSA9IDA7CisgICAgICAgIGlmICh0aGlzLl9lbmdp
bmUuZ2V0Q2FwcygpLnRleHR1cmVIYWxmRmxvYXRSZW5kZXIpIHsKKyAgICAgICAgICAgIHRleHR1
cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9f
WyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lH
TkVEX0lOVDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9ibHVyVGV4dHVyZTEgPSBuZXcgX01h
dGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlJlbmRlclRhcmdldFRleHR1cmUiXSgiR2xvd0xheWVyQmx1clJUVCIsIHsKKyAg
ICAgICAgICAgIHdpZHRoOiBibHVyVGV4dHVyZVdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBi
bHVyVGV4dHVyZUhlaWdodAorICAgICAgICB9LCB0aGlzLl9zY2VuZSwgZmFsc2UsIHRydWUsIHRl
eHR1cmVUeXBlKTsKKyAgICAgICAgdGhpcy5fYmx1clRleHR1cmUxLndyYXBVID0gX01hdGVyaWFs
c19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUi
XS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgdGhpcy5fYmx1clRleHR1cmUxLndyYXBWID0g
X01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlRleHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgdGhpcy5fYmx1clRleHR1cmUx
LnVwZGF0ZVNhbXBsaW5nTW9kZShfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSk7Cisg
ICAgICAgIHRoaXMuX2JsdXJUZXh0dXJlMS5yZW5kZXJQYXJ0aWNsZXMgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5fYmx1clRleHR1cmUxLmlnbm9yZUNhbWVyYVZpZXdwb3J0ID0gdHJ1ZTsKKyAgICAg
ICAgdmFyIGJsdXJUZXh0dXJlV2lkdGgyID0gTWF0aC5mbG9vcihibHVyVGV4dHVyZVdpZHRoIC8g
Mik7CisgICAgICAgIHZhciBibHVyVGV4dHVyZUhlaWdodDIgPSBNYXRoLmZsb29yKGJsdXJUZXh0
dXJlSGVpZ2h0IC8gMik7CisgICAgICAgIHRoaXMuX2JsdXJUZXh0dXJlMiA9IG5ldyBfTWF0ZXJp
YWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdKCJHbG93TGF5ZXJCbHVyUlRUMiIsIHsKKyAgICAg
ICAgICAgIHdpZHRoOiBibHVyVGV4dHVyZVdpZHRoMiwKKyAgICAgICAgICAgIGhlaWdodDogYmx1
clRleHR1cmVIZWlnaHQyCisgICAgICAgIH0sIHRoaXMuX3NjZW5lLCBmYWxzZSwgdHJ1ZSwgdGV4
dHVyZVR5cGUpOworICAgICAgICB0aGlzLl9ibHVyVGV4dHVyZTIud3JhcFUgPSBfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGV4dHVyZSJd
LkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICB0aGlzLl9ibHVyVGV4dHVyZTIud3JhcFYgPSBf
TWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
VGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICB0aGlzLl9ibHVyVGV4dHVyZTIu
dXBkYXRlU2FtcGxpbmdNb2RlKF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFKTsKKyAg
ICAgICAgdGhpcy5fYmx1clRleHR1cmUyLnJlbmRlclBhcnRpY2xlcyA9IGZhbHNlOworICAgICAg
ICB0aGlzLl9ibHVyVGV4dHVyZTIuaWdub3JlQ2FtZXJhVmlld3BvcnQgPSB0cnVlOworICAgICAg
ICB0aGlzLl90ZXh0dXJlcyA9IFt0aGlzLl9ibHVyVGV4dHVyZTEsIHRoaXMuX2JsdXJUZXh0dXJl
Ml07CisgICAgICAgIHRoaXMuX2hvcml6b250YWxCbHVyUG9zdHByb2Nlc3MxID0gbmV3IF9Qb3N0
UHJvY2Vzc2VzX2JsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJC
bHVyUG9zdFByb2Nlc3MiXSgiR2xvd0xheWVySEJQMSIsIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMiJdKDEuMCwgMCksIHRoaXMuX29w
dGlvbnMuYmx1cktlcm5lbFNpemUgLyAyLCB7CisgICAgICAgICAgICB3aWR0aDogYmx1clRleHR1
cmVXaWR0aCwKKyAgICAgICAgICAgIGhlaWdodDogYmx1clRleHR1cmVIZWlnaHQKKyAgICAgICAg
fSwgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHRoaXMuX3NjZW5lLmdl
dEVuZ2luZSgpLCBmYWxzZSwgdGV4dHVyZVR5cGUpOworICAgICAgICB0aGlzLl9ob3Jpem9udGFs
Qmx1clBvc3Rwcm9jZXNzMS53aWR0aCA9IGJsdXJUZXh0dXJlV2lkdGg7CisgICAgICAgIHRoaXMu
X2hvcml6b250YWxCbHVyUG9zdHByb2Nlc3MxLmhlaWdodCA9IGJsdXJUZXh0dXJlSGVpZ2h0Owor
ICAgICAgICB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9jZXNzMS5vbkFwcGx5T2JzZXJ2YWJs
ZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUo
InRleHR1cmVTYW1wbGVyIiwgX3RoaXMuX21haW5UZXh0dXJlKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHRoaXMuX3ZlcnRpY2FsQmx1clBvc3Rwcm9jZXNzMSA9IG5ldyBfUG9zdFByb2Nlc3Nlc19i
bHVyUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQmx1clBvc3RQcm9j
ZXNzIl0oIkdsb3dMYXllclZCUDEiLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjIiXSgwLCAxLjApLCB0aGlzLl9vcHRpb25zLmJsdXJL
ZXJuZWxTaXplIC8gMiwgeworICAgICAgICAgICAgd2lkdGg6IGJsdXJUZXh0dXJlV2lkdGgsCisg
ICAgICAgICAgICBoZWlnaHQ6IGJsdXJUZXh0dXJlSGVpZ2h0CisgICAgICAgIH0sIG51bGwsIF9N
YXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJU
ZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwg
ZmFsc2UsIHRleHR1cmVUeXBlKTsKKyAgICAgICAgdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJv
Y2VzczIgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIkJsdXJQb3N0UHJvY2VzcyJdKCJHbG93TGF5ZXJIQlAyIiwgbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IyIl0o
MS4wLCAwKSwgdGhpcy5fb3B0aW9ucy5ibHVyS2VybmVsU2l6ZSAvIDIsIHsKKyAgICAgICAgICAg
IHdpZHRoOiBibHVyVGV4dHVyZVdpZHRoMiwKKyAgICAgICAgICAgIGhlaWdodDogYmx1clRleHR1
cmVIZWlnaHQyCisgICAgICAgIH0sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdN
T0RFLCB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsIHRleHR1cmVUeXBlKTsKKyAgICAg
ICAgdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJvY2VzczIud2lkdGggPSBibHVyVGV4dHVyZVdp
ZHRoMjsKKyAgICAgICAgdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJvY2VzczIuaGVpZ2h0ID0g
Ymx1clRleHR1cmVIZWlnaHQyOworICAgICAgICB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9j
ZXNzMi5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAg
ICAgZWZmZWN0LnNldFRleHR1cmUoInRleHR1cmVTYW1wbGVyIiwgX3RoaXMuX2JsdXJUZXh0dXJl
MSk7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl92ZXJ0aWNhbEJsdXJQb3N0cHJvY2VzczIg
PSBuZXcgX1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkJsdXJQb3N0UHJvY2VzcyJdKCJHbG93TGF5ZXJWQlAyIiwgbmV3IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IyIl0oMCwgMS4w
KSwgdGhpcy5fb3B0aW9ucy5ibHVyS2VybmVsU2l6ZSAvIDIsIHsKKyAgICAgICAgICAgIHdpZHRo
OiBibHVyVGV4dHVyZVdpZHRoMiwKKyAgICAgICAgICAgIGhlaWdodDogYmx1clRleHR1cmVIZWln
aHQyCisgICAgICAgIH0sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0
aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsIHRleHR1cmVUeXBlKTsKKyAgICAgICAgdGhp
cy5fcG9zdFByb2Nlc3NlcyA9IFt0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9jZXNzMSwgdGhp
cy5fdmVydGljYWxCbHVyUG9zdHByb2Nlc3MxLCB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9j
ZXNzMiwgdGhpcy5fdmVydGljYWxCbHVyUG9zdHByb2Nlc3MyXTsKKyAgICAgICAgdGhpcy5fcG9z
dFByb2Nlc3NlczEgPSBbdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJvY2VzczEsIHRoaXMuX3Zl
cnRpY2FsQmx1clBvc3Rwcm9jZXNzMV07CisgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzZXMyID0g
W3RoaXMuX2hvcml6b250YWxCbHVyUG9zdHByb2Nlc3MyLCB0aGlzLl92ZXJ0aWNhbEJsdXJQb3N0
cHJvY2VzczJdOworICAgICAgICB0aGlzLl9tYWluVGV4dHVyZS5zYW1wbGVzID0gdGhpcy5fb3B0
aW9ucy5tYWluVGV4dHVyZVNhbXBsZXM7CisgICAgICAgIHRoaXMuX21haW5UZXh0dXJlLm9uQWZ0
ZXJVbmJpbmRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgaW50
ZXJuYWxUZXh0dXJlID0gX3RoaXMuX2JsdXJUZXh0dXJlMS5nZXRJbnRlcm5hbFRleHR1cmUoKTsK
KyAgICAgICAgICAgIGlmIChpbnRlcm5hbFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBfdGhp
cy5fc2NlbmUucG9zdFByb2Nlc3NNYW5hZ2VyLmRpcmVjdFJlbmRlcihfdGhpcy5fcG9zdFByb2Nl
c3NlczEsIGludGVybmFsVGV4dHVyZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgaW50ZXJuYWxU
ZXh0dXJlID0gX3RoaXMuX2JsdXJUZXh0dXJlMi5nZXRJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW50ZXJuYWxUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIF90
aGlzLl9zY2VuZS5wb3N0UHJvY2Vzc01hbmFnZXIuZGlyZWN0UmVuZGVyKF90aGlzLl9wb3N0UHJv
Y2Vzc2VzMiwgaW50ZXJuYWxUZXh0dXJlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAvLyBQcmV2ZW50IGF1dG9DbGVhci4KKyAg
ICAgICAgdGhpcy5fcG9zdFByb2Nlc3Nlcy5tYXAoZnVuY3Rpb24gKHBwKSB7IHBwLmF1dG9DbGVh
ciA9IGZhbHNlOyB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyBmb3IgdGhlIHJl
YWRpbmVzcyBvZiB0aGUgZWxlbWVudCBjb21wb3NpbmcgdGhlIGxheWVyLgorICAgICAqIEBwYXJh
bSBzdWJNZXNoIHRoZSBtZXNoIHRvIGNoZWNrIGZvcgorICAgICAqIEBwYXJhbSB1c2VJbnN0YW5j
ZXMgc3BlY2lmeSB3ZXRoZXIgb3Igbm90IHRvIHVzZSBpbnN0YW5jZXMgdG8gcmVuZGVyIHRoZSBt
ZXNoCisgICAgICogQHBhcmFtIGVtaXNzaXZlVGV4dHVyZSB0aGUgYXNzb2NpYXRlZCBlbWlzc2l2
ZSB0ZXh0dXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGdsb3cKKyAgICAgKiBAcmV0dXJuIHRydWUg
aWYgcmVhZHkgb3RoZXJ3aXNlLCBmYWxzZQorICAgICAqLworICAgIEdsb3dMYXllci5wcm90b3R5
cGUuaXNSZWFkeSA9IGZ1bmN0aW9uIChzdWJNZXNoLCB1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAg
dmFyIG1hdGVyaWFsID0gc3ViTWVzaC5nZXRNYXRlcmlhbCgpOworICAgICAgICB2YXIgbWVzaCA9
IHN1Yk1lc2guZ2V0UmVuZGVyaW5nTWVzaCgpOworICAgICAgICBpZiAoIW1hdGVyaWFsIHx8ICFt
ZXNoKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IGVtaXNzaXZlVGV4dHVyZSA9IG1hdGVyaWFsLmVtaXNzaXZlVGV4dHVyZTsKKyAgICAgICAgcmV0
dXJuIF9zdXBlci5wcm90b3R5cGUuX2lzUmVhZHkuY2FsbCh0aGlzLCBzdWJNZXNoLCB1c2VJbnN0
YW5jZXMsIGVtaXNzaXZlVGV4dHVyZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IHdldGhlciBvciBub29kIHRoZSBsYXllciBuZWVkcyBzdGVuY2lsIGVuYWJsZWQgZHVyaW5nIHRo
ZSBtZXNoIHJlbmRlcmluZy4KKyAgICAgKi8KKyAgICBHbG93TGF5ZXIucHJvdG90eXBlLm5lZWRT
dGVuY2lsID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggY2FuIGJlIHJlbmRlcmVkLCBv
dGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gcmVuZGVyCisg
ICAgICogQHBhcmFtIG1hdGVyaWFsIFRoZSBtYXRlcmlhbCB1c2VkIG9uIHRoZSBtZXNoCisgICAg
ICogQHJldHVybnMgdHJ1ZSBpZiBpdCBjYW4gYmUgcmVuZGVyZWQgb3RoZXJ3aXNlIGZhbHNlCisg
ICAgICovCisgICAgR2xvd0xheWVyLnByb3RvdHlwZS5fY2FuUmVuZGVyTWVzaCA9IGZ1bmN0aW9u
IChtZXNoLCBtYXRlcmlhbCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIG9mIHJlbmRlcmluZyB0aGUgZ2VuZXJh
dGluZyBlZmZlY3Qgb24gdGhlIG1haW4gY2FudmFzLgorICAgICAqIEBwYXJhbSBlZmZlY3QgVGhl
IGVmZmVjdCB1c2VkIHRvIHJlbmRlciB0aHJvdWdoCisgICAgICovCisgICAgR2xvd0xheWVyLnBy
b3RvdHlwZS5faW50ZXJuYWxSZW5kZXIgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgIC8v
IFRleHR1cmUKKyAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInRleHR1cmVTYW1wbGVyIiwgdGhp
cy5fYmx1clRleHR1cmUxKTsKKyAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInRleHR1cmVTYW1w
bGVyMiIsIHRoaXMuX2JsdXJUZXh0dXJlMik7CisgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgib2Zm
c2V0IiwgdGhpcy5faW50ZW5zaXR5KTsKKyAgICAgICAgLy8gQ2FjaGUKKyAgICAgICAgdmFyIGVu
Z2luZSA9IHRoaXMuX2VuZ2luZTsKKyAgICAgICAgdmFyIHByZXZpb3VzU3RlbmNpbEJ1ZmZlciA9
IGVuZ2luZS5nZXRTdGVuY2lsQnVmZmVyKCk7CisgICAgICAgIC8vIERyYXcgb3JkZXIKKyAgICAg
ICAgZW5naW5lLnNldFN0ZW5jaWxCdWZmZXIoZmFsc2UpOworICAgICAgICBlbmdpbmUuZHJhd0Vs
ZW1lbnRzVHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82
X19bIk1hdGVyaWFsIl0uVHJpYW5nbGVGaWxsTW9kZSwgMCwgNik7CisgICAgICAgIC8vIERyYXcg
b3JkZXIKKyAgICAgICAgZW5naW5lLnNldFN0ZW5jaWxCdWZmZXIocHJldmlvdXNTdGVuY2lsQnVm
ZmVyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHJlcXVpcmVkIHZhbHVlcyBm
b3IgYm90aCB0aGUgZW1pc3NpdmUgdGV4dHVyZSBhbmQgYW5kIHRoZSBtYWluIGNvbG9yLgorICAg
ICAqLworICAgIEdsb3dMYXllci5wcm90b3R5cGUuX3NldEVtaXNzaXZlVGV4dHVyZUFuZENvbG9y
ID0gZnVuY3Rpb24gKG1lc2gsIHN1Yk1lc2gsIG1hdGVyaWFsKSB7CisgICAgICAgIHZhciB0ZXh0
dXJlTGV2ZWwgPSAxLjA7CisgICAgICAgIGlmICh0aGlzLmN1c3RvbUVtaXNzaXZlVGV4dHVyZVNl
bGVjdG9yKSB7CisgICAgICAgICAgICB0aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci50ZXh0
dXJlID0gdGhpcy5jdXN0b21FbWlzc2l2ZVRleHR1cmVTZWxlY3RvcihtZXNoLCBzdWJNZXNoLCBt
YXRlcmlhbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAobWF0
ZXJpYWwpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci50
ZXh0dXJlID0gbWF0ZXJpYWwuZW1pc3NpdmVUZXh0dXJlOworICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci50ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVMZXZlbCA9IHRoaXMuX2VtaXNzaXZlVGV4dHVyZUFuZENvbG9yLnRleHR1cmUu
bGV2ZWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZW1pc3NpdmVUZXh0dXJlQW5kQ29sb3IudGV4dHVy
ZSA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuY3Vz
dG9tRW1pc3NpdmVDb2xvclNlbGVjdG9yKSB7CisgICAgICAgICAgICB0aGlzLmN1c3RvbUVtaXNz
aXZlQ29sb3JTZWxlY3RvcihtZXNoLCBzdWJNZXNoLCBtYXRlcmlhbCwgdGhpcy5fZW1pc3NpdmVU
ZXh0dXJlQW5kQ29sb3IuY29sb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgaWYgKG1hdGVyaWFsLmVtaXNzaXZlQ29sb3IpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9lbWlzc2l2ZVRleHR1cmVBbmRDb2xvci5jb2xvci5zZXQobWF0ZXJpYWwuZW1pc3NpdmVDb2xv
ci5yICogdGV4dHVyZUxldmVsLCBtYXRlcmlhbC5lbWlzc2l2ZUNvbG9yLmcgKiB0ZXh0dXJlTGV2
ZWwsIG1hdGVyaWFsLmVtaXNzaXZlQ29sb3IuYiAqIHRleHR1cmVMZXZlbCwgbWF0ZXJpYWwuYWxw
aGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fZW1pc3NpdmVUZXh0dXJlQW5kQ29sb3IuY29sb3Iuc2V0KHRoaXMubmV1dHJhbENvbG9y
LnIsIHRoaXMubmV1dHJhbENvbG9yLmcsIHRoaXMubmV1dHJhbENvbG9yLmIsIHRoaXMubmV1dHJh
bENvbG9yLmEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggc2hvdWxkIHJlbmRlciwgb3RoZXJ3aXNlIGZh
bHNlLgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRvIHJlbmRlcgorICAgICAqIEByZXR1
cm5zIHRydWUgaWYgaXQgc2hvdWxkIHJlbmRlciBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAg
ICBHbG93TGF5ZXIucHJvdG90eXBlLl9zaG91bGRSZW5kZXJNZXNoID0gZnVuY3Rpb24gKG1lc2gp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuaGFzTWVzaChtZXNoKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFkZHMgc3BlY2lmaWMgZWZmZWN0cyBkZWZpbmVzLgorICAgICAqIEBwYXJhbSBkZWZp
bmVzIFRoZSBkZWZpbmVzIHRvIGFkZCBzcGVjaWZpY3MgdG8uCisgICAgICovCisgICAgR2xvd0xh
eWVyLnByb3RvdHlwZS5fYWRkQ3VzdG9tRWZmZWN0RGVmaW5lcyA9IGZ1bmN0aW9uIChkZWZpbmVz
KSB7CisgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBHTE9XIik7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBZGQgYSBtZXNoIGluIHRoZSBleGNsdXNpb24gbGlzdCB0byBwcmV2ZW50IGl0
IHRvIGltcGFjdCBvciBiZWluZyBpbXBhY3RlZCBieSB0aGUgZ2xvdyBsYXllci4KKyAgICAgKiBA
cGFyYW0gbWVzaCBUaGUgbWVzaCB0byBleGNsdWRlIGZyb20gdGhlIGdsb3cgbGF5ZXIKKyAgICAg
Ki8KKyAgICBHbG93TGF5ZXIucHJvdG90eXBlLmFkZEV4Y2x1ZGVkTWVzaCA9IGZ1bmN0aW9uICht
ZXNoKSB7CisgICAgICAgIGlmICh0aGlzLl9leGNsdWRlZE1lc2hlcy5pbmRleE9mKG1lc2gudW5p
cXVlSWQpID09PSAtMSkgeworICAgICAgICAgICAgdGhpcy5fZXhjbHVkZWRNZXNoZXMucHVzaCht
ZXNoLnVuaXF1ZUlkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICAqIFJlbW92
ZSBhIG1lc2ggZnJvbSB0aGUgZXhjbHVzaW9uIGxpc3QgdG8gbGV0IGl0IGltcGFjdCBvciBiZWlu
ZyBpbXBhY3RlZCBieSB0aGUgZ2xvdyBsYXllci4KKyAgICAgICogQHBhcmFtIG1lc2ggVGhlIG1l
c2ggdG8gcmVtb3ZlCisgICAgICAqLworICAgIEdsb3dMYXllci5wcm90b3R5cGUucmVtb3ZlRXhj
bHVkZWRNZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5f
ZXhjbHVkZWRNZXNoZXMuaW5kZXhPZihtZXNoLnVuaXF1ZUlkKTsKKyAgICAgICAgaWYgKGluZGV4
ICE9PSAtMSkgeworICAgICAgICAgICAgdGhpcy5fZXhjbHVkZWRNZXNoZXMuc3BsaWNlKGluZGV4
LCAxKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGEgbWVzaCBpbiB0
aGUgaW5jbHVzaW9uIGxpc3QgdG8gaW1wYWN0IG9yIGJlaW5nIGltcGFjdGVkIGJ5IHRoZSBnbG93
IGxheWVyLgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRvIGluY2x1ZGUgaW4gdGhlIGds
b3cgbGF5ZXIKKyAgICAgKi8KKyAgICBHbG93TGF5ZXIucHJvdG90eXBlLmFkZEluY2x1ZGVkT25s
eU1lc2ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICBpZiAodGhpcy5faW5jbHVkZWRPbmx5
TWVzaGVzLmluZGV4T2YobWVzaC51bmlxdWVJZCkgPT09IC0xKSB7CisgICAgICAgICAgICB0aGlz
Ll9pbmNsdWRlZE9ubHlNZXNoZXMucHVzaChtZXNoLnVuaXF1ZUlkKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICAqIFJlbW92ZSBhIG1lc2ggZnJvbSB0aGUgSW5jbHVzaW9uIGxp
c3QgdG8gcHJldmVudCBpdCB0byBpbXBhY3Qgb3IgYmVpbmcgaW1wYWN0ZWQgYnkgdGhlIGdsb3cg
bGF5ZXIuCisgICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRvIHJlbW92ZQorICAgICAgKi8K
KyAgICBHbG93TGF5ZXIucHJvdG90eXBlLnJlbW92ZUluY2x1ZGVkT25seU1lc2ggPSBmdW5jdGlv
biAobWVzaCkgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pbmNsdWRlZE9ubHlNZXNoZXMu
aW5kZXhPZihtZXNoLnVuaXF1ZUlkKTsKKyAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAg
ICAgICAgICAgdGhpcy5faW5jbHVkZWRPbmx5TWVzaGVzLnNwbGljZShpbmRleCwgMSk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERldGVybWluZSBpZiBhIGdpdmVuIG1lc2gg
d2lsbCBiZSB1c2VkIGluIHRoZSBnbG93IGxheWVyCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1l
c2ggdG8gdGVzdAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggd2lsbCBiZSBoaWdo
bGlnaHRlZCBieSB0aGUgY3VycmVudCBnbG93IGxheWVyCisgICAgICovCisgICAgR2xvd0xheWVy
LnByb3RvdHlwZS5oYXNNZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKCFfc3Vw
ZXIucHJvdG90eXBlLmhhc01lc2guY2FsbCh0aGlzLCBtZXNoKSkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIEluY2x1ZGVkIE1lc2gKKyAgICAgICAg
aWYgKHRoaXMuX2luY2x1ZGVkT25seU1lc2hlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9pbmNsdWRlZE9ubHlNZXNoZXMuaW5kZXhPZihtZXNoLnVuaXF1ZUlkKSAhPT0gLTE7
CisgICAgICAgIH0KKyAgICAgICAgLy8gRXhjbHVkZWQgTWVzaAorICAgICAgICBpZiAodGhpcy5f
ZXhjbHVkZWRNZXNoZXMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhjbHVk
ZWRNZXNoZXMuaW5kZXhPZihtZXNoLnVuaXF1ZUlkKSA9PT0gLTE7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGcmVlIGFueSByZXNvdXJj
ZXMgYW5kIHJlZmVyZW5jZXMgYXNzb2NpYXRlZCB0byBhIG1lc2guCisgICAgICogSW50ZXJuYWwg
dXNlCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gZnJlZS4KKyAgICAgKiBAaGlkZGVu
CisgICAgICovCisgICAgR2xvd0xheWVyLnByb3RvdHlwZS5fZGlzcG9zZU1lc2ggPSBmdW5jdGlv
biAobWVzaCkgeworICAgICAgICB0aGlzLnJlbW92ZUluY2x1ZGVkT25seU1lc2gobWVzaCk7Cisg
ICAgICAgIHRoaXMucmVtb3ZlRXhjbHVkZWRNZXNoKG1lc2gpOworICAgIH07CisgICAgLyoqCisg
ICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVmZmVjdCBsYXllcgorICAgICAgKiBA
cmV0dXJucyB0aGUgc3RyaW5nIHdpdGggdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVmZmVjdCBsYXll
cgorICAgICAgKi8KKyAgICBHbG93TGF5ZXIucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJHbG93TGF5ZXIiOworICAgIH07CisgICAgLyoqCisg
ICAgICogU2VyaWFsaXplcyB0aGlzIGdsb3cgbGF5ZXIKKyAgICAgKiBAcmV0dXJucyBhIHNlcmlh
bGl6ZWQgZ2xvdyBsYXllciBvYmplY3QKKyAgICAgKi8KKyAgICBHbG93TGF5ZXIucHJvdG90eXBl
LnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmpl
Y3QgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlh
bGl6YXRpb25IZWxwZXIiXS5TZXJpYWxpemUodGhpcyk7CisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QuY3VzdG9tVHlwZSA9ICJCQUJZTE9OLkdsb3dMYXllciI7CisgICAgICAgIHZhciBpbmRl
eDsKKyAgICAgICAgLy8gSW5jbHVkZWQgbWVzaGVzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QuaW5jbHVkZWRNZXNoZXMgPSBbXTsKKyAgICAgICAgaWYgKHRoaXMuX2luY2x1ZGVkT25seU1l
c2hlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRoaXMu
X2luY2x1ZGVkT25seU1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2
YXIgbWVzaCA9IHRoaXMuX3NjZW5lLmdldE1lc2hCeVVuaXF1ZUlEKHRoaXMuX2luY2x1ZGVkT25s
eU1lc2hlc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGlmIChtZXNoKSB7CisgICAgICAgICAg
ICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaW5jbHVkZWRNZXNoZXMucHVzaChtZXNoLmlk
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
Ly8gRXhjbHVkZWQgbWVzaGVzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZXhjbHVkZWRN
ZXNoZXMgPSBbXTsKKyAgICAgICAgaWYgKHRoaXMuX2V4Y2x1ZGVkTWVzaGVzLmxlbmd0aCkgewor
ICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZXhjbHVkZWRNZXNoZXMu
bGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLl9zY2Vu
ZS5nZXRNZXNoQnlVbmlxdWVJRCh0aGlzLl9leGNsdWRlZE1lc2hlc1tpbmRleF0pOworICAgICAg
ICAgICAgICAgIGlmIChtZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QuZXhjbHVkZWRNZXNoZXMucHVzaChtZXNoLmlkKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmpl
Y3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgR2xvdyBMYXllciBmcm9tIHBh
cnNlZCBnbG93IGxheWVyIGRhdGEKKyAgICAgKiBAcGFyYW0gcGFyc2VkR2xvd0xheWVyIGRlZmlu
ZXMgZ2xvdyBsYXllciBkYXRhCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGN1cnJl
bnQgc2NlbmUKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSByb290IFVSTCBjb250
YWluaW5nIHRoZSBnbG93IGxheWVyIGluZm9ybWF0aW9uCisgICAgICogQHJldHVybnMgYSBwYXJz
ZWQgR2xvdyBMYXllcgorICAgICAqLworICAgIEdsb3dMYXllci5QYXJzZSA9IGZ1bmN0aW9uIChw
YXJzZWRHbG93TGF5ZXIsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIHZhciBnbCA9IF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhl
bHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBHbG93TGF5ZXIocGFyc2VkR2xv
d0xheWVyLm5hbWUsIHNjZW5lLCBwYXJzZWRHbG93TGF5ZXIub3B0aW9ucyk7IH0sIHBhcnNlZEds
b3dMYXllciwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIC8v
IEV4Y2x1ZGVkIG1lc2hlcworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJzZWRH
bG93TGF5ZXIuZXhjbHVkZWRNZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2
YXIgbWVzaCA9IHNjZW5lLmdldE1lc2hCeUlEKHBhcnNlZEdsb3dMYXllci5leGNsdWRlZE1lc2hl
c1tpbmRleF0pOworICAgICAgICAgICAgaWYgKG1lc2gpIHsKKyAgICAgICAgICAgICAgICBnbC5h
ZGRFeGNsdWRlZE1lc2gobWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
Ly8gSW5jbHVkZWQgbWVzaGVzCisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBhcnNl
ZEdsb3dMYXllci5pbmNsdWRlZE1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAg
IHZhciBtZXNoID0gc2NlbmUuZ2V0TWVzaEJ5SUQocGFyc2VkR2xvd0xheWVyLmluY2x1ZGVkTWVz
aGVzW2luZGV4XSk7CisgICAgICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgICAgIGds
LmFkZEluY2x1ZGVkT25seU1lc2gobWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGdsOworICAgIH07CisgICAgLyoqCisgICAgICogRWZmZWN0IE5hbWUgb2Yg
dGhlIGxheWVyLgorICAgICAqLworICAgIEdsb3dMYXllci5FZmZlY3ROYW1lID0gIkdsb3dMYXll
ciI7CisgICAgLyoqCisgICAgICogVGhlIGRlZmF1bHQgYmx1ciBrZXJuZWwgc2l6ZSB1c2VkIGZv
ciB0aGUgZ2xvdy4KKyAgICAgKi8KKyAgICBHbG93TGF5ZXIuRGVmYXVsdEJsdXJLZXJuZWxTaXpl
ID0gMzI7CisgICAgLyoqCisgICAgICogVGhlIGRlZmF1bHQgdGV4dHVyZSBzaXplIHJhdGlvIHVz
ZWQgZm9yIHRoZSBnbG93LgorICAgICAqLworICAgIEdsb3dMYXllci5EZWZhdWx0VGV4dHVyZVJh
dGlvID0gMC41OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVj
b3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgR2xvd0xheWVyLnByb3RvdHlw
ZSwgImJsdXJLZXJuZWxTaXplIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBH
bG93TGF5ZXIucHJvdG90eXBlLCAiaW50ZW5zaXR5IiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCJvcHRpb25zIikKKyAgICBdLCBHbG93TGF5ZXIucHJvdG90eXBlLCAiX29wdGlvbnMiLCB2b2lk
IDApOworICAgIHJldHVybiBHbG93TGF5ZXI7Cit9KF9lZmZlY3RMYXllcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJFZmZlY3RMYXllciJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1si
QkFCWUxPTi5HbG93TGF5ZXIiXSA9IEdsb3dMYXllcjsKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vTGF5ZXJzL2hpZ2hsaWdodExheWVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL0xheWVycy9oaWdobGlnaHRMYXllci50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IEhpZ2hsaWdodExheWVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkhpZ2hsaWdodExheWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBIaWdobGlnaHRMYXllcjsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAq
LyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9y
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVz
L2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlh
bHMvbWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVy
ZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRlclRhcmdldFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxz
L1RleHR1cmVzL3JlbmRlclRhcmdldFRleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2Vz
cyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfcGFzc1Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUG9zdFByb2Nlc3Nlcy9w
YXNzUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wYXNzUG9zdFByb2Nlc3MudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19ibHVyUG9zdFByb2Nlc3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9Qb3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL2JsdXJQ
b3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lZmZlY3RMYXllcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
ZWZmZWN0TGF5ZXIgKi8gIi4vTGF5ZXJzL2VmZmVjdExheWVyLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9hYnN0cmFjdFNjZW5lICovICIuL2Fic3RyYWN0
U2NlbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2Mv
bG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0
aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2ds
b3dNYXBNZXJnZV9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZ2xvd01hcE1lcmdlLmZyYWdtZW50ICovICIu
L1NoYWRlcnMvZ2xvd01hcE1lcmdlLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1NoYWRlcnNfZ2xvd01hcE1lcmdlX3ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZ2xvd01hcE1lcmdl
LnZlcnRleCAqLyAiLi9TaGFkZXJzL2dsb3dNYXBNZXJnZS52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19nbG93Qmx1clBvc3RQcm9jZXNzX2ZyYWdtZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
U2hhZGVycy9nbG93Qmx1clBvc3RQcm9jZXNzLmZyYWdtZW50ICovICIuL1NoYWRlcnMvZ2xvd0Js
dXJQb3N0UHJvY2Vzcy5mcmFnbWVudC50cyIpOworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEz
X19bIkFic3RyYWN0U2NlbmUiXS5wcm90b3R5cGUuZ2V0SGlnaGxpZ2h0TGF5ZXJCeU5hbWUgPSBm
dW5jdGlvbiAobmFtZSkgeworICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmVm
ZmVjdExheWVycy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgaWYgKHRoaXMuZWZmZWN0TGF5
ZXJzW2luZGV4XS5uYW1lID09PSBuYW1lICYmIHRoaXMuZWZmZWN0TGF5ZXJzW2luZGV4XS5nZXRF
ZmZlY3ROYW1lKCkgPT09IEhpZ2hsaWdodExheWVyLkVmZmVjdE5hbWUpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLmVmZmVjdExheWVyc1tpbmRleF07CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIG51bGw7Cit9OworLyoqCisgKiBTcGVjaWFsIEdsb3cgQmx1ciBwb3N0IHByb2Nlc3Mg
b25seSBibHVycmluZyB0aGUgYWxwaGEgY2hhbm5lbAorICogSXQgZW5mb3JjZXMga2VlcGluZyB0
aGUgbW9zdCBsdW1pbm91cyBjb2xvciBpbiB0aGUgY29sb3IgY2hhbm5lbC4KKyAqLwordmFyIEds
b3dCbHVyUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oR2xvd0Js
dXJQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBHbG93Qmx1clBvc3RQcm9jZXNz
KG5hbWUsIGRpcmVjdGlvbiwga2VybmVsLCBvcHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwg
ZW5naW5lLCByZXVzYWJsZSkgeworICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lkIDAp
IHsgc2FtcGxpbmdNb2RlID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREU7IH0KKyAg
ICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgImdsb3dCbHVyUG9zdFBy
b2Nlc3MiLCBbInNjcmVlblNpemUiLCAiZGlyZWN0aW9uIiwgImJsdXJXaWR0aCJdLCBudWxsLCBv
cHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSkgfHwgdGhpczsK
KyAgICAgICAgX3RoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uOworICAgICAgICBfdGhpcy5rZXJu
ZWwgPSBrZXJuZWw7CisgICAgICAgIF90aGlzLm9uQXBwbHlPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCJzY3JlZW5TaXplIiwg
X3RoaXMud2lkdGgsIF90aGlzLmhlaWdodCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0VmVjdG9y
MigiZGlyZWN0aW9uIiwgX3RoaXMuZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRG
bG9hdCgiYmx1cldpZHRoIiwgX3RoaXMua2VybmVsKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiBfdGhpczsKKyAgICB9CisgICAgcmV0dXJuIEdsb3dCbHVyUG9zdFByb2Nlc3M7Cit9KF9Q
b3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlBv
c3RQcm9jZXNzIl0pKTsKKy8qKgorICogVGhlIGhpZ2hsaWdodCBsYXllciBIZWxwcyBhZGRpbmcg
YSBnbG93IGVmZmVjdCBhcm91bmQgYSBtZXNoLgorICoKKyAqIE9uY2UgaW5zdGFudGlhdGVkIGlu
IGEgc2NlbmUsIHNpbXBseSB1c2UgdGhlIHB1c2hNZXNoIG9yIHJlbW92ZU1lc2ggbWV0aG9kIHRv
IGFkZCBvciByZW1vdmUKKyAqIGdsb3d5IG1lc2hlcyB0byB5b3VyIHNjZW5lLgorICoKKyAqICEh
ISBUSElTIFJFUVVJUkVTIEFOIEFDVElWRSBTVEVOQ0lMIEJVRkZFUiBPTiBUSEUgQ0FOVkFTICEh
IQorICovCit2YXIgSGlnaGxpZ2h0TGF5ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1
cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRz
Il0oSGlnaGxpZ2h0TGF5ZXIsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVz
IGEgbmV3IGhpZ2hsaWdodCBMYXllciBhbmQgcmVmZXJlbmNlcyBpdCB0byB0aGUgc2NlbmUuLgor
ICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBsYXllcgorICAgICAqIEBwYXJhbSBz
Y2VuZSBUaGUgc2NlbmUgdG8gdXNlIHRoZSBsYXllciBpbgorICAgICAqIEBwYXJhbSBvcHRpb25z
IFNldHMgb2Ygbm9uZSBtYW5kYXRvcnkgb3B0aW9ucyB0byB1c2Ugd2l0aCB0aGUgbGF5ZXIgKHNl
ZSBJSGlnaGxpZ2h0TGF5ZXJPcHRpb25zIGZvciBtb3JlIGluZm9ybWF0aW9uKQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIEhpZ2hsaWdodExheWVyKG5hbWUsIHNjZW5lLCBvcHRpb25zKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0aGlzOwor
ICAgICAgICBfdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNp
ZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgaW5uZXIgZ2xvdyBpcyBBQ1RJVkUgaW4gdGhlIGxheWVy
LgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaW5uZXJHbG93ID0gdHJ1ZTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgb3V0ZXIgZ2xvdyBp
cyBBQ1RJVkUgaW4gdGhlIGxheWVyLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub3V0ZXJH
bG93ID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3
aGVuIHRoZSBoaWdobGlnaHQgbGF5ZXIgaXMgYmVpbmcgYmx1cnJlZC4KKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLm9uQmVmb3JlQmx1ck9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJs
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBoaWdobGlnaHQgbGF5
ZXIgaGFzIGJlZW4gYmx1cnJlZC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uQWZ0ZXJC
bHVyT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhpcy5faW5zdGFuY2VHbG93aW5n
TWVzaFN0ZW5jaWxSZWZlcmVuY2UgPSBIaWdobGlnaHRMYXllci5HbG93aW5nTWVzaFN0ZW5jaWxS
ZWZlcmVuY2UrKzsKKyAgICAgICAgX3RoaXMuX21lc2hlcyA9IHt9OworICAgICAgICBfdGhpcy5f
ZXhjbHVkZWRNZXNoZXMgPSB7fTsKKyAgICAgICAgX3RoaXMubmV1dHJhbENvbG9yID0gSGlnaGxp
Z2h0TGF5ZXIuTmV1dHJhbENvbG9yOworICAgICAgICAvLyBXYXJuIG9uIHN0ZW5jaWwKKyAgICAg
ICAgaWYgKCFfdGhpcy5fZW5naW5lLmlzU3RlbmNpbEVuYWJsZSkgeworICAgICAgICAgICAgX01p
c2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJMb2dnZXIiXS5XYXJuKCJS
ZW5kZXJpbmcgdGhlIEhpZ2hsaWdodCBMYXllciByZXF1aXJlcyB0aGUgc3RlbmNpbCB0byBiZSBh
Y3RpdmUgb24gdGhlIGNhbnZhcy4gdmFyIGVuZ2luZSA9IG5ldyBFbmdpbmUoY2FudmFzLCBhbnRp
YWxpYXMsIHsgc3RlbmNpbDogdHJ1ZSB9Iik7CisgICAgICAgIH0KKyAgICAgICAgLy8gQWRhcHQg
b3B0aW9ucworICAgICAgICBfdGhpcy5fb3B0aW9ucyA9IHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fYXNzaWduIl0oeyBtYWluVGV4dHVyZVJhdGlvOiAwLjUsIGJsdXJUZXh0
dXJlU2l6ZVJhdGlvOiAwLjUsIGJsdXJIb3Jpem9udGFsU2l6ZTogMS4wLCBibHVyVmVydGljYWxT
aXplOiAxLjAsIGFscGhhQmxlbmRpbmdNb2RlOiBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE0X19bIkNvbnN0YW50cyJdLkFMUEhBX0NPTUJJTkUsIGNhbWVyYTog
bnVsbCwgcmVuZGVyaW5nR3JvdXBJZDogLTEgfSwgb3B0aW9ucyk7CisgICAgICAgIC8vIEluaXRp
YWxpemUgdGhlIGxheWVyCisgICAgICAgIF90aGlzLl9pbml0KHsKKyAgICAgICAgICAgIGFscGhh
QmxlbmRpbmdNb2RlOiBfdGhpcy5fb3B0aW9ucy5hbHBoYUJsZW5kaW5nTW9kZSwKKyAgICAgICAg
ICAgIGNhbWVyYTogX3RoaXMuX29wdGlvbnMuY2FtZXJhLAorICAgICAgICAgICAgbWFpblRleHR1
cmVGaXhlZFNpemU6IF90aGlzLl9vcHRpb25zLm1haW5UZXh0dXJlRml4ZWRTaXplLAorICAgICAg
ICAgICAgbWFpblRleHR1cmVSYXRpbzogX3RoaXMuX29wdGlvbnMubWFpblRleHR1cmVSYXRpbywK
KyAgICAgICAgICAgIHJlbmRlcmluZ0dyb3VwSWQ6IF90aGlzLl9vcHRpb25zLnJlbmRlcmluZ0dy
b3VwSWQKKyAgICAgICAgfSk7CisgICAgICAgIC8vIERvIG5vdCByZW5kZXIgYXMgbG9uZyBhcyBu
byBtZXNoZXMgaGF2ZSBiZWVuIGFkZGVkCisgICAgICAgIF90aGlzLl9zaG91bGRSZW5kZXIgPSBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoSGlnaGxpZ2h0TGF5ZXIucHJvdG90eXBlLCAiYmx1ckhvcml6b250YWxTaXplIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgaG9yaXpvbnRhbCBzaXplIG9mIHRoZSBi
bHVyLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJvY2Vzcy5rZXJuZWw7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGhvcml6b250YWwgc2l6
ZSBvZiB0aGUgYmx1ci4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9jZXNzLmtlcm5lbCA9
IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSGln
aGxpZ2h0TGF5ZXIucHJvdG90eXBlLCAiYmx1clZlcnRpY2FsU2l6ZSIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIHZlcnRpY2FsIHNpemUgb2YgdGhlIGJsdXIuCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll92ZXJ0aWNhbEJsdXJQb3N0cHJvY2Vzcy5rZXJuZWw7CisgICAgICAgIH0sCisgICAgICAgIC8q
KgorICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHZlcnRpY2FsIHNpemUgb2YgdGhlIGJsdXIuCisg
ICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAg
dGhpcy5fdmVydGljYWxCbHVyUG9zdHByb2Nlc3Mua2VybmVsID0gdmFsdWU7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIC8qKgorICAgICAqIEdldCB0aGUgZWZmZWN0IG5hbWUgb2YgdGhlIGxheWVy
LgorICAgICAqIEByZXR1cm4gVGhlIGVmZmVjdCBuYW1lCisgICAgICovCisgICAgSGlnaGxpZ2h0
TGF5ZXIucHJvdG90eXBlLmdldEVmZmVjdE5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiBIaWdobGlnaHRMYXllci5FZmZlY3ROYW1lOworICAgIH07CisgICAgLyoqCisgICAgICog
Q3JlYXRlIHRoZSBtZXJnZSBlZmZlY3QuIFRoaXMgaXMgdGhlIHNoYWRlciB1c2UgdG8gYmxpdCB0
aGUgaW5mb3JtYXRpb24gYmFjaworICAgICAqIHRvIHRoZSBtYWluIGNhbnZhcyBhdCB0aGUgZW5k
IG9mIHRoZSBzY2VuZSByZW5kZXJpbmcuCisgICAgICovCisgICAgSGlnaGxpZ2h0TGF5ZXIucHJv
dG90eXBlLl9jcmVhdGVNZXJnZUVmZmVjdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gRWZm
ZWN0CisgICAgICAgIHJldHVybiB0aGlzLl9lbmdpbmUuY3JlYXRlRWZmZWN0KCJnbG93TWFwTWVy
Z2UiLCBbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4
QnVmZmVyIl0uUG9zaXRpb25LaW5kXSwgWyJvZmZzZXQiXSwgWyJ0ZXh0dXJlU2FtcGxlciJdLCB0
aGlzLl9vcHRpb25zLmlzU3Ryb2tlID8gIiNkZWZpbmUgU1RST0tFIFxuIiA6IHVuZGVmaW5lZCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSByZW5kZXIgdGFyZ2V0IHRleHR1
cmVzIGFuZCBwb3N0IHByb2Nlc3NlcyB1c2VkIGluIHRoZSBoaWdobGlnaHQgbGF5ZXIuCisgICAg
ICovCisgICAgSGlnaGxpZ2h0TGF5ZXIucHJvdG90eXBlLl9jcmVhdGVUZXh0dXJlQW5kUG9zdFBy
b2Nlc3NlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgdmFyIGJsdXJUZXh0dXJlV2lkdGggPSB0aGlzLl9tYWluVGV4dHVyZURlc2lyZWRTaXplLndp
ZHRoICogdGhpcy5fb3B0aW9ucy5ibHVyVGV4dHVyZVNpemVSYXRpbzsKKyAgICAgICAgdmFyIGJs
dXJUZXh0dXJlSGVpZ2h0ID0gdGhpcy5fbWFpblRleHR1cmVEZXNpcmVkU2l6ZS5oZWlnaHQgKiB0
aGlzLl9vcHRpb25zLmJsdXJUZXh0dXJlU2l6ZVJhdGlvOworICAgICAgICBibHVyVGV4dHVyZVdp
ZHRoID0gdGhpcy5fZW5naW5lLm5lZWRQT1RUZXh0dXJlcyA/IF9FbmdpbmVzX2VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJFbmdpbmUiXS5HZXRFeHBvbmVudE9mVHdvKGJsdXJU
ZXh0dXJlV2lkdGgsIHRoaXMuX21heFNpemUpIDogYmx1clRleHR1cmVXaWR0aDsKKyAgICAgICAg
Ymx1clRleHR1cmVIZWlnaHQgPSB0aGlzLl9lbmdpbmUubmVlZFBPVFRleHR1cmVzID8gX0VuZ2lu
ZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdLkdldEV4cG9u
ZW50T2ZUd28oYmx1clRleHR1cmVIZWlnaHQsIHRoaXMuX21heFNpemUpIDogYmx1clRleHR1cmVI
ZWlnaHQ7CisgICAgICAgIHZhciB0ZXh0dXJlVHlwZSA9IDA7CisgICAgICAgIGlmICh0aGlzLl9l
bmdpbmUuZ2V0Q2FwcygpLnRleHR1cmVIYWxmRmxvYXRSZW5kZXIpIHsKKyAgICAgICAgICAgIHRl
eHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
NF9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VO
U0lHTkVEX0lOVDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9ibHVyVGV4dHVyZSA9IG5ldyBf
TWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzhfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdKCJIaWdobGlnaHRMYXllckJsdXJSVFQi
LCB7CisgICAgICAgICAgICB3aWR0aDogYmx1clRleHR1cmVXaWR0aCwKKyAgICAgICAgICAgIGhl
aWdodDogYmx1clRleHR1cmVIZWlnaHQKKyAgICAgICAgfSwgdGhpcy5fc2NlbmUsIGZhbHNlLCB0
cnVlLCB0ZXh0dXJlVHlwZSk7CisgICAgICAgIHRoaXMuX2JsdXJUZXh0dXJlLndyYXBVID0gX01h
dGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlRl
eHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgdGhpcy5fYmx1clRleHR1cmUud3Jh
cFYgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzdfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICB0aGlzLl9ibHVyVGV4
dHVyZS5hbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsID0gMTY7CisgICAgICAgIHRoaXMuX2JsdXJU
ZXh0dXJlLnVwZGF0ZVNhbXBsaW5nTW9kZShfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVGV4dHVyZSJdLlRSSUxJTkVBUl9TQU1QTElOR01P
REUpOworICAgICAgICB0aGlzLl9ibHVyVGV4dHVyZS5yZW5kZXJQYXJ0aWNsZXMgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fYmx1clRleHR1cmUuaWdub3JlQ2FtZXJhVmlld3BvcnQgPSB0cnVlOwor
ICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFt0aGlzLl9ibHVyVGV4dHVyZV07CisgICAgICAgIGlm
ICh0aGlzLl9vcHRpb25zLmFscGhhQmxlbmRpbmdNb2RlID09PSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkNvbnN0YW50cyJdLkFMUEhBX0NPTUJJTkUp
IHsKKyAgICAgICAgICAgIHRoaXMuX2Rvd25TYW1wbGVQb3N0cHJvY2VzcyA9IG5ldyBfUG9zdFBy
b2Nlc3Nlc19wYXNzUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlBh
c3NQb3N0UHJvY2VzcyJdKCJIaWdobGlnaHRMYXllclBQUCIsIHRoaXMuX29wdGlvbnMuYmx1clRl
eHR1cmVTaXplUmF0aW8sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0
aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSk7CisgICAgICAgICAgICB0aGlzLl9kb3duU2FtcGxlUG9z
dHByb2Nlc3Mub25BcHBseU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAg
ICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgidGV4dHVyZVNhbXBsZXIiLCBfdGhpcy5fbWFp
blRleHR1cmUpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFs
Qmx1clBvc3Rwcm9jZXNzID0gbmV3IEdsb3dCbHVyUG9zdFByb2Nlc3MoIkhpZ2hsaWdodExheWVy
SEJQIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJWZWN0b3IyIl0oMS4wLCAwKSwgdGhpcy5fb3B0aW9ucy5ibHVySG9yaXpvbnRhbFNpemUsIDEs
IG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0aGlzLl9zY2VuZS5nZXRF
bmdpbmUoKSk7CisgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9jZXNzLm9u
QXBwbHlPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICAgICAg
ZWZmZWN0LnNldEZsb2F0Migic2NyZWVuU2l6ZSIsIGJsdXJUZXh0dXJlV2lkdGgsIGJsdXJUZXh0
dXJlSGVpZ2h0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5fdmVydGljYWxC
bHVyUG9zdHByb2Nlc3MgPSBuZXcgR2xvd0JsdXJQb3N0UHJvY2VzcygiSGlnaGxpZ2h0TGF5ZXJW
QlAiLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjIiXSgwLCAxLjApLCB0aGlzLl9vcHRpb25zLmJsdXJWZXJ0aWNhbFNpemUsIDEsIG51
bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0aGlzLl9zY2VuZS5nZXRFbmdp
bmUoKSk7CisgICAgICAgICAgICB0aGlzLl92ZXJ0aWNhbEJsdXJQb3N0cHJvY2Vzcy5vbkFwcGx5
T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAgICAgIGVmZmVj
dC5zZXRGbG9hdDIoInNjcmVlblNpemUiLCBibHVyVGV4dHVyZVdpZHRoLCBibHVyVGV4dHVyZUhl
aWdodCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzZXMg
PSBbdGhpcy5fZG93blNhbXBsZVBvc3Rwcm9jZXNzLCB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rw
cm9jZXNzLCB0aGlzLl92ZXJ0aWNhbEJsdXJQb3N0cHJvY2Vzc107CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rwcm9jZXNzID0g
bmV3IF9Qb3N0UHJvY2Vzc2VzX2JsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfX1siQmx1clBvc3RQcm9jZXNzIl0oIkhpZ2hsaWdodExheWVySEJQIiwgbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IyIl0oMS4w
LCAwKSwgdGhpcy5fb3B0aW9ucy5ibHVySG9yaXpvbnRhbFNpemUgLyAyLCB7CisgICAgICAgICAg
ICAgICAgd2lkdGg6IGJsdXJUZXh0dXJlV2lkdGgsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiBi
bHVyVGV4dHVyZUhlaWdodAorICAgICAgICAgICAgfSwgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJl
c190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlRleHR1cmUiXS5CSUxJTkVB
Ul9TQU1QTElOR01PREUsIHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgdGV4dHVyZVR5
cGUpOworICAgICAgICAgICAgdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJvY2Vzcy53aWR0aCA9
IGJsdXJUZXh0dXJlV2lkdGg7CisgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsQmx1clBvc3Rw
cm9jZXNzLmhlaWdodCA9IGJsdXJUZXh0dXJlSGVpZ2h0OworICAgICAgICAgICAgdGhpcy5faG9y
aXpvbnRhbEJsdXJQb3N0cHJvY2Vzcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVm
ZmVjdCkgeworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJ0ZXh0dXJlU2FtcGxl
ciIsIF90aGlzLl9tYWluVGV4dHVyZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRo
aXMuX3ZlcnRpY2FsQmx1clBvc3Rwcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX2JsdXJQb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQmx1clBvc3RQcm9jZXNzIl0o
IkhpZ2hsaWdodExheWVyVkJQIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZWN0b3IyIl0oMCwgMS4wKSwgdGhpcy5fb3B0aW9ucy5ibHVyVmVy
dGljYWxTaXplIC8gMiwgeworICAgICAgICAgICAgICAgIHdpZHRoOiBibHVyVGV4dHVyZVdpZHRo
LAorICAgICAgICAgICAgICAgIGhlaWdodDogYmx1clRleHR1cmVIZWlnaHQKKyAgICAgICAgICAg
IH0sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0aGlzLl9zY2VuZS5n
ZXRFbmdpbmUoKSwgZmFsc2UsIHRleHR1cmVUeXBlKTsKKyAgICAgICAgICAgIHRoaXMuX3Bvc3RQ
cm9jZXNzZXMgPSBbdGhpcy5faG9yaXpvbnRhbEJsdXJQb3N0cHJvY2VzcywgdGhpcy5fdmVydGlj
YWxCbHVyUG9zdHByb2Nlc3NdOworICAgICAgICB9CisgICAgICAgIHRoaXMuX21haW5UZXh0dXJl
Lm9uQWZ0ZXJVbmJpbmRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBf
dGhpcy5vbkJlZm9yZUJsdXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhfdGhpcyk7CisgICAg
ICAgICAgICB2YXIgaW50ZXJuYWxUZXh0dXJlID0gX3RoaXMuX2JsdXJUZXh0dXJlLmdldEludGVy
bmFsVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKGludGVybmFsVGV4dHVyZSkgeworICAgICAg
ICAgICAgICAgIF90aGlzLl9zY2VuZS5wb3N0UHJvY2Vzc01hbmFnZXIuZGlyZWN0UmVuZGVyKF90
aGlzLl9wb3N0UHJvY2Vzc2VzLCBpbnRlcm5hbFRleHR1cmUsIHRydWUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgX3RoaXMub25BZnRlckJsdXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyhfdGhpcyk7CisgICAgICAgIH0pOworICAgICAgICAvLyBQcmV2ZW50IGF1dG9DbGVhci4KKyAg
ICAgICAgdGhpcy5fcG9zdFByb2Nlc3Nlcy5tYXAoZnVuY3Rpb24gKHBwKSB7IHBwLmF1dG9DbGVh
ciA9IGZhbHNlOyB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgd2V0aGVyIG9y
IG5vb2QgdGhlIGxheWVyIG5lZWRzIHN0ZW5jaWwgZW5hYmxlZCBkdXJpbmcgdGhlIG1lc2ggcmVu
ZGVyaW5nLgorICAgICAqLworICAgIEhpZ2hsaWdodExheWVyLnByb3RvdHlwZS5uZWVkU3RlbmNp
bCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBDaGVja3MgZm9yIHRoZSByZWFkaW5lc3Mgb2YgdGhlIGVsZW1lbnQgY29tcG9zaW5n
IHRoZSBsYXllci4KKyAgICAgKiBAcGFyYW0gc3ViTWVzaCB0aGUgbWVzaCB0byBjaGVjayBmb3IK
KyAgICAgKiBAcGFyYW0gdXNlSW5zdGFuY2VzIHNwZWNpZnkgd2V0aGVyIG9yIG5vdCB0byB1c2Ug
aW5zdGFuY2VzIHRvIHJlbmRlciB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBlbWlzc2l2ZVRleHR1
cmUgdGhlIGFzc29jaWF0ZWQgZW1pc3NpdmUgdGV4dHVyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBn
bG93CisgICAgICogQHJldHVybiB0cnVlIGlmIHJlYWR5IG90aGVyd2lzZSwgZmFsc2UKKyAgICAg
Ki8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uIChzdWJN
ZXNoLCB1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgdmFyIG1hdGVyaWFsID0gc3ViTWVzaC5nZXRN
YXRlcmlhbCgpOworICAgICAgICB2YXIgbWVzaCA9IHN1Yk1lc2guZ2V0UmVuZGVyaW5nTWVzaCgp
OworICAgICAgICBpZiAoIW1hdGVyaWFsIHx8ICFtZXNoIHx8ICF0aGlzLl9tZXNoZXMpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZW1pc3NpdmVU
ZXh0dXJlID0gbnVsbDsKKyAgICAgICAgdmFyIGhpZ2hsaWdodExheWVyTWVzaCA9IHRoaXMuX21l
c2hlc1ttZXNoLnVuaXF1ZUlkXTsKKyAgICAgICAgaWYgKGhpZ2hsaWdodExheWVyTWVzaCAmJiBo
aWdobGlnaHRMYXllck1lc2guZ2xvd0VtaXNzaXZlT25seSAmJiBtYXRlcmlhbCkgeworICAgICAg
ICAgICAgZW1pc3NpdmVUZXh0dXJlID0gbWF0ZXJpYWwuZW1pc3NpdmVUZXh0dXJlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl9pc1JlYWR5LmNhbGwodGhpcywg
c3ViTWVzaCwgdXNlSW5zdGFuY2VzLCBlbWlzc2l2ZVRleHR1cmUpOworICAgIH07CisgICAgLyoq
CisgICAgICogSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgb2YgcmVuZGVyaW5nIHRoZSBnZW5lcmF0
aW5nIGVmZmVjdCBvbiB0aGUgbWFpbiBjYW52YXMuCisgICAgICogQHBhcmFtIGVmZmVjdCBUaGUg
ZWZmZWN0IHVzZWQgdG8gcmVuZGVyIHRocm91Z2gKKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXll
ci5wcm90b3R5cGUuX2ludGVybmFsUmVuZGVyID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAg
ICAvLyBUZXh0dXJlCisgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJ0ZXh0dXJlU2FtcGxlciIs
IHRoaXMuX2JsdXJUZXh0dXJlKTsKKyAgICAgICAgLy8gQ2FjaGUKKyAgICAgICAgdmFyIGVuZ2lu
ZSA9IHRoaXMuX2VuZ2luZTsKKyAgICAgICAgZW5naW5lLmNhY2hlU3RlbmNpbFN0YXRlKCk7Cisg
ICAgICAgIC8vIFN0ZW5jaWwgb3BlcmF0aW9ucworICAgICAgICBlbmdpbmUuc2V0U3RlbmNpbE9w
ZXJhdGlvblBhc3MoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
NF9fWyJDb25zdGFudHMiXS5SRVBMQUNFKTsKKyAgICAgICAgZW5naW5lLnNldFN0ZW5jaWxPcGVy
YXRpb25GYWlsKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRf
X1siQ29uc3RhbnRzIl0uS0VFUCk7CisgICAgICAgIGVuZ2luZS5zZXRTdGVuY2lsT3BlcmF0aW9u
RGVwdGhGYWlsKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRf
X1siQ29uc3RhbnRzIl0uS0VFUCk7CisgICAgICAgIC8vIERyYXcgb3JkZXIKKyAgICAgICAgZW5n
aW5lLnNldFN0ZW5jaWxNYXNrKDB4MDApOworICAgICAgICBlbmdpbmUuc2V0U3RlbmNpbEJ1ZmZl
cih0cnVlKTsKKyAgICAgICAgZW5naW5lLnNldFN0ZW5jaWxGdW5jdGlvblJlZmVyZW5jZSh0aGlz
Ll9pbnN0YW5jZUdsb3dpbmdNZXNoU3RlbmNpbFJlZmVyZW5jZSk7CisgICAgICAgIC8vIDIgcGFz
c2VzIGlubmVyIG91dGVyCisgICAgICAgIGlmICh0aGlzLm91dGVyR2xvdykgeworICAgICAgICAg
ICAgZWZmZWN0LnNldEZsb2F0KCJvZmZzZXQiLCAwKTsKKyAgICAgICAgICAgIGVuZ2luZS5zZXRT
dGVuY2lsRnVuY3Rpb24oX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xNF9fWyJDb25zdGFudHMiXS5OT1RFUVVBTCk7CisgICAgICAgICAgICBlbmdpbmUuZHJhd0Vs
ZW1lbnRzVHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82
X19bIk1hdGVyaWFsIl0uVHJpYW5nbGVGaWxsTW9kZSwgMCwgNik7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuaW5uZXJHbG93KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoIm9m
ZnNldCIsIDEpOworICAgICAgICAgICAgZW5naW5lLnNldFN0ZW5jaWxGdW5jdGlvbihfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkNvbnN0YW50cyJdLkVR
VUFMKTsKKyAgICAgICAgICAgIGVuZ2luZS5kcmF3RWxlbWVudHNUeXBlKF9NYXRlcmlhbHNfbWF0
ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siTWF0ZXJpYWwiXS5UcmlhbmdsZUZp
bGxNb2RlLCAwLCA2KTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXN0b3JlIENhY2hlCisgICAg
ICAgIGVuZ2luZS5yZXN0b3JlU3RlbmNpbFN0YXRlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIHRydWUgaWYgdGhlIGxheWVyIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRvIGRpc3Bs
YXksIG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5
cGUuc2hvdWxkUmVuZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoX3N1cGVyLnByb3Rv
dHlwZS5zaG91bGRSZW5kZXIuY2FsbCh0aGlzKSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X21lc2hlcyA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggc2hvdWxk
IHJlbmRlciwgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRv
IHJlbmRlcgorICAgICAqIEByZXR1cm5zIHRydWUgaWYgaXQgc2hvdWxkIHJlbmRlciBvdGhlcndp
c2UgZmFsc2UKKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5cGUuX3Nob3VsZFJl
bmRlck1lc2ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICAvLyBFeGNsdWRlZCBNZXNoCisg
ICAgICAgIGlmICh0aGlzLl9leGNsdWRlZE1lc2hlcyAmJiB0aGlzLl9leGNsdWRlZE1lc2hlc1tt
ZXNoLnVuaXF1ZUlkXSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGlmICghX3N1cGVyLnByb3RvdHlwZS5oYXNNZXNoLmNhbGwodGhpcywgbWVzaCkpIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHJlcXVpcmVkIHZhbHVlcyBmb3Ig
Ym90aCB0aGUgZW1pc3NpdmUgdGV4dHVyZSBhbmQgYW5kIHRoZSBtYWluIGNvbG9yLgorICAgICAq
LworICAgIEhpZ2hsaWdodExheWVyLnByb3RvdHlwZS5fc2V0RW1pc3NpdmVUZXh0dXJlQW5kQ29s
b3IgPSBmdW5jdGlvbiAobWVzaCwgc3ViTWVzaCwgbWF0ZXJpYWwpIHsKKyAgICAgICAgdmFyIGhp
Z2hsaWdodExheWVyTWVzaCA9IHRoaXMuX21lc2hlc1ttZXNoLnVuaXF1ZUlkXTsKKyAgICAgICAg
aWYgKGhpZ2hsaWdodExheWVyTWVzaCkgeworICAgICAgICAgICAgdGhpcy5fZW1pc3NpdmVUZXh0
dXJlQW5kQ29sb3IuY29sb3Iuc2V0KGhpZ2hsaWdodExheWVyTWVzaC5jb2xvci5yLCBoaWdobGln
aHRMYXllck1lc2guY29sb3IuZywgaGlnaGxpZ2h0TGF5ZXJNZXNoLmNvbG9yLmIsIDEuMCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9lbWlzc2l2ZVRleHR1
cmVBbmRDb2xvci5jb2xvci5zZXQodGhpcy5uZXV0cmFsQ29sb3IuciwgdGhpcy5uZXV0cmFsQ29s
b3IuZywgdGhpcy5uZXV0cmFsQ29sb3IuYiwgdGhpcy5uZXV0cmFsQ29sb3IuYSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGhpZ2hsaWdodExheWVyTWVzaCAmJiBoaWdobGlnaHRMYXllck1lc2gu
Z2xvd0VtaXNzaXZlT25seSAmJiBtYXRlcmlhbCkgeworICAgICAgICAgICAgdGhpcy5fZW1pc3Np
dmVUZXh0dXJlQW5kQ29sb3IudGV4dHVyZSA9IG1hdGVyaWFsLmVtaXNzaXZlVGV4dHVyZTsKKyAg
ICAgICAgICAgIHRoaXMuX2VtaXNzaXZlVGV4dHVyZUFuZENvbG9yLmNvbG9yLnNldCgxLjAsIDEu
MCwgMS4wLCAxLjApOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhp
cy5fZW1pc3NpdmVUZXh0dXJlQW5kQ29sb3IudGV4dHVyZSA9IG51bGw7CisgICAgICAgIH0KKyAg
ICB9OworICAgIC8qKgorICAgICAqIEFkZCBhIG1lc2ggaW4gdGhlIGV4Y2x1c2lvbiBsaXN0IHRv
IHByZXZlbnQgaXQgdG8gaW1wYWN0IG9yIGJlaW5nIGltcGFjdGVkIGJ5IHRoZSBoaWdobGlnaHQg
bGF5ZXIuCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gZXhjbHVkZSBmcm9tIHRoZSBo
aWdobGlnaHQgbGF5ZXIKKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5cGUuYWRk
RXhjbHVkZWRNZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leGNs
dWRlZE1lc2hlcykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZh
ciBtZXNoRXhjbHVkZWQgPSB0aGlzLl9leGNsdWRlZE1lc2hlc1ttZXNoLnVuaXF1ZUlkXTsKKyAg
ICAgICAgaWYgKCFtZXNoRXhjbHVkZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4Y2x1ZGVkTWVz
aGVzW21lc2gudW5pcXVlSWRdID0geworICAgICAgICAgICAgICAgIG1lc2g6IG1lc2gsCisgICAg
ICAgICAgICAgICAgYmVmb3JlQmluZDogbWVzaC5vbkJlZm9yZUJpbmRPYnNlcnZhYmxlLmFkZChm
dW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgICAgICAgICBtZXNoLmdldEVuZ2luZSgpLnNl
dFN0ZW5jaWxCdWZmZXIoZmFsc2UpOworICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAg
ICAgIGFmdGVyUmVuZGVyOiBtZXNoLm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAobWVzaCkgeworICAgICAgICAgICAgICAgICAgICBtZXNoLmdldEVuZ2luZSgpLnNldFN0ZW5j
aWxCdWZmZXIodHJ1ZSk7CisgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICB9OworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgICogUmVtb3ZlIGEgbWVzaCBmcm9tIHRoZSBl
eGNsdXNpb24gbGlzdCB0byBsZXQgaXQgaW1wYWN0IG9yIGJlaW5nIGltcGFjdGVkIGJ5IHRoZSBo
aWdobGlnaHQgbGF5ZXIuCisgICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRvIGhpZ2hsaWdo
dAorICAgICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5cGUucmVtb3ZlRXhjbHVkZWRN
ZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leGNsdWRlZE1lc2hl
cykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBtZXNoRXhj
bHVkZWQgPSB0aGlzLl9leGNsdWRlZE1lc2hlc1ttZXNoLnVuaXF1ZUlkXTsKKyAgICAgICAgaWYg
KG1lc2hFeGNsdWRlZCkgeworICAgICAgICAgICAgaWYgKG1lc2hFeGNsdWRlZC5iZWZvcmVCaW5k
KSB7CisgICAgICAgICAgICAgICAgbWVzaC5vbkJlZm9yZUJpbmRPYnNlcnZhYmxlLnJlbW92ZSht
ZXNoRXhjbHVkZWQuYmVmb3JlQmluZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bWVzaEV4Y2x1ZGVkLmFmdGVyUmVuZGVyKSB7CisgICAgICAgICAgICAgICAgbWVzaC5vbkFmdGVy
UmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUobWVzaEV4Y2x1ZGVkLmFmdGVyUmVuZGVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9leGNsdWRlZE1lc2hlc1ttZXNoLnVu
aXF1ZUlkXSA9IG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmUgaWYgYSBn
aXZlbiBtZXNoIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgYnkgdGhlIGN1cnJlbnQgSGlnaGxpZ2h0TGF5
ZXIKKyAgICAgKiBAcGFyYW0gbWVzaCBtZXNoIHRvIHRlc3QKKyAgICAgKiBAcmV0dXJucyB0cnVl
IGlmIHRoZSBtZXNoIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgYnkgdGhlIGN1cnJlbnQgSGlnaGxpZ2h0
TGF5ZXIKKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5cGUuaGFzTWVzaCA9IGZ1
bmN0aW9uIChtZXNoKSB7CisgICAgICAgIGlmICghdGhpcy5fbWVzaGVzKSB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFfc3VwZXIucHJvdG90eXBl
Lmhhc01lc2guY2FsbCh0aGlzLCBtZXNoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9tZXNoZXNbbWVzaC51bmlxdWVJZF0gIT09
IHVuZGVmaW5lZCAmJiB0aGlzLl9tZXNoZXNbbWVzaC51bmlxdWVJZF0gIT09IG51bGw7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBZGQgYSBtZXNoIGluIHRoZSBoaWdobGlnaHQgbGF5ZXIgaW4g
b3JkZXIgdG8gbWFrZSBpdCBnbG93IHdpdGggdGhlIGNob3NlbiBjb2xvci4KKyAgICAgKiBAcGFy
YW0gbWVzaCBUaGUgbWVzaCB0byBoaWdobGlnaHQKKyAgICAgKiBAcGFyYW0gY29sb3IgVGhlIGNv
bG9yIG9mIHRoZSBoaWdobGlnaHQKKyAgICAgKiBAcGFyYW0gZ2xvd0VtaXNzaXZlT25seSBFeHRy
YWN0IHRoZSBnbG93IGZyb20gdGhlIGVtaXNzaXZlIHRleHR1cmUKKyAgICAgKi8KKyAgICBIaWdo
bGlnaHRMYXllci5wcm90b3R5cGUuYWRkTWVzaCA9IGZ1bmN0aW9uIChtZXNoLCBjb2xvciwgZ2xv
d0VtaXNzaXZlT25seSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAo
Z2xvd0VtaXNzaXZlT25seSA9PT0gdm9pZCAwKSB7IGdsb3dFbWlzc2l2ZU9ubHkgPSBmYWxzZTsg
fQorICAgICAgICBpZiAoIXRoaXMuX21lc2hlcykgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHZhciBtZXNoSGlnaGxpZ2h0ID0gdGhpcy5fbWVzaGVzW21lc2gudW5p
cXVlSWRdOworICAgICAgICBpZiAobWVzaEhpZ2hsaWdodCkgeworICAgICAgICAgICAgbWVzaEhp
Z2hsaWdodC5jb2xvciA9IGNvbG9yOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdGhpcy5fbWVzaGVzW21lc2gudW5pcXVlSWRdID0geworICAgICAgICAgICAgICAgIG1l
c2g6IG1lc2gsCisgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9yLAorICAgICAgICAgICAgICAg
IC8vIExhbWJkYSByZXF1aXJlZCBmb3IgY2FwdHVyZSBkdWUgdG8gT2JzZXJ2YWJsZSB0aGlzIGNv
bnRleHQKKyAgICAgICAgICAgICAgICBvYnNlcnZlckhpZ2hsaWdodDogbWVzaC5vbkJlZm9yZUJp
bmRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoX3RoaXMuaXNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMu
X2V4Y2x1ZGVkTWVzaGVzICYmIF90aGlzLl9leGNsdWRlZE1lc2hlc1ttZXNoLnVuaXF1ZUlkXSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9kZWZhdWx0U3RlbmNpbFJlZmVy
ZW5jZShtZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2guZ2V0U2NlbmUo
KS5nZXRFbmdpbmUoKS5zZXRTdGVuY2lsRnVuY3Rpb25SZWZlcmVuY2UoX3RoaXMuX2luc3RhbmNl
R2xvd2luZ01lc2hTdGVuY2lsUmVmZXJlbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAg
ICAgIG9ic2VydmVyRGVmYXVsdDogbWVzaC5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVu
Y3Rpb24gKG1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmlzRW5hYmxlZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2RlZmF1bHRTdGVuY2lsUmVmZXJlbmNl
KG1lc2gpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSksCisgICAg
ICAgICAgICAgICAgZ2xvd0VtaXNzaXZlT25seTogZ2xvd0VtaXNzaXZlT25seQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIG1lc2gub25EaXNwb3NlT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9kaXNwb3NlTWVzaChtZXNoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Nob3VsZFJlbmRlciA9IHRydWU7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBtZXNoIGZyb20gdGhlIGhpZ2hsaWdodCBs
YXllciBpbiBvcmRlciB0byBtYWtlIGl0IHN0b3AgZ2xvd2luZy4KKyAgICAgKiBAcGFyYW0gbWVz
aCBUaGUgbWVzaCB0byBoaWdobGlnaHQKKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90
b3R5cGUucmVtb3ZlTWVzaCA9IGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgIGlmICghdGhpcy5f
bWVzaGVzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIG1l
c2hIaWdobGlnaHQgPSB0aGlzLl9tZXNoZXNbbWVzaC51bmlxdWVJZF07CisgICAgICAgIGlmICht
ZXNoSGlnaGxpZ2h0KSB7CisgICAgICAgICAgICBpZiAobWVzaEhpZ2hsaWdodC5vYnNlcnZlckhp
Z2hsaWdodCkgeworICAgICAgICAgICAgICAgIG1lc2gub25CZWZvcmVCaW5kT2JzZXJ2YWJsZS5y
ZW1vdmUobWVzaEhpZ2hsaWdodC5vYnNlcnZlckhpZ2hsaWdodCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobWVzaEhpZ2hsaWdodC5vYnNlcnZlckRlZmF1bHQpIHsKKyAgICAgICAg
ICAgICAgICBtZXNoLm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZShtZXNoSGlnaGxpZ2h0
Lm9ic2VydmVyRGVmYXVsdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxldGUgdGhp
cy5fbWVzaGVzW21lc2gudW5pcXVlSWRdOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Nob3Vs
ZFJlbmRlciA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBtZXNoSGlnaGxpZ2h0VG9DaGVjayBp
biB0aGlzLl9tZXNoZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9tZXNoZXNbbWVzaEhpZ2hs
aWdodFRvQ2hlY2tdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2hvdWxkUmVuZGVyID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogRm9yY2UgdGhlIHN0ZW5jaWwgdG8gdGhlIG5vcm1hbCBleHBl
Y3RlZCB2YWx1ZSBmb3Igbm9uZSBnbG93aW5nIHBhcnRzCisgICAgICovCisgICAgSGlnaGxpZ2h0
TGF5ZXIucHJvdG90eXBlLl9kZWZhdWx0U3RlbmNpbFJlZmVyZW5jZSA9IGZ1bmN0aW9uIChtZXNo
KSB7CisgICAgICAgIG1lc2guZ2V0U2NlbmUoKS5nZXRFbmdpbmUoKS5zZXRTdGVuY2lsRnVuY3Rp
b25SZWZlcmVuY2UoSGlnaGxpZ2h0TGF5ZXIuTm9ybWFsTWVzaFN0ZW5jaWxSZWZlcmVuY2UpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogRnJlZSBhbnkgcmVzb3VyY2VzIGFuZCByZWZlcmVuY2Vz
IGFzc29jaWF0ZWQgdG8gYSBtZXNoLgorICAgICAqIEludGVybmFsIHVzZQorICAgICAqIEBwYXJh
bSBtZXNoIFRoZSBtZXNoIHRvIGZyZWUuCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIEhp
Z2hsaWdodExheWVyLnByb3RvdHlwZS5fZGlzcG9zZU1lc2ggPSBmdW5jdGlvbiAobWVzaCkgewor
ICAgICAgICB0aGlzLnJlbW92ZU1lc2gobWVzaCk7CisgICAgICAgIHRoaXMucmVtb3ZlRXhjbHVk
ZWRNZXNoKG1lc2gpOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZSB0aGUgaGlnaGxp
Z2h0IGxheWVyIGFuZCBmcmVlIHJlc291cmNlcy4KKyAgICAgKi8KKyAgICBIaWdobGlnaHRMYXll
ci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX21l
c2hlcykgeworICAgICAgICAgICAgLy8gQ2xlYW4gbWVzaCByZWZlcmVuY2VzCisgICAgICAgICAg
ICBmb3IgKHZhciBpZCBpbiB0aGlzLl9tZXNoZXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWVz
aEhpZ2hsaWdodCA9IHRoaXMuX21lc2hlc1tpZF07CisgICAgICAgICAgICAgICAgaWYgKG1lc2hI
aWdobGlnaHQgJiYgbWVzaEhpZ2hsaWdodC5tZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChtZXNoSGlnaGxpZ2h0Lm9ic2VydmVySGlnaGxpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtZXNoSGlnaGxpZ2h0Lm1lc2gub25CZWZvcmVCaW5kT2JzZXJ2YWJsZS5yZW1vdmUobWVz
aEhpZ2hsaWdodC5vYnNlcnZlckhpZ2hsaWdodCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1lc2hIaWdobGlnaHQub2JzZXJ2ZXJEZWZhdWx0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtZXNoSGlnaGxpZ2h0Lm1lc2gub25BZnRlclJlbmRlck9i
c2VydmFibGUucmVtb3ZlKG1lc2hIaWdobGlnaHQub2JzZXJ2ZXJEZWZhdWx0KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX21lc2hlcyA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2V4
Y2x1ZGVkTWVzaGVzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9leGNsdWRl
ZE1lc2hlcykgeworICAgICAgICAgICAgICAgIHZhciBtZXNoSGlnaGxpZ2h0ID0gdGhpcy5fZXhj
bHVkZWRNZXNoZXNbaWRdOworICAgICAgICAgICAgICAgIGlmIChtZXNoSGlnaGxpZ2h0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtZXNoSGlnaGxpZ2h0LmJlZm9yZUJpbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1lc2hIaWdobGlnaHQubWVzaC5vbkJlZm9yZUJpbmRPYnNlcnZh
YmxlLnJlbW92ZShtZXNoSGlnaGxpZ2h0LmJlZm9yZUJpbmQpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNoSGlnaGxpZ2h0LmFmdGVyUmVuZGVyKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNoSGlnaGxpZ2h0Lm1lc2gub25BZnRlclJlbmRl
ck9ic2VydmFibGUucmVtb3ZlKG1lc2hIaWdobGlnaHQuYWZ0ZXJSZW5kZXIpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fZXhjbHVkZWRNZXNoZXMgPSBudWxsOworICAgICAgICB9CisgICAgICAgIF9zdXBl
ci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICAq
IEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVmZmVjdCBsYXllcgorICAgICAgKiBAcmV0dXJu
cyB0aGUgc3RyaW5nIHdpdGggdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVmZmVjdCBsYXllcgorICAg
ICAgKi8KKyAgICBIaWdobGlnaHRMYXllci5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gIkhpZ2hsaWdodExheWVyIjsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFNlcmlhbGl6ZXMgdGhpcyBIaWdobGlnaHQgbGF5ZXIKKyAgICAgKiBAcmV0dXJu
cyBhIHNlcmlhbGl6ZWQgSGlnaGxpZ2h0IGxheWVyIG9iamVjdAorICAgICAqLworICAgIEhpZ2hs
aWdodExheWVyLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh
ciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXplKHRoaXMpOworICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmN1c3RvbVR5cGUgPSAiQkFCWUxPTi5IaWdobGlnaHRM
YXllciI7CisgICAgICAgIC8vIEhpZ2hsaWdodGVkIG1lc2hlcworICAgICAgICBzZXJpYWxpemF0
aW9uT2JqZWN0Lm1lc2hlcyA9IFtdOworICAgICAgICBpZiAodGhpcy5fbWVzaGVzKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBtIGluIHRoaXMuX21lc2hlcykgeworICAgICAgICAgICAgICAgIHZh
ciBtZXNoID0gdGhpcy5fbWVzaGVzW21dOworICAgICAgICAgICAgICAgIGlmIChtZXNoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWVzaGVzLnB1c2goeworICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xvd0VtaXNzaXZlT25seTogbWVzaC5nbG93RW1pc3NpdmVP
bmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IG1lc2guY29sb3IuYXNBcnJheSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgbWVzaElkOiBtZXNoLm1lc2guaWQKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIC8vIEV4Y2x1ZGVkIG1lc2hlcworICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LmV4Y2x1ZGVkTWVzaGVzID0gW107CisgICAgICAgIGlmICh0aGlzLl9leGNsdWRlZE1lc2hl
cykgeworICAgICAgICAgICAgZm9yICh2YXIgZSBpbiB0aGlzLl9leGNsdWRlZE1lc2hlcykgewor
ICAgICAgICAgICAgICAgIHZhciBleGNsdWRlZE1lc2ggPSB0aGlzLl9leGNsdWRlZE1lc2hlc1tl
XTsKKyAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZWRNZXNoKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZXhjbHVkZWRNZXNoZXMucHVzaChleGNsdWRlZE1lc2gu
bWVzaC5pZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIEhpZ2hsaWdodCBsYXllciBmcm9tIHBhcnNlZCBIaWdobGlnaHQgbGF5ZXIg
ZGF0YQorICAgICAqIEBwYXJhbSBwYXJzZWRIaWdodGxpZ2h0TGF5ZXIgZGVmaW5lcyB0aGUgSGln
aGxpZ2h0IGxheWVyIGRhdGEKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgY3VycmVu
dCBzY2VuZQorICAgICAqIEBwYXJhbSByb290VXJsIGRlZmluZXMgdGhlIHJvb3QgVVJMIGNvbnRh
aW5pbmcgdGhlIEhpZ2hsaWdodCBsYXllciBpbmZvcm1hdGlvbgorICAgICAqIEByZXR1cm5zIGEg
cGFyc2VkIEhpZ2hsaWdodCBsYXllcgorICAgICAqLworICAgIEhpZ2hsaWdodExheWVyLlBhcnNl
ID0gZnVuY3Rpb24gKHBhcnNlZEhpZ2h0bGlnaHRMYXllciwgc2NlbmUsIHJvb3RVcmwpIHsKKyAg
ICAgICAgdmFyIGhsID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3
IEhpZ2hsaWdodExheWVyKHBhcnNlZEhpZ2h0bGlnaHRMYXllci5uYW1lLCBzY2VuZSwgcGFyc2Vk
SGlnaHRsaWdodExheWVyLm9wdGlvbnMpOyB9LCBwYXJzZWRIaWdodGxpZ2h0TGF5ZXIsIHNjZW5l
LCByb290VXJsKTsKKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICAvLyBFeGNsdWRlZCBtZXNo
ZXMKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGFyc2VkSGlnaHRsaWdodExheWVy
LmV4Y2x1ZGVkTWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIG1lc2gg
PSBzY2VuZS5nZXRNZXNoQnlJRChwYXJzZWRIaWdodGxpZ2h0TGF5ZXIuZXhjbHVkZWRNZXNoZXNb
aW5kZXhdKTsKKyAgICAgICAgICAgIGlmIChtZXNoKSB7CisgICAgICAgICAgICAgICAgaGwuYWRk
RXhjbHVkZWRNZXNoKG1lc2gpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IEluY2x1ZGVkIG1lc2hlcworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJzZWRI
aWdodGxpZ2h0TGF5ZXIubWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFy
IGhpZ2hsaWdodGVkTWVzaCA9IHBhcnNlZEhpZ2h0bGlnaHRMYXllci5tZXNoZXNbaW5kZXhdOwor
ICAgICAgICAgICAgdmFyIG1lc2ggPSBzY2VuZS5nZXRNZXNoQnlJRChoaWdobGlnaHRlZE1lc2gu
bWVzaElkKTsKKyAgICAgICAgICAgIGlmIChtZXNoKSB7CisgICAgICAgICAgICAgICAgaGwuYWRk
TWVzaChtZXNoLCBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdf
X1siQ29sb3IzIl0uRnJvbUFycmF5KGhpZ2hsaWdodGVkTWVzaC5jb2xvciksIGhpZ2hsaWdodGVk
TWVzaC5nbG93RW1pc3NpdmVPbmx5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gaGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFZmZlY3QgTmFtZSBvZiB0aGUg
aGlnaGxpZ2h0IGxheWVyLgorICAgICAqLworICAgIEhpZ2hsaWdodExheWVyLkVmZmVjdE5hbWUg
PSAiSGlnaGxpZ2h0TGF5ZXIiOworICAgIC8qKgorICAgICAqIFRoZSBuZXV0cmFsIGNvbG9yIHVz
ZWQgZHVyaW5nIHRoZSBwcmVwYXJhdGlvbiBvZiB0aGUgZ2xvdyBlZmZlY3QuCisgICAgICogVGhp
cyBpcyBibGFjayBieSBkZWZhdWx0IGFzIHRoZSBibGVuZCBvcGVyYXRpb24gaXMgYSBibGVuZCBv
cGVyYXRpb24uCisgICAgICovCisgICAgSGlnaGxpZ2h0TGF5ZXIuTmV1dHJhbENvbG9yID0gbmV3
IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJDb2xvcjQi
XSgwLCAwLCAwLCAwKTsKKyAgICAvKioKKyAgICAgKiBTdGVuY2lsIHZhbHVlIHVzZWQgZm9yIGds
b3dpbmcgbWVzaGVzLgorICAgICAqLworICAgIEhpZ2hsaWdodExheWVyLkdsb3dpbmdNZXNoU3Rl
bmNpbFJlZmVyZW5jZSA9IDB4MDI7CisgICAgLyoqCisgICAgICogU3RlbmNpbCB2YWx1ZSB1c2Vk
IGZvciB0aGUgb3RoZXIgbWVzaGVzIGluIHRoZSBzY2VuZS4KKyAgICAgKi8KKyAgICBIaWdobGln
aHRMYXllci5Ob3JtYWxNZXNoU3RlbmNpbFJlZmVyZW5jZSA9IDB4MDE7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBIaWdobGlnaHRMYXllci5wcm90b3R5cGUsICJpbm5lckdsb3ciLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgSGlnaGxpZ2h0TGF5ZXIucHJvdG90eXBl
LCAib3V0ZXJHbG93Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEhpZ2hs
aWdodExheWVyLnByb3RvdHlwZSwgImJsdXJIb3Jpem9udGFsU2l6ZSIsIG51bGwpOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgSGlnaGxpZ2h0TGF5ZXIucHJvdG90eXBlLCAiYmx1clZlcnRp
Y2FsU2l6ZSIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgib3B0aW9ucyIpCisgICAgXSwgSGln
aGxpZ2h0TGF5ZXIucHJvdG90eXBlLCAiX29wdGlvbnMiLCB2b2lkIDApOworICAgIHJldHVybiBI
aWdobGlnaHRMYXllcjsKK30oX2VmZmVjdExheWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
Ml9fWyJFZmZlY3RMYXllciJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTZfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5IaWdo
bGlnaHRMYXllciJdID0gSGlnaGxpZ2h0TGF5ZXI7CisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L0xheWVycy9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9MYXllcnMvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBFZmZlY3RMYXllciwgRWZmZWN0TGF5ZXJTY2VuZUNvbXBv
bmVudCwgR2xvd0xheWVyLCBIaWdobGlnaHRMYXllciwgTGF5ZXIsIExheWVyU2NlbmVDb21wb25l
bnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lZmZlY3RM
YXllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9lZmZlY3RMYXllciAqLyAiLi9MYXllcnMvZWZmZWN0TGF5ZXIudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiRWZmZWN0TGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lZmZlY3RMYXllcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3RMYXllciJdOyB9KTsKKworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9lZmZlY3RMYXllclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VmZmVjdExheWVy
U2NlbmVDb21wb25lbnQgKi8gIi4vTGF5ZXJzL2VmZmVjdExheWVyU2NlbmVDb21wb25lbnQudHMi
KTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2VmZmVjdExheWVyU2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siRWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9nbG93TGF5ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZ2xvd0xheWVyICovICIuL0xheWVycy9nbG93TGF5
ZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2xvd0xheWVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfZ2xvd0xheWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdsb3dMYXllciJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oaWdobGlnaHRMYXllcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oaWdobGlnaHRM
YXllciAqLyAiLi9MYXllcnMvaGlnaGxpZ2h0TGF5ZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
SGlnaGxpZ2h0TGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9oaWdobGlnaHRMYXllcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJIaWdobGlnaHRMYXllciJdOyB9KTsKKworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9sYXllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sYXllciAqLyAiLi9MYXllcnMvbGF5ZXIudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9sYXllcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJMYXllciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9sYXllclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xheWVyU2NlbmVDb21wb25lbnQgKi8gIi4v
TGF5ZXJzL2xheWVyU2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGF5ZXJT
Y2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xheWVyU2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTGF5ZXJTY2VuZUNvbXBvbmVudCJdOyB9KTsK
KworCisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9MYXllcnMvbGF5ZXIudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTGF5ZXJzL2xheWVy
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogTGF5ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGF5ZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIExheWVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRo
cy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01h
dGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19l
bmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3Jl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9i
dWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMv
bWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1
cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9U
ZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lQ29t
cG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9zY2VuZUNvbXBvbmVudCAqLyAiLi9zY2VuZUNvbXBvbmVudC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9sYXllclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xheWVyU2NlbmVDb21wb25l
bnQgKi8gIi4vTGF5ZXJzL2xheWVyU2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0Vu
Z2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNf
bGF5ZXJfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2xheWVyLmZyYWdtZW50ICovICIuL1NoYWRlcnMvbGF5
ZXIuZnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19sYXll
cl92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9TaGFkZXJzL2xheWVyLnZlcnRleCAqLyAiLi9TaGFkZXJzL2xheWVyLnZlcnRl
eC50cyIpOworCisKKworCisKKworCisKKworCisKKworLyoqCisgKiBUaGlzIHJlcHJlc2VudHMg
YSBmdWxsIHNjcmVlbiAyZCBsYXllci4KKyAqIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBkaXNwbGF5
IGEgcGljdHVyZSBpbiB0aGUgIGJhY2tncm91bmQgb2YgeW91ciBzY2VuZSBmb3IgaW5zdGFuY2Uu
CisgKiBAc2VlIGh0dHBzOi8vd3d3LmJhYnlsb25qcy1wbGF5Z3JvdW5kLmNvbS8jMDhBMkJTIzEK
KyAqLwordmFyIExheWVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgor
ICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBsYXllci4KKyAgICAgKiBUaGlzIHJlcHJlc2VudHMg
YSBmdWxsIHNjcmVlbiAyZCBsYXllci4KKyAgICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gZGlz
cGxheSBhIHBpY3R1cmUgaW4gdGhlICBiYWNrZ3JvdW5kIG9mIHlvdXIgc2NlbmUgZm9yIGluc3Rh
bmNlLgorICAgICAqIEBzZWUgaHR0cHM6Ly93d3cuYmFieWxvbmpzLXBsYXlncm91bmQuY29tLyMw
OEEyQlMjMQorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIg
aW4gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIGltZ1VybCBEZWZpbmUgdGhlIHVybCBvZiB0aGUg
dGV4dHVyZSB0byBkaXNwbGF5IGluIHRoZSBsYXllcgorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZp
bmUgdGhlIHNjZW5lIHRoZSBsYXllciBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGlzQmFja2dy
b3VuZCBEZWZpbmVzIHdoZXRoZXIgdGhlIGxheWVyIGlzIGRpc3BsYXllZCBpbiBmcm9udCBvciBi
ZWhpbmQgdGhlIHNjZW5lCisgICAgICogQHBhcmFtIGNvbG9yIERlZmluZXMgYSBjb2xvciBmb3Ig
dGhlIGxheWVyCisgICAgICovCisgICAgZnVuY3Rpb24gTGF5ZXIoCisgICAgLyoqCisgICAgICog
RGVmaW5lIHRoZSBuYW1lIG9mIHRoZSBsYXllci4KKyAgICAgKi8KKyAgICBuYW1lLCBpbWdVcmws
IHNjZW5lLCBpc0JhY2tncm91bmQsIGNvbG9yKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIHNjYWxlIG9mIHRoZSBsYXllciBp
biBvcmRlciB0byB6b29tIGluIG91dCBvZiB0aGUgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMuc2NhbGUgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlZlY3RvcjIiXSgxLCAxKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZSBhbiBvZmZzZXQgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBzaGlmdCB0aGUgdGV4dHVy
ZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0oMCwgMCk7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGFscGhhIGJsZW5kaW5nIG1vZGUgdXNlZCBp
biB0aGUgbGF5ZXIgaW4gY2FzZSB0aGUgdGV4dHVyZSBvciBjb2xvciBoYXMgYW4gYWxwaGEuCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmFscGhhQmxlbmRpbmdNb2RlID0gX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNvbnN0YW50cyJdLkFMUEhBX0NP
TUJJTkU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgYSBtYXNrIHRvIHJlc3RyaWN0
IHRoZSBsYXllciB0byBvbmx5IHNvbWUgb2YgdGhlIHNjZW5lIGNhbWVyYXMuCisgICAgICAgICAq
LworICAgICAgICB0aGlzLmxheWVyTWFzayA9IDB4MEZGRkZGRkY7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBEZWZpbmUgdGhlIGxpc3Qgb2YgcmVuZGVyIHRhcmdldCB0aGUgbGF5ZXIgaXMgdmlz
aWJsZSBpbnRvLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZW5kZXJUYXJnZXRUZXh0dXJl
cyA9IFtdOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGlmIHRoZSBsYXllciBpcyBv
bmx5IHVzZWQgaW4gcmVuZGVyVGFyZ2V0IG9yIGlmIGl0IGFsc28KKyAgICAgICAgICogcmVuZGVy
cyBpbiB0aGUgbWFpbiBmcmFtZSBidWZmZXIgb2YgdGhlIGNhbnZhcy4KKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMucmVuZGVyT25seUluUmVuZGVyVGFyZ2V0VGV4dHVyZXMgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5fdmVydGV4QnVmZmVycyA9IHt9OworICAgICAgICAvKioKKyAgICAgICAgICog
QW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIGxheWVyIGlzIGRpc3Bvc2VkLgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFi
bGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAg
IC8qKgorICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCBiZWZvcmUgcmVuZGVyaW5nIHRoZSBz
Y2VuZQorICAgICAgICAqLworICAgICAgICB0aGlzLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZSA9
IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk9ic2Vy
dmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgYWZ0
ZXIgcmVuZGVyaW5nIHRoZSBzY2VuZQorICAgICAgICAqLworICAgICAgICB0aGlzLm9uQWZ0ZXJS
ZW5kZXJPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIHRoaXMudGV4dHVyZSA9IGltZ1Vy
bCA/IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzZfX1siVGV4dHVyZSJdKGltZ1VybCwgc2NlbmUsIHRydWUpIDogbnVsbDsKKyAgICAgICAg
dGhpcy5pc0JhY2tncm91bmQgPSBpc0JhY2tncm91bmQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBp
c0JhY2tncm91bmQ7CisgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvciA9PT0gdW5kZWZpbmVkID8g
bmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9y
NCJdKDEsIDEsIDEsIDEpIDogY29sb3I7CisgICAgICAgIHRoaXMuX3NjZW5lID0gKHNjZW5lIHx8
IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2lu
ZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZSk7CisgICAgICAgIHZhciBsYXllckNvbXBvbmVudCA9
IHRoaXMuX3NjZW5lLl9nZXRDb21wb25lbnQoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uTkFNRV9MQVlFUik7Cisg
ICAgICAgIGlmICghbGF5ZXJDb21wb25lbnQpIHsKKyAgICAgICAgICAgIGxheWVyQ29tcG9uZW50
ID0gbmV3IF9sYXllclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IkxheWVyU2NlbmVDb21wb25lbnQiXSh0aGlzLl9zY2VuZSk7CisgICAgICAgICAgICB0aGlzLl9z
Y2VuZS5fYWRkQ29tcG9uZW50KGxheWVyQ29tcG9uZW50KTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9zY2VuZS5sYXllcnMucHVzaCh0aGlzKTsKKyAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMu
X3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICAvLyBWQk8KKyAgICAgICAgdmFyIHZlcnRpY2Vz
ID0gW107CisgICAgICAgIHZlcnRpY2VzLnB1c2goMSwgMSk7CisgICAgICAgIHZlcnRpY2VzLnB1
c2goLTEsIDEpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKC0xLCAtMSk7CisgICAgICAgIHZlcnRp
Y2VzLnB1c2goMSwgLTEpOworICAgICAgICB2YXIgdmVydGV4QnVmZmVyID0gbmV3IF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1ZmZlciJdKGVuZ2lu
ZSwgdmVydGljZXMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgZmFsc2UsIGZhbHNlLCAyKTsKKyAgICAgICAg
dGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdID0gdmVydGV4QnVmZmVyOworICAg
ICAgICB0aGlzLl9jcmVhdGVJbmRleEJ1ZmZlcigpOworICAgICAgICAvLyBFZmZlY3RzCisgICAg
ICAgIHRoaXMuX2VmZmVjdCA9IGVuZ2luZS5jcmVhdGVFZmZlY3QoImxheWVyIiwgW19NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0
aW9uS2luZF0sIFsidGV4dHVyZU1hdHJpeCIsICJjb2xvciIsICJzY2FsZSIsICJvZmZzZXQiXSwg
WyJ0ZXh0dXJlU2FtcGxlciJdLCAiIik7CisgICAgICAgIHRoaXMuX2FscGhhVGVzdEVmZmVjdCA9
IGVuZ2luZS5jcmVhdGVFZmZlY3QoImxheWVyIiwgW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0sIFsidGV4dHVy
ZU1hdHJpeCIsICJjb2xvciIsICJzY2FsZSIsICJvZmZzZXQiXSwgWyJ0ZXh0dXJlU2FtcGxlciJd
LCAiI2RlZmluZSBBTFBIQVRFU1QiKTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KExheWVyLnByb3RvdHlwZSwgIm9uRGlzcG9zZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEJhY2sgY29tcGF0aWJpbGl0eSB3aXRoIGNhbGxiYWNrIGJlZm9yZSB0aGUgb25EaXNwb3NlT2Jz
ZXJ2YWJsZSBleGlzdGVkLgorICAgICAgICAgKiBUaGUgc2V0IGNhbGxiYWNrIHdpbGwgYmUgdHJp
Z2dlcmVkIHdoZW4gdGhlIGxheWVyIGhhcyBiZWVuIGRpc3Bvc2VkLgorICAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9v
bkRpc3Bvc2VPYnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMub25EaXNwb3NlT2JzZXJ2
YWJsZS5yZW1vdmUodGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIgPSB0aGlzLm9uRGlzcG9zZU9ic2VydmFi
bGUuYWRkKGNhbGxiYWNrKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KExheWVyLnByb3RvdHlwZSwgIm9uQmVmb3JlUmVuZGVyIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogQmFjayBjb21wYXRpYmlsaXR5IHdpdGggY2FsbGJhY2sgYmVmb3JlIHRoZSBv
bkJlZm9yZVJlbmRlck9ic2VydmFibGUgZXhpc3RlZC4KKyAgICAgICAgICogVGhlIHNldCBjYWxs
YmFjayB3aWxsIGJlIHRyaWdnZXJlZCBqdXN0IGJlZm9yZSByZW5kZXJpbmcgdGhlIGxheWVyLgor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9vbkJlZm9yZVJlbmRlck9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQmVmb3JlUmVuZGVy
T2JzZXJ2ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVSZW5k
ZXJPYnNlcnZlciA9IHRoaXMub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMYXllci5wcm90
b3R5cGUsICJvbkFmdGVyUmVuZGVyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQmFjayBj
b21wYXRpYmlsaXR5IHdpdGggY2FsbGJhY2sgYmVmb3JlIHRoZSBvbkFmdGVyUmVuZGVyT2JzZXJ2
YWJsZSBleGlzdGVkLgorICAgICAgICAgKiBUaGUgc2V0IGNhbGxiYWNrIHdpbGwgYmUgdHJpZ2dl
cmVkIGp1c3QgYWZ0ZXIgcmVuZGVyaW5nIHRoZSBsYXllci4KKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb25BZnRl
clJlbmRlck9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyT2Jz
ZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25BZnRlclJlbmRlck9ic2VydmVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJSZW5kZXJPYnNlcnZlciA9IHRoaXMub25BZnRl
clJlbmRlck9ic2VydmFibGUuYWRkKGNhbGxiYWNrKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
TGF5ZXIucHJvdG90eXBlLl9jcmVhdGVJbmRleEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIGVuZ2luZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICAvLyBJbmRp
Y2VzCisgICAgICAgIHZhciBpbmRpY2VzID0gW107CisgICAgICAgIGluZGljZXMucHVzaCgwKTsK
KyAgICAgICAgaW5kaWNlcy5wdXNoKDEpOworICAgICAgICBpbmRpY2VzLnB1c2goMik7CisgICAg
ICAgIGluZGljZXMucHVzaCgwKTsKKyAgICAgICAgaW5kaWNlcy5wdXNoKDIpOworICAgICAgICBp
bmRpY2VzLnB1c2goMyk7CisgICAgICAgIHRoaXMuX2luZGV4QnVmZmVyID0gZW5naW5lLmNyZWF0
ZUluZGV4QnVmZmVyKGluZGljZXMpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBM
YXllci5wcm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB2YiA9
IHRoaXMuX3ZlcnRleEJ1ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgaWYgKHZiKSB7
CisgICAgICAgICAgICB2Yi5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Ny
ZWF0ZUluZGV4QnVmZmVyKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIHRoZSBs
YXllciBpbiB0aGUgc2NlbmUuCisgICAgICovCisgICAgTGF5ZXIucHJvdG90eXBlLnJlbmRlciA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGN1cnJlbnRFZmZlY3QgPSB0aGlzLmFscGhhVGVz
dCA/IHRoaXMuX2FscGhhVGVzdEVmZmVjdCA6IHRoaXMuX2VmZmVjdDsKKyAgICAgICAgLy8gQ2hl
Y2sKKyAgICAgICAgaWYgKCFjdXJyZW50RWZmZWN0LmlzUmVhZHkoKSB8fCAhdGhpcy50ZXh0dXJl
IHx8ICF0aGlzLnRleHR1cmUuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAg
ICAgICB0aGlzLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7
CisgICAgICAgIC8vIFJlbmRlcgorICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KGN1cnJlbnRF
ZmZlY3QpOworICAgICAgICBlbmdpbmUuc2V0U3RhdGUoZmFsc2UpOworICAgICAgICAvLyBUZXh0
dXJlCisgICAgICAgIGN1cnJlbnRFZmZlY3Quc2V0VGV4dHVyZSgidGV4dHVyZVNhbXBsZXIiLCB0
aGlzLnRleHR1cmUpOworICAgICAgICBjdXJyZW50RWZmZWN0LnNldE1hdHJpeCgidGV4dHVyZU1h
dHJpeCIsIHRoaXMudGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KCkpOworICAgICAgICAvLyBDb2xv
cgorICAgICAgICBjdXJyZW50RWZmZWN0LnNldEZsb2F0NCgiY29sb3IiLCB0aGlzLmNvbG9yLnIs
IHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iLCB0aGlzLmNvbG9yLmEpOworICAgICAgICAvLyBT
Y2FsZSAvIG9mZnNldAorICAgICAgICBjdXJyZW50RWZmZWN0LnNldFZlY3RvcjIoIm9mZnNldCIs
IHRoaXMub2Zmc2V0KTsKKyAgICAgICAgY3VycmVudEVmZmVjdC5zZXRWZWN0b3IyKCJzY2FsZSIs
IHRoaXMuc2NhbGUpOworICAgICAgICAvLyBWQk9zCisgICAgICAgIGVuZ2luZS5iaW5kQnVmZmVy
cyh0aGlzLl92ZXJ0ZXhCdWZmZXJzLCB0aGlzLl9pbmRleEJ1ZmZlciwgY3VycmVudEVmZmVjdCk7
CisgICAgICAgIC8vIERyYXcgb3JkZXIKKyAgICAgICAgaWYgKCF0aGlzLmFscGhhVGVzdCkgewor
ICAgICAgICAgICAgZW5naW5lLnNldEFscGhhTW9kZSh0aGlzLmFscGhhQmxlbmRpbmdNb2RlKTsK
KyAgICAgICAgICAgIGVuZ2luZS5kcmF3RWxlbWVudHNUeXBlKF9NYXRlcmlhbHNfbWF0ZXJpYWxf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWwiXS5UcmlhbmdsZUZpbGxNb2Rl
LCAwLCA2KTsKKyAgICAgICAgICAgIGVuZ2luZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNvbnN0YW50cyJdLkFMUEhBX0RJU0FC
TEUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW5naW5lLmRyYXdF
bGVtZW50c1R5cGUoX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fWyJNYXRlcmlhbCJdLlRyaWFuZ2xlRmlsbE1vZGUsIDAsIDYpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMub25BZnRlclJlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgYW5kIHJlbGVhc2VzIHRoZSBhc3NvY2lh
dGVkIHJlc3NvdXJjZXMuCisgICAgICovCisgICAgTGF5ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB0aGlzLl92ZXJ0ZXhCdWZm
ZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1
ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXIpIHsKKyAgICAg
ICAgICAgIHZlcnRleEJ1ZmZlci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhC
dWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRl
eEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0gPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLl9pbmRleEJ1ZmZlcikgeworICAgICAgICAgICAgdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCku
X3JlbGVhc2VCdWZmZXIodGhpcy5faW5kZXhCdWZmZXIpOworICAgICAgICAgICAgdGhpcy5faW5k
ZXhCdWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnRleHR1cmUpIHsK
KyAgICAgICAgICAgIHRoaXMudGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLnRl
eHR1cmUgPSBudWxsOworICAgICAgICB9CisgICAgICAgIC8vIENsZWFuIFJUVCBsaXN0CisgICAg
ICAgIHRoaXMucmVuZGVyVGFyZ2V0VGV4dHVyZXMgPSBbXTsKKyAgICAgICAgLy8gUmVtb3ZlIGZy
b20gc2NlbmUKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2NlbmUubGF5ZXJzLmluZGV4T2Yo
dGhpcyk7CisgICAgICAgIHRoaXMuX3NjZW5lLmxheWVycy5zcGxpY2UoaW5kZXgsIDEpOworICAg
ICAgICAvLyBDYWxsYmFjaworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUubm90aWZ5
T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUuY2xlYXIo
KTsKKyAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAg
ICB0aGlzLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgIH07CisgICAgcmV0
dXJuIExheWVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9MYXllcnMvbGF5
ZXJTY2VuZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL0xheWVycy9sYXllclNjZW5lQ29tcG9uZW50LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBMYXllclNjZW5lQ29tcG9uZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkxheWVyU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIExh
eWVyU2NlbmVDb21wb25lbnQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZUNv
bXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vc2NlbmVDb21wb25lbnQgKi8gIi4vc2NlbmVDb21wb25lbnQudHMiKTsKKworLyoq
CisgKiBEZWZpbmVzIHRoZSBsYXllciBzY2VuZSBjb21wb25lbnQgcmVzcG9uc2libGUgdG8gbWFu
YWdlIGFueSBsYXllcnMKKyAqIGluIGEgZ2l2ZW4gc2NlbmUuCisgKi8KK3ZhciBMYXllclNjZW5l
Q29tcG9uZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBmb3IgdGhlIGdpdmVuIHNj
ZW5lCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRvIHJlZ2lzdGVyIHRo
ZSBjb21wb25lbnQgaW4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBMYXllclNjZW5lQ29tcG9uZW50
KHNjZW5lKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY29tcG9uZW50IG5hbWUgaGVs
cGZ1bGwgdG8gaWRlbnRpZnkgdGhlIGNvbXBvbmVudCBpbiB0aGUgbGlzdCBvZiBzY2VuZSBjb21w
b25lbnRzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5uYW1lID0gX3NjZW5lQ29tcG9uZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0u
TkFNRV9MQVlFUjsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9l
bmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgc2NlbmUubGF5ZXJzID0gbmV3IEFy
cmF5KCk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyB0aGUgY29tcG9uZW50IGlu
IGEgZ2l2ZW4gc2NlbmUKKyAgICAgKi8KKyAgICBMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlw
ZS5yZWdpc3RlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2VuZS5fYmVmb3JlQ2Ft
ZXJhRHJhd1N0YWdlLnJlZ2lzdGVyU3RlcChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5TVEVQX0JFRk9SRUNBTUVS
QURSQVdfTEFZRVIsIHRoaXMsIHRoaXMuX2RyYXdDYW1lcmFCYWNrZ3JvdW5kKTsKKyAgICAgICAg
dGhpcy5zY2VuZS5fYWZ0ZXJDYW1lcmFEcmF3U3RhZ2UucmVnaXN0ZXJTdGVwKF9zY2VuZUNvbXBv
bmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50
cyJdLlNURVBfQUZURVJDQU1FUkFEUkFXX0xBWUVSLCB0aGlzLCB0aGlzLl9kcmF3Q2FtZXJhRm9y
ZWdyb3VuZCk7CisgICAgICAgIHRoaXMuc2NlbmUuX2JlZm9yZVJlbmRlclRhcmdldERyYXdTdGFn
ZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9CRUZPUkVSRU5ERVJUQVJHRVREUkFX
X0xBWUVSLCB0aGlzLCB0aGlzLl9kcmF3UmVuZGVyVGFyZ2V0QmFja2dyb3VuZCk7CisgICAgICAg
IHRoaXMuc2NlbmUuX2FmdGVyUmVuZGVyVGFyZ2V0RHJhd1N0YWdlLnJlZ2lzdGVyU3RlcChfc2Nl
bmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NlbmVDb21wb25lbnRD
b25zdGFudHMiXS5TVEVQX0FGVEVSUkVOREVSVEFSR0VURFJBV19MQVlFUiwgdGhpcywgdGhpcy5f
ZHJhd1JlbmRlclRhcmdldEZvcmVncm91bmQpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVi
dWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4gY2FzZSBvZgor
ICAgICAqIGNvbnRleHQgbG9zdCBmb3IgaW5zdGFuY2UuCisgICAgICovCisgICAgTGF5ZXJTY2Vu
ZUNvbXBvbmVudC5wcm90b3R5cGUucmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IGxheWVycyA9IHRoaXMuc2NlbmUubGF5ZXJzOworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGxh
eWVyc18xID0gbGF5ZXJzOyBfaSA8IGxheWVyc18xLmxlbmd0aDsgX2krKykgeworICAgICAgICAg
ICAgdmFyIGxheWVyID0gbGF5ZXJzXzFbX2ldOworICAgICAgICAgICAgbGF5ZXIuX3JlYnVpbGQo
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhlIGNvbXBv
bmVudCBhbmQgdGhlIGFzc29jaWF0ZWQgcmVzc291cmNlcy4KKyAgICAgKi8KKyAgICBMYXllclNj
ZW5lQ29tcG9uZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2
YXIgbGF5ZXJzID0gdGhpcy5zY2VuZS5sYXllcnM7CisgICAgICAgIHdoaWxlIChsYXllcnMubGVu
Z3RoKSB7CisgICAgICAgICAgICBsYXllcnNbMF0uZGlzcG9zZSgpOworICAgICAgICB9CisgICAg
fTsKKyAgICBMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5fZHJhdyA9IGZ1bmN0aW9uIChw
cmVkaWNhdGUpIHsKKyAgICAgICAgdmFyIGxheWVycyA9IHRoaXMuc2NlbmUubGF5ZXJzOworICAg
ICAgICBpZiAobGF5ZXJzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5fZW5naW5lLnNldERl
cHRoQnVmZmVyKGZhbHNlKTsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgbGF5ZXJzXzIg
PSBsYXllcnM7IF9pIDwgbGF5ZXJzXzIubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAg
dmFyIGxheWVyID0gbGF5ZXJzXzJbX2ldOworICAgICAgICAgICAgICAgIGlmIChwcmVkaWNhdGUo
bGF5ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGxheWVyLnJlbmRlcigpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5zZXREZXB0
aEJ1ZmZlcih0cnVlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgTGF5ZXJTY2VuZUNvbXBvbmVu
dC5wcm90b3R5cGUuX2RyYXdDYW1lcmFQcmVkaWNhdGUgPSBmdW5jdGlvbiAobGF5ZXIsIGlzQmFj
a2dyb3VuZCwgY2FtZXJhTGF5ZXJNYXNrKSB7CisgICAgICAgIHJldHVybiAhbGF5ZXIucmVuZGVy
T25seUluUmVuZGVyVGFyZ2V0VGV4dHVyZXMgJiYKKyAgICAgICAgICAgIGxheWVyLmlzQmFja2dy
b3VuZCA9PT0gaXNCYWNrZ3JvdW5kICYmCisgICAgICAgICAgICAoKGxheWVyLmxheWVyTWFzayAm
IGNhbWVyYUxheWVyTWFzaykgIT09IDApOworICAgIH07CisgICAgTGF5ZXJTY2VuZUNvbXBvbmVu
dC5wcm90b3R5cGUuX2RyYXdDYW1lcmFCYWNrZ3JvdW5kID0gZnVuY3Rpb24gKGNhbWVyYSkgewor
ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl9kcmF3KGZ1bmN0aW9uIChs
YXllcikgeworICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9kcmF3Q2FtZXJhUHJlZGljYXRlKGxh
eWVyLCB0cnVlLCBjYW1lcmEubGF5ZXJNYXNrKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBM
YXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5fZHJhd0NhbWVyYUZvcmVncm91bmQgPSBmdW5j
dGlvbiAoY2FtZXJhKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMu
X2RyYXcoZnVuY3Rpb24gKGxheWVyKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2RyYXdD
YW1lcmFQcmVkaWNhdGUobGF5ZXIsIGZhbHNlLCBjYW1lcmEubGF5ZXJNYXNrKTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICBMYXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5fZHJhd1JlbmRl
clRhcmdldFByZWRpY2F0ZSA9IGZ1bmN0aW9uIChsYXllciwgaXNCYWNrZ3JvdW5kLCBjYW1lcmFM
YXllck1hc2ssIHJlbmRlclRhcmdldFRleHR1cmUpIHsKKyAgICAgICAgcmV0dXJuIChsYXllci5y
ZW5kZXJUYXJnZXRUZXh0dXJlcy5sZW5ndGggPiAwKSAmJgorICAgICAgICAgICAgbGF5ZXIuaXNC
YWNrZ3JvdW5kID09PSBpc0JhY2tncm91bmQgJiYKKyAgICAgICAgICAgIChsYXllci5yZW5kZXJU
YXJnZXRUZXh0dXJlcy5pbmRleE9mKHJlbmRlclRhcmdldFRleHR1cmUpID4gLTEpICYmCisgICAg
ICAgICAgICAoKGxheWVyLmxheWVyTWFzayAmIGNhbWVyYUxheWVyTWFzaykgIT09IDApOworICAg
IH07CisgICAgTGF5ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX2RyYXdSZW5kZXJUYXJnZXRC
YWNrZ3JvdW5kID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkgeworICAgICAgICB2YXIgX3RoaXMg
PSB0aGlzOworICAgICAgICB0aGlzLl9kcmF3KGZ1bmN0aW9uIChsYXllcikgeworICAgICAgICAg
ICAgcmV0dXJuIF90aGlzLl9kcmF3UmVuZGVyVGFyZ2V0UHJlZGljYXRlKGxheWVyLCB0cnVlLCBf
dGhpcy5zY2VuZS5hY3RpdmVDYW1lcmEubGF5ZXJNYXNrLCByZW5kZXJUYXJnZXQpOworICAgICAg
ICB9KTsKKyAgICB9OworICAgIExheWVyU2NlbmVDb21wb25lbnQucHJvdG90eXBlLl9kcmF3UmVu
ZGVyVGFyZ2V0Rm9yZWdyb3VuZCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpIHsKKyAgICAgICAg
dmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5fZHJhdyhmdW5jdGlvbiAobGF5ZXIpIHsK
KyAgICAgICAgICAgIHJldHVybiBfdGhpcy5fZHJhd1JlbmRlclRhcmdldFByZWRpY2F0ZShsYXll
ciwgZmFsc2UsIF90aGlzLnNjZW5lLmFjdGl2ZUNhbWVyYS5sYXllck1hc2ssIHJlbmRlclRhcmdl
dCk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhbGwgdGhlIGVs
ZW1lbnRzIGZyb20gdGhlIGNvbnRhaW5lciB0byB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gY29u
dGFpbmVyIHRoZSBjb250YWluZXIgaG9sZGluZyB0aGUgZWxlbWVudHMKKyAgICAgKi8KKyAgICBM
YXllclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5hZGRGcm9tQ29udGFpbmVyID0gZnVuY3Rpb24g
KGNvbnRhaW5lcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoIWNv
bnRhaW5lci5sYXllcnMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBjb250YWluZXIubGF5ZXJzLmZvckVhY2goZnVuY3Rpb24gKGxheWVyKSB7CisgICAgICAgICAg
ICBfdGhpcy5zY2VuZS5sYXllcnMucHVzaChsYXllcik7CisgICAgICAgIH0pOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmVtb3ZlcyBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBjb250YWluZXIg
ZnJvbSB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gY29udGFpbmVyIGNvbnRhaW5zIHRoZSBlbGVt
ZW50cyB0byByZW1vdmUKKyAgICAgKiBAcGFyYW0gZGlzcG9zZSBpZiB0aGUgcmVtb3ZlZCBlbGVt
ZW50IHNob3VsZCBiZSBkaXNwb3NlZCAoZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgTGF5
ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVtb3ZlRnJvbUNvbnRhaW5lciA9IGZ1bmN0aW9u
IChjb250YWluZXIsIGRpc3Bvc2UpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkgeyBkaXNwb3NlID0gZmFsc2U7IH0KKyAgICAgICAg
aWYgKCFjb250YWluZXIubGF5ZXJzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgY29udGFpbmVyLmxheWVycy5mb3JFYWNoKGZ1bmN0aW9uIChsYXllcikgeworICAg
ICAgICAgICAgdmFyIGluZGV4ID0gX3RoaXMuc2NlbmUubGF5ZXJzLmluZGV4T2YobGF5ZXIpOwor
ICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgICAgIF90aGlzLnNj
ZW5lLmxheWVycy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGRpc3Bvc2UpIHsKKyAgICAgICAgICAgICAgICBsYXllci5kaXNwb3NlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgcmV0dXJuIExheWVyU2NlbmVDb21wb25l
bnQ7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0xlZ2FjeS9sZWdhY3kudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0xlZ2FjeS9sZWdh
Y3kudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogRGVidWcsIEFic3RyYWN0U2NlbmUsIEtlZXBBc3NldHMsIEFzc2V0Q29udGFpbmVy
LCBOb2RlLCBTY2VuZSwgU2NlbmVDb21wb25lbnRDb25zdGFudHMsIFN0YWdlLCBBYnN0cmFjdEFj
dGlvbk1hbmFnZXIsIEFjdGlvbiwgQWN0aW9uRXZlbnQsIEFjdGlvbk1hbmFnZXIsIENvbmRpdGlv
biwgVmFsdWVDb25kaXRpb24sIFByZWRpY2F0ZUNvbmRpdGlvbiwgU3RhdGVDb25kaXRpb24sIFN3
aXRjaEJvb2xlYW5BY3Rpb24sIFNldFN0YXRlQWN0aW9uLCBTZXRWYWx1ZUFjdGlvbiwgSW5jcmVt
ZW50VmFsdWVBY3Rpb24sIFBsYXlBbmltYXRpb25BY3Rpb24sIFN0b3BBbmltYXRpb25BY3Rpb24s
IERvTm90aGluZ0FjdGlvbiwgQ29tYmluZUFjdGlvbiwgRXhlY3V0ZUNvZGVBY3Rpb24sIFNldFBh
cmVudEFjdGlvbiwgUGxheVNvdW5kQWN0aW9uLCBTdG9wU291bmRBY3Rpb24sIEludGVycG9sYXRl
VmFsdWVBY3Rpb24sIEFuaW1hdGFibGUsIF9JQW5pbWF0aW9uU3RhdGUsIEFuaW1hdGlvbiwgVGFy
Z2V0ZWRBbmltYXRpb24sIEFuaW1hdGlvbkdyb3VwLCBBbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJp
ZGUsIEVhc2luZ0Z1bmN0aW9uLCBDaXJjbGVFYXNlLCBCYWNrRWFzZSwgQm91bmNlRWFzZSwgQ3Vi
aWNFYXNlLCBFbGFzdGljRWFzZSwgRXhwb25lbnRpYWxFYXNlLCBQb3dlckVhc2UsIFF1YWRyYXRp
Y0Vhc2UsIFF1YXJ0aWNFYXNlLCBRdWludGljRWFzZSwgU2luZUVhc2UsIEJlemllckN1cnZlRWFz
ZSwgUnVudGltZUFuaW1hdGlvbiwgQW5pbWF0aW9uRXZlbnQsIEFuaW1hdGlvbktleUludGVycG9s
YXRpb24sIEFuaW1hdGlvblJhbmdlLCBBbmFseXNlciwgQXVkaW9FbmdpbmUsIEF1ZGlvU2NlbmVD
b21wb25lbnQsIFNvdW5kLCBTb3VuZFRyYWNrLCBXZWlnaHRlZFNvdW5kLCBCb25lLCBCb25lSUtD
b250cm9sbGVyLCBCb25lTG9va0NvbnRyb2xsZXIsIFNrZWxldG9uLCBDYW1lcmFJbnB1dFR5cGVz
LCBDYW1lcmFJbnB1dHNNYW5hZ2VyLCBDYW1lcmEsIFRhcmdldENhbWVyYSwgRnJlZUNhbWVyYSwg
RnJlZUNhbWVyYUlucHV0c01hbmFnZXIsIFRvdWNoQ2FtZXJhLCBBcmNSb3RhdGVDYW1lcmEsIEFy
Y1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIsIERldmljZU9yaWVudGF0aW9uQ2FtZXJhLCBGbHlD
YW1lcmEsIEZseUNhbWVyYUlucHV0c01hbmFnZXIsIEZvbGxvd0NhbWVyYSwgQXJjRm9sbG93Q2Ft
ZXJhLCBGb2xsb3dDYW1lcmFJbnB1dHNNYW5hZ2VyLCBHYW1lcGFkQ2FtZXJhLCBVbml2ZXJzYWxD
YW1lcmEsIFZpcnR1YWxKb3lzdGlja3NDYW1lcmEsIENvbGxpZGVyLCBEZWZhdWx0Q29sbGlzaW9u
Q29vcmRpbmF0b3IsIFBpY2tpbmdJbmZvLCBJbnRlcnNlY3Rpb25JbmZvLCBfTWVzaENvbGxpc2lv
bkRhdGEsIEJvdW5kaW5nQm94LCBCb3VuZGluZ0luZm8sIEJvdW5kaW5nU3BoZXJlLCBSYXksIEF4
ZXNWaWV3ZXIsIEJvbmVBeGVzVmlld2VyLCBEZWJ1Z0xheWVyLCBQaHlzaWNzVmlld2VyLCBSYXlI
ZWxwZXIsIFNrZWxldG9uVmlld2VyLCBDb25zdGFudHMsIEluc3RhbmNpbmdBdHRyaWJ1dGVJbmZv
LCBEZXB0aFRleHR1cmVDcmVhdGlvbk9wdGlvbnMsIEVuZ2luZUNhcGFiaWxpdGllcywgRW5naW5l
LCBFbmdpbmVTdG9yZSwgTnVsbEVuZ2luZU9wdGlvbnMsIE51bGxFbmdpbmUsIFdlYkdMUGlwZWxp
bmVDb250ZXh0LCBXZWJHUFVDb25zdGFudHMsIFdlYkdQVUVuZ2luZSwgV2ViR0wyU2hhZGVyUHJv
Y2Vzc29yLCBOYXRpdmVFbmdpbmUsIEtleWJvYXJkRXZlbnRUeXBlcywgS2V5Ym9hcmRJbmZvLCBL
ZXlib2FyZEluZm9QcmUsIFBvaW50ZXJFdmVudFR5cGVzLCBQb2ludGVySW5mb0Jhc2UsIFBvaW50
ZXJJbmZvUHJlLCBQb2ludGVySW5mbywgQ2xpcGJvYXJkRXZlbnRUeXBlcywgQ2xpcGJvYXJkSW5m
bywgU3RpY2tWYWx1ZXMsIEdhbWVwYWQsIEdlbmVyaWNQYWQsIEdhbWVwYWRNYW5hZ2VyLCBHYW1l
cGFkU3lzdGVtU2NlbmVDb21wb25lbnQsIFhib3gzNjBCdXR0b24sIFhib3gzNjBEcGFkLCBYYm94
MzYwUGFkLCBEdWFsU2hvY2tCdXR0b24sIER1YWxTaG9ja0RwYWQsIER1YWxTaG9ja1BhZCwgQXhp
c0RyYWdHaXptbywgQXhpc1NjYWxlR2l6bW8sIEJvdW5kaW5nQm94R2l6bW8sIEdpem1vLCBHaXpt
b01hbmFnZXIsIFBsYW5lUm90YXRpb25HaXptbywgUG9zaXRpb25HaXptbywgUm90YXRpb25HaXpt
bywgU2NhbGVHaXptbywgTGlnaHRHaXptbywgUGxhbmVEcmFnR2l6bW8sIEVudmlyb25tZW50SGVs
cGVyLCBQaG90b0RvbWUsIF9mb3JjZVNjZW5lSGVscGVyc1RvQnVuZGxlLCBWaWRlb0RvbWUsIEVu
Z2luZUluc3RydW1lbnRhdGlvbiwgU2NlbmVJbnN0cnVtZW50YXRpb24sIF9UaW1lVG9rZW4sIEVm
ZmVjdExheWVyLCBFZmZlY3RMYXllclNjZW5lQ29tcG9uZW50LCBHbG93TGF5ZXIsIEhpZ2hsaWdo
dExheWVyLCBMYXllciwgTGF5ZXJTY2VuZUNvbXBvbmVudCwgTGVuc0ZsYXJlLCBMZW5zRmxhcmVT
eXN0ZW0sIExlbnNGbGFyZVN5c3RlbVNjZW5lQ29tcG9uZW50LCBMaWdodCwgU2hhZG93TGlnaHQs
IERpcmVjdGlvbmFsTGlnaHQsIEhlbWlzcGhlcmljTGlnaHQsIFBvaW50TGlnaHQsIFNwb3RMaWdo
dCwgRGVmYXVsdExvYWRpbmdTY3JlZW4sIFNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudCwgU2NlbmVM
b2FkZXIsIFNjZW5lTG9hZGVyRmxhZ3MsIENvbG9yQ3VydmVzLCBFZmZlY3RGYWxsYmFja3MsIEVm
ZmVjdENyZWF0aW9uT3B0aW9ucywgRWZmZWN0LCBGcmVzbmVsUGFyYW1ldGVycywgSW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMsIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24s
IE1hdGVyaWFsLCBNYXRlcmlhbERlZmluZXMsIE1hdGVyaWFsSGVscGVyLCBNdWx0aU1hdGVyaWFs
LCBQdXNoTWF0ZXJpYWwsIFNoYWRlck1hdGVyaWFsLCBTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcywg
U3RhbmRhcmRNYXRlcmlhbCwgQmFzZVRleHR1cmUsIEN1YmVUZXh0dXJlLCBEeW5hbWljVGV4dHVy
ZSwgRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUsIEhEUkN1YmVUZXh0dXJlLCBJbnRlcm5hbFRl
eHR1cmUsIE1pcnJvclRleHR1cmUsIE11bHRpUmVuZGVyVGFyZ2V0LCBSYXdUZXh0dXJlLCBSZW5k
ZXJUYXJnZXRUZXh0dXJlLCBUZXh0dXJlLCBVbmlmb3JtQnVmZmVyLCBNYXRlcmlhbEZsYWdzLCBF
ZmZlY3RSZW5kZXJlciwgRWZmZWN0V3JhcHBlciwgU2NhbGFyLCBTcGFjZSwgQXhpcywgQ29sb3Iz
LCBDb2xvcjQsIFRtcENvbG9ycywgVG9HYW1tYVNwYWNlLCBUb0xpbmVhclNwYWNlLCBFcHNpbG9u
LCBGcnVzdHVtLCBQbGFuZSwgU2l6ZSwgVmVjdG9yMiwgVmVjdG9yMywgVmVjdG9yNCwgUXVhdGVy
bmlvbiwgTWF0cml4LCBUbXBWZWN0b3JzLCBWaWV3cG9ydCwgU3BoZXJpY2FsSGFybW9uaWNzLCBT
cGhlcmljYWxQb2x5bm9taWFsLCBBYnN0cmFjdE1lc2gsIEJ1ZmZlciwgVmVydGV4QnVmZmVyLCBD
U0csIEdlb21ldHJ5LCBHcm91bmRNZXNoLCBUcmFpbE1lc2gsIEluc3RhbmNlZE1lc2gsIExpbmVz
TWVzaCwgSW5zdGFuY2VkTGluZXNNZXNoLCBfQ3JlYXRpb25EYXRhU3RvcmFnZSwgX0luc3RhbmNl
c0JhdGNoLCBNZXNoLCBWZXJ0ZXhEYXRhLCBNZXNoQnVpbGRlciwgU2ltcGxpZmljYXRpb25TZXR0
aW5ncywgU2ltcGxpZmljYXRpb25RdWV1ZSwgU2ltcGxpZmljYXRpb25UeXBlLCBTaW1wbGljYXRp
b25RdWV1ZVNjZW5lQ29tcG9uZW50LCBQb2x5Z29uLCBQb2x5Z29uTWVzaEJ1aWxkZXIsIEJhc2VT
dWJNZXNoLCBTdWJNZXNoLCBNZXNoTE9ETGV2ZWwsIFRyYW5zZm9ybU5vZGUsIEJveEJ1aWxkZXIs
IFNwaGVyZUJ1aWxkZXIsIEN5bGluZGVyQnVpbGRlciwgVG9ydXNCdWlsZGVyLCBMaW5lc0J1aWxk
ZXIsIFBsYW5lQnVpbGRlciwgR3JvdW5kQnVpbGRlciwgRGF0YUJ1ZmZlciwgV2ViR0xEYXRhQnVm
ZmVyLCBXZWJHUFVEYXRhQnVmZmVyLCBNb3JwaFRhcmdldCwgTW9ycGhUYXJnZXRNYW5hZ2VyLCBE
YXRhYmFzZSwgQmFzZVBhcnRpY2xlU3lzdGVtLCBHUFVQYXJ0aWNsZVN5c3RlbSwgUGFydGljbGUs
IFBhcnRpY2xlSGVscGVyLCBQYXJ0aWNsZVN5c3RlbSwgX0lEb05lZWRUb0JlSW5UaGVCdWlsZCwg
UGFydGljbGVTeXN0ZW1TZXQsIFNvbGlkUGFydGljbGUsIE1vZGVsU2hhcGUsIERlcHRoU29ydGVk
UGFydGljbGUsIFNvbGlkUGFydGljbGVTeXN0ZW0sIFN1YkVtaXR0ZXJUeXBlLCBTdWJFbWl0dGVy
LCBQaHlzaWNzRW5naW5lLCBQaHlzaWNzRW5naW5lU2NlbmVDb21wb25lbnQsIFBoeXNpY3NIZWxw
ZXIsIFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnMsIFBoeXNpY3NVcGRyYWZ0RXZl
bnRPcHRpb25zLCBQaHlzaWNzVm9ydGV4RXZlbnRPcHRpb25zLCBQaHlzaWNzUmFkaWFsSW1wdWxz
ZUZhbGxvZmYsIFBoeXNpY3NVcGRyYWZ0TW9kZSwgUGh5c2ljc0ltcG9zdG9yLCBQaHlzaWNzSm9p
bnQsIERpc3RhbmNlSm9pbnQsIE1vdG9yRW5hYmxlZEpvaW50LCBIaW5nZUpvaW50LCBIaW5nZTJK
b2ludCwgQW5hZ2x5cGhQb3N0UHJvY2VzcywgQmxhY2tBbmRXaGl0ZVBvc3RQcm9jZXNzLCBCbG9v
bUVmZmVjdCwgQmxvb21NZXJnZVBvc3RQcm9jZXNzLCBCbHVyUG9zdFByb2Nlc3MsIENocm9tYXRp
Y0FiZXJyYXRpb25Qb3N0UHJvY2VzcywgQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJvY2VzcywgQ29s
b3JDb3JyZWN0aW9uUG9zdFByb2Nlc3MsIENvbnZvbHV0aW9uUG9zdFByb2Nlc3MsIERlcHRoT2ZG
aWVsZEJsdXJQb3N0UHJvY2VzcywgRGVwdGhPZkZpZWxkRWZmZWN0Qmx1ckxldmVsLCBEZXB0aE9m
RmllbGRFZmZlY3QsIERlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3NPcHRpb25zLCBEZXB0aE9m
RmllbGRNZXJnZVBvc3RQcm9jZXNzLCBEaXNwbGF5UGFzc1Bvc3RQcm9jZXNzLCBFeHRyYWN0SGln
aGxpZ2h0c1Bvc3RQcm9jZXNzLCBGaWx0ZXJQb3N0UHJvY2VzcywgRnhhYVBvc3RQcm9jZXNzLCBH
cmFpblBvc3RQcm9jZXNzLCBIaWdobGlnaHRzUG9zdFByb2Nlc3MsIEltYWdlUHJvY2Vzc2luZ1Bv
c3RQcm9jZXNzLCBNb3Rpb25CbHVyUG9zdFByb2Nlc3MsIFBhc3NQb3N0UHJvY2VzcywgUGFzc0N1
YmVQb3N0UHJvY2VzcywgUG9zdFByb2Nlc3MsIFBvc3RQcm9jZXNzTWFuYWdlciwgUmVmcmFjdGlv
blBvc3RQcm9jZXNzLCBTaGFycGVuUG9zdFByb2Nlc3MsIFN0ZXJlb3Njb3BpY0ludGVybGFjZVBv
c3RQcm9jZXNzLCBUb25lbWFwcGluZ09wZXJhdG9yLCBUb25lbWFwUG9zdFByb2Nlc3MsIFZvbHVt
ZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzcywgVlJEaXN0b3J0aW9uQ29ycmVjdGlvblBv
c3RQcm9jZXNzLCBWUk11bHRpdmlld1RvU2luZ2xldmlld1Bvc3RQcm9jZXNzLCBSZWZsZWN0aW9u
UHJvYmUsIEJvdW5kaW5nQm94UmVuZGVyZXIsIERlcHRoUmVuZGVyZXIsIERlcHRoUmVuZGVyZXJT
Y2VuZUNvbXBvbmVudCwgRWRnZXNSZW5kZXJlciwgTGluZUVkZ2VzUmVuZGVyZXIsIEdlb21ldHJ5
QnVmZmVyUmVuZGVyZXIsIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudCwgT3V0
bGluZVJlbmRlcmVyLCBSZW5kZXJpbmdHcm91cCwgUmVuZGVyaW5nR3JvdXBJbmZvLCBSZW5kZXJp
bmdNYW5hZ2VyLCBVdGlsaXR5TGF5ZXJSZW5kZXJlciwgU3ByaXRlLCBTcHJpdGVNYW5hZ2VyLCBT
cHJpdGVQYWNrZWRNYW5hZ2VyLCBTcHJpdGVTY2VuZUNvbXBvbmVudCwgX0FscGhhU3RhdGUsIF9E
ZXB0aEN1bGxpbmdTdGF0ZSwgX1N0ZW5jaWxTdGF0ZSwgQW5kT3JOb3RFdmFsdWF0b3IsIEFzc2V0
VGFza1N0YXRlLCBBYnN0cmFjdEFzc2V0VGFzaywgQXNzZXRzUHJvZ3Jlc3NFdmVudCwgTWVzaEFz
c2V0VGFzaywgVGV4dEZpbGVBc3NldFRhc2ssIEJpbmFyeUZpbGVBc3NldFRhc2ssIEltYWdlQXNz
ZXRUYXNrLCBUZXh0dXJlQXNzZXRUYXNrLCBDdWJlVGV4dHVyZUFzc2V0VGFzaywgSERSQ3ViZVRl
eHR1cmVBc3NldFRhc2ssIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNzZXRUYXNrLCBBc3Nl
dHNNYW5hZ2VyLCBERFNUb29scywgZXhwYW5kVG9Qcm9wZXJ0eSwgc2VyaWFsaXplLCBzZXJpYWxp
emVBc1RleHR1cmUsIHNlcmlhbGl6ZUFzQ29sb3IzLCBzZXJpYWxpemVBc0ZyZXNuZWxQYXJhbWV0
ZXJzLCBzZXJpYWxpemVBc1ZlY3RvcjIsIHNlcmlhbGl6ZUFzVmVjdG9yMywgc2VyaWFsaXplQXNN
ZXNoUmVmZXJlbmNlLCBzZXJpYWxpemVBc0NvbG9yQ3VydmVzLCBzZXJpYWxpemVBc0NvbG9yNCwg
c2VyaWFsaXplQXNJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLCBzZXJpYWxpemVBc1F1YXRl
cm5pb24sIHNlcmlhbGl6ZUFzTWF0cml4LCBzZXJpYWxpemVBc0NhbWVyYVJlZmVyZW5jZSwgU2Vy
aWFsaXphdGlvbkhlbHBlciwgRGVmZXJyZWQsIEVudmlyb25tZW50VGV4dHVyZVRvb2xzLCBNZXNo
RXhwbG9kZXIsIEZpbGVzSW5wdXQsIEN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29scywg
S2hyb25vc1RleHR1cmVDb250YWluZXIsIEV2ZW50U3RhdGUsIE9ic2VydmVyLCBNdWx0aU9ic2Vy
dmVyLCBPYnNlcnZhYmxlLCBQZXJmb3JtYW5jZU1vbml0b3IsIFJvbGxpbmdBdmVyYWdlLCBQcm9t
aXNlUG9seWZpbGwsIFNjZW5lT3B0aW1pemF0aW9uLCBUZXh0dXJlT3B0aW1pemF0aW9uLCBIYXJk
d2FyZVNjYWxpbmdPcHRpbWl6YXRpb24sIFNoYWRvd3NPcHRpbWl6YXRpb24sIFBvc3RQcm9jZXNz
ZXNPcHRpbWl6YXRpb24sIExlbnNGbGFyZXNPcHRpbWl6YXRpb24sIEN1c3RvbU9wdGltaXphdGlv
biwgUGFydGljbGVzT3B0aW1pemF0aW9uLCBSZW5kZXJUYXJnZXRzT3B0aW1pemF0aW9uLCBNZXJn
ZU1lc2hlc09wdGltaXphdGlvbiwgU2NlbmVPcHRpbWl6ZXJPcHRpb25zLCBTY2VuZU9wdGltaXpl
ciwgU2NlbmVTZXJpYWxpemVyLCBTbWFydEFycmF5LCBTbWFydEFycmF5Tm9EdXBsaWNhdGUsIFN0
cmluZ0RpY3Rpb25hcnksIFRhZ3MsIFRleHR1cmVUb29scywgVEdBVG9vbHMsIFRvb2xzLCBjbGFz
c05hbWUsIEFzeW5jTG9vcCwgVmlkZW9SZWNvcmRlciwgSm95c3RpY2tBeGlzLCBWaXJ0dWFsSm95
c3RpY2ssIFdvcmtlclBvb2wsIExvZ2dlciwgX1R5cGVTdG9yZSwgRmlsZXNJbnB1dFN0b3JlLCBE
ZWVwQ29waWVyLCBQaXZvdFRvb2xzLCBQcmVjaXNpb25EYXRlLCBTY3JlZW5zaG90VG9vbHMsIFdl
YlJlcXVlc3QsIEluc3BlY3RhYmxlVHlwZSwgQlJERlRleHR1cmVUb29scywgUkdCRFRleHR1cmVU
b29scywgQ29sb3JHcmFkaWVudCwgQ29sb3IzR3JhZGllbnQsIEZhY3RvckdyYWRpZW50LCBHcmFk
aWVudEhlbHBlciwgUGVyZkNvdW50ZXIsIFJldHJ5U3RyYXRlZ3ksIExvYWRGaWxlRXJyb3IsIEF1
dG9Sb3RhdGlvbkJlaGF2aW9yLCBCb3VuY2luZ0JlaGF2aW9yLCBGcmFtaW5nQmVoYXZpb3IsIEF0
dGFjaFRvQm94QmVoYXZpb3IsIEZhZGVJbk91dEJlaGF2aW9yLCBNdWx0aVBvaW50ZXJTY2FsZUJl
aGF2aW9yLCBQb2ludGVyRHJhZ0JlaGF2aW9yLCBTaXhEb2ZEcmFnQmVoYXZpb3IsIEFyY1JvdGF0
ZUNhbWVyYUdhbWVwYWRJbnB1dCwgQXJjUm90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQsIEFy
Y1JvdGF0ZUNhbWVyYU1vdXNlV2hlZWxJbnB1dCwgQXJjUm90YXRlQ2FtZXJhUG9pbnRlcnNJbnB1
dCwgQXJjUm90YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0LCBGbHlDYW1lcmFLZXli
b2FyZElucHV0LCBGbHlDYW1lcmFNb3VzZUlucHV0LCBGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJ
bnB1dCwgRm9sbG93Q2FtZXJhTW91c2VXaGVlbElucHV0LCBGb2xsb3dDYW1lcmFQb2ludGVyc0lu
cHV0LCBGcmVlQ2FtZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dCwgRnJlZUNhbWVyYUdhbWVwYWRJ
bnB1dCwgRnJlZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0LCBGcmVlQ2FtZXJhTW91c2VJbnB1dCwg
RnJlZUNhbWVyYVRvdWNoSW5wdXQsIEZyZWVDYW1lcmFWaXJ0dWFsSm95c3RpY2tJbnB1dCwgQW5h
Z2x5cGhBcmNSb3RhdGVDYW1lcmEsIEFuYWdseXBoRnJlZUNhbWVyYSwgQW5hZ2x5cGhHYW1lcGFk
Q2FtZXJhLCBBbmFnbHlwaFVuaXZlcnNhbENhbWVyYSwgU3RlcmVvc2NvcGljQXJjUm90YXRlQ2Ft
ZXJhLCBTdGVyZW9zY29waWNGcmVlQ2FtZXJhLCBTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhLCBT
dGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEsIFZSQ2FtZXJhTWV0cmljcywgVlJEZXZpY2VPcmll
bnRhdGlvbkFyY1JvdGF0ZUNhbWVyYSwgVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEsIFZS
RGV2aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhLCBPbkFmdGVyRW50ZXJpbmdWUk9ic2VydmFi
bGVFdmVudCwgVlJFeHBlcmllbmNlSGVscGVyLCBXZWJWUkZyZWVDYW1lcmEsIFdlYlhSQ2FtZXJh
LCBXZWJYUkVudGVyRXhpdFVJQnV0dG9uLCBXZWJYUkVudGVyRXhpdFVJT3B0aW9ucywgV2ViWFJF
bnRlckV4aXRVSSwgV2ViWFJTdGF0ZSwgV2ViWFJFeHBlcmllbmNlSGVscGVyLCBXZWJYUklucHV0
LCBXZWJYUkNvbnRyb2xsZXJUZWxlcG9ydGF0aW9uLCBXZWJYUkNvbnRyb2xsZXJQb2ludGVyU2Vs
ZWN0aW9uLCBXZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciwgV2ViWFJDb250cm9sbGVyLCBXZWJY
Uk1hbmFnZWRPdXRwdXRDYW52YXMsIFdlYlhSU2Vzc2lvbk1hbmFnZXIsIE9jdHJlZSwgT2N0cmVl
QmxvY2ssIE9jdHJlZVNjZW5lQ29tcG9uZW50LCBfT2NjbHVzaW9uRGF0YVN0b3JhZ2UsIF9mb3Jj
ZVRyYW5zZm9ybUZlZWRiYWNrVG9CdW5kbGUsIERheWRyZWFtQ29udHJvbGxlciwgR2VhclZSQ29u
dHJvbGxlciwgR2VuZXJpY0NvbnRyb2xsZXIsIE9jdWx1c1RvdWNoQ29udHJvbGxlciwgUG9zZUVu
YWJsZWRDb250cm9sbGVyVHlwZSwgUG9zZUVuYWJsZWRDb250cm9sbGVySGVscGVyLCBQb3NlRW5h
YmxlZENvbnRyb2xsZXIsIFZpdmVDb250cm9sbGVyLCBXZWJWUkNvbnRyb2xsZXIsIFdpbmRvd3NN
b3Rpb25Db250cm9sbGVyLCBTaGFkb3dHZW5lcmF0b3IsIFNoYWRvd0dlbmVyYXRvclNjZW5lQ29t
cG9uZW50LCBfQmFieWxvbkxvYWRlclJlZ2lzdGVyZWQsIEJhY2tncm91bmRNYXRlcmlhbCwgUEJS
TWF0ZXJpYWxEZWZpbmVzLCBQQlJCYXNlTWF0ZXJpYWwsIFBCUkJhc2VTaW1wbGVNYXRlcmlhbCwg
UEJSTWF0ZXJpYWwsIFBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwsIFBCUlNwZWN1bGFyR2xv
c3NpbmVzc01hdGVyaWFsLCBDb2xvckdyYWRpbmdUZXh0dXJlLCBSYXdDdWJlVGV4dHVyZSwgUmF3
VGV4dHVyZTNELCBSZWZyYWN0aW9uVGV4dHVyZSwgVmlkZW9UZXh0dXJlLCBIdG1sRWxlbWVudFRl
eHR1cmUsIE5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cywgTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcywgTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50LCBOb2RlTWF0ZXJpYWxC
bG9jaywgTm9kZU1hdGVyaWFsRGVmaW5lcywgTm9kZU1hdGVyaWFsLCBOb2RlTWF0ZXJpYWxTeXN0
ZW1WYWx1ZXMsIE9yaWVudGF0aW9uLCBCZXppZXJDdXJ2ZSwgQW5nbGUsIEFyYzIsIFBhdGgyLCBQ
YXRoM0QsIEN1cnZlMywgUG9zaXRpb25Ob3JtYWxWZXJ0ZXgsIFBvc2l0aW9uTm9ybWFsVGV4dHVy
ZVZlcnRleCwgRHJhY29Db21wcmVzc2lvbiwgVGlsZWRCb3hCdWlsZGVyLCBEaXNjQnVpbGRlciwg
UmliYm9uQnVpbGRlciwgSGVtaXNwaGVyZUJ1aWxkZXIsIFRvcnVzS25vdEJ1aWxkZXIsIFBvbHln
b25CdWlsZGVyLCBTaGFwZUJ1aWxkZXIsIExhdGhlQnVpbGRlciwgVGlsZWRQbGFuZUJ1aWxkZXIs
IFR1YmVCdWlsZGVyLCBQb2x5aGVkcm9uQnVpbGRlciwgSWNvU3BoZXJlQnVpbGRlciwgRGVjYWxC
dWlsZGVyLCBSZWNhc3RKU1BsdWdpbiwgUmVjYXN0SlNDcm93ZCwgQm94UGFydGljbGVFbWl0dGVy
LCBDb25lUGFydGljbGVFbWl0dGVyLCBDeWxpbmRlclBhcnRpY2xlRW1pdHRlciwgQ3lsaW5kZXJE
aXJlY3RlZFBhcnRpY2xlRW1pdHRlciwgSGVtaXNwaGVyaWNQYXJ0aWNsZUVtaXR0ZXIsIFBvaW50
UGFydGljbGVFbWl0dGVyLCBTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIsIFNwaGVyZURpcmVjdGVkUGFy
dGljbGVFbWl0dGVyLCBDYW5ub25KU1BsdWdpbiwgQW1tb0pTUGx1Z2luLCBPaW1vSlNQbHVnaW4s
IFBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0LCBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLCBQb3N0
UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlciwgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1h
bmFnZXJTY2VuZUNvbXBvbmVudCwgSERSVG9vbHMsIFBhbm9yYW1hVG9DdWJlTWFwVG9vbHMsIF9E
RFNUZXh0dXJlTG9hZGVyLCBfRU5WVGV4dHVyZUxvYWRlciwgX0tUWFRleHR1cmVMb2FkZXIsIF9U
R0FUZXh0dXJlTG9hZGVyLCBfQmFzaXNUZXh0dXJlTG9hZGVyLCBDdXN0b21Qcm9jZWR1cmFsVGV4
dHVyZSwgTm9pc2VQcm9jZWR1cmFsVGV4dHVyZSwgUHJvY2VkdXJhbFRleHR1cmUsIFByb2NlZHVy
YWxUZXh0dXJlU2NlbmVDb21wb25lbnQsIE11bHRpcGx5QmxvY2ssIEFkZEJsb2NrLCBTY2FsZUJs
b2NrLCBDbGFtcEJsb2NrLCBDcm9zc0Jsb2NrLCBEb3RCbG9jaywgVHJhbnNmb3JtQmxvY2ssIFJl
bWFwQmxvY2ssIE5vcm1hbGl6ZUJsb2NrLCBUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnMsIFRy
aWdvbm9tZXRyeUJsb2NrLCBDb2xvck1lcmdlckJsb2NrLCBWZWN0b3JNZXJnZXJCbG9jaywgQ29s
b3JTcGxpdHRlckJsb2NrLCBWZWN0b3JTcGxpdHRlckJsb2NrLCBMZXJwQmxvY2ssIERpdmlkZUJs
b2NrLCBTdWJ0cmFjdEJsb2NrLCBTdGVwQmxvY2ssIE9wcG9zaXRlQmxvY2ssIFZpZXdEaXJlY3Rp
b25CbG9jaywgRnJlc25lbEJsb2NrLCBNYXhCbG9jaywgTWluQmxvY2ssIE5vZGVNYXRlcmlhbE9w
dGltaXplciwgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLCBMZW5zUmVuZGVyaW5nUGlwZWxpbmUs
IFNTQU8yUmVuZGVyaW5nUGlwZWxpbmUsIFNTQU9SZW5kZXJpbmdQaXBlbGluZSwgU3RhbmRhcmRS
ZW5kZXJpbmdQaXBlbGluZSwgVmVydGV4T3V0cHV0QmxvY2ssIEJvbmVzQmxvY2ssIEluc3RhbmNl
c0Jsb2NrLCBNb3JwaFRhcmdldHNCbG9jaywgTGlnaHRJbmZvcm1hdGlvbkJsb2NrLCBGcmFnbWVu
dE91dHB1dEJsb2NrLCBBbHBoYVRlc3RCbG9jaywgSW1hZ2VQcm9jZXNzaW5nQmxvY2ssIFBlcnR1
cmJOb3JtYWxCbG9jaywgRm9nQmxvY2ssIExpZ2h0QmxvY2ssIFRleHR1cmVCbG9jaywgUmVmbGVj
dGlvblRleHR1cmVCbG9jaywgSW5wdXRCbG9jaywgQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGds
b2JhbCkgey8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlYnVnIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEZWJ1
ZzsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbmRleCAqLyAiLi9pbmRl
eC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9EZWJ1Z19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRGVidWcvaW5k
ZXggKi8gIi4vRGVidWcvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWJzdHJhY3RTY2Vu
ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkFic3RyYWN0U2NlbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiS2VlcEFzc2V0cyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IktlZXBBc3NldHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXNzZXRDb250YWluZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJB
c3NldENvbnRhaW5lciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZSJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTY2VuZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RhZ2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdGFnZSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJBYnN0cmFjdEFjdGlvbk1hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBYnN0cmFjdEFjdGlvbk1hbmFnZXIi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQWN0aW9uIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkFjdGlvbkV2ZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQWN0aW9uRXZlbnQiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQWN0aW9uTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFjdGlvbk1hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siQ29uZGl0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlZhbHVlQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmFsdWVDb25kaXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUHJlZGljYXRlQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siUHJlZGljYXRlQ29uZGl0aW9uIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlN0YXRlQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3RhdGVDb25kaXRpb24iXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiU3dpdGNoQm9vbGVhbkFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlN3aXRjaEJvb2xlYW5BY3Rpb24i
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2V0U3RhdGVBY3Rpb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTZXRTdGF0ZUFjdGlv
biJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTZXRWYWx1ZUFjdGlvbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNldFZhbHVlQWN0
aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkluY3JlbWVudFZhbHVlQWN0aW9uIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSW5j
cmVtZW50VmFsdWVBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxheUFuaW1hdGlv
bkFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlBsYXlBbmltYXRpb25BY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U3RvcEFuaW1hdGlvbkFjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlN0b3BBbmltYXRpb25BY3Rpb24iXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiRG9Ob3RoaW5nQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRG9Ob3RoaW5nQWN0aW9uIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkNvbWJpbmVBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb21iaW5lQWN0aW9uIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkV4ZWN1dGVDb2RlQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRXhlY3V0ZUNvZGVBY3Rpb24iXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2V0UGFyZW50QWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2V0UGFyZW50QWN0aW9u
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBsYXlTb3VuZEFjdGlvbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBsYXlTb3VuZEFj
dGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdG9wU291bmRBY3Rpb24iLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdG9wU291
bmRBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW50ZXJwb2xhdGVWYWx1ZUFjdGlv
biIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkludGVycG9sYXRlVmFsdWVBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5p
bWF0YWJsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkFuaW1hdGFibGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0lBbmltYXRp
b25TdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9JQW5pbWF0aW9uU3RhdGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5p
bWF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQW5pbWF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRhcmdldGVkQW5p
bWF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVGFyZ2V0ZWRBbmltYXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5p
bWF0aW9uR3JvdXAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJBbmltYXRpb25Hcm91cCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJB
bmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRWFzaW5nRnVuY3Rpb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFYXNpbmdGdW5jdGlv
biJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDaXJjbGVFYXNlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ2lyY2xlRWFzZSJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJCYWNrRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhY2tFYXNlIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkJvdW5jZUVhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCb3VuY2VFYXNlIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkN1YmljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkN1YmljRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJF
bGFzdGljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkVsYXN0aWNFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkV4cG9u
ZW50aWFsRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkV4cG9uZW50aWFsRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQ
b3dlckVhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJQb3dlckVhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVhZHJhdGlj
RWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlF1YWRyYXRpY0Vhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVhcnRpY0Vh
c2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJRdWFydGljRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJRdWludGljRWFzZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlF1aW50aWNFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbmVFYXNlIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2luZUVh
c2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmV6aWVyQ3VydmVFYXNlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmV6aWVyQ3Vy
dmVFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJ1bnRpbWVBbmltYXRpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJSdW50
aW1lQW5pbWF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGlvbkV2ZW50Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
QW5pbWF0aW9uRXZlbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5pbWF0aW9uS2V5SW50
ZXJwb2xhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkFuaW1hdGlvbktleUludGVycG9sYXRpb24iXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQW5pbWF0aW9uUmFuZ2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBbmltYXRpb25SYW5nZSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJBbmFseXNlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkFuYWx5c2VyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkF1ZGlvRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siQXVkaW9FbmdpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXVk
aW9TY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkF1ZGlvU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU291bmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJTb3VuZCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTb3VuZFRy
YWNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siU291bmRUcmFjayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWlnaHRlZFNvdW5k
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siV2VpZ2h0ZWRTb3VuZCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb25lIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQm9uZSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb25lSUtDb250cm9sbGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQm9uZUlLQ29udHJv
bGxlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb25lTG9va0NvbnRyb2xsZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCb25l
TG9va0NvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2tlbGV0b24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTa2Vs
ZXRvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDYW1lcmFJbnB1dFR5cGVzIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ2FtZXJh
SW5wdXRUeXBlcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDYW1lcmFJbnB1dHNNYW5hZ2Vy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQ2FtZXJhSW5wdXRzTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDYW1lcmEi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGFyZ2V0Q2FtZXJhIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVGFyZ2V0
Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJGcmVlQ2FtZXJh
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmFJbnB1dHNNYW5hZ2VyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRnJl
ZUNhbWVyYUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG91Y2hDYW1l
cmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJUb3VjaENhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmNSb3RhdGVDYW1l
cmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJBcmNSb3RhdGVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRl
Q2FtZXJhSW5wdXRzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkFyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRGV2aWNlT3JpZW50YXRpb25DYW1lcmEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEZXZpY2VPcmll
bnRhdGlvbkNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGbHlDYW1lcmEiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJGbHlD
YW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmx5Q2FtZXJhSW5wdXRzTWFuYWdlciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkZseUNhbWVyYUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRm9sbG93
Q2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRm9sbG93Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY0ZvbGxv
d0NhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkFyY0ZvbGxvd0NhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGb2xs
b3dDYW1lcmFJbnB1dHNNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlciJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJHYW1lcGFkQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siR2FtZXBhZENhbWVyYSJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJVbml2ZXJzYWxDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJVbml2ZXJzYWxDYW1lcmEiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlydHVhbEpveXN0aWNrc0NhbWVyYSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZpcnR1YWxK
b3lzdGlja3NDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sbGlkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb2xs
aWRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWZhdWx0Q29sbGlzaW9uQ29vcmRpbmF0
b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJEZWZhdWx0Q29sbGlzaW9uQ29vcmRpbmF0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUGlja2luZ0luZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJQaWNraW5nSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJ
bnRlcnNlY3Rpb25JbmZvIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siSW50ZXJzZWN0aW9uSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJfTWVzaENvbGxpc2lvbkRhdGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfTWVzaENvbGxpc2lvbkRhdGEiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQm91bmRpbmdCb3giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCb3VuZGluZ0JveCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJCb3VuZGluZ0luZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCb3VuZGluZ0luZm8iXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQm91bmRpbmdTcGhlcmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCb3VuZGluZ1NwaGVyZSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJSYXkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJSYXkiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXhlc1ZpZXdl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkF4ZXNWaWV3ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm9uZUF4ZXNWaWV3ZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJCb25lQXhlc1ZpZXdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWJ1Z0xheWVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RGVidWdMYXllciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzVmlld2VyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGh5
c2ljc1ZpZXdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSYXlIZWxwZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJSYXlIZWxw
ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2tlbGV0b25WaWV3ZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTa2VsZXRvblZp
ZXdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb25zdGFudHMiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb25zdGFudHMiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zdGFuY2luZ0F0dHJpYnV0ZUluZm8iLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJJbnN0YW5j
aW5nQXR0cmlidXRlSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aFRleHR1cmVD
cmVhdGlvbk9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJEZXB0aFRleHR1cmVDcmVhdGlvbk9wdGlvbnMiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRW5naW5lQ2FwYWJpbGl0aWVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lQ2FwYWJpbGl0aWVzIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJFbmdpbmVTdG9yZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZVN0b3JlIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIk51bGxFbmdpbmVPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTnVsbEVuZ2luZU9wdGlvbnMiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTnVsbEVuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk51bGxFbmdpbmUiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiV2ViR0xQaXBlbGluZUNvbnRleHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXZWJHTFBpcGVsaW5lQ29udGV4dCJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJXZWJHUFVDb25zdGFudHMiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXZWJHUFVDb25zdGFudHMi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViR1BVRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siV2ViR1BVRW5naW5lIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkdMMlNoYWRlclByb2Nlc3NvciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldlYkdMMlNo
YWRlclByb2Nlc3NvciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOYXRpdmVFbmdpbmUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJO
YXRpdmVFbmdpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiS2V5Ym9hcmRFdmVudFR5cGVz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siS2V5Ym9hcmRFdmVudFR5cGVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktleWJvYXJk
SW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIktleWJvYXJkSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJLZXlib2FyZElu
Zm9QcmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJLZXlib2FyZEluZm9QcmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRl
ckV2ZW50VHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJQb2ludGVyRXZlbnRUeXBlcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJQb2ludGVySW5mb0Jhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVySW5mb0Jhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiUG9pbnRlckluZm9QcmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb2ludGVySW5mb1ByZSJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQb2ludGVySW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50ZXJJbmZvIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkNsaXBib2FyZEV2ZW50VHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDbGlwYm9hcmRFdmVudFR5cGVzIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkNsaXBib2FyZEluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDbGlwYm9hcmRJbmZvIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlN0aWNrVmFsdWVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3RpY2tWYWx1ZXMiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiR2FtZXBhZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkdhbWVwYWQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
R2VuZXJpY1BhZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkdlbmVyaWNQYWQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2FtZXBh
ZE1hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJHYW1lcGFkTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHYW1l
cGFkU3lzdGVtU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHYW1lcGFkU3lzdGVtU2NlbmVDb21wb25lbnQiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiWGJveDM2MEJ1dHRvbiIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlhib3gzNjBCdXR0b24iXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiWGJveDM2MERwYWQiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJYYm94MzYwRHBhZCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJYYm94MzYwUGFkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siWGJveDM2MFBhZCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJEdWFsU2hvY2tCdXR0b24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEdWFsU2hvY2tCdXR0b24iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRHVhbFNob2NrRHBhZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkR1YWxTaG9ja0RwYWQiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRHVhbFNob2NrUGFkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRHVhbFNob2NrUGFkIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkF4aXNEcmFnR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBeGlzRHJhZ0dpem1vIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkF4aXNTY2FsZUdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXhpc1NjYWxlR2l6bW8iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQm91bmRpbmdCb3hHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJvdW5kaW5nQm94R2l6bW8iXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHaXptbyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJHaXptb01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHaXptb01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiUGxhbmVSb3RhdGlvbkdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGxhbmVSb3RhdGlvbkdpem1vIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBvc2l0aW9uR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQb3NpdGlvbkdpem1vIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlJvdGF0aW9uR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJSb3RhdGlvbkdpem1vIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlNjYWxlR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsZUdpem1vIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkxpZ2h0R2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMaWdodEdpem1vIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBsYW5lRHJhZ0dpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siUGxhbmVEcmFnR2l6bW8iXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRW52aXJvbm1lbnRIZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbnZpcm9ubWVudEhlbHBlciJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJQaG90b0RvbWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQaG90b0RvbWUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiX2ZvcmNlU2NlbmVIZWxwZXJzVG9CdW5kbGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfZm9yY2VTY2VuZUhlbHBlcnNUb0J1
bmRsZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWaWRlb0RvbWUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWaWRlb0RvbWUiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRW5naW5lSW5zdHJ1bWVudGF0aW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lSW5z
dHJ1bWVudGF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lSW5zdHJ1bWVudGF0
aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siU2NlbmVJbnN0cnVtZW50YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX1Rp
bWVUb2tlbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9UaW1lVG9rZW4iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRWZmZWN0TGF5
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJFZmZlY3RMYXllciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFZmZlY3RMYXllclNj
ZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siRWZmZWN0TGF5ZXJTY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJHbG93TGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHbG93TGF5ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiSGlnaGxpZ2h0TGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJIaWdobGlnaHRMYXllciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJMYXllciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkxheWVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxheWVyU2NlbmVD
b21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJMYXllclNjZW5lQ29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkxlbnNGbGFyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkxlbnNGbGFyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zRmxh
cmVTeXN0ZW0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJMZW5zRmxhcmVTeXN0ZW0iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVu
c0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVu
dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxpZ2h0Il07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlNoYWRvd0xpZ2h0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2hhZG93TGlnaHQiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiRGlyZWN0aW9uYWxMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRpcmVjdGlvbmFsTGlnaHQiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiSGVtaXNwaGVyaWNMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkhlbWlzcGhlcmljTGlnaHQiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvaW50TGlnaHQiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiU3BvdExpZ2h0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3BvdExpZ2h0Il07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkRlZmF1bHRMb2FkaW5nU2NyZWVuIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRGVmYXVsdExvYWRpbmdTY3JlZW4iXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVMb2FkZXJQcm9ncmVzc0V2ZW50IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NlbmVMb2Fk
ZXJQcm9ncmVzc0V2ZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lTG9hZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
U2NlbmVMb2FkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVMb2FkZXJGbGFncyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlNjZW5lTG9hZGVyRmxhZ3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3JDdXJ2ZXMi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJDb2xvckN1cnZlcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFZmZlY3RGYWxsYmFja3Mi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJFZmZlY3RGYWxsYmFja3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRWZmZWN0Q3JlYXRp
b25PcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRWZmZWN0Q3JlYXRpb25PcHRpb25zIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkVmZmVjdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkVmZmVjdCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVzbmVsUGFy
YW1ldGVycyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkZyZXNuZWxQYXJhbWV0ZXJzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIklt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25EZWZpbmVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbkRlZmluZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRlcmlhbCJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJNYXRlcmlhbERlZmluZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRlcmlhbERlZmluZXMiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiTWF0ZXJpYWxIZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRlcmlhbEhlbHBlciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNdWx0aU1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTXVsdGlNYXRlcmlhbCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJQdXNoTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQdXNoTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU2hhZGVyTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTaGFkZXJNYXRlcmlhbCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlN0YW5kYXJkTWF0ZXJpYWxEZWZp
bmVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkTWF0ZXJpYWwiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdGFuZGFy
ZE1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VUZXh0dXJlIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZVRl
eHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3ViZVRleHR1cmUiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDdWJlVGV4dHVy
ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEeW5hbWljVGV4dHVyZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkR5bmFtaWNUZXh0
dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJl
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
SERSQ3ViZVRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJIRFJDdWJlVGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJJbnRlcm5hbFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJJbnRlcm5hbFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTWlycm9yVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIk1pcnJvclRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTXVsdGlSZW5kZXJUYXJnZXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNdWx0aVJlbmRlclRhcmdldCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJSYXdUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUmF3VGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJSZW5kZXJUYXJnZXRUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJVbmlmb3JtQnVmZmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVW5pZm9ybUJ1ZmZlciJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJNYXRlcmlhbEZsYWdzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWF0ZXJpYWxGbGFncyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJFZmZlY3RSZW5kZXJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdFJlbmRlcmVyIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkVmZmVjdFdyYXBwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3RXcmFwcGVyIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlNjYWxhciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlNjYWxhciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGFj
ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlNwYWNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkF4aXMiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBeGlzIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yMyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbG9yMyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJDb2xvcjQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJDb2xvcjQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG1wQ29sb3Jz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVG1wQ29sb3JzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvR2FtbWFTcGFjZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRv
R2FtbWFTcGFjZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUb0xpbmVhclNwYWNlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9M
aW5lYXJTcGFjZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFcHNpbG9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRXBzaWxvbiJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcnVzdHVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRnJ1c3R1bSJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJQbGFuZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlBsYW5lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNp
emUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJTaXplIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3RvcjIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IyIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3RvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlZlY3RvcjQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3I0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlF1YXRlcm5pb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJRdWF0ZXJuaW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1hdHJp
eCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIk1hdHJpeCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUbXBWZWN0b3JzIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVj
dG9ycyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWaWV3cG9ydCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZpZXdwb3J0Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlNwaGVyaWNhbEhhcm1vbmljcyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNwaGVyaWNhbEhhcm1v
bmljcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGhlcmljYWxQb2x5bm9taWFsIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3Bo
ZXJpY2FsUG9seW5vbWlhbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBYnN0cmFjdE1lc2gi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJBYnN0cmFjdE1lc2giXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQnVmZmVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQnVmZmVy
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlcnRleEJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlcnRleEJ1ZmZlciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJDU0ciLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDU0ciXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiR2VvbWV0cnkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJHZW9tZXRyeSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHcm91
bmRNZXNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siR3JvdW5kTWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmFpbE1lc2gi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJUcmFpbE1lc2giXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zdGFuY2VkTWVzaCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIklu
c3RhbmNlZE1lc2giXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGluZXNNZXNoIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTGluZXNN
ZXNoIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkluc3RhbmNlZExpbmVzTWVzaCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkluc3Rh
bmNlZExpbmVzTWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfQ3JlYXRpb25EYXRhU3Rv
cmFnZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9DcmVhdGlvbkRhdGFTdG9yYWdlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9J
bnN0YW5jZXNCYXRjaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9JbnN0YW5jZXNCYXRjaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJNZXNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWZXJ0ZXhEYXRhIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVy
dGV4RGF0YSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNZXNoQnVpbGRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2hCdWls
ZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbXBsaWZpY2F0aW9uU2V0dGluZ3MiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJT
aW1wbGlmaWNhdGlvblNldHRpbmdzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbXBsaWZp
Y2F0aW9uUXVldWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJTaW1wbGlmaWNhdGlvblF1ZXVlIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlNpbXBsaWZpY2F0aW9uVHlwZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNpbXBsaWZpY2F0aW9uVHlwZSJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTaW1wbGljYXRpb25RdWV1ZVNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2ltcGxpY2F0
aW9uUXVldWVTY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2x5Z29u
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUG9seWdvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2x5Z29uTWVzaEJ1aWxkZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQb2x5Z29uTWVzaEJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzZVN1Yk1l
c2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJCYXNlU3ViTWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdWJNZXNoIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3Vi
TWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNZXNoTE9ETGV2ZWwiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoTE9ETGV2
ZWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJhbnNmb3JtTm9kZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRyYW5zZm9ybU5v
ZGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm94QnVpbGRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJveEJ1aWxkZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3BoZXJlQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNwaGVyZUJ1aWxkZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ3lsaW5kZXJCdWlsZGVy
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvcnVzQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRvcnVzQnVpbGRlciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaW5lc0J1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMaW5lc0J1aWxkZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxhbmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGxhbmVCdWlsZGVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkdyb3VuZEJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHcm91bmRCdWlsZGVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkRhdGFCdWZmZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEYXRhQnVmZmVyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIldlYkdMRGF0YUJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldlYkdMRGF0YUJ1ZmZlciJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJXZWJHUFVEYXRhQnVmZmVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siV2ViR1BVRGF0YUJ1ZmZlciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJNb3JwaFRhcmdldCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1vcnBoVGFyZ2V0Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk1vcnBoVGFyZ2V0TWFuYWdlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1vcnBoVGFyZ2V0TWFu
YWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEYXRhYmFzZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRhdGFiYXNlIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2VQYXJ0aWNsZVN5
c3RlbSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHUFVQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkdQVVBh
cnRpY2xlU3lzdGVtIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhcnRpY2xlIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGFydGlj
bGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFydGljbGVIZWxwZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQYXJ0aWNsZUhl
bHBlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBhcnRpY2xl
U3lzdGVtIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9JRG9OZWVkVG9CZUluVGhlQnVpbGQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfSURvTmVlZFRvQmVJblRoZUJ1aWxkIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhcnRp
Y2xlU3lzdGVtU2V0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siUGFydGljbGVTeXN0ZW1TZXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiU29saWRQYXJ0aWNsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlNvbGlkUGFydGljbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiTW9kZWxTaGFwZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIk1vZGVsU2hhcGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVw
dGhTb3J0ZWRQYXJ0aWNsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkRlcHRoU29ydGVkUGFydGljbGUiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU29saWRQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNvbGlkUGFydGljbGVTeXN0ZW0iXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU3ViRW1pdHRlclR5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdWJFbWl0dGVyVHlwZSJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTdWJFbWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3ViRW1pdHRlciJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQaHlzaWNzRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGh5c2ljc0VuZ2luZSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQaHlzaWNzRW5naW5lU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQaHlzaWNzRW5n
aW5lU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc0hlbHBl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlBoeXNpY3NIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1JhZGlh
bEV4cGxvc2lvbkV2ZW50T3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlv
bnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1VwZHJhZnRFdmVudE9wdGlvbnMi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQaHlzaWNzVXBkcmFmdEV2ZW50T3B0aW9ucyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQ
aHlzaWNzVm9ydGV4RXZlbnRPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGh5c2ljc1ZvcnRleEV2ZW50T3B0aW9ucyJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzUmFkaWFsSW1wdWxzZUZhbGxvZmYiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQaHlz
aWNzUmFkaWFsSW1wdWxzZUZhbGxvZmYiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2lj
c1VwZHJhZnRNb2RlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siUGh5c2ljc1VwZHJhZnRNb2RlIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBoeXNpY3NJbXBvc3RvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlBoeXNpY3NJbXBvc3RvciJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQaHlzaWNzSm9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQaHlzaWNzSm9pbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRGlzdGFuY2VKb2ludCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkRpc3RhbmNlSm9pbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTW90b3JFbmFibGVkSm9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNb3RvckVuYWJsZWRKb2ludCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJIaW5nZUpvaW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSGluZ2VKb2ludCJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJIaW5nZTJKb2ludCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkhpbmdlMkpvaW50Il07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkFuYWdseXBoUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBbmFnbHlwaFBvc3RQcm9jZXNzIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkJsYWNrQW5kV2hpdGVQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJsYWNrQW5kV2hpdGVQ
b3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCbG9vbUVmZmVjdCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJsb29t
RWZmZWN0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJsb29tTWVyZ2VQb3N0UHJvY2VzcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkJsb29tTWVyZ2VQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCbHVyUG9z
dFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJCbHVyUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2hy
b21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9j
ZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nl
c3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJDaXJjbGVPZkNvbmZ1c2lvblBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkNvbG9yQ29ycmVjdGlvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29sb3JDb3JyZWN0aW9uUG9zdFByb2Nl
c3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29udm9sdXRpb25Qb3N0UHJvY2VzcyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNv
bnZvbHV0aW9uUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhPZkZp
ZWxkQmx1clBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoT2ZGaWVsZEVmZmVjdEJsdXJMZXZlbCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRlcHRoT2ZG
aWVsZEVmZmVjdEJsdXJMZXZlbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aE9mRmll
bGRFZmZlY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJEZXB0aE9mRmllbGRFZmZlY3QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
RGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2Vzc09wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEZXB0aE9mRmllbGRNZXJnZVBv
c3RQcm9jZXNzT3B0aW9ucyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aE9mRmllbGRN
ZXJnZVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2VzcyJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJEaXNwbGF5UGFzc1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRGlzcGxheVBhc3NQb3N0
UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFeHRyYWN0SGlnaGxpZ2h0c1Bvc3RQ
cm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRXh0cmFjdEhpZ2hsaWdodHNQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJGaWx0ZXJQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZpbHRlclBvc3RQcm9jZXNzIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkZ4YWFQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZ4YWFQb3N0UHJvY2VzcyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJHcmFpblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siR3JhaW5Qb3N0UHJvY2VzcyJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJIaWdobGlnaHRzUG9zdFByb2Nlc3MiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJIaWdobGln
aHRzUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5n
UG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNb3Rpb25CbHVyUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNb3Rpb25CbHVyUG9zdFByb2Nlc3Mi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFzc1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGFzc1Bvc3RQcm9j
ZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhc3NDdWJlUG9zdFByb2Nlc3MiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQYXNz
Q3ViZVBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
UG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3NNYW5hZ2Vy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUG9zdFByb2Nlc3NNYW5hZ2VyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlZnJhY3Rp
b25Qb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlJlZnJhY3Rpb25Qb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJTaGFycGVuUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTaGFycGVuUG9zdFByb2Nlc3MiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiU3RlcmVvc2NvcGljSW50ZXJsYWNlUG9zdFByb2Nlc3MiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdGVy
ZW9zY29waWNJbnRlcmxhY2VQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJU
b25lbWFwcGluZ09wZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVG9uZW1hcHBpbmdPcGVyYXRvciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJUb25lbWFwUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb25lbWFwUG9zdFByb2Nlc3MiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlZSRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZSRGlzdG9ydGlv
bkNvcnJlY3Rpb25Qb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWUk11bHRp
dmlld1RvU2luZ2xldmlld1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVlJNdWx0aXZpZXdUb1NpbmdsZXZpZXdQb3N0
UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZsZWN0aW9uUHJvYmUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJSZWZs
ZWN0aW9uUHJvYmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmRpbmdCb3hSZW5kZXJl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkJvdW5kaW5nQm94UmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhS
ZW5kZXJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkRlcHRoUmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhS
ZW5kZXJlclNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRGVwdGhSZW5kZXJlclNjZW5lQ29tcG9uZW50Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkVkZ2VzUmVuZGVyZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZGdlc1JlbmRlcmVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkxpbmVFZGdlc1JlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTGluZUVkZ2VzUmVuZGVy
ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2VvbWV0cnlCdWZmZXJSZW5kZXJlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkdl
b21ldHJ5QnVmZmVyUmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2VvbWV0cnlC
dWZmZXJSZW5kZXJlclNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siR2VvbWV0cnlCdWZmZXJSZW5kZXJlclNjZW5l
Q29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk91dGxpbmVSZW5kZXJlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk91
dGxpbmVSZW5kZXJlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJpbmdHcm91cCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlJlbmRlcmluZ0dyb3VwIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbmRlcmluZ0dyb3Vw
SW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlJlbmRlcmluZ0dyb3VwSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5k
ZXJpbmdNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siUmVuZGVyaW5nTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJVdGlsaXR5TGF5ZXJSZW5kZXJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlV0aWxpdHlMYXllclJlbmRlcmVyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlNwcml0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNwcml0ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTcHJpdGVNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siU3ByaXRlTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTcHJpdGVQYWNrZWRNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3ByaXRlUGFja2VkTWFuYWdlciJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTcHJpdGVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNwcml0ZVNjZW5lQ29tcG9uZW50
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9BbHBoYVN0YXRlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX0FscGhhU3RhdGUiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0RlcHRoQ3VsbGluZ1N0YXRlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX0RlcHRoQ3VsbGlu
Z1N0YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9TdGVuY2lsU3RhdGUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfU3RlbmNp
bFN0YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuZE9yTm90RXZhbHVhdG9yIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQW5k
T3JOb3RFdmFsdWF0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXNzZXRUYXNrU3RhdGUi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJBc3NldFRhc2tTdGF0ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBYnN0cmFjdEFzc2V0
VGFzayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkFic3RyYWN0QXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFzc2V0
c1Byb2dyZXNzRXZlbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJBc3NldHNQcm9ncmVzc0V2ZW50Il07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIk1lc2hBc3NldFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlRleHRGaWxlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVGV4dEZpbGVBc3NldFRhc2siXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQmluYXJ5RmlsZUFzc2V0VGFzayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJpbmFyeUZpbGVBc3NldFRhc2si
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VBc3NldFRhc2siLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJJbWFnZUFzc2V0VGFz
ayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUZXh0dXJlQXNzZXRUYXNrIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVGV4dHVyZUFz
c2V0VGFzayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDdWJlVGV4dHVyZUFzc2V0VGFzayIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkN1YmVUZXh0dXJlQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhEUkN1YmVU
ZXh0dXJlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siSERSQ3ViZVRleHR1cmVBc3NldFRhc2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmVBc3NldFRhc2siLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFcXVpUmVj
dGFuZ3VsYXJDdWJlVGV4dHVyZUFzc2V0VGFzayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJB
c3NldHNNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siQXNzZXRzTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJE
RFNUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkREU1Rvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImV4cGFuZFRvUHJv
cGVydHkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJleHBhbmRUb1Byb3BlcnR5Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNlcmlh
bGl6ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bInNlcmlhbGl6ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1Rl
eHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJzZXJpYWxpemVBc1RleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2Vy
aWFsaXplQXNDb2xvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJzZXJpYWxpemVBc0NvbG9yMyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJzZXJpYWxpemVBc0ZyZXNuZWxQYXJhbWV0ZXJzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sic2VyaWFsaXplQXNGcmVzbmVsUGFy
YW1ldGVycyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1ZlY3RvcjIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJz
ZXJpYWxpemVBc1ZlY3RvcjIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2VyaWFsaXplQXNW
ZWN0b3IzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1sic2VyaWFsaXplQXNWZWN0b3IzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNl
cmlhbGl6ZUFzTWVzaFJlZmVyZW5jZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bInNlcmlhbGl6ZUFzTWVzaFJlZmVyZW5jZSJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0NvbG9yQ3VydmVzIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sic2VyaWFsaXplQXND
b2xvckN1cnZlcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0NvbG9yNCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
InNlcmlhbGl6ZUFzQ29sb3I0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNlcmlhbGl6ZUFz
SW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bInNlcmlhbGl6ZUFzSW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1F1YXRl
cm5pb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJzZXJpYWxpemVBc1F1YXRlcm5pb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
c2VyaWFsaXplQXNNYXRyaXgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJzZXJpYWxpemVBc01hdHJpeCJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJzZXJpYWxpemVBc0NhbWVyYVJlZmVyZW5jZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bInNlcmlhbGl6ZUFzQ2FtZXJhUmVm
ZXJlbmNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNlcmlhbGl6YXRpb25IZWxwZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJT
ZXJpYWxpemF0aW9uSGVscGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlZmVycmVkIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RGVmZXJyZWQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRW52aXJvbm1lbnRUZXh0dXJlVG9v
bHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJFbnZpcm9ubWVudFRleHR1cmVUb29scyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJN
ZXNoRXhwbG9kZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJNZXNoRXhwbG9kZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmls
ZXNJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkZpbGVzSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3ViZU1hcFRv
U3BoZXJpY2FsUG9seW5vbWlhbFRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbFRv
b2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktocm9ub3NUZXh0dXJlQ29udGFpbmVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
S2hyb25vc1RleHR1cmVDb250YWluZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRXZlbnRT
dGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkV2ZW50U3RhdGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT2JzZXJ2ZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJP
YnNlcnZlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNdWx0aU9ic2VydmVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTXVsdGlP
YnNlcnZlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPYnNlcnZhYmxlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJs
ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQZXJmb3JtYW5jZU1vbml0b3IiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQZXJmb3Jt
YW5jZU1vbml0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUm9sbGluZ0F2ZXJhZ2UiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJS
b2xsaW5nQXZlcmFnZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQcm9taXNlUG9seWZpbGwi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQcm9taXNlUG9seWZpbGwiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVPcHRpbWl6
YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJTY2VuZU9wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUZXh0
dXJlT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVGV4dHVyZU9wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJIYXJkd2FyZVNjYWxpbmdPcHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJIYXJkd2FyZVNjYWxpbmdPcHRp
bWl6YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hhZG93c09wdGltaXphdGlvbiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlNoYWRvd3NPcHRpbWl6YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nl
c3Nlc09wdGltaXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlBvc3RQcm9jZXNzZXNPcHRpbWl6YXRpb24iXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTGVuc0ZsYXJlc09wdGltaXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxlbnNGbGFyZXNPcHRpbWl6
YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3VzdG9tT3B0aW1pemF0aW9uIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ3Vz
dG9tT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhcnRpY2xlc09wdGlt
aXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlBhcnRpY2xlc09wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJSZW5kZXJUYXJnZXRzT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUmVuZGVyVGFyZ2V0c09wdGltaXphdGlvbiJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJNZXJnZU1lc2hlc09wdGltaXphdGlvbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lcmdl
TWVzaGVzT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lT3B0aW1p
emVyT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlNjZW5lT3B0aW1pemVyT3B0aW9ucyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTY2VuZU9wdGltaXplciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lT3B0aW1pemVyIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlNjZW5lU2VyaWFsaXplciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lU2VyaWFsaXplciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTbWFydEFycmF5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siU21hcnRBcnJheSJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTbWFydEFycmF5Tm9EdXBsaWNhdGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTbWFydEFycmF5Tm9EdXBsaWNhdGUiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU3RyaW5nRGljdGlvbmFyeSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlN0cmluZ0RpY3Rpb25hcnki
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGFncyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRhZ3MiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVGV4dHVyZVRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVGV4dHVyZVRvb2xzIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlRHQVRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVEdBVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG9v
bHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJUb29scyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjbGFzc05hbWUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJjbGFzc05h
bWUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXN5bmNMb29wIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXN5bmNMb29wIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlZpZGVvUmVjb3JkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWaWRlb1JlY29yZGVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkpveXN0aWNrQXhpcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkpveXN0aWNrQXhpcyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJWaXJ0dWFsSm95c3RpY2siLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWaXJ0dWFsSm95c3RpY2siXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV29ya2VyUG9vbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldvcmtlclBvb2wiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTG9nZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTG9nZ2VyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIl9UeXBlU3RvcmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfVHlwZVN0b3JlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZp
bGVzSW5wdXRTdG9yZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkZpbGVzSW5wdXRTdG9yZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJEZWVwQ29waWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siRGVlcENvcGllciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaXZv
dFRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siUGl2b3RUb29scyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQcmVjaXNpb25E
YXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siUHJlY2lzaW9uRGF0ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY3JlZW5zaG90
VG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJTY3JlZW5zaG90VG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViUmVx
dWVzdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIldlYlJlcXVlc3QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zcGVjdGFibGVU
eXBlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siSW5zcGVjdGFibGVUeXBlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJSREZUZXh0
dXJlVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJCUkRGVGV4dHVyZVRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJH
QkRUZXh0dXJlVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJSR0JEVGV4dHVyZVRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkNvbG9yR3JhZGllbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJDb2xvckdyYWRpZW50Il07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkNvbG9yM0dyYWRpZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siQ29sb3IzR3JhZGllbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRmFjdG9yR3JhZGllbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJGYWN0b3JHcmFkaWVudCJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJHcmFkaWVudEhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkdyYWRpZW50SGVscGVyIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlBlcmZDb3VudGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGVyZkNvdW50ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiUmV0cnlTdHJhdGVneSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlJldHJ5U3RyYXRlZ3kiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTG9hZEZpbGVFcnJvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkxvYWRGaWxlRXJyb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiQXV0b1JvdGF0aW9uQmVoYXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBdXRvUm90YXRpb25CZWhhdmlvciJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJCb3VuY2luZ0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQm91bmNpbmdCZWhhdmlvciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmFtaW5nQmVoYXZpb3IiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJGcmFtaW5nQmVoYXZp
b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXR0YWNoVG9Cb3hCZWhhdmlvciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkF0dGFj
aFRvQm94QmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmFkZUluT3V0QmVoYXZp
b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJGYWRlSW5PdXRCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNdWx0aVBv
aW50ZXJTY2FsZUJlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvciJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQb2ludGVyRHJhZ0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9pbnRlckRyYWdCZWhhdmlv
ciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaXhEb2ZEcmFnQmVoYXZpb3IiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTaXhEb2ZE
cmFnQmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhR2Ft
ZXBhZElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0Il07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkFyY1JvdGF0ZUNhbWVyYUtleWJvYXJkTW92ZUlucHV0IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJjUm90YXRlQ2Ft
ZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRl
Q2FtZXJhTW91c2VXaGVlbElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0Il07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJB
cmNSb3RhdGVDYW1lcmFQb2ludGVyc0lucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFy
Y1JvdGF0ZUNhbWVyYVZSRGV2aWNlT3JpZW50YXRpb25JbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFyY1JvdGF0ZUNhbWVyYVZS
RGV2aWNlT3JpZW50YXRpb25JbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGbHlDYW1l
cmFLZXlib2FyZElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJGbHlDYW1lcmFNb3VzZUlucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRmx5Q2FtZXJhTW91c2VJbnB1dCJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJGb2xsb3dDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZv
bGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZv
bGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZvbGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRm9s
bG93Q2FtZXJhUG9pbnRlcnNJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVlQ2Ft
ZXJhRGV2aWNlT3JpZW50YXRpb25JbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklu
cHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmFHYW1lcGFkSW5wdXQiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJG
cmVlQ2FtZXJhR2FtZXBhZElucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1l
cmFLZXlib2FyZE1vdmVJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJGcmVlQ2FtZXJhTW91c2VJbnB1dCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZyZWVDYW1lcmFNb3Vz
ZUlucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1lcmFUb3VjaElucHV0Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RnJlZUNhbWVyYVRvdWNoSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVy
YVZpcnR1YWxKb3lzdGlja0lucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRnJlZUNhbWVyYVZpcnR1YWxKb3lzdGlja0lucHV0Il07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuYWdseXBoQXJjUm90YXRlQ2FtZXJhIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQW5hZ2x5
cGhBcmNSb3RhdGVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5hZ2x5cGhGcmVl
Q2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQW5hZ2x5cGhGcmVlQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFu
YWdseXBoR2FtZXBhZENhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkFuYWdseXBoR2FtZXBhZENhbWVyYSJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJBbmFnbHlwaFVuaXZlcnNhbENhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFuYWdseXBoVW5pdmVyc2Fs
Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Njb3BpY0FyY1JvdGF0ZUNh
bWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlN0ZXJlb3Njb3BpY0FyY1JvdGF0ZUNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTdGVyZW9zY29waWNGcmVlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3RlcmVvc2NvcGljRnJlZUNhbWVyYSJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTdGVyZW9zY29waWNHYW1lcGFkQ2FtZXJhIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3RlcmVv
c2NvcGljR2FtZXBhZENhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGVyZW9zY29w
aWNVbml2ZXJzYWxDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJTdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiVlJDYW1lcmFNZXRyaWNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVlJDYW1lcmFNZXRyaWNzIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGV2aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmEi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlZSRGV2aWNlT3JpZW50YXRpb25GcmVlQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVlJEZXZpY2VPcmllbnRhdGlv
bkZyZWVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVlJEZXZpY2VPcmllbnRhdGlv
bkdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWUkRldmljZU9yaWVudGF0aW9uR2FtZXBhZENhbWVyYSJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJPbkFmdGVyRW50ZXJpbmdWUk9ic2VydmFibGVFdmVudCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk9u
QWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJsZUV2ZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlZSRXhwZXJpZW5jZUhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZSRXhwZXJpZW5jZUhlbHBlciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJXZWJWUkZyZWVDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXZWJWUkZyZWVDYW1lcmEiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiV2ViWFJDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXZWJYUkNhbWVyYSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJXZWJYUkVudGVyRXhpdFVJQnV0dG9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siV2ViWFJFbnRlckV4aXRVSUJ1dHRv
biJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkVudGVyRXhpdFVJT3B0aW9ucyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldl
YlhSRW50ZXJFeGl0VUlPcHRpb25zIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSRW50
ZXJFeGl0VUkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJXZWJYUkVudGVyRXhpdFVJIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldl
YlhSU3RhdGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJXZWJYUlN0YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSRXhw
ZXJpZW5jZUhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIldlYlhSRXhwZXJpZW5jZUhlbHBlciJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJXZWJYUklucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siV2ViWFJJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJXZWJYUkNvbnRyb2xsZXJUZWxlcG9ydGF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siV2ViWFJDb250cm9sbGVyVGVsZXBvcnRh
dGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkNvbnRyb2xsZXJQb2ludGVyU2Vs
ZWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siV2ViWFJDb250cm9sbGVyUG9pbnRlclNlbGVjdGlvbiJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJXZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldlYlhSQ29udHJvbGxlck1v
ZGVsTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSQ29udHJvbGxlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldl
YlhSQ29udHJvbGxlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUk1hbmFnZWRPdXRw
dXRDYW52YXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJXZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiV2ViWFJTZXNzaW9uTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIldlYlhSU2Vzc2lvbk1hbmFnZXIiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiT2N0cmVlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2N0cmVlIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk9jdHJlZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siT2N0cmVlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
T2N0cmVlU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJPY3RyZWVTY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJfT2NjbHVzaW9uRGF0YVN0b3JhZ2UiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfT2NjbHVzaW9uRGF0YVN0b3Jh
Z2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX2ZvcmNlVHJhbnNmb3JtRmVlZGJhY2tUb0J1
bmRsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9mb3JjZVRyYW5zZm9ybUZlZWRiYWNrVG9CdW5kbGUiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiRGF5ZHJlYW1Db250cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRGF5ZHJlYW1Db250cm9sbGVyIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkdlYXJWUkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJHZWFyVlJDb250cm9sbGVyIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdlbmVyaWNDb250cm9sbGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siR2VuZXJpY0NvbnRy
b2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT2N1bHVzVG91Y2hDb250cm9sbGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
T2N1bHVzVG91Y2hDb250cm9sbGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc2VFbmFi
bGVkQ29udHJvbGxlclR5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXJUeXBlIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBvc2VFbmFibGVkQ29udHJvbGxlckhlbHBlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBvc2VFbmFibGVk
Q29udHJvbGxlckhlbHBlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NlRW5hYmxlZENv
bnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJQb3NlRW5hYmxlZENvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiVml2ZUNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWaXZlQ29udHJvbGxlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJXZWJWUkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXZWJWUkNvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiV2luZG93c01vdGlvbkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXaW5kb3dzTW90aW9uQ29udHJvbGxl
ciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaGFkb3dHZW5lcmF0b3IiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTaGFkb3dHZW5l
cmF0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hhZG93R2VuZXJhdG9yU2NlbmVDb21w
b25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJTaGFkb3dHZW5lcmF0b3JTY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJfQmFieWxvbkxvYWRlclJlZ2lzdGVyZWQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfQmFieWxvbkxvYWRlclJlZ2lzdGVy
ZWQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFja2dyb3VuZE1hdGVyaWFsIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFja2dy
b3VuZE1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUk1hdGVyaWFsRGVmaW5l
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlBCUk1hdGVyaWFsRGVmaW5lcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQQlJCYXNl
TWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJQQlJCYXNlTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUEJS
QmFzZVNpbXBsZU1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siUEJSQmFzZVNpbXBsZU1hdGVyaWFsIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlBCUk1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUEJSTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiUEJSTWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBCUk1ldGFsbGljUm91Z2hu
ZXNzTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUEJSU3BlY3VsYXJHbG9zc2lu
ZXNzTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJDb2xvckdyYWRpbmdUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29sb3JHcmFkaW5nVGV4dHVyZSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSYXdDdWJlVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJhd0N1YmVUZXh0dXJl
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJhd1RleHR1cmUzRCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJhd1RleHR1cmUzRCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZyYWN0aW9uVGV4dHVyZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJlZnJhY3Rpb25U
ZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpZGVvVGV4dHVyZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZpZGVvVGV4
dHVyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJIdG1sRWxlbWVudFRleHR1cmUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJIdG1s
RWxlbWVudFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJOb2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5v
ZGVNYXRlcmlhbENvbm5lY3Rpb25Qb2ludCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk5vZGVNYXRlcmlhbENvbm5lY3Rpb25Qb2ludCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWxCbG9jayIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk5vZGVNYXRlcmlh
bEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbERlZmluZXMiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJO
b2RlTWF0ZXJpYWxEZWZpbmVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlh
bCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIk5vZGVNYXRlcmlhbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWxT
eXN0ZW1WYWx1ZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiT3JpZW50YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJPcmllbnRhdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJCZXppZXJDdXJ2ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkJlemllckN1cnZlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkFuZ2xlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQW5nbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjMiIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFyYzIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGF0aDIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQYXRoMiJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQYXRoM0QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJQYXRoM0QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3VydmUz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQ3VydmUzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc2l0aW9uTm9ybWFsVmVydGV4
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUG9zaXRpb25Ob3JtYWxWZXJ0ZXgiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zaXRp
b25Ob3JtYWxUZXh0dXJlVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9zaXRpb25Ob3JtYWxUZXh0dXJlVmVydGV4Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkRyYWNvQ29tcHJlc3Npb24iLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEcmFjb0NvbXByZXNzaW9u
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRpbGVkQm94QnVpbGRlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRpbGVkQm94QnVp
bGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEaXNjQnVpbGRlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRpc2NCdWlsZGVy
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJpYmJvbkJ1aWxkZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJSaWJib25CdWlsZGVy
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhlbWlzcGhlcmVCdWlsZGVyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSGVtaXNwaGVy
ZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG9ydXNLbm90QnVpbGRlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRv
cnVzS25vdEJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWdvbkJ1aWxkZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJQb2x5Z29uQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaGFwZUJ1aWxkZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJTaGFwZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGF0aGVCdWlsZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
TGF0aGVCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRpbGVkUGxhbmVCdWlsZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVGlsZWRQbGFuZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHViZUJ1aWxk
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJUdWJlQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2x5aGVkcm9uQnVp
bGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlBvbHloZWRyb25CdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkljb1Nw
aGVyZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJJY29TcGhlcmVCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkRlY2FsQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkRlY2FsQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJS
ZWNhc3RKU1BsdWdpbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlJlY2FzdEpTUGx1Z2luIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlJlY2FzdEpTQ3Jvd2QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJSZWNhc3RKU0Nyb3dkIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkJveFBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkJveFBhcnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJDb25lUGFydGljbGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29uZVBhcnRpY2xlRW1pdHRlciJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJDeWxpbmRlclBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkN5bGluZGVy
UGFydGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN5bGluZGVyRGlyZWN0
ZWRQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkhlbWlzcGhlcmljUGFydGljbGVFbWl0dGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSGVtaXNw
aGVyaWNQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRQYXJ0
aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJQb2ludFBhcnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTcGhl
cmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDYW5u
b25KU1BsdWdpbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkNhbm5vbkpTUGx1Z2luIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFt
bW9KU1BsdWdpbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkFtbW9KU1BsdWdpbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPaW1v
SlNQbHVnaW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJPaW1vSlNQbHVnaW4iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFBy
b2Nlc3NSZW5kZXJFZmZlY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUG9zdFByb2Nlc3NSZW5k
ZXJQaXBlbGluZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3N0UHJvY2Vzc1JlbmRlclBp
cGVsaW5lTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVD
b21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhEUlRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSERSVG9vbHMiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUGFub3JhbWFUb0N1YmVNYXBUb29scyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBhbm9yYW1hVG9DdWJl
TWFwVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0REU1RleHR1cmVMb2FkZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
RERTVGV4dHVyZUxvYWRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfRU5WVGV4dHVyZUxv
YWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9FTlZUZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9LVFhU
ZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX0tUWFRleHR1cmVMb2FkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiX1RHQVRleHR1cmVMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfVEdBVGV4dHVyZUxvYWRlciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJfQmFzaXNUZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX0Jhc2lzVGV4dHVyZUxvYWRlciJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkN1c3RvbVBy
b2NlZHVyYWxUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vaXNlUHJvY2VkdXJh
bFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJOb2lzZVByb2NlZHVyYWxUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlByb2NlZHVyYWxUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siUHJvY2VkdXJhbFRleHR1cmUiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiUHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlByb2NlZHVyYWxU
ZXh0dXJlU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTXVsdGlwbHlC
bG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIk11bHRpcGx5QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWRkQmxvY2si
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJBZGRCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY2FsZUJsb2NrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGVC
bG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDbGFtcEJsb2NrIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ2xhbXBCbG9jayJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJDcm9zc0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ3Jvc3NCbG9jayJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJEb3RCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRvdEJsb2NrIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlRyYW5zZm9ybUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVHJhbnNmb3JtQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiUmVtYXBCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJlbWFwQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTm9ybWFsaXplQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJOb3JtYWxpemVCbG9jayJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUcmlnb25vbWV0cnlCbG9ja09w
ZXJhdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJpZ29ub21ldHJ5QmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJU
cmlnb25vbWV0cnlCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvck1lcmdlckJs
b2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siQ29sb3JNZXJnZXJCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWZWN0b3JN
ZXJnZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3Rvck1lcmdlckJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkNvbG9yU3BsaXR0ZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbG9yU3BsaXR0ZXJCbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJWZWN0b3JTcGxpdHRlckJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yU3BsaXR0ZXJCbG9jayJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJMZXJwQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMZXJwQmxvY2siXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRGl2aWRlQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEaXZpZGVCbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTdWJ0cmFjdEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3VidHJhY3RCbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTdGVwQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdGVwQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiT3Bwb3NpdGVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIk9wcG9zaXRlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiVmlld0RpcmVjdGlvbkJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmlld0RpcmVjdGlvbkJsb2NrIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkZyZXNuZWxCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkZyZXNuZWxCbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNYXhCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIk1heEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
Ik1pbkJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siTWluQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVy
aWFsT3B0aW1pemVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsT3B0aW1pemVyIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkRlZmF1bHRSZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRlZmF1bHRSZW5kZXJpbmdQaXBlbGlu
ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMZW5z
UmVuZGVyaW5nUGlwZWxpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU1NBTzJSZW5kZXJp
bmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlNTQU8yUmVuZGVyaW5nUGlwZWxpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiU1NBT1JlbmRlcmluZ1BpcGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU1NBT1JlbmRlcmluZ1BpcGVsaW5lIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTdGFuZGFy
ZFJlbmRlcmluZ1BpcGVsaW5lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlcnRleE91dHB1
dEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVmVydGV4T3V0cHV0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm9u
ZXNCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkJvbmVzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zdGFuY2Vz
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJJbnN0YW5jZXNCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNb3JwaFRh
cmdldHNCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIk1vcnBoVGFyZ2V0c0Jsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkxpZ2h0SW5mb3JtYXRpb25CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxpZ2h0SW5mb3JtYXRpb25CbG9jayJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJGcmFnbWVudE91dHB1dEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRnJhZ21lbnRPdXRwdXRCbG9j
ayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbHBoYVRlc3RCbG9jayIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFscGhhVGVzdEJs
b2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkltYWdlUHJvY2Vzc2luZ0Jsb2NrIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siSW1h
Z2VQcm9jZXNzaW5nQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGVydHVyYk5vcm1h
bEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siUGVydHVyYk5vcm1hbEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZv
Z0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRm9nQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGlnaHRCbG9jayIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkxpZ2h0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGV4dHVyZUJsb2NrIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVGV4
dHVyZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlZmxlY3Rpb25UZXh0dXJlQmxv
Y2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJSZWZsZWN0aW9uVGV4dHVyZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIklu
cHV0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJJbnB1dEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGVk
SW5wdXRCbG9ja1R5cGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMiXTsgfSk7CisKKworCisv
KioKKyAqIExlZ2FjeSBzdXBwb3J0LCBkZWZpbmluZyB3aW5kb3cuQkFCWUxPTiAoZ2xvYmFsIHZh
cmlhYmxlKS4KKyAqCisgKiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIFVNRCBtb2R1
bGUuCisgKiBUaGUgZW50cnkgcG9pbnQgZm9yIGEgZnV0dXJlIEVTTSBwYWNrYWdlIHNob3VsZCBi
ZSBpbmRleC50cworICovCit2YXIgZ2xvYmFsT2JqZWN0ID0gKHR5cGVvZiBnbG9iYWwgIT09ICd1
bmRlZmluZWQnKSA/IGdsb2JhbCA6ICgodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpID8g
d2luZG93IDogdW5kZWZpbmVkKTsKK2lmICh0eXBlb2YgZ2xvYmFsT2JqZWN0ICE9PSAidW5kZWZp
bmVkIikgeworICAgIGdsb2JhbE9iamVjdC5CQUJZTE9OID0gQkFCWUxPTjsKKyAgICBnbG9iYWxP
YmplY3QuQkFCWUxPTiA9IGdsb2JhbE9iamVjdC5CQUJZTE9OIHx8IHt9OworICAgIHZhciBCQUJZ
TE9OID0gZ2xvYmFsT2JqZWN0LkJBQllMT047CisgICAgQkFCWUxPTi5EZWJ1ZyA9IEJBQllMT04u
RGVidWcgfHwge307CisgICAgdmFyIGtleXMgPSBbXTsKKyAgICBmb3IgKHZhciBrZXkgaW4gX0Rl
YnVnX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pIHsKKyAgICAgICAgQkFCWUxP
Ti5EZWJ1Z1trZXldID0gX0RlYnVnX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
a2V5XTsKKyAgICAgICAga2V5cy5wdXNoKGtleSk7CisgICAgfQorICAgIGZvciAodmFyIGtleSBp
biBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXykgeworICAgICAgICBCQUJZTE9O
W2tleV0gPSBfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1trZXldOworICAgIH0K
K30KKwordmFyIERlYnVnID0geworICAgIEF4ZXNWaWV3ZXI6IF9EZWJ1Z19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBeGVzVmlld2VyIl0sCisgICAgQm9uZUF4ZXNWaWV3ZXI6
IF9EZWJ1Z19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJCb25lQXhlc1ZpZXdl
ciJdLAorICAgIFBoeXNpY3NWaWV3ZXI6IF9EZWJ1Z19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJQaHlzaWNzVmlld2VyIl0sCisgICAgU2tlbGV0b25WaWV3ZXI6IF9EZWJ1Z19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTa2VsZXRvblZpZXdlciJdLAorfTsK
KworLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKHRoaXMsIF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vLi4vLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMg
Ki8gIi4uL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIikpKQorCisvKioq
LyB9KSwKKworLyoqKi8gIi4vTGVuc0ZsYXJlcy9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTGVuc0ZsYXJlcy9pbmRleC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBM
ZW5zRmxhcmUsIExlbnNGbGFyZVN5c3RlbSwgTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQg
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sZW5zRmxhcmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
bGVuc0ZsYXJlICovICIuL0xlbnNGbGFyZXMvbGVuc0ZsYXJlLnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkxlbnNGbGFyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xlbnNGbGFyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJMZW5zRmxhcmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbGVuc0ZsYXJlU3lzdGVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xlbnNGbGFyZVN5c3RlbSAqLyAiLi9MZW5zRmxhcmVz
L2xlbnNGbGFyZVN5c3RlbS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zRmxhcmVTeXN0ZW0i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9sZW5zRmxhcmVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTGVuc0ZsYXJlU3lzdGVtIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2xlbnNGbGFyZVN5c3RlbVNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xlbnNGbGFyZVN5c3RlbVNjZW5l
Q29tcG9uZW50ICovICIuL0xlbnNGbGFyZXMvbGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9sZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudCJdOyB9
KTsKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9MZW5zRmxhcmVzL2xlbnNGbGFy
ZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L0xlbnNGbGFyZXMvbGVuc0ZsYXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBMZW5zRmxhcmUgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVuc0ZsYXJlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBMZW5zRmxhcmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFs
cy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2Nv
bnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworCisKKworLyoqCisgKiBUaGlz
IHJlcHJlc2VudHMgb25lIG9mIHRoZSBsZW5zIGVmZmVjdCBpbiBhIGBsZW5zRmxhcmVTeXN0ZW1g
LgorICogSXQgY29udHJvbHMgb25lIG9mIHRoZSBpbmRpdml1YWwgdGV4dHVyZSB1c2VkIGluIHRo
ZSBlZmZlY3QuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3Rv
X3VzZV9sZW5zX2ZsYXJlcworICovCit2YXIgTGVuc0ZsYXJlID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBMZW5zIEZsYXJl
LgorICAgICAqIFRoaXMgcmVwcmVzZW50cyBvbmUgb2YgdGhlIGxlbnMgZWZmZWN0IGluIGEgYGxl
bnNGbGFyZVN5c3RlbWAuCisgICAgICogSXQgY29udHJvbHMgb25lIG9mIHRoZSBpbmRpdml1YWwg
dGV4dHVyZSB1c2VkIGluIHRoZSBlZmZlY3QuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnls
b25qcy5jb20vaG93X3RvL2hvd190b191c2VfbGVuc19mbGFyZXMKKyAgICAgKiBAcGFyYW0gc2l6
ZSBEZWZpbmUgdGhlIHNpemUgb2YgdGhlIGxlbnMgZmxhcmUgaW4gdGhlIHN5c3RlbSAoYSBmbG9h
dGluZyB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEpCisgICAgICogQHBhcmFtIHBvc2l0aW9uIERlZmlu
ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGxlbnMgZmxhcmUgaW4gdGhlIHN5c3RlbS4gKGEgZmxvYXRp
bmcgdmFsdWUgYmV0d2VlbiAtMSBhbmQgMSkuIEEgdmFsdWUgb2YgMCBpcyBsb2NhdGVkIG9uIHRo
ZSBlbWl0dGVyLiBBIHZhbHVlIGdyZWF0ZXIgdGhhbiAwIGlzIGJleW9uZCB0aGUgZW1pdHRlciBh
bmQgYSB2YWx1ZSBsZXNzZXIgdGhhbiAwIGlzIGJlaGluZC4KKyAgICAgKiBAcGFyYW0gY29sb3Ig
RGVmaW5lIHRoZSBsZW5zIGNvbG9yCisgICAgICogQHBhcmFtIGltZ1VybCBEZWZpbmUgdGhlIGxl
bnMgdGV4dHVyZSB1cmwKKyAgICAgKiBAcGFyYW0gc3lzdGVtIERlZmluZSB0aGUgYGxlbnNGbGFy
ZVN5c3RlbWAgdGhpcyBmbGFyZSBpcyBwYXJ0IG9mCisgICAgICovCisgICAgZnVuY3Rpb24gTGVu
c0ZsYXJlKAorICAgIC8qKgorICAgICAqIERlZmluZSB0aGUgc2l6ZSBvZiB0aGUgbGVucyBmbGFy
ZSBpbiB0aGUgc3lzdGVtIChhIGZsb2F0aW5nIHZhbHVlIGJldHdlZW4gMCBhbmQgMSkKKyAgICAg
Ki8KKyAgICBzaXplLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmUgdGhlIHBvc2l0aW9uIG9mIHRo
ZSBsZW5zIGZsYXJlIGluIHRoZSBzeXN0ZW0uIChhIGZsb2F0aW5nIHZhbHVlIGJldHdlZW4gLTEg
YW5kIDEpLiBBIHZhbHVlIG9mIDAgaXMgbG9jYXRlZCBvbiB0aGUgZW1pdHRlci4gQSB2YWx1ZSBn
cmVhdGVyIHRoYW4gMCBpcyBiZXlvbmQgdGhlIGVtaXR0ZXIgYW5kIGEgdmFsdWUgbGVzc2VyIHRo
YW4gMCBpcyBiZWhpbmQuCisgICAgICovCisgICAgcG9zaXRpb24sIGNvbG9yLCBpbWdVcmwsIHN5
c3RlbSkgeworICAgICAgICB0aGlzLnNpemUgPSBzaXplOworICAgICAgICB0aGlzLnBvc2l0aW9u
ID0gcG9zaXRpb247CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIGFscGhhIG1v
ZGUgdG8gcmVuZGVyIHRoaXMgcGFydGljdWxhciBsZW5zLgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5hbHBoYU1vZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siQ29uc3RhbnRzIl0uQUxQSEFfT05FT05FOworICAgICAgICB0aGlzLmNvbG9yID0g
Y29sb3IgfHwgbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkNvbG9yMyJdKDEsIDEsIDEpOworICAgICAgICB0aGlzLnRleHR1cmUgPSBpbWdVcmwgPyBu
ZXcgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlRleHR1cmUiXShpbWdVcmwsIHN5c3RlbS5nZXRTY2VuZSgpLCB0cnVlKSA6IG51bGw7Cisg
ICAgICAgIHRoaXMuX3N5c3RlbSA9IHN5c3RlbTsKKyAgICAgICAgc3lzdGVtLmxlbnNGbGFyZXMu
cHVzaCh0aGlzKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBMZW5zIEZs
YXJlLgorICAgICAqIFRoaXMgcmVwcmVzZW50cyBvbmUgb2YgdGhlIGxlbnMgZWZmZWN0IGluIGEg
YGxlbnNGbGFyZVN5c3RlbWAuCisgICAgICogSXQgY29udHJvbHMgb25lIG9mIHRoZSBpbmRpdml1
YWwgdGV4dHVyZSB1c2VkIGluIHRoZSBlZmZlY3QuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfbGVuc19mbGFyZXMKKyAgICAgKiBAcGFyYW0g
c2l6ZSBEZWZpbmUgdGhlIHNpemUgb2YgdGhlIGxlbnMgZmxhcmUgKGEgZmxvYXRpbmcgdmFsdWUg
YmV0d2VlbiAwIGFuZCAxKQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBEZWZpbmUgdGhlIHBvc2l0
aW9uIG9mIHRoZSBsZW5zIGZsYXJlIGluIHRoZSBzeXN0ZW0uIChhIGZsb2F0aW5nIHZhbHVlIGJl
dHdlZW4gLTEgYW5kIDEpLiBBIHZhbHVlIG9mIDAgaXMgbG9jYXRlZCBvbiB0aGUgZW1pdHRlci4g
QSB2YWx1ZSBncmVhdGVyIHRoYW4gMCBpcyBiZXlvbmQgdGhlIGVtaXR0ZXIgYW5kIGEgdmFsdWUg
bGVzc2VyIHRoYW4gMCBpcyBiZWhpbmQuCisgICAgICogQHBhcmFtIGNvbG9yIERlZmluZSB0aGUg
bGVucyBjb2xvcgorICAgICAqIEBwYXJhbSBpbWdVcmwgRGVmaW5lIHRoZSBsZW5zIHRleHR1cmUg
dXJsCisgICAgICogQHBhcmFtIHN5c3RlbSBEZWZpbmUgdGhlIGBsZW5zRmxhcmVTeXN0ZW1gIHRo
aXMgZmxhcmUgaXMgcGFydCBvZgorICAgICAqIEByZXR1cm5zIFRoZSBuZXdseSBjcmVhdGVkIExl
bnMgRmxhcmUKKyAgICAgKi8KKyAgICBMZW5zRmxhcmUuQWRkRmxhcmUgPSBmdW5jdGlvbiAoc2l6
ZSwgcG9zaXRpb24sIGNvbG9yLCBpbWdVcmwsIHN5c3RlbSkgeworICAgICAgICByZXR1cm4gbmV3
IExlbnNGbGFyZShzaXplLCBwb3NpdGlvbiwgY29sb3IsIGltZ1VybCwgc3lzdGVtKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIERpc3Bvc2UgYW5kIHJlbGVhc2UgdGhlIGxlbnMgZmxhcmUgd2l0
aCBpdHMgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgICAgICovCisgICAgTGVuc0ZsYXJlLnByb3Rv
dHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy50ZXh0dXJlKSB7
CisgICAgICAgICAgICB0aGlzLnRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAg
IC8vIFJlbW92ZSBmcm9tIHNjZW5lCisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3N5c3RlbS5s
ZW5zRmxhcmVzLmluZGV4T2YodGhpcyk7CisgICAgICAgIHRoaXMuX3N5c3RlbS5sZW5zRmxhcmVz
LnNwbGljZShpbmRleCwgMSk7CisgICAgfTsKKyAgICByZXR1cm4gTGVuc0ZsYXJlOworfSgpKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9MZW5zRmxhcmVzL2xlbnNGbGFyZVN5c3RlbS50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL0xlbnNGbGFyZXMvbGVuc0ZsYXJlU3lzdGVtLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBMZW5zRmxh
cmVTeXN0ZW0gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVuc0ZsYXJl
U3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBMZW5zRmxhcmVTeXN0ZW07IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3Rvb2xzICovICIuL01pc2MvdG9v
bHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnNjYWxhciAqLyAi
Li9NYXRocy9tYXRoLnNjYWxhci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5l
U3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVz
aGVzL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9DdWxsaW5nL3JheSAqLyAiLi9DdWxsaW5nL3JheS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9t
YXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbGVuc0ZsYXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2xlbnNGbGFyZSAqLyAiLi9MZW5zRmxhcmVzL2xlbnNGbGFyZS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5l
cy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfU2hhZGVyc19sZW5zRmxhcmVfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvbGVuc0ZsYXJl
LmZyYWdtZW50ICovICIuL1NoYWRlcnMvbGVuc0ZsYXJlLmZyYWdtZW50LnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfbGVuc0ZsYXJlX3ZlcnRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvbGVu
c0ZsYXJlLnZlcnRleCAqLyAiLi9TaGFkZXJzL2xlbnNGbGFyZS52ZXJ0ZXgudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGV2VG9vbHMgKi8gIi4v
TWlzYy9kZXZUb29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisK
KworCisKKworCisKKworCisKKworCisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIGEgTGVucyBG
bGFyZSBTeXN0ZW0gb3IgdGhlIHNoaW55IGVmZmVjdCBjcmVhdGVkIGJ5IHRoZSBsaWdodCByZWZs
ZWN0aW9uIG9uIHRoZSAgY2FtZXJhIGxlbnNlcy4KKyAqIEl0IGlzIHVzdWFsbHkgY29tcG9zZWQg
b2Ygc2V2ZXJhbCBgbGVuc0ZsYXJlYC4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9ob3dfdG9fdXNlX2xlbnNfZmxhcmVzCisgKi8KK3ZhciBMZW5zRmxhcmVTeXN0ZW0g
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlh
dGVzIGEgbGVucyBmbGFyZSBzeXN0ZW0uCisgICAgICogVGhpcyByZXByZXNlbnRzIGEgTGVucyBG
bGFyZSBTeXN0ZW0gb3IgdGhlIHNoaW55IGVmZmVjdCBjcmVhdGVkIGJ5IHRoZSBsaWdodCByZWZs
ZWN0aW9uIG9uIHRoZSAgY2FtZXJhIGxlbnNlcy4KKyAgICAgKiBJdCBpcyB1c3VhbGx5IGNvbXBv
c2VkIG9mIHNldmVyYWwgYGxlbnNGbGFyZWAuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnls
b25qcy5jb20vaG93X3RvL2hvd190b191c2VfbGVuc19mbGFyZXMKKyAgICAgKiBAcGFyYW0gbmFt
ZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGxlbnMgZmxhcmUgc3lzdGVtIGluIHRoZSBzY2VuZQor
ICAgICAqIEBwYXJhbSBlbWl0dGVyIERlZmluZSB0aGUgc291cmNlICh0aGUgZW1pdHRlcikgb2Yg
dGhlIGxlbnMgZmxhcmVzIChpdCBjYW4gYmUgYSBjYW1lcmEsIGEgbGlnaHQgb3IgYSBtZXNoKS4K
KyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgbGVucyBmbGFyZSBzeXN0
ZW0gYmVsb25ncyB0bworICAgICAqLworICAgIGZ1bmN0aW9uIExlbnNGbGFyZVN5c3RlbSgKKyAg
ICAvKioKKyAgICAgKiBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGxlbnMgZmxhcmUgc3lzdGVtCisg
ICAgICovCisgICAgbmFtZSwgZW1pdHRlciwgc2NlbmUpIHsKKyAgICAgICAgdGhpcy5uYW1lID0g
bmFtZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExpc3Qgb2YgbGVucyBmbGFyZXMgdXNlZCBp
biB0aGlzIHN5c3RlbS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubGVuc0ZsYXJlcyA9IG5l
dyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGEgbGltaXQgZnJvbSB0
aGUgYm9yZGVyIHRoZSBsZW5zIGZsYXJlIGNhbiBiZSB2aXNpYmxlLgorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5ib3JkZXJMaW1pdCA9IDMwMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZSBhIHZpZXdwb3J0IGJvcmRlciB3ZSBkbyBub3Qgd2FudCB0byBzZWUgdGhlIGxlbnMgZmxh
cmUgaW4uCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZpZXdwb3J0Qm9yZGVyID0gMDsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFJlc3RyaWN0cyB0aGUgcmVuZGVyaW5nIG9mIHRoZSBlZmZl
Y3QgdG8gb25seSB0aGUgY2FtZXJhIHJlbmRlcmluZyB0aGlzIGxheWVyIG1hc2suCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmxheWVyTWFzayA9IDB4MEZGRkZGRkY7CisgICAgICAgIHRoaXMu
X3ZlcnRleEJ1ZmZlcnMgPSB7fTsKKyAgICAgICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTsKKyAg
ICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8fCBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7Cisg
ICAgICAgIExlbnNGbGFyZVN5c3RlbS5fU2NlbmVDb21wb25lbnRJbml0aWFsaXphdGlvbih0aGlz
Ll9zY2VuZSk7CisgICAgICAgIHRoaXMuX2VtaXR0ZXIgPSBlbWl0dGVyOworICAgICAgICB0aGlz
LmlkID0gbmFtZTsKKyAgICAgICAgc2NlbmUubGVuc0ZsYXJlU3lzdGVtcy5wdXNoKHRoaXMpOwor
ICAgICAgICB0aGlzLm1lc2hlc1NlbGVjdGlvblByZWRpY2F0ZSA9IGZ1bmN0aW9uIChtKSB7IHJl
dHVybiAoc2NlbmUuYWN0aXZlQ2FtZXJhICYmIG0ubWF0ZXJpYWwgJiYgbS5pc1Zpc2libGUgJiYg
bS5pc0VuYWJsZWQoKSAmJiBtLmlzQmxvY2tlciAmJiAoKG0ubGF5ZXJNYXNrICYgc2NlbmUuYWN0
aXZlQ2FtZXJhLmxheWVyTWFzaykgIT0gMCkpOyB9OworICAgICAgICB2YXIgZW5naW5lID0gc2Nl
bmUuZ2V0RW5naW5lKCk7CisgICAgICAgIC8vIFZCTworICAgICAgICB2YXIgdmVydGljZXMgPSBb
XTsKKyAgICAgICAgdmVydGljZXMucHVzaCgxLCAxKTsKKyAgICAgICAgdmVydGljZXMucHVzaCgt
MSwgMSk7CisgICAgICAgIHZlcnRpY2VzLnB1c2goLTEsIC0xKTsKKyAgICAgICAgdmVydGljZXMu
cHVzaCgxLCAtMSk7CisgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZlcnNbX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5k
XSA9IG5ldyBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0
ZXhCdWZmZXIiXShlbmdpbmUsIHZlcnRpY2VzLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIGZhbHNlLCBmYWxz
ZSwgMik7CisgICAgICAgIC8vIEluZGljZXMKKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAg
ICAgICAgaW5kaWNlcy5wdXNoKDApOworICAgICAgICBpbmRpY2VzLnB1c2goMSk7CisgICAgICAg
IGluZGljZXMucHVzaCgyKTsKKyAgICAgICAgaW5kaWNlcy5wdXNoKDApOworICAgICAgICBpbmRp
Y2VzLnB1c2goMik7CisgICAgICAgIGluZGljZXMucHVzaCgzKTsKKyAgICAgICAgdGhpcy5faW5k
ZXhCdWZmZXIgPSBlbmdpbmUuY3JlYXRlSW5kZXhCdWZmZXIoaW5kaWNlcyk7CisgICAgICAgIC8v
IEVmZmVjdHMKKyAgICAgICAgdGhpcy5fZWZmZWN0ID0gZW5naW5lLmNyZWF0ZUVmZmVjdCgibGVu
c0ZsYXJlIiwgW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZl
cnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0sIFsiY29sb3IiLCAidmlld3BvcnRNYXRyaXgiXSwg
WyJ0ZXh0dXJlU2FtcGxlciJdLCAiIik7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShMZW5zRmxhcmVTeXN0ZW0ucHJvdG90eXBlLCAiaXNFbmFibGVkIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogRGVmaW5lIGlmIHRoZSBsZW5zIGZsYXJlIHN5c3RlbSBpcyBlbmFibGVkLgor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5faXNFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faXNFbmFibGVkID0gdmFsdWU7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIC8qKgorICAgICAqIEdldCB0aGUgc2NlbmUgdGhlIGVmZmVjdHMgYmVsb25n
cyB0by4KKyAgICAgKiBAcmV0dXJucyB0aGUgc2NlbmUgaG9sZGluZyB0aGUgbGVucyBmbGFyZSBz
eXN0ZW0KKyAgICAgKi8KKyAgICBMZW5zRmxhcmVTeXN0ZW0ucHJvdG90eXBlLmdldFNjZW5lID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fc2NlbmU7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXQgdGhlIGVtaXR0ZXIgb2YgdGhlIGxlbnMgZmxhcmUgc3lzdGVtLgorICAg
ICAqIEl0IGRlZmluZXMgdGhlIHNvdXJjZSBvZiB0aGUgbGVucyBmbGFyZXMgKGl0IGNhbiBiZSBh
IGNhbWVyYSwgYSBsaWdodCBvciBhIG1lc2gpLgorICAgICAqIEByZXR1cm5zIHRoZSBlbWl0dGVy
IG9mIHRoZSBsZW5zIGZsYXJlIHN5c3RlbQorICAgICAqLworICAgIExlbnNGbGFyZVN5c3RlbS5w
cm90b3R5cGUuZ2V0RW1pdHRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2VtaXR0ZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGVtaXR0ZXIgb2YgdGhl
IGxlbnMgZmxhcmUgc3lzdGVtLgorICAgICAqIEl0IGRlZmluZXMgdGhlIHNvdXJjZSBvZiB0aGUg
bGVucyBmbGFyZXMgKGl0IGNhbiBiZSBhIGNhbWVyYSwgYSBsaWdodCBvciBhIG1lc2gpLgorICAg
ICAqIEBwYXJhbSBuZXdFbWl0dGVyIERlZmluZSB0aGUgbmV3IGVtaXR0ZXIgb2YgdGhlIHN5c3Rl
bQorICAgICAqLworICAgIExlbnNGbGFyZVN5c3RlbS5wcm90b3R5cGUuc2V0RW1pdHRlciA9IGZ1
bmN0aW9uIChuZXdFbWl0dGVyKSB7CisgICAgICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXdFbWl0dGVy
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBsZW5zIGZsYXJlIHN5c3RlbSBlbWl0
dGVyIHBvc2l0aW9uLgorICAgICAqIFRoZSBlbWl0dGVyIGRlZmluZXMgdGhlIHNvdXJjZSBvZiB0
aGUgbGVucyBmbGFyZXMgKGl0IGNhbiBiZSBhIGNhbWVyYSwgYSBsaWdodCBvciBhIG1lc2gpLgor
ICAgICAqIEByZXR1cm5zIHRoZSBwb3NpdGlvbgorICAgICAqLworICAgIExlbnNGbGFyZVN5c3Rl
bS5wcm90b3R5cGUuZ2V0RW1pdHRlclBvc2l0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fZW1pdHRlci5nZXRBYnNvbHV0ZVBvc2l0aW9uID8gdGhpcy5fZW1pdHRlci5n
ZXRBYnNvbHV0ZVBvc2l0aW9uKCkgOiB0aGlzLl9lbWl0dGVyLnBvc2l0aW9uOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIExlbnNGbGFyZVN5c3RlbS5wcm90
b3R5cGUuY29tcHV0ZUVmZmVjdGl2ZVBvc2l0aW9uID0gZnVuY3Rpb24gKGdsb2JhbFZpZXdwb3J0
KSB7CisgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0RW1pdHRlclBvc2l0aW9uKCk7Cisg
ICAgICAgIHBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlZlY3RvcjMiXS5Qcm9qZWN0KHBvc2l0aW9uLCBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uSWRlbnRpdHkoKSwgdGhpcy5f
c2NlbmUuZ2V0VHJhbnNmb3JtTWF0cml4KCksIGdsb2JhbFZpZXdwb3J0KTsKKyAgICAgICAgdGhp
cy5fcG9zaXRpb25YID0gcG9zaXRpb24ueDsKKyAgICAgICAgdGhpcy5fcG9zaXRpb25ZID0gcG9z
aXRpb24ueTsKKyAgICAgICAgcG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzKHRoaXMu
Z2V0RW1pdHRlclBvc2l0aW9uKCksIHRoaXMuX3NjZW5lLmdldFZpZXdNYXRyaXgoKSk7CisgICAg
ICAgIGlmICh0aGlzLnZpZXdwb3J0Qm9yZGVyID4gMCkgeworICAgICAgICAgICAgZ2xvYmFsVmll
d3BvcnQueCAtPSB0aGlzLnZpZXdwb3J0Qm9yZGVyOworICAgICAgICAgICAgZ2xvYmFsVmlld3Bv
cnQueSAtPSB0aGlzLnZpZXdwb3J0Qm9yZGVyOworICAgICAgICAgICAgZ2xvYmFsVmlld3BvcnQu
d2lkdGggKz0gdGhpcy52aWV3cG9ydEJvcmRlciAqIDI7CisgICAgICAgICAgICBnbG9iYWxWaWV3
cG9ydC5oZWlnaHQgKz0gdGhpcy52aWV3cG9ydEJvcmRlciAqIDI7CisgICAgICAgICAgICBwb3Np
dGlvbi54ICs9IHRoaXMudmlld3BvcnRCb3JkZXI7CisgICAgICAgICAgICBwb3NpdGlvbi55ICs9
IHRoaXMudmlld3BvcnRCb3JkZXI7CisgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblggKz0gdGhp
cy52aWV3cG9ydEJvcmRlcjsKKyAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWSArPSB0aGlzLnZp
ZXdwb3J0Qm9yZGVyOworICAgICAgICB9CisgICAgICAgIGlmIChwb3NpdGlvbi56ID4gMCkgewor
ICAgICAgICAgICAgaWYgKCh0aGlzLl9wb3NpdGlvblggPiBnbG9iYWxWaWV3cG9ydC54KSAmJiAo
dGhpcy5fcG9zaXRpb25YIDwgZ2xvYmFsVmlld3BvcnQueCArIGdsb2JhbFZpZXdwb3J0LndpZHRo
KSkgeworICAgICAgICAgICAgICAgIGlmICgodGhpcy5fcG9zaXRpb25ZID4gZ2xvYmFsVmlld3Bv
cnQueSkgJiYgKHRoaXMuX3Bvc2l0aW9uWSA8IGdsb2JhbFZpZXdwb3J0LnkgKyBnbG9iYWxWaWV3
cG9ydC5oZWlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICov
CisgICAgTGVuc0ZsYXJlU3lzdGVtLnByb3RvdHlwZS5faXNWaXNpYmxlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCB8fCAhdGhpcy5fc2NlbmUuYWN0aXZlQ2Ft
ZXJhKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IGVtaXR0ZXJQb3NpdGlvbiA9IHRoaXMuZ2V0RW1pdHRlclBvc2l0aW9uKCk7CisgICAgICAgIHZh
ciBkaXJlY3Rpb24gPSBlbWl0dGVyUG9zaXRpb24uc3VidHJhY3QodGhpcy5fc2NlbmUuYWN0aXZl
Q2FtZXJhLmdsb2JhbFBvc2l0aW9uKTsKKyAgICAgICAgdmFyIGRpc3RhbmNlID0gZGlyZWN0aW9u
Lmxlbmd0aCgpOworICAgICAgICBkaXJlY3Rpb24ubm9ybWFsaXplKCk7CisgICAgICAgIHZhciBy
YXkgPSBuZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlJheSJd
KHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5nbG9iYWxQb3NpdGlvbiwgZGlyZWN0aW9uKTsKKyAg
ICAgICAgdmFyIHBpY2tJbmZvID0gdGhpcy5fc2NlbmUucGlja1dpdGhSYXkocmF5LCB0aGlzLm1l
c2hlc1NlbGVjdGlvblByZWRpY2F0ZSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiAhcGlja0luZm8g
fHwgIXBpY2tJbmZvLmhpdCB8fCBwaWNrSW5mby5kaXN0YW5jZSA+IGRpc3RhbmNlOworICAgIH07
CisgICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIExlbnNGbGFyZVN5c3RlbS5w
cm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX2VmZmVj
dC5pc1JlYWR5KCkgfHwgIXRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2Vu
ZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgdmFyIHZpZXdwb3J0ID0gdGhpcy5fc2NlbmUuYWN0aXZl
Q2FtZXJhLnZpZXdwb3J0OworICAgICAgICB2YXIgZ2xvYmFsVmlld3BvcnQgPSB2aWV3cG9ydC50
b0dsb2JhbChlbmdpbmUuZ2V0UmVuZGVyV2lkdGgodHJ1ZSksIGVuZ2luZS5nZXRSZW5kZXJIZWln
aHQodHJ1ZSkpOworICAgICAgICAvLyBQb3NpdGlvbgorICAgICAgICBpZiAoIXRoaXMuY29tcHV0
ZUVmZmVjdGl2ZVBvc2l0aW9uKGdsb2JhbFZpZXdwb3J0KSkgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIFZpc2liaWxpdHkKKyAgICAgICAgaWYgKCF0
aGlzLl9pc1Zpc2libGUoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIC8vIEludGVuc2l0eQorICAgICAgICB2YXIgYXdheVg7CisgICAgICAgIHZhciBh
d2F5WTsKKyAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9uWCA8IHRoaXMuYm9yZGVyTGltaXQgKyBn
bG9iYWxWaWV3cG9ydC54KSB7CisgICAgICAgICAgICBhd2F5WCA9IHRoaXMuYm9yZGVyTGltaXQg
KyBnbG9iYWxWaWV3cG9ydC54IC0gdGhpcy5fcG9zaXRpb25YOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHRoaXMuX3Bvc2l0aW9uWCA+IGdsb2JhbFZpZXdwb3J0LnggKyBnbG9iYWxWaWV3
cG9ydC53aWR0aCAtIHRoaXMuYm9yZGVyTGltaXQpIHsKKyAgICAgICAgICAgIGF3YXlYID0gdGhp
cy5fcG9zaXRpb25YIC0gZ2xvYmFsVmlld3BvcnQueCAtIGdsb2JhbFZpZXdwb3J0LndpZHRoICsg
dGhpcy5ib3JkZXJMaW1pdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGF3YXlYID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcG9zaXRpb25ZIDwgdGhp
cy5ib3JkZXJMaW1pdCArIGdsb2JhbFZpZXdwb3J0LnkpIHsKKyAgICAgICAgICAgIGF3YXlZID0g
dGhpcy5ib3JkZXJMaW1pdCArIGdsb2JhbFZpZXdwb3J0LnkgLSB0aGlzLl9wb3NpdGlvblk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5fcG9zaXRpb25ZID4gZ2xvYmFsVmlld3Bv
cnQueSArIGdsb2JhbFZpZXdwb3J0LmhlaWdodCAtIHRoaXMuYm9yZGVyTGltaXQpIHsKKyAgICAg
ICAgICAgIGF3YXlZID0gdGhpcy5fcG9zaXRpb25ZIC0gZ2xvYmFsVmlld3BvcnQueSAtIGdsb2Jh
bFZpZXdwb3J0LmhlaWdodCArIHRoaXMuYm9yZGVyTGltaXQ7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBhd2F5WSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGF3
YXkgPSAoYXdheVggPiBhd2F5WSkgPyBhd2F5WCA6IGF3YXlZOworICAgICAgICBhd2F5IC09IHRo
aXMudmlld3BvcnRCb3JkZXI7CisgICAgICAgIGlmIChhd2F5ID4gdGhpcy5ib3JkZXJMaW1pdCkg
eworICAgICAgICAgICAgYXdheSA9IHRoaXMuYm9yZGVyTGltaXQ7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIGludGVuc2l0eSA9IDEuMCAtIF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5DbGFtcChhd2F5IC8gdGhpcy5ib3JkZXJMaW1pdCwg
MCwgMSk7CisgICAgICAgIGlmIChpbnRlbnNpdHkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGludGVuc2l0eSA+IDEuMCkgeworICAgICAg
ICAgICAgaW50ZW5zaXR5ID0gMS4wOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnZpZXdw
b3J0Qm9yZGVyID4gMCkgeworICAgICAgICAgICAgZ2xvYmFsVmlld3BvcnQueCArPSB0aGlzLnZp
ZXdwb3J0Qm9yZGVyOworICAgICAgICAgICAgZ2xvYmFsVmlld3BvcnQueSArPSB0aGlzLnZpZXdw
b3J0Qm9yZGVyOworICAgICAgICAgICAgZ2xvYmFsVmlld3BvcnQud2lkdGggLT0gdGhpcy52aWV3
cG9ydEJvcmRlciAqIDI7CisgICAgICAgICAgICBnbG9iYWxWaWV3cG9ydC5oZWlnaHQgLT0gdGhp
cy52aWV3cG9ydEJvcmRlciAqIDI7CisgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblggLT0gdGhp
cy52aWV3cG9ydEJvcmRlcjsKKyAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWSAtPSB0aGlzLnZp
ZXdwb3J0Qm9yZGVyOworICAgICAgICB9CisgICAgICAgIC8vIFBvc2l0aW9uCisgICAgICAgIHZh
ciBjZW50ZXJYID0gZ2xvYmFsVmlld3BvcnQueCArIGdsb2JhbFZpZXdwb3J0LndpZHRoIC8gMjsK
KyAgICAgICAgdmFyIGNlbnRlclkgPSBnbG9iYWxWaWV3cG9ydC55ICsgZ2xvYmFsVmlld3BvcnQu
aGVpZ2h0IC8gMjsKKyAgICAgICAgdmFyIGRpc3RYID0gY2VudGVyWCAtIHRoaXMuX3Bvc2l0aW9u
WDsKKyAgICAgICAgdmFyIGRpc3RZID0gY2VudGVyWSAtIHRoaXMuX3Bvc2l0aW9uWTsKKyAgICAg
ICAgLy8gRWZmZWN0cworICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KHRoaXMuX2VmZmVjdCk7
CisgICAgICAgIGVuZ2luZS5zZXRTdGF0ZShmYWxzZSk7CisgICAgICAgIGVuZ2luZS5zZXREZXB0
aEJ1ZmZlcihmYWxzZSk7CisgICAgICAgIC8vIFZCT3MKKyAgICAgICAgZW5naW5lLmJpbmRCdWZm
ZXJzKHRoaXMuX3ZlcnRleEJ1ZmZlcnMsIHRoaXMuX2luZGV4QnVmZmVyLCB0aGlzLl9lZmZlY3Qp
OworICAgICAgICAvLyBGbGFyZXMKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IHRoaXMubGVuc0ZsYXJlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBmbGFy
ZSA9IHRoaXMubGVuc0ZsYXJlc1tpbmRleF07CisgICAgICAgICAgICBpZiAoZmxhcmUudGV4dHVy
ZSAmJiAhZmxhcmUudGV4dHVyZS5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZ2luZS5zZXRBbHBoYU1vZGUoZmxhcmUu
YWxwaGFNb2RlKTsKKyAgICAgICAgICAgIHZhciB4ID0gY2VudGVyWCAtIChkaXN0WCAqIGZsYXJl
LnBvc2l0aW9uKTsKKyAgICAgICAgICAgIHZhciB5ID0gY2VudGVyWSAtIChkaXN0WSAqIGZsYXJl
LnBvc2l0aW9uKTsKKyAgICAgICAgICAgIHZhciBjdyA9IGZsYXJlLnNpemU7CisgICAgICAgICAg
ICB2YXIgY2ggPSBmbGFyZS5zaXplICogZW5naW5lLmdldEFzcGVjdFJhdGlvKHRoaXMuX3NjZW5l
LmFjdGl2ZUNhbWVyYSwgdHJ1ZSk7CisgICAgICAgICAgICB2YXIgY3ggPSAyICogKHggLyAoZ2xv
YmFsVmlld3BvcnQud2lkdGggKyBnbG9iYWxWaWV3cG9ydC54ICogMikpIC0gMS4wOworICAgICAg
ICAgICAgdmFyIGN5ID0gMS4wIC0gMiAqICh5IC8gKGdsb2JhbFZpZXdwb3J0LmhlaWdodCArIGds
b2JhbFZpZXdwb3J0LnkgKiAyKSk7CisgICAgICAgICAgICB2YXIgdmlld3BvcnRNYXRyaXggPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0u
RnJvbVZhbHVlcyhjdyAvIDIsIDAsIDAsIDAsIDAsIGNoIC8gMiwgMCwgMCwgMCwgMCwgMSwgMCwg
Y3gsIGN5LCAwLCAxKTsKKyAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRNYXRyaXgoInZpZXdw
b3J0TWF0cml4Iiwgdmlld3BvcnRNYXRyaXgpOworICAgICAgICAgICAgLy8gVGV4dHVyZQorICAg
ICAgICAgICAgdGhpcy5fZWZmZWN0LnNldFRleHR1cmUoInRleHR1cmVTYW1wbGVyIiwgZmxhcmUu
dGV4dHVyZSk7CisgICAgICAgICAgICAvLyBDb2xvcgorICAgICAgICAgICAgdGhpcy5fZWZmZWN0
LnNldEZsb2F0NCgiY29sb3IiLCBmbGFyZS5jb2xvci5yICogaW50ZW5zaXR5LCBmbGFyZS5jb2xv
ci5nICogaW50ZW5zaXR5LCBmbGFyZS5jb2xvci5iICogaW50ZW5zaXR5LCAxLjApOworICAgICAg
ICAgICAgLy8gRHJhdyBvcmRlcgorICAgICAgICAgICAgZW5naW5lLmRyYXdFbGVtZW50c1R5cGUo
X01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJNYXRlcmlh
bCJdLlRyaWFuZ2xlRmlsbE1vZGUsIDAsIDYpOworICAgICAgICB9CisgICAgICAgIGVuZ2luZS5z
ZXREZXB0aEJ1ZmZlcih0cnVlKTsKKyAgICAgICAgZW5naW5lLnNldEFscGhhTW9kZShfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uQUxQ
SEFfRElTQUJMRSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoqCisgICAg
ICogRGlzcG9zZSBhbmQgcmVsZWFzZSB0aGUgbGVucyBmbGFyZSB3aXRoIGl0cyBhc3NvY2lhdGVk
IHJlc291cmNlcy4KKyAgICAgKi8KKyAgICBMZW5zRmxhcmVTeXN0ZW0ucHJvdG90eXBlLmRpc3Bv
c2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB0aGlzLl92ZXJ0
ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZl
cnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXIpIHsK
KyAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl92
ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0gPSBudWxsOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9pbmRleEJ1ZmZlcikgeworICAgICAgICAgICAgdGhpcy5fc2NlbmUuZ2V0RW5n
aW5lKCkuX3JlbGVhc2VCdWZmZXIodGhpcy5faW5kZXhCdWZmZXIpOworICAgICAgICAgICAgdGhp
cy5faW5kZXhCdWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHdoaWxlICh0aGlzLmxl
bnNGbGFyZXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGlzLmxlbnNGbGFyZXNbMF0uZGlzcG9z
ZSgpOworICAgICAgICB9CisgICAgICAgIC8vIFJlbW92ZSBmcm9tIHNjZW5lCisgICAgICAgIHZh
ciBpbmRleCA9IHRoaXMuX3NjZW5lLmxlbnNGbGFyZVN5c3RlbXMuaW5kZXhPZih0aGlzKTsKKyAg
ICAgICAgdGhpcy5fc2NlbmUubGVuc0ZsYXJlU3lzdGVtcy5zcGxpY2UoaW5kZXgsIDEpOworICAg
IH07CisgICAgLyoqCisgICAgICogUGFyc2UgYSBsZW5zIGZsYXJlIHN5c3RlbSBmcm9tIGEgSlNP
TiByZXByZXNzZW50YXRpb24KKyAgICAgKiBAcGFyYW0gcGFyc2VkTGVuc0ZsYXJlU3lzdGVtIERl
ZmluZSB0aGUgSlNPTiB0byBwYXJzZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNj
ZW5lIHRoZSBwYXJzZWQgc3lzdGVtIHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgaW4KKyAgICAgKiBA
cGFyYW0gcm9vdFVybCBEZWZpbmUgdGhlIHJvb3RVcmwgb2YgdGhlIGxvYWQgc2VxdWVuY2UgdG8g
ZWFzaWx5IGZpbmQgYSBsb2FkIHJlbGF0aXZlIGRlcGVuZGVuY2llcyBzdWNoIGFzIHRleHR1cmVz
CisgICAgICogQHJldHVybnMgdGhlIHBhcnNlZCBzeXN0ZW0KKyAgICAgKi8KKyAgICBMZW5zRmxh
cmVTeXN0ZW0uUGFyc2UgPSBmdW5jdGlvbiAocGFyc2VkTGVuc0ZsYXJlU3lzdGVtLCBzY2VuZSwg
cm9vdFVybCkgeworICAgICAgICB2YXIgZW1pdHRlciA9IHNjZW5lLmdldExhc3RFbnRyeUJ5SUQo
cGFyc2VkTGVuc0ZsYXJlU3lzdGVtLmVtaXR0ZXJJZCk7CisgICAgICAgIHZhciBuYW1lID0gcGFy
c2VkTGVuc0ZsYXJlU3lzdGVtLm5hbWUgfHwgImxlbnNGbGFyZVN5c3RlbSMiICsgcGFyc2VkTGVu
c0ZsYXJlU3lzdGVtLmVtaXR0ZXJJZDsKKyAgICAgICAgdmFyIGxlbnNGbGFyZVN5c3RlbSA9IG5l
dyBMZW5zRmxhcmVTeXN0ZW0obmFtZSwgZW1pdHRlciwgc2NlbmUpOworICAgICAgICBsZW5zRmxh
cmVTeXN0ZW0uaWQgPSBwYXJzZWRMZW5zRmxhcmVTeXN0ZW0uaWQgfHwgbmFtZTsKKyAgICAgICAg
bGVuc0ZsYXJlU3lzdGVtLmJvcmRlckxpbWl0ID0gcGFyc2VkTGVuc0ZsYXJlU3lzdGVtLmJvcmRl
ckxpbWl0OworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcGFyc2VkTGVuc0Zs
YXJlU3lzdGVtLmZsYXJlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBwYXJz
ZWRGbGFyZSA9IHBhcnNlZExlbnNGbGFyZVN5c3RlbS5mbGFyZXNbaW5kZXhdOworICAgICAgICAg
ICAgX2xlbnNGbGFyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJMZW5zRmxhcmUiXS5B
ZGRGbGFyZShwYXJzZWRGbGFyZS5zaXplLCBwYXJzZWRGbGFyZS5wb3NpdGlvbiwgX01hdGhzX21h
dGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIkNvbG9yMyJdLkZyb21BcnJh
eShwYXJzZWRGbGFyZS5jb2xvciksIHBhcnNlZEZsYXJlLnRleHR1cmVOYW1lID8gcm9vdFVybCAr
IHBhcnNlZEZsYXJlLnRleHR1cmVOYW1lIDogIiIsIGxlbnNGbGFyZVN5c3RlbSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGxlbnNGbGFyZVN5c3RlbTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNlcmlhbGl6ZSB0aGUgY3VycmVudCBMZW5zIEZsYXJlIFN5c3RlbSBpbnRvIGEgSlNPTiBy
ZXByZXNlbnRhdGlvbi4KKyAgICAgKiBAcmV0dXJucyB0aGUgc2VyaWFsaXplZCBKU09OCisgICAg
ICovCisgICAgTGVuc0ZsYXJlU3lzdGVtLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3QuaWQgPSB0aGlzLmlkOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
Lm5hbWUgPSB0aGlzLm5hbWU7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZW1pdHRlcklk
ID0gdGhpcy5nZXRFbWl0dGVyKCkuaWQ7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYm9y
ZGVyTGltaXQgPSB0aGlzLmJvcmRlckxpbWl0OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
LmZsYXJlcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5s
ZW5zRmxhcmVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGZsYXJlID0gdGhp
cy5sZW5zRmxhcmVzW2luZGV4XTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZmxh
cmVzLnB1c2goeworICAgICAgICAgICAgICAgIHNpemU6IGZsYXJlLnNpemUsCisgICAgICAgICAg
ICAgICAgcG9zaXRpb246IGZsYXJlLnBvc2l0aW9uLAorICAgICAgICAgICAgICAgIGNvbG9yOiBm
bGFyZS5jb2xvci5hc0FycmF5KCksCisgICAgICAgICAgICAgICAgdGV4dHVyZU5hbWU6IF9NaXNj
X3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRvb2xzIl0uR2V0RmlsZW5hbWUo
ZmxhcmUudGV4dHVyZSA/IGZsYXJlLnRleHR1cmUubmFtZSA6ICIiKQorICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIExlbnNGbGFyZVN5c3RlbS5fU2NlbmVDb21wb25lbnRJ
bml0aWFsaXphdGlvbiA9IGZ1bmN0aW9uIChfKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0
KCJMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudCIpOworICAgIH07CisgICAgcmV0dXJuIExl
bnNGbGFyZVN5c3RlbTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTGVuc0Zs
YXJlcy9sZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTGVu
c0ZsYXJlcy9sZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudC50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudCAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQ7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3Rvb2xzICovICIuL01p
c2MvdG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2Fic3RyYWN0U2NlbmUgKi8gIi4vYWJzdHJhY3RT
Y2VuZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sZW5zRmxhcmVTeXN0ZW1fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbGVu
c0ZsYXJlU3lzdGVtICovICIuL0xlbnNGbGFyZXMvbGVuc0ZsYXJlU3lzdGVtLnRzIik7CisKKwor
CisKKy8vIEFkZHMgdGhlIHBhcnNlciB0byB0aGUgc2NlbmUgcGFyc2Vycy4KK19hYnN0cmFjdFNj
ZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFic3RyYWN0U2NlbmUiXS5BZGRQYXJz
ZXIoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lQ29t
cG9uZW50Q29uc3RhbnRzIl0uTkFNRV9MRU5TRkxBUkVTWVNURU0sIGZ1bmN0aW9uIChwYXJzZWRE
YXRhLCBzY2VuZSwgY29udGFpbmVyLCByb290VXJsKSB7CisgICAgLy8gTGVucyBmbGFyZXMKKyAg
ICBpZiAocGFyc2VkRGF0YS5sZW5zRmxhcmVTeXN0ZW1zICE9PSB1bmRlZmluZWQgJiYgcGFyc2Vk
RGF0YS5sZW5zRmxhcmVTeXN0ZW1zICE9PSBudWxsKSB7CisgICAgICAgIGlmICghY29udGFpbmVy
LmxlbnNGbGFyZVN5c3RlbXMpIHsKKyAgICAgICAgICAgIGNvbnRhaW5lci5sZW5zRmxhcmVTeXN0
ZW1zID0gbmV3IEFycmF5KCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAw
LCBjYWNoZSA9IHBhcnNlZERhdGEubGVuc0ZsYXJlU3lzdGVtcy5sZW5ndGg7IGluZGV4IDwgY2Fj
aGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBwYXJzZWRMZW5zRmxhcmVTeXN0ZW0gPSBw
YXJzZWREYXRhLmxlbnNGbGFyZVN5c3RlbXNbaW5kZXhdOworICAgICAgICAgICAgdmFyIGxmID0g
X2xlbnNGbGFyZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJMZW5zRmxhcmVT
eXN0ZW0iXS5QYXJzZShwYXJzZWRMZW5zRmxhcmVTeXN0ZW0sIHNjZW5lLCByb290VXJsKTsKKyAg
ICAgICAgICAgIGNvbnRhaW5lci5sZW5zRmxhcmVTeXN0ZW1zLnB1c2gobGYpOworICAgICAgICB9
CisgICAgfQorfSk7CitfYWJzdHJhY3RTY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJBYnN0cmFjdFNjZW5lIl0ucHJvdG90eXBlLmdldExlbnNGbGFyZVN5c3RlbUJ5TmFtZSA9IGZ1
bmN0aW9uIChuYW1lKSB7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGVu
c0ZsYXJlU3lzdGVtcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgaWYgKHRoaXMubGVuc0Zs
YXJlU3lzdGVtc1tpbmRleF0ubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMubGVuc0ZsYXJlU3lzdGVtc1tpbmRleF07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IG51bGw7Cit9OworX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
QWJzdHJhY3RTY2VuZSJdLnByb3RvdHlwZS5nZXRMZW5zRmxhcmVTeXN0ZW1CeUlEID0gZnVuY3Rp
b24gKGlkKSB7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGVuc0ZsYXJl
U3lzdGVtcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgaWYgKHRoaXMubGVuc0ZsYXJlU3lz
dGVtc1tpbmRleF0uaWQgPT09IGlkKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5zRmxh
cmVTeXN0ZW1zW2luZGV4XTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbDsKK307
CitfYWJzdHJhY3RTY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBYnN0cmFjdFNj
ZW5lIl0ucHJvdG90eXBlLnJlbW92ZUxlbnNGbGFyZVN5c3RlbSA9IGZ1bmN0aW9uICh0b1JlbW92
ZSkgeworICAgIHZhciBpbmRleCA9IHRoaXMubGVuc0ZsYXJlU3lzdGVtcy5pbmRleE9mKHRvUmVt
b3ZlKTsKKyAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgIHRoaXMubGVuc0ZsYXJlU3lz
dGVtcy5zcGxpY2UoaW5kZXgsIDEpOworICAgIH0KKyAgICByZXR1cm4gaW5kZXg7Cit9OworX2Fi
c3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQWJzdHJhY3RTY2VuZSJd
LnByb3RvdHlwZS5hZGRMZW5zRmxhcmVTeXN0ZW0gPSBmdW5jdGlvbiAobmV3TGVuc0ZsYXJlU3lz
dGVtKSB7CisgICAgdGhpcy5sZW5zRmxhcmVTeXN0ZW1zLnB1c2gobmV3TGVuc0ZsYXJlU3lzdGVt
KTsKK307CisvKioKKyAqIERlZmluZXMgdGhlIGxlbnMgZmxhcmUgc2NlbmUgY29tcG9uZW50IHJl
c3BvbnNpYmxlIHRvIG1hbmFnZSBhbnkgbGVucyBmbGFyZXMKKyAqIGluIGEgZ2l2ZW4gc2NlbmUu
CisgKi8KK3ZhciBMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9m
IHRoZSBjb21wb25lbnQgZm9yIHRoZSBnaXZlbiBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBE
ZWZpbmVzIHRoZSBzY2VuZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IGluCisgICAgICovCisg
ICAgZnVuY3Rpb24gTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQoc2NlbmUpIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFRoZSBjb21wb25lbnQgbmFtZSBoZWxwZnVsbCB0byBpZGVudGlm
eSB0aGUgY29tcG9uZW50IGluIHRoZSBsaXN0IG9mIHNjZW5lIGNvbXBvbmVudHMuCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLm5hbWUgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX0xFTlNGTEFSRVNZ
U1RFTTsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICBzY2VuZS5sZW5zRmxh
cmVTeXN0ZW1zID0gbmV3IEFycmF5KCk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJlZ2lzdGVy
cyB0aGUgY29tcG9uZW50IGluIGEgZ2l2ZW4gc2NlbmUKKyAgICAgKi8KKyAgICBMZW5zRmxhcmVT
eXN0ZW1TY2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuc2NlbmUuX2FmdGVyQ2FtZXJhRHJhd1N0YWdlLnJlZ2lzdGVyU3RlcChfc2Nl
bmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRD
b25zdGFudHMiXS5TVEVQX0FGVEVSQ0FNRVJBRFJBV19MRU5TRkxBUkVTWVNURU0sIHRoaXMsIHRo
aXMuX2RyYXcpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVidWlsZHMgdGhlIGVsZW1lbnRz
IHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4gY2FzZSBvZgorICAgICAqIGNvbnRleHQgbG9z
dCBmb3IgaW5zdGFuY2UuCisgICAgICovCisgICAgTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25l
bnQucHJvdG90eXBlLnJlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE5vdGhpbmcg
dG8gZG8gZm9yIGxlbnMgZmxhcmUKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgYWxsIHRo
ZSBlbGVtZW50cyBmcm9tIHRoZSBjb250YWluZXIgdG8gdGhlIHNjZW5lCisgICAgICogQHBhcmFt
IGNvbnRhaW5lciB0aGUgY29udGFpbmVyIGhvbGRpbmcgdGhlIGVsZW1lbnRzCisgICAgICovCisg
ICAgTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQucHJvdG90eXBlLmFkZEZyb21Db250YWlu
ZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIGlmICghY29udGFpbmVyLmxlbnNGbGFyZVN5c3RlbXMpIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBjb250YWluZXIubGVuc0ZsYXJlU3lzdGVtcy5mb3JF
YWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAgICAgICBfdGhpcy5zY2VuZS5hZGRMZW5zRmxhcmVT
eXN0ZW0obyk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyBh
bGwgdGhlIGVsZW1lbnRzIGluIHRoZSBjb250YWluZXIgZnJvbSB0aGUgc2NlbmUKKyAgICAgKiBA
cGFyYW0gY29udGFpbmVyIGNvbnRhaW5zIHRoZSBlbGVtZW50cyB0byByZW1vdmUKKyAgICAgKiBA
cGFyYW0gZGlzcG9zZSBpZiB0aGUgcmVtb3ZlZCBlbGVtZW50IHNob3VsZCBiZSBkaXNwb3NlZCAo
ZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25l
bnQucHJvdG90eXBlLnJlbW92ZUZyb21Db250YWluZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBk
aXNwb3NlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmICghY29udGFp
bmVyLmxlbnNGbGFyZVN5c3RlbXMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBjb250YWluZXIubGVuc0ZsYXJlU3lzdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7
CisgICAgICAgICAgICBfdGhpcy5zY2VuZS5yZW1vdmVMZW5zRmxhcmVTeXN0ZW0obyk7CisgICAg
ICAgICAgICBpZiAoZGlzcG9zZSkgeworICAgICAgICAgICAgICAgIG8uZGlzcG9zZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6
ZXMgdGhlIGNvbXBvbmVudCBkYXRhIHRvIHRoZSBzcGVjaWZpZWQganNvbiBvYmplY3QKKyAgICAg
KiBAcGFyYW0gc2VyaWFsaXphdGlvbk9iamVjdCBUaGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSB0bwor
ICAgICAqLworICAgIExlbnNGbGFyZVN5c3RlbVNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5zZXJp
YWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlvbk9iamVjdCkgeworICAgICAgICAvLyBMZW5z
IGZsYXJlcworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmxlbnNGbGFyZVN5c3RlbXMgPSBb
XTsKKyAgICAgICAgdmFyIGxlbnNGbGFyZVN5c3RlbXMgPSB0aGlzLnNjZW5lLmxlbnNGbGFyZVN5
c3RlbXM7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgbGVuc0ZsYXJlU3lzdGVtc18xID0gbGVu
c0ZsYXJlU3lzdGVtczsgX2kgPCBsZW5zRmxhcmVTeXN0ZW1zXzEubGVuZ3RoOyBfaSsrKSB7Cisg
ICAgICAgICAgICB2YXIgbGVuc0ZsYXJlU3lzdGVtID0gbGVuc0ZsYXJlU3lzdGVtc18xW19pXTsK
KyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubGVuc0ZsYXJlU3lzdGVtcy5wdXNoKGxl
bnNGbGFyZVN5c3RlbS5zZXJpYWxpemUoKSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIERpc3Bvc2VzIHRoZSBjb21wb25lbnQgYW5kIHRoZSBhc3NvY2lhdGVkIHJlc3NvdXJj
ZXMuCisgICAgICovCisgICAgTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQucHJvdG90eXBl
LmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBsZW5zRmxhcmVTeXN0ZW1zID0g
dGhpcy5zY2VuZS5sZW5zRmxhcmVTeXN0ZW1zOworICAgICAgICB3aGlsZSAobGVuc0ZsYXJlU3lz
dGVtcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGxlbnNGbGFyZVN5c3RlbXNbMF0uZGlzcG9zZSgp
OworICAgICAgICB9CisgICAgfTsKKyAgICBMZW5zRmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudC5w
cm90b3R5cGUuX2RyYXcgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAgICAgIC8vIExlbnMgZmxh
cmVzCisgICAgICAgIGlmICh0aGlzLnNjZW5lLmxlbnNGbGFyZXNFbmFibGVkKSB7CisgICAgICAg
ICAgICB2YXIgbGVuc0ZsYXJlU3lzdGVtcyA9IHRoaXMuc2NlbmUubGVuc0ZsYXJlU3lzdGVtczsK
KyAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRv
b2xzIl0uU3RhcnRQZXJmb3JtYW5jZUNvdW50ZXIoIkxlbnMgZmxhcmVzIiwgbGVuc0ZsYXJlU3lz
dGVtcy5sZW5ndGggPiAwKTsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgbGVuc0ZsYXJl
U3lzdGVtc18yID0gbGVuc0ZsYXJlU3lzdGVtczsgX2kgPCBsZW5zRmxhcmVTeXN0ZW1zXzIubGVu
Z3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGxlbnNGbGFyZVN5c3RlbSA9IGxlbnNG
bGFyZVN5c3RlbXNfMltfaV07CisgICAgICAgICAgICAgICAgaWYgKChjYW1lcmEubGF5ZXJNYXNr
ICYgbGVuc0ZsYXJlU3lzdGVtLmxheWVyTWFzaykgIT09IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgbGVuc0ZsYXJlU3lzdGVtLnJlbmRlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlRvb2xzIl0uRW5kUGVyZm9ybWFuY2VDb3VudGVyKCJMZW5zIGZsYXJlcyIsIGxlbnNGbGFy
ZVN5c3RlbXMubGVuZ3RoID4gMCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBMZW5z
RmxhcmVTeXN0ZW1TY2VuZUNvbXBvbmVudDsKK30oKSk7CisKK19sZW5zRmxhcmVTeXN0ZW1fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTGVuc0ZsYXJlU3lzdGVtIl0uX1NjZW5lQ29tcG9u
ZW50SW5pdGlhbGl6YXRpb24gPSBmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICB2YXIgY29tcG9uZW50
ID0gc2NlbmUuX2dldENvbXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX0xFTlNGTEFSRVNZU1RF
TSk7CisgICAgaWYgKCFjb21wb25lbnQpIHsKKyAgICAgICAgY29tcG9uZW50ID0gbmV3IExlbnNG
bGFyZVN5c3RlbVNjZW5lQ29tcG9uZW50KHNjZW5lKTsKKyAgICAgICAgc2NlbmUuX2FkZENvbXBv
bmVudChjb21wb25lbnQpOworICAgIH0KK307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0xp
Z2h0cy9TaGFkb3dzL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vTGlnaHRzL1NoYWRvd3MvaW5kZXgudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNoYWRv
d0dlbmVyYXRvciwgU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zaGFkb3dHZW5lcmF0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2hhZG93R2Vu
ZXJhdG9yICovICIuL0xpZ2h0cy9TaGFkb3dzL3NoYWRvd0dlbmVyYXRvci50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTaGFkb3dHZW5lcmF0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zaGFkb3dH
ZW5lcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2hhZG93R2VuZXJhdG9yIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NoYWRvd0dlbmVyYXRvclNjZW5lQ29t
cG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL3NoYWRvd0dlbmVyYXRvclNjZW5lQ29tcG9uZW50ICovICIuL0xpZ2h0cy9TaGFkb3dz
L3NoYWRvd0dlbmVyYXRvclNjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNo
YWRvd0dlbmVyYXRvclNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2hhZG93
R2VuZXJhdG9yU2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2hh
ZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL0xpZ2h0cy9TaGFkb3dzL3NoYWRvd0dlbmVyYXRvci50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9MaWdodHMv
U2hhZG93cy9zaGFkb3dHZW5lcmF0b3IudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTaGFkb3dHZW5l
cmF0b3IgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hhZG93R2VuZXJh
dG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTaGFkb3dHZW5lcmF0b3I7IH0pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGli
LmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5jb2xv
ciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9MaWdodHNfbGlnaHRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0xpZ2h0cy9saWdo
dCAqLyAiLi9MaWdodHMvbGlnaHQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvbWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL21h
dGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlh
bEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyICovICIuL01hdGVyaWFscy9tYXRl
cmlhbEhlbHBlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yZW5k
ZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVy
ZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vUG9z
dFByb2Nlc3Nlcy9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vUG9zdFByb2Nlc3Nlcy9ibHVyUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nl
cy9ibHVyUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX3NoYWRvd01hcF9mcmFn
bWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL1NoYWRlcnMvc2hhZG93TWFwLmZyYWdtZW50ICovICIuL1NoYWRlcnMvc2hhZG93
TWFwLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfc2hh
ZG93TWFwX3ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL1NoYWRlcnMvc2hhZG93TWFwLnZlcnRleCAqLyAiLi9TaGFkZXJz
L3NoYWRvd01hcC52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVy
c19kZXB0aEJveEJsdXJfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9TaGFkZXJzL2RlcHRoQm94Qmx1ci5mcmFnbWVu
dCAqLyAiLi9TaGFkZXJzL2RlcHRoQm94Qmx1ci5mcmFnbWVudC50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4v
TWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGV2
VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NaXNjL2RldlRvb2xzICovICIuL01pc2MvZGV2VG9vbHMudHMiKTsKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKy8qKgorICogRGVmYXVsdCBpbXBsZW1lbnRh
dGlvbiBJU2hhZG93R2VuZXJhdG9yLgorICogVGhpcyBpcyB0aGUgbWFpbiBvYmplY3QgcmVzcG9u
c2libGUgb2YgZ2VuZXJhdGluZyBzaGFkb3dzIGluIHRoZSBmcmFtZXdvcmsuCisgKiBEb2N1bWVu
dGF0aW9uOiBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvc2hhZG93cworICov
Cit2YXIgU2hhZG93R2VuZXJhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAg
IC8qKgorICAgICAqIENyZWF0ZXMgYSBTaGFkb3dHZW5lcmF0b3Igb2JqZWN0LgorICAgICAqIEEg
U2hhZG93R2VuZXJhdG9yIGlzIHRoZSByZXF1aXJlZCB0b29sIHRvIHVzZSB0aGUgc2hhZG93cy4K
KyAgICAgKiBFYWNoIGxpZ2h0IGNhc3Rpbmcgc2hhZG93cyBuZWVkcyB0byB1c2UgaXRzIG93biBT
aGFkb3dHZW5lcmF0b3IuCisgICAgICogRG9jdW1lbnRhdGlvbiA6IGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vYmFieWxvbjEwMS9zaGFkb3dzCisgICAgICogQHBhcmFtIG1hcFNpemUgVGhlIHNp
emUgb2YgdGhlIHRleHR1cmUgd2hhdCBzdG9yZXMgdGhlIHNoYWRvd3MuIEV4YW1wbGUgOiAxMDI0
LgorICAgICAqIEBwYXJhbSBsaWdodCBUaGUgbGlnaHQgb2JqZWN0IGdlbmVyYXRpbmcgdGhlIHNo
YWRvd3MuCisgICAgICogQHBhcmFtIHVzZWZ1bEZsb2F0Rmlyc3QgQnkgZGVmYXVsdCB0aGUgZ2Vu
ZXJhdG9yIHdpbGwgdHJ5IHRvIHVzZSBoYWxmIGZsb2F0IHRleHR1cmVzIGJ1dCBpZiB5b3UgbmVl
ZCBwcmVjaXNpb24gKGZvciBzZWxmIHNoYWRvd2luZyBmb3IgaW5zdGFuY2UpLCB5b3UgY2FuIHVz
ZSB0aGlzIG9wdGlvbiB0byBlbmZvcmNlIGZ1bGwgZmxvYXQgdGV4dHVyZS4KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBTaGFkb3dHZW5lcmF0b3IobWFwU2l6ZSwgbGlnaHQsIHVzZWZ1bEZsb2F0Rmly
c3QpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgdHJpZ2dlcmVkIGJlZm9y
ZSB0aGUgc2hhZG93IGlzIHJlbmRlcmVkLiBDYW4gYmUgdXNlZCB0byB1cGRhdGUgaW50ZXJuYWwg
ZWZmZWN0IHN0YXRlCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uQmVmb3JlU2hhZG93TWFw
UmVuZGVyT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xNl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9i
c2VydmFibGUgdHJpZ2dlcmVkIGFmdGVyIHRoZSBzaGFkb3cgaXMgcmVuZGVyZWQuIENhbiBiZSB1
c2VkIHRvIHJlc3RvcmUgaW50ZXJuYWwgZWZmZWN0IHN0YXRlCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLm9uQWZ0ZXJTaGFkb3dNYXBSZW5kZXJPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2Vy
dmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIk9ic2VydmFibGUiXSgpOworICAg
ICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSB0cmlnZ2VyZWQgYmVmb3JlIGEgbWVzaCBp
cyByZW5kZXJlZCBpbiB0aGUgc2hhZG93IG1hcC4KKyAgICAgICAgICogQ2FuIGJlIHVzZWQgdG8g
dXBkYXRlIGludGVybmFsIGVmZmVjdCBzdGF0ZSAodGhhdCB5b3UgY2FuIGdldCBmcm9tIHRoZSBv
bkJlZm9yZVNoYWRvd01hcFJlbmRlck9ic2VydmFibGUpCisgICAgICAgICAqLworICAgICAgICB0
aGlzLm9uQmVmb3JlU2hhZG93TWFwUmVuZGVyTWVzaE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siT2JzZXJ2YWJsZSJdKCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxlIHRyaWdnZXJlZCBhZnRlciBhIG1lc2gg
aXMgcmVuZGVyZWQgaW4gdGhlIHNoYWRvdyBtYXAuCisgICAgICAgICAqIENhbiBiZSB1c2VkIHRv
IHVwZGF0ZSBpbnRlcm5hbCBlZmZlY3Qgc3RhdGUgKHRoYXQgeW91IGNhbiBnZXQgZnJvbSB0aGUg
b25BZnRlclNoYWRvd01hcFJlbmRlck9ic2VydmFibGUpCisgICAgICAgICAqLworICAgICAgICB0
aGlzLm9uQWZ0ZXJTaGFkb3dNYXBSZW5kZXJNZXNoT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNl
cnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAg
ICAgICAgdGhpcy5fYmlhcyA9IDAuMDAwMDU7CisgICAgICAgIHRoaXMuX25vcm1hbEJpYXMgPSAw
OworICAgICAgICB0aGlzLl9ibHVyQm94T2Zmc2V0ID0gMTsKKyAgICAgICAgdGhpcy5fYmx1clNj
YWxlID0gMjsKKyAgICAgICAgdGhpcy5fYmx1cktlcm5lbCA9IDE7CisgICAgICAgIHRoaXMuX3Vz
ZUtlcm5lbEJsdXIgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZmlsdGVyID0gU2hhZG93R2VuZXJh
dG9yLkZJTFRFUl9OT05FOworICAgICAgICB0aGlzLl9maWx0ZXJpbmdRdWFsaXR5ID0gU2hhZG93
R2VuZXJhdG9yLlFVQUxJVFlfSElHSDsKKyAgICAgICAgdGhpcy5fY29udGFjdEhhcmRlbmluZ0xp
Z2h0U2l6ZVVWUmF0aW8gPSAwLjE7CisgICAgICAgIHRoaXMuX2RhcmtuZXNzID0gMDsKKyAgICAg
ICAgdGhpcy5fdHJhbnNwYXJlbmN5U2hhZG93ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBDb250cm9scyB0aGUgZXh0ZW50IHRvIHdoaWNoIHRoZSBzaGFkb3dzIGZhZGUgb3V0IGF0
IHRoZSBlZGdlIG9mIHRoZSBmcnVzdHVtCisgICAgICAgICAqIFVzZWQgb25seSBieSBkaXJlY3Rp
b25hbHMgYW5kIHNwb3RzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmZydXN0dW1FZGdlRmFs
bG9mZiA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0cnVlIHRoZSBzaGFkb3cgbWFw
IGlzIGdlbmVyYXRlZCBieSByZW5kZXJpbmcgdGhlIGJhY2sgZmFjZSBvZiB0aGUgbWVzaCBpbnN0
ZWFkIG9mIHRoZSBmcm9udCBmYWNlLgorICAgICAgICAgKiBUaGlzIGNhbiBoZWxwIHdpdGggc2Vs
Zi1zaGFkb3dpbmcgYXMgdGhlIGdlb21ldHJ5IG1ha2luZyB1cCB0aGUgYmFjayBvZiBvYmplY3Rz
IGlzIHNsaWdodGx5IG9mZnNldC4KKyAgICAgICAgICogSXQgbWlnaHQgb24gdGhlIG90aGVyIGhh
bmQgaW50cm9kdWNlIHBldGVyIHBhbm5pbmcuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmZv
cmNlQmFja0ZhY2VzT25seSA9IGZhbHNlOworICAgICAgICB0aGlzLl9saWdodERpcmVjdGlvbiA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3Iz
Il0uWmVybygpOworICAgICAgICB0aGlzLl92aWV3TWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLlplcm8oKTsKKyAgICAgICAg
dGhpcy5fcHJvamVjdGlvbk1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX3RyYW5zZm9y
bU1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2NhY2hlZFBvc2l0aW9uID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0o
TnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVyLk1BWF9WQUxVRSk7Cisg
ICAgICAgIHRoaXMuX2NhY2hlZERpcmVjdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKE51bWJlci5NQVhfVkFMVUUsIE51
bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUUpOworICAgICAgICB0aGlzLl9jdXJyZW50
RmFjZUluZGV4ID0gMDsKKyAgICAgICAgdGhpcy5fY3VycmVudEZhY2VJbmRleENhY2hlID0gMDsK
KyAgICAgICAgdGhpcy5fZGVmYXVsdFRleHR1cmVNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAg
ICAgdGhpcy5fbWFwU2l6ZSA9IG1hcFNpemU7CisgICAgICAgIHRoaXMuX2xpZ2h0ID0gbGlnaHQ7
CisgICAgICAgIHRoaXMuX3NjZW5lID0gbGlnaHQuZ2V0U2NlbmUoKTsKKyAgICAgICAgbGlnaHQu
X3NoYWRvd0dlbmVyYXRvciA9IHRoaXM7CisgICAgICAgIFNoYWRvd0dlbmVyYXRvci5fU2NlbmVD
b21wb25lbnRJbml0aWFsaXphdGlvbih0aGlzLl9zY2VuZSk7CisgICAgICAgIC8vIFRleHR1cmUg
dHlwZSBmYWxsYmFjayBmcm9tIGZsb2F0IHRvIGludCBpZiBub3Qgc3VwcG9ydGVkLgorICAgICAg
ICB2YXIgY2FwcyA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldENhcHMoKTsKKyAgICAgICAg
aWYgKCF1c2VmdWxGbG9hdEZpcnN0KSB7CisgICAgICAgICAgICBpZiAoY2Fwcy50ZXh0dXJlSGFs
ZkZsb2F0UmVuZGVyICYmIGNhcHMudGV4dHVyZUhhbGZGbG9hdExpbmVhckZpbHRlcmluZykgewor
ICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9IQUxG
X0ZMT0FUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY2Fwcy50ZXh0dXJl
RmxvYXRSZW5kZXIgJiYgY2Fwcy50ZXh0dXJlRmxvYXRMaW5lYXJGaWx0ZXJpbmcpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl90ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfRkxPQVQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90
ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGNhcHMudGV4dHVy
ZUZsb2F0UmVuZGVyICYmIGNhcHMudGV4dHVyZUZsb2F0TGluZWFyRmlsdGVyaW5nKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEyX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY2Fwcy50ZXh0dXJlSGFsZkZsb2F0
UmVuZGVyICYmIGNhcHMudGV4dHVyZUhhbGZGbG9hdExpbmVhckZpbHRlcmluZykgeworICAgICAg
ICAgICAgICAgIHRoaXMuX3RleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FU
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEyX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pbml0aWFsaXplR2VuZXJhdG9yKCk7Cisg
ICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyVmFsdWVzKCk7CisgICAgfQorICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAiYmlhcyIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIGJpYXM6IG9mZnNldCBhcHBsaWVkIG9uIHRoZSBkZXB0
aCBwcmV2ZW50aW5nIGFjbmVhIChpbiBsaWdodCBkaXJlY3Rpb24pLgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmlhczsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGJpYXM6IG9mZnNl
dCBhcHBsaWVkIG9uIHRoZSBkZXB0aCBwcmV2ZW50aW5nIGFjbmVhIChpbiBsaWdodCBkaXJlY3Rp
b24pLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoYmlhcykgeworICAgICAg
ICAgICAgdGhpcy5fYmlhcyA9IGJpYXM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAibm9ybWFsQmlhcyIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG5vcm1hbEJpYXM6IG9mZnNldCBhcHBs
aWVkIG9uIHRoZSBkZXB0aCBwcmV2ZW50aW5nIGFjbmVhIChhbG9uZyBzaWRlIHRoZSBub3JtYWwg
ZGlyZWN0aW9uIGFuZCBwcm9wb3J0aW5hbCB0byB0aGUgbGlnaHQvbm9ybWFsIGFuZ2xlKS4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX25vcm1hbEJpYXM7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBT
ZXRzIHRoZSBub3JtYWxCaWFzOiBvZmZzZXQgYXBwbGllZCBvbiB0aGUgZGVwdGggcHJldmVudGlu
ZyBhY25lYSAoYWxvbmcgc2lkZSB0aGUgbm9ybWFsIGRpcmVjdGlvbiBhbmQgcHJvcG9ydGluYWwg
dG8gdGhlIGxpZ2h0L25vcm1hbCBhbmdsZSkuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uIChub3JtYWxCaWFzKSB7CisgICAgICAgICAgICB0aGlzLl9ub3JtYWxCaWFzID0gbm9y
bWFsQmlhczsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNo
YWRvd0dlbmVyYXRvci5wcm90b3R5cGUsICJibHVyQm94T2Zmc2V0IiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyB0aGUgYmx1ciBib3ggb2Zmc2V0OiBvZmZzZXQgYXBwbGllZCBkdXJp
bmcgdGhlIGJsdXIgcGFzcy4KKyAgICAgICAgICogT25seSB1c2VmdWwgaWYgdXNlS2VybmVsQmx1
ciA9IGZhbHNlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9ibHVyQm94T2Zmc2V0OworICAgICAgICB9LAorICAgICAgICAv
KioKKyAgICAgICAgICogU2V0cyB0aGUgYmx1ciBib3ggb2Zmc2V0OiBvZmZzZXQgYXBwbGllZCBk
dXJpbmcgdGhlIGJsdXIgcGFzcy4KKyAgICAgICAgICogT25seSB1c2VmdWwgaWYgdXNlS2VybmVs
Qmx1ciA9IGZhbHNlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgaWYgKHRoaXMuX2JsdXJCb3hPZmZzZXQgPT09IHZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYmx1
ckJveE9mZnNldCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fZGlzcG9zZUJsdXJQb3N0UHJv
Y2Vzc2VzKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShT
aGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAiYmx1clNjYWxlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgYmx1ciBzY2FsZTogc2NhbGUgb2YgdGhlIGJsdXJyZWQgdGV4dHVy
ZSBjb21wYXJlZCB0byB0aGUgbWFpbiBzaGFkb3cgbWFwLgorICAgICAgICAgKiAyIG1lYW5zIGhh
bGYgb2YgdGhlIHNpemUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9ibHVyU2NhbGU7CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBibHVyIHNjYWxlOiBzY2FsZSBvZiB0aGUgYmx1cnJl
ZCB0ZXh0dXJlIGNvbXBhcmVkIHRvIHRoZSBtYWluIHNoYWRvdyBtYXAuCisgICAgICAgICAqIDIg
bWVhbnMgaGFsZiBvZiB0aGUgc2l6ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fYmx1clNjYWxlID09PSB2YWx1ZSkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX2JsdXJTY2FsZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fZGlzcG9zZUJsdXJQb3N0
UHJvY2Vzc2VzKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAiYmx1cktlcm5lbCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIGJsdXIga2VybmVsOiBrZXJuZWwgc2l6ZSBvZiB0aGUgYmx1
ciBwYXNzLgorICAgICAgICAgKiBPbmx5IHVzZWZ1bCBpZiB1c2VLZXJuZWxCbHVyID0gdHJ1ZQor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fYmx1cktlcm5lbDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFNldHMgdGhlIGJsdXIga2VybmVsOiBrZXJuZWwgc2l6ZSBvZiB0aGUgYmx1ciBwYXNzLgorICAg
ICAgICAgKiBPbmx5IHVzZWZ1bCBpZiB1c2VLZXJuZWxCbHVyID0gdHJ1ZQorICAgICAgICAgKi8K
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9i
bHVyS2VybmVsID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2JsdXJLZXJuZWwgPSB2YWx1ZTsKKyAgICAgICAgICAg
IHRoaXMuX2Rpc3Bvc2VCbHVyUG9zdFByb2Nlc3NlcygpOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZSwgInVzZUtl
cm5lbEJsdXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGJs
dXIgcGFzcyBpcyBhIGtlcm5lbCBibHVyIChpZiB0cnVlKSBvciBib3ggYmx1ci4KKyAgICAgICAg
ICogT25seSB1c2VmdWwgaW4gZmlsdGVyZWQgbW9kZSAodXNlQmx1ckV4cG9uZW50aWFsU2hhZG93
TWFwLi4uKQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fdXNlS2VybmVsQmx1cjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFNldHMgd2hldGhlciB0aGUgYmx1ciBwYXNzIGlzIGEga2VybmVsIGJsdXIg
KGlmIHRydWUpIG9yIGJveCBibHVyLgorICAgICAgICAgKiBPbmx5IHVzZWZ1bCBpbiBmaWx0ZXJl
ZCBtb2RlICh1c2VCbHVyRXhwb25lbnRpYWxTaGFkb3dNYXAuLi4pCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3VzZUtl
cm5lbEJsdXIgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fdXNlS2VybmVsQmx1ciA9IHZhbHVlOworICAgICAgICAg
ICAgdGhpcy5fZGlzcG9zZUJsdXJQb3N0UHJvY2Vzc2VzKCk7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAiZGVw
dGhTY2FsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGRlcHRoIHNjYWxl
IHVzZWQgaW4gRVNNIG1vZGUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXB0aFNjYWxlICE9PSB1bmRlZmluZWQgPyB0
aGlzLl9kZXB0aFNjYWxlIDogdGhpcy5fbGlnaHQuZ2V0RGVwdGhTY2FsZSgpOworICAgICAgICB9
LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgZGVwdGggc2NhbGUgdXNlZCBpbiBF
U00gbW9kZS4KKyAgICAgICAgICogVGhpcyBjYW4gb3ZlcnJpZGUgdGhlIHNjYWxlIHN0b3JlZCBv
biB0aGUgbGlnaHQuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgdGhpcy5fZGVwdGhTY2FsZSA9IHZhbHVlOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZSwg
ImZpbHRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGN1cnJlbnQgbW9k
ZSBvZiB0aGUgc2hhZG93IGdlbmVyYXRvciAobm9ybWFsLCBQQ0YsIEVTTS4uLikuCisgICAgICAg
ICAqIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhIG51bWJlciBlcXVhbCB0byBvbmUgb2YgdGhlIGF2
YWlsYWJsZSBtb2RlIGRlZmluZWQgaW4gU2hhZG93TWFwLkZJTFRFUl94IGxpa2UgX0ZJTFRFUl9O
T05FCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9maWx0ZXI7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAg
KiBTZXRzIHRoZSBjdXJyZW50IG1vZGUgb2YgdGhlIHNoYWRvdyBnZW5lcmF0b3IgKG5vcm1hbCwg
UENGLCBFU00uLi4pLgorICAgICAgICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYSBudW1iZXIg
ZXF1YWwgdG8gb25lIG9mIHRoZSBhdmFpbGFibGUgbW9kZSBkZWZpbmVkIGluIFNoYWRvd01hcC5G
SUxURVJfeCBsaWtlIF9GSUxURVJfTk9ORQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIC8vIEJsdXJyaW5nIHRoZSBjdWJlbWFwIGlzIGdv
aW5nIHRvIGJlIHRvbyBleHBlbnNpdmUuIFJldmVydGluZyB0byB1bmJsdXJyZWQgdmVyc2lvbgor
ICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0Lm5lZWRDdWJlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodmFsdWUgPT09IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfQkxVUkVYUE9ORU5USUFMU0hB
RE9XTUFQKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlRXhwb25lbnRpYWxTaGFkb3dN
YXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBTaGFkb3dHZW5lcmF0b3IuRklM
VEVSX0JMVVJDTE9TRUVYUE9ORU5USUFMU0hBRE9XTUFQKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMudXNlQ2xvc2VFeHBvbmVudGlhbFNoYWRvd01hcCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gUENG
IG9uIGN1YmVtYXAgd291bGQgYWxzbyBiZSBleHBlbnNpdmUKKyAgICAgICAgICAgICAgICBlbHNl
IGlmICh2YWx1ZSA9PT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9QQ0YgfHwgdmFsdWUgPT09IFNo
YWRvd0dlbmVyYXRvci5GSUxURVJfUENTUykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnVz
ZVBvaXNzb25TYW1wbGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBXZWJsZzEgZmFs
bGJhY2sgZm9yIFBDRi4KKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gU2hhZG93R2VuZXJhdG9y
LkZJTFRFUl9QQ0YgfHwgdmFsdWUgPT09IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfUENTUykgewor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS53ZWJHTFZlcnNpb24g
PT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VQb2lzc29uU2FtcGxpbmcgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbHRlciA9PT0gdmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9m
aWx0ZXIgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2VCbHVyUG9zdFByb2Nlc3Nl
cygpOworICAgICAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXJWYWx1ZXMoKTsKKyAgICAgICAgICAg
IHRoaXMuX2xpZ2h0Ll9tYXJrTWVzaGVzQXNMaWdodERpcnR5KCk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAi
dXNlUG9pc3NvblNhbXBsaW5nIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBpZiB0
aGUgY3VycmVudCBmaWx0ZXIgaXMgc2V0IHRvIFBvaXNzb24gU2FtcGxpbmcuCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZp
bHRlciA9PT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9QT0lTU09OU0FNUExJTkc7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGZpbHRlciB0byBQ
b2lzc29uIFNhbXBsaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdGhpcy5maWx0ZXIgIT09IFNoYWRvd0dl
bmVyYXRvci5GSUxURVJfUE9JU1NPTlNBTVBMSU5HKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSAodmFsdWUgPyBTaGFk
b3dHZW5lcmF0b3IuRklMVEVSX1BPSVNTT05TQU1QTElORyA6IFNoYWRvd0dlbmVyYXRvci5GSUxU
RVJfTk9ORSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShT
aGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAidXNlRXhwb25lbnRpYWxTaGFkb3dNYXAiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGlmIHRoZSBjdXJyZW50IGZpbHRlciBpcyBzZXQg
dG8gRVNNLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5maWx0ZXIgPT09IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfRVhQT05F
TlRJQUxTSEFET1dNQVA7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRz
IHRoZSBjdXJyZW50IGZpbHRlciBpcyB0byBFU00uCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKCF2YWx1ZSAmJiB0aGlzLmZpbHRl
ciAhPT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9FWFBPTkVOVElBTFNIQURPV01BUCkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZmls
dGVyID0gKHZhbHVlID8gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9FWFBPTkVOVElBTFNIQURPV01B
UCA6IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfTk9ORSk7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAidXNlQmx1
ckV4cG9uZW50aWFsU2hhZG93TWFwIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBp
ZiB0aGUgY3VycmVudCBmaWx0ZXIgaXMgc2V0IHRvIGZpbHRlcmVkIEVTTS4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmls
dGVyID09PSBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX0JMVVJFWFBPTkVOVElBTFNIQURPV01BUDsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgaWYgdGhlIGN1cnJlbnQg
ZmlsdGVyIGlzIHNldCB0byBmaWx0ZXJlZCAgRVNNLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdGhpcy5maWx0
ZXIgIT09IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfQkxVUkVYUE9ORU5USUFMU0hBRE9XTUFQKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5maWx0ZXIgPSAodmFsdWUgPyBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX0JMVVJFWFBPTkVOVElB
TFNIQURPV01BUCA6IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfTk9ORSk7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBl
LCAidXNlQ2xvc2VFeHBvbmVudGlhbFNoYWRvd01hcCIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgaWYgdGhlIGN1cnJlbnQgZmlsdGVyIGlzIHNldCB0byAiY2xvc2UgRVNNIiAodXNp
bmcgdGhlIGludmVyc2Ugb2YgdGhlCisgICAgICAgICAqIGV4cG9uZW50aWFsIHRvIHByZXZlbnQg
c3RlZXAgZmFsbG9mZiBhcnRpZmFjdHMpLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIgPT09IFNoYWRvd0dlbmVy
YXRvci5GSUxURVJfQ0xPU0VFWFBPTkVOVElBTFNIQURPV01BUDsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGN1cnJlbnQgZmlsdGVyIHRvICJjbG9zZSBFU00i
ICh1c2luZyB0aGUgaW52ZXJzZSBvZiB0aGUKKyAgICAgICAgICogZXhwb25lbnRpYWwgdG8gcHJl
dmVudCBzdGVlcCBmYWxsb2ZmIGFydGlmYWN0cykuCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKCF2YWx1ZSAmJiB0aGlzLmZpbHRl
ciAhPT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9DTE9TRUVYUE9ORU5USUFMU0hBRE9XTUFQKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5maWx0ZXIgPSAodmFsdWUgPyBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX0NMT1NFRVhQT05FTlRJ
QUxTSEFET1dNQVAgOiBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX05PTkUpOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZG93R2VuZXJhdG9yLnByb3RvdHlw
ZSwgInVzZUJsdXJDbG9zZUV4cG9uZW50aWFsU2hhZG93TWFwIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBpZiB0aGUgY3VycmVudCBmaWx0ZXIgaXMgc2V0IHRvIGZpbHRlcmVkICJj
bG9zZSBFU00iICh1c2luZyB0aGUgaW52ZXJzZSBvZiB0aGUKKyAgICAgICAgICogZXhwb25lbnRp
YWwgdG8gcHJldmVudCBzdGVlcCBmYWxsb2ZmIGFydGlmYWN0cykuCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlciA9
PT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9CTFVSQ0xPU0VFWFBPTkVOVElBTFNIQURPV01BUDsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGN1cnJlbnQgZmls
dGVyIHRvIGZpbHRlcmVkICJjbG9zZSBFU00iICh1c2luZyB0aGUgaW52ZXJzZSBvZiB0aGUKKyAg
ICAgICAgICogZXhwb25lbnRpYWwgdG8gcHJldmVudCBzdGVlcCBmYWxsb2ZmIGFydGlmYWN0cyku
CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAg
ICAgaWYgKCF2YWx1ZSAmJiB0aGlzLmZpbHRlciAhPT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9C
TFVSQ0xPU0VFWFBPTkVOVElBTFNIQURPV01BUCkgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZmlsdGVyID0gKHZhbHVlID8gU2hhZG93
R2VuZXJhdG9yLkZJTFRFUl9CTFVSQ0xPU0VFWFBPTkVOVElBTFNIQURPV01BUCA6IFNoYWRvd0dl
bmVyYXRvci5GSUxURVJfTk9ORSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLCAidXNlUGVyY2VudGFnZUNsb3Nl
ckZpbHRlcmluZyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgaWYgdGhlIGN1cnJl
bnQgZmlsdGVyIGlzIHNldCB0byAiUENGIiAocGVyY2VudGFnZSBjbG9zZXIgZmlsdGVyaW5nKS4K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmlsdGVyID09PSBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX1BDRjsKKyAgICAgICAg
fSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGN1cnJlbnQgZmlsdGVyIHRvICJQ
Q0YiIChwZXJjZW50YWdlIGNsb3NlciBmaWx0ZXJpbmcpLgorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdGhpcy5m
aWx0ZXIgIT09IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfUENGKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSAodmFsdWUg
PyBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX1BDRiA6IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfTk9O
RSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dH
ZW5lcmF0b3IucHJvdG90eXBlLCAiZmlsdGVyaW5nUXVhbGl0eSIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIFBDRiBvciBQQ1NTIFF1YWxpdHkuCisgICAgICAgICAqIE9ubHkg
dmFsaWQgaWYgdXNlUGVyY2VudGFnZUNsb3NlckZpbHRlcmluZyBvciB1c2VQZXJjZW50YWdlQ2xv
c2VyRmlsdGVyaW5nIGlzIHRydWUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJpbmdRdWFsaXR5OworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgUENGIG9yIFBDU1MgUXVhbGl0
eS4KKyAgICAgICAgICogT25seSB2YWxpZCBpZiB1c2VQZXJjZW50YWdlQ2xvc2VyRmlsdGVyaW5n
IG9yIHVzZVBlcmNlbnRhZ2VDbG9zZXJGaWx0ZXJpbmcgaXMgdHJ1ZS4KKyAgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKGZpbHRlcmluZ1F1YWxpdHkpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9maWx0ZXJpbmdRdWFsaXR5ID09PSBmaWx0ZXJpbmdRdWFsaXR5KSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZmlsdGVy
aW5nUXVhbGl0eSA9IGZpbHRlcmluZ1F1YWxpdHk7CisgICAgICAgICAgICB0aGlzLl9kaXNwb3Nl
Qmx1clBvc3RQcm9jZXNzZXMoKTsKKyAgICAgICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyVmFsdWVz
KCk7CisgICAgICAgICAgICB0aGlzLl9saWdodC5fbWFya01lc2hlc0FzTGlnaHREaXJ0eSgpOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZG93R2VuZXJh
dG9yLnByb3RvdHlwZSwgInVzZUNvbnRhY3RIYXJkZW5pbmdTaGFkb3ciLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIGlmIHRoZSBjdXJyZW50IGZpbHRlciBpcyBzZXQgdG8gIlBDU1Mi
IChjb250YWN0IGhhcmRlbmluZykuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlciA9PT0gU2hhZG93R2VuZXJhdG9y
LkZJTFRFUl9QQ1NTOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0
aGUgY3VycmVudCBmaWx0ZXIgdG8gIlBDU1MiIChjb250YWN0IGhhcmRlbmluZykuCisgICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKCF2
YWx1ZSAmJiB0aGlzLmZpbHRlciAhPT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9QQ1NTKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5m
aWx0ZXIgPSAodmFsdWUgPyBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX1BDU1MgOiBTaGFkb3dHZW5l
cmF0b3IuRklMVEVSX05PTkUpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZSwgImNvbnRhY3RIYXJkZW5pbmdMaWdo
dFNpemVVVlJhdGlvIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgTGlnaHQg
U2l6ZSAoaW4gc2hhZG93IG1hcCB1diB1bml0KSB1c2VkIGluIFBDU1MgdG8gZGV0ZXJtaW5lIHRo
ZSBibG9ja2VyIHNlYXJjaCBhcmVhIGFuZCB0aGUgcGVudW1icmEgc2l6ZS4KKyAgICAgICAgICog
VXNpbmcgYSByYXRpbyBoZWxwcyBrZWVwaW5nIHNoYXBlIHN0YWJpbGl0eSBpbmRlcGVuZGVudGx5
IG9mIHRoZSBtYXAgc2l6ZS4KKyAgICAgICAgICoKKyAgICAgICAgICogSXQgZG9lcyBub3QgYWNj
b3VudCBmb3IgdGhlIGxpZ2h0IHByb2plY3Rpb24gYXMgaXQgd2FzIGhhdmluZyB0b28gbXVjaAor
ICAgICAgICAgKiBpbnN0YWJpbGl0eSBkdXJpbmcgdGhlIGxpZ2h0IHNldHVwIG9yIGR1cmluZyBs
aWdodCBwb3NpdGlvbiBjaGFuZ2VzLgorICAgICAgICAgKgorICAgICAgICAgKiBPbmx5IHZhbGlk
IGlmIHVzZUNvbnRhY3RIYXJkZW5pbmdTaGFkb3cgaXMgdHJ1ZS4KKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhY3RI
YXJkZW5pbmdMaWdodFNpemVVVlJhdGlvOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAg
ICAgICogU2V0cyB0aGUgTGlnaHQgU2l6ZSAoaW4gc2hhZG93IG1hcCB1diB1bml0KSB1c2VkIGlu
IFBDU1MgdG8gZGV0ZXJtaW5lIHRoZSBibG9ja2VyIHNlYXJjaCBhcmVhIGFuZCB0aGUgcGVudW1i
cmEgc2l6ZS4KKyAgICAgICAgICogVXNpbmcgYSByYXRpbyBoZWxwcyBrZWVwaW5nIHNoYXBlIHN0
YWJpbGl0eSBpbmRlcGVuZGVudGx5IG9mIHRoZSBtYXAgc2l6ZS4KKyAgICAgICAgICoKKyAgICAg
ICAgICogSXQgZG9lcyBub3QgYWNjb3VudCBmb3IgdGhlIGxpZ2h0IHByb2plY3Rpb24gYXMgaXQg
d2FzIGhhdmluZyB0b28gbXVjaAorICAgICAgICAgKiBpbnN0YWJpbGl0eSBkdXJpbmcgdGhlIGxp
Z2h0IHNldHVwIG9yIGR1cmluZyBsaWdodCBwb3NpdGlvbiBjaGFuZ2VzLgorICAgICAgICAgKgor
ICAgICAgICAgKiBPbmx5IHZhbGlkIGlmIHVzZUNvbnRhY3RIYXJkZW5pbmdTaGFkb3cgaXMgdHJ1
ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKGNvbnRhY3RIYXJkZW5pbmdM
aWdodFNpemVVVlJhdGlvKSB7CisgICAgICAgICAgICB0aGlzLl9jb250YWN0SGFyZGVuaW5nTGln
aHRTaXplVVZSYXRpbyA9IGNvbnRhY3RIYXJkZW5pbmdMaWdodFNpemVVVlJhdGlvOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZG93R2VuZXJhdG9yLnBy
b3RvdHlwZSwgImRhcmtuZXNzIiwgeworICAgICAgICAvKiogR2V0cyBvciBzZXRzIHRoZSBhY3R1
YWwgZGFya25lc3Mgb2YgYSBzaGFkb3cgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZGFya25lc3M7CisgICAgICAgIH0sCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLnNldERhcmtuZXNzKHZhbHVl
KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZGFya25l
c3MgdmFsdWUgKGZsb2F0KS4gVGhpcyBjYW4gb25seSBkZWNyZWFzZSB0aGUgYWN0dWFsIGRhcmtu
ZXNzIG9mIGEgc2hhZG93LgorICAgICAqIDAgbWVhbnMgc3Ryb25nZXN0IGFuZCAxIHdvdWxkIG1l
YW5zIG5vIHNoYWRvdy4KKyAgICAgKiBAcmV0dXJucyB0aGUgZGFya25lc3MuCisgICAgICovCisg
ICAgU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZS5nZXREYXJrbmVzcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2RhcmtuZXNzOworICAgIH07CisgICAgLyoqCisgICAgICog
U2V0cyB0aGUgZGFya25lc3MgdmFsdWUgKGZsb2F0KS4gVGhpcyBjYW4gb25seSBkZWNyZWFzZSB0
aGUgYWN0dWFsIGRhcmtuZXNzIG9mIGEgc2hhZG93LgorICAgICAqIEBwYXJhbSBkYXJrbmVzcyBU
aGUgZGFya25lc3MgdmFsdWUgMCBtZWFucyBzdHJvbmdlc3QgYW5kIDEgd291bGQgbWVhbnMgbm8g
c2hhZG93LgorICAgICAqIEByZXR1cm5zIHRoZSBzaGFkb3cgZ2VuZXJhdG9yIGFsbG93aW5nIGZs
dWVudCBjb2RpbmcuCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZS5zZXRE
YXJrbmVzcyA9IGZ1bmN0aW9uIChkYXJrbmVzcykgeworICAgICAgICBpZiAoZGFya25lc3MgPj0g
MS4wKSB7CisgICAgICAgICAgICB0aGlzLl9kYXJrbmVzcyA9IDEuMDsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChkYXJrbmVzcyA8PSAwLjApIHsKKyAgICAgICAgICAgIHRoaXMuX2Rhcmtu
ZXNzID0gMC4wOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5f
ZGFya25lc3MgPSBkYXJrbmVzczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBl
LCAidHJhbnNwYXJlbmN5U2hhZG93IiwgeworICAgICAgICAvKiogR2V0cyBvciBzZXRzIHRoZSBh
YmlsaXR5IHRvIGhhdmUgdHJhbnNwYXJlbnQgc2hhZG93ICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BhcmVuY3lTaGFkb3c7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0
aGlzLnNldFRyYW5zcGFyZW5jeVNoYWRvdyh2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IC8qKgorICAgICAqIFNldHMgdGhlIGFiaWxpdHkgdG8gaGF2ZSB0cmFuc3BhcmVudCBzaGFkb3cg
KGJvb2xlYW4pLgorICAgICAqIEBwYXJhbSB0cmFuc3BhcmVudCBUcnVlIGlmIHRyYW5zcGFyZW50
IGVsc2UgRmFsc2UKKyAgICAgKiBAcmV0dXJucyB0aGUgc2hhZG93IGdlbmVyYXRvciBhbGxvd2lu
ZyBmbHVlbnQgY29kaW5nCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZS5z
ZXRUcmFuc3BhcmVuY3lTaGFkb3cgPSBmdW5jdGlvbiAodHJhbnNwYXJlbnQpIHsKKyAgICAgICAg
dGhpcy5fdHJhbnNwYXJlbmN5U2hhZG93ID0gdHJhbnNwYXJlbnQ7CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbWFpbiBSVFQgY29udGFpbmlu
ZyB0aGUgc2hhZG93IG1hcCAodXN1YWxseSBzdG9yaW5nIGRlcHRoIGZyb20gdGhlIGxpZ2h0IHBv
aW50IG9mIHZpZXcpLgorICAgICAqIEByZXR1cm5zIFRoZSByZW5kZXIgdGFyZ2V0IHRleHR1cmUg
aWYgcHJlc2VudCBvdGhlcndpc2UsIG51bGwKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3Iu
cHJvdG90eXBlLmdldFNoYWRvd01hcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX3NoYWRvd01hcDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIFJUVCB1c2Vk
IGR1cmluZyByZW5kZXJpbmcgKGNhbiBiZSBhIGJsdXJyZWQgdmVyc2lvbiBvZiB0aGUgc2hhZG93
IG1hcCBvciB0aGUgc2hhZG93IG1hcCBpdHNlbGYpLgorICAgICAqIEByZXR1cm5zIFRoZSByZW5k
ZXIgdGFyZ2V0IHRleHR1cmUgaWYgdGhlIHNoYWRvdyBtYXAgaXMgcHJlc2VudCBvdGhlcndpc2Us
IG51bGwKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLmdldFNoYWRvd01h
cEZvclJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3NoYWRvd01h
cDIpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFkb3dNYXAyOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLl9zaGFkb3dNYXA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoYXQgb2JqZWN0CisgICAgICogQHJldHVybnMgIlNoYWRv
d0dlbmVyYXRvciIKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLmdldENs
YXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJTaGFkb3dHZW5lcmF0b3Ii
OworICAgIH07CisgICAgLyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGFkZCBhIG1lc2gg
YW5kIGl0cyBkZXNjZW5kYW50cyB0byB0aGUgbGlzdCBvZiBzaGFkb3cgY2FzdGVycy4KKyAgICAg
KiBAcGFyYW0gbWVzaCBNZXNoIHRvIGFkZAorICAgICAqIEBwYXJhbSBpbmNsdWRlRGVzY2VuZGFu
dHMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBkZXNjZW5kYW50cyBzaG91bGQgYmUgYWRkZWQu
IERlZmF1bHQgdG8gdHJ1ZQorICAgICAqIEByZXR1cm5zIHRoZSBTaGFkb3cgR2VuZXJhdG9yIGl0
c2VsZgorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUuYWRkU2hhZG93Q2Fz
dGVyID0gZnVuY3Rpb24gKG1lc2gsIGluY2x1ZGVEZXNjZW5kYW50cykgeworICAgICAgICB2YXIg
X2E7CisgICAgICAgIGlmIChpbmNsdWRlRGVzY2VuZGFudHMgPT09IHZvaWQgMCkgeyBpbmNsdWRl
RGVzY2VuZGFudHMgPSB0cnVlOyB9CisgICAgICAgIGlmICghdGhpcy5fc2hhZG93TWFwKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX3No
YWRvd01hcC5yZW5kZXJMaXN0KSB7CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dNYXAucmVuZGVy
TGlzdCA9IFtdOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NoYWRvd01hcC5yZW5kZXJMaXN0
LnB1c2gobWVzaCk7CisgICAgICAgIGlmIChpbmNsdWRlRGVzY2VuZGFudHMpIHsKKyAgICAgICAg
ICAgIChfYSA9IHRoaXMuX3NoYWRvd01hcC5yZW5kZXJMaXN0KS5wdXNoLmFwcGx5KF9hLCBtZXNo
LmdldENoaWxkTWVzaGVzKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlbW92ZSBhIG1lc2ggYW5k
IGl0cyBkZXNjZW5kYW50cyBmcm9tIHRoZSBsaXN0IG9mIHNoYWRvdyBjYXN0ZXJzCisgICAgICog
QHBhcmFtIG1lc2ggTWVzaCB0byByZW1vdmUKKyAgICAgKiBAcGFyYW0gaW5jbHVkZURlc2NlbmRh
bnRzIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgZGVzY2VuZGFudHMgc2hvdWxkIGJlIHJlbW92
ZWQuIERlZmF1bHQgdG8gdHJ1ZQorICAgICAqIEByZXR1cm5zIHRoZSBTaGFkb3cgR2VuZXJhdG9y
IGl0c2VsZgorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUucmVtb3ZlU2hh
ZG93Q2FzdGVyID0gZnVuY3Rpb24gKG1lc2gsIGluY2x1ZGVEZXNjZW5kYW50cykgeworICAgICAg
ICBpZiAoaW5jbHVkZURlc2NlbmRhbnRzID09PSB2b2lkIDApIHsgaW5jbHVkZURlc2NlbmRhbnRz
ID0gdHJ1ZTsgfQorICAgICAgICBpZiAoIXRoaXMuX3NoYWRvd01hcCB8fCAhdGhpcy5fc2hhZG93
TWFwLnJlbmRlckxpc3QpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9Cisg
ICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NoYWRvd01hcC5yZW5kZXJMaXN0LmluZGV4T2YobWVz
aCk7CisgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuX3NoYWRv
d01hcC5yZW5kZXJMaXN0LnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGluY2x1ZGVEZXNjZW5kYW50cykgeworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9
IG1lc2guZ2V0Q2hpbGRyZW4oKTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAg
ICAgICB2YXIgY2hpbGQgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTaGFk
b3dDYXN0ZXIoY2hpbGQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYXNzb2NpYXRlZCBs
aWdodCBvYmplY3QuCisgICAgICogQHJldHVybnMgdGhlIGxpZ2h0IGdlbmVyYXRpbmcgdGhlIHNo
YWRvdworICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUuZ2V0TGlnaHQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9saWdodDsKKyAgICB9OworICAgIFNo
YWRvd0dlbmVyYXRvci5wcm90b3R5cGUuX2luaXRpYWxpemVHZW5lcmF0b3IgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRoaXMuX2xpZ2h0Ll9tYXJrTWVzaGVzQXNMaWdodERpcnR5KCk7CisgICAg
ICAgIHRoaXMuX2luaXRpYWxpemVTaGFkb3dNYXAoKTsKKyAgICB9OworICAgIFNoYWRvd0dlbmVy
YXRvci5wcm90b3R5cGUuX2luaXRpYWxpemVTaGFkb3dNYXAgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIC8vIFJlbmRlciB0YXJnZXQKKyAgICAgICAg
dmFyIGVuZ2luZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAoZW5naW5l
LndlYkdMVmVyc2lvbiA+IDEpIHsKKyAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcCA9IG5ldyBf
TWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdKHRoaXMuX2xpZ2h0Lm5hbWUgKyAiX3No
YWRvd01hcCIsIHRoaXMuX21hcFNpemUsIHRoaXMuX3NjZW5lLCBmYWxzZSwgdHJ1ZSwgdGhpcy5f
dGV4dHVyZVR5cGUsIHRoaXMuX2xpZ2h0Lm5lZWRDdWJlKCksIHVuZGVmaW5lZCwgZmFsc2UsIGZh
bHNlKTsKKyAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcC5jcmVhdGVEZXB0aFN0ZW5jaWxUZXh0
dXJlKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siQ29u
c3RhbnRzIl0uTEVTUywgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLl9zaGFkb3dNYXAgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJn
ZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlJlbmRlclRhcmdldFRleHR1
cmUiXSh0aGlzLl9saWdodC5uYW1lICsgIl9zaGFkb3dNYXAiLCB0aGlzLl9tYXBTaXplLCB0aGlz
Ll9zY2VuZSwgZmFsc2UsIHRydWUsIHRoaXMuX3RleHR1cmVUeXBlLCB0aGlzLl9saWdodC5uZWVk
Q3ViZSgpKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zaGFkb3dNYXAud3JhcFUgPSBfTWF0
ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVGV4
dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICB0aGlzLl9zaGFkb3dNYXAud3JhcFYg
PSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
X1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICB0aGlzLl9zaGFkb3dNYXAu
YW5pc290cm9waWNGaWx0ZXJpbmdMZXZlbCA9IDE7CisgICAgICAgIHRoaXMuX3NoYWRvd01hcC51
cGRhdGVTYW1wbGluZ01vZGUoX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV84X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUpOworICAg
ICAgICB0aGlzLl9zaGFkb3dNYXAucmVuZGVyUGFydGljbGVzID0gZmFsc2U7CisgICAgICAgIHRo
aXMuX3NoYWRvd01hcC5pZ25vcmVDYW1lcmFWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIC8vIFJl
Y29yZCBGYWNlIEluZGV4IGJlZm9yZSByZW5kZXIuCisgICAgICAgIHRoaXMuX3NoYWRvd01hcC5v
bkJlZm9yZVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChmYWNlSW5kZXgpIHsKKyAgICAg
ICAgICAgIF90aGlzLl9jdXJyZW50RmFjZUluZGV4ID0gZmFjZUluZGV4OworICAgICAgICAgICAg
aWYgKF90aGlzLl9maWx0ZXIgPT09IFNoYWRvd0dlbmVyYXRvci5GSUxURVJfUENGKSB7CisgICAg
ICAgICAgICAgICAgZW5naW5lLnNldENvbG9yV3JpdGUoZmFsc2UpOworICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICAgICAgLy8gQ3VzdG9tIHJlbmRlciBmdW5jdGlvbi4KKyAgICAgICAg
dGhpcy5fc2hhZG93TWFwLmN1c3RvbVJlbmRlckZ1bmN0aW9uID0gdGhpcy5fcmVuZGVyRm9yU2hh
ZG93TWFwLmJpbmQodGhpcyk7CisgICAgICAgIC8vIEJsdXIgaWYgcmVxdWlyZWQgYWZlciByZW5k
ZXIuCisgICAgICAgIHRoaXMuX3NoYWRvd01hcC5vbkFmdGVyVW5iaW5kT2JzZXJ2YWJsZS5hZGQo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKF90aGlzLl9maWx0ZXIgPT09IFNoYWRvd0dl
bmVyYXRvci5GSUxURVJfUENGKSB7CisgICAgICAgICAgICAgICAgZW5naW5lLnNldENvbG9yV3Jp
dGUodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIV90aGlzLnVzZUJsdXJF
eHBvbmVudGlhbFNoYWRvd01hcCAmJiAhX3RoaXMudXNlQmx1ckNsb3NlRXhwb25lbnRpYWxTaGFk
b3dNYXApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgc2hhZG93TWFwID0gX3RoaXMuZ2V0U2hhZG93TWFwRm9yUmVuZGVyaW5nKCk7Cisg
ICAgICAgICAgICBpZiAoc2hhZG93TWFwKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3NjZW5l
LnBvc3RQcm9jZXNzTWFuYWdlci5kaXJlY3RSZW5kZXIoX3RoaXMuX2JsdXJQb3N0UHJvY2Vzc2Vz
LCBzaGFkb3dNYXAuZ2V0SW50ZXJuYWxUZXh0dXJlKCksIHRydWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICAgICAgLy8gQ2xlYXIgYWNjb3JkaW5nIHRvIHRoZSBjaG9zZW4gZmls
dGVyLgorICAgICAgICB2YXIgY2xlYXJaZXJvID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9yNCJdKDAsIDAsIDAsIDApOworICAgICAgICB2
YXIgY2xlYXJPbmUgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siQ29sb3I0Il0oMS4wLCAxLjAsIDEuMCwgMS4wKTsKKyAgICAgICAgdGhpcy5fc2hh
ZG93TWFwLm9uQ2xlYXJPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZW5naW5lKSB7CisgICAgICAg
ICAgICBpZiAoX3RoaXMuX2ZpbHRlciA9PT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9QQ0YpIHsK
KyAgICAgICAgICAgICAgICBlbmdpbmUuY2xlYXIoY2xlYXJPbmUsIGZhbHNlLCB0cnVlLCBmYWxz
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy51c2VFeHBvbmVu
dGlhbFNoYWRvd01hcCB8fCBfdGhpcy51c2VCbHVyRXhwb25lbnRpYWxTaGFkb3dNYXApIHsKKyAg
ICAgICAgICAgICAgICBlbmdpbmUuY2xlYXIoY2xlYXJaZXJvLCB0cnVlLCB0cnVlLCBmYWxzZSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbmdp
bmUuY2xlYXIoY2xlYXJPbmUsIHRydWUsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CisgICAgICAgIHRoaXMuX3NoYWRvd01hcC5vblJlc2l6ZU9ic2VydmFibGUuYWRk
KGZ1bmN0aW9uIChSVFQpIHsKKyAgICAgICAgICAgIF90aGlzLl9tYXBTaXplID0gUlRULmdldFJl
bmRlclNpemUoKTsKKyAgICAgICAgICAgIF90aGlzLl9saWdodC5fbWFya01lc2hlc0FzTGlnaHRE
aXJ0eSgpOworICAgICAgICAgICAgX3RoaXMucmVjcmVhdGVTaGFkb3dNYXAoKTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICBTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLl9pbml0aWFsaXplQmx1
clJUVEFuZFBvc3RQcm9jZXNzZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKTsKKyAg
ICAgICAgdmFyIHRhcmdldFNpemUgPSB0aGlzLl9tYXBTaXplIC8gdGhpcy5ibHVyU2NhbGU7Cisg
ICAgICAgIGlmICghdGhpcy51c2VLZXJuZWxCbHVyIHx8IHRoaXMuYmx1clNjYWxlICE9PSAxLjAp
IHsKKyAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcDIgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJl
c19yZW5kZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlJlbmRl
clRhcmdldFRleHR1cmUiXSh0aGlzLl9saWdodC5uYW1lICsgIl9zaGFkb3dNYXAyIiwgdGFyZ2V0
U2l6ZSwgdGhpcy5fc2NlbmUsIGZhbHNlLCB0cnVlLCB0aGlzLl90ZXh0dXJlVHlwZSk7CisgICAg
ICAgICAgICB0aGlzLl9zaGFkb3dNYXAyLndyYXBVID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0
dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNT
TU9ERTsKKyAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcDIud3JhcFYgPSBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVGV4dHVyZSJdLkNM
QU1QX0FERFJFU1NNT0RFOworICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwMi51cGRhdGVTYW1w
bGluZ01vZGUoX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLnVzZUtlcm5lbEJsdXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2tlcm5l
bEJsdXJYUG9zdHByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJCbHVyUG9zdFByb2Nlc3MiXSh0aGlzLl9saWdo
dC5uYW1lICsgIktlcm5lbEJsdXJYIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0oMSwgMCksIHRoaXMuYmx1cktlcm5lbCwgMS4w
LCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgZW5naW5lLCBmYWxzZSwg
dGhpcy5fdGV4dHVyZVR5cGUpOworICAgICAgICAgICAgdGhpcy5fa2VybmVsQmx1clhQb3N0cHJv
Y2Vzcy53aWR0aCA9IHRhcmdldFNpemU7CisgICAgICAgICAgICB0aGlzLl9rZXJuZWxCbHVyWFBv
c3Rwcm9jZXNzLmhlaWdodCA9IHRhcmdldFNpemU7CisgICAgICAgICAgICB0aGlzLl9rZXJuZWxC
bHVyWFBvc3Rwcm9jZXNzLm9uQXBwbHlPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZWZmZWN0KSB7
CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInRleHR1cmVTYW1wbGVyIiwgX3Ro
aXMuX3NoYWRvd01hcCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMuX2tlcm5l
bEJsdXJZUG9zdHByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJCbHVyUG9zdFByb2Nlc3MiXSh0aGlzLl9saWdo
dC5uYW1lICsgIktlcm5lbEJsdXJZIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0oMCwgMSksIHRoaXMuYmx1cktlcm5lbCwgMS4w
LCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgZW5naW5lLCBmYWxzZSwg
dGhpcy5fdGV4dHVyZVR5cGUpOworICAgICAgICAgICAgdGhpcy5fa2VybmVsQmx1clhQb3N0cHJv
Y2Vzcy5hdXRvQ2xlYXIgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2tlcm5lbEJsdXJZUG9z
dHByb2Nlc3MuYXV0b0NsZWFyID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVy
ZVR5cGUgPT09IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJf
X1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fa2VybmVsQmx1clhQb3N0cHJvY2Vzcy5wYWNrZWRGbG9hdCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgdGhpcy5fa2VybmVsQmx1cllQb3N0cHJvY2Vzcy5wYWNrZWRGbG9hdCA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9ibHVyUG9zdFByb2Nlc3NlcyA9
IFt0aGlzLl9rZXJuZWxCbHVyWFBvc3Rwcm9jZXNzLCB0aGlzLl9rZXJuZWxCbHVyWVBvc3Rwcm9j
ZXNzXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2JveEJs
dXJQb3N0cHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTBfX1siUG9zdFByb2Nlc3MiXSh0aGlzLl9saWdodC5uYW1lICsgIkRl
cHRoQm94Qmx1ciIsICJkZXB0aEJveEJsdXIiLCBbInNjcmVlblNpemUiLCAiYm94T2Zmc2V0Il0s
IFtdLCAxLjAsIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBlbmdpbmUs
IGZhbHNlLCAiI2RlZmluZSBPRkZTRVQgIiArIHRoaXMuX2JsdXJCb3hPZmZzZXQsIHRoaXMuX3Rl
eHR1cmVUeXBlKTsKKyAgICAgICAgICAgIHRoaXMuX2JveEJsdXJQb3N0cHJvY2Vzcy5vbkFwcGx5
T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAgICAgIGVmZmVj
dC5zZXRGbG9hdDIoInNjcmVlblNpemUiLCB0YXJnZXRTaXplLCB0YXJnZXRTaXplKTsKKyAgICAg
ICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgidGV4dHVyZVNhbXBsZXIiLCBfdGhpcy5fc2hh
ZG93TWFwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5fYm94Qmx1clBvc3Rw
cm9jZXNzLmF1dG9DbGVhciA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fYmx1clBvc3RQcm9j
ZXNzZXMgPSBbdGhpcy5fYm94Qmx1clBvc3Rwcm9jZXNzXTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZS5fcmVuZGVyRm9yU2hhZG93TWFwID0gZnVuY3Rp
b24gKG9wYXF1ZVN1Yk1lc2hlcywgYWxwaGFUZXN0U3ViTWVzaGVzLCB0cmFuc3BhcmVudFN1Yk1l
c2hlcywgZGVwdGhPbmx5U3ViTWVzaGVzKSB7CisgICAgICAgIHZhciBpbmRleDsKKyAgICAgICAg
dmFyIGVuZ2luZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAoZGVwdGhP
bmx5U3ViTWVzaGVzLmxlbmd0aCkgeworICAgICAgICAgICAgZW5naW5lLnNldENvbG9yV3JpdGUo
ZmFsc2UpOworICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZGVwdGhPbmx5U3Vi
TWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlclN1
Yk1lc2hGb3JTaGFkb3dNYXAoZGVwdGhPbmx5U3ViTWVzaGVzLmRhdGFbaW5kZXhdKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVuZ2luZS5zZXRDb2xvcldyaXRlKHRydWUpOworICAgICAg
ICB9CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG9wYXF1ZVN1Yk1lc2hlcy5sZW5n
dGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlclN1Yk1lc2hGb3JTaGFkb3dN
YXAob3BhcXVlU3ViTWVzaGVzLmRhdGFbaW5kZXhdKTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KGluZGV4ID0gMDsgaW5kZXggPCBhbHBoYVRlc3RTdWJNZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7
CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJTdWJNZXNoRm9yU2hhZG93TWFwKGFscGhhVGVzdFN1
Yk1lc2hlcy5kYXRhW2luZGV4XSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3RyYW5z
cGFyZW5jeVNoYWRvdykgeworICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdHJh
bnNwYXJlbnRTdWJNZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fcmVuZGVyU3ViTWVzaEZvclNoYWRvd01hcCh0cmFuc3BhcmVudFN1Yk1lc2hlcy5kYXRhW2lu
ZGV4XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIFNoYWRvd0dlbmVy
YXRvci5wcm90b3R5cGUuX3JlbmRlclN1Yk1lc2hGb3JTaGFkb3dNYXAgPSBmdW5jdGlvbiAoc3Vi
TWVzaCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgbWVzaCA9IHN1
Yk1lc2guZ2V0UmVuZGVyaW5nTWVzaCgpOworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2Vu
ZTsKKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICB2YXIg
bWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7CisgICAgICAgIG1lc2guX2ludGVybmFs
QWJzdHJhY3RNZXNoRGF0YUluZm8uX2lzQWN0aXZlSW50ZXJtZWRpYXRlID0gZmFsc2U7CisgICAg
ICAgIGlmICghbWF0ZXJpYWwgfHwgc3ViTWVzaC52ZXJ0aWNlc0NvdW50ID09PSAwKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gQ3VsbGluZworICAgICAgICBl
bmdpbmUuc2V0U3RhdGUobWF0ZXJpYWwuYmFja0ZhY2VDdWxsaW5nKTsKKyAgICAgICAgLy8gTWFu
YWdpbmcgaW5zdGFuY2VzCisgICAgICAgIHZhciBiYXRjaCA9IG1lc2guX2dldEluc3RhbmNlc1Jl
bmRlckxpc3Qoc3ViTWVzaC5faWQpOworICAgICAgICBpZiAoYmF0Y2gubXVzdFJldHVybikgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBoYXJkd2FyZUluc3Rh
bmNlZFJlbmRlcmluZyA9IChlbmdpbmUuZ2V0Q2FwcygpLmluc3RhbmNlZEFycmF5cykgJiYgKGJh
dGNoLnZpc2libGVJbnN0YW5jZXNbc3ViTWVzaC5faWRdICE9PSBudWxsKSAmJiAoYmF0Y2gudmlz
aWJsZUluc3RhbmNlc1tzdWJNZXNoLl9pZF0gIT09IHVuZGVmaW5lZCk7CisgICAgICAgIGlmICh0
aGlzLmlzUmVhZHkoc3ViTWVzaCwgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcpKSB7CisgICAg
ICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KHRoaXMuX2VmZmVjdCk7CisgICAgICAgICAgICBt
ZXNoLl9iaW5kKHN1Yk1lc2gsIHRoaXMuX2VmZmVjdCwgX01hdGVyaWFsc19tYXRlcmlhbF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlhbCJdLlRyaWFuZ2xlRmlsbE1vZGUpOwor
ICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldEZsb2F0MygiYmlhc0FuZFNjYWxlIiwgdGhpcy5i
aWFzLCB0aGlzLm5vcm1hbEJpYXMsIHRoaXMuZGVwdGhTY2FsZSk7CisgICAgICAgICAgICB0aGlz
Ll9lZmZlY3Quc2V0TWF0cml4KCJ2aWV3UHJvamVjdGlvbiIsIHRoaXMuZ2V0VHJhbnNmb3JtTWF0
cml4KCkpOworICAgICAgICAgICAgaWYgKHRoaXMuZ2V0TGlnaHQoKS5nZXRUeXBlSUQoKSA9PT0g
X0xpZ2h0c19saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJMaWdodCJdLkxJR0hU
VFlQRUlEX0RJUkVDVElPTkFMTElHSFQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3Qu
c2V0VmVjdG9yMygibGlnaHREYXRhIiwgdGhpcy5fY2FjaGVkRGlyZWN0aW9uKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5z
ZXRWZWN0b3IzKCJsaWdodERhdGEiLCB0aGlzLl9jYWNoZWRQb3NpdGlvbik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoc2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fZWZmZWN0LnNldEZsb2F0MigiZGVwdGhWYWx1ZXMiLCB0aGlzLmdldExpZ2h0KCku
Z2V0RGVwdGhNaW5aKHNjZW5lLmFjdGl2ZUNhbWVyYSksIHRoaXMuZ2V0TGlnaHQoKS5nZXREZXB0
aE1pblooc2NlbmUuYWN0aXZlQ2FtZXJhKSArIHRoaXMuZ2V0TGlnaHQoKS5nZXREZXB0aE1heFoo
c2NlbmUuYWN0aXZlQ2FtZXJhKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBBbHBo
YSB0ZXN0CisgICAgICAgICAgICBpZiAobWF0ZXJpYWwgJiYgbWF0ZXJpYWwubmVlZEFscGhhVGVz
dGluZygpKSB7CisgICAgICAgICAgICAgICAgdmFyIGFscGhhVGV4dHVyZSA9IG1hdGVyaWFsLmdl
dEFscGhhVGVzdFRleHR1cmUoKTsKKyAgICAgICAgICAgICAgICBpZiAoYWxwaGFUZXh0dXJlKSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRUZXh0dXJlKCJkaWZmdXNlU2Ft
cGxlciIsIGFscGhhVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5z
ZXRNYXRyaXgoImRpZmZ1c2VNYXRyaXgiLCBhbHBoYVRleHR1cmUuZ2V0VGV4dHVyZU1hdHJpeCgp
IHx8IHRoaXMuX2RlZmF1bHRUZXh0dXJlTWF0cml4KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBCb25lcworICAgICAgICAgICAgaWYgKG1lc2gudXNl
Qm9uZXMgJiYgbWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgJiYgbWVzaC5za2VsZXRvbikg
eworICAgICAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IG1lc2guc2tlbGV0b247CisgICAgICAg
ICAgICAgICAgaWYgKHNrZWxldG9uLmlzVXNpbmdUZXh0dXJlRm9yTWF0cmljZXMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGJvbmVUZXh0dXJlID0gc2tlbGV0b24uZ2V0VHJhbnNmb3JtTWF0
cml4VGV4dHVyZShtZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFib25lVGV4dHVyZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRUZXh0dXJlKCJib25lU2FtcGxl
ciIsIGJvbmVUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldEZs
b2F0KCJib25lVGV4dHVyZVdpZHRoIiwgNC4wICogKHNrZWxldG9uLmJvbmVzLmxlbmd0aCArIDEp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRNYXRyaWNlcygibUJvbmVzIiwgc2tlbGV0b24uZ2V0
VHJhbnNmb3JtTWF0cmljZXMoKG1lc2gpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gTW9ycGggdGFyZ2V0cworICAgICAgICAgICAgX01hdGVyaWFs
c19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJNYXRlcmlhbEhl
bHBlciJdLkJpbmRNb3JwaFRhcmdldFBhcmFtZXRlcnMobWVzaCwgdGhpcy5fZWZmZWN0KTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmZvcmNlQmFja0ZhY2VzT25seSkgeworICAgICAgICAgICAgICAg
IGVuZ2luZS5zZXRTdGF0ZSh0cnVlLCAwLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBPYnNlcnZhYmxlcworICAgICAgICAgICAgdGhpcy5vbkJlZm9yZVNoYWRv
d01hcFJlbmRlck1lc2hPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhtZXNoKTsKKyAgICAgICAg
ICAgIHRoaXMub25CZWZvcmVTaGFkb3dNYXBSZW5kZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyh0aGlzLl9lZmZlY3QpOworICAgICAgICAgICAgLy8gRHJhdworICAgICAgICAgICAgbWVzaC5f
cHJvY2Vzc1JlbmRlcmluZyhzdWJNZXNoLCB0aGlzLl9lZmZlY3QsIF9NYXRlcmlhbHNfbWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWwiXS5UcmlhbmdsZUZpbGxN
b2RlLCBiYXRjaCwgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcsIGZ1bmN0aW9uIChpc0luc3Rh
bmNlLCB3b3JsZCkgeyByZXR1cm4gX3RoaXMuX2VmZmVjdC5zZXRNYXRyaXgoIndvcmxkIiwgd29y
bGQpOyB9KTsKKyAgICAgICAgICAgIGlmICh0aGlzLmZvcmNlQmFja0ZhY2VzT25seSkgeworICAg
ICAgICAgICAgICAgIGVuZ2luZS5zZXRTdGF0ZSh0cnVlLCAwLCBmYWxzZSwgZmFsc2UpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gT2JzZXJ2YWJsZXMKKyAgICAgICAgICAgIHRoaXMu
b25BZnRlclNoYWRvd01hcFJlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMuX2Vm
ZmVjdCk7CisgICAgICAgICAgICB0aGlzLm9uQWZ0ZXJTaGFkb3dNYXBSZW5kZXJNZXNoT2JzZXJ2
YWJsZS5ub3RpZnlPYnNlcnZlcnMobWVzaCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAvLyBOZWVkIHRvIHJlc2V0IHJlZnJlc2ggcmF0ZSBvZiB0aGUgc2hhZG93TWFw
CisgICAgICAgICAgICBpZiAodGhpcy5fc2hhZG93TWFwKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fc2hhZG93TWFwLnJlc2V0UmVmcmVzaENvdW50ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH07CisgICAgU2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZS5fYXBwbHlGaWx0ZXJW
YWx1ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fc2hhZG93TWFwKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuZmlsdGVyID09
PSBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX05PTkUgfHwgdGhpcy5maWx0ZXIgPT09IFNoYWRvd0dl
bmVyYXRvci5GSUxURVJfUENTUykgeworICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwLnVwZGF0
ZVNhbXBsaW5nTW9kZShfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfX1siVGV4dHVyZSJdLk5FQVJFU1RfU0FNUExJTkdNT0RFKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcC51cGRhdGVTYW1w
bGluZ01vZGUoX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZXMgYWxsIHRoZSBhdHRhY2hlZCBlZmZlY3QgdG8g
Y29tcGlsZSB0byBlbmFibGUgcmVuZGVyaW5nIG9ubHkgb25jZSByZWFkeSB2cy4gbGF6eWx5IGNv
bXBpbGluZyBlZmZlY3RzLgorICAgICAqIEBwYXJhbSBvbkNvbXBpbGVkIENhbGxiYWNrIHRyaWdn
ZXJlZCBhdCB0aGUgYW5kIG9mIHRoZSBlZmZlY3RzIGNvbXBpbGF0aW9uCisgICAgICogQHBhcmFt
IG9wdGlvbnMgU2V0cyBvZiBvcHRpb25hbCBvcHRpb25zIGZvcmNpbmcgdGhlIGNvbXBpbGF0aW9u
IHdpdGggZGlmZmVyZW50IG1vZGVzCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yLnByb3Rv
dHlwZS5mb3JjZUNvbXBpbGF0aW9uID0gZnVuY3Rpb24gKG9uQ29tcGlsZWQsIG9wdGlvbnMpIHsK
KyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIGxvY2FsT3B0aW9ucyA9IHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXNzaWduIl0oeyB1c2VJbnN0YW5j
ZXM6IGZhbHNlIH0sIG9wdGlvbnMpOworICAgICAgICB2YXIgc2hhZG93TWFwID0gdGhpcy5nZXRT
aGFkb3dNYXAoKTsKKyAgICAgICAgaWYgKCFzaGFkb3dNYXApIHsKKyAgICAgICAgICAgIGlmIChv
bkNvbXBpbGVkKSB7CisgICAgICAgICAgICAgICAgb25Db21waWxlZCh0aGlzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgcmVuZGVy
TGlzdCA9IHNoYWRvd01hcC5yZW5kZXJMaXN0OworICAgICAgICBpZiAoIXJlbmRlckxpc3QpIHsK
KyAgICAgICAgICAgIGlmIChvbkNvbXBpbGVkKSB7CisgICAgICAgICAgICAgICAgb25Db21waWxl
ZCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgc3ViTWVzaGVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIGZvciAodmFyIF9p
ID0gMCwgcmVuZGVyTGlzdF8xID0gcmVuZGVyTGlzdDsgX2kgPCByZW5kZXJMaXN0XzEubGVuZ3Ro
OyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IHJlbmRlckxpc3RfMVtfaV07CisgICAg
ICAgICAgICBzdWJNZXNoZXMucHVzaC5hcHBseShzdWJNZXNoZXMsIG1lc2guc3ViTWVzaGVzKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoc3ViTWVzaGVzLmxlbmd0aCA9PT0gMCkgeworICAgICAg
ICAgICAgaWYgKG9uQ29tcGlsZWQpIHsKKyAgICAgICAgICAgICAgICBvbkNvbXBpbGVkKHRoaXMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHZhciBjdXJyZW50SW5kZXggPSAwOworICAgICAgICB2YXIgY2hlY2tSZWFkeSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIGlmICghX3RoaXMuX3NjZW5lIHx8ICFfdGhpcy5fc2NlbmUuZ2V0
RW5naW5lKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB3aGlsZSAoX3RoaXMuaXNSZWFkeShzdWJNZXNoZXNbY3VycmVudEluZGV4XSwgbG9j
YWxPcHRpb25zLnVzZUluc3RhbmNlcykpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXgr
KzsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID49IHN1Yk1lc2hlcy5sZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9uQ29tcGlsZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9uQ29tcGlsZWQoX3RoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrUmVhZHksIDE2KTsKKyAgICAgICAgfTsKKyAg
ICAgICAgY2hlY2tSZWFkeSgpOworICAgIH07CisgICAgLyoqCisgICAgICogRm9yY2VzIGFsbCB0
aGUgYXR0YWNoZWQgZWZmZWN0IHRvIGNvbXBpbGUgdG8gZW5hYmxlIHJlbmRlcmluZyBvbmx5IG9u
Y2UgcmVhZHkgdnMuIGxhenlseSBjb21waWxpbmcgZWZmZWN0cy4KKyAgICAgKiBAcGFyYW0gb3B0
aW9ucyBTZXRzIG9mIG9wdGlvbmFsIG9wdGlvbnMgZm9yY2luZyB0aGUgY29tcGlsYXRpb24gd2l0
aCBkaWZmZXJlbnQgbW9kZXMKKyAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZl
cyB3aGVuIHRoZSBjb21waWxhdGlvbiBjb21wbGV0ZXMKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5l
cmF0b3IucHJvdG90eXBlLmZvcmNlQ29tcGlsYXRpb25Bc3luYyA9IGZ1bmN0aW9uIChvcHRpb25z
KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlz
ZShmdW5jdGlvbiAocmVzb2x2ZSkgeworICAgICAgICAgICAgX3RoaXMuZm9yY2VDb21waWxhdGlv
bihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAg
fSwgb3B0aW9ucyk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0ZXJt
aW5lIHdoZXRlciB0aGUgc2hhZG93IGdlbmVyYXRvciBpcyByZWFkeSBvciBub3QgKG1haW5seSBh
bGwgZWZmZWN0cyBhbmQgcmVsYXRlZCBwb3N0IHByb2Nlc3NlcyBuZWVkcyB0byBiZSByZWFkeSku
CisgICAgICogQHBhcmFtIHN1Yk1lc2ggVGhlIHN1Ym1lc2ggd2Ugd2FudCB0byByZW5kZXIgaW4g
dGhlIHNoYWRvdyBtYXAKKyAgICAgKiBAcGFyYW0gdXNlSW5zdGFuY2VzIERlZmluZXMgd2V0aGVy
IHdpbGwgZHJhdyBpbiB0aGUgbWFwIHVzaW5nIGluc3RhbmNlcworICAgICAqIEByZXR1cm5zIHRy
dWUgaWYgcmVhZHkgb3RoZXJ3aXNlLCBmYWxzZQorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRv
ci5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uIChzdWJNZXNoLCB1c2VJbnN0YW5jZXMpIHsK
KyAgICAgICAgdmFyIGRlZmluZXMgPSBbXTsKKyAgICAgICAgaWYgKHRoaXMuX3RleHR1cmVUeXBl
ICE9PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIkNv
bnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCkgeworICAgICAgICAgICAgZGVmaW5l
cy5wdXNoKCIjZGVmaW5lIEZMT0FUIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudXNl
RXhwb25lbnRpYWxTaGFkb3dNYXAgfHwgdGhpcy51c2VCbHVyRXhwb25lbnRpYWxTaGFkb3dNYXAp
IHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBFU00iKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmICh0aGlzLnVzZVBlcmNlbnRhZ2VDbG9zZXJGaWx0ZXJpbmcgfHwgdGhp
cy51c2VDb250YWN0SGFyZGVuaW5nU2hhZG93KSB7CisgICAgICAgICAgICBkZWZpbmVzLnB1c2go
IiNkZWZpbmUgREVQVEhURVhUVVJFIik7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGF0dHJpYnMg
PSBbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVm
ZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgdmFyIG1lc2ggPSBzdWJNZXNoLmdldE1lc2go
KTsKKyAgICAgICAgdmFyIG1hdGVyaWFsID0gc3ViTWVzaC5nZXRNYXRlcmlhbCgpOworICAgICAg
ICAvLyBOb3JtYWwgYmlhcy4KKyAgICAgICAgaWYgKHRoaXMubm9ybWFsQmlhcyAmJiBtZXNoLmlz
VmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKSkgeworICAgICAgICAgICAgYXR0cmli
cy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eEJ1ZmZlciJdLk5vcm1hbEtpbmQpOworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5l
IE5PUk1BTCIpOworICAgICAgICAgICAgaWYgKG1lc2gubm9uVW5pZm9ybVNjYWxpbmcpIHsKKyAg
ICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgTk9OVU5JRk9STVNDQUxJTkciKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLmdldExpZ2h0KCkuZ2V0VHlwZUlE
KCkgPT09IF9MaWdodHNfbGlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTGlnaHQi
XS5MSUdIVFRZUEVJRF9ESVJFQ1RJT05BTExJR0hUKSB7CisgICAgICAgICAgICAgICAgZGVmaW5l
cy5wdXNoKCIjZGVmaW5lIERJUkVDVElPTklOTElHSFREQVRBIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gQWxwaGEgdGVzdAorICAgICAgICBpZiAobWF0ZXJpYWwgJiYg
bWF0ZXJpYWwubmVlZEFscGhhVGVzdGluZygpKSB7CisgICAgICAgICAgICB2YXIgYWxwaGFUZXh0
dXJlID0gbWF0ZXJpYWwuZ2V0QWxwaGFUZXN0VGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKGFs
cGhhVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBBTFBI
QVRFU1QiKTsKKyAgICAgICAgICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQo
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVy
Il0uVVZLaW5kKSkgeworICAgICAgICAgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIFVWMSIpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVBy
ZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
QnVmZmVyIl0uVVYyS2luZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhVGV4dHVy
ZS5jb29yZGluYXRlc0luZGV4ID09PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
aWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVy
dGV4QnVmZmVyIl0uVVYyS2luZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLnB1
c2goIiNkZWZpbmUgVVYyIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQm9uZXMKKyAgICAgICAg
dmFyIGZhbGxiYWNrcyA9IG5ldyBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fWyJFZmZlY3RGYWxsYmFja3MiXSgpOworICAgICAgICBpZiAobWVzaC51c2VCb25l
cyAmJiBtZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBtZXNoLnNrZWxldG9uKSB7Cisg
ICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCk7CisgICAgICAg
ICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCk7CisgICAgICAgICAgICBp
ZiAobWVzaC5udW1Cb25lSW5mbHVlbmNlcnMgPiA0KSB7CisgICAgICAgICAgICAgICAgYXR0cmli
cy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZCk7CisgICAgICAgICAgICAgICAgYXR0
cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
cnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0V4dHJhS2luZCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBtZXNoLnNrZWxldG9uOworICAgICAgICAgICAgZGVm
aW5lcy5wdXNoKCIjZGVmaW5lIE5VTV9CT05FX0lORkxVRU5DRVJTICIgKyBtZXNoLm51bUJvbmVJ
bmZsdWVuY2Vycyk7CisgICAgICAgICAgICBpZiAobWVzaC5udW1Cb25lSW5mbHVlbmNlcnMgPiAw
KSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZENQVVNraW5uaW5nRmFsbGJhY2soMCwg
bWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2tlbGV0b24uaXNVc2luZ1Rl
eHR1cmVGb3JNYXRyaWNlcykgeworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmlu
ZSBCT05FVEVYVFVSRSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEJvbmVzUGVyTWVzaCAiICsgKHNrZWxl
dG9uLmJvbmVzLmxlbmd0aCArIDEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBOVU1fQk9ORV9JTkZM
VUVOQ0VSUyAwIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gTW9ycGggdGFyZ2V0cworICAgICAg
ICB2YXIgbWFuYWdlciA9IG1lc2gubW9ycGhUYXJnZXRNYW5hZ2VyOworICAgICAgICB2YXIgbW9y
cGhJbmZsdWVuY2VycyA9IDA7CisgICAgICAgIGlmIChtYW5hZ2VyKSB7CisgICAgICAgICAgICBp
ZiAobWFuYWdlci5udW1JbmZsdWVuY2VycyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVz
LnB1c2goIiNkZWZpbmUgTU9SUEhUQVJHRVRTIik7CisgICAgICAgICAgICAgICAgbW9ycGhJbmZs
dWVuY2VycyA9IG1hbmFnZXIubnVtSW5mbHVlbmNlcnM7CisgICAgICAgICAgICAgICAgZGVmaW5l
cy5wdXNoKCIjZGVmaW5lIE5VTV9NT1JQSF9JTkZMVUVOQ0VSUyAiICsgbW9ycGhJbmZsdWVuY2Vy
cyk7CisgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVBdHRyaWJ1dGVzRm9y
TW9ycGhUYXJnZXRzSW5mbHVlbmNlcnMoYXR0cmlicywgbWVzaCwgbW9ycGhJbmZsdWVuY2Vycyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5zdGFuY2VzCisgICAgICAg
IGlmICh1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBJ
TlNUQU5DRVMiKTsKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siTWF0ZXJpYWxIZWxwZXIiXS5QdXNoQXR0cmlidXRlc0Zv
ckluc3RhbmNlcyhhdHRyaWJzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5jdXN0b21T
aGFkZXJPcHRpb25zKSB7CisgICAgICAgICAgICBpZiAodGhpcy5jdXN0b21TaGFkZXJPcHRpb25z
LmRlZmluZXMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5j
dXN0b21TaGFkZXJPcHRpb25zLmRlZmluZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBkZWZpbmUgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgICAg
IGlmIChkZWZpbmVzLmluZGV4T2YoZGVmaW5lKSA9PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMucHVzaChkZWZpbmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEdldCBj
b3JyZWN0IGVmZmVjdAorICAgICAgICB2YXIgam9pbiA9IGRlZmluZXMuam9pbigiXG4iKTsKKyAg
ICAgICAgaWYgKHRoaXMuX2NhY2hlZERlZmluZXMgIT09IGpvaW4pIHsKKyAgICAgICAgICAgIHRo
aXMuX2NhY2hlZERlZmluZXMgPSBqb2luOworICAgICAgICAgICAgdmFyIHNoYWRlck5hbWUgPSAi
c2hhZG93TWFwIjsKKyAgICAgICAgICAgIHZhciB1bmlmb3JtcyA9IFsid29ybGQiLCAibUJvbmVz
IiwgInZpZXdQcm9qZWN0aW9uIiwgImRpZmZ1c2VNYXRyaXgiLCAibGlnaHREYXRhIiwgImRlcHRo
VmFsdWVzIiwgImJpYXNBbmRTY2FsZSIsICJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLCAiYm9uZVRl
eHR1cmVXaWR0aCJdOworICAgICAgICAgICAgdmFyIHNhbXBsZXJzID0gWyJkaWZmdXNlU2FtcGxl
ciIsICJib25lU2FtcGxlciJdOworICAgICAgICAgICAgLy8gQ3VzdG9tIHNoYWRlcj8KKyAgICAg
ICAgICAgIGlmICh0aGlzLmN1c3RvbVNoYWRlck9wdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBz
aGFkZXJOYW1lID0gdGhpcy5jdXN0b21TaGFkZXJPcHRpb25zLnNoYWRlck5hbWU7CisgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2hhZGVyT3B0aW9ucy5hdHRyaWJ1dGVzKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gMCwgX2MgPSB0aGlzLmN1c3RvbVNoYWRlck9w
dGlvbnMuYXR0cmlidXRlczsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBhdHRyaWIgPSBfY1tfYl07CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYXR0cmlicy5pbmRleE9mKGF0dHJpYikgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXR0cmlicy5wdXNoKGF0dHJpYik7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHRoaXMuY3VzdG9tU2hhZGVyT3B0aW9ucy51bmlmb3JtcykgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHZhciBfZCA9IDAsIF9lID0gdGhpcy5jdXN0b21TaGFkZXJPcHRpb25zLnVu
aWZvcm1zOyBfZCA8IF9lLmxlbmd0aDsgX2QrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHVuaWZvcm0gPSBfZVtfZF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pZm9y
bXMuaW5kZXhPZih1bmlmb3JtKSA9PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bmlmb3Jtcy5wdXNoKHVuaWZvcm0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICh0aGlzLmN1c3RvbVNoYWRlck9wdGlvbnMuc2FtcGxlcnMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgX2YgPSAwLCBfZyA9IHRoaXMuY3VzdG9tU2hhZGVyT3B0aW9ucy5zYW1wbGVy
czsgX2YgPCBfZy5sZW5ndGg7IF9mKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBz
YW1wbGVyID0gX2dbX2ZdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJzLmlu
ZGV4T2Yoc2FtcGxlcikgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ft
cGxlcnMucHVzaChzYW1wbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX2VmZmVjdCA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZUVmZmVjdChz
aGFkZXJOYW1lLCBhdHRyaWJzLCB1bmlmb3Jtcywgc2FtcGxlcnMsIGpvaW4sIGZhbGxiYWNrcywg
dW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgbWF4U2ltdWx0YW5lb3VzTW9ycGhUYXJnZXRzOiBtb3Jw
aEluZmx1ZW5jZXJzIH0pOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fZWZmZWN0Lmlz
UmVhZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLnVzZUJsdXJFeHBvbmVudGlhbFNoYWRvd01hcCB8fCB0aGlzLnVzZUJsdXJDbG9z
ZUV4cG9uZW50aWFsU2hhZG93TWFwKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2JsdXJQb3N0
UHJvY2Vzc2VzIHx8ICF0aGlzLl9ibHVyUG9zdFByb2Nlc3Nlcy5sZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9pbml0aWFsaXplQmx1clJUVEFuZFBvc3RQcm9jZXNzZXMoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fa2VybmVsQmx1clhQb3N0cHJv
Y2VzcyAmJiAhdGhpcy5fa2VybmVsQmx1clhQb3N0cHJvY2Vzcy5pc1JlYWR5KCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fa2VybmVs
Qmx1cllQb3N0cHJvY2VzcyAmJiAhdGhpcy5fa2VybmVsQmx1cllQb3N0cHJvY2Vzcy5pc1JlYWR5
KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fYm94Qmx1clBvc3Rwcm9jZXNzICYmICF0aGlzLl9ib3hCbHVyUG9zdHByb2Nlc3MuaXNS
ZWFkeSgpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlIGFsbCB0aGUgZGVm
aW5lcyBpbiBhIG1hdGVyaWFsIHJlbHlpbmcgb24gYSBzaGFkb3cgbWFwIGF0IHRoZSBzcGVjaWZp
ZWQgbGlnaHQgaW5kZXguCisgICAgICogQHBhcmFtIGRlZmluZXMgRGVmaW5lcyBvZiB0aGUgbWF0
ZXJpYWwgd2Ugd2FudCB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gbGlnaHRJbmRleCBJbmRleCBv
ZiB0aGUgbGlnaHQgaW4gdGhlIGVuYWJsZWQgbGlnaHQgbGlzdCBvZiB0aGUgbWF0ZXJpYWwKKyAg
ICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3IucHJvdG90eXBlLnByZXBhcmVEZWZpbmVzID0gZnVu
Y3Rpb24gKGRlZmluZXMsIGxpZ2h0SW5kZXgpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5f
c2NlbmU7CisgICAgICAgIHZhciBsaWdodCA9IHRoaXMuX2xpZ2h0OworICAgICAgICBpZiAoIXNj
ZW5lLnNoYWRvd3NFbmFibGVkIHx8ICFsaWdodC5zaGFkb3dFbmFibGVkKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGVmaW5lc1siU0hBRE9XIiArIGxpZ2h0SW5k
ZXhdID0gdHJ1ZTsKKyAgICAgICAgaWYgKHRoaXMudXNlQ29udGFjdEhhcmRlbmluZ1NoYWRvdykg
eworICAgICAgICAgICAgZGVmaW5lc1siU0hBRE9XUENTUyIgKyBsaWdodEluZGV4XSA9IHRydWU7
CisgICAgICAgICAgICBpZiAodGhpcy5fZmlsdGVyaW5nUXVhbGl0eSA9PT0gU2hhZG93R2VuZXJh
dG9yLlFVQUxJVFlfTE9XKSB7CisgICAgICAgICAgICAgICAgZGVmaW5lc1siU0hBRE9XTE9XUVVB
TElUWSIgKyBsaWdodEluZGV4XSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIGlmICh0aGlzLl9maWx0ZXJpbmdRdWFsaXR5ID09PSBTaGFkb3dHZW5lcmF0b3IuUVVBTElU
WV9NRURJVU0pIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzWyJTSEFET1dNRURJVU1RVUFMSVRZ
IiArIGxpZ2h0SW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGVs
c2UgZGVmYXVsdCB0byBoaWdoLgorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnVzZVBlcmNl
bnRhZ2VDbG9zZXJGaWx0ZXJpbmcpIHsKKyAgICAgICAgICAgIGRlZmluZXNbIlNIQURPV1BDRiIg
KyBsaWdodEluZGV4XSA9IHRydWU7CisgICAgICAgICAgICBpZiAodGhpcy5fZmlsdGVyaW5nUXVh
bGl0eSA9PT0gU2hhZG93R2VuZXJhdG9yLlFVQUxJVFlfTE9XKSB7CisgICAgICAgICAgICAgICAg
ZGVmaW5lc1siU0hBRE9XTE9XUVVBTElUWSIgKyBsaWdodEluZGV4XSA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9maWx0ZXJpbmdRdWFsaXR5ID09PSBT
aGFkb3dHZW5lcmF0b3IuUVVBTElUWV9NRURJVU0pIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVz
WyJTSEFET1dNRURJVU1RVUFMSVRZIiArIGxpZ2h0SW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIGVsc2UgZGVmYXVsdCB0byBoaWdoLgorICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHRoaXMudXNlUG9pc3NvblNhbXBsaW5nKSB7CisgICAgICAgICAgICBkZWZp
bmVzWyJTSEFET1dQT0lTU09OIiArIGxpZ2h0SW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmICh0aGlzLnVzZUV4cG9uZW50aWFsU2hhZG93TWFwIHx8IHRoaXMudXNlQmx1
ckV4cG9uZW50aWFsU2hhZG93TWFwKSB7CisgICAgICAgICAgICBkZWZpbmVzWyJTSEFET1dFU00i
ICsgbGlnaHRJbmRleF0gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMu
dXNlQ2xvc2VFeHBvbmVudGlhbFNoYWRvd01hcCB8fCB0aGlzLnVzZUJsdXJDbG9zZUV4cG9uZW50
aWFsU2hhZG93TWFwKSB7CisgICAgICAgICAgICBkZWZpbmVzWyJTSEFET1dDTE9TRUVTTSIgKyBs
aWdodEluZGV4XSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxpZ2h0Lm5lZWRDdWJl
KCkpIHsKKyAgICAgICAgICAgIGRlZmluZXNbIlNIQURPV0NVQkUiICsgbGlnaHRJbmRleF0gPSB0
cnVlOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgc2hhZG93
IHJlbGF0ZWQgaW5mb3JtYXRpb24gaW5zaWRlIG9mIGFuIGVmZmVjdCAoaW5mb3JtYXRpb24gbGlr
ZSBuZWFyLCBmYXIsIGRhcmtuZXNzLi4uCisgICAgICogZGVmaW5lZCBpbiB0aGUgZ2VuZXJhdG9y
IGJ1dCBpbXBhY3RpbmcgdGhlIGVmZmVjdCkuCisgICAgICogQHBhcmFtIGxpZ2h0SW5kZXggSW5k
ZXggb2YgdGhlIGxpZ2h0IGluIHRoZSBlbmFibGVkIGxpZ2h0IGxpc3Qgb2YgdGhlIG1hdGVyaWFs
IG93bmluZyB0aGUgZWZmZWN0CisgICAgICogQHBhcmFtIGVmZmVjdCBUaGUgZWZmZWN0IHdlIGFy
ZSBiaW5maW5nIHRoZSBpbmZvcm1hdGlvbiBmb3IKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0
b3IucHJvdG90eXBlLmJpbmRTaGFkb3dMaWdodCA9IGZ1bmN0aW9uIChsaWdodEluZGV4LCBlZmZl
Y3QpIHsKKyAgICAgICAgdmFyIGxpZ2h0ID0gdGhpcy5fbGlnaHQ7CisgICAgICAgIHZhciBzY2Vu
ZSA9IHRoaXMuX3NjZW5lOworICAgICAgICBpZiAoIXNjZW5lLnNoYWRvd3NFbmFibGVkIHx8ICFs
aWdodC5zaGFkb3dFbmFibGVkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGNhbWVyYSA9IHNjZW5lLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAgaWYgKCFjYW1l
cmEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2hhZG93
TWFwID0gdGhpcy5nZXRTaGFkb3dNYXAoKTsKKyAgICAgICAgaWYgKCFzaGFkb3dNYXApIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxpZ2h0Lm5lZWRDdWJl
KCkpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRNYXRyaXgoImxpZ2h0TWF0cml4IiArIGxpZ2h0
SW5kZXgsIHRoaXMuZ2V0VHJhbnNmb3JtTWF0cml4KCkpOworICAgICAgICB9CisgICAgICAgIC8v
IE9ubHkgUENGIHVzZXMgZGVwdGggc3RlbmNpbCB0ZXh0dXJlLgorICAgICAgICBpZiAodGhpcy5f
ZmlsdGVyID09PSBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX1BDRikgeworICAgICAgICAgICAgZWZm
ZWN0LnNldERlcHRoU3RlbmNpbFRleHR1cmUoInNoYWRvd1NhbXBsZXIiICsgbGlnaHRJbmRleCwg
dGhpcy5nZXRTaGFkb3dNYXBGb3JSZW5kZXJpbmcoKSk7CisgICAgICAgICAgICBsaWdodC5fdW5p
Zm9ybUJ1ZmZlci51cGRhdGVGbG9hdDQoInNoYWRvd3NJbmZvIiwgdGhpcy5nZXREYXJrbmVzcygp
LCBzaGFkb3dNYXAuZ2V0U2l6ZSgpLndpZHRoLCAxIC8gc2hhZG93TWFwLmdldFNpemUoKS53aWR0
aCwgdGhpcy5mcnVzdHVtRWRnZUZhbGxvZmYsIGxpZ2h0SW5kZXgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHRoaXMuX2ZpbHRlciA9PT0gU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9QQ1NT
KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgic2hhZG93U2Ft
cGxlciIgKyBsaWdodEluZGV4LCB0aGlzLmdldFNoYWRvd01hcEZvclJlbmRlcmluZygpKTsKKyAg
ICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJkZXB0aFNhbXBsZXIiICsgbGlnaHRJbmRleCwg
dGhpcy5nZXRTaGFkb3dNYXBGb3JSZW5kZXJpbmcoKSk7CisgICAgICAgICAgICBsaWdodC5fdW5p
Zm9ybUJ1ZmZlci51cGRhdGVGbG9hdDQoInNoYWRvd3NJbmZvIiwgdGhpcy5nZXREYXJrbmVzcygp
LCAxIC8gc2hhZG93TWFwLmdldFNpemUoKS53aWR0aCwgdGhpcy5fY29udGFjdEhhcmRlbmluZ0xp
Z2h0U2l6ZVVWUmF0aW8gKiBzaGFkb3dNYXAuZ2V0U2l6ZSgpLndpZHRoLCB0aGlzLmZydXN0dW1F
ZGdlRmFsbG9mZiwgbGlnaHRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgic2hhZG93U2FtcGxlciIgKyBsaWdodEluZGV4LCB0
aGlzLmdldFNoYWRvd01hcEZvclJlbmRlcmluZygpKTsKKyAgICAgICAgICAgIGxpZ2h0Ll91bmlm
b3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgic2hhZG93c0luZm8iLCB0aGlzLmdldERhcmtuZXNzKCks
IHRoaXMuYmx1clNjYWxlIC8gc2hhZG93TWFwLmdldFNpemUoKS53aWR0aCwgdGhpcy5kZXB0aFNj
YWxlLCB0aGlzLmZydXN0dW1FZGdlRmFsbG9mZiwgbGlnaHRJbmRleCk7CisgICAgICAgIH0KKyAg
ICAgICAgbGlnaHQuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQyKCJkZXB0aFZhbHVlcyIsIHRo
aXMuZ2V0TGlnaHQoKS5nZXREZXB0aE1pblooY2FtZXJhKSwgdGhpcy5nZXRMaWdodCgpLmdldERl
cHRoTWluWihjYW1lcmEpICsgdGhpcy5nZXRMaWdodCgpLmdldERlcHRoTWF4WihjYW1lcmEpLCBs
aWdodEluZGV4KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCB1c2VkIHRvIHByb2plY3QgdGhlIG1lc2hlcyBpbnRvIHRoZSBtYXAgZnJvbSB0
aGUgbGlnaHQgcG9pbnQgb2Ygdmlldy4KKyAgICAgKiAoZXEgdG8gc2hhZG93IHByamVjdGlvbiBt
YXRyaXggKiBsaWdodCB0cmFuc2Zvcm0gbWF0cml4KQorICAgICAqIEByZXR1cm5zIFRoZSB0cmFu
c2Zvcm0gbWF0cml4IHVzZWQgdG8gY3JlYXRlIHRoZSBzaGFkb3cgbWFwCisgICAgICovCisgICAg
U2hhZG93R2VuZXJhdG9yLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1NYXRyaXggPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3NjZW5lOworICAgICAgICBpZiAodGhpcy5f
Y3VycmVudFJlbmRlcklEID09PSBzY2VuZS5nZXRSZW5kZXJJZCgpICYmIHRoaXMuX2N1cnJlbnRG
YWNlSW5kZXhDYWNoZSA9PT0gdGhpcy5fY3VycmVudEZhY2VJbmRleCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3RyYW5zZm9ybU1hdHJpeDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9j
dXJyZW50UmVuZGVySUQgPSBzY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICB0aGlzLl9jdXJy
ZW50RmFjZUluZGV4Q2FjaGUgPSB0aGlzLl9jdXJyZW50RmFjZUluZGV4OworICAgICAgICB2YXIg
bGlnaHRQb3NpdGlvbiA9IHRoaXMuX2xpZ2h0LnBvc2l0aW9uOworICAgICAgICBpZiAodGhpcy5f
bGlnaHQuY29tcHV0ZVRyYW5zZm9ybWVkSW5mb3JtYXRpb24oKSkgeworICAgICAgICAgICAgbGln
aHRQb3NpdGlvbiA9IHRoaXMuX2xpZ2h0LnRyYW5zZm9ybWVkUG9zaXRpb247CisgICAgICAgIH0K
KyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlY3RvcjMiXS5Ob3JtYWxpemVUb1JlZih0aGlzLl9saWdodC5nZXRTaGFkb3dEaXJlY3Rpb24o
dGhpcy5fY3VycmVudEZhY2VJbmRleCksIHRoaXMuX2xpZ2h0RGlyZWN0aW9uKTsKKyAgICAgICAg
aWYgKE1hdGguYWJzKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJWZWN0b3IzIl0uRG90KHRoaXMuX2xpZ2h0RGlyZWN0aW9uLCBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlVwKCkpKSA9PT0gMS4w
KSB7CisgICAgICAgICAgICB0aGlzLl9saWdodERpcmVjdGlvbi56ID0gMC4wMDAwMDAwMDAwMDAx
OyAvLyBSZXF1aXJlZCB0byBhdm9pZCBwZXJmZWN0bHkgcGVycGVuZGljdWxhciBsaWdodAorICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLl9saWdodC5uZWVkUHJvamVjdGlvbk1hdHJpeENvbXB1
dGUoKSB8fCAhdGhpcy5fY2FjaGVkUG9zaXRpb24gfHwgIXRoaXMuX2NhY2hlZERpcmVjdGlvbiB8
fCAhbGlnaHRQb3NpdGlvbi5lcXVhbHModGhpcy5fY2FjaGVkUG9zaXRpb24pIHx8ICF0aGlzLl9s
aWdodERpcmVjdGlvbi5lcXVhbHModGhpcy5fY2FjaGVkRGlyZWN0aW9uKSkgeworICAgICAgICAg
ICAgdGhpcy5fY2FjaGVkUG9zaXRpb24uY29weUZyb20obGlnaHRQb3NpdGlvbik7CisgICAgICAg
ICAgICB0aGlzLl9jYWNoZWREaXJlY3Rpb24uY29weUZyb20odGhpcy5fbGlnaHREaXJlY3Rpb24p
OworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIk1hdHJpeCJdLkxvb2tBdExIVG9SZWYobGlnaHRQb3NpdGlvbiwgbGlnaHRQb3NpdGlv
bi5hZGQodGhpcy5fbGlnaHREaXJlY3Rpb24pLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlVwKCksIHRoaXMuX3ZpZXdNYXRyaXgpOwor
ICAgICAgICAgICAgdmFyIHNoYWRvd01hcCA9IHRoaXMuZ2V0U2hhZG93TWFwKCk7CisgICAgICAg
ICAgICBpZiAoc2hhZG93TWFwKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlbmRlckxpc3QgPSBz
aGFkb3dNYXAucmVuZGVyTGlzdDsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyTGlzdCkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9saWdodC5zZXRTaGFkb3dQcm9qZWN0aW9uTWF0cml4
KHRoaXMuX3Byb2plY3Rpb25NYXRyaXgsIHRoaXMuX3ZpZXdNYXRyaXgsIHJlbmRlckxpc3QpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3ZpZXdN
YXRyaXgubXVsdGlwbHlUb1JlZih0aGlzLl9wcm9qZWN0aW9uTWF0cml4LCB0aGlzLl90cmFuc2Zv
cm1NYXRyaXgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1NYXRy
aXg7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWNyZWF0ZXMgdGhlIHNoYWRvdyBtYXAgZGVw
ZW5kZW5jaWVzIGxpa2UgUlRUIGFuZCBwb3N0IHByb2Nlc3Nlcy4gVGhpcyBjYW4gYmUgdXNlZCBk
dXJpbmcgdGhlIHN3aXRjaCBiZXR3ZWVuCisgICAgICogQ3ViZSBhbmQgMkQgdGV4dHVyZXMgZm9y
IGluc3RhbmNlLgorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUucmVjcmVh
dGVTaGFkb3dNYXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzaGFkb3dNYXAgPSB0aGlz
Ll9zaGFkb3dNYXA7CisgICAgICAgIGlmICghc2hhZG93TWFwKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gVHJhY2sgcmVuZGVyIGxpc3QuCisgICAgICAgIHZh
ciByZW5kZXJMaXN0ID0gc2hhZG93TWFwLnJlbmRlckxpc3Q7CisgICAgICAgIC8vIENsZWFuIHVw
IGV4aXN0aW5nIGRhdGEuCisgICAgICAgIHRoaXMuX2Rpc3Bvc2VSVFRhbmRQb3N0UHJvY2Vzc2Vz
KCk7CisgICAgICAgIC8vIFJlaW5pdGlhbGl6ZXMuCisgICAgICAgIHRoaXMuX2luaXRpYWxpemVH
ZW5lcmF0b3IoKTsKKyAgICAgICAgLy8gUmVhZmZlY3QgdGhlIGZpbHRlciB0byBlbnN1cmUgYSBj
b3JyZWN0IGZhbGxiYWNrIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgdGhpcy5maWx0ZXIgPSB0aGlz
LmZpbHRlcjsKKyAgICAgICAgLy8gUmVhZmZlY3QgdGhlIGZpbHRlci4KKyAgICAgICAgdGhpcy5f
YXBwbHlGaWx0ZXJWYWx1ZXMoKTsKKyAgICAgICAgLy8gUmVhZmZlY3QgUmVuZGVyIExpc3QuCisg
ICAgICAgIHRoaXMuX3NoYWRvd01hcC5yZW5kZXJMaXN0ID0gcmVuZGVyTGlzdDsKKyAgICB9Owor
ICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUuX2Rpc3Bvc2VCbHVyUG9zdFByb2Nlc3NlcyA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3NoYWRvd01hcDIpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3NoYWRvd01hcDIuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fc2hhZG93
TWFwMiA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2JveEJsdXJQb3N0cHJv
Y2VzcykgeworICAgICAgICAgICAgdGhpcy5fYm94Qmx1clBvc3Rwcm9jZXNzLmRpc3Bvc2UoKTsK
KyAgICAgICAgICAgIHRoaXMuX2JveEJsdXJQb3N0cHJvY2VzcyA9IG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuX2tlcm5lbEJsdXJYUG9zdHByb2Nlc3MpIHsKKyAgICAgICAgICAg
IHRoaXMuX2tlcm5lbEJsdXJYUG9zdHByb2Nlc3MuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhp
cy5fa2VybmVsQmx1clhQb3N0cHJvY2VzcyA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX2tlcm5lbEJsdXJZUG9zdHByb2Nlc3MpIHsKKyAgICAgICAgICAgIHRoaXMuX2tlcm5l
bEJsdXJZUG9zdHByb2Nlc3MuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fa2VybmVsQmx1
cllQb3N0cHJvY2VzcyA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYmx1clBvc3RQ
cm9jZXNzZXMgPSBbXTsKKyAgICB9OworICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUuX2Rp
c3Bvc2VSVFRhbmRQb3N0UHJvY2Vzc2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhp
cy5fc2hhZG93TWFwKSB7CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dNYXAuZGlzcG9zZSgpOwor
ICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9kaXNwb3NlQmx1clBvc3RQcm9jZXNzZXMoKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IERpc3Bvc2VzIHRoZSBTaGFkb3dHZW5lcmF0b3IuCisgICAgICogUmV0dXJucyBub3RoaW5nLgor
ICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5fZGlzcG9zZVJUVGFuZFBvc3RQcm9jZXNzZXMoKTsKKyAgICAg
ICAgaWYgKHRoaXMuX2xpZ2h0KSB7CisgICAgICAgICAgICB0aGlzLl9saWdodC5fc2hhZG93R2Vu
ZXJhdG9yID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX2xpZ2h0Ll9tYXJrTWVzaGVzQXNMaWdo
dERpcnR5KCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vbkJlZm9yZVNoYWRvd01hcFJlbmRl
ck1lc2hPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25CZWZvcmVTaGFkb3dNYXBS
ZW5kZXJPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25BZnRlclNoYWRvd01hcFJl
bmRlck1lc2hPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25BZnRlclNoYWRvd01h
cFJlbmRlck9ic2VydmFibGUuY2xlYXIoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlh
bGl6ZXMgdGhlIHNoYWRvdyBnZW5lcmF0b3Igc2V0dXAgdG8gYSBqc29uIG9iamVjdC4KKyAgICAg
KiBAcmV0dXJucyBUaGUgc2VyaWFsaXplZCBKU09OIG9iamVjdAorICAgICAqLworICAgIFNoYWRv
d0dlbmVyYXRvci5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2
YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IHt9OworICAgICAgICB2YXIgc2hhZG93TWFwID0gdGhp
cy5nZXRTaGFkb3dNYXAoKTsKKyAgICAgICAgaWYgKCFzaGFkb3dNYXApIHsKKyAgICAgICAgICAg
IHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgICAgICB9CisgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QubGlnaHRJZCA9IHRoaXMuX2xpZ2h0LmlkOworICAgICAgICBzZXJpYWxpemF0
aW9uT2JqZWN0Lm1hcFNpemUgPSBzaGFkb3dNYXAuZ2V0UmVuZGVyU2l6ZSgpOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LnVzZUV4cG9uZW50aWFsU2hhZG93TWFwID0gdGhpcy51c2VFeHBv
bmVudGlhbFNoYWRvd01hcDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51c2VCbHVyRXhw
b25lbnRpYWxTaGFkb3dNYXAgPSB0aGlzLnVzZUJsdXJFeHBvbmVudGlhbFNoYWRvd01hcDsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51c2VDbG9zZUV4cG9uZW50aWFsU2hhZG93TWFwID0g
dGhpcy51c2VCbHVyRXhwb25lbnRpYWxTaGFkb3dNYXA7CisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QudXNlQmx1ckNsb3NlRXhwb25lbnRpYWxTaGFkb3dNYXAgPSB0aGlzLnVzZUJsdXJFeHBv
bmVudGlhbFNoYWRvd01hcDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51c2VQb2lzc29u
U2FtcGxpbmcgPSB0aGlzLnVzZVBvaXNzb25TYW1wbGluZzsKKyAgICAgICAgc2VyaWFsaXphdGlv
bk9iamVjdC5mb3JjZUJhY2tGYWNlc09ubHkgPSB0aGlzLmZvcmNlQmFja0ZhY2VzT25seTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5kZXB0aFNjYWxlID0gdGhpcy5kZXB0aFNjYWxlOwor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmRhcmtuZXNzID0gdGhpcy5nZXREYXJrbmVzcygp
OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmJsdXJCb3hPZmZzZXQgPSB0aGlzLmJsdXJC
b3hPZmZzZXQ7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYmx1cktlcm5lbCA9IHRoaXMu
Ymx1cktlcm5lbDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5ibHVyU2NhbGUgPSB0aGlz
LmJsdXJTY2FsZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51c2VLZXJuZWxCbHVyID0g
dGhpcy51c2VLZXJuZWxCbHVyOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRyYW5zcGFy
ZW5jeVNoYWRvdyA9IHRoaXMuX3RyYW5zcGFyZW5jeVNoYWRvdzsKKyAgICAgICAgc2VyaWFsaXph
dGlvbk9iamVjdC5mcnVzdHVtRWRnZUZhbGxvZmYgPSB0aGlzLmZydXN0dW1FZGdlRmFsbG9mZjsK
KyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5iaWFzID0gdGhpcy5iaWFzOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0Lm5vcm1hbEJpYXMgPSB0aGlzLm5vcm1hbEJpYXM7CisgICAgICAg
IHNlcmlhbGl6YXRpb25PYmplY3QudXNlUGVyY2VudGFnZUNsb3NlckZpbHRlcmluZyA9IHRoaXMu
dXNlUGVyY2VudGFnZUNsb3NlckZpbHRlcmluZzsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC51c2VDb250YWN0SGFyZGVuaW5nU2hhZG93ID0gdGhpcy51c2VDb250YWN0SGFyZGVuaW5nU2hh
ZG93OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmZpbHRlcmluZ1F1YWxpdHkgPSB0aGlz
LmZpbHRlcmluZ1F1YWxpdHk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29udGFjdEhh
cmRlbmluZ0xpZ2h0U2l6ZVVWUmF0aW8gPSB0aGlzLmNvbnRhY3RIYXJkZW5pbmdMaWdodFNpemVV
VlJhdGlvOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJlbmRlckxpc3QgPSBbXTsKKyAg
ICAgICAgaWYgKHNoYWRvd01hcC5yZW5kZXJMaXN0KSB7CisgICAgICAgICAgICBmb3IgKHZhciBt
ZXNoSW5kZXggPSAwOyBtZXNoSW5kZXggPCBzaGFkb3dNYXAucmVuZGVyTGlzdC5sZW5ndGg7IG1l
c2hJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBzaGFkb3dNYXAucmVuZGVy
TGlzdFttZXNoSW5kZXhdOworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmVu
ZGVyTGlzdC5wdXNoKG1lc2guaWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogUGFy
c2VzIGEgc2VyaWFsaXplZCBTaGFkb3dHZW5lcmF0b3IgYW5kIHJldHVybnMgYSBuZXcgU2hhZG93
R2VuZXJhdG9yLgorICAgICAqIEBwYXJhbSBwYXJzZWRTaGFkb3dHZW5lcmF0b3IgVGhlIEpTT04g
b2JqZWN0IHRvIHBhcnNlCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0byBjcmVhdGUg
dGhlIHNoYWRvdyBtYXAgZm9yCisgICAgICogQHJldHVybnMgVGhlIHBhcnNlZCBzaGFkb3cgZ2Vu
ZXJhdG9yCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yLlBhcnNlID0gZnVuY3Rpb24gKHBh
cnNlZFNoYWRvd0dlbmVyYXRvciwgc2NlbmUpIHsKKyAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUu
Z2V0TGlnaHRCeUlEKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5saWdodElkKTsKKyAgICAgICAgdmFy
IHNoYWRvd0dlbmVyYXRvciA9IG5ldyBTaGFkb3dHZW5lcmF0b3IocGFyc2VkU2hhZG93R2VuZXJh
dG9yLm1hcFNpemUsIGxpZ2h0KTsKKyAgICAgICAgdmFyIHNoYWRvd01hcCA9IHNoYWRvd0dlbmVy
YXRvci5nZXRTaGFkb3dNYXAoKTsKKyAgICAgICAgZm9yICh2YXIgbWVzaEluZGV4ID0gMDsgbWVz
aEluZGV4IDwgcGFyc2VkU2hhZG93R2VuZXJhdG9yLnJlbmRlckxpc3QubGVuZ3RoOyBtZXNoSW5k
ZXgrKykgeworICAgICAgICAgICAgdmFyIG1lc2hlcyA9IHNjZW5lLmdldE1lc2hlc0J5SUQocGFy
c2VkU2hhZG93R2VuZXJhdG9yLnJlbmRlckxpc3RbbWVzaEluZGV4XSk7CisgICAgICAgICAgICBt
ZXNoZXMuZm9yRWFjaChmdW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgICAgIGlmICghc2hh
ZG93TWFwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCFzaGFkb3dNYXAucmVuZGVyTGlzdCkgeworICAgICAgICAg
ICAgICAgICAgICBzaGFkb3dNYXAucmVuZGVyTGlzdCA9IFtdOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBzaGFkb3dNYXAucmVuZGVyTGlzdC5wdXNoKG1lc2gpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci51
c2VQb2lzc29uU2FtcGxpbmcpIHsKKyAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci51c2VQb2lz
c29uU2FtcGxpbmcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZFNo
YWRvd0dlbmVyYXRvci51c2VFeHBvbmVudGlhbFNoYWRvd01hcCkgeworICAgICAgICAgICAgc2hh
ZG93R2VuZXJhdG9yLnVzZUV4cG9uZW50aWFsU2hhZG93TWFwID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChwYXJzZWRTaGFkb3dHZW5lcmF0b3IudXNlQmx1ckV4cG9uZW50aWFs
U2hhZG93TWFwKSB7CisgICAgICAgICAgICBzaGFkb3dHZW5lcmF0b3IudXNlQmx1ckV4cG9uZW50
aWFsU2hhZG93TWFwID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwYXJzZWRT
aGFkb3dHZW5lcmF0b3IudXNlQ2xvc2VFeHBvbmVudGlhbFNoYWRvd01hcCkgeworICAgICAgICAg
ICAgc2hhZG93R2VuZXJhdG9yLnVzZUNsb3NlRXhwb25lbnRpYWxTaGFkb3dNYXAgPSB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci51c2VCbHVy
Q2xvc2VFeHBvbmVudGlhbFNoYWRvd01hcCkgeworICAgICAgICAgICAgc2hhZG93R2VuZXJhdG9y
LnVzZUJsdXJDbG9zZUV4cG9uZW50aWFsU2hhZG93TWFwID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChwYXJzZWRTaGFkb3dHZW5lcmF0b3IudXNlUGVyY2VudGFnZUNsb3NlckZp
bHRlcmluZykgeworICAgICAgICAgICAgc2hhZG93R2VuZXJhdG9yLnVzZVBlcmNlbnRhZ2VDbG9z
ZXJGaWx0ZXJpbmcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZFNo
YWRvd0dlbmVyYXRvci51c2VDb250YWN0SGFyZGVuaW5nU2hhZG93KSB7CisgICAgICAgICAgICBz
aGFkb3dHZW5lcmF0b3IudXNlQ29udGFjdEhhcmRlbmluZ1NoYWRvdyA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5maWx0ZXJpbmdRdWFsaXR5KSB7
CisgICAgICAgICAgICBzaGFkb3dHZW5lcmF0b3IuZmlsdGVyaW5nUXVhbGl0eSA9IHBhcnNlZFNo
YWRvd0dlbmVyYXRvci5maWx0ZXJpbmdRdWFsaXR5OworICAgICAgICB9CisgICAgICAgIGlmIChw
YXJzZWRTaGFkb3dHZW5lcmF0b3IuY29udGFjdEhhcmRlbmluZ0xpZ2h0U2l6ZVVWUmF0aW8pIHsK
KyAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci5jb250YWN0SGFyZGVuaW5nTGlnaHRTaXplVVZS
YXRpbyA9IHBhcnNlZFNoYWRvd0dlbmVyYXRvci5jb250YWN0SGFyZGVuaW5nTGlnaHRTaXplVVZS
YXRpbzsKKyAgICAgICAgfQorICAgICAgICAvLyBCYWNrd2FyZCBjb21wYXQKKyAgICAgICAgZWxz
ZSBpZiAocGFyc2VkU2hhZG93R2VuZXJhdG9yLnVzZVZhcmlhbmNlU2hhZG93TWFwKSB7CisgICAg
ICAgICAgICBzaGFkb3dHZW5lcmF0b3IudXNlRXhwb25lbnRpYWxTaGFkb3dNYXAgPSB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci51c2VCbHVy
VmFyaWFuY2VTaGFkb3dNYXApIHsKKyAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci51c2VCbHVy
RXhwb25lbnRpYWxTaGFkb3dNYXAgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJz
ZWRTaGFkb3dHZW5lcmF0b3IuZGVwdGhTY2FsZSkgeworICAgICAgICAgICAgc2hhZG93R2VuZXJh
dG9yLmRlcHRoU2NhbGUgPSBwYXJzZWRTaGFkb3dHZW5lcmF0b3IuZGVwdGhTY2FsZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocGFyc2VkU2hhZG93R2VuZXJhdG9yLmJsdXJTY2FsZSkgeworICAg
ICAgICAgICAgc2hhZG93R2VuZXJhdG9yLmJsdXJTY2FsZSA9IHBhcnNlZFNoYWRvd0dlbmVyYXRv
ci5ibHVyU2NhbGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRv
ci5ibHVyQm94T2Zmc2V0KSB7CisgICAgICAgICAgICBzaGFkb3dHZW5lcmF0b3IuYmx1ckJveE9m
ZnNldCA9IHBhcnNlZFNoYWRvd0dlbmVyYXRvci5ibHVyQm94T2Zmc2V0OworICAgICAgICB9Cisg
ICAgICAgIGlmIChwYXJzZWRTaGFkb3dHZW5lcmF0b3IudXNlS2VybmVsQmx1cikgeworICAgICAg
ICAgICAgc2hhZG93R2VuZXJhdG9yLnVzZUtlcm5lbEJsdXIgPSBwYXJzZWRTaGFkb3dHZW5lcmF0
b3IudXNlS2VybmVsQmx1cjsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkU2hhZG93R2Vu
ZXJhdG9yLmJsdXJLZXJuZWwpIHsKKyAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci5ibHVyS2Vy
bmVsID0gcGFyc2VkU2hhZG93R2VuZXJhdG9yLmJsdXJLZXJuZWw7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5iaWFzICE9PSB1bmRlZmluZWQpIHsKKyAgICAg
ICAgICAgIHNoYWRvd0dlbmVyYXRvci5iaWFzID0gcGFyc2VkU2hhZG93R2VuZXJhdG9yLmJpYXM7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5ub3JtYWxCaWFz
ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci5ub3JtYWxCaWFz
ID0gcGFyc2VkU2hhZG93R2VuZXJhdG9yLm5vcm1hbEJpYXM7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5mcnVzdHVtRWRnZUZhbGxvZmYgIT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgc2hhZG93R2VuZXJhdG9yLmZydXN0dW1FZGdlRmFsbG9mZiA9IHBh
cnNlZFNoYWRvd0dlbmVyYXRvci5mcnVzdHVtRWRnZUZhbGxvZmY7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5kYXJrbmVzcykgeworICAgICAgICAgICAgc2hh
ZG93R2VuZXJhdG9yLnNldERhcmtuZXNzKHBhcnNlZFNoYWRvd0dlbmVyYXRvci5kYXJrbmVzcyk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZFNoYWRvd0dlbmVyYXRvci50cmFuc3BhcmVu
Y3lTaGFkb3cpIHsKKyAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci5zZXRUcmFuc3BhcmVuY3lT
aGFkb3codHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgc2hhZG93R2VuZXJhdG9yLmZvcmNlQmFj
a0ZhY2VzT25seSA9IHBhcnNlZFNoYWRvd0dlbmVyYXRvci5mb3JjZUJhY2tGYWNlc09ubHk7Cisg
ICAgICAgIHJldHVybiBzaGFkb3dHZW5lcmF0b3I7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
aGFkb3cgZ2VuZXJhdG9yIG1vZGUgTm9uZTogbm8gZmlsdGVyaW5nIGFwcGxpZWQuCisgICAgICov
CisgICAgU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9OT05FID0gMDsKKyAgICAvKioKKyAgICAgKiBT
aGFkb3cgZ2VuZXJhdG9yIG1vZGUgRVNNOiBFeHBvbmVudGlhbCBTaGFkb3cgTWFwcGluZy4KKyAg
ICAgKiAoaHR0cDovL2RldmVsb3Blci5kb3dubG9hZC5udmlkaWEuY29tL3ByZXNlbnRhdGlvbnMv
MjAwOC9HREMvR0RDMDhfU29mdFNoYWRvd01hcHBpbmcucGRmKQorICAgICAqLworICAgIFNoYWRv
d0dlbmVyYXRvci5GSUxURVJfRVhQT05FTlRJQUxTSEFET1dNQVAgPSAxOworICAgIC8qKgorICAg
ICAqIFNoYWRvdyBnZW5lcmF0b3IgbW9kZSBQb2lzc29uIFNhbXBsaW5nOiBQZXJjZW50YWdlIENs
b3NlciBGaWx0ZXJpbmcuCisgICAgICogKE11bHRpcGxlIFRhcCBhcm91bmQgZXZlbmx5IGRpc3Ry
aWJ1dGVkIGFyb3VuZCB0aGUgcGl4ZWwgYXJlIHVzZWQgdG8gZXZhbHVhdGUgdGhlIHNoYWRvdyBz
dHJlbmd0aCkKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX1BPSVNTT05TQU1Q
TElORyA9IDI7CisgICAgLyoqCisgICAgICogU2hhZG93IGdlbmVyYXRvciBtb2RlIEVTTTogQmx1
cnJlZCBFeHBvbmVudGlhbCBTaGFkb3cgTWFwcGluZy4KKyAgICAgKiAoaHR0cDovL2RldmVsb3Bl
ci5kb3dubG9hZC5udmlkaWEuY29tL3ByZXNlbnRhdGlvbnMvMjAwOC9HREMvR0RDMDhfU29mdFNo
YWRvd01hcHBpbmcucGRmKQorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5GSUxURVJfQkxV
UkVYUE9ORU5USUFMU0hBRE9XTUFQID0gMzsKKyAgICAvKioKKyAgICAgKiBTaGFkb3cgZ2VuZXJh
dG9yIG1vZGUgRVNNOiBFeHBvbmVudGlhbCBTaGFkb3cgTWFwcGluZyB1c2luZyB0aGUgaW52ZXJz
ZSBvZiB0aGUgZXhwb25lbnRpYWwgcHJldmVudGluZworICAgICAqIGVkZ2UgYXJ0aWZhY3RzIG9u
IHN0ZWVwIGZhbGxvZmYuCisgICAgICogKGh0dHA6Ly9kZXZlbG9wZXIuZG93bmxvYWQubnZpZGlh
LmNvbS9wcmVzZW50YXRpb25zLzIwMDgvR0RDL0dEQzA4X1NvZnRTaGFkb3dNYXBwaW5nLnBkZikK
KyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3IuRklMVEVSX0NMT1NFRVhQT05FTlRJQUxTSEFE
T1dNQVAgPSA0OworICAgIC8qKgorICAgICAqIFNoYWRvdyBnZW5lcmF0b3IgbW9kZSBFU006IEJs
dXJyZWQgRXhwb25lbnRpYWwgU2hhZG93IE1hcHBpbmcgdXNpbmcgdGhlIGludmVyc2Ugb2YgdGhl
IGV4cG9uZW50aWFsIHByZXZlbnRpbmcKKyAgICAgKiBlZGdlIGFydGlmYWN0cyBvbiBzdGVlcCBm
YWxsb2ZmLgorICAgICAqIChodHRwOi8vZGV2ZWxvcGVyLmRvd25sb2FkLm52aWRpYS5jb20vcHJl
c2VudGF0aW9ucy8yMDA4L0dEQy9HREMwOF9Tb2Z0U2hhZG93TWFwcGluZy5wZGYpCisgICAgICov
CisgICAgU2hhZG93R2VuZXJhdG9yLkZJTFRFUl9CTFVSQ0xPU0VFWFBPTkVOVElBTFNIQURPV01B
UCA9IDU7CisgICAgLyoqCisgICAgICogU2hhZG93IGdlbmVyYXRvciBtb2RlIFBDRjogUGVyY2Vu
dGFnZSBDbG9zZXIgRmlsdGVyaW5nCisgICAgICogYmVuZWZpdHMgZnJvbSBXZWJnbCAyIHNoYWRv
dyBzYW1wbGVycy4gRmFsbGJhY2sgdG8gUG9pc3NvbiBTYW1wbGluZyBpbiBXZWJnbCAxCisgICAg
ICogKGh0dHBzOi8vZGV2ZWxvcGVyLm52aWRpYS5jb20vZ3B1Z2Vtcy9HUFVHZW1zL2dwdWdlbXNf
Y2gxMS5odG1sKQorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvci5GSUxURVJfUENGID0gNjsK
KyAgICAvKioKKyAgICAgKiBTaGFkb3cgZ2VuZXJhdG9yIG1vZGUgUENTUzogUGVyY2VudGFnZSBD
bG9zZXJpbmcgU29mdCBTaGFkb3cuCisgICAgICogYmVuZWZpdHMgZnJvbSBXZWJnbCAyIHNoYWRv
dyBzYW1wbGVycy4gRmFsbGJhY2sgdG8gUG9pc3NvbiBTYW1wbGluZyBpbiBXZWJnbCAxCisgICAg
ICogQ29udGFjdCBIYXJkZW5pbmcKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3IuRklMVEVS
X1BDU1MgPSA3OworICAgIC8qKgorICAgICAqIFJlc2VydmVkIGZvciBQQ0YgYW5kIFBDU1MKKyAg
ICAgKiBIaWdoZXN0IFF1YWxpdHkuCisgICAgICoKKyAgICAgKiBFeGVjdXRlIFBDRiBvbiBhIDUq
NSBrZXJuZWwgaW1wcm92aW5nIGEgbG90IHRoZSBzaGFkb3cgYWxpYXNpbmcgYXJ0aWZhY3RzLgor
ICAgICAqCisgICAgICogRXhlY3V0ZSBQQ1NTIHdpdGggMzIgdGFwcyBibG9ja2VyIHNlYXJjaCBh
bmQgNjQgdGFwcyBQQ0YuCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yLlFVQUxJVFlfSElH
SCA9IDA7CisgICAgLyoqCisgICAgICogUmVzZXJ2ZWQgZm9yIFBDRiBhbmQgUENTUworICAgICAq
IEdvb2QgdHJhZGVvZmYgZm9yIHF1YWxpdHkvcGVyZiBjcm9zcyBkZXZpY2VzCisgICAgICoKKyAg
ICAgKiBFeGVjdXRlIFBDRiBvbiBhIDMqMyBrZXJuZWwuCisgICAgICoKKyAgICAgKiBFeGVjdXRl
IFBDU1Mgd2l0aCAxNiB0YXBzIGJsb2NrZXIgc2VhcmNoIGFuZCAzMiB0YXBzIFBDRi4KKyAgICAg
Ki8KKyAgICBTaGFkb3dHZW5lcmF0b3IuUVVBTElUWV9NRURJVU0gPSAxOworICAgIC8qKgorICAg
ICAqIFJlc2VydmVkIGZvciBQQ0YgYW5kIFBDU1MKKyAgICAgKiBUaGUgbG93ZXN0IHF1YWxpdHkg
YnV0IHRoZSBmYXN0ZXN0LgorICAgICAqCisgICAgICogRXhlY3V0ZSBQQ0Ygb24gYSAxKjEga2Vy
bmVsLgorICAgICAqCisgICAgICogRXhlY3V0ZSBQQ1NTIHdpdGggMTYgdGFwcyBibG9ja2VyIHNl
YXJjaCBhbmQgMTYgdGFwcyBQQ0YuCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yLlFVQUxJ
VFlfTE9XID0gMjsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFNoYWRvd0dlbmVyYXRvci5fU2Nl
bmVDb21wb25lbnRJbml0aWFsaXphdGlvbiA9IGZ1bmN0aW9uIChfKSB7CisgICAgICAgIHRocm93
IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJfRGV2VG9vbHMi
XS5XYXJuSW1wb3J0KCJTaGFkb3dHZW5lcmF0b3JTY2VuZUNvbXBvbmVudCIpOworICAgIH07Cisg
ICAgcmV0dXJuIFNoYWRvd0dlbmVyYXRvcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTGlnaHRzL1NoYWRvd3Mvc2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9MaWdodHMvU2hhZG93cy9zaGFkb3dHZW5lcmF0b3JTY2VuZUNvbXBv
bmVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2hhZG93R2VuZXJhdG9y
U2NlbmVDb21wb25lbnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hh
ZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNoYWRvd0dl
bmVyYXRvclNjZW5lQ29tcG9uZW50OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2hh
ZG93R2VuZXJhdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3NoYWRvd0dlbmVyYXRvciAqLyAiLi9MaWdodHMvU2hhZG93cy9zaGFkb3dH
ZW5lcmF0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2Fic3RyYWN0U2NlbmUgKi8gIi4vYWJz
dHJhY3RTY2VuZS50cyIpOworCisKKworLy8gQWRkcyB0aGUgcGFyc2VyIHRvIHRoZSBzY2VuZSBw
YXJzZXJzLgorX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQWJz
dHJhY3RTY2VuZSJdLkFkZFBhcnNlcihfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX1NIQURPV0dFTkVSQVRP
UiwgZnVuY3Rpb24gKHBhcnNlZERhdGEsIHNjZW5lKSB7CisgICAgLy8gU2hhZG93cworICAgIGlm
IChwYXJzZWREYXRhLnNoYWRvd0dlbmVyYXRvcnMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRh
LnNoYWRvd0dlbmVyYXRvcnMgIT09IG51bGwpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAw
LCBjYWNoZSA9IHBhcnNlZERhdGEuc2hhZG93R2VuZXJhdG9ycy5sZW5ndGg7IGluZGV4IDwgY2Fj
aGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBwYXJzZWRTaGFkb3dHZW5lcmF0b3IgPSBw
YXJzZWREYXRhLnNoYWRvd0dlbmVyYXRvcnNbaW5kZXhdOworICAgICAgICAgICAgX3NoYWRvd0dl
bmVyYXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTaGFkb3dHZW5lcmF0b3IiXS5Q
YXJzZShwYXJzZWRTaGFkb3dHZW5lcmF0b3IsIHNjZW5lKTsKKyAgICAgICAgICAgIC8vIFNHIHdv
dWxkIGJlIGF2YWlsYWJsZSBvbiB0aGVpciBhc3NvY2lhdGVkIGxpZ2h0cworICAgICAgICB9Cisg
ICAgfQorfSk7CisvKioKKyAqIERlZmluZXMgdGhlIHNoYWRvdyBnZW5lcmF0b3IgY29tcG9uZW50
IHJlc3BvbnNpYmxlIHRvIG1hbmFnZSBhbnkgc2hhZG93IGdlbmVyYXRvcnMKKyAqIGluIGEgZ2l2
ZW4gc2NlbmUuCisgKi8KK3ZhciBTaGFkb3dHZW5lcmF0b3JTY2VuZUNvbXBvbmVudCA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGlu
c3RhbmNlIG9mIHRoZSBjb21wb25lbnQgZm9yIHRoZSBnaXZlbiBzY2VuZQorICAgICAqIEBwYXJh
bSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IGluCisg
ICAgICovCisgICAgZnVuY3Rpb24gU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQoc2NlbmUp
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjb21wb25lbnQgbmFtZSBoZWxwZnVsbCB0
byBpZGVudGlmeSB0aGUgY29tcG9uZW50IGluIHRoZSBsaXN0IG9mIHNjZW5lIGNvbXBvbmVudHMu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLm5hbWUgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX1NI
QURPV0dFTkVSQVRPUjsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgIH0KKyAgICAv
KioKKyAgICAgKiBSZWdpc3RlcnMgdGhlIGNvbXBvbmVudCBpbiBhIGdpdmVuIHNjZW5lCisgICAg
ICovCisgICAgU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQucHJvdG90eXBlLnJlZ2lzdGVy
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLnNjZW5lLl9nYXRoZXJSZW5kZXJUYXJnZXRz
U3RhZ2UucmVnaXN0ZXJTdGVwKF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLlNURVBfR0FUSEVSUkVOREVSVEFSR0VU
U19TSEFET1dHRU5FUkFUT1IsIHRoaXMsIHRoaXMuX2dhdGhlclJlbmRlclRhcmdldHMpOworICAg
IH07CisgICAgLyoqCisgICAgICogUmVidWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhp
cyBjb21wb25lbnQgaW4gY2FzZSBvZgorICAgICAqIGNvbnRleHQgbG9zdCBmb3IgaW5zdGFuY2Uu
CisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQucHJvdG90eXBlLnJl
YnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE5vdGhpbmcgVG8gRG8gSGVyZS4KKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGNvbXBvbmVudCBkYXRhIHRvIHRo
ZSBzcGVjaWZpZWQganNvbiBvYmplY3QKKyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlvbk9iamVj
dCBUaGUgb2JqZWN0IHRvIHNlcmlhbGl6ZSB0bworICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRv
clNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXph
dGlvbk9iamVjdCkgeworICAgICAgICAvLyBTaGFkb3dzCisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3Quc2hhZG93R2VuZXJhdG9ycyA9IFtdOworICAgICAgICB2YXIgbGlnaHRzID0gdGhpcy5z
Y2VuZS5saWdodHM7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgbGlnaHRzXzEgPSBsaWdodHM7
IF9pIDwgbGlnaHRzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbGlnaHQgPSBs
aWdodHNfMVtfaV07CisgICAgICAgICAgICB2YXIgc2hhZG93R2VuZXJhdG9yID0gbGlnaHQuZ2V0
U2hhZG93R2VuZXJhdG9yKCk7CisgICAgICAgICAgICBpZiAoc2hhZG93R2VuZXJhdG9yKSB7Cisg
ICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5zaGFkb3dHZW5lcmF0b3JzLnB1c2go
c2hhZG93R2VuZXJhdG9yLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIGNv
bnRhaW5lciB0byB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gY29udGFpbmVyIHRoZSBjb250YWlu
ZXIgaG9sZGluZyB0aGUgZWxlbWVudHMKKyAgICAgKi8KKyAgICBTaGFkb3dHZW5lcmF0b3JTY2Vu
ZUNvbXBvbmVudC5wcm90b3R5cGUuYWRkRnJvbUNvbnRhaW5lciA9IGZ1bmN0aW9uIChjb250YWlu
ZXIpIHsKKyAgICAgICAgLy8gTm90aGluZyBUbyBEbyBIZXJlLiAoZGlyZWN0bHkgYXR0YWNoZWQg
dG8gYSBsaWdodCkKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMgYWxsIHRoZSBlbGVt
ZW50cyBpbiB0aGUgY29udGFpbmVyIGZyb20gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIGNvbnRh
aW5lciBjb250YWlucyB0aGUgZWxlbWVudHMgdG8gcmVtb3ZlCisgICAgICogQHBhcmFtIGRpc3Bv
c2UgaWYgdGhlIHJlbW92ZWQgZWxlbWVudCBzaG91bGQgYmUgZGlzcG9zZWQgKGRlZmF1bHQ6IGZh
bHNlKQorICAgICAqLworICAgIFNoYWRvd0dlbmVyYXRvclNjZW5lQ29tcG9uZW50LnByb3RvdHlw
ZS5yZW1vdmVGcm9tQ29udGFpbmVyID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgZGlzcG9zZSkgewor
ICAgICAgICAvLyBOb3RoaW5nIFRvIERvIEhlcmUuIChkaXJlY3RseSBhdHRhY2hlZCB0byBhIGxp
Z2h0KQorICAgIH07CisgICAgLyoqCisgICAgICogUmVidWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0
ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4gY2FzZSBvZgorICAgICAqIGNvbnRleHQgbG9zdCBmb3Ig
aW5zdGFuY2UuCisgICAgICovCisgICAgU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQucHJv
dG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE5vdGhpbmcgVG8gRG8g
SGVyZS4KKyAgICB9OworICAgIFNoYWRvd0dlbmVyYXRvclNjZW5lQ29tcG9uZW50LnByb3RvdHlw
ZS5fZ2F0aGVyUmVuZGVyVGFyZ2V0cyA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXRzKSB7CisgICAg
ICAgIC8vIFNoYWRvd3MKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTsKKyAgICAgICAg
aWYgKHRoaXMuc2NlbmUuc2hhZG93c0VuYWJsZWQpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGxp
Z2h0SW5kZXggPSAwOyBsaWdodEluZGV4IDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgbGlnaHRJbmRl
eCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2xpZ2h0SW5k
ZXhdOworICAgICAgICAgICAgICAgIHZhciBzaGFkb3dHZW5lcmF0b3IgPSBsaWdodC5nZXRTaGFk
b3dHZW5lcmF0b3IoKTsKKyAgICAgICAgICAgICAgICBpZiAobGlnaHQuaXNFbmFibGVkKCkgJiYg
bGlnaHQuc2hhZG93RW5hYmxlZCAmJiBzaGFkb3dHZW5lcmF0b3IpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHNoYWRvd01hcCA9IChzaGFkb3dHZW5lcmF0b3IuZ2V0U2hhZG93TWFwKCkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoc2NlbmUudGV4dHVyZXMuaW5kZXhPZihzaGFkb3dNYXAp
ICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0cy5wdXNoKHNo
YWRvd01hcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBTaGFkb3dHZW5lcmF0b3JT
Y2VuZUNvbXBvbmVudDsKK30oKSk7CisKK19zaGFkb3dHZW5lcmF0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siU2hhZG93R2VuZXJhdG9yIl0uX1NjZW5lQ29tcG9uZW50SW5pdGlhbGl6
YXRpb24gPSBmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICB2YXIgY29tcG9uZW50ID0gc2NlbmUuX2dl
dENvbXBvbmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
U2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX1NIQURPV0dFTkVSQVRPUik7CisgICAgaWYg
KCFjb21wb25lbnQpIHsKKyAgICAgICAgY29tcG9uZW50ID0gbmV3IFNoYWRvd0dlbmVyYXRvclNj
ZW5lQ29tcG9uZW50KHNjZW5lKTsKKyAgICAgICAgc2NlbmUuX2FkZENvbXBvbmVudChjb21wb25l
bnQpOworICAgIH0KK307CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0xpZ2h0cy9kaXJlY3Rp
b25hbExpZ2h0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vTGlnaHRzL2RpcmVjdGlvbmFsTGlnaHQudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IERpcmVj
dGlvbmFsTGlnaHQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGlyZWN0
aW9uYWxMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGlyZWN0aW9uYWxMaWdodDsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3Ig
Ki8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vbm9kZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xp
Z2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL2xpZ2h0ICovICIuL0xpZ2h0cy9saWdodC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9zaGFkb3dMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9zaGFkb3dMaWdodCAqLyAiLi9MaWdodHMvc2hhZG93TGlnaHQudHMi
KTsKKworCisKKworCisKK19ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGUi
XS5BZGROb2RlQ29uc3RydWN0b3IoIkxpZ2h0X1R5cGVfMSIsIGZ1bmN0aW9uIChuYW1lLCBzY2Vu
ZSkgeworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgRGlyZWN0aW9uYWxMaWdo
dChuYW1lLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
VmVjdG9yMyJdLlplcm8oKSwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIEEgZGlyZWN0aW9uYWwg
bGlnaHQgaXMgZGVmaW5lZCBieSBhIGRpcmVjdGlvbiAod2hhdCBhIHN1cnByaXNlISkuCisgKiBU
aGUgbGlnaHQgaXMgZW1pdHRlZCBmcm9tIGV2ZXJ5d2hlcmUgaW4gdGhlIHNwZWNpZmllZCBkaXJl
Y3Rpb24sIGFuZCBoYXMgYW4gaW5maW5pdGUgcmFuZ2UuCisgKiBBbiBleGFtcGxlIG9mIGEgZGly
ZWN0aW9uYWwgbGlnaHQgaXMgd2hlbiBhIGRpc3RhbmNlIHBsYW5ldCBpcyBsaXQgYnkgdGhlIGFw
cGFyZW50bHkgcGFyYWxsZWwgbGluZXMgb2YgbGlnaHQgZnJvbSBpdHMgc3VuLiBMaWdodCBpbiBh
IGRvd253YXJkIGRpcmVjdGlvbiB3aWxsIGxpZ2h0IHRoZSB0b3Agb2YgYW4gb2JqZWN0LgorICog
RG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2xpZ2h0
cworICovCit2YXIgRGlyZWN0aW9uYWxMaWdodCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChf
c3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVu
ZHMiXShEaXJlY3Rpb25hbExpZ2h0LCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBEaXJlY3Rpb25hbExpZ2h0IG9iamVjdCBpbiB0aGUgc2NlbmUsIG9yaWVudGVkIHRvd2FyZHMg
dGhlIHBhc3NlZCBkaXJlY3Rpb24gKFZlY3RvcjMpLgorICAgICAqIFRoZSBkaXJlY3Rpb25hbCBs
aWdodCBpcyBlbWl0dGVkIGZyb20gZXZlcnl3aGVyZSBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgor
ICAgICAqIEl0IGNhbiBjYXN0IHNoYWRvd3MuCisgICAgICogRG9jdW1lbnRhdGlvbiA6IGh0dHBz
Oi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9saWdodHMKKyAgICAgKiBAcGFyYW0gbmFt
ZSBUaGUgZnJpZW5kbHkgbmFtZSBvZiB0aGUgbGlnaHQKKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9u
IFRoZSBkaXJlY3Rpb24gb2YgdGhlIGxpZ2h0CisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2Vu
ZSB0aGUgbGlnaHQgYmVsb25ncyB0bworICAgICAqLworICAgIGZ1bmN0aW9uIERpcmVjdGlvbmFs
TGlnaHQobmFtZSwgZGlyZWN0aW9uLCBzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3Vw
ZXIuY2FsbCh0aGlzLCBuYW1lLCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuX3NoYWRv
d0ZydXN0dW1TaXplID0gMDsKKyAgICAgICAgX3RoaXMuX3NoYWRvd09ydGhvU2NhbGUgPSAwLjE7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBBdXRvbWF0aWNhbGx5IGNvbXB1dGUgdGhlIHByb2pl
Y3Rpb24gbWF0cml4IHRvIGJlc3QgZml0IChpbmNsdWRpbmcgYWxsIHRoZSBjYXN0ZXJzKQorICAg
ICAgICAgKiBvbiBlYWNoIGZyYW1lLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXV0b1Vw
ZGF0ZUV4dGVuZHMgPSB0cnVlOworICAgICAgICAvLyBDYWNoZQorICAgICAgICBfdGhpcy5fb3J0
aG9MZWZ0ID0gTnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAgX3RoaXMuX29ydGhvUmlnaHQgPSBO
dW1iZXIuTUlOX1ZBTFVFOworICAgICAgICBfdGhpcy5fb3J0aG9Ub3AgPSBOdW1iZXIuTUlOX1ZB
TFVFOworICAgICAgICBfdGhpcy5fb3J0aG9Cb3R0b20gPSBOdW1iZXIuTUFYX1ZBTFVFOworICAg
ICAgICBfdGhpcy5wb3NpdGlvbiA9IGRpcmVjdGlvbi5zY2FsZSgtMS4wKTsKKyAgICAgICAgX3Ro
aXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEaXJlY3Rpb25hbExpZ2h0LnByb3RvdHlwZSwgInNo
YWRvd0ZydXN0dW1TaXplIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRml4IGZydXN0dW0g
c2l6ZSBmb3IgdGhlIHNoYWRvdyBnZW5lcmF0aW9uLiBUaGlzIGlzIGRpc2FibGVkIGlmIHRoZSB2
YWx1ZSBpcyAwLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fc2hhZG93RnJ1c3R1bVNpemU7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgYSBmaXggZnJ1c3R1bSBzaXplIGZvciB0aGUg
c2hhZG93IGdlbmVyYXRpb24uCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fc2hhZG93RnJ1c3R1bVNpemUgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHRoaXMuZm9yY2VQcm9qZWN0aW9uTWF0cml4Q29tcHV0ZSgpOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGlyZWN0aW9uYWxMaWdodC5wcm90
b3R5cGUsICJzaGFkb3dPcnRob1NjYWxlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgc2hhZG93IHByb2plY3Rpb24gc2NhbGUgYWdhaW5zdCB0aGUgb3B0aW1hbCBjb21wdXRl
ZCBvbmUuCisgICAgICAgICAqIDAuMSBieSBkZWZhdWx0IHdoaWNoIG1lYW5zIHRoYXQgdGhlIHBy
b2plY3Rpb24gd2luZG93IGlzIGluY3JlYXNlIGJ5IDEwJSBmcm9tIHRoZSBvcHRpbWFsIHNpemUu
CisgICAgICAgICAqIFRoaXMgZG9lcyBub3QgaW1wYWN0IGluIGZpeGVkIGZydXN0dW0gc2l6ZSAo
c2hhZG93RnJ1c3R1bVNpemUgYmVpbmcgc2V0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZG93T3J0aG9TY2FsZTsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHNoYWRvdyBwcm9q
ZWN0aW9uIHNjYWxlIGFnYWluc3QgdGhlIG9wdGltYWwgY29tcHV0ZWQgb25lLgorICAgICAgICAg
KiAwLjEgYnkgZGVmYXVsdCB3aGljaCBtZWFucyB0aGF0IHRoZSBwcm9qZWN0aW9uIHdpbmRvdyBp
cyBpbmNyZWFzZSBieSAxMCUgZnJvbSB0aGUgb3B0aW1hbCBzaXplLgorICAgICAgICAgKiBUaGlz
IGRvZXMgbm90IGltcGFjdCBpbiBmaXhlZCBmcnVzdHVtIHNpemUgKHNoYWRvd0ZydXN0dW1TaXpl
IGJlaW5nIHNldCkKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dPcnRob1NjYWxlID0gdmFsdWU7CisgICAgICAgICAg
ICB0aGlzLmZvcmNlUHJvamVjdGlvbk1hdHJpeENvbXB1dGUoKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3RyaW5nICJEaXJlY3Rpb25hbExpZ2h0Ii4K
KyAgICAgKiBAcmV0dXJuIFRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgRGlyZWN0aW9uYWxM
aWdodC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gIkRpcmVjdGlvbmFsTGlnaHQiOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0
aGUgaW50ZWdlciAxLgorICAgICAqIEByZXR1cm4gVGhlIGxpZ2h0IFR5cGUgaWQgYXMgYSBjb25z
dGFudCBkZWZpbmVzIGluIExpZ2h0LkxJR0hUVFlQRUlEX3gKKyAgICAgKi8KKyAgICBEaXJlY3Rp
b25hbExpZ2h0LnByb3RvdHlwZS5nZXRUeXBlSUQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiBfbGlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTGlnaHQiXS5MSUdIVFRZ
UEVJRF9ESVJFQ1RJT05BTExJR0hUOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUg
cGFzc2VkIG1hdHJpeCAibWF0cml4IiBhcyBwcm9qZWN0aW9uIG1hdHJpeCBmb3IgdGhlIHNoYWRv
d3MgY2FzdCBieSB0aGUgbGlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgdmlldyBtYXRyaXgu
CisgICAgICogUmV0dXJucyB0aGUgRGlyZWN0aW9uYWxMaWdodCBTaGFkb3cgcHJvamVjdGlvbiBt
YXRyaXguCisgICAgICovCisgICAgRGlyZWN0aW9uYWxMaWdodC5wcm90b3R5cGUuX3NldERlZmF1
bHRTaGFkb3dQcm9qZWN0aW9uTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgdmlld01hdHJpeCwg
cmVuZGVyTGlzdCkgeworICAgICAgICBpZiAodGhpcy5zaGFkb3dGcnVzdHVtU2l6ZSA+IDApIHsK
KyAgICAgICAgICAgIHRoaXMuX3NldERlZmF1bHRGaXhlZEZydXN0dW1TaGFkb3dQcm9qZWN0aW9u
TWF0cml4KG1hdHJpeCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0
aGlzLl9zZXREZWZhdWx0QXV0b0V4dGVuZFNoYWRvd1Byb2plY3Rpb25NYXRyaXgobWF0cml4LCB2
aWV3TWF0cml4LCByZW5kZXJMaXN0KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0cyB0aGUgcGFzc2VkIG1hdHJpeCAibWF0cml4IiBhcyBmaXhlZCBmcnVzdHVtIHByb2pl
Y3Rpb24gbWF0cml4IGZvciB0aGUgc2hhZG93cyBjYXN0IGJ5IHRoZSBsaWdodCBhY2NvcmRpbmcg
dG8gdGhlIHBhc3NlZCB2aWV3IG1hdHJpeC4KKyAgICAgKiBSZXR1cm5zIHRoZSBEaXJlY3Rpb25h
bExpZ2h0IFNoYWRvdyBwcm9qZWN0aW9uIG1hdHJpeC4KKyAgICAgKi8KKyAgICBEaXJlY3Rpb25h
bExpZ2h0LnByb3RvdHlwZS5fc2V0RGVmYXVsdEZpeGVkRnJ1c3R1bVNoYWRvd1Byb2plY3Rpb25N
YXRyaXggPSBmdW5jdGlvbiAobWF0cml4KSB7CisgICAgICAgIHZhciBhY3RpdmVDYW1lcmEgPSB0
aGlzLmdldFNjZW5lKCkuYWN0aXZlQ2FtZXJhOworICAgICAgICBpZiAoIWFjdGl2ZUNhbWVyYSkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNYXRyaXgiXS5PcnRob0xIVG9SZWYo
dGhpcy5zaGFkb3dGcnVzdHVtU2l6ZSwgdGhpcy5zaGFkb3dGcnVzdHVtU2l6ZSwgdGhpcy5zaGFk
b3dNaW5aICE9PSB1bmRlZmluZWQgPyB0aGlzLnNoYWRvd01pblogOiBhY3RpdmVDYW1lcmEubWlu
WiwgdGhpcy5zaGFkb3dNYXhaICE9PSB1bmRlZmluZWQgPyB0aGlzLnNoYWRvd01heFogOiBhY3Rp
dmVDYW1lcmEubWF4WiwgbWF0cml4KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IHBhc3NlZCBtYXRyaXggIm1hdHJpeCIgYXMgYXV0byBleHRlbmQgcHJvamVjdGlvbiBtYXRyaXgg
Zm9yIHRoZSBzaGFkb3dzIGNhc3QgYnkgdGhlIGxpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2Vk
IHZpZXcgbWF0cml4LgorICAgICAqIFJldHVybnMgdGhlIERpcmVjdGlvbmFsTGlnaHQgU2hhZG93
IHByb2plY3Rpb24gbWF0cml4LgorICAgICAqLworICAgIERpcmVjdGlvbmFsTGlnaHQucHJvdG90
eXBlLl9zZXREZWZhdWx0QXV0b0V4dGVuZFNoYWRvd1Byb2plY3Rpb25NYXRyaXggPSBmdW5jdGlv
biAobWF0cml4LCB2aWV3TWF0cml4LCByZW5kZXJMaXN0KSB7CisgICAgICAgIHZhciBhY3RpdmVD
YW1lcmEgPSB0aGlzLmdldFNjZW5lKCkuYWN0aXZlQ2FtZXJhOworICAgICAgICBpZiAoIWFjdGl2
ZUNhbWVyYSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIENo
ZWNrIGV4dGVuZHMKKyAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZUV4dGVuZHMgfHwgdGhpcy5f
b3J0aG9MZWZ0ID09PSBOdW1iZXIuTUFYX1ZBTFVFKSB7CisgICAgICAgICAgICB2YXIgdGVtcFZl
Y3RvcjMgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
VmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgICAgIHRoaXMuX29ydGhvTGVmdCA9IE51bWJlci5N
QVhfVkFMVUU7CisgICAgICAgICAgICB0aGlzLl9vcnRob1JpZ2h0ID0gTnVtYmVyLk1JTl9WQUxV
RTsKKyAgICAgICAgICAgIHRoaXMuX29ydGhvVG9wID0gTnVtYmVyLk1JTl9WQUxVRTsKKyAgICAg
ICAgICAgIHRoaXMuX29ydGhvQm90dG9tID0gTnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAgICAg
IGZvciAodmFyIG1lc2hJbmRleCA9IDA7IG1lc2hJbmRleCA8IHJlbmRlckxpc3QubGVuZ3RoOyBt
ZXNoSW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBtZXNoID0gcmVuZGVyTGlzdFttZXNo
SW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbWVzaCkgeworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGJvdW5k
aW5nSW5mbyA9IG1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICAgICAgdmFyIGJv
dW5kaW5nQm94ID0gYm91bmRpbmdJbmZvLmJvdW5kaW5nQm94OworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBib3VuZGluZ0JveC52ZWN0b3JzV29ybGQubGVuZ3Ro
OyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNU
b1JlZihib3VuZGluZ0JveC52ZWN0b3JzV29ybGRbaW5kZXhdLCB2aWV3TWF0cml4LCB0ZW1wVmVj
dG9yMyk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wVmVjdG9yMy54IDwgdGhpcy5fb3J0
aG9MZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcnRob0xlZnQgPSB0ZW1w
VmVjdG9yMy54OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
ICh0ZW1wVmVjdG9yMy55IDwgdGhpcy5fb3J0aG9Cb3R0b20pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX29ydGhvQm90dG9tID0gdGVtcFZlY3RvcjMueTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGVtcFZlY3RvcjMueCA+IHRoaXMuX29y
dGhvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29ydGhvUmlnaHQgPSB0
ZW1wVmVjdG9yMy54OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmICh0ZW1wVmVjdG9yMy55ID4gdGhpcy5fb3J0aG9Ub3ApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX29ydGhvVG9wID0gdGVtcFZlY3RvcjMueTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB2YXIgeE9mZnNldCA9IHRoaXMuX29ydGhvUmlnaHQgLSB0aGlzLl9vcnRob0xlZnQ7CisgICAg
ICAgIHZhciB5T2Zmc2V0ID0gdGhpcy5fb3J0aG9Ub3AgLSB0aGlzLl9vcnRob0JvdHRvbTsKKyAg
ICAgICAgaWYgKHRoaXMuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgeworICAgICAg
ICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1h
dHJpeCJdLk9ydGhvT2ZmQ2VudGVyUkhUb1JlZih0aGlzLl9vcnRob0xlZnQgLSB4T2Zmc2V0ICog
dGhpcy5zaGFkb3dPcnRob1NjYWxlLCB0aGlzLl9vcnRob1JpZ2h0ICsgeE9mZnNldCAqIHRoaXMu
c2hhZG93T3J0aG9TY2FsZSwgdGhpcy5fb3J0aG9Cb3R0b20gLSB5T2Zmc2V0ICogdGhpcy5zaGFk
b3dPcnRob1NjYWxlLCB0aGlzLl9vcnRob1RvcCArIHlPZmZzZXQgKiB0aGlzLnNoYWRvd09ydGhv
U2NhbGUsIHRoaXMuc2hhZG93TWluWiAhPT0gdW5kZWZpbmVkID8gdGhpcy5zaGFkb3dNaW5aIDog
YWN0aXZlQ2FtZXJhLm1pblosIHRoaXMuc2hhZG93TWF4WiAhPT0gdW5kZWZpbmVkID8gdGhpcy5z
aGFkb3dNYXhaIDogYWN0aXZlQ2FtZXJhLm1heFosIG1hdHJpeCk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTWF0cml4Il0uT3J0aG9PZmZDZW50ZXJMSFRvUmVmKHRoaXMuX29ydGhv
TGVmdCAtIHhPZmZzZXQgKiB0aGlzLnNoYWRvd09ydGhvU2NhbGUsIHRoaXMuX29ydGhvUmlnaHQg
KyB4T2Zmc2V0ICogdGhpcy5zaGFkb3dPcnRob1NjYWxlLCB0aGlzLl9vcnRob0JvdHRvbSAtIHlP
ZmZzZXQgKiB0aGlzLnNoYWRvd09ydGhvU2NhbGUsIHRoaXMuX29ydGhvVG9wICsgeU9mZnNldCAq
IHRoaXMuc2hhZG93T3J0aG9TY2FsZSwgdGhpcy5zaGFkb3dNaW5aICE9PSB1bmRlZmluZWQgPyB0
aGlzLnNoYWRvd01pblogOiBhY3RpdmVDYW1lcmEubWluWiwgdGhpcy5zaGFkb3dNYXhaICE9PSB1
bmRlZmluZWQgPyB0aGlzLnNoYWRvd01heFogOiBhY3RpdmVDYW1lcmEubWF4WiwgbWF0cml4KTsK
KyAgICAgICAgfQorICAgIH07CisgICAgRGlyZWN0aW9uYWxMaWdodC5wcm90b3R5cGUuX2J1aWxk
VW5pZm9ybUxheW91dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZl
ci5hZGRVbmlmb3JtKCJ2TGlnaHREYXRhIiwgNCk7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZm
ZXIuYWRkVW5pZm9ybSgidkxpZ2h0RGlmZnVzZSIsIDQpOworICAgICAgICB0aGlzLl91bmlmb3Jt
QnVmZmVyLmFkZFVuaWZvcm0oInZMaWdodFNwZWN1bGFyIiwgMyk7CisgICAgICAgIHRoaXMuX3Vu
aWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgic2hhZG93c0luZm8iLCAzKTsKKyAgICAgICAgdGhpcy5f
dW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJkZXB0aFZhbHVlcyIsIDIpOworICAgICAgICB0aGlz
Ll91bmlmb3JtQnVmZmVyLmNyZWF0ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0
aGUgcGFzc2VkIEVmZmVjdCBvYmplY3Qgd2l0aCB0aGUgRGlyZWN0aW9uYWxMaWdodCB0cmFuc2Zv
cm1lZCBwb3NpdGlvbiAob3IgcG9zaXRpb24gaWYgbm90IHBhcmVudGVkKSBhbmQgdGhlIHBhc3Nl
ZCBuYW1lLgorICAgICAqIEBwYXJhbSBlZmZlY3QgVGhlIGVmZmVjdCB0byB1cGRhdGUKKyAgICAg
KiBAcGFyYW0gbGlnaHRJbmRleCBUaGUgaW5kZXggb2YgdGhlIGxpZ2h0IGluIHRoZSBlZmZlY3Qg
dG8gdXBkYXRlCisgICAgICogQHJldHVybnMgVGhlIGRpcmVjdGlvbmFsIGxpZ2h0CisgICAgICov
CisgICAgRGlyZWN0aW9uYWxMaWdodC5wcm90b3R5cGUudHJhbnNmZXJUb0VmZmVjdCA9IGZ1bmN0
aW9uIChlZmZlY3QsIGxpZ2h0SW5kZXgpIHsKKyAgICAgICAgaWYgKHRoaXMuY29tcHV0ZVRyYW5z
Zm9ybWVkSW5mb3JtYXRpb24oKSkgeworICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U2NlbmUoKS51
c2VSaWdodEhhbmRlZFN5c3RlbSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZm
ZXIudXBkYXRlRmxvYXQ0KCJ2TGlnaHREYXRhIiwgLXRoaXMudHJhbnNmb3JtZWREaXJlY3Rpb24u
eCwgLXRoaXMudHJhbnNmb3JtZWREaXJlY3Rpb24ueSwgLXRoaXMudHJhbnNmb3JtZWREaXJlY3Rp
b24ueiwgMSwgbGlnaHRJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgidkxpZ2h0
RGF0YSIsIHRoaXMudHJhbnNmb3JtZWREaXJlY3Rpb24ueCwgdGhpcy50cmFuc2Zvcm1lZERpcmVj
dGlvbi55LCB0aGlzLnRyYW5zZm9ybWVkRGlyZWN0aW9uLnosIDEsIGxpZ2h0SW5kZXgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbSkgeworICAgICAgICAgICAg
dGhpcy5fdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDQoInZMaWdodERhdGEiLCAtdGhpcy5kaXJl
Y3Rpb24ueCwgLXRoaXMuZGlyZWN0aW9uLnksIC10aGlzLmRpcmVjdGlvbi56LCAxLCBsaWdodElu
ZGV4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3VuaWZv
cm1CdWZmZXIudXBkYXRlRmxvYXQ0KCJ2TGlnaHREYXRhIiwgdGhpcy5kaXJlY3Rpb24ueCwgdGhp
cy5kaXJlY3Rpb24ueSwgdGhpcy5kaXJlY3Rpb24ueiwgMSwgbGlnaHRJbmRleCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBEaXJlY3Rpb25hbExpZ2h0LnBy
b3RvdHlwZS50cmFuc2ZlclRvTm9kZU1hdGVyaWFsRWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCwg
bGlnaHREYXRhVW5pZm9ybU5hbWUpIHsKKyAgICAgICAgaWYgKHRoaXMuY29tcHV0ZVRyYW5zZm9y
bWVkSW5mb3JtYXRpb24oKSkgeworICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U2NlbmUoKS51c2VS
aWdodEhhbmRlZFN5c3RlbSkgeworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDMobGln
aHREYXRhVW5pZm9ybU5hbWUsIC10aGlzLnRyYW5zZm9ybWVkRGlyZWN0aW9uLngsIC10aGlzLnRy
YW5zZm9ybWVkRGlyZWN0aW9uLnksIC10aGlzLnRyYW5zZm9ybWVkRGlyZWN0aW9uLnopOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNl
dEZsb2F0MyhsaWdodERhdGFVbmlmb3JtTmFtZSwgdGhpcy50cmFuc2Zvcm1lZERpcmVjdGlvbi54
LCB0aGlzLnRyYW5zZm9ybWVkRGlyZWN0aW9uLnksIHRoaXMudHJhbnNmb3JtZWREaXJlY3Rpb24u
eik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVtKSB7CisgICAg
ICAgICAgICBlZmZlY3Quc2V0RmxvYXQzKGxpZ2h0RGF0YVVuaWZvcm1OYW1lLCAtdGhpcy5kaXJl
Y3Rpb24ueCwgLXRoaXMuZGlyZWN0aW9uLnksIC10aGlzLmRpcmVjdGlvbi56KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDMobGlnaHREYXRh
VW5pZm9ybU5hbWUsIHRoaXMuZGlyZWN0aW9uLngsIHRoaXMuZGlyZWN0aW9uLnksIHRoaXMuZGly
ZWN0aW9uLnopOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
LyoqCisgICAgICogR2V0cyB0aGUgbWluWiB1c2VkIGZvciBzaGFkb3cgYWNjb3JkaW5nIHRvIGJv
dGggdGhlIHNjZW5lIGFuZCB0aGUgbGlnaHQuCisgICAgICoKKyAgICAgKiBWYWx1ZXMgYXJlIGZp
eGVkIG9uIGRpcmVjdGlvbmFsIGxpZ2h0cyBhcyBpdCByZWxpZXMgb24gYW4gb3J0aG8gcHJvamVj
dGlvbiBoZW5jZSB0aGUgbmVlZCB0byBjb252ZXJ0IGJlaW5nCisgICAgICogLTEgYW5kIDEgdG8g
MCBhbmQgMSBkb2luZyAoZGVwdGggKyBtaW4pIC8gKG1pbiArIG1heCkgLT4gKGRlcHRoICsgMSkg
LyAoMSArIDEpIC0+IChkZXB0aCAqIDAuNSkgKyAwLjUuCisgICAgICogQHBhcmFtIGFjdGl2ZUNh
bWVyYSBUaGUgY2FtZXJhIHdlIGFyZSByZXR1cm5pbmcgdGhlIG1pbiBmb3IKKyAgICAgKiBAcmV0
dXJucyB0aGUgZGVwdGggbWluIHoKKyAgICAgKi8KKyAgICBEaXJlY3Rpb25hbExpZ2h0LnByb3Rv
dHlwZS5nZXREZXB0aE1pblogPSBmdW5jdGlvbiAoYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgIHJl
dHVybiAxOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbWF4WiB1c2VkIGZvciBz
aGFkb3cgYWNjb3JkaW5nIHRvIGJvdGggdGhlIHNjZW5lIGFuZCB0aGUgbGlnaHQuCisgICAgICoK
KyAgICAgKiBWYWx1ZXMgYXJlIGZpeGVkIG9uIGRpcmVjdGlvbmFsIGxpZ2h0cyBhcyBpdCByZWxp
ZXMgb24gYW4gb3J0aG8gcHJvamVjdGlvbiBoZW5jZSB0aGUgbmVlZCB0byBjb252ZXJ0IGJlaW5n
CisgICAgICogLTEgYW5kIDEgdG8gMCBhbmQgMSBkb2luZyAoZGVwdGggKyBtaW4pIC8gKG1pbiAr
IG1heCkgLT4gKGRlcHRoICsgMSkgLyAoMSArIDEpIC0+IChkZXB0aCAqIDAuNSkgKyAwLjUuCisg
ICAgICogQHBhcmFtIGFjdGl2ZUNhbWVyYSBUaGUgY2FtZXJhIHdlIGFyZSByZXR1cm5pbmcgdGhl
IG1heCBmb3IKKyAgICAgKiBAcmV0dXJucyB0aGUgZGVwdGggbWF4IHoKKyAgICAgKi8KKyAgICBE
aXJlY3Rpb25hbExpZ2h0LnByb3RvdHlwZS5nZXREZXB0aE1heFogPSBmdW5jdGlvbiAoYWN0aXZl
Q2FtZXJhKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH07CisgICAgLyoqCisgICAgICogUHJl
cGFyZXMgdGhlIGxpc3Qgb2YgZGVmaW5lcyBzcGVjaWZpYyB0byB0aGUgbGlnaHQgdHlwZS4KKyAg
ICAgKiBAcGFyYW0gZGVmaW5lcyB0aGUgbGlzdCBvZiBkZWZpbmVzCisgICAgICogQHBhcmFtIGxp
Z2h0SW5kZXggZGVmaW5lcyB0aGUgaW5kZXggb2YgdGhlIGxpZ2h0IGZvciB0aGUgZWZmZWN0Cisg
ICAgICovCisgICAgRGlyZWN0aW9uYWxMaWdodC5wcm90b3R5cGUucHJlcGFyZUxpZ2h0U3BlY2lm
aWNEZWZpbmVzID0gZnVuY3Rpb24gKGRlZmluZXMsIGxpZ2h0SW5kZXgpIHsKKyAgICAgICAgZGVm
aW5lc1siRElSTElHSFQiICsgbGlnaHRJbmRleF0gPSB0cnVlOworICAgIH07CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBEaXJlY3Rpb25hbExpZ2h0LnByb3RvdHlwZSwgInNoYWRvd0ZydXN0
dW1TaXplIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBEaXJlY3Rpb25hbExp
Z2h0LnByb3RvdHlwZSwgInNoYWRvd09ydGhvU2NhbGUiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIERpcmVjdGlvbmFsTGlnaHQucHJvdG90eXBlLCAiYXV0b1VwZGF0ZUV4dGVu
ZHMiLCB2b2lkIDApOworICAgIHJldHVybiBEaXJlY3Rpb25hbExpZ2h0OworfShfc2hhZG93TGln
aHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2hhZG93TGlnaHQiXSkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0xpZ2h0cy9oZW1pc3BoZXJpY0xpZ2h0LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTGlnaHRzL2hl
bWlzcGhlcmljTGlnaHQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEhlbWlzcGhlcmljTGlnaHQgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSGVtaXNwaGVyaWNMaWdodCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gSGVtaXNwaGVyaWNMaWdodDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3Jz
ICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL25vZGUgKi8gIi4vbm9kZS50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9saWdodCAqLyAiLi9MaWdodHMvbGlnaHQudHMiKTsKKworCisKKwor
CisKK19ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGUiXS5BZGROb2RlQ29u
c3RydWN0b3IoIkxpZ2h0X1R5cGVfMyIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSkgeworICAgIHJl
dHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSGVtaXNwaGVyaWNMaWdodChuYW1lLCBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlpl
cm8oKSwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIFRoZSBIZW1pc3BoZXJpY0xpZ2h0IHNpbXVs
YXRlcyB0aGUgYW1iaWVudCBlbnZpcm9ubWVudCBsaWdodCwKKyAqIHNvIHRoZSBwYXNzZWQgZGly
ZWN0aW9uIGlzIHRoZSBsaWdodCByZWZsZWN0aW9uIGRpcmVjdGlvbiwgbm90IHRoZSBpbmNvbWlu
ZyBkaXJlY3Rpb24uCisgKi8KK3ZhciBIZW1pc3BoZXJpY0xpZ2h0ID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZXh0ZW5kcyJdKEhlbWlzcGhlcmljTGlnaHQsIF9zdXBlcik7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIEhlbWlzcGhlcmljTGlnaHQgb2JqZWN0IGluIHRoZSBzY2VuZSBhY2NvcmRp
bmcgdG8gdGhlIHBhc3NlZCBkaXJlY3Rpb24gKFZlY3RvcjMpLgorICAgICAqIFRoZSBIZW1pc3Bo
ZXJpY0xpZ2h0IHNpbXVsYXRlcyB0aGUgYW1iaWVudCBlbnZpcm9ubWVudCBsaWdodCwgc28gdGhl
IHBhc3NlZCBkaXJlY3Rpb24gaXMgdGhlIGxpZ2h0IHJlZmxlY3Rpb24gZGlyZWN0aW9uLCBub3Qg
dGhlIGluY29taW5nIGRpcmVjdGlvbi4KKyAgICAgKiBUaGUgSGVtaXNwaGVyaWNMaWdodCBjYW4n
dCBjYXN0IHNoYWRvd3MuCisgICAgICogRG9jdW1lbnRhdGlvbiA6IGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vYmFieWxvbjEwMS9saWdodHMKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgZnJpZW5k
bHkgbmFtZSBvZiB0aGUgbGlnaHQKKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uIFRoZSBkaXJlY3Rp
b24gb2YgdGhlIGxpZ2h0IHJlZmxlY3Rpb24KKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5l
IHRoZSBsaWdodCBiZWxvbmdzIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gSGVtaXNwaGVyaWNM
aWdodChuYW1lLCBkaXJlY3Rpb24sIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAg
ICogVGhlIGdyb3VuZENvbG9yIGlzIHRoZSBsaWdodCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9u
IHRvIHRoZSBvbmUgc3BlY2lmaWVkIGR1cmluZyBjcmVhdGlvbi4KKyAgICAgICAgICogWW91IGNh
biB0aGluayBvZiB0aGUgZGlmZnVzZSBhbmQgc3BlY3VsYXIgbGlnaHQgYXMgY29taW5nIGZyb20g
dGhlIGNlbnRyZSBvZiB0aGUgb2JqZWN0IGluIHRoZSBnaXZlbiBkaXJlY3Rpb24gYW5kIHRoZSBn
cm91bmRDb2xvciBsaWdodCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLgorICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMuZ3JvdW5kQ29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29sb3IzIl0oMC4wLCAwLjAsIDAuMCk7CisgICAgICAg
IF90aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlVwKCk7CisgICAgICAgIHJldHVybiBf
dGhpczsKKyAgICB9CisgICAgSGVtaXNwaGVyaWNMaWdodC5wcm90b3R5cGUuX2J1aWxkVW5pZm9y
bUxheW91dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRV
bmlmb3JtKCJ2TGlnaHREYXRhIiwgNCk7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRk
VW5pZm9ybSgidkxpZ2h0RGlmZnVzZSIsIDQpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVy
LmFkZFVuaWZvcm0oInZMaWdodFNwZWN1bGFyIiwgMyk7CisgICAgICAgIHRoaXMuX3VuaWZvcm1C
dWZmZXIuYWRkVW5pZm9ybSgidkxpZ2h0R3JvdW5kIiwgMyk7CisgICAgICAgIHRoaXMuX3VuaWZv
cm1CdWZmZXIuYWRkVW5pZm9ybSgic2hhZG93c0luZm8iLCAzKTsKKyAgICAgICAgdGhpcy5fdW5p
Zm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJkZXB0aFZhbHVlcyIsIDIpOworICAgICAgICB0aGlzLl91
bmlmb3JtQnVmZmVyLmNyZWF0ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0
aGUgc3RyaW5nICJIZW1pc3BoZXJpY0xpZ2h0Ii4KKyAgICAgKiBAcmV0dXJuIFRoZSBjbGFzcyBu
YW1lCisgICAgICovCisgICAgSGVtaXNwaGVyaWNMaWdodC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkhlbWlzcGhlcmljTGlnaHQiOworICAg
IH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgSGVtaXNwaGVyaWNMaWdodCBkaXJlY3Rpb24g
dG93YXJkcyB0aGUgcGFzc2VkIHRhcmdldCAoVmVjdG9yMykuCisgICAgICogUmV0dXJucyB0aGUg
dXBkYXRlZCBkaXJlY3Rpb24uCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHRoZSBk
aXJlY3Rpb24gc2hvdWxkIHBvaW50IHRvCisgICAgICogQHJldHVybiBUaGUgY29tcHV0ZWQgZGly
ZWN0aW9uCisgICAgICovCisgICAgSGVtaXNwaGVyaWNMaWdodC5wcm90b3R5cGUuc2V0RGlyZWN0
aW9uVG9UYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7CisgICAgICAgIHRoaXMuZGlyZWN0aW9u
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3Rv
cjMiXS5Ob3JtYWxpemUodGFyZ2V0LnN1YnRyYWN0KF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpKSk7CisgICAgICAgIHJldHVy
biB0aGlzLmRpcmVjdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNo
YWRvdyBnZW5lcmF0b3IgYXNzb2NpYXRlZCB0byB0aGUgbGlnaHQuCisgICAgICogQHJldHVybnMg
QWx3YXlzIG51bGwgZm9yIGhlbWlzcGhlcmljIGxpZ2h0cyBiZWNhdXNlIGl0IGRvZXMgbm90IHN1
cHBvcnQgc2hhZG93cy4KKyAgICAgKi8KKyAgICBIZW1pc3BoZXJpY0xpZ2h0LnByb3RvdHlwZS5n
ZXRTaGFkb3dHZW5lcmF0b3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBudWxsOwor
ICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgcGFzc2VkIEVmZmVjdCBvYmplY3Qgd2l0
aCB0aGUgSGVtaXNwaGVyaWNMaWdodCBub3JtYWxpemVkIGRpcmVjdGlvbiBhbmQgY29sb3IgYW5k
IHRoZSBwYXNzZWQgbmFtZSAoc3RyaW5nKS4KKyAgICAgKiBAcGFyYW0gZWZmZWN0IFRoZSBlZmZl
Y3QgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIGxpZ2h0SW5kZXggVGhlIGluZGV4IG9mIHRoZSBs
aWdodCBpbiB0aGUgZWZmZWN0IHRvIHVwZGF0ZQorICAgICAqIEByZXR1cm5zIFRoZSBoZW1pc3Bo
ZXJpYyBsaWdodAorICAgICAqLworICAgIEhlbWlzcGhlcmljTGlnaHQucHJvdG90eXBlLnRyYW5z
ZmVyVG9FZmZlY3QgPSBmdW5jdGlvbiAoZWZmZWN0LCBsaWdodEluZGV4KSB7CisgICAgICAgIHZh
ciBub3JtYWxpemVEaXJlY3Rpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLk5vcm1hbGl6ZSh0aGlzLmRpcmVjdGlvbik7CisgICAg
ICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQ0KCJ2TGlnaHREYXRhIiwgbm9ybWFs
aXplRGlyZWN0aW9uLngsIG5vcm1hbGl6ZURpcmVjdGlvbi55LCBub3JtYWxpemVEaXJlY3Rpb24u
eiwgMC4wLCBsaWdodEluZGV4KTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci51cGRhdGVD
b2xvcjMoInZMaWdodEdyb3VuZCIsIHRoaXMuZ3JvdW5kQ29sb3Iuc2NhbGUodGhpcy5pbnRlbnNp
dHkpLCBsaWdodEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBIZW1p
c3BoZXJpY0xpZ2h0LnByb3RvdHlwZS50cmFuc2ZlclRvTm9kZU1hdGVyaWFsRWZmZWN0ID0gZnVu
Y3Rpb24gKGVmZmVjdCwgbGlnaHREYXRhVW5pZm9ybU5hbWUpIHsKKyAgICAgICAgdmFyIG5vcm1h
bGl6ZURpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJWZWN0b3IzIl0uTm9ybWFsaXplKHRoaXMuZGlyZWN0aW9uKTsKKyAgICAgICAgZWZm
ZWN0LnNldEZsb2F0MyhsaWdodERhdGFVbmlmb3JtTmFtZSwgbm9ybWFsaXplRGlyZWN0aW9uLngs
IG5vcm1hbGl6ZURpcmVjdGlvbi55LCBub3JtYWxpemVEaXJlY3Rpb24ueik7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ29tcHV0ZXMgdGhlIHdvcmxkIG1h
dHJpeCBvZiB0aGUgbm9kZQorICAgICAqIEBwYXJhbSBmb3JjZSBkZWZpbmVzIGlmIHRoZSBjYWNo
ZSB2ZXJzaW9uIHNob3VsZCBiZSBpbnZhbGlkYXRlZCBmb3JjaW5nIHRoZSB3b3JsZCBtYXRyaXgg
dG8gYmUgY3JlYXRlZCBmcm9tIHNjcmF0Y2gKKyAgICAgKiBAcGFyYW0gdXNlV2FzVXBkYXRlZEZs
YWcgZGVmaW5lcyBhIHJlc2VydmVkIHByb3BlcnR5CisgICAgICogQHJldHVybnMgdGhlIHdvcmxk
IG1hdHJpeAorICAgICAqLworICAgIEhlbWlzcGhlcmljTGlnaHQucHJvdG90eXBlLmNvbXB1dGVX
b3JsZE1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl93b3JsZE1hdHJp
eCkgeworICAgICAgICAgICAgdGhpcy5fd29ybGRNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRNYXRyaXg7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIDMuCisgICAgICogQHJldHVybiBUaGUgbGlnaHQg
VHlwZSBpZCBhcyBhIGNvbnN0YW50IGRlZmluZXMgaW4gTGlnaHQuTElHSFRUWVBFSURfeAorICAg
ICAqLworICAgIEhlbWlzcGhlcmljTGlnaHQucHJvdG90eXBlLmdldFR5cGVJRCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuIF9saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJMaWdodCJdLkxJR0hUVFlQRUlEX0hFTUlTUEhFUklDTElHSFQ7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBQcmVwYXJlcyB0aGUgbGlzdCBvZiBkZWZpbmVzIHNwZWNpZmljIHRvIHRoZSBsaWdo
dCB0eXBlLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0IG9mIGRlZmluZXMKKyAgICAg
KiBAcGFyYW0gbGlnaHRJbmRleCBkZWZpbmVzIHRoZSBpbmRleCBvZiB0aGUgbGlnaHQgZm9yIHRo
ZSBlZmZlY3QKKyAgICAgKi8KKyAgICBIZW1pc3BoZXJpY0xpZ2h0LnByb3RvdHlwZS5wcmVwYXJl
TGlnaHRTcGVjaWZpY0RlZmluZXMgPSBmdW5jdGlvbiAoZGVmaW5lcywgbGlnaHRJbmRleCkgewor
ICAgICAgICBkZWZpbmVzWyJIRU1JTElHSFQiICsgbGlnaHRJbmRleF0gPSB0cnVlOworICAgIH07
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplQXNDb2xvcjMiXSkoKQorICAgIF0sIEhlbWlzcGhlcmljTGlnaHQucHJv
dG90eXBlLCAiZ3JvdW5kQ29sb3IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVmVjdG9yMyJd
KSgpCisgICAgXSwgSGVtaXNwaGVyaWNMaWdodC5wcm90b3R5cGUsICJkaXJlY3Rpb24iLCB2b2lk
IDApOworICAgIHJldHVybiBIZW1pc3BoZXJpY0xpZ2h0OworfShfbGlnaHRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siTGlnaHQiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L0xpZ2h0cy9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9MaWdodHMvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBMaWdodCwgU2hhZG93TGlnaHQsIERpcmVjdGlvbmFsTGln
aHQsIEhlbWlzcGhlcmljTGlnaHQsIFBvaW50TGlnaHQsIFNwb3RMaWdodCwgU2hhZG93R2VuZXJh
dG9yLCBTaGFkb3dHZW5lcmF0b3JTY2VuZUNvbXBvbmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpZ2h0ICovICIuL0xpZ2h0cy9saWdodC50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xpZ2h0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxpZ2h0Il07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3NoYWRvd0xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NoYWRvd0xpZ2h0ICovICIuL0xpZ2h0cy9zaGFk
b3dMaWdodC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaGFkb3dMaWdodCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX3NoYWRvd0xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNoYWRv
d0xpZ2h0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRvd3NfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
U2hhZG93cy9pbmRleCAqLyAiLi9MaWdodHMvU2hhZG93cy9pbmRleC50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJTaGFkb3dHZW5lcmF0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9TaGFkb3dzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNoYWRvd0dlbmVyYXRvciJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTaGFkb3dHZW5lcmF0b3JTY2VuZUNvbXBvbmVudCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX1NoYWRvd3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfZGlyZWN0aW9uYWxMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kaXJlY3Rpb25hbExpZ2h0ICovICIuL0xpZ2h0
cy9kaXJlY3Rpb25hbExpZ2h0LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRpcmVjdGlvbmFsTGln
aHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kaXJlY3Rpb25hbExpZ2h0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIkRpcmVjdGlvbmFsTGlnaHQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfaGVtaXNwaGVyaWNMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZW1pc3BoZXJpY0xpZ2h0ICovICIuL0xpZ2h0
cy9oZW1pc3BoZXJpY0xpZ2h0LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhlbWlzcGhlcmljTGln
aHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9oZW1pc3BoZXJpY0xpZ2h0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIkhlbWlzcGhlcmljTGlnaHQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfcG9pbnRMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb2ludExpZ2h0ICovICIuL0xpZ2h0cy9wb2ludExpZ2h0
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvaW50TGlnaHQiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9wb2ludExpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlBvaW50TGlnaHQiXTsg
fSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BvdExpZ2h0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Nwb3RMaWdodCAqLyAi
Li9MaWdodHMvc3BvdExpZ2h0LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNwb3RMaWdodCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3Nwb3RMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9f
WyJTcG90TGlnaHQiXTsgfSk7CisKKworCisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9MaWdodHMvbGlnaHQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vTGlnaHRzL2xpZ2h0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTGlnaHQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTGlnaHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIExpZ2h0OyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xp
Yi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAq
LyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3Iu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZSAqLyAiLi9ub2RlLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc191bmlmb3JtQnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRlcmlhbHMvdW5pZm9ybUJ1ZmZlciAqLyAiLi9NYXRlcmlhbHMvdW5pZm9ybUJ1ZmZlci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90eXBlU3Rv
cmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisKKworLyoqCisgKiBCYXNl
IGNsYXNzIG9mIGFsbCB0aGUgbGlnaHRzIGluIEJhYnlsb24uIEl0IGdyb3VwcyBhbGwgdGhlIGdl
bmVyaWMgaW5mb3JtYXRpb24gYWJvdXQgbGlnaHRzLgorICogTGlnaHRzIGFyZSB1c2VkLCBhcyB5
b3Ugd291bGQgZXhwZWN0LCB0byBhZmZlY3QgaG93IG1lc2hlcyBhcmUgc2VlbiwgaW4gdGVybXMg
b2YgYm90aCBpbGx1bWluYXRpb24gYW5kIGNvbG91ci4KKyAqIEFsbCBtZXNoZXMgYWxsb3cgbGln
aHQgdG8gcGFzcyB0aHJvdWdoIHRoZW0gdW5sZXNzIHNoYWRvdyBnZW5lcmF0aW9uIGlzIGFjdGl2
YXRlZC4gVGhlIGRlZmF1bHQgbnVtYmVyIG9mIGxpZ2h0cyBhbGxvd2VkIGlzIGZvdXIgYnV0IHRo
aXMgY2FuIGJlIGluY3JlYXNlZC4KKyAqLwordmFyIExpZ2h0ID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKExpZ2h0LCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBM
aWdodCBvYmplY3QgaW4gdGhlIHNjZW5lLgorICAgICAqIERvY3VtZW50YXRpb24gOiBodHRwczov
L2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvbGlnaHRzCisgICAgICogQHBhcmFtIG5hbWUg
VGhlIGZpcmVuZGx5IG5hbWUgb2YgdGhlIGxpZ2h0CisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBz
Y2VuZSB0aGUgbGlnaHQgYmVsb25ncyB0b28KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBMaWdodChu
YW1lLCBzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1l
LCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERpZmZ1c2UgZ2l2ZXMg
dGhlIGJhc2ljIGNvbG9yIHRvIGFuIG9iamVjdC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LmRpZmZ1c2UgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siQ29sb3IzIl0oMS4wLCAxLjAsIDEuMCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBT
cGVjdWxhciBwcm9kdWNlcyBhIGhpZ2hsaWdodCBjb2xvciBvbiBhbiBvYmplY3QuCisgICAgICAg
ICAqIE5vdGU6IFRoaXMgaXMgbm90ZSBhZmZlY3RpbmcgUEJSIG1hdGVyaWFscy4KKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLnNwZWN1bGFyID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbG9yMyJdKDEuMCwgMS4wLCAxLjApOworICAgICAg
ICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgZmFsbG9mZiB0eXBlIGZvciB0aGlzIGxpZ2h0
LiBUaGlzIGxldHMgb3ZlcnJyaWRpbmcgaG93IHB1bmN0dWFsIGxpZ2h0IGFyZQorICAgICAgICAg
KiBmYWxsaW5nIG9mZiBiYXNlIG9uIHJhbmdlIG9yIGFuZ2xlLgorICAgICAgICAgKiBUaGlzIGNh
biBiZSBzZXQgdG8gYW55IHZhbHVlcyBpbiBMaWdodC5GQUxMT0ZGX3guCisgICAgICAgICAqCisg
ICAgICAgICAqIE5vdGU6IFRoaXMgaXMgb25seSB1c2VmdWwgZm9yIFBCUiBNYXRlcmlhbHMgYXQg
dGhlIG1vbWVudC4gVGhpcyBjb3VsZCBiZSBleHRlbmRlZCBpZiByZXF1aXJlZCB0bworICAgICAg
ICAgKiBvdGhlciB0eXBlcyBvZiBtYXRlcmlhbHMuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5mYWxsb2ZmVHlwZSA9IExpZ2h0LkZBTExPRkZfREVGQVVMVDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFN0cmVuZ3RoIG9mIHRoZSBsaWdodC4KKyAgICAgICAgICogTm90ZTogQnkgZGVmYXVs
dCBpdCBpcyBkZWZpbmUgaW4gdGhlIGZyYW1ld29yayBvd24gdW5pdC4KKyAgICAgICAgICogTm90
ZTogSW4gUEJSIG1hdGVyaWFscyB0aGUgaW50ZW5zaXR5TW9kZSBjYW4gYmUgdXNlIHRvIGNob3Nl
IHdoYXQgdW5pdCB0aGUgaW50ZW5zaXR5IGlzIGRlZmluZWQgaW4uCisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5pbnRlbnNpdHkgPSAxLjA7CisgICAgICAgIF90aGlzLl9yYW5nZSA9IE51bWJl
ci5NQVhfVkFMVUU7CisgICAgICAgIF90aGlzLl9pbnZlcnNlU3F1YXJlZFJhbmdlID0gMDsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIENhY2hlZCBwaG90b21ldHJpYyBzY2FsZSBkZWZhdWx0IHRv
IDEuMCBhcyB0aGUgYXV0b21hdGljIGludGVuc2l0eSBtb2RlIGRlZmF1bHRzIHRvIDEuMCBmb3Ig
ZXZlcnkgdHlwZQorICAgICAgICAgKiBvZiBsaWdodC4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLl9waG90b21ldHJpY1NjYWxlID0gMS4wOworICAgICAgICBfdGhpcy5faW50ZW5zaXR5TW9k
ZSA9IExpZ2h0LklOVEVOU0lUWU1PREVfQVVUT01BVElDOworICAgICAgICBfdGhpcy5fcmFkaXVz
ID0gMC4wMDAwMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhlIHJlbmRlcmlu
ZyBwcmlvcml0eSBvZiB0aGUgbGlnaHRzLiBJdCBjYW4gaGVscCBpbiBjYXNlIG9mIGZhbGxiYWNr
IG9yIG51bWJlciBvZiBsaWdodHMKKyAgICAgICAgICogZXhjZWVkaW5nIHRoZSBudW1iZXIgYWxs
b3dlZCBvZiB0aGUgbWF0ZXJpYWxzLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucmVuZGVy
UHJpb3JpdHkgPSAwOworICAgICAgICBfdGhpcy5fc2hhZG93RW5hYmxlZCA9IHRydWU7CisgICAg
ICAgIF90aGlzLl9leGNsdWRlV2l0aExheWVyTWFzayA9IDA7CisgICAgICAgIF90aGlzLl9pbmNs
dWRlT25seVdpdGhMYXllck1hc2sgPSAwOworICAgICAgICBfdGhpcy5fbGlnaHRtYXBNb2RlID0g
MDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4gSW50ZXJuYWwgdXNlIG9ubHkuCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5fZXhjbHVkZWRNZXNoZXNJZHMgPSBuZXcgQXJyYXko
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4gSW50ZXJuYWwgdXNlIG9ubHkuCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5faW5jbHVkZWRPbmx5TWVzaGVzSWRzID0gbmV3IEFy
cmF5KCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9pc0xpZ2h0ID0g
dHJ1ZTsKKyAgICAgICAgX3RoaXMuZ2V0U2NlbmUoKS5hZGRMaWdodChfdGhpcyk7CisgICAgICAg
IF90aGlzLl91bmlmb3JtQnVmZmVyID0gbmV3IF9NYXRlcmlhbHNfdW5pZm9ybUJ1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJVbmlmb3JtQnVmZmVyIl0oX3RoaXMuZ2V0U2NlbmUo
KS5nZXRFbmdpbmUoKSk7CisgICAgICAgIF90aGlzLl9idWlsZFVuaWZvcm1MYXlvdXQoKTsKKyAg
ICAgICAgX3RoaXMuaW5jbHVkZWRPbmx5TWVzaGVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIF90
aGlzLmV4Y2x1ZGVkTWVzaGVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIF90aGlzLl9yZXN5bmNN
ZXNoZXMoKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoTGlnaHQucHJvdG90eXBlLCAicmFuZ2UiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBEZWZpbmVzIGhvdyBmYXIgZnJvbSB0aGUgc291cmNlIHRoZSBsaWdodCBpcyBpbXBhY3Rp
bmcgaW4gc2NlbmUgdW5pdHMuCisgICAgICAgICAqIE5vdGU6IFVudXNlZCBpbiBQQlIgbWF0ZXJp
YWwgYXMgdGhlIGRpc3RhbmNlIGxpZ2h0IGZhbGxvZmYgaXMgZGVmaW5lZCBmb2xsb3dpbmcgdGhl
IGludmVyc2Ugc3F1YXJlZCBmYWxsb2ZmLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmFuZ2U7CisgICAgICAgIH0sCisg
ICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIGhvdyBmYXIgZnJvbSB0aGUgc291cmNlIHRo
ZSBsaWdodCBpcyBpbXBhY3RpbmcgaW4gc2NlbmUgdW5pdHMuCisgICAgICAgICAqIE5vdGU6IFVu
dXNlZCBpbiBQQlIgbWF0ZXJpYWwgYXMgdGhlIGRpc3RhbmNlIGxpZ2h0IGZhbGxvZmYgaXMgZGVm
aW5lZCBmb2xsb3dpbmcgdGhlIGludmVyc2Ugc3F1YXJlZCBmYWxsb2ZmLgorICAgICAgICAgKi8K
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3Jhbmdl
ID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9pbnZlcnNlU3F1YXJlZFJhbmdlID0gMS4wIC8g
KHRoaXMucmFuZ2UgKiB0aGlzLnJhbmdlKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KExpZ2h0LnByb3RvdHlwZSwgImludGVuc2l0eU1vZGUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBwaG90b21ldHJpYyBzY2FsZSB1c2VkIHRvIGlu
dGVycHJldCB0aGUgaW50ZW5zaXR5LgorICAgICAgICAgKiBUaGlzIGlzIG9ubHkgcmVsZXZhbnQg
d2l0aCBQQlIgTWF0ZXJpYWxzIHdoZXJlIHRoZSBsaWdodCBpbnRlbnNpdHkgY2FuIGJlIGRlZmlu
ZWQgaW4gYSBwaHlzaWNhbCB3YXkuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlbnNpdHlNb2RlOworICAgICAgICB9
LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgcGhvdG9tZXRyaWMgc2NhbGUgdXNl
ZCB0byBpbnRlcnByZXQgdGhlIGludGVuc2l0eS4KKyAgICAgICAgICogVGhpcyBpcyBvbmx5IHJl
bGV2YW50IHdpdGggUEJSIE1hdGVyaWFscyB3aGVyZSB0aGUgbGlnaHQgaW50ZW5zaXR5IGNhbiBi
ZSBkZWZpbmVkIGluIGEgcGh5c2ljYWwgd2F5LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2ludGVuc2l0eU1vZGUgPSB2YWx1
ZTsKKyAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVQaG90b21ldHJpY1NjYWxlKCk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaWdodC5wcm90b3R5cGUsICJy
YWRpdXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBsaWdodCByYWRpdXMg
dXNlZCBieSBQQlIgTWF0ZXJpYWxzIHRvIHNpbXVsYXRlIHNvZnQgYXJlYSBsaWdodHMuCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9yYWRpdXM7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBzZXRzIHRo
ZSBsaWdodCByYWRpdXMgdXNlZCBieSBQQlIgTWF0ZXJpYWxzIHRvIHNpbXVsYXRlIHNvZnQgYXJl
YSBsaWdodHMuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgdGhpcy5fcmFkaXVzID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9jb21w
dXRlUGhvdG9tZXRyaWNTY2FsZSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoTGlnaHQucHJvdG90eXBlLCAic2hhZG93RW5hYmxlZCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgd2V0aGVyIG9yIG5vdCB0aGUgc2hhZG93cyBhcmUgZW5hYmxl
ZCBmb3IgdGhpcyBsaWdodC4gVGhpcyBjYW4gaGVscCB0dXJuaW5nIG9mZi9vbiBzaGFkb3cgd2l0
aG91dCBkZXRhY2hpbmcKKyAgICAgICAgICogdGhlIGN1cnJlbnQgc2hhZG93IGdlbmVyYXRvci4K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3NoYWRvd0VuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBTZXRzIHdldGhlciBvciBub3QgdGhlIHNoYWRvd3MgYXJlIGVuYWJsZWQgZm9yIHRoaXMg
bGlnaHQuIFRoaXMgY2FuIGhlbHAgdHVybmluZyBvZmYvb24gc2hhZG93IHdpdGhvdXQgZGV0YWNo
aW5nCisgICAgICAgICAqIHRoZSBjdXJyZW50IHNoYWRvdyBnZW5lcmF0b3IuCisgICAgICAgICAq
LworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMu
X3NoYWRvd0VuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2hhZG93RW5hYmxlZCA9IHZhbHVlOworICAg
ICAgICAgICAgdGhpcy5fbWFya01lc2hlc0FzTGlnaHREaXJ0eSgpOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHQucHJvdG90eXBlLCAiaW5jbHVkZWRP
bmx5TWVzaGVzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb25seSBtZXNo
ZXMgaW1wYWN0ZWQgYnkgdGhpcyBsaWdodC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVkT25seU1lc2hlczsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIG9ubHkgbWVzaGVz
IGltcGFjdGVkIGJ5IHRoaXMgbGlnaHQuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faW5jbHVkZWRPbmx5TWVzaGVzID0gdmFs
dWU7CisgICAgICAgICAgICB0aGlzLl9ob29rQXJyYXlGb3JJbmNsdWRlZE9ubHkodmFsdWUpOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHQucHJvdG90
eXBlLCAiZXhjbHVkZWRNZXNoZXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBtZXNoZXMgbm90IGltcGFjdGVkIGJ5IHRoaXMgbGlnaHQuCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9leGNsdWRlZE1l
c2hlczsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIG1lc2hl
cyBub3QgaW1wYWN0ZWQgYnkgdGhpcyBsaWdodC4KKyAgICAgICAgICovCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9leGNsdWRlZE1lc2hlcyA9IHZh
bHVlOworICAgICAgICAgICAgdGhpcy5faG9va0FycmF5Rm9yRXhjbHVkZWQodmFsdWUpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHQucHJvdG90eXBl
LCAiZXhjbHVkZVdpdGhMYXllck1hc2siLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSBsYXllciBpZCB1c2UgdG8gZmluZCB3aGF0IG1lc2hlcyBhcmUgbm90IGltcGFjdGVkIGJ5
IHRoZSBsaWdodC4KKyAgICAgICAgICogSW5hY3RpdmUgaWYgMAorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhjbHVkZVdp
dGhMYXllck1hc2s7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRo
ZSBsYXllciBpZCB1c2UgdG8gZmluZCB3aGF0IG1lc2hlcyBhcmUgbm90IGltcGFjdGVkIGJ5IHRo
ZSBsaWdodC4KKyAgICAgICAgICogSW5hY3RpdmUgaWYgMAorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4Y2x1ZGVXaXRoTGF5
ZXJNYXNrID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9yZXN5bmNNZXNoZXMoKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExpZ2h0LnByb3RvdHlwZSwg
ImluY2x1ZGVPbmx5V2l0aExheWVyTWFzayIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIGxheWVyIGlkIHVzZSB0byBmaW5kIHdoYXQgbWVzaGVzIGFyZSBpbXBhY3RlZCBieSB0
aGUgbGlnaHQuCisgICAgICAgICAqIEluYWN0aXZlIGlmIDAKKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVPbmx5
V2l0aExheWVyTWFzazsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMg
dGhlIGxheWVyIGlkIHVzZSB0byBmaW5kIHdoYXQgbWVzaGVzIGFyZSBpbXBhY3RlZCBieSB0aGUg
bGlnaHQuCisgICAgICAgICAqIEluYWN0aXZlIGlmIDAKKyAgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pbmNsdWRlT25seVdpdGhM
YXllck1hc2sgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX3Jlc3luY01lc2hlcygpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHQucHJvdG90eXBl
LCAibGlnaHRtYXBNb2RlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGln
aHRtYXAgbW9kZSBvZiB0aGlzIGxpZ2h0IChzaG91bGQgYmUgb25lIG9mIHRoZSBjb25zdGFudHMg
ZGVmaW5lZCBieSBMaWdodC5MSUdIVE1BUF94KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGlnaHRtYXBNb2RlOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgbGlnaHRtYXAgbW9kZSBv
ZiB0aGlzIGxpZ2h0IChzaG91bGQgYmUgb25lIG9mIHRoZSBjb25zdGFudHMgZGVmaW5lZCBieSBM
aWdodC5MSUdIVE1BUF94KQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9saWdodG1hcE1vZGUgPT09IHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
bGlnaHRtYXBNb2RlID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9tYXJrTWVzaGVzQXNMaWdo
dERpcnR5KCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhl
IHN0cmluZyAiTGlnaHQiLgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICov
CisgICAgTGlnaHQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICJMaWdodCI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGUg
bGlnaHQgaW5mb3JtYXRpb24gdG8gYSByZWFkYWJsZSBzdHJpbmcgZm9yIGRlYnVnIHB1cnBvc2Uu
CisgICAgICogQHBhcmFtIGZ1bGxEZXRhaWxzIFN1cHBvcnRzIGZvciBtdWx0aXBsZSBsZXZlbHMg
b2YgbG9nZ2luZyB3aXRoaW4gc2NlbmUgbG9hZGluZworICAgICAqIEByZXR1cm5zIHRoZSBodW1h
biByZWFkYWJsZSBsaWdodCBpbmZvCisgICAgICovCisgICAgTGlnaHQucHJvdG90eXBlLnRvU3Ry
aW5nID0gZnVuY3Rpb24gKGZ1bGxEZXRhaWxzKSB7CisgICAgICAgIHZhciByZXQgPSAiTmFtZTog
IiArIHRoaXMubmFtZTsKKyAgICAgICAgcmV0ICs9ICIsIHR5cGU6ICIgKyAoWyJQb2ludCIsICJE
aXJlY3Rpb25hbCIsICJTcG90IiwgIkhlbWlzcGhlcmljIl0pW3RoaXMuZ2V0VHlwZUlEKCldOwor
ICAgICAgICBpZiAodGhpcy5hbmltYXRpb25zKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHJl
dCArPSAiLCBhbmltYXRpb25bMF06ICIgKyB0aGlzLmFuaW1hdGlvbnNbaV0udG9TdHJpbmcoZnVs
bERldGFpbHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmdWxsRGV0
YWlscykgeworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIExpZ2h0LnByb3RvdHlwZS5fc3luY1BhcmVudEVuYWJsZWRTdGF0ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fc3luY1BhcmVudEVuYWJs
ZWRTdGF0ZS5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl9yZXN5bmNNZXNoZXMoKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldCB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGlzIG5vZGUuCisg
ICAgICogQHBhcmFtIHZhbHVlIC0gdGhlIG5ldyBlbmFibGVkIHN0YXRlCisgICAgICovCisgICAg
TGlnaHQucHJvdG90eXBlLnNldEVuYWJsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
X3N1cGVyLnByb3RvdHlwZS5zZXRFbmFibGVkLmNhbGwodGhpcywgdmFsdWUpOworICAgICAgICB0
aGlzLl9yZXN5bmNNZXNoZXMoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhl
IExpZ2h0IGFzc29jaWF0ZWQgc2hhZG93IGdlbmVyYXRvciBpZiBhbnkuCisgICAgICogQHJldHVy
biB0aGUgYXNzb2NpYXRlZCBzaGFkb3cgZ2VuZXJhdG9yLgorICAgICAqLworICAgIExpZ2h0LnBy
b3RvdHlwZS5nZXRTaGFkb3dHZW5lcmF0b3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biB0aGlzLl9zaGFkb3dHZW5lcmF0b3I7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IGEgVmVjdG9yMywgdGhlIGFic29sdXRlIGxpZ2h0IHBvc2l0aW9uIGluIHRoZSBXb3JsZC4KKyAg
ICAgKiBAcmV0dXJucyB0aGUgd29ybGQgc3BhY2UgcG9zaXRpb24gb2YgdGhlIGxpZ2h0CisgICAg
ICovCisgICAgTGlnaHQucHJvdG90eXBlLmdldEFic29sdXRlUG9zaXRpb24gPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNw
ZWNpZmllcyBpZiB0aGUgbGlnaHQgd2lsbCBhZmZlY3QgdGhlIHBhc3NlZCBtZXNoLgorICAgICAq
IEBwYXJhbSBtZXNoIFRoZSBtZXNoIHRvIHRlc3QgYWdhaW5zdCB0aGUgbGlnaHQKKyAgICAgKiBA
cmV0dXJuIHRydWUgdGhlIG1lc2ggaXMgYWZmZWN0ZWQgb3RoZXJ3aXNlLCBmYWxzZS4KKyAgICAg
Ki8KKyAgICBMaWdodC5wcm90b3R5cGUuY2FuQWZmZWN0TWVzaCA9IGZ1bmN0aW9uIChtZXNoKSB7
CisgICAgICAgIGlmICghbWVzaCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuaW5jbHVkZWRPbmx5TWVzaGVzICYmIHRoaXMuaW5jbHVkZWRP
bmx5TWVzaGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5pbmNsdWRlZE9ubHlNZXNoZXMuaW5kZXhPZiht
ZXNoKSA9PT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodGhpcy5leGNsdWRlZE1lc2hlcyAmJiB0aGlzLmV4Y2x1ZGVkTWVzaGVzLmxlbmd0
aCA+IDAgJiYgdGhpcy5leGNsdWRlZE1lc2hlcy5pbmRleE9mKG1lc2gpICE9PSAtMSkgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmluY2x1
ZGVPbmx5V2l0aExheWVyTWFzayAhPT0gMCAmJiAodGhpcy5pbmNsdWRlT25seVdpdGhMYXllck1h
c2sgJiBtZXNoLmxheWVyTWFzaykgPT09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5leGNsdWRlV2l0aExheWVyTWFzayAhPT0gMCAm
JiB0aGlzLmV4Y2x1ZGVXaXRoTGF5ZXJNYXNrICYgbWVzaC5sYXllck1hc2spIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNvcnQgZnVuY3Rpb24gdG8gb3JkZXIgbGlnaHRzIGZvciByZW5k
ZXJpbmcuCisgICAgICogQHBhcmFtIGEgRmlyc3QgTGlnaHQgb2JqZWN0IHRvIGNvbXBhcmUgdG8g
c2Vjb25kLgorICAgICAqIEBwYXJhbSBiIFNlY29uZCBMaWdodCBvYmplY3QgdG8gY29tcGFyZSBm
aXJzdC4KKyAgICAgKiBAcmV0dXJuIC0xIHRvIHJlZHVjZSdzIGEncyBpbmRleCByZWxhdGl2ZSB0
byBiZSwgMCBmb3Igbm8gY2hhbmdlLCAxIHRvIGluY3JlYXNlIGEncyBpbmRleCByZWxhdGl2ZSB0
byBiLgorICAgICAqLworICAgIExpZ2h0LkNvbXBhcmVMaWdodHNQcmlvcml0eSA9IGZ1bmN0aW9u
IChhLCBiKSB7CisgICAgICAgIC8vc2hhZG93LWNhc3RpbmcgbGlnaHRzIGhhdmUgcHJpb3JpdHkg
b3ZlciBub24tc2hhZG93LWNhc3RpbmcgbGlnaHRzCisgICAgICAgIC8vdGhlIHJlbmRlclByaW9p
cnR5IGlzIGEgc2Vjb25kYXJ5IHNvcnQgY3JpdGVyaW9uCisgICAgICAgIGlmIChhLnNoYWRvd0Vu
YWJsZWQgIT09IGIuc2hhZG93RW5hYmxlZCkgeworICAgICAgICAgICAgcmV0dXJuIChiLnNoYWRv
d0VuYWJsZWQgPyAxIDogMCkgLSAoYS5zaGFkb3dFbmFibGVkID8gMSA6IDApOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBiLnJlbmRlclByaW9yaXR5IC0gYS5yZW5kZXJQcmlvcml0eTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJlbGVhc2VzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBub2RlLgorICAgICAqIEBwYXJhbSBkb05vdFJlY3Vyc2UgU2V0IHRvIHRydWUgdG8gbm90
IHJlY3Vyc2UgaW50byBlYWNoIGNoaWxkcmVuIChyZWN1cnNlIGludG8gZWFjaCBjaGlsZHJlbiBi
eSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBkaXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcyBTZXQg
dG8gdHJ1ZSB0byBhbHNvIGRpc3Bvc2UgcmVmZXJlbmNlZCBtYXRlcmlhbHMgYW5kIHRleHR1cmVz
IChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqLworICAgIExpZ2h0LnByb3RvdHlwZS5kaXNwb3Nl
ID0gZnVuY3Rpb24gKGRvTm90UmVjdXJzZSwgZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMpIHsK
KyAgICAgICAgaWYgKGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzID09PSB2b2lkIDApIHsgZGlz
cG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMgPSBmYWxzZTsgfQorICAgICAgICBpZiAodGhpcy5fc2hh
ZG93R2VuZXJhdG9yKSB7CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dHZW5lcmF0b3IuZGlzcG9z
ZSgpOworICAgICAgICAgICAgdGhpcy5fc2hhZG93R2VuZXJhdG9yID0gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5zdG9wQW5p
bWF0aW9uKHRoaXMpOworICAgICAgICAvLyBSZW1vdmUgZnJvbSBtZXNoZXMKKyAgICAgICAgZm9y
ICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuZ2V0U2NlbmUoKS5tZXNoZXM7IF9pIDwgX2EubGVuZ3Ro
OyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IF9hW19pXTsKKyAgICAgICAgICAgIG1l
c2guX3JlbW92ZUxpZ2h0U291cmNlKHRoaXMsIHRydWUpOworICAgICAgICB9CisgICAgICAgIHRo
aXMuX3VuaWZvcm1CdWZmZXIuZGlzcG9zZSgpOworICAgICAgICAvLyBSZW1vdmUgZnJvbSBzY2Vu
ZQorICAgICAgICB0aGlzLmdldFNjZW5lKCkucmVtb3ZlTGlnaHQodGhpcyk7CisgICAgICAgIF9z
dXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMsIGRvTm90UmVjdXJzZSwgZGlzcG9zZU1h
dGVyaWFsQW5kVGV4dHVyZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUg
bGlnaHQgdHlwZSBJRCAoaW50ZWdlcikuCisgICAgICogQHJldHVybnMgVGhlIGxpZ2h0IFR5cGUg
aWQgYXMgYSBjb25zdGFudCBkZWZpbmVzIGluIExpZ2h0LkxJR0hUVFlQRUlEX3gKKyAgICAgKi8K
KyAgICBMaWdodC5wcm90b3R5cGUuZ2V0VHlwZUlEID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGludGVuc2l0eSBz
Y2FsZWQgYnkgdGhlIFBob3RvbWV0cmljIFNjYWxlIGFjY29yZGluZyB0byB0aGUgbGlnaHQgdHlw
ZSBhbmQgaW50ZW5zaXR5IG1vZGUuCisgICAgICogQHJldHVybnMgdGhlIHNjYWxlZCBpbnRlbnNp
dHkgaW4gaW50ZW5zaXR5IG1vZGUgdW5pdAorICAgICAqLworICAgIExpZ2h0LnByb3RvdHlwZS5n
ZXRTY2FsZWRJbnRlbnNpdHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9w
aG90b21ldHJpY1NjYWxlICogdGhpcy5pbnRlbnNpdHk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIGEgbmV3IExpZ2h0IG9iamVjdCwgbmFtZWQgIm5hbWUiLCBmcm9tIHRoZSBjdXJy
ZW50IG9uZS4KKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY2xvbmVkIGxpZ2h0
CisgICAgICogQHJldHVybnMgdGhlIG5ldyBjcmVhdGVkIGxpZ2h0CisgICAgICovCisgICAgTGln
aHQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgdmFyIGNvbnN0
cnVjdG9yID0gTGlnaHQuR2V0Q29uc3RydWN0b3JGcm9tTmFtZSh0aGlzLmdldFR5cGVJRCgpLCBu
YW1lLCB0aGlzLmdldFNjZW5lKCkpOworICAgICAgICBpZiAoIWNvbnN0cnVjdG9yKSB7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVy
Il0uQ2xvbmUoY29uc3RydWN0b3IsIHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogU2Vy
aWFsaXplcyB0aGUgY3VycmVudCBsaWdodCBpbnRvIGEgU2VyaWFsaXphdGlvbiBvYmplY3QuCisg
ICAgICogQHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgb2JqZWN0LgorICAgICAqLworICAgIExpZ2h0
LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxp
emF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXplKHRoaXMpOworICAgICAgICAvLyBU
eXBlCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudHlwZSA9IHRoaXMuZ2V0VHlwZUlEKCk7
CisgICAgICAgIC8vIFBhcmVudAorICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHsKKyAgICAgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QucGFyZW50SWQgPSB0aGlzLnBhcmVudC5pZDsKKyAgICAg
ICAgfQorICAgICAgICAvLyBJbmNsdXNpb24gLyBleGNsdXNpb25zCisgICAgICAgIGlmICh0aGlz
LmV4Y2x1ZGVkTWVzaGVzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QuZXhjbHVkZWRNZXNoZXNJZHMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuZXhjbHVkZWRN
ZXNoZXMuZm9yRWFjaChmdW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QuZXhjbHVkZWRNZXNoZXNJZHMucHVzaChtZXNoLmlkKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmluY2x1ZGVkT25seU1lc2hlcy5sZW5n
dGggPiAwKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmluY2x1ZGVkT25seU1l
c2hlc0lkcyA9IFtdOworICAgICAgICAgICAgdGhpcy5pbmNsdWRlZE9ubHlNZXNoZXMuZm9yRWFj
aChmdW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
aW5jbHVkZWRPbmx5TWVzaGVzSWRzLnB1c2gobWVzaC5pZCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkFwcGVu
ZFNlcmlhbGl6ZWRBbmltYXRpb25zKHRoaXMsIHNlcmlhbGl6YXRpb25PYmplY3QpOworICAgICAg
ICBzZXJpYWxpemF0aW9uT2JqZWN0LnJhbmdlcyA9IHRoaXMuc2VyaWFsaXplQW5pbWF0aW9uUmFu
Z2VzKCk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyB0eXBlZCBsaWdodCBmcm9tIHRoZSBwYXNzZWQgdHlw
ZSAoaW50ZWdlcikgOiBwb2ludCBsaWdodCA9IDAsIGRpcmVjdGlvbmFsIGxpZ2h0ID0gMSwgc3Bv
dCBsaWdodCA9IDIsIGhlbWlzcGhlcmljIGxpZ2h0ID0gMy4KKyAgICAgKiBUaGlzIG5ldyBsaWdo
dCBpcyBuYW1lZCAibmFtZSIgYW5kIGFkZGVkIHRvIHRoZSBwYXNzZWQgc2NlbmUuCisgICAgICog
QHBhcmFtIHR5cGUgVHlwZSBhY2NvcmRpbmcgdG8gdGhlIHR5cGVzIGF2YWlsYWJsZSBpbiBMaWdo
dC5MSUdIVFRZUEVJRF94CisgICAgICogQHBhcmFtIG5hbWUgVGhlIGZyaWVuZGx5IG5hbWUgb2Yg
dGhlIGxpZ2h0CisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0aGUgbmV3IGxpZ2h0IHdp
bGwgYmVsb25nIHRvCisgICAgICogQHJldHVybnMgdGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uCisg
ICAgICovCisgICAgTGlnaHQuR2V0Q29uc3RydWN0b3JGcm9tTmFtZSA9IGZ1bmN0aW9uICh0eXBl
LCBuYW1lLCBzY2VuZSkgeworICAgICAgICB2YXIgY29uc3RydWN0b3JGdW5jID0gX25vZGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZSJdLkNvbnN0cnVjdCgiTGlnaHRfVHlwZV8i
ICsgdHlwZSwgbmFtZSwgc2NlbmUpOworICAgICAgICBpZiAoY29uc3RydWN0b3JGdW5jKSB7Cisg
ICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3JGdW5jOworICAgICAgICB9CisgICAgICAgIC8v
IERlZmF1bHQgdG8gbm8gbGlnaHQgZm9yIG5vbmUgcHJlc2VudCBvbmNlLgorICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlcyB0aGUgcGFzc2VkICJwYXJz
ZWRMaWdodCIgYW5kIHJldHVybnMgYSBuZXcgaW5zdGFuY2VkIExpZ2h0IGZyb20gdGhpcyBwYXJz
aW5nLgorICAgICAqIEBwYXJhbSBwYXJzZWRMaWdodCBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBv
ZiB0aGUgbGlnaHQKKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRvIGNyZWF0ZSB0aGUg
cGFyc2VkIGxpZ2h0IGluCisgICAgICogQHJldHVybnMgdGhlIGNyZWF0ZWQgbGlnaHQgYWZ0ZXIg
cGFyc2luZworICAgICAqLworICAgIExpZ2h0LlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZExpZ2h0
LCBzY2VuZSkgeworICAgICAgICB2YXIgY29uc3RydWN0b3IgPSBMaWdodC5HZXRDb25zdHJ1Y3Rv
ckZyb21OYW1lKHBhcnNlZExpZ2h0LnR5cGUsIHBhcnNlZExpZ2h0Lm5hbWUsIHNjZW5lKTsKKyAg
ICAgICAgaWYgKCFjb25zdHJ1Y3RvcikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGxpZ2h0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoY29uc3RydWN0b3Is
IHBhcnNlZExpZ2h0LCBzY2VuZSk7CisgICAgICAgIC8vIEluY2x1c2lvbiAvIGV4Y2x1c2lvbnMK
KyAgICAgICAgaWYgKHBhcnNlZExpZ2h0LmV4Y2x1ZGVkTWVzaGVzSWRzKSB7CisgICAgICAgICAg
ICBsaWdodC5fZXhjbHVkZWRNZXNoZXNJZHMgPSBwYXJzZWRMaWdodC5leGNsdWRlZE1lc2hlc0lk
czsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkTGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVz
SWRzKSB7CisgICAgICAgICAgICBsaWdodC5faW5jbHVkZWRPbmx5TWVzaGVzSWRzID0gcGFyc2Vk
TGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVzSWRzOworICAgICAgICB9CisgICAgICAgIC8vIFBhcmVu
dAorICAgICAgICBpZiAocGFyc2VkTGlnaHQucGFyZW50SWQpIHsKKyAgICAgICAgICAgIGxpZ2h0
Ll93YWl0aW5nUGFyZW50SWQgPSBwYXJzZWRMaWdodC5wYXJlbnRJZDsKKyAgICAgICAgfQorICAg
ICAgICAvLyBGYWxsb2ZmCisgICAgICAgIGlmIChwYXJzZWRMaWdodC5mYWxsb2ZmVHlwZSAhPT0g
dW5kZWZpbmVkKSB7CisgICAgICAgICAgICBsaWdodC5mYWxsb2ZmVHlwZSA9IHBhcnNlZExpZ2h0
LmZhbGxvZmZUeXBlOworICAgICAgICB9CisgICAgICAgIC8vIExpZ2h0bWFwcworICAgICAgICBp
ZiAocGFyc2VkTGlnaHQubGlnaHRtYXBNb2RlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
IGxpZ2h0LmxpZ2h0bWFwTW9kZSA9IHBhcnNlZExpZ2h0LmxpZ2h0bWFwTW9kZTsKKyAgICAgICAg
fQorICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIGlmIChwYXJzZWRMaWdodC5hbmltYXRp
b25zKSB7CisgICAgICAgICAgICBmb3IgKHZhciBhbmltYXRpb25JbmRleCA9IDA7IGFuaW1hdGlv
bkluZGV4IDwgcGFyc2VkTGlnaHQuYW5pbWF0aW9ucy5sZW5ndGg7IGFuaW1hdGlvbkluZGV4Kysp
IHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkQW5pbWF0aW9uID0gcGFyc2VkTGlnaHQuYW5p
bWF0aW9uc1thbmltYXRpb25JbmRleF07CisgICAgICAgICAgICAgICAgdmFyIGludGVybmFsQ2xh
c3MgPSBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siX1R5cGVT
dG9yZSJdLkdldENsYXNzKCJCQUJZTE9OLkFuaW1hdGlvbiIpOworICAgICAgICAgICAgICAgIGlm
IChpbnRlcm5hbENsYXNzKSB7CisgICAgICAgICAgICAgICAgICAgIGxpZ2h0LmFuaW1hdGlvbnMu
cHVzaChpbnRlcm5hbENsYXNzLlBhcnNlKHBhcnNlZEFuaW1hdGlvbikpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9ub2RlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIk5vZGUiXS5QYXJzZUFuaW1hdGlvblJhbmdlcyhsaWdodCwgcGFyc2VkTGln
aHQsIHNjZW5lKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkTGlnaHQuYXV0b0FuaW1h
dGUpIHsKKyAgICAgICAgICAgIHNjZW5lLmJlZ2luQW5pbWF0aW9uKGxpZ2h0LCBwYXJzZWRMaWdo
dC5hdXRvQW5pbWF0ZUZyb20sIHBhcnNlZExpZ2h0LmF1dG9BbmltYXRlVG8sIHBhcnNlZExpZ2h0
LmF1dG9BbmltYXRlTG9vcCwgcGFyc2VkTGlnaHQuYXV0b0FuaW1hdGVTcGVlZCB8fCAxLjApOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBsaWdodDsKKyAgICB9OworICAgIExpZ2h0LnByb3Rv
dHlwZS5faG9va0FycmF5Rm9yRXhjbHVkZWQgPSBmdW5jdGlvbiAoYXJyYXkpIHsKKyAgICAgICAg
dmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIG9sZFB1c2ggPSBhcnJheS5wdXNoOworICAg
ICAgICBhcnJheS5wdXNoID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGl0ZW1zID0g
W107CisgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsg
X2krKykgeworICAgICAgICAgICAgICAgIGl0ZW1zW19pXSA9IGFyZ3VtZW50c1tfaV07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2xkUHVzaC5hcHBseShhcnJheSwg
aXRlbXMpOworICAgICAgICAgICAgZm9yICh2YXIgX2EgPSAwLCBpdGVtc18xID0gaXRlbXM7IF9h
IDwgaXRlbXNfMS5sZW5ndGg7IF9hKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGl0
ZW1zXzFbX2FdOworICAgICAgICAgICAgICAgIGl0ZW0uX3Jlc3luY0xpZ2hTb3VyY2UoX3RoaXMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsK
KyAgICAgICAgdmFyIG9sZFNwbGljZSA9IGFycmF5LnNwbGljZTsKKyAgICAgICAgYXJyYXkuc3Bs
aWNlID0gZnVuY3Rpb24gKGluZGV4LCBkZWxldGVDb3VudCkgeworICAgICAgICAgICAgdmFyIGRl
bGV0ZWQgPSBvbGRTcGxpY2UuYXBwbHkoYXJyYXksIFtpbmRleCwgZGVsZXRlQ291bnRdKTsKKyAg
ICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgZGVsZXRlZF8xID0gZGVsZXRlZDsgX2kgPCBkZWxl
dGVkXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBkZWxldGVk
XzFbX2ldOworICAgICAgICAgICAgICAgIGl0ZW0uX3Jlc3luY0xpZ2hTb3VyY2UoX3RoaXMpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZWQ7CisgICAgICAgIH07Cisg
ICAgICAgIGZvciAodmFyIF9pID0gMCwgYXJyYXlfMSA9IGFycmF5OyBfaSA8IGFycmF5XzEubGVu
Z3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgaXRlbSA9IGFycmF5XzFbX2ldOworICAgICAg
ICAgICAgaXRlbS5fcmVzeW5jTGlnaFNvdXJjZSh0aGlzKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgTGlnaHQucHJvdG90eXBlLl9ob29rQXJyYXlGb3JJbmNsdWRlZE9ubHkgPSBmdW5jdGlvbiAo
YXJyYXkpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIG9sZFB1c2gg
PSBhcnJheS5wdXNoOworICAgICAgICBhcnJheS5wdXNoID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgdmFyIGl0ZW1zID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwg
YXJndW1lbnRzLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIGl0ZW1zW19pXSA9IGFy
Z3VtZW50c1tfaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2xk
UHVzaC5hcHBseShhcnJheSwgaXRlbXMpOworICAgICAgICAgICAgX3RoaXMuX3Jlc3luY01lc2hl
cygpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgICAgdmFy
IG9sZFNwbGljZSA9IGFycmF5LnNwbGljZTsKKyAgICAgICAgYXJyYXkuc3BsaWNlID0gZnVuY3Rp
b24gKGluZGV4LCBkZWxldGVDb3VudCkgeworICAgICAgICAgICAgdmFyIGRlbGV0ZWQgPSBvbGRT
cGxpY2UuYXBwbHkoYXJyYXksIFtpbmRleCwgZGVsZXRlQ291bnRdKTsKKyAgICAgICAgICAgIF90
aGlzLl9yZXN5bmNNZXNoZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxldGVkOworICAgICAg
ICB9OworICAgICAgICB0aGlzLl9yZXN5bmNNZXNoZXMoKTsKKyAgICB9OworICAgIExpZ2h0LnBy
b3RvdHlwZS5fcmVzeW5jTWVzaGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBf
aSA9IDAsIF9hID0gdGhpcy5nZXRTY2VuZSgpLm1lc2hlczsgX2kgPCBfYS5sZW5ndGg7IF9pKysp
IHsKKyAgICAgICAgICAgIHZhciBtZXNoID0gX2FbX2ldOworICAgICAgICAgICAgbWVzaC5fcmVz
eW5jTGlnaFNvdXJjZSh0aGlzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
Rm9yY2VzIHRoZSBtZXNoZXMgdG8gdXBkYXRlIHRoZWlyIGxpZ2h0IHJlbGF0ZWQgaW5mb3JtYXRp
b24gaW4gdGhlaXIgcmVuZGVyaW5nIHVzZWQgZWZmZWN0cworICAgICAqIEBoaWRkZW4gSW50ZXJu
YWwgVXNlIE9ubHkKKyAgICAgKi8KKyAgICBMaWdodC5wcm90b3R5cGUuX21hcmtNZXNoZXNBc0xp
Z2h0RGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0
aGlzLmdldFNjZW5lKCkubWVzaGVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAg
ICAgdmFyIG1lc2ggPSBfYVtfaV07CisgICAgICAgICAgICBpZiAobWVzaC5saWdodFNvdXJjZXMu
aW5kZXhPZih0aGlzKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBtZXNoLl9tYXJrU3ViTWVz
aGVzQXNMaWdodERpcnR5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIFJlY29tcHV0ZXMgdGhlIGNhY2hlZCBwaG90b21ldHJpYyBzY2FsZSBpZiBu
ZWVkZWQuCisgICAgICovCisgICAgTGlnaHQucHJvdG90eXBlLl9jb21wdXRlUGhvdG9tZXRyaWNT
Y2FsZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fcGhvdG9tZXRyaWNTY2FsZSA9IHRo
aXMuX2dldFBob3RvbWV0cmljU2NhbGUoKTsKKyAgICAgICAgdGhpcy5nZXRTY2VuZSgpLnJlc2V0
Q2FjaGVkTWF0ZXJpYWwoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIFBo
b3RvbWV0cmljIFNjYWxlIGFjY29yZGluZyB0byB0aGUgbGlnaHQgdHlwZSBhbmQgaW50ZW5zaXR5
IG1vZGUuCisgICAgICovCisgICAgTGlnaHQucHJvdG90eXBlLl9nZXRQaG90b21ldHJpY1NjYWxl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcGhvdG9tZXRyaWNTY2FsZSA9IDAuMDsKKyAg
ICAgICAgdmFyIGxpZ2h0VHlwZUlEID0gdGhpcy5nZXRUeXBlSUQoKTsKKyAgICAgICAgLy9nZXQg
cGhvdG9tZXRyaWMgbW9kZQorICAgICAgICB2YXIgcGhvdG9tZXRyaWNNb2RlID0gdGhpcy5pbnRl
bnNpdHlNb2RlOworICAgICAgICBpZiAocGhvdG9tZXRyaWNNb2RlID09PSBMaWdodC5JTlRFTlNJ
VFlNT0RFX0FVVE9NQVRJQykgeworICAgICAgICAgICAgaWYgKGxpZ2h0VHlwZUlEID09PSBMaWdo
dC5MSUdIVFRZUEVJRF9ESVJFQ1RJT05BTExJR0hUKSB7CisgICAgICAgICAgICAgICAgcGhvdG9t
ZXRyaWNNb2RlID0gTGlnaHQuSU5URU5TSVRZTU9ERV9JTExVTUlOQU5DRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBob3RvbWV0cmljTW9kZSA9
IExpZ2h0LklOVEVOU0lUWU1PREVfTFVNSU5PVVNJTlRFTlNJVFk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgLy9jb21wdXRlIHBob3RvbWV0cmljIHNjYWxlCisgICAgICAgIHN3
aXRjaCAobGlnaHRUeXBlSUQpIHsKKyAgICAgICAgICAgIGNhc2UgTGlnaHQuTElHSFRUWVBFSURf
UE9JTlRMSUdIVDoKKyAgICAgICAgICAgIGNhc2UgTGlnaHQuTElHSFRUWVBFSURfU1BPVExJR0hU
OgorICAgICAgICAgICAgICAgIHN3aXRjaCAocGhvdG9tZXRyaWNNb2RlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgTGlnaHQuSU5URU5TSVRZTU9ERV9MVU1JTk9VU1BPV0VSOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcGhvdG9tZXRyaWNTY2FsZSA9IDEuMCAvICg0LjAgKiBNYXRoLlBJ
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIExpZ2h0LklOVEVOU0lUWU1PREVfTFVNSU5PVVNJTlRFTlNJVFk6CisgICAgICAgICAgICAg
ICAgICAgICAgICBwaG90b21ldHJpY1NjYWxlID0gMS4wOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTGlnaHQuSU5URU5TSVRZTU9ERV9M
VU1JTkFOQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICBwaG90b21ldHJpY1NjYWxlID0gdGhp
cy5yYWRpdXMgKiB0aGlzLnJhZGl1czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgTGlnaHQuTElHSFRUWVBFSURfRElSRUNUSU9OQUxMSUdIVDoKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKHBob3RvbWV0cmljTW9kZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIExpZ2h0
LklOVEVOU0lUWU1PREVfSUxMVU1JTkFOQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICBwaG90
b21ldHJpY1NjYWxlID0gMS4wOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgTGlnaHQuSU5URU5TSVRZTU9ERV9MVU1JTkFOQ0U6CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHJhZGl1cyAoYW5kIHRoZXJlZm9yZSBzb2xpZCBh
bmdsZSkgaXMgbm9uLXplcm8gYSBkaXJlY3Rpb25hbCBsaWdodHMgYnJpZ2h0bmVzcyBjYW4gYmUg
c3BlY2lmaWVkIHZpYSBjZW50cmFsIChwZWFrKSBsdW1pbmFuY2UuCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGb3IgYSBkaXJlY3Rpb25hbCBsaWdodCB0aGUgJ3JhZGl1cycgZGVmaW5lcyB0
aGUgYW5ndWxhciByYWRpdXMgKGluIHJhZGlhbnMpIHJhdGhlciB0aGFuIHdvcmxkLXNwYWNlIHJh
ZGl1cyAoZS5nLiBpbiBtZXRyZXMpLgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFwZXhB
bmdsZVJhZGlhbnMgPSB0aGlzLnJhZGl1czsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElt
cG9zZSBhIG1pbmltdW0gbGlnaHQgYW5ndWxhciBzaXplIHRvIGF2b2lkIHRoZSBsaWdodCBiZWNv
bWluZyBhbiBpbmZpbml0ZWx5IHNtYWxsIGFuZ3VsYXIgbGlnaHQgc291cmNlIChpLmUuIGEgZGly
YWMgZGVsdGEgZnVuY3Rpb24pLgorICAgICAgICAgICAgICAgICAgICAgICAgYXBleEFuZ2xlUmFk
aWFucyA9IE1hdGgubWF4KGFwZXhBbmdsZVJhZGlhbnMsIDAuMDAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBzb2xpZEFuZ2xlID0gMi4wICogTWF0aC5QSSAqICgxLjAgLSBNYXRoLmNv
cyhhcGV4QW5nbGVSYWRpYW5zKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwaG90b21ldHJp
Y1NjYWxlID0gc29saWRBbmdsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
TGlnaHQuTElHSFRUWVBFSURfSEVNSVNQSEVSSUNMSUdIVDoKKyAgICAgICAgICAgICAgICAvLyBO
byBmYWxsIG9mZiBpbiBoZW1pc3BlcmljIGxpZ2h0LgorICAgICAgICAgICAgICAgIHBob3RvbWV0
cmljU2NhbGUgPSAxLjA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHBob3RvbWV0cmljU2NhbGU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW9y
ZGVyIHRoZSBsaWdodCBpbiB0aGUgc2NlbmUgYWNjb3JkaW5nIHRvIHRoZWlyIGRlZmluZWQgcHJp
b3JpdHkuCisgICAgICogQGhpZGRlbiBJbnRlcm5hbCBVc2UgT25seQorICAgICAqLworICAgIExp
Z2h0LnByb3RvdHlwZS5fcmVvcmRlckxpZ2h0c0luU2NlbmUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRl
clByaW9yaXR5ICE9IDApIHsKKyAgICAgICAgICAgIHNjZW5lLnJlcXVpcmVMaWdodFNvcnRpbmcg
PSB0cnVlOworICAgICAgICB9CisgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5zb3J0TGlnaHRzQnlQ
cmlvcml0eSgpOworICAgIH07CisgICAgLyoqCisgICAgICogRmFsbG9mZiBEZWZhdWx0OiBsaWdo
dCBpcyBmYWxsaW5nIG9mZiBmb2xsb3dpbmcgdGhlIG1hdGVyaWFsIHNwZWNpZmljYXRpb246Cisg
ICAgICogc3RhbmRhcmQgbWF0ZXJpYWwgaXMgdXNpbmcgc3RhbmRhcmQgZmFsbG9mZiB3aGVyZWFz
IHBiciBtYXRlcmlhbCBjYW4gcmVxdWVzdCBzcGVjaWFsIGZhbGxvZmYgcGVyIG1hdGVyaWFscy4K
KyAgICAgKi8KKyAgICBMaWdodC5GQUxMT0ZGX0RFRkFVTFQgPSAwOworICAgIC8qKgorICAgICAq
IEZhbGxvZmYgUGh5c2ljYWw6IGxpZ2h0IGlzIGZhbGxpbmcgb2ZmIGZvbGxvd2luZyB0aGUgaW52
ZXJzZSBzcXVhcmVkIGRpc3RhbmNlIGxhdy4KKyAgICAgKi8KKyAgICBMaWdodC5GQUxMT0ZGX1BI
WVNJQ0FMID0gMTsKKyAgICAvKioKKyAgICAgKiBGYWxsb2ZmIGdsdGY6IGxpZ2h0IGlzIGZhbGxp
bmcgb2ZmIGFzIGRlc2NyaWJlZCBpbiB0aGUgZ2x0ZiBtb3ZpbmcgdG8gUEJSIGRvY3VtZW50Cisg
ICAgICogdG8gZW5oYW5jZSBpbnRlcm9wZXJhYmlsaXR5IHdpdGggb3RoZXIgZW5naW5lcy4KKyAg
ICAgKi8KKyAgICBMaWdodC5GQUxMT0ZGX0dMVEYgPSAyOworICAgIC8qKgorICAgICAqIEZhbGxv
ZmYgU3RhbmRhcmQ6IGxpZ2h0IGlzIGZhbGxpbmcgb2ZmIGxpa2UgaW4gdGhlIHN0YW5kYXJkIG1h
dGVyaWFsCisgICAgICogdG8gZW5oYW5jZSBpbnRlcm9wZXJhYmlsaXR5IHdpdGggb3RoZXIgbWF0
ZXJpYWxzLgorICAgICAqLworICAgIExpZ2h0LkZBTExPRkZfU1RBTkRBUkQgPSAzOworICAgIC8v
bGlnaHRtYXBNb2RlIENvbnN0cworICAgIC8qKgorICAgICAqIElmIGV2ZXJ5IGxpZ2h0IGFmZmVj
dGluZyB0aGUgbWF0ZXJpYWwgaXMgaW4gdGhpcyBsaWdodG1hcE1vZGUsCisgICAgICogbWF0ZXJp
YWwubGlnaHRtYXBUZXh0dXJlIGFkZHMgb3IgbXVsdGlwbGllcworICAgICAqIChkZXBlbmRzIG9u
IG1hdGVyaWFsLnVzZUxpZ2h0bWFwQXNTaGFkb3dtYXApCisgICAgICogYWZ0ZXIgZXZlcnkgb3Ro
ZXIgbGlnaHQgY2FsY3VsYXRpb25zLgorICAgICAqLworICAgIExpZ2h0LkxJR0hUTUFQX0RFRkFV
TFQgPSAwOworICAgIC8qKgorICAgICAqIG1hdGVyaWFsLmxpZ2h0bWFwVGV4dHVyZSBhcyBvbmx5
IGRpZmZ1c2UgbGlnaHRpbmcgZnJvbSB0aGlzIGxpZ2h0CisgICAgICogYWRkcyBvbmx5IHNwZWN1
bGFyIGxpZ2h0aW5nIGZyb20gdGhpcyBsaWdodAorICAgICAqIGFkZHMgZHluYW1pYyBzaGFkb3dz
CisgICAgICovCisgICAgTGlnaHQuTElHSFRNQVBfU1BFQ1VMQVIgPSAxOworICAgIC8qKgorICAg
ICAqIG1hdGVyaWFsLmxpZ2h0bWFwVGV4dHVyZSBhcyBvbmx5IGxpZ2h0aW5nCisgICAgICogbm8g
bGlnaHQgY2FsY3VsYXRpb24gZnJvbSB0aGlzIGxpZ2h0CisgICAgICogb25seSBhZGRzIGR5bmFt
aWMgc2hhZG93cyBmcm9tIHRoaXMgbGlnaHQKKyAgICAgKi8KKyAgICBMaWdodC5MSUdIVE1BUF9T
SEFET1dTT05MWSA9IDI7CisgICAgLy8gSW50ZW5zaXR5IE1vZGUgQ29uc3RzCisgICAgLyoqCisg
ICAgICogRWFjaCBsaWdodCB0eXBlIHVzZXMgdGhlIGRlZmF1bHQgcXVhbnRpdHkgYWNjb3JkaW5n
IHRvIGl0cyB0eXBlOgorICAgICAqICAgICAgcG9pbnQvc3BvdCBsaWdodHMgdXNlIGx1bWlub3Vz
IGludGVuc2l0eQorICAgICAqICAgICAgZGlyZWN0aW9uYWwgbGlnaHRzIHVzZSBpbGx1bWluYW5j
ZQorICAgICAqLworICAgIExpZ2h0LklOVEVOU0lUWU1PREVfQVVUT01BVElDID0gMDsKKyAgICAv
KioKKyAgICAgKiBsdW1lbiAobG0pCisgICAgICovCisgICAgTGlnaHQuSU5URU5TSVRZTU9ERV9M
VU1JTk9VU1BPV0VSID0gMTsKKyAgICAvKioKKyAgICAgKiBjYW5kZWxhIChsbS9zcikKKyAgICAg
Ki8KKyAgICBMaWdodC5JTlRFTlNJVFlNT0RFX0xVTUlOT1VTSU5URU5TSVRZID0gMjsKKyAgICAv
KioKKyAgICAgKiBsdXggKGxtL21eMikKKyAgICAgKi8KKyAgICBMaWdodC5JTlRFTlNJVFlNT0RF
X0lMTFVNSU5BTkNFID0gMzsKKyAgICAvKioKKyAgICAgKiBuaXQgKGNkL21eMikKKyAgICAgKi8K
KyAgICBMaWdodC5JTlRFTlNJVFlNT0RFX0xVTUlOQU5DRSA9IDQ7CisgICAgLy8gTGlnaHQgdHlw
ZXMgaWRzIGNvbnN0LgorICAgIC8qKgorICAgICAqIExpZ2h0IHR5cGUgY29uc3QgaWQgb2YgdGhl
IHBvaW50IGxpZ2h0LgorICAgICAqLworICAgIExpZ2h0LkxJR0hUVFlQRUlEX1BPSU5UTElHSFQg
PSAwOworICAgIC8qKgorICAgICAqIExpZ2h0IHR5cGUgY29uc3QgaWQgb2YgdGhlIGRpcmVjdGlv
bmFsIGxpZ2h0LgorICAgICAqLworICAgIExpZ2h0LkxJR0hUVFlQRUlEX0RJUkVDVElPTkFMTElH
SFQgPSAxOworICAgIC8qKgorICAgICAqIExpZ2h0IHR5cGUgY29uc3QgaWQgb2YgdGhlIHNwb3Qg
bGlnaHQuCisgICAgICovCisgICAgTGlnaHQuTElHSFRUWVBFSURfU1BPVExJR0hUID0gMjsKKyAg
ICAvKioKKyAgICAgKiBMaWdodCB0eXBlIGNvbnN0IGlkIG9mIHRoZSBoZW1pc3BoZXJpYyBsaWdo
dC4KKyAgICAgKi8KKyAgICBMaWdodC5MSUdIVFRZUEVJRF9IRU1JU1BIRVJJQ0xJR0hUID0gMzsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemVBc0NvbG9yMyJdKSgpCisgICAgXSwgTGlnaHQucHJvdG90eXBlLCAiZGlm
ZnVzZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNDb2xvcjMiXSkoKQorICAgIF0sIExpZ2h0
LnByb3RvdHlwZSwgInNwZWN1bGFyIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIExpZ2h0LnByb3RvdHlwZSwgImZhbGxvZmZUeXBlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoKQorICAgIF0sIExpZ2h0LnByb3RvdHlwZSwgImludGVuc2l0eSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBMaWdodC5wcm90b3R5cGUsICJyYW5nZSIsIG51bGwp
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTGlnaHQucHJvdG90eXBlLCAiaW50ZW5zaXR5
TW9kZSIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTGlnaHQucHJvdG90eXBl
LCAicmFkaXVzIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBMaWdodC5wcm90
b3R5cGUsICJfcmVuZGVyUHJpb3JpdHkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHki
XSkoIl9yZW9yZGVyTGlnaHRzSW5TY2VuZSIpCisgICAgXSwgTGlnaHQucHJvdG90eXBlLCAicmVu
ZGVyUHJpb3JpdHkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgic2hhZG93RW5hYmxlZCIp
CisgICAgXSwgTGlnaHQucHJvdG90eXBlLCAiX3NoYWRvd0VuYWJsZWQiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgiZXhjbHVkZVdpdGhMYXllck1hc2siKQorICAgIF0sIExpZ2h0LnByb3Rv
dHlwZSwgIl9leGNsdWRlV2l0aExheWVyTWFzayIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCJpbmNsdWRlT25seVdpdGhMYXllck1hc2siKQorICAgIF0sIExpZ2h0LnByb3RvdHlwZSwgIl9p
bmNsdWRlT25seVdpdGhMYXllck1hc2siLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgibGln
aHRtYXBNb2RlIikKKyAgICBdLCBMaWdodC5wcm90b3R5cGUsICJfbGlnaHRtYXBNb2RlIiwgdm9p
ZCAwKTsKKyAgICByZXR1cm4gTGlnaHQ7Cit9KF9ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIk5vZGUiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL0xpZ2h0cy9wb2lu
dExpZ2h0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTGlnaHRzL3BvaW50TGlnaHQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBvaW50TGlnaHQgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
UG9pbnRMaWdodDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIu
Li9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3Jh
dG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZSAqLyAiLi9ub2RlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpZ2h0ICovICIuL0xpZ2h0cy9saWdodC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zaGFkb3dMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zaGFkb3dMaWdodCAqLyAiLi9MaWdo
dHMvc2hhZG93TGlnaHQudHMiKTsKKworCisKKworCisKK19ub2RlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIk5vZGUiXS5BZGROb2RlQ29uc3RydWN0b3IoIkxpZ2h0X1R5cGVfMCIsIGZ1
bmN0aW9uIChuYW1lLCBzY2VuZSkgeworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBu
ZXcgUG9pbnRMaWdodChuYW1lLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8oKSwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIEEg
cG9pbnQgbGlnaHQgaXMgYSBsaWdodCBkZWZpbmVkIGJ5IGFuIHVuaXF1ZSBwb2ludCBpbiB3b3Js
ZCBzcGFjZS4KKyAqIFRoZSBsaWdodCBpcyBlbWl0dGVkIGluIGV2ZXJ5IGRpcmVjdGlvbiBmcm9t
IHRoaXMgcG9pbnQuCisgKiBBIGdvb2QgZXhhbXBsZSBvZiBhIHBvaW50IGxpZ2h0IGlzIGEgc3Rh
bmRhcmQgbGlnaHQgYnVsYi4KKyAqIERvY3VtZW50YXRpb246IGh0dHBzOi8vZG9jLmJhYnlsb25q
cy5jb20vYmFieWxvbjEwMS9saWdodHMKKyAqLwordmFyIFBvaW50TGlnaHQgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19leHRlbmRzIl0oUG9pbnRMaWdodCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgUG9pbnRMaWdodCBvYmplY3QgZnJvbSB0aGUgcGFzc2VkIG5hbWUgYW5kIHBv
c2l0aW9uIChWZWN0b3IzKSBhbmQgYWRkcyBpdCBpbiB0aGUgc2NlbmUuCisgICAgICogQSBQb2lu
dExpZ2h0IGVtaXRzIHRoZSBsaWdodCBpbiBldmVyeSBkaXJlY3Rpb24uCisgICAgICogSXQgY2Fu
IGNhc3Qgc2hhZG93cy4KKyAgICAgKiBJZiB0aGUgc2NlbmUgY2FtZXJhIGlzIGFscmVhZHkgZGVm
aW5lZCBhbmQgeW91IHdhbnQgdG8gc2V0IHlvdXIgUG9pbnRMaWdodCBhdCB0aGUgY2FtZXJhIHBv
c2l0aW9uLCBqdXN0IHNldCBpdCA6CisgICAgICogYGBgamF2YXNjcmlwdAorICAgICAqIHZhciBw
b2ludExpZ2h0ID0gbmV3IFBvaW50TGlnaHQoInBsIiwgY2FtZXJhLnBvc2l0aW9uLCBzY2VuZSk7
CisgICAgICogYGBgCisgICAgICogRG9jdW1lbnRhdGlvbiA6IGh0dHBzOi8vZG9jLmJhYnlsb25q
cy5jb20vYmFieWxvbjEwMS9saWdodHMKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbGlnaHQgZnJp
ZW5kbHkgbmFtZQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgcG9zaXRpb24gb2YgdGhlIHBv
aW50IGxpZ2h0IGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhl
IGxpZ2h0cyBiZWxvbmdzIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gUG9pbnRMaWdodChuYW1l
LCBwb3NpdGlvbiwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgbmFtZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9zaGFkb3dBbmdsZSA9IE1h
dGguUEkgLyAyOworICAgICAgICBfdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb2ludExpZ2h0
LnByb3RvdHlwZSwgInNoYWRvd0FuZ2xlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
dGVyOiBJbiBjYXNlIG9mIGRpcmVjdGlvbiBwcm92aWRlZCwgdGhlIHNoYWRvdyB3aWxsIG5vdCB1
c2UgYSBjdWJlIHRleHR1cmUgYnV0IHNpbXVsYXRlIGEgc3BvdCBzaGFkb3cgYXMgYSBmYWxsYmFj
aworICAgICAgICAgKiBUaGlzIHNwZWNpZmllcyB3aGF0IGFuZ2xlIHRoZSBzaGFkb3cgd2lsbCB1
c2UgdG8gYmUgY3JlYXRlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogSXQgZGVmYXVsdCB0byA5
MCBkZWdyZWVzIHRvIHdvcmsgbmljZWx5IHdpdGggdGhlIGN1YmUgdGV4dHVyZSBnZW5lcmF0aW9u
IGZvciBwb2ludCBsaWdodHMgc2hhZG93IG1hcHMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFkb3dBbmdsZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHRlcjogSW4gY2FzZSBvZiBkaXJl
Y3Rpb24gcHJvdmlkZWQsIHRoZSBzaGFkb3cgd2lsbCBub3QgdXNlIGEgY3ViZSB0ZXh0dXJlIGJ1
dCBzaW11bGF0ZSBhIHNwb3Qgc2hhZG93IGFzIGEgZmFsbGJhY2sKKyAgICAgICAgICogVGhpcyBz
cGVjaWZpZXMgd2hhdCBhbmdsZSB0aGUgc2hhZG93IHdpbGwgdXNlIHRvIGJlIGNyZWF0ZWQuCisg
ICAgICAgICAqCisgICAgICAgICAqIEl0IGRlZmF1bHQgdG8gOTAgZGVncmVlcyB0byB3b3JrIG5p
Y2VseSB3aXRoIHRoZSBjdWJlIHRleHR1cmUgZ2VuZXJhdGlvbiBmb3IgcG9pbnQgbGlnaHRzIHNo
YWRvdyBtYXBzLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHRoaXMuX3NoYWRvd0FuZ2xlID0gdmFsdWU7CisgICAgICAgICAgICB0aGlz
LmZvcmNlUHJvamVjdGlvbk1hdHJpeENvbXB1dGUoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFBvaW50TGlnaHQucHJvdG90eXBlLCAiZGlyZWN0aW9uIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZGlyZWN0aW9uIGlmIGl0IGhhcyBi
ZWVuIHNldC4KKyAgICAgICAgICogSW4gY2FzZSBvZiBkaXJlY3Rpb24gcHJvdmlkZWQsIHRoZSBz
aGFkb3cgd2lsbCBub3QgdXNlIGEgY3ViZSB0ZXh0dXJlIGJ1dCBzaW11bGF0ZSBhIHNwb3Qgc2hh
ZG93IGFzIGEgZmFsbGJhY2sKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RpcmVjdGlvbjsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEluIGNhc2Ugb2YgZGlyZWN0aW9uIHByb3ZpZGVkLCB0aGUgc2hh
ZG93IHdpbGwgbm90IHVzZSBhIGN1YmUgdGV4dHVyZSBidXQgc2ltdWxhdGUgYSBzcG90IHNoYWRv
dyBhcyBhIGZhbGxiYWNrCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdmFyIHByZXZpb3VzTmVlZEN1YmUgPSB0aGlzLm5lZWRDdWJlKCk7
CisgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh0
aGlzLm5lZWRDdWJlKCkgIT09IHByZXZpb3VzTmVlZEN1YmUgJiYgdGhpcy5fc2hhZG93R2VuZXJh
dG9yKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2hhZG93R2VuZXJhdG9yLnJlY3JlYXRlU2hh
ZG93TWFwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAg
ICAqIFJldHVybnMgdGhlIHN0cmluZyAiUG9pbnRMaWdodCIKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y2xhc3MgbmFtZQorICAgICAqLworICAgIFBvaW50TGlnaHQucHJvdG90eXBlLmdldENsYXNzTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJQb2ludExpZ2h0IjsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGludGVnZXIgMC4KKyAgICAgKiBAcmV0dXJucyBU
aGUgbGlnaHQgVHlwZSBpZCBhcyBhIGNvbnN0YW50IGRlZmluZXMgaW4gTGlnaHQuTElHSFRUWVBF
SURfeAorICAgICAqLworICAgIFBvaW50TGlnaHQucHJvdG90eXBlLmdldFR5cGVJRCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIF9saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJMaWdodCJdLkxJR0hUVFlQRUlEX1BPSU5UTElHSFQ7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTcGVjaWZpZXMgd2V0aGVyIG9yIG5vdCB0aGUgc2hhZG93bWFwIHNob3VsZCBiZSBhIGN1
YmUgdGV4dHVyZS4KKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkb3dtYXAgbmVlZHMg
dG8gYmUgYSBjdWJlIHRleHR1cmUuCisgICAgICovCisgICAgUG9pbnRMaWdodC5wcm90b3R5cGUu
bmVlZEN1YmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAhdGhpcy5kaXJlY3Rpb247
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgYWxpZ25lZCB3
aXRoIHRoZSBQb2ludExpZ2h0IGN1YmUgc3lzdGVtIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIGN1
YmUgZmFjZSBpbmRleCAoaW50ZWdlcikuCisgICAgICogQHBhcmFtIGZhY2VJbmRleCBUaGUgaW5k
ZXggb2YgdGhlIGZhY2Ugd2UgYXJlIGNvbXB1dGVkIHRoZSBkaXJlY3Rpb24gdG8gZ2VuZXJhdGUg
c2hhZG93CisgICAgICogQHJldHVybnMgVGhlIHNldCBkaXJlY3Rpb24gaW4gMmQgbW9kZSBvdGhl
cndpc2UgdGhlIGRpcmVjdGlvbiB0byB0aGUgY3ViZW1hcCBmYWNlIGlmIG5lZWRDdWJlKCkgaXMg
dHJ1ZQorICAgICAqLworICAgIFBvaW50TGlnaHQucHJvdG90eXBlLmdldFNoYWRvd0RpcmVjdGlv
biA9IGZ1bmN0aW9uIChmYWNlSW5kZXgpIHsKKyAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uKSB7
CisgICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5nZXRTaGFkb3dEaXJlY3Rpb24u
Y2FsbCh0aGlzLCBmYWNlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgc3dpdGNoIChmYWNlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgxLjAsIDAuMCwgMC4wKTsKKyAgICAgICAgICAg
ICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgtMS4wLCAwLjAs
IDAuMCk7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJW
ZWN0b3IzIl0oMC4wLCAtMS4wLCAwLjApOworICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKDAuMCwgMS4wLCAwLjApOworICAgICAgICAgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKDAuMCwgMC4wLCAx
LjApOworICAgICAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVj
dG9yMyJdKDAuMCwgMC4wLCAtMS4wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBwYXNz
ZWQgbWF0cml4ICJtYXRyaXgiIGFzIGEgbGVmdC1oYW5kZWQgcGVyc3BlY3RpdmUgcHJvamVjdGlv
biBtYXRyaXggd2l0aCB0aGUgZm9sbG93aW5nIHNldHRpbmdzIDoKKyAgICAgKiAtIGZvdiA9IFBJ
IC8gMgorICAgICAqIC0gYXNwZWN0IHJhdGlvIDogMS4wCisgICAgICogLSB6LW5lYXIgYW5kIGZh
ciBlcXVhbCB0byB0aGUgYWN0aXZlIGNhbWVyYSBtaW5aIGFuZCBtYXhaLgorICAgICAqIFJldHVy
bnMgdGhlIFBvaW50TGlnaHQuCisgICAgICovCisgICAgUG9pbnRMaWdodC5wcm90b3R5cGUuX3Nl
dERlZmF1bHRTaGFkb3dQcm9qZWN0aW9uTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgdmlld01h
dHJpeCwgcmVuZGVyTGlzdCkgeworICAgICAgICB2YXIgYWN0aXZlQ2FtZXJhID0gdGhpcy5nZXRT
Y2VuZSgpLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAgaWYgKCFhY3RpdmVDYW1lcmEpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWF0cml4Il0uUGVyc3BlY3RpdmVGb3ZMSFRvUmVm
KHRoaXMuc2hhZG93QW5nbGUsIDEuMCwgdGhpcy5nZXREZXB0aE1pblooYWN0aXZlQ2FtZXJhKSwg
dGhpcy5nZXREZXB0aE1heFooYWN0aXZlQ2FtZXJhKSwgbWF0cml4KTsKKyAgICB9OworICAgIFBv
aW50TGlnaHQucHJvdG90eXBlLl9idWlsZFVuaWZvcm1MYXlvdXQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidkxpZ2h0RGF0YSIsIDQpOwor
ICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZMaWdodERpZmZ1c2UiLCA0
KTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2TGlnaHRTcGVjdWxh
ciIsIDMpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZMaWdodEZh
bGxvZmYiLCA0KTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJzaGFk
b3dzSW5mbyIsIDMpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oImRl
cHRoVmFsdWVzIiwgMik7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuY3JlYXRlKCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBwYXNzZWQgRWZmZWN0ICJlZmZlY3QiIHdp
dGggdGhlIFBvaW50TGlnaHQgdHJhbnNmb3JtZWQgcG9zaXRpb24gKG9yIHBvc2l0aW9uLCBpZiBu
b25lKSBhbmQgcGFzc2VkIG5hbWUgKHN0cmluZykuCisgICAgICogQHBhcmFtIGVmZmVjdCBUaGUg
ZWZmZWN0IHRvIHVwZGF0ZQorICAgICAqIEBwYXJhbSBsaWdodEluZGV4IFRoZSBpbmRleCBvZiB0
aGUgbGlnaHQgaW4gdGhlIGVmZmVjdCB0byB1cGRhdGUKKyAgICAgKiBAcmV0dXJucyBUaGUgcG9p
bnQgbGlnaHQKKyAgICAgKi8KKyAgICBQb2ludExpZ2h0LnByb3RvdHlwZS50cmFuc2ZlclRvRWZm
ZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCwgbGlnaHRJbmRleCkgeworICAgICAgICBpZiAodGhpcy5j
b21wdXRlVHJhbnNmb3JtZWRJbmZvcm1hdGlvbigpKSB7CisgICAgICAgICAgICB0aGlzLl91bmlm
b3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgidkxpZ2h0RGF0YSIsIHRoaXMudHJhbnNmb3JtZWRQb3Np
dGlvbi54LCB0aGlzLnRyYW5zZm9ybWVkUG9zaXRpb24ueSwgdGhpcy50cmFuc2Zvcm1lZFBvc2l0
aW9uLnosIDAuMCwgbGlnaHRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgidkxpZ2h0RGF0YSIsIHRo
aXMucG9zaXRpb24ueCwgdGhpcy5wb3NpdGlvbi55LCB0aGlzLnBvc2l0aW9uLnosIDAsIGxpZ2h0
SW5kZXgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxv
YXQ0KCJ2TGlnaHRGYWxsb2ZmIiwgdGhpcy5yYW5nZSwgdGhpcy5faW52ZXJzZVNxdWFyZWRSYW5n
ZSwgMCwgMCwgbGlnaHRJbmRleCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
UG9pbnRMaWdodC5wcm90b3R5cGUudHJhbnNmZXJUb05vZGVNYXRlcmlhbEVmZmVjdCA9IGZ1bmN0
aW9uIChlZmZlY3QsIGxpZ2h0RGF0YVVuaWZvcm1OYW1lKSB7CisgICAgICAgIGlmICh0aGlzLmNv
bXB1dGVUcmFuc2Zvcm1lZEluZm9ybWF0aW9uKCkpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRG
bG9hdDMobGlnaHREYXRhVW5pZm9ybU5hbWUsIHRoaXMudHJhbnNmb3JtZWRQb3NpdGlvbi54LCB0
aGlzLnRyYW5zZm9ybWVkUG9zaXRpb24ueSwgdGhpcy50cmFuc2Zvcm1lZFBvc2l0aW9uLnopOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0Myhs
aWdodERhdGFVbmlmb3JtTmFtZSwgdGhpcy5wb3NpdGlvbi54LCB0aGlzLnBvc2l0aW9uLnksIHRo
aXMucG9zaXRpb24ueik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyB0aGUgbGlzdCBvZiBkZWZpbmVzIHNwZWNpZmljIHRv
IHRoZSBsaWdodCB0eXBlLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0IG9mIGRlZmlu
ZXMKKyAgICAgKiBAcGFyYW0gbGlnaHRJbmRleCBkZWZpbmVzIHRoZSBpbmRleCBvZiB0aGUgbGln
aHQgZm9yIHRoZSBlZmZlY3QKKyAgICAgKi8KKyAgICBQb2ludExpZ2h0LnByb3RvdHlwZS5wcmVw
YXJlTGlnaHRTcGVjaWZpY0RlZmluZXMgPSBmdW5jdGlvbiAoZGVmaW5lcywgbGlnaHRJbmRleCkg
eworICAgICAgICBkZWZpbmVzWyJQT0lOVExJR0hUIiArIGxpZ2h0SW5kZXhdID0gdHJ1ZTsKKyAg
ICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgUG9pbnRMaWdodC5wcm90b3R5cGUsICJz
aGFkb3dBbmdsZSIsIG51bGwpOworICAgIHJldHVybiBQb2ludExpZ2h0OworfShfc2hhZG93TGln
aHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2hhZG93TGlnaHQiXSkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0xpZ2h0cy9zaGFkb3dMaWdodC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9MaWdodHMvc2hhZG93TGlnaHQu
dHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBTaGFkb3dMaWdodCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTaGFkb3dMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2hhZG93TGlnaHQ7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3Rz
bGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL2xpZ2h0ICovICIuL0xpZ2h0cy9saWdodC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguYXhpcyAqLyAiLi9NYXRocy9tYXRo
LmF4aXMudHMiKTsKKworCisKKworCisvKioKKyAqIEJhc2UgaW1wbGVtZW50YXRpb24gSVNoYWRv
d0xpZ2h0CisgKiBJdCBncm91cHMgYWxsIHRoZSBjb21tb24gYmVoYXZpb3VyIGluIG9yZGVyIHRv
IHJlZHVjZSBkdXBwbGljYXRpb24gYW5kIGJldHRlciBmb2xsb3cgdGhlIERSWSBwYXR0ZXJuLgor
ICovCit2YXIgU2hhZG93TGlnaHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU2hh
ZG93TGlnaHQsIF9zdXBlcik7CisgICAgZnVuY3Rpb24gU2hhZG93TGlnaHQoKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1l
bnRzKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fbmVlZFByb2plY3Rpb25NYXRyaXhDb21wdXRl
ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBTaGFkb3dMaWdodC5w
cm90b3R5cGUuX3NldFBvc2l0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHRoaXMu
X3Bvc2l0aW9uID0gdmFsdWU7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hh
ZG93TGlnaHQucHJvdG90eXBlLCAicG9zaXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBTZXRzIHRoZSBwb3NpdGlvbiB0aGUgc2hhZG93IHdpbGwgYmUgY2FzdGVkIGZyb20uIEFsc28g
dXNlIGFzIHRoZSBsaWdodCBwb3NpdGlvbiBmb3IgYm90aAorICAgICAgICAgKiBwb2ludCBhbmQg
c3BvdCBsaWdodHMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFNldHMgdGhlIHBvc2l0aW9uIHRoZSBzaGFkb3cgd2lsbCBiZSBjYXN0ZWQg
ZnJvbS4gQWxzbyB1c2UgYXMgdGhlIGxpZ2h0IHBvc2l0aW9uIGZvciBib3RoCisgICAgICAgICAq
IHBvaW50IGFuZCBzcG90IGxpZ2h0cy4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9zZXRQb3NpdGlvbih2YWx1ZSk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIFNoYWRvd0xpZ2h0LnByb3RvdHlwZS5fc2V0RGlyZWN0aW9uID0g
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IHZhbHVlOworICAg
IH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRvd0xpZ2h0LnByb3RvdHlwZSwgImRp
cmVjdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEluIDJkIG1vZGUgKG5lZWRDdWJl
IGJlaW5nIGZhbHNlKSwgZ2V0cyB0aGUgZGlyZWN0aW9uIHVzZWQgdG8gY2FzdCB0aGUgc2hhZG93
LgorICAgICAgICAgKiBBbHNvIHVzZSBhcyB0aGUgbGlnaHQgZGlyZWN0aW9uIG9uIHNwb3QgYW5k
IGRpcmVjdGlvbmFsIGxpZ2h0cy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RpcmVjdGlvbjsKKyAgICAgICAgfSwKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEluIDJkIG1vZGUgKG5lZWRDdWJlIGJlaW5nIGZhbHNlKSwg
c2V0cyB0aGUgZGlyZWN0aW9uIHVzZWQgdG8gY2FzdCB0aGUgc2hhZG93LgorICAgICAgICAgKiBB
bHNvIHVzZSBhcyB0aGUgbGlnaHQgZGlyZWN0aW9uIG9uIHNwb3QgYW5kIGRpcmVjdGlvbmFsIGxp
Z2h0cy4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICB0aGlzLl9zZXREaXJlY3Rpb24odmFsdWUpOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZG93TGlnaHQucHJvdG90eXBlLCAic2hhZG93TWlu
WiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHNoYWRvdyBwcm9qZWN0aW9u
IGNsaXBwaW5nIG1pbmltdW0geiB2YWx1ZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRvd01pblo7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBzaGFkb3cgcHJvamVjdGlvbiBj
bGlwcGluZyBtaW5pbXVtIHogdmFsdWUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fc2hhZG93TWluWiA9IHZhbHVlOworICAg
ICAgICAgICAgdGhpcy5mb3JjZVByb2plY3Rpb25NYXRyaXhDb21wdXRlKCk7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkb3dMaWdodC5wcm90b3R5cGUs
ICJzaGFkb3dNYXhaIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgc2hhZG93
IHByb2plY3Rpb24gY2xpcHBpbmcgbWF4aW11bSB6IHZhbHVlLgorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZG93TWF4
WjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHNoYWRvdyBw
cm9qZWN0aW9uIGNsaXBwaW5nIG1heGltdW0geiB2YWx1ZS4KKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dNYXhaID0g
dmFsdWU7CisgICAgICAgICAgICB0aGlzLmZvcmNlUHJvamVjdGlvbk1hdHJpeENvbXB1dGUoKTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQ29tcHV0ZXMgdGhlIHRyYW5zZm9y
bWVkIGluZm9ybWF0aW9uICh0cmFuc2Zvcm1lZFBvc2l0aW9uIGFuZCB0cmFuc2Zvcm1lZERpcmVj
dGlvbiBpbiBXb3JsZCBzcGFjZSkgb2YgdGhlIGN1cnJlbnQgbGlnaHQKKyAgICAgKiBAcmV0dXJu
cyB0cnVlIGlmIHRoZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBjb21wdXRlZCwgZmFsc2UgaWYgaXQg
ZG9lcyBub3QgbmVlZCB0byAobm8gcGFyZW50aW5nKQorICAgICAqLworICAgIFNoYWRvd0xpZ2h0
LnByb3RvdHlwZS5jb21wdXRlVHJhbnNmb3JtZWRJbmZvcm1hdGlvbiA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LmdldFdvcmxkTWF0cml4KSB7
CisgICAgICAgICAgICBpZiAoIXRoaXMudHJhbnNmb3JtZWRQb3NpdGlvbikgeworICAgICAgICAg
ICAgICAgIHRoaXMudHJhbnNmb3JtZWRQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHRoaXMucG9zaXRpb24s
IHRoaXMucGFyZW50LmdldFdvcmxkTWF0cml4KCksIHRoaXMudHJhbnNmb3JtZWRQb3NpdGlvbik7
CisgICAgICAgICAgICAvLyBJbiBjYXNlIHRoZSBkaXJlY3Rpb24gaXMgcHJlc2VudC4KKyAgICAg
ICAgICAgIGlmICh0aGlzLmRpcmVjdGlvbikgeworICAgICAgICAgICAgICAgIGlmICghdGhpcy50
cmFuc2Zvcm1lZERpcmVjdGlvbikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9y
bWVkRGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0
b3IzIl0uVHJhbnNmb3JtTm9ybWFsVG9SZWYodGhpcy5kaXJlY3Rpb24sIHRoaXMucGFyZW50Lmdl
dFdvcmxkTWF0cml4KCksIHRoaXMudHJhbnNmb3JtZWREaXJlY3Rpb24pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBkZXB0aCBzY2FsZSB1c2Vk
IGZvciB0aGUgc2hhZG93IG1hcC4KKyAgICAgKiBAcmV0dXJucyB0aGUgZGVwdGggc2NhbGUuCisg
ICAgICovCisgICAgU2hhZG93TGlnaHQucHJvdG90eXBlLmdldERlcHRoU2NhbGUgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiA1MC4wOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0
IHRoZSBkaXJlY3Rpb24gdG8gdXNlIHRvIHJlbmRlciB0aGUgc2hhZG93IG1hcC4gSW4gY2FzZSBv
ZiBjdWJlIHRleHR1cmUsIHRoZSBmYWNlIGluZGV4IGNhbiBiZSBwYXNzZWQuCisgICAgICogQHBh
cmFtIGZhY2VJbmRleCBUaGUgaW5kZXggb2YgdGhlIGZhY2Ugd2UgYXJlIGNvbXB1dGVkIHRoZSBk
aXJlY3Rpb24gdG8gZ2VuZXJhdGUgc2hhZG93CisgICAgICogQHJldHVybnMgVGhlIHNldCBkaXJl
Y3Rpb24gaW4gMmQgbW9kZSBvdGhlcndpc2UgdGhlIGRpcmVjdGlvbiB0byB0aGUgY3ViZW1hcCBm
YWNlIGlmIG5lZWRDdWJlKCkgaXMgdHJ1ZQorICAgICAqLworICAgIFNoYWRvd0xpZ2h0LnByb3Rv
dHlwZS5nZXRTaGFkb3dEaXJlY3Rpb24gPSBmdW5jdGlvbiAoZmFjZUluZGV4KSB7CisgICAgICAg
IHJldHVybiB0aGlzLnRyYW5zZm9ybWVkRGlyZWN0aW9uID8gdGhpcy50cmFuc2Zvcm1lZERpcmVj
dGlvbiA6IHRoaXMuZGlyZWN0aW9uOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0
aGUgU2hhZG93TGlnaHQgYWJzb2x1dGUgcG9zaXRpb24gaW4gdGhlIFdvcmxkLgorICAgICAqIEBy
ZXR1cm5zIHRoZSBwb3NpdGlvbiB2ZWN0b3IgaW4gd29ybGQgc3BhY2UKKyAgICAgKi8KKyAgICBT
aGFkb3dMaWdodC5wcm90b3R5cGUuZ2V0QWJzb2x1dGVQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtZWRQb3NpdGlvbiA/IHRoaXMudHJhbnNmb3Jt
ZWRQb3NpdGlvbiA6IHRoaXMucG9zaXRpb247CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRz
IHRoZSBTaGFkb3dMaWdodCBkaXJlY3Rpb24gdG93YXJkIHRoZSBwYXNzZWQgdGFyZ2V0LgorICAg
ICAqIEBwYXJhbSB0YXJnZXQgVGhlIHBvaW50IHRvIHRhcmdldCBpbiBsb2NhbCBzcGFjZQorICAg
ICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIFNoYWRvd0xpZ2h0IGRpcmVjdGlvbgorICAgICAqLwor
ICAgIFNoYWRvd0xpZ2h0LnByb3RvdHlwZS5zZXREaXJlY3Rpb25Ub1RhcmdldCA9IGZ1bmN0aW9u
ICh0YXJnZXQpIHsKKyAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLk5vcm1hbGl6ZSh0YXJnZXQu
c3VidHJhY3QodGhpcy5wb3NpdGlvbikpOworICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb247
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsaWdodCByb3RhdGlvbiBpbiBl
dWxlciBkZWZpbml0aW9uLgorICAgICAqIEByZXR1cm5zIHRoZSB4IHkgeiByb3RhdGlvbiBpbiBs
b2NhbCBzcGFjZS4KKyAgICAgKi8KKyAgICBTaGFkb3dMaWdodC5wcm90b3R5cGUuZ2V0Um90YXRp
b24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpOwor
ICAgICAgICB2YXIgeGF4aXMgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siVmVjdG9yMyJdLkNyb3NzKHRoaXMuZGlyZWN0aW9uLCBfTWF0aHNfbWF0aF9h
eGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkF4aXMiXS5ZKTsKKyAgICAgICAgdmFy
IHlheGlzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlY3RvcjMiXS5Dcm9zcyh4YXhpcywgdGhpcy5kaXJlY3Rpb24pOworICAgICAgICByZXR1cm4g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMi
XS5Sb3RhdGlvbkZyb21BeGlzKHhheGlzLCB5YXhpcywgdGhpcy5kaXJlY3Rpb24pOworICAgIH07
CisgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhZG93IGdlbmVy
YXRpb24gcmVxdWlyZSBhIGN1YmUgdGV4dHVyZSBvciBhIDJkIHRleHR1cmUuCisgICAgICogQHJl
dHVybnMgdHJ1ZSBpZiBhIGN1YmUgdGV4dHVyZSBuZWVkcyB0byBiZSB1c2UKKyAgICAgKi8KKyAg
ICBTaGFkb3dMaWdodC5wcm90b3R5cGUubmVlZEN1YmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGVjdHMgaWYgdGhlIHBy
b2plY3Rpb24gbWF0cml4IHJlcXVpcmVzIHRvIGJlIHJlY29tcHV0ZWQgdGhpcyBmcmFtZS4KKyAg
ICAgKiBAcmV0dXJucyB0cnVlIGlmIGl0IHJlcXVpcmVzIHRvIGJlIHJlY29tcHV0ZWQgb3RoZXJ3
aXNlLCBmYWxzZS4KKyAgICAgKi8KKyAgICBTaGFkb3dMaWdodC5wcm90b3R5cGUubmVlZFByb2pl
Y3Rpb25NYXRyaXhDb21wdXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5f
bmVlZFByb2plY3Rpb25NYXRyaXhDb21wdXRlOworICAgIH07CisgICAgLyoqCisgICAgICogRm9y
Y2VzIHRoZSBzaGFkb3cgZ2VuZXJhdG9yIHRvIHJlY29tcHV0ZSB0aGUgcHJvamVjdGlvbiBtYXRy
aXggZXZlbiBpZiBwb3NpdGlvbiBhbmQgZGlyZWN0aW9uIGRpZCBub3QgY2hhbmdlZC4KKyAgICAg
Ki8KKyAgICBTaGFkb3dMaWdodC5wcm90b3R5cGUuZm9yY2VQcm9qZWN0aW9uTWF0cml4Q29tcHV0
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fbmVlZFByb2plY3Rpb25NYXRyaXhDb21w
dXRlID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgU2hhZG93TGlnaHQu
cHJvdG90eXBlLl9pbml0Q2FjaGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90
b3R5cGUuX2luaXRDYWNoZS5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl9jYWNoZS5wb3NpdGlv
biA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0
b3IzIl0uWmVybygpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTaGFkb3dMaWdo
dC5wcm90b3R5cGUuX2lzU3luY2hyb25pemVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
IXRoaXMuX2NhY2hlLnBvc2l0aW9uLmVxdWFscyh0aGlzLnBvc2l0aW9uKSkgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07
CisgICAgLyoqCisgICAgICogQ29tcHV0ZXMgdGhlIHdvcmxkIG1hdHJpeCBvZiB0aGUgbm9kZQor
ICAgICAqIEBwYXJhbSBmb3JjZSBkZWZpbmVzIGlmIHRoZSBjYWNoZSB2ZXJzaW9uIHNob3VsZCBi
ZSBpbnZhbGlkYXRlZCBmb3JjaW5nIHRoZSB3b3JsZCBtYXRyaXggdG8gYmUgY3JlYXRlZCBmcm9t
IHNjcmF0Y2gKKyAgICAgKiBAcmV0dXJucyB0aGUgd29ybGQgbWF0cml4CisgICAgICovCisgICAg
U2hhZG93TGlnaHQucHJvdG90eXBlLmNvbXB1dGVXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uIChmb3Jj
ZSkgeworICAgICAgICBpZiAoIWZvcmNlICYmIHRoaXMuaXNTeW5jaHJvbml6ZWQoKSkgeworICAg
ICAgICAgICAgdGhpcy5fY3VycmVudFJlbmRlcklkID0gdGhpcy5nZXRTY2VuZSgpLmdldFJlbmRl
cklkKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRNYXRyaXg7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fdXBkYXRlQ2FjaGUoKTsKKyAgICAgICAgdGhpcy5fY2FjaGUucG9zaXRp
b24uY29weUZyb20odGhpcy5wb3NpdGlvbik7CisgICAgICAgIGlmICghdGhpcy5fd29ybGRNYXRy
aXgpIHsKKyAgICAgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAg
ICAgIH0KKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIk1hdHJpeCJdLlRyYW5zbGF0aW9uVG9SZWYodGhpcy5wb3NpdGlvbi54LCB0aGlzLnBv
c2l0aW9uLnksIHRoaXMucG9zaXRpb24ueiwgdGhpcy5fd29ybGRNYXRyaXgpOworICAgICAgICBp
ZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuZ2V0V29ybGRNYXRyaXgpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3dvcmxkTWF0cml4Lm11bHRpcGx5VG9SZWYodGhpcy5wYXJlbnQuZ2V0V29ybGRN
YXRyaXgoKSwgdGhpcy5fd29ybGRNYXRyaXgpOworICAgICAgICAgICAgdGhpcy5fbWFya1N5bmNl
ZFdpdGhQYXJlbnQoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDYWNoZSB0aGUgZGV0ZXJtaW5h
bnQKKyAgICAgICAgdGhpcy5fd29ybGRNYXRyaXhEZXRlcm1pbmFudElzRGlydHkgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRNYXRyaXg7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBHZXRzIHRoZSBtaW5aIHVzZWQgZm9yIHNoYWRvdyBhY2NvcmRpbmcgdG8gYm90aCB0aGUgc2Nl
bmUgYW5kIHRoZSBsaWdodC4KKyAgICAgKiBAcGFyYW0gYWN0aXZlQ2FtZXJhIFRoZSBjYW1lcmEg
d2UgYXJlIHJldHVybmluZyB0aGUgbWluIGZvcgorICAgICAqIEByZXR1cm5zIHRoZSBkZXB0aCBt
aW4gegorICAgICAqLworICAgIFNoYWRvd0xpZ2h0LnByb3RvdHlwZS5nZXREZXB0aE1pblogPSBm
dW5jdGlvbiAoYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNoYWRvd01pblog
IT09IHVuZGVmaW5lZCA/IHRoaXMuc2hhZG93TWluWiA6IGFjdGl2ZUNhbWVyYS5taW5aOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbWF4WiB1c2VkIGZvciBzaGFkb3cgYWNjb3Jk
aW5nIHRvIGJvdGggdGhlIHNjZW5lIGFuZCB0aGUgbGlnaHQuCisgICAgICogQHBhcmFtIGFjdGl2
ZUNhbWVyYSBUaGUgY2FtZXJhIHdlIGFyZSByZXR1cm5pbmcgdGhlIG1heCBmb3IKKyAgICAgKiBA
cmV0dXJucyB0aGUgZGVwdGggbWF4IHoKKyAgICAgKi8KKyAgICBTaGFkb3dMaWdodC5wcm90b3R5
cGUuZ2V0RGVwdGhNYXhaID0gZnVuY3Rpb24gKGFjdGl2ZUNhbWVyYSkgeworICAgICAgICByZXR1
cm4gdGhpcy5zaGFkb3dNYXhaICE9PSB1bmRlZmluZWQgPyB0aGlzLnNoYWRvd01heFogOiBhY3Rp
dmVDYW1lcmEubWF4WjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHNoYWRvdyBw
cm9qZWN0aW9uIG1hdHJpeCBpbiBwYXJhbWV0ZXIgdG8gdGhlIGdlbmVyYXRlZCBwcm9qZWN0aW9u
IG1hdHJpeC4KKyAgICAgKiBAcGFyYW0gbWF0cml4IFRoZSBtYXRlcml4IHRvIHVwZGF0ZWQgd2l0
aCB0aGUgcHJvamVjdGlvbiBpbmZvcm1hdGlvbgorICAgICAqIEBwYXJhbSB2aWV3TWF0cml4IFRo
ZSB0cmFuc2Zvcm0gbWF0cml4IG9mIHRoZSBsaWdodAorICAgICAqIEBwYXJhbSByZW5kZXJMaXN0
IFRoZSBsaXN0IG9mIG1lc2ggdG8gcmVuZGVyIGluIHRoZSBtYXAKKyAgICAgKiBAcmV0dXJucyBU
aGUgY3VycmVudCBsaWdodAorICAgICAqLworICAgIFNoYWRvd0xpZ2h0LnByb3RvdHlwZS5zZXRT
aGFkb3dQcm9qZWN0aW9uTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgdmlld01hdHJpeCwgcmVu
ZGVyTGlzdCkgeworICAgICAgICBpZiAodGhpcy5jdXN0b21Qcm9qZWN0aW9uTWF0cml4QnVpbGRl
cikgeworICAgICAgICAgICAgdGhpcy5jdXN0b21Qcm9qZWN0aW9uTWF0cml4QnVpbGRlcih2aWV3
TWF0cml4LCByZW5kZXJMaXN0LCBtYXRyaXgpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgdGhpcy5fc2V0RGVmYXVsdFNoYWRvd1Byb2plY3Rpb25NYXRyaXgobWF0cml4
LCB2aWV3TWF0cml4LCByZW5kZXJMaXN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVj
b3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVmVjdG9yMyJdKSgpCisgICAgXSwgU2hhZG93TGln
aHQucHJvdG90eXBlLCAicG9zaXRpb24iLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1ZlY3RvcjMi
XSkoKQorICAgIF0sIFNoYWRvd0xpZ2h0LnByb3RvdHlwZSwgImRpcmVjdGlvbiIsIG51bGwpOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU2hhZG93TGlnaHQucHJvdG90eXBlLCAic2hhZG93
TWluWiIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU2hhZG93TGlnaHQucHJv
dG90eXBlLCAic2hhZG93TWF4WiIsIG51bGwpOworICAgIHJldHVybiBTaGFkb3dMaWdodDsKK30o
X2xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxpZ2h0Il0pKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9MaWdodHMvc3BvdExpZ2h0LnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9MaWdodHMvc3BvdExpZ2h0LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IFNwb3RMaWdodCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcG90TGln
aHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNwb3RMaWdodDsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lmpz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNv
cmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0
aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZSAqLyAi
Li9ub2RlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xpZ2h0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpZ2h0ICovICIu
L0xpZ2h0cy9saWdodC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zaGFkb3dMaWdo
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9zaGFkb3dMaWdodCAqLyAiLi9MaWdodHMvc2hhZG93TGlnaHQudHMiKTsKKworCisKKworCisK
K19ub2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGUiXS5BZGROb2RlQ29uc3Ry
dWN0b3IoIkxpZ2h0X1R5cGVfMiIsIGZ1bmN0aW9uIChuYW1lLCBzY2VuZSkgeworICAgIHJldHVy
biBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3BvdExpZ2h0KG5hbWUsIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpLCBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlpl
cm8oKSwgMCwgMCwgc2NlbmUpOyB9OworfSk7CisvKioKKyAqIEEgc3BvdCBsaWdodCBpcyBkZWZp
bmVkIGJ5IGEgcG9zaXRpb24sIGEgZGlyZWN0aW9uLCBhbiBhbmdsZSwgYW5kIGFuIGV4cG9uZW50
LgorICogVGhlc2UgdmFsdWVzIGRlZmluZSBhIGNvbmUgb2YgbGlnaHQgc3RhcnRpbmcgZnJvbSB0
aGUgcG9zaXRpb24sIGVtaXR0aW5nIHRvd2FyZCB0aGUgZGlyZWN0aW9uLgorICogVGhlIGFuZ2xl
LCBpbiByYWRpYW5zLCBkZWZpbmVzIHRoZSBzaXplIChmaWVsZCBvZiBpbGx1bWluYXRpb24pIG9m
IHRoZSBzcG90bGlnaHQncyBjb25pY2FsIGJlYW0sCisgKiBhbmQgdGhlIGV4cG9uZW50IGRlZmlu
ZXMgdGhlIHNwZWVkIG9mIHRoZSBkZWNheSBvZiB0aGUgbGlnaHQgd2l0aCBkaXN0YW5jZSAocmVh
Y2gpLgorICogRG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9u
MTAxL2xpZ2h0cworICovCit2YXIgU3BvdExpZ2h0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0
ZW5kcyJdKFNwb3RMaWdodCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgU3Bv
dExpZ2h0IG9iamVjdCBpbiB0aGUgc2NlbmUuIEEgc3BvdCBsaWdodCBpcyBhIHNpbXBseSBsaWdo
dCBvcmllbnRlZCBjb25lLgorICAgICAqIEl0IGNhbiBjYXN0IHNoYWRvd3MuCisgICAgICogRG9j
dW1lbnRhdGlvbiA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9saWdodHMK
KyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbGlnaHQgZnJpZW5kbHkgbmFtZQorICAgICAqIEBwYXJh
bSBwb3NpdGlvbiBUaGUgcG9zaXRpb24gb2YgdGhlIHNwb3QgbGlnaHQgaW4gdGhlIHNjZW5lCisg
ICAgICogQHBhcmFtIGRpcmVjdGlvbiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBsaWdodCBpbiB0aGUg
c2NlbmUKKyAgICAgKiBAcGFyYW0gYW5nbGUgVGhlIGNvbmUgYW5nbGUgb2YgdGhlIGxpZ2h0IGlu
IFJhZGlhbnMKKyAgICAgKiBAcGFyYW0gZXhwb25lbnQgVGhlIGxpZ2h0IGRlY2F5IHNwZWVkIHdp
dGggdGhlIGRpc3RhbmNlIGZyb20gdGhlIGVtaXNzaW9uIHNwb3QKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgVGhlIHNjZW5lIHRoZSBsaWdodHMgYmVsb25ncyB0bworICAgICAqLworICAgIGZ1bmN0aW9u
IFNwb3RMaWdodChuYW1lLCBwb3NpdGlvbiwgZGlyZWN0aW9uLCBhbmdsZSwgZXhwb25lbnQsIHNj
ZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5l
KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5faW5uZXJBbmdsZSA9IDA7CisgICAgICAgIF90aGlz
Ll9wcm9qZWN0aW9uVGV4dHVyZU1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9wcm9q
ZWN0aW9uVGV4dHVyZUxpZ2h0TmVhciA9IDFlLTY7CisgICAgICAgIF90aGlzLl9wcm9qZWN0aW9u
VGV4dHVyZUxpZ2h0RmFyID0gMTAwMC4wOworICAgICAgICBfdGhpcy5fcHJvamVjdGlvblRleHR1
cmVVcERpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJWZWN0b3IzIl0uVXAoKTsKKyAgICAgICAgX3RoaXMuX3Byb2plY3Rpb25UZXh0dXJl
Vmlld0xpZ2h0RGlydHkgPSB0cnVlOworICAgICAgICBfdGhpcy5fcHJvamVjdGlvblRleHR1cmVQ
cm9qZWN0aW9uTGlnaHREaXJ0eSA9IHRydWU7CisgICAgICAgIF90aGlzLl9wcm9qZWN0aW9uVGV4
dHVyZURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX3Byb2plY3Rpb25UZXh0dXJlVmlld1Rh
cmdldFZlY3RvciA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBfdGhpcy5fcHJvamVjdGlvblRleHR1cmVW
aWV3TGlnaHRNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTWF0cml4Il0uWmVybygpOworICAgICAgICBfdGhpcy5fcHJvamVjdGlvblRleHR1
cmVQcm9qZWN0aW9uTGlnaHRNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTWF0cml4Il0uWmVybygpOworICAgICAgICBfdGhpcy5fcHJvamVj
dGlvblRleHR1cmVTY2FsaW5nTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLkZyb21WYWx1ZXMoMC41LCAwLjAsIDAuMCwgMC4w
LCAwLjAsIDAuNSwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjUsIDAuMCwgMC41LCAwLjUsIDAuNSwg
MS4wKTsKKyAgICAgICAgX3RoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgX3RoaXMu
ZGlyZWN0aW9uID0gZGlyZWN0aW9uOworICAgICAgICBfdGhpcy5hbmdsZSA9IGFuZ2xlOworICAg
ICAgICBfdGhpcy5leHBvbmVudCA9IGV4cG9uZW50OworICAgICAgICByZXR1cm4gX3RoaXM7Cisg
ICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTcG90TGlnaHQucHJvdG90eXBlLCAiYW5n
bGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjb25lIGFuZ2xlIG9mIHRo
ZSBzcG90IGxpZ2h0IGluIFJhZGlhbnMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmdsZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIGNvbmUgYW5nbGUgb2YgdGhlIHNwb3QgbGln
aHQgaW4gUmFkaWFucy4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9hbmdsZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5f
Y29zSGFsZkFuZ2xlID0gTWF0aC5jb3ModmFsdWUgKiAwLjUpOworICAgICAgICAgICAgdGhpcy5f
cHJvamVjdGlvblRleHR1cmVQcm9qZWN0aW9uTGlnaHREaXJ0eSA9IHRydWU7CisgICAgICAgICAg
ICB0aGlzLmZvcmNlUHJvamVjdGlvbk1hdHJpeENvbXB1dGUoKTsKKyAgICAgICAgICAgIHRoaXMu
X2NvbXB1dGVBbmdsZVZhbHVlcygpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoU3BvdExpZ2h0LnByb3RvdHlwZSwgImlubmVyQW5nbGUiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBPbmx5IHVzZWQgaW4gZ2x0ZiBmYWxsb2ZmIG1vZGUsIHRoaXMgZGVm
aW5lcyB0aGUgYW5nbGUgd2hlcmUKKyAgICAgICAgICogdGhlIGRpcmVjdGlvbmFsIGZhbGxvZmYg
d2lsbCBzdGFydCBiZWZvcmUgY3V0dGluZyBhdCBhbmdsZSB3aGljaCBjb3VsZCBiZSBzZWVuCisg
ICAgICAgICAqIGFzIG91dGVyIGFuZ2xlLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJBbmdsZTsKKyAgICAgICAg
fSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ubHkgdXNlZCBpbiBnbHRmIGZhbGxvZmYgbW9k
ZSwgdGhpcyBkZWZpbmVzIHRoZSBhbmdsZSB3aGVyZQorICAgICAgICAgKiB0aGUgZGlyZWN0aW9u
YWwgZmFsbG9mZiB3aWxsIHN0YXJ0IGJlZm9yZSBjdXR0aW5nIGF0IGFuZ2xlIHdoaWNoIGNvdWxk
IGJlIHNlZW4KKyAgICAgICAgICogYXMgb3V0ZXIgYW5nbGUuCisgICAgICAgICAqLworICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faW5uZXJBbmdsZSA9
IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fY29tcHV0ZUFuZ2xlVmFsdWVzKCk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTcG90TGlnaHQucHJvdG90eXBl
LCAic2hhZG93QW5nbGVTY2FsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFsbG93cyBz
Y2FsaW5nIHRoZSBhbmdsZSBvZiB0aGUgbGlnaHQgZm9yIHNoYWRvdyBnZW5lcmF0aW9uIG9ubHku
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9zaGFkb3dBbmdsZVNjYWxlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAg
ICAgICAgICogQWxsb3dzIHNjYWxpbmcgdGhlIGFuZ2xlIG9mIHRoZSBsaWdodCBmb3Igc2hhZG93
IGdlbmVyYXRpb24gb25seS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dBbmdsZVNjYWxlID0gdmFsdWU7CisgICAg
ICAgICAgICB0aGlzLmZvcmNlUHJvamVjdGlvbk1hdHJpeENvbXB1dGUoKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNwb3RMaWdodC5wcm90b3R5cGUsICJw
cm9qZWN0aW9uVGV4dHVyZU1hdHJpeCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICogQWxsb3dz
IHJlYWRpbmcgdGhlIHByb2plY3RvbiB0ZXh0dXJlCisgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb25UZXh0dXJl
TWF0cml4OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3Bv
dExpZ2h0LnByb3RvdHlwZSwgInByb2plY3Rpb25UZXh0dXJlTGlnaHROZWFyIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbmVhciBjbGlwIG9mIHRoZSBTcG90bGlnaHQgZm9y
IHRleHR1cmUgcHJvamVjdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb25UZXh0dXJlTGlnaHROZWFy
OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgbmVhciBjbGlw
IG9mIHRoZSBTcG90bGlnaHQgZm9yIHRleHR1cmUgcHJvamVjdGlvbi4KKyAgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9wcm9qZWN0
aW9uVGV4dHVyZUxpZ2h0TmVhciA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlv
blRleHR1cmVQcm9qZWN0aW9uTGlnaHREaXJ0eSA9IHRydWU7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTcG90TGlnaHQucHJvdG90eXBlLCAicHJvamVjdGlv
blRleHR1cmVMaWdodEZhciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGZh
ciBjbGlwIG9mIHRoZSBTcG90bGlnaHQgZm9yIHRleHR1cmUgcHJvamVjdGlvbi4KKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3Byb2plY3Rpb25UZXh0dXJlTGlnaHRGYXI7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTZXRzIHRoZSBmYXIgY2xpcCBvZiB0aGUgU3BvdGxpZ2h0IGZvciB0ZXh0dXJlIHBy
b2plY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvblRleHR1cmVMaWdodEZhciA9IHZhbHVlOworICAg
ICAgICAgICAgdGhpcy5fcHJvamVjdGlvblRleHR1cmVQcm9qZWN0aW9uTGlnaHREaXJ0eSA9IHRy
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTcG90TGln
aHQucHJvdG90eXBlLCAicHJvamVjdGlvblRleHR1cmVVcERpcmVjdGlvbiIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIFVwIHZlY3RvciBvZiB0aGUgU3BvdGxpZ2h0IGZvciB0
ZXh0dXJlIHByb2plY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVVwRGlyZWN0aW9u
OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgVXAgdmVjdG9y
IG9mIHRoZSBTcG90bGlnaHQgZm9yIHRleHR1cmUgcHJvamVjdGlvbi4KKyAgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9wcm9qZWN0
aW9uVGV4dHVyZVVwRGlyZWN0aW9uID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9wcm9qZWN0
aW9uVGV4dHVyZVByb2plY3Rpb25MaWdodERpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNwb3RMaWdodC5wcm90b3R5cGUsICJwcm9qZWN0
aW9uVGV4dHVyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHByb2plY3Rp
b24gdGV4dHVyZSBvZiB0aGUgbGlnaHQuCisgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb25UZXh0dXJlOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgKiBTZXRzIHRoZSBwcm9qZWN0aW9uIHRleHR1
cmUgb2YgdGhlIGxpZ2h0LgorICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9wcm9qZWN0aW9uVGV4dHVyZSA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZSA9IHZh
bHVlOworICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvblRleHR1cmVEaXJ0eSA9IHRydWU7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fcHJvamVjdGlvblRleHR1cmUgJiYgIXRoaXMuX3Byb2plY3Rp
b25UZXh0dXJlLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhp
cy5fcHJvamVjdGlvblRleHR1cmU7CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUub25Mb2Fk
T2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLm9uTG9hZE9ic2VydmFi
bGUuYWRkT25jZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5f
bWFya01lc2hlc0FzTGlnaHREaXJ0eSgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgor
ICAgICAqIFJldHVybnMgdGhlIHN0cmluZyAiU3BvdExpZ2h0Ii4KKyAgICAgKiBAcmV0dXJucyB0
aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFNwb3RMaWdodC5wcm90b3R5cGUuZ2V0Q2xhc3NO
YW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlNwb3RMaWdodCI7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIDIuCisgICAgICogQHJldHVybnMg
VGhlIGxpZ2h0IFR5cGUgaWQgYXMgYSBjb25zdGFudCBkZWZpbmVzIGluIExpZ2h0LkxJR0hUVFlQ
RUlEX3gKKyAgICAgKi8KKyAgICBTcG90TGlnaHQucHJvdG90eXBlLmdldFR5cGVJRCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIF9saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJMaWdodCJdLkxJR0hUVFlQRUlEX1NQT1RMSUdIVDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIE92ZXJyaWRlcyB0aGUgZGlyZWN0aW9uIHNldHRlciB0byByZWNvbXB1dGUgdGhlIHByb2pl
Y3Rpb24gdGV4dHVyZSB2aWV3IGxpZ2h0IE1hdHJpeC4KKyAgICAgKi8KKyAgICBTcG90TGlnaHQu
cHJvdG90eXBlLl9zZXREaXJlY3Rpb24gPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgX3N1
cGVyLnByb3RvdHlwZS5fc2V0RGlyZWN0aW9uLmNhbGwodGhpcywgdmFsdWUpOworICAgICAgICB0
aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVZpZXdMaWdodERpcnR5ID0gdHJ1ZTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIE92ZXJyaWRlcyB0aGUgcG9zaXRpb24gc2V0dGVyIHRvIHJlY29tcHV0ZSB0
aGUgcHJvamVjdGlvbiB0ZXh0dXJlIHZpZXcgbGlnaHQgTWF0cml4LgorICAgICAqLworICAgIFNw
b3RMaWdodC5wcm90b3R5cGUuX3NldFBvc2l0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgIF9zdXBlci5wcm90b3R5cGUuX3NldFBvc2l0aW9uLmNhbGwodGhpcywgdmFsdWUpOworICAg
ICAgICB0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVZpZXdMaWdodERpcnR5ID0gdHJ1ZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHBhc3NlZCBtYXRyaXggIm1hdHJpeCIgYXMgcGVy
c3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggZm9yIHRoZSBzaGFkb3dzIGFuZCB0aGUgcGFzc2Vk
IHZpZXcgbWF0cml4IHdpdGggdGhlIGZvdiBlcXVhbCB0byB0aGUgU3BvdExpZ2h0IGFuZ2xlIGFu
ZCBhbmQgYXNwZWN0IHJhdGlvIG9mIDEuMC4KKyAgICAgKiBSZXR1cm5zIHRoZSBTcG90TGlnaHQu
CisgICAgICovCisgICAgU3BvdExpZ2h0LnByb3RvdHlwZS5fc2V0RGVmYXVsdFNoYWRvd1Byb2pl
Y3Rpb25NYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCB2aWV3TWF0cml4LCByZW5kZXJMaXN0KSB7
CisgICAgICAgIHZhciBhY3RpdmVDYW1lcmEgPSB0aGlzLmdldFNjZW5lKCkuYWN0aXZlQ2FtZXJh
OworICAgICAgICBpZiAoIWFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX3NoYWRvd0FuZ2xlU2NhbGUgPSB0aGlzLl9zaGFkb3dBbmds
ZVNjYWxlIHx8IDE7CisgICAgICAgIHZhciBhbmdsZSA9IHRoaXMuX3NoYWRvd0FuZ2xlU2NhbGUg
KiB0aGlzLl9hbmdsZTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLlBlcnNwZWN0aXZlRm92TEhUb1JlZihhbmdsZSwgMS4w
LCB0aGlzLmdldERlcHRoTWluWihhY3RpdmVDYW1lcmEpLCB0aGlzLmdldERlcHRoTWF4WihhY3Rp
dmVDYW1lcmEpLCBtYXRyaXgpOworICAgIH07CisgICAgU3BvdExpZ2h0LnByb3RvdHlwZS5fY29t
cHV0ZVByb2plY3Rpb25UZXh0dXJlVmlld0xpZ2h0TWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVZpZXdMaWdodERpcnR5ID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX3Byb2plY3Rpb25UZXh0dXJlRGlydHkgPSB0cnVlOworICAgICAgICB0aGlzLnBv
c2l0aW9uLmFkZFRvUmVmKHRoaXMuZGlyZWN0aW9uLCB0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVZp
ZXdUYXJnZXRWZWN0b3IpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTWF0cml4Il0uTG9va0F0TEhUb1JlZih0aGlzLnBvc2l0aW9uLCB0
aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVZpZXdUYXJnZXRWZWN0b3IsIHRoaXMuX3Byb2plY3Rpb25U
ZXh0dXJlVXBEaXJlY3Rpb24sIHRoaXMuX3Byb2plY3Rpb25UZXh0dXJlVmlld0xpZ2h0TWF0cml4
KTsKKyAgICB9OworICAgIFNwb3RMaWdodC5wcm90b3R5cGUuX2NvbXB1dGVQcm9qZWN0aW9uVGV4
dHVyZVByb2plY3Rpb25MaWdodE1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5f
cHJvamVjdGlvblRleHR1cmVQcm9qZWN0aW9uTGlnaHREaXJ0eSA9IGZhbHNlOworICAgICAgICB0
aGlzLl9wcm9qZWN0aW9uVGV4dHVyZURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgdmFyIGxpZ2h0X2Zh
ciA9IHRoaXMucHJvamVjdGlvblRleHR1cmVMaWdodEZhcjsKKyAgICAgICAgdmFyIGxpZ2h0X25l
YXIgPSB0aGlzLnByb2plY3Rpb25UZXh0dXJlTGlnaHROZWFyOworICAgICAgICB2YXIgUCA9IGxp
Z2h0X2ZhciAvIChsaWdodF9mYXIgLSBsaWdodF9uZWFyKTsKKyAgICAgICAgdmFyIFEgPSAtUCAq
IGxpZ2h0X25lYXI7CisgICAgICAgIHZhciBTID0gMS4wIC8gTWF0aC50YW4odGhpcy5fYW5nbGUg
LyAyLjApOworICAgICAgICB2YXIgQSA9IDEuMDsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJdLkZyb21WYWx1ZXNUb1JlZihT
IC8gQSwgMC4wLCAwLjAsIDAuMCwgMC4wLCBTLCAwLjAsIDAuMCwgMC4wLCAwLjAsIFAsIDEuMCwg
MC4wLCAwLjAsIFEsIDAuMCwgdGhpcy5fcHJvamVjdGlvblRleHR1cmVQcm9qZWN0aW9uTGlnaHRN
YXRyaXgpOworICAgIH07CisgICAgLyoqCisgICAgICogTWFpbiBmdW5jdGlvbiBmb3IgbGlnaHQg
dGV4dHVyZSBwcm9qZWN0aW9uIG1hdHJpeCBjb21wdXRpbmcuCisgICAgICovCisgICAgU3BvdExp
Z2h0LnByb3RvdHlwZS5fY29tcHV0ZVByb2plY3Rpb25UZXh0dXJlTWF0cml4ID0gZnVuY3Rpb24g
KCkgeworICAgICAgICB0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZURpcnR5ID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX3Byb2plY3Rpb25UZXh0dXJlVmlld0xpZ2h0TWF0cml4Lm11bHRpcGx5VG9SZWYo
dGhpcy5fcHJvamVjdGlvblRleHR1cmVQcm9qZWN0aW9uTGlnaHRNYXRyaXgsIHRoaXMuX3Byb2pl
Y3Rpb25UZXh0dXJlTWF0cml4KTsKKyAgICAgICAgdGhpcy5fcHJvamVjdGlvblRleHR1cmVNYXRy
aXgubXVsdGlwbHlUb1JlZih0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVNjYWxpbmdNYXRyaXgsIHRo
aXMuX3Byb2plY3Rpb25UZXh0dXJlTWF0cml4KTsKKyAgICB9OworICAgIFNwb3RMaWdodC5wcm90
b3R5cGUuX2J1aWxkVW5pZm9ybUxheW91dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5f
dW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2TGlnaHREYXRhIiwgNCk7CisgICAgICAgIHRoaXMu
X3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidkxpZ2h0RGlmZnVzZSIsIDQpOworICAgICAgICB0
aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZMaWdodFNwZWN1bGFyIiwgMyk7CisgICAg
ICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidkxpZ2h0RGlyZWN0aW9uIiwgMyk7
CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidkxpZ2h0RmFsbG9mZiIs
IDQpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInNoYWRvd3NJbmZv
IiwgMyk7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgiZGVwdGhWYWx1
ZXMiLCAyKTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5jcmVhdGUoKTsKKyAgICB9Owor
ICAgIFNwb3RMaWdodC5wcm90b3R5cGUuX2NvbXB1dGVBbmdsZVZhbHVlcyA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdGhpcy5fbGlnaHRBbmdsZVNjYWxlID0gMS4wIC8gTWF0aC5tYXgoMC4wMDEs
IChNYXRoLmNvcyh0aGlzLl9pbm5lckFuZ2xlICogMC41KSAtIHRoaXMuX2Nvc0hhbGZBbmdsZSkp
OworICAgICAgICB0aGlzLl9saWdodEFuZ2xlT2Zmc2V0ID0gLXRoaXMuX2Nvc0hhbGZBbmdsZSAq
IHRoaXMuX2xpZ2h0QW5nbGVTY2FsZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IHBhc3NlZCBFZmZlY3Qgb2JqZWN0IHdpdGggdGhlIFNwb3RMaWdodCB0cmFuc2ZvbWVkIHBvc2l0
aW9uIChvciBwb3NpdGlvbiBpZiBub3QgcGFyZW50ZWQpIGFuZCBub3JtYWxpemVkIGRpcmVjdGlv
bi4KKyAgICAgKiBAcGFyYW0gZWZmZWN0IFRoZSBlZmZlY3QgdG8gdXBkYXRlCisgICAgICogQHBh
cmFtIGxpZ2h0SW5kZXggVGhlIGluZGV4IG9mIHRoZSBsaWdodCBpbiB0aGUgZWZmZWN0IHRvIHVw
ZGF0ZQorICAgICAqIEByZXR1cm5zIFRoZSBzcG90IGxpZ2h0CisgICAgICovCisgICAgU3BvdExp
Z2h0LnByb3RvdHlwZS50cmFuc2ZlclRvRWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCwgbGlnaHRJ
bmRleCkgeworICAgICAgICB2YXIgbm9ybWFsaXplRGlyZWN0aW9uOworICAgICAgICBpZiAodGhp
cy5jb21wdXRlVHJhbnNmb3JtZWRJbmZvcm1hdGlvbigpKSB7CisgICAgICAgICAgICB0aGlzLl91
bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgidkxpZ2h0RGF0YSIsIHRoaXMudHJhbnNmb3JtZWRQ
b3NpdGlvbi54LCB0aGlzLnRyYW5zZm9ybWVkUG9zaXRpb24ueSwgdGhpcy50cmFuc2Zvcm1lZFBv
c2l0aW9uLnosIHRoaXMuZXhwb25lbnQsIGxpZ2h0SW5kZXgpOworICAgICAgICAgICAgbm9ybWFs
aXplRGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlZlY3RvcjMiXS5Ob3JtYWxpemUodGhpcy50cmFuc2Zvcm1lZERpcmVjdGlvbik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVy
LnVwZGF0ZUZsb2F0NCgidkxpZ2h0RGF0YSIsIHRoaXMucG9zaXRpb24ueCwgdGhpcy5wb3NpdGlv
bi55LCB0aGlzLnBvc2l0aW9uLnosIHRoaXMuZXhwb25lbnQsIGxpZ2h0SW5kZXgpOworICAgICAg
ICAgICAgbm9ybWFsaXplRGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5Ob3JtYWxpemUodGhpcy5kaXJlY3Rpb24pOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmdldFNjZW5lKCkudXNlUmlnaHRIYW5kZWRTeXN0
ZW0pIHsKKyAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQ0KCJ2TGln
aHREaXJlY3Rpb24iLCAtbm9ybWFsaXplRGlyZWN0aW9uLngsIC1ub3JtYWxpemVEaXJlY3Rpb24u
eSwgLW5vcm1hbGl6ZURpcmVjdGlvbi56LCB0aGlzLl9jb3NIYWxmQW5nbGUsIGxpZ2h0SW5kZXgp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1
ZmZlci51cGRhdGVGbG9hdDQoInZMaWdodERpcmVjdGlvbiIsIG5vcm1hbGl6ZURpcmVjdGlvbi54
LCBub3JtYWxpemVEaXJlY3Rpb24ueSwgbm9ybWFsaXplRGlyZWN0aW9uLnosIHRoaXMuX2Nvc0hh
bGZBbmdsZSwgbGlnaHRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1
ZmZlci51cGRhdGVGbG9hdDQoInZMaWdodEZhbGxvZmYiLCB0aGlzLnJhbmdlLCB0aGlzLl9pbnZl
cnNlU3F1YXJlZFJhbmdlLCB0aGlzLl9saWdodEFuZ2xlU2NhbGUsIHRoaXMuX2xpZ2h0QW5nbGVP
ZmZzZXQsIGxpZ2h0SW5kZXgpOworICAgICAgICBpZiAodGhpcy5wcm9qZWN0aW9uVGV4dHVyZSAm
JiB0aGlzLnByb2plY3Rpb25UZXh0dXJlLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuX3Byb2plY3Rpb25UZXh0dXJlVmlld0xpZ2h0RGlydHkpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9jb21wdXRlUHJvamVjdGlvblRleHR1cmVWaWV3TGlnaHRNYXRyaXgoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0aW9uVGV4dHVyZVByb2plY3Rpb25M
aWdodERpcnR5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY29tcHV0ZVByb2plY3Rpb25UZXh0
dXJlUHJvamVjdGlvbkxpZ2h0TWF0cml4KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodGhpcy5fcHJvamVjdGlvblRleHR1cmVEaXJ0eSkgeworICAgICAgICAgICAgICAgIHRoaXMu
X2NvbXB1dGVQcm9qZWN0aW9uVGV4dHVyZU1hdHJpeCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWZmZWN0LnNldE1hdHJpeCgidGV4dHVyZVByb2plY3Rpb25NYXRyaXgiICsgbGlnaHRJ
bmRleCwgdGhpcy5fcHJvamVjdGlvblRleHR1cmVNYXRyaXgpOworICAgICAgICAgICAgZWZmZWN0
LnNldFRleHR1cmUoInByb2plY3Rpb25MaWdodFNhbXBsZXIiICsgbGlnaHRJbmRleCwgdGhpcy5w
cm9qZWN0aW9uVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICBTcG90TGlnaHQucHJvdG90eXBlLnRyYW5zZmVyVG9Ob2RlTWF0ZXJpYWxFZmZlY3Qg
PSBmdW5jdGlvbiAoZWZmZWN0LCBsaWdodERhdGFVbmlmb3JtTmFtZSkgeworICAgICAgICB2YXIg
bm9ybWFsaXplRGlyZWN0aW9uOworICAgICAgICBpZiAodGhpcy5jb21wdXRlVHJhbnNmb3JtZWRJ
bmZvcm1hdGlvbigpKSB7CisgICAgICAgICAgICBub3JtYWxpemVEaXJlY3Rpb24gPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLk5vcm1h
bGl6ZSh0aGlzLnRyYW5zZm9ybWVkRGlyZWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIG5vcm1hbGl6ZURpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uTm9ybWFsaXplKHRoaXMuZGly
ZWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5nZXRTY2VuZSgpLnVzZVJpZ2h0
SGFuZGVkU3lzdGVtKSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQzKGxpZ2h0RGF0YVVu
aWZvcm1OYW1lLCAtbm9ybWFsaXplRGlyZWN0aW9uLngsIC1ub3JtYWxpemVEaXJlY3Rpb24ueSwg
LW5vcm1hbGl6ZURpcmVjdGlvbi56KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGVmZmVjdC5zZXRGbG9hdDMobGlnaHREYXRhVW5pZm9ybU5hbWUsIG5vcm1hbGl6ZURp
cmVjdGlvbi54LCBub3JtYWxpemVEaXJlY3Rpb24ueSwgbm9ybWFsaXplRGlyZWN0aW9uLnopOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICog
RGlzcG9zZXMgdGhlIGxpZ2h0IGFuZCB0aGUgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgICAgICov
CisgICAgU3BvdExpZ2h0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMu
X3Byb2plY3Rpb25UZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uVGV4dHVy
ZS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFByZXBhcmVz
IHRoZSBsaXN0IG9mIGRlZmluZXMgc3BlY2lmaWMgdG8gdGhlIGxpZ2h0IHR5cGUuCisgICAgICog
QHBhcmFtIGRlZmluZXMgdGhlIGxpc3Qgb2YgZGVmaW5lcworICAgICAqIEBwYXJhbSBsaWdodElu
ZGV4IGRlZmluZXMgdGhlIGluZGV4IG9mIHRoZSBsaWdodCBmb3IgdGhlIGVmZmVjdAorICAgICAq
LworICAgIFNwb3RMaWdodC5wcm90b3R5cGUucHJlcGFyZUxpZ2h0U3BlY2lmaWNEZWZpbmVzID0g
ZnVuY3Rpb24gKGRlZmluZXMsIGxpZ2h0SW5kZXgpIHsKKyAgICAgICAgZGVmaW5lc1siU1BPVExJ
R0hUIiArIGxpZ2h0SW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgZGVmaW5lc1siUFJPSkVDVEVETElH
SFRURVhUVVJFIiArIGxpZ2h0SW5kZXhdID0gdGhpcy5wcm9qZWN0aW9uVGV4dHVyZSAmJiB0aGlz
LnByb2plY3Rpb25UZXh0dXJlLmlzUmVhZHkoKSA/IHRydWUgOiBmYWxzZTsKKyAgICB9OworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3BvdExpZ2h0LnByb3RvdHlwZSwgImFuZ2xlIiwgbnVs
bCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTcG90TGlnaHQucHJvdG90eXBlLCAiaW5u
ZXJBbmdsZSIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3BvdExpZ2h0LnBy
b3RvdHlwZSwgInNoYWRvd0FuZ2xlU2NhbGUiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIFNwb3RMaWdodC5wcm90b3R5cGUsICJleHBvbmVudCIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplIl0pKCkKKyAgICBdLCBTcG90TGlnaHQucHJvdG90eXBlLCAicHJvamVjdGlvblRleHR1
cmVMaWdodE5lYXIiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFNwb3RMaWdo
dC5wcm90b3R5cGUsICJwcm9qZWN0aW9uVGV4dHVyZUxpZ2h0RmFyIiwgbnVsbCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplIl0pKCkKKyAgICBdLCBTcG90TGlnaHQucHJvdG90eXBlLCAicHJvamVjdGlvblRleHR1
cmVVcERpcmVjdGlvbiIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgicHJvamVj
dGVkTGlnaHRUZXh0dXJlIikKKyAgICBdLCBTcG90TGlnaHQucHJvdG90eXBlLCAiX3Byb2plY3Rp
b25UZXh0dXJlIiwgdm9pZCAwKTsKKyAgICByZXR1cm4gU3BvdExpZ2h0OworfShfc2hhZG93TGln
aHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2hhZG93TGlnaHQiXSkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL0xvYWRpbmcvUGx1Z2lucy9iYWJ5bG9uRmlsZUxvYWRlci50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9Mb2FkaW5nL1BsdWdpbnMvYmFieWxvbkZpbGVMb2FkZXIudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBfQmFieWxvbkxvYWRlclJlZ2lzdGVyZWQgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiX0JhYnlsb25Mb2FkZXJSZWdpc3RlcmVkIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfQmFieWxvbkxvYWRlclJlZ2lzdGVyZWQ7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0NhbWVy
YXMvY2FtZXJhICovICIuL0NhbWVyYXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9tZXNoICov
ICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19n
ZW9tZXRyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vTWVzaGVzL2dlb21ldHJ5ICovICIuL01lc2hlcy9nZW9tZXRyeS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVz
L3RyYW5zZm9ybU5vZGUgKi8gIi4vTWVzaGVzL3RyYW5zZm9ybU5vZGUudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvbWF0ZXJp
YWwgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19tdWx0aU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvbXVsdGlNYXRlcmlhbCAq
LyAiLi9NYXRlcmlhbHMvbXVsdGlNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfY3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9UZXh0dXJl
cy9jdWJlVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvY3ViZVRleHR1cmUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2hkckN1YmVUZXh0
dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2hkckN1YmVUZXh0dXJlICovICIuL01hdGVyaWFs
cy9UZXh0dXJlcy9oZHJDdWJlVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9BbmltYXRpb25zX2FuaW1hdGlvbkdyb3VwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vQW5pbWF0aW9ucy9hbmltYXRpb25Hcm91
cCAqLyAiLi9BbmltYXRpb25zL2FuaW1hdGlvbkdyb3VwLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0xpZ2h0c19saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0xpZ2h0cy9saWdodCAqLyAiLi9MaWdodHMvbGln
aHQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9z
Y2VuZUNvbXBvbmVudCAqLyAiLi9zY2VuZUNvbXBvbmVudC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTG9hZGluZy9zY2VuZUxvYWRlciAq
LyAiLi9Mb2FkaW5nL3NjZW5lTG9hZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9hYnN0cmFjdFNjZW5lICovICIuL2Fic3RyYWN0U2NlbmUudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXNzZXRDb250YWluZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9hc3NldENv
bnRhaW5lciAqLyAiLi9hc3NldENvbnRhaW5lci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9BY3Rpb25zX2FjdGlvbk1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9BY3Rpb25zL2FjdGlvbk1hbmFnZXIgKi8g
Ii4vQWN0aW9ucy9hY3Rpb25NYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0JvbmVzX3NrZWxldG9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vQm9uZXMvc2tlbGV0b24gKi8gIi4vQm9uZXMvc2tlbGV0b24u
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTW9ycGhfbW9ycGhUYXJnZXRNYW5hZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTW9ycGgvbW9ycGhUYXJnZXRNYW5hZ2VyICovICIuL01vcnBoL21vcnBoVGFyZ2V0TWFu
YWdlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9QaHlzaWNzX1BsdWdpbnNfY2Fu
bm9uSlNQbHVnaW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9QaHlzaWNzL1BsdWdpbnMvY2Fubm9uSlNQbHVnaW4gKi8gIi4vUGh5
c2ljcy9QbHVnaW5zL2Nhbm5vbkpTUGx1Z2luLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1BoeXNpY3NfUGx1Z2luc19vaW1vSlNQbHVnaW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9QaHlzaWNzL1BsdWdpbnMvb2lt
b0pTUGx1Z2luICovICIuL1BoeXNpY3MvUGx1Z2lucy9vaW1vSlNQbHVnaW4udHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfUGh5c2ljc19QbHVnaW5zX2FtbW9KU1BsdWdpbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL1Bo
eXNpY3MvUGx1Z2lucy9hbW1vSlNQbHVnaW4gKi8gIi4vUGh5c2ljcy9QbHVnaW5zL2FtbW9KU1Bs
dWdpbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qcm9iZXNfcmVmbGVjdGlvblBy
b2JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vUHJvYmVzL3JlZmxlY3Rpb25Qcm9iZSAqLyAiLi9Qcm9iZXMvcmVmbGVjdGlvblBy
b2JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3N0cmluZ1Rvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlz
Yy9zdHJpbmdUb29scyAqLyAiLi9NaXNjL3N0cmluZ1Rvb2xzLnRzIik7CisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisvKiogQGhpZGRlbiAqLwor
dmFyIF9CYWJ5bG9uTG9hZGVyUmVnaXN0ZXJlZCA9IHRydWU7Cit2YXIgcGFyc2VNYXRlcmlhbEJ5
SWQgPSBmdW5jdGlvbiAoaWQsIHBhcnNlZERhdGEsIHNjZW5lLCByb290VXJsKSB7CisgICAgZm9y
ICh2YXIgaW5kZXggPSAwLCBjYWNoZSA9IHBhcnNlZERhdGEubWF0ZXJpYWxzLmxlbmd0aDsgaW5k
ZXggPCBjYWNoZTsgaW5kZXgrKykgeworICAgICAgICB2YXIgcGFyc2VkTWF0ZXJpYWwgPSBwYXJz
ZWREYXRhLm1hdGVyaWFsc1tpbmRleF07CisgICAgICAgIGlmIChwYXJzZWRNYXRlcmlhbC5pZCA9
PT0gaWQpIHsKKyAgICAgICAgICAgIHJldHVybiBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsIl0uUGFyc2UocGFyc2VkTWF0ZXJpYWwsIHNj
ZW5lLCByb290VXJsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbDsKK307Cit2
YXIgaXNEZXNjZW5kYW50T2YgPSBmdW5jdGlvbiAobWVzaCwgbmFtZXMsIGhpZXJhcmNoeUlkcykg
eworICAgIGZvciAodmFyIGkgaW4gbmFtZXMpIHsKKyAgICAgICAgaWYgKG1lc2gubmFtZSA9PT0g
bmFtZXNbaV0pIHsKKyAgICAgICAgICAgIGhpZXJhcmNoeUlkcy5wdXNoKG1lc2guaWQpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1lc2gucGFy
ZW50SWQgJiYgaGllcmFyY2h5SWRzLmluZGV4T2YobWVzaC5wYXJlbnRJZCkgIT09IC0xKSB7Cisg
ICAgICAgIGhpZXJhcmNoeUlkcy5wdXNoKG1lc2guaWQpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfTsKK3ZhciBsb2dPcGVyYXRpb24gPSBmdW5jdGlv
biAob3BlcmF0aW9uLCBwcm9kdWNlcikgeworICAgIHJldHVybiBvcGVyYXRpb24gKyAiIG9mICIg
KyAocHJvZHVjZXIgPyBwcm9kdWNlci5maWxlICsgIiBmcm9tICIgKyBwcm9kdWNlci5uYW1lICsg
IiB2ZXJzaW9uOiAiICsgcHJvZHVjZXIudmVyc2lvbiArICIsIGV4cG9ydGVyIHZlcnNpb246ICIg
KyBwcm9kdWNlci5leHBvcnRlcl92ZXJzaW9uIDogInVua25vd24iKTsKK307Cit2YXIgbG9hZERl
dGFpbExldmVscyA9IGZ1bmN0aW9uIChzY2VuZSwgbWVzaCkgeworICAgIHZhciBtYXN0ZXJtZXNo
ID0gbWVzaDsKKyAgICAvLyBFdmVyeSB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIGlkcyBhcnJheSBv
ZiB0aGUgbG9kIGRhdGEgcG9pbnRzIHRvIGFub3RoZXIgbWVzaCB3aGljaCBzaG91bGQgYmUgdXNl
ZCBhcyB0aGUgbG93ZXIgTE9EIGxldmVsLgorICAgIC8vIFRoZSBkaXN0YW5jZXMgKG9yIGNvdmVy
YWdlcykgYXJyYXkgdmFsdWVzIHNwZWNpZmllZCBhcmUgdXNlZCBhbG9uZyB3aXRoIHRoZSBsb2Qg
bWVzaCBpZHMgYXMgYSBoaW50IHRvIGRldGVybWluZSB0aGUgc3dpdGNoaW5nIHRocmVzaG9sZCBm
b3IgdGhlIHZhcmlvdXMgTE9Ecy4KKyAgICBpZiAobWVzaC5fd2FpdGluZ0RhdGEubG9kcykgewor
ICAgICAgICBpZiAobWVzaC5fd2FpdGluZ0RhdGEubG9kcy5pZHMgJiYgbWVzaC5fd2FpdGluZ0Rh
dGEubG9kcy5pZHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdmFyIGxvZG1lc2hlcyA9IG1l
c2guX3dhaXRpbmdEYXRhLmxvZHMuaWRzOworICAgICAgICAgICAgdmFyIHdhc2VuYWJsZWQgPSBt
YXN0ZXJtZXNoLmlzRW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICBpZiAobWVzaC5fd2FpdGlu
Z0RhdGEubG9kcy5kaXN0YW5jZXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2VzID0g
bWVzaC5fd2FpdGluZ0RhdGEubG9kcy5kaXN0YW5jZXM7CisgICAgICAgICAgICAgICAgaWYgKGRp
c3RhbmNlcy5sZW5ndGggPj0gbG9kbWVzaGVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgY3VsbGluZyA9IChkaXN0YW5jZXMubGVuZ3RoID4gbG9kbWVzaGVzLmxlbmd0aCkgPyBk
aXN0YW5jZXNbZGlzdGFuY2VzLmxlbmd0aCAtIDFdIDogMDsKKyAgICAgICAgICAgICAgICAgICAg
bWFzdGVybWVzaC5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IGxvZG1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBsb2RpZCA9IGxvZG1lc2hlc1tpbmRleF07CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgbG9kbWVzaCA9IHNjZW5lLmdldE1lc2hCeUlEKGxvZGlkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2RtZXNoICE9IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXN0ZXJtZXNoLmFkZExPRExldmVsKGRpc3RhbmNlc1tpbmRl
eF0sIGxvZG1lc2gpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChjdWxsaW5nID4gMCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbWFzdGVybWVzaC5hZGRMT0RMZXZlbChjdWxsaW5nLCBudWxsKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAod2FzZW5hYmxlZCA9
PT0gdHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVybWVzaC5zZXRFbmFibGVk
KHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjVfX1siVG9vbHMiXS5XYXJuKCJJbnZhbGlkIGxldmVsIG9mIGRl
dGFpbCBkaXN0YW5jZXMgZm9yICIgKyBtZXNoLm5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtZXNoLl93YWl0aW5nRGF0YS5sb2RzID0g
bnVsbDsKKyAgICB9Cit9OwordmFyIGxvYWRBc3NldENvbnRhaW5lciA9IGZ1bmN0aW9uIChzY2Vu
ZSwgZGF0YSwgcm9vdFVybCwgb25FcnJvciwgYWRkVG9TY2VuZSkgeworICAgIGlmIChhZGRUb1Nj
ZW5lID09PSB2b2lkIDApIHsgYWRkVG9TY2VuZSA9IGZhbHNlOyB9CisgICAgdmFyIGNvbnRhaW5l
ciA9IG5ldyBfYXNzZXRDb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkFz
c2V0Q29udGFpbmVyIl0oc2NlbmUpOworICAgIC8vIEVudGlyZSBtZXRob2QgcnVubmluZyBpbiB0
cnkgYmxvY2ssIHNvIEFMV0FZUyBsb2dzIGFzIGZhciBhcyBpdCBnb3QsIG9ubHkgYWN0dWFsbHkg
d3JpdGVzIGRldGFpbHMKKyAgICAvLyB3aGVuIFNjZW5lTG9hZGVyLmRlYnVnTG9nZ2luZyA9IHRy
dWUgKGRlZmF1bHQpLCBvciBleGNlcHRpb24gZW5jb3VudGVyZWQuCisgICAgLy8gRXZlcnl0aGlu
ZyBzdG9yZWQgaW4gdmFyIGxvZyBpbnN0ZWFkIG9mIHdyaXRpbmcgc2VwYXJhdGUgbGluZXMgdG8g
c3VwcG9ydCBvbmx5IHdyaXRpbmcgaW4gZXhjZXB0aW9uLAorICAgIC8vIGFuZCBhdm9pZCBwcm9i
bGVtcyB3aXRoIG11bHRpcGxlIGNvbmN1cnJlbnQgLmJhYnlsb24gbG9hZHMuCisgICAgdmFyIGxv
ZyA9ICJpbXBvcnRTY2VuZSBoYXMgZmFpbGVkIEpTT04gcGFyc2UiOworICAgIHRyeSB7CisgICAg
ICAgIHZhciBwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKKyAgICAgICAgbG9nID0gIiI7
CisgICAgICAgIHZhciBmdWxsRGV0YWlscyA9IF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xNF9fWyJTY2VuZUxvYWRlciJdLmxvZ2dpbmdMZXZlbCA9PT0gX0xv
YWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlNjZW5lTG9h
ZGVyIl0uREVUQUlMRURfTE9HR0lORzsKKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICB2YXIg
Y2FjaGU7CisgICAgICAgIC8vIEVudmlyb25tZW50IHRleHR1cmUKKyAgICAgICAgaWYgKHBhcnNl
ZERhdGEuZW52aXJvbm1lbnRUZXh0dXJlICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkRGF0YS5lbnZp
cm9ubWVudFRleHR1cmUgIT09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFBCUiBuZWVkZWQgZm9y
IGJvdGggSERSIHRleHR1cmUgKGdhbW1hIHNwYWNlKSAmIGEgc2t5IGJveAorICAgICAgICAgICAg
dmFyIGlzUEJSID0gcGFyc2VkRGF0YS5pc1BCUiAhPT0gdW5kZWZpbmVkID8gcGFyc2VkRGF0YS5p
c1BCUiA6IHRydWU7CisgICAgICAgICAgICBpZiAocGFyc2VkRGF0YS5lbnZpcm9ubWVudFRleHR1
cmVUeXBlICYmIHBhcnNlZERhdGEuZW52aXJvbm1lbnRUZXh0dXJlVHlwZSA9PT0gIkJBQllMT04u
SERSQ3ViZVRleHR1cmUiKSB7CisgICAgICAgICAgICAgICAgdmFyIGhkclNpemUgPSAocGFyc2Vk
RGF0YS5lbnZpcm9ubWVudFRleHR1cmVTaXplKSA/IHBhcnNlZERhdGEuZW52aXJvbm1lbnRUZXh0
dXJlU2l6ZSA6IDEyODsKKyAgICAgICAgICAgICAgICB2YXIgaGRyVGV4dHVyZSA9IG5ldyBfTWF0
ZXJpYWxzX1RleHR1cmVzX2hkckN1YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fWyJIRFJDdWJlVGV4dHVyZSJdKChwYXJzZWREYXRhLmVudmlyb25tZW50VGV4dHVyZS5tYXRj
aCgvaHR0cHM/OlwvXC8vZykgPyAiIiA6IHJvb3RVcmwpICsgcGFyc2VkRGF0YS5lbnZpcm9ubWVu
dFRleHR1cmUsIHNjZW5lLCBoZHJTaXplLCB0cnVlLCAhaXNQQlIpOworICAgICAgICAgICAgICAg
IGlmIChwYXJzZWREYXRhLmVudmlyb25tZW50VGV4dHVyZVJvdGF0aW9uWSkgeworICAgICAgICAg
ICAgICAgICAgICBoZHJUZXh0dXJlLnJvdGF0aW9uWSA9IHBhcnNlZERhdGEuZW52aXJvbm1lbnRU
ZXh0dXJlUm90YXRpb25ZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzY2Vu
ZS5lbnZpcm9ubWVudFRleHR1cmUgPSBoZHJUZXh0dXJlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKF9NaXNjX3N0cmluZ1Rvb2xzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fWyJTdHJpbmdUb29scyJdLkVuZHNXaXRoKHBhcnNlZERh
dGEuZW52aXJvbm1lbnRUZXh0dXJlLCAiLmVudiIpKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBjb21wcmVzc2VkVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2N1YmVUZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkN1YmVUZXh0dXJlIl0oKHBhcnNlZERhdGEu
ZW52aXJvbm1lbnRUZXh0dXJlLm1hdGNoKC9odHRwcz86XC9cLy9nKSA/ICIiIDogcm9vdFVybCkg
KyBwYXJzZWREYXRhLmVudmlyb25tZW50VGV4dHVyZSwgc2NlbmUpOworICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyc2VkRGF0YS5lbnZpcm9ubWVudFRleHR1cmVSb3RhdGlvblkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWRUZXh0dXJlLnJvdGF0aW9uWSA9IHBhcnNlZERh
dGEuZW52aXJvbm1lbnRUZXh0dXJlUm90YXRpb25ZOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHNjZW5lLmVudmlyb25tZW50VGV4dHVyZSA9IGNvbXByZXNzZWRU
ZXh0dXJlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGN1YmVUZXh0dXJlID0gX01hdGVyaWFsc19UZXh0dXJlc19jdWJl
VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJDdWJlVGV4dHVyZSJdLkNyZWF0
ZUZyb21QcmVmaWx0ZXJlZERhdGEoKHBhcnNlZERhdGEuZW52aXJvbm1lbnRUZXh0dXJlLm1hdGNo
KC9odHRwcz86XC9cLy9nKSA/ICIiIDogcm9vdFVybCkgKyBwYXJzZWREYXRhLmVudmlyb25tZW50
VGV4dHVyZSwgc2NlbmUpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkRGF0YS5lbnZp
cm9ubWVudFRleHR1cmVSb3RhdGlvblkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1YmVU
ZXh0dXJlLnJvdGF0aW9uWSA9IHBhcnNlZERhdGEuZW52aXJvbm1lbnRUZXh0dXJlUm90YXRpb25Z
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLmVudmly
b25tZW50VGV4dHVyZSA9IGN1YmVUZXh0dXJlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWREYXRhLmNyZWF0ZURlZmF1bHRTa3lib3ggPT09
IHRydWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgc2t5Ym94U2NhbGUgPSAoc2NlbmUuYWN0aXZl
Q2FtZXJhICE9PSB1bmRlZmluZWQgJiYgc2NlbmUuYWN0aXZlQ2FtZXJhICE9PSBudWxsKSA/IChz
Y2VuZS5hY3RpdmVDYW1lcmEubWF4WiAtIHNjZW5lLmFjdGl2ZUNhbWVyYS5taW5aKSAvIDIgOiAx
MDAwOworICAgICAgICAgICAgICAgIHZhciBza3lib3hCbHVyTGV2ZWwgPSBwYXJzZWREYXRhLnNr
eWJveEJsdXJMZXZlbCB8fCAwOworICAgICAgICAgICAgICAgIHNjZW5lLmNyZWF0ZURlZmF1bHRT
a3lib3goc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlLCBpc1BCUiwgc2t5Ym94U2NhbGUsIHNreWJv
eEJsdXJMZXZlbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250YWluZXIuZW52aXJv
bm1lbnRUZXh0dXJlID0gc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlOworICAgICAgICB9CisgICAg
ICAgIC8vIEVudmlyb25tZW50IEludGVuc2l0eQorICAgICAgICBpZiAocGFyc2VkRGF0YS5lbnZp
cm9ubWVudEludGVuc2l0eSAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEuZW52aXJvbm1lbnRJ
bnRlbnNpdHkgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHNjZW5lLmVudmlyb25tZW50SW50ZW5z
aXR5ID0gcGFyc2VkRGF0YS5lbnZpcm9ubWVudEludGVuc2l0eTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBMaWdodHMKKyAgICAgICAgaWYgKHBhcnNlZERhdGEubGlnaHRzICE9PSB1bmRlZmluZWQg
JiYgcGFyc2VkRGF0YS5saWdodHMgIT09IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXgg
PSAwLCBjYWNoZSA9IHBhcnNlZERhdGEubGlnaHRzLmxlbmd0aDsgaW5kZXggPCBjYWNoZTsgaW5k
ZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBwYXJzZWRMaWdodCA9IHBhcnNlZERhdGEubGln
aHRzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgbGlnaHQgPSBfTGlnaHRzX2xpZ2h0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJMaWdodCJdLlBhcnNlKHBhcnNlZExpZ2h0LCBz
Y2VuZSk7CisgICAgICAgICAgICAgICAgaWYgKGxpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRhaW5lci5saWdodHMucHVzaChsaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGxvZyAr
PSAoaW5kZXggPT09IDAgPyAiXG5cdExpZ2h0czoiIDogIiIpOworICAgICAgICAgICAgICAgICAg
ICBsb2cgKz0gIlxuXHRcdCIgKyBsaWdodC50b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFJlZmxlY3Rp
b24gcHJvYmVzCisgICAgICAgIGlmIChwYXJzZWREYXRhLnJlZmxlY3Rpb25Qcm9iZXMgIT09IHVu
ZGVmaW5lZCAmJiBwYXJzZWREYXRhLnJlZmxlY3Rpb25Qcm9iZXMgIT09IG51bGwpIHsKKyAgICAg
ICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHBhcnNlZERhdGEucmVmbGVjdGlvblByb2Jl
cy5sZW5ndGg7IGluZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
cGFyc2VkUmVmbGVjdGlvblByb2JlID0gcGFyc2VkRGF0YS5yZWZsZWN0aW9uUHJvYmVzW2luZGV4
XTsKKyAgICAgICAgICAgICAgICB2YXIgcmVmbGVjdGlvblByb2JlID0gX1Byb2Jlc19yZWZsZWN0
aW9uUHJvYmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19bIlJlZmxlY3Rpb25Qcm9iZSJd
LlBhcnNlKHBhcnNlZFJlZmxlY3Rpb25Qcm9iZSwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICAg
ICAgICAgIGlmIChyZWZsZWN0aW9uUHJvYmUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGFp
bmVyLnJlZmxlY3Rpb25Qcm9iZXMucHVzaChyZWZsZWN0aW9uUHJvYmUpOworICAgICAgICAgICAg
ICAgICAgICBsb2cgKz0gKGluZGV4ID09PSAwID8gIlxuXHRSZWZsZWN0aW9uIFByb2JlczoiIDog
IiIpOworICAgICAgICAgICAgICAgICAgICBsb2cgKz0gIlxuXHRcdCIgKyByZWZsZWN0aW9uUHJv
YmUudG9TdHJpbmcoZnVsbERldGFpbHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIGlmIChwYXJzZWRE
YXRhLmFuaW1hdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLmFuaW1hdGlvbnMgIT09
IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHBhcnNlZERhdGEu
YW5pbWF0aW9ucy5sZW5ndGg7IGluZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAgICAgICAgICAg
ICAgICB2YXIgcGFyc2VkQW5pbWF0aW9uID0gcGFyc2VkRGF0YS5hbmltYXRpb25zW2luZGV4XTsK
KyAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxDbGFzcyA9IF9NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX1siX1R5cGVTdG9yZSJdLkdldENsYXNzKCJCQUJZTE9O
LkFuaW1hdGlvbiIpOworICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbENsYXNzKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSBpbnRlcm5hbENsYXNzLlBhcnNlKHBhcnNl
ZEFuaW1hdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLmFuaW1hdGlvbnMucHVzaChh
bmltYXRpb24pOworICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYW5pbWF0aW9ucy5wdXNo
KGFuaW1hdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGxvZyArPSAoaW5kZXggPT09IDAgPyAi
XG5cdEFuaW1hdGlvbnM6IiA6ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgbG9nICs9ICJcblx0
XHQiICsgYW5pbWF0aW9uLnRvU3RyaW5nKGZ1bGxEZXRhaWxzKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gTWF0ZXJpYWxzCisgICAgICAg
IGlmIChwYXJzZWREYXRhLm1hdGVyaWFscyAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEubWF0
ZXJpYWxzICE9PSBudWxsKSB7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMCwgY2FjaGUgPSBw
YXJzZWREYXRhLm1hdGVyaWFscy5sZW5ndGg7IGluZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgICAgICB2YXIgcGFyc2VkTWF0ZXJpYWwgPSBwYXJzZWREYXRhLm1hdGVyaWFsc1tp
bmRleF07CisgICAgICAgICAgICAgICAgdmFyIG1hdCA9IF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTWF0ZXJpYWwiXS5QYXJzZShwYXJzZWRNYXRlcmlh
bCwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICAgICAgICAgIGlmIChtYXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGFpbmVyLm1hdGVyaWFscy5wdXNoKG1hdCk7CisgICAgICAgICAgICAg
ICAgICAgIGxvZyArPSAoaW5kZXggPT09IDAgPyAiXG5cdE1hdGVyaWFsczoiIDogIiIpOworICAg
ICAgICAgICAgICAgICAgICBsb2cgKz0gIlxuXHRcdCIgKyBtYXQudG9TdHJpbmcoZnVsbERldGFp
bHMpOworICAgICAgICAgICAgICAgICAgICAvLyBUZXh0dXJlcworICAgICAgICAgICAgICAgICAg
ICB2YXIgdGV4dHVyZXMgPSBtYXQuZ2V0QWN0aXZlVGV4dHVyZXMoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZXMuZm9yRWFjaChmdW5jdGlvbiAodCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbnRhaW5lci50ZXh0dXJlcy5pbmRleE9mKHQpID09IC0xKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnRleHR1cmVzLnB1c2godCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkRGF0YS5t
dWx0aU1hdGVyaWFscyAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEubXVsdGlNYXRlcmlhbHMg
IT09IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHBhcnNlZERh
dGEubXVsdGlNYXRlcmlhbHMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHBhcnNlZE11bHRpTWF0ZXJpYWwgPSBwYXJzZWREYXRhLm11bHRpTWF0
ZXJpYWxzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgbW1hdCA9IF9NYXRlcmlhbHNfbXVs
dGlNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJNdWx0aU1hdGVyaWFsIl0u
UGFyc2VNdWx0aU1hdGVyaWFsKHBhcnNlZE11bHRpTWF0ZXJpYWwsIHNjZW5lKTsKKyAgICAgICAg
ICAgICAgICBjb250YWluZXIubXVsdGlNYXRlcmlhbHMucHVzaChtbWF0KTsKKyAgICAgICAgICAg
ICAgICBsb2cgKz0gKGluZGV4ID09PSAwID8gIlxuXHRNdWx0aU1hdGVyaWFsczoiIDogIiIpOwor
ICAgICAgICAgICAgICAgIGxvZyArPSAiXG5cdFx0IiArIG1tYXQudG9TdHJpbmcoZnVsbERldGFp
bHMpOworICAgICAgICAgICAgICAgIC8vIFRleHR1cmVzCisgICAgICAgICAgICAgICAgdmFyIHRl
eHR1cmVzID0gbW1hdC5nZXRBY3RpdmVUZXh0dXJlcygpOworICAgICAgICAgICAgICAgIHRleHR1
cmVzLmZvckVhY2goZnVuY3Rpb24gKHQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRh
aW5lci50ZXh0dXJlcy5pbmRleE9mKHQpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250YWluZXIudGV4dHVyZXMucHVzaCh0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE1v
cnBoIHRhcmdldHMKKyAgICAgICAgaWYgKHBhcnNlZERhdGEubW9ycGhUYXJnZXRNYW5hZ2VycyAh
PT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEubW9ycGhUYXJnZXRNYW5hZ2VycyAhPT0gbnVsbCkg
eworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHBhcnNlZERhdGEubW9ycGhUYXJn
ZXRNYW5hZ2VyczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
bWFuYWdlckRhdGEgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgY29udGFpbmVyLm1vcnBoVGFy
Z2V0TWFuYWdlcnMucHVzaChfTW9ycGhfbW9ycGhUYXJnZXRNYW5hZ2VyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOV9fWyJNb3JwaFRhcmdldE1hbmFnZXIiXS5QYXJzZShtYW5hZ2VyRGF0YSwg
c2NlbmUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBTa2VsZXRvbnMK
KyAgICAgICAgaWYgKHBhcnNlZERhdGEuc2tlbGV0b25zICE9PSB1bmRlZmluZWQgJiYgcGFyc2Vk
RGF0YS5za2VsZXRvbnMgIT09IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAwLCBj
YWNoZSA9IHBhcnNlZERhdGEuc2tlbGV0b25zLmxlbmd0aDsgaW5kZXggPCBjYWNoZTsgaW5kZXgr
KykgeworICAgICAgICAgICAgICAgIHZhciBwYXJzZWRTa2VsZXRvbiA9IHBhcnNlZERhdGEuc2tl
bGV0b25zW2luZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBfQm9uZXNfc2tl
bGV0b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIlNrZWxldG9uIl0uUGFyc2UocGFy
c2VkU2tlbGV0b24sIHNjZW5lKTsKKyAgICAgICAgICAgICAgICBjb250YWluZXIuc2tlbGV0b25z
LnB1c2goc2tlbGV0b24pOworICAgICAgICAgICAgICAgIGxvZyArPSAoaW5kZXggPT09IDAgPyAi
XG5cdFNrZWxldG9uczoiIDogIiIpOworICAgICAgICAgICAgICAgIGxvZyArPSAiXG5cdFx0IiAr
IHNrZWxldG9uLnRvU3RyaW5nKGZ1bGxEZXRhaWxzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAvLyBHZW9tZXRyaWVzCisgICAgICAgIHZhciBnZW9tZXRyaWVzID0gcGFyc2Vk
RGF0YS5nZW9tZXRyaWVzOworICAgICAgICBpZiAoZ2VvbWV0cmllcyAhPT0gdW5kZWZpbmVkICYm
IGdlb21ldHJpZXMgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBhZGRlZEdlb21ldHJ5ID0g
bmV3IEFycmF5KCk7CisgICAgICAgICAgICAvLyBWZXJ0ZXhEYXRhCisgICAgICAgICAgICB2YXIg
dmVydGV4RGF0YSA9IGdlb21ldHJpZXMudmVydGV4RGF0YTsKKyAgICAgICAgICAgIGlmICh2ZXJ0
ZXhEYXRhICE9PSB1bmRlZmluZWQgJiYgdmVydGV4RGF0YSAhPT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHZlcnRleERhdGEubGVuZ3RoOyBpbmRleCA8
IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZWRWZXJ0ZXhE
YXRhID0gdmVydGV4RGF0YVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgIGFkZGVkR2VvbWV0
cnkucHVzaChfTWVzaGVzX2dlb21ldHJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkdl
b21ldHJ5Il0uUGFyc2UocGFyc2VkVmVydGV4RGF0YSwgc2NlbmUsIHJvb3RVcmwpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRlZEdlb21ldHJ5LmZv
ckVhY2goZnVuY3Rpb24gKGcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZykgeworICAgICAgICAg
ICAgICAgICAgICBjb250YWluZXIuZ2VvbWV0cmllcy5wdXNoKGcpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIC8vIFRyYW5zZm9ybSBub2Rl
cworICAgICAgICBpZiAocGFyc2VkRGF0YS50cmFuc2Zvcm1Ob2RlcyAhPT0gdW5kZWZpbmVkICYm
IHBhcnNlZERhdGEudHJhbnNmb3JtTm9kZXMgIT09IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAo
aW5kZXggPSAwLCBjYWNoZSA9IHBhcnNlZERhdGEudHJhbnNmb3JtTm9kZXMubGVuZ3RoOyBpbmRl
eCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcnNlZFRyYW5zZm9y
bU5vZGUgPSBwYXJzZWREYXRhLnRyYW5zZm9ybU5vZGVzW2luZGV4XTsKKyAgICAgICAgICAgICAg
ICB2YXIgbm9kZSA9IF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fWyJUcmFuc2Zvcm1Ob2RlIl0uUGFyc2UocGFyc2VkVHJhbnNmb3JtTm9kZSwgc2NlbmUs
IHJvb3RVcmwpOworICAgICAgICAgICAgICAgIGNvbnRhaW5lci50cmFuc2Zvcm1Ob2Rlcy5wdXNo
KG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE1lc2hlcworICAg
ICAgICBpZiAocGFyc2VkRGF0YS5tZXNoZXMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLm1l
c2hlcyAhPT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGNhY2hlID0gcGFy
c2VkRGF0YS5tZXNoZXMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHBhcnNlZE1lc2ggPSBwYXJzZWREYXRhLm1lc2hlc1tpbmRleF07CisgICAg
ICAgICAgICAgICAgdmFyIG1lc2ggPSBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siTWVzaCJdLlBhcnNlKHBhcnNlZE1lc2gsIHNjZW5lLCByb290VXJsKTsKKyAgICAg
ICAgICAgICAgICBjb250YWluZXIubWVzaGVzLnB1c2gobWVzaCk7CisgICAgICAgICAgICAgICAg
bG9nICs9IChpbmRleCA9PT0gMCA/ICJcblx0TWVzaGVzOiIgOiAiIik7CisgICAgICAgICAgICAg
ICAgbG9nICs9ICJcblx0XHQiICsgbWVzaC50b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2FtZXJhcworICAgICAgICBpZiAocGFyc2Vk
RGF0YS5jYW1lcmFzICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkRGF0YS5jYW1lcmFzICE9PSBudWxs
KSB7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMCwgY2FjaGUgPSBwYXJzZWREYXRhLmNhbWVy
YXMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFy
IHBhcnNlZENhbWVyYSA9IHBhcnNlZERhdGEuY2FtZXJhc1tpbmRleF07CisgICAgICAgICAgICAg
ICAgdmFyIGNhbWVyYSA9IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJDYW1lcmEiXS5QYXJzZShwYXJzZWRDYW1lcmEsIHNjZW5lKTsKKyAgICAgICAgICAgICAg
ICBjb250YWluZXIuY2FtZXJhcy5wdXNoKGNhbWVyYSk7CisgICAgICAgICAgICAgICAgbG9nICs9
IChpbmRleCA9PT0gMCA/ICJcblx0Q2FtZXJhczoiIDogIiIpOworICAgICAgICAgICAgICAgIGxv
ZyArPSAiXG5cdFx0IiArIGNhbWVyYS50b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQW5pbWF0aW9uIEdyb3VwcworICAgICAgICBpZiAo
cGFyc2VkRGF0YS5hbmltYXRpb25Hcm91cHMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLmFu
aW1hdGlvbkdyb3VwcyAhPT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGNh
Y2hlID0gcGFyc2VkRGF0YS5hbmltYXRpb25Hcm91cHMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBp
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcnNlZEFuaW1hdGlvbkdyb3VwID0gcGFy
c2VkRGF0YS5hbmltYXRpb25Hcm91cHNbaW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBhbmlt
YXRpb25Hcm91cCA9IF9BbmltYXRpb25zX2FuaW1hdGlvbkdyb3VwX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMV9fWyJBbmltYXRpb25Hcm91cCJdLlBhcnNlKHBhcnNlZEFuaW1hdGlvbkdyb3Vw
LCBzY2VuZSk7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLmFuaW1hdGlvbkdyb3Vwcy5wdXNo
KGFuaW1hdGlvbkdyb3VwKTsKKyAgICAgICAgICAgICAgICBsb2cgKz0gKGluZGV4ID09PSAwID8g
IlxuXHRBbmltYXRpb25Hcm91cHM6IiA6ICIiKTsKKyAgICAgICAgICAgICAgICBsb2cgKz0gIlxu
XHRcdCIgKyBhbmltYXRpb25Hcm91cC50b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQnJvd3NpbmcgYWxsIHRoZSBncmFwaCB0byBjb25u
ZWN0IHRoZSBkb3RzCisgICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHNjZW5lLmNhbWVy
YXMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgY2Ft
ZXJhID0gc2NlbmUuY2FtZXJhc1tpbmRleF07CisgICAgICAgICAgICBpZiAoY2FtZXJhLl93YWl0
aW5nUGFyZW50SWQpIHsKKyAgICAgICAgICAgICAgICBjYW1lcmEucGFyZW50ID0gc2NlbmUuZ2V0
TGFzdEVudHJ5QnlJRChjYW1lcmEuX3dhaXRpbmdQYXJlbnRJZCk7CisgICAgICAgICAgICAgICAg
Y2FtZXJhLl93YWl0aW5nUGFyZW50SWQgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGlu
ZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBsaWdodF8xID0gc2NlbmUu
bGlnaHRzW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChsaWdodF8xICYmIGxpZ2h0XzEuX3dhaXRp
bmdQYXJlbnRJZCkgeworICAgICAgICAgICAgICAgIGxpZ2h0XzEucGFyZW50ID0gc2NlbmUuZ2V0
TGFzdEVudHJ5QnlJRChsaWdodF8xLl93YWl0aW5nUGFyZW50SWQpOworICAgICAgICAgICAgICAg
IGxpZ2h0XzEuX3dhaXRpbmdQYXJlbnRJZCA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgLy8gQ29ubmVjdCBwYXJlbnRzICYgY2hpbGRyZW4gYW5kIHBhcnNlIGFjdGlv
bnMgYW5kIGxvZHMKKyAgICAgICAgZm9yIChpbmRleCA9IDAsIGNhY2hlID0gc2NlbmUudHJhbnNm
b3JtTm9kZXMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2
YXIgdHJhbnNmb3JtTm9kZSA9IHNjZW5lLnRyYW5zZm9ybU5vZGVzW2luZGV4XTsKKyAgICAgICAg
ICAgIGlmICh0cmFuc2Zvcm1Ob2RlLl93YWl0aW5nUGFyZW50SWQpIHsKKyAgICAgICAgICAgICAg
ICB0cmFuc2Zvcm1Ob2RlLnBhcmVudCA9IHNjZW5lLmdldExhc3RFbnRyeUJ5SUQodHJhbnNmb3Jt
Tm9kZS5fd2FpdGluZ1BhcmVudElkKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ob2RlLl93
YWl0aW5nUGFyZW50SWQgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHNjZW5lLm1lc2hlcy5sZW5ndGg7IGluZGV4IDwgY2Fj
aGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBtZXNoID0gc2NlbmUubWVzaGVzW2luZGV4
XTsKKyAgICAgICAgICAgIGlmIChtZXNoLl93YWl0aW5nUGFyZW50SWQpIHsKKyAgICAgICAgICAg
ICAgICBtZXNoLnBhcmVudCA9IHNjZW5lLmdldExhc3RFbnRyeUJ5SUQobWVzaC5fd2FpdGluZ1Bh
cmVudElkKTsKKyAgICAgICAgICAgICAgICBtZXNoLl93YWl0aW5nUGFyZW50SWQgPSBudWxsOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1lc2guX3dhaXRpbmdEYXRhLmxvZHMpIHsK
KyAgICAgICAgICAgICAgICBsb2FkRGV0YWlsTGV2ZWxzKHNjZW5lLCBtZXNoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBsaW5rIHNrZWxldG9uIHRyYW5zZm9ybSBub2Rl
cworICAgICAgICBmb3IgKGluZGV4ID0gMCwgY2FjaGUgPSBzY2VuZS5za2VsZXRvbnMubGVuZ3Ro
OyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBz
Y2VuZS5za2VsZXRvbnNbaW5kZXhdOworICAgICAgICAgICAgaWYgKHNrZWxldG9uLl9oYXNXYWl0
aW5nRGF0YSkgeworICAgICAgICAgICAgICAgIGlmIChza2VsZXRvbi5ib25lcyAhPSBudWxsKSB7
CisgICAgICAgICAgICAgICAgICAgIHNrZWxldG9uLmJvbmVzLmZvckVhY2goZnVuY3Rpb24gKGJv
bmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib25lLl93YWl0aW5nVHJhbnNmb3Jt
Tm9kZUlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmtUcmFuc2Zvcm1O
b2RlID0gc2NlbmUuZ2V0TGFzdEVudHJ5QnlJRChib25lLl93YWl0aW5nVHJhbnNmb3JtTm9kZUlk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlua1RyYW5zZm9ybU5vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9uZS5saW5rVHJhbnNmb3JtTm9kZShs
aW5rVHJhbnNmb3JtTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvbmUuX3dhaXRpbmdUcmFuc2Zvcm1Ob2RlSWQgPSBudWxs
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2tlbGV0b24uX2hhc1dhaXRpbmdEYXRh
ID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBmcmVlemUgd29y
bGQgbWF0cml4IGFwcGxpY2F0aW9uCisgICAgICAgIGZvciAoaW5kZXggPSAwLCBjYWNoZSA9IHNj
ZW5lLm1lc2hlcy5sZW5ndGg7IGluZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAgICAgICAgICAg
IHZhciBjdXJyZW50TWVzaCA9IHNjZW5lLm1lc2hlc1tpbmRleF07CisgICAgICAgICAgICBpZiAo
Y3VycmVudE1lc2guX3dhaXRpbmdEYXRhLmZyZWV6ZVdvcmxkTWF0cml4KSB7CisgICAgICAgICAg
ICAgICAgY3VycmVudE1lc2guZnJlZXplV29ybGRNYXRyaXgoKTsKKyAgICAgICAgICAgICAgICBj
dXJyZW50TWVzaC5fd2FpdGluZ0RhdGEuZnJlZXplV29ybGRNYXRyaXggPSBudWxsOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY3VycmVudE1lc2gu
Y29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIC8vIExpZ2h0cyBleGNsdXNpb25zIC8gaW5jbHVzaW9ucworICAgICAgICBmb3IgKGluZGV4
ID0gMCwgY2FjaGUgPSBzY2VuZS5saWdodHMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsr
KSB7CisgICAgICAgICAgICB2YXIgbGlnaHRfMiA9IHNjZW5lLmxpZ2h0c1tpbmRleF07CisgICAg
ICAgICAgICAvLyBFeGNsdWRlZCBjaGVjaworICAgICAgICAgICAgaWYgKGxpZ2h0XzIuX2V4Y2x1
ZGVkTWVzaGVzSWRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBleGNs
dWRlZEluZGV4ID0gMDsgZXhjbHVkZWRJbmRleCA8IGxpZ2h0XzIuX2V4Y2x1ZGVkTWVzaGVzSWRz
Lmxlbmd0aDsgZXhjbHVkZWRJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBleGNs
dWRlZE1lc2ggPSBzY2VuZS5nZXRNZXNoQnlJRChsaWdodF8yLl9leGNsdWRlZE1lc2hlc0lkc1tl
eGNsdWRlZEluZGV4XSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChleGNsdWRlZE1lc2gpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0XzIuZXhjbHVkZWRNZXNoZXMucHVzaChleGNs
dWRlZE1lc2gpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGxpZ2h0XzIuX2V4Y2x1ZGVkTWVzaGVzSWRzID0gW107CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBJbmNsdWRlZCBjaGVjaworICAgICAgICAgICAgaWYgKGxpZ2h0
XzIuX2luY2x1ZGVkT25seU1lc2hlc0lkcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaW5jbHVkZWRPbmx5SW5kZXggPSAwOyBpbmNsdWRlZE9ubHlJbmRleCA8IGxpZ2h0
XzIuX2luY2x1ZGVkT25seU1lc2hlc0lkcy5sZW5ndGg7IGluY2x1ZGVkT25seUluZGV4KyspIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGluY2x1ZGVkT25seU1lc2ggPSBzY2VuZS5nZXRNZXNo
QnlJRChsaWdodF8yLl9pbmNsdWRlZE9ubHlNZXNoZXNJZHNbaW5jbHVkZWRPbmx5SW5kZXhdKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVkT25seU1lc2gpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxpZ2h0XzIuaW5jbHVkZWRPbmx5TWVzaGVzLnB1c2goaW5jbHVkZWRPbmx5
TWVzaCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbGlnaHRfMi5faW5jbHVkZWRPbmx5TWVzaGVzSWRzID0gW107CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE1X19bIkFic3RyYWN0U2NlbmUiXS5QYXJzZShwYXJzZWREYXRhLCBzY2VuZSwgY29u
dGFpbmVyLCByb290VXJsKTsKKyAgICAgICAgLy8gQWN0aW9ucyAoc2NlbmUpIERvbmUgbGFzdCBh
cyBpdCBjYW4gYWNjZXNzIG90aGVyIG9iamVjdHMuCisgICAgICAgIGZvciAoaW5kZXggPSAwLCBj
YWNoZSA9IHNjZW5lLm1lc2hlcy5sZW5ndGg7IGluZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgIHZhciBtZXNoID0gc2NlbmUubWVzaGVzW2luZGV4XTsKKyAgICAgICAgICAgIGlm
IChtZXNoLl93YWl0aW5nRGF0YS5hY3Rpb25zKSB7CisgICAgICAgICAgICAgICAgX0FjdGlvbnNf
YWN0aW9uTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siQWN0aW9uTWFuYWdl
ciJdLlBhcnNlKG1lc2guX3dhaXRpbmdEYXRhLmFjdGlvbnMsIG1lc2gsIHNjZW5lKTsKKyAgICAg
ICAgICAgICAgICBtZXNoLl93YWl0aW5nRGF0YS5hY3Rpb25zID0gbnVsbDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkRGF0YS5hY3Rpb25zICE9PSB1bmRlZmlu
ZWQgJiYgcGFyc2VkRGF0YS5hY3Rpb25zICE9PSBudWxsKSB7CisgICAgICAgICAgICBfQWN0aW9u
c19hY3Rpb25NYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJBY3Rpb25NYW5h
Z2VyIl0uUGFyc2UocGFyc2VkRGF0YS5hY3Rpb25zLCBudWxsLCBzY2VuZSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFhZGRUb1NjZW5lKSB7CisgICAgICAgICAgICBjb250YWluZXIucmVtb3Zl
QWxsRnJvbVNjZW5lKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2ggKGVycikgeworICAg
ICAgICB2YXIgbXNnID0gbG9nT3BlcmF0aW9uKCJsb2FkQXNzZXRzIiwgcGFyc2VkRGF0YSA/IHBh
cnNlZERhdGEucHJvZHVjZXIgOiAiVW5rbm93biIpICsgbG9nOworICAgICAgICBpZiAob25FcnJv
cikgeworICAgICAgICAgICAgb25FcnJvcihtc2csIGVycik7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTG9nZ2VyIl0uTG9nKG1zZyk7CisgICAgICAgICAgICB0aHJvdyBlcnI7CisgICAgICAg
IH0KKyAgICB9CisgICAgZmluYWxseSB7CisgICAgICAgIGlmIChsb2cgIT09IG51bGwgJiYgX0xv
YWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlNjZW5lTG9h
ZGVyIl0ubG9nZ2luZ0xldmVsICE9PSBfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfX1siU2NlbmVMb2FkZXIiXS5OT19MT0dHSU5HKSB7CisgICAgICAgICAg
ICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTG9nZ2VyIl0uTG9n
KGxvZ09wZXJhdGlvbigibG9hZEFzc2V0cyIsIHBhcnNlZERhdGEgPyBwYXJzZWREYXRhLnByb2R1
Y2VyIDogIlVua25vd24iKSArIChfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTRfX1siU2NlbmVMb2FkZXIiXS5sb2dnaW5nTGV2ZWwgIT09IF9Mb2FkaW5nX3Nj
ZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJTY2VuZUxvYWRlciJdLk1J
TklNQUxfTE9HR0lORyA/IGxvZyA6ICIiKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGNvbnRhaW5lcjsKK307CitfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTRfX1siU2NlbmVMb2FkZXIiXS5SZWdpc3RlclBsdWdpbih7CisgICAgbmFtZTogImJh
Ynlsb24uanMiLAorICAgIGV4dGVuc2lvbnM6ICIuYmFieWxvbiIsCisgICAgY2FuRGlyZWN0TG9h
ZDogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgaWYgKGRhdGEuaW5kZXhPZigiYmFieWxvbiIp
ICE9PSAtMSkgeyAvLyBXZSBjb25zaWRlciB0aGF0IHRoZSBwcm9kdWNlciBzdHJpbmcgaXMgZmls
bGVkCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfSwKKyAgICBpbXBvcnRNZXNoOiBmdW5jdGlvbiAobWVzaGVzTmFtZXMsIHNj
ZW5lLCBkYXRhLCByb290VXJsLCBtZXNoZXMsIHBhcnRpY2xlU3lzdGVtcywgc2tlbGV0b25zLCBv
bkVycm9yKSB7CisgICAgICAgIC8vIEVudGlyZSBtZXRob2QgcnVubmluZyBpbiB0cnkgYmxvY2ss
IHNvIEFMV0FZUyBsb2dzIGFzIGZhciBhcyBpdCBnb3QsIG9ubHkgYWN0dWFsbHkgd3JpdGVzIGRl
dGFpbHMKKyAgICAgICAgLy8gd2hlbiBTY2VuZUxvYWRlci5kZWJ1Z0xvZ2dpbmcgPSB0cnVlIChk
ZWZhdWx0KSwgb3IgZXhjZXB0aW9uIGVuY291bnRlcmVkLgorICAgICAgICAvLyBFdmVyeXRoaW5n
IHN0b3JlZCBpbiB2YXIgbG9nIGluc3RlYWQgb2Ygd3JpdGluZyBzZXBhcmF0ZSBsaW5lcyB0byBz
dXBwb3J0IG9ubHkgd3JpdGluZyBpbiBleGNlcHRpb24sCisgICAgICAgIC8vIGFuZCBhdm9pZCBw
cm9ibGVtcyB3aXRoIG11bHRpcGxlIGNvbmN1cnJlbnQgLmJhYnlsb24gbG9hZHMuCisgICAgICAg
IHZhciBsb2cgPSAiaW1wb3J0TWVzaCBoYXMgZmFpbGVkIEpTT04gcGFyc2UiOworICAgICAgICB0
cnkgeworICAgICAgICAgICAgdmFyIHBhcnNlZERhdGEgPSBKU09OLnBhcnNlKGRhdGEpOworICAg
ICAgICAgICAgbG9nID0gIiI7CisgICAgICAgICAgICB2YXIgZnVsbERldGFpbHMgPSBfTG9hZGlu
Z19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siU2NlbmVMb2FkZXIi
XS5sb2dnaW5nTGV2ZWwgPT09IF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xNF9fWyJTY2VuZUxvYWRlciJdLkRFVEFJTEVEX0xPR0dJTkc7CisgICAgICAgICAg
ICBpZiAoIW1lc2hlc05hbWVzKSB7CisgICAgICAgICAgICAgICAgbWVzaGVzTmFtZXMgPSBudWxs
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVz
aGVzTmFtZXMpKSB7CisgICAgICAgICAgICAgICAgbWVzaGVzTmFtZXMgPSBbbWVzaGVzTmFtZXNd
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGhpZXJhcmNoeUlkcyA9IG5ldyBBcnJh
eSgpOworICAgICAgICAgICAgaWYgKHBhcnNlZERhdGEubWVzaGVzICE9PSB1bmRlZmluZWQgJiYg
cGFyc2VkRGF0YS5tZXNoZXMgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB2YXIgbG9hZGVk
U2tlbGV0b25zSWRzID0gW107CisgICAgICAgICAgICAgICAgdmFyIGxvYWRlZE1hdGVyaWFsc0lk
cyA9IFtdOworICAgICAgICAgICAgICAgIHZhciBpbmRleDsKKyAgICAgICAgICAgICAgICB2YXIg
Y2FjaGU7CisgICAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGNhY2hlID0gcGFyc2VkRGF0
YS5tZXNoZXMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBwYXJzZWRNZXNoID0gcGFyc2VkRGF0YS5tZXNoZXNbaW5kZXhdOworICAgICAg
ICAgICAgICAgICAgICBpZiAobWVzaGVzTmFtZXMgPT09IG51bGwgfHwgaXNEZXNjZW5kYW50T2Yo
cGFyc2VkTWVzaCwgbWVzaGVzTmFtZXMsIGhpZXJhcmNoeUlkcykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChtZXNoZXNOYW1lcyAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlbW92ZSBmb3VuZCBtZXNoIG5hbWUgZnJvbSBsaXN0LgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtZXNoZXNOYW1lc1ttZXNoZXNOYW1lcy5pbmRleE9m
KHBhcnNlZE1lc2gubmFtZSldOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy9HZW9tZXRyeT8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
YXJzZWRNZXNoLmdlb21ldHJ5SWQgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWRNZXNoLmdlb21ldHJ5
SWQgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2RvZXMgdGhlIGZp
bGUgY29udGFpbiBnZW9tZXRyaWVzPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
YXJzZWREYXRhLmdlb21ldHJpZXMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLmdlb21ldHJp
ZXMgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9maW5kIHRo
ZSBjb3JyZWN0IGdlb21ldHJ5IGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbImJveGVzIiwgInNwaGVyZXMiLCAiY3lsaW5kZXJzIiwgInRvcnVzZXMi
LCAiZ3JvdW5kcyIsICJwbGFuZXMiLCAidG9ydXNLbm90cyIsICJ2ZXJ0ZXhEYXRhIl0uZm9yRWFj
aChmdW5jdGlvbiAoZ2VvbWV0cnlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZm91bmQgPT09IHRydWUgfHwgIXBhcnNlZERhdGEuZ2VvbWV0cmllc1tnZW9t
ZXRyeVR5cGVdIHx8ICEoQXJyYXkuaXNBcnJheShwYXJzZWREYXRhLmdlb21ldHJpZXNbZ2VvbWV0
cnlUeXBlXSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VkRGF0YS5nZW9tZXRyaWVzW2dlb21ldHJ5VHlwZV0uZm9yRWFj
aChmdW5jdGlvbiAocGFyc2VkR2VvbWV0cnlEYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWRHZW9tZXRyeURhdGEuaWQgPT09IHBhcnNl
ZE1lc2guZ2VvbWV0cnlJZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChnZW9tZXRyeVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ2ZXJ0ZXhEYXRhIjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01lc2hl
c19nZW9tZXRyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJHZW9tZXRyeSJdLlBhcnNl
KHBhcnNlZEdlb21ldHJ5RGF0YSwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kID09PSBmYWxzZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkxvZ2dlciJdLldhcm4oIkdlb21ldHJ5IG5vdCBmb3VuZCBmb3IgbWVzaCAiICsgcGFy
c2VkTWVzaC5pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBNYXRlcmlhbCA/CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyc2VkTWVzaC5tYXRlcmlhbElkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG1hdGVyaWFsRm91bmQgPSAobG9hZGVkTWF0ZXJpYWxzSWRzLmluZGV4T2YocGFyc2VkTWVz
aC5tYXRlcmlhbElkKSAhPT0gLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
YXRlcmlhbEZvdW5kID09PSBmYWxzZSAmJiBwYXJzZWREYXRhLm11bHRpTWF0ZXJpYWxzICE9PSB1
bmRlZmluZWQgJiYgcGFyc2VkRGF0YS5tdWx0aU1hdGVyaWFscyAhPT0gbnVsbCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBtdWx0aW1hdEluZGV4ID0gMCwgbXVs
dGltYXRDYWNoZSA9IHBhcnNlZERhdGEubXVsdGlNYXRlcmlhbHMubGVuZ3RoOyBtdWx0aW1hdElu
ZGV4IDwgbXVsdGltYXRDYWNoZTsgbXVsdGltYXRJbmRleCsrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VkTXVsdGlNYXRlcmlhbCA9IHBhcnNlZERhdGEu
bXVsdGlNYXRlcmlhbHNbbXVsdGltYXRJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocGFyc2VkTXVsdGlNYXRlcmlhbC5pZCA9PT0gcGFyc2VkTWVzaC5tYXRl
cmlhbElkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgbWF0SW5kZXggPSAwLCBtYXRDYWNoZSA9IHBhcnNlZE11bHRpTWF0ZXJpYWwubWF0ZXJpYWxz
Lmxlbmd0aDsgbWF0SW5kZXggPCBtYXRDYWNoZTsgbWF0SW5kZXgrKykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViTWF0SWQgPSBwYXJzZWRNdWx0
aU1hdGVyaWFsLm1hdGVyaWFsc1ttYXRJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvYWRlZE1hdGVyaWFsc0lkcy5wdXNoKHN1Yk1hdElkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdCA9IHBhcnNl
TWF0ZXJpYWxCeUlkKHN1Yk1hdElkLCBwYXJzZWREYXRhLCBzY2VuZSwgcm9vdFVybCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyArPSAiXG5cdE1h
dGVyaWFsICIgKyBtYXQudG9TdHJpbmcoZnVsbERldGFpbHMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
YWRlZE1hdGVyaWFsc0lkcy5wdXNoKHBhcnNlZE11bHRpTWF0ZXJpYWwuaWQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtbWF0ID0gX01hdGVyaWFsc19tdWx0
aU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIk11bHRpTWF0ZXJpYWwiXS5Q
YXJzZU11bHRpTWF0ZXJpYWwocGFyc2VkTXVsdGlNYXRlcmlhbCwgc2NlbmUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtbWF0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsRm91bmQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cgKz0gIlxuXHRNdWx0
aS1NYXRlcmlhbCAiICsgbW1hdC50b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbEZvdW5k
ID09PSBmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRNYXRl
cmlhbHNJZHMucHVzaChwYXJzZWRNZXNoLm1hdGVyaWFsSWQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgbWF0ID0gcGFyc2VNYXRlcmlhbEJ5SWQocGFyc2VkTWVzaC5tYXRl
cmlhbElkLCBwYXJzZWREYXRhLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghbWF0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTG9nZ2VyIl0u
V2FybigiTWF0ZXJpYWwgbm90IGZvdW5kIGZvciBtZXNoICIgKyBwYXJzZWRNZXNoLmlkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyAr
PSAiXG5cdE1hdGVyaWFsICIgKyBtYXQudG9TdHJpbmcoZnVsbERldGFpbHMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2tl
bGV0b24gPworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZE1lc2guc2tlbGV0b25J
ZCA+IC0xICYmIHBhcnNlZERhdGEuc2tlbGV0b25zICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkRGF0
YS5za2VsZXRvbnMgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
c2tlbGV0b25BbHJlYWR5TG9hZGVkID0gKGxvYWRlZFNrZWxldG9uc0lkcy5pbmRleE9mKHBhcnNl
ZE1lc2guc2tlbGV0b25JZCkgPiAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHNrZWxldG9uQWxyZWFkeUxvYWRlZCA9PT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh2YXIgc2tlbGV0b25JbmRleCA9IDAsIHNrZWxldG9uQ2FjaGUgPSBw
YXJzZWREYXRhLnNrZWxldG9ucy5sZW5ndGg7IHNrZWxldG9uSW5kZXggPCBza2VsZXRvbkNhY2hl
OyBza2VsZXRvbkluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBwYXJzZWRTa2VsZXRvbiA9IHBhcnNlZERhdGEuc2tlbGV0b25zW3NrZWxldG9uSW5kZXhd
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFNrZWxldG9u
LmlkID09PSBwYXJzZWRNZXNoLnNrZWxldG9uSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBfQm9uZXNfc2tlbGV0b25fX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE4X19bIlNrZWxldG9uIl0uUGFyc2UocGFyc2VkU2tlbGV0b24sIHNj
ZW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2VsZXRvbnMu
cHVzaChza2VsZXRvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9hZGVkU2tlbGV0b25zSWRzLnB1c2gocGFyc2VkU2tlbGV0b24uaWQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyArPSAiXG5cdFNrZWxldG9uICIgKyBza2Vs
ZXRvbi50b1N0cmluZyhmdWxsRGV0YWlscyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBNb3JwaCB0YXJnZXRzID8KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYXJzZWREYXRhLm1vcnBoVGFyZ2V0TWFuYWdlcnMgIT09IHVuZGVmaW5lZCAmJiBwYXJz
ZWREYXRhLm1vcnBoVGFyZ2V0TWFuYWdlcnMgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gcGFyc2VkRGF0YS5tb3JwaFRhcmdldE1h
bmFnZXJzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgbWFuYWdlckRhdGEgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Nb3JwaF9tb3JwaFRhcmdldE1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE5X19bIk1vcnBoVGFyZ2V0TWFuYWdlciJdLlBhcnNlKG1hbmFnZXJEYXRhLCBzY2VuZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBfTWVzaGVzX21lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWVzaCJdLlBhcnNlKHBhcnNlZE1lc2gsIHNjZW5lLCBy
b290VXJsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc2hlcy5wdXNoKG1lc2gpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbG9nICs9ICJcblx0TWVzaCAiICsgbWVzaC50b1N0cmluZyhm
dWxsRGV0YWlscyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgLy8gQ29ubmVjdGluZyBwYXJlbnRzIGFuZCBsb2RzCisgICAgICAgICAg
ICAgICAgdmFyIGN1cnJlbnRNZXNoOworICAgICAgICAgICAgICAgIGZvciAoaW5kZXggPSAwLCBj
YWNoZSA9IHNjZW5lLm1lc2hlcy5sZW5ndGg7IGluZGV4IDwgY2FjaGU7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgY3VycmVudE1lc2ggPSBzY2VuZS5tZXNoZXNbaW5kZXhdOworICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE1lc2guX3dhaXRpbmdQYXJlbnRJZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudE1lc2gucGFyZW50ID0gc2NlbmUuZ2V0TGFzdEVu
dHJ5QnlJRChjdXJyZW50TWVzaC5fd2FpdGluZ1BhcmVudElkKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRNZXNoLl93YWl0aW5nUGFyZW50SWQgPSBudWxsOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TWVzaC5fd2FpdGluZ0Rh
dGEubG9kcykgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9hZERldGFpbExldmVscyhzY2Vu
ZSwgY3VycmVudE1lc2gpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIC8vIGxpbmsgc2tlbGV0b24gdHJhbnNmb3JtIG5vZGVzCisgICAg
ICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGNhY2hlID0gc2NlbmUuc2tlbGV0b25zLmxlbmd0
aDsgaW5kZXggPCBjYWNoZTsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgc2tl
bGV0b24gPSBzY2VuZS5za2VsZXRvbnNbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAo
c2tlbGV0b24uX2hhc1dhaXRpbmdEYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c2tlbGV0b24uYm9uZXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNr
ZWxldG9uLmJvbmVzLmZvckVhY2goZnVuY3Rpb24gKGJvbmUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGJvbmUuX3dhaXRpbmdUcmFuc2Zvcm1Ob2RlSWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rVHJhbnNmb3JtTm9kZSA9IHNj
ZW5lLmdldExhc3RFbnRyeUJ5SUQoYm9uZS5fd2FpdGluZ1RyYW5zZm9ybU5vZGVJZCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlua1RyYW5zZm9ybU5vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib25lLmxpbmtUcmFuc2Zv
cm1Ob2RlKGxpbmtUcmFuc2Zvcm1Ob2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvbmUuX3dhaXRp
bmdUcmFuc2Zvcm1Ob2RlSWQgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBza2VsZXRvbi5faGFzV2FpdGluZ0RhdGEg
PSBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIC8vIGZyZWV6ZSBhbmQgY29tcHV0ZSB3b3JsZCBtYXRyaXggYXBwbGljYXRpb24K
KyAgICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMCwgY2FjaGUgPSBzY2VuZS5tZXNoZXMubGVu
Z3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRNZXNoID0gc2NlbmUubWVzaGVzW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnRNZXNoLl93YWl0aW5nRGF0YS5mcmVlemVXb3JsZE1hdHJpeCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudE1lc2guZnJlZXplV29ybGRNYXRyaXgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRNZXNoLl93YWl0aW5nRGF0YS5mcmVlemVXb3JsZE1hdHJpeCA9
IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWVzaC5jb21wdXRlV29ybGRNYXRyaXgo
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBQYXJ0aWNsZXMKKyAgICAgICAgICAgIGlmIChwYXJzZWRE
YXRhLnBhcnRpY2xlU3lzdGVtcyAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEucGFydGljbGVT
eXN0ZW1zICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IF9hYnN0cmFj
dFNjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJBYnN0cmFjdFNjZW5lIl0uR2V0
SW5kaXZpZHVhbFBhcnNlcihfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzEzX19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uTkFNRV9QQVJUSUNMRVNZU1RFTSk7Cisg
ICAgICAgICAgICAgICAgaWYgKHBhcnNlcikgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
ZGV4ID0gMCwgY2FjaGUgPSBwYXJzZWREYXRhLnBhcnRpY2xlU3lzdGVtcy5sZW5ndGg7IGluZGV4
IDwgY2FjaGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZWRQ
YXJ0aWNsZVN5c3RlbSA9IHBhcnNlZERhdGEucGFydGljbGVTeXN0ZW1zW2luZGV4XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChoaWVyYXJjaHlJZHMuaW5kZXhPZihwYXJzZWRQYXJ0aWNs
ZVN5c3RlbS5lbWl0dGVySWQpICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcnRpY2xlU3lzdGVtcy5wdXNoKHBhcnNlcihwYXJzZWRQYXJ0aWNsZVN5c3RlbSwgc2NlbmUs
IHJvb3RVcmwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAgIHZh
ciBtc2cgPSBsb2dPcGVyYXRpb24oImltcG9ydE1lc2giLCBwYXJzZWREYXRhID8gcGFyc2VkRGF0
YS5wcm9kdWNlciA6ICJVbmtub3duIikgKyBsb2c7CisgICAgICAgICAgICBpZiAob25FcnJvcikg
eworICAgICAgICAgICAgICAgIG9uRXJyb3IobXNnLCBlcnIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLkxvZyhtc2cpOworICAgICAgICAgICAgICAgIHRo
cm93IGVycjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmaW5hbGx5IHsKKyAg
ICAgICAgICAgIGlmIChsb2cgIT09IG51bGwgJiYgX0xvYWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlNjZW5lTG9hZGVyIl0ubG9nZ2luZ0xldmVsICE9PSBf
TG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siU2NlbmVM
b2FkZXIiXS5OT19MT0dHSU5HKSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLkxvZyhsb2dPcGVyYXRpb24oImltcG9y
dE1lc2giLCBwYXJzZWREYXRhID8gcGFyc2VkRGF0YS5wcm9kdWNlciA6ICJVbmtub3duIikgKyAo
X0xvYWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlNjZW5l
TG9hZGVyIl0ubG9nZ2luZ0xldmVsICE9PSBfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTRfX1siU2NlbmVMb2FkZXIiXS5NSU5JTUFMX0xPR0dJTkcgPyBsb2cg
OiAiIikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9LAorICAgIGxvYWQ6IGZ1bmN0aW9uIChzY2VuZSwgZGF0YSwgcm9vdFVybCwgb25FcnJv
cikgeworICAgICAgICAvLyBFbnRpcmUgbWV0aG9kIHJ1bm5pbmcgaW4gdHJ5IGJsb2NrLCBzbyBB
TFdBWVMgbG9ncyBhcyBmYXIgYXMgaXQgZ290LCBvbmx5IGFjdHVhbGx5IHdyaXRlcyBkZXRhaWxz
CisgICAgICAgIC8vIHdoZW4gU2NlbmVMb2FkZXIuZGVidWdMb2dnaW5nID0gdHJ1ZSAoZGVmYXVs
dCksIG9yIGV4Y2VwdGlvbiBlbmNvdW50ZXJlZC4KKyAgICAgICAgLy8gRXZlcnl0aGluZyBzdG9y
ZWQgaW4gdmFyIGxvZyBpbnN0ZWFkIG9mIHdyaXRpbmcgc2VwYXJhdGUgbGluZXMgdG8gc3VwcG9y
dCBvbmx5IHdyaXRpbmcgaW4gZXhjZXB0aW9uLAorICAgICAgICAvLyBhbmQgYXZvaWQgcHJvYmxl
bXMgd2l0aCBtdWx0aXBsZSBjb25jdXJyZW50IC5iYWJ5bG9uIGxvYWRzLgorICAgICAgICB2YXIg
bG9nID0gImltcG9ydFNjZW5lIGhhcyBmYWlsZWQgSlNPTiBwYXJzZSI7CisgICAgICAgIHRyeSB7
CisgICAgICAgICAgICB2YXIgcGFyc2VkRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7CisgICAgICAg
ICAgICBsb2cgPSAiIjsKKyAgICAgICAgICAgIC8vIFNjZW5lCisgICAgICAgICAgICBpZiAocGFy
c2VkRGF0YS51c2VEZWxheWVkVGV4dHVyZUxvYWRpbmcgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWRE
YXRhLnVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZyAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAg
IHNjZW5lLnVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZyA9IHBhcnNlZERhdGEudXNlRGVsYXllZFRl
eHR1cmVMb2FkaW5nICYmICFfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTRfX1siU2NlbmVMb2FkZXIiXS5Gb3JjZUZ1bGxTY2VuZUxvYWRpbmdGb3JJbmNyZW1l
bnRhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWREYXRhLmF1dG9DbGVh
ciAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEuYXV0b0NsZWFyICE9PSBudWxsKSB7CisgICAg
ICAgICAgICAgICAgc2NlbmUuYXV0b0NsZWFyID0gcGFyc2VkRGF0YS5hdXRvQ2xlYXI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFyc2VkRGF0YS5jbGVhckNvbG9yICE9PSB1bmRl
ZmluZWQgJiYgcGFyc2VkRGF0YS5jbGVhckNvbG9yICE9PSBudWxsKSB7CisgICAgICAgICAgICAg
ICAgc2NlbmUuY2xlYXJDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkNvbG9yNCJdLkZyb21BcnJheShwYXJzZWREYXRhLmNsZWFyQ29sb3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZERhdGEuYW1iaWVudENvbG9yICE9
PSB1bmRlZmluZWQgJiYgcGFyc2VkRGF0YS5hbWJpZW50Q29sb3IgIT09IG51bGwpIHsKKyAgICAg
ICAgICAgICAgICBzY2VuZS5hbWJpZW50Q29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb2xvcjMiXS5Gcm9tQXJyYXkocGFyc2VkRGF0YS5hbWJp
ZW50Q29sb3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZERhdGEuZ3Jh
dml0eSAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZERhdGEuZ3Jhdml0eSAhPT0gbnVsbCkgeworICAg
ICAgICAgICAgICAgIHNjZW5lLmdyYXZpdHkgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLkZyb21BcnJheShwYXJzZWREYXRhLmdyYXZp
dHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRm9nCisgICAgICAgICAgICBpZiAo
cGFyc2VkRGF0YS5mb2dNb2RlICYmIHBhcnNlZERhdGEuZm9nTW9kZSAhPT0gMCkgeworICAgICAg
ICAgICAgICAgIHNjZW5lLmZvZ01vZGUgPSBwYXJzZWREYXRhLmZvZ01vZGU7CisgICAgICAgICAg
ICAgICAgc2NlbmUuZm9nQ29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJDb2xvcjMiXS5Gcm9tQXJyYXkocGFyc2VkRGF0YS5mb2dDb2xvcik7Cisg
ICAgICAgICAgICAgICAgc2NlbmUuZm9nU3RhcnQgPSBwYXJzZWREYXRhLmZvZ1N0YXJ0OworICAg
ICAgICAgICAgICAgIHNjZW5lLmZvZ0VuZCA9IHBhcnNlZERhdGEuZm9nRW5kOworICAgICAgICAg
ICAgICAgIHNjZW5lLmZvZ0RlbnNpdHkgPSBwYXJzZWREYXRhLmZvZ0RlbnNpdHk7CisgICAgICAg
ICAgICAgICAgbG9nICs9ICJcdEZvZyBtb2RlIGZvciBzY2VuZTogICI7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChzY2VuZS5mb2dNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGdldHRl
cnMgbm90IGNvbXBpbGluZywgc28gdXNpbmcgaGFyZGNvZGVkCisgICAgICAgICAgICAgICAgICAg
IGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZyArPSAiZXhwXG4iOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvZyArPSAiZXhwMlxuIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAg
ICAgICAgICAgICBsb2cgKz0gImxpbmVhclxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vUGh5
c2ljcworICAgICAgICAgICAgaWYgKHBhcnNlZERhdGEucGh5c2ljc0VuYWJsZWQpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgcGh5c2ljc1BsdWdpbjsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2Vk
RGF0YS5waHlzaWNzRW5naW5lID09PSAiY2Fubm9uIikgeworICAgICAgICAgICAgICAgICAgICBw
aHlzaWNzUGx1Z2luID0gbmV3IF9QaHlzaWNzX1BsdWdpbnNfY2Fubm9uSlNQbHVnaW5fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkNhbm5vbkpTUGx1Z2luIl0oKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyc2VkRGF0YS5waHlzaWNzRW5naW5l
ID09PSAib2ltbyIpIHsKKyAgICAgICAgICAgICAgICAgICAgcGh5c2ljc1BsdWdpbiA9IG5ldyBf
UGh5c2ljc19QbHVnaW5zX29pbW9KU1BsdWdpbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFf
X1siT2ltb0pTUGx1Z2luIl0oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAocGFyc2VkRGF0YS5waHlzaWNzRW5naW5lID09PSAiYW1tbyIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcGh5c2ljc1BsdWdpbiA9IG5ldyBfUGh5c2ljc19QbHVnaW5zX2FtbW9KU1Bs
dWdpbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQW1tb0pTUGx1Z2luIl0oKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbG9nID0gIlx0UGh5c2ljcyBlbmdpbmUg
IiArIChwYXJzZWREYXRhLnBoeXNpY3NFbmdpbmUgPyBwYXJzZWREYXRhLnBoeXNpY3NFbmdpbmUg
OiAib2ltbyIpICsgIiBlbmFibGVkXG4iOworICAgICAgICAgICAgICAgIC8vZWxzZSAtIGRlZmF1
bHQgZW5naW5lLCB3aGljaCBpcyBjdXJyZW50bHkgb2ltbworICAgICAgICAgICAgICAgIHZhciBw
aHlzaWNzR3Jhdml0eSA9IHBhcnNlZERhdGEucGh5c2ljc0dyYXZpdHkgPyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLkZyb21BcnJheShw
YXJzZWREYXRhLnBoeXNpY3NHcmF2aXR5KSA6IG51bGw7CisgICAgICAgICAgICAgICAgc2NlbmUu
ZW5hYmxlUGh5c2ljcyhwaHlzaWNzR3Jhdml0eSwgcGh5c2ljc1BsdWdpbik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBNZXRhZGF0YQorICAgICAgICAgICAgaWYgKHBhcnNlZERhdGEu
bWV0YWRhdGEgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLm1ldGFkYXRhICE9PSBudWxsKSB7
CisgICAgICAgICAgICAgICAgc2NlbmUubWV0YWRhdGEgPSBwYXJzZWREYXRhLm1ldGFkYXRhOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy9jb2xsaXNpb25zLCBpZiBkZWZpbmVkLiBvdGhl
cndpc2UsIGRlZmF1bHQgaXMgdHJ1ZQorICAgICAgICAgICAgaWYgKHBhcnNlZERhdGEuY29sbGlz
aW9uc0VuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLmNvbGxpc2lvbnNFbmFibGVk
ICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2NlbmUuY29sbGlzaW9uc0VuYWJsZWQgPSBw
YXJzZWREYXRhLmNvbGxpc2lvbnNFbmFibGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIGNvbnRhaW5lciA9IGxvYWRBc3NldENvbnRhaW5lcihzY2VuZSwgZGF0YSwgcm9vdFVybCwg
b25FcnJvciwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoIWNvbnRhaW5lcikgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJz
ZWREYXRhLmF1dG9BbmltYXRlKSB7CisgICAgICAgICAgICAgICAgc2NlbmUuYmVnaW5BbmltYXRp
b24oc2NlbmUsIHBhcnNlZERhdGEuYXV0b0FuaW1hdGVGcm9tLCBwYXJzZWREYXRhLmF1dG9Bbmlt
YXRlVG8sIHBhcnNlZERhdGEuYXV0b0FuaW1hdGVMb29wLCBwYXJzZWREYXRhLmF1dG9BbmltYXRl
U3BlZWQgfHwgMS4wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWREYXRh
LmFjdGl2ZUNhbWVyYUlEICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkRGF0YS5hY3RpdmVDYW1lcmFJ
RCAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNjZW5lLnNldEFjdGl2ZUNhbWVyYUJ5SUQo
cGFyc2VkRGF0YS5hY3RpdmVDYW1lcmFJRCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBFbnZpcm9ubWVudCB0ZXh0dXJlCisgICAgICAgICAgICBpZiAocGFyc2VkRGF0YS5lbnZpcm9u
bWVudFRleHR1cmUgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLmVudmlyb25tZW50VGV4dHVy
ZSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFBCUiBuZWVkZWQgZm9yIGJvdGggSERS
IHRleHR1cmUgKGdhbW1hIHNwYWNlKSAmIGEgc2t5IGJveAorICAgICAgICAgICAgICAgIHZhciBp
c1BCUiA9IHBhcnNlZERhdGEuaXNQQlIgIT09IHVuZGVmaW5lZCA/IHBhcnNlZERhdGEuaXNQQlIg
OiB0cnVlOworICAgICAgICAgICAgICAgIGlmIChwYXJzZWREYXRhLmVudmlyb25tZW50VGV4dHVy
ZVR5cGUgJiYgcGFyc2VkRGF0YS5lbnZpcm9ubWVudFRleHR1cmVUeXBlID09PSAiQkFCWUxPTi5I
RFJDdWJlVGV4dHVyZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGhkclNpemUgPSAocGFy
c2VkRGF0YS5lbnZpcm9ubWVudFRleHR1cmVTaXplKSA/IHBhcnNlZERhdGEuZW52aXJvbm1lbnRU
ZXh0dXJlU2l6ZSA6IDEyODsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGhkclRleHR1cmUgPSBu
ZXcgX01hdGVyaWFsc19UZXh0dXJlc19oZHJDdWJlVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTBfX1siSERSQ3ViZVRleHR1cmUiXShyb290VXJsICsgcGFyc2VkRGF0YS5lbnZpcm9u
bWVudFRleHR1cmUsIHNjZW5lLCBoZHJTaXplLCB0cnVlLCAhaXNQQlIpOworICAgICAgICAgICAg
ICAgICAgICBpZiAocGFyc2VkRGF0YS5lbnZpcm9ubWVudFRleHR1cmVSb3RhdGlvblkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhkclRleHR1cmUucm90YXRpb25ZID0gcGFyc2VkRGF0YS5l
bnZpcm9ubWVudFRleHR1cmVSb3RhdGlvblk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlID0gaGRyVGV4dHVyZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChfTWlzY19zdHJpbmdUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX1si
U3RyaW5nVG9vbHMiXS5FbmRzV2l0aChwYXJzZWREYXRhLmVudmlyb25tZW50VGV4dHVyZSwgIi5l
bnYiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXByZXNzZWRUZXh0dXJlID0g
bmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfY3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siQ3ViZVRleHR1cmUiXShyb290VXJsICsgcGFyc2VkRGF0YS5lbnZpcm9ubWVudFRl
eHR1cmUsIHNjZW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWREYXRhLmVu
dmlyb25tZW50VGV4dHVyZVJvdGF0aW9uWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbXByZXNzZWRUZXh0dXJlLnJvdGF0aW9uWSA9IHBhcnNlZERhdGEuZW52aXJvbm1lbnRUZXh0
dXJlUm90YXRpb25ZOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlID0gY29tcHJlc3NlZFRleHR1cmU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgY3ViZVRleHR1cmUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX2N1
YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkN1YmVUZXh0dXJlIl0uQ3Jl
YXRlRnJvbVByZWZpbHRlcmVkRGF0YShyb290VXJsICsgcGFyc2VkRGF0YS5lbnZpcm9ubWVudFRl
eHR1cmUsIHNjZW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWREYXRhLmVu
dmlyb25tZW50VGV4dHVyZVJvdGF0aW9uWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGN1YmVUZXh0dXJlLnJvdGF0aW9uWSA9IHBhcnNlZERhdGEuZW52aXJvbm1lbnRUZXh0dXJlUm90
YXRpb25ZOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlID0gY3ViZVRleHR1cmU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZERh
dGEuY3JlYXRlRGVmYXVsdFNreWJveCA9PT0gdHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgc2t5Ym94U2NhbGUgPSAoc2NlbmUuYWN0aXZlQ2FtZXJhICE9PSB1bmRlZmluZWQgJiYgc2Nl
bmUuYWN0aXZlQ2FtZXJhICE9PSBudWxsKSA/IChzY2VuZS5hY3RpdmVDYW1lcmEubWF4WiAtIHNj
ZW5lLmFjdGl2ZUNhbWVyYS5taW5aKSAvIDIgOiAxMDAwOworICAgICAgICAgICAgICAgICAgICB2
YXIgc2t5Ym94Qmx1ckxldmVsID0gcGFyc2VkRGF0YS5za3lib3hCbHVyTGV2ZWwgfHwgMDsKKyAg
ICAgICAgICAgICAgICAgICAgc2NlbmUuY3JlYXRlRGVmYXVsdFNreWJveChzY2VuZS5lbnZpcm9u
bWVudFRleHR1cmUsIGlzUEJSLCBza3lib3hTY2FsZSwgc2t5Ym94Qmx1ckxldmVsKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGaW5pc2gKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChlcnIpIHsKKyAg
ICAgICAgICAgIHZhciBtc2cgPSBsb2dPcGVyYXRpb24oImltcG9ydFNjZW5lIiwgcGFyc2VkRGF0
YSA/IHBhcnNlZERhdGEucHJvZHVjZXIgOiAiVW5rbm93biIpICsgbG9nOworICAgICAgICAgICAg
aWYgKG9uRXJyb3IpIHsKKyAgICAgICAgICAgICAgICBvbkVycm9yKG1zZywgZXJyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMb2dnZXIiXS5Mb2cobXNnKTsKKyAgICAg
ICAgICAgICAgICB0aHJvdyBlcnI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZmluYWxseSB7CisgICAgICAgICAgICBpZiAobG9nICE9PSBudWxsICYmIF9Mb2FkaW5nX3NjZW5l
TG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJTY2VuZUxvYWRlciJdLmxvZ2dp
bmdMZXZlbCAhPT0gX0xvYWRpbmdfc2NlbmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE0X19bIlNjZW5lTG9hZGVyIl0uTk9fTE9HR0lORykgeworICAgICAgICAgICAgICAgIF9NaXNj
X2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMb2dnZXIiXS5Mb2cobG9nT3Bl
cmF0aW9uKCJpbXBvcnRTY2VuZSIsIHBhcnNlZERhdGEgPyBwYXJzZWREYXRhLnByb2R1Y2VyIDog
IlVua25vd24iKSArIChfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTRfX1siU2NlbmVMb2FkZXIiXS5sb2dnaW5nTGV2ZWwgIT09IF9Mb2FkaW5nX3NjZW5lTG9h
ZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJTY2VuZUxvYWRlciJdLk1JTklNQUxf
TE9HR0lORyA/IGxvZyA6ICIiKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0sCisgICAgbG9hZEFzc2V0Q29udGFpbmVyOiBmdW5jdGlvbiAo
c2NlbmUsIGRhdGEsIHJvb3RVcmwsIG9uRXJyb3IpIHsKKyAgICAgICAgdmFyIGNvbnRhaW5lciA9
IGxvYWRBc3NldENvbnRhaW5lcihzY2VuZSwgZGF0YSwgcm9vdFVybCwgb25FcnJvcik7CisgICAg
ICAgIHJldHVybiBjb250YWluZXI7CisgICAgfQorfSk7CisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL0xvYWRpbmcvUGx1Z2lucy9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9Mb2FkaW5nL1BsdWdpbnMvaW5kZXgudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBfQmFieWxvbkxvYWRlclJlZ2lzdGVyZWQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJ5bG9uRmlsZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9iYWJ5bG9uRmlsZUxvYWRlciAq
LyAiLi9Mb2FkaW5nL1BsdWdpbnMvYmFieWxvbkZpbGVMb2FkZXIudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiX0JhYnlsb25Mb2FkZXJSZWdpc3RlcmVkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYmFi
eWxvbkZpbGVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX0JhYnlsb25Mb2Fk
ZXJSZWdpc3RlcmVkIl07IH0pOworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTG9hZGlu
Zy9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TG9hZGluZy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBEZWZhdWx0TG9hZGluZ1NjcmVlbiwgU2NlbmVMb2FkZXJQcm9n
cmVzc0V2ZW50LCBTY2VuZUxvYWRlciwgU2NlbmVMb2FkZXJGbGFncywgX0JhYnlsb25Mb2FkZXJS
ZWdpc3RlcmVkICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bG9hZGluZ1NjcmVlbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9sb2FkaW5nU2NyZWVuICovICIuL0xvYWRpbmcvbG9hZGluZ1NjcmVlbi50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJEZWZhdWx0TG9hZGluZ1NjcmVlbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2xvYWRpbmdTY3JlZW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRGVm
YXVsdExvYWRpbmdTY3JlZW4iXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUGx1
Z2luc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9QbHVnaW5zL2luZGV4ICovICIuL0xvYWRpbmcvUGx1Z2lucy9pbmRleC50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJfQmFieWxvbkxvYWRlclJlZ2lzdGVyZWQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9QbHVnaW5zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIl9C
YWJ5bG9uTG9hZGVyUmVnaXN0ZXJlZCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9zY2VuZUxvYWRlciAqLyAiLi9Mb2FkaW5nL3NjZW5lTG9hZGVyLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNjZW5l
TG9hZGVyUHJvZ3Jlc3NFdmVudCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY2VuZUxvYWRl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlNjZW5lTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vc2NlbmVMb2FkZXJGbGFncyAqLyAiLi9Mb2FkaW5nL3NjZW5lTG9h
ZGVyRmxhZ3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVMb2FkZXJGbGFncyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siU2NlbmVMb2FkZXJGbGFncyJdOyB9KTsKKworCisKKworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL0xvYWRpbmcvbG9hZGluZ1NjcmVlbi50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Mb2FkaW5nL2xvYWRpbmdTY3JlZW4udHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBEZWZhdWx0TG9hZGluZ1NjcmVlbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJEZWZhdWx0TG9hZGluZ1NjcmVlbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
RGVmYXVsdExvYWRpbmdTY3JlZW47IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMiKTsKKwor
LyoqCisgKiBDbGFzcyB1c2VkIGZvciB0aGUgZGVmYXVsdCBsb2FkaW5nIHNjcmVlbgorICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2NyZWF0aW5nX2FfY3VzdG9tX2xvYWRp
bmdfc2NyZWVuCisgKi8KK3ZhciBEZWZhdWx0TG9hZGluZ1NjcmVlbiA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGRlZmF1bHQgbG9h
ZGluZyBzY3JlZW4KKyAgICAgKiBAcGFyYW0gX3JlbmRlcmluZ0NhbnZhcyBkZWZpbmVzIHRoZSBj
YW52YXMgdXNlZCB0byByZW5kZXIgdGhlIHNjZW5lCisgICAgICogQHBhcmFtIF9sb2FkaW5nVGV4
dCBkZWZpbmVzIHRoZSBkZWZhdWx0IHRleHQgdG8gZGlzcGxheQorICAgICAqIEBwYXJhbSBfbG9h
ZGluZ0RpdkJhY2tncm91bmRDb2xvciBkZWZpbmVzIHRoZSBkZWZhdWx0IGJhY2tncm91bmQgY29s
b3IKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBEZWZhdWx0TG9hZGluZ1NjcmVlbihfcmVuZGVyaW5n
Q2FudmFzLCBfbG9hZGluZ1RleHQsIF9sb2FkaW5nRGl2QmFja2dyb3VuZENvbG9yKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChfbG9hZGluZ1RleHQgPT09IHZvaWQg
MCkgeyBfbG9hZGluZ1RleHQgPSAiIjsgfQorICAgICAgICBpZiAoX2xvYWRpbmdEaXZCYWNrZ3Jv
dW5kQ29sb3IgPT09IHZvaWQgMCkgeyBfbG9hZGluZ0RpdkJhY2tncm91bmRDb2xvciA9ICJibGFj
ayI7IH0KKyAgICAgICAgdGhpcy5fcmVuZGVyaW5nQ2FudmFzID0gX3JlbmRlcmluZ0NhbnZhczsK
KyAgICAgICAgdGhpcy5fbG9hZGluZ1RleHQgPSBfbG9hZGluZ1RleHQ7CisgICAgICAgIHRoaXMu
X2xvYWRpbmdEaXZCYWNrZ3JvdW5kQ29sb3IgPSBfbG9hZGluZ0RpdkJhY2tncm91bmRDb2xvcjsK
KyAgICAgICAgLy8gUmVzaXplCisgICAgICAgIHRoaXMuX3Jlc2l6ZUxvYWRpbmdVSSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBjYW52YXNSZWN0ID0gX3RoaXMuX3JlbmRlcmluZ0Nh
bnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgICAgIHZhciBjYW52YXNQb3Np
dGlvbmluZyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKF90aGlzLl9yZW5kZXJpbmdDYW52YXMp
LnBvc2l0aW9uOworICAgICAgICAgICAgaWYgKCFfdGhpcy5fbG9hZGluZ0RpdikgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl9sb2Fk
aW5nRGl2LnN0eWxlLnBvc2l0aW9uID0gKGNhbnZhc1Bvc2l0aW9uaW5nID09PSAiZml4ZWQiKSA/
ICJmaXhlZCIgOiAiYWJzb2x1dGUiOworICAgICAgICAgICAgX3RoaXMuX2xvYWRpbmdEaXYuc3R5
bGUubGVmdCA9IGNhbnZhc1JlY3QubGVmdCArICJweCI7CisgICAgICAgICAgICBfdGhpcy5fbG9h
ZGluZ0Rpdi5zdHlsZS50b3AgPSBjYW52YXNSZWN0LnRvcCArICJweCI7CisgICAgICAgICAgICBf
dGhpcy5fbG9hZGluZ0Rpdi5zdHlsZS53aWR0aCA9IGNhbnZhc1JlY3Qud2lkdGggKyAicHgiOwor
ICAgICAgICAgICAgX3RoaXMuX2xvYWRpbmdEaXYuc3R5bGUuaGVpZ2h0ID0gY2FudmFzUmVjdC5o
ZWlnaHQgKyAicHgiOworICAgICAgICB9OworICAgIH0KKyAgICAvKioKKyAgICAgKiBGdW5jdGlv
biBjYWxsZWQgdG8gZGlzcGxheSB0aGUgbG9hZGluZyBzY3JlZW4KKyAgICAgKi8KKyAgICBEZWZh
dWx0TG9hZGluZ1NjcmVlbi5wcm90b3R5cGUuZGlzcGxheUxvYWRpbmdVSSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdEaXYpIHsKKyAgICAgICAgICAgIC8vIERvIG5v
dCBhZGQgYSBsb2FkaW5nIHNjcmVlbiBpZiB0aGVyZSBpcyBhbHJlYWR5IG9uZQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2xvYWRpbmdEaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGhpcy5fbG9hZGluZ0Rpdi5pZCA9ICJi
YWJ5bG9uanNMb2FkaW5nRGl2IjsKKyAgICAgICAgdGhpcy5fbG9hZGluZ0Rpdi5zdHlsZS5vcGFj
aXR5ID0gIjAiOworICAgICAgICB0aGlzLl9sb2FkaW5nRGl2LnN0eWxlLnRyYW5zaXRpb24gPSAi
b3BhY2l0eSAxLjVzIGVhc2UiOworICAgICAgICB0aGlzLl9sb2FkaW5nRGl2LnN0eWxlLnBvaW50
ZXJFdmVudHMgPSAibm9uZSI7CisgICAgICAgIC8vIExvYWRpbmcgdGV4dAorICAgICAgICB0aGlz
Ll9sb2FkaW5nVGV4dERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAg
ICB0aGlzLl9sb2FkaW5nVGV4dERpdi5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CisgICAg
ICAgIHRoaXMuX2xvYWRpbmdUZXh0RGl2LnN0eWxlLmxlZnQgPSAiMCI7CisgICAgICAgIHRoaXMu
X2xvYWRpbmdUZXh0RGl2LnN0eWxlLnRvcCA9ICI1MCUiOworICAgICAgICB0aGlzLl9sb2FkaW5n
VGV4dERpdi5zdHlsZS5tYXJnaW5Ub3AgPSAiODBweCI7CisgICAgICAgIHRoaXMuX2xvYWRpbmdU
ZXh0RGl2LnN0eWxlLndpZHRoID0gIjEwMCUiOworICAgICAgICB0aGlzLl9sb2FkaW5nVGV4dERp
di5zdHlsZS5oZWlnaHQgPSAiMjBweCI7CisgICAgICAgIHRoaXMuX2xvYWRpbmdUZXh0RGl2LnN0
eWxlLmZvbnRGYW1pbHkgPSAiQXJpYWwiOworICAgICAgICB0aGlzLl9sb2FkaW5nVGV4dERpdi5z
dHlsZS5mb250U2l6ZSA9ICIxNHB4IjsKKyAgICAgICAgdGhpcy5fbG9hZGluZ1RleHREaXYuc3R5
bGUuY29sb3IgPSAid2hpdGUiOworICAgICAgICB0aGlzLl9sb2FkaW5nVGV4dERpdi5zdHlsZS50
ZXh0QWxpZ24gPSAiY2VudGVyIjsKKyAgICAgICAgdGhpcy5fbG9hZGluZ1RleHREaXYuaW5uZXJI
VE1MID0gIkxvYWRpbmciOworICAgICAgICB0aGlzLl9sb2FkaW5nRGl2LmFwcGVuZENoaWxkKHRo
aXMuX2xvYWRpbmdUZXh0RGl2KTsKKyAgICAgICAgLy9zZXQgdGhlIHByZWRlZmluZWQgdGV4dAor
ICAgICAgICB0aGlzLl9sb2FkaW5nVGV4dERpdi5pbm5lckhUTUwgPSB0aGlzLl9sb2FkaW5nVGV4
dDsKKyAgICAgICAgLy8gR2VuZXJhdGluZyBrZXlmcmFtZXMKKyAgICAgICAgdmFyIHN0eWxlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKKyAgICAgICAgc3R5bGUudHlwZSA9ICd0
ZXh0L2Nzcyc7CisgICAgICAgIHZhciBrZXlGcmFtZXMgPSAiQC13ZWJraXQta2V5ZnJhbWVzIHNw
aW4xIHsgICAgICAgICAgICAgICAgICAgIDAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgw
ZGVnKTt9XG4gICAgICAgICAgICAgICAgICAgIDEwMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90
YXRlKDM2MGRlZyk7fVxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgQGtleWZyYW1l
cyBzcGluMSB7ICAgICAgICAgICAgICAgICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcp
O31cbiAgICAgICAgICAgICAgICAgICAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7
fVxuICAgICAgICAgICAgICAgIH0iOworICAgICAgICBzdHlsZS5pbm5lckhUTUwgPSBrZXlGcmFt
ZXM7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBw
ZW5kQ2hpbGQoc3R5bGUpOworICAgICAgICAvLyBMb2FkaW5nIGltZworICAgICAgICB2YXIgaW1n
QmFjayA9IG5ldyBJbWFnZSgpOworICAgICAgICBpZiAoIURlZmF1bHRMb2FkaW5nU2NyZWVuLkRl
ZmF1bHRMb2dvVXJsKSB7CisgICAgICAgICAgICBpbWdCYWNrLnNyYyA9ICJkYXRhOmltYWdlL3N2
Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3
TUM5emRtY2lJSFpwWlhkQ2IzZzlJakFnTUNBeE9EQXVNVGNnTWpBNExqQTBJajQ4WkdWbWN6NDhj
M1I1YkdVK0xtTnNjeTB4ZTJacGJHdzZJMlptWmp0OUxtTnNjeTB5ZTJacGJHdzZJMlV3TmpnMFlq
dDlMbU5zY3kwemUyWnBiR3c2STJKaU5EWTBZanQ5TG1Oc2N5MDBlMlpwYkd3NkkyVXdaR1ZrT0R0
OUxtTnNjeTAxZTJacGJHdzZJMlExWkRKallUdDlQQzl6ZEhsc1pUNDhMMlJsWm5NK1BIUnBkR3hs
UGtKaFlubHNiMjVNYjJkdlBDOTBhWFJzWlQ0OFp5QnBaRDBpVEdGNVpYSmZNaUlnWkdGMFlTMXVZ
VzFsUFNKTVlYbGxjaUF5SWo0OFp5QnBaRDBpVUdGblpWOUZiR1Z0Wlc1MGN5SWdaR0YwWVMxdVlX
MWxQU0pRWVdkbElFVnNaVzFsYm5SeklqNDhjR0YwYUNCamJHRnpjejBpWTJ4ekxURWlJR1E5SWsw
NU1DNHdPU3d3TERBc05USldNVFUyYkRrd0xqQTVMRFV5TERrd0xqQTRMVFV5VmpVeVdpSXZQanh3
YjJ4NVoyOXVJR05zWVhOelBTSmpiSE10TWlJZ2NHOXBiblJ6UFNJeE9EQXVNVGNnTlRJdU1ERWdN
VFV4TGprM0lETTFMamN6SURFeU5DNDROU0ExTVM0ek9TQXhOVE11TURVZ05qY3VOamNnTVRnd0xq
RTNJRFV5TGpBeElpOCtQSEJ2YkhsbmIyNGdZMnhoYzNNOUltTnNjeTB5SWlCd2IybHVkSE05SWpJ
M0xqRXlJRFkzTGpZM0lERXhOeTR5TVNBeE5TNDJOaUE1TUM0d09DQXdJREFnTlRJdU1ERWdNamN1
TVRJZ05qY3VOamNpTHo0OGNHOXNlV2R2YmlCamJHRnpjejBpWTJ4ekxUSWlJSEJ2YVc1MGN6MGlO
akV1T0RrZ01USXdMak1nT1RBdU1EZ2dNVE0yTGpVNElERXhPQzR5T0NBeE1qQXVNeUE1TUM0d09D
QXhNRFF1TURJZ05qRXVPRGtnTVRJd0xqTWlMejQ4Y0c5c2VXZHZiaUJqYkdGemN6MGlZMnh6TFRN
aUlIQnZhVzUwY3owaU1UVXpMakExSURZM0xqWTNJREUxTXk0d05TQXhOREF1TXpjZ09UQXVNRGdn
TVRjMkxqY3lJREkzTGpFeUlERTBNQzR6TnlBeU55NHhNaUEyTnk0Mk55QXdJRFV5TGpBeElEQWdN
VFUyTGpBeklEa3dMakE0SURJd09DNHdOQ0F4T0RBdU1UY2dNVFUyTGpBeklERTRNQzR4TnlBMU1p
NHdNU0F4TlRNdU1EVWdOamN1TmpjaUx6NDhjRzlzZVdkdmJpQmpiR0Z6Y3owaVkyeHpMVE1pSUhC
dmFXNTBjejBpT1RBdU1EZ2dOekV1TkRZZ05qRXVPRGtnT0RjdU56UWdOakV1T0RrZ01USXdMak1n
T1RBdU1EZ2dNVEEwTGpBeUlERXhPQzR5T0NBeE1qQXVNeUF4TVRndU1qZ2dPRGN1TnpRZ09UQXVN
RGdnTnpFdU5EWWlMejQ4Y0c5c2VXZHZiaUJqYkdGemN6MGlZMnh6TFRRaUlIQnZhVzUwY3owaU1U
VXpMakExSURZM0xqWTNJREV4T0M0eU9DQTROeTQzTkNBeE1UZ3VNamdnTVRJd0xqTWdPVEF1TURn
Z01UTTJMalU0SURrd0xqQTRJREUzTmk0M01pQXhOVE11TURVZ01UUXdMak0zSURFMU15NHdOU0Ey
Tnk0Mk55SXZQanh3YjJ4NVoyOXVJR05zWVhOelBTSmpiSE10TlNJZ2NHOXBiblJ6UFNJeU55NHhN
aUEyTnk0Mk55QTJNUzQ0T1NBNE55NDNOQ0EyTVM0NE9TQXhNakF1TXlBNU1DNHdPQ0F4TXpZdU5U
Z2dPVEF1TURnZ01UYzJMamN5SURJM0xqRXlJREUwTUM0ek55QXlOeTR4TWlBMk55NDJOeUl2UGp3
dlp6NDhMMmMrUEM5emRtYysiOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaW1nQmFjay5zcmMgPSBEZWZhdWx0TG9hZGluZ1NjcmVlbi5EZWZhdWx0TG9nb1VybDsKKyAg
ICAgICAgfQorICAgICAgICBpbWdCYWNrLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKKyAg
ICAgICAgaW1nQmFjay5zdHlsZS5sZWZ0ID0gIjQwJSI7CisgICAgICAgIGltZ0JhY2suc3R5bGUu
dG9wID0gIjQwJSI7CisgICAgICAgIGltZ0JhY2suc3R5bGUud2lkdGggPSAiMjAlIjsKKyAgICAg
ICAgaW1nQmFjay5zdHlsZS5oZWlnaHQgPSAiMjAlIjsKKyAgICAgICAgLy8gTG9hZGluZyBzcGlu
bmVyCisgICAgICAgIHZhciBpbWdTcGlubmVyID0gbmV3IEltYWdlKCk7CisgICAgICAgIGlmICgh
RGVmYXVsdExvYWRpbmdTY3JlZW4uRGVmYXVsdFNwaW5uZXJVcmwpIHsKKyAgICAgICAgICAgIGlt
Z1NwaW5uZXIuc3JjID0gImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3ow
aWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIWnBaWGRDYjNnOUlqQWdNQ0F6
T1RJZ016a3lJajQ4WkdWbWN6NDhjM1I1YkdVK0xtTnNjeTB4ZTJacGJHdzZJMlV3TmpnMFlqdDlM
bU5zY3kweWUyWnBiR3c2Ym05dVpUdDlQQzl6ZEhsc1pUNDhMMlJsWm5NK1BIUnBkR3hsUGxOd2FX
NXVaWEpKWTI5dVBDOTBhWFJzWlQ0OFp5QnBaRDBpVEdGNVpYSmZNaUlnWkdGMFlTMXVZVzFsUFNK
TVlYbGxjaUF5SWo0OFp5QnBaRDBpVTNCcGJtNWxjaUkrUEhCaGRHZ2dZMnhoYzNNOUltTnNjeTB4
SWlCa1BTSk5OREF1TWpFc01USTJMalF6WXpNdU55MDNMak14TERjdU5qY3RNVFF1TkRRc01USXRN
akV1TXpKc015NHpOaTAxTGpFc015NDFNaTAxWXpFdU1qTXRNUzQyTXl3eUxqUXhMVE11TWprc015
NDJOUzAwTGpreGN6SXVOVE10TXk0eU1Td3pMamd5TFRRdU56bEJNVGcxTGpJc01UZzFMaklzTUN3
d0xERXNPRE11TkN3Mk55NDBNMkV5TURnc01qQTRMREFzTUN3eExERTVMVEUxTGpZMll6TXVNelV0
TWk0ME1TdzJMamMwTFRRdU56Z3NNVEF1TWpVdE4zTTNMakV4TFRRdU1qZ3NNVEF1TnpVdE5pNHpN
bU0zTGpJNUxUUXNNVFF1TnpNdE9Dd3lNaTQxTXkweE1TNDBPU3d6TGprdE1TNDNNaXczTGpnNExU
TXVNeXd4TWkwMExqWTBZVEV3TkM0eU1pd3hNRFF1TWpJc01Dd3dMREVzTVRJdU5EUXRNeTR5TXl3
Mk1pNDBOQ3cyTWk0ME5Dd3dMREFzTVN3eE1pNDNPQzB4TGpNNVFUSTFMamt5TERJMUxqa3lMREFz
TUN3eExERTVOaXd5TVM0ME5HRTJMalUxTERZdU5UVXNNQ3d3TERFc01pNHdOU3c1TERZdU5qWXNO
aTQyTml3d0xEQXNNUzB4TGpZMExERXVOemhzTFM0ME1TNHlPV0V5TWk0d055d3lNaTR3Tnl3d0xE
QXNNUzAxTGpjNExETXNNekF1TkRJc016QXVORElzTUN3d0xERXROUzQyTnl3eExqWXlMRE0zTGpn
eUxETTNMamd5TERBc01Dd3hMVFV1TmprdU56RmpMVEVzTUMweExqa3VNVGd0TWk0NE5TNHlObXd0
TWk0NE5TNHlOSEV0TlM0M01pNDFNUzB4TVM0ME9Dd3hMakZqTFRNdU9EUXVOQzAzTGpjeExqZ3lM
VEV4TGpVNExERXVOR0V4TVRJdU16UXNNVEV5TGpNMExEQXNNQ3d3TFRJeUxqazBMRFV1TmpGakxU
TXVOeklzTVM0ek5TMDNMak0wTERNdE1UQXVPVFFzTkM0Mk5ITXROeTR4TkN3ekxqVXhMVEV3TGpZ
c05TNDFNVUV4TlRFdU5pd3hOVEV1Tml3d0xEQXNNQ3cyT0M0MU5pdzROME0yTnk0eU15dzRPQzQw
T0N3Mk5pdzVNQ3cyTkM0Mk5DdzVNUzQxTm5NdE1pNDFNU3d6TGpFMUxUTXVOelVzTkM0M00yd3RN
eTQxTkN3MExqbGpMVEV1TVRNc01TNDJOaTB5TGpJekxETXVNelV0TXk0ek15dzFZVEV5Tnl3eE1q
Y3NNQ3d3TERBdE1UQXVPVE1zTWpFdU5Ea3NNUzQxT0N3eExqVTRMREFzTVN3eExUTXRNUzR4TlZN
ME1DNHhPU3d4TWpZdU5EY3NOREF1TWpFc01USTJMalF6V2lJdlBqeHlaV04wSUdOc1lYTnpQU0pq
YkhNdE1pSWdkMmxrZEdnOUlqTTVNaUlnYUdWcFoyaDBQU0l6T1RJaUx6NDhMMmMrUEM5blBqd3Zj
M1puUGc9PSI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbWdTcGlu
bmVyLnNyYyA9IERlZmF1bHRMb2FkaW5nU2NyZWVuLkRlZmF1bHRTcGlubmVyVXJsOworICAgICAg
ICB9CisgICAgICAgIGltZ1NwaW5uZXIuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICAg
ICAgICBpbWdTcGlubmVyLnN0eWxlLmxlZnQgPSAiMzAlIjsKKyAgICAgICAgaW1nU3Bpbm5lci5z
dHlsZS50b3AgPSAiMzAlIjsKKyAgICAgICAgaW1nU3Bpbm5lci5zdHlsZS53aWR0aCA9ICI0MCUi
OworICAgICAgICBpbWdTcGlubmVyLnN0eWxlLmhlaWdodCA9ICI0MCUiOworICAgICAgICBpbWdT
cGlubmVyLnN0eWxlLmFuaW1hdGlvbiA9ICJzcGluMSAwLjc1cyBpbmZpbml0ZSBsaW5lYXIiOwor
ICAgICAgICBpbWdTcGlubmVyLnN0eWxlLndlYmtpdEFuaW1hdGlvbiA9ICJzcGluMSAwLjc1cyBp
bmZpbml0ZSBsaW5lYXIiOworICAgICAgICBpbWdTcGlubmVyLnN0eWxlLnRyYW5zZm9ybU9yaWdp
biA9ICI1MCUgNTAlIjsKKyAgICAgICAgaW1nU3Bpbm5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm1P
cmlnaW4gPSAiNTAlIDUwJSI7CisgICAgICAgIHRoaXMuX2xvYWRpbmdEaXYuYXBwZW5kQ2hpbGQo
aW1nQmFjayk7CisgICAgICAgIHRoaXMuX2xvYWRpbmdEaXYuYXBwZW5kQ2hpbGQoaW1nU3Bpbm5l
cik7CisgICAgICAgIHRoaXMuX3Jlc2l6ZUxvYWRpbmdVSSgpOworICAgICAgICB3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5fcmVzaXplTG9hZGluZ1VJKTsKKyAgICAgICAg
dGhpcy5fbG9hZGluZ0Rpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLl9sb2FkaW5nRGl2
QmFja2dyb3VuZENvbG9yOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMu
X2xvYWRpbmdEaXYpOworICAgICAgICB0aGlzLl9sb2FkaW5nRGl2LnN0eWxlLm9wYWNpdHkgPSAi
MSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiBjYWxsZWQgdG8gaGlkZSB0aGUg
bG9hZGluZyBzY3JlZW4KKyAgICAgKi8KKyAgICBEZWZhdWx0TG9hZGluZ1NjcmVlbi5wcm90b3R5
cGUuaGlkZUxvYWRpbmdVSSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhp
czsKKyAgICAgICAgaWYgKCF0aGlzLl9sb2FkaW5nRGl2KSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9uVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGlmICghX3RoaXMuX2xvYWRpbmdEaXYpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX3RoaXMuX2xvYWRpbmdEaXYu
cGFyZW50RWxlbWVudCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9sb2FkaW5nRGl2LnBhcmVu
dEVsZW1lbnQucmVtb3ZlQ2hpbGQoX3RoaXMuX2xvYWRpbmdEaXYpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIF90aGlzLl9y
ZXNpemVMb2FkaW5nVUkpOworICAgICAgICAgICAgX3RoaXMuX2xvYWRpbmdEaXYgPSBudWxsOwor
ICAgICAgICB9OworICAgICAgICB0aGlzLl9sb2FkaW5nRGl2LnN0eWxlLm9wYWNpdHkgPSAiMCI7
CisgICAgICAgIHRoaXMuX2xvYWRpbmdEaXYuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVu
ZCIsIG9uVHJhbnNpdGlvbkVuZCk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
RGVmYXVsdExvYWRpbmdTY3JlZW4ucHJvdG90eXBlLCAibG9hZGluZ1VJVGV4dCIsIHsKKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ1Rl
eHQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhl
IHRleHQgdG8gZGlzcGxheSB3aGlsZSBsb2FkaW5nCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh0ZXh0KSB7CisgICAgICAgICAgICB0aGlzLl9sb2FkaW5nVGV4dCA9IHRleHQ7
CisgICAgICAgICAgICBpZiAodGhpcy5fbG9hZGluZ1RleHREaXYpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9sb2FkaW5nVGV4dERpdi5pbm5lckhUTUwgPSB0aGlzLl9sb2FkaW5nVGV4dDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KERlZmF1bHRMb2FkaW5nU2NyZWVuLnByb3RvdHlwZSwgImxvYWRpbmdVSUJhY2tncm91bmRDb2xv
ciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY29sb3IgdG8g
dXNlIGZvciB0aGUgYmFja2dyb3VuZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ0RpdkJhY2tncm91bmRDb2xv
cjsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY29sb3IpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2xvYWRpbmdEaXZCYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgICAg
IGlmICghdGhpcy5fbG9hZGluZ0RpdikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdEaXYuc3R5bGUuYmFja2dyb3VuZENv
bG9yID0gdGhpcy5fbG9hZGluZ0RpdkJhY2tncm91bmRDb2xvcjsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgLyoqIEdldHMgb3Igc2V0cyB0aGUgbG9nbyB1cmwgdG8gdXNlIGZvciB0aGUgZGVmYXVs
dCBsb2FkaW5nIHNjcmVlbiAqLworICAgIERlZmF1bHRMb2FkaW5nU2NyZWVuLkRlZmF1bHRMb2dv
VXJsID0gIiI7CisgICAgLyoqIEdldHMgb3Igc2V0cyB0aGUgc3Bpbm5lciB1cmwgdG8gdXNlIGZv
ciB0aGUgZGVmYXVsdCBsb2FkaW5nIHNjcmVlbiAqLworICAgIERlZmF1bHRMb2FkaW5nU2NyZWVu
LkRlZmF1bHRTcGlubmVyVXJsID0gIiI7CisgICAgcmV0dXJuIERlZmF1bHRMb2FkaW5nU2NyZWVu
OworfSgpKTsKKworX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkVuZ2luZSJdLkRlZmF1bHRMb2FkaW5nU2NyZWVuRmFjdG9yeSA9IGZ1bmN0aW9uIChjYW52YXMp
IHsgcmV0dXJuIG5ldyBEZWZhdWx0TG9hZGluZ1NjcmVlbihjYW52YXMpOyB9OworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9Mb2FkaW5nL3NjZW5lTG9hZGVyLnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Mb2FkaW5nL3NjZW5lTG9hZGVyLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IFNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudCwgU2NlbmVMb2FkZXIgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVMb2FkZXJQcm9ncmVzc0V2ZW50Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBTY2VuZUxvYWRlclByb2dyZXNzRXZlbnQ7IH0pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiU2NlbmVMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNjZW5lTG9hZGVy
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAq
LyAiLi9NaXNjL3Rvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2ZpbGVzSW5wdXRTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9maWxlc0lu
cHV0U3RvcmUgKi8gIi4vTWlzYy9maWxlc0lucHV0U3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVz
L2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZVN0
b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5lU3RvcmUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIu
L01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZUxvYWRlckZsYWdzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NjZW5lTG9hZGVyRmxh
Z3MgKi8gIi4vTG9hZGluZy9zY2VuZUxvYWRlckZsYWdzLnRzIik7CisKKworCisKKworCisKKwor
CisvKioKKyAqIENsYXNzIHVzZWQgdG8gcmVwcmVzZW50IGRhdGEgbG9hZGluZyBwcm9ncmVzc2lv
bgorICovCit2YXIgU2NlbmVMb2FkZXJQcm9ncmVzc0V2ZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBwcm9ncmVzcyBldmVudAor
ICAgICAqIEBwYXJhbSBsZW5ndGhDb21wdXRhYmxlIGRlZmluZXMgaWYgZGF0YSBsZW5ndGggdG8g
bG9hZCBjYW4gYmUgZXZhbHVhdGVkCisgICAgICogQHBhcmFtIGxvYWRlZCBkZWZpbmVzIHRoZSBs
b2FkZWQgZGF0YSBsZW5ndGgKKyAgICAgKiBAcGFyYW0gdG90YWwgZGVmaW5lcyB0aGUgZGF0YSBs
ZW5ndGggdG8gbG9hZAorICAgICAqLworICAgIGZ1bmN0aW9uIFNjZW5lTG9hZGVyUHJvZ3Jlc3NF
dmVudCgKKyAgICAvKiogZGVmaW5lcyBpZiBkYXRhIGxlbmd0aCB0byBsb2FkIGNhbiBiZSBldmFs
dWF0ZWQgKi8KKyAgICBsZW5ndGhDb21wdXRhYmxlLCAKKyAgICAvKiogZGVmaW5lcyB0aGUgbG9h
ZGVkIGRhdGEgbGVuZ3RoICovCisgICAgbG9hZGVkLCAKKyAgICAvKiogZGVmaW5lcyB0aGUgZGF0
YSBsZW5ndGggdG8gbG9hZCAqLworICAgIHRvdGFsKSB7CisgICAgICAgIHRoaXMubGVuZ3RoQ29t
cHV0YWJsZSA9IGxlbmd0aENvbXB1dGFibGU7CisgICAgICAgIHRoaXMubG9hZGVkID0gbG9hZGVk
OworICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7CisgICAgfQorICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBuZXcgU2NlbmVMb2FkZXJQcm9ncmVzc0V2ZW50IGZyb20gYSBQcm9ncmVzc0V2ZW50
CisgICAgICogQHBhcmFtIGV2ZW50IGRlZmluZXMgdGhlIHNvdXJjZSBldmVudAorICAgICAqIEBy
ZXR1cm5zIGEgbmV3IFNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudAorICAgICAqLworICAgIFNjZW5l
TG9hZGVyUHJvZ3Jlc3NFdmVudC5Gcm9tUHJvZ3Jlc3NFdmVudCA9IGZ1bmN0aW9uIChldmVudCkg
eworICAgICAgICByZXR1cm4gbmV3IFNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudChldmVudC5sZW5n
dGhDb21wdXRhYmxlLCBldmVudC5sb2FkZWQsIGV2ZW50LnRvdGFsKTsKKyAgICB9OworICAgIHJl
dHVybiBTY2VuZUxvYWRlclByb2dyZXNzRXZlbnQ7Cit9KCkpOworCisvKioKKyAqIENsYXNzIHVz
ZWQgdG8gbG9hZCBzY2VuZSBmcm9tIHZhcmlvdXMgZmlsZSBmb3JtYXRzIHVzaW5nIHJlZ2lzdGVy
ZWQgcGx1Z2lucworICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2xvYWRf
ZnJvbV9hbnlfZmlsZV90eXBlCisgKi8KK3ZhciBTY2VuZUxvYWRlciA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBTY2VuZUxvYWRlcigpIHsKKyAgICB9CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lTG9hZGVyLCAiRm9yY2VGdWxsU2NlbmVMb2FkaW5n
Rm9ySW5jcmVtZW50YWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMg
YSBib29sZWFuIGluZGljYXRpbmcgaWYgZW50aXJlIHNjZW5lIG11c3QgYmUgbG9hZGVkIGV2ZW4g
aWYgc2NlbmUgY29udGFpbnMgaW5jcmVtZW50YWwgZGF0YQorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX3NjZW5lTG9hZGVyRmxhZ3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2NlbmVMb2FkZXJGbGFncyJdLkZvcmNlRnVs
bFNjZW5lTG9hZGluZ0ZvckluY3JlbWVudGFsOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgX3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfX1siU2NlbmVMb2FkZXJGbGFncyJdLkZvcmNlRnVsbFNjZW5lTG9h
ZGluZ0ZvckluY3JlbWVudGFsID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShTY2VuZUxvYWRlciwgIlNob3dMb2FkaW5nU2NyZWVuIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlm
IGxvYWRpbmcgc2NyZWVuIG11c3QgYmUgZGlzcGxheWVkIHdoaWxlIGxvYWRpbmcgYSBzY2VuZQor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gX3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2NlbmVM
b2FkZXJGbGFncyJdLlNob3dMb2FkaW5nU2NyZWVuOworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgX3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2NlbmVMb2FkZXJGbGFncyJdLlNob3dMb2FkaW5nU2Ny
ZWVuID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTY2VuZUxvYWRlciwgImxvZ2dpbmdMZXZlbCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZXMgdGhlIGN1cnJlbnQgbG9nZ2luZyBsZXZlbCAod2hpbGUgbG9hZGluZyB0aGUgc2Nl
bmUpCisgICAgICAgICAqIEBpZ25vcmVuYW1pbmcKKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9zY2VuZUxvYWRlckZsYWdzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlNjZW5lTG9hZGVyRmxhZ3MiXS5sb2dnaW5nTGV2ZWw7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICBfc2NlbmVMb2FkZXJGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJTY2VuZUxv
YWRlckZsYWdzIl0ubG9nZ2luZ0xldmVsID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZUxvYWRlciwgIkNsZWFuQm9uZU1hdHJpeFdlaWdo
dHMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldCBhIGJvb2xlYW4gaW5k
aWNhdGluZyBpZiBtYXRyaXggd2VpZ2h0cyBtdXN0IGJlIGNsZWFuZWQgdXBvbiBsb2FkaW5nCisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biBfc2NlbmVMb2FkZXJGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJTY2VuZUxv
YWRlckZsYWdzIl0uQ2xlYW5Cb25lTWF0cml4V2VpZ2h0czsKKyAgICAgICAgfSwKKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIF9zY2VuZUxvYWRlckZsYWdzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlNjZW5lTG9hZGVyRmxhZ3MiXS5DbGVhbkJvbmVN
YXRyaXhXZWlnaHRzID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIFNjZW5lTG9hZGVy
Ll9nZXREZWZhdWx0UGx1Z2luID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gU2NlbmVM
b2FkZXIuX3JlZ2lzdGVyZWRQbHVnaW5zWyIuYmFieWxvbiJdOworICAgIH07CisgICAgU2NlbmVM
b2FkZXIuX2dldFBsdWdpbkZvckV4dGVuc2lvbiA9IGZ1bmN0aW9uIChleHRlbnNpb24pIHsKKyAg
ICAgICAgdmFyIHJlZ2lzdGVyZWRQbHVnaW4gPSBTY2VuZUxvYWRlci5fcmVnaXN0ZXJlZFBsdWdp
bnNbZXh0ZW5zaW9uXTsKKyAgICAgICAgaWYgKHJlZ2lzdGVyZWRQbHVnaW4pIHsKKyAgICAgICAg
ICAgIHJldHVybiByZWdpc3RlcmVkUGx1Z2luOworICAgICAgICB9CisgICAgICAgIF9NaXNjX2xv
Z2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJMb2dnZXIiXS5XYXJuKCJVbmFibGUg
dG8gZmluZCBhIHBsdWdpbiB0byBsb2FkICIgKyBleHRlbnNpb24gKyAiIGZpbGVzLiBUcnlpbmcg
dG8gdXNlIC5iYWJ5bG9uIGRlZmF1bHQgcGx1Z2luLiBUbyBsb2FkIGZyb20gYSBzcGVjaWZpYyBm
aWxldHlwZSAoZWcuIGdsdGYpIHNlZTogaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9s
b2FkX2Zyb21fYW55X2ZpbGVfdHlwZSIpOworICAgICAgICByZXR1cm4gU2NlbmVMb2FkZXIuX2dl
dERlZmF1bHRQbHVnaW4oKTsKKyAgICB9OworICAgIFNjZW5lTG9hZGVyLl9nZXRQbHVnaW5Gb3JE
aXJlY3RMb2FkID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgZm9yICh2YXIgZXh0ZW5zaW9u
IGluIFNjZW5lTG9hZGVyLl9yZWdpc3RlcmVkUGx1Z2lucykgeworICAgICAgICAgICAgdmFyIHBs
dWdpbiA9IFNjZW5lTG9hZGVyLl9yZWdpc3RlcmVkUGx1Z2luc1tleHRlbnNpb25dLnBsdWdpbjsK
KyAgICAgICAgICAgIGlmIChwbHVnaW4uY2FuRGlyZWN0TG9hZCAmJiBwbHVnaW4uY2FuRGlyZWN0
TG9hZChkYXRhKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBTY2VuZUxvYWRlci5fcmVnaXN0
ZXJlZFBsdWdpbnNbZXh0ZW5zaW9uXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gU2NlbmVMb2FkZXIuX2dldERlZmF1bHRQbHVnaW4oKTsKKyAgICB9OworICAgIFNj
ZW5lTG9hZGVyLl9nZXRQbHVnaW5Gb3JGaWxlbmFtZSA9IGZ1bmN0aW9uIChzY2VuZUZpbGVuYW1l
KSB7CisgICAgICAgIHZhciBxdWVyeVN0cmluZ1Bvc2l0aW9uID0gc2NlbmVGaWxlbmFtZS5pbmRl
eE9mKCI/Iik7CisgICAgICAgIGlmIChxdWVyeVN0cmluZ1Bvc2l0aW9uICE9PSAtMSkgeworICAg
ICAgICAgICAgc2NlbmVGaWxlbmFtZSA9IHNjZW5lRmlsZW5hbWUuc3Vic3RyaW5nKDAsIHF1ZXJ5
U3RyaW5nUG9zaXRpb24pOworICAgICAgICB9CisgICAgICAgIHZhciBkb3RQb3NpdGlvbiA9IHNj
ZW5lRmlsZW5hbWUubGFzdEluZGV4T2YoIi4iKTsKKyAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHNj
ZW5lRmlsZW5hbWUuc3Vic3RyaW5nKGRvdFBvc2l0aW9uLCBzY2VuZUZpbGVuYW1lLmxlbmd0aCku
dG9Mb3dlckNhc2UoKTsKKyAgICAgICAgcmV0dXJuIFNjZW5lTG9hZGVyLl9nZXRQbHVnaW5Gb3JF
eHRlbnNpb24oZXh0ZW5zaW9uKTsKKyAgICB9OworICAgIC8vIHVzZSBiYWJ5bG9uIGZpbGUgbG9h
ZGVyIGRpcmVjdGx5IGlmIHNjZW5lRmlsZW5hbWUgaXMgcHJlZml4ZWQgd2l0aCAiZGF0YToiCisg
ICAgU2NlbmVMb2FkZXIuX2dldERpcmVjdExvYWQgPSBmdW5jdGlvbiAoc2NlbmVGaWxlbmFtZSkg
eworICAgICAgICBpZiAoc2NlbmVGaWxlbmFtZS5zdWJzdHIoMCwgNSkgPT09ICJkYXRhOiIpIHsK
KyAgICAgICAgICAgIHJldHVybiBzY2VuZUZpbGVuYW1lLnN1YnN0cig1KTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIFNjZW5lTG9hZGVyLl9sb2FkRGF0YSA9
IGZ1bmN0aW9uIChmaWxlSW5mbywgc2NlbmUsIG9uU3VjY2Vzcywgb25Qcm9ncmVzcywgb25FcnJv
ciwgb25EaXNwb3NlLCBwbHVnaW5FeHRlbnNpb24pIHsKKyAgICAgICAgdmFyIGRpcmVjdExvYWQg
PSBTY2VuZUxvYWRlci5fZ2V0RGlyZWN0TG9hZChmaWxlSW5mby5uYW1lKTsKKyAgICAgICAgdmFy
IHJlZ2lzdGVyZWRQbHVnaW4gPSBwbHVnaW5FeHRlbnNpb24gPyBTY2VuZUxvYWRlci5fZ2V0UGx1
Z2luRm9yRXh0ZW5zaW9uKHBsdWdpbkV4dGVuc2lvbikgOiAoZGlyZWN0TG9hZCA/IFNjZW5lTG9h
ZGVyLl9nZXRQbHVnaW5Gb3JEaXJlY3RMb2FkKGZpbGVJbmZvLm5hbWUpIDogU2NlbmVMb2FkZXIu
X2dldFBsdWdpbkZvckZpbGVuYW1lKGZpbGVJbmZvLm5hbWUpKTsKKyAgICAgICAgdmFyIHBsdWdp
bjsKKyAgICAgICAgaWYgKHJlZ2lzdGVyZWRQbHVnaW4ucGx1Z2luLmNyZWF0ZVBsdWdpbikgewor
ICAgICAgICAgICAgcGx1Z2luID0gcmVnaXN0ZXJlZFBsdWdpbi5wbHVnaW4uY3JlYXRlUGx1Z2lu
KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwbHVnaW4gPSByZWdp
c3RlcmVkUGx1Z2luLnBsdWdpbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBsdWdpbikgewor
ICAgICAgICAgICAgdGhyb3cgIlRoZSBsb2FkZXIgcGx1Z2luIGNvcnJlc3BvbmRpbmcgdG8gdGhl
IGZpbGUgdHlwZSB5b3UgYXJlIHRyeWluZyB0byBsb2FkIGhhcyBub3QgYmVlbiBmb3VuZC4gSWYg
dXNpbmcgZXM2LCBwbGVhc2UgaW1wb3J0IHRoZSBwbHVnaW4geW91IHdpc2ggdG8gdXNlIGJlZm9y
ZS4iOworICAgICAgICB9CisgICAgICAgIHZhciB1c2VBcnJheUJ1ZmZlciA9IHJlZ2lzdGVyZWRQ
bHVnaW4uaXNCaW5hcnk7CisgICAgICAgIHZhciBvZmZsaW5lUHJvdmlkZXI7CisgICAgICAgIFNj
ZW5lTG9hZGVyLk9uUGx1Z2luQWN0aXZhdGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMocGx1
Z2luKTsKKyAgICAgICAgdmFyIGRhdGFDYWxsYmFjayA9IGZ1bmN0aW9uIChkYXRhLCByZXNwb25z
ZVVSTCkgeworICAgICAgICAgICAgaWYgKHNjZW5lLmlzRGlzcG9zZWQpIHsKKyAgICAgICAgICAg
ICAgICBvbkVycm9yKCJTY2VuZSBoYXMgYmVlbiBkaXNwb3NlZCIpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNjZW5lLm9mZmxpbmVQcm92aWRl
ciA9IG9mZmxpbmVQcm92aWRlcjsKKyAgICAgICAgICAgIG9uU3VjY2VzcyhwbHVnaW4sIGRhdGEs
IHJlc3BvbnNlVVJMKTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSBudWxsOwor
ICAgICAgICB2YXIgcGx1Z2luRGlzcG9zZWQgPSBmYWxzZTsKKyAgICAgICAgdmFyIG9uRGlzcG9z
ZU9ic2VydmFibGUgPSBwbHVnaW4ub25EaXNwb3NlT2JzZXJ2YWJsZTsKKyAgICAgICAgaWYgKG9u
RGlzcG9zZU9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIG9uRGlzcG9zZU9ic2VydmFibGUuYWRk
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBwbHVnaW5EaXNwb3NlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dC5hYm9ydCgpOworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gbnVsbDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgb25EaXNwb3NlKCk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgbWFuaWZlc3RDaGVja2VkID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgaWYgKHBsdWdpbkRpc3Bvc2VkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVxdWVzdCA9IF9NaXNjX3Rvb2xzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRvb2xzIl0uTG9hZEZpbGUoZmlsZUluZm8udXJsLCBk
YXRhQ2FsbGJhY2ssIG9uUHJvZ3Jlc3MgPyBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAg
ICAgICBvblByb2dyZXNzKFNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudC5Gcm9tUHJvZ3Jlc3NFdmVu
dChldmVudCkpOworICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCwgb2ZmbGluZVByb3ZpZGVyLCB1
c2VBcnJheUJ1ZmZlciwgZnVuY3Rpb24gKHJlcXVlc3QsIGV4Y2VwdGlvbikgeworICAgICAgICAg
ICAgICAgIG9uRXJyb3IoIkZhaWxlZCB0byBsb2FkIHNjZW5lLiIgKyAoZXhjZXB0aW9uID8gIiAi
ICsgZXhjZXB0aW9uLm1lc3NhZ2UgOiAiIiksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfTsKKyAgICAgICAgaWYgKGRpcmVjdExvYWQpIHsKKyAgICAgICAgICAgIGRhdGFD
YWxsYmFjayhkaXJlY3RMb2FkKTsKKyAgICAgICAgICAgIHJldHVybiBwbHVnaW47CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGZpbGUgPSBmaWxlSW5mby5maWxlIHx8IF9NaXNjX2ZpbGVzSW5wdXRT
dG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJGaWxlc0lucHV0U3RvcmUiXS5GaWxl
c1RvTG9hZFtmaWxlSW5mby5uYW1lLnRvTG93ZXJDYXNlKCldOworICAgICAgICBpZiAoZmlsZUlu
Zm8ucm9vdFVybC5pbmRleE9mKCJmaWxlOiIpID09PSAtMSB8fCAoZmlsZUluZm8ucm9vdFVybC5p
bmRleE9mKCJmaWxlOiIpICE9PSAtMSAmJiAhZmlsZSkpIHsKKyAgICAgICAgICAgIHZhciBlbmdp
bmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgICAgIHZhciBjYW5Vc2VPZmZsaW5lU3Vw
cG9ydCA9IGVuZ2luZS5lbmFibGVPZmZsaW5lU3VwcG9ydDsKKyAgICAgICAgICAgIGlmIChjYW5V
c2VPZmZsaW5lU3VwcG9ydCkgeworICAgICAgICAgICAgICAgIC8vIEFsc28gY2hlY2sgZm9yIGV4
Y2VwdGlvbnMKKyAgICAgICAgICAgICAgICB2YXIgZXhjZXB0aW9uRm91bmQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gc2NlbmUuZGlzYWJsZU9mZmxpbmVT
dXBwb3J0RXhjZXB0aW9uUnVsZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhciByZWdleCA9IF9hW19pXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJl
Z2V4LnRlc3QoZmlsZUluZm8udXJsKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9uRm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FuVXNl
T2ZmbGluZVN1cHBvcnQgPSAhZXhjZXB0aW9uRm91bmQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoY2FuVXNlT2ZmbGluZVN1cHBvcnQgJiYgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdLk9mZmxpbmVQcm92aWRlckZhY3RvcnkpIHsK
KyAgICAgICAgICAgICAgICAvLyBDaGVja2luZyBpZiBhIG1hbmlmZXN0IGZpbGUgaGFzIGJlZW4g
c2V0IGZvciB0aGlzIHNjZW5lIGFuZCBpZiBvZmZsaW5lIG1vZGUgaGFzIGJlZW4gcmVxdWVzdGVk
CisgICAgICAgICAgICAgICAgb2ZmbGluZVByb3ZpZGVyID0gX0VuZ2luZXNfZW5naW5lX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZSJdLk9mZmxpbmVQcm92aWRlckZhY3Rvcnko
ZmlsZUluZm8udXJsLCBtYW5pZmVzdENoZWNrZWQsIGVuZ2luZS5kaXNhYmxlTWFuaWZlc3RDaGVj
ayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBt
YW5pZmVzdENoZWNrZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBM
b2FkaW5nIGZpbGUgZnJvbSBkaXNrIHZpYSBpbnB1dCBmaWxlIG9yIGRyYWcnbidkcm9wCisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGZpbGUpIHsKKyAgICAgICAgICAgICAgICByZXF1
ZXN0ID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5S
ZWFkRmlsZShmaWxlLCBkYXRhQ2FsbGJhY2ssIG9uUHJvZ3Jlc3MsIHVzZUFycmF5QnVmZmVyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG9uRXJy
b3IoIlVuYWJsZSB0byBmaW5kIGZpbGUgbmFtZWQgIiArIGZpbGVJbmZvLm5hbWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwbHVnaW47CisgICAgfTsKKyAgICBT
Y2VuZUxvYWRlci5fZ2V0RmlsZUluZm8gPSBmdW5jdGlvbiAocm9vdFVybCwgc2NlbmVGaWxlbmFt
ZSkgeworICAgICAgICB2YXIgdXJsOworICAgICAgICB2YXIgbmFtZTsKKyAgICAgICAgdmFyIGZp
bGUgPSBudWxsOworICAgICAgICBpZiAoIXNjZW5lRmlsZW5hbWUpIHsKKyAgICAgICAgICAgIHVy
bCA9IHJvb3RVcmw7CisgICAgICAgICAgICBuYW1lID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5HZXRGaWxlbmFtZShyb290VXJsKTsKKyAgICAgICAg
ICAgIHJvb3RVcmwgPSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJU
b29scyJdLkdldEZvbGRlclBhdGgocm9vdFVybCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoc2NlbmVGaWxlbmFtZS5uYW1lKSB7CisgICAgICAgICAgICB2YXIgc2NlbmVGaWxlID0gc2Nl
bmVGaWxlbmFtZTsKKyAgICAgICAgICAgIHVybCA9IHJvb3RVcmwgKyBzY2VuZUZpbGUubmFtZTsK
KyAgICAgICAgICAgIG5hbWUgPSBzY2VuZUZpbGUubmFtZTsKKyAgICAgICAgICAgIGZpbGUgPSBz
Y2VuZUZpbGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgZmls
ZW5hbWUgPSBzY2VuZUZpbGVuYW1lOworICAgICAgICAgICAgaWYgKGZpbGVuYW1lLnN1YnN0cigw
LCAxKSA9PT0gIi8iKSB7CisgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5FcnJvcigiV3Jvbmcgc2NlbmVGaWxlbmFtZSBwYXJh
bWV0ZXIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHVybCA9IHJvb3RVcmwgKyBmaWxlbmFtZTsKKyAgICAgICAgICAgIG5hbWUgPSBm
aWxlbmFtZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdXJsOiB1
cmwsCisgICAgICAgICAgICByb290VXJsOiByb290VXJsLAorICAgICAgICAgICAgbmFtZTogbmFt
ZSwKKyAgICAgICAgICAgIGZpbGU6IGZpbGUKKyAgICAgICAgfTsKKyAgICB9OworICAgIC8vIFB1
YmxpYyBmdW5jdGlvbnMKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgcGx1Z2luIHRoYXQgY2FuIGxv
YWQgdGhlIGdpdmVuIGV4dGVuc2lvbgorICAgICAqIEBwYXJhbSBleHRlbnNpb24gZGVmaW5lcyB0
aGUgZXh0ZW5zaW9uIHRvIGxvYWQKKyAgICAgKiBAcmV0dXJucyBhIHBsdWdpbiBvciBudWxsIGlm
IG5vbmUgd29ya3MKKyAgICAgKi8KKyAgICBTY2VuZUxvYWRlci5HZXRQbHVnaW5Gb3JFeHRlbnNp
b24gPSBmdW5jdGlvbiAoZXh0ZW5zaW9uKSB7CisgICAgICAgIHJldHVybiBTY2VuZUxvYWRlci5f
Z2V0UGx1Z2luRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbikucGx1Z2luOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBnaXZlbiBleHRlbnNp
b24gY2FuIGJlIGxvYWRlZAorICAgICAqIEBwYXJhbSBleHRlbnNpb24gZGVmaW5lcyB0aGUgZXh0
ZW5zaW9uIHRvIGxvYWQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBleHRlbnNpb24gaXMg
c3VwcG9ydGVkCisgICAgICovCisgICAgU2NlbmVMb2FkZXIuSXNQbHVnaW5Gb3JFeHRlbnNpb25B
dmFpbGFibGUgPSBmdW5jdGlvbiAoZXh0ZW5zaW9uKSB7CisgICAgICAgIHJldHVybiAhIVNjZW5l
TG9hZGVyLl9yZWdpc3RlcmVkUGx1Z2luc1tleHRlbnNpb25dOworICAgIH07CisgICAgLyoqCisg
ICAgICogQWRkcyBhIG5ldyBwbHVnaW4gdG8gdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBwbHVnaW5z
CisgICAgICogQHBhcmFtIHBsdWdpbiBkZWZpbmVzIHRoZSBwbHVnaW4gdG8gYWRkCisgICAgICov
CisgICAgU2NlbmVMb2FkZXIuUmVnaXN0ZXJQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luKSB7Cisg
ICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLmV4dGVuc2lvbnMgPT09ICJzdHJpbmciKSB7CisgICAg
ICAgICAgICB2YXIgZXh0ZW5zaW9uID0gcGx1Z2luLmV4dGVuc2lvbnM7CisgICAgICAgICAgICBT
Y2VuZUxvYWRlci5fcmVnaXN0ZXJlZFBsdWdpbnNbZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCldID0g
eworICAgICAgICAgICAgICAgIHBsdWdpbjogcGx1Z2luLAorICAgICAgICAgICAgICAgIGlzQmlu
YXJ5OiBmYWxzZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHZhciBleHRlbnNpb25zID0gcGx1Z2luLmV4dGVuc2lvbnM7CisgICAgICAgICAg
ICBPYmplY3Qua2V5cyhleHRlbnNpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChleHRlbnNpb24pIHsK
KyAgICAgICAgICAgICAgICBTY2VuZUxvYWRlci5fcmVnaXN0ZXJlZFBsdWdpbnNbZXh0ZW5zaW9u
LnRvTG93ZXJDYXNlKCldID0geworICAgICAgICAgICAgICAgICAgICBwbHVnaW46IHBsdWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgaXNCaW5hcnk6IGV4dGVuc2lvbnNbZXh0ZW5zaW9uXS5pc0Jp
bmFyeQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogSW1wb3J0IG1lc2hlcyBpbnRvIGEgc2NlbmUKKyAgICAgKiBA
cGFyYW0gbWVzaE5hbWVzIGFuIGFycmF5IG9mIG1lc2ggbmFtZXMsIGEgc2luZ2xlIG1lc2ggbmFt
ZSwgb3IgZW1wdHkgc3RyaW5nIGZvciBhbGwgbWVzaGVzIHRoYXQgZmlsdGVyIHdoYXQgbWVzaGVz
IGFyZSBpbXBvcnRlZAorICAgICAqIEBwYXJhbSByb290VXJsIGEgc3RyaW5nIHRoYXQgZGVmaW5l
cyB0aGUgcm9vdCB1cmwgZm9yIHRoZSBzY2VuZSBhbmQgcmVzb3VyY2VzIG9yIHRoZSBjb25jYXRl
bmF0aW9uIG9mIHJvb3RVUkwgYW5kIGZpbGVuYW1lIChlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbS90
ZXN0LmdsYikKKyAgICAgKiBAcGFyYW0gc2NlbmVGaWxlbmFtZSBhIHN0cmluZyB0aGF0IGRlZmlu
ZXMgdGhlIG5hbWUgb2YgdGhlIHNjZW5lIGZpbGUgb3Igc3RhcnRzIHdpdGggImRhdGE6IiBmb2xs
b3dpbmcgYnkgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHNjZW5lIG9yIGEgRmlsZSBv
YmplY3QgKGRlZmF1bHQ6IGVtcHR5IHN0cmluZykKKyAgICAgKiBAcGFyYW0gc2NlbmUgdGhlIGlu
c3RhbmNlIG9mIEJBQllMT04uU2NlbmUgdG8gYXBwZW5kIHRvCisgICAgICogQHBhcmFtIG9uU3Vj
Y2VzcyBhIGNhbGxiYWNrIHdpdGggYSBsaXN0IG9mIGltcG9ydGVkIG1lc2hlcywgcGFydGljbGVT
eXN0ZW1zLCBhbmQgc2tlbGV0b25zIHdoZW4gaW1wb3J0IHN1Y2NlZWRzCisgICAgICogQHBhcmFt
IG9uUHJvZ3Jlc3MgYSBjYWxsYmFjayB3aXRoIGEgcHJvZ3Jlc3MgZXZlbnQgZm9yIGVhY2ggZmls
ZSBiZWluZyBsb2FkZWQKKyAgICAgKiBAcGFyYW0gb25FcnJvciBhIGNhbGxiYWNrIHdpdGggdGhl
IHNjZW5lLCBhIG1lc3NhZ2UsIGFuZCBwb3NzaWJseSBhbiBleGNlcHRpb24gd2hlbiBpbXBvcnQg
ZmFpbHMKKyAgICAgKiBAcGFyYW0gcGx1Z2luRXh0ZW5zaW9uIHRoZSBleHRlbnNpb24gdXNlZCB0
byBkZXRlcm1pbmUgdGhlIHBsdWdpbgorICAgICAqIEByZXR1cm5zIFRoZSBsb2FkZWQgcGx1Z2lu
CisgICAgICovCisgICAgU2NlbmVMb2FkZXIuSW1wb3J0TWVzaCA9IGZ1bmN0aW9uIChtZXNoTmFt
ZXMsIHJvb3RVcmwsIHNjZW5lRmlsZW5hbWUsIHNjZW5lLCBvblN1Y2Nlc3MsIG9uUHJvZ3Jlc3Ms
IG9uRXJyb3IsIHBsdWdpbkV4dGVuc2lvbikgeworICAgICAgICBpZiAoc2NlbmVGaWxlbmFtZSA9
PT0gdm9pZCAwKSB7IHNjZW5lRmlsZW5hbWUgPSAiIjsgfQorICAgICAgICBpZiAoc2NlbmUgPT09
IHZvaWQgMCkgeyBzY2VuZSA9IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIkVuZ2luZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZTsgfQorICAgICAgICBp
ZiAob25TdWNjZXNzID09PSB2b2lkIDApIHsgb25TdWNjZXNzID0gbnVsbDsgfQorICAgICAgICBp
ZiAob25Qcm9ncmVzcyA9PT0gdm9pZCAwKSB7IG9uUHJvZ3Jlc3MgPSBudWxsOyB9CisgICAgICAg
IGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG51bGw7IH0KKyAgICAgICAgaWYg
KHBsdWdpbkV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IHBsdWdpbkV4dGVuc2lvbiA9IG51bGw7IH0K
KyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X19bIkxvZ2dlciJdLkVycm9yKCJObyBzY2VuZSBhdmFpbGFibGUg
dG8gaW1wb3J0IG1lc2ggdG8iKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9
CisgICAgICAgIHZhciBmaWxlSW5mbyA9IFNjZW5lTG9hZGVyLl9nZXRGaWxlSW5mbyhyb290VXJs
LCBzY2VuZUZpbGVuYW1lKTsKKyAgICAgICAgaWYgKCFmaWxlSW5mbykgeworICAgICAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGxvYWRpbmdUb2tlbiA9IHt9Owor
ICAgICAgICBzY2VuZS5fYWRkUGVuZGluZ0RhdGEobG9hZGluZ1Rva2VuKTsKKyAgICAgICAgdmFy
IGRpc3Bvc2VIYW5kbGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgc2NlbmUuX3JlbW92
ZVBlbmRpbmdEYXRhKGxvYWRpbmdUb2tlbik7CisgICAgICAgIH07CisgICAgICAgIHZhciBlcnJv
ckhhbmRsZXIgPSBmdW5jdGlvbiAobWVzc2FnZSwgZXhjZXB0aW9uKSB7CisgICAgICAgICAgICB2
YXIgZXJyb3JNZXNzYWdlID0gIlVuYWJsZSB0byBpbXBvcnQgbWVzaGVzIGZyb20gIiArIGZpbGVJ
bmZvLnVybCArICI6ICIgKyBtZXNzYWdlOworICAgICAgICAgICAgaWYgKG9uRXJyb3IpIHsKKyAg
ICAgICAgICAgICAgICBvbkVycm9yKHNjZW5lLCBlcnJvck1lc3NhZ2UsIGV4Y2VwdGlvbik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfTWlzY19s
b2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siTG9nZ2VyIl0uRXJyb3IoZXJyb3JN
ZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAvLyBzaG91bGQgdGhlIGV4Y2VwdGlvbiBiZSB0aHJv
d24/CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkaXNwb3NlSGFuZGxlcigpOworICAgICAg
ICB9OworICAgICAgICB2YXIgcHJvZ3Jlc3NIYW5kbGVyID0gb25Qcm9ncmVzcyA/IGZ1bmN0aW9u
IChldmVudCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBvblByb2dyZXNz
KGV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChlKSB7CisgICAgICAg
ICAgICAgICAgZXJyb3JIYW5kbGVyKCJFcnJvciBpbiBvblByb2dyZXNzIGNhbGxiYWNrOiAiICsg
ZSwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gOiB1bmRlZmluZWQ7CisgICAgICAgIHZh
ciBzdWNjZXNzSGFuZGxlciA9IGZ1bmN0aW9uIChtZXNoZXMsIHBhcnRpY2xlU3lzdGVtcywgc2tl
bGV0b25zLCBhbmltYXRpb25Hcm91cHMpIHsKKyAgICAgICAgICAgIHNjZW5lLmltcG9ydGVkTWVz
aGVzRmlsZXMucHVzaChmaWxlSW5mby51cmwpOworICAgICAgICAgICAgaWYgKG9uU3VjY2Vzcykg
eworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG9uU3VjY2Vzcyht
ZXNoZXMsIHBhcnRpY2xlU3lzdGVtcywgc2tlbGV0b25zLCBhbmltYXRpb25Hcm91cHMpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAg
ICAgICAgICBlcnJvckhhbmRsZXIoIkVycm9yIGluIG9uU3VjY2VzcyBjYWxsYmFjazogIiArIGUs
IGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNjZW5l
Ll9yZW1vdmVQZW5kaW5nRGF0YShsb2FkaW5nVG9rZW4pOworICAgICAgICB9OworICAgICAgICBy
ZXR1cm4gU2NlbmVMb2FkZXIuX2xvYWREYXRhKGZpbGVJbmZvLCBzY2VuZSwgZnVuY3Rpb24gKHBs
dWdpbiwgZGF0YSwgcmVzcG9uc2VVUkwpIHsKKyAgICAgICAgICAgIGlmIChwbHVnaW4ucmV3cml0
ZVJvb3RVUkwpIHsKKyAgICAgICAgICAgICAgICBmaWxlSW5mby5yb290VXJsID0gcGx1Z2luLnJl
d3JpdGVSb290VVJMKGZpbGVJbmZvLnJvb3RVcmwsIHJlc3BvbnNlVVJMKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChwbHVnaW4uaW1wb3J0TWVzaCkgeworICAgICAgICAgICAgICAg
IHZhciBzeW5jZWRQbHVnaW4gPSBwbHVnaW47CisgICAgICAgICAgICAgICAgdmFyIG1lc2hlcyA9
IG5ldyBBcnJheSgpOworICAgICAgICAgICAgICAgIHZhciBwYXJ0aWNsZVN5c3RlbXMgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b25zID0gbmV3IEFycmF5KCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFzeW5jZWRQbHVnaW4uaW1wb3J0TWVzaChtZXNoTmFtZXMsIHNj
ZW5lLCBkYXRhLCBmaWxlSW5mby5yb290VXJsLCBtZXNoZXMsIHBhcnRpY2xlU3lzdGVtcywgc2tl
bGV0b25zLCBlcnJvckhhbmRsZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2NlbmUubG9hZGluZ1BsdWdpbk5hbWUg
PSBwbHVnaW4ubmFtZTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzSGFuZGxlcihtZXNoZXMsIHBh
cnRpY2xlU3lzdGVtcywgc2tlbGV0b25zLCBbXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgYXN5bmNlZFBsdWdpbiA9IHBsdWdpbjsKKyAg
ICAgICAgICAgICAgICBhc3luY2VkUGx1Z2luLmltcG9ydE1lc2hBc3luYyhtZXNoTmFtZXMsIHNj
ZW5lLCBkYXRhLCBmaWxlSW5mby5yb290VXJsLCBwcm9ncmVzc0hhbmRsZXIsIGZpbGVJbmZvLm5h
bWUpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBzY2VuZS5s
b2FkaW5nUGx1Z2luTmFtZSA9IHBsdWdpbi5uYW1lOworICAgICAgICAgICAgICAgICAgICBzdWNj
ZXNzSGFuZGxlcihyZXN1bHQubWVzaGVzLCByZXN1bHQucGFydGljbGVTeXN0ZW1zLCByZXN1bHQu
c2tlbGV0b25zLCByZXN1bHQuYW5pbWF0aW9uR3JvdXBzKTsKKyAgICAgICAgICAgICAgICB9KS5j
YXRjaChmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVy
KGVycm9yLm1lc3NhZ2UsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwgcHJvZ3Jlc3NIYW5kbGVyLCBlcnJvckhhbmRsZXIsIGRpc3Bvc2VIYW5k
bGVyLCBwbHVnaW5FeHRlbnNpb24pOworICAgIH07CisgICAgLyoqCisgICAgICogSW1wb3J0IG1l
c2hlcyBpbnRvIGEgc2NlbmUKKyAgICAgKiBAcGFyYW0gbWVzaE5hbWVzIGFuIGFycmF5IG9mIG1l
c2ggbmFtZXMsIGEgc2luZ2xlIG1lc2ggbmFtZSwgb3IgZW1wdHkgc3RyaW5nIGZvciBhbGwgbWVz
aGVzIHRoYXQgZmlsdGVyIHdoYXQgbWVzaGVzIGFyZSBpbXBvcnRlZAorICAgICAqIEBwYXJhbSBy
b290VXJsIGEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgcm9vdCB1cmwgZm9yIHRoZSBzY2VuZSBh
bmQgcmVzb3VyY2VzIG9yIHRoZSBjb25jYXRlbmF0aW9uIG9mIHJvb3RVUkwgYW5kIGZpbGVuYW1l
IChlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbS90ZXN0LmdsYikKKyAgICAgKiBAcGFyYW0gc2NlbmVG
aWxlbmFtZSBhIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHNjZW5lIGZpbGUg
b3Igc3RhcnRzIHdpdGggImRhdGE6IiBmb2xsb3dpbmcgYnkgdGhlIHN0cmluZ2lmaWVkIHZlcnNp
b24gb2YgdGhlIHNjZW5lIG9yIGEgRmlsZSBvYmplY3QgKGRlZmF1bHQ6IGVtcHR5IHN0cmluZykK
KyAgICAgKiBAcGFyYW0gc2NlbmUgdGhlIGluc3RhbmNlIG9mIEJBQllMT04uU2NlbmUgdG8gYXBw
ZW5kIHRvCisgICAgICogQHBhcmFtIG9uUHJvZ3Jlc3MgYSBjYWxsYmFjayB3aXRoIGEgcHJvZ3Jl
c3MgZXZlbnQgZm9yIGVhY2ggZmlsZSBiZWluZyBsb2FkZWQKKyAgICAgKiBAcGFyYW0gcGx1Z2lu
RXh0ZW5zaW9uIHRoZSBleHRlbnNpb24gdXNlZCB0byBkZXRlcm1pbmUgdGhlIHBsdWdpbgorICAg
ICAqIEByZXR1cm5zIFRoZSBsb2FkZWQgbGlzdCBvZiBpbXBvcnRlZCBtZXNoZXMsIHBhcnRpY2xl
IHN5c3RlbXMsIHNrZWxldG9ucywgYW5kIGFuaW1hdGlvbiBncm91cHMKKyAgICAgKi8KKyAgICBT
Y2VuZUxvYWRlci5JbXBvcnRNZXNoQXN5bmMgPSBmdW5jdGlvbiAobWVzaE5hbWVzLCByb290VXJs
LCBzY2VuZUZpbGVuYW1lLCBzY2VuZSwgb25Qcm9ncmVzcywgcGx1Z2luRXh0ZW5zaW9uKSB7Cisg
ICAgICAgIGlmIChzY2VuZUZpbGVuYW1lID09PSB2b2lkIDApIHsgc2NlbmVGaWxlbmFtZSA9ICIi
OyB9CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gX0VuZ2luZXNfZW5n
aW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRW5naW5lU3RvcmUiXS5MYXN0
Q3JlYXRlZFNjZW5lOyB9CisgICAgICAgIGlmIChvblByb2dyZXNzID09PSB2b2lkIDApIHsgb25Q
cm9ncmVzcyA9IG51bGw7IH0KKyAgICAgICAgaWYgKHBsdWdpbkV4dGVuc2lvbiA9PT0gdm9pZCAw
KSB7IHBsdWdpbkV4dGVuc2lvbiA9IG51bGw7IH0KKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNl
KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIFNjZW5lTG9hZGVyLklt
cG9ydE1lc2gobWVzaE5hbWVzLCByb290VXJsLCBzY2VuZUZpbGVuYW1lLCBzY2VuZSwgZnVuY3Rp
b24gKG1lc2hlcywgcGFydGljbGVTeXN0ZW1zLCBza2VsZXRvbnMsIGFuaW1hdGlvbkdyb3Vwcykg
eworICAgICAgICAgICAgICAgIHJlc29sdmUoeworICAgICAgICAgICAgICAgICAgICBtZXNoZXM6
IG1lc2hlcywKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGVTeXN0ZW1zOiBwYXJ0aWNsZVN5
c3RlbXMsCisgICAgICAgICAgICAgICAgICAgIHNrZWxldG9uczogc2tlbGV0b25zLAorICAgICAg
ICAgICAgICAgICAgICBhbmltYXRpb25Hcm91cHM6IGFuaW1hdGlvbkdyb3VwcworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSwgb25Qcm9ncmVzcywgZnVuY3Rpb24gKHNjZW5lLCBt
ZXNzYWdlLCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgICAgICByZWplY3QoZXhjZXB0aW9uIHx8
IG5ldyBFcnJvcihtZXNzYWdlKSk7CisgICAgICAgICAgICB9LCBwbHVnaW5FeHRlbnNpb24pOwor
ICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIExvYWQgYSBzY2VuZQorICAgICAq
IEBwYXJhbSByb290VXJsIGEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgcm9vdCB1cmwgZm9yIHRo
ZSBzY2VuZSBhbmQgcmVzb3VyY2VzIG9yIHRoZSBjb25jYXRlbmF0aW9uIG9mIHJvb3RVUkwgYW5k
IGZpbGVuYW1lIChlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbS90ZXN0LmdsYikKKyAgICAgKiBAcGFy
YW0gc2NlbmVGaWxlbmFtZSBhIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHNj
ZW5lIGZpbGUgb3Igc3RhcnRzIHdpdGggImRhdGE6IiBmb2xsb3dpbmcgYnkgdGhlIHN0cmluZ2lm
aWVkIHZlcnNpb24gb2YgdGhlIHNjZW5lIG9yIGEgRmlsZSBvYmplY3QgKGRlZmF1bHQ6IGVtcHR5
IHN0cmluZykKKyAgICAgKiBAcGFyYW0gZW5naW5lIGlzIHRoZSBpbnN0YW5jZSBvZiBCQUJZTE9O
LkVuZ2luZSB0byB1c2UgdG8gY3JlYXRlIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBvblN1Y2Nl
c3MgYSBjYWxsYmFjayB3aXRoIHRoZSBzY2VuZSB3aGVuIGltcG9ydCBzdWNjZWVkcworICAgICAq
IEBwYXJhbSBvblByb2dyZXNzIGEgY2FsbGJhY2sgd2l0aCBhIHByb2dyZXNzIGV2ZW50IGZvciBl
YWNoIGZpbGUgYmVpbmcgbG9hZGVkCisgICAgICogQHBhcmFtIG9uRXJyb3IgYSBjYWxsYmFjayB3
aXRoIHRoZSBzY2VuZSwgYSBtZXNzYWdlLCBhbmQgcG9zc2libHkgYW4gZXhjZXB0aW9uIHdoZW4g
aW1wb3J0IGZhaWxzCisgICAgICogQHBhcmFtIHBsdWdpbkV4dGVuc2lvbiB0aGUgZXh0ZW5zaW9u
IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBwbHVnaW4KKyAgICAgKiBAcmV0dXJucyBUaGUgbG9hZGVk
IHBsdWdpbgorICAgICAqLworICAgIFNjZW5lTG9hZGVyLkxvYWQgPSBmdW5jdGlvbiAocm9vdFVy
bCwgc2NlbmVGaWxlbmFtZSwgZW5naW5lLCBvblN1Y2Nlc3MsIG9uUHJvZ3Jlc3MsIG9uRXJyb3Is
IHBsdWdpbkV4dGVuc2lvbikgeworICAgICAgICBpZiAoc2NlbmVGaWxlbmFtZSA9PT0gdm9pZCAw
KSB7IHNjZW5lRmlsZW5hbWUgPSAiIjsgfQorICAgICAgICBpZiAoZW5naW5lID09PSB2b2lkIDAp
IHsgZW5naW5lID0gX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZEVuZ2luZTsgfQorICAgICAgICBpZiAob25T
dWNjZXNzID09PSB2b2lkIDApIHsgb25TdWNjZXNzID0gbnVsbDsgfQorICAgICAgICBpZiAob25Q
cm9ncmVzcyA9PT0gdm9pZCAwKSB7IG9uUHJvZ3Jlc3MgPSBudWxsOyB9CisgICAgICAgIGlmIChv
bkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG51bGw7IH0KKyAgICAgICAgaWYgKHBsdWdp
bkV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IHBsdWdpbkV4dGVuc2lvbiA9IG51bGw7IH0KKyAgICAg
ICAgaWYgKCFlbmdpbmUpIHsKKyAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlRvb2xzIl0uRXJyb3IoIk5vIGVuZ2luZSBhdmFpbGFibGUiKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTY2VuZUxv
YWRlci5BcHBlbmQocm9vdFVybCwgc2NlbmVGaWxlbmFtZSwgbmV3IF9zY2VuZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZSJdKGVuZ2luZSksIG9uU3VjY2Vzcywgb25Qcm9ncmVz
cywgb25FcnJvciwgcGx1Z2luRXh0ZW5zaW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIExv
YWQgYSBzY2VuZQorICAgICAqIEBwYXJhbSByb290VXJsIGEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0
aGUgcm9vdCB1cmwgZm9yIHRoZSBzY2VuZSBhbmQgcmVzb3VyY2VzIG9yIHRoZSBjb25jYXRlbmF0
aW9uIG9mIHJvb3RVUkwgYW5kIGZpbGVuYW1lIChlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbS90ZXN0
LmdsYikKKyAgICAgKiBAcGFyYW0gc2NlbmVGaWxlbmFtZSBhIHN0cmluZyB0aGF0IGRlZmluZXMg
dGhlIG5hbWUgb2YgdGhlIHNjZW5lIGZpbGUgb3Igc3RhcnRzIHdpdGggImRhdGE6IiBmb2xsb3dp
bmcgYnkgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHNjZW5lIG9yIGEgRmlsZSBvYmpl
Y3QgKGRlZmF1bHQ6IGVtcHR5IHN0cmluZykKKyAgICAgKiBAcGFyYW0gZW5naW5lIGlzIHRoZSBp
bnN0YW5jZSBvZiBCQUJZTE9OLkVuZ2luZSB0byB1c2UgdG8gY3JlYXRlIHRoZSBzY2VuZQorICAg
ICAqIEBwYXJhbSBvblByb2dyZXNzIGEgY2FsbGJhY2sgd2l0aCBhIHByb2dyZXNzIGV2ZW50IGZv
ciBlYWNoIGZpbGUgYmVpbmcgbG9hZGVkCisgICAgICogQHBhcmFtIHBsdWdpbkV4dGVuc2lvbiB0
aGUgZXh0ZW5zaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBwbHVnaW4KKyAgICAgKiBAcmV0dXJu
cyBUaGUgbG9hZGVkIHNjZW5lCisgICAgICovCisgICAgU2NlbmVMb2FkZXIuTG9hZEFzeW5jID0g
ZnVuY3Rpb24gKHJvb3RVcmwsIHNjZW5lRmlsZW5hbWUsIGVuZ2luZSwgb25Qcm9ncmVzcywgcGx1
Z2luRXh0ZW5zaW9uKSB7CisgICAgICAgIGlmIChzY2VuZUZpbGVuYW1lID09PSB2b2lkIDApIHsg
c2NlbmVGaWxlbmFtZSA9ICIiOyB9CisgICAgICAgIGlmIChlbmdpbmUgPT09IHZvaWQgMCkgeyBl
bmdpbmUgPSBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkRW5naW5lOyB9CisgICAgICAgIGlmIChvblByb2dy
ZXNzID09PSB2b2lkIDApIHsgb25Qcm9ncmVzcyA9IG51bGw7IH0KKyAgICAgICAgaWYgKHBsdWdp
bkV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IHBsdWdpbkV4dGVuc2lvbiA9IG51bGw7IH0KKyAgICAg
ICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAg
ICAgICAgIFNjZW5lTG9hZGVyLkxvYWQocm9vdFVybCwgc2NlbmVGaWxlbmFtZSwgZW5naW5lLCBm
dW5jdGlvbiAoc2NlbmUpIHsKKyAgICAgICAgICAgICAgICByZXNvbHZlKHNjZW5lKTsKKyAgICAg
ICAgICAgIH0sIG9uUHJvZ3Jlc3MsIGZ1bmN0aW9uIChzY2VuZSwgbWVzc2FnZSwgZXhjZXB0aW9u
KSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4Y2VwdGlvbiB8fCBuZXcgRXJyb3IobWVzc2Fn
ZSkpOworICAgICAgICAgICAgfSwgcGx1Z2luRXh0ZW5zaW9uKTsKKyAgICAgICAgfSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBcHBlbmQgYSBzY2VuZQorICAgICAqIEBwYXJhbSByb290VXJs
IGEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgcm9vdCB1cmwgZm9yIHRoZSBzY2VuZSBhbmQgcmVz
b3VyY2VzIG9yIHRoZSBjb25jYXRlbmF0aW9uIG9mIHJvb3RVUkwgYW5kIGZpbGVuYW1lIChlLmcu
IGh0dHA6Ly9leGFtcGxlLmNvbS90ZXN0LmdsYikKKyAgICAgKiBAcGFyYW0gc2NlbmVGaWxlbmFt
ZSBhIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHNjZW5lIGZpbGUgb3Igc3Rh
cnRzIHdpdGggImRhdGE6IiBmb2xsb3dpbmcgYnkgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb24gb2Yg
dGhlIHNjZW5lIG9yIGEgRmlsZSBvYmplY3QgKGRlZmF1bHQ6IGVtcHR5IHN0cmluZykKKyAgICAg
KiBAcGFyYW0gc2NlbmUgaXMgdGhlIGluc3RhbmNlIG9mIEJBQllMT04uU2NlbmUgdG8gYXBwZW5k
IHRvCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBhIGNhbGxiYWNrIHdpdGggdGhlIHNjZW5lIHdo
ZW4gaW1wb3J0IHN1Y2NlZWRzCisgICAgICogQHBhcmFtIG9uUHJvZ3Jlc3MgYSBjYWxsYmFjayB3
aXRoIGEgcHJvZ3Jlc3MgZXZlbnQgZm9yIGVhY2ggZmlsZSBiZWluZyBsb2FkZWQKKyAgICAgKiBA
cGFyYW0gb25FcnJvciBhIGNhbGxiYWNrIHdpdGggdGhlIHNjZW5lLCBhIG1lc3NhZ2UsIGFuZCBw
b3NzaWJseSBhbiBleGNlcHRpb24gd2hlbiBpbXBvcnQgZmFpbHMKKyAgICAgKiBAcGFyYW0gcGx1
Z2luRXh0ZW5zaW9uIHRoZSBleHRlbnNpb24gdXNlZCB0byBkZXRlcm1pbmUgdGhlIHBsdWdpbgor
ICAgICAqIEByZXR1cm5zIFRoZSBsb2FkZWQgcGx1Z2luCisgICAgICovCisgICAgU2NlbmVMb2Fk
ZXIuQXBwZW5kID0gZnVuY3Rpb24gKHJvb3RVcmwsIHNjZW5lRmlsZW5hbWUsIHNjZW5lLCBvblN1
Y2Nlc3MsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IsIHBsdWdpbkV4dGVuc2lvbikgeworICAgICAgICBp
ZiAoc2NlbmVGaWxlbmFtZSA9PT0gdm9pZCAwKSB7IHNjZW5lRmlsZW5hbWUgPSAiIjsgfQorICAg
ICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IF9FbmdpbmVzX2VuZ2luZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkVuZ2luZVN0b3JlIl0uTGFzdENyZWF0ZWRT
Y2VuZTsgfQorICAgICAgICBpZiAob25TdWNjZXNzID09PSB2b2lkIDApIHsgb25TdWNjZXNzID0g
bnVsbDsgfQorICAgICAgICBpZiAob25Qcm9ncmVzcyA9PT0gdm9pZCAwKSB7IG9uUHJvZ3Jlc3Mg
PSBudWxsOyB9CisgICAgICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG51
bGw7IH0KKyAgICAgICAgaWYgKHBsdWdpbkV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IHBsdWdpbkV4
dGVuc2lvbiA9IG51bGw7IH0KKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgX01p
c2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkxvZ2dlciJdLkVycm9yKCJO
byBzY2VuZSBhdmFpbGFibGUgdG8gYXBwZW5kIHRvIik7CisgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgfQorICAgICAgICB2YXIgZmlsZUluZm8gPSBTY2VuZUxvYWRlci5fZ2V0Rmls
ZUluZm8ocm9vdFVybCwgc2NlbmVGaWxlbmFtZSk7CisgICAgICAgIGlmICghZmlsZUluZm8pIHsK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGlmIChTY2VuZUxv
YWRlci5TaG93TG9hZGluZ1NjcmVlbikgeworICAgICAgICAgICAgc2NlbmUuZ2V0RW5naW5lKCku
ZGlzcGxheUxvYWRpbmdVSSgpOworICAgICAgICB9CisgICAgICAgIHZhciBsb2FkaW5nVG9rZW4g
PSB7fTsKKyAgICAgICAgc2NlbmUuX2FkZFBlbmRpbmdEYXRhKGxvYWRpbmdUb2tlbik7CisgICAg
ICAgIHZhciBkaXNwb3NlSGFuZGxlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNjZW5l
Ll9yZW1vdmVQZW5kaW5nRGF0YShsb2FkaW5nVG9rZW4pOworICAgICAgICAgICAgc2NlbmUuZ2V0
RW5naW5lKCkuaGlkZUxvYWRpbmdVSSgpOworICAgICAgICB9OworICAgICAgICB2YXIgZXJyb3JI
YW5kbGVyID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGV4Y2VwdGlvbikgeworICAgICAgICAgICAgdmFy
IGVycm9yTWVzc2FnZSA9ICJVbmFibGUgdG8gbG9hZCBmcm9tICIgKyBmaWxlSW5mby51cmwgKyAo
bWVzc2FnZSA/ICI6ICIgKyBtZXNzYWdlIDogIiIpOworICAgICAgICAgICAgaWYgKG9uRXJyb3Ip
IHsKKyAgICAgICAgICAgICAgICBvbkVycm9yKHNjZW5lLCBlcnJvck1lc3NhZ2UsIGV4Y2VwdGlv
bik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBf
TWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siTG9nZ2VyIl0uRXJyb3Io
ZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAvLyBzaG91bGQgdGhlIGV4Y2VwdGlvbiBi
ZSB0aHJvd24/CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkaXNwb3NlSGFuZGxlcigpOwor
ICAgICAgICB9OworICAgICAgICB2YXIgcHJvZ3Jlc3NIYW5kbGVyID0gb25Qcm9ncmVzcyA/IGZ1
bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBvblBy
b2dyZXNzKGV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChlKSB7Cisg
ICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyKCJFcnJvciBpbiBvblByb2dyZXNzIGNhbGxiYWNr
IiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gOiB1bmRlZmluZWQ7CisgICAgICAgIHZh
ciBzdWNjZXNzSGFuZGxlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChvblN1Y2Nl
c3MpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBvblN1Y2Nl
c3Moc2NlbmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoZSkg
eworICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIoIkVycm9yIGluIG9uU3VjY2VzcyBj
YWxsYmFjayIsIGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHNjZW5lLl9yZW1vdmVQZW5kaW5nRGF0YShsb2FkaW5nVG9rZW4pOworICAgICAgICB9Owor
ICAgICAgICByZXR1cm4gU2NlbmVMb2FkZXIuX2xvYWREYXRhKGZpbGVJbmZvLCBzY2VuZSwgZnVu
Y3Rpb24gKHBsdWdpbiwgZGF0YSkgeworICAgICAgICAgICAgaWYgKHBsdWdpbi5sb2FkKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHN5bmNlZFBsdWdpbiA9IHBsdWdpbjsKKyAgICAgICAgICAgICAg
ICBpZiAoIXN5bmNlZFBsdWdpbi5sb2FkKHNjZW5lLCBkYXRhLCBmaWxlSW5mby5yb290VXJsLCBl
cnJvckhhbmRsZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgc2NlbmUubG9hZGluZ1BsdWdpbk5hbWUgPSBwbHVnaW4u
bmFtZTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzSGFuZGxlcigpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGFzeW5jZWRQbHVnaW4gPSBw
bHVnaW47CisgICAgICAgICAgICAgICAgYXN5bmNlZFBsdWdpbi5sb2FkQXN5bmMoc2NlbmUsIGRh
dGEsIGZpbGVJbmZvLnJvb3RVcmwsIHByb2dyZXNzSGFuZGxlciwgZmlsZUluZm8ubmFtZSkudGhl
bihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLmxvYWRpbmdQbHVnaW5O
YW1lID0gcGx1Z2luLm5hbWU7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NIYW5kbGVyKCk7
CisgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAgICAg
ICAgICAgICAgIGVycm9ySGFuZGxlcihlcnJvci5tZXNzYWdlLCBlcnJvcik7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoU2NlbmVMb2FkZXIuU2hv
d0xvYWRpbmdTY3JlZW4pIHsKKyAgICAgICAgICAgICAgICBzY2VuZS5leGVjdXRlV2hlblJlYWR5
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgc2NlbmUuZ2V0RW5naW5lKCkuaGlk
ZUxvYWRpbmdVSSgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9LCBwcm9ncmVzc0hhbmRsZXIsIGVycm9ySGFuZGxlciwgZGlzcG9zZUhhbmRsZXIsIHBsdWdp
bkV4dGVuc2lvbik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBcHBlbmQgYSBzY2VuZQorICAg
ICAqIEBwYXJhbSByb290VXJsIGEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgcm9vdCB1cmwgZm9y
IHRoZSBzY2VuZSBhbmQgcmVzb3VyY2VzIG9yIHRoZSBjb25jYXRlbmF0aW9uIG9mIHJvb3RVUkwg
YW5kIGZpbGVuYW1lIChlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbS90ZXN0LmdsYikKKyAgICAgKiBA
cGFyYW0gc2NlbmVGaWxlbmFtZSBhIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhl
IHNjZW5lIGZpbGUgb3Igc3RhcnRzIHdpdGggImRhdGE6IiBmb2xsb3dpbmcgYnkgdGhlIHN0cmlu
Z2lmaWVkIHZlcnNpb24gb2YgdGhlIHNjZW5lIG9yIGEgRmlsZSBvYmplY3QgKGRlZmF1bHQ6IGVt
cHR5IHN0cmluZykKKyAgICAgKiBAcGFyYW0gc2NlbmUgaXMgdGhlIGluc3RhbmNlIG9mIEJBQllM
T04uU2NlbmUgdG8gYXBwZW5kIHRvCisgICAgICogQHBhcmFtIG9uUHJvZ3Jlc3MgYSBjYWxsYmFj
ayB3aXRoIGEgcHJvZ3Jlc3MgZXZlbnQgZm9yIGVhY2ggZmlsZSBiZWluZyBsb2FkZWQKKyAgICAg
KiBAcGFyYW0gcGx1Z2luRXh0ZW5zaW9uIHRoZSBleHRlbnNpb24gdXNlZCB0byBkZXRlcm1pbmUg
dGhlIHBsdWdpbgorICAgICAqIEByZXR1cm5zIFRoZSBnaXZlbiBzY2VuZQorICAgICAqLworICAg
IFNjZW5lTG9hZGVyLkFwcGVuZEFzeW5jID0gZnVuY3Rpb24gKHJvb3RVcmwsIHNjZW5lRmlsZW5h
bWUsIHNjZW5lLCBvblByb2dyZXNzLCBwbHVnaW5FeHRlbnNpb24pIHsKKyAgICAgICAgaWYgKHNj
ZW5lRmlsZW5hbWUgPT09IHZvaWQgMCkgeyBzY2VuZUZpbGVuYW1lID0gIiI7IH0KKyAgICAgICAg
aWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7
IH0KKyAgICAgICAgaWYgKG9uUHJvZ3Jlc3MgPT09IHZvaWQgMCkgeyBvblByb2dyZXNzID0gbnVs
bDsgfQorICAgICAgICBpZiAocGx1Z2luRXh0ZW5zaW9uID09PSB2b2lkIDApIHsgcGx1Z2luRXh0
ZW5zaW9uID0gbnVsbDsgfQorICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJl
c29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgU2NlbmVMb2FkZXIuQXBwZW5kKHJvb3RVcmws
IHNjZW5lRmlsZW5hbWUsIHNjZW5lLCBmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICAgICAgICAgICAg
ICByZXNvbHZlKHNjZW5lKTsKKyAgICAgICAgICAgIH0sIG9uUHJvZ3Jlc3MsIGZ1bmN0aW9uIChz
Y2VuZSwgbWVzc2FnZSwgZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4Y2Vw
dGlvbiB8fCBuZXcgRXJyb3IobWVzc2FnZSkpOworICAgICAgICAgICAgfSwgcGx1Z2luRXh0ZW5z
aW9uKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBMb2FkIGEgc2NlbmUg
aW50byBhbiBhc3NldCBjb250YWluZXIKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBhIHN0cmluZyB0
aGF0IGRlZmluZXMgdGhlIHJvb3QgdXJsIGZvciB0aGUgc2NlbmUgYW5kIHJlc291cmNlcyBvciB0
aGUgY29uY2F0ZW5hdGlvbiBvZiByb290VVJMIGFuZCBmaWxlbmFtZSAoZS5nLiBodHRwOi8vZXhh
bXBsZS5jb20vdGVzdC5nbGIpCisgICAgICogQHBhcmFtIHNjZW5lRmlsZW5hbWUgYSBzdHJpbmcg
dGhhdCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBzY2VuZSBmaWxlIG9yIHN0YXJ0cyB3aXRoICJk
YXRhOiIgZm9sbG93aW5nIGJ5IHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSBzY2VuZSBv
ciBhIEZpbGUgb2JqZWN0IChkZWZhdWx0OiBlbXB0eSBzdHJpbmcpCisgICAgICogQHBhcmFtIHNj
ZW5lIGlzIHRoZSBpbnN0YW5jZSBvZiBCQUJZTE9OLlNjZW5lIHRvIGFwcGVuZCB0byAoZGVmYXVs
dDogbGFzdCBjcmVhdGVkIHNjZW5lKQorICAgICAqIEBwYXJhbSBvblN1Y2Nlc3MgYSBjYWxsYmFj
ayB3aXRoIHRoZSBzY2VuZSB3aGVuIGltcG9ydCBzdWNjZWVkcworICAgICAqIEBwYXJhbSBvblBy
b2dyZXNzIGEgY2FsbGJhY2sgd2l0aCBhIHByb2dyZXNzIGV2ZW50IGZvciBlYWNoIGZpbGUgYmVp
bmcgbG9hZGVkCisgICAgICogQHBhcmFtIG9uRXJyb3IgYSBjYWxsYmFjayB3aXRoIHRoZSBzY2Vu
ZSwgYSBtZXNzYWdlLCBhbmQgcG9zc2libHkgYW4gZXhjZXB0aW9uIHdoZW4gaW1wb3J0IGZhaWxz
CisgICAgICogQHBhcmFtIHBsdWdpbkV4dGVuc2lvbiB0aGUgZXh0ZW5zaW9uIHVzZWQgdG8gZGV0
ZXJtaW5lIHRoZSBwbHVnaW4KKyAgICAgKiBAcmV0dXJucyBUaGUgbG9hZGVkIHBsdWdpbgorICAg
ICAqLworICAgIFNjZW5lTG9hZGVyLkxvYWRBc3NldENvbnRhaW5lciA9IGZ1bmN0aW9uIChyb290
VXJsLCBzY2VuZUZpbGVuYW1lLCBzY2VuZSwgb25TdWNjZXNzLCBvblByb2dyZXNzLCBvbkVycm9y
LCBwbHVnaW5FeHRlbnNpb24pIHsKKyAgICAgICAgaWYgKHNjZW5lRmlsZW5hbWUgPT09IHZvaWQg
MCkgeyBzY2VuZUZpbGVuYW1lID0gIiI7IH0KKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDAp
IHsgc2NlbmUgPSBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7IH0KKyAgICAgICAgaWYgKG9uU3Vj
Y2VzcyA9PT0gdm9pZCAwKSB7IG9uU3VjY2VzcyA9IG51bGw7IH0KKyAgICAgICAgaWYgKG9uUHJv
Z3Jlc3MgPT09IHZvaWQgMCkgeyBvblByb2dyZXNzID0gbnVsbDsgfQorICAgICAgICBpZiAob25F
cnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBudWxsOyB9CisgICAgICAgIGlmIChwbHVnaW5F
eHRlbnNpb24gPT09IHZvaWQgMCkgeyBwbHVnaW5FeHRlbnNpb24gPSBudWxsOyB9CisgICAgICAg
IGlmICghc2NlbmUpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fWyJMb2dnZXIiXS5FcnJvcigiTm8gc2NlbmUgYXZhaWxhYmxlIHRvIGxvYWQg
YXNzZXQgY29udGFpbmVyIHRvIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICB2YXIgZmlsZUluZm8gPSBTY2VuZUxvYWRlci5fZ2V0RmlsZUluZm8ocm9vdFVy
bCwgc2NlbmVGaWxlbmFtZSk7CisgICAgICAgIGlmICghZmlsZUluZm8pIHsKKyAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBsb2FkaW5nVG9rZW4gPSB7fTsK
KyAgICAgICAgc2NlbmUuX2FkZFBlbmRpbmdEYXRhKGxvYWRpbmdUb2tlbik7CisgICAgICAgIHZh
ciBkaXNwb3NlSGFuZGxlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNjZW5lLl9yZW1v
dmVQZW5kaW5nRGF0YShsb2FkaW5nVG9rZW4pOworICAgICAgICB9OworICAgICAgICB2YXIgZXJy
b3JIYW5kbGVyID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGV4Y2VwdGlvbikgeworICAgICAgICAgICAg
dmFyIGVycm9yTWVzc2FnZSA9ICJVbmFibGUgdG8gbG9hZCBhc3NldHMgZnJvbSAiICsgZmlsZUlu
Zm8udXJsICsgKG1lc3NhZ2UgPyAiOiAiICsgbWVzc2FnZSA6ICIiKTsKKyAgICAgICAgICAgIGlm
IChvbkVycm9yKSB7CisgICAgICAgICAgICAgICAgb25FcnJvcihzY2VuZSwgZXJyb3JNZXNzYWdl
LCBleGNlcHRpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkxvZ2dl
ciJdLkVycm9yKGVycm9yTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgLy8gc2hvdWxkIHRoZSBl
eGNlcHRpb24gYmUgdGhyb3duPworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlzcG9zZUhh
bmRsZXIoKTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHByb2dyZXNzSGFuZGxlciA9IG9uUHJv
Z3Jlc3MgPyBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgb25Qcm9ncmVzcyhldmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRj
aCAoZSkgeworICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcigiRXJyb3IgaW4gb25Qcm9ncmVz
cyBjYWxsYmFjayIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IDogdW5kZWZpbmVkOwor
ICAgICAgICB2YXIgc3VjY2Vzc0hhbmRsZXIgPSBmdW5jdGlvbiAoYXNzZXRzKSB7CisgICAgICAg
ICAgICBpZiAob25TdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICAgICAgb25TdWNjZXNzKGFzc2V0cyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcigiRXJy
b3IgaW4gb25TdWNjZXNzIGNhbGxiYWNrIiwgZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc2NlbmUuX3JlbW92ZVBlbmRpbmdEYXRhKGxvYWRpbmdUb2tl
bik7CisgICAgICAgIH07CisgICAgICAgIHJldHVybiBTY2VuZUxvYWRlci5fbG9hZERhdGEoZmls
ZUluZm8sIHNjZW5lLCBmdW5jdGlvbiAocGx1Z2luLCBkYXRhKSB7CisgICAgICAgICAgICBpZiAo
cGx1Z2luLmxvYWRBc3NldENvbnRhaW5lcikgeworICAgICAgICAgICAgICAgIHZhciBzeW5jZWRQ
bHVnaW4gPSBwbHVnaW47CisgICAgICAgICAgICAgICAgdmFyIGFzc2V0Q29udGFpbmVyID0gc3lu
Y2VkUGx1Z2luLmxvYWRBc3NldENvbnRhaW5lcihzY2VuZSwgZGF0YSwgZmlsZUluZm8ucm9vdFVy
bCwgZXJyb3JIYW5kbGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFzc2V0Q29udGFpbmVyKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgc2NlbmUubG9hZGluZ1BsdWdpbk5hbWUgPSBwbHVnaW4ubmFtZTsKKyAgICAgICAg
ICAgICAgICBzdWNjZXNzSGFuZGxlcihhc3NldENvbnRhaW5lcik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIGlmIChwbHVnaW4ubG9hZEFzc2V0Q29udGFpbmVyQXN5bmMpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgYXN5bmNlZFBsdWdpbiA9IHBsdWdpbjsKKyAgICAgICAgICAgICAg
ICBhc3luY2VkUGx1Z2luLmxvYWRBc3NldENvbnRhaW5lckFzeW5jKHNjZW5lLCBkYXRhLCBmaWxl
SW5mby5yb290VXJsLCBwcm9ncmVzc0hhbmRsZXIsIGZpbGVJbmZvLm5hbWUpLnRoZW4oZnVuY3Rp
b24gKGFzc2V0Q29udGFpbmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLmxvYWRpbmdQ
bHVnaW5OYW1lID0gcGx1Z2luLm5hbWU7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NIYW5k
bGVyKGFzc2V0Q29udGFpbmVyKTsKKyAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAo
ZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyKGVycm9yLm1lc3NhZ2Us
IGVycm9yKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcigiTG9hZEFzc2V0Q29udGFpbmVy
IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwbHVnaW4uIFBsdWdpbiBkaWQgbm90IHByb3ZpZGUg
YSBsb2FkQXNzZXRDb250YWluZXIgb3IgbG9hZEFzc2V0Q29udGFpbmVyQXN5bmMgbWV0aG9kLiIp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFNjZW5lTG9hZGVyLlNob3dMb2FkaW5n
U2NyZWVuKSB7CisgICAgICAgICAgICAgICAgc2NlbmUuZXhlY3V0ZVdoZW5SZWFkeShmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLmdldEVuZ2luZSgpLmhpZGVMb2FkaW5n
VUkoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgcHJv
Z3Jlc3NIYW5kbGVyLCBlcnJvckhhbmRsZXIsIGRpc3Bvc2VIYW5kbGVyLCBwbHVnaW5FeHRlbnNp
b24pOworICAgIH07CisgICAgLyoqCisgICAgICogTG9hZCBhIHNjZW5lIGludG8gYW4gYXNzZXQg
Y29udGFpbmVyCisgICAgICogQHBhcmFtIHJvb3RVcmwgYSBzdHJpbmcgdGhhdCBkZWZpbmVzIHRo
ZSByb290IHVybCBmb3IgdGhlIHNjZW5lIGFuZCByZXNvdXJjZXMgb3IgdGhlIGNvbmNhdGVuYXRp
b24gb2Ygcm9vdFVSTCBhbmQgZmlsZW5hbWUgKGUuZy4gaHR0cDovL2V4YW1wbGUuY29tL3Rlc3Qu
Z2xiKQorICAgICAqIEBwYXJhbSBzY2VuZUZpbGVuYW1lIGEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0
aGUgbmFtZSBvZiB0aGUgc2NlbmUgZmlsZSBvciBzdGFydHMgd2l0aCAiZGF0YToiIGZvbGxvd2lu
ZyBieSB0aGUgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgc2NlbmUgKGRlZmF1bHQ6IGVtcHR5
IHN0cmluZykKKyAgICAgKiBAcGFyYW0gc2NlbmUgaXMgdGhlIGluc3RhbmNlIG9mIFNjZW5lIHRv
IGFwcGVuZCB0bworICAgICAqIEBwYXJhbSBvblByb2dyZXNzIGEgY2FsbGJhY2sgd2l0aCBhIHBy
b2dyZXNzIGV2ZW50IGZvciBlYWNoIGZpbGUgYmVpbmcgbG9hZGVkCisgICAgICogQHBhcmFtIHBs
dWdpbkV4dGVuc2lvbiB0aGUgZXh0ZW5zaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBwbHVnaW4K
KyAgICAgKiBAcmV0dXJucyBUaGUgbG9hZGVkIGFzc2V0IGNvbnRhaW5lcgorICAgICAqLworICAg
IFNjZW5lTG9hZGVyLkxvYWRBc3NldENvbnRhaW5lckFzeW5jID0gZnVuY3Rpb24gKHJvb3RVcmws
IHNjZW5lRmlsZW5hbWUsIHNjZW5lLCBvblByb2dyZXNzLCBwbHVnaW5FeHRlbnNpb24pIHsKKyAg
ICAgICAgaWYgKHNjZW5lRmlsZW5hbWUgPT09IHZvaWQgMCkgeyBzY2VuZUZpbGVuYW1lID0gIiI7
IH0KKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBfRW5naW5lc19lbmdp
bmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFbmdpbmVTdG9yZSJdLkxhc3RD
cmVhdGVkU2NlbmU7IH0KKyAgICAgICAgaWYgKG9uUHJvZ3Jlc3MgPT09IHZvaWQgMCkgeyBvblBy
b2dyZXNzID0gbnVsbDsgfQorICAgICAgICBpZiAocGx1Z2luRXh0ZW5zaW9uID09PSB2b2lkIDAp
IHsgcGx1Z2luRXh0ZW5zaW9uID0gbnVsbDsgfQorICAgICAgICByZXR1cm4gbmV3IFByb21pc2Uo
ZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgU2NlbmVMb2FkZXIuTG9h
ZEFzc2V0Q29udGFpbmVyKHJvb3RVcmwsIHNjZW5lRmlsZW5hbWUsIHNjZW5lLCBmdW5jdGlvbiAo
YXNzZXRDb250YWluZXIpIHsKKyAgICAgICAgICAgICAgICByZXNvbHZlKGFzc2V0Q29udGFpbmVy
KTsKKyAgICAgICAgICAgIH0sIG9uUHJvZ3Jlc3MsIGZ1bmN0aW9uIChzY2VuZSwgbWVzc2FnZSwg
ZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4Y2VwdGlvbiB8fCBuZXcgRXJy
b3IobWVzc2FnZSkpOworICAgICAgICAgICAgfSwgcGx1Z2luRXh0ZW5zaW9uKTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBObyBsb2dnaW5nIHdoaWxlIGxvYWRpbmcKKyAg
ICAgKi8KKyAgICBTY2VuZUxvYWRlci5OT19MT0dHSU5HID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlNDRU5FTE9BREVSX05PX0xP
R0dJTkc7CisgICAgLyoqCisgICAgICogTWluaW1hbCBsb2dnaW5nIHdoaWxlIGxvYWRpbmcKKyAg
ICAgKi8KKyAgICBTY2VuZUxvYWRlci5NSU5JTUFMX0xPR0dJTkcgPSBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uU0NFTkVMT0FERVJf
TUlOSU1BTF9MT0dHSU5HOworICAgIC8qKgorICAgICAqIFN1bW1hcnkgbG9nZ2luZyB3aGlsZSBs
b2FkaW5nCisgICAgICovCisgICAgU2NlbmVMb2FkZXIuU1VNTUFSWV9MT0dHSU5HID0gX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLlND
RU5FTE9BREVSX1NVTU1BUllfTE9HR0lORzsKKyAgICAvKioKKyAgICAgKiBEZXRhaWxsZWQgbG9n
Z2luZyB3aGlsZSBsb2FkaW5nCisgICAgICovCisgICAgU2NlbmVMb2FkZXIuREVUQUlMRURfTE9H
R0lORyA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJD
b25zdGFudHMiXS5TQ0VORUxPQURFUl9ERVRBSUxFRF9MT0dHSU5HOworICAgIC8vIE1lbWJlcnMK
KyAgICAvKioKKyAgICAgKiBFdmVudCByYWlzZWQgd2hlbiBhIHBsdWdpbiBpcyB1c2VkIHRvIGxv
YWQgYSBzY2VuZQorICAgICAqLworICAgIFNjZW5lTG9hZGVyLk9uUGx1Z2luQWN0aXZhdGVkT2Jz
ZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIk9ic2VydmFibGUiXSgpOworICAgIFNjZW5lTG9hZGVyLl9yZWdpc3RlcmVkUGx1Z2lucyA9
IHt9OworICAgIHJldHVybiBTY2VuZUxvYWRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTG9hZGluZy9zY2VuZUxvYWRlckZsYWdzLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL0xvYWRpbmcvc2NlbmVMb2FkZXJG
bGFncy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNjZW5lTG9hZGVyRmxhZ3MgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVMb2FkZXJGbGFncyIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gU2NlbmVMb2FkZXJGbGFnczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50
cyIpOworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gcmVwcmVzZW50IGRhdGEgbG9hZGluZyBwcm9n
cmVzc2lvbgorICovCit2YXIgU2NlbmVMb2FkZXJGbGFncyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uICgpIHsKKyAgICBmdW5jdGlvbiBTY2VuZUxvYWRlckZsYWdzKCkgeworICAgIH0KKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmVMb2FkZXJGbGFncywgIkZvcmNlRnVsbFNjZW5lTG9h
ZGluZ0ZvckluY3JlbWVudGFsIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBz
ZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGVudGlyZSBzY2VuZSBtdXN0IGJlIGxvYWRlZCBl
dmVuIGlmIHNjZW5lIGNvbnRhaW5zIGluY3JlbWVudGFsIGRhdGEKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFNjZW5lTG9hZGVyRmxh
Z3MuX0ZvcmNlRnVsbFNjZW5lTG9hZGluZ0ZvckluY3JlbWVudGFsOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgU2NlbmVMb2FkZXJGbGFn
cy5fRm9yY2VGdWxsU2NlbmVMb2FkaW5nRm9ySW5jcmVtZW50YWwgPSB2YWx1ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lTG9hZGVyRmxhZ3MsICJT
aG93TG9hZGluZ1NjcmVlbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0
cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBsb2FkaW5nIHNjcmVlbiBtdXN0IGJlIGRpc3BsYXll
ZCB3aGlsZSBsb2FkaW5nIGEgc2NlbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFNjZW5lTG9hZGVyRmxhZ3MuX1Nob3dMb2FkaW5n
U2NyZWVuOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgU2NlbmVMb2FkZXJGbGFncy5fU2hvd0xvYWRpbmdTY3JlZW4gPSB2YWx1ZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lTG9hZGVyRmxh
Z3MsICJsb2dnaW5nTGV2ZWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRo
ZSBjdXJyZW50IGxvZ2dpbmcgbGV2ZWwgKHdoaWxlIGxvYWRpbmcgdGhlIHNjZW5lKQorICAgICAg
ICAgKiBAaWdub3JlbmFtaW5nCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiBTY2VuZUxvYWRlckZsYWdzLl9sb2dnaW5nTGV2ZWw7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBT
Y2VuZUxvYWRlckZsYWdzLl9sb2dnaW5nTGV2ZWwgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lTG9hZGVyRmxhZ3MsICJDbGVhbkJvbmVN
YXRyaXhXZWlnaHRzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXQgYSBi
b29sZWFuIGluZGljYXRpbmcgaWYgbWF0cml4IHdlaWdodHMgbXVzdCBiZSBjbGVhbmVkIHVwb24g
bG9hZGluZworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gU2NlbmVMb2FkZXJGbGFncy5fQ2xlYW5Cb25lTWF0cml4V2VpZ2h0czsKKyAg
ICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIFNj
ZW5lTG9hZGVyRmxhZ3MuX0NsZWFuQm9uZU1hdHJpeFdlaWdodHMgPSB2YWx1ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgLy8gRmxhZ3MKKyAgICBTY2VuZUxvYWRlckZsYWdzLl9Gb3JjZUZ1bGxT
Y2VuZUxvYWRpbmdGb3JJbmNyZW1lbnRhbCA9IGZhbHNlOworICAgIFNjZW5lTG9hZGVyRmxhZ3Mu
X1Nob3dMb2FkaW5nU2NyZWVuID0gdHJ1ZTsKKyAgICBTY2VuZUxvYWRlckZsYWdzLl9DbGVhbkJv
bmVNYXRyaXhXZWlnaHRzID0gZmFsc2U7CisgICAgU2NlbmVMb2FkZXJGbGFncy5fbG9nZ2luZ0xl
dmVsID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNv
bnN0YW50cyJdLlNDRU5FTE9BREVSX05PX0xPR0dJTkc7CisgICAgcmV0dXJuIFNjZW5lTG9hZGVy
RmxhZ3M7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9CYWNr
Z3JvdW5kL2JhY2tncm91bmRNYXRlcmlhbC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvQmFj
a2dyb3VuZC9iYWNrZ3JvdW5kTWF0ZXJpYWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBCYWNrZ3JvdW5kTWF0ZXJpYWwgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQmFja2dyb3VuZE1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCYWNrZ3JvdW5kTWF0
ZXJpYWw7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9k
ZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRv
cnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19zbWFydEFycmF5X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9N
aXNjL3NtYXJ0QXJyYXkgKi8gIi4vTWlzYy9zbWFydEFycmF5LnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dl
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVzL2J1ZmZlciAqLyAiLi9N
ZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGVyaWFscy9tYXRlcmlhbEhlbHBlciAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsRGVmaW5lc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWF0ZXJpYWxzL21hdGVyaWFsRGVmaW5lcyAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWxEZWZp
bmVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19wdXNoTWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9wdXNoTWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL3B1c2hNYXRlcmlh
bC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfaW1hZ2VQcm9jZXNz
aW5nQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0
aW9uICovICIuL01hdGVyaWFscy9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1
cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvdHlwZVN0b3JlICov
ICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGVy
aWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9tYXRlcmlhbEZsYWdzICovICIuL01hdGVyaWFscy9tYXRlcmlhbEZsYWdzLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRo
cy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfU2hhZGVyc19iYWNrZ3JvdW5kX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vU2hhZGVycy9iYWNr
Z3JvdW5kLmZyYWdtZW50ICovICIuL1NoYWRlcnMvYmFja2dyb3VuZC5mcmFnbWVudC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2JhY2tncm91bmRfdmVydGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
U2hhZGVycy9iYWNrZ3JvdW5kLnZlcnRleCAqLyAiLi9TaGFkZXJzL2JhY2tncm91bmQudmVydGV4
LnRzIik7CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisvKioKKyAqIEJhY2tn
cm91bmQgbWF0ZXJpYWwgZGVmaW5lcyBkZWZpbml0aW9uLgorICogQGhpZGRlbiBNYWlubHkgaW50
ZXJuYWwgVXNlCisgKi8KK3ZhciBCYWNrZ3JvdW5kTWF0ZXJpYWxEZWZpbmVzID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKEJhY2tncm91bmRNYXRlcmlhbERlZmluZXMsIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3Igb2YgdGhlIGRlZmluZXMuCisgICAgICovCisg
ICAgZnVuY3Rpb24gQmFja2dyb3VuZE1hdGVyaWFsRGVmaW5lcygpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFRydWUgaWYgdGhlIGRpZmZ1c2UgdGV4dHVyZSBpcyBpbiB1c2UuCisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5ESUZGVVNFID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
ZGlyZWN0IFVWIGNoYW5uZWwgdG8gdXNlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuRElG
RlVTRURJUkVDVFVWID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRydWUgaWYgdGhlIGRp
ZmZ1c2UgdGV4dHVyZSBpcyBpbiBnYW1tYSBzcGFjZS4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLkdBTU1BRElGRlVTRSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogVHJ1ZSBp
ZiB0aGUgZGlmZnVzZSB0ZXh0dXJlIGhhcyBvcGFjaXR5IGluIHRoZSBhbHBoYSBjaGFubmVsLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuRElGRlVTRUhBU0FMUEhBID0gZmFsc2U7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBUcnVlIGlmIHlvdSB3YW50IHRoZSBtYXRlcmlhbCB0byBmYWRl
IHRvIHRyYW5zcGFyZW50IGF0IGdyYXppbmcgYW5nbGUuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5PUEFDSVRZRlJFU05FTCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogVHJ1
ZSBpZiBhbiBleHRyYSBibHVyIG5lZWRzIHRvIGJlIGFkZGVkIGluIHRoZSByZWZsZWN0aW9uLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTkJMVVIgPSBmYWxzZTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFRydWUgaWYgeW91IHdhbnQgdGhlIG1hdGVyaWFsIHRvIGZhZGUg
dG8gcmVmbGVjdGlvbiBhdCBncmF6aW5nIGFuZ2xlLgorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMuUkVGTEVDVElPTkZSRVNORUwgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRy
dWUgaWYgeW91IHdhbnQgdGhlIG1hdGVyaWFsIHRvIGZhbGxvZmYgYXMgZmFyIGFzIHlvdSBtb3Zl
IGF3YXkgZnJvbSB0aGUgc2NlbmUgY2VudGVyLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
UkVGTEVDVElPTkZBTExPRkYgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZhbHNl
IGlmIHRoZSBjdXJyZW50IFdlYmdsIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgdGhl
IHRleHR1cmUgbG9kIGV4dGVuc2lvbi4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLlRFWFRV
UkVMT0RTVVBQT1JUID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUcnVlIHRvIGVu
c3VyZSB0aGUgZGF0YSBhcmUgcHJlbXVsdGlwbGllZC4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLlBSRU1VTFRJUExZQUxQSEEgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRy
dWUgaWYgdGhlIHRleHR1cmUgY29udGFpbnMgY29va2VkIFJHQiB2YWx1ZXMgYW5kIG5vdCBncmF5
IHNjYWxlZCBtdWx0aXBsaWVycy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLlVTRVJHQkNP
TE9SID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUcnVlIGlmIGhpZ2hsaWdodCBh
bmQgc2hhZG93IGxldmVscyBoYXZlIGJlZW4gc3BlY2lmaWVkLiBJdCBjYW4gaGVscCBlbnN1cmlu
ZyB0aGUgbWFpbiBwZXJjZWl2ZWQgY29sb3IKKyAgICAgICAgICogc3RheXMgYWxpZ25lZCB3aXRo
IHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5V
U0VISUdITElHSFRBTkRTSEFET1dDT0xPUlMgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFRydWUgdG8gYWRkIG5vaXNlIGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgYmFuZGluZyBlZmZl
Y3QuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5OT0lTRSA9IGZhbHNlOworICAgICAgICAv
KioKKyAgICAgICAgICogaXMgdGhlIHJlZmxlY3Rpb24gdGV4dHVyZSBpbiBCR1IgY29sb3Igc2No
ZW1lPworICAgICAgICAgKiBNYWlubHkgdXNlZCB0byBzb2x2ZSBhIGJ1ZyBpbiBpb3MxMCB2aWRl
byB0YWcKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05CR1IgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuSU1BR0VQUk9DRVNTSU5HID0gZmFsc2U7CisgICAgICAgIF90aGlzLlZJ
R05FVFRFID0gZmFsc2U7CisgICAgICAgIF90aGlzLlZJR05FVFRFQkxFTkRNT0RFTVVMVElQTFkg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVklHTkVUVEVCTEVORE1PREVPUEFRVUUgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuVE9ORU1BUFBJTkcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVE9ORU1B
UFBJTkdfQUNFUyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DT05UUkFTVCA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5DT0xPUkNVUlZFUyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DT0xPUkdSQURJ
TkcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ09MT1JHUkFESU5HM0QgPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuU0FNUExFUjNER1JFRU5ERVBUSCA9IGZhbHNlOworICAgICAgICBfdGhpcy5TQU1Q
TEVSM0RCR1JNQVAgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuSU1BR0VQUk9DRVNTSU5HUE9TVFBS
T0NFU1MgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuRVhQT1NVUkUgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuTVVMVElWSUVXID0gZmFsc2U7CisgICAgICAgIC8vIFJlZmxlY3Rpb24uCisgICAgICAg
IF90aGlzLlJFRkxFQ1RJT04gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF8z
RCA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX1NQSEVSSUNBTCA9IGZhbHNl
OworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX1BMQU5BUiA9IGZhbHNlOworICAgICAgICBf
dGhpcy5SRUZMRUNUSU9OTUFQX0NVQklDID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJ
T05NQVBfUFJPSkVDVElPTiA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX1NL
WUJPWCA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX1NLWUJPWF9UUkFOU0ZP
Uk1FRCA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX0VYUExJQ0lUID0gZmFs
c2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSID0gZmFsc2U7
CisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSX0ZJWEVEID0gZmFs
c2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05NQVBfTUlSUk9SRURFUVVJUkVDVEFOR1VMQVJf
RklYRUQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuSU5WRVJUQ1VCSUNNQVAgPSBmYWxzZTsKKyAg
ICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF9PUFBPU0lURVogPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuTE9ESU5SRUZMRUNUSU9OQUxQSEEgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuR0FNTUFSRUZM
RUNUSU9OID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJHQkRSRUZMRUNUSU9OID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLkVRVUlSRUNUQU5HVUxBUl9SRUxGRUNUSU9OX0ZPViA9IGZhbHNlOworICAg
ICAgICAvLyBEZWZhdWx0IEJKUy4KKyAgICAgICAgX3RoaXMuTUFJTlVWMSA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5NQUlOVVYyID0gZmFsc2U7CisgICAgICAgIF90aGlzLlVWMSA9IGZhbHNlOwor
ICAgICAgICBfdGhpcy5VVjIgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ0xJUFBMQU5FID0gZmFs
c2U7CisgICAgICAgIF90aGlzLkNMSVBQTEFORTIgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ0xJ
UFBMQU5FMyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DTElQUExBTkU0ID0gZmFsc2U7CisgICAg
ICAgIF90aGlzLlBPSU5UU0laRSA9IGZhbHNlOworICAgICAgICBfdGhpcy5GT0cgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuTk9STUFMID0gZmFsc2U7CisgICAgICAgIF90aGlzLk5VTV9CT05FX0lO
RkxVRU5DRVJTID0gMDsKKyAgICAgICAgX3RoaXMuQm9uZXNQZXJNZXNoID0gMDsKKyAgICAgICAg
X3RoaXMuSU5TVEFOQ0VTID0gZmFsc2U7CisgICAgICAgIF90aGlzLlNIQURPV0ZMT0FUID0gZmFs
c2U7CisgICAgICAgIF90aGlzLnJlYnVpbGQoKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAg
IH0KKyAgICByZXR1cm4gQmFja2dyb3VuZE1hdGVyaWFsRGVmaW5lczsKK30oX01hdGVyaWFsc19t
YXRlcmlhbERlZmluZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTWF0ZXJpYWxEZWZp
bmVzIl0pKTsKKy8qKgorICogQmFja2dyb3VuZCBtYXRlcmlhbCB1c2VkIHRvIGNyZWF0ZSBhbiBl
ZmZpY2llbnQgZW52aXJvbmVtZW50IGFyb3VuZCB5b3VyIHNjZW5lLgorICovCit2YXIgQmFja2dy
b3VuZE1hdGVyaWFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEJhY2tncm91bmRN
YXRlcmlhbCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBCYWNrZ3Jv
dW5kIE1hdGVyaWFsIGluIHRoZSBnaXZlbiBzY2VuZQorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBm
cmllbmRseSBuYW1lIG9mIHRoZSBtYXRlcmlhbAorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2Nl
bmUgdG8gYWRkIHRoZSBtYXRlcmlhbCB0bworICAgICAqLworICAgIGZ1bmN0aW9uIEJhY2tncm91
bmRNYXRlcmlhbChuYW1lLCBzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2Fs
bCh0aGlzLCBuYW1lLCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEtl
eSBsaWdodCBDb2xvciAobXVsdGlwbHkgYWdhaW5zdCB0aGUgZW52aXJvbmVtZW50IHRleHR1cmUp
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5wcmltYXJ5Q29sb3IgPSBfTWF0aHNfbWF0aF9j
b2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siQ29sb3IzIl0uV2hpdGUoKTsKKyAg
ICAgICAgX3RoaXMuX3ByaW1hcnlDb2xvclNoYWRvd0xldmVsID0gMDsKKyAgICAgICAgX3RoaXMu
X3ByaW1hcnlDb2xvckhpZ2hsaWdodExldmVsID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFJlZmxlY3Rpb24gVGV4dHVyZSB1c2VkIGluIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICogU2hv
dWxkIGJlIGF1dGhvciBpbiBhIHNwZWNpZmljIHdheSBmb3IgdGhlIGJlc3QgcmVzdWx0IChyZWZl
ciB0byB0aGUgZG9jdW1lbnRhdGlvbikuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5yZWZs
ZWN0aW9uVGV4dHVyZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZWZsZWN0aW9u
IFRleHR1cmUgbGV2ZWwgb2YgYmx1ci4KKyAgICAgICAgICoKKyAgICAgICAgICogQ2FuIGJlIHVz
ZSB0byByZXVzZSBhbiBleGlzdGluZyBIRFIgVGV4dHVyZSBhbmQgdGFyZ2V0IGEgc3BlY2lmaWMg
TE9EIHRvIHByZXZlbnQgYXV0aG9yaW5nIHRoZQorICAgICAgICAgKiB0ZXh0dXJlIHR3aWNlLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucmVmbGVjdGlvbkJsdXIgPSAwOworICAgICAgICAv
KioKKyAgICAgICAgICogRGlmZnVzZSBUZXh0dXJlIHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAg
ICAgICAgKiBTaG91bGQgYmUgYXV0aG9yIGluIGEgc3BlY2lmaWMgd2F5IGZvciB0aGUgYmVzdCBy
ZXN1bHQgKHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uKS4KKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLmRpZmZ1c2VUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX3NoYWRvd0xpZ2h0
cyA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZ5IHRoZSBsaXN0IG9mIGxp
Z2h0cyBjYXN0aW5nIHNoYWRvdyBvbiB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqIEFsbCBzY2Vu
ZSBzaGFkb3cgbGlnaHRzIHdpbGwgYmUgaW5jbHVkZWQgaWYgbnVsbC4KKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLnNoYWRvd0xpZ2h0cyA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBIZWxwcyBhZGp1c3RpbmcgdGhlIHNoYWRvdyB0byBhIHNvZnRlciBsZXZlbCBpZiByZXF1aXJl
ZC4KKyAgICAgICAgICogMCBtZWFucyBibGFjayBzaGFkb3dzIGFuZCAxIG1lYW5zIG5vIHNoYWRv
d3MuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5zaGFkb3dMZXZlbCA9IDA7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBJbiBjYXNlIG9mIG9wYWNpdHkgRnJlc25lbCBvciByZWZsZWN0aW9u
IGZhbGxvZmYsIHRoaXMgaXMgdXNlIGFzIGEgc2NlbmUgY2VudGVyLgorICAgICAgICAgKiBJdCBp
cyB1c3VhbGx5IHplcm8gYnV0IG1pZ2h0IGJlIGludGVyZXN0aW5nIHRvIG1vZGlmeSBhY2NvcmRp
bmcgdG8geW91ciBzZXR1cC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnNjZW5lQ2VudGVy
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3Rv
cjMiXS5aZXJvKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIGhlbHBzIHNwZWNpZnlp
bmcgdGhhdCB0aGUgbWF0ZXJpYWwgaXMgZmFsbGluZyBvZmYgdG8gdGhlIHNreSBib3ggYXQgZ3Jh
emluZyBhbmdsZS4KKyAgICAgICAgICogVGhpcyBoZWxwcyBlbnN1cmluZyBhIG5pY2UgdHJhbnNp
dGlvbiB3aGVuIHRoZSBjYW1lcmEgZ29lcyB1bmRlciB0aGUgZ3JvdW5kLgorICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMub3BhY2l0eUZyZXNuZWwgPSB0cnVlOworICAgICAgICAvKioKKyAgICAg
ICAgICogVGhpcyBoZWxwcyBzcGVjaWZ5aW5nIHRoYXQgdGhlIG1hdGVyaWFsIGlzIGZhbGxpbmcg
b2ZmIGZyb20gZGlmZnVzZSB0byB0aGUgcmVmbGVjdGlvbiB0ZXh0dXJlIGF0IGdyYXppbmcgYW5n
bGUuCisgICAgICAgICAqIFRoaXMgaGVscHMgYWRkaW5nIGEgbWlycm9yIHRleHR1cmUgb24gdGhl
IGdyb3VuZC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnJlZmxlY3Rpb25GcmVzbmVsID0g
ZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIGhlbHBzIHNwZWNpZnlpbmcgdGhl
IGZhbGxvZmYgcmFkaXVzIG9mZiB0aGUgcmVmbGVjdGlvbiB0ZXh0dXJlIGZyb20gdGhlIHNjZW5l
Q2VudGVyLgorICAgICAgICAgKiBUaGlzIGhlbHBzIGFkZGluZyBhIG5pY2UgZmFsbG9mZiBlZmZl
Y3QgdG8gdGhlIHJlZmxlY3Rpb24gaWYgdXNlZCBhcyBhIG1pcnJvciBmb3IgaW5zdGFuY2UuCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5yZWZsZWN0aW9uRmFsbG9mZkRpc3RhbmNlID0gMC4w
OworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBzcGVjaWZpZXMgdGhlIHdlaWdodCBvZiB0
aGUgcmVmbGVjdGlvbiBhZ2FpbnN0IHRoZSBiYWNrZ3JvdW5kIGluIGNhc2Ugb2YgcmVmbGVjdGlv
biBGcmVzbmVsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucmVmbGVjdGlvbkFtb3VudCA9
IDEuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgc3BlY2lmaWVzIHRoZSB3ZWlnaHQg
b2YgdGhlIHJlZmxlY3Rpb24gYXQgZ3JhemluZyBhbmdsZS4KKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLnJlZmxlY3Rpb25SZWZsZWN0YW5jZTAgPSAwLjA1OworICAgICAgICAvKioKKyAgICAg
ICAgICogVGhpcyBzcGVjaWZpZXMgdGhlIHdlaWdodCBvZiB0aGUgcmVmbGVjdGlvbiBhdCBhIHBl
cnBlbmRpY3VsYXIgcG9pbnQgb2Ygdmlldy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnJl
ZmxlY3Rpb25SZWZsZWN0YW5jZTkwID0gMC41OworICAgICAgICAvKioKKyAgICAgICAgICogSGVs
cHMgdG8gZGlyZWN0bHkgdXNlIHRoZSBtYXBzIGNoYW5uZWxzIGluc3RlYWQgb2YgdGhlaXIgbGV2
ZWwuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy51c2VSR0JDb2xvciA9IHRydWU7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBUaGlzIGhlbHBzIHJlZHVjaW5nIHRoZSBiYW5kaW5nIGVmZmVj
dCB0aGF0IGNvdWxkIG9jY3VyIG9uIHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuZW5hYmxlTm9pc2UgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2Zvdk11bHRpcGxp
ZXIgPSAxLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgdGhlIEZPViBhZGp1c3Rt
ZW50IGZlYXR1cmUgY29udHJvbGxlZCBieSBmb3ZNdWx0aXBsaWVyLgorICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMudXNlRXF1aXJlY3Rhbmd1bGFyRk9WID0gZmFsc2U7CisgICAgICAgIF90aGlz
Ll9tYXhTaW11bHRhbmVvdXNMaWdodHMgPSA0OworICAgICAgICAvKioKKyAgICAgICAgICogTnVt
YmVyIG9mIFNpbXVsdGFuZW91cyBsaWdodHMgYWxsb3dlZCBvbiB0aGUgbWF0ZXJpYWwuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5tYXhTaW11bHRhbmVvdXNMaWdodHMgPSA0OworICAgICAg
ICAvKioKKyAgICAgICAgICogS2VlcCB0cmFjayBvZiB0aGUgaW1hZ2UgcHJvY2Vzc2luZyBvYnNl
cnZlciB0byBhbGxvdyBkaXNwb3NlIGFuZCByZXBsYWNlLgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuX2ltYWdlUHJvY2Vzc2luZ09ic2VydmVyID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIER1ZSB0byBhIGJ1ZyBpbiBpT1MxMCwgdmlkZW8gdGFncyAod2hpY2ggYXJlIHVzaW5n
IHRoZSBiYWNrZ3JvdW5kIG1hdGVyaWFsKSBhcmUgaW4gQkdSIGFuZCBub3QgUkdCLgorICAgICAg
ICAgKiBTZXR0aW5nIHRoaXMgZmxhZyB0byB0cnVlIChub3QgZG9uZSBhdXRvbWF0aWNhbGx5ISkg
d2lsbCBjb252ZXJ0IGl0IGJhY2sgdG8gUkdCLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
c3dpdGNoVG9CR1IgPSBmYWxzZTsKKyAgICAgICAgLy8gVGVtcCB2YWx1ZXMga2VwdCBhcyBjYWNo
ZSBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRzID0gbmV3IF9N
aXNjX3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU21hcnRBcnJheSJd
KDE2KTsKKyAgICAgICAgX3RoaXMuX3JlZmxlY3Rpb25Db250cm9scyA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZWN0b3I0Il0uWmVybygpOworICAg
ICAgICBfdGhpcy5fd2hpdGUgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTVfX1siQ29sb3IzIl0uV2hpdGUoKTsKKyAgICAgICAgX3RoaXMuX3ByaW1hcnlTaGFk
b3dDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9f
WyJDb2xvcjMiXS5CbGFjaygpOworICAgICAgICBfdGhpcy5fcHJpbWFyeUhpZ2hsaWdodENvbG9y
ID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIkNvbG9y
MyJdLkJsYWNrKCk7CisgICAgICAgIC8vIFNldHVwIHRoZSBkZWZhdWx0IHByb2Nlc3NpbmcgY29u
ZmlndXJhdGlvbiB0byB0aGUgc2NlbmUuCisgICAgICAgIF90aGlzLl9hdHRhY2hJbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uKG51bGwpOworICAgICAgICBfdGhpcy5nZXRSZW5kZXJUYXJnZXRU
ZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRz
LnJlc2V0KCk7CisgICAgICAgICAgICBpZiAoX3RoaXMuX2RpZmZ1c2VUZXh0dXJlICYmIF90aGlz
Ll9kaWZmdXNlVGV4dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIF90aGlz
Ll9yZW5kZXJUYXJnZXRzLnB1c2goX3RoaXMuX2RpZmZ1c2VUZXh0dXJlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChfdGhpcy5fcmVmbGVjdGlvblRleHR1cmUgJiYgX3RoaXMuX3Jl
ZmxlY3Rpb25UZXh0dXJlLmlzUmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgX3RoaXMu
X3JlbmRlclRhcmdldHMucHVzaChfdGhpcy5fcmVmbGVjdGlvblRleHR1cmUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9yZW5kZXJUYXJnZXRzOworICAgICAgICB9
OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiX3BlcmNlcHR1YWxDb2xvciIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEV4cGVyaW1lbnRhbCBJbnRlcm5hbCBVc2UgT25seS4KKyAg
ICAgICAgICoKKyAgICAgICAgICogS2V5IGxpZ2h0IENvbG9yIGluICJwZXJjZXB0dWFsIHZhbHVl
IiBtZWFuaW5nIHRoZSBjb2xvciB5b3Ugd291bGQgbGlrZSB0byBzZWUgb24gc2NyZWVuLgorICAg
ICAgICAgKiBUaGlzIGFjdHMgYXMgYSBoZWxwZXIgdG8gc2V0IHRoZSBwcmltYXJ5IGNvbG9yIHRv
IGEgbW9yZSAiaHVtYW4gZnJpZW5kbHkiIHZhbHVlLgorICAgICAgICAgKiBDb252ZXJzaW9uIHRv
IGxpbmVhciBzcGFjZSBhcyB3ZWxsIGFzIGV4cG9zdXJlIGFuZCB0b25lIG1hcHBpbmcgY29ycmVj
dGlvbiB3aWxsIGJlIGFwcGxpZWQgdG8ga2VlcCB0aGUKKyAgICAgICAgICogb3V0cHV0IGNvbG9y
IGFzIGNsb3NlIGFzIHBvc3NpYmxlIGZyb20gdGhlIGNob3NlbiB2YWx1ZS4KKyAgICAgICAgICog
KFRoaXMgZG9lcyBub3QgYWNjb3VudCBmb3IgY29udHJhc3QgY29sb3IgZ3JhZGluZyBhbmQgY29s
b3IgY3VydmVzIGFzIHRoZXkgYXJlIGNvbnNpZGVyZWQgcG9zdCBlZmZlY3QgYW5kIG5vdCBkaXJl
Y3RseQorICAgICAgICAgKiBwYXJ0IG9mIGxpZ2h0aW5nIHNldHVwLikKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19wZXJj
ZXB0dWFsQ29sb3I7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICB0aGlzLl9fcGVyY2VwdHVhbENvbG9yID0gdmFsdWU7CisgICAgICAgICAg
ICB0aGlzLl9jb21wdXRlUHJpbWFyeUNvbG9yRnJvbVBlcmNlcHR1YWxDb2xvcigpOworICAgICAg
ICAgICAgdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzTGlnaHRzRGlydHkoKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhY2tncm91bmRNYXRlcmlhbC5wcm90
b3R5cGUsICJwcmltYXJ5Q29sb3JTaGFkb3dMZXZlbCIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERlZmluZXMgdGhlIGxldmVsIG9mIHRoZSBzaGFkb3dzIChkYXJrIGFyZWEgb2YgdGhlIHJl
ZmxlY3Rpb24gbWFwKSBpbiBvcmRlciB0byBoZWxwIHNjYWxpbmcgdGhlIGNvbG9ycy4KKyAgICAg
ICAgICogVGhlIGNvbG9yIG9wcG9zaXRlIHRvIHRoZSBwcmltYXJ5IGNvbG9yIGlzIHVzZWQgYXQg
dGhlIGxldmVsIGNob3NlbiB0byBkZWZpbmUgd2hhdCB0aGUgYmxhY2sgYXJlYSB3b3VsZCBsb29r
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fcHJpbWFyeUNvbG9yU2hhZG93TGV2ZWw7CisgICAgICAgIH0sCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9wcmltYXJ5Q29sb3JT
aGFkb3dMZXZlbCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fY29tcHV0ZVByaW1hcnlDb2xv
cnMoKTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0xpZ2h0c0RpcnR5KCk7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYWNrZ3JvdW5k
TWF0ZXJpYWwucHJvdG90eXBlLCAicHJpbWFyeUNvbG9ySGlnaGxpZ2h0TGV2ZWwiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBsZXZlbCBvZiB0aGUgaGlnaGxpaWdodHMg
KGhpZ2hsaWdodCBhcmVhIG9mIHRoZSByZWZsZWN0aW9uIG1hcCkgaW4gb3JkZXIgdG8gaGVscCBz
Y2FsaW5nIHRoZSBjb2xvcnMuCisgICAgICAgICAqIFRoZSBwcmltYXJ5IGNvbG9yIGlzIHVzZWQg
YXQgdGhlIGxldmVsIGNob3NlbiB0byBkZWZpbmUgd2hhdCB0aGUgd2hpdGUgYXJlYSB3b3VsZCBs
b29rLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fcHJpbWFyeUNvbG9ySGlnaGxpZ2h0TGV2ZWw7CisgICAgICAgIH0sCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9wcmltYXJ5
Q29sb3JIaWdobGlnaHRMZXZlbCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fY29tcHV0ZVBy
aW1hcnlDb2xvcnMoKTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0xpZ2h0
c0RpcnR5KCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShC
YWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAicmVmbGVjdGlvblN0YW5kYXJkRnJlc25lbFdl
aWdodCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHJlZmxlY3Rpb24gcmVm
bGVjdGFuY2UgZnJlc25lbCB2YWx1ZXMgYWNjb3JkaW5nIHRvIHRoZSBkZWZhdWx0IHN0YW5kYXJk
CisgICAgICAgICAqIGVtcGlyaWNhbGx5IGtub3cgdG8gd29yayB3ZWxsIDotKQorICAgICAgICAg
Ki8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciByZWZs
ZWN0aW9uV2VpZ2h0ID0gdmFsdWU7CisgICAgICAgICAgICBpZiAocmVmbGVjdGlvbldlaWdodCA8
IDAuNSkgeworICAgICAgICAgICAgICAgIHJlZmxlY3Rpb25XZWlnaHQgPSByZWZsZWN0aW9uV2Vp
Z2h0ICogMi4wOworICAgICAgICAgICAgICAgIHRoaXMucmVmbGVjdGlvblJlZmxlY3RhbmNlMCA9
IEJhY2tncm91bmRNYXRlcmlhbC5TdGFuZGFyZFJlZmxlY3RhbmNlMCAqIHJlZmxlY3Rpb25XZWln
aHQ7CisgICAgICAgICAgICAgICAgdGhpcy5yZWZsZWN0aW9uUmVmbGVjdGFuY2U5MCA9IEJhY2tn
cm91bmRNYXRlcmlhbC5TdGFuZGFyZFJlZmxlY3RhbmNlOTAgKiByZWZsZWN0aW9uV2VpZ2h0Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVmbGVj
dGlvbldlaWdodCA9IHJlZmxlY3Rpb25XZWlnaHQgKiAyLjAgLSAxLjA7CisgICAgICAgICAgICAg
ICAgdGhpcy5yZWZsZWN0aW9uUmVmbGVjdGFuY2UwID0gQmFja2dyb3VuZE1hdGVyaWFsLlN0YW5k
YXJkUmVmbGVjdGFuY2UwICsgKDEuMCAtIEJhY2tncm91bmRNYXRlcmlhbC5TdGFuZGFyZFJlZmxl
Y3RhbmNlMCkgKiByZWZsZWN0aW9uV2VpZ2h0OworICAgICAgICAgICAgICAgIHRoaXMucmVmbGVj
dGlvblJlZmxlY3RhbmNlOTAgPSBCYWNrZ3JvdW5kTWF0ZXJpYWwuU3RhbmRhcmRSZWZsZWN0YW5j
ZTkwICsgKDEuMCAtIEJhY2tncm91bmRNYXRlcmlhbC5TdGFuZGFyZFJlZmxlY3RhbmNlOTApICog
cmVmbGVjdGlvbldlaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJmb3ZN
dWx0aXBsaWVyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGN1cnJlbnQgZm92KGZp
ZWxkIG9mIHZpZXcpIG11bHRpcGxpZXIsIDAuMCAtIDIuMC4gRGVmYXVsdHMgdG8gMS4wLiBMb3dl
ciB2YWx1ZXMgInpvb20gaW4iIGFuZCBoaWdoZXIgdmFsdWVzICJ6b29tIG91dCIuCisgICAgICAg
ICAqIEJlc3QgdXNlZCB3aGVuIHRyeWluZyB0byBpbXBsZW1lbnQgdmlzdWFsIHpvb20gZWZmZWN0
cyBsaWtlIGZpc2gtZXllIG9yIGJpbm9jdWxhcnMgd2hpbGUgbm90IGFkanVzdGluZyBjYW1lcmEg
Zm92LgorICAgICAgICAgKiBSZWNvbW1lbmRlZCB0byBiZSBrZWVwIGF0IDEuMCBleGNlcHQgZm9y
IHNwZWNpYWwgY2FzZXMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3ZNdWx0aXBsaWVyOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVl
KSkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gMS4wOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGhpcy5fZm92TXVsdGlwbGllciA9IE1hdGgubWF4KDAuMCwgTWF0aC5taW4oMi4wLCB2
YWx1ZSkpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyBhIG5l
dyBpbWFnZSBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24gdG8gdGhlIFBCUiBNYXRlcmlhbC4KKyAg
ICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiAoaWYgbnVsbCB0aGUgc2NlbmUgY29uZmlndXJhdGlv
biB3aWxsIGJlIHVzZSkKKyAgICAgKi8KKyAgICBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBl
Ll9hdHRhY2hJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKGNvbmZpZ3Vy
YXRpb24gPT09IHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBEZXRhY2hlcyBvYnNlcnZlci4KKyAg
ICAgICAgaWYgKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gJiYgdGhpcy5faW1h
Z2VQcm9jZXNzaW5nT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24ub25VcGRhdGVQYXJhbWV0ZXJzLnJlbW92ZSh0aGlzLl9pbWFnZVByb2Nl
c3NpbmdPYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgLy8gUGljayB0aGUgc2NlbmUgY29u
ZmlndXJhdGlvbiBpZiBuZWVkZWQuCisgICAgICAgIGlmICghY29uZmlndXJhdGlvbikgeworICAg
ICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiA9IHRoaXMuZ2V0U2Nl
bmUoKS5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiA9IGNv
bmZpZ3VyYXRpb247CisgICAgICAgIH0KKyAgICAgICAgLy8gQXR0YWNoZXMgb2JzZXJ2ZXIuCisg
ICAgICAgIGlmICh0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKSB7CisgICAgICAg
ICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdPYnNlcnZlciA9IHRoaXMuX2ltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24ub25VcGRhdGVQYXJhbWV0ZXJzLmFkZChmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX2NvbXB1dGVQcmltYXJ5Q29sb3JGcm9tUGVyY2VwdHVhbENvbG9y
KCk7CisgICAgICAgICAgICAgICAgX3RoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0ltYWdlUHJvY2Vz
c2luZ0RpcnR5KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJpbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgaW1hZ2UgcHJvY2Vzc2luZyBjb25maWd1cmF0aW9uIHVzZWQgZWl0aGVyIGluIHRoaXMgbWF0
ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uOworICAgICAgICB9
LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgRGVmYXVsdCBpbWFnZSBwcm9jZXNz
aW5nIGNvbmZpZ3VyYXRpb24gdXNlZCBlaXRoZXIgaW4gdGhlIHRoaXMgbWF0ZXJpYWwuCisgICAg
ICAgICAqCisgICAgICAgICAqIElmIHNldHMgdG8gbnVsbCwgdGhlIHNjZW5lIG9uZSBpcyBpbiB1
c2UuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgdGhpcy5fYXR0YWNoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbih2YWx1ZSk7Cisg
ICAgICAgICAgICAvLyBFbnN1cmUgdGhlIGVmZmVjdCB3aWxsIGJlIHJlYnVpbHQuCisgICAgICAg
ICAgICB0aGlzLl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5KCk7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYWNrZ3JvdW5kTWF0ZXJpYWwucHJv
dG90eXBlLCAiY2FtZXJhQ29sb3JDdXJ2ZXNFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGN1cnZlcyBlZmZlY3QgaXMgZW5hYmxlZC4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckN1cnZlc0VuYWJsZWQ7Cisg
ICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHdldGhlciB0aGUgY29sb3Ig
Y3VydmVzIGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbi5jb2xvckN1cnZlc0VuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1l
cmFDb2xvckdyYWRpbmdFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB3
ZXRoZXIgdGhlIGNvbG9yIGdyYWRpbmcgZWZmZWN0IGlzIGVuYWJsZWQuCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uY29sb3JHcmFkaW5nRW5hYmxlZDsKKyAgICAgICAgfSwK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0aGVyIHRoZSBjb2xvciBncmFkaW5nIGVm
ZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xv
ckdyYWRpbmdFbmFibGVkID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiY2FtZXJhVG9uZU1h
cHBpbmdFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB3ZXRoZXIgdG9u
ZW1hcHBpbmcgaXMgZW5hYmxlZCBvciBub3QuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25m
aWd1cmF0aW9uLnRvbmVNYXBwaW5nRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNldHMgd2V0aGVyIHRvbmVtYXBwaW5nIGlzIGVuYWJsZWQgb3Igbm90CisgICAg
ICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhp
cy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi50b25lTWFwcGluZ0VuYWJsZWQgPSB2YWx1
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhY2tncm91
bmRNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1lcmFFeHBvc3VyZSIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFRoZSBjYW1lcmEgZXhwb3N1cmUgdXNlZCBvbiB0aGlzIG1hdGVyaWFsLgorICAg
ICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGhlcmUgYW5kIG5vdCBpbiB0aGUgY2FtZXJhIHRvIGFs
bG93IGNvbnRyb2xsaW5nIGV4cG9zdXJlIHdpdGhvdXQgZnVsbCBzY3JlZW4gcG9zdCBwcm9jZXNz
LgorICAgICAgICAgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIGEgcGhvdG9ncmFwaGljIGV4cG9zdXJl
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5leHBvc3VyZTsKKyAgICAg
ICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjYW1lcmEgZXhwb3N1cmUgdXNlZCBv
biB0aGlzIG1hdGVyaWFsLgorICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGhlcmUgYW5kIG5v
dCBpbiB0aGUgY2FtZXJhIHRvIGFsbG93IGNvbnRyb2xsaW5nIGV4cG9zdXJlIHdpdGhvdXQgZnVs
bCBzY3JlZW4gcG9zdCBwcm9jZXNzLgorICAgICAgICAgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIGEg
cGhvdG9ncmFwaGljIGV4cG9zdXJlLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRp
b24uZXhwb3N1cmUgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1lcmFDb250cmFzdCIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgVGhlIGNhbWVyYSBjb250cmFzdCB1c2Vk
IG9uIHRoaXMgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
LmNvbnRyYXN0OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyBUaGUg
Y2FtZXJhIGNvbnRyYXN0IHVzZWQgb24gdGhpcyBtYXRlcmlhbC4KKyAgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uLmNvbnRyYXN0ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAi
Y2FtZXJhQ29sb3JHcmFkaW5nVGV4dHVyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIENvbG9yIEdyYWRpbmcgMkQgTG9va3VwIFRleHR1cmUuCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yR3JhZGluZ1RleHR1cmU7CisgICAgICAgIH0sCisg
ICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBDb2xvciBHcmFkaW5nIDJEIExvb2t1cCBU
ZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckdyYWRpbmdU
ZXh0dXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiY2FtZXJhQ29sb3JDdXJ2ZXMiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY29sb3IgZ3JhZGluZyBjdXJ2ZXMgcHJvdmlk
ZSBhZGRpdGlvbmFsIGNvbG9yIGFkanVzdG1uZW50IHRoYXQgaXMgYXBwbGllZCBhZnRlciBhbnkg
Y29sb3IgZ3JhZGluZyB0cmFuc2Zvcm0gKDNEIExVVCkuCisgICAgICAgICAqIFRoZXkgYWxsb3cg
YmFzaWMgYWRqdXN0bWVudCBvZiBzYXR1cmF0aW9uIGFuZCBzbWFsbCBleHBvc3VyZSBhZGp1c3Rt
ZW50cywgYWxvbmcgd2l0aCBjb2xvciBmaWx0ZXIgdGludGluZyB0byBwcm92aWRlIHdoaXRlIGJh
bGFuY2UgYWRqdXN0bWVudCBvciBtb3JlIHN0eWxpc3RpYyBlZmZlY3RzLgorICAgICAgICAgKiBU
aGVzZSBhcmUgc2ltaWxhciB0byBjb250cm9scyBmb3VuZCBpbiBtYW55IHByb2Zlc3Npb25hbCBp
bWFnaW5nIG9yIGNvbG9yaXN0IHNvZnR3YXJlLiBUaGUgZ2xvYmFsIGNvbnRyb2xzIGFyZSBhcHBs
aWVkIHRvIHRoZSBlbnRpcmUgaW1hZ2UuIEZvciBhZHZhbmNlZCB0dW5pbmcsIGV4dHJhIGNvbnRy
b2xzIGFyZSBwcm92aWRlZCB0byBhZGp1c3QgdGhlIHNoYWRvdywgbWlkdG9uZSBhbmQgaGlnaGxp
Z2h0IGFyZWFzIG9mIHRoZSBpbWFnZTsKKyAgICAgICAgICogY29ycmVzcG9uZGluZyB0byBsb3cg
bHVtaW5hbmNlLCBtZWRpdW0gbHVtaW5hbmNlLCBhbmQgaGlnaCBsdW1pbmFuY2UgYXJlYXMgcmVz
cGVjdGl2ZWx5LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yQ3Vy
dmVzOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIGdyYWRp
bmcgY3VydmVzIHByb3ZpZGUgYWRkaXRpb25hbCBjb2xvciBhZGp1c3RtbmVudCB0aGF0IGlzIGFw
cGxpZWQgYWZ0ZXIgYW55IGNvbG9yIGdyYWRpbmcgdHJhbnNmb3JtICgzRCBMVVQpLgorICAgICAg
ICAgKiBUaGV5IGFsbG93IGJhc2ljIGFkanVzdG1lbnQgb2Ygc2F0dXJhdGlvbiBhbmQgc21hbGwg
ZXhwb3N1cmUgYWRqdXN0bWVudHMsIGFsb25nIHdpdGggY29sb3IgZmlsdGVyIHRpbnRpbmcgdG8g
cHJvdmlkZSB3aGl0ZSBiYWxhbmNlIGFkanVzdG1lbnQgb3IgbW9yZSBzdHlsaXN0aWMgZWZmZWN0
cy4KKyAgICAgICAgICogVGhlc2UgYXJlIHNpbWlsYXIgdG8gY29udHJvbHMgZm91bmQgaW4gbWFu
eSBwcm9mZXNzaW9uYWwgaW1hZ2luZyBvciBjb2xvcmlzdCBzb2Z0d2FyZS4gVGhlIGdsb2JhbCBj
b250cm9scyBhcmUgYXBwbGllZCB0byB0aGUgZW50aXJlIGltYWdlLiBGb3IgYWR2YW5jZWQgdHVu
aW5nLCBleHRyYSBjb250cm9scyBhcmUgcHJvdmlkZWQgdG8gYWRqdXN0IHRoZSBzaGFkb3csIG1p
ZHRvbmUgYW5kIGhpZ2hsaWdodCBhcmVhcyBvZiB0aGUgaW1hZ2U7CisgICAgICAgICAqIGNvcnJl
c3BvbmRpbmcgdG8gbG93IGx1bWluYW5jZSwgbWVkaXVtIGx1bWluYW5jZSwgYW5kIGhpZ2ggbHVt
aW5hbmNlIGFyZWFzIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24uY29sb3JDdXJ2ZXMgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJoYXNSZW5kZXJU
YXJnZXRUZXh0dXJlcyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFu
IGluZGljYXRpbmcgdGhhdCBjdXJyZW50IG1hdGVyaWFsIG5lZWRzIHRvIHJlZ2lzdGVyIFJUVAor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fZGlmZnVzZVRleHR1cmUgJiYgdGhpcy5fZGlmZnVzZVRleHR1cmUuaXNSZW5kZXJUYXJn
ZXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSAmJiB0aGlzLl9yZWZsZWN0aW9uVGV4
dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvKioKKyAgICAgKiBUaGUgZW50aXJlIG1hdGVyaWFsIGhhcyBiZWVuIGNyZWF0ZWQgaW4g
b3JkZXIgdG8gcHJldmVudCBvdmVyZHJhdy4KKyAgICAgKiBAcmV0dXJucyBmYWxzZQorICAgICAq
LworICAgIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhhVGVzdGluZyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBUaGUgZW50aXJlIG1hdGVyaWFsIGhhcyBiZWVuIGNyZWF0ZWQgaW4gb3JkZXIgdG8gcHJldmVu
dCBvdmVyZHJhdy4KKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGJsZW5kaW5nIGlzIGVuYWJsZQor
ICAgICAqLworICAgIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhhQmxlbmRp
bmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAoKHRoaXMuYWxwaGEgPCAwKSB8fCAo
dGhpcy5fZGlmZnVzZVRleHR1cmUgIT0gbnVsbCAmJiB0aGlzLl9kaWZmdXNlVGV4dHVyZS5oYXNB
bHBoYSkpOworICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2tzIHdldGhlciB0aGUgbWF0ZXJp
YWwgaXMgcmVhZHkgdG8gYmUgcmVuZGVyZWQgZm9yIGEgZ2l2ZW4gbWVzaC4KKyAgICAgKiBAcGFy
YW0gbWVzaCBUaGUgbWVzaCB0byByZW5kZXIKKyAgICAgKiBAcGFyYW0gc3ViTWVzaCBUaGUgc3Vi
bWVzaCB0byBjaGVjayBhZ2FpbnN0CisgICAgICogQHBhcmFtIHVzZUluc3RhbmNlcyBTcGVjaWZ5
IHdldGhlciBvciBub3QgdGhlIG1hdGVyaWFsIGlzIHVzZWQgd2l0aCBpbnN0YW5jZXMKKyAgICAg
KiBAcmV0dXJucyB0cnVlIGlmIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFyZSByZWFkeSAoVGV4dHVy
ZXMsIEVmZmVjdHMuLi4pCisgICAgICovCisgICAgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlw
ZS5pc1JlYWR5Rm9yU3ViTWVzaCA9IGZ1bmN0aW9uIChtZXNoLCBzdWJNZXNoLCB1c2VJbnN0YW5j
ZXMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHVzZUluc3RhbmNl
cyA9PT0gdm9pZCAwKSB7IHVzZUluc3RhbmNlcyA9IGZhbHNlOyB9CisgICAgICAgIGlmIChzdWJN
ZXNoLmVmZmVjdCAmJiB0aGlzLmlzRnJvemVuKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fd2Fz
UHJldmlvdXNseVJlYWR5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdWJNZXNoLl9tYXRlcmlhbERlZmluZXMp
IHsKKyAgICAgICAgICAgIHN1Yk1lc2guX21hdGVyaWFsRGVmaW5lcyA9IG5ldyBCYWNrZ3JvdW5k
TWF0ZXJpYWxEZWZpbmVzKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5n
ZXRTY2VuZSgpOworICAgICAgICB2YXIgZGVmaW5lcyA9IHN1Yk1lc2guX21hdGVyaWFsRGVmaW5l
czsKKyAgICAgICAgaWYgKCF0aGlzLmNoZWNrUmVhZHlPbkV2ZXJ5Q2FsbCAmJiBzdWJNZXNoLmVm
ZmVjdCkgeworICAgICAgICAgICAgaWYgKGRlZmluZXMuX3JlbmRlcklkID09PSBzY2VuZS5nZXRS
ZW5kZXJJZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOworICAg
ICAgICAvLyBMaWdodHMKKyAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9y
TGlnaHRzKHNjZW5lLCBtZXNoLCBkZWZpbmVzLCBmYWxzZSwgdGhpcy5fbWF4U2ltdWx0YW5lb3Vz
TGlnaHRzKTsKKyAgICAgICAgZGVmaW5lcy5fbmVlZE5vcm1hbHMgPSB0cnVlOworICAgICAgICAv
LyBNdWx0aXZpZXcKKyAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yTXVs
dGl2aWV3KHNjZW5lLCBkZWZpbmVzKTsKKyAgICAgICAgLy8gVGV4dHVyZXMKKyAgICAgICAgaWYg
KGRlZmluZXMuX2FyZVRleHR1cmVzRGlydHkpIHsKKyAgICAgICAgICAgIGRlZmluZXMuX25lZWRV
VnMgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc2NlbmUuZ2V0RW5naW5lKCkuZ2V0Q2FwcygpLnRleHR1cmVMT0Qp
IHsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5URVhUVVJFTE9EU1VQUE9SVCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4
dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0
ZXJpYWxGbGFncyJdLkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIXRoaXMuX2RpZmZ1c2VUZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JN
ZXJnZWRVVih0aGlzLl9kaWZmdXNlVGV4dHVyZSwgZGVmaW5lcywgIkRJRkZVU0UiKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmaW5lcy5ESUZGVVNFSEFTQUxQSEEgPSB0aGlzLl9kaWZmdXNlVGV4
dHVyZS5oYXNBbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5HQU1NQURJRkZVU0Ug
PSB0aGlzLl9kaWZmdXNlVGV4dHVyZS5nYW1tYVNwYWNlOworICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLk9QQUNJVFlGUkVTTkVMID0gdGhpcy5fb3BhY2l0eUZyZXNuZWw7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWZp
bmVzLkRJRkZVU0UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5ESUZGVVNF
SEFTQUxQSEEgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5HQU1NQURJRkZV
U0UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5PUEFDSVRZRlJFU05FTCA9
IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgcmVmbGVjdGlv
blRleHR1cmUgPSB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZTsKKyAgICAgICAgICAgICAgICBpZiAo
cmVmbGVjdGlvblRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE0X19bIk1hdGVyaWFsRmxhZ3MiXS5SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFyZWZsZWN0aW9uVGV4dHVyZS5pc1JlYWR5T3JOb3RCbG9j
a2luZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5HQU1NQVJFRkxFQ1RJT04gPSByZWZs
ZWN0aW9uVGV4dHVyZS5nYW1tYVNwYWNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJH
QkRSRUZMRUNUSU9OID0gcmVmbGVjdGlvblRleHR1cmUuaXNSR0JEOworICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLlJFRkxFQ1RJT05CTFVSID0gdGhpcy5fcmVmbGVjdGlvbkJsdXIgPiAwOwor
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfT1BQT1NJVEVaID0gdGhp
cy5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVtID8gIXJlZmxlY3Rpb25UZXh0dXJlLmlu
dmVydFogOiByZWZsZWN0aW9uVGV4dHVyZS5pbnZlcnRaOworICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLkxPRElOUkVGTEVDVElPTkFMUEhBID0gcmVmbGVjdGlvblRleHR1cmUubG9kTGV2ZWxJ
bkFscGhhOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkVRVUlSRUNUQU5HVUxBUl9SRUxG
RUNUSU9OX0ZPViA9IHRoaXMudXNlRXF1aXJlY3Rhbmd1bGFyRk9WOworICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLlJFRkxFQ1RJT05CR1IgPSB0aGlzLnN3aXRjaFRvQkdSOworICAgICAgICAg
ICAgICAgICAgICBpZiAocmVmbGVjdGlvblRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfTWF0
ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIlRl
eHR1cmUiXS5JTlZDVUJJQ19NT0RFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVz
LklOVkVSVENVQklDTUFQID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfM0QgPSByZWZsZWN0aW9uVGV4dHVyZS5p
c0N1YmU7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVmbGVjdGlvblRleHR1cmUuY29v
cmRpbmF0ZXNNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNf
VGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siVGV4dHVyZSJd
LkVYUExJQ0lUX01PREU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZM
RUNUSU9OTUFQX0VYUExJQ0lUID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJUZXh0dXJlIl0uUExBTkFSX01P
REU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1BM
QU5BUiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTFfX1siVGV4dHVyZSJdLlBST0pFQ1RJT05fTU9ERToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfUFJPSkVDVElPTiA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTFfX1siVGV4dHVyZSJdLlNLWUJPWF9NT0RFOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9TS1lCT1ggPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9TS1lCT1hfVFJBTlNG
T1JNRUQgPSAhcmVmbGVjdGlvblRleHR1cmUuZ2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXgoKS5p
c0lkZW50aXR5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTFfX1siVGV4dHVyZSJdLlNQSEVSSUNBTF9NT0RFOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9TUEhFUklDQUwgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzExX19bIlRleHR1cmUiXS5FUVVJUkVDVEFOR1VMQVJfTU9ERToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFS
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMV9fWyJUZXh0dXJlIl0uRklYRURfRVFVSVJFQ1RBTkdVTEFSX01PREU6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX0VRVUlS
RUNUQU5HVUxBUl9GSVhFRCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siVGV4dHVyZSJdLkZJWEVEX0VRVUlS
RUNUQU5HVUxBUl9NSVJST1JFRF9NT0RFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmluZXMuUkVGTEVDVElPTk1BUF9NSVJST1JFREVRVUlSRUNUQU5HVUxBUl9GSVhFRCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siVGV4dHVyZSJdLkNVQklDX01PREU6CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfX1siVGV4dHVyZSJdLklOVkNVQklDX01PREU6CisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElP
Tk1BUF9DVUJJQyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVmbGVj
dGlvbkZyZXNuZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElP
TkZSRVNORUwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNU
SU9ORkFMTE9GRiA9IHRoaXMucmVmbGVjdGlvbkZhbGxvZmZEaXN0YW5jZSA+IDA7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9yZWZsZWN0aW9uQ29udHJvbHMueCA9IHRoaXMucmVmbGVj
dGlvbkFtb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZmxlY3Rpb25Db250
cm9scy55ID0gdGhpcy5yZWZsZWN0aW9uUmVmbGVjdGFuY2UwOworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fcmVmbGVjdGlvbkNvbnRyb2xzLnogPSB0aGlzLnJlZmxlY3Rpb25SZWZsZWN0
YW5jZTkwOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVmbGVjdGlvbkNvbnRyb2xz
LncgPSAxIC8gdGhpcy5yZWZsZWN0aW9uRmFsbG9mZkRpc3RhbmNlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lcy5SRUZMRUNUSU9ORlJFU05FTCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lcy5SRUZMRUNUSU9ORkFMTE9GRiA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT04gPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lcy5SRUZMRUNUSU9ORlJFU05FTCA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLlJFRkxFQ1RJT05GQUxMT0ZGID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmluZXMuUkVGTEVDVElPTkJMVVIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lcy5SRUZMRUNUSU9OTUFQXzNEID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmluZXMuUkVGTEVDVElPTk1BUF9TUEhFUklDQUwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1BMQU5BUiA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfQ1VCSUMgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1BST0pFQ1RJT04gPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1NLWUJPWCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfU0tZQk9YX1RSQU5TRk9STUVEID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9FWFBMSUNJ
VCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfRVFV
SVJFQ1RBTkdVTEFSID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVD
VElPTk1BUF9FUVVJUkVDVEFOR1VMQVJfRklYRUQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX01JUlJPUkVERVFVSVJFQ1RBTkdVTEFSX0ZJWEVEID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuSU5WRVJUQ1VCSUNNQVAgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX09QUE9TSVRFWiA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkxPRElOUkVGTEVDVElPTkFMUEhB
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuR0FNTUFSRUZMRUNUSU9OID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkdCRFJFRkxFQ1RJT04gPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZpbmVz
LlBSRU1VTFRJUExZQUxQSEEgPSAodGhpcy5hbHBoYU1vZGUgPT09IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siQ29uc3RhbnRzIl0uQUxQSEFfUFJFTVVM
VElQTElFRCB8fCB0aGlzLmFscGhhTW9kZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMl9fWyJDb25zdGFudHMiXS5BTFBIQV9QUkVNVUxUSVBMSUVEX1BP
UlRFUkRVRkYpOworICAgICAgICAgICAgZGVmaW5lcy5VU0VSR0JDT0xPUiA9IHRoaXMuX3VzZVJH
QkNvbG9yOworICAgICAgICAgICAgZGVmaW5lcy5OT0lTRSA9IHRoaXMuX2VuYWJsZU5vaXNlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLl9hcmVMaWdodHNEaXJ0eSkgeworICAgICAg
ICAgICAgZGVmaW5lcy5VU0VISUdITElHSFRBTkRTSEFET1dDT0xPUlMgPSAhdGhpcy5fdXNlUkdC
Q29sb3IgJiYgKHRoaXMuX3ByaW1hcnlDb2xvclNoYWRvd0xldmVsICE9PSAwIHx8IHRoaXMuX3By
aW1hcnlDb2xvckhpZ2hsaWdodExldmVsICE9PSAwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ZGVmaW5lcy5fYXJlSW1hZ2VQcm9jZXNzaW5nRGlydHkgJiYgdGhpcy5faW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9pbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24ucHJlcGFyZURlZmluZXMoZGVmaW5lcyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTWlz
Yy4KKyAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yTWlzYyhtZXNoLCBz
Y2VuZSwgZmFsc2UsIHRoaXMucG9pbnRzQ2xvdWQsIHRoaXMuZm9nRW5hYmxlZCwgdGhpcy5fc2hv
dWxkVHVybkFscGhhVGVzdE9uKG1lc2gpLCBkZWZpbmVzKTsKKyAgICAgICAgLy8gVmFsdWVzIHRo
YXQgbmVlZCB0byBiZSBldmFsdWF0ZWQgb24gZXZlcnkgZnJhbWUKKyAgICAgICAgX01hdGVyaWFs
c19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJNYXRlcmlhbEhl
bHBlciJdLlByZXBhcmVEZWZpbmVzRm9yRnJhbWVCb3VuZFZhbHVlcyhzY2VuZSwgZW5naW5lLCBk
ZWZpbmVzLCB1c2VJbnN0YW5jZXMpOworICAgICAgICAvLyBBdHRyaWJzCisgICAgICAgIGlmIChf
TWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1h
dGVyaWFsSGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JBdHRyaWJ1dGVzKG1lc2gsIGRlZmluZXMs
IGZhbHNlLCB0cnVlLCBmYWxzZSkpIHsKKyAgICAgICAgICAgIGlmIChtZXNoKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFzY2VuZS5nZXRFbmdpbmUoKS5nZXRDYXBzKCkuc3RhbmRhcmREZXJpdmF0
aXZlcyAmJiAhbWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWVzaC5jcmVhdGVOb3JtYWxzKHRydWUpOworICAgICAgICAgICAg
ICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTG9nZ2Vy
Il0uV2FybigiQmFja2dyb3VuZE1hdGVyaWFsOiBOb3JtYWxzIGhhdmUgYmVlbiBjcmVhdGVkIGZv
ciB0aGUgbWVzaDogIiArIG1lc2gubmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEdldCBjb3JyZWN0IGVmZmVjdAorICAgICAgICBp
ZiAoZGVmaW5lcy5pc0RpcnR5KSB7CisgICAgICAgICAgICBkZWZpbmVzLm1hcmtBc1Byb2Nlc3Nl
ZCgpOworICAgICAgICAgICAgc2NlbmUucmVzZXRDYWNoZWRNYXRlcmlhbCgpOworICAgICAgICAg
ICAgLy8gRmFsbGJhY2tzCisgICAgICAgICAgICB2YXIgZmFsbGJhY2tzID0gbmV3IF9NYXRlcmlh
bHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkVmZmVjdEZhbGxiYWNrcyJd
KCk7CisgICAgICAgICAgICBpZiAoZGVmaW5lcy5GT0cpIHsKKyAgICAgICAgICAgICAgICBmYWxs
YmFja3MuYWRkRmFsbGJhY2soMCwgIkZPRyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGRlZmluZXMuUE9JTlRTSVpFKSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZh
bGxiYWNrKDEsICJQT0lOVFNJWkUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChk
ZWZpbmVzLk1VTFRJVklFVykgeworICAgICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFj
aygwLCAiTVVMVElWSUVXIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfTWF0ZXJpYWxz
X21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVs
cGVyIl0uSGFuZGxlRmFsbGJhY2tzRm9yU2hhZG93cyhkZWZpbmVzLCBmYWxsYmFja3MsIHRoaXMu
X21heFNpbXVsdGFuZW91c0xpZ2h0cyk7CisgICAgICAgICAgICAvL0F0dHJpYnV0ZXMKKyAgICAg
ICAgICAgIHZhciBhdHRyaWJzID0gW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAgICAgICBpZiAo
ZGVmaW5lcy5OT1JNQUwpIHsKKyAgICAgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFs
S2luZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVmaW5lcy5VVjEpIHsKKyAg
ICAgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChkZWZpbmVzLlVWMikgeworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVz
aChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZm
ZXIiXS5VVjJLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0
ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTWF0ZXJpYWxIZWxwZXIi
XS5QcmVwYXJlQXR0cmlidXRlc0ZvckJvbmVzKGF0dHJpYnMsIG1lc2gsIGRlZmluZXMsIGZhbGxi
YWNrcyk7CisgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZUF0dHJpYnV0ZXNGb3JJ
bnN0YW5jZXMoYXR0cmlicywgZGVmaW5lcyk7CisgICAgICAgICAgICB2YXIgdW5pZm9ybXMgPSBb
IndvcmxkIiwgInZpZXciLCAidmlld1Byb2plY3Rpb24iLCAidkV5ZVBvc2l0aW9uIiwgInZMaWdo
dHNUeXBlIiwKKyAgICAgICAgICAgICAgICAidkZvZ0luZm9zIiwgInZGb2dDb2xvciIsICJwb2lu
dFNpemUiLAorICAgICAgICAgICAgICAgICJ2Q2xpcFBsYW5lIiwgInZDbGlwUGxhbmUyIiwgInZD
bGlwUGxhbmUzIiwgInZDbGlwUGxhbmU0IiwgIm1Cb25lcyIsCisgICAgICAgICAgICAgICAgInZQ
cmltYXJ5Q29sb3IiLCAidlByaW1hcnlDb2xvclNoYWRvdyIsCisgICAgICAgICAgICAgICAgInZS
ZWZsZWN0aW9uSW5mb3MiLCAicmVmbGVjdGlvbk1hdHJpeCIsICJ2UmVmbGVjdGlvbk1pY3Jvc3Vy
ZmFjZUluZm9zIiwgImZGb3ZNdWx0aXBsaWVyIiwKKyAgICAgICAgICAgICAgICAic2hhZG93TGV2
ZWwiLCAiYWxwaGEiLAorICAgICAgICAgICAgICAgICJ2QmFja2dyb3VuZENlbnRlciIsICJ2UmVm
bGVjdGlvbkNvbnRyb2wiLAorICAgICAgICAgICAgICAgICJ2RGlmZnVzZUluZm9zIiwgImRpZmZ1
c2VNYXRyaXgiLAorICAgICAgICAgICAgXTsKKyAgICAgICAgICAgIHZhciBzYW1wbGVycyA9IFsi
ZGlmZnVzZVNhbXBsZXIiLCAicmVmbGVjdGlvblNhbXBsZXIiLCAicmVmbGVjdGlvblNhbXBsZXJM
b3ciLCAicmVmbGVjdGlvblNhbXBsZXJIaWdoIl07CisgICAgICAgICAgICB2YXIgdW5pZm9ybUJ1
ZmZlcnMgPSBbIk1hdGVyaWFsIiwgIlNjZW5lIl07CisgICAgICAgICAgICBpZiAoX01hdGVyaWFs
c19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fWyJJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIl0pIHsKKyAgICAgICAgICAgICAgICBf
TWF0ZXJpYWxzX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEwX19bIkltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iXS5QcmVwYXJlVW5pZm9y
bXModW5pZm9ybXMsIGRlZmluZXMpOworICAgICAgICAgICAgICAgIF9NYXRlcmlhbHNfaW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siSW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiJdLlByZXBhcmVTYW1wbGVycyhzYW1wbGVycywgZGVm
aW5lcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVs
cGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFy
ZVVuaWZvcm1zQW5kU2FtcGxlcnNMaXN0KHsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtc05hbWVz
OiB1bmlmb3JtcywKKyAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyc05hbWVzOiB1bmlmb3Jt
QnVmZmVycywKKyAgICAgICAgICAgICAgICBzYW1wbGVyczogc2FtcGxlcnMsCisgICAgICAgICAg
ICAgICAgZGVmaW5lczogZGVmaW5lcywKKyAgICAgICAgICAgICAgICBtYXhTaW11bHRhbmVvdXNM
aWdodHM6IHRoaXMuX21heFNpbXVsdGFuZW91c0xpZ2h0cworICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB2YXIgb25Db21waWxlZCA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoX3RoaXMub25Db21waWxlZCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5v
bkNvbXBpbGVkKGVmZmVjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF90
aGlzLmJpbmRTY2VuZVVuaWZvcm1CdWZmZXIoZWZmZWN0LCBzY2VuZS5nZXRTY2VuZVVuaWZvcm1C
dWZmZXIoKSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIGpvaW4gPSBkZWZpbmVz
LnRvU3RyaW5nKCk7CisgICAgICAgICAgICBzdWJNZXNoLnNldEVmZmVjdChzY2VuZS5nZXRFbmdp
bmUoKS5jcmVhdGVFZmZlY3QoImJhY2tncm91bmQiLCB7CisgICAgICAgICAgICAgICAgYXR0cmli
dXRlczogYXR0cmlicywKKyAgICAgICAgICAgICAgICB1bmlmb3Jtc05hbWVzOiB1bmlmb3JtcywK
KyAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyc05hbWVzOiB1bmlmb3JtQnVmZmVycywKKyAg
ICAgICAgICAgICAgICBzYW1wbGVyczogc2FtcGxlcnMsCisgICAgICAgICAgICAgICAgZGVmaW5l
czogam9pbiwKKyAgICAgICAgICAgICAgICBmYWxsYmFja3M6IGZhbGxiYWNrcywKKyAgICAgICAg
ICAgICAgICBvbkNvbXBpbGVkOiBvbkNvbXBpbGVkLAorICAgICAgICAgICAgICAgIG9uRXJyb3I6
IHRoaXMub25FcnJvciwKKyAgICAgICAgICAgICAgICBpbmRleFBhcmFtZXRlcnM6IHsgbWF4U2lt
dWx0YW5lb3VzTGlnaHRzOiB0aGlzLl9tYXhTaW11bHRhbmVvdXNMaWdodHMgfQorICAgICAgICAg
ICAgfSwgZW5naW5lKSwgZGVmaW5lcyk7CisgICAgICAgICAgICB0aGlzLmJ1aWxkVW5pZm9ybUxh
eW91dCgpOworICAgICAgICB9CisgICAgICAgIGlmICghc3ViTWVzaC5lZmZlY3QgfHwgIXN1Yk1l
c2guZWZmZWN0LmlzUmVhZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGRlZmluZXMuX3JlbmRlcklkID0gc2NlbmUuZ2V0UmVuZGVySWQoKTsKKyAg
ICAgICAgdGhpcy5fd2FzUHJldmlvdXNseVJlYWR5ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb21wdXRlIHRoZSBwcmltYXJ5IGNvbG9yIGFj
Y29yZGluZyB0byB0aGUgY2hvc2VuIHBlcmNlcHR1YWwgY29sb3IuCisgICAgICovCisgICAgQmFj
a2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZS5fY29tcHV0ZVByaW1hcnlDb2xvckZyb21QZXJjZXB0
dWFsQ29sb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fX3BlcmNlcHR1YWxD
b2xvcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3By
aW1hcnlDb2xvci5jb3B5RnJvbSh0aGlzLl9fcGVyY2VwdHVhbENvbG9yKTsKKyAgICAgICAgLy8g
UmV2ZXJ0IGdhbW1hIHNwYWNlLgorICAgICAgICB0aGlzLl9wcmltYXJ5Q29sb3IudG9MaW5lYXJT
cGFjZVRvUmVmKHRoaXMuX3ByaW1hcnlDb2xvcik7CisgICAgICAgIC8vIFJldmVydCBpbWFnZSBw
cm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIGlmICh0aGlzLl9pbWFnZVByb2Nlc3Np
bmdDb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICAvLyBSZXZlcnQgRXhwb3N1cmUuCisgICAg
ICAgICAgICB0aGlzLl9wcmltYXJ5Q29sb3Iuc2NhbGVUb1JlZigxIC8gdGhpcy5faW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbi5leHBvc3VyZSwgdGhpcy5fcHJpbWFyeUNvbG9yKTsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9jb21wdXRlUHJpbWFyeUNvbG9ycygpOworICAgIH07CisgICAg
LyoqCisgICAgICogQ29tcHV0ZSB0aGUgaGlnaGxpZ2h0cyBhbmQgc2hhZG93IGNvbG9ycyBhY2Nv
cmRpbmcgdG8gdGhlaXIgY2hvc2VuIGxldmVscy4KKyAgICAgKi8KKyAgICBCYWNrZ3JvdW5kTWF0
ZXJpYWwucHJvdG90eXBlLl9jb21wdXRlUHJpbWFyeUNvbG9ycyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKHRoaXMuX3ByaW1hcnlDb2xvclNoYWRvd0xldmVsID09PSAwICYmIHRoaXMuX3By
aW1hcnlDb2xvckhpZ2hsaWdodExldmVsID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gRmluZCB0aGUgaGlnaGxpZ2h0IGNvbG9yIGJhc2VkIG9uIHRo
ZSBjb25maWd1cmF0aW9uLgorICAgICAgICB0aGlzLl9wcmltYXJ5Q29sb3Iuc2NhbGVUb1JlZih0
aGlzLl9wcmltYXJ5Q29sb3JTaGFkb3dMZXZlbCwgdGhpcy5fcHJpbWFyeVNoYWRvd0NvbG9yKTsK
KyAgICAgICAgdGhpcy5fcHJpbWFyeUNvbG9yLnN1YnRyYWN0VG9SZWYodGhpcy5fcHJpbWFyeVNo
YWRvd0NvbG9yLCB0aGlzLl9wcmltYXJ5U2hhZG93Q29sb3IpOworICAgICAgICAvLyBGaW5kIHRo
ZSBzaGFkb3cgY29sb3IgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIHRoaXMu
X3doaXRlLnN1YnRyYWN0VG9SZWYodGhpcy5fcHJpbWFyeUNvbG9yLCB0aGlzLl9wcmltYXJ5SGln
aGxpZ2h0Q29sb3IpOworICAgICAgICB0aGlzLl9wcmltYXJ5SGlnaGxpZ2h0Q29sb3Iuc2NhbGVU
b1JlZih0aGlzLl9wcmltYXJ5Q29sb3JIaWdobGlnaHRMZXZlbCwgdGhpcy5fcHJpbWFyeUhpZ2hs
aWdodENvbG9yKTsKKyAgICAgICAgdGhpcy5fcHJpbWFyeUNvbG9yLmFkZFRvUmVmKHRoaXMuX3By
aW1hcnlIaWdobGlnaHRDb2xvciwgdGhpcy5fcHJpbWFyeUhpZ2hsaWdodENvbG9yKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEJ1aWxkIHRoZSB1bmlmb3JtIGJ1ZmZlciB1c2VkIGluIHRoZSBt
YXRlcmlhbC4KKyAgICAgKi8KKyAgICBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLmJ1aWxk
VW5pZm9ybUxheW91dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gT3JkZXIgaXMgaW1wb3J0
YW50ICEKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2UHJpbWFyeUNv
bG9yIiwgNCk7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidlByaW1h
cnlDb2xvclNoYWRvdyIsIDQpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZv
cm0oInZEaWZmdXNlSW5mb3MiLCAyKTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRV
bmlmb3JtKCJ2UmVmbGVjdGlvbkluZm9zIiwgMik7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZm
ZXIuYWRkVW5pZm9ybSgiZGlmZnVzZU1hdHJpeCIsIDE2KTsKKyAgICAgICAgdGhpcy5fdW5pZm9y
bUJ1ZmZlci5hZGRVbmlmb3JtKCJyZWZsZWN0aW9uTWF0cml4IiwgMTYpOworICAgICAgICB0aGlz
Ll91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3Mi
LCAzKTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJmRm92TXVsdGlw
bGllciIsIDEpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInBvaW50
U2l6ZSIsIDEpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInNoYWRv
d0xldmVsIiwgMSk7CisgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgiYWxw
aGEiLCAxKTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2QmFja2dy
b3VuZENlbnRlciIsIDMpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0o
InZSZWZsZWN0aW9uQ29udHJvbCIsIDQpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmNy
ZWF0ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogVW5iaW5kIHRoZSBtYXRlcmlhbC4KKyAg
ICAgKi8KKyAgICBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2RpZmZ1c2VUZXh0dXJlICYmIHRoaXMuX2RpZmZ1c2VU
ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVy
LnNldFRleHR1cmUoImRpZmZ1c2VTYW1wbGVyIiwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlICYmIHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlLmlz
UmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnNldFRleHR1
cmUoInJlZmxlY3Rpb25TYW1wbGVyIiwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgX3N1cGVy
LnByb3RvdHlwZS51bmJpbmQuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJp
bmQgb25seSB0aGUgd29ybGQgbWF0cml4IHRvIHRoZSBtYXRlcmlhbC4KKyAgICAgKiBAcGFyYW0g
d29ybGQgVGhlIHdvcmxkIG1hdHJpeCB0byBiaW5kLgorICAgICAqLworICAgIEJhY2tncm91bmRN
YXRlcmlhbC5wcm90b3R5cGUuYmluZE9ubHlXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uICh3b3JsZCkg
eworICAgICAgICB0aGlzLl9hY3RpdmVFZmZlY3Quc2V0TWF0cml4KCJ3b3JsZCIsIHdvcmxkKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmQgdGhlIG1hdGVyaWFsIGZvciBhIGRlZGljYXRl
ZCBzdWJtZWggKGV2ZXJ5IHVzZWQgbWVzaGVzIHdpbGwgYmUgY29uc2lkZXJlZCBvcGFxdWUpLgor
ICAgICAqIEBwYXJhbSB3b3JsZCBUaGUgd29ybGQgbWF0cml4IHRvIGJpbmQuCisgICAgICogQHBh
cmFtIHN1Yk1lc2ggVGhlIHN1Ym1lc2ggdG8gYmluZCBmb3IuCisgICAgICovCisgICAgQmFja2dy
b3VuZE1hdGVyaWFsLnByb3RvdHlwZS5iaW5kRm9yU3ViTWVzaCA9IGZ1bmN0aW9uICh3b3JsZCwg
bWVzaCwgc3ViTWVzaCkgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7Cisg
ICAgICAgIHZhciBkZWZpbmVzID0gc3ViTWVzaC5fbWF0ZXJpYWxEZWZpbmVzOworICAgICAgICBp
ZiAoIWRlZmluZXMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2
YXIgZWZmZWN0ID0gc3ViTWVzaC5lZmZlY3Q7CisgICAgICAgIGlmICghZWZmZWN0KSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWN0aXZlRWZmZWN0ID0g
ZWZmZWN0OworICAgICAgICAvLyBNYXRyaWNlcworICAgICAgICB0aGlzLmJpbmRPbmx5V29ybGRN
YXRyaXgod29ybGQpOworICAgICAgICAvLyBCb25lcworICAgICAgICBfTWF0ZXJpYWxzX21hdGVy
aWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVscGVyIl0u
QmluZEJvbmVzUGFyYW1ldGVycyhtZXNoLCB0aGlzLl9hY3RpdmVFZmZlY3QpOworICAgICAgICB2
YXIgbXVzdFJlYmluZCA9IHRoaXMuX211c3RSZWJpbmQoc2NlbmUsIGVmZmVjdCwgbWVzaC52aXNp
YmlsaXR5KTsKKyAgICAgICAgaWYgKG11c3RSZWJpbmQpIHsKKyAgICAgICAgICAgIHRoaXMuX3Vu
aWZvcm1CdWZmZXIuYmluZFRvRWZmZWN0KGVmZmVjdCwgIk1hdGVyaWFsIik7CisgICAgICAgICAg
ICB0aGlzLmJpbmRWaWV3UHJvamVjdGlvbihlZmZlY3QpOworICAgICAgICAgICAgdmFyIHJlZmxl
Y3Rpb25UZXh0dXJlID0gdGhpcy5fcmVmbGVjdGlvblRleHR1cmU7CisgICAgICAgICAgICBpZiAo
IXRoaXMuX3VuaWZvcm1CdWZmZXIudXNlVWJvIHx8ICF0aGlzLmlzRnJvemVuIHx8ICF0aGlzLl91
bmlmb3JtQnVmZmVyLmlzU3luYykgeworICAgICAgICAgICAgICAgIC8vIFRleHR1cmUgdW5pZm9y
bXMKKyAgICAgICAgICAgICAgICBpZiAoc2NlbmUudGV4dHVyZXNFbmFibGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkRpZmZ1c2VUZXh0
dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZl
ci51cGRhdGVGbG9hdDIoInZEaWZmdXNlSW5mb3MiLCB0aGlzLl9kaWZmdXNlVGV4dHVyZS5jb29y
ZGluYXRlc0luZGV4LCB0aGlzLl9kaWZmdXNlVGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIk1hdGVyaWFsSGVscGVyIl0uQmluZFRleHR1cmVNYXRyaXgodGhpcy5fZGlmZnVz
ZVRleHR1cmUsIHRoaXMuX3VuaWZvcm1CdWZmZXIsICJkaWZmdXNlIik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmxlY3Rpb25UZXh0dXJlICYmIF9t
YXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbEZsYWdz
Il0uUmVmbGVjdGlvblRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl91bmlmb3JtQnVmZmVyLnVwZGF0ZU1hdHJpeCgicmVmbGVjdGlvbk1hdHJpeCIsIHJlZmxl
Y3Rpb25UZXh0dXJlLmdldFJlZmxlY3Rpb25UZXh0dXJlTWF0cml4KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIoInZSZWZsZWN0aW9u
SW5mb3MiLCByZWZsZWN0aW9uVGV4dHVyZS5sZXZlbCwgdGhpcy5fcmVmbGVjdGlvbkJsdXIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDMo
InZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MiLCByZWZsZWN0aW9uVGV4dHVyZS5nZXRTaXpl
KCkud2lkdGgsIHJlZmxlY3Rpb25UZXh0dXJlLmxvZEdlbmVyYXRpb25TY2FsZSwgcmVmbGVjdGlv
blRleHR1cmUubG9kR2VuZXJhdGlvbk9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhZG93TGV2ZWwgPiAw
KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQo
InNoYWRvd0xldmVsIiwgdGhpcy5zaGFkb3dMZXZlbCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQoImFscGhhIiwgdGhp
cy5hbHBoYSk7CisgICAgICAgICAgICAgICAgLy8gUG9pbnQgc2l6ZQorICAgICAgICAgICAgICAg
IGlmICh0aGlzLnBvaW50c0Nsb3VkKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuaWZv
cm1CdWZmZXIudXBkYXRlRmxvYXQoInBvaW50U2l6ZSIsIHRoaXMucG9pbnRTaXplKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRlZmluZXMuVVNFSElHSExJR0hUQU5E
U0hBRE9XQ09MT1JTKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIu
dXBkYXRlQ29sb3I0KCJ2UHJpbWFyeUNvbG9yIiwgdGhpcy5fcHJpbWFyeUhpZ2hsaWdodENvbG9y
LCAxLjApOworICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnVwZGF0ZUNv
bG9yNCgidlByaW1hcnlDb2xvclNoYWRvdyIsIHRoaXMuX3ByaW1hcnlTaGFkb3dDb2xvciwgMS4w
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlQ29sb3I0KCJ2UHJpbWFyeUNvbG9y
IiwgdGhpcy5fcHJpbWFyeUNvbG9yLCAxLjApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQoImZGb3ZN
dWx0aXBsaWVyIiwgdGhpcy5fZm92TXVsdGlwbGllcik7CisgICAgICAgICAgICAvLyBUZXh0dXJl
cworICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAg
ICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkRpZmZ1c2VUZXh0dXJlRW5hYmxl
ZCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnNldFRleHR1cmUo
ImRpZmZ1c2VTYW1wbGVyIiwgdGhpcy5fZGlmZnVzZVRleHR1cmUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAocmVmbGVjdGlvblRleHR1cmUgJiYgX21hdGVyaWFsRmxh
Z3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVyaWFsRmxhZ3MiXS5SZWZsZWN0
aW9uVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmluZXMuUkVG
TEVDVElPTkJMVVIgJiYgZGVmaW5lcy5URVhUVVJFTE9EU1VQUE9SVCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJlKCJyZWZsZWN0aW9uU2Ft
cGxlciIsIHJlZmxlY3Rpb25UZXh0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmICghZGVmaW5lcy5SRUZMRUNUSU9OQkxVUikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJlKCJyZWZsZWN0
aW9uU2FtcGxlciIsIHJlZmxlY3Rpb25UZXh0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
X3VuaWZvcm1CdWZmZXIuc2V0VGV4dHVyZSgicmVmbGVjdGlvblNhbXBsZXIiLCByZWZsZWN0aW9u
VGV4dHVyZS5fbG9kVGV4dHVyZU1pZCB8fCByZWZsZWN0aW9uVGV4dHVyZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnNldFRleHR1cmUoInJlZmxlY3Rpb25T
YW1wbGVyTG93IiwgcmVmbGVjdGlvblRleHR1cmUuX2xvZFRleHR1cmVMb3cgfHwgcmVmbGVjdGlv
blRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5z
ZXRUZXh0dXJlKCJyZWZsZWN0aW9uU2FtcGxlckhpZ2giLCByZWZsZWN0aW9uVGV4dHVyZS5fbG9k
VGV4dHVyZUhpZ2ggfHwgcmVmbGVjdGlvblRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzLlJFRkxFQ1RJT05GUkVTTkVMKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0Mygi
dkJhY2tncm91bmRDZW50ZXIiLCB0aGlzLnNjZW5lQ2VudGVyLngsIHRoaXMuc2NlbmVDZW50ZXIu
eSwgdGhpcy5zY2VuZUNlbnRlci56KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vu
aWZvcm1CdWZmZXIudXBkYXRlRmxvYXQ0KCJ2UmVmbGVjdGlvbkNvbnRyb2wiLCB0aGlzLl9yZWZs
ZWN0aW9uQ29udHJvbHMueCwgdGhpcy5fcmVmbGVjdGlvbkNvbnRyb2xzLnksIHRoaXMuX3JlZmxl
Y3Rpb25Db250cm9scy56LCB0aGlzLl9yZWZsZWN0aW9uQ29udHJvbHMudyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBDbGlwIHBsYW5lCisgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVscGVyIl0uQmluZENsaXBQbGFu
ZSh0aGlzLl9hY3RpdmVFZmZlY3QsIHNjZW5lKTsKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0
ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTWF0ZXJpYWxIZWxwZXIi
XS5CaW5kRXllUG9zaXRpb24oZWZmZWN0LCBzY2VuZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG11c3RSZWJpbmQgfHwgIXRoaXMuaXNGcm96ZW4pIHsKKyAgICAgICAgICAgIGlmIChzY2VuZS5s
aWdodHNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRMaWdo
dHMoc2NlbmUsIG1lc2gsIHRoaXMuX2FjdGl2ZUVmZmVjdCwgZGVmaW5lcywgdGhpcy5fbWF4U2lt
dWx0YW5lb3VzTGlnaHRzLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBW
aWV3CisgICAgICAgICAgICB0aGlzLmJpbmRWaWV3KGVmZmVjdCk7CisgICAgICAgICAgICAvLyBG
b2cKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzdfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kRm9nUGFyYW1ldGVycyhzY2VuZSwg
bWVzaCwgdGhpcy5fYWN0aXZlRWZmZWN0LCB0cnVlKTsKKyAgICAgICAgICAgIC8vIGltYWdlIHBy
b2Nlc3NpbmcKKyAgICAgICAgICAgIGlmICh0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0
aW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bi5iaW5kKHRoaXMuX2FjdGl2ZUVmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci51cGRhdGUoKTsKKyAgICAgICAgdGhpcy5fYWZ0ZXJC
aW5kKG1lc2gsIHRoaXMuX2FjdGl2ZUVmZmVjdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
aGVja3MgdG8gc2VlIGlmIGEgdGV4dHVyZSBpcyB1c2VkIGluIHRoZSBtYXRlcmlhbC4KKyAgICAg
KiBAcGFyYW0gdGV4dHVyZSAtIEJhc2UgdGV4dHVyZSB0byB1c2UuCisgICAgICogQHJldHVybnMg
LSBCb29sZWFuIHNwZWNpZnlpbmcgaWYgYSB0ZXh0dXJlIGlzIHVzZWQgaW4gdGhlIG1hdGVyaWFs
LgorICAgICAqLworICAgIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUuaGFzVGV4dHVyZSA9
IGZ1bmN0aW9uICh0ZXh0dXJlKSB7CisgICAgICAgIGlmIChfc3VwZXIucHJvdG90eXBlLmhhc1Rl
eHR1cmUuY2FsbCh0aGlzLCB0ZXh0dXJlKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlID09PSB0ZXh0dXJl
KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy5fZGlmZnVzZVRleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIERpc3Bvc2UgdGhlIG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBmb3JjZURpc3Bvc2VFZmZl
Y3QgRm9yY2UgZGlzcG9zYWwgb2YgdGhlIGFzc29jaWF0ZWQgZWZmZWN0LgorICAgICAqIEBwYXJh
bSBmb3JjZURpc3Bvc2VUZXh0dXJlcyBGb3JjZSBkaXNwb3NhbCBvZiB0aGUgYXNzb2NpYXRlZCB0
ZXh0dXJlcy4KKyAgICAgKi8KKyAgICBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLmRpc3Bv
c2UgPSBmdW5jdGlvbiAoZm9yY2VEaXNwb3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcykg
eworICAgICAgICBpZiAoZm9yY2VEaXNwb3NlRWZmZWN0ID09PSB2b2lkIDApIHsgZm9yY2VEaXNw
b3NlRWZmZWN0ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGZvcmNlRGlzcG9zZVRleHR1cmVzID09
PSB2b2lkIDApIHsgZm9yY2VEaXNwb3NlVGV4dHVyZXMgPSBmYWxzZTsgfQorICAgICAgICBpZiAo
Zm9yY2VEaXNwb3NlVGV4dHVyZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmRpZmZ1c2VUZXh0
dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5kaWZmdXNlVGV4dHVyZS5kaXNwb3NlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5yZWZsZWN0aW9uVGV4dHVyZSkgewor
ICAgICAgICAgICAgICAgIHRoaXMucmVmbGVjdGlvblRleHR1cmUuZGlzcG9zZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3JlbmRlclRhcmdldHMuZGlzcG9zZSgp
OworICAgICAgICBpZiAodGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiB0aGlz
Ll9pbWFnZVByb2Nlc3NpbmdPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbi5vblVwZGF0ZVBhcmFtZXRlcnMucmVtb3ZlKHRoaXMuX2ltYWdl
UHJvY2Vzc2luZ09ic2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICBfc3VwZXIucHJvdG90eXBl
LmRpc3Bvc2UuY2FsbCh0aGlzLCBmb3JjZURpc3Bvc2VFZmZlY3QpOworICAgIH07CisgICAgLyoq
CisgICAgICogQ2xvbmVzIHRoZSBtYXRlcmlhbC4KKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgY2xv
bmVkIG5hbWUuCisgICAgICogQHJldHVybnMgVGhlIGNsb25lZCBtYXRlcmlhbC4KKyAgICAgKi8K
KyAgICBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJd
LkNsb25lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBCYWNrZ3JvdW5kTWF0ZXJpYWwobmFtZSwg
X3RoaXMuZ2V0U2NlbmUoKSk7IH0sIHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogU2Vy
aWFsaXplcyB0aGUgY3VycmVudCBtYXRlcmlhbCB0byBpdHMgSlNPTiByZXByZXNlbnRhdGlvbi4K
KyAgICAgKiBAcmV0dXJucyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbi4KKyAgICAgKi8KKyAgICBC
YWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5TZXJpYWxpemUodGhp
cyk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY3VzdG9tVHlwZSA9ICJCQUJZTE9OLkJh
Y2tncm91bmRNYXRlcmlhbCI7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0Owor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgbWF0ZXJp
YWwKKyAgICAgKiBAcmV0dXJucyAiQmFja2dyb3VuZE1hdGVyaWFsIgorICAgICAqLworICAgIEJh
Y2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gIkJhY2tncm91bmRNYXRlcmlhbCI7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBQYXJzZSBhIEpTT04gaW5wdXQgdG8gY3JlYXRlIGJhY2sgYSBiYWNrZ3JvdW5kIG1hdGVy
aWFsLgorICAgICAqIEBwYXJhbSBzb3VyY2UgVGhlIEpTT04gZGF0YSB0byBwYXJzZQorICAgICAq
IEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdG8gY3JlYXRlIHRoZSBwYXJzZWQgbWF0ZXJpYWwgaW4K
KyAgICAgKiBAcGFyYW0gcm9vdFVybCBUaGUgcm9vdCB1cmwgb2YgdGhlIGFzc2V0cyB0aGUgbWF0
ZXJpYWwgZGVwZW5kcyB1cG9uCisgICAgICogQHJldHVybnMgdGhlIGluc3RhbnRpYXRlZCBCYWNr
Z3JvdW5kTWF0ZXJpYWwuCisgICAgICovCisgICAgQmFja2dyb3VuZE1hdGVyaWFsLlBhcnNlID0g
ZnVuY3Rpb24gKHNvdXJjZSwgc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhl
bHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBCYWNrZ3JvdW5kTWF0ZXJpYWwo
c291cmNlLm5hbWUsIHNjZW5lKTsgfSwgc291cmNlLCBzY2VuZSwgcm9vdFVybCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTdGFuZGFyZCByZWZsZWN0YW5jZSB2YWx1ZSBhdCBwYXJhbGxlbCB2
aWV3IGFuZ2xlLgorICAgICAqLworICAgIEJhY2tncm91bmRNYXRlcmlhbC5TdGFuZGFyZFJlZmxl
Y3RhbmNlMCA9IDAuMDU7CisgICAgLyoqCisgICAgICogU3RhbmRhcmQgcmVmbGVjdGFuY2UgdmFs
dWUgYXQgZ3JhemluZyBhbmdsZS4KKyAgICAgKi8KKyAgICBCYWNrZ3JvdW5kTWF0ZXJpYWwuU3Rh
bmRhcmRSZWZsZWN0YW5jZTkwID0gMC41OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzQ29sb3IzIl0pKCkKKyAg
ICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiX3ByaW1hcnlDb2xvciIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc0xpZ2h0c0Rp
cnR5IikKKyAgICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAicHJpbWFyeUNvbG9y
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0NvbG9yMyJdKSgpCisgICAgXSwgQmFja2dyb3Vu
ZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9fcGVyY2VwdHVhbENvbG9yIiwgdm9pZCAwKTsKKyAgICB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAg
ICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJz
ZXJpYWxpemUiXSkoKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJfcHJp
bWFyeUNvbG9yU2hhZG93TGV2ZWwiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9wcmltYXJ5Q29sb3JIaWdobGlnaHRM
ZXZlbCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNo
ZXNBc0xpZ2h0c0RpcnR5IikKKyAgICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAi
cHJpbWFyeUNvbG9ySGlnaGxpZ2h0TGV2ZWwiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1
cmUiXSkoKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJfcmVmbGVjdGlv
blRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3Vi
TWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90
eXBlLCAicmVmbGVjdGlvblRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisg
ICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9yZWZsZWN0aW9uQmx1ciIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1
cmVzRGlydHkiKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJyZWZsZWN0
aW9uQmx1ciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCkKKyAgICBdLCBC
YWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiX2RpZmZ1c2VUZXh0dXJlIiwgdm9pZCAwKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0
eSIpCisgICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgImRpZmZ1c2VUZXh0dXJl
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0Fz
VGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgInNo
YWRvd0xpZ2h0cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBCYWNrZ3Jv
dW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiX3NoYWRvd0xldmVsIiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBh
bmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAg
XSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgInNoYWRvd0xldmVsIiwgdm9pZCAwKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemVBc1ZlY3RvcjMiXSkoKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5w
cm90b3R5cGUsICJfc2NlbmVDZW50ZXIiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHki
XSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBCYWNrZ3JvdW5k
TWF0ZXJpYWwucHJvdG90eXBlLCAic2NlbmVDZW50ZXIiLCB2b2lkIDApOworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6
ZSJdKSgpCisgICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9vcGFjaXR5RnJl
c25lbCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNo
ZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUs
ICJvcGFjaXR5RnJlc25lbCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBC
YWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiX3JlZmxlY3Rpb25GcmVzbmVsIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNE
aXJ0eSIpCisgICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgInJlZmxlY3Rpb25G
cmVzbmVsIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJhY2tncm91bmRN
YXRlcmlhbC5wcm90b3R5cGUsICJfcmVmbGVjdGlvbkZhbGxvZmZEaXN0YW5jZSIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGly
dHkiKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJyZWZsZWN0aW9uRmFs
bG9mZkRpc3RhbmNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJhY2tn
cm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJfcmVmbGVjdGlvbkFtb3VudCIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHki
KQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJyZWZsZWN0aW9uQW1vdW50
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlh
bC5wcm90b3R5cGUsICJfcmVmbGVjdGlvblJlZmxlY3RhbmNlMCIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhw
YW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAg
IF0sIEJhY2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJyZWZsZWN0aW9uUmVmbGVjdGFuY2Uw
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJhY2tncm91bmRNYXRlcmlh
bC5wcm90b3R5cGUsICJfcmVmbGVjdGlvblJlZmxlY3RhbmNlOTAiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4
cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAg
ICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAicmVmbGVjdGlvblJlZmxlY3RhbmNl
OTAiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQmFja2dyb3VuZE1hdGVy
aWFsLnByb3RvdHlwZSwgIl91c2VSR0JDb2xvciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9w
ZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIEJhY2tn
cm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VSR0JDb2xvciIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplIl0pKCkKKyAgICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAiX2VuYWJs
ZU5vaXNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1l
c2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlw
ZSwgImVuYWJsZU5vaXNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJh
Y2tncm91bmRNYXRlcmlhbC5wcm90b3R5cGUsICJfbWF4U2ltdWx0YW5lb3VzTGlnaHRzIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVy
ZXNEaXJ0eSIpCisgICAgXSwgQmFja2dyb3VuZE1hdGVyaWFsLnByb3RvdHlwZSwgIm1heFNpbXVs
dGFuZW91c0xpZ2h0cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNJbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uIl0pKCkKKyAgICBdLCBCYWNrZ3JvdW5kTWF0ZXJpYWwucHJvdG90eXBlLCAi
X2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iLCB2b2lkIDApOworICAgIHJldHVybiBCYWNr
Z3JvdW5kTWF0ZXJpYWw7Cit9KF9NYXRlcmlhbHNfcHVzaE1hdGVyaWFsX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X19bIlB1c2hNYXRlcmlhbCJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1si
QkFCWUxPTi5CYWNrZ3JvdW5kTWF0ZXJpYWwiXSA9IEJhY2tncm91bmRNYXRlcmlhbDsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL0JhY2tncm91bmQvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRl
cmlhbHMvQmFja2dyb3VuZC9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQmFja2dyb3VuZE1hdGVy
aWFsICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFja2dy
b3VuZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2JhY2tncm91bmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvQmFja2dyb3Vu
ZC9iYWNrZ3JvdW5kTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFja2dyb3VuZE1h
dGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYmFja2dyb3VuZE1hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkJhY2tncm91bmRNYXRlcmlhbCJdOyB9KTsKKworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9EdWFsL2ZvZ0Jsb2Nr
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL0R1YWwvZm9nQmxvY2sudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZvZ0Jsb2NrICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkZvZ0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGb2dCbG9jazsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRl
cmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2Rl
TWF0ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVy
aWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMgKi8gIi4vTWF0ZXJp
YWxzL05vZGUvbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vbWF0ZXJp
YWxIZWxwZXIgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0lucHV0L2lucHV0QmxvY2sgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvQmxvY2tzL0lucHV0L2lucHV0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICov
ICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKworCisKKworLyoqCisgKiBCbG9jayB1
c2VkIHRvIGFkZCBzdXBwb3J0IGZvciBzY2VuZSBmb2cKKyAqLwordmFyIEZvZ0Jsb2NrID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEZvZ0Jsb2NrLCBfc3VwZXIpOworICAgIC8qKgor
ICAgICAqIENyZWF0ZSBhIG5ldyBGb2dCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMg
dGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBGb2dCbG9jayhuYW1lKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzIl0uVmVydGV4QW5kRnJhZ21lbnQsIHRydWUpIHx8IHRoaXM7CisgICAgICAgIC8v
IFZlcnRleAorICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ3b3JsZFBvc2l0aW9uIiwgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQs
IGZhbHNlLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleCk7CisgICAgICAgIF90aGlz
LnJlZ2lzdGVySW5wdXQoInZpZXciLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzIl0uTWF0cml4LCBmYWxzZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMi
XS5WZXJ0ZXgpOworICAgICAgICAvLyBGcmFnbWVudAorICAgICAgICBfdGhpcy5yZWdpc3Rlcklu
cHV0KCJpbnB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXMiXS5Db2xvcjMsIGZhbHNlLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50
KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgiZm9nQ29sb3IiLCBfbm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJO
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3IzLCBmYWxzZSwgX25v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2Rl
TWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVy
T3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzIl0uQ29sb3IzLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KTsK
KyAgICAgICAgX3RoaXMuaW5wdXQuYWNjZXB0ZWRDb25uZWN0aW9uUG9pbnRUeXBlcy5wdXNoKF9u
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5Db2xvcjQp
OworICAgICAgICBfdGhpcy5mb2dDb2xvci5hY2NlcHRlZENvbm5lY3Rpb25Qb2ludFR5cGVzLnB1
c2goX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNv
bG9yNCk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0
cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUK
KyAgICAgKi8KKyAgICBGb2dCbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gIkZvZ0Jsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShGb2dCbG9jay5wcm90b3R5cGUsICJ3b3JsZFBvc2l0aW9uIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQgcG9zaXRpb24gaW5wdXQgY29tcG9uZW50
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShGb2dCbG9jay5wcm90b3R5cGUsICJ2aWV3IiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgdmlldyBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sx
XTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZvZ0Jsb2Nr
LnByb3RvdHlwZSwgImlucHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUg
Y29sb3IgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMl07CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb2dCbG9jay5wcm90b3R5cGUsICJmb2dD
b2xvciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGZvZyBjb2xvciBpbnB1
dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1szXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KEZvZ0Jsb2NrLnByb3RvdHlwZSwgIm91dHB1dCIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG91dHB1dCBjb21wb25lbnQKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X291dHB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIEZvZ0Jsb2NrLnByb3RvdHlwZS5h
dXRvQ29uZmlndXJlID0gZnVuY3Rpb24gKG1hdGVyaWFsKSB7CisgICAgICAgIGlmICghdGhpcy52
aWV3LmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgdmlld0lucHV0ID0gbWF0ZXJpYWwu
Z2V0SW5wdXRCbG9ja0J5UHJlZGljYXRlKGZ1bmN0aW9uIChiKSB7IHJldHVybiBiLnN5c3RlbVZh
bHVlID09PSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLlZpZXc7IH0pOworICAgICAgICAgICAg
aWYgKCF2aWV3SW5wdXQpIHsKKyAgICAgICAgICAgICAgICB2aWV3SW5wdXQgPSBuZXcgX0lucHV0
X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5wdXRCbG9jayJdKCJ2
aWV3Iik7CisgICAgICAgICAgICAgICAgdmlld0lucHV0LnNldEFzU3lzdGVtVmFsdWUoX25vZGVN
YXRlcmlhbFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0
ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5WaWV3KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZp
ZXdJbnB1dC5vdXRwdXQuY29ubmVjdFRvKHRoaXMudmlldyk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCF0aGlzLmZvZ0NvbG9yLmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgZm9nQ29s
b3JJbnB1dCA9IG1hdGVyaWFsLmdldElucHV0QmxvY2tCeVByZWRpY2F0ZShmdW5jdGlvbiAoYikg
eyByZXR1cm4gYi5zeXN0ZW1WYWx1ZSA9PT0gX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5Gb2dD
b2xvcjsgfSk7CisgICAgICAgICAgICBpZiAoIWZvZ0NvbG9ySW5wdXQpIHsKKyAgICAgICAgICAg
ICAgICBmb2dDb2xvcklucHV0ID0gbmV3IF9JbnB1dF9pbnB1dEJsb2NrX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIklucHV0QmxvY2siXSgiZm9nQ29sb3IiLCB1bmRlZmluZWQsIF9ub2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5Db2xvcjMpOwor
ICAgICAgICAgICAgICAgIGZvZ0NvbG9ySW5wdXQuc2V0QXNTeXN0ZW1WYWx1ZShfbm9kZU1hdGVy
aWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlh
bFN5c3RlbVZhbHVlcyJdLkZvZ0NvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
Z0NvbG9ySW5wdXQub3V0cHV0LmNvbm5lY3RUbyh0aGlzLmZvZ0NvbG9yKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgRm9nQmxvY2sucHJvdG90eXBlLnByZXBhcmVEZWZpbmVzID0gZnVuY3Rpb24g
KG1lc2gsIG5vZGVNYXRlcmlhbCwgZGVmaW5lcykgeworICAgICAgICB2YXIgc2NlbmUgPSBtZXNo
LmdldFNjZW5lKCk7CisgICAgICAgIGRlZmluZXMuc2V0VmFsdWUoIkZPRyIsIG5vZGVNYXRlcmlh
bC5mb2dFbmFibGVkICYmIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fWyJNYXRlcmlhbEhlbHBlciJdLkdldEZvZ1N0YXRlKG1lc2gsIHNjZW5lKSk7CisgICAgfTsK
KyAgICBGb2dCbG9jay5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChlZmZlY3QsIG5vZGVNYXRl
cmlhbCwgbWVzaCkgeworICAgICAgICBpZiAoIW1lc2gpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB2YXIgc2NlbmUgPSBtZXNoLmdldFNjZW5lKCk7CisgICAgICAg
IGVmZmVjdC5zZXRGbG9hdDQodGhpcy5fZm9nUGFyYW1ldGVycywgc2NlbmUuZm9nTW9kZSwgc2Nl
bmUuZm9nU3RhcnQsIHNjZW5lLmZvZ0VuZCwgc2NlbmUuZm9nRGVuc2l0eSk7CisgICAgfTsKKyAg
ICBGb2dCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAg
ICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAg
ICAgICAgaWYgKHN0YXRlLnRhcmdldCA9PT0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFn
bWVudCkgeworICAgICAgICAgICAgc3RhdGUuc2hhcmVkRGF0YS5ibG9ja3NXaXRoRGVmaW5lcy5w
dXNoKHRoaXMpOworICAgICAgICAgICAgc3RhdGUuc2hhcmVkRGF0YS5iaW5kYWJsZUJsb2Nrcy5w
dXNoKHRoaXMpOworICAgICAgICAgICAgc3RhdGUuX2VtaXRGdW5jdGlvbkZyb21JbmNsdWRlKCJm
b2dGcmFnbWVudERlY2xhcmF0aW9uIiwgIi8vIiArIHRoaXMubmFtZSwgeworICAgICAgICAgICAg
ICAgIHJlbW92ZVVuaWZvcm1zOiB0cnVlLAorICAgICAgICAgICAgICAgIHJlbW92ZVZhcnlpbmdz
OiB0cnVlLAorICAgICAgICAgICAgICAgIHJlbW92ZUlmRGVmOiBmYWxzZSwKKyAgICAgICAgICAg
ICAgICByZXBsYWNlU3RyaW5nczogW3sgc2VhcmNoOiAvZmxvYXQgQ2FsY0ZvZ0ZhY3RvclwoXCkv
LCByZXBsYWNlOiAiZmxvYXQgQ2FsY0ZvZ0ZhY3Rvcih2ZWMzIHZGb2dEaXN0YW5jZSwgdmVjNCB2
Rm9nSW5mb3MpIiB9XQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB2YXIgdGVtcEZvZ1Zh
cmlhYmxlbmFtZSA9IHN0YXRlLl9nZXRGcmVlVmFyaWFibGVOYW1lKCJmb2ciKTsKKyAgICAgICAg
ICAgIHZhciBjb2xvciA9IHRoaXMuaW5wdXQ7CisgICAgICAgICAgICB2YXIgZm9nQ29sb3IgPSB0
aGlzLmZvZ0NvbG9yOworICAgICAgICAgICAgdGhpcy5fZm9nUGFyYW1ldGVycyA9IHN0YXRlLl9n
ZXRGcmVlVmFyaWFibGVOYW1lKCJmb2dQYXJhbWV0ZXJzIik7CisgICAgICAgICAgICB2YXIgb3V0
cHV0ID0gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgICAgIHN0YXRlLl9lbWl0VW5pZm9ybUZy
b21TdHJpbmcodGhpcy5fZm9nUGFyYW1ldGVycywgInZlYzQiKTsKKyAgICAgICAgICAgIHN0YXRl
LmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjaWZkZWYgRk9HXHJcbiI7CisgICAgICAgICAgICBzdGF0
ZS5jb21waWxhdGlvblN0cmluZyArPSAiZmxvYXQgIiArIHRlbXBGb2dWYXJpYWJsZW5hbWUgKyAi
ID0gQ2FsY0ZvZ0ZhY3RvcigiICsgdGhpcy5fZm9nRGlzdGFuY2VOYW1lICsgIiwgIiArIHRoaXMu
X2ZvZ1BhcmFtZXRlcnMgKyAiKTtcclxuIjsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9u
U3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIgKyB0
ZW1wRm9nVmFyaWFibGVuYW1lICsgIiAqICIgKyBjb2xvci5hc3NvY2lhdGVkVmFyaWFibGVOYW1l
ICsgIi5yZ2IgKyAoMS4wIC0gIiArIHRlbXBGb2dWYXJpYWJsZW5hbWUgKyAiKSAqICIgKyBmb2dD
b2xvci5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi5yZ2I7XHJcbiIpOworICAgICAgICAgICAg
c3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNlbHNlXHJcbiIgKyB0aGlzLl9kZWNsYXJlT3V0
cHV0KG91dHB1dCwgc3RhdGUpICsgIiA9ICAiICsgY29sb3IuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICIucmdiO1xyXG4iOworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0g
IiNlbmRpZlxyXG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFy
IHdvcmxkUG9zID0gdGhpcy53b3JsZFBvc2l0aW9uOworICAgICAgICAgICAgdmFyIHZpZXcgPSB0
aGlzLnZpZXc7CisgICAgICAgICAgICB0aGlzLl9mb2dEaXN0YW5jZU5hbWUgPSBzdGF0ZS5fZ2V0
RnJlZVZhcmlhYmxlTmFtZSgidkZvZ0Rpc3RhbmNlIik7CisgICAgICAgICAgICBzdGF0ZS5fZW1p
dFZhcnlpbmdGcm9tU3RyaW5nKHRoaXMuX2ZvZ0Rpc3RhbmNlTmFtZSwgInZlYzMiKTsKKyAgICAg
ICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2ZvZ0Rpc3RhbmNlTmFtZSAr
ICIgPSAoIiArIHZpZXcuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIgKiAiICsgd29ybGRQb3Mu
YXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIpLnh5ejtcclxuIjsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBGb2dCbG9jazsKK30oX25vZGVNYXRl
cmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2Nr
Il0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIl9U
eXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uRm9nQmxvY2siXSA9IEZvZ0Jsb2Nr
OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvRHVhbC9p
bmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9EdWFsL2luZGV4LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBGb2dCbG9jaywgTGlnaHRCbG9jaywgVGV4dHVyZUJsb2NrLCBSZWZs
ZWN0aW9uVGV4dHVyZUJsb2NrICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfZm9nQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vZm9nQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL0R1
YWwvZm9nQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRm9nQmxvY2siLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9mb2dCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJGb2dCbG9j
ayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saWdodEJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpZ2h0Qmxv
Y2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL0R1YWwvbGlnaHRCbG9jay50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJMaWdodEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbGlnaHRCbG9j
a19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMaWdodEJsb2NrIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3RleHR1cmVCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90ZXh0dXJlQmxvY2sgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvQmxvY2tzL0R1YWwvdGV4dHVyZUJsb2NrLnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlRleHR1cmVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3RleHR1cmVCbG9ja19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0dXJlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfcmVmbGVjdGlvblRleHR1cmVCbG9ja19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yZWZsZWN0aW9uVGV4dHVy
ZUJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9EdWFsL3JlZmxlY3Rpb25UZXh0dXJl
QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVmbGVjdGlvblRleHR1cmVCbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3JlZmxlY3Rpb25UZXh0dXJlQmxvY2tfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siUmVmbGVjdGlvblRleHR1cmVCbG9jayJdOyB9KTsKKworCisKKworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9EdWFsL2xpZ2h0
QmxvY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9EdWFsL2xpZ2h0Qmxv
Y2sudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTGlnaHRCbG9jayAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaWdodEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBMaWdodEJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8g
Ii4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01h
dGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01h
dGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL21hdGVyaWFs
SGVscGVyICovICIuL01hdGVyaWFscy9tYXRlcmlhbEhlbHBlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbFN5
c3RlbVZhbHVlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfSW5wdXRfaW5wdXRCbG9ja19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vSW5wdXQv
aW5wdXRCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvSW5wdXQvaW5wdXRCbG9jay50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4v
TWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisKKwor
CisvKioKKyAqIEJsb2NrIHVzZWQgdG8gYWRkIGxpZ2h0IGluIHRoZSBmcmFnbWVudCBzaGFkZXIK
KyAqLwordmFyIExpZ2h0QmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTGln
aHRCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgTGlnaHRCbG9j
aworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBMaWdodEJsb2NrKG5hbWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXhBbmRGcmFn
bWVudCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgid29ybGRQb3NpdGlv
biIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5W
ZWN0b3I0LCBmYWxzZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXgpOworICAgICAg
ICBfdGhpcy5yZWdpc3RlcklucHV0KCJ3b3JsZE5vcm1hbCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0LCBmYWxzZSwgX25vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQo
ImNhbWVyYVBvc2l0aW9uIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlcyJdLlZlY3RvcjMsIGZhbHNlLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZy
YWdtZW50KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoImRpZmZ1c2VPdXRwdXQiLCBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3Iz
LCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ik5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KTsKKyAgICAgICAgX3RoaXMucmVn
aXN0ZXJPdXRwdXQoInNwZWN1bGFyT3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yMywgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMi
XS5GcmFnbWVudCk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAg
ICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNz
IG5hbWUKKyAgICAgKi8KKyAgICBMaWdodEJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiTGlnaHRCbG9jayI7CisgICAgfTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHRCbG9jay5wcm90b3R5cGUsICJ3b3JsZFBvc2l0aW9u
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQgcG9zaXRpb24gaW5w
dXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaWdodEJsb2NrLnByb3RvdHlwZSwgIndvcmxkTm9ybWFs
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQgbm9ybWFsIGlucHV0
IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzFdOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoTGlnaHRCbG9jay5wcm90b3R5cGUsICJjYW1lcmFQb3NpdGlv
biIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0cyB0aGUgY2FtZXJhIChvciBleWUpIHBv
c2l0aW9uIGNvbXBvbmVudAorICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMl07CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaWdodEJsb2NrLnByb3RvdHlwZSwgImRpZmZ1c2VP
dXRwdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBkaWZmdXNlIG91dHB1
dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaWdodEJsb2NrLnByb3RvdHlwZSwgInNwZWN1bGFyT3V0
cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgc3BlY3VsYXIgb3V0cHV0
IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
TGlnaHRCbG9jay5wcm90b3R5cGUuYXV0b0NvbmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCkg
eworICAgICAgICBpZiAoIXRoaXMuY2FtZXJhUG9zaXRpb24uaXNDb25uZWN0ZWQpIHsKKyAgICAg
ICAgICAgIHZhciBjYW1lcmFQb3NpdGlvbklucHV0ID0gbWF0ZXJpYWwuZ2V0SW5wdXRCbG9ja0J5
UHJlZGljYXRlKGZ1bmN0aW9uIChiKSB7IHJldHVybiBiLnN5c3RlbVZhbHVlID09PSBfbm9kZU1h
dGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk5vZGVNYXRl
cmlhbFN5c3RlbVZhbHVlcyJdLkNhbWVyYVBvc2l0aW9uOyB9KTsKKyAgICAgICAgICAgIGlmICgh
Y2FtZXJhUG9zaXRpb25JbnB1dCkgeworICAgICAgICAgICAgICAgIGNhbWVyYVBvc2l0aW9uSW5w
dXQgPSBuZXcgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
SW5wdXRCbG9jayJdKCJjYW1lcmFQb3NpdGlvbiIpOworICAgICAgICAgICAgICAgIGNhbWVyYVBv
c2l0aW9uSW5wdXQuc2V0QXNTeXN0ZW1WYWx1ZShfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLkNh
bWVyYVBvc2l0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbWVyYVBvc2l0aW9u
SW5wdXQub3V0cHV0LmNvbm5lY3RUbyh0aGlzLmNhbWVyYVBvc2l0aW9uKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgTGlnaHRCbG9jay5wcm90b3R5cGUucHJlcGFyZURlZmluZXMgPSBmdW5jdGlv
biAobWVzaCwgbm9kZU1hdGVyaWFsLCBkZWZpbmVzKSB7CisgICAgICAgIGlmICghZGVmaW5lcy5f
YXJlTGlnaHRzRGlydHkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgc2NlbmUgPSBtZXNoLmdldFNjZW5lKCk7CisgICAgICAgIGlmICghdGhpcy5saWdodCkg
eworICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JMaWdodHMoc2NlbmUsIG1lc2gs
IGRlZmluZXMsIHRydWUsIG5vZGVNYXRlcmlhbC5tYXhTaW11bHRhbmVvdXNMaWdodHMpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIHN0YXRlID0geworICAgICAg
ICAgICAgICAgIG5lZWROb3JtYWxzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBuZWVkUmVidWls
ZDogZmFsc2UsCisgICAgICAgICAgICAgICAgbGlnaHRtYXBNb2RlOiBmYWxzZSwKKyAgICAgICAg
ICAgICAgICBzaGFkb3dFbmFibGVkOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBzcGVjdWxhckVu
YWJsZWQ6IGZhbHNlCisgICAgICAgICAgICB9OworICAgICAgICAgICAgX21hdGVyaWFsSGVscGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZURl
ZmluZXNGb3JMaWdodChzY2VuZSwgbWVzaCwgdGhpcy5saWdodCwgdGhpcy5fbGlnaHRJZCwgZGVm
aW5lcywgdHJ1ZSwgc3RhdGUpOworICAgICAgICAgICAgaWYgKHN0YXRlLm5lZWRSZWJ1aWxkKSB7
CisgICAgICAgICAgICAgICAgZGVmaW5lcy5yZWJ1aWxkKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9OworICAgIExpZ2h0QmxvY2sucHJvdG90eXBlLnVwZGF0ZVVuaWZvcm1zQW5k
U2FtcGxlcyA9IGZ1bmN0aW9uIChzdGF0ZSwgbm9kZU1hdGVyaWFsLCBkZWZpbmVzKSB7CisgICAg
ICAgIGZvciAodmFyIGxpZ2h0SW5kZXggPSAwOyBsaWdodEluZGV4IDwgbm9kZU1hdGVyaWFsLm1h
eFNpbXVsdGFuZW91c0xpZ2h0czsgbGlnaHRJbmRleCsrKSB7CisgICAgICAgICAgICBpZiAoIWRl
ZmluZXNbIkxJR0hUIiArIGxpZ2h0SW5kZXhdKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlVW5pZm9ybXNBbmRTYW1wbGVy
c0ZvckxpZ2h0KGxpZ2h0SW5kZXgsIHN0YXRlLnVuaWZvcm1zLCBzdGF0ZS5zYW1wbGVycywgZmFs
c2UsIHN0YXRlLnVuaWZvcm1CdWZmZXJzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgTGlnaHRC
bG9jay5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChlZmZlY3QsIG5vZGVNYXRlcmlhbCwgbWVz
aCkgeworICAgICAgICBpZiAoIW1lc2gpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB2YXIgc2NlbmUgPSBtZXNoLmdldFNjZW5lKCk7CisgICAgICAgIGlmICghdGhp
cy5saWdodCkgeworICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIk1hdGVyaWFsSGVscGVyIl0uQmluZExpZ2h0cyhzY2VuZSwgbWVzaCwgZWZm
ZWN0LCB0cnVlLCBub2RlTWF0ZXJpYWwubWF4U2ltdWx0YW5lb3VzTGlnaHRzLCBmYWxzZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kTGlnaHQodGhp
cy5saWdodCwgdGhpcy5fbGlnaHRJZCwgc2NlbmUsIG1lc2gsIGVmZmVjdCwgdHJ1ZSwgZmFsc2Up
OworICAgICAgICB9CisgICAgfTsKKyAgICBMaWdodEJsb2NrLnByb3RvdHlwZS5faW5qZWN0VmVy
dGV4Q29kZSA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICB2YXIgd29ybGRQb3MgPSB0aGlz
LndvcmxkUG9zaXRpb247CisgICAgICAgIHZhciBjb21tZW50cyA9ICIvLyIgKyB0aGlzLm5hbWU7
CisgICAgICAgIC8vIERlY2xhcmF0aW9uCisgICAgICAgIGlmICghdGhpcy5saWdodCkgeyAvLyBF
bWl0IGZvciBhbGwgbGlnaHRzCisgICAgICAgICAgICBzdGF0ZS5fZW1pdEZ1bmN0aW9uRnJvbUlu
Y2x1ZGUoc3RhdGUuc3VwcG9ydFVuaWZvcm1CdWZmZXJzID8gImxpZ2h0VWJvRGVjbGFyYXRpb24i
IDogImxpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbiIsIGNvbW1lbnRzLCB7CisgICAgICAgICAgICAg
ICAgcmVwZWF0S2V5OiAibWF4U2ltdWx0YW5lb3VzTGlnaHRzIgorICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB0aGlzLl9saWdodElkID0gMDsKKyAgICAgICAgICAgIHN0YXRlLnNoYXJlZERh
dGEuZHluYW1pY1VuaWZvcm1CbG9ja3MucHVzaCh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2xpZ2h0SWQgPSAoc3RhdGUuY291bnRlcnNbImxpZ2h0
Q291bnRlciJdICE9PSB1bmRlZmluZWQgPyBzdGF0ZS5jb3VudGVyc1sibGlnaHRDb3VudGVyIl0g
OiAtMSkgKyAxOworICAgICAgICAgICAgc3RhdGUuY291bnRlcnNbImxpZ2h0Q291bnRlciJdID0g
dGhpcy5fbGlnaHRJZDsKKyAgICAgICAgICAgIHN0YXRlLl9lbWl0RnVuY3Rpb25Gcm9tSW5jbHVk
ZShzdGF0ZS5zdXBwb3J0VW5pZm9ybUJ1ZmZlcnMgPyAibGlnaHRVYm9EZWNsYXJhdGlvbiIgOiAi
bGlnaHRGcmFnbWVudERlY2xhcmF0aW9uIiwgY29tbWVudHMsIHsKKyAgICAgICAgICAgICAgICBy
ZXBsYWNlU3RyaW5nczogW3sgc2VhcmNoOiAve1h9L2csIHJlcGxhY2U6IHRoaXMuX2xpZ2h0SWQu
dG9TdHJpbmcoKSB9XQorICAgICAgICAgICAgfSwgdGhpcy5fbGlnaHRJZC50b1N0cmluZygpKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBJbmplY3QgY29kZSBpbiB2ZXJ0ZXgKKyAgICAgICAgdmFy
IHdvcmxkUG9zVmFyeWluZ05hbWUgPSAidl8iICsgd29ybGRQb3MuYXNzb2NpYXRlZFZhcmlhYmxl
TmFtZTsKKyAgICAgICAgaWYgKHN0YXRlLl9lbWl0VmFyeWluZ0Zyb21TdHJpbmcod29ybGRQb3NW
YXJ5aW5nTmFtZSwgInZlYzQiKSkgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJp
bmcgKz0gd29ybGRQb3NWYXJ5aW5nTmFtZSArICIgPSAiICsgd29ybGRQb3MuYXNzb2NpYXRlZFZh
cmlhYmxlTmFtZSArICI7XHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubGlnaHQp
IHsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHN0YXRlLl9lbWl0Q29k
ZUZyb21JbmNsdWRlKCJzaGFkb3dzVmVydGV4IiwgY29tbWVudHMsIHsKKyAgICAgICAgICAgICAg
ICByZXBsYWNlU3RyaW5nczogWworICAgICAgICAgICAgICAgICAgICB7IHNlYXJjaDogL3tYfS9n
LCByZXBsYWNlOiB0aGlzLl9saWdodElkLnRvU3RyaW5nKCkgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeyBzZWFyY2g6IC93b3JsZFBvcy9nLCByZXBsYWNlOiB3b3JsZFBvcy5hc3NvY2lhdGVkVmFy
aWFibGVOYW1lIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9
ICJ2ZWM0IHdvcmxkUG9zID0gIiArIHdvcmxkUG9zLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAi
O1xyXG4iOworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gc3RhdGUuX2Vt
aXRDb2RlRnJvbUluY2x1ZGUoInNoYWRvd3NWZXJ0ZXgiLCBjb21tZW50cywgeworICAgICAgICAg
ICAgICAgIHJlcGVhdEtleTogIm1heFNpbXVsdGFuZW91c0xpZ2h0cyIKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9CisgICAgfTsKKyAgICBMaWdodEJsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9j
ayA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJs
b2NrLmNhbGwodGhpcywgc3RhdGUpOworICAgICAgICBpZiAoc3RhdGUudGFyZ2V0ICE9PSBfbm9k
ZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KSB7CisgICAgICAgICAgICAvLyBWZXJ0ZXgK
KyAgICAgICAgICAgIHRoaXMuX2luamVjdFZlcnRleENvZGUoc3RhdGUpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZyYWdtZW50CisgICAgICAgIHN0YXRlLnNo
YXJlZERhdGEuYmluZGFibGVCbG9ja3MucHVzaCh0aGlzKTsKKyAgICAgICAgc3RhdGUuc2hhcmVk
RGF0YS5ibG9ja3NXaXRoRGVmaW5lcy5wdXNoKHRoaXMpOworICAgICAgICB2YXIgY29tbWVudHMg
PSAiLy8iICsgdGhpcy5uYW1lOworICAgICAgICB2YXIgd29ybGRQb3MgPSB0aGlzLndvcmxkUG9z
aXRpb247CisgICAgICAgIHN0YXRlLl9lbWl0RnVuY3Rpb25Gcm9tSW5jbHVkZSgiaGVscGVyRnVu
Y3Rpb25zIiwgY29tbWVudHMpOworICAgICAgICBzdGF0ZS5fZW1pdEZ1bmN0aW9uRnJvbUluY2x1
ZGUoImxpZ2h0c0ZyYWdtZW50RnVuY3Rpb25zIiwgY29tbWVudHMsIHsKKyAgICAgICAgICAgIHJl
cGxhY2VTdHJpbmdzOiBbCisgICAgICAgICAgICAgICAgeyBzZWFyY2g6IC92UG9zaXRpb25XL2cs
IHJlcGxhY2U6ICJ2XyIgKyB3b3JsZFBvcy5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi54eXoi
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSk7CisgICAgICAgIHN0YXRlLl9lbWl0RnVuY3Rp
b25Gcm9tSW5jbHVkZSgic2hhZG93c0ZyYWdtZW50RnVuY3Rpb25zIiwgY29tbWVudHMsIHsKKyAg
ICAgICAgICAgIHJlcGxhY2VTdHJpbmdzOiBbCisgICAgICAgICAgICAgICAgeyBzZWFyY2g6IC92
UG9zaXRpb25XL2csIHJlcGxhY2U6ICJ2XyIgKyB3b3JsZFBvcy5hc3NvY2lhdGVkVmFyaWFibGVO
YW1lICsgIi54eXoiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSk7CisgICAgICAgIGlmICgh
dGhpcy5saWdodCkgeyAvLyBFbWl0IGZvciBhbGwgbGlnaHRzCisgICAgICAgICAgICBzdGF0ZS5f
ZW1pdEZ1bmN0aW9uRnJvbUluY2x1ZGUoc3RhdGUuc3VwcG9ydFVuaWZvcm1CdWZmZXJzID8gImxp
Z2h0VWJvRGVjbGFyYXRpb24iIDogImxpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbiIsIGNvbW1lbnRz
LCB7CisgICAgICAgICAgICAgICAgcmVwZWF0S2V5OiAibWF4U2ltdWx0YW5lb3VzTGlnaHRzIgor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBz
dGF0ZS5fZW1pdEZ1bmN0aW9uRnJvbUluY2x1ZGUoc3RhdGUuc3VwcG9ydFVuaWZvcm1CdWZmZXJz
ID8gImxpZ2h0VWJvRGVjbGFyYXRpb24iIDogImxpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbiIsIGNv
bW1lbnRzLCB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVN0cmluZ3M6IFt7IHNlYXJjaDogL3tY
fS9nLCByZXBsYWNlOiB0aGlzLl9saWdodElkLnRvU3RyaW5nKCkgfV0KKyAgICAgICAgICAgIH0s
IHRoaXMuX2xpZ2h0SWQudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAvLyBVbmlmb3JtcyBhbmQg
c2FtcGxlcnMKKyAgICAgICAgICAgIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVVbmlmb3Jtc0FuZFNhbXBsZXJzRm9y
TGlnaHQodGhpcy5fbGlnaHRJZCwgc3RhdGUudW5pZm9ybXMsIHN0YXRlLnNhbXBsZXJzLCB1bmRl
ZmluZWQsIHN0YXRlLnVuaWZvcm1CdWZmZXJzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb2Rl
CisgICAgICAgIGlmICh0aGlzLl9saWdodElkID09PSAwKSB7CisgICAgICAgICAgICBpZiAoc3Rh
dGUuX3JlZ2lzdGVyVGVtcFZhcmlhYmxlKCJ2aWV3RGlyZWN0aW9uVyIpKSB7CisgICAgICAgICAg
ICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gInZlYzMgdmlld0RpcmVjdGlvblcgPSBu
b3JtYWxpemUoIiArIHRoaXMuY2FtZXJhUG9zaXRpb24uYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSAr
ICIgLSAiICsgKCJ2XyIgKyB3b3JsZFBvcy5hc3NvY2lhdGVkVmFyaWFibGVOYW1lKSArICIueHl6
KTtcclxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3Ry
aW5nICs9ICJsaWdodGluZ0luZm8gaW5mbztcclxuIjsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBp
bGF0aW9uU3RyaW5nICs9ICJmbG9hdCBzaGFkb3cgPSAxLjtcclxuIjsKKyAgICAgICAgICAgIHN0
YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICJmbG9hdCBnbG9zc2luZXNzID0gMC47XHJcbiI7Cisg
ICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAidmVjMyBkaWZmdXNlQmFzZSA9
IHZlYzMoMC4sIDAuLCAwLik7XHJcbiI7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0
cmluZyArPSAidmVjMyBzcGVjdWxhckJhc2UgPSB2ZWMzKDAuLCAwLiwgMC4pO1xyXG4iOworICAg
ICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gInZlYzMgbm9ybWFsVyA9ICIgKyB0
aGlzLndvcmxkTm9ybWFsLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLnh5ejtcclxuIjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5saWdodCkgeworICAgICAgICAgICAgc3RhdGUuY29t
cGlsYXRpb25TdHJpbmcgKz0gc3RhdGUuX2VtaXRDb2RlRnJvbUluY2x1ZGUoImxpZ2h0RnJhZ21l
bnQiLCBjb21tZW50cywgeworICAgICAgICAgICAgICAgIHJlcGxhY2VTdHJpbmdzOiBbCisgICAg
ICAgICAgICAgICAgICAgIHsgc2VhcmNoOiAve1h9L2csIHJlcGxhY2U6IHRoaXMuX2xpZ2h0SWQu
dG9TdHJpbmcoKSB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyAr
PSBzdGF0ZS5fZW1pdENvZGVGcm9tSW5jbHVkZSgibGlnaHRGcmFnbWVudCIsIGNvbW1lbnRzLCB7
CisgICAgICAgICAgICAgICAgcmVwZWF0S2V5OiAibWF4U2ltdWx0YW5lb3VzTGlnaHRzIgorICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRpZmZ1c2VPdXRwdXQgPSB0aGlz
LmRpZmZ1c2VPdXRwdXQ7CisgICAgICAgIHZhciBzcGVjdWxhck91dHB1dCA9IHRoaXMuc3BlY3Vs
YXJPdXRwdXQ7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xh
cmVPdXRwdXQoZGlmZnVzZU91dHB1dCwgc3RhdGUpICsgIiA9IGRpZmZ1c2VCYXNlO1xyXG4iOwor
ICAgICAgICBpZiAoc3BlY3VsYXJPdXRwdXQuaGFzRW5kcG9pbnRzKSB7CisgICAgICAgICAgICBz
dGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KHNwZWN1bGFyT3V0
cHV0LCBzdGF0ZSkgKyAiID0gc3BlY3VsYXJCYXNlO1xyXG4iOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0aGlzOworICAgIH07CisgICAgTGlnaHRCbG9jay5wcm90b3R5cGUuc2VyaWFsaXpl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9zdXBl
ci5wcm90b3R5cGUuc2VyaWFsaXplLmNhbGwodGhpcyk7CisgICAgICAgIGlmICh0aGlzLmxpZ2h0
KSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmxpZ2h0SWQgPSB0aGlzLmxpZ2h0
LmlkOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAg
IH07CisgICAgTGlnaHRCbG9jay5wcm90b3R5cGUuX2Rlc2VyaWFsaXplID0gZnVuY3Rpb24gKHNl
cmlhbGl6YXRpb25PYmplY3QsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIF9zdXBlci5wcm90
b3R5cGUuX2Rlc2VyaWFsaXplLmNhbGwodGhpcywgc2VyaWFsaXphdGlvbk9iamVjdCwgc2NlbmUs
IHJvb3RVcmwpOworICAgICAgICBpZiAoc2VyaWFsaXphdGlvbk9iamVjdC5saWdodElkKSB7Cisg
ICAgICAgICAgICB0aGlzLmxpZ2h0ID0gc2NlbmUuZ2V0TGlnaHRCeUlEKHNlcmlhbGl6YXRpb25P
YmplY3QubGlnaHRJZCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBMaWdodEJsb2Nr
OworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9k
ZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5MaWdodEJs
b2NrIl0gPSBMaWdodEJsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9CbG9ja3MvRHVhbC9yZWZsZWN0aW9uVGV4dHVyZUJsb2NrLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvRHVhbC9yZWZsZWN0aW9uVGV4dHVyZUJs
b2NrLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJlZmxlY3Rpb25U
ZXh0dXJlQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVmbGVj
dGlvblRleHR1cmVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmVmbGVjdGlvblRleHR1cmVC
bG9jazsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2Rl
X21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9u
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9NaXNjL3R5cGVTdG9y
ZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9U
ZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi8uLi9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9U
ZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0lucHV0X2lu
cHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL0lucHV0L2lucHV0QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL0lu
cHV0L2lucHV0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVy
aWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMgKi8gIi4vTWF0ZXJp
YWxzL05vZGUvbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9FbmdpbmVzL2NvbnN0YW50cyAq
LyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworCisKKworCisKKworCisKKworLyoqCisgKiBC
bG9jayB1c2VkIHRvIHJlYWQgYSByZWZsZWN0aW9uIHRleHR1cmUgZnJvbSBhIHNhbXBsZXIKKyAq
LwordmFyIFJlZmxlY3Rpb25UZXh0dXJlQmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
X3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRl
bmRzIl0oUmVmbGVjdGlvblRleHR1cmVCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGUgYSBuZXcgVGV4dHVyZUJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
YmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIFJlZmxlY3Rpb25UZXh0dXJlQmxvY2so
bmFtZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9k
ZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleEFuZEZyYWdtZW50KSB8fCB0aGlzOworICAgICAg
ICBfdGhpcy5yZWdpc3RlcklucHV0KCJwb3NpdGlvbiIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IzLCBmYWxzZSwgX25vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiXS5WZXJ0ZXgpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ3b3Js
ZFBvc2l0aW9uIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlcyJdLlZlY3RvcjQsIGZhbHNlLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleCk7
CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoIndvcmxkTm9ybWFsIiwgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQsIGZhbHNlLCBf
bm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVy
SW5wdXQoIndvcmxkIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlcyJdLk1hdHJpeCwgZmFsc2UsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4
KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgiY2FtZXJhUG9zaXRpb24iLCBfbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yMywgZmFs
c2UsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uRnJhZ21lbnQpOworICAgICAgICBfdGhpcy5y
ZWdpc3RlcklucHV0KCJ2aWV3IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcyJdLk1hdHJpeCwgZmFsc2UsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0u
RnJhZ21lbnQpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgicmdiIiwgX25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yMywgX25vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0
ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0
cHV0KCJyIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLkZsb2F0LCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KTsKKyAgICAgICAg
X3RoaXMucmVnaXN0ZXJPdXRwdXQoImciLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uRnJh
Z21lbnQpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgiYiIsIF9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCwgX25vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiXS5GcmFnbWVudCk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVy
bnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBSZWZsZWN0aW9uVGV4dHVyZUJsb2NrLnBy
b3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiUmVm
bGVjdGlvblRleHR1cmVCbG9jayI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
UmVmbGVjdGlvblRleHR1cmVCbG9jay5wcm90b3R5cGUsICJwb3NpdGlvbiIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIHdvcmxkIHBvc2l0aW9uIGlucHV0IGNvbXBvbmVudAor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoUmVmbGVjdGlvblRleHR1cmVCbG9jay5wcm90b3R5cGUsICJ3b3JsZFBvc2l0aW9u
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQgcG9zaXRpb24gaW5w
dXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWZsZWN0aW9uVGV4dHVyZUJsb2NrLnByb3RvdHlwZSwg
IndvcmxkTm9ybWFsIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQg
bm9ybWFsIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzJdOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdGlvblRleHR1cmVCbG9jay5w
cm90b3R5cGUsICJ3b3JsZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHdv
cmxkIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzNdOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdGlvblRleHR1cmVCbG9jay5wcm90
b3R5cGUsICJjYW1lcmFQb3NpdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0cyB0
aGUgY2FtZXJhIChvciBleWUpIHBvc2l0aW9uIGNvbXBvbmVudAorICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbNF07
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWZsZWN0aW9u
VGV4dHVyZUJsb2NrLnByb3RvdHlwZSwgInZpZXciLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSB2aWV3IGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzVdOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdGlvblRleHR1
cmVCbG9jay5wcm90b3R5cGUsICJyZ2IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSByZ2Igb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3Rpb25UZXh0dXJlQmxv
Y2sucHJvdG90eXBlLCAiciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHIg
b3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3Rpb25UZXh0dXJlQmxvY2sucHJvdG90
eXBlLCAiZyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGcgb3V0cHV0IGNv
bXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1syXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3Rpb25UZXh0dXJlQmxvY2sucHJvdG90eXBlLCAiYiIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGIgb3V0cHV0IGNvbXBvbmVudAor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fb3V0cHV0c1szXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgUmVmbGVjdGlvblRl
eHR1cmVCbG9jay5wcm90b3R5cGUuYXV0b0NvbmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCkg
eworICAgICAgICBpZiAoIXRoaXMucG9zaXRpb24uaXNDb25uZWN0ZWQpIHsKKyAgICAgICAgICAg
IHZhciBwb3NpdGlvbklucHV0ID0gbWF0ZXJpYWwuZ2V0SW5wdXRCbG9ja0J5UHJlZGljYXRlKGZ1
bmN0aW9uIChiKSB7IHJldHVybiBiLmlzQXR0cmlidXRlICYmIGIubmFtZSA9PT0gInBvc2l0aW9u
IjsgfSk7CisgICAgICAgICAgICBpZiAoIXBvc2l0aW9uSW5wdXQpIHsKKyAgICAgICAgICAgICAg
ICBwb3NpdGlvbklucHV0ID0gbmV3IF9JbnB1dF9pbnB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X19bIklucHV0QmxvY2siXSgicG9zaXRpb24iKTsKKyAgICAgICAgICAgICAgICBw
b3NpdGlvbklucHV0LnNldEFzQXR0cmlidXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBwb3NpdGlvbklucHV0Lm91dHB1dC5jb25uZWN0VG8odGhpcy5wb3NpdGlvbik7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCF0aGlzLndvcmxkLmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2
YXIgd29ybGRJbnB1dCA9IG1hdGVyaWFsLmdldElucHV0QmxvY2tCeVByZWRpY2F0ZShmdW5jdGlv
biAoYikgeyByZXR1cm4gYi5zeXN0ZW1WYWx1ZSA9PT0gX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVl
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMi
XS5Xb3JsZDsgfSk7CisgICAgICAgICAgICBpZiAoIXdvcmxkSW5wdXQpIHsKKyAgICAgICAgICAg
ICAgICB3b3JsZElucHV0ID0gbmV3IF9JbnB1dF9pbnB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X19bIklucHV0QmxvY2siXSgid29ybGQiKTsKKyAgICAgICAgICAgICAgICB3b3Js
ZElucHV0LnNldEFzU3lzdGVtVmFsdWUoX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5Xb3JsZCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JsZElucHV0Lm91dHB1dC5jb25uZWN0VG8o
dGhpcy53b3JsZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLmNhbWVyYVBvc2l0aW9u
LmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgY2FtZXJhUG9zaXRpb25JbnB1dCA9IG1h
dGVyaWFsLmdldElucHV0QmxvY2tCeVByZWRpY2F0ZShmdW5jdGlvbiAoYikgeyByZXR1cm4gYi5z
eXN0ZW1WYWx1ZSA9PT0gX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5DYW1lcmFQb3NpdGlvbjsg
fSk7CisgICAgICAgICAgICBpZiAoIWNhbWVyYVBvc2l0aW9uSW5wdXQpIHsKKyAgICAgICAgICAg
ICAgICBjYW1lcmFQb3NpdGlvbklucHV0ID0gbmV3IF9JbnB1dF9pbnB1dEJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X19bIklucHV0QmxvY2siXSgiY2FtZXJhUG9zaXRpb24iKTsKKyAg
ICAgICAgICAgICAgICBjYW1lcmFQb3NpdGlvbklucHV0LnNldEFzU3lzdGVtVmFsdWUoX25vZGVN
YXRlcmlhbFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJOb2RlTWF0
ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5DYW1lcmFQb3NpdGlvbik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYW1lcmFQb3NpdGlvbklucHV0Lm91dHB1dC5jb25uZWN0VG8odGhpcy5jYW1lcmFQ
b3NpdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnZpZXcuaXNDb25uZWN0ZWQp
IHsKKyAgICAgICAgICAgIHZhciB2aWV3SW5wdXQgPSBtYXRlcmlhbC5nZXRJbnB1dEJsb2NrQnlQ
cmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuc3lzdGVtVmFsdWUgPT09IF9ub2RlTWF0
ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTm9kZU1hdGVy
aWFsU3lzdGVtVmFsdWVzIl0uVmlldzsgfSk7CisgICAgICAgICAgICBpZiAoIXZpZXdJbnB1dCkg
eworICAgICAgICAgICAgICAgIHZpZXdJbnB1dCA9IG5ldyBfSW5wdXRfaW5wdXRCbG9ja19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJJbnB1dEJsb2NrIl0oInZpZXciKTsKKyAgICAgICAg
ICAgICAgICB2aWV3SW5wdXQuc2V0QXNTeXN0ZW1WYWx1ZShfbm9kZU1hdGVyaWFsU3lzdGVtVmFs
dWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVl
cyJdLlZpZXcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmlld0lucHV0Lm91dHB1dC5j
b25uZWN0VG8odGhpcy52aWV3KTsKKyAgICAgICAgfQorICAgIH07CisgICAgUmVmbGVjdGlvblRl
eHR1cmVCbG9jay5wcm90b3R5cGUucHJlcGFyZURlZmluZXMgPSBmdW5jdGlvbiAobWVzaCwgbm9k
ZU1hdGVyaWFsLCBkZWZpbmVzKSB7CisgICAgICAgIGlmICghZGVmaW5lcy5fYXJlVGV4dHVyZXNE
aXJ0eSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghdGhp
cy50ZXh0dXJlIHx8ICF0aGlzLnRleHR1cmUuZ2V0VGV4dHVyZU1hdHJpeCkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRlZmluZXMuc2V0VmFsdWUodGhpcy5fZGVm
aW5lM0ROYW1lLCB0aGlzLnRleHR1cmUuaXNDdWJlKTsKKyAgICAgICAgZGVmaW5lcy5zZXRWYWx1
ZSh0aGlzLl9kZWZpbmVMb2NhbEN1YmljTmFtZSwgdGhpcy50ZXh0dXJlLmJvdW5kaW5nQm94U2l6
ZSA/IHRydWUgOiBmYWxzZSk7CisgICAgICAgIGRlZmluZXMuc2V0VmFsdWUodGhpcy5fZGVmaW5l
RXhwbGljaXROYW1lLCB0aGlzLnRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RV9FWFBMSUNJVF9NT0RFKTsKKyAgICAgICAgZGVmaW5lcy5zZXRWYWx1ZSh0aGlzLl9kZWZpbmVT
a3lib3hOYW1lLCB0aGlzLnRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9T
S1lCT1hfTU9ERSk7CisgICAgICAgIGRlZmluZXMuc2V0VmFsdWUodGhpcy5fZGVmaW5lQ3ViaWNO
YW1lLCB0aGlzLnRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9DVUJJQ19N
T0RFKTsKKyAgICAgICAgZGVmaW5lcy5zZXRWYWx1ZSh0aGlzLl9kZWZpbmVTcGhlcmljYWxOYW1l
LCB0aGlzLnRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9TUEhFUklDQUxf
TU9ERSk7CisgICAgICAgIGRlZmluZXMuc2V0VmFsdWUodGhpcy5fZGVmaW5lUGxhbmFyTmFtZSwg
dGhpcy50ZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfUExBTkFSX01PREUp
OworICAgICAgICBkZWZpbmVzLnNldFZhbHVlKHRoaXMuX2RlZmluZVByb2plY3Rpb25OYW1lLCB0
aGlzLnRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9QUk9KRUNUSU9OX01P
REUpOworICAgICAgICBkZWZpbmVzLnNldFZhbHVlKHRoaXMuX2RlZmluZUVxdWlyZWN0YW5ndWxh
ck5hbWUsIHRoaXMudGV4dHVyZS5jb29yZGluYXRlc01vZGUgPT09IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFudHMiXS5URVhUVVJFX0VRVUlS
RUNUQU5HVUxBUl9NT0RFKTsKKyAgICAgICAgZGVmaW5lcy5zZXRWYWx1ZSh0aGlzLl9kZWZpbmVF
cXVpcmVjdGFuZ3VsYXJGaXhlZE5hbWUsIHRoaXMudGV4dHVyZS5jb29yZGluYXRlc01vZGUgPT09
IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdGFu
dHMiXS5URVhUVVJFX0ZJWEVEX0VRVUlSRUNUQU5HVUxBUl9NT0RFKTsKKyAgICAgICAgZGVmaW5l
cy5zZXRWYWx1ZSh0aGlzLl9kZWZpbmVNaXJyb3JlZEVxdWlyZWN0YW5ndWxhckZpeGVkTmFtZSwg
dGhpcy50ZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfRklYRURfRVFVSVJF
Q1RBTkdVTEFSX01JUlJPUkVEX01PREUpOworICAgIH07CisgICAgUmVmbGVjdGlvblRleHR1cmVC
bG9jay5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMu
dGV4dHVyZSAmJiAhdGhpcy50ZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9OworICAgIFJlZmxlY3Rpb25UZXh0dXJlQmxvY2sucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlv
biAoZWZmZWN0LCBub2RlTWF0ZXJpYWwsIG1lc2gpIHsKKyAgICAgICAgaWYgKCFtZXNoIHx8ICF0
aGlzLnRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBl
ZmZlY3Quc2V0TWF0cml4KHRoaXMuX3JlZmxlY3Rpb25NYXRyaXhOYW1lLCB0aGlzLnRleHR1cmUu
Z2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXgoKSk7CisgICAgICAgIGlmICh0aGlzLnRleHR1cmUu
aXNDdWJlKSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSh0aGlzLl9jdWJlU2FtcGxl
ck5hbWUsIHRoaXMudGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBlZmZlY3Quc2V0VGV4dHVyZSh0aGlzLl8yRFNhbXBsZXJOYW1lLCB0aGlzLnRleHR1cmUp
OworICAgICAgICB9CisgICAgfTsKKyAgICBSZWZsZWN0aW9uVGV4dHVyZUJsb2NrLnByb3RvdHlw
ZS5faW5qZWN0VmVydGV4Q29kZSA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICB2YXIgd29y
bGRQb3NWYXJ5aW5nTmFtZSA9ICJ2XyIgKyB0aGlzLndvcmxkUG9zaXRpb24uYXNzb2NpYXRlZFZh
cmlhYmxlTmFtZTsKKyAgICAgICAgaWYgKHN0YXRlLl9lbWl0VmFyeWluZ0Zyb21TdHJpbmcod29y
bGRQb3NWYXJ5aW5nTmFtZSwgInZlYzQiKSkgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gd29ybGRQb3NWYXJ5aW5nTmFtZSArICIgPSAiICsgdGhpcy53b3JsZFBvc2l0
aW9uLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiO1xyXG4iOworICAgICAgICB9CisgICAgICAg
IHZhciB3b3JsZE5vcm1hbFZhcnlpbmdOYW1lID0gInZfIiArIHRoaXMud29ybGROb3JtYWwuYXNz
b2NpYXRlZFZhcmlhYmxlTmFtZTsKKyAgICAgICAgaWYgKHN0YXRlLl9lbWl0VmFyeWluZ0Zyb21T
dHJpbmcod29ybGROb3JtYWxWYXJ5aW5nTmFtZSwgInZlYzQiKSkgeworICAgICAgICAgICAgc3Rh
dGUuY29tcGlsYXRpb25TdHJpbmcgKz0gd29ybGROb3JtYWxWYXJ5aW5nTmFtZSArICIgPSAiICsg
dGhpcy53b3JsZE5vcm1hbC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIjtcclxuIjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9wb3NpdGlvblVWV05hbWUgPSBzdGF0ZS5fZ2V0RnJlZVZhcmlh
YmxlTmFtZSgicG9zaXRpb25VVlciKTsKKyAgICAgICAgdGhpcy5fZGlyZWN0aW9uV05hbWUgPSBz
dGF0ZS5fZ2V0RnJlZVZhcmlhYmxlTmFtZSgiZGlyZWN0aW9uVyIpOworICAgICAgICBpZiAoc3Rh
dGUuX2VtaXRWYXJ5aW5nRnJvbVN0cmluZyh0aGlzLl9wb3NpdGlvblVWV05hbWUsICJ2ZWMzIiwg
dGhpcy5fZGVmaW5lU2t5Ym94TmFtZSkpIHsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9u
U3RyaW5nICs9ICIjaWZkZWYgIiArIHRoaXMuX2RlZmluZVNreWJveE5hbWUgKyAiXHJcbiI7Cisg
ICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9wb3NpdGlvblVWV05h
bWUgKyAiID0gIiArIHRoaXMucG9zaXRpb24uYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJc
biI7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2VuZGlmXHJcbiI7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRlLl9lbWl0VmFyeWluZ0Zyb21TdHJpbmcodGhp
cy5fZGlyZWN0aW9uV05hbWUsICJ2ZWMzIiwgImRlZmluZWQoIiArIHRoaXMuX2RlZmluZUVxdWly
ZWN0YW5ndWxhckZpeGVkTmFtZSArICIpIHx8IGRlZmluZWQoIiArIHRoaXMuX2RlZmluZU1pcnJv
cmVkRXF1aXJlY3Rhbmd1bGFyRml4ZWROYW1lICsgIikiKSkgeworICAgICAgICAgICAgc3RhdGUu
Y29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZiBkZWZpbmVkKCIgKyB0aGlzLl9kZWZpbmVFcXVpcmVj
dGFuZ3VsYXJGaXhlZE5hbWUgKyAiKSB8fCBkZWZpbmVkKCIgKyB0aGlzLl9kZWZpbmVNaXJyb3Jl
ZEVxdWlyZWN0YW5ndWxhckZpeGVkTmFtZSArICIpXHJcbiI7CisgICAgICAgICAgICBzdGF0ZS5j
b21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kaXJlY3Rpb25XTmFtZSArICIgPSBub3JtYWxpemUo
dmVjMygiICsgdGhpcy53b3JsZC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiAqIHZlYzQoIiAr
IHRoaXMucG9zaXRpb24uYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIsIDAuMCkpKTtcclxuIjsK
KyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxuIjsKKyAg
ICAgICAgfQorICAgIH07CisgICAgUmVmbGVjdGlvblRleHR1cmVCbG9jay5wcm90b3R5cGUuX3dy
aXRlT3V0cHV0ID0gZnVuY3Rpb24gKHN0YXRlLCBvdXRwdXQsIHN3aXp6bGUpIHsKKyAgICAgICAg
c3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0
YXRlKSArICIgPSAiICsgdGhpcy5fcmVmbGVjdGlvbkNvbG9yTmFtZSArICIuIiArIHN3aXp6bGUg
KyAiO1xyXG4iOworICAgIH07CisgICAgUmVmbGVjdGlvblRleHR1cmVCbG9jay5wcm90b3R5cGUu
X2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlw
ZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLnRhcmdl
dCAhPT0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCkgeworICAgICAgICAgICAg
dGhpcy5fZGVmaW5lM0ROYW1lID0gc3RhdGUuX2dldEZyZWVEZWZpbmVOYW1lKCJSRUZMRUNUSU9O
TUFQXzNEIik7CisgICAgICAgICAgICB0aGlzLl9kZWZpbmVDdWJpY05hbWUgPSBzdGF0ZS5fZ2V0
RnJlZURlZmluZU5hbWUoIlJFRkxFQ1RJT05NQVBfQ1VCSUMiKTsKKyAgICAgICAgICAgIHRoaXMu
X2RlZmluZVNwaGVyaWNhbE5hbWUgPSBzdGF0ZS5fZ2V0RnJlZURlZmluZU5hbWUoIlJFRkxFQ1RJ
T05NQVBfU1BIRVJJQ0FMIik7CisgICAgICAgICAgICB0aGlzLl9kZWZpbmVQbGFuYXJOYW1lID0g
c3RhdGUuX2dldEZyZWVEZWZpbmVOYW1lKCJSRUZMRUNUSU9OTUFQX1BMQU5BUiIpOworICAgICAg
ICAgICAgdGhpcy5fZGVmaW5lUHJvamVjdGlvbk5hbWUgPSBzdGF0ZS5fZ2V0RnJlZURlZmluZU5h
bWUoIlJFRkxFQ1RJT05NQVBfUFJPSkVDVElPTiIpOworICAgICAgICAgICAgdGhpcy5fZGVmaW5l
RXhwbGljaXROYW1lID0gc3RhdGUuX2dldEZyZWVEZWZpbmVOYW1lKCJSRUZMRUNUSU9OTUFQX0VY
UExJQ0lUIik7CisgICAgICAgICAgICB0aGlzLl9kZWZpbmVFcXVpcmVjdGFuZ3VsYXJOYW1lID0g
c3RhdGUuX2dldEZyZWVEZWZpbmVOYW1lKCJSRUZMRUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxBUiIp
OworICAgICAgICAgICAgdGhpcy5fZGVmaW5lTG9jYWxDdWJpY05hbWUgPSBzdGF0ZS5fZ2V0RnJl
ZURlZmluZU5hbWUoIlVTRV9MT0NBTF9SRUZMRUNUSU9OTUFQX0NVQklDIik7CisgICAgICAgICAg
ICB0aGlzLl9kZWZpbmVNaXJyb3JlZEVxdWlyZWN0YW5ndWxhckZpeGVkTmFtZSA9IHN0YXRlLl9n
ZXRGcmVlRGVmaW5lTmFtZSgiUkVGTEVDVElPTk1BUF9NSVJST1JFREVRVUlSRUNUQU5HVUxBUl9G
SVhFRCIpOworICAgICAgICAgICAgdGhpcy5fZGVmaW5lRXF1aXJlY3Rhbmd1bGFyRml4ZWROYW1l
ID0gc3RhdGUuX2dldEZyZWVEZWZpbmVOYW1lKCJSRUZMRUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxB
Ul9GSVhFRCIpOworICAgICAgICAgICAgdGhpcy5fZGVmaW5lU2t5Ym94TmFtZSA9IHN0YXRlLl9n
ZXRGcmVlRGVmaW5lTmFtZSgiUkVGTEVDVElPTk1BUF9TS1lCT1giKTsKKyAgICAgICAgICAgIC8v
IFZlcnRleAorICAgICAgICAgICAgdGhpcy5faW5qZWN0VmVydGV4Q29kZShzdGF0ZSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc2hhcmVkRGF0YS5ibG9j
a2luZ0Jsb2Nrcy5wdXNoKHRoaXMpOworICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLnRleHR1cmVC
bG9ja3MucHVzaCh0aGlzKTsKKyAgICAgICAgLy8gU2FtcGxlcnMKKyAgICAgICAgdGhpcy5fY3Vi
ZVNhbXBsZXJOYW1lID0gc3RhdGUuX2dldEZyZWVWYXJpYWJsZU5hbWUodGhpcy5uYW1lICsgIkN1
YmVTYW1wbGVyIik7CisgICAgICAgIHN0YXRlLnNhbXBsZXJzLnB1c2godGhpcy5fY3ViZVNhbXBs
ZXJOYW1lKTsKKyAgICAgICAgdGhpcy5fMkRTYW1wbGVyTmFtZSA9IHN0YXRlLl9nZXRGcmVlVmFy
aWFibGVOYW1lKHRoaXMubmFtZSArICIyRFNhbXBsZXIiKTsKKyAgICAgICAgc3RhdGUuc2FtcGxl
cnMucHVzaCh0aGlzLl8yRFNhbXBsZXJOYW1lKTsKKyAgICAgICAgc3RhdGUuX3NhbXBsZXJEZWNs
YXJhdGlvbiArPSAiI2lmZGVmICIgKyB0aGlzLl9kZWZpbmUzRE5hbWUgKyAiXHJcbiI7CisgICAg
ICAgIHN0YXRlLl9zYW1wbGVyRGVjbGFyYXRpb24gKz0gInVuaWZvcm0gc2FtcGxlckN1YmUgIiAr
IHRoaXMuX2N1YmVTYW1wbGVyTmFtZSArICI7XHJcbiI7CisgICAgICAgIHN0YXRlLl9zYW1wbGVy
RGVjbGFyYXRpb24gKz0gIiNlbHNlXHJcbiI7CisgICAgICAgIHN0YXRlLl9zYW1wbGVyRGVjbGFy
YXRpb24gKz0gInVuaWZvcm0gc2FtcGxlcjJEICIgKyB0aGlzLl8yRFNhbXBsZXJOYW1lICsgIjtc
clxuIjsKKyAgICAgICAgc3RhdGUuX3NhbXBsZXJEZWNsYXJhdGlvbiArPSAiI2VuZGlmXHJcbiI7
CisgICAgICAgIC8vIEZyYWdtZW50CisgICAgICAgIHN0YXRlLnNoYXJlZERhdGEuYmxvY2tzV2l0
aERlZmluZXMucHVzaCh0aGlzKTsKKyAgICAgICAgc3RhdGUuc2hhcmVkRGF0YS5iaW5kYWJsZUJs
b2Nrcy5wdXNoKHRoaXMpOworICAgICAgICB2YXIgY29tbWVudHMgPSAiLy8iICsgdGhpcy5uYW1l
OworICAgICAgICBzdGF0ZS5fZW1pdEZ1bmN0aW9uKCJSZWNpcHJvY2FsUEkiLCAiI2RlZmluZSBS
RUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0IiwgIiIpOworICAgICAgICBzdGF0ZS5fZW1pdEZ1bmN0
aW9uRnJvbUluY2x1ZGUoInJlZmxlY3Rpb25GdW5jdGlvbiIsIGNvbW1lbnRzKTsKKyAgICAgICAg
dGhpcy5fcmVmbGVjdGlvbkNvbG9yTmFtZSA9IHN0YXRlLl9nZXRGcmVlVmFyaWFibGVOYW1lKCJy
ZWZsZWN0aW9uQ29sb3IiKTsKKyAgICAgICAgdGhpcy5fcmVmbGVjdGlvbkNvb3Jkc05hbWUgPSBz
dGF0ZS5fZ2V0RnJlZVZhcmlhYmxlTmFtZSgicmVmbGVjdGlvblVWVyIpOworICAgICAgICB0aGlz
Ll9yZWZsZWN0aW9uMkRDb29yZHNOYW1lID0gc3RhdGUuX2dldEZyZWVWYXJpYWJsZU5hbWUoInJl
ZmxlY3Rpb25VViIpOworICAgICAgICB0aGlzLl9yZWZsZWN0aW9uTWF0cml4TmFtZSA9IHN0YXRl
Ll9nZXRGcmVlVmFyaWFibGVOYW1lKCJyZWZsZWN0aW9uTWF0cml4Iik7CisgICAgICAgIHN0YXRl
Ll9lbWl0VW5pZm9ybUZyb21TdHJpbmcodGhpcy5fcmVmbGVjdGlvbk1hdHJpeE5hbWUsICJtYXQ0
Iik7CisgICAgICAgIC8vIENvZGUKKyAgICAgICAgdmFyIHdvcmxkUG9zID0gInZfIiArIHRoaXMu
d29ybGRQb3NpdGlvbi5hc3NvY2lhdGVkVmFyaWFibGVOYW1lOworICAgICAgICB2YXIgd29ybGRO
b3JtYWwgPSAidl8iICsgdGhpcy53b3JsZE5vcm1hbC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsg
Ii54eXoiOworICAgICAgICB2YXIgcmVmbGVjdGlvbk1hdHJpeCA9IHRoaXMuX3JlZmxlY3Rpb25N
YXRyaXhOYW1lOworICAgICAgICB2YXIgZGlyZWN0aW9uID0gIm5vcm1hbGl6ZSgiICsgdGhpcy5f
ZGlyZWN0aW9uV05hbWUgKyAiKSI7CisgICAgICAgIHZhciBwb3NpdGlvblVWVyA9ICIiICsgdGhp
cy5fcG9zaXRpb25VVldOYW1lOworICAgICAgICB2YXIgdkV5ZVBvc2l0aW9uID0gIiIgKyB0aGlz
LmNhbWVyYVBvc2l0aW9uLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWU7CisgICAgICAgIHZhciB2aWV3
ID0gIiIgKyB0aGlzLnZpZXcuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZTsKKyAgICAgICAgc3RhdGUu
Y29tcGlsYXRpb25TdHJpbmcgKz0gInZlYzMgIiArIHRoaXMuX3JlZmxlY3Rpb25Db2xvck5hbWUg
KyAiO1xyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2lmZGVmICIg
KyB0aGlzLl9kZWZpbmUzRE5hbWUgKyAiXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9u
U3RyaW5nICs9ICIjaWZkZWYgIiArIHRoaXMuX2RlZmluZU1pcnJvcmVkRXF1aXJlY3Rhbmd1bGFy
Rml4ZWROYW1lICsgIlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAi
ICAgIHZlYzMgIiArIHRoaXMuX3JlZmxlY3Rpb25Db29yZHNOYW1lICsgIiA9IGNvbXB1dGVNaXJy
b3JlZEZpeGVkRXF1aXJlY3Rhbmd1bGFyQ29vcmRzKCIgKyB3b3JsZFBvcyArICIsICIgKyB3b3Js
ZE5vcm1hbCArICIsICIgKyBkaXJlY3Rpb24gKyAiKTtcclxuIjsKKyAgICAgICAgc3RhdGUuY29t
cGlsYXRpb25TdHJpbmcgKz0gIiNlbmRpZlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlv
blN0cmluZyArPSAiI2lmZGVmICIgKyB0aGlzLl9kZWZpbmVFcXVpcmVjdGFuZ3VsYXJGaXhlZE5h
bWUgKyAiXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIgICAgdmVj
MyAiICsgdGhpcy5fcmVmbGVjdGlvbkNvb3Jkc05hbWUgKyAiID0gY29tcHV0ZUZpeGVkRXF1aXJl
Y3Rhbmd1bGFyQ29vcmRzKCIgKyB3b3JsZFBvcyArICIsICIgKyB3b3JsZE5vcm1hbCArICIsICIg
KyBkaXJlY3Rpb24gKyAiKTtcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcg
Kz0gIiNlbmRpZlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2lm
ZGVmICIgKyB0aGlzLl9kZWZpbmVFcXVpcmVjdGFuZ3VsYXJOYW1lICsgIlxyXG4iOworICAgICAg
ICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiICAgIHZlYzMgIiArIHRoaXMuX3JlZmxlY3Rp
b25Db29yZHNOYW1lICsgIiA9IGNvbXB1dGVFcXVpcmVjdGFuZ3VsYXJDb29yZHMoIiArIHdvcmxk
UG9zICsgIiwgIiArIHdvcmxkTm9ybWFsICsgIiwgIiArIHZFeWVQb3NpdGlvbiArICIueHl6LCAi
ICsgcmVmbGVjdGlvbk1hdHJpeCArICIpO1xyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlv
blN0cmluZyArPSAiICNlbmRpZlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmlu
ZyArPSAiI2lmZGVmICIgKyB0aGlzLl9kZWZpbmVTcGhlcmljYWxOYW1lICsgIlxyXG4iOworICAg
ICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiICAgIHZlYzMgIiArIHRoaXMuX3JlZmxl
Y3Rpb25Db29yZHNOYW1lICsgIiA9IGNvbXB1dGVTcGhlcmljYWxDb29yZHMoIiArIHdvcmxkUG9z
ICsgIiwgIiArIHdvcmxkTm9ybWFsICsgIiwgIiArIHZpZXcgKyAiLCAiICsgcmVmbGVjdGlvbk1h
dHJpeCArICIpO1xyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2Vu
ZGlmXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjaWZkZWYgIiAr
IHRoaXMuX2RlZmluZVBsYW5hck5hbWUgKyAiXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0
aW9uU3RyaW5nICs9ICIgICAgdmVjMyAiICsgdGhpcy5fcmVmbGVjdGlvbkNvb3Jkc05hbWUgKyAi
ID0gY29tcHV0ZVBsYW5hckNvb3JkcygiICsgd29ybGRQb3MgKyAiLCAiICsgd29ybGROb3JtYWwg
KyAiLCAiICsgdkV5ZVBvc2l0aW9uICsgIi54eXosICIgKyByZWZsZWN0aW9uTWF0cml4ICsgIik7
XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxuIjsK
KyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZmRlZiAiICsgdGhpcy5fZGVm
aW5lQ3ViaWNOYW1lICsgIlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyAr
PSAiICAgICNpZmRlZiAiICsgdGhpcy5fZGVmaW5lTG9jYWxDdWJpY05hbWUgKyAiXHJcbiI7Cisg
ICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIgICAgICAgIHZlYzMgIiArIHRoaXMu
X3JlZmxlY3Rpb25Db29yZHNOYW1lICsgIiA9IGNvbXB1dGVDdWJpY0xvY2FsQ29vcmRzKCIgKyB3
b3JsZFBvcyArICIsICIgKyB3b3JsZE5vcm1hbCArICIsICIgKyB2RXllUG9zaXRpb24gKyAiLnh5
eiwgIiArIHJlZmxlY3Rpb25NYXRyaXggKyAiLCB2UmVmbGVjdGlvblNpemUsIHZSZWZsZWN0aW9u
UG9zaXRpb24pO1xyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiICAg
ICNlbHNlXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIgICAgICAg
dmVjMyAiICsgdGhpcy5fcmVmbGVjdGlvbkNvb3Jkc05hbWUgKyAiID0gY29tcHV0ZUN1YmljQ29v
cmRzKCIgKyB3b3JsZFBvcyArICIsICIgKyB3b3JsZE5vcm1hbCArICIsICIgKyB2RXllUG9zaXRp
b24gKyAiLnh5eiwgIiArIHJlZmxlY3Rpb25NYXRyaXggKyAiKTtcclxuIjsKKyAgICAgICAgc3Rh
dGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiAgICAjZW5kaWZcclxuIjsKKyAgICAgICAgc3RhdGUu
Y29tcGlsYXRpb25TdHJpbmcgKz0gIiNlbmRpZlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxh
dGlvblN0cmluZyArPSAiI2lmZGVmICIgKyB0aGlzLl9kZWZpbmVQcm9qZWN0aW9uTmFtZSArICJc
clxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiAgICB2ZWMzICIgKyB0
aGlzLl9yZWZsZWN0aW9uQ29vcmRzTmFtZSArICIgPSBjb21wdXRlUHJvamVjdGlvbkNvb3Jkcygi
ICsgd29ybGRQb3MgKyAiLCAiICsgdmlldyArICIsICIgKyByZWZsZWN0aW9uTWF0cml4ICsgIik7
XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxuIjsK
KyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZmRlZiAiICsgdGhpcy5fZGVm
aW5lU2t5Ym94TmFtZSArICJcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcg
Kz0gIiAgICB2ZWMzICIgKyB0aGlzLl9yZWZsZWN0aW9uQ29vcmRzTmFtZSArICIgPSBjb21wdXRl
U2t5Qm94Q29vcmRzKCIgKyBwb3NpdGlvblVWVyArICIsICIgKyByZWZsZWN0aW9uTWF0cml4ICsg
Iik7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxu
IjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZmRlZiAiICsgdGhpcy5f
ZGVmaW5lRXhwbGljaXROYW1lICsgIlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0
cmluZyArPSAiICAgIHZlYzMgIiArIHRoaXMuX3JlZmxlY3Rpb25Db29yZHNOYW1lICsgIiA9IHZl
YzMoMCwgMCwgMCk7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIj
ZW5kaWZcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fcmVm
bGVjdGlvbkNvbG9yTmFtZSArICIgPSB0ZXh0dXJlQ3ViZSgiICsgdGhpcy5fY3ViZVNhbXBsZXJO
YW1lICsgIiwgIiArIHRoaXMuX3JlZmxlY3Rpb25Db29yZHNOYW1lICsgIikucmdiO1xyXG4iOwor
ICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2Vsc2VcclxuIjsKKyAgICAgICAg
c3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gInZlYzIgIiArIHRoaXMuX3JlZmxlY3Rpb24yRENv
b3Jkc05hbWUgKyAiID0gIiArIHRoaXMuX3JlZmxlY3Rpb25Db29yZHNOYW1lICsgIi54eTtcclxu
IjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZmRlZiAiICsgdGhpcy5f
ZGVmaW5lUHJvamVjdGlvbk5hbWUgKyAiXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9u
U3RyaW5nICs9IHRoaXMuX3JlZmxlY3Rpb24yRENvb3Jkc05hbWUgKyAiIC89ICIgKyB0aGlzLl9y
ZWZsZWN0aW9uQ29vcmRzTmFtZSArICIuejtcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gIiNlbmRpZlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmlu
ZyArPSB0aGlzLl9yZWZsZWN0aW9uMkRDb29yZHNOYW1lICsgIi55ID0gMS4wIC0gIiArIHRoaXMu
X3JlZmxlY3Rpb24yRENvb3Jkc05hbWUgKyAiLnk7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBp
bGF0aW9uU3RyaW5nICs9IHRoaXMuX3JlZmxlY3Rpb25Db2xvck5hbWUgKyAiID0gdGV4dHVyZTJE
KCIgKyB0aGlzLl8yRFNhbXBsZXJOYW1lICsgIiwgIiArIHRoaXMuX3JlZmxlY3Rpb24yRENvb3Jk
c05hbWUgKyAiKS5yZ2I7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9
ICIjZW5kaWZcclxuIjsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX291dHB1
dHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgb3V0cHV0ID0gX2Fb
X2ldOworICAgICAgICAgICAgaWYgKG91dHB1dC5oYXNFbmRwb2ludHMpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl93cml0ZU91dHB1dChzdGF0ZSwgb3V0cHV0LCBvdXRwdXQubmFtZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBS
ZWZsZWN0aW9uVGV4dHVyZUJsb2NrLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX3N1cGVyLnByb3RvdHlwZS5zZXJp
YWxpemUuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMudGV4dHVyZSkgeworICAgICAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC50ZXh0dXJlID0gdGhpcy50ZXh0dXJlLnNlcmlhbGl6ZSgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07
CisgICAgUmVmbGVjdGlvblRleHR1cmVCbG9jay5wcm90b3R5cGUuX2Rlc2VyaWFsaXplID0gZnVu
Y3Rpb24gKHNlcmlhbGl6YXRpb25PYmplY3QsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIF9z
dXBlci5wcm90b3R5cGUuX2Rlc2VyaWFsaXplLmNhbGwodGhpcywgc2VyaWFsaXphdGlvbk9iamVj
dCwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICBpZiAoc2VyaWFsaXphdGlvbk9iamVjdC50ZXh0
dXJlKSB7CisgICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0uUGFyc2Uoc2VyaWFsaXphdGlvbk9i
amVjdC50ZXh0dXJlLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJl
dHVybiBSZWZsZWN0aW9uVGV4dHVyZUJsb2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190
eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lz
dGVyZWRUeXBlc1siQkFCWUxPTi5SZWZsZWN0aW9uVGV4dHVyZUJsb2NrIl0gPSBSZWZsZWN0aW9u
VGV4dHVyZUJsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9C
bG9ja3MvRHVhbC90ZXh0dXJlQmxvY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUv
QmxvY2tzL0R1YWwvdGV4dHVyZUJsb2NrLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
VGV4dHVyZUJsb2NrICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRleHR1
cmVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVGV4dHVyZUJsb2NrOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xp
Yi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJs
b2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9u
b2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
SW5wdXRfaW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vSW5wdXQvaW5wdXRCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9C
bG9ja3MvSW5wdXQvaW5wdXRCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
aXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3Rv
cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
Li4vVGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIp
OworCisKKworCisKKworCisvKioKKyAqIEJsb2NrIHVzZWQgdG8gcmVhZCBhIHRleHR1cmUgZnJv
bSBhIHNhbXBsZXIKKyAqLwordmFyIFRleHR1cmVCbG9jayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShUZXh0dXJlQmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRl
IGEgbmV3IFRleHR1cmVCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2Nr
IG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBUZXh0dXJlQmxvY2sobmFtZSkgeworICAgICAg
ICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cyJdLlZlcnRleEFuZEZyYWdtZW50KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdpc3Rl
cklucHV0KCJ1diIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXMiXS5WZWN0b3IyLCBmYWxzZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXhB
bmRGcmFnbWVudCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJyZ2JhIiwgX25vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNCwgX25v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2Rl
TWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVy
T3V0cHV0KCJyZ2IiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzIl0uQ29sb3IzLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KTsKKyAg
ICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoInIiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQsIF9ub2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRz
Il0uRnJhZ21lbnQpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgiZyIsIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCwgX25vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0
ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0
cHV0KCJiIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLkZsb2F0LCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KTsKKyAgICAgICAg
X3RoaXMucmVnaXN0ZXJPdXRwdXQoImEiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uRnJh
Z21lbnQpOworICAgICAgICBfdGhpcy5faW5wdXRzWzBdLmFjY2VwdGVkQ29ubmVjdGlvblBvaW50
VHlwZXMucHVzaChfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzIl0uVmVjdG9yMyk7CisgICAgICAgIF90aGlzLl9pbnB1dHNbMF0uYWNjZXB0ZWRDb25uZWN0
aW9uUG9pbnRUeXBlcy5wdXNoKF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXMiXS5WZWN0b3I0KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAg
ICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJu
cyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFRleHR1cmVCbG9jay5wcm90b3R5cGUuZ2V0
Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlRleHR1cmVCbG9jayI7
CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUJsb2NrLnByb3RvdHlw
ZSwgInV2IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdXYgaW5wdXQgY29t
cG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShUZXh0dXJlQmxvY2sucHJvdG90eXBlLCAicmdiYSIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHJnYmEgb3V0cHV0IGNvbXBvbmVudAorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFRleHR1cmVCbG9jay5wcm90b3R5cGUsICJyZ2IiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSByZ2Igb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1sxXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVCbG9j
ay5wcm90b3R5cGUsICJyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgciBv
dXRwdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzJdOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUJsb2NrLnByb3RvdHlwZSwgImciLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBnIG91dHB1dCBjb21wb25lbnQKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX291dHB1dHNbM107CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShUZXh0dXJlQmxvY2sucHJvdG90eXBlLCAiYiIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgdGhlIGIgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1s0XTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVCbG9j
ay5wcm90b3R5cGUsICJhIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgYSBv
dXRwdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzVdOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUJsb2NrLnByb3RvdHlwZSwgInRhcmdl
dCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyBUZXh0dXJl
QmxvY2sgaGFzIGEgc3BlY2lhbCBvcHRpbWl6YXRpb25zIGZvciB1dnMgdGhhdCBjb21lIGZyb20g
dGhlIHZlcnRleCBzaGFkZXJzIGFzIHRoZXkgY2FuIGJlIHBhY2tlZCBpbnRvIGEgc2luZ2xlIHZh
cnlpbmdzLgorICAgICAgICAgICAgLy8gQnV0IHdlIG5lZWQgdG8gZGV0ZWN0IHV2cyBjb21pbmcg
ZnJvbSBmcmFnbWVudCB0aGVuCisgICAgICAgICAgICBpZiAoIXRoaXMudXYuaXNDb25uZWN0ZWQp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0
ZXhBbmRGcmFnbWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLnV2LnNv
dXJjZUJsb2NrLmlzSW5wdXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX25vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiXS5WZXJ0ZXhBbmRGcmFnbWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciBwYXJlbnQgPSB0aGlzLnV2LmNvbm5lY3RlZFBvaW50OworICAgICAgICAgICAgd2hp
bGUgKHBhcmVudCkgeworICAgICAgICAgICAgICAgIGlmIChwYXJlbnQudGFyZ2V0ID09PSBfbm9k
ZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAocGFyZW50LnRhcmdldCA9PT0gX25vZGVNYXRlcmlhbEJs
b2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHMiXS5WZXJ0ZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9ub2RlTWF0
ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4QW5kRnJhZ21lbnQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChwYXJlbnQudGFyZ2V0ID09PSBfbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cyJdLk5ldXRyYWwgfHwgcGFyZW50LnRhcmdldCA9PT0gX25vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHMiXS5WZXJ0ZXhBbmRGcmFnbWVudCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50
QmxvY2sgPSBwYXJlbnQub3duZXJCbG9jazsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0g
bnVsbDsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHBhcmVudEJs
b2NrLmlucHV0czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBpbnB1dCA9IF9hW19pXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1
dC5jb25uZWN0ZWRQb2ludCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9
IGlucHV0LmNvbm5lY3RlZFBvaW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIF9ub2RlTWF0
ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4QW5kRnJhZ21lbnQ7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIFRleHR1cmVCbG9jay5wcm90b3R5cGUuYXV0b0NvbmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRl
cmlhbCkgeworICAgICAgICBpZiAoIXRoaXMudXYuaXNDb25uZWN0ZWQpIHsKKyAgICAgICAgICAg
IHZhciB1dklucHV0ID0gbWF0ZXJpYWwuZ2V0SW5wdXRCbG9ja0J5UHJlZGljYXRlKGZ1bmN0aW9u
IChiKSB7IHJldHVybiBiLmlzQXR0cmlidXRlICYmIGIubmFtZSA9PT0gInV2IjsgfSk7CisgICAg
ICAgICAgICBpZiAoIXV2SW5wdXQpIHsKKyAgICAgICAgICAgICAgICB1dklucHV0ID0gbmV3IF9J
bnB1dF9pbnB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIklucHV0QmxvY2si
XSgidXYiKTsKKyAgICAgICAgICAgICAgICB1dklucHV0LnNldEFzQXR0cmlidXRlKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB1dklucHV0Lm91dHB1dC5jb25uZWN0VG8odGhpcy51dik7
CisgICAgICAgIH0KKyAgICB9OworICAgIFRleHR1cmVCbG9jay5wcm90b3R5cGUuaW5pdGlhbGl6
ZURlZmluZXMgPSBmdW5jdGlvbiAobWVzaCwgbm9kZU1hdGVyaWFsLCBkZWZpbmVzLCB1c2VJbnN0
YW5jZXMpIHsKKyAgICAgICAgaWYgKHVzZUluc3RhbmNlcyA9PT0gdm9pZCAwKSB7IHVzZUluc3Rh
bmNlcyA9IGZhbHNlOyB9CisgICAgICAgIGlmICghZGVmaW5lcy5fYXJlVGV4dHVyZXNEaXJ0eSkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRlZmluZXMuc2V0VmFs
dWUodGhpcy5fbWFpblVWRGVmaW5lTmFtZSwgZmFsc2UpOworICAgIH07CisgICAgVGV4dHVyZUJs
b2NrLnByb3RvdHlwZS5wcmVwYXJlRGVmaW5lcyA9IGZ1bmN0aW9uIChtZXNoLCBub2RlTWF0ZXJp
YWwsIGRlZmluZXMpIHsKKyAgICAgICAgaWYgKCFkZWZpbmVzLl9hcmVUZXh0dXJlc0RpcnR5KSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnRleHR1
cmUgfHwgIXRoaXMudGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnRleHR1cmUuZ2V0VGV4dHVyZU1hdHJp
eCgpLmlzSWRlbnRpdHlBczN4MigpKSB7CisgICAgICAgICAgICBkZWZpbmVzLnNldFZhbHVlKHRo
aXMuX2RlZmluZU5hbWUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgZGVmaW5lcy5zZXRWYWx1ZSh0aGlzLl9kZWZpbmVOYW1lLCBmYWxzZSk7CisgICAgICAg
ICAgICBkZWZpbmVzLnNldFZhbHVlKHRoaXMuX21haW5VVkRlZmluZU5hbWUsIHRydWUpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBUZXh0dXJlQmxvY2sucHJvdG90eXBlLmlzUmVhZHkgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnRleHR1cmUgJiYgIXRoaXMudGV4dHVyZS5pc1Jl
YWR5T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICBUZXh0dXJlQmxvY2sucHJvdG90
eXBlLmJpbmQgPSBmdW5jdGlvbiAoZWZmZWN0LCBub2RlTWF0ZXJpYWwsIG1lc2gpIHsKKyAgICAg
ICAgaWYgKCFtZXNoIHx8ICF0aGlzLnRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5faXNNaXhlZCkgeworICAgICAgICAgICAgZWZmZWN0
LnNldEZsb2F0KHRoaXMuX3RleHR1cmVJbmZvTmFtZSwgdGhpcy50ZXh0dXJlLmxldmVsKTsKKyAg
ICAgICAgICAgIGVmZmVjdC5zZXRNYXRyaXgodGhpcy5fdGV4dHVyZVRyYW5zZm9ybU5hbWUsIHRo
aXMudGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KCkpOworICAgICAgICB9CisgICAgICAgIGVmZmVj
dC5zZXRUZXh0dXJlKHRoaXMuX3NhbXBsZXJOYW1lLCB0aGlzLnRleHR1cmUpOworICAgIH07Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVCbG9jay5wcm90b3R5cGUsICJfaXNNaXhl
ZCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy50YXJnZXQgIT09IF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uRnJhZ21lbnQ7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIFRleHR1cmVCbG9jay5wcm90b3R5cGUuX2luamVjdFZlcnRleENvZGUg
PSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgdmFyIHV2SW5wdXQgPSB0aGlzLnV2OworICAg
ICAgICAvLyBJbmplY3QgY29kZSBpbiB2ZXJ0ZXgKKyAgICAgICAgdGhpcy5fZGVmaW5lTmFtZSA9
IHN0YXRlLl9nZXRGcmVlRGVmaW5lTmFtZSgiVVZUUkFOU0ZPUk0iKTsKKyAgICAgICAgdGhpcy5f
bWFpblVWRGVmaW5lTmFtZSA9IHN0YXRlLl9nZXRGcmVlRGVmaW5lTmFtZSgidk1haW4iICsgdXZJ
bnB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lKTsKKyAgICAgICAgaWYgKHV2SW5wdXQuY29ubmVj
dGVkUG9pbnQub3duZXJCbG9jay5pc0lucHV0KSB7CisgICAgICAgICAgICB2YXIgdXZJbnB1dE93
bmVyQmxvY2sgPSB1dklucHV0LmNvbm5lY3RlZFBvaW50Lm93bmVyQmxvY2s7CisgICAgICAgICAg
ICBpZiAoIXV2SW5wdXRPd25lckJsb2NrLmlzQXR0cmlidXRlKSB7CisgICAgICAgICAgICAgICAg
c3RhdGUuX2VtaXRVbmlmb3JtRnJvbVN0cmluZyh1dklucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5h
bWUsICJ2ZWMyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbWFp
blVWTmFtZSA9ICJ2TWFpbiIgKyB1dklucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWU7CisgICAg
ICAgIHRoaXMuX3RyYW5zZm9ybWVkVVZOYW1lID0gc3RhdGUuX2dldEZyZWVWYXJpYWJsZU5hbWUo
InRyYW5zZm9ybWVkVVYiKTsKKyAgICAgICAgdGhpcy5fdGV4dHVyZVRyYW5zZm9ybU5hbWUgPSBz
dGF0ZS5fZ2V0RnJlZVZhcmlhYmxlTmFtZSgidGV4dHVyZVRyYW5zZm9ybSIpOworICAgICAgICB0
aGlzLl90ZXh0dXJlSW5mb05hbWUgPSBzdGF0ZS5fZ2V0RnJlZVZhcmlhYmxlTmFtZSgidGV4dHVy
ZUluZm9OYW1lIik7CisgICAgICAgIHN0YXRlLl9lbWl0VmFyeWluZ0Zyb21TdHJpbmcodGhpcy5f
dHJhbnNmb3JtZWRVVk5hbWUsICJ2ZWMyIiwgdGhpcy5fZGVmaW5lTmFtZSk7CisgICAgICAgIHN0
YXRlLl9lbWl0VmFyeWluZ0Zyb21TdHJpbmcodGhpcy5fbWFpblVWTmFtZSwgInZlYzIiLCB0aGlz
Ll9tYWluVVZEZWZpbmVOYW1lKTsKKyAgICAgICAgc3RhdGUuX2VtaXRVbmlmb3JtRnJvbVN0cmlu
Zyh0aGlzLl90ZXh0dXJlVHJhbnNmb3JtTmFtZSwgIm1hdDQiLCB0aGlzLl9kZWZpbmVOYW1lKTsK
KyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZmRlZiAiICsgdGhpcy5fZGVm
aW5lTmFtZSArICJcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhp
cy5fdHJhbnNmb3JtZWRVVk5hbWUgKyAiID0gdmVjMigiICsgdGhpcy5fdGV4dHVyZVRyYW5zZm9y
bU5hbWUgKyAiICogdmVjNCgiICsgdXZJbnB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi54
eSwgMS4wLCAwLjApKTtcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0g
IiNlbHNlXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX21h
aW5VVk5hbWUgKyAiID0gIiArIHV2SW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIueHk7
XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxuIjsK
KyAgICB9OworICAgIFRleHR1cmVCbG9jay5wcm90b3R5cGUuX3dyaXRlT3V0cHV0ID0gZnVuY3Rp
b24gKHN0YXRlLCBvdXRwdXQsIHN3aXp6bGUpIHsKKyAgICAgICAgdmFyIHV2SW5wdXQgPSB0aGlz
LnV2OworICAgICAgICBpZiAodGhpcy51di5vd25lckJsb2NrLnRhcmdldCA9PT0gX25vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCkgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0YXRlKSArICIgPSB0ZXh0
dXJlMkQoIiArIHRoaXMuX3NhbXBsZXJOYW1lICsgIiwgIiArIHV2SW5wdXQuYXNzb2NpYXRlZFZh
cmlhYmxlTmFtZSArICIpLiIgKyBzd2l6emxlICsgIjtcclxuIjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICB2YXIgY29tcGxlbWVudCA9ICIgKiAiICsgdGhpcy5fdGV4
dHVyZUluZm9OYW1lOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2lmZGVm
ICIgKyB0aGlzLl9kZWZpbmVOYW1lICsgIlxyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlv
blN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgIiA9IHRleHR1
cmUyRCgiICsgdGhpcy5fc2FtcGxlck5hbWUgKyAiLCAiICsgdGhpcy5fdHJhbnNmb3JtZWRVVk5h
bWUgKyAiKS4iICsgc3dpenpsZSArIGNvbXBsZW1lbnQgKyAiO1xyXG4iOworICAgICAgICBzdGF0
ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2Vsc2VcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGls
YXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0YXRlKSArICIgPSB0
ZXh0dXJlMkQoIiArIHRoaXMuX3NhbXBsZXJOYW1lICsgIiwgIiArICgidk1haW4iICsgdXZJbnB1
dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lKSArICIpLiIgKyBzd2l6emxlICsgY29tcGxlbWVudCAr
ICI7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxu
IjsKKyAgICB9OworICAgIFRleHR1cmVCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5j
dGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxs
KHRoaXMsIHN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLnRhcmdldCAhPT0gX25vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiXS5GcmFnbWVudCkgeworICAgICAgICAgICAgLy8gVmVydGV4CisgICAgICAg
ICAgICB0aGlzLl9pbmplY3RWZXJ0ZXhDb2RlKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmJsb2NraW5nQmxvY2tzLnB1c2go
dGhpcyk7CisgICAgICAgIHN0YXRlLnNoYXJlZERhdGEudGV4dHVyZUJsb2Nrcy5wdXNoKHRoaXMp
OworICAgICAgICB0aGlzLl9zYW1wbGVyTmFtZSA9IHN0YXRlLl9nZXRGcmVlVmFyaWFibGVOYW1l
KHRoaXMubmFtZSArICJTYW1wbGVyIik7CisgICAgICAgIHN0YXRlLnNhbXBsZXJzLnB1c2godGhp
cy5fc2FtcGxlck5hbWUpOworICAgICAgICBzdGF0ZS5fc2FtcGxlckRlY2xhcmF0aW9uICs9ICJ1
bmlmb3JtIHNhbXBsZXIyRCAiICsgdGhpcy5fc2FtcGxlck5hbWUgKyAiO1xyXG4iOworICAgICAg
ICAvLyBGcmFnbWVudAorICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmJpbmRhYmxlQmxvY2tzLnB1
c2godGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9pc01peGVkKSB7CisgICAgICAgICAgICBzdGF0
ZS5zaGFyZWREYXRhLmJsb2Nrc1dpdGhEZWZpbmVzLnB1c2godGhpcyk7CisgICAgICAgICAgICBz
dGF0ZS5fZW1pdFVuaWZvcm1Gcm9tU3RyaW5nKHRoaXMuX3RleHR1cmVJbmZvTmFtZSwgImZsb2F0
Iik7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX291dHB1
dHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgb3V0cHV0ID0gX2Fb
X2ldOworICAgICAgICAgICAgaWYgKG91dHB1dC5oYXNFbmRwb2ludHMpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl93cml0ZU91dHB1dChzdGF0ZSwgb3V0cHV0LCBvdXRwdXQubmFtZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBU
ZXh0dXJlQmxvY2sucHJvdG90eXBlLl9kdW1wUHJvcGVydGllc0NvZGUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gIiI7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGNvZGVTdHJpbmcgPSB0aGlzLl9jb2RlVmFyaWFibGVOYW1l
ICsgIi50ZXh0dXJlID0gbmV3IEJBQllMT04uVGV4dHVyZShcIiIgKyB0aGlzLnRleHR1cmUubmFt
ZSArICJcIik7XHJcbiI7CisgICAgICAgIHJldHVybiBjb2RlU3RyaW5nOworICAgIH07CisgICAg
VGV4dHVyZUJsb2NrLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX3N1cGVyLnByb3RvdHlwZS5zZXJpYWxpemUuY2Fs
bCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMudGV4dHVyZSkgeworICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC50ZXh0dXJlID0gdGhpcy50ZXh0dXJlLnNlcmlhbGl6ZSgpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgVGV4
dHVyZUJsb2NrLnByb3RvdHlwZS5fZGVzZXJpYWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlv
bk9iamVjdCwgc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fZGVz
ZXJpYWxpemUuY2FsbCh0aGlzLCBzZXJpYWxpemF0aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCk7
CisgICAgICAgIGlmIChzZXJpYWxpemF0aW9uT2JqZWN0LnRleHR1cmUpIHsKKyAgICAgICAgICAg
IHRoaXMudGV4dHVyZSA9IF9UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIlRleHR1cmUiXS5QYXJzZShzZXJpYWxpemF0aW9uT2JqZWN0LnRleHR1cmUsIHNjZW5l
LCByb290VXJsKTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIFRleHR1cmVCbG9jazsK
K30oX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVN
YXRlcmlhbEJsb2NrIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uVGV4dHVyZUJs
b2NrIl0gPSBUZXh0dXJlQmxvY2s7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFs
cy9Ob2RlL0Jsb2Nrcy9GcmFnbWVudC9hbHBoYVRlc3RCbG9jay50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvRnJhZ21lbnQvYWxwaGFUZXN0QmxvY2sudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBBbHBoYVRlc3RCbG9jayAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbHBoYVRlc3RCbG9jayIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gQWxwaGFUZXN0QmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxv
Y2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
Li4vLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKwor
CisvKioKKyAqIEJsb2NrIHVzZWQgdG8gYWRkIGFuIGFscGhhIHRlc3QgaW4gdGhlIGZyYWdtZW50
IHNoYWRlcgorICovCit2YXIgQWxwaGFUZXN0QmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19l
eHRlbmRzIl0oQWxwaGFUZXN0QmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRl
IGEgbmV3IEFscGhhVGVzdEJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgYmxv
Y2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIEFscGhhVGVzdEJsb2NrKG5hbWUpIHsKKyAg
ICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlhbEJs
b2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHMiXS5GcmFnbWVudCkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgb3Igc2V0cyB0aGUgYWxwaGEgdmFsdWUgd2hlcmUgYWxwaGEgdGVzdGluZyBoYXBwZW5zCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5hbHBoYUN1dE9mZiA9IDAuNDsKKyAgICAgICAgX3Ro
aXMucmVnaXN0ZXJJbnB1dCgiY29sb3IiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3I0LCB0cnVlKTsKKyAgICAgICAgX3RoaXMucmVnaXN0
ZXJJbnB1dCgiYWxwaGEiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzIl0uRmxvYXQsIHRydWUpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQor
ICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEByZXR1
cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgQWxwaGFUZXN0QmxvY2sucHJvdG90eXBl
LmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJBbHBoYVRlc3RC
bG9jayI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWxwaGFUZXN0QmxvY2su
cHJvdG90eXBlLCAiY29sb3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBj
b2xvciBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1swXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFscGhhVGVzdEJsb2NrLnByb3RvdHlwZSwg
ImFscGhhIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgYWxwaGEgaW5wdXQg
Y29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIEFs
cGhhVGVzdEJsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9jayA9IGZ1bmN0aW9uIChzdGF0ZSkgewor
ICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJsb2NrLmNhbGwodGhpcywgc3RhdGUpOwor
ICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmhpbnRzLm5lZWRBbHBoYVRlc3RpbmcgPSB0cnVlOwor
ICAgICAgICBpZiAodGhpcy5jb2xvci5jb25uZWN0ZWRQb2ludCkgeworICAgICAgICAgICAgc3Rh
dGUuY29tcGlsYXRpb25TdHJpbmcgKz0gImlmICgiICsgdGhpcy5jb2xvci5hc3NvY2lhdGVkVmFy
aWFibGVOYW1lICsgIi5hIDwgIiArIHRoaXMuYWxwaGFDdXRPZmYgKyAiKSBkaXNjYXJkO1xyXG4i
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gImlmICgiICsgdGhpcy5hbHBoYS5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsg
IiA8ICIgKyB0aGlzLmFscGhhQ3V0T2ZmICsgIikgZGlzY2FyZDtcclxuIjsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIEFscGhhVGVzdEJsb2NrLnByb3RvdHlw
ZS5fZHVtcFByb3BlcnRpZXNDb2RlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgY29kZVN0
cmluZyA9IHRoaXMuX2NvZGVWYXJpYWJsZU5hbWUgKyAiLmFscGhhQ3V0T2ZmID0gIiArIHRoaXMu
YWxwaGFDdXRPZmYgKyAiO1xyXG4iOworICAgICAgICByZXR1cm4gY29kZVN0cmluZzsKKyAgICB9
OworICAgIEFscGhhVGVzdEJsb2NrLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX3N1cGVyLnByb3RvdHlwZS5zZXJp
YWxpemUuY2FsbCh0aGlzKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hbHBoYUN1dE9m
ZiA9IHRoaXMuYWxwaGFDdXRPZmY7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0
OworICAgIH07CisgICAgQWxwaGFUZXN0QmxvY2sucHJvdG90eXBlLl9kZXNlcmlhbGl6ZSA9IGZ1
bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICBf
c3VwZXIucHJvdG90eXBlLl9kZXNlcmlhbGl6ZS5jYWxsKHRoaXMsIHNlcmlhbGl6YXRpb25PYmpl
Y3QsIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgdGhpcy5hbHBoYUN1dE9mZiA9IHNlcmlhbGl6
YXRpb25PYmplY3QuYWxwaGFDdXRPZmY7CisgICAgfTsKKyAgICByZXR1cm4gQWxwaGFUZXN0Qmxv
Y2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJO
b2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLkFscGhh
VGVzdEJsb2NrIl0gPSBBbHBoYVRlc3RCbG9jazsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWF0ZXJpYWxzL05vZGUvQmxvY2tzL0ZyYWdtZW50L2ZyYWdtZW50T3V0cHV0QmxvY2sudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvRnJhZ21lbnQvZnJh
Z21lbnRPdXRwdXRCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogRnJhZ21lbnRPdXRwdXRCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJGcmFnbWVudE91dHB1dEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGcmFnbWVudE91
dHB1dEJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4u
L25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVy
aWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL01pc2MvdHlw
ZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKworLyoqCisgKiBCbG9j
ayB1c2VkIHRvIG91dHB1dCB0aGUgZmluYWwgY29sb3IKKyAqLwordmFyIEZyYWdtZW50T3V0cHV0
QmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oRnJhZ21lbnRPdXRwdXRCbG9j
aywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgRnJhZ21lbnRPdXRwdXRC
bG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBGcmFnbWVudE91dHB1dEJsb2NrKG5hbWUpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5G
cmFnbWVudCwgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgicmdi
YSIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5D
b2xvcjQsIHRydWUpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJyZ2IiLCBfbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3IzLCB0cnVl
KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgiYSIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCwgdHJ1ZSk7CisgICAgICAgIHJl
dHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFz
cyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBGcmFn
bWVudE91dHB1dEJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiAiRnJhZ21lbnRPdXRwdXRCbG9jayI7CisgICAgfTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoRnJhZ21lbnRPdXRwdXRCbG9jay5wcm90b3R5cGUsICJyZ2JhIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgcmdiYSBpbnB1dCBjb21wb25lbnQKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2lucHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEZyYWdtZW50T3V0cHV0QmxvY2sucHJvdG90eXBlLCAicmdiIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyB0aGUgcmdiIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5w
dXRzWzFdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnJh
Z21lbnRPdXRwdXRCbG9jay5wcm90b3R5cGUsICJhIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgYSBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1syXTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgRnJhZ21lbnRPdXRwdXRCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxv
Y2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRC
bG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgdmFyIHJnYmEgPSB0aGlzLnJnYmE7Cisg
ICAgICAgIHZhciByZ2IgPSB0aGlzLnJnYjsKKyAgICAgICAgdmFyIGEgPSB0aGlzLmE7CisgICAg
ICAgIHN0YXRlLnNoYXJlZERhdGEuaGludHMubmVlZEFscGhhQmxlbmRpbmcgPSByZ2JhLmlzQ29u
bmVjdGVkIHx8IGEuaXNDb25uZWN0ZWQ7CisgICAgICAgIGlmIChyZ2JhLmNvbm5lY3RlZFBvaW50
KSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiZ2xfRnJhZ0NvbG9y
ID0gIiArIHJnYmEuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiI7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAocmdiLmNvbm5lY3RlZFBvaW50KSB7CisgICAgICAgICAgICBpZiAo
YS5jb25uZWN0ZWRQb2ludCkgeworICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3Ry
aW5nICs9ICJnbF9GcmFnQ29sb3IgPSB2ZWM0KCIgKyByZ2IuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICIsICIgKyBhLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiKTtcclxuIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0
aW9uU3RyaW5nICs9ICJnbF9GcmFnQ29sb3IgPSB2ZWM0KCIgKyByZ2IuYXNzb2NpYXRlZFZhcmlh
YmxlTmFtZSArICIsIDEuMCk7XHJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmNoZWNrcy5ub3RDb25uZWN0
ZWROb25PcHRpb25hbElucHV0cy5wdXNoKHJnYmEpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgcmV0dXJuIEZyYWdtZW50T3V0cHV0QmxvY2s7Cit9KF9ub2Rl
TWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxC
bG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLkZyYWdtZW50T3V0cHV0Qmxv
Y2siXSA9IEZyYWdtZW50T3V0cHV0QmxvY2s7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01h
dGVyaWFscy9Ob2RlL0Jsb2Nrcy9GcmFnbWVudC9pbWFnZVByb2Nlc3NpbmdCbG9jay50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvRnJhZ21lbnQvaW1h
Z2VQcm9jZXNzaW5nQmxvY2sudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBJbWFnZVByb2Nlc3NpbmdCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJJbWFnZVByb2Nlc3NpbmdCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSW1hZ2VQ
cm9jZXNzaW5nQmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vTWlz
Yy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisvKioKKyAq
IEJsb2NrIHVzZWQgdG8gYWRkIGltYWdlIHByb2Nlc3Npbmcgc3VwcG9ydCB0byBmcmFnbWVudCBz
aGFkZXIKKyAqLwordmFyIEltYWdlUHJvY2Vzc2luZ0Jsb2NrID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKEltYWdlUHJvY2Vzc2luZ0Jsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIENyZWF0ZSBhIG5ldyBJbWFnZVByb2Nlc3NpbmdCbG9jaworICAgICAqIEBwYXJhbSBuYW1l
IGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBJbWFnZVByb2Nl
c3NpbmdCbG9jayhuYW1lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMs
IG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uRnJhZ21lbnQpIHx8IHRoaXM7CisgICAg
ICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoImNvbG9yIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNCk7CisgICAgICAgIF90aGlzLnJlZ2lz
dGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzIl0uQ29sb3I0KTsKKyAgICAgICAgX3RoaXMuX2lucHV0c1swXS5hY2NlcHRl
ZENvbm5lY3Rpb25Qb2ludFR5cGVzLnB1c2goX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yMyk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAg
ICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICog
QHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBJbWFnZVByb2Nlc3NpbmdCbG9j
ay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
IkltYWdlUHJvY2Vzc2luZ0Jsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShJbWFnZVByb2Nlc3NpbmdCbG9jay5wcm90b3R5cGUsICJjb2xvciIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIGNvbG9yIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5w
dXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1h
Z2VQcm9jZXNzaW5nQmxvY2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZSB0aGUgYmxvY2sg
YW5kIHByZXBhcmUgdGhlIGNvbnRleHQgZm9yIGJ1aWxkCisgICAgICogQHBhcmFtIHN0YXRlIGRl
ZmluZXMgdGhlIHN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgYnVpbGQKKyAgICAgKi8K
KyAgICBJbWFnZVByb2Nlc3NpbmdCbG9jay5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9u
IChzdGF0ZSkgeworICAgICAgICBzdGF0ZS5fZXhjbHVkZVZhcmlhYmxlTmFtZSgiZXhwb3N1cmVM
aW5lYXIiKTsKKyAgICAgICAgc3RhdGUuX2V4Y2x1ZGVWYXJpYWJsZU5hbWUoImNvbnRyYXN0Iik7
CisgICAgICAgIHN0YXRlLl9leGNsdWRlVmFyaWFibGVOYW1lKCJ2SW52ZXJzZVNjcmVlblNpemUi
KTsKKyAgICAgICAgc3RhdGUuX2V4Y2x1ZGVWYXJpYWJsZU5hbWUoInZpZ25ldHRlU2V0dGluZ3Mx
Iik7CisgICAgICAgIHN0YXRlLl9leGNsdWRlVmFyaWFibGVOYW1lKCJ2aWduZXR0ZVNldHRpbmdz
MiIpOworICAgICAgICBzdGF0ZS5fZXhjbHVkZVZhcmlhYmxlTmFtZSgidkNhbWVyYUNvbG9yQ3Vy
dmVOZWdhdGl2ZSIpOworICAgICAgICBzdGF0ZS5fZXhjbHVkZVZhcmlhYmxlTmFtZSgidkNhbWVy
YUNvbG9yQ3VydmVOZXV0cmFsIik7CisgICAgICAgIHN0YXRlLl9leGNsdWRlVmFyaWFibGVOYW1l
KCJ2Q2FtZXJhQ29sb3JDdXJ2ZVBvc2l0aXZlIik7CisgICAgICAgIHN0YXRlLl9leGNsdWRlVmFy
aWFibGVOYW1lKCJ0eENvbG9yVHJhbnNmb3JtIik7CisgICAgICAgIHN0YXRlLl9leGNsdWRlVmFy
aWFibGVOYW1lKCJjb2xvclRyYW5zZm9ybVNldHRpbmdzIik7CisgICAgfTsKKyAgICBJbWFnZVBy
b2Nlc3NpbmdCbG9jay5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uIChtZXNoLCBub2RlTWF0
ZXJpYWwsIGRlZmluZXMpIHsKKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZUltYWdlUHJvY2Vzc2lu
Z0RpcnR5ICYmIG5vZGVNYXRlcmlhbC5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKSB7Cisg
ICAgICAgICAgICBpZiAoIW5vZGVNYXRlcmlhbC5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
LmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIEltYWdlUHJv
Y2Vzc2luZ0Jsb2NrLnByb3RvdHlwZS5wcmVwYXJlRGVmaW5lcyA9IGZ1bmN0aW9uIChtZXNoLCBu
b2RlTWF0ZXJpYWwsIGRlZmluZXMpIHsKKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZUltYWdlUHJv
Y2Vzc2luZ0RpcnR5ICYmIG5vZGVNYXRlcmlhbC5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
KSB7CisgICAgICAgICAgICBub2RlTWF0ZXJpYWwuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bi5wcmVwYXJlRGVmaW5lcyhkZWZpbmVzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgSW1hZ2VQ
cm9jZXNzaW5nQmxvY2sucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZWZmZWN0LCBub2RlTWF0
ZXJpYWwsIG1lc2gpIHsKKyAgICAgICAgaWYgKCFtZXNoKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFub2RlTWF0ZXJpYWwuaW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG5v
ZGVNYXRlcmlhbC5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmJpbmQoZWZmZWN0KTsKKyAg
ICB9OworICAgIEltYWdlUHJvY2Vzc2luZ0Jsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9jayA9IGZ1
bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJsb2NrLmNh
bGwodGhpcywgc3RhdGUpOworICAgICAgICAvLyBSZWdpc3RlciBmb3IgZGVmaW5lcworICAgICAg
ICBzdGF0ZS5zaGFyZWREYXRhLmJsb2Nrc1dpdGhEZWZpbmVzLnB1c2godGhpcyk7CisgICAgICAg
IC8vIFJlZ2lzdGVyIGZvciBibG9ja2luZworICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmJsb2Nr
aW5nQmxvY2tzLnB1c2godGhpcyk7CisgICAgICAgIC8vIFJlZ2lzdGVyIGZvciBiaW5kaW5nCisg
ICAgICAgIHN0YXRlLnNoYXJlZERhdGEuYmluZGFibGVCbG9ja3MucHVzaCh0aGlzKTsKKyAgICAg
ICAgLy8gVW5pZm9ybXMKKyAgICAgICAgc3RhdGUudW5pZm9ybXMucHVzaCgiZXhwb3N1cmVMaW5l
YXIiKTsKKyAgICAgICAgc3RhdGUudW5pZm9ybXMucHVzaCgiY29udHJhc3QiKTsKKyAgICAgICAg
c3RhdGUudW5pZm9ybXMucHVzaCgidkludmVyc2VTY3JlZW5TaXplIik7CisgICAgICAgIHN0YXRl
LnVuaWZvcm1zLnB1c2goInZpZ25ldHRlU2V0dGluZ3MxIik7CisgICAgICAgIHN0YXRlLnVuaWZv
cm1zLnB1c2goInZpZ25ldHRlU2V0dGluZ3MyIik7CisgICAgICAgIHN0YXRlLnVuaWZvcm1zLnB1
c2goInZDYW1lcmFDb2xvckN1cnZlTmVnYXRpdmUiKTsKKyAgICAgICAgc3RhdGUudW5pZm9ybXMu
cHVzaCgidkNhbWVyYUNvbG9yQ3VydmVOZXV0cmFsIik7CisgICAgICAgIHN0YXRlLnVuaWZvcm1z
LnB1c2goInZDYW1lcmFDb2xvckN1cnZlUG9zaXRpdmUiKTsKKyAgICAgICAgc3RhdGUudW5pZm9y
bXMucHVzaCgidHhDb2xvclRyYW5zZm9ybSIpOworICAgICAgICBzdGF0ZS51bmlmb3Jtcy5wdXNo
KCJjb2xvclRyYW5zZm9ybVNldHRpbmdzIik7CisgICAgICAgIC8vIEVtaXQgY29kZQorICAgICAg
ICB2YXIgY29sb3IgPSB0aGlzLmNvbG9yOworICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fb3V0
cHV0c1swXTsKKyAgICAgICAgdmFyIGNvbW1lbnRzID0gIi8vIiArIHRoaXMubmFtZTsKKyAgICAg
ICAgc3RhdGUuX2VtaXRGdW5jdGlvbkZyb21JbmNsdWRlKCJoZWxwZXJGdW5jdGlvbnMiLCBjb21t
ZW50cyk7CisgICAgICAgIHN0YXRlLl9lbWl0RnVuY3Rpb25Gcm9tSW5jbHVkZSgiaW1hZ2VQcm9j
ZXNzaW5nRGVjbGFyYXRpb24iLCBjb21tZW50cyk7CisgICAgICAgIHN0YXRlLl9lbWl0RnVuY3Rp
b25Gcm9tSW5jbHVkZSgiaW1hZ2VQcm9jZXNzaW5nRnVuY3Rpb25zIiwgY29tbWVudHMpOworICAg
ICAgICBpZiAoY29sb3IuY29ubmVjdGVkUG9pbnQudHlwZSA9PT0gX25vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNCkgeworICAgICAgICAgICAg
c3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0
YXRlKSArICIgPSAiICsgY29sb3IuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiI7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0
cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgIiA9IHZlYzQoIiAr
IGNvbG9yLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLCAxLjApO1xyXG4iOworICAgICAgICB9
CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjaWZkZWYgSU1BR0VQUk9DRVNT
SU5HUE9TVFBST0NFU1NcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0g
b3V0cHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLnJnYiA9IHRvTGluZWFyU3BhY2UoIiAr
IGNvbG9yLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLnJnYik7XHJcbiI7CisgICAgICAgIHN0
YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZWxzZVxyXG4iOworICAgICAgICBzdGF0ZS5jb21w
aWxhdGlvblN0cmluZyArPSAiI2lmZGVmIElNQUdFUFJPQ0VTU0lOR1xyXG4iOworICAgICAgICBz
dGF0ZS5jb21waWxhdGlvblN0cmluZyArPSBvdXRwdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSAr
ICIucmdiID0gdG9MaW5lYXJTcGFjZSgiICsgY29sb3IuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSAr
ICIucmdiKTtcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gb3V0cHV0
LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiID0gYXBwbHlJbWFnZVByb2Nlc3NpbmcoIiArIG91
dHB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIik7XHJcbiI7CisgICAgICAgIHN0YXRlLmNv
bXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gIiNlbmRpZlxyXG4iOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Owor
ICAgIHJldHVybiBJbWFnZVByb2Nlc3NpbmdCbG9jazsKK30oX25vZGVNYXRlcmlhbEJsb2NrX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2NrIl0pKTsKKworX01p
c2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIl9UeXBlU3RvcmUiXS5S
ZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uSW1hZ2VQcm9jZXNzaW5nQmxvY2siXSA9IEltYWdlUHJv
Y2Vzc2luZ0Jsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9C
bG9ja3MvRnJhZ21lbnQvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tz
L0ZyYWdtZW50L2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRnJhZ21lbnRPdXRw
dXRCbG9jaywgQWxwaGFUZXN0QmxvY2ssIEltYWdlUHJvY2Vzc2luZ0Jsb2NrLCBQZXJ0dXJiTm9y
bWFsQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9m
cmFnbWVudE91dHB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2ZyYWdtZW50T3V0cHV0QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05v
ZGUvQmxvY2tzL0ZyYWdtZW50L2ZyYWdtZW50T3V0cHV0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRnJhZ21lbnRPdXRwdXRCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2ZyYWdtZW50
T3V0cHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRnJhZ21lbnRPdXRwdXRC
bG9jayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hbHBoYVRlc3RCbG9ja19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9h
bHBoYVRlc3RCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvRnJhZ21lbnQvYWxwaGFU
ZXN0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWxwaGFUZXN0QmxvY2siLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9hbHBoYVRlc3RCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJBbHBoYVRlc3RCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pbWFn
ZVByb2Nlc3NpbmdCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9pbWFnZVByb2Nlc3NpbmdCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9k
ZS9CbG9ja3MvRnJhZ21lbnQvaW1hZ2VQcm9jZXNzaW5nQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiSW1hZ2VQcm9jZXNzaW5nQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbWFnZVBy
b2Nlc3NpbmdCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbWFnZVByb2Nlc3Np
bmdCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wZXJ0dXJiTm9ybWFs
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vcGVydHVyYk5vcm1hbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9GcmFn
bWVudC9wZXJ0dXJiTm9ybWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGVydHVyYk5v
cm1hbEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGVydHVyYk5vcm1hbEJsb2NrX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBlcnR1cmJOb3JtYWxCbG9jayJdOyB9KTsKKworCisK
KworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9GcmFn
bWVudC9wZXJ0dXJiTm9ybWFsQmxvY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVy
aWFscy9Ob2RlL0Jsb2Nrcy9GcmFnbWVudC9wZXJ0dXJiTm9ybWFsQmxvY2sudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUGVydHVyYk5vcm1hbEJsb2NrICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBlcnR1cmJOb3JtYWxCbG9jayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gUGVydHVyYk5vcm1hbEJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVN
YXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBl
U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0lucHV0L2lucHV0
QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL0lucHV0L2lucHV0QmxvY2sudHMiKTsK
KworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBwZXJ0dWIgbm9ybWFscyBiYXNlZCBv
biBhIG5vcm1hbCBtYXAKKyAqLwordmFyIFBlcnR1cmJOb3JtYWxCbG9jayA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2V4dGVuZHMiXShQZXJ0dXJiTm9ybWFsQmxvY2ssIF9zdXBlcik7CisgICAgLyoq
CisgICAgICogQ3JlYXRlIGEgbmV3IFBlcnR1cmJOb3JtYWxCbG9jaworICAgICAqIEBwYXJhbSBu
YW1lIGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQZXJ0dXJi
Tm9ybWFsQmxvY2sobmFtZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlz
LCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLk5ldXRyYWwpIHx8IHRoaXM7CisgICAg
ICAgIC8vIFZlcnRleAorICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ3b3JsZFBvc2l0aW9u
IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZl
Y3RvcjQsIGZhbHNlKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgid29ybGROb3JtYWwi
LCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVj
dG9yNCwgZmFsc2UpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ1diIsIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IyLCBmYWxz
ZSk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoIm5vcm1hbE1hcENvbG9yIiwgX25vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yMywgZmFs
c2UpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJzdHJlbmd0aCIsIF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCwgZmFsc2UpOwor
ICAgICAgICAvLyBGcmFnbWVudAorICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgib3V0cHV0
IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZl
Y3RvcjQpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdl
dHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1l
CisgICAgICovCisgICAgUGVydHVyYk5vcm1hbEJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiUGVydHVyYk5vcm1hbEJsb2NrIjsKKyAg
ICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQZXJ0dXJiTm9ybWFsQmxvY2sucHJvdG90
eXBlLCAid29ybGRQb3NpdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhl
IHdvcmxkIHBvc2l0aW9uIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGVydHVyYk5vcm1hbEJs
b2NrLnByb3RvdHlwZSwgIndvcmxkTm9ybWFsIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgd29ybGQgbm9ybWFsIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzFd
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGVydHVyYk5v
cm1hbEJsb2NrLnByb3RvdHlwZSwgInV2IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgdXYgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMl07CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQZXJ0dXJiTm9ybWFsQmxvY2sucHJv
dG90eXBlLCAibm9ybWFsTWFwQ29sb3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMg
dGhlIG5vcm1hbCBtYXAgY29sb3IgaW5wdXQgY29tcG9uZW50CisgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1szXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBlcnR1cmJOb3Jt
YWxCbG9jay5wcm90b3R5cGUsICJzdHJlbmd0aCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICog
R2V0cyB0aGUgc3RyZW5ndGggaW5wdXQgY29tcG9uZW50CisgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1s0XTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBlcnR1cmJOb3JtYWxC
bG9jay5wcm90b3R5cGUsICJvdXRwdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSBvdXRwdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBQZXJ0dXJiTm9ybWFsQmxvY2sucHJvdG90eXBlLnByZXBhcmVEZWZpbmVzID0g
ZnVuY3Rpb24gKG1lc2gsIG5vZGVNYXRlcmlhbCwgZGVmaW5lcykgeworICAgICAgICBkZWZpbmVz
LnNldFZhbHVlKCJCVU1QIiwgdHJ1ZSk7CisgICAgfTsKKyAgICBQZXJ0dXJiTm9ybWFsQmxvY2su
cHJvdG90eXBlLmF1dG9Db25maWd1cmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwpIHsKKyAgICAgICAg
aWYgKCF0aGlzLnV2LmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgdXZJbnB1dCA9IG1h
dGVyaWFsLmdldElucHV0QmxvY2tCeVByZWRpY2F0ZShmdW5jdGlvbiAoYikgeyByZXR1cm4gYi5p
c0F0dHJpYnV0ZSAmJiBiLm5hbWUgPT09ICJ1diI7IH0pOworICAgICAgICAgICAgaWYgKCF1dklu
cHV0KSB7CisgICAgICAgICAgICAgICAgdXZJbnB1dCA9IG5ldyBfSW5wdXRfaW5wdXRCbG9ja19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJJbnB1dEJsb2NrIl0oInV2Iik7CisgICAgICAg
ICAgICAgICAgdXZJbnB1dC5zZXRBc0F0dHJpYnV0ZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdXZJbnB1dC5vdXRwdXQuY29ubmVjdFRvKHRoaXMudXYpOworICAgICAgICB9CisgICAg
ICAgIGlmICghdGhpcy5zdHJlbmd0aC5pc0Nvbm5lY3RlZCkgeworICAgICAgICAgICAgdmFyIHN0
cmVuZ3RoSW5wdXQgPSBuZXcgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siSW5wdXRCbG9jayJdKCJzdHJlbmd0aCIpOworICAgICAgICAgICAgc3RyZW5ndGhJ
bnB1dC52YWx1ZSA9IDEuMDsKKyAgICAgICAgICAgIHN0cmVuZ3RoSW5wdXQub3V0cHV0LmNvbm5l
Y3RUbyh0aGlzLnN0cmVuZ3RoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgUGVydHVyYk5vcm1h
bEJsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9jayA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJsb2NrLmNhbGwodGhpcywgc3RhdGUpOworICAgICAg
ICB2YXIgY29tbWVudHMgPSAiLy8iICsgdGhpcy5uYW1lOworICAgICAgICB2YXIgdXYgPSB0aGlz
LnV2OworICAgICAgICB2YXIgd29ybGRQb3NpdGlvbiA9IHRoaXMud29ybGRQb3NpdGlvbjsKKyAg
ICAgICAgdmFyIHdvcmxkTm9ybWFsID0gdGhpcy53b3JsZE5vcm1hbDsKKyAgICAgICAgc3RhdGUu
c2hhcmVkRGF0YS5ibG9ja3NXaXRoRGVmaW5lcy5wdXNoKHRoaXMpOworICAgICAgICBzdGF0ZS5f
ZW1pdEV4dGVuc2lvbigiYnVtcCIsICIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyA6IGVuYWJsZSIpOworICAgICAgICBzdGF0ZS5fZW1pdEZ1bmN0aW9uRnJvbUluY2x1ZGUo
ImJ1bXBGcmFnbWVudEZ1bmN0aW9ucyIsIGNvbW1lbnRzLCB7CisgICAgICAgICAgICByZXBsYWNl
U3RyaW5nczogWworICAgICAgICAgICAgICAgIHsgc2VhcmNoOiAvdkJ1bXBJbmZvcy55L2csIHJl
cGxhY2U6ICIxLjAgLyAiICsgdGhpcy5zdHJlbmd0aC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lIH0s
CisgICAgICAgICAgICAgICAgeyBzZWFyY2g6IC92VGFuZ2VudFNwYWNlUGFyYW1zL2csIHJlcGxh
Y2U6ICJ2ZWMyKDEuMCwgMS4wKSIgfSwKKyAgICAgICAgICAgICAgICB7IHNlYXJjaDogL3ZQb3Np
dGlvblcvZywgcmVwbGFjZTogd29ybGRQb3NpdGlvbi5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsg
Ii54eXoiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSk7CisgICAgICAgIHN0YXRlLmNvbXBp
bGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQodGhpcy5vdXRwdXQsIHN0YXRlKSAr
ICIgPSB2ZWM0KDAuKTtcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0g
c3RhdGUuX2VtaXRDb2RlRnJvbUluY2x1ZGUoImJ1bXBGcmFnbWVudCIsIGNvbW1lbnRzLCB7Cisg
ICAgICAgICAgICByZXBsYWNlU3RyaW5nczogWworICAgICAgICAgICAgICAgIHsgc2VhcmNoOiAv
cGVydHVyYk5vcm1hbFwoVEJOLHZCdW1wVVZcK3V2T2Zmc2V0XCkvZywgcmVwbGFjZTogInBlcnR1
cmJOb3JtYWwoVEJOLCAiICsgdGhpcy5ub3JtYWxNYXBDb2xvci5hc3NvY2lhdGVkVmFyaWFibGVO
YW1lICsgIikiIH0sCisgICAgICAgICAgICAgICAgeyBzZWFyY2g6IC92QnVtcEluZm9zLnkvZywg
cmVwbGFjZTogIjEuMCAvICIgKyB0aGlzLnN0cmVuZ3RoLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUg
fSwKKyAgICAgICAgICAgICAgICB7IHNlYXJjaDogL3ZCdW1wVVYvZywgcmVwbGFjZTogdXYuYXNz
b2NpYXRlZFZhcmlhYmxlTmFtZSB9LAorICAgICAgICAgICAgICAgIHsgc2VhcmNoOiAvdlBvc2l0
aW9uVy9nLCByZXBsYWNlOiB3b3JsZFBvc2l0aW9uLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAi
Lnh5eiIgfSwKKyAgICAgICAgICAgICAgICB7IHNlYXJjaDogL25vcm1hbFc9L2csIHJlcGxhY2U6
IHRoaXMub3V0cHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLnh5eiA9ICIgfSwKKyAgICAg
ICAgICAgICAgICB7IHNlYXJjaDogL25vcm1hbFcvZywgcmVwbGFjZTogd29ybGROb3JtYWwuYXNz
b2NpYXRlZFZhcmlhYmxlTmFtZSArICIueHl6IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBQZXJ0dXJiTm9ybWFs
QmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLlBl
cnR1cmJOb3JtYWxCbG9jayJdID0gUGVydHVyYk5vcm1hbEJsb2NrOworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvSW5wdXQvYW5pbWF0ZWRJbnB1dEJsb2Nr
VHlwZXMudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tz
L0lucHV0L2FuaW1hdGVkSW5wdXRCbG9ja1R5cGVzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzOyB9KTsKKy8qKgorICogRW51bSBk
ZWZpbmluZyB0aGUgdHlwZSBvZiBhbmltYXRpb25zIHN1cHBvcnRlZCBieSBJbnB1dEJsb2NrCisg
Ki8KK3ZhciBBbmltYXRlZElucHV0QmxvY2tUeXBlczsKKyhmdW5jdGlvbiAoQW5pbWF0ZWRJbnB1
dEJsb2NrVHlwZXMpIHsKKyAgICAvKiogTm8gYW5pbWF0aW9uICovCisgICAgQW5pbWF0ZWRJbnB1
dEJsb2NrVHlwZXNbQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXNbIk5vbmUiXSA9IDBdID0gIk5vbmUi
OworICAgIC8qKiBUaW1lIGJhc2VkIGFuaW1hdGlvbi4gV2lsbCBvbmx5IHdvcmsgZm9yIGZsb2F0
cyAqLworICAgIEFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzW0FuaW1hdGVkSW5wdXRCbG9ja1R5cGVz
WyJUaW1lIl0gPSAxXSA9ICJUaW1lIjsKK30pKEFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzIHx8IChB
bmltYXRlZElucHV0QmxvY2tUeXBlcyA9IHt9KSk7CisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9JbnB1dC9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMv
Tm9kZS9CbG9ja3MvSW5wdXQvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBJbnB1dEJs
b2NrLCBBbmltYXRlZElucHV0QmxvY2tUeXBlcyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaW5wdXRCbG9jayAqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9CbG9ja3MvSW5wdXQvaW5wdXRCbG9jay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbnB1
dEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJJbnB1dEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2FuaW1hdGVkSW5wdXRCbG9ja1R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FuaW1hdGVkSW5wdXRCbG9ja1R5cGVzICovICIu
L01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9JbnB1dC9hbmltYXRlZElucHV0QmxvY2tUeXBlcy50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJBbmltYXRlZElucHV0QmxvY2tUeXBlcyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2FuaW1hdGVkSW5wdXRCbG9ja1R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzIl07IH0pOworCisKKworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvSW5wdXQvaW5wdXRCbG9jay50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9JbnB1dC9pbnB1dEJsb2NrLnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBJbnB1dEJsb2NrICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIklucHV0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIElucHV0
QmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9k
ZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4vTWF0ZXJpYWxz
L05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X05vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRNb2RlICovICIuL01hdGVyaWFscy9Ob2RlL05vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50TW9kZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9u
b2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyAqLyAi
Li9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL01hdGhzL21hdGgu
dmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vTWlzYy90
eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vTWF0aHMvbWF0aCAqLyAiLi9NYXRocy9tYXRoLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FuaW1hdGVkSW5wdXRCbG9ja1R5cGVzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Fu
aW1hdGVkSW5wdXRCbG9ja1R5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9JbnB1dC9h
bmltYXRlZElucHV0QmxvY2tUeXBlcy50cyIpOworCisKKworCisKKworCisKKworCisvKioKKyAq
IEJsb2NrIHVzZWQgdG8gZXhwb3NlIGFuIGlucHV0IHZhbHVlCisgKi8KK3ZhciBJbnB1dEJsb2Nr
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKElucHV0QmxvY2ssIF9zdXBlcik7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBJbnB1dEJsb2NrCisgICAgICogQHBhcmFtIG5h
bWUgZGVmaW5lcyB0aGUgYmxvY2sgbmFtZQorICAgICAqIEBwYXJhbSB0YXJnZXQgZGVmaW5lcyB0
aGUgdGFyZ2V0IG9mIHRoYXQgYmxvY2sgKFZlcnRleCBieSBkZWZhdWx0KQorICAgICAqIEBwYXJh
bSB0eXBlIGRlZmluZXMgdGhlIHR5cGUgb2YgdGhlIGlucHV0IChjYW4gYmUgc2V0IHRvIE5vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMuQXV0b0RldGVjdCkKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBJbnB1dEJsb2NrKG5hbWUsIHRhcmdldCwgdHlwZSkgeworICAgICAgICBpZiAo
dGFyZ2V0ID09PSB2b2lkIDApIHsgdGFyZ2V0ID0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5W
ZXJ0ZXg7IH0KKyAgICAgICAgaWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0eXBlID0gX25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRlY3Q7IH0K
KyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgdGFyZ2V0LCBmYWxz
ZSwgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuX21vZGUgPSBfTm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSJdLlVuZGVmaW5lZDsKKyAgICAgICAgX3Ro
aXMuX2FuaW1hdGlvblR5cGUgPSBfYW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMiXS5Ob25lOworICAgICAg
ICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhpcy5fc3lzdGVtVmFsdWUgPSBudWxsOworICAg
ICAgICAvKiogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBpbnB1
dCBjYW4gYmUgZWRpdGVkIGluIHRoZSBJbnNwZWN0b3IgKGZhbHNlIGJ5IGRlZmF1bHQpICovCisg
ICAgICAgIF90aGlzLnZpc2libGVJbkluc3BlY3RvciA9IGZhbHNlOworICAgICAgICBfdGhpcy5f
dHlwZSA9IHR5cGU7CisgICAgICAgIF90aGlzLnNldERlZmF1bHRWYWx1ZSgpOworICAgICAgICBf
dGhpcy5yZWdpc3Rlck91dHB1dCgib3V0cHV0IiwgdHlwZSk7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KElucHV0QmxvY2sucHJvdG90eXBl
LCAidHlwZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY29u
bmVjdGlvbiBwb2ludCB0eXBlIChkZWZhdWx0IGlzIGZsb2F0KQorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRl
Y3QpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1VuaWZvcm0gJiYgdGhpcy52YWx1ZSAh
PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4odGhpcy52YWx1ZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBfbm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudmFsdWUuZ2V0Q2xhc3NOYW1lKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgIlZlY3RvcjIiOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX3R5cGUgPSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzIl0uVmVjdG9yMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIlZlY3RvcjMiOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBfbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yMzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgIlZlY3RvcjQiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5
cGUgPSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0u
VmVjdG9yNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIkNvbG9yMyI6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50VHlwZXMiXS5Db2xvcjM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJDb2xvcjQi
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBfbm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJO
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3I0OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQXR0cmli
dXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5uYW1lKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICJwb3NpdGlvbiI6CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICJub3JtYWwiOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidGFuZ2VudCI6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IF9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IzOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlOworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAidXYiOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidXYyIjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90eXBlID0gX25vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICJtYXRyaWNlc0luZGljZXMiOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAi
bWF0cmljZXNXZWlnaHRzIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIndvcmxkMCI6
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ3b3JsZDEiOgorICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAid29ybGQyIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIndv
cmxkMyI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAiY29sb3IiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3R5cGUgPSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzIl0uQ29sb3I0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90
eXBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICh0aGlzLmlzU3lzdGVtVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dp
dGNoICh0aGlzLl9zeXN0ZW1WYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBf
bm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5v
ZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkOgorICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkVmlldzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5Xb3JsZFZpZXdQcm9qZWN0
aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFs
dWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVl
cyJdLlZpZXc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxTeXN0
ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsU3lzdGVt
VmFsdWVzIl0uVmlld1Byb2plY3Rpb246CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9u
b2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9k
ZU1hdGVyaWFsU3lzdGVtVmFsdWVzIl0uUHJvamVjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLl90eXBlID0gX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcyJdLk1hdHJpeDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlh
bFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxT
eXN0ZW1WYWx1ZXMiXS5DYW1lcmFQb3NpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLl90eXBlID0gX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlcyJdLlZlY3RvcjM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxTeXN0
ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsU3lzdGVt
VmFsdWVzIl0uRm9nQ29sb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlw
ZSA9IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5D
b2xvcjM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KElucHV0QmxvY2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
b3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogU2V0IHRoZSBz
b3VyY2Ugb2YgdGhpcyBjb25uZWN0aW9uIHBvaW50IHRvIGEgdmVydGV4IGF0dHJpYnV0ZQorICAg
ICAqIEBwYXJhbSBhdHRyaWJ1dGVOYW1lIGRlZmluZXMgdGhlIGF0dHJpYnV0ZSBuYW1lIChwb3Np
dGlvbiwgdXYsIG5vcm1hbCwgZXRjLi4uKS4gSWYgbm90IHNwZWNpZmllZCBpdCB3aWxsIHRha2Ug
dGhlIGNvbm5lY3Rpb24gcG9pbnQgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IGNv
bm5lY3Rpb24gcG9pbnQKKyAgICAgKi8KKyAgICBJbnB1dEJsb2NrLnByb3RvdHlwZS5zZXRBc0F0
dHJpYnV0ZSA9IGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7CisgICAgICAgIGlmIChhdHRyaWJ1
dGVOYW1lKSB7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVOYW1lOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX21vZGUgPSBfTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50TW9kZSJdLkF0dHJpYnV0ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHNvdXJjZSBvZiB0aGlzIGNvbm5lY3Rpb24gcG9p
bnQgdG8gYSBzeXN0ZW0gdmFsdWUKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5lIHRoZSBzeXN0
ZW0gdmFsdWUgdG8gdXNlICh3b3JsZCwgdmlldywgZXRjLi4uKSBvciBudWxsIHRvIHN3aXRjaCB0
byBtYW51YWwgdmFsdWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBjb25uZWN0aW9uIHBv
aW50CisgICAgICovCisgICAgSW5wdXRCbG9jay5wcm90b3R5cGUuc2V0QXNTeXN0ZW1WYWx1ZSA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB0aGlzLnN5c3RlbVZhbHVlID0gdmFsdWU7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KElu
cHV0QmxvY2sucHJvdG90eXBlLCAidmFsdWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIG9yIHNldHMgdGhlIHZhbHVlIG9mIHRoYXQgcG9pbnQuCisgICAgICAgICAqIFBsZWFzZSBu
b3RlIHRoYXQgdGhpcyB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQgaWYgdmFsdWVDYWxsYmFjayBpcyBk
ZWZpbmVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9zdG9yZWRWYWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3N0b3JlZFZhbHVlID0gdmFsdWU7
CisgICAgICAgICAgICB0aGlzLl9tb2RlID0gX05vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50TW9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludE1vZGUiXS5Vbmlmb3JtOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoSW5wdXRCbG9jay5wcm90b3R5cGUsICJ2YWx1ZUNhbGxiYWNrIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgY2FsbGJhY2sgdXNlZCB0
byBnZXQgdGhlIHZhbHVlIG9mIHRoYXQgcG9pbnQuCisgICAgICAgICAqIFBsZWFzZSBub3RlIHRo
YXQgc2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgZm9yY2UgdGhlIGNvbm5lY3Rpb24gcG9pbnQgdG8g
aWdub3JlIHRoZSB2YWx1ZSBwcm9wZXJ0eQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVDYWxsYmFjazsKKyAgICAg
ICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMu
X3ZhbHVlQ2FsbGJhY2sgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX21vZGUgPSBfTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSJdLlVuaWZvcm07CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnB1dEJsb2NrLnByb3Rv
dHlwZSwgImFzc29jaWF0ZWRWYXJpYWJsZU5hbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIG9yIHNldHMgdGhlIGFzc29jaWF0ZWQgdmFyaWFibGUgbmFtZSBpbiB0aGUgc2hhZGVy
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9hc3NvY2lhdGVkVmFyaWFibGVOYW1lOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYXNzb2NpYXRlZFZhcmlh
YmxlTmFtZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoSW5wdXRCbG9jay5wcm90b3R5cGUsICJhbmltYXRpb25UeXBlIiwgeworICAgICAgICAv
KiogR2V0cyBvciBzZXRzIHRoZSB0eXBlIG9mIGFuaW1hdGlvbiBhcHBsaWVkIHRvIHRoZSBpbnB1
dCAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9hbmltYXRpb25UeXBlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uVHlwZSA9IHZhbHVlOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5wdXRCbG9jay5wcm90b3R5cGUs
ICJpc1VuZGVmaW5lZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFu
IGluZGljYXRpbmcgdGhhdCB0aGlzIGNvbm5lY3Rpb24gcG9pbnQgbm90IGRlZmluZWQgeWV0Cisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9tb2RlID09PSBfTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50TW9kZSJdLlVuZGVmaW5lZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KElucHV0QmxvY2sucHJvdG90eXBlLCAiaXNVbmlmb3JtIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhp
cyBjb25uZWN0aW9uIHBvaW50IGlzIGNvbWluZyBmcm9tIGFuIHVuaWZvcm0uCisgICAgICAgICAq
IEluIHRoaXMgY2FzZSB0aGUgY29ubmVjdGlvbiBwb2ludCBuYW1lIG11c3QgYmUgdGhlIG5hbWUg
b2YgdGhlIHVuaWZvcm0gdG8gdXNlLgorICAgICAgICAgKiBDYW4gb25seSBiZSBzZXQgb24gaW5w
dXRzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9tb2RlID09PSBfTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRN
b2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50TW9kZSJdLlVuaWZvcm07CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9tb2RlID0gdmFsdWUgPyBfTm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSJdLlVuaWZvcm0gOiBfTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSJdLlVuZGVmaW5lZDsKKyAg
ICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSA9ICIiOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5wdXRCbG9jay5wcm90b3R5cGUsICJp
c0F0dHJpYnV0ZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJv
b2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoaXMgY29ubmVjdGlvbiBwb2ludCBpcyBjb21pbmcgZnJv
bSBhbiBhdHRyaWJ1dGUuCisgICAgICAgICAqIEluIHRoaXMgY2FzZSB0aGUgY29ubmVjdGlvbiBw
b2ludCBuYW1lIG11c3QgYmUgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byB1c2UKKyAgICAg
ICAgICogQ2FuIG9ubHkgYmUgc2V0IG9uIGlucHV0cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kZSA9PT0gX05vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludE1vZGUiXS5BdHRyaWJ1dGU7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0
aGlzLl9tb2RlID0gdmFsdWUgPyBfTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2Rl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50TW9kZSJdLkF0dHJpYnV0ZSA6IF9Ob2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dE1vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRNb2RlIl0uVW5kZWZpbmVkOworICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVk
VmFyaWFibGVOYW1lID0gIiI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShJbnB1dEJsb2NrLnByb3RvdHlwZSwgImlzVmFyeWluZyIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoaXMg
Y29ubmVjdGlvbiBwb2ludCBpcyBnZW5lcmF0aW5nIGEgdmFyeWluZyB2YXJpYWJsZS4KKyAgICAg
ICAgICogQ2FuIG9ubHkgYmUgc2V0IG9uIGV4aXQgcG9pbnRzCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RlID09PSBf
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSJdLlZhcnlpbmc7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLl9tb2RlID0gdmFsdWUgPyBfTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRN
b2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50TW9kZSJdLlZhcnlpbmcgOiBfTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50TW9kZSJdLlVuZGVmaW5lZDsKKyAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRl
ZFZhcmlhYmxlTmFtZSA9ICIiOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoSW5wdXRCbG9jay5wcm90b3R5cGUsICJpc1N5c3RlbVZhbHVlIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBjdXJy
ZW50IGNvbm5lY3Rpb24gcG9pbnQgaXMgYSBzeXN0ZW0gdmFsdWUKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N5c3RlbVZh
bHVlICE9IG51bGw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShJbnB1dEJsb2NrLnByb3RvdHlwZSwgInN5c3RlbVZhbHVlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBjdXJyZW50IHdlbGwga25vd24gdmFsdWUgb3IgbnVs
bCBpZiBub3QgZGVmaW5lZCBhcyBhIHN5c3RlbSB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3lzdGVtVmFsdWU7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLl9tb2RlID0gX05vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dE1vZGUiXS5Vbmlmb3JtOworICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVmFyaWFibGVOYW1l
ID0gIiI7CisgICAgICAgICAgICB0aGlzLl9zeXN0ZW1WYWx1ZSA9IHZhbHVlOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5hbWUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIElucHV0QmxvY2sucHJv
dG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJJbnB1
dEJsb2NrIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFuaW1hdGUgdGhlIGlucHV0IGlmIGFu
aW1hdGlvblR5cGUgIT09IE5vbmUKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgcmVu
ZGVyaW5nIHNjZW5lCisgICAgICovCisgICAgSW5wdXRCbG9jay5wcm90b3R5cGUuYW5pbWF0ZSA9
IGZ1bmN0aW9uIChzY2VuZSkgeworICAgICAgICBzd2l0Y2ggKHRoaXMuX2FuaW1hdGlvblR5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgX2FuaW1hdGVkSW5wdXRCbG9ja1R5cGVzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIkFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzIl0uVGltZTogeworICAg
ICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCkgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLnZhbHVlICs9IHNjZW5lLmdldEFuaW1hdGlvblJhdGlvKCkgKiAwLjAxOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgSW5wdXRCbG9jay5wcm90b3R5cGUuX2VtaXREZWZpbmUgPSBmdW5jdGlv
biAoZGVmaW5lKSB7CisgICAgICAgIGlmIChkZWZpbmVbMF0gPT09ICIhIikgeworICAgICAgICAg
ICAgcmV0dXJuICIjaWZuZGVmICIgKyBkZWZpbmUuc3Vic3RyaW5nKDEpICsgIlxyXG4iOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiAiI2lmZGVmICIgKyBkZWZpbmUgKyAiXHJcbiI7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGlucHV0IGJsb2NrIHRvIGl0cyBkZWZhdWx0IHZh
bHVlIChiYXNlZCBvbiBpdHMgdHlwZSkKKyAgICAgKi8KKyAgICBJbnB1dEJsb2NrLnByb3RvdHlw
ZS5zZXREZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHN3aXRjaCAodGhpcy50
eXBlKSB7CisgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdDoKKyAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0g
MDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjI6CisgICAgICAg
ICAgICAgICAgdGhpcy52YWx1ZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJWZWN0b3IyIl0uWmVybygpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzIl0uVmVjdG9yMzoKKyAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0OgorICAgICAg
ICAgICAgICAgIHRoaXMudmFsdWUgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siVmVjdG9yNCJdLlplcm8oKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlcyJdLkNvbG9yMzoKKyAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gX01hdGhz
X21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29sb3IzIl0uV2hpdGUoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNDoKKyAgICAgICAgICAgICAg
ICB0aGlzLnZhbHVlID0gbmV3IF9NYXRoc19tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIkNvbG9yNCJdKDEsIDEsIDEsIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzIl0uTWF0cml4OgorICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH07CisgICAgSW5wdXRCbG9j
ay5wcm90b3R5cGUuX2R1bXBQcm9wZXJ0aWVzQ29kZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKHRoaXMuaXNBdHRyaWJ1dGUpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb2RlVmFy
aWFibGVOYW1lICsgIi5zZXRBc0F0dHJpYnV0ZShcIiIgKyB0aGlzLm5hbWUgKyAiXCIpO1xyXG4i
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmlzU3lzdGVtVmFsdWUpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9jb2RlVmFyaWFibGVOYW1lICsgIi5zZXRBc1N5c3RlbVZhbHVlKEJB
QllMT04uTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzLiIgKyBfbm9kZU1hdGVyaWFsU3lzdGVtVmFs
dWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVl
cyJdW3RoaXMuX3N5c3RlbVZhbHVlXSArICIpO1xyXG4iOworICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLmlzVW5pZm9ybSkgeworICAgICAgICAgICAgdmFyIHZhbHVlU3RyaW5nID0gIiI7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0Ogor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yMjoKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSAibmV3IEJBQllMT04uVmVjdG9yMigiICsg
dGhpcy52YWx1ZS54ICsgIiwgIiArIHRoaXMudmFsdWUueSArICIpIjsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yMzoKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWVTdHJpbmcgPSAibmV3IEJBQllMT04uVmVjdG9yMygiICsgdGhpcy52YWx1ZS54ICsg
IiwgIiArIHRoaXMudmFsdWUueSArICIsICIgKyB0aGlzLnZhbHVlLnogKyAiKSI7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQ6CisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlU3RyaW5nID0gIm5ldyBCQUJZTE9OLlZlY3RvcjQoIiArIHRoaXMudmFs
dWUueCArICIsICIgKyB0aGlzLnZhbHVlLnkgKyAiLCAiICsgdGhpcy52YWx1ZS56ICsgIiwgIiAr
IHRoaXMudmFsdWUudyArICIpIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzIl0uQ29sb3IzOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9ICJuZXcg
QkFCWUxPTi5Db2xvcjMoIiArIHRoaXMudmFsdWUuciArICIsICIgKyB0aGlzLnZhbHVlLmcgKyAi
LCAiICsgdGhpcy52YWx1ZS5iICsgIikiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXMiXS5Db2xvcjQ6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0g
Im5ldyBCQUJZTE9OLkNvbG9yNCgiICsgdGhpcy52YWx1ZS5yICsgIiwgIiArIHRoaXMudmFsdWUu
ZyArICIsICIgKyB0aGlzLnZhbHVlLmIgKyAiLCAiICsgdGhpcy52YWx1ZS5hICsgIikiOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9jb2RlVmFyaWFibGVOYW1lICsgIi52YWx1ZSA9ICIgKyB2YWx1ZVN0cmluZyArICI7
XHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIiOworICAgIH07CisgICAgSW5wdXRC
bG9jay5wcm90b3R5cGUuX2VtaXQgPSBmdW5jdGlvbiAoc3RhdGUsIGRlZmluZSkgeworICAgICAg
ICAvLyBVbmlmb3JtcworICAgICAgICBpZiAodGhpcy5pc1VuaWZvcm0pIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy5hc3NvY2lhdGVkVmFyaWFibGVOYW1lKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5hc3NvY2lhdGVkVmFyaWFibGVOYW1lID0gc3RhdGUuX2dldEZyZWVWYXJpYWJsZU5hbWUoInVf
IiArIHRoaXMubmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RhdGUudW5p
Zm9ybXMuaW5kZXhPZih0aGlzLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUpICE9PSAtMSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLnVu
aWZvcm1zLnB1c2godGhpcy5hc3NvY2lhdGVkVmFyaWFibGVOYW1lKTsKKyAgICAgICAgICAgIGlm
IChkZWZpbmUpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5fdW5pZm9ybURlY2xhcmF0aW9uICs9
IHRoaXMuX2VtaXREZWZpbmUoZGVmaW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0
YXRlLl91bmlmb3JtRGVjbGFyYXRpb24gKz0gInVuaWZvcm0gIiArIHN0YXRlLl9nZXRHTFR5cGUo
dGhpcy50eXBlKSArICIgIiArIHRoaXMuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiI7
CisgICAgICAgICAgICBpZiAoZGVmaW5lKSB7CisgICAgICAgICAgICAgICAgc3RhdGUuX3VuaWZv
cm1EZWNsYXJhdGlvbiArPSAiI2VuZGlmXHJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyB3ZWxsIGtub3duCisgICAgICAgICAgICB2YXIgaGludHMgPSBzdGF0ZS5zaGFyZWREYXRh
LmhpbnRzOworICAgICAgICAgICAgaWYgKHRoaXMuX3N5c3RlbVZhbHVlICE9PSBudWxsICYmIHRo
aXMuX3N5c3RlbVZhbHVlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KHRoaXMuX3N5c3RlbVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgX25vZGVNYXRl
cmlhbFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJp
YWxTeXN0ZW1WYWx1ZXMiXS5Xb3JsZFZpZXc6CisgICAgICAgICAgICAgICAgICAgICAgICBoaW50
cy5uZWVkV29ybGRWaWV3TWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIl0u
V29ybGRWaWV3UHJvamVjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLm5lZWRX
b3JsZFZpZXdQcm9qZWN0aW9uTWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hbmltYXRpb25UeXBlICE9PSBfYW5pbWF0
ZWRJbnB1dEJsb2NrVHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQW5pbWF0ZWRJ
bnB1dEJsb2NrVHlwZXMiXS5Ob25lKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNoYXJl
ZERhdGEuYW5pbWF0ZWRJbnB1dHMucHVzaCh0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gQXR0
cmlidXRlCisgICAgICAgIGlmICh0aGlzLmlzQXR0cmlidXRlKSB7CisgICAgICAgICAgICB0aGlz
LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgPSB0aGlzLm5hbWU7CisgICAgICAgICAgICBpZiAodGhp
cy50YXJnZXQgPT09IF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4ICYmIHN0YXRlLl92
ZXJ0ZXhTdGF0ZSkgeyAvLyBBdHRyaWJ1dGUgZm9yIGZyYWdtZW50IG5lZWQgdG8gYmUgY2Fycmll
ZCBvdmVyIGJ5IHZhcnlpbmdzCisgICAgICAgICAgICAgICAgdGhpcy5fZW1pdChzdGF0ZS5fdmVy
dGV4U3RhdGUsIGRlZmluZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHN0YXRlLmF0dHJpYnV0ZXMuaW5kZXhPZih0aGlzLmFzc29jaWF0
ZWRWYXJpYWJsZU5hbWUpICE9PSAtMSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLmF0dHJpYnV0ZXMucHVzaCh0aGlzLmFzc29jaWF0
ZWRWYXJpYWJsZU5hbWUpOworICAgICAgICAgICAgaWYgKGRlZmluZSkgeworICAgICAgICAgICAg
ICAgIHN0YXRlLl9hdHRyaWJ1dGVEZWNsYXJhdGlvbiArPSB0aGlzLl9lbWl0RGVmaW5lKGRlZmlu
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZS5fYXR0cmlidXRlRGVjbGFyYXRp
b24gKz0gImF0dHJpYnV0ZSAiICsgc3RhdGUuX2dldEdMVHlwZSh0aGlzLnR5cGUpICsgIiAiICsg
dGhpcy5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIjtcclxuIjsKKyAgICAgICAgICAgIGlmIChk
ZWZpbmUpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5fYXR0cmlidXRlRGVjbGFyYXRpb24gKz0g
IiNlbmRpZlxyXG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIElucHV0QmxvY2sucHJvdG90eXBlLl90cmFuc21pdFdvcmxkID0gZnVu
Y3Rpb24gKGVmZmVjdCwgd29ybGQsIHdvcmxkVmlldywgd29ybGRWaWV3UHJvamVjdGlvbikgewor
ICAgICAgICBpZiAoIXRoaXMuX3N5c3RlbVZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHZhcmlhYmxlTmFtZSA9IHRoaXMuYXNzb2NpYXRlZFZhcmlh
YmxlTmFtZTsKKyAgICAgICAgc3dpdGNoICh0aGlzLl9zeXN0ZW1WYWx1ZSkgeworICAgICAgICAg
ICAgY2FzZSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkOgorICAgICAgICAgICAgICAg
IGVmZmVjdC5zZXRNYXRyaXgodmFyaWFibGVOYW1lLCB3b3JsZCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIl0uV29ybGRW
aWV3OgorICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRNYXRyaXgodmFyaWFibGVOYW1lLCB3b3Js
ZFZpZXcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfbm9kZU1h
dGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRl
cmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkVmlld1Byb2plY3Rpb246CisgICAgICAgICAgICAgICAg
ZWZmZWN0LnNldE1hdHJpeCh2YXJpYWJsZU5hbWUsIHdvcmxkVmlld1Byb2plY3Rpb24pOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIElucHV0QmxvY2sucHJvdG90eXBlLl90cmFuc21pdCA9IGZ1bmN0aW9uIChlZmZlY3Qs
IHNjZW5lKSB7CisgICAgICAgIGlmICh0aGlzLmlzQXR0cmlidXRlKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHZhcmlhYmxlTmFtZSA9IHRoaXMuYXNzb2Np
YXRlZFZhcmlhYmxlTmFtZTsKKyAgICAgICAgaWYgKHRoaXMuX3N5c3RlbVZhbHVlKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKHRoaXMuX3N5c3RlbVZhbHVlKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
Ik5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkOgorICAgICAgICAgICAgICAgIGNhc2Ug
X25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJO
b2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5Xb3JsZFZpZXc6CisgICAgICAgICAgICAgICAgY2Fz
ZSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
Ik5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkVmlld1Byb2plY3Rpb246CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxT
eXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsU3lz
dGVtVmFsdWVzIl0uVmlldzoKKyAgICAgICAgICAgICAgICAgICAgZWZmZWN0LnNldE1hdHJpeCh2
YXJpYWJsZU5hbWUsIHNjZW5lLmdldFZpZXdNYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMiXS5Q
cm9qZWN0aW9uOgorICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0TWF0cml4KHZhcmlhYmxl
TmFtZSwgc2NlbmUuZ2V0UHJvamVjdGlvbk1hdHJpeCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLlZp
ZXdQcm9qZWN0aW9uOgorICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0TWF0cml4KHZhcmlh
YmxlTmFtZSwgc2NlbmUuZ2V0VHJhbnNmb3JtTWF0cml4KCkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIl0u
Q2FtZXJhUG9zaXRpb246CisgICAgICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRWZWN0b3IzKHZh
cmlhYmxlTmFtZSwgc2NlbmUuYWN0aXZlQ2FtZXJhLmdsb2JhbFBvc2l0aW9uKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsU3lz
dGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRlcmlhbFN5c3Rl
bVZhbHVlcyJdLkZvZ0NvbG9yOgorICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0Q29sb3Iz
KHZhcmlhYmxlTmFtZSwgc2NlbmUuZm9nQ29sb3IpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgdmFsdWUgPSB0aGlzLl92YWx1ZUNhbGxiYWNrID8gdGhpcy5fdmFsdWVDYWxsYmFjaygp
IDogdGhpcy5fc3RvcmVkVmFsdWU7CisgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7
CisgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXMiXS5GbG9hdDoKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQodmFy
aWFibGVOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5J
bnQ6CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldEludCh2YXJpYWJsZU5hbWUsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yMzoKKyAgICAgICAgICAg
ICAgICBlZmZlY3Quc2V0Q29sb3IzKHZhcmlhYmxlTmFtZSwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3I0OgorICAgICAgICAgICAgICAgIGVmZmVjdC5z
ZXREaXJlY3RDb2xvcjQodmFyaWFibGVOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMiXS5WZWN0b3IyOgorICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRWZWN0
b3IyKHZhcmlhYmxlTmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzIl0uVmVjdG9yMzoKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0VmVjdG9yMyh2YXJpYWJs
ZU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
X25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3Rv
cjQ6CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldFZlY3RvcjQodmFyaWFibGVOYW1lLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5NYXRyaXg6CisgICAgICAg
ICAgICAgICAgZWZmZWN0LnNldE1hdHJpeCh2YXJpYWJsZU5hbWUsIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH07CisgICAgSW5wdXRCbG9jay5wcm90b3R5
cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3Rv
dHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgaWYgKHRoaXMuaXNV
bmlmb3JtIHx8IHRoaXMuaXNTeXN0ZW1WYWx1ZSkgeworICAgICAgICAgICAgc3RhdGUuc2hhcmVk
RGF0YS5pbnB1dEJsb2Nrcy5wdXNoKHRoaXMpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Vt
aXQoc3RhdGUpOworICAgIH07CisgICAgSW5wdXRCbG9jay5wcm90b3R5cGUuc2VyaWFsaXplID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9zdXBlci5w
cm90b3R5cGUuc2VyaWFsaXplLmNhbGwodGhpcyk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QudHlwZSA9IHRoaXMudHlwZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tb2RlID0g
dGhpcy5fbW9kZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5zeXN0ZW1WYWx1ZSA9IHRo
aXMuX3N5c3RlbVZhbHVlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmFuaW1hdGlvblR5
cGUgPSB0aGlzLl9hbmltYXRpb25UeXBlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnZp
c2libGVJbkluc3BlY3RvciA9IHRoaXMudmlzaWJsZUluSW5zcGVjdG9yOworICAgICAgICBpZiAo
dGhpcy5fc3RvcmVkVmFsdWUgIT0gbnVsbCAmJiB0aGlzLl9tb2RlID09PSBfTm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSJdLlVuaWZvcm0pIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9zdG9yZWRWYWx1ZS5hc0FycmF5KSB7CisgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC52YWx1ZVR5cGUgPSAiQkFCWUxPTi4iICsgdGhpcy5fc3RvcmVkVmFs
dWUuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC52
YWx1ZSA9IHRoaXMuX3N0b3JlZFZhbHVlLmFzQXJyYXkoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudmFsdWVU
eXBlID0gIm51bWJlciI7CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC52YWx1
ZSA9IHRoaXMuX3N0b3JlZFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgSW5wdXRCbG9jay5wcm90
b3R5cGUuX2Rlc2VyaWFsaXplID0gZnVuY3Rpb24gKHNlcmlhbGl6YXRpb25PYmplY3QsIHNjZW5l
LCByb290VXJsKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2Rlc2VyaWFsaXplLmNhbGwo
dGhpcywgc2VyaWFsaXphdGlvbk9iamVjdCwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICB0aGlz
Ll90eXBlID0gc2VyaWFsaXphdGlvbk9iamVjdC50eXBlOworICAgICAgICB0aGlzLl9tb2RlID0g
c2VyaWFsaXphdGlvbk9iamVjdC5tb2RlOworICAgICAgICB0aGlzLl9zeXN0ZW1WYWx1ZSA9IHNl
cmlhbGl6YXRpb25PYmplY3Quc3lzdGVtVmFsdWUgfHwgc2VyaWFsaXphdGlvbk9iamVjdC53ZWxs
S25vd25WYWx1ZTsKKyAgICAgICAgdGhpcy5fYW5pbWF0aW9uVHlwZSA9IHNlcmlhbGl6YXRpb25P
YmplY3QuYW5pbWF0aW9uVHlwZTsKKyAgICAgICAgdGhpcy52aXNpYmxlSW5JbnNwZWN0b3IgPSBz
ZXJpYWxpemF0aW9uT2JqZWN0LnZpc2libGVJbkluc3BlY3RvcjsKKyAgICAgICAgaWYgKCFzZXJp
YWxpemF0aW9uT2JqZWN0LnZhbHVlVHlwZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGlmIChzZXJpYWxpemF0aW9uT2JqZWN0LnZhbHVlVHlwZSA9PT0gIm51bWJl
ciIpIHsKKyAgICAgICAgICAgIHRoaXMuX3N0b3JlZFZhbHVlID0gc2VyaWFsaXphdGlvbk9iamVj
dC52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciB2YWx1
ZVR5cGUgPSBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siX1R5
cGVTdG9yZSJdLkdldENsYXNzKHNlcmlhbGl6YXRpb25PYmplY3QudmFsdWVUeXBlKTsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZVR5cGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZWRWYWx1
ZSA9IHZhbHVlVHlwZS5Gcm9tQXJyYXkoc2VyaWFsaXphdGlvbk9iamVjdC52YWx1ZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBJbnB1dEJsb2NrOworfShf
bm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVy
aWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzdfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5JbnB1dEJsb2NrIl0g
PSBJbnB1dEJsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9C
bG9ja3MvVmVydGV4L2JvbmVzQmxvY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUv
QmxvY2tzL1ZlcnRleC9ib25lc0Jsb2NrLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
Qm9uZXNCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb25lc0Js
b2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCb25lc0Jsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25v
ZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0
ZXJpYWxTeXN0ZW1WYWx1ZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1h
dGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9tYXRlcmlhbEhlbHBlciAqLyAiLi9N
YXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
SW5wdXRfaW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vSW5wdXQvaW5wdXRCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9C
bG9ja3MvSW5wdXQvaW5wdXRCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
aXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3Rv
cmUudHMiKTsKKworCisKKworCisKKworCisvKioKKyAqIEJsb2NrIHVzZWQgdG8gYWRkIHN1cHBv
cnQgZm9yIHZlcnRleCBza2lubmluZyAoYm9uZXMpCisgKi8KK3ZhciBCb25lc0Jsb2NrID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEJvbmVzQmxvY2ssIF9zdXBlcik7CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIG5ldyBCb25lc0Jsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVm
aW5lcyB0aGUgYmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIEJvbmVzQmxvY2sobmFt
ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1h
dGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk5vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0
ZXJJbnB1dCgibWF0cmljZXNJbmRpY2VzIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQpOworICAgICAgICBfdGhpcy5yZWdpc3Rlcklu
cHV0KCJtYXRyaWNlc1dlaWdodHMiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yNCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQo
Im1hdHJpY2VzSW5kaWNlc0V4dHJhIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQsIHRydWUpOworICAgICAgICBfdGhpcy5yZWdpc3Rl
cklucHV0KCJtYXRyaWNlc1dlaWdodHNFeHRyYSIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0LCB0cnVlKTsKKyAgICAgICAgX3RoaXMu
cmVnaXN0ZXJJbnB1dCgid29ybGQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzIl0uTWF0cml4KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQo
Im91dHB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXMiXS5NYXRyaXgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAg
ICAqIEluaXRpYWxpemUgdGhlIGJsb2NrIGFuZCBwcmVwYXJlIHRoZSBjb250ZXh0IGZvciBidWls
ZAorICAgICAqIEBwYXJhbSBzdGF0ZSBkZWZpbmVzIHRoZSBzdGF0ZSB0aGF0IHdpbGwgYmUgdXNl
ZCBmb3IgdGhlIGJ1aWxkCisgICAgICovCisgICAgQm9uZXNCbG9jay5wcm90b3R5cGUuaW5pdGlh
bGl6ZSA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBzdGF0ZS5fZXhjbHVkZVZhcmlhYmxl
TmFtZSgiYm9uZVNhbXBsZXIiKTsKKyAgICAgICAgc3RhdGUuX2V4Y2x1ZGVWYXJpYWJsZU5hbWUo
ImJvbmVUZXh0dXJlV2lkdGgiKTsKKyAgICAgICAgc3RhdGUuX2V4Y2x1ZGVWYXJpYWJsZU5hbWUo
Im1Cb25lcyIpOworICAgICAgICBzdGF0ZS5fZXhjbHVkZVZhcmlhYmxlTmFtZSgiQm9uZXNQZXJN
ZXNoIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5h
bWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIEJvbmVzQmxv
Y2sucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
ICJCb25lc0Jsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCb25lc0Js
b2NrLnByb3RvdHlwZSwgIm1hdHJpY2VzSW5kaWNlcyIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgdGhlIG1hdHJpeCBpbmRpY2VzIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5w
dXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQm9u
ZXNCbG9jay5wcm90b3R5cGUsICJtYXRyaWNlc1dlaWdodHMiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSBtYXRyaXggd2VpZ2h0cyBpbnB1dCBjb21wb25lbnQKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2lucHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEJvbmVzQmxvY2sucHJvdG90eXBlLCAibWF0cmljZXNJbmRpY2VzRXh0cmEiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBleHRyYSBtYXRyaXggaW5kaWNlcyBpbnB1dCBjb21w
b25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2lucHV0c1syXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEJvbmVzQmxvY2sucHJvdG90eXBlLCAibWF0cmljZXNXZWlnaHRzRXh0
cmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBleHRyYSBtYXRyaXggd2Vp
Z2h0cyBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1szXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJvbmVzQmxvY2sucHJvdG90eXBlLCAid29y
bGQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB3b3JsZCBpbnB1dCBjb21w
b25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2lucHV0c1s0XTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEJvbmVzQmxvY2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0
cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgQm9uZXNCbG9jay5wcm90b3R5cGUuYXV0
b0NvbmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCkgeworICAgICAgICBpZiAoIXRoaXMubWF0
cmljZXNJbmRpY2VzLmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgbWF0cmljZXNJbmRp
Y2VzSW5wdXQgPSBtYXRlcmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIp
IHsgcmV0dXJuIGIuaXNBdHRyaWJ1dGUgJiYgYi5uYW1lID09PSAibWF0cmljZXNJbmRpY2VzIjsg
fSk7CisgICAgICAgICAgICBpZiAoIW1hdHJpY2VzSW5kaWNlc0lucHV0KSB7CisgICAgICAgICAg
ICAgICAgbWF0cmljZXNJbmRpY2VzSW5wdXQgPSBuZXcgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5wdXRCbG9jayJdKCJtYXRyaWNlc0luZGljZXMiKTsK
KyAgICAgICAgICAgICAgICBtYXRyaWNlc0luZGljZXNJbnB1dC5zZXRBc0F0dHJpYnV0ZSgibWF0
cmljZXNJbmRpY2VzIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRyaWNlc0luZGlj
ZXNJbnB1dC5vdXRwdXQuY29ubmVjdFRvKHRoaXMubWF0cmljZXNJbmRpY2VzKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXRoaXMubWF0cmljZXNXZWlnaHRzLmlzQ29ubmVjdGVkKSB7CisgICAg
ICAgICAgICB2YXIgbWF0cmljZXNXZWlnaHRzSW5wdXQgPSBtYXRlcmlhbC5nZXRJbnB1dEJsb2Nr
QnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuaXNBdHRyaWJ1dGUgJiYgYi5uYW1l
ID09PSAibWF0cmljZXNXZWlnaHRzIjsgfSk7CisgICAgICAgICAgICBpZiAoIW1hdHJpY2VzV2Vp
Z2h0c0lucHV0KSB7CisgICAgICAgICAgICAgICAgbWF0cmljZXNXZWlnaHRzSW5wdXQgPSBuZXcg
X0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5wdXRCbG9j
ayJdKCJtYXRyaWNlc1dlaWdodHMiKTsKKyAgICAgICAgICAgICAgICBtYXRyaWNlc1dlaWdodHNJ
bnB1dC5zZXRBc0F0dHJpYnV0ZSgibWF0cmljZXNXZWlnaHRzIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtYXRyaWNlc1dlaWdodHNJbnB1dC5vdXRwdXQuY29ubmVjdFRvKHRoaXMubWF0
cmljZXNXZWlnaHRzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMud29ybGQuaXNDb25u
ZWN0ZWQpIHsKKyAgICAgICAgICAgIHZhciB3b3JsZElucHV0ID0gbWF0ZXJpYWwuZ2V0SW5wdXRC
bG9ja0J5UHJlZGljYXRlKGZ1bmN0aW9uIChiKSB7IHJldHVybiBiLnN5c3RlbVZhbHVlID09PSBf
bm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5v
ZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdLldvcmxkOyB9KTsKKyAgICAgICAgICAgIGlmICghd29y
bGRJbnB1dCkgeworICAgICAgICAgICAgICAgIHdvcmxkSW5wdXQgPSBuZXcgX0lucHV0X2lucHV0
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5wdXRCbG9jayJdKCJ3b3JsZCIp
OworICAgICAgICAgICAgICAgIHdvcmxkSW5wdXQuc2V0QXNTeXN0ZW1WYWx1ZShfbm9kZU1hdGVy
aWFsU3lzdGVtVmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlh
bFN5c3RlbVZhbHVlcyJdLldvcmxkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdvcmxk
SW5wdXQub3V0cHV0LmNvbm5lY3RUbyh0aGlzLndvcmxkKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgQm9uZXNCbG9jay5wcm90b3R5cGUucHJvdmlkZUZhbGxiYWNrcyA9IGZ1bmN0aW9uIChtZXNo
LCBmYWxsYmFja3MpIHsKKyAgICAgICAgaWYgKG1lc2ggJiYgbWVzaC51c2VCb25lcyAmJiBtZXNo
LmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBtZXNoLnNrZWxldG9uKSB7CisgICAgICAgICAg
ICBmYWxsYmFja3MuYWRkQ1BVU2tpbm5pbmdGYWxsYmFjaygwLCBtZXNoKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgQm9uZXNCbG9jay5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChlZmZlY3Qs
IG5vZGVNYXRlcmlhbCwgbWVzaCkgeworICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kQm9uZXNQYXJhbWV0ZXJz
KG1lc2gsIGVmZmVjdCk7CisgICAgfTsKKyAgICBCb25lc0Jsb2NrLnByb3RvdHlwZS5wcmVwYXJl
RGVmaW5lcyA9IGZ1bmN0aW9uIChtZXNoLCBub2RlTWF0ZXJpYWwsIGRlZmluZXMpIHsKKyAgICAg
ICAgaWYgKCFkZWZpbmVzLl9hcmVBdHRyaWJ1dGVzRGlydHkpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0ZvckJvbmVzKG1lc2gs
IGRlZmluZXMpOworICAgIH07CisgICAgQm9uZXNCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sg
PSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9j
ay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIGNvbXBpbGF0aW9u
IGZhbGxiYWNrcworICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmJsb2Nrc1dpdGhGYWxsYmFja3Mu
cHVzaCh0aGlzKTsKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIGJpbmRpbmcKKyAgICAgICAgc3Rh
dGUuc2hhcmVkRGF0YS5iaW5kYWJsZUJsb2Nrcy5wdXNoKHRoaXMpOworICAgICAgICAvLyBSZWdp
c3RlciBmb3IgZGVmaW5lcworICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmJsb2Nrc1dpdGhEZWZp
bmVzLnB1c2godGhpcyk7CisgICAgICAgIC8vIFJlZ2lzdGVyIGludGVybmFsIHVuaWZvcm1zIGFu
ZCBzYW1wbGVycworICAgICAgICBzdGF0ZS51bmlmb3Jtcy5wdXNoKCJib25lVGV4dHVyZVdpZHRo
Iik7CisgICAgICAgIHN0YXRlLnVuaWZvcm1zLnB1c2goIm1Cb25lcyIpOworICAgICAgICBzdGF0
ZS5zYW1wbGVycy5wdXNoKCJib25lU2FtcGxlciIpOworICAgICAgICAvLyBFbWl0IGNvZGUKKyAg
ICAgICAgdmFyIGNvbW1lbnRzID0gIi8vIiArIHRoaXMubmFtZTsKKyAgICAgICAgc3RhdGUuX2Vt
aXRGdW5jdGlvbkZyb21JbmNsdWRlKCJib25lc0RlY2xhcmF0aW9uIiwgY29tbWVudHMsIHsKKyAg
ICAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZXM6IHRydWUsCisgICAgICAgICAgICByZW1vdmVVbmlm
b3JtczogZmFsc2UsCisgICAgICAgICAgICByZW1vdmVWYXJ5aW5nczogdHJ1ZSwKKyAgICAgICAg
ICAgIHJlbW92ZUlmRGVmOiBmYWxzZQorICAgICAgICB9KTsKKyAgICAgICAgdmFyIGluZmx1ZW5j
ZVZhcmlhYmxlbmFtZSA9IHN0YXRlLl9nZXRGcmVlVmFyaWFibGVOYW1lKCJpbmZsdWVuY2UiKTsK
KyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gc3RhdGUuX2VtaXRDb2RlRnJvbUlu
Y2x1ZGUoImJvbmVzVmVydGV4IiwgY29tbWVudHMsIHsKKyAgICAgICAgICAgIHJlcGxhY2VTdHJp
bmdzOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzZWFyY2g6IC9m
aW5hbFdvcmxkPWZpbmFsV29ybGRcKmluZmx1ZW5jZTsvLAorICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlOiAiIgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBzZWFyY2g6IC9pbmZsdWVuY2UvZ20sCisgICAgICAgICAgICAgICAgICAg
IHJlcGxhY2U6IGluZmx1ZW5jZVZhcmlhYmxlbmFtZQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfSk7CisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRz
WzBdOworICAgICAgICB2YXIgd29ybGRJbnB1dCA9IHRoaXMud29ybGQ7CisgICAgICAgIHN0YXRl
LmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjaWYgTlVNX0JPTkVfSU5GTFVFTkNFUlM+MFxyXG4iOwor
ICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91
dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgd29ybGRJbnB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1l
ICsgIiAqICIgKyBpbmZsdWVuY2VWYXJpYWJsZW5hbWUgKyAiO1xyXG4iKTsKKyAgICAgICAgc3Rh
dGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNlbHNlXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBp
bGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9
ICIgKyB3b3JsZElucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiO1xyXG4iKTsKKyAgICAg
ICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNlbmRpZlxyXG4iOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBCb25lc0Jsb2NrOworfShfbm9kZU1hdGVyaWFs
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkp
OworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siX1R5cGVT
dG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5Cb25lc0Jsb2NrIl0gPSBCb25lc0Jsb2Nr
OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvVmVydGV4
L2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvVmVydGV4L2luZGV4LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFZlcnRleE91dHB1dEJsb2NrLCBCb25lc0Jsb2NrLCBJ
bnN0YW5jZXNCbG9jaywgTW9ycGhUYXJnZXRzQmxvY2ssIExpZ2h0SW5mb3JtYXRpb25CbG9jayAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZlcnRleE91dHB1
dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL3ZlcnRleE91dHB1dEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9WZXJ0
ZXgvdmVydGV4T3V0cHV0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmVydGV4T3V0cHV0
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF92ZXJ0ZXhPdXRwdXRCbG9ja19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZXJ0ZXhPdXRwdXRCbG9jayJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9ib25lc0Jsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2JvbmVzQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05v
ZGUvQmxvY2tzL1ZlcnRleC9ib25lc0Jsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvbmVz
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ib25lc0Jsb2NrX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkJvbmVzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfaW5zdGFuY2VzQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vaW5zdGFuY2VzQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxv
Y2tzL1ZlcnRleC9pbnN0YW5jZXNCbG9jay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbnN0YW5j
ZXNCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2luc3RhbmNlc0Jsb2NrX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIkluc3RhbmNlc0Jsb2NrIl07IH0pOworCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX21vcnBoVGFyZ2V0c0Jsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21vcnBoVGFyZ2V0c0Jsb2NrICovICIuL01h
dGVyaWFscy9Ob2RlL0Jsb2Nrcy9WZXJ0ZXgvbW9ycGhUYXJnZXRzQmxvY2sudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTW9ycGhUYXJnZXRzQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tb3Jw
aFRhcmdldHNCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNb3JwaFRhcmdldHNC
bG9jayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saWdodEluZm9ybWF0aW9u
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vbGlnaHRJbmZvcm1hdGlvbkJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9W
ZXJ0ZXgvbGlnaHRJbmZvcm1hdGlvbkJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxpZ2h0
SW5mb3JtYXRpb25CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2xpZ2h0SW5mb3JtYXRpb25C
bG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJMaWdodEluZm9ybWF0aW9uQmxvY2si
XTsgfSk7CisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9O
b2RlL0Jsb2Nrcy9WZXJ0ZXgvaW5zdGFuY2VzQmxvY2sudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01h
dGVyaWFscy9Ob2RlL0Jsb2Nrcy9WZXJ0ZXgvaW5zdGFuY2VzQmxvY2sudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogSW5zdGFuY2VzQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiSW5zdGFuY2VzQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIElu
c3RhbmNlc0Jsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8g
Ii4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01h
dGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01h
dGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9u
b2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFs
U3lzdGVtVmFsdWVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0lucHV0X2lucHV0
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL0lucHV0L2lucHV0QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL0lucHV0
L2lucHV0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3Rv
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisK
KworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBhZGQgc3VwcG9ydCBmb3IgaW5zdGFu
Y2VzCisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vf
aW5zdGFuY2VzCisgKi8KK3ZhciBJbnN0YW5jZXNCbG9jayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShJbnN0YW5jZXNCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IEluc3RhbmNlc0Jsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
YmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIEluc3RhbmNlc0Jsb2NrKG5hbWUpIHsK
KyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiXS5WZXJ0ZXgpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5w
dXQoIndvcmxkMCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXMiXS5WZWN0b3I0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgid29ybGQxIiwg
X25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3Rv
cjQpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ3b3JsZDIiLCBfbm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJO
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yNCk7CisgICAgICAg
IF90aGlzLnJlZ2lzdGVySW5wdXQoIndvcmxkMyIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0
ZXJJbnB1dCgid29ybGQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzIl0uTWF0cml4LCB0cnVlKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQo
Im91dHB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXMiXS5NYXRyaXgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBjbGFz
cyBuYW1lCisgICAgICovCisgICAgSW5zdGFuY2VzQmxvY2sucHJvdG90eXBlLmdldENsYXNzTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJJbnN0YW5jZXNCbG9jayI7CisgICAg
fTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5zdGFuY2VzQmxvY2sucHJvdG90eXBlLCAi
d29ybGQwIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZmlyc3Qgd29ybGQg
cm93IGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5zdGFuY2VzQmxvY2sucHJvdG90eXBlLCAi
d29ybGQxIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgc2Vjb25kIHdvcmxk
IHJvdyBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEluc3RhbmNlc0Jsb2NrLnByb3RvdHlwZSwg
IndvcmxkMiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHRoaXJkIHdvcmxk
IHJvdyBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1syXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEluc3RhbmNlc0Jsb2NrLnByb3RvdHlwZSwg
IndvcmxkMyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGZvcnRoIHdvcmxk
IHJvdyBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1szXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEluc3RhbmNlc0Jsb2NrLnByb3RvdHlwZSwg
IndvcmxkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQgaW5wdXQg
Y29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbNF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShJbnN0YW5jZXNCbG9jay5wcm90b3R5cGUsICJvdXRwdXQiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBvdXRwdXQgY29tcG9uZW50CisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBJbnN0YW5jZXNCbG9jay5w
cm90b3R5cGUuYXV0b0NvbmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCkgeworICAgICAgICBp
ZiAoIXRoaXMud29ybGQwLmNvbm5lY3RlZFBvaW50KSB7CisgICAgICAgICAgICB2YXIgd29ybGQw
SW5wdXQgPSBtYXRlcmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsg
cmV0dXJuIGIuaXNBdHRyaWJ1dGUgJiYgYi5uYW1lID09PSAid29ybGQwIjsgfSk7CisgICAgICAg
ICAgICBpZiAoIXdvcmxkMElucHV0KSB7CisgICAgICAgICAgICAgICAgd29ybGQwSW5wdXQgPSBu
ZXcgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW5wdXRC
bG9jayJdKCJ3b3JsZDAiKTsKKyAgICAgICAgICAgICAgICB3b3JsZDBJbnB1dC5zZXRBc0F0dHJp
YnV0ZSgid29ybGQwIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JsZDBJbnB1dC5v
dXRwdXQuY29ubmVjdFRvKHRoaXMud29ybGQwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRo
aXMud29ybGQxLmNvbm5lY3RlZFBvaW50KSB7CisgICAgICAgICAgICB2YXIgd29ybGQxSW5wdXQg
PSBtYXRlcmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJu
IGIuaXNBdHRyaWJ1dGUgJiYgYi5uYW1lID09PSAid29ybGQxIjsgfSk7CisgICAgICAgICAgICBp
ZiAoIXdvcmxkMUlucHV0KSB7CisgICAgICAgICAgICAgICAgd29ybGQxSW5wdXQgPSBuZXcgX0lu
cHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW5wdXRCbG9jayJd
KCJ3b3JsZDEiKTsKKyAgICAgICAgICAgICAgICB3b3JsZDFJbnB1dC5zZXRBc0F0dHJpYnV0ZSgi
d29ybGQxIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JsZDFJbnB1dC5vdXRwdXQu
Y29ubmVjdFRvKHRoaXMud29ybGQxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMud29y
bGQyLmNvbm5lY3RlZFBvaW50KSB7CisgICAgICAgICAgICB2YXIgd29ybGQySW5wdXQgPSBtYXRl
cmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuaXNB
dHRyaWJ1dGUgJiYgYi5uYW1lID09PSAid29ybGQyIjsgfSk7CisgICAgICAgICAgICBpZiAoIXdv
cmxkMklucHV0KSB7CisgICAgICAgICAgICAgICAgd29ybGQySW5wdXQgPSBuZXcgX0lucHV0X2lu
cHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW5wdXRCbG9jayJdKCJ3b3Js
ZDIiKTsKKyAgICAgICAgICAgICAgICB3b3JsZDJJbnB1dC5zZXRBc0F0dHJpYnV0ZSgid29ybGQy
Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JsZDJJbnB1dC5vdXRwdXQuY29ubmVj
dFRvKHRoaXMud29ybGQyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMud29ybGQzLmNv
bm5lY3RlZFBvaW50KSB7CisgICAgICAgICAgICB2YXIgd29ybGQzSW5wdXQgPSBtYXRlcmlhbC5n
ZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuaXNBdHRyaWJ1
dGUgJiYgYi5uYW1lID09PSAid29ybGQzIjsgfSk7CisgICAgICAgICAgICBpZiAoIXdvcmxkM0lu
cHV0KSB7CisgICAgICAgICAgICAgICAgd29ybGQzSW5wdXQgPSBuZXcgX0lucHV0X2lucHV0Qmxv
Y2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siSW5wdXRCbG9jayJdKCJ3b3JsZDMiKTsK
KyAgICAgICAgICAgICAgICB3b3JsZDNJbnB1dC5zZXRBc0F0dHJpYnV0ZSgid29ybGQzIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JsZDNJbnB1dC5vdXRwdXQuY29ubmVjdFRvKHRo
aXMud29ybGQzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMud29ybGQuY29ubmVjdGVk
UG9pbnQpIHsKKyAgICAgICAgICAgIHZhciB3b3JsZElucHV0ID0gbWF0ZXJpYWwuZ2V0SW5wdXRC
bG9ja0J5UHJlZGljYXRlKGZ1bmN0aW9uIChiKSB7IHJldHVybiBiLmlzQXR0cmlidXRlICYmIGIu
bmFtZSA9PT0gIndvcmxkIjsgfSk7CisgICAgICAgICAgICBpZiAoIXdvcmxkSW5wdXQpIHsKKyAg
ICAgICAgICAgICAgICB3b3JsZElucHV0ID0gbmV3IF9JbnB1dF9pbnB1dEJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIklucHV0QmxvY2siXSgid29ybGQiKTsKKyAgICAgICAgICAg
ICAgICB3b3JsZElucHV0LnNldEFzU3lzdGVtVmFsdWUoX25vZGVNYXRlcmlhbFN5c3RlbVZhbHVl
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMi
XS5Xb3JsZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JsZElucHV0Lm91dHB1dC5j
b25uZWN0VG8odGhpcy53b3JsZCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy53b3JsZC5kZWZp
bmUgPSAiIUlOU1RBTkNFUyI7CisgICAgfTsKKyAgICBJbnN0YW5jZXNCbG9jay5wcm90b3R5cGUu
cHJlcGFyZURlZmluZXMgPSBmdW5jdGlvbiAobWVzaCwgbm9kZU1hdGVyaWFsLCBkZWZpbmVzLCB1
c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgaWYgKHVzZUluc3RhbmNlcyA9PT0gdm9pZCAwKSB7IHVz
ZUluc3RhbmNlcyA9IGZhbHNlOyB9CisgICAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIGlmIChkZWZpbmVzWyJJTlNUQU5DRVMiXSAhPT0gdXNlSW5zdGFuY2VzKSB7CisgICAgICAg
ICAgICBkZWZpbmVzLnNldFZhbHVlKCJJTlNUQU5DRVMiLCB1c2VJbnN0YW5jZXMpOworICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoYW5nZWQpIHsK
KyAgICAgICAgICAgIGRlZmluZXMubWFya0FzVW5wcm9jZXNzZWQoKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgSW5zdGFuY2VzQmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24g
KHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlz
LCBzdGF0ZSk7CisgICAgICAgIC8vIFJlZ2lzdGVyIGZvciBkZWZpbmVzCisgICAgICAgIHN0YXRl
LnNoYXJlZERhdGEuYmxvY2tzV2l0aERlZmluZXMucHVzaCh0aGlzKTsKKyAgICAgICAgLy8gRW1p
dCBjb2RlCisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB2
YXIgd29ybGQwID0gdGhpcy53b3JsZDA7CisgICAgICAgIHZhciB3b3JsZDEgPSB0aGlzLndvcmxk
MTsKKyAgICAgICAgdmFyIHdvcmxkMiA9IHRoaXMud29ybGQyOworICAgICAgICB2YXIgd29ybGQz
ID0gdGhpcy53b3JsZDM7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjaWZk
ZWYgSU5TVEFOQ0VTXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRo
aXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9IG1hdDQoIiArIHdvcmxkMC5h
c3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiwgIiArIHdvcmxkMS5hc3NvY2lhdGVkVmFyaWFibGVO
YW1lICsgIiwgIiArIHdvcmxkMi5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiwgIiArIHdvcmxk
My5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIik7XHJcbiIpOworICAgICAgICBzdGF0ZS5jb21w
aWxhdGlvblN0cmluZyArPSAiI2Vsc2VcclxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25T
dHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0YXRlKSArICgiID0gIiArIHRo
aXMud29ybGQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiIpOworICAgICAgICBzdGF0
ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2VuZGlmXHJcbiI7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgcmV0dXJuIEluc3RhbmNlc0Jsb2NrOworfShfbm9kZU1hdGVyaWFsQmxv
Y2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkpOwor
CitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siX1R5cGVTdG9y
ZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5JbnN0YW5jZXNCbG9jayJdID0gSW5zdGFuY2Vz
QmxvY2s7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9W
ZXJ0ZXgvbGlnaHRJbmZvcm1hdGlvbkJsb2NrLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWF0ZXJpYWxzL05vZGUvQmxvY2tzL1ZlcnRleC9saWdodEluZm9ybWF0aW9uQmxvY2sudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IExpZ2h0SW5mb3JtYXRpb25CbG9j
ayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaWdodEluZm9ybWF0aW9u
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIExpZ2h0SW5mb3JtYXRpb25CbG9jazsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlh
bEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0
ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFs
QmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxz
L05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNj
L3R5cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9MaWdodHNfcG9pbnRM
aWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vLi4vLi4vTGlnaHRzL3BvaW50TGlnaHQgKi8gIi4vTGlnaHRzL3BvaW50TGlnaHQu
dHMiKTsKKworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBnZXQgZGF0YSBpbmZvcm1h
dGlvbiBmcm9tIGEgbGlnaHQKKyAqLwordmFyIExpZ2h0SW5mb3JtYXRpb25CbG9jayA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShMaWdodEluZm9ybWF0aW9uQmxvY2ssIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBMaWdodEluZm9ybWF0aW9uQmxvY2sKKyAg
ICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBibG9jayBuYW1lCisgICAgICovCisgICAgZnVu
Y3Rpb24gTGlnaHRJbmZvcm1hdGlvbkJsb2NrKG5hbWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
X3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXgp
IHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoIndvcmxkUG9zaXRpb24iLCBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9y
NCwgZmFsc2UsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4KTsKKyAgICAgICAgX3Ro
aXMucmVnaXN0ZXJPdXRwdXQoImRpcmVjdGlvbiIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IzKTsKKyAgICAgICAgX3RoaXMucmVnaXN0
ZXJPdXRwdXQoImNvbG9yIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlcyJdLkNvbG9yMyk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAg
LyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMg
dGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBMaWdodEluZm9ybWF0aW9uQmxvY2sucHJvdG90
eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJMaWdodElu
Zm9ybWF0aW9uQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExpZ2h0
SW5mb3JtYXRpb25CbG9jay5wcm90b3R5cGUsICJ3b3JsZFBvc2l0aW9uIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyB0aGUgd29ybGQgcG9zaXRpb24gaW5wdXQgY29tcG9uZW50Cisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShMaWdodEluZm9ybWF0aW9uQmxvY2sucHJvdG90eXBlLCAiZGlyZWN0aW9uIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZGlyZWN0aW9uIG91dHB1dCBjb21wb25l
bnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShMaWdodEluZm9ybWF0aW9uQmxvY2sucHJvdG90eXBlLCAiY29sb3IiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBkaXJlY3Rpb24gb3V0cHV0IGNvbXBv
bmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fb3V0cHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgTGlnaHRJ
bmZvcm1hdGlvbkJsb2NrLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGVmZmVjdCwgbm9kZU1h
dGVyaWFsLCBtZXNoKSB7CisgICAgICAgIGlmICghbWVzaCkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5saWdodCB8fCAhdGhpcy5saWdodC5pc0Vu
YWJsZWQpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDModGhpcy5fbGlnaHREYXRhRGVm
aW5lTmFtZSwgMCwgMCwgMCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQzKHRoaXMuX2xp
Z2h0Q29sb3JEZWZpbmVOYW1lLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLmxpZ2h0LnRyYW5zZmVyVG9Ob2RlTWF0ZXJpYWxFZmZlY3QoZWZm
ZWN0LCB0aGlzLl9saWdodERhdGFEZWZpbmVOYW1lKTsKKyAgICAgICAgZWZmZWN0LnNldENvbG9y
Myh0aGlzLl9saWdodENvbG9yRGVmaW5lTmFtZSwgdGhpcy5saWdodC5kaWZmdXNlKTsKKyAgICB9
OworICAgIExpZ2h0SW5mb3JtYXRpb25CbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5j
dGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxs
KHRoaXMsIHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc2hhcmVkRGF0YS5iaW5kYWJsZUJsb2Nrcy5w
dXNoKHRoaXMpOworICAgICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5kaXJlY3Rpb247CisgICAg
ICAgIHZhciBjb2xvciA9IHRoaXMuY29sb3I7CisgICAgICAgIGlmICghdGhpcy5saWdodCkgewor
ICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1
dChkaXJlY3Rpb24sIHN0YXRlKSArICIgPSB2ZWMzKDAuKTtcclxuIjsKKyAgICAgICAgICAgIHN0
YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQoY29sb3IsIHN0YXRl
KSArICIgPSB2ZWMzKDAuKTtcclxuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHRoaXMuX2xpZ2h0RGF0YURlZmluZU5hbWUgPSBzdGF0ZS5fZ2V0RnJlZURlZmluZU5h
bWUoImxpZ2h0RGF0YSIpOworICAgICAgICAgICAgc3RhdGUuX2VtaXRVbmlmb3JtRnJvbVN0cmlu
Zyh0aGlzLl9saWdodERhdGFEZWZpbmVOYW1lLCAidmVjMyIpOworICAgICAgICAgICAgdGhpcy5f
bGlnaHRDb2xvckRlZmluZU5hbWUgPSBzdGF0ZS5fZ2V0RnJlZURlZmluZU5hbWUoImxpZ2h0Q29s
b3IiKTsKKyAgICAgICAgICAgIHN0YXRlLl9lbWl0VW5pZm9ybUZyb21TdHJpbmcodGhpcy5fbGln
aHRDb2xvckRlZmluZU5hbWUsICJ2ZWMzIik7CisgICAgICAgICAgICBpZiAodGhpcy5saWdodCBp
bnN0YW5jZW9mIF9MaWdodHNfcG9pbnRMaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJQb2ludExpZ2h0Il0pIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmlu
ZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KGRpcmVjdGlvbiwgc3RhdGUpICsgKCIgPSBub3JtYWxp
emUoIiArIHRoaXMuX2xpZ2h0RGF0YURlZmluZU5hbWUgKyAiIC0gIiArIHRoaXMud29ybGRQb3Np
dGlvbi5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi54eXopO1xyXG4iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9u
U3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQoZGlyZWN0aW9uLCBzdGF0ZSkgKyAoIiA9ICIg
KyB0aGlzLl9saWdodERhdGFEZWZpbmVOYW1lICsgIjtcclxuIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0
KGNvbG9yLCBzdGF0ZSkgKyAoIiA9ICIgKyB0aGlzLl9saWdodENvbG9yRGVmaW5lTmFtZSArICI7
XHJcbiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgTGln
aHRJbmZvcm1hdGlvbkJsb2NrLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX3N1cGVyLnByb3RvdHlwZS5zZXJpYWxp
emUuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMubGlnaHQpIHsKKyAgICAgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QubGlnaHRJZCA9IHRoaXMubGlnaHQuaWQ7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICBMaWdodEluZm9y
bWF0aW9uQmxvY2sucHJvdG90eXBlLl9kZXNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0
aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9k
ZXNlcmlhbGl6ZS5jYWxsKHRoaXMsIHNlcmlhbGl6YXRpb25PYmplY3QsIHNjZW5lLCByb290VXJs
KTsKKyAgICAgICAgaWYgKHNlcmlhbGl6YXRpb25PYmplY3QubGlnaHRJZCkgeworICAgICAgICAg
ICAgdGhpcy5saWdodCA9IHNjZW5lLmdldExpZ2h0QnlJRChzZXJpYWxpemF0aW9uT2JqZWN0Lmxp
Z2h0SWQpOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gTGlnaHRJbmZvcm1hdGlvbkJs
b2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
Tm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5MaWdo
dEluZm9ybWF0aW9uQmxvY2siXSA9IExpZ2h0SW5mb3JtYXRpb25CbG9jazsKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL1ZlcnRleC9tb3JwaFRhcmdldHNC
bG9jay50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL1ZlcnRl
eC9tb3JwaFRhcmdldHNCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBNb3JwaFRhcmdldHNCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJNb3JwaFRhcmdldHNCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTW9ycGhUYXJnZXRzQmxv
Y2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9u
b2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05v
ZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzICovICIu
L01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vbWF0ZXJpYWxIZWxwZXIgKi8g
Ii4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uLy4uLy4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1
ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9JbnB1dF9pbnB1dEJsb2NrX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9J
bnB1dC9pbnB1dEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9JbnB1dC9pbnB1dEJs
b2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8u
Li8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisK
KworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBhZGQgbW9ycGggdGFyZ2V0cyBzdXBwb3J0IHRv
IHZlcnRleCBzaGFkZXIKKyAqLwordmFyIE1vcnBoVGFyZ2V0c0Jsb2NrID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZXh0ZW5kcyJdKE1vcnBoVGFyZ2V0c0Jsb2NrLCBfc3VwZXIpOworICAgIC8qKgor
ICAgICAqIENyZWF0ZSBhIG5ldyBNb3JwaFRhcmdldHNCbG9jaworICAgICAqIEBwYXJhbSBuYW1l
IGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBNb3JwaFRhcmdl
dHNCbG9jayhuYW1lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5h
bWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4KSB8fCB0aGlzOworICAgICAgICBf
dGhpcy5fcmVwZWF0ZWJsZUNvbnRlbnRHZW5lcmF0ZWQgPSAwOworICAgICAgICBfdGhpcy5yZWdp
c3RlcklucHV0KCJwb3NpdGlvbiIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMiXS5WZWN0b3IzKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgi
bm9ybWFsIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLlZlY3RvcjMpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ0YW5nZW50IiwgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjMp
OworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ1diIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IyKTsKKyAgICAgICAgX3RoaXMu
cmVnaXN0ZXJPdXRwdXQoInBvc2l0aW9uT3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjMpOworICAgICAgICBfdGhpcy5yZWdp
c3Rlck91dHB1dCgibm9ybWFsT3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjMpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91
dHB1dCgidGFuZ2VudE91dHB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMiXS5WZWN0b3IzKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQo
InV2T3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlcyJdLlZlY3RvcjIpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgor
ICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBj
bGFzcyBuYW1lCisgICAgICovCisgICAgTW9ycGhUYXJnZXRzQmxvY2sucHJvdG90eXBlLmdldENs
YXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJNb3JwaFRhcmdldHNCbG9j
ayI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRzQmxvY2su
cHJvdG90eXBlLCAicG9zaXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBwb3NpdGlvbiBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1swXTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vcnBoVGFyZ2V0c0Jsb2NrLnBy
b3RvdHlwZSwgIm5vcm1hbCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG5v
cm1hbCBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vcnBoVGFyZ2V0c0Jsb2NrLnByb3RvdHlw
ZSwgInRhbmdlbnQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB0YW5nZW50
IGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzJdOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRzQmxvY2sucHJvdG90eXBlLCAi
dXYiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB0YW5nZW50IGlucHV0IGNv
bXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzNdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRzQmxvY2sucHJvdG90eXBlLCAicG9zaXRpb25P
dXRwdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBwb3NpdGlvbiBvdXRw
dXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRzQmxvY2sucHJvdG90eXBlLCAibm9y
bWFsT3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbm9ybWFsIG91
dHB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3JwaFRhcmdldHNCbG9jay5wcm90b3R5cGUsICJ0
YW5nZW50T3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdGFuZ2Vu
dCBvdXRwdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzJdOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRzQmxvY2sucHJvdG90eXBl
LCAidXZPdXRwdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB0YW5nZW50
IG91dHB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbM107CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE1vcnBoVGFyZ2V0c0Jsb2NrLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24g
KHN0YXRlKSB7CisgICAgICAgIHN0YXRlLl9leGNsdWRlVmFyaWFibGVOYW1lKCJtb3JwaFRhcmdl
dEluZmx1ZW5jZXMiKTsKKyAgICB9OworICAgIE1vcnBoVGFyZ2V0c0Jsb2NrLnByb3RvdHlwZS5h
dXRvQ29uZmlndXJlID0gZnVuY3Rpb24gKG1hdGVyaWFsKSB7CisgICAgICAgIGlmICghdGhpcy5w
b3NpdGlvbi5pc0Nvbm5lY3RlZCkgeworICAgICAgICAgICAgdmFyIHBvc2l0aW9uSW5wdXQgPSBt
YXRlcmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIu
aXNBdHRyaWJ1dGUgJiYgYi5uYW1lID09PSAicG9zaXRpb24iOyB9KTsKKyAgICAgICAgICAgIGlm
ICghcG9zaXRpb25JbnB1dCkgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5wdXQgPSBuZXcg
X0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5wdXRCbG9j
ayJdKCJwb3NpdGlvbiIpOworICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5wdXQuc2V0QXNBdHRy
aWJ1dGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvc2l0aW9uSW5wdXQub3V0cHV0
LmNvbm5lY3RUbyh0aGlzLnBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMu
bm9ybWFsLmlzQ29ubmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgbm9ybWFsSW5wdXQgPSBtYXRl
cmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuaXNB
dHRyaWJ1dGUgJiYgYi5uYW1lID09PSAibm9ybWFsIjsgfSk7CisgICAgICAgICAgICBpZiAoIW5v
cm1hbElucHV0KSB7CisgICAgICAgICAgICAgICAgbm9ybWFsSW5wdXQgPSBuZXcgX0lucHV0X2lu
cHV0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5wdXRCbG9jayJdKCJub3Jt
YWwiKTsKKyAgICAgICAgICAgICAgICBub3JtYWxJbnB1dC5zZXRBc0F0dHJpYnV0ZSgibm9ybWFs
Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub3JtYWxJbnB1dC5vdXRwdXQuY29ubmVj
dFRvKHRoaXMubm9ybWFsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMudGFuZ2VudC5p
c0Nvbm5lY3RlZCkgeworICAgICAgICAgICAgdmFyIHRhbmdlbnRJbnB1dCA9IG1hdGVyaWFsLmdl
dElucHV0QmxvY2tCeVByZWRpY2F0ZShmdW5jdGlvbiAoYikgeyByZXR1cm4gYi5pc0F0dHJpYnV0
ZSAmJiBiLm5hbWUgPT09ICJ0YW5nZW50IjsgfSk7CisgICAgICAgICAgICBpZiAoIXRhbmdlbnRJ
bnB1dCkgeworICAgICAgICAgICAgICAgIHRhbmdlbnRJbnB1dCA9IG5ldyBfSW5wdXRfaW5wdXRC
bG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJJbnB1dEJsb2NrIl0oInRhbmdlbnQi
KTsKKyAgICAgICAgICAgICAgICB0YW5nZW50SW5wdXQuc2V0QXNBdHRyaWJ1dGUoInRhbmdlbnQi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhbmdlbnRJbnB1dC5vdXRwdXQuY29ubmVj
dFRvKHRoaXMudGFuZ2VudCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnV2LmlzQ29u
bmVjdGVkKSB7CisgICAgICAgICAgICB2YXIgdXZJbnB1dCA9IG1hdGVyaWFsLmdldElucHV0Qmxv
Y2tCeVByZWRpY2F0ZShmdW5jdGlvbiAoYikgeyByZXR1cm4gYi5pc0F0dHJpYnV0ZSAmJiBiLm5h
bWUgPT09ICJ1diI7IH0pOworICAgICAgICAgICAgaWYgKCF1dklucHV0KSB7CisgICAgICAgICAg
ICAgICAgdXZJbnB1dCA9IG5ldyBfSW5wdXRfaW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJJbnB1dEJsb2NrIl0oInV2Iik7CisgICAgICAgICAgICAgICAgdXZJbnB1dC5z
ZXRBc0F0dHJpYnV0ZSgidXYiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHV2SW5wdXQu
b3V0cHV0LmNvbm5lY3RUbyh0aGlzLnV2KTsKKyAgICAgICAgfQorICAgIH07CisgICAgTW9ycGhU
YXJnZXRzQmxvY2sucHJvdG90eXBlLnByZXBhcmVEZWZpbmVzID0gZnVuY3Rpb24gKG1lc2gsIG5v
ZGVNYXRlcmlhbCwgZGVmaW5lcykgeworICAgICAgICBpZiAoIWRlZmluZXMuX2FyZUF0dHJpYnV0
ZXNEaXJ0eSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIF9tYXRl
cmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRlcmlhbEhlbHBlciJd
LlByZXBhcmVEZWZpbmVzRm9yTW9ycGhUYXJnZXRzKG1lc2gsIGRlZmluZXMpOworICAgIH07Cisg
ICAgTW9ycGhUYXJnZXRzQmxvY2sucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZWZmZWN0LCBu
b2RlTWF0ZXJpYWwsIG1lc2gpIHsKKyAgICAgICAgaWYgKG1lc2ggJiYgdGhpcy5fcmVwZWF0ZWJs
ZUNvbnRlbnRHZW5lcmF0ZWQpIHsKKyAgICAgICAgICAgIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRNb3JwaFRhcmdldFBh
cmFtZXRlcnMobWVzaCwgZWZmZWN0KTsKKyAgICAgICAgfQorICAgIH07CisgICAgTW9ycGhUYXJn
ZXRzQmxvY2sucHJvdG90eXBlLnJlcGxhY2VSZXBlYXRhYmxlQ29udGVudCA9IGZ1bmN0aW9uICh2
ZXJ0ZXhTaGFkZXJTdGF0ZSwgZnJhZ21lbnRTaGFkZXJTdGF0ZSwgbWVzaCwgZGVmaW5lcykgewor
ICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uOworICAgICAgICB2YXIgbm9ybWFs
ID0gdGhpcy5ub3JtYWw7CisgICAgICAgIHZhciB0YW5nZW50ID0gdGhpcy50YW5nZW50OworICAg
ICAgICB2YXIgdXYgPSB0aGlzLnV2OworICAgICAgICB2YXIgcG9zaXRpb25PdXRwdXQgPSB0aGlz
LnBvc2l0aW9uT3V0cHV0OworICAgICAgICB2YXIgbm9ybWFsT3V0cHV0ID0gdGhpcy5ub3JtYWxP
dXRwdXQ7CisgICAgICAgIHZhciB0YW5nZW50T3V0cHV0ID0gdGhpcy50YW5nZW50T3V0cHV0Owor
ICAgICAgICB2YXIgdXZPdXRwdXQgPSB0aGlzLnV2T3V0cHV0OworICAgICAgICB2YXIgc3RhdGUg
PSB2ZXJ0ZXhTaGFkZXJTdGF0ZTsKKyAgICAgICAgdmFyIHJlcGVhdENvdW50ID0gZGVmaW5lcy5O
VU1fTU9SUEhfSU5GTFVFTkNFUlM7CisgICAgICAgIHRoaXMuX3JlcGVhdGVibGVDb250ZW50R2Vu
ZXJhdGVkID0gcmVwZWF0Q291bnQ7CisgICAgICAgIHZhciBtYW5hZ2VyID0gbWVzaC5tb3JwaFRh
cmdldE1hbmFnZXI7CisgICAgICAgIHZhciBoYXNOb3JtYWxzID0gbWFuYWdlciAmJiBtYW5hZ2Vy
LnN1cHBvcnRzTm9ybWFscyAmJiBkZWZpbmVzWyJOT1JNQUwiXTsKKyAgICAgICAgdmFyIGhhc1Rh
bmdlbnRzID0gbWFuYWdlciAmJiBtYW5hZ2VyLnN1cHBvcnRzVGFuZ2VudHMgJiYgZGVmaW5lc1si
VEFOR0VOVCJdOworICAgICAgICB2YXIgaGFzVVZzID0gbWFuYWdlciAmJiBtYW5hZ2VyLnN1cHBv
cnRzVVZzICYmIGRlZmluZXNbIlVWMSJdOworICAgICAgICB2YXIgaW5qZWN0aW9uQ29kZSA9ICIi
OworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcmVwZWF0Q291bnQ7IGluZGV4
KyspIHsKKyAgICAgICAgICAgIGluamVjdGlvbkNvZGUgKz0gIiNpZmRlZiBNT1JQSFRBUkdFVFNc
clxuIjsKKyAgICAgICAgICAgIGluamVjdGlvbkNvZGUgKz0gcG9zaXRpb25PdXRwdXQuYXNzb2Np
YXRlZFZhcmlhYmxlTmFtZSArICIgKz0gKHBvc2l0aW9uIiArIGluZGV4ICsgIiAtICIgKyBwb3Np
dGlvbi5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIikgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNb
IiArIGluZGV4ICsgIl07XHJcbiI7CisgICAgICAgICAgICBpZiAoaGFzTm9ybWFscykgeworICAg
ICAgICAgICAgICAgIGluamVjdGlvbkNvZGUgKz0gIiNpZmRlZiBNT1JQSFRBUkdFVFNfTk9STUFM
XHJcbiI7CisgICAgICAgICAgICAgICAgaW5qZWN0aW9uQ29kZSArPSBub3JtYWxPdXRwdXQuYXNz
b2NpYXRlZFZhcmlhYmxlTmFtZSArICIgKz0gKG5vcm1hbCIgKyBpbmRleCArICIgLSAiICsgbm9y
bWFsLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1si
ICsgaW5kZXggKyAiXTtcclxuIjsKKyAgICAgICAgICAgICAgICBpbmplY3Rpb25Db2RlICs9ICIj
ZW5kaWZcclxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoYXNUYW5nZW50cykg
eworICAgICAgICAgICAgICAgIGluamVjdGlvbkNvZGUgKz0gIiNpZmRlZiBNT1JQSFRBUkdFVFNf
VEFOR0VOVFxyXG4iOworICAgICAgICAgICAgICAgIGluamVjdGlvbkNvZGUgKz0gdGFuZ2VudE91
dHB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi54eXogKz0gKHRhbmdlbnQiICsgaW5kZXgg
KyAiIC0gIiArIHRhbmdlbnQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIueHl6KSAqIG1vcnBo
VGFyZ2V0SW5mbHVlbmNlc1siICsgaW5kZXggKyAiXTtcclxuIjsKKyAgICAgICAgICAgICAgICBp
bmplY3Rpb25Db2RlICs9ICIjZW5kaWZcclxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChoYXNVVnMpIHsKKyAgICAgICAgICAgICAgICBpbmplY3Rpb25Db2RlICs9ICIjaWZkZWYg
TU9SUEhUQVJHRVRTX1VWXHJcbiI7CisgICAgICAgICAgICAgICAgaW5qZWN0aW9uQ29kZSArPSB1
dk91dHB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi54eXogKz0gKHV2XyIgKyBpbmRleCAr
ICIgLSAiICsgdXYuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIueHl6KSAqIG1vcnBoVGFyZ2V0
SW5mbHVlbmNlc1siICsgaW5kZXggKyAiXTtcclxuIjsKKyAgICAgICAgICAgICAgICBpbmplY3Rp
b25Db2RlICs9ICIjZW5kaWZcclxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluamVj
dGlvbkNvZGUgKz0gIiNlbmRpZlxyXG4iOworICAgICAgICB9CisgICAgICAgIHN0YXRlLmNvbXBp
bGF0aW9uU3RyaW5nID0gc3RhdGUuY29tcGlsYXRpb25TdHJpbmcucmVwbGFjZSh0aGlzLl9yZXBl
YXRhYmxlQ29udGVudEFuY2hvciwgaW5qZWN0aW9uQ29kZSk7CisgICAgICAgIGlmIChyZXBlYXRD
b3VudCA+IDApIHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCByZXBl
YXRDb3VudDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHN0YXRlLmF0dHJpYnV0ZXMucHVz
aChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZm
ZXIiXS5Qb3NpdGlvbktpbmQgKyBpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGhhc05vcm1h
bHMpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuYXR0cmlidXRlcy5wdXNoKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlcnRleEJ1ZmZlciJdLk5vcm1h
bEtpbmQgKyBpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICho
YXNUYW5nZW50cykgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hdHRyaWJ1dGVzLnB1c2go
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVy
Il0uVGFuZ2VudEtpbmQgKyBpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKyAgICBNb3JwaFRhcmdldHNCbG9jay5wcm90b3R5cGUuX2J1
aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5f
YnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIGRl
ZmluZXMKKyAgICAgICAgc3RhdGUuc2hhcmVkRGF0YS5ibG9ja3NXaXRoRGVmaW5lcy5wdXNoKHRo
aXMpOworICAgICAgICAvLyBSZWdpc3RlciBmb3IgYmluZGluZworICAgICAgICBzdGF0ZS5zaGFy
ZWREYXRhLmJpbmRhYmxlQmxvY2tzLnB1c2godGhpcyk7CisgICAgICAgIC8vIFJlZ2lzdGVyIGZv
ciByZXBlYXRhYmxlIGNvbnRlbnQgZ2VuZXJhdGlvbgorICAgICAgICBzdGF0ZS5zaGFyZWREYXRh
LnJlcGVhdGFibGVDb250ZW50QmxvY2tzLnB1c2godGhpcyk7CisgICAgICAgIC8vIEVtaXQgY29k
ZQorICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uOworICAgICAgICB2YXIgbm9y
bWFsID0gdGhpcy5ub3JtYWw7CisgICAgICAgIHZhciB0YW5nZW50ID0gdGhpcy50YW5nZW50Owor
ICAgICAgICB2YXIgdXYgPSB0aGlzLnV2OworICAgICAgICB2YXIgcG9zaXRpb25PdXRwdXQgPSB0
aGlzLnBvc2l0aW9uT3V0cHV0OworICAgICAgICB2YXIgbm9ybWFsT3V0cHV0ID0gdGhpcy5ub3Jt
YWxPdXRwdXQ7CisgICAgICAgIHZhciB0YW5nZW50T3V0cHV0ID0gdGhpcy50YW5nZW50T3V0cHV0
OworICAgICAgICB2YXIgdXZPdXRwdXQgPSB0aGlzLnV2T3V0cHV0OworICAgICAgICB2YXIgY29t
bWVudHMgPSAiLy8iICsgdGhpcy5uYW1lOworICAgICAgICBzdGF0ZS51bmlmb3Jtcy5wdXNoKCJt
b3JwaFRhcmdldEluZmx1ZW5jZXMiKTsKKyAgICAgICAgc3RhdGUuX2VtaXRGdW5jdGlvbkZyb21J
bmNsdWRlKCJtb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbiIsIGNvbW1lbnRzKTsK
KyAgICAgICAgc3RhdGUuX2VtaXRGdW5jdGlvbkZyb21JbmNsdWRlKCJtb3JwaFRhcmdldHNWZXJ0
ZXhEZWNsYXJhdGlvbiIsIGNvbW1lbnRzLCB7CisgICAgICAgICAgICByZXBlYXRLZXk6ICJtYXhT
aW11bHRhbmVvdXNNb3JwaFRhcmdldHMiCisgICAgICAgIH0pOworICAgICAgICBzdGF0ZS5jb21w
aWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KHBvc2l0aW9uT3V0cHV0LCBzdGF0
ZSkgKyAiID0gIiArIHBvc2l0aW9uLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiO1xyXG4iOwor
ICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSAiI2lmZGVmIE5PUk1BTFxyXG4iOwor
ICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG5v
cm1hbE91dHB1dCwgc3RhdGUpICsgIiA9ICIgKyBub3JtYWwuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICI7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjZW5kaWZc
clxuIjsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIiNpZmRlZiBUQU5HRU5U
XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVP
dXRwdXQodGFuZ2VudE91dHB1dCwgc3RhdGUpICsgIiA9ICIgKyB0YW5nZW50LmFzc29jaWF0ZWRW
YXJpYWJsZU5hbWUgKyAiO1xyXG4iOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyAr
PSAiI2VuZGlmXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIjaWZk
ZWYgVVYxXHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2Rl
Y2xhcmVPdXRwdXQodXZPdXRwdXQsIHN0YXRlKSArICIgPSAiICsgdXYuYXNzb2NpYXRlZFZhcmlh
YmxlTmFtZSArICI7XHJcbiI7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICIj
ZW5kaWZcclxuIjsKKyAgICAgICAgLy8gUmVwZWF0YWJsZSBjb250ZW50CisgICAgICAgIHRoaXMu
X3JlcGVhdGFibGVDb250ZW50QW5jaG9yID0gc3RhdGUuX3JlcGVhdGFibGVDb250ZW50QW5jaG9y
OworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9yZXBlYXRhYmxlQ29u
dGVudEFuY2hvcjsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4gTW9y
cGhUYXJnZXRzQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJC
QUJZTE9OLk1vcnBoVGFyZ2V0c0Jsb2NrIl0gPSBNb3JwaFRhcmdldHNCbG9jazsKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL1ZlcnRleC92ZXJ0ZXhPdXRw
dXRCbG9jay50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL1Zl
cnRleC92ZXJ0ZXhPdXRwdXRCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBWZXJ0ZXhPdXRwdXRCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJWZXJ0ZXhPdXRwdXRCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVmVydGV4T3V0cHV0
QmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9k
ZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4vTWF0ZXJpYWxz
L05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzICov
ICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vLi4vTWlzYy90eXBlU3Rv
cmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisvKioKKyAqIEJsb2NrIHVz
ZWQgdG8gb3V0cHV0IHRoZSB2ZXJ0ZXggcG9zaXRpb24KKyAqLwordmFyIFZlcnRleE91dHB1dEJs
b2NrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFZlcnRleE91dHB1dEJsb2NrLCBf
c3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgVmVydGV4T3V0cHV0QmxvY2sK
KyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBibG9jayBuYW1lCisgICAgICovCisgICAg
ZnVuY3Rpb24gVmVydGV4T3V0cHV0QmxvY2sobmFtZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBf
c3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleCwg
dHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgidmVjdG9yIiwgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQp
OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgdGhl
IGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAg
ICovCisgICAgVmVydGV4T3V0cHV0QmxvY2sucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJWZXJ0ZXhPdXRwdXRCbG9jayI7CisgICAgfTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVydGV4T3V0cHV0QmxvY2sucHJvdG90eXBlLCAidmVj
dG9yIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdmVjdG9yIGlucHV0IGNv
bXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBWZXJ0
ZXhPdXRwdXRCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsK
KyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsK
KyAgICAgICAgdmFyIGlucHV0ID0gdGhpcy52ZWN0b3I7CisgICAgICAgIHN0YXRlLmNvbXBpbGF0
aW9uU3RyaW5nICs9ICJnbF9Qb3NpdGlvbiA9ICIgKyBpbnB1dC5hc3NvY2lhdGVkVmFyaWFibGVO
YW1lICsgIjtcclxuIjsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4g
VmVydGV4T3V0cHV0QmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVz
WyJCQUJZTE9OLlZlcnRleE91dHB1dEJsb2NrIl0gPSBWZXJ0ZXhPdXRwdXRCbG9jazsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2FkZEJsb2NrLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9hZGRCbG9jay50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IEFkZEJsb2NrICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFkZEJsb2Nr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBBZGRCbG9jazsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJp
YWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01hdGVyaWFs
cy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8u
Li9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisKKy8q
KgorICogQmxvY2sgdXNlZCB0byBhZGQgMiB2ZWN0b3JzCisgKi8KK3ZhciBBZGRCbG9jayA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShBZGRCbG9jaywgX3N1cGVyKTsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgbmV3IEFkZEJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5l
cyB0aGUgYmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIEFkZEJsb2NrKG5hbWUpIHsK
KyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiXS5OZXV0cmFsKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdpc3Rlcklu
cHV0KCJsZWZ0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlcyJdLkF1dG9EZXRlY3QpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJyaWdodCIs
IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5BdXRv
RGV0ZWN0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoIm91dHB1dCIsIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5CYXNlZE9uSW5wdXQp
OworICAgICAgICBfdGhpcy5fb3V0cHV0c1swXS5fdHlwZUNvbm5lY3Rpb25Tb3VyY2UgPSBfdGhp
cy5faW5wdXRzWzBdOworICAgICAgICBfdGhpcy5fbGlua0Nvbm5lY3Rpb25UeXBlcygwLCAxKTsK
KyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBj
dXJyZW50IGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAq
LworICAgIEFkZEJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiAiQWRkQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KEFkZEJsb2NrLnByb3RvdHlwZSwgImxlZnQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBsZWZ0IG9wZXJhbmQgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNb
MF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBZGRCbG9j
ay5wcm90b3R5cGUsICJyaWdodCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhl
IHJpZ2h0IG9wZXJhbmQgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMV07CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBZGRCbG9jay5wcm90b3R5
cGUsICJvdXRwdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBvdXRwdXQg
Y29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBB
ZGRCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAg
ICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAg
ICAgdmFyIG91dHB1dCA9IHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIHN0YXRlLmNvbXBpbGF0
aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIg
KyB0aGlzLmxlZnQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIgKyAiICsgdGhpcy5yaWdodC5h
c3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIjtcclxuIik7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgcmV0dXJuIEFkZEJsb2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190
eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lz
dGVyZWRUeXBlc1siQkFCWUxPTi5BZGRCbG9jayJdID0gQWRkQmxvY2s7CisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9jbGFtcEJsb2NrLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWF0ZXJpYWxzL05vZGUvQmxvY2tzL2NsYW1wQmxvY2sudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IENsYW1wQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2xhbXBC
bG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ2xhbXBCbG9jazsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2
LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2Rl
TWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01h
dGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2Rl
TWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKwor
CisKKy8qKgorICogQmxvY2sgdXNlZCB0byBjbGFtcCBhIGZsb2F0CisgKi8KK3ZhciBDbGFtcEJs
b2NrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKENsYW1wQmxvY2ssIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBDbGFtcEJsb2NrCisgICAgICogQHBhcmFt
IG5hbWUgZGVmaW5lcyB0aGUgYmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIENsYW1w
QmxvY2sobmFtZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1l
LCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
Ik5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLk5ldXRyYWwpIHx8IHRoaXM7CisgICAgICAgIC8q
KiBHZXRzIG9yIHNldHMgdGhlIG1pbmltdW0gcmFuZ2UgKi8KKyAgICAgICAgX3RoaXMubWluaW11
bSA9IDAuMDsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyB0aGUgbWF4aW11bSByYW5nZSAqLwor
ICAgICAgICBfdGhpcy5tYXhpbXVtID0gMS4wOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0
KCJ2YWx1ZSIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXMiXS5GbG9hdCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQpOwor
ICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1
cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICov
CisgICAgQ2xhbXBCbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gIkNsYW1wQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KENsYW1wQmxvY2sucHJvdG90eXBlLCAidmFsdWUiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sw
XTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENsYW1wQmxv
Y2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgQ2xhbXBCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3Rh
dGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0
YXRlKTsKKyAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIHN0
YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0
ZSkgKyAoIiA9IGNsYW1wKCIgKyB0aGlzLnZhbHVlLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAi
LCAiICsgdGhpcy5fd3JpdGVGbG9hdCh0aGlzLm1pbmltdW0pICsgIiwgIiArIHRoaXMuX3dyaXRl
RmxvYXQodGhpcy5tYXhpbXVtKSArICIpO1xyXG4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICBDbGFtcEJsb2NrLnByb3RvdHlwZS5fZHVtcFByb3BlcnRpZXNDb2RlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgY29kZVN0cmluZyA9IHRoaXMuX2NvZGVWYXJpYWJsZU5h
bWUgKyAiLm1pbmltdW0gPSAiICsgdGhpcy5taW5pbXVtICsgIjtcclxuIjsKKyAgICAgICAgY29k
ZVN0cmluZyArPSB0aGlzLl9jb2RlVmFyaWFibGVOYW1lICsgIi5tYXhpbXVtID0gIiArIHRoaXMu
bWF4aW11bSArICI7XHJcbiI7CisgICAgICAgIHJldHVybiBjb2RlU3RyaW5nOworICAgIH07Cisg
ICAgQ2xhbXBCbG9jay5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9zdXBlci5wcm90b3R5cGUuc2VyaWFsaXplLmNh
bGwodGhpcyk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWluaW11bSA9IHRoaXMubWlu
aW11bTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXhpbXVtID0gdGhpcy5tYXhpbXVt
OworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIENsYW1w
QmxvY2sucHJvdG90eXBlLl9kZXNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2Jq
ZWN0LCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9kZXNlcmlh
bGl6ZS5jYWxsKHRoaXMsIHNlcmlhbGl6YXRpb25PYmplY3QsIHNjZW5lLCByb290VXJsKTsKKyAg
ICAgICAgdGhpcy5taW5pbXVtID0gc2VyaWFsaXphdGlvbk9iamVjdC5taW5pbXVtOworICAgICAg
ICB0aGlzLm1heGltdW0gPSBzZXJpYWxpemF0aW9uT2JqZWN0Lm1heGltdW07CisgICAgfTsKKyAg
ICByZXR1cm4gQ2xhbXBCbG9jazsKK30oX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2NrIl0pKTsKKworX01pc2NfdHlwZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlw
ZXNbIkJBQllMT04uQ2xhbXBCbG9jayJdID0gQ2xhbXBCbG9jazsKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2NvbG9yTWVyZ2VyQmxvY2sudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvY29sb3JNZXJnZXJCbG9jay50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogQ29sb3JNZXJnZXJCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJDb2xvck1lcmdlckJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBDb2xvck1lcmdlckJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNs
aWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrICovICIu
L01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdHlwZVN0
b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKworLyoqCisgKiBCbG9jayB1
c2VkIHRvIGNyZWF0ZSBhIENvbG9yMy80IG91dCBvZiBpbmRpdmlkdWFsIGlucHV0cyAob25lIGZv
ciBlYWNoIGNvbXBvbmVudCkKKyAqLwordmFyIENvbG9yTWVyZ2VyQmxvY2sgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19leHRlbmRzIl0oQ29sb3JNZXJnZXJCbG9jaywgX3N1cGVyKTsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGUgYSBuZXcgQ29sb3JNZXJnZXJCbG9jaworICAgICAqIEBwYXJhbSBuYW1l
IGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDb2xvck1lcmdl
ckJsb2NrKG5hbWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFt
ZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCkgfHwgdGhpczsKKyAgICAgICAg
X3RoaXMucmVnaXN0ZXJJbnB1dCgiciIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCwgdHJ1ZSk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVy
SW5wdXQoImciLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzIl0uRmxvYXQsIHRydWUpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJiIiwgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0LCB0
cnVlKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgiYSIsIF9ub2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCwgdHJ1ZSk7CisgICAgICAg
IF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJyZ2JhIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVy
T3V0cHV0KCJyZ2IiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzIl0uQ29sb3IzKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioK
KyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y2xhc3MgbmFtZQorICAgICAqLworICAgIENvbG9yTWVyZ2VyQmxvY2sucHJvdG90eXBlLmdldENs
YXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJDb2xvck1lcmdlckJsb2Nr
IjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvck1lcmdlckJsb2NrLnBy
b3RvdHlwZSwgInIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByIGNvbXBv
bmVudCAoaW5wdXQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvck1lcmdlckJsb2NrLnByb3RvdHlwZSwgImciLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBnIGNvbXBvbmVudCAoaW5wdXQpCisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9pbnB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShDb2xvck1lcmdlckJsb2NrLnByb3RvdHlwZSwgImIiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHRoZSBiIGNvbXBvbmVudCAoaW5wdXQpCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNb
Ml07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvck1l
cmdlckJsb2NrLnByb3RvdHlwZSwgImEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSBhIGNvbXBvbmVudCAoaW5wdXQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbM107CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvck1lcmdlckJsb2NrLnByb3Rv
dHlwZSwgInJnYmEiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByZ2JhIGNv
bXBvbmVudCAob3V0cHV0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yTWVyZ2VyQmxvY2sucHJvdG90eXBlLCAi
cmdiIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgcmdiIGNvbXBvbmVudCAo
b3V0cHV0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgQ29s
b3JNZXJnZXJCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsK
KyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsK
KyAgICAgICAgdmFyIHJJbnB1dCA9IHRoaXMucjsKKyAgICAgICAgdmFyIGdJbnB1dCA9IHRoaXMu
ZzsKKyAgICAgICAgdmFyIGJJbnB1dCA9IHRoaXMuYjsKKyAgICAgICAgdmFyIGFJbnB1dCA9IHRo
aXMuYTsKKyAgICAgICAgdmFyIGNvbG9yNE91dHB1dCA9IHRoaXMuX291dHB1dHNbMF07CisgICAg
ICAgIHZhciBjb2xvcjNPdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzFdOworICAgICAgICBpZiAoY29s
b3I0T3V0cHV0Lmhhc0VuZHBvaW50cykgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25T
dHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChjb2xvcjRPdXRwdXQsIHN0YXRlKSArICgiID0g
dmVjNCgiICsgKHJJbnB1dC5pc0Nvbm5lY3RlZCA/IHRoaXMuX3dyaXRlVmFyaWFibGUocklucHV0
KSA6ICIwLjAiKSArICIsICIgKyAoZ0lucHV0LmlzQ29ubmVjdGVkID8gdGhpcy5fd3JpdGVWYXJp
YWJsZShnSW5wdXQpIDogIjAuMCIpICsgIiwgIiArIChiSW5wdXQuaXNDb25uZWN0ZWQgPyB0aGlz
Ll93cml0ZVZhcmlhYmxlKGJJbnB1dCkgOiAiMC4wIikgKyAiLCAiICsgKGFJbnB1dC5pc0Nvbm5l
Y3RlZCA/IHRoaXMuX3dyaXRlVmFyaWFibGUoYUlucHV0KSA6ICIwLjAiKSArICIpO1xyXG4iKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb2xvcjNPdXRwdXQuaGFzRW5kcG9pbnRzKSB7
CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0
cHV0KGNvbG9yM091dHB1dCwgc3RhdGUpICsgKCIgPSB2ZWMzKCIgKyAocklucHV0LmlzQ29ubmVj
dGVkID8gdGhpcy5fd3JpdGVWYXJpYWJsZShySW5wdXQpIDogIjAuMCIpICsgIiwgIiArIChnSW5w
dXQuaXNDb25uZWN0ZWQgPyB0aGlzLl93cml0ZVZhcmlhYmxlKGdJbnB1dCkgOiAiMC4wIikgKyAi
LCAiICsgKGJJbnB1dC5pc0Nvbm5lY3RlZCA/IHRoaXMuX3dyaXRlVmFyaWFibGUoYklucHV0KSA6
ICIwLjAiKSArICIpO1xyXG4iKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9OworICAgIHJldHVybiBDb2xvck1lcmdlckJsb2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitf
TWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJd
LlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5Db2xvck1lcmdlckJsb2NrIl0gPSBDb2xvck1lcmdl
ckJsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3Mv
Y29sb3JTcGxpdHRlckJsb2NrLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9j
a3MvY29sb3JTcGxpdHRlckJsb2NrLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENv
bG9yU3BsaXR0ZXJCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJD
b2xvclNwbGl0dGVyQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvbG9yU3BsaXR0ZXJCbG9j
azsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25v
ZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9u
b2RlTWF0ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxz
L05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5
cGVTdG9yZS50cyIpOworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBleHBhbmQgYSBD
b2xvcjMvNCBpbnRvIDQgb3V0cHV0cyAob25lIGZvciBlYWNoIGNvbXBvbmVudCkKKyAqLwordmFy
IENvbG9yU3BsaXR0ZXJCbG9jayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShDb2xv
clNwbGl0dGVyQmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IENv
bG9yU3BsaXR0ZXJCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5h
bWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDb2xvclNwbGl0dGVyQmxvY2sobmFtZSkgeworICAg
ICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2Nr
VGFyZ2V0cyJdLkZyYWdtZW50KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0
KCJyZ2JhIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLkNvbG9yNCwgdHJ1ZSk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoInJnYiAiLCBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3Iz
LCB0cnVlKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoInJnYiIsIF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5Db2xvcjMpOworICAgICAg
ICBfdGhpcy5yZWdpc3Rlck91dHB1dCgiciIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0
cHV0KCJnIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLkZsb2F0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoImIiLCBfbm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQpOworICAgICAg
ICBfdGhpcy5yZWdpc3Rlck91dHB1dCgiYSIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAg
ICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICog
QHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBDb2xvclNwbGl0dGVyQmxvY2su
cHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJD
b2xvclNwbGl0dGVyQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENv
bG9yU3BsaXR0ZXJCbG9jay5wcm90b3R5cGUsICJyZ2JhIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyB0aGUgcmdiYSBjb21wb25lbnQgKGlucHV0KQorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBd
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JTcGxp
dHRlckJsb2NrLnByb3RvdHlwZSwgInJnYkluIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgcmdiIGNvbXBvbmVudCAoaW5wdXQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMV07CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclNwbGl0dGVyQmxv
Y2sucHJvdG90eXBlLCAicmdiT3V0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgcmdiIGNvbXBvbmVudCAob3V0cHV0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yU3BsaXR0ZXJCbG9jay5w
cm90b3R5cGUsICJyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgciBjb21w
b25lbnQgKG91dHB1dCkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclNwbGl0dGVyQmxvY2sucHJvdG90eXBlLCAi
ZyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGcgY29tcG9uZW50IChvdXRw
dXQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9vdXRwdXRzWzJdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoQ29sb3JTcGxpdHRlckJsb2NrLnByb3RvdHlwZSwgImIiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBiIGNvbXBvbmVudCAob3V0cHV0KQorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fb3V0cHV0c1szXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KENvbG9yU3BsaXR0ZXJCbG9jay5wcm90b3R5cGUsICJhIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgYSBjb21wb25lbnQgKG91dHB1dCkKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNb
NF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIENvbG9yU3BsaXR0ZXJCbG9jay5wcm90b3R5cGUu
X2lucHV0UmVuYW1lID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgaWYgKG5hbWUgPT09ICJy
Z2IgIikgeworICAgICAgICAgICAgcmV0dXJuICJyZ2JJbiI7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG5hbWU7CisgICAgfTsKKyAgICBDb2xvclNwbGl0dGVyQmxvY2sucHJvdG90eXBlLl9v
dXRwdXRSZW5hbWUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICBpZiAobmFtZSA9PT0gInJn
YiIpIHsKKyAgICAgICAgICAgIHJldHVybiAicmdiT3V0IjsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbmFtZTsKKyAgICB9OworICAgIENvbG9yU3BsaXR0ZXJCbG9jay5wcm90b3R5cGUuX2J1
aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5f
YnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5y
Z2JhLmlzQ29ubmVjdGVkID8gdGhpcy5yZ2JhIDogdGhpcy5yZ2JJbjsKKyAgICAgICAgaWYgKCFp
bnB1dC5pc0Nvbm5lY3RlZCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHZhciByZ2JPdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB2YXIgck91dHB1
dCA9IHRoaXMuX291dHB1dHNbMV07CisgICAgICAgIHZhciBnT3V0cHV0ID0gdGhpcy5fb3V0cHV0
c1syXTsKKyAgICAgICAgdmFyIGJPdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzNdOworICAgICAgICB2
YXIgYU91dHB1dCA9IHRoaXMuX291dHB1dHNbNF07CisgICAgICAgIGlmIChyZ2JPdXRwdXQuaGFz
RW5kcG9pbnRzKSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlz
Ll9kZWNsYXJlT3V0cHV0KHJnYk91dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgaW5wdXQuYXNzb2Np
YXRlZFZhcmlhYmxlTmFtZSArICIucmdiO1xyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ck91dHB1dC5oYXNFbmRwb2ludHMpIHsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3Ry
aW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQock91dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgaW5w
dXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIucjtcclxuIik7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGdPdXRwdXQuaGFzRW5kcG9pbnRzKSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxh
dGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KGdPdXRwdXQsIHN0YXRlKSArICgiID0g
IiArIGlucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLmc7XHJcbiIpOworICAgICAgICB9
CisgICAgICAgIGlmIChiT3V0cHV0Lmhhc0VuZHBvaW50cykgeworICAgICAgICAgICAgc3RhdGUu
Y29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChiT3V0cHV0LCBzdGF0ZSkg
KyAoIiA9ICIgKyBpbnB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi5iO1xyXG4iKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoYU91dHB1dC5oYXNFbmRwb2ludHMpIHsKKyAgICAgICAgICAg
IHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQoYU91dHB1dCwg
c3RhdGUpICsgKCIgPSAiICsgaW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIuYTtcclxu
Iik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4g
Q29sb3JTcGxpdHRlckJsb2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBl
c1siQkFCWUxPTi5Db2xvclNwbGl0dGVyQmxvY2siXSA9IENvbG9yU3BsaXR0ZXJCbG9jazsKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2Nyb3NzQmxvY2su
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvY3Jvc3NCbG9jay50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogQ3Jvc3NCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJDcm9zc0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDcm9zc0Jsb2NrOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xp
Yi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFs
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlh
bEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRU
eXBlcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2Rl
TWF0ZXJpYWxCbG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlz
Y190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRz
Iik7CisKKworCisKKworLyoqCisgKiBCbG9jayB1c2VkIHRvIGFwcGx5IGEgY3Jvc3MgcHJvZHVj
dCBiZXR3ZWVuIDIgdmVjdG9ycworICovCit2YXIgQ3Jvc3NCbG9jayA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShDcm9zc0Jsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBuZXcgQ3Jvc3NCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJs
b2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDcm9zc0Jsb2NrKG5hbWUpIHsKKyAgICAg
ICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlhbEJsb2Nr
VGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHMiXS5OZXV0cmFsKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJs
ZWZ0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJd
LkF1dG9EZXRlY3QpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJyaWdodCIsIF9ub2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5BdXRvRGV0ZWN0
KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoIm91dHB1dCIsIF9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5CYXNlZE9uSW5wdXQpOworICAg
ICAgICBfdGhpcy5fb3V0cHV0c1swXS5fdHlwZUNvbm5lY3Rpb25Tb3VyY2UgPSBfdGhpcy5faW5w
dXRzWzBdOworICAgICAgICBfdGhpcy5fbGlua0Nvbm5lY3Rpb25UeXBlcygwLCAxKTsKKyAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50
IGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAg
IENyb3NzQmxvY2sucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICJDcm9zc0Jsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShDcm9zc0Jsb2NrLnByb3RvdHlwZSwgImxlZnQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBsZWZ0IG9wZXJhbmQgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNb
MF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDcm9zc0Js
b2NrLnByb3RvdHlwZSwgInJpZ2h0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgcmlnaHQgb3BlcmFuZCBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENyb3NzQmxvY2sucHJv
dG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0
cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgQ3Jvc3NCbG9jay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsK
KyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsK
KyAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIHN0YXRlLmNv
bXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAo
IiA9IGNyb3NzKCIgKyB0aGlzLmxlZnQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIsICIgKyB0
aGlzLnJpZ2h0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiKTtcclxuIik7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgcmV0dXJuIENyb3NzQmxvY2s7Cit9KF9ub2RlTWF0ZXJp
YWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJd
KSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlw
ZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLkNyb3NzQmxvY2siXSA9IENyb3NzQmxv
Y2s7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9kaXZp
ZGVCbG9jay50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvZGl2aWRlQmxvY2sudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBEaXZpZGVCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJEaXZpZGVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGl2aWRl
QmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9k
ZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05v
ZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzICovICIuL01hdGVy
aWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlz
Yy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisvKioKKyAqIEJsb2NrIHVzZWQgdG8gZGl2aWRl
IDIgdmVjdG9ycworICovCit2YXIgRGl2aWRlQmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19l
eHRlbmRzIl0oRGl2aWRlQmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBh
IG5ldyBEaXZpZGVCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5h
bWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBEaXZpZGVCbG9jayhuYW1lKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRz
Il0uTmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgibGVmdCIs
IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5BdXRv
RGV0ZWN0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgicmlnaHQiLCBfbm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQXV0b0RldGVjdCk7Cisg
ICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklucHV0KTsKKyAgICAgICAg
X3RoaXMuX291dHB1dHNbMF0uX3R5cGVDb25uZWN0aW9uU291cmNlID0gX3RoaXMuX2lucHV0c1sw
XTsKKyAgICAgICAgX3RoaXMuX2xpbmtDb25uZWN0aW9uVHlwZXMoMCwgMSk7CisgICAgICAgIHJl
dHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFz
cyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBEaXZp
ZGVCbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gIkRpdmlkZUJsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShE
aXZpZGVCbG9jay5wcm90b3R5cGUsICJsZWZ0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgbGVmdCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBd
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGl2aWRlQmxv
Y2sucHJvdG90eXBlLCAicmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSByaWdodCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzFdOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGl2aWRlQmxvY2sucHJv
dG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0
cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgRGl2aWRlQmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7
CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7
CisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBzdGF0ZS5j
b21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsg
KCIgPSAiICsgdGhpcy5sZWZ0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiIC8gIiArIHRoaXMu
cmlnaHQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiIpOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIHJldHVybiBEaXZpZGVCbG9jazsKK30oX25vZGVNYXRlcmlhbEJs
b2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2NrIl0pKTsK
KworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIl9UeXBlU3Rv
cmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uRGl2aWRlQmxvY2siXSA9IERpdmlkZUJsb2Nr
OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvZG90Qmxv
Y2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2RvdEJsb2NrLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogRG90QmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
RG90QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIERvdEJsb2NrOyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5l
czYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25v
ZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3Rv
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKwor
CisKKworLyoqCisgKiBCbG9jayB1c2VkIHRvIGFwcGx5IGEgZG90IHByb2R1Y3QgYmV0d2VlbiAy
IHZlY3RvcnMKKyAqLwordmFyIERvdEJsb2NrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9z
dXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5k
cyJdKERvdEJsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgRG90
QmxvY2sKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBibG9jayBuYW1lCisgICAgICov
CisgICAgZnVuY3Rpb24gRG90QmxvY2sobmFtZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3Vw
ZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLk5ldXRyYWwpIHx8
IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoImxlZnQiLCBfbm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJO
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQXV0b0RldGVjdCk7CisgICAg
ICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoInJpZ2h0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRlY3QpOworICAgICAgICBfdGhpcy5y
ZWdpc3Rlck91dHB1dCgib3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0KTsKKyAgICAgICAgX3RoaXMuX2xpbmtDb25uZWN0aW9u
VHlwZXMoMCwgMSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAg
ICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNz
IG5hbWUKKyAgICAgKi8KKyAgICBEb3RCbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkRvdEJsb2NrIjsKKyAgICB9OworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShEb3RCbG9jay5wcm90b3R5cGUsICJsZWZ0IiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyB0aGUgbGVmdCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5faW5wdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoRG90QmxvY2sucHJvdG90eXBlLCAicmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSByaWdodCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5w
dXRzWzFdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRG90
QmxvY2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgRG90QmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0
YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBz
dGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBz
dGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3Rh
dGUpICsgKCIgPSBkb3QoIiArIHRoaXMubGVmdC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiwg
IiArIHRoaXMucmlnaHQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIpO1xyXG4iKTsKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4gRG90QmxvY2s7Cit9KF9ub2RlTWF0
ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9j
ayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJf
VHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLkRvdEJsb2NrIl0gPSBEb3RCbG9j
azsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2ZyZXNu
ZWxCbG9jay50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2ZyZXNuZWxCbG9jay50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBGcmVzbmVsQmxvY2sgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlc25lbEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBG
cmVzbmVsQmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAi
Li4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4vTWF0ZXJp
YWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4vTWF0ZXJpYWxzL05v
ZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy90eXBlU3RvcmUgKi8g
Ii4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfSW5wdXRf
aW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9JbnB1dC9pbnB1dEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9J
bnB1dC9pbnB1dEJsb2NrLnRzIik7CisKKworCisKKworCisvKioKKyAqIEJsb2NrIHVzZWQgdG8g
Y29tcHV0ZSBmcmVzbmVsIHZhbHVlCisgKi8KK3ZhciBGcmVzbmVsQmxvY2sgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19leHRlbmRzIl0oRnJlc25lbEJsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIENyZWF0ZSBhIG5ldyBGcmVzbmVsQmxvY2sKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVz
IHRoZSBibG9jayBuYW1lCisgICAgICovCisgICAgZnVuY3Rpb24gRnJlc25lbEJsb2NrKG5hbWUp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMiXS5OZXV0cmFsKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdpc3Rl
cklucHV0KCJ3b3JsZE5vcm1hbCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMiXS5WZWN0b3I0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgi
dmlld0RpcmVjdGlvbiIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXMiXS5WZWN0b3IzKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgiYmlhcyIs
IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9h
dCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoInBvd2VyIiwgX25vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0KTsKKyAgICAgICAgX3Ro
aXMucmVnaXN0ZXJPdXRwdXQoImZyZXNuZWwiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQpOworICAgICAgICByZXR1cm4gX3RoaXM7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAq
IEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgRnJlc25lbEJsb2NrLnByb3Rv
dHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiRnJlc25l
bEJsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGcmVzbmVsQmxvY2su
cHJvdG90eXBlLCAid29ybGROb3JtYWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSB3b3JsZCBub3JtYWwgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMF07Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGcmVzbmVsQmxvY2su
cHJvdG90eXBlLCAidmlld0RpcmVjdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0
cyB0aGUgdmlldyBkaXJlY3Rpb24gaW5wdXQgY29tcG9uZW50CisgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZyZXNuZWxCbG9j
ay5wcm90b3R5cGUsICJiaWFzIiwgeworICAgICAgICAvKioKKyAgICAgICAgKiBHZXRzIHRoZSBi
aWFzIGlucHV0IGNvbXBvbmVudAorICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMl07CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGcmVzbmVsQmxvY2sucHJvdG90eXBlLCAicG93
ZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgdGhlIGNhbWVyYSAob3IgZXllKSBw
b3NpdGlvbiBjb21wb25lbnQKKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzNdOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnJlc25lbEJsb2NrLnByb3RvdHlwZSwgImZyZXNu
ZWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBmcmVzbmVsIG91dHB1dCBj
b21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIEZy
ZXNuZWxCbG9jay5wcm90b3R5cGUuYXV0b0NvbmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCkg
eworICAgICAgICBpZiAoIXRoaXMuYmlhcy5pc0Nvbm5lY3RlZCkgeworICAgICAgICAgICAgdmFy
IGJpYXNJbnB1dCA9IG5ldyBfSW5wdXRfaW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJJbnB1dEJsb2NrIl0oImJpYXMiKTsKKyAgICAgICAgICAgIGJpYXNJbnB1dC52YWx1
ZSA9IDA7CisgICAgICAgICAgICBiaWFzSW5wdXQub3V0cHV0LmNvbm5lY3RUbyh0aGlzLmJpYXMp
OworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5wb3dlci5pc0Nvbm5lY3RlZCkgeworICAg
ICAgICAgICAgdmFyIHBvd2VySW5wdXQgPSBuZXcgX0lucHV0X2lucHV0QmxvY2tfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siSW5wdXRCbG9jayJdKCJwb3dlciIpOworICAgICAgICAgICAg
cG93ZXJJbnB1dC52YWx1ZSA9IDE7CisgICAgICAgICAgICBwb3dlcklucHV0Lm91dHB1dC5jb25u
ZWN0VG8odGhpcy5wb3dlcik7CisgICAgICAgIH0KKyAgICB9OworICAgIEZyZXNuZWxCbG9jay5w
cm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1cGVy
LnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgdmFyIGNv
bW1lbnRzID0gIi8vIiArIHRoaXMubmFtZTsKKyAgICAgICAgc3RhdGUuX2VtaXRGdW5jdGlvbkZy
b21JbmNsdWRlKCJmcmVzbmVsRnVuY3Rpb24iLCBjb21tZW50cywgeyByZW1vdmVJZkRlZjogdHJ1
ZSB9KTsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91
dHB1dCh0aGlzLmZyZXNuZWwsIHN0YXRlKSArICgiID0gY29tcHV0ZUZyZXNuZWxUZXJtKCIgKyB0
aGlzLnZpZXdEaXJlY3Rpb24uYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIsICIgKyB0aGlzLndv
cmxkTm9ybWFsLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLCAiICsgdGhpcy5iaWFzLmFzc29j
aWF0ZWRWYXJpYWJsZU5hbWUgKyAiLCAiICsgdGhpcy5wb3dlci5hc3NvY2lhdGVkVmFyaWFibGVO
YW1lICsgIik7XHJcbiIpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVy
biBGcmVzbmVsQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJC
QUJZTE9OLkZyZXNuZWxCbG9jayJdID0gRnJlc25lbEJsb2NrOworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvaW5kZXgudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUv
QmxvY2tzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTXVsdGlwbHlCbG9jaywgQWRkQmxvY2ss
IFNjYWxlQmxvY2ssIENsYW1wQmxvY2ssIENyb3NzQmxvY2ssIERvdEJsb2NrLCBUcmFuc2Zvcm1C
bG9jaywgUmVtYXBCbG9jaywgTm9ybWFsaXplQmxvY2ssIFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0
aW9ucywgVHJpZ29ub21ldHJ5QmxvY2ssIENvbG9yTWVyZ2VyQmxvY2ssIFZlY3Rvck1lcmdlckJs
b2NrLCBDb2xvclNwbGl0dGVyQmxvY2ssIFZlY3RvclNwbGl0dGVyQmxvY2ssIExlcnBCbG9jaywg
RGl2aWRlQmxvY2ssIFN1YnRyYWN0QmxvY2ssIFN0ZXBCbG9jaywgT3Bwb3NpdGVCbG9jaywgVmll
d0RpcmVjdGlvbkJsb2NrLCBGcmVzbmVsQmxvY2ssIE1heEJsb2NrLCBNaW5CbG9jaywgVmVydGV4
T3V0cHV0QmxvY2ssIEJvbmVzQmxvY2ssIEluc3RhbmNlc0Jsb2NrLCBNb3JwaFRhcmdldHNCbG9j
aywgTGlnaHRJbmZvcm1hdGlvbkJsb2NrLCBGcmFnbWVudE91dHB1dEJsb2NrLCBBbHBoYVRlc3RC
bG9jaywgSW1hZ2VQcm9jZXNzaW5nQmxvY2ssIFBlcnR1cmJOb3JtYWxCbG9jaywgRm9nQmxvY2ss
IExpZ2h0QmxvY2ssIFRleHR1cmVCbG9jaywgUmVmbGVjdGlvblRleHR1cmVCbG9jaywgSW5wdXRC
bG9jaywgQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9WZXJ0ZXhfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vVmVydGV4L2luZGV4ICovICIuL01hdGVy
aWFscy9Ob2RlL0Jsb2Nrcy9WZXJ0ZXgvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmVy
dGV4T3V0cHV0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9WZXJ0ZXhfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVydGV4T3V0cHV0QmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQm9uZXNCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1ZlcnRleF9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCb25lc0Jsb2NrIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkluc3RhbmNlc0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVmVydGV4
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkluc3RhbmNlc0Jsb2NrIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk1vcnBoVGFyZ2V0c0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfVmVydGV4X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1vcnBoVGFy
Z2V0c0Jsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxpZ2h0SW5mb3JtYXRpb25CbG9j
ayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1ZlcnRleF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJMaWdodEluZm9ybWF0aW9uQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfRnJhZ21lbnRfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vRnJhZ21lbnQvaW5kZXggKi8gIi4vTWF0ZXJpYWxz
L05vZGUvQmxvY2tzL0ZyYWdtZW50L2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyYWdt
ZW50T3V0cHV0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9GcmFnbWVudF9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJGcmFnbWVudE91dHB1dEJsb2NrIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkFscGhhVGVzdEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRnJh
Z21lbnRfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWxwaGFUZXN0QmxvY2si
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5nQmxvY2siLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9GcmFnbWVudF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJJbWFnZVByb2Nlc3NpbmdCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQZXJ0dXJi
Tm9ybWFsQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9GcmFnbWVudF9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQZXJ0dXJiTm9ybWFsQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfRHVhbF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9EdWFsL2luZGV4ICovICIuL01hdGVyaWFs
cy9Ob2RlL0Jsb2Nrcy9EdWFsL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZvZ0Jsb2Nr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRHVhbF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJGb2dCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaWdodEJsb2NrIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfRHVhbF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJMaWdodEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRleHR1cmVCbG9jayIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0R1YWxfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVGV4dHVyZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlZmxlY3Rpb25U
ZXh0dXJlQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9EdWFsX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlJlZmxlY3Rpb25UZXh0dXJlQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfSW5wdXRfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vSW5wdXQvaW5kZXggKi8gIi4vTWF0ZXJp
YWxzL05vZGUvQmxvY2tzL0lucHV0L2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIklucHV0
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9JbnB1dF9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJJbnB1dEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1h
dGVkSW5wdXRCbG9ja1R5cGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSW5wdXRfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMiXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbXVsdGlwbHlCbG9ja19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tdWx0aXBseUJsb2Nr
ICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9tdWx0aXBseUJsb2NrLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIk11bHRpcGx5QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tdWx0aXBseUJs
b2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk11bHRpcGx5QmxvY2siXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWRkQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYWRkQmxvY2sgKi8gIi4vTWF0ZXJp
YWxzL05vZGUvQmxvY2tzL2FkZEJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFkZEJsb2Nr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYWRkQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siQWRkQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NhbGVC
bG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9zY2FsZUJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9zY2FsZUJsb2NrLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlNjYWxlQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9z
Y2FsZUJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNjYWxlQmxvY2siXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2xhbXBCbG9ja19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jbGFtcEJsb2NrICovICIu
L01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9jbGFtcEJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkNsYW1wQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jbGFtcEJsb2NrX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIkNsYW1wQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfY3Jvc3NCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9jcm9zc0Jsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nr
cy9jcm9zc0Jsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNyb3NzQmxvY2siLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9jcm9zc0Jsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNy
b3NzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZG90QmxvY2tfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZG90
QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2RvdEJsb2NrLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkRvdEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZG90QmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfX1siRG90QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfdHJhbnNmb3JtQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RyYW5zZm9ybUJsb2NrICovICIuL01hdGVyaWFs
cy9Ob2RlL0Jsb2Nrcy90cmFuc2Zvcm1CbG9jay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmFu
c2Zvcm1CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3RyYW5zZm9ybUJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMF9fWyJUcmFuc2Zvcm1CbG9jayJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9yZW1hcEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yZW1hcEJsb2NrICovICIuL01hdGVyaWFscy9O
b2RlL0Jsb2Nrcy9yZW1hcEJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbWFwQmxvY2si
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9yZW1hcEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMV9fWyJSZW1hcEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25v
cm1hbGl6ZUJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9ub3JtYWxpemVCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3Mv
bm9ybWFsaXplQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9ybWFsaXplQmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9ub3JtYWxpemVCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTJfX1siTm9ybWFsaXplQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfdHJpZ29ub21ldHJ5QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3RyaWdvbm9tZXRyeUJsb2NrICovICIuL01hdGVyaWFscy9O
b2RlL0Jsb2Nrcy90cmlnb25vbWV0cnlCbG9jay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmln
b25vbWV0cnlCbG9ja09wZXJhdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90cmlnb25vbWV0
cnlCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siVHJpZ29ub21ldHJ5QmxvY2tP
cGVyYXRpb25zIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRyaWdvbm9tZXRyeUJsb2NrIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfdHJpZ29ub21ldHJ5QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEzX19bIlRyaWdvbm9tZXRyeUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2NvbG9yTWVyZ2VyQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbG9yTWVyZ2VyQmxvY2sgKi8gIi4vTWF0ZXJp
YWxzL05vZGUvQmxvY2tzL2NvbG9yTWVyZ2VyQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Q29sb3JNZXJnZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbG9yTWVyZ2VyQmxvY2tf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkNvbG9yTWVyZ2VyQmxvY2siXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdmVjdG9yTWVyZ2VyQmxvY2tfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZlY3Rvck1lcmdl
ckJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy92ZWN0b3JNZXJnZXJCbG9jay50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJWZWN0b3JNZXJnZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX3ZlY3Rvck1lcmdlckJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJWZWN0
b3JNZXJnZXJCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb2xvclNw
bGl0dGVyQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2NvbG9yU3BsaXR0ZXJCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9j
a3MvY29sb3JTcGxpdHRlckJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yU3BsaXR0
ZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbG9yU3BsaXR0ZXJCbG9ja19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTZfX1siQ29sb3JTcGxpdHRlckJsb2NrIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3ZlY3RvclNwbGl0dGVyQmxvY2tfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZlY3RvclNwbGl0dGVy
QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL3ZlY3RvclNwbGl0dGVyQmxvY2sudHMi
KTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVmVjdG9yU3BsaXR0ZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX3ZlY3RvclNwbGl0dGVyQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19b
IlZlY3RvclNwbGl0dGVyQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bGVycEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9sZXJwQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2xlcnBCbG9j
ay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZXJwQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9sZXJwQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIkxlcnBCbG9jayJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kaXZpZGVCbG9ja19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGl2aWRlQmxvY2sg
Ki8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2RpdmlkZUJsb2NrLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkRpdmlkZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGl2aWRlQmxvY2tfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIkRpdmlkZUJsb2NrIl07IH0pOworCisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3N1YnRyYWN0QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1YnRyYWN0QmxvY2sgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvQmxvY2tzL3N1YnRyYWN0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U3VidHJhY3RCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N1YnRyYWN0QmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzIwX19bIlN1YnRyYWN0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfc3RlcEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdGVwQmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05v
ZGUvQmxvY2tzL3N0ZXBCbG9jay50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGVwQmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9zdGVwQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIx
X19bIlN0ZXBCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9vcHBvc2l0
ZUJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9vcHBvc2l0ZUJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9vcHBvc2l0
ZUJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9wcG9zaXRlQmxvY2siLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9vcHBvc2l0ZUJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJP
cHBvc2l0ZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZpZXdEaXJl
Y3Rpb25CbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vdmlld0RpcmVjdGlvbkJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nr
cy92aWV3RGlyZWN0aW9uQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlld0RpcmVjdGlv
bkJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdmlld0RpcmVjdGlvbkJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yM19fWyJWaWV3RGlyZWN0aW9uQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfZnJlc25lbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mcmVzbmVsQmxvY2sgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvQmxvY2tzL2ZyZXNuZWxCbG9jay50cyIpOworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJG
cmVzbmVsQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mcmVzbmVsQmxvY2tfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzI0X19bIkZyZXNuZWxCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9tYXhCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vbWF4QmxvY2sgKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxv
Y2tzL21heEJsb2NrLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1heEJsb2NrIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfbWF4QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19bIk1heEJs
b2NrIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21pbkJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9taW5CbG9j
ayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvbWluQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTWluQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9taW5CbG9ja19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjZfX1siTWluQmxvY2siXTsgfSk7CisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL2xlcnBCbG9jay50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxz
L05vZGUvQmxvY2tzL2xlcnBCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBMZXJwQmxvY2sg
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVycEJsb2NrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBMZXJwQmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2sg
Ki8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9u
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy90
eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisvKioKKyAqIEJs
b2NrIHVzZWQgdG8gbGVycCAyIHZhbHVlcworICovCit2YXIgTGVycEJsb2NrID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKExlcnBCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgbmV3IExlcnBCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhl
IGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBMZXJwQmxvY2sobmFtZSkgeworICAg
ICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2Nr
VGFyZ2V0cyJdLk5ldXRyYWwpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQo
ImxlZnQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
Il0uQXV0b0RldGVjdCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoInJpZ2h0IiwgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRl
Y3QpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJncmFkaWVudCIsIF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCk7CisgICAgICAg
IF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklucHV0KTsKKyAgICAgICAgX3RoaXMu
X291dHB1dHNbMF0uX3R5cGVDb25uZWN0aW9uU291cmNlID0gX3RoaXMuX2lucHV0c1swXTsKKyAg
ICAgICAgX3RoaXMuX2xpbmtDb25uZWN0aW9uVHlwZXMoMCwgMSk7CisgICAgICAgIHJldHVybiBf
dGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1l
CisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBMZXJwQmxvY2su
cHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJM
ZXJwQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlcnBCbG9jay5w
cm90b3R5cGUsICJsZWZ0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGVm
dCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGVycEJsb2NrLnByb3RvdHlwZSwg
InJpZ2h0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgcmlnaHQgb3BlcmFu
ZCBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlcnBCbG9jay5wcm90b3R5cGUsICJncmFkaWVu
dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGdyYWRpZW50IG9wZXJhbmQg
aW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMl07CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXJwQmxvY2sucHJvdG90eXBlLCAib3V0cHV0Iiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgTGVycEJsb2NrLnByb3Rv
dHlwZS5fYnVpbGRCbG9jayA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJv
dG90eXBlLl9idWlsZEJsb2NrLmNhbGwodGhpcywgc3RhdGUpOworICAgICAgICB2YXIgb3V0cHV0
ID0gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0g
dGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0YXRlKSArICgiID0gbWl4KCIgKyB0aGlzLmxl
ZnQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIgLCAiICsgdGhpcy5yaWdodC5hc3NvY2lhdGVk
VmFyaWFibGVOYW1lICsgIiwgIiArIHRoaXMuZ3JhZGllbnQuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICIpO1xyXG4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4g
TGVycEJsb2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siTm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxP
Ti5MZXJwQmxvY2siXSA9IExlcnBCbG9jazsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0
ZXJpYWxzL05vZGUvQmxvY2tzL21heEJsb2NrLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nr
cy9tYXhCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE1heEJsb2NrICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1heEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBN
YXhCbG9jazsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9u
b2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9u
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9k
ZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9N
aXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBnZXQg
dGhlIG1heCBvZiAyIHZhbHVlcworICovCit2YXIgTWF4QmxvY2sgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19leHRlbmRzIl0oTWF4QmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRl
cyBhIG5ldyBNYXhCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5h
bWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBNYXhCbG9jayhuYW1lKSB7CisgICAgICAgIHZhciBf
dGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0u
TmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgibGVmdCIsIF9u
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5BdXRvRGV0
ZWN0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgicmlnaHQiLCBfbm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJO
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQXV0b0RldGVjdCk7CisgICAg
ICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklucHV0KTsKKyAgICAgICAgX3Ro
aXMuX291dHB1dHNbMF0uX3R5cGVDb25uZWN0aW9uU291cmNlID0gX3RoaXMuX2lucHV0c1swXTsK
KyAgICAgICAgX3RoaXMuX2xpbmtDb25uZWN0aW9uVHlwZXMoMCwgMSk7CisgICAgICAgIHJldHVy
biBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBu
YW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBNYXhCbG9j
ay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
Ik1heEJsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXhCbG9jay5w
cm90b3R5cGUsICJsZWZ0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGVm
dCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF4QmxvY2sucHJvdG90eXBlLCAi
cmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByaWdodCBvcGVyYW5k
IGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzFdOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF4QmxvY2sucHJvdG90eXBlLCAib3V0cHV0Iiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgTWF4QmxvY2sucHJvdG90
eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90
b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQg
PSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0
aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgKCIgPSBtYXgoIiArIHRoaXMubGVm
dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiwgIiArIHRoaXMucmlnaHQuYXNzb2NpYXRlZFZh
cmlhYmxlTmFtZSArICIpO1xyXG4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICByZXR1cm4gTWF4QmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVz
WyJCQUJZTE9OLk1heEJsb2NrIl0gPSBNYXhCbG9jazsKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL21pbkJsb2NrLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2Rl
L0Jsb2Nrcy9taW5CbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE1pbkJsb2NrICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1pbkJsb2NrIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBNaW5CbG9jazsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRl
cmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAq
LyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0
byBnZXQgdGhlIG1pbiBvZiAyIHZhbHVlcworICovCit2YXIgTWluQmxvY2sgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19leHRlbmRzIl0oTWluQmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIG5ldyBNaW5CbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJs
b2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBNaW5CbG9jayhuYW1lKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzIl0uTmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgibGVm
dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5B
dXRvRGV0ZWN0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgicmlnaHQiLCBfbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQXV0b0RldGVjdCk7
CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklucHV0KTsKKyAgICAg
ICAgX3RoaXMuX291dHB1dHNbMF0uX3R5cGVDb25uZWN0aW9uU291cmNlID0gX3RoaXMuX2lucHV0
c1swXTsKKyAgICAgICAgX3RoaXMuX2xpbmtDb25uZWN0aW9uVHlwZXMoMCwgMSk7CisgICAgICAg
IHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBj
bGFzcyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBN
aW5CbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gIk1pbkJsb2NrIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNaW5C
bG9jay5wcm90b3R5cGUsICJsZWZ0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgbGVmdCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWluQmxvY2sucHJvdG90
eXBlLCAicmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSByaWdodCBv
cGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzFdOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWluQmxvY2sucHJvdG90eXBlLCAib3V0
cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVu
dAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgTWluQmxvY2su
cHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBl
ci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBv
dXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmlu
ZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgKCIgPSBtaW4oIiArIHRo
aXMubGVmdC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiwgIiArIHRoaXMucmlnaHQuYXNzb2Np
YXRlZFZhcmlhYmxlTmFtZSArICIpO1xyXG4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICByZXR1cm4gTWluQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVT
dG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJl
ZFR5cGVzWyJCQUJZTE9OLk1pbkJsb2NrIl0gPSBNaW5CbG9jazsKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL211bHRpcGx5QmxvY2sudHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvbXVsdGlwbHlCbG9jay50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogTXVsdGlwbHlCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJNdWx0aXBseUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNdWx0aXBseUJsb2NrOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxl
cy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1h
dGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVN
YXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9k
ZS9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0
b3JlLnRzIik7CisKKworCisKKworLyoqCisgKiBCbG9jayB1c2VkIHRvIG11bHRpcGx5IDIgdmFs
dWVzCisgKi8KK3ZhciBNdWx0aXBseUJsb2NrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9z
dXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5k
cyJdKE11bHRpcGx5QmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5l
dyBNdWx0aXBseUJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgYmxvY2sgbmFt
ZQorICAgICAqLworICAgIGZ1bmN0aW9uIE11bHRpcGx5QmxvY2sobmFtZSkgeworICAgICAgICB2
YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
cyJdLk5ldXRyYWwpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoImxlZnQi
LCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQXV0
b0RldGVjdCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoInJpZ2h0IiwgX25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRlY3QpOwor
ICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgib3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2Nr
Q29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkJhc2VkT25JbnB1dCk7CisgICAgICAg
IF90aGlzLl9vdXRwdXRzWzBdLl90eXBlQ29ubmVjdGlvblNvdXJjZSA9IF90aGlzLl9pbnB1dHNb
MF07CisgICAgICAgIF90aGlzLl9saW5rQ29ubmVjdGlvblR5cGVzKDAsIDEpOworICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xh
c3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgTXVs
dGlwbHlCbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gIk11bHRpcGx5QmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KE11bHRpcGx5QmxvY2sucHJvdG90eXBlLCAibGVmdCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgdGhlIGxlZnQgb3BlcmFuZCBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lu
cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11
bHRpcGx5QmxvY2sucHJvdG90eXBlLCAicmlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSByaWdodCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRz
WzFdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVsdGlw
bHlCbG9jay5wcm90b3R5cGUsICJvdXRwdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHRoZSBvdXRwdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBNdWx0aXBseUJsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9jayA9IGZ1bmN0
aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJsb2NrLmNhbGwo
dGhpcywgc3RhdGUpOworICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fb3V0cHV0c1swXTsKKyAg
ICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRw
dXQsIHN0YXRlKSArICgiID0gIiArIHRoaXMubGVmdC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsg
IiAqICIgKyB0aGlzLnJpZ2h0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiO1xyXG4iKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4gTXVsdGlwbHlCbG9jazsKK30o
X25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRl
cmlhbEJsb2NrIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uTXVsdGlwbHlCbG9j
ayJdID0gTXVsdGlwbHlCbG9jazsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxz
L05vZGUvQmxvY2tzL25vcm1hbGl6ZUJsb2NrLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2Rl
L0Jsb2Nrcy9ub3JtYWxpemVCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE5vcm1h
bGl6ZUJsb2NrICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vcm1hbGl6
ZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBOb3JtYWxpemVCbG9jazsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNs
aWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2Nr
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9j
ay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICov
ICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlw
ZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOwor
CisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBub3JtYWxpemUgYSB2ZWN0b3IKKyAqLwor
dmFyIE5vcm1hbGl6ZUJsb2NrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgewor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKE5vcm1h
bGl6ZUJsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgTm9ybWFs
aXplQmxvY2sKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBibG9jayBuYW1lCisgICAg
ICovCisgICAgZnVuY3Rpb24gTm9ybWFsaXplQmxvY2sobmFtZSkgeworICAgICAgICB2YXIgX3Ro
aXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLk5l
dXRyYWwpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoImlucHV0IiwgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRl
Y3QpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgib3V0cHV0IiwgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkJhc2VkT25JbnB1dCk7Cisg
ICAgICAgIF90aGlzLl9vdXRwdXRzWzBdLl90eXBlQ29ubmVjdGlvblNvdXJjZSA9IF90aGlzLl9p
bnB1dHNbMF07CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICog
R2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5h
bWUKKyAgICAgKi8KKyAgICBOb3JtYWxpemVCbG9jay5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIk5vcm1hbGl6ZUJsb2NrIjsKKyAgICB9Owor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb3JtYWxpemVCbG9jay5wcm90b3R5cGUsICJpbnB1
dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGlucHV0IGNvbXBvbmVudAor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoTm9ybWFsaXplQmxvY2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0
c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgTm9ybWFsaXplQmxvY2sucHJvdG90eXBlLl9i
dWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUu
X2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlz
Ll9vdXRwdXRzWzBdOworICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLl9pbnB1dHNbMF07CisgICAg
ICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0
LCBzdGF0ZSkgKyAoIiA9IG5vcm1hbGl6ZSgiICsgaW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICIpO1xyXG4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4g
Tm9ybWFsaXplQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJC
QUJZTE9OLk5vcm1hbGl6ZUJsb2NrIl0gPSBOb3JtYWxpemVCbG9jazsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL29wcG9zaXRlQmxvY2sudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3Mvb3Bwb3NpdGVCbG9jay50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogT3Bwb3NpdGVCbG9jayAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJPcHBvc2l0ZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBPcHBvc2l0ZUJsb2Nr
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9k
dWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9k
ZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25v
ZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlw
ZVN0b3JlLnRzIik7CisKKworCisKKworLyoqCisgKiBCbG9jayB1c2VkIHRvIGdldCB0aGUgb3Bw
b3NpdGUgb2YgYSB2YWx1ZQorICovCit2YXIgT3Bwb3NpdGVCbG9jayA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShPcHBvc2l0ZUJsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgT3Bwb3NpdGVCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMg
dGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBPcHBvc2l0ZUJsb2NrKG5hbWUp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMiXS5OZXV0cmFsKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdpc3Rl
cklucHV0KCJpbnB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXMiXS5BdXRvRGV0ZWN0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoIm91
dHB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMi
XS5CYXNlZE9uSW5wdXQpOworICAgICAgICBfdGhpcy5fb3V0cHV0c1swXS5fdHlwZUNvbm5lY3Rp
b25Tb3VyY2UgPSBfdGhpcy5faW5wdXRzWzBdOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAg
fQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQorICAgICAqIEBy
ZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgT3Bwb3NpdGVCbG9jay5wcm90b3R5
cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIk9wcG9zaXRl
QmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9wcG9zaXRlQmxvY2su
cHJvdG90eXBlLCAiaW5wdXQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBp
bnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9wcG9zaXRlQmxvY2sucHJvdG90eXBlLCAib3V0cHV0
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT3Bwb3NpdGVCbG9j
ay5wcm90b3R5cGUuX2J1aWxkQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAgX3N1
cGVyLnByb3RvdHlwZS5fYnVpbGRCbG9jay5jYWxsKHRoaXMsIHN0YXRlKTsKKyAgICAgICAgdmFy
IG91dHB1dCA9IHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3Ry
aW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9IDEuIC0gIiAr
IHRoaXMuaW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiIpOworICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBPcHBvc2l0ZUJsb2NrOworfShfbm9kZU1h
dGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVyaWFsQmxv
Y2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
X1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5PcHBvc2l0ZUJsb2NrIl0gPSBP
cHBvc2l0ZUJsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9C
bG9ja3MvcmVtYXBCbG9jay50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9yZW1hcEJs
b2NrLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBSZW1hcEJsb2NrICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbWFwQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJl
bWFwQmxvY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2sgKi8gIi4vTWF0ZXJpYWxz
L05vZGUvbm9kZU1hdGVyaWFsQmxvY2sudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzICovICIuL01h
dGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4v
TWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uLy4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9y
LnRzIik7CisKKworCisKKworCisvKioKKyAqIEJsb2NrIHVzZWQgdG8gcmVtYXAgYSBmbG9hdCBm
cm9tIGEgcmFuZ2UgdG8gYSBuZXcgb25lCisgKi8KK3ZhciBSZW1hcEJsb2NrID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKFJlbWFwQmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIG5ldyBSZW1hcEJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0
aGUgYmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIFJlbWFwQmxvY2sobmFtZSkgewor
ICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFs
QmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJs
b2NrVGFyZ2V0cyJdLk5ldXRyYWwpIHx8IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIG9yIHNldHMgdGhlIHNvdXJjZSByYW5nZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
c291cmNlUmFuZ2UgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlZlY3RvcjIiXSgtMSwgMSk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IG9yIHNldHMgdGhlIHRhcmdldCByYW5nZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudGFy
Z2V0UmFuZ2UgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X19bIlZlY3RvcjIiXSgwLCAxKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgiaW5w
dXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0u
QXV0b0RldGVjdCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklu
cHV0KTsKKyAgICAgICAgX3RoaXMuX291dHB1dHNbMF0uX3R5cGVDb25uZWN0aW9uU291cmNlID0g
X3RoaXMuX2lucHV0c1swXTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioK
KyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y2xhc3MgbmFtZQorICAgICAqLworICAgIFJlbWFwQmxvY2sucHJvdG90eXBlLmdldENsYXNzTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJSZW1hcEJsb2NrIjsKKyAgICB9Owor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZW1hcEJsb2NrLnByb3RvdHlwZSwgImlucHV0Iiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgaW5wdXQgY29tcG9uZW50CisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShSZW1hcEJsb2NrLnByb3RvdHlwZSwgIm91dHB1dCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgdGhlIG91dHB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMF07Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIFJlbWFwQmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0g
ZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2su
Y2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBd
OworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0
KG91dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgdGhpcy5fd3JpdGVGbG9hdCh0aGlzLnRhcmdldFJh
bmdlLngpICsgIiArICgiICsgdGhpcy5faW5wdXRzWzBdLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUg
KyAiIC0gIiArIHRoaXMuX3dyaXRlRmxvYXQodGhpcy5zb3VyY2VSYW5nZS54KSArICIpICogKCIg
KyB0aGlzLl93cml0ZUZsb2F0KHRoaXMudGFyZ2V0UmFuZ2UueSkgKyAiIC0gIiArIHRoaXMuX3dy
aXRlRmxvYXQodGhpcy50YXJnZXRSYW5nZS54KSArICIpIC8gKCIgKyB0aGlzLl93cml0ZUZsb2F0
KHRoaXMuc291cmNlUmFuZ2UueSkgKyAiIC0gIiArIHRoaXMuX3dyaXRlRmxvYXQodGhpcy5zb3Vy
Y2VSYW5nZS54KSArICIpO1xyXG4iKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICBSZW1hcEJsb2NrLnByb3RvdHlwZS5fZHVtcFByb3BlcnRpZXNDb2RlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgY29kZVN0cmluZyA9IHRoaXMuX2NvZGVWYXJpYWJsZU5hbWUgKyAiLnNv
dXJjZVJhbmdlID0gbmV3IEJBQllMT04uVmVjdG9yMigiICsgdGhpcy5zb3VyY2VSYW5nZS54ICsg
IiwgIiArIHRoaXMuc291cmNlUmFuZ2UueSArICIpO1xyXG4iOworICAgICAgICBjb2RlU3RyaW5n
ICs9IHRoaXMuX2NvZGVWYXJpYWJsZU5hbWUgKyAiLnRhcmdldFJhbmdlID0gbmV3IEJBQllMT04u
VmVjdG9yMigiICsgdGhpcy50YXJnZXRSYW5nZS54ICsgIiwgIiArIHRoaXMudGFyZ2V0UmFuZ2Uu
eSArICIpO1xyXG4iOworICAgICAgICByZXR1cm4gY29kZVN0cmluZzsKKyAgICB9OworICAgIFJl
bWFwQmxvY2sucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IHNlcmlhbGl6YXRpb25PYmplY3QgPSBfc3VwZXIucHJvdG90eXBlLnNlcmlhbGl6ZS5jYWxsKHRo
aXMpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNvdXJjZVJhbmdlID0gdGhpcy5zb3Vy
Y2VSYW5nZS5hc0FycmF5KCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudGFyZ2V0UmFu
Z2UgPSB0aGlzLnRhcmdldFJhbmdlLmFzQXJyYXkoKTsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6
YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICBSZW1hcEJsb2NrLnByb3RvdHlwZS5fZGVzZXJpYWxp
emUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlvbk9iamVjdCwgc2NlbmUsIHJvb3RVcmwpIHsKKyAg
ICAgICAgX3N1cGVyLnByb3RvdHlwZS5fZGVzZXJpYWxpemUuY2FsbCh0aGlzLCBzZXJpYWxpemF0
aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIHRoaXMuc291cmNlUmFuZ2UgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMiJd
LkZyb21BcnJheShzZXJpYWxpemF0aW9uT2JqZWN0LnNvdXJjZVJhbmdlKTsKKyAgICAgICAgdGhp
cy50YXJnZXRSYW5nZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJWZWN0b3IyIl0uRnJvbUFycmF5KHNlcmlhbGl6YXRpb25PYmplY3QudGFyZ2V0UmFu
Z2UpOworICAgIH07CisgICAgcmV0dXJuIFJlbWFwQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9j
a19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisK
K19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3Jl
Il0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLlJlbWFwQmxvY2siXSA9IFJlbWFwQmxvY2s7CisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9zY2FsZUJsb2Nr
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL3NjYWxlQmxvY2sudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFNjYWxlQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiU2NhbGVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2NhbGVCbG9jazsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlh
bEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJp
YWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9k
ZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50
cyIpOworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBzY2FsZSBhIHZlY3RvciBieSBh
IGZsb2F0CisgKi8KK3ZhciBTY2FsZUJsb2NrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9z
dXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5k
cyJdKFNjYWxlQmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBT
Y2FsZUJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgYmxvY2sgbmFtZQorICAg
ICAqLworICAgIGZ1bmN0aW9uIFNjYWxlQmxvY2sobmFtZSkgeworICAgICAgICB2YXIgX3RoaXMg
PSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLk5ldXRy
YWwpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoImlucHV0IiwgX25vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRlY3Qp
OworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJmYWN0b3IiLCBfbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQpOworICAgICAgICBfdGhp
cy5yZWdpc3Rlck91dHB1dCgib3V0cHV0IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyJdLkJhc2VkT25JbnB1dCk7CisgICAgICAgIF90aGlzLl9vdXRw
dXRzWzBdLl90eXBlQ29ubmVjdGlvblNvdXJjZSA9IF90aGlzLl9pbnB1dHNbMF07CisgICAgICAg
IHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBj
bGFzcyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBT
Y2FsZUJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiAiU2NhbGVCbG9jayI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
U2NhbGVCbG9jay5wcm90b3R5cGUsICJpbnB1dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NhbGVCbG9jay5wcm90b3R5cGUs
ICJmYWN0b3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBmYWN0b3IgaW5w
dXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2FsZUJsb2NrLnByb3RvdHlwZSwgIm91dHB1dCIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG91dHB1dCBjb21wb25lbnQKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX291dHB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIFNjYWxlQmxvY2sucHJvdG90
eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90
b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQg
PSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0
aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgdGhpcy5pbnB1dC5h
c3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiAqICIgKyB0aGlzLmZhY3Rvci5hc3NvY2lhdGVkVmFy
aWFibGVOYW1lICsgIjtcclxuIik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
cmV0dXJuIFNjYWxlQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVz
WyJCQUJZTE9OLlNjYWxlQmxvY2siXSA9IFNjYWxlQmxvY2s7CisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9zdGVwQmxvY2sudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFs
cy9Ob2RlL0Jsb2Nrcy9zdGVwQmxvY2sudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU3RlcEJsb2Nr
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXBCbG9jayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gU3RlcEJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2Nr
ICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4vTWF0ZXJpYWxzL05vZGUv
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2Nr
VGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2Mv
dHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKworLyoqCisgKiBC
bG9jayB1c2VkIHRvIHN0ZXAgYSB2YWx1ZQorICovCit2YXIgU3RlcEJsb2NrID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKFN0ZXBCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgbmV3IEFkZEJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
YmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIFN0ZXBCbG9jayhuYW1lKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzIl0uTmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgi
dmFsdWUiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
Il0uRmxvYXQpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJlZGdlIiwgX25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0KTsKKyAgICAg
ICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoIm91dHB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCk7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisg
ICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBTdGVwQmxvY2sucHJv
dG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJTdGVw
QmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0ZXBCbG9jay5wcm90
b3R5cGUsICJ2YWx1ZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHZhbHVl
IG9wZXJhbmQgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGVwQmxvY2sucHJvdG90eXBlLCAi
ZWRnZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGVkZ2Ugb3BlcmFuZCBp
bnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0ZXBCbG9jay5wcm90b3R5cGUsICJvdXRwdXQiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBvdXRwdXQgY29tcG9uZW50CisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBTdGVwQmxvY2sucHJvdG90
eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90
b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQg
PSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0
aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgKCIgPSBzdGVwKCIgKyB0aGlzLmVk
Z2UuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIsICIgKyB0aGlzLnZhbHVlLmFzc29jaWF0ZWRW
YXJpYWJsZU5hbWUgKyAiKTtcclxuIik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgcmV0dXJuIFN0ZXBCbG9jazsKK30oX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2NrIl0pKTsKKworX01pc2NfdHlwZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlw
ZXNbIkJBQllMT04uU3RlcEJsb2NrIl0gPSBTdGVwQmxvY2s7CisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9zdWJ0cmFjdEJsb2NrLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWF0ZXJpYWxzL05vZGUvQmxvY2tzL3N1YnRyYWN0QmxvY2sudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IFN1YnRyYWN0QmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiU3VidHJhY3RCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3VidHJhY3RCbG9jazsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRl
cmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0
ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUv
bm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9y
ZS50cyIpOworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBzdWJ0cmFjdCAyIHZlY3Rv
cnMKKyAqLwordmFyIFN1YnRyYWN0QmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1
cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRz
Il0oU3VidHJhY3RCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3
IFN1YnRyYWN0QmxvY2sKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBibG9jayBuYW1l
CisgICAgICovCisgICAgZnVuY3Rpb24gU3VidHJhY3RCbG9jayhuYW1lKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRz
Il0uTmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgibGVmdCIs
IF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5BdXRv
RGV0ZWN0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgicmlnaHQiLCBfbm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQXV0b0RldGVjdCk7Cisg
ICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklucHV0KTsKKyAgICAgICAg
X3RoaXMuX291dHB1dHNbMF0uX3R5cGVDb25uZWN0aW9uU291cmNlID0gX3RoaXMuX2lucHV0c1sw
XTsKKyAgICAgICAgX3RoaXMuX2xpbmtDb25uZWN0aW9uVHlwZXMoMCwgMSk7CisgICAgICAgIHJl
dHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFz
cyBuYW1lCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBTdWJ0
cmFjdEJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiAiU3VidHJhY3RCbG9jayI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoU3VidHJhY3RCbG9jay5wcm90b3R5cGUsICJsZWZ0IiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyB0aGUgbGVmdCBvcGVyYW5kIGlucHV0IGNvbXBvbmVudAorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5w
dXRzWzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3Vi
dHJhY3RCbG9jay5wcm90b3R5cGUsICJyaWdodCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIHJpZ2h0IG9wZXJhbmQgaW5wdXQgY29tcG9uZW50CisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNb
MV07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJ0cmFj
dEJsb2NrLnByb3RvdHlwZSwgIm91dHB1dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIG91dHB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIFN1YnRyYWN0QmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rp
b24gKHN0YXRlKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0
aGlzLCBzdGF0ZSk7CisgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAg
ICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1
dCwgc3RhdGUpICsgKCIgPSAiICsgdGhpcy5sZWZ0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAi
IC0gIiArIHRoaXMucmlnaHQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICI7XHJcbiIpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBTdWJ0cmFjdEJsb2NrOworfShf
bm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTm9kZU1hdGVy
aWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5TdWJ0cmFjdEJsb2Nr
Il0gPSBTdWJ0cmFjdEJsb2NrOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9CbG9ja3MvdHJhbnNmb3JtQmxvY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUv
QmxvY2tzL3RyYW5zZm9ybUJsb2NrLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogVHJhbnNm
b3JtQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJhbnNmb3Jt
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRyYW5zZm9ybUJsb2NrOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xp
Yi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L25vZGVNYXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2Nr
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBl
U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisK
KworCisKKworLyoqCisgKiBCbG9jayB1c2VkIHRvIHRyYW5zZm9ybSBhIHZlY3RvciAoMiwgMyBv
ciA0KSB3aXRoIGEgbWF0cml4LiBJdCB3aWxsIGdlbmVyYXRlIGEgVmVjdG9yNAorICovCit2YXIg
VHJhbnNmb3JtQmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVHJhbnNmb3Jt
QmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBUcmFuc2Zvcm1C
bG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBUcmFuc2Zvcm1CbG9jayhuYW1lKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4
KSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgdmFsdWUgdG8g
dXNlIHRvIGNvbXBsZW1lbnQgVyB2YWx1ZSB0byB0cmFuc2Zvcm0gaXQgdG8gYSBWZWN0b3I0Cisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5jb21wbGVtZW50VyA9IDE7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBEZWZpbmVzIHRoZSB2YWx1ZSB0byB1c2UgdG8gY29tcGxlbWVudCB6IHZhbHVl
IHRvIHRyYW5zZm9ybSBpdCB0byBhIFZlY3RvcjQKKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LmNvbXBsZW1lbnRaID0gMDsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgidmVjdG9yIiwg
X25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9E
ZXRlY3QpOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJ0cmFuc2Zvcm0iLCBfbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uTWF0cml4KTsKKyAg
ICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQoIm91dHB1dCIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0KTsKKyAgICAgICAgcmV0dXJu
IF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5h
bWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFRyYW5zZm9y
bUJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAiVHJhbnNmb3JtQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFRyYW5zZm9ybUJsb2NrLnByb3RvdHlwZSwgInZlY3RvciIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgdGhlIHZlY3RvciBpbnB1dAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzBdOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtQmxvY2sucHJv
dG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3V0
cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybUJsb2NrLnByb3RvdHlwZSwgInRyYW5z
Zm9ybSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG1hdHJpeCB0cmFuc2Zv
cm0gaW5wdXQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1sxXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgVHJh
bnNmb3JtQmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7Cisg
ICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7Cisg
ICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICB2YXIgdmVjdG9y
ID0gdGhpcy52ZWN0b3I7CisgICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybTsK
KyAgICAgICAgaWYgKHZlY3Rvci5jb25uZWN0ZWRQb2ludCkgeworICAgICAgICAgICAgc3dpdGNo
ICh2ZWN0b3IuY29ubmVjdGVkUG9pbnQudHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjI6
CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRoaXMuX2Rl
Y2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIgKyB0cmFuc2Zvcm0uYXNzb2NpYXRl
ZFZhcmlhYmxlTmFtZSArICIgKiB2ZWM0KCIgKyB2ZWN0b3IuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICIsICIgKyB0aGlzLl93cml0ZUZsb2F0KHRoaXMuY29tcGxlbWVudFopICsgIiwgIiArIHRo
aXMuX3dyaXRlRmxvYXQodGhpcy5jb21wbGVtZW50VykgKyAiKTtcclxuIik7CisgICAgICAgICAg
ICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5
cGVzIl0uVmVjdG9yMzoKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJp
bmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dChvdXRwdXQsIHN0YXRlKSArICgiID0gIiArIHRyYW5z
Zm9ybS5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiAqIHZlYzQoIiArIHZlY3Rvci5hc3NvY2lh
dGVkVmFyaWFibGVOYW1lICsgIiwgIiArIHRoaXMuX3dyaXRlRmxvYXQodGhpcy5jb21wbGVtZW50
VykgKyAiKTtcclxuIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5n
ICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIgKyB0cmFuc2Zv
cm0uYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIgKiAiICsgdmVjdG9yLmFzc29jaWF0ZWRWYXJp
YWJsZU5hbWUgKyAiO1xyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBUcmFu
c2Zvcm1CbG9jay5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2
YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9zdXBlci5wcm90b3R5cGUuc2VyaWFsaXplLmNhbGwo
dGhpcyk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29tcGxlbWVudFogPSB0aGlzLmNv
bXBsZW1lbnRaOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvbXBsZW1lbnRXID0gdGhp
cy5jb21wbGVtZW50VzsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAg
fTsKKyAgICBUcmFuc2Zvcm1CbG9jay5wcm90b3R5cGUuX2Rlc2VyaWFsaXplID0gZnVuY3Rpb24g
KHNlcmlhbGl6YXRpb25PYmplY3QsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIF9zdXBlci5w
cm90b3R5cGUuX2Rlc2VyaWFsaXplLmNhbGwodGhpcywgc2VyaWFsaXphdGlvbk9iamVjdCwgc2Nl
bmUsIHJvb3RVcmwpOworICAgICAgICB0aGlzLmNvbXBsZW1lbnRaID0gc2VyaWFsaXphdGlvbk9i
amVjdC5jb21wbGVtZW50WiAhPT0gdW5kZWZpbmVkID8gc2VyaWFsaXphdGlvbk9iamVjdC5jb21w
bGVtZW50WiA6IDAuMDsKKyAgICAgICAgdGhpcy5jb21wbGVtZW50VyA9IHNlcmlhbGl6YXRpb25P
YmplY3QuY29tcGxlbWVudFcgIT09IHVuZGVmaW5lZCA/IHNlcmlhbGl6YXRpb25PYmplY3QuY29t
cGxlbWVudFcgOiAxLjA7CisgICAgfTsKKyAgICBUcmFuc2Zvcm1CbG9jay5wcm90b3R5cGUuX2R1
bXBQcm9wZXJ0aWVzQ29kZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGNvZGVTdHJpbmcg
PSB0aGlzLl9jb2RlVmFyaWFibGVOYW1lICsgIi5jb21wbGVtZW50WiA9ICIgKyB0aGlzLmNvbXBs
ZW1lbnRaICsgIjtcclxuIjsKKyAgICAgICAgY29kZVN0cmluZyArPSB0aGlzLl9jb2RlVmFyaWFi
bGVOYW1lICsgIi5jb21wbGVtZW50VyA9ICIgKyB0aGlzLmNvbXBsZW1lbnRXICsgIjtcclxuIjsK
KyAgICAgICAgcmV0dXJuIGNvZGVTdHJpbmc7CisgICAgfTsKKyAgICByZXR1cm4gVHJhbnNmb3Jt
QmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLlRy
YW5zZm9ybUJsb2NrIl0gPSBUcmFuc2Zvcm1CbG9jazsKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL3RyaWdvbm9tZXRyeUJsb2NrLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy90cmlnb25vbWV0cnlCbG9jay50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9ucywgVHJpZ29ub21l
dHJ5QmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJpZ29ub21l
dHJ5QmxvY2tPcGVyYXRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUcmlnb25vbWV0cnlCbG9j
a09wZXJhdGlvbnM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJpZ29ub21ldHJ5QmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIFRyaWdvbm9tZXRyeUJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVN
YXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisK
KworLyoqCisgKiBPcGVyYXRpb25zIHN1cHBvcnRlZCBieSB0aGUgVHJpZ29ub21ldHJ5IGJsb2Nr
CisgKi8KK3ZhciBUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnM7CisoZnVuY3Rpb24gKFRyaWdv
bm9tZXRyeUJsb2NrT3BlcmF0aW9ucykgeworICAgIC8qKiBDb3MgKi8KKyAgICBUcmlnb25vbWV0
cnlCbG9ja09wZXJhdGlvbnNbVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zWyJDb3MiXSA9IDBd
ID0gIkNvcyI7CisgICAgLyoqIFNpbiAqLworICAgIFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9u
c1tUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnNbIlNpbiJdID0gMV0gPSAiU2luIjsKKyAgICAv
KiogQWJzICovCisgICAgVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zW1RyaWdvbm9tZXRyeUJs
b2NrT3BlcmF0aW9uc1siQWJzIl0gPSAyXSA9ICJBYnMiOworICAgIC8qKiBFeHAgKi8KKyAgICBU
cmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnNbVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zWyJF
eHAiXSA9IDNdID0gIkV4cCI7CisgICAgLyoqIEV4cDIgKi8KKyAgICBUcmlnb25vbWV0cnlCbG9j
a09wZXJhdGlvbnNbVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zWyJFeHAyIl0gPSA0XSA9ICJF
eHAyIjsKKyAgICAvKiogUm91bmQgKi8KKyAgICBUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnNb
VHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zWyJSb3VuZCJdID0gNV0gPSAiUm91bmQiOworICAg
IC8qKiBGbG9vciAqLworICAgIFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9uc1tUcmlnb25vbWV0
cnlCbG9ja09wZXJhdGlvbnNbIkZsb29yIl0gPSA2XSA9ICJGbG9vciI7CisgICAgLyoqIENlaWxp
bmcgKi8KKyAgICBUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnNbVHJpZ29ub21ldHJ5QmxvY2tP
cGVyYXRpb25zWyJDZWlsaW5nIl0gPSA3XSA9ICJDZWlsaW5nIjsKK30pKFRyaWdvbm9tZXRyeUJs
b2NrT3BlcmF0aW9ucyB8fCAoVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zID0ge30pKTsKKy8q
KgorICogQmxvY2sgdXNlZCB0byBhcHBseSB0cmlnb25vbWV0cnkgb3BlcmF0aW9uIHRvIGZsb2F0
cworICovCit2YXIgVHJpZ29ub21ldHJ5QmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
X3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRl
bmRzIl0oVHJpZ29ub21ldHJ5QmxvY2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRl
cyBhIG5ldyBUcmlnb25vbWV0cnlCbG9jaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhl
IGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBUcmlnb25vbWV0cnlCbG9jayhuYW1l
KSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIF9ub2RlTWF0
ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzIl0uTmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3Igc2V0cyB0aGUgb3BlcmF0aW9uIGFwcGxpZWQgYnkgdGhlIGJsb2NrCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5vcGVyYXRpb24gPSBUcmlnb25vbWV0cnlCbG9ja09wZXJh
dGlvbnMuQ29zOworICAgICAgICBfdGhpcy5yZWdpc3RlcklucHV0KCJpbnB1dCIsIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCk7CisgICAg
ICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQpOworICAgICAgICByZXR1cm4gX3Ro
aXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQor
ICAgICAqIEByZXR1cm5zIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgVHJpZ29ub21ldHJ5
QmxvY2sucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuICJUcmlnb25vbWV0cnlCbG9jayI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoVHJpZ29ub21ldHJ5QmxvY2sucHJvdG90eXBlLCAiaW5wdXQiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHRoZSBpbnB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1swXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyaWdvbm9tZXRy
eUJsb2NrLnByb3RvdHlwZSwgIm91dHB1dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIG91dHB1dCBjb21wb25lbnQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMF07CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIFRyaWdvbm9tZXRyeUJsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9jayA9IGZ1
bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJsb2NrLmNh
bGwodGhpcywgc3RhdGUpOworICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fb3V0cHV0c1swXTsK
KyAgICAgICAgdmFyIG9wZXJhdGlvbiA9ICIiOworICAgICAgICBzd2l0Y2ggKHRoaXMub3BlcmF0
aW9uKSB7CisgICAgICAgICAgICBjYXNlIFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9ucy5Db3M6
IHsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSAiY29zIjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJpZ29ub21ldHJ5QmxvY2tP
cGVyYXRpb25zLlNpbjogeworICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9ICJzaW4iOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBUcmln
b25vbWV0cnlCbG9ja09wZXJhdGlvbnMuQWJzOiB7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9u
ID0gImFicyI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9ucy5FeHA6IHsKKyAgICAgICAgICAg
ICAgICBvcGVyYXRpb24gPSAiZXhwIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNhc2UgVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zLkV4cDI6
IHsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSAiZXhwMiI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRyaWdvbm9tZXRyeUJsb2Nr
T3BlcmF0aW9ucy5Sb3VuZDogeworICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9ICJyb3VuZCI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNl
IFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9ucy5GbG9vcjogeworICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbiA9ICJmbG9vciI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIFRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9ucy5DZWlsaW5nOiB7
CisgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gImNlaWwiOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9u
U3RyaW5nICs9IHRoaXMuX2RlY2xhcmVPdXRwdXQob3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIgKyBv
cGVyYXRpb24gKyAiKCIgKyB0aGlzLmlucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiKTtc
clxuIik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgVHJpZ29ub21ldHJ5Qmxv
Y2sucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlh
bGl6YXRpb25PYmplY3QgPSBfc3VwZXIucHJvdG90eXBlLnNlcmlhbGl6ZS5jYWxsKHRoaXMpOwor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm9wZXJhdGlvbiA9IHRoaXMub3BlcmF0aW9uOwor
ICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIFRyaWdvbm9t
ZXRyeUJsb2NrLnByb3RvdHlwZS5fZGVzZXJpYWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlv
bk9iamVjdCwgc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fZGVz
ZXJpYWxpemUuY2FsbCh0aGlzLCBzZXJpYWxpemF0aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCk7
CisgICAgICAgIHRoaXMub3BlcmF0aW9uID0gc2VyaWFsaXphdGlvbk9iamVjdC5vcGVyYXRpb247
CisgICAgfTsKKyAgICByZXR1cm4gVHJpZ29ub21ldHJ5QmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxC
bG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7
CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0
b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLlRyaWdvbm9tZXRyeUJsb2NrIl0gPSBUcmln
b25vbWV0cnlCbG9jazsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUv
QmxvY2tzL3ZlY3Rvck1lcmdlckJsb2NrLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2Rl
L0Jsb2Nrcy92ZWN0b3JNZXJnZXJCbG9jay50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IFZlY3Rvck1lcmdlckJsb2NrICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlZlY3Rvck1lcmdlckJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBWZWN0b3JNZXJnZXJCbG9j
azsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25v
ZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9u
b2RlTWF0ZXJpYWxCbG9jay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxz
L05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5
cGVTdG9yZS50cyIpOworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBjcmVhdGUgYSBW
ZWN0b3IyLzMvNCBvdXQgb2YgaW5kaXZpZHVhbCBpbnB1dHMgKG9uZSBmb3IgZWFjaCBjb21wb25l
bnQpCisgKi8KK3ZhciBWZWN0b3JNZXJnZXJCbG9jayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShWZWN0b3JNZXJnZXJCbG9jaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGUgYSBuZXcgVmVjdG9yTWVyZ2VyQmxvY2sKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRo
ZSBibG9jayBuYW1lCisgICAgICovCisgICAgZnVuY3Rpb24gVmVjdG9yTWVyZ2VyQmxvY2sobmFt
ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBfbm9kZU1h
dGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk5vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5yZWdp
c3RlcklucHV0KCJ4IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlcyJdLkZsb2F0KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgieSIsIF9ub2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdCk7Cisg
ICAgICAgIF90aGlzLnJlZ2lzdGVySW5wdXQoInoiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQsIHRydWUpOworICAgICAgICBfdGhpcy5y
ZWdpc3RlcklucHV0KCJ3IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlcyJdLkZsb2F0LCB0cnVlKTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJPdXRwdXQo
Inh5enciLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
Il0uVmVjdG9yNCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJ4eXoiLCBfbm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yMyk7Cisg
ICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJ4eSIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IyKTsKKyAgICAgICAgcmV0dXJuIF90
aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5hbWUK
KyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFZlY3Rvck1lcmdl
ckJsb2NrLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAiVmVjdG9yTWVyZ2VyQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFZlY3Rvck1lcmdlckJsb2NrLnByb3RvdHlwZSwgIngiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSB4IGNvbXBvbmVudCAoaW5wdXQpCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNbMF07
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWZWN0b3JNZXJn
ZXJCbG9jay5wcm90b3R5cGUsICJ5IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgeSBjb21wb25lbnQgKGlucHV0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzWzFdOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVjdG9yTWVyZ2VyQmxvY2sucHJvdG90
eXBlLCAieiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHogY29tcG9uZW50
IChpbnB1dCkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2lucHV0c1syXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFZlY3Rvck1lcmdlckJsb2NrLnByb3RvdHlwZSwgInciLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB3IGNvbXBvbmVudCAoaW5wdXQpCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9pbnB1dHNbM107CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShWZWN0b3JNZXJnZXJCbG9jay5wcm90b3R5cGUsICJ4eXp3IiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyB0aGUgeHl6dyBjb21wb25lbnQgKG91dHB1dCkKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291
dHB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShW
ZWN0b3JNZXJnZXJCbG9jay5wcm90b3R5cGUsICJ4eXoiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSB4eXogY29tcG9uZW50IChvdXRwdXQpCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzFd
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVjdG9yTWVy
Z2VyQmxvY2sucHJvdG90eXBlLCAieHkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSB4eSBjb21wb25lbnQgKG91dHB1dCkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbMl07CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIFZlY3Rvck1lcmdlckJsb2NrLnByb3RvdHlwZS5fYnVpbGRCbG9jayA9
IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9idWlsZEJsb2Nr
LmNhbGwodGhpcywgc3RhdGUpOworICAgICAgICB2YXIgeElucHV0ID0gdGhpcy54OworICAgICAg
ICB2YXIgeUlucHV0ID0gdGhpcy55OworICAgICAgICB2YXIgeklucHV0ID0gdGhpcy56OworICAg
ICAgICB2YXIgd0lucHV0ID0gdGhpcy53OworICAgICAgICB2YXIgdjRPdXRwdXQgPSB0aGlzLl9v
dXRwdXRzWzBdOworICAgICAgICB2YXIgdjNPdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzFdOworICAg
ICAgICB2YXIgdjJPdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzJdOworICAgICAgICBpZiAodjRPdXRw
dXQuaGFzRW5kcG9pbnRzKSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyAr
PSB0aGlzLl9kZWNsYXJlT3V0cHV0KHY0T3V0cHV0LCBzdGF0ZSkgKyAoIiA9IHZlYzQoIiArIHRo
aXMuX3dyaXRlVmFyaWFibGUoeElucHV0KSArICIsICIgKyB0aGlzLl93cml0ZVZhcmlhYmxlKHlJ
bnB1dCkgKyAiLCAiICsgKHpJbnB1dC5pc0Nvbm5lY3RlZCA/IHRoaXMuX3dyaXRlVmFyaWFibGUo
eklucHV0KSA6ICIwLjAiKSArICIsICIgKyAoeklucHV0LmlzQ29ubmVjdGVkID8gdGhpcy5fd3Jp
dGVWYXJpYWJsZSh3SW5wdXQpIDogIjAuMCIpICsgIik7XHJcbiIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHYzT3V0cHV0Lmhhc0VuZHBvaW50cykgeworICAgICAgICAgICAgc3RhdGUu
Y29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dCh2M091dHB1dCwgc3RhdGUp
ICsgKCIgPSB2ZWMzKCIgKyB0aGlzLl93cml0ZVZhcmlhYmxlKHhJbnB1dCkgKyAiLCAiICsgdGhp
cy5fd3JpdGVWYXJpYWJsZSh5SW5wdXQpICsgIiwgIiArICh6SW5wdXQuaXNDb25uZWN0ZWQgPyB0
aGlzLl93cml0ZVZhcmlhYmxlKHpJbnB1dCkgOiAiMC4wIikgKyAiKTtcclxuIik7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAodjJPdXRwdXQuaGFzRW5kcG9pbnRzKSB7CisgICAgICAgICAg
ICBzdGF0ZS5jb21waWxhdGlvblN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KHYyT3V0cHV0
LCBzdGF0ZSkgKyAoIiA9IHZlYzIoIiArIHRoaXMuX3dyaXRlVmFyaWFibGUoeElucHV0KSArICIs
ICIgKyB0aGlzLl93cml0ZVZhcmlhYmxlKHlJbnB1dCkgKyAiKTtcclxuIik7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICByZXR1cm4gVmVjdG9yTWVyZ2VyQmxv
Y2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJO
b2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLlZlY3Rv
ck1lcmdlckJsb2NrIl0gPSBWZWN0b3JNZXJnZXJCbG9jazsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWF0ZXJpYWxzL05vZGUvQmxvY2tzL3ZlY3RvclNwbGl0dGVyQmxvY2sudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvdmVjdG9yU3BsaXR0ZXJCbG9jay50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogVmVjdG9yU3BsaXR0ZXJCbG9jayAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWZWN0b3JTcGxpdHRlckJsb2NrIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBWZWN0b3JTcGxpdHRlckJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVN
YXRlcmlhbEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMgKi8gIi4vTWF0
ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisK
KworLyoqCisgKiBCbG9jayB1c2VkIHRvIGV4cGFuZCBhIFZlY3RvcjMvNCBpbnRvIDQgb3V0cHV0
cyAob25lIGZvciBlYWNoIGNvbXBvbmVudCkKKyAqLwordmFyIFZlY3RvclNwbGl0dGVyQmxvY2sg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVmVjdG9yU3BsaXR0ZXJCbG9jaywgX3N1
cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgVmVjdG9yU3BsaXR0ZXJCbG9jawor
ICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBWZWN0b3JTcGxpdHRlckJsb2NrKG5hbWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
X3N1cGVyLmNhbGwodGhpcywgbmFtZSwgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVu
dCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgieHl6dyIsIF9ub2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0LCB0cnVl
KTsKKyAgICAgICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgieHl6ICIsIF9ub2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3IzLCB0cnVlKTsKKyAgICAg
ICAgX3RoaXMucmVnaXN0ZXJJbnB1dCgieHkgIiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjIsIHRydWUpOworICAgICAgICBfdGhpcy5y
ZWdpc3Rlck91dHB1dCgieHl6IiwgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjMpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1dCgi
eHkiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0u
VmVjdG9yMik7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJ4IiwgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0KTsKKyAgICAgICAg
X3RoaXMucmVnaXN0ZXJPdXRwdXQoInkiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzIl0uRmxvYXQpOworICAgICAgICBfdGhpcy5yZWdpc3Rlck91dHB1
dCgieiIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMi
XS5GbG9hdCk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVyT3V0cHV0KCJ3IiwgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkZsb2F0KTsKKyAgICAgICAg
cmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNs
YXNzIG5hbWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFZl
Y3RvclNwbGl0dGVyQmxvY2sucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuICJWZWN0b3JTcGxpdHRlckJsb2NrIjsKKyAgICB9OworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShWZWN0b3JTcGxpdHRlckJsb2NrLnByb3RvdHlwZSwgInh5enciLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB4eXp3IGNvbXBvbmVudCAoaW5wdXQp
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9pbnB1dHNbMF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShWZWN0b3JTcGxpdHRlckJsb2NrLnByb3RvdHlwZSwgInh5ekluIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgeHl6IGNvbXBvbmVudCAoaW5wdXQpCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9pbnB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShWZWN0b3JTcGxpdHRlckJsb2NrLnByb3RvdHlwZSwgInh5SW4iLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIHRoZSB4eSBjb21wb25lbnQgKGlucHV0KQorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5w
dXRzWzJdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVj
dG9yU3BsaXR0ZXJCbG9jay5wcm90b3R5cGUsICJ4eXpPdXQiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSB4eXogY29tcG9uZW50IChvdXRwdXQpCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRz
WzBdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVjdG9y
U3BsaXR0ZXJCbG9jay5wcm90b3R5cGUsICJ4eU91dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgdGhlIHh5IGNvbXBvbmVudCAob3V0cHV0KQorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1sxXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZlY3RvclNwbGl0
dGVyQmxvY2sucHJvdG90eXBlLCAieCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
dGhlIHggY29tcG9uZW50IChvdXRwdXQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzWzJdOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVjdG9yU3BsaXR0ZXJCbG9jay5w
cm90b3R5cGUsICJ5IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgeSBjb21w
b25lbnQgKG91dHB1dCkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNbM107CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWZWN0b3JTcGxpdHRlckJsb2NrLnByb3RvdHlwZSwg
InoiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB6IGNvbXBvbmVudCAob3V0
cHV0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fb3V0cHV0c1s0XTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFZlY3RvclNwbGl0dGVyQmxvY2sucHJvdG90eXBlLCAidyIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHcgY29tcG9uZW50IChvdXRwdXQpCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9vdXRwdXRzWzVdOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBWZWN0b3JTcGxpdHRlckJs
b2NrLnByb3RvdHlwZS5faW5wdXRSZW5hbWUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICBz
d2l0Y2ggKG5hbWUpIHsKKyAgICAgICAgICAgIGNhc2UgInh5ICI6CisgICAgICAgICAgICAgICAg
cmV0dXJuICJ4eUluIjsKKyAgICAgICAgICAgIGNhc2UgInh5eiAiOgorICAgICAgICAgICAgICAg
IHJldHVybiAieHl6SW4iOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbmFtZTsKKyAgICAgICAgfQorICAgIH07CisgICAgVmVjdG9yU3BsaXR0ZXJCbG9jay5w
cm90b3R5cGUuX291dHB1dFJlbmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHN3aXRj
aCAobmFtZSkgeworICAgICAgICAgICAgY2FzZSAieHkiOgorICAgICAgICAgICAgICAgIHJldHVy
biAieHlPdXQiOworICAgICAgICAgICAgY2FzZSAieHl6IjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gInh5ek91dCI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBuYW1lOworICAgICAgICB9CisgICAgfTsKKyAgICBWZWN0b3JTcGxpdHRlckJsb2NrLnByb3Rv
dHlwZS5fYnVpbGRCbG9jayA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBfc3VwZXIucHJv
dG90eXBlLl9idWlsZEJsb2NrLmNhbGwodGhpcywgc3RhdGUpOworICAgICAgICB2YXIgaW5wdXQg
PSB0aGlzLnh5encuaXNDb25uZWN0ZWQgPyB0aGlzLnh5encgOiB0aGlzLnh5ekluLmlzQ29ubmVj
dGVkID8gdGhpcy54eXpJbiA6IHRoaXMueHlJbjsKKyAgICAgICAgdmFyIHh5ek91dHB1dCA9IHRo
aXMuX291dHB1dHNbMF07CisgICAgICAgIHZhciB4eU91dHB1dCA9IHRoaXMuX291dHB1dHNbMV07
CisgICAgICAgIHZhciB4T3V0cHV0ID0gdGhpcy5fb3V0cHV0c1syXTsKKyAgICAgICAgdmFyIHlP
dXRwdXQgPSB0aGlzLl9vdXRwdXRzWzNdOworICAgICAgICB2YXIgek91dHB1dCA9IHRoaXMuX291
dHB1dHNbNF07CisgICAgICAgIHZhciB3T3V0cHV0ID0gdGhpcy5fb3V0cHV0c1s1XTsKKyAgICAg
ICAgaWYgKHh5ek91dHB1dC5oYXNFbmRwb2ludHMpIHsKKyAgICAgICAgICAgIGlmIChpbnB1dCA9
PT0gdGhpcy54eUluKSB7CisgICAgICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcg
Kz0gdGhpcy5fZGVjbGFyZU91dHB1dCh4eXpPdXRwdXQsIHN0YXRlKSArICgiID0gdmVjMygiICsg
aW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIsIDAuMCk7XHJcbiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dCh4eXpPdXRwdXQsIHN0YXRlKSArICgiID0g
IiArIGlucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLnh5ejtcclxuIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHh5T3V0cHV0Lmhhc0VuZHBvaW50cykgewor
ICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1
dCh4eU91dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgaW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFt
ZSArICIueHk7XHJcbiIpOworICAgICAgICB9CisgICAgICAgIGlmICh4T3V0cHV0Lmhhc0VuZHBv
aW50cykgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gdGhpcy5fZGVj
bGFyZU91dHB1dCh4T3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIgKyBpbnB1dC5hc3NvY2lhdGVkVmFy
aWFibGVOYW1lICsgIi54O1xyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeU91dHB1dC5o
YXNFbmRwb2ludHMpIHsKKyAgICAgICAgICAgIHN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9IHRo
aXMuX2RlY2xhcmVPdXRwdXQoeU91dHB1dCwgc3RhdGUpICsgKCIgPSAiICsgaW5wdXQuYXNzb2Np
YXRlZFZhcmlhYmxlTmFtZSArICIueTtcclxuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHpP
dXRwdXQuaGFzRW5kcG9pbnRzKSB7CisgICAgICAgICAgICBzdGF0ZS5jb21waWxhdGlvblN0cmlu
ZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KHpPdXRwdXQsIHN0YXRlKSArICgiID0gIiArIGlucHV0
LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLno7XHJcbiIpOworICAgICAgICB9CisgICAgICAg
IGlmICh3T3V0cHV0Lmhhc0VuZHBvaW50cykgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRp
b25TdHJpbmcgKz0gdGhpcy5fZGVjbGFyZU91dHB1dCh3T3V0cHV0LCBzdGF0ZSkgKyAoIiA9ICIg
KyBpbnB1dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIi53O1xyXG4iKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBWZWN0b3JTcGxpdHRlckJs
b2NrOworfShfbm9kZU1hdGVyaWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
Tm9kZU1hdGVyaWFsQmxvY2siXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5WZWN0
b3JTcGxpdHRlckJsb2NrIl0gPSBWZWN0b3JTcGxpdHRlckJsb2NrOworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3Mvdmlld0RpcmVjdGlvbkJsb2NrLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3Mvdmlld0RpcmVjdGlvbkJsb2NrLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFZpZXdEaXJlY3Rpb25CbG9jayAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWaWV3RGlyZWN0aW9uQmxvY2siLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFZpZXdEaXJlY3Rpb25CbG9jazsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lmpz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0
ZXJpYWxCbG9jayAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovICIuL01hdGVy
aWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlTWF0
ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVNYXRlcmlhbFN5
c3RlbVZhbHVlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfSW5wdXRfaW5wdXRCbG9ja19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9JbnB1dC9p
bnB1dEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9JbnB1dC9pbnB1dEJsb2NrLnRz
Iik7CisKKworCisKKworCisKKy8qKgorICogQmxvY2sgdXNlZCB0byBnZXQgdGhlIHZpZXcgZGly
ZWN0aW9uCisgKi8KK3ZhciBWaWV3RGlyZWN0aW9uQmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oVmlld0RpcmVjdGlvbkJsb2NrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgVmlld0RpcmVjdGlvbkJsb2NrCisgICAgICogQHBhcmFtIG5hbWUgZGVm
aW5lcyB0aGUgYmxvY2sgbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIFZpZXdEaXJlY3Rpb25C
bG9jayhuYW1lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUs
IF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
Tm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uTmV1dHJhbCkgfHwgdGhpczsKKyAgICAgICAgX3Ro
aXMucmVnaXN0ZXJJbnB1dCgid29ybGRQb3NpdGlvbiIsIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0KTsKKyAgICAgICAgX3RoaXMucmVn
aXN0ZXJJbnB1dCgiY2FtZXJhUG9zaXRpb24iLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9u
UG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uVmVjdG9yMyk7CisgICAgICAgIF90aGlzLnJlZ2lzdGVy
T3V0cHV0KCJvdXRwdXQiLCBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzIl0uVmVjdG9yMyk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAg
LyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMg
dGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBWaWV3RGlyZWN0aW9uQmxvY2sucHJvdG90eXBl
LmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJWaWV3RGlyZWN0
aW9uQmxvY2siOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZpZXdEaXJlY3Rp
b25CbG9jay5wcm90b3R5cGUsICJ3b3JsZFBvc2l0aW9uIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyB0aGUgd29ybGQgcG9zaXRpb24gY29tcG9uZW50CisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNb
MF07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWaWV3RGly
ZWN0aW9uQmxvY2sucHJvdG90eXBlLCAiY2FtZXJhUG9zaXRpb24iLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHRoZSBjYW1lcmEgcG9zaXRpb24gY29tcG9uZW50CisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9p
bnB1dHNbMV07CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShW
aWV3RGlyZWN0aW9uQmxvY2sucHJvdG90eXBlLCAib3V0cHV0IiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgb3V0cHV0IGNvbXBvbmVudAorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1swXTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgVmlld0RpcmVjdGlvbkJsb2NrLnByb3RvdHlwZS5hdXRv
Q29uZmlndXJlID0gZnVuY3Rpb24gKG1hdGVyaWFsKSB7CisgICAgICAgIGlmICghdGhpcy5jYW1l
cmFQb3NpdGlvbi5pc0Nvbm5lY3RlZCkgeworICAgICAgICAgICAgdmFyIGNhbWVyYVBvc2l0aW9u
SW5wdXQgPSBtYXRlcmlhbC5nZXRJbnB1dEJsb2NrQnlQcmVkaWNhdGUoZnVuY3Rpb24gKGIpIHsg
cmV0dXJuIGIuc3lzdGVtVmFsdWUgPT09IF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIl0uQ2FtZXJh
UG9zaXRpb247IH0pOworICAgICAgICAgICAgaWYgKCFjYW1lcmFQb3NpdGlvbklucHV0KSB7Cisg
ICAgICAgICAgICAgICAgY2FtZXJhUG9zaXRpb25JbnB1dCA9IG5ldyBfSW5wdXRfaW5wdXRCbG9j
a19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJJbnB1dEJsb2NrIl0oImNhbWVyYVBvc2l0
aW9uIik7CisgICAgICAgICAgICAgICAgY2FtZXJhUG9zaXRpb25JbnB1dC5zZXRBc1N5c3RlbVZh
bHVlKF9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIl0uQ2FtZXJhUG9zaXRpb24pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FtZXJhUG9zaXRpb25JbnB1dC5vdXRwdXQuY29ubmVjdFRvKHRo
aXMuY2FtZXJhUG9zaXRpb24pOworICAgICAgICB9CisgICAgfTsKKyAgICBWaWV3RGlyZWN0aW9u
QmxvY2sucHJvdG90eXBlLl9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAg
IF9zdXBlci5wcm90b3R5cGUuX2J1aWxkQmxvY2suY2FsbCh0aGlzLCBzdGF0ZSk7CisgICAgICAg
IHZhciBvdXRwdXQgPSB0aGlzLl9vdXRwdXRzWzBdOworICAgICAgICBzdGF0ZS5jb21waWxhdGlv
blN0cmluZyArPSB0aGlzLl9kZWNsYXJlT3V0cHV0KG91dHB1dCwgc3RhdGUpICsgKCIgPSBub3Jt
YWxpemUoIiArIHRoaXMuY2FtZXJhUG9zaXRpb24uYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSArICIg
LSAiICsgdGhpcy53b3JsZFBvc2l0aW9uLmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgKyAiLnh5eik7
XHJcbiIpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIHJldHVybiBWaWV3RGly
ZWN0aW9uQmxvY2s7Cit9KF9ub2RlTWF0ZXJpYWxCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9jayJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZ
TE9OLlZpZXdEaXJlY3Rpb25CbG9jayJdID0gVmlld0RpcmVjdGlvbkJsb2NrOworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvTm9kZS9Ob2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludE1vZGUudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUv
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRN
b2RlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50TW9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlOyB9KTsKKy8qKgorICogRW51bSBkZWZpbmluZyB0aGUg
bW9kZSBvZiBhIE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50CisgKi8KK3ZhciBOb2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludE1vZGU7CisoZnVuY3Rpb24gKE5vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSkgeworICAgIC8qKiBWYWx1ZSBpcyBhbiB1bmlmb3Jt
ICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlW05vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZVsiVW5pZm9ybSJdID0gMF0gPSAiVW5pZm9ybSI7Cisg
ICAgLyoqIFZhbHVlIGlzIGEgbWVzaCBhdHRyaWJ1dGUgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludE1vZGVbTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2Rl
WyJBdHRyaWJ1dGUiXSA9IDFdID0gIkF0dHJpYnV0ZSI7CisgICAgLyoqIFZhbHVlIGlzIGEgdmFy
eWluZyBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyAqLworICAgIE5vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZVtOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludE1vZGVbIlZhcnlpbmciXSA9IDJdID0gIlZhcnlpbmciOworICAgIC8qKiBNb2RlIGlzIHVu
ZGVmaW5lZCAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZVtOb2Rl
TWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludE1vZGVbIlVuZGVmaW5lZCJdID0gM10gPSAiVW5k
ZWZpbmVkIjsKK30pKE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50TW9kZSB8fCAoTm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRNb2RlID0ge30pKTsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvT3B0aW1pemVycy9pbmRleC50cyI6CisvKiEqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0
ZXJpYWxzL05vZGUvT3B0aW1pemVycy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBOb2Rl
TWF0ZXJpYWxPcHRpbWl6ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9ub2RlTWF0ZXJpYWxPcHRpbWl6ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9kZU1hdGVyaWFsT3B0aW1pemVyICovICIu
L01hdGVyaWFscy9Ob2RlL09wdGltaXplcnMvbm9kZU1hdGVyaWFsT3B0aW1pemVyLnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbE9wdGltaXplciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX25vZGVNYXRlcmlhbE9wdGltaXplcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJO
b2RlTWF0ZXJpYWxPcHRpbWl6ZXIiXTsgfSk7CisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9NYXRlcmlhbHMvTm9kZS9PcHRpbWl6ZXJzL25vZGVNYXRlcmlhbE9wdGltaXplci50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL09wdGltaXplcnMvbm9kZU1hdGVyaWFs
T3B0aW1pemVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBOb2RlTWF0
ZXJpYWxPcHRpbWl6ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9k
ZU1hdGVyaWFsT3B0aW1pemVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBOb2RlTWF0ZXJpYWxPcHRp
bWl6ZXI7IH0pOworLyoqCisgKiBSb290IGNsYXNzIGZvciBhbGwgbm9kZSBtYXRlcmlhbCBvcHRp
bWl6ZXJzCisgKi8KK3ZhciBOb2RlTWF0ZXJpYWxPcHRpbWl6ZXIgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gTm9kZU1hdGVyaWFsT3B0aW1pemVyKCkgeworICAg
IH0KKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIG9wdGltaXplIGEgTm9kZU1hdGVy
aWFsIGdyYXBoCisgICAgICogQHBhcmFtIHZlcnRleE91dHB1dE5vZGVzIGRlZmluZXMgdGhlIGxp
c3Qgb2Ygb3V0cHV0IG5vZGVzIGZvciB0aGUgdmVydGV4IHNoYWRlcgorICAgICAqIEBwYXJhbSBm
cmFnbWVudE91dHB1dE5vZGVzIGRlZmluZXMgdGhlIGxpc3Qgb2Ygb3V0cHV0IG5vZGVzIGZvciB0
aGUgZnJhZ21lbnQgc2hhZGVyCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsT3B0aW1pemVyLnBy
b3RvdHlwZS5vcHRpbWl6ZSA9IGZ1bmN0aW9uICh2ZXJ0ZXhPdXRwdXROb2RlcywgZnJhZ21lbnRP
dXRwdXROb2RlcykgeworICAgICAgICAvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQKKyAgICB9Owor
ICAgIHJldHVybiBOb2RlTWF0ZXJpYWxPcHRpbWl6ZXI7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvaW5kZXgudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IE5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cywgTm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlcywgTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50LCBOb2RlTWF0ZXJp
YWxCbG9jaywgTm9kZU1hdGVyaWFsRGVmaW5lcywgTm9kZU1hdGVyaWFsLCBOb2RlTWF0ZXJpYWxT
eXN0ZW1WYWx1ZXMsIE11bHRpcGx5QmxvY2ssIEFkZEJsb2NrLCBTY2FsZUJsb2NrLCBDbGFtcEJs
b2NrLCBDcm9zc0Jsb2NrLCBEb3RCbG9jaywgVHJhbnNmb3JtQmxvY2ssIFJlbWFwQmxvY2ssIE5v
cm1hbGl6ZUJsb2NrLCBUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnMsIFRyaWdvbm9tZXRyeUJs
b2NrLCBDb2xvck1lcmdlckJsb2NrLCBWZWN0b3JNZXJnZXJCbG9jaywgQ29sb3JTcGxpdHRlckJs
b2NrLCBWZWN0b3JTcGxpdHRlckJsb2NrLCBMZXJwQmxvY2ssIERpdmlkZUJsb2NrLCBTdWJ0cmFj
dEJsb2NrLCBTdGVwQmxvY2ssIE9wcG9zaXRlQmxvY2ssIFZpZXdEaXJlY3Rpb25CbG9jaywgRnJl
c25lbEJsb2NrLCBNYXhCbG9jaywgTWluQmxvY2ssIE5vZGVNYXRlcmlhbE9wdGltaXplciwgVmVy
dGV4T3V0cHV0QmxvY2ssIEJvbmVzQmxvY2ssIEluc3RhbmNlc0Jsb2NrLCBNb3JwaFRhcmdldHNC
bG9jaywgTGlnaHRJbmZvcm1hdGlvbkJsb2NrLCBGcmFnbWVudE91dHB1dEJsb2NrLCBBbHBoYVRl
c3RCbG9jaywgSW1hZ2VQcm9jZXNzaW5nQmxvY2ssIFBlcnR1cmJOb3JtYWxCbG9jaywgRm9nQmxv
Y2ssIExpZ2h0QmxvY2ssIFRleHR1cmVCbG9jaywgUmVmbGVjdGlvblRleHR1cmVCbG9jaywgSW5w
dXRCbG9jaywgQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cy50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMv
Tm9kZS9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnQgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnQudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50Il07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVNYXRlcmlhbEJsb2Nr
ICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIk5vZGVNYXRlcmlhbEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZU1hdGVy
aWFsQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTm9kZU1hdGVyaWFsQmxvY2si
XTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVNYXRl
cmlhbCAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTm9kZU1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX25vZGVNYXRl
cmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJpYWxEZWZpbmVzIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX25vZGVNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJOb2RlTWF0ZXJp
YWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsU3lzdGVt
VmFsdWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2Rl
TWF0ZXJpYWxTeXN0ZW1WYWx1ZXMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFs
U3lzdGVtVmFsdWVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbm9kZU1hdGVyaWFsU3lzdGVtVmFs
dWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVl
cyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9CbG9ja3NfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQmxvY2tz
L2luZGV4ICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy9pbmRleC50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJNdWx0aXBseUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIk11bHRpcGx5QmxvY2siXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQWRkQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CbG9ja3NfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQWRkQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiU2NhbGVCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTY2FsZUJsb2NrIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkNsYW1wQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CbG9ja3NfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ2xhbXBCbG9jayJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJDcm9zc0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNyb3NzQmxvY2siXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRG90QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CbG9ja3NfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRG90QmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiVHJhbnNmb3JtQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CbG9ja3Nf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVHJhbnNmb3JtQmxvY2siXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiUmVtYXBCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Js
b2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJSZW1hcEJsb2NrIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk5vcm1hbGl6ZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfQmxvY2tzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIk5vcm1hbGl6ZUJs
b2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9u
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJUcmlnb25vbWV0cnlCbG9ja09wZXJhdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVHJpZ29ub21ldHJ5QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CbG9ja3Nf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVHJpZ29ub21ldHJ5QmxvY2siXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3JNZXJnZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb2xvck1l
cmdlckJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3Rvck1lcmdlckJsb2NrIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIlZlY3Rvck1lcmdlckJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9y
U3BsaXR0ZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb2xvclNwbGl0dGVyQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiVmVjdG9yU3BsaXR0ZXJCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Js
b2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJWZWN0b3JTcGxpdHRlckJs
b2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxlcnBCbG9jayIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJMZXJwQmxv
Y2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGl2aWRlQmxvY2siLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9CbG9ja3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRGl2aWRl
QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3VidHJhY3RCbG9jayIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJT
dWJ0cmFjdEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXBCbG9jayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9f
WyJTdGVwQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT3Bwb3NpdGVCbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fWyJPcHBvc2l0ZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpZXdEaXJlY3Rp
b25CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fWyJWaWV3RGlyZWN0aW9uQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRnJlc25lbEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkZyZXNuZWxCbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNYXhCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJNYXhCbG9jayJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJNaW5CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJNaW5CbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJWZXJ0ZXhPdXRwdXRCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJWZXJ0ZXhPdXRwdXRCbG9jayJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJCb25lc0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxv
Y2tzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkJvbmVzQmxvY2siXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zdGFuY2VzQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9CbG9ja3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siSW5zdGFuY2VzQmxv
Y2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTW9ycGhUYXJnZXRzQmxvY2siLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9CbG9ja3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
TW9ycGhUYXJnZXRzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGlnaHRJbmZvcm1h
dGlvbkJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV82X19bIkxpZ2h0SW5mb3JtYXRpb25CbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJGcmFnbWVudE91dHB1dEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxv
Y2tzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkZyYWdtZW50T3V0cHV0Qmxv
Y2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWxwaGFUZXN0QmxvY2siLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9CbG9ja3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQWxw
aGFUZXN0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5nQmxv
Y2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CbG9ja3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siSW1hZ2VQcm9jZXNzaW5nQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUGVydHVyYk5vcm1hbEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBlcnR1cmJOb3JtYWxCbG9jayJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJGb2dCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nr
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJGb2dCbG9jayJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJMaWdodEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkxpZ2h0QmxvY2siXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiVGV4dHVyZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxv
Y2tzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRleHR1cmVCbG9jayJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJSZWZsZWN0aW9uVGV4dHVyZUJsb2NrIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfQmxvY2tzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlJl
ZmxlY3Rpb25UZXh0dXJlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5wdXRCbG9j
ayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Jsb2Nrc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJJbnB1dEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuaW1hdGVk
SW5wdXRCbG9ja1R5cGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmxvY2tzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzIl07IH0pOwor
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX09wdGltaXplcnNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vT3B0aW1pemVycy9p
bmRleCAqLyAiLi9NYXRlcmlhbHMvTm9kZS9PcHRpbWl6ZXJzL2luZGV4LnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIk5vZGVNYXRlcmlhbE9wdGltaXplciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX09w
dGltaXplcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTm9kZU1hdGVyaWFs
T3B0aW1pemVyIl07IH0pOworCisKKworCisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWwudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvbm9k
ZU1hdGVyaWFsLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTm9kZU1hdGVyaWFsRGVmaW5lcywgTm9kZU1h
dGVyaWFsICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlh
bERlZmluZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE5vZGVNYXRlcmlhbERlZmluZXM7IH0pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBOb2Rl
TWF0ZXJpYWw7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9wdXNoTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL3B1c2hNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvcHVzaE1hdGVy
aWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLmNvbG9y
ICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJ1aWxkU3RhdGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9k
ZU1hdGVyaWFsQnVpbGRTdGF0ZSAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCdWls
ZFN0YXRlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vZWZmZWN0ICov
ICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlz
Y19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9u
b2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFs
QmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVNYXRlcmlh
bEJ1aWxkU3RhdGVTaGFyZWREYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVNYXRlcmlhbEJ1aWxkU3RhdGVTaGFyZWREYXRhICov
ICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJ1aWxkU3RhdGVTaGFyZWREYXRhLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbERlZmluZXNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9NYXRlcmlhbHMvbWF0ZXJpYWxEZWZpbmVzICovICIuL01hdGVyaWFscy9tYXRlcmlhbERlZmlu
ZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01l
c2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xzLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0Jsb2Nrc190cmFuc2Zvcm1CbG9ja19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQmxvY2tz
L3RyYW5zZm9ybUJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nrcy90cmFuc2Zvcm1CbG9j
ay50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9CbG9ja3NfVmVydGV4X3ZlcnRleE91
dHB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9CbG9ja3MvVmVydGV4L3ZlcnRleE91dHB1dEJsb2NrICovICIuL01hdGVyaWFs
cy9Ob2RlL0Jsb2Nrcy9WZXJ0ZXgvdmVydGV4T3V0cHV0QmxvY2sudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfQmxvY2tzX0ZyYWdtZW50X2ZyYWdtZW50T3V0cHV0QmxvY2tfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0Jsb2Nr
cy9GcmFnbWVudC9mcmFnbWVudE91dHB1dEJsb2NrICovICIuL01hdGVyaWFscy9Ob2RlL0Jsb2Nr
cy9GcmFnbWVudC9mcmFnbWVudE91dHB1dEJsb2NrLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0Jsb2Nrc19JbnB1dF9pbnB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9CbG9ja3MvSW5wdXQvaW5wdXRCbG9jayAq
LyAiLi9NYXRlcmlhbHMvTm9kZS9CbG9ja3MvSW5wdXQvaW5wdXRCbG9jay50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvdHlwZVN0b3JlICov
ICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19maWxlVG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2Zp
bGVUb29scyAqLyAiLi9NaXNjL2ZpbGVUb29scy50cyIpOworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKy8qKiBAaGlkZGVuICovCit2YXIgTm9kZU1hdGVyaWFsRGVmaW5l
cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShOb2RlTWF0ZXJpYWxEZWZpbmVzLCBf
c3VwZXIpOworICAgIGZ1bmN0aW9uIE5vZGVNYXRlcmlhbERlZmluZXMoKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CisgICAgICAgIC8qKiBCT05FUyAq
LworICAgICAgICBfdGhpcy5OVU1fQk9ORV9JTkZMVUVOQ0VSUyA9IDA7CisgICAgICAgIF90aGlz
LkJvbmVzUGVyTWVzaCA9IDA7CisgICAgICAgIF90aGlzLkJPTkVURVhUVVJFID0gZmFsc2U7Cisg
ICAgICAgIC8qKiBNT1JQSCBUQVJHRVRTICovCisgICAgICAgIF90aGlzLk1PUlBIVEFSR0VUUyA9
IGZhbHNlOworICAgICAgICBfdGhpcy5NT1JQSFRBUkdFVFNfTk9STUFMID0gZmFsc2U7CisgICAg
ICAgIF90aGlzLk1PUlBIVEFSR0VUU19UQU5HRU5UID0gZmFsc2U7CisgICAgICAgIF90aGlzLk1P
UlBIVEFSR0VUU19VViA9IGZhbHNlOworICAgICAgICBfdGhpcy5OVU1fTU9SUEhfSU5GTFVFTkNF
UlMgPSAwOworICAgICAgICAvKiogSU1BR0UgUFJPQ0VTU0lORyAqLworICAgICAgICBfdGhpcy5J
TUFHRVBST0NFU1NJTkcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVklHTkVUVEUgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuVklHTkVUVEVCTEVORE1PREVNVUxUSVBMWSA9IGZhbHNlOworICAgICAg
ICBfdGhpcy5WSUdORVRURUJMRU5ETU9ERU9QQVFVRSA9IGZhbHNlOworICAgICAgICBfdGhpcy5U
T05FTUFQUElORyA9IGZhbHNlOworICAgICAgICBfdGhpcy5UT05FTUFQUElOR19BQ0VTID0gZmFs
c2U7CisgICAgICAgIF90aGlzLkNPTlRSQVNUID0gZmFsc2U7CisgICAgICAgIF90aGlzLkVYUE9T
VVJFID0gZmFsc2U7CisgICAgICAgIF90aGlzLkNPTE9SQ1VSVkVTID0gZmFsc2U7CisgICAgICAg
IF90aGlzLkNPTE9SR1JBRElORyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DT0xPUkdSQURJTkcz
RCA9IGZhbHNlOworICAgICAgICBfdGhpcy5TQU1QTEVSM0RHUkVFTkRFUFRIID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLlNBTVBMRVIzREJHUk1BUCA9IGZhbHNlOworICAgICAgICBfdGhpcy5JTUFH
RVBST0NFU1NJTkdQT1NUUFJPQ0VTUyA9IGZhbHNlOworICAgICAgICBfdGhpcy5yZWJ1aWxkKCk7
CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgTm9kZU1hdGVyaWFsRGVmaW5lcy5w
cm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgaWYg
KHRoaXNbbmFtZV0gPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdGhpcy5fa2V5cy5wdXNo
KG5hbWUpOworICAgICAgICB9CisgICAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZTsKKyAgICB9Owor
ICAgIHJldHVybiBOb2RlTWF0ZXJpYWxEZWZpbmVzOworfShfTWF0ZXJpYWxzX21hdGVyaWFsRGVm
aW5lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siTWF0ZXJpYWxEZWZpbmVzIl0pKTsK
KworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGNyZWF0ZSBhIG5vZGUgYmFzZWQgbWF0ZXJpYWwgYnVp
bHQgYnkgYXNzZW1ibGluZyBzaGFkZXIgYmxvY2tzCisgKi8KK3ZhciBOb2RlTWF0ZXJpYWwgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTm9kZU1hdGVyaWFsLCBfc3VwZXIpOworICAg
IC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBub2RlIGJhc2VkIG1hdGVyaWFsCisgICAgICogQHBh
cmFtIG5hbWUgZGVmaW5lcyB0aGUgbWF0ZXJpYWwgbmFtZQorICAgICAqIEBwYXJhbSBzY2VuZSBk
ZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyBj
cmVhdGlvbiBvcHRpb24KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBOb2RlTWF0ZXJpYWwobmFtZSwg
c2NlbmUsIG9wdGlvbnMpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRp
b25zID0ge307IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwg
c2NlbmUgfHwgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVu
Z2luZSJdLkxhc3RDcmVhdGVkU2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9idWlsZElk
ID0gTm9kZU1hdGVyaWFsLl9CdWlsZElkR2VuZXJhdG9yKys7CisgICAgICAgIF90aGlzLl9idWls
ZFdhc1N1Y2Nlc3NmdWwgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2NhY2hlZFdvcmxkVmlld01h
dHJpeCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTWF0cml4Il0oKTsKKyAgICAgICAgX3RoaXMuX2NhY2hlZFdvcmxkVmlld1Byb2plY3Rpb25N
YXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk1hdHJpeCJdKCk7CisgICAgICAgIF90aGlzLl9vcHRpbWl6ZXJzID0gbmV3IEFycmF5KCk7
CisgICAgICAgIF90aGlzLl9hbmltYXRpb25GcmFtZSA9IC0xOworICAgICAgICBfdGhpcy5CSlNO
T0RFTUFURVJJQUxFRElUT1IgPSBfdGhpcy5fZ2V0R2xvYmFsTm9kZU1hdGVyaWFsRWRpdG9yKCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRp
bmcgdGhhdCBhbHBoYSB2YWx1ZSBtdXN0IGJlIGlnbm9yZWQgKFRoaXMgd2lsbCB0dXJuIGFscGhh
IGJsZW5kaW5nIG9mZiBldmVuIGlmIGFuIGFscGhhIHZhbHVlIGlzIHByb2R1Y2VkIGJ5IHRoZSBt
YXRlcmlhbCkKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmlnbm9yZUFscGhhID0gZmFsc2U7
CisgICAgICAgIC8qKgorICAgICAgICAqIERlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxp
Z2h0cyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBtYXRlcmlhbAorICAgICAgICAqLworICAgICAg
ICBfdGhpcy5tYXhTaW11bHRhbmVvdXNMaWdodHMgPSA0OworICAgICAgICAvKioKKyAgICAgICAg
ICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiB0aGUgbWF0ZXJpYWwgaXMgYnVpbHQKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLm9uQnVpbGRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFi
bGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHJvb3Qgbm9kZXMgb2YgdGhlIG1hdGVy
aWFsIHZlcnRleCBzaGFkZXIKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl92ZXJ0ZXhPdXRw
dXROb2RlcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBz
ZXRzIHRoZSByb290IG5vZGVzIG9mIHRoZSBtYXRlcmlhbCBmcmFnbWVudCAocGl4ZWwpIHNoYWRl
cgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2ZyYWdtZW50T3V0cHV0Tm9kZXMgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYW4gYXJyYXkgb2YgYmxvY2tz
IHRoYXQgbmVlZHMgdG8gYmUgc2VyaWFsaXplZCBldmVuIGlmIHRoZXkgYXJlIG5vdCB5ZXQgY29u
bmVjdGVkCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5hdHRhY2hlZEJsb2NrcyA9IG5ldyBB
cnJheSgpOworICAgICAgICBfdGhpcy5fb3B0aW9ucyA9IHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fYXNzaWduIl0oeyBlbWl0Q29tbWVudHM6IGZhbHNlIH0sIG9wdGlvbnMp
OworICAgICAgICAvLyBTZXR1cCB0aGUgZGVmYXVsdCBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24g
dG8gdGhlIHNjZW5lLgorICAgICAgICBfdGhpcy5fYXR0YWNoSW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbihudWxsKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKiogR2V0
IHRoZSBpbnNwZWN0b3IgZnJvbSBidW5kbGUgb3IgZ2xvYmFsICovCisgICAgTm9kZU1hdGVyaWFs
LnByb3RvdHlwZS5fZ2V0R2xvYmFsTm9kZU1hdGVyaWFsRWRpdG9yID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAvLyBVTUQgR2xvYmFsIG5hbWUgZGV0ZWN0aW9uIGZyb20gV2VicGFjayBCdW5kbGUg
VU1EIE5hbWUuCisgICAgICAgIGlmICh0eXBlb2YgTk9ERUVESVRPUiAhPT0gJ3VuZGVmaW5lZCcp
IHsKKyAgICAgICAgICAgIHJldHVybiBOT0RFRURJVE9SOworICAgICAgICB9CisgICAgICAgIC8v
IEluIGNhc2Ugb2YgbW9kdWxlIGxldCdzIGNoZWNrIHRoZSBnbG9iYWwgZW1pdHRlZCBmcm9tIHRo
ZSBlZGl0b3IgZW50cnkgcG9pbnQuCisgICAgICAgIGlmICh0eXBlb2YgQkFCWUxPTiAhPT0gJ3Vu
ZGVmaW5lZCcgJiYgdHlwZW9mIEJBQllMT04uTm9kZUVkaXRvciAhPT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgICAgIHJldHVybiBCQUJZTE9OOworICAgICAgICB9CisgICAgICAgIHJldHVybiB1
bmRlZmluZWQ7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZU1hdGVyaWFs
LnByb3RvdHlwZSwgIm9wdGlvbnMiLCB7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgb3B0aW9u
cyB0byBjb250cm9sIHRoZSBub2RlIG1hdGVyaWFsIG92ZXJhbGwgYmVoYXZpb3IgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9uczsK
KyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICAg
ICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShOb2RlTWF0ZXJpYWwucHJvdG90eXBlLCAiaW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGltYWdl
IHByb2Nlc3NpbmcgY29uZmlndXJhdGlvbiB1c2VkIGVpdGhlciBpbiB0aGlzIG1hdGVyaWFsLgor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbjsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIERlZmF1bHQgaW1hZ2UgcHJvY2Vzc2luZyBjb25m
aWd1cmF0aW9uIHVzZWQgZWl0aGVyIGluIHRoZSB0aGlzIG1hdGVyaWFsLgorICAgICAgICAgKgor
ICAgICAgICAgKiBJZiBzZXRzIHRvIG51bGwsIHRoZSBzY2VuZSBvbmUgaXMgaW4gdXNlLgorICAg
ICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRo
aXMuX2F0dGFjaEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24odmFsdWUpOworICAgICAgICAg
ICAgLy8gRW5zdXJlIHRoZSBlZmZlY3Qgd2lsbCBiZSByZWJ1aWx0LgorICAgICAgICAgICAgdGhp
cy5fbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSgpOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNsYXNzIG5hbWUgb2YgdGhlIG1hdGVy
aWFsIGUuZy4gIk5vZGVNYXRlcmlhbCIKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQor
ICAgICAqLworICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gIk5vZGVNYXRlcmlhbCI7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBBdHRhY2hlcyBhIG5ldyBpbWFnZSBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24gdG8g
dGhlIFN0YW5kYXJkIE1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBjb25maWd1cmF0aW9uCisgICAg
ICovCisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5fYXR0YWNoSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbiA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09PSB0aGlzLl9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgLy8gRGV0YWNoZXMgb2JzZXJ2ZXIuCisgICAgICAgIGlmICh0aGlzLl9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uICYmIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ09ic2VydmVyKSB7Cisg
ICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLm9uVXBkYXRlUGFy
YW1ldGVycy5yZW1vdmUodGhpcy5faW1hZ2VQcm9jZXNzaW5nT2JzZXJ2ZXIpOworICAgICAgICB9
CisgICAgICAgIC8vIFBpY2sgdGhlIHNjZW5lIGNvbmZpZ3VyYXRpb24gaWYgbmVlZGVkLgorICAg
ICAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24gPSB0aGlzLmdldFNjZW5lKCkuaW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2lt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOworICAgICAgICB9Cisg
ICAgICAgIC8vIEF0dGFjaGVzIG9ic2VydmVyLgorICAgICAgICBpZiAodGhpcy5faW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5n
T2JzZXJ2ZXIgPSB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLm9uVXBkYXRlUGFy
YW1ldGVycy5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9tYXJrQWxs
U3ViTWVzaGVzQXNJbWFnZVByb2Nlc3NpbmdEaXJ0eSgpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCBhIGJsb2NrIGJ5IGl0cyBuYW1lCisg
ICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgYmxvY2sgdG8gcmV0cmll
dmUKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVxdWlyZWQgYmxvY2sgb3IgbnVsbCBpZiBub3QgZm91
bmQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLmdldEJsb2NrQnlOYW1lID0g
ZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuYXR0
YWNoZWRCbG9ja3M7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgYmxv
Y2sgPSBfYVtfaV07CisgICAgICAgICAgICBpZiAoYmxvY2submFtZSA9PT0gbmFtZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBibG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCBhIGJsb2NrIGJ5
IGl0cyBuYW1lCisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBkZWZpbmVzIHRoZSBwcmVkaWNhdGUg
dXNlZCB0byBmaW5kIHRoZSBnb29kIGNhbmRpZGF0ZQorICAgICAqIEByZXR1cm5zIHRoZSByZXF1
aXJlZCBibG9jayBvciBudWxsIGlmIG5vdCBmb3VuZAorICAgICAqLworICAgIE5vZGVNYXRlcmlh
bC5wcm90b3R5cGUuZ2V0QmxvY2tCeVByZWRpY2F0ZSA9IGZ1bmN0aW9uIChwcmVkaWNhdGUpIHsK
KyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuYXR0YWNoZWRCbG9ja3M7IF9pIDwg
X2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgYmxvY2sgPSBfYVtfaV07CisgICAg
ICAgICAgICBpZiAocHJlZGljYXRlKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBi
bG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldCBhbiBpbnB1dCBibG9jayBieSBpdHMgbmFtZQorICAg
ICAqIEBwYXJhbSBwcmVkaWNhdGUgZGVmaW5lcyB0aGUgcHJlZGljYXRlIHVzZWQgdG8gZmluZCB0
aGUgZ29vZCBjYW5kaWRhdGUKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVxdWlyZWQgaW5wdXQgYmxv
Y2sgb3IgbnVsbCBpZiBub3QgZm91bmQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90
eXBlLmdldElucHV0QmxvY2tCeVByZWRpY2F0ZSA9IGZ1bmN0aW9uIChwcmVkaWNhdGUpIHsKKyAg
ICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuYXR0YWNoZWRCbG9ja3M7IF9pIDwgX2Eu
bGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgYmxvY2sgPSBfYVtfaV07CisgICAgICAg
ICAgICBpZiAoYmxvY2suaXNJbnB1dCAmJiBwcmVkaWNhdGUoYmxvY2spKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGlzdCBvZiBpbnB1
dCBibG9ja3MgYXR0YWNoZWQgdG8gdGhpcyBtYXRlcmlhbAorICAgICAqIEByZXR1cm5zIGFuIGFy
cmF5IG9mIElucHV0QmxvY2tzCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5n
ZXRJbnB1dEJsb2NrcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGJsb2NrcyA9IFtdOwor
ICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5hdHRhY2hlZEJsb2NrczsgX2kgPCBf
YS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBibG9jayA9IF9hW19pXTsKKyAgICAg
ICAgICAgIGlmIChibG9jay5pc0lucHV0KSB7CisgICAgICAgICAgICAgICAgYmxvY2tzLnB1c2go
YmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBibG9ja3M7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgbmV3IG9wdGltaXplciB0byB0aGUgbGlz
dCBvZiBvcHRpbWl6ZXJzCisgICAgICogQHBhcmFtIG9wdGltaXplciBkZWZpbmVzIHRoZSBvcHRp
bWl6ZXJzIHRvIGFkZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1hdGVyaWFsCisgICAg
ICovCisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5yZWdpc3Rlck9wdGltaXplciA9IGZ1bmN0
aW9uIChvcHRpbWl6ZXIpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fb3B0aW1pemVycy5p
bmRleE9mKG9wdGltaXplcik7CisgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fb3B0aW1pemVycy5wdXNoKG9wdGlt
aXplcik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmVt
b3ZlIGFuIG9wdGltaXplciBmcm9tIHRoZSBsaXN0IG9mIG9wdGltaXplcnMKKyAgICAgKiBAcGFy
YW0gb3B0aW1pemVyIGRlZmluZXMgdGhlIG9wdGltaXplcnMgdG8gcmVtb3ZlCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgbWF0ZXJpYWwKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwucHJv
dG90eXBlLnVucmVnaXN0ZXJPcHRpbWl6ZXIgPSBmdW5jdGlvbiAob3B0aW1pemVyKSB7CisgICAg
ICAgIHZhciBpbmRleCA9IHRoaXMuX29wdGltaXplcnMuaW5kZXhPZihvcHRpbWl6ZXIpOworICAg
ICAgICBpZiAoaW5kZXggPT09IC0xKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fb3B0aW1pemVycy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBhIG5ldyBibG9jayB0byB0aGUg
bGlzdCBvZiBvdXRwdXQgbm9kZXMKKyAgICAgKiBAcGFyYW0gbm9kZSBkZWZpbmVzIHRoZSBub2Rl
IHRvIGFkZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1hdGVyaWFsCisgICAgICovCisg
ICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5hZGRPdXRwdXROb2RlID0gZnVuY3Rpb24gKG5vZGUp
IHsKKyAgICAgICAgaWYgKG5vZGUudGFyZ2V0ID09PSBudWxsKSB7CisgICAgICAgICAgICB0aHJv
dyAiVGhpcyBub2RlIGlzIG5vdCBtZWFudCB0byBiZSBhbiBvdXRwdXQgbm9kZS4gWW91IG1heSB3
YW50IHRvIGV4cGxpY2l0bHkgc2V0IGl0cyB0YXJnZXQgdmFsdWUuIjsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoKG5vZGUudGFyZ2V0ICYgX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXgp
ICE9PSAwKSB7CisgICAgICAgICAgICB0aGlzLl9hZGRWZXJ0ZXhPdXRwdXROb2RlKG5vZGUpOwor
ICAgICAgICB9CisgICAgICAgIGlmICgobm9kZS50YXJnZXQgJiBfbm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cyJdLkZyYWdtZW50KSAhPT0gMCkgeworICAgICAgICAgICAgdGhpcy5fYWRkRnJhZ21lbnRP
dXRwdXROb2RlKG5vZGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogUmVtb3ZlIGEgYmxvY2sgZnJvbSB0aGUgbGlzdCBvZiByb290IG5v
ZGVzCisgICAgICogQHBhcmFtIG5vZGUgZGVmaW5lcyB0aGUgbm9kZSB0byByZW1vdmUKKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCBtYXRlcmlhbAorICAgICAqLworICAgIE5vZGVNYXRlcmlh
bC5wcm90b3R5cGUucmVtb3ZlT3V0cHV0Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAg
IGlmIChub2RlLnRhcmdldCA9PT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKChub2RlLnRhcmdldCAmIF9ub2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzIl0uVmVydGV4KSAhPT0gMCkgeworICAgICAgICAgICAgdGhpcy5fcmVtb3ZlVmVydGV4T3V0
cHV0Tm9kZShub2RlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG5vZGUudGFyZ2V0ICYgX25v
ZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJOb2Rl
TWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVudCkgIT09IDApIHsKKyAgICAgICAgICAgIHRo
aXMuX3JlbW92ZUZyYWdtZW50T3V0cHV0Tm9kZShub2RlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUuX2FkZFZlcnRl
eE91dHB1dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICBpZiAodGhpcy5fdmVydGV4
T3V0cHV0Tm9kZXMuaW5kZXhPZihub2RlKSAhPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBub2RlLnRhcmdldCA9IF9ub2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRz
Il0uVmVydGV4OworICAgICAgICB0aGlzLl92ZXJ0ZXhPdXRwdXROb2Rlcy5wdXNoKG5vZGUpOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUu
X3JlbW92ZVZlcnRleE91dHB1dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICB2YXIg
aW5kZXggPSB0aGlzLl92ZXJ0ZXhPdXRwdXROb2Rlcy5pbmRleE9mKG5vZGUpOworICAgICAgICBp
ZiAoaW5kZXggPT09IC0xKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fdmVydGV4T3V0cHV0Tm9kZXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLl9hZGRGcmFnbWVu
dE91dHB1dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICBpZiAodGhpcy5fZnJhZ21l
bnRPdXRwdXROb2Rlcy5pbmRleE9mKG5vZGUpICE9PSAtMSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIG5vZGUudGFyZ2V0ID0gX25vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJOb2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHMiXS5GcmFnbWVudDsKKyAgICAgICAgdGhpcy5fZnJhZ21lbnRPdXRwdXROb2Rlcy5wdXNoKG5v
ZGUpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbC5wcm90
b3R5cGUuX3JlbW92ZUZyYWdtZW50T3V0cHV0Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAg
ICAgIHZhciBpbmRleCA9IHRoaXMuX2ZyYWdtZW50T3V0cHV0Tm9kZXMuaW5kZXhPZihub2RlKTsK
KyAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX2ZyYWdtZW50T3V0cHV0Tm9kZXMuc3BsaWNlKGluZGV4LCAxKTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMg
aWYgdGhlIG1hdGVyaWFsIHdpbGwgcmVxdWlyZSBhbHBoYSBibGVuZGluZworICAgICAqIEByZXR1
cm5zIGEgYm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGFscGhhIGJsZW5kaW5nIGlzIG5lZWRlZAorICAg
ICAqLworICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhhQmxlbmRpbmcgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLmlnbm9yZUFscGhhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICh0aGlzLmFscGhhIDwgMS4w
KSB8fCAodGhpcy5fc2hhcmVkRGF0YSAmJiB0aGlzLl9zaGFyZWREYXRhLmhpbnRzLm5lZWRBbHBo
YUJsZW5kaW5nKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyBpZiB0aGlzIG1h
dGVyaWFsIHNob3VsZCBiZSByZW5kZXJlZCBpbiBhbHBoYSB0ZXN0IG1vZGUKKyAgICAgKiBAcmV0
dXJucyBhIGJvb2xlYW4gc3BlY2lmeWluZyBpZiBhbiBhbHBoYSB0ZXN0IGlzIG5lZWRlZC4KKyAg
ICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLm5lZWRBbHBoYVRlc3RpbmcgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9zaGFyZWREYXRhICYmIHRoaXMuX3NoYXJl
ZERhdGEuaGludHMubmVlZEFscGhhVGVzdGluZzsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbC5w
cm90b3R5cGUuX2luaXRpYWxpemVCbG9jayA9IGZ1bmN0aW9uIChub2RlLCBzdGF0ZSwgbm9kZXNU
b1Byb2Nlc3NGb3JPdGhlckJ1aWxkU3RhdGUpIHsKKyAgICAgICAgbm9kZS5pbml0aWFsaXplKHN0
YXRlKTsKKyAgICAgICAgbm9kZS5hdXRvQ29uZmlndXJlKHRoaXMpOworICAgICAgICBub2RlLl9w
cmVwYXJhdGlvbklkID0gdGhpcy5fYnVpbGRJZDsKKyAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRC
bG9ja3MuaW5kZXhPZihub2RlKSA9PT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRC
bG9ja3MucHVzaChub2RlKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9h
ID0gbm9kZS5pbnB1dHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIg
aW5wdXQgPSBfYVtfaV07CisgICAgICAgICAgICBpZiAoIW5vZGUuaXNJbnB1dCkgeworICAgICAg
ICAgICAgICAgIGlucHV0LmFzc29jaWF0ZWRWYXJpYWJsZU5hbWUgPSAiIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBjb25uZWN0ZWRQb2ludCA9IGlucHV0LmNvbm5lY3RlZFBvaW50
OworICAgICAgICAgICAgaWYgKGNvbm5lY3RlZFBvaW50KSB7CisgICAgICAgICAgICAgICAgdmFy
IGJsb2NrID0gY29ubmVjdGVkUG9pbnQub3duZXJCbG9jazsKKyAgICAgICAgICAgICAgICBpZiAo
YmxvY2sgIT09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLnRhcmdldCA9
PT0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
WyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXhBbmRGcmFnbWVudCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZXNUb1Byb2Nlc3NGb3JPdGhlckJ1aWxkU3RhdGUucHVzaChi
bG9jayk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoc3RhdGUudGFyZ2V0ID09PSBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV84X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50Cisg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBibG9jay50YXJnZXQgPT09IF9ub2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTm9kZU1hdGVyaWFsQmxv
Y2tUYXJnZXRzIl0uVmVydGV4CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBibG9jay5fcHJl
cGFyYXRpb25JZCAhPT0gdGhpcy5fYnVpbGRJZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZXNUb1Byb2Nlc3NGb3JPdGhlckJ1aWxkU3RhdGUucHVzaChibG9jayk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUJsb2NrKGJs
b2NrLCBzdGF0ZSwgbm9kZXNUb1Byb2Nlc3NGb3JPdGhlckJ1aWxkU3RhdGUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfYiA9
IDAsIF9jID0gbm9kZS5vdXRwdXRzOyBfYiA8IF9jLmxlbmd0aDsgX2IrKykgeworICAgICAgICAg
ICAgdmFyIG91dHB1dCA9IF9jW19iXTsKKyAgICAgICAgICAgIG91dHB1dC5hc3NvY2lhdGVkVmFy
aWFibGVOYW1lID0gIiI7CisgICAgICAgIH0KKyAgICB9OworICAgIE5vZGVNYXRlcmlhbC5wcm90
b3R5cGUuX3Jlc2V0RHVhbEJsb2NrcyA9IGZ1bmN0aW9uIChub2RlLCBpZCkgeworICAgICAgICBp
ZiAobm9kZS50YXJnZXQgPT09IF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzhfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uVmVydGV4QW5kRnJh
Z21lbnQpIHsKKyAgICAgICAgICAgIG5vZGUuYnVpbGRJZCA9IGlkOworICAgICAgICB9CisgICAg
ICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBub2RlLmlucHV0czsgX2kgPCBfYS5sZW5ndGg7IF9p
KyspIHsKKyAgICAgICAgICAgIHZhciBpbnB1dHMgPSBfYVtfaV07CisgICAgICAgICAgICB2YXIg
Y29ubmVjdGVkUG9pbnQgPSBpbnB1dHMuY29ubmVjdGVkUG9pbnQ7CisgICAgICAgICAgICBpZiAo
Y29ubmVjdGVkUG9pbnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgYmxvY2sgPSBjb25uZWN0ZWRQ
b2ludC5vd25lckJsb2NrOworICAgICAgICAgICAgICAgIGlmIChibG9jayAhPT0gbm9kZSkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldER1YWxCbG9ja3MoYmxvY2ssIGlkKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIEJ1aWxkIHRoZSBtYXRlcmlhbCBhbmQgZ2VuZXJhdGVzIHRoZSBpbm5lciBlZmZl
Y3QKKyAgICAgKiBAcGFyYW0gdmVyYm9zZSBkZWZpbmVzIGlmIHRoZSBidWlsZCBzaG91bGQgbG9n
IGFjdGl2aXR5CisgICAgICovCisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5idWlsZCA9IGZ1
bmN0aW9uICh2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlID09PSB2b2lkIDApIHsgdmVy
Ym9zZSA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMuX2J1aWxkV2FzU3VjY2Vzc2Z1bCA9IGZhbHNl
OworICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRTY2VuZSgpLmdldEVuZ2luZSgpOworICAg
ICAgICBpZiAodGhpcy5fdmVydGV4T3V0cHV0Tm9kZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAg
ICAgICB0aHJvdyAiWW91IG11c3QgZGVmaW5lIGF0IGxlYXN0IG9uZSB2ZXJ0ZXhPdXRwdXROb2Rl
IjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZnJhZ21lbnRPdXRwdXROb2Rlcy5sZW5n
dGggPT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJZb3UgbXVzdCBkZWZpbmUgYXQgbGVhc3Qg
b25lIGZyYWdtZW50T3V0cHV0Tm9kZSI7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29tcGlsYXRp
b24gc3RhdGUKKyAgICAgICAgdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0ZSA9IG5ldyBfbm9k
ZU1hdGVyaWFsQnVpbGRTdGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJOb2RlTWF0
ZXJpYWxCdWlsZFN0YXRlIl0oKTsKKyAgICAgICAgdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0
ZS5zdXBwb3J0VW5pZm9ybUJ1ZmZlcnMgPSBlbmdpbmUuc3VwcG9ydHNVbmlmb3JtQnVmZmVyczsK
KyAgICAgICAgdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0ZS50YXJnZXQgPSBfbm9kZU1hdGVy
aWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIk5vZGVNYXRlcmlh
bEJsb2NrVGFyZ2V0cyJdLlZlcnRleDsKKyAgICAgICAgdGhpcy5fZnJhZ21lbnRDb21waWxhdGlv
blN0YXRlID0gbmV3IF9ub2RlTWF0ZXJpYWxCdWlsZFN0YXRlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIk5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUiXSgpOworICAgICAgICB0aGlzLl9mcmFn
bWVudENvbXBpbGF0aW9uU3RhdGUuc3VwcG9ydFVuaWZvcm1CdWZmZXJzID0gZW5naW5lLnN1cHBv
cnRzVW5pZm9ybUJ1ZmZlcnM7CisgICAgICAgIHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0
ZS50YXJnZXQgPSBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50OworICAgICAgICAv
LyBTaGFyZWQgZGF0YQorICAgICAgICB0aGlzLl9zaGFyZWREYXRhID0gbmV3IF9ub2RlTWF0ZXJp
YWxCdWlsZFN0YXRlU2hhcmVkRGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJOb2Rl
TWF0ZXJpYWxCdWlsZFN0YXRlU2hhcmVkRGF0YSJdKCk7CisgICAgICAgIHRoaXMuX3ZlcnRleENv
bXBpbGF0aW9uU3RhdGUuc2hhcmVkRGF0YSA9IHRoaXMuX3NoYXJlZERhdGE7CisgICAgICAgIHRo
aXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0ZS5zaGFyZWREYXRhID0gdGhpcy5fc2hhcmVkRGF0
YTsKKyAgICAgICAgdGhpcy5fc2hhcmVkRGF0YS5idWlsZElkID0gdGhpcy5fYnVpbGRJZDsKKyAg
ICAgICAgdGhpcy5fc2hhcmVkRGF0YS5lbWl0Q29tbWVudHMgPSB0aGlzLl9vcHRpb25zLmVtaXRD
b21tZW50czsKKyAgICAgICAgdGhpcy5fc2hhcmVkRGF0YS52ZXJib3NlID0gdmVyYm9zZTsKKyAg
ICAgICAgLy8gSW5pdGlhbGl6ZSBibG9ja3MKKyAgICAgICAgdmFyIHZlcnRleE5vZGVzID0gW107
CisgICAgICAgIHZhciBmcmFnbWVudE5vZGVzID0gW107CisgICAgICAgIGZvciAodmFyIF9pID0g
MCwgX2EgPSB0aGlzLl92ZXJ0ZXhPdXRwdXROb2RlczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsK
KyAgICAgICAgICAgIHZhciB2ZXJ0ZXhPdXRwdXROb2RlID0gX2FbX2ldOworICAgICAgICAgICAg
dmVydGV4Tm9kZXMucHVzaCh2ZXJ0ZXhPdXRwdXROb2RlKTsKKyAgICAgICAgICAgIHRoaXMuX2lu
aXRpYWxpemVCbG9jayh2ZXJ0ZXhPdXRwdXROb2RlLCB0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0
YXRlLCBmcmFnbWVudE5vZGVzKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfYiA9IDAs
IF9jID0gdGhpcy5fZnJhZ21lbnRPdXRwdXROb2RlczsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHsK
KyAgICAgICAgICAgIHZhciBmcmFnbWVudE91dHB1dE5vZGUgPSBfY1tfYl07CisgICAgICAgICAg
ICBmcmFnbWVudE5vZGVzLnB1c2goZnJhZ21lbnRPdXRwdXROb2RlKTsKKyAgICAgICAgICAgIHRo
aXMuX2luaXRpYWxpemVCbG9jayhmcmFnbWVudE91dHB1dE5vZGUsIHRoaXMuX2ZyYWdtZW50Q29t
cGlsYXRpb25TdGF0ZSwgdmVydGV4Tm9kZXMpOworICAgICAgICB9CisgICAgICAgIC8vIE9wdGlt
aXplCisgICAgICAgIHRoaXMub3B0aW1pemUoKTsKKyAgICAgICAgLy8gVmVydGV4CisgICAgICAg
IGZvciAodmFyIF9kID0gMCwgdmVydGV4Tm9kZXNfMSA9IHZlcnRleE5vZGVzOyBfZCA8IHZlcnRl
eE5vZGVzXzEubGVuZ3RoOyBfZCsrKSB7CisgICAgICAgICAgICB2YXIgdmVydGV4T3V0cHV0Tm9k
ZSA9IHZlcnRleE5vZGVzXzFbX2RdOworICAgICAgICAgICAgdmVydGV4T3V0cHV0Tm9kZS5idWls
ZCh0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlLCB2ZXJ0ZXhOb2Rlcyk7CisgICAgICAgIH0K
KyAgICAgICAgLy8gRnJhZ21lbnQKKyAgICAgICAgdGhpcy5fZnJhZ21lbnRDb21waWxhdGlvblN0
YXRlLnVuaWZvcm1zID0gdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0ZS51bmlmb3Jtcy5zbGlj
ZSgwKTsKKyAgICAgICAgdGhpcy5fZnJhZ21lbnRDb21waWxhdGlvblN0YXRlLl91bmlmb3JtRGVj
bGFyYXRpb24gPSB0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlLl91bmlmb3JtRGVjbGFyYXRp
b247CisgICAgICAgIHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0ZS5fdmVydGV4U3RhdGUg
PSB0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlOworICAgICAgICBmb3IgKHZhciBfZSA9IDAs
IGZyYWdtZW50Tm9kZXNfMSA9IGZyYWdtZW50Tm9kZXM7IF9lIDwgZnJhZ21lbnROb2Rlc18xLmxl
bmd0aDsgX2UrKykgeworICAgICAgICAgICAgdmFyIGZyYWdtZW50T3V0cHV0Tm9kZSA9IGZyYWdt
ZW50Tm9kZXNfMVtfZV07CisgICAgICAgICAgICB0aGlzLl9yZXNldER1YWxCbG9ja3MoZnJhZ21l
bnRPdXRwdXROb2RlLCB0aGlzLl9idWlsZElkIC0gMSk7CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh2YXIgX2YgPSAwLCBmcmFnbWVudE5vZGVzXzIgPSBmcmFnbWVudE5vZGVzOyBfZiA8IGZyYWdt
ZW50Tm9kZXNfMi5sZW5ndGg7IF9mKyspIHsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudE91dHB1
dE5vZGUgPSBmcmFnbWVudE5vZGVzXzJbX2ZdOworICAgICAgICAgICAgZnJhZ21lbnRPdXRwdXRO
b2RlLmJ1aWxkKHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0ZSwgZnJhZ21lbnROb2Rlcyk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gRmluYWxpemUKKyAgICAgICAgdGhpcy5fdmVydGV4Q29t
cGlsYXRpb25TdGF0ZS5maW5hbGl6ZSh0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlKTsKKyAg
ICAgICAgdGhpcy5fZnJhZ21lbnRDb21waWxhdGlvblN0YXRlLmZpbmFsaXplKHRoaXMuX2ZyYWdt
ZW50Q29tcGlsYXRpb25TdGF0ZSk7CisgICAgICAgIHRoaXMuX2J1aWxkSWQgPSBOb2RlTWF0ZXJp
YWwuX0J1aWxkSWRHZW5lcmF0b3IrKzsKKyAgICAgICAgLy8gRXJyb3JzCisgICAgICAgIHRoaXMu
X3NoYXJlZERhdGEuZW1pdEVycm9ycygpOworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAg
ICAgICAgY29uc29sZS5sb2coIlZlcnRleCBzaGFkZXI6Iik7CisgICAgICAgICAgICBjb25zb2xl
LmxvZyh0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nKTsKKyAg
ICAgICAgICAgIGNvbnNvbGUubG9nKCJGcmFnbWVudCBzaGFkZXI6Iik7CisgICAgICAgICAgICBj
b25zb2xlLmxvZyh0aGlzLl9mcmFnbWVudENvbXBpbGF0aW9uU3RhdGUuY29tcGlsYXRpb25TdHJp
bmcpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2J1aWxkV2FzU3VjY2Vzc2Z1bCA9IHRydWU7
CisgICAgICAgIHRoaXMub25CdWlsZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOwor
ICAgICAgICAvLyBXaXBlIGRlZmluZXMKKyAgICAgICAgdmFyIG1lc2hlcyA9IHRoaXMuZ2V0U2Nl
bmUoKS5tZXNoZXM7CisgICAgICAgIGZvciAodmFyIF9nID0gMCwgbWVzaGVzXzEgPSBtZXNoZXM7
IF9nIDwgbWVzaGVzXzEubGVuZ3RoOyBfZysrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IG1l
c2hlc18xW19nXTsKKyAgICAgICAgICAgIGlmICghbWVzaC5zdWJNZXNoZXMpIHsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIF9o
ID0gMCwgX2ogPSBtZXNoLnN1Yk1lc2hlczsgX2ggPCBfai5sZW5ndGg7IF9oKyspIHsKKyAgICAg
ICAgICAgICAgICB2YXIgc3ViTWVzaCA9IF9qW19oXTsKKyAgICAgICAgICAgICAgICBpZiAoc3Vi
TWVzaC5nZXRNYXRlcmlhbCgpICE9PSB0aGlzKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXN1Yk1lc2guX21h
dGVyaWFsRGVmaW5lcykgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGRlZmluZXMgPSBzdWJNZXNoLl9tYXRlcmlh
bERlZmluZXM7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5tYXJrQWxsQXNEaXJ0eSgpOworICAg
ICAgICAgICAgICAgIGRlZmluZXMucmVzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqCisgICAgICogUnVucyBhbiBvdHBpbWl6YXRpb24gcGhhc2UgdG8gdHJ5
IHRvIGltcHJvdmUgdGhlIHNoYWRlciBjb2RlCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsLnBy
b3RvdHlwZS5vcHRpbWl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAw
LCBfYSA9IHRoaXMuX29wdGltaXplcnM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAg
ICAgICB2YXIgb3B0aW1pemVyID0gX2FbX2ldOworICAgICAgICAgICAgb3B0aW1pemVyLm9wdGlt
aXplKHRoaXMuX3ZlcnRleE91dHB1dE5vZGVzLCB0aGlzLl9mcmFnbWVudE91dHB1dE5vZGVzKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5fcHJlcGFyZURl
ZmluZXNGb3JBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKG1lc2gsIGRlZmluZXMpIHsKKyAgICAgICAg
aWYgKCFkZWZpbmVzLl9hcmVBdHRyaWJ1dGVzRGlydHkpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBkZWZpbmVzWyJOT1JNQUwiXSA9IG1lc2guaXNWZXJ0aWNlc0Rh
dGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJW
ZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKTsKKyAgICAgICAgZGVmaW5lc1siVEFOR0VOVCJdID0g
bWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzExX19bIlZlcnRleEJ1ZmZlciJdLlRhbmdlbnRLaW5kKTsKKyAgICAgICAgZGVm
aW5lc1siVVYxIl0gPSBtZXNoLmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAgKiBHZXQgaWYgdGhlIHN1Ym1lc2ggaXMgcmVhZHkgdG8gYmUg
dXNlZCBhbmQgYWxsIGl0cyBpbmZvcm1hdGlvbiBhdmFpbGFibGUuCisgICAgICAqIENoaWxkIGNs
YXNzZXMgY2FuIHVzZSBpdCB0byB1cGRhdGUgc2hhZGVycworICAgICAgKiBAcGFyYW0gbWVzaCBk
ZWZpbmVzIHRoZSBtZXNoIHRvIGNoZWNrCisgICAgICAqIEBwYXJhbSBzdWJNZXNoIGRlZmluZXMg
d2hpY2ggc3VibWVzaCB0byBjaGVjaworICAgICAgKiBAcGFyYW0gdXNlSW5zdGFuY2VzIHNwZWNp
ZmllcyB0aGF0IGluc3RhbmNlcyBzaG91bGQgYmUgdXNlZAorICAgICAgKiBAcmV0dXJucyBhIGJv
b2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJlYWR5IG9yIG5vdAorICAgICAg
Ki8KKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLmlzUmVhZHlGb3JTdWJNZXNoID0gZnVuY3Rp
b24gKG1lc2gsIHN1Yk1lc2gsIHVzZUluc3RhbmNlcykgeworICAgICAgICB2YXIgX3RoaXMgPSB0
aGlzOworICAgICAgICBpZiAodXNlSW5zdGFuY2VzID09PSB2b2lkIDApIHsgdXNlSW5zdGFuY2Vz
ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCF0aGlzLl9idWlsZFdhc1N1Y2Nlc3NmdWwpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2NlbmUgPSB0
aGlzLmdldFNjZW5lKCk7CisgICAgICAgIGlmICh0aGlzLl9zaGFyZWREYXRhLmFuaW1hdGVkSW5w
dXRzKSB7CisgICAgICAgICAgICB2YXIgZnJhbWVJZCA9IHNjZW5lLmdldEZyYW1lSWQoKTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9hbmltYXRpb25GcmFtZSAhPT0gZnJhbWVJZCkgeworICAgICAg
ICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9zaGFyZWREYXRhLmFuaW1hdGVk
SW5wdXRzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgICAgICB2YXIg
aW5wdXQgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgICAgIGlucHV0LmFuaW1hdGUoc2NlbmUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl9hbmltYXRpb25GcmFt
ZSA9IGZyYW1lSWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1Yk1l
c2guZWZmZWN0ICYmIHRoaXMuaXNGcm96ZW4pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl93YXNQ
cmV2aW91c2x5UmVhZHkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXN1Yk1lc2guX21hdGVyaWFsRGVmaW5lcykg
eworICAgICAgICAgICAgc3ViTWVzaC5fbWF0ZXJpYWxEZWZpbmVzID0gbmV3IE5vZGVNYXRlcmlh
bERlZmluZXMoKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZGVmaW5lcyA9IHN1Yk1lc2guX21h
dGVyaWFsRGVmaW5lczsKKyAgICAgICAgaWYgKCF0aGlzLmNoZWNrUmVhZHlPbkV2ZXJ5Q2FsbCAm
JiBzdWJNZXNoLmVmZmVjdCkgeworICAgICAgICAgICAgaWYgKGRlZmluZXMuX3JlbmRlcklkID09
PSBzY2VuZS5nZXRSZW5kZXJJZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVu
Z2luZSgpOworICAgICAgICB0aGlzLl9wcmVwYXJlRGVmaW5lc0ZvckF0dHJpYnV0ZXMobWVzaCwg
ZGVmaW5lcyk7CisgICAgICAgIC8vIENoZWNrIGlmIGJsb2NrcyBhcmUgcmVhZHkKKyAgICAgICAg
aWYgKHRoaXMuX3NoYXJlZERhdGEuYmxvY2tpbmdCbG9ja3Muc29tZShmdW5jdGlvbiAoYikgeyBy
ZXR1cm4gIWIuaXNSZWFkeShtZXNoLCBfdGhpcywgZGVmaW5lcywgdXNlSW5zdGFuY2VzKTsgfSkp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAvLyBTaGFy
ZWQgZGVmaW5lcworICAgICAgICB0aGlzLl9zaGFyZWREYXRhLmJsb2Nrc1dpdGhEZWZpbmVzLmZv
ckVhY2goZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAgIGIuaW5pdGlhbGl6ZURlZmluZXMobWVz
aCwgX3RoaXMsIGRlZmluZXMsIHVzZUluc3RhbmNlcyk7CisgICAgICAgIH0pOworICAgICAgICB0
aGlzLl9zaGFyZWREYXRhLmJsb2Nrc1dpdGhEZWZpbmVzLmZvckVhY2goZnVuY3Rpb24gKGIpIHsK
KyAgICAgICAgICAgIGIucHJlcGFyZURlZmluZXMobWVzaCwgX3RoaXMsIGRlZmluZXMsIHVzZUlu
c3RhbmNlcyk7CisgICAgICAgIH0pOworICAgICAgICAvLyBOZWVkIHRvIHJlY29tcGlsZT8KKyAg
ICAgICAgaWYgKGRlZmluZXMuaXNEaXJ0eSkgeworICAgICAgICAgICAgZGVmaW5lcy5tYXJrQXNQ
cm9jZXNzZWQoKTsKKyAgICAgICAgICAgIC8vIFJlcGVhdGFibGUgY29udGVudCBnZW5lcmF0b3Jz
CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlLmNvbXBpbGF0aW9uU3Ry
aW5nID0gdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0ZS5fYnVpbHRDb21waWxhdGlvblN0cmlu
ZzsKKyAgICAgICAgICAgIHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0ZS5jb21waWxhdGlv
blN0cmluZyA9IHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0ZS5fYnVpbHRDb21waWxhdGlv
blN0cmluZzsKKyAgICAgICAgICAgIHRoaXMuX3NoYXJlZERhdGEucmVwZWF0YWJsZUNvbnRlbnRC
bG9ja3MuZm9yRWFjaChmdW5jdGlvbiAoYikgeworICAgICAgICAgICAgICAgIGIucmVwbGFjZVJl
cGVhdGFibGVDb250ZW50KF90aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRlLCBfdGhpcy5fZnJh
Z21lbnRDb21waWxhdGlvblN0YXRlLCBtZXNoLCBkZWZpbmVzKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgLy8gVW5pZm9ybXMKKyAgICAgICAgICAgIHRoaXMuX3NoYXJlZERhdGEuZHlu
YW1pY1VuaWZvcm1CbG9ja3MuZm9yRWFjaChmdW5jdGlvbiAoYikgeworICAgICAgICAgICAgICAg
IGIudXBkYXRlVW5pZm9ybXNBbmRTYW1wbGVzKF90aGlzLl92ZXJ0ZXhDb21waWxhdGlvblN0YXRl
LCBfdGhpcywgZGVmaW5lcyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHZhciBtZXJn
ZWRVbmlmb3Jtc18xID0gdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0ZS51bmlmb3JtczsKKyAg
ICAgICAgICAgIHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRpb25TdGF0ZS51bmlmb3Jtcy5mb3JFYWNo
KGZ1bmN0aW9uICh1KSB7CisgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gbWVyZ2VkVW5pZm9y
bXNfMS5pbmRleE9mKHUpOworICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWVyZ2VkVW5pZm9ybXNfMS5wdXNoKHUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgLy8gVW5pZm9ybSBidWZmZXJzCisg
ICAgICAgICAgICB2YXIgbWVyZ2VkVW5pZm9ybUJ1ZmZlcnNfMSA9IHRoaXMuX3ZlcnRleENvbXBp
bGF0aW9uU3RhdGUudW5pZm9ybUJ1ZmZlcnM7CisgICAgICAgICAgICB0aGlzLl9mcmFnbWVudENv
bXBpbGF0aW9uU3RhdGUudW5pZm9ybUJ1ZmZlcnMuZm9yRWFjaChmdW5jdGlvbiAodSkgeworICAg
ICAgICAgICAgICAgIHZhciBpbmRleCA9IG1lcmdlZFVuaWZvcm1CdWZmZXJzXzEuaW5kZXhPZih1
KTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1lcmdlZFVuaWZvcm1CdWZmZXJzXzEucHVzaCh1KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIFNhbXBsZXJzCisgICAgICAgICAgICB2YXIg
bWVyZ2VkU2FtcGxlcnNfMSA9IHRoaXMuX3ZlcnRleENvbXBpbGF0aW9uU3RhdGUuc2FtcGxlcnM7
CisgICAgICAgICAgICB0aGlzLl9mcmFnbWVudENvbXBpbGF0aW9uU3RhdGUuc2FtcGxlcnMuZm9y
RWFjaChmdW5jdGlvbiAocykgeworICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IG1lcmdlZFNh
bXBsZXJzXzEuaW5kZXhPZihzKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7
CisgICAgICAgICAgICAgICAgICAgIG1lcmdlZFNhbXBsZXJzXzEucHVzaChzKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHZhciBmYWxsYmFja3MgPSBu
ZXcgX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJFZmZlY3RGYWxsYmFja3Mi
XSgpOworICAgICAgICAgICAgdGhpcy5fc2hhcmVkRGF0YS5ibG9ja3NXaXRoRmFsbGJhY2tzLmZv
ckVhY2goZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAgICAgICBiLnByb3ZpZGVGYWxsYmFja3Mo
bWVzaCwgZmFsbGJhY2tzKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdmFyIHByZXZp
b3VzRWZmZWN0ID0gc3ViTWVzaC5lZmZlY3Q7CisgICAgICAgICAgICAvLyBDb21waWxhdGlvbgor
ICAgICAgICAgICAgdmFyIGpvaW4gPSBkZWZpbmVzLnRvU3RyaW5nKCk7CisgICAgICAgICAgICB2
YXIgZWZmZWN0ID0gZW5naW5lLmNyZWF0ZUVmZmVjdCh7CisgICAgICAgICAgICAgICAgdmVydGV4
OiAibm9kZU1hdGVyaWFsIiArIHRoaXMuX2J1aWxkSWQsCisgICAgICAgICAgICAgICAgZnJhZ21l
bnQ6ICJub2RlTWF0ZXJpYWwiICsgdGhpcy5fYnVpbGRJZCwKKyAgICAgICAgICAgICAgICB2ZXJ0
ZXhTb3VyY2U6IHRoaXMuX3ZlcnRleENvbXBpbGF0aW9uU3RhdGUuY29tcGlsYXRpb25TdHJpbmcs
CisgICAgICAgICAgICAgICAgZnJhZ21lbnRTb3VyY2U6IHRoaXMuX2ZyYWdtZW50Q29tcGlsYXRp
b25TdGF0ZS5jb21waWxhdGlvblN0cmluZworICAgICAgICAgICAgfSwgeworICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZXM6IHRoaXMuX3ZlcnRleENvbXBpbGF0aW9uU3RhdGUuYXR0cmlidXRlcywK
KyAgICAgICAgICAgICAgICB1bmlmb3Jtc05hbWVzOiBtZXJnZWRVbmlmb3Jtc18xLAorICAgICAg
ICAgICAgICAgIHVuaWZvcm1CdWZmZXJzTmFtZXM6IG1lcmdlZFVuaWZvcm1CdWZmZXJzXzEsCisg
ICAgICAgICAgICAgICAgc2FtcGxlcnM6IG1lcmdlZFNhbXBsZXJzXzEsCisgICAgICAgICAgICAg
ICAgZGVmaW5lczogam9pbiwKKyAgICAgICAgICAgICAgICBmYWxsYmFja3M6IGZhbGxiYWNrcywK
KyAgICAgICAgICAgICAgICBvbkNvbXBpbGVkOiB0aGlzLm9uQ29tcGlsZWQsCisgICAgICAgICAg
ICAgICAgb25FcnJvcjogdGhpcy5vbkVycm9yLAorICAgICAgICAgICAgICAgIGluZGV4UGFyYW1l
dGVyczogeyBtYXhTaW11bHRhbmVvdXNMaWdodHM6IHRoaXMubWF4U2ltdWx0YW5lb3VzTGlnaHRz
LCBtYXhTaW11bHRhbmVvdXNNb3JwaFRhcmdldHM6IGRlZmluZXMuTlVNX01PUlBIX0lORkxVRU5D
RVJTIH0KKyAgICAgICAgICAgIH0sIGVuZ2luZSk7CisgICAgICAgICAgICBpZiAoZWZmZWN0KSB7
CisgICAgICAgICAgICAgICAgLy8gVXNlIHByZXZpb3VzIGVmZmVjdCB3aGlsZSBuZXcgb25lIGlz
IGNvbXBpbGluZworICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsbG93U2hhZGVySG90U3dhcHBp
bmcgJiYgcHJldmlvdXNFZmZlY3QgJiYgIWVmZmVjdC5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZWZmZWN0ID0gcHJldmlvdXNFZmZlY3Q7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmluZXMubWFya0FzVW5wcm9jZXNzZWQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lLnJlc2V0Q2FjaGVkTWF0ZXJp
YWwoKTsKKyAgICAgICAgICAgICAgICAgICAgc3ViTWVzaC5zZXRFZmZlY3QoZWZmZWN0LCBkZWZp
bmVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFzdWJNZXNoLmVmZmVjdCB8fCAhc3ViTWVzaC5lZmZlY3QuaXNSZWFkeSgpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZGVmaW5lcy5fcmVu
ZGVySWQgPSBzY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICB0aGlzLl93YXNQcmV2aW91c2x5
UmVhZHkgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShOb2RlTWF0ZXJpYWwucHJvdG90eXBlLCAiY29tcGlsZWRTaGFkZXJzIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUg
c2hhZGVycyBidWlsdCBieSB0aGUgY3VycmVudCBub2RlIGdyYXBoCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAiLy8gVmVydGV4IHNo
YWRlclxyXG4iICsgdGhpcy5fdmVydGV4Q29tcGlsYXRpb25TdGF0ZS5jb21waWxhdGlvblN0cmlu
ZyArICJcclxuXHJcbi8vIEZyYWdtZW50IHNoYWRlclxyXG4iICsgdGhpcy5fZnJhZ21lbnRDb21w
aWxhdGlvblN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAv
KioKKyAgICAgKiBCaW5kcyB0aGUgd29ybGQgbWF0cml4IHRvIHRoZSBtYXRlcmlhbAorICAgICAq
IEBwYXJhbSB3b3JsZCBkZWZpbmVzIHRoZSB3b3JsZCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKKyAg
ICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLmJpbmRPbmx5V29ybGRNYXRyaXggPSBm
dW5jdGlvbiAod29ybGQpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOwor
ICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZUVmZmVjdCkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHZhciBoaW50cyA9IHRoaXMuX3NoYXJlZERhdGEuaGludHM7Cisg
ICAgICAgIGlmIChoaW50cy5uZWVkV29ybGRWaWV3TWF0cml4KSB7CisgICAgICAgICAgICB3b3Js
ZC5tdWx0aXBseVRvUmVmKHNjZW5lLmdldFZpZXdNYXRyaXgoKSwgdGhpcy5fY2FjaGVkV29ybGRW
aWV3TWF0cml4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGludHMubmVlZFdvcmxkVmlld1By
b2plY3Rpb25NYXRyaXgpIHsKKyAgICAgICAgICAgIHdvcmxkLm11bHRpcGx5VG9SZWYoc2NlbmUu
Z2V0VHJhbnNmb3JtTWF0cml4KCksIHRoaXMuX2NhY2hlZFdvcmxkVmlld1Byb2plY3Rpb25NYXRy
aXgpOworICAgICAgICB9CisgICAgICAgIC8vIENvbm5lY3Rpb24gcG9pbnRzCisgICAgICAgIGZv
ciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9zaGFyZWREYXRhLmlucHV0QmxvY2tzOyBfaSA8IF9h
Lmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGlucHV0QmxvY2sgPSBfYVtfaV07Cisg
ICAgICAgICAgICBpbnB1dEJsb2NrLl90cmFuc21pdFdvcmxkKHRoaXMuX2FjdGl2ZUVmZmVjdCwg
d29ybGQsIHRoaXMuX2NhY2hlZFdvcmxkVmlld01hdHJpeCwgdGhpcy5fY2FjaGVkV29ybGRWaWV3
UHJvamVjdGlvbk1hdHJpeCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEJp
bmRzIHRoZSBzdWJtZXNoIHRvIHRoaXMgbWF0ZXJpYWwgYnkgcHJlcGFyaW5nIHRoZSBlZmZlY3Qg
YW5kIHNoYWRlciB0byBkcmF3CisgICAgICogQHBhcmFtIHdvcmxkIGRlZmluZXMgdGhlIHdvcmxk
IHRyYW5zZm9ybWF0aW9uIG1hdHJpeAorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIG1l
c2ggY29udGFpbmluZyB0aGUgc3VibWVzaAorICAgICAqIEBwYXJhbSBzdWJNZXNoIGRlZmluZXMg
dGhlIHN1Ym1lc2ggdG8gYmluZCB0aGUgbWF0ZXJpYWwgdG8KKyAgICAgKi8KKyAgICBOb2RlTWF0
ZXJpYWwucHJvdG90eXBlLmJpbmRGb3JTdWJNZXNoID0gZnVuY3Rpb24gKHdvcmxkLCBtZXNoLCBz
dWJNZXNoKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAg
dmFyIGVmZmVjdCA9IHN1Yk1lc2guZWZmZWN0OworICAgICAgICBpZiAoIWVmZmVjdCkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2FjdGl2ZUVmZmVjdCA9
IGVmZmVjdDsKKyAgICAgICAgLy8gTWF0cmljZXMKKyAgICAgICAgdGhpcy5iaW5kT25seVdvcmxk
TWF0cml4KHdvcmxkKTsKKyAgICAgICAgdmFyIG11c3RSZWJpbmQgPSB0aGlzLl9tdXN0UmViaW5k
KHNjZW5lLCBlZmZlY3QsIG1lc2gudmlzaWJpbGl0eSk7CisgICAgICAgIGlmIChtdXN0UmViaW5k
KSB7CisgICAgICAgICAgICB2YXIgc2hhcmVkRGF0YSA9IHRoaXMuX3NoYXJlZERhdGE7CisgICAg
ICAgICAgICBpZiAoZWZmZWN0ICYmIHNjZW5lLmdldENhY2hlZE1hdGVyaWFsKCkgIT09IHRoaXMp
IHsKKyAgICAgICAgICAgICAgICAvLyBCaW5kYWJsZSBibG9ja3MKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBfaSA9IDAsIF9hID0gc2hhcmVkRGF0YS5iaW5kYWJsZUJsb2NrczsgX2kgPCBfYS5s
ZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gX2FbX2ldOwor
ICAgICAgICAgICAgICAgICAgICBibG9jay5iaW5kKGVmZmVjdCwgdGhpcywgbWVzaCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIENvbm5lY3Rpb24gcG9pbnRzCisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBfYyA9IHNoYXJlZERhdGEuaW5wdXRCbG9ja3M7
IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dEJs
b2NrID0gX2NbX2JdOworICAgICAgICAgICAgICAgICAgICBpbnB1dEJsb2NrLl90cmFuc21pdChl
ZmZlY3QsIHNjZW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fYWZ0ZXJCaW5kKG1lc2gsIHRoaXMuX2FjdGl2ZUVmZmVjdCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBhY3RpdmUgdGV4dHVyZXMgZnJvbSB0aGUg
bWF0ZXJpYWwKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB0ZXh0dXJlcworICAgICAqLwor
ICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUuZ2V0QWN0aXZlVGV4dHVyZXMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBhY3RpdmVUZXh0dXJlcyA9IF9zdXBlci5wcm90b3R5cGUuZ2V0QWN0
aXZlVGV4dHVyZXMuY2FsbCh0aGlzKTsKKyAgICAgICAgYWN0aXZlVGV4dHVyZXMucHVzaC5hcHBs
eShhY3RpdmVUZXh0dXJlcywgdGhpcy5fc2hhcmVkRGF0YS50ZXh0dXJlQmxvY2tzLmZpbHRlcihm
dW5jdGlvbiAodGIpIHsgcmV0dXJuIHRiLnRleHR1cmU7IH0pLm1hcChmdW5jdGlvbiAodGIpIHsg
cmV0dXJuIHRiLnRleHR1cmU7IH0pKTsKKyAgICAgICAgcmV0dXJuIGFjdGl2ZVRleHR1cmVzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGlzdCBvZiB0ZXh0dXJlIGJsb2Nrcwor
ICAgICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIHRleHR1cmUgYmxvY2tzCisgICAgICovCisgICAg
Tm9kZU1hdGVyaWFsLnByb3RvdHlwZS5nZXRUZXh0dXJlQmxvY2tzID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICBpZiAoIXRoaXMuX3NoYXJlZERhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBbXTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fc2hhcmVkRGF0YS50ZXh0dXJlQmxvY2tz
LmZpbHRlcihmdW5jdGlvbiAodGIpIHsgcmV0dXJuIHRiLnRleHR1cmU7IH0pOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU3BlY2lmaWVzIGlmIHRoZSBtYXRlcmlhbCB1c2VzIGEgdGV4dHVyZQor
ICAgICAqIEBwYXJhbSB0ZXh0dXJlIGRlZmluZXMgdGhlIHRleHR1cmUgdG8gY2hlY2sgYWdhaW5z
dCB0aGUgbWF0ZXJpYWwKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gc3BlY2lmeWluZyBpZiB0
aGUgbWF0ZXJpYWwgdXNlcyB0aGUgdGV4dHVyZQorICAgICAqLworICAgIE5vZGVNYXRlcmlhbC5w
cm90b3R5cGUuaGFzVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXh0dXJlKSB7CisgICAgICAgIGlmIChf
c3VwZXIucHJvdG90eXBlLmhhc1RleHR1cmUuY2FsbCh0aGlzLCB0ZXh0dXJlKSkgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9zaGFyZWRE
YXRhKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3NoYXJlZERhdGEudGV4dHVyZUJsb2NrczsgX2kgPCBf
YS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciB0ID0gX2FbX2ldOworICAgICAgICAg
ICAgaWYgKHQudGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBtYXRlcmlhbAorICAgICAqIEBwYXJh
bSBmb3JjZURpc3Bvc2VFZmZlY3Qgc3BlY2lmaWVzIGlmIGVmZmVjdHMgc2hvdWxkIGJlIGZvcmNl
ZnVsbHkgZGlzcG9zZWQKKyAgICAgKiBAcGFyYW0gZm9yY2VEaXNwb3NlVGV4dHVyZXMgc3BlY2lm
aWVzIGlmIHRleHR1cmVzIHNob3VsZCBiZSBmb3JjZWZ1bGx5IGRpc3Bvc2VkCisgICAgICogQHBh
cmFtIG5vdEJvdW5kVG9NZXNoIHNwZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwgdGhhdCBpcyBiZWlu
ZyBkaXNwb3NlZCBpcyBrbm93biB0byBiZSBub3QgYm91bmQgdG8gYW55IG1lc2gKKyAgICAgKi8K
KyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZm9yY2VEaXNw
b3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcywgbm90Qm91bmRUb01lc2gpIHsKKyAgICAg
ICAgaWYgKGZvcmNlRGlzcG9zZVRleHR1cmVzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBfaSA9
IDAsIF9hID0gdGhpcy5fc2hhcmVkRGF0YS50ZXh0dXJlQmxvY2tzLmZpbHRlcihmdW5jdGlvbiAo
dGIpIHsgcmV0dXJuIHRiLnRleHR1cmU7IH0pLm1hcChmdW5jdGlvbiAodGIpIHsgcmV0dXJuIHRi
LnRleHR1cmU7IH0pOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZh
ciB0ZXh0dXJlID0gX2FbX2ldOworICAgICAgICAgICAgICAgIHRleHR1cmUuZGlzcG9zZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMub25CdWlsZE9ic2VydmFibGUu
Y2xlYXIoKTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcywgZm9y
Y2VEaXNwb3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcywgbm90Qm91bmRUb01lc2gpOwor
ICAgIH07CisgICAgLyoqIENyZWF0ZXMgdGhlIG5vZGUgZWRpdG9yIHdpbmRvdy4gKi8KKyAgICBO
b2RlTWF0ZXJpYWwucHJvdG90eXBlLl9jcmVhdGVOb2RlRWRpdG9yID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB0aGlzLkJKU05PREVNQVRFUklBTEVESVRPUiA9IHRoaXMuQkpTTk9ERU1BVEVSSUFM
RURJVE9SIHx8IHRoaXMuX2dldEdsb2JhbE5vZGVNYXRlcmlhbEVkaXRvcigpOworICAgICAgICB0
aGlzLkJKU05PREVNQVRFUklBTEVESVRPUi5Ob2RlRWRpdG9yLlNob3coeworICAgICAgICAgICAg
bm9kZU1hdGVyaWFsOiB0aGlzCisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICog
TGF1bmNoIHRoZSBub2RlIG1hdGVyaWFsIGVkaXRvcgorICAgICAqIEBwYXJhbSBjb25maWcgRGVm
aW5lIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBlZGl0b3IKKyAgICAgKiBAcmV0dXJuIGEgcHJv
bWlzZSBmdWxmaWxsZWQgd2hlbiB0aGUgbm9kZSBlZGl0b3IgaXMgdmlzaWJsZQorICAgICAqLwor
ICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUuZWRpdCA9IGZ1bmN0aW9uIChjb25maWcpIHsKKyAg
ICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMuQkpT
Tk9ERU1BVEVSSUFMRURJVE9SID09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgdmFy
IGVkaXRvclVybCA9IGNvbmZpZyAmJiBjb25maWcuZWRpdG9yVVJMID8gY29uZmlnLmVkaXRvclVS
TCA6IE5vZGVNYXRlcmlhbC5FZGl0b3JVUkw7CisgICAgICAgICAgICAgICAgLy8gTG9hZCBlZGl0
b3IgYW5kIGFkZCBpdCB0byB0aGUgRE9NCisgICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlRvb2xzIl0uTG9hZFNjcmlwdChlZGl0b3JVcmws
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2NyZWF0ZU5vZGVFZGl0
b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlIGNyZWF0ZXMgdGhlIGVkaXRvcgorICAgICAgICAgICAgICAgIF90aGlzLl9jcmVh
dGVOb2RlRWRpdG9yKCk7CisgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsZWFyIHRoZSBjdXJyZW50
IG1hdGVyaWFsCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5jbGVhciA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fdmVydGV4T3V0cHV0Tm9kZXMgPSBbXTsKKyAgICAg
ICAgdGhpcy5fZnJhZ21lbnRPdXRwdXROb2RlcyA9IFtdOworICAgICAgICB0aGlzLmF0dGFjaGVk
QmxvY2tzID0gW107CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbGVhciB0aGUgY3VycmVudCBt
YXRlcmlhbCBhbmQgc2V0IGl0IHRvIGEgZGVmYXVsdCBzdGF0ZQorICAgICAqLworICAgIE5vZGVN
YXRlcmlhbC5wcm90b3R5cGUuc2V0VG9EZWZhdWx0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0
aGlzLmNsZWFyKCk7CisgICAgICAgIHZhciBwb3NpdGlvbklucHV0ID0gbmV3IF9CbG9ja3NfSW5w
dXRfaW5wdXRCbG9ja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siSW5wdXRCbG9jayJd
KCJwb3NpdGlvbiIpOworICAgICAgICBwb3NpdGlvbklucHV0LnNldEFzQXR0cmlidXRlKCJwb3Np
dGlvbiIpOworICAgICAgICB2YXIgd29ybGRJbnB1dCA9IG5ldyBfQmxvY2tzX0lucHV0X2lucHV0
QmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIklucHV0QmxvY2siXSgid29ybGQi
KTsKKyAgICAgICAgd29ybGRJbnB1dC5zZXRBc1N5c3RlbVZhbHVlKEJBQllMT04uTm9kZU1hdGVy
aWFsU3lzdGVtVmFsdWVzLldvcmxkKTsKKyAgICAgICAgdmFyIHdvcmxkUG9zID0gbmV3IF9CbG9j
a3NfdHJhbnNmb3JtQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlRyYW5zZm9y
bUJsb2NrIl0oIndvcmxkUG9zIik7CisgICAgICAgIHBvc2l0aW9uSW5wdXQuY29ubmVjdFRvKHdv
cmxkUG9zKTsKKyAgICAgICAgd29ybGRJbnB1dC5jb25uZWN0VG8od29ybGRQb3MpOworICAgICAg
ICB2YXIgdmlld1Byb2plY3Rpb25JbnB1dCA9IG5ldyBfQmxvY2tzX0lucHV0X2lucHV0QmxvY2tf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIklucHV0QmxvY2siXSgidmlld1Byb2plY3Rp
b24iKTsKKyAgICAgICAgdmlld1Byb2plY3Rpb25JbnB1dC5zZXRBc1N5c3RlbVZhbHVlKEJBQllM
T04uTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzLlZpZXdQcm9qZWN0aW9uKTsKKyAgICAgICAgdmFy
IHdvcmxkUG9zZE11bHRpcGxpZWRCeVZpZXdQcm9qZWN0aW9uID0gbmV3IF9CbG9ja3NfdHJhbnNm
b3JtQmxvY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlRyYW5zZm9ybUJsb2NrIl0o
IndvcmxkUG9zICogdmlld1Byb2plY3Rpb25UcmFuc2Zvcm0iKTsKKyAgICAgICAgd29ybGRQb3Mu
Y29ubmVjdFRvKHdvcmxkUG9zZE11bHRpcGxpZWRCeVZpZXdQcm9qZWN0aW9uKTsKKyAgICAgICAg
dmlld1Byb2plY3Rpb25JbnB1dC5jb25uZWN0VG8od29ybGRQb3NkTXVsdGlwbGllZEJ5Vmlld1By
b2plY3Rpb24pOworICAgICAgICB2YXIgdmVydGV4T3V0cHV0ID0gbmV3IF9CbG9ja3NfVmVydGV4
X3ZlcnRleE91dHB1dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJWZXJ0ZXhP
dXRwdXRCbG9jayJdKCJ2ZXJ0ZXhPdXRwdXQiKTsKKyAgICAgICAgd29ybGRQb3NkTXVsdGlwbGll
ZEJ5Vmlld1Byb2plY3Rpb24uY29ubmVjdFRvKHZlcnRleE91dHB1dCk7CisgICAgICAgIC8vIFBp
eGVsCisgICAgICAgIHZhciBwaXhlbENvbG9yID0gbmV3IF9CbG9ja3NfSW5wdXRfaW5wdXRCbG9j
a19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siSW5wdXRCbG9jayJdKCJjb2xvciIpOwor
ICAgICAgICBwaXhlbENvbG9yLnZhbHVlID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbG9yNCJdKDAuOCwgMC44LCAwLjgsIDEpOworICAgICAg
ICB2YXIgZnJhZ21lbnRPdXRwdXQgPSBuZXcgX0Jsb2Nrc19GcmFnbWVudF9mcmFnbWVudE91dHB1
dEJsb2NrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJGcmFnbWVudE91dHB1dEJsb2Nr
Il0oImZyYWdtZW50T3V0cHV0Iik7CisgICAgICAgIHBpeGVsQ29sb3IuY29ubmVjdFRvKGZyYWdt
ZW50T3V0cHV0KTsKKyAgICAgICAgLy8gQWRkIHRvIG5vZGVzCisgICAgICAgIHRoaXMuYWRkT3V0
cHV0Tm9kZSh2ZXJ0ZXhPdXRwdXQpOworICAgICAgICB0aGlzLmFkZE91dHB1dE5vZGUoZnJhZ21l
bnRPdXRwdXQpOworICAgIH07CisgICAgLyoqCisgICAgICogTG9hZHMgdGhlIGN1cnJlbnQgTm9k
ZSBNYXRlcmlhbCBmcm9tIGEgdXJsIHBvaW50aW5nIHRvIGEgZmlsZSBzYXZlIGJ5IHRoZSBOb2Rl
IE1hdGVyaWFsIEVkaXRvcgorICAgICAqIEBwYXJhbSB1cmwgZGVmaW5lcyB0aGUgdXJsIHRvIGxv
YWQgZnJvbQorICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdpbGwgZnVsbGZpbCB3aGVu
IHRoZSBtYXRlcmlhbCBpcyBmdWxseSBsb2FkZWQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwu
cHJvdG90eXBlLmxvYWRBc3luYyA9IGZ1bmN0aW9uICh1cmwpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCBy
ZWplY3QpIHsKKyAgICAgICAgICAgIF9NaXNjX2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTlfX1siRmlsZVRvb2xzIl0uTG9hZEZpbGUodXJsLCBmdW5jdGlvbiAoZGF0YSkgewor
ICAgICAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gSlNPTi5wYXJzZShkYXRh
KTsKKyAgICAgICAgICAgICAgICBfdGhpcy5sb2FkRnJvbVNlcmlhbGl6YXRpb24oc2VyaWFsaXph
dGlvbk9iamVjdCwgIiIpOworICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAg
IH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZSwgZnVuY3Rpb24gKHJlcXVlc3QsIGV4Y2Vw
dGlvbikgeworICAgICAgICAgICAgICAgIHJlamVjdChleGNlcHRpb24ubWVzc2FnZSk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90
eXBlLl9nYXRoZXJCbG9ja3MgPSBmdW5jdGlvbiAocm9vdE5vZGUsIGxpc3QpIHsKKyAgICAgICAg
aWYgKGxpc3QuaW5kZXhPZihyb290Tm9kZSkgIT09IC0xKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgbGlzdC5wdXNoKHJvb3ROb2RlKTsKKyAgICAgICAgZm9yICh2
YXIgX2kgPSAwLCBfYSA9IHJvb3ROb2RlLmlucHV0czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsK
KyAgICAgICAgICAgIHZhciBpbnB1dCA9IF9hW19pXTsKKyAgICAgICAgICAgIHZhciBjb25uZWN0
ZWRQb2ludCA9IGlucHV0LmNvbm5lY3RlZFBvaW50OworICAgICAgICAgICAgaWYgKGNvbm5lY3Rl
ZFBvaW50KSB7CisgICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gY29ubmVjdGVkUG9pbnQub3du
ZXJCbG9jazsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2sgIT09IHJvb3ROb2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2dhdGhlckJsb2NrcyhibG9jaywgbGlzdCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZW5lcmF0ZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb2RlIGRlY2xhcmF0aW9uIHJl
cXVpcmVkIHRvIGNyZWF0ZSBhbiBlcXVpdmFsZW50IG9mIHRoaXMgbWF0ZXJpYWwKKyAgICAgKiBA
cmV0dXJucyBhIHN0cmluZworICAgICAqLworICAgIE5vZGVNYXRlcmlhbC5wcm90b3R5cGUuZ2Vu
ZXJhdGVDb2RlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgYWxyZWFkeUR1bXBlZCA9IFtd
OworICAgICAgICB2YXIgdmVydGV4QmxvY2tzID0gW107CisgICAgICAgIHZhciB1bmlxdWVOYW1l
cyA9IFtdOworICAgICAgICAvLyBHZXRzIGFjdGl2ZSBibG9ja3MKKyAgICAgICAgZm9yICh2YXIg
X2kgPSAwLCBfYSA9IHRoaXMuX3ZlcnRleE91dHB1dE5vZGVzOyBfaSA8IF9hLmxlbmd0aDsgX2kr
KykgeworICAgICAgICAgICAgdmFyIG91dHB1dE5vZGUgPSBfYVtfaV07CisgICAgICAgICAgICB0
aGlzLl9nYXRoZXJCbG9ja3Mob3V0cHV0Tm9kZSwgdmVydGV4QmxvY2tzKTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgZnJhZ21lbnRCbG9ja3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgX2IgPSAw
LCBfYyA9IHRoaXMuX2ZyYWdtZW50T3V0cHV0Tm9kZXM7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7
CisgICAgICAgICAgICB2YXIgb3V0cHV0Tm9kZSA9IF9jW19iXTsKKyAgICAgICAgICAgIHRoaXMu
X2dhdGhlckJsb2NrcyhvdXRwdXROb2RlLCBmcmFnbWVudEJsb2Nrcyk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gR2VuZXJhdGUgdmVydGV4IHNoYWRlcgorICAgICAgICB2YXIgY29kZVN0cmluZyA9
ICJ2YXIgbm9kZU1hdGVyaWFsID0gbmV3IEJBQllMT04uTm9kZU1hdGVyaWFsKGBub2RlIG1hdGVy
aWFsYCk7XHJcbiI7CisgICAgICAgIGZvciAodmFyIF9kID0gMCwgdmVydGV4QmxvY2tzXzEgPSB2
ZXJ0ZXhCbG9ja3M7IF9kIDwgdmVydGV4QmxvY2tzXzEubGVuZ3RoOyBfZCsrKSB7CisgICAgICAg
ICAgICB2YXIgbm9kZSA9IHZlcnRleEJsb2Nrc18xW19kXTsKKyAgICAgICAgICAgIGlmIChub2Rl
LmlzSW5wdXQgJiYgYWxyZWFkeUR1bXBlZC5pbmRleE9mKG5vZGUpID09PSAtMSkgeworICAgICAg
ICAgICAgICAgIGNvZGVTdHJpbmcgKz0gbm9kZS5fZHVtcENvZGUodW5pcXVlTmFtZXMsIGFscmVh
ZHlEdW1wZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEdlbmVyYXRl
IGZyYWdtZW50IHNoYWRlcgorICAgICAgICBmb3IgKHZhciBfZSA9IDAsIGZyYWdtZW50QmxvY2tz
XzEgPSBmcmFnbWVudEJsb2NrczsgX2UgPCBmcmFnbWVudEJsb2Nrc18xLmxlbmd0aDsgX2UrKykg
eworICAgICAgICAgICAgdmFyIG5vZGUgPSBmcmFnbWVudEJsb2Nrc18xW19lXTsKKyAgICAgICAg
ICAgIGlmIChub2RlLmlzSW5wdXQgJiYgYWxyZWFkeUR1bXBlZC5pbmRleE9mKG5vZGUpID09PSAt
MSkgeworICAgICAgICAgICAgICAgIGNvZGVTdHJpbmcgKz0gbm9kZS5fZHVtcENvZGUodW5pcXVl
TmFtZXMsIGFscmVhZHlEdW1wZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGZvciAodmFyIF9mID0gMCwgX2cgPSB0aGlzLl92ZXJ0ZXhPdXRwdXROb2RlczsgX2YgPCBfZy5s
ZW5ndGg7IF9mKyspIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gX2dbX2ZdOworICAgICAgICAg
ICAgY29kZVN0cmluZyArPSAibm9kZU1hdGVyaWFsLmFkZE91dHB1dE5vZGUoIiArIG5vZGUuX2Nv
ZGVWYXJpYWJsZU5hbWUgKyAiKTtcclxuIjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBf
aCA9IDAsIF9qID0gdGhpcy5fZnJhZ21lbnRPdXRwdXROb2RlczsgX2ggPCBfai5sZW5ndGg7IF9o
KyspIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gX2pbX2hdOworICAgICAgICAgICAgY29kZVN0
cmluZyArPSAibm9kZU1hdGVyaWFsLmFkZE91dHB1dE5vZGUoIiArIG5vZGUuX2NvZGVWYXJpYWJs
ZU5hbWUgKyAiKTtcclxuIjsKKyAgICAgICAgfQorICAgICAgICBjb2RlU3RyaW5nICs9ICJub2Rl
TWF0ZXJpYWwuYnVpbGQoKTtcclxuIjsKKyAgICAgICAgcmV0dXJuIGNvZGVTdHJpbmc7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoaXMgbWF0ZXJpYWwgaW4gYSBKU09OIHJl
cHJlc2VudGF0aW9uCisgICAgICogQHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgbWF0ZXJpYWwgb2Jq
ZWN0CisgICAgICovCisgICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siU2VyaWFsaXphdGlvbkhlbHBlciJd
LlNlcmlhbGl6ZSh0aGlzKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21UeXBl
ID0gIkJBQllMT04uTm9kZU1hdGVyaWFsIjsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5v
dXRwdXROb2RlcyA9IFtdOworICAgICAgICB2YXIgYmxvY2tzID0gW107CisgICAgICAgIC8vIE91
dHB1dHMKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3ZlcnRleE91dHB1dE5v
ZGVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIG91dHB1dE5vZGUg
PSBfYVtfaV07CisgICAgICAgICAgICB0aGlzLl9nYXRoZXJCbG9ja3Mob3V0cHV0Tm9kZSwgYmxv
Y2tzKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qub3V0cHV0Tm9kZXMucHVzaChv
dXRwdXROb2RlLnVuaXF1ZUlkKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfYiA9IDAs
IF9jID0gdGhpcy5fZnJhZ21lbnRPdXRwdXROb2RlczsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHsK
KyAgICAgICAgICAgIHZhciBvdXRwdXROb2RlID0gX2NbX2JdOworICAgICAgICAgICAgdGhpcy5f
Z2F0aGVyQmxvY2tzKG91dHB1dE5vZGUsIGJsb2Nrcyk7CisgICAgICAgICAgICBpZiAoc2VyaWFs
aXphdGlvbk9iamVjdC5vdXRwdXROb2Rlcy5pbmRleE9mKG91dHB1dE5vZGUudW5pcXVlSWQpID09
PSAtMSkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qub3V0cHV0Tm9kZXMu
cHVzaChvdXRwdXROb2RlLnVuaXF1ZUlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAvLyBCbG9ja3MKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5ibG9ja3MgPSBbXTsK
KyAgICAgICAgZm9yICh2YXIgX2QgPSAwLCBibG9ja3NfMSA9IGJsb2NrczsgX2QgPCBibG9ja3Nf
MS5sZW5ndGg7IF9kKyspIHsKKyAgICAgICAgICAgIHZhciBibG9jayA9IGJsb2Nrc18xW19kXTsK
KyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYmxvY2tzLnB1c2goYmxvY2suc2VyaWFs
aXplKCkpOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIF9lID0gMCwgX2YgPSB0aGlzLmF0
dGFjaGVkQmxvY2tzOyBfZSA8IF9mLmxlbmd0aDsgX2UrKykgeworICAgICAgICAgICAgdmFyIGJs
b2NrID0gX2ZbX2VdOworICAgICAgICAgICAgaWYgKGJsb2Nrcy5pbmRleE9mKGJsb2NrKSAhPT0g
LTEpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYmxvY2tzLnB1c2goYmxvY2suc2VyaWFsaXplKCkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07Cisg
ICAgTm9kZU1hdGVyaWFsLnByb3RvdHlwZS5fcmVzdG9yZUNvbm5lY3Rpb25zID0gZnVuY3Rpb24g
KGJsb2NrLCBzb3VyY2UsIG1hcCkgeworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gYmxv
Y2sub3V0cHV0czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBvdXRw
dXRQb2ludCA9IF9hW19pXTsKKyAgICAgICAgICAgIGZvciAodmFyIF9iID0gMCwgX2MgPSBzb3Vy
Y2UuYmxvY2tzOyBfYiA8IF9jLmxlbmd0aDsgX2IrKykgeworICAgICAgICAgICAgICAgIHZhciBj
YW5kaWRhdGUgPSBfY1tfYl07CisgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IG1hcFtjYW5k
aWRhdGUuaWRdOworICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gMCwgX2UgPSBjYW5kaWRh
dGUuaW5wdXRzOyBfZCA8IF9lLmxlbmd0aDsgX2QrKykgeworICAgICAgICAgICAgICAgICAgICB2
YXIgaW5wdXQgPSBfZVtfZF07CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXBbaW5wdXQudGFy
Z2V0QmxvY2tJZF0gPT09IGJsb2NrICYmIGlucHV0LnRhcmdldENvbm5lY3Rpb25OYW1lID09PSBv
dXRwdXRQb2ludC5uYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRQb2lu
dCA9IHRhcmdldC5nZXRJbnB1dEJ5TmFtZShpbnB1dC5pbnB1dE5hbWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpbnB1dFBvaW50IHx8IGlucHV0UG9pbnQuaXNDb25uZWN0ZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFBvaW50LmNvbm5lY3RUbyhp
bnB1dFBvaW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc3RvcmVD
b25uZWN0aW9ucyh0YXJnZXQsIHNvdXJjZSwgbWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbGVhciB0aGUg
Y3VycmVudCBncmFwaCBhbmQgbG9hZCBhIG5ldyBvbmUgZnJvbSBhIHNlcmlhbGl6YXRpb24gb2Jq
ZWN0CisgICAgICogQHBhcmFtIHNvdXJjZSBkZWZpbmVzIHRoZSBKU09OIHJlcHJlc2VudGF0aW9u
IG9mIHRoZSBtYXRlcmlhbAorICAgICAqIEBwYXJhbSByb290VXJsIGRlZmluZXMgdGhlIHJvb3Qg
VVJMIHRvIHVzZSB0byBsb2FkIHRleHR1cmVzIGFuZCByZWxhdGl2ZSBkZXBlbmRlbmNpZXMKKyAg
ICAgKi8KKyAgICBOb2RlTWF0ZXJpYWwucHJvdG90eXBlLmxvYWRGcm9tU2VyaWFsaXphdGlvbiA9
IGZ1bmN0aW9uIChzb3VyY2UsIHJvb3RVcmwpIHsKKyAgICAgICAgaWYgKHJvb3RVcmwgPT09IHZv
aWQgMCkgeyByb290VXJsID0gIiI7IH0KKyAgICAgICAgdGhpcy5jbGVhcigpOworICAgICAgICB2
YXIgbWFwID0ge307CisgICAgICAgIC8vIENyZWF0ZSBibG9ja3MKKyAgICAgICAgZm9yICh2YXIg
X2kgPSAwLCBfYSA9IHNvdXJjZS5ibG9ja3M7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAg
ICAgICAgICB2YXIgcGFyc2VkQmxvY2sgPSBfYVtfaV07CisgICAgICAgICAgICB2YXIgYmxvY2tU
eXBlID0gX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJfVHlw
ZVN0b3JlIl0uR2V0Q2xhc3MocGFyc2VkQmxvY2suY3VzdG9tVHlwZSk7CisgICAgICAgICAgICBp
ZiAoYmxvY2tUeXBlKSB7CisgICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gbmV3IGJsb2NrVHlw
ZSgpOworICAgICAgICAgICAgICAgIGJsb2NrLl9kZXNlcmlhbGl6ZShwYXJzZWRCbG9jaywgdGhp
cy5nZXRTY2VuZSgpLCByb290VXJsKTsKKyAgICAgICAgICAgICAgICBtYXBbcGFyc2VkQmxvY2su
aWRdID0gYmxvY2s7CisgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hlZEJsb2Nrcy5wdXNoKGJs
b2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBDb25uZWN0aW9ucwor
ICAgICAgICAvLyBTdGFydHMgd2l0aCBpbnB1dCBibG9ja3Mgb25seQorICAgICAgICBmb3IgKHZh
ciBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHNvdXJjZS5ibG9ja3MubGVuZ3RoOyBibG9j
a0luZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBwYXJzZWRCbG9ja18xID0gc291cmNlLmJsb2Nr
c1tibG9ja0luZGV4XTsKKyAgICAgICAgICAgIHZhciBibG9jayA9IG1hcFtwYXJzZWRCbG9ja18x
LmlkXTsKKyAgICAgICAgICAgIGlmICghYmxvY2suaXNJbnB1dCkgeworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fcmVzdG9yZUNvbm5l
Y3Rpb25zKGJsb2NrLCBzb3VyY2UsIG1hcCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gT3V0cHV0
cworICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gc291cmNlLm91dHB1dE5vZGVzOyBfYiA8
IF9jLmxlbmd0aDsgX2IrKykgeworICAgICAgICAgICAgdmFyIG91dHB1dE5vZGVJZCA9IF9jW19i
XTsKKyAgICAgICAgICAgIHRoaXMuYWRkT3V0cHV0Tm9kZShtYXBbb3V0cHV0Tm9kZUlkXSk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gU3RvcmUgbWFwIGZvciBleHRlcm5hbCB1c2VzCisgICAgICAg
IHNvdXJjZS5tYXAgPSB7fTsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIG1hcCkgeworICAgICAg
ICAgICAgc291cmNlLm1hcFtrZXldID0gbWFwW2tleV0udW5pcXVlSWQ7CisgICAgICAgIH0KKyAg
ICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBub2RlIG1hdGVyaWFsIGZyb20gcGFyc2Vk
IG1hdGVyaWFsIGRhdGEKKyAgICAgKiBAcGFyYW0gc291cmNlIGRlZmluZXMgdGhlIEpTT04gcmVw
cmVzZW50YXRpb24gb2YgdGhlIG1hdGVyaWFsCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMg
dGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSByb290
IFVSTCB0byB1c2UgdG8gbG9hZCB0ZXh0dXJlcyBhbmQgcmVsYXRpdmUgZGVwZW5kZW5jaWVzCisg
ICAgICogQHJldHVybnMgYSBuZXcgbm9kZSBtYXRlcmlhbAorICAgICAqLworICAgIE5vZGVNYXRl
cmlhbC5QYXJzZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAg
IGlmIChyb290VXJsID09PSB2b2lkIDApIHsgcm9vdFVybCA9ICIiOyB9CisgICAgICAgIHZhciBu
b2RlTWF0ZXJpYWwgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
OF9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3
IE5vZGVNYXRlcmlhbChzb3VyY2UubmFtZSwgc2NlbmUpOyB9LCBzb3VyY2UsIHNjZW5lLCByb290
VXJsKTsKKyAgICAgICAgbm9kZU1hdGVyaWFsLmxvYWRGcm9tU2VyaWFsaXphdGlvbihzb3VyY2Us
IHJvb3RVcmwpOworICAgICAgICByZXR1cm4gbm9kZU1hdGVyaWFsOworICAgIH07CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIG5ldyBub2RlIG1hdGVyaWFsIHNldCB0byBkZWZhdWx0IGJhc2lj
IGNvbmZpZ3VyYXRpb24KKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRo
ZSBtYXRlcmlhbAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5l
CisgICAgICogQHJldHVybnMgYSBuZXcgTm9kZU1hdGVyaWFsCisgICAgICovCisgICAgTm9kZU1h
dGVyaWFsLkNyZWF0ZURlZmF1bHQgPSBmdW5jdGlvbiAobmFtZSwgc2NlbmUpIHsKKyAgICAgICAg
dmFyIG5ld01hdGVyaWFsID0gbmV3IE5vZGVNYXRlcmlhbChuYW1lLCBzY2VuZSk7CisgICAgICAg
IG5ld01hdGVyaWFsLnNldFRvRGVmYXVsdCgpOworICAgICAgICBuZXdNYXRlcmlhbC5idWlsZCgp
OworICAgICAgICByZXR1cm4gbmV3TWF0ZXJpYWw7CisgICAgfTsKKyAgICBOb2RlTWF0ZXJpYWwu
X0J1aWxkSWRHZW5lcmF0b3IgPSAwOworICAgIC8qKiBEZWZpbmUgdGhlIFVSbCB0byBsb2FkIG5v
ZGUgZWRpdG9yIHNjcmlwdCAqLworICAgIE5vZGVNYXRlcmlhbC5FZGl0b3JVUkwgPSAiaHR0cHM6
Ly91bnBrZy5jb20vYmFieWxvbmpzLW5vZGUtZWRpdG9yQCIgKyBfRW5naW5lc19lbmdpbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lIl0uVmVyc2lvbiArICIvYmFieWxvbi5u
b2RlRWRpdG9yLmpzIjsKKyAgICByZXR1cm4gTm9kZU1hdGVyaWFsOworfShfcHVzaE1hdGVyaWFs
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlB1c2hNYXRlcmlhbCJdKSk7CisKK19NaXNj
X3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siX1R5cGVTdG9yZSJdLlJl
Z2lzdGVyZWRUeXBlc1siQkFCWUxPTi5Ob2RlTWF0ZXJpYWwiXSA9IE5vZGVNYXRlcmlhbDsKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2su
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9jay50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogTm9kZU1hdGVyaWFsQmxvY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIE5vZGVN
YXRlcmlhbEJsb2NrOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFs
QmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzICovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnQgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnQudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0cyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY191bmlxdWVJZEdlbmVy
YXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vTWlzYy91bmlxdWVJZEdlbmVyYXRvciAqLyAiLi9NaXNjL3VuaXF1ZUlkR2VuZXJh
dG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9N
aXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisKKy8qKgor
ICogRGVmaW5lcyBhIGJsb2NrIHRoYXQgY2FuIGJlIHVzZWQgaW5zaWRlIGEgbm9kZSBiYXNlZCBt
YXRlcmlhbAorICovCit2YXIgTm9kZU1hdGVyaWFsQmxvY2sgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBOb2RlTWF0ZXJpYWxCbG9j
aworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJsb2NrIG5hbWUKKyAgICAgKiBAcGFy
YW0gdGFyZ2V0IGRlZmluZXMgdGhlIHRhcmdldCBvZiB0aGF0IGJsb2NrIChWZXJ0ZXggYnkgZGVm
YXVsdCkKKyAgICAgKiBAcGFyYW0gaXNGaW5hbE1lcmdlciBkZWZpbmVzIGEgYm9vbGVhbiBpbmRp
Y2F0aW5nIHRoYXQgdGhpcyBibG9jayBpcyBhbiBlbmQgYmxvY2sgKGUuZy4gaXQgaXMgZ2VuZXJh
dGluZyBhIHN5c3RlbSB2YWx1ZSkuIERlZmF1bHQgaXMgZmFsc2UKKyAgICAgKiBAcGFyYW0gaXNJ
bnB1dCBkZWZpbmVzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBibG9jayBpcyBhbiBp
bnB1dCAoZS5nLiBpdCBzZW5kcyBkYXRhIHRvIHRoZSBzaGFkZXIpLiBEZWZhdWx0IGlzIGZhbHNl
CisgICAgICovCisgICAgZnVuY3Rpb24gTm9kZU1hdGVyaWFsQmxvY2sobmFtZSwgdGFyZ2V0LCBp
c0ZpbmFsTWVyZ2VyLCBpc0lucHV0KSB7CisgICAgICAgIGlmICh0YXJnZXQgPT09IHZvaWQgMCkg
eyB0YXJnZXQgPSBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleDsgfQorICAgICAgICBp
ZiAoaXNGaW5hbE1lcmdlciA9PT0gdm9pZCAwKSB7IGlzRmluYWxNZXJnZXIgPSBmYWxzZTsgfQor
ICAgICAgICBpZiAoaXNJbnB1dCA9PT0gdm9pZCAwKSB7IGlzSW5wdXQgPSBmYWxzZTsgfQorICAg
ICAgICB0aGlzLl9pc0ZpbmFsTWVyZ2VyID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lzSW5wdXQg
PSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fY29kZVZhcmlh
YmxlTmFtZSA9ICIiOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9pbnB1
dHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5f
b3V0cHV0cyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAg
ICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7CisgICAgICAgIHRoaXMuX2lzRmluYWxNZXJnZXIgPSBp
c0ZpbmFsTWVyZ2VyOworICAgICAgICB0aGlzLl9pc0lucHV0ID0gaXNJbnB1dDsKKyAgICAgICAg
dGhpcy51bmlxdWVJZCA9IF9NaXNjX3VuaXF1ZUlkR2VuZXJhdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlVuaXF1ZUlkR2VuZXJhdG9yIl0uVW5pcXVlSWQ7CisgICAgfQorICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUsICJpc0ZpbmFs
TWVyZ2VyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNh
dGluZyB0aGF0IHRoaXMgYmxvY2sgaXMgYW4gZW5kIGJsb2NrIChlLmcuIGl0IGlzIGdlbmVyYXRp
bmcgYSBzeXN0ZW0gdmFsdWUpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0ZpbmFsTWVyZ2VyOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZU1hdGVyaWFsQmxvY2sucHJvdG90
eXBlLCAiaXNJbnB1dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFu
IGluZGljYXRpbmcgdGhhdCB0aGlzIGJsb2NrIGlzIGFuIGlucHV0IChlLmcuIGl0IHNlbmRzIGRh
dGEgdG8gdGhlIHNoYWRlcikKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW5wdXQ7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUsICJi
dWlsZElkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBidWls
ZCBJZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fYnVpbGRJZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkSWQgPSB2YWx1ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGVNYXRlcmlhbEJsb2NrLnBy
b3RvdHlwZSwgInRhcmdldCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0
cyB0aGUgdGFyZ2V0IG9mIHRoZSBibG9jaworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0OworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKCh0aGlzLl90
YXJnZXQgJiB2YWx1ZSkgIT09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl90YXJnZXQgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlw
ZSwgImlucHV0cyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2Yg
aW5wdXQgcG9pbnRzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUsICJvdXRwdXRz
IiwgeworICAgICAgICAvKiogR2V0cyB0aGUgbGlzdCBvZiBvdXRwdXQgcG9pbnRzICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHM7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEZpbmQgYW4gaW5wdXQgYnkgaXRz
IG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCB0
byBsb29rIGZvcgorICAgICAqIEByZXR1cm5zIHRoZSBpbnB1dCBvciBudWxsIGlmIG5vdCBmb3Vu
ZAorICAgICAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlwZS5nZXRJbnB1dEJ5TmFt
ZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLl9pbnB1dHMu
ZmlsdGVyKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLm5hbWUgPT09IG5hbWU7IH0pOworICAgICAg
ICBpZiAoZmlsdGVyLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIGZpbHRlclswXTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEZp
bmQgYW4gb3V0cHV0IGJ5IGl0cyBuYW1lCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
bmFtZSBvZiB0aGUgb3V0cHV0dG8gbG9vayBmb3IKKyAgICAgKiBAcmV0dXJucyB0aGUgb3V0cHV0
IG9yIG51bGwgaWYgbm90IGZvdW5kCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2sucHJv
dG90eXBlLmdldE91dHB1dEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHZhciBm
aWx0ZXIgPSB0aGlzLl9vdXRwdXRzLmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5uYW1l
ID09PSBuYW1lOyB9KTsKKyAgICAgICAgaWYgKGZpbHRlci5sZW5ndGgpIHsKKyAgICAgICAgICAg
IHJldHVybiBmaWx0ZXJbMF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplIHRoZSBibG9jayBhbmQgcHJlcGFyZSB0aGUg
Y29udGV4dCBmb3IgYnVpbGQKKyAgICAgKiBAcGFyYW0gc3RhdGUgZGVmaW5lcyB0aGUgc3RhdGUg
dGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBidWlsZAorICAgICAqLworICAgIE5vZGVNYXRlcmlh
bEJsb2NrLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAg
IC8vIERvIG5vdGhpbmcKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmQgZGF0YSB0byBlZmZl
Y3QuIFdpbGwgb25seSBiZSBjYWxsZWQgZm9yIGJsb2NrcyB3aXRoIGlzQmluZGFibGUgPT09IHRy
dWUKKyAgICAgKiBAcGFyYW0gZWZmZWN0IGRlZmluZXMgdGhlIGVmZmVjdCB0byBiaW5kIGRhdGEg
dG8KKyAgICAgKiBAcGFyYW0gbm9kZU1hdGVyaWFsIGRlZmluZXMgdGhlIGhvc3RpbmcgTm9kZU1h
dGVyaWFsCisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0aGF0IHdpbGwgYmUg
cmVuZGVyZWQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuYmluZCA9
IGZ1bmN0aW9uIChlZmZlY3QsIG5vZGVNYXRlcmlhbCwgbWVzaCkgeworICAgICAgICAvLyBEbyBu
b3RoaW5nCisgICAgfTsKKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuX2RlY2xhcmVP
dXRwdXQgPSBmdW5jdGlvbiAob3V0cHV0LCBzdGF0ZSkgeworICAgICAgICByZXR1cm4gc3RhdGUu
X2dldEdMVHlwZShvdXRwdXQudHlwZSkgKyAiICIgKyBvdXRwdXQuYXNzb2NpYXRlZFZhcmlhYmxl
TmFtZTsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlwZS5fd3JpdGVWYXJp
YWJsZSA9IGZ1bmN0aW9uIChjdXJyZW50UG9pbnQpIHsKKyAgICAgICAgdmFyIGNvbm5lY3Rpb25Q
b2ludCA9IGN1cnJlbnRQb2ludC5jb25uZWN0ZWRQb2ludDsKKyAgICAgICAgaWYgKGNvbm5lY3Rp
b25Qb2ludCkgeworICAgICAgICAgICAgcmV0dXJuICIiICsgY3VycmVudFBvaW50LmFzc29jaWF0
ZWRWYXJpYWJsZU5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIwLiI7CisgICAgfTsK
KyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuX3dyaXRlRmxvYXQgPSBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgdmFyIHN0cmluZ1ZlcnNpb24gPSB2YWx1ZS50b1N0cmluZygpOwor
ICAgICAgICBpZiAoc3RyaW5nVmVyc2lvbi5pbmRleE9mKCIuIikgPT09IC0xKSB7CisgICAgICAg
ICAgICBzdHJpbmdWZXJzaW9uICs9ICIuMCI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIi
ICsgc3RyaW5nVmVyc2lvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJl
bnQgY2xhc3MgbmFtZSBlLmcuICJOb2RlTWF0ZXJpYWxCbG9jayIKKyAgICAgKiBAcmV0dXJucyB0
aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlwZS5n
ZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiTm9kZU1hdGVyaWFs
QmxvY2siOworICAgIH07CisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgYSBuZXcgaW5wdXQuIE11
c3QgYmUgY2FsbGVkIGluc2lkZSBhIGJsb2NrIGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFtIG5h
bWUgZGVmaW5lcyB0aGUgY29ubmVjdGlvbiBwb2ludCBuYW1lCisgICAgICogQHBhcmFtIHR5cGUg
ZGVmaW5lcyB0aGUgY29ubmVjdGlvbiBwb2ludCB0eXBlCisgICAgICogQHBhcmFtIGlzT3B0aW9u
YWwgZGVmaW5lcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoaXMgaW5wdXQgY2FuIGJlIG9t
aXR0ZWQKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgdGhlIHRhcmdldCB0byB1c2UgdG8g
bGltaXQgdGhlIGNvbm5lY3Rpb24gcG9pbnQgKHdpbGwgYmUgVmVydGV4QW5kRnJhZ21lbnQgYnkg
ZGVmYXVsdCkKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBibG9jaworICAgICAqLworICAg
IE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlwZS5yZWdpc3RlcklucHV0ID0gZnVuY3Rpb24gKG5h
bWUsIHR5cGUsIGlzT3B0aW9uYWwsIHRhcmdldCkgeworICAgICAgICBpZiAoaXNPcHRpb25hbCA9
PT0gdm9pZCAwKSB7IGlzT3B0aW9uYWwgPSBmYWxzZTsgfQorICAgICAgICB2YXIgcG9pbnQgPSBu
ZXcgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk5vZGVNYXRlcmlhbENvbm5lY3Rpb25Qb2ludCJdKG5hbWUsIHRoaXMpOworICAg
ICAgICBwb2ludC50eXBlID0gdHlwZTsKKyAgICAgICAgcG9pbnQuaXNPcHRpb25hbCA9IGlzT3B0
aW9uYWw7CisgICAgICAgIGlmICh0YXJnZXQpIHsKKyAgICAgICAgICAgIHBvaW50LnRhcmdldCA9
IHRhcmdldDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pbnB1dHMucHVzaChwb2ludCk7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgYSBu
ZXcgb3V0cHV0LiBNdXN0IGJlIGNhbGxlZCBpbnNpZGUgYSBibG9jayBjb25zdHJ1Y3RvcgorICAg
ICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGNvbm5lY3Rpb24gcG9pbnQgbmFtZQorICAgICAq
IEBwYXJhbSB0eXBlIGRlZmluZXMgdGhlIGNvbm5lY3Rpb24gcG9pbnQgdHlwZQorICAgICAqIEBw
YXJhbSB0YXJnZXQgZGVmaW5lcyB0aGUgdGFyZ2V0IHRvIHVzZSB0byBsaW1pdCB0aGUgY29ubmVj
dGlvbiBwb2ludCAod2lsbCBiZSBWZXJ0ZXhBbmRGcmFnbWVudCBieSBkZWZhdWx0KQorICAgICAq
IEByZXR1cm5zIHRoZSBjdXJyZW50IGJsb2NrCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsQmxv
Y2sucHJvdG90eXBlLnJlZ2lzdGVyT3V0cHV0ID0gZnVuY3Rpb24gKG5hbWUsIHR5cGUsIHRhcmdl
dCkgeworICAgICAgICB2YXIgcG9pbnQgPSBuZXcgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbENvbm5lY3Rp
b25Qb2ludCJdKG5hbWUsIHRoaXMpOworICAgICAgICBwb2ludC50eXBlID0gdHlwZTsKKyAgICAg
ICAgaWYgKHRhcmdldCkgeworICAgICAgICAgICAgcG9pbnQudGFyZ2V0ID0gdGFyZ2V0OworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX291dHB1dHMucHVzaChwb2ludCk7CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogV2lsbCByZXR1cm4gdGhlIGZpcnN0IGF2
YWlsYWJsZSBpbnB1dCBlLmcuIHRoZSBmaXJzdCBvbmUgd2hpY2ggaXMgbm90IGFuIHVuaWZvcm0g
b3IgYW4gYXR0cmlidXRlCisgICAgICogQHBhcmFtIGZvck91dHB1dCBkZWZpbmVzIGFuIG9wdGlv
bmFsIGNvbm5lY3Rpb24gcG9pbnQgdG8gY2hlY2sgY29tcGF0aWJpbGl0eSB3aXRoCisgICAgICog
QHJldHVybnMgdGhlIGZpcnN0IGF2YWlsYWJsZSBpbnB1dCBvciBudWxsCisgICAgICovCisgICAg
Tm9kZU1hdGVyaWFsQmxvY2sucHJvdG90eXBlLmdldEZpcnN0QXZhaWxhYmxlSW5wdXQgPSBmdW5j
dGlvbiAoZm9yT3V0cHV0KSB7CisgICAgICAgIGlmIChmb3JPdXRwdXQgPT09IHZvaWQgMCkgeyBm
b3JPdXRwdXQgPSBudWxsOyB9CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9p
bnB1dHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgaW5wdXQgPSBf
YVtfaV07CisgICAgICAgICAgICBpZiAoIWlucHV0LmNvbm5lY3RlZFBvaW50KSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFmb3JPdXRwdXQgfHwgKGZvck91dHB1dC50eXBlID09PSBpbnB1dC50eXBl
KSB8fCAoaW5wdXQudHlwZSA9PT0gX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRlY3QpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBpbnB1dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBXaWxsIHJldHVybiB0
aGUgZmlyc3QgYXZhaWxhYmxlIG91dHB1dCBlLmcuIHRoZSBmaXJzdCBvbmUgd2hpY2ggaXMgbm90
IHlldCBjb25uZWN0ZWQgYW5kIG5vdCBhIHZhcnlpbmcKKyAgICAgKiBAcGFyYW0gZm9yQmxvY2sg
ZGVmaW5lcyBhbiBvcHRpb25hbCBibG9jayB0byBjaGVjayBjb21wYXRpYmlsaXR5IHdpdGgKKyAg
ICAgKiBAcmV0dXJucyB0aGUgZmlyc3QgYXZhaWxhYmxlIGlucHV0IG9yIG51bGwKKyAgICAgKi8K
KyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuZ2V0Rmlyc3RBdmFpbGFibGVPdXRwdXQg
PSBmdW5jdGlvbiAoZm9yQmxvY2spIHsKKyAgICAgICAgaWYgKGZvckJsb2NrID09PSB2b2lkIDAp
IHsgZm9yQmxvY2sgPSBudWxsOyB9CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlz
Ll9vdXRwdXRzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIG91dHB1
dCA9IF9hW19pXTsKKyAgICAgICAgICAgIGlmICghZm9yQmxvY2sgfHwgIWZvckJsb2NrLnRhcmdl
dCB8fCBmb3JCbG9jay50YXJnZXQgPT09IF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uTmV1dHJh
bCB8fCAoZm9yQmxvY2sudGFyZ2V0ICYgb3V0cHV0LnRhcmdldCkgIT09IDApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3V0cHV0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc2libGluZyBv
ZiB0aGUgZ2l2ZW4gb3V0cHV0CisgICAgICogQHBhcmFtIGN1cnJlbnQgZGVmaW5lcyB0aGUgY3Vy
cmVudCBvdXRwdXQKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV4dCBvdXRwdXQgaW4gdGhlIGxpc3Qg
b3IgbnVsbAorICAgICAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlwZS5nZXRTaWJs
aW5nT3V0cHV0ID0gZnVuY3Rpb24gKGN1cnJlbnQpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhp
cy5fb3V0cHV0cy5pbmRleE9mKGN1cnJlbnQpOworICAgICAgICBpZiAoaW5kZXggPT09IC0xIHx8
IGluZGV4ID49IHRoaXMuX291dHB1dHMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1tpbmRleCArIDFdOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ29ubmVjdCBjdXJyZW50IGJsb2NrIHdpdGggYW5vdGhl
ciBibG9jaworICAgICAqIEBwYXJhbSBvdGhlciBkZWZpbmVzIHRoZSBibG9jayB0byBjb25uZWN0
IHdpdGgKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmUgdGhlIHZhcmlvdXMgb3B0aW9ucyB0
byBoZWxwIHBpY2sgdGhlIHJpZ2h0IGNvbm5lY3Rpb25zCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgYmxvY2sKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuY29u
bmVjdFRvID0gZnVuY3Rpb24gKG90aGVyLCBvcHRpb25zKSB7CisgICAgICAgIGlmICh0aGlzLl9v
dXRwdXRzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHZhciBvdXRwdXQgPSBvcHRpb25zICYmIG9wdGlvbnMub3V0cHV0ID8gdGhpcy5nZXRP
dXRwdXRCeU5hbWUob3B0aW9ucy5vdXRwdXQpIDogdGhpcy5nZXRGaXJzdEF2YWlsYWJsZU91dHB1
dChvdGhlcik7CisgICAgICAgIHZhciBub3RGb3VuZCA9IHRydWU7CisgICAgICAgIHdoaWxlIChu
b3RGb3VuZCkgeworICAgICAgICAgICAgdmFyIGlucHV0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmlu
cHV0ID8gb3RoZXIuZ2V0SW5wdXRCeU5hbWUob3B0aW9ucy5pbnB1dCkgOiBvdGhlci5nZXRGaXJz
dEF2YWlsYWJsZUlucHV0KG91dHB1dCk7CisgICAgICAgICAgICBpZiAob3V0cHV0ICYmIGlucHV0
ICYmIG91dHB1dC5jYW5Db25uZWN0VG8oaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgb3V0cHV0
LmNvbm5lY3RUbyhpbnB1dCk7CisgICAgICAgICAgICAgICAgbm90Rm91bmQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFvdXRwdXQpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvdyAiVW5hYmxlIHRvIGZpbmQgYSBjb21wYXRpYmxlIG1hdGNoIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMu
Z2V0U2libGluZ091dHB1dChvdXRwdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgTm9kZU1hdGVyaWFsQmxvY2sucHJvdG90eXBl
Ll9idWlsZEJsb2NrID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgICAgIC8vIEVtcHR5LiBNdXN0
IGJlIGRlZmluZWQgYnkgY2hpbGQgbm9kZXMKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCB1
bmlmb3Jtcywgc2FtcGxlcnMgYW5kIHVuaWZvcm0gYnVmZmVycyBhdCBjb21waWxhdGlvbiB0aW1l
CisgICAgICogQHBhcmFtIHN0YXRlIGRlZmluZXMgdGhlIHN0YXRlIHRvIHVwZGF0ZQorICAgICAq
IEBwYXJhbSBub2RlTWF0ZXJpYWwgZGVmaW5lcyB0aGUgbm9kZSBtYXRlcmlhbCByZXF1ZXN0aW5n
IHRoZSB1cGRhdGUKKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBtYXRlcmlhbCBk
ZWZpbmVzIHRvIHVwZGF0ZQorICAgICAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlw
ZS51cGRhdGVVbmlmb3Jtc0FuZFNhbXBsZXMgPSBmdW5jdGlvbiAoc3RhdGUsIG5vZGVNYXRlcmlh
bCwgZGVmaW5lcykgeworICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGQgcG90ZW50aWFsIGZhbGxiYWNrcyBpZiBzaGFkZXIgY29tcGlsYXRpb24gZmFpbHMK
KyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRvIGJlIHJlbmRlcmVkCisgICAg
ICogQHBhcmFtIGZhbGxiYWNrcyBkZWZpbmVzIHRoZSBjdXJyZW50IHByaW9yaXRpemVkIGxpc3Qg
b2YgZmFsbGJhY2tzCisgICAgICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2sucHJvdG90eXBlLnBy
b3ZpZGVGYWxsYmFja3MgPSBmdW5jdGlvbiAobWVzaCwgZmFsbGJhY2tzKSB7CisgICAgICAgIC8v
IERvIG5vdGhpbmcKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZSBkZWZpbmVzIGZvciBz
aGFkZXIgY29tcGlsYXRpb24KKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRv
IGJlIHJlbmRlcmVkCisgICAgICogQHBhcmFtIG5vZGVNYXRlcmlhbCBkZWZpbmVzIHRoZSBub2Rl
IG1hdGVyaWFsIHJlcXVlc3RpbmcgdGhlIHVwZGF0ZQorICAgICAqIEBwYXJhbSBkZWZpbmVzIGRl
ZmluZXMgdGhlIG1hdGVyaWFsIGRlZmluZXMgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIHVzZUlu
c3RhbmNlcyBzcGVjaWZpZXMgdGhhdCBpbnN0YW5jZXMgc2hvdWxkIGJlIHVzZWQKKyAgICAgKi8K
KyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUucHJlcGFyZURlZmluZXMgPSBmdW5jdGlv
biAobWVzaCwgbm9kZU1hdGVyaWFsLCBkZWZpbmVzLCB1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAg
aWYgKHVzZUluc3RhbmNlcyA9PT0gdm9pZCAwKSB7IHVzZUluc3RhbmNlcyA9IGZhbHNlOyB9Cisg
ICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICB9OworICAgIC8qKgorICAgICAqIEluaXRpYWxpemUg
ZGVmaW5lcyBmb3Igc2hhZGVyIGNvbXBpbGF0aW9uCisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5l
cyB0aGUgbWVzaCB0byBiZSByZW5kZXJlZAorICAgICAqIEBwYXJhbSBub2RlTWF0ZXJpYWwgZGVm
aW5lcyB0aGUgbm9kZSBtYXRlcmlhbCByZXF1ZXN0aW5nIHRoZSB1cGRhdGUKKyAgICAgKiBAcGFy
YW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBtYXRlcmlhbCBkZWZpbmVzIHRvIGJlIHByZXBhcmVkCisg
ICAgICogQHBhcmFtIHVzZUluc3RhbmNlcyBzcGVjaWZpZXMgdGhhdCBpbnN0YW5jZXMgc2hvdWxk
IGJlIHVzZWQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuaW5pdGlh
bGl6ZURlZmluZXMgPSBmdW5jdGlvbiAobWVzaCwgbm9kZU1hdGVyaWFsLCBkZWZpbmVzLCB1c2VJ
bnN0YW5jZXMpIHsKKyAgICAgICAgaWYgKHVzZUluc3RhbmNlcyA9PT0gdm9pZCAwKSB7IHVzZUlu
c3RhbmNlcyA9IGZhbHNlOyB9CisgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICB9OworICAgIC8q
KgorICAgICAqIExldHMgdGhlIGJsb2NrIHRyeSB0byBjb25uZWN0IHNvbWUgaW5wdXRzIGF1dG9t
YXRpY2FsbHkKKyAgICAgKiBAcGFyYW0gbWF0ZXJpYWwgZGVmaW5lcyB0aGUgaG9zdGluZyBOb2Rl
TWF0ZXJpYWwKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuYXV0b0Nv
bmZpZ3VyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCkgeworICAgICAgICAvLyBEbyBub3RoaW5nCisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiBhIGJsb2NrIGlzIGRl
Y2xhcmVkIGFzIHJlcGVhdGFibGUgY29udGVudCBnZW5lcmF0b3IKKyAgICAgKiBAcGFyYW0gdmVy
dGV4U2hhZGVyU3RhdGUgZGVmaW5lcyB0aGUgY3VycmVudCBjb21waWxhdGlvbiBzdGF0ZSBmb3Ig
dGhlIHZlcnRleCBzaGFkZXIKKyAgICAgKiBAcGFyYW0gZnJhZ21lbnRTaGFkZXJTdGF0ZSBkZWZp
bmVzIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHN0YXRlIGZvciB0aGUgZnJhZ21lbnQgc2hhZGVy
CisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0byBiZSByZW5kZXJlZAorICAg
ICAqIEBwYXJhbSBkZWZpbmVzIGRlZmluZXMgdGhlIG1hdGVyaWFsIGRlZmluZXMgdG8gdXBkYXRl
CisgICAgICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2sucHJvdG90eXBlLnJlcGxhY2VSZXBlYXRh
YmxlQ29udGVudCA9IGZ1bmN0aW9uICh2ZXJ0ZXhTaGFkZXJTdGF0ZSwgZnJhZ21lbnRTaGFkZXJT
dGF0ZSwgbWVzaCwgZGVmaW5lcykgeworICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIGJsb2NrIGlzIHJlYWR5CisgICAgICogQHBhcmFt
IG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0byBiZSByZW5kZXJlZAorICAgICAqIEBwYXJhbSBub2Rl
TWF0ZXJpYWwgZGVmaW5lcyB0aGUgbm9kZSBtYXRlcmlhbCByZXF1ZXN0aW5nIHRoZSB1cGRhdGUK
KyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBtYXRlcmlhbCBkZWZpbmVzIHRvIHVw
ZGF0ZQorICAgICAqIEBwYXJhbSB1c2VJbnN0YW5jZXMgc3BlY2lmaWVzIHRoYXQgaW5zdGFuY2Vz
IHNob3VsZCBiZSB1c2VkCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgYmxvY2sgaXMgcmVh
ZHkKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1
bmN0aW9uIChtZXNoLCBub2RlTWF0ZXJpYWwsIGRlZmluZXMsIHVzZUluc3RhbmNlcykgeworICAg
ICAgICBpZiAodXNlSW5zdGFuY2VzID09PSB2b2lkIDApIHsgdXNlSW5zdGFuY2VzID0gZmFsc2U7
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5w
cm90b3R5cGUuX2xpbmtDb25uZWN0aW9uVHlwZXMgPSBmdW5jdGlvbiAoaW5wdXRJbmRleDAsIGlu
cHV0SW5kZXgxKSB7CisgICAgICAgIHRoaXMuX2lucHV0c1tpbnB1dEluZGV4MF0uX2xpbmtlZENv
bm5lY3Rpb25Tb3VyY2UgPSB0aGlzLl9pbnB1dHNbaW5wdXRJbmRleDFdOworICAgICAgICB0aGlz
Ll9pbnB1dHNbaW5wdXRJbmRleDFdLl9saW5rZWRDb25uZWN0aW9uU291cmNlID0gdGhpcy5faW5w
dXRzW2lucHV0SW5kZXgwXTsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlw
ZS5fcHJvY2Vzc0J1aWxkID0gZnVuY3Rpb24gKGJsb2NrLCBzdGF0ZSwgaW5wdXQsIGFjdGl2ZUJs
b2NrcykgeworICAgICAgICBibG9jay5idWlsZChzdGF0ZSwgYWN0aXZlQmxvY2tzKTsKKyAgICAg
ICAgdmFyIGxvY2FsQmxvY2tJc0ZyYWdtZW50ID0gKHN0YXRlLl92ZXJ0ZXhTdGF0ZSAhPSBudWxs
KTsKKyAgICAgICAgdmFyIG90aGVyQmxvY2tXYXNHZW5lcmF0ZWRJblZlcnRleFNoYWRlciA9IGJs
b2NrLl9idWlsZFRhcmdldCA9PT0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXggJiYg
YmxvY2sudGFyZ2V0ICE9PSBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLlZlcnRleEFuZEZyYWdt
ZW50OworICAgICAgICBpZiAobG9jYWxCbG9ja0lzRnJhZ21lbnQgJiYgKCgoYmxvY2sudGFyZ2V0
ICYgaW5wdXQudGFyZ2V0KSA9PT0gMCkgfHwKKyAgICAgICAgICAgICh0aGlzLnRhcmdldCAhPT0g
X25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJO
b2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXhBbmRGcmFnbWVudCAmJiBvdGhlckJsb2Nr
V2FzR2VuZXJhdGVkSW5WZXJ0ZXhTaGFkZXIpKSkgeyAvLyBjb250ZXh0IHN3aXRjaCEgV2UgbmVl
ZCBhIHZhcnlpbmcKKyAgICAgICAgICAgIGlmICgoIWJsb2NrLmlzSW5wdXQgJiYgc3RhdGUudGFy
Z2V0ICE9PSBibG9jay5fYnVpbGRUYXJnZXQpIC8vIGJsb2NrIHdhcyBhbHJlYWR5IGVtaXR0ZWQg
YnkgdmVydGV4IHNoYWRlcgorICAgICAgICAgICAgICAgIHx8IChibG9jay5pc0lucHV0ICYmIGJs
b2NrLmlzQXR0cmlidXRlKSAvLyBibG9jayBpcyBhbiBhdHRyaWJ1dGUKKyAgICAgICAgICAgICkg
eworICAgICAgICAgICAgICAgIHZhciBjb25uZWN0ZWRQb2ludCA9IGlucHV0LmNvbm5lY3RlZFBv
aW50OworICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5fdmVydGV4U3RhdGUuX2VtaXRWYXJ5aW5n
RnJvbVN0cmluZygidl8iICsgY29ubmVjdGVkUG9pbnQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSwg
c3RhdGUuX2dldEdMVHlwZShjb25uZWN0ZWRQb2ludC50eXBlKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuX3ZlcnRleFN0YXRlLmNvbXBpbGF0aW9uU3RyaW5nICs9ICJ2XyIgKyBjb25u
ZWN0ZWRQb2ludC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIiA9ICIgKyBjb25uZWN0ZWRQb2lu
dC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lICsgIjtcclxuIjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaW5wdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSA9ICJ2XyIgKyBjb25u
ZWN0ZWRQb2ludC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lOworICAgICAgICAgICAgICAgIGlucHV0
Ll9lbmZvcmNlQXNzb2NpYXRlZFZhcmlhYmxlTmFtZSA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXBpbGUgdGhlIGN1cnJlbnQgbm9k
ZSBhbmQgZ2VuZXJhdGUgdGhlIHNoYWRlciBjb2RlCisgICAgICogQHBhcmFtIHN0YXRlIGRlZmlu
ZXMgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gc3RhdGUgKHVuaWZvcm1zLCBzYW1wbGVycywgY3Vy
cmVudCBzdHJpbmcpCisgICAgICogQHBhcmFtIGFjdGl2ZUJsb2NrcyBkZWZpbmVzIHRoZSBsaXN0
IG9mIGFjdGl2ZSBibG9ja3MgKGkuZS4gYmxvY2tzIHRvIGNvbXBpbGUpCisgICAgICogQHJldHVy
bnMgdHJ1ZSBpZiBhbHJlYWR5IGJ1aWx0CisgICAgICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2su
cHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24gKHN0YXRlLCBhY3RpdmVCbG9ja3MpIHsKKyAgICAg
ICAgaWYgKHRoaXMuX2J1aWxkSWQgPT09IHN0YXRlLnNoYXJlZERhdGEuYnVpbGRJZCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgaWYgInBh
cmVudCIgYmxvY2tzIGFyZSBjb21waWxlZAorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0g
dGhpcy5faW5wdXRzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGlu
cHV0ID0gX2FbX2ldOworICAgICAgICAgICAgaWYgKCFpbnB1dC5jb25uZWN0ZWRQb2ludCkgewor
ICAgICAgICAgICAgICAgIGlmICghaW5wdXQuaXNPcHRpb25hbCkgeyAvLyBFbWl0IGEgd2Fybmlu
ZworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmNoZWNrcy5ub3RDb25uZWN0
ZWROb25PcHRpb25hbElucHV0cy5wdXNoKGlucHV0KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhp
cy50YXJnZXQgIT09IF9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIl0uTmV1dHJhbCkgeworICAgICAg
ICAgICAgICAgIGlmICgoaW5wdXQudGFyZ2V0ICYgdGhpcy50YXJnZXQpID09PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoKGlucHV0LnRhcmdldCAmIHN0YXRlLnRhcmdldCkgPT09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFyIGJsb2NrID0gaW5wdXQuY29ubmVjdGVkUG9pbnQub3duZXJCbG9jazsK
KyAgICAgICAgICAgIGlmIChibG9jayAmJiBibG9jayAhPT0gdGhpcykgeworICAgICAgICAgICAg
ICAgIHRoaXMuX3Byb2Nlc3NCdWlsZChibG9jaywgc3RhdGUsIGlucHV0LCBhY3RpdmVCbG9ja3Mp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9idWlsZElkID09
PSBzdGF0ZS5zaGFyZWREYXRhLmJ1aWxkSWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAv
LyBOZWVkIHRvIGNoZWNrIGFnYWluIGFzIGlucHV0cyBjYW4gYmUgY29ubmVjdGVkIG11bHRpcGxl
IHRpbWUgdG8gdGhpcyBlbmRwb2ludAorICAgICAgICB9CisgICAgICAgIC8vIExvZ3MKKyAgICAg
ICAgaWYgKHN0YXRlLnNoYXJlZERhdGEudmVyYm9zZSkgeworICAgICAgICAgICAgY29uc29sZS5s
b2coKHN0YXRlLnRhcmdldCA9PT0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5WZXJ0ZXggPyAi
VmVydGV4IHNoYWRlciIgOiAiRnJhZ21lbnQgc2hhZGVyIikgKyAiOiBCdWlsZGluZyAiICsgdGhp
cy5uYW1lICsgIiBbIiArIHRoaXMuZ2V0Q2xhc3NOYW1lKCkgKyAiXSIpOworICAgICAgICB9Cisg
ICAgICAgIGlmICghdGhpcy5pc0lucHV0KSB7CisgICAgICAgICAgICAvKiogUHJlcGFyZSBvdXRw
dXRzICovCisgICAgICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gdGhpcy5fb3V0cHV0czsg
X2IgPCBfYy5sZW5ndGg7IF9iKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgb3V0cHV0ID0gX2Nb
X2JdOworICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldCAhPT0gX25vZGVNYXRlcmlhbEJs
b2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJOb2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHMiXS5OZXV0cmFsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgob3V0cHV0LnRh
cmdldCAmIHRoaXMudGFyZ2V0KSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKChv
dXRwdXQudGFyZ2V0ICYgc3RhdGUudGFyZ2V0KSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCFvdXRwdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSkgewor
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXNzb2NpYXRlZFZhcmlhYmxlTmFtZSA9IHN0YXRl
Ll9nZXRGcmVlVmFyaWFibGVOYW1lKG91dHB1dC5uYW1lKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2tzIGZpbmFsIG91dHB1dHMK
KyAgICAgICAgaWYgKHRoaXMuaXNGaW5hbE1lcmdlcikgeworICAgICAgICAgICAgc3dpdGNoIChz
dGF0ZS50YXJnZXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIF9ub2RlTWF0ZXJpYWxCbG9ja1Rh
cmdldHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzIl0uVmVydGV4OgorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmNoZWNr
cy5lbWl0VmVydGV4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdLkZyYWdtZW50OgorICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5zaGFyZWREYXRhLmNoZWNrcy5lbWl0RnJhZ21lbnQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBpZiAoIXRoaXMuaXNJbnB1dCAmJiBzdGF0ZS5zaGFyZWREYXRhLmVtaXRDb21tZW50
cykgeworICAgICAgICAgICAgc3RhdGUuY29tcGlsYXRpb25TdHJpbmcgKz0gIlxyXG4vLyIgKyB0
aGlzLm5hbWUgKyAiXHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYnVpbGRCbG9jayhz
dGF0ZSk7CisgICAgICAgIHRoaXMuX2J1aWxkSWQgPSBzdGF0ZS5zaGFyZWREYXRhLmJ1aWxkSWQ7
CisgICAgICAgIHRoaXMuX2J1aWxkVGFyZ2V0ID0gc3RhdGUudGFyZ2V0OworICAgICAgICAvLyBD
b21waWxlIGNvbm5lY3RlZCBibG9ja3MKKyAgICAgICAgZm9yICh2YXIgX2QgPSAwLCBfZSA9IHRo
aXMuX291dHB1dHM7IF9kIDwgX2UubGVuZ3RoOyBfZCsrKSB7CisgICAgICAgICAgICB2YXIgb3V0
cHV0ID0gX2VbX2RdOworICAgICAgICAgICAgaWYgKChvdXRwdXQudGFyZ2V0ICYgc3RhdGUudGFy
Z2V0KSA9PT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZm9yICh2YXIgX2YgPSAwLCBfZyA9IG91dHB1dC5lbmRwb2ludHM7IF9mIDwg
X2cubGVuZ3RoOyBfZisrKSB7CisgICAgICAgICAgICAgICAgdmFyIGVuZHBvaW50ID0gX2dbX2Zd
OworICAgICAgICAgICAgICAgIHZhciBibG9jayA9IGVuZHBvaW50Lm93bmVyQmxvY2s7CisgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrICYmIChibG9jay50YXJnZXQgJiBzdGF0ZS50YXJnZXQpICE9
PSAwICYmIGFjdGl2ZUJsb2Nrcy5pbmRleE9mKGJsb2NrKSAhPT0gLTEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fcHJvY2Vzc0J1aWxkKGJsb2NrLCBzdGF0ZSwgZW5kcG9pbnQsIGFjdGl2
ZUJsb2Nrcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3Rv
dHlwZS5faW5wdXRSZW5hbWUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICByZXR1cm4gbmFt
ZTsKKyAgICB9OworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlwZS5fb3V0cHV0UmVuYW1l
ID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfTsKKyAgICBO
b2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuX2R1bXBQcm9wZXJ0aWVzQ29kZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90b3R5cGUuX2R1bXBDb2RlID0gZnVuY3Rpb24gKHVuaXF1
ZU5hbWVzLCBhbHJlYWR5RHVtcGVkKSB7CisgICAgICAgIGFscmVhZHlEdW1wZWQucHVzaCh0aGlz
KTsKKyAgICAgICAgdmFyIGNvZGVTdHJpbmc7CisgICAgICAgIC8vIEdldCB1bmlxdWUgbmFtZQor
ICAgICAgICB2YXIgbmFtZUFzVmFyaWFibGVOYW1lID0gdGhpcy5uYW1lLnJlcGxhY2UoL1teQS1a
YS16X10rL2csICIiKTsKKyAgICAgICAgdGhpcy5fY29kZVZhcmlhYmxlTmFtZSA9IG5hbWVBc1Zh
cmlhYmxlTmFtZTsKKyAgICAgICAgaWYgKHVuaXF1ZU5hbWVzLmluZGV4T2YodGhpcy5fY29kZVZh
cmlhYmxlTmFtZSkgIT09IC0xKSB7CisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAg
ICAgICAgZG8geworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICAgICAgdGhp
cy5fY29kZVZhcmlhYmxlTmFtZSA9IG5hbWVBc1ZhcmlhYmxlTmFtZSArIGluZGV4OworICAgICAg
ICAgICAgfSB3aGlsZSAodW5pcXVlTmFtZXMuaW5kZXhPZih0aGlzLl9jb2RlVmFyaWFibGVOYW1l
KSAhPT0gLTEpOworICAgICAgICB9CisgICAgICAgIHVuaXF1ZU5hbWVzLnB1c2godGhpcy5fY29k
ZVZhcmlhYmxlTmFtZSk7CisgICAgICAgIC8vIERlY2xhcmF0aW9uCisgICAgICAgIGNvZGVTdHJp
bmcgPSAiXHJcbnZhciAiICsgdGhpcy5fY29kZVZhcmlhYmxlTmFtZSArICIgPSBuZXcgQkFCWUxP
Ti4iICsgdGhpcy5nZXRDbGFzc05hbWUoKSArICIoXCIiICsgdGhpcy5uYW1lICsgIlwiKTtcclxu
IjsKKyAgICAgICAgLy8gUHJvcGVydGllcworICAgICAgICBjb2RlU3RyaW5nICs9IHRoaXMuX2R1
bXBQcm9wZXJ0aWVzQ29kZSgpOworICAgICAgICAvLyBJbnB1dHMKKyAgICAgICAgZm9yICh2YXIg
X2kgPSAwLCBfYSA9IHRoaXMuaW5wdXRzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAg
ICAgICAgdmFyIGlucHV0ID0gX2FbX2ldOworICAgICAgICAgICAgaWYgKCFpbnB1dC5pc0Nvbm5l
Y3RlZCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFyIGNvbm5lY3RlZE91dHB1dCA9IGlucHV0LmNvbm5lY3RlZFBvaW50OworICAgICAg
ICAgICAgdmFyIGNvbm5lY3RlZEJsb2NrID0gY29ubmVjdGVkT3V0cHV0Lm93bmVyQmxvY2s7Cisg
ICAgICAgICAgICBpZiAoYWxyZWFkeUR1bXBlZC5pbmRleE9mKGNvbm5lY3RlZEJsb2NrKSA9PT0g
LTEpIHsKKyAgICAgICAgICAgICAgICBjb2RlU3RyaW5nICs9IGNvbm5lY3RlZEJsb2NrLl9kdW1w
Q29kZSh1bmlxdWVOYW1lcywgYWxyZWFkeUR1bXBlZCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjb2RlU3RyaW5nICs9IGNvbm5lY3RlZEJsb2NrLl9jb2RlVmFyaWFibGVOYW1lICsgIi4i
ICsgY29ubmVjdGVkQmxvY2suX291dHB1dFJlbmFtZShjb25uZWN0ZWRPdXRwdXQubmFtZSkgKyAi
LmNvbm5lY3RUbygiICsgdGhpcy5fY29kZVZhcmlhYmxlTmFtZSArICIuIiArIHRoaXMuX2lucHV0
UmVuYW1lKGlucHV0Lm5hbWUpICsgIik7XHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgLy8gT3V0
cHV0cworICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gdGhpcy5vdXRwdXRzOyBfYiA8IF9j
Lmxlbmd0aDsgX2IrKykgeworICAgICAgICAgICAgdmFyIG91dHB1dCA9IF9jW19iXTsKKyAgICAg
ICAgICAgIGlmICghb3V0cHV0Lmhhc0VuZHBvaW50cykgeworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgX2QgPSAwLCBfZSA9IG91
dHB1dC5lbmRwb2ludHM7IF9kIDwgX2UubGVuZ3RoOyBfZCsrKSB7CisgICAgICAgICAgICAgICAg
dmFyIGVuZHBvaW50ID0gX2VbX2RdOworICAgICAgICAgICAgICAgIHZhciBjb25uZWN0ZWRCbG9j
ayA9IGVuZHBvaW50Lm93bmVyQmxvY2s7CisgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RlZEJs
b2NrICYmIGFscmVhZHlEdW1wZWQuaW5kZXhPZihjb25uZWN0ZWRCbG9jaykgPT09IC0xKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvZGVTdHJpbmcgKz0gY29ubmVjdGVkQmxvY2suX2R1bXBDb2Rl
KHVuaXF1ZU5hbWVzLCBhbHJlYWR5RHVtcGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvZGVTdHJpbmc7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDbG9uZSB0aGUgY3VycmVudCBibG9jayB0byBhIG5ldyBpZGVudGljYWwg
YmxvY2sKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAg
ICAqIEBwYXJhbSByb290VXJsIGRlZmluZXMgdGhlIHJvb3QgVVJMIHRvIHVzZSB0byBsb2FkIHRl
eHR1cmVzIGFuZCByZWxhdGl2ZSBkZXBlbmRlbmNpZXMKKyAgICAgKiBAcmV0dXJucyBhIGNvcHkg
b2YgdGhlIGN1cnJlbnQgYmxvY2sKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9jay5wcm90
b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgaWYgKHJv
b3RVcmwgPT09IHZvaWQgMCkgeyByb290VXJsID0gIiI7IH0KKyAgICAgICAgdmFyIHNlcmlhbGl6
YXRpb25PYmplY3QgPSB0aGlzLnNlcmlhbGl6ZSgpOworICAgICAgICB2YXIgYmxvY2tUeXBlID0g
X01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIl9UeXBlU3RvcmUi
XS5HZXRDbGFzcyhzZXJpYWxpemF0aW9uT2JqZWN0LmN1c3RvbVR5cGUpOworICAgICAgICBpZiAo
YmxvY2tUeXBlKSB7CisgICAgICAgICAgICB2YXIgYmxvY2sgPSBuZXcgYmxvY2tUeXBlKCk7Cisg
ICAgICAgICAgICBibG9jay5fZGVzZXJpYWxpemUoc2VyaWFsaXphdGlvbk9iamVjdCwgc2NlbmUs
IHJvb3RVcmwpOworICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGlzIGJs
b2NrIGluIGEgSlNPTiByZXByZXNlbnRhdGlvbgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxp
emVkIGJsb2NrIG9iamVjdAorICAgICAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrLnByb3RvdHlw
ZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2Jq
ZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY3VzdG9tVHlwZSA9ICJCQUJZ
TE9OLiIgKyB0aGlzLmdldENsYXNzTmFtZSgpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
LmlkID0gdGhpcy51bmlxdWVJZDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5uYW1lID0g
dGhpcy5uYW1lOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmlucHV0cyA9IFtdOworICAg
ICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5pbnB1dHM7IF9pIDwgX2EubGVuZ3RoOyBf
aSsrKSB7CisgICAgICAgICAgICB2YXIgaW5wdXQgPSBfYVtfaV07CisgICAgICAgICAgICBzZXJp
YWxpemF0aW9uT2JqZWN0LmlucHV0cy5wdXNoKGlucHV0LnNlcmlhbGl6ZSgpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8qKiBA
aGlkZGVuICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2sucHJvdG90eXBlLl9kZXNlcmlhbGl6ZSA9
IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCkgeworICAgICAg
ICB0aGlzLm5hbWUgPSBzZXJpYWxpemF0aW9uT2JqZWN0Lm5hbWU7CisgICAgfTsKKyAgICByZXR1
cm4gTm9kZU1hdGVyaWFsQmxvY2s7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50LnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE5vZGVNYXRl
cmlhbENvbm5lY3Rpb25Qb2ludCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE5vZGVN
YXRlcmlhbENvbm5lY3Rpb25Qb2ludDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX25vZGVN
YXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4vTWF0ZXJp
YWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisKKworLyoqCisgKiBEZWZp
bmVzIGEgY29ubmVjdGlvbiBwb2ludCBmb3IgYSBibG9jaworICovCit2YXIgTm9kZU1hdGVyaWFs
Q29ubmVjdGlvblBvaW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBwb2ludAorICAgICAqIEBwYXJhbSBuYW1l
IGRlZmluZXMgdGhlIGNvbm5lY3Rpb24gcG9pbnQgbmFtZQorICAgICAqIEBwYXJhbSBvd25lckJs
b2NrIGRlZmluZXMgdGhlIGJsb2NrIGhvc3RpbmcgdGhpcyBjb25uZWN0aW9uIHBvaW50CisgICAg
ICovCisgICAgZnVuY3Rpb24gTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50KG5hbWUsIG93bmVy
QmxvY2spIHsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fY29ubmVjdGVk
UG9pbnQgPSBudWxsOworICAgICAgICB0aGlzLl9lbmRwb2ludHMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fdHlwZUNvbm5lY3Rpb25Tb3VyY2Ug
PSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9saW5rZWRDb25u
ZWN0aW9uU291cmNlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdHlwZSA9IF9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk5v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5GbG9hdDsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fZW5mb3JjZUFzc29jaWF0ZWRWYXJpYWJsZU5hbWUg
PSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgYWRkaXRp
b25hbCB0eXBlcyBzdXBwb3J0ZWQgYnl0IHRoaXMgY29ubmVjdGlvbiBwb2ludAorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5hY2NlcHRlZENvbm5lY3Rpb25Qb2ludFR5cGVzID0gbmV3IEFycmF5
KCk7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIHRhcmdldCBvZiB0aGF0IGNvbm5lY3Rp
b24gcG9pbnQgKi8KKyAgICAgICAgdGhpcy50YXJnZXQgPSBfbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
cyJdLlZlcnRleEFuZEZyYWdtZW50OworICAgICAgICB0aGlzLl9vd25lckJsb2NrID0gb3duZXJC
bG9jazsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KE5vZGVNYXRlcmlhbENvbm5lY3Rpb25Qb2ludC5wcm90b3R5cGUsICJhc3NvY2lh
dGVkVmFyaWFibGVOYW1lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRz
IHRoZSBhc3NvY2lhdGVkIHZhcmlhYmxlIG5hbWUgaW4gdGhlIHNoYWRlcgorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJC
bG9jay5pc0lucHV0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX293bmVyQmxvY2su
YXNzb2NpYXRlZFZhcmlhYmxlTmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgo
IXRoaXMuX2VuZm9yY2VBc3NvY2lhdGVkVmFyaWFibGVOYW1lIHx8ICF0aGlzLl9hc3NvY2lhdGVk
VmFyaWFibGVOYW1lKSAmJiB0aGlzLl9jb25uZWN0ZWRQb2ludCkgeworICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLl9jb25uZWN0ZWRQb2ludC5hc3NvY2lhdGVkVmFyaWFibGVOYW1lOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Fzc29jaWF0ZWRWYXJpYWJsZU5h
bWU7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICB0aGlzLl9hc3NvY2lhdGVkVmFyaWFibGVOYW1lID0gdmFsdWU7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9p
bnQucHJvdG90eXBlLCAidHlwZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Ig
c2V0cyB0aGUgY29ubmVjdGlvbiBwb2ludCB0eXBlIChkZWZhdWx0IGlzIGZsb2F0KQorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5f
dHlwZSA9PT0gX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLkF1dG9EZXRlY3QpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJCbG9jay5p
c0lucHV0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vd25lckJsb2NrLnR5
cGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb25uZWN0
ZWRQb2ludCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGVkUG9p
bnQudHlwZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xp
bmtlZENvbm5lY3Rpb25Tb3VyY2UgJiYgdGhpcy5fbGlua2VkQ29ubmVjdGlvblNvdXJjZS5pc0Nv
bm5lY3RlZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGlua2VkQ29ubmVj
dGlvblNvdXJjZS50eXBlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh0aGlzLl90eXBlID09PSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nv
bm5lY3Rpb25Qb2ludFR5cGVzIl0uQmFzZWRPbklucHV0ICYmIHRoaXMuX3R5cGVDb25uZWN0aW9u
U291cmNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGVDb25uZWN0aW9uU291
cmNlLnR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsK
KyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IHRoaXMuX3R5cGUgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KE5vZGVNYXRlcmlhbENvbm5lY3Rpb25Qb2ludC5wcm90b3R5cGUsICJpc0Nvbm5l
Y3RlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRp
bmcgdGhhdCB0aGUgY3VycmVudCBwb2ludCBpcyBjb25uZWN0ZWQKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGVk
UG9pbnQgIT09IG51bGw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQucHJvdG90eXBlLCAiaXNDb25uZWN0ZWRU
b0lucHV0QmxvY2siLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGEgYm9vbGVhbiBp
bmRpY2F0aW5nIHRoYXQgdGhlIGN1cnJlbnQgcG9pbnQgaXMgY29ubmVjdGVkIHRvIGFuIGlucHV0
IGJsb2NrCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLmNvbm5lY3RlZFBvaW50ICE9PSBudWxsICYmIHRoaXMuY29ubmVjdGVk
UG9pbnQub3duZXJCbG9jay5pc0lucHV0OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50LnByb3RvdHlwZSwgImNv
bm5lY3RJbnB1dEJsb2NrIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIHRoZSBj
b25uZWN0ZWQgaW5wdXQgYmxvY2sgKGlmIGFueSkKKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkVG9JbnB1dEJs
b2NrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWRQb2ludC5vd25lckJsb2NrOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZU1hdGVyaWFsQ29ubmVjdGlv
blBvaW50LnByb3RvdHlwZSwgImNvbm5lY3RlZFBvaW50IiwgeworICAgICAgICAvKiogR2V0IHRo
ZSBvdGhlciBzaWRlIG9mIHRoZSBjb25uZWN0aW9uIChpZiBhbnkpICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3RlZFBvaW50Owor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZU1hdGVyaWFs
Q29ubmVjdGlvblBvaW50LnByb3RvdHlwZSwgIm93bmVyQmxvY2siLCB7CisgICAgICAgIC8qKiBH
ZXQgdGhlIGJsb2NrIHRoYXQgb3ducyB0aGlzIGNvbm5lY3Rpb24gcG9pbnQgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3duZXJCbG9jazsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGVNYXRlcmlh
bENvbm5lY3Rpb25Qb2ludC5wcm90b3R5cGUsICJzb3VyY2VCbG9jayIsIHsKKyAgICAgICAgLyoq
IEdldCB0aGUgYmxvY2sgY29ubmVjdGVkIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoaXMgY29ubmVj
dGlvbiAoaWYgYW55KSAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy5fY29ubmVjdGVkUG9pbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25uZWN0ZWRQb2lu
dC5vd25lckJsb2NrOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoTm9kZU1hdGVyaWFsQ29ubmVjdGlvblBvaW50LnByb3RvdHlwZSwgImNvbm5lY3RlZEJsb2Nr
cyIsIHsKKyAgICAgICAgLyoqIEdldCB0aGUgYmxvY2sgY29ubmVjdGVkIG9uIHRoZSBlbmRwb2lu
dHMgb2YgdGhpcyBjb25uZWN0aW9uIChpZiBhbnkpICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2VuZHBvaW50cy5sZW5ndGggPT09IDApIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fZW5kcG9pbnRzLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5vd25lckJsb2Nr
OyB9KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGVN
YXRlcmlhbENvbm5lY3Rpb25Qb2ludC5wcm90b3R5cGUsICJlbmRwb2ludHMiLCB7CisgICAgICAg
IC8qKiBHZXRzIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBlbmRwb2ludHMgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5kcG9pbnRzOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZU1hdGVyaWFsQ29u
bmVjdGlvblBvaW50LnByb3RvdHlwZSwgImhhc0VuZHBvaW50cyIsIHsKKyAgICAgICAgLyoqIEdl
dHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhhdCBvdXRwdXQgcG9pbnQgaXMgY29ubmVjdGVk
IHRvIGF0IGxlYXN0IG9uZSBpbnB1dCAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9lbmRwb2ludHMgJiYgdGhpcy5fZW5kcG9pbnRzLmxlbmd0
aCA+IDA7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJl
bnQgY2xhc3MgbmFtZSBlLmcuICJOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQiCisgICAgICog
QHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxDb25uZWN0
aW9uUG9pbnQucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuICJOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQiOworICAgIH07CisgICAgLyoqCisg
ICAgICogR2V0cyBhbiBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGN1cnJlbnQgcG9pbnQgY2Fu
IGJlIGNvbm5lY3RlZCB0byBhbm90aGVyIHBvaW50CisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25Q
b2ludCBkZWZpbmVzIHRoZSBvdGhlciBjb25uZWN0aW9uIHBvaW50CisgICAgICogQHJldHVybnMg
dHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBpcyBwb3NzaWJsZQorICAgICAqLworICAgIE5vZGVNYXRl
cmlhbENvbm5lY3Rpb25Qb2ludC5wcm90b3R5cGUuY2FuQ29ubmVjdFRvID0gZnVuY3Rpb24gKGNv
bm5lY3Rpb25Qb2ludCkgeworICAgICAgICBpZiAodGhpcy50eXBlICE9PSBjb25uZWN0aW9uUG9p
bnQudHlwZSAmJiBjb25uZWN0aW9uUG9pbnQudHlwZSAhPT0gX25vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkF1dG9EZXRlY3QpIHsKKyAgICAgICAgICAg
IC8vIEVxdWl2YWxlbnRzCisgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9p
bnRUeXBlcyJdLlZlY3RvcjM6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25Q
b2ludC50eXBlID09PSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2lu
dFR5cGVzIl0uQ29sb3IzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYXNlIF9ub2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMi
XS5WZWN0b3I0OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9pbnQudHlw
ZSA9PT0gX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJd
LkNvbG9yNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBf
bm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIl0uQ29sb3Iz
OiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9pbnQudHlwZSA9PT0gX25v
ZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgX25vZGVNYXRl
cmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNDogeworICAg
ICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvblBvaW50LnR5cGUgPT09IF9ub2RlTWF0ZXJp
YWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Ik5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMiXS5WZWN0b3I0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEFjY2VwdGVk
IHR5cGVzCisgICAgICAgICAgICByZXR1cm4gKGNvbm5lY3Rpb25Qb2ludC5hY2NlcHRlZENvbm5l
Y3Rpb25Qb2ludFR5cGVzICYmIGNvbm5lY3Rpb25Qb2ludC5hY2NlcHRlZENvbm5lY3Rpb25Qb2lu
dFR5cGVzLmluZGV4T2YodGhpcy50eXBlKSAhPT0gLTEpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogQ29ubmVjdCB0aGlzIHBvaW50IHRv
IGFub3RoZXIgY29ubmVjdGlvbiBwb2ludAorICAgICAqIEBwYXJhbSBjb25uZWN0aW9uUG9pbnQg
ZGVmaW5lcyB0aGUgb3RoZXIgY29ubmVjdGlvbiBwb2ludAorICAgICAqIEBwYXJhbSBpZ25vcmVD
b25zdHJhaW50cyBkZWZpbmVzIGlmIHRoZSBzeXN0ZW0gd2lsbCBpZ25vcmUgY29ubmVjdGlvbiB0
eXBlIGNvbnN0cmFpbnRzIChkZWZhdWx0IGlzIGZhbHNlKQorICAgICAqIEByZXR1cm5zIHRoZSBj
dXJyZW50IGNvbm5lY3Rpb24gcG9pbnQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxDb25uZWN0
aW9uUG9pbnQucHJvdG90eXBlLmNvbm5lY3RUbyA9IGZ1bmN0aW9uIChjb25uZWN0aW9uUG9pbnQs
IGlnbm9yZUNvbnN0cmFpbnRzKSB7CisgICAgICAgIGlmIChpZ25vcmVDb25zdHJhaW50cyA9PT0g
dm9pZCAwKSB7IGlnbm9yZUNvbnN0cmFpbnRzID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCFpZ25v
cmVDb25zdHJhaW50cyAmJiAhdGhpcy5jYW5Db25uZWN0VG8oY29ubmVjdGlvblBvaW50KSkgewor
ICAgICAgICAgICAgdGhyb3cgIkNhbm5vdCBjb25uZWN0IHR3byBkaWZmZXJlbnQgY29ubmVjdGlv
biB0eXBlcy4iOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VuZHBvaW50cy5wdXNoKGNvbm5l
Y3Rpb25Qb2ludCk7CisgICAgICAgIGNvbm5lY3Rpb25Qb2ludC5fY29ubmVjdGVkUG9pbnQgPSB0
aGlzOworICAgICAgICB0aGlzLl9lbmZvcmNlQXNzb2NpYXRlZFZhcmlhYmxlTmFtZSA9IGZhbHNl
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc2Nvbm5l
Y3QgdGhpcyBwb2ludCBmcm9tIG9uZSBvZiBoaXMgZW5kcG9pbnQKKyAgICAgKiBAcGFyYW0gZW5k
cG9pbnQgZGVmaW5lcyB0aGUgb3RoZXIgY29ubmVjdGlvbiBwb2ludAorICAgICAqIEByZXR1cm5z
IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gcG9pbnQKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxD
b25uZWN0aW9uUG9pbnQucHJvdG90eXBlLmRpc2Nvbm5lY3RGcm9tID0gZnVuY3Rpb24gKGVuZHBv
aW50KSB7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2VuZHBvaW50cy5pbmRleE9mKGVuZHBv
aW50KTsKKyAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZW5kcG9pbnRzLnNwbGljZShpbmRleCwgMSk7
CisgICAgICAgIGVuZHBvaW50Ll9jb25uZWN0ZWRQb2ludCA9IG51bGw7CisgICAgICAgIHRoaXMu
X2VuZm9yY2VBc3NvY2lhdGVkVmFyaWFibGVOYW1lID0gZmFsc2U7CisgICAgICAgIGVuZHBvaW50
Ll9lbmZvcmNlQXNzb2NpYXRlZFZhcmlhYmxlTmFtZSA9IGZhbHNlOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhpcyBwb2ludCBpbiBh
IEpTT04gcmVwcmVzZW50YXRpb24KKyAgICAgKiBAcmV0dXJucyB0aGUgc2VyaWFsaXplZCBwb2lu
dCBvYmplY3QKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQucHJvdG90
eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25P
YmplY3QgPSB7fTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5uYW1lID0gdGhpcy5uYW1l
OworICAgICAgICBpZiAodGhpcy5jb25uZWN0ZWRQb2ludCkgeworICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5pbnB1dE5hbWUgPSB0aGlzLm5hbWU7CisgICAgICAgICAgICBzZXJpYWxp
emF0aW9uT2JqZWN0LnRhcmdldEJsb2NrSWQgPSB0aGlzLmNvbm5lY3RlZFBvaW50Lm93bmVyQmxv
Y2sudW5pcXVlSWQ7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRhcmdldENvbm5l
Y3Rpb25OYW1lID0gdGhpcy5jb25uZWN0ZWRQb2ludC5uYW1lOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgcmV0dXJuIE5vZGVNYXRl
cmlhbENvbm5lY3Rpb25Qb2ludDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlv
blBvaW50VHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVj
dGlvblBvaW50VHlwZXM7IH0pOworLyoqCisgKiBEZWZpbmVzIHRoZSBraW5kIG9mIGNvbm5lY3Rp
b24gcG9pbnQgZm9yIG5vZGUgYmFzZWQgbWF0ZXJpYWwKKyAqLwordmFyIE5vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXM7CisoZnVuY3Rpb24gKE5vZGVNYXRlcmlhbEJsb2NrQ29u
bmVjdGlvblBvaW50VHlwZXMpIHsKKyAgICAvKiogRmxvYXQgKi8KKyAgICBOb2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzW05vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXNbIkZsb2F0Il0gPSAxXSA9ICJGbG9hdCI7CisgICAgLyoqIEludCAqLworICAgIE5vZGVN
YXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNbTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlc1siSW50Il0gPSAyXSA9ICJJbnQiOworICAgIC8qKiBWZWN0b3IyICovCisg
ICAgTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc1tOb2RlTWF0ZXJpYWxCbG9j
a0Nvbm5lY3Rpb25Qb2ludFR5cGVzWyJWZWN0b3IyIl0gPSA0XSA9ICJWZWN0b3IyIjsKKyAgICAv
KiogVmVjdG9yMyAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNb
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc1siVmVjdG9yMyJdID0gOF0gPSAi
VmVjdG9yMyI7CisgICAgLyoqIFZlY3RvcjQgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5l
Y3Rpb25Qb2ludFR5cGVzW05vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNbIlZl
Y3RvcjQiXSA9IDE2XSA9ICJWZWN0b3I0IjsKKyAgICAvKiogQ29sb3IzICovCisgICAgTm9kZU1h
dGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc1tOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rp
b25Qb2ludFR5cGVzWyJDb2xvcjMiXSA9IDMyXSA9ICJDb2xvcjMiOworICAgIC8qKiBDb2xvcjQg
Ki8KKyAgICBOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzW05vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNbIkNvbG9yNCJdID0gNjRdID0gIkNvbG9yNCI7Cisg
ICAgLyoqIE1hdHJpeCAqLworICAgIE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNbTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc1siTWF0cml4Il0gPSAxMjhd
ID0gIk1hdHJpeCI7CisgICAgLyoqIERldGVjdCB0eXBlIGJhc2VkIG9uIGNvbm5lY3Rpb24gKi8K
KyAgICBOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzW05vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXNbIkF1dG9EZXRlY3QiXSA9IDEwMjRdID0gIkF1dG9EZXRl
Y3QiOworICAgIC8qKiBPdXRwdXQgdHlwZSB0aGF0IHdpbGwgYmUgZGVmaW5lZCBieSBpbnB1dCB0
eXBlICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc1tOb2RlTWF0
ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzWyJCYXNlZE9uSW5wdXQiXSA9IDIwNDhdID0g
IkJhc2VkT25JbnB1dCI7Cit9KShOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVz
IHx8IChOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzID0ge30pKTsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJn
ZXRzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE5vZGVNYXRlcmlhbEJsb2NrVGFy
Z2V0cyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWxC
bG9ja1RhcmdldHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0
czsgfSk7CisvKioKKyAqIEVudW0gdXNlZCB0byBkZWZpbmUgdGhlIHRhcmdldCBvZiBhIGJsb2Nr
CisgKi8KK3ZhciBOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHM7CisoZnVuY3Rpb24gKE5vZGVNYXRl
cmlhbEJsb2NrVGFyZ2V0cykgeworICAgIC8qKiBWZXJ0ZXggc2hhZGVyICovCisgICAgTm9kZU1h
dGVyaWFsQmxvY2tUYXJnZXRzW05vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c1siVmVydGV4Il0gPSAx
XSA9ICJWZXJ0ZXgiOworICAgIC8qKiBGcmFnbWVudCBzaGFkZXIgKi8KKyAgICBOb2RlTWF0ZXJp
YWxCbG9ja1RhcmdldHNbTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzWyJGcmFnbWVudCJdID0gMl0g
PSAiRnJhZ21lbnQiOworICAgIC8qKiBOZXV0cmFsICovCisgICAgTm9kZU1hdGVyaWFsQmxvY2tU
YXJnZXRzW05vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c1siTmV1dHJhbCJdID0gNF0gPSAiTmV1dHJh
bCI7CisgICAgLyoqIFZlcnRleCBhbmQgRnJhZ21lbnQgKi8KKyAgICBOb2RlTWF0ZXJpYWxCbG9j
a1RhcmdldHNbTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzWyJWZXJ0ZXhBbmRGcmFnbWVudCJdID0g
M10gPSAiVmVydGV4QW5kRnJhZ21lbnQiOworfSkoTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIHx8
IChOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgPSB7fSkpOworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCdWlsZFN0YXRlLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxCdWlsZFN0YXRlLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9kZU1hdGVyaWFsQmxv
Y2tDb25uZWN0aW9uUG9pbnRUeXBlcyAqLyAiLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxC
bG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMgKi8gIi4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19zdHJpbmdUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9z
dHJpbmdUb29scyAqLyAiLi9NaXNjL3N0cmluZ1Rvb2xzLnRzIik7CisKKworCisKKy8qKgorICog
Q2xhc3MgdXNlZCB0byBzdG9yZSBub2RlIGJhc2VkIG1hdGVyaWFsIGJ1aWxkIHN0YXRlCisgKi8K
K3ZhciBOb2RlTWF0ZXJpYWxCdWlsZFN0YXRlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIGZ1bmN0aW9uIE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUoKSB7CisgICAgICAgIC8qKiBH
ZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGN1cnJlbnQgc3RhdGUgY2Fu
IGVtaXQgdW5pZm9ybSBidWZmZXJzICovCisgICAgICAgIHRoaXMuc3VwcG9ydFVuaWZvcm1CdWZm
ZXJzID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGVt
aXR0ZWQgYXR0cmlidXRlcworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0g
bmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGVt
aXR0ZWQgdW5pZm9ybXMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudW5pZm9ybXMgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgZW1pdHRl
ZCB1bmlmb3JtIGJ1ZmZlcnMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudW5pZm9ybUJ1ZmZl
cnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qg
b2YgZW1pdHRlZCBzYW1wbGVycworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zYW1wbGVycyA9
IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBl
bWl0dGVkIGZ1bmN0aW9ucworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5mdW5jdGlvbnMgPSB7
fTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgZW1pdHRlZCBleHRl
bnNpb25zCisgICAgICAgICAqLworICAgICAgICB0aGlzLmV4dGVuc2lvbnMgPSB7fTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgZW1pdHRlZCBjb3VudGVycworICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5jb3VudGVycyA9IHt9OworICAgICAgICAvKiogQGhpZGRl
biAqLworICAgICAgICB0aGlzLl9hdHRyaWJ1dGVEZWNsYXJhdGlvbiA9ICIiOworICAgICAgICAv
KiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl91bmlmb3JtRGVjbGFyYXRpb24gPSAiIjsKKyAg
ICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fc2FtcGxlckRlY2xhcmF0aW9uID0g
IiI7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX3ZhcnlpbmdUcmFuc2Zl
ciA9ICIiOworICAgICAgICB0aGlzLl9yZXBlYXRhYmxlQ29udGVudEFuY2hvckluZGV4ID0gMDsK
KyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fYnVpbHRDb21waWxhdGlvblN0
cmluZyA9ICIiOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZW1pdHRlZCBjb21w
aWxhdGlvbiBzdHJpbmdzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNvbXBpbGF0aW9uU3Ry
aW5nID0gIiI7CisgICAgfQorICAgIC8qKgorICAgICAqIEZpbmFsaXplIHRoZSBjb21waWxhdGlv
biBzdHJpbmdzCisgICAgICogQHBhcmFtIHN0YXRlIGRlZmluZXMgdGhlIGN1cnJlbnQgY29tcGls
YXRpb24gc3RhdGUKKyAgICAgKi8KKyAgICBOb2RlTWF0ZXJpYWxCdWlsZFN0YXRlLnByb3RvdHlw
ZS5maW5hbGl6ZSA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICB2YXIgZW1pdENvbW1lbnRz
ID0gc3RhdGUuc2hhcmVkRGF0YS5lbWl0Q29tbWVudHM7CisgICAgICAgIHZhciBpc0ZyYWdtZW50
TW9kZSA9ICh0aGlzLnRhcmdldCA9PT0gX25vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXS5GcmFnbWVu
dCk7CisgICAgICAgIHRoaXMuY29tcGlsYXRpb25TdHJpbmcgPSAiXHJcbiIgKyAoZW1pdENvbW1l
bnRzID8gIi8vRW50cnkgcG9pbnRcclxuIiA6ICIiKSArICJ2b2lkIG1haW4odm9pZCkge1xyXG4i
ICsgdGhpcy5jb21waWxhdGlvblN0cmluZzsKKyAgICAgICAgdmFyIGZ1bmN0aW9uQ29kZSA9ICIi
OworICAgICAgICBmb3IgKHZhciBmdW5jdGlvbk5hbWUgaW4gdGhpcy5mdW5jdGlvbnMpIHsKKyAg
ICAgICAgICAgIGZ1bmN0aW9uQ29kZSArPSB0aGlzLmZ1bmN0aW9uc1tmdW5jdGlvbk5hbWVdICsg
IlxyXG4iOworICAgICAgICB9CisgICAgICAgIHRoaXMuY29tcGlsYXRpb25TdHJpbmcgPSAiXHJc
biIgKyBmdW5jdGlvbkNvZGUgKyAiXHJcbiIgKyB0aGlzLmNvbXBpbGF0aW9uU3RyaW5nOworICAg
ICAgICBpZiAoIWlzRnJhZ21lbnRNb2RlICYmIHRoaXMuX3ZhcnlpbmdUcmFuc2ZlcikgeworICAg
ICAgICAgICAgdGhpcy5jb21waWxhdGlvblN0cmluZyA9IHRoaXMuY29tcGlsYXRpb25TdHJpbmcg
KyAiXHJcbiIgKyB0aGlzLl92YXJ5aW5nVHJhbnNmZXI7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5jb21waWxhdGlvblN0cmluZyA9IHRoaXMuY29tcGlsYXRpb25TdHJpbmcgKyAiXHJcbn0iOwor
ICAgICAgICBpZiAodGhpcy5zaGFyZWREYXRhLnZhcnlpbmdEZWNsYXJhdGlvbikgeworICAgICAg
ICAgICAgdGhpcy5jb21waWxhdGlvblN0cmluZyA9ICJcclxuIiArIChlbWl0Q29tbWVudHMgPyAi
Ly9WYXJ5aW5nc1xyXG4iIDogIiIpICsgdGhpcy5zaGFyZWREYXRhLnZhcnlpbmdEZWNsYXJhdGlv
biArICJcclxuIiArIHRoaXMuY29tcGlsYXRpb25TdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX3NhbXBsZXJEZWNsYXJhdGlvbikgeworICAgICAgICAgICAgdGhpcy5jb21waWxh
dGlvblN0cmluZyA9ICJcclxuIiArIChlbWl0Q29tbWVudHMgPyAiLy9TYW1wbGVyc1xyXG4iIDog
IiIpICsgdGhpcy5fc2FtcGxlckRlY2xhcmF0aW9uICsgIlxyXG4iICsgdGhpcy5jb21waWxhdGlv
blN0cmluZzsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fdW5pZm9ybURlY2xhcmF0aW9u
KSB7CisgICAgICAgICAgICB0aGlzLmNvbXBpbGF0aW9uU3RyaW5nID0gIlxyXG4iICsgKGVtaXRD
b21tZW50cyA/ICIvL1VuaWZvcm1zXHJcbiIgOiAiIikgKyB0aGlzLl91bmlmb3JtRGVjbGFyYXRp
b24gKyAiXHJcbiIgKyB0aGlzLmNvbXBpbGF0aW9uU3RyaW5nOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9hdHRyaWJ1dGVEZWNsYXJhdGlvbiAmJiAhaXNGcmFnbWVudE1vZGUpIHsKKyAg
ICAgICAgICAgIHRoaXMuY29tcGlsYXRpb25TdHJpbmcgPSAiXHJcbiIgKyAoZW1pdENvbW1lbnRz
ID8gIi8vQXR0cmlidXRlc1xyXG4iIDogIiIpICsgdGhpcy5fYXR0cmlidXRlRGVjbGFyYXRpb24g
KyAiXHJcbiIgKyB0aGlzLmNvbXBpbGF0aW9uU3RyaW5nOworICAgICAgICB9CisgICAgICAgIGZv
ciAodmFyIGV4dGVuc2lvbk5hbWUgaW4gdGhpcy5leHRlbnNpb25zKSB7CisgICAgICAgICAgICB2
YXIgZXh0ZW5zaW9uID0gdGhpcy5leHRlbnNpb25zW2V4dGVuc2lvbk5hbWVdOworICAgICAgICAg
ICAgdGhpcy5jb21waWxhdGlvblN0cmluZyA9IGV4dGVuc2lvbiArICJcclxuIiArIHRoaXMuY29t
cGlsYXRpb25TdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYnVpbHRDb21waWxhdGlv
blN0cmluZyA9IHRoaXMuY29tcGlsYXRpb25TdHJpbmc7CisgICAgfTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZS5wcm90b3R5cGUsICJfcmVwZWF0YWJs
ZUNvbnRlbnRBbmNob3IiLCB7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuICIjIyNfX19BTkNIT1IiICsgdGhpcy5f
cmVwZWF0YWJsZUNvbnRlbnRBbmNob3JJbmRleCsrICsgIl9fXyMjIyI7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8qKiBAaGlkZGVuICovCisgICAgTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZS5wcm90
b3R5cGUuX2dldEZyZWVWYXJpYWJsZU5hbWUgPSBmdW5jdGlvbiAocHJlZml4KSB7CisgICAgICAg
IHByZWZpeCA9IHByZWZpeC5yZXBsYWNlKC9bXmEtekEtWl9dKy9nLCAiIik7CisgICAgICAgIGlm
ICh0aGlzLnNoYXJlZERhdGEudmFyaWFibGVOYW1lc1twcmVmaXhdID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIHRoaXMuc2hhcmVkRGF0YS52YXJpYWJsZU5hbWVzW3ByZWZpeF0gPSAwOwor
ICAgICAgICAgICAgLy8gQ2hlY2sgcmVzZXJ2ZWQgd29yZHMKKyAgICAgICAgICAgIGlmIChwcmVm
aXggPT09ICJvdXRwdXQiIHx8IHByZWZpeCA9PT0gInRleHR1cmUiKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHByZWZpeCArIHRoaXMuc2hhcmVkRGF0YS52YXJpYWJsZU5hbWVzW3ByZWZpeF07
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHJlZml4OworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5zaGFyZWREYXRhLnZhcmlhYmxlTmFtZXNb
cHJlZml4XSsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwcmVmaXggKyB0aGlzLnNoYXJl
ZERhdGEudmFyaWFibGVOYW1lc1twcmVmaXhdOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBOb2RlTWF0ZXJpYWxCdWlsZFN0YXRlLnByb3RvdHlwZS5fZ2V0RnJlZURlZmluZU5hbWUg
PSBmdW5jdGlvbiAocHJlZml4KSB7CisgICAgICAgIGlmICh0aGlzLnNoYXJlZERhdGEuZGVmaW5l
TmFtZXNbcHJlZml4XSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICB0aGlzLnNoYXJlZERh
dGEuZGVmaW5lTmFtZXNbcHJlZml4XSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICB0aGlzLnNoYXJlZERhdGEuZGVmaW5lTmFtZXNbcHJlZml4XSsrOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBwcmVmaXggKyB0aGlzLnNoYXJlZERhdGEuZGVmaW5lTmFtZXNb
cHJlZml4XTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTm9kZU1hdGVyaWFsQnVp
bGRTdGF0ZS5wcm90b3R5cGUuX2V4Y2x1ZGVWYXJpYWJsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSkg
eworICAgICAgICB0aGlzLnNoYXJlZERhdGEudmFyaWFibGVOYW1lc1tuYW1lXSA9IDA7CisgICAg
fTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUucHJvdG90
eXBlLl9nZXRHTFR5cGUgPSBmdW5jdGlvbiAodHlwZSkgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlw
ZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0
aW9uUG9pbnRUeXBlcyJdLkZsb2F0OgorICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOwor
ICAgICAgICAgICAgY2FzZSBfbm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Q
b2ludFR5cGVzIl0uSW50OgorICAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsKKyAgICAgICAg
ICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBl
cyJdLlZlY3RvcjI6CisgICAgICAgICAgICAgICAgcmV0dXJuICJ2ZWMyIjsKKyAgICAgICAgICAg
IGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJd
LkNvbG9yMzoKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBv
aW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tD
b25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjM6CisgICAgICAgICAgICAgICAgcmV0dXJuICJ2
ZWMzIjsKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50
VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9kZU1hdGVyaWFsQmxvY2tDb25u
ZWN0aW9uUG9pbnRUeXBlcyJdLkNvbG9yNDoKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlh
bEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
Tm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLlZlY3RvcjQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJ2ZWM0IjsKKyAgICAgICAgICAgIGNhc2UgX25vZGVNYXRlcmlhbEJs
b2NrQ29ubmVjdGlvblBvaW50VHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdLk1hdHJpeDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIm1hdDQiOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZS5wcm90b3R5
cGUuX2VtaXRFeHRlbnNpb24gPSBmdW5jdGlvbiAobmFtZSwgZXh0ZW5zaW9uKSB7CisgICAgICAg
IGlmICh0aGlzLmV4dGVuc2lvbnNbbmFtZV0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLmV4dGVuc2lvbnNbbmFtZV0gPSBleHRlbnNpb247CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUucHJvdG90eXBl
Ll9lbWl0RnVuY3Rpb24gPSBmdW5jdGlvbiAobmFtZSwgY29kZSwgY29tbWVudHMpIHsKKyAgICAg
ICAgaWYgKHRoaXMuZnVuY3Rpb25zW25hbWVdKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuc2hhcmVkRGF0YS5lbWl0Q29tbWVudHMpIHsKKyAgICAg
ICAgICAgIGNvZGUgPSBjb21tZW50cyArICJcclxuIiArIGNvZGU7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5mdW5jdGlvbnNbbmFtZV0gPSBjb2RlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4g
Ki8KKyAgICBOb2RlTWF0ZXJpYWxCdWlsZFN0YXRlLnByb3RvdHlwZS5fZW1pdENvZGVGcm9tSW5j
bHVkZSA9IGZ1bmN0aW9uIChpbmNsdWRlTmFtZSwgY29tbWVudHMsIG9wdGlvbnMpIHsKKyAgICAg
ICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBlYXRLZXkpIHsKKyAgICAgICAgICAgIHJldHVy
biAiI2luY2x1ZGU8IiArIGluY2x1ZGVOYW1lICsgIj5bMC4uIiArIG9wdGlvbnMucmVwZWF0S2V5
ICsgIl1cclxuIjsKKyAgICAgICAgfQorICAgICAgICB2YXIgY29kZSA9IF9lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbaW5j
bHVkZU5hbWVdICsgIlxyXG4iOworICAgICAgICBpZiAodGhpcy5zaGFyZWREYXRhLmVtaXRDb21t
ZW50cykgeworICAgICAgICAgICAgY29kZSA9IGNvbW1lbnRzICsgIlxyXG4iICsgY29kZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIW9wdGlvbnMpIHsKKyAgICAgICAgICAgIHJldHVybiBjb2Rl
OworICAgICAgICB9CisgICAgICAgIGlmIChvcHRpb25zLnJlcGxhY2VTdHJpbmdzKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgb3B0aW9ucy5yZXBsYWNlU3RyaW5n
cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZVN0cmluZyA9
IG9wdGlvbnMucmVwbGFjZVN0cmluZ3NbaW5kZXhdOworICAgICAgICAgICAgICAgIGNvZGUgPSBj
b2RlLnJlcGxhY2UocmVwbGFjZVN0cmluZy5zZWFyY2gsIHJlcGxhY2VTdHJpbmcucmVwbGFjZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUucHJvdG90eXBl
Ll9lbWl0RnVuY3Rpb25Gcm9tSW5jbHVkZSA9IGZ1bmN0aW9uIChpbmNsdWRlTmFtZSwgY29tbWVu
dHMsIG9wdGlvbnMsIHN0b3JlS2V5KSB7CisgICAgICAgIGlmIChzdG9yZUtleSA9PT0gdm9pZCAw
KSB7IHN0b3JlS2V5ID0gIiI7IH0KKyAgICAgICAgdmFyIGtleSA9IGluY2x1ZGVOYW1lICsgc3Rv
cmVLZXk7CisgICAgICAgIGlmICh0aGlzLmZ1bmN0aW9uc1trZXldKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFvcHRpb25zIHx8ICghb3B0aW9ucy5yZW1v
dmVBdHRyaWJ1dGVzICYmICFvcHRpb25zLnJlbW92ZVVuaWZvcm1zICYmICFvcHRpb25zLnJlbW92
ZVZhcnlpbmdzICYmICFvcHRpb25zLnJlbW92ZUlmRGVmICYmICFvcHRpb25zLnJlcGxhY2VTdHJp
bmdzKSkgeworICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBlYXRLZXkpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLmZ1bmN0aW9uc1trZXldID0gIiNpbmNsdWRlPCIgKyBpbmNs
dWRlTmFtZSArICI+WzAuLiIgKyBvcHRpb25zLnJlcGVhdEtleSArICJdXHJcbiI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmZ1bmN0aW9u
c1trZXldID0gIiNpbmNsdWRlPCIgKyBpbmNsdWRlTmFtZSArICI+XHJcbiI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWREYXRhLmVtaXRDb21tZW50cykgeworICAg
ICAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zW2tleV0gPSBjb21tZW50cyArICJcclxuIiArIHRo
aXMuZnVuY3Rpb25zW2tleV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5mdW5jdGlvbnNba2V5XSA9IF9lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbaW5jbHVk
ZU5hbWVdOworICAgICAgICBpZiAodGhpcy5zaGFyZWREYXRhLmVtaXRDb21tZW50cykgeworICAg
ICAgICAgICAgdGhpcy5mdW5jdGlvbnNba2V5XSA9IGNvbW1lbnRzICsgIlxyXG4iICsgdGhpcy5m
dW5jdGlvbnNba2V5XTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3B0aW9ucy5yZW1vdmVJZkRl
ZikgeworICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnNba2V5XSA9IHRoaXMuZnVuY3Rpb25zW2tl
eV0ucmVwbGFjZSgvXlxzKj8jaWZkZWYuKyQvZ20sICIiKTsKKyAgICAgICAgICAgIHRoaXMuZnVu
Y3Rpb25zW2tleV0gPSB0aGlzLmZ1bmN0aW9uc1trZXldLnJlcGxhY2UoL15ccyo/I2VuZGlmLiok
L2dtLCAiIik7CisgICAgICAgICAgICB0aGlzLmZ1bmN0aW9uc1trZXldID0gdGhpcy5mdW5jdGlv
bnNba2V5XS5yZXBsYWNlKC9eXHMqPyNlbHNlLiokL2dtLCAiIik7CisgICAgICAgICAgICB0aGlz
LmZ1bmN0aW9uc1trZXldID0gdGhpcy5mdW5jdGlvbnNba2V5XS5yZXBsYWNlKC9eXHMqPyNlbGlm
LiokL2dtLCAiIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdGlvbnMucmVtb3ZlQXR0cmli
dXRlcykgeworICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnNba2V5XSA9IHRoaXMuZnVuY3Rpb25z
W2tleV0ucmVwbGFjZSgvXlxzKj9hdHRyaWJ1dGUuKyQvZ20sICIiKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAob3B0aW9ucy5yZW1vdmVVbmlmb3JtcykgeworICAgICAgICAgICAgdGhpcy5mdW5j
dGlvbnNba2V5XSA9IHRoaXMuZnVuY3Rpb25zW2tleV0ucmVwbGFjZSgvXlxzKj91bmlmb3JtLisk
L2dtLCAiIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdGlvbnMucmVtb3ZlVmFyeWluZ3Mp
IHsKKyAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zW2tleV0gPSB0aGlzLmZ1bmN0aW9uc1trZXld
LnJlcGxhY2UoL15ccyo/dmFyeWluZy4rJC9nbSwgIiIpOworICAgICAgICB9CisgICAgICAgIGlm
IChvcHRpb25zLnJlcGxhY2VTdHJpbmdzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9
IDA7IGluZGV4IDwgb3B0aW9ucy5yZXBsYWNlU3RyaW5ncy5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgICAgICB2YXIgcmVwbGFjZVN0cmluZyA9IG9wdGlvbnMucmVwbGFjZVN0cmluZ3Nb
aW5kZXhdOworICAgICAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zW2tleV0gPSB0aGlzLmZ1bmN0
aW9uc1trZXldLnJlcGxhY2UocmVwbGFjZVN0cmluZy5zZWFyY2gsIHJlcGxhY2VTdHJpbmcucmVw
bGFjZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVu
ICovCisgICAgTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZS5wcm90b3R5cGUuX3JlZ2lzdGVyVGVtcFZh
cmlhYmxlID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgaWYgKHRoaXMuc2hhcmVkRGF0YS50
ZW1wcy5pbmRleE9mKG5hbWUpICE9PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuc2hhcmVkRGF0YS50ZW1wcy5wdXNoKG5hbWUpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTm9kZU1h
dGVyaWFsQnVpbGRTdGF0ZS5wcm90b3R5cGUuX2VtaXRWYXJ5aW5nRnJvbVN0cmluZyA9IGZ1bmN0
aW9uIChuYW1lLCB0eXBlLCBkZWZpbmUsIG5vdERlZmluZSkgeworICAgICAgICBpZiAoZGVmaW5l
ID09PSB2b2lkIDApIHsgZGVmaW5lID0gIiI7IH0KKyAgICAgICAgaWYgKG5vdERlZmluZSA9PT0g
dm9pZCAwKSB7IG5vdERlZmluZSA9IGZhbHNlOyB9CisgICAgICAgIGlmICh0aGlzLnNoYXJlZERh
dGEudmFyeWluZ3MuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNoYXJlZERhdGEudmFyeWluZ3MucHVzaChu
YW1lKTsKKyAgICAgICAgaWYgKGRlZmluZSkgeworICAgICAgICAgICAgaWYgKF9NaXNjX3N0cmlu
Z1Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlN0cmluZ1Rvb2xzIl0uU3RhcnRz
V2l0aChkZWZpbmUsICJkZWZpbmVkKCIpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRE
YXRhLnZhcnlpbmdEZWNsYXJhdGlvbiArPSAiI2lmICIgKyBkZWZpbmUgKyAiXHJcbiI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNoYXJl
ZERhdGEudmFyeWluZ0RlY2xhcmF0aW9uICs9IChub3REZWZpbmUgPyAiI2lmbmRlZiIgOiAiI2lm
ZGVmIikgKyAiICIgKyBkZWZpbmUgKyAiXHJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5zaGFyZWREYXRhLnZhcnlpbmdEZWNsYXJhdGlvbiArPSAidmFyeWluZyAi
ICsgdHlwZSArICIgIiArIG5hbWUgKyAiO1xyXG4iOworICAgICAgICBpZiAoZGVmaW5lKSB7Cisg
ICAgICAgICAgICB0aGlzLnNoYXJlZERhdGEudmFyeWluZ0RlY2xhcmF0aW9uICs9ICIjZW5kaWZc
clxuIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBA
aGlkZGVuICovCisgICAgTm9kZU1hdGVyaWFsQnVpbGRTdGF0ZS5wcm90b3R5cGUuX2VtaXRVbmlm
b3JtRnJvbVN0cmluZyA9IGZ1bmN0aW9uIChuYW1lLCB0eXBlLCBkZWZpbmUsIG5vdERlZmluZSkg
eworICAgICAgICBpZiAoZGVmaW5lID09PSB2b2lkIDApIHsgZGVmaW5lID0gIiI7IH0KKyAgICAg
ICAgaWYgKG5vdERlZmluZSA9PT0gdm9pZCAwKSB7IG5vdERlZmluZSA9IGZhbHNlOyB9CisgICAg
ICAgIGlmICh0aGlzLnVuaWZvcm1zLmluZGV4T2YobmFtZSkgIT09IC0xKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy51bmlmb3Jtcy5wdXNoKG5hbWUpOwor
ICAgICAgICBpZiAoZGVmaW5lKSB7CisgICAgICAgICAgICB0aGlzLl91bmlmb3JtRGVjbGFyYXRp
b24gKz0gKG5vdERlZmluZSA/ICIjaWZuZGVmIiA6ICIjaWZkZWYiKSArICIgIiArIGRlZmluZSAr
ICJcclxuIjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl91bmlmb3JtRGVjbGFyYXRpb24gKz0g
InVuaWZvcm0gIiArIHR5cGUgKyAiICIgKyBuYW1lICsgIjtcclxuIjsKKyAgICAgICAgaWYgKGRl
ZmluZSkgeworICAgICAgICAgICAgdGhpcy5fdW5pZm9ybURlY2xhcmF0aW9uICs9ICIjZW5kaWZc
clxuIjsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIE5vZGVNYXRlcmlhbEJ1aWxkU3Rh
dGU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9Ob2RlL25v
ZGVNYXRlcmlhbEJ1aWxkU3RhdGVTaGFyZWREYXRhLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWF0ZXJpYWxzL05vZGUvbm9kZU1hdGVyaWFsQnVpbGRTdGF0ZVNoYXJlZERhdGEudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGVTaGFy
ZWREYXRhICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlh
bEJ1aWxkU3RhdGVTaGFyZWREYXRhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBOb2RlTWF0ZXJpYWxC
dWlsZFN0YXRlU2hhcmVkRGF0YTsgfSk7CisvKioKKyAqIENsYXNzIHVzZWQgdG8gc3RvcmUgc2hh
cmVkIGRhdGEgYmV0d2VlbiAyIE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGUKKyAqLwordmFyIE5vZGVN
YXRlcmlhbEJ1aWxkU3RhdGVTaGFyZWREYXRhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIC8qKiBDcmVhdGVzIGEgbmV3IHNoYXJlZCBkYXRhICovCisgICAgZnVuY3Rpb24gTm9k
ZU1hdGVyaWFsQnVpbGRTdGF0ZVNoYXJlZERhdGEoKSB7CisgICAgICAgIC8qKgorICAgICAgICAq
IEdldHMgdGhlIGxpc3Qgb2YgZW1pdHRlZCB2YXJ5aW5ncworICAgICAgICAqLworICAgICAgICB0
aGlzLnRlbXBzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBsaXN0IG9mIGVtaXR0ZWQgdmFyeWluZ3MKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudmFy
eWluZ3MgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHZh
cnlpbmcgZGVjbGFyYXRpb24gc3RyaW5nCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZhcnlp
bmdEZWNsYXJhdGlvbiA9ICIiOworICAgICAgICAvKioKKyAgICAgICAgICogSW5wdXQgYmxvY2tz
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmlucHV0QmxvY2tzID0gbmV3IEFycmF5KCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBJbnB1dCBibG9ja3MKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMudGV4dHVyZUJsb2NrcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAg
ICogQmluZGFibGUgYmxvY2tzIChCbG9ja3MgdGhhdCBuZWVkIHRvIHNldCBkYXRhIHRvIHRoZSBl
ZmZlY3QpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmJpbmRhYmxlQmxvY2tzID0gbmV3IEFy
cmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBMaXN0IG9mIGJsb2NrcyB0aGF0IGNhbiBw
cm92aWRlIGEgY29tcGlsYXRpb24gZmFsbGJhY2sKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
YmxvY2tzV2l0aEZhbGxiYWNrcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAg
ICogTGlzdCBvZiBibG9ja3MgdGhhdCBjYW4gcHJvdmlkZSBhIGRlZmluZSB1cGRhdGUKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuYmxvY2tzV2l0aERlZmluZXMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICogTGlzdCBvZiBibG9ja3MgdGhhdCBjYW4gcHJvdmlkZSBhIHJl
cGVhdGFibGUgY29udGVudAorICAgICAgICAqLworICAgICAgICB0aGlzLnJlcGVhdGFibGVDb250
ZW50QmxvY2tzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAqIExpc3Qgb2Yg
YmxvY2tzIHRoYXQgY2FuIHByb3ZpZGUgYSBkeW5hbWljIGxpc3Qgb2YgdW5pZm9ybXMKKyAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5keW5hbWljVW5pZm9ybUJsb2NrcyA9IG5ldyBBcnJheSgpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogTGlzdCBvZiBibG9ja3MgdGhhdCBjYW4gYmxvY2sgdGhl
IGlzUmVhZHkgZnVuY3Rpb24gZm9yIHRoZSBtYXRlcmlhbAorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5ibG9ja2luZ0Jsb2NrcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgbGlzdCBvZiBhbmltYXRlZCBpbnB1dHMKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuYW5pbWF0ZWRJbnB1dHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqIExpc3Qgb2Yg
ZW1pdHRlZCB2YXJpYWJsZXMgKi8KKyAgICAgICAgdGhpcy52YXJpYWJsZU5hbWVzID0ge307Cisg
ICAgICAgIC8qKiBMaXN0IG9mIGVtaXR0ZWQgZGVmaW5lcyAqLworICAgICAgICB0aGlzLmRlZmlu
ZU5hbWVzID0ge307CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjb21waWxhdGlv
biBoaW50cyBlbWl0dGVkIGF0IGNvbXBpbGF0aW9uIHRpbWUKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuaGludHMgPSB7CisgICAgICAgICAgICBuZWVkV29ybGRWaWV3TWF0cml4OiBmYWxzZSwK
KyAgICAgICAgICAgIG5lZWRXb3JsZFZpZXdQcm9qZWN0aW9uTWF0cml4OiBmYWxzZSwKKyAgICAg
ICAgICAgIG5lZWRBbHBoYUJsZW5kaW5nOiBmYWxzZSwKKyAgICAgICAgICAgIG5lZWRBbHBoYVRl
c3Rpbmc6IGZhbHNlCisgICAgICAgIH07CisgICAgICAgIC8qKgorICAgICAgICAgKiBMaXN0IG9m
IGNvbXBpbGF0aW9uIGNoZWNrcworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5jaGVja3MgPSB7
CisgICAgICAgICAgICBlbWl0VmVydGV4OiBmYWxzZSwKKyAgICAgICAgICAgIGVtaXRGcmFnbWVu
dDogZmFsc2UsCisgICAgICAgICAgICBub3RDb25uZWN0ZWROb25PcHRpb25hbElucHV0czogbmV3
IEFycmF5KCkKKyAgICAgICAgfTsKKyAgICAgICAgLy8gRXhjbHVkZSB1c3VhbCBhdHRyaWJ1dGVz
IGZyb20gZnJlZSB2YXJpYWJsZSBuYW1lcworICAgICAgICB0aGlzLnZhcmlhYmxlTmFtZXNbInBv
c2l0aW9uIl0gPSAwOworICAgICAgICB0aGlzLnZhcmlhYmxlTmFtZXNbIm5vcm1hbCJdID0gMDsK
KyAgICAgICAgdGhpcy52YXJpYWJsZU5hbWVzWyJ0YW5nZW50Il0gPSAwOworICAgICAgICB0aGlz
LnZhcmlhYmxlTmFtZXNbInV2Il0gPSAwOworICAgICAgICB0aGlzLnZhcmlhYmxlTmFtZXNbInV2
MiJdID0gMDsKKyAgICAgICAgdGhpcy52YXJpYWJsZU5hbWVzWyJ1djMiXSA9IDA7CisgICAgICAg
IHRoaXMudmFyaWFibGVOYW1lc1sidXY0Il0gPSAwOworICAgICAgICB0aGlzLnZhcmlhYmxlTmFt
ZXNbInV2NCJdID0gMDsKKyAgICAgICAgdGhpcy52YXJpYWJsZU5hbWVzWyJ1djUiXSA9IDA7Cisg
ICAgICAgIHRoaXMudmFyaWFibGVOYW1lc1sidXY2Il0gPSAwOworICAgICAgICB0aGlzLnZhcmlh
YmxlTmFtZXNbImNvbG9yIl0gPSAwOworICAgICAgICB0aGlzLnZhcmlhYmxlTmFtZXNbIm1hdHJp
Y2VzSW5kaWNlcyJdID0gMDsKKyAgICAgICAgdGhpcy52YXJpYWJsZU5hbWVzWyJtYXRyaWNlc1dl
aWdodHMiXSA9IDA7CisgICAgICAgIHRoaXMudmFyaWFibGVOYW1lc1sibWF0cmljZXNJbmRpY2Vz
RXh0cmEiXSA9IDA7CisgICAgICAgIHRoaXMudmFyaWFibGVOYW1lc1sibWF0cmljZXNXZWlnaHRz
RXh0cmEiXSA9IDA7CisgICAgICAgIHRoaXMudmFyaWFibGVOYW1lc1siZGlmZnVzZUJhc2UiXSA9
IDA7CisgICAgICAgIHRoaXMudmFyaWFibGVOYW1lc1sic3BlY3VsYXJCYXNlIl0gPSAwOworICAg
ICAgICB0aGlzLnZhcmlhYmxlTmFtZXNbIndvcmxkUG9zIl0gPSAwOworICAgICAgICAvLyBFeGNs
dWRlIGtub3duIHZhcnlpbmdzCisgICAgICAgIHRoaXMudmFyaWFibGVOYW1lc1sidlRCTiJdID0g
MDsKKyAgICAgICAgLy8gRXhjbHVkZSBkZWZpbmVzCisgICAgICAgIHRoaXMuZGVmaW5lTmFtZXNb
Ik1BSU5VVjAiXSA9IDA7CisgICAgICAgIHRoaXMuZGVmaW5lTmFtZXNbIk1BSU5VVjEiXSA9IDA7
CisgICAgICAgIHRoaXMuZGVmaW5lTmFtZXNbIk1BSU5VVjIiXSA9IDA7CisgICAgICAgIHRoaXMu
ZGVmaW5lTmFtZXNbIk1BSU5VVjMiXSA9IDA7CisgICAgICAgIHRoaXMuZGVmaW5lTmFtZXNbIk1B
SU5VVjQiXSA9IDA7CisgICAgICAgIHRoaXMuZGVmaW5lTmFtZXNbIk1BSU5VVjUiXSA9IDA7Cisg
ICAgICAgIHRoaXMuZGVmaW5lTmFtZXNbIk1BSU5VVjYiXSA9IDA7CisgICAgICAgIHRoaXMuZGVm
aW5lTmFtZXNbIk1BSU5VVjciXSA9IDA7CisgICAgfQorICAgIC8qKgorICAgICAqIEVtaXRzIGNv
bnNvbGUgZXJyb3JzIGFuZCBleGNlcHRpb25zIGlmIHRoZXJlIGlzIGEgZmFpbGluZyBjaGVjawor
ICAgICAqLworICAgIE5vZGVNYXRlcmlhbEJ1aWxkU3RhdGVTaGFyZWREYXRhLnByb3RvdHlwZS5l
bWl0RXJyb3JzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gIiI7
CisgICAgICAgIGlmICghdGhpcy5jaGVja3MuZW1pdFZlcnRleCkgeworICAgICAgICAgICAgZXJy
b3JNZXNzYWdlICs9ICJOb2RlTWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIHZlcnRleCBvdXRwdXQu
IFlvdSBuZWVkIHRvIGF0IGxlYXN0IGFkZCBhIGJsb2NrIHRoYXQgZ2VuZXJhdGVzIGEgZ2xQb3Np
dGlvbiB2YWx1ZS5cclxuIjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuY2hlY2tzLmVt
aXRGcmFnbWVudCkgeworICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9ICJOb2RlTWF0ZXJpYWwg
ZG9lcyBub3QgaGF2ZSBhIGZyYWdtZW50IG91dHB1dC4gWW91IG5lZWQgdG8gYXQgbGVhc3QgYWRk
IGEgYmxvY2sgdGhhdCBnZW5lcmF0ZXMgYSBnbEZyYWdDb2xvciB2YWx1ZS5cclxuIjsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5jaGVja3Mubm90Q29ubmVj
dGVkTm9uT3B0aW9uYWxJbnB1dHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAg
ICB2YXIgbm90Q29ubmVjdGVkSW5wdXQgPSBfYVtfaV07CisgICAgICAgICAgICBlcnJvck1lc3Nh
Z2UgKz0gImlucHV0ICIgKyBub3RDb25uZWN0ZWRJbnB1dC5uYW1lICsgIiBmcm9tIGJsb2NrICIg
KyBub3RDb25uZWN0ZWRJbnB1dC5vd25lckJsb2NrLm5hbWUgKyAiWyIgKyBub3RDb25uZWN0ZWRJ
bnB1dC5vd25lckJsb2NrLmdldENsYXNzTmFtZSgpICsgIl0gaXMgbm90IGNvbm5lY3RlZCBhbmQg
aXMgbm90IG9wdGlvbmFsLlxyXG4iOworICAgICAgICB9CisgICAgICAgIGlmIChlcnJvck1lc3Nh
Z2UpIHsKKyAgICAgICAgICAgIHRocm93ICJCdWlsZCBvZiBOb2RlTWF0ZXJpYWwgZmFpbGVkOlxy
XG4iICsgZXJyb3JNZXNzYWdlOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gTm9kZU1h
dGVyaWFsQnVpbGRTdGF0ZVNoYXJlZERhdGE7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL01hdGVyaWFscy9Ob2RlL25vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcy50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9NYXRlcmlhbHMvTm9kZS9ub2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXMgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXM7IH0pOworLyoqCisg
KiBFbnVtIHVzZWQgdG8gZGVmaW5lIHN5c3RlbSB2YWx1ZXMgZS5nLiB2YWx1ZXMgYXV0b21hdGlj
YWxseSBwcm92aWRlZCBieSB0aGUgc3lzdGVtCisgKi8KK3ZhciBOb2RlTWF0ZXJpYWxTeXN0ZW1W
YWx1ZXM7CisoZnVuY3Rpb24gKE5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcykgeworICAgIC8qKiBX
b3JsZCAqLworICAgIE5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc1tOb2RlTWF0ZXJpYWxTeXN0ZW1W
YWx1ZXNbIldvcmxkIl0gPSAxXSA9ICJXb3JsZCI7CisgICAgLyoqIFZpZXcgKi8KKyAgICBOb2Rl
TWF0ZXJpYWxTeXN0ZW1WYWx1ZXNbTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzWyJWaWV3Il0gPSAy
XSA9ICJWaWV3IjsKKyAgICAvKiogUHJvamVjdGlvbiAqLworICAgIE5vZGVNYXRlcmlhbFN5c3Rl
bVZhbHVlc1tOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNbIlByb2plY3Rpb24iXSA9IDNdID0gIlBy
b2plY3Rpb24iOworICAgIC8qKiBWaWV3UHJvamVjdGlvbiAqLworICAgIE5vZGVNYXRlcmlhbFN5
c3RlbVZhbHVlc1tOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNbIlZpZXdQcm9qZWN0aW9uIl0gPSA0
XSA9ICJWaWV3UHJvamVjdGlvbiI7CisgICAgLyoqIFdvcmxkVmlldyAqLworICAgIE5vZGVNYXRl
cmlhbFN5c3RlbVZhbHVlc1tOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNbIldvcmxkVmlldyJdID0g
NV0gPSAiV29ybGRWaWV3IjsKKyAgICAvKiogV29ybGRWaWV3UHJvamVjdGlvbiAqLworICAgIE5v
ZGVNYXRlcmlhbFN5c3RlbVZhbHVlc1tOb2RlTWF0ZXJpYWxTeXN0ZW1WYWx1ZXNbIldvcmxkVmll
d1Byb2plY3Rpb24iXSA9IDZdID0gIldvcmxkVmlld1Byb2plY3Rpb24iOworICAgIC8qKiBDYW1l
cmFQb3NpdGlvbiAqLworICAgIE5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc1tOb2RlTWF0ZXJpYWxT
eXN0ZW1WYWx1ZXNbIkNhbWVyYVBvc2l0aW9uIl0gPSA3XSA9ICJDYW1lcmFQb3NpdGlvbiI7Cisg
ICAgLyoqIEZvZyBDb2xvciAqLworICAgIE5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlc1tOb2RlTWF0
ZXJpYWxTeXN0ZW1WYWx1ZXNbIkZvZ0NvbG9yIl0gPSA4XSA9ICJGb2dDb2xvciI7Cit9KShOb2Rl
TWF0ZXJpYWxTeXN0ZW1WYWx1ZXMgfHwgKE5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyA9IHt9KSk7
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9QQlIvaW5kZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9Q
QlIvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogUEJSTWF0ZXJpYWxEZWZpbmVzLCBQQlJCYXNlTWF0ZXJpYWws
IFBCUkJhc2VTaW1wbGVNYXRlcmlhbCwgUEJSTWF0ZXJpYWwsIFBCUk1ldGFsbGljUm91Z2huZXNz
TWF0ZXJpYWwsIFBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGJyQmFzZU1hdGVyaWFsX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BickJhc2VNYXRl
cmlhbCAqLyAiLi9NYXRlcmlhbHMvUEJSL3BickJhc2VNYXRlcmlhbC50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQQlJNYXRlcmlhbERlZmluZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYnJCYXNl
TWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUEJSTWF0ZXJpYWxEZWZpbmVz
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUkJhc2VNYXRlcmlhbCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX3BickJhc2VNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQ
QlJCYXNlTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGJyQmFz
ZVNpbXBsZU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL3BickJhc2VTaW1wbGVNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvUEJS
L3BickJhc2VTaW1wbGVNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQQlJCYXNlU2lt
cGxlTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYnJCYXNlU2ltcGxlTWF0ZXJpYWxf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUEJSQmFzZVNpbXBsZU1hdGVyaWFsIl07IH0p
OworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bick1hdGVyaWFsX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bick1hdGVyaWFsICov
ICIuL01hdGVyaWFscy9QQlIvcGJyTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUEJS
TWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYnJNYXRlcmlhbF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJQQlJNYXRlcmlhbCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9wYnJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bick1ldGFsbGljUm91Z2huZXNz
TWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL1BCUi9wYnJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFs
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9wYnJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwiXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGJyU3BlY3VsYXJHbG9zc2luZXNzTWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vcGJyU3BlY3VsYXJHbG9zc2luZXNzTWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL1BCUi9wYnJT
cGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQQlJTcGVj
dWxhckdsb3NzaW5lc3NNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BiclNwZWN1bGFy
R2xvc3NpbmVzc01hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBCUlNwZWN1
bGFyR2xvc3NpbmVzc01hdGVyaWFsIl07IH0pOworCisKKworCisKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NYXRlcmlhbHMvUEJSL3BickFuaXNvdHJvcGljQ29uZmlndXJhdGlvbi50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9QQlIvcGJyQW5pc290cm9waWNDb25maWd1cmF0aW9u
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3Vy
YXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUEJSQW5pc290cm9w
aWNDb25maWd1cmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQQlJBbmlzb3Ryb3BpY0NvbmZp
Z3VyYXRpb247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4v
bm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29y
YXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWVzaGVzL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9N
YXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlh
bHNfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL21hdGVyaWFsRmxhZ3MgKi8gIi4vTWF0ZXJp
YWxzL21hdGVyaWFsRmxhZ3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJp
YWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIgKi8gIi4vTWF0
ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisKKworCisKKworCisvKioKKyAqIERlZmluZSB0
aGUgY29kZSByZWxhdGVkIHRvIHRoZSBhbmlzb3Ryb3BpYyBwYXJhbWV0ZXJzIG9mIHRoZSBwYnIg
bWF0ZXJpYWwuCisgKi8KK3ZhciBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24gPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGUgYSBuZXcg
aXN0YW5jZSBvZiBhbmlzb3Ryb3B5IGNvbmZpZ3VyYXRpb24uCisgICAgICogQHBhcmFtIG1hcmtB
bGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkgQ2FsbGJhY2sgdG8gZmxhZyB0aGUgbWF0ZXJpYWwg
dG8gZGlydHkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRp
b24obWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSkgeworICAgICAgICB0aGlzLl9pc0Vu
YWJsZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaWYgdGhlIGFu
aXNvdHJvcHkgaXMgZW5hYmxlZCBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmlzRW5hYmxlZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5l
cyB0aGUgYW5pc290cm9weSBzdHJlbmd0aCAoYmV0d2VlbiAwIGFuZCAxKSBpdCBkZWZhdWx0cyB0
byAxLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pbnRlbnNpdHkgPSAxOworICAgICAgICAv
KioKKyAgICAgICAgICogRGVmaW5lcyBpZiB0aGUgZWZmZWN0IGlzIGFsb25nIHRoZSB0YW5nZW50
cywgYml0YW5nZW50cyBvciBpbiBiZXR3ZWVuLgorICAgICAgICAgKiBCeSBkZWZhdWx0LCB0aGUg
ZWZmZWN0IGlzICJzdHJlY3RjaGluZyIgdGhlIGhpZ2hsaWdodHMgYWxvbmcgdGhlIHRhbmdlbnRz
LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjIiXSgxLCAwKTsKKyAg
ICAgICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTdG9y
ZXMgdGhlIGFuaXNvdHJvcHkgdmFsdWVzIGluIGEgdGV4dHVyZS4KKyAgICAgICAgICogcmcgaXMg
ZGlyZWN0aW9uIChsaWtlIG5vcm1hbCBmcm9tIC0xIHRvIDEpCisgICAgICAgICAqIGIgaXMgYSBp
bnRlbnNpdHkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudGV4dHVyZSA9IG51bGw7CisgICAg
ICAgIHRoaXMuX2ludGVybmFsTWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSA9IG1hcmtB
bGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHk7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisg
ICAgUEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uLnByb3RvdHlwZS5fbWFya0FsbFN1Yk1lc2hl
c0FzVGV4dHVyZXNEaXJ0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxN
YXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTcGVjaWZpZXMgdGhhdCB0aGUgc3VibWVzaCBpcyByZWFkeSB0byBiZSB1c2VkLgorICAgICAq
IEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0IG9mICJkZWZpbmVzIiB0byB1cGRhdGUuCisgICAgICog
QHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIHNjZW5lIHRoZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgor
ICAgICAqIEByZXR1cm5zIC0gYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhlIHN1Ym1lc2ggaXMg
cmVhZHkgb3Igbm90LgorICAgICAqLworICAgIFBCUkFuaXNvdHJvcGljQ29uZmlndXJhdGlvbi5w
cm90b3R5cGUuaXNSZWFkeUZvclN1Yk1lc2ggPSBmdW5jdGlvbiAoZGVmaW5lcywgc2NlbmUpIHsK
KyAgICAgICAgaWYgKGRlZmluZXMuX2FyZVRleHR1cmVzRGlydHkpIHsKKyAgICAgICAgICAgIGlm
IChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGV4
dHVyZSAmJiBfTWF0ZXJpYWxzX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siTWF0ZXJpYWxGbGFncyJdLkFuaXNvdHJvcGljVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyB0byBzZWUg
aWYgYSB0ZXh0dXJlIGlzIHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBkZWZp
bmVzIHRoZSBsaXN0IG9mICJkZWZpbmVzIiB0byB1cGRhdGUuCisgICAgICogQHBhcmFtIG1lc2gg
dGhlIG1lc2ggd2UgYXJlIHByZXBhcmluZyB0aGUgZGVmaW5lcyBmb3IuCisgICAgICogQHBhcmFt
IHNjZW5lIGRlZmluZXMgdGhlIHNjZW5lIHRoZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgorICAgICAq
LworICAgIFBCUkFuaXNvdHJvcGljQ29uZmlndXJhdGlvbi5wcm90b3R5cGUucHJlcGFyZURlZmlu
ZXMgPSBmdW5jdGlvbiAoZGVmaW5lcywgbWVzaCwgc2NlbmUpIHsKKyAgICAgICAgaWYgKHRoaXMu
X2lzRW5hYmxlZCkgeworICAgICAgICAgICAgZGVmaW5lcy5BTklTT1RST1BJQyA9IHRoaXMuX2lz
RW5hYmxlZDsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc0VuYWJsZWQgJiYgIW1lc2guaXNWZXJ0
aWNlc0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlcnRleEJ1ZmZlciJdLlRhbmdlbnRLaW5kKSkgeworICAgICAgICAgICAgICAgIGRlZmlu
ZXMuX25lZWRVVnMgPSB0cnVlOworICAgICAgICAgICAgICAgIGRlZmluZXMuTUFJTlVWMSA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVmaW5lcy5fYXJlVGV4dHVyZXNE
aXJ0eSkgeworICAgICAgICAgICAgICAgIGlmIChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgJiYgX01hdGVyaWFsc19tYXRlcmlh
bEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdGVyaWFsRmxhZ3MiXS5Bbmlz
b3Ryb3BpY1RleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0ZXJp
YWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1hdGVyaWFs
SGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JNZXJnZWRVVih0aGlzLl90ZXh0dXJlLCBkZWZpbmVz
LCAiQU5JU09UUk9QSUNfVEVYVFVSRSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5BTklT
T1RST1BJQ19URVhUVVJFID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBkZWZpbmVzLkFOSVNPVFJPUElDID0gZmFsc2U7CisgICAgICAgICAgICBkZWZpbmVz
LkFOSVNPVFJPUElDX1RFWFRVUkUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogQmluZHMgdGhlIG1hdGVyaWFsIGRhdGEuCisgICAgICogQHBhcmFtIHVuaWZvcm1C
dWZmZXIgZGVmaW5lcyB0aGUgVW5pZm9ybSBidWZmZXIgdG8gZmlsbCBpbi4KKyAgICAgKiBAcGFy
YW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgdGhlIG1hdGVyaWFsIGJlbG9uZ3MgdG8uCisgICAg
ICogQHBhcmFtIGlzRnJvemVuIGRlZmluZXMgd2V0aGVyIHRoZSBtYXRlcmlhbCBpcyBmcm96ZW4g
b3Igbm90LgorICAgICAqLworICAgIFBCUkFuaXNvdHJvcGljQ29uZmlndXJhdGlvbi5wcm90b3R5
cGUuYmluZEZvclN1Yk1lc2ggPSBmdW5jdGlvbiAodW5pZm9ybUJ1ZmZlciwgc2NlbmUsIGlzRnJv
emVuKSB7CisgICAgICAgIGlmICghdW5pZm9ybUJ1ZmZlci51c2VVYm8gfHwgIWlzRnJvemVuIHx8
ICF1bmlmb3JtQnVmZmVyLmlzU3luYykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUg
JiYgX01hdGVyaWFsc19tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
Ik1hdGVyaWFsRmxhZ3MiXS5Bbmlzb3Ryb3BpY1RleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAg
ICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIoInZBbmlzb3Ryb3B5SW5mb3MiLCB0aGlz
Ll90ZXh0dXJlLmNvb3JkaW5hdGVzSW5kZXgsIHRoaXMuX3RleHR1cmUubGV2ZWwpOworICAgICAg
ICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kVGV4dHVyZU1hdHJpeCh0aGlzLl90ZXh0dXJl
LCB1bmlmb3JtQnVmZmVyLCAiYW5pc290cm9weSIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gQW5pc290cm9weQorICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDMo
InZBbmlzb3Ryb3B5IiwgdGhpcy5kaXJlY3Rpb24ueCwgdGhpcy5kaXJlY3Rpb24ueSwgdGhpcy5p
bnRlbnNpdHkpOworICAgICAgICB9CisgICAgICAgIC8vIFRleHR1cmVzCisgICAgICAgIGlmIChz
Y2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlICYm
IF9NYXRlcmlhbHNfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJN
YXRlcmlhbEZsYWdzIl0uQW5pc290cm9waWNUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAg
ICAgIHVuaWZvcm1CdWZmZXIuc2V0VGV4dHVyZSgiYW5pc290cm9weVNhbXBsZXIiLCB0aGlzLl90
ZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogQ2hlY2tzIHRvIHNlZSBpZiBhIHRleHR1cmUgaXMgdXNlZCBpbiB0aGUgbWF0ZXJpYWwuCisg
ICAgICogQHBhcmFtIHRleHR1cmUgLSBCYXNlIHRleHR1cmUgdG8gdXNlLgorICAgICAqIEByZXR1
cm5zIC0gQm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGEgdGV4dHVyZSBpcyB1c2VkIGluIHRoZSBtYXRl
cmlhbC4KKyAgICAgKi8KKyAgICBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24ucHJvdG90eXBl
Lmhhc1RleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgICAgICBpZiAodGhpcy5fdGV4
dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBh
biBhcnJheSBvZiB0aGUgYWN0aXZlbHkgdXNlZCB0ZXh0dXJlcy4KKyAgICAgKiBAcGFyYW0gYWN0
aXZlVGV4dHVyZXMgQXJyYXkgb2YgQmFzZVRleHR1cmVzCisgICAgICovCisgICAgUEJSQW5pc290
cm9waWNDb25maWd1cmF0aW9uLnByb3RvdHlwZS5nZXRBY3RpdmVUZXh0dXJlcyA9IGZ1bmN0aW9u
IChhY3RpdmVUZXh0dXJlcykgeworICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAg
ICAgICAgYWN0aXZlVGV4dHVyZXMucHVzaCh0aGlzLl90ZXh0dXJlKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAg
ICAgKiBAcGFyYW0gYW5pbWF0YWJsZXMgQXJyYXkgb2YgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAg
ICAgKi8KKyAgICBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldEFuaW1h
dGFibGVzID0gZnVuY3Rpb24gKGFuaW1hdGFibGVzKSB7CisgICAgICAgIGlmICh0aGlzLl90ZXh0
dXJlICYmIHRoaXMuX3RleHR1cmUuYW5pbWF0aW9ucyAmJiB0aGlzLl90ZXh0dXJlLmFuaW1hdGlv
bnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgYW5pbWF0YWJsZXMucHVzaCh0aGlzLl90ZXh0
dXJlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhlIHJl
c291cmNlcyBvZiB0aGUgbWF0ZXJpYWwuCisgICAgICogQHBhcmFtIGZvcmNlRGlzcG9zZVRleHR1
cmVzIC0gRm9yY2VzIHRoZSBkaXNwb3NhbCBvZiBhbGwgdGV4dHVyZXMuCisgICAgICovCisgICAg
UEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24g
KGZvcmNlRGlzcG9zZVRleHR1cmVzKSB7CisgICAgICAgIGlmIChmb3JjZURpc3Bvc2VUZXh0dXJl
cykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl90ZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgKiBHZXQgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZSBvZiB0aGUgdGV4dHVy
ZSB1c2VmdWwgZm9yIHNlcmlhbGl6YXRpb24gb3IgZHluYW1pYyBjb2RpbmcuCisgICAgKiBAcmV0
dXJucyAiUEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uIgorICAgICovCisgICAgUEJSQW5pc290
cm9waWNDb25maWd1cmF0aW9uLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiAiUEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uIjsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIEFkZCBmYWxsYmFja3MgdG8gdGhlIGVmZmVjdCBmYWxsYmFja3MgbGlz
dC4KKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBCYXNlIHRleHR1cmUgdG8gdXNl
LgorICAgICAqIEBwYXJhbSBmYWxsYmFja3MgZGVmaW5lcyB0aGUgY3VycmVudCBmYWxsYmFjayBs
aXN0LgorICAgICAqIEBwYXJhbSBjdXJyZW50UmFuayBkZWZpbmVzIHRoZSBjdXJyZW50IGZhbGxi
YWNrIHJhbmsuCisgICAgICogQHJldHVybnMgdGhlIG5ldyBmYWxsYmFjayByYW5rLgorICAgICAq
LworICAgIFBCUkFuaXNvdHJvcGljQ29uZmlndXJhdGlvbi5BZGRGYWxsYmFja3MgPSBmdW5jdGlv
biAoZGVmaW5lcywgZmFsbGJhY2tzLCBjdXJyZW50UmFuaykgeworICAgICAgICBpZiAoZGVmaW5l
cy5BTklTT1RST1BJQykgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGN1cnJl
bnRSYW5rKyssICJBTklTT1RST1BJQyIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjdXJy
ZW50UmFuazsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCB0aGUgcmVxdWlyZWQgdW5pZm9y
bXMgdG8gdGhlIGN1cnJlbnQgbGlzdC4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybXMgZGVmaW5lcyB0
aGUgY3VycmVudCB1bmlmb3JtIGxpc3QuCisgICAgICovCisgICAgUEJSQW5pc290cm9waWNDb25m
aWd1cmF0aW9uLkFkZFVuaWZvcm1zID0gZnVuY3Rpb24gKHVuaWZvcm1zKSB7CisgICAgICAgIHVu
aWZvcm1zLnB1c2goInZBbmlzb3Ryb3B5IiwgInZBbmlzb3Ryb3B5SW5mb3MiLCAiYW5pc290cm9w
eU1hdHJpeCIpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkIHRoZSByZXF1aXJlZCB1bmlm
b3JtcyB0byB0aGUgY3VycmVudCBidWZmZXIuCisgICAgICogQHBhcmFtIHVuaWZvcm1CdWZmZXIg
ZGVmaW5lcyB0aGUgY3VycmVudCB1bmlmb3JtIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBQQlJBbmlz
b3Ryb3BpY0NvbmZpZ3VyYXRpb24uUHJlcGFyZVVuaWZvcm1CdWZmZXIgPSBmdW5jdGlvbiAodW5p
Zm9ybUJ1ZmZlcikgeworICAgICAgICB1bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZBbmlzb3Ry
b3B5IiwgMyk7CisgICAgICAgIHVuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidkFuaXNvdHJvcHlJ
bmZvcyIsIDIpOworICAgICAgICB1bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oImFuaXNvdHJvcHlN
YXRyaXgiLCAxNik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgdGhlIHJlcXVpcmVkIHNh
bXBsZXJzIHRvIHRoZSBjdXJyZW50IGxpc3QuCisgICAgICogQHBhcmFtIHNhbXBsZXJzIGRlZmlu
ZXMgdGhlIGN1cnJlbnQgc2FtcGxlciBsaXN0LgorICAgICAqLworICAgIFBCUkFuaXNvdHJvcGlj
Q29uZmlndXJhdGlvbi5BZGRTYW1wbGVycyA9IGZ1bmN0aW9uIChzYW1wbGVycykgeworICAgICAg
ICBzYW1wbGVycy5wdXNoKCJhbmlzb3Ryb3B5U2FtcGxlciIpOworICAgIH07CisgICAgLyoqCisg
ICAgICogTWFrZXMgYSBkdXBsaWNhdGUgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpbnRv
IGFub3RoZXIgb25lLgorICAgICAqIEBwYXJhbSBhbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24gZGVm
aW5lIHRoZSBjb25maWcgd2hlcmUgdG8gY29weSB0aGUgaW5mbworICAgICAqLworICAgIFBCUkFu
aXNvdHJvcGljQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuY29weVRvID0gZnVuY3Rpb24gKGFuaXNv
dHJvcGljQ29uZmlndXJhdGlvbikgeworICAgICAgICBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5DbG9uZShmdW5jdGlv
biAoKSB7IHJldHVybiBhbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb247IH0sIHRoaXMpOworICAgIH07
CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGlzIGFuaXNvdHJvcHkgY29uZmlndXJhdGlv
bi4KKyAgICAgKiBAcmV0dXJucyAtIEFuIG9iamVjdCB3aXRoIHRoZSBzZXJpYWxpemVkIGNvbmZp
Zy4KKyAgICAgKi8KKyAgICBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnNl
cmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlNlcmlh
bGl6ZSh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlcyBhIGFuaXNvdHJvcHkg
Q29uZmlndXJhdGlvbiBmcm9tIGEgc2VyaWFsaXplZCBvYmplY3QuCisgICAgICogQHBhcmFtIHNv
dXJjZSAtIFNlcmlhbGl6ZWQgb2JqZWN0LgorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRo
ZSBzY2VuZSB3ZSBhcmUgcGFyc2luZyBmb3IKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBEZWZpbmVz
IHRoZSByb290VXJsIHRvIGxvYWQgZnJvbQorICAgICAqLworICAgIFBCUkFuaXNvdHJvcGljQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoc291cmNlLCBzY2VuZSwgcm9v
dFVybCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5Q
YXJzZShmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpczsgfSwgc291cmNlLCBzY2VuZSwgcm9vdFVy
bCk7CisgICAgfTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJd
KSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUkFuaXNvdHJv
cGljQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJpc0VuYWJsZWQiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgUEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uLnByb3RvdHlw
ZSwgImludGVuc2l0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNWZWN0b3IyIl0pKCkKKyAg
ICBdLCBQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiZGlyZWN0aW9uIiwg
dm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29y
YXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9w
ZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUkFu
aXNvdHJvcGljQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ0ZXh0dXJlIiwgdm9pZCAwKTsKKyAg
ICByZXR1cm4gUEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvUEJSL3BickJSREZDb25maWd1cmF0aW9uLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9NYXRlcmlhbHMvUEJSL3BickJSREZDb25maWd1cmF0aW9uLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFBCUkJSREZDb25maWd1cmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBCUkJSREZDb25maWd1cmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBQQlJCUkRGQ29uZmlndXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0b3JzICov
ICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworCisKKy8qKgorICogRGVmaW5lIHRoZSBjb2RlIHJl
bGF0ZWQgdG8gdGhlIEJSREYgcGFyYW1ldGVycyBvZiB0aGUgcGJyIG1hdGVyaWFsLgorICovCit2
YXIgUEJSQlJERkNvbmZpZ3VyYXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgLyoqCisgICAgICogSW5zdGFudGlhdGUgYSBuZXcgaXN0YW5jZSBvZiBjbGVhciBjb2F0IGNv
bmZpZ3VyYXRpb24uCisgICAgICogQHBhcmFtIG1hcmtBbGxTdWJNZXNoZXNBc01pc2NEaXJ0eSBD
YWxsYmFjayB0byBmbGFnIHRoZSBtYXRlcmlhbCB0byBkaXJ0eQorICAgICAqLworICAgIGZ1bmN0
aW9uIFBCUkJSREZDb25maWd1cmF0aW9uKG1hcmtBbGxTdWJNZXNoZXNBc01pc2NEaXJ0eSkgewor
ICAgICAgICB0aGlzLl91c2VFbmVyZ3lDb25zZXJ2YXRpb24gPSBQQlJCUkRGQ29uZmlndXJhdGlv
bi5ERUZBVUxUX1VTRV9FTkVSR1lfQ09OU0VSVkFUSU9OOworICAgICAgICAvKioKKyAgICAgICAg
ICogRGVmaW5lcyBpZiB0aGUgbWF0ZXJpYWwgdXNlcyBlbmVyZ3kgY29uc2VydmF0aW9uLgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy51c2VFbmVyZ3lDb25zZXJ2YXRpb24gPSBQQlJCUkRGQ29u
ZmlndXJhdGlvbi5ERUZBVUxUX1VTRV9FTkVSR1lfQ09OU0VSVkFUSU9OOworICAgICAgICB0aGlz
Ll91c2VTbWl0aFZpc2liaWxpdHlIZWlnaHRDb3JyZWxhdGVkID0gUEJSQlJERkNvbmZpZ3VyYXRp
b24uREVGQVVMVF9VU0VfU01JVEhfVklTSUJJTElUWV9IRUlHSFRfQ09SUkVMQVRFRDsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIExFR0FDWSBNb2RlIHNldCB0byBmYWxzZQorICAgICAgICAgKiBE
ZWZpbmVzIGlmIHRoZSBtYXRlcmlhbCB1c2VzIGhlaWdodCBzbWl0aCBjb3JyZWxhdGVkIHZpc2li
aWxpdHkgdGVybS4KKyAgICAgICAgICogSWYgeW91IGludGVudCB0byBub3QgdXNlIG91ciBkZWZh
dWx0IEJSREYsIHlvdSBuZWVkIHRvIGxvYWQgYSBzZXBhcmF0ZSBCUkRGIFRleHR1cmUgZm9yIHRo
ZSBQQlIKKyAgICAgICAgICogWW91IGNhbiBlaXRoZXIgbG9hZCBodHRwczovL2Fzc2V0cy5iYWJ5
bG9uanMuY29tL2Vudmlyb25tZW50cy91bmNvcnJlbGF0ZWRCUkRGLnBuZworICAgICAgICAgKiBv
ciBodHRwczovL2Fzc2V0cy5iYWJ5bG9uanMuY29tL2Vudmlyb25tZW50cy91bmNvcnJlbGF0ZWRC
UkRGLmRkcyB0byBoYXZlIG1vcmUgcHJlY2lzaW9uCisgICAgICAgICAqIE5vdCByZWx5aW5nIG9u
IGhlaWdodCBjb3JyZWxhdGVkIHdpbGwgYWxzbyBkaXNhYmxlIGVuZXJneSBjb25zZXJ2YXRpb24u
CisgICAgICAgICAqLworICAgICAgICB0aGlzLnVzZVNtaXRoVmlzaWJpbGl0eUhlaWdodENvcnJl
bGF0ZWQgPSBQQlJCUkRGQ29uZmlndXJhdGlvbi5ERUZBVUxUX1VTRV9TTUlUSF9WSVNJQklMSVRZ
X0hFSUdIVF9DT1JSRUxBVEVEOworICAgICAgICB0aGlzLl91c2VTcGhlcmljYWxIYXJtb25pY3Mg
PSBQQlJCUkRGQ29uZmlndXJhdGlvbi5ERUZBVUxUX1VTRV9TUEhFUklDQUxfSEFSTU9OSUNTOwor
ICAgICAgICAvKioKKyAgICAgICAgICogTEVHQUNZIE1vZGUgc2V0IHRvIGZhbHNlCisgICAgICAg
ICAqIERlZmluZXMgaWYgdGhlIG1hdGVyaWFsIHVzZXMgc3BoZXJpY2FsIGhhcm1vbmljcyB2cyBz
cGhlcmljYWwgcG9seW5vbWlhbHMgZm9yIHRoZQorICAgICAgICAgKiBkaWZmdXNlIHBhcnQgb2Yg
dGhlIElCTC4KKyAgICAgICAgICogVGhlIGhhcm1vbmljcyBkZXNwaXRlIGEgdGlueSBiaWdnZXIg
Y29zdCBoYXMgYmVlbiBwcm92ZW4gdG8gcHJvdmlkZSBjbG9zZXIgcmVzdWx0cworICAgICAgICAg
KiB0byB0aGUgZ3JvdW5kIHRydXRoLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy51c2VTcGhl
cmljYWxIYXJtb25pY3MgPSBQQlJCUkRGQ29uZmlndXJhdGlvbi5ERUZBVUxUX1VTRV9TUEhFUklD
QUxfSEFSTU9OSUNTOworICAgICAgICB0aGlzLl9pbnRlcm5hbE1hcmtBbGxTdWJNZXNoZXNBc01p
c2NEaXJ0eSA9IG1hcmtBbGxTdWJNZXNoZXNBc01pc2NEaXJ0eTsKKyAgICB9CisgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICBQQlJCUkRGQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuX21hcmtBbGxTdWJN
ZXNoZXNBc01pc2NEaXJ0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxN
YXJrQWxsU3ViTWVzaGVzQXNNaXNjRGlydHkoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENo
ZWNrcyB0byBzZWUgaWYgYSB0ZXh0dXJlIGlzIHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAgICAq
IEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0IG9mICJkZWZpbmVzIiB0byB1cGRhdGUuCisgICAgICov
CisgICAgUEJSQlJERkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnByZXBhcmVEZWZpbmVzID0gZnVu
Y3Rpb24gKGRlZmluZXMpIHsKKyAgICAgICAgZGVmaW5lcy5CUkRGX1ZfSEVJR0hUX0NPUlJFTEFU
RUQgPSB0aGlzLl91c2VTbWl0aFZpc2liaWxpdHlIZWlnaHRDb3JyZWxhdGVkOworICAgICAgICBk
ZWZpbmVzLk1TX0JSREZfRU5FUkdZX0NPTlNFUlZBVElPTiA9IHRoaXMuX3VzZUVuZXJneUNvbnNl
cnZhdGlvbiAmJiB0aGlzLl91c2VTbWl0aFZpc2liaWxpdHlIZWlnaHRDb3JyZWxhdGVkOworICAg
ICAgICBkZWZpbmVzLlNQSEVSSUNBTF9IQVJNT05JQ1MgPSB0aGlzLl91c2VTcGhlcmljYWxIYXJt
b25pY3M7CisgICAgfTsKKyAgICAvKioKKyAgICAqIEdldCB0aGUgY3VycmVudCBjbGFzcyBuYW1l
IG9mIHRoZSB0ZXh0dXJlIHVzZWZ1bCBmb3Igc2VyaWFsaXphdGlvbiBvciBkeW5hbWljIGNvZGlu
Zy4KKyAgICAqIEByZXR1cm5zICJQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uIgorICAgICovCisg
ICAgUEJSQlJERkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuICJQQlJCUkRGQ29uZmlndXJhdGlvbiI7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBNYWtlcyBhIGR1cGxpY2F0ZSBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0
aW9uIGludG8gYW5vdGhlciBvbmUuCisgICAgICogQHBhcmFtIGJyZGZDb25maWd1cmF0aW9uIGRl
ZmluZSB0aGUgY29uZmlnIHdoZXJlIHRvIGNvcHkgdGhlIGluZm8KKyAgICAgKi8KKyAgICBQQlJC
UkRGQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuY29weVRvID0gZnVuY3Rpb24gKGJyZGZDb25maWd1
cmF0aW9uKSB7CisgICAgICAgIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkNsb25lKGZ1bmN0aW9uICgpIHsgcmV0dXJu
IGJyZGZDb25maWd1cmF0aW9uOyB9LCB0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
cmlhbGl6ZXMgdGhpcyBCUkRGIGNvbmZpZ3VyYXRpb24uCisgICAgICogQHJldHVybnMgLSBBbiBv
YmplY3Qgd2l0aCB0aGUgc2VyaWFsaXplZCBjb25maWcuCisgICAgICovCisgICAgUEJSQlJERkNv
bmZpZ3VyYXRpb24ucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2Vy
aWFsaXphdGlvbkhlbHBlciJdLlNlcmlhbGl6ZSh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFBhcnNlcyBhIGFuaXNvdHJvcHkgQ29uZmlndXJhdGlvbiBmcm9tIGEgc2VyaWFsaXplZCBv
YmplY3QuCisgICAgICogQHBhcmFtIHNvdXJjZSAtIFNlcmlhbGl6ZWQgb2JqZWN0LgorICAgICAq
IEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB3ZSBhcmUgcGFyc2luZyBmb3IKKyAgICAg
KiBAcGFyYW0gcm9vdFVybCBEZWZpbmVzIHRoZSByb290VXJsIHRvIGxvYWQgZnJvbQorICAgICAq
LworICAgIFBCUkJSREZDb25maWd1cmF0aW9uLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChz
b3VyY2UsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFs
aXphdGlvbkhlbHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzOyB9LCBzb3Vy
Y2UsIHNjZW5lLCByb290VXJsKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmF1bHQgdmFs
dWUgdXNlZCBmb3IgdGhlIGVuZXJneSBjb25zZXJ2YXRpb24uCisgICAgICogVGhpcyBzaG91bGQg
b25seSBiZSBjaGFuZ2VkIHRvIGFkYXB0IHRvIHRoZSB0eXBlIG9mIHRleHR1cmUgaW4gc2NlbmUu
ZW52aXJvbm1lbnRCUkRGVGV4dHVyZS4KKyAgICAgKi8KKyAgICBQQlJCUkRGQ29uZmlndXJhdGlv
bi5ERUZBVUxUX1VTRV9FTkVSR1lfQ09OU0VSVkFUSU9OID0gdHJ1ZTsKKyAgICAvKioKKyAgICAg
KiBEZWZhdWx0IHZhbHVlIHVzZWQgZm9yIHRoZSBTbWl0aCBWaXNpYmlsaXR5IEhlaWdodCBDb3Jy
ZWxhdGVkIG1vZGUuCisgICAgICogVGhpcyBzaG91bGQgb25seSBiZSBjaGFuZ2VkIHRvIGFkYXB0
IHRvIHRoZSB0eXBlIG9mIHRleHR1cmUgaW4gc2NlbmUuZW52aXJvbm1lbnRCUkRGVGV4dHVyZS4K
KyAgICAgKi8KKyAgICBQQlJCUkRGQ29uZmlndXJhdGlvbi5ERUZBVUxUX1VTRV9TTUlUSF9WSVNJ
QklMSVRZX0hFSUdIVF9DT1JSRUxBVEVEID0gdHJ1ZTsKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0
IHZhbHVlIHVzZWQgZm9yIHRoZSBJQkwgZGlmZnVzZSBwYXJ0LgorICAgICAqIFRoaXMgY2FuIGhl
bHAgc3dpdGNoaW5nIGJhY2sgdG8gdGhlIHBvbHlub21pYWxzIG1vZGUgZ2xvYmFsbHkgd2hpY2gg
aXMgYSB0aW55IGJpdAorICAgICAqIGxlc3MgR1BVIGludGVuc2l2ZSBhdCB0aGUgZHJhd2JhY2sg
b2YgYSBsb3dlciBxdWFsaXR5LgorICAgICAqLworICAgIFBCUkJSREZDb25maWd1cmF0aW9uLkRF
RkFVTFRfVVNFX1NQSEVSSUNBTF9IQVJNT05JQ1MgPSB0cnVlOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgp
LAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzTWlzY0RpcnR5
IikKKyAgICBdLCBQQlJCUkRGQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ1c2VFbmVyZ3lDb25z
ZXJ2YXRpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1By
b3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzTWlzY0RpcnR5IikKKyAgICBdLCBQQlJCUkRG
Q29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ1c2VTbWl0aFZpc2liaWxpdHlIZWlnaHRDb3JyZWxh
dGVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0
eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc01pc2NEaXJ0eSIpCisgICAgXSwgUEJSQlJERkNvbmZp
Z3VyYXRpb24ucHJvdG90eXBlLCAidXNlU3BoZXJpY2FsSGFybW9uaWNzIiwgdm9pZCAwKTsKKyAg
ICByZXR1cm4gUEJSQlJERkNvbmZpZ3VyYXRpb247Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL01hdGVyaWFscy9QQlIvcGJyQmFzZU1hdGVyaWFsLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxz
L1BCUi9wYnJCYXNlTWF0ZXJpYWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBCUk1hdGVyaWFsRGVm
aW5lcywgUEJSQmFzZU1hdGVyaWFsICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBCUk1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUEJSTWF0ZXJpYWxE
ZWZpbmVzOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUkJhc2VNYXRlcmlhbCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gUEJSQmFzZU1hdGVyaWFsOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2RlY29yYXRv
cnMgKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvc21hcnRBcnJh
eSAqLyAiLi9NaXNjL3NtYXJ0QXJyYXkudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWlzY19icmRmVGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2JyZGZUZXh0dXJlVG9vbHMgKi8gIi4vTWlz
Yy9icmRmVGV4dHVyZVRvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52
ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWVzaGVzL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3BickNsZWFyQ29hdENvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGJyQ2xlYXJDb2F0Q29uZmlndXJh
dGlvbiAqLyAiLi9NYXRlcmlhbHMvUEJSL3BickNsZWFyQ29hdENvbmZpZ3VyYXRpb24udHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGJyQW5pc290cm9waWNDb25maWd1cmF0aW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bi
ckFuaXNvdHJvcGljQ29uZmlndXJhdGlvbiAqLyAiLi9NYXRlcmlhbHMvUEJSL3BickFuaXNvdHJv
cGljQ29uZmlndXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYnJCUkRG
Q29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vcGJyQlJERkNvbmZpZ3VyYXRpb24gKi8gIi4vTWF0ZXJpYWxzL1BCUi9w
YnJCUkRGQ29uZmlndXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYnJT
aGVlbkNvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL3BiclNoZWVuQ29uZmlndXJhdGlvbiAqLyAiLi9NYXRlcmlhbHMv
UEJSL3BiclNoZWVuQ29uZmlndXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9wYnJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGJyU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24g
Ki8gIi4vTWF0ZXJpYWxzL1BCUi9wYnJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5j
b2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxz
L2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gKi8gIi4vTWF0ZXJpYWxzL2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJp
YWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxEZWZpbmVz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTWF0ZXJpYWxzL21hdGVyaWFsRGVmaW5lcyAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWxE
ZWZpbmVzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19wdXNoTWF0
ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NYXRlcmlhbHMvcHVzaE1hdGVyaWFsICovICIuL01hdGVyaWFscy9wdXNoTWF0
ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFs
SGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyICovICIuL01hdGVyaWFscy9tYXRl
cmlhbEhlbHBlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVy
aWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21h
dGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9tYXRlcmlhbEZsYWdzICovICIuL01hdGVyaWFscy9tYXRlcmlhbEZsYWdz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
RW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19wYnJfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9TaGFkZXJzL3Bici5m
cmFnbWVudCAqLyAiLi9TaGFkZXJzL3Bici5mcmFnbWVudC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9TaGFkZXJzX3Bicl92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIz
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9TaGFkZXJzL3Bici52ZXJ0ZXggKi8g
Ii4vU2hhZGVycy9wYnIudmVydGV4LnRzIik7CisKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisKKworCisvKioKKyAqIE1hbmFnZXMgdGhlIGRlZmluZXMgZm9yIHRoZSBQ
QlIgTWF0ZXJpYWwuCisgKiBAaGlkZGVuCisgKi8KK3ZhciBQQlJNYXRlcmlhbERlZmluZXMgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUEJSTWF0ZXJpYWxEZWZpbmVzLCBfc3VwZXIp
OworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBQQlIgTWF0ZXJpYWwgZGVmaW5lcy4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBQQlJNYXRlcmlhbERlZmluZXMoKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLlBCUiA9
IHRydWU7CisgICAgICAgIF90aGlzLk1BSU5VVjEgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuTUFJ
TlVWMiA9IGZhbHNlOworICAgICAgICBfdGhpcy5VVjEgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMu
VVYyID0gZmFsc2U7CisgICAgICAgIF90aGlzLkFMQkVETyA9IGZhbHNlOworICAgICAgICBfdGhp
cy5BTEJFRE9ESVJFQ1RVViA9IDA7CisgICAgICAgIF90aGlzLlZFUlRFWENPTE9SID0gZmFsc2U7
CisgICAgICAgIF90aGlzLkFNQklFTlQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQU1CSUVOVERJ
UkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuQU1CSUVOVElOR1JBWVNDQUxFID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLk9QQUNJVFkgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVkVSVEVYQUxQSEEg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuT1BBQ0lUWURJUkVDVFVWID0gMDsKKyAgICAgICAgX3Ro
aXMuT1BBQ0lUWVJHQiA9IGZhbHNlOworICAgICAgICBfdGhpcy5BTFBIQVRFU1QgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuREVQVEhQUkVQQVNTID0gZmFsc2U7CisgICAgICAgIF90aGlzLkFMUEhB
QkxFTkQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQUxQSEFGUk9NQUxCRURPID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLkFMUEhBVEVTVFZBTFVFID0gIjAuNSI7CisgICAgICAgIF90aGlzLlNQRUNV
TEFST1ZFUkFMUEhBID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJBRElBTkNFT1ZFUkFMUEhBID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLkFMUEhBRlJFU05FTCA9IGZhbHNlOworICAgICAgICBfdGhp
cy5MSU5FQVJBTFBIQUZSRVNORUwgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUFJFTVVMVElQTFlB
TFBIQSA9IGZhbHNlOworICAgICAgICBfdGhpcy5FTUlTU0lWRSA9IGZhbHNlOworICAgICAgICBf
dGhpcy5FTUlTU0lWRURJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElWSVRZID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJVklUWURJUkVDVFVWID0gMDsKKyAgICAgICAg
X3RoaXMuU1BFQ1VMQVJURVJNID0gZmFsc2U7CisgICAgICAgIF90aGlzLk1JQ1JPU1VSRkFDRUZS
T01SRUZMRUNUSVZJVFlNQVAgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuTUlDUk9TVVJGQUNFQVVU
T01BVElDID0gZmFsc2U7CisgICAgICAgIF90aGlzLkxPREJBU0VETUlDUk9TRlVSQUNFID0gZmFs
c2U7CisgICAgICAgIF90aGlzLk1JQ1JPU1VSRkFDRU1BUCA9IGZhbHNlOworICAgICAgICBfdGhp
cy5NSUNST1NVUkZBQ0VNQVBESVJFQ1RVViA9IDA7CisgICAgICAgIF90aGlzLk1FVEFMTElDV09S
S0ZMT1cgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUk9VR0hORVNTU1RPUkVJTk1FVEFMTUFQQUxQ
SEEgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUk9VR0hORVNTU1RPUkVJTk1FVEFMTUFQR1JFRU4g
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuTUVUQUxMTkVTU1NUT1JFSU5NRVRBTE1BUEJMVUUgPSBm
YWxzZTsKKyAgICAgICAgX3RoaXMuQU9TVE9SRUlOTUVUQUxNQVBSRUQgPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuRU5WSVJPTk1FTlRCUkRGID0gZmFsc2U7CisgICAgICAgIF90aGlzLkVOVklST05N
RU5UQlJERl9SR0JEID0gZmFsc2U7CisgICAgICAgIF90aGlzLk5PUk1BTCA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5UQU5HRU5UID0gZmFsc2U7CisgICAgICAgIF90aGlzLkJVTVAgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuQlVNUERJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuT0JKRUNUU1BB
Q0VfTk9STUFMTUFQID0gZmFsc2U7CisgICAgICAgIF90aGlzLlBBUkFMTEFYID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLlBBUkFMTEFYT0NDTFVTSU9OID0gZmFsc2U7CisgICAgICAgIF90aGlzLk5P
Uk1BTFhZU0NBTEUgPSB0cnVlOworICAgICAgICBfdGhpcy5MSUdIVE1BUCA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5MSUdIVE1BUERJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuVVNFTElHSFRN
QVBBU1NIQURPV01BUCA9IGZhbHNlOworICAgICAgICBfdGhpcy5HQU1NQUxJR0hUTUFQID0gZmFs
c2U7CisgICAgICAgIF90aGlzLlJHQkRMSUdIVE1BUCA9IGZhbHNlOworICAgICAgICBfdGhpcy5S
RUZMRUNUSU9OID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05NQVBfM0QgPSBmYWxz
ZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF9TUEhFUklDQUwgPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuUkVGTEVDVElPTk1BUF9QTEFOQVIgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVG
TEVDVElPTk1BUF9DVUJJQyA9IGZhbHNlOworICAgICAgICBfdGhpcy5VU0VfTE9DQUxfUkVGTEVD
VElPTk1BUF9DVUJJQyA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX1BST0pF
Q1RJT04gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF9TS1lCT1ggPSBmYWxz
ZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF9TS1lCT1hfVFJBTlNGT1JNRUQgPSBmYWxz
ZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF9FWFBMSUNJVCA9IGZhbHNlOworICAgICAg
ICBfdGhpcy5SRUZMRUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxBUiA9IGZhbHNlOworICAgICAgICBf
dGhpcy5SRUZMRUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxBUl9GSVhFRCA9IGZhbHNlOworICAgICAg
ICBfdGhpcy5SRUZMRUNUSU9OTUFQX01JUlJPUkVERVFVSVJFQ1RBTkdVTEFSX0ZJWEVEID0gZmFs
c2U7CisgICAgICAgIF90aGlzLklOVkVSVENVQklDTUFQID0gZmFsc2U7CisgICAgICAgIF90aGlz
LlVTRVNQSEVSSUNBTEZST01SRUZMRUNUSU9OTUFQID0gZmFsc2U7CisgICAgICAgIF90aGlzLlVT
RUlSUkFESUFOQ0VNQVAgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuU1BIRVJJQ0FMX0hBUk1PTklD
UyA9IGZhbHNlOworICAgICAgICBfdGhpcy5VU0VTUEhFUklDQUxJTlZFUlRFWCA9IGZhbHNlOwor
ICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQX09QUE9TSVRFWiA9IGZhbHNlOworICAgICAgICBf
dGhpcy5MT0RJTlJFRkxFQ1RJT05BTFBIQSA9IGZhbHNlOworICAgICAgICBfdGhpcy5HQU1NQVJF
RkxFQ1RJT04gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkdCRFJFRkxFQ1RJT04gPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuTElORUFSU1BFQ1VMQVJSRUZMRUNUSU9OID0gZmFsc2U7CisgICAgICAg
IF90aGlzLlJBRElBTkNFT0NDTFVTSU9OID0gZmFsc2U7CisgICAgICAgIF90aGlzLkhPUklaT05P
Q0NMVVNJT04gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuSU5TVEFOQ0VTID0gZmFsc2U7CisgICAg
ICAgIF90aGlzLk5VTV9CT05FX0lORkxVRU5DRVJTID0gMDsKKyAgICAgICAgX3RoaXMuQm9uZXNQ
ZXJNZXNoID0gMDsKKyAgICAgICAgX3RoaXMuQk9ORVRFWFRVUkUgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuTk9OVU5JRk9STVNDQUxJTkcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuTU9SUEhUQVJH
RVRTID0gZmFsc2U7CisgICAgICAgIF90aGlzLk1PUlBIVEFSR0VUU19OT1JNQUwgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuTU9SUEhUQVJHRVRTX1RBTkdFTlQgPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuTU9SUEhUQVJHRVRTX1VWID0gZmFsc2U7CisgICAgICAgIF90aGlzLk5VTV9NT1JQSF9JTkZM
VUVOQ0VSUyA9IDA7CisgICAgICAgIF90aGlzLklNQUdFUFJPQ0VTU0lORyA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5WSUdORVRURSA9IGZhbHNlOworICAgICAgICBfdGhpcy5WSUdORVRURUJMRU5E
TU9ERU1VTFRJUExZID0gZmFsc2U7CisgICAgICAgIF90aGlzLlZJR05FVFRFQkxFTkRNT0RFT1BB
UVVFID0gZmFsc2U7CisgICAgICAgIF90aGlzLlRPTkVNQVBQSU5HID0gZmFsc2U7CisgICAgICAg
IF90aGlzLlRPTkVNQVBQSU5HX0FDRVMgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ09OVFJBU1Qg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ09MT1JDVVJWRVMgPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuQ09MT1JHUkFESU5HID0gZmFsc2U7CisgICAgICAgIF90aGlzLkNPTE9SR1JBRElORzNEID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLlNBTVBMRVIzREdSRUVOREVQVEggPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuU0FNUExFUjNEQkdSTUFQID0gZmFsc2U7CisgICAgICAgIF90aGlzLklNQUdFUFJP
Q0VTU0lOR1BPU1RQUk9DRVNTID0gZmFsc2U7CisgICAgICAgIF90aGlzLkVYUE9TVVJFID0gZmFs
c2U7CisgICAgICAgIF90aGlzLk1VTFRJVklFVyA9IGZhbHNlOworICAgICAgICBfdGhpcy5VU0VQ
SFlTSUNBTExJR0hURkFMTE9GRiA9IGZhbHNlOworICAgICAgICBfdGhpcy5VU0VHTFRGTElHSFRG
QUxMT0ZGID0gZmFsc2U7CisgICAgICAgIF90aGlzLlRXT1NJREVETElHSFRJTkcgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuU0hBRE9XRkxPQVQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ0xJUFBM
QU5FID0gZmFsc2U7CisgICAgICAgIF90aGlzLkNMSVBQTEFORTIgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuQ0xJUFBMQU5FMyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DTElQUExBTkU0ID0gZmFs
c2U7CisgICAgICAgIF90aGlzLlBPSU5UU0laRSA9IGZhbHNlOworICAgICAgICBfdGhpcy5GT0cg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuTE9HQVJJVEhNSUNERVBUSCA9IGZhbHNlOworICAgICAg
ICBfdGhpcy5GT1JDRU5PUk1BTEZPUldBUkQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuU1BFQ1VM
QVJBQSA9IGZhbHNlOworICAgICAgICBfdGhpcy5DTEVBUkNPQVQgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuQ0xFQVJDT0FUX0RFRkFVTFRJT1IgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ0xFQVJD
T0FUX1RFWFRVUkUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ0xFQVJDT0FUX1RFWFRVUkVESVJF
Q1RVViA9IDA7CisgICAgICAgIF90aGlzLkNMRUFSQ09BVF9CVU1QID0gZmFsc2U7CisgICAgICAg
IF90aGlzLkNMRUFSQ09BVF9CVU1QRElSRUNUVVYgPSAwOworICAgICAgICBfdGhpcy5DTEVBUkNP
QVRfVElOVCA9IGZhbHNlOworICAgICAgICBfdGhpcy5DTEVBUkNPQVRfVElOVF9URVhUVVJFID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLkNMRUFSQ09BVF9USU5UX1RFWFRVUkVESVJFQ1RVViA9IDA7
CisgICAgICAgIF90aGlzLkFOSVNPVFJPUElDID0gZmFsc2U7CisgICAgICAgIF90aGlzLkFOSVNP
VFJPUElDX1RFWFRVUkUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQU5JU09UUk9QSUNfVEVYVFVS
RURJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuQlJERl9WX0hFSUdIVF9DT1JSRUxBVEVEID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLk1TX0JSREZfRU5FUkdZX0NPTlNFUlZBVElPTiA9IGZhbHNl
OworICAgICAgICBfdGhpcy5TSEVFTiA9IGZhbHNlOworICAgICAgICBfdGhpcy5TSEVFTl9URVhU
VVJFID0gZmFsc2U7CisgICAgICAgIF90aGlzLlNIRUVOX1RFWFRVUkVESVJFQ1RVViA9IDA7Cisg
ICAgICAgIF90aGlzLlNIRUVOX0xJTktXSVRIQUxCRURPID0gZmFsc2U7CisgICAgICAgIF90aGlz
LlNVQlNVUkZBQ0UgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuU1NfUkVGUkFDVElPTiA9IGZhbHNl
OworICAgICAgICBfdGhpcy5TU19UUkFOU0xVQ0VOQ1kgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMu
U1NfU0NBVEVSUklORyA9IGZhbHNlOworICAgICAgICBfdGhpcy5TU19USElDS05FU1NBTkRNQVNL
X1RFWFRVUkUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuU1NfVEhJQ0tORVNTQU5ETUFTS19URVhU
VVJFRElSRUNUVVYgPSAwOworICAgICAgICBfdGhpcy5TU19SRUZSQUNUSU9OTUFQXzNEID0gZmFs
c2U7CisgICAgICAgIF90aGlzLlNTX1JFRlJBQ1RJT05NQVBfT1BQT1NJVEVaID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLlNTX0xPRElOUkVGUkFDVElPTkFMUEhBID0gZmFsc2U7CisgICAgICAgIF90
aGlzLlNTX0dBTU1BUkVGUkFDVElPTiA9IGZhbHNlOworICAgICAgICBfdGhpcy5TU19SR0JEUkVG
UkFDVElPTiA9IGZhbHNlOworICAgICAgICBfdGhpcy5TU19MSU5FQVJTUEVDVUxBUlJFRlJBQ1RJ
T04gPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuU1NfTElOS1JFRlJBQ1RJT05UT1RSQU5TUEFSRU5D
WSA9IGZhbHNlOworICAgICAgICBfdGhpcy5TU19NQVNLX0ZST01fVEhJQ0tORVNTX1RFWFRVUkUg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVU5MSVQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuREVC
VUdNT0RFID0gMDsKKyAgICAgICAgX3RoaXMucmVidWlsZCgpOworICAgICAgICByZXR1cm4gX3Ro
aXM7CisgICAgfQorICAgIC8qKgorICAgICAqIFJlc2V0cyB0aGUgUEJSIE1hdGVyaWFsIGRlZmlu
ZXMuCisgICAgICovCisgICAgUEJSTWF0ZXJpYWxEZWZpbmVzLnByb3RvdHlwZS5yZXNldCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpOwor
ICAgICAgICB0aGlzLkFMUEhBVEVTVFZBTFVFID0gIjAuNSI7CisgICAgICAgIHRoaXMuUEJSID0g
dHJ1ZTsKKyAgICB9OworICAgIHJldHVybiBQQlJNYXRlcmlhbERlZmluZXM7Cit9KF9NYXRlcmlh
bHNfbWF0ZXJpYWxEZWZpbmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJNYXRlcmlh
bERlZmluZXMiXSkpOworCisvKioKKyAqIFRoZSBQaHlzaWNhbGx5IGJhc2VkIG1hdGVyaWFsIGJh
c2UgY2xhc3Mgb2YgQkpTLgorICoKKyAqIFRoaXMgb2ZmZXJzIHRoZSBtYWluIGZlYXR1cmVzIG9m
IGEgc3RhbmRhcmQgUEJSIG1hdGVyaWFsLgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFz
ZSByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiA6CisgKiBodHRwczovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9waHlzaWNhbGx5X2Jhc2VkX3JlbmRlcmluZworICovCit2YXIgUEJSQmFzZU1h
dGVyaWFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFBCUkJhc2VNYXRlcmlhbCwg
X3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgUEJSTWF0ZXJpYWwg
aW5zdGFuY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbWF0ZXJpYWwgbmFtZQor
ICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhlIG1hdGVyaWFsIHdpbGwgYmUgdXNlIGlu
LgorICAgICAqLworICAgIGZ1bmN0aW9uIFBCUkJhc2VNYXRlcmlhbChuYW1lLCBzY2VuZSkgewor
ICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBzY2VuZSkgfHwgdGhp
czsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVuc2l0eSBvZiB0aGUgZGlyZWN0IGxpZ2h0
cyBlLmcuIHRoZSBmb3VyIGxpZ2h0cyBhdmFpbGFibGUgaW4geW91ciBzY2VuZS4KKyAgICAgICAg
ICogVGhpcyBpbXBhY3RzIGJvdGggdGhlIGRpcmVjdCBkaWZmdXNlIGFuZCBzcGVjdWxhciBoaWdo
bGlnaHRzLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2RpcmVjdEludGVuc2l0eSA9IDEu
MDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVuc2l0eSBvZiB0aGUgZW1pc3NpdmUgcGFy
dCBvZiB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqIFRoaXMgaGVscHMgY29udHJvbGxpbmcgdGhl
IGVtaXNzaXZlIGVmZmVjdCB3aXRob3V0IG1vZGlmeWluZyB0aGUgZW1pc3NpdmUgY29sb3IuCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5fZW1pc3NpdmVJbnRlbnNpdHkgPSAxLjA7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBJbnRlbnNpdHkgb2YgdGhlIGVudmlyb25tZW50IGUuZy4gaG93
IG11Y2ggdGhlIGVudmlyb25tZW50IHdpbGwgbGlnaHQgdGhlIG9iamVjdAorICAgICAgICAgKiBl
aXRoZXIgdGhyb3VnaCBoYXJtb25pY3MgZm9yIHJvdWdoIG1hdGVyaWFsIG9yIHRocm91Z2ggdGhl
IHJlZmVsY3Rpb24gZm9yIHNoaW55IG9uZXMuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5f
ZW52aXJvbm1lbnRJbnRlbnNpdHkgPSAxLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlz
IGlzIGEgc3BlY2lhbCBjb250cm9sIGFsbG93aW5nIHRoZSByZWR1Y3Rpb24gb2YgdGhlIHNwZWN1
bGFyIGhpZ2hsaWdodHMgY29taW5nIGZyb20gdGhlCisgICAgICAgICAqIGZvdXIgbGlnaHRzIG9m
IHRoZSBzY2VuZS4gVGhvc2UgaGlnaGxpZ2h0cyBtYXkgbm90IGJlIG5lZWRlZCBpbiBmdWxsIGVu
dmlyb25tZW50IGxpZ2h0aW5nLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3NwZWN1bGFy
SW50ZW5zaXR5ID0gMS4wOworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBzdG9yZXMgdGhl
IGRpcmVjdCwgZW1pc3NpdmUsIGVudmlyb25tZW50LCBhbmQgc3BlY3VsYXIgbGlnaHQgaW50ZW5z
aXRpZXMgaW50byBhIFZlY3RvcjQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fbGlnaHRp
bmdJbmZvcyA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfX1siVmVjdG9yNCJdKF90aGlzLl9kaXJlY3RJbnRlbnNpdHksIF90aGlzLl9lbWlzc2l2ZUlu
dGVuc2l0eSwgX3RoaXMuX2Vudmlyb25tZW50SW50ZW5zaXR5LCBfdGhpcy5fc3BlY3VsYXJJbnRl
bnNpdHkpOworICAgICAgICAvKioKKyAgICAgICAgICogRGVidWcgQ29udHJvbCBhbGxvd2luZyBk
aXNhYmxpbmcgdGhlIGJ1bXAgbWFwIG9uIHRoaXMgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5fZGlzYWJsZUJ1bXBNYXAgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEFLQSBEaWZmdXNlIFRleHR1cmUgaW4gc3RhbmRhcmQgbm9tZW5jbGF0dXJlLgorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMuX2FsYmVkb1RleHR1cmUgPSBudWxsOworICAgICAgICAvKioK
KyAgICAgICAgICogQUtBIE9jY2x1c2lvbiBUZXh0dXJlIGluIG90aGVyIG5vbWVuY2xhdHVyZS4K
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9hbWJpZW50VGV4dHVyZSA9IG51bGw7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBBS0EgT2NjbHVzaW9uIFRleHR1cmUgSW50ZW5zaXR5IGluIG90
aGVyIG5vbWVuY2xhdHVyZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9hbWJpZW50VGV4
dHVyZVN0cmVuZ3RoID0gMS4wOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBob3cg
bXVjaCB0aGUgQU8gbWFwIGlzIG9jY2x1ZGluZyB0aGUgYW5hbHl0aWNhbCBsaWdodHMgKHBvaW50
IHNwb3QuLi4pLgorICAgICAgICAgKiAxIG1lYW5zIGl0IGNvbXBsZXRlbHkgb2NjbHVkZXMgaXQK
KyAgICAgICAgICogMCBtZWFuIGl0IGhhcyBubyBpbXBhY3QKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLl9hbWJpZW50VGV4dHVyZUltcGFjdE9uQW5hbHl0aWNhbExpZ2h0cyA9IFBCUkJhc2VN
YXRlcmlhbC5ERUZBVUxUX0FPX09OX0FOQUxZVElDQUxfTElHSFRTOworICAgICAgICAvKioKKyAg
ICAgICAgICogU3RvcmVzIHRoZSBhbHBoYSB2YWx1ZXMgaW4gYSB0ZXh0dXJlLgorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuX29wYWNpdHlUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFN0b3JlcyB0aGUgcmVmbGVjdGlvbiB2YWx1ZXMgaW4gYSB0ZXh0dXJlLgorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3JlZmxlY3Rpb25UZXh0dXJlID0gbnVsbDsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgZW1pc3NpdmUgdmFsdWVzIGluIGEgdGV4dHVy
ZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9lbWlzc2l2ZVRleHR1cmUgPSBudWxsOwor
ICAgICAgICAvKioKKyAgICAgICAgICogQUtBIFNwZWN1bGFyIHRleHR1cmUgaW4gb3RoZXIgbm9t
ZW5jbGF0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3JlZmxlY3Rpdml0eVRleHR1
cmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogVXNlZCB0byBzd2l0Y2ggZnJvbSBz
cGVjdWxhci9nbG9zc2luZXNzIHRvIG1ldGFsbGljL3JvdWdobmVzcyB3b3JrZmxvdy4KKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLl9tZXRhbGxpY1RleHR1cmUgPSBudWxsOworICAgICAgICAv
KioKKyAgICAgICAgICogU3BlY2lmaWVzIHRoZSBtZXRhbGxpYyBzY2FsYXIgb2YgdGhlIG1ldGFs
bGljL3JvdWdobmVzcyB3b3JrZmxvdy4KKyAgICAgICAgICogQ2FuIGFsc28gYmUgdXNlZCB0byBz
Y2FsZSB0aGUgbWV0YWxuZXNzIHZhbHVlcyBvZiB0aGUgbWV0YWxsaWMgdGV4dHVyZS4KKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLl9tZXRhbGxpYyA9IG51bGw7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTcGVjaWZpZXMgdGhlIHJvdWdobmVzcyBzY2FsYXIgb2YgdGhlIG1ldGFsbGljL3Jv
dWdobmVzcyB3b3JrZmxvdy4KKyAgICAgICAgICogQ2FuIGFsc28gYmUgdXNlZCB0byBzY2FsZSB0
aGUgcm91Z2huZXNzIHZhbHVlcyBvZiB0aGUgbWV0YWxsaWMgdGV4dHVyZS4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLl9yb3VnaG5lc3MgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAg
ICogVXNlZCB0byBlbmFibGUgcm91Z2huZXNzL2dsb3NzaW5lc3MgZmV0Y2ggZnJvbSBhIHNlcGFy
YXRlIGNoYW5uZWwgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IG1vZGUuCisgICAgICAgICAqIEdy
YXkgU2NhbGUgcmVwcmVzZW50cyByb3VnaG5lc3MgaW4gbWV0YWxsaWMgbW9kZSBhbmQgZ2xvc3Np
bmVzcyBpbiBzcGVjdWxhciBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX21pY3Jv
U3VyZmFjZVRleHR1cmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHN1
cmZhY2Ugbm9ybWFsIGRhdGEgdXNlZCB0byBkaXNwbGFjZSBhIG1lc2ggaW4gYSB0ZXh0dXJlLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2J1bXBUZXh0dXJlID0gbnVsbDsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgcHJlLWNhbGN1bGF0ZWQgbGlnaHQgaW5mb3JtYXRp
b24gb2YgYSBtZXNoIGluIGEgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9s
aWdodG1hcFRleHR1cmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9y
IG9mIGEgbWF0ZXJpYWwgaW4gYW1iaWVudCBsaWdodGluZy4KKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLl9hbWJpZW50Q29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEzX19bIkNvbG9yMyJdKDAsIDAsIDApOworICAgICAgICAvKioKKyAgICAg
ICAgICogQUtBIERpZmZ1c2UgQ29sb3IgaW4gb3RoZXIgbm9tZW5jbGF0dXJlLgorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuX2FsYmVkb0NvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJDb2xvcjMiXSgxLCAxLCAxKTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEFLQSBTcGVjdWxhciBDb2xvciBpbiBvdGhlciBub21lbmNsYXR1cmUu
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fcmVmbGVjdGl2aXR5Q29sb3IgPSBuZXcgX01h
dGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkNvbG9yMyJdKDEs
IDEsIDEpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIGFwcGxpZWQgd2hlbiBs
aWdodCBpcyByZWZsZWN0ZWQgZnJvbSBhIG1hdGVyaWFsLgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuX3JlZmxlY3Rpb25Db2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTNfX1siQ29sb3IzIl0oMSwgMSwgMSk7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBUaGUgY29sb3IgYXBwbGllZCB3aGVuIGxpZ2h0IGlzIGVtaXR0ZWQgZnJvbSBhIG1h
dGVyaWFsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2VtaXNzaXZlQ29sb3IgPSBuZXcg
X01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkNvbG9yMyJd
KDAsIDAsIDApOworICAgICAgICAvKioKKyAgICAgICAgICogQUtBIEdsb3NzaW5lc3MgaW4gb3Ro
ZXIgbm9tZW5jbGF0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX21pY3JvU3VyZmFj
ZSA9IDAuOTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBtYXRl
cmlhbCB3aWxsIHVzZSB0aGUgbGlnaHQgbWFwIGFzIGEgc2hvdyBtYXAuCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5fdXNlTGlnaHRtYXBBc1NoYWRvd21hcCA9IGZhbHNlOworICAgICAgICAv
KioKKyAgICAgICAgICogVGhpcyBwYXJhbWV0ZXJzIHdpbGwgZW5hYmxlL2Rpc2FibGUgSG9yaXpv
biBvY2NsdXNpb24gdG8gcHJldmVudCBub3JtYWwgbWFwcyB0byBsb29rIHNoaW55IHdoZW4gdGhl
IG5vcm1hbAorICAgICAgICAgKiBtYWtlcyB0aGUgcmVmbGVjdCB2ZWN0b3IgZmFjZSB0aGUgbW9k
ZWwgKHVuZGVyIGhvcml6b24pLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3VzZUhvcml6
b25PY2NsdXNpb24gPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBwYXJhbWV0
ZXJzIHdpbGwgZW5hYmxlL2Rpc2FibGUgcmFkaWFuY2Ugb2NjbHVzaW9uIGJ5IHByZXZlbnRpbmcg
dGhlIHJhZGlhbmNlIHRvIGxpdAorICAgICAgICAgKiB0b28gbXVjaCB0aGUgYXJlYSByZWx5aW5n
IG9uIGFtYmllbnQgdGV4dHVyZSB0byBkZWZpbmUgdGhlaXIgYW1iaWVudCBvY2NsdXNpb24uCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5fdXNlUmFkaWFuY2VPY2NsdXNpb24gPSB0cnVlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGFscGhhIGlzIGNvbWlu
ZyBmb3JtIHRoZSBhbGJlZG8gY2hhbm5lbCBhbHBoYSBjaGFubmVsIGZvciBhbHBoYSBibGVuZGlu
Zy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl91c2VBbHBoYUZyb21BbGJlZG9UZXh0dXJl
ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgbWF0
ZXJpYWwgd2lsbCBrZWVwcyB0aGUgc3BlY3VsYXIgaGlnaGxpZ2h0cyBvdmVyIGEgdHJhbnNwYXJl
bnQgc3VyZmFjZSAob25seSB0aGUgbW9zdCBsaW11bm91cyBvbmVzKS4KKyAgICAgICAgICogQSBj
YXIgZ2xhc3MgaXMgYSBnb29kIGV4ZW1wbGUgb2YgdGhhdC4gV2hlbiBzdW4gcmVmbGVjdHMgb24g
aXQgeW91IGNhbiBub3Qgc2VlIHdoYXQgaXMgYmVoaW5kLgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuX3VzZVNwZWN1bGFyT3ZlckFscGhhID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFNwZWNpZmllcyBpZiB0aGUgcmVmbGVjdGl2aXR5IHRleHR1cmUgY29udGFpbnMgdGhlIGds
b3NzaW5lc3MgaW5mb3JtYXRpb24gaW4gaXRzIGFscGhhIGNoYW5uZWwuCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5fdXNlTWljcm9TdXJmYWNlRnJvbVJlZmxlY3Rpdml0eU1hcEFscGhhID0g
ZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIG1ldGFsbGlj
IHRleHR1cmUgY29udGFpbnMgdGhlIHJvdWdobmVzcyBpbmZvcm1hdGlvbiBpbiBpdHMgYWxwaGEg
Y2hhbm5lbC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl91c2VSb3VnaG5lc3NGcm9tTWV0
YWxsaWNUZXh0dXJlQWxwaGEgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lm
aWVzIGlmIHRoZSBtZXRhbGxpYyB0ZXh0dXJlIGNvbnRhaW5zIHRoZSByb3VnaG5lc3MgaW5mb3Jt
YXRpb24gaW4gaXRzIGdyZWVuIGNoYW5uZWwuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5f
dXNlUm91Z2huZXNzRnJvbU1ldGFsbGljVGV4dHVyZUdyZWVuID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIG1ldGFsbGljIHRleHR1cmUgY29udGFpbnMg
dGhlIG1ldGFsbG5lc3MgaW5mb3JtYXRpb24gaW4gaXRzIGJsdWUgY2hhbm5lbC4KKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLl91c2VNZXRhbGxuZXNzRnJvbU1ldGFsbGljVGV4dHVyZUJsdWUg
PSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbWV0YWxs
aWMgdGV4dHVyZSBjb250YWlucyB0aGUgYW1iaWVudCBvY2NsdXNpb24gaW5mb3JtYXRpb24gaW4g
aXRzIHJlZCBjaGFubmVsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3VzZUFtYmllbnRP
Y2NsdXNpb25Gcm9tTWV0YWxsaWNUZXh0dXJlUmVkID0gZmFsc2U7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGFtYmllbnQgdGV4dHVyZSBjb250YWlucyB0aGUgYW1i
aWVudCBvY2NsdXNpb24gaW5mb3JtYXRpb24gaW4gaXRzIHJlZCBjaGFubmVsIG9ubHkuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5fdXNlQW1iaWVudEluR3JheVNjYWxlID0gZmFsc2U7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBJbiBjYXNlIHRoZSByZWZsZWN0aXZpdHkgbWFwIGRvZXMg
bm90IGNvbnRhaW4gdGhlIG1pY3Jvc3VyZmFjZSBpbmZvcm1hdGlvbiBpbiBpdHMgYWxwaGEgY2hh
bm5lbCwKKyAgICAgICAgICogVGhlIG1hdGVyaWFsIHdpbGwgdHJ5IHRvIGluZmVyIHdoYXQgZ2xv
c3NpbmVzcyBlYWNoIHBpeGVsIHNob3VsZCBiZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlz
Ll91c2VBdXRvTWljcm9TdXJmYWNlRnJvbVJlZmxlY3Rpdml0eU1hcCA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgIGZhbGxvZmYgdHlwZSB1c2VkIGluIHRoaXMg
bWF0ZXJpYWwuCisgICAgICAgICAqIEl0IGJ5IGRlZmF1bHQgaXMgUGh5c2ljYWwuCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5fbGlnaHRGYWxsb2ZmID0gUEJSQmFzZU1hdGVyaWFsLkxJR0hU
RkFMTE9GRl9QSFlTSUNBTDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyB0aGF0
IHRoZSBtYXRlcmlhbCB3aWxsIGtlZXBzIHRoZSByZWZsZWN0aW9uIGhpZ2hsaWdodHMgb3ZlciBh
IHRyYW5zcGFyZW50IHN1cmZhY2UgKG9ubHkgdGhlIG1vc3QgbGltdW5vdXMgb25lcykuCisgICAg
ICAgICAqIEEgY2FyIGdsYXNzIGlzIGEgZ29vZCBleGVtcGxlIG9mIHRoYXQuIFdoZW4gdGhlIHN0
cmVldCBsaWdodHMgcmVmbGVjdHMgb24gaXQgeW91IGNhbiBub3Qgc2VlIHdoYXQgaXMgYmVoaW5k
LgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3VzZVJhZGlhbmNlT3ZlckFscGhhID0gdHJ1
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFsbG93cyB1c2luZyBhbiBvYmplY3Qgc3BhY2Ug
bm9ybWFsIG1hcCAoaW5zdGVhZCBvZiB0YW5nZW50IHNwYWNlKS4KKyAgICAgICAgICovCisgICAg
ICAgIF90aGlzLl91c2VPYmplY3RTcGFjZU5vcm1hbE1hcCA9IGZhbHNlOworICAgICAgICAvKioK
KyAgICAgICAgICogQWxsb3dzIHVzaW5nIHRoZSBidW1wIG1hcCBpbiBwYXJhbGxheCBtb2RlLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3VzZVBhcmFsbGF4ID0gZmFsc2U7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBBbGxvd3MgdXNpbmcgdGhlIGJ1bXAgbWFwIGluIHBhcmFsbGF4IG9j
Y2x1c2lvbiBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3VzZVBhcmFsbGF4T2Nj
bHVzaW9uID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBDb250cm9scyB0aGUgc2Nh
bGUgYmlhcyBvZiB0aGUgcGFyYWxsYXggbW9kZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlz
Ll9wYXJhbGxheFNjYWxlQmlhcyA9IDAuMDU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBz
ZXRzIHRvIHRydWUsIGRpc2FibGVzIGFsbCB0aGUgbGlnaHRzIGFmZmVjdGluZyB0aGUgbWF0ZXJp
YWwuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fZGlzYWJsZUxpZ2h0aW5nID0gZmFsc2U7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBOdW1iZXIgb2YgU2ltdWx0YW5lb3VzIGxpZ2h0cyBh
bGxvd2VkIG9uIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9tYXhT
aW11bHRhbmVvdXNMaWdodHMgPSA0OworICAgICAgICAvKioKKyAgICAgICAgICogSWYgc2V0cyB0
byB0cnVlLCB4IGNvbXBvbmVudCBvZiBub3JtYWwgbWFwIHZhbHVlIHdpbGwgYmUgaW52ZXJ0ZWQg
KHggPSAxLjAgLSB4KS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9pbnZlcnROb3JtYWxN
YXBYID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBzZXRzIHRvIHRydWUsIHkg
Y29tcG9uZW50IG9mIG5vcm1hbCBtYXAgdmFsdWUgd2lsbCBiZSBpbnZlcnRlZCAoeSA9IDEuMCAt
IHkpLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2ludmVydE5vcm1hbE1hcFkgPSBmYWxz
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHNldHMgdG8gdHJ1ZSBhbmQgYmFja2ZhY2VD
dWxsaW5nIGlzIGZhbHNlLCBub3JtYWxzIHdpbGwgYmUgZmxpcHBlZCBvbiB0aGUgYmFja3NpZGUu
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fdHdvU2lkZWRMaWdodGluZyA9IGZhbHNlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgYWxwaGEgbGltaXRzIGluIGFscGhh
IHRlc3QgbW9kZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9hbHBoYUN1dE9mZiA9IDAu
NDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuZm9yY2VzIGFscGhhIHRlc3QgaW4gb3BhcXVl
IG9yIGJsZW5kIG1vZGUgaW4gb3JkZXIgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2VzIG9mIHNv
bWUgc2l0dWF0aW9ucy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9mb3JjZUFscGhhVGVz
dCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogQSBmcmVzbmVsIGlzIGFwcGxpZWQg
dG8gdGhlIGFscGhhIG9mIHRoZSBtb2RlbCB0byBlbnN1cmUgZ3JhemluZyBhbmdsZXMgZWRnZXMg
YXJlIG5vdCBhbHBoYSB0ZXN0ZWQuCisgICAgICAgICAqIEFuZC9PciBvY2NsdWRlIHRoZSBibGVu
ZGVkIHBhcnQuIChhbHBoYSBpcyBjb252ZXJ0ZWQgdG8gZ2FtbWEgdG8gY29tcHV0ZSB0aGUgZnJl
c25lbCkKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl91c2VBbHBoYUZyZXNuZWwgPSBmYWxz
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgZnJlc25lbCBpcyBhcHBsaWVkIHRvIHRoZSBh
bHBoYSBvZiB0aGUgbW9kZWwgdG8gZW5zdXJlIGdyYXppbmcgYW5nbGVzIGVkZ2VzIGFyZSBub3Qg
YWxwaGEgdGVzdGVkLgorICAgICAgICAgKiBBbmQvT3Igb2NjbHVkZSB0aGUgYmxlbmRlZCBwYXJ0
LiAoYWxwaGEgc3RheXMgbGluZWFyIHRvIGNvbXB1dGUgdGhlIGZyZXNuZWwpCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5fdXNlTGluZWFyQWxwaGFGcmVzbmVsID0gZmFsc2U7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBUaGUgdHJhbnNwYXJlbmN5IG1vZGUgb2YgdGhlIG1hdGVyaWFsLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3RyYW5zcGFyZW5jeU1vZGUgPSBudWxsOworICAg
ICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIHRoZSBlbnZpcm9ubWVudCBCUkRGIHRleHR1
cmUgdXNlZCB0byBjb21wdXQgdGhlIHNjYWxlIGFuZCBvZmZzZXQgcm91Z2huZXNzIHZhbHVlcwor
ICAgICAgICAgKiBmcm9tIGNvcyB0aGV0YXYgYW5kIHJvdWdobmVzczoKKyAgICAgICAgICogaHR0
cDovL2Jsb2cuc2VsZnNoYWRvdy5jb20vcHVibGljYXRpb25zL3MyMDEzLXNoYWRpbmctY291cnNl
L2thcmlzL3MyMDEzX3Bic19lcGljX25vdGVzX3YyLnBkZgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuX2Vudmlyb25tZW50QlJERlRleHR1cmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAg
ICAgICogRm9yY2UgdGhlIHNoYWRlciB0byBjb21wdXRlIGlycmFkaWFuY2UgaW4gdGhlIGZyYWdt
ZW50IHNoYWRlciBpbiBvcmRlciB0byB0YWtlIGJ1bXAgaW4gYWNjb3VudC4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLl9mb3JjZUlycmFkaWFuY2VJbkZyYWdtZW50ID0gZmFsc2U7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBGb3JjZSBub3JtYWwgdG8gZmFjZSBhd2F5IGZyb20gZmFjZS4K
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9mb3JjZU5vcm1hbEZvcndhcmQgPSBmYWxzZTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEVuYWJsZXMgc3BlY3VsYXIgYW50aSBhbGlhc2luZyBp
biB0aGUgUEJSIHNoYWRlci4KKyAgICAgICAgICogSXQgd2lsbCBib3RoIGludGVyYWN0cyBvbiB0
aGUgR2VvbWV0cnkgZm9yIGFuYWx5dGljYWwgYW5kIElCTCBsaWdodGluZy4KKyAgICAgICAgICog
SXQgYWxzbyBwcmVmaWx0ZXIgdGhlIHJvdWdobmVzcyBtYXAgYmFzZWQgb24gdGhlIGJ1bXAgdmFs
dWVzLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2VuYWJsZVNwZWN1bGFyQW50aUFsaWFz
aW5nID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBLZWVwIHRyYWNrIG9mIHRoZSBp
bWFnZSBwcm9jZXNzaW5nIG9ic2VydmVyIHRvIGFsbG93IGRpc3Bvc2UgYW5kIHJlcGxhY2UuCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5faW1hZ2VQcm9jZXNzaW5nT2JzZXJ2ZXIgPSBudWxs
OworICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHRoZSBhdmFpbGFibGUgcmVuZGVyIHRh
cmdldHMuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fcmVuZGVyVGFyZ2V0cyA9IG5ldyBf
TWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlNtYXJ0QXJyYXki
XSgxNik7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBnbG9iYWwgYW1iaWVudCBj
b2xvciBmb3IgdGhlIG1hdGVyaWFsIHVzZWQgaW4gbGlnaHRpbmcgY2FsY3VsYXRpb25zLgorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2dsb2JhbEFtYmllbnRDb2xvciA9IG5ldyBfTWF0aHNf
bWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siQ29sb3IzIl0oMCwgMCwg
MCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGVzIHRoZSB1c2Ugb2YgbG9nYXJpdGht
aWMgZGVwdGggYnVmZmVycywgd2hpY2ggaXMgZ29vZCBmb3Igd2lkZSBkZXB0aCBidWZmZXJzLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3VzZUxvZ2FyaXRobWljRGVwdGggPSBmYWxzZTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHNldCB0byB0cnVlLCBubyBsaWdodGluZyBjYWxj
dWxhdGlvbnMgd2lsbCBiZSBhcHBsaWVkLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX3Vu
bGl0ID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9kZWJ1Z01vZGUgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKiBUaGlzIGlzIHJlc2VydmVkIGZvciB0aGUg
aW5zcGVjdG9yLgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBtYXRlcmlhbCBkZWJ1ZyBtb2RlLgor
ICAgICAgICAgKiBJdCBoZWxwcyBzZWVpbmcgb25seSBzb21lIGNvbXBvbmVudHMgb2YgdGhlIG1h
dGVyaWFsIHdoaWxlIHRyb3VibGVzaG9vdGluZy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LmRlYnVnTW9kZSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAg
ICAqIFRoaXMgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBpbnNwZWN0b3IuCisgICAgICAgICAqIFNwZWNp
ZnkgZnJvbSB3aGVyZSBvbiBzY3JlZW4gdGhlIGRlYnVnIG1vZGUgc2hvdWxkIHN0YXJ0LgorICAg
ICAgICAgKiBUaGUgdmFsdWUgZ29lcyBmcm9tIC0xIChmdWxsIHNjcmVlbikgdG8gMSAobm90IHZp
c2libGUpCisgICAgICAgICAqIEl0IGhlbHBzIHdpdGggc2lkZSBieSBzaWRlIGNvbXBhcmlzb24g
YWdhaW5zdCB0aGUgZmluYWwgcmVuZGVyCisgICAgICAgICAqIFRoaXMgZGVmYXVsdHMgdG8gLTEK
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLmRlYnVnTGltaXQgPSAtMTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogVGhpcyBpcyByZXNlcnZlZCBmb3IgdGhl
IGluc3BlY3Rvci4KKyAgICAgICAgICogQXMgdGhlIGRlZmF1bHQgdmlld2luZyByYW5nZSBtaWdo
dCBub3QgYmUgZW5vdWdoIChpZiB0aGUgYW1iaWVudCBpcyByZWFsbHkgc21hbGwgZm9yIGluc3Rh
bmNlKQorICAgICAgICAgKiBZb3UgY2FuIHVzZSB0aGUgZmFjdG9yIHRvIGJldHRlciBtdWx0aXBs
eSB0aGUgZmluYWwgdmFsdWUuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5kZWJ1Z0ZhY3Rv
ciA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBjbGVhciBjb2F0IGxh
eWVyIHBhcmFtZXRlcnMgZm9yIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLmNsZWFyQ29hdCA9IG5ldyBfcGJyQ2xlYXJDb2F0Q29uZmlndXJhdGlvbl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fWyJQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uIl0oX3RoaXMuX21h
cmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkuYmluZChfdGhpcykpOworICAgICAgICAvKioK
KyAgICAgICAgICogRGVmaW5lcyB0aGUgYW5pc290cm9waWMgcGFyYW1ldGVycyBmb3IgdGhlIG1h
dGVyaWFsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYW5pc290cm9weSA9IG5ldyBfcGJy
QW5pc290cm9waWNDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlBC
UkFuaXNvdHJvcGljQ29uZmlndXJhdGlvbiJdKF90aGlzLl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0
dXJlc0RpcnR5LmJpbmQoX3RoaXMpKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMg
dGhlIEJSREYgcGFyYW1ldGVycyBmb3IgdGhlIG1hdGVyaWFsLgorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuYnJkZiA9IG5ldyBfcGJyQlJERkNvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzEwX19bIlBCUkJSREZDb25maWd1cmF0aW9uIl0oX3RoaXMuX21hcmtBbGxTdWJN
ZXNoZXNBc01pc2NEaXJ0eS5iaW5kKF90aGlzKSk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
ZWZpbmVzIHRoZSBTaGVlbiBwYXJhbWV0ZXJzIGZvciB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5zaGVlbiA9IG5ldyBfcGJyU2hlZW5Db25maWd1cmF0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJQQlJTaGVlbkNvbmZpZ3VyYXRpb24iXShfdGhpcy5f
bWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eS5iaW5kKF90aGlzKSk7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBTdWJTdXJmYWNlIHBhcmFtZXRlcnMgZm9yIHRoZSBt
YXRlcmlhbC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnN1YlN1cmZhY2UgPSBuZXcgX3Bi
clN1YlN1cmZhY2VDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJQ
QlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbiJdKF90aGlzLl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0
dXJlc0RpcnR5LmJpbmQoX3RoaXMpKTsKKyAgICAgICAgX3RoaXMuX3JlYnVpbGRJblBhcmFsbGVs
ID0gZmFsc2U7CisgICAgICAgIC8vIFNldHVwIHRoZSBkZWZhdWx0IHByb2Nlc3NpbmcgY29uZmln
dXJhdGlvbiB0byB0aGUgc2NlbmUuCisgICAgICAgIF90aGlzLl9hdHRhY2hJbWFnZVByb2Nlc3Np
bmdDb25maWd1cmF0aW9uKG51bGwpOworICAgICAgICBfdGhpcy5nZXRSZW5kZXJUYXJnZXRUZXh0
dXJlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRzLnJl
c2V0KCk7CisgICAgICAgICAgICBpZiAoX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQgJiYg
X3RoaXMuX3JlZmxlY3Rpb25UZXh0dXJlICYmIF90aGlzLl9yZWZsZWN0aW9uVGV4dHVyZS5pc1Jl
bmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRzLnB1c2go
X3RoaXMuX3JlZmxlY3Rpb25UZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90
aGlzLnN1YlN1cmZhY2UuZmlsbFJlbmRlclRhcmdldFRleHR1cmVzKF90aGlzLl9yZW5kZXJUYXJn
ZXRzKTsKKyAgICAgICAgICAgIHJldHVybiBfdGhpcy5fcmVuZGVyVGFyZ2V0czsKKyAgICAgICAg
fTsKKyAgICAgICAgX3RoaXMuX2Vudmlyb25tZW50QlJERlRleHR1cmUgPSBfTWlzY19icmRmVGV4
dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkJSREZUZXh0dXJlVG9vbHMi
XS5HZXRFbnZpcm9ubWVudEJSREZUZXh0dXJlKHNjZW5lKTsKKyAgICAgICAgcmV0dXJuIF90aGlz
OworICAgIH0KKyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyBhIG5ldyBpbWFnZSBwcm9jZXNzaW5n
IGNvbmZpZ3VyYXRpb24gdG8gdGhlIFBCUiBNYXRlcmlhbC4KKyAgICAgKiBAcGFyYW0gY29uZmln
dXJhdGlvbgorICAgICAqLworICAgIFBCUkJhc2VNYXRlcmlhbC5wcm90b3R5cGUuX2F0dGFjaElt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0g
dGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIC8vIERldGFjaGVzIG9ic2VydmVyLgorICAgICAgICBpZiAo
dGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiB0aGlzLl9pbWFnZVByb2Nlc3Np
bmdPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbi5vblVwZGF0ZVBhcmFtZXRlcnMucmVtb3ZlKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ09ic2Vy
dmVyKTsKKyAgICAgICAgfQorICAgICAgICAvLyBQaWNrIHRoZSBzY2VuZSBjb25maWd1cmF0aW9u
IGlmIG5lZWRlZC4KKyAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICB0
aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uID0gdGhpcy5nZXRTY2VuZSgpLmltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb247CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlv
bjsKKyAgICAgICAgfQorICAgICAgICAvLyBBdHRhY2hlcyBvYnNlcnZlci4KKyAgICAgICAgaWYg
KHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMu
X2ltYWdlUHJvY2Vzc2luZ09ic2VydmVyID0gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbi5vblVwZGF0ZVBhcmFtZXRlcnMuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICBfdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzSW1hZ2VQcm9jZXNzaW5nRGlydHkoKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
UEJSQmFzZU1hdGVyaWFsLnByb3RvdHlwZSwgImhhc1JlbmRlclRhcmdldFRleHR1cmVzIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGN1
cnJlbnQgbWF0ZXJpYWwgbmVlZHMgdG8gcmVnaXN0ZXIgUlRUCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChfbWF0ZXJpYWxGbGFnc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLlJlZmxlY3Rpb25UZXh0
dXJlRW5hYmxlZCAmJiB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSAmJiB0aGlzLl9yZWZsZWN0aW9u
VGV4dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViU3VyZmFjZS5oYXNSZW5k
ZXJUYXJnZXRUZXh0dXJlcygpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIHRoZSBuYW1lIG9mIHRoZSBtYXRlcmlhbCBjbGFzcy4KKyAgICAgKi8KKyAgICBQQlJCYXNl
TWF0ZXJpYWwucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuICJQQlJCYXNlTWF0ZXJpYWwiOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFBCUkJhc2VNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VMb2dhcml0aG1pY0RlcHRoIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogRW5hYmxlZCB0aGUgdXNlIG9mIGxvZ2FyaXRobWljIGRl
cHRoIGJ1ZmZlcnMsIHdoaWNoIGlzIGdvb2QgZm9yIHdpZGUgZGVwdGggYnVmZmVycy4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3VzZUxvZ2FyaXRobWljRGVwdGg7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBFbmFibGVkIHRoZSB1c2Ugb2YgbG9nYXJpdGhtaWMgZGVwdGggYnVmZmVycywgd2hpY2gg
aXMgZ29vZCBmb3Igd2lkZSBkZXB0aCBidWZmZXJzLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3VzZUxvZ2FyaXRobWljRGVw
dGggPSB2YWx1ZSAmJiB0aGlzLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuZ2V0Q2FwcygpLmZyYWdt
ZW50RGVwdGhTdXBwb3J0ZWQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShQQlJCYXNlTWF0ZXJpYWwucHJvdG90eXBlLCAidHJhbnNwYXJlbmN5TW9kZSIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGN1cnJlbnQgdHJhbnNwYXJlbmN5IG1v
ZGUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl90cmFuc3BhcmVuY3lNb2RlOworICAgICAgICB9LAorICAgICAgICAvKioK
KyAgICAgICAgICogU2V0cyB0aGUgdHJhbnNwYXJlbmN5IG1vZGUgb2YgdGhlIG1hdGVyaWFsLgor
ICAgICAgICAgKgorICAgICAgICAgKiB8IFZhbHVlIHwgVHlwZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiB8CisgICAgICAgICAqIHwgLS0tLS0gfCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHwKKyAgICAgICAgICog
fCAwICAgICB8IE9QQVFVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgfAorICAgICAgICAgKiB8IDEgICAgIHwgQUxQSEFURVNUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAgICAqIHwgMiAgICAgfCBBTFBIQUJMRU5EICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgICogfCAzICAg
ICB8IEFMUEhBVEVTVEFOREJMRU5EICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfAor
ICAgICAgICAgKgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl90cmFuc3BhcmVuY3lNb2RlID09PSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3Ry
YW5zcGFyZW5jeU1vZGUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2ZvcmNlQWxwaGFUZXN0
ID0gKHZhbHVlID09PSBQQlJCYXNlTWF0ZXJpYWwuUEJSTUFURVJJQUxfQUxQSEFURVNUQU5EQkxF
TkQpOworICAgICAgICAgICAgdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNBbmRNaXNj
RGlydHkoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBC
UkJhc2VNYXRlcmlhbC5wcm90b3R5cGUsICJfZGlzYWJsZUFscGhhQmxlbmRpbmciLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgYWxwaGEgYmxlbmRpbmcgc2hvdWxk
IGJlIGRpc2FibGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gKHRoaXMuc3ViU3VyZmFjZS5kaXNhYmxlQWxwaGFCbGVuZGluZyB8
fAorICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zcGFyZW5jeU1vZGUgPT09IFBCUkJhc2VNYXRl
cmlhbC5QQlJNQVRFUklBTF9PUEFRVUUgfHwKKyAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3Bh
cmVuY3lNb2RlID09PSBQQlJCYXNlTWF0ZXJpYWwuUEJSTUFURVJJQUxfQUxQSEFURVNUKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90
IHRoaXMgbWF0ZXJpYWwgc2hvdWxkIGJlIHJlbmRlcmVkIGluIGFscGhhIGJsZW5kIG1vZGUuCisg
ICAgICovCisgICAgUEJSQmFzZU1hdGVyaWFsLnByb3RvdHlwZS5uZWVkQWxwaGFCbGVuZGluZyA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVBbHBoYUJsZW5kaW5nKSB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICh0
aGlzLmFscGhhIDwgMS4wKSB8fCAodGhpcy5fb3BhY2l0eVRleHR1cmUgIT0gbnVsbCkgfHwgdGhp
cy5fc2hvdWxkVXNlQWxwaGFGcm9tQWxiZWRvVGV4dHVyZSgpOworICAgIH07CisgICAgLyoqCisg
ICAgICogU3BlY2lmaWVzIGlmIHRoZSBtZXNoIHdpbGwgcmVxdWlyZSBhbHBoYSBibGVuZGluZy4K
KyAgICAgKiBAcGFyYW0gbWVzaCAtIEJKUyBtZXNoLgorICAgICAqLworICAgIFBCUkJhc2VNYXRl
cmlhbC5wcm90b3R5cGUubmVlZEFscGhhQmxlbmRpbmdGb3JNZXNoID0gZnVuY3Rpb24gKG1lc2gp
IHsKKyAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVBbHBoYUJsZW5kaW5nICYmIG1lc2gudmlzaWJp
bGl0eSA+PSAxLjApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5uZWVkQWxwaGFCbGVuZGluZ0Zvck1lc2guY2Fs
bCh0aGlzLCBtZXNoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB3aGV0aGVy
IG9yIG5vdCB0aGlzIG1hdGVyaWFsIHNob3VsZCBiZSByZW5kZXJlZCBpbiBhbHBoYSB0ZXN0IG1v
ZGUuCisgICAgICovCisgICAgUEJSQmFzZU1hdGVyaWFsLnByb3RvdHlwZS5uZWVkQWxwaGFUZXN0
aW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fZm9yY2VBbHBoYVRlc3QpIHsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnN1
YlN1cmZhY2UuZGlzYWJsZUFscGhhQmxlbmRpbmcpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fYWxiZWRvVGV4dHVyZSAhPSBudWxs
ICYmIHRoaXMuX2FsYmVkb1RleHR1cmUuaGFzQWxwaGEgJiYgKHRoaXMuX3RyYW5zcGFyZW5jeU1v
ZGUgPT0gbnVsbCB8fCB0aGlzLl90cmFuc3BhcmVuY3lNb2RlID09PSBQQlJCYXNlTWF0ZXJpYWwu
UEJSTUFURVJJQUxfQUxQSEFURVNUKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNpZmll
cyB3aGV0aGVyIG9yIG5vdCB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGFsYmVkbyB0ZXh0dXJlIHNo
b3VsZCBiZSB1c2VkIGZvciBhbHBoYSBibGVuZGluZy4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0
ZXJpYWwucHJvdG90eXBlLl9zaG91bGRVc2VBbHBoYUZyb21BbGJlZG9UZXh0dXJlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYWxiZWRvVGV4dHVyZSAhPSBudWxsICYmIHRo
aXMuX2FsYmVkb1RleHR1cmUuaGFzQWxwaGEgJiYgdGhpcy5fdXNlQWxwaGFGcm9tQWxiZWRvVGV4
dHVyZSAmJiB0aGlzLl90cmFuc3BhcmVuY3lNb2RlICE9PSBQQlJCYXNlTWF0ZXJpYWwuUEJSTUFU
RVJJQUxfT1BBUVVFOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdGV4dHVyZSB1
c2VkIGZvciB0aGUgYWxwaGEgdGVzdC4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwucHJv
dG90eXBlLmdldEFscGhhVGVzdFRleHR1cmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biB0aGlzLl9hbGJlZG9UZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lmaWVz
IHRoYXQgdGhlIHN1Ym1lc2ggaXMgcmVhZHkgdG8gYmUgdXNlZC4KKyAgICAgKiBAcGFyYW0gbWVz
aCAtIEJKUyBtZXNoLgorICAgICAqIEBwYXJhbSBzdWJNZXNoIC0gQSBzdWJtZXNoIG9mIHRoZSBC
SlMgbWVzaC4gIFVzZWQgdG8gY2hlY2sgaWYgaXQgaXMgcmVhZHkuCisgICAgICogQHBhcmFtIHVz
ZUluc3RhbmNlcyAtIFNwZWNpZmllcyB0aGF0IGluc3RhbmNlcyBzaG91bGQgYmUgdXNlZC4KKyAg
ICAgKiBAcmV0dXJucyAtIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJl
YWR5IG9yIG5vdC4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwucHJvdG90eXBlLmlzUmVh
ZHlGb3JTdWJNZXNoID0gZnVuY3Rpb24gKG1lc2gsIHN1Yk1lc2gsIHVzZUluc3RhbmNlcykgewor
ICAgICAgICBpZiAoc3ViTWVzaC5lZmZlY3QgJiYgdGhpcy5pc0Zyb3plbikgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX3dhc1ByZXZpb3VzbHlSZWFkeSkgeworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghc3ViTWVzaC5f
bWF0ZXJpYWxEZWZpbmVzKSB7CisgICAgICAgICAgICBzdWJNZXNoLl9tYXRlcmlhbERlZmluZXMg
PSBuZXcgUEJSTWF0ZXJpYWxEZWZpbmVzKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRlZmlu
ZXMgPSBzdWJNZXNoLl9tYXRlcmlhbERlZmluZXM7CisgICAgICAgIGlmICghdGhpcy5jaGVja1Jl
YWR5T25FdmVyeUNhbGwgJiYgc3ViTWVzaC5lZmZlY3QpIHsKKyAgICAgICAgICAgIGlmIChkZWZp
bmVzLl9yZW5kZXJJZCA9PT0gdGhpcy5nZXRTY2VuZSgpLmdldFJlbmRlcklkKCkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7CisgICAgICAgIHZhciBlbmdpbmUgPSBzY2Vu
ZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZVRleHR1cmVzRGlydHkpIHsK
KyAgICAgICAgICAgIGlmIChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fYWxiZWRvVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2FsYmVkb1RleHR1cmUuaXNSZWFkeU9y
Tm90QmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9hbWJpZW50VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkFtYmllbnRUZXh0dXJlRW5hYmxlZCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2FtYmllbnRUZXh0dXJlLmlzUmVhZHlP
ck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fb3BhY2l0eVRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5PcGFjaXR5VGV4dHVyZUVuYWJsZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9vcGFjaXR5VGV4dHVyZS5pc1JlYWR5
T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdmFyIHJlZmxlY3Rpb25UZXh0dXJlID0gdGhpcy5fZ2V0UmVmbGVjdGlvblRleHR1cmUoKTsK
KyAgICAgICAgICAgICAgICBpZiAocmVmbGVjdGlvblRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5SZWZsZWN0aW9u
VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWZsZWN0aW9uVGV4
dHVyZS5pc1JlYWR5T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJlZmxlY3Rpb25UZXh0dXJlLmlycmFkaWFuY2VUZXh0dXJlICYmICFyZWZsZWN0aW9uVGV4
dHVyZS5pcnJhZGlhbmNlVGV4dHVyZS5pc1JlYWR5T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0bWFwVGV4dHVy
ZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJp
YWxGbGFncyJdLkxpZ2h0bWFwVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCF0aGlzLl9saWdodG1hcFRleHR1cmUuaXNSZWFkeU9yTm90QmxvY2tpbmcoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRl
eHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1h
dGVyaWFsRmxhZ3MiXS5FbWlzc2l2ZVRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghdGhpcy5fZW1pc3NpdmVUZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoX21hdGVyaWFsRmxh
Z3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5TcGVjdWxh
clRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhbGxp
Y1RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbWV0YWxsaWNU
ZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fcmVmbGVjdGl2
aXR5VGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWZsZWN0
aXZpdHlUZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21pY3JvU3Vy
ZmFjZVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbWljcm9T
dXJmYWNlVGV4dHVyZS5pc1JlYWR5T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChlbmdpbmUuZ2V0Q2FwcygpLnN0YW5kYXJkRGVyaXZhdGl2ZXMgJiYgdGhpcy5fYnVtcFRleHR1
cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVy
aWFsRmxhZ3MiXS5CdW1wVGV4dHVyZUVuYWJsZWQgJiYgIXRoaXMuX2Rpc2FibGVCdW1wTWFwKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEJ1bXAgdGV4dHVyZSBjYW5ub3QgYmUgbm90IGJsb2Nr
aW5nLgorICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2J1bXBUZXh0dXJlLmlzUmVhZHko
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9l
bnZpcm9ubWVudEJSREZUZXh0dXJlICYmIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yMF9fWyJNYXRlcmlhbEZsYWdzIl0uUmVmbGVjdGlvblRleHR1cmVFbmFibGVkKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYmxvY2tpbmcuCisgICAgICAgICAgICAg
ICAgICAgIGlmICghdGhpcy5fZW52aXJvbm1lbnRCUkRGVGV4dHVyZS5pc1JlYWR5KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXRoaXMuc3ViU3VyZmFjZS5pc1JlYWR5Rm9yU3ViTWVzaChkZWZpbmVzLCBzY2VuZSkgfHwK
KyAgICAgICAgICAgICF0aGlzLmNsZWFyQ29hdC5pc1JlYWR5Rm9yU3ViTWVzaChkZWZpbmVzLCBz
Y2VuZSwgZW5naW5lLCB0aGlzLl9kaXNhYmxlQnVtcE1hcCkgfHwKKyAgICAgICAgICAgICF0aGlz
LnNoZWVuLmlzUmVhZHlGb3JTdWJNZXNoKGRlZmluZXMsIHNjZW5lKSB8fAorICAgICAgICAgICAg
IXRoaXMuYW5pc290cm9weS5pc1JlYWR5Rm9yU3ViTWVzaChkZWZpbmVzLCBzY2VuZSkpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5f
YXJlSW1hZ2VQcm9jZXNzaW5nRGlydHkgJiYgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbikgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0
aW9uLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWVuZ2luZS5nZXRDYXBzKCkuc3RhbmRhcmRE
ZXJpdmF0aXZlcyAmJiAhbWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCkp
IHsKKyAgICAgICAgICAgIG1lc2guY3JlYXRlTm9ybWFscyh0cnVlKTsKKyAgICAgICAgICAgIF9N
aXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5XYXJuKCJQ
QlJNYXRlcmlhbDogTm9ybWFscyBoYXZlIGJlZW4gY3JlYXRlZCBmb3IgdGhlIG1lc2g6ICIgKyBt
ZXNoLm5hbWUpOworICAgICAgICB9CisgICAgICAgIHZhciBwcmV2aW91c0VmZmVjdCA9IHN1Yk1l
c2guZWZmZWN0OworICAgICAgICB2YXIgbGlnaHREaXNwb3NlZCA9IGRlZmluZXMuX2FyZUxpZ2h0
c0Rpc3Bvc2VkOworICAgICAgICB2YXIgZWZmZWN0ID0gdGhpcy5fcHJlcGFyZUVmZmVjdChtZXNo
LCBkZWZpbmVzLCB0aGlzLm9uQ29tcGlsZWQsIHRoaXMub25FcnJvciwgdXNlSW5zdGFuY2VzKTsK
KyAgICAgICAgaWYgKGVmZmVjdCkgeworICAgICAgICAgICAgLy8gVXNlIHByZXZpb3VzIGVmZmVj
dCB3aGlsZSBuZXcgb25lIGlzIGNvbXBpbGluZworICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dT
aGFkZXJIb3RTd2FwcGluZyAmJiBwcmV2aW91c0VmZmVjdCAmJiAhZWZmZWN0LmlzUmVhZHkoKSkg
eworICAgICAgICAgICAgICAgIGVmZmVjdCA9IHByZXZpb3VzRWZmZWN0OworICAgICAgICAgICAg
ICAgIHRoaXMuX3JlYnVpbGRJblBhcmFsbGVsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWZp
bmVzLm1hcmtBc1VucHJvY2Vzc2VkKCk7CisgICAgICAgICAgICAgICAgaWYgKGxpZ2h0RGlzcG9z
ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmUgcmVnaXN0ZXIgaW4gY2FzZSBpdCB0YWtl
cyBtb3JlIHRoYW4gb25lIGZyYW1lLgorICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLl9hcmVM
aWdodHNEaXNwb3NlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9yZWJ1aWxkSW5QYXJhbGxlbCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIHNjZW5lLnJlc2V0Q2FjaGVkTWF0ZXJpYWwoKTsKKyAgICAgICAgICAgICAgICBzdWJN
ZXNoLnNldEVmZmVjdChlZmZlY3QsIGRlZmluZXMpOworICAgICAgICAgICAgICAgIHRoaXMuYnVp
bGRVbmlmb3JtTGF5b3V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFzdWJNZXNoLmVmZmVjdCB8fCAhc3ViTWVzaC5lZmZlY3QuaXNSZWFkeSgpKSB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZGVmaW5lcy5fcmVuZGVySWQg
PSBzY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICB0aGlzLl93YXNQcmV2aW91c2x5UmVhZHkg
PSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNw
ZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwgdXNlcyBtZXRhbGxpYyByb3VnaG5lc3Mgd29ya2Zsb3cu
CisgICAgICogQHJldHVybnMgYm9vbGVhbiBzcGVjaWZpeWluZyBpZiB0aGUgbWF0ZXJpYWwgdXNl
cyBtZXRhbGxpYyByb3VnaG5lc3Mgd29ya2Zsb3cuCisgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJp
YWwucHJvdG90eXBlLmlzTWV0YWxsaWNXb3JrZmxvdyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKHRoaXMuX21ldGFsbGljICE9IG51bGwgfHwgdGhpcy5fcm91Z2huZXNzICE9IG51bGwgfHwg
dGhpcy5fbWV0YWxsaWNUZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICBQQlJCYXNlTWF0ZXJpYWwu
cHJvdG90eXBlLl9wcmVwYXJlRWZmZWN0ID0gZnVuY3Rpb24gKG1lc2gsIGRlZmluZXMsIG9uQ29t
cGlsZWQsIG9uRXJyb3IsIHVzZUluc3RhbmNlcywgdXNlQ2xpcFBsYW5lKSB7CisgICAgICAgIGlm
IChvbkNvbXBpbGVkID09PSB2b2lkIDApIHsgb25Db21waWxlZCA9IG51bGw7IH0KKyAgICAgICAg
aWYgKG9uRXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbnVsbDsgfQorICAgICAgICBpZiAo
dXNlSW5zdGFuY2VzID09PSB2b2lkIDApIHsgdXNlSW5zdGFuY2VzID0gbnVsbDsgfQorICAgICAg
ICBpZiAodXNlQ2xpcFBsYW5lID09PSB2b2lkIDApIHsgdXNlQ2xpcFBsYW5lID0gbnVsbDsgfQor
ICAgICAgICB0aGlzLl9wcmVwYXJlRGVmaW5lcyhtZXNoLCBkZWZpbmVzLCB1c2VJbnN0YW5jZXMs
IHVzZUNsaXBQbGFuZSk7CisgICAgICAgIGlmICghZGVmaW5lcy5pc0RpcnR5KSB7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBkZWZpbmVzLm1hcmtBc1Byb2Nl
c3NlZCgpOworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7CisgICAgICAgIHZh
ciBlbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgLy8gRmFsbGJhY2tzCisgICAg
ICAgIHZhciBmYWxsYmFja3MgPSBuZXcgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE1X19bIkVmZmVjdEZhbGxiYWNrcyJdKCk7CisgICAgICAgIHZhciBmYWxsYmFj
a1JhbmsgPSAwOworICAgICAgICBpZiAoZGVmaW5lcy5VU0VTUEhFUklDQUxJTlZFUlRFWCkgewor
ICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGZhbGxiYWNrUmFuaysrLCAiVVNFU1BI
RVJJQ0FMSU5WRVJURVgiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5GT0cpIHsK
KyAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjayhmYWxsYmFja1JhbmssICJGT0ciKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5TUEVDVUxBUkFBKSB7CisgICAgICAgICAg
ICBmYWxsYmFja3MuYWRkRmFsbGJhY2soZmFsbGJhY2tSYW5rLCAiU1BFQ1VMQVJBQSIpOworICAg
ICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLlBPSU5UU0laRSkgeworICAgICAgICAgICAgZmFs
bGJhY2tzLmFkZEZhbGxiYWNrKGZhbGxiYWNrUmFuaywgIlBPSU5UU0laRSIpOworICAgICAgICB9
CisgICAgICAgIGlmIChkZWZpbmVzLkxPR0FSSVRITUlDREVQVEgpIHsKKyAgICAgICAgICAgIGZh
bGxiYWNrcy5hZGRGYWxsYmFjayhmYWxsYmFja1JhbmssICJMT0dBUklUSE1JQ0RFUFRIIik7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGRlZmluZXMuUEFSQUxMQVgpIHsKKyAgICAgICAgICAgIGZh
bGxiYWNrcy5hZGRGYWxsYmFjayhmYWxsYmFja1JhbmssICJQQVJBTExBWCIpOworICAgICAgICB9
CisgICAgICAgIGlmIChkZWZpbmVzLlBBUkFMTEFYT0NDTFVTSU9OKSB7CisgICAgICAgICAgICBm
YWxsYmFja3MuYWRkRmFsbGJhY2soZmFsbGJhY2tSYW5rKyssICJQQVJBTExBWE9DQ0xVU0lPTiIp
OworICAgICAgICB9CisgICAgICAgIGZhbGxiYWNrUmFuayA9IF9wYnJBbmlzb3Ryb3BpY0NvbmZp
Z3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUEJSQW5pc290cm9waWNDb25m
aWd1cmF0aW9uIl0uQWRkRmFsbGJhY2tzKGRlZmluZXMsIGZhbGxiYWNrcywgZmFsbGJhY2tSYW5r
KTsKKyAgICAgICAgZmFsbGJhY2tSYW5rID0gX3BickFuaXNvdHJvcGljQ29uZmlndXJhdGlvbl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJQQlJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb24i
XS5BZGRGYWxsYmFja3MoZGVmaW5lcywgZmFsbGJhY2tzLCBmYWxsYmFja1JhbmspOworICAgICAg
ICBmYWxsYmFja1JhbmsgPSBfcGJyU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEyX19bIlBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uIl0uQWRkRmFsbGJh
Y2tzKGRlZmluZXMsIGZhbGxiYWNrcywgZmFsbGJhY2tSYW5rKTsKKyAgICAgICAgZmFsbGJhY2tS
YW5rID0gX3BiclNoZWVuQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFf
X1siUEJSU2hlZW5Db25maWd1cmF0aW9uIl0uQWRkRmFsbGJhY2tzKGRlZmluZXMsIGZhbGxiYWNr
cywgZmFsbGJhY2tSYW5rKTsKKyAgICAgICAgaWYgKGRlZmluZXMuRU5WSVJPTk1FTlRCUkRGKSB7
CisgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJhY2soZmFsbGJhY2tSYW5rKyssICJFTlZJ
Uk9OTUVOVEJSREYiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5UQU5HRU5UKSB7
CisgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJhY2soZmFsbGJhY2tSYW5rKyssICJUQU5H
RU5UIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlZmluZXMuQlVNUCkgeworICAgICAgICAg
ICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGZhbGxiYWNrUmFuaysrLCAiQlVNUCIpOworICAgICAg
ICB9CisgICAgICAgIGZhbGxiYWNrUmFuayA9IF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIk1hdGVyaWFsSGVscGVyIl0uSGFuZGxlRmFsbGJh
Y2tzRm9yU2hhZG93cyhkZWZpbmVzLCBmYWxsYmFja3MsIHRoaXMuX21heFNpbXVsdGFuZW91c0xp
Z2h0cywgZmFsbGJhY2tSYW5rKyspOworICAgICAgICBpZiAoZGVmaW5lcy5TUEVDVUxBUlRFUk0p
IHsKKyAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjayhmYWxsYmFja1JhbmsrKywgIlNQ
RUNVTEFSVEVSTSIpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLlVTRVNQSEVSSUNB
TEZST01SRUZMRUNUSU9OTUFQKSB7CisgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJhY2so
ZmFsbGJhY2tSYW5rKyssICJVU0VTUEhFUklDQUxGUk9NUkVGTEVDVElPTk1BUCIpOworICAgICAg
ICB9CisgICAgICAgIGlmIChkZWZpbmVzLlVTRUlSUkFESUFOQ0VNQVApIHsKKyAgICAgICAgICAg
IGZhbGxiYWNrcy5hZGRGYWxsYmFjayhmYWxsYmFja1JhbmsrKywgIlVTRUlSUkFESUFOQ0VNQVAi
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5MSUdIVE1BUCkgeworICAgICAgICAg
ICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGZhbGxiYWNrUmFuaysrLCAiTElHSFRNQVAiKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5OT1JNQUwpIHsKKyAgICAgICAgICAgIGZhbGxi
YWNrcy5hZGRGYWxsYmFjayhmYWxsYmFja1JhbmsrKywgIk5PUk1BTCIpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChkZWZpbmVzLkFNQklFTlQpIHsKKyAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRG
YWxsYmFjayhmYWxsYmFja1JhbmsrKywgIkFNQklFTlQiKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZGVmaW5lcy5FTUlTU0lWRSkgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNr
KGZhbGxiYWNrUmFuaysrLCAiRU1JU1NJVkUiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVm
aW5lcy5WRVJURVhDT0xPUikgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGZh
bGxiYWNrUmFuaysrLCAiVkVSVEVYQ09MT1IiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVm
aW5lcy5NT1JQSFRBUkdFVFMpIHsKKyAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjayhm
YWxsYmFja1JhbmsrKywgIk1PUlBIVEFSR0VUUyIpOworICAgICAgICB9CisgICAgICAgIGlmIChk
ZWZpbmVzLk1VTFRJVklFVykgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKDAs
ICJNVUxUSVZJRVciKTsKKyAgICAgICAgfQorICAgICAgICAvL0F0dHJpYnV0ZXMKKyAgICAgICAg
dmFyIGF0dHJpYnMgPSBbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
X1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgaWYgKGRlZmluZXMuTk9S
TUFMKSB7CisgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGRlZmluZXMuVEFOR0VOVCkgeworICAgICAgICAgICAgYXR0cmlicy5w
dXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1
ZmZlciJdLlRhbmdlbnRLaW5kKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5VVjEp
IHsKKyAgICAgICAgICAgIGF0dHJpYnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfN19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICB9CisgICAg
ICAgIGlmIChkZWZpbmVzLlVWMikgeworICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlcnRleEJ1ZmZlciJdLlVWMktp
bmQpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLlZFUlRFWENPTE9SKSB7CisgICAg
ICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAgICAgfQorICAgICAgICBf
TWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJN
YXRlcmlhbEhlbHBlciJdLlByZXBhcmVBdHRyaWJ1dGVzRm9yQm9uZXMoYXR0cmlicywgbWVzaCwg
ZGVmaW5lcywgZmFsbGJhY2tzKTsKKyAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlQXR0
cmlidXRlc0Zvckluc3RhbmNlcyhhdHRyaWJzLCBkZWZpbmVzKTsKKyAgICAgICAgX01hdGVyaWFs
c19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxI
ZWxwZXIiXS5QcmVwYXJlQXR0cmlidXRlc0Zvck1vcnBoVGFyZ2V0cyhhdHRyaWJzLCBtZXNoLCBk
ZWZpbmVzKTsKKyAgICAgICAgdmFyIHNoYWRlck5hbWUgPSAicGJyIjsKKyAgICAgICAgdmFyIHVu
aWZvcm1zID0gWyJ3b3JsZCIsICJ2aWV3IiwgInZpZXdQcm9qZWN0aW9uIiwgInZFeWVQb3NpdGlv
biIsICJ2TGlnaHRzVHlwZSIsICJ2QW1iaWVudENvbG9yIiwgInZBbGJlZG9Db2xvciIsICJ2UmVm
bGVjdGl2aXR5Q29sb3IiLCAidkVtaXNzaXZlQ29sb3IiLCAidmlzaWJpbGl0eSIsICJ2UmVmbGVj
dGlvbkNvbG9yIiwKKyAgICAgICAgICAgICJ2Rm9nSW5mb3MiLCAidkZvZ0NvbG9yIiwgInBvaW50
U2l6ZSIsCisgICAgICAgICAgICAidkFsYmVkb0luZm9zIiwgInZBbWJpZW50SW5mb3MiLCAidk9w
YWNpdHlJbmZvcyIsICJ2UmVmbGVjdGlvbkluZm9zIiwgInZSZWZsZWN0aW9uUG9zaXRpb24iLCAi
dlJlZmxlY3Rpb25TaXplIiwgInZFbWlzc2l2ZUluZm9zIiwgInZSZWZsZWN0aXZpdHlJbmZvcyIs
CisgICAgICAgICAgICAidk1pY3JvU3VyZmFjZVNhbXBsZXJJbmZvcyIsICJ2QnVtcEluZm9zIiwg
InZMaWdodG1hcEluZm9zIiwKKyAgICAgICAgICAgICJtQm9uZXMiLAorICAgICAgICAgICAgInZD
bGlwUGxhbmUiLCAidkNsaXBQbGFuZTIiLCAidkNsaXBQbGFuZTMiLCAidkNsaXBQbGFuZTQiLCAi
YWxiZWRvTWF0cml4IiwgImFtYmllbnRNYXRyaXgiLCAib3BhY2l0eU1hdHJpeCIsICJyZWZsZWN0
aW9uTWF0cml4IiwgImVtaXNzaXZlTWF0cml4IiwgInJlZmxlY3Rpdml0eU1hdHJpeCIsICJub3Jt
YWxNYXRyaXgiLCAibWljcm9TdXJmYWNlU2FtcGxlck1hdHJpeCIsICJidW1wTWF0cml4IiwgImxp
Z2h0bWFwTWF0cml4IiwKKyAgICAgICAgICAgICJ2TGlnaHRpbmdJbnRlbnNpdHkiLAorICAgICAg
ICAgICAgImxvZ2FyaXRobWljRGVwdGhDb25zdGFudCIsCisgICAgICAgICAgICAidlNwaGVyaWNh
bFgiLCAidlNwaGVyaWNhbFkiLCAidlNwaGVyaWNhbFoiLAorICAgICAgICAgICAgInZTcGhlcmlj
YWxYWF9aWiIsICJ2U3BoZXJpY2FsWVlfWloiLCAidlNwaGVyaWNhbFpaIiwKKyAgICAgICAgICAg
ICJ2U3BoZXJpY2FsWFkiLCAidlNwaGVyaWNhbFlaIiwgInZTcGhlcmljYWxaWCIsCisgICAgICAg
ICAgICAidlNwaGVyaWNhbEwwMCIsCisgICAgICAgICAgICAidlNwaGVyaWNhbEwxXzEiLCAidlNw
aGVyaWNhbEwxMCIsICJ2U3BoZXJpY2FsTDExIiwKKyAgICAgICAgICAgICJ2U3BoZXJpY2FsTDJf
MiIsICJ2U3BoZXJpY2FsTDJfMSIsICJ2U3BoZXJpY2FsTDIwIiwgInZTcGhlcmljYWxMMjEiLCAi
dlNwaGVyaWNhbEwyMiIsCisgICAgICAgICAgICAidlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZv
cyIsCisgICAgICAgICAgICAidlRhbmdlbnRTcGFjZVBhcmFtcyIsICJib25lVGV4dHVyZVdpZHRo
IiwKKyAgICAgICAgICAgICJ2RGVidWdNb2RlIgorICAgICAgICBdOworICAgICAgICB2YXIgc2Ft
cGxlcnMgPSBbImFsYmVkb1NhbXBsZXIiLCAicmVmbGVjdGl2aXR5U2FtcGxlciIsICJhbWJpZW50
U2FtcGxlciIsICJlbWlzc2l2ZVNhbXBsZXIiLAorICAgICAgICAgICAgImJ1bXBTYW1wbGVyIiwg
ImxpZ2h0bWFwU2FtcGxlciIsICJvcGFjaXR5U2FtcGxlciIsCisgICAgICAgICAgICAicmVmbGVj
dGlvblNhbXBsZXIiLCAicmVmbGVjdGlvblNhbXBsZXJMb3ciLCAicmVmbGVjdGlvblNhbXBsZXJI
aWdoIiwgImlycmFkaWFuY2VTYW1wbGVyIiwKKyAgICAgICAgICAgICJtaWNyb1N1cmZhY2VTYW1w
bGVyIiwgImVudmlyb25tZW50QnJkZlNhbXBsZXIiLCAiYm9uZVNhbXBsZXIiXTsKKyAgICAgICAg
dmFyIHVuaWZvcm1CdWZmZXJzID0gWyJNYXRlcmlhbCIsICJTY2VuZSIsICJNZXNoIl07CisgICAg
ICAgIF9wYnJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTJfX1siUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24iXS5BZGRVbmlmb3Jtcyh1bmlmb3Jtcyk7
CisgICAgICAgIF9wYnJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTJfX1siUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24iXS5BZGRTYW1wbGVycyhzYW1w
bGVycyk7CisgICAgICAgIF9wYnJDbGVhckNvYXRDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV84X19bIlBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24iXS5BZGRVbmlmb3Jtcyh1
bmlmb3Jtcyk7CisgICAgICAgIF9wYnJDbGVhckNvYXRDb25maWd1cmF0aW9uX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV84X19bIlBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24iXS5BZGRTYW1wbGVy
cyhzYW1wbGVycyk7CisgICAgICAgIF9wYnJBbmlzb3Ryb3BpY0NvbmZpZ3VyYXRpb25fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfX1siUEJSQW5pc290cm9waWNDb25maWd1cmF0aW9uIl0uQWRk
VW5pZm9ybXModW5pZm9ybXMpOworICAgICAgICBfcGJyQW5pc290cm9waWNDb25maWd1cmF0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlBCUkFuaXNvdHJvcGljQ29uZmlndXJhdGlv
biJdLkFkZFNhbXBsZXJzKHNhbXBsZXJzKTsKKyAgICAgICAgX3BiclNoZWVuQ29uZmlndXJhdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siUEJSU2hlZW5Db25maWd1cmF0aW9uIl0u
QWRkVW5pZm9ybXModW5pZm9ybXMpOworICAgICAgICBfcGJyU2hlZW5Db25maWd1cmF0aW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJQQlJTaGVlbkNvbmZpZ3VyYXRpb24iXS5BZGRT
YW1wbGVycyhzYW1wbGVycyk7CisgICAgICAgIGlmIChfTWF0ZXJpYWxzX2ltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24iXSkgeworICAgICAgICAgICAgX01hdGVyaWFsc19pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJJbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uIl0uUHJlcGFyZVVuaWZvcm1zKHVuaWZvcm1zLCBkZWZpbmVz
KTsKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
biJdLlByZXBhcmVTYW1wbGVycyhzYW1wbGVycywgZGVmaW5lcyk7CisgICAgICAgIH0KKyAgICAg
ICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThf
X1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlVW5pZm9ybXNBbmRTYW1wbGVyc0xpc3QoeworICAg
ICAgICAgICAgdW5pZm9ybXNOYW1lczogdW5pZm9ybXMsCisgICAgICAgICAgICB1bmlmb3JtQnVm
ZmVyc05hbWVzOiB1bmlmb3JtQnVmZmVycywKKyAgICAgICAgICAgIHNhbXBsZXJzOiBzYW1wbGVy
cywKKyAgICAgICAgICAgIGRlZmluZXM6IGRlZmluZXMsCisgICAgICAgICAgICBtYXhTaW11bHRh
bmVvdXNMaWdodHM6IHRoaXMuX21heFNpbXVsdGFuZW91c0xpZ2h0cworICAgICAgICB9KTsKKyAg
ICAgICAgaWYgKHRoaXMuY3VzdG9tU2hhZGVyTmFtZVJlc29sdmUpIHsKKyAgICAgICAgICAgIHNo
YWRlck5hbWUgPSB0aGlzLmN1c3RvbVNoYWRlck5hbWVSZXNvbHZlKHNoYWRlck5hbWUsIHVuaWZv
cm1zLCB1bmlmb3JtQnVmZmVycywgc2FtcGxlcnMsIGRlZmluZXMpOworICAgICAgICB9CisgICAg
ICAgIHZhciBqb2luID0gZGVmaW5lcy50b1N0cmluZygpOworICAgICAgICByZXR1cm4gZW5naW5l
LmNyZWF0ZUVmZmVjdChzaGFkZXJOYW1lLCB7CisgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhdHRy
aWJzLAorICAgICAgICAgICAgdW5pZm9ybXNOYW1lczogdW5pZm9ybXMsCisgICAgICAgICAgICB1
bmlmb3JtQnVmZmVyc05hbWVzOiB1bmlmb3JtQnVmZmVycywKKyAgICAgICAgICAgIHNhbXBsZXJz
OiBzYW1wbGVycywKKyAgICAgICAgICAgIGRlZmluZXM6IGpvaW4sCisgICAgICAgICAgICBmYWxs
YmFja3M6IGZhbGxiYWNrcywKKyAgICAgICAgICAgIG9uQ29tcGlsZWQ6IG9uQ29tcGlsZWQsCisg
ICAgICAgICAgICBvbkVycm9yOiBvbkVycm9yLAorICAgICAgICAgICAgaW5kZXhQYXJhbWV0ZXJz
OiB7IG1heFNpbXVsdGFuZW91c0xpZ2h0czogdGhpcy5fbWF4U2ltdWx0YW5lb3VzTGlnaHRzLCBt
YXhTaW11bHRhbmVvdXNNb3JwaFRhcmdldHM6IGRlZmluZXMuTlVNX01PUlBIX0lORkxVRU5DRVJT
IH0KKyAgICAgICAgfSwgZW5naW5lKTsKKyAgICB9OworICAgIFBCUkJhc2VNYXRlcmlhbC5wcm90
b3R5cGUuX3ByZXBhcmVEZWZpbmVzID0gZnVuY3Rpb24gKG1lc2gsIGRlZmluZXMsIHVzZUluc3Rh
bmNlcywgdXNlQ2xpcFBsYW5lKSB7CisgICAgICAgIGlmICh1c2VJbnN0YW5jZXMgPT09IHZvaWQg
MCkgeyB1c2VJbnN0YW5jZXMgPSBudWxsOyB9CisgICAgICAgIGlmICh1c2VDbGlwUGxhbmUgPT09
IHZvaWQgMCkgeyB1c2VDbGlwUGxhbmUgPSBudWxsOyB9CisgICAgICAgIHZhciBzY2VuZSA9IHRo
aXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOwor
ICAgICAgICAvLyBMaWdodHMKKyAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5l
c0ZvckxpZ2h0cyhzY2VuZSwgbWVzaCwgZGVmaW5lcywgdHJ1ZSwgdGhpcy5fbWF4U2ltdWx0YW5l
b3VzTGlnaHRzLCB0aGlzLl9kaXNhYmxlTGlnaHRpbmcpOworICAgICAgICBkZWZpbmVzLl9uZWVk
Tm9ybWFscyA9IHRydWU7CisgICAgICAgIC8vIE11bHRpdmlldworICAgICAgICBfTWF0ZXJpYWxz
X21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRlcmlhbEhl
bHBlciJdLlByZXBhcmVEZWZpbmVzRm9yTXVsdGl2aWV3KHNjZW5lLCBkZWZpbmVzKTsKKyAgICAg
ICAgLy8gVGV4dHVyZXMKKyAgICAgICAgZGVmaW5lcy5NRVRBTExJQ1dPUktGTE9XID0gdGhpcy5p
c01ldGFsbGljV29ya2Zsb3coKTsKKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZVRleHR1cmVzRGly
dHkpIHsKKyAgICAgICAgICAgIGRlZmluZXMuX25lZWRVVnMgPSBmYWxzZTsKKyAgICAgICAgICAg
IGlmIChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2NlbmUu
Z2V0RW5naW5lKCkuZ2V0Q2FwcygpLnRleHR1cmVMT0QpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lcy5MT0RCQVNFRE1JQ1JPU0ZVUkFDRSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hbGJlZG9UZXh0dXJlICYmIF9tYXRlcmlhbEZsYWdz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJNYXRlcmlhbEZsYWdzIl0uRGlmZnVzZVRl
eHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxI
ZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIk1hdGVyaWFsSGVscGVyIl0uUHJl
cGFyZURlZmluZXNGb3JNZXJnZWRVVih0aGlzLl9hbGJlZG9UZXh0dXJlLCBkZWZpbmVzLCAiQUxC
RURPIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBkZWZpbmVzLkFMQkVETyA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAodGhpcy5fYW1iaWVudFRleHR1cmUgJiYgX21hdGVyaWFsRmxh
Z3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5BbWJpZW50
VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlh
bEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5Q
cmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX2FtYmllbnRUZXh0dXJlLCBkZWZpbmVzLCAi
QU1CSUVOVCIpOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkFNQklFTlRJTkdSQVlTQ0FM
RSA9IHRoaXMuX3VzZUFtYmllbnRJbkdyYXlTY2FsZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuQU1CSUVOVCA9
IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3Bh
Y2l0eVRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIw
X19bIk1hdGVyaWFsRmxhZ3MiXS5PcGFjaXR5VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMu
X29wYWNpdHlUZXh0dXJlLCBkZWZpbmVzLCAiT1BBQ0lUWSIpOworICAgICAgICAgICAgICAgICAg
ICBkZWZpbmVzLk9QQUNJVFlSR0IgPSB0aGlzLl9vcGFjaXR5VGV4dHVyZS5nZXRBbHBoYUZyb21S
R0I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBkZWZpbmVzLk9QQUNJVFkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdmFyIHJlZmxlY3Rpb25UZXh0dXJlID0gdGhpcy5fZ2V0UmVmbGVjdGlv
blRleHR1cmUoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVmbGVjdGlvblRleHR1cmUgJiYgX21h
dGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3Mi
XS5SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5l
cy5SRUZMRUNUSU9OID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5HQU1NQVJF
RkxFQ1RJT04gPSByZWZsZWN0aW9uVGV4dHVyZS5nYW1tYVNwYWNlOworICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLlJHQkRSRUZMRUNUSU9OID0gcmVmbGVjdGlvblRleHR1cmUuaXNSR0JEOwor
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfT1BQT1NJVEVaID0gdGhp
cy5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVtID8gIXJlZmxlY3Rpb25UZXh0dXJlLmlu
dmVydFogOiByZWZsZWN0aW9uVGV4dHVyZS5pbnZlcnRaOworICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLkxPRElOUkVGTEVDVElPTkFMUEhBID0gcmVmbGVjdGlvblRleHR1cmUubG9kTGV2ZWxJ
bkFscGhhOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkxJTkVBUlNQRUNVTEFSUkVGTEVD
VElPTiA9IHJlZmxlY3Rpb25UZXh0dXJlLmxpbmVhclNwZWN1bGFyTE9EOworICAgICAgICAgICAg
ICAgICAgICBpZiAocmVmbGVjdGlvblRleHR1cmUuY29vcmRpbmF0ZXNNb2RlID09PSBfTWF0ZXJp
YWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlRleHR1
cmUiXS5JTlZDVUJJQ19NT0RFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLklO
VkVSVENVQklDTUFQID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfM0QgPSByZWZsZWN0aW9uVGV4dHVyZS5pc0N1
YmU7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9DVUJJQyA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfRVhQTElDSVQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1BMQU5B
UiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfUFJP
SkVDVElPTiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05N
QVBfU0tZQk9YID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElP
Tk1BUF9TUEhFUklDQUwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZM
RUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxBUiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLlJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSX0ZJWEVEID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9NSVJST1JFREVRVUlSRUNUQU5H
VUxBUl9GSVhFRCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJ
T05NQVBfU0tZQk9YX1RSQU5TRk9STUVEID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAocmVmbGVjdGlvblRleHR1cmUuY29vcmRpbmF0ZXNNb2RlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTlfX1siVGV4dHVyZSJdLkVYUExJQ0lUX01PREU6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX0VYUExJQ0lUID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xOV9fWyJUZXh0dXJlIl0uUExBTkFSX01PREU6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1BMQU5BUiA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlh
bHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siVGV4dHVy
ZSJdLlBST0pFQ1RJT05fTU9ERToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVz
LlJFRkxFQ1RJT05NQVBfUFJPSkVDVElPTiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siVGV4dHVyZSJdLlNL
WUJPWF9NT0RFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElP
Tk1BUF9TS1lCT1ggPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlRleHR1cmUiXS5TUEhFUklDQUxfTU9ERToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfU1BIRVJJ
Q0FMID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xOV9fWyJUZXh0dXJlIl0uRVFVSVJFQ1RBTkdVTEFSX01PREU6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX0VRVUlSRUNU
QU5HVUxBUiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siVGV4dHVyZSJdLkZJWEVEX0VRVUlSRUNUQU5HVUxB
Ul9NT0RFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1B
UF9FUVVJUkVDVEFOR1VMQVJfRklYRUQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfTWF0ZXJpYWxzX1RleHR1
cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlRleHR1cmUiXS5GSVhF
RF9FUVVJUkVDVEFOR1VMQVJfTUlSUk9SRURfTU9ERToKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfTUlSUk9SRURFUVVJUkVDVEFOR1VMQVJfRklYRUQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE5X19bIlRleHR1cmUiXS5DVUJJQ19NT0RFOgorICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE5X19bIlRleHR1cmUiXS5JTlZDVUJJQ19NT0RFOgorICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJF
RkxFQ1RJT05NQVBfQ1VCSUMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmluZXMuVVNFX0xPQ0FMX1JFRkxFQ1RJT05NQVBfQ1VCSUMgPSByZWZsZWN0aW9uVGV4dHVyZS5i
b3VuZGluZ0JveFNpemUgPyB0cnVlIDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KHJlZmxlY3Rpb25UZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSAhPT0gX01hdGVyaWFsc19UZXh0dXJl
c190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJUZXh0dXJlIl0uU0tZQk9Y
X01PREUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZsZWN0aW9uVGV4dHVyZS5p
cnJhZGlhbmNlVGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMu
VVNFSVJSQURJQU5DRU1BUCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
aW5lcy5VU0VTUEhFUklDQUxGUk9NUkVGTEVDVElPTk1BUCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmbGVjdGlv
blRleHR1cmUuc3BoZXJpY2FsUG9seW5vbWlhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmluZXMuVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05NQVAgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuVVNFSVJSQURJQU5DRU1BUCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mb3JjZUlycmFkaWFuY2VJbkZy
YWdtZW50IHx8IHNjZW5lLmdldEVuZ2luZSgpLmdldENhcHMoKS5tYXhWYXJ5aW5nVmVjdG9ycyA8
PSA4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuVVNFU1BIRVJJ
Q0FMSU5WRVJURVggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuVVNFU1BIRVJJQ0FMSU5WRVJURVggPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9TS1lCT1hfVFJBTlNGT1JNRUQgPSAhcmVmbGVj
dGlvblRleHR1cmUuZ2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXgoKS5pc0lkZW50aXR5KCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTiA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfM0QgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX1NQSEVSSUNBTCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfUExBTkFSID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9DVUJJQyA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlVTRV9MT0NBTF9SRUZMRUNUSU9OTUFQ
X0NVQklDID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1B
UF9QUk9KRUNUSU9OID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVD
VElPTk1BUF9TS1lCT1ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZM
RUNUSU9OTUFQX1NLWUJPWF9UUkFOU0ZPUk1FRCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfRVhQTElDSVQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxBUiA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSX0ZJ
WEVEID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTk1BUF9N
SVJST1JFREVRVUlSRUNUQU5HVUxBUl9GSVhFRCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBkZWZpbmVzLklOVkVSVENVQklDTUFQID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmluZXMuVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05NQVAgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lcy5VU0VJUlJBRElBTkNFTUFQID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuVVNFU1BIRVJJQ0FMSU5WRVJURVggPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OTUFQX09QUE9TSVRFWiA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBkZWZpbmVzLkxPRElOUkVGTEVDVElPTkFMUEhBID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmluZXMuR0FNTUFSRUZMRUNUSU9OID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmluZXMuUkdCRFJFRkxFQ1RJT04gPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lcy5MSU5FQVJTUEVDVUxBUlJFRkxFQ1RJT04gPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSAm
JiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxG
bGFncyJdLkxpZ2h0bWFwVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgX01h
dGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0
ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX2xpZ2h0bWFwVGV4
dHVyZSwgZGVmaW5lcywgIkxJR0hUTUFQIik7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMu
VVNFTElHSFRNQVBBU1NIQURPV01BUCA9IHRoaXMuX3VzZUxpZ2h0bWFwQXNTaGFkb3dtYXA7Cisg
ICAgICAgICAgICAgICAgICAgIGRlZmluZXMuR0FNTUFMSUdIVE1BUCA9IHRoaXMuX2xpZ2h0bWFw
VGV4dHVyZS5nYW1tYVNwYWNlOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJHQkRMSUdI
VE1BUCA9IHRoaXMuX2xpZ2h0bWFwVGV4dHVyZS5pc1JHQkQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkxJR0hU
TUFQID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlz
Ll9lbWlzc2l2ZVRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5FbWlzc2l2ZVRleHR1cmVFbmFibGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE4X19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JNZXJnZWRV
Vih0aGlzLl9lbWlzc2l2ZVRleHR1cmUsIGRlZmluZXMsICJFTUlTU0lWRSIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVm
aW5lcy5FTUlTU0lWRSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVy
aWFsRmxhZ3MiXS5TcGVjdWxhclRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9tZXRhbGxpY1RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9N
YXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIk1h
dGVyaWFsSGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JNZXJnZWRVVih0aGlzLl9tZXRhbGxpY1Rl
eHR1cmUsIGRlZmluZXMsICJSRUZMRUNUSVZJVFkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmluZXMuUk9VR0hORVNTU1RPUkVJTk1FVEFMTUFQQUxQSEEgPSB0aGlzLl91c2VSb3VnaG5l
c3NGcm9tTWV0YWxsaWNUZXh0dXJlQWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZp
bmVzLlJPVUdITkVTU1NUT1JFSU5NRVRBTE1BUEdSRUVOID0gIXRoaXMuX3VzZVJvdWdobmVzc0Zy
b21NZXRhbGxpY1RleHR1cmVBbHBoYSAmJiB0aGlzLl91c2VSb3VnaG5lc3NGcm9tTWV0YWxsaWNU
ZXh0dXJlR3JlZW47CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLk1FVEFMTE5FU1NT
VE9SRUlOTUVUQUxNQVBCTFVFID0gdGhpcy5fdXNlTWV0YWxsbmVzc0Zyb21NZXRhbGxpY1RleHR1
cmVCbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5BT1NUT1JFSU5NRVRBTE1B
UFJFRCA9IHRoaXMuX3VzZUFtYmllbnRPY2NsdXNpb25Gcm9tTWV0YWxsaWNUZXh0dXJlUmVkOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMu
X3JlZmxlY3Rpdml0eVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9NYXRlcmlh
bHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIk1hdGVyaWFs
SGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JNZXJnZWRVVih0aGlzLl9yZWZsZWN0aXZpdHlUZXh0
dXJlLCBkZWZpbmVzLCAiUkVGTEVDVElWSVRZIik7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLk1JQ1JPU1VSRkFDRUZST01SRUZMRUNUSVZJVFlNQVAgPSB0aGlzLl91c2VNaWNyb1N1
cmZhY2VGcm9tUmVmbGVjdGl2aXR5TWFwQWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLk1JQ1JPU1VSRkFDRUFVVE9NQVRJQyA9IHRoaXMuX3VzZUF1dG9NaWNyb1N1cmZhY2VG
cm9tUmVmbGVjdGl2aXR5TWFwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZMRUNUSVZJ
VFkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fbWljcm9TdXJmYWNlVGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
X01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1si
TWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX21pY3JvU3Vy
ZmFjZVRleHR1cmUsIGRlZmluZXMsICJNSUNST1NVUkZBQ0VNQVAiKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmluZXMuTUlDUk9TVVJGQUNFTUFQID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElWSVRZID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmluZXMuTUlDUk9TVVJGQUNFTUFQID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChzY2VuZS5nZXRFbmdpbmUoKS5nZXRDYXBzKCkuc3RhbmRhcmRE
ZXJpdmF0aXZlcyAmJiB0aGlzLl9idW1wVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkJ1bXBUZXh0dXJlRW5hYmxl
ZCAmJiAhdGhpcy5fZGlzYWJsZUJ1bXBNYXApIHsKKyAgICAgICAgICAgICAgICAgICAgX01hdGVy
aWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJp
YWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX2J1bXBUZXh0dXJlLCBk
ZWZpbmVzLCAiQlVNUCIpOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdXNlUGFyYWxs
YXggJiYgdGhpcy5fYWxiZWRvVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5QQVJBTExBWCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlBBUkFMTEFYT0NDTFVTSU9OID0gISF0aGlzLl91
c2VQYXJhbGxheE9jY2x1c2lvbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUEFSQUxMQVgg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZWZp
bmVzLk9CSkVDVFNQQUNFX05PUk1BTE1BUCA9IHRoaXMuX3VzZU9iamVjdFNwYWNlTm9ybWFsTWFw
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lcy5CVU1QID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9lbnZpcm9ubWVudEJSREZUZXh0dXJlICYmIF9tYXRlcmlhbEZs
YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJNYXRlcmlhbEZsYWdzIl0uUmVmbGVj
dGlvblRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuRU5WSVJP
Tk1FTlRCUkRGID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5FTlZJUk9OTUVO
VEJSREZfUkdCRCA9IHRoaXMuX2Vudmlyb25tZW50QlJERlRleHR1cmUuaXNSR0JEOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lcy5FTlZJUk9OTUVOVEJSREYgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVm
aW5lcy5FTlZJUk9OTUVOVEJSREZfUkdCRCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkVXNlQWxwaGFGcm9tQWxiZWRvVGV4dHVyZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuQUxQSEFGUk9NQUxCRURPID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuQUxQSEFGUk9NQUxCRURPID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmaW5lcy5TUEVDVUxBUk9WRVJBTFBIQSA9
IHRoaXMuX3VzZVNwZWN1bGFyT3ZlckFscGhhOworICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0
RmFsbG9mZiA9PT0gUEJSQmFzZU1hdGVyaWFsLkxJR0hURkFMTE9GRl9TVEFOREFSRCkgeworICAg
ICAgICAgICAgICAgIGRlZmluZXMuVVNFUEhZU0lDQUxMSUdIVEZBTExPRkYgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBkZWZpbmVzLlVTRUdMVEZMSUdIVEZBTExPRkYgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2xpZ2h0RmFsbG9mZiA9PT0gUEJS
QmFzZU1hdGVyaWFsLkxJR0hURkFMTE9GRl9HTFRGKSB7CisgICAgICAgICAgICAgICAgZGVmaW5l
cy5VU0VQSFlTSUNBTExJR0hURkFMTE9GRiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmlu
ZXMuVVNFR0xURkxJR0hURkFMTE9GRiA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLlVTRVBIWVNJQ0FMTElHSFRGQUxMT0ZG
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLlVTRUdMVEZMSUdIVEZBTExPRkYgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmluZXMuUkFESUFOQ0VPVkVSQUxQ
SEEgPSB0aGlzLl91c2VSYWRpYW5jZU92ZXJBbHBoYTsKKyAgICAgICAgICAgIGlmICghdGhpcy5i
YWNrRmFjZUN1bGxpbmcgJiYgdGhpcy5fdHdvU2lkZWRMaWdodGluZykgeworICAgICAgICAgICAg
ICAgIGRlZmluZXMuVFdPU0lERURMSUdIVElORyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLlRXT1NJREVETElHSFRJTkcg
PSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmluZXMuU1BFQ1VMQVJBQSA9
IHNjZW5lLmdldEVuZ2luZSgpLmdldENhcHMoKS5zdGFuZGFyZERlcml2YXRpdmVzICYmIHRoaXMu
X2VuYWJsZVNwZWN1bGFyQW50aUFsaWFzaW5nOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZp
bmVzLl9hcmVUZXh0dXJlc0RpcnR5IHx8IGRlZmluZXMuX2FyZU1pc2NEaXJ0eSkgeworICAgICAg
ICAgICAgZGVmaW5lcy5BTFBIQVRFU1RWQUxVRSA9ICIiICsgdGhpcy5fYWxwaGFDdXRPZmYgKyAo
dGhpcy5fYWxwaGFDdXRPZmYgJSAxID09PSAwID8gIi4iIDogIiIpOworICAgICAgICAgICAgZGVm
aW5lcy5QUkVNVUxUSVBMWUFMUEhBID0gKHRoaXMuYWxwaGFNb2RlID09PSBfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIkNvbnN0YW50cyJdLkFMUEhBX1BS
RU1VTFRJUExJRUQgfHwgdGhpcy5hbHBoYU1vZGUgPT09IF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siQ29uc3RhbnRzIl0uQUxQSEFfUFJFTVVMVElQTElF
RF9QT1JURVJEVUZGKTsKKyAgICAgICAgICAgIGRlZmluZXMuQUxQSEFCTEVORCA9IHRoaXMubmVl
ZEFscGhhQmxlbmRpbmdGb3JNZXNoKG1lc2gpOworICAgICAgICAgICAgZGVmaW5lcy5BTFBIQUZS
RVNORUwgPSB0aGlzLl91c2VBbHBoYUZyZXNuZWwgfHwgdGhpcy5fdXNlTGluZWFyQWxwaGFGcmVz
bmVsOworICAgICAgICAgICAgZGVmaW5lcy5MSU5FQVJBTFBIQUZSRVNORUwgPSB0aGlzLl91c2VM
aW5lYXJBbHBoYUZyZXNuZWw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZUlt
YWdlUHJvY2Vzc2luZ0RpcnR5ICYmIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJlcGFy
ZURlZmluZXMoZGVmaW5lcyk7CisgICAgICAgIH0KKyAgICAgICAgZGVmaW5lcy5GT1JDRU5PUk1B
TEZPUldBUkQgPSB0aGlzLl9mb3JjZU5vcm1hbEZvcndhcmQ7CisgICAgICAgIGRlZmluZXMuUkFE
SUFOQ0VPQ0NMVVNJT04gPSB0aGlzLl91c2VSYWRpYW5jZU9jY2x1c2lvbjsKKyAgICAgICAgZGVm
aW5lcy5IT1JJWk9OT0NDTFVTSU9OID0gdGhpcy5fdXNlSG9yaXpvbk9jY2x1c2lvbjsKKyAgICAg
ICAgLy8gTWlzYy4KKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZU1pc2NEaXJ0eSkgeworICAgICAg
ICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MThfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1pc2MobWVzaCwgc2NlbmUs
IHRoaXMuX3VzZUxvZ2FyaXRobWljRGVwdGgsIHRoaXMucG9pbnRzQ2xvdWQsIHRoaXMuZm9nRW5h
YmxlZCwgdGhpcy5fc2hvdWxkVHVybkFscGhhVGVzdE9uKG1lc2gpIHx8IHRoaXMuX2ZvcmNlQWxw
aGFUZXN0LCBkZWZpbmVzKTsKKyAgICAgICAgICAgIGRlZmluZXMuVU5MSVQgPSB0aGlzLl91bmxp
dCB8fCAoKHRoaXMucG9pbnRzQ2xvdWQgfHwgdGhpcy53aXJlZnJhbWUpICYmICFtZXNoLmlzVmVy
dGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKSk7CisgICAgICAgICAgICBkZWZpbmVzLkRF
QlVHTU9ERSA9IHRoaXMuX2RlYnVnTW9kZTsKKyAgICAgICAgfQorICAgICAgICAvLyBFeHRlcm5h
bCBjb25maWcKKyAgICAgICAgdGhpcy5zdWJTdXJmYWNlLnByZXBhcmVEZWZpbmVzKGRlZmluZXMs
IHNjZW5lKTsKKyAgICAgICAgdGhpcy5jbGVhckNvYXQucHJlcGFyZURlZmluZXMoZGVmaW5lcywg
c2NlbmUpOworICAgICAgICB0aGlzLmFuaXNvdHJvcHkucHJlcGFyZURlZmluZXMoZGVmaW5lcywg
bWVzaCwgc2NlbmUpOworICAgICAgICB0aGlzLmJyZGYucHJlcGFyZURlZmluZXMoZGVmaW5lcyk7
CisgICAgICAgIHRoaXMuc2hlZW4ucHJlcGFyZURlZmluZXMoZGVmaW5lcywgc2NlbmUpOworICAg
ICAgICAvLyBWYWx1ZXMgdGhhdCBuZWVkIHRvIGJlIGV2YWx1YXRlZCBvbiBldmVyeSBmcmFtZQor
ICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yRnJhbWVCb3VuZFZhbHVl
cyhzY2VuZSwgZW5naW5lLCBkZWZpbmVzLCB1c2VJbnN0YW5jZXMgPyB0cnVlIDogZmFsc2UsIHVz
ZUNsaXBQbGFuZSk7CisgICAgICAgIC8vIEF0dHJpYnMKKyAgICAgICAgX01hdGVyaWFsc19tYXRl
cmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIi
XS5QcmVwYXJlRGVmaW5lc0ZvckF0dHJpYnV0ZXMobWVzaCwgZGVmaW5lcywgdHJ1ZSwgdHJ1ZSwg
dHJ1ZSwgdGhpcy5fdHJhbnNwYXJlbmN5TW9kZSAhPT0gUEJSQmFzZU1hdGVyaWFsLlBCUk1BVEVS
SUFMX09QQVFVRSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSBzaGFkZXIgY29tcGls
YXRpb24KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwucHJvdG90eXBlLmZvcmNlQ29tcGls
YXRpb24gPSBmdW5jdGlvbiAobWVzaCwgb25Db21waWxlZCwgb3B0aW9ucykgeworICAgICAgICB2
YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgbG9jYWxPcHRpb25zID0gdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19hc3NpZ24iXSh7IGNsaXBQbGFuZTogZmFsc2UgfSwg
b3B0aW9ucyk7CisgICAgICAgIHZhciBkZWZpbmVzID0gbmV3IFBCUk1hdGVyaWFsRGVmaW5lcygp
OworICAgICAgICB2YXIgZWZmZWN0ID0gdGhpcy5fcHJlcGFyZUVmZmVjdChtZXNoLCBkZWZpbmVz
LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBsb2NhbE9wdGlvbnMuY2xpcFBsYW5l
KTsKKyAgICAgICAgaWYgKGVmZmVjdC5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgIGlmIChvbkNv
bXBpbGVkKSB7CisgICAgICAgICAgICAgICAgb25Db21waWxlZCh0aGlzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVmZmVjdC5vbkNvbXBp
bGVPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaWYgKG9uQ29t
cGlsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgb25Db21waWxlZChfdGhpcyk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIEluaXRpYWxpemVzIHRoZSB1bmlmb3JtIGJ1ZmZlciBsYXlvdXQgZm9yIHRoZSBzaGFk
ZXIuCisgICAgICovCisgICAgUEJSQmFzZU1hdGVyaWFsLnByb3RvdHlwZS5idWlsZFVuaWZvcm1M
YXlvdXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE9yZGVyIGlzIGltcG9ydGFudCAhCisg
ICAgICAgIHZhciB1Ym8gPSB0aGlzLl91bmlmb3JtQnVmZmVyOworICAgICAgICB1Ym8uYWRkVW5p
Zm9ybSgidkFsYmVkb0luZm9zIiwgMik7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2QW1iaWVu
dEluZm9zIiwgNCk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2T3BhY2l0eUluZm9zIiwgMik7
CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2RW1pc3NpdmVJbmZvcyIsIDIpOworICAgICAgICB1
Ym8uYWRkVW5pZm9ybSgidkxpZ2h0bWFwSW5mb3MiLCAyKTsKKyAgICAgICAgdWJvLmFkZFVuaWZv
cm0oInZSZWZsZWN0aXZpdHlJbmZvcyIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidk1p
Y3JvU3VyZmFjZVNhbXBsZXJJbmZvcyIsIDIpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlJl
ZmxlY3Rpb25JbmZvcyIsIDIpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlJlZmxlY3Rpb25Q
b3NpdGlvbiIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlJlZmxlY3Rpb25TaXplIiwg
Myk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2QnVtcEluZm9zIiwgMyk7CisgICAgICAgIHVi
by5hZGRVbmlmb3JtKCJhbGJlZG9NYXRyaXgiLCAxNik7CisgICAgICAgIHViby5hZGRVbmlmb3Jt
KCJhbWJpZW50TWF0cml4IiwgMTYpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgib3BhY2l0eU1h
dHJpeCIsIDE2KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oImVtaXNzaXZlTWF0cml4IiwgMTYp
OworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgibGlnaHRtYXBNYXRyaXgiLCAxNik7CisgICAgICAg
IHViby5hZGRVbmlmb3JtKCJyZWZsZWN0aXZpdHlNYXRyaXgiLCAxNik7CisgICAgICAgIHViby5h
ZGRVbmlmb3JtKCJtaWNyb1N1cmZhY2VTYW1wbGVyTWF0cml4IiwgMTYpOworICAgICAgICB1Ym8u
YWRkVW5pZm9ybSgiYnVtcE1hdHJpeCIsIDE2KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZU
YW5nZW50U3BhY2VQYXJhbXMiLCAyKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInJlZmxlY3Rp
b25NYXRyaXgiLCAxNik7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2UmVmbGVjdGlvbkNvbG9y
IiwgMyk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2QWxiZWRvQ29sb3IiLCA0KTsKKyAgICAg
ICAgdWJvLmFkZFVuaWZvcm0oInZMaWdodGluZ0ludGVuc2l0eSIsIDQpOworICAgICAgICB1Ym8u
YWRkVW5pZm9ybSgidlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcyIsIDQpOworICAgICAgICB1
Ym8uYWRkVW5pZm9ybSgicG9pbnRTaXplIiwgMSk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2
UmVmbGVjdGl2aXR5Q29sb3IiLCA0KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZFbWlzc2l2
ZUNvbG9yIiwgMyk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2RXllUG9zaXRpb24iLCA0KTsK
KyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZBbWJpZW50Q29sb3IiLCAzKTsKKyAgICAgICAgdWJv
LmFkZFVuaWZvcm0oInZEZWJ1Z01vZGUiLCAyKTsKKyAgICAgICAgX3BickNsZWFyQ29hdENvbmZp
Z3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUEJSQ2xlYXJDb2F0Q29uZmln
dXJhdGlvbiJdLlByZXBhcmVVbmlmb3JtQnVmZmVyKHVibyk7CisgICAgICAgIF9wYnJBbmlzb3Ry
b3BpY0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUEJSQW5pc290
cm9waWNDb25maWd1cmF0aW9uIl0uUHJlcGFyZVVuaWZvcm1CdWZmZXIodWJvKTsKKyAgICAgICAg
X3BiclNoZWVuQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siUEJS
U2hlZW5Db25maWd1cmF0aW9uIl0uUHJlcGFyZVVuaWZvcm1CdWZmZXIodWJvKTsKKyAgICAgICAg
X3BiclN1YlN1cmZhY2VDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9f
WyJQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbiJdLlByZXBhcmVVbmlmb3JtQnVmZmVyKHVibyk7
CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2U3BoZXJpY2FsTDAwIiwgMyk7CisgICAgICAgIHVi
by5hZGRVbmlmb3JtKCJ2U3BoZXJpY2FsTDFfMSIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9y
bSgidlNwaGVyaWNhbEwxMCIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlNwaGVyaWNh
bEwxMSIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlNwaGVyaWNhbEwyXzIiLCAzKTsK
KyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZTcGhlcmljYWxMMl8xIiwgMyk7CisgICAgICAgIHVi
by5hZGRVbmlmb3JtKCJ2U3BoZXJpY2FsTDIwIiwgMyk7CisgICAgICAgIHViby5hZGRVbmlmb3Jt
KCJ2U3BoZXJpY2FsTDIxIiwgMyk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2U3BoZXJpY2Fs
TDIyIiwgMyk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2U3BoZXJpY2FsWCIsIDMpOworICAg
ICAgICB1Ym8uYWRkVW5pZm9ybSgidlNwaGVyaWNhbFkiLCAzKTsKKyAgICAgICAgdWJvLmFkZFVu
aWZvcm0oInZTcGhlcmljYWxaIiwgMyk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2U3BoZXJp
Y2FsWFhfWloiLCAzKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZTcGhlcmljYWxZWV9aWiIs
IDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlNwaGVyaWNhbFpaIiwgMyk7CisgICAgICAg
IHViby5hZGRVbmlmb3JtKCJ2U3BoZXJpY2FsWFkiLCAzKTsKKyAgICAgICAgdWJvLmFkZFVuaWZv
cm0oInZTcGhlcmljYWxZWiIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidlNwaGVyaWNh
bFpYIiwgMyk7CisgICAgICAgIHViby5fdW5pZm9ybUxvY2F0aW9ucyA9IHt2QWxiZWRvSW5mb3M6
IDAsCisgICAgICAgIHZBbWJpZW50SW5mb3M6IDQsCisgICAgICAgIHZPcGFjaXR5SW5mb3M6IDgs
CisgICAgICAgIHZFbWlzc2l2ZUluZm9zOiAxMCwKKyAgICAgICAgdkxpZ2h0bWFwSW5mb3M6IDEy
LAorICAgICAgICB2UmVmbGVjdGl2aXR5SW5mb3M6IDE2LAorICAgICAgICB2TWljcm9TdXJmYWNl
U2FtcGxlckluZm9zOiAyMCwKKyAgICAgICAgdlJlZmxlY3Rpb25JbmZvczogMjIsCisgICAgICAg
IHZSZWZsZWN0aW9uUG9zaXRpb246IDI0LAorICAgICAgICB2UmVmbGVjdGlvblNpemU6IDI4LAor
ICAgICAgICB2QnVtcEluZm9zOiAzMiwKKyAgICAgICAgYWxiZWRvTWF0cml4OiAzNiwKKyAgICAg
ICAgYW1iaWVudE1hdHJpeDogNTIsCisgICAgICAgIG9wYWNpdHlNYXRyaXg6IDY4LAorICAgICAg
ICBlbWlzc2l2ZU1hdHJpeDogODQsCisgICAgICAgIGxpZ2h0bWFwTWF0cml4OiAxMDAsCisgICAg
ICAgIHJlZmxlY3Rpdml0eU1hdHJpeDogMTE2LAorICAgICAgICBtaWNyb1N1cmZhY2VTYW1wbGVy
TWF0cml4OiAxMzIsCisgICAgICAgIGJ1bXBNYXRyaXg6IDE0OCwKKyAgICAgICAgdlRhbmdlbnRT
cGFjZVBhcmFtczogMTY0LAorICAgICAgICByZWZsZWN0aW9uTWF0cml4OiAxNjYsCisgICAgICAg
IHZSZWZsZWN0aW9uQ29sb3I6IDE4NCwKKyAgICAgICAgdkFsYmVkb0NvbG9yOiAxODgsCisgICAg
ICAgIHZMaWdodGluZ0ludGVuc2l0eTogMTkyLAorICAgICAgICB2UmVmbGVjdGlvbk1pY3Jvc3Vy
ZmFjZUluZm9zOiAxOTYsCisgICAgICAgIHBvaW50U2l6ZTogMjAwLAorICAgICAgICB2UmVmbGVj
dGl2aXR5Q29sb3I6IDIwNCwKKyAgICAgICAgdkVtaXNzaXZlQ29sb3I6IDIwOCwKKyAgICAgICAg
dkV5ZVBvc2l0aW9uOiAyMTIsCisgICAgICAgIHZBbWJpZW50Q29sb3I6IDIxNiwKKyAgICAgICAg
dkRlYnVnTW9kZTogMjIwLAorICAgICAgICB2Q2xlYXJDb2F0UGFyYW1zOiAyMjIsCisgICAgICAg
IHZDbGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zOiAyMjQsCisgICAgICAgIHZDbGVhckNvYXRJbmZv
czogMjI4LAorICAgICAgICBjbGVhckNvYXRNYXRyaXg6IDIzMCwKKyAgICAgICAgdkNsZWFyQ29h
dEJ1bXBJbmZvczogMjQ2LAorICAgICAgICB2Q2xlYXJDb2F0VGFuZ2VudFNwYWNlUGFyYW1zOiAy
NDgsCisgICAgICAgIGNsZWFyQ29hdEJ1bXBNYXRyaXg6IDI1MCwKKyAgICAgICAgdkNsZWFyQ29h
dFRpbnRQYXJhbXM6IDI2OCwKKyAgICAgICAgY2xlYXJDb2F0Q29sb3JBdERpc3RhbmNlOiAyNzIs
CisgICAgICAgIHZDbGVhckNvYXRUaW50SW5mb3M6IDI3NCwKKyAgICAgICAgY2xlYXJDb2F0VGlu
dE1hdHJpeDogMjc2LAorICAgICAgICB2QW5pc290cm9weTogMjkyLAorICAgICAgICB2QW5pc290
cm9weUluZm9zOiAyOTYsCisgICAgICAgIGFuaXNvdHJvcHlNYXRyaXg6IDI5OCwKKyAgICAgICAg
dlNoZWVuQ29sb3I6IDMxNiwKKyAgICAgICAgdlNoZWVuSW5mb3M6IDMyMCwKKyAgICAgICAgc2hl
ZW5NYXRyaXg6IDMyMiwKKyAgICAgICAgdlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvczogMzQw
LAorICAgICAgICB2UmVmcmFjdGlvbkluZm9zOiAzNDQsCisgICAgICAgIHJlZnJhY3Rpb25NYXRy
aXg6IDM0OCwKKyAgICAgICAgdlRoaWNrbmVzc0luZm9zOiAzNjQsCisgICAgICAgIHRoaWNrbmVz
c01hdHJpeDogMzY2LAorICAgICAgICB2VGhpY2tuZXNzUGFyYW06IDM4MiwKKyAgICAgICAgdkRp
ZmZ1c2lvbkRpc3RhbmNlOiAzODQsCisgICAgICAgIHZUaW50Q29sb3I6IDM4OCwKKyAgICAgICAg
dlN1YlN1cmZhY2VJbnRlbnNpdHk6IDM5MiwKKyAgICAgICAgdlNwaGVyaWNhbEwwMDogMzk2LAor
ICAgICAgICB2U3BoZXJpY2FsTDFfMTogNDAwLAorICAgICAgICB2U3BoZXJpY2FsTDEwOiA0MDQs
CisgICAgICAgIHZTcGhlcmljYWxMMTE6IDQwOCwKKyAgICAgICAgdlNwaGVyaWNhbEwyXzI6IDQx
MiwKKyAgICAgICAgdlNwaGVyaWNhbEwyXzE6IDQxNiwKKyAgICAgICAgdlNwaGVyaWNhbEwyMDog
NDIwLAorICAgICAgICB2U3BoZXJpY2FsTDIxOiA0MjQsCisgICAgICAgIHZTcGhlcmljYWxMMjI6
IDQyOCwKKyAgICAgICAgdlNwaGVyaWNhbFg6IDQzMiwKKyAgICAgICAgdlNwaGVyaWNhbFk6IDQz
NiwKKyAgICAgICAgdlNwaGVyaWNhbFo6IDQ0MCwKKyAgICAgICAgdlNwaGVyaWNhbFhYX1paOiA0
NDQsCisgICAgICAgIHZTcGhlcmljYWxZWV9aWjogNDQ4LAorICAgICAgICB2U3BoZXJpY2FsWlo6
IDQ1MiwKKyAgICAgICAgdlNwaGVyaWNhbFhZOiA0NTYsCisgICAgICAgIHZTcGhlcmljYWxZWjog
NDYwLAorICAgICAgICB2U3BoZXJpY2FsWlg6IDQ2NH07CisgICAgICAgIHViby5fZGF0YSA9IEFy
cmF5KDQ2OCkuZmlsbCgwKTsKKyAgICAgICAgdWJvLmNyZWF0ZSgpOworICAgIH07CisgICAgLyoq
CisgICAgICogVW5iaW5kcyB0aGUgbWF0ZXJpYWwgZnJvbSB0aGUgbWVzaAorICAgICAqLworICAg
IFBCUkJhc2VNYXRlcmlhbC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAodGhpcy5fYWN0aXZlRWZmZWN0KSB7CisgICAgICAgICAgICB2YXIgbmVlZEZsYWcgPSBm
YWxzZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSAmJiB0aGlzLl9y
ZWZsZWN0aW9uVGV4dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIHRoaXMu
X2FjdGl2ZUVmZmVjdC5zZXRUZXh0dXJlKCJyZWZsZWN0aW9uMkRTYW1wbGVyIiwgbnVsbCk7Cisg
ICAgICAgICAgICAgICAgbmVlZEZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHRoaXMuc3ViU3VyZmFjZS51bmJpbmQodGhpcy5fYWN0aXZlRWZmZWN0KSkgeworICAg
ICAgICAgICAgICAgIG5lZWRGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChuZWVkRmxhZykgeworICAgICAgICAgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNB
c1RleHR1cmVzRGlydHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBfc3Vw
ZXIucHJvdG90eXBlLnVuYmluZC5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICog
QmluZHMgdGhlIHN1Ym1lc2ggZGF0YS4KKyAgICAgKiBAcGFyYW0gd29ybGQgLSBUaGUgd29ybGQg
bWF0cml4LgorICAgICAqIEBwYXJhbSBtZXNoIC0gVGhlIEJKUyBtZXNoLgorICAgICAqIEBwYXJh
bSBzdWJNZXNoIC0gQSBzdWJtZXNoIG9mIHRoZSBCSlMgbWVzaC4KKyAgICAgKi8KKyAgICBQQlJC
YXNlTWF0ZXJpYWwucHJvdG90eXBlLmJpbmRGb3JTdWJNZXNoID0gZnVuY3Rpb24gKHdvcmxkLCBt
ZXNoLCBzdWJNZXNoKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAg
ICAgICAgdmFyIGRlZmluZXMgPSBzdWJNZXNoLl9tYXRlcmlhbERlZmluZXM7CisgICAgICAgIGlm
ICghZGVmaW5lcykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZh
ciBlZmZlY3QgPSBzdWJNZXNoLmVmZmVjdDsKKyAgICAgICAgaWYgKCFlZmZlY3QpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hY3RpdmVFZmZlY3QgPSBl
ZmZlY3Q7CisgICAgICAgIC8vIE1hdHJpY2VzIE1lc2guCisgICAgICAgIG1lc2guZ2V0TWVzaFVu
aWZvcm1CdWZmZXIoKS5iaW5kVG9FZmZlY3QoZWZmZWN0LCAiTWVzaCIpOworICAgICAgICBtZXNo
LnRyYW5zZmVyVG9FZmZlY3Qod29ybGQpOworICAgICAgICAvLyBNYXRyaWNlcworICAgICAgICBp
ZiAoIWRlZmluZXMuSU5TVEFOQ0VTKSB7CisgICAgICAgICAgICB0aGlzLmJpbmRPbmx5V29ybGRN
YXRyaXgod29ybGQpOworICAgICAgICB9CisgICAgICAgIC8vIE5vcm1hbCBNYXRyaXgKKyAgICAg
ICAgaWYgKGRlZmluZXMuT0JKRUNUU1BBQ0VfTk9STUFMTUFQKSB7CisgICAgICAgICAgICB3b3Js
ZC50b05vcm1hbE1hdHJpeCh0aGlzLl9ub3JtYWxNYXRyaXgpOworICAgICAgICAgICAgdGhpcy5i
aW5kT25seU5vcm1hbE1hdHJpeCh0aGlzLl9ub3JtYWxNYXRyaXgpOworICAgICAgICB9CisgICAg
ICAgIHZhciBtdXN0UmViaW5kID0gdGhpcy5fbXVzdFJlYmluZChzY2VuZSwgZWZmZWN0LCBtZXNo
LnZpc2liaWxpdHkpOworICAgICAgICAvLyBCb25lcworICAgICAgICBfTWF0ZXJpYWxzX21hdGVy
aWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRlcmlhbEhlbHBlciJd
LkJpbmRCb25lc1BhcmFtZXRlcnMobWVzaCwgdGhpcy5fYWN0aXZlRWZmZWN0KTsKKyAgICAgICAg
dmFyIHJlZmxlY3Rpb25UZXh0dXJlID0gbnVsbDsKKyAgICAgICAgdmFyIHVibyA9IHRoaXMuX3Vu
aWZvcm1CdWZmZXI7CisgICAgICAgIGlmIChtdXN0UmViaW5kKSB7CisgICAgICAgICAgICB2YXIg
ZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgICAgICB1Ym8uYmluZFRvRWZmZWN0
KGVmZmVjdCwgIk1hdGVyaWFsIik7CisgICAgICAgICAgICB0aGlzLmJpbmRWaWV3UHJvamVjdGlv
bihlZmZlY3QpOworICAgICAgICAgICAgcmVmbGVjdGlvblRleHR1cmUgPSB0aGlzLl9nZXRSZWZs
ZWN0aW9uVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCF1Ym8udXNlVWJvIHx8ICF0aGlzLmlz
RnJvemVuIHx8ICF1Ym8uaXNTeW5jKSB7CisgICAgICAgICAgICAgICAgLy8gVGV4dHVyZSB1bmlm
b3JtcworICAgICAgICAgICAgICAgIGlmIChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuX2FsYmVkb1RleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5EaWZmdXNlVGV4
dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDIo
InZBbGJlZG9JbmZvcyIsIHRoaXMuX2FsYmVkb1RleHR1cmUuY29vcmRpbmF0ZXNJbmRleCwgdGhp
cy5fYWxiZWRvVGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0ZXJp
YWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRlcmlh
bEhlbHBlciJdLkJpbmRUZXh0dXJlTWF0cml4KHRoaXMuX2FsYmVkb1RleHR1cmUsIHVibywgImFs
YmVkbyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9hbWJpZW50VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkFtYmllbnRUZXh0dXJlRW5hYmxlZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUZsb2F0NCgidkFtYmllbnRJbmZvcyIsIHRo
aXMuX2FtYmllbnRUZXh0dXJlLmNvb3JkaW5hdGVzSW5kZXgsIHRoaXMuX2FtYmllbnRUZXh0dXJl
LmxldmVsLCB0aGlzLl9hbWJpZW50VGV4dHVyZVN0cmVuZ3RoLCB0aGlzLl9hbWJpZW50VGV4dHVy
ZUltcGFjdE9uQW5hbHl0aWNhbExpZ2h0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0
ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRl
cmlhbEhlbHBlciJdLkJpbmRUZXh0dXJlTWF0cml4KHRoaXMuX2FtYmllbnRUZXh0dXJlLCB1Ym8s
ICJhbWJpZW50Iik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX29wYWNpdHlUZXh0dXJlICYmIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMF9fWyJNYXRlcmlhbEZsYWdzIl0uT3BhY2l0eVRleHR1cmVFbmFibGVkKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlRmxvYXQyKCJ2T3BhY2l0eUluZm9z
IiwgdGhpcy5fb3BhY2l0eVRleHR1cmUuY29vcmRpbmF0ZXNJbmRleCwgdGhpcy5fb3BhY2l0eVRl
eHR1cmUubGV2ZWwpOworICAgICAgICAgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlh
bEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5C
aW5kVGV4dHVyZU1hdHJpeCh0aGlzLl9vcGFjaXR5VGV4dHVyZSwgdWJvLCAib3BhY2l0eSIpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWZsZWN0aW9u
VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1si
TWF0ZXJpYWxGbGFncyJdLlJlZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdWJvLnVwZGF0ZU1hdHJpeCgicmVmbGVjdGlvbk1hdHJpeCIsIHJlZmxlY3Rp
b25UZXh0dXJlLmdldFJlZmxlY3Rpb25UZXh0dXJlTWF0cml4KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdWJvLnVwZGF0ZUZsb2F0MigidlJlZmxlY3Rpb25JbmZvcyIsIHJlZmxlY3Rpb25U
ZXh0dXJlLmxldmVsLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZsZWN0aW9u
VGV4dHVyZS5ib3VuZGluZ0JveFNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgY3ViZVRleHR1cmUgPSByZWZsZWN0aW9uVGV4dHVyZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1Ym8udXBkYXRlVmVjdG9yMygidlJlZmxlY3Rpb25Qb3NpdGlvbiIsIGN1YmVUZXh0
dXJlLmJvdW5kaW5nQm94UG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVi
by51cGRhdGVWZWN0b3IzKCJ2UmVmbGVjdGlvblNpemUiLCBjdWJlVGV4dHVyZS5ib3VuZGluZ0Jv
eFNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFkZWZpbmVzLlVTRUlSUkFESUFOQ0VNQVApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcG9seW5vbWlhbHMgPSByZWZsZWN0aW9uVGV4dHVyZS5zcGhlcmljYWxQb2x5
bm9taWFsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzLlVTRVNQSEVS
SUNBTEZST01SRUZMRUNUSU9OTUFQICYmIHBvbHlub21pYWxzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzLlNQSEVSSUNBTF9IQVJNT05JQ1MpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVTY2FsZWRIYXJtb25pY3MgPSBw
b2x5bm9taWFscy5wcmVTY2FsZWRIYXJtb25pY3M7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1Ym8udXBkYXRlVmVjdG9yMygidlNwaGVyaWNhbEwwMCIsIHByZVNjYWxlZEhh
cm1vbmljcy5sMDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnVw
ZGF0ZVZlY3RvcjMoInZTcGhlcmljYWxMMV8xIiwgcHJlU2NhbGVkSGFybW9uaWNzLmwxXzEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZVZlY3RvcjMoInZT
cGhlcmljYWxMMTAiLCBwcmVTY2FsZWRIYXJtb25pY3MubDEwKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVWZWN0b3IzKCJ2U3BoZXJpY2FsTDExIiwgcHJl
U2NhbGVkSGFybW9uaWNzLmwxMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1Ym8udXBkYXRlVmVjdG9yMygidlNwaGVyaWNhbEwyXzIiLCBwcmVTY2FsZWRIYXJtb25pY3Mu
bDJfMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlVmVj
dG9yMygidlNwaGVyaWNhbEwyXzEiLCBwcmVTY2FsZWRIYXJtb25pY3MubDJfMSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlVmVjdG9yMygidlNwaGVyaWNh
bEwyMCIsIHByZVNjYWxlZEhhcm1vbmljcy5sMjApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWJvLnVwZGF0ZVZlY3RvcjMoInZTcGhlcmljYWxMMjEiLCBwcmVTY2FsZWRI
YXJtb25pY3MubDIxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHViby51
cGRhdGVWZWN0b3IzKCJ2U3BoZXJpY2FsTDIyIiwgcHJlU2NhbGVkSGFybW9uaWNzLmwyMik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Ym8u
dXBkYXRlRmxvYXQzKCJ2U3BoZXJpY2FsWCIsIHBvbHlub21pYWxzLngueCwgcG9seW5vbWlhbHMu
eC55LCBwb2x5bm9taWFscy54LnopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWJvLnVwZGF0ZUZsb2F0MygidlNwaGVyaWNhbFkiLCBwb2x5bm9taWFscy55LngsIHBvbHlu
b21pYWxzLnkueSwgcG9seW5vbWlhbHMueS56KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHViby51cGRhdGVGbG9hdDMoInZTcGhlcmljYWxaIiwgcG9seW5vbWlhbHMuei54
LCBwb2x5bm9taWFscy56LnksIHBvbHlub21pYWxzLnoueik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlRmxvYXQzKCJ2U3BoZXJpY2FsWFhfWloiLCBwb2x5
bm9taWFscy54eC54IC0gcG9seW5vbWlhbHMuenoueCwgcG9seW5vbWlhbHMueHgueSAtIHBvbHlu
b21pYWxzLnp6LnksIHBvbHlub21pYWxzLnh4LnogLSBwb2x5bm9taWFscy56ei56KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDMoInZTcGhlcmlj
YWxZWV9aWiIsIHBvbHlub21pYWxzLnl5LnggLSBwb2x5bm9taWFscy56ei54LCBwb2x5bm9taWFs
cy55eS55IC0gcG9seW5vbWlhbHMuenoueSwgcG9seW5vbWlhbHMueXkueiAtIHBvbHlub21pYWxz
Lnp6LnopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUZs
b2F0MygidlNwaGVyaWNhbFpaIiwgcG9seW5vbWlhbHMuenoueCwgcG9seW5vbWlhbHMuenoueSwg
cG9seW5vbWlhbHMuenoueik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
Ym8udXBkYXRlRmxvYXQzKCJ2U3BoZXJpY2FsWFkiLCBwb2x5bm9taWFscy54eS54LCBwb2x5bm9t
aWFscy54eS55LCBwb2x5bm9taWFscy54eS56KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHViby51cGRhdGVGbG9hdDMoInZTcGhlcmljYWxZWiIsIHBvbHlub21pYWxzLnl6
LngsIHBvbHlub21pYWxzLnl6LnksIHBvbHlub21pYWxzLnl6LnopOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUZsb2F0MygidlNwaGVyaWNhbFpYIiwgcG9s
eW5vbWlhbHMuengueCwgcG9seW5vbWlhbHMuengueSwgcG9seW5vbWlhbHMuengueik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB1
Ym8udXBkYXRlRmxvYXQzKCJ2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zIiwgcmVmbGVjdGlv
blRleHR1cmUuZ2V0U2l6ZSgpLndpZHRoLCByZWZsZWN0aW9uVGV4dHVyZS5sb2RHZW5lcmF0aW9u
U2NhbGUsIHJlZmxlY3Rpb25UZXh0dXJlLmxvZEdlbmVyYXRpb25PZmZzZXQpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRleHR1
cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIk1hdGVy
aWFsRmxhZ3MiXS5FbWlzc2l2ZVRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB1Ym8udXBkYXRlRmxvYXQyKCJ2RW1pc3NpdmVJbmZvcyIsIHRoaXMuX2VtaXNzaXZlVGV4
dHVyZS5jb29yZGluYXRlc0luZGV4LCB0aGlzLl9lbWlzc2l2ZVRleHR1cmUubGV2ZWwpOworICAg
ICAgICAgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kVGV4dHVyZU1hdHJpeCh0
aGlzLl9lbWlzc2l2ZVRleHR1cmUsIHVibywgImVtaXNzaXZlIik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSAmJiBf
bWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFn
cyJdLkxpZ2h0bWFwVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVi
by51cGRhdGVGbG9hdDIoInZMaWdodG1hcEluZm9zIiwgdGhpcy5fbGlnaHRtYXBUZXh0dXJlLmNv
b3JkaW5hdGVzSW5kZXgsIHRoaXMuX2xpZ2h0bWFwVGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRUZXh0dXJlTWF0cml4KHRoaXMuX2xp
Z2h0bWFwVGV4dHVyZSwgdWJvLCAibGlnaHRtYXAiKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAoX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIwX19bIk1hdGVyaWFsRmxhZ3MiXS5TcGVjdWxhclRleHR1cmVFbmFibGVkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWxsaWNUZXh0dXJlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUZsb2F0MygidlJlZmxlY3Rpdml0eUlu
Zm9zIiwgdGhpcy5fbWV0YWxsaWNUZXh0dXJlLmNvb3JkaW5hdGVzSW5kZXgsIHRoaXMuX21ldGFs
bGljVGV4dHVyZS5sZXZlbCwgdGhpcy5fYW1iaWVudFRleHR1cmVTdHJlbmd0aCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kVGV4dHVyZU1hdHJpeCh0
aGlzLl9tZXRhbGxpY1RleHR1cmUsIHVibywgInJlZmxlY3Rpdml0eSIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fcmVm
bGVjdGl2aXR5VGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRh
dGVGbG9hdDMoInZSZWZsZWN0aXZpdHlJbmZvcyIsIHRoaXMuX3JlZmxlY3Rpdml0eVRleHR1cmUu
Y29vcmRpbmF0ZXNJbmRleCwgdGhpcy5fcmVmbGVjdGl2aXR5VGV4dHVyZS5sZXZlbCwgMS4wKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRUZXh0dXJl
TWF0cml4KHRoaXMuX3JlZmxlY3Rpdml0eVRleHR1cmUsIHVibywgInJlZmxlY3Rpdml0eSIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX21pY3JvU3VyZmFjZVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
Ym8udXBkYXRlRmxvYXQyKCJ2TWljcm9TdXJmYWNlU2FtcGxlckluZm9zIiwgdGhpcy5fbWljcm9T
dXJmYWNlVGV4dHVyZS5jb29yZGluYXRlc0luZGV4LCB0aGlzLl9taWNyb1N1cmZhY2VUZXh0dXJl
LmxldmVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFs
SGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLkJp
bmRUZXh0dXJlTWF0cml4KHRoaXMuX21pY3JvU3VyZmFjZVRleHR1cmUsIHVibywgIm1pY3JvU3Vy
ZmFjZVNhbXBsZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYnVtcFRleHR1cmUgJiYgZW5n
aW5lLmdldENhcHMoKS5zdGFuZGFyZERlcml2YXRpdmVzICYmIF9tYXRlcmlhbEZsYWdzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJNYXRlcmlhbEZsYWdzIl0uQnVtcFRleHR1cmVFbmFi
bGVkICYmICF0aGlzLl9kaXNhYmxlQnVtcE1hcCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dWJvLnVwZGF0ZUZsb2F0MygidkJ1bXBJbmZvcyIsIHRoaXMuX2J1bXBUZXh0dXJlLmNvb3JkaW5h
dGVzSW5kZXgsIHRoaXMuX2J1bXBUZXh0dXJlLmxldmVsLCB0aGlzLl9wYXJhbGxheFNjYWxlQmlh
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRUZXh0dXJl
TWF0cml4KHRoaXMuX2J1bXBUZXh0dXJlLCB1Ym8sICJidW1wIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc2NlbmUuX21pcnJvcmVkQ2FtZXJhUG9zaXRpb24pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlRmxvYXQyKCJ2VGFuZ2VudFNwYWNlUGFyYW1zIiwg
dGhpcy5faW52ZXJ0Tm9ybWFsTWFwWCA/IDEuMCA6IC0xLjAsIHRoaXMuX2ludmVydE5vcm1hbE1h
cFkgPyAxLjAgOiAtMS4wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRh
dGVGbG9hdDIoInZUYW5nZW50U3BhY2VQYXJhbXMiLCB0aGlzLl9pbnZlcnROb3JtYWxNYXBYID8g
LTEuMCA6IDEuMCwgdGhpcy5faW52ZXJ0Tm9ybWFsTWFwWSA/IC0xLjAgOiAxLjApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vIFBvaW50IHNpemUKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5wb2ludHNDbG91ZCkgeworICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlRmxvYXQo
InBvaW50U2l6ZSIsIHRoaXMucG9pbnRTaXplKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgLy8gQ29sb3JzCisgICAgICAgICAgICAgICAgaWYgKGRlZmluZXMuTUVUQUxMSUNX
T1JLRkxPVykgeworICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTNfX1siVG1wQ29sb3JzIl0uQ29sb3IzWzBdLnIgPSAodGhpcy5f
bWV0YWxsaWMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9tZXRhbGxpYyA9PT0gbnVsbCkgPyAxIDog
dGhpcy5fbWV0YWxsaWM7CisgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX2NvbG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJUbXBDb2xvcnMiXS5Db2xvcjNbMF0uZyA9ICh0
aGlzLl9yb3VnaG5lc3MgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9yb3VnaG5lc3MgPT09IG51bGwp
ID8gMSA6IHRoaXMuX3JvdWdobmVzczsKKyAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUNv
bG9yNCgidlJlZmxlY3Rpdml0eUNvbG9yIiwgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEzX19bIlRtcENvbG9ycyJdLkNvbG9yM1swXSwgMCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1Ym8u
dXBkYXRlQ29sb3I0KCJ2UmVmbGVjdGl2aXR5Q29sb3IiLCB0aGlzLl9yZWZsZWN0aXZpdHlDb2xv
ciwgdGhpcy5fbWljcm9TdXJmYWNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdWJvLnVwZGF0ZUNvbG9yMygidkVtaXNzaXZlQ29sb3IiLCBfbWF0ZXJpYWxGbGFnc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkVtaXNzaXZlVGV4dHVy
ZUVuYWJsZWQgPyB0aGlzLl9lbWlzc2l2ZUNvbG9yIDogX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkNvbG9yMyJdLkJsYWNrUmVhZE9ubHkpOworICAgICAg
ICAgICAgICAgIHViby51cGRhdGVDb2xvcjMoInZSZWZsZWN0aW9uQ29sb3IiLCB0aGlzLl9yZWZs
ZWN0aW9uQ29sb3IpOworICAgICAgICAgICAgICAgIGlmICghZGVmaW5lcy5TU19SRUZSQUNUSU9O
ICYmIHRoaXMuc3ViU3VyZmFjZS5saW5rUmVmcmFjdGlvbldpdGhUcmFuc3BhcmVuY3kpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUNvbG9yNCgidkFsYmVkb0NvbG9yIiwgdGhpcy5f
YWxiZWRvQ29sb3IsIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUNvbG9yNCgidkFsYmVkb0NvbG9yIiwg
dGhpcy5fYWxiZWRvQ29sb3IsIHRoaXMuYWxwaGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAvLyBNaXNjCisgICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRpbmdJbmZvcy54
ID0gdGhpcy5fZGlyZWN0SW50ZW5zaXR5OworICAgICAgICAgICAgICAgIHRoaXMuX2xpZ2h0aW5n
SW5mb3MueSA9IHRoaXMuX2VtaXNzaXZlSW50ZW5zaXR5OworICAgICAgICAgICAgICAgIHRoaXMu
X2xpZ2h0aW5nSW5mb3MueiA9IHRoaXMuX2Vudmlyb25tZW50SW50ZW5zaXR5ICogc2NlbmUuZW52
aXJvbm1lbnRJbnRlbnNpdHk7CisgICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRpbmdJbmZvcy53
ID0gdGhpcy5fc3BlY3VsYXJJbnRlbnNpdHk7CisgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZVZl
Y3RvcjQoInZMaWdodGluZ0ludGVuc2l0eSIsIHRoaXMuX2xpZ2h0aW5nSW5mb3MpOworICAgICAg
ICAgICAgICAgIC8vIENvbG9ycworICAgICAgICAgICAgICAgIHNjZW5lLmFtYmllbnRDb2xvci5t
dWx0aXBseVRvUmVmKHRoaXMuX2FtYmllbnRDb2xvciwgdGhpcy5fZ2xvYmFsQW1iaWVudENvbG9y
KTsKKyAgICAgICAgICAgICAgICB2YXIgZXllUG9zaXRpb24gPSBzY2VuZS5fZm9yY2VkVmlld1Bv
c2l0aW9uID8gc2NlbmUuX2ZvcmNlZFZpZXdQb3NpdGlvbiA6IChzY2VuZS5fbWlycm9yZWRDYW1l
cmFQb3NpdGlvbiA/IHNjZW5lLl9taXJyb3JlZENhbWVyYVBvc2l0aW9uIDogc2NlbmUuYWN0aXZl
Q2FtZXJhLmdsb2JhbFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICB2YXIgaW52ZXJ0Tm9ybWFs
ID0gKHNjZW5lLnVzZVJpZ2h0SGFuZGVkU3lzdGVtID09PSAoc2NlbmUuX21pcnJvcmVkQ2FtZXJh
UG9zaXRpb24gIT0gbnVsbCkpOworICAgICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDQoInZF
eWVQb3NpdGlvbiIsIGV5ZVBvc2l0aW9uLngsIGV5ZVBvc2l0aW9uLnksIGV5ZVBvc2l0aW9uLnos
IGludmVydE5vcm1hbCA/IC0xIDogMSk7CisgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUNvbG9y
MygidkFtYmllbnRDb2xvciIsIHRoaXMuX2dsb2JhbEFtYmllbnRDb2xvcik7CisgICAgICAgICAg
ICAgICAgdWJvLnVwZGF0ZUZsb2F0MigidkRlYnVnTW9kZSIsIHRoaXMuZGVidWdMaW1pdCwgdGhp
cy5kZWJ1Z0ZhY3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUZXh0dXJlcwor
ICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9hbGJlZG9UZXh0dXJlICYmIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMF9fWyJNYXRlcmlhbEZsYWdzIl0uRGlmZnVzZVRleHR1cmVFbmFibGVkKSB7
CisgICAgICAgICAgICAgICAgICAgIHViby5zZXRUZXh0dXJlKCJhbGJlZG9TYW1wbGVyIiwgdGhp
cy5fYWxiZWRvVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICh0aGlzLl9hbWJpZW50VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkFtYmllbnRUZXh0dXJlRW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgICAgICB1Ym8uc2V0VGV4dHVyZSgiYW1iaWVudFNhbXBsZXIiLCB0aGlz
Ll9hbWJpZW50VGV4dHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICh0aGlzLl9vcGFjaXR5VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLk9wYWNpdHlUZXh0dXJlRW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgICAgICB1Ym8uc2V0VGV4dHVyZSgib3BhY2l0eVNhbXBsZXIiLCB0aGlz
Ll9vcGFjaXR5VGV4dHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChyZWZsZWN0aW9uVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLlJlZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoZGVmaW5lcy5MT0RCQVNFRE1JQ1JPU0ZVUkFDRSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnNldFRleHR1cmUoInJlZmxlY3Rpb25TYW1wbGVy
IiwgcmVmbGVjdGlvblRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnNldFRleHR1cmUo
InJlZmxlY3Rpb25TYW1wbGVyIiwgcmVmbGVjdGlvblRleHR1cmUuX2xvZFRleHR1cmVNaWQgfHwg
cmVmbGVjdGlvblRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnNldFRleHR1
cmUoInJlZmxlY3Rpb25TYW1wbGVyTG93IiwgcmVmbGVjdGlvblRleHR1cmUuX2xvZFRleHR1cmVM
b3cgfHwgcmVmbGVjdGlvblRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnNl
dFRleHR1cmUoInJlZmxlY3Rpb25TYW1wbGVySGlnaCIsIHJlZmxlY3Rpb25UZXh0dXJlLl9sb2RU
ZXh0dXJlSGlnaCB8fCByZWZsZWN0aW9uVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmluZXMuVVNFSVJSQURJQU5DRU1BUCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdWJvLnNldFRleHR1cmUoImlycmFkaWFuY2VTYW1wbGVyIiwg
cmVmbGVjdGlvblRleHR1cmUuaXJyYWRpYW5jZVRleHR1cmUpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzLkVOVklS
T05NRU5UQlJERikgeworICAgICAgICAgICAgICAgICAgICB1Ym8uc2V0VGV4dHVyZSgiZW52aXJv
bm1lbnRCcmRmU2FtcGxlciIsIHRoaXMuX2Vudmlyb25tZW50QlJERlRleHR1cmUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fZW1pc3NpdmVUZXh0dXJlICYm
IF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJNYXRlcmlhbEZs
YWdzIl0uRW1pc3NpdmVUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICB1Ym8u
c2V0VGV4dHVyZSgiZW1pc3NpdmVTYW1wbGVyIiwgdGhpcy5fZW1pc3NpdmVUZXh0dXJlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xpZ2h0bWFwVGV4dHVy
ZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJp
YWxGbGFncyJdLkxpZ2h0bWFwVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
dWJvLnNldFRleHR1cmUoImxpZ2h0bWFwU2FtcGxlciIsIHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChfbWF0ZXJpYWxGbGFnc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLlNwZWN1bGFyVGV4
dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFsbGljVGV4
dHVyZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnNldFRleHR1cmUoInJlZmxlY3Rp
dml0eVNhbXBsZXIiLCB0aGlzLl9tZXRhbGxpY1RleHR1cmUpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3JlZmxlY3Rpdml0eVRleHR1
cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHViby5zZXRUZXh0dXJlKCJyZWZsZWN0aXZp
dHlTYW1wbGVyIiwgdGhpcy5fcmVmbGVjdGl2aXR5VGV4dHVyZSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21pY3JvU3VyZmFjZVRleHR1cmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHViby5zZXRUZXh0dXJlKCJtaWNyb1N1cmZhY2VT
YW1wbGVyIiwgdGhpcy5fbWljcm9TdXJmYWNlVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2J1bXBUZXh0
dXJlICYmIGVuZ2luZS5nZXRDYXBzKCkuc3RhbmRhcmREZXJpdmF0aXZlcyAmJiBfbWF0ZXJpYWxG
bGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siTWF0ZXJpYWxGbGFncyJdLkJ1bXBU
ZXh0dXJlRW5hYmxlZCAmJiAhdGhpcy5fZGlzYWJsZUJ1bXBNYXApIHsKKyAgICAgICAgICAgICAg
ICAgICAgdWJvLnNldFRleHR1cmUoImJ1bXBTYW1wbGVyIiwgdGhpcy5fYnVtcFRleHR1cmUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc3ViU3Vy
ZmFjZS5iaW5kRm9yU3ViTWVzaCh1Ym8sIHNjZW5lLCBlbmdpbmUsIHRoaXMuaXNGcm96ZW4sIGRl
ZmluZXMuTE9EQkFTRURNSUNST1NGVVJBQ0UpOworICAgICAgICAgICAgdGhpcy5jbGVhckNvYXQu
YmluZEZvclN1Yk1lc2godWJvLCBzY2VuZSwgZW5naW5lLCB0aGlzLl9kaXNhYmxlQnVtcE1hcCwg
dGhpcy5pc0Zyb3plbiwgdGhpcy5faW52ZXJ0Tm9ybWFsTWFwWCwgdGhpcy5faW52ZXJ0Tm9ybWFs
TWFwWSk7CisgICAgICAgICAgICB0aGlzLmFuaXNvdHJvcHkuYmluZEZvclN1Yk1lc2godWJvLCBz
Y2VuZSwgdGhpcy5pc0Zyb3plbik7CisgICAgICAgICAgICB0aGlzLnNoZWVuLmJpbmRGb3JTdWJN
ZXNoKHVibywgc2NlbmUsIHRoaXMuaXNGcm96ZW4pOworICAgICAgICAgICAgLy8gQ2xpcCBwbGFu
ZQorICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kQ2xpcFBsYW5lKHRoaXMuX2FjdGl2
ZUVmZmVjdCwgc2NlbmUpOworICAgICAgICB9CisgICAgICAgIGlmIChtdXN0UmViaW5kIHx8ICF0
aGlzLmlzRnJvemVuKSB7CisgICAgICAgICAgICAvLyBMaWdodHMKKyAgICAgICAgICAgIGlmIChz
Y2VuZS5saWdodHNFbmFibGVkICYmICF0aGlzLl9kaXNhYmxlTGlnaHRpbmcpIHsKKyAgICAgICAg
ICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRMaWdodHMoc2NlbmUsIG1lc2gsIHRoaXMuX2Fj
dGl2ZUVmZmVjdCwgZGVmaW5lcywgdGhpcy5fbWF4U2ltdWx0YW5lb3VzTGlnaHRzLCB0aGlzLl9s
aWdodEZhbGxvZmYgIT09IFBCUkJhc2VNYXRlcmlhbC5MSUdIVEZBTExPRkZfU1RBTkRBUkQsIHRo
aXMuX3JlYnVpbGRJblBhcmFsbGVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFZp
ZXcKKyAgICAgICAgICAgIGlmIChzY2VuZS5mb2dFbmFibGVkICYmIG1lc2guYXBwbHlGb2cgJiYg
c2NlbmUuZm9nTW9kZSAhPT0gX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNj
ZW5lIl0uRk9HTU9ERV9OT05FIHx8IHJlZmxlY3Rpb25UZXh0dXJlKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5iaW5kVmlldyhlZmZlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
Rm9nCisgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOF9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRGb2dQYXJhbWV0ZXJzKHNjZW5l
LCBtZXNoLCB0aGlzLl9hY3RpdmVFZmZlY3QsIHRydWUpOworICAgICAgICAgICAgLy8gTW9ycGgg
dGFyZ2V0cworICAgICAgICAgICAgaWYgKGRlZmluZXMuTlVNX01PUlBIX0lORkxVRU5DRVJTKSB7
CisgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMThfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kTW9ycGhUYXJnZXRQYXJhbWV0
ZXJzKG1lc2gsIHRoaXMuX2FjdGl2ZUVmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBpbWFnZSBwcm9jZXNzaW5nCisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uLmJpbmQodGhpcy5fYWN0aXZlRWZmZWN0KTsKKyAgICAgICAgICAgIC8vIExv
Zy4gZGVwdGgKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE4X19bIk1hdGVyaWFsSGVscGVyIl0uQmluZExvZ0RlcHRoKGRlZmlu
ZXMsIHRoaXMuX2FjdGl2ZUVmZmVjdCwgc2NlbmUpOworICAgICAgICB9CisgICAgICAgIHViby51
cGRhdGUoKTsKKyAgICAgICAgdGhpcy5fYWZ0ZXJCaW5kKG1lc2gsIHRoaXMuX2FjdGl2ZUVmZmVj
dCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhbmltYXRhYmxlIHRleHR1
cmVzLgorICAgICAqIEByZXR1cm5zIC0gQXJyYXkgb2YgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAg
ICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwucHJvdG90eXBlLmdldEFuaW1hdGFibGVzID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgcmVzdWx0cyA9IFtdOworICAgICAgICBpZiAodGhpcy5f
YWxiZWRvVGV4dHVyZSAmJiB0aGlzLl9hbGJlZG9UZXh0dXJlLmFuaW1hdGlvbnMgJiYgdGhpcy5f
YWxiZWRvVGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHJlc3Vs
dHMucHVzaCh0aGlzLl9hbGJlZG9UZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy5fYW1iaWVudFRleHR1cmUgJiYgdGhpcy5fYW1iaWVudFRleHR1cmUuYW5pbWF0aW9ucyAmJiB0
aGlzLl9hbWJpZW50VGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAg
IHJlc3VsdHMucHVzaCh0aGlzLl9hbWJpZW50VGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX29wYWNpdHlUZXh0dXJlICYmIHRoaXMuX29wYWNpdHlUZXh0dXJlLmFuaW1hdGlv
bnMgJiYgdGhpcy5fb3BhY2l0eVRleHR1cmUuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAg
ICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fb3BhY2l0eVRleHR1cmUpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSAmJiB0aGlzLl9yZWZsZWN0aW9uVGV4
dHVyZS5hbmltYXRpb25zICYmIHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlLmFuaW1hdGlvbnMubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMuX3JlZmxlY3Rpb25UZXh0
dXJlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZW1pc3NpdmVUZXh0dXJlICYmIHRo
aXMuX2VtaXNzaXZlVGV4dHVyZS5hbmltYXRpb25zICYmIHRoaXMuX2VtaXNzaXZlVGV4dHVyZS5h
bmltYXRpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9l
bWlzc2l2ZVRleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9tZXRhbGxpY1Rl
eHR1cmUgJiYgdGhpcy5fbWV0YWxsaWNUZXh0dXJlLmFuaW1hdGlvbnMgJiYgdGhpcy5fbWV0YWxs
aWNUZXh0dXJlLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgcmVzdWx0cy5w
dXNoKHRoaXMuX21ldGFsbGljVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
dGhpcy5fcmVmbGVjdGl2aXR5VGV4dHVyZSAmJiB0aGlzLl9yZWZsZWN0aXZpdHlUZXh0dXJlLmFu
aW1hdGlvbnMgJiYgdGhpcy5fcmVmbGVjdGl2aXR5VGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9yZWZsZWN0aXZpdHlUZXh0dXJl
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYnVtcFRleHR1cmUgJiYgdGhpcy5fYnVt
cFRleHR1cmUuYW5pbWF0aW9ucyAmJiB0aGlzLl9idW1wVGV4dHVyZS5hbmltYXRpb25zLmxlbmd0
aCA+IDApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9idW1wVGV4dHVyZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSAmJiB0aGlzLl9saWdo
dG1hcFRleHR1cmUuYW5pbWF0aW9ucyAmJiB0aGlzLl9saWdodG1hcFRleHR1cmUuYW5pbWF0aW9u
cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fbGlnaHRtYXBU
ZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnN1YlN1cmZhY2UuZ2V0QW5pbWF0YWJs
ZXMocmVzdWx0cyk7CisgICAgICAgIHRoaXMuY2xlYXJDb2F0LmdldEFuaW1hdGFibGVzKHJlc3Vs
dHMpOworICAgICAgICB0aGlzLnNoZWVuLmdldEFuaW1hdGFibGVzKHJlc3VsdHMpOworICAgICAg
ICB0aGlzLmFuaXNvdHJvcHkuZ2V0QW5pbWF0YWJsZXMocmVzdWx0cyk7CisgICAgICAgIHJldHVy
biByZXN1bHRzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdGV4dHVyZSB1
c2VkIGZvciByZWZsZWN0aW9ucy4KKyAgICAgKiBAcmV0dXJucyAtIFJlZmxlY3Rpb24gdGV4dHVy
ZSBpZiBwcmVzZW50LiAgT3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBlbnZpcm9ubWVudCB0ZXh0dXJl
LgorICAgICAqLworICAgIFBCUkJhc2VNYXRlcmlhbC5wcm90b3R5cGUuX2dldFJlZmxlY3Rpb25U
ZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fcmVmbGVjdGlvblRleHR1
cmUpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpcy5nZXRTY2VuZSgpLmVudmlyb25tZW50VGV4dHVyZTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdGhlIGFjdGl2ZWx5
IHVzZWQgdGV4dHVyZXMuCisgICAgICogQHJldHVybnMgLSBBcnJheSBvZiBCYXNlVGV4dHVyZXMK
KyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwucHJvdG90eXBlLmdldEFjdGl2ZVRleHR1cmVz
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgYWN0aXZlVGV4dHVyZXMgPSBfc3VwZXIucHJv
dG90eXBlLmdldEFjdGl2ZVRleHR1cmVzLmNhbGwodGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9h
bGJlZG9UZXh0dXJlKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMuX2Fs
YmVkb1RleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9hbWJpZW50VGV4dHVy
ZSkgeworICAgICAgICAgICAgYWN0aXZlVGV4dHVyZXMucHVzaCh0aGlzLl9hbWJpZW50VGV4dHVy
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29wYWNpdHlUZXh0dXJlKSB7CisgICAg
ICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMuX29wYWNpdHlUZXh0dXJlKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5fcmVmbGVjdGlvblRleHR1cmUpIHsKKyAgICAgICAgICAg
IGFjdGl2ZVRleHR1cmVzLnB1c2godGhpcy5fcmVmbGVjdGlvblRleHR1cmUpOworICAgICAgICB9
CisgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRleHR1cmUpIHsKKyAgICAgICAgICAgIGFjdGl2
ZVRleHR1cmVzLnB1c2godGhpcy5fZW1pc3NpdmVUZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAodGhpcy5fcmVmbGVjdGl2aXR5VGV4dHVyZSkgeworICAgICAgICAgICAgYWN0aXZlVGV4
dHVyZXMucHVzaCh0aGlzLl9yZWZsZWN0aXZpdHlUZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAodGhpcy5fbWV0YWxsaWNUZXh0dXJlKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJl
cy5wdXNoKHRoaXMuX21ldGFsbGljVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX21pY3JvU3VyZmFjZVRleHR1cmUpIHsKKyAgICAgICAgICAgIGFjdGl2ZVRleHR1cmVzLnB1
c2godGhpcy5fbWljcm9TdXJmYWNlVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX2J1bXBUZXh0dXJlKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMu
X2J1bXBUZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fbGlnaHRtYXBUZXh0
dXJlKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMuX2xpZ2h0bWFwVGV4
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zdWJTdXJmYWNlLmdldEFjdGl2ZVRleHR1
cmVzKGFjdGl2ZVRleHR1cmVzKTsKKyAgICAgICAgdGhpcy5jbGVhckNvYXQuZ2V0QWN0aXZlVGV4
dHVyZXMoYWN0aXZlVGV4dHVyZXMpOworICAgICAgICB0aGlzLnNoZWVuLmdldEFjdGl2ZVRleHR1
cmVzKGFjdGl2ZVRleHR1cmVzKTsKKyAgICAgICAgdGhpcy5hbmlzb3Ryb3B5LmdldEFjdGl2ZVRl
eHR1cmVzKGFjdGl2ZVRleHR1cmVzKTsKKyAgICAgICAgcmV0dXJuIGFjdGl2ZVRleHR1cmVzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2tzIHRvIHNlZSBpZiBhIHRleHR1cmUgaXMgdXNl
ZCBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICogQHBhcmFtIHRleHR1cmUgLSBCYXNlIHRleHR1cmUg
dG8gdXNlLgorICAgICAqIEByZXR1cm5zIC0gQm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGEgdGV4dHVy
ZSBpcyB1c2VkIGluIHRoZSBtYXRlcmlhbC4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwu
cHJvdG90eXBlLmhhc1RleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgICAgICBpZiAo
X3N1cGVyLnByb3RvdHlwZS5oYXNUZXh0dXJlLmNhbGwodGhpcywgdGV4dHVyZSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9hbGJlZG9U
ZXh0dXJlID09PSB0ZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5fYW1iaWVudFRleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9vcGFjaXR5
VGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlID09PSB0ZXh0dXJlKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmVm
bGVjdGl2aXR5VGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX21ldGFsbGljVGV4dHVyZSA9PT0gdGV4dHVy
ZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX21pY3JvU3VyZmFjZVRleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9idW1wVGV4dHVyZSA9PT0gdGV4
dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuc3ViU3VyZmFjZS5oYXNUZXh0
dXJlKHRleHR1cmUpIHx8CisgICAgICAgICAgICB0aGlzLmNsZWFyQ29hdC5oYXNUZXh0dXJlKHRl
eHR1cmUpIHx8CisgICAgICAgICAgICB0aGlzLnNoZWVuLmhhc1RleHR1cmUodGV4dHVyZSkgfHwK
KyAgICAgICAgICAgIHRoaXMuYW5pc290cm9weS5oYXNUZXh0dXJlKHRleHR1cmUpOworICAgIH07
CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhlIHJlc291cmNlcyBvZiB0aGUgbWF0ZXJpYWwu
CisgICAgICogQHBhcmFtIGZvcmNlRGlzcG9zZUVmZmVjdCAtIEZvcmNlcyB0aGUgZGlzcG9zYWwg
b2YgZWZmZWN0cy4KKyAgICAgKiBAcGFyYW0gZm9yY2VEaXNwb3NlVGV4dHVyZXMgLSBGb3JjZXMg
dGhlIGRpc3Bvc2FsIG9mIGFsbCB0ZXh0dXJlcy4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJp
YWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZm9yY2VEaXNwb3NlRWZmZWN0LCBmb3Jj
ZURpc3Bvc2VUZXh0dXJlcykgeworICAgICAgICBpZiAoZm9yY2VEaXNwb3NlVGV4dHVyZXMpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl9hbGJlZG9UZXh0dXJlKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fYWxiZWRvVGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodGhpcy5fYW1iaWVudFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9hbWJp
ZW50VGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhp
cy5fb3BhY2l0eVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9vcGFjaXR5VGV4dHVy
ZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fcmVmbGVj
dGlvblRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZS5k
aXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fZW52aXJvbm1l
bnRCUkRGVGV4dHVyZSAmJiB0aGlzLmdldFNjZW5lKCkuZW52aXJvbm1lbnRCUkRGVGV4dHVyZSAh
PT0gdGhpcy5fZW52aXJvbm1lbnRCUkRGVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMu
X2Vudmlyb25tZW50QlJERlRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHRoaXMuX2VtaXNzaXZlVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMu
X2VtaXNzaXZlVGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodGhpcy5fbWV0YWxsaWNUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fbWV0YWxs
aWNUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlz
Ll9yZWZsZWN0aXZpdHlUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVmbGVjdGl2
aXR5VGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhp
cy5fYnVtcFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9idW1wVGV4dHVyZS5kaXNw
b3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fbGlnaHRtYXBUZXh0
dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRtYXBUZXh0dXJlLmRpc3Bvc2UoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLnN1YlN1cmZhY2UuZGlzcG9z
ZShmb3JjZURpc3Bvc2VUZXh0dXJlcyk7CisgICAgICAgIHRoaXMuY2xlYXJDb2F0LmRpc3Bvc2Uo
Zm9yY2VEaXNwb3NlVGV4dHVyZXMpOworICAgICAgICB0aGlzLnNoZWVuLmRpc3Bvc2UoZm9yY2VE
aXNwb3NlVGV4dHVyZXMpOworICAgICAgICB0aGlzLmFuaXNvdHJvcHkuZGlzcG9zZShmb3JjZURp
c3Bvc2VUZXh0dXJlcyk7CisgICAgICAgIHRoaXMuX3JlbmRlclRhcmdldHMuZGlzcG9zZSgpOwor
ICAgICAgICBpZiAodGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiB0aGlzLl9p
bWFnZVByb2Nlc3NpbmdPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNz
aW5nQ29uZmlndXJhdGlvbi5vblVwZGF0ZVBhcmFtZXRlcnMucmVtb3ZlKHRoaXMuX2ltYWdlUHJv
Y2Vzc2luZ09ic2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRp
c3Bvc2UuY2FsbCh0aGlzLCBmb3JjZURpc3Bvc2VFZmZlY3QsIGZvcmNlRGlzcG9zZVRleHR1cmVz
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBCUk1hdGVyaWFsVHJhbnNwYXJlbmN5TW9kZTog
Tm8gdHJhbnNwYXJlbmN5IG1vZGUsIEFscGhhIGNoYW5uZWwgaXMgbm90IHVzZS4KKyAgICAgKi8K
KyAgICBQQlJCYXNlTWF0ZXJpYWwuUEJSTUFURVJJQUxfT1BBUVVFID0gMDsKKyAgICAvKioKKyAg
ICAgKiBQQlJNYXRlcmlhbFRyYW5zcGFyZW5jeU1vZGU6IEFscGhhIFRlc3QgbW9kZSwgcGl4ZWwg
YXJlIGRpc2NhcmRlZCBiZWxvdyBhIGNlcnRhaW4gdGhyZXNob2xkIGRlZmluZWQgYnkgdGhlIGFs
cGhhIGN1dG9mZiB2YWx1ZS4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwuUEJSTUFURVJJ
QUxfQUxQSEFURVNUID0gMTsKKyAgICAvKioKKyAgICAgKiBQQlJNYXRlcmlhbFRyYW5zcGFyZW5j
eU1vZGU6IFBpeGVscyBhcmUgYmxlbmRlZCAoYWNjb3JkaW5nIHRvIHRoZSBhbHBoYSBtb2RlKSB3
aXRoIHRoZSBhbHJlYWR5IGRyYXduIHBpeGVscyBpbiB0aGUgY3VycmVudCBmcmFtZSBidWZmZXIu
CisgICAgICovCisgICAgUEJSQmFzZU1hdGVyaWFsLlBCUk1BVEVSSUFMX0FMUEhBQkxFTkQgPSAy
OworICAgIC8qKgorICAgICAqIFBCUk1hdGVyaWFsVHJhbnNwYXJlbmN5TW9kZTogUGl4ZWxzIGFy
ZSBibGVuZGVkIChhY2NvcmRpbmcgdG8gdGhlIGFscGhhIG1vZGUpIHdpdGggdGhlIGFscmVhZHkg
ZHJhd24gcGl4ZWxzIGluIHRoZSBjdXJyZW50IGZyYW1lIGJ1ZmZlci4KKyAgICAgKiBUaGV5IGFy
ZSBhbHNvIGRpc2NhcmRlZCBiZWxvdyB0aGUgYWxwaGEgY3V0b2ZmIHRocmVzaG9sZCB0byBpbXBy
b3ZlIHBlcmZvcm1hbmNlcy4KKyAgICAgKi8KKyAgICBQQlJCYXNlTWF0ZXJpYWwuUEJSTUFURVJJ
QUxfQUxQSEFURVNUQU5EQkxFTkQgPSAzOworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGRl
ZmF1bHQgdmFsdWUgb2YgaG93IG11Y2ggQU8gbWFwIGlzIG9jY2x1ZGluZyB0aGUgYW5hbHl0aWNh
bCBsaWdodHMKKyAgICAgKiAocG9pbnQgc3BvdC4uLikuCisgICAgICovCisgICAgUEJSQmFzZU1h
dGVyaWFsLkRFRkFVTFRfQU9fT05fQU5BTFlUSUNBTF9MSUdIVFMgPSAwOworICAgIC8qKgorICAg
ICAqIFBCUk1hdGVyaWFsTGlnaHRGYWxsb2ZmIFBoeXNpY2FsOiBsaWdodCBpcyBmYWxsaW5nIG9m
ZiBmb2xsb3dpbmcgdGhlIGludmVyc2Ugc3F1YXJlZCBkaXN0YW5jZSBsYXcuCisgICAgICovCisg
ICAgUEJSQmFzZU1hdGVyaWFsLkxJR0hURkFMTE9GRl9QSFlTSUNBTCA9IDA7CisgICAgLyoqCisg
ICAgICogUEJSTWF0ZXJpYWxMaWdodEZhbGxvZmYgZ2x0ZjogbGlnaHQgaXMgZmFsbGluZyBvZmYg
YXMgZGVzY3JpYmVkIGluIHRoZSBnbHRmIG1vdmluZyB0byBQQlIgZG9jdW1lbnQKKyAgICAgKiB0
byBlbmhhbmNlIGludGVyb3BlcmFiaWxpdHkgd2l0aCBvdGhlciBlbmdpbmVzLgorICAgICAqLwor
ICAgIFBCUkJhc2VNYXRlcmlhbC5MSUdIVEZBTExPRkZfR0xURiA9IDE7CisgICAgLyoqCisgICAg
ICogUEJSTWF0ZXJpYWxMaWdodEZhbGxvZmYgU3RhbmRhcmQ6IGxpZ2h0IGlzIGZhbGxpbmcgb2Zm
IGxpa2UgaW4gdGhlIHN0YW5kYXJkIG1hdGVyaWFsCisgICAgICogdG8gZW5oYW5jZSBpbnRlcm9w
ZXJhYmlsaXR5IHdpdGggb3RoZXIgbWF0ZXJpYWxzLgorICAgICAqLworICAgIFBCUkJhc2VNYXRl
cmlhbC5MSUdIVEZBTExPRkZfU1RBTkRBUkQgPSAyOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzSW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbiJdKSgpCisgICAgXSwgUEJSQmFzZU1hdGVyaWFsLnByb3RvdHlw
ZSwgIl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRU
b1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzTWlzY0RpcnR5IikKKyAgICBdLCBQQlJC
YXNlTWF0ZXJpYWwucHJvdG90eXBlLCAiZGVidWdNb2RlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoKQorICAgIF0sIFBCUkJhc2VNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VMb2dhcml0aG1p
Y0RlcHRoIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBQQlJCYXNlTWF0ZXJp
YWwucHJvdG90eXBlLCAidHJhbnNwYXJlbmN5TW9kZSIsIG51bGwpOworICAgIHJldHVybiBQQlJC
YXNlTWF0ZXJpYWw7Cit9KF9NYXRlcmlhbHNfcHVzaE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xN19fWyJQdXNoTWF0ZXJpYWwiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL01hdGVyaWFscy9QQlIvcGJyQmFzZVNpbXBsZU1hdGVyaWFsLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0
ZXJpYWxzL1BCUi9wYnJCYXNlU2ltcGxlTWF0ZXJpYWwudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IFBCUkJhc2VTaW1wbGVNYXRlcmlhbCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQQlJCYXNlU2ltcGxlTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBCUkJh
c2VTaW1wbGVNYXRlcmlhbDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGli
ICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01p
c2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGJyQmFzZU1hdGVyaWFsX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BickJhc2VNYXRlcmlh
bCAqLyAiLi9NYXRlcmlhbHMvUEJSL3BickJhc2VNYXRlcmlhbC50cyIpOworCisKKworCisvKioK
KyAqIFRoZSBQaHlzaWNhbGx5IGJhc2VkIHNpbXBsZSBiYXNlIG1hdGVyaWFsIG9mIEJKUy4KKyAq
CisgKiBUaGlzIGVuYWJsZXMgYmV0dGVyIG5hbWluZyBhbmQgY29udmVudGlvbiBlbmZvcmNlbWVu
dHMgb24gdG9wIG9mIHRoZSBwYnJNYXRlcmlhbC4KKyAqIEl0IGlzIHVzZWQgYXMgdGhlIGJhc2Ug
Y2xhc3MgZm9yIGJvdGggdGhlIHNwZWNHbG9zcyBhbmQgbWV0YWxSb3VnaCBjb252ZW50aW9ucy4K
KyAqLwordmFyIFBCUkJhc2VTaW1wbGVNYXRlcmlhbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShQQlJCYXNlU2ltcGxlTWF0ZXJpYWwsIF9zdXBlcik7CisgICAgLyoqCisgICAgICog
SW5zdGFudGlhdGVzIGEgbmV3IFBCUk1hdGVyaWFsIGluc3RhbmNlLgorICAgICAqCisgICAgICog
QHBhcmFtIG5hbWUgVGhlIG1hdGVyaWFsIG5hbWUKKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNj
ZW5lIHRoZSBtYXRlcmlhbCB3aWxsIGJlIHVzZSBpbi4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQ
QlJCYXNlU2ltcGxlTWF0ZXJpYWwobmFtZSwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
X3N1cGVyLmNhbGwodGhpcywgbmFtZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBOdW1iZXIgb2YgU2ltdWx0YW5lb3VzIGxpZ2h0cyBhbGxvd2VkIG9uIHRoZSBtYXRl
cmlhbC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm1heFNpbXVsdGFuZW91c0xpZ2h0cyA9
IDQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBzZXRzIHRvIHRydWUsIGRpc2FibGVzIGFs
bCB0aGUgbGlnaHRzIGFmZmVjdGluZyB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5kaXNhYmxlTGlnaHRpbmcgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IElmIHNldHMgdG8gdHJ1ZSwgeCBjb21wb25lbnQgb2Ygbm9ybWFsIG1hcCB2YWx1ZSB3aWxsIGlu
dmVydCAoeCA9IDEuMCAtIHgpLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaW52ZXJ0Tm9y
bWFsTWFwWCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgc2V0cyB0byB0cnVl
LCB5IGNvbXBvbmVudCBvZiBub3JtYWwgbWFwIHZhbHVlIHdpbGwgaW52ZXJ0ICh5ID0gMS4wIC0g
eSkuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5pbnZlcnROb3JtYWxNYXBZID0gZmFsc2U7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbWlzc2l2aWUgY29sb3IgdXNlZCB0byBzZWxmLWls
bHVtaW5hdGUgdGhlIG1vZGVsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZW1pc3NpdmVD
b2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJDb2xvcjMiXSgwLCAwLCAwKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9jY2x1c2lvbiBD
aGFubmVsIFN0cmVuZ2h0LgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub2NjbHVzaW9uU3Ry
ZW5ndGggPSAxLjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0cnVlLCB0aGUgbGlnaHQg
bWFwIGNvbnRhaW5zIG9jY2x1c2lvbiBpbmZvcm1hdGlvbiBpbnN0ZWFkIG9mIGxpZ2h0aW5nIGlu
Zm8uCisgICAgICAgICAqLworICAgICAgICBfdGhpcy51c2VMaWdodG1hcEFzU2hhZG93bWFwID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLl91c2VBbHBoYUZyb21BbGJlZG9UZXh0dXJlID0gdHJ1ZTsK
KyAgICAgICAgX3RoaXMuX3VzZUFtYmllbnRJbkdyYXlTY2FsZSA9IHRydWU7CisgICAgICAgIHJl
dHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBCUkJhc2VTaW1w
bGVNYXRlcmlhbC5wcm90b3R5cGUsICJkb3VibGVTaWRlZCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgdGhlIGN1cnJlbnQgZG91YmxlIHNpZGVkIG1vZGUuCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90d29T
aWRlZExpZ2h0aW5nOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogSWYgc2V0
cyB0byB0cnVlIGFuZCBiYWNrZmFjZUN1bGxpbmcgaXMgZmFsc2UsIG5vcm1hbHMgd2lsbCBiZSBm
bGlwcGVkIG9uIHRoZSBiYWNrc2lkZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdHdvU2lkZWRMaWdodGluZyA9PT0g
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl90d29TaWRlZExpZ2h0aW5nID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLmJh
Y2tGYWNlQ3VsbGluZyA9ICF2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNo
ZXNBc1RleHR1cmVzRGlydHkoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgUEJSQmFzZVNpbXBs
ZU1hdGVyaWFsLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiAiUEJSQmFzZVNpbXBsZU1hdGVyaWFsIjsKKyAgICB9OworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJd
KSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzTGlnaHRz
RGlydHkiKQorICAgIF0sIFBCUkJhc2VTaW1wbGVNYXRlcmlhbC5wcm90b3R5cGUsICJtYXhTaW11
bHRhbmVvdXNMaWdodHMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBh
bmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzTGlnaHRzRGlydHkiKQorICAgIF0s
IFBCUkJhc2VTaW1wbGVNYXRlcmlhbC5wcm90b3R5cGUsICJkaXNhYmxlTGlnaHRpbmciLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5
Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIsICJfcmVmbGVjdGlvblRleHR1
cmUiKQorICAgIF0sIFBCUkJhc2VTaW1wbGVNYXRlcmlhbC5wcm90b3R5cGUsICJlbnZpcm9ubWVu
dFRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1By
b3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJS
QmFzZVNpbXBsZU1hdGVyaWFsLnByb3RvdHlwZSwgImludmVydE5vcm1hbE1hcFgiLCB2b2lkIDAp
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0Fs
bFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSQmFzZVNpbXBsZU1hdGVyaWFs
LnByb3RvdHlwZSwgImludmVydE5vcm1hbE1hcFkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFz
VGV4dHVyZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hl
c0FzVGV4dHVyZXNEaXJ0eSIsICJfYnVtcFRleHR1cmUiKQorICAgIF0sIFBCUkJhc2VTaW1wbGVN
YXRlcmlhbC5wcm90b3R5cGUsICJub3JtYWxUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emVBc0NvbG9yMyJdKSgiZW1pc3NpdmUiKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21h
cmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUkJhc2VTaW1wbGVNYXRl
cmlhbC5wcm90b3R5cGUsICJlbWlzc2l2ZUNvbG9yIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVB
c1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNo
ZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUkJhc2VTaW1wbGVNYXRlcmlhbC5wcm90b3R5
cGUsICJlbWlzc2l2ZVRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIs
ICJfYW1iaWVudFRleHR1cmVTdHJlbmd0aCIpCisgICAgXSwgUEJSQmFzZVNpbXBsZU1hdGVyaWFs
LnByb3RvdHlwZSwgIm9jY2x1c2lvblN0cmVuZ3RoIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVB
c1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNo
ZXNBc1RleHR1cmVzRGlydHkiLCAiX2FtYmllbnRUZXh0dXJlIikKKyAgICBdLCBQQlJCYXNlU2lt
cGxlTWF0ZXJpYWwucHJvdG90eXBlLCAib2NjbHVzaW9uVGV4dHVyZSIsIHZvaWQgMCk7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAg
ICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
c2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVz
aGVzQXNUZXh0dXJlc0RpcnR5IiwgIl9hbHBoYUN1dE9mZiIpCisgICAgXSwgUEJSQmFzZVNpbXBs
ZU1hdGVyaWFsLnByb3RvdHlwZSwgImFscGhhQ3V0T2ZmIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoKQorICAgIF0sIFBCUkJhc2VTaW1wbGVNYXRlcmlhbC5wcm90b3R5cGUsICJkb3VibGVT
aWRlZCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgpLAorICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRU
b1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIsIG51bGwpCisg
ICAgXSwgUEJSQmFzZVNpbXBsZU1hdGVyaWFsLnByb3RvdHlwZSwgImxpZ2h0bWFwVGV4dHVyZSIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSko
Il9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJCYXNlU2ltcGxl
TWF0ZXJpYWwucHJvdG90eXBlLCAidXNlTGlnaHRtYXBBc1NoYWRvd21hcCIsIHZvaWQgMCk7Cisg
ICAgcmV0dXJuIFBCUkJhc2VTaW1wbGVNYXRlcmlhbDsKK30oX3BickJhc2VNYXRlcmlhbF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQQlJCYXNlTWF0ZXJpYWwiXSkpOworCisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9QQlIvcGJyQ2xlYXJDb2F0Q29uZmlndXJhdGlv
bi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvUEJSL3BickNsZWFyQ29hdENvbmZpZ3VyYXRp
b24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQQlJDbGVhckNvYXRDb25maWd1cmF0
aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUkNsZWFyQ29hdENv
bmZpZ3VyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRp
b247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0
aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21hdGVyaWFsRmxhZ3MgKi8gIi4vTWF0ZXJpYWxz
L21hdGVyaWFsRmxhZ3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIgKi8gIi4vTWF0ZXJp
YWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisKKworCisKKworLyoqCisgKiBEZWZpbmUgdGhlIGNv
ZGUgcmVsYXRlZCB0byB0aGUgY2xlYXIgY29hdCBwYXJhbWV0ZXJzIG9mIHRoZSBwYnIgbWF0ZXJp
YWwuCisgKi8KK3ZhciBQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIGEgbmV3IGlzdGFuY2Ug
b2YgY2xlYXIgY29hdCBjb25maWd1cmF0aW9uLgorICAgICAqIEBwYXJhbSBtYXJrQWxsU3ViTWVz
aGVzQXNUZXh0dXJlc0RpcnR5IENhbGxiYWNrIHRvIGZsYWcgdGhlIG1hdGVyaWFsIHRvIGRpcnR5
CisgICAgICovCisgICAgZnVuY3Rpb24gUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbihtYXJrQWxs
U3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5KSB7CisgICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBpZiB0aGUgY2xlYXIgY29hdCBp
cyBlbmFibGVkIGluIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaXNF
bmFibGVkID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBjbGVh
ciBjb2F0IGxheWVyIHN0cmVuZ3RoIChiZXR3ZWVuIDAgYW5kIDEpIGl0IGRlZmF1bHRzIHRvIDEu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmludGVuc2l0eSA9IDE7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBEZWZpbmVzIHRoZSBjbGVhciBjb2F0IGxheWVyIHJvdWdobmVzcy4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMucm91Z2huZXNzID0gMDsKKyAgICAgICAgdGhpcy5faW5kZXhP
ZlJlZnJhY3Rpb24gPSBQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uLl9EZWZhdWx0SW5kZXhPZlJl
ZnJhY3Rpb247CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBpbmRleCBvZiBy
ZWZyYWN0aW9uIG9mIHRoZSBjbGVhciBjb2F0LgorICAgICAgICAgKiBUaGlzIGRlZmF1bHRzIHRv
IDEuNSBjb3JyZXNwb25kaW5nIHRvIGEgMC4wNCBmMCBvciBhIDQlIHJlZmxlY3RhbmNlIGF0IG5v
cm1hbCBpbmNpZGVuY2UKKyAgICAgICAgICogVGhlIGRlZmF1bHQgZml0cyB3aXRoIGEgcG9seXVy
ZXRoYW5lIG1hdGVyaWFsLgorICAgICAgICAgKiBDaGFuZ2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBp
cyBtb3JlIHBlcmZvcm1hbmNlIGludGVuc2l2ZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
aW5kZXhPZlJlZnJhY3Rpb24gPSBQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uLl9EZWZhdWx0SW5k
ZXhPZlJlZnJhY3Rpb247CisgICAgICAgIHRoaXMuX3RleHR1cmUgPSBudWxsOworICAgICAgICAv
KioKKyAgICAgICAgICogU3RvcmVzIHRoZSBjbGVhciBjb2F0IHZhbHVlcyBpbiBhIHRleHR1cmUu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLnRleHR1cmUgPSBudWxsOworICAgICAgICB0aGlz
Ll9idW1wVGV4dHVyZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhl
IGNsZWFyIGNvYXQgc3BlY2lmaWMgYnVtcCB0ZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5idW1wVGV4dHVyZSA9IG51bGw7CisgICAgICAgIHRoaXMuX2lzVGludEVuYWJsZWQgPSBm
YWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaWYgdGhlIGNsZWFyIGNvYXQg
dGludCBpcyBlbmFibGVkIGluIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuaXNUaW50RW5hYmxlZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5l
cyB0aGUgY2xlYXIgY29hdCB0aW50IG9mIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICogVGhpcyBp
cyBvbmx5IHVzZSBpZiB0aW50IGlzIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
dGludENvbG9yID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQ29sb3IzIl0uV2hpdGUoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhl
IGRpc3RhbmNlIGF0IHdoaWNoIHRoZSB0aW50IGNvbG9yIHNob3VsZCBiZSBmb3VuZCBpbiB0aGUK
KyAgICAgICAgICogY2xlYXIgY29hdCBtZWRpYS4KKyAgICAgICAgICogVGhpcyBpcyBvbmx5IHVz
ZSBpZiB0aW50IGlzIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudGludENvbG9y
QXREaXN0YW5jZSA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBjbGVh
ciBjb2F0IGxheWVyIHRoaWNrbmVzcy4KKyAgICAgICAgICogVGhpcyBpcyBvbmx5IHVzZSBpZiB0
aW50IGlzIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudGludFRoaWNrbmVzcyA9
IDE7CisgICAgICAgIHRoaXMuX3RpbnRUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFN0b3JlcyB0aGUgY2xlYXIgdGludCB2YWx1ZXMgaW4gYSB0ZXh0dXJlLgorICAgICAg
ICAgKiByZ2IgaXMgdGludAorICAgICAgICAgKiBhIGlzIGEgdGhpY2tuZXNzIGZhY3RvcgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy50aW50VGV4dHVyZSA9IG51bGw7CisgICAgICAgIHRoaXMu
X2ludGVybmFsTWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSA9IG1hcmtBbGxTdWJNZXNo
ZXNBc1RleHR1cmVzRGlydHk7CisgICAgfQorICAgIC8qKiBAaGlkZGVuICovCisgICAgUEJSQ2xl
YXJDb2F0Q29uZmlndXJhdGlvbi5wcm90b3R5cGUuX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVz
RGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2ludGVybmFsTWFya0FsbFN1Yk1l
c2hlc0FzVGV4dHVyZXNEaXJ0eSgpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB3ZWh0
ZXIgdGhlIHN1Ym1lc2ggaXMgcmVhZHkgdG8gYmUgdXNlZCBvciBub3QuCisgICAgICogQHBhcmFt
IGRlZmluZXMgdGhlIGxpc3Qgb2YgImRlZmluZXMiIHRvIHVwZGF0ZS4KKyAgICAgKiBAcGFyYW0g
c2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgdGhlIG1hdGVyaWFsIGJlbG9uZ3MgdG8uCisgICAgICog
QHBhcmFtIGVuZ2luZSBkZWZpbmVzIHRoZSBlbmdpbmUgdGhlIG1hdGVyaWFsIGJlbG9uZ3MgdG8u
CisgICAgICogQHBhcmFtIGRpc2FibGVCdW1wTWFwIGRlZmluZXMgd2V0aGVyIHRoZSBtYXRlcmlh
bCBkaXNhYmxlcyBidW1wIG9yIG5vdC4KKyAgICAgKiBAcmV0dXJucyAtIGJvb2xlYW4gaW5kaWNh
dGluZyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJlYWR5IG9yIG5vdC4KKyAgICAgKi8KKyAgICBQQlJD
bGVhckNvYXRDb25maWd1cmF0aW9uLnByb3RvdHlwZS5pc1JlYWR5Rm9yU3ViTWVzaCA9IGZ1bmN0
aW9uIChkZWZpbmVzLCBzY2VuZSwgZW5naW5lLCBkaXNhYmxlQnVtcE1hcCkgeworICAgICAgICBp
ZiAoZGVmaW5lcy5fYXJlVGV4dHVyZXNEaXJ0eSkgeworICAgICAgICAgICAgaWYgKHNjZW5lLnRl
eHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlICYmIF9t
YXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdGVyaWFsRmxhZ3Mi
XS5DbGVhckNvYXRUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRo
aXMuX3RleHR1cmUuaXNSZWFkeU9yTm90QmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChlbmdpbmUuZ2V0Q2FwcygpLnN0YW5kYXJkRGVyaXZh
dGl2ZXMgJiYgdGhpcy5fYnVtcFRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxGbGFncyJdLkNsZWFyQ29hdEJ1bXBUZXh0dXJlRW5h
YmxlZCAmJiAhZGlzYWJsZUJ1bXBNYXApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQnVtcCB0
ZXh0dXJlIGNhbm5vdCBiZSBub3QgYmxvY2tpbmcuCisgICAgICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5fYnVtcFRleHR1cmUuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzVGludEVuYWJsZWQgJiYgdGhpcy5fdGludFRleHR1
cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJp
YWxGbGFncyJdLkNsZWFyQ29hdFRpbnRUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMuX3RpbnRUZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyB0byBzZWUgaWYgYSB0
ZXh0dXJlIGlzIHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIHRo
ZSBsaXN0IG9mICJkZWZpbmVzIiB0byB1cGRhdGUuCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmlu
ZXMgdGhlIHNjZW5lIHRvIHRoZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgorICAgICAqLworICAgIFBC
UkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnByZXBhcmVEZWZpbmVzID0gZnVuY3Rp
b24gKGRlZmluZXMsIHNjZW5lKSB7CisgICAgICAgIGlmICh0aGlzLl9pc0VuYWJsZWQpIHsKKyAg
ICAgICAgICAgIGRlZmluZXMuQ0xFQVJDT0FUID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChkZWZp
bmVzLl9hcmVUZXh0dXJlc0RpcnR5KSB7CisgICAgICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1
cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSAmJiBf
bWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdz
Il0uQ2xlYXJDb2F0VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9N
YXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0
ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX3RleHR1cmUsIGRl
ZmluZXMsICJDTEVBUkNPQVRfVEVYVFVSRSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5D
TEVBUkNPQVRfVEVYVFVSRSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9idW1wVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0uQ2xlYXJDb2F0QnVtcFRl
eHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVy
aWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdGVyaWFsSGVscGVyIl0u
UHJlcGFyZURlZmluZXNGb3JNZXJnZWRVVih0aGlzLl9idW1wVGV4dHVyZSwgZGVmaW5lcywgIkNM
RUFSQ09BVF9CVU1QIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkNMRUFSQ09BVF9CVU1Q
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVm
aW5lcy5DTEVBUkNPQVRfREVGQVVMVElPUiA9IHRoaXMuX2luZGV4T2ZSZWZyYWN0aW9uID09PSBQ
QlJDbGVhckNvYXRDb25maWd1cmF0aW9uLl9EZWZhdWx0SW5kZXhPZlJlZnJhY3Rpb247CisgICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1RpbnRFbmFibGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZpbmVzLkNMRUFSQ09BVF9USU5UID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl90aW50VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0uQ2xlYXJDb2F0VGludFRleHR1
cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRl
cmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRlcmlhbEhlbHBlciJd
LlByZXBhcmVEZWZpbmVzRm9yTWVyZ2VkVVYodGhpcy5fdGludFRleHR1cmUsIGRlZmluZXMsICJD
TEVBUkNPQVRfVElOVF9URVhUVVJFIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLkNMRUFSQ09BVF9USU5UX1RFWFRVUkUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuQ0xFQVJDT0FUX1RJTlQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuQ0xFQVJDT0FUX1RJTlRfVEVYVFVS
RSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVmaW5l
cy5DTEVBUkNPQVQgPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuQ0xFQVJDT0FUX1RFWFRV
UkUgPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuQ0xFQVJDT0FUX0JVTVAgPSBmYWxzZTsK
KyAgICAgICAgICAgIGRlZmluZXMuQ0xFQVJDT0FUX1RJTlQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGRlZmluZXMuQ0xFQVJDT0FUX1RJTlRfVEVYVFVSRSA9IGZhbHNlOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgbWF0ZXJpYWwgZGF0YS4KKyAgICAgKiBAcGFy
YW0gdW5pZm9ybUJ1ZmZlciBkZWZpbmVzIHRoZSBVbmlmb3JtIGJ1ZmZlciB0byBmaWxsIGluLgor
ICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGUgbWF0ZXJpYWwgYmVsb25n
cyB0by4KKyAgICAgKiBAcGFyYW0gZW5naW5lIGRlZmluZXMgdGhlIGVuZ2luZSB0aGUgbWF0ZXJp
YWwgYmVsb25ncyB0by4KKyAgICAgKiBAcGFyYW0gZGlzYWJsZUJ1bXBNYXAgZGVmaW5lcyB3ZXRo
ZXIgdGhlIG1hdGVyaWFsIGRpc2FibGVzIGJ1bXAgb3Igbm90LgorICAgICAqIEBwYXJhbSBpc0Zy
b3plbiBkZWZpbmVzIHdldGhlciB0aGUgbWF0ZXJpYWwgaXMgZnJvemVuIG9yIG5vdC4KKyAgICAg
KiBAcGFyYW0gaW52ZXJ0Tm9ybWFsTWFwWCBJZiBzZXRzIHRvIHRydWUsIHggY29tcG9uZW50IG9m
IG5vcm1hbCBtYXAgdmFsdWUgd2lsbCBiZSBpbnZlcnRlZCAoeCA9IDEuMCAtIHgpLgorICAgICAq
IEBwYXJhbSBpbnZlcnROb3JtYWxNYXBZIElmIHNldHMgdG8gdHJ1ZSwgeSBjb21wb25lbnQgb2Yg
bm9ybWFsIG1hcCB2YWx1ZSB3aWxsIGJlIGludmVydGVkICh5ID0gMS4wIC0geSkuCisgICAgICov
CisgICAgUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbi5wcm90b3R5cGUuYmluZEZvclN1Yk1lc2gg
PSBmdW5jdGlvbiAodW5pZm9ybUJ1ZmZlciwgc2NlbmUsIGVuZ2luZSwgZGlzYWJsZUJ1bXBNYXAs
IGlzRnJvemVuLCBpbnZlcnROb3JtYWxNYXBYLCBpbnZlcnROb3JtYWxNYXBZKSB7CisgICAgICAg
IGlmICghdW5pZm9ybUJ1ZmZlci51c2VVYm8gfHwgIWlzRnJvemVuIHx8ICF1bmlmb3JtQnVmZmVy
LmlzU3luYykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgJiYgX21hdGVyaWFsRmxh
Z3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxGbGFncyJdLkNsZWFyQ29h
dFRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVG
bG9hdDIoInZDbGVhckNvYXRJbmZvcyIsIHRoaXMuX3RleHR1cmUuY29vcmRpbmF0ZXNJbmRleCwg
dGhpcy5fdGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlh
bEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRlcmlhbEhlbHBlciJdLkJp
bmRUZXh0dXJlTWF0cml4KHRoaXMuX3RleHR1cmUsIHVuaWZvcm1CdWZmZXIsICJjbGVhckNvYXQi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9idW1wVGV4dHVyZSAmJiBl
bmdpbmUuZ2V0Q2FwcygpLnN0YW5kYXJkRGVyaXZhdGl2ZXMgJiYgX21hdGVyaWFsRmxhZ3NfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxGbGFncyJdLkNsZWFyQ29hdFRleHR1
cmVFbmFibGVkICYmICFkaXNhYmxlQnVtcE1hcCkgeworICAgICAgICAgICAgICAgIHVuaWZvcm1C
dWZmZXIudXBkYXRlRmxvYXQyKCJ2Q2xlYXJDb2F0QnVtcEluZm9zIiwgdGhpcy5fYnVtcFRleHR1
cmUuY29vcmRpbmF0ZXNJbmRleCwgdGhpcy5fYnVtcFRleHR1cmUubGV2ZWwpOworICAgICAgICAg
ICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kVGV4dHVyZU1hdHJpeCh0aGlzLl9idW1wVGV4dHVy
ZSwgdW5pZm9ybUJ1ZmZlciwgImNsZWFyQ29hdEJ1bXAiKTsKKyAgICAgICAgICAgICAgICBpZiAo
c2NlbmUuX21pcnJvcmVkQ2FtZXJhUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgdW5p
Zm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIoInZDbGVhckNvYXRUYW5nZW50U3BhY2VQYXJhbXMiLCBp
bnZlcnROb3JtYWxNYXBYID8gMS4wIDogLTEuMCwgaW52ZXJ0Tm9ybWFsTWFwWSA/IDEuMCA6IC0x
LjApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIoInZDbGVhckNvYXRUYW5nZW50
U3BhY2VQYXJhbXMiLCBpbnZlcnROb3JtYWxNYXBYID8gLTEuMCA6IDEuMCwgaW52ZXJ0Tm9ybWFs
TWFwWSA/IC0xLjAgOiAxLjApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0aGlzLl90aW50VGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0uQ2xlYXJDb2F0VGludFRleHR1
cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIo
InZDbGVhckNvYXRUaW50SW5mb3MiLCB0aGlzLl90aW50VGV4dHVyZS5jb29yZGluYXRlc0luZGV4
LCB0aGlzLl90aW50VGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAgICAgICAgX01hdGVyaWFsc19t
YXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRlcmlhbEhlbHBl
ciJdLkJpbmRUZXh0dXJlTWF0cml4KHRoaXMuX3RpbnRUZXh0dXJlLCB1bmlmb3JtQnVmZmVyLCAi
Y2xlYXJDb2F0VGludCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ2xlYXIgQ29h
dCBHZW5lcmFsIHBhcmFtcworICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIo
InZDbGVhckNvYXRQYXJhbXMiLCB0aGlzLmludGVuc2l0eSwgdGhpcy5yb3VnaG5lc3MpOworICAg
ICAgICAgICAgLy8gQ2xlYXIgQ29hdCBSZWZyYWN0aW9uIHBhcmFtcworICAgICAgICAgICAgdmFy
IGEgPSAxIC0gdGhpcy5faW5kZXhPZlJlZnJhY3Rpb247CisgICAgICAgICAgICB2YXIgYiA9IDEg
KyB0aGlzLl9pbmRleE9mUmVmcmFjdGlvbjsKKyAgICAgICAgICAgIHZhciBmMCA9IE1hdGgucG93
KCgtYSAvIGIpLCAyKTsgLy8gU2NobGlja3MgYXBwcm94OiAoaW9yMSAtIGlvcjIpIC8gKGlvcjEg
KyBpb3IyKSB3aGVyZSBpb3IyIGZvciBhaXIgaXMgY2xvc2UgdG8gdmFjdXVtID0gMS4KKyAgICAg
ICAgICAgIHZhciBldGEgPSAxIC8gdGhpcy5faW5kZXhPZlJlZnJhY3Rpb247CisgICAgICAgICAg
ICB1bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgidkNsZWFyQ29hdFJlZnJhY3Rpb25QYXJhbXMi
LCBmMCwgZXRhLCBhLCBiKTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc1RpbnRFbmFibGVkKSB7
CisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDQoInZDbGVhckNvYXRU
aW50UGFyYW1zIiwgdGhpcy50aW50Q29sb3IuciwgdGhpcy50aW50Q29sb3IuZywgdGhpcy50aW50
Q29sb3IuYiwgTWF0aC5tYXgoMC4wMDAwMSwgdGhpcy50aW50VGhpY2tuZXNzKSk7CisgICAgICAg
ICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdCgiY2xlYXJDb2F0Q29sb3JBdERpc3Rh
bmNlIiwgTWF0aC5tYXgoMC4wMDAwMSwgdGhpcy50aW50Q29sb3JBdERpc3RhbmNlKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVGV4dHVyZXMKKyAgICAgICAgaWYgKHNj
ZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgJiYg
X21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxGbGFn
cyJdLkNsZWFyQ29hdFRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1
ZmZlci5zZXRUZXh0dXJlKCJjbGVhckNvYXRTYW1wbGVyIiwgdGhpcy5fdGV4dHVyZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fYnVtcFRleHR1cmUgJiYgZW5naW5lLmdl
dENhcHMoKS5zdGFuZGFyZERlcml2YXRpdmVzICYmIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIk1hdGVyaWFsRmxhZ3MiXS5DbGVhckNvYXRCdW1wVGV4dHVyZUVu
YWJsZWQgJiYgIWRpc2FibGVCdW1wTWFwKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZl
ci5zZXRUZXh0dXJlKCJjbGVhckNvYXRCdW1wU2FtcGxlciIsIHRoaXMuX2J1bXBUZXh0dXJlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9pc1RpbnRFbmFibGVkICYmIHRo
aXMuX3RpbnRUZXh0dXJlICYmIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIk1hdGVyaWFsRmxhZ3MiXS5DbGVhckNvYXRUaW50VGV4dHVyZUVuYWJsZWQpIHsKKyAg
ICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyLnNldFRleHR1cmUoImNsZWFyQ29hdFRpbnRTYW1w
bGVyIiwgdGhpcy5fdGludFRleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdG8gc2VlIGlmIGEgdGV4dHVyZSBpcyB1c2VkIGlu
IHRoZSBtYXRlcmlhbC4KKyAgICAgKiBAcGFyYW0gdGV4dHVyZSAtIEJhc2UgdGV4dHVyZSB0byB1
c2UuCisgICAgICogQHJldHVybnMgLSBCb29sZWFuIHNwZWNpZnlpbmcgaWYgYSB0ZXh0dXJlIGlz
IHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAgICAqLworICAgIFBCUkNsZWFyQ29hdENvbmZpZ3Vy
YXRpb24ucHJvdG90eXBlLmhhc1RleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgICAg
ICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2J1bXBUZXh0dXJlID09PSB0ZXh0dXJl
KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy5fdGludFRleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJldHVybnMgYW4gYXJyYXkgb2YgdGhlIGFjdGl2ZWx5IHVzZWQgdGV4dHVyZXMuCisgICAgICog
QHBhcmFtIGFjdGl2ZVRleHR1cmVzIEFycmF5IG9mIEJhc2VUZXh0dXJlcworICAgICAqLworICAg
IFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldEFjdGl2ZVRleHR1cmVzID0g
ZnVuY3Rpb24gKGFjdGl2ZVRleHR1cmVzKSB7CisgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlKSB7
CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMuX3RleHR1cmUpOworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl9idW1wVGV4dHVyZSkgeworICAgICAgICAgICAgYWN0aXZl
VGV4dHVyZXMucHVzaCh0aGlzLl9idW1wVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX3RpbnRUZXh0dXJlKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRo
aXMuX3RpbnRUZXh0dXJlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmV0
dXJucyB0aGUgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAgICAgKiBAcGFyYW0gYW5pbWF0YWJsZXMg
QXJyYXkgb2YgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAgICAgKi8KKyAgICBQQlJDbGVhckNvYXRD
b25maWd1cmF0aW9uLnByb3RvdHlwZS5nZXRBbmltYXRhYmxlcyA9IGZ1bmN0aW9uIChhbmltYXRh
YmxlcykgeworICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSAmJiB0aGlzLl90ZXh0dXJlLmFuaW1h
dGlvbnMgJiYgdGhpcy5fdGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAg
ICAgIGFuaW1hdGFibGVzLnB1c2godGhpcy5fdGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX2J1bXBUZXh0dXJlICYmIHRoaXMuX2J1bXBUZXh0dXJlLmFuaW1hdGlvbnMgJiYg
dGhpcy5fYnVtcFRleHR1cmUuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBh
bmltYXRhYmxlcy5wdXNoKHRoaXMuX2J1bXBUZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5fdGludFRleHR1cmUgJiYgdGhpcy5fdGludFRleHR1cmUuYW5pbWF0aW9ucyAmJiB0
aGlzLl90aW50VGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIGFu
aW1hdGFibGVzLnB1c2godGhpcy5fdGludFRleHR1cmUpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgcmVzb3VyY2VzIG9mIHRoZSBtYXRlcmlhbC4KKyAg
ICAgKiBAcGFyYW0gZm9yY2VEaXNwb3NlVGV4dHVyZXMgLSBGb3JjZXMgdGhlIGRpc3Bvc2FsIG9m
IGFsbCB0ZXh0dXJlcy4KKyAgICAgKi8KKyAgICBQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uLnBy
b3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGZvcmNlRGlzcG9zZVRleHR1cmVzKSB7CisgICAg
ICAgIGlmIChmb3JjZURpc3Bvc2VUZXh0dXJlcykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3Rl
eHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9idW1wVGV4dHVyZSkgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2J1bXBUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh0aGlzLl90aW50VGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3Rp
bnRUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgKiBHZXQgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZSBvZiB0aGUgdGV4dHVyZSB1
c2VmdWwgZm9yIHNlcmlhbGl6YXRpb24gb3IgZHluYW1pYyBjb2RpbmcuCisgICAgKiBAcmV0dXJu
cyAiUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbiIKKyAgICAqLworICAgIFBCUkNsZWFyQ29hdENv
bmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICJQQlJDbGVhckNvYXRDb25maWd1cmF0aW9uIjsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFkZCBmYWxsYmFja3MgdG8gdGhlIGVmZmVjdCBmYWxsYmFja3MgbGlzdC4KKyAgICAg
KiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBCYXNlIHRleHR1cmUgdG8gdXNlLgorICAgICAq
IEBwYXJhbSBmYWxsYmFja3MgZGVmaW5lcyB0aGUgY3VycmVudCBmYWxsYmFjayBsaXN0LgorICAg
ICAqIEBwYXJhbSBjdXJyZW50UmFuayBkZWZpbmVzIHRoZSBjdXJyZW50IGZhbGxiYWNrIHJhbmsu
CisgICAgICogQHJldHVybnMgdGhlIG5ldyBmYWxsYmFjayByYW5rLgorICAgICAqLworICAgIFBC
UkNsZWFyQ29hdENvbmZpZ3VyYXRpb24uQWRkRmFsbGJhY2tzID0gZnVuY3Rpb24gKGRlZmluZXMs
IGZhbGxiYWNrcywgY3VycmVudFJhbmspIHsKKyAgICAgICAgaWYgKGRlZmluZXMuQ0xFQVJDT0FU
X0JVTVApIHsKKyAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjayhjdXJyZW50UmFuaysr
LCAiQ0xFQVJDT0FUX0JVTVAiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5DTEVB
UkNPQVRfVElOVCkgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGN1cnJlbnRS
YW5rKyssICJDTEVBUkNPQVRfVElOVCIpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVz
LkNMRUFSQ09BVCkgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGN1cnJlbnRS
YW5rKyssICJDTEVBUkNPQVQiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY3VycmVudFJh
bms7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgdGhlIHJlcXVpcmVkIHVuaWZvcm1zIHRv
IHRoZSBjdXJyZW50IGxpc3QuCisgICAgICogQHBhcmFtIHVuaWZvcm1zIGRlZmluZXMgdGhlIGN1
cnJlbnQgdW5pZm9ybSBsaXN0LgorICAgICAqLworICAgIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRp
b24uQWRkVW5pZm9ybXMgPSBmdW5jdGlvbiAodW5pZm9ybXMpIHsKKyAgICAgICAgdW5pZm9ybXMu
cHVzaCgidkNsZWFyQ29hdFRhbmdlbnRTcGFjZVBhcmFtcyIsICJ2Q2xlYXJDb2F0UGFyYW1zIiwg
InZDbGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zIiwgInZDbGVhckNvYXRUaW50UGFyYW1zIiwgImNs
ZWFyQ29hdENvbG9yQXREaXN0YW5jZSIsICJjbGVhckNvYXRNYXRyaXgiLCAiY2xlYXJDb2F0QnVt
cE1hdHJpeCIsICJjbGVhckNvYXRUaW50TWF0cml4IiwgInZDbGVhckNvYXRJbmZvcyIsICJ2Q2xl
YXJDb2F0QnVtcEluZm9zIiwgInZDbGVhckNvYXRUaW50SW5mb3MiKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEFkZCB0aGUgcmVxdWlyZWQgc2FtcGxlcnMgdG8gdGhlIGN1cnJlbnQgbGlzdC4K
KyAgICAgKiBAcGFyYW0gc2FtcGxlcnMgZGVmaW5lcyB0aGUgY3VycmVudCBzYW1wbGVyIGxpc3Qu
CisgICAgICovCisgICAgUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbi5BZGRTYW1wbGVycyA9IGZ1
bmN0aW9uIChzYW1wbGVycykgeworICAgICAgICBzYW1wbGVycy5wdXNoKCJjbGVhckNvYXRTYW1w
bGVyIiwgImNsZWFyQ29hdEJ1bXBTYW1wbGVyIiwgImNsZWFyQ29hdFRpbnRTYW1wbGVyIik7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgdGhlIHJlcXVpcmVkIHVuaWZvcm1zIHRvIHRoZSBj
dXJyZW50IGJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybUJ1ZmZlciBkZWZpbmVzIHRoZSBj
dXJyZW50IHVuaWZvcm0gYnVmZmVyLgorICAgICAqLworICAgIFBCUkNsZWFyQ29hdENvbmZpZ3Vy
YXRpb24uUHJlcGFyZVVuaWZvcm1CdWZmZXIgPSBmdW5jdGlvbiAodW5pZm9ybUJ1ZmZlcikgewor
ICAgICAgICB1bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZDbGVhckNvYXRQYXJhbXMiLCAyKTsK
KyAgICAgICAgdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2Q2xlYXJDb2F0UmVmcmFjdGlvblBh
cmFtcyIsIDQpOworICAgICAgICB1bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZDbGVhckNvYXRJ
bmZvcyIsIDIpOworICAgICAgICB1bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oImNsZWFyQ29hdE1h
dHJpeCIsIDE2KTsKKyAgICAgICAgdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2Q2xlYXJDb2F0
QnVtcEluZm9zIiwgMik7CisgICAgICAgIHVuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgidkNsZWFy
Q29hdFRhbmdlbnRTcGFjZVBhcmFtcyIsIDIpOworICAgICAgICB1bmlmb3JtQnVmZmVyLmFkZFVu
aWZvcm0oImNsZWFyQ29hdEJ1bXBNYXRyaXgiLCAxNik7CisgICAgICAgIHVuaWZvcm1CdWZmZXIu
YWRkVW5pZm9ybSgidkNsZWFyQ29hdFRpbnRQYXJhbXMiLCA0KTsKKyAgICAgICAgdW5pZm9ybUJ1
ZmZlci5hZGRVbmlmb3JtKCJjbGVhckNvYXRDb2xvckF0RGlzdGFuY2UiLCAxKTsKKyAgICAgICAg
dW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2Q2xlYXJDb2F0VGludEluZm9zIiwgMik7CisgICAg
ICAgIHVuaWZvcm1CdWZmZXIuYWRkVW5pZm9ybSgiY2xlYXJDb2F0VGludE1hdHJpeCIsIDE2KTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIE1ha2VzIGEgZHVwbGljYXRlIG9mIHRoZSBjdXJyZW50
IGNvbmZpZ3VyYXRpb24gaW50byBhbm90aGVyIG9uZS4KKyAgICAgKiBAcGFyYW0gY2xlYXJDb2F0
Q29uZmlndXJhdGlvbiBkZWZpbmUgdGhlIGNvbmZpZyB3aGVyZSB0byBjb3B5IHRoZSBpbmZvCisg
ICAgICovCisgICAgUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbi5wcm90b3R5cGUuY29weVRvID0g
ZnVuY3Rpb24gKGNsZWFyQ29hdENvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0u
Q2xvbmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xlYXJDb2F0Q29uZmlndXJhdGlvbjsgfSwgdGhp
cyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoaXMgY2xlYXIgY29hdCBj
b25maWd1cmF0aW9uLgorICAgICAqIEByZXR1cm5zIC0gQW4gb2JqZWN0IHdpdGggdGhlIHNlcmlh
bGl6ZWQgY29uZmlnLgorICAgICAqLworICAgIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJv
dG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBl
ciJdLlNlcmlhbGl6ZSh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlcyBhIGFu
aXNvdHJvcHkgQ29uZmlndXJhdGlvbiBmcm9tIGEgc2VyaWFsaXplZCBvYmplY3QuCisgICAgICog
QHBhcmFtIHNvdXJjZSAtIFNlcmlhbGl6ZWQgb2JqZWN0LgorICAgICAqIEBwYXJhbSBzY2VuZSBE
ZWZpbmVzIHRoZSBzY2VuZSB3ZSBhcmUgcGFyc2luZyBmb3IKKyAgICAgKiBAcGFyYW0gcm9vdFVy
bCBEZWZpbmVzIHRoZSByb290VXJsIHRvIGxvYWQgZnJvbQorICAgICAqLworICAgIFBCUkNsZWFy
Q29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKHNvdXJjZSwgc2Nl
bmUsIHJvb3RVcmwpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVs
cGVyIl0uUGFyc2UoZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXM7IH0sIHNvdXJjZSwgc2NlbmUs
IHJvb3RVcmwpOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBkZWZhdWx0cyB0byAxLjUg
Y29ycmVzcG9uZGluZyB0byBhIDAuMDQgZjAgb3IgYSA0JSByZWZsZWN0YW5jZSBhdCBub3JtYWwg
aW5jaWRlbmNlCisgICAgICogVGhlIGRlZmF1bHQgZml0cyB3aXRoIGEgcG9seXVyZXRoYW5lIG1h
dGVyaWFsLgorICAgICAqLworICAgIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24uX0RlZmF1bHRJ
bmRleE9mUmVmcmFjdGlvbiA9IDEuNTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5k
VG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0s
IFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiaXNFbmFibGVkIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24u
cHJvdG90eXBlLCAiaW50ZW5zaXR5Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAicm91Z2huZXNzIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21h
cmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUkNsZWFyQ29hdENvbmZp
Z3VyYXRpb24ucHJvdG90eXBlLCAiaW5kZXhPZlJlZnJhY3Rpb24iLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZUFzVGV4dHVyZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0Fs
bFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSQ2xlYXJDb2F0Q29uZmlndXJh
dGlvbi5wcm90b3R5cGUsICJ0ZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1
cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1Rl
eHR1cmVzRGlydHkiKQorICAgIF0sIFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBl
LCAiYnVtcFRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBh
bmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAg
XSwgUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJpc1RpbnRFbmFibGVkIiwg
dm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29y
YXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0NvbG9yMyJdKSgpCisgICAgXSwgUEJSQ2xlYXJDb2F0
Q29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ0aW50Q29sb3IiLCB2b2lkIDApOworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZSJdKSgpCisgICAgXSwgUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ0
aW50Q29sb3JBdERpc3RhbmNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IFBCUkNsZWFyQ29hdENvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAidGludFRoaWNrbmVzcyIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCksCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVy
dHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJDbGVh
ckNvYXRDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgInRpbnRUZXh0dXJlIiwgdm9pZCAwKTsKKyAg
ICByZXR1cm4gUEJSQ2xlYXJDb2F0Q29uZmlndXJhdGlvbjsKK30oKSk7CisKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL1BCUi9wYnJNYXRlcmlhbC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL1BC
Ui9wYnJNYXRlcmlhbC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQQlJNYXRlcmlhbCAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJQQlJNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gUEJSTWF0ZXJpYWw7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNj
L2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19icmRmVGV4
dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9NaXNjL2JyZGZUZXh0dXJlVG9vbHMgKi8gIi4vTWlzYy9icmRmVGV4dHVy
ZVRvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9wYnJCYXNlTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGJyQmFzZU1hdGVyaWFsICovICIu
L01hdGVyaWFscy9QQlIvcGJyQmFzZU1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVT
dG9yZS50cyIpOworCisKKworCisKKworLyoqCisgKiBUaGUgUGh5c2ljYWxseSBiYXNlZCBtYXRl
cmlhbCBvZiBCSlMuCisgKgorICogVGhpcyBvZmZlcnMgdGhlIG1haW4gZmVhdHVyZXMgb2YgYSBz
dGFuZGFyZCBQQlIgbWF0ZXJpYWwuCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJl
ZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIDoKKyAqIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL3BoeXNpY2FsbHlfYmFzZWRfcmVuZGVyaW5nCisgKi8KK3ZhciBQQlJNYXRlcmlhbCA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShQQlJNYXRlcmlhbCwgX3N1cGVyKTsKKyAg
ICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgUEJSTWF0ZXJpYWwgaW5zdGFuY2UuCisg
ICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbWF0ZXJpYWwgbmFtZQorICAgICAqIEBwYXJh
bSBzY2VuZSBUaGUgc2NlbmUgdGhlIG1hdGVyaWFsIHdpbGwgYmUgdXNlIGluLgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIFBCUk1hdGVyaWFsKG5hbWUsIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICAvKioK
KyAgICAgICAgICogSW50ZW5zaXR5IG9mIHRoZSBkaXJlY3QgbGlnaHRzIGUuZy4gdGhlIGZvdXIg
bGlnaHRzIGF2YWlsYWJsZSBpbiB5b3VyIHNjZW5lLgorICAgICAgICAgKiBUaGlzIGltcGFjdHMg
Ym90aCB0aGUgZGlyZWN0IGRpZmZ1c2UgYW5kIHNwZWN1bGFyIGhpZ2hsaWdodHMuCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5kaXJlY3RJbnRlbnNpdHkgPSAxLjA7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBJbnRlbnNpdHkgb2YgdGhlIGVtaXNzaXZlIHBhcnQgb2YgdGhlIG1hdGVyaWFs
LgorICAgICAgICAgKiBUaGlzIGhlbHBzIGNvbnRyb2xsaW5nIHRoZSBlbWlzc2l2ZSBlZmZlY3Qg
d2l0aG91dCBtb2RpZnlpbmcgdGhlIGVtaXNzaXZlIGNvbG9yLgorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSAxLjA7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBJbnRlbnNpdHkgb2YgdGhlIGVudmlyb25tZW50IGUuZy4gaG93IG11Y2ggdGhlIGVudmlyb25t
ZW50IHdpbGwgbGlnaHQgdGhlIG9iamVjdAorICAgICAgICAgKiBlaXRoZXIgdGhyb3VnaCBoYXJt
b25pY3MgZm9yIHJvdWdoIG1hdGVyaWFsIG9yIHRocm91Z2ggdGhlIHJlZmVsY3Rpb24gZm9yIHNo
aW55IG9uZXMuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5lbnZpcm9ubWVudEludGVuc2l0
eSA9IDEuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgaXMgYSBzcGVjaWFsIGNvbnRy
b2wgYWxsb3dpbmcgdGhlIHJlZHVjdGlvbiBvZiB0aGUgc3BlY3VsYXIgaGlnaGxpZ2h0cyBjb21p
bmcgZnJvbSB0aGUKKyAgICAgICAgICogZm91ciBsaWdodHMgb2YgdGhlIHNjZW5lLiBUaG9zZSBo
aWdobGlnaHRzIG1heSBub3QgYmUgbmVlZGVkIGluIGZ1bGwgZW52aXJvbm1lbnQgbGlnaHRpbmcu
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5zcGVjdWxhckludGVuc2l0eSA9IDEuMDsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIERlYnVnIENvbnRyb2wgYWxsb3dpbmcgZGlzYWJsaW5nIHRo
ZSBidW1wIG1hcCBvbiB0aGlzIG1hdGVyaWFsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
ZGlzYWJsZUJ1bXBNYXAgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFLQSBPY2Ns
dXNpb24gVGV4dHVyZSBJbnRlbnNpdHkgaW4gb3RoZXIgbm9tZW5jbGF0dXJlLgorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuYW1iaWVudFRleHR1cmVTdHJlbmd0aCA9IDEuMDsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIERlZmluZXMgaG93IG11Y2ggdGhlIEFPIG1hcCBpcyBvY2NsdWRpbmcg
dGhlIGFuYWx5dGljYWwgbGlnaHRzIChwb2ludCBzcG90Li4uKS4KKyAgICAgICAgICogMSBtZWFu
cyBpdCBjb21wbGV0ZWx5IG9jY2x1ZGVzIGl0CisgICAgICAgICAqIDAgbWVhbiBpdCBoYXMgbm8g
aW1wYWN0CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5hbWJpZW50VGV4dHVyZUltcGFjdE9u
QW5hbHl0aWNhbExpZ2h0cyA9IFBCUk1hdGVyaWFsLkRFRkFVTFRfQU9fT05fQU5BTFlUSUNBTF9M
SUdIVFM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY29sb3Igb2YgYSBtYXRlcmlhbCBp
biBhbWJpZW50IGxpZ2h0aW5nLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYW1iaWVudENv
bG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkNvbG9yMyJdKDAsIDAsIDApOworICAgICAgICAvKioKKyAgICAgICAgICogQUtBIERpZmZ1c2Ug
Q29sb3IgaW4gb3RoZXIgbm9tZW5jbGF0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
YWxiZWRvQ29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siQ29sb3IzIl0oMSwgMSwgMSk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBS0Eg
U3BlY3VsYXIgQ29sb3IgaW4gb3RoZXIgbm9tZW5jbGF0dXJlLgorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMucmVmbGVjdGl2aXR5Q29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29sb3IzIl0oMSwgMSwgMSk7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaGUgY29sb3IgcmVmbGVjdGVkIGZyb20gdGhlIG1hdGVyaWFsLgorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMucmVmbGVjdGlvbkNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbG9yMyJdKDEuMCwgMS4wLCAxLjAp
OworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIGVtaXR0ZWQgZnJvbSB0aGUgbWF0
ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5lbWlzc2l2ZUNvbG9yID0gbmV3IF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbG9yMyJdKDAs
IDAsIDApOworICAgICAgICAvKioKKyAgICAgICAgICogQUtBIEdsb3NzaW5lc3MgaW4gb3RoZXIg
bm9tZW5jbGF0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubWljcm9TdXJmYWNlID0g
MS4wOworICAgICAgICAvKioKKyAgICAgICAgICogSWYgdHJ1ZSwgdGhlIGxpZ2h0IG1hcCBjb250
YWlucyBvY2NsdXNpb24gaW5mb3JtYXRpb24gaW5zdGVhZCBvZiBsaWdodGluZyBpbmZvLgorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMudXNlTGlnaHRtYXBBc1NoYWRvd21hcCA9IGZhbHNlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGFscGhhIGlzIGNvbWlu
ZyBmb3JtIHRoZSBhbGJlZG8gY2hhbm5lbCBhbHBoYSBjaGFubmVsIGZvciBhbHBoYSBibGVuZGlu
Zy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnVzZUFscGhhRnJvbUFsYmVkb1RleHR1cmUg
PSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEVuZm9yY2VzIGFscGhhIHRlc3QgaW4g
b3BhcXVlIG9yIGJsZW5kIG1vZGUgaW4gb3JkZXIgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Vz
IG9mIHNvbWUgc2l0dWF0aW9ucy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmZvcmNlQWxw
aGFUZXN0ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBhbHBo
YSBsaW1pdHMgaW4gYWxwaGEgdGVzdCBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
YWxwaGFDdXRPZmYgPSAwLjQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgdGhh
dCB0aGUgbWF0ZXJpYWwgd2lsbCBrZWVwIHRoZSBzcGVjdWxhciBoaWdobGlnaHRzIG92ZXIgYSB0
cmFuc3BhcmVudCBzdXJmYWNlIChvbmx5IHRoZSBtb3N0IGxpbXVub3VzIG9uZXMpLgorICAgICAg
ICAgKiBBIGNhciBnbGFzcyBpcyBhIGdvb2QgZXhlbXBsZSBvZiB0aGF0LiBXaGVuIHN1biByZWZs
ZWN0cyBvbiBpdCB5b3UgY2FuIG5vdCBzZWUgd2hhdCBpcyBiZWhpbmQuCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy51c2VTcGVjdWxhck92ZXJBbHBoYSA9IHRydWU7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIHJlZmxlY3Rpdml0eSB0ZXh0dXJlIGNvbnRhaW5z
IHRoZSBnbG9zc2luZXNzIGluZm9ybWF0aW9uIGluIGl0cyBhbHBoYSBjaGFubmVsLgorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMudXNlTWljcm9TdXJmYWNlRnJvbVJlZmxlY3Rpdml0eU1hcEFs
cGhhID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIG1l
dGFsbGljIHRleHR1cmUgY29udGFpbnMgdGhlIHJvdWdobmVzcyBpbmZvcm1hdGlvbiBpbiBpdHMg
YWxwaGEgY2hhbm5lbC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnVzZVJvdWdobmVzc0Zy
b21NZXRhbGxpY1RleHR1cmVBbHBoYSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBT
cGVjaWZpZXMgaWYgdGhlIG1ldGFsbGljIHRleHR1cmUgY29udGFpbnMgdGhlIHJvdWdobmVzcyBp
bmZvcm1hdGlvbiBpbiBpdHMgZ3JlZW4gY2hhbm5lbC4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLnVzZVJvdWdobmVzc0Zyb21NZXRhbGxpY1RleHR1cmVHcmVlbiA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBtZXRhbGxpYyB0ZXh0dXJlIGNvbnRh
aW5zIHRoZSBtZXRhbGxuZXNzIGluZm9ybWF0aW9uIGluIGl0cyBibHVlIGNoYW5uZWwuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy51c2VNZXRhbGxuZXNzRnJvbU1ldGFsbGljVGV4dHVyZUJs
dWUgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbWV0
YWxsaWMgdGV4dHVyZSBjb250YWlucyB0aGUgYW1iaWVudCBvY2NsdXNpb24gaW5mb3JtYXRpb24g
aW4gaXRzIHJlZCBjaGFubmVsLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudXNlQW1iaWVu
dE9jY2x1c2lvbkZyb21NZXRhbGxpY1RleHR1cmVSZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgYW1iaWVudCB0ZXh0dXJlIGNvbnRhaW5zIHRoZSBh
bWJpZW50IG9jY2x1c2lvbiBpbmZvcm1hdGlvbiBpbiBpdHMgcmVkIGNoYW5uZWwgb25seS4KKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLnVzZUFtYmllbnRJbkdyYXlTY2FsZSA9IGZhbHNlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogSW4gY2FzZSB0aGUgcmVmbGVjdGl2aXR5IG1hcCBkb2Vz
IG5vdCBjb250YWluIHRoZSBtaWNyb3N1cmZhY2UgaW5mb3JtYXRpb24gaW4gaXRzIGFscGhhIGNo
YW5uZWwsCisgICAgICAgICAqIFRoZSBtYXRlcmlhbCB3aWxsIHRyeSB0byBpbmZlciB3aGF0IGds
b3NzaW5lc3MgZWFjaCBwaXhlbCBzaG91bGQgYmUuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy51c2VBdXRvTWljcm9TdXJmYWNlRnJvbVJlZmxlY3Rpdml0eU1hcCA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIG1hdGVyaWFsIHdpbGwga2VlcHMg
dGhlIHJlZmxlY3Rpb24gaGlnaGxpZ2h0cyBvdmVyIGEgdHJhbnNwYXJlbnQgc3VyZmFjZSAob25s
eSB0aGUgbW9zdCBsaW11bm91cyBvbmVzKS4KKyAgICAgICAgICogQSBjYXIgZ2xhc3MgaXMgYSBn
b29kIGV4ZW1wbGUgb2YgdGhhdC4gV2hlbiB0aGUgc3RyZWV0IGxpZ2h0cyByZWZsZWN0cyBvbiBp
dCB5b3UgY2FuIG5vdCBzZWUgd2hhdCBpcyBiZWhpbmQuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy51c2VSYWRpYW5jZU92ZXJBbHBoYSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBBbGxvd3MgdXNpbmcgYW4gb2JqZWN0IHNwYWNlIG5vcm1hbCBtYXAgKGluc3RlYWQgb2YgdGFu
Z2VudCBzcGFjZSkuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy51c2VPYmplY3RTcGFjZU5v
cm1hbE1hcCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogQWxsb3dzIHVzaW5nIHRo
ZSBidW1wIG1hcCBpbiBwYXJhbGxheCBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
dXNlUGFyYWxsYXggPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFsbG93cyB1c2lu
ZyB0aGUgYnVtcCBtYXAgaW4gcGFyYWxsYXggb2NjbHVzaW9uIG1vZGUuCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy51c2VQYXJhbGxheE9jY2x1c2lvbiA9IGZhbHNlOworICAgICAgICAvKioK
KyAgICAgICAgICogQ29udHJvbHMgdGhlIHNjYWxlIGJpYXMgb2YgdGhlIHBhcmFsbGF4IG1vZGUu
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5wYXJhbGxheFNjYWxlQmlhcyA9IDAuMDU7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBJZiBzZXRzIHRvIHRydWUsIGRpc2FibGVzIGFsbCB0aGUg
bGlnaHRzIGFmZmVjdGluZyB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5kaXNhYmxlTGlnaHRpbmcgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZvcmNl
IHRoZSBzaGFkZXIgdG8gY29tcHV0ZSBpcnJhZGlhbmNlIGluIHRoZSBmcmFnbWVudCBzaGFkZXIg
aW4gb3JkZXIgdG8gdGFrZSBidW1wIGluIGFjY291bnQuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5mb3JjZUlycmFkaWFuY2VJbkZyYWdtZW50ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBOdW1iZXIgb2YgU2ltdWx0YW5lb3VzIGxpZ2h0cyBhbGxvd2VkIG9uIHRoZSBtYXRl
cmlhbC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm1heFNpbXVsdGFuZW91c0xpZ2h0cyA9
IDQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBzZXRzIHRvIHRydWUsIHggY29tcG9uZW50
IG9mIG5vcm1hbCBtYXAgdmFsdWUgd2lsbCBpbnZlcnQgKHggPSAxLjAgLSB4KS4KKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLmludmVydE5vcm1hbE1hcFggPSBmYWxzZTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIElmIHNldHMgdG8gdHJ1ZSwgeSBjb21wb25lbnQgb2Ygbm9ybWFsIG1hcCB2
YWx1ZSB3aWxsIGludmVydCAoeSA9IDEuMCAtIHkpLgorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMuaW52ZXJ0Tm9ybWFsTWFwWSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogSWYg
c2V0cyB0byB0cnVlIGFuZCBiYWNrZmFjZUN1bGxpbmcgaXMgZmFsc2UsIG5vcm1hbHMgd2lsbCBi
ZSBmbGlwcGVkIG9uIHRoZSBiYWNrc2lkZS4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnR3
b1NpZGVkTGlnaHRpbmcgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgZnJlc25l
bCBpcyBhcHBsaWVkIHRvIHRoZSBhbHBoYSBvZiB0aGUgbW9kZWwgdG8gZW5zdXJlIGdyYXppbmcg
YW5nbGVzIGVkZ2VzIGFyZSBub3QgYWxwaGEgdGVzdGVkLgorICAgICAgICAgKiBBbmQvT3Igb2Nj
bHVkZSB0aGUgYmxlbmRlZCBwYXJ0LiAoYWxwaGEgaXMgY29udmVydGVkIHRvIGdhbW1hIHRvIGNv
bXB1dGUgdGhlIGZyZXNuZWwpCisgICAgICAgICAqLworICAgICAgICBfdGhpcy51c2VBbHBoYUZy
ZXNuZWwgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgZnJlc25lbCBpcyBhcHBs
aWVkIHRvIHRoZSBhbHBoYSBvZiB0aGUgbW9kZWwgdG8gZW5zdXJlIGdyYXppbmcgYW5nbGVzIGVk
Z2VzIGFyZSBub3QgYWxwaGEgdGVzdGVkLgorICAgICAgICAgKiBBbmQvT3Igb2NjbHVkZSB0aGUg
YmxlbmRlZCBwYXJ0LiAoYWxwaGEgc3RheXMgbGluZWFyIHRvIGNvbXB1dGUgdGhlIGZyZXNuZWwp
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy51c2VMaW5lYXJBbHBoYUZyZXNuZWwgPSBmYWxz
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExldCB1c2VyIGRlZmluZXMgdGhlIGJyZGYgbG9v
a3VwIHRleHR1cmUgdXNlZCBmb3IgSUJMLgorICAgICAgICAgKiBBIGRlZmF1bHQgOGJpdCB2ZXJz
aW9uIGlzIGVtYmVkZGVkIGJ1dCB5b3UgY291bGQgcG9pbnQgYXQgOgorICAgICAgICAgKiAqIERl
ZmF1bHQgdGV4dHVyZTogaHR0cHM6Ly9hc3NldHMuYmFieWxvbmpzLmNvbS9lbnZpcm9ubWVudHMv
Y29ycmVsYXRlZE1TQlJERl9SR0JELnBuZworICAgICAgICAgKiAqIERlZmF1bHQgMTZiaXQgcGl4
ZWwgZGVwdGggdGV4dHVyZTogaHR0cHM6Ly9hc3NldHMuYmFieWxvbmpzLmNvbS9lbnZpcm9ubWVu
dHMvY29ycmVsYXRlZE1TQlJERi5kZHMKKyAgICAgICAgICogKiBMRUdBQ1kgRGVmYXVsdCBOb25l
IGNvcnJlbGF0ZWQgaHR0cHM6Ly9hc3NldHMuYmFieWxvbmpzLmNvbS9lbnZpcm9ubWVudHMvdW5j
b3JyZWxhdGVkQlJERl9SR0JELnBuZworICAgICAgICAgKiAqIExFR0FDWSBEZWZhdWx0IE5vbmUg
Y29ycmVsYXRlZCAxNmJpdCBwaXhlbCBkZXB0aCBodHRwczovL2Fzc2V0cy5iYWJ5bG9uanMuY29t
L2Vudmlyb25tZW50cy91bmNvcnJlbGF0ZWRCUkRGLmRkcworICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuZW52aXJvbm1lbnRCUkRGVGV4dHVyZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBGb3JjZSBub3JtYWwgdG8gZmFjZSBhd2F5IGZyb20gZmFjZS4KKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLmZvcmNlTm9ybWFsRm9yd2FyZCA9IGZhbHNlOworICAgICAgICAvKioKKyAg
ICAgICAgICogRW5hYmxlcyBzcGVjdWxhciBhbnRpIGFsaWFzaW5nIGluIHRoZSBQQlIgc2hhZGVy
LgorICAgICAgICAgKiBJdCB3aWxsIGJvdGggaW50ZXJhY3RzIG9uIHRoZSBHZW9tZXRyeSBmb3Ig
YW5hbHl0aWNhbCBhbmQgSUJMIGxpZ2h0aW5nLgorICAgICAgICAgKiBJdCBhbHNvIHByZWZpbHRl
ciB0aGUgcm91Z2huZXNzIG1hcCBiYXNlZCBvbiB0aGUgYnVtcCB2YWx1ZXMuCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5lbmFibGVTcGVjdWxhckFudGlBbGlhc2luZyA9IGZhbHNlOworICAg
ICAgICAvKioKKyAgICAgICAgICogVGhpcyBwYXJhbWV0ZXJzIHdpbGwgZW5hYmxlL2Rpc2FibGUg
SG9yaXpvbiBvY2NsdXNpb24gdG8gcHJldmVudCBub3JtYWwgbWFwcyB0byBsb29rIHNoaW55IHdo
ZW4gdGhlIG5vcm1hbAorICAgICAgICAgKiBtYWtlcyB0aGUgcmVmbGVjdCB2ZWN0b3IgZmFjZSB0
aGUgbW9kZWwgKHVuZGVyIGhvcml6b24pLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudXNl
SG9yaXpvbk9jY2x1c2lvbiA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIHBh
cmFtZXRlcnMgd2lsbCBlbmFibGUvZGlzYWJsZSByYWRpYW5jZSBvY2NsdXNpb24gYnkgcHJldmVu
dGluZyB0aGUgcmFkaWFuY2UgdG8gbGl0CisgICAgICAgICAqIHRvbyBtdWNoIHRoZSBhcmVhIHJl
bHlpbmcgb24gYW1iaWVudCB0ZXh0dXJlIHRvIGRlZmluZSB0aGVpciBhbWJpZW50IG9jY2x1c2lv
bi4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnVzZVJhZGlhbmNlT2NjbHVzaW9uID0gdHJ1
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHNldCB0byB0cnVlLCBubyBsaWdodGluZyBj
YWxjdWxhdGlvbnMgd2lsbCBiZSBhcHBsaWVkLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
dW5saXQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2Vudmlyb25tZW50QlJERlRleHR1cmUgPSBf
TWlzY19icmRmVGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkJSREZU
ZXh0dXJlVG9vbHMiXS5HZXRFbnZpcm9ubWVudEJSREZUZXh0dXJlKHNjZW5lKTsKKyAgICAgICAg
cmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUEJSTWF0ZXJp
YWwucHJvdG90eXBlLCAicmVmcmFjdGlvblRleHR1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBTdG9yZXMgdGhlIHJlZnJhY3RlZCBsaWdodCBpbmZvcm1hdGlvbiBpbiBhIHRleHR1cmUu
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLnN1YlN1cmZhY2UucmVmcmFjdGlvblRleHR1cmU7CisgICAgICAgIH0sCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLnN1YlN1cmZhY2Uu
cmVmcmFjdGlvblRleHR1cmUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIHRoaXMuc3ViU3VyZmFjZS5pc1JlZnJhY3Rpb25FbmFibGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnN1YlN1cmZhY2UubGlu
a1JlZnJhY3Rpb25XaXRoVHJhbnNwYXJlbmN5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5zdWJT
dXJmYWNlLmlzUmVmcmFjdGlvbkVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBCUk1hdGVyaWFsLnByb3Rv
dHlwZSwgImluZGV4T2ZSZWZyYWN0aW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogc291
cmNlIG1hdGVyaWFsIGluZGV4IG9mIHJlZnJhY3Rpb24gKElPUiknIC8gJ2Rlc3RpbmF0aW9uIG1h
dGVyaWFsIElPUi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIDEgLyB0aGlzLnN1YlN1cmZhY2UuaW5kZXhPZlJlZnJhY3Rpb247Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0
aGlzLnN1YlN1cmZhY2UuaW5kZXhPZlJlZnJhY3Rpb24gPSAxIC8gdmFsdWU7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQQlJNYXRlcmlhbC5wcm90b3R5cGUs
ICJpbnZlcnRSZWZyYWN0aW9uWSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnRyb2xz
IGlmIHJlZnJhY3Rpb24gbmVlZHMgdG8gYmUgaW52ZXJ0ZWQgb24gWS4gVGhpcyBjb3VsZCBiZSB1
c2VmdWwgZm9yIHByb2NlZHVyYWwgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViU3VyZmFjZS5pbnZlcnRS
ZWZyYWN0aW9uWTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHRoaXMuc3ViU3VyZmFjZS5pbnZlcnRSZWZyYWN0aW9uWSA9IHZhbHVlOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUEJSTWF0ZXJpYWwu
cHJvdG90eXBlLCAibGlua1JlZnJhY3Rpb25XaXRoVHJhbnNwYXJlbmN5IiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogVGhpcyBwYXJhbWV0ZXJzIHdpbGwgbWFrZSB0aGUgbWF0ZXJpYWwgdXNl
ZCBpdHMgb3BhY2l0eSB0byBjb250cm9sIGhvdyBtdWNoIGl0IGlzIHJlZnJhY3RpbmcgYWdpbnN0
IG5vdC4KKyAgICAgICAgICogTWF0ZXJpYWxzIGhhbGYgb3BhcXVlIGZvciBpbnN0YW5jZSB1c2lu
ZyByZWZyYWN0aW9uIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGlzIGNvbnRyb2wuCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnN1
YlN1cmZhY2UubGlua1JlZnJhY3Rpb25XaXRoVHJhbnNwYXJlbmN5OworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5zdWJTdXJmYWNl
LmxpbmtSZWZyYWN0aW9uV2l0aFRyYW5zcGFyZW5jeSA9IHZhbHVlOworICAgICAgICAgICAgaWYg
KHZhbHVlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zdWJTdXJmYWNlLmlzUmVmcmFjdGlvbkVu
YWJsZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidXNlUGh5c2ljYWxMaWdo
dEZhbGxvZmYiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBCSlMgaXMgdXNpbmcgYW4gaGFy
Y29kZWQgbGlnaHQgZmFsbG9mZiBiYXNlZCBvbiBhIG1hbnVhbGx5IHNldHMgdXAgcmFuZ2UuCisg
ICAgICAgICAqIEluIFBCUiwgb25lIHdheSB0byByZXByZXNlbnRzIHRoZSBmYWxsb2YgaXMgdG8g
dXNlIHRoZSBpbnZlcnNlIHNxdWFyZWQgcm9vdCBhbGdvcnl0aG0uCisgICAgICAgICAqIFRoaXMg
cGFyYW1ldGVyIGNhbiBoZWxwIHlvdSBzd2l0Y2ggYmFjayB0byB0aGUgQkpTIG1vZGUgaW4gb3Jk
ZXIgdG8gY3JlYXRlIHNjZW5lcyB1c2luZyBib3RoIG1hdGVyaWFscy4KKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0
RmFsbG9mZiA9PT0gX3BickJhc2VNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJQQlJCYXNlTWF0ZXJpYWwiXS5MSUdIVEZBTExPRkZfUEhZU0lDQUw7CisgICAgICAgIH0sCisg
ICAgICAgIC8qKgorICAgICAgICAgKiBCSlMgaXMgdXNpbmcgYW4gaGFyY29kZWQgbGlnaHQgZmFs
bG9mZiBiYXNlZCBvbiBhIG1hbnVhbGx5IHNldHMgdXAgcmFuZ2UuCisgICAgICAgICAqIEluIFBC
Uiwgb25lIHdheSB0byByZXByZXNlbnRzIHRoZSBmYWxsb2YgaXMgdG8gdXNlIHRoZSBpbnZlcnNl
IHNxdWFyZWQgcm9vdCBhbGdvcnl0aG0uCisgICAgICAgICAqIFRoaXMgcGFyYW1ldGVyIGNhbiBo
ZWxwIHlvdSBzd2l0Y2ggYmFjayB0byB0aGUgQkpTIG1vZGUgaW4gb3JkZXIgdG8gY3JlYXRlIHNj
ZW5lcyB1c2luZyBib3RoIG1hdGVyaWFscy4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMudXNlUGh5c2lj
YWxMaWdodEZhbGxvZmYpIHsKKyAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIGVmZmVjdCB3
aWxsIGJlIHJlYnVpbHQuCisgICAgICAgICAgICAgICAgdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0Fz
VGV4dHVyZXNEaXJ0eSgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9saWdodEZhbGxvZmYgPSBfcGJyQmFzZU1hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlBCUkJhc2VNYXRlcmlhbCJdLkxJR0hURkFMTE9GRl9QSFlT
SUNBTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX2xpZ2h0RmFsbG9mZiA9IF9wYnJCYXNlTWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siUEJSQmFzZU1hdGVyaWFsIl0uTElHSFRGQUxMT0ZGX1NU
QU5EQVJEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgInVz
ZUdMVEZMaWdodEZhbGxvZmYiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJbiBvcmRlciB0
byBzdXBwb3J0IHRoZSBmYWxsb2ZmIGNvbXBhdGliaWxpdHkgd2l0aCBnbHRmLCBhIHNwZWNpYWwg
bW9kZSBoYXMgYmVlbiBhZGRlZAorICAgICAgICAgKiB0byByZXByb2R1Y2UgdGhlIGdsdGYgbGln
aHQgZmFsbG9mZi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0RmFsbG9mZiA9PT0gX3BickJhc2VNYXRlcmlhbF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQQlJCYXNlTWF0ZXJpYWwiXS5MSUdIVEZBTExP
RkZfR0xURjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEluIG9yZGVyIHRv
IHN1cHBvcnQgdGhlIGZhbGxvZmYgY29tcGF0aWJpbGl0eSB3aXRoIGdsdGYsIGEgc3BlY2lhbCBt
b2RlIGhhcyBiZWVuIGFkZGVkCisgICAgICAgICAqIHRvIHJlcHJvZHVjZSB0aGUgZ2x0ZiBsaWdo
dCBmYWxsb2ZmLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy51c2VHTFRGTGlnaHRGYWxsb2ZmKSB7Cisg
ICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBlZmZlY3Qgd2lsbCBiZSByZWJ1aWx0LgorICAg
ICAgICAgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkoKTsKKyAg
ICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGln
aHRGYWxsb2ZmID0gX3BickJhc2VNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJQQlJCYXNlTWF0ZXJpYWwiXS5MSUdIVEZBTExPRkZfR0xURjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpZ2h0
RmFsbG9mZiA9IF9wYnJCYXNlTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
UEJSQmFzZU1hdGVyaWFsIl0uTElHSFRGQUxMT0ZGX1NUQU5EQVJEOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRp
b24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBpbWFnZSBwcm9jZXNzaW5n
IGNvbmZpZ3VyYXRpb24gdXNlZCBlaXRoZXIgaW4gdGhpcyBtYXRlcmlhbC4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb247CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTZXRzIHRoZSBEZWZhdWx0IGltYWdlIHByb2Nlc3NpbmcgY29uZmlndXJhdGlvbiB1
c2VkIGVpdGhlciBpbiB0aGUgdGhpcyBtYXRlcmlhbC4KKyAgICAgICAgICoKKyAgICAgICAgICog
SWYgc2V0cyB0byBudWxsLCB0aGUgc2NlbmUgb25lIGlzIGluIHVzZS4KKyAgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9hdHRhY2hJ
bWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKHZhbHVlKTsKKyAgICAgICAgICAgIC8vIEVuc3Vy
ZSB0aGUgZWZmZWN0IHdpbGwgYmUgcmVidWlsdC4KKyAgICAgICAgICAgIHRoaXMuX21hcmtBbGxT
dWJNZXNoZXNBc1RleHR1cmVzRGlydHkoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImNhbWVyYUNvbG9yQ3VydmVz
RW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0aGVyIHRoZSBjb2xv
ciBjdXJ2ZXMgZWZmZWN0IGlzIGVuYWJsZWQuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZp
Z3VyYXRpb24uY29sb3JDdXJ2ZXNFbmFibGVkOworICAgICAgICB9LAorICAgICAgICAvKioKKyAg
ICAgICAgICogU2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGN1cnZlcyBlZmZlY3QgaXMgZW5hYmxlZC4K
KyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uY29sb3JDdXJ2ZXNFbmFibGVkID0g
dmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQQlJN
YXRlcmlhbC5wcm90b3R5cGUsICJjYW1lcmFDb2xvckdyYWRpbmdFbmFibGVkIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGdyYWRpbmcgZWZmZWN0IGlz
IGVuYWJsZWQuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uY29sb3JHcmFk
aW5nRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0
aGVyIHRoZSBjb2xvciBncmFkaW5nIGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckdyYWRpbmdFbmFibGVkID0gdmFsdWU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQQlJNYXRlcmlhbC5wcm90b3R5
cGUsICJjYW1lcmFUb25lTWFwcGluZ0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHdldGhlciB0b25lbWFwcGluZyBpcyBlbmFibGVkIG9yIG5vdC4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udG9uZU1hcHBpbmdFbmFibGVkOworICAgICAgICB9
LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3ZXRoZXIgdG9uZW1hcHBpbmcgaXMgZW5h
YmxlZCBvciBub3QKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnRvbmVNYXBw
aW5nRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAiY2FtZXJhRXhwb3N1cmUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBUaGUgY2FtZXJhIGV4cG9zdXJlIHVzZWQgb24gdGhpcyBtYXRl
cmlhbC4KKyAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyBoZXJlIGFuZCBub3QgaW4gdGhlIGNh
bWVyYSB0byBhbGxvdyBjb250cm9sbGluZyBleHBvc3VyZSB3aXRob3V0IGZ1bGwgc2NyZWVuIHBv
c3QgcHJvY2Vzcy4KKyAgICAgICAgICogVGhpcyBjb3JyZXNwb25kcyB0byBhIHBob3RvZ3JhcGhp
YyBleHBvc3VyZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uZXhwb3N1
cmU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY2FtZXJhIGV4cG9z
dXJlIHVzZWQgb24gdGhpcyBtYXRlcmlhbC4KKyAgICAgICAgICogVGhpcyBwcm9wZXJ0eSBpcyBo
ZXJlIGFuZCBub3QgaW4gdGhlIGNhbWVyYSB0byBhbGxvdyBjb250cm9sbGluZyBleHBvc3VyZSB3
aXRob3V0IGZ1bGwgc2NyZWVuIHBvc3QgcHJvY2Vzcy4KKyAgICAgICAgICogVGhpcyBjb3JyZXNw
b25kcyB0byBhIHBob3RvZ3JhcGhpYyBleHBvc3VyZS4KKyAgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uLmV4cG9zdXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1lcmFDb250cmFz
dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgVGhlIGNhbWVyYSBjb250cmFzdCB1
c2VkIG9uIHRoaXMgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0
aW9uLmNvbnRyYXN0OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyBU
aGUgY2FtZXJhIGNvbnRyYXN0IHVzZWQgb24gdGhpcyBtYXRlcmlhbC4KKyAgICAgICAgICovCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbnRyYXN0ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1l
cmFDb2xvckdyYWRpbmdUZXh0dXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgQ29sb3IgR3JhZGluZyAyRCBMb29rdXAgVGV4dHVyZS4KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24uY29sb3JHcmFkaW5nVGV4dHVyZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIENvbG9yIEdyYWRpbmcgMkQgTG9va3VwIFRleHR1
cmUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckdyYWRpbmdUZXh0
dXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1lcmFDb2xvckN1cnZlcyIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFRoZSBjb2xvciBncmFkaW5nIGN1cnZlcyBwcm92aWRlIGFkZGl0aW9u
YWwgY29sb3IgYWRqdXN0bW5lbnQgdGhhdCBpcyBhcHBsaWVkIGFmdGVyIGFueSBjb2xvciBncmFk
aW5nIHRyYW5zZm9ybSAoM0QgTFVUKS4KKyAgICAgICAgICogVGhleSBhbGxvdyBiYXNpYyBhZGp1
c3RtZW50IG9mIHNhdHVyYXRpb24gYW5kIHNtYWxsIGV4cG9zdXJlIGFkanVzdG1lbnRzLCBhbG9u
ZyB3aXRoIGNvbG9yIGZpbHRlciB0aW50aW5nIHRvIHByb3ZpZGUgd2hpdGUgYmFsYW5jZSBhZGp1
c3RtZW50IG9yIG1vcmUgc3R5bGlzdGljIGVmZmVjdHMuCisgICAgICAgICAqIFRoZXNlIGFyZSBz
aW1pbGFyIHRvIGNvbnRyb2xzIGZvdW5kIGluIG1hbnkgcHJvZmVzc2lvbmFsIGltYWdpbmcgb3Ig
Y29sb3Jpc3Qgc29mdHdhcmUuIFRoZSBnbG9iYWwgY29udHJvbHMgYXJlIGFwcGxpZWQgdG8gdGhl
IGVudGlyZSBpbWFnZS4gRm9yIGFkdmFuY2VkIHR1bmluZywgZXh0cmEgY29udHJvbHMgYXJlIHBy
b3ZpZGVkIHRvIGFkanVzdCB0aGUgc2hhZG93LCBtaWR0b25lIGFuZCBoaWdobGlnaHQgYXJlYXMg
b2YgdGhlIGltYWdlOworICAgICAgICAgKiBjb3JyZXNwb25kaW5nIHRvIGxvdyBsdW1pbmFuY2Us
IG1lZGl1bSBsdW1pbmFuY2UsIGFuZCBoaWdoIGx1bWluYW5jZSBhcmVhcyByZXNwZWN0aXZlbHku
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yQ3VydmVzOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIGdyYWRpbmcgY3VydmVz
IHByb3ZpZGUgYWRkaXRpb25hbCBjb2xvciBhZGp1c3RtbmVudCB0aGF0IGlzIGFwcGxpZWQgYWZ0
ZXIgYW55IGNvbG9yIGdyYWRpbmcgdHJhbnNmb3JtICgzRCBMVVQpLgorICAgICAgICAgKiBUaGV5
IGFsbG93IGJhc2ljIGFkanVzdG1lbnQgb2Ygc2F0dXJhdGlvbiBhbmQgc21hbGwgZXhwb3N1cmUg
YWRqdXN0bWVudHMsIGFsb25nIHdpdGggY29sb3IgZmlsdGVyIHRpbnRpbmcgdG8gcHJvdmlkZSB3
aGl0ZSBiYWxhbmNlIGFkanVzdG1lbnQgb3IgbW9yZSBzdHlsaXN0aWMgZWZmZWN0cy4KKyAgICAg
ICAgICogVGhlc2UgYXJlIHNpbWlsYXIgdG8gY29udHJvbHMgZm91bmQgaW4gbWFueSBwcm9mZXNz
aW9uYWwgaW1hZ2luZyBvciBjb2xvcmlzdCBzb2Z0d2FyZS4gVGhlIGdsb2JhbCBjb250cm9scyBh
cmUgYXBwbGllZCB0byB0aGUgZW50aXJlIGltYWdlLiBGb3IgYWR2YW5jZWQgdHVuaW5nLCBleHRy
YSBjb250cm9scyBhcmUgcHJvdmlkZWQgdG8gYWRqdXN0IHRoZSBzaGFkb3csIG1pZHRvbmUgYW5k
IGhpZ2hsaWdodCBhcmVhcyBvZiB0aGUgaW1hZ2U7CisgICAgICAgICAqIGNvcnJlc3BvbmRpbmcg
dG8gbG93IGx1bWluYW5jZSwgbWVkaXVtIGx1bWluYW5jZSwgYW5kIGhpZ2ggbHVtaW5hbmNlIGFy
ZWFzIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNv
bG9yQ3VydmVzID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFJl
dHVybnMgdGhlIG5hbWUgb2YgdGhpcyBtYXRlcmlhbCBjbGFzcy4KKyAgICAgKi8KKyAgICBQQlJN
YXRlcmlhbC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gIlBCUk1hdGVyaWFsIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1ha2VzIGEgZHVw
bGljYXRlIG9mIHRoZSBjdXJyZW50IG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBuYW1lIC0gbmFt
ZSB0byB1c2UgZm9yIHRoZSBuZXcgbWF0ZXJpYWwuCisgICAgICovCisgICAgUEJSTWF0ZXJpYWwu
cHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgdmFyIGNsb25lID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uQ2xvbmUoZnVuY3Rpb24gKCkg
eyByZXR1cm4gbmV3IFBCUk1hdGVyaWFsKG5hbWUsIF90aGlzLmdldFNjZW5lKCkpOyB9LCB0aGlz
KTsKKyAgICAgICAgY2xvbmUuaWQgPSBuYW1lOworICAgICAgICBjbG9uZS5uYW1lID0gbmFtZTsK
KyAgICAgICAgdGhpcy5jbGVhckNvYXQuY29weVRvKGNsb25lLmNsZWFyQ29hdCk7CisgICAgICAg
IHRoaXMuYW5pc290cm9weS5jb3B5VG8oY2xvbmUuYW5pc290cm9weSk7CisgICAgICAgIHRoaXMu
YnJkZi5jb3B5VG8oY2xvbmUuYnJkZik7CisgICAgICAgIHRoaXMuc2hlZW4uY29weVRvKGNsb25l
LnNoZWVuKTsKKyAgICAgICAgcmV0dXJuIGNsb25lOworICAgIH07CisgICAgLyoqCisgICAgICog
U2VyaWFsaXplcyB0aGlzIFBCUiBNYXRlcmlhbC4KKyAgICAgKiBAcmV0dXJucyAtIEFuIG9iamVj
dCB3aXRoIHRoZSBzZXJpYWxpemVkIG1hdGVyaWFsLgorICAgICAqLworICAgIFBCUk1hdGVyaWFs
LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxp
emF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXplKHRoaXMpOworICAgICAgICBzZXJp
YWxpemF0aW9uT2JqZWN0LmN1c3RvbVR5cGUgPSAiQkFCWUxPTi5QQlJNYXRlcmlhbCI7CisgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY2xlYXJDb2F0ID0gdGhpcy5jbGVhckNvYXQuc2VyaWFs
aXplKCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYW5pc290cm9weSA9IHRoaXMuYW5p
c290cm9weS5zZXJpYWxpemUoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5icmRmID0g
dGhpcy5icmRmLnNlcmlhbGl6ZSgpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNoZWVu
ID0gdGhpcy5zaGVlbi5zZXJpYWxpemUoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5z
dWJTdXJmYWNlID0gdGhpcy5zdWJTdXJmYWNlLnNlcmlhbGl6ZSgpOworICAgICAgICByZXR1cm4g
c2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAg
ICAgKiBQYXJzZXMgYSBQQlIgTWF0ZXJpYWwgZnJvbSBhIHNlcmlhbGl6ZWQgb2JqZWN0LgorICAg
ICAqIEBwYXJhbSBzb3VyY2UgLSBTZXJpYWxpemVkIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gc2Nl
bmUgLSBCSlMgc2NlbmUgaW5zdGFuY2UuCisgICAgICogQHBhcmFtIHJvb3RVcmwgLSB1cmwgZm9y
IHRoZSBzY2VuZSBvYmplY3QKKyAgICAgKiBAcmV0dXJucyAtIFBCUk1hdGVyaWFsCisgICAgICov
CisgICAgUEJSTWF0ZXJpYWwuUGFyc2UgPSBmdW5jdGlvbiAoc291cmNlLCBzY2VuZSwgcm9vdFVy
bCkgeworICAgICAgICB2YXIgbWF0ZXJpYWwgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5QYXJzZShmdW5jdGlvbiAo
KSB7IHJldHVybiBuZXcgUEJSTWF0ZXJpYWwoc291cmNlLm5hbWUsIHNjZW5lKTsgfSwgc291cmNl
LCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIGlmIChzb3VyY2UuY2xlYXJDb2F0KSB7CisgICAg
ICAgICAgICBtYXRlcmlhbC5jbGVhckNvYXQucGFyc2Uoc291cmNlLmNsZWFyQ29hdCwgc2NlbmUs
IHJvb3RVcmwpOworICAgICAgICB9CisgICAgICAgIGlmIChzb3VyY2UuYW5pc290cm9weSkgewor
ICAgICAgICAgICAgbWF0ZXJpYWwuYW5pc290cm9weS5wYXJzZShzb3VyY2UuYW5pc290cm9weSwg
c2NlbmUsIHJvb3RVcmwpOworICAgICAgICB9CisgICAgICAgIGlmIChzb3VyY2UuYnJkZikgewor
ICAgICAgICAgICAgbWF0ZXJpYWwuYnJkZi5wYXJzZShzb3VyY2UuYnJkZiwgc2NlbmUsIHJvb3RV
cmwpOworICAgICAgICB9CisgICAgICAgIGlmIChzb3VyY2Uuc2hlZW4pIHsKKyAgICAgICAgICAg
IG1hdGVyaWFsLnNoZWVuLnBhcnNlKHNvdXJjZS5zaGVlbiwgc2NlbmUsIHJvb3RVcmwpOworICAg
ICAgICB9CisgICAgICAgIGlmIChzb3VyY2Uuc3ViU3VyZmFjZSkgeworICAgICAgICAgICAgbWF0
ZXJpYWwuc3ViU3VyZmFjZS5wYXJzZShzb3VyY2Uuc3ViU3VyZmFjZSwgc2NlbmUsIHJvb3RVcmwp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYXRlcmlhbDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFBCUk1hdGVyaWFsVHJhbnNwYXJlbmN5TW9kZTogTm8gdHJhbnNwYXJlbmN5IG1vZGUs
IEFscGhhIGNoYW5uZWwgaXMgbm90IHVzZS4KKyAgICAgKi8KKyAgICBQQlJNYXRlcmlhbC5QQlJN
QVRFUklBTF9PUEFRVUUgPSBfcGJyQmFzZU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIlBCUkJhc2VNYXRlcmlhbCJdLlBCUk1BVEVSSUFMX09QQVFVRTsKKyAgICAvKioKKyAg
ICAgKiBQQlJNYXRlcmlhbFRyYW5zcGFyZW5jeU1vZGU6IEFscGhhIFRlc3QgbW9kZSwgcGl4ZWwg
YXJlIGRpc2NhcmRlZCBiZWxvdyBhIGNlcnRhaW4gdGhyZXNob2xkIGRlZmluZWQgYnkgdGhlIGFs
cGhhIGN1dG9mZiB2YWx1ZS4KKyAgICAgKi8KKyAgICBQQlJNYXRlcmlhbC5QQlJNQVRFUklBTF9B
TFBIQVRFU1QgPSBfcGJyQmFzZU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlBCUkJhc2VNYXRlcmlhbCJdLlBCUk1BVEVSSUFMX0FMUEhBVEVTVDsKKyAgICAvKioKKyAgICAg
KiBQQlJNYXRlcmlhbFRyYW5zcGFyZW5jeU1vZGU6IFBpeGVscyBhcmUgYmxlbmRlZCAoYWNjb3Jk
aW5nIHRvIHRoZSBhbHBoYSBtb2RlKSB3aXRoIHRoZSBhbHJlYWR5IGRyYXduIHBpeGVscyBpbiB0
aGUgY3VycmVudCBmcmFtZSBidWZmZXIuCisgICAgICovCisgICAgUEJSTWF0ZXJpYWwuUEJSTUFU
RVJJQUxfQUxQSEFCTEVORCA9IF9wYnJCYXNlTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siUEJSQmFzZU1hdGVyaWFsIl0uUEJSTUFURVJJQUxfQUxQSEFCTEVORDsKKyAgICAv
KioKKyAgICAgKiBQQlJNYXRlcmlhbFRyYW5zcGFyZW5jeU1vZGU6IFBpeGVscyBhcmUgYmxlbmRl
ZCAoYWNjb3JkaW5nIHRvIHRoZSBhbHBoYSBtb2RlKSB3aXRoIHRoZSBhbHJlYWR5IGRyYXduIHBp
eGVscyBpbiB0aGUgY3VycmVudCBmcmFtZSBidWZmZXIuCisgICAgICogVGhleSBhcmUgYWxzbyBk
aXNjYXJkZWQgYmVsb3cgdGhlIGFscGhhIGN1dG9mZiB0aHJlc2hvbGQgdG8gaW1wcm92ZSBwZXJm
b3JtYW5jZXMuCisgICAgICovCisgICAgUEJSTWF0ZXJpYWwuUEJSTUFURVJJQUxfQUxQSEFURVNU
QU5EQkxFTkQgPSBfcGJyQmFzZU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlBCUkJhc2VNYXRlcmlhbCJdLlBCUk1BVEVSSUFMX0FMUEhBVEVTVEFOREJMRU5EOworICAgIC8q
KgorICAgICAqIERlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgaG93IG11Y2ggQU8gbWFwIGlz
IG9jY2x1ZGluZyB0aGUgYW5hbHl0aWNhbCBsaWdodHMKKyAgICAgKiAocG9pbnQgc3BvdC4uLiku
CisgICAgICovCisgICAgUEJSTWF0ZXJpYWwuREVGQVVMVF9BT19PTl9BTkFMWVRJQ0FMX0xJR0hU
UyA9IF9wYnJCYXNlTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUEJSQmFz
ZU1hdGVyaWFsIl0uREVGQVVMVF9BT19PTl9BTkFMWVRJQ0FMX0xJR0hUUzsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1Rl
eHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImRpcmVjdEludGVu
c2l0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVy
dHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRl
cmlhbC5wcm90b3R5cGUsICJlbWlzc2l2ZUludGVuc2l0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJlbnZpcm9ubWVu
dEludGVuc2l0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRv
UHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQ
QlJNYXRlcmlhbC5wcm90b3R5cGUsICJzcGVjdWxhckludGVuc2l0eSIsIHZvaWQgMCk7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAg
ICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
c2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVz
aGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJkaXNh
YmxlQnVtcE1hcCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCksCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
ImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikK
KyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJhbGJlZG9UZXh0dXJlIiwgdm9pZCAwKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgi
X21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnBy
b3RvdHlwZSwgImFtYmllbnRUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGly
dHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImFtYmllbnRUZXh0dXJlU3RyZW5n
dGgiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5
Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJp
YWwucHJvdG90eXBlLCAiYW1iaWVudFRleHR1cmVJbXBhY3RPbkFuYWx5dGljYWxMaWdodHMiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgpLAorICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3Bl
cnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNBbmRNaXNjRGlydHkiKQorICAgIF0s
IFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgIm9wYWNpdHlUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAg
ICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJz
ZXJpYWxpemVBc1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtB
bGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3RvdHlw
ZSwgInJlZmxlY3Rpb25UZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUi
XSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1
cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImVtaXNzaXZlVGV4dHVy
ZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCksCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRv
UHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQ
QlJNYXRlcmlhbC5wcm90b3R5cGUsICJyZWZsZWN0aXZpdHlUZXh0dXJlIiwgdm9pZCAwKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJzZXJpYWxpemVBc1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21h
cmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3Rv
dHlwZSwgIm1ldGFsbGljVGV4dHVyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5
IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJtZXRhbGxpYyIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3Vi
TWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJy
b3VnaG5lc3MiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgpLAorICAgICAg
ICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJl
eHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisg
ICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAibWljcm9TdXJmYWNlVGV4dHVyZSIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHki
XSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlh
bC5wcm90b3R5cGUsICJidW1wVGV4dHVyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0
dXJlIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0RpcnR5IiwgbnVsbCkKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJsaWdo
dG1hcFRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzQ29sb3IzIl0pKCJhbWJpZW50
IiksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJl
c0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJhbWJpZW50Q29sb3IiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZUFzQ29sb3IzIl0pKCJhbGJlZG8iKSwKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5k
VG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0s
IFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImFsYmVkb0NvbG9yIiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemVBc0NvbG9yMyJdKSgicmVmbGVjdGl2aXR5IiksCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHki
XSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlh
bC5wcm90b3R5cGUsICJyZWZsZWN0aXZpdHlDb2xvciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
QXNDb2xvcjMiXSkoInJlZmxlY3Rpb24iKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21h
cmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3Rv
dHlwZSwgInJlZmxlY3Rpb25Db2xvciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNDb2xvcjMi
XSkoImVtaXNzaXZlIiksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVz
aGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJlbWlz
c2l2ZUNvbG9yIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Q
cm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBC
Uk1hdGVyaWFsLnByb3RvdHlwZSwgIm1pY3JvU3VyZmFjZSIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VMaWdodG1h
cEFzU2hhZG93bWFwIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5k
VG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzQW5kTWlzY0RpcnR5IikK
KyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VBbHBoYUZyb21BbGJlZG9UZXh0dXJl
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJd
KSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzQW5kTWlzY0RpcnR5IikKKyAgICBdLCBQQlJN
YXRlcmlhbC5wcm90b3R5cGUsICJmb3JjZUFscGhhVGVzdCIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0FuZE1pc2NEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAiYWxw
aGFDdXRPZmYiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1By
b3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJS
TWF0ZXJpYWwucHJvdG90eXBlLCAidXNlU3BlY3VsYXJPdmVyQWxwaGEiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1l
c2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidXNl
TWljcm9TdXJmYWNlRnJvbVJlZmxlY3Rpdml0eU1hcEFscGhhIiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNB
c1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgInVzZVJvdWdo
bmVzc0Zyb21NZXRhbGxpY1RleHR1cmVBbHBoYSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJl
c0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VSb3VnaG5lc3NGcm9t
TWV0YWxsaWNUZXh0dXJlR3JlZW4iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIp
CisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidXNlTWV0YWxsbmVzc0Zyb21NZXRhbGxp
Y1RleHR1cmVCbHVlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5k
VG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0s
IFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgInVzZUFtYmllbnRPY2NsdXNpb25Gcm9tTWV0YWxsaWNU
ZXh0dXJlUmVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Q
cm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBC
Uk1hdGVyaWFsLnByb3RvdHlwZSwgInVzZUFtYmllbnRJbkdyYXlTY2FsZSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3Vi
TWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJ1
c2VBdXRvTWljcm9TdXJmYWNlRnJvbVJlZmxlY3Rpdml0eU1hcCIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplIl0pKCkKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VQaHlzaWNhbExp
Z2h0RmFsbG9mZiIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgUEJSTWF0ZXJp
YWwucHJvdG90eXBlLCAidXNlR0xURkxpZ2h0RmFsbG9mZiIsIG51bGwpOworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6
ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4
dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidXNlUmFkaWFuY2VP
dmVyQWxwaGEiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1By
b3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJS
TWF0ZXJpYWwucHJvdG90eXBlLCAidXNlT2JqZWN0U3BhY2VOb3JtYWxNYXAiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1
Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAi
dXNlUGFyYWxsYXgiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRU
b1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwg
UEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidXNlUGFyYWxsYXhPY2NsdXNpb24iLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1
Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAi
cGFyYWxsYXhTY2FsZUJpYXMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAg
ICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJl
eHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzTGlnaHRzRGlydHkiKQorICAg
IF0sIFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImRpc2FibGVMaWdodGluZyIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3Vi
TWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJm
b3JjZUlycmFkaWFuY2VJbkZyYWdtZW50Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc0xpZ2h0c0RpcnR5
IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJtYXhTaW11bHRhbmVvdXNMaWdodHMi
LCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVj
b3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0p
KCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwu
cHJvdG90eXBlLCAiaW52ZXJ0Tm9ybWFsTWFwWCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJl
c0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJpbnZlcnROb3JtYWxNYXBZ
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJd
KSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFs
LnByb3RvdHlwZSwgInR3b1NpZGVkTGlnaHRpbmciLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJd
KSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVy
ZXNEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidXNlQWxwaGFGcmVzbmVs
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJd
KSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUk1hdGVyaWFs
LnByb3RvdHlwZSwgInVzZUxpbmVhckFscGhhRnJlc25lbCIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplQXNUZXh0dXJlIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3Vi
TWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJl
bnZpcm9ubWVudEJSREZUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHki
KQorICAgIF0sIFBCUk1hdGVyaWFsLnByb3RvdHlwZSwgImZvcmNlTm9ybWFsRm9yd2FyZCIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9t
YXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90
b3R5cGUsICJlbmFibGVTcGVjdWxhckFudGlBbGlhc2luZyIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNYXRlcmlhbC5wcm90b3R5cGUsICJ1c2VIb3Jpem9u
T2NjbHVzaW9uIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Q
cm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBC
Uk1hdGVyaWFsLnByb3RvdHlwZSwgInVzZVJhZGlhbmNlT2NjbHVzaW9uIiwgdm9pZCAwKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJN
ZXNoZXNBc01pc2NEaXJ0eSIpCisgICAgXSwgUEJSTWF0ZXJpYWwucHJvdG90eXBlLCAidW5saXQi
LCB2b2lkIDApOworICAgIHJldHVybiBQQlJNYXRlcmlhbDsKK30oX3BickJhc2VNYXRlcmlhbF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQQlJCYXNlTWF0ZXJpYWwiXSkpOworCitfTWlz
Y190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siX1R5cGVTdG9yZSJdLlJl
Z2lzdGVyZWRUeXBlc1siQkFCWUxPTi5QQlJNYXRlcmlhbCJdID0gUEJSTWF0ZXJpYWw7CisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9QQlIvcGJyTWV0YWxsaWNSb3VnaG5lc3NN
YXRlcmlhbC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvUEJSL3Bick1ldGFsbGljUm91
Z2huZXNzTWF0ZXJpYWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQQlJNZXRh
bGxpY1JvdWdobmVzc01hdGVyaWFsICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBC
Uk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWw7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVjb3JhdG9y
cyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cGJyQmFzZVNpbXBsZU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3BickJhc2VTaW1wbGVNYXRlcmlhbCAqLyAiLi9NYXRlcmlh
bHMvUEJSL3BickJhc2VTaW1wbGVNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3Rv
cmUudHMiKTsKKworCisKKworLyoqCisgKiBUaGUgUEJSIG1hdGVyaWFsIG9mIEJKUyBmb2xsb3dp
bmcgdGhlIG1ldGFsIHJvdWdobmVzcyBjb252ZW50aW9uLgorICoKKyAqIFRoaXMgZml0cyB0byB0
aGUgUEJSIGNvbnZlbnRpb24gaW4gdGhlIEdMVEYgZGVmaW5pdGlvbjoKKyAqIGh0dHBzOi8vZ2l0
aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi90cmVlLzIuMC9zcGVjaWZpY2F0aW9uLzIuMAorICov
Cit2YXIgUEJSTWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShQQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsLCBfc3VwZXIpOworICAgIC8q
KgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBQQlJNZXRhbFJvdWdobmVzc01hdGVyaWFsIGlu
c3RhbmNlLgorICAgICAqCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG1hdGVyaWFsIG5hbWUKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRoZSBtYXRlcmlhbCB3aWxsIGJlIHVzZSBpbi4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBQQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsKG5hbWUs
IHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNj
ZW5lKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fdXNlUm91Z2huZXNzRnJvbU1ldGFsbGljVGV4
dHVyZUFscGhhID0gZmFsc2U7CisgICAgICAgIF90aGlzLl91c2VSb3VnaG5lc3NGcm9tTWV0YWxs
aWNUZXh0dXJlR3JlZW4gPSB0cnVlOworICAgICAgICBfdGhpcy5fdXNlTWV0YWxsbmVzc0Zyb21N
ZXRhbGxpY1RleHR1cmVCbHVlID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMubWV0YWxsaWMgPSAxLjA7
CisgICAgICAgIF90aGlzLnJvdWdobmVzcyA9IDEuMDsKKyAgICAgICAgcmV0dXJuIF90aGlzOwor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGN1cnJyZW50IGNsYXNzIG5hbWUgb2Yg
dGhlIG1hdGVyaWFsLgorICAgICAqLworICAgIFBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwu
cHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJQ
QlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1h
a2VzIGEgZHVwbGljYXRlIG9mIHRoZSBjdXJyZW50IG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBu
YW1lIC0gbmFtZSB0byB1c2UgZm9yIHRoZSBuZXcgbWF0ZXJpYWwuCisgICAgICovCisgICAgUEJS
TWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAobmFt
ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgY2xvbmUgPSBfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25I
ZWxwZXIiXS5DbG9uZShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgUEJSTWV0YWxsaWNSb3VnaG5l
c3NNYXRlcmlhbChuYW1lLCBfdGhpcy5nZXRTY2VuZSgpKTsgfSwgdGhpcyk7CisgICAgICAgIGNs
b25lLmlkID0gbmFtZTsKKyAgICAgICAgY2xvbmUubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMu
Y2xlYXJDb2F0LmNvcHlUbyhjbG9uZS5jbGVhckNvYXQpOworICAgICAgICB0aGlzLmFuaXNvdHJv
cHkuY29weVRvKGNsb25lLmFuaXNvdHJvcHkpOworICAgICAgICB0aGlzLmJyZGYuY29weVRvKGNs
b25lLmJyZGYpOworICAgICAgICB0aGlzLnNoZWVuLmNvcHlUbyhjbG9uZS5zaGVlbik7CisgICAg
ICAgIHJldHVybiBjbG9uZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUg
bWF0ZXJpYWwgdG8gYSBwYXJzYWJsZSBKU09OIG9iamVjdC4KKyAgICAgKi8KKyAgICBQQlJNZXRh
bGxpY1JvdWdobmVzc01hdGVyaWFsLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXpl
KHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmN1c3RvbVR5cGUgPSAiQkFCWUxP
Ti5QQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsIjsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5jbGVhckNvYXQgPSB0aGlzLmNsZWFyQ29hdC5zZXJpYWxpemUoKTsKKyAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5hbmlzb3Ryb3B5ID0gdGhpcy5hbmlzb3Ryb3B5LnNlcmlhbGl6ZSgp
OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmJyZGYgPSB0aGlzLmJyZGYuc2VyaWFsaXpl
KCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc2hlZW4gPSB0aGlzLnNoZWVuLnNlcmlh
bGl6ZSgpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnN1YlN1cmZhY2UgPSB0aGlzLnN1
YlN1cmZhY2Uuc2VyaWFsaXplKCk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0
OworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2VzIGEgSlNPTiBvYmplY3QgY29ycmVwb25k
aW5nIHRvIHRoZSBzZXJpYWxpemUgZnVuY3Rpb24uCisgICAgICovCisgICAgUEJSTWV0YWxsaWNS
b3VnaG5lc3NNYXRlcmlhbC5QYXJzZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHNjZW5lLCByb290VXJs
KSB7CisgICAgICAgIHZhciBtYXRlcmlhbCA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlBhcnNlKGZ1bmN0aW9uICgp
IHsgcmV0dXJuIG5ldyBQQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsKHNvdXJjZS5uYW1lLCBz
Y2VuZSk7IH0sIHNvdXJjZSwgc2NlbmUsIHJvb3RVcmwpOworICAgICAgICBpZiAoc291cmNlLmNs
ZWFyQ29hdCkgeworICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJDb2F0LnBhcnNlKHNvdXJjZS5j
bGVhckNvYXQsIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc291cmNl
LmFuaXNvdHJvcHkpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLmFuaXNvdHJvcHkucGFyc2Uoc291
cmNlLmFuaXNvdHJvcHksIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
c291cmNlLmJyZGYpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLmJyZGYucGFyc2Uoc291cmNlLmJy
ZGYsIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc291cmNlLnNoZWVu
KSB7CisgICAgICAgICAgICBtYXRlcmlhbC5zaGVlbi5wYXJzZShzb3VyY2Uuc2hlZW4sIHNjZW5l
LCByb290VXJsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc291cmNlLnN1YlN1cmZhY2UpIHsK
KyAgICAgICAgICAgIG1hdGVyaWFsLnN1YlN1cmZhY2UucGFyc2Uoc291cmNlLnN1YlN1cmZhY2Us
IHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWF0ZXJpYWw7Cisg
ICAgfTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemVBc0NvbG9yMyJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5
Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIsICJfYWxiZWRvQ29sb3IiKQor
ICAgIF0sIFBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwucHJvdG90eXBlLCAiYmFzZUNvbG9y
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Q
cm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiLCAiX2FsYmVkb1Rl
eHR1cmUiKQorICAgIF0sIFBCUk1ldGFsbGljUm91Z2huZXNzTWF0ZXJpYWwucHJvdG90eXBlLCAi
YmFzZVRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRU
b1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwg
UEJSTWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbC5wcm90b3R5cGUsICJtZXRhbGxpYyIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJr
QWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJNZXRhbGxpY1JvdWdobmVz
c01hdGVyaWFsLnByb3RvdHlwZSwgInJvdWdobmVzcyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
QXNUZXh0dXJlIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVz
aGVzQXNUZXh0dXJlc0RpcnR5IiwgIl9tZXRhbGxpY1RleHR1cmUiKQorICAgIF0sIFBCUk1ldGFs
bGljUm91Z2huZXNzTWF0ZXJpYWwucHJvdG90eXBlLCAibWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJl
Iiwgdm9pZCAwKTsKKyAgICByZXR1cm4gUEJSTWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbDsKK30o
X3BickJhc2VTaW1wbGVNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQQlJC
YXNlU2ltcGxlTWF0ZXJpYWwiXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5QQlJN
ZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsIl0gPSBQQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFs
OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvUEJSL3BiclNoZWVuQ29uZmln
dXJhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9QQlIvcGJyU2hlZW5Db25maWd1cmF0aW9u
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQQlJTaGVlbkNvbmZpZ3VyYXRpb24gKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUEJSU2hlZW5Db25maWd1cmF0aW9uIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBQQlJTaGVlbkNvbmZpZ3VyYXRpb247IH0pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGli
LmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAi
Li9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVy
aWFsc19tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvbWF0ZXJpYWxGbGFncyAqLyAiLi9NYXRl
cmlhbHMvbWF0ZXJpYWxGbGFncy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9tYXRlcmlhbEhlbHBlciAqLyAiLi9N
YXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIudHMiKTsKKworCisKKworCisvKioKKyAqIERlZmluZSB0
aGUgY29kZSByZWxhdGVkIHRvIHRoZSBTaGVlbiBwYXJhbWV0ZXJzIG9mIHRoZSBwYnIgbWF0ZXJp
YWwuCisgKi8KK3ZhciBQQlJTaGVlbkNvbmZpZ3VyYXRpb24gPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGUgYSBuZXcgaXN0YW5jZSBvZiBj
bGVhciBjb2F0IGNvbmZpZ3VyYXRpb24uCisgICAgICogQHBhcmFtIG1hcmtBbGxTdWJNZXNoZXNB
c1RleHR1cmVzRGlydHkgQ2FsbGJhY2sgdG8gZmxhZyB0aGUgbWF0ZXJpYWwgdG8gZGlydHkKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBQQlJTaGVlbkNvbmZpZ3VyYXRpb24obWFya0FsbFN1Yk1lc2hl
c0FzVGV4dHVyZXNEaXJ0eSkgeworICAgICAgICB0aGlzLl9pc0VuYWJsZWQgPSBmYWxzZTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaWYgdGhlIG1hdGVyaWFsIHVzZXMgc2hlZW4u
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmlzRW5hYmxlZCA9IGZhbHNlOworICAgICAgICB0
aGlzLl9saW5rU2hlZW5XaXRoQWxiZWRvID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIGlmIHRoZSBzaGVlbiBpcyBsaW5rZWQgdG8gdGhlIHNoZWVuIGNvbG9yLgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5saW5rU2hlZW5XaXRoQWxiZWRvID0gZmFsc2U7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBzaGVlbiBpbnRlbnNpdHkuCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmludGVuc2l0eSA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIHRoZSBzaGVlbiBjb2xvci4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuY29s
b3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb2xv
cjMiXS5XaGl0ZSgpOworICAgICAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFN0b3JlcyB0aGUgc2hlZW4gdGludCB2YWx1ZXMgaW4gYSB0ZXh0dXJlLgor
ICAgICAgICAgKiByZ2IgaXMgdGludAorICAgICAgICAgKiBhIGlzIGEgaW50ZW5zaXR5CisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnRleHR1cmUgPSBudWxsOworICAgICAgICB0aGlzLl9pbnRl
cm5hbE1hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkgPSBtYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0RpcnR5OworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBCUlNoZWVuQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUuX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2ludGVybmFsTWFya0FsbFN1Yk1lc2hlc0FzVGV4
dHVyZXNEaXJ0eSgpOworICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHRoYXQgdGhl
IHN1Ym1lc2ggaXMgcmVhZHkgdG8gYmUgdXNlZC4KKyAgICAgKiBAcGFyYW0gZGVmaW5lcyB0aGUg
bGlzdCBvZiAiZGVmaW5lcyIgdG8gdXBkYXRlLgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVz
IHRoZSBzY2VuZSB0aGUgbWF0ZXJpYWwgYmVsb25ncyB0by4KKyAgICAgKiBAcmV0dXJucyAtIGJv
b2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJlYWR5IG9yIG5vdC4KKyAgICAg
Ki8KKyAgICBQQlJTaGVlbkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmlzUmVhZHlGb3JTdWJNZXNo
ID0gZnVuY3Rpb24gKGRlZmluZXMsIHNjZW5lKSB7CisgICAgICAgIGlmIChkZWZpbmVzLl9hcmVU
ZXh0dXJlc0RpcnR5KSB7CisgICAgICAgICAgICBpZiAoc2NlbmUudGV4dHVyZXNFbmFibGVkKSB7
CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgJiYgX01hdGVyaWFsc19tYXRlcmlh
bEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdGVyaWFsRmxhZ3MiXS5TaGVl
blRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGV4dHVy
ZS5pc1JlYWR5T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDaGVja3MgdG8gc2VlIGlmIGEgdGV4dHVyZSBpcyB1c2VkIGluIHRoZSBtYXRl
cmlhbC4KKyAgICAgKiBAcGFyYW0gZGVmaW5lcyB0aGUgbGlzdCBvZiAiZGVmaW5lcyIgdG8gdXBk
YXRlLgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGUgbWF0ZXJpYWwg
YmVsb25ncyB0by4KKyAgICAgKi8KKyAgICBQQlJTaGVlbkNvbmZpZ3VyYXRpb24ucHJvdG90eXBl
LnByZXBhcmVEZWZpbmVzID0gZnVuY3Rpb24gKGRlZmluZXMsIHNjZW5lKSB7CisgICAgICAgIGlm
ICh0aGlzLl9pc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIGRlZmluZXMuU0hFRU4gPSB0aGlzLl9p
c0VuYWJsZWQ7CisgICAgICAgICAgICBkZWZpbmVzLlNIRUVOX0xJTktXSVRIQUxCRURPID0gdGhp
cy5fbGlua1NoZWVuV2l0aEFsYmVkbzsKKyAgICAgICAgICAgIGlmIChkZWZpbmVzLl9hcmVUZXh0
dXJlc0RpcnR5KSB7CisgICAgICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSAmJiBfTWF0ZXJpYWxzX21h
dGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxGbGFncyJd
LlNoZWVuVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9NYXRlcmlh
bHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0ZXJpYWxI
ZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX3RleHR1cmUsIGRlZmluZXMs
ICJTSEVFTl9URVhUVVJFIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlNIRUVOX1RFWFRV
UkUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlZmlu
ZXMuU0hFRU4gPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuU0hFRU5fVEVYVFVSRSA9IGZh
bHNlOworICAgICAgICAgICAgZGVmaW5lcy5TSEVFTl9MSU5LV0lUSEFMQkVETyA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgbWF0ZXJpYWwgZGF0
YS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybUJ1ZmZlciBkZWZpbmVzIHRoZSBVbmlmb3JtIGJ1ZmZl
ciB0byBmaWxsIGluLgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGUg
bWF0ZXJpYWwgYmVsb25ncyB0by4KKyAgICAgKiBAcGFyYW0gaXNGcm96ZW4gZGVmaW5lcyB3ZXRo
ZXIgdGhlIG1hdGVyaWFsIGlzIGZyb3plbiBvciBub3QuCisgICAgICovCisgICAgUEJSU2hlZW5D
b25maWd1cmF0aW9uLnByb3RvdHlwZS5iaW5kRm9yU3ViTWVzaCA9IGZ1bmN0aW9uICh1bmlmb3Jt
QnVmZmVyLCBzY2VuZSwgaXNGcm96ZW4pIHsKKyAgICAgICAgaWYgKCF1bmlmb3JtQnVmZmVyLnVz
ZVVibyB8fCAhaXNGcm96ZW4gfHwgIXVuaWZvcm1CdWZmZXIuaXNTeW5jKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5fdGV4dHVyZSAmJiBfTWF0ZXJpYWxzX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxGbGFncyJdLlNoZWVuVGV4dHVyZUVuYWJsZWQp
IHsKKyAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0MigidlNoZWVuSW5m
b3MiLCB0aGlzLl90ZXh0dXJlLmNvb3JkaW5hdGVzSW5kZXgsIHRoaXMuX3RleHR1cmUubGV2ZWwp
OworICAgICAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kVGV4dHVyZU1hdHJpeCh0aGlz
Ll90ZXh0dXJlLCB1bmlmb3JtQnVmZmVyLCAic2hlZW4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIFNoZWVuCisgICAgICAgICAgICB1bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0NCgi
dlNoZWVuQ29sb3IiLCB0aGlzLmNvbG9yLnIsIHRoaXMuY29sb3IuZywgdGhpcy5jb2xvci5iLCB0
aGlzLmludGVuc2l0eSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGV4dHVyZXMKKyAgICAgICAg
aWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1
cmUgJiYgX01hdGVyaWFsc19tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk1hdGVyaWFsRmxhZ3MiXS5TaGVlblRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAg
ICAgdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJlKCJzaGVlblNhbXBsZXIiLCB0aGlzLl90ZXh0dXJl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ2hl
Y2tzIHRvIHNlZSBpZiBhIHRleHR1cmUgaXMgdXNlZCBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICog
QHBhcmFtIHRleHR1cmUgLSBCYXNlIHRleHR1cmUgdG8gdXNlLgorICAgICAqIEByZXR1cm5zIC0g
Qm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGEgdGV4dHVyZSBpcyB1c2VkIGluIHRoZSBtYXRlcmlhbC4K
KyAgICAgKi8KKyAgICBQQlJTaGVlbkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmhhc1RleHR1cmUg
PSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdGV4
dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB0
aGUgYWN0aXZlbHkgdXNlZCB0ZXh0dXJlcy4KKyAgICAgKiBAcGFyYW0gYWN0aXZlVGV4dHVyZXMg
QXJyYXkgb2YgQmFzZVRleHR1cmVzCisgICAgICovCisgICAgUEJSU2hlZW5Db25maWd1cmF0aW9u
LnByb3RvdHlwZS5nZXRBY3RpdmVUZXh0dXJlcyA9IGZ1bmN0aW9uIChhY3RpdmVUZXh0dXJlcykg
eworICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgYWN0aXZlVGV4dHVy
ZXMucHVzaCh0aGlzLl90ZXh0dXJlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogUmV0dXJucyB0aGUgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAgICAgKiBAcGFyYW0gYW5pbWF0
YWJsZXMgQXJyYXkgb2YgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAgICAgKi8KKyAgICBQQlJTaGVl
bkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldEFuaW1hdGFibGVzID0gZnVuY3Rpb24gKGFuaW1h
dGFibGVzKSB7CisgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlICYmIHRoaXMuX3RleHR1cmUuYW5p
bWF0aW9ucyAmJiB0aGlzLl90ZXh0dXJlLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAg
ICAgICAgYW5pbWF0YWJsZXMucHVzaCh0aGlzLl90ZXh0dXJlKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhlIHJlc291cmNlcyBvZiB0aGUgbWF0ZXJpYWwu
CisgICAgICogQHBhcmFtIGZvcmNlRGlzcG9zZVRleHR1cmVzIC0gRm9yY2VzIHRoZSBkaXNwb3Nh
bCBvZiBhbGwgdGV4dHVyZXMuCisgICAgICovCisgICAgUEJSU2hlZW5Db25maWd1cmF0aW9uLnBy
b3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGZvcmNlRGlzcG9zZVRleHR1cmVzKSB7CisgICAg
ICAgIGlmIChmb3JjZURpc3Bvc2VUZXh0dXJlcykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3Rl
eHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgKiBHZXQgdGhlIGN1cnJl
bnQgY2xhc3MgbmFtZSBvZiB0aGUgdGV4dHVyZSB1c2VmdWwgZm9yIHNlcmlhbGl6YXRpb24gb3Ig
ZHluYW1pYyBjb2RpbmcuCisgICAgKiBAcmV0dXJucyAiUEJSU2hlZW5Db25maWd1cmF0aW9uIgor
ICAgICovCisgICAgUEJSU2hlZW5Db25maWd1cmF0aW9uLnByb3RvdHlwZS5nZXRDbGFzc05hbWUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiUEJSU2hlZW5Db25maWd1cmF0aW9uIjsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBmYWxsYmFja3MgdG8gdGhlIGVmZmVjdCBmYWxs
YmFja3MgbGlzdC4KKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBCYXNlIHRleHR1
cmUgdG8gdXNlLgorICAgICAqIEBwYXJhbSBmYWxsYmFja3MgZGVmaW5lcyB0aGUgY3VycmVudCBm
YWxsYmFjayBsaXN0LgorICAgICAqIEBwYXJhbSBjdXJyZW50UmFuayBkZWZpbmVzIHRoZSBjdXJy
ZW50IGZhbGxiYWNrIHJhbmsuCisgICAgICogQHJldHVybnMgdGhlIG5ldyBmYWxsYmFjayByYW5r
LgorICAgICAqLworICAgIFBCUlNoZWVuQ29uZmlndXJhdGlvbi5BZGRGYWxsYmFja3MgPSBmdW5j
dGlvbiAoZGVmaW5lcywgZmFsbGJhY2tzLCBjdXJyZW50UmFuaykgeworICAgICAgICBpZiAoZGVm
aW5lcy5TSEVFTikgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGN1cnJlbnRS
YW5rKyssICJTSEVFTiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjdXJyZW50UmFuazsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCB0aGUgcmVxdWlyZWQgdW5pZm9ybXMgdG8gdGhl
IGN1cnJlbnQgbGlzdC4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybXMgZGVmaW5lcyB0aGUgY3VycmVu
dCB1bmlmb3JtIGxpc3QuCisgICAgICovCisgICAgUEJSU2hlZW5Db25maWd1cmF0aW9uLkFkZFVu
aWZvcm1zID0gZnVuY3Rpb24gKHVuaWZvcm1zKSB7CisgICAgICAgIHVuaWZvcm1zLnB1c2goInZT
aGVlbkNvbG9yIiwgInZTaGVlbkluZm9zIiwgInNoZWVuTWF0cml4Iik7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBZGQgdGhlIHJlcXVpcmVkIHVuaWZvcm1zIHRvIHRoZSBjdXJyZW50IGJ1ZmZl
ci4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybUJ1ZmZlciBkZWZpbmVzIHRoZSBjdXJyZW50IHVuaWZv
cm0gYnVmZmVyLgorICAgICAqLworICAgIFBCUlNoZWVuQ29uZmlndXJhdGlvbi5QcmVwYXJlVW5p
Zm9ybUJ1ZmZlciA9IGZ1bmN0aW9uICh1bmlmb3JtQnVmZmVyKSB7CisgICAgICAgIHVuaWZvcm1C
dWZmZXIuYWRkVW5pZm9ybSgidlNoZWVuQ29sb3IiLCA0KTsKKyAgICAgICAgdW5pZm9ybUJ1ZmZl
ci5hZGRVbmlmb3JtKCJ2U2hlZW5JbmZvcyIsIDIpOworICAgICAgICB1bmlmb3JtQnVmZmVyLmFk
ZFVuaWZvcm0oInNoZWVuTWF0cml4IiwgMTYpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRk
IHRoZSByZXF1aXJlZCBzYW1wbGVycyB0byB0aGUgY3VycmVudCBsaXN0LgorICAgICAqIEBwYXJh
bSBzYW1wbGVycyBkZWZpbmVzIHRoZSBjdXJyZW50IHNhbXBsZXIgbGlzdC4KKyAgICAgKi8KKyAg
ICBQQlJTaGVlbkNvbmZpZ3VyYXRpb24uQWRkU2FtcGxlcnMgPSBmdW5jdGlvbiAoc2FtcGxlcnMp
IHsKKyAgICAgICAgc2FtcGxlcnMucHVzaCgic2hlZW5TYW1wbGVyIik7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBNYWtlcyBhIGR1cGxpY2F0ZSBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9u
IGludG8gYW5vdGhlciBvbmUuCisgICAgICogQHBhcmFtIHNoZWVuQ29uZmlndXJhdGlvbiBkZWZp
bmUgdGhlIGNvbmZpZyB3aGVyZSB0byBjb3B5IHRoZSBpbmZvCisgICAgICovCisgICAgUEJSU2hl
ZW5Db25maWd1cmF0aW9uLnByb3RvdHlwZS5jb3B5VG8gPSBmdW5jdGlvbiAoc2hlZW5Db25maWd1
cmF0aW9uKSB7CisgICAgICAgIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkNsb25lKGZ1bmN0aW9uICgpIHsgcmV0dXJu
IHNoZWVuQ29uZmlndXJhdGlvbjsgfSwgdGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXJpYWxpemVzIHRoaXMgQlJERiBjb25maWd1cmF0aW9uLgorICAgICAqIEByZXR1cm5zIC0gQW4g
b2JqZWN0IHdpdGggdGhlIHNlcmlhbGl6ZWQgY29uZmlnLgorICAgICAqLworICAgIFBCUlNoZWVu
Q29uZmlndXJhdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
ZXJpYWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXplKHRoaXMpOworICAgIH07CisgICAgLyoqCisg
ICAgICogUGFyc2VzIGEgYW5pc290cm9weSBDb25maWd1cmF0aW9uIGZyb20gYSBzZXJpYWxpemVk
IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gc291cmNlIC0gU2VyaWFsaXplZCBvYmplY3QuCisgICAg
ICogQHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHdlIGFyZSBwYXJzaW5nIGZvcgorICAg
ICAqIEBwYXJhbSByb290VXJsIERlZmluZXMgdGhlIHJvb3RVcmwgdG8gbG9hZCBmcm9tCisgICAg
ICovCisgICAgUEJSU2hlZW5Db25maWd1cmF0aW9uLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9u
IChzb3VyY2UsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2Vy
aWFsaXphdGlvbkhlbHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzOyB9LCBz
b3VyY2UsIHNjZW5lLCByb290VXJsKTsKKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIp
CisgICAgXSwgUEJSU2hlZW5Db25maWd1cmF0aW9uLnByb3RvdHlwZSwgImlzRW5hYmxlZCIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9t
YXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBQQlJTaGVlbkNvbmZpZ3Vy
YXRpb24ucHJvdG90eXBlLCAibGlua1NoZWVuV2l0aEFsYmVkbyIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplIl0pKCkKKyAgICBdLCBQQlJTaGVlbkNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiaW50
ZW5zaXR5Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0NvbG9yMyJdKSgpCisgICAgXSwgUEJS
U2hlZW5Db25maWd1cmF0aW9uLnByb3RvdHlwZSwgImNvbG9yIiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemVBc1RleHR1cmUiXSkoKSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxT
dWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFBCUlNoZWVuQ29uZmlndXJhdGlvbi5w
cm90b3R5cGUsICJ0ZXh0dXJlIiwgdm9pZCAwKTsKKyAgICByZXR1cm4gUEJSU2hlZW5Db25maWd1
cmF0aW9uOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvUEJS
L3BiclNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRl
cmlhbHMvUEJSL3BiclNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVy
aWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbDsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVs
ZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYnJCYXNlU2ltcGxlTWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGJyQmFz
ZVNpbXBsZU1hdGVyaWFsICovICIuL01hdGVyaWFscy9QQlIvcGJyQmFzZVNpbXBsZU1hdGVyaWFs
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNj
L3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisvKioKKyAqIFRo
ZSBQQlIgbWF0ZXJpYWwgb2YgQkpTIGZvbGxvd2luZyB0aGUgc3BlY3VsYXIgZ2xvc3NpbmVzcyBj
b252ZW50aW9uLgorICoKKyAqIFRoaXMgZml0cyB0byB0aGUgUEJSIGNvbnZlbnRpb24gaW4gdGhl
IEdMVEYgZGVmaW5pdGlvbjoKKyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xU
Ri90cmVlLzIuMC9leHRlbnNpb25zL0tocm9ub3MvS0hSX21hdGVyaWFsc19wYnJTcGVjdWxhckds
b3NzaW5lc3MKKyAqLwordmFyIFBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsLCBf
c3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBQQlJTcGVjdWxhckds
b3NzaW5lc3NNYXRlcmlhbCBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lIFRo
ZSBtYXRlcmlhbCBuYW1lCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0aGUgbWF0ZXJp
YWwgd2lsbCBiZSB1c2UgaW4uCisgICAgICovCisgICAgZnVuY3Rpb24gUEJSU3BlY3VsYXJHbG9z
c2luZXNzTWF0ZXJpYWwobmFtZSwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl91c2VNaWNy
b1N1cmZhY2VGcm9tUmVmbGVjdGl2aXR5TWFwQWxwaGEgPSB0cnVlOworICAgICAgICByZXR1cm4g
X3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgY3VycnJlbnQgY2xhc3Mg
bmFtZSBvZiB0aGUgbWF0ZXJpYWwuCisgICAgICovCisgICAgUEJSU3BlY3VsYXJHbG9zc2luZXNz
TWF0ZXJpYWwucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuICJQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbCI7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBNYWtlcyBhIGR1cGxpY2F0ZSBvZiB0aGUgY3VycmVudCBtYXRlcmlhbC4KKyAgICAg
KiBAcGFyYW0gbmFtZSAtIG5hbWUgdG8gdXNlIGZvciB0aGUgbmV3IG1hdGVyaWFsLgorICAgICAq
LworICAgIFBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsLnByb3RvdHlwZS5jbG9uZSA9IGZ1
bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBj
bG9uZSA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2Vy
aWFsaXphdGlvbkhlbHBlciJdLkNsb25lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBQQlJTcGVj
dWxhckdsb3NzaW5lc3NNYXRlcmlhbChuYW1lLCBfdGhpcy5nZXRTY2VuZSgpKTsgfSwgdGhpcyk7
CisgICAgICAgIGNsb25lLmlkID0gbmFtZTsKKyAgICAgICAgY2xvbmUubmFtZSA9IG5hbWU7Cisg
ICAgICAgIHRoaXMuY2xlYXJDb2F0LmNvcHlUbyhjbG9uZS5jbGVhckNvYXQpOworICAgICAgICB0
aGlzLmFuaXNvdHJvcHkuY29weVRvKGNsb25lLmFuaXNvdHJvcHkpOworICAgICAgICB0aGlzLmJy
ZGYuY29weVRvKGNsb25lLmJyZGYpOworICAgICAgICB0aGlzLnNoZWVuLmNvcHlUbyhjbG9uZS5z
aGVlbik7CisgICAgICAgIHJldHVybiBjbG9uZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
cmlhbGl6ZSB0aGUgbWF0ZXJpYWwgdG8gYSBwYXJzYWJsZSBKU09OIG9iamVjdC4KKyAgICAgKi8K
KyAgICBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbC5wcm90b3R5cGUuc2VyaWFsaXplID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBl
ciJdLlNlcmlhbGl6ZSh0aGlzKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21U
eXBlID0gIkJBQllMT04uUEJSU3BlY3VsYXJHbG9zc2luZXNzTWF0ZXJpYWwiOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LmNsZWFyQ29hdCA9IHRoaXMuY2xlYXJDb2F0LnNlcmlhbGl6ZSgp
OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmFuaXNvdHJvcHkgPSB0aGlzLmFuaXNvdHJv
cHkuc2VyaWFsaXplKCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYnJkZiA9IHRoaXMu
YnJkZi5zZXJpYWxpemUoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5zaGVlbiA9IHRo
aXMuc2hlZW4uc2VyaWFsaXplKCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc3ViU3Vy
ZmFjZSA9IHRoaXMuc3ViU3VyZmFjZS5zZXJpYWxpemUoKTsKKyAgICAgICAgcmV0dXJuIHNlcmlh
bGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgYSBKU09OIG9i
amVjdCBjb3JyZXBvbmRpbmcgdG8gdGhlIHNlcmlhbGl6ZSBmdW5jdGlvbi4KKyAgICAgKi8KKyAg
ICBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbC5QYXJzZSA9IGZ1bmN0aW9uIChzb3VyY2Us
IHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIHZhciBtYXRlcmlhbCA9IF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlBh
cnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlh
bChzb3VyY2UubmFtZSwgc2NlbmUpOyB9LCBzb3VyY2UsIHNjZW5lLCByb290VXJsKTsKKyAgICAg
ICAgaWYgKHNvdXJjZS5jbGVhckNvYXQpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyQ29h
dC5wYXJzZShzb3VyY2UuY2xlYXJDb2F0LCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHNvdXJjZS5hbmlzb3Ryb3B5KSB7CisgICAgICAgICAgICBtYXRlcmlhbC5hbmlz
b3Ryb3B5LnBhcnNlKHNvdXJjZS5hbmlzb3Ryb3B5LCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHNvdXJjZS5icmRmKSB7CisgICAgICAgICAgICBtYXRlcmlhbC5icmRm
LnBhcnNlKHNvdXJjZS5icmRmLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHNvdXJjZS5zaGVlbikgeworICAgICAgICAgICAgbWF0ZXJpYWwuc2hlZW4ucGFyc2Uoc291
cmNlLnNoZWVuLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNvdXJj
ZS5zdWJTdXJmYWNlKSB7CisgICAgICAgICAgICBtYXRlcmlhbC5zdWJTdXJmYWNlLnBhcnNlKHNv
dXJjZS5zdWJTdXJmYWNlLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG1hdGVyaWFsOworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNDb2xvcjMiXSkoImRpZmZ1c2Ui
KSwKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVz
RGlydHkiLCAiX2FsYmVkb0NvbG9yIikKKyAgICBdLCBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRl
cmlhbC5wcm90b3R5cGUsICJkaWZmdXNlQ29sb3IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFz
VGV4dHVyZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hl
c0FzVGV4dHVyZXNEaXJ0eSIsICJfYWxiZWRvVGV4dHVyZSIpCisgICAgXSwgUEJSU3BlY3VsYXJH
bG9zc2luZXNzTWF0ZXJpYWwucHJvdG90eXBlLCAiZGlmZnVzZVRleHR1cmUiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZUFzQ29sb3IzIl0pKCJzcGVjdWxhciIpLAorICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3Bl
cnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIsICJfcmVmbGVjdGl2aXR5
Q29sb3IiKQorICAgIF0sIFBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsLnByb3RvdHlwZSwg
InNwZWN1bGFyQ29sb3IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBh
bmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIsICJfbWlj
cm9TdXJmYWNlIikKKyAgICBdLCBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbC5wcm90b3R5
cGUsICJnbG9zc2luZXNzIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoKSwK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGly
dHkiLCAiX3JlZmxlY3Rpdml0eVRleHR1cmUiKQorICAgIF0sIFBCUlNwZWN1bGFyR2xvc3NpbmVz
c01hdGVyaWFsLnByb3RvdHlwZSwgInNwZWN1bGFyR2xvc3NpbmVzc1RleHR1cmUiLCB2b2lkIDAp
OworICAgIHJldHVybiBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbDsKK30oX3BickJhc2VT
aW1wbGVNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQQlJCYXNlU2ltcGxl
TWF0ZXJpYWwiXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5QQlJTcGVjdWxhckds
b3NzaW5lc3NNYXRlcmlhbCJdID0gUEJSU3BlY3VsYXJHbG9zc2luZXNzTWF0ZXJpYWw7CisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9QQlIvcGJyU3ViU3VyZmFjZUNvbmZpZ3Vy
YXRpb24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9QQlIvcGJyU3ViU3VyZmFjZUNvbmZp
Z3VyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUEJSU3ViU3VyZmFjZUNv
bmZpZ3VyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUEJSU3Vi
U3VyZmFjZUNvbmZpZ3VyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBCUlN1YlN1cmZhY2VD
b25maWd1cmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8g
Ii4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9k
ZWNvcmF0b3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tYXRlcmlhbEZsYWdzICovICIu
L01hdGVyaWFscy9tYXRlcmlhbEZsYWdzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyICov
ICIuL01hdGVyaWFscy9tYXRlcmlhbEhlbHBlci50cyIpOworCisKKworCisKKy8qKgorICogRGVm
aW5lIHRoZSBjb2RlIHJlbGF0ZWQgdG8gdGhlIHN1YiBzdXJmYWNlIHBhcmFtZXRlcnMgb2YgdGhl
IHBiciBtYXRlcmlhbC4KKyAqLwordmFyIFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIGEg
bmV3IGlzdGFuY2Ugb2Ygc3ViIHN1cmZhY2UgY29uZmlndXJhdGlvbi4KKyAgICAgKiBAcGFyYW0g
bWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSBDYWxsYmFjayB0byBmbGFnIHRoZSBtYXRl
cmlhbCB0byBkaXJ0eQorICAgICAqLworICAgIGZ1bmN0aW9uIFBCUlN1YlN1cmZhY2VDb25maWd1
cmF0aW9uKG1hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkpIHsKKyAgICAgICAgdGhpcy5f
aXNSZWZyYWN0aW9uRW5hYmxlZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVm
aW5lcyBpZiB0aGUgcmVmcmFjdGlvbiBpcyBlbmFibGVkIGluIHRoZSBtYXRlcmlhbC4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuaXNSZWZyYWN0aW9uRW5hYmxlZCA9IGZhbHNlOworICAgICAg
ICB0aGlzLl9pc1RyYW5zbHVjZW5jeUVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIERlZmluZXMgaWYgdGhlIHRyYW5zbHVjZW5jeSBpcyBlbmFibGVkIGluIHRoZSBtYXRl
cmlhbC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaXNUcmFuc2x1Y2VuY3lFbmFibGVkID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX2lzU2NhdHRlcmluZ0VuYWJsZWQgPSBmYWxzZTsKKyAgICAg
ICAgLy8gLyoqCisgICAgICAgIC8vICAqIERlZmluZXMgaWYgdGhlIHN1YiBzdXJmYWNlIHNjYXR0
ZXJpbmcgaXMgZW5hYmxlZCBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICAgIC8vICAqLworICAgICAg
ICAvLyBAc2VyaWFsaXplKCkKKyAgICAgICAgLy8gQGV4cGFuZFRvUHJvcGVydHkoIl9tYXJrQWxs
U3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICAgICAgLy8gcHVibGljIGlzU2NhdHRlcmlu
Z0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhlIHJl
ZnJhY3Rpb24gaW50ZW5zaXR5IG9mIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICogVGhlIHJlZnJh
Y3Rpb24gd2hlbiBlbmFibGVkIHJlcGxhY2VzIHRoZSBEaWZmdXNlIHBhcnQgb2YgdGhlIG1hdGVy
aWFsLgorICAgICAgICAgKiBUaGUgaW50ZW5zaXR5IGhlbHBzIHRyYW5zaXRpb25uaW5nIGJldHdl
ZW4gZGlmZnVzZSBhbmQgcmVmcmFjdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVm
cmFjdGlvbkludGVuc2l0eSA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRo
ZSB0cmFuc2x1Y2VuY3kgaW50ZW5zaXR5IG9mIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICogV2hl
biB0cmFuc2x1Y2VuY3kgaGFzIGJlZW4gZW5hYmxlZCwgdGhpcyBkZWZpbmVzIGhvdyBtdWNoIG9m
IHRoZSAidHJhbnNsdWNlbmN5IgorICAgICAgICAgKiBpcyBhZGRkZWQgdG8gdGhlIGRpZmZ1c2Ug
cGFydCBvZiB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnRyYW5zbHVj
ZW5jeUludGVuc2l0eSA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBz
Y2F0dGVyaW5nIGludGVuc2l0eSBvZiB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqIFdoZW4gc2Nh
dHRlcmluZyBoYXMgYmVlbiBlbmFibGVkLCB0aGlzIGRlZmluZXMgaG93IG11Y2ggb2YgdGhlICJz
Y2F0dGVyZWQgbGlnaHQiCisgICAgICAgICAqIGlzIGFkZGRlZCB0byB0aGUgZGlmZnVzZSBwYXJ0
IG9mIHRoZSBtYXRlcmlhbC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc2NhdHRlcmluZ0lu
dGVuc2l0eSA9IDE7CisgICAgICAgIHRoaXMuX3RoaWNrbmVzc1RleHR1cmUgPSBudWxsOworICAg
ICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHRoZSBhdmVyYWdlIHRoaWNrbmVzcyBvZiBhIG1l
c2ggaW4gYSB0ZXh0dXJlIChUaGUgdGV4dHVyZSBpcyBob2xkaW5nIHRoZSB2YWx1ZXMgbGluZWFy
bHkpLgorICAgICAgICAgKiBUaGUgcmVkIGNoYW5uZWwgb2YgdGhlIHRleHR1cmUgc2hvdWxkIGNv
bnRhaW4gdGhlIHRoaWNrbmVzcyByZW1hcHBlZCBiZXR3ZWVuIDAgYW5kIDEuCisgICAgICAgICAq
IDAgd291bGQgbWVhbiBtaW5pbXVtVGhpY2tuZXNzCisgICAgICAgICAqIDEgd291bGQgbWVhbiBt
YXhpbXVtVGhpY2tuZXNzCisgICAgICAgICAqIFRoZSBvdGhlciBjaGFubmVscyBtaWdodCBiZSB1
c2UgYXMgYSBtYXNrIHRvIHZhcnkgdGhlIGRpZmZlcmVudCBlZmZlY3RzIGludGVuc2l0eS4KKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMudGhpY2tuZXNzVGV4dHVyZSA9IG51bGw7CisgICAgICAg
IHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZXMgdGhlIHRleHR1cmUgdG8gdXNlIGZvciByZWZyYWN0aW9uLgorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5yZWZyYWN0aW9uVGV4dHVyZSA9IG51bGw7CisgICAgICAgIHRoaXMuX2lu
ZGV4T2ZSZWZyYWN0aW9uID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhl
IGluZGV4IG9mIHJlZnJhY3Rpb24gdXNlZCBpbiB0aGUgbWF0ZXJpYWwuCisgICAgICAgICAqIGh0
dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfcmVmcmFjdGl2ZV9pbmRpY2VzCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmluZGV4T2ZSZWZyYWN0aW9uID0gMTsKKyAgICAgICAg
dGhpcy5faW52ZXJ0UmVmcmFjdGlvblkgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IENvbnRyb2xzIGlmIHJlZnJhY3Rpb24gbmVlZHMgdG8gYmUgaW52ZXJ0ZWQgb24gWS4gVGhpcyBj
b3VsZCBiZSB1c2VmdWwgZm9yIHByb2NlZHVyYWwgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMuaW52ZXJ0UmVmcmFjdGlvblkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbGlua1Jl
ZnJhY3Rpb25XaXRoVHJhbnNwYXJlbmN5ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBUaGlzIHBhcmFtZXRlcnMgd2lsbCBtYWtlIHRoZSBtYXRlcmlhbCB1c2VkIGl0cyBvcGFjaXR5
IHRvIGNvbnRyb2wgaG93IG11Y2ggaXQgaXMgcmVmcmFjdGluZyBhZ2luc3Qgbm90LgorICAgICAg
ICAgKiBNYXRlcmlhbHMgaGFsZiBvcGFxdWUgZm9yIGluc3RhbmNlIHVzaW5nIHJlZnJhY3Rpb24g
Y291bGQgYmVuZWZpdCBmcm9tIHRoaXMgY29udHJvbC4KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMubGlua1JlZnJhY3Rpb25XaXRoVHJhbnNwYXJlbmN5ID0gZmFsc2U7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBEZWZpbmVzIHRoZSBtaW5pbXVtIHRoaWNrbmVzcyBzdG9yZWQgaW4gdGhlIHRo
aWNrbmVzcyBtYXAuCisgICAgICAgICAqIElmIG5vIHRoaWNrbmVzcyBtYXAgaXMgZGVmaW5lZCwg
dGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gc2ltdWxhdGUgdGhpY2tuZXNzLgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5taW5pbXVtVGhpY2tuZXNzID0gMDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIERlZmluZXMgdGhlIG1heGltdW0gdGhpY2tuZXNzIHN0b3JlZCBpbiB0aGUgdGhpY2tu
ZXNzIG1hcC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubWF4aW11bVRoaWNrbmVzcyA9IDE7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSB2b2x1bWUgdGludCBvZiB0aGUg
bWF0ZXJpYWwuCisgICAgICAgICAqIFRoaXMgaXMgdXNlZCBmb3IgYm90aCB0cmFuc2x1Y2VuY3kg
YW5kIHNjYXR0ZXJpbmcuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnRpbnRDb2xvciA9IF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9yMyJdLldo
aXRlKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBkaXN0YW5jZSBhdCB3
aGljaCB0aGUgdGludCBjb2xvciBzaG91bGQgYmUgZm91bmQgaW4gdGhlIG1lZGlhLgorICAgICAg
ICAgKiBUaGlzIGlzIHVzZWQgZm9yIHJlZnJhY3Rpb24gb25seS4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMudGludENvbG9yQXREaXN0YW5jZSA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIGhvdyBmYXIgZWFjaCBjaGFubmVsIHRyYW5zbWl0IHRocm91Z2ggdGhlIG1lZGlh
LgorICAgICAgICAgKiBJdCBpcyBkZWZpbmVkIGFzIGEgY29sb3IgdG8gc2ltcGxpZnkgaXQgc2Vs
ZWN0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaWZmdXNpb25EaXN0YW5jZSA9IF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9yMyJdLldo
aXRlKCk7CisgICAgICAgIHRoaXMuX3VzZU1hc2tGcm9tVGhpY2tuZXNzVGV4dHVyZSA9IGZhbHNl
OworICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHRoZSBpbnRlbnNpdHkgb2YgdGhlIGRp
ZmZlcmVudCBzdWJzdXJmYWNlIGVmZmVjdHMgaW4gdGhlIHRoaWNrbmVzcyB0ZXh0dXJlLgorICAg
ICAgICAgKiAqIHRoZSBncmVlbiBjaGFubmVsIGlzIHRoZSB0cmFuc2x1Y2VuY3kgaW50ZW5zaXR5
LgorICAgICAgICAgKiAqIHRoZSBibHVlIGNoYW5uZWwgaXMgdGhlIHNjYXR0ZXJpbmcgaW50ZW5z
aXR5LgorICAgICAgICAgKiAqIHRoZSBhbHBoYSBjaGFubmVsIGlzIHRoZSByZWZyYWN0aW9uIGlu
dGVuc2l0eS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMudXNlTWFza0Zyb21UaGlja25lc3NU
ZXh0dXJlID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2ludGVybmFsTWFya0FsbFN1Yk1lc2hlc0Fz
VGV4dHVyZXNEaXJ0eSA9IG1hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHk7CisgICAgfQor
ICAgIC8qKiBAaGlkZGVuICovCisgICAgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90
eXBlLl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB0aGlzLl9pbnRlcm5hbE1hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkoKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgd2VodGVyIHRoZSBzdWJtZXNoIGlzIHJlYWR5IHRv
IGJlIHVzZWQgb3Igbm90LgorICAgICAqIEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0IG9mICJkZWZp
bmVzIiB0byB1cGRhdGUuCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIHNjZW5lIHRo
ZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgorICAgICAqIEByZXR1cm5zIC0gYm9vbGVhbiBpbmRpY2F0
aW5nIHRoYXQgdGhlIHN1Ym1lc2ggaXMgcmVhZHkgb3Igbm90LgorICAgICAqLworICAgIFBCUlN1
YlN1cmZhY2VDb25maWd1cmF0aW9uLnByb3RvdHlwZS5pc1JlYWR5Rm9yU3ViTWVzaCA9IGZ1bmN0
aW9uIChkZWZpbmVzLCBzY2VuZSkgeworICAgICAgICBpZiAoZGVmaW5lcy5fYXJlVGV4dHVyZXNE
aXJ0eSkgeworICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl90aGlja25lc3NUZXh0dXJlICYmIF9tYXRlcmlhbEZsYWdzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdGVyaWFsRmxhZ3MiXS5UaGlja25lc3NUZXh0
dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RoaWNrbmVzc1Rl
eHR1cmUuaXNSZWFkeU9yTm90QmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHZhciByZWZyYWN0aW9uVGV4dHVyZSA9IHRoaXMuX2dldFJlZnJhY3Rp
b25UZXh0dXJlKHNjZW5lKTsKKyAgICAgICAgICAgICAgICBpZiAocmVmcmFjdGlvblRleHR1cmUg
JiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0ZXJpYWxG
bGFncyJdLlJlZnJhY3Rpb25UZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXJlZnJhY3Rpb25UZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyB0byBzZWUgaWYgYSB0ZXh0dXJl
IGlzIHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0
IG9mICJkZWZpbmVzIiB0byB1cGRhdGUuCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhl
IHNjZW5lIHRvIHRoZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgorICAgICAqLworICAgIFBCUlN1YlN1
cmZhY2VDb25maWd1cmF0aW9uLnByb3RvdHlwZS5wcmVwYXJlRGVmaW5lcyA9IGZ1bmN0aW9uIChk
ZWZpbmVzLCBzY2VuZSkgeworICAgICAgICBpZiAoZGVmaW5lcy5fYXJlVGV4dHVyZXNEaXJ0eSkg
eworICAgICAgICAgICAgZGVmaW5lcy5TVUJTVVJGQUNFID0gZmFsc2U7CisgICAgICAgICAgICBk
ZWZpbmVzLlNTX1RSQU5TTFVDRU5DWSA9IHRoaXMuX2lzVHJhbnNsdWNlbmN5RW5hYmxlZDsKKyAg
ICAgICAgICAgIGRlZmluZXMuU1NfU0NBVEVSUklORyA9IHRoaXMuX2lzU2NhdHRlcmluZ0VuYWJs
ZWQ7CisgICAgICAgICAgICBkZWZpbmVzLlNTX1RISUNLTkVTU0FORE1BU0tfVEVYVFVSRSA9IGZh
bHNlOworICAgICAgICAgICAgZGVmaW5lcy5TU19NQVNLX0ZST01fVEhJQ0tORVNTX1RFWFRVUkUg
PSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuU1NfUkVGUkFDVElPTiA9IGZhbHNlOworICAg
ICAgICAgICAgZGVmaW5lcy5TU19SRUZSQUNUSU9OTUFQXzNEID0gZmFsc2U7CisgICAgICAgICAg
ICBkZWZpbmVzLlNTX0dBTU1BUkVGUkFDVElPTiA9IGZhbHNlOworICAgICAgICAgICAgZGVmaW5l
cy5TU19SR0JEUkVGUkFDVElPTiA9IGZhbHNlOworICAgICAgICAgICAgZGVmaW5lcy5TU19MSU5F
QVJTUEVDVUxBUlJFRlJBQ1RJT04gPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuU1NfUkVG
UkFDVElPTk1BUF9PUFBPU0lURVogPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuU1NfTE9E
SU5SRUZSQUNUSU9OQUxQSEEgPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuU1NfTElOS1JF
RlJBQ1RJT05UT1RSQU5TUEFSRU5DWSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKHRoaXMuX2lz
UmVmcmFjdGlvbkVuYWJsZWQgfHwgdGhpcy5faXNUcmFuc2x1Y2VuY3lFbmFibGVkIHx8IHRoaXMu
X2lzU2NhdHRlcmluZ0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLlNVQlNVUkZB
Q0UgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzLl9hcmVUZXh0dXJlc0RpcnR5
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzY2VuZS50ZXh0dXJlc0VuYWJsZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aGlja25lc3NUZXh0dXJlICYmIF9tYXRl
cmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdGVyaWFsRmxhZ3MiXS5U
aGlja25lc3NUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N
YXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0
ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX3RoaWNrbmVzc1Rl
eHR1cmUsIGRlZmluZXMsICJTU19USElDS05FU1NBTkRNQVNLX1RFWFRVUkUiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBkZWZpbmVzLlNTX01BU0tfRlJPTV9USElDS05FU1NfVEVYVFVS
RSA9IHRoaXMuX3VzZU1hc2tGcm9tVGhpY2tuZXNzVGV4dHVyZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0aGlzLl9pc1JlZnJhY3Rpb25FbmFibGVkKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
cmVmcmFjdGlvblRleHR1cmUgPSB0aGlzLl9nZXRSZWZyYWN0aW9uVGV4dHVyZShzY2VuZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChyZWZyYWN0aW9uVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFn
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0uUmVmcmFjdGlv
blRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlNTX1JF
RlJBQ1RJT04gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5TU19SRUZS
QUNUSU9OTUFQXzNEID0gcmVmcmFjdGlvblRleHR1cmUuaXNDdWJlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lcy5TU19HQU1NQVJFRlJBQ1RJT04gPSByZWZyYWN0aW9uVGV4dHVyZS5n
YW1tYVNwYWNlOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5TU19SR0JEUkVGUkFD
VElPTiA9IHJlZnJhY3Rpb25UZXh0dXJlLmlzUkdCRDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmluZXMuU1NfTElORUFSU1BFQ1VMQVJSRUZSQUNUSU9OID0gcmVmcmFjdGlvblRleHR1cmUu
bGluZWFyU3BlY3VsYXJMT0Q7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlNTX1JF
RlJBQ1RJT05NQVBfT1BQT1NJVEVaID0gcmVmcmFjdGlvblRleHR1cmUuaW52ZXJ0WjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmluZXMuU1NfTE9ESU5SRUZSQUNUSU9OQUxQSEEgPSByZWZy
YWN0aW9uVGV4dHVyZS5sb2RMZXZlbEluQWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVzLlNTX0xJTktSRUZSQUNUSU9OVE9UUkFOU1BBUkVOQ1kgPSB0aGlzLl9saW5rUmVmcmFj
dGlvbldpdGhUcmFuc3BhcmVuY3k7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAq
IEJpbmRzIHRoZSBtYXRlcmlhbCBkYXRhLgorICAgICAqIEBwYXJhbSB1bmlmb3JtQnVmZmVyIGRl
ZmluZXMgdGhlIFVuaWZvcm0gYnVmZmVyIHRvIGZpbGwgaW4uCisgICAgICogQHBhcmFtIHNjZW5l
IGRlZmluZXMgdGhlIHNjZW5lIHRoZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgorICAgICAqIEBwYXJh
bSBlbmdpbmUgZGVmaW5lcyB0aGUgZW5naW5lIHRoZSBtYXRlcmlhbCBiZWxvbmdzIHRvLgorICAg
ICAqIEBwYXJhbSBpc0Zyb3plbiBkZWZpbmVzIHdldGhlciB0aGUgbWF0ZXJpYWwgaXMgZnJvemVu
IG9yIG5vdC4KKyAgICAgKiBAcGFyYW0gbG9kQmFzZWRNaWNyb3N1cmZhY2UgZGVmaW5lcyB3ZXRo
ZXIgdGhlIG1hdGVyaWFsIHJlbGllcyBvbiBsb2QgYmFzZWQgbWljcm9zdXJmYWNlIG9yIG5vdC4K
KyAgICAgKi8KKyAgICBQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuYmluZEZv
clN1Yk1lc2ggPSBmdW5jdGlvbiAodW5pZm9ybUJ1ZmZlciwgc2NlbmUsIGVuZ2luZSwgaXNGcm96
ZW4sIGxvZEJhc2VkTWljcm9zdXJmYWNlKSB7CisgICAgICAgIHZhciByZWZyYWN0aW9uVGV4dHVy
ZSA9IHRoaXMuX2dldFJlZnJhY3Rpb25UZXh0dXJlKHNjZW5lKTsKKyAgICAgICAgaWYgKCF1bmlm
b3JtQnVmZmVyLnVzZVVibyB8fCAhaXNGcm96ZW4gfHwgIXVuaWZvcm1CdWZmZXIuaXNTeW5jKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fdGhpY2tuZXNzVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFn
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0uVGhpY2tuZXNz
VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyLnVwZGF0ZUZs
b2F0MigidlRoaWNrbmVzc0luZm9zIiwgdGhpcy5fdGhpY2tuZXNzVGV4dHVyZS5jb29yZGluYXRl
c0luZGV4LCB0aGlzLl90aGlja25lc3NUZXh0dXJlLmxldmVsKTsKKyAgICAgICAgICAgICAgICBf
TWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1h
dGVyaWFsSGVscGVyIl0uQmluZFRleHR1cmVNYXRyaXgodGhpcy5fdGhpY2tuZXNzVGV4dHVyZSwg
dW5pZm9ybUJ1ZmZlciwgInRoaWNrbmVzcyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dW5pZm9ybUJ1ZmZlci51cGRhdGVGbG9hdDIoInZUaGlja25lc3NQYXJhbSIsIHRoaXMubWluaW11
bVRoaWNrbmVzcywgdGhpcy5tYXhpbXVtVGhpY2tuZXNzIC0gdGhpcy5taW5pbXVtVGhpY2tuZXNz
KTsKKyAgICAgICAgICAgIGlmIChyZWZyYWN0aW9uVGV4dHVyZSAmJiBfbWF0ZXJpYWxGbGFnc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0uUmVmcmFjdGlvblRl
eHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci51cGRhdGVNYXRy
aXgoInJlZnJhY3Rpb25NYXRyaXgiLCByZWZyYWN0aW9uVGV4dHVyZS5nZXRSZWZsZWN0aW9uVGV4
dHVyZU1hdHJpeCgpKTsKKyAgICAgICAgICAgICAgICB2YXIgZGVwdGggPSAxLjA7CisgICAgICAg
ICAgICAgICAgaWYgKCFyZWZyYWN0aW9uVGV4dHVyZS5pc0N1YmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlZnJhY3Rpb25UZXh0dXJlLmRlcHRoKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkZXB0aCA9IHJlZnJhY3Rpb25UZXh0dXJlLmRlcHRoOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVuaWZvcm1CdWZmZXIudXBk
YXRlRmxvYXQ0KCJ2UmVmcmFjdGlvbkluZm9zIiwgcmVmcmFjdGlvblRleHR1cmUubGV2ZWwsIDEg
LyB0aGlzLl9pbmRleE9mUmVmcmFjdGlvbiwgZGVwdGgsIHRoaXMuX2ludmVydFJlZnJhY3Rpb25Z
ID8gLTEgOiAxKTsKKyAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyLnVwZGF0ZUZsb2F0Mygi
dlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvcyIsIHJlZnJhY3Rpb25UZXh0dXJlLmdldFNpemUo
KS53aWR0aCwgcmVmcmFjdGlvblRleHR1cmUubG9kR2VuZXJhdGlvblNjYWxlLCByZWZyYWN0aW9u
VGV4dHVyZS5sb2RHZW5lcmF0aW9uT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHVuaWZvcm1CdWZmZXIudXBkYXRlQ29sb3IzKCJ2RGlmZnVzaW9uRGlzdGFuY2UiLCB0aGlzLmRp
ZmZ1c2lvbkRpc3RhbmNlKTsKKyAgICAgICAgICAgIHVuaWZvcm1CdWZmZXIudXBkYXRlRmxvYXQ0
KCJ2VGludENvbG9yIiwgdGhpcy50aW50Q29sb3IuciwgdGhpcy50aW50Q29sb3IuZywgdGhpcy50
aW50Q29sb3IuYiwgdGhpcy50aW50Q29sb3JBdERpc3RhbmNlKTsKKyAgICAgICAgICAgIHVuaWZv
cm1CdWZmZXIudXBkYXRlRmxvYXQzKCJ2U3ViU3VyZmFjZUludGVuc2l0eSIsIHRoaXMucmVmcmFj
dGlvbkludGVuc2l0eSwgdGhpcy50cmFuc2x1Y2VuY3lJbnRlbnNpdHksIHRoaXMuc2NhdHRlcmlu
Z0ludGVuc2l0eSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGV4dHVyZXMKKyAgICAgICAgaWYg
KHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RoaWNrbmVz
c1RleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
TWF0ZXJpYWxGbGFncyJdLlRoaWNrbmVzc1RleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAg
ICAgdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJlKCJ0aGlja25lc3NTYW1wbGVyIiwgdGhpcy5fdGhp
Y2tuZXNzVGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVmcmFjdGlv
blRleHR1cmUgJiYgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
TWF0ZXJpYWxGbGFncyJdLlJlZnJhY3Rpb25UZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAg
ICAgIGlmIChsb2RCYXNlZE1pY3Jvc3VyZmFjZSkgeworICAgICAgICAgICAgICAgICAgICB1bmlm
b3JtQnVmZmVyLnNldFRleHR1cmUoInJlZnJhY3Rpb25TYW1wbGVyIiwgcmVmcmFjdGlvblRleHR1
cmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJlKCJyZWZyYWN0aW9uU2FtcGxlciIs
IHJlZnJhY3Rpb25UZXh0dXJlLl9sb2RUZXh0dXJlTWlkIHx8IHJlZnJhY3Rpb25UZXh0dXJlKTsK
KyAgICAgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJlKCJyZWZyYWN0aW9u
U2FtcGxlckxvdyIsIHJlZnJhY3Rpb25UZXh0dXJlLl9sb2RUZXh0dXJlTG93IHx8IHJlZnJhY3Rp
b25UZXh0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlci5zZXRUZXh0dXJl
KCJyZWZyYWN0aW9uU2FtcGxlckhpZ2giLCByZWZyYWN0aW9uVGV4dHVyZS5fbG9kVGV4dHVyZUhp
Z2ggfHwgcmVmcmFjdGlvblRleHR1cmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogVW5iaW5kcyB0aGUgbWF0ZXJp
YWwgZnJvbSB0aGUgbWVzaC4KKyAgICAgKiBAcGFyYW0gYWN0aXZlRWZmZWN0IGRlZmluZXMgdGhl
IGVmZmVjdCB0aGF0IHNob3VsZCBiZSB1bmJvdW5kIGZyb20uCisgICAgICogQHJldHVybnMgdHJ1
ZSBpZiB1bmJvdW5kLCBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAgICBQQlJTdWJTdXJmYWNl
Q29uZmlndXJhdGlvbi5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gKGFjdGl2ZUVmZmVjdCkg
eworICAgICAgICBpZiAodGhpcy5fcmVmcmFjdGlvblRleHR1cmUgJiYgdGhpcy5fcmVmcmFjdGlv
blRleHR1cmUuaXNSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIGFjdGl2ZUVmZmVjdC5zZXRU
ZXh0dXJlKCJyZWZyYWN0aW9uU2FtcGxlciIsIG51bGwpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmV0dXJucyB0aGUgdGV4dHVyZSB1c2VkIGZvciByZWZyYWN0aW9uIG9yIG51bGwgaWYg
bm9uZSBpcyB1c2VkLgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGUg
bWF0ZXJpYWwgYmVsb25ncyB0by4KKyAgICAgKiBAcmV0dXJucyAtIFJlZnJhY3Rpb24gdGV4dHVy
ZSBpZiBwcmVzZW50LiAgSWYgbm8gcmVmcmFjdGlvbiB0ZXh0dXJlIGFuZCByZWZyYWN0aW9uCisg
ICAgICogaXMgbGlua2VkIHdpdGggdHJhbnNwYXJlbmN5LCByZXR1cm5zIGVudmlyb25tZW50IHRl
eHR1cmUuICBPdGhlcndpc2UsIHJldHVybnMgbnVsbC4KKyAgICAgKi8KKyAgICBQQlJTdWJTdXJm
YWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuX2dldFJlZnJhY3Rpb25UZXh0dXJlID0gZnVuY3Rp
b24gKHNjZW5lKSB7CisgICAgICAgIGlmICh0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZSkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlOworICAgICAgICB9CisgICAg
ICAgIGlmICh0aGlzLl9pc1JlZnJhY3Rpb25FbmFibGVkKSB7CisgICAgICAgICAgICByZXR1cm4g
c2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxs
OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBCUlN1YlN1cmZhY2VDb25maWd1
cmF0aW9uLnByb3RvdHlwZSwgImRpc2FibGVBbHBoYUJsZW5kaW5nIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogUmV0dXJucyB0cnVlIGlmIGFscGhhIGJsZW5kaW5nIHNob3VsZCBiZSBkaXNh
YmxlZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuaXNSZWZyYWN0aW9uRW5hYmxlZCAmJiB0aGlzLl9saW5rUmVmcmFjdGlv
bldpdGhUcmFuc3BhcmVuY3k7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEZp
bGxzIHRoZSBsaXN0IG9mIHJlbmRlciB0YXJnZXQgdGV4dHVyZXMuCisgICAgICogQHBhcmFtIHJl
bmRlclRhcmdldHMgdGhlIGxpc3Qgb2YgcmVuZGVyIHRhcmdldHMgdG8gdXBkYXRlCisgICAgICov
CisgICAgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmZpbGxSZW5kZXJUYXJn
ZXRUZXh0dXJlcyA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXRzKSB7CisgICAgICAgIGlmIChfbWF0
ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlhbEZsYWdzIl0u
UmVmcmFjdGlvblRleHR1cmVFbmFibGVkICYmIHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlICYmIHRo
aXMuX3JlZnJhY3Rpb25UZXh0dXJlLmlzUmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICByZW5k
ZXJUYXJnZXRzLnB1c2godGhpcy5fcmVmcmFjdGlvblRleHR1cmUpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdG8gc2VlIGlmIGEgdGV4dHVyZSBpcyB1c2VkIGlu
IHRoZSBtYXRlcmlhbC4KKyAgICAgKiBAcGFyYW0gdGV4dHVyZSAtIEJhc2UgdGV4dHVyZSB0byB1
c2UuCisgICAgICogQHJldHVybnMgLSBCb29sZWFuIHNwZWNpZnlpbmcgaWYgYSB0ZXh0dXJlIGlz
IHVzZWQgaW4gdGhlIG1hdGVyaWFsLgorICAgICAqLworICAgIFBCUlN1YlN1cmZhY2VDb25maWd1
cmF0aW9uLnByb3RvdHlwZS5oYXNUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAgICAg
ICAgaWYgKHRoaXMuX3RoaWNrbmVzc1RleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9yZWZyYWN0aW9uVGV4
dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGJv
b2xlYW4gaW5kaWNhdGluZyB0aGF0IGN1cnJlbnQgbWF0ZXJpYWwgbmVlZHMgdG8gcmVnaXN0ZXIg
UlRUCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGlzIHVzZXMgYSByZW5kZXIgdGFyZ2V0IG90
aGVyd2lzZSBmYWxzZS4KKyAgICAgKi8KKyAgICBQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi5w
cm90b3R5cGUuaGFzUmVuZGVyVGFyZ2V0VGV4dHVyZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmIChfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRlcmlh
bEZsYWdzIl0uUmVmcmFjdGlvblRleHR1cmVFbmFibGVkICYmIHRoaXMuX3JlZnJhY3Rpb25UZXh0
dXJlICYmIHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlLmlzUmVuZGVyVGFyZ2V0KSB7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBhY3RpdmVseSB1c2Vk
IHRleHR1cmVzLgorICAgICAqIEBwYXJhbSBhY3RpdmVUZXh0dXJlcyBBcnJheSBvZiBCYXNlVGV4
dHVyZXMKKyAgICAgKi8KKyAgICBQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUu
Z2V0QWN0aXZlVGV4dHVyZXMgPSBmdW5jdGlvbiAoYWN0aXZlVGV4dHVyZXMpIHsKKyAgICAgICAg
aWYgKHRoaXMuX3RoaWNrbmVzc1RleHR1cmUpIHsKKyAgICAgICAgICAgIGFjdGl2ZVRleHR1cmVz
LnB1c2godGhpcy5fdGhpY2tuZXNzVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX3JlZnJhY3Rpb25UZXh0dXJlKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNo
KHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogUmV0dXJucyB0aGUgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAgICAgKiBAcGFyYW0gYW5p
bWF0YWJsZXMgQXJyYXkgb2YgYW5pbWF0YWJsZSB0ZXh0dXJlcy4KKyAgICAgKi8KKyAgICBQQlJT
dWJTdXJmYWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuZ2V0QW5pbWF0YWJsZXMgPSBmdW5jdGlv
biAoYW5pbWF0YWJsZXMpIHsKKyAgICAgICAgaWYgKHRoaXMuX3RoaWNrbmVzc1RleHR1cmUgJiYg
dGhpcy5fdGhpY2tuZXNzVGV4dHVyZS5hbmltYXRpb25zICYmIHRoaXMuX3RoaWNrbmVzc1RleHR1
cmUuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBhbmltYXRhYmxlcy5wdXNo
KHRoaXMuX3RoaWNrbmVzc1RleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9y
ZWZyYWN0aW9uVGV4dHVyZSAmJiB0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZS5hbmltYXRpb25zICYm
IHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAg
ICAgICAgYW5pbWF0YWJsZXMucHVzaCh0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZSk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSByZXNvdXJjZXMgb2YgdGhl
IG1hdGVyaWFsLgorICAgICAqIEBwYXJhbSBmb3JjZURpc3Bvc2VUZXh0dXJlcyAtIEZvcmNlcyB0
aGUgZGlzcG9zYWwgb2YgYWxsIHRleHR1cmVzLgorICAgICAqLworICAgIFBCUlN1YlN1cmZhY2VD
b25maWd1cmF0aW9uLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGZvcmNlRGlzcG9zZVRl
eHR1cmVzKSB7CisgICAgICAgIGlmIChmb3JjZURpc3Bvc2VUZXh0dXJlcykgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX3RoaWNrbmVzc1RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90
aGlja25lc3NUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICh0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJh
Y3Rpb25UZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgKiBHZXQgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZSBvZiB0aGUgdGV4dHVy
ZSB1c2VmdWwgZm9yIHNlcmlhbGl6YXRpb24gb3IgZHluYW1pYyBjb2RpbmcuCisgICAgKiBAcmV0
dXJucyAiUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24iCisgICAgKi8KKyAgICBQQlJTdWJTdXJm
YWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gIlBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uIjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEFkZCBmYWxsYmFja3MgdG8gdGhlIGVmZmVjdCBmYWxsYmFja3MgbGlzdC4K
KyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBCYXNlIHRleHR1cmUgdG8gdXNlLgor
ICAgICAqIEBwYXJhbSBmYWxsYmFja3MgZGVmaW5lcyB0aGUgY3VycmVudCBmYWxsYmFjayBsaXN0
LgorICAgICAqIEBwYXJhbSBjdXJyZW50UmFuayBkZWZpbmVzIHRoZSBjdXJyZW50IGZhbGxiYWNr
IHJhbmsuCisgICAgICogQHJldHVybnMgdGhlIG5ldyBmYWxsYmFjayByYW5rLgorICAgICAqLwor
ICAgIFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLkFkZEZhbGxiYWNrcyA9IGZ1bmN0aW9uIChk
ZWZpbmVzLCBmYWxsYmFja3MsIGN1cnJlbnRSYW5rKSB7CisgICAgICAgIGlmIChkZWZpbmVzLlNT
X1NDQVRFUlJJTkcpIHsKKyAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjayhjdXJyZW50
UmFuaysrLCAiU1NfU0NBVEVSUklORyIpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVz
LlNTX1RSQU5TTFVDRU5DWSkgeworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKGN1
cnJlbnRSYW5rKyssICJTU19UUkFOU0xVQ0VOQ1kiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gY3VycmVudFJhbms7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgdGhlIHJlcXVpcmVk
IHVuaWZvcm1zIHRvIHRoZSBjdXJyZW50IGxpc3QuCisgICAgICogQHBhcmFtIHVuaWZvcm1zIGRl
ZmluZXMgdGhlIGN1cnJlbnQgdW5pZm9ybSBsaXN0LgorICAgICAqLworICAgIFBCUlN1YlN1cmZh
Y2VDb25maWd1cmF0aW9uLkFkZFVuaWZvcm1zID0gZnVuY3Rpb24gKHVuaWZvcm1zKSB7CisgICAg
ICAgIHVuaWZvcm1zLnB1c2goInZEaWZmdXNpb25EaXN0YW5jZSIsICJ2VGludENvbG9yIiwgInZT
dWJTdXJmYWNlSW50ZW5zaXR5IiwgInZSZWZyYWN0aW9uTWljcm9zdXJmYWNlSW5mb3MiLCAidlJl
ZnJhY3Rpb25JbmZvcyIsICJ2VGhpY2tuZXNzSW5mb3MiLCAidlRoaWNrbmVzc1BhcmFtIiwgInJl
ZnJhY3Rpb25NYXRyaXgiLCAidGhpY2tuZXNzTWF0cml4Iik7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGQgdGhlIHJlcXVpcmVkIHNhbXBsZXJzIHRvIHRoZSBjdXJyZW50IGxpc3QuCisgICAg
ICogQHBhcmFtIHNhbXBsZXJzIGRlZmluZXMgdGhlIGN1cnJlbnQgc2FtcGxlciBsaXN0LgorICAg
ICAqLworICAgIFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLkFkZFNhbXBsZXJzID0gZnVuY3Rp
b24gKHNhbXBsZXJzKSB7CisgICAgICAgIHNhbXBsZXJzLnB1c2goInRoaWNrbmVzc1NhbXBsZXIi
LCAicmVmcmFjdGlvblNhbXBsZXIiLCAicmVmcmFjdGlvblNhbXBsZXJMb3ciLCAicmVmcmFjdGlv
blNhbXBsZXJIaWdoIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgdGhlIHJlcXVpcmVk
IHVuaWZvcm1zIHRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybUJ1
ZmZlciBkZWZpbmVzIHRoZSBjdXJyZW50IHVuaWZvcm0gYnVmZmVyLgorICAgICAqLworICAgIFBC
UlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLlByZXBhcmVVbmlmb3JtQnVmZmVyID0gZnVuY3Rpb24g
KHVuaWZvcm1CdWZmZXIpIHsKKyAgICAgICAgdW5pZm9ybUJ1ZmZlci5hZGRVbmlmb3JtKCJ2UmVm
cmFjdGlvbk1pY3Jvc3VyZmFjZUluZm9zIiwgMyk7CisgICAgICAgIHVuaWZvcm1CdWZmZXIuYWRk
VW5pZm9ybSgidlJlZnJhY3Rpb25JbmZvcyIsIDQpOworICAgICAgICB1bmlmb3JtQnVmZmVyLmFk
ZFVuaWZvcm0oInJlZnJhY3Rpb25NYXRyaXgiLCAxNik7CisgICAgICAgIHVuaWZvcm1CdWZmZXIu
YWRkVW5pZm9ybSgidlRoaWNrbmVzc0luZm9zIiwgMik7CisgICAgICAgIHVuaWZvcm1CdWZmZXIu
YWRkVW5pZm9ybSgidGhpY2tuZXNzTWF0cml4IiwgMTYpOworICAgICAgICB1bmlmb3JtQnVmZmVy
LmFkZFVuaWZvcm0oInZUaGlja25lc3NQYXJhbSIsIDIpOworICAgICAgICB1bmlmb3JtQnVmZmVy
LmFkZFVuaWZvcm0oInZEaWZmdXNpb25EaXN0YW5jZSIsIDMpOworICAgICAgICB1bmlmb3JtQnVm
ZmVyLmFkZFVuaWZvcm0oInZUaW50Q29sb3IiLCA0KTsKKyAgICAgICAgdW5pZm9ybUJ1ZmZlci5h
ZGRVbmlmb3JtKCJ2U3ViU3VyZmFjZUludGVuc2l0eSIsIDMpOworICAgIH07CisgICAgLyoqCisg
ICAgICogTWFrZXMgYSBkdXBsaWNhdGUgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpbnRv
IGFub3RoZXIgb25lLgorICAgICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIGRlZmluZSB0aGUgY29u
ZmlnIHdoZXJlIHRvIGNvcHkgdGhlIGluZm8KKyAgICAgKi8KKyAgICBQQlJTdWJTdXJmYWNlQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUuY29weVRvID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgICAgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
ZXJpYWxpemF0aW9uSGVscGVyIl0uQ2xvbmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlndXJh
dGlvbjsgfSwgdGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoaXMg
U3ViIFN1cmZhY2UgY29uZmlndXJhdGlvbi4KKyAgICAgKiBAcmV0dXJucyAtIEFuIG9iamVjdCB3
aXRoIHRoZSBzZXJpYWxpemVkIGNvbmZpZy4KKyAgICAgKi8KKyAgICBQQlJTdWJTdXJmYWNlQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJp
YWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXplKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAg
ICogUGFyc2VzIGEgYW5pc290cm9weSBDb25maWd1cmF0aW9uIGZyb20gYSBzZXJpYWxpemVkIG9i
amVjdC4KKyAgICAgKiBAcGFyYW0gc291cmNlIC0gU2VyaWFsaXplZCBvYmplY3QuCisgICAgICog
QHBhcmFtIHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHdlIGFyZSBwYXJzaW5nIGZvcgorICAgICAq
IEBwYXJhbSByb290VXJsIERlZmluZXMgdGhlIHJvb3RVcmwgdG8gbG9hZCBmcm9tCisgICAgICov
CisgICAgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rp
b24gKHNvdXJjZSwgc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
ZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXM7IH0s
IHNvdXJjZSwgc2NlbmUsIHJvb3RVcmwpOworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCksCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5
IikKKyAgICBdLCBQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJpc1JlZnJh
Y3Rpb25FbmFibGVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKSwKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5k
VG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0s
IFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgImlzVHJhbnNsdWNlbmN5RW5h
YmxlZCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBQQlJTdWJTdXJmYWNl
Q29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJyZWZyYWN0aW9uSW50ZW5zaXR5Iiwgdm9pZCAwKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLnBy
b3RvdHlwZSwgInRyYW5zbHVjZW5jeUludGVuc2l0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJzY2F0
dGVyaW5nSW50ZW5zaXR5Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoKSwK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGly
dHkiKQorICAgIF0sIFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgInRoaWNr
bmVzc1RleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgpLAorICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIp
CisgICAgXSwgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAicmVmcmFjdGlv
blRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1By
b3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJS
U3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiaW5kZXhPZlJlZnJhY3Rpb24iLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJf
bWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSU3ViU3VyZmFjZUNv
bmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiaW52ZXJ0UmVmcmFjdGlvblkiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpLAorICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1l
c2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24u
cHJvdG90eXBlLCAibGlua1JlZnJhY3Rpb25XaXRoVHJhbnNwYXJlbmN5Iiwgdm9pZCAwKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFBCUlN1YlN1cmZhY2VDb25maWd1cmF0aW9uLnByb3Rv
dHlwZSwgIm1pbmltdW1UaGlja25lc3MiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisg
ICAgXSwgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAibWF4aW11bVRoaWNr
bmVzcyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNDb2xvcjMiXSkoKQorICAgIF0sIFBCUlN1
YlN1cmZhY2VDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgInRpbnRDb2xvciIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBQQlJTdWJTdXJmYWNlQ29uZmlndXJhdGlvbi5wcm90
b3R5cGUsICJ0aW50Q29sb3JBdERpc3RhbmNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0Nv
bG9yMyJdKSgpCisgICAgXSwgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAi
ZGlmZnVzaW9uRGlzdGFuY2UiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpLAorICAgICAg
ICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJl
eHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisg
ICAgXSwgUEJSU3ViU3VyZmFjZUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAidXNlTWFza0Zyb21U
aGlja25lc3NUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICByZXR1cm4gUEJSU3ViU3VyZmFjZUNvbmZp
Z3VyYXRpb247Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9U
ZXh0dXJlcy9Mb2FkZXJzL2Jhc2lzVGV4dHVyZUxvYWRlci50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NYXRlcmlhbHMvVGV4dHVyZXMvTG9hZGVycy9iYXNpc1RleHR1cmVMb2FkZXIudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBfQmFzaXNUZXh0dXJlTG9hZGVyICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9CYXNpc1RleHR1cmVMb2FkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9CYXNpc1RleHR1cmVMb2FkZXI7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5n
aW5lcy9lbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19iYXNpc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vLi4vTWlzYy9iYXNpcyAqLyAiLi9NaXNjL2Jhc2lzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50
cyIpOworCisKKworLyoqCisgKiBMb2FkZXIgZm9yIC5iYXNpcyBmaWxlIGZvcm1hdAorICovCit2
YXIgX0Jhc2lzVGV4dHVyZUxvYWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICBmdW5jdGlvbiBfQmFzaXNUZXh0dXJlTG9hZGVyKCkgeworICAgICAgICAvKioKKyAgICAgICAg
ICogRGVmaW5lcyB3aGV0aGVyIHRoZSBsb2FkZXIgc3VwcG9ydHMgY2FzY2FkZSBsb2FkaW5nIHRo
ZSBkaWZmZXJlbnQgZmFjZXMuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnN1cHBvcnRDYXNj
YWRlcyA9IHRydWU7CisgICAgfQorICAgIC8qKgorICAgICAqIFRoaXMgcmV0dXJucyBpZiB0aGUg
bG9hZGVyIHN1cHBvcnQgdGhlIGN1cnJlbnQgZmlsZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFy
YW0gZXh0ZW5zaW9uIGRlZmluZXMgdGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlIGJlaW5n
IGxvYWRlZAorICAgICAqIEBwYXJhbSB0ZXh0dXJlRm9ybWF0SW5Vc2UgZGVmaW5lcyB0aGUgY3Vy
cmVudCBjb21wcmVzc2VkIGZvcm1hdCBpbiB1c2UgaXVuIHRoZSBlbmdpbmUKKyAgICAgKiBAcGFy
YW0gZmFsbGJhY2sgZGVmaW5lcyB0aGUgZmFsbGJhY2sgaW50ZXJuYWwgdGV4dHVyZSBpZiBhbnkK
KyAgICAgKiBAcGFyYW0gaXNCYXNlNjQgZGVmaW5lcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIGlzIGVu
Y29kZWQgYXMgYSBiYXNlNjQKKyAgICAgKiBAcGFyYW0gaXNCdWZmZXIgZGVmaW5lcyB3aGV0aGVy
IHRoZSB0ZXh0dXJlIGRhdGEgYXJlIHN0b3JlZCBhcyBhIGJ1ZmZlcgorICAgICAqIEByZXR1cm5z
IHRydWUgaWYgdGhlIGxvYWRlciBjYW4gbG9hZCB0aGUgc3BlY2lmaWVkIGZpbGUKKyAgICAgKi8K
KyAgICBfQmFzaXNUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS5jYW5Mb2FkID0gZnVuY3Rpb24gKGV4
dGVuc2lvbiwgdGV4dHVyZUZvcm1hdEluVXNlLCBmYWxsYmFjaywgaXNCYXNlNjQsIGlzQnVmZmVy
KSB7CisgICAgICAgIHJldHVybiBleHRlbnNpb24uaW5kZXhPZigiLmJhc2lzIikgPT09IDA7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBUcmFuc2Zvcm0gdGhlIHVybCBiZWZvcmUgbG9hZGluZyBp
ZiByZXF1aXJlZC4KKyAgICAgKiBAcGFyYW0gcm9vdFVybCB0aGUgdXJsIG9mIHRoZSB0ZXh0dXJl
CisgICAgICogQHBhcmFtIHRleHR1cmVGb3JtYXRJblVzZSBkZWZpbmVzIHRoZSBjdXJyZW50IGNv
bXByZXNzZWQgZm9ybWF0IGluIHVzZSBpdW4gdGhlIGVuZ2luZQorICAgICAqIEByZXR1cm5zIHRo
ZSB0cmFuc2Zvcm1lZCB0ZXh0dXJlCisgICAgICovCisgICAgX0Jhc2lzVGV4dHVyZUxvYWRlci5w
cm90b3R5cGUudHJhbnNmb3JtVXJsID0gZnVuY3Rpb24gKHJvb3RVcmwsIHRleHR1cmVGb3JtYXRJ
blVzZSkgeworICAgICAgICByZXR1cm4gcm9vdFVybDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEdldHMgdGhlIGZhbGxiYWNrIHVybCBpbiBjYXNlIHRoZSBsb2FkIGZhaWwuIFRoaXMgY2FuIHJl
dHVybiBudWxsIHRvIGFsbG93IHRoZSBkZWZhdWx0IGZhbGxiYWNrIG1lY2FuaXNtIHRvIHdvcmsK
KyAgICAgKiBAcGFyYW0gcm9vdFVybCB0aGUgdXJsIG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBh
cmFtIHRleHR1cmVGb3JtYXRJblVzZSBkZWZpbmVzIHRoZSBjdXJyZW50IGNvbXByZXNzZWQgZm9y
bWF0IGluIHVzZSBpdW4gdGhlIGVuZ2luZQorICAgICAqIEByZXR1cm5zIHRoZSBmYWxsYmFjayB0
ZXh0dXJlCisgICAgICovCisgICAgX0Jhc2lzVGV4dHVyZUxvYWRlci5wcm90b3R5cGUuZ2V0RmFs
bGJhY2tUZXh0dXJlVXJsID0gZnVuY3Rpb24gKHJvb3RVcmwsIHRleHR1cmVGb3JtYXRJblVzZSkg
eworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwbG9hZHMg
dGhlIGN1YmUgdGV4dHVyZSBkYXRhIHRvIHRoZSBXZWJHbCBUZXh0dXJlLiBJdCBoYXMgYWxyZWFk
eSBiZWVuIGJvdW5kLgorICAgICAqIEBwYXJhbSBkYXRhIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGRh
dGEKKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBkZWZpbmVzIHRoZSBCYWJ5bG9uSlMgaW50ZXJuYWwg
dGV4dHVyZQorICAgICAqIEBwYXJhbSBjcmVhdGVQb2x5bm9taWFscyB3aWxsIGJlIHRydWUgaWYg
cG9seW5vbWlhbHMgaGF2ZSBiZWVuIHJlcXVlc3RlZAorICAgICAqIEBwYXJhbSBvbkxvYWQgZGVm
aW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJpZ2dlciBvbmNlIHRoZSB0ZXh0dXJlIGlzIHJlYWR5Cisg
ICAgICogQHBhcmFtIG9uRXJyb3IgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJpZ2dlciBpbiBj
YXNlIG9mIGVycm9yCisgICAgICovCisgICAgX0Jhc2lzVGV4dHVyZUxvYWRlci5wcm90b3R5cGUu
bG9hZEN1YmVEYXRhID0gZnVuY3Rpb24gKGRhdGEsIHRleHR1cmUsIGNyZWF0ZVBvbHlub21pYWxz
LCBvbkxvYWQsIG9uRXJyb3IpIHsKKyAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgY2FwcyA9IHRleHR1
cmUuZ2V0RW5naW5lKCkuZ2V0Q2FwcygpOworICAgICAgICB2YXIgdHJhbnNjb2RlQ29uZmlnID0g
eworICAgICAgICAgICAgc3VwcG9ydGVkQ29tcHJlc3Npb25Gb3JtYXRzOiB7CisgICAgICAgICAg
ICAgICAgZXRjMTogY2Fwcy5ldGMxID8gdHJ1ZSA6IGZhbHNlLAorICAgICAgICAgICAgICAgIHMz
dGM6IGNhcHMuczN0YyA/IHRydWUgOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBwdnJ0YzogY2Fw
cy5wdnJ0YyA/IHRydWUgOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBldGMyOiBjYXBzLmV0YzIg
PyB0cnVlIDogZmFsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgX01pc2Nf
YmFzaXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQmFzaXNUb29scyJdLlRyYW5zY29k
ZUFzeW5jKGRhdGEsIHRyYW5zY29kZUNvbmZpZykudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7Cisg
ICAgICAgICAgICB2YXIgaGFzTWlwbWFwID0gcmVzdWx0LmZpbGVJbmZvLmltYWdlc1swXS5sZXZl
bHMubGVuZ3RoID4gMSAmJiB0ZXh0dXJlLmdlbmVyYXRlTWlwTWFwczsKKyAgICAgICAgICAgIF9N
aXNjX2Jhc2lzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkJhc2lzVG9vbHMiXS5Mb2Fk
VGV4dHVyZUZyb21UcmFuc2NvZGVSZXN1bHQodGV4dHVyZSwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHRleHR1cmUuZ2V0RW5naW5lKCkuX3NldEN1YmVNYXBUZXh0dXJlUGFyYW1zKGhhc01pcG1hcCk7
CisgICAgICAgICAgICB0ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAgICAgICB9KS5jYXRjaChm
dW5jdGlvbiAoZXJyKSB7CisgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJUb29scyJdLldhcm4oIkZhaWxlZCB0byB0cmFuc2NvZGUgQmFzaXMgZmls
ZSwgdHJhbnNjb2RpbmcgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UiKTsKKyAg
ICAgICAgICAgIHRleHR1cmUuaXNSZWFkeSA9IHRydWU7CisgICAgICAgIH0pOworICAgIH07Cisg
ICAgLyoqCisgICAgICogVXBsb2FkcyB0aGUgMkQgdGV4dHVyZSBkYXRhIHRvIHRoZSBXZWJHbCBU
ZXh0dXJlLiBJdCBoYXMgYWxyZWRheSBiZWVuIGJvdW5kIG9uY2UgaW4gdGhlIGNhbGxiYWNrLgor
ICAgICAqIEBwYXJhbSBkYXRhIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFy
YW0gdGV4dHVyZSBkZWZpbmVzIHRoZSBCYWJ5bG9uSlMgaW50ZXJuYWwgdGV4dHVyZQorICAgICAq
IEBwYXJhbSBjYWxsYmFjayBkZWZpbmVzIHRoZSBtZXRob2QgdG8gY2FsbCBvbmNlIHJlYWR5IHRv
IHVwbG9hZAorICAgICAqLworICAgIF9CYXNpc1RleHR1cmVMb2FkZXIucHJvdG90eXBlLmxvYWRE
YXRhID0gZnVuY3Rpb24gKGRhdGEsIHRleHR1cmUsIGNhbGxiYWNrKSB7CisgICAgICAgIHZhciBj
YXBzID0gdGV4dHVyZS5nZXRFbmdpbmUoKS5nZXRDYXBzKCk7CisgICAgICAgIHZhciB0cmFuc2Nv
ZGVDb25maWcgPSB7CisgICAgICAgICAgICBzdXBwb3J0ZWRDb21wcmVzc2lvbkZvcm1hdHM6IHsK
KyAgICAgICAgICAgICAgICBldGMxOiBjYXBzLmV0YzEgPyB0cnVlIDogZmFsc2UsCisgICAgICAg
ICAgICAgICAgczN0YzogY2Fwcy5zM3RjID8gdHJ1ZSA6IGZhbHNlLAorICAgICAgICAgICAgICAg
IHB2cnRjOiBjYXBzLnB2cnRjID8gdHJ1ZSA6IGZhbHNlLAorICAgICAgICAgICAgICAgIGV0YzI6
IGNhcHMuZXRjMiA/IHRydWUgOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAg
ICAgICBfTWlzY19iYXNpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJCYXNpc1Rvb2xz
Il0uVHJhbnNjb2RlQXN5bmMoZGF0YSwgdHJhbnNjb2RlQ29uZmlnKS50aGVuKGZ1bmN0aW9uIChy
ZXN1bHQpIHsKKyAgICAgICAgICAgIHZhciByb290SW1hZ2UgPSByZXN1bHQuZmlsZUluZm8uaW1h
Z2VzWzBdLmxldmVsc1swXTsKKyAgICAgICAgICAgIHZhciBoYXNNaXBtYXAgPSByZXN1bHQuZmls
ZUluZm8uaW1hZ2VzWzBdLmxldmVscy5sZW5ndGggPiAxICYmIHRleHR1cmUuZ2VuZXJhdGVNaXBN
YXBzOworICAgICAgICAgICAgY2FsbGJhY2socm9vdEltYWdlLndpZHRoLCByb290SW1hZ2UuaGVp
Z2h0LCBoYXNNaXBtYXAsIHJlc3VsdC5mb3JtYXQgIT09IC0xLCBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgX01pc2NfYmFzaXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQmFz
aXNUb29scyJdLkxvYWRUZXh0dXJlRnJvbVRyYW5zY29kZVJlc3VsdCh0ZXh0dXJlLCByZXN1bHQp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKKyAg
ICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRvb2xz
Il0uV2FybigiRmFpbGVkIHRvIHRyYW5zY29kZSBCYXNpcyBmaWxlLCB0cmFuc2NvZGluZyBtYXkg
bm90IGJlIHN1cHBvcnRlZCBvbiB0aGlzIGRldmljZSIpOworICAgICAgICAgICAgY2FsbGJhY2so
MCwgMCwgZmFsc2UsIGZhbHNlLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICByZXR1cm4gX0Jhc2lzVGV4dHVyZUxvYWRlcjsKK30oKSk7CisK
Ky8vIFJlZ2lzdGVyIHRoZSBsb2FkZXIuCitfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siRW5naW5lIl0uX1RleHR1cmVMb2FkZXJzLnB1c2gobmV3IF9CYXNpc1Rl
eHR1cmVMb2FkZXIoKSk7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0
dXJlcy9Mb2FkZXJzL2Rkc1RleHR1cmVMb2FkZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVy
aWFscy9UZXh0dXJlcy9Mb2FkZXJzL2Rkc1RleHR1cmVMb2FkZXIudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogX0REU1RleHR1cmVMb2FkZXIgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiX0REU1RleHR1cmVMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9ERFNUZXh0dXJlTG9hZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
c3BoZXJpY2FsUG9seW5vbWlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWF0aHMvc3BoZXJpY2FsUG9seW5vbWlhbCAqLyAi
Li9NYXRocy9zcGhlcmljYWxQb2x5bm9taWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2Vu
Z2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2Rkc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlz
Yy9kZHMgKi8gIi4vTWlzYy9kZHMudHMiKTsKKworCisKKy8qKgorICogSW1wbGVtZW50YXRpb24g
b2YgdGhlIEREUyBUZXh0dXJlIExvYWRlci4KKyAqIEBoaWRkZW4KKyAqLwordmFyIF9ERFNUZXh0
dXJlTG9hZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIF9E
RFNUZXh0dXJlTG9hZGVyKCkgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB3ZXRo
ZXIgdGhlIGxvYWRlciBzdXBwb3J0cyBjYXNjYWRlIGxvYWRpbmcgdGhlIGRpZmZlcmVudCBmYWNl
cy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc3VwcG9ydENhc2NhZGVzID0gdHJ1ZTsKKyAg
ICB9CisgICAgLyoqCisgICAgICogVGhpcyByZXR1cm5zIGlmIHRoZSBsb2FkZXIgc3VwcG9ydCB0
aGUgY3VycmVudCBmaWxlIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbSBleHRlbnNpb24gZGVm
aW5lcyB0aGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgYmVpbmcgbG9hZGVkCisgICAgICog
QHBhcmFtIHRleHR1cmVGb3JtYXRJblVzZSBkZWZpbmVzIHRoZSBjdXJyZW50IGNvbXByZXNzZWQg
Zm9ybWF0IGluIHVzZSBpdW4gdGhlIGVuZ2luZQorICAgICAqIEBwYXJhbSBmYWxsYmFjayBkZWZp
bmVzIHRoZSBmYWxsYmFjayBpbnRlcm5hbCB0ZXh0dXJlIGlmIGFueQorICAgICAqIEBwYXJhbSBp
c0Jhc2U2NCBkZWZpbmVzIHdoZXRoZXIgdGhlIHRleHR1cmUgaXMgZW5jb2RlZCBhcyBhIGJhc2U2
NAorICAgICAqIEBwYXJhbSBpc0J1ZmZlciBkZWZpbmVzIHdoZXRoZXIgdGhlIHRleHR1cmUgZGF0
YSBhcmUgc3RvcmVkIGFzIGEgYnVmZmVyCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgbG9h
ZGVyIGNhbiBsb2FkIHRoZSBzcGVjaWZpZWQgZmlsZQorICAgICAqLworICAgIF9ERFNUZXh0dXJl
TG9hZGVyLnByb3RvdHlwZS5jYW5Mb2FkID0gZnVuY3Rpb24gKGV4dGVuc2lvbiwgdGV4dHVyZUZv
cm1hdEluVXNlLCBmYWxsYmFjaywgaXNCYXNlNjQsIGlzQnVmZmVyKSB7CisgICAgICAgIHJldHVy
biBleHRlbnNpb24uaW5kZXhPZigiLmRkcyIpID09PSAwOworICAgIH07CisgICAgLyoqCisgICAg
ICogVHJhbnNmb3JtIHRoZSB1cmwgYmVmb3JlIGxvYWRpbmcgaWYgcmVxdWlyZWQuCisgICAgICog
QHBhcmFtIHJvb3RVcmwgdGhlIHVybCBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSB0ZXh0
dXJlRm9ybWF0SW5Vc2UgZGVmaW5lcyB0aGUgY3VycmVudCBjb21wcmVzc2VkIGZvcm1hdCBpbiB1
c2UgaXVuIHRoZSBlbmdpbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgdHJhbnNmb3JtZWQgdGV4dHVy
ZQorICAgICAqLworICAgIF9ERFNUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS50cmFuc2Zvcm1Vcmwg
PSBmdW5jdGlvbiAocm9vdFVybCwgdGV4dHVyZUZvcm1hdEluVXNlKSB7CisgICAgICAgIHJldHVy
biByb290VXJsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZmFsbGJhY2sgdXJs
IGluIGNhc2UgdGhlIGxvYWQgZmFpbC4gVGhpcyBjYW4gcmV0dXJuIG51bGwgdG8gYWxsb3cgdGhl
IGRlZmF1bHQgZmFsbGJhY2sgbWVjYW5pc20gdG8gd29yaworICAgICAqIEBwYXJhbSByb290VXJs
IHRoZSB1cmwgb2YgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gdGV4dHVyZUZvcm1hdEluVXNl
IGRlZmluZXMgdGhlIGN1cnJlbnQgY29tcHJlc3NlZCBmb3JtYXQgaW4gdXNlIGl1biB0aGUgZW5n
aW5lCisgICAgICogQHJldHVybnMgdGhlIGZhbGxiYWNrIHRleHR1cmUKKyAgICAgKi8KKyAgICBf
RERTVGV4dHVyZUxvYWRlci5wcm90b3R5cGUuZ2V0RmFsbGJhY2tUZXh0dXJlVXJsID0gZnVuY3Rp
b24gKHJvb3RVcmwsIHRleHR1cmVGb3JtYXRJblVzZSkgeworICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFVwbG9hZHMgdGhlIGN1YmUgdGV4dHVyZSBkYXRhIHRv
IHRoZSBXZWJHbCBUZXh0dXJlLiBJdCBoYXMgYWxyZWRheSBiZWVuIGJvdW5kLgorICAgICAqIEBw
YXJhbSBkYXRhIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFyYW0gdGV4dHVy
ZSBkZWZpbmVzIHRoZSBCYWJ5bG9uSlMgaW50ZXJuYWwgdGV4dHVyZQorICAgICAqIEBwYXJhbSBj
cmVhdGVQb2x5bm9taWFscyB3aWxsIGJlIHRydWUgaWYgcG9seW5vbWlhbHMgaGF2ZSBiZWVuIHJl
cXVlc3RlZAorICAgICAqIEBwYXJhbSBvbkxvYWQgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJp
Z2dlciBvbmNlIHRoZSB0ZXh0dXJlIGlzIHJlYWR5CisgICAgICogQHBhcmFtIG9uRXJyb3IgZGVm
aW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJpZ2dlciBpbiBjYXNlIG9mIGVycm9yCisgICAgICovCisg
ICAgX0REU1RleHR1cmVMb2FkZXIucHJvdG90eXBlLmxvYWRDdWJlRGF0YSA9IGZ1bmN0aW9uIChp
bWdzLCB0ZXh0dXJlLCBjcmVhdGVQb2x5bm9taWFscywgb25Mb2FkLCBvbkVycm9yKSB7CisgICAg
ICAgIHZhciBlbmdpbmUgPSB0ZXh0dXJlLmdldEVuZ2luZSgpOworICAgICAgICB2YXIgaW5mbzsK
KyAgICAgICAgdmFyIGxvYWRNaXBtYXAgPSBmYWxzZTsKKyAgICAgICAgaWYgKEFycmF5LmlzQXJy
YXkoaW1ncykpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBpbWdz
Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBkYXRhXzEgPSBpbWdzW2lu
ZGV4XTsKKyAgICAgICAgICAgICAgICBpbmZvID0gX01pc2NfZGRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkREU1Rvb2xzIl0uR2V0RERTSW5mbyhkYXRhXzEpOworICAgICAgICAgICAg
ICAgIHRleHR1cmUud2lkdGggPSBpbmZvLndpZHRoOworICAgICAgICAgICAgICAgIHRleHR1cmUu
aGVpZ2h0ID0gaW5mby5oZWlnaHQ7CisgICAgICAgICAgICAgICAgbG9hZE1pcG1hcCA9IChpbmZv
LmlzUkdCIHx8IGluZm8uaXNMdW1pbmFuY2UgfHwgaW5mby5taXBtYXBDb3VudCA+IDEpICYmIHRl
eHR1cmUuZ2VuZXJhdGVNaXBNYXBzOworICAgICAgICAgICAgICAgIGVuZ2luZS5fdW5wYWNrRmxp
cFkoaW5mby5pc0NvbXByZXNzZWQpOworICAgICAgICAgICAgICAgIF9NaXNjX2Rkc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJERFNUb29scyJdLlVwbG9hZEREU0xldmVscyhlbmdpbmUs
IHRleHR1cmUsIGRhdGFfMSwgaW5mbywgbG9hZE1pcG1hcCwgNiwgLTEsIGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWluZm8uaXNGb3VyQ0MgJiYgaW5mby5taXBtYXBDb3VudCA9PT0gMSkg
eworICAgICAgICAgICAgICAgICAgICBlbmdpbmUuZ2VuZXJhdGVNaXBNYXBzRm9yQ3ViZW1hcCh0
ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgZGF0YSA9IGltZ3M7CisgICAgICAgICAgICBp
bmZvID0gX01pc2NfZGRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkREU1Rvb2xzIl0u
R2V0RERTSW5mbyhkYXRhKTsKKyAgICAgICAgICAgIHRleHR1cmUud2lkdGggPSBpbmZvLndpZHRo
OworICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBpbmZvLmhlaWdodDsKKyAgICAgICAgICAg
IGlmIChjcmVhdGVQb2x5bm9taWFscykgeworICAgICAgICAgICAgICAgIGluZm8uc3BoZXJpY2Fs
UG9seW5vbWlhbCA9IG5ldyBfTWF0aHNfc3BoZXJpY2FsUG9seW5vbWlhbF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJTcGhlcmljYWxQb2x5bm9taWFsIl0oKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGxvYWRNaXBtYXAgPSAoaW5mby5pc1JHQiB8fCBpbmZvLmlzTHVtaW5hbmNl
IHx8IGluZm8ubWlwbWFwQ291bnQgPiAxKSAmJiB0ZXh0dXJlLmdlbmVyYXRlTWlwTWFwczsKKyAg
ICAgICAgICAgIGVuZ2luZS5fdW5wYWNrRmxpcFkoaW5mby5pc0NvbXByZXNzZWQpOworICAgICAg
ICAgICAgX01pc2NfZGRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkREU1Rvb2xzIl0u
VXBsb2FkRERTTGV2ZWxzKGVuZ2luZSwgdGV4dHVyZSwgZGF0YSwgaW5mbywgbG9hZE1pcG1hcCwg
Nik7CisgICAgICAgICAgICBpZiAoIWluZm8uaXNGb3VyQ0MgJiYgaW5mby5taXBtYXBDb3VudCA9
PT0gMSkgeworICAgICAgICAgICAgICAgIGVuZ2luZS5nZW5lcmF0ZU1pcE1hcHNGb3JDdWJlbWFw
KHRleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVuZ2luZS5fc2V0
Q3ViZU1hcFRleHR1cmVQYXJhbXMobG9hZE1pcG1hcCk7CisgICAgICAgIHRleHR1cmUuaXNSZWFk
eSA9IHRydWU7CisgICAgICAgIGlmIChvbkxvYWQpIHsKKyAgICAgICAgICAgIG9uTG9hZCh7IGlz
RERTOiB0cnVlLCB3aWR0aDogdGV4dHVyZS53aWR0aCwgaW5mbzogaW5mbywgZGF0YTogaW1ncywg
dGV4dHVyZTogdGV4dHVyZSB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
VXBsb2FkcyB0aGUgMkQgdGV4dHVyZSBkYXRhIHRvIHRoZSBXZWJHbCBUZXh0dXJlLiBJdCBoYXMg
YWxyZWRheSBiZWVuIGJvdW5kIG9uY2UgaW4gdGhlIGNhbGxiYWNrLgorICAgICAqIEBwYXJhbSBk
YXRhIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBkZWZp
bmVzIHRoZSBCYWJ5bG9uSlMgaW50ZXJuYWwgdGV4dHVyZQorICAgICAqIEBwYXJhbSBjYWxsYmFj
ayBkZWZpbmVzIHRoZSBtZXRob2QgdG8gY2FsbCBvbmNlIHJlYWR5IHRvIHVwbG9hZAorICAgICAq
LworICAgIF9ERFNUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS5sb2FkRGF0YSA9IGZ1bmN0aW9uIChk
YXRhLCB0ZXh0dXJlLCBjYWxsYmFjaykgeworICAgICAgICB2YXIgaW5mbyA9IF9NaXNjX2Rkc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJERFNUb29scyJdLkdldEREU0luZm8oZGF0YSk7
CisgICAgICAgIHZhciBsb2FkTWlwbWFwID0gKGluZm8uaXNSR0IgfHwgaW5mby5pc0x1bWluYW5j
ZSB8fCBpbmZvLm1pcG1hcENvdW50ID4gMSkgJiYgdGV4dHVyZS5nZW5lcmF0ZU1pcE1hcHMgJiYg
KChpbmZvLndpZHRoID4+IChpbmZvLm1pcG1hcENvdW50IC0gMSkpID09PSAxKTsKKyAgICAgICAg
Y2FsbGJhY2soaW5mby53aWR0aCwgaW5mby5oZWlnaHQsIGxvYWRNaXBtYXAsIGluZm8uaXNGb3Vy
Q0MsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF9NaXNjX2Rkc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJERFNUb29scyJdLlVwbG9hZEREU0xldmVscyh0ZXh0dXJlLmdldEVuZ2lu
ZSgpLCB0ZXh0dXJlLCBkYXRhLCBpbmZvLCBsb2FkTWlwbWFwLCAxKTsKKyAgICAgICAgfSk7Cisg
ICAgfTsKKyAgICByZXR1cm4gX0REU1RleHR1cmVMb2FkZXI7Cit9KCkpOworCisvLyBSZWdpc3Rl
ciB0aGUgbG9hZGVyLgorX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkVuZ2luZSJdLl9UZXh0dXJlTG9hZGVycy5wdXNoKG5ldyBfRERTVGV4dHVyZUxvYWRlcigp
KTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL0xvYWRlcnMv
ZW52VGV4dHVyZUxvYWRlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL1RleHR1cmVz
L0xvYWRlcnMvZW52VGV4dHVyZUxvYWRlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBfRU5WVGV4dHVyZUxvYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJfRU5WVGV4dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0VOVlRleHR1cmVM
b2FkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2Vudmlyb25tZW50VGV4
dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi8uLi9NaXNjL2Vudmlyb25tZW50VGV4dHVyZVRvb2xzICovICIuL01pc2Mv
ZW52aXJvbm1lbnRUZXh0dXJlVG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uLy4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5l
LnRzIik7CisKKworLyoqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRU5WIFRleHR1cmUgTG9h
ZGVyLgorICogQGhpZGRlbgorICovCit2YXIgX0VOVlRleHR1cmVMb2FkZXIgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gX0VOVlRleHR1cmVMb2FkZXIoKSB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHdldGhlciB0aGUgbG9hZGVyIHN1cHBvcnRz
IGNhc2NhZGUgbG9hZGluZyB0aGUgZGlmZmVyZW50IGZhY2VzLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5zdXBwb3J0Q2FzY2FkZXMgPSBmYWxzZTsKKyAgICB9CisgICAgLyoqCisgICAgICog
VGhpcyByZXR1cm5zIGlmIHRoZSBsb2FkZXIgc3VwcG9ydCB0aGUgY3VycmVudCBmaWxlIGluZm9y
bWF0aW9uLgorICAgICAqIEBwYXJhbSBleHRlbnNpb24gZGVmaW5lcyB0aGUgZmlsZSBleHRlbnNp
b24gb2YgdGhlIGZpbGUgYmVpbmcgbG9hZGVkCisgICAgICogQHBhcmFtIHRleHR1cmVGb3JtYXRJ
blVzZSBkZWZpbmVzIHRoZSBjdXJyZW50IGNvbXByZXNzZWQgZm9ybWF0IGluIHVzZSBpdW4gdGhl
IGVuZ2luZQorICAgICAqIEBwYXJhbSBmYWxsYmFjayBkZWZpbmVzIHRoZSBmYWxsYmFjayBpbnRl
cm5hbCB0ZXh0dXJlIGlmIGFueQorICAgICAqIEBwYXJhbSBpc0Jhc2U2NCBkZWZpbmVzIHdoZXRo
ZXIgdGhlIHRleHR1cmUgaXMgZW5jb2RlZCBhcyBhIGJhc2U2NAorICAgICAqIEBwYXJhbSBpc0J1
ZmZlciBkZWZpbmVzIHdoZXRoZXIgdGhlIHRleHR1cmUgZGF0YSBhcmUgc3RvcmVkIGFzIGEgYnVm
ZmVyCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgbG9hZGVyIGNhbiBsb2FkIHRoZSBzcGVj
aWZpZWQgZmlsZQorICAgICAqLworICAgIF9FTlZUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS5jYW5M
b2FkID0gZnVuY3Rpb24gKGV4dGVuc2lvbiwgdGV4dHVyZUZvcm1hdEluVXNlLCBmYWxsYmFjaywg
aXNCYXNlNjQsIGlzQnVmZmVyKSB7CisgICAgICAgIHJldHVybiBleHRlbnNpb24uaW5kZXhPZigi
LmVudiIpID09PSAwOworICAgIH07CisgICAgLyoqCisgICAgICogVHJhbnNmb3JtIHRoZSB1cmwg
YmVmb3JlIGxvYWRpbmcgaWYgcmVxdWlyZWQuCisgICAgICogQHBhcmFtIHJvb3RVcmwgdGhlIHVy
bCBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSB0ZXh0dXJlRm9ybWF0SW5Vc2UgZGVmaW5l
cyB0aGUgY3VycmVudCBjb21wcmVzc2VkIGZvcm1hdCBpbiB1c2UgaXVuIHRoZSBlbmdpbmUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgdHJhbnNmb3JtZWQgdGV4dHVyZQorICAgICAqLworICAgIF9FTlZU
ZXh0dXJlTG9hZGVyLnByb3RvdHlwZS50cmFuc2Zvcm1VcmwgPSBmdW5jdGlvbiAocm9vdFVybCwg
dGV4dHVyZUZvcm1hdEluVXNlKSB7CisgICAgICAgIHJldHVybiByb290VXJsOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgZmFsbGJhY2sgdXJsIGluIGNhc2UgdGhlIGxvYWQgZmFp
bC4gVGhpcyBjYW4gcmV0dXJuIG51bGwgdG8gYWxsb3cgdGhlIGRlZmF1bHQgZmFsbGJhY2sgbWVj
YW5pc20gdG8gd29yaworICAgICAqIEBwYXJhbSByb290VXJsIHRoZSB1cmwgb2YgdGhlIHRleHR1
cmUKKyAgICAgKiBAcGFyYW0gdGV4dHVyZUZvcm1hdEluVXNlIGRlZmluZXMgdGhlIGN1cnJlbnQg
Y29tcHJlc3NlZCBmb3JtYXQgaW4gdXNlIGl1biB0aGUgZW5naW5lCisgICAgICogQHJldHVybnMg
dGhlIGZhbGxiYWNrIHRleHR1cmUKKyAgICAgKi8KKyAgICBfRU5WVGV4dHVyZUxvYWRlci5wcm90
b3R5cGUuZ2V0RmFsbGJhY2tUZXh0dXJlVXJsID0gZnVuY3Rpb24gKHJvb3RVcmwsIHRleHR1cmVG
b3JtYXRJblVzZSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFVwbG9hZHMgdGhlIGN1YmUgdGV4dHVyZSBkYXRhIHRvIHRoZSBXZWJHbCBUZXh0dXJlLiBJ
dCBoYXMgYWxyZWRheSBiZWVuIGJvdW5kLgorICAgICAqIEBwYXJhbSBkYXRhIGNvbnRhaW5zIHRo
ZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBkZWZpbmVzIHRoZSBCYWJ5bG9u
SlMgaW50ZXJuYWwgdGV4dHVyZQorICAgICAqIEBwYXJhbSBjcmVhdGVQb2x5bm9taWFscyB3aWxs
IGJlIHRydWUgaWYgcG9seW5vbWlhbHMgaGF2ZSBiZWVuIHJlcXVlc3RlZAorICAgICAqIEBwYXJh
bSBvbkxvYWQgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJpZ2dlciBvbmNlIHRoZSB0ZXh0dXJl
IGlzIHJlYWR5CisgICAgICogQHBhcmFtIG9uRXJyb3IgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8g
dHJpZ2dlciBpbiBjYXNlIG9mIGVycm9yCisgICAgICovCisgICAgX0VOVlRleHR1cmVMb2FkZXIu
cHJvdG90eXBlLmxvYWRDdWJlRGF0YSA9IGZ1bmN0aW9uIChkYXRhLCB0ZXh0dXJlLCBjcmVhdGVQ
b2x5bm9taWFscywgb25Mb2FkLCBvbkVycm9yKSB7CisgICAgICAgIGlmIChBcnJheS5pc0FycmF5
KGRhdGEpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGF0YSA9
IGRhdGE7CisgICAgICAgIHZhciBpbmZvID0gX01pc2NfZW52aXJvbm1lbnRUZXh0dXJlVG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMiXS5H
ZXRFbnZJbmZvKGRhdGEpOworICAgICAgICBpZiAoaW5mbykgeworICAgICAgICAgICAgdGV4dHVy
ZS53aWR0aCA9IGluZm8ud2lkdGg7CisgICAgICAgICAgICB0ZXh0dXJlLmhlaWdodCA9IGluZm8u
d2lkdGg7CisgICAgICAgICAgICBfTWlzY19lbnZpcm9ubWVudFRleHR1cmVUb29sc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbnZpcm9ubWVudFRleHR1cmVUb29scyJdLlVwbG9hZEVu
dlNwaGVyaWNhbCh0ZXh0dXJlLCBpbmZvKTsKKyAgICAgICAgICAgIF9NaXNjX2Vudmlyb25tZW50
VGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVudmlyb25tZW50VGV4
dHVyZVRvb2xzIl0uVXBsb2FkRW52TGV2ZWxzQXN5bmModGV4dHVyZSwgZGF0YSwgaW5mbykudGhl
bihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBpZiAob25Mb2FkKSB7CisgICAgICAgICAgICAgICAgICAgIG9uTG9h
ZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKG9uRXJyb3IpIHsKKyAgICAgICAgICAgIG9uRXJyb3IoIkNhbiBub3QgcGFy
c2UgdGhlIGVudmlyb25tZW50IGZpbGUiLCBudWxsKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqCisgICAgICogVXBsb2FkcyB0aGUgMkQgdGV4dHVyZSBkYXRhIHRvIHRoZSBXZWJHbCBUZXh0
dXJlLiBJdCBoYXMgYWxyZWRheSBiZWVuIGJvdW5kIG9uY2UgaW4gdGhlIGNhbGxiYWNrLgorICAg
ICAqIEBwYXJhbSBkYXRhIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFyYW0g
dGV4dHVyZSBkZWZpbmVzIHRoZSBCYWJ5bG9uSlMgaW50ZXJuYWwgdGV4dHVyZQorICAgICAqIEBw
YXJhbSBjYWxsYmFjayBkZWZpbmVzIHRoZSBtZXRob2QgdG8gY2FsbCBvbmNlIHJlYWR5IHRvIHVw
bG9hZAorICAgICAqLworICAgIF9FTlZUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS5sb2FkRGF0YSA9
IGZ1bmN0aW9uIChkYXRhLCB0ZXh0dXJlLCBjYWxsYmFjaykgeworICAgICAgICB0aHJvdyAiLmVu
diBub3Qgc3VwcG9ydGVkIGluIDJkLiI7CisgICAgfTsKKyAgICByZXR1cm4gX0VOVlRleHR1cmVM
b2FkZXI7Cit9KCkpOworCisvLyBSZWdpc3RlciB0aGUgbG9hZGVyLgorX0VuZ2luZXNfZW5naW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVuZ2luZSJdLl9UZXh0dXJlTG9hZGVycy5w
dXNoKG5ldyBfRU5WVGV4dHVyZUxvYWRlcigpKTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWF0ZXJpYWxzL1RleHR1cmVzL0xvYWRlcnMvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvVGV4
dHVyZXMvTG9hZGVycy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogX0REU1RleHR1cmVM
b2FkZXIsIF9FTlZUZXh0dXJlTG9hZGVyLCBfS1RYVGV4dHVyZUxvYWRlciwgX1RHQVRleHR1cmVM
b2FkZXIsIF9CYXNpc1RleHR1cmVMb2FkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9kZHNUZXh0dXJlTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Rkc1RleHR1cmVMb2FkZXIgKi8gIi4v
TWF0ZXJpYWxzL1RleHR1cmVzL0xvYWRlcnMvZGRzVGV4dHVyZUxvYWRlci50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJfRERTVGV4dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Rkc1Rl
eHR1cmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX0REU1RleHR1cmVMb2Fk
ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZW52VGV4dHVyZUxvYWRlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9l
bnZUZXh0dXJlTG9hZGVyICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9Mb2FkZXJzL2VudlRleHR1
cmVMb2FkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0VOVlRleHR1cmVMb2FkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9lbnZUZXh0dXJlTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIl9FTlZUZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2t0eFRleHR1cmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4va3R4VGV4dHVyZUxvYWRlciAqLyAiLi9NYXRlcmlhbHMvVGV4
dHVyZXMvTG9hZGVycy9rdHhUZXh0dXJlTG9hZGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9L
VFhUZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfa3R4VGV4dHVyZUxvYWRlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfS1RYVGV4dHVyZUxvYWRlciJdOyB9KTsKKwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90Z2FUZXh0dXJlTG9hZGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RnYVRleHR1cmVMb2Fk
ZXIgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL0xvYWRlcnMvdGdhVGV4dHVyZUxvYWRlci50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJfVEdBVGV4dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX3RnYVRleHR1cmVMb2FkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siX1RHQVRl
eHR1cmVMb2FkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzaXNUZXh0
dXJlTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2Jhc2lzVGV4dHVyZUxvYWRlciAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvTG9h
ZGVycy9iYXNpc1RleHR1cmVMb2FkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0Jhc2lzVGV4
dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Jhc2lzVGV4dHVyZUxvYWRlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJfQmFzaXNUZXh0dXJlTG9hZGVyIl07IH0pOworCisK
KworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvTG9h
ZGVycy9rdHhUZXh0dXJlTG9hZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvVGV4
dHVyZXMvTG9hZGVycy9rdHhUZXh0dXJlTG9hZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IF9LVFhUZXh0dXJlTG9hZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIl9LVFhUZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfS1RYVGV4
dHVyZUxvYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfa2hyb25vc1Rl
eHR1cmVDb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2Mva2hyb25vc1RleHR1cmVDb250YWluZXIgKi8gIi4v
TWlzYy9raHJvbm9zVGV4dHVyZUNvbnRhaW5lci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vRW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9l
bmdpbmUudHMiKTsKKworCisvKioKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBLVFggVGV4dHVy
ZSBMb2FkZXIuCisgKiBAaGlkZGVuCisgKi8KK3ZhciBfS1RYVGV4dHVyZUxvYWRlciA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBfS1RYVGV4dHVyZUxvYWRlcigp
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgd2V0aGVyIHRoZSBsb2FkZXIgc3Vw
cG9ydHMgY2FzY2FkZSBsb2FkaW5nIHRoZSBkaWZmZXJlbnQgZmFjZXMuCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLnN1cHBvcnRDYXNjYWRlcyA9IGZhbHNlOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBUaGlzIHJldHVybnMgaWYgdGhlIGxvYWRlciBzdXBwb3J0IHRoZSBjdXJyZW50IGZpbGUg
aW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtIGV4dGVuc2lvbiBkZWZpbmVzIHRoZSBmaWxlIGV4
dGVuc2lvbiBvZiB0aGUgZmlsZSBiZWluZyBsb2FkZWQKKyAgICAgKiBAcGFyYW0gdGV4dHVyZUZv
cm1hdEluVXNlIGRlZmluZXMgdGhlIGN1cnJlbnQgY29tcHJlc3NlZCBmb3JtYXQgaW4gdXNlIGl1
biB0aGUgZW5naW5lCisgICAgICogQHBhcmFtIGZhbGxiYWNrIGRlZmluZXMgdGhlIGZhbGxiYWNr
IGludGVybmFsIHRleHR1cmUgaWYgYW55CisgICAgICogQHBhcmFtIGlzQmFzZTY0IGRlZmluZXMg
d2hldGhlciB0aGUgdGV4dHVyZSBpcyBlbmNvZGVkIGFzIGEgYmFzZTY0CisgICAgICogQHBhcmFt
IGlzQnVmZmVyIGRlZmluZXMgd2hldGhlciB0aGUgdGV4dHVyZSBkYXRhIGFyZSBzdG9yZWQgYXMg
YSBidWZmZXIKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBsb2FkZXIgY2FuIGxvYWQgdGhl
IHNwZWNpZmllZCBmaWxlCisgICAgICovCisgICAgX0tUWFRleHR1cmVMb2FkZXIucHJvdG90eXBl
LmNhbkxvYWQgPSBmdW5jdGlvbiAoZXh0ZW5zaW9uLCB0ZXh0dXJlRm9ybWF0SW5Vc2UsIGZhbGxi
YWNrLCBpc0Jhc2U2NCwgaXNCdWZmZXIpIHsKKyAgICAgICAgaWYgKHRleHR1cmVGb3JtYXRJblVz
ZSAmJiAhaXNCYXNlNjQgJiYgIWZhbGxiYWNrICYmICFpc0J1ZmZlcikgeworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07Cisg
ICAgLyoqCisgICAgICogVHJhbnNmb3JtIHRoZSB1cmwgYmVmb3JlIGxvYWRpbmcgaWYgcmVxdWly
ZWQuCisgICAgICogQHBhcmFtIHJvb3RVcmwgdGhlIHVybCBvZiB0aGUgdGV4dHVyZQorICAgICAq
IEBwYXJhbSB0ZXh0dXJlRm9ybWF0SW5Vc2UgZGVmaW5lcyB0aGUgY3VycmVudCBjb21wcmVzc2Vk
IGZvcm1hdCBpbiB1c2UgaXVuIHRoZSBlbmdpbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgdHJhbnNm
b3JtZWQgdGV4dHVyZQorICAgICAqLworICAgIF9LVFhUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS50
cmFuc2Zvcm1VcmwgPSBmdW5jdGlvbiAocm9vdFVybCwgdGV4dHVyZUZvcm1hdEluVXNlKSB7Cisg
ICAgICAgIHZhciBsYXN0RG90ID0gcm9vdFVybC5sYXN0SW5kZXhPZignLicpOworICAgICAgICBp
ZiAobGFzdERvdCAhPSAtMSAmJiByb290VXJsLnN1YnN0cmluZyhsYXN0RG90ICsgMSkgPT0gImt0
eCIpIHsKKyAgICAgICAgICAgIC8vIEFscmVhZHkgdHJhbnNmb3JtZWQKKyAgICAgICAgICAgIHJl
dHVybiByb290VXJsOworICAgICAgICB9CisgICAgICAgIHJldHVybiAobGFzdERvdCA+IC0xID8g
cm9vdFVybC5zdWJzdHJpbmcoMCwgbGFzdERvdCkgOiByb290VXJsKSArIHRleHR1cmVGb3JtYXRJ
blVzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGZhbGxiYWNrIHVybCBpbiBj
YXNlIHRoZSBsb2FkIGZhaWwuIFRoaXMgY2FuIHJldHVybiBudWxsIHRvIGFsbG93IHRoZSBkZWZh
dWx0IGZhbGxiYWNrIG1lY2FuaXNtIHRvIHdvcmsKKyAgICAgKiBAcGFyYW0gcm9vdFVybCB0aGUg
dXJsIG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIHRleHR1cmVGb3JtYXRJblVzZSBkZWZp
bmVzIHRoZSBjdXJyZW50IGNvbXByZXNzZWQgZm9ybWF0IGluIHVzZSBpdW4gdGhlIGVuZ2luZQor
ICAgICAqIEByZXR1cm5zIHRoZSBmYWxsYmFjayB0ZXh0dXJlCisgICAgICovCisgICAgX0tUWFRl
eHR1cmVMb2FkZXIucHJvdG90eXBlLmdldEZhbGxiYWNrVGV4dHVyZVVybCA9IGZ1bmN0aW9uIChy
b290VXJsLCB0ZXh0dXJlRm9ybWF0SW5Vc2UpIHsKKyAgICAgICAgLy8gcmVtb3ZlIHRoZSBmb3Jt
YXQgYXBwZW5kZWQgdG8gdGhlIHJvb3RVcmwgaW4gdGhlIG9yaWdpbmFsIGNyZWF0ZUN1YmVUZXh0
dXJlIGNhbGwuCisgICAgICAgIHZhciBleHAgPSBuZXcgUmVnRXhwKCIiICsgdGV4dHVyZUZvcm1h
dEluVXNlICsgIiQiKTsKKyAgICAgICAgcmV0dXJuIHJvb3RVcmwucmVwbGFjZShleHAsICIiKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFVwbG9hZHMgdGhlIGN1YmUgdGV4dHVyZSBkYXRhIHRv
IHRoZSBXZWJHbCBUZXh0dXJlLiBJdCBoYXMgYWxyZWRheSBiZWVuIGJvdW5kLgorICAgICAqIEBw
YXJhbSBkYXRhIGNvbnRhaW5zIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFyYW0gdGV4dHVy
ZSBkZWZpbmVzIHRoZSBCYWJ5bG9uSlMgaW50ZXJuYWwgdGV4dHVyZQorICAgICAqIEBwYXJhbSBj
cmVhdGVQb2x5bm9taWFscyB3aWxsIGJlIHRydWUgaWYgcG9seW5vbWlhbHMgaGF2ZSBiZWVuIHJl
cXVlc3RlZAorICAgICAqIEBwYXJhbSBvbkxvYWQgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJp
Z2dlciBvbmNlIHRoZSB0ZXh0dXJlIGlzIHJlYWR5CisgICAgICogQHBhcmFtIG9uRXJyb3IgZGVm
aW5lcyB0aGUgY2FsbGJhY2sgdG8gdHJpZ2dlciBpbiBjYXNlIG9mIGVycm9yCisgICAgICovCisg
ICAgX0tUWFRleHR1cmVMb2FkZXIucHJvdG90eXBlLmxvYWRDdWJlRGF0YSA9IGZ1bmN0aW9uIChk
YXRhLCB0ZXh0dXJlLCBjcmVhdGVQb2x5bm9taWFscywgb25Mb2FkLCBvbkVycm9yKSB7CisgICAg
ICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgLy8gTmVlZCB0byBpbnZlcnQgdlNjYWxlIGFzIGludmVydFkgdmlhIFVO
UEFDS19GTElQX1lfV0VCR0wgaXMgbm90IHN1cHBvcnRlZCBieSBjb21wcmVzc2VkIHRleHR1cmUK
KyAgICAgICAgdGV4dHVyZS5faW52ZXJ0VlNjYWxlID0gIXRleHR1cmUuaW52ZXJ0WTsKKyAgICAg
ICAgdmFyIGVuZ2luZSA9IHRleHR1cmUuZ2V0RW5naW5lKCk7CisgICAgICAgIHZhciBrdHggPSBu
ZXcgX01pc2Nfa2hyb25vc1RleHR1cmVDb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siS2hyb25vc1RleHR1cmVDb250YWluZXIiXShkYXRhLCA2KTsKKyAgICAgICAgdmFyIGxv
YWRNaXBtYXAgPSBrdHgubnVtYmVyT2ZNaXBtYXBMZXZlbHMgPiAxICYmIHRleHR1cmUuZ2VuZXJh
dGVNaXBNYXBzOworICAgICAgICBlbmdpbmUuX3VucGFja0ZsaXBZKHRydWUpOworICAgICAgICBr
dHgudXBsb2FkTGV2ZWxzKHRleHR1cmUsIHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzKTsKKyAgICAg
ICAgdGV4dHVyZS53aWR0aCA9IGt0eC5waXhlbFdpZHRoOworICAgICAgICB0ZXh0dXJlLmhlaWdo
dCA9IGt0eC5waXhlbEhlaWdodDsKKyAgICAgICAgZW5naW5lLl9zZXRDdWJlTWFwVGV4dHVyZVBh
cmFtcyhsb2FkTWlwbWFwKTsKKyAgICAgICAgdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFVwbG9hZHMgdGhlIDJEIHRleHR1cmUgZGF0YSB0byB0aGUgV2Vi
R2wgVGV4dHVyZS4gSXQgaGFzIGFscmVkYXkgYmVlbiBib3VuZCBvbmNlIGluIHRoZSBjYWxsYmFj
ay4KKyAgICAgKiBAcGFyYW0gZGF0YSBjb250YWlucyB0aGUgdGV4dHVyZSBkYXRhCisgICAgICog
QHBhcmFtIHRleHR1cmUgZGVmaW5lcyB0aGUgQmFieWxvbkpTIGludGVybmFsIHRleHR1cmUKKyAg
ICAgKiBAcGFyYW0gY2FsbGJhY2sgZGVmaW5lcyB0aGUgbWV0aG9kIHRvIGNhbGwgb25jZSByZWFk
eSB0byB1cGxvYWQKKyAgICAgKi8KKyAgICBfS1RYVGV4dHVyZUxvYWRlci5wcm90b3R5cGUubG9h
ZERhdGEgPSBmdW5jdGlvbiAoZGF0YSwgdGV4dHVyZSwgY2FsbGJhY2spIHsKKyAgICAgICAgLy8g
TmVlZCB0byBpbnZlcnQgdlNjYWxlIGFzIGludmVydFkgdmlhIFVOUEFDS19GTElQX1lfV0VCR0wg
aXMgbm90IHN1cHBvcnRlZCBieSBjb21wcmVzc2VkIHRleHR1cmUKKyAgICAgICAgdGV4dHVyZS5f
aW52ZXJ0VlNjYWxlID0gIXRleHR1cmUuaW52ZXJ0WTsKKyAgICAgICAgdmFyIGt0eCA9IG5ldyBf
TWlzY19raHJvbm9zVGV4dHVyZUNvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJLaHJvbm9zVGV4dHVyZUNvbnRhaW5lciJdKGRhdGEsIDEpOworICAgICAgICBjYWxsYmFjayhr
dHgucGl4ZWxXaWR0aCwga3R4LnBpeGVsSGVpZ2h0LCBmYWxzZSwgdHJ1ZSwgZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAga3R4LnVwbG9hZExldmVscyh0ZXh0dXJlLCB0ZXh0dXJlLmdlbmVyYXRl
TWlwTWFwcyk7CisgICAgICAgIH0sIGt0eC5pc0ludmFsaWQpOworICAgIH07CisgICAgcmV0dXJu
IF9LVFhUZXh0dXJlTG9hZGVyOworfSgpKTsKKworLy8gUmVnaXN0ZXIgdGhlIGxvYWRlci4KK19F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmUiXS5fVGV4
dHVyZUxvYWRlcnMudW5zaGlmdChuZXcgX0tUWFRleHR1cmVMb2FkZXIoKSk7CisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0dXJlcy9Mb2FkZXJzL3RnYVRleHR1cmVMb2Fk
ZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy9Mb2FkZXJzL3RnYVRl
eHR1cmVMb2FkZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogX1RHQVRleHR1
cmVMb2FkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX1RHQVRleHR1
cmVMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UR0FUZXh0dXJlTG9hZGVyOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190Z2FfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdGdhICovICIuL01p
c2MvdGdhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li8uLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworCisKKy8qKgor
ICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFRHQSBUZXh0dXJlIExvYWRlci4KKyAqIEBoaWRkZW4K
KyAqLwordmFyIF9UR0FUZXh0dXJlTG9hZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIGZ1bmN0aW9uIF9UR0FUZXh0dXJlTG9hZGVyKCkgeworICAgICAgICAvKioKKyAgICAg
ICAgICogRGVmaW5lcyB3ZXRoZXIgdGhlIGxvYWRlciBzdXBwb3J0cyBjYXNjYWRlIGxvYWRpbmcg
dGhlIGRpZmZlcmVudCBmYWNlcy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc3VwcG9ydENh
c2NhZGVzID0gZmFsc2U7CisgICAgfQorICAgIC8qKgorICAgICAqIFRoaXMgcmV0dXJucyBpZiB0
aGUgbG9hZGVyIHN1cHBvcnQgdGhlIGN1cnJlbnQgZmlsZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBA
cGFyYW0gZXh0ZW5zaW9uIGRlZmluZXMgdGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlIGJl
aW5nIGxvYWRlZAorICAgICAqIEBwYXJhbSB0ZXh0dXJlRm9ybWF0SW5Vc2UgZGVmaW5lcyB0aGUg
Y3VycmVudCBjb21wcmVzc2VkIGZvcm1hdCBpbiB1c2UgaXVuIHRoZSBlbmdpbmUKKyAgICAgKiBA
cGFyYW0gZmFsbGJhY2sgZGVmaW5lcyB0aGUgZmFsbGJhY2sgaW50ZXJuYWwgdGV4dHVyZSBpZiBh
bnkKKyAgICAgKiBAcGFyYW0gaXNCYXNlNjQgZGVmaW5lcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIGlz
IGVuY29kZWQgYXMgYSBiYXNlNjQKKyAgICAgKiBAcGFyYW0gaXNCdWZmZXIgZGVmaW5lcyB3aGV0
aGVyIHRoZSB0ZXh0dXJlIGRhdGEgYXJlIHN0b3JlZCBhcyBhIGJ1ZmZlcgorICAgICAqIEByZXR1
cm5zIHRydWUgaWYgdGhlIGxvYWRlciBjYW4gbG9hZCB0aGUgc3BlY2lmaWVkIGZpbGUKKyAgICAg
Ki8KKyAgICBfVEdBVGV4dHVyZUxvYWRlci5wcm90b3R5cGUuY2FuTG9hZCA9IGZ1bmN0aW9uIChl
eHRlbnNpb24sIHRleHR1cmVGb3JtYXRJblVzZSwgZmFsbGJhY2ssIGlzQmFzZTY0LCBpc0J1ZmZl
cikgeworICAgICAgICByZXR1cm4gZXh0ZW5zaW9uLmluZGV4T2YoIi50Z2EiKSA9PT0gMDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFRyYW5zZm9ybSB0aGUgdXJsIGJlZm9yZSBsb2FkaW5nIGlm
IHJlcXVpcmVkLgorICAgICAqIEBwYXJhbSByb290VXJsIHRoZSB1cmwgb2YgdGhlIHRleHR1cmUK
KyAgICAgKiBAcGFyYW0gdGV4dHVyZUZvcm1hdEluVXNlIGRlZmluZXMgdGhlIGN1cnJlbnQgY29t
cHJlc3NlZCBmb3JtYXQgaW4gdXNlIGl1biB0aGUgZW5naW5lCisgICAgICogQHJldHVybnMgdGhl
IHRyYW5zZm9ybWVkIHRleHR1cmUKKyAgICAgKi8KKyAgICBfVEdBVGV4dHVyZUxvYWRlci5wcm90
b3R5cGUudHJhbnNmb3JtVXJsID0gZnVuY3Rpb24gKHJvb3RVcmwsIHRleHR1cmVGb3JtYXRJblVz
ZSkgeworICAgICAgICByZXR1cm4gcm9vdFVybDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdl
dHMgdGhlIGZhbGxiYWNrIHVybCBpbiBjYXNlIHRoZSBsb2FkIGZhaWwuIFRoaXMgY2FuIHJldHVy
biBudWxsIHRvIGFsbG93IHRoZSBkZWZhdWx0IGZhbGxiYWNrIG1lY2FuaXNtIHRvIHdvcmsKKyAg
ICAgKiBAcGFyYW0gcm9vdFVybCB0aGUgdXJsIG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFt
IHRleHR1cmVGb3JtYXRJblVzZSBkZWZpbmVzIHRoZSBjdXJyZW50IGNvbXByZXNzZWQgZm9ybWF0
IGluIHVzZSBpdW4gdGhlIGVuZ2luZQorICAgICAqIEByZXR1cm5zIHRoZSBmYWxsYmFjayB0ZXh0
dXJlCisgICAgICovCisgICAgX1RHQVRleHR1cmVMb2FkZXIucHJvdG90eXBlLmdldEZhbGxiYWNr
VGV4dHVyZVVybCA9IGZ1bmN0aW9uIChyb290VXJsLCB0ZXh0dXJlRm9ybWF0SW5Vc2UpIHsKKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGxvYWRzIHRoZSBj
dWJlIHRleHR1cmUgZGF0YSB0byB0aGUgV2ViR2wgVGV4dHVyZS4gSXQgaGFzIGFscmVkYXkgYmVl
biBib3VuZC4KKyAgICAgKiBAcGFyYW0gZGF0YSBjb250YWlucyB0aGUgdGV4dHVyZSBkYXRhCisg
ICAgICogQHBhcmFtIHRleHR1cmUgZGVmaW5lcyB0aGUgQmFieWxvbkpTIGludGVybmFsIHRleHR1
cmUKKyAgICAgKiBAcGFyYW0gY3JlYXRlUG9seW5vbWlhbHMgd2lsbCBiZSB0cnVlIGlmIHBvbHlu
b21pYWxzIGhhdmUgYmVlbiByZXF1ZXN0ZWQKKyAgICAgKiBAcGFyYW0gb25Mb2FkIGRlZmluZXMg
dGhlIGNhbGxiYWNrIHRvIHRyaWdnZXIgb25jZSB0aGUgdGV4dHVyZSBpcyByZWFkeQorICAgICAq
IEBwYXJhbSBvbkVycm9yIGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIHRyaWdnZXIgaW4gY2FzZSBv
ZiBlcnJvcgorICAgICAqLworICAgIF9UR0FUZXh0dXJlTG9hZGVyLnByb3RvdHlwZS5sb2FkQ3Vi
ZURhdGEgPSBmdW5jdGlvbiAoZGF0YSwgdGV4dHVyZSwgY3JlYXRlUG9seW5vbWlhbHMsIG9uTG9h
ZCwgb25FcnJvcikgeworICAgICAgICB0aHJvdyAiLmVudiBub3Qgc3VwcG9ydGVkIGluIEN1YmUu
IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwbG9hZHMgdGhlIDJEIHRleHR1cmUgZGF0YSB0
byB0aGUgV2ViR2wgVGV4dHVyZS4gSXQgaGFzIGFscmVkYXkgYmVlbiBib3VuZCBvbmNlIGluIHRo
ZSBjYWxsYmFjay4KKyAgICAgKiBAcGFyYW0gZGF0YSBjb250YWlucyB0aGUgdGV4dHVyZSBkYXRh
CisgICAgICogQHBhcmFtIHRleHR1cmUgZGVmaW5lcyB0aGUgQmFieWxvbkpTIGludGVybmFsIHRl
eHR1cmUKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgZGVmaW5lcyB0aGUgbWV0aG9kIHRvIGNhbGwg
b25jZSByZWFkeSB0byB1cGxvYWQKKyAgICAgKi8KKyAgICBfVEdBVGV4dHVyZUxvYWRlci5wcm90
b3R5cGUubG9hZERhdGEgPSBmdW5jdGlvbiAoZGF0YSwgdGV4dHVyZSwgY2FsbGJhY2spIHsKKyAg
ICAgICAgdmFyIHVpbnREYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7CisgICAgICAgIHZhciBo
ZWFkZXIgPSBfTWlzY190Z2FfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVEdBVG9vbHMi
XS5HZXRUR0FIZWFkZXIodWludERhdGEpOworICAgICAgICBjYWxsYmFjayhoZWFkZXIud2lkdGgs
IGhlYWRlci5oZWlnaHQsIHRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzLCBmYWxzZSwgZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgX01pc2NfdGdhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlRHQVRvb2xzIl0uVXBsb2FkQ29udGVudCh0ZXh0dXJlLCB1aW50RGF0YSk7CisgICAgICAgIH0p
OworICAgIH07CisgICAgcmV0dXJuIF9UR0FUZXh0dXJlTG9hZGVyOworfSgpKTsKKworLy8gUmVn
aXN0ZXIgdGhlIGxvYWRlci4KK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJFbmdpbmUiXS5fVGV4dHVyZUxvYWRlcnMucHVzaChuZXcgX1RHQVRleHR1cmVMb2Fk
ZXIoKSk7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0dXJlcy9NdWx0
aXZpZXdSZW5kZXJUYXJnZXQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy9N
dWx0aXZpZXdSZW5kZXJUYXJnZXQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTXVs
dGl2aWV3UmVuZGVyVGFyZ2V0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
Ik11bHRpdmlld1JlbmRlclRhcmdldCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTXVsdGl2aWV3UmVu
ZGVyVGFyZ2V0OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4u
L25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vVGV4dHVyZXMvcmVuZGVyVGFyZ2V0
VGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1Rl
eHR1cmVzL2ludGVybmFsVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJuYWxU
ZXh0dXJlLnRzIik7CisKKworCisvKioKKyAqIFJlbmRlcnMgdG8gbXVsdGlwbGUgdmlld3Mgd2l0
aCBhIHNpbmdsZSBkcmF3IGNhbGwKKyAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVn
aXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9XRUJHTF9tdWx0aXZpZXcvCisgKi8KK3ZhciBNdWx0aXZp
ZXdSZW5kZXJUYXJnZXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTXVsdGl2aWV3
UmVuZGVyVGFyZ2V0LCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBtdWx0aXZp
ZXcgcmVuZGVyIHRhcmdldAorICAgICAqIEBwYXJhbSBzY2VuZSBzY2VuZSB1c2VkIHdpdGggdGhl
IHJlbmRlciB0YXJnZXQKKyAgICAgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgcmVuZGVy
IHRhcmdldCAodXNlZCBmb3IgZWFjaCB2aWV3KQorICAgICAqLworICAgIGZ1bmN0aW9uIE11bHRp
dmlld1JlbmRlclRhcmdldChzY2VuZSwgc2l6ZSkgeworICAgICAgICBpZiAoc2l6ZSA9PT0gdm9p
ZCAwKSB7IHNpemUgPSA1MTI7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgIm11bHRpdmlldyBydHQiLCBzaXplLCBzY2VuZSwgZmFsc2UsIHRydWUsIF9UZXh0dXJlc19p
bnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siSW50ZXJuYWxUZXh0
dXJlIl0uREFUQVNPVVJDRV9VTktOT1dOLCBmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZSwgZmFsc2Us
IHRydWUsIHVuZGVmaW5lZCwgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgdmFyIGludGVybmFsVGV4
dHVyZSA9IHNjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZU11bHRpdmlld1JlbmRlclRhcmdldFRleHR1
cmUoX3RoaXMuZ2V0UmVuZGVyV2lkdGgoKSwgX3RoaXMuZ2V0UmVuZGVySGVpZ2h0KCkpOworICAg
ICAgICBpbnRlcm5hbFRleHR1cmUuaXNNdWx0aXZpZXcgPSB0cnVlOworICAgICAgICBfdGhpcy5f
dGV4dHVyZSA9IGludGVybmFsVGV4dHVyZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0K
KyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICogQHBhcmFtIGZhY2VJbmRleCB0aGUgZmFj
ZSBpbmRleCwgaWYgaXRzIGEgY3ViZSB0ZXh0dXJlCisgICAgICovCisgICAgTXVsdGl2aWV3UmVu
ZGVyVGFyZ2V0LnByb3RvdHlwZS5fYmluZEZyYW1lQnVmZmVyID0gZnVuY3Rpb24gKGZhY2VJbmRl
eCkgeworICAgICAgICBpZiAoZmFjZUluZGV4ID09PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsg
fQorICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuYmluZE11bHRpdmll
d0ZyYW1lYnVmZmVyKHRoaXMuX3RleHR1cmUpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0
cyB0aGUgbnVtYmVyIG9mIHZpZXdzIHRoZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB0ZXh0dXJlIChl
Zy4gYSBNdWx0aXZpZXdSZW5kZXJUYXJnZXQgd2lsbCBoYXZlID4gMSkKKyAgICAgKiBAcmV0dXJu
cyB0aGUgdmlldyBjb3VudAorICAgICAqLworICAgIE11bHRpdmlld1JlbmRlclRhcmdldC5wcm90
b3R5cGUuZ2V0Vmlld0NvdW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gMjsKKyAg
ICB9OworICAgIHJldHVybiBNdWx0aXZpZXdSZW5kZXJUYXJnZXQ7Cit9KF9UZXh0dXJlc19yZW5k
ZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlJlbmRlclRhcmdl
dFRleHR1cmUiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0
dXJlcy9Qcm9jZWR1cmFscy9jdXN0b21Qcm9jZWR1cmFsVGV4dHVyZS50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvVGV4dHVyZXMvUHJvY2VkdXJhbHMvY3VzdG9tUHJv
Y2VkdXJhbFRleHR1cmUudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
Q3VzdG9tUHJvY2VkdXJhbFRleHR1cmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy9sb2dnZXIgKi8gIi4v
TWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01h
dGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWF0ZXJpYWxz
L1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJvY2VkdXJhbFRleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcHJvY2VkdXJhbFRl
eHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL1Byb2NlZHVyYWxzL3Byb2NlZHVyYWxUZXh0
dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfd2ViUmVxdWVzdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
Li4vTWlzYy93ZWJSZXF1ZXN0ICovICIuL01pc2Mvd2ViUmVxdWVzdC50cyIpOworCisKKworCisK
KworCisvKioKKyAqIFByb2NlZHVyYWwgdGV4dHVyaW5nIGlzIGEgd2F5IHRvIHByb2dyYW1tYXRp
Y2FsbHkgY3JlYXRlIGEgdGV4dHVyZS4gVGhlcmUgYXJlIDIgdHlwZXMgb2YgcHJvY2VkdXJhbCB0
ZXh0dXJlczogY29kZS1vbmx5LCBhbmQgY29kZSB0aGF0IHJlZmVyZW5jZXMgc29tZSBjbGFzc2lj
IDJEIGltYWdlcywgc29tZXRpbWVzIGNhbGxlZCAncmVmTWFwcycgb3IgJ3NhbXBsZXInIGltYWdl
cy4KKyAqIEN1c3RvbSBQcm9jZWR1cmFsIHRleHR1cmVzIGFyZSB0aGUgZWFzaWVzdCB3YXkgdG8g
Y3JlYXRlIHlvdXIgb3duIHByb2NlZHVyYWwgaW4geW91ciBhcHBsaWNhdGlvbi4KKyAqIEBzZWUg
aHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3Byb2NlZHVyYWxfdGV4
dHVyZXMjY3JlYXRpbmctY3VzdG9tLXByb2NlZHVyYWwtdGV4dHVyZXMKKyAqLwordmFyIEN1c3Rv
bVByb2NlZHVyYWxUZXh0dXJlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgewor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEN1c3Rv
bVByb2NlZHVyYWxUZXh0dXJlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRl
cyBhIG5ldyBDdXN0b20gUHJvY2VkdXJhbCBUZXh0dXJlLgorICAgICAqIFByb2NlZHVyYWwgdGV4
dHVyaW5nIGlzIGEgd2F5IHRvIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRlIGEgdGV4dHVyZS4gVGhl
cmUgYXJlIDIgdHlwZXMgb2YgcHJvY2VkdXJhbCB0ZXh0dXJlczogY29kZS1vbmx5LCBhbmQgY29k
ZSB0aGF0IHJlZmVyZW5jZXMgc29tZSBjbGFzc2ljIDJEIGltYWdlcywgc29tZXRpbWVzIGNhbGxl
ZCAncmVmTWFwcycgb3IgJ3NhbXBsZXInIGltYWdlcy4KKyAgICAgKiBDdXN0b20gUHJvY2VkdXJh
bCB0ZXh0dXJlcyBhcmUgdGhlIGVhc2llc3Qgd2F5IHRvIGNyZWF0ZSB5b3VyIG93biBwcm9jZWR1
cmFsIGluIHlvdXIgYXBwbGljYXRpb24uCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25q
cy5jb20vaG93X3RvL2hvd190b191c2VfcHJvY2VkdXJhbF90ZXh0dXJlcyNjcmVhdGluZy1jdXN0
b20tcHJvY2VkdXJhbC10ZXh0dXJlcworICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFt
ZSBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSB0ZXh0dXJlUGF0aCBEZWZpbmUgdGhlIGZv
bGRlciBwYXRoIGNvbnRhaW5pbmcgYWxsIHRoZSBjdXRvbSB0ZXh0dXJlIHJlbGF0ZWQgZmlsZXMg
KGNvbmZpZywgc2hhZGVycy4uLikKKyAgICAgKiBAcGFyYW0gc2l6ZSBEZWZpbmUgdGhlIHNpemUg
b2YgdGhlIHRleHR1cmUgdG8gY3JlYXRlCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZSB0aGUg
c2NlbmUgdGhlIHRleHR1cmUgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBmYWxsYmFja1RleHR1
cmUgRGVmaW5lIGEgZmFsbGJhY2sgdGV4dHVyZSBpbiBjYXNlIHRoZXJlIHdlcmUgaXNzdWVzIHRv
IGNyZWF0ZSB0aGUgY3VzdG9tIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVNaXBNYXBz
IERlZmluZSBpZiB0aGUgdGV4dHVyZSBzaG91bGQgY3JlYXRlcyBtaXAgbWFwcyBvciBub3QKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZShuYW1lLCB0ZXh0dXJl
UGF0aCwgc2l6ZSwgc2NlbmUsIGZhbGxiYWNrVGV4dHVyZSwgZ2VuZXJhdGVNaXBNYXBzKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNpemUsIG51bGwsIHNj
ZW5lLCBmYWxsYmFja1RleHR1cmUsIGdlbmVyYXRlTWlwTWFwcykgfHwgdGhpczsKKyAgICAgICAg
X3RoaXMuX2FuaW1hdGUgPSB0cnVlOworICAgICAgICBfdGhpcy5fdGltZSA9IDA7CisgICAgICAg
IF90aGlzLl90ZXh0dXJlUGF0aCA9IHRleHR1cmVQYXRoOworICAgICAgICAvL1RyeSB0byBsb2Fk
IGpzb24KKyAgICAgICAgX3RoaXMuX2xvYWRKc29uKHRleHR1cmVQYXRoKTsKKyAgICAgICAgX3Ro
aXMucmVmcmVzaFJhdGUgPSAxOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIEN1
c3RvbVByb2NlZHVyYWxUZXh0dXJlLnByb3RvdHlwZS5fbG9hZEpzb24gPSBmdW5jdGlvbiAoanNv
blVybCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgbm9Db25maWdG
aWxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkxvZygiTm8gY29uZmlnIGZpbGUgZm91bmQgaW4g
IiArIGpzb25VcmwgKyAiIHRyeWluZyB0byB1c2UgU2hhZGVyc1N0b3JlIG9yIERPTSBlbGVtZW50
Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIF90aGlzLnNldEZyYWdtZW50
KF90aGlzLl90ZXh0dXJlUGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAo
ZXgpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siTG9nZ2VyIl0uRXJyb3IoIk5vIGpzb24gb3IgU2hhZGVyU3RvcmUgb3IgRE9NIGVs
ZW1lbnQgZm91bmQgZm9yIEN1c3RvbVByb2NlZHVyYWxUZXh0dXJlIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgICAgIHZhciBjb25maWdGaWxlVXJsID0ganNvblVybCArICIvY29u
ZmlnLmpzb24iOworICAgICAgICB2YXIgeGhyID0gbmV3IF9NaXNjX3dlYlJlcXVlc3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siV2ViUmVxdWVzdCJdKCk7CisgICAgICAgIHhoci5vcGVu
KCJHRVQiLCBjb25maWdGaWxlVXJsKTsKKyAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoImxv
YWQiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwIHx8
ICh4aHIucmVzcG9uc2VUZXh0ICYmIHhoci5yZXNwb25zZVRleHQubGVuZ3RoID4gMCkpIHsKKyAg
ICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY29uZmlnID0g
SlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy51cGRh
dGVTaGFkZXJVbmlmb3JtcygpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy51cGRhdGVUZXh0
dXJlcygpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZXRGcmFnbWVudChfdGhpcy5fdGV4
dHVyZVBhdGggKyAiL2N1c3RvbSIpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYW5pbWF0
ZSA9IF90aGlzLl9jb25maWcuYW5pbWF0ZTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVm
cmVzaFJhdGUgPSBfdGhpcy5fY29uZmlnLnJlZnJlc2hyYXRlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9Db25m
aWdGaWxlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgbm9Db25maWdGaWxlKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sIGZhbHNlKTsKKyAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwg
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgbm9Db25maWdGaWxlKCk7CisgICAgICAgIH0sIGZh
bHNlKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHhoci5zZW5kKCk7CisgICAgICAgIH0K
KyAgICAgICAgY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uRXJyb3IoIkN1c3RvbVByb2NlZHVyYWxUZXh0
dXJlOiBFcnJvciBvbiBYSFIgc2VuZCByZXF1ZXN0LiIpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBJcyB0aGUgdGV4dHVyZSByZWFkeSB0byBiZSB1c2VkID8gKHJlbmRlcmVk
IGF0IGxlYXN0IG9uY2UpCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiByZWFkeSwgb3RoZXJ3aXNl
LCBmYWxzZS4KKyAgICAgKi8KKyAgICBDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUu
aXNSZWFkeSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCFfc3VwZXIucHJvdG90eXBlLmlz
UmVhZHkuY2FsbCh0aGlzKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdGV4dHVyZXMpIHsKKyAgICAgICAgICAg
IHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbbmFtZV07CisgICAgICAgICAgICBpZiAoIXRl
eHR1cmUuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoq
CisgICAgICogUmVuZGVyIHRoZSB0ZXh0dXJlIHRvIGl0cyBhc3NvY2lhdGVkIHJlbmRlciB0YXJn
ZXQuCisgICAgICogQHBhcmFtIHVzZUNhbWVyYVBvc3RQcm9jZXNzIERlZmluZSBpZiBjYW1lcmEg
cG9zdCBwcm9jZXNzIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSB0ZXh0dXJlCisgICAgICovCisg
ICAgQ3VzdG9tUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICh1
c2VDYW1lcmFQb3N0UHJvY2VzcykgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5l
KCk7CisgICAgICAgIGlmICh0aGlzLl9hbmltYXRlICYmIHNjZW5lKSB7CisgICAgICAgICAgICB0
aGlzLl90aW1lICs9IHNjZW5lLmdldEFuaW1hdGlvblJhdGlvKCkgKiAwLjAzOworICAgICAgICAg
ICAgdGhpcy51cGRhdGVTaGFkZXJVbmlmb3JtcygpOworICAgICAgICB9CisgICAgICAgIF9zdXBl
ci5wcm90b3R5cGUucmVuZGVyLmNhbGwodGhpcywgdXNlQ2FtZXJhUG9zdFByb2Nlc3MpOworICAg
IH07CisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBsaXN0IG9mIGRlcGVuZGFudCB0ZXh0dXJl
cyBzYW1wbGVycyBpbiB0aGUgc2hhZGVyLgorICAgICAqLworICAgIEN1c3RvbVByb2NlZHVyYWxU
ZXh0dXJlLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jb25maWcuc2FtcGxlcjJEcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgdGhpcy5zZXRUZXh0dXJlKHRoaXMuX2NvbmZpZy5zYW1wbGVyMkRzW2ld
LnNhbXBsZTJEbmFtZSwgbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0odGhpcy5fdGV4dHVyZVBhdGggKyAiLyIgKyB0
aGlzLl9jb25maWcuc2FtcGxlcjJEc1tpXS50ZXh0dXJlUmVsYXRpdmVVcmwsIHRoaXMuZ2V0U2Nl
bmUoKSkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIHVu
aWZvcm0gdmFsdWVzIG9mIHRoZSBwcm9jZWR1cmFsIHRleHR1cmUgaW4gdGhlIHNoYWRlci4KKyAg
ICAgKi8KKyAgICBDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlU2hhZGVy
VW5pZm9ybXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9jb25maWcpIHsKKyAg
ICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fY29uZmlnLnVuaWZvcm1zLmxlbmd0
aDsgaisrKSB7CisgICAgICAgICAgICAgICAgdmFyIHVuaWZvcm0gPSB0aGlzLl9jb25maWcudW5p
Zm9ybXNbal07CisgICAgICAgICAgICAgICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAiZmxvYXQiOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5zZXRGbG9hdCh1bmlmb3JtLm5hbWUsIHVuaWZvcm0udmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgImNvbG9yMyI6CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENvbG9yMyh1bmlmb3JtLm5hbWUsIG5ldyBfTWF0
aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb2xvcjMiXSh1bmlm
b3JtLnIsIHVuaWZvcm0uZywgdW5pZm9ybS5iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiY29sb3I0IjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuc2V0Q29sb3I0KHVuaWZvcm0ubmFtZSwgbmV3IF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbG9yNCJdKHVuaWZvcm0uciwgdW5p
Zm9ybS5nLCB1bmlmb3JtLmIsIHVuaWZvcm0uYSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgInZlY3RvcjIiOgorICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5zZXRWZWN0b3IyKHVuaWZvcm0ubmFtZSwgbmV3IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IyIl0odW5pZm9ybS54
LCB1bmlmb3JtLnkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlICJ2ZWN0b3IzIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
c2V0VmVjdG9yMyh1bmlmb3JtLm5hbWUsIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKHVuaWZvcm0ueCwgdW5pZm9ybS55LCB1bmlm
b3JtLnopKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLnNldEZsb2F0KCJ0aW1l
IiwgdGhpcy5fdGltZSk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3VzdG9t
UHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLCAiYW5pbWF0ZSIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIERlZmluZSBpZiB0aGUgdGV4dHVyZSBhbmltYXRlcyBvciBub3QuCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9hbmltYXRlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgdGhpcy5fYW5pbWF0ZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICByZXR1cm4gQ3VzdG9tUHJvY2VkdXJhbFRleHR1cmU7Cit9KF9wcm9jZWR1cmFsVGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJQcm9jZWR1cmFsVGV4dHVyZSJdKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL1Byb2NlZHVyYWxzL2lu
ZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1cmFscy9pbmRleC50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEN1c3RvbVByb2NlZHVyYWxUZXh0dXJlLCBOb2lz
ZVByb2NlZHVyYWxUZXh0dXJlLCBQcm9jZWR1cmFsVGV4dHVyZSwgUHJvY2VkdXJhbFRleHR1cmVT
Y2VuZUNvbXBvbmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2N1c3RvbVByb2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2N1c3RvbVByb2NlZHVyYWxUZXh0dXJlICovICIu
L01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1cmFscy9jdXN0b21Qcm9jZWR1cmFsVGV4dHVyZS50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2N1c3RvbVByb2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkN1c3RvbVByb2NlZHVyYWxUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX25vaXNlUHJvY2VkdXJhbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9pc2VQcm9jZWR1cmFsVGV4dHVy
ZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvUHJvY2VkdXJhbHMvbm9pc2VQcm9jZWR1cmFsVGV4
dHVyZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2lzZVByb2NlZHVyYWxUZXh0dXJlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfbm9pc2VQcm9jZWR1cmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJOb2lzZVByb2NlZHVyYWxUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3Byb2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Byb2NlZHVyYWxUZXh0dXJlICovICIu
L01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1cmFscy9wcm9jZWR1cmFsVGV4dHVyZS50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X3Byb2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlByb2NlZHVy
YWxUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2NlZHVyYWxU
ZXh0dXJlU2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vcHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudCAqLyAi
Li9NYXRlcmlhbHMvVGV4dHVyZXMvUHJvY2VkdXJhbHMvcHJvY2VkdXJhbFRleHR1cmVTY2VuZUNv
bXBvbmVudC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29t
cG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBv
bmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQcm9jZWR1cmFsVGV4dHVyZVNjZW5l
Q29tcG9uZW50Il07IH0pOworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0
ZXJpYWxzL1RleHR1cmVzL1Byb2NlZHVyYWxzL25vaXNlUHJvY2VkdXJhbFRleHR1cmUudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvVGV4dHVyZXMvUHJvY2VkdXJhbHMv
bm9pc2VQcm9jZWR1cmFsVGV4dHVyZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogTm9pc2VQcm9jZWR1cmFsVGV4dHVyZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJOb2lzZVByb2NlZHVyYWxUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBOb2lzZVByb2NlZHVyYWxUZXh0dXJlOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vRW5naW5l
cy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3Byb2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Byb2NlZHVyYWxUZXh0dXJlICovICIu
L01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1cmFscy9wcm9jZWR1cmFsVGV4dHVyZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy90eXBl
U3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfU2hhZGVyc19ub2lzZV9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vU2hhZGVycy9ub2lzZS5mcmFnbWVudCAq
LyAiLi9TaGFkZXJzL25vaXNlLmZyYWdtZW50LnRzIik7CisKKworCisKKworLyoqCisgKiBDbGFz
cyB1c2VkIHRvIGdlbmVyYXRlIG5vaXNlIHByb2NlZHVyYWwgdGV4dHVyZXMKKyAqLwordmFyIE5v
aXNlUHJvY2VkdXJhbFRleHR1cmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTm9p
c2VQcm9jZWR1cmFsVGV4dHVyZSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEg
bmV3IE5vaXNlUHJvY2VkdXJhbFRleHR1cmUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRo
ZSBuYW1lIGZvIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIHNpemUgZGVmaW5lcyB0aGUgc2l6
ZSBvZiB0aGUgdGV4dHVyZSAoZGVmYXVsdCBpcyAyNTYpCisgICAgICogQHBhcmFtIHNjZW5lIGRl
ZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gZmFsbGJhY2tUZXh0dXJlIGRl
ZmluZXMgdGhlIHRleHR1cmUgdG8gdXNlIGlmIHRoZSBOb2lzZVByb2NlZHVyYWxUZXh0dXJlIGNh
bid0IGJlIGNyZWF0ZWQKKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVNaXBNYXBzIGRlZmluZXMgaWYg
bWlwbWFwcyBtdXN0IGJlIGdlbmVyYXRlZCAodHJ1ZSBieSBkZWZhdWx0KQorICAgICAqLworICAg
IGZ1bmN0aW9uIE5vaXNlUHJvY2VkdXJhbFRleHR1cmUobmFtZSwgc2l6ZSwgc2NlbmUsIGZhbGxi
YWNrVGV4dHVyZSwgZ2VuZXJhdGVNaXBNYXBzKSB7CisgICAgICAgIGlmIChzaXplID09PSB2b2lk
IDApIHsgc2l6ZSA9IDI1NjsgfQorICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2Vu
ZSA9IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVu
Z2luZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3Vw
ZXIuY2FsbCh0aGlzLCBuYW1lLCBzaXplLCAibm9pc2UiLCBzY2VuZSwgZmFsbGJhY2tUZXh0dXJl
LCBnZW5lcmF0ZU1pcE1hcHMpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl90aW1lID0gMDsKKyAg
ICAgICAgLyoqIEdldHMgb3Igc2V0cyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5n
IHRoZSBvdmVyYWxsIGJyaWdodG5lc3Mgb2YgdGhlIHRleHR1cmUgKGRlZmF1bHQgaXMgMC4yKSAq
LworICAgICAgICBfdGhpcy5icmlnaHRuZXNzID0gMC4yOworICAgICAgICAvKiogRGVmaW5lcyB0
aGUgbnVtYmVyIG9mIG9jdGF2ZXMgdG8gcHJvY2VzcyAqLworICAgICAgICBfdGhpcy5vY3RhdmVz
ID0gMzsKKyAgICAgICAgLyoqIERlZmluZXMgdGhlIGxldmVsIG9mIHBlcnNpc3RlbmNlICgwLjgg
YnkgZGVmYXVsdCkgKi8KKyAgICAgICAgX3RoaXMucGVyc2lzdGVuY2UgPSAwLjg7CisgICAgICAg
IC8qKiBHZXRzIG9yIHNldHMgYW5pbWF0aW9uIHNwZWVkIGZhY3RvciAoZGVmYXVsdCBpcyAxKSAq
LworICAgICAgICBfdGhpcy5hbmltYXRpb25TcGVlZEZhY3RvciA9IDE7CisgICAgICAgIF90aGlz
LmF1dG9DbGVhciA9IGZhbHNlOworICAgICAgICBfdGhpcy5fdXBkYXRlU2hhZGVyVW5pZm9ybXMo
KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBOb2lzZVByb2NlZHVyYWxUZXh0
dXJlLnByb3RvdHlwZS5fdXBkYXRlU2hhZGVyVW5pZm9ybXMgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgaWYgKCFzY2VuZSkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3RpbWUgKz0gc2Nl
bmUuZ2V0QW5pbWF0aW9uUmF0aW8oKSAqIHRoaXMuYW5pbWF0aW9uU3BlZWRGYWN0b3IgKiAwLjAx
OworICAgICAgICB0aGlzLnNldEZsb2F0KCJicmlnaHRuZXNzIiwgdGhpcy5icmlnaHRuZXNzKTsK
KyAgICAgICAgdGhpcy5zZXRGbG9hdCgicGVyc2lzdGVuY2UiLCB0aGlzLnBlcnNpc3RlbmNlKTsK
KyAgICAgICAgdGhpcy5zZXRGbG9hdCgidGltZVNjYWxlIiwgdGhpcy5fdGltZSk7CisgICAgfTsK
KyAgICBOb2lzZVByb2NlZHVyYWxUZXh0dXJlLnByb3RvdHlwZS5fZ2V0RGVmaW5lcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICIjZGVmaW5lIE9DVEFWRVMgIiArICh0aGlzLm9jdGF2
ZXMgfCAwKTsKKyAgICB9OworICAgIC8qKiBHZW5lcmF0ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0
aGUgcHJvY2VkdXJhbCB0ZXh0dXJlICovCisgICAgTm9pc2VQcm9jZWR1cmFsVGV4dHVyZS5wcm90
b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHVzZUNhbWVyYVBvc3RQcm9jZXNzKSB7CisgICAgICAg
IHRoaXMuX3VwZGF0ZVNoYWRlclVuaWZvcm1zKCk7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUu
cmVuZGVyLmNhbGwodGhpcywgdXNlQ2FtZXJhUG9zdFByb2Nlc3MpOworICAgIH07CisgICAgLyoq
CisgICAgICogU2VyaWFsaXplcyB0aGlzIG5vaXNlIHByb2NlZHVyYWwgdGV4dHVyZQorICAgICAq
IEByZXR1cm5zIGEgc2VyaWFsaXplZCBub2lzZSBwcm9jZWR1cmFsIHRleHR1cmUgb2JqZWN0Cisg
ICAgICovCisgICAgTm9pc2VQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUuc2VyaWFsaXplID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IHt9OworICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmN1c3RvbVR5cGUgPSAiQkFCWUxPTi5Ob2lzZVByb2Nl
ZHVyYWxUZXh0dXJlIjsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5icmlnaHRuZXNzID0g
dGhpcy5icmlnaHRuZXNzOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm9jdGF2ZXMgPSB0
aGlzLm9jdGF2ZXM7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucGVyc2lzdGVuY2UgPSB0
aGlzLnBlcnNpc3RlbmNlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmFuaW1hdGlvblNw
ZWVkRmFjdG9yID0gdGhpcy5hbmltYXRpb25TcGVlZEZhY3RvcjsKKyAgICAgICAgc2VyaWFsaXph
dGlvbk9iamVjdC5zaXplID0gdGhpcy5nZXRTaXplKCkud2lkdGg7CisgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QuZ2VuZXJhdGVNaXBNYXBzID0gdGhpcy5fZ2VuZXJhdGVNaXBNYXBzOworICAg
ICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBOb2lzZVByb2NlZHVyYWxUZXh0dXJlIGZyb20gcGFyc2VkIG5vaXNlIHByb2Nl
ZHVyYWwgdGV4dHVyZSBkYXRhCisgICAgICogQHBhcmFtIHBhcnNlZFRleHR1cmUgZGVmaW5lcyBw
YXJzZWQgdGV4dHVyZSBkYXRhCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGN1cnJl
bnQgc2NlbmUKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSByb290IFVSTCBjb250
YWluaW5nIG5vaXNlIHByb2NlZHVyYWwgdGV4dHVyZSBpbmZvcm1hdGlvbgorICAgICAqIEByZXR1
cm5zIGEgcGFyc2VkIE5vaXNlUHJvY2VkdXJhbFRleHR1cmUKKyAgICAgKi8KKyAgICBOb2lzZVBy
b2NlZHVyYWxUZXh0dXJlLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZFRleHR1cmUsIHNjZW5lKSB7
CisgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IE5vaXNlUHJvY2VkdXJhbFRleHR1cmUocGFyc2Vk
VGV4dHVyZS5uYW1lLCBwYXJzZWRUZXh0dXJlLnNpemUsIHNjZW5lLCB1bmRlZmluZWQsIHBhcnNl
ZFRleHR1cmUuZ2VuZXJhdGVNaXBNYXBzKTsKKyAgICAgICAgdGV4dHVyZS5icmlnaHRuZXNzID0g
cGFyc2VkVGV4dHVyZS5icmlnaHRuZXNzOworICAgICAgICB0ZXh0dXJlLm9jdGF2ZXMgPSBwYXJz
ZWRUZXh0dXJlLm9jdGF2ZXM7CisgICAgICAgIHRleHR1cmUucGVyc2lzdGVuY2UgPSBwYXJzZWRU
ZXh0dXJlLnBlcnNpc3RlbmNlOworICAgICAgICB0ZXh0dXJlLmFuaW1hdGlvblNwZWVkRmFjdG9y
ID0gcGFyc2VkVGV4dHVyZS5hbmltYXRpb25TcGVlZEZhY3RvcjsKKyAgICAgICAgcmV0dXJuIHRl
eHR1cmU7CisgICAgfTsKKyAgICByZXR1cm4gTm9pc2VQcm9jZWR1cmFsVGV4dHVyZTsKK30oX3By
b2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlByb2NlZHVyYWxU
ZXh0dXJlIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uTm9pc2VQcm9jZWR1cmFs
VGV4dHVyZSJdID0gTm9pc2VQcm9jZWR1cmFsVGV4dHVyZTsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL1Byb2NlZHVyYWxzL3Byb2NlZHVyYWxUZXh0dXJlLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1cmFscy9w
cm9jZWR1cmFsVGV4dHVyZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IFByb2NlZHVyYWxUZXh0dXJlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlByb2NlZHVyYWxUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQcm9jZWR1cmFsVGV4dHVy
ZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9y
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4u
L01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWVzaGVzL2J1ZmZlciAqLyAiLi9N
ZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lQ29tcG9u
ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi8uLi9zY2VuZUNvbXBvbmVudCAqLyAiLi9zY2VuZUNvbXBvbmVudC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGVyaWFs
cy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGVyaWFscy9U
ZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJnZXRU
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZSAqLyAi
Li9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9wcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29tcG9uZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Byb2NlZHVy
YWxUZXh0dXJlU2NlbmVDb21wb25lbnQgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL1Byb2NlZHVy
YWxzL3Byb2NlZHVyYWxUZXh0dXJlU2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfRW5naW5lc19FeHRlbnNpb25zX2VuZ2luZV9yZW5kZXJUYXJnZXRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4u
L0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUucmVuZGVyVGFyZ2V0ICovICIuL0VuZ2luZXMvRXh0
ZW5zaW9ucy9lbmdpbmUucmVuZGVyVGFyZ2V0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNfcHJvY2VkdXJhbF92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEw
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9TaGFkZXJzL3Byb2NlZHVyYWwu
dmVydGV4ICovICIuL1NoYWRlcnMvcHJvY2VkdXJhbC52ZXJ0ZXgudHMiKTsKKworCisKKworCisK
KworCisKKworCisvKioKKyAqIFByb2NlZHVyYWwgdGV4dHVyaW5nIGlzIGEgd2F5IHRvIHByb2dy
YW1tYXRpY2FsbHkgY3JlYXRlIGEgdGV4dHVyZS4gVGhlcmUgYXJlIDIgdHlwZXMgb2YgcHJvY2Vk
dXJhbCB0ZXh0dXJlczogY29kZS1vbmx5LCBhbmQgY29kZSB0aGF0IHJlZmVyZW5jZXMgc29tZSBj
bGFzc2ljIDJEIGltYWdlcywgc29tZXRpbWVzIGNhbG1wbGVyJyBpbWFnZXMuCisgKiBUaGlzIGlz
IHRoZSBiYXNlIGNsYXNzIG9mIGFueSBQcm9jZWR1cmFsIHRleHR1cmUgYW5kIGNvbnRhaW5zIG1v
c3Qgb2YgdGhlIHNoYXJlYWJsZSBjb2RlLgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL2hvd190b191c2VfcHJvY2VkdXJhbF90ZXh0dXJlcworICovCit2YXIgUHJvY2Vk
dXJhbFRleHR1cmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUHJvY2VkdXJhbFRl
eHR1cmUsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgbmV3IHByb2Nl
ZHVyYWwgdGV4dHVyZS4KKyAgICAgKiBQcm9jZWR1cmFsIHRleHR1cmluZyBpcyBhIHdheSB0byBw
cm9ncmFtbWF0aWNhbGx5IGNyZWF0ZSBhIHRleHR1cmUuIFRoZXJlIGFyZSAyIHR5cGVzIG9mIHBy
b2NlZHVyYWwgdGV4dHVyZXM6IGNvZGUtb25seSwgYW5kIGNvZGUgdGhhdCByZWZlcmVuY2VzIHNv
bWUgY2xhc3NpYyAyRCBpbWFnZXMsIHNvbWV0aW1lcyBjYWxsZWQgJ3JlZk1hcHMnIG9yICdzYW1w
bGVyJyBpbWFnZXMuCisgICAgICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbnkgUHJvY2Vk
dXJhbCB0ZXh0dXJlIGFuZCBjb250YWlucyBtb3N0IG9mIHRoZSBzaGFyZWFibGUgY29kZS4KKyAg
ICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9wcm9j
ZWR1cmFsX3RleHR1cmVzCisgICAgICogQHBhcmFtIG5hbWUgIERlZmluZSB0aGUgbmFtZSBvZiB0
aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSBzaXplIERlZmluZSB0aGUgc2l6ZSBvZiB0aGUgdGV4
dHVyZSB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0gZnJhZ21lbnQgRGVmaW5lIHRoZSBmcmFnbWVu
dCBzaGFkZXIgdG8gdXNlIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlIG9yIG51bGwgaWYgaXQgaXMg
ZGVmaW5lZCBsYXRlcgorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSB0
ZXh0dXJlIGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gZmFsbGJhY2tUZXh0dXJlIERlZmluZSBh
IGZhbGxiYWNrIHRleHR1cmUgaW4gY2FzZSB0aGVyZSB3ZXJlIGlzc3VlcyB0byBjcmVhdGUgdGhl
IGN1c3RvbSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGdlbmVyYXRlTWlwTWFwcyBEZWZpbmUgaWYg
dGhlIHRleHR1cmUgc2hvdWxkIGNyZWF0ZXMgbWlwIG1hcHMgb3Igbm90CisgICAgICogQHBhcmFt
IGlzQ3ViZSBEZWZpbmUgaWYgdGhlIHRleHR1cmUgaXMgYSBjdWJlIHRleHR1cmUgb3Igbm90ICh0
aGlzIHdpbGwgcmVuZGVyIGVhY2ggZmFjZXMgb2YgdGhlIGN1YmUpCisgICAgICovCisgICAgZnVu
Y3Rpb24gUHJvY2VkdXJhbFRleHR1cmUobmFtZSwgc2l6ZSwgZnJhZ21lbnQsIHNjZW5lLCBmYWxs
YmFja1RleHR1cmUsIGdlbmVyYXRlTWlwTWFwcywgaXNDdWJlKSB7CisgICAgICAgIGlmIChmYWxs
YmFja1RleHR1cmUgPT09IHZvaWQgMCkgeyBmYWxsYmFja1RleHR1cmUgPSBudWxsOyB9CisgICAg
ICAgIGlmIChnZW5lcmF0ZU1pcE1hcHMgPT09IHZvaWQgMCkgeyBnZW5lcmF0ZU1pcE1hcHMgPSB0
cnVlOyB9CisgICAgICAgIGlmIChpc0N1YmUgPT09IHZvaWQgMCkgeyBpc0N1YmUgPSBmYWxzZTsg
fQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBudWxsLCBzY2VuZSwgIWdl
bmVyYXRlTWlwTWFwcykgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuaXNDdWJlID0gaXNDdWJlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGlmIHRoZSB0ZXh0dXJlIGlzIGVuYWJsZWQg
b3Igbm90IChkaXNhYmxlZCB0ZXh0dXJlIHdpbGwgbm90IHJlbmRlcikKKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLmlzRW5hYmxlZCA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
ZWZpbmUgaWYgdGhlIHRleHR1cmUgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZW5kZXJpbmcgKGRl
ZmF1bHQgaXMgdHJ1ZSkKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmF1dG9DbGVhciA9IHRy
dWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFdmVudCByYWlzZWQgd2hlbiB0aGUgdGV4dHVy
ZSBpcyBnZW5lcmF0ZWQKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uR2VuZXJhdGVkT2Jz
ZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhp
cy5fdGV4dHVyZXMgPSB7fTsKKyAgICAgICAgX3RoaXMuX2N1cnJlbnRSZWZyZXNoSWQgPSAtMTsK
KyAgICAgICAgX3RoaXMuX3JlZnJlc2hSYXRlID0gMTsKKyAgICAgICAgX3RoaXMuX3ZlcnRleEJ1
ZmZlcnMgPSB7fTsKKyAgICAgICAgX3RoaXMuX3VuaWZvcm1zID0gbmV3IEFycmF5KCk7CisgICAg
ICAgIF90aGlzLl9zYW1wbGVycyA9IG5ldyBBcnJheSgpOworICAgICAgICBfdGhpcy5fZmxvYXRz
ID0ge307CisgICAgICAgIF90aGlzLl9pbnRzID0ge307CisgICAgICAgIF90aGlzLl9mbG9hdHNB
cnJheXMgPSB7fTsKKyAgICAgICAgX3RoaXMuX2NvbG9yczMgPSB7fTsKKyAgICAgICAgX3RoaXMu
X2NvbG9yczQgPSB7fTsKKyAgICAgICAgX3RoaXMuX3ZlY3RvcnMyID0ge307CisgICAgICAgIF90
aGlzLl92ZWN0b3JzMyA9IHt9OworICAgICAgICBfdGhpcy5fbWF0cmljZXMgPSB7fTsKKyAgICAg
ICAgX3RoaXMuX2ZhbGxiYWNrVGV4dHVyZVVzZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2Nh
Y2hlZERlZmluZXMgPSAiIjsKKyAgICAgICAgX3RoaXMuX2NvbnRlbnRVcGRhdGVJZCA9IC0xOwor
ICAgICAgICBzY2VuZSA9IF90aGlzLmdldFNjZW5lKCk7CisgICAgICAgIHZhciBjb21wb25lbnQg
PSBzY2VuZS5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfUFJPQ0VEVVJBTFRFWFRV
UkUpOworICAgICAgICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICAgICAgY29tcG9uZW50ID0g
bmV3IF9wcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIlByb2NlZHVyYWxUZXh0dXJlU2NlbmVDb21wb25lbnQiXShzY2VuZSk7CisgICAg
ICAgICAgICBzY2VuZS5fYWRkQ29tcG9uZW50KGNvbXBvbmVudCk7CisgICAgICAgIH0KKyAgICAg
ICAgc2NlbmUucHJvY2VkdXJhbFRleHR1cmVzLnB1c2goX3RoaXMpOworICAgICAgICBfdGhpcy5f
ZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIF90aGlzLm5hbWUgPSBuYW1lOwor
ICAgICAgICBfdGhpcy5pc1JlbmRlclRhcmdldCA9IHRydWU7CisgICAgICAgIF90aGlzLl9zaXpl
ID0gc2l6ZTsKKyAgICAgICAgX3RoaXMuX2dlbmVyYXRlTWlwTWFwcyA9IGdlbmVyYXRlTWlwTWFw
czsKKyAgICAgICAgX3RoaXMuc2V0RnJhZ21lbnQoZnJhZ21lbnQpOworICAgICAgICBfdGhpcy5f
ZmFsbGJhY2tUZXh0dXJlID0gZmFsbGJhY2tUZXh0dXJlOworICAgICAgICBpZiAoaXNDdWJlKSB7
CisgICAgICAgICAgICBfdGhpcy5fdGV4dHVyZSA9IF90aGlzLl9lbmdpbmUuY3JlYXRlUmVuZGVy
VGFyZ2V0Q3ViZVRleHR1cmUoc2l6ZSwgeyBnZW5lcmF0ZU1pcE1hcHM6IGdlbmVyYXRlTWlwTWFw
cywgZ2VuZXJhdGVEZXB0aEJ1ZmZlcjogZmFsc2UsIGdlbmVyYXRlU3RlbmNpbEJ1ZmZlcjogZmFs
c2UgfSk7CisgICAgICAgICAgICBfdGhpcy5zZXRGbG9hdCgiZmFjZSIsIDApOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX3RoaXMuX3RleHR1cmUgPSBfdGhpcy5fZW5n
aW5lLmNyZWF0ZVJlbmRlclRhcmdldFRleHR1cmUoc2l6ZSwgeyBnZW5lcmF0ZU1pcE1hcHM6IGdl
bmVyYXRlTWlwTWFwcywgZ2VuZXJhdGVEZXB0aEJ1ZmZlcjogZmFsc2UsIGdlbmVyYXRlU3RlbmNp
bEJ1ZmZlcjogZmFsc2UgfSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVkJPCisgICAgICAgIHZh
ciB2ZXJ0aWNlcyA9IFtdOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKDEsIDEpOworICAgICAgICB2
ZXJ0aWNlcy5wdXNoKC0xLCAxKTsKKyAgICAgICAgdmVydGljZXMucHVzaCgtMSwgLTEpOworICAg
ICAgICB2ZXJ0aWNlcy5wdXNoKDEsIC0xKTsKKyAgICAgICAgX3RoaXMuX3ZlcnRleEJ1ZmZlcnNb
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVy
Il0uUG9zaXRpb25LaW5kXSA9IG5ldyBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXShfdGhpcy5fZW5naW5lLCB2ZXJ0aWNlcywgX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uUG9z
aXRpb25LaW5kLCBmYWxzZSwgZmFsc2UsIDIpOworICAgICAgICBfdGhpcy5fY3JlYXRlSW5kZXhC
dWZmZXIoKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBU
aGUgZWZmZWN0IHRoYXQgaXMgY3JlYXRlZCB3aGVuIGluaXRpYWxpemluZyB0aGUgcG9zdCBwcm9j
ZXNzLgorICAgICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGVmZmVjdCBjb3JyZXNwb25kaW5nIHRo
ZSB0aGUgcG9zdHByb2Nlc3MuCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90
eXBlLmdldEVmZmVjdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VmZmVj
dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGV4dHVyZSBjb250ZW50IChVc2UgdGhp
cyBmdW5jdGlvbiB3aXNlbHkgYXMgcmVhZGluZyBmcm9tIGEgdGV4dHVyZSBjYW4gYmUgc2xvdykK
KyAgICAgKiBAcmV0dXJucyBhbiBBcnJheUJ1ZmZlclZpZXcgKFVpbnQ4QXJyYXkgb3IgRmxvYXQz
MkFycmF5KQorICAgICAqLworICAgIFByb2NlZHVyYWxUZXh0dXJlLnByb3RvdHlwZS5nZXRDb250
ZW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fY29udGVudERhdGEgJiYgdGhp
cy5fY3VycmVudFJlZnJlc2hJZCA9PSB0aGlzLl9jb250ZW50VXBkYXRlSWQpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9jb250ZW50RGF0YTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9j
b250ZW50RGF0YSA9IHRoaXMucmVhZFBpeGVscygwLCAwLCB0aGlzLl9jb250ZW50RGF0YSk7Cisg
ICAgICAgIHRoaXMuX2NvbnRlbnRVcGRhdGVJZCA9IHRoaXMuX2N1cnJlbnRSZWZyZXNoSWQ7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50RGF0YTsKKyAgICB9OworICAgIFByb2NlZHVyYWxU
ZXh0dXJlLnByb3RvdHlwZS5fY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBlbmdpbmUgPSB0aGlzLl9lbmdpbmU7CisgICAgICAgIC8vIEluZGljZXMKKyAgICAg
ICAgdmFyIGluZGljZXMgPSBbXTsKKyAgICAgICAgaW5kaWNlcy5wdXNoKDApOworICAgICAgICBp
bmRpY2VzLnB1c2goMSk7CisgICAgICAgIGluZGljZXMucHVzaCgyKTsKKyAgICAgICAgaW5kaWNl
cy5wdXNoKDApOworICAgICAgICBpbmRpY2VzLnB1c2goMik7CisgICAgICAgIGluZGljZXMucHVz
aCgzKTsKKyAgICAgICAgdGhpcy5faW5kZXhCdWZmZXIgPSBlbmdpbmUuY3JlYXRlSW5kZXhCdWZm
ZXIoaW5kaWNlcyk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFByb2NlZHVyYWxU
ZXh0dXJlLnByb3RvdHlwZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHZi
ID0gdGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdOworICAgICAgICBpZiAodmIp
IHsKKyAgICAgICAgICAgIHZiLl9yZWJ1aWxkKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
Y3JlYXRlSW5kZXhCdWZmZXIoKTsKKyAgICAgICAgaWYgKHRoaXMucmVmcmVzaFJhdGUgPT09IF9N
YXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fWyJSZW5kZXJUYXJnZXRUZXh0dXJlIl0uUkVGUkVTSFJBVEVfUkVOREVSX09OQ0Up
IHsKKyAgICAgICAgICAgIHRoaXMucmVmcmVzaFJhdGUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3Jl
bmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUmVuZGVyVGFy
Z2V0VGV4dHVyZSJdLlJFRlJFU0hSQVRFX1JFTkRFUl9PTkNFOworICAgICAgICB9CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXNldHMgdGhlIHRleHR1cmUgaW4gb3JkZXIgdG8gcmVjcmVhdGUg
aXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICAgICAqIFRoaXMgY2FuIGJlIGNhbGxlZCBpbiBj
YXNlIG9mIGNvbnRleHQgbG9zcworICAgICAqLworICAgIFByb2NlZHVyYWxUZXh0dXJlLnByb3Rv
dHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2VmZmVjdCA9PT0g
dW5kZWZpbmVkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZWZmZWN0LmRpc3Bvc2UoKTsKKyAgICB9OworICAgIFByb2NlZHVyYWxUZXh0dXJlLnByb3Rv
dHlwZS5fZ2V0RGVmaW5lcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICIiOworICAg
IH07CisgICAgLyoqCisgICAgICogSXMgdGhlIHRleHR1cmUgcmVhZHkgdG8gYmUgdXNlZCA/IChy
ZW5kZXJlZCBhdCBsZWFzdCBvbmNlKQorICAgICAqIEByZXR1cm5zIHRydWUgaWYgcmVhZHksIG90
aGVyd2lzZSwgZmFsc2UuCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBl
LmlzUmVhZHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIHZhciBlbmdpbmUgPSB0aGlzLl9lbmdpbmU7CisgICAgICAgIHZhciBzaGFkZXJzOworICAg
ICAgICBpZiAoIXRoaXMuX2ZyYWdtZW50KSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2ZhbGxiYWNrVGV4dHVyZVVzZWQpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHZhciBkZWZpbmVzID0gdGhp
cy5fZ2V0RGVmaW5lcygpOworICAgICAgICBpZiAodGhpcy5fZWZmZWN0ICYmIGRlZmluZXMgPT09
IHRoaXMuX2NhY2hlZERlZmluZXMgJiYgdGhpcy5fZWZmZWN0LmlzUmVhZHkoKSkgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2ZyYWdtZW50
LmZyYWdtZW50RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBzaGFkZXJzID0g
eyB2ZXJ0ZXg6ICJwcm9jZWR1cmFsIiwgZnJhZ21lbnRFbGVtZW50OiB0aGlzLl9mcmFnbWVudC5m
cmFnbWVudEVsZW1lbnQgfTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHNoYWRlcnMgPSB7IHZlcnRleDogInByb2NlZHVyYWwiLCBmcmFnbWVudDogdGhpcy5fZnJhZ21l
bnQgfTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYWNoZWREZWZpbmVzID0gZGVmaW5lczsK
KyAgICAgICAgdGhpcy5fZWZmZWN0ID0gZW5naW5lLmNyZWF0ZUVmZmVjdChzaGFkZXJzLCBbX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0u
UG9zaXRpb25LaW5kXSwgdGhpcy5fdW5pZm9ybXMsIHRoaXMuX3NhbXBsZXJzLCBkZWZpbmVzLCB1
bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMucmVs
ZWFzZUludGVybmFsVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKF90aGlzLl9mYWxsYmFja1Rl
eHR1cmUpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdGV4dHVyZSA9IF90aGlzLl9mYWxsYmFj
a1RleHR1cmUuX3RleHR1cmU7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl90ZXh0dXJlKSB7
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlLmluY3JlbWVudFJlZmVyZW5jZXMo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfdGhpcy5f
ZmFsbGJhY2tUZXh0dXJlVXNlZCA9IHRydWU7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
dGhpcy5fZWZmZWN0LmlzUmVhZHkoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlc2V0cyB0
aGUgcmVmcmVzaCBjb3VudGVyIG9mIHRoZSB0ZXh0dXJlIGFuZCBzdGFydCBiYWsgZnJvbSBzY3Jh
dGNoLgorICAgICAqIENvdWxkIGJlIHVzZWZ1bCB0byByZWdlbmVyYXRlIHRoZSB0ZXh0dXJlIGlm
IGl0IGlzIHNldHVwIHRvIHJlbmRlciBvbmx5IG9uY2UuCisgICAgICovCisgICAgUHJvY2VkdXJh
bFRleHR1cmUucHJvdG90eXBlLnJlc2V0UmVmcmVzaENvdW50ZXIgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnRSZWZyZXNoSWQgPSAtMTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldCB0aGUgZnJhZ21lbnQgc2hhZGVyIHRvIHVzZSBpbiBvcmRlciB0byByZW5kZXIgdGhl
IHRleHR1cmUuCisgICAgICogQHBhcmFtIGZyYWdtZW50IFRoaXMgY2FuIGJlIHNldCB0byBhIHBh
dGggKGludG8gdGhlIHNoYWRlciBzdG9yZSkgb3IgdG8gYSBqc29uIG9iamVjdCBjb250YWluaW5n
IGEgZnJhZ21lbnRFbGVtZW50IHByb3BlcnR5LgorICAgICAqLworICAgIFByb2NlZHVyYWxUZXh0
dXJlLnByb3RvdHlwZS5zZXRGcmFnbWVudCA9IGZ1bmN0aW9uIChmcmFnbWVudCkgeworICAgICAg
ICB0aGlzLl9mcmFnbWVudCA9IGZyYWdtZW50OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFByb2NlZHVyYWxUZXh0dXJlLnByb3RvdHlwZSwgInJlZnJlc2hSYXRlIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSByZWZyZXNoIHJhdGUgb2YgdGhlIHRleHR1
cmUgb3IgdGhlIHJlbmRlcmluZyBmcmVxdWVuY3kuCisgICAgICAgICAqIFVzZSAwIHRvIHJlbmRl
ciBqdXN0IG9uY2UsIDEgdG8gcmVuZGVyIG9uIGV2ZXJ5IGZyYW1lLCAyIHRvIHJlbmRlciBldmVy
eSB0d28gZnJhbWVzIGFuZCBzbyBvbi4uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVmcmVzaFJhdGU7CisgICAgICAg
IH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9y
ZWZyZXNoUmF0ZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5yZXNldFJlZnJlc2hDb3VudGVy
KCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKiBAaGlkZGVuICovCisgICAgUHJvY2VkdXJh
bFRleHR1cmUucHJvdG90eXBlLl9zaG91bGRSZW5kZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICghdGhpcy5pc0VuYWJsZWQgfHwgIXRoaXMuaXNSZWFkeSgpIHx8ICF0aGlzLl90ZXh0dXJl
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX3RleHR1cmUuaXNSZWFkeSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9mYWxsYmFja1RleHR1
cmVVc2VkKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX2N1cnJlbnRSZWZyZXNoSWQgPT09IC0xKSB7IC8vIEF0IGxlYXN0IHJlbmRlciBv
bmNlCisgICAgICAgICAgICB0aGlzLl9jdXJyZW50UmVmcmVzaElkID0gMTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnJlZnJlc2hSYXRlID09
PSB0aGlzLl9jdXJyZW50UmVmcmVzaElkKSB7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50UmVm
cmVzaElkID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX2N1cnJlbnRSZWZyZXNoSWQrKzsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07
CisgICAgLyoqCisgICAgICogR2V0IHRoZSBzaXplIHRoZSB0ZXh0dXJlIGlzIHJlbmRlcmluZyBh
dC4KKyAgICAgKiBAcmV0dXJucyB0aGUgc2l6ZSAodGV4dHVyZSBpcyBhbHdheXMgc3F1YXJlZCkK
KyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUuZ2V0UmVuZGVyU2l6ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBSZXNpemUgdGhlIHRleHR1cmUgdG8gbmV3IHZhbHVlLgorICAgICAqIEBwYXJh
bSBzaXplIERlZmluZSB0aGUgbmV3IHNpemUgdGhlIHRleHR1cmUgc2hvdWxkIGhhdmUKKyAgICAg
KiBAcGFyYW0gZ2VuZXJhdGVNaXBNYXBzIERlZmluZSB3aGV0aGVyIHRoZSBuZXcgdGV4dHVyZSBz
aG91bGQgY3JlYXRlIG1pcCBtYXBzCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUucHJv
dG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uIChzaXplLCBnZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICAg
ICAgaWYgKHRoaXMuX2ZhbGxiYWNrVGV4dHVyZVVzZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLnJlbGVhc2VJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAg
ICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX2VuZ2luZS5jcmVhdGVSZW5kZXJUYXJnZXRUZXh0dXJl
KHNpemUsIGdlbmVyYXRlTWlwTWFwcyk7CisgICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzCisg
ICAgICAgIHRoaXMuX3NpemUgPSBzaXplOworICAgICAgICB0aGlzLl9nZW5lcmF0ZU1pcE1hcHMg
PSBnZW5lcmF0ZU1pcE1hcHM7CisgICAgfTsKKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5
cGUuX2NoZWNrVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSkgeworICAgICAgICBpZiAo
dGhpcy5fdW5pZm9ybXMuaW5kZXhPZih1bmlmb3JtTmFtZSkgPT09IC0xKSB7CisgICAgICAgICAg
ICB0aGlzLl91bmlmb3Jtcy5wdXNoKHVuaWZvcm1OYW1lKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogU2V0IGEgdGV4dHVyZSBpbiB0aGUgc2hhZGVyIHByb2dyYW0gdXNlZCB0
byByZW5kZXIuCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB1bmlm
b3JtIHNhbXBsZXJzIGFzIGRlZmluZWQgaW4gdGhlIHNoYWRlcgorICAgICAqIEBwYXJhbSB0ZXh0
dXJlIERlZmluZSB0aGUgdGV4dHVyZSB0byBiaW5kIHRvIHRoaXMgc2FtcGxlcgorICAgICAqIEBy
ZXR1cm4gdGhlIHRleHR1cmUgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQiIGxpa2UgdW5pZm9ybSB1
cGRhdGVzCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLnNldFRleHR1
cmUgPSBmdW5jdGlvbiAobmFtZSwgdGV4dHVyZSkgeworICAgICAgICBpZiAodGhpcy5fc2FtcGxl
cnMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuX3NhbXBsZXJzLnB1
c2gobmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdGV4dHVyZXNbbmFtZV0gPSB0ZXh0
dXJlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBh
IGZsb2F0IGluIHRoZSBzaGFkZXIuCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1l
IG9mIHRoZSB1bmlmb3JtIGFzIGRlZmluZWQgaW4gdGhlIHNoYWRlcgorICAgICAqIEBwYXJhbSB2
YWx1ZSBEZWZpbmUgdGhlIHZhbHVlIHRvIGdpdmUgdG8gdGhlIHVuaWZvcm0KKyAgICAgKiBAcmV0
dXJuIHRoZSB0ZXh0dXJlIGl0c2VsZiBhbGxvd2luZyAiZmx1ZW50IiBsaWtlIHVuaWZvcm0gdXBk
YXRlcworICAgICAqLworICAgIFByb2NlZHVyYWxUZXh0dXJlLnByb3RvdHlwZS5zZXRGbG9hdCA9
IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkgeworICAgICAgICB0aGlzLl9jaGVja1VuaWZvcm0obmFt
ZSk7CisgICAgICAgIHRoaXMuX2Zsb2F0c1tuYW1lXSA9IHZhbHVlOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIGludCBpbiB0aGUgc2hhZGVyLgor
ICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZp
bmVkIGluIHRoZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0
byBnaXZlIHRvIHRoZSB1bmlmb3JtCisgICAgICogQHJldHVybiB0aGUgdGV4dHVyZSBpdHNlbGYg
YWxsb3dpbmcgImZsdWVudCIgbGlrZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBQcm9j
ZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUuc2V0SW50ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7
CisgICAgICAgIHRoaXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5faW50c1tu
YW1lXSA9IHZhbHVlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldCBhbiBhcnJheSBvZiBmbG9hdHMgaW4gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0g
bmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hh
ZGVyCisgICAgICogQHBhcmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUg
dW5pZm9ybQorICAgICAqIEByZXR1cm4gdGhlIHRleHR1cmUgaXRzZWxmIGFsbG93aW5nICJmbHVl
bnQiIGxpa2UgdW5pZm9ybSB1cGRhdGVzCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUu
cHJvdG90eXBlLnNldEZsb2F0cyA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkgeworICAgICAgICB0
aGlzLl9jaGVja1VuaWZvcm0obmFtZSk7CisgICAgICAgIHRoaXMuX2Zsb2F0c0FycmF5c1tuYW1l
XSA9IHZhbHVlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFNldCBhIHZlYzMgaW4gdGhlIHNoYWRlciBmcm9tIGEgQ29sb3IzLgorICAgICAqIEBwYXJhbSBu
YW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFk
ZXIKKyAgICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1
bmlmb3JtCisgICAgICogQHJldHVybiB0aGUgdGV4dHVyZSBpdHNlbGYgYWxsb3dpbmcgImZsdWVu
dCIgbGlrZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5w
cm90b3R5cGUuc2V0Q29sb3IzID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRo
aXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fY29sb3JzM1tuYW1lXSA9IHZh
bHVlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBh
IHZlYzQgaW4gdGhlIHNoYWRlciBmcm9tIGEgQ29sb3I0LgorICAgICAqIEBwYXJhbSBuYW1lIERl
ZmluZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFkZXIKKyAg
ICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1bmlmb3Jt
CisgICAgICogQHJldHVybiB0aGUgdGV4dHVyZSBpdHNlbGYgYWxsb3dpbmcgImZsdWVudCIgbGlr
ZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5
cGUuc2V0Q29sb3I0ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2No
ZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fY29sb3JzNFtuYW1lXSA9IHZhbHVlOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIHZlYzIg
aW4gdGhlIHNoYWRlciBmcm9tIGEgVmVjdG9yMi4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUg
dGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisgICAgICog
QHBhcmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUgdW5pZm9ybQorICAg
ICAqIEByZXR1cm4gdGhlIHRleHR1cmUgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQiIGxpa2UgdW5p
Zm9ybSB1cGRhdGVzCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLnNl
dFZlY3RvcjIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5fY2hlY2tV
bmlmb3JtKG5hbWUpOworICAgICAgICB0aGlzLl92ZWN0b3JzMltuYW1lXSA9IHZhbHVlOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIHZlYzMgaW4g
dGhlIHNoYWRlciBmcm9tIGEgVmVjdG9yMy4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhl
IG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisgICAgICogQHBh
cmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUgdW5pZm9ybQorICAgICAq
IEByZXR1cm4gdGhlIHRleHR1cmUgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQiIGxpa2UgdW5pZm9y
bSB1cGRhdGVzCisgICAgICovCisgICAgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLnNldFZl
Y3RvcjMgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5fY2hlY2tVbmlm
b3JtKG5hbWUpOworICAgICAgICB0aGlzLl92ZWN0b3JzM1tuYW1lXSA9IHZhbHVlOworICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIG1hdDQgaW4gdGhl
IHNoYWRlciBmcm9tIGEgTUF0cml4LgorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFt
ZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0g
dmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1bmlmb3JtCisgICAgICogQHJl
dHVybiB0aGUgdGV4dHVyZSBpdHNlbGYgYWxsb3dpbmcgImZsdWVudCIgbGlrZSB1bmlmb3JtIHVw
ZGF0ZXMKKyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUuc2V0TWF0cml4
ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2NoZWNrVW5pZm9ybShu
YW1lKTsKKyAgICAgICAgdGhpcy5fbWF0cmljZXNbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXIgdGhlIHRleHR1cmUgdG8g
aXRzIGFzc29jaWF0ZWQgcmVuZGVyIHRhcmdldC4KKyAgICAgKiBAcGFyYW0gdXNlQ2FtZXJhUG9z
dFByb2Nlc3MgRGVmaW5lIGlmIGNhbWVyYSBwb3N0IHByb2Nlc3Mgc2hvdWxkIGJlIGFwcGxpZWQg
dG8gdGhlIHRleHR1cmUKKyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUu
cmVuZGVyID0gZnVuY3Rpb24gKHVzZUNhbWVyYVBvc3RQcm9jZXNzKSB7CisgICAgICAgIHZhciBz
Y2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9lbmdpbmU7
CisgICAgICAgIC8vIFJlbmRlcgorICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KHRoaXMuX2Vm
ZmVjdCk7CisgICAgICAgIGVuZ2luZS5zZXRTdGF0ZShmYWxzZSk7CisgICAgICAgIC8vIFRleHR1
cmUKKyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykgeworICAgICAgICAg
ICAgdGhpcy5fZWZmZWN0LnNldFRleHR1cmUobmFtZSwgdGhpcy5fdGV4dHVyZXNbbmFtZV0pOwor
ICAgICAgICB9CisgICAgICAgIC8vIEZsb2F0CisgICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl9p
bnRzKSB7CisgICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0SW50KG5hbWUsIHRoaXMuX2ludHNb
bmFtZV0pOworICAgICAgICB9CisgICAgICAgIC8vIEZsb2F0CisgICAgICAgIGZvciAobmFtZSBp
biB0aGlzLl9mbG9hdHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRGbG9hdChuYW1l
LCB0aGlzLl9mbG9hdHNbbmFtZV0pOworICAgICAgICB9CisgICAgICAgIC8vIEZsb2F0cworICAg
ICAgICBmb3IgKG5hbWUgaW4gdGhpcy5fZmxvYXRzQXJyYXlzKSB7CisgICAgICAgICAgICB0aGlz
Ll9lZmZlY3Quc2V0QXJyYXkobmFtZSwgdGhpcy5fZmxvYXRzQXJyYXlzW25hbWVdKTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBDb2xvcjMKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX2NvbG9y
czMpIHsKKyAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRDb2xvcjMobmFtZSwgdGhpcy5fY29s
b3JzM1tuYW1lXSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29sb3I0CisgICAgICAgIGZvciAo
bmFtZSBpbiB0aGlzLl9jb2xvcnM0KSB7CisgICAgICAgICAgICB2YXIgY29sb3IgPSB0aGlzLl9j
b2xvcnM0W25hbWVdOworICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldEZsb2F0NChuYW1lLCBj
b2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBWZWN0b3IyCisgICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl92ZWN0b3JzMikgeworICAgICAg
ICAgICAgdGhpcy5fZWZmZWN0LnNldFZlY3RvcjIobmFtZSwgdGhpcy5fdmVjdG9yczJbbmFtZV0p
OworICAgICAgICB9CisgICAgICAgIC8vIFZlY3RvcjMKKyAgICAgICAgZm9yIChuYW1lIGluIHRo
aXMuX3ZlY3RvcnMzKSB7CisgICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0VmVjdG9yMyhuYW1l
LCB0aGlzLl92ZWN0b3JzM1tuYW1lXSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTWF0cml4Cisg
ICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl9tYXRyaWNlcykgeworICAgICAgICAgICAgdGhpcy5f
ZWZmZWN0LnNldE1hdHJpeChuYW1lLCB0aGlzLl9tYXRyaWNlc1tuYW1lXSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuaXNDdWJlKSB7CisgICAgICAgICAgICBmb3IgKHZhciBm
YWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykgeworICAgICAgICAgICAgICAgIGVuZ2luZS5iaW5k
RnJhbWVidWZmZXIodGhpcy5fdGV4dHVyZSwgZmFjZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRy
dWUpOworICAgICAgICAgICAgICAgIC8vIFZCT3MKKyAgICAgICAgICAgICAgICBlbmdpbmUuYmlu
ZEJ1ZmZlcnModGhpcy5fdmVydGV4QnVmZmVycywgdGhpcy5faW5kZXhCdWZmZXIsIHRoaXMuX2Vm
ZmVjdCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldEZsb2F0KCJmYWNlIiwgZmFj
ZSk7CisgICAgICAgICAgICAgICAgLy8gQ2xlYXIKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5h
dXRvQ2xlYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZW5naW5lLmNsZWFyKHNjZW5lLmNsZWFy
Q29sb3IsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIERyYXcgb3JkZXIKKyAgICAgICAgICAgICAgICBlbmdpbmUuZHJhd0VsZW1lbnRz
VHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1h
dGVyaWFsIl0uVHJpYW5nbGVGaWxsTW9kZSwgMCwgNik7CisgICAgICAgICAgICAgICAgLy8gTWlw
bWFwcworICAgICAgICAgICAgICAgIGlmIChmYWNlID09PSA1KSB7CisgICAgICAgICAgICAgICAg
ICAgIGVuZ2luZS5nZW5lcmF0ZU1pcE1hcHNGb3JDdWJlbWFwKHRoaXMuX3RleHR1cmUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGVuZ2luZS5iaW5kRnJhbWVidWZmZXIodGhpcy5fdGV4dHVyZSwgMCwgdW5k
ZWZpbmVkLCB1bmRlZmluZWQsIHRydWUpOworICAgICAgICAgICAgLy8gVkJPcworICAgICAgICAg
ICAgZW5naW5lLmJpbmRCdWZmZXJzKHRoaXMuX3ZlcnRleEJ1ZmZlcnMsIHRoaXMuX2luZGV4QnVm
ZmVyLCB0aGlzLl9lZmZlY3QpOworICAgICAgICAgICAgLy8gQ2xlYXIKKyAgICAgICAgICAgIGlm
ICh0aGlzLmF1dG9DbGVhcikgeworICAgICAgICAgICAgICAgIGVuZ2luZS5jbGVhcihzY2VuZS5j
bGVhckNvbG9yLCB0cnVlLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gRHJhdyBvcmRlcgorICAgICAgICAgICAgZW5naW5lLmRyYXdFbGVtZW50c1R5cGUoX01h
dGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlhbCJd
LlRyaWFuZ2xlRmlsbE1vZGUsIDAsIDYpOworICAgICAgICB9CisgICAgICAgIC8vIFVuYmluZAor
ICAgICAgICBlbmdpbmUudW5CaW5kRnJhbWVidWZmZXIodGhpcy5fdGV4dHVyZSwgdGhpcy5pc0N1
YmUpOworICAgICAgICBpZiAodGhpcy5vbkdlbmVyYXRlZCkgeworICAgICAgICAgICAgdGhpcy5v
bkdlbmVyYXRlZCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMub25HZW5lcmF0ZWRPYnNlcnZh
YmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25l
IHRoZSB0ZXh0dXJlLgorICAgICAqIEByZXR1cm5zIHRoZSBjbG9uZWQgdGV4dHVyZQorICAgICAq
LworICAgIFByb2NlZHVyYWxUZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdmFyIHRleHR1cmVTaXplID0gdGhpcy5nZXRTaXplKCk7CisgICAgICAgIHZhciBu
ZXdUZXh0dXJlID0gbmV3IFByb2NlZHVyYWxUZXh0dXJlKHRoaXMubmFtZSwgdGV4dHVyZVNpemUu
d2lkdGgsIHRoaXMuX2ZyYWdtZW50LCB0aGlzLmdldFNjZW5lKCksIHRoaXMuX2ZhbGxiYWNrVGV4
dHVyZSwgdGhpcy5fZ2VuZXJhdGVNaXBNYXBzKTsKKyAgICAgICAgLy8gQmFzZSB0ZXh0dXJlCisg
ICAgICAgIG5ld1RleHR1cmUuaGFzQWxwaGEgPSB0aGlzLmhhc0FscGhhOworICAgICAgICBuZXdU
ZXh0dXJlLmxldmVsID0gdGhpcy5sZXZlbDsKKyAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IFRleHR1
cmUKKyAgICAgICAgbmV3VGV4dHVyZS5jb29yZGluYXRlc01vZGUgPSB0aGlzLmNvb3JkaW5hdGVz
TW9kZTsKKyAgICAgICAgcmV0dXJuIG5ld1RleHR1cmU7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBEaXNwb3NlIHRoZSB0ZXh0dXJlIGFuZCByZWxlYXNlIGl0cyBhc29vY2lhdGVkIHJlc291cmNl
cy4KKyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAg
ICBpZiAoIXNjZW5lKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGluZGV4ID0gc2NlbmUucHJvY2VkdXJhbFRleHR1cmVzLmluZGV4T2YodGhpcyk7CisgICAg
ICAgIGlmIChpbmRleCA+PSAwKSB7CisgICAgICAgICAgICBzY2VuZS5wcm9jZWR1cmFsVGV4dHVy
ZXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgdmVydGV4QnVmZmVy
ID0gdGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdOworICAgICAgICBpZiAodmVy
dGV4QnVmZmVyKSB7CisgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXIuZGlzcG9zZSgpOworICAgICAg
ICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdID0gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5faW5kZXhCdWZmZXIgJiYgdGhpcy5fZW5naW5lLl9yZWxl
YXNlQnVmZmVyKHRoaXMuX2luZGV4QnVmZmVyKSkgeworICAgICAgICAgICAgdGhpcy5faW5kZXhC
dWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9z
ZS5jYWxsKHRoaXMpOworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBQcm9jZWR1
cmFsVGV4dHVyZS5wcm90b3R5cGUsICJpc0VuYWJsZWQiLCB2b2lkIDApOworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6
ZSJdKSgpCisgICAgXSwgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLCAiYXV0b0NsZWFyIiwg
dm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29y
YXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFByb2NlZHVyYWxUZXh0dXJlLnBy
b3RvdHlwZSwgIl9nZW5lcmF0ZU1pcE1hcHMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgp
CisgICAgXSwgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLCAiX3NpemUiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgUHJvY2VkdXJhbFRleHR1cmUucHJvdG90eXBlLCAi
cmVmcmVzaFJhdGUiLCBudWxsKTsKKyAgICByZXR1cm4gUHJvY2VkdXJhbFRleHR1cmU7Cit9KF9N
YXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJU
ZXh0dXJlIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVy
ZXMvUHJvY2VkdXJhbHMvcHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1
cmFscy9wcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29tcG9uZW50LnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQcm9jZWR1cmFsVGV4dHVyZVNjZW5l
Q29tcG9uZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlByb2NlZHVy
YWxUZXh0dXJlU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFByb2NlZHVyYWxU
ZXh0dXJlU2NlbmVDb21wb25lbnQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNj
X3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9NaXNjL3Rvb2xzICovICIuL01pc2MvdG9vbHMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL3NjZW5lQ29tcG9uZW50ICov
ICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisKKworLyoqCisgKiBEZWZpbmVzIHRoZSBQcm9jZWR1
cmFsIFRleHR1cmUgc2NlbmUgY29tcG9uZW50IHJlc3BvbnNpYmxlIHRvIG1hbmFnZSBhbnkgUHJv
Y2VkdXJhbCBUZXh0dXJlCisgKiBpbiBhIGdpdmVuIHNjZW5lLgorICovCit2YXIgUHJvY2VkdXJh
bFRleHR1cmVTY2VuZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgZm9y
IHRoZSBnaXZlbiBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0
byByZWdpc3RlciB0aGUgY29tcG9uZW50IGluCisgICAgICovCisgICAgZnVuY3Rpb24gUHJvY2Vk
dXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudChzY2VuZSkgeworICAgICAgICAvKioKKyAgICAgICAg
ICogVGhlIGNvbXBvbmVudCBuYW1lIGhlbHBmdWxsIHRvIGlkZW50aWZ5IHRoZSBjb21wb25lbnQg
aW4gdGhlIGxpc3Qgb2Ygc2NlbmUgY29tcG9uZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMubmFtZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
Y2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfUFJPQ0VEVVJBTFRFWFRVUkU7CisgICAgICAg
IHRoaXMuc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgdGhpcy5zY2VuZS5wcm9jZWR1cmFsVGV4dHVy
ZXMgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBj
b21wb25lbnQgaW4gYSBnaXZlbiBzY2VuZQorICAgICAqLworICAgIFByb2NlZHVyYWxUZXh0dXJl
U2NlbmVDb21wb25lbnQucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB0aGlzLnNjZW5lLl9iZWZvcmVDbGVhclN0YWdlLnJlZ2lzdGVyU3RlcChfc2NlbmVDb21wb25l
bnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMi
XS5TVEVQX0JFRk9SRUNMRUFSX1BST0NFRFVSQUxURVhUVVJFLCB0aGlzLCB0aGlzLl9iZWZvcmVD
bGVhcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWJ1aWxkcyB0aGUgZWxlbWVudHMgcmVs
YXRlZCB0byB0aGlzIGNvbXBvbmVudCBpbiBjYXNlIG9mCisgICAgICogY29udGV4dCBsb3N0IGZv
ciBpbnN0YW5jZS4KKyAgICAgKi8KKyAgICBQcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29tcG9uZW50
LnByb3RvdHlwZS5yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBOb3RoaW5nIHRv
IGRvIGhlcmUuCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgY29tcG9uZW50
IGFuZCB0aGUgYXNzb2NpYXRlZCByZXNzb3VyY2VzLgorICAgICAqLworICAgIFByb2NlZHVyYWxU
ZXh0dXJlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICB9OworICAgIFByb2NlZHVyYWxUZXh0
dXJlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLl9iZWZvcmVDbGVhciA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMuc2NlbmUucHJvY2VkdXJhbFRleHR1cmVzRW5hYmxlZCkgeworICAg
ICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMi
XS5TdGFydFBlcmZvcm1hbmNlQ291bnRlcigiUHJvY2VkdXJhbCB0ZXh0dXJlcyIsIHRoaXMuc2Nl
bmUucHJvY2VkdXJhbFRleHR1cmVzLmxlbmd0aCA+IDApOworICAgICAgICAgICAgZm9yICh2YXIg
cHJvY2VkdXJhbEluZGV4ID0gMDsgcHJvY2VkdXJhbEluZGV4IDwgdGhpcy5zY2VuZS5wcm9jZWR1
cmFsVGV4dHVyZXMubGVuZ3RoOyBwcm9jZWR1cmFsSW5kZXgrKykgeworICAgICAgICAgICAgICAg
IHZhciBwcm9jZWR1cmFsVGV4dHVyZSA9IHRoaXMuc2NlbmUucHJvY2VkdXJhbFRleHR1cmVzW3By
b2NlZHVyYWxJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKHByb2NlZHVyYWxUZXh0dXJlLl9z
aG91bGRSZW5kZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBwcm9jZWR1cmFsVGV4dHVyZS5y
ZW5kZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBf
TWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLkVuZFBlcmZv
cm1hbmNlQ291bnRlcigiUHJvY2VkdXJhbCB0ZXh0dXJlcyIsIHRoaXMuc2NlbmUucHJvY2VkdXJh
bFRleHR1cmVzLmxlbmd0aCA+IDApOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gUHJv
Y2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2Jhc2VUZXh0dXJlLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFs
cy9UZXh0dXJlcy9iYXNlVGV4dHVyZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJhc2VUZXh0dXJl
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VUZXh0dXJlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBCYXNlVGV4dHVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0
b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFi
bGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19IaWdoRHluYW1pY1Jhbmdl
X2N1YmVtYXBUb1NwaGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvSGlnaER5bmFtaWNSYW5nZS9j
dWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsICovICIuL01pc2MvSGlnaER5bmFtaWNSYW5nZS9j
dWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2lu
ZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5lU3RvcmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0Vu
Z2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01pc2NfZ3VpZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9ndWlkICovICIuL01pc2MvZ3VpZC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3NpemVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhz
L21hdGguc2l6ZSAqLyAiLi9NYXRocy9tYXRoLnNpemUudHMiKTsKKworCisKKworCisKKworCisK
Ky8qKgorICogQmFzZSBjbGFzcyBvZiBhbGwgdGhlIHRleHR1cmVzIGluIGJhYnlsb24uCisgKiBJ
dCBncm91cHMgYWxsIHRoZSBjb21tb24gcHJvcGVydGllcyB0aGUgbWF0ZXJpYWxzLCBwb3N0IHBy
b2Nlc3MsIGxpZ2h0cy4uLiBtaWdodCBuZWVkCisgKiBpbiBvcmRlciB0byBtYWtlIGEgY29ycmVj
dCB1c2Ugb2YgdGhlIHRleHR1cmUuCisgKi8KK3ZhciBCYXNlVGV4dHVyZSA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgQmFz
ZVRleHR1cmUuCisgICAgICogQmFzZSBjbGFzcyBvZiBhbGwgdGhlIHRleHR1cmVzIGluIGJhYnls
b24uCisgICAgICogSXQgZ3JvdXBzIGFsbCB0aGUgY29tbW9uIHByb3BlcnRpZXMgdGhlIG1hdGVy
aWFscywgcG9zdCBwcm9jZXNzLCBsaWdodHMuLi4gbWlnaHQgbmVlZAorICAgICAqIGluIG9yZGVy
IHRvIG1ha2UgYSBjb3JyZWN0IHVzZSBvZiB0aGUgdGV4dHVyZS4KKyAgICAgKiBAcGFyYW0gc2Nl
bmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBibG9uZ3MgdG8KKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBCYXNlVGV4dHVyZShzY2VuZSkgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBvciBzZXRzIGFuIG9iamVjdCB1c2VkIHRvIHN0b3JlIHVzZXIgZGVmaW5lZCBpbmZvcm1hdGlv
bi4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubWV0YWRhdGEgPSBudWxsOworICAgICAgICAv
KioKKyAgICAgICAgICogRm9yIGludGVybmFsIHVzZSBvbmx5LiBQbGVhc2UgZG8gbm90IHVzZS4K
KyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVzZXJ2ZWREYXRhU3RvcmUgPSBudWxsOworICAg
ICAgICB0aGlzLl9oYXNBbHBoYSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVm
aW5lcyBpZiB0aGUgYWxwaGEgdmFsdWUgc2hvdWxkIGJlIGRldGVybWluZWQgdmlhIHRoZSByZ2Ig
dmFsdWVzLgorICAgICAgICAgKiBJZiB0cnVlIHRoZSBsdW1pbmFuY2Ugb2YgdGhlIHBpeGVsIG1p
Z2h0IGJlIHVzZWQgdG8gZmluZCB0aGUgY29ycmVzcG9uZGluZyBhbHBoYSB2YWx1ZS4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuZ2V0QWxwaGFGcm9tUkdCID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBJbnRlbnNpdHkgb3Igc3RyZW5ndGggb2YgdGhlIHRleHR1cmUuCisgICAg
ICAgICAqIEl0IGlzIGNvbW1vbmx5IHVzZWQgYnkgbWF0ZXJpYWxzIHRvIGZpbmUgdHVuZSB0aGUg
aW50ZW5zaXR5IG9mIHRoZSB0ZXh0dXJlCisgICAgICAgICAqLworICAgICAgICB0aGlzLmxldmVs
ID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0aGUgVVYgY2hhbmVsIHRvIHVz
ZSBzdGFydGluZyBmcm9tIDAgYW5kIGRlZmF1bHRpbmcgdG8gMC4KKyAgICAgICAgICogVGhpcyBp
cyBwYXJ0IG9mIHRoZSB0ZXh0dXJlIGFzIHRleHR1cmVzIHVzdWFsbHkgbWFwcyB0byBvbmUgdXYg
c2V0LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5jb29yZGluYXRlc0luZGV4ID0gMDsKKyAg
ICAgICAgdGhpcy5fY29vcmRpbmF0ZXNNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfRVhQTElDSVRfTU9ERTsK
KyAgICAgICAgLyoqCisgICAgICAgICogfCBWYWx1ZSB8IFR5cGUgICAgICAgICAgICAgICB8IERl
c2NyaXB0aW9uIHwKKyAgICAgICAgKiB8IC0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0t
LS0tLS0tLS0gfAorICAgICAgICAqIHwgMCAgICAgfCBDTEFNUF9BRERSRVNTTU9ERSAgfCAgICAg
ICAgICAgICB8CisgICAgICAgICogfCAxICAgICB8IFdSQVBfQUREUkVTU01PREUgICB8ICAgICAg
ICAgICAgIHwKKyAgICAgICAgKiB8IDIgICAgIHwgTUlSUk9SX0FERFJFU1NNT0RFIHwgICAgICAg
ICAgICAgfAorICAgICAgICAqLworICAgICAgICB0aGlzLndyYXBVID0gX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfV1JB
UF9BRERSRVNTTU9ERTsKKyAgICAgICAgLyoqCisgICAgICAgICogfCBWYWx1ZSB8IFR5cGUgICAg
ICAgICAgICAgICB8IERlc2NyaXB0aW9uIHwKKyAgICAgICAgKiB8IC0tLS0tIHwgLS0tLS0tLS0t
LS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfAorICAgICAgICAqIHwgMCAgICAgfCBDTEFNUF9BRERS
RVNTTU9ERSAgfCAgICAgICAgICAgICB8CisgICAgICAgICogfCAxICAgICB8IFdSQVBfQUREUkVT
U01PREUgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgKiB8IDIgICAgIHwgTUlSUk9SX0FERFJF
U1NNT0RFIHwgICAgICAgICAgICAgfAorICAgICAgICAqLworICAgICAgICB0aGlzLndyYXBWID0g
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50
cyJdLlRFWFRVUkVfV1JBUF9BRERSRVNTTU9ERTsKKyAgICAgICAgLyoqCisgICAgICAgICogfCBW
YWx1ZSB8IFR5cGUgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uIHwKKyAgICAgICAgKiB8IC0t
LS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfAorICAgICAgICAqIHwgMCAg
ICAgfCBDTEFNUF9BRERSRVNTTU9ERSAgfCAgICAgICAgICAgICB8CisgICAgICAgICogfCAxICAg
ICB8IFdSQVBfQUREUkVTU01PREUgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgKiB8IDIgICAg
IHwgTUlSUk9SX0FERFJFU1NNT0RFIHwgICAgICAgICAgICAgfAorICAgICAgICAqLworICAgICAg
ICB0aGlzLndyYXBSID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfV1JBUF9BRERSRVNTTU9ERTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFdpdGggY29tcGxpYW50IGhhcmR3YXJlIGFuZCBicm93c2VyIChzdXBwb3J0
aW5nIGFuaXNvdHJvcGljIGZpbHRlcmluZykKKyAgICAgICAgICogdGhpcyBkZWZpbmVzIHRoZSBs
ZXZlbCBvZiBhbmlzb3Ryb3BpYyBmaWx0ZXJpbmcgaW4gdGhlIHRleHR1cmUuCisgICAgICAgICAq
IFRoZSBoaWdoZXIgdGhlIGJldHRlciBidXQgdGhlIHNsb3dlci4gVGhpcyBkZWZhdWx0cyB0byA0
IGFzIGl0IHNlZW1zIHRvIGJlIHRoZSBiZXN0IHRyYWRlb2ZmLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5hbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsID0gQmFzZVRleHR1cmUuREVGQVVMVF9B
TklTT1RST1BJQ19GSUxURVJJTkdfTEVWRUw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZp
bmUgaWYgdGhlIHRleHR1cmUgY29udGFpbnMgZGF0YSBpbiBnYW1tYSBzcGFjZSAobW9zdCBvZiB0
aGUgcG5nL2pwZyBhc2lkZSBidW1wKS4KKyAgICAgICAgICogSERSIHRleHR1cmUgYXJlIHVzdWFs
bHkgc3RvcmVkIGluIGxpbmVhciBzcGFjZS4KKyAgICAgICAgICogVGhpcyBvbmx5IGltcGFjdHMg
dGhlIFBCUiBhbmQgQmFja2dyb3VuZCBtYXRlcmlhbHMKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuZ2FtbWFTcGFjZSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJcyBaIGludmVy
dGVkIGluIHRoZSB0ZXh0dXJlICh1c2VmdWwgaW4gYSBjdWJlIHRleHR1cmUpLgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5pbnZlcnRaID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBAaGlkZGVuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmxvZExldmVsSW5BbHBoYSA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGlmIHRoZSB0ZXh0dXJlIGlzIGEg
cmVuZGVyIHRhcmdldC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaXNSZW5kZXJUYXJnZXQg
PSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0aGUgbGlzdCBvZiBhbmlt
YXRpb24gYXR0YWNoZWQgdG8gdGhlIHRleHR1cmUuCisgICAgICAgICAqLworICAgICAgICB0aGlz
LmFuaW1hdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZl
bnQgdHJpZ2dlcmVkIHdoZW4gdGhlIHRleHR1cmUgaXMgZGlzcG9zZWQuCisgICAgICAgICovCisg
ICAgICAgIHRoaXMub25EaXNwb3NlT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0aGlz
Ll9vbkRpc3Bvc2VPYnNlcnZlciA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZp
bmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGxvYWRpbmcgc2VxdWVuY2Ugd2hlbiBpbiBkZWxh
eWVkIGxvYWQgbW9kZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGVsYXlMb2FkU3RhdGUg
PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3Rh
bnRzIl0uREVMQVlMT0FEU1RBVEVfTk9ORTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBudWxsOwor
ICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5fdWlkID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2FjaGVkU2l6ZSA9IF9NYXRo
c19tYXRoX3NpemVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2l6ZSJdLlplcm8oKTsK
KyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8fCBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7
CisgICAgICAgIGlmICh0aGlzLl9zY2VuZSkgeworICAgICAgICAgICAgdGhpcy51bmlxdWVJZCA9
IHRoaXMuX3NjZW5lLmdldFVuaXF1ZUlkKCk7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5hZGRU
ZXh0dXJlKHRoaXMpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VpZCA9IG51bGw7CisgICAg
fQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90b3R5cGUsICJoYXNB
bHBoYSIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5faGFzQWxwaGE7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZp
bmUgaWYgdGhlIHRleHR1cmUgaXMgaGF2aW5nIGEgdXNhYmxlIGFscGhhIHZhbHVlIChjYW4gYmUg
dXNlIGZvciB0cmFuc3BhcmVuY3kgb3IgZ2xvc3NpbmVzcyBmb3IgaW5zdGFuY2UpLgorICAgICAg
ICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9oYXNBbHBoYSA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9oYXNBbHBoYSA9IHZhbHVlOworICAgICAgICAg
ICAgaWYgKHRoaXMuX3NjZW5lKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUubWFya0Fs
bE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV82X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RleHR1cmVEaXJ0eUZsYWcgfCBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uTUFU
RVJJQUxfTWlzY0RpcnR5RmxhZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90b3R5cGUsICJjb29yZGlu
YXRlc01vZGUiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2Nvb3JkaW5hdGVzTW9kZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAg
ICAgICogSG93IGEgdGV4dHVyZSBpcyBtYXBwZWQuCisgICAgICAgICoKKyAgICAgICAgKiB8IFZh
bHVlIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiB8
CisgICAgICAgICogfCAtLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IHwgLS0tLS0tLS0tLS0gfAorICAgICAgICAqIHwgMCAgICAgfCBFWFBMSUNJVF9NT0RFICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgKiB8IDEgICAgIHwgU1BI
RVJJQ0FMX01PREUgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAg
ICogfCAyICAgICB8IFBMQU5BUl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg
ICAgICAgfAorICAgICAgICAqIHwgMyAgICAgfCBDVUJJQ19NT0RFICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgKiB8IDQgICAgIHwgUFJPSkVDVElPTl9N
T0RFICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAgICogfCA1ICAg
ICB8IFNLWUJPWF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfAor
ICAgICAgICAqIHwgNiAgICAgfCBJTlZDVUJJQ19NT0RFICAgICAgICAgICAgICAgICAgICAgICB8
ICAgICAgICAgICAgIHwKKyAgICAgICAgKiB8IDcgICAgIHwgRVFVSVJFQ1RBTkdVTEFSX01PREUg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAgICogfCA4ICAgICB8IEZJWEVE
X0VRVUlSRUNUQU5HVUxBUl9NT0RFICAgICAgICAgIHwgICAgICAgICAgICAgfAorICAgICAgICAq
IHwgOSAgICAgfCBGSVhFRF9FUVVJUkVDVEFOR1VMQVJfTUlSUk9SRURfTU9ERSB8ICAgICAgICAg
ICAgIHwKKyAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg
ICAgICAgIGlmICh0aGlzLl9jb29yZGluYXRlc01vZGUgPT09IHZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY29vcmRpbmF0
ZXNNb2RlID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9zY2VuZS5tYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxf
VGV4dHVyZURpcnR5RmxhZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90b3R5cGUsICJpc0N1YmUiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgaWYgdGhlIHRleHR1cmUgaXMgYSBjdWJl
IHRleHR1cmUgb3IgaWYgZmFsc2UgYSAyZCB0ZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmUpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fdGV4dHVyZS5pc0N1YmU7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmUpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl90ZXh0
dXJlLmlzQ3ViZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoQmFzZVRleHR1cmUucHJvdG90eXBlLCAiaXMzRCIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIERlZmluZSBpZiB0aGUgdGV4dHVyZSBpcyBhIDNkIHRleHR1cmUgKHdlYmdsIDIp
IG9yIGlmIGZhbHNlIGEgMmQgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3RleHR1cmUuaXMzRDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3RleHR1cmUuaXMzRCA9
IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFz
ZVRleHR1cmUucHJvdG90eXBlLCAiaXNSR0JEIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyBvciBzZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGNvbnRhaW5zIFJHQkQgZGF0
YS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3RleHR1cmUgIT0gbnVsbCAmJiB0aGlzLl90ZXh0dXJlLl9pc1JHQkQ7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmUuX2lzUkdC
RCA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoQmFzZVRleHR1cmUucHJvdG90eXBlLCAibm9NaXBtYXAiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBBcmUgbWlwIG1hcHMgZ2VuZXJhdGVkIGZvciB0aGlzIHRleHR1
cmUgb3Igbm90LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90b3R5cGUsICJsb2RHZW5lcmF0aW9uT2Zmc2V0Iiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogV2l0aCBwcmVmaWx0ZXJlZCB0ZXh0dXJlLCBkZWZp
bmVkIHRoZSBvZmZzZXQgdXNlZCBkdXJpbmcgdGhlIHByZWZpbHRlcmluZyBzdGVwcy4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRoaXMu
X3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZS5fbG9kR2Vu
ZXJhdGlvbk9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwLjA7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmUuX2xvZEdl
bmVyYXRpb25PZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgImxvZEdl
bmVyYXRpb25TY2FsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFdpdGggcHJlZmlsdGVy
ZWQgdGV4dHVyZSwgZGVmaW5lZCB0aGUgc2NhbGUgdXNlZCBkdXJpbmcgdGhlIHByZWZpbHRlcmlu
ZyBzdGVwcy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
dGV4dHVyZS5fbG9kR2VuZXJhdGlvblNjYWxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIDAuMDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
dGV4dHVyZS5fbG9kR2VuZXJhdGlvblNjYWxlID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90
b3R5cGUsICJsaW5lYXJTcGVjdWxhckxPRCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFdp
dGggcHJlZmlsdGVyZWQgdGV4dHVyZSwgZGVmaW5lZCBpZiB0aGUgc3BlY3VsYXIgZ2VuZXJhdGlv
biBpcyBiYXNlZCBvbiBhIGxpbmVhciByYW1wLgorICAgICAgICAgKiBCeSBkZWZhdWx0IHdlIGFy
ZSB1c2luZyBhIGxvZzIgb2YgdGhlIGxpbmVhciByb3VnaG5lc3MgaGVscGluZyB0byBrZWVwIGEg
YmV0dGVyIHJlc29sdXRpb24gZm9yCisgICAgICAgICAqIGF2ZXJhZ2Ugcm91Z2huZXNzIHZhbHVl
cy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVy
ZS5fbGluZWFyU3BlY3VsYXJMT0Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1
cmUuX2xpbmVhclNwZWN1bGFyTE9EID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90b3R5cGUs
ICJpcnJhZGlhbmNlVGV4dHVyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEluIGNhc2Ug
YSBiZXR0ZXIgZGVmaW5pdGlvbiB0aGFuIHNwaGVyaWNhbCBoYXJtb25pY3MgaXMgcmVxdWlyZWQg
Zm9yIHRoZSBkaWZmdXNlIHBhcnQgb2YgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgKiBZb3Ug
Y2FuIHNldCB0aGUgaXJyYWRpYW5jZSB0ZXh0dXJlIHRvIHJlbHkgb24gYSB0ZXh0dXJlIGluc3Rl
YWQgb2YgdGhlIHNwaGVyaWNhbCBhcHByb2FjaC4KKyAgICAgICAgICogVGhpcyB0ZXh0dXJlIG5l
ZWQgdG8gaGF2ZSB0aGUgc2FtZSBjaGFyYWN0ZXJpc3RpY3MgdGhhbiBpdHMgcGFyZW50IChDdWJl
IHZzIDJkLCBjb29yZGluYXRlcyBtb2RlLCBHYW1tYS9MaW5lYXIsIFJHQkQpLgorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdGV4
dHVyZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlLl9pcnJhZGlhbmNl
VGV4dHVyZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlLl9pcnJhZGlhbmNl
VGV4dHVyZSA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZVRleHR1cmUucHJvdG90eXBlLCAidWlkIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSB1bmlxdWUgaWQgb2YgdGhlIHRleHR1cmUg
aW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBpZiAoIXRoaXMuX3VpZCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3VpZCA9
IF9NaXNjX2d1aWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siR1VJRCJdLlJhbmRvbUlk
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdWlkOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRp
b24gb2YgdGhlIHRleHR1cmUuCisgICAgICogQHJldHVybnMgdGhlIHRleHR1cmUgYXMgYSBzdHJp
bmcKKyAgICAgKi8KKyAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLm5hbWU7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBHZXQgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIHRleHR1cmUuCisgICAgICogQHJldHVybnMgIkJh
c2VUZXh0dXJlIgorICAgICAqLworICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5nZXRDbGFzc05h
bWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQmFzZVRleHR1cmUiOworICAgIH07
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgIm9uRGlz
cG9zZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxiYWNrIHRyaWdnZXJlZCB3aGVu
IHRoZSB0ZXh0dXJlIGhhcyBiZWVuIGRpc3Bvc2VkLgorICAgICAgICAgKiBLZXB0IGZvciBiYWNr
IGNvbXBhdGliaWxpdHksIHlvdSBjYW4gdXNlIHRoZSBvbkRpc3Bvc2VPYnNlcnZhYmxlIGluc3Rl
YWQuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX29uRGlzcG9zZU9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkRpc3Bvc2VPYnNlcnZlcik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vbkRpc3Bvc2VPYnNlcnZlciA9IHRo
aXMub25EaXNwb3NlT2JzZXJ2YWJsZS5hZGQoY2FsbGJhY2spOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZVRleHR1cmUucHJvdG90eXBlLCAiaXNCbG9j
a2luZyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSBpZiB0aGUgdGV4dHVyZSBp
cyBwcmV2ZW50aW5nYSBtYXRlcmlhbCB0byByZW5kZXIgb3Igbm90LgorICAgICAgICAgKiBJZiBu
b3QgYW5kIHRoZSB0ZXh0dXJlIGlzIG5vdCByZWFkeSwgdGhlIGVuZ2luZSB3aWxsIHVzZSBhIGRl
ZmF1bHQgYmxhY2sgdGV4dHVyZSBpbnN0ZWFkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgLyoqCisgICAgICogR2V0IHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBiZWxvbmdzIHRvLgor
ICAgICAqIEByZXR1cm5zIHRoZSBzY2VuZSBvciBudWxsIGlmIHVuZGVmaW5lZAorICAgICAqLwor
ICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5nZXRTY2VuZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX3NjZW5lOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSB0
ZXh0dXJlIHRyYW5zZm9ybSBtYXRyaXggdXNlZCB0byBvZmZzZXQgdGlsZSB0aGUgdGV4dHVyZSBm
b3IgaXN0YW5jZS4KKyAgICAgKiBAcmV0dXJucyB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4Cisg
ICAgICovCisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmdldFRleHR1cmVNYXRyaXggPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siTWF0cml4Il0uSWRlbnRpdHlSZWFkT25seTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldCB0aGUgdGV4dHVyZSByZWZsZWN0aW9uIG1hdHJpeCB1c2VkIHRvIHJv
dGF0ZS90cmFuc2Zvcm0gdGhlIHJlZmxlY3Rpb24uCisgICAgICogQHJldHVybnMgdGhlIHJlZmxl
Y3Rpb24gbWF0cml4CisgICAgICovCisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmdldFJlZmxl
Y3Rpb25UZXh0dXJlTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdHJpeCJdLklkZW50
aXR5UmVhZE9ubHk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHVuZGVybHlpbmcg
bG93ZXIgbGV2ZWwgdGV4dHVyZSBmcm9tIEJhYnlsb24uCisgICAgICogQHJldHVybnMgdGhlIGlu
c3Rlcm5hbCB0ZXh0dXJlCisgICAgICovCisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmdldElu
dGVybmFsVGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1
cmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgaWYgdGhlIHRleHR1cmUgaXMgcmVhZHkg
dG8gYmUgY29uc3VtZWQgKGVpdGhlciBpdCBpcyByZWFkeSBvciBpdCBpcyBub3QgYmxvY2tpbmcp
CisgICAgICogQHJldHVybnMgdHJ1ZSBpZiByZWFkeSBvciBub3QgYmxvY2tpbmcKKyAgICAgKi8K
KyAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuaXNSZWFkeU9yTm90QmxvY2tpbmcgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiAhdGhpcy5pc0Jsb2NraW5nIHx8IHRoaXMuaXNSZWFkeSgp
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGlmIHRoZSB0ZXh0dXJlIGlzIHJlYWR5IHRv
IGJlIHVzZWQgKGRvd25sb2FkZWQsIGNvbnZlcnRlZCwgbWlwIG1hcHBlZC4uLikuCisgICAgICog
QHJldHVybnMgdHJ1ZSBpZiBmdWxseSByZWFkeQorICAgICAqLworICAgIEJhc2VUZXh0dXJlLnBy
b3RvdHlwZS5pc1JlYWR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5kZWxheUxv
YWRTdGF0ZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82
X19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNUQVRFX05PVExPQURFRCkgeworICAgICAgICAgICAg
dGhpcy5kZWxheUxvYWQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Rl
eHR1cmUuaXNSZWFkeTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHNpemUgb2YgdGhlIHRleHR1cmUuCisgICAgICogQHJl
dHVybnMgdGhlIHRleHR1cmUgc2l6ZS4KKyAgICAgKi8KKyAgICBCYXNlVGV4dHVyZS5wcm90b3R5
cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlLndpZHRoKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fY2FjaGVkU2l6ZS53aWR0aCA9IHRoaXMuX3RleHR1cmUud2lkdGg7CisgICAgICAgICAg
ICAgICAgdGhpcy5fY2FjaGVkU2l6ZS5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLmhlaWdodDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkU2l6ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlLl9zaXplKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fY2FjaGVkU2l6ZS53aWR0aCA9IHRoaXMuX3RleHR1cmUuX3NpemU7CisgICAgICAgICAgICAg
ICAgdGhpcy5fY2FjaGVkU2l6ZS5oZWlnaHQgPSB0aGlzLl90ZXh0dXJlLl9zaXplOworICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRTaXplOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRTaXplOworICAgIH07CisgICAgLyoqCisg
ICAgICogR2V0IHRoZSBiYXNlIHNpemUgb2YgdGhlIHRleHR1cmUuCisgICAgICogSXQgY2FuIGJl
IGRpZmZlcmVudCBmcm9tIHRoZSBzaXplIGlmIHRoZSB0ZXh0dXJlIGhhcyBiZWVuIHJlc2l6ZWQg
Zm9yIFBPVCBmb3IgaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJucyB0aGUgYmFzZSBzaXplCisgICAg
ICovCisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmdldEJhc2VTaXplID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSgpIHx8ICF0aGlzLl90ZXh0dXJlKSB7CisgICAg
ICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfc2l6ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJTaXplIl0uWmVybygpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl90ZXh0dXJl
Ll9zaXplKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IF9NYXRoc19tYXRoX3NpemVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siU2l6ZSJdKHRoaXMuX3RleHR1cmUuX3NpemUsIHRoaXMu
X3RleHR1cmUuX3NpemUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgX01hdGhzX21h
dGhfc2l6ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJTaXplIl0odGhpcy5fdGV4dHVy
ZS5iYXNlV2lkdGgsIHRoaXMuX3RleHR1cmUuYmFzZUhlaWdodCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgICAgICAgKiBVcGRhdGUgdGhlIHNhbXBsaW5nIG1vZGUgb2YgdGhlIHRleHR1cmUuCisg
ICAgICAgICAgICogRGVmYXVsdCBpcyBUcmlsaW5lYXIgbW9kZS4KKyAgICAgICAgICAgKgorICAg
ICAgICAgICAqIHwgVmFsdWUgfCBUeXBlICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiB8Cisg
ICAgICAgICAgICogfCAtLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHwK
KyAgICAgICAgICAgKiB8IDEgICAgIHwgTkVBUkVTVF9TQU1QTElOR01PREUgb3IgTkVBUkVTVF9O
RUFSRVNUX01JUExJTkVBUiAgfCBOZWFyZXN0IGlzOiBtYWcgPSBuZWFyZXN0LCBtaW4gPSBuZWFy
ZXN0LCBtaXAgPSBsaW5lYXIgfAorICAgICAgICAgICAqIHwgMiAgICAgfCBCSUxJTkVBUl9TQU1Q
TElOR01PREUgb3IgTElORUFSX0xJTkVBUl9NSVBORUFSRVNUIHwgQmlsaW5lYXIgaXM6IG1hZyA9
IGxpbmVhciwgbWluID0gbGluZWFyLCBtaXAgPSBuZWFyZXN0IHwKKyAgICAgICAgICAgKiB8IDMg
ICAgIHwgVFJJTElORUFSX1NBTVBMSU5HTU9ERSBvciBMSU5FQVJfTElORUFSX01JUExJTkVBUiB8
IFRyaWxpbmVhciBpczogbWFnID0gbGluZWFyLCBtaW4gPSBsaW5lYXIsIG1pcCA9IGxpbmVhciB8
CisgICAgICAgICAgICogfCA0ICAgICB8IE5FQVJFU1RfTkVBUkVTVF9NSVBORUFSRVNUIHwgICAg
ICAgICAgICAgfAorICAgICAgICAgICAqIHwgNSAgICB8IE5FQVJFU1RfTElORUFSX01JUE5FQVJF
U1QgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICogfCA2ICAgIHwgTkVBUkVTVF9MSU5FQVJf
TUlQTElORUFSIHwgICAgICAgICAgICAgfAorICAgICAgICAgICAqIHwgNyAgICB8IE5FQVJFU1Rf
TElORUFSIHwgICAgICAgICAgICAgfAorICAgICAgICAgICAqIHwgOCAgICB8IE5FQVJFU1RfTkVB
UkVTVCB8ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgKiB8IDkgICB8IExJTkVBUl9ORUFSRVNU
X01JUE5FQVJFU1QgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICogfCAxMCAgIHwgTElORUFS
X05FQVJFU1RfTUlQTElORUFSIHwgICAgICAgICAgICAgfAorICAgICAgICAgICAqIHwgMTEgICB8
IExJTkVBUl9MSU5FQVIgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICogfCAxMiAgIHwgTElO
RUFSX05FQVJFU1QgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICoKKyAgICAgICAgICAgKiAg
ICA+IF9tYWdfOiBtYWduaWZpY2F0aW9uIGZpbHRlciAoY2xvc2UgdG8gdGhlIHZpZXdlcikKKyAg
ICAgICAgICAgKiAgICA+IF9taW5fOiBtaW5pZmljYXRpb24gZmlsdGVyIChmYXIgZnJvbSB0aGUg
dmlld2VyKQorICAgICAgICAgICAqICAgID4gX21pcF86IGZpbHRlciB1c2VkIGJldHdlZW4gbWlw
IG1hcCBsZXZlbHMKKyAgICAgICAgICAgKkBwYXJhbSBzYW1wbGluZ01vZGUgRGVmaW5lIHRoZSBu
ZXcgc2FtcGxpbmcgbW9kZSBvZiB0aGUgdGV4dHVyZQorICAgICAgICAgICAqLworICAgIEJhc2VU
ZXh0dXJlLnByb3RvdHlwZS51cGRhdGVTYW1wbGluZ01vZGUgPSBmdW5jdGlvbiAoc2FtcGxpbmdN
b2RlKSB7CisgICAgICAgIGlmICghdGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAg
ICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHNjZW5lLmdldEVuZ2luZSgpLnVwZGF0ZVRleHR1cmVTYW1wbGluZ01vZGUoc2FtcGxpbmdNb2Rl
LCB0aGlzLl90ZXh0dXJlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNjYWxlcyB0aGUgdGV4
dHVyZSBpZiBpcyBgY2FuUmVzY2FsZSgpYAorICAgICAqIEBwYXJhbSByYXRpbyB0aGUgcmVzaXpl
IGZhY3RvciB3ZSB3YW50IHRvIHVzZSB0byByZXNjYWxlCisgICAgICovCisgICAgQmFzZVRleHR1
cmUucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHJhdGlvKSB7CisgICAgfTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQmFzZVRleHR1cmUucHJvdG90eXBlLCAiY2FuUmVzY2FsZSIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCBpZiB0aGUgdGV4dHVyZSBjYW4gcmVzY2FsZS4K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEJh
c2VUZXh0dXJlLnByb3RvdHlwZS5fZ2V0RnJvbUNhY2hlID0gZnVuY3Rpb24gKHVybCwgbm9NaXBt
YXAsIHNhbXBsaW5nLCBpbnZlcnRZKSB7CisgICAgICAgIGlmICghdGhpcy5fc2NlbmUpIHsKKyAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciB0ZXh0dXJlc0Nh
Y2hlID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZ2V0TG9hZGVkVGV4dHVyZXNDYWNoZSgpOwor
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGV4dHVyZXNDYWNoZS5sZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlc0NhY2hlRW50cnkgPSB0ZXh0dXJl
c0NhY2hlW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChpbnZlcnRZID09PSB1bmRlZmluZWQgfHwg
aW52ZXJ0WSA9PT0gdGV4dHVyZXNDYWNoZUVudHJ5LmludmVydFkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZXNDYWNoZUVudHJ5LnVybCA9PT0gdXJsICYmIHRleHR1cmVzQ2FjaGVFbnRy
eS5nZW5lcmF0ZU1pcE1hcHMgPT09ICFub01pcG1hcCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXNhbXBsaW5nIHx8IHNhbXBsaW5nID09PSB0ZXh0dXJlc0NhY2hlRW50cnkuc2FtcGxpbmdN
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlc0NhY2hlRW50cnkuaW5jcmVt
ZW50UmVmZXJlbmNlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVz
Q2FjaGVFbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAg
IC8qKiBAaGlkZGVuICovCisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLl9yZWJ1aWxkID0gZnVu
Y3Rpb24gKCkgeworICAgIH07CisgICAgLyoqCisgICAgICogVHJpZ2dlcnMgdGhlIGxvYWQgc2Vx
dWVuY2UgaW4gZGVsYXllZCBsb2FkIG1vZGUuCisgICAgICovCisgICAgQmFzZVRleHR1cmUucHJv
dG90eXBlLmRlbGF5TG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENsb25lcyB0aGUgdGV4dHVyZS4KKyAgICAgKiBAcmV0dXJucyB0aGUgY2xvbmVkIHRleHR1cmUK
KyAgICAgKi8KKyAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgInRleHR1cmVUeXBlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0IHRoZSB0ZXh0dXJlIHVuZGVybHlpbmcgdHlwZSAoSU5ULCBGTE9BVC4uLikK
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYg
KCF0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQ
RV9VTlNJR05FRF9JTlQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gKHRoaXMu
X3RleHR1cmUudHlwZSAhPT0gdW5kZWZpbmVkKSA/IHRoaXMuX3RleHR1cmUudHlwZSA6IF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5U
RVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShCYXNlVGV4dHVyZS5wcm90b3R5cGUsICJ0ZXh0dXJlRm9ybWF0Iiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSB0ZXh0dXJlIHVuZGVybHlpbmcgZm9ybWF0
IChSR0IsIFJHQkEuLi4pCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGlmICghdGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3Rh
bnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuICh0aGlzLl90ZXh0dXJlLmZvcm1hdCAhPT0gdW5kZWZpbmVkKSA/IHRoaXMuX3RleHR1cmUu
Zm9ybWF0IDogX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19b
IkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCQTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqCisgICAgICogUmVhZHMgdGhlIHBpeGVscyBzdG9yZWQgaW4gdGhlIHdlYmdsIHRleHR1cmUg
YW5kIHJldHVybnMgdGhlbSBhcyBhbiBBcnJheUJ1ZmZlci4KKyAgICAgKiBUaGlzIHdpbGwgcmV0
dXJucyBhbiBSR0JBIGFycmF5IGJ1ZmZlciBjb250YWluaW5nIGVpdGhlciBpbiB2YWx1ZXMgKDAt
MjU1KSBvcgorICAgICAqIGZsb2F0IHZhbHVlcyAoMC0xKSBkZXBlbmRpbmcgb2YgdGhlIHVuZGVy
bHlpbmcgYnVmZmVyIHR5cGUuCisgICAgICogQHBhcmFtIGZhY2VJbmRleCBkZWZpbmVzIHRoZSBm
YWNlIG9mIHRoZSB0ZXh0dXJlIHRvIHJlYWQgKGluIGNhc2Ugb2YgY3ViZSB0ZXh0dXJlKQorICAg
ICAqIEBwYXJhbSBsZXZlbCBkZWZpbmVzIHRoZSBMT0QgbGV2ZWwgb2YgdGhlIHRleHR1cmUgdG8g
cmVhZCAoaW4gY2FzZSBvZiBNaXAgTWFwcykKKyAgICAgKiBAcGFyYW0gYnVmZmVyIGRlZmluZXMg
YSB1c2VyIGRlZmluZWQgYnVmZmVyIHRvIGZpbGwgd2l0aCBkYXRhIChjYW4gYmUgbnVsbCkKKyAg
ICAgKiBAcmV0dXJucyBUaGUgQXJyYXkgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHBpeGVscyBkYXRh
LgorICAgICAqLworICAgIEJhc2VUZXh0dXJlLnByb3RvdHlwZS5yZWFkUGl4ZWxzID0gZnVuY3Rp
b24gKGZhY2VJbmRleCwgbGV2ZWwsIGJ1ZmZlcikgeworICAgICAgICBpZiAoZmFjZUluZGV4ID09
PSB2b2lkIDApIHsgZmFjZUluZGV4ID0gMDsgfQorICAgICAgICBpZiAobGV2ZWwgPT09IHZvaWQg
MCkgeyBsZXZlbCA9IDA7IH0KKyAgICAgICAgaWYgKGJ1ZmZlciA9PT0gdm9pZCAwKSB7IGJ1ZmZl
ciA9IG51bGw7IH0KKyAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgp
OworICAgICAgICB2YXIgd2lkdGggPSBzaXplLndpZHRoOworICAgICAgICB2YXIgaGVpZ2h0ID0g
c2l6ZS5oZWlnaHQ7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAg
ICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAobGV2ZWwg
IT0gMCkgeworICAgICAgICAgICAgd2lkdGggPSB3aWR0aCAvIE1hdGgucG93KDIsIGxldmVsKTsK
KyAgICAgICAgICAgIGhlaWdodCA9IGhlaWdodCAvIE1hdGgucG93KDIsIGxldmVsKTsKKyAgICAg
ICAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCk7CisgICAgICAgICAgICBoZWlnaHQgPSBN
YXRoLnJvdW5kKGhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUu
aXNDdWJlKSB7CisgICAgICAgICAgICByZXR1cm4gZW5naW5lLl9yZWFkVGV4dHVyZVBpeGVscyh0
aGlzLl90ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0LCBmYWNlSW5kZXgsIGxldmVsLCBidWZmZXIpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBlbmdpbmUuX3JlYWRUZXh0dXJlUGl4ZWxzKHRoaXMu
X3RleHR1cmUsIHdpZHRoLCBoZWlnaHQsIC0xLCBsZXZlbCwgYnVmZmVyKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFJlbGVhc2UgYW5kIGRlc3Ryb3kgdGhlIHVuZGVybHlpbmcgbG93ZXIgbGV2
ZWwgdGV4dHVyZSBha2EgaW50ZXJuYWxUZXh0dXJlLgorICAgICAqLworICAgIEJhc2VUZXh0dXJl
LnByb3RvdHlwZS5yZWxlYXNlSW50ZXJuYWxUZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAodGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5fdGV4dHVyZS5kaXNwb3Nl
KCk7CisgICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgIH07
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgInNwaGVy
aWNhbFBvbHlub21pYWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgdGhlIHBvbHlu
b21pYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRleHR1cmUgZGF0YS4KKyAgICAgICAgICogVGhp
cyBpcyBtYWlubHkgdXNlIGFzIGEgZmFzdCB3YXkgdG8gcmVjb3ZlciBJQkwgRGlmZnVzZSBpcnJh
ZGlhbmNlIGRhdGEuCisgICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWFybm9wZW5nbC5jb20vUEJS
L0lCTC9EaWZmdXNlLWlycmFkaWFuY2UKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlIHx8ICFfTWlzY19IaWdoRHlu
YW1pY1JhbmdlX2N1YmVtYXBUb1NwaGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbFRvb2xzIl0gfHwgIXRoaXMu
aXNSZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmUuX3NwaGVyaWNhbFBvbHlub21pYWwpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlLl9zcGhlcmljYWxQb2x5bm9taWFsID0KKyAg
ICAgICAgICAgICAgICAgICAgX01pc2NfSGlnaER5bmFtaWNSYW5nZV9jdWJlbWFwVG9TcGhlcmlj
YWxQb2x5bm9taWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkN1YmVNYXBUb1NwaGVy
aWNhbFBvbHlub21pYWxUb29scyJdLkNvbnZlcnRDdWJlTWFwVGV4dHVyZVRvU3BoZXJpY2FsUG9s
eW5vbWlhbCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90
ZXh0dXJlLl9zcGhlcmljYWxQb2x5bm9taWFsOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl90ZXh0dXJlLl9zcGhlcmljYWxQb2x5bm9taWFsID0gdmFsdWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShCYXNlVGV4dHVyZS5wcm90b3R5cGUsICJfbG9kVGV4dHVyZUhpZ2giLCB7CisgICAgICAgIC8q
KiBAaGlkZGVuICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYg
KHRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZS5f
bG9kVGV4dHVyZUhpZ2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VUZXh0dXJl
LnByb3RvdHlwZSwgIl9sb2RUZXh0dXJlTWlkIiwgeworICAgICAgICAvKiogQGhpZGRlbiAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJl
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmUuX2xvZFRleHR1cmVNaWQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgIl9s
b2RUZXh0dXJlTG93IiwgeworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmUuX2xvZFRleHR1cmVMb3c7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisg
ICAgICogRGlzcG9zZSB0aGUgdGV4dHVyZSBhbmQgcmVsZWFzZSBpdHMgYXNzb2NpYXRlZCByZXNv
dXJjZXMuCisgICAgICovCisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIGlmICh0aGlzLl9z
Y2VuZS5zdG9wQW5pbWF0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5zdG9wQW5pbWF0
aW9uKHRoaXMpOworICAgICAgICB9CisgICAgICAgIC8vIFJlbW92ZSBmcm9tIHNjZW5lCisgICAg
ICAgIHRoaXMuX3NjZW5lLl9yZW1vdmVQZW5kaW5nRGF0YSh0aGlzKTsKKyAgICAgICAgdmFyIGlu
ZGV4ID0gdGhpcy5fc2NlbmUudGV4dHVyZXMuaW5kZXhPZih0aGlzKTsKKyAgICAgICAgaWYgKGlu
ZGV4ID49IDApIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLnRleHR1cmVzLnNwbGljZShpbmRl
eCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc2NlbmUub25UZXh0dXJlUmVtb3ZlZE9i
c2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICBpZiAodGhpcy5fdGV4dHVy
ZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgLy8gUmVsZWFzZQorICAgICAgICB0aGlzLnJlbGVhc2VJbnRlcm5hbFRleHR1cmUoKTsKKyAg
ICAgICAgLy8gQ2FsbGJhY2sKKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlLm5vdGlm
eU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlLmNsZWFy
KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgdGhlIHRleHR1cmUgaW50byBh
IEpTT04gcmVwcmVzZW50YXRpb24gdGhhdCBjYW4gYmUgcGFyc2VkIGxhdGVyIG9uLgorICAgICAq
IEByZXR1cm5zIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0dXJlCisgICAgICov
CisgICAgQmFzZVRleHR1cmUucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLm5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICB9CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0gX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uU2VyaWFs
aXplKHRoaXMpOworICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkFw
cGVuZFNlcmlhbGl6ZWRBbmltYXRpb25zKHRoaXMsIHNlcmlhbGl6YXRpb25PYmplY3QpOworICAg
ICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEhlbHBlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYmFjayBvbmNlIGEgbGlzdCBvZiB0ZXh0dXJl
IGNvbnRhaW5zIG9ubHkgcmVhZHkgdGV4dHVyZXMuCisgICAgICogQHBhcmFtIHRleHR1cmVzIERl
ZmluZSB0aGUgbGlzdCBvZiB0ZXh0dXJlcyB0byB3YWl0IGZvcgorICAgICAqIEBwYXJhbSBjYWxs
YmFjayBEZWZpbmUgdGhlIGNhbGxiYWNrIHRyaWdnZXJlZCBvbmNlIHRoZSBlbnRpcmUgbGlzdCB3
aWxsIGJlIHJlYWR5CisgICAgICovCisgICAgQmFzZVRleHR1cmUuV2hlbkFsbFJlYWR5ID0gZnVu
Y3Rpb24gKHRleHR1cmVzLCBjYWxsYmFjaykgeworICAgICAgICB2YXIgbnVtUmVtYWluaW5nID0g
dGV4dHVyZXMubGVuZ3RoOworICAgICAgICBpZiAobnVtUmVtYWluaW5nID09PSAwKSB7CisgICAg
ICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGV4dHVyZSA9IHRl
eHR1cmVzW2ldOworICAgICAgICAgICAgaWYgKHRleHR1cmUuaXNSZWFkeSgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKC0tbnVtUmVtYWluaW5nID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgb25Mb2FkT2JzZXJ2YWJsZSA9IHRleHR1cmUub25M
b2FkT2JzZXJ2YWJsZTsKKyAgICAgICAgICAgICAgICB2YXIgb25Mb2FkQ2FsbGJhY2tfMSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgb25Mb2FkT2JzZXJ2YWJsZS5yZW1vdmVD
YWxsYmFjayhvbkxvYWRDYWxsYmFja18xKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKC0tbnVt
UmVtYWluaW5nID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICBvbkxvYWRPYnNlcnZhYmxlLmFkZChvbkxvYWRDYWxsYmFja18xKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICAgICAgdmFyIHRleHR1cmUsIG9uTG9hZE9ic2VydmFibGU7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dHVyZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIF9sb29wXzEoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGVmYXVs
dCBhbmlzb3Ryb3BpYyBmaWx0ZXJpbmcgbGV2ZWwgZm9yIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAg
KiBJdCBpcyBzZXQgdG8gNCBhcyBhIGdvb2QgdHJhZGVvZmYgYmV0d2VlbiBwZXJmIGFuZCBxdWFs
aXR5LgorICAgICAqLworICAgIEJhc2VUZXh0dXJlLkRFRkFVTFRfQU5JU09UUk9QSUNfRklMVEVS
SU5HX0xFVkVMID0gNDsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJhc2VUZXh0dXJlLnBy
b3RvdHlwZSwgInVuaXF1ZUlkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgIm5hbWUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJd
KSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAibWV0YWRhdGEiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgiaGFzQWxwaGEiKQorICAgIF0sIEJhc2VUZXh0dXJlLnByb3RvdHlw
ZSwgIl9oYXNBbHBoYSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBCYXNl
VGV4dHVyZS5wcm90b3R5cGUsICJnZXRBbHBoYUZyb21SR0IiLCB2b2lkIDApOworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAibGV2ZWwiLCB2b2lkIDAp
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAiY29v
cmRpbmF0ZXNJbmRleCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCJjb29yZGluYXRlc01v
ZGUiKQorICAgIF0sIEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgIl9jb29yZGluYXRlc01vZGUiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBl
LCAid3JhcFUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1
cmUucHJvdG90eXBlLCAid3JhcFYiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAid3JhcFIiLCB2b2lkIDApOworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVj
dChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6
ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAiYW5pc290cm9waWNGaWx0ZXJp
bmdMZXZlbCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBCYXNlVGV4dHVy
ZS5wcm90b3R5cGUsICJpc0N1YmUiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgImlzM0QiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIEJhc2VUZXh0dXJlLnByb3RvdHlwZSwgImdhbW1hU3BhY2UiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAiaW52ZXJ0
WiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBCYXNlVGV4dHVyZS5wcm90
b3R5cGUsICJsb2RMZXZlbEluQWxwaGEiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisg
ICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAibG9kR2VuZXJhdGlvbk9mZnNldCIsIG51bGwp
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAibG9k
R2VuZXJhdGlvblNjYWxlIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBCYXNl
VGV4dHVyZS5wcm90b3R5cGUsICJsaW5lYXJTcGVjdWxhckxPRCIsIG51bGwpOworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZUFzVGV4dHVyZSJdKSgpCisgICAgXSwgQmFzZVRleHR1cmUucHJvdG90eXBlLCAiaXJyYWRp
YW5jZVRleHR1cmUiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEJhc2VUZXh0
dXJlLnByb3RvdHlwZSwgImlzUmVuZGVyVGFyZ2V0Iiwgdm9pZCAwKTsKKyAgICByZXR1cm4gQmFz
ZVRleHR1cmU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9U
ZXh0dXJlcy9jb2xvckdyYWRpbmdUZXh0dXJlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL1Rl
eHR1cmVzL2NvbG9yR3JhZGluZ1RleHR1cmUudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IENvbG9yR3JhZGluZ1RleHR1cmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQ29sb3JHcmFkaW5nVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29sb3JHcmFkaW5n
VGV4dHVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9u
b2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4
dHVyZXNfYmFzZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9UZXh0dXJlcy9iYXNlVGV4dHVyZSAqLyAi
Li9NYXRlcmlhbHMvVGV4dHVyZXMvYmFzZVRleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0Vu
Z2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlw
ZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisK
KworCisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIGEgY29sb3IgZ3JhZGluZyB0ZXh0dXJlLiBU
aGlzIGFjdHMgYXMgYSBsb29rdXAgdGFibGUgTFVULCB1c2VmdWwgZHVyaW5nIHBvc3QgcHJvY2Vz
cworICogSXQgY2FuIGhlbHAgY29udmVydGluZyBhbnkgaW5wdXQgY29sb3IgaW4gYSBkZXNpcmVk
IG91dHB1dCBvbmUuIFRoaXMgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgZWZmZWN0cworICog
ZnJvbSBzZXBpYSwgYmxhY2sgYW5kIHdoaXRlIHRvIHNpeHRpZXMgb3IgZnV0dXJpc3RpYyByZW5k
ZXJpbmcuLi4KKyAqCisgKiBUaGUgb25seSBzdXBwb3J0ZWQgZm9ybWF0IGlzIGN1cnJlbnRseSAz
ZGwuCisgKiBNb3JlIGluZm9ybWF0aW9uIG9uIExVVDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3Jn
L3dpa2kvM0RfbG9va3VwX3RhYmxlCisgKi8KK3ZhciBDb2xvckdyYWRpbmdUZXh0dXJlID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKENvbG9yR3JhZGluZ1RleHR1cmUsIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgQ29sb3JHcmFkaW5nVGV4dHVyZSBmcm9t
IHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1cmwgVGhl
IGxvY2F0aW9uIG9mIHRoZSBjb2xvciBncmFkaW5kIGRhdGEgKGN1cnJlbnRseSBvbmx5IHN1cHBv
cnRpbmcgM2RsKQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhlIHRleHR1cmUgd2ls
bCBiZSB1c2VkIGluCisgICAgICovCisgICAgZnVuY3Rpb24gQ29sb3JHcmFkaW5nVGV4dHVyZSh1
cmwsIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjZW5l
KSB8fCB0aGlzOworICAgICAgICBpZiAoIXVybCkgeworICAgICAgICAgICAgcmV0dXJuIF90aGlz
OworICAgICAgICB9CisgICAgICAgIF90aGlzLl9lbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsK
KyAgICAgICAgX3RoaXMuX3RleHR1cmVNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgX3Ro
aXMubmFtZSA9IHVybDsKKyAgICAgICAgX3RoaXMudXJsID0gdXJsOworICAgICAgICBfdGhpcy5o
YXNBbHBoYSA9IGZhbHNlOworICAgICAgICBfdGhpcy5pc0N1YmUgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuaXMzRCA9IF90aGlzLl9lbmdpbmUud2ViR0xWZXJzaW9uID4gMTsKKyAgICAgICAgX3Ro
aXMud3JhcFUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siQ29uc3RhbnRzIl0uVEVYVFVSRV9DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgX3RoaXMu
d3JhcFYgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
Q29uc3RhbnRzIl0uVEVYVFVSRV9DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgX3RoaXMud3Jh
cFIgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRV9DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgX3RoaXMuYW5pc290
cm9waWNGaWx0ZXJpbmdMZXZlbCA9IDE7CisgICAgICAgIF90aGlzLl90ZXh0dXJlID0gX3RoaXMu
X2dldEZyb21DYWNoZSh1cmwsIHRydWUpOworICAgICAgICBpZiAoIV90aGlzLl90ZXh0dXJlKSB7
CisgICAgICAgICAgICBpZiAoIXNjZW5lLnVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZykgeworICAg
ICAgICAgICAgICAgIF90aGlzLmxvYWRUZXh0dXJlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5E
RUxBWUxPQURTVEFURV9OT1RMT0FERUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB0ZXh0
dXJlIG1hdHJpeCB1c2VkIGluIG1vc3Qgb2YgdGhlIG1hdGVyaWFsLgorICAgICAqIFRoaXMgaXMg
bm90IHVzZWQgaW4gY29sb3IgZ3JhZGluZyBidXQga2VlcCBmb3IgdHJvdWJsZXNob290aW5nIHB1
cnBvc2UgKGVhc2lseSBzd2FwIGRpZmZ1c2UgYnkgY29sb3JncmFkaW5nIHRvIGxvb2sgaW4pLgor
ICAgICAqLworICAgIENvbG9yR3JhZGluZ1RleHR1cmUucHJvdG90eXBlLmdldFRleHR1cmVNYXRy
aXggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlTWF0cml4Owor
ICAgIH07CisgICAgLyoqCisgICAgICogT2NjdXJzIHdoZW4gdGhlIGZpbGUgYmVpbmcgbG9hZGVk
IGlzIGEgLjNkbCBMVVQgZmlsZS4KKyAgICAgKi8KKyAgICBDb2xvckdyYWRpbmdUZXh0dXJlLnBy
b3RvdHlwZS5sb2FkM2RsVGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGVuZ2lu
ZSA9IHRoaXMuX2VuZ2luZTsKKyAgICAgICAgdmFyIHRleHR1cmU7CisgICAgICAgIGlmIChlbmdp
bmUud2ViR0xWZXJzaW9uID09PSAxKSB7CisgICAgICAgICAgICB0ZXh0dXJlID0gZW5naW5lLmNy
ZWF0ZVJhd1RleHR1cmUobnVsbCwgMSwgMSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCQSwgZmFsc2Us
IGZhbHNlLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
Q29uc3RhbnRzIl0uVEVYVFVSRV9CSUxJTkVBUl9TQU1QTElOR01PREUpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGV4dHVyZSA9IGVuZ2luZS5jcmVhdGVSYXdUZXh0
dXJlM0QobnVsbCwgMSwgMSwgMSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCQSwgZmFsc2UsIGZhbHNl
LCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3Rh
bnRzIl0uVEVYVFVSRV9CSUxJTkVBUl9TQU1QTElOR01PREUpOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX3RleHR1cmUgPSB0ZXh0dXJlOworICAgICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlv
biAodGV4dCkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAic3RyaW5nIikgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBk
YXRhID0gbnVsbDsKKyAgICAgICAgICAgIHZhciB0ZW1wRGF0YSA9IG51bGw7CisgICAgICAgICAg
ICB2YXIgbGluZTsKKyAgICAgICAgICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJyk7Cisg
ICAgICAgICAgICB2YXIgc2l6ZSA9IDAsIHBpeGVsSW5kZXhXID0gMCwgcGl4ZWxJbmRleEggPSAw
LCBwaXhlbEluZGV4U2xpY2UgPSAwOworICAgICAgICAgICAgdmFyIG1heENvbG9yID0gMDsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBsaW5lID0gbGluZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKCFDb2xvckdy
YWRpbmdUZXh0dXJlLl9ub25lRW1wdHlMaW5lUmVnZXgudGVzdChsaW5lKSkgeworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKGxpbmUuaW5kZXhPZignIycpID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgd29yZHMgPSBsaW5l
LnNwbGl0KCIgIik7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPT09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTnVtYmVyIG9mIHNwYWNlICsgb25lCisgICAgICAgICAgICAgICAgICAg
IHNpemUgPSB3b3Jkcy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgVWlu
dDhBcnJheShzaXplICogc2l6ZSAqIHNpemUgKiA0KTsgLy8gdm9sdW1lIHRleHR1cmUgb2Ygc2lk
ZSBzaXplIGFuZCByZ2IgOAorICAgICAgICAgICAgICAgICAgICB0ZW1wRGF0YSA9IG5ldyBGbG9h
dDMyQXJyYXkoc2l6ZSAqIHNpemUgKiBzaXplICogNCk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2l6ZSAhPSAw
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciByID0gTWF0aC5tYXgocGFyc2VJbnQod29yZHNb
MF0pLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGcgPSBNYXRoLm1heChwYXJzZUludCh3
b3Jkc1sxXSksIDApOworICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IE1hdGgubWF4KHBhcnNl
SW50KHdvcmRzWzJdKSwgMCk7CisgICAgICAgICAgICAgICAgICAgIG1heENvbG9yID0gTWF0aC5t
YXgociwgbWF4Q29sb3IpOworICAgICAgICAgICAgICAgICAgICBtYXhDb2xvciA9IE1hdGgubWF4
KGcsIG1heENvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgbWF4Q29sb3IgPSBNYXRoLm1heChi
LCBtYXhDb2xvcik7CisgICAgICAgICAgICAgICAgICAgIHZhciBwaXhlbFN0b3JhZ2VJbmRleCA9
IChwaXhlbEluZGV4VyArIHBpeGVsSW5kZXhTbGljZSAqIHNpemUgKyBwaXhlbEluZGV4SCAqIHNp
emUgKiBzaXplKSAqIDQ7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wRGF0YSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGVtcERhdGFbcGl4ZWxTdG9yYWdlSW5kZXggKyAwXSA9IHI7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRGF0YVtwaXhlbFN0b3JhZ2VJbmRleCArIDFd
ID0gZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhW3BpeGVsU3RvcmFnZUluZGV4
ICsgMl0gPSBiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8v
IEtlZXAgZm9yIHJlZmVyZW5jZSBpbiBjYXNlIG9mIGJhY2sgY29tcGF0IHByb2JsZW1zLgorICAg
ICAgICAgICAgICAgICAgICAvLyBwaXhlbEluZGV4U2xpY2UrKzsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gaWYgKHBpeGVsSW5kZXhTbGljZSAlIHNpemUgPT0gMCkgeworICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgcGl4ZWxJbmRleEgrKzsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIHBp
eGVsSW5kZXhTbGljZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIC8vICAgICBpZiAocGl4ZWxJ
bmRleEggJSBzaXplID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBwaXhl
bEluZGV4VysrOworICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHBpeGVsSW5kZXhIID0g
MDsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8g
fQorICAgICAgICAgICAgICAgICAgICBwaXhlbEluZGV4SCsrOworICAgICAgICAgICAgICAgICAg
ICBpZiAocGl4ZWxJbmRleEggJSBzaXplID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBpeGVsSW5kZXhTbGljZSsrOworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxJbmRleEgg
PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpeGVsSW5kZXhTbGljZSAlIHNpemUg
PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSW5kZXhXKys7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxJbmRleFNsaWNlID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0ZW1wRGF0YSAmJiBkYXRhKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZW1wRGF0YS5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgKGkgKyAxKSAlIDQgPT09IDApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSAyNTU7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdmFsdWUgPSB0ZW1wRGF0YVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0g
PSAodmFsdWUgLyBtYXhDb2xvciAqIDI1NSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGV4dHVyZS5pczNE
KSB7CisgICAgICAgICAgICAgICAgdGV4dHVyZS51cGRhdGVTaXplKHNpemUsIHNpemUsIHNpemUp
OworICAgICAgICAgICAgICAgIGVuZ2luZS51cGRhdGVSYXdUZXh0dXJlM0QodGV4dHVyZSwgZGF0
YSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0
YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCQSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGV4dHVyZS51cGRhdGVTaXplKHNpemUgKiBz
aXplLCBzaXplKTsKKyAgICAgICAgICAgICAgICBlbmdpbmUudXBkYXRlUmF3VGV4dHVyZSh0ZXh0
dXJlLCBkYXRhLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBLCBmYWxzZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAg
ICAgaWYgKHNjZW5lKSB7CisgICAgICAgICAgICBzY2VuZS5fbG9hZEZpbGUodGhpcy51cmwsIGNh
bGxiYWNrKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2Vu
Z2luZS5fbG9hZEZpbGUodGhpcy51cmwsIGNhbGxiYWNrKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5fdGV4dHVyZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFN0YXJ0cyB0aGUg
bG9hZGluZyBwcm9jZXNzIG9mIHRoZSB0ZXh0dXJlLgorICAgICAqLworICAgIENvbG9yR3JhZGlu
Z1RleHR1cmUucHJvdG90eXBlLmxvYWRUZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAodGhpcy51cmwgJiYgdGhpcy51cmwudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmRleE9mKCIuM2Rs
IikgPT0gKHRoaXMudXJsLmxlbmd0aCAtIDQpKSB7CisgICAgICAgICAgICB0aGlzLmxvYWQzZGxU
ZXh0dXJlKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lcyB0aGUg
Y29sb3IgZ3JhZGluZCB0ZXh0dXJlLgorICAgICAqLworICAgIENvbG9yR3JhZGluZ1RleHR1cmUu
cHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbmV3VGV4dHVyZSA9
IG5ldyBDb2xvckdyYWRpbmdUZXh0dXJlKHRoaXMudXJsLCB0aGlzLmdldFNjZW5lKCkpOworICAg
ICAgICAvLyBCYXNlIHRleHR1cmUKKyAgICAgICAgbmV3VGV4dHVyZS5sZXZlbCA9IHRoaXMubGV2
ZWw7CisgICAgICAgIHJldHVybiBuZXdUZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICog
Q2FsbGVkIGR1cmluZyBkZWxheWVkIGxvYWQgZm9yIHRleHR1cmVzLgorICAgICAqLworICAgIENv
bG9yR3JhZGluZ1RleHR1cmUucHJvdG90eXBlLmRlbGF5TG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKHRoaXMuZGVsYXlMb2FkU3RhdGUgIT09IF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9OT1RM
T0FERUQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmRl
bGF5TG9hZFN0YXRlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNUQVRFX0xPQURFRDsKKyAgICAgICAgdGhpcy5f
dGV4dHVyZSA9IHRoaXMuX2dldEZyb21DYWNoZSh0aGlzLnVybCwgdHJ1ZSk7CisgICAgICAgIGlm
ICghdGhpcy5fdGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5sb2FkVGV4dHVyZSgpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgYSBjb2xvciBncmFkaW5nIHRl
eHR1cmUgc2VyaWFsaXplZCBieSBCYWJ5bG9uLgorICAgICAqIEBwYXJhbSBwYXJzZWRUZXh0dXJl
IFRoZSB0ZXh0dXJlIGluZm9ybWF0aW9uIGJlaW5nIHBhcnNlZFRleHR1cmUKKyAgICAgKiBAcGFy
YW0gc2NlbmUgVGhlIHNjZW5lIHRvIGxvYWQgdGhlIHRleHR1cmUgaW4KKyAgICAgKiBAcGFyYW0g
cm9vdFVybCBUaGUgcm9vdCB1cmwgb2YgdGhlIGRhdGEgYXNzZXRzIHRvIGxvYWQKKyAgICAgKiBA
cmV0dXJuIEEgY29sb3IgZ3JhZGluZCB0ZXh0dXJlCisgICAgICovCisgICAgQ29sb3JHcmFkaW5n
VGV4dHVyZS5QYXJzZSA9IGZ1bmN0aW9uIChwYXJzZWRUZXh0dXJlLCBzY2VuZSkgeworICAgICAg
ICB2YXIgdGV4dHVyZSA9IG51bGw7CisgICAgICAgIGlmIChwYXJzZWRUZXh0dXJlLm5hbWUgJiYg
IXBhcnNlZFRleHR1cmUuaXNSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHRleHR1cmUgPSBu
ZXcgQ29sb3JHcmFkaW5nVGV4dHVyZShwYXJzZWRUZXh0dXJlLm5hbWUsIHNjZW5lKTsKKyAgICAg
ICAgICAgIHRleHR1cmUubmFtZSA9IHBhcnNlZFRleHR1cmUubmFtZTsKKyAgICAgICAgICAgIHRl
eHR1cmUubGV2ZWwgPSBwYXJzZWRUZXh0dXJlLmxldmVsOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0ZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgTFVU
IHRleHR1cmUgdG8ganNvbiBmb3JtYXQuCisgICAgICovCisgICAgQ29sb3JHcmFkaW5nVGV4dHVy
ZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMu
bmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5u
YW1lID0gdGhpcy5uYW1lOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmxldmVsID0gdGhp
cy5sZXZlbDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21UeXBlID0gIkJBQllM
T04uQ29sb3JHcmFkaW5nVGV4dHVyZSI7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2Jq
ZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogRW1wdHkgbGluZSByZWdleCBzdG9yZWQgZm9y
IEdDLgorICAgICAqLworICAgIENvbG9yR3JhZGluZ1RleHR1cmUuX25vbmVFbXB0eUxpbmVSZWdl
eCA9IC9cUysvOworICAgIHJldHVybiBDb2xvckdyYWRpbmdUZXh0dXJlOworfShfTWF0ZXJpYWxz
X1RleHR1cmVzX2Jhc2VUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkJhc2VU
ZXh0dXJlIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uQ29sb3JHcmFkaW5nVGV4
dHVyZSJdID0gQ29sb3JHcmFkaW5nVGV4dHVyZTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWF0ZXJpYWxzL1RleHR1cmVzL2N1YmVUZXh0dXJlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJl
cy9jdWJlVGV4dHVyZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEN1YmVUZXh0dXJlICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN1YmVUZXh0dXJlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBDdWJlVGV4dHVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRz
bGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIu
L01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NaXNjL3Rvb2xzICovICIuL01pc2MvdG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIu
L01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVy
aWFsc19UZXh0dXJlc19iYXNlVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2Jhc2VUZXh0
dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9iYXNlVGV4dHVyZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxz
L1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMv
Y29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5
cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX0V4dGVuc2lv
bnNfZW5naW5lX2N1YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLmN1YmVU
ZXh0dXJlICovICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUuY3ViZVRleHR1cmUudHMiKTsK
KworCisKKworCisKKworCisKKy8qKgorICogQ2xhc3MgZm9yIGNyZWF0aW5nIGEgY3ViZSB0ZXh0
dXJlCisgKi8KK3ZhciBDdWJlVGV4dHVyZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3Vw
ZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMi
XShDdWJlVGV4dHVyZSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgY3ViZSB0
ZXh0dXJlIHRvIHVzZSB3aXRoIHJlZmxlY3Rpb24gZm9yIGluc3RhbmNlLiBJdCBjYW4gYmUgYmFz
ZWQgdXBvbiBkZHMgb3Igc2l4IGltYWdlcyBhcyB3ZWxsCisgICAgICogYXMgcHJlZmlsdGVyZWQg
ZGF0YS4KKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSB1cmwgb2YgdGhlIHRleHR1
cmUgb3IgdGhlIHJvb3QgbmFtZSBvZiB0aGUgc2l4IGltYWdlcworICAgICAqIEBwYXJhbSBzY2Vu
ZSBkZWZpbmVzIHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBpcyBhdHRhY2hlZCB0bworICAgICAqIEBw
YXJhbSBleHRlbnNpb25zIGRlZmluZXMgdGhlIHN1ZmZpeGVzIGFkZCB0byB0aGUgcGljdHVyZSBu
YW1lIGluIGNhc2Ugc2l4IGltYWdlcyBhcmUgaW4gdXNlIGxpa2UgX3B4LmpwZy4uLgorICAgICAq
IEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlmIG1pcG1hcHMgc2hvdWxkIGJlIGNyZWF0ZWQgb3Ig
bm90CisgICAgICogQHBhcmFtIGZpbGVzIGRlZmluZXMgdGhlIHNpeCBmaWxlcyB0byBsb2FkIGZv
ciB0aGUgZGlmZmVyZW50IGZhY2VzIGluIHRoYXQgb3JkZXI6IHB4LCBweSwgcHosIG54LCBueSwg
bnoKKyAgICAgKiBAcGFyYW0gb25Mb2FkIGRlZmluZXMgYSBjYWxsYmFjayB0cmlnZ2VyZWQgYXQg
dGhlIGVuZCBvZiB0aGUgZmlsZSBsb2FkIGlmIG5vIGVycm9ycyBvY2N1cmVkCisgICAgICogQHBh
cmFtIG9uRXJyb3IgZGVmaW5lcyBhIGNhbGxiYWNrIHRyaWdnZXJlZCBpbiBjYXNlIG9mIGVycm9y
IGR1cmluZyBsb2FkCisgICAgICogQHBhcmFtIGZvcm1hdCBkZWZpbmVzIHRoZSBpbnRlcm5hbCBm
b3JtYXQgdG8gdXNlIGZvciB0aGUgdGV4dHVyZSBvbmNlIGxvYWRlZAorICAgICAqIEBwYXJhbSBw
cmVmaWx0ZXJlZCBkZWZpbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJlIGlzIGNyZWF0ZWQg
ZnJvbSBwcmVmaWx0ZXJlZCBkYXRhCisgICAgICogQHBhcmFtIGZvcmNlZEV4dGVuc2lvbiBkZWZp
bmVzIHRoZSBleHRlbnNpb25zIHRvIHVzZSAoZm9yY2UgYSBzcGVjaWFsIHR5cGUgb2YgZmlsZSB0
byBsb2FkKSBpbiBjYXNlIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBmaWxlIG5hbWUKKyAgICAg
KiBAcGFyYW0gY3JlYXRlUG9seW5vbWlhbHMgZGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBjcmVh
dGUgcG9seW5vbWlhbCBoYXJtb25pY3MgZnJvbSB0aGUgdGV4dHVyZSBkYXRhIGlmIG5lY2Vzc2Fy
eQorICAgICAqIEBwYXJhbSBsb2RTY2FsZSBkZWZpbmVzIHRoZSBzY2FsZSBhcHBsaWVkIHRvIGVu
dmlyb25tZW50IHRleHR1cmUuIFRoaXMgbWFuYWdlcyB0aGUgcmFuZ2Ugb2YgTE9EIGxldmVsIHVz
ZWQgZm9yIElCTCBhY2NvcmRpbmcgdG8gdGhlIHJvdWdobmVzcworICAgICAqIEBwYXJhbSBsb2RP
ZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGFwcGxpZWQgdG8gZW52aXJvbm1lbnQgdGV4dHVyZS4g
VGhpcyBtYW5hZ2VzIGZpcnN0IExPRCBsZXZlbCB1c2VkIGZvciBJQkwgYWNjb3JkaW5nIHRvIHRo
ZSByb3VnaG5lc3MKKyAgICAgKiBAcmV0dXJuIHRoZSBjdWJlIHRleHR1cmUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBDdWJlVGV4dHVyZShyb290VXJsLCBzY2VuZSwgZXh0ZW5zaW9ucywgbm9NaXBt
YXAsIGZpbGVzLCBvbkxvYWQsIG9uRXJyb3IsIGZvcm1hdCwgcHJlZmlsdGVyZWQsIGZvcmNlZEV4
dGVuc2lvbiwgY3JlYXRlUG9seW5vbWlhbHMsIGxvZFNjYWxlLCBsb2RPZmZzZXQpIHsKKyAgICAg
ICAgaWYgKGV4dGVuc2lvbnMgPT09IHZvaWQgMCkgeyBleHRlbnNpb25zID0gbnVsbDsgfQorICAg
ICAgICBpZiAobm9NaXBtYXAgPT09IHZvaWQgMCkgeyBub01pcG1hcCA9IGZhbHNlOyB9CisgICAg
ICAgIGlmIChmaWxlcyA9PT0gdm9pZCAwKSB7IGZpbGVzID0gbnVsbDsgfQorICAgICAgICBpZiAo
b25Mb2FkID09PSB2b2lkIDApIHsgb25Mb2FkID0gbnVsbDsgfQorICAgICAgICBpZiAob25FcnJv
ciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBudWxsOyB9CisgICAgICAgIGlmIChmb3JtYXQgPT09
IHZvaWQgMCkgeyBmb3JtYXQgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBOyB9CisgICAgICAgIGlm
IChwcmVmaWx0ZXJlZCA9PT0gdm9pZCAwKSB7IHByZWZpbHRlcmVkID0gZmFsc2U7IH0KKyAgICAg
ICAgaWYgKGZvcmNlZEV4dGVuc2lvbiA9PT0gdm9pZCAwKSB7IGZvcmNlZEV4dGVuc2lvbiA9IG51
bGw7IH0KKyAgICAgICAgaWYgKGNyZWF0ZVBvbHlub21pYWxzID09PSB2b2lkIDApIHsgY3JlYXRl
UG9seW5vbWlhbHMgPSBmYWxzZTsgfQorICAgICAgICBpZiAobG9kU2NhbGUgPT09IHZvaWQgMCkg
eyBsb2RTY2FsZSA9IDAuODsgfQorICAgICAgICBpZiAobG9kT2Zmc2V0ID09PSB2b2lkIDApIHsg
bG9kT2Zmc2V0ID0gMDsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBz
Y2VuZSkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUg
Y2VudGVyIG9mIHRoZSBib3VuZGluZyBib3ggYXNzb2NpYXRlZCB3aXRoIHRoZSBjdWJlIHRleHR1
cmUuCisgICAgICAgICAqIEl0IG11c3QgZGVmaW5lIHdoZXJlIHRoZSBjYW1lcmEgdXNlZCB0byBy
ZW5kZXIgdGhlIHRleHR1cmUgd2FzIHNldAorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vcmVmbGVjdCN1c2luZy1sb2NhbC1jdWJlbWFwLW1vZGUKKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLmJvdW5kaW5nQm94UG9zaXRpb24gPSBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAg
ICAgICAgX3RoaXMuX3JvdGF0aW9uWSA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAg
ICAgIF90aGlzLl9wcmVmaWx0ZXJlZCA9IGZhbHNlOworICAgICAgICBfdGhpcy5uYW1lID0gcm9v
dFVybDsKKyAgICAgICAgX3RoaXMudXJsID0gcm9vdFVybDsKKyAgICAgICAgX3RoaXMuX25vTWlw
bWFwID0gbm9NaXBtYXA7CisgICAgICAgIF90aGlzLmhhc0FscGhhID0gZmFsc2U7CisgICAgICAg
IF90aGlzLl9mb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIF90aGlzLmlzQ3ViZSA9IHRydWU7Cisg
ICAgICAgIF90aGlzLl90ZXh0dXJlTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgICAgIF90aGlz
Ll9jcmVhdGVQb2x5bm9taWFscyA9IGNyZWF0ZVBvbHlub21pYWxzOworICAgICAgICBfdGhpcy5j
b29yZGluYXRlc01vZGUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siVGV4dHVyZSJdLkNVQklDX01PREU7CisgICAgICAgIGlmICghcm9v
dFVybCAmJiAhZmlsZXMpIHsKKyAgICAgICAgICAgIHJldHVybiBfdGhpczsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgbGFzdERvdCA9IHJvb3RVcmwubGFzdEluZGV4T2YoIi4iKTsKKyAgICAgICAg
dmFyIGV4dGVuc2lvbiA9IGZvcmNlZEV4dGVuc2lvbiA/IGZvcmNlZEV4dGVuc2lvbiA6IChsYXN0
RG90ID4gLTEgPyByb290VXJsLnN1YnN0cmluZyhsYXN0RG90KS50b0xvd2VyQ2FzZSgpIDogIiIp
OworICAgICAgICB2YXIgaXNERFMgPSAoZXh0ZW5zaW9uID09PSAiLmRkcyIpOworICAgICAgICB2
YXIgaXNFbnYgPSAoZXh0ZW5zaW9uID09PSAiLmVudiIpOworICAgICAgICBpZiAoaXNFbnYpIHsK
KyAgICAgICAgICAgIF90aGlzLmdhbW1hU3BhY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIF90aGlz
Ll9wcmVmaWx0ZXJlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgX3RoaXMuX3ByZWZpbHRlcmVkID0gcHJlZmlsdGVyZWQ7CisgICAgICAgICAgICBpZiAo
cHJlZmlsdGVyZWQpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5nYW1tYVNwYWNlID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgX3RoaXMuX3RleHR1cmUgPSBfdGhp
cy5fZ2V0RnJvbUNhY2hlKHJvb3RVcmwsIG5vTWlwbWFwKTsKKyAgICAgICAgaWYgKCFmaWxlcykg
eworICAgICAgICAgICAgaWYgKCFpc0VudiAmJiAhaXNERFMgJiYgIWV4dGVuc2lvbnMpIHsKKyAg
ICAgICAgICAgICAgICBleHRlbnNpb25zID0gWyJfcHguanBnIiwgIl9weS5qcGciLCAiX3B6Lmpw
ZyIsICJfbnguanBnIiwgIl9ueS5qcGciLCAiX256LmpwZyJdOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZmlsZXMgPSBbXTsKKyAgICAgICAgICAgIGlmIChleHRlbnNpb25zKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGV4dGVuc2lvbnMubGVuZ3Ro
OyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbGVzLnB1c2gocm9vdFVybCArIGV4
dGVuc2lvbnNbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgX3RoaXMuX2ZpbGVzID0gZmlsZXM7CisgICAgICAgIGlmICghX3RoaXMu
X3RleHR1cmUpIHsKKyAgICAgICAgICAgIGlmICghc2NlbmUudXNlRGVsYXllZFRleHR1cmVMb2Fk
aW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWZpbHRlcmVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl90ZXh0dXJlID0gc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlUHJlZmlsdGVy
ZWRDdWJlVGV4dHVyZShyb290VXJsLCBzY2VuZSwgbG9kU2NhbGUsIGxvZE9mZnNldCwgb25Mb2Fk
LCBvbkVycm9yLCBmb3JtYXQsIGZvcmNlZEV4dGVuc2lvbiwgX3RoaXMuX2NyZWF0ZVBvbHlub21p
YWxzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlID0gc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlQ3Vi
ZVRleHR1cmUocm9vdFVybCwgc2NlbmUsIGZpbGVzLCBub01pcG1hcCwgb25Mb2FkLCBvbkVycm9y
LCBfdGhpcy5fZm9ybWF0LCBmb3JjZWRFeHRlbnNpb24sIGZhbHNlLCBsb2RTY2FsZSwgbG9kT2Zm
c2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBfdGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5ERUxBWUxPQURT
VEFURV9OT1RMT0FERUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAob25Mb2FkKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuX3RleHR1cmUuaXNSZWFkeSkgewor
ICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlRvb2xzIl0uU2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uTG9hZCgpOyB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIF90aGlz
Ll90ZXh0dXJlLm9uTG9hZGVkT2JzZXJ2YWJsZS5hZGQob25Mb2FkKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShDdWJlVGV4dHVyZS5wcm90b3R5cGUsICJib3VuZGluZ0JveFNpemUiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBib3VuZGluZyBib3ggc2l6ZQorICAg
ICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcmVmbGVjdCN1c2lu
Zy1sb2NhbC1jdWJlbWFwLW1vZGUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kaW5nQm94U2l6ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgc2l6ZSBvZiB0aGUg
Ym91bmRpbmcgYm94IGFzc29jaWF0ZWQgd2l0aCB0aGUgY3ViZSB0ZXh0dXJlCisgICAgICAgICAq
IFdoZW4gZGVmaW5lZCwgdGhlIGN1YmVtYXAgd2lsbCBzd2l0Y2ggdG8gbG9jYWwgbW9kZQorICAg
ICAgICAgKiBAc2VlIGh0dHBzOi8vY29tbXVuaXR5LmFybS5jb20vZ3JhcGhpY3MvYi9ibG9nL3Bv
c3RzL3JlZmxlY3Rpb25zLWJhc2VkLW9uLWxvY2FsLWN1YmVtYXBzLWluLXVuaXR5CisgICAgICAg
ICAqIEBleGFtcGxlIGh0dHBzOi8vd3d3LmJhYnlsb25qcy1wbGF5Z3JvdW5kLmNvbS8jUk5BU01M
CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX2JvdW5kaW5nQm94U2l6ZSAmJiB0aGlzLl9ib3VuZGluZ0JveFNpemUuZXF1
YWxzKHZhbHVlKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX2JvdW5kaW5nQm94U2l6ZSA9IHZhbHVlOworICAgICAgICAgICAgdmFy
IHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICAgICAgaWYgKHNjZW5lKSB7CisgICAg
ICAgICAgICAgICAgc2NlbmUubWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1Rl
eHR1cmVEaXJ0eUZsYWcpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQ3ViZVRleHR1cmUucHJvdG90eXBlLCAicm90YXRpb25ZIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0ZXh0dXJlIG1hdHJpeCByb3RhdGlvbiBh
bmdsZSBhcm91bmQgWSBheGlzIHJhZGlhbnMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvblk7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRleHR1cmUgbWF0cml4IHJvdGF0aW9u
IGFuZ2xlIGFyb3VuZCBZIGF4aXMgaW4gcmFkaWFucy4KKyAgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9yb3RhdGlvblkgPSB2YWx1
ZTsKKyAgICAgICAgICAgIHRoaXMuc2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXgoX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLlJvdGF0aW9u
WSh0aGlzLl9yb3RhdGlvblkpKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEN1YmVUZXh0dXJlLnByb3RvdHlwZSwgIm5vTWlwbWFwIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogQXJlIG1pcCBtYXBzIGdlbmVyYXRlZCBmb3IgdGhpcyB0ZXh0dXJlIG9y
IG5vdC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX25vTWlwbWFwOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgY3ViZSB0ZXh0dXJlIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgdXJscwor
ICAgICAqIEBwYXJhbSBmaWxlcyBkZWZpbmVzIGFuIGFycmF5IG9mIGltYWdlIHVybHMKKyAgICAg
KiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSBu
b01pcG1hcCBzcGVjaWZpZXMgaWYgbWlwIG1hcHMgYXJlIG5vdCB1c2VkCisgICAgICogQHJldHVy
bnMgYSBjdWJlIHRleHR1cmUKKyAgICAgKi8KKyAgICBDdWJlVGV4dHVyZS5DcmVhdGVGcm9tSW1h
Z2VzID0gZnVuY3Rpb24gKGZpbGVzLCBzY2VuZSwgbm9NaXBtYXApIHsKKyAgICAgICAgdmFyIHJv
b3RVcmxLZXkgPSAiIjsKKyAgICAgICAgZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAodXJsKSB7IHJl
dHVybiByb290VXJsS2V5ICs9IHVybDsgfSk7CisgICAgICAgIHJldHVybiBuZXcgQ3ViZVRleHR1
cmUocm9vdFVybEtleSwgc2NlbmUsIG51bGwsIG5vTWlwbWFwLCBmaWxlcyk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGFuZCByZXR1cm4gYSB0ZXh0dXJlIGNyZWF0ZWQgZnJvbSBw
cmVmaWx0ZXJkIGRhdGEgYnkgdG9vbHMgbGlrZSBJQkwgQmFrZXIgb3IgTHlzLgorICAgICAqIEBw
YXJhbSB1cmwgZGVmaW5lcyB0aGUgdXJsIG9mIHRoZSBwcmVmaWx0ZXJlZCB0ZXh0dXJlCisgICAg
ICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIHNjZW5lIHRoZSB0ZXh0dXJlIGlzIGF0dGFjaGVk
IHRvCisgICAgICogQHBhcmFtIGZvcmNlZEV4dGVuc2lvbiBkZWZpbmVzIHRoZSBleHRlbnNpb24g
b2YgdGhlIGZpbGUgaWYgZGlmZmVyZW50IGZyb20gdGhlIHVybAorICAgICAqIEBwYXJhbSBjcmVh
dGVQb2x5bm9taWFscyBkZWZpbmVzIHdoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSBwb2x5bm9taWFs
IGhhcm1vbmljcyBmcm9tIHRoZSB0ZXh0dXJlIGRhdGEgaWYgbmVjZXNzYXJ5CisgICAgICogQHJl
dHVybiB0aGUgcHJlZmlsdGVyZWQgdGV4dHVyZQorICAgICAqLworICAgIEN1YmVUZXh0dXJlLkNy
ZWF0ZUZyb21QcmVmaWx0ZXJlZERhdGEgPSBmdW5jdGlvbiAodXJsLCBzY2VuZSwgZm9yY2VkRXh0
ZW5zaW9uLCBjcmVhdGVQb2x5bm9taWFscykgeworICAgICAgICBpZiAoZm9yY2VkRXh0ZW5zaW9u
ID09PSB2b2lkIDApIHsgZm9yY2VkRXh0ZW5zaW9uID0gbnVsbDsgfQorICAgICAgICBpZiAoY3Jl
YXRlUG9seW5vbWlhbHMgPT09IHZvaWQgMCkgeyBjcmVhdGVQb2x5bm9taWFscyA9IHRydWU7IH0K
KyAgICAgICAgcmV0dXJuIG5ldyBDdWJlVGV4dHVyZSh1cmwsIHNjZW5lLCBudWxsLCBmYWxzZSwg
bnVsbCwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkLCB0cnVlLCBmb3JjZWRFeHRlbnNpb24sIGNyZWF0
ZVBvbHlub21pYWxzKTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdWJlVGV4
dHVyZS5wcm90b3R5cGUsICJpc1ByZWZpbHRlcmVkIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgY3ViZSB0ZXh0dXJlIGNvbnRhaW5z
IHByZWZpbHRlcmVkIG1pcHMgKHVzZWQgdG8gc2ltdWxhdGUgcm91Z2huZXNzIHdpdGggUEJSKQor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fcHJlZmlsdGVyZWQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAq
IEdldCB0aGUgY3VycmVudCBjbGFzcyBuYW1lIG9mIHRoZSB0ZXh0dXJlIHVzZWZ1bCBmb3Igc2Vy
aWFsaXphdGlvbiBvciBkeW5hbWljIGNvZGluZy4KKyAgICAgKiBAcmV0dXJucyAiQ3ViZVRleHR1
cmUiCisgICAgICovCisgICAgQ3ViZVRleHR1cmUucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJDdWJlVGV4dHVyZSI7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBVcGRhdGUgdGhlIHVybCAoYW5kIG9wdGlvbmFsIGJ1ZmZlcikgb2YgdGhpcyB0
ZXh0dXJlIGlmIHVybCB3YXMgbnVsbCBkdXJpbmcgY29uc3RydWN0aW9uLgorICAgICAqIEBwYXJh
bSB1cmwgdGhlIHVybCBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSBmb3JjZWRFeHRlbnNp
b24gZGVmaW5lcyB0aGUgZXh0ZW5zaW9uIHRvIHVzZQorICAgICAqIEBwYXJhbSBvbkxvYWQgY2Fs
bGJhY2sgY2FsbGVkIHdoZW4gdGhlIHRleHR1cmUgaXMgbG9hZGVkICAoZGVmYXVsdHMgdG8gbnVs
bCkKKyAgICAgKi8KKyAgICBDdWJlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlVVJMID0gZnVuY3Rp
b24gKHVybCwgZm9yY2VkRXh0ZW5zaW9uLCBvbkxvYWQpIHsKKyAgICAgICAgaWYgKHRoaXMudXJs
KSB7CisgICAgICAgICAgICB0aGlzLnJlbGVhc2VJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAgICAg
ICAgIHRoaXMuZ2V0U2NlbmUoKS5tYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxf
VGV4dHVyZURpcnR5RmxhZyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5uYW1lID0gdXJsOwor
ICAgICAgICB0aGlzLnVybCA9IHVybDsKKyAgICAgICAgdGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMi
XS5ERUxBWUxPQURTVEFURV9OT1RMT0FERUQ7CisgICAgICAgIHRoaXMuX3ByZWZpbHRlcmVkID0g
ZmFsc2U7CisgICAgICAgIGlmIChvbkxvYWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2RlbGF5ZWRP
bkxvYWQgPSBvbkxvYWQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5kZWxheUxvYWQoZm9yY2Vk
RXh0ZW5zaW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlbGF5cyBsb2FkaW5nIG9mIHRo
ZSBjdWJlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gZm9yY2VkRXh0ZW5zaW9uIGRlZmluZXMgdGhl
IGV4dGVuc2lvbiB0byB1c2UKKyAgICAgKi8KKyAgICBDdWJlVGV4dHVyZS5wcm90b3R5cGUuZGVs
YXlMb2FkID0gZnVuY3Rpb24gKGZvcmNlZEV4dGVuc2lvbikgeworICAgICAgICBpZiAodGhpcy5k
ZWxheUxvYWRTdGF0ZSAhPT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV82X19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNUQVRFX05PVExPQURFRCkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2Nl
bmUoKTsKKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuZGVsYXlMb2FkU3RhdGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uREVMQVlMT0FEU1RBVEVfTE9B
REVEOworICAgICAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fZ2V0RnJvbUNhY2hlKHRoaXMudXJs
LCB0aGlzLl9ub01pcG1hcCk7CisgICAgICAgIGlmICghdGhpcy5fdGV4dHVyZSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX3ByZWZpbHRlcmVkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4
dHVyZSA9IHNjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZVByZWZpbHRlcmVkQ3ViZVRleHR1cmUodGhp
cy51cmwsIHNjZW5lLCB0aGlzLmxvZEdlbmVyYXRpb25TY2FsZSwgdGhpcy5sb2RHZW5lcmF0aW9u
T2Zmc2V0LCB0aGlzLl9kZWxheWVkT25Mb2FkLCB1bmRlZmluZWQsIHRoaXMuX2Zvcm1hdCwgdW5k
ZWZpbmVkLCB0aGlzLl9jcmVhdGVQb2x5bm9taWFscyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gc2NlbmUuZ2V0RW5n
aW5lKCkuY3JlYXRlQ3ViZVRleHR1cmUodGhpcy51cmwsIHNjZW5lLCB0aGlzLl9maWxlcywgdGhp
cy5fbm9NaXBtYXAsIHRoaXMuX2RlbGF5ZWRPbkxvYWQsIG51bGwsIHRoaXMuX2Zvcm1hdCwgZm9y
Y2VkRXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogUmV0dXJucyB0aGUgcmVmbGVjdGlvbiB0ZXh0dXJlIG1hdHJpeAorICAgICAqIEBy
ZXR1cm5zIHRoZSByZWZsZWN0aW9uIHRleHR1cmUgbWF0cml4CisgICAgICovCisgICAgQ3ViZVRl
eHR1cmUucHJvdG90eXBlLmdldFJlZmxlY3Rpb25UZXh0dXJlTWF0cml4ID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZU1hdHJpeDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldHMgdGhlIHJlZmxlY3Rpb24gdGV4dHVyZSBtYXRyaXgKKyAgICAgKiBAcGFyYW0g
dmFsdWUgUmVmbGVjdGlvbiB0ZXh0dXJlIG1hdHJpeAorICAgICAqLworICAgIEN1YmVUZXh0dXJl
LnByb3RvdHlwZS5zZXRSZWZsZWN0aW9uVGV4dHVyZU1hdHJpeCA9IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodmFsdWUudXBkYXRlRmxh
ZyA9PT0gdGhpcy5fdGV4dHVyZU1hdHJpeC51cGRhdGVGbGFnKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLmlzSWRlbnRpdHkoKSAhPT0gdGhpcy5f
dGV4dHVyZU1hdHJpeC5pc0lkZW50aXR5KCkpIHsKKyAgICAgICAgICAgIHRoaXMuZ2V0U2NlbmUo
KS5tYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZywg
ZnVuY3Rpb24gKG1hdCkgeyByZXR1cm4gbWF0LmdldEFjdGl2ZVRleHR1cmVzKCkuaW5kZXhPZihf
dGhpcykgIT09IC0xOyB9KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl90ZXh0dXJlTWF0cml4
ID0gdmFsdWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgdGV4dCB0byBjcmVhdGUg
YSBjdWJlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gcGFyc2VkVGV4dHVyZSBkZWZpbmUgdGhlIHNl
cmlhbGl6ZWQgdGV4dCB0byByZWFkIGZyb20KKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0
aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSByb290VXJsIGRlZmluZXMgdGhlIHJvb3Qg
dXJsIG9mIHRoZSBjdWJlIHRleHR1cmUKKyAgICAgKiBAcmV0dXJucyBhIGN1YmUgdGV4dHVyZQor
ICAgICAqLworICAgIEN1YmVUZXh0dXJlLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZFRleHR1cmUs
IHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIHZhciB0ZXh0dXJlID0gX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uUGFy
c2UoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHByZWZpbHRlcmVkID0gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAocGFyc2VkVGV4dHVyZS5wcmVmaWx0ZXJlZCkgeworICAgICAgICAgICAg
ICAgIHByZWZpbHRlcmVkID0gcGFyc2VkVGV4dHVyZS5wcmVmaWx0ZXJlZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBuZXcgQ3ViZVRleHR1cmUocm9vdFVybCArIHBhcnNlZFRl
eHR1cmUubmFtZSwgc2NlbmUsIHBhcnNlZFRleHR1cmUuZXh0ZW5zaW9ucywgZmFsc2UsIHBhcnNl
ZFRleHR1cmUuZmlsZXMgfHwgbnVsbCwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkLCBwcmVmaWx0ZXJl
ZCk7CisgICAgICAgIH0sIHBhcnNlZFRleHR1cmUsIHNjZW5lKTsKKyAgICAgICAgLy8gTG9jYWwg
Q3ViZW1hcHMKKyAgICAgICAgaWYgKHBhcnNlZFRleHR1cmUuYm91bmRpbmdCb3hQb3NpdGlvbikg
eworICAgICAgICAgICAgdGV4dHVyZS5ib3VuZGluZ0JveFBvc2l0aW9uID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXko
cGFyc2VkVGV4dHVyZS5ib3VuZGluZ0JveFBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocGFyc2VkVGV4dHVyZS5ib3VuZGluZ0JveFNpemUpIHsKKyAgICAgICAgICAgIHRleHR1cmUu
Ym91bmRpbmdCb3hTaXplID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocGFyc2VkVGV4dHVyZS5ib3VuZGluZ0JveFNp
emUpOworICAgICAgICB9CisgICAgICAgIC8vIEFuaW1hdGlvbnMKKyAgICAgICAgaWYgKHBhcnNl
ZFRleHR1cmUuYW5pbWF0aW9ucykgeworICAgICAgICAgICAgZm9yICh2YXIgYW5pbWF0aW9uSW5k
ZXggPSAwOyBhbmltYXRpb25JbmRleCA8IHBhcnNlZFRleHR1cmUuYW5pbWF0aW9ucy5sZW5ndGg7
IGFuaW1hdGlvbkluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkQW5pbWF0aW9u
ID0gcGFyc2VkVGV4dHVyZS5hbmltYXRpb25zW2FuaW1hdGlvbkluZGV4XTsKKyAgICAgICAgICAg
ICAgICB2YXIgaW50ZXJuYWxDbGFzcyA9IF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJfVHlwZVN0b3JlIl0uR2V0Q2xhc3MoIkJBQllMT04uQW5pbWF0aW9uIik7
CisgICAgICAgICAgICAgICAgaWYgKGludGVybmFsQ2xhc3MpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS5hbmltYXRpb25zLnB1c2goaW50ZXJuYWxDbGFzcy5QYXJzZShwYXJzZWRBbmlt
YXRpb24pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNYWtlcyBhIGNs
b25lLCBvciBkZWVwIGNvcHksIG9mIHRoZSBjdWJlIHRleHR1cmUKKyAgICAgKiBAcmV0dXJucyBh
IG5ldyBjdWJlIHRleHR1cmUKKyAgICAgKi8KKyAgICBDdWJlVGV4dHVyZS5wcm90b3R5cGUuY2xv
bmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZh
ciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgdmFyIHVuaXF1ZUlkID0gMDsKKyAg
ICAgICAgdmFyIG5ld0N1YmVUZXh0dXJlID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uQ2xvbmUoZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjdWJlVGV4dHVyZSA9IG5ldyBDdWJl
VGV4dHVyZShfdGhpcy51cmwsIHNjZW5lLCBfdGhpcy5fZXh0ZW5zaW9ucywgX3RoaXMuX25vTWlw
bWFwLCBfdGhpcy5fZmlsZXMpOworICAgICAgICAgICAgdW5pcXVlSWQgPSBjdWJlVGV4dHVyZS51
bmlxdWVJZDsKKyAgICAgICAgICAgIHJldHVybiBjdWJlVGV4dHVyZTsKKyAgICAgICAgfSwgdGhp
cyk7CisgICAgICAgIG5ld0N1YmVUZXh0dXJlLnVuaXF1ZUlkID0gdW5pcXVlSWQ7CisgICAgICAg
IHJldHVybiBuZXdDdWJlVGV4dHVyZTsKKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgicm90YXRp
b25ZIikKKyAgICBdLCBDdWJlVGV4dHVyZS5wcm90b3R5cGUsICJyb3RhdGlvblkiLCBudWxsKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemUiXSkoImZpbGVzIikKKyAgICBdLCBDdWJlVGV4dHVyZS5wcm90b3R5cGUs
ICJfZmlsZXMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzTWF0cml4Il0pKCJ0ZXh0dXJlTWF0
cml4IikKKyAgICBdLCBDdWJlVGV4dHVyZS5wcm90b3R5cGUsICJfdGV4dHVyZU1hdHJpeCIsIHZv
aWQgMCk7CisgICAgcmV0dXJuIEN1YmVUZXh0dXJlOworfShfTWF0ZXJpYWxzX1RleHR1cmVzX2Jh
c2VUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkJhc2VUZXh0dXJlIl0pKTsK
KworX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIlRleHR1cmUiXS5fQ3ViZVRleHR1cmVQYXJzZXIgPSBDdWJlVGV4dHVyZS5QYXJzZTsKKy8v
IFNvbWUgZXhwb3J0ZXJzIHJlbGllcyBvbiBUb29scy5JbnN0YW50aWF0ZQorX01pc2NfdHlwZVN0
b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVk
VHlwZXNbIkJBQllMT04uQ3ViZVRleHR1cmUiXSA9IEN1YmVUZXh0dXJlOworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvZHluYW1pY1RleHR1cmUudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTWF0ZXJpYWxzL1RleHR1cmVzL2R5bmFtaWNUZXh0dXJlLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogRHluYW1pY1RleHR1cmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiRHluYW1pY1RleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIER5bmFtaWNUZXh0dXJlOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxl
cy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19s
b2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMv
VGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKworCisKKworLyoqCisgKiBB
IGNsYXNzIGV4dGVuZGluZyBUZXh0dXJlIGFsbG93aW5nIGRyYXdpbmcgb24gYSB0ZXh0dXJlCisg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vZHluYW1pY3RleHR1cmUKKyAq
LwordmFyIER5bmFtaWNUZXh0dXJlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikg
eworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKER5
bmFtaWNUZXh0dXJlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBEeW5hbWlj
VGV4dHVyZQorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHRleHR1
cmUKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBwcm92aWRlcyAzIGFsdGVybmF0aXZlcyBmb3Igd2lk
dGggYW5kIGhlaWdodCBvZiB0ZXh0dXJlLCBhIGNhbnZhcywgb2JqZWN0IHdpdGggd2lkdGggYW5k
IGhlaWdodCBwcm9wZXJ0aWVzLCBudW1iZXIgZm9yIGJvdGggd2lkdGggYW5kIGhlaWdodAorICAg
ICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB3aGVyZSB5b3Ugd2FudCB0aGUgdGV4
dHVyZQorICAgICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMgZGVmaW5lcyB0aGUgdXNlIG9mIE1p
bk1hcHMgb3Igbm90IChkZWZhdWx0IGlzIGZhbHNlKQorICAgICAqIEBwYXJhbSBzYW1wbGluZ01v
ZGUgZGVmaW5lcyB0aGUgc2FtcGxpbmcgbW9kZSB0byB1c2UgKGRlZmF1bHQgaXMgVGV4dHVyZS5U
UklMSU5FQVJfU0FNUExJTkdNT0RFKQorICAgICAqIEBwYXJhbSBmb3JtYXQgZGVmaW5lcyB0aGUg
dGV4dHVyZSBmb3JtYXQgdG8gdXNlIChkZWZhdWx0IGlzIEVuZ2luZS5URVhUVVJFRk9STUFUX1JH
QkEpCisgICAgICovCisgICAgZnVuY3Rpb24gRHluYW1pY1RleHR1cmUobmFtZSwgb3B0aW9ucywg
c2NlbmUsIGdlbmVyYXRlTWlwTWFwcywgc2FtcGxpbmdNb2RlLCBmb3JtYXQpIHsKKyAgICAgICAg
aWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIGlmIChzYW1w
bGluZ01vZGUgPT09IHZvaWQgMCkgeyBzYW1wbGluZ01vZGUgPSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9UUklMSU5F
QVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIGlmIChmb3JtYXQgPT09IHZvaWQgMCkgeyBmb3Jt
YXQgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIG51bGwsIHNjZW5lLCAhZ2VuZXJhdGVNaXBNYXBzLCB1bmRlZmluZWQsIHNh
bXBsaW5nTW9kZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBm
b3JtYXQpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLm5hbWUgPSBuYW1lOworICAgICAgICBfdGhp
cy5fZW5naW5lID0gX3RoaXMuZ2V0U2NlbmUoKS5nZXRFbmdpbmUoKTsKKyAgICAgICAgX3RoaXMu
d3JhcFUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICBfdGhpcy53cmFw
ViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgIF90aGlzLl9nZW5lcmF0
ZU1pcE1hcHMgPSBnZW5lcmF0ZU1pcE1hcHM7CisgICAgICAgIGlmIChvcHRpb25zLmdldENvbnRl
eHQpIHsKKyAgICAgICAgICAgIF90aGlzLl9jYW52YXMgPSBvcHRpb25zOworICAgICAgICAgICAg
X3RoaXMuX3RleHR1cmUgPSBfdGhpcy5fZW5naW5lLmNyZWF0ZUR5bmFtaWNUZXh0dXJlKG9wdGlv
bnMud2lkdGgsIG9wdGlvbnMuaGVpZ2h0LCBnZW5lcmF0ZU1pcE1hcHMsIHNhbXBsaW5nTW9kZSk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfdGhpcy5fY2FudmFzID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgICAgICAgICBpZiAob3B0aW9u
cy53aWR0aCB8fCBvcHRpb25zLndpZHRoID09PSAwKSB7CisgICAgICAgICAgICAgICAgX3RoaXMu
X3RleHR1cmUgPSBfdGhpcy5fZW5naW5lLmNyZWF0ZUR5bmFtaWNUZXh0dXJlKG9wdGlvbnMud2lk
dGgsIG9wdGlvbnMuaGVpZ2h0LCBnZW5lcmF0ZU1pcE1hcHMsIHNhbXBsaW5nTW9kZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdGV4
dHVyZSA9IF90aGlzLl9lbmdpbmUuY3JlYXRlRHluYW1pY1RleHR1cmUob3B0aW9ucywgb3B0aW9u
cywgZ2VuZXJhdGVNaXBNYXBzLCBzYW1wbGluZ01vZGUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHZhciB0ZXh0dXJlU2l6ZSA9IF90aGlzLmdldFNpemUoKTsKKyAgICAgICAg
X3RoaXMuX2NhbnZhcy53aWR0aCA9IHRleHR1cmVTaXplLndpZHRoOworICAgICAgICBfdGhpcy5f
Y2FudmFzLmhlaWdodCA9IHRleHR1cmVTaXplLmhlaWdodDsKKyAgICAgICAgX3RoaXMuX2NvbnRl
eHQgPSBfdGhpcy5fY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXJyZW50IGNsYXNzIG5hbWUgb2Yg
dGhlIHRleHR1cmUgdXNlZnVsIGZvciBzZXJpYWxpemF0aW9uIG9yIGR5bmFtaWMgY29kaW5nLgor
ICAgICAqIEByZXR1cm5zICJEeW5hbWljVGV4dHVyZSIKKyAgICAgKi8KKyAgICBEeW5hbWljVGV4
dHVyZS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gIkR5bmFtaWNUZXh0dXJlIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShE
eW5hbWljVGV4dHVyZS5wcm90b3R5cGUsICJjYW5SZXNjYWxlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBjYW5SZXNjYWxlCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBEeW5hbWljVGV4dHVyZS5wcm90b3R5cGUuX3JlY3JlYXRl
ID0gZnVuY3Rpb24gKHRleHR1cmVTaXplKSB7CisgICAgICAgIHRoaXMuX2NhbnZhcy53aWR0aCA9
IHRleHR1cmVTaXplLndpZHRoOworICAgICAgICB0aGlzLl9jYW52YXMuaGVpZ2h0ID0gdGV4dHVy
ZVNpemUuaGVpZ2h0OworICAgICAgICB0aGlzLnJlbGVhc2VJbnRlcm5hbFRleHR1cmUoKTsKKyAg
ICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX2VuZ2luZS5jcmVhdGVEeW5hbWljVGV4dHVyZSh0
ZXh0dXJlU2l6ZS53aWR0aCwgdGV4dHVyZVNpemUuaGVpZ2h0LCB0aGlzLl9nZW5lcmF0ZU1pcE1h
cHMsIHRoaXMuc2FtcGxpbmdNb2RlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNjYWxlcyB0
aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSByYXRpbyB0aGUgc2NhbGUgZmFjdG9yIHRvIGFwcGx5
IHRvIGJvdGggd2lkdGggYW5kIGhlaWdodAorICAgICAqLworICAgIER5bmFtaWNUZXh0dXJlLnBy
b3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uIChyYXRpbykgeworICAgICAgICB2YXIgdGV4dHVyZVNp
emUgPSB0aGlzLmdldFNpemUoKTsKKyAgICAgICAgdGV4dHVyZVNpemUud2lkdGggKj0gcmF0aW87
CisgICAgICAgIHRleHR1cmVTaXplLmhlaWdodCAqPSByYXRpbzsKKyAgICAgICAgdGhpcy5fcmVj
cmVhdGUodGV4dHVyZVNpemUpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVzaXplcyB0aGUg
dGV4dHVyZQorICAgICAqIEBwYXJhbSB3aWR0aCB0aGUgbmV3IHdpZHRoCisgICAgICogQHBhcmFt
IGhlaWdodCB0aGUgbmV3IGhlaWdodAorICAgICAqLworICAgIER5bmFtaWNUZXh0dXJlLnByb3Rv
dHlwZS5zY2FsZVRvID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgdmFyIHRl
eHR1cmVTaXplID0gdGhpcy5nZXRTaXplKCk7CisgICAgICAgIHRleHR1cmVTaXplLndpZHRoID0g
d2lkdGg7CisgICAgICAgIHRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgdGhp
cy5fcmVjcmVhdGUodGV4dHVyZVNpemUpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0
aGUgY29udGV4dCBvZiB0aGUgY2FudmFzIHVzZWQgYnkgdGhlIHRleHR1cmUKKyAgICAgKiBAcmV0
dXJucyB0aGUgY2FudmFzIGNvbnRleHQgb2YgdGhlIGR5bmFtaWMgdGV4dHVyZQorICAgICAqLwor
ICAgIER5bmFtaWNUZXh0dXJlLnByb3RvdHlwZS5nZXRDb250ZXh0ID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENs
ZWFycyB0aGUgdGV4dHVyZQorICAgICAqLworICAgIER5bmFtaWNUZXh0dXJlLnByb3RvdHlwZS5j
bGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNpemUgPSB0aGlzLmdldFNpemUoKTsK
KyAgICAgICAgdGhpcy5fY29udGV4dC5maWxsUmVjdCgwLCAwLCBzaXplLndpZHRoLCBzaXplLmhl
aWdodCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSB0ZXh0dXJlCisgICAg
ICogQHBhcmFtIGludmVydFkgZGVmaW5lcyB0aGUgZGlyZWN0aW9uIGZvciB0aGUgWSBheGlzIChk
ZWZhdWx0IGlzIHRydWUgLSB5IGluY3JlYXNlcyBkb3dud2FyZHMpCisgICAgICogQHBhcmFtIHBy
ZW11bEFscGhhIGRlZmluZXMgaWYgYWxwaGEgaXMgc3RvcmVkIGFzIHByZW11bHRpcGxpZWQgKGRl
ZmF1bHQgaXMgZmFsc2UpCisgICAgICovCisgICAgRHluYW1pY1RleHR1cmUucHJvdG90eXBlLnVw
ZGF0ZSA9IGZ1bmN0aW9uIChpbnZlcnRZLCBwcmVtdWxBbHBoYSkgeworICAgICAgICBpZiAocHJl
bXVsQWxwaGEgPT09IHZvaWQgMCkgeyBwcmVtdWxBbHBoYSA9IGZhbHNlOyB9CisgICAgICAgIHRo
aXMuX2VuZ2luZS51cGRhdGVEeW5hbWljVGV4dHVyZSh0aGlzLl90ZXh0dXJlLCB0aGlzLl9jYW52
YXMsIGludmVydFkgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBpbnZlcnRZLCBwcmVtdWxBbHBoYSwg
dGhpcy5fZm9ybWF0IHx8IHVuZGVmaW5lZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEcmF3
cyB0ZXh0IG9udG8gdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gdGV4dCBkZWZpbmVzIHRoZSB0
ZXh0IHRvIGJlIGRyYXduCisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgcGxhY2VtZW50IG9m
IHRoZSB0ZXh0IGZyb20gdGhlIGxlZnQKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSBwbGFj
ZW1lbnQgb2YgdGhlIHRleHQgZnJvbSB0aGUgdG9wIHdoZW4gaW52ZXJ0WSBpcyB0cnVlIGFuZCBm
cm9tIHRoZSBib3R0b20gd2hlbiBmYWxzZQorICAgICAqIEBwYXJhbSBmb250IGRlZmluZXMgdGhl
IGZvbnQgdG8gYmUgdXNlZCB3aXRoIGZvbnQtc3R5bGUsIGZvbnQtc2l6ZSwgZm9udC1uYW1lCisg
ICAgICogQHBhcmFtIGNvbG9yIGRlZmluZXMgdGhlIGNvbG9yIHVzZWQgZm9yIHRoZSB0ZXh0Cisg
ICAgICogQHBhcmFtIGNsZWFyQ29sb3IgZGVmaW5lcyB0aGUgY29sb3IgZm9yIHRoZSBjYW52YXMs
IHVzZSBudWxsIHRvIG5vdCBvdmVyd3JpdGUgY2FudmFzCisgICAgICogQHBhcmFtIGludmVydFkg
ZGVmaW5lcyB0aGUgZGlyZWN0aW9uIGZvciB0aGUgWSBheGlzIChkZWZhdWx0IGlzIHRydWUgLSB5
IGluY3JlYXNlcyBkb3dud2FyZHMpCisgICAgICogQHBhcmFtIHVwZGF0ZSBkZWZpbmVzIHdoZXRo
ZXIgdGV4dHVyZSBpcyBpbW1lZGlhdGVseSB1cGRhdGUgKGRlZmF1bHQgaXMgdHJ1ZSkKKyAgICAg
Ki8KKyAgICBEeW5hbWljVGV4dHVyZS5wcm90b3R5cGUuZHJhd1RleHQgPSBmdW5jdGlvbiAodGV4
dCwgeCwgeSwgZm9udCwgY29sb3IsIGNsZWFyQ29sb3IsIGludmVydFksIHVwZGF0ZSkgeworICAg
ICAgICBpZiAodXBkYXRlID09PSB2b2lkIDApIHsgdXBkYXRlID0gdHJ1ZTsgfQorICAgICAgICB2
YXIgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpOworICAgICAgICBpZiAoY2xlYXJDb2xvcikgeworICAg
ICAgICAgICAgdGhpcy5fY29udGV4dC5maWxsU3R5bGUgPSBjbGVhckNvbG9yOworICAgICAgICAg
ICAgdGhpcy5fY29udGV4dC5maWxsUmVjdCgwLCAwLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY29udGV4dC5mb250ID0gZm9udDsKKyAgICAgICAg
aWYgKHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICB2YXIgdGV4
dFNpemUgPSB0aGlzLl9jb250ZXh0Lm1lYXN1cmVUZXh0KHRleHQpOworICAgICAgICAgICAgeCA9
IChzaXplLndpZHRoIC0gdGV4dFNpemUud2lkdGgpIC8gMjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoeSA9PT0gbnVsbCB8fCB5ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHZhciBmb250
U2l6ZSA9IHBhcnNlSW50KChmb250LnJlcGxhY2UoL1xEL2csICcnKSkpOworICAgICAgICAgICAg
eSA9IChzaXplLmhlaWdodCAvIDIpICsgKGZvbnRTaXplIC8gMy42NSk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fY29udGV4dC5maWxsU3R5bGUgPSBjb2xvcjsKKyAgICAgICAgdGhpcy5fY29u
dGV4dC5maWxsVGV4dCh0ZXh0LCB4LCB5KTsKKyAgICAgICAgaWYgKHVwZGF0ZSkgeworICAgICAg
ICAgICAgdGhpcy51cGRhdGUoaW52ZXJ0WSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIENsb25lcyB0aGUgdGV4dHVyZQorICAgICAqIEByZXR1cm5zIHRoZSBjbG9uZSBvZiB0
aGUgdGV4dHVyZS4KKyAgICAgKi8KKyAgICBEeW5hbWljVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAg
ICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIHRleHR1cmVTaXplID0gdGhpcy5nZXRTaXplKCk7CisgICAgICAgIHZhciBu
ZXdUZXh0dXJlID0gbmV3IER5bmFtaWNUZXh0dXJlKHRoaXMubmFtZSwgdGV4dHVyZVNpemUsIHNj
ZW5lLCB0aGlzLl9nZW5lcmF0ZU1pcE1hcHMpOworICAgICAgICAvLyBCYXNlIHRleHR1cmUKKyAg
ICAgICAgbmV3VGV4dHVyZS5oYXNBbHBoYSA9IHRoaXMuaGFzQWxwaGE7CisgICAgICAgIG5ld1Rl
eHR1cmUubGV2ZWwgPSB0aGlzLmxldmVsOworICAgICAgICAvLyBEeW5hbWljIFRleHR1cmUKKyAg
ICAgICAgbmV3VGV4dHVyZS53cmFwVSA9IHRoaXMud3JhcFU7CisgICAgICAgIG5ld1RleHR1cmUu
d3JhcFYgPSB0aGlzLndyYXBWOworICAgICAgICByZXR1cm4gbmV3VGV4dHVyZTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGR5bmFtaWMgdGV4dHVyZS4gIFRoZSBzY2Vu
ZSBzaG91bGQgYmUgcmVhZHkgYmVmb3JlIHRoZSBkeW5hbWljIHRleHR1cmUgaXMgc2VyaWFsaXpl
ZAorICAgICAqIEByZXR1cm5zIGEgc2VyaWFsaXplZCBkeW5hbWljIHRleHR1cmUgb2JqZWN0Cisg
ICAgICovCisgICAgRHluYW1pY1RleHR1cmUucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICBpZiAo
c2NlbmUgJiYgIXNjZW5lLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4oIlRoZSBzY2VuZSBtdXN0
IGJlIHJlYWR5IGJlZm9yZSBzZXJpYWxpemluZyB0aGUgZHluYW1pYyB0ZXh0dXJlIik7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSBfc3VwZXIucHJvdG90eXBl
LnNlcmlhbGl6ZS5jYWxsKHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmJhc2U2
NFN0cmluZyA9IHRoaXMuX2NhbnZhcy50b0RhdGFVUkwoKTsKKyAgICAgICAgc2VyaWFsaXphdGlv
bk9iamVjdC5pbnZlcnRZID0gdGhpcy5faW52ZXJ0WTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5zYW1wbGluZ01vZGUgPSB0aGlzLnNhbXBsaW5nTW9kZTsKKyAgICAgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIER5bmFt
aWNUZXh0dXJlLnByb3RvdHlwZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy51cGRhdGUoKTsKKyAgICB9OworICAgIHJldHVybiBEeW5hbWljVGV4dHVyZTsKK30oX01hdGVy
aWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1
cmUiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0dXJlcy9l
cXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlh
bHMvVGV4dHVyZXMvZXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZSAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmU7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGli
L3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX0hpZ2hEeW5h
bWljUmFuZ2VfcGFub3JhbWFUb0N1YmVtYXBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvSGlnaER5bmFtaWNSYW5nZS9wYW5v
cmFtYVRvQ3ViZW1hcCAqLyAiLi9NaXNjL0hpZ2hEeW5hbWljUmFuZ2UvcGFub3JhbWFUb0N1YmVt
YXAudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0Vu
Z2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2Jhc2VUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2VUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJl
cy9iYXNlVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Rl
eHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfRXh0ZW5zaW9uc19lbmdp
bmVfcmF3VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9FeHRlbnNpb25zL2VuZ2luZS5yYXdUZXh0dXJlICov
ICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUucmF3VGV4dHVyZS50cyIpOworCisKKworCisK
KworCisvKioKKyAqIFRoaXMgcmVwcmVzZW50cyBhIHRleHR1cmUgY29taW5nIGZyb20gYW4gZXF1
aXJlY3Rhbmd1bGFyIGltYWdlIHN1cHBvcnRlZCBieSB0aGUgd2ViIGJyb3dzZXIgY2FudmFzLgor
ICovCit2YXIgRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUsIF9zdXBlcik7CisgICAgLyoq
CisgICAgICogSW5zdGFudGlhdGVzIGFuIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlIGZyb20g
dGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzLgorICAgICAqIEBwYXJhbSB1cmwgVGhlIGxvY2F0aW9u
IG9mIHRoZSBpbWFnZQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhlIHRleHR1cmUg
d2lsbCBiZSB1c2VkIGluCisgICAgICogQHBhcmFtIHNpemUgVGhlIGN1YmVtYXAgZGVzaXJlZCBz
aXplICh0aGUgbW9yZSBpdCBpbmNyZWFzZXMgdGhlIGxvbmdlciB0aGUgZ2VuZXJhdGlvbiB3aWxs
IGJlKQorICAgICAqIEBwYXJhbSBub01pcG1hcCBGb3JjZXMgdG8gbm90IGdlbmVyYXRlIHRoZSBt
aXBtYXAgaWYgdHJ1ZQorICAgICAqIEBwYXJhbSBnYW1tYVNwYWNlIFNwZWNpZmllcyBpZiB0aGUg
dGV4dHVyZSB3aWxsIGJlIHVzZWQgaW4gZ2FtbWEgb3IgbGluZWFyIHNwYWNlCisgICAgICogKHRo
ZSBQQlIgbWF0ZXJpYWwgcmVxdWlyZXMgdGhvc2UgdGV4dHVyZXMgaW4gbGluZWFyIHNwYWNlLCBi
dXQgdGhlIHN0YW5kYXJkIG1hdGVyaWFsIHdvdWxkIHJlcXVpcmUgdGhlbSBpbiBHYW1tYSBzcGFj
ZSkKKyAgICAgKiBAcGFyYW0gb25Mb2FkIOKAlCBkZWZpbmVzIGEgY2FsbGJhY2sgY2FsbGVkIHdo
ZW4gdGV4dHVyZSBpcyBsb2FkZWQKKyAgICAgKiBAcGFyYW0gb25FcnJvciDigJQgZGVmaW5lcyBh
IGNhbGxiYWNrIGNhbGxlZCBpZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAqLworICAgIGZ1bmN0
aW9uIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlKHVybCwgc2NlbmUsIHNpemUsIG5vTWlwbWFw
LCBnYW1tYVNwYWNlLCBvbkxvYWQsIG9uRXJyb3IpIHsKKyAgICAgICAgaWYgKG5vTWlwbWFwID09
PSB2b2lkIDApIHsgbm9NaXBtYXAgPSBmYWxzZTsgfQorICAgICAgICBpZiAoZ2FtbWFTcGFjZSA9
PT0gdm9pZCAwKSB7IGdhbW1hU3BhY2UgPSB0cnVlOyB9CisgICAgICAgIGlmIChvbkxvYWQgPT09
IHZvaWQgMCkgeyBvbkxvYWQgPSBudWxsOyB9CisgICAgICAgIGlmIChvbkVycm9yID09PSB2b2lk
IDApIHsgb25FcnJvciA9IG51bGw7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwo
dGhpcywgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9vbkxvYWQgPSBudWxsOworICAg
ICAgICBfdGhpcy5fb25FcnJvciA9IG51bGw7CisgICAgICAgIC8qKiBUaGUgdGV4dHVyZSBjb29y
ZGluYXRlcyBtb2RlLiBBcyB0aGlzIHRleHR1cmUgaXMgc3RvcmVkIGluIGEgY3ViZSBmb3JtYXQs
IHBsZWFzZSBtb2RpZnkgY2FyZWZ1bGx5LiAqLworICAgICAgICBfdGhpcy5jb29yZGluYXRlc01v
ZGUgPSBfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQ1VC
SUNfTU9ERTsKKyAgICAgICAgaWYgKCF1cmwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cignSW1hZ2UgdXJsIGlzIG5vdCBzZXQnKTsKKyAgICAgICAgfQorICAgICAgICBfdGhpcy5uYW1l
ID0gdXJsOworICAgICAgICBfdGhpcy51cmwgPSB1cmw7CisgICAgICAgIF90aGlzLl9zaXplID0g
c2l6ZTsKKyAgICAgICAgX3RoaXMuX25vTWlwbWFwID0gbm9NaXBtYXA7CisgICAgICAgIF90aGlz
LmdhbW1hU3BhY2UgPSBnYW1tYVNwYWNlOworICAgICAgICBfdGhpcy5fb25Mb2FkID0gb25Mb2Fk
OworICAgICAgICBfdGhpcy5fb25FcnJvciA9IG9uRXJyb3I7CisgICAgICAgIF90aGlzLmhhc0Fs
cGhhID0gZmFsc2U7CisgICAgICAgIF90aGlzLmlzQ3ViZSA9IHRydWU7CisgICAgICAgIF90aGlz
Ll90ZXh0dXJlID0gX3RoaXMuX2dldEZyb21DYWNoZSh1cmwsIF90aGlzLl9ub01pcG1hcCk7Cisg
ICAgICAgIGlmICghX3RoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgIGlmICghc2NlbmUudXNl
RGVsYXllZFRleHR1cmVMb2FkaW5nKSB7CisgICAgICAgICAgICAgICAgX3RoaXMubG9hZEltYWdl
KF90aGlzLmxvYWRUZXh0dXJlLmJpbmQoX3RoaXMpLCBfdGhpcy5fb25FcnJvcik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5kZWxheUxv
YWRTdGF0ZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJF
bmdpbmUiXS5ERUxBWUxPQURTVEFURV9OT1RMT0FERUQ7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAob25Mb2FkKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuX3Rl
eHR1cmUuaXNSZWFkeSkgeworICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bIlRvb2xzIl0uU2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHsgcmV0
dXJuIG9uTG9hZCgpOyB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlLm9uTG9hZGVkT2JzZXJ2YWJsZS5hZGQob25Mb2Fk
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3RoaXM7CisgICAg
fQorICAgIC8qKgorICAgICAqIExvYWQgdGhlIGltYWdlIGRhdGEsIGJ5IHB1dHRpbmcgdGhlIGlt
YWdlIG9uIGEgY2FudmFzIGFuZCBleHRyYWN0aW5nIGl0cyBidWZmZXIuCisgICAgICovCisgICAg
RXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUucHJvdG90eXBlLmxvYWRJbWFnZSA9IGZ1bmN0aW9u
IChsb2FkVGV4dHVyZUNhbGxiYWNrLCBvbkVycm9yKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRo
aXM7CisgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMn
KTsKKyAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7CisgICAgICAgIGltYWdlLmFkZEV2
ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5fd2lk
dGggPSBpbWFnZS53aWR0aDsKKyAgICAgICAgICAgIF90aGlzLl9oZWlnaHQgPSBpbWFnZS5oZWln
aHQ7CisgICAgICAgICAgICBjYW52YXMud2lkdGggPSBfdGhpcy5fd2lkdGg7CisgICAgICAgICAg
ICBjYW52YXMuaGVpZ2h0ID0gX3RoaXMuX2hlaWdodDsKKyAgICAgICAgICAgIHZhciBjdHggPSBj
YW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2Us
IDAsIDApOworICAgICAgICAgICAgdmFyIGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwg
MCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCk7CisgICAgICAgICAgICBfdGhpcy5fYnVmZmVy
ID0gaW1hZ2VEYXRhLmRhdGEuYnVmZmVyOworICAgICAgICAgICAgY2FudmFzLnJlbW92ZSgpOwor
ICAgICAgICAgICAgbG9hZFRleHR1cmVDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAgICAgICAg
aW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAg
ICAgICAgIGlmIChvbkVycm9yKSB7CisgICAgICAgICAgICAgICAgb25FcnJvcihfdGhpcy5nZXRD
bGFzc05hbWUoKSArICIgY291bGQgbm90IGJlIGxvYWRlZCIsIGVycm9yKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisgICAgICAgIGltYWdlLnNyYyA9IHRoaXMudXJsOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ29udmVydCB0aGUgaW1hZ2UgYnVmZmVyIGludG8gYSBjdWJlbWFwIGFu
ZCBjcmVhdGUgYSBDdWJlVGV4dHVyZS4KKyAgICAgKi8KKyAgICBFcXVpUmVjdGFuZ3VsYXJDdWJl
VGV4dHVyZS5wcm90b3R5cGUubG9hZFRleHR1cmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAg
ICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGltYWdl
RGF0YSA9IF90aGlzLmdldEZsb2F0MzJBcnJheUZyb21BcnJheUJ1ZmZlcihfdGhpcy5fYnVmZmVy
KTsKKyAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJhdyBsaW5lYXIgZGF0YS4KKyAgICAgICAg
ICAgIHZhciBkYXRhID0gX01pc2NfSGlnaER5bmFtaWNSYW5nZV9wYW5vcmFtYVRvQ3ViZW1hcF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQYW5vcmFtYVRvQ3ViZU1hcFRvb2xzIl0uQ29u
dmVydFBhbm9yYW1hVG9DdWJlbWFwKGltYWdlRGF0YSwgX3RoaXMuX3dpZHRoLCBfdGhpcy5faGVp
Z2h0LCBfdGhpcy5fc2l6ZSk7CisgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdOworICAgICAg
ICAgICAgLy8gUHVzaCBlYWNoIGZhY2VzLgorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCA2OyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgZGF0YUZhY2UgPSBkYXRhW0VxdWlSZWN0
YW5ndWxhckN1YmVUZXh0dXJlLl9GYWNlc01hcHBpbmdbaV1dOworICAgICAgICAgICAgICAgIHJl
c3VsdHMucHVzaChkYXRhRmFjZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0czsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3RleHR1cmUgPSBzY2VuZQorICAgICAg
ICAgICAgLmdldEVuZ2luZSgpCisgICAgICAgICAgICAuY3JlYXRlUmF3Q3ViZVRleHR1cmVGcm9t
VXJsKHRoaXMudXJsLCBzY2VuZSwgdGhpcy5fc2l6ZSwgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIkVuZ2luZSJdLlRFWFRVUkVGT1JNQVRfUkdCLCBzY2VuZS5n
ZXRFbmdpbmUoKS5nZXRDYXBzKCkudGV4dHVyZUZsb2F0CisgICAgICAgICAgICA/IF9FbmdpbmVz
X2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmUiXS5URVhUVVJFVFlQ
RV9GTE9BVAorICAgICAgICAgICAgOiBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5URUdFUiwgdGhpcy5f
bm9NaXBtYXAsIGNhbGxiYWNrLCBudWxsLCB0aGlzLl9vbkxvYWQsIHRoaXMuX29uRXJyb3IpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ29udmVydCB0aGUgQXJyYXlCdWZmZXIgaW50byBhIEZs
b2F0MzJBcnJheSBhbmQgZHJvcCB0aGUgdHJhbnNwYXJlbmN5IGNoYW5uZWwuCisgICAgICogQHBh
cmFtIGJ1ZmZlciBUaGUgQXJyYXlCdWZmZXIgdGhhdCBzaG91bGQgYmUgY29udmVydGVkLgorICAg
ICAqIEByZXR1cm5zIFRoZSBidWZmZXIgYXMgRmxvYXQzMkFycmF5LgorICAgICAqLworICAgIEVx
dWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlLnByb3RvdHlwZS5nZXRGbG9hdDMyQXJyYXlGcm9tQXJy
YXlCdWZmZXIgPSBmdW5jdGlvbiAoYnVmZmVyKSB7CisgICAgICAgIHZhciBkYXRhVmlldyA9IG5l
dyBEYXRhVmlldyhidWZmZXIpOworICAgICAgICB2YXIgZmxvYXRJbWFnZURhdGEgPSBuZXcgRmxv
YXQzMkFycmF5KChidWZmZXIuYnl0ZUxlbmd0aCAqIDMpIC8gNCk7CisgICAgICAgIHZhciBrID0g
MDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXIuYnl0ZUxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAvLyBXZSBkcm9wIHRoZSB0cmFuc3BhcmVuY3kgY2hhbm5lbCwgYmVjYXVz
ZSB3ZSBkbyBub3QgbmVlZC93YW50IGl0CisgICAgICAgICAgICBpZiAoKGkgKyAxKSAlIDQgIT09
IDApIHsKKyAgICAgICAgICAgICAgICBmbG9hdEltYWdlRGF0YVtrKytdID0gZGF0YVZpZXcuZ2V0
VWludDgoaSkgLyAyNTU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZsb2F0SW1hZ2VEYXRhOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXJyZW50
IGNsYXNzIG5hbWUgb2YgdGhlIHRleHR1cmUgdXNlZnVsIGZvciBzZXJpYWxpemF0aW9uIG9yIGR5
bmFtaWMgY29kaW5nLgorICAgICAqIEByZXR1cm5zICJFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVy
ZSIKKyAgICAgKi8KKyAgICBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZS5wcm90b3R5cGUuZ2V0
Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkVxdWlSZWN0YW5ndWxh
ckN1YmVUZXh0dXJlIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGNsb25lIG9m
IHRoZSBjdXJyZW50IEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlIGFuZCByZXR1cm4gaXQuCisg
ICAgICogQHJldHVybnMgQSBjbG9uZSBvZiB0aGUgY3VycmVudCBFcXVpUmVjdGFuZ3VsYXJDdWJl
VGV4dHVyZS4KKyAgICAgKi8KKyAgICBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZS5wcm90b3R5
cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2Nl
bmUoKTsKKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIG5ld1RleHR1cmUgPSBuZXcgRXF1aVJlY3Rhbmd1bGFyQ3Vi
ZVRleHR1cmUodGhpcy51cmwsIHNjZW5lLCB0aGlzLl9zaXplLCB0aGlzLl9ub01pcG1hcCwgdGhp
cy5nYW1tYVNwYWNlKTsKKyAgICAgICAgLy8gQmFzZSB0ZXh0dXJlCisgICAgICAgIG5ld1RleHR1
cmUubGV2ZWwgPSB0aGlzLmxldmVsOworICAgICAgICBuZXdUZXh0dXJlLndyYXBVID0gdGhpcy53
cmFwVTsKKyAgICAgICAgbmV3VGV4dHVyZS53cmFwViA9IHRoaXMud3JhcFY7CisgICAgICAgIG5l
d1RleHR1cmUuY29vcmRpbmF0ZXNJbmRleCA9IHRoaXMuY29vcmRpbmF0ZXNJbmRleDsKKyAgICAg
ICAgbmV3VGV4dHVyZS5jb29yZGluYXRlc01vZGUgPSB0aGlzLmNvb3JkaW5hdGVzTW9kZTsKKyAg
ICAgICAgcmV0dXJuIG5ld1RleHR1cmU7CisgICAgfTsKKyAgICAvKiogVGhlIHNpeCBmYWNlcyBv
ZiB0aGUgY3ViZS4gKi8KKyAgICBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZS5fRmFjZXNNYXBw
aW5nID0gWydyaWdodCcsICdsZWZ0JywgJ3VwJywgJ2Rvd24nLCAnZnJvbnQnLCAnYmFjayddOwor
ICAgIHJldHVybiBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZTsKK30oX2Jhc2VUZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkJhc2VUZXh0dXJlIl0pKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaGRyQ3ViZVRleHR1cmUudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vTWF0ZXJpYWxzL1RleHR1cmVzL2hkckN1YmVUZXh0dXJlLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogSERSQ3ViZVRleHR1cmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiSERSQ3ViZVRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEhEUkN1YmVUZXh0dXJl
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9k
dWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVj
dG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9F
bmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfYmFzZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9U
ZXh0dXJlcy9iYXNlVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvYmFzZVRleHR1cmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJl
cy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX0hpZ2hEeW5hbWljUmFuZ2VfaGRyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9N
aXNjL0hpZ2hEeW5hbWljUmFuZ2UvaGRyICovICIuL01pc2MvSGlnaER5bmFtaWNSYW5nZS9oZHIu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19IaWdoRHluYW1pY1JhbmdlX2N1
YmVtYXBUb1NwaGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvSGlnaER5bmFtaWNSYW5nZS9jdWJl
bWFwVG9TcGhlcmljYWxQb2x5bm9taWFsICovICIuL01pc2MvSGlnaER5bmFtaWNSYW5nZS9jdWJl
bWFwVG9TcGhlcmljYWxQb2x5bm9taWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3Rvb2xz
ICovICIuL01pc2MvdG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5l
c19FeHRlbnNpb25zX2VuZ2luZV9yYXdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9FeHRlbnNpb25zL2Vu
Z2luZS5yYXdUZXh0dXJlICovICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUucmF3VGV4dHVy
ZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01hdGhzL21hdGguY29uc3RhbnRzICovICIuL01hdGhzL21hdGguY29uc3RhbnRzLnRzIik7
CisKKworCisKKworCisKKworCisKKworCisvKioKKyAqIFRoaXMgcmVwcmVzZW50cyBhIHRleHR1
cmUgY29taW5nIGZyb20gYW4gSERSIGlucHV0LgorICoKKyAqIFRoZSBvbmx5IHN1cHBvcnRlZCBm
b3JtYXQgaXMgY3VycmVudGx5IHBhbm9yYW1hIHBpY3R1cmUgc3RvcmVkIGluIFJHQkUgZm9ybWF0
LgorICogRXhhbXBsZSBvZiBzdWNoIGZpbGVzIGNhbiBiZSBmb3VuZCBvbiBIRFJMaWI6IGh0dHA6
Ly9oZHJsaWIuY29tLworICovCit2YXIgSERSQ3ViZVRleHR1cmUgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19leHRlbmRzIl0oSERSQ3ViZVRleHR1cmUsIF9zdXBlcik7CisgICAgLyoqCisgICAgICog
SW5zdGFudGlhdGVzIGFuIEhEUlRleHR1cmUgZnJvbSB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMu
CisgICAgICoKKyAgICAgKiBAcGFyYW0gdXJsIFRoZSBsb2NhdGlvbiBvZiB0aGUgSERSIHJhdyBk
YXRhIChQYW5vcmFtYSBzdG9yZWQgaW4gUkdCRSBmb3JtYXQpCisgICAgICogQHBhcmFtIHNjZW5l
IFRoZSBzY2VuZSB0aGUgdGV4dHVyZSB3aWxsIGJlIHVzZWQgaW4KKyAgICAgKiBAcGFyYW0gc2l6
ZSBUaGUgY3ViZW1hcCBkZXNpcmVkIHNpemUgKHRoZSBtb3JlIGl0IGluY3JlYXNlcyB0aGUgbG9u
Z2VyIHRoZSBnZW5lcmF0aW9uIHdpbGwgYmUpCisgICAgICogQHBhcmFtIG5vTWlwbWFwIEZvcmNl
cyB0byBub3QgZ2VuZXJhdGUgdGhlIG1pcG1hcCBpZiB0cnVlCisgICAgICogQHBhcmFtIGdlbmVy
YXRlSGFybW9uaWNzIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvIGV4dHJhY3QgdGhlIHBv
bHlub21pYWwgaGFybW9uaWNzIGR1cmluZyB0aGUgZ2VuZXJhdGlvbiBwcm9jZXNzCisgICAgICog
QHBhcmFtIGdhbW1hU3BhY2UgU3BlY2lmaWVzIGlmIHRoZSB0ZXh0dXJlIHdpbGwgYmUgdXNlIGlu
IGdhbW1hIG9yIGxpbmVhciBzcGFjZSAodGhlIFBCUiBtYXRlcmlhbCByZXF1aXJlcyB0aG9zZSB0
ZXh0dXJlIGluIGxpbmVhciBzcGFjZSwgYnV0IHRoZSBzdGFuZGFyZCBtYXRlcmlhbCB3b3VsZCBy
ZXF1aXJlIHRoZW0gaW4gR2FtbWEgc3BhY2UpCisgICAgICogQHBhcmFtIHJlc2VydmVkIFJlc2Vy
dmVkIGZsYWcgZm9yIGludGVybmFsIHVzZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBIRFJDdWJl
VGV4dHVyZSh1cmwsIHNjZW5lLCBzaXplLCBub01pcG1hcCwgZ2VuZXJhdGVIYXJtb25pY3MsIGdh
bW1hU3BhY2UsIHJlc2VydmVkLCBvbkxvYWQsIG9uRXJyb3IpIHsKKyAgICAgICAgaWYgKG5vTWlw
bWFwID09PSB2b2lkIDApIHsgbm9NaXBtYXAgPSBmYWxzZTsgfQorICAgICAgICBpZiAoZ2VuZXJh
dGVIYXJtb25pY3MgPT09IHZvaWQgMCkgeyBnZW5lcmF0ZUhhcm1vbmljcyA9IHRydWU7IH0KKyAg
ICAgICAgaWYgKGdhbW1hU3BhY2UgPT09IHZvaWQgMCkgeyBnYW1tYVNwYWNlID0gZmFsc2U7IH0K
KyAgICAgICAgaWYgKHJlc2VydmVkID09PSB2b2lkIDApIHsgcmVzZXJ2ZWQgPSBmYWxzZTsgfQor
ICAgICAgICBpZiAob25Mb2FkID09PSB2b2lkIDApIHsgb25Mb2FkID0gbnVsbDsgfQorICAgICAg
ICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBudWxsOyB9CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICBfdGhp
cy5fZ2VuZXJhdGVIYXJtb25pY3MgPSB0cnVlOworICAgICAgICBfdGhpcy5fb25Mb2FkID0gbnVs
bDsKKyAgICAgICAgX3RoaXMuX29uRXJyb3IgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAg
ICogVGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgbW9kZS4gQXMgdGhpcyB0ZXh0dXJlIGlzIHN0b3Jl
ZCBpbiBhIGN1YmUgZm9ybWF0LCBwbGVhc2UgbW9kaWZ5IGNhcmVmdWxseS4KKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLmNvb3JkaW5hdGVzTW9kZSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQ1VCSUNfTU9ERTsK
KyAgICAgICAgX3RoaXMuX2lzQmxvY2tpbmcgPSB0cnVlOworICAgICAgICBfdGhpcy5fcm90YXRp
b25ZID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY2VudGVy
IG9mIHRoZSBib3VuZGluZyBib3ggYXNzb2NpYXRlZCB3aXRoIHRoZSBjdWJlIHRleHR1cmUKKyAg
ICAgICAgICogSXQgbXVzdCBkZWZpbmUgd2hlcmUgdGhlIGNhbWVyYSB1c2VkIHRvIHJlbmRlciB0
aGUgdGV4dHVyZSB3YXMgc2V0CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5ib3VuZGluZ0Jv
eFBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIGlmICghdXJsKSB7CisgICAgICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgICAgIH0KKyAgICAgICAgX3RoaXMubmFtZSA9IHVybDsKKyAgICAg
ICAgX3RoaXMudXJsID0gdXJsOworICAgICAgICBfdGhpcy5oYXNBbHBoYSA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5pc0N1YmUgPSB0cnVlOworICAgICAgICBfdGhpcy5fdGV4dHVyZU1hdHJpeCA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgi
XS5JZGVudGl0eSgpOworICAgICAgICBfdGhpcy5fb25Mb2FkID0gb25Mb2FkOworICAgICAgICBf
dGhpcy5fb25FcnJvciA9IG9uRXJyb3I7CisgICAgICAgIF90aGlzLmdhbW1hU3BhY2UgPSBnYW1t
YVNwYWNlOworICAgICAgICBfdGhpcy5fbm9NaXBtYXAgPSBub01pcG1hcDsKKyAgICAgICAgX3Ro
aXMuX3NpemUgPSBzaXplOworICAgICAgICBfdGhpcy5fdGV4dHVyZSA9IF90aGlzLl9nZXRGcm9t
Q2FjaGUodXJsLCBfdGhpcy5fbm9NaXBtYXApOworICAgICAgICBpZiAoIV90aGlzLl90ZXh0dXJl
KSB7CisgICAgICAgICAgICBpZiAoIXNjZW5lLnVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZykgewor
ICAgICAgICAgICAgICAgIF90aGlzLmxvYWRUZXh0dXJlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmUiXS5ERUxB
WUxPQURTVEFURV9OT1RMT0FERUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAob25Mb2FkKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuX3RleHR1cmUuaXNSZWFk
eSkgeworICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIlRvb2xzIl0uU2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uTG9hZCgp
OyB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IF90aGlzLl90ZXh0dXJlLm9uTG9hZGVkT2JzZXJ2YWJsZS5hZGQob25Mb2FkKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShIRFJDdWJlVGV4dHVyZS5wcm90b3R5cGUsICJpc0Jsb2NraW5nIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB3ZXRoZXIgb3Igbm90IHRoZSB0ZXh0dXJl
IGlzIGJsb2NraW5nIGR1cmluZyBsb2FkaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNCbG9ja2luZzsKKyAgICAg
ICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgd2V0aGVyIG9yIG5vdCB0aGUgdGV4
dHVyZSBpcyBibG9ja2luZyBkdXJpbmcgbG9hZGluZy4KKyAgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pc0Jsb2NraW5nID0gdmFs
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIRFJDdWJl
VGV4dHVyZS5wcm90b3R5cGUsICJyb3RhdGlvblkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRleHR1cmUgbWF0cml4IHJvdGF0aW9uIGFuZ2xlIGFyb3VuZCBZIGF4aXMgcmFkaWFu
cy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3JvdGF0aW9uWTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFNldHMgdGV4dHVyZSBtYXRyaXggcm90YXRpb24gYW5nbGUgYXJvdW5kIFkgYXhpcyBpbiBy
YWRpYW5zLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3JvdGF0aW9uWSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5zZXRS
ZWZsZWN0aW9uVGV4dHVyZU1hdHJpeChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siTWF0cml4Il0uUm90YXRpb25ZKHRoaXMuX3JvdGF0aW9uWSkpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSERSQ3ViZVRleHR1cmUu
cHJvdG90eXBlLCAiYm91bmRpbmdCb3hTaXplIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib3VuZGluZ0JveFNpemU7CisgICAgICAgIH0s
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHNpemUgb2YgdGhlIGJv
dW5kaW5nIGJveCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1YmUgdGV4dHVyZQorICAgICAgICAgKiBX
aGVuIGRlZmluZWQsIHRoZSBjdWJlbWFwIHdpbGwgc3dpdGNoIHRvIGxvY2FsIG1vZGUKKyAgICAg
ICAgICogQHNlZSBodHRwczovL2NvbW11bml0eS5hcm0uY29tL2dyYXBoaWNzL2IvYmxvZy9wb3N0
cy9yZWZsZWN0aW9ucy1iYXNlZC1vbi1sb2NhbC1jdWJlbWFwcy1pbi11bml0eQorICAgICAgICAg
KiBAZXhhbXBsZSBodHRwczovL3d3dy5iYWJ5bG9uanMtcGxheWdyb3VuZC5jb20vI1JOQVNNTAor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9ib3VuZGluZ0JveFNpemUgJiYgdGhpcy5fYm91bmRpbmdCb3hTaXplLmVxdWFs
cyh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9ib3VuZGluZ0JveFNpemUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHZhciBz
Y2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgICAgIGlmIChzY2VuZSkgeworICAgICAg
ICAgICAgICAgIHNjZW5lLm1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0
dXJlRGlydHlGbGFnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoq
CisgICAgICogR2V0IHRoZSBjdXJyZW50IGNsYXNzIG5hbWUgb2YgdGhlIHRleHR1cmUgdXNlZnVs
IGZvciBzZXJpYWxpemF0aW9uIG9yIGR5bmFtaWMgY29kaW5nLgorICAgICAqIEByZXR1cm5zICJI
RFJDdWJlVGV4dHVyZSIKKyAgICAgKi8KKyAgICBIRFJDdWJlVGV4dHVyZS5wcm90b3R5cGUuZ2V0
Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkhEUkN1YmVUZXh0dXJl
IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIE9jY3VycyB3aGVuIHRoZSBmaWxlIGlzIHJhdyAu
aGRyIGZpbGUuCisgICAgICovCisgICAgSERSQ3ViZVRleHR1cmUucHJvdG90eXBlLmxvYWRUZXh0
dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2
YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiAoYnVmZmVyKSB7CisgICAgICAgICAgICBfdGhpcy5sb2RH
ZW5lcmF0aW9uT2Zmc2V0ID0gMC4wOworICAgICAgICAgICAgX3RoaXMubG9kR2VuZXJhdGlvblNj
YWxlID0gMC44OworICAgICAgICAgICAgdmFyIHNjZW5lID0gX3RoaXMuZ2V0U2NlbmUoKTsKKyAg
ICAgICAgICAgIGlmICghc2NlbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJhdyBsaW5lYXIgZGF0YS4K
KyAgICAgICAgICAgIHZhciBkYXRhID0gX01pc2NfSGlnaER5bmFtaWNSYW5nZV9oZHJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siSERSVG9vbHMiXS5HZXRDdWJlTWFwVGV4dHVyZURhdGEo
YnVmZmVyLCBfdGhpcy5fc2l6ZSk7CisgICAgICAgICAgICAvLyBHZW5lcmF0ZSBoYXJtb25pY3Mg
aWYgbmVlZGVkLgorICAgICAgICAgICAgaWYgKF90aGlzLl9nZW5lcmF0ZUhhcm1vbmljcykgewor
ICAgICAgICAgICAgICAgIHZhciBzcGhlcmljYWxQb2x5bm9taWFsID0gX01pc2NfSGlnaER5bmFt
aWNSYW5nZV9jdWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29scyJdLkNvbnZlcnRDdWJl
TWFwVG9TcGhlcmljYWxQb2x5bm9taWFsKGRhdGEpOworICAgICAgICAgICAgICAgIF90aGlzLnNw
aGVyaWNhbFBvbHlub21pYWwgPSBzcGhlcmljYWxQb2x5bm9taWFsOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTsKKyAgICAgICAgICAgIHZhciBieXRlQXJyYXkg
PSBudWxsOworICAgICAgICAgICAgLy8gUHVzaCBlYWNoIGZhY2VzLgorICAgICAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCA2OyBqKyspIHsKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdWlu
dGFycmF5IGZhbGxiYWNrLgorICAgICAgICAgICAgICAgIGlmICghc2NlbmUuZ2V0RW5naW5lKCku
Z2V0Q2FwcygpLnRleHR1cmVGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICAvLyAzIGNoYW5u
ZWxzIG9mIDEgYnl0ZXMgcGVyIHBpeGVsIGluIGJ5dGVzLgorICAgICAgICAgICAgICAgICAgICB2
YXIgYnl0ZUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihfdGhpcy5fc2l6ZSAqIF90aGlzLl9zaXpl
ICogMyk7CisgICAgICAgICAgICAgICAgICAgIGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5
dGVCdWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgZGF0YUZh
Y2UgPSAoZGF0YVtIRFJDdWJlVGV4dHVyZS5fZmFjZXNNYXBwaW5nW2pdXSk7CisgICAgICAgICAg
ICAgICAgLy8gSWYgc3BlY2lhbCBjYXNlcy4KKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuZ2Ft
bWFTcGFjZSB8fCBieXRlQXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBfdGhpcy5fc2l6ZSAqIF90aGlzLl9zaXplOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFB1dCBpbiBnYW1tYSBzcGFjZSBpZiByZXF1ZXN0ZWQuCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoX3RoaXMuZ2FtbWFTcGFjZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFGYWNlWyhpICogMykgKyAwXSA9IE1hdGgucG93KGRhdGFGYWNlWyhpICog
MykgKyAwXSwgX01hdGhzX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MV9fWyJUb0dhbW1hU3BhY2UiXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUZh
Y2VbKGkgKiAzKSArIDFdID0gTWF0aC5wb3coZGF0YUZhY2VbKGkgKiAzKSArIDFdLCBfTWF0aHNf
bWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIlRvR2FtbWFTcGFj
ZSJdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhRmFjZVsoaSAqIDMpICsgMl0g
PSBNYXRoLnBvdyhkYXRhRmFjZVsoaSAqIDMpICsgMl0sIF9NYXRoc19tYXRoX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siVG9HYW1tYVNwYWNlIl0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0byBp
bnQgdGV4dHVyZSBmb3IgZmFsbGJhY2suCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0
ZUFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBNYXRoLm1heChk
YXRhRmFjZVsoaSAqIDMpICsgMF0gKiAyNTUsIDApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBnID0gTWF0aC5tYXgoZGF0YUZhY2VbKGkgKiAzKSArIDFdICogMjU1LCAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IE1hdGgubWF4KGRhdGFGYWNlWyhpICog
MykgKyAyXSAqIDI1NSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWF5IHVz
ZSBsdW1pbmFuY2UgaW5zdGVhZCBpZiB0aGUgcmVzdWx0IGlzIG5vdCBhY2N1cmF0ZS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gTWF0aC5tYXgoTWF0aC5tYXgociwgZyks
IGIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXggPiAyNTUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gMjU1IC8gbWF4OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByICo9IHNjYWxlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnICo9IHNjYWxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiICo9IHNjYWxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBieXRlQXJyYXlbKGkgKiAzKSArIDBdID0gcjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBieXRlQXJyYXlbKGkgKiAzKSArIDFdID0gZzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBieXRlQXJyYXlbKGkgKiAzKSArIDJdID0gYjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoYnl0ZUFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdHMucHVzaChieXRlQXJyYXkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGRhdGFGYWNlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
czsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAg
ICAgICBpZiAoc2NlbmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSBzY2VuZS5nZXRF
bmdpbmUoKS5jcmVhdGVSYXdDdWJlVGV4dHVyZUZyb21VcmwodGhpcy51cmwsIHNjZW5lLCB0aGlz
Ll9zaXplLCBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5n
aW5lIl0uVEVYVFVSRUZPUk1BVF9SR0IsIHNjZW5lLmdldEVuZ2luZSgpLmdldENhcHMoKS50ZXh0
dXJlRmxvYXQgPyBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
RW5naW5lIl0uVEVYVFVSRVRZUEVfRkxPQVQgOiBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siRW5naW5lIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5ULCB0aGlz
Ll9ub01pcG1hcCwgY2FsbGJhY2ssIG51bGwsIHRoaXMuX29uTG9hZCwgdGhpcy5fb25FcnJvcik7
CisgICAgICAgIH0KKyAgICB9OworICAgIEhEUkN1YmVUZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAg
ICAgICBpZiAoIXNjZW5lKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgbmV3VGV4dHVyZSA9IG5ldyBIRFJDdWJlVGV4dHVyZSh0aGlzLnVybCwgc2Nl
bmUsIHRoaXMuX3NpemUsIHRoaXMuX25vTWlwbWFwLCB0aGlzLl9nZW5lcmF0ZUhhcm1vbmljcywg
dGhpcy5nYW1tYVNwYWNlKTsKKyAgICAgICAgLy8gQmFzZSB0ZXh0dXJlCisgICAgICAgIG5ld1Rl
eHR1cmUubGV2ZWwgPSB0aGlzLmxldmVsOworICAgICAgICBuZXdUZXh0dXJlLndyYXBVID0gdGhp
cy53cmFwVTsKKyAgICAgICAgbmV3VGV4dHVyZS53cmFwViA9IHRoaXMud3JhcFY7CisgICAgICAg
IG5ld1RleHR1cmUuY29vcmRpbmF0ZXNJbmRleCA9IHRoaXMuY29vcmRpbmF0ZXNJbmRleDsKKyAg
ICAgICAgbmV3VGV4dHVyZS5jb29yZGluYXRlc01vZGUgPSB0aGlzLmNvb3JkaW5hdGVzTW9kZTsK
KyAgICAgICAgcmV0dXJuIG5ld1RleHR1cmU7CisgICAgfTsKKyAgICAvLyBNZXRob2RzCisgICAg
SERSQ3ViZVRleHR1cmUucHJvdG90eXBlLmRlbGF5TG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgaWYgKHRoaXMuZGVsYXlMb2FkU3RhdGUgIT09IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmUiXS5ERUxBWUxPQURTVEFURV9OT1RMT0FERUQpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmRlbGF5TG9hZFN0
YXRlID0gX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkVuZ2lu
ZSJdLkRFTEFZTE9BRFNUQVRFX0xPQURFRDsKKyAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMu
X2dldEZyb21DYWNoZSh0aGlzLnVybCwgdGhpcy5fbm9NaXBtYXApOworICAgICAgICBpZiAoIXRo
aXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMubG9hZFRleHR1cmUoKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSB0ZXh0dXJlIHJlZmxlY3Rpb24gbWF0
cml4IHVzZWQgdG8gcm90YXRlL3RyYW5zZm9ybSB0aGUgcmVmbGVjdGlvbi4KKyAgICAgKiBAcmV0
dXJucyB0aGUgcmVmbGVjdGlvbiBtYXRyaXgKKyAgICAgKi8KKyAgICBIRFJDdWJlVGV4dHVyZS5w
cm90b3R5cGUuZ2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXggPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLl90ZXh0dXJlTWF0cml4OworICAgIH07CisgICAgLyoqCisgICAgICog
U2V0IHRoZSB0ZXh0dXJlIHJlZmxlY3Rpb24gbWF0cml4IHVzZWQgdG8gcm90YXRlL3RyYW5zZm9y
bSB0aGUgcmVmbGVjdGlvbi4KKyAgICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSByZWZsZWN0
aW9uIG1hdHJpeCB0byBzZXQKKyAgICAgKi8KKyAgICBIRFJDdWJlVGV4dHVyZS5wcm90b3R5cGUu
c2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXggPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
dmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5fdGV4dHVyZU1hdHJpeCA9IHZhbHVlOwor
ICAgICAgICBpZiAodmFsdWUudXBkYXRlRmxhZyA9PT0gdGhpcy5fdGV4dHVyZU1hdHJpeC51cGRh
dGVGbGFnKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZh
bHVlLmlzSWRlbnRpdHkoKSAhPT0gdGhpcy5fdGV4dHVyZU1hdHJpeC5pc0lkZW50aXR5KCkpIHsK
KyAgICAgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5tYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0u
TUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZywgZnVuY3Rpb24gKG1hdCkgeyByZXR1cm4gbWF0Lmdl
dEFjdGl2ZVRleHR1cmVzKCkuaW5kZXhPZihfdGhpcykgIT09IC0xOyB9KTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2VzIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBh
biBIRFIgVGV4dHVyZSBpbiBvcmRlciB0byBjcmVhdGUgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFy
YW0gcGFyc2VkVGV4dHVyZSBEZWZpbmUgdGhlIEpTT04gcmVwcmVzZW50YXRpb24KKyAgICAgKiBA
cGFyYW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBzaG91bGQgYmUgY3JlYXRl
ZCBpbgorICAgICAqIEBwYXJhbSByb290VXJsIERlZmluZSB0aGUgcm9vdCB1cmwgaW4gY2FzZSB3
ZSBuZWVkIHRvIGxvYWQgcmVsYXRpdmUgZGVwZW5kZW5jaWVzCisgICAgICogQHJldHVybnMgdGhl
IG5ld2x5IGNyZWF0ZWQgdGV4dHVyZSBhZnRlciBwYXJzaW5nCisgICAgICovCisgICAgSERSQ3Vi
ZVRleHR1cmUuUGFyc2UgPSBmdW5jdGlvbiAocGFyc2VkVGV4dHVyZSwgc2NlbmUsIHJvb3RVcmwp
IHsKKyAgICAgICAgdmFyIHRleHR1cmUgPSBudWxsOworICAgICAgICBpZiAocGFyc2VkVGV4dHVy
ZS5uYW1lICYmICFwYXJzZWRUZXh0dXJlLmlzUmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICB0
ZXh0dXJlID0gbmV3IEhEUkN1YmVUZXh0dXJlKHJvb3RVcmwgKyBwYXJzZWRUZXh0dXJlLm5hbWUs
IHNjZW5lLCBwYXJzZWRUZXh0dXJlLnNpemUsIHBhcnNlZFRleHR1cmUubm9NaXBtYXAsIHBhcnNl
ZFRleHR1cmUuZ2VuZXJhdGVIYXJtb25pY3MsIHBhcnNlZFRleHR1cmUudXNlSW5HYW1tYVNwYWNl
KTsKKyAgICAgICAgICAgIHRleHR1cmUubmFtZSA9IHBhcnNlZFRleHR1cmUubmFtZTsKKyAgICAg
ICAgICAgIHRleHR1cmUuaGFzQWxwaGEgPSBwYXJzZWRUZXh0dXJlLmhhc0FscGhhOworICAgICAg
ICAgICAgdGV4dHVyZS5sZXZlbCA9IHBhcnNlZFRleHR1cmUubGV2ZWw7CisgICAgICAgICAgICB0
ZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSA9IHBhcnNlZFRleHR1cmUuY29vcmRpbmF0ZXNNb2RlOwor
ICAgICAgICAgICAgdGV4dHVyZS5pc0Jsb2NraW5nID0gcGFyc2VkVGV4dHVyZS5pc0Jsb2NraW5n
OworICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJlKSB7CisgICAgICAgICAgICBpZiAocGFy
c2VkVGV4dHVyZS5ib3VuZGluZ0JveFBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgdGV4dHVy
ZS5ib3VuZGluZ0JveFBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocGFyc2VkVGV4dHVyZS5ib3VuZGlu
Z0JveFBvc2l0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRUZXh0
dXJlLmJvdW5kaW5nQm94U2l6ZSkgeworICAgICAgICAgICAgICAgIHRleHR1cmUuYm91bmRpbmdC
b3hTaXplID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlY3RvcjMiXS5Gcm9tQXJyYXkocGFyc2VkVGV4dHVyZS5ib3VuZGluZ0JveFNpemUpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZFRleHR1cmUucm90YXRpb25ZKSB7Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZS5yb3RhdGlvblkgPSBwYXJzZWRUZXh0dXJlLnJvdGF0aW9u
WTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAg
ICB9OworICAgIEhEUkN1YmVUZXh0dXJlLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICghdGhpcy5uYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IHt9OworICAgICAg
ICBzZXJpYWxpemF0aW9uT2JqZWN0Lm5hbWUgPSB0aGlzLm5hbWU7CisgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QuaGFzQWxwaGEgPSB0aGlzLmhhc0FscGhhOworICAgICAgICBzZXJpYWxpemF0
aW9uT2JqZWN0LmlzQ3ViZSA9IHRydWU7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubGV2
ZWwgPSB0aGlzLmxldmVsOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNpemUgPSB0aGlz
Ll9zaXplOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvb3JkaW5hdGVzTW9kZSA9IHRo
aXMuY29vcmRpbmF0ZXNNb2RlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnVzZUluR2Ft
bWFTcGFjZSA9IHRoaXMuZ2FtbWFTcGFjZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5n
ZW5lcmF0ZUhhcm1vbmljcyA9IHRoaXMuX2dlbmVyYXRlSGFybW9uaWNzOworICAgICAgICBzZXJp
YWxpemF0aW9uT2JqZWN0LmN1c3RvbVR5cGUgPSAiQkFCWUxPTi5IRFJDdWJlVGV4dHVyZSI7Cisg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qubm9NaXBtYXAgPSB0aGlzLl9ub01pcG1hcDsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5pc0Jsb2NraW5nID0gdGhpcy5faXNCbG9ja2luZzsK
KyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5yb3RhdGlvblkgPSB0aGlzLl9yb3RhdGlvblk7
CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgSERSQ3Vi
ZVRleHR1cmUuX2ZhY2VzTWFwcGluZyA9IFsKKyAgICAgICAgInJpZ2h0IiwKKyAgICAgICAgImxl
ZnQiLAorICAgICAgICAidXAiLAorICAgICAgICAiZG93biIsCisgICAgICAgICJmcm9udCIsCisg
ICAgICAgICJiYWNrIgorICAgIF07CisgICAgcmV0dXJuIEhEUkN1YmVUZXh0dXJlOworfShfTWF0
ZXJpYWxzX1RleHR1cmVzX2Jhc2VUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkJhc2VUZXh0dXJlIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uSERSQ3ViZVRl
eHR1cmUiXSA9IEhEUkN1YmVUZXh0dXJlOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRl
cmlhbHMvVGV4dHVyZXMvaHRtbEVsZW1lbnRUZXh0dXJlLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlh
bHMvVGV4dHVyZXMvaHRtbEVsZW1lbnRUZXh0dXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IEh0bWxFbGVtZW50VGV4dHVyZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJIdG1sRWxlbWVudFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEh0bWxFbGVtZW50
VGV4dHVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9u
b2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19UZXh0dXJlc19iYXNlVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVz
L2Jhc2VUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9iYXNlVGV4dHVyZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01h
dGhzL21hdGgudmVjdG9yLnRzIik7CisKKworCisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIHRo
ZSBzbWFsbGVzdCB3b3JrbG9hZCB0byB1c2UgYW4gYWxyZWFkeSBleGlzdGluZyBlbGVtZW50IChD
YW52YXMgb3IgVmlkZW8pIGFzIGEgdGV4dHVyZS4KKyAqIFRvIGJlIGFzIGVmZmljaWVudCBhcyBw
b3NzaWJsZSBkZXBlbmRpbmcgb24geW91ciBjb25zdHJhaW50cyBub3RoaW5nIGFzaWRlIHRoZSBm
aXJzdCB1cGxvYWQKKyAqIGlzIGF1dG9tYXRpY2FsbHkgbWFuYWdlZC4KKyAqIEl0IGlzIGEgY2hl
YXAgVmlkZW9UZXh0dXJlIG9yIER5bmFtaWNUZXh0dXJlIGlmIHlvdSBwcmVmZXIgdG8ga2VlcCBm
dWxsIGNvbnRyb2wgb2YgdGhlIGVsZW1lbnRzCisgKiBpbiB5b3VyIGFwcGxpY2F0aW9uLgorICoK
KyAqIEFzIHRoZSB1cGRhdGUgaXMgbm90IGF1dG9tYXRpYywgeW91IG5lZWQgdG8gY2FsbCB0aGVt
IG1hbnVhbGx5LgorICovCit2YXIgSHRtbEVsZW1lbnRUZXh0dXJlID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZXh0ZW5kcyJdKEh0bWxFbGVtZW50VGV4dHVyZSwgX3N1cGVyKTsKKyAgICAvKioKKyAg
ICAgKiBJbnN0YW50aWF0ZXMgYSBIdG1sRWxlbWVudFRleHR1cmUgZnJvbSB0aGUgZm9sbG93aW5n
IHBhcmFtZXRlcnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmVzIHRoZSBuYW1l
IG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGVsZW1lbnQgRGVmaW5lcyB0aGUgdmlkZW8g
b3IgY2FudmFzIHRoZSB0ZXh0dXJlIGlzIGZpbGxlZCB3aXRoCisgICAgICogQHBhcmFtIG9wdGlv
bnMgRGVmaW5lcyB0aGUgb3RoZXIgbm9uZSBtYW5kYXRvcnkgdGV4dHVyZSBjcmVhdGlvbiBvcHRp
b25zCisgICAgICovCisgICAgZnVuY3Rpb24gSHRtbEVsZW1lbnRUZXh0dXJlKG5hbWUsIGVsZW1l
bnQsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgb3B0
aW9ucy5zY2VuZSkgfHwgdGhpczsKKyAgICAgICAgaWYgKCFlbGVtZW50IHx8ICghb3B0aW9ucy5l
bmdpbmUgJiYgIW9wdGlvbnMuc2NlbmUpKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXM7Cisg
ICAgICAgIH0KKyAgICAgICAgb3B0aW9ucyA9IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fYXNzaWduIl0oe30sIEh0bWxFbGVtZW50VGV4dHVyZS5EZWZhdWx0T3B0aW9ucywg
b3B0aW9ucyk7CisgICAgICAgIF90aGlzLl9lbmdpbmUgPSBvcHRpb25zLmVuZ2luZSB8fCBvcHRp
b25zLnNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBfdGhpcy5fZ2VuZXJhdGVNaXBNYXBzID0g
b3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHM7CisgICAgICAgIF90aGlzLl9zYW1wbGluZ01vZGUgPSBv
cHRpb25zLnNhbXBsaW5nTW9kZTsKKyAgICAgICAgX3RoaXMuX3RleHR1cmVNYXRyaXggPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uSWRl
bnRpdHkoKTsKKyAgICAgICAgX3RoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIF90aGlzLmVsZW1l
bnQgPSBlbGVtZW50OworICAgICAgICBfdGhpcy5faXNWaWRlbyA9IChlbGVtZW50IGluc3RhbmNl
b2YgSFRNTFZpZGVvRWxlbWVudCk7CisgICAgICAgIF90aGlzLmFuaXNvdHJvcGljRmlsdGVyaW5n
TGV2ZWwgPSAxOworICAgICAgICBfdGhpcy5fY3JlYXRlSW50ZXJuYWxUZXh0dXJlKCk7CisgICAg
ICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgSHRtbEVsZW1lbnRUZXh0dXJlLnByb3RvdHlw
ZS5fY3JlYXRlSW50ZXJuYWxUZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgd2lk
dGggPSAwOworICAgICAgICB2YXIgaGVpZ2h0ID0gMDsKKyAgICAgICAgaWYgKHRoaXMuX2lzVmlk
ZW8pIHsKKyAgICAgICAgICAgIHdpZHRoID0gdGhpcy5lbGVtZW50LnZpZGVvV2lkdGg7CisgICAg
ICAgICAgICBoZWlnaHQgPSB0aGlzLmVsZW1lbnQudmlkZW9IZWlnaHQ7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB3aWR0aCA9IHRoaXMuZWxlbWVudC53aWR0aDsKKyAg
ICAgICAgICAgIGhlaWdodCA9IHRoaXMuZWxlbWVudC5oZWlnaHQ7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX2VuZ2luZS5jcmVhdGVEeW5hbWljVGV4dHVyZSh3aWR0
aCwgaGVpZ2h0LCB0aGlzLl9nZW5lcmF0ZU1pcE1hcHMsIHRoaXMuX3NhbXBsaW5nTW9kZSk7Cisg
ICAgICAgIHRoaXMudXBkYXRlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSB0ZXh0dXJlIG1hdHJpeCB1c2VkIGluIG1vc3Qgb2YgdGhlIG1hdGVyaWFsLgorICAgICAqLwor
ICAgIEh0bWxFbGVtZW50VGV4dHVyZS5wcm90b3R5cGUuZ2V0VGV4dHVyZU1hdHJpeCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVNYXRyaXg7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBjb250ZW50IG9mIHRoZSB0ZXh0dXJlLgorICAgICAq
IEBwYXJhbSBpbnZlcnRZIERlZmluZXMgd2V0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSBpbnZl
cnRlZCBvbiBZIChmYWxzZSBieSBkZWZhdWx0IG9uIHZpZGVvIGFuZCB0cnVlIG9uIGNhbnZhcykK
KyAgICAgKi8KKyAgICBIdG1sRWxlbWVudFRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0
aW9uIChpbnZlcnRZKSB7CisgICAgICAgIGlmIChpbnZlcnRZID09PSB2b2lkIDApIHsgaW52ZXJ0
WSA9IG51bGw7IH0KKyAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUgPT0gbnVsbCkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pc1ZpZGVvKSB7Cisg
ICAgICAgICAgICB2YXIgdmlkZW9FbGVtZW50ID0gdGhpcy5lbGVtZW50OworICAgICAgICAgICAg
aWYgKHZpZGVvRWxlbWVudC5yZWFkeVN0YXRlIDwgdmlkZW9FbGVtZW50LkhBVkVfQ1VSUkVOVF9E
QVRBKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fZW5naW5lLnVwZGF0ZVZpZGVvVGV4dHVyZSh0aGlzLl90ZXh0dXJlLCB2aWRlb0Vs
ZW1lbnQsIGludmVydFkgPT09IG51bGwgPyB0cnVlIDogaW52ZXJ0WSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgY2FudmFzRWxlbWVudCA9IHRoaXMuZWxlbWVu
dDsKKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS51cGRhdGVEeW5hbWljVGV4dHVyZSh0aGlzLl90
ZXh0dXJlLCBjYW52YXNFbGVtZW50LCBpbnZlcnRZID09PSBudWxsID8gdHJ1ZSA6IGludmVydFks
IGZhbHNlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgSHRtbEVsZW1lbnRUZXh0dXJlLkRlZmF1
bHRPcHRpb25zID0geworICAgICAgICBnZW5lcmF0ZU1pcE1hcHM6IGZhbHNlLAorICAgICAgICBz
YW1wbGluZ01vZGU6IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJDb25zdGFudHMiXS5URVhUVVJFX0JJTElORUFSX1NBTVBMSU5HTU9ERSwKKyAgICAgICAg
ZW5naW5lOiBudWxsLAorICAgICAgICBzY2VuZTogbnVsbAorICAgIH07CisgICAgcmV0dXJuIEh0
bWxFbGVtZW50VGV4dHVyZTsKK30oX01hdGVyaWFsc19UZXh0dXJlc19iYXNlVGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJCYXNlVGV4dHVyZSJdKSk7CisKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2luZGV4LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0
dXJlcy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJhc2VUZXh0dXJlLCBDdWJlVGV4dHVyZSwgRHlu
YW1pY1RleHR1cmUsIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlLCBIRFJDdWJlVGV4dHVyZSwg
SW50ZXJuYWxUZXh0dXJlLCBNaXJyb3JUZXh0dXJlLCBNdWx0aVJlbmRlclRhcmdldCwgUmF3VGV4
dHVyZSwgUmVuZGVyVGFyZ2V0VGV4dHVyZSwgVGV4dHVyZSwgQ29sb3JHcmFkaW5nVGV4dHVyZSwg
UmF3Q3ViZVRleHR1cmUsIFJhd1RleHR1cmUzRCwgUmVmcmFjdGlvblRleHR1cmUsIFZpZGVvVGV4
dHVyZSwgSHRtbEVsZW1lbnRUZXh0dXJlLCBfRERTVGV4dHVyZUxvYWRlciwgX0VOVlRleHR1cmVM
b2FkZXIsIF9LVFhUZXh0dXJlTG9hZGVyLCBfVEdBVGV4dHVyZUxvYWRlciwgX0Jhc2lzVGV4dHVy
ZUxvYWRlciwgQ3VzdG9tUHJvY2VkdXJhbFRleHR1cmUsIE5vaXNlUHJvY2VkdXJhbFRleHR1cmUs
IFByb2NlZHVyYWxUZXh0dXJlLCBQcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29tcG9uZW50ICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZVRleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFz
ZVRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2Jhc2VUZXh0dXJlLnRzIik7CisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkJhc2VUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYmFzZVRleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZVRleHR1cmUiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29sb3JHcmFkaW5nVGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb2xvckdyYWRpbmdU
ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9jb2xvckdyYWRpbmdUZXh0dXJlLnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yR3JhZGluZ1RleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9jb2xvckdyYWRpbmdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNv
bG9yR3JhZGluZ1RleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY3Vi
ZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vY3ViZVRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2N1YmVUZXh0dXJl
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN1YmVUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfY3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ3ViZVRleHR1cmUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZHluYW1pY1RleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZHluYW1p
Y1RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2R5bmFtaWNUZXh0dXJlLnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkR5bmFtaWNUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZHlu
YW1pY1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRHluYW1pY1RleHR1cmUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXF1aVJlY3Rhbmd1bGFyQ3ViZVRl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vZXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVz
L2VxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVxdWlS
ZWN0YW5ndWxhckN1YmVUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZXF1aVJlY3Rhbmd1
bGFyQ3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRXF1aVJlY3Rhbmd1
bGFyQ3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGRyQ3Vi
ZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vaGRyQ3ViZVRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2hkckN1YmVU
ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhEUkN1YmVUZXh0dXJlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfaGRyQ3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
SERSQ3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaW50ZXJu
YWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2ludGVybmFsVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJu
YWxUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkludGVybmFsVGV4dHVyZSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fWyJJbnRlcm5hbFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TG9hZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9Mb2FkZXJzL2luZGV4ICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9Mb2Fk
ZXJzL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9ERFNUZXh0dXJlTG9hZGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTG9hZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJfRERTVGV4dHVyZUxvYWRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfRU5WVGV4
dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0xvYWRlcnNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siX0VOVlRleHR1cmVMb2FkZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiX0tUWFRleHR1cmVMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Mb2FkZXJz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIl9LVFhUZXh0dXJlTG9hZGVyIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9UR0FUZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfTG9hZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJfVEdB
VGV4dHVyZUxvYWRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfQmFzaXNUZXh0dXJlTG9h
ZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTG9hZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJfQmFzaXNUZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX21pcnJvclRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWlycm9yVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMv
VGV4dHVyZXMvbWlycm9yVGV4dHVyZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNaXJyb3JUZXh0
dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWlycm9yVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fWyJNaXJyb3JUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX211bHRpUmVuZGVyVGFyZ2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL211bHRpUmVuZGVyVGFyZ2V0ICovICIuL01hdGVyaWFs
cy9UZXh0dXJlcy9tdWx0aVJlbmRlclRhcmdldC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNdWx0
aVJlbmRlclRhcmdldCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX211bHRpUmVuZGVyVGFyZ2V0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIk11bHRpUmVuZGVyVGFyZ2V0Il07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Byb2NlZHVyYWxzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9Qcm9jZWR1cmFscy9p
bmRleCAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvUHJvY2VkdXJhbHMvaW5kZXgudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ3VzdG9tUHJvY2VkdXJhbFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9Qcm9jZWR1cmFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQ3Vz
dG9tUHJvY2VkdXJhbFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9pc2VQcm9j
ZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Byb2NlZHVyYWxzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJOb2lzZVByb2NlZHVyYWxUZXh0dXJlIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlByb2NlZHVyYWxUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfUHJvY2VkdXJhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlBy
b2NlZHVyYWxUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlByb2NlZHVyYWxUZXh0
dXJlU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qcm9jZWR1cmFsc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siUHJvY2VkdXJhbFRleHR1cmVTY2VuZUNv
bXBvbmVudCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yYXdDdWJlVGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vcmF3Q3ViZVRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3Jhd0N1YmVUZXh0dXJl
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJhd0N1YmVUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfcmF3Q3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIlJhd0N1
YmVUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Jhd1RleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L3Jhd1RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3Jhd1RleHR1cmUudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiUmF3VGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Jhd1RleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlJhd1RleHR1cmUiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmF3VGV4dHVyZTNEX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yYXdUZXh0dXJlM0QgKi8gIi4v
TWF0ZXJpYWxzL1RleHR1cmVzL3Jhd1RleHR1cmUzRC50cyIpOworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJS
YXdUZXh0dXJlM0QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9yYXdUZXh0dXJlM0RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzEzX19bIlJhd1RleHR1cmUzRCJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9yZWZyYWN0aW9uVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmVmcmFjdGlvblRleHR1cmUgKi8gIi4v
TWF0ZXJpYWxzL1RleHR1cmVzL3JlZnJhY3Rpb25UZXh0dXJlLnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlJlZnJhY3Rpb25UZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcmVmcmFjdGlvblRl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlJlZnJhY3Rpb25UZXh0dXJlIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JlbmRlclRhcmdldFRleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Jl
bmRlclRhcmdldFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRlclRhcmdldFRl
eHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVuZGVyVGFyZ2V0VGV4dHVyZSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE1X19bIlJlbmRlclRhcmdldFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVy
ZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
dGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siVGV4dHVyZSJdOyB9KTsKKwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92aWRlb1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZpZGVvVGV4dHVyZSAqLyAi
Li9NYXRlcmlhbHMvVGV4dHVyZXMvdmlkZW9UZXh0dXJlLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlZpZGVvVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3ZpZGVvVGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTdfX1siVmlkZW9UZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2h0bWxFbGVtZW50VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMThfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaHRtbEVsZW1lbnRUZXh0dXJlICov
ICIuL01hdGVyaWFscy9UZXh0dXJlcy9odG1sRWxlbWVudFRleHR1cmUudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiSHRtbEVsZW1lbnRUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaHRtbEVs
ZW1lbnRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJIdG1sRWxlbWVudFRl
eHR1cmUiXTsgfSk7CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJuYWxUZXh0dXJl
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9NYXRlcmlhbHMvVGV4dHVyZXMvaW50ZXJuYWxUZXh0dXJlLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IEludGVybmFsVGV4dHVyZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJJbnRlcm5hbFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIElu
dGVybmFsVGV4dHVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0Q3Jl
YXRpb25PcHRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0Q3JlYXRpb25P
cHRpb25zICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRDcmVhdGlvbk9wdGlv
bnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGV2VG9vbHMgKi8gIi4v
TWlzYy9kZXZUb29scy50cyIpOworCisKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gc3RvcmUg
ZGF0YSBhc3NvY2lhdGVkIHdpdGggV2ViR0wgdGV4dHVyZSBkYXRhIGZvciB0aGUgZW5naW5lCisg
KiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseQorICovCit2YXIgSW50ZXJu
YWxUZXh0dXJlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgSW50ZXJuYWxUZXh0dXJlCisgICAgICogQHBhcmFtIGVuZ2luZSBkZWZp
bmVzIHRoZSBlbmdpbmUgdG8gdXNlCisgICAgICogQHBhcmFtIGRhdGFTb3VyY2UgZGVmaW5lcyB0
aGUgdHlwZSBvZiBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkCisgICAgICogQHBhcmFtIGRlbGF5QWxs
b2NhdGlvbiBpZiB0aGUgdGV4dHVyZSBhbGxvY2F0aW9uIHNob3VsZCBiZSBkZWxheWVkIChkZWZh
dWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBJbnRlcm5hbFRleHR1cmUoZW5naW5l
LCBkYXRhU291cmNlLCBkZWxheUFsbG9jYXRpb24pIHsKKyAgICAgICAgaWYgKGRlbGF5QWxsb2Nh
dGlvbiA9PT0gdm9pZCAwKSB7IGRlbGF5QWxsb2NhdGlvbiA9IGZhbHNlOyB9CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIGlmIHRoZSB0ZXh0dXJlIGlzIHJlYWR5CisgICAgICAgICAq
LworICAgICAgICB0aGlzLmlzUmVhZHkgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZXMgaWYgdGhlIHRleHR1cmUgaXMgYSBjdWJlIHRleHR1cmUKKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuaXNDdWJlID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZp
bmVzIGlmIHRoZSB0ZXh0dXJlIGNvbnRhaW5zIDNEIGRhdGEKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuaXMzRCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBpZiB0
aGUgdGV4dHVyZSBjb250YWlucyBtdWx0aXZpZXcgZGF0YQorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5pc011bHRpdmlldyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgVVJMIHVzZWQgdG8gbG9hZCB0aGlzIHRleHR1cmUKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMudXJsID0gIiI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBzYW1wbGluZyBt
b2RlIG9mIHRoZSB0ZXh0dXJlCisgICAgICAgICAqLworICAgICAgICB0aGlzLnNhbXBsaW5nTW9k
ZSA9IC0xOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGlu
ZyBpZiB0aGUgdGV4dHVyZSBuZWVkcyBtaXBtYXBzIGdlbmVyYXRpb24KKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuZ2VuZXJhdGVNaXBNYXBzID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB1c2VkIGJ5IHRoZSB0ZXh0dXJlIChXZWJH
TDIrIG9ubHkpCisgICAgICAgICAqLworICAgICAgICB0aGlzLnNhbXBsZXMgPSAwOworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdHlwZSBvZiB0aGUgdGV4dHVyZSAoaW50LCBmbG9h
dC4uLikKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudHlwZSA9IC0xOworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyB0aGUgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlIChSR0IsIFJHQkEuLi4p
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmZvcm1hdCA9IC0xOworICAgICAgICAvKioKKyAg
ICAgICAgICogT2JzZXJ2YWJsZSBjYWxsZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyBsb2FkZWQKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMub25Mb2FkZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29i
c2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZQorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy53aWR0aCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuaGVpZ2h0ID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGRlcHRoIG9m
IHRoZSB0ZXh0dXJlCisgICAgICAgICAqLworICAgICAgICB0aGlzLmRlcHRoID0gMDsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGluaXRpYWwgd2lkdGggb2YgdGhlIHRleHR1cmUg
KEl0IGNvdWxkIGJlIHJlc2NhbGVkIGlmIHRoZSBjdXJyZW50IHN5c3RlbSBkb2VzIG5vdCBzdXBw
b3J0IG5vbiBwb3dlciBvZiB0d28gdGV4dHVyZXMpCisgICAgICAgICAqLworICAgICAgICB0aGlz
LmJhc2VXaWR0aCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBpbml0aWFs
IGhlaWdodCBvZiB0aGUgdGV4dHVyZSAoSXQgY291bGQgYmUgcmVzY2FsZWQgaWYgdGhlIGN1cnJl
bnQgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgbm9uIHBvd2VyIG9mIHR3byB0ZXh0dXJlcykKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuYmFzZUhlaWdodCA9IDA7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSBpbml0aWFsIGRlcHRoIG9mIHRoZSB0ZXh0dXJlIChJdCBjb3VsZCBi
ZSByZXNjYWxlZCBpZiB0aGUgY3VycmVudCBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBub24gcG93
ZXIgb2YgdHdvIHRleHR1cmVzKQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5iYXNlRGVwdGgg
PSAwOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBp
ZiB0aGUgdGV4dHVyZSBpcyBpbnZlcnRlZCBvbiBZIGF4aXMKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuaW52ZXJ0WSA9IGZhbHNlOworICAgICAgICAvLyBQcml2YXRlCisgICAgICAgIC8qKiBA
aGlkZGVuICovCisgICAgICAgIHRoaXMuX2ludmVydFZTY2FsZSA9IGZhbHNlOworICAgICAgICAv
KiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9hc3NvY2lhdGVkQ2hhbm5lbCA9IC0xOworICAg
ICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gSW50ZXJuYWxU
ZXh0dXJlLkRBVEFTT1VSQ0VfVU5LTk9XTjsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAg
ICAgdGhpcy5fYnVmZmVyID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAg
dGhpcy5fYnVmZmVyVmlldyA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAg
IHRoaXMuX2J1ZmZlclZpZXdBcnJheSA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisg
ICAgICAgIHRoaXMuX2J1ZmZlclZpZXdBcnJheUFycmF5ID0gbnVsbDsKKyAgICAgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICAgICAgdGhpcy5fc2l6ZSA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIHRoaXMuX2V4dGVuc2lvbiA9ICIiOworICAgICAgICAvKiogQGhpZGRlbiAqLwor
ICAgICAgICB0aGlzLl9maWxlcyA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAg
ICAgIHRoaXMuX3dvcmtpbmdDYW52YXMgPSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLwor
ICAgICAgICB0aGlzLl93b3JraW5nQ29udGV4dCA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVu
ICovCisgICAgICAgIHRoaXMuX2ZyYW1lYnVmZmVyID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICAgICAgdGhpcy5fZGVwdGhTdGVuY2lsQnVmZmVyID0gbnVsbDsKKyAgICAgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fTVNBQUZyYW1lYnVmZmVyID0gbnVsbDsKKyAg
ICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fTVNBQVJlbmRlckJ1ZmZlciA9IG51
bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2F0dGFjaG1lbnRzID0g
bnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fY2FjaGVkQ29vcmRp
bmF0ZXNNb2RlID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5f
Y2FjaGVkV3JhcFUgPSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlz
Ll9jYWNoZWRXcmFwViA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRo
aXMuX2NhY2hlZFdyYXBSID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAg
dGhpcy5fY2FjaGVkQW5pc290cm9waWNGaWx0ZXJpbmdMZXZlbCA9IG51bGw7CisgICAgICAgIC8q
KiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2lzRGlzYWJsZWQgPSBmYWxzZTsKKyAgICAgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fY29tcHJlc3Npb24gPSBudWxsOworICAgICAg
ICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9nZW5lcmF0ZVN0ZW5jaWxCdWZmZXIgPSBm
YWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fZ2VuZXJhdGVEZXB0
aEJ1ZmZlciA9IGZhbHNlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9j
b21wYXJpc29uRnVuY3Rpb24gPSAwOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0
aGlzLl9zcGhlcmljYWxQb2x5bm9taWFsID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICAgICAgdGhpcy5fbG9kR2VuZXJhdGlvblNjYWxlID0gMDsKKyAgICAgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICAgICAgdGhpcy5fbG9kR2VuZXJhdGlvbk9mZnNldCA9IDA7CisgICAgICAgIC8v
IE11bHRpdmlldworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jb2xvclRl
eHR1cmVBcnJheSA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMu
X2RlcHRoU3RlbmNpbFRleHR1cmVBcnJheSA9IG51bGw7CisgICAgICAgIC8vIFRoZSBmb2xsb3dp
bmcgdGhyZWUgZmllbGRzIGhlbHBzIHNoYXJpbmcgZ2VuZXJhdGVkIGZpeGVkIExPRHMgZm9yIHRl
eHR1cmUgZmlsdGVyaW5nCisgICAgICAgIC8vIEluIGVudmlyb25tZW50IG5vdCBzdXBwb3J0aW5n
IHRoZSB0ZXh0dXJlTE9EIGV4dGVuc2lvbiBsaWtlIEVER0UuIFRoZXkgYXJlIGZvciBpbnRlcm5h
bCB1c2Ugb25seS4KKyAgICAgICAgLy8gVGhleSBhcmUgYXQgdGhlIGxldmVsIG9mIHRoZSBnbCB0
ZXh0dXJlIHRvIGJlbmVmaXQgZnJvbSB0aGUgY2FjaGUuCisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIHRoaXMuX2xvZFRleHR1cmVIaWdoID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICAgICAgdGhpcy5fbG9kVGV4dHVyZU1pZCA9IG51bGw7CisgICAgICAgIC8qKiBA
aGlkZGVuICovCisgICAgICAgIHRoaXMuX2xvZFRleHR1cmVMb3cgPSBudWxsOworICAgICAgICAv
KiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9pc1JHQkQgPSBmYWxzZTsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fbGluZWFyU3BlY3VsYXJMT0QgPSBmYWxzZTsKKyAg
ICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5faXJyYWRpYW5jZVRleHR1cmUgPSBu
dWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl93ZWJHTFRleHR1cmUg
PSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl93ZWJHUFVUZXh0
dXJlID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fd2ViR1BV
U2FtcGxlciA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX3dl
YkdQVVRleHR1cmVWaWV3ID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAg
dGhpcy5fcmVmZXJlbmNlcyA9IDE7CisgICAgICAgIHRoaXMuX2VuZ2luZSA9IGVuZ2luZTsKKyAg
ICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7CisgICAgICAgIGlmICghZGVsYXlB
bGxvY2F0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl93ZWJHTFRleHR1cmUgPSBlbmdpbmUuX2Ny
ZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRo
ZSBFbmdpbmUgdGhlIHRleHR1cmUgYmVsb25ncyB0by4KKyAgICAgKiBAcmV0dXJucyBUaGUgYmFi
eWxvbiBlbmdpbmUKKyAgICAgKi8KKyAgICBJbnRlcm5hbFRleHR1cmUucHJvdG90eXBlLmdldEVu
Z2luZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuZ2luZTsKKyAgICB9
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFRleHR1cmUucHJvdG90eXBlLCAi
ZGF0YVNvdXJjZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGRhdGEgc291
cmNlIHR5cGUgb2YgdGhlIHRleHR1cmUgKGNhbiBiZSBvbmUgb2YgdGhlIEludGVybmFsVGV4dHVy
ZS5EQVRBU09VUkNFX1hYWFgpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICAvKioKKyAgICAgKiBJbmNyZW1lbnRzIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyAo
aWUuIHRoZSBudW1iZXIgb2YgVGV4dHVyZSB0aGF0IHBvaW50IHRvIGl0KQorICAgICAqLworICAg
IEludGVybmFsVGV4dHVyZS5wcm90b3R5cGUuaW5jcmVtZW50UmVmZXJlbmNlcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5fcmVmZXJlbmNlcysrOworICAgIH07CisgICAgLyoqCisgICAg
ICogQ2hhbmdlIHRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlIChub3QgdGhlIHNpemUgb2YgdGhlIGNv
bnRlbnQpCisgICAgICogQHBhcmFtIHdpZHRoIGRlZmluZXMgdGhlIG5ldyB3aWR0aAorICAgICAq
IEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgbmV3IGhlaWdodAorICAgICAqIEBwYXJhbSBkZXB0
aCBkZWZpbmVzIHRoZSBuZXcgZGVwdGggKDEgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBJbnRl
cm5hbFRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdo
dCwgZGVwdGgpIHsKKyAgICAgICAgaWYgKGRlcHRoID09PSB2b2lkIDApIHsgZGVwdGggPSAxOyB9
CisgICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKKyAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWln
aHQ7CisgICAgICAgIHRoaXMuZGVwdGggPSBkZXB0aDsKKyAgICAgICAgdGhpcy5iYXNlV2lkdGgg
PSB3aWR0aDsKKyAgICAgICAgdGhpcy5iYXNlSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICB0aGlz
LmJhc2VEZXB0aCA9IGRlcHRoOworICAgICAgICB0aGlzLl9zaXplID0gd2lkdGggKiBoZWlnaHQg
KiBkZXB0aDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgSW50ZXJuYWxUZXh0dXJl
LnByb3RvdHlwZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgdmFyIHByb3h5OworICAgICAgICB0aGlzLmlzUmVhZHkgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fY2FjaGVkQ29vcmRpbmF0ZXNNb2RlID0gbnVsbDsKKyAgICAgICAgdGhp
cy5fY2FjaGVkV3JhcFUgPSBudWxsOworICAgICAgICB0aGlzLl9jYWNoZWRXcmFwViA9IG51bGw7
CisgICAgICAgIHRoaXMuX2NhY2hlZEFuaXNvdHJvcGljRmlsdGVyaW5nTGV2ZWwgPSBudWxsOwor
ICAgICAgICBzd2l0Y2ggKHRoaXMuX2RhdGFTb3VyY2UpIHsKKyAgICAgICAgICAgIGNhc2UgSW50
ZXJuYWxUZXh0dXJlLkRBVEFTT1VSQ0VfVEVNUDoKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBjYXNlIEludGVybmFsVGV4dHVyZS5EQVRBU09VUkNFX1VSTDoKKyAgICAgICAg
ICAgICAgICBwcm94eSA9IHRoaXMuX2VuZ2luZS5jcmVhdGVUZXh0dXJlKHRoaXMudXJsLCAhdGhp
cy5nZW5lcmF0ZU1pcE1hcHMsIHRoaXMuaW52ZXJ0WSwgbnVsbCwgdGhpcy5zYW1wbGluZ01vZGUs
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJveHkuX3N3YXBBbmREaWUoX3Ro
aXMpOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9LCBudWxsLCB0aGlzLl9idWZmZXIsIHVuZGVmaW5lZCwgdGhpcy5mb3JtYXQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgSW50ZXJuYWxUZXh0dXJl
LkRBVEFTT1VSQ0VfUkFXOgorICAgICAgICAgICAgICAgIHByb3h5ID0gdGhpcy5fZW5naW5lLmNy
ZWF0ZVJhd1RleHR1cmUodGhpcy5fYnVmZmVyVmlldywgdGhpcy5iYXNlV2lkdGgsIHRoaXMuYmFz
ZUhlaWdodCwgdGhpcy5mb3JtYXQsIHRoaXMuZ2VuZXJhdGVNaXBNYXBzLCB0aGlzLmludmVydFks
IHRoaXMuc2FtcGxpbmdNb2RlLCB0aGlzLl9jb21wcmVzc2lvbik7CisgICAgICAgICAgICAgICAg
cHJveHkuX3N3YXBBbmREaWUodGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5pc1JlYWR5ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjYXNlIEludGVybmFs
VGV4dHVyZS5EQVRBU09VUkNFX1JBVzNEOgorICAgICAgICAgICAgICAgIHByb3h5ID0gdGhpcy5f
ZW5naW5lLmNyZWF0ZVJhd1RleHR1cmUzRCh0aGlzLl9idWZmZXJWaWV3LCB0aGlzLmJhc2VXaWR0
aCwgdGhpcy5iYXNlSGVpZ2h0LCB0aGlzLmJhc2VEZXB0aCwgdGhpcy5mb3JtYXQsIHRoaXMuZ2Vu
ZXJhdGVNaXBNYXBzLCB0aGlzLmludmVydFksIHRoaXMuc2FtcGxpbmdNb2RlLCB0aGlzLl9jb21w
cmVzc2lvbik7CisgICAgICAgICAgICAgICAgcHJveHkuX3N3YXBBbmREaWUodGhpcyk7CisgICAg
ICAgICAgICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBjYXNlIEludGVybmFsVGV4dHVyZS5EQVRBU09VUkNFX0RZTkFNSUM6Cisg
ICAgICAgICAgICAgICAgcHJveHkgPSB0aGlzLl9lbmdpbmUuY3JlYXRlRHluYW1pY1RleHR1cmUo
dGhpcy5iYXNlV2lkdGgsIHRoaXMuYmFzZUhlaWdodCwgdGhpcy5nZW5lcmF0ZU1pcE1hcHMsIHRo
aXMuc2FtcGxpbmdNb2RlKTsKKyAgICAgICAgICAgICAgICBwcm94eS5fc3dhcEFuZERpZSh0aGlz
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUudXBkYXRlRHluYW1pY1RleHR1cmUodGhp
cywgdGhpcy5fZW5naW5lLmdldFJlbmRlcmluZ0NhbnZhcygpLCB0aGlzLmludmVydFksIHVuZGVm
aW5lZCwgdW5kZWZpbmVkLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAvLyBUaGUgZW5naW5lIHdp
bGwgbWFrZSBzdXJlIHRvIHVwZGF0ZSBjb250ZW50IHNvIG5vIG5lZWQgdG8gZmxhZyBpdCBhcyBp
c1JlYWR5ID0gdHJ1ZQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2Ug
SW50ZXJuYWxUZXh0dXJlLkRBVEFTT1VSQ0VfUkVOREVSVEFSR0VUOgorICAgICAgICAgICAgICAg
IHZhciBvcHRpb25zID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0Q3JlYXRp
b25PcHRpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlJlbmRlclRhcmdldENyZWF0
aW9uT3B0aW9ucyJdKCk7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVm
ZmVyID0gdGhpcy5fZ2VuZXJhdGVEZXB0aEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBvcHRpb25z
LmdlbmVyYXRlTWlwTWFwcyA9IHRoaXMuZ2VuZXJhdGVNaXBNYXBzOworICAgICAgICAgICAgICAg
IG9wdGlvbnMuZ2VuZXJhdGVTdGVuY2lsQnVmZmVyID0gdGhpcy5fZ2VuZXJhdGVTdGVuY2lsQnVm
ZmVyOworICAgICAgICAgICAgICAgIG9wdGlvbnMuc2FtcGxpbmdNb2RlID0gdGhpcy5zYW1wbGlu
Z01vZGU7CisgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gdGhpcy50eXBlOworICAgICAg
ICAgICAgICAgIGlmICh0aGlzLmlzQ3ViZSkgeworICAgICAgICAgICAgICAgICAgICBwcm94eSA9
IHRoaXMuX2VuZ2luZS5jcmVhdGVSZW5kZXJUYXJnZXRDdWJlVGV4dHVyZSh0aGlzLndpZHRoLCBv
cHRpb25zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBzaXplID0geworICAgICAgICAgICAgICAgICAgICAgICAgd2lk
dGg6IHRoaXMud2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVp
Z2h0CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHByb3h5ID0g
dGhpcy5fZW5naW5lLmNyZWF0ZVJlbmRlclRhcmdldFRleHR1cmUoc2l6ZSwgb3B0aW9ucyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByb3h5Ll9zd2FwQW5kRGllKHRoaXMp
OworICAgICAgICAgICAgICAgIHRoaXMuaXNSZWFkeSA9IHRydWU7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgY2FzZSBJbnRlcm5hbFRleHR1cmUuREFUQVNPVVJDRV9ERVBU
SFRFWFRVUkU6CisgICAgICAgICAgICAgICAgdmFyIGRlcHRoVGV4dHVyZU9wdGlvbnMgPSB7Cisg
ICAgICAgICAgICAgICAgICAgIGJpbGluZWFyRmlsdGVyaW5nOiB0aGlzLnNhbXBsaW5nTW9kZSAh
PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0
YW50cyJdLlRFWFRVUkVfQklMSU5FQVJfU0FNUExJTkdNT0RFLAorICAgICAgICAgICAgICAgICAg
ICBjb21wYXJpc29uRnVuY3Rpb246IHRoaXMuX2NvbXBhcmlzb25GdW5jdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgZ2VuZXJhdGVTdGVuY2lsOiB0aGlzLl9nZW5lcmF0ZVN0ZW5jaWxCdWZmZXIs
CisgICAgICAgICAgICAgICAgICAgIGlzQ3ViZTogdGhpcy5pc0N1YmUKKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgIHByb3h5ID0gdGhpcy5fZW5naW5lLmNyZWF0ZURlcHRoU3Rl
bmNpbFRleHR1cmUoeyB3aWR0aDogdGhpcy53aWR0aCwgaGVpZ2h0OiB0aGlzLmhlaWdodCB9LCBk
ZXB0aFRleHR1cmVPcHRpb25zKTsKKyAgICAgICAgICAgICAgICBwcm94eS5fc3dhcEFuZERpZSh0
aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLmlzUmVhZHkgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgSW50ZXJuYWxUZXh0dXJlLkRBVEFTT1VSQ0Vf
Q1VCRToKKyAgICAgICAgICAgICAgICBwcm94eSA9IHRoaXMuX2VuZ2luZS5jcmVhdGVDdWJlVGV4
dHVyZSh0aGlzLnVybCwgbnVsbCwgdGhpcy5fZmlsZXMsICF0aGlzLmdlbmVyYXRlTWlwTWFwcywg
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBwcm94eS5fc3dhcEFuZERpZShfdGhp
cyk7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmlzUmVhZHkgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0sIG51bGwsIHRoaXMuZm9ybWF0LCB0aGlzLl9leHRlbnNpb24pOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgSW50ZXJuYWxUZXh0dXJlLkRBVEFTT1VS
Q0VfQ1VCRVJBVzoKKyAgICAgICAgICAgICAgICBwcm94eSA9IHRoaXMuX2VuZ2luZS5jcmVhdGVS
YXdDdWJlVGV4dHVyZSh0aGlzLl9idWZmZXJWaWV3QXJyYXksIHRoaXMud2lkdGgsIHRoaXMuZm9y
bWF0LCB0aGlzLnR5cGUsIHRoaXMuZ2VuZXJhdGVNaXBNYXBzLCB0aGlzLmludmVydFksIHRoaXMu
c2FtcGxpbmdNb2RlLCB0aGlzLl9jb21wcmVzc2lvbik7CisgICAgICAgICAgICAgICAgcHJveHku
X3N3YXBBbmREaWUodGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjYXNlIEludGVybmFsVGV4dHVy
ZS5EQVRBU09VUkNFX0NVQkVSQVdfUkdCRDoKKyAgICAgICAgICAgICAgICBwcm94eSA9IHRoaXMu
X2VuZ2luZS5jcmVhdGVSYXdDdWJlVGV4dHVyZShudWxsLCB0aGlzLndpZHRoLCB0aGlzLmZvcm1h
dCwgdGhpcy50eXBlLCB0aGlzLmdlbmVyYXRlTWlwTWFwcywgdGhpcy5pbnZlcnRZLCB0aGlzLnNh
bXBsaW5nTW9kZSwgdGhpcy5fY29tcHJlc3Npb24pOworICAgICAgICAgICAgICAgIEludGVybmFs
VGV4dHVyZS5fVXBkYXRlUkdCREFzeW5jKHByb3h5LCB0aGlzLl9idWZmZXJWaWV3QXJyYXlBcnJh
eSwgdGhpcy5fc3BoZXJpY2FsUG9seW5vbWlhbCwgdGhpcy5fbG9kR2VuZXJhdGlvblNjYWxlLCB0
aGlzLl9sb2RHZW5lcmF0aW9uT2Zmc2V0KS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHJveHkuX3N3YXBBbmREaWUoX3RoaXMpOworICAgICAgICAgICAgICAgICAgICBf
dGhpcy5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBjYXNlIEludGVybmFsVGV4dHVyZS5EQVRBU09VUkNFX0NV
QkVQUkVGSUxURVJFRDoKKyAgICAgICAgICAgICAgICBwcm94eSA9IHRoaXMuX2VuZ2luZS5jcmVh
dGVQcmVmaWx0ZXJlZEN1YmVUZXh0dXJlKHRoaXMudXJsLCBudWxsLCB0aGlzLl9sb2RHZW5lcmF0
aW9uU2NhbGUsIHRoaXMuX2xvZEdlbmVyYXRpb25PZmZzZXQsIGZ1bmN0aW9uIChwcm94eSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAocHJveHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHByb3h5Ll9zd2FwQW5kRGllKF90aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9LCBu
dWxsLCB0aGlzLmZvcm1hdCwgdGhpcy5fZXh0ZW5zaW9uKTsKKyAgICAgICAgICAgICAgICBwcm94
eS5fc3BoZXJpY2FsUG9seW5vbWlhbCA9IHRoaXMuX3NwaGVyaWNhbFBvbHlub21pYWw7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIEludGVybmFsVGV4dHVyZS5wcm90b3R5cGUuX3N3YXBBbmREaWUgPSBmdW5jdGlvbiAo
dGFyZ2V0KSB7CisgICAgICAgIHRhcmdldC5fd2ViR0xUZXh0dXJlID0gdGhpcy5fd2ViR0xUZXh0
dXJlOworICAgICAgICB0YXJnZXQuX2lzUkdCRCA9IHRoaXMuX2lzUkdCRDsKKyAgICAgICAgaWYg
KHRoaXMuX2ZyYW1lYnVmZmVyKSB7CisgICAgICAgICAgICB0YXJnZXQuX2ZyYW1lYnVmZmVyID0g
dGhpcy5fZnJhbWVidWZmZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2RlcHRoU3Rl
bmNpbEJ1ZmZlcikgeworICAgICAgICAgICAgdGFyZ2V0Ll9kZXB0aFN0ZW5jaWxCdWZmZXIgPSB0
aGlzLl9kZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xv
ZFRleHR1cmVIaWdoKSB7CisgICAgICAgICAgICBpZiAodGFyZ2V0Ll9sb2RUZXh0dXJlSGlnaCkg
eworICAgICAgICAgICAgICAgIHRhcmdldC5fbG9kVGV4dHVyZUhpZ2guZGlzcG9zZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGFyZ2V0Ll9sb2RUZXh0dXJlSGlnaCA9IHRoaXMuX2xv
ZFRleHR1cmVIaWdoOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9sb2RUZXh0dXJlTWlk
KSB7CisgICAgICAgICAgICBpZiAodGFyZ2V0Ll9sb2RUZXh0dXJlTWlkKSB7CisgICAgICAgICAg
ICAgICAgdGFyZ2V0Ll9sb2RUZXh0dXJlTWlkLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRhcmdldC5fbG9kVGV4dHVyZU1pZCA9IHRoaXMuX2xvZFRleHR1cmVNaWQ7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xvZFRleHR1cmVMb3cpIHsKKyAgICAgICAgICAg
IGlmICh0YXJnZXQuX2xvZFRleHR1cmVMb3cpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXQuX2xv
ZFRleHR1cmVMb3cuZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGFyZ2V0
Ll9sb2RUZXh0dXJlTG93ID0gdGhpcy5fbG9kVGV4dHVyZUxvdzsKKyAgICAgICAgfQorICAgICAg
ICBpZiAodGhpcy5faXJyYWRpYW5jZVRleHR1cmUpIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQu
X2lycmFkaWFuY2VUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0Ll9pcnJhZGlhbmNl
VGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YXJnZXQuX2ly
cmFkaWFuY2VUZXh0dXJlID0gdGhpcy5faXJyYWRpYW5jZVRleHR1cmU7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGNhY2hlID0gdGhpcy5fZW5naW5lLmdldExvYWRlZFRleHR1cmVzQ2FjaGUoKTsK
KyAgICAgICAgdmFyIGluZGV4ID0gY2FjaGUuaW5kZXhPZih0aGlzKTsKKyAgICAgICAgaWYgKGlu
ZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgY2FjaGUuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgaW5kZXggPSBjYWNoZS5pbmRleE9mKHRhcmdldCk7CisgICAgICAg
IGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAgICAgIGNhY2hlLnB1c2godGFyZ2V0KTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZSB0aGUgY3VycmVudCBhbGxv
Y2F0ZWQgcmVzb3VyY2VzCisgICAgICovCisgICAgSW50ZXJuYWxUZXh0dXJlLnByb3RvdHlwZS5k
aXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX3dlYkdMVGV4dHVyZSkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3JlZmVyZW5j
ZXMtLTsKKyAgICAgICAgaWYgKHRoaXMuX3JlZmVyZW5jZXMgPT09IDApIHsKKyAgICAgICAgICAg
IHRoaXMuX2VuZ2luZS5fcmVsZWFzZVRleHR1cmUodGhpcyk7CisgICAgICAgICAgICB0aGlzLl93
ZWJHTFRleHR1cmUgPSBudWxsOworICAgICAgICAgICAgdGhpcy5fd2ViR1BVVGV4dHVyZSA9IG51
bGw7CisgICAgICAgICAgICB0aGlzLl93ZWJHUFVTYW1wbGVyID0gbnVsbDsKKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBJbnRlcm5hbFRleHR1cmUuX1VwZGF0ZVJH
QkRBc3luYyA9IGZ1bmN0aW9uIChpbnRlcm5hbFRleHR1cmUsIGRhdGEsIHNwaGVyaWNhbFBvbHlu
b21pYWwsIGxvZFNjYWxlLCBsb2RPZmZzZXQpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9v
bHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgi
ZW52aXJvbm1lbnRUZXh0dXJlVG9vbHMiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoZSBz
b3VyY2Ugb2YgdGhlIHRleHR1cmUgZGF0YSBpcyB1bmtub3duCisgICAgICovCisgICAgSW50ZXJu
YWxUZXh0dXJlLkRBVEFTT1VSQ0VfVU5LTk9XTiA9IDA7CisgICAgLyoqCisgICAgICogVGV4dHVy
ZSBkYXRhIGNvbWVzIGZyb20gYW4gVVJMCisgICAgICovCisgICAgSW50ZXJuYWxUZXh0dXJlLkRB
VEFTT1VSQ0VfVVJMID0gMTsKKyAgICAvKioKKyAgICAgKiBUZXh0dXJlIGRhdGEgaXMgb25seSB1
c2VkIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZQorICAgICAqLworICAgIEludGVybmFsVGV4dHVyZS5E
QVRBU09VUkNFX1RFTVAgPSAyOworICAgIC8qKgorICAgICAqIFRleHR1cmUgZGF0YSBjb21lcyBm
cm9tIHJhdyBkYXRhIChBcnJheUJ1ZmZlcikKKyAgICAgKi8KKyAgICBJbnRlcm5hbFRleHR1cmUu
REFUQVNPVVJDRV9SQVcgPSAzOworICAgIC8qKgorICAgICAqIFRleHR1cmUgY29udGVudCBpcyBk
eW5hbWljICh2aWRlbyBvciBkeW5hbWljIHRleHR1cmUpCisgICAgICovCisgICAgSW50ZXJuYWxU
ZXh0dXJlLkRBVEFTT1VSQ0VfRFlOQU1JQyA9IDQ7CisgICAgLyoqCisgICAgICogVGV4dHVyZSBj
b250ZW50IGlzIGdlbmVyYXRlZCBieSByZW5kZXJpbmcgdG8gaXQKKyAgICAgKi8KKyAgICBJbnRl
cm5hbFRleHR1cmUuREFUQVNPVVJDRV9SRU5ERVJUQVJHRVQgPSA1OworICAgIC8qKgorICAgICAq
IFRleHR1cmUgY29udGVudCBpcyBwYXJ0IG9mIGEgbXVsdGkgcmVuZGVyIHRhcmdldCBwcm9jZXNz
CisgICAgICovCisgICAgSW50ZXJuYWxUZXh0dXJlLkRBVEFTT1VSQ0VfTVVMVElSRU5ERVJUQVJH
RVQgPSA2OworICAgIC8qKgorICAgICAqIFRleHR1cmUgZGF0YSBjb21lcyBmcm9tIGEgY3ViZSBk
YXRhIGZpbGUKKyAgICAgKi8KKyAgICBJbnRlcm5hbFRleHR1cmUuREFUQVNPVVJDRV9DVUJFID0g
NzsKKyAgICAvKioKKyAgICAgKiBUZXh0dXJlIGRhdGEgY29tZXMgZnJvbSBhIHJhdyBjdWJlIGRh
dGEKKyAgICAgKi8KKyAgICBJbnRlcm5hbFRleHR1cmUuREFUQVNPVVJDRV9DVUJFUkFXID0gODsK
KyAgICAvKioKKyAgICAgKiBUZXh0dXJlIGRhdGEgY29tZSBmcm9tIGEgcHJlZmlsdGVyZWQgY3Vi
ZSBkYXRhIGZpbGUKKyAgICAgKi8KKyAgICBJbnRlcm5hbFRleHR1cmUuREFUQVNPVVJDRV9DVUJF
UFJFRklMVEVSRUQgPSA5OworICAgIC8qKgorICAgICAqIFRleHR1cmUgY29udGVudCBpcyByYXcg
M0QgZGF0YQorICAgICAqLworICAgIEludGVybmFsVGV4dHVyZS5EQVRBU09VUkNFX1JBVzNEID0g
MTA7CisgICAgLyoqCisgICAgICogVGV4dHVyZSBjb250ZW50IGlzIGEgZGVwdGggdGV4dHVyZQor
ICAgICAqLworICAgIEludGVybmFsVGV4dHVyZS5EQVRBU09VUkNFX0RFUFRIVEVYVFVSRSA9IDEx
OworICAgIC8qKgorICAgICAqIFRleHR1cmUgZGF0YSBjb21lcyBmcm9tIGEgcmF3IGN1YmUgZGF0
YSBlbmNvZGVkIHdpdGggUkdCRAorICAgICAqLworICAgIEludGVybmFsVGV4dHVyZS5EQVRBU09V
UkNFX0NVQkVSQVdfUkdCRCA9IDEyOworICAgIHJldHVybiBJbnRlcm5hbFRleHR1cmU7Cit9KCkp
OworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0dXJlcy9taXJyb3JU
ZXh0dXJlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL1RleHR1cmVzL21pcnJvclRleHR1cmUudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IE1pcnJvclRleHR1cmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTWlycm9yVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWlycm9y
VGV4dHVyZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9u
b2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJp
YWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9UZXh0dXJl
cy9yZW5kZXJUYXJnZXRUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJn
ZXRUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNf
Ymx1clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9Qb3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2VzcyAqLyAiLi9Q
b3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5l
cy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9w
bGFuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vTWF0aHMvbWF0aC5wbGFuZSAqLyAiLi9NYXRocy9tYXRoLnBsYW5lLnRzIik7CisK
KworCisKKworCisKKy8qKgorICogTWlycm9yIHRleHR1cmUgY2FuIGJlIHVzZWQgdG8gc2ltdWxh
dGUgdGhlIHZpZXcgZnJvbSBhIG1pcnJvciBpbiBhIHNjZW5lLgorICogSXQgd2lsbCBkeW5hbWlj
YWxseSBiZSByZW5kZXJlZCBldmVyeSBmcmFtZSB0byBhZGFwdCB0byB0aGUgY2FtZXJhIHBvaW50
IG9mIHZpZXcuCisgKiBZb3UgY2FuIHRoZW4gZWFzaWx5IHVzZSBpdCBhcyBhIHJlZmxlY3Rpb25U
ZXh0dXJlIG9uIGEgZmxhdCBzdXJmYWNlLgorICogSW4gY2FzZSB0aGUgc3VyZmFjZSBpcyBub3Qg
YSBwbGFuZSwgcGxlYXNlIGNvbnNpZGVyIHJlbHlpbmcgb24gcmVmbGVjdGlvbiBwcm9iZXMuCisg
KiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3JlZmxlY3QjbWlycm9ycwor
ICovCit2YXIgTWlycm9yVGV4dHVyZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIp
IHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShN
aXJyb3JUZXh0dXJlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIE1p
cnJvciBUZXh0dXJlLgorICAgICAqIE1pcnJvciB0ZXh0dXJlIGNhbiBiZSB1c2VkIHRvIHNpbXVs
YXRlIHRoZSB2aWV3IGZyb20gYSBtaXJyb3IgaW4gYSBzY2VuZS4KKyAgICAgKiBJdCB3aWxsIGR5
bmFtaWNhbGx5IGJlIHJlbmRlcmVkIGV2ZXJ5IGZyYW1lIHRvIGFkYXB0IHRvIHRoZSBjYW1lcmEg
cG9pbnQgb2Ygdmlldy4KKyAgICAgKiBZb3UgY2FuIHRoZW4gZWFzaWx5IHVzZSBpdCBhcyBhIHJl
ZmxlY3Rpb25UZXh0dXJlIG9uIGEgZmxhdCBzdXJmYWNlLgorICAgICAqIEluIGNhc2UgdGhlIHN1
cmZhY2UgaXMgbm90IGEgcGxhbmUsIHBsZWFzZSBjb25zaWRlciByZWx5aW5nIG9uIHJlZmxlY3Rp
b24gcHJvYmVzLgorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
cmVmbGVjdCNtaXJyb3JzCisgICAgICogQHBhcmFtIG5hbWUKKyAgICAgKiBAcGFyYW0gc2l6ZQor
ICAgICAqIEBwYXJhbSBzY2VuZQorICAgICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMKKyAgICAg
KiBAcGFyYW0gdHlwZQorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUKKyAgICAgKiBAcGFyYW0g
Z2VuZXJhdGVEZXB0aEJ1ZmZlcgorICAgICAqLworICAgIGZ1bmN0aW9uIE1pcnJvclRleHR1cmUo
bmFtZSwgc2l6ZSwgc2NlbmUsIGdlbmVyYXRlTWlwTWFwcywgdHlwZSwgc2FtcGxpbmdNb2RlLCBn
ZW5lcmF0ZURlcHRoQnVmZmVyKSB7CisgICAgICAgIGlmICh0eXBlID09PSB2b2lkIDApIHsgdHlw
ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7IH0KKyAgICAgICAgaWYgKHNhbXBsaW5n
TW9kZSA9PT0gdm9pZCAwKSB7IHNhbXBsaW5nTW9kZSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FN
UExJTkdNT0RFOyB9CisgICAgICAgIGlmIChnZW5lcmF0ZURlcHRoQnVmZmVyID09PSB2b2lkIDAp
IHsgZ2VuZXJhdGVEZXB0aEJ1ZmZlciA9IHRydWU7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1
cGVyLmNhbGwodGhpcywgbmFtZSwgc2l6ZSwgc2NlbmUsIGdlbmVyYXRlTWlwTWFwcywgdHJ1ZSwg
dHlwZSwgZmFsc2UsIHNhbXBsaW5nTW9kZSwgZ2VuZXJhdGVEZXB0aEJ1ZmZlcikgfHwgdGhpczsK
KyAgICAgICAgX3RoaXMuc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZSB0aGUgcmVmbGVjdGlvbiBwbGFuZSB3ZSB3YW50IHRvIHVzZS4gVGhlIG1pcnJvclBsYW5l
IGlzIHVzdWFsbHkgc2V0IHRvIHRoZSBjb25zdHJ1Y3RlZCByZWZsZWN0b3IuCisgICAgICAgICAq
IEl0IGlzIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHNldCB0aGUgbWlycm9yUGxhbmUgYnkgZGlyZWN0
bHkgdXNpbmcgYSBQbGFuZShhLCBiLCBjLCBkKSB3aGVyZSBhLCBiIGFuZCBjIGdpdmUgdGhlIHBs
YW5lIG5vcm1hbCB2ZWN0b3IgKGEsIGIsIGMpIGFuZCBkIGlzIGEgc2NhbGFyIGRpc3BsYWNlbWVu
dCBmcm9tIHRoZSBtaXJyb3JQbGFuZSB0byB0aGUgb3JpZ2luLiBIb3dldmVyIGluIGFsbCBidXQg
dGhlIHZlcnkgc2ltcGxlc3Qgb2Ygc2l0dWF0aW9ucyBpdCBpcyBtb3JlIHN0cmFpZ2h0IGZvcndh
cmQgdG8gc2V0IGl0IHRvIHRoZSByZWZsZWN0b3IgYXMgc3RhdGVkIGluIHRoZSBkb2MuCisgICAg
ICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcmVmbGVjdCNtaXJy
b3JzCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5taXJyb3JQbGFuZSA9IG5ldyBfTWF0aHNf
bWF0aF9wbGFuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQbGFuZSJdKDAsIDEsIDAs
IDEpOworICAgICAgICBfdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLlplcm8oKTsKKyAgICAgICAg
X3RoaXMuX21pcnJvck1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9hZGFwdGl2ZUJs
dXJLZXJuZWwgPSAwOworICAgICAgICBfdGhpcy5fYmx1cktlcm5lbFggPSAwOworICAgICAgICBf
dGhpcy5fYmx1cktlcm5lbFkgPSAwOworICAgICAgICBfdGhpcy5fYmx1clJhdGlvID0gMS4wOwor
ICAgICAgICBfdGhpcy5pZ25vcmVDYW1lcmFWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIF90aGlz
Ll91cGRhdGVHYW1tYVNwYWNlKCk7CisgICAgICAgIF90aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25m
aWdDaGFuZ2VPYnNlcnZlciA9IHNjZW5lLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ub25V
cGRhdGVQYXJhbWV0ZXJzLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5fdXBk
YXRlR2FtbWFTcGFjZTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLm9uQmVmb3JlUmVuZGVy
T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJpeCJdLlJlZmxlY3Rpb25Ub1Jl
ZihfdGhpcy5taXJyb3JQbGFuZSwgX3RoaXMuX21pcnJvck1hdHJpeCk7CisgICAgICAgICAgICBf
dGhpcy5fc2F2ZWRWaWV3TWF0cml4ID0gc2NlbmUuZ2V0Vmlld01hdHJpeCgpOworICAgICAgICAg
ICAgX3RoaXMuX21pcnJvck1hdHJpeC5tdWx0aXBseVRvUmVmKF90aGlzLl9zYXZlZFZpZXdNYXRy
aXgsIF90aGlzLl90cmFuc2Zvcm1NYXRyaXgpOworICAgICAgICAgICAgc2NlbmUuc2V0VHJhbnNm
b3JtTWF0cml4KF90aGlzLl90cmFuc2Zvcm1NYXRyaXgsIHNjZW5lLmdldFByb2plY3Rpb25NYXRy
aXgoKSk7CisgICAgICAgICAgICBzY2VuZS5jbGlwUGxhbmUgPSBfdGhpcy5taXJyb3JQbGFuZTsK
KyAgICAgICAgICAgIHNjZW5lLmdldEVuZ2luZSgpLmN1bGxCYWNrRmFjZXMgPSBmYWxzZTsKKyAg
ICAgICAgICAgIHNjZW5lLl9taXJyb3JlZENhbWVyYVBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29y
ZGluYXRlcyhzY2VuZS5hY3RpdmVDYW1lcmEuZ2xvYmFsUG9zaXRpb24sIF90aGlzLl9taXJyb3JN
YXRyaXgpOworICAgICAgICB9KTsKKyAgICAgICAgX3RoaXMub25BZnRlclJlbmRlck9ic2VydmFi
bGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNjZW5lLnNldFRyYW5zZm9ybU1hdHJp
eChfdGhpcy5fc2F2ZWRWaWV3TWF0cml4LCBzY2VuZS5nZXRQcm9qZWN0aW9uTWF0cml4KCkpOwor
ICAgICAgICAgICAgc2NlbmUuZ2V0RW5naW5lKCkuY3VsbEJhY2tGYWNlcyA9IHRydWU7CisgICAg
ICAgICAgICBzY2VuZS5fbWlycm9yZWRDYW1lcmFQb3NpdGlvbiA9IG51bGw7CisgICAgICAgICAg
ICBzY2VuZS5jbGlwUGxhbmUgPSBudWxsOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIF90
aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWlycm9yVGV4dHVyZS5wcm90
b3R5cGUsICJibHVyUmF0aW8iLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2JsdXJSYXRpbzsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIERlZmluZSB0aGUgYmx1ciByYXRpbyB1c2VkIHRvIGJsdXIgdGhlIHJlZmxlY3Rp
b24gaWYgbmVlZGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9ibHVyUmF0aW8gPT09IHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYmx1clJh
dGlvID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9wcmVwYXJlUG9zdFByb2Nlc3NlcygpOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWlycm9yVGV4dHVy
ZS5wcm90b3R5cGUsICJhZGFwdGl2ZUJsdXJLZXJuZWwiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBEZWZpbmUgdGhlIGFkYXB0aXZlIGJsdXIga2VybmVsIHVzZWQgdG8gYmx1ciB0aGUgcmVm
bGVjdGlvbiBpZiBuZWVkZWQuCisgICAgICAgICAqIFRoaXMgd2lsbCBhdXRvY29tcHV0ZSB0aGUg
Y2xvc2VzdCBiZXN0IG1hdGNoIGZvciB0aGUgYGJsdXJLZXJuZWxgCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYWRhcHRpdmVC
bHVyS2VybmVsID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcHV0ZUJsdXJLZXJu
ZWwoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1pcnJv
clRleHR1cmUucHJvdG90eXBlLCAiYmx1cktlcm5lbCIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERlZmluZSB0aGUgYmx1ciBrZXJuZWwgdXNlZCB0byBibHVyIHRoZSByZWZsZWN0aW9uIGlm
IG5lZWRlZC4KKyAgICAgICAgICogUGxlYXNlIGNvbnNpZGVyIHVzaW5nIGBhZGFwdGl2ZUJsdXJL
ZXJuZWxgIGFzIGl0IGNvdWxkIGZpbmQgdGhlIGNsb3Nlc3QgYmVzdCB2YWx1ZSBmb3IgeW91Lgor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IHRoaXMuYmx1cktlcm5lbFggPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYmx1cktlcm5lbFkg
PSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1p
cnJvclRleHR1cmUucHJvdG90eXBlLCAiYmx1cktlcm5lbFgiLCB7CisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JsdXJLZXJuZWxYOworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBibHVyIGtlcm5lbCBvbiB0
aGUgWCBBeGlzIHVzZWQgdG8gYmx1ciB0aGUgcmVmbGVjdGlvbiBpZiBuZWVkZWQuCisgICAgICAg
ICAqIFBsZWFzZSBjb25zaWRlciB1c2luZyBgYWRhcHRpdmVCbHVyS2VybmVsYCBhcyBpdCBjb3Vs
ZCBmaW5kIHRoZSBjbG9zZXN0IGJlc3QgdmFsdWUgZm9yIHlvdS4KKyAgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fYmx1cktl
cm5lbFggPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5fYmx1cktlcm5lbFggPSB2YWx1ZTsKKyAgICAgICAgICAgIHRo
aXMuX3ByZXBhcmVQb3N0UHJvY2Vzc2VzKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShNaXJyb3JUZXh0dXJlLnByb3RvdHlwZSwgImJsdXJLZXJuZWxZIiwg
eworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9i
bHVyS2VybmVsWTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0
aGUgYmx1ciBrZXJuZWwgb24gdGhlIFkgQXhpcyB1c2VkIHRvIGJsdXIgdGhlIHJlZmxlY3Rpb24g
aWYgbmVlZGVkLgorICAgICAgICAgKiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgYGFkYXB0aXZlQmx1
cktlcm5lbGAgYXMgaXQgY291bGQgZmluZCB0aGUgY2xvc2VzdCBiZXN0IHZhbHVlIGZvciB5b3Uu
CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX2JsdXJLZXJuZWxZID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2JsdXJLZXJuZWxZID0gdmFs
dWU7CisgICAgICAgICAgICB0aGlzLl9wcmVwYXJlUG9zdFByb2Nlc3NlcygpOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBNaXJyb3JUZXh0dXJlLnByb3RvdHlwZS5fYXV0b0NvbXB1dGVCbHVyS2Vy
bmVsID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRTY2VuZSgp
LmdldEVuZ2luZSgpOworICAgICAgICB2YXIgZHcgPSB0aGlzLmdldFJlbmRlcldpZHRoKCkgLyBl
bmdpbmUuZ2V0UmVuZGVyV2lkdGgoKTsKKyAgICAgICAgdmFyIGRoID0gdGhpcy5nZXRSZW5kZXJI
ZWlnaHQoKSAvIGVuZ2luZS5nZXRSZW5kZXJIZWlnaHQoKTsKKyAgICAgICAgdGhpcy5ibHVyS2Vy
bmVsWCA9IHRoaXMuX2FkYXB0aXZlQmx1cktlcm5lbCAqIGR3OworICAgICAgICB0aGlzLmJsdXJL
ZXJuZWxZID0gdGhpcy5fYWRhcHRpdmVCbHVyS2VybmVsICogZGg7CisgICAgfTsKKyAgICBNaXJy
b3JUZXh0dXJlLnByb3RvdHlwZS5fb25SYXRpb1Jlc2NhbGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICh0aGlzLl9zaXplUmF0aW8pIHsKKyAgICAgICAgICAgIHRoaXMucmVzaXplKHRoaXMu
X2luaXRpYWxTaXplUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5fYWRhcHRpdmVC
bHVyS2VybmVsKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVBvc3RQcm9jZXNzZXMo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYWRhcHRpdmVC
bHVyS2VybmVsKSB7CisgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcHV0ZUJsdXJLZXJuZWwoKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgTWlycm9yVGV4dHVyZS5wcm90b3R5cGUuX3VwZGF0ZUdh
bW1hU3BhY2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuZ2FtbWFTcGFjZSA9ICF0aGlz
LnNjZW5lLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uaXNFbmFibGVkIHx8ICF0aGlzLnNj
ZW5lLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uYXBwbHlCeVBvc3RQcm9jZXNzOworICAg
IH07CisgICAgTWlycm9yVGV4dHVyZS5wcm90b3R5cGUuX3ByZXBhcmVQb3N0UHJvY2Vzc2VzID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmNsZWFyUG9zdFByb2Nlc3Nlcyh0cnVlKTsKKyAg
ICAgICAgaWYgKHRoaXMuX2JsdXJLZXJuZWxYICYmIHRoaXMuX2JsdXJLZXJuZWxZKSB7CisgICAg
ICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRTY2VuZSgpLmdldEVuZ2luZSgpOworICAgICAg
ICAgICAgdmFyIHRleHR1cmVUeXBlID0gZW5naW5lLmdldENhcHMoKS50ZXh0dXJlRmxvYXRSZW5k
ZXIgPyBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfRkxPQVQgOiBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfSEFMRl9GTE9BVDsK
KyAgICAgICAgICAgIHRoaXMuX2JsdXJYID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX2JsdXJQb3N0UHJv
Y2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJCbHVyUG9zdFByb2Nlc3MiXSgiaG9y
aXpvbnRhbCBibHVyIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IyIl0oMS4wLCAwKSwgdGhpcy5fYmx1cktlcm5lbFgsIHRoaXMuX2Js
dXJSYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIGVuZ2luZSwg
ZmFsc2UsIHRleHR1cmVUeXBlKTsKKyAgICAgICAgICAgIHRoaXMuX2JsdXJYLmF1dG9DbGVhciA9
IGZhbHNlOworICAgICAgICAgICAgaWYgKHRoaXMuX2JsdXJSYXRpbyA9PT0gMSAmJiB0aGlzLnNh
bXBsZXMgPCAyICYmIHRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ibHVy
WC5pbnB1dFRleHR1cmUgPSB0aGlzLl90ZXh0dXJlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYmx1clguYWx3YXlzRm9yY2VQT1QgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYmx1clkgPSBuZXcgX1Bvc3RQ
cm9jZXNzZXNfYmx1clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkJs
dXJQb3N0UHJvY2VzcyJdKCJ2ZXJ0aWNhbCBibHVyIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0oMCwgMS4wKSwgdGhpcy5fYmx1
cktlcm5lbFksIHRoaXMuX2JsdXJSYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0
dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1Q
TElOR01PREUsIGVuZ2luZSwgZmFsc2UsIHRleHR1cmVUeXBlKTsKKyAgICAgICAgICAgIHRoaXMu
X2JsdXJZLmF1dG9DbGVhciA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fYmx1clkuYWx3YXlz
Rm9yY2VQT1QgPSB0aGlzLl9ibHVyUmF0aW8gIT09IDE7CisgICAgICAgICAgICB0aGlzLmFkZFBv
c3RQcm9jZXNzKHRoaXMuX2JsdXJYKTsKKyAgICAgICAgICAgIHRoaXMuYWRkUG9zdFByb2Nlc3Mo
dGhpcy5fYmx1clkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYg
KHRoaXMuX2JsdXJZKSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQb3N0UHJvY2Vzcyh0
aGlzLl9ibHVyWSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYmx1clkuZGlzcG9zZSgpOworICAg
ICAgICAgICAgICAgIHRoaXMuX2JsdXJZID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh0aGlzLl9ibHVyWCkgeworICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlUG9zdFBy
b2Nlc3ModGhpcy5fYmx1clgpOworICAgICAgICAgICAgICAgIHRoaXMuX2JsdXJYLmRpc3Bvc2Uo
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9ibHVyWCA9IG51bGw7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lIHRoZSBtaXJyb3IgdGV4dHVy
ZS4KKyAgICAgKiBAcmV0dXJucyB0aGUgY2xvbmVkIHRleHR1cmUKKyAgICAgKi8KKyAgICBNaXJy
b3JUZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNj
ZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICBpZiAoIXNjZW5lKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB2YXIgdGV4dHVyZVNpemUgPSB0aGlz
LmdldFNpemUoKTsKKyAgICAgICAgdmFyIG5ld1RleHR1cmUgPSBuZXcgTWlycm9yVGV4dHVyZSh0
aGlzLm5hbWUsIHRleHR1cmVTaXplLndpZHRoLCBzY2VuZSwgdGhpcy5fcmVuZGVyVGFyZ2V0T3B0
aW9ucy5nZW5lcmF0ZU1pcE1hcHMsIHRoaXMuX3JlbmRlclRhcmdldE9wdGlvbnMudHlwZSwgdGhp
cy5fcmVuZGVyVGFyZ2V0T3B0aW9ucy5zYW1wbGluZ01vZGUsIHRoaXMuX3JlbmRlclRhcmdldE9w
dGlvbnMuZ2VuZXJhdGVEZXB0aEJ1ZmZlcik7CisgICAgICAgIC8vIEJhc2UgdGV4dHVyZQorICAg
ICAgICBuZXdUZXh0dXJlLmhhc0FscGhhID0gdGhpcy5oYXNBbHBoYTsKKyAgICAgICAgbmV3VGV4
dHVyZS5sZXZlbCA9IHRoaXMubGV2ZWw7CisgICAgICAgIC8vIE1pcnJvciBUZXh0dXJlCisgICAg
ICAgIG5ld1RleHR1cmUubWlycm9yUGxhbmUgPSB0aGlzLm1pcnJvclBsYW5lLmNsb25lKCk7Cisg
ICAgICAgIGlmICh0aGlzLnJlbmRlckxpc3QpIHsKKyAgICAgICAgICAgIG5ld1RleHR1cmUucmVu
ZGVyTGlzdCA9IHRoaXMucmVuZGVyTGlzdC5zbGljZSgwKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbmV3VGV4dHVyZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUg
dGV4dHVyZSB0byBhIEpTT04gcmVwcmVzZW50YXRpb24geW91IGNvdWxkIHVzZSBpbiBQYXJzZSBs
YXRlciBvbgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxpemVkIEpTT04gcmVwcmVzZW50YXRp
b24KKyAgICAgKi8KKyAgICBNaXJyb3JUZXh0dXJlLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5uYW1lKSB7CisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9zdXBl
ci5wcm90b3R5cGUuc2VyaWFsaXplLmNhbGwodGhpcyk7CisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QubWlycm9yUGxhbmUgPSB0aGlzLm1pcnJvclBsYW5lLmFzQXJyYXkoKTsKKyAgICAgICAg
cmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNw
b3NlIHRoZSB0ZXh0dXJlIGFuZCByZWxlYXNlIGl0cyBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAg
ICAgKi8KKyAgICBNaXJyb3JUZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAgICAgICAg
dGhpcy5zY2VuZS5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLm9uVXBkYXRlUGFyYW1ldGVy
cy5yZW1vdmUodGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlnQ2hhbmdlT2JzZXJ2ZXIpOworICAg
IH07CisgICAgcmV0dXJuIE1pcnJvclRleHR1cmU7Cit9KF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVu
ZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJSZW5kZXJUYXJn
ZXRUZXh0dXJlIl0pKTsKKworX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5fQ3JlYXRlTWlycm9yID0gZnVuY3Rpb24gKG5h
bWUsIHJlbmRlclRhcmdldFNpemUsIHNjZW5lLCBnZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICByZXR1
cm4gbmV3IE1pcnJvclRleHR1cmUobmFtZSwgcmVuZGVyVGFyZ2V0U2l6ZSwgc2NlbmUsIGdlbmVy
YXRlTWlwTWFwcyk7Cit9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4
dHVyZXMvbXVsdGlSZW5kZXJUYXJnZXQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL1RleHR1cmVz
L211bHRpUmVuZGVyVGFyZ2V0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTXVsdGlSZW5k
ZXJUYXJnZXQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTXVsdGlSZW5k
ZXJUYXJnZXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE11bHRpUmVuZGVyVGFyZ2V0OyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xp
Yi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVy
aWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVy
ZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFy
Z2V0VGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19FeHRlbnNpb25zX2VuZ2luZV9tdWx0
aVJlbmRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vRW5naW5lcy9FeHRlbnNpb25zL2VuZ2luZS5tdWx0aVJlbmRlciAqLyAiLi9F
bmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLm11bHRpUmVuZGVyLnRzIik7CisKKworCisKKworLyoq
CisgKiBBIG11bHRpIHJlbmRlciB0YXJnZXQsIGxpa2UgYSByZW5kZXIgdGFyZ2V0IHByb3ZpZGVz
IHRoZSBhYmlsaXR5IHRvIHJlbmRlciB0byBhIHRleHR1cmUuCisgKiBVbmxpa2UgdGhlIHJlbmRl
ciB0YXJnZXQsIGl0IGNhbiByZW5kZXIgdG8gc2V2ZXJhbCBkcmF3IGJ1ZmZlcnMgaW4gb25lIGRy
YXcuCisgKiBUaGlzIGlzIHNwZWNpYWxseSBpbnRlcmVzdGluZyBpbiBkZWZlcnJlZCByZW5kZXJp
bmcgb3IgZm9yIGFueSBlZmZlY3RzIHJlcXVpcmluZyBtb3JlIHRoYW4KKyAqIGp1c3Qgb25lIGNv
bG9yIGZyb20gYSBzaW5nbGUgcGFzcy4KKyAqLwordmFyIE11bHRpUmVuZGVyVGFyZ2V0ID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKE11bHRpUmVuZGVyVGFyZ2V0LCBfc3VwZXIpOwor
ICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlIGEgbmV3IG11bHRpIHJlbmRlciB0YXJnZXQgdGV4
dHVyZS4KKyAgICAgKiBBIG11bHRpIHJlbmRlciB0YXJnZXQsIGxpa2UgYSByZW5kZXIgdGFyZ2V0
IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHJlbmRlciB0byBhIHRleHR1cmUuCisgICAgICogVW5s
aWtlIHRoZSByZW5kZXIgdGFyZ2V0LCBpdCBjYW4gcmVuZGVyIHRvIHNldmVyYWwgZHJhdyBidWZm
ZXJzIGluIG9uZSBkcmF3LgorICAgICAqIFRoaXMgaXMgc3BlY2lhbGx5IGludGVyZXN0aW5nIGlu
IGRlZmVycmVkIHJlbmRlcmluZyBvciBmb3IgYW55IGVmZmVjdHMgcmVxdWlyaW5nIG1vcmUgdGhh
bgorICAgICAqIGp1c3Qgb25lIGNvbG9yIGZyb20gYSBzaW5nbGUgcGFzcy4KKyAgICAgKiBAcGFy
YW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gc2l6
ZSBEZWZpbmUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcnMgdG8gcmVuZGVyIHRvCisgICAgICogQHBh
cmFtIGNvdW50IERlZmluZSB0aGUgbnVtYmVyIG9mIHRhcmdldCB3ZSBhcmUgcmVuZGVyaW5nIGlu
dG8KKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBiZWxv
bmdzIHRvCisgICAgICogQHBhcmFtIG9wdGlvbnMgRGVmaW5lIHRoZSBvcHRpb25zIHVzZWQgdG8g
Y3JlYXRlIHRoZSBtdWx0aSByZW5kZXIgdGFyZ2V0CisgICAgICovCisgICAgZnVuY3Rpb24gTXVs
dGlSZW5kZXJUYXJnZXQobmFtZSwgc2l6ZSwgY291bnQsIHNjZW5lLCBvcHRpb25zKSB7CisgICAg
ICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBnZW5lcmF0ZU1pcE1hcHMgPSBvcHRp
b25zICYmIG9wdGlvbnMuZ2VuZXJhdGVNaXBNYXBzID8gb3B0aW9ucy5nZW5lcmF0ZU1pcE1hcHMg
OiBmYWxzZTsKKyAgICAgICAgdmFyIGdlbmVyYXRlRGVwdGhUZXh0dXJlID0gb3B0aW9ucyAmJiBv
cHRpb25zLmdlbmVyYXRlRGVwdGhUZXh0dXJlID8gb3B0aW9ucy5nZW5lcmF0ZURlcHRoVGV4dHVy
ZSA6IGZhbHNlOworICAgICAgICB2YXIgZG9Ob3RDaGFuZ2VBc3BlY3RSYXRpbyA9ICFvcHRpb25z
IHx8IG9wdGlvbnMuZG9Ob3RDaGFuZ2VBc3BlY3RSYXRpbyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6
IG9wdGlvbnMuZG9Ob3RDaGFuZ2VBc3BlY3RSYXRpbzsKKyAgICAgICAgX3RoaXMgPSBfc3VwZXIu
Y2FsbCh0aGlzLCBuYW1lLCBzaXplLCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzLCBkb05vdENoYW5n
ZUFzcGVjdFJhdGlvKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fZW5naW5lID0gc2NlbmUuZ2V0
RW5naW5lKCk7CisgICAgICAgIGlmICghX3RoaXMuaXNTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAg
IF90aGlzLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgdHlwZXMgPSBbXTsKKyAgICAgICAgdmFyIHNhbXBsaW5nTW9kZXMgPSBbXTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBpZiAob3B0
aW9ucyAmJiBvcHRpb25zLnR5cGVzICYmIG9wdGlvbnMudHlwZXNbaV0gIT09IHVuZGVmaW5lZCkg
eworICAgICAgICAgICAgICAgIHR5cGVzLnB1c2gob3B0aW9ucy50eXBlc1tpXSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKG9w
dGlvbnMgJiYgb3B0aW9ucy5kZWZhdWx0VHlwZSA/IG9wdGlvbnMuZGVmYXVsdFR5cGUgOiBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChvcHRpb25zICYmIG9wdGlvbnMuc2FtcGxpbmdNb2RlcyAmJiBvcHRpb25zLnNhbXBsaW5nTW9k
ZXNbaV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIHNhbXBsaW5nTW9kZXMucHVz
aChvcHRpb25zLnNhbXBsaW5nTW9kZXNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgc2FtcGxpbmdNb2Rlcy5wdXNoKF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0uQklM
SU5FQVJfU0FNUExJTkdNT0RFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2
YXIgZ2VuZXJhdGVEZXB0aEJ1ZmZlciA9ICFvcHRpb25zIHx8IG9wdGlvbnMuZ2VuZXJhdGVEZXB0
aEJ1ZmZlciA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuZ2VuZXJhdGVEZXB0aEJ1ZmZl
cjsKKyAgICAgICAgdmFyIGdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA9ICFvcHRpb25zIHx8IG9wdGlv
bnMuZ2VuZXJhdGVTdGVuY2lsQnVmZmVyID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG9wdGlvbnMu
Z2VuZXJhdGVTdGVuY2lsQnVmZmVyOworICAgICAgICBfdGhpcy5fc2l6ZSA9IHNpemU7CisgICAg
ICAgIF90aGlzLl9tdWx0aVJlbmRlclRhcmdldE9wdGlvbnMgPSB7CisgICAgICAgICAgICBzYW1w
bGluZ01vZGVzOiBzYW1wbGluZ01vZGVzLAorICAgICAgICAgICAgZ2VuZXJhdGVNaXBNYXBzOiBn
ZW5lcmF0ZU1pcE1hcHMsCisgICAgICAgICAgICBnZW5lcmF0ZURlcHRoQnVmZmVyOiBnZW5lcmF0
ZURlcHRoQnVmZmVyLAorICAgICAgICAgICAgZ2VuZXJhdGVTdGVuY2lsQnVmZmVyOiBnZW5lcmF0
ZVN0ZW5jaWxCdWZmZXIsCisgICAgICAgICAgICBnZW5lcmF0ZURlcHRoVGV4dHVyZTogZ2VuZXJh
dGVEZXB0aFRleHR1cmUsCisgICAgICAgICAgICB0eXBlczogdHlwZXMsCisgICAgICAgICAgICB0
ZXh0dXJlQ291bnQ6IGNvdW50CisgICAgICAgIH07CisgICAgICAgIF90aGlzLl9jcmVhdGVJbnRl
cm5hbFRleHR1cmVzKCk7CisgICAgICAgIF90aGlzLl9jcmVhdGVUZXh0dXJlcygpOworICAgICAg
ICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdWx0aVJl
bmRlclRhcmdldC5wcm90b3R5cGUsICJpc1N1cHBvcnRlZCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldCBpZiBkcmF3IGJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhl
IHVzZWQgaGFyZHdhcmUgYW5kIGJyb3dzZXIuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbmdpbmUud2ViR0xWZXJzaW9u
ID4gMSB8fCB0aGlzLl9lbmdpbmUuZ2V0Q2FwcygpLmRyYXdCdWZmZXJzRXh0ZW5zaW9uOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVsdGlSZW5kZXJUYXJn
ZXQucHJvdG90eXBlLCAidGV4dHVyZXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQg
dGhlIGxpc3Qgb2YgdGV4dHVyZXMgZ2VuZXJhdGVkIGJ5IHRoZSBtdWx0aSByZW5kZXIgdGFyZ2V0
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fdGV4dHVyZXM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShNdWx0aVJlbmRlclRhcmdldC5wcm90b3R5cGUsICJkZXB0aFRleHR1cmUiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgdGhlIGRlcHRoIHRleHR1cmUgZ2VuZXJhdGVk
IGJ5IHRoZSBtdWx0aSByZW5kZXIgdGFyZ2V0IGlmIG9wdGlvbnMuZ2VuZXJhdGVEZXB0aFRleHR1
cmUgaGFzIGJlZW4gc2V0CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlc1t0aGlzLl90ZXh0dXJlcy5sZW5ndGgg
LSAxXTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE11bHRp
UmVuZGVyVGFyZ2V0LnByb3RvdHlwZSwgIndyYXBVIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogU2V0IHRoZSB3cmFwcGluZyBtb2RlIG9uIFUgb2YgYWxsIHRoZSB0ZXh0dXJlcyB3ZSBhcmUg
cmVuZGVyaW5nIHRvLgorICAgICAgICAgKiBDYW4gYmUgYW55IG9mIHRoZSBUZXh0dXJlLiAoQ0xB
TVBfQUREUkVTU01PREUsIE1JUlJPUl9BRERSRVNTTU9ERSBvciBXUkFQX0FERFJFU1NNT0RFKQor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAod3JhcCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX3RleHR1cmVzKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0aGlz
Ll90ZXh0dXJlc1tpXS53cmFwVSA9IHdyYXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVsdGlS
ZW5kZXJUYXJnZXQucHJvdG90eXBlLCAid3JhcFYiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBTZXQgdGhlIHdyYXBwaW5nIG1vZGUgb24gViBvZiBhbGwgdGhlIHRleHR1cmVzIHdlIGFyZSBy
ZW5kZXJpbmcgdG8uCisgICAgICAgICAqIENhbiBiZSBhbnkgb2YgdGhlIFRleHR1cmUuIChDTEFN
UF9BRERSRVNTTU9ERSwgTUlSUk9SX0FERFJFU1NNT0RFIG9yIFdSQVBfQUREUkVTU01PREUpCisg
ICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh3cmFwKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fdGV4dHVyZXMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX3RleHR1cmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X3RleHR1cmVzW2ldLndyYXBWID0gd3JhcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKiBAaGlkZGVuICovCisgICAgTXVsdGlSZW5k
ZXJUYXJnZXQucHJvdG90eXBlLl9yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlz
LnJlbGVhc2VJbnRlcm5hbFRleHR1cmVzKCk7CisgICAgICAgIHRoaXMuX2NyZWF0ZUludGVybmFs
VGV4dHVyZXMoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9pbnRlcm5hbFRl
eHR1cmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3Rl
eHR1cmVzW2ldOworICAgICAgICAgICAgdGV4dHVyZS5fdGV4dHVyZSA9IHRoaXMuX2ludGVybmFs
VGV4dHVyZXNbaV07CisgICAgICAgIH0KKyAgICAgICAgLy8gS2VlcHMgcmVmZXJlbmNlcyB0byBm
cmFtZSBidWZmZXIgYW5kIHN0ZW5jaWwvZGVwdGggYnVmZmVyCisgICAgICAgIHRoaXMuX3RleHR1
cmUgPSB0aGlzLl9pbnRlcm5hbFRleHR1cmVzWzBdOworICAgIH07CisgICAgTXVsdGlSZW5kZXJU
YXJnZXQucHJvdG90eXBlLl9jcmVhdGVJbnRlcm5hbFRleHR1cmVzID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB0aGlzLl9pbnRlcm5hbFRleHR1cmVzID0gdGhpcy5fZW5naW5lLmNyZWF0ZU11bHRp
cGxlUmVuZGVyVGFyZ2V0KHRoaXMuX3NpemUsIHRoaXMuX211bHRpUmVuZGVyVGFyZ2V0T3B0aW9u
cyk7CisgICAgfTsKKyAgICBNdWx0aVJlbmRlclRhcmdldC5wcm90b3R5cGUuX2NyZWF0ZVRleHR1
cmVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ludGVybmFsVGV4dHVyZXMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0obnVsbCwgdGhpcy5n
ZXRTY2VuZSgpKTsKKyAgICAgICAgICAgIHRleHR1cmUuX3RleHR1cmUgPSB0aGlzLl9pbnRlcm5h
bFRleHR1cmVzW2ldOworICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh0ZXh0dXJlKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBLZWVwcyByZWZlcmVuY2VzIHRvIGZyYW1lIGJ1ZmZlciBh
bmQgc3RlbmNpbC9kZXB0aCBidWZmZXIKKyAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX2lu
dGVybmFsVGV4dHVyZXNbMF07CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTXVs
dGlSZW5kZXJUYXJnZXQucHJvdG90eXBlLCAic2FtcGxlcyIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIERlZmluZSB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdXNlZCBpZiBNU0FBIGlzIGVuYWJs
ZWQuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9zYW1wbGVzOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3NhbXBsZXMgPT09IHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
c2FtcGxlcyA9IHRoaXMuX2VuZ2luZS51cGRhdGVNdWx0aXBsZVJlbmRlclRhcmdldFRleHR1cmVT
YW1wbGVDb3VudCh0aGlzLl9pbnRlcm5hbFRleHR1cmVzLCB2YWx1ZSk7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8qKgorICAgICAqIFJlc2l6ZSBhbGwgdGhlIHRleHR1cmVzIGluIHRoZSBtdWx0
aSByZW5kZXIgdGFyZ2V0LgorICAgICAqIEJlIGNhcnJlZnVsbCBhcyBpdCB3aWxsIHJlY3JlYXRl
IGFsbCB0aGUgZGF0YSBpbiB0aGUgbmV3IHRleHR1cmUuCisgICAgICogQHBhcmFtIHNpemUgRGVm
aW5lIHRoZSBuZXcgc2l6ZQorICAgICAqLworICAgIE11bHRpUmVuZGVyVGFyZ2V0LnByb3RvdHlw
ZS5yZXNpemUgPSBmdW5jdGlvbiAoc2l6ZSkgeworICAgICAgICB0aGlzLnJlbGVhc2VJbnRlcm5h
bFRleHR1cmVzKCk7CisgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dHVyZXMgPSB0aGlzLl9lbmdp
bmUuY3JlYXRlTXVsdGlwbGVSZW5kZXJUYXJnZXQoc2l6ZSwgdGhpcy5fbXVsdGlSZW5kZXJUYXJn
ZXRPcHRpb25zKTsKKyAgICAgICAgdGhpcy5fY3JlYXRlSW50ZXJuYWxUZXh0dXJlcygpOworICAg
IH07CisgICAgTXVsdGlSZW5kZXJUYXJnZXQucHJvdG90eXBlLnVuYmluZEZyYW1lQnVmZmVyID0g
ZnVuY3Rpb24gKGVuZ2luZSwgZmFjZUluZGV4KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGVuZ2luZS51bkJpbmRNdWx0aUNvbG9yQXR0YWNobWVudEZyYW1lYnVmZmVyKHRo
aXMuX2ludGVybmFsVGV4dHVyZXMsIHRoaXMuaXNDdWJlLCBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICBfdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoZmFjZUlu
ZGV4KTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlIHRoZSBy
ZW5kZXIgdGFyZ2V0cyBhbmQgdGhlaXIgYXNzb2NpYXRlZCByZXNvdXJjZXMKKyAgICAgKi8KKyAg
ICBNdWx0aVJlbmRlclRhcmdldC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5yZWxlYXNlSW50ZXJuYWxUZXh0dXJlcygpOworICAgICAgICBfc3VwZXIucHJv
dG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbGVh
c2UgYWxsIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgdXNlZCBhcyBkcmF3IGJ1ZmZlcnMuCisgICAg
ICovCisgICAgTXVsdGlSZW5kZXJUYXJnZXQucHJvdG90eXBlLnJlbGVhc2VJbnRlcm5hbFRleHR1
cmVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX2ludGVybmFsVGV4dHVyZXMp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0g
dGhpcy5faW50ZXJuYWxUZXh0dXJlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX2ludGVybmFsVGV4dHVyZXNbaV0gIT09IHVuZGVmaW5lZCkgeworICAg
ICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dHVyZXNbaV0uZGlzcG9zZSgpOworICAgICAg
ICAgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dHVyZXMuc3BsaWNlKGksIDEpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gTXVsdGlSZW5kZXJUYXJnZXQ7Cit9
KF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJSZW5kZXJUYXJnZXRUZXh0dXJlIl0pKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmF3Q3ViZVRleHR1cmUudHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWF0ZXJpYWxzL1RleHR1cmVzL3Jhd0N1YmVUZXh0dXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogUmF3Q3ViZVRleHR1cmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
UmF3Q3ViZVRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJhd0N1YmVUZXh0dXJlOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90
c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZW52aXJvbm1lbnRUZXh0dXJlVG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01pc2MvZW52aXJvbm1lbnRUZXh0dXJlVG9vbHMgKi8gIi4vTWlzYy9lbnZpcm9ubWVudFRleHR1
cmVUb29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pbnRlcm5hbFRleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
aW50ZXJuYWxUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9pbnRlcm5hbFRleHR1cmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY3ViZVRleHR1cmUg
Ki8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2N1YmVUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAi
Li9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX0V4dGVuc2lvbnNfZW5naW5lX3Jhd1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvRXh0ZW5zaW9ucy9l
bmdpbmUucmF3VGV4dHVyZSAqLyAiLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLnJhd1RleHR1
cmUudHMiKTsKKworCisKKworCisKKworLyoqCisgKiBSYXcgY3ViZSB0ZXh0dXJlIHdoZXJlIHRo
ZSByYXcgYnVmZmVycyBhcmUgcGFzc2VkIGluCisgKi8KK3ZhciBSYXdDdWJlVGV4dHVyZSA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShSYXdDdWJlVGV4dHVyZSwgX3N1cGVyKTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgY3ViZSB0ZXh0dXJlIHdoZXJlIHRoZSByYXcgYnVmZmVy
cyBhcmUgcGFzc2VkIGluLgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0
aGUgdGV4dHVyZSBpcyBhdHRhY2hlZCB0bworICAgICAqIEBwYXJhbSBkYXRhIGRlZmluZXMgdGhl
IGFycmF5IG9mIGRhdGEgdG8gdXNlIHRvIGNyZWF0ZSBlYWNoIGZhY2UKKyAgICAgKiBAcGFyYW0g
c2l6ZSBkZWZpbmVzIHRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlcworICAgICAqIEBwYXJhbSBmb3Jt
YXQgZGVmaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhCisgICAgICogQHBhcmFtIHR5cGUgZGVm
aW5lcyB0aGUgdHlwZSBvZiB0aGUgZGF0YSAobGlrZSBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdO
RURfSU5UKQorICAgICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMgIGRlZmluZXMgaWYgdGhlIGVu
Z2luZSBzaG91bGQgZ2VuZXJhdGUgdGhlIG1pcCBsZXZlbHMKKyAgICAgKiBAcGFyYW0gaW52ZXJ0
WSBkZWZpbmVzIGlmIGRhdGEgbXVzdCBiZSBzdG9yZWQgd2l0aCBZIGF4aXMgaW52ZXJ0ZWQKKyAg
ICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZXMgdGhlIHJlcXVpcmVkIHNhbXBsaW5nIG1v
ZGUgKGxpa2UgVGV4dHVyZS5ORUFSRVNUX1NBTVBMSU5HTU9ERSkKKyAgICAgKiBAcGFyYW0gY29t
cHJlc3Npb24gZGVmaW5lcyB0aGUgY29tcHJlc3Npb24gdXNlZCAobnVsbCBieSBkZWZhdWx0KQor
ICAgICAqLworICAgIGZ1bmN0aW9uIFJhd0N1YmVUZXh0dXJlKHNjZW5lLCBkYXRhLCBzaXplLCBm
b3JtYXQsIHR5cGUsIGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlLCBjb21w
cmVzc2lvbikgeworICAgICAgICBpZiAoZm9ybWF0ID09PSB2b2lkIDApIHsgZm9ybWF0ID0gX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJd
LlRFWFRVUkVGT1JNQVRfUkdCQTsgfQorICAgICAgICBpZiAodHlwZSA9PT0gdm9pZCAwKSB7IHR5
cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAgIGlmIChnZW5lcmF0
ZU1pcE1hcHMgPT09IHZvaWQgMCkgeyBnZW5lcmF0ZU1pcE1hcHMgPSBmYWxzZTsgfQorICAgICAg
ICBpZiAoaW52ZXJ0WSA9PT0gdm9pZCAwKSB7IGludmVydFkgPSBmYWxzZTsgfQorICAgICAgICBp
ZiAoc2FtcGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVf
VFJJTElORUFSX1NBTVBMSU5HTU9ERTsgfQorICAgICAgICBpZiAoY29tcHJlc3Npb24gPT09IHZv
aWQgMCkgeyBjb21wcmVzc2lvbiA9IG51bGw7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgIiIsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fdGV4dHVyZSA9
IHNjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZVJhd0N1YmVUZXh0dXJlKGRhdGEsIHNpemUsIGZvcm1h
dCwgdHlwZSwgZ2VuZXJhdGVNaXBNYXBzLCBpbnZlcnRZLCBzYW1wbGluZ01vZGUsIGNvbXByZXNz
aW9uKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBVcGRh
dGVzIHRoZSByYXcgY3ViZSB0ZXh0dXJlLgorICAgICAqIEBwYXJhbSBkYXRhIGRlZmluZXMgdGhl
IGRhdGEgdG8gc3RvcmUKKyAgICAgKiBAcGFyYW0gZm9ybWF0IGRlZmluZXMgdGhlIGRhdGEgZm9y
bWF0CisgICAgICogQHBhcmFtIHR5cGUgZGVmaW5lcyB0aGUgdHlwZSBmbyB0aGUgZGF0YSAoRW5n
aW5lLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBp
bnZlcnRZIGRlZmluZXMgaWYgZGF0YSBtdXN0IGJlIHN0b3JlZCB3aXRoIFkgYXhpcyBpbnZlcnRl
ZAorICAgICAqIEBwYXJhbSBjb21wcmVzc2lvbiBkZWZpbmVzIHRoZSBjb21wcmVzc2lvbiB1c2Vk
IChudWxsIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGxldmVsIGRlZmluZXMgd2hpY2ggbGV2
ZWwgb2YgdGhlIHRleHR1cmUgdG8gdXBkYXRlCisgICAgICovCisgICAgUmF3Q3ViZVRleHR1cmUu
cHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBmb3JtYXQsIHR5cGUsIGludmVydFks
IGNvbXByZXNzaW9uKSB7CisgICAgICAgIGlmIChjb21wcmVzc2lvbiA9PT0gdm9pZCAwKSB7IGNv
bXByZXNzaW9uID0gbnVsbDsgfQorICAgICAgICB0aGlzLl90ZXh0dXJlLmdldEVuZ2luZSgpLnVw
ZGF0ZVJhd0N1YmVUZXh0dXJlKHRoaXMuX3RleHR1cmUsIGRhdGEsIGZvcm1hdCwgdHlwZSwgaW52
ZXJ0WSwgY29tcHJlc3Npb24pOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyBhIHJh
dyBjdWJlIHRleHR1cmUgd2l0aCBSR0JEIGVuY29kZWQgZGF0YS4KKyAgICAgKiBAcGFyYW0gZGF0
YSBkZWZpbmVzIHRoZSBhcnJheSBvZiBkYXRhIFttaXBtYXBdW2ZhY2VdIHRvIHVzZSB0byBjcmVh
dGUgZWFjaCBmYWNlCisgICAgICogQHBhcmFtIHNwaGVyaWNhbFBvbHlub21pYWwgZGVmaW5lcyB0
aGUgc3BoZXJpY2FsIHBvbHlub21pYWwgZm9yIGlycmFkaWFuY2UKKyAgICAgKiBAcGFyYW0gbG9k
U2NhbGUgZGVmaW5lcyB0aGUgc2NhbGUgYXBwbGllZCB0byBlbnZpcm9ubWVudCB0ZXh0dXJlLiBU
aGlzIG1hbmFnZXMgdGhlIHJhbmdlIG9mIExPRCBsZXZlbCB1c2VkIGZvciBJQkwgYWNjb3JkaW5n
IHRvIHRoZSByb3VnaG5lc3MKKyAgICAgKiBAcGFyYW0gbG9kT2Zmc2V0IGRlZmluZXMgdGhlIG9m
ZnNldCBhcHBsaWVkIHRvIGVudmlyb25tZW50IHRleHR1cmUuIFRoaXMgbWFuYWdlcyBmaXJzdCBM
T0QgbGV2ZWwgdXNlZCBmb3IgSUJMIGFjY29yZGluZyB0byB0aGUgcm91Z2huZXNzCisgICAgICog
QHJldHVybnMgYSBwcm9tc2llIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNv
bXBsZXRlCisgICAgICovCisgICAgUmF3Q3ViZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVJHQkRB
c3luYyA9IGZ1bmN0aW9uIChkYXRhLCBzcGhlcmljYWxQb2x5bm9taWFsLCBsb2RTY2FsZSwgbG9k
T2Zmc2V0KSB7CisgICAgICAgIGlmIChzcGhlcmljYWxQb2x5bm9taWFsID09PSB2b2lkIDApIHsg
c3BoZXJpY2FsUG9seW5vbWlhbCA9IG51bGw7IH0KKyAgICAgICAgaWYgKGxvZFNjYWxlID09PSB2
b2lkIDApIHsgbG9kU2NhbGUgPSAwLjg7IH0KKyAgICAgICAgaWYgKGxvZE9mZnNldCA9PT0gdm9p
ZCAwKSB7IGxvZE9mZnNldCA9IDA7IH0KKyAgICAgICAgcmV0dXJuIFJhd0N1YmVUZXh0dXJlLl9V
cGRhdGVSR0JEQXN5bmModGhpcy5fdGV4dHVyZSwgZGF0YSwgc3BoZXJpY2FsUG9seW5vbWlhbCwg
bG9kU2NhbGUsIGxvZE9mZnNldCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhl
IHJhdyBjdWJlIHRleHR1cmUuCisgICAgICogQHJldHVybiBhIG5ldyBjdWJlIHRleHR1cmUKKyAg
ICAgKi8KKyAgICBSYXdDdWJlVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHJldHVybiBfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5D
bG9uZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgc2NlbmUgPSBfdGhpcy5nZXRTY2Vu
ZSgpOworICAgICAgICAgICAgdmFyIGludGVybmFsVGV4dHVyZSA9IF90aGlzLl90ZXh0dXJlOwor
ICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgUmF3Q3ViZVRleHR1cmUoc2NlbmUsIGludGVy
bmFsVGV4dHVyZS5fYnVmZmVyVmlld0FycmF5LCBpbnRlcm5hbFRleHR1cmUud2lkdGgsIGludGVy
bmFsVGV4dHVyZS5mb3JtYXQsIGludGVybmFsVGV4dHVyZS50eXBlLCBpbnRlcm5hbFRleHR1cmUu
Z2VuZXJhdGVNaXBNYXBzLCBpbnRlcm5hbFRleHR1cmUuaW52ZXJ0WSwgaW50ZXJuYWxUZXh0dXJl
LnNhbXBsaW5nTW9kZSwgaW50ZXJuYWxUZXh0dXJlLl9jb21wcmVzc2lvbik7CisgICAgICAgICAg
ICBpZiAoaW50ZXJuYWxUZXh0dXJlLmRhdGFTb3VyY2UgPT09IF9pbnRlcm5hbFRleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9D
VUJFUkFXX1JHQkQpIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLnVwZGF0ZVJHQkRBc3luYyhp
bnRlcm5hbFRleHR1cmUuX2J1ZmZlclZpZXdBcnJheUFycmF5LCBpbnRlcm5hbFRleHR1cmUuX3Nw
aGVyaWNhbFBvbHlub21pYWwsIGludGVybmFsVGV4dHVyZS5fbG9kR2VuZXJhdGlvblNjYWxlLCBp
bnRlcm5hbFRleHR1cmUuX2xvZEdlbmVyYXRpb25PZmZzZXQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgICAgIH0sIHRoaXMpOworICAgIH07CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBSYXdDdWJlVGV4dHVyZS5fVXBkYXRlUkdCREFzeW5jID0gZnVu
Y3Rpb24gKGludGVybmFsVGV4dHVyZSwgZGF0YSwgc3BoZXJpY2FsUG9seW5vbWlhbCwgbG9kU2Nh
bGUsIGxvZE9mZnNldCkgeworICAgICAgICBpbnRlcm5hbFRleHR1cmUuX2RhdGFTb3VyY2UgPSBf
aW50ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkludGVybmFsVGV4
dHVyZSJdLkRBVEFTT1VSQ0VfQ1VCRVJBV19SR0JEOworICAgICAgICBpbnRlcm5hbFRleHR1cmUu
X2J1ZmZlclZpZXdBcnJheUFycmF5ID0gZGF0YTsKKyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLl9s
b2RHZW5lcmF0aW9uU2NhbGUgPSBsb2RTY2FsZTsKKyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLl9s
b2RHZW5lcmF0aW9uT2Zmc2V0ID0gbG9kT2Zmc2V0OworICAgICAgICBpbnRlcm5hbFRleHR1cmUu
X3NwaGVyaWNhbFBvbHlub21pYWwgPSBzcGhlcmljYWxQb2x5bm9taWFsOworICAgICAgICByZXR1
cm4gX01pc2NfZW52aXJvbm1lbnRUZXh0dXJlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMiXS5VcGxvYWRMZXZlbHNBc3luYyhpbnRlcm5h
bFRleHR1cmUsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaW50ZXJuYWxU
ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAgICAgICB9KTsKKyAgICB9OworICAgIHJldHVybiBS
YXdDdWJlVGV4dHVyZTsKK30oX2N1YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIkN1YmVUZXh0dXJlIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlh
bHMvVGV4dHVyZXMvcmF3VGV4dHVyZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy9yYXdUZXh0
dXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBSYXdUZXh0dXJlICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlJhd1RleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJhd1Rl
eHR1cmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9k
ZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF90ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMv
Y29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0VuZ2luZXNfRXh0ZW5zaW9uc19lbmdpbmVfcmF3VGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5l
cy9FeHRlbnNpb25zL2VuZ2luZS5yYXdUZXh0dXJlICovICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9l
bmdpbmUucmF3VGV4dHVyZS50cyIpOworCisKKworCisvKioKKyAqIFJhdyB0ZXh0dXJlIGNhbiBo
ZWxwIGNyZWF0aW5nIGEgdGV4dHVyZSBkaXJlY3RseSBmcm9tIGFuIGFycmF5IG9mIGRhdGEuCisg
KiBUaGlzIGNhbiBiZSBzdXBlciB1c2VmdWwgaWYgeW91IGVpdGhlciBnZXQgdGhlIGRhdGEgZnJv
bSBhbiB1bmNvbXByZXNzZWQgc291cmNlIG9yCisgKiBpZiB5b3Ugd2lzaCB0byBjcmVhdGUgeW91
ciB0ZXh0dXJlIHBpeGVsIGJ5IHBpeGVsLgorICovCit2YXIgUmF3VGV4dHVyZSA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2V4dGVuZHMiXShSYXdUZXh0dXJlLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIEluc3RhbnRpYXRlcyBhIG5ldyBSYXdUZXh0dXJlLgorICAgICAqIFJhdyB0ZXh0dXJlIGNh
biBoZWxwIGNyZWF0aW5nIGEgdGV4dHVyZSBkaXJlY3RseSBmcm9tIGFuIGFycmF5IG9mIGRhdGEu
CisgICAgICogVGhpcyBjYW4gYmUgc3VwZXIgdXNlZnVsIGlmIHlvdSBlaXRoZXIgZ2V0IHRoZSBk
YXRhIGZyb20gYW4gdW5jb21wcmVzc2VkIHNvdXJjZSBvcgorICAgICAqIGlmIHlvdSB3aXNoIHRv
IGNyZWF0ZSB5b3VyIHRleHR1cmUgcGl4ZWwgYnkgcGl4ZWwuCisgICAgICogQHBhcmFtIGRhdGEg
ZGVmaW5lIHRoZSBhcnJheSBvZiBkYXRhIHRvIHVzZSB0byBjcmVhdGUgdGhlIHRleHR1cmUKKyAg
ICAgKiBAcGFyYW0gd2lkdGggZGVmaW5lIHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZQorICAgICAq
IEBwYXJhbSBoZWlnaHQgZGVmaW5lIHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUKKyAgICAgKiBA
cGFyYW0gZm9ybWF0IGRlZmluZSB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhIChSR0IsIFJHQkEuLi4g
RW5naW5lLlRFWFRVUkVGT1JNQVRfeHh4KQorICAgICAqIEBwYXJhbSBzY2VuZSAgZGVmaW5lIHRo
ZSBzY2VuZSB0aGUgdGV4dHVyZSBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGdlbmVyYXRlTWlw
TWFwcyBkZWZpbmUgd2hldGhlciBtaXAgbWFwcyBzaG91bGQgYmUgZ2VuZXJhdGVkIG9yIG5vdAor
ICAgICAqIEBwYXJhbSBpbnZlcnRZIGRlZmluZSBpZiB0aGUgZGF0YSBzaG91bGQgYmUgZmxpcHBl
ZCBvbiBZIHdoZW4gdXBsb2FkZWQgdG8gdGhlIEdQVQorICAgICAqIEBwYXJhbSBzYW1wbGluZ01v
ZGUgZGVmaW5lIHRoZSB0ZXh0dXJlIHNhbXBsaW5nIG1vZGUgKFRleHR1cmUueHh4X1NBTVBMSU5H
TU9ERSkKKyAgICAgKiBAcGFyYW0gdHlwZSBkZWZpbmUgdGhlIGZvcm1hdCBvZiB0aGUgZGF0YSAo
aW50LCBmbG9hdC4uLiBFbmdpbmUuVEVYVFVSRVRZUEVfeHh4KQorICAgICAqLworICAgIGZ1bmN0
aW9uIFJhd1RleHR1cmUoZGF0YSwgd2lkdGgsIGhlaWdodCwgCisgICAgLyoqCisgICAgICogRGVm
aW5lIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgKFJHQiwgUkdCQS4uLiBFbmdpbmUuVEVYVFVSRUZP
Uk1BVF94eHgpCisgICAgICovCisgICAgZm9ybWF0LCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzLCBp
bnZlcnRZLCBzYW1wbGluZ01vZGUsIHR5cGUpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRlTWlwTWFw
cyA9PT0gdm9pZCAwKSB7IGdlbmVyYXRlTWlwTWFwcyA9IHRydWU7IH0KKyAgICAgICAgaWYgKGlu
dmVydFkgPT09IHZvaWQgMCkgeyBpbnZlcnRZID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHNhbXBs
aW5nTW9kZSA9PT0gdm9pZCAwKSB7IHNhbXBsaW5nTW9kZSA9IF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFX1RSSUxJTkVB
Ul9TQU1QTElOR01PREU7IH0KKyAgICAgICAgaWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0eXBlID0g
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50
cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3Vw
ZXIuY2FsbCh0aGlzLCBudWxsLCBzY2VuZSwgIWdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSkgfHwg
dGhpczsKKyAgICAgICAgX3RoaXMuZm9ybWF0ID0gZm9ybWF0OworICAgICAgICBfdGhpcy5fZW5n
aW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIF90aGlzLl90ZXh0dXJlID0gc2NlbmUu
Z2V0RW5naW5lKCkuY3JlYXRlUmF3VGV4dHVyZShkYXRhLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlLCBudWxsLCB0eXBlKTsKKyAg
ICAgICAgX3RoaXMud3JhcFUgPSBfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgIF90aGlzLndyYXBWID0gX3Rl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJF
U1NNT0RFOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIFVw
ZGF0ZXMgdGhlIHRleHR1cmUgdW5kZXJseWluZyBkYXRhLgorICAgICAqIEBwYXJhbSBkYXRhIERl
ZmluZSB0aGUgbmV3IGRhdGEgb2YgdGhlIHRleHR1cmUKKyAgICAgKi8KKyAgICBSYXdUZXh0dXJl
LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB0aGlzLl9lbmdp
bmUudXBkYXRlUmF3VGV4dHVyZSh0aGlzLl90ZXh0dXJlLCBkYXRhLCB0aGlzLl90ZXh0dXJlLmZv
cm1hdCwgdGhpcy5fdGV4dHVyZS5pbnZlcnRZLCBudWxsLCB0aGlzLl90ZXh0dXJlLnR5cGUpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGx1bWluYW5jZSB0ZXh0dXJlIGZyb20g
c29tZSBkYXRhLgorICAgICAqIEBwYXJhbSBkYXRhIERlZmluZSB0aGUgdGV4dHVyZSBkYXRhCisg
ICAgICogQHBhcmFtIHdpZHRoIERlZmluZSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUKKyAgICAg
KiBAcGFyYW0gaGVpZ2h0IERlZmluZSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlCisgICAgICog
QHBhcmFtIHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIHRleHR1cmUgYmVsb25ncyB0bworICAg
ICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMgRGVmaW5lIHdoZXRoZXIgb3Igbm90IHRvIGNyZWF0
ZSBtaXAgbWFwcyBmb3IgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmUg
aWYgdGhlIGRhdGEgc2hvdWxkIGJlIGZsaXBwZWQgb24gWSB3aGVuIHVwbG9hZGVkIHRvIHRoZSBH
UFUKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZSB0aGUgdGV4dHVyZSBzYW1wbGlu
ZyBtb2RlIChUZXh0dXJlLnh4eF9TQU1QTElOR01PREUpCisgICAgICogQHJldHVybnMgdGhlIGx1
bWluYW5jZSB0ZXh0dXJlCisgICAgICovCisgICAgUmF3VGV4dHVyZS5DcmVhdGVMdW1pbmFuY2VU
ZXh0dXJlID0gZnVuY3Rpb24gKGRhdGEsIHdpZHRoLCBoZWlnaHQsIHNjZW5lLCBnZW5lcmF0ZU1p
cE1hcHMsIGludmVydFksIHNhbXBsaW5nTW9kZSkgeworICAgICAgICBpZiAoZ2VuZXJhdGVNaXBN
YXBzID09PSB2b2lkIDApIHsgZ2VuZXJhdGVNaXBNYXBzID0gdHJ1ZTsgfQorICAgICAgICBpZiAo
aW52ZXJ0WSA9PT0gdm9pZCAwKSB7IGludmVydFkgPSBmYWxzZTsgfQorICAgICAgICBpZiAoc2Ft
cGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLlRFWFRVUkVfVFJJTElO
RUFSX1NBTVBMSU5HTU9ERTsgfQorICAgICAgICByZXR1cm4gbmV3IFJhd1RleHR1cmUoZGF0YSwg
d2lkdGgsIGhlaWdodCwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfTFVNSU5BTkNFLCBzY2VuZSwgZ2VuZXJh
dGVNaXBNYXBzLCBpbnZlcnRZLCBzYW1wbGluZ01vZGUpOworICAgIH07CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIGx1bWluYW5jZSBhbHBoYSB0ZXh0dXJlIGZyb20gc29tZSBkYXRhLgorICAg
ICAqIEBwYXJhbSBkYXRhIERlZmluZSB0aGUgdGV4dHVyZSBkYXRhCisgICAgICogQHBhcmFtIHdp
ZHRoIERlZmluZSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gaGVpZ2h0
IERlZmluZSB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIHNjZW5lIERl
ZmluZSB0aGUgc2NlbmUgdGhlIHRleHR1cmUgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBnZW5l
cmF0ZU1pcE1hcHMgRGVmaW5lIHdoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSBtaXAgbWFwcyBmb3Ig
dGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmUgaWYgdGhlIGRhdGEgc2hv
dWxkIGJlIGZsaXBwZWQgb24gWSB3aGVuIHVwbG9hZGVkIHRvIHRoZSBHUFUKKyAgICAgKiBAcGFy
YW0gc2FtcGxpbmdNb2RlIGRlZmluZSB0aGUgdGV4dHVyZSBzYW1wbGluZyBtb2RlIChUZXh0dXJl
Lnh4eF9TQU1QTElOR01PREUpCisgICAgICogQHJldHVybnMgdGhlIGx1bWluYW5jZSBhbHBoYSB0
ZXh0dXJlCisgICAgICovCisgICAgUmF3VGV4dHVyZS5DcmVhdGVMdW1pbmFuY2VBbHBoYVRleHR1
cmUgPSBmdW5jdGlvbiAoZGF0YSwgd2lkdGgsIGhlaWdodCwgc2NlbmUsIGdlbmVyYXRlTWlwTWFw
cywgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlKSB7CisgICAgICAgIGlmIChnZW5lcmF0ZU1pcE1hcHMg
PT09IHZvaWQgMCkgeyBnZW5lcmF0ZU1pcE1hcHMgPSB0cnVlOyB9CisgICAgICAgIGlmIChpbnZl
cnRZID09PSB2b2lkIDApIHsgaW52ZXJ0WSA9IGZhbHNlOyB9CisgICAgICAgIGlmIChzYW1wbGlu
Z01vZGUgPT09IHZvaWQgMCkgeyBzYW1wbGluZ01vZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9UUklMSU5FQVJf
U0FNUExJTkdNT0RFOyB9CisgICAgICAgIHJldHVybiBuZXcgUmF3VGV4dHVyZShkYXRhLCB3aWR0
aCwgaGVpZ2h0LCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9MVU1JTkFOQ0VfQUxQSEEsIHNjZW5lLCBnZW5l
cmF0ZU1pcE1hcHMsIGludmVydFksIHNhbXBsaW5nTW9kZSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGFuIGFscGhhIHRleHR1cmUgZnJvbSBzb21lIGRhdGEuCisgICAgICogQHBh
cmFtIGRhdGEgRGVmaW5lIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAgKiBAcGFyYW0gd2lkdGggRGVm
aW5lIHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSBoZWlnaHQgRGVmaW5l
IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRo
ZSBzY2VuZSB0aGUgdGV4dHVyZSBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGdlbmVyYXRlTWlw
TWFwcyBEZWZpbmUgd2hldGhlciBvciBub3QgdG8gY3JlYXRlIG1pcCBtYXBzIGZvciB0aGUgdGV4
dHVyZQorICAgICAqIEBwYXJhbSBpbnZlcnRZIGRlZmluZSBpZiB0aGUgZGF0YSBzaG91bGQgYmUg
ZmxpcHBlZCBvbiBZIHdoZW4gdXBsb2FkZWQgdG8gdGhlIEdQVQorICAgICAqIEBwYXJhbSBzYW1w
bGluZ01vZGUgZGVmaW5lIHRoZSB0ZXh0dXJlIHNhbXBsaW5nIG1vZGUgKFRleHR1cmUueHh4X1NB
TVBMSU5HTU9ERSkKKyAgICAgKiBAcmV0dXJucyB0aGUgYWxwaGEgdGV4dHVyZQorICAgICAqLwor
ICAgIFJhd1RleHR1cmUuQ3JlYXRlQWxwaGFUZXh0dXJlID0gZnVuY3Rpb24gKGRhdGEsIHdpZHRo
LCBoZWlnaHQsIHNjZW5lLCBnZW5lcmF0ZU1pcE1hcHMsIGludmVydFksIHNhbXBsaW5nTW9kZSkg
eworICAgICAgICBpZiAoZ2VuZXJhdGVNaXBNYXBzID09PSB2b2lkIDApIHsgZ2VuZXJhdGVNaXBN
YXBzID0gdHJ1ZTsgfQorICAgICAgICBpZiAoaW52ZXJ0WSA9PT0gdm9pZCAwKSB7IGludmVydFkg
PSBmYWxzZTsgfQorICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxp
bmdNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IkNvbnN0YW50cyJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERTsgfQorICAgICAgICBy
ZXR1cm4gbmV3IFJhd1RleHR1cmUoZGF0YSwgd2lkdGgsIGhlaWdodCwgX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JN
QVRfQUxQSEEsIHNjZW5lLCBnZW5lcmF0ZU1pcE1hcHMsIGludmVydFksIHNhbXBsaW5nTW9kZSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgUkdCIHRleHR1cmUgZnJvbSBzb21l
IGRhdGEuCisgICAgICogQHBhcmFtIGRhdGEgRGVmaW5lIHRoZSB0ZXh0dXJlIGRhdGEKKyAgICAg
KiBAcGFyYW0gd2lkdGggRGVmaW5lIHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBw
YXJhbSBoZWlnaHQgRGVmaW5lIHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFy
YW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBiZWxvbmdzIHRvCisgICAgICog
QHBhcmFtIGdlbmVyYXRlTWlwTWFwcyBEZWZpbmUgd2hldGhlciBvciBub3QgdG8gY3JlYXRlIG1p
cCBtYXBzIGZvciB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSBpbnZlcnRZIGRlZmluZSBpZiB0
aGUgZGF0YSBzaG91bGQgYmUgZmxpcHBlZCBvbiBZIHdoZW4gdXBsb2FkZWQgdG8gdGhlIEdQVQor
ICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgZGVmaW5lIHRoZSB0ZXh0dXJlIHNhbXBsaW5nIG1v
ZGUgKFRleHR1cmUueHh4X1NBTVBMSU5HTU9ERSkKKyAgICAgKiBAcGFyYW0gdHlwZSBkZWZpbmUg
dGhlIGZvcm1hdCBvZiB0aGUgZGF0YSAoaW50LCBmbG9hdC4uLiBFbmdpbmUuVEVYVFVSRVRZUEVf
eHh4KQorICAgICAqIEByZXR1cm5zIHRoZSBSR0IgYWxwaGEgdGV4dHVyZQorICAgICAqLworICAg
IFJhd1RleHR1cmUuQ3JlYXRlUkdCVGV4dHVyZSA9IGZ1bmN0aW9uIChkYXRhLCB3aWR0aCwgaGVp
Z2h0LCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzLCBpbnZlcnRZLCBzYW1wbGluZ01vZGUsIHR5cGUp
IHsKKyAgICAgICAgaWYgKGdlbmVyYXRlTWlwTWFwcyA9PT0gdm9pZCAwKSB7IGdlbmVyYXRlTWlw
TWFwcyA9IHRydWU7IH0KKyAgICAgICAgaWYgKGludmVydFkgPT09IHZvaWQgMCkgeyBpbnZlcnRZ
ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHNhbXBsaW5nTW9kZSA9PT0gdm9pZCAwKSB7IHNhbXBs
aW5nTW9kZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJDb25zdGFudHMiXS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01PREU7IH0KKyAgICAgICAg
aWYgKHR5cGUgPT09IHZvaWQgMCkgeyB0eXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lO
VDsgfQorICAgICAgICByZXR1cm4gbmV3IFJhd1RleHR1cmUoZGF0YSwgd2lkdGgsIGhlaWdodCwg
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50
cyJdLlRFWFRVUkVGT1JNQVRfUkdCLCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzLCBpbnZlcnRZLCBz
YW1wbGluZ01vZGUsIHR5cGUpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIFJH
QkEgdGV4dHVyZSBmcm9tIHNvbWUgZGF0YS4KKyAgICAgKiBAcGFyYW0gZGF0YSBEZWZpbmUgdGhl
IHRleHR1cmUgZGF0YQorICAgICAqIEBwYXJhbSB3aWR0aCBEZWZpbmUgdGhlIHdpZHRoIG9mIHRo
ZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGhlaWdodCBEZWZpbmUgdGhlIGhlaWdodCBvZiB0aGUg
dGV4dHVyZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSB0ZXh0dXJl
IGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVNaXBNYXBzIERlZmluZSB3aGV0aGVy
IG9yIG5vdCB0byBjcmVhdGUgbWlwIG1hcHMgZm9yIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFt
IGludmVydFkgZGVmaW5lIGlmIHRoZSBkYXRhIHNob3VsZCBiZSBmbGlwcGVkIG9uIFkgd2hlbiB1
cGxvYWRlZCB0byB0aGUgR1BVCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBkZWZpbmUgdGhl
IHRleHR1cmUgc2FtcGxpbmcgbW9kZSAoVGV4dHVyZS54eHhfU0FNUExJTkdNT0RFKQorICAgICAq
IEBwYXJhbSB0eXBlIGRlZmluZSB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhIChpbnQsIGZsb2F0Li4u
IEVuZ2luZS5URVhUVVJFVFlQRV94eHgpCisgICAgICogQHJldHVybnMgdGhlIFJHQkEgdGV4dHVy
ZQorICAgICAqLworICAgIFJhd1RleHR1cmUuQ3JlYXRlUkdCQVRleHR1cmUgPSBmdW5jdGlvbiAo
ZGF0YSwgd2lkdGgsIGhlaWdodCwgc2NlbmUsIGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2Ft
cGxpbmdNb2RlLCB0eXBlKSB7CisgICAgICAgIGlmIChnZW5lcmF0ZU1pcE1hcHMgPT09IHZvaWQg
MCkgeyBnZW5lcmF0ZU1pcE1hcHMgPSB0cnVlOyB9CisgICAgICAgIGlmIChpbnZlcnRZID09PSB2
b2lkIDApIHsgaW52ZXJ0WSA9IGZhbHNlOyB9CisgICAgICAgIGlmIChzYW1wbGluZ01vZGUgPT09
IHZvaWQgMCkgeyBzYW1wbGluZ01vZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9UUklMSU5FQVJfU0FNUExJTkdN
T0RFOyB9CisgICAgICAgIGlmICh0eXBlID09PSB2b2lkIDApIHsgdHlwZSA9IF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJF
VFlQRV9VTlNJR05FRF9JTlQ7IH0KKyAgICAgICAgcmV0dXJuIG5ldyBSYXdUZXh0dXJlKGRhdGEs
IHdpZHRoLCBoZWlnaHQsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFRk9STUFUX1JHQkEsIHNjZW5lLCBnZW5lcmF0ZU1p
cE1hcHMsIGludmVydFksIHNhbXBsaW5nTW9kZSwgdHlwZSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgUiB0ZXh0dXJlIGZyb20gc29tZSBkYXRhLgorICAgICAqIEBwYXJhbSBk
YXRhIERlZmluZSB0aGUgdGV4dHVyZSBkYXRhCisgICAgICogQHBhcmFtIHdpZHRoIERlZmluZSB0
aGUgd2lkdGggb2YgdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gaGVpZ2h0IERlZmluZSB0aGUg
aGVpZ2h0IG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZSB0aGUgc2Nl
bmUgdGhlIHRleHR1cmUgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMg
RGVmaW5lIHdoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSBtaXAgbWFwcyBmb3IgdGhlIHRleHR1cmUK
KyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmUgaWYgdGhlIGRhdGEgc2hvdWxkIGJlIGZsaXBw
ZWQgb24gWSB3aGVuIHVwbG9hZGVkIHRvIHRoZSBHUFUKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdN
b2RlIGRlZmluZSB0aGUgdGV4dHVyZSBzYW1wbGluZyBtb2RlIChUZXh0dXJlLnh4eF9TQU1QTElO
R01PREUpCisgICAgICogQHBhcmFtIHR5cGUgZGVmaW5lIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEg
KGludCwgZmxvYXQuLi4gRW5naW5lLlRFWFRVUkVUWVBFX3h4eCkKKyAgICAgKiBAcmV0dXJucyB0
aGUgUiB0ZXh0dXJlCisgICAgICovCisgICAgUmF3VGV4dHVyZS5DcmVhdGVSVGV4dHVyZSA9IGZ1
bmN0aW9uIChkYXRhLCB3aWR0aCwgaGVpZ2h0LCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzLCBpbnZl
cnRZLCBzYW1wbGluZ01vZGUsIHR5cGUpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRlTWlwTWFwcyA9
PT0gdm9pZCAwKSB7IGdlbmVyYXRlTWlwTWFwcyA9IHRydWU7IH0KKyAgICAgICAgaWYgKGludmVy
dFkgPT09IHZvaWQgMCkgeyBpbnZlcnRZID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHNhbXBsaW5n
TW9kZSA9PT0gdm9pZCAwKSB7IHNhbXBsaW5nTW9kZSA9IF90ZXh0dXJlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAg
ICAgIGlmICh0eXBlID09PSB2b2lkIDApIHsgdHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9BVDsg
fQorICAgICAgICByZXR1cm4gbmV3IFJhd1RleHR1cmUoZGF0YSwgd2lkdGgsIGhlaWdodCwgX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJd
LlRFWFRVUkVGT1JNQVRfUiwgc2NlbmUsIGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2FtcGxp
bmdNb2RlLCB0eXBlKTsKKyAgICB9OworICAgIHJldHVybiBSYXdUZXh0dXJlOworfShfdGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0pKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmF3VGV4dHVyZTNELnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NYXRlcmlhbHMvVGV4dHVyZXMvcmF3VGV4dHVyZTNELnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IFJhd1RleHR1cmUzRCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSYXdU
ZXh0dXJlM0QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJhd1RleHR1cmUzRDsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNs
aWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGV4dHVyZSAq
LyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5n
aW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19F
eHRlbnNpb25zX2VuZ2luZV9yYXdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5l
LnJhd1RleHR1cmUgKi8gIi4vRW5naW5lcy9FeHRlbnNpb25zL2VuZ2luZS5yYXdUZXh0dXJlLnRz
Iik7CisKKworCisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBzdG9yZSAzRCB0ZXh0dXJlcyBjb250
YWluaW5nIHVzZXIgZGF0YQorICovCit2YXIgUmF3VGV4dHVyZTNEID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZXh0ZW5kcyJdKFJhd1RleHR1cmUzRCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGUgYSBuZXcgUmF3VGV4dHVyZTNECisgICAgICogQHBhcmFtIGRhdGEgZGVmaW5lcyB0aGUg
ZGF0YSBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSB3aWR0aCBkZWZpbmVzIHRoZSB3aWR0
aCBvZiB0aGUgdGV4dHVyZQorICAgICAqIEBwYXJhbSBoZWlnaHQgZGVmaW5lcyB0aGUgaGVpZ2h0
IG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGRlcHRoIGRlZmluZXMgdGhlIGRlcHRoIG9m
IHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGZvcm1hdCBkZWZpbmVzIHRoZSB0ZXh0dXJlIGZv
cm1hdCB0byB1c2UKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2Vu
ZQorICAgICAqIEBwYXJhbSBnZW5lcmF0ZU1pcE1hcHMgZGVmaW5lcyBhIGJvb2xlYW4gaW5kaWNh
dGluZyBpZiBtaXAgbGV2ZWxzIHNob3VsZCBiZSBnZW5lcmF0ZWQgKHRydWUgYnkgZGVmYXVsdCkK
KyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmVzIGlmIHRleHR1cmUgbXVzdCBiZSBzdG9yZWQg
d2l0aCBZIGF4aXMgaW52ZXJ0ZWQKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZXMg
dGhlIHNhbXBsaW5nIG1vZGUgdG8gdXNlIChUZXh0dXJlLlRSSUxJTkVBUl9TQU1QTElOR01PREUg
YnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gdGV4dHVyZVR5cGUgZGVmaW5lcyB0aGUgdGV4dHVy
ZSBUeXBlIChFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5ULCBFbmdpbmUuVEVYVFVSRVRZ
UEVfRkxPQVQuLi4pCisgICAgICovCisgICAgZnVuY3Rpb24gUmF3VGV4dHVyZTNEKGRhdGEsIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLCAKKyAgICAvKiogR2V0cyBvciBzZXRzIHRoZSB0ZXh0dXJlIGZv
cm1hdCB0byB1c2UgKi8KKyAgICBmb3JtYXQsIHNjZW5lLCBnZW5lcmF0ZU1pcE1hcHMsIGludmVy
dFksIHNhbXBsaW5nTW9kZSwgdGV4dHVyZVR5cGUpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRlTWlw
TWFwcyA9PT0gdm9pZCAwKSB7IGdlbmVyYXRlTWlwTWFwcyA9IHRydWU7IH0KKyAgICAgICAgaWYg
KGludmVydFkgPT09IHZvaWQgMCkgeyBpbnZlcnRZID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHNh
bXBsaW5nTW9kZSA9PT0gdm9pZCAwKSB7IHNhbXBsaW5nTW9kZSA9IF90ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9
CisgICAgICAgIGlmICh0ZXh0dXJlVHlwZSA9PT0gdm9pZCAwKSB7IHRleHR1cmVUeXBlID0gX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJd
LlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIu
Y2FsbCh0aGlzLCBudWxsLCBzY2VuZSwgIWdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSkgfHwgdGhp
czsKKyAgICAgICAgX3RoaXMuZm9ybWF0ID0gZm9ybWF0OworICAgICAgICBfdGhpcy5fZW5naW5l
ID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIF90aGlzLl90ZXh0dXJlID0gc2NlbmUuZ2V0
RW5naW5lKCkuY3JlYXRlUmF3VGV4dHVyZTNEKGRhdGEsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBm
b3JtYXQsIGdlbmVyYXRlTWlwTWFwcywgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlLCB1bmRlZmluZWQs
IHRleHR1cmVUeXBlKTsKKyAgICAgICAgX3RoaXMuaXMzRCA9IHRydWU7CisgICAgICAgIHJldHVy
biBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSB0ZXh0dXJlIHdpdGgg
bmV3IGRhdGEKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHRvIHN0b3JlIGlu
IHRoZSB0ZXh0dXJlCisgICAgICovCisgICAgUmF3VGV4dHVyZTNELnByb3RvdHlwZS51cGRhdGUg
PSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmUpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9lbmdpbmUudXBkYXRlUmF3
VGV4dHVyZTNEKHRoaXMuX3RleHR1cmUsIGRhdGEsIHRoaXMuX3RleHR1cmUuZm9ybWF0LCB0aGlz
Ll90ZXh0dXJlLmludmVydFksIG51bGwsIHRoaXMuX3RleHR1cmUudHlwZSk7CisgICAgfTsKKyAg
ICByZXR1cm4gUmF3VGV4dHVyZTNEOworfShfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJUZXh0dXJlIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlh
bHMvVGV4dHVyZXMvcmVmcmFjdGlvblRleHR1cmUudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL1Rl
eHR1cmVzL3JlZnJhY3Rpb25UZXh0dXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUmVm
cmFjdGlvblRleHR1cmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVm
cmFjdGlvblRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJlZnJhY3Rpb25UZXh0dXJlOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxl
cy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
bWF0aF9wbGFuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5wbGFuZSAqLyAiLi9NYXRocy9tYXRoLnBsYW5lLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJU
YXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZSAq
LyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyIpOworCisKKwor
LyoqCisgKiBDcmVhdGVzIGEgcmVmcmFjdGlvbiB0ZXh0dXJlIHVzZWQgYnkgcmVmcmFjdGlvbiBj
aGFubmVsIG9mIHRoZSBzdGFuZGFyZCBtYXRlcmlhbC4KKyAqIEl0IGlzIGxpa2UgYSBtaXJyb3Ig
YnV0IHRvIHNlZSB0aHJvdWdoIGEgbWF0ZXJpYWwuCisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vaG93X3RvL3JlZmxlY3QjcmVmcmFjdGlvbgorICovCit2YXIgUmVmcmFjdGlvblRl
eHR1cmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUmVmcmFjdGlvblRleHR1cmUs
IF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHJlZnJhY3Rpb24gdGV4dHVyZSB1
c2VkIGJ5IHJlZnJhY3Rpb24gY2hhbm5lbCBvZiB0aGUgc3RhbmRhcmQgbWF0ZXJpYWwuCisgICAg
ICogSXQgaXMgbGlrZSBhIG1pcnJvciBidXQgdG8gc2VlIHRocm91Z2ggYSBtYXRlcmlhbC4KKyAg
ICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3JlZmxlY3QjcmVmcmFj
dGlvbgorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgdGV4dHVyZSBuYW1lCisgICAgICog
QHBhcmFtIHNpemUgRGVmaW5lIHRoZSBzaXplIG9mIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgcmVmcmFjdGlvbiBiZWxvbmdz
IHRvCisgICAgICogQHBhcmFtIGdlbmVyYXRlTWlwTWFwcyBEZWZpbmUgaWYgd2UgbmVlZCB0byBn
ZW5lcmF0ZSBtaXBzIGxldmVsIGZvciB0aGUgcmVmcmFjdGlvbgorICAgICAqLworICAgIGZ1bmN0
aW9uIFJlZnJhY3Rpb25UZXh0dXJlKG5hbWUsIHNpemUsIHNjZW5lLCBnZW5lcmF0ZU1pcE1hcHMp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgc2l6ZSwgc2Nl
bmUsIGdlbmVyYXRlTWlwTWFwcywgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERlZmluZSB0aGUgcmVmbGVjdGlvbiBwbGFuZSB3ZSB3YW50IHRvIHVzZS4gVGhlIHJlZnJh
Y3Rpb25QbGFuZSBpcyB1c3VhbGx5IHNldCB0byB0aGUgY29uc3RydWN0ZWQgcmVmcmFjdG9yLgor
ICAgICAgICAgKiBJdCBpcyBwb3NzaWJsZSB0byBkaXJlY3RseSBzZXQgdGhlIHJlZnJhY3Rpb25Q
bGFuZSBieSBkaXJlY3RseSB1c2luZyBhIFBsYW5lKGEsIGIsIGMsIGQpIHdoZXJlIGEsIGIgYW5k
IGMgZ2l2ZSB0aGUgcGxhbmUgbm9ybWFsIHZlY3RvciAoYSwgYiwgYykgYW5kIGQgaXMgYSBzY2Fs
YXIgZGlzcGxhY2VtZW50IGZyb20gdGhlIHJlZnJhY3Rpb25QbGFuZSB0byB0aGUgb3JpZ2luLiBI
b3dldmVyIGluIGFsbCBidXQgdGhlIHZlcnkgc2ltcGxlc3Qgb2Ygc2l0dWF0aW9ucyBpdCBpcyBt
b3JlIHN0cmFpZ2h0IGZvcndhcmQgdG8gc2V0IGl0IHRvIHRoZSByZWZyYWN0b3IgYXMgc3RhdGVk
IGluIHRoZSBkb2MuCisgICAgICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9o
b3dfdG8vcmVmbGVjdCNyZWZyYWN0aW9uCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5yZWZy
YWN0aW9uUGxhbmUgPSBuZXcgX01hdGhzX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siUGxhbmUiXSgwLCAxLCAwLCAxKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZSBob3cgZGVlcCB1bmRlciB0aGUgc3VyZmFjZSB3ZSBzaG91bGQgc2VlLgorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuZGVwdGggPSAyLjA7CisgICAgICAgIF90aGlzLm9uQmVmb3JlUmVu
ZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgc2NlbmUuY2xpcFBs
YW5lID0gX3RoaXMucmVmcmFjdGlvblBsYW5lOworICAgICAgICB9KTsKKyAgICAgICAgX3RoaXMu
b25BZnRlclJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNj
ZW5lLmNsaXBQbGFuZSA9IG51bGw7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX3RoaXM7
CisgICAgfQorICAgIC8qKgorICAgICAqIENsb25lIHRoZSByZWZyYWN0aW9uIHRleHR1cmUuCisg
ICAgICogQHJldHVybnMgdGhlIGNsb25lZCB0ZXh0dXJlCisgICAgICovCisgICAgUmVmcmFjdGlv
blRleHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2Nl
bmUgPSB0aGlzLmdldFNjZW5lKCk7CisgICAgICAgIGlmICghc2NlbmUpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZhciB0ZXh0dXJlU2l6ZSA9IHRoaXMu
Z2V0U2l6ZSgpOworICAgICAgICB2YXIgbmV3VGV4dHVyZSA9IG5ldyBSZWZyYWN0aW9uVGV4dHVy
ZSh0aGlzLm5hbWUsIHRleHR1cmVTaXplLndpZHRoLCBzY2VuZSwgdGhpcy5fZ2VuZXJhdGVNaXBN
YXBzKTsKKyAgICAgICAgLy8gQmFzZSB0ZXh0dXJlCisgICAgICAgIG5ld1RleHR1cmUuaGFzQWxw
aGEgPSB0aGlzLmhhc0FscGhhOworICAgICAgICBuZXdUZXh0dXJlLmxldmVsID0gdGhpcy5sZXZl
bDsKKyAgICAgICAgLy8gUmVmcmFjdGlvbiBUZXh0dXJlCisgICAgICAgIG5ld1RleHR1cmUucmVm
cmFjdGlvblBsYW5lID0gdGhpcy5yZWZyYWN0aW9uUGxhbmUuY2xvbmUoKTsKKyAgICAgICAgaWYg
KHRoaXMucmVuZGVyTGlzdCkgeworICAgICAgICAgICAgbmV3VGV4dHVyZS5yZW5kZXJMaXN0ID0g
dGhpcy5yZW5kZXJMaXN0LnNsaWNlKDApOworICAgICAgICB9CisgICAgICAgIG5ld1RleHR1cmUu
ZGVwdGggPSB0aGlzLmRlcHRoOworICAgICAgICByZXR1cm4gbmV3VGV4dHVyZTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUgdGV4dHVyZSB0byBhIEpTT04gcmVwcmVzZW50
YXRpb24geW91IGNvdWxkIHVzZSBpbiBQYXJzZSBsYXRlciBvbgorICAgICAqIEByZXR1cm5zIHRo
ZSBzZXJpYWxpemVkIEpTT04gcmVwcmVzZW50YXRpb24KKyAgICAgKi8KKyAgICBSZWZyYWN0aW9u
VGV4dHVyZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
IXRoaXMubmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSBfc3VwZXIucHJvdG90eXBlLnNlcmlhbGl6ZS5j
YWxsKHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1pcnJvclBsYW5lID0gdGhp
cy5yZWZyYWN0aW9uUGxhbmUuYXNBcnJheSgpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
LmRlcHRoID0gdGhpcy5kZXB0aDsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7
CisgICAgfTsKKyAgICByZXR1cm4gUmVmcmFjdGlvblRleHR1cmU7Cit9KF9NYXRlcmlhbHNfVGV4
dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJS
ZW5kZXJUYXJnZXRUZXh0dXJlIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRl
cmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25zLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0Q3JlYXRpb25PcHRpb25z
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJlbmRlclRhcmdldENyZWF0
aW9uT3B0aW9ucyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJU
YXJnZXRDcmVhdGlvbk9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJlbmRlclRhcmdldENy
ZWF0aW9uT3B0aW9uczsgfSk7CisvKioKKyAqIERlZmluZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRl
IGEgcmVuZGVyIHRhcmdldCB0ZXh0dXJlCisgKi8KK3ZhciBSZW5kZXJUYXJnZXRDcmVhdGlvbk9w
dGlvbnMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gUmVuZGVy
VGFyZ2V0Q3JlYXRpb25PcHRpb25zKCkgeworICAgIH0KKyAgICByZXR1cm4gUmVuZGVyVGFyZ2V0
Q3JlYXRpb25PcHRpb25zOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRl
cmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVy
aWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJlLnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBSZW5kZXJUYXJnZXRUZXh0dXJlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlJlbmRlclRhcmdldFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJlbmRl
clRhcmdldFRleHR1cmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNj
L29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
VGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0
ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
UG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL1Bvc3RQcm9jZXNzZXMvcG9zdFBy
b2Nlc3NNYW5hZ2VyICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3NNYW5hZ2VyLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1JlbmRlcmluZ19yZW5kZXJpbmdNYW5hZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9SZW5kZXJpbmcvcmVuZGVyaW5nTWFuYWdlciAqLyAiLi9SZW5kZXJpbmcvcmVuZGVyaW5nTWFu
YWdlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19FeHRlbnNpb25zX2VuZ2luZV9yZW5kZXJUYXJn
ZXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUucmVuZGVyVGFyZ2V0ICovICIuL0VuZ2lu
ZXMvRXh0ZW5zaW9ucy9lbmdpbmUucmVuZGVyVGFyZ2V0LnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVz
L2VuZ2luZS50cyIpOworCisKKworCisKKworCisKKworCisvKioKKyAqIFRoaXMgSGVscHMgY3Jl
YXRpbmcgYSB0ZXh0dXJlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGZyb20gYSBjYW1lcmEgaW4geW91
ciBzY2VuZS4KKyAqIEl0IGlzIGJhc2ljYWxseSBhIGR5bmFtaWMgdGV4dHVyZSB0aGF0IGNvdWxk
IGJlIHVzZWQgdG8gY3JlYXRlIHNwZWNpYWwgZWZmZWN0cyBmb3IgaW5zdGFuY2UuCisgKiBBY3R1
YWxseSwgSXQgaXMgdGhlIGJhc2Ugb2YgbG90IG9mIGVmZmVjdHMgaW4gdGhlIGZyYW1ld29yayBs
aWtlIHBvc3QgcHJvY2Vzcywgc2hhZG93cywgZWZmZWN0IGxheWVycyBhbmQgcmVuZGVyaW5nIHBp
cGVsaW5lcy4uLgorICovCit2YXIgUmVuZGVyVGFyZ2V0VGV4dHVyZSA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShSZW5kZXJUYXJnZXRUZXh0dXJlLCBfc3VwZXIpOworICAgIC8qKgor
ICAgICAqIEluc3RhbnRpYXRlIGEgcmVuZGVyIHRhcmdldCB0ZXh0dXJlLiBUaGlzIGlzIG1haW5s
eSB1c2VkIHRvIHJlbmRlciBvZiBzY3JlZW4gdGhlIHNjZW5lIHRvIGZvciBpbnN0YW5jZSBhcHBs
eSBwb3N0IHByb2Nlc3NzZQorICAgICAqIG9yIHVzZWQgYSBzaGFkb3csIGRlcHRoIHRleHR1cmUu
Li4KKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgZnJpZW5kbHkgbmFtZSBvZiB0aGUgdGV4dHVyZQor
ICAgICAqIEBwYXJhbSBzaXplIFRoZSBzaXplIG9mIHRoZSBSVFQgKG51bWJlciBpZiBzcXVhcmUs
IG9yIHt3aWR0aDogbnVtYmVyLCBoZWlnaHQ6bnVtYmVyfSBvciB7cmF0aW86fSB0byBkZWZpbmUg
YSByYXRpbyBmcm9tIHRoZSBtYWluIHNjZW5lKQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2Nl
bmUgdGhlIFJUVCBiZWxvbmdzIHRvLiBUaGUgbGF0ZXN0IGNyZWF0ZWQgc2NlbmUgd2lsbCBiZSB1
c2VkIGlmIG5vdCBwcmVjaXNlZC4KKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVNaXBNYXBzIFRydWUg
aWYgbWlwIG1hcHMgbmVlZCB0byBiZSBnZW5lcmF0ZWQgYWZ0ZXIgcmVuZGVyLgorICAgICAqIEBw
YXJhbSBkb05vdENoYW5nZUFzcGVjdFJhdGlvIFRydWUgdG8gbm90IGNoYW5nZSB0aGUgYXNwZWN0
IHJhdGlvIG9mIHRoZSBzY2VuZSBpbiB0aGUgUlRUCisgICAgICogQHBhcmFtIHR5cGUgVGhlIHR5
cGUgb2YgdGhlIGJ1ZmZlciBpbiB0aGUgUlRUIChpbnQsIGhhbGYgZmxvYXQsIGZsb2F0Li4uKQor
ICAgICAqIEBwYXJhbSBpc0N1YmUgVHJ1ZSBpZiBhIGN1YmUgdGV4dHVyZSBuZWVkcyB0byBiZSBj
cmVhdGVkCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBi
ZSB1c2Vkd2l0aCB0aGUgcmVuZGVyIHRhcmdldCAoTGluZWFyLCBOZWFyZXN0Li4uKQorICAgICAq
IEBwYXJhbSBnZW5lcmF0ZURlcHRoQnVmZmVyIFRydWUgdG8gZ2VuZXJhdGUgYSBkZXB0aCBidWZm
ZXIKKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVTdGVuY2lsQnVmZmVyIFRydWUgdG8gZ2VuZXJhdGUg
YSBzdGVuY2lsIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBpc011bHRpIFRydWUgaWYgbXVsdGlwbGUg
dGV4dHVyZXMgbmVlZCB0byBiZSBjcmVhdGVkIChEcmF3IEJ1ZmZlcnMpCisgICAgICogQHBhcmFt
IGZvcm1hdCBUaGUgaW50ZXJuYWwgZm9ybWF0IG9mIHRoZSBidWZmZXIgaW4gdGhlIFJUVCAoUkVE
LCBSRywgUkdCLCBSR0JBLCBBTFBIQS4uLikKKyAgICAgKiBAcGFyYW0gZGVsYXlBbGxvY2F0aW9u
IGlmIHRoZSB0ZXh0dXJlIGFsbG9jYXRpb24gc2hvdWxkIGJlIGRlbGF5ZWQgKGRlZmF1bHQ6IGZh
bHNlKQorICAgICAqLworICAgIGZ1bmN0aW9uIFJlbmRlclRhcmdldFRleHR1cmUobmFtZSwgc2l6
ZSwgc2NlbmUsIGdlbmVyYXRlTWlwTWFwcywgZG9Ob3RDaGFuZ2VBc3BlY3RSYXRpbywgdHlwZSwg
aXNDdWJlLCBzYW1wbGluZ01vZGUsIGdlbmVyYXRlRGVwdGhCdWZmZXIsIGdlbmVyYXRlU3RlbmNp
bEJ1ZmZlciwgaXNNdWx0aSwgZm9ybWF0LCBkZWxheUFsbG9jYXRpb24pIHsKKyAgICAgICAgaWYg
KGRvTm90Q2hhbmdlQXNwZWN0UmF0aW8gPT09IHZvaWQgMCkgeyBkb05vdENoYW5nZUFzcGVjdFJh
dGlvID0gdHJ1ZTsgfQorICAgICAgICBpZiAodHlwZSA9PT0gdm9pZCAwKSB7IHR5cGUgPSBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAgIGlmIChpc0N1YmUgPT09IHZvaWQg
MCkgeyBpc0N1YmUgPSBmYWxzZTsgfQorICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lk
IDApIHsgc2FtcGxpbmdNb2RlID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9
CisgICAgICAgIGlmIChnZW5lcmF0ZURlcHRoQnVmZmVyID09PSB2b2lkIDApIHsgZ2VuZXJhdGVE
ZXB0aEJ1ZmZlciA9IHRydWU7IH0KKyAgICAgICAgaWYgKGdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA9
PT0gdm9pZCAwKSB7IGdlbmVyYXRlU3RlbmNpbEJ1ZmZlciA9IGZhbHNlOyB9CisgICAgICAgIGlm
IChpc011bHRpID09PSB2b2lkIDApIHsgaXNNdWx0aSA9IGZhbHNlOyB9CisgICAgICAgIGlmIChm
b3JtYXQgPT09IHZvaWQgMCkgeyBmb3JtYXQgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBOyB9Cisg
ICAgICAgIGlmIChkZWxheUFsbG9jYXRpb24gPT09IHZvaWQgMCkgeyBkZWxheUFsbG9jYXRpb24g
PSBmYWxzZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBudWxsLCBz
Y2VuZSwgIWdlbmVyYXRlTWlwTWFwcykgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuaXNDdWJlID0g
aXNDdWJlOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGlmIHBhcnRpY2xlcyBzaG91
bGQgYmUgcmVuZGVyZWQgaW4geW91ciB0ZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMucmVuZGVyUGFydGljbGVzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZSBpZiBzcHJpdGVzIHNob3VsZCBiZSByZW5kZXJlZCBpbiB5b3VyIHRleHR1cmUuCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5yZW5kZXJTcHJpdGVzID0gZmFsc2U7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBjb29yZGluYXRlcyBtb2RlIHRvIHByb2pl
Y3Rpb24gZm9yIFJUVCBhcyBpdCBpcyB0aGUgbW9zdCBjb21tb24gY2FzZSBmb3IgcmVuZGVyZWQg
dGV4dHVyZXMuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5jb29yZGluYXRlc01vZGUgPSBf
TWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
VGV4dHVyZSJdLlBST0pFQ1RJT05fTU9ERTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZSBpZiB0aGUgY2FtZXJhIHZpZXdwb3J0IHNob3VsZCBiZSByZXNwZWN0ZWQgd2hpbGUgcmVuZGVy
aW5nIHRoZSB0ZXh0dXJlIG9yIGlmIHRoZSByZW5kZXIgc2hvdWxkIGJlIGRvbmUgdG8gdGhlIGVu
dGlyZSB0ZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaWdub3JlQ2FtZXJhVmll
d3BvcnQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVk
IHdoZW4gdGhlIHRleHR1cmUgaXMgdW5iaW5kLgorICAgICAgICAqLworICAgICAgICBfdGhpcy5v
bkJlZm9yZUJpbmRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAq
IEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGlzIHVuYmluZC4KKyAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMub25BZnRlclVuYmluZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSByZW5kZXJpbmcg
dGhlIHRleHR1cmUKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25CZWZvcmVSZW5kZXJPYnNl
cnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2ZW50IHRyaWdn
ZXJlZCBhZnRlciByZW5kZXJpbmcgdGhlIHRleHR1cmUKKyAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMub25BZnRlclJlbmRlck9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAg
ICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGFmdGVyIHRoZSB0ZXh0dXJlIGNsZWFyCisgICAgICAg
ICovCisgICAgICAgIF90aGlzLm9uQ2xlYXJPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFi
bGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyBy
ZXNpemVkLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25SZXNpemVPYnNlcnZhYmxlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgICAgIF90aGlzLl9jdXJyZW50UmVmcmVzaElkID0gLTE7CisgICAgICAg
IF90aGlzLl9yZWZyZXNoUmF0ZSA9IDE7CisgICAgICAgIF90aGlzLl9zYW1wbGVzID0gMTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY2VudGVyIG9mIHRoZSBib3Vu
ZGluZyBib3ggYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXh0dXJlICh3aGVuIGluIGN1YmUgbW9kZSkK
KyAgICAgICAgICogSXQgbXVzdCBkZWZpbmUgd2hlcmUgdGhlIGNhbWVyYSB1c2VkIHRvIHJlbmRl
ciB0aGUgdGV4dHVyZSBpcyBzZXQKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmJvdW5kaW5n
Qm94UG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgc2NlbmUgPSBfdGhpcy5nZXRTY2VuZSgp
OworICAgICAgICBpZiAoIXNjZW5lKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXM7CisgICAg
ICAgIH0KKyAgICAgICAgX3RoaXMucmVuZGVyTGlzdCA9IG5ldyBBcnJheSgpOworICAgICAgICBf
dGhpcy5fZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIF90aGlzLm5hbWUgPSBu
YW1lOworICAgICAgICBfdGhpcy5pc1JlbmRlclRhcmdldCA9IHRydWU7CisgICAgICAgIF90aGlz
Ll9pbml0aWFsU2l6ZVBhcmFtZXRlciA9IHNpemU7CisgICAgICAgIF90aGlzLl9wcm9jZXNzU2l6
ZVBhcmFtZXRlcihzaXplKTsKKyAgICAgICAgX3RoaXMuX3Jlc2l6ZU9ic2VydmVyID0gX3RoaXMu
Z2V0U2NlbmUoKS5nZXRFbmdpbmUoKS5vblJlc2l6ZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLl9nZW5lcmF0ZU1pcE1hcHMgPSBnZW5lcmF0
ZU1pcE1hcHMgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIF90aGlzLl9kb05vdENoYW5nZUFzcGVj
dFJhdGlvID0gZG9Ob3RDaGFuZ2VBc3BlY3RSYXRpbzsKKyAgICAgICAgLy8gUmVuZGVyaW5nIGdy
b3VwcworICAgICAgICBfdGhpcy5fcmVuZGVyaW5nTWFuYWdlciA9IG5ldyBfUmVuZGVyaW5nX3Jl
bmRlcmluZ01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUmVuZGVyaW5nTWFu
YWdlciJdKHNjZW5lKTsKKyAgICAgICAgX3RoaXMuX3JlbmRlcmluZ01hbmFnZXIuX3VzZVNjZW5l
QXV0b0NsZWFyU2V0dXAgPSB0cnVlOworICAgICAgICBpZiAoaXNNdWx0aSkgeworICAgICAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgICAgICB9CisgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRP
cHRpb25zID0geworICAgICAgICAgICAgZ2VuZXJhdGVNaXBNYXBzOiBnZW5lcmF0ZU1pcE1hcHMs
CisgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgZm9ybWF0OiBmb3JtYXQsCisg
ICAgICAgICAgICBzYW1wbGluZ01vZGU6IHNhbXBsaW5nTW9kZSwKKyAgICAgICAgICAgIGdlbmVy
YXRlRGVwdGhCdWZmZXI6IGdlbmVyYXRlRGVwdGhCdWZmZXIsCisgICAgICAgICAgICBnZW5lcmF0
ZVN0ZW5jaWxCdWZmZXI6IGdlbmVyYXRlU3RlbmNpbEJ1ZmZlcgorICAgICAgICB9OworICAgICAg
ICBpZiAoc2FtcGxpbmdNb2RlID09PSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGV4dHVyZSJdLk5FQVJFU1RfU0FNUExJTkdNT0RFKSB7
CisgICAgICAgICAgICBfdGhpcy53cmFwVSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7
CisgICAgICAgICAgICBfdGhpcy53cmFwViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkZWxheUFsbG9jYXRpb24pIHsKKyAgICAgICAgICAg
IGlmIChpc0N1YmUpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdGV4dHVyZSA9IHNjZW5lLmdl
dEVuZ2luZSgpLmNyZWF0ZVJlbmRlclRhcmdldEN1YmVUZXh0dXJlKF90aGlzLmdldFJlbmRlclNp
emUoKSwgX3RoaXMuX3JlbmRlclRhcmdldE9wdGlvbnMpOworICAgICAgICAgICAgICAgIF90aGlz
LmNvb3JkaW5hdGVzTW9kZSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uSU5WQ1VCSUNfTU9ERTsKKyAgICAgICAgICAg
ICAgICBfdGhpcy5fdGV4dHVyZU1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5JZGVudGl0eSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3RleHR1cmUgPSBzY2Vu
ZS5nZXRFbmdpbmUoKS5jcmVhdGVSZW5kZXJUYXJnZXRUZXh0dXJlKF90aGlzLl9zaXplLCBfdGhp
cy5fcmVuZGVyVGFyZ2V0T3B0aW9ucyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVuZGVy
VGFyZ2V0VGV4dHVyZS5wcm90b3R5cGUsICJyZW5kZXJMaXN0IiwgeworICAgICAgICAvKioKKyAg
ICAgICAgKiBVc2UgdGhpcyBsaXN0IHRvIGRlZmluZSB0aGUgbGlzdCBvZiBtZXNoIHlvdSB3YW50
IHRvIHJlbmRlci4KKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGlzdDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlckxpc3QgPSB2YWx1
ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZW5kZXJMaXN0KSB7CisgICAgICAgICAgICAgICAg
dGhpcy5faG9va0FycmF5KHRoaXMuX3JlbmRlckxpc3QpOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBSZW5kZXJUYXJnZXRUZXh0dXJlLnByb3RvdHlwZS5faG9va0FycmF5
ID0gZnVuY3Rpb24gKGFycmF5KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAg
IHZhciBvbGRQdXNoID0gYXJyYXkucHVzaDsKKyAgICAgICAgYXJyYXkucHVzaCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIg
X2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICBp
dGVtc1tfaV0gPSBhcmd1bWVudHNbX2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFy
IHdhc0VtcHR5ID0gYXJyYXkubGVuZ3RoID09PSAwOworICAgICAgICAgICAgdmFyIHJlc3VsdCA9
IG9sZFB1c2guYXBwbHkoYXJyYXksIGl0ZW1zKTsKKyAgICAgICAgICAgIGlmICh3YXNFbXB0eSkg
eworICAgICAgICAgICAgICAgIF90aGlzLmdldFNjZW5lKCkubWVzaGVzLmZvckVhY2goZnVuY3Rp
b24gKG1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzaC5fbWFya1N1Yk1lc2hlc0FzTGln
aHREaXJ0eSgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIG9sZFNwbGljZSA9IGFy
cmF5LnNwbGljZTsKKyAgICAgICAgYXJyYXkuc3BsaWNlID0gZnVuY3Rpb24gKGluZGV4LCBkZWxl
dGVDb3VudCkgeworICAgICAgICAgICAgdmFyIGRlbGV0ZWQgPSBvbGRTcGxpY2UuYXBwbHkoYXJy
YXksIFtpbmRleCwgZGVsZXRlQ291bnRdKTsKKyAgICAgICAgICAgIGlmIChhcnJheS5sZW5ndGgg
PT09IDApIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5nZXRTY2VuZSgpLm1lc2hlcy5mb3JFYWNo
KGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIG1lc2guX21hcmtTdWJNZXNo
ZXNBc0xpZ2h0RGlydHkoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBkZWxldGVkOworICAgICAgICB9OworICAgIH07CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLCAib25BZnRlclVu
YmluZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldCBhIGFmdGVyIHVuYmluZCBjYWxs
YmFjayBpbiB0aGUgdGV4dHVyZS4KKyAgICAgICAgICogVGhpcyBoYXMgYmVlbiBrZXB0IGZvciBi
YWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB1c2Ugb2Ygb25BZnRlclVuYmluZE9ic2VydmFibGUg
aXMgcmVjb21tZW5kZWQuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjYWxs
YmFjaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX29uQWZ0ZXJVbmJpbmRPYnNlcnZlcikgewor
ICAgICAgICAgICAgICAgIHRoaXMub25BZnRlclVuYmluZE9ic2VydmFibGUucmVtb3ZlKHRoaXMu
X29uQWZ0ZXJVbmJpbmRPYnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9vbkFmdGVyVW5iaW5kT2JzZXJ2ZXIgPSB0aGlzLm9uQWZ0ZXJVbmJpbmRPYnNlcnZhYmxlLmFk
ZChjYWxsYmFjayk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShSZW5kZXJUYXJnZXRUZXh0dXJlLnByb3RvdHlwZSwgIm9uQmVmb3JlUmVuZGVyIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogU2V0IGEgYmVmb3JlIHJlbmRlciBjYWxsYmFjayBpbiB0aGUg
dGV4dHVyZS4KKyAgICAgICAgICogVGhpcyBoYXMgYmVlbiBrZXB0IGZvciBiYWNrd2FyZCBjb21w
YXRpYmlsaXR5IGFuZCB1c2Ugb2Ygb25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlIGlzIHJlY29tbWVu
ZGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9vbkJlZm9yZVJlbmRlck9ic2VydmVyKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQmVmb3Jl
UmVuZGVyT2JzZXJ2ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fb25CZWZv
cmVSZW5kZXJPYnNlcnZlciA9IHRoaXMub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLmFkZChjYWxs
YmFjayk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZW5k
ZXJUYXJnZXRUZXh0dXJlLnByb3RvdHlwZSwgIm9uQWZ0ZXJSZW5kZXIiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBTZXQgYSBhZnRlciByZW5kZXIgY2FsbGJhY2sgaW4gdGhlIHRleHR1cmUu
CisgICAgICAgICAqIFRoaXMgaGFzIGJlZW4ga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0
eSBhbmQgdXNlIG9mIG9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlIGlzIHJlY29tbWVuZGVkLgorICAg
ICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9vbkFmdGVyUmVuZGVyT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Lm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFmdGVyUmVuZGVyT2JzZXJ2
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fb25BZnRlclJlbmRlck9ic2Vy
dmVyID0gdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5hZGQoY2FsbGJhY2spOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVuZGVyVGFyZ2V0VGV4dHVy
ZS5wcm90b3R5cGUsICJvbkNsZWFyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogU2V0IGEg
Y2xlYXIgY2FsbGJhY2sgaW4gdGhlIHRleHR1cmUuCisgICAgICAgICAqIFRoaXMgaGFzIGJlZW4g
a2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgdXNlIG9mIG9uQ2xlYXJPYnNlcnZh
YmxlIGlzIHJlY29tbWVuZGVkLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
Y2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbkNsZWFyT2JzZXJ2ZXIpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLm9uQ2xlYXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkNsZWFy
T2JzZXJ2ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fb25DbGVhck9ic2Vy
dmVyID0gdGhpcy5vbkNsZWFyT2JzZXJ2YWJsZS5hZGQoY2FsbGJhY2spOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVuZGVyVGFyZ2V0VGV4dHVyZS5wcm90
b3R5cGUsICJyZW5kZXJUYXJnZXRPcHRpb25zIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyByZW5kZXIgdGFyZ2V0IGNyZWF0aW9uIG9wdGlvbnMgdGhhdCB3ZXJlIHVzZWQuCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9yZW5kZXJUYXJnZXRPcHRpb25zOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBSZW5kZXJU
YXJnZXRUZXh0dXJlLnByb3RvdHlwZS5fb25SYXRpb1Jlc2NhbGUgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGlmICh0aGlzLl9zaXplUmF0aW8pIHsKKyAgICAgICAgICAgIHRoaXMucmVzaXplKHRo
aXMuX2luaXRpYWxTaXplUGFyYW1ldGVyKTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLCAiYm91bmRpbmdC
b3hTaXplIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9ib3VuZGluZ0JveFNpemU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIG9yIHNldHMgdGhlIHNpemUgb2YgdGhlIGJvdW5kaW5nIGJveCBhc3NvY2lhdGVk
IHdpdGggdGhlIHRleHR1cmUgKHdoZW4gaW4gY3ViZSBtb2RlKQorICAgICAgICAgKiBXaGVuIGRl
ZmluZWQsIHRoZSBjdWJlbWFwIHdpbGwgc3dpdGNoIHRvIGxvY2FsIG1vZGUKKyAgICAgICAgICog
QHNlZSBodHRwczovL2NvbW11bml0eS5hcm0uY29tL2dyYXBoaWNzL2IvYmxvZy9wb3N0cy9yZWZs
ZWN0aW9ucy1iYXNlZC1vbi1sb2NhbC1jdWJlbWFwcy1pbi11bml0eQorICAgICAgICAgKiBAZXhh
bXBsZSBodHRwczovL3d3dy5iYWJ5bG9uanMtcGxheWdyb3VuZC5jb20vI1JOQVNNTAorICAgICAg
ICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9ib3VuZGluZ0JveFNpemUgJiYgdGhpcy5fYm91bmRpbmdCb3hTaXplLmVxdWFscyh2YWx1
ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0aGlzLl9ib3VuZGluZ0JveFNpemUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHZhciBzY2VuZSA9
IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgICAgIGlmIChzY2VuZSkgeworICAgICAgICAgICAg
ICAgIHNjZW5lLm1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGly
dHlGbGFnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZS4KKyAgICAgKiBUaGlzIGlzIG9ubHkg
YXZhaWxhYmxlIGluIFdlYkdMIDIgb3Igd2l0aCB0aGUgZGVwdGggdGV4dHVyZSBleHRlbnNpb24g
YXZhaWxhYmxlLgorICAgICAqIEBwYXJhbSBjb21wYXJpc29uRnVuY3Rpb24gU3BlY2lmaWVzIHRo
ZSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIHNldCBvbiB0aGUgdGV4dHVyZS4gSWYgMCBvciB1bmRl
ZmluZWQsIHRoZSB0ZXh0dXJlIGlzIG5vdCBpbiBjb21wYXJpc29uIG1vZGUKKyAgICAgKiBAcGFy
YW0gYmlsaW5lYXJGaWx0ZXJpbmcgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGJpbGluZWFyIGZp
bHRlcmluZyBpcyBlbmFibGUgb24gdGhlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gZ2VuZXJhdGVT
dGVuY2lsIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBhIHN0ZW5jaWwgc2hvdWxkIGJlIGFsbG9j
YXRlZCBpbiB0aGUgdGV4dHVyZQorICAgICAqLworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJv
dG90eXBlLmNyZWF0ZURlcHRoU3RlbmNpbFRleHR1cmUgPSBmdW5jdGlvbiAoY29tcGFyaXNvbkZ1
bmN0aW9uLCBiaWxpbmVhckZpbHRlcmluZywgZ2VuZXJhdGVTdGVuY2lsKSB7CisgICAgICAgIGlm
IChjb21wYXJpc29uRnVuY3Rpb24gPT09IHZvaWQgMCkgeyBjb21wYXJpc29uRnVuY3Rpb24gPSAw
OyB9CisgICAgICAgIGlmIChiaWxpbmVhckZpbHRlcmluZyA9PT0gdm9pZCAwKSB7IGJpbGluZWFy
RmlsdGVyaW5nID0gdHJ1ZTsgfQorICAgICAgICBpZiAoZ2VuZXJhdGVTdGVuY2lsID09PSB2b2lk
IDApIHsgZ2VuZXJhdGVTdGVuY2lsID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCF0aGlzLmdldFNj
ZW5lKCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgZW5n
aW5lID0gdGhpcy5nZXRTY2VuZSgpLmdldEVuZ2luZSgpOworICAgICAgICB0aGlzLmRlcHRoU3Rl
bmNpbFRleHR1cmUgPSBlbmdpbmUuY3JlYXRlRGVwdGhTdGVuY2lsVGV4dHVyZSh0aGlzLl9zaXpl
LCB7CisgICAgICAgICAgICBiaWxpbmVhckZpbHRlcmluZzogYmlsaW5lYXJGaWx0ZXJpbmcsCisg
ICAgICAgICAgICBjb21wYXJpc29uRnVuY3Rpb246IGNvbXBhcmlzb25GdW5jdGlvbiwKKyAgICAg
ICAgICAgIGdlbmVyYXRlU3RlbmNpbDogZ2VuZXJhdGVTdGVuY2lsLAorICAgICAgICAgICAgaXND
dWJlOiB0aGlzLmlzQ3ViZQorICAgICAgICB9KTsKKyAgICAgICAgZW5naW5lLnNldEZyYW1lQnVm
ZmVyRGVwdGhTdGVuY2lsVGV4dHVyZSh0aGlzKTsKKyAgICB9OworICAgIFJlbmRlclRhcmdldFRl
eHR1cmUucHJvdG90eXBlLl9wcm9jZXNzU2l6ZVBhcmFtZXRlciA9IGZ1bmN0aW9uIChzaXplKSB7
CisgICAgICAgIGlmIChzaXplLnJhdGlvKSB7CisgICAgICAgICAgICB0aGlzLl9zaXplUmF0aW8g
PSBzaXplLnJhdGlvOworICAgICAgICAgICAgdGhpcy5fc2l6ZSA9IHsKKyAgICAgICAgICAgICAg
ICB3aWR0aDogdGhpcy5fYmVzdFJlZmxlY3Rpb25SZW5kZXJUYXJnZXREaW1lbnNpb24odGhpcy5f
ZW5naW5lLmdldFJlbmRlcldpZHRoKCksIHRoaXMuX3NpemVSYXRpbyksCisgICAgICAgICAgICAg
ICAgaGVpZ2h0OiB0aGlzLl9iZXN0UmVmbGVjdGlvblJlbmRlclRhcmdldERpbWVuc2lvbih0aGlz
Ll9lbmdpbmUuZ2V0UmVuZGVySGVpZ2h0KCksIHRoaXMuX3NpemVSYXRpbykKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9zaXplID0g
c2l6ZTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlbmRl
clRhcmdldFRleHR1cmUucHJvdG90eXBlLCAic2FtcGxlcyIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIERlZmluZSB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gdXNlIGluIGNhc2Ugb2YgTVNB
QS4KKyAgICAgICAgICogSXQgZGVmYXVsdHMgdG8gb25lIG1lYW5pbmcgbm8gTVNBQSBoYXMgYmVl
biBlbmFibGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fc2FtcGxlczsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zYW1wbGVzID09PSB2YWx1
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgICAgIGlmICghc2NlbmUpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9zYW1wbGVzID0gc2NlbmUuZ2V0RW5naW5lKCkudXBkYXRlUmVuZGVyVGFyZ2V0VGV4dHVyZVNh
bXBsZUNvdW50KHRoaXMuX3RleHR1cmUsIHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqCisgICAgICogUmVzZXRzIHRoZSByZWZyZXNoIGNvdW50ZXIgb2YgdGhlIHRleHR1cmUgYW5k
IHN0YXJ0IGJhayBmcm9tIHNjcmF0Y2guCisgICAgICogQ291bGQgYmUgdXNlZnVsIHRvIHJlZ2Vu
ZXJhdGUgdGhlIHRleHR1cmUgaWYgaXQgaXMgc2V0dXAgdG8gcmVuZGVyIG9ubHkgb25jZS4KKyAg
ICAgKi8KKyAgICBSZW5kZXJUYXJnZXRUZXh0dXJlLnByb3RvdHlwZS5yZXNldFJlZnJlc2hDb3Vu
dGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jdXJyZW50UmVmcmVzaElkID0gLTE7
CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVuZGVyVGFyZ2V0VGV4dHVyZS5w
cm90b3R5cGUsICJyZWZyZXNoUmF0ZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZSB0aGUgcmVmcmVzaCByYXRlIG9mIHRoZSB0ZXh0dXJlIG9yIHRoZSByZW5kZXJpbmcgZnJlcXVl
bmN5LgorICAgICAgICAgKiBVc2UgMCB0byByZW5kZXIganVzdCBvbmNlLCAxIHRvIHJlbmRlciBv
biBldmVyeSBmcmFtZSwgMiB0byByZW5kZXIgZXZlcnkgdHdvIGZyYW1lcyBhbmQgc28gb24uLi4K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3JlZnJlc2hSYXRlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFJhdGUgPSB2YWx1ZTsKKyAgICAg
ICAgICAgIHRoaXMucmVzZXRSZWZyZXNoQ291bnRlcigpOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICAvKioKKyAgICAgKiBBZGRzIGEgcG9zdCBwcm9jZXNzIHRvIHRoZSByZW5kZXIgdGFyZ2V0IHJl
bmRlcmluZyBwYXNzZXMuCisgICAgICogQHBhcmFtIHBvc3RQcm9jZXNzIGRlZmluZSB0aGUgcG9z
dCBwcm9jZXNzIHRvIGFkZAorICAgICAqLworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90
eXBlLmFkZFBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHBvc3RQcm9jZXNzKSB7CisgICAgICAgIGlm
ICghdGhpcy5fcG9zdFByb2Nlc3NNYW5hZ2VyKSB7CisgICAgICAgICAgICB2YXIgc2NlbmUgPSB0
aGlzLmdldFNjZW5lKCk7CisgICAgICAgICAgICBpZiAoIXNjZW5lKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3NN
YW5hZ2VyID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzTWFuYWdlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJQb3N0UHJvY2Vzc01hbmFnZXIiXShzY2VuZSk7CisgICAgICAg
ICAgICB0aGlzLl9wb3N0UHJvY2Vzc2VzID0gbmV3IEFycmF5KCk7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fcG9zdFByb2Nlc3Nlcy5wdXNoKHBvc3RQcm9jZXNzKTsKKyAgICAgICAgdGhpcy5f
cG9zdFByb2Nlc3Nlc1swXS5hdXRvQ2xlYXIgPSBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENsZWFyIGFsbCB0aGUgcG9zdCBwcm9jZXNzZXMgYXR0YWNoZWQgdG8gdGhlIHJlbmRlciB0
YXJnZXQKKyAgICAgKiBAcGFyYW0gZGlzcG9zZSBkZWZpbmUgaWYgdGhlIGNsZWFyZWQgcG9zdCBw
cm9jZXNzZXNzaG91bGQgYWxzbyBiZSBkaXNwb3NlZCAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAg
Ki8KKyAgICBSZW5kZXJUYXJnZXRUZXh0dXJlLnByb3RvdHlwZS5jbGVhclBvc3RQcm9jZXNzZXMg
PSBmdW5jdGlvbiAoZGlzcG9zZSkgeworICAgICAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7
IGRpc3Bvc2UgPSBmYWxzZTsgfQorICAgICAgICBpZiAoIXRoaXMuX3Bvc3RQcm9jZXNzZXMpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGlzcG9zZSkgewor
ICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3Bvc3RQcm9jZXNzZXM7IF9p
IDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHBvc3RQcm9jZXNzID0g
X2FbX2ldOworICAgICAgICAgICAgICAgIHBvc3RQcm9jZXNzLmRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2VzID0gW107CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgb25lIG9mIHRoZSBwb3N0IHByb2Nlc3MgZnJvbSB0
aGUgbGlzdCBvZiBhdHRhY2hlZCBwb3N0IHByb2Nlc3NlcyB0byB0aGUgdGV4dHVyZQorICAgICAq
IEBwYXJhbSBwb3N0UHJvY2VzcyBkZWZpbmUgdGhlIHBvc3QgcHJvY2VzcyB0byByZW1vdmUgZnJv
bSB0aGUgbGlzdAorICAgICAqLworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLnJl
bW92ZVBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHBvc3RQcm9jZXNzKSB7CisgICAgICAgIGlmICgh
dGhpcy5fcG9zdFByb2Nlc3NlcykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3Bvc3RQcm9jZXNzZXMuaW5kZXhPZihwb3N0UHJvY2Vz
cyk7CisgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2VzLnNwbGljZShpbmRleCwgMSk7Cisg
ICAgICAgIGlmICh0aGlzLl9wb3N0UHJvY2Vzc2VzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAg
IHRoaXMuX3Bvc3RQcm9jZXNzZXNbMF0uYXV0b0NsZWFyID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgUmVuZGVyVGFyZ2V0VGV4dHVyZS5wcm90b3R5
cGUuX3Nob3VsZFJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2N1cnJl
bnRSZWZyZXNoSWQgPT09IC0xKSB7IC8vIEF0IGxlYXN0IHJlbmRlciBvbmNlCisgICAgICAgICAg
ICB0aGlzLl9jdXJyZW50UmVmcmVzaElkID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnJlZnJlc2hSYXRlID09PSB0aGlzLl9jdXJyZW50
UmVmcmVzaElkKSB7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50UmVmcmVzaElkID0gMTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2N1cnJlbnRS
ZWZyZXNoSWQrKzsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAg
ICogR2V0cyB0aGUgYWN0dWFsIHJlbmRlciBzaXplIG9mIHRoZSB0ZXh0dXJlLgorICAgICAqIEBy
ZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHNpemUKKyAgICAgKi8KKyAgICBSZW5kZXJU
YXJnZXRUZXh0dXJlLnByb3RvdHlwZS5nZXRSZW5kZXJTaXplID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJXaWR0aCgpOworICAgIH07CisgICAgLyoqCisgICAg
ICogR2V0cyB0aGUgYWN0dWFsIHJlbmRlciB3aWR0aCBvZiB0aGUgdGV4dHVyZS4KKyAgICAgKiBA
cmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIHJlbmRlciBzaXplCisgICAgICovCisgICAgUmVuZGVy
VGFyZ2V0VGV4dHVyZS5wcm90b3R5cGUuZ2V0UmVuZGVyV2lkdGggPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGlmICh0aGlzLl9zaXplLndpZHRoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
c2l6ZS53aWR0aDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGFjdHVhbCByZW5kZXIgaGVpZ2h0IG9mIHRoZSB0
ZXh0dXJlLgorICAgICAqIEByZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciBzaXplCisg
ICAgICovCisgICAgUmVuZGVyVGFyZ2V0VGV4dHVyZS5wcm90b3R5cGUuZ2V0UmVuZGVySGVpZ2h0
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fc2l6ZS53aWR0aCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3NpemUuaGVpZ2h0OworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzLl9zaXplOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlbmRlclRh
cmdldFRleHR1cmUucHJvdG90eXBlLCAiY2FuUmVzY2FsZSIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldCBpZiB0aGUgdGV4dHVyZSBjYW4gYmUgcmVzY2FsZWQgb3Igbm90LgorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmVzaXplIHRoZSB0ZXh0dXJl
IHVzaW5nIGEgcmF0aW8uCisgICAgICogQHBhcmFtIHJhdGlvIHRoZSByYXRpbyB0byBhcHBseSB0
byB0aGUgdGV4dHVyZSBzaXplIGluIG9yZGVyIHRvIGNvbXB1dGUgdGhlIG5ldyB0YXJnZXQgc2l6
ZQorICAgICAqLworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLnNjYWxlID0gZnVu
Y3Rpb24gKHJhdGlvKSB7CisgICAgICAgIHZhciBuZXdTaXplID0gdGhpcy5nZXRSZW5kZXJTaXpl
KCkgKiByYXRpbzsKKyAgICAgICAgdGhpcy5yZXNpemUobmV3U2l6ZSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXQgdGhlIHRleHR1cmUgcmVmbGVjdGlvbiBtYXRyaXggdXNlZCB0byByb3Rh
dGUvdHJhbnNmb3JtIHRoZSByZWZsZWN0aW9uLgorICAgICAqIEByZXR1cm5zIHRoZSByZWZsZWN0
aW9uIG1hdHJpeAorICAgICAqLworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLmdl
dFJlZmxlY3Rpb25UZXh0dXJlTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhp
cy5pc0N1YmUpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlTWF0cml4OworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmdldFJlZmxlY3Rpb25UZXh0
dXJlTWF0cml4LmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXNpemUgdGhl
IHRleHR1cmUgdG8gYSBuZXcgZGVzaXJlZCBzaXplLgorICAgICAqIEJlIGNhcnJlZnVsbCBhcyBp
dCB3aWxsIHJlY3JlYXRlIGFsbCB0aGUgZGF0YSBpbiB0aGUgbmV3IHRleHR1cmUuCisgICAgICog
QHBhcmFtIHNpemUgRGVmaW5lIHRoZSBuZXcgc2l6ZS4gSXQgY2FuIGJlOgorICAgICAqICAgLSBh
IG51bWJlciBmb3Igc3F1YXJlZCB0ZXh0dXJlLAorICAgICAqICAgLSBhbiBvYmplY3QgY29udGFp
bmluZyB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0KKyAgICAgKiAgIC0gb3IgYW4g
b2JqZWN0IGNvbnRhaW5pbmcgYSByYXRpbyB7IHJhdGlvOiBudW1iZXIgfQorICAgICAqLworICAg
IFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uIChzaXplKSB7
CisgICAgICAgIHZhciB3YXNDdWJlID0gdGhpcy5pc0N1YmU7CisgICAgICAgIHRoaXMucmVsZWFz
ZUludGVybmFsVGV4dHVyZSgpOworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7
CisgICAgICAgIGlmICghc2NlbmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9wcm9jZXNzU2l6ZVBhcmFtZXRlcihzaXplKTsKKyAgICAgICAgaWYgKHdh
c0N1YmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSBzY2VuZS5nZXRFbmdpbmUoKS5j
cmVhdGVSZW5kZXJUYXJnZXRDdWJlVGV4dHVyZSh0aGlzLmdldFJlbmRlclNpemUoKSwgdGhpcy5f
cmVuZGVyVGFyZ2V0T3B0aW9ucyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLl90ZXh0dXJlID0gc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlUmVuZGVyVGFyZ2V0
VGV4dHVyZSh0aGlzLl9zaXplLCB0aGlzLl9yZW5kZXJUYXJnZXRPcHRpb25zKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5vblJlc2l6ZU9ic2VydmFibGUuaGFzT2JzZXJ2ZXJzKCkpIHsK
KyAgICAgICAgICAgIHRoaXMub25SZXNpemVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlz
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVuZGVycyBhbGwgdGhlIG9i
amVjdHMgZnJvbSB0aGUgcmVuZGVyIGxpc3QgaW50byB0aGUgdGV4dHVyZS4KKyAgICAgKiBAcGFy
YW0gdXNlQ2FtZXJhUG9zdFByb2Nlc3MgRGVmaW5lIGlmIGNhbWVyYSBwb3N0IHByb2Nlc3NlcyBz
aG91bGQgYmUgdXNlZCBkdXJpbmcgdGhlIHJlbmRlcmluZworICAgICAqIEBwYXJhbSBkdW1wRm9y
RGVidWcgRGVmaW5lIGlmIHRoZSByZW5kZXJpbmcgcmVzdWx0IHNob3VsZCBiZSBkdW1wZWQgKGNv
cGllZCkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlCisgICAgICovCisgICAgUmVuZGVyVGFyZ2V0VGV4
dHVyZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHVzZUNhbWVyYVBvc3RQcm9jZXNzLCBk
dW1wRm9yRGVidWcpIHsKKyAgICAgICAgaWYgKHVzZUNhbWVyYVBvc3RQcm9jZXNzID09PSB2b2lk
IDApIHsgdXNlQ2FtZXJhUG9zdFByb2Nlc3MgPSBmYWxzZTsgfQorICAgICAgICBpZiAoZHVtcEZv
ckRlYnVnID09PSB2b2lkIDApIHsgZHVtcEZvckRlYnVnID0gZmFsc2U7IH0KKyAgICAgICAgdmFy
IHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICBpZiAoIXNjZW5lKSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVu
Z2luZSgpOworICAgICAgICBpZiAodGhpcy51c2VDYW1lcmFQb3N0UHJvY2Vzc2VzICE9PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgIHVzZUNhbWVyYVBvc3RQcm9jZXNzID0gdGhpcy51c2VDYW1l
cmFQb3N0UHJvY2Vzc2VzOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl93YWl0aW5nUmVu
ZGVyTGlzdCkgeworICAgICAgICAgICAgdGhpcy5yZW5kZXJMaXN0ID0gW107CisgICAgICAgICAg
ICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fd2FpdGluZ1JlbmRlckxpc3QubGVu
Z3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5fd2FpdGluZ1Jl
bmRlckxpc3RbaW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBtZXNoXzEgPSBzY2VuZS5nZXRN
ZXNoQnlJRChpZCk7CisgICAgICAgICAgICAgICAgaWYgKG1lc2hfMSkgeworICAgICAgICAgICAg
ICAgICAgICB0aGlzLnJlbmRlckxpc3QucHVzaChtZXNoXzEpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl93YWl0aW5nUmVuZGVyTGlz
dDsKKyAgICAgICAgfQorICAgICAgICAvLyBJcyBwcmVkaWNhdGUgZGVmaW5lZD8KKyAgICAgICAg
aWYgKHRoaXMucmVuZGVyTGlzdFByZWRpY2F0ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMucmVu
ZGVyTGlzdCkgeworICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyTGlzdC5sZW5ndGggPSAwOyAv
LyBDbGVhciBwcmV2aW91cyByZW5kZXJMaXN0CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckxpc3QgPSBbXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgICAg
IGlmICghc2NlbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgc2NlbmVNZXNoZXMgPSBzY2VuZS5tZXNoZXM7CisgICAgICAgICAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc2NlbmVNZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7
CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBzY2VuZU1lc2hlc1tpbmRleF07CisgICAgICAg
ICAgICAgICAgaWYgKHRoaXMucmVuZGVyTGlzdFByZWRpY2F0ZShtZXNoKSkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLnJlbmRlckxpc3QucHVzaChtZXNoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vbkJlZm9yZUJpbmRPYnNl
cnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgLy8gU2V0IGN1c3RvbSBwcm9q
ZWN0aW9uLgorICAgICAgICAvLyBOZWVkcyB0byBiZSBiZWZvcmUgYmluZGluZyB0byBwcmV2ZW50
IGNoYW5naW5nIHRoZSBhc3BlY3QgcmF0aW8uCisgICAgICAgIHZhciBjYW1lcmE7CisgICAgICAg
IGlmICh0aGlzLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgY2FtZXJhID0gdGhpcy5hY3Rp
dmVDYW1lcmE7CisgICAgICAgICAgICBlbmdpbmUuc2V0Vmlld3BvcnQodGhpcy5hY3RpdmVDYW1l
cmEudmlld3BvcnQsIHRoaXMuZ2V0UmVuZGVyV2lkdGgoKSwgdGhpcy5nZXRSZW5kZXJIZWlnaHQo
KSk7CisgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVDYW1lcmEgIT09IHNjZW5lLmFjdGl2ZUNh
bWVyYSkgeworICAgICAgICAgICAgICAgIHNjZW5lLnNldFRyYW5zZm9ybU1hdHJpeCh0aGlzLmFj
dGl2ZUNhbWVyYS5nZXRWaWV3TWF0cml4KCksIHRoaXMuYWN0aXZlQ2FtZXJhLmdldFByb2plY3Rp
b25NYXRyaXgodHJ1ZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgY2FtZXJhID0gc2NlbmUuYWN0aXZlQ2FtZXJhOworICAgICAgICAgICAg
aWYgKGNhbWVyYSkgeworICAgICAgICAgICAgICAgIGVuZ2luZS5zZXRWaWV3cG9ydChjYW1lcmEu
dmlld3BvcnQsIHRoaXMuZ2V0UmVuZGVyV2lkdGgoKSwgdGhpcy5nZXRSZW5kZXJIZWlnaHQoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gUHJlcGFyZSByZW5kZXJpbmdN
YW5hZ2VyCisgICAgICAgIHRoaXMuX3JlbmRlcmluZ01hbmFnZXIucmVzZXQoKTsKKyAgICAgICAg
dmFyIGN1cnJlbnRSZW5kZXJMaXN0ID0gdGhpcy5yZW5kZXJMaXN0ID8gdGhpcy5yZW5kZXJMaXN0
IDogc2NlbmUuZ2V0QWN0aXZlTWVzaGVzKCkuZGF0YTsKKyAgICAgICAgdmFyIGN1cnJlbnRSZW5k
ZXJMaXN0TGVuZ3RoID0gdGhpcy5yZW5kZXJMaXN0ID8gdGhpcy5yZW5kZXJMaXN0Lmxlbmd0aCA6
IHNjZW5lLmdldEFjdGl2ZU1lc2hlcygpLmxlbmd0aDsKKyAgICAgICAgdmFyIHNjZW5lUmVuZGVy
SWQgPSBzY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICBmb3IgKHZhciBtZXNoSW5kZXggPSAw
OyBtZXNoSW5kZXggPCBjdXJyZW50UmVuZGVyTGlzdExlbmd0aDsgbWVzaEluZGV4KyspIHsKKyAg
ICAgICAgICAgIHZhciBtZXNoID0gY3VycmVudFJlbmRlckxpc3RbbWVzaEluZGV4XTsKKyAgICAg
ICAgICAgIGlmIChtZXNoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtZXNoLmlzUmVhZHkodGhp
cy5yZWZyZXNoUmF0ZSA9PT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFJl
ZnJlc2hDb3VudGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBtZXNoLl9wcmVBY3RpdmF0ZUZvckludGVybWVkaWF0
ZVJlbmRlcmluZyhzY2VuZVJlbmRlcklkKTsKKyAgICAgICAgICAgICAgICB2YXIgaXNNYXNrZWQg
PSB2b2lkIDA7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlbmRlckxpc3QgJiYgY2FtZXJh
KSB7CisgICAgICAgICAgICAgICAgICAgIGlzTWFza2VkID0gKChtZXNoLmxheWVyTWFzayAmIGNh
bWVyYS5sYXllck1hc2spID09PSAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlzTWFza2VkID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtZXNoLmlzRW5hYmxlZCgpICYmIG1lc2gu
aXNWaXNpYmxlICYmIG1lc2guc3ViTWVzaGVzICYmICFpc01hc2tlZCkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAobWVzaC5fYWN0aXZhdGUoc2NlbmVSZW5kZXJJZCwgdHJ1ZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbWVzaC5pc0FuSW5zdGFuY2UpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZXNoLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9vbmx5
Rm9ySW5zdGFuY2VzSW50ZXJtZWRpYXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtZXNoID0gbWVzaC5zb3VyY2VNZXNoOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRh
SW5mby5faXNBY3RpdmVJbnRlcm1lZGlhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgc3ViSW5kZXggPSAwOyBzdWJJbmRleCA8IG1lc2guc3ViTWVzaGVzLmxlbmd0
aDsgc3ViSW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJNZXNo
ID0gbWVzaC5zdWJNZXNoZXNbc3ViSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNjZW5lLl9hY3RpdmVJbmRpY2VzLmFkZENvdW50KHN1Yk1lc2guaW5kZXhDb3VudCwgZmFsc2Up
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZ01hbmFnZXIuZGlz
cGF0Y2goc3ViTWVzaCwgbWVzaCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZm9yICh2YXIgcGFydGljbGVJbmRleCA9IDA7IHBhcnRpY2xlSW5kZXggPCBz
Y2VuZS5wYXJ0aWNsZVN5c3RlbXMubGVuZ3RoOyBwYXJ0aWNsZUluZGV4KyspIHsKKyAgICAgICAg
ICAgIHZhciBwYXJ0aWNsZVN5c3RlbSA9IHNjZW5lLnBhcnRpY2xlU3lzdGVtc1twYXJ0aWNsZUlu
ZGV4XTsKKyAgICAgICAgICAgIHZhciBlbWl0dGVyID0gcGFydGljbGVTeXN0ZW0uZW1pdHRlcjsK
KyAgICAgICAgICAgIGlmICghcGFydGljbGVTeXN0ZW0uaXNTdGFydGVkKCkgfHwgIWVtaXR0ZXIg
fHwgIWVtaXR0ZXIucG9zaXRpb24gfHwgIWVtaXR0ZXIuaXNFbmFibGVkKCkpIHsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdXJyZW50
UmVuZGVyTGlzdC5pbmRleE9mKGVtaXR0ZXIpID49IDApIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9yZW5kZXJpbmdNYW5hZ2VyLmRpc3BhdGNoUGFydGljbGVzKHBhcnRpY2xlU3lzdGVtKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5pc0N1YmUpIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5yZW5kZXJUb1RhcmdldChmYWNlLCBjdXJyZW50UmVuZGVyTGlzdCwgdXNlQ2Ft
ZXJhUG9zdFByb2Nlc3MsIGR1bXBGb3JEZWJ1Zyk7CisgICAgICAgICAgICAgICAgc2NlbmUuaW5j
cmVtZW50UmVuZGVySWQoKTsKKyAgICAgICAgICAgICAgICBzY2VuZS5yZXNldENhY2hlZE1hdGVy
aWFsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLnJlbmRlclRvVGFyZ2V0KDAsIGN1cnJlbnRSZW5kZXJMaXN0LCB1c2VDYW1lcmFQ
b3N0UHJvY2VzcywgZHVtcEZvckRlYnVnKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uQWZ0
ZXJVbmJpbmRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgaWYgKHNj
ZW5lLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgLy8gRG8gbm90IGF2b2lkIHNldHRpbmcg
dW5pZm9ybXMgd2hlbiBtdWx0aXBsZSBzY2VuZXMgYXJlIGFjdGl2ZSBhcyBhbm90aGVyIGNhbWVy
YSBtYXkgaGF2ZSBvdmVyd3JpdGUgdGhlc2UKKyAgICAgICAgICAgIGlmIChzY2VuZS5nZXRFbmdp
bmUoKS5zY2VuZXMubGVuZ3RoID4gMSB8fCAodGhpcy5hY3RpdmVDYW1lcmEgJiYgdGhpcy5hY3Rp
dmVDYW1lcmEgIT09IHNjZW5lLmFjdGl2ZUNhbWVyYSkpIHsKKyAgICAgICAgICAgICAgICBzY2Vu
ZS5zZXRUcmFuc2Zvcm1NYXRyaXgoc2NlbmUuYWN0aXZlQ2FtZXJhLmdldFZpZXdNYXRyaXgoKSwg
c2NlbmUuYWN0aXZlQ2FtZXJhLmdldFByb2plY3Rpb25NYXRyaXgodHJ1ZSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZW5naW5lLnNldFZpZXdwb3J0KHNjZW5lLmFjdGl2ZUNhbWVyYS52
aWV3cG9ydCk7CisgICAgICAgIH0KKyAgICAgICAgc2NlbmUucmVzZXRDYWNoZWRNYXRlcmlhbCgp
OworICAgIH07CisgICAgUmVuZGVyVGFyZ2V0VGV4dHVyZS5wcm90b3R5cGUuX2Jlc3RSZWZsZWN0
aW9uUmVuZGVyVGFyZ2V0RGltZW5zaW9uID0gZnVuY3Rpb24gKHJlbmRlckRpbWVuc2lvbiwgc2Nh
bGUpIHsKKyAgICAgICAgdmFyIG1pbmltdW0gPSAxMjg7CisgICAgICAgIHZhciB4ID0gcmVuZGVy
RGltZW5zaW9uICogc2NhbGU7CisgICAgICAgIHZhciBjdXJ2ZWQgPSBfRW5naW5lc19lbmdpbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siRW5naW5lIl0uTmVhcmVzdFBPVCh4ICsgKG1p
bmltdW0gKiBtaW5pbXVtIC8gKG1pbmltdW0gKyB4KSkpOworICAgICAgICAvLyBFbnN1cmUgd2Ug
ZG9uJ3QgZXhjZWVkIHRoZSByZW5kZXIgZGltZW5zaW9uICh3aGlsZSBzdGF5aW5nIFBPVCkKKyAg
ICAgICAgcmV0dXJuIE1hdGgubWluKF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOV9fWyJFbmdpbmUiXS5GbG9vclBPVChyZW5kZXJEaW1lbnNpb24pLCBjdXJ2ZWQpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqIEBwYXJhbSBmYWNlSW5kZXgg
ZmFjZSBpbmRleCB0byBiaW5kIHRvIGlmIHRoaXMgaXMgYSBjdWJldGV4dHVyZQorICAgICAqLwor
ICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLl9iaW5kRnJhbWVCdWZmZXIgPSBmdW5j
dGlvbiAoZmFjZUluZGV4KSB7CisgICAgICAgIGlmIChmYWNlSW5kZXggPT09IHZvaWQgMCkgeyBm
YWNlSW5kZXggPSAwOyB9CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAg
ICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHZhciBlbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgaWYgKHRoaXMuX3Rl
eHR1cmUpIHsKKyAgICAgICAgICAgIGVuZ2luZS5iaW5kRnJhbWVidWZmZXIodGhpcy5fdGV4dHVy
ZSwgdGhpcy5pc0N1YmUgPyBmYWNlSW5kZXggOiB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZp
bmVkLCB0aGlzLmlnbm9yZUNhbWVyYVZpZXdwb3J0LCB0aGlzLmRlcHRoU3RlbmNpbFRleHR1cmUg
PyB0aGlzLmRlcHRoU3RlbmNpbFRleHR1cmUgOiB1bmRlZmluZWQpOworICAgICAgICB9CisgICAg
fTsKKyAgICBSZW5kZXJUYXJnZXRUZXh0dXJlLnByb3RvdHlwZS51bmJpbmRGcmFtZUJ1ZmZlciA9
IGZ1bmN0aW9uIChlbmdpbmUsIGZhY2VJbmRleCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlz
OworICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBlbmdpbmUudW5CaW5kRnJhbWVidWZmZXIodGhpcy5fdGV4dHVyZSwg
dGhpcy5pc0N1YmUsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLm9uQWZ0ZXJSZW5k
ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhmYWNlSW5kZXgpOworICAgICAgICB9KTsKKyAg
ICB9OworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLnJlbmRlclRvVGFyZ2V0ID0g
ZnVuY3Rpb24gKGZhY2VJbmRleCwgY3VycmVudFJlbmRlckxpc3QsIHVzZUNhbWVyYVBvc3RQcm9j
ZXNzLCBkdW1wRm9yRGVidWcpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgp
OworICAgICAgICBpZiAoIXNjZW5lKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAoIXRo
aXMuX3RleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAv
LyBCaW5kCisgICAgICAgIGlmICh0aGlzLl9wb3N0UHJvY2Vzc01hbmFnZXIpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3Bvc3RQcm9jZXNzTWFuYWdlci5fcHJlcGFyZUZyYW1lKHRoaXMuX3RleHR1cmUs
IHRoaXMuX3Bvc3RQcm9jZXNzZXMpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCF1c2VD
YW1lcmFQb3N0UHJvY2VzcyB8fCAhc2NlbmUucG9zdFByb2Nlc3NNYW5hZ2VyLl9wcmVwYXJlRnJh
bWUodGhpcy5fdGV4dHVyZSkpIHsKKyAgICAgICAgICAgIHRoaXMuX2JpbmRGcmFtZUJ1ZmZlcihm
YWNlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIHRoaXMub25CZWZvcmVSZW5kZXJPYnNlcnZh
YmxlLm5vdGlmeU9ic2VydmVycyhmYWNlSW5kZXgpOworICAgICAgICAvLyBDbGVhcgorICAgICAg
ICBpZiAodGhpcy5vbkNsZWFyT2JzZXJ2YWJsZS5oYXNPYnNlcnZlcnMoKSkgeworICAgICAgICAg
ICAgdGhpcy5vbkNsZWFyT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoZW5naW5lKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVuZ2luZS5jbGVhcih0aGlzLmNsZWFy
Q29sb3IgfHwgc2NlbmUuY2xlYXJDb2xvciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCF0aGlzLl9kb05vdENoYW5nZUFzcGVjdFJhdGlvKSB7CisgICAgICAgICAg
ICBzY2VuZS51cGRhdGVUcmFuc2Zvcm1NYXRyaXgodHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQmVmb3JlIENhbWVyYSBEcmF3CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBzY2Vu
ZS5fYmVmb3JlUmVuZGVyVGFyZ2V0RHJhd1N0YWdlOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewor
ICAgICAgICAgICAgdmFyIHN0ZXAgPSBfYVtfaV07CisgICAgICAgICAgICBzdGVwLmFjdGlvbih0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZW5kZXIKKyAgICAgICAgdGhpcy5fcmVuZGVy
aW5nTWFuYWdlci5yZW5kZXIodGhpcy5jdXN0b21SZW5kZXJGdW5jdGlvbiwgY3VycmVudFJlbmRl
ckxpc3QsIHRoaXMucmVuZGVyUGFydGljbGVzLCB0aGlzLnJlbmRlclNwcml0ZXMpOworICAgICAg
ICAvLyBBZnRlciBDYW1lcmEgRHJhdworICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gc2Nl
bmUuX2FmdGVyUmVuZGVyVGFyZ2V0RHJhd1N0YWdlOyBfYiA8IF9jLmxlbmd0aDsgX2IrKykgewor
ICAgICAgICAgICAgdmFyIHN0ZXAgPSBfY1tfYl07CisgICAgICAgICAgICBzdGVwLmFjdGlvbih0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcG9zdFByb2Nlc3NNYW5hZ2VyKSB7
CisgICAgICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc01hbmFnZXIuX2ZpbmFsaXplRnJhbWUoZmFs
c2UsIHRoaXMuX3RleHR1cmUsIGZhY2VJbmRleCwgdGhpcy5fcG9zdFByb2Nlc3NlcywgdGhpcy5p
Z25vcmVDYW1lcmFWaWV3cG9ydCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodXNlQ2Ft
ZXJhUG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgIHNjZW5lLnBvc3RQcm9jZXNzTWFuYWdlci5f
ZmluYWxpemVGcmFtZShmYWxzZSwgdGhpcy5fdGV4dHVyZSwgZmFjZUluZGV4KTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXRoaXMuX2RvTm90Q2hhbmdlQXNwZWN0UmF0aW8pIHsKKyAgICAgICAg
ICAgIHNjZW5lLnVwZGF0ZVRyYW5zZm9ybU1hdHJpeCh0cnVlKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBEdW1wID8KKyAgICAgICAgaWYgKGR1bXBGb3JEZWJ1ZykgeworICAgICAgICAgICAgX01p
c2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5EdW1wRnJhbWVi
dWZmZXIodGhpcy5nZXRSZW5kZXJXaWR0aCgpLCB0aGlzLmdldFJlbmRlckhlaWdodCgpLCBlbmdp
bmUpOworICAgICAgICB9CisgICAgICAgIC8vIFVuYmluZAorICAgICAgICBpZiAoIXRoaXMuaXND
dWJlIHx8IGZhY2VJbmRleCA9PT0gNSkgeworICAgICAgICAgICAgaWYgKHRoaXMuaXNDdWJlKSB7
CisgICAgICAgICAgICAgICAgaWYgKGZhY2VJbmRleCA9PT0gNSkgeworICAgICAgICAgICAgICAg
ICAgICBlbmdpbmUuZ2VuZXJhdGVNaXBNYXBzRm9yQ3ViZW1hcCh0aGlzLl90ZXh0dXJlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnVuYmluZEZy
YW1lQnVmZmVyKGVuZ2luZSwgZmFjZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHRoaXMub25BZnRlclJlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJz
KGZhY2VJbmRleCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIE92ZXJyaWRl
cyB0aGUgZGVmYXVsdCBzb3J0IGZ1bmN0aW9uIGFwcGxpZWQgaW4gdGhlIHJlbmRlcmdpbmcgZ3Jv
dXAgdG8gcHJlcGFyZSB0aGUgbWVzaGVzLgorICAgICAqIFRoaXMgYWxsb3dlZCBjb250cm9sIGZv
ciBmcm9udCB0byBiYWNrIHJlbmRlcmluZyBvciByZXZlcnNseSBkZXBlbmRpbmcgb2YgdGhlIHNw
ZWNpYWwgbmVlZHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVuZGVyaW5nR3JvdXBJZCBUaGUg
cmVuZGVyaW5nIGdyb3VwIGlkIGNvcnJlc3BvbmRpbmcgdG8gaXRzIGluZGV4CisgICAgICogQHBh
cmFtIG9wYXF1ZVNvcnRDb21wYXJlRm4gVGhlIG9wYXF1ZSBxdWV1ZSBjb21wYXJpc29uIGZ1bmN0
aW9uIHVzZSB0byBzb3J0LgorICAgICAqIEBwYXJhbSBhbHBoYVRlc3RTb3J0Q29tcGFyZUZuIFRo
ZSBhbHBoYSB0ZXN0IHF1ZXVlIGNvbXBhcmlzb24gZnVuY3Rpb24gdXNlIHRvIHNvcnQuCisgICAg
ICogQHBhcmFtIHRyYW5zcGFyZW50U29ydENvbXBhcmVGbiBUaGUgdHJhbnNwYXJlbnQgcXVldWUg
Y29tcGFyaXNvbiBmdW5jdGlvbiB1c2UgdG8gc29ydC4KKyAgICAgKi8KKyAgICBSZW5kZXJUYXJn
ZXRUZXh0dXJlLnByb3RvdHlwZS5zZXRSZW5kZXJpbmdPcmRlciA9IGZ1bmN0aW9uIChyZW5kZXJp
bmdHcm91cElkLCBvcGFxdWVTb3J0Q29tcGFyZUZuLCBhbHBoYVRlc3RTb3J0Q29tcGFyZUZuLCB0
cmFuc3BhcmVudFNvcnRDb21wYXJlRm4pIHsKKyAgICAgICAgaWYgKG9wYXF1ZVNvcnRDb21wYXJl
Rm4gPT09IHZvaWQgMCkgeyBvcGFxdWVTb3J0Q29tcGFyZUZuID0gbnVsbDsgfQorICAgICAgICBp
ZiAoYWxwaGFUZXN0U29ydENvbXBhcmVGbiA9PT0gdm9pZCAwKSB7IGFscGhhVGVzdFNvcnRDb21w
YXJlRm4gPSBudWxsOyB9CisgICAgICAgIGlmICh0cmFuc3BhcmVudFNvcnRDb21wYXJlRm4gPT09
IHZvaWQgMCkgeyB0cmFuc3BhcmVudFNvcnRDb21wYXJlRm4gPSBudWxsOyB9CisgICAgICAgIHRo
aXMuX3JlbmRlcmluZ01hbmFnZXIuc2V0UmVuZGVyaW5nT3JkZXIocmVuZGVyaW5nR3JvdXBJZCwg
b3BhcXVlU29ydENvbXBhcmVGbiwgYWxwaGFUZXN0U29ydENvbXBhcmVGbiwgdHJhbnNwYXJlbnRT
b3J0Q29tcGFyZUZuKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB3aGV0aGVy
IG9yIG5vdCB0aGUgc3RlbmNpbCBhbmQgZGVwdGggYnVmZmVyIGFyZSBjbGVhcmVkIGJldHdlZW4g
dHdvIHJlbmRlcmluZyBncm91cHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVuZGVyaW5nR3Jv
dXBJZCBUaGUgcmVuZGVyaW5nIGdyb3VwIGlkIGNvcnJlc3BvbmRpbmcgdG8gaXRzIGluZGV4Cisg
ICAgICogQHBhcmFtIGF1dG9DbGVhckRlcHRoU3RlbmNpbCBBdXRvbWF0aWNhbGx5IGNsZWFycyBk
ZXB0aCBhbmQgc3RlbmNpbCBiZXR3ZWVuIGdyb3VwcyBpZiB0cnVlLgorICAgICAqLworICAgIFJl
bmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLnNldFJlbmRlcmluZ0F1dG9DbGVhckRlcHRoU3Rl
bmNpbCA9IGZ1bmN0aW9uIChyZW5kZXJpbmdHcm91cElkLCBhdXRvQ2xlYXJEZXB0aFN0ZW5jaWwp
IHsKKyAgICAgICAgdGhpcy5fcmVuZGVyaW5nTWFuYWdlci5zZXRSZW5kZXJpbmdBdXRvQ2xlYXJE
ZXB0aFN0ZW5jaWwocmVuZGVyaW5nR3JvdXBJZCwgYXV0b0NsZWFyRGVwdGhTdGVuY2lsKTsKKyAg
ICAgICAgdGhpcy5fcmVuZGVyaW5nTWFuYWdlci5fdXNlU2NlbmVBdXRvQ2xlYXJTZXR1cCA9IGZh
bHNlOworICAgIH07CisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSB0ZXh0dXJlLgorICAgICAq
IEByZXR1cm5zIHRoZSBjbG9uZWQgdGV4dHVyZQorICAgICAqLworICAgIFJlbmRlclRhcmdldFRl
eHR1cmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgdGV4dHVy
ZVNpemUgPSB0aGlzLmdldFNpemUoKTsKKyAgICAgICAgdmFyIG5ld1RleHR1cmUgPSBuZXcgUmVu
ZGVyVGFyZ2V0VGV4dHVyZSh0aGlzLm5hbWUsIHRleHR1cmVTaXplLCB0aGlzLmdldFNjZW5lKCks
IHRoaXMuX3JlbmRlclRhcmdldE9wdGlvbnMuZ2VuZXJhdGVNaXBNYXBzLCB0aGlzLl9kb05vdENo
YW5nZUFzcGVjdFJhdGlvLCB0aGlzLl9yZW5kZXJUYXJnZXRPcHRpb25zLnR5cGUsIHRoaXMuaXND
dWJlLCB0aGlzLl9yZW5kZXJUYXJnZXRPcHRpb25zLnNhbXBsaW5nTW9kZSwgdGhpcy5fcmVuZGVy
VGFyZ2V0T3B0aW9ucy5nZW5lcmF0ZURlcHRoQnVmZmVyLCB0aGlzLl9yZW5kZXJUYXJnZXRPcHRp
b25zLmdlbmVyYXRlU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIC8vIEJhc2UgdGV4dHVyZQorICAg
ICAgICBuZXdUZXh0dXJlLmhhc0FscGhhID0gdGhpcy5oYXNBbHBoYTsKKyAgICAgICAgbmV3VGV4
dHVyZS5sZXZlbCA9IHRoaXMubGV2ZWw7CisgICAgICAgIC8vIFJlbmRlclRhcmdldCBUZXh0dXJl
CisgICAgICAgIG5ld1RleHR1cmUuY29vcmRpbmF0ZXNNb2RlID0gdGhpcy5jb29yZGluYXRlc01v
ZGU7CisgICAgICAgIGlmICh0aGlzLnJlbmRlckxpc3QpIHsKKyAgICAgICAgICAgIG5ld1RleHR1
cmUucmVuZGVyTGlzdCA9IHRoaXMucmVuZGVyTGlzdC5zbGljZSgwKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbmV3VGV4dHVyZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6
ZSB0aGUgdGV4dHVyZSB0byBhIEpTT04gcmVwcmVzZW50YXRpb24gd2UgY2FuIGVhc2lseSB1c2Ug
aW4gdGhlIHJlc2VwZWN0aXZlIFBhcnNlIGZ1bmN0aW9uLgorICAgICAqIEByZXR1cm5zIFRoZSBK
U09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0dXJlCisgICAgICovCisgICAgUmVuZGVyVGFy
Z2V0VGV4dHVyZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAoIXRoaXMubmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSBfc3VwZXIucHJvdG90eXBlLnNlcmlhbGl6
ZS5jYWxsKHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJlbmRlclRhcmdldFNp
emUgPSB0aGlzLmdldFJlbmRlclNpemUoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5y
ZW5kZXJMaXN0ID0gW107CisgICAgICAgIGlmICh0aGlzLnJlbmRlckxpc3QpIHsKKyAgICAgICAg
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnJlbmRlckxpc3QubGVuZ3RoOyBp
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5yZW5kZXJMaXN0
LnB1c2godGhpcy5yZW5kZXJMaXN0W2luZGV4XS5pZCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiAgVGhpcyB3aWxsIHJlbW92ZSB0aGUgYXR0YWNoZWQgZnJhbWVidWZmZXIgb2JqZWN0
cy4gVGhlIHRleHR1cmUgd2lsbCBub3QgYmUgYWJsZSB0byBiZSB1c2VkIGFzIHJlbmRlciB0YXJn
ZXQgYW55bW9yZQorICAgICAqLworICAgIFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLmRp
c3Bvc2VGcmFtZWJ1ZmZlck9iamVjdHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBvYmpC
dWZmZXIgPSB0aGlzLmdldEludGVybmFsVGV4dHVyZSgpOworICAgICAgICB2YXIgc2NlbmUgPSB0
aGlzLmdldFNjZW5lKCk7CisgICAgICAgIGlmIChvYmpCdWZmZXIgJiYgc2NlbmUpIHsKKyAgICAg
ICAgICAgIHNjZW5lLmdldEVuZ2luZSgpLl9yZWxlYXNlRnJhbWVidWZmZXJPYmplY3RzKG9iakJ1
ZmZlcik7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2UgdGhlIHRl
eHR1cmUgYW5kIHJlbGVhc2UgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICAgICAqLworICAg
IFJlbmRlclRhcmdldFRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMub25SZXNpemVPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25D
bGVhck9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2
YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQWZ0ZXJVbmJpbmRPYnNlcnZhYmxlLmNsZWFy
KCk7CisgICAgICAgIHRoaXMub25CZWZvcmVCaW5kT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAg
ICB0aGlzLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICBpZiAodGhp
cy5fcG9zdFByb2Nlc3NNYW5hZ2VyKSB7CisgICAgICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc01h
bmFnZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3NNYW5hZ2VyID0g
bnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmNsZWFyUG9zdFByb2Nlc3Nlcyh0cnVlKTsK
KyAgICAgICAgaWYgKHRoaXMuX3Jlc2l6ZU9ic2VydmVyKSB7CisgICAgICAgICAgICB0aGlzLmdl
dFNjZW5lKCkuZ2V0RW5naW5lKCkub25SZXNpemVPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9yZXNp
emVPYnNlcnZlcik7CisgICAgICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG51bGw7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5yZW5kZXJMaXN0ID0gbnVsbDsKKyAgICAgICAgLy8gUmVt
b3ZlIGZyb20gY3VzdG9tIHJlbmRlciB0YXJnZXRzCisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMu
Z2V0U2NlbmUoKTsKKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHZhciBpbmRleCA9IHNjZW5lLmN1c3RvbVJlbmRlclRhcmdldHMu
aW5kZXhPZih0aGlzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IDApIHsKKyAgICAgICAgICAgIHNj
ZW5lLmN1c3RvbVJlbmRlclRhcmdldHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAg
ICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gc2NlbmUuY2FtZXJhczsgX2kgPCBfYS5sZW5ndGg7
IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSBfYVtfaV07CisgICAgICAgICAgICBp
bmRleCA9IGNhbWVyYS5jdXN0b21SZW5kZXJUYXJnZXRzLmluZGV4T2YodGhpcyk7CisgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAgICAgICAgICAgIGNhbWVyYS5jdXN0b21SZW5k
ZXJUYXJnZXRzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuZGVwdGhTdGVuY2lsVGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5n
ZXRTY2VuZSgpLmdldEVuZ2luZSgpLl9yZWxlYXNlVGV4dHVyZSh0aGlzLmRlcHRoU3RlbmNpbFRl
eHR1cmUpOworICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxs
KHRoaXMpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBSZW5kZXJUYXJnZXRUZXh0
dXJlLnByb3RvdHlwZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMu
cmVmcmVzaFJhdGUgPT09IFJlbmRlclRhcmdldFRleHR1cmUuUkVGUkVTSFJBVEVfUkVOREVSX09O
Q0UpIHsKKyAgICAgICAgICAgIHRoaXMucmVmcmVzaFJhdGUgPSBSZW5kZXJUYXJnZXRUZXh0dXJl
LlJFRlJFU0hSQVRFX1JFTkRFUl9PTkNFOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9w
b3N0UHJvY2Vzc01hbmFnZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzTWFuYWdl
ci5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbGVhciB0
aGUgaW5mbyByZWxhdGVkIHRvIHJlbmRlcmluZyBncm91cHMgcHJldmVudGluZyByZXRlbnRpb24g
cG9pbnQgaW4gbWF0ZXJpYWwgZGlzcG9zZS4KKyAgICAgKi8KKyAgICBSZW5kZXJUYXJnZXRUZXh0
dXJlLnByb3RvdHlwZS5mcmVlUmVuZGVyaW5nR3JvdXBzID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAodGhpcy5fcmVuZGVyaW5nTWFuYWdlcikgeworICAgICAgICAgICAgdGhpcy5fcmVuZGVy
aW5nTWFuYWdlci5mcmVlUmVuZGVyaW5nR3JvdXBzKCk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldHMgdGhlIG51bWJlciBvZiB2aWV3cyB0aGUgY29ycmVzcG9uZGluZyB0
byB0aGUgdGV4dHVyZSAoZWcuIGEgTXVsdGl2aWV3UmVuZGVyVGFyZ2V0IHdpbGwgaGF2ZSA+IDEp
CisgICAgICogQHJldHVybnMgdGhlIHZpZXcgY291bnQKKyAgICAgKi8KKyAgICBSZW5kZXJUYXJn
ZXRUZXh0dXJlLnByb3RvdHlwZS5nZXRWaWV3Q291bnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiAxOworICAgIH07CisgICAgLyoqCisgICAgICogVGhlIHRleHR1cmUgd2lsbCBvbmx5
IGJlIHJlbmRlcmVkIG9uY2Ugd2hpY2ggY2FuIGJlIHVzZWZ1bCB0byBpbXByb3ZlIHBlcmZvcm1h
bmNlIGlmIGV2ZXJ5dGhpbmcgaW4geW91ciByZW5kZXIgaXMgc3RhdGljIGZvciBpbnN0YW5jZS4K
KyAgICAgKi8KKyAgICBSZW5kZXJUYXJnZXRUZXh0dXJlLlJFRlJFU0hSQVRFX1JFTkRFUl9PTkNF
ID0gMDsKKyAgICAvKioKKyAgICAgKiBUaGUgdGV4dHVyZSB3aWxsIG9ubHkgYmUgcmVuZGVyZWQg
cmVuZGVyZWQgZXZlcnkgZnJhbWUgYW5kIGlzIHJlY29tZW5kZWQgZm9yIGR5bmFtaWMgY29udGVu
dHMuCisgICAgICovCisgICAgUmVuZGVyVGFyZ2V0VGV4dHVyZS5SRUZSRVNIUkFURV9SRU5ERVJf
T05FVkVSWUZSQU1FID0gMTsKKyAgICAvKioKKyAgICAgKiBUaGUgdGV4dHVyZSB3aWxsIGJlIHJl
bmRlcmVkIGV2ZXJ5IDIgZnJhbWVzIHdoaWNoIGNvdWxkIGJlIGVub3VnaCBpZiB5b3VyIGR5bmFt
aWMgb2JqZWN0cyBhcmUgbm90CisgICAgICogdGhlIGNlbnRyYWwgcG9pbnQgb2YgeW91ciBlZmZl
Y3QgYW5kIGNhbiBzYXZlIGEgbG90IG9mIHBlcmZvcm1hbmNlcy4KKyAgICAgKi8KKyAgICBSZW5k
ZXJUYXJnZXRUZXh0dXJlLlJFRlJFU0hSQVRFX1JFTkRFUl9PTkVWRVJZVFdPRlJBTUVTID0gMjsK
KyAgICByZXR1cm4gUmVuZGVyVGFyZ2V0VGV4dHVyZTsKK30oX01hdGVyaWFsc19UZXh0dXJlc190
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXSkpOworCitfTWF0
ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGV4
dHVyZSJdLl9DcmVhdGVSZW5kZXJUYXJnZXRUZXh0dXJlID0gZnVuY3Rpb24gKG5hbWUsIHJlbmRl
clRhcmdldFNpemUsIHNjZW5lLCBnZW5lcmF0ZU1pcE1hcHMpIHsKKyAgICByZXR1cm4gbmV3IFJl
bmRlclRhcmdldFRleHR1cmUobmFtZSwgcmVuZGVyVGFyZ2V0U2l6ZSwgc2NlbmUsIGdlbmVyYXRl
TWlwTWFwcyk7Cit9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvVGV4dHVy
ZXMvdGV4dHVyZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBUZXh0dXJlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRleHR1
cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRleHR1cmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVj
b3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNl
cnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfYmFzZVRleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01hdGVyaWFscy9UZXh0dXJlcy9iYXNlVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMv
YmFzZVRleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL3R5cGVT
dG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2RldlRvb2xzICovICIuL01pc2MvZGV2VG9vbHMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190aW1pbmdUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy90
aW1pbmdUb29scyAqLyAiLi9NaXNjL3RpbWluZ1Rvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfaW5zdGFudGlhdGlvblRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2luc3RhbnRpYXRpb25U
b29scyAqLyAiLi9NaXNjL2luc3RhbnRpYXRpb25Ub29scy50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRoc19tYXRoX3BsYW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5wbGFuZSAqLyAiLi9N
YXRocy9tYXRoLnBsYW5lLnRzIik7CisKKworCisKKworCisKKworCisKKworLyoqCisgKiBUaGlz
IHJlcHJlc2VudHMgYSB0ZXh0dXJlIGluIGJhYnlsb24uIEl0IGNhbiBiZSBlYXNpbHkgbG9hZGVk
IGZyb20gYSBuZXR3b3JrLCBiYXNlNjQgb3IgaHRtbCBpbnB1dC4KKyAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvbWF0ZXJpYWxzI3RleHR1cmUKKyAqLwordmFyIFRl
eHR1cmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVGV4dHVyZSwgX3N1cGVyKTsK
KyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgdGV4dHVyZS4KKyAgICAgKiBUaGlz
IHJlcHJlc2VudHMgYSB0ZXh0dXJlIGluIGJhYnlsb24uIEl0IGNhbiBiZSBlYXNpbHkgbG9hZGVk
IGZyb20gYSBuZXR3b3JrLCBiYXNlNjQgb3IgaHRtbCBpbnB1dC4KKyAgICAgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL21hdGVyaWFscyN0ZXh0dXJlCisgICAgICog
QHBhcmFtIHVybCBkZWZpbmUgdGhlIHVybCBvZiB0aGUgcGljdHVyZSB0byBsb2FkIGFzIGEgdGV4
dHVyZQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmUgdGhlIHNjZW5lIG9yIGVuZ2luZSB0aGUg
dGV4dHVyZSB3aWxsIGJlbG9uZyB0bworICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmUgaWYg
dGhlIHRleHR1cmUgd2lsbCByZXF1aXJlIG1pcCBtYXBzIG9yIG5vdAorICAgICAqIEBwYXJhbSBp
bnZlcnRZIGRlZmluZSBpZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSBpbnZlcnRlZCBvbiB0aGUg
eSBheGlzIGR1cmluZyBsb2FkaW5nCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBkZWZpbmUg
dGhlIHNhbXBsaW5nIG1vZGUgd2Ugd2FudCBmb3IgdGhlIHRleHR1cmUgd2hpbGUgZmVjdGNoaW5n
IGZyb20gaXQgKFRleHR1cmUuTkVBUkVTVF9TQU1QTElOR01PREUuLi4pCisgICAgICogQHBhcmFt
IG9uTG9hZCBkZWZpbmUgYSBjYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUgdGV4dHVyZSBoYXMg
YmVlbiBsb2FkZWQKKyAgICAgKiBAcGFyYW0gb25FcnJvciBkZWZpbmUgYSBjYWxsYmFjayB0cmln
Z2VyZWQgd2hlbiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIGxvYWRpbmcgc2Vzc2lvbgor
ICAgICAqIEBwYXJhbSBidWZmZXIgZGVmaW5lIHRoZSBidWZmZXIgdG8gbG9hZCB0aGUgdGV4dHVy
ZSBmcm9tIGluIGNhc2UgdGhlIHRleHR1cmUgaXMgbG9hZGVkIGZyb20gYSBidWZmZXIgcmVwcmVz
ZW50YXRpb24KKyAgICAgKiBAcGFyYW0gZGVsZXRlQnVmZmVyIGRlZmluZSBpZiB0aGUgYnVmZmVy
IHdlIGFyZSBsb2FkaW5nIHRoZSB0ZXh0dXJlIGZyb20gc2hvdWxkIGJlIGRlbGV0ZWQgYWZ0ZXIg
bG9hZAorICAgICAqIEBwYXJhbSBmb3JtYXQgZGVmaW5lIHRoZSBmb3JtYXQgb2YgdGhlIHRleHR1
cmUgd2UgYXJlIHRyeWluZyB0byBsb2FkIChFbmdpbmUuVEVYVFVSRUZPUk1BVF9SR0JBLi4uKQor
ICAgICAqLworICAgIGZ1bmN0aW9uIFRleHR1cmUodXJsLCBzY2VuZU9yRW5naW5lLCBub01pcG1h
cCwgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlLCBvbkxvYWQsIG9uRXJyb3IsIGJ1ZmZlciwgZGVsZXRl
QnVmZmVyLCBmb3JtYXQpIHsKKyAgICAgICAgaWYgKG5vTWlwbWFwID09PSB2b2lkIDApIHsgbm9N
aXBtYXAgPSBmYWxzZTsgfQorICAgICAgICBpZiAoaW52ZXJ0WSA9PT0gdm9pZCAwKSB7IGludmVy
dFkgPSB0cnVlOyB9CisgICAgICAgIGlmIChzYW1wbGluZ01vZGUgPT09IHZvaWQgMCkgeyBzYW1w
bGluZ01vZGUgPSBUZXh0dXJlLlRSSUxJTkVBUl9TQU1QTElOR01PREU7IH0KKyAgICAgICAgaWYg
KG9uTG9hZCA9PT0gdm9pZCAwKSB7IG9uTG9hZCA9IG51bGw7IH0KKyAgICAgICAgaWYgKG9uRXJy
b3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbnVsbDsgfQorICAgICAgICBpZiAoYnVmZmVyID09
PSB2b2lkIDApIHsgYnVmZmVyID0gbnVsbDsgfQorICAgICAgICBpZiAoZGVsZXRlQnVmZmVyID09
PSB2b2lkIDApIHsgZGVsZXRlQnVmZmVyID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0g
X3N1cGVyLmNhbGwodGhpcywgKHNjZW5lT3JFbmdpbmUgJiYgc2NlbmVPckVuZ2luZS5nZXRDbGFz
c05hbWUoKSA9PT0gIlNjZW5lIikgPyBzY2VuZU9yRW5naW5lIDogbnVsbCkgfHwgdGhpczsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0aGUgdXJsIG9mIHRoZSB0ZXh0dXJlLgorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMudXJsID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERlZmluZSBhbiBvZmZzZXQgb24gdGhlIHRleHR1cmUgdG8gb2Zmc2V0IHRoZSB1IGNvb3Jk
aW5hdGVzIG9mIHRoZSBVVnMKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL21vcmVfbWF0ZXJpYWxzI29mZnNldHRpbmcKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLnVPZmZzZXQgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGFuIG9m
ZnNldCBvbiB0aGUgdGV4dHVyZSB0byBvZmZzZXQgdGhlIHYgY29vcmRpbmF0ZXMgb2YgdGhlIFVW
cworICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vbW9yZV9t
YXRlcmlhbHMjb2Zmc2V0dGluZworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudk9mZnNldCA9
IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgYW4gb2Zmc2V0IG9uIHRoZSB0ZXh0
dXJlIHRvIHNjYWxlIHRoZSB1IGNvb3JkaW5hdGVzIG9mIHRoZSBVVnMKKyAgICAgICAgICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL21vcmVfbWF0ZXJpYWxzI3RpbGluZwor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudVNjYWxlID0gMS4wOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lIGFuIG9mZnNldCBvbiB0aGUgdGV4dHVyZSB0byBzY2FsZSB0aGUgdiBj
b29yZGluYXRlcyBvZiB0aGUgVVZzCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9tb3JlX21hdGVyaWFscyN0aWxpbmcKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLnZTY2FsZSA9IDEuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSBhbiBv
ZmZzZXQgb24gdGhlIHRleHR1cmUgdG8gcm90YXRlIGFyb3VuZCB0aGUgdSBjb29yZGluYXRlcyBv
ZiB0aGUgVVZzCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9tb3JlX21hdGVyaWFscworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudUFuZyA9IDA7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgYW4gb2Zmc2V0IG9uIHRoZSB0ZXh0dXJlIHRv
IHJvdGF0ZSBhcm91bmQgdGhlIHYgY29vcmRpbmF0ZXMgb2YgdGhlIFVWcworICAgICAgICAgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vbW9yZV9tYXRlcmlhbHMKKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLnZBbmcgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICog
RGVmaW5lIGFuIG9mZnNldCBvbiB0aGUgdGV4dHVyZSB0byByb3RhdGUgYXJvdW5kIHRoZSB3IGNv
b3JkaW5hdGVzIG9mIHRoZSBVVnMgKGluIGNhc2Ugb2YgM2QgdGV4dHVyZSkKKyAgICAgICAgICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL21vcmVfbWF0ZXJpYWxzCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy53QW5nID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZXMgdGhlIGNlbnRlciBvZiByb3RhdGlvbiAoVSkKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLnVSb3RhdGlvbkNlbnRlciA9IDAuNTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERl
ZmluZXMgdGhlIGNlbnRlciBvZiByb3RhdGlvbiAoVikKKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLnZSb3RhdGlvbkNlbnRlciA9IDAuNTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZXMgdGhlIGNlbnRlciBvZiByb3RhdGlvbiAoVykKKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LndSb3RhdGlvbkNlbnRlciA9IDAuNTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExpc3Qgb2Yg
aW5zcGVjdGFibGUgY3VzdG9tIHByb3BlcnRpZXMgKHVzZWQgYnkgdGhlIEluc3BlY3RvcikKKyAg
ICAgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9kZWJ1Z19sYXll
ciNleHRlbnNpYmlsaXR5CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5pbnNwZWN0YWJsZUN1
c3RvbVByb3BlcnRpZXMgPSBudWxsOworICAgICAgICBfdGhpcy5fbm9NaXBtYXAgPSBmYWxzZTsK
KyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2ludmVydFkgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuX3Jvd0dlbmVyYXRpb25NYXRyaXggPSBudWxsOworICAgICAgICBfdGhp
cy5fY2FjaGVkVGV4dHVyZU1hdHJpeCA9IG51bGw7CisgICAgICAgIF90aGlzLl9wcm9qZWN0aW9u
TW9kZU1hdHJpeCA9IG51bGw7CisgICAgICAgIF90aGlzLl90MCA9IG51bGw7CisgICAgICAgIF90
aGlzLl90MSA9IG51bGw7CisgICAgICAgIF90aGlzLl90MiA9IG51bGw7CisgICAgICAgIF90aGlz
Ll9jYWNoZWRVT2Zmc2V0ID0gLTE7CisgICAgICAgIF90aGlzLl9jYWNoZWRWT2Zmc2V0ID0gLTE7
CisgICAgICAgIF90aGlzLl9jYWNoZWRVU2NhbGUgPSAwOworICAgICAgICBfdGhpcy5fY2FjaGVk
VlNjYWxlID0gMDsKKyAgICAgICAgX3RoaXMuX2NhY2hlZFVBbmcgPSAtMTsKKyAgICAgICAgX3Ro
aXMuX2NhY2hlZFZBbmcgPSAtMTsKKyAgICAgICAgX3RoaXMuX2NhY2hlZFdBbmcgPSAtMTsKKyAg
ICAgICAgX3RoaXMuX2NhY2hlZFByb2plY3Rpb25NYXRyaXhJZCA9IC0xOworICAgICAgICBfdGhp
cy5fY2FjaGVkQ29vcmRpbmF0ZXNNb2RlID0gLTE7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisg
ICAgICAgIF90aGlzLl9pbml0aWFsU2FtcGxpbmdNb2RlID0gVGV4dHVyZS5CSUxJTkVBUl9TQU1Q
TElOR01PREU7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9idWZmZXIg
PSBudWxsOworICAgICAgICBfdGhpcy5fZGVsZXRlQnVmZmVyID0gZmFsc2U7CisgICAgICAgIF90
aGlzLl9mb3JtYXQgPSBudWxsOworICAgICAgICBfdGhpcy5fZGVsYXllZE9uTG9hZCA9IG51bGw7
CisgICAgICAgIF90aGlzLl9kZWxheWVkT25FcnJvciA9IG51bGw7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBPYnNlcnZhYmxlIHRyaWdnZXJlZCBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBiZWVuIGxv
YWRlZC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uTG9hZE9ic2VydmFibGUgPSBuZXcg
X01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxl
Il0oKTsKKyAgICAgICAgX3RoaXMuX2lzQmxvY2tpbmcgPSB0cnVlOworICAgICAgICBfdGhpcy5u
YW1lID0gdXJsIHx8ICIiOworICAgICAgICBfdGhpcy51cmwgPSB1cmw7CisgICAgICAgIF90aGlz
Ll9ub01pcG1hcCA9IG5vTWlwbWFwOworICAgICAgICBfdGhpcy5faW52ZXJ0WSA9IGludmVydFk7
CisgICAgICAgIF90aGlzLl9pbml0aWFsU2FtcGxpbmdNb2RlID0gc2FtcGxpbmdNb2RlOworICAg
ICAgICBfdGhpcy5fYnVmZmVyID0gYnVmZmVyOworICAgICAgICBfdGhpcy5fZGVsZXRlQnVmZmVy
ID0gZGVsZXRlQnVmZmVyOworICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBfdGhp
cy5fZm9ybWF0ID0gZm9ybWF0OworICAgICAgICB9CisgICAgICAgIHZhciBzY2VuZSA9IF90aGlz
LmdldFNjZW5lKCk7CisgICAgICAgIHZhciBlbmdpbmUgPSAoc2NlbmVPckVuZ2luZSAmJiBzY2Vu
ZU9yRW5naW5lLmdldENhcHMpID8gc2NlbmVPckVuZ2luZSA6IChzY2VuZSA/IHNjZW5lLmdldEVu
Z2luZSgpIDogbnVsbCk7CisgICAgICAgIGlmICghZW5naW5lKSB7CisgICAgICAgICAgICByZXR1
cm4gX3RoaXM7CisgICAgICAgIH0KKyAgICAgICAgZW5naW5lLm9uQmVmb3JlVGV4dHVyZUluaXRP
YnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhfdGhpcyk7CisgICAgICAgIHZhciBsb2FkID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKF90aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAg
ICAgICAgaWYgKF90aGlzLl90ZXh0dXJlLl9pbnZlcnRWU2NhbGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgX3RoaXMudlNjYWxlICo9IC0xOworICAgICAgICAgICAgICAgICAgICBfdGhpcy52T2Zm
c2V0ICs9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0
ZXh1dHJlIHRvIG1hdGNoIGludGVybmFsIHRleHR1cmUncyB3cmFwcGluZworICAgICAgICAgICAg
ICAgIGlmIChfdGhpcy5fdGV4dHVyZS5fY2FjaGVkV3JhcFUgIT09IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgX3RoaXMud3JhcFUgPSBfdGhpcy5fdGV4dHVyZS5fY2FjaGVkV3JhcFU7Cisg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlLl9jYWNoZWRXcmFwVSA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fdGV4dHVyZS5fY2Fj
aGVkV3JhcFYgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMud3JhcFYgPSBf
dGhpcy5fdGV4dHVyZS5fY2FjaGVkV3JhcFY7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl90
ZXh0dXJlLl9jYWNoZWRXcmFwViA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChfdGhpcy5fdGV4dHVyZS5fY2FjaGVkV3JhcFIgIT09IG51bGwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgX3RoaXMud3JhcFIgPSBfdGhpcy5fdGV4dHVyZS5fY2FjaGVkV3JhcFI7
CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlLl9jYWNoZWRXcmFwUiA9IG51bGw7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF90aGlz
Lm9uTG9hZE9ic2VydmFibGUuaGFzT2JzZXJ2ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICBfdGhp
cy5vbkxvYWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhfdGhpcyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAob25Mb2FkKSB7CisgICAgICAgICAgICAgICAgb25Mb2FkKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIV90aGlzLmlzQmxvY2tpbmcgJiYgc2NlbmUp
IHsKKyAgICAgICAgICAgICAgICBzY2VuZS5yZXNldENhY2hlZE1hdGVyaWFsKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisgICAgICAgIGlmICghX3RoaXMudXJsKSB7CisgICAgICAgICAg
ICBfdGhpcy5fZGVsYXllZE9uTG9hZCA9IGxvYWQ7CisgICAgICAgICAgICBfdGhpcy5fZGVsYXll
ZE9uRXJyb3IgPSBvbkVycm9yOworICAgICAgICAgICAgcmV0dXJuIF90aGlzOworICAgICAgICB9
CisgICAgICAgIF90aGlzLl90ZXh0dXJlID0gX3RoaXMuX2dldEZyb21DYWNoZShfdGhpcy51cmws
IG5vTWlwbWFwLCBzYW1wbGluZ01vZGUsIGludmVydFkpOworICAgICAgICBpZiAoIV90aGlzLl90
ZXh0dXJlKSB7CisgICAgICAgICAgICBpZiAoIXNjZW5lIHx8ICFzY2VuZS51c2VEZWxheWVkVGV4
dHVyZUxvYWRpbmcpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdGV4dHVyZSA9IGVuZ2luZS5j
cmVhdGVUZXh0dXJlKF90aGlzLnVybCwgbm9NaXBtYXAsIGludmVydFksIHNjZW5lLCBzYW1wbGlu
Z01vZGUsIGxvYWQsIG9uRXJyb3IsIF90aGlzLl9idWZmZXIsIHVuZGVmaW5lZCwgX3RoaXMuX2Zv
cm1hdCk7CisgICAgICAgICAgICAgICAgaWYgKGRlbGV0ZUJ1ZmZlcikgeworICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgX3RoaXMuX2J1ZmZlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5kZWxheUxv
YWRTdGF0ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9OT1RMT0FERUQ7CisgICAgICAgICAgICAgICAg
X3RoaXMuX2RlbGF5ZWRPbkxvYWQgPSBsb2FkOworICAgICAgICAgICAgICAgIF90aGlzLl9kZWxh
eWVkT25FcnJvciA9IG9uRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuX3RleHR1cmUuaXNSZWFkeSkgeworICAgICAg
ICAgICAgICAgIF9NaXNjX3RpbWluZ1Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IlRpbWluZ1Rvb2xzIl0uU2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvYWQoKTsg
fSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBf
dGhpcy5fdGV4dHVyZS5vbkxvYWRlZE9ic2VydmFibGUuYWRkKGxvYWQpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFRleHR1cmUucHJvdG90eXBlLCAibm9NaXBtYXAiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBBcmUgbWlwIG1hcHMgZ2VuZXJhdGVkIGZvciB0aGlzIHRleHR1cmUgb3Ig
bm90LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fbm9NaXBtYXA7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShUZXh0dXJlLnByb3RvdHlwZSwgImlzQmxvY2tpbmciLCB7CisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzQmxvY2tpbmc7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBJcyB0aGUgdGV4dHVyZSBwcmV2
ZW50aW5nIG1hdGVyaWFsIHRvIHJlbmRlciB3aGlsZSBsb2FkaW5nLgorICAgICAgICAgKiBJZiBm
YWxzZSwgYSBkZWZhdWx0IHRleHR1cmUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGxvYWRp
bmcgb25lIGR1cmluZyB0aGUgcHJlcGFyYXRpb24gc3RlcC4KKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pc0Jsb2NraW5nID0g
dmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0
dXJlLnByb3RvdHlwZSwgInNhbXBsaW5nTW9kZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldCB0aGUgY3VycmVudCBzYW1wbGluZyBtb2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGV4dHVy
ZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
aWYgKCF0aGlzLl90ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRp
YWxTYW1wbGluZ01vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
dGV4dHVyZS5zYW1wbGluZ01vZGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShUZXh0dXJlLnByb3RvdHlwZSwgImludmVydFkiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0ZXh0dXJlIG5lZWRz
IHRvIGJlIGludmVydGVkIG9uIHRoZSB5IGF4aXMgZHVyaW5nIGxvYWRpbmcKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lu
dmVydFk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgdXJs
IChhbmQgb3B0aW9uYWwgYnVmZmVyKSBvZiB0aGlzIHRleHR1cmUgaWYgdXJsIHdhcyBudWxsIGR1
cmluZyBjb25zdHJ1Y3Rpb24uCisgICAgICogQHBhcmFtIHVybCB0aGUgdXJsIG9mIHRoZSB0ZXh0
dXJlCisgICAgICogQHBhcmFtIGJ1ZmZlciB0aGUgYnVmZmVyIG9mIHRoZSB0ZXh0dXJlIChkZWZh
dWx0cyB0byBudWxsKQorICAgICAqIEBwYXJhbSBvbkxvYWQgY2FsbGJhY2sgY2FsbGVkIHdoZW4g
dGhlIHRleHR1cmUgaXMgbG9hZGVkICAoZGVmYXVsdHMgdG8gbnVsbCkKKyAgICAgKi8KKyAgICBU
ZXh0dXJlLnByb3RvdHlwZS51cGRhdGVVUkwgPSBmdW5jdGlvbiAodXJsLCBidWZmZXIsIG9uTG9h
ZCkgeworICAgICAgICBpZiAoYnVmZmVyID09PSB2b2lkIDApIHsgYnVmZmVyID0gbnVsbDsgfQor
ICAgICAgICBpZiAodGhpcy51cmwpIHsKKyAgICAgICAgICAgIHRoaXMucmVsZWFzZUludGVybmFs
VGV4dHVyZSgpOworICAgICAgICAgICAgdGhpcy5nZXRTY2VuZSgpLm1hcmtBbGxNYXRlcmlhbHNB
c0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJD
b25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGlydHlGbGFnKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLm5hbWUgPSB1cmw7CisgICAgICAgIHRoaXMudXJsID0gdXJsOworICAgICAgICB0aGlz
Ll9idWZmZXIgPSBidWZmZXI7CisgICAgICAgIHRoaXMuZGVsYXlMb2FkU3RhdGUgPSBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uREVM
QVlMT0FEU1RBVEVfTk9UTE9BREVEOworICAgICAgICBpZiAob25Mb2FkKSB7CisgICAgICAgICAg
ICB0aGlzLl9kZWxheWVkT25Mb2FkID0gb25Mb2FkOworICAgICAgICB9CisgICAgICAgIHRoaXMu
ZGVsYXlMb2FkKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGaW5pc2ggdGhlIGxvYWRpbmcg
c2VxdWVuY2Ugb2YgYSB0ZXh0dXJlIGZsYWdnZWQgYXMgZGVsYXllZCBsb2FkLgorICAgICAqIEBo
aWRkZW4KKyAgICAgKi8KKyAgICBUZXh0dXJlLnByb3RvdHlwZS5kZWxheUxvYWQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGlmICh0aGlzLmRlbGF5TG9hZFN0YXRlICE9PSBfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uREVMQVlMT0FE
U1RBVEVfTk9UTE9BREVEKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICBpZiAoIXNjZW5lKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5kZWxheUxvYWRTdGF0
ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25z
dGFudHMiXS5ERUxBWUxPQURTVEFURV9MT0FERUQ7CisgICAgICAgIHRoaXMuX3RleHR1cmUgPSB0
aGlzLl9nZXRGcm9tQ2FjaGUodGhpcy51cmwsIHRoaXMuX25vTWlwbWFwLCB0aGlzLnNhbXBsaW5n
TW9kZSwgdGhpcy5faW52ZXJ0WSk7CisgICAgICAgIGlmICghdGhpcy5fdGV4dHVyZSkgeworICAg
ICAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHNjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZVRleHR1cmUo
dGhpcy51cmwsIHRoaXMuX25vTWlwbWFwLCB0aGlzLl9pbnZlcnRZLCBzY2VuZSwgdGhpcy5zYW1w
bGluZ01vZGUsIHRoaXMuX2RlbGF5ZWRPbkxvYWQsIHRoaXMuX2RlbGF5ZWRPbkVycm9yLCB0aGlz
Ll9idWZmZXIsIG51bGwsIHRoaXMuX2Zvcm1hdCk7CisgICAgICAgICAgICBpZiAodGhpcy5fZGVs
ZXRlQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2J1ZmZlcjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9kZWxheWVkT25Mb2FkKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmUuaXNS
ZWFkeSkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY190aW1pbmdUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fWyJUaW1pbmdUb29scyJdLlNldEltbWVkaWF0ZSh0aGlzLl9kZWxh
eWVkT25Mb2FkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmUub25Mb2FkZWRPYnNlcnZhYmxlLmFkZCh0
aGlzLl9kZWxheWVkT25Mb2FkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGVsYXllZE9uTG9hZCA9IG51bGw7CisgICAgICAgIHRo
aXMuX2RlbGF5ZWRPbkVycm9yID0gbnVsbDsKKyAgICB9OworICAgIFRleHR1cmUucHJvdG90eXBl
Ll9wcmVwYXJlUm93Rm9yVGV4dHVyZUdlbmVyYXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeiwgdCkg
eworICAgICAgICB4ICo9IHRoaXMudVNjYWxlOworICAgICAgICB5ICo9IHRoaXMudlNjYWxlOwor
ICAgICAgICB4IC09IHRoaXMudVJvdGF0aW9uQ2VudGVyICogdGhpcy51U2NhbGU7CisgICAgICAg
IHkgLT0gdGhpcy52Um90YXRpb25DZW50ZXIgKiB0aGlzLnZTY2FsZTsKKyAgICAgICAgeiAtPSB0
aGlzLndSb3RhdGlvbkNlbnRlcjsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc0Zyb21G
bG9hdHNUb1JlZih4LCB5LCB6LCB0aGlzLl9yb3dHZW5lcmF0aW9uTWF0cml4LCB0KTsKKyAgICAg
ICAgdC54ICs9IHRoaXMudVJvdGF0aW9uQ2VudGVyICogdGhpcy51U2NhbGUgKyB0aGlzLnVPZmZz
ZXQ7CisgICAgICAgIHQueSArPSB0aGlzLnZSb3RhdGlvbkNlbnRlciAqIHRoaXMudlNjYWxlICsg
dGhpcy52T2Zmc2V0OworICAgICAgICB0LnogKz0gdGhpcy53Um90YXRpb25DZW50ZXI7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgdGV4dHVyZSBtYXRyaXggd2hpY2gg
aW5jbHVkZXMgdGhlIHJlcXVlc3RlZCBvZmZzZXR0aW5nLCB0aWxpbmcgYW5kIHJvdGF0aW9uIGNv
bXBvbmVudHMuCisgICAgICogQHJldHVybnMgdGhlIHRyYW5zZm9ybSBtYXRyaXggb2YgdGhlIHRl
eHR1cmUuCisgICAgICovCisgICAgVGV4dHVyZS5wcm90b3R5cGUuZ2V0VGV4dHVyZU1hdHJpeCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHRo
aXMudU9mZnNldCA9PT0gdGhpcy5fY2FjaGVkVU9mZnNldCAmJgorICAgICAgICAgICAgdGhpcy52
T2Zmc2V0ID09PSB0aGlzLl9jYWNoZWRWT2Zmc2V0ICYmCisgICAgICAgICAgICB0aGlzLnVTY2Fs
ZSA9PT0gdGhpcy5fY2FjaGVkVVNjYWxlICYmCisgICAgICAgICAgICB0aGlzLnZTY2FsZSA9PT0g
dGhpcy5fY2FjaGVkVlNjYWxlICYmCisgICAgICAgICAgICB0aGlzLnVBbmcgPT09IHRoaXMuX2Nh
Y2hlZFVBbmcgJiYKKyAgICAgICAgICAgIHRoaXMudkFuZyA9PT0gdGhpcy5fY2FjaGVkVkFuZyAm
JgorICAgICAgICAgICAgdGhpcy53QW5nID09PSB0aGlzLl9jYWNoZWRXQW5nKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fY2FjaGVkVGV4dHVyZU1hdHJpeDsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9jYWNoZWRVT2Zmc2V0ID0gdGhpcy51T2Zmc2V0OworICAgICAgICB0aGlzLl9jYWNo
ZWRWT2Zmc2V0ID0gdGhpcy52T2Zmc2V0OworICAgICAgICB0aGlzLl9jYWNoZWRVU2NhbGUgPSB0
aGlzLnVTY2FsZTsKKyAgICAgICAgdGhpcy5fY2FjaGVkVlNjYWxlID0gdGhpcy52U2NhbGU7Cisg
ICAgICAgIHRoaXMuX2NhY2hlZFVBbmcgPSB0aGlzLnVBbmc7CisgICAgICAgIHRoaXMuX2NhY2hl
ZFZBbmcgPSB0aGlzLnZBbmc7CisgICAgICAgIHRoaXMuX2NhY2hlZFdBbmcgPSB0aGlzLndBbmc7
CisgICAgICAgIGlmICghdGhpcy5fY2FjaGVkVGV4dHVyZU1hdHJpeCkgeworICAgICAgICAgICAg
dGhpcy5fY2FjaGVkVGV4dHVyZU1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgICAgICB0aGlzLl9y
b3dHZW5lcmF0aW9uTWF0cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXSgpOworICAgICAgICAgICAgdGhpcy5fdDAgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlpl
cm8oKTsKKyAgICAgICAgICAgIHRoaXMuX3QxID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICB0aGlz
Ll90MiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZWN0b3IzIl0uWmVybygpOworICAgICAgICB9CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5Sb3RhdGlvbllhd1BpdGNoUm9s
bFRvUmVmKHRoaXMudkFuZywgdGhpcy51QW5nLCB0aGlzLndBbmcsIHRoaXMuX3Jvd0dlbmVyYXRp
b25NYXRyaXgpOworICAgICAgICB0aGlzLl9wcmVwYXJlUm93Rm9yVGV4dHVyZUdlbmVyYXRpb24o
MCwgMCwgMCwgdGhpcy5fdDApOworICAgICAgICB0aGlzLl9wcmVwYXJlUm93Rm9yVGV4dHVyZUdl
bmVyYXRpb24oMS4wLCAwLCAwLCB0aGlzLl90MSk7CisgICAgICAgIHRoaXMuX3ByZXBhcmVSb3dG
b3JUZXh0dXJlR2VuZXJhdGlvbigwLCAxLjAsIDAsIHRoaXMuX3QyKTsKKyAgICAgICAgdGhpcy5f
dDEuc3VidHJhY3RJblBsYWNlKHRoaXMuX3QwKTsKKyAgICAgICAgdGhpcy5fdDIuc3VidHJhY3RJ
blBsYWNlKHRoaXMuX3QwKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLkZyb21WYWx1ZXNUb1JlZih0aGlzLl90MS54LCB0
aGlzLl90MS55LCB0aGlzLl90MS56LCAwLjAsIHRoaXMuX3QyLngsIHRoaXMuX3QyLnksIHRoaXMu
X3QyLnosIDAuMCwgdGhpcy5fdDAueCwgdGhpcy5fdDAueSwgdGhpcy5fdDAueiwgMC4wLCAwLjAs
IDAuMCwgMC4wLCAxLjAsIHRoaXMuX2NhY2hlZFRleHR1cmVNYXRyaXgpOworICAgICAgICB2YXIg
c2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7CisgICAgICAgIGlmICghc2NlbmUpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9jYWNoZWRUZXh0dXJlTWF0cml4OworICAgICAgICB9CisgICAgICAg
IHNjZW5lLm1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGlydHlG
bGFnLCBmdW5jdGlvbiAobWF0KSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Lmhhc1RleHR1cmUo
X3RoaXMpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFRleHR1cmVN
YXRyaXg7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgbWF0cml4IHVz
ZWQgdG8gYXBwbHkgcmVmbGVjdGlvbi4gVGhpcyBpcyB1c2VmdWwgdG8gcm90YXRlIGFuIGVudmly
b25tZW50IHRleHR1cmUgZm9yIGluc3RhbmNlLgorICAgICAqIEByZXR1cm5zIFRoZSByZWZsZWN0
aW9uIHRleHR1cmUgdHJhbnNmb3JtCisgICAgICovCisgICAgVGV4dHVyZS5wcm90b3R5cGUuZ2V0
UmVmbGVjdGlvblRleHR1cmVNYXRyaXggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAg
aWYgKCFzY2VuZSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFRleHR1cmVNYXRy
aXg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudU9mZnNldCA9PT0gdGhpcy5fY2FjaGVk
VU9mZnNldCAmJgorICAgICAgICAgICAgdGhpcy52T2Zmc2V0ID09PSB0aGlzLl9jYWNoZWRWT2Zm
c2V0ICYmCisgICAgICAgICAgICB0aGlzLnVTY2FsZSA9PT0gdGhpcy5fY2FjaGVkVVNjYWxlICYm
CisgICAgICAgICAgICB0aGlzLnZTY2FsZSA9PT0gdGhpcy5fY2FjaGVkVlNjYWxlICYmCisgICAg
ICAgICAgICB0aGlzLmNvb3JkaW5hdGVzTW9kZSA9PT0gdGhpcy5fY2FjaGVkQ29vcmRpbmF0ZXNN
b2RlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5jb29yZGluYXRlc01vZGUgPT09IFRleHR1cmUu
UFJPSkVDVElPTl9NT0RFKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFByb2pl
Y3Rpb25NYXRyaXhJZCA9PT0gc2NlbmUuZ2V0UHJvamVjdGlvbk1hdHJpeCgpLnVwZGF0ZUZsYWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFRleHR1cmVNYXRyaXg7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFRleHR1cmVNYXRyaXg7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRUZXh0dXJlTWF0cml4
KSB7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWRUZXh0dXJlTWF0cml4ID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLlplcm8oKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX3Byb2plY3Rpb25Nb2RlTWF0cml4KSB7CisgICAg
ICAgICAgICB0aGlzLl9wcm9qZWN0aW9uTW9kZU1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5aZXJvKCk7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fY2FjaGVkVU9mZnNldCA9IHRoaXMudU9mZnNldDsKKyAgICAgICAgdGhp
cy5fY2FjaGVkVk9mZnNldCA9IHRoaXMudk9mZnNldDsKKyAgICAgICAgdGhpcy5fY2FjaGVkVVNj
YWxlID0gdGhpcy51U2NhbGU7CisgICAgICAgIHRoaXMuX2NhY2hlZFZTY2FsZSA9IHRoaXMudlNj
YWxlOworICAgICAgICB0aGlzLl9jYWNoZWRDb29yZGluYXRlc01vZGUgPSB0aGlzLmNvb3JkaW5h
dGVzTW9kZTsKKyAgICAgICAgc3dpdGNoICh0aGlzLmNvb3JkaW5hdGVzTW9kZSkgeworICAgICAg
ICAgICAgY2FzZSBUZXh0dXJlLlBMQU5BUl9NT0RFOgorICAgICAgICAgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5JZGVudGl0
eVRvUmVmKHRoaXMuX2NhY2hlZFRleHR1cmVNYXRyaXgpOworICAgICAgICAgICAgICAgIHRoaXMu
X2NhY2hlZFRleHR1cmVNYXRyaXhbMF0gPSB0aGlzLnVTY2FsZTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9jYWNoZWRUZXh0dXJlTWF0cml4WzVdID0gdGhpcy52U2NhbGU7CisgICAgICAgICAgICAg
ICAgdGhpcy5fY2FjaGVkVGV4dHVyZU1hdHJpeFsxMl0gPSB0aGlzLnVPZmZzZXQ7CisgICAgICAg
ICAgICAgICAgdGhpcy5fY2FjaGVkVGV4dHVyZU1hdHJpeFsxM10gPSB0aGlzLnZPZmZzZXQ7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRleHR1cmUuUFJPSkVDVElP
Tl9NT0RFOgorICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5Gcm9tVmFsdWVzVG9SZWYoMC41LCAwLjAsIDAuMCwg
MC4wLCAwLjAsIC0wLjUsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuNSwgMC41LCAx
LjAsIDEuMCwgdGhpcy5fcHJvamVjdGlvbk1vZGVNYXRyaXgpOworICAgICAgICAgICAgICAgIHZh
ciBwcm9qZWN0aW9uTWF0cml4ID0gc2NlbmUuZ2V0UHJvamVjdGlvbk1hdHJpeCgpOworICAgICAg
ICAgICAgICAgIHRoaXMuX2NhY2hlZFByb2plY3Rpb25NYXRyaXhJZCA9IHByb2plY3Rpb25NYXRy
aXgudXBkYXRlRmxhZzsKKyAgICAgICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5
VG9SZWYodGhpcy5fcHJvamVjdGlvbk1vZGVNYXRyaXgsIHRoaXMuX2NhY2hlZFRleHR1cmVNYXRy
aXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siTWF0cml4Il0uSWRlbnRpdHlUb1JlZih0aGlzLl9jYWNoZWRUZXh0dXJlTWF0cml4KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzY2VuZS5tYXJrQWxsTWF0
ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZywgZnVuY3Rpb24gKG1h
dCkgeworICAgICAgICAgICAgcmV0dXJuIChtYXQuZ2V0QWN0aXZlVGV4dHVyZXMoKS5pbmRleE9m
KF90aGlzKSAhPT0gLTEpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hl
ZFRleHR1cmVNYXRyaXg7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhlIHRleHR1
cmUuCisgICAgICogQHJldHVybnMgdGhlIGNsb25lZCB0ZXh0dXJlCisgICAgICovCisgICAgVGV4
dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIHJldHVybiBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5DbG9uZShmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoX3RoaXMuX3RleHR1cmUgPyBfdGhpcy5fdGV4
dHVyZS51cmwgOiBudWxsLCBfdGhpcy5nZXRTY2VuZSgpLCBfdGhpcy5fbm9NaXBtYXAsIF90aGlz
Ll9pbnZlcnRZLCBfdGhpcy5zYW1wbGluZ01vZGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBfdGhp
cy5fdGV4dHVyZSA/IF90aGlzLl90ZXh0dXJlLl9idWZmZXIgOiB1bmRlZmluZWQpOworICAgICAg
ICB9LCB0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUgdGV4dHVy
ZSB0byBhIEpTT04gcmVwcmVzZW50YXRpb24gd2UgY2FuIGVhc2lseSB1c2UgaW4gdGhlIHJlc2Vw
ZWN0aXZlIFBhcnNlIGZ1bmN0aW9uLgorICAgICAqIEByZXR1cm5zIFRoZSBKU09OIHJlcHJlc2Vu
dGF0aW9uIG9mIHRoZSB0ZXh0dXJlCisgICAgICovCisgICAgVGV4dHVyZS5wcm90b3R5cGUuc2Vy
aWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9
IF9zdXBlci5wcm90b3R5cGUuc2VyaWFsaXplLmNhbGwodGhpcyk7CisgICAgICAgIGlmICghc2Vy
aWFsaXphdGlvbk9iamVjdCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9idWZmZXIgPT09ICJzdHJpbmciICYmIHRoaXMuX2J1
ZmZlci5zdWJzdHIoMCwgNSkgPT09ICJkYXRhOiIpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QuYmFzZTY0U3RyaW5nID0gdGhpcy5fYnVmZmVyOworICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5uYW1lID0gc2VyaWFsaXphdGlvbk9iamVjdC5uYW1lLnJlcGxhY2UoImRh
dGE6IiwgIiIpOworICAgICAgICB9CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaW52ZXJ0
WSA9IHRoaXMuX2ludmVydFk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc2FtcGxpbmdN
b2RlID0gdGhpcy5zYW1wbGluZ01vZGU7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2Jq
ZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXJyZW50IGNsYXNzIG5hbWUg
b2YgdGhlIHRleHR1cmUgdXNlZnVsIGZvciBzZXJpYWxpemF0aW9uIG9yIGR5bmFtaWMgY29kaW5n
LgorICAgICAqIEByZXR1cm5zICJUZXh0dXJlIgorICAgICAqLworICAgIFRleHR1cmUucHJvdG90
eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJUZXh0dXJl
IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2UgdGhlIHRleHR1cmUgYW5kIHJlbGVh
c2UgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICAgICAqLworICAgIFRleHR1cmUucHJvdG90
eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlz
cG9zZS5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLm9uTG9hZE9ic2VydmFibGUuY2xlYXIoKTsK
KyAgICAgICAgdGhpcy5fZGVsYXllZE9uTG9hZCA9IG51bGw7CisgICAgICAgIHRoaXMuX2RlbGF5
ZWRPbkVycm9yID0gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlIHRoZSBKU09O
IHJlcHJlc2VudGF0aW9uIG9mIGEgdGV4dHVyZSBpbiBvcmRlciB0byByZWNyZWF0ZSB0aGUgdGV4
dHVyZSBpbiB0aGUgZ2l2ZW4gc2NlbmUuCisgICAgICogQHBhcmFtIHBhcnNlZFRleHR1cmUgRGVm
aW5lIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0dXJlCisgICAgICogQHBhcmFt
IHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIHBhcnNlZCB0ZXh0dXJlIHNob3VsZCBiZSBpbnN0
YW50aWF0ZWQgaW4KKyAgICAgKiBAcGFyYW0gcm9vdFVybCBEZWZpbmUgdGhlIHJvb3QgdXJsIG9m
IHRoZSBwYXJzaW5nIHNlcXVlbmNlIGluIHRoZSBjYXNlIG9mIHJlbGF0aXZlIGRlcGVuZGVuY2ll
cworICAgICAqIEByZXR1cm5zIFRoZSBwYXJzZWQgdGV4dHVyZSBpZiBzdWNjZXNzZnVsCisgICAg
ICovCisgICAgVGV4dHVyZS5QYXJzZSA9IGZ1bmN0aW9uIChwYXJzZWRUZXh0dXJlLCBzY2VuZSwg
cm9vdFVybCkgeworICAgICAgICBpZiAocGFyc2VkVGV4dHVyZS5jdXN0b21UeXBlKSB7CisgICAg
ICAgICAgICB2YXIgY3VzdG9tVGV4dHVyZSA9IF9NaXNjX2luc3RhbnRpYXRpb25Ub29sc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJJbnN0YW50aWF0aW9uVG9vbHMiXS5JbnN0YW50aWF0
ZShwYXJzZWRUZXh0dXJlLmN1c3RvbVR5cGUpOworICAgICAgICAgICAgLy8gVXBkYXRlIFNhbXBs
aW5nIE1vZGUKKyAgICAgICAgICAgIHZhciBwYXJzZWRDdXN0b21UZXh0dXJlID0gY3VzdG9tVGV4
dHVyZS5QYXJzZShwYXJzZWRUZXh0dXJlLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgICAgICBp
ZiAocGFyc2VkVGV4dHVyZS5zYW1wbGluZ01vZGUgJiYgcGFyc2VkQ3VzdG9tVGV4dHVyZS51cGRh
dGVTYW1wbGluZ01vZGUgJiYgcGFyc2VkQ3VzdG9tVGV4dHVyZS5fc2FtcGxpbmdNb2RlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHBhcnNlZEN1c3RvbVRleHR1cmUuX3NhbXBsaW5nTW9kZSAhPT0g
cGFyc2VkVGV4dHVyZS5zYW1wbGluZ01vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2Vk
Q3VzdG9tVGV4dHVyZS51cGRhdGVTYW1wbGluZ01vZGUocGFyc2VkVGV4dHVyZS5zYW1wbGluZ01v
ZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBwYXJzZWRDdXN0b21UZXh0dXJlOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJzZWRUZXh0
dXJlLmlzQ3ViZSAmJiAhcGFyc2VkVGV4dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAg
ICAgcmV0dXJuIFRleHR1cmUuX0N1YmVUZXh0dXJlUGFyc2VyKHBhcnNlZFRleHR1cmUsIHNjZW5l
LCByb290VXJsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBhcnNlZFRleHR1cmUubmFtZSAm
JiAhcGFyc2VkVGV4dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRleHR1cmUgPSBfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5QYXJzZShm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgZ2VuZXJhdGVNaXBNYXBzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGlmIChwYXJzZWRUZXh0dXJlLm5vTWlwbWFwKSB7CisgICAgICAgICAgICAgICAg
Z2VuZXJhdGVNaXBNYXBzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
cGFyc2VkVGV4dHVyZS5taXJyb3JQbGFuZSkgeworICAgICAgICAgICAgICAgIHZhciBtaXJyb3JU
ZXh0dXJlID0gVGV4dHVyZS5fQ3JlYXRlTWlycm9yKHBhcnNlZFRleHR1cmUubmFtZSwgcGFyc2Vk
VGV4dHVyZS5yZW5kZXJUYXJnZXRTaXplLCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzKTsKKyAgICAg
ICAgICAgICAgICBtaXJyb3JUZXh0dXJlLl93YWl0aW5nUmVuZGVyTGlzdCA9IHBhcnNlZFRleHR1
cmUucmVuZGVyTGlzdDsKKyAgICAgICAgICAgICAgICBtaXJyb3JUZXh0dXJlLm1pcnJvclBsYW5l
ID0gX01hdGhzX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlBsYW5l
Il0uRnJvbUFycmF5KHBhcnNlZFRleHR1cmUubWlycm9yUGxhbmUpOworICAgICAgICAgICAgICAg
IHJldHVybiBtaXJyb3JUZXh0dXJlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAocGFyc2VkVGV4dHVyZS5pc1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIHZhciBy
ZW5kZXJUYXJnZXRUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkVGV4
dHVyZS5pc0N1YmUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2VhcmNoIGZvciBhbiBleGlz
dGluZyByZWZsZWN0aW9uIHByb2JlICh3aGljaCBjb250YWlucyBhIGN1YmUgcmVuZGVyIHRhcmdl
dCB0ZXh0dXJlKQorICAgICAgICAgICAgICAgICAgICBpZiAoc2NlbmUucmVmbGVjdGlvblByb2Jl
cykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IHNjZW5lLnJlZmxlY3Rpb25Qcm9iZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHByb2JlID0gc2NlbmUucmVmbGVjdGlvblByb2Jlc1tpbmRleF07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2JlLm5hbWUgPT09IHBhcnNlZFRl
eHR1cmUubmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJv
YmUuY3ViZVRleHR1cmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJn
ZXRUZXh0dXJlID0gVGV4dHVyZS5fQ3JlYXRlUmVuZGVyVGFyZ2V0VGV4dHVyZShwYXJzZWRUZXh0
dXJlLm5hbWUsIHBhcnNlZFRleHR1cmUucmVuZGVyVGFyZ2V0U2l6ZSwgc2NlbmUsIGdlbmVyYXRl
TWlwTWFwcyk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldFRleHR1cmUuX3dhaXRp
bmdSZW5kZXJMaXN0ID0gcGFyc2VkVGV4dHVyZS5yZW5kZXJMaXN0OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0VGV4dHVyZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlOwor
ICAgICAgICAgICAgICAgIGlmIChwYXJzZWRUZXh0dXJlLmJhc2U2NFN0cmluZykgeworICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlID0gVGV4dHVyZS5DcmVhdGVGcm9tQmFzZTY0U3RyaW5nKHBh
cnNlZFRleHR1cmUuYmFzZTY0U3RyaW5nLCBwYXJzZWRUZXh0dXJlLm5hbWUsIHNjZW5lLCAhZ2Vu
ZXJhdGVNaXBNYXBzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSByb290VXJsICsgcGFyc2VkVGV4dHVyZS5u
YW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoVGV4dHVyZS5Vc2VTZXJpYWxpemVkVXJsSWZB
bnkgJiYgcGFyc2VkVGV4dHVyZS51cmwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9
IHBhcnNlZFRleHR1cmUudXJsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZSh1cmwsIHNjZW5lLCAhZ2VuZXJhdGVNaXBNYXBz
LCBwYXJzZWRUZXh0dXJlLmludmVydFkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGV4dHVyZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgcGFyc2VkVGV4
dHVyZSwgc2NlbmUpOworICAgICAgICAvLyBVcGRhdGUgU2FtcGxpbmcgTW9kZQorICAgICAgICBp
ZiAocGFyc2VkVGV4dHVyZS5zYW1wbGluZ01vZGUpIHsKKyAgICAgICAgICAgIHZhciBzYW1wbGlu
ZyA9IHBhcnNlZFRleHR1cmUuc2FtcGxpbmdNb2RlOworICAgICAgICAgICAgaWYgKHRleHR1cmUg
JiYgdGV4dHVyZS5zYW1wbGluZ01vZGUgIT09IHNhbXBsaW5nKSB7CisgICAgICAgICAgICAgICAg
dGV4dHVyZS51cGRhdGVTYW1wbGluZ01vZGUoc2FtcGxpbmcpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIC8vIEFuaW1hdGlvbnMKKyAgICAgICAgaWYgKHRleHR1cmUgJiYgcGFy
c2VkVGV4dHVyZS5hbmltYXRpb25zKSB7CisgICAgICAgICAgICBmb3IgKHZhciBhbmltYXRpb25J
bmRleCA9IDA7IGFuaW1hdGlvbkluZGV4IDwgcGFyc2VkVGV4dHVyZS5hbmltYXRpb25zLmxlbmd0
aDsgYW5pbWF0aW9uSW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBwYXJzZWRBbmltYXRp
b24gPSBwYXJzZWRUZXh0dXJlLmFuaW1hdGlvbnNbYW5pbWF0aW9uSW5kZXhdOworICAgICAgICAg
ICAgICAgIHZhciBpbnRlcm5hbENsYXNzID0gX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIl9UeXBlU3RvcmUiXS5HZXRDbGFzcygiQkFCWUxPTi5BbmltYXRpb24i
KTsKKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxDbGFzcykgeworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLmFuaW1hdGlvbnMucHVzaChpbnRlcm5hbENsYXNzLlBhcnNlKHBhcnNlZEFu
aW1hdGlvbikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSB0ZXh0dXJlIGZyb20gaXRzIGJhc2UgNjQgcmVwcmVzZW50YXRpb24uCisgICAgICogQHBhcmFt
IGRhdGEgRGVmaW5lIHRoZSBiYXNlNjQgcGF5bG9hZCB3aXRob3V0IHRoZSBkYXRhOiBwcmVmaXgK
KyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHRleHR1cmUgaW4gdGhl
IHNjZW5lIHVzZWZ1bCBmbyBjYWNoaW5nIHB1cnBvc2UgZm9yIGluc3RhbmNlCisgICAgICogQHBh
cmFtIHNjZW5lIERlZmluZSB0aGUgc2NlbmUgdGhlIHRleHR1cmUgc2hvdWxkIGJlbG9uZyB0bwor
ICAgICAqIEBwYXJhbSBub01pcG1hcCBGb3JjZXMgdGhlIHRleHR1cmUgdG8gbm90IGNyZWF0ZSBt
aXAgbWFwIGluZm9ybWF0aW9uIGlmIHRydWUKKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBkZWZpbmUg
aWYgdGhlIHRleHR1cmUgbmVlZHMgdG8gYmUgaW52ZXJ0ZWQgb24gdGhlIHkgYXhpcyBkdXJpbmcg
bG9hZGluZworICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgZGVmaW5lIHRoZSBzYW1wbGluZyBt
b2RlIHdlIHdhbnQgZm9yIHRoZSB0ZXh0dXJlIHdoaWxlIGZlY3RjaGluZyBmcm9tIGl0IChUZXh0
dXJlLk5FQVJFU1RfU0FNUExJTkdNT0RFLi4uKQorICAgICAqIEBwYXJhbSBvbkxvYWQgZGVmaW5l
IGEgY2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gdGhlIHRleHR1cmUgaGFzIGJlZW4gbG9hZGVkCisg
ICAgICogQHBhcmFtIG9uRXJyb3IgZGVmaW5lIGEgY2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gYW4g
ZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZSBsb2FkaW5nIHNlc3Npb24KKyAgICAgKiBAcGFyYW0g
Zm9ybWF0IGRlZmluZSB0aGUgZm9ybWF0IG9mIHRoZSB0ZXh0dXJlIHdlIGFyZSB0cnlpbmcgdG8g
bG9hZCAoRW5naW5lLlRFWFRVUkVGT1JNQVRfUkdCQS4uLikKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y3JlYXRlZCB0ZXh0dXJlCisgICAgICovCisgICAgVGV4dHVyZS5DcmVhdGVGcm9tQmFzZTY0U3Ry
aW5nID0gZnVuY3Rpb24gKGRhdGEsIG5hbWUsIHNjZW5lLCBub01pcG1hcCwgaW52ZXJ0WSwgc2Ft
cGxpbmdNb2RlLCBvbkxvYWQsIG9uRXJyb3IsIGZvcm1hdCkgeworICAgICAgICBpZiAoc2FtcGxp
bmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gVGV4dHVyZS5UUklMSU5FQVJfU0FN
UExJTkdNT0RFOyB9CisgICAgICAgIGlmIChvbkxvYWQgPT09IHZvaWQgMCkgeyBvbkxvYWQgPSBu
dWxsOyB9CisgICAgICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG51bGw7
IH0KKyAgICAgICAgaWYgKGZvcm1hdCA9PT0gdm9pZCAwKSB7IGZvcm1hdCA9IF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJF
Rk9STUFUX1JHQkE7IH0KKyAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKCJkYXRhOiIgKyBuYW1l
LCBzY2VuZSwgbm9NaXBtYXAsIGludmVydFksIHNhbXBsaW5nTW9kZSwgb25Mb2FkLCBvbkVycm9y
LCBkYXRhLCBmYWxzZSwgZm9ybWF0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSB0ZXh0dXJlIGZyb20gaXRzIGRhdGE6IHJlcHJlc2VudGF0aW9uLiAoZGF0YTogd2lsbCBiZSBh
ZGRlZCBpbiBjYXNlIG9ubHkgdGhlIHBheWxvYWQgaGFzIGJlZW4gcGFzc2VkIGluKQorICAgICAq
IEBwYXJhbSBkYXRhIERlZmluZSB0aGUgYmFzZTY0IHBheWxvYWQgd2l0aG91dCB0aGUgZGF0YTog
cHJlZml4CisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB0ZXh0dXJl
IGluIHRoZSBzY2VuZSB1c2VmdWwgZm8gY2FjaGluZyBwdXJwb3NlIGZvciBpbnN0YW5jZQorICAg
ICAqIEBwYXJhbSBidWZmZXIgZGVmaW5lIHRoZSBidWZmZXIgdG8gbG9hZCB0aGUgdGV4dHVyZSBm
cm9tIGluIGNhc2UgdGhlIHRleHR1cmUgaXMgbG9hZGVkIGZyb20gYSBidWZmZXIgcmVwcmVzZW50
YXRpb24KKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgdGV4dHVyZSBz
aG91bGQgYmVsb25nIHRvCisgICAgICogQHBhcmFtIGRlbGV0ZUJ1ZmZlciBkZWZpbmUgaWYgdGhl
IGJ1ZmZlciB3ZSBhcmUgbG9hZGluZyB0aGUgdGV4dHVyZSBmcm9tIHNob3VsZCBiZSBkZWxldGVk
IGFmdGVyIGxvYWQKKyAgICAgKiBAcGFyYW0gbm9NaXBtYXAgRm9yY2VzIHRoZSB0ZXh0dXJlIHRv
IG5vdCBjcmVhdGUgbWlwIG1hcCBpbmZvcm1hdGlvbiBpZiB0cnVlCisgICAgICogQHBhcmFtIGlu
dmVydFkgZGVmaW5lIGlmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIGludmVydGVkIG9uIHRoZSB5
IGF4aXMgZHVyaW5nIGxvYWRpbmcKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZSB0
aGUgc2FtcGxpbmcgbW9kZSB3ZSB3YW50IGZvciB0aGUgdGV4dHVyZSB3aGlsZSBmZWN0Y2hpbmcg
ZnJvbSBpdCAoVGV4dHVyZS5ORUFSRVNUX1NBTVBMSU5HTU9ERS4uLikKKyAgICAgKiBAcGFyYW0g
b25Mb2FkIGRlZmluZSBhIGNhbGxiYWNrIHRyaWdnZXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGhhcyBi
ZWVuIGxvYWRlZAorICAgICAqIEBwYXJhbSBvbkVycm9yIGRlZmluZSBhIGNhbGxiYWNrIHRyaWdn
ZXJlZCB3aGVuIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUgbG9hZGluZyBzZXNzaW9uCisg
ICAgICogQHBhcmFtIGZvcm1hdCBkZWZpbmUgdGhlIGZvcm1hdCBvZiB0aGUgdGV4dHVyZSB3ZSBh
cmUgdHJ5aW5nIHRvIGxvYWQgKEVuZ2luZS5URVhUVVJFRk9STUFUX1JHQkEuLi4pCisgICAgICog
QHJldHVybnMgdGhlIGNyZWF0ZWQgdGV4dHVyZQorICAgICAqLworICAgIFRleHR1cmUuTG9hZEZy
b21EYXRhU3RyaW5nID0gZnVuY3Rpb24gKG5hbWUsIGJ1ZmZlciwgc2NlbmUsIGRlbGV0ZUJ1ZmZl
ciwgbm9NaXBtYXAsIGludmVydFksIHNhbXBsaW5nTW9kZSwgb25Mb2FkLCBvbkVycm9yLCBmb3Jt
YXQpIHsKKyAgICAgICAgaWYgKGRlbGV0ZUJ1ZmZlciA9PT0gdm9pZCAwKSB7IGRlbGV0ZUJ1ZmZl
ciA9IGZhbHNlOyB9CisgICAgICAgIGlmIChub01pcG1hcCA9PT0gdm9pZCAwKSB7IG5vTWlwbWFw
ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGludmVydFkgPT09IHZvaWQgMCkgeyBpbnZlcnRZID0g
dHJ1ZTsgfQorICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdN
b2RlID0gVGV4dHVyZS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIGlmIChvbkxv
YWQgPT09IHZvaWQgMCkgeyBvbkxvYWQgPSBudWxsOyB9CisgICAgICAgIGlmIChvbkVycm9yID09
PSB2b2lkIDApIHsgb25FcnJvciA9IG51bGw7IH0KKyAgICAgICAgaWYgKGZvcm1hdCA9PT0gdm9p
ZCAwKSB7IGZvcm1hdCA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFRk9STUFUX1JHQkE7IH0KKyAgICAgICAgaWYgKG5h
bWUuc3Vic3RyKDAsIDUpICE9PSAiZGF0YToiKSB7CisgICAgICAgICAgICBuYW1lID0gImRhdGE6
IiArIG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlKG5hbWUsIHNj
ZW5lLCBub01pcG1hcCwgaW52ZXJ0WSwgc2FtcGxpbmdNb2RlLCBvbkxvYWQsIG9uRXJyb3IsIGJ1
ZmZlciwgZGVsZXRlQnVmZmVyLCBmb3JtYXQpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBUZXh0dXJlLl9DdWJlVGV4dHVyZVBhcnNlciA9IGZ1bmN0aW9uIChqc29uVGV4dHVyZSwg
c2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiQ3ViZVRleHR1cmUi
KTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgVGV4dHVyZS5fQ3JlYXRlTWlycm9y
ID0gZnVuY3Rpb24gKG5hbWUsIHJlbmRlclRhcmdldFNpemUsIHNjZW5lLCBnZW5lcmF0ZU1pcE1h
cHMpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiTWlycm9yVGV4dHVyZSIpOworICAgIH07
CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUZXh0dXJlLl9DcmVhdGVSZW5kZXJUYXJnZXRUZXh0
dXJlID0gZnVuY3Rpb24gKG5hbWUsIHJlbmRlclRhcmdldFNpemUsIHNjZW5lLCBnZW5lcmF0ZU1p
cE1hcHMpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiUmVuZGVyVGFyZ2V0VGV4dHVyZSIp
OworICAgIH07CisgICAgLyoqIG5lYXJlc3QgaXMgbWFnID0gbmVhcmVzdCBhbmQgbWluID0gbmVh
cmVzdCBhbmQgbWlwID0gbGluZWFyICovCisgICAgVGV4dHVyZS5ORUFSRVNUX1NBTVBMSU5HTU9E
RSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25z
dGFudHMiXS5URVhUVVJFX05FQVJFU1RfU0FNUExJTkdNT0RFOworICAgIC8qKiBuZWFyZXN0IGlz
IG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1pcCA9IGxpbmVhciAqLworICAg
IFRleHR1cmUuTkVBUkVTVF9ORUFSRVNUX01JUExJTkVBUiA9IF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1Rf
TkVBUkVTVF9NSVBMSU5FQVI7IC8vIG5lYXJlc3QgaXMgbWFnID0gbmVhcmVzdCBhbmQgbWluID0g
bmVhcmVzdCBhbmQgbWlwID0gbGluZWFyCisgICAgLyoqIEJpbGluZWFyIGlzIG1hZyA9IGxpbmVh
ciBhbmQgbWluID0gbGluZWFyIGFuZCBtaXAgPSBuZWFyZXN0ICovCisgICAgVGV4dHVyZS5CSUxJ
TkVBUl9TQU1QTElOR01PREUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9CSUxJTkVBUl9TQU1QTElOR01PREU7Cisg
ICAgLyoqIEJpbGluZWFyIGlzIG1hZyA9IGxpbmVhciBhbmQgbWluID0gbGluZWFyIGFuZCBtaXAg
PSBuZWFyZXN0ICovCisgICAgVGV4dHVyZS5MSU5FQVJfTElORUFSX01JUE5FQVJFU1QgPSBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRV9MSU5FQVJfTElORUFSX01JUE5FQVJFU1Q7IC8vIEJpbGluZWFyIGlzIG1hZyA9IGxp
bmVhciBhbmQgbWluID0gbGluZWFyIGFuZCBtaXAgPSBuZWFyZXN0CisgICAgLyoqIFRyaWxpbmVh
ciBpcyBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IGxpbmVhciBhbmQgbWlwID0gbGluZWFyICovCisg
ICAgVGV4dHVyZS5UUklMSU5FQVJfU0FNUExJTkdNT0RFID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfVFJJTElORUFS
X1NBTVBMSU5HTU9ERTsKKyAgICAvKiogVHJpbGluZWFyIGlzIG1hZyA9IGxpbmVhciBhbmQgbWlu
ID0gbGluZWFyIGFuZCBtaXAgPSBsaW5lYXIgKi8KKyAgICBUZXh0dXJlLkxJTkVBUl9MSU5FQVJf
TUlQTElORUFSID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfTElORUFSX0xJTkVBUl9NSVBMSU5FQVI7IC8vIFRyaWxp
bmVhciBpcyBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IGxpbmVhciBhbmQgbWlwID0gbGluZWFyCisg
ICAgLyoqIG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1pcCA9IG5lYXJlc3Qg
Ki8KKyAgICBUZXh0dXJlLk5FQVJFU1RfTkVBUkVTVF9NSVBORUFSRVNUID0gX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVf
TkVBUkVTVF9ORUFSRVNUX01JUE5FQVJFU1Q7CisgICAgLyoqIG1hZyA9IG5lYXJlc3QgYW5kIG1p
biA9IGxpbmVhciBhbmQgbWlwID0gbmVhcmVzdCAqLworICAgIFRleHR1cmUuTkVBUkVTVF9MSU5F
QVJfTUlQTkVBUkVTVCA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1RfTElORUFSX01JUE5FQVJFU1Q7Cisg
ICAgLyoqIG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IGxpbmVhciBhbmQgbWlwID0gbGluZWFyICov
CisgICAgVGV4dHVyZS5ORUFSRVNUX0xJTkVBUl9NSVBMSU5FQVIgPSBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9ORUFS
RVNUX0xJTkVBUl9NSVBMSU5FQVI7CisgICAgLyoqIG1hZyA9IG5lYXJlc3QgYW5kIG1pbiA9IGxp
bmVhciBhbmQgbWlwID0gbm9uZSAqLworICAgIFRleHR1cmUuTkVBUkVTVF9MSU5FQVIgPSBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRV9ORUFSRVNUX0xJTkVBUjsKKyAgICAvKiogbWFnID0gbmVhcmVzdCBhbmQgbWluID0g
bmVhcmVzdCBhbmQgbWlwID0gbm9uZSAqLworICAgIFRleHR1cmUuTkVBUkVTVF9ORUFSRVNUID0g
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50
cyJdLlRFWFRVUkVfTkVBUkVTVF9ORUFSRVNUOworICAgIC8qKiBtYWcgPSBsaW5lYXIgYW5kIG1p
biA9IG5lYXJlc3QgYW5kIG1pcCA9IG5lYXJlc3QgKi8KKyAgICBUZXh0dXJlLkxJTkVBUl9ORUFS
RVNUX01JUE5FQVJFU1QgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9MSU5FQVJfTkVBUkVTVF9NSVBORUFSRVNUOwor
ICAgIC8qKiBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IG5lYXJlc3QgYW5kIG1pcCA9IGxpbmVhciAq
LworICAgIFRleHR1cmUuTElORUFSX05FQVJFU1RfTUlQTElORUFSID0gX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfTElO
RUFSX05FQVJFU1RfTUlQTElORUFSOworICAgIC8qKiBtYWcgPSBsaW5lYXIgYW5kIG1pbiA9IGxp
bmVhciBhbmQgbWlwID0gbm9uZSAqLworICAgIFRleHR1cmUuTElORUFSX0xJTkVBUiA9IF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5U
RVhUVVJFX0xJTkVBUl9MSU5FQVI7CisgICAgLyoqIG1hZyA9IGxpbmVhciBhbmQgbWluID0gbmVh
cmVzdCBhbmQgbWlwID0gbm9uZSAqLworICAgIFRleHR1cmUuTElORUFSX05FQVJFU1QgPSBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRV9MSU5FQVJfTkVBUkVTVDsKKyAgICAvKiogRXhwbGljaXQgY29vcmRpbmF0ZXMgbW9k
ZSAqLworICAgIFRleHR1cmUuRVhQTElDSVRfTU9ERSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX0VYUExJQ0lUX01P
REU7CisgICAgLyoqIFNwaGVyaWNhbCBjb29yZGluYXRlcyBtb2RlICovCisgICAgVGV4dHVyZS5T
UEhFUklDQUxfTU9ERSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX1NQSEVSSUNBTF9NT0RFOworICAgIC8qKiBQbGFu
YXIgY29vcmRpbmF0ZXMgbW9kZSAqLworICAgIFRleHR1cmUuUExBTkFSX01PREUgPSBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uVEVY
VFVSRV9QTEFOQVJfTU9ERTsKKyAgICAvKiogQ3ViaWMgY29vcmRpbmF0ZXMgbW9kZSAqLworICAg
IFRleHR1cmUuQ1VCSUNfTU9ERSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX0NVQklDX01PREU7CisgICAgLyoqIFBy
b2plY3Rpb24gY29vcmRpbmF0ZXMgbW9kZSAqLworICAgIFRleHR1cmUuUFJPSkVDVElPTl9NT0RF
ID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0
YW50cyJdLlRFWFRVUkVfUFJPSkVDVElPTl9NT0RFOworICAgIC8qKiBJbnZlcnNlIEN1YmljIGNv
b3JkaW5hdGVzIG1vZGUgKi8KKyAgICBUZXh0dXJlLlNLWUJPWF9NT0RFID0gX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVf
U0tZQk9YX01PREU7CisgICAgLyoqIEludmVyc2UgQ3ViaWMgY29vcmRpbmF0ZXMgbW9kZSAqLwor
ICAgIFRleHR1cmUuSU5WQ1VCSUNfTU9ERSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX0lOVkNVQklDX01PREU7Cisg
ICAgLyoqIEVxdWlyZWN0YW5ndWxhciBjb29yZGluYXRlcyBtb2RlICovCisgICAgVGV4dHVyZS5F
UVVJUkVDVEFOR1VMQVJfTU9ERSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX0VRVUlSRUNUQU5HVUxBUl9NT0RFOwor
ICAgIC8qKiBFcXVpcmVjdGFuZ3VsYXIgRml4ZWQgY29vcmRpbmF0ZXMgbW9kZSAqLworICAgIFRl
eHR1cmUuRklYRURfRVFVSVJFQ1RBTkdVTEFSX01PREUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9GSVhFRF9FUVVJ
UkVDVEFOR1VMQVJfTU9ERTsKKyAgICAvKiogRXF1aXJlY3Rhbmd1bGFyIEZpeGVkIE1pcnJvcmVk
IGNvb3JkaW5hdGVzIG1vZGUgKi8KKyAgICBUZXh0dXJlLkZJWEVEX0VRVUlSRUNUQU5HVUxBUl9N
SVJST1JFRF9NT0RFID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfRklYRURfRVFVSVJFQ1RBTkdVTEFSX01JUlJPUkVE
X01PREU7CisgICAgLyoqIFRleHR1cmUgaXMgbm90IHJlcGVhdGluZyBvdXRzaWRlIG9mIDAuLjEg
VVZzICovCisgICAgVGV4dHVyZS5DTEFNUF9BRERSRVNTTU9ERSA9IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFX0NMQU1Q
X0FERFJFU1NNT0RFOworICAgIC8qKiBUZXh0dXJlIGlzIHJlcGVhdGluZyBvdXRzaWRlIG9mIDAu
LjEgVVZzICovCisgICAgVGV4dHVyZS5XUkFQX0FERFJFU1NNT0RFID0gX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfV1JB
UF9BRERSRVNTTU9ERTsKKyAgICAvKiogVGV4dHVyZSBpcyByZXBlYXRpbmcgYW5kIG1pcnJvcmVk
ICovCisgICAgVGV4dHVyZS5NSVJST1JfQUREUkVTU01PREUgPSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9NSVJST1Jf
QUREUkVTU01PREU7CisgICAgLyoqCisgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiB3aGlj
aCBkZWZpbmVzIGlmIHRoZSB0ZXh0dXJlIHVybCBtdXN0IGJlIGJ1aWxkIGZyb20gdGhlIHNlcmlh
bGl6ZWQgVVJMIGluc3RlYWQgb2YganVzdCB1c2luZyB0aGUgbmFtZSBhbmQgbG9hZGluZyB0aGVt
IHNpZGUgYnkgc2lkZSB3aXRoIHRoZSBzY2VuZSBmaWxlCisgICAgICovCisgICAgVGV4dHVyZS5V
c2VTZXJpYWxpemVkVXJsSWZBbnkgPSBmYWxzZTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IFRleHR1cmUucHJvdG90eXBlLCAidXJsIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIFRleHR1cmUucHJvdG90eXBlLCAidU9mZnNldCIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBUZXh0dXJlLnByb3RvdHlwZSwgInZPZmZzZXQiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVGV4dHVyZS5wcm90b3R5cGUsICJ1U2NhbGUiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVGV4dHVyZS5wcm90b3R5cGUsICJ2
U2NhbGUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVGV4dHVyZS5wcm90
b3R5cGUsICJ1QW5nIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFRleHR1
cmUucHJvdG90eXBlLCAidkFuZyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBd
LCBUZXh0dXJlLnByb3RvdHlwZSwgIndBbmciLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgp
CisgICAgXSwgVGV4dHVyZS5wcm90b3R5cGUsICJ1Um90YXRpb25DZW50ZXIiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVGV4dHVyZS5wcm90b3R5cGUsICJ2Um90YXRpb25D
ZW50ZXIiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVGV4dHVyZS5wcm90
b3R5cGUsICJ3Um90YXRpb25DZW50ZXIiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisg
ICAgXSwgVGV4dHVyZS5wcm90b3R5cGUsICJpc0Jsb2NraW5nIiwgbnVsbCk7CisgICAgcmV0dXJu
IFRleHR1cmU7Cit9KF9NYXRlcmlhbHNfVGV4dHVyZXNfYmFzZVRleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siQmFzZVRleHR1cmUiXSkpOworCisvLyBSZWZlcmVuY2VzIHRoZSBk
ZXBlbmRlbmNpZXMuCitfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5fVGV4dHVyZVBhcnNlciA9IFRleHR1cmUuUGFyc2U7
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9UZXh0dXJlcy92aWRlb1RleHR1
cmUudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL01hdGVyaWFscy9UZXh0dXJlcy92aWRlb1RleHR1cmUudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogVmlkZW9UZXh0dXJlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlZpZGVvVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVmlkZW9UZXh0dXJlOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxl
cy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvdG9vbHMgKi8g
Ii4vTWlzYy90b29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9UZXh0
dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisKKwor
CisKKworLyoqCisgKiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IGEgdmlkZW8gaW4geW91ciBzY2Vu
ZSwgdGhpcyBpcyB0aGUgc3BlY2lhbCB0ZXh0dXJlIGZvciB0aGF0LgorICogVGhpcyBzcGVjaWFs
IHRleHR1cmUgd29ya3Mgc2ltaWxhciB0byBvdGhlciB0ZXh0dXJlcywgd2l0aCB0aGUgZXhjZXB0
aW9uIG9mIGEgZmV3IHBhcmFtZXRlcnMuCisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL3ZpZGVvX3RleHR1cmUKKyAqLwordmFyIFZpZGVvVGV4dHVyZSA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2V4dGVuZHMiXShWaWRlb1RleHR1cmUsIF9zdXBlcik7CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIHZpZGVvIHRleHR1cmUuCisgICAgICogSWYgeW91IHdhbnQgdG8gZGlz
cGxheSBhIHZpZGVvIGluIHlvdXIgc2NlbmUsIHRoaXMgaXMgdGhlIHNwZWNpYWwgdGV4dHVyZSBm
b3IgdGhhdC4KKyAgICAgKiBUaGlzIHNwZWNpYWwgdGV4dHVyZSB3b3JrcyBzaW1pbGFyIHRvIG90
aGVyIHRleHR1cmVzLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgYSBmZXcgcGFyYW1ldGVycy4KKyAg
ICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3ZpZGVvX3RleHR1cmUK
KyAgICAgKiBAcGFyYW0gbmFtZSBvcHRpb25hbCBuYW1lLCB3aWxsIGRldGVjdCBmcm9tIHZpZGVv
IHNvdXJjZSwgaWYgbm90IGRlZmluZWQKKyAgICAgKiBAcGFyYW0gc3JjIGNhbiBiZSB1c2VkIHRv
IHByb3ZpZGUgYW4gdXJsLCBhcnJheSBvZiB1cmxzIG9yIGFuIGFscmVhZHkgc2V0dXAgSFRNTCB2
aWRlbyBlbGVtZW50LgorICAgICAqIEBwYXJhbSBzY2VuZSBpcyBvYnZpb3VzbHkgdGhlIGN1cnJl
bnQgc2NlbmUuCisgICAgICogQHBhcmFtIGdlbmVyYXRlTWlwTWFwcyBjYW4gYmUgdXNlZCB0byB0
dXJuIG9uIG1pcG1hcHMgKENhbiBiZSBleHBlbnNpdmUgZm9yIHZpZGVvVGV4dHVyZXMgYmVjYXVz
ZSB0aGV5IGFyZSBvZnRlbiB1cGRhdGVkKS4KKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBpcyBmYWxz
ZSBieSBkZWZhdWx0IGJ1dCBjYW4gYmUgdXNlZCB0byBpbnZlcnQgdmlkZW8gb24gWSBheGlzCisg
ICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBjb250cm9scyB0aGUgc2FtcGxpbmcgbWV0aG9kIGFu
ZCBpcyBzZXQgdG8gVFJJTElORUFSX1NBTVBMSU5HTU9ERSBieSBkZWZhdWx0CisgICAgICogQHBh
cmFtIHNldHRpbmdzIGFsbG93cyBmaW5lciBjb250cm9sIG92ZXIgdmlkZW8gdXNhZ2UKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBWaWRlb1RleHR1cmUobmFtZSwgc3JjLCBzY2VuZSwgZ2VuZXJhdGVN
aXBNYXBzLCBpbnZlcnRZLCBzYW1wbGluZ01vZGUsIHNldHRpbmdzKSB7CisgICAgICAgIGlmIChn
ZW5lcmF0ZU1pcE1hcHMgPT09IHZvaWQgMCkgeyBnZW5lcmF0ZU1pcE1hcHMgPSBmYWxzZTsgfQor
ICAgICAgICBpZiAoaW52ZXJ0WSA9PT0gdm9pZCAwKSB7IGludmVydFkgPSBmYWxzZTsgfQorICAg
ICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gX01hdGVy
aWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1
cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIGlmIChzZXR0aW5ncyA9PT0g
dm9pZCAwKSB7IHNldHRpbmdzID0geworICAgICAgICAgICAgYXV0b1BsYXk6IHRydWUsCisgICAg
ICAgICAgICBsb29wOiB0cnVlLAorICAgICAgICAgICAgYXV0b1VwZGF0ZVRleHR1cmU6IHRydWUs
CisgICAgICAgIH07IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbnVs
bCwgc2NlbmUsICFnZW5lcmF0ZU1pcE1hcHMsIGludmVydFkpIHx8IHRoaXM7CisgICAgICAgIF90
aGlzLl9vblVzZXJBY3Rpb25SZXF1ZXN0ZWRPYnNlcnZhYmxlID0gbnVsbDsKKyAgICAgICAgX3Ro
aXMuX3N0aWxsSW1hZ2VDYXB0dXJlZCA9IGZhbHNlOworICAgICAgICBfdGhpcy5fZGlzcGxheWlu
Z1Bvc3RlclRleHR1cmUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2ZyYW1lSWQgPSAtMTsKKyAg
ICAgICAgX3RoaXMuX2NyZWF0ZUludGVybmFsVGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIGlmIChfdGhpcy5fdGV4dHVyZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYg
KF90aGlzLl9kaXNwbGF5aW5nUG9zdGVyVGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICBf
dGhpcy5fdGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9kaXNw
bGF5aW5nUG9zdGVyVGV4dHVyZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghX3RoaXMuX2VuZ2luZS5uZWVk
UE9UVGV4dHVyZXMgfHwKKyAgICAgICAgICAgICAgICAoX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5Jc0V4cG9uZW50T2ZUd28oX3RoaXMudmlkZW8udmlk
ZW9XaWR0aCkgJiYgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9v
bHMiXS5Jc0V4cG9uZW50T2ZUd28oX3RoaXMudmlkZW8udmlkZW9IZWlnaHQpKSkgeworICAgICAg
ICAgICAgICAgIF90aGlzLndyYXBVID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXS5XUkFQX0FERFJFU1NNT0RFOworICAg
ICAgICAgICAgICAgIF90aGlzLndyYXBWID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXS5XUkFQX0FERFJFU1NNT0RFOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgX3RoaXMu
d3JhcFUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICAgICAgICAgIF90
aGlzLndyYXBWID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgICAgICAg
ICBfdGhpcy5fZ2VuZXJhdGVNaXBNYXBzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBfdGhpcy5fdGV4dHVyZSA9IF90aGlzLl9lbmdpbmUuY3JlYXRlRHluYW1pY1RleHR1cmUo
X3RoaXMudmlkZW8udmlkZW9XaWR0aCwgX3RoaXMudmlkZW8udmlkZW9IZWlnaHQsIF90aGlzLl9n
ZW5lcmF0ZU1pcE1hcHMsIF90aGlzLnNhbXBsaW5nTW9kZSk7CisgICAgICAgICAgICBpZiAoIV90
aGlzLnZpZGVvLmF1dG9wbGF5ICYmICFfdGhpcy5fc2V0dGluZ3MucG9zdGVyKSB7CisgICAgICAg
ICAgICAgICAgdmFyIG9sZEhhbmRsZXJfMSA9IF90aGlzLnZpZGVvLm9ucGxheWluZzsKKyAgICAg
ICAgICAgICAgICB2YXIgZXJyb3JfMSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHZhciBvbGRN
dXRlZF8xID0gX3RoaXMudmlkZW8ubXV0ZWQ7CisgICAgICAgICAgICAgICAgX3RoaXMudmlkZW8u
bXV0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIF90aGlzLnZpZGVvLm9ucGxheWluZyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMudmlkZW8ubXV0ZWQgPSBvbGRN
dXRlZF8xOworICAgICAgICAgICAgICAgICAgICBfdGhpcy52aWRlby5vbnBsYXlpbmcgPSBvbGRI
YW5kbGVyXzE7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlLmlzUmVhZHkgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdXBkYXRlSW50ZXJuYWxUZXh0dXJlKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghZXJyb3JfMSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMudmlkZW8ucGF1c2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAoX3RoaXMub25Mb2FkT2JzZXJ2YWJsZS5oYXNPYnNlcnZlcnMoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub25Mb2FkT2JzZXJ2YWJsZS5ub3RpZnlP
YnNlcnZlcnMoX3RoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICB2YXIgcGxheWluZyA9IF90aGlzLnZpZGVvLnBsYXkoKTsKKyAg
ICAgICAgICAgICAgICBpZiAocGxheWluZykgeworICAgICAgICAgICAgICAgICAgICBwbGF5aW5n
LnRoZW4oZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZlcnl0aGlu
ZyBpcyBnb29kLgorICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICAg
ICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXzEg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gT24gQ2hyb21lIGZvciBpbnN0YW5j
ZSwgbmV3IHBvbGljaWVzIG1pZ2h0IHByZXZlbnQgcGxheWluZyB3aXRob3V0IHVzZXIgaW50ZXJh
Y3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX29uVXNlckFjdGlvblJl
cXVlc3RlZE9ic2VydmFibGUgJiYgX3RoaXMuX29uVXNlckFjdGlvblJlcXVlc3RlZE9ic2VydmFi
bGUuaGFzT2JzZXJ2ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5f
b25Vc2VyQWN0aW9uUmVxdWVzdGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoX3RoaXMpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLnZpZGVvLm9ucGxheWluZyA9IG9sZEhhbmRsZXJfMTsKKyAgICAgICAgICAgICAgICAg
ICAgX3RoaXMuX3RleHR1cmUuaXNSZWFkeSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIF90
aGlzLl91cGRhdGVJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90
aGlzLm9uTG9hZE9ic2VydmFibGUuaGFzT2JzZXJ2ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF90aGlzLm9uTG9hZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKF90aGlzKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIF90aGlzLl90ZXh0dXJlLmlzUmVhZHkg
PSB0cnVlOworICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVJbnRlcm5hbFRleHR1cmUoKTsK
KyAgICAgICAgICAgICAgICBpZiAoX3RoaXMub25Mb2FkT2JzZXJ2YWJsZS5oYXNPYnNlcnZlcnMo
KSkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5vbkxvYWRPYnNlcnZhYmxlLm5vdGlmeU9i
c2VydmVycyhfdGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9OworICAgICAgICBfdGhpcy5yZXNldCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlm
IChfdGhpcy5fdGV4dHVyZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFfdGhpcy5fZGlzcGxheWluZ1Bvc3RlclRleHR1
cmUpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAg
ICAgICAgICAgX3RoaXMuX3RleHR1cmUgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgICAgICBfdGhpcy5fdXBkYXRlSW50ZXJuYWxUZXh0dXJlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgaWYgKF90aGlzLl90ZXh0dXJlID09IG51bGwgfHwgIV90aGlzLl90ZXh0dXJl
LmlzUmVhZHkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoX3RoaXMudmlkZW8ucmVhZHlTdGF0ZSA8IF90aGlzLnZpZGVvLkhBVkVfQ1VS
UkVOVF9EQVRBKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKF90aGlzLl9kaXNwbGF5aW5nUG9zdGVyVGV4dHVyZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBmcmFtZUlkID0g
X3RoaXMuZ2V0U2NlbmUoKS5nZXRGcmFtZUlkKCk7CisgICAgICAgICAgICBpZiAoX3RoaXMuX2Zy
YW1lSWQgPT09IGZyYW1lSWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBfdGhpcy5fZnJhbWVJZCA9IGZyYW1lSWQ7CisgICAgICAgICAgICBf
dGhpcy5fZW5naW5lLnVwZGF0ZVZpZGVvVGV4dHVyZShfdGhpcy5fdGV4dHVyZSwgX3RoaXMudmlk
ZW8sIF90aGlzLl9pbnZlcnRZKTsKKyAgICAgICAgfTsKKyAgICAgICAgX3RoaXMuX2VuZ2luZSA9
IF90aGlzLmdldFNjZW5lKCkuZ2V0RW5naW5lKCk7CisgICAgICAgIF90aGlzLl9nZW5lcmF0ZU1p
cE1hcHMgPSBnZW5lcmF0ZU1pcE1hcHM7CisgICAgICAgIF90aGlzLl9pbml0aWFsU2FtcGxpbmdN
b2RlID0gc2FtcGxpbmdNb2RlOworICAgICAgICBfdGhpcy5hdXRvVXBkYXRlVGV4dHVyZSA9IHNl
dHRpbmdzLmF1dG9VcGRhdGVUZXh0dXJlOworICAgICAgICBfdGhpcy5uYW1lID0gbmFtZSB8fCBf
dGhpcy5fZ2V0TmFtZShzcmMpOworICAgICAgICBfdGhpcy52aWRlbyA9IF90aGlzLl9nZXRWaWRl
byhzcmMpOworICAgICAgICBfdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5nczsKKyAgICAgICAgaWYg
KHNldHRpbmdzLnBvc3RlcikgeworICAgICAgICAgICAgX3RoaXMudmlkZW8ucG9zdGVyID0gc2V0
dGluZ3MucG9zdGVyOworICAgICAgICB9CisgICAgICAgIGlmIChzZXR0aW5ncy5hdXRvUGxheSAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBfdGhpcy52aWRlby5hdXRvcGxheSA9IHNldHRp
bmdzLmF1dG9QbGF5OworICAgICAgICB9CisgICAgICAgIGlmIChzZXR0aW5ncy5sb29wICE9PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgICAgIF90aGlzLnZpZGVvLmxvb3AgPSBzZXR0aW5ncy5sb29w
OworICAgICAgICB9CisgICAgICAgIF90aGlzLnZpZGVvLnNldEF0dHJpYnV0ZSgicGxheXNpbmxp
bmUiLCAiIik7CisgICAgICAgIF90aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlZCIs
IF90aGlzLl91cGRhdGVJbnRlcm5hbFRleHR1cmUpOworICAgICAgICBfdGhpcy52aWRlby5hZGRF
dmVudExpc3RlbmVyKCJzZWVrZWQiLCBfdGhpcy5fdXBkYXRlSW50ZXJuYWxUZXh0dXJlKTsKKyAg
ICAgICAgX3RoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigiZW1wdGllZCIsIF90aGlzLnJlc2V0
KTsKKyAgICAgICAgX3RoaXMuX2NyZWF0ZUludGVybmFsVGV4dHVyZU9uRXZlbnQgPSAoc2V0dGlu
Z3MucG9zdGVyICYmICFzZXR0aW5ncy5hdXRvUGxheSkgPyAicGxheSIgOiAiY2FucGxheSI7Cisg
ICAgICAgIF90aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoX3RoaXMuX2NyZWF0ZUludGVybmFs
VGV4dHVyZU9uRXZlbnQsIF90aGlzLl9jcmVhdGVJbnRlcm5hbFRleHR1cmUpOworICAgICAgICB2
YXIgdmlkZW9IYXNFbm91Z2hEYXRhID0gKF90aGlzLnZpZGVvLnJlYWR5U3RhdGUgPj0gX3RoaXMu
dmlkZW8uSEFWRV9DVVJSRU5UX0RBVEEpOworICAgICAgICBpZiAoc2V0dGluZ3MucG9zdGVyICYm
CisgICAgICAgICAgICAoIXNldHRpbmdzLmF1dG9QbGF5IHx8ICF2aWRlb0hhc0Vub3VnaERhdGEp
KSB7CisgICAgICAgICAgICBfdGhpcy5fdGV4dHVyZSA9IF90aGlzLl9lbmdpbmUuY3JlYXRlVGV4
dHVyZShzZXR0aW5ncy5wb3N0ZXIsIGZhbHNlLCB0cnVlLCBzY2VuZSk7CisgICAgICAgICAgICBf
dGhpcy5fZGlzcGxheWluZ1Bvc3RlclRleHR1cmUgPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHZpZGVvSGFzRW5vdWdoRGF0YSkgeworICAgICAgICAgICAgX3RoaXMuX2NyZWF0
ZUludGVybmFsVGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBfdGhpczsKKyAg
ICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZpZGVvVGV4dHVyZS5wcm90b3R5cGUsICJv
blVzZXJBY3Rpb25SZXF1ZXN0ZWRPYnNlcnZhYmxlIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogRXZlbnQgdHJpZ2dlcmQgd2hlbiBhIGRvbSBhY3Rpb24gaXMgcmVxdWlyZWQgYnkgdGhlIHVz
ZXIgdG8gcGxheSB0aGUgdmlkZW8uCisgICAgICAgICAqIFRoaXMgaGFwcGVucyBkdWUgdG8gcmVj
ZW50IGNoYW5nZXMgaW4gYnJvd3NlciBwb2xpY2llcyBwcmV2ZW50aW5nIHZpZGVvIHRvIGF1dG8g
c3RhcnQuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIGlmICghdGhpcy5fb25Vc2VyQWN0aW9uUmVxdWVzdGVkT2JzZXJ2YWJsZSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuX29uVXNlckFjdGlvblJlcXVlc3RlZE9ic2VydmFibGUgPSBuZXcgX01p
c2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0o
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vblVzZXJBY3Rpb25S
ZXF1ZXN0ZWRPYnNlcnZhYmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBWaWRlb1RleHR1cmUu
cHJvdG90eXBlLl9nZXROYW1lID0gZnVuY3Rpb24gKHNyYykgeworICAgICAgICBpZiAoc3JjIGlu
c3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkgeworICAgICAgICAgICAgcmV0dXJuIHNyYy5jdXJy
ZW50U3JjOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2Ygc3JjID09PSAib2JqZWN0Iikg
eworICAgICAgICAgICAgcmV0dXJuIHNyYy50b1N0cmluZygpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBzcmM7CisgICAgfTsKKyAgICBWaWRlb1RleHR1cmUucHJvdG90eXBlLl9nZXRWaWRl
byA9IGZ1bmN0aW9uIChzcmMpIHsKKyAgICAgICAgaWYgKHNyYyBpbnN0YW5jZW9mIEhUTUxWaWRl
b0VsZW1lbnQpIHsKKyAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlRvb2xzIl0uU2V0Q29yc0JlaGF2aW9yKHNyYy5jdXJyZW50U3JjLCBzcmMpOwor
ICAgICAgICAgICAgcmV0dXJuIHNyYzsKKyAgICAgICAgfQorICAgICAgICB2YXIgdmlkZW8gPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpOworICAgICAgICBpZiAodHlwZW9mIHNyYyA9
PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlRvb2xzIl0uU2V0Q29yc0JlaGF2aW9yKHNyYywgdmlkZW8pOworICAgICAg
ICAgICAgdmlkZW8uc3JjID0gc3JjOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5T
ZXRDb3JzQmVoYXZpb3Ioc3JjWzBdLCB2aWRlbyk7CisgICAgICAgICAgICBzcmMuZm9yRWFjaChm
dW5jdGlvbiAodXJsKSB7CisgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNvdXJjZSIpOworICAgICAgICAgICAgICAgIHNvdXJjZS5zcmMgPSB1cmw7
CisgICAgICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoc291cmNlKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2aWRlbzsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEBoaWRkZW4gSW50ZXJuYWwgbWV0aG9kIHRvIGluaXRpYXRlIGB1cGRhdGVgLgorICAg
ICAqLworICAgIFZpZGVvVGV4dHVyZS5wcm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMudXBkYXRlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUg
VGV4dHVyZSBpbiB0aGUgYGF1dG9gIG1vZGUuIERvZXMgbm90IGRvIGFueXRoaW5nIGlmIGBzZXR0
aW5ncy5hdXRvVXBkYXRlVGV4dHVyZWAgaXMgZmFsc2UuCisgICAgICovCisgICAgVmlkZW9UZXh0
dXJlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5h
dXRvVXBkYXRlVGV4dHVyZSkgeworICAgICAgICAgICAgLy8gRXhwZWN0aW5nIHVzZXIgdG8gY2Fs
bCBgdXBkYXRlVGV4dHVyZWAgbWFudWFsbHkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLnVwZGF0ZVRleHR1cmUodHJ1ZSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBVcGRhdGUgVGV4dHVyZSBpbiBgbWFudWFsYCBtb2RlLiBEb2VzIG5vdCBkbyBhbnl0aGlu
ZyBpZiBub3QgdmlzaWJsZSBvciBwYXVzZWQuCisgICAgICogQHBhcmFtIGlzVmlzaWJsZSBWaXNp
YmlsaXR5IHN0YXRlLCBkZXRlY3RlZCBieSB1c2VyIHVzaW5nIGBzY2VuZS5nZXRBY3RpdmVNZXNo
ZXMoKWAgb3Igb3RoZXJ2aXNlLgorICAgICAqLworICAgIFZpZGVvVGV4dHVyZS5wcm90b3R5cGUu
dXBkYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChpc1Zpc2libGUpIHsKKyAgICAgICAgaWYgKCFpc1Zp
c2libGUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy52aWRlby5wYXVzZWQgJiYgdGhpcy5fc3RpbGxJbWFnZUNhcHR1cmVkKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc3RpbGxJbWFnZUNhcHR1cmVkID0g
dHJ1ZTsKKyAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJuYWxUZXh0dXJlKCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDaGFuZ2UgdmlkZW8gY29udGVudC4gQ2hhbmdpbmcgdmlkZW8gaW5zdGFu
Y2Ugb3Igc2V0dGluZyBtdWx0aXBsZSB1cmxzIChhcyBpbiBjb25zdHJ1Y3RvcikgaXMgbm90IHN1
cHBvcnRlZC4KKyAgICAgKiBAcGFyYW0gdXJsIE5ldyB1cmwuCisgICAgICovCisgICAgVmlkZW9U
ZXh0dXJlLnByb3RvdHlwZS51cGRhdGVVUkwgPSBmdW5jdGlvbiAodXJsKSB7CisgICAgICAgIHRo
aXMudmlkZW8uc3JjID0gdXJsOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZSB0aGUg
dGV4dHVyZSBhbmQgcmVsZWFzZSBpdHMgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgICAgICovCisg
ICAgVmlkZW9UZXh0dXJlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMu
X29uVXNlckFjdGlvblJlcXVlc3RlZE9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIHRoaXMuX29u
VXNlckFjdGlvblJlcXVlc3RlZE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgICAgIHRoaXMu
X29uVXNlckFjdGlvblJlcXVlc3RlZE9ic2VydmFibGUgPSBudWxsOworICAgICAgICB9CisgICAg
ICAgIHRoaXMudmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl9jcmVhdGVJbnRlcm5hbFRl
eHR1cmVPbkV2ZW50LCB0aGlzLl9jcmVhdGVJbnRlcm5hbFRleHR1cmUpOworICAgICAgICB0aGlz
LnZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhdXNlZCIsIHRoaXMuX3VwZGF0ZUludGVybmFs
VGV4dHVyZSk7CisgICAgICAgIHRoaXMudmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vla2Vk
IiwgdGhpcy5fdXBkYXRlSW50ZXJuYWxUZXh0dXJlKTsKKyAgICAgICAgdGhpcy52aWRlby5yZW1v
dmVFdmVudExpc3RlbmVyKCJlbXB0aWVkIiwgdGhpcy5yZXNldCk7CisgICAgICAgIHRoaXMudmlk
ZW8ucGF1c2UoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSB2aWRlbyB0ZXh0
dXJlIHN0cmFpZ2h0IGZyb20gYSBzdHJlYW0uCisgICAgICogQHBhcmFtIHNjZW5lIERlZmluZSB0
aGUgc2NlbmUgdGhlIHRleHR1cmUgc2hvdWxkIGJlIGNyZWF0ZWQgaW4KKyAgICAgKiBAcGFyYW0g
c3RyZWFtIERlZmluZSB0aGUgc3RyZWFtIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSBjcmVhdGVkIGZy
b20KKyAgICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCB2aWRlbyB0ZXh0dXJlIGFzIGEgcHJvbWlz
ZQorICAgICAqLworICAgIFZpZGVvVGV4dHVyZS5DcmVhdGVGcm9tU3RyZWFtQXN5bmMgPSBmdW5j
dGlvbiAoc2NlbmUsIHN0cmVhbSkgeworICAgICAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJ2aWRlbyIpOworICAgICAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ2F1dG9wbGF5
JywgJycpOworICAgICAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ211dGVkJywgJ3RydWUnKTsKKyAg
ICAgICAgdmlkZW8uc2V0QXR0cmlidXRlKCdwbGF5c2lubGluZScsICcnKTsKKyAgICAgICAgdmlk
ZW8ubXV0ZWQgPSB0cnVlOworICAgICAgICBpZiAodmlkZW8ubW96U3JjT2JqZWN0ICE9PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgIC8vIGhhY2sgZm9yIEZpcmVmb3ggPCAxOQorICAgICAgICAg
ICAgdmlkZW8ubW96U3JjT2JqZWN0ID0gc3RyZWFtOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaWYgKHR5cGVvZiB2aWRlby5zcmNPYmplY3QgPT0gIm9iamVjdCIpIHsK
KyAgICAgICAgICAgICAgICB2aWRlby5zcmNPYmplY3QgPSBzdHJlYW07CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aW5kb3cuVVJMID0gd2luZG93
LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMIHx8IHdpbmRvdy5tb3pVUkwgfHwgd2luZG93Lm1zVVJM
OworICAgICAgICAgICAgICAgIHZpZGVvLnNyYyA9ICh3aW5kb3cuVVJMICYmIHdpbmRvdy5VUkwu
Y3JlYXRlT2JqZWN0VVJMKHN0cmVhbSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeworICAgICAgICAgICAg
dmFyIG9uUGxheWluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICByZXNvbHZlKG5l
dyBWaWRlb1RleHR1cmUoInZpZGVvIiwgdmlkZW8sIHNjZW5lLCB0cnVlLCB0cnVlKSk7CisgICAg
ICAgICAgICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGxheWluZyIsIG9uUGxheWlu
Zyk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigi
cGxheWluZyIsIG9uUGxheWluZyk7CisgICAgICAgICAgICB2aWRlby5wbGF5KCk7CisgICAgICAg
IH0pOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHZpZGVvIHRleHR1cmUgc3Ry
YWlnaHQgZnJvbSB5b3VyIFdlYkNhbSB2aWRlbyBmZWVkLgorICAgICAqIEBwYXJhbSBzY2VuZSBE
ZWZpbmUgdGhlIHNjZW5lIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSBjcmVhdGVkIGluCisgICAgICog
QHBhcmFtIGNvbnN0cmFpbnRzIERlZmluZSB0aGUgY29uc3RyYWludHMgdG8gdXNlIHRvIGNyZWF0
ZSB0aGUgd2ViIGNhbSBmZWVkIGZyb20gV2ViUlRDCisgICAgICogQHBhcmFtIGF1ZGlvQ29uc3Rh
aW50cyBEZWZpbmUgdGhlIGF1ZGlvIGNvbnN0cmFpbnRzIHRvIHVzZSB0byBjcmVhdGUgdGhlIHdl
YiBjYW0gZmVlZCBmcm9tIFdlYlJUQworICAgICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIHZpZGVv
IHRleHR1cmUgYXMgYSBwcm9taXNlCisgICAgICovCisgICAgVmlkZW9UZXh0dXJlLkNyZWF0ZUZy
b21XZWJDYW1Bc3luYyA9IGZ1bmN0aW9uIChzY2VuZSwgY29uc3RyYWludHMsIGF1ZGlvQ29uc3Rh
aW50cykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoYXVkaW9Db25z
dGFpbnRzID09PSB2b2lkIDApIHsgYXVkaW9Db25zdGFpbnRzID0gZmFsc2U7IH0KKyAgICAgICAg
dmFyIGNvbnN0cmFpbnRzRGV2aWNlSWQ7CisgICAgICAgIGlmIChjb25zdHJhaW50cyAmJiBjb25z
dHJhaW50cy5kZXZpY2VJZCkgeworICAgICAgICAgICAgY29uc3RyYWludHNEZXZpY2VJZCA9IHsK
KyAgICAgICAgICAgICAgICBleGFjdDogY29uc3RyYWludHMuZGV2aWNlSWQsCisgICAgICAgICAg
ICB9OworICAgICAgICB9CisgICAgICAgIGlmIChuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKSB7Cisg
ICAgICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoewor
ICAgICAgICAgICAgICAgIHZpZGVvOiBjb25zdHJhaW50cywKKyAgICAgICAgICAgICAgICBhdWRp
bzogYXVkaW9Db25zdGFpbnRzCisgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC50aGVu
KGZ1bmN0aW9uIChzdHJlYW0pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuQ3JlYXRl
RnJvbVN0cmVhbUFzeW5jKHNjZW5lLCBzdHJlYW0pOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBuYXZpZ2F0b3IuZ2V0VXNlck1lZGlhID0K
KyAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuZ2V0VXNlck1lZGlhIHx8CisgICAgICAgICAgICAg
ICAgICAgIG5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVkaWEgfHwKKyAgICAgICAgICAgICAgICAg
ICAgbmF2aWdhdG9yLm1vekdldFVzZXJNZWRpYSB8fAorICAgICAgICAgICAgICAgICAgICBuYXZp
Z2F0b3IubXNHZXRVc2VyTWVkaWE7CisgICAgICAgICAgICBpZiAobmF2aWdhdG9yLmdldFVzZXJN
ZWRpYSkgeworICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZXRVc2VyTWVkaWEoeworICAgICAg
ICAgICAgICAgICAgICB2aWRlbzogeworICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlSWQ6
IGNvbnN0cmFpbnRzRGV2aWNlSWQsCisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogKGNvbnN0cmFpbnRzICYmIGNvbnN0cmFp
bnRzLm1pbldpZHRoKSB8fCAyNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiAo
Y29uc3RyYWludHMgJiYgY29uc3RyYWludHMubWF4V2lkdGgpIHx8IDY0MCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtaW46IChjb25zdHJhaW50cyAmJiBjb25zdHJhaW50cy5t
aW5IZWlnaHQpIHx8IDI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IChjb25z
dHJhaW50cyAmJiBjb25zdHJhaW50cy5tYXhIZWlnaHQpIHx8IDQ4MCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg
IGF1ZGlvOiBhdWRpb0NvbnN0YWludHMKKyAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoc3Ry
ZWFtKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5DcmVhdGVGcm9tU3RyZWFt
QXN5bmMoc2NlbmUsIHN0cmVhbSk7CisgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIkxvZ2dlciJdLkVycm9yKGUubmFtZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJObyBz
dXBwb3J0IGZvciB1c2VyTWVkaWEgb24gdGhpcyBkZXZpY2UiKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgYSB2aWRlbyB0ZXh0dXJlIHN0cmFpZ2h0IGZyb20geW91ciBXZWJDYW0g
dmlkZW8gZmVlZC4KKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRoZSBzY2VuZSB0aGUgdGV4
dHVyZSBzaG91bGQgYmUgY3JlYXRlZCBpbgorICAgICAqIEBwYXJhbSBvblJlYWR5IERlZmluZSBh
IGNhbGxiYWNrIHRvIHRyaWdnZXJlZCBvbmNlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgcmVhZHkKKyAg
ICAgKiBAcGFyYW0gY29uc3RyYWludHMgRGVmaW5lIHRoZSBjb25zdHJhaW50cyB0byB1c2UgdG8g
Y3JlYXRlIHRoZSB3ZWIgY2FtIGZlZWQgZnJvbSBXZWJSVEMKKyAgICAgKiBAcGFyYW0gYXVkaW9D
b25zdGFpbnRzIERlZmluZSB0aGUgYXVkaW8gY29uc3RyYWludHMgdG8gdXNlIHRvIGNyZWF0ZSB0
aGUgd2ViIGNhbSBmZWVkIGZyb20gV2ViUlRDCisgICAgICovCisgICAgVmlkZW9UZXh0dXJlLkNy
ZWF0ZUZyb21XZWJDYW0gPSBmdW5jdGlvbiAoc2NlbmUsIG9uUmVhZHksIGNvbnN0cmFpbnRzLCBh
dWRpb0NvbnN0YWludHMpIHsKKyAgICAgICAgaWYgKGF1ZGlvQ29uc3RhaW50cyA9PT0gdm9pZCAw
KSB7IGF1ZGlvQ29uc3RhaW50cyA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMuQ3JlYXRlRnJvbVdl
YkNhbUFzeW5jKHNjZW5lLCBjb25zdHJhaW50cywgYXVkaW9Db25zdGFpbnRzKQorICAgICAgICAg
ICAgLnRoZW4oZnVuY3Rpb24gKHZpZGVvVGV4dHVyZSkgeworICAgICAgICAgICAgaWYgKG9uUmVh
ZHkpIHsKKyAgICAgICAgICAgICAgICBvblJlYWR5KHZpZGVvVGV4dHVyZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0pCisgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikgeworICAg
ICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxvZ2dl
ciJdLkVycm9yKGVyci5uYW1lKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICByZXR1cm4gVmlk
ZW9UZXh0dXJlOworfShfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siVGV4dHVyZSJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWF0ZXJpYWxzL2NvbG9yQ3VydmVzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9jb2xvckN1cnZlcy50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IENvbG9yQ3VydmVzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9y
Q3VydmVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb2xvckN1cnZlczsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIu
ZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlz
Yy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhz
L21hdGguY29sb3IudHMiKTsKKworCisKKy8qKgorICogVGhlIGNvbG9yIGdyYWRpbmcgY3VydmVz
IHByb3ZpZGUgYWRkaXRpb25hbCBjb2xvciBhZGp1c3RtbmVudCB0aGF0IGlzIGFwcGxpZWQgYWZ0
ZXIgYW55IGNvbG9yIGdyYWRpbmcgdHJhbnNmb3JtICgzRCBMVVQpLgorICogVGhleSBhbGxvdyBi
YXNpYyBhZGp1c3RtZW50IG9mIHNhdHVyYXRpb24gYW5kIHNtYWxsIGV4cG9zdXJlIGFkanVzdG1l
bnRzLCBhbG9uZyB3aXRoIGNvbG9yIGZpbHRlciB0aW50aW5nIHRvIHByb3ZpZGUgd2hpdGUgYmFs
YW5jZSBhZGp1c3RtZW50IG9yIG1vcmUgc3R5bGlzdGljIGVmZmVjdHMuCisgKiBUaGVzZSBhcmUg
c2ltaWxhciB0byBjb250cm9scyBmb3VuZCBpbiBtYW55IHByb2Zlc3Npb25hbCBpbWFnaW5nIG9y
IGNvbG9yaXN0IHNvZnR3YXJlLiBUaGUgZ2xvYmFsIGNvbnRyb2xzIGFyZSBhcHBsaWVkIHRvIHRo
ZSBlbnRpcmUgaW1hZ2UuIEZvciBhZHZhbmNlZCB0dW5pbmcsIGV4dHJhIGNvbnRyb2xzIGFyZSBw
cm92aWRlZCB0byBhZGp1c3QgdGhlIHNoYWRvdywgbWlkdG9uZSBhbmQgaGlnaGxpZ2h0IGFyZWFz
IG9mIHRoZSBpbWFnZTsKKyAqIGNvcnJlc3BvbmRpbmcgdG8gbG93IGx1bWluYW5jZSwgbWVkaXVt
IGx1bWluYW5jZSwgYW5kIGhpZ2ggbHVtaW5hbmNlIGFyZWFzIHJlc3BlY3RpdmVseS4KKyAqLwor
dmFyIENvbG9yQ3VydmVzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0
aW9uIENvbG9yQ3VydmVzKCkgeworICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7CisgICAgICAg
IHRoaXMuX3RlbXBDb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJDb2xvcjQiXSgwLCAwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fZ2xvYmFs
Q3VydmUgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQ29sb3I0Il0oMCwgMCwgMCwgMCk7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodHNDdXJ2ZSA9
IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb2xv
cjQiXSgwLCAwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fbWlkdG9uZXNDdXJ2ZSA9IG5ldyBfTWF0
aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb2xvcjQiXSgwLCAw
LCAwLCAwKTsKKyAgICAgICAgdGhpcy5fc2hhZG93c0N1cnZlID0gbmV3IF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9yNCJdKDAsIDAsIDAsIDApOwor
ICAgICAgICB0aGlzLl9wb3NpdGl2ZUN1cnZlID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbG9yNCJdKDAsIDAsIDAsIDApOworICAgICAgICB0
aGlzLl9uZWdhdGl2ZUN1cnZlID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkNvbG9yNCJdKDAsIDAsIDAsIDApOworICAgICAgICB0aGlzLl9nbG9i
YWxIdWUgPSAzMDsKKyAgICAgICAgdGhpcy5fZ2xvYmFsRGVuc2l0eSA9IDA7CisgICAgICAgIHRo
aXMuX2dsb2JhbFNhdHVyYXRpb24gPSAwOworICAgICAgICB0aGlzLl9nbG9iYWxFeHBvc3VyZSA9
IDA7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodHNIdWUgPSAzMDsKKyAgICAgICAgdGhpcy5faGln
aGxpZ2h0c0RlbnNpdHkgPSAwOworICAgICAgICB0aGlzLl9oaWdobGlnaHRzU2F0dXJhdGlvbiA9
IDA7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodHNFeHBvc3VyZSA9IDA7CisgICAgICAgIHRoaXMu
X21pZHRvbmVzSHVlID0gMzA7CisgICAgICAgIHRoaXMuX21pZHRvbmVzRGVuc2l0eSA9IDA7Cisg
ICAgICAgIHRoaXMuX21pZHRvbmVzU2F0dXJhdGlvbiA9IDA7CisgICAgICAgIHRoaXMuX21pZHRv
bmVzRXhwb3N1cmUgPSAwOworICAgICAgICB0aGlzLl9zaGFkb3dzSHVlID0gMzA7CisgICAgICAg
IHRoaXMuX3NoYWRvd3NEZW5zaXR5ID0gMDsKKyAgICAgICAgdGhpcy5fc2hhZG93c1NhdHVyYXRp
b24gPSAwOworICAgICAgICB0aGlzLl9zaGFkb3dzRXhwb3N1cmUgPSAwOworICAgIH0KKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAiZ2xvYmFsSHVlIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZ2xvYmFsIEh1ZSB2YWx1ZS4KKyAg
ICAgICAgICogVGhlIGh1ZSB2YWx1ZSBpcyBhIHN0YW5kYXJkIEhTQiBodWUgaW4gdGhlIHJhbmdl
IFswLDM2MF0gd2hlcmUgMD1yZWQsIDEyMD1ncmVlbiBhbmQgMjQwPWJsdWUuIFRoZSBkZWZhdWx0
IHZhbHVlIGlzIDMwIGRlZ3JlZXMgKG9yYW5nZSkuCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbG9iYWxIdWU7CisgICAg
ICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBnbG9iYWwgSHVlIHZhbHVl
LgorICAgICAgICAgKiBUaGUgaHVlIHZhbHVlIGlzIGEgc3RhbmRhcmQgSFNCIGh1ZSBpbiB0aGUg
cmFuZ2UgWzAsMzYwXSB3aGVyZSAwPXJlZCwgMTIwPWdyZWVuIGFuZCAyNDA9Ymx1ZS4gVGhlIGRl
ZmF1bHQgdmFsdWUgaXMgMzAgZGVncmVlcyAob3JhbmdlKS4KKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9nbG9iYWxIdWUgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yQ3VydmVzLnByb3RvdHlwZSwgImdsb2Jh
bERlbnNpdHkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBnbG9iYWwgRGVu
c2l0eSB2YWx1ZS4KKyAgICAgICAgICogVGhlIGRlbnNpdHkgdmFsdWUgaXMgaW4gcmFuZ2UgWy0x
MDAsKzEwMF0gd2hlcmUgMCBtZWFucyB0aGUgY29sb3IgZmlsdGVyIGhhcyBubyBlZmZlY3QgYW5k
ICsxMDAgbWVhbnMgdGhlIGNvbG9yIGZpbHRlciBoYXMgbWF4aW11bSBlZmZlY3QuCisgICAgICAg
ICAqIFZhbHVlcyBsZXNzIHRoYW4gemVybyBwcm92aWRlIGEgZmlsdGVyIG9mIG9wcG9zaXRlIGh1
ZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2dsb2JhbERlbnNpdHk7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBTZXRzIHRoZSBnbG9iYWwgRGVuc2l0eSB2YWx1ZS4KKyAgICAgICAgICogVGhlIGRl
bnNpdHkgdmFsdWUgaXMgaW4gcmFuZ2UgWy0xMDAsKzEwMF0gd2hlcmUgMCBtZWFucyB0aGUgY29s
b3IgZmlsdGVyIGhhcyBubyBlZmZlY3QgYW5kICsxMDAgbWVhbnMgdGhlIGNvbG9yIGZpbHRlciBo
YXMgbWF4aW11bSBlZmZlY3QuCisgICAgICAgICAqIFZhbHVlcyBsZXNzIHRoYW4gemVybyBwcm92
aWRlIGEgZmlsdGVyIG9mIG9wcG9zaXRlIGh1ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9nbG9iYWxEZW5zaXR5ID0gdmFs
dWU7CisgICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvckN1cnZlcy5wcm90b3R5cGUsICJnbG9iYWxT
YXR1cmF0aW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZ2xvYmFsIFNh
dHVyYXRpb24gdmFsdWUuCisgICAgICAgICAqIFRoaXMgaXMgYW4gYWRqdXN0bWVudCB2YWx1ZSBp
biB0aGUgcmFuZ2UgWy0xMDAsKzEwMF0sIHdoZXJlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDAuMCBt
YWtlcyBubyBhZGp1c3RtZW50LCBwb3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2Ugc2F0dXJhdGlvbiBh
bmQgbmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIHNhdHVyYXRpb24uCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbG9iYWxT
YXR1cmF0aW9uOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUg
Z2xvYmFsIFNhdHVyYXRpb24gdmFsdWUuCisgICAgICAgICAqIFRoaXMgaXMgYW4gYWRqdXN0bWVu
dCB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xMDAsKzEwMF0sIHdoZXJlIHRoZSBkZWZhdWx0IHZhbHVl
IG9mIDAuMCBtYWtlcyBubyBhZGp1c3RtZW50LCBwb3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2Ugc2F0
dXJhdGlvbiBhbmQgbmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIHNhdHVyYXRpb24uCisgICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5f
Z2xvYmFsU2F0dXJhdGlvbiA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVl
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JDdXJ2
ZXMucHJvdG90eXBlLCAiZ2xvYmFsRXhwb3N1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBnbG9iYWwgRXhwb3N1cmUgdmFsdWUuCisgICAgICAgICAqIFRoaXMgaXMgYW4g
YWRqdXN0bWVudCB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xMDAsKzEwMF0sIHdoZXJlIHRoZSBkZWZh
dWx0IHZhbHVlIG9mIDAuMCBtYWtlcyBubyBhZGp1c3RtZW50LCBwb3NpdGl2ZSB2YWx1ZXMgaW5j
cmVhc2UgZXhwb3N1cmUgYW5kIG5lZ2F0aXZlIHZhbHVlcyBkZWNyZWFzZSBleHBvc3VyZS4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2dsb2JhbEV4cG9zdXJlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAg
ICogU2V0cyB0aGUgZ2xvYmFsIEV4cG9zdXJlIHZhbHVlLgorICAgICAgICAgKiBUaGlzIGlzIGFu
IGFkanVzdG1lbnQgdmFsdWUgaW4gdGhlIHJhbmdlIFstMTAwLCsxMDBdLCB3aGVyZSB0aGUgZGVm
YXVsdCB2YWx1ZSBvZiAwLjAgbWFrZXMgbm8gYWRqdXN0bWVudCwgcG9zaXRpdmUgdmFsdWVzIGlu
Y3JlYXNlIGV4cG9zdXJlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgZGVjcmVhc2UgZXhwb3N1cmUuCisg
ICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAg
dGhpcy5fZ2xvYmFsRXhwb3N1cmUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0g
dHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9y
Q3VydmVzLnByb3RvdHlwZSwgImhpZ2hsaWdodHNIdWUiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSBoaWdobGlnaHRzIEh1ZSB2YWx1ZS4KKyAgICAgICAgICogVGhlIGh1ZSB2
YWx1ZSBpcyBhIHN0YW5kYXJkIEhTQiBodWUgaW4gdGhlIHJhbmdlIFswLDM2MF0gd2hlcmUgMD1y
ZWQsIDEyMD1ncmVlbiBhbmQgMjQwPWJsdWUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDMwIGRlZ3Jl
ZXMgKG9yYW5nZSkuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHRzSHVlOworICAgICAgICB9LAorICAgICAg
ICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgaGlnaGxpZ2h0cyBIdWUgdmFsdWUuCisgICAgICAg
ICAqIFRoZSBodWUgdmFsdWUgaXMgYSBzdGFuZGFyZCBIU0IgaHVlIGluIHRoZSByYW5nZSBbMCwz
NjBdIHdoZXJlIDA9cmVkLCAxMjA9Z3JlZW4gYW5kIDI0MD1ibHVlLiBUaGUgZGVmYXVsdCB2YWx1
ZSBpcyAzMCBkZWdyZWVzIChvcmFuZ2UpLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodHNIdWUgPSB2YWx1ZTsK
KyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yQ3VydmVzLnByb3RvdHlwZSwgImhpZ2hsaWdodHNE
ZW5zaXR5IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgaGlnaGxpZ2h0cyBE
ZW5zaXR5IHZhbHVlLgorICAgICAgICAgKiBUaGUgZGVuc2l0eSB2YWx1ZSBpcyBpbiByYW5nZSBb
LTEwMCwrMTAwXSB3aGVyZSAwIG1lYW5zIHRoZSBjb2xvciBmaWx0ZXIgaGFzIG5vIGVmZmVjdCBh
bmQgKzEwMCBtZWFucyB0aGUgY29sb3IgZmlsdGVyIGhhcyBtYXhpbXVtIGVmZmVjdC4KKyAgICAg
ICAgICogVmFsdWVzIGxlc3MgdGhhbiB6ZXJvIHByb3ZpZGUgYSBmaWx0ZXIgb2Ygb3Bwb3NpdGUg
aHVlLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0c0RlbnNpdHk7CisgICAgICAgIH0sCisgICAgICAgIC8q
KgorICAgICAgICAgKiBTZXRzIHRoZSBoaWdobGlnaHRzIERlbnNpdHkgdmFsdWUuCisgICAgICAg
ICAqIFRoZSBkZW5zaXR5IHZhbHVlIGlzIGluIHJhbmdlIFstMTAwLCsxMDBdIHdoZXJlIDAgbWVh
bnMgdGhlIGNvbG9yIGZpbHRlciBoYXMgbm8gZWZmZWN0IGFuZCArMTAwIG1lYW5zIHRoZSBjb2xv
ciBmaWx0ZXIgaGFzIG1heGltdW0gZWZmZWN0LgorICAgICAgICAgKiBWYWx1ZXMgbGVzcyB0aGFu
IHplcm8gcHJvdmlkZSBhIGZpbHRlciBvZiBvcHBvc2l0ZSBodWUuCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0
c0RlbnNpdHkgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yQ3VydmVzLnByb3Rv
dHlwZSwgImhpZ2hsaWdodHNTYXR1cmF0aW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgaGlnaGxpZ2h0cyBTYXR1cmF0aW9uIHZhbHVlLgorICAgICAgICAgKiBUaGlzIGlz
IGFuIGFkanVzdG1lbnQgdmFsdWUgaW4gdGhlIHJhbmdlIFstMTAwLCsxMDBdLCB3aGVyZSB0aGUg
ZGVmYXVsdCB2YWx1ZSBvZiAwLjAgbWFrZXMgbm8gYWRqdXN0bWVudCwgcG9zaXRpdmUgdmFsdWVz
IGluY3JlYXNlIHNhdHVyYXRpb24gYW5kIG5lZ2F0aXZlIHZhbHVlcyBkZWNyZWFzZSBzYXR1cmF0
aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0c1NhdHVyYXRpb247CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBoaWdobGlnaHRzIFNhdHVyYXRpb24gdmFsdWUuCisg
ICAgICAgICAqIFRoaXMgaXMgYW4gYWRqdXN0bWVudCB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xMDAs
KzEwMF0sIHdoZXJlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDAuMCBtYWtlcyBubyBhZGp1c3RtZW50
LCBwb3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2Ugc2F0dXJhdGlvbiBhbmQgbmVnYXRpdmUgdmFsdWVz
IGRlY3JlYXNlIHNhdHVyYXRpb24uCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0c1NhdHVyYXRpb24gPSB2YWx1
ZTsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yQ3VydmVzLnByb3RvdHlwZSwgImhpZ2hsaWdo
dHNFeHBvc3VyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGhpZ2hsaWdo
dHMgRXhwb3N1cmUgdmFsdWUuCisgICAgICAgICAqIFRoaXMgaXMgYW4gYWRqdXN0bWVudCB2YWx1
ZSBpbiB0aGUgcmFuZ2UgWy0xMDAsKzEwMF0sIHdoZXJlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDAu
MCBtYWtlcyBubyBhZGp1c3RtZW50LCBwb3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2UgZXhwb3N1cmUg
YW5kIG5lZ2F0aXZlIHZhbHVlcyBkZWNyZWFzZSBleHBvc3VyZS4KKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hpZ2hsaWdo
dHNFeHBvc3VyZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhl
IGhpZ2hsaWdodHMgRXhwb3N1cmUgdmFsdWUuCisgICAgICAgICAqIFRoaXMgaXMgYW4gYWRqdXN0
bWVudCB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xMDAsKzEwMF0sIHdoZXJlIHRoZSBkZWZhdWx0IHZh
bHVlIG9mIDAuMCBtYWtlcyBubyBhZGp1c3RtZW50LCBwb3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2Ug
ZXhwb3N1cmUgYW5kIG5lZ2F0aXZlIHZhbHVlcyBkZWNyZWFzZSBleHBvc3VyZS4KKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9o
aWdobGlnaHRzRXhwb3N1cmUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yQ3Vy
dmVzLnByb3RvdHlwZSwgIm1pZHRvbmVzSHVlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgbWlkdG9uZXMgSHVlIHZhbHVlLgorICAgICAgICAgKiBUaGUgaHVlIHZhbHVlIGlz
IGEgc3RhbmRhcmQgSFNCIGh1ZSBpbiB0aGUgcmFuZ2UgWzAsMzYwXSB3aGVyZSAwPXJlZCwgMTIw
PWdyZWVuIGFuZCAyNDA9Ymx1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzAgZGVncmVlcyAob3Jh
bmdlKS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX21pZHRvbmVzSHVlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAg
ICAgICAgICogU2V0cyB0aGUgbWlkdG9uZXMgSHVlIHZhbHVlLgorICAgICAgICAgKiBUaGUgaHVl
IHZhbHVlIGlzIGEgc3RhbmRhcmQgSFNCIGh1ZSBpbiB0aGUgcmFuZ2UgWzAsMzYwXSB3aGVyZSAw
PXJlZCwgMTIwPWdyZWVuIGFuZCAyNDA9Ymx1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzAgZGVn
cmVlcyAob3JhbmdlKS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9taWR0b25lc0h1ZSA9IHZhbHVlOworICAgICAgICAgICAg
dGhpcy5fZGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAibWlkdG9uZXNEZW5zaXR5IiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbWlkdG9uZXMgRGVuc2l0eSB2YWx1ZS4KKyAg
ICAgICAgICogVGhlIGRlbnNpdHkgdmFsdWUgaXMgaW4gcmFuZ2UgWy0xMDAsKzEwMF0gd2hlcmUg
MCBtZWFucyB0aGUgY29sb3IgZmlsdGVyIGhhcyBubyBlZmZlY3QgYW5kICsxMDAgbWVhbnMgdGhl
IGNvbG9yIGZpbHRlciBoYXMgbWF4aW11bSBlZmZlY3QuCisgICAgICAgICAqIFZhbHVlcyBsZXNz
IHRoYW4gemVybyBwcm92aWRlIGEgZmlsdGVyIG9mIG9wcG9zaXRlIGh1ZS4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21p
ZHRvbmVzRGVuc2l0eTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMg
dGhlIG1pZHRvbmVzIERlbnNpdHkgdmFsdWUuCisgICAgICAgICAqIFRoZSBkZW5zaXR5IHZhbHVl
IGlzIGluIHJhbmdlIFstMTAwLCsxMDBdIHdoZXJlIDAgbWVhbnMgdGhlIGNvbG9yIGZpbHRlciBo
YXMgbm8gZWZmZWN0IGFuZCArMTAwIG1lYW5zIHRoZSBjb2xvciBmaWx0ZXIgaGFzIG1heGltdW0g
ZWZmZWN0LgorICAgICAgICAgKiBWYWx1ZXMgbGVzcyB0aGFuIHplcm8gcHJvdmlkZSBhIGZpbHRl
ciBvZiBvcHBvc2l0ZSBodWUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbWlkdG9uZXNEZW5zaXR5ID0gdmFsdWU7CisgICAg
ICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShDb2xvckN1cnZlcy5wcm90b3R5cGUsICJtaWR0b25lc1NhdHVyYXRp
b24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBtaWR0b25lcyBTYXR1cmF0
aW9uIHZhbHVlLgorICAgICAgICAgKiBUaGlzIGlzIGFuIGFkanVzdG1lbnQgdmFsdWUgaW4gdGhl
IHJhbmdlIFstMTAwLCsxMDBdLCB3aGVyZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAwLjAgbWFrZXMg
bm8gYWRqdXN0bWVudCwgcG9zaXRpdmUgdmFsdWVzIGluY3JlYXNlIHNhdHVyYXRpb24gYW5kIG5l
Z2F0aXZlIHZhbHVlcyBkZWNyZWFzZSBzYXR1cmF0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWlkdG9uZXNTYXR1
cmF0aW9uOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgbWlk
dG9uZXMgU2F0dXJhdGlvbiB2YWx1ZS4KKyAgICAgICAgICogVGhpcyBpcyBhbiBhZGp1c3RtZW50
IHZhbHVlIGluIHRoZSByYW5nZSBbLTEwMCwrMTAwXSwgd2hlcmUgdGhlIGRlZmF1bHQgdmFsdWUg
b2YgMC4wIG1ha2VzIG5vIGFkanVzdG1lbnQsIHBvc2l0aXZlIHZhbHVlcyBpbmNyZWFzZSBzYXR1
cmF0aW9uIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgZGVjcmVhc2Ugc2F0dXJhdGlvbi4KKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9t
aWR0b25lc1NhdHVyYXRpb24gPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yQ3Vy
dmVzLnByb3RvdHlwZSwgIm1pZHRvbmVzRXhwb3N1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSBtaWR0b25lcyBFeHBvc3VyZSB2YWx1ZS4KKyAgICAgICAgICogVGhpcyBp
cyBhbiBhZGp1c3RtZW50IHZhbHVlIGluIHRoZSByYW5nZSBbLTEwMCwrMTAwXSwgd2hlcmUgdGhl
IGRlZmF1bHQgdmFsdWUgb2YgMC4wIG1ha2VzIG5vIGFkanVzdG1lbnQsIHBvc2l0aXZlIHZhbHVl
cyBpbmNyZWFzZSBleHBvc3VyZSBhbmQgbmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIGV4cG9zdXJl
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fbWlkdG9uZXNFeHBvc3VyZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNldHMgdGhlIG1pZHRvbmVzIEV4cG9zdXJlIHZhbHVlLgorICAgICAgICAgKiBU
aGlzIGlzIGFuIGFkanVzdG1lbnQgdmFsdWUgaW4gdGhlIHJhbmdlIFstMTAwLCsxMDBdLCB3aGVy
ZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAwLjAgbWFrZXMgbm8gYWRqdXN0bWVudCwgcG9zaXRpdmUg
dmFsdWVzIGluY3JlYXNlIGV4cG9zdXJlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgZGVjcmVhc2UgZXhw
b3N1cmUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgdGhpcy5fbWlkdG9uZXNFeHBvc3VyZSA9IHZhbHVlOworICAgICAgICAgICAgdGhp
cy5fZGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAic2hhZG93c0h1ZSIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgdGhlIHNoYWRvd3MgSHVlIHZhbHVlLgorICAgICAgICAgKiBUaGUg
aHVlIHZhbHVlIGlzIGEgc3RhbmRhcmQgSFNCIGh1ZSBpbiB0aGUgcmFuZ2UgWzAsMzYwXSB3aGVy
ZSAwPXJlZCwgMTIwPWdyZWVuIGFuZCAyNDA9Ymx1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzAg
ZGVncmVlcyAob3JhbmdlKS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRvd3NIdWU7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBzaGFkb3dzIEh1ZSB2YWx1ZS4KKyAgICAgICAg
ICogVGhlIGh1ZSB2YWx1ZSBpcyBhIHN0YW5kYXJkIEhTQiBodWUgaW4gdGhlIHJhbmdlIFswLDM2
MF0gd2hlcmUgMD1yZWQsIDEyMD1ncmVlbiBhbmQgMjQwPWJsdWUuIFRoZSBkZWZhdWx0IHZhbHVl
IGlzIDMwIGRlZ3JlZXMgKG9yYW5nZSkuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fc2hhZG93c0h1ZSA9IHZhbHVlOworICAg
ICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAic2hhZG93c0RlbnNpdHki
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBzaGFkb3dzIERlbnNpdHkgdmFs
dWUuCisgICAgICAgICAqIFRoZSBkZW5zaXR5IHZhbHVlIGlzIGluIHJhbmdlIFstMTAwLCsxMDBd
IHdoZXJlIDAgbWVhbnMgdGhlIGNvbG9yIGZpbHRlciBoYXMgbm8gZWZmZWN0IGFuZCArMTAwIG1l
YW5zIHRoZSBjb2xvciBmaWx0ZXIgaGFzIG1heGltdW0gZWZmZWN0LgorICAgICAgICAgKiBWYWx1
ZXMgbGVzcyB0aGFuIHplcm8gcHJvdmlkZSBhIGZpbHRlciBvZiBvcHBvc2l0ZSBodWUuCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9zaGFkb3dzRGVuc2l0eTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFNldHMgdGhlIHNoYWRvd3MgRGVuc2l0eSB2YWx1ZS4KKyAgICAgICAgICogVGhlIGRlbnNpdHkg
dmFsdWUgaXMgaW4gcmFuZ2UgWy0xMDAsKzEwMF0gd2hlcmUgMCBtZWFucyB0aGUgY29sb3IgZmls
dGVyIGhhcyBubyBlZmZlY3QgYW5kICsxMDAgbWVhbnMgdGhlIGNvbG9yIGZpbHRlciBoYXMgbWF4
aW11bSBlZmZlY3QuCisgICAgICAgICAqIFZhbHVlcyBsZXNzIHRoYW4gemVybyBwcm92aWRlIGEg
ZmlsdGVyIG9mIG9wcG9zaXRlIGh1ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9zaGFkb3dzRGVuc2l0eSA9IHZhbHVlOwor
ICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAic2hhZG93c1NhdHVy
YXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBzaGFkb3dzIFNhdHVy
YXRpb24gdmFsdWUuCisgICAgICAgICAqIFRoaXMgaXMgYW4gYWRqdXN0bWVudCB2YWx1ZSBpbiB0
aGUgcmFuZ2UgWy0xMDAsKzEwMF0sIHdoZXJlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDAuMCBtYWtl
cyBubyBhZGp1c3RtZW50LCBwb3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2Ugc2F0dXJhdGlvbiBhbmQg
bmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIHNhdHVyYXRpb24uCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFkb3dzU2F0
dXJhdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHNo
YWRvd3MgU2F0dXJhdGlvbiB2YWx1ZS4KKyAgICAgICAgICogVGhpcyBpcyBhbiBhZGp1c3RtZW50
IHZhbHVlIGluIHRoZSByYW5nZSBbLTEwMCwrMTAwXSwgd2hlcmUgdGhlIGRlZmF1bHQgdmFsdWUg
b2YgMC4wIG1ha2VzIG5vIGFkanVzdG1lbnQsIHBvc2l0aXZlIHZhbHVlcyBpbmNyZWFzZSBzYXR1
cmF0aW9uIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgZGVjcmVhc2Ugc2F0dXJhdGlvbi4KKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9z
aGFkb3dzU2F0dXJhdGlvbiA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVl
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JDdXJ2
ZXMucHJvdG90eXBlLCAic2hhZG93c0V4cG9zdXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgc2hhZG93cyBFeHBvc3VyZSB2YWx1ZS4KKyAgICAgICAgICogVGhpcyBpcyBh
biBhZGp1c3RtZW50IHZhbHVlIGluIHRoZSByYW5nZSBbLTEwMCwrMTAwXSwgd2hlcmUgdGhlIGRl
ZmF1bHQgdmFsdWUgb2YgMC4wIG1ha2VzIG5vIGFkanVzdG1lbnQsIHBvc2l0aXZlIHZhbHVlcyBp
bmNyZWFzZSBleHBvc3VyZSBhbmQgbmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIGV4cG9zdXJlLgor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fc2hhZG93c0V4cG9zdXJlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAg
ICAgICogU2V0cyB0aGUgc2hhZG93cyBFeHBvc3VyZSB2YWx1ZS4KKyAgICAgICAgICogVGhpcyBp
cyBhbiBhZGp1c3RtZW50IHZhbHVlIGluIHRoZSByYW5nZSBbLTEwMCwrMTAwXSwgd2hlcmUgdGhl
IGRlZmF1bHQgdmFsdWUgb2YgMC4wIG1ha2VzIG5vIGFkanVzdG1lbnQsIHBvc2l0aXZlIHZhbHVl
cyBpbmNyZWFzZSBleHBvc3VyZSBhbmQgbmVnYXRpdmUgdmFsdWVzIGRlY3JlYXNlIGV4cG9zdXJl
LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3NoYWRvd3NFeHBvc3VyZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fZGly
dHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgVGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAg
ICBDb2xvckN1cnZlcy5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIkNvbG9yQ3VydmVzIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRz
IHRoZSBjb2xvciBjdXJ2ZXMgdG8gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0gY29sb3JDdXJ2
ZXMgVGhlIGNvbG9yIGN1cnZlIHRvIGJpbmQKKyAgICAgKiBAcGFyYW0gZWZmZWN0IFRoZSBlZmZl
Y3QgdG8gYmluZCB0bworICAgICAqIEBwYXJhbSBwb3NpdGl2ZVVuaWZvcm0gVGhlIHBvc2l0aXZl
IHVuaWZvcm0gc2hhZGVyIHBhcmFtZXRlcgorICAgICAqIEBwYXJhbSBuZXV0cmFsVW5pZm9ybSBU
aGUgbmV1dHJhbCB1bmlmb3JtIHNoYWRlciBwYXJhbWV0ZXIKKyAgICAgKiBAcGFyYW0gbmVnYXRp
dmVVbmlmb3JtIFRoZSBuZWdhdGl2ZSB1bmlmb3JtIHNoYWRlciBwYXJhbWV0ZXIKKyAgICAgKi8K
KyAgICBDb2xvckN1cnZlcy5CaW5kID0gZnVuY3Rpb24gKGNvbG9yQ3VydmVzLCBlZmZlY3QsIHBv
c2l0aXZlVW5pZm9ybSwgbmV1dHJhbFVuaWZvcm0sIG5lZ2F0aXZlVW5pZm9ybSkgeworICAgICAg
ICBpZiAocG9zaXRpdmVVbmlmb3JtID09PSB2b2lkIDApIHsgcG9zaXRpdmVVbmlmb3JtID0gInZD
YW1lcmFDb2xvckN1cnZlUG9zaXRpdmUiOyB9CisgICAgICAgIGlmIChuZXV0cmFsVW5pZm9ybSA9
PT0gdm9pZCAwKSB7IG5ldXRyYWxVbmlmb3JtID0gInZDYW1lcmFDb2xvckN1cnZlTmV1dHJhbCI7
IH0KKyAgICAgICAgaWYgKG5lZ2F0aXZlVW5pZm9ybSA9PT0gdm9pZCAwKSB7IG5lZ2F0aXZlVW5p
Zm9ybSA9ICJ2Q2FtZXJhQ29sb3JDdXJ2ZU5lZ2F0aXZlIjsgfQorICAgICAgICBpZiAoY29sb3JD
dXJ2ZXMuX2RpcnR5KSB7CisgICAgICAgICAgICBjb2xvckN1cnZlcy5fZGlydHkgPSBmYWxzZTsK
KyAgICAgICAgICAgIC8vIEZpbGwgaW4gZ2xvYmFsIGluZm8uCisgICAgICAgICAgICBjb2xvckN1
cnZlcy5nZXRDb2xvckdyYWRpbmdEYXRhVG9SZWYoY29sb3JDdXJ2ZXMuX2dsb2JhbEh1ZSwgY29s
b3JDdXJ2ZXMuX2dsb2JhbERlbnNpdHksIGNvbG9yQ3VydmVzLl9nbG9iYWxTYXR1cmF0aW9uLCBj
b2xvckN1cnZlcy5fZ2xvYmFsRXhwb3N1cmUsIGNvbG9yQ3VydmVzLl9nbG9iYWxDdXJ2ZSk7Cisg
ICAgICAgICAgICAvLyBDb21wdXRlIGhpZ2hsaWdodHMgaW5mby4KKyAgICAgICAgICAgIGNvbG9y
Q3VydmVzLmdldENvbG9yR3JhZGluZ0RhdGFUb1JlZihjb2xvckN1cnZlcy5faGlnaGxpZ2h0c0h1
ZSwgY29sb3JDdXJ2ZXMuX2hpZ2hsaWdodHNEZW5zaXR5LCBjb2xvckN1cnZlcy5faGlnaGxpZ2h0
c1NhdHVyYXRpb24sIGNvbG9yQ3VydmVzLl9oaWdobGlnaHRzRXhwb3N1cmUsIGNvbG9yQ3VydmVz
Ll90ZW1wQ29sb3IpOworICAgICAgICAgICAgY29sb3JDdXJ2ZXMuX3RlbXBDb2xvci5tdWx0aXBs
eVRvUmVmKGNvbG9yQ3VydmVzLl9nbG9iYWxDdXJ2ZSwgY29sb3JDdXJ2ZXMuX2hpZ2hsaWdodHND
dXJ2ZSk7CisgICAgICAgICAgICAvLyBDb21wdXRlIG1pZHRvbmVzIGluZm8uCisgICAgICAgICAg
ICBjb2xvckN1cnZlcy5nZXRDb2xvckdyYWRpbmdEYXRhVG9SZWYoY29sb3JDdXJ2ZXMuX21pZHRv
bmVzSHVlLCBjb2xvckN1cnZlcy5fbWlkdG9uZXNEZW5zaXR5LCBjb2xvckN1cnZlcy5fbWlkdG9u
ZXNTYXR1cmF0aW9uLCBjb2xvckN1cnZlcy5fbWlkdG9uZXNFeHBvc3VyZSwgY29sb3JDdXJ2ZXMu
X3RlbXBDb2xvcik7CisgICAgICAgICAgICBjb2xvckN1cnZlcy5fdGVtcENvbG9yLm11bHRpcGx5
VG9SZWYoY29sb3JDdXJ2ZXMuX2dsb2JhbEN1cnZlLCBjb2xvckN1cnZlcy5fbWlkdG9uZXNDdXJ2
ZSk7CisgICAgICAgICAgICAvLyBDb21wdXRlIHNoYWRvd3MgaW5mby4KKyAgICAgICAgICAgIGNv
bG9yQ3VydmVzLmdldENvbG9yR3JhZGluZ0RhdGFUb1JlZihjb2xvckN1cnZlcy5fc2hhZG93c0h1
ZSwgY29sb3JDdXJ2ZXMuX3NoYWRvd3NEZW5zaXR5LCBjb2xvckN1cnZlcy5fc2hhZG93c1NhdHVy
YXRpb24sIGNvbG9yQ3VydmVzLl9zaGFkb3dzRXhwb3N1cmUsIGNvbG9yQ3VydmVzLl90ZW1wQ29s
b3IpOworICAgICAgICAgICAgY29sb3JDdXJ2ZXMuX3RlbXBDb2xvci5tdWx0aXBseVRvUmVmKGNv
bG9yQ3VydmVzLl9nbG9iYWxDdXJ2ZSwgY29sb3JDdXJ2ZXMuX3NoYWRvd3NDdXJ2ZSk7CisgICAg
ICAgICAgICAvLyBDb21wdXRlIGRlbHRhcyAobmV1dHJhbCBpcyBtaWR0b25lcykuCisgICAgICAg
ICAgICBjb2xvckN1cnZlcy5faGlnaGxpZ2h0c0N1cnZlLnN1YnRyYWN0VG9SZWYoY29sb3JDdXJ2
ZXMuX21pZHRvbmVzQ3VydmUsIGNvbG9yQ3VydmVzLl9wb3NpdGl2ZUN1cnZlKTsKKyAgICAgICAg
ICAgIGNvbG9yQ3VydmVzLl9taWR0b25lc0N1cnZlLnN1YnRyYWN0VG9SZWYoY29sb3JDdXJ2ZXMu
X3NoYWRvd3NDdXJ2ZSwgY29sb3JDdXJ2ZXMuX25lZ2F0aXZlQ3VydmUpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDQocG9zaXRp
dmVVbmlmb3JtLCBjb2xvckN1cnZlcy5fcG9zaXRpdmVDdXJ2ZS5yLCBjb2xvckN1cnZlcy5fcG9z
aXRpdmVDdXJ2ZS5nLCBjb2xvckN1cnZlcy5fcG9zaXRpdmVDdXJ2ZS5iLCBjb2xvckN1cnZlcy5f
cG9zaXRpdmVDdXJ2ZS5hKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDQobmV1dHJhbFVu
aWZvcm0sIGNvbG9yQ3VydmVzLl9taWR0b25lc0N1cnZlLnIsIGNvbG9yQ3VydmVzLl9taWR0b25l
c0N1cnZlLmcsIGNvbG9yQ3VydmVzLl9taWR0b25lc0N1cnZlLmIsIGNvbG9yQ3VydmVzLl9taWR0
b25lc0N1cnZlLmEpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0NChuZWdhdGl2ZVVuaWZv
cm0sIGNvbG9yQ3VydmVzLl9uZWdhdGl2ZUN1cnZlLnIsIGNvbG9yQ3VydmVzLl9uZWdhdGl2ZUN1
cnZlLmcsIGNvbG9yQ3VydmVzLl9uZWdhdGl2ZUN1cnZlLmIsIGNvbG9yQ3VydmVzLl9uZWdhdGl2
ZUN1cnZlLmEpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlIHRo
ZSBsaXN0IG9mIHVuaWZvcm1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ29sb3JDdXJ2ZXMgZWZmZWN0
cy4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybXNMaXN0IFRoZSBsaXN0IG9mIHVuaWZvcm1zIHVzZWQg
aW4gdGhlIGVmZmVjdAorICAgICAqLworICAgIENvbG9yQ3VydmVzLlByZXBhcmVVbmlmb3JtcyA9
IGZ1bmN0aW9uICh1bmlmb3Jtc0xpc3QpIHsKKyAgICAgICAgdW5pZm9ybXNMaXN0LnB1c2goInZD
YW1lcmFDb2xvckN1cnZlTmV1dHJhbCIsICJ2Q2FtZXJhQ29sb3JDdXJ2ZVBvc2l0aXZlIiwgInZD
YW1lcmFDb2xvckN1cnZlTmVnYXRpdmUiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVy
bnMgY29sb3IgZ3JhZGluZyBkYXRhIGJhc2VkIG9uIGEgaHVlLCBkZW5zaXR5LCBzYXR1cmF0aW9u
IGFuZCBleHBvc3VyZSB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gZmlsdGVySHVlIFRoZSBodWUgb2Yg
dGhlIGNvbG9yIGZpbHRlci4KKyAgICAgKiBAcGFyYW0gZmlsdGVyRGVuc2l0eSBUaGUgZGVuc2l0
eSBvZiB0aGUgY29sb3IgZmlsdGVyLgorICAgICAqIEBwYXJhbSBzYXR1cmF0aW9uIFRoZSBzYXR1
cmF0aW9uLgorICAgICAqIEBwYXJhbSBleHBvc3VyZSBUaGUgZXhwb3N1cmUuCisgICAgICogQHBh
cmFtIHJlc3VsdCBUaGUgcmVzdWx0IGRhdGEgY29udGFpbmVyLgorICAgICAqLworICAgIENvbG9y
Q3VydmVzLnByb3RvdHlwZS5nZXRDb2xvckdyYWRpbmdEYXRhVG9SZWYgPSBmdW5jdGlvbiAoaHVl
LCBkZW5zaXR5LCBzYXR1cmF0aW9uLCBleHBvc3VyZSwgcmVzdWx0KSB7CisgICAgICAgIGlmICho
dWUgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGh1
ZSA9IENvbG9yQ3VydmVzLmNsYW1wKGh1ZSwgMCwgMzYwKTsKKyAgICAgICAgZGVuc2l0eSA9IENv
bG9yQ3VydmVzLmNsYW1wKGRlbnNpdHksIC0xMDAsIDEwMCk7CisgICAgICAgIHNhdHVyYXRpb24g
PSBDb2xvckN1cnZlcy5jbGFtcChzYXR1cmF0aW9uLCAtMTAwLCAxMDApOworICAgICAgICBleHBv
c3VyZSA9IENvbG9yQ3VydmVzLmNsYW1wKGV4cG9zdXJlLCAtMTAwLCAxMDApOworICAgICAgICAv
LyBSZW1hcCB0aGUgc2xpZGVyL2NvbmZpZyBmaWx0ZXIgZGVuc2l0eSB3aXRoIG5vbi1saW5lYXIg
bWFwcGluZyBhbmQgYWxzbyBzY2FsZSBieSBoYWxmCisgICAgICAgIC8vIHNvIHRoYXQgdGhlIG1h
eGltdW0gZmlsdGVyIGRlbnNpdHkgaXMgb25seSA1MCUgY29udHJvbC4gVGhpcyBwcm92aWRlcyBm
aW5lIGNvbnRyb2wKKyAgICAgICAgLy8gZm9yIHNtYWxsIHZhbHVlcyBhbmQgcmVhc29uYWJsZSBy
YW5nZS4KKyAgICAgICAgZGVuc2l0eSA9IENvbG9yQ3VydmVzLmFwcGx5Q29sb3JHcmFkaW5nU2xp
ZGVyTm9ubGluZWFyKGRlbnNpdHkpOworICAgICAgICBkZW5zaXR5ICo9IDAuNTsKKyAgICAgICAg
ZXhwb3N1cmUgPSBDb2xvckN1cnZlcy5hcHBseUNvbG9yR3JhZGluZ1NsaWRlck5vbmxpbmVhcihl
eHBvc3VyZSk7CisgICAgICAgIGlmIChkZW5zaXR5IDwgMCkgeworICAgICAgICAgICAgZGVuc2l0
eSAqPSAtMTsKKyAgICAgICAgICAgIGh1ZSA9IChodWUgKyAxODApICUgMzYwOworICAgICAgICB9
CisgICAgICAgIENvbG9yQ3VydmVzLmZyb21IU0JUb1JlZihodWUsIGRlbnNpdHksIDUwICsgMC4y
NSAqIGV4cG9zdXJlLCByZXN1bHQpOworICAgICAgICByZXN1bHQuc2NhbGVUb1JlZigyLCByZXN1
bHQpOworICAgICAgICByZXN1bHQuYSA9IDEgKyAwLjAxICogc2F0dXJhdGlvbjsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFRha2VzIGFuIGlucHV0IHNsaWRlciB2YWx1ZSBhbmQgcmV0dXJucyBh
biBhZGp1c3RlZCB2YWx1ZSB0aGF0IHByb3ZpZGVzIGV4dHJhIGNvbnRyb2wgbmVhciB0aGUgY2Vu
dHJlLgorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgaW5wdXQgc2xpZGVyIHZhbHVlIGluIHJhbmdl
IFstMTAwLDEwMF0uCisgICAgICogQHJldHVybnMgQWRqdXN0ZWQgdmFsdWUuCisgICAgICovCisg
ICAgQ29sb3JDdXJ2ZXMuYXBwbHlDb2xvckdyYWRpbmdTbGlkZXJOb25saW5lYXIgPSBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgdmFsdWUgLz0gMTAwOworICAgICAgICB2YXIgeCA9IE1hdGgu
YWJzKHZhbHVlKTsKKyAgICAgICAgeCA9IE1hdGgucG93KHgsIDIpOworICAgICAgICBpZiAodmFs
dWUgPCAwKSB7CisgICAgICAgICAgICB4ICo9IC0xOworICAgICAgICB9CisgICAgICAgIHggKj0g
MTAwOworICAgICAgICByZXR1cm4geDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YW4gUkdCQSBDb2xvcjQgYmFzZWQgb24gSHVlLCBTYXR1cmF0aW9uIGFuZCBCcmlnaHRuZXNzIChh
bHNvIHJlZmVycmVkIHRvIGFzIHZhbHVlLCBIU1YpLgorICAgICAqIEBwYXJhbSBodWUgVGhlIGh1
ZSAoSCkgaW5wdXQuCisgICAgICogQHBhcmFtIHNhdHVyYXRpb24gVGhlIHNhdHVyYXRpb24gKFMp
IGlucHV0LgorICAgICAqIEBwYXJhbSBicmlnaHRuZXNzIFRoZSBicmlnaHRuZXNzIChCKSBpbnB1
dC4KKyAgICAgKiBAcmVzdWx0IEFuIFJHQkEgY29sb3IgcmVwcmVzZW50ZWQgYXMgVmVjdG9yNC4K
KyAgICAgKi8KKyAgICBDb2xvckN1cnZlcy5mcm9tSFNCVG9SZWYgPSBmdW5jdGlvbiAoaHVlLCBz
YXR1cmF0aW9uLCBicmlnaHRuZXNzLCByZXN1bHQpIHsKKyAgICAgICAgdmFyIGggPSBDb2xvckN1
cnZlcy5jbGFtcChodWUsIDAsIDM2MCk7CisgICAgICAgIHZhciBzID0gQ29sb3JDdXJ2ZXMuY2xh
bXAoc2F0dXJhdGlvbiAvIDEwMCwgMCwgMSk7CisgICAgICAgIHZhciB2ID0gQ29sb3JDdXJ2ZXMu
Y2xhbXAoYnJpZ2h0bmVzcyAvIDEwMCwgMCwgMSk7CisgICAgICAgIGlmIChzID09PSAwKSB7Cisg
ICAgICAgICAgICByZXN1bHQuciA9IHY7CisgICAgICAgICAgICByZXN1bHQuZyA9IHY7CisgICAg
ICAgICAgICByZXN1bHQuYiA9IHY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAvLyBzZWN0b3IgMCB0byA1CisgICAgICAgICAgICBoIC89IDYwOworICAgICAgICAgICAg
dmFyIGkgPSBNYXRoLmZsb29yKGgpOworICAgICAgICAgICAgLy8gZnJhY3Rpb25hbCBwYXJ0IG9m
IGgKKyAgICAgICAgICAgIHZhciBmID0gaCAtIGk7CisgICAgICAgICAgICB2YXIgcCA9IHYgKiAo
MSAtIHMpOworICAgICAgICAgICAgdmFyIHEgPSB2ICogKDEgLSBzICogZik7CisgICAgICAgICAg
ICB2YXIgdCA9IHYgKiAoMSAtIHMgKiAoMSAtIGYpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoaSkg
eworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnIg
PSB2OworICAgICAgICAgICAgICAgICAgICByZXN1bHQuZyA9IHQ7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5iID0gcDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuciA9IHE7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5nID0gdjsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmIg
PSBwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yID0gcDsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmcgPSB2OworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYiA9IHQ7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnIgPSBwOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuZyA9IHE7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5iID0gdjsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICByZXN1
bHQuciA9IHQ7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nID0gcDsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LmIgPSB2OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OiAvLyBjYXNlIDU6CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5yID0gdjsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmcgPSBwOworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuYiA9IHE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlc3VsdC5hID0gMTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFJldHVybnMgYSB2YWx1ZSBjbGFtcGVkIGJldHdlZW4gbWluIGFuZCBtYXgKKyAg
ICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsYW1wCisgICAgICogQHBhcmFtIG1pbiBU
aGUgbWluaW11bSBvZiB2YWx1ZQorICAgICAqIEBwYXJhbSBtYXggVGhlIG1heGltdW0gb2YgdmFs
dWUKKyAgICAgKiBAcmV0dXJucyBUaGUgY2xhbXBlZCB2YWx1ZS4KKyAgICAgKi8KKyAgICBDb2xv
ckN1cnZlcy5jbGFtcCA9IGZ1bmN0aW9uICh2YWx1ZSwgbWluLCBtYXgpIHsKKyAgICAgICAgcmV0
dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlLCBtaW4pLCBtYXgpOworICAgIH07CisgICAgLyoq
CisgICAgICogQ2xvbmVzIHRoZSBjdXJyZW50IGNvbG9yIGN1cnZlIGluc3RhbmNlLgorICAgICAq
IEByZXR1cm4gVGhlIGNsb25lZCBjdXJ2ZXMKKyAgICAgKi8KKyAgICBDb2xvckN1cnZlcy5wcm90
b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5D
bG9uZShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29sb3JDdXJ2ZXMoKTsgfSwgdGhpcyk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBjdXJyZW50IGNvbG9yIGN1cnZl
IGluc3RhbmNlIHRvIGEganNvbiByZXByZXNlbnRhdGlvbi4KKyAgICAgKiBAcmV0dXJuIGEgSlNP
TiByZXByZXNlbnRhdGlvbgorICAgICAqLworICAgIENvbG9yQ3VydmVzLnByb3RvdHlwZS5zZXJp
YWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5TZXJpYWxp
emUodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgdGhlIGNvbG9yIGN1cnZl
IGZyb20gYSBqc29uIHJlcHJlc2VudGF0aW9uLgorICAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIEpT
T04gc291cmNlIHRvIHBhcnNlCisgICAgICogQHJldHVybiBUaGUgcGFyc2VkIGN1cnZlcworICAg
ICAqLworICAgIENvbG9yQ3VydmVzLlBhcnNlID0gZnVuY3Rpb24gKHNvdXJjZSkgeworICAgICAg
ICByZXR1cm4gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
ZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IENvbG9y
Q3VydmVzKCk7IH0sIHNvdXJjZSwgbnVsbCwgbnVsbCk7CisgICAgfTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIENvbG9yQ3VydmVzLnByb3RvdHlwZSwgIl9nbG9iYWxIdWUiLCB2b2lkIDAp
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAiX2ds
b2JhbERlbnNpdHkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQ29sb3JD
dXJ2ZXMucHJvdG90eXBlLCAiX2dsb2JhbFNhdHVyYXRpb24iLCB2b2lkIDApOworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZSJdKSgpCisgICAgXSwgQ29sb3JDdXJ2ZXMucHJvdG90eXBlLCAiX2dsb2JhbEV4cG9zdXJl
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIENvbG9yQ3VydmVzLnByb3Rv
dHlwZSwgIl9oaWdobGlnaHRzSHVlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIENvbG9yQ3VydmVzLnByb3RvdHlwZSwgIl9oaWdobGlnaHRzRGVuc2l0eSIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBDb2xvckN1cnZlcy5wcm90b3R5cGUsICJfaGln
aGxpZ2h0c1NhdHVyYXRpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
Q29sb3JDdXJ2ZXMucHJvdG90eXBlLCAiX2hpZ2hsaWdodHNFeHBvc3VyZSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBDb2xvckN1cnZlcy5wcm90b3R5cGUsICJfbWlkdG9u
ZXNIdWUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgQ29sb3JDdXJ2ZXMu
cHJvdG90eXBlLCAiX21pZHRvbmVzRGVuc2l0eSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBDb2xvckN1cnZlcy5wcm90b3R5cGUsICJfbWlkdG9uZXNTYXR1cmF0aW9uIiwg
dm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29y
YXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIENvbG9yQ3VydmVzLnByb3RvdHlw
ZSwgIl9taWR0b25lc0V4cG9zdXJlIiwgdm9pZCAwKTsKKyAgICByZXR1cm4gQ29sb3JDdXJ2ZXM7
Cit9KCkpOworCisvLyBSZWZlcmVuY2VzIHRoZSBkZXBlbmRlbmNpZXMuCitfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5f
Q29sb3JDdXJ2ZXNQYXJzZXIgPSBDb2xvckN1cnZlcy5QYXJzZTsKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL2VmZmVjdC50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBFZmZlY3RGYWxs
YmFja3MsIEVmZmVjdENyZWF0aW9uT3B0aW9ucywgRWZmZWN0ICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdEZhbGxiYWNrcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
RWZmZWN0RmFsbGJhY2tzOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdENyZWF0aW9uT3B0
aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRWZmZWN0Q3JlYXRpb25PcHRpb25zOyB9KTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkVmZmVjdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRWZmZWN0OyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL29ic2VydmFi
bGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0
YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RvbU1hbmFnZW1lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L01pc2MvZG9tTWFuYWdlbWVudCAqLyAiLi9NaXNjL2RvbU1hbmFnZW1lbnQudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2Mv
bG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfUHJvY2Vzc29y
c19zaGFkZXJQcm9jZXNzb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvUHJvY2Vzc29ycy9zaGFkZXJQcm9jZXNzb3IgKi8g
Ii4vRW5naW5lcy9Qcm9jZXNzb3JzL3NoYWRlclByb2Nlc3Nvci50cyIpOworCisKKworCisKKy8q
KgorICogRWZmZWN0RmFsbGJhY2tzIGNhbiBiZSB1c2VkIHRvIGFkZCBmYWxsYmFja3MgKHByb3Bl
cnRpZXMgdG8gZGlzYWJsZSkgdG8gY2VydGFpbiBwcm9wZXJ0aWVzIHdoZW4gZGVzaXJlZCB0byBp
bXByb3ZlIHBlcmZvcm1hbmNlLgorICogKEVnLiBTdGFydCBhdCBoaWdoIHF1YWxpdHkgd2l0aCBy
ZWZsZWN0aW9uIGFuZCBmb2csIGlmIGZwcyBpcyBsb3csIHJlbW92ZSByZWZsZWN0aW9uLCBpZiBz
dGlsbCBsb3cgcmVtb3ZlIGZvZykKKyAqLwordmFyIEVmZmVjdEZhbGxiYWNrcyA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBFZmZlY3RGYWxsYmFja3MoKSB7Cisg
ICAgICAgIHRoaXMuX2RlZmluZXMgPSB7fTsKKyAgICAgICAgdGhpcy5fY3VycmVudFJhbmsgPSAz
MjsKKyAgICAgICAgdGhpcy5fbWF4UmFuayA9IC0xOworICAgICAgICB0aGlzLl9tZXNoID0gbnVs
bDsKKyAgICB9CisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgZmFsbGJhY2sgZnJvbSB0aGUg
Ym91bmQgbWVzaC4KKyAgICAgKi8KKyAgICBFZmZlY3RGYWxsYmFja3MucHJvdG90eXBlLnVuQmlu
ZE1lc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX21lc2ggPSBudWxsOworICAgIH07
CisgICAgLyoqCisgICAgICogQWRkcyBhIGZhbGxiYWNrIG9uIHRoZSBzcGVjaWZpZWQgcHJvcGVy
dHkuCisgICAgICogQHBhcmFtIHJhbmsgVGhlIHJhbmsgb2YgdGhlIGZhbGxiYWNrIChMb3dlciBy
YW5rcyB3aWxsIGJlIGZhbGxiYWNrZWQgdG8gZmlyc3QpCisgICAgICogQHBhcmFtIGRlZmluZSBU
aGUgbmFtZSBvZiB0aGUgZGVmaW5lIGluIHRoZSBzaGFkZXIKKyAgICAgKi8KKyAgICBFZmZlY3RG
YWxsYmFja3MucHJvdG90eXBlLmFkZEZhbGxiYWNrID0gZnVuY3Rpb24gKHJhbmssIGRlZmluZSkg
eworICAgICAgICBpZiAoIXRoaXMuX2RlZmluZXNbcmFua10pIHsKKyAgICAgICAgICAgIGlmIChy
YW5rIDwgdGhpcy5fY3VycmVudFJhbmspIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
UmFuayA9IHJhbms7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmFuayA+IHRoaXMu
X21heFJhbmspIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXhSYW5rID0gcmFuazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2RlZmluZXNbcmFua10gPSBuZXcgQXJyYXkoKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9kZWZpbmVzW3JhbmtdLnB1c2goZGVmaW5lKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIG1lc2ggdG8gdXNlIENQVSBza2lubmluZyB3
aGVuIG5lZWRpbmcgdG8gZmFsbGJhY2suCisgICAgICogQHBhcmFtIHJhbmsgVGhlIHJhbmsgb2Yg
dGhlIGZhbGxiYWNrIChMb3dlciByYW5rcyB3aWxsIGJlIGZhbGxiYWNrZWQgdG8gZmlyc3QpCisg
ICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gdXNlIHRoZSBmYWxsYmFja3MuCisgICAgICov
CisgICAgRWZmZWN0RmFsbGJhY2tzLnByb3RvdHlwZS5hZGRDUFVTa2lubmluZ0ZhbGxiYWNrID0g
ZnVuY3Rpb24gKHJhbmssIG1lc2gpIHsKKyAgICAgICAgdGhpcy5fbWVzaCA9IG1lc2g7CisgICAg
ICAgIGlmIChyYW5rIDwgdGhpcy5fY3VycmVudFJhbmspIHsKKyAgICAgICAgICAgIHRoaXMuX2N1
cnJlbnRSYW5rID0gcmFuazsKKyAgICAgICAgfQorICAgICAgICBpZiAocmFuayA+IHRoaXMuX21h
eFJhbmspIHsKKyAgICAgICAgICAgIHRoaXMuX21heFJhbmsgPSByYW5rOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRWZmZWN0RmFsbGJhY2tzLnByb3RvdHlw
ZSwgImhhc01vcmVGYWxsYmFja3MiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBDaGVja3Mg
dG8gc2VlIGlmIG1vcmUgZmFsbGJhY2tzIGFyZSBzdGlsbCBhdmFpbGlibGUuCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9j
dXJyZW50UmFuayA8PSB0aGlzLl9tYXhSYW5rOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioK
KyAgICAgKiBSZW1vdmVzIHRoZSBkZWZpbmVzIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBm
YWxsaW5nIGJhY2suCisgICAgICogQHBhcmFtIGN1cnJlbnREZWZpbmVzIGRlZmluZXMgdGhlIGN1
cnJlbnQgZGVmaW5lIHN0YXRlbWVudHMgZm9yIHRoZSBzaGFkZXIuCisgICAgICogQHBhcmFtIGVm
ZmVjdCBkZWZpbmVzIHRoZSBjdXJyZW50IGVmZmVjdCB3ZSB0cnkgdG8gY29tcGlsZQorICAgICAq
IEByZXR1cm5zIFRoZSByZXN1bHRpbmcgZGVmaW5lcyB3aXRoIGRlZmluZXMgb2YgdGhlIGN1cnJl
bnQgcmFuayByZW1vdmVkLgorICAgICAqLworICAgIEVmZmVjdEZhbGxiYWNrcy5wcm90b3R5cGUu
cmVkdWNlID0gZnVuY3Rpb24gKGN1cnJlbnREZWZpbmVzLCBlZmZlY3QpIHsKKyAgICAgICAgLy8g
Rmlyc3Qgd2UgdHJ5IHRvIHN3aXRjaCB0byBDUFUgc2tpbm5pbmcKKyAgICAgICAgaWYgKHRoaXMu
X21lc2ggJiYgdGhpcy5fbWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgJiYgdGhpcy5fbWVz
aC5udW1Cb25lSW5mbHVlbmNlcnMgPiAwKSB7CisgICAgICAgICAgICB0aGlzLl9tZXNoLmNvbXB1
dGVCb25lc1VzaW5nU2hhZGVycyA9IGZhbHNlOworICAgICAgICAgICAgY3VycmVudERlZmluZXMg
PSBjdXJyZW50RGVmaW5lcy5yZXBsYWNlKCIjZGVmaW5lIE5VTV9CT05FX0lORkxVRU5DRVJTICIg
KyB0aGlzLl9tZXNoLm51bUJvbmVJbmZsdWVuY2VycywgIiNkZWZpbmUgTlVNX0JPTkVfSU5GTFVF
TkNFUlMgMCIpOworICAgICAgICAgICAgZWZmZWN0Ll9ib25lc0NvbXB1dGF0aW9uRm9yY2VkVG9D
UFUgPSB0cnVlOworICAgICAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fbWVzaC5nZXRTY2VuZSgp
OworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHNjZW5lLm1lc2hlcy5s
ZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgb3RoZXJNZXNoID0gc2NlbmUu
bWVzaGVzW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoIW90aGVyTWVzaC5tYXRlcmlhbCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21lc2gubWF0ZXJpYWwgJiYgb3RoZXJN
ZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBvdGhlck1lc2gubnVtQm9uZUluZmx1ZW5j
ZXJzID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJNZXNoLmNvbXB1dGVCb25l
c1VzaW5nU2hhZGVycyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoIW90aGVyTWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgfHwgb3RoZXJNZXNoLm51bUJv
bmVJbmZsdWVuY2VycyA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG90aGVyTWVzaC5tYXRlcmlhbC5n
ZXRFZmZlY3QoKSA9PT0gZWZmZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIG90aGVyTWVzaC5j
b21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAob3RoZXJNZXNoLnN1Yk1lc2hlcykgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gb3RoZXJNZXNoLnN1Yk1lc2hlczsgX2kgPCBf
YS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJNZXNoID0g
X2FbX2ldOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1Yk1lc2hFZmZlY3QgPSBzdWJN
ZXNoLmVmZmVjdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJNZXNoRWZmZWN0ID09
PSBlZmZlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlck1lc2guY29tcHV0
ZUJvbmVzVXNpbmdTaGFkZXJzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICB2YXIgY3VycmVudEZhbGxiYWNrcyA9IHRoaXMuX2RlZmluZXNbdGhp
cy5fY3VycmVudFJhbmtdOworICAgICAgICAgICAgaWYgKGN1cnJlbnRGYWxsYmFja3MpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgY3VycmVudEZhbGxiYWNr
cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudERlZmluZXMg
PSBjdXJyZW50RGVmaW5lcy5yZXBsYWNlKCIjZGVmaW5lICIgKyBjdXJyZW50RmFsbGJhY2tzW2lu
ZGV4XSwgIiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX2N1cnJlbnRSYW5rKys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGN1cnJlbnRE
ZWZpbmVzOworICAgIH07CisgICAgcmV0dXJuIEVmZmVjdEZhbGxiYWNrczsKK30oKSk7CisKKy8q
KgorICogT3B0aW9ucyB0byBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYW4gZWZmZWN0LgorICovCit2
YXIgRWZmZWN0Q3JlYXRpb25PcHRpb25zID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
ICAgIGZ1bmN0aW9uIEVmZmVjdENyZWF0aW9uT3B0aW9ucygpIHsKKyAgICB9CisgICAgcmV0dXJu
IEVmZmVjdENyZWF0aW9uT3B0aW9uczsKK30oKSk7CisKKy8qKgorICogRWZmZWN0IGNvbnRhaW5p
bmcgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXIgdGhhdCBjYW4gYmUgZXhlY3V0ZWQgb24gYW4g
b2JqZWN0LgorICovCit2YXIgRWZmZWN0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
ICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhbiBlZmZlY3QuCisgICAgICogQW4gZWZmZWN0
IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZS9tYW5hZ2UvZXhlY3V0ZSB2ZXJ0ZXggYW5kIGZyYWdtZW50
IHNoYWRlcnMuCisgICAgICogQHBhcmFtIGJhc2VOYW1lIE5hbWUgb2YgdGhlIGVmZmVjdC4KKyAg
ICAgKiBAcGFyYW0gYXR0cmlidXRlc05hbWVzT3JPcHRpb25zIExpc3Qgb2YgYXR0cmlidXRlIG5h
bWVzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHNoYWRlciBvciBzZXQgb2YgYWxsIG9wdGlv
bnMgdG8gY3JlYXRlIHRoZSBlZmZlY3QuCisgICAgICogQHBhcmFtIHVuaWZvcm1zTmFtZXNPckVu
Z2luZSBMaXN0IG9mIHVuaWZvcm0gdmFyaWFibGUgbmFtZXMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgc2hhZGVyIG9yIHRoZSBlbmdpbmUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIGVm
ZmVjdC4KKyAgICAgKiBAcGFyYW0gc2FtcGxlcnMgTGlzdCBvZiBzYW1wbGVyIHZhcmlhYmxlcyB0
aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzaGFkZXIuCisgICAgICogQHBhcmFtIGVuZ2luZSBF
bmdpbmUgdG8gYmUgdXNlZCB0byByZW5kZXIgdGhlIGVmZmVjdAorICAgICAqIEBwYXJhbSBkZWZp
bmVzIERlZmluZSBzdGF0ZW1lbnRzIHRvIGJlIGFkZGVkIHRvIHRoZSBzaGFkZXIuCisgICAgICog
QHBhcmFtIGZhbGxiYWNrcyBQb3NzaWJsZSBmYWxsYmFja3MgZm9yIHRoaXMgZWZmZWN0IHRvIGlt
cHJvdmUgcGVyZm9ybWFuY2Ugd2hlbiBuZWVkZWQuCisgICAgICogQHBhcmFtIG9uQ29tcGlsZWQg
Q2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzaGFkZXIgaXMgY29tcGlsZWQu
CisgICAgICogQHBhcmFtIG9uRXJyb3IgQ2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCBpZiBh
biBlcnJvciBvY2N1cnMgZHVyaW5nIHNoYWRlciBjb21waWxhdGlvbi4KKyAgICAgKiBAcGFyYW0g
aW5kZXhQYXJhbWV0ZXJzIFBhcmFtZXRlcnMgdG8gYmUgdXNlZCB3aXRoIEJhYnlsb25zIGluY2x1
ZGUgc3ludGF4IHRvIGl0ZXJhdGUgb3ZlciBhbiBhcnJheSAoZWcuIHtsaWdodHM6IDEwfSkKKyAg
ICAgKiBAcGFyYW0ga2V5IEVmZmVjdCBLZXkgaWRlbnRpZnlpbmcgdW5pcXVlbHkgY29tcGlsZWQg
c2hhZGVyIHZhcmlhbnRzCisgICAgICogQHBhcmFtIHNvdXJjZXMgQWxyZWFkeSBwcm9jZXNzZWQg
c291cmNlcyBmb3IgdGhlIGN1cnJlbnQga2V5LgorICAgICAqLworICAgIGZ1bmN0aW9uIEVmZmVj
dChiYXNlTmFtZSwgYXR0cmlidXRlc05hbWVzT3JPcHRpb25zLCB1bmlmb3Jtc05hbWVzT3JFbmdp
bmUsIHNhbXBsZXJzLCBlbmdpbmUsIGRlZmluZXMsIGZhbGxiYWNrcywgb25Db21waWxlZCwgb25F
cnJvciwgaW5kZXhQYXJhbWV0ZXJzLCBrZXksIHNvdXJjZXMpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgaWYgKHNhbXBsZXJzID09PSB2b2lkIDApIHsgc2FtcGxlcnMgPSBu
dWxsOyB9CisgICAgICAgIGlmIChkZWZpbmVzID09PSB2b2lkIDApIHsgZGVmaW5lcyA9IG51bGw7
IH0KKyAgICAgICAgaWYgKGZhbGxiYWNrcyA9PT0gdm9pZCAwKSB7IGZhbGxiYWNrcyA9IG51bGw7
IH0KKyAgICAgICAgaWYgKG9uQ29tcGlsZWQgPT09IHZvaWQgMCkgeyBvbkNvbXBpbGVkID0gbnVs
bDsgfQorICAgICAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBudWxsOyB9
CisgICAgICAgIGlmIChrZXkgPT09IHZvaWQgMCkgeyBrZXkgPSAiIjsgfQorICAgICAgICAvKioK
KyAgICAgICAgICogTmFtZSBvZiB0aGUgZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5uYW1lID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFN0cmluZyBjb250YWluZXIg
YWxsIHRoZSBkZWZpbmUgc3RhdGVtZW50cyB0aGF0IHNob3VsZCBiZSBzZXQgb24gdGhlIHNoYWRl
ci4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGVmaW5lcyA9ICIiOworICAgICAgICAvKioK
KyAgICAgICAgICogQ2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzaGFkZXIg
aXMgY29tcGlsZWQuCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uQ29tcGlsZWQgPSBudWxs
OworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCBp
ZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHNoYWRlciBjb21waWxhdGlvbi4KKyAgICAgICAgICov
CisgICAgICAgIHRoaXMub25FcnJvciA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBD
YWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gZWZmZWN0IGlzIGJvdW5kLgorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5vbkJpbmQgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAg
ICogVW5pcXVlIElEIG9mIHRoZSBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnVu
aXF1ZUlkID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgdGhhdCB3aWxs
IGJlIGNhbGxlZCB3aGVuIHRoZSBzaGFkZXIgaXMgY29tcGlsZWQuCisgICAgICAgICAqIEl0IGlz
IHJlY29tbWVuZGVkIHRvIHVzZSBleGVjdXRlV2hlbkNvbXBpbGUoKSBvciB0byBtYWtlIHN1cmUg
dGhhdCBzY2VuZS5pc1JlYWR5KCkgaXMgY2FsbGVkIHRvIGdldCB0aGlzIG9ic2VydmFibGUgcmFp
c2VkLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkNvbXBpbGVPYnNlcnZhYmxlID0gbmV3
IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJs
ZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBPYnNlcnZhYmxlIHRoYXQgd2lsbCBiZSBj
YWxsZWQgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBzaGFkZXIgY29tcGlsYXRpb24uCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLm9uRXJyb3JPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2Vy
dmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAg
ICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX29uQmluZE9ic2VydmFibGUgPSBudWxs
OworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9ib25lc0NvbXB1dGF0aW9u
Rm9yY2VkVG9DUFUgPSBmYWxzZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhp
cy5fdW5pZm9ybUJ1ZmZlcnNOYW1lcyA9IHt9OworICAgICAgICB0aGlzLl9zYW1wbGVycyA9IHt9
OworICAgICAgICB0aGlzLl9pc1JlYWR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NvbXBpbGF0
aW9uRXJyb3IgPSAiIjsKKyAgICAgICAgdGhpcy5fdW5pZm9ybXMgPSB7fTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEtleSBmb3IgdGhlIGVmZmVjdC4KKyAgICAgICAgICogQGhpZGRlbgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5fa2V5ID0gIiI7CisgICAgICAgIHRoaXMuX2ZhbGxiYWNr
cyA9IG51bGw7CisgICAgICAgIHRoaXMuX3ZlcnRleFNvdXJjZUNvZGVPdmVycmlkZSA9ICIiOwor
ICAgICAgICB0aGlzLl9mcmFnbWVudFNvdXJjZUNvZGVPdmVycmlkZSA9ICIiOworICAgICAgICB0
aGlzLl90cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIENvbXBpbGVkIHNoYWRlciB0byB3ZWJHTCBwcm9ncmFtLgorICAgICAgICAgKiBAaGlk
ZGVuCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQgPSBudWxsOwor
ICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl92ZXJ0ZXhTb3VyY2VDb2RlID0g
IiI7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2ZyYWdtZW50U291cmNl
Q29kZSA9ICIiOworICAgICAgICB0aGlzLm5hbWUgPSBiYXNlTmFtZTsKKyAgICAgICAgdGhpcy5f
a2V5ID0ga2V5OworICAgICAgICBpZiAoYXR0cmlidXRlc05hbWVzT3JPcHRpb25zLmF0dHJpYnV0
ZXMpIHsKKyAgICAgICAgICAgIHZhciBvcHRpb25zID0gYXR0cmlidXRlc05hbWVzT3JPcHRpb25z
OworICAgICAgICAgICAgdGhpcy5fZW5naW5lID0gdW5pZm9ybXNOYW1lc09yRW5naW5lOworICAg
ICAgICAgICAgdGhpcy5fYXR0cmlidXRlc05hbWVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzOworICAg
ICAgICAgICAgdGhpcy5fdW5pZm9ybXNOYW1lcyA9IG9wdGlvbnMudW5pZm9ybXNOYW1lcy5jb25j
YXQob3B0aW9ucy5zYW1wbGVycyk7CisgICAgICAgICAgICB0aGlzLl9zYW1wbGVyTGlzdCA9IG9w
dGlvbnMuc2FtcGxlcnMuc2xpY2UoKTsKKyAgICAgICAgICAgIHRoaXMuZGVmaW5lcyA9IG9wdGlv
bnMuZGVmaW5lczsKKyAgICAgICAgICAgIHRoaXMub25FcnJvciA9IG9wdGlvbnMub25FcnJvcjsK
KyAgICAgICAgICAgIHRoaXMub25Db21waWxlZCA9IG9wdGlvbnMub25Db21waWxlZDsKKyAgICAg
ICAgICAgIHRoaXMuX2ZhbGxiYWNrcyA9IG9wdGlvbnMuZmFsbGJhY2tzOworICAgICAgICAgICAg
dGhpcy5faW5kZXhQYXJhbWV0ZXJzID0gb3B0aW9ucy5pbmRleFBhcmFtZXRlcnM7CisgICAgICAg
ICAgICB0aGlzLl90cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzID0gb3B0aW9ucy50cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzOworICAgICAgICAgICAgaWYgKG9wdGlvbnMudW5pZm9ybUJ1ZmZlcnNO
YW1lcykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy51bmlm
b3JtQnVmZmVyc05hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X3VuaWZvcm1CdWZmZXJzTmFtZXNbb3B0aW9ucy51bmlmb3JtQnVmZmVyc05hbWVzW2ldXSA9IGk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgdGhpcy5fZW5naW5lID0gZW5naW5lOworICAgICAgICAgICAgdGhp
cy5kZWZpbmVzID0gKGRlZmluZXMgPT0gbnVsbCA/ICIiIDogZGVmaW5lcyk7CisgICAgICAgICAg
ICB0aGlzLl91bmlmb3Jtc05hbWVzID0gdW5pZm9ybXNOYW1lc09yRW5naW5lLmNvbmNhdChzYW1w
bGVycyk7CisgICAgICAgICAgICB0aGlzLl9zYW1wbGVyTGlzdCA9IHNhbXBsZXJzID8gc2FtcGxl
cnMuc2xpY2UoKSA6IFtdOworICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlc05hbWVzID0gYXR0
cmlidXRlc05hbWVzT3JPcHRpb25zOworICAgICAgICAgICAgdGhpcy5vbkVycm9yID0gb25FcnJv
cjsKKyAgICAgICAgICAgIHRoaXMub25Db21waWxlZCA9IG9uQ29tcGlsZWQ7CisgICAgICAgICAg
ICB0aGlzLl9pbmRleFBhcmFtZXRlcnMgPSBpbmRleFBhcmFtZXRlcnM7CisgICAgICAgICAgICB0
aGlzLl9mYWxsYmFja3MgPSBmYWxsYmFja3M7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy51bmlx
dWVJZCA9IEVmZmVjdC5fdW5pcXVlSWRTZWVkKys7CisgICAgICAgIGlmIChzb3VyY2VzKSB7Cisg
ICAgICAgICAgICB0aGlzLl9mcmFnbWVudFNvdXJjZUNvZGUgPSBzb3VyY2VzLmZyYWdtZW50Owor
ICAgICAgICAgICAgdGhpcy5fdmVydGV4U291cmNlQ29kZSA9IHNvdXJjZXMudmVydGV4OworICAg
ICAgICAgICAgdGhpcy5fcHJlcGFyZUVmZmVjdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHZhciB2ZXJ0ZXhTb3VyY2U7CisgICAgICAgIHZhciBmcmFnbWVudFNv
dXJjZTsKKyAgICAgICAgaWYgKGJhc2VOYW1lLnZlcnRleFNvdXJjZSkgeworICAgICAgICAgICAg
dmVydGV4U291cmNlID0gInNvdXJjZToiICsgYmFzZU5hbWUudmVydGV4U291cmNlOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGJhc2VOYW1lLnZlcnRleEVsZW1lbnQpIHsKKyAgICAgICAg
ICAgIHZlcnRleFNvdXJjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJhc2VOYW1lLnZlcnRl
eEVsZW1lbnQpOworICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhTb3VyY2UpIHsKKyAgICAgICAgICAg
ICAgICB2ZXJ0ZXhTb3VyY2UgPSBiYXNlTmFtZS52ZXJ0ZXhFbGVtZW50OworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmVydGV4U291cmNlID0g
YmFzZU5hbWUudmVydGV4IHx8IGJhc2VOYW1lOworICAgICAgICB9CisgICAgICAgIGlmIChiYXNl
TmFtZS5mcmFnbWVudFNvdXJjZSkgeworICAgICAgICAgICAgZnJhZ21lbnRTb3VyY2UgPSAic291
cmNlOiIgKyBiYXNlTmFtZS5mcmFnbWVudFNvdXJjZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChiYXNlTmFtZS5mcmFnbWVudEVsZW1lbnQpIHsKKyAgICAgICAgICAgIGZyYWdtZW50U291
cmNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYmFzZU5hbWUuZnJhZ21lbnRFbGVtZW50KTsK
KyAgICAgICAgICAgIGlmICghZnJhZ21lbnRTb3VyY2UpIHsKKyAgICAgICAgICAgICAgICBmcmFn
bWVudFNvdXJjZSA9IGJhc2VOYW1lLmZyYWdtZW50RWxlbWVudDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZyYWdtZW50U291cmNlID0gYmFz
ZU5hbWUuZnJhZ21lbnQgfHwgYmFzZU5hbWU7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcHJv
Y2Vzc2luZ0NvbnRleHQgPSBlbmdpbmUuX2dldFNoYWRlclByb2Nlc3NpbmdDb250ZXh0KCk7Cisg
ICAgICAgIHZhciBwcm9jZXNzb3JPcHRpb25zID0geworICAgICAgICAgICAgZGVmaW5lczogdGhp
cy5kZWZpbmVzLnNwbGl0KCJcbiIpLAorICAgICAgICAgICAgaW5kZXhQYXJhbWV0ZXJzOiB0aGlz
Ll9pbmRleFBhcmFtZXRlcnMsCisgICAgICAgICAgICBpc0ZyYWdtZW50OiBmYWxzZSwKKyAgICAg
ICAgICAgIHNob3VsZFVzZUhpZ2hQcmVjaXNpb25TaGFkZXI6IHRoaXMuX2VuZ2luZS5fc2hvdWxk
VXNlSGlnaFByZWNpc2lvblNoYWRlciwKKyAgICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5fZW5n
aW5lLl9zaGFkZXJQcm9jZXNzb3IsCisgICAgICAgICAgICBzdXBwb3J0c1VuaWZvcm1CdWZmZXJz
OiB0aGlzLl9lbmdpbmUuc3VwcG9ydHNVbmlmb3JtQnVmZmVycywKKyAgICAgICAgICAgIHNoYWRl
cnNSZXBvc2l0b3J5OiBFZmZlY3QuU2hhZGVyc1JlcG9zaXRvcnksCisgICAgICAgICAgICBpbmNs
dWRlc1NoYWRlcnNTdG9yZTogRWZmZWN0LkluY2x1ZGVzU2hhZGVyc1N0b3JlLAorICAgICAgICAg
ICAgdmVyc2lvbjogKHRoaXMuX2VuZ2luZS53ZWJHTFZlcnNpb24gKiAxMDApLnRvU3RyaW5nKCks
CisgICAgICAgICAgICBwbGF0Zm9ybU5hbWU6IHRoaXMuX2VuZ2luZS5zaGFkZXJQbGF0Zm9ybU5h
bWUsCisgICAgICAgICAgICBwcm9jZXNzaW5nQ29udGV4dDogdGhpcy5fcHJvY2Vzc2luZ0NvbnRl
eHQKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fbG9hZFZlcnRleFNoYWRlcih2ZXJ0ZXhTb3Vy
Y2UsIGZ1bmN0aW9uICh2ZXJ0ZXhDb2RlKSB7CisgICAgICAgICAgICBfdGhpcy5fbG9hZEZyYWdt
ZW50U2hhZGVyKGZyYWdtZW50U291cmNlLCBmdW5jdGlvbiAoZnJhZ21lbnRDb2RlKSB7CisgICAg
ICAgICAgICAgICAgX0VuZ2luZXNfUHJvY2Vzc29yc19zaGFkZXJQcm9jZXNzb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siU2hhZGVyUHJvY2Vzc29yIl0uUHJvY2Vzcyh2ZXJ0ZXhDb2Rl
LCBwcm9jZXNzb3JPcHRpb25zLCBmdW5jdGlvbiAobWlncmF0ZWRWZXJ0ZXhDb2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3Nvck9wdGlvbnMuaXNGcmFnbWVudCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIF9FbmdpbmVzX1Byb2Nlc3NvcnNfc2hhZGVyUHJvY2Vzc29yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNoYWRlclByb2Nlc3NvciJdLlByb2Nlc3MoZnJhZ21l
bnRDb2RlLCBwcm9jZXNzb3JPcHRpb25zLCBmdW5jdGlvbiAobWlncmF0ZWRGcmFnbWVudENvZGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbFNoYWRlcnMgPSBfRW5naW5lc19Q
cm9jZXNzb3JzX3NoYWRlclByb2Nlc3Nvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJT
aGFkZXJQcm9jZXNzb3IiXS5GaW5hbGl6ZShtaWdyYXRlZFZlcnRleENvZGUsIG1pZ3JhdGVkRnJh
Z21lbnRDb2RlLCBwcm9jZXNzb3JPcHRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90
aGlzLl91c2VGaW5hbENvZGUoZmluYWxTaGFkZXJzLnZlcnRleENvZGUsIGZpbmFsU2hhZGVycy5m
cmFnbWVudENvZGUsIGJhc2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShFZmZlY3QucHJvdG90eXBlLCAib25CaW5kT2JzZXJ2YWJsZSIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgdGhhdCB3aWxsIGJlIGNhbGxl
ZCB3aGVuIGVmZmVjdCBpcyBib3VuZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9vbkJpbmRPYnNlcnZhYmxlKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fb25CaW5kT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29uQmluZE9ic2VydmFibGU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIEVmZmVjdC5wcm90b3R5cGUuX3VzZUZpbmFsQ29kZSA9IGZ1bmN0aW9u
IChtaWdyYXRlZFZlcnRleENvZGUsIG1pZ3JhdGVkRnJhZ21lbnRDb2RlLCBiYXNlTmFtZSkgewor
ICAgICAgICBpZiAoYmFzZU5hbWUpIHsKKyAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSBiYXNlTmFt
ZS52ZXJ0ZXhFbGVtZW50IHx8IGJhc2VOYW1lLnZlcnRleCB8fCBiYXNlTmFtZS5zcGVjdG9yTmFt
ZSB8fCBiYXNlTmFtZTsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGJhc2VOYW1lLmZyYWdt
ZW50RWxlbWVudCB8fCBiYXNlTmFtZS5mcmFnbWVudCB8fCBiYXNlTmFtZS5zcGVjdG9yTmFtZSB8
fCBiYXNlTmFtZTsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleFNvdXJjZUNvZGUgPSAiI2RlZmlu
ZSBTSEFERVJfTkFNRSB2ZXJ0ZXg6IiArIHZlcnRleCArICJcbiIgKyBtaWdyYXRlZFZlcnRleENv
ZGU7CisgICAgICAgICAgICB0aGlzLl9mcmFnbWVudFNvdXJjZUNvZGUgPSAiI2RlZmluZSBTSEFE
RVJfTkFNRSBmcmFnbWVudDoiICsgZnJhZ21lbnQgKyAiXG4iICsgbWlncmF0ZWRGcmFnbWVudENv
ZGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhT
b3VyY2VDb2RlID0gbWlncmF0ZWRWZXJ0ZXhDb2RlOworICAgICAgICAgICAgdGhpcy5fZnJhZ21l
bnRTb3VyY2VDb2RlID0gbWlncmF0ZWRGcmFnbWVudENvZGU7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fcHJlcGFyZUVmZmVjdCgpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEVmZmVjdC5wcm90b3R5cGUsICJrZXkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVbmlx
dWUga2V5IGZvciB0aGlzIGVmZmVjdAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fa2V5OworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvKioKKyAgICAgKiBJZiB0aGUgZWZmZWN0IGhhcyBiZWVuIGNvbXBpbGVkIGFuZCBwcmVw
YXJlZC4KKyAgICAgKiBAcmV0dXJucyBpZiB0aGUgZWZmZWN0IGlzIGNvbXBpbGVkIGFuZCBwcmVw
YXJlZC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLmlzUmVhZHkgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNSZWFkeUludGVy
bmFsKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKF9hKSB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworICAgIEVmZmVjdC5wcm90b3R5cGUuX2lzUmVh
ZHlJbnRlcm5hbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2lzUmVhZHkpIHsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9w
aXBlbGluZUNvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9waXBlbGluZUNvbnRl
eHQuaXNSZWFkeTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBUaGUgZW5naW5lIHRoZSBlZmZlY3Qgd2FzIGluaXRpYWxpemVkIHdpdGgu
CisgICAgICogQHJldHVybnMgdGhlIGVuZ2luZS4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90
eXBlLmdldEVuZ2luZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuZ2lu
ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoZSBwaXBlbGluZSBjb250ZXh0IGZvciB0aGlz
IGVmZmVjdAorICAgICAqIEByZXR1cm5zIHRoZSBhc3NvY2lhdGVkIHBpcGVsaW5lIGNvbnRleHQK
KyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLmdldFBpcGVsaW5lQ29udGV4dCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BpcGVsaW5lQ29udGV4dDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFRoZSBzZXQgb2YgbmFtZXMgb2YgYXR0cmlidXRlIHZhcmlhYmxlcyBm
b3IgdGhlIHNoYWRlci4KKyAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhdHRyaWJ1dGUgbmFt
ZXMuCisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVzTmFtZXMgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hdHRyaWJ1dGVzTmFtZXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhdHRyaWJ1dGUgYXQgdGhlIGdpdmVuIGlu
ZGV4LgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGF0dHJpYnV0ZS4KKyAg
ICAgKiBAcmV0dXJucyBUaGUgbG9jYXRpb24gb2YgdGhlIGF0dHJpYnV0ZS4KKyAgICAgKi8KKyAg
ICBFZmZlY3QucHJvdG90eXBlLmdldEF0dHJpYnV0ZUxvY2F0aW9uID0gZnVuY3Rpb24gKGluZGV4
KSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hdHRyaWJ1dGVzW2luZGV4XTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFJldHVybnMgdGhlIGF0dHJpYnV0ZSBiYXNlZCBvbiB0aGUgbmFtZSBvZiB0
aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBsb29r
IHVwLgorICAgICAqIEByZXR1cm5zIHRoZSBhdHRyaWJ1dGUgbG9jYXRpb24uCisgICAgICovCisg
ICAgRWZmZWN0LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVMb2NhdGlvbkJ5TmFtZSA9IGZ1bmN0aW9u
IChuYW1lKSB7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2F0dHJpYnV0ZXNOYW1lcy5pbmRl
eE9mKG5hbWUpOworICAgICAgICByZXR1cm4gdGhpcy5fYXR0cmlidXRlc1tpbmRleF07CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBUaGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMuCisgICAgICogQHJl
dHVybnMgdGhlIG51bW5iZXIgb2YgYXR0cmlidXRlcy4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJv
dG90eXBlLmdldEF0dHJpYnV0ZXNDb3VudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2F0dHJpYnV0ZXMubGVuZ3RoOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0
aGUgaW5kZXggb2YgYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFt
ZSBvZiB0aGUgdW5pZm9ybSB0byBsb29rIHVwLgorICAgICAqIEByZXR1cm5zIHRoZSBpbmRleC4K
KyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLmdldFVuaWZvcm1JbmRleCA9IGZ1bmN0aW9u
ICh1bmlmb3JtTmFtZSkgeworICAgICAgICByZXR1cm4gdGhpcy5fdW5pZm9ybXNOYW1lcy5pbmRl
eE9mKHVuaWZvcm1OYW1lKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGF0
dHJpYnV0ZSBiYXNlZCBvbiB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFt
IHVuaWZvcm1OYW1lIG9mIHRoZSB1bmlmb3JtIHRvIGxvb2sgdXAuCisgICAgICogQHJldHVybnMg
dGhlIGxvY2F0aW9uIG9mIHRoZSB1bmlmb3JtLgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5
cGUuZ2V0VW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSkgeworICAgICAgICByZXR1cm4g
dGhpcy5fdW5pZm9ybXNbdW5pZm9ybU5hbWVdOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0
dXJucyBhbiBhcnJheSBvZiBzYW1wbGVyIHZhcmlhYmxlIG5hbWVzCisgICAgICogQHJldHVybnMg
VGhlIGFycmF5IG9mIHNhbXBsZXIgdmFyaWFibGUgbmVhbWVzLgorICAgICAqLworICAgIEVmZmVj
dC5wcm90b3R5cGUuZ2V0U2FtcGxlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0
aGlzLl9zYW1wbGVyTGlzdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoZSBlcnJvciBmcm9t
IHRoZSBsYXN0IGNvbXBpbGF0aW9uLgorICAgICAqIEByZXR1cm5zIHRoZSBlcnJvciBzdHJpbmcu
CisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5nZXRDb21waWxhdGlvbkVycm9yID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fY29tcGlsYXRpb25FcnJvcjsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEFkZHMgYSBjYWxsYmFjayB0byB0aGUgb25Db21waWxlZCBvYnNl
cnZhYmxlIGFuZCBjYWxsIHRoZSBjYWxsYmFjayBpbWVkaWF0bHkgaWYgYWxyZWFkeSByZWFkeS4K
KyAgICAgKiBAcGFyYW0gZnVuYyBUaGUgY2FsbGJhY2sgdG8gYmUgdXNlZC4KKyAgICAgKi8KKyAg
ICBFZmZlY3QucHJvdG90eXBlLmV4ZWN1dGVXaGVuQ29tcGlsZWQgPSBmdW5jdGlvbiAoZnVuYykg
eworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkp
IHsKKyAgICAgICAgICAgIGZ1bmModGhpcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5vbkNvbXBpbGVPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZWZmZWN0
KSB7CisgICAgICAgICAgICBmdW5jKGVmZmVjdCk7CisgICAgICAgIH0pOworICAgICAgICBpZiAo
IXRoaXMuX3BpcGVsaW5lQ29udGV4dCB8fCB0aGlzLl9waXBlbGluZUNvbnRleHQuaXNBc3luYykg
eworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAg
X3RoaXMuX2NoZWNrSXNSZWFkeSgpOworICAgICAgICAgICAgfSwgMTYpOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBFZmZlY3QucHJvdG90eXBlLl9jaGVja0lzUmVhZHkgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5faXNSZWFkeUludGVybmFsKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
IHRoaXMuX3Byb2Nlc3NDb21waWxhdGlvbkVycm9ycyhlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IF90aGlzLl9jaGVja0lzUmVhZHkoKTsKKyAgICAgICAgfSwgMTYpOworICAgIH07CisgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLl9sb2FkVmVydGV4U2hhZGVyID0gZnVu
Y3Rpb24gKHZlcnRleCwgY2FsbGJhY2spIHsKKyAgICAgICAgaWYgKHR5cGVvZiAoSFRNTEVsZW1l
bnQpICE9PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgLy8gRE9NIGVsZW1lbnQgPworICAg
ICAgICAgICAgaWYgKHZlcnRleCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7CisgICAgICAgICAg
ICAgICAgdmFyIHZlcnRleENvZGUgPSBfTWlzY19kb21NYW5hZ2VtZW50X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkRvbU1hbmFnZW1lbnQiXS5HZXRET01UZXh0Q29udGVudCh2ZXJ0ZXgp
OworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHZlcnRleENvZGUpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBEaXJlY3Qgc291
cmNlID8KKyAgICAgICAgaWYgKHZlcnRleC5zdWJzdHIoMCwgNykgPT09ICJzb3VyY2U6Iikgewor
ICAgICAgICAgICAgY2FsbGJhY2sodmVydGV4LnN1YnN0cig3KSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gQmFzZTY0IGVuY29kZWQgPworICAgICAgICBpZiAo
dmVydGV4LnN1YnN0cigwLCA3KSA9PT0gImJhc2U2NDoiKSB7CisgICAgICAgICAgICB2YXIgdmVy
dGV4QmluYXJ5ID0gd2luZG93LmF0b2IodmVydGV4LnN1YnN0cig3KSk7CisgICAgICAgICAgICBj
YWxsYmFjayh2ZXJ0ZXhCaW5hcnkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIC8vIElzIGluIGxvY2FsIHN0b3JlID8KKyAgICAgICAgaWYgKEVmZmVjdC5TaGFkZXJz
U3RvcmVbdmVydGV4ICsgIlZlcnRleFNoYWRlciJdKSB7CisgICAgICAgICAgICBjYWxsYmFjayhF
ZmZlY3QuU2hhZGVyc1N0b3JlW3ZlcnRleCArICJWZXJ0ZXhTaGFkZXIiXSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHZlcnRleFNoYWRlclVybDsKKyAgICAg
ICAgaWYgKHZlcnRleFswXSA9PT0gIi4iIHx8IHZlcnRleFswXSA9PT0gIi8iIHx8IHZlcnRleC5p
bmRleE9mKCJodHRwIikgPiAtMSkgeworICAgICAgICAgICAgdmVydGV4U2hhZGVyVXJsID0gdmVy
dGV4OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmVydGV4U2hhZGVy
VXJsID0gRWZmZWN0LlNoYWRlcnNSZXBvc2l0b3J5ICsgdmVydGV4OworICAgICAgICB9CisgICAg
ICAgIC8vIFZlcnRleCBzaGFkZXIKKyAgICAgICAgdGhpcy5fZW5naW5lLl9sb2FkRmlsZSh2ZXJ0
ZXhTaGFkZXJVcmwgKyAiLnZlcnRleC5meCIsIGNhbGxiYWNrKTsKKyAgICB9OworICAgIC8qKiBA
aGlkZGVuICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5fbG9hZEZyYWdtZW50U2hhZGVyID0gZnVu
Y3Rpb24gKGZyYWdtZW50LCBjYWxsYmFjaykgeworICAgICAgICBpZiAodHlwZW9mIChIVE1MRWxl
bWVudCkgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAvLyBET00gZWxlbWVudCA/Cisg
ICAgICAgICAgICBpZiAoZnJhZ21lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgeworICAgICAg
ICAgICAgICAgIHZhciBmcmFnbWVudENvZGUgPSBfTWlzY19kb21NYW5hZ2VtZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIkRvbU1hbmFnZW1lbnQiXS5HZXRET01UZXh0Q29udGVudChm
cmFnbWVudCk7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soZnJhZ21lbnRDb2RlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8g
RGlyZWN0IHNvdXJjZSA/CisgICAgICAgIGlmIChmcmFnbWVudC5zdWJzdHIoMCwgNykgPT09ICJz
b3VyY2U6IikgeworICAgICAgICAgICAgY2FsbGJhY2soZnJhZ21lbnQuc3Vic3RyKDcpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBCYXNlNjQgZW5jb2RlZCA/
CisgICAgICAgIGlmIChmcmFnbWVudC5zdWJzdHIoMCwgNykgPT09ICJiYXNlNjQ6IikgeworICAg
ICAgICAgICAgdmFyIGZyYWdtZW50QmluYXJ5ID0gd2luZG93LmF0b2IoZnJhZ21lbnQuc3Vic3Ry
KDcpKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGZyYWdtZW50QmluYXJ5KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBJcyBpbiBsb2NhbCBzdG9yZSA/CisgICAg
ICAgIGlmIChFZmZlY3QuU2hhZGVyc1N0b3JlW2ZyYWdtZW50ICsgIlBpeGVsU2hhZGVyIl0pIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrKEVmZmVjdC5TaGFkZXJzU3RvcmVbZnJhZ21lbnQgKyAiUGl4
ZWxTaGFkZXIiXSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KEVmZmVjdC5TaGFkZXJzU3RvcmVbZnJhZ21lbnQgKyAiRnJhZ21lbnRTaGFkZXIiXSkgeworICAg
ICAgICAgICAgY2FsbGJhY2soRWZmZWN0LlNoYWRlcnNTdG9yZVtmcmFnbWVudCArICJGcmFnbWVu
dFNoYWRlciJdKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIg
ZnJhZ21lbnRTaGFkZXJVcmw7CisgICAgICAgIGlmIChmcmFnbWVudFswXSA9PT0gIi4iIHx8IGZy
YWdtZW50WzBdID09PSAiLyIgfHwgZnJhZ21lbnQuaW5kZXhPZigiaHR0cCIpID4gLTEpIHsKKyAg
ICAgICAgICAgIGZyYWdtZW50U2hhZGVyVXJsID0gZnJhZ21lbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBmcmFnbWVudFNoYWRlclVybCA9IEVmZmVjdC5TaGFkZXJz
UmVwb3NpdG9yeSArIGZyYWdtZW50OworICAgICAgICB9CisgICAgICAgIC8vIEZyYWdtZW50IHNo
YWRlcgorICAgICAgICB0aGlzLl9lbmdpbmUuX2xvYWRGaWxlKGZyYWdtZW50U2hhZGVyVXJsICsg
Ii5mcmFnbWVudC5meCIsIGNhbGxiYWNrKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgRWZmZWN0LnByb3RvdHlwZS5fZHVtcFNoYWRlcnNTb3VyY2UgPSBmdW5jdGlvbiAodmVydGV4
Q29kZSwgZnJhZ21lbnRDb2RlLCBkZWZpbmVzKSB7CisgICAgICAgIC8vIFJlYnVpbGQgc2hhZGVy
cyBzb3VyY2UgY29kZQorICAgICAgICB2YXIgc2hhZGVyVmVyc2lvbiA9ICh0aGlzLl9lbmdpbmUu
d2ViR0xWZXJzaW9uID4gMSkgPyAiI3ZlcnNpb24gMzAwIGVzXG4jZGVmaW5lIFdFQkdMMiBcbiIg
OiAiIjsKKyAgICAgICAgdmFyIHByZWZpeCA9IHNoYWRlclZlcnNpb24gKyAoZGVmaW5lcyA/IGRl
ZmluZXMgKyAiXG4iIDogIiIpOworICAgICAgICB2ZXJ0ZXhDb2RlID0gcHJlZml4ICsgdmVydGV4
Q29kZTsKKyAgICAgICAgZnJhZ21lbnRDb2RlID0gcHJlZml4ICsgZnJhZ21lbnRDb2RlOworICAg
ICAgICAvLyBOdW1iZXIgbGluZXMgb2Ygc2hhZGVycyBzb3VyY2UgY29kZQorICAgICAgICB2YXIg
aSA9IDI7CisgICAgICAgIHZhciByZWdleCA9IC9cbi9nbTsKKyAgICAgICAgdmFyIGZvcm1hdHRl
ZFZlcnRleENvZGUgPSAiXG4xXHQiICsgdmVydGV4Q29kZS5yZXBsYWNlKHJlZ2V4LCBmdW5jdGlv
biAoKSB7IHJldHVybiAiXG4iICsgKGkrKykgKyAiXHQiOyB9KTsKKyAgICAgICAgaSA9IDI7Cisg
ICAgICAgIHZhciBmb3JtYXR0ZWRGcmFnbWVudENvZGUgPSAiXG4xXHQiICsgZnJhZ21lbnRDb2Rl
LnJlcGxhY2UocmVnZXgsIGZ1bmN0aW9uICgpIHsgcmV0dXJuICJcbiIgKyAoaSsrKSArICJcdCI7
IH0pOworICAgICAgICAvLyBEdW1wIHNoYWRlcnMgbmFtZSBhbmQgZm9ybWF0dGVkIHNvdXJjZSBj
b2RlCisgICAgICAgIGlmICh0aGlzLm5hbWUudmVydGV4RWxlbWVudCkgeworICAgICAgICAgICAg
X01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxvZ2dlciJdLkVycm9y
KCJWZXJ0ZXggc2hhZGVyOiAiICsgdGhpcy5uYW1lLnZlcnRleEVsZW1lbnQgKyBmb3JtYXR0ZWRW
ZXJ0ZXhDb2RlKTsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJMb2dnZXIiXS5FcnJvcigiRnJhZ21lbnQgc2hhZGVyOiAiICsgdGhpcy5uYW1l
LmZyYWdtZW50RWxlbWVudCArIGZvcm1hdHRlZEZyYWdtZW50Q29kZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAodGhpcy5uYW1lLnZlcnRleCkgeworICAgICAgICAgICAgX01pc2NfbG9n
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxvZ2dlciJdLkVycm9yKCJWZXJ0ZXgg
c2hhZGVyOiAiICsgdGhpcy5uYW1lLnZlcnRleCArIGZvcm1hdHRlZFZlcnRleENvZGUpOworICAg
ICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxvZ2dl
ciJdLkVycm9yKCJGcmFnbWVudCBzaGFkZXI6ICIgKyB0aGlzLm5hbWUuZnJhZ21lbnQgKyBmb3Jt
YXR0ZWRGcmFnbWVudENvZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxvZ2dlciJdLkVy
cm9yKCJWZXJ0ZXggc2hhZGVyOiAiICsgdGhpcy5uYW1lICsgZm9ybWF0dGVkVmVydGV4Q29kZSk7
CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
TG9nZ2VyIl0uRXJyb3IoIkZyYWdtZW50IHNoYWRlcjogIiArIHRoaXMubmFtZSArIGZvcm1hdHRl
ZEZyYWdtZW50Q29kZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlY29t
cGlsZXMgdGhlIHdlYkdMIHByb2dyYW0KKyAgICAgKiBAcGFyYW0gdmVydGV4U291cmNlQ29kZSBU
aGUgc291cmNlIGNvZGUgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyLgorICAgICAqIEBwYXJhbSBmcmFn
bWVudFNvdXJjZUNvZGUgVGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgZnJhZ21lbnQgc2hhZGVyLgor
ICAgICAqIEBwYXJhbSBvbkNvbXBpbGVkIENhbGxiYWNrIGNhbGxlZCB3aGVuIGNvbXBsZXRlZC4K
KyAgICAgKiBAcGFyYW0gb25FcnJvciBDYWxsYmFjayBjYWxsZWQgb24gZXJyb3IuCisgICAgICog
QGhpZGRlbgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuX3JlYnVpbGRQcm9ncmFtID0g
ZnVuY3Rpb24gKHZlcnRleFNvdXJjZUNvZGUsIGZyYWdtZW50U291cmNlQ29kZSwgb25Db21waWxl
ZCwgb25FcnJvcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl9p
c1JlYWR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3ZlcnRleFNvdXJjZUNvZGVPdmVycmlkZSA9
IHZlcnRleFNvdXJjZUNvZGU7CisgICAgICAgIHRoaXMuX2ZyYWdtZW50U291cmNlQ29kZU92ZXJy
aWRlID0gZnJhZ21lbnRTb3VyY2VDb2RlOworICAgICAgICB0aGlzLm9uRXJyb3IgPSBmdW5jdGlv
biAoZWZmZWN0LCBlcnJvcikgeworICAgICAgICAgICAgaWYgKG9uRXJyb3IpIHsKKyAgICAgICAg
ICAgICAgICBvbkVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAg
ICAgdGhpcy5vbkNvbXBpbGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHNjZW5l
cyA9IF90aGlzLmdldEVuZ2luZSgpLnNjZW5lczsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc2NlbmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgc2NlbmVzW2ldLm1h
cmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9BbGxEaXJ0eUZsYWcpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgX3RoaXMuX3BpcGVsaW5lQ29udGV4dC5faGFuZGxlc1NwZWN0
b3JSZWJ1aWxkQ2FsbGJhY2sob25Db21waWxlZCk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMu
X2ZhbGxiYWNrcyA9IG51bGw7CisgICAgICAgIHRoaXMuX3ByZXBhcmVFZmZlY3QoKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFByZXBhcmVzIHRoZSBlZmZlY3QKKyAgICAgKiBAaGlkZGVuCisg
ICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5fcHJlcGFyZUVmZmVjdCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIGF0dHJpYnV0ZXNOYW1l
cyA9IHRoaXMuX2F0dHJpYnV0ZXNOYW1lczsKKyAgICAgICAgdmFyIGRlZmluZXMgPSB0aGlzLmRl
ZmluZXM7CisgICAgICAgIHZhciBwcmV2aW91c1BpcGVsaW5lQ29udGV4dCA9IHRoaXMuX3BpcGVs
aW5lQ29udGV4dDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhciBlbmdpbmUgPSB0aGlz
Ll9lbmdpbmU7CisgICAgICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQgPSBlbmdpbmUuY3Jl
YXRlUGlwZWxpbmVDb250ZXh0KHRoaXMuX3Byb2Nlc3NpbmdDb250ZXh0KTsKKyAgICAgICAgICAg
IHZhciByZWJ1aWxkUmViaW5kID0gdGhpcy5fcmVidWlsZFByb2dyYW0uYmluZCh0aGlzKTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl92ZXJ0ZXhTb3VyY2VDb2RlT3ZlcnJpZGUgJiYgdGhpcy5fZnJh
Z21lbnRTb3VyY2VDb2RlT3ZlcnJpZGUpIHsKKyAgICAgICAgICAgICAgICBlbmdpbmUuX3ByZXBh
cmVQaXBlbGluZUNvbnRleHQodGhpcy5fcGlwZWxpbmVDb250ZXh0LCB0aGlzLl92ZXJ0ZXhTb3Vy
Y2VDb2RlT3ZlcnJpZGUsIHRoaXMuX2ZyYWdtZW50U291cmNlQ29kZU92ZXJyaWRlLCB0cnVlLCBy
ZWJ1aWxkUmViaW5kLCBudWxsLCB0aGlzLl90cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCB0aGlz
Ll9rZXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgZW5naW5lLl9wcmVwYXJlUGlwZWxpbmVDb250ZXh0KHRoaXMuX3BpcGVsaW5lQ29udGV4dCwg
dGhpcy5fdmVydGV4U291cmNlQ29kZSwgdGhpcy5fZnJhZ21lbnRTb3VyY2VDb2RlLCBmYWxzZSwg
cmVidWlsZFJlYmluZCwgZGVmaW5lcywgdGhpcy5fdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywg
dGhpcy5fa2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZ2luZS5fZXhlY3V0ZVdo
ZW5SZW5kZXJpbmdTdGF0ZUlzQ29tcGlsZWQodGhpcy5fcGlwZWxpbmVDb250ZXh0LCBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2F0dHJpYnV0ZXMgPSBbXTsKKyAgICAgICAg
ICAgICAgICBfdGhpcy5fcGlwZWxpbmVDb250ZXh0Ll9maWxsRWZmZWN0SW5mb3JtYXRpb24oX3Ro
aXMsIF90aGlzLl91bmlmb3JtQnVmZmVyc05hbWVzLCBfdGhpcy5fdW5pZm9ybXNOYW1lcywgX3Ro
aXMuX3VuaWZvcm1zLCBfdGhpcy5fc2FtcGxlckxpc3QsIF90aGlzLl9zYW1wbGVycywgYXR0cmli
dXRlc05hbWVzLCBfdGhpcy5fYXR0cmlidXRlcyk7CisgICAgICAgICAgICAgICAgX3RoaXMuX2Nv
bXBpbGF0aW9uRXJyb3IgPSAiIjsKKyAgICAgICAgICAgICAgICBfdGhpcy5faXNSZWFkeSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLm9uQ29tcGlsZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMub25Db21waWxlZChfdGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIF90aGlzLm9uQ29tcGlsZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKF90
aGlzKTsKKyAgICAgICAgICAgICAgICBfdGhpcy5vbkNvbXBpbGVPYnNlcnZhYmxlLmNsZWFyKCk7
CisgICAgICAgICAgICAgICAgLy8gVW5iaW5kIG1lc2ggcmVmZXJlbmNlIGluIGZhbGxiYWNrcwor
ICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fZmFsbGJhY2tzKSB7CisgICAgICAgICAgICAgICAg
ICAgIF90aGlzLl9mYWxsYmFja3MudW5CaW5kTWVzaCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAocHJldmlvdXNQaXBlbGluZUNvbnRleHQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuZ2V0RW5naW5lKCkuX2RlbGV0ZVBpcGVsaW5lQ29udGV4dChwcmV2aW91
c1BpcGVsaW5lQ29udGV4dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fcGlwZWxpbmVDb250ZXh0LmlzQXN5bmMpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9jaGVja0lzUmVhZHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0NvbXBpbGF0aW9u
RXJyb3JzKGUsIHByZXZpb3VzUGlwZWxpbmVDb250ZXh0KTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgRWZmZWN0LnByb3RvdHlwZS5fcHJvY2Vzc0NvbXBpbGF0aW9uRXJyb3JzID0gZnVuY3Rpb24g
KGUsIHByZXZpb3VzUGlwZWxpbmVDb250ZXh0KSB7CisgICAgICAgIGlmIChwcmV2aW91c1BpcGVs
aW5lQ29udGV4dCA9PT0gdm9pZCAwKSB7IHByZXZpb3VzUGlwZWxpbmVDb250ZXh0ID0gbnVsbDsg
fQorICAgICAgICB0aGlzLl9jb21waWxhdGlvbkVycm9yID0gZS5tZXNzYWdlOworICAgICAgICB2
YXIgYXR0cmlidXRlc05hbWVzID0gdGhpcy5fYXR0cmlidXRlc05hbWVzOworICAgICAgICB2YXIg
ZmFsbGJhY2tzID0gdGhpcy5fZmFsbGJhY2tzOworICAgICAgICAvLyBMZXQncyBnbyB0aHJvdWdo
IGZhbGxiYWNrcyB0aGVuCisgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJMb2dnZXIiXS5FcnJvcigiVW5hYmxlIHRvIGNvbXBpbGUgZWZmZWN0OiIpOwor
ICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTG9nZ2Vy
Il0uRXJyb3IoIlVuaWZvcm1zOiAiICsgdGhpcy5fdW5pZm9ybXNOYW1lcy5tYXAoZnVuY3Rpb24g
KHVuaWZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybiAiICIgKyB1bmlmb3JtOworICAgICAgICB9
KSk7CisgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJM
b2dnZXIiXS5FcnJvcigiQXR0cmlidXRlczogIiArIGF0dHJpYnV0ZXNOYW1lcy5tYXAoZnVuY3Rp
b24gKGF0dHJpYnV0ZSkgeworICAgICAgICAgICAgcmV0dXJuICIgIiArIGF0dHJpYnV0ZTsKKyAg
ICAgICAgfSkpOworICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siTG9nZ2VyIl0uRXJyb3IoIkRlZmluZXM6XHJcbiIgKyB0aGlzLmRlZmluZXMpOworICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTG9nZ2VyIl0u
RXJyb3IoIkVycm9yOiAiICsgdGhpcy5fY29tcGlsYXRpb25FcnJvcik7CisgICAgICAgIGlmIChw
cmV2aW91c1BpcGVsaW5lQ29udGV4dCkgeworICAgICAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250
ZXh0ID0gcHJldmlvdXNQaXBlbGluZUNvbnRleHQ7CisgICAgICAgICAgICB0aGlzLl9pc1JlYWR5
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLm9uRXJyb3IodGhpcywgdGhpcy5fY29tcGlsYXRpb25FcnJvcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLm9uRXJyb3JPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmFsbGJhY2tzKSB7CisgICAgICAgICAgICB0
aGlzLl9waXBlbGluZUNvbnRleHQgPSBudWxsOworICAgICAgICAgICAgaWYgKGZhbGxiYWNrcy5o
YXNNb3JlRmFsbGJhY2tzKSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIkxvZ2dlciJdLkVycm9yKCJUcnlpbmcgbmV4dCBmYWxsYmFj
ay4iKTsKKyAgICAgICAgICAgICAgICB0aGlzLmRlZmluZXMgPSBmYWxsYmFja3MucmVkdWNlKHRo
aXMuZGVmaW5lcywgdGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZUVmZmVjdCgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7IC8vIFNvcnJ5IHdlIGRpZCBldmVy
eXRoaW5nIHdlIGNhbgorICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKHRoaXMsIHRoaXMuX2NvbXBpbGF0aW9uRXJyb3Ip
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3JPYnNlcnZh
YmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3JP
YnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgLy8gVW5iaW5kIG1lc2ggcmVmZXJl
bmNlIGluIGZhbGxiYWNrcworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mYWxsYmFja3MpIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmFsbGJhY2tzLnVuQmluZE1lc2goKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShFZmZlY3QucHJvdG90eXBlLCAiaXNTdXBwb3J0ZWQiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBDaGVja3MgaWYgdGhlIGVmZmVjdCBpcyBzdXBwb3J0ZWQuIChN
dXN0IGJlIGNhbGxlZCBhZnRlciBjb21waWxhdGlvbikKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBpbGF0aW9uRXJy
b3IgPT09ICIiOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyBhIHRl
eHR1cmUgdG8gdGhlIGVuZ2luZSB0byBiZSB1c2VkIGFzIG91dHB1dCBvZiB0aGUgc2hhZGVyLgor
ICAgICAqIEBwYXJhbSBjaGFubmVsIE5hbWUgb2YgdGhlIG91dHB1dCB2YXJpYWJsZS4KKyAgICAg
KiBAcGFyYW0gdGV4dHVyZSBUZXh0dXJlIHRvIGJpbmQuCisgICAgICogQGhpZGRlbgorICAgICAq
LworICAgIEVmZmVjdC5wcm90b3R5cGUuX2JpbmRUZXh0dXJlID0gZnVuY3Rpb24gKGNoYW5uZWws
IHRleHR1cmUpIHsKKyAgICAgICAgdGhpcy5fZW5naW5lLl9iaW5kVGV4dHVyZSh0aGlzLl9zYW1w
bGVyc1tjaGFubmVsXSwgdGV4dHVyZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEg
dGV4dHVyZSBvbiB0aGUgZW5naW5lIHRvIGJlIHVzZWQgaW4gdGhlIHNoYWRlci4KKyAgICAgKiBA
cGFyYW0gY2hhbm5lbCBOYW1lIG9mIHRoZSBzYW1wbGVyIHZhcmlhYmxlLgorICAgICAqIEBwYXJh
bSB0ZXh0dXJlIFRleHR1cmUgdG8gc2V0LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUu
c2V0VGV4dHVyZSA9IGZ1bmN0aW9uIChjaGFubmVsLCB0ZXh0dXJlKSB7CisgICAgICAgIHRoaXMu
X2VuZ2luZS5zZXRUZXh0dXJlKHRoaXMuX3NhbXBsZXJzW2NoYW5uZWxdLCB0aGlzLl91bmlmb3Jt
c1tjaGFubmVsXSwgdGV4dHVyZSwgY2hhbm5lbCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXRzIGEgZGVwdGggc3RlbmNpbCB0ZXh0dXJlIGZyb20gYSByZW5kZXIgdGFyZ2V0IG9uIHRoZSBl
bmdpbmUgdG8gYmUgdXNlZCBpbiB0aGUgc2hhZGVyLgorICAgICAqIEBwYXJhbSBjaGFubmVsIE5h
bWUgb2YgdGhlIHNhbXBsZXIgdmFyaWFibGUuCisgICAgICogQHBhcmFtIHRleHR1cmUgVGV4dHVy
ZSB0byBzZXQuCisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5zZXREZXB0aFN0ZW5jaWxU
ZXh0dXJlID0gZnVuY3Rpb24gKGNoYW5uZWwsIHRleHR1cmUpIHsKKyAgICAgICAgdGhpcy5fZW5n
aW5lLnNldERlcHRoU3RlbmNpbFRleHR1cmUodGhpcy5fc2FtcGxlcnNbY2hhbm5lbF0sIHRoaXMu
X3VuaWZvcm1zW2NoYW5uZWxdLCB0ZXh0dXJlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
dHMgYW4gYXJyYXkgb2YgdGV4dHVyZXMgb24gdGhlIGVuZ2luZSB0byBiZSB1c2VkIGluIHRoZSBz
aGFkZXIuCisgICAgICogQHBhcmFtIGNoYW5uZWwgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAg
ICogQHBhcmFtIHRleHR1cmVzIFRleHR1cmVzIHRvIHNldC4KKyAgICAgKi8KKyAgICBFZmZlY3Qu
cHJvdG90eXBlLnNldFRleHR1cmVBcnJheSA9IGZ1bmN0aW9uIChjaGFubmVsLCB0ZXh0dXJlcykg
eworICAgICAgICB2YXIgZXhOYW1lID0gY2hhbm5lbCArICJFeCI7CisgICAgICAgIGlmICh0aGlz
Ll9zYW1wbGVyTGlzdC5pbmRleE9mKGV4TmFtZSArICIwIikgPT09IC0xKSB7CisgICAgICAgICAg
ICB2YXIgaW5pdGlhbFBvcyA9IHRoaXMuX3NhbXBsZXJMaXN0LmluZGV4T2YoY2hhbm5lbCk7Cisg
ICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgdGV4dHVyZXMubGVuZ3RoOyBp
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRFeE5hbWUgPSBleE5hbWUgKyAo
aW5kZXggLSAxKS50b1N0cmluZygpOworICAgICAgICAgICAgICAgIHRoaXMuX3NhbXBsZXJMaXN0
LnNwbGljZShpbml0aWFsUG9zICsgaW5kZXgsIDAsIGN1cnJlbnRFeE5hbWUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gUmVzZXQgZXZlcnkgY2hhbm5lbHMKKyAgICAgICAgICAgIHZh
ciBjaGFubmVsSW5kZXggPSAwOworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRo
aXMuX3NhbXBsZXJMaXN0OyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAg
IHZhciBrZXkgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgdGhpcy5fc2FtcGxlcnNba2V5XSA9
IGNoYW5uZWxJbmRleDsKKyAgICAgICAgICAgICAgICBjaGFubmVsSW5kZXggKz0gMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9lbmdpbmUuc2V0VGV4dHVyZUFycmF5
KHRoaXMuX3NhbXBsZXJzW2NoYW5uZWxdLCB0aGlzLl91bmlmb3Jtc1tjaGFubmVsXSwgdGV4dHVy
ZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIHRleHR1cmUgdG8gYmUgdGhlIGlu
cHV0IG9mIHRoZSBzcGVjaWZpZWQgcG9zdCBwcm9jZXNzLiAoVG8gdXNlIHRoZSBvdXRwdXQsIHBh
c3MgaW4gdGhlIG5leHQgcG9zdCBwcm9jZXNzIGluIHRoZSBwaXBlbGluZSkKKyAgICAgKiBAcGFy
YW0gY2hhbm5lbCBOYW1lIG9mIHRoZSBzYW1wbGVyIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBw
b3N0UHJvY2VzcyBQb3N0IHByb2Nlc3MgdG8gZ2V0IHRoZSBpbnB1dCB0ZXh0dXJlIGZyb20uCisg
ICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5zZXRUZXh0dXJlRnJvbVBvc3RQcm9jZXNzID0g
ZnVuY3Rpb24gKGNoYW5uZWwsIHBvc3RQcm9jZXNzKSB7CisgICAgICAgIHRoaXMuX2VuZ2luZS5z
ZXRUZXh0dXJlRnJvbVBvc3RQcm9jZXNzKHRoaXMuX3NhbXBsZXJzW2NoYW5uZWxdLCBwb3N0UHJv
Y2Vzcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiAoV2FybmluZyEgc2V0VGV4dHVyZUZyb21Q
b3N0UHJvY2Vzc091dHB1dCBtYXkgYmUgZGVzaXJlZCBpbnN0ZWFkKQorICAgICAqIFNldHMgdGhl
IGlucHV0IHRleHR1cmUgb2YgdGhlIHBhc3NlZCBpbiBwb3N0IHByb2Nlc3MgdG8gYmUgaW5wdXQg
b2YgdGhpcyBlZmZlY3QuIChUbyB1c2UgdGhlIG91dHB1dCBvZiB0aGUgcGFzc2VkIGluIHBvc3Qg
cHJvY2VzcyB1c2Ugc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2Vzc091dHB1dCkKKyAgICAgKiBAcGFy
YW0gY2hhbm5lbCBOYW1lIG9mIHRoZSBzYW1wbGVyIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBw
b3N0UHJvY2VzcyBQb3N0IHByb2Nlc3MgdG8gZ2V0IHRoZSBvdXRwdXQgdGV4dHVyZSBmcm9tLgor
ICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2Vzc091
dHB1dCA9IGZ1bmN0aW9uIChjaGFubmVsLCBwb3N0UHJvY2VzcykgeworICAgICAgICB0aGlzLl9l
bmdpbmUuc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2Vzc091dHB1dCh0aGlzLl9zYW1wbGVyc1tjaGFu
bmVsXSwgcG9zdFByb2Nlc3MpOworICAgIH07CisgICAgLyoqCisgICAgICogQmluZHMgYSBidWZm
ZXIgdG8gYSB1bmlmb3JtLgorICAgICAqIEBwYXJhbSBidWZmZXIgQnVmZmVyIHRvIGJpbmQuCisg
ICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgdW5pZm9ybSB2YXJpYWJsZSB0byBiaW5kIHRv
LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuYmluZFVuaWZvcm1CdWZmZXIgPSBmdW5j
dGlvbiAoYnVmZmVyLCBuYW1lKSB7CisgICAgICAgIHZhciBidWZmZXJOYW1lID0gdGhpcy5fdW5p
Zm9ybUJ1ZmZlcnNOYW1lc1tuYW1lXTsKKyAgICAgICAgaWYgKGJ1ZmZlck5hbWUgPT09IHVuZGVm
aW5lZCB8fCBFZmZlY3QuX2Jhc2VDYWNoZVtidWZmZXJOYW1lXSA9PT0gYnVmZmVyKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgRWZmZWN0Ll9iYXNlQ2FjaGVbYnVm
ZmVyTmFtZV0gPSBidWZmZXI7CisgICAgICAgIHRoaXMuX2VuZ2luZS5iaW5kVW5pZm9ybUJ1ZmZl
ckJhc2UoYnVmZmVyLCBidWZmZXJOYW1lLCBuYW1lKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEJpbmRzIGJsb2NrIHRvIGEgdW5pZm9ybS4KKyAgICAgKiBAcGFyYW0gYmxvY2tOYW1lIE5hbWUg
b2YgdGhlIGJsb2NrIHRvIGJpbmQuCisgICAgICogQHBhcmFtIGluZGV4IEluZGV4IHRvIGJpbmQu
CisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5iaW5kVW5pZm9ybUJsb2NrID0gZnVuY3Rp
b24gKGJsb2NrTmFtZSwgaW5kZXgpIHsKKyAgICAgICAgdGhpcy5fZW5naW5lLmJpbmRVbmlmb3Jt
QmxvY2sodGhpcy5fcGlwZWxpbmVDb250ZXh0LCBibG9ja05hbWUsIGluZGV4KTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNldHMgYW4gaW50ZXJnZXIgdmFsdWUgb24gYSB1bmlmb3JtIHZhcmlh
YmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAg
ICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMg
ZWZmZWN0LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0SW50ID0gZnVuY3Rpb24g
KHVuaWZvcm1OYW1lLCB2YWx1ZSkgeworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQuc2V0
SW50KHVuaWZvcm1OYW1lLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU2V0cyBhbiBpbnQgYXJyYXkgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgor
ICAgICAqIEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBA
cGFyYW0gYXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0
LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0SW50QXJyYXkgPSBmdW5jdGlvbiAo
dW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRJ
bnRBcnJheSh1bmlmb3JtTmFtZSwgYXJyYXkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgYW4gaW50IGFycmF5IDIgb24gYSB1bmlmb3JtIHZhcmlh
YmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDRdIHdp
bGwgcmVzdWx0IGluIFtbMSwyXSxbMyw0XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0g
dW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFy
cmF5IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAg
ICBFZmZlY3QucHJvdG90eXBlLnNldEludEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwg
YXJyYXkpIHsKKyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldEludEFycmF5Mih1bmlm
b3JtTmFtZSwgYXJyYXkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldHMgYW4gaW50IGFycmF5IDMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkg
aXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDQsNSw2XSB3aWxsIHJlc3Vs
dCBpbiBbWzEsMiwzXSxbNCw1LDZdXSBpbiB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJhbSB1bmlm
b3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkgYXJyYXkg
dG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIEVm
ZmVjdC5wcm90b3R5cGUuc2V0SW50QXJyYXkzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBhcnJh
eSkgeworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQuc2V0SW50QXJyYXkzKHVuaWZvcm1O
YW1lLCBhcnJheSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0cyBhbiBpbnQgYXJyYXkgNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJheSBpcyBz
cGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNCw1LDYsNyw4XSB3aWxsIHJlc3Vs
dCBpbiBbWzEsMiwzLDRdLFs1LDYsNyw4XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0g
dW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFy
cmF5IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAg
ICBFZmZlY3QucHJvdG90eXBlLnNldEludEFycmF5NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwg
YXJyYXkpIHsKKyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldEludEFycmF5NCh1bmlm
b3JtTmFtZSwgYXJyYXkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldHMgYW4gZmxvYXQgYXJyYXkgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAq
IEBwYXJhbSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0g
YXJyYXkgYXJyYXkgdG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAg
ICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0RmxvYXRBcnJheSA9IGZ1bmN0aW9uICh1bmlm
b3JtTmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldEZsb2F0
QXJyYXkodW5pZm9ybU5hbWUsIGFycmF5KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGZsb2F0IGFycmF5IDIgb24gYSB1bmlmb3JtIHZhcmlh
YmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDRdIHdp
bGwgcmVzdWx0IGluIFtbMSwyXSxbMyw0XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0g
dW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFy
cmF5IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAg
ICBFZmZlY3QucHJvdG90eXBlLnNldEZsb2F0QXJyYXkyID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1l
LCBhcnJheSkgeworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQuc2V0RmxvYXRBcnJheTIo
dW5pZm9ybU5hbWUsIGFycmF5KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIGFuIGZsb2F0IGFycmF5IDMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAo
QXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDQsNSw2XSB3aWxs
IHJlc3VsdCBpbiBbWzEsMiwzXSxbNCw1LDZdXSBpbiB0aGUgc2hhZGVyKQorICAgICAqIEBwYXJh
bSB1bmlmb3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gYXJyYXkg
YXJyYXkgdG8gYmUgc2V0LgorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLwor
ICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0RmxvYXRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9ybU5h
bWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRGbG9hdEFycmF5
Myh1bmlmb3JtTmFtZSwgYXJyYXkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHMgYW4gZmxvYXQgYXJyYXkgNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUu
IChBcnJheSBpcyBzcGVjaWZpZWQgYXMgc2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNCw1LDYsNyw4
XSB3aWxsIHJlc3VsdCBpbiBbWzEsMiwzLDRdLFs1LDYsNyw4XV0gaW4gdGhlIHNoYWRlcikKKyAg
ICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBh
cmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4K
KyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldEZsb2F0QXJyYXk0ID0gZnVuY3Rpb24g
KHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQuc2V0
RmxvYXRBcnJheTQodW5pZm9ybU5hbWUsIGFycmF5KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGFycmF5IG9uIGEgdW5pZm9ybSB2YXJpYWJs
ZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAg
ICogQHBhcmFtIGFycmF5IGFycmF5IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVm
ZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldEFycmF5ID0gZnVuY3Rpb24g
KHVuaWZvcm1OYW1lLCBhcnJheSkgeworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRleHQuc2V0
QXJyYXkodW5pZm9ybU5hbWUsIGFycmF5KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGFycmF5IDIgb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAo
QXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBlZy4gWzEsMiwzLDRdIHdpbGwgcmVz
dWx0IGluIFtbMSwyXSxbMyw0XV0gaW4gdGhlIHNoYWRlcikKKyAgICAgKiBAcGFyYW0gdW5pZm9y
bU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIGFycmF5IGFycmF5IHRv
IGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAgICBFZmZl
Y3QucHJvdG90eXBlLnNldEFycmF5MiA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgYXJyYXkpIHsK
KyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldEFycmF5Mih1bmlmb3JtTmFtZSwgYXJy
YXkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMg
YW4gYXJyYXkgMyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIChBcnJheSBpcyBzcGVjaWZpZWQgYXMg
c2luZ2xlIGFycmF5IGVnLiBbMSwyLDMsNCw1LDZdIHdpbGwgcmVzdWx0IGluIFtbMSwyLDNdLFs0
LDUsNl1dIGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2Yg
dGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAg
ICogQHJldHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5z
ZXRBcnJheTMgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMu
X3BpcGVsaW5lQ29udGV4dC5zZXRBcnJheTModW5pZm9ybU5hbWUsIGFycmF5KTsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGFuIGFycmF5IDQgb24g
YSB1bmlmb3JtIHZhcmlhYmxlLiAoQXJyYXkgaXMgc3BlY2lmaWVkIGFzIHNpbmdsZSBhcnJheSBl
Zy4gWzEsMiwzLDQsNSw2LDcsOF0gd2lsbCByZXN1bHQgaW4gW1sxLDIsMyw0XSxbNSw2LDcsOF1d
IGluIHRoZSBzaGFkZXIpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZh
cmlhYmxlLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBiZSBzZXQuCisgICAgICogQHJl
dHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5zZXRBcnJh
eTQgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMuX3BpcGVs
aW5lQ29udGV4dC5zZXRBcnJheTQodW5pZm9ybU5hbWUsIGFycmF5KTsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIG1hdHJpY2VzIG9uIGEgdW5pZm9y
bSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFi
bGUuCisgICAgICogQHBhcmFtIG1hdHJpY2VzIG1hdHJpY2VzIHRvIGJlIHNldC4KKyAgICAgKiBA
cmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldE1h
dHJpY2VzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCBtYXRyaWNlcykgeworICAgICAgICB0aGlz
Ll9waXBlbGluZUNvbnRleHQuc2V0TWF0cmljZXModW5pZm9ybU5hbWUsIG1hdHJpY2VzKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIG1hdHJpeCBv
biBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2Yg
dGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBtYXRyaXggbWF0cml4IHRvIGJlIHNldC4KKyAg
ICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBl
LnNldE1hdHJpeCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgbWF0cml4KSB7CisgICAgICAgIHRo
aXMuX3BpcGVsaW5lQ29udGV4dC5zZXRNYXRyaXgodW5pZm9ybU5hbWUsIG1hdHJpeCk7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIDN4MyBtYXRy
aXggb24gYSB1bmlmb3JtIHZhcmlhYmxlLiAoU3BlaWNpZmllZCBhcyBbMSwyLDMsNCw1LDYsNyw4
LDldIHdpbGwgcmVzdWx0IGluIFsxLDIsM11bNCw1LDZdWzcsOCw5XSBtYXRyaXgpCisgICAgICog
QHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBt
YXRyaXggbWF0cml4IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAg
ICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldE1hdHJpeDN4MyA9IGZ1bmN0aW9uICh1bmlm
b3JtTmFtZSwgbWF0cml4KSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRNYXRy
aXgzeDModW5pZm9ybU5hbWUsIG1hdHJpeCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0cyBhIDJ4MiBtYXRyaXggb24gYSB1bmlmb3JtIHZhcmlhYmxl
LiAoU3BlaWNpZmllZCBhcyBbMSwyLDMsNF0gd2lsbCByZXN1bHQgaW4gWzEsMl1bMyw0XSBtYXRy
aXgpCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAg
ICAqIEBwYXJhbSBtYXRyaXggbWF0cml4IHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlz
IGVmZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldE1hdHJpeDJ4MiA9IGZ1
bmN0aW9uICh1bmlmb3JtTmFtZSwgbWF0cml4KSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5lQ29u
dGV4dC5zZXRNYXRyaXgyeDIodW5pZm9ybU5hbWUsIG1hdHJpeCk7CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIGZsb2F0IG9uIGEgdW5pZm9ybSB2
YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUu
CisgICAgICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0
aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldEZsb2F0ID0gZnVu
Y3Rpb24gKHVuaWZvcm1OYW1lLCB2YWx1ZSkgeworICAgICAgICB0aGlzLl9waXBlbGluZUNvbnRl
eHQuc2V0RmxvYXQodW5pZm9ybU5hbWUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgYm9vbGVhbiBvbiBhIHVuaWZvcm0gdmFyaWFi
bGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAg
ICAqIEBwYXJhbSBib29sIHZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVm
ZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3QucHJvdG90eXBlLnNldEJvb2wgPSBmdW5jdGlvbiAo
dW5pZm9ybU5hbWUsIGJvb2wpIHsKKyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldEJv
b2wodW5pZm9ybU5hbWUsIGJvb2wpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFNldHMgYSBWZWN0b3IyIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAg
KiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFt
IHZlY3RvcjIgdmVjdG9yMiB0byBiZSBzZXQuCisgICAgICogQHJldHVybnMgdGhpcyBlZmZlY3Qu
CisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5zZXRWZWN0b3IyID0gZnVuY3Rpb24gKHVu
aWZvcm1OYW1lLCB2ZWN0b3IyKSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRW
ZWN0b3IyKHVuaWZvcm1OYW1lLCB2ZWN0b3IyKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgZmxvYXQyIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4K
KyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICog
QHBhcmFtIHggRmlyc3QgZmxvYXQgaW4gZmxvYXQyLgorICAgICAqIEBwYXJhbSB5IFNlY29uZCBm
bG9hdCBpbiBmbG9hdDIuCisgICAgICogQHJldHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisg
ICAgRWZmZWN0LnByb3RvdHlwZS5zZXRGbG9hdDIgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIHgs
IHkpIHsKKyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldEZsb2F0Mih1bmlmb3JtTmFt
ZSwgeCwgeSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICog
U2V0cyBhIFZlY3RvcjMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlm
b3JtTmFtZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdmVjdG9yMyBWYWx1
ZSB0byBiZSBzZXQuCisgICAgICogQHJldHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisgICAg
RWZmZWN0LnByb3RvdHlwZS5zZXRWZWN0b3IzID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB2ZWN0
b3IzKSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRWZWN0b3IzKHVuaWZvcm1O
YW1lLCB2ZWN0b3IzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXRzIGEgZmxvYXQzIG9uIGEgdW5pZm9ybSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0g
dW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFibGUuCisgICAgICogQHBhcmFtIHggRmlyc3Qg
ZmxvYXQgaW4gZmxvYXQzLgorICAgICAqIEBwYXJhbSB5IFNlY29uZCBmbG9hdCBpbiBmbG9hdDMu
CisgICAgICogQHBhcmFtIHogVGhpcmQgZmxvYXQgaW4gZmxvYXQzLgorICAgICAqIEByZXR1cm5z
IHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0RmxvYXQzID0g
ZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB4LCB5LCB6KSB7CisgICAgICAgIHRoaXMuX3BpcGVsaW5l
Q29udGV4dC5zZXRGbG9hdDModW5pZm9ybU5hbWUsIHgsIHksIHopOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYSBWZWN0b3I0IG9uIGEgdW5pZm9y
bSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgTmFtZSBvZiB0aGUgdmFyaWFi
bGUuCisgICAgICogQHBhcmFtIHZlY3RvcjQgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEByZXR1
cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0VmVjdG9y
NCA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgdmVjdG9yNCkgeworICAgICAgICB0aGlzLl9waXBl
bGluZUNvbnRleHQuc2V0VmVjdG9yNCh1bmlmb3JtTmFtZSwgdmVjdG9yNCk7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIGZsb2F0NCBvbiBhIHVu
aWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIE5hbWUgb2YgdGhlIHZh
cmlhYmxlLgorICAgICAqIEBwYXJhbSB4IEZpcnN0IGZsb2F0IGluIGZsb2F0NC4KKyAgICAgKiBA
cGFyYW0geSBTZWNvbmQgZmxvYXQgaW4gZmxvYXQ0LgorICAgICAqIEBwYXJhbSB6IFRoaXJkIGZs
b2F0IGluIGZsb2F0NC4KKyAgICAgKiBAcGFyYW0gdyBGb3VydGggZmxvYXQgaW4gZmxvYXQ0Lgor
ICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0LgorICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5
cGUuc2V0RmxvYXQ0ID0gZnVuY3Rpb24gKHVuaWZvcm1OYW1lLCB4LCB5LCB6LCB3KSB7CisgICAg
ICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRGbG9hdDQodW5pZm9ybU5hbWUsIHgsIHksIHos
IHcpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMg
YSBDb2xvcjMgb24gYSB1bmlmb3JtIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSB1bmlmb3JtTmFt
ZSBOYW1lIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgKiBAcGFyYW0gY29sb3IzIFZhbHVlIHRvIGJl
IHNldC4KKyAgICAgKiBAcmV0dXJucyB0aGlzIGVmZmVjdC4KKyAgICAgKi8KKyAgICBFZmZlY3Qu
cHJvdG90eXBlLnNldENvbG9yMyA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgY29sb3IzKSB7Cisg
ICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dC5zZXRDb2xvcjModW5pZm9ybU5hbWUsIGNvbG9y
Myk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBh
IENvbG9yNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1l
IE5hbWUgb2YgdGhlIHZhcmlhYmxlLgorICAgICAqIEBwYXJhbSBjb2xvcjMgVmFsdWUgdG8gYmUg
c2V0LgorICAgICAqIEBwYXJhbSBhbHBoYSBBbHBoYSB2YWx1ZSB0byBiZSBzZXQuCisgICAgICog
QHJldHVybnMgdGhpcyBlZmZlY3QuCisgICAgICovCisgICAgRWZmZWN0LnByb3RvdHlwZS5zZXRD
b2xvcjQgPSBmdW5jdGlvbiAodW5pZm9ybU5hbWUsIGNvbG9yMywgYWxwaGEpIHsKKyAgICAgICAg
dGhpcy5fcGlwZWxpbmVDb250ZXh0LnNldENvbG9yNCh1bmlmb3JtTmFtZSwgY29sb3IzLCBhbHBo
YSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBh
IENvbG9yNCBvbiBhIHVuaWZvcm0gdmFyaWFibGUKKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUg
ZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUKKyAgICAgKiBAcGFyYW0gY29sb3I0IGRl
ZmluZXMgdGhlIHZhbHVlIHRvIGJlIHNldAorICAgICAqIEByZXR1cm5zIHRoaXMgZWZmZWN0Lgor
ICAgICAqLworICAgIEVmZmVjdC5wcm90b3R5cGUuc2V0RGlyZWN0Q29sb3I0ID0gZnVuY3Rpb24g
KHVuaWZvcm1OYW1lLCBjb2xvcjQpIHsKKyAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0LnNl
dERpcmVjdENvbG9yNCh1bmlmb3JtTmFtZSwgY29sb3I0KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIGFsbCBhc3NvY2lhdGVkIHJlc291cmNl
cy4KKyAgICAgKiovCisgICAgRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBpZiAodGhpcy5fcGlwZWxpbmVDb250ZXh0KSB7CisgICAgICAgICAgICB0aGlz
Ll9waXBlbGluZUNvbnRleHQuZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Vu
Z2luZS5fcmVsZWFzZUVmZmVjdCh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoaXMg
ZnVuY3Rpb24gd2lsbCBhZGQgYSBuZXcgc2hhZGVyIHRvIHRoZSBzaGFkZXIgc3RvcmUKKyAgICAg
KiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgc2hhZGVyCisgICAgICogQHBhcmFtIHBpeGVs
U2hhZGVyIG9wdGlvbmFsIHBpeGVsIHNoYWRlciBjb250ZW50CisgICAgICogQHBhcmFtIHZlcnRl
eFNoYWRlciBvcHRpb25hbCB2ZXJ0ZXggc2hhZGVyIGNvbnRlbnQKKyAgICAgKi8KKyAgICBFZmZl
Y3QuUmVnaXN0ZXJTaGFkZXIgPSBmdW5jdGlvbiAobmFtZSwgcGl4ZWxTaGFkZXIsIHZlcnRleFNo
YWRlcikgeworICAgICAgICBpZiAocGl4ZWxTaGFkZXIpIHsKKyAgICAgICAgICAgIEVmZmVjdC5T
aGFkZXJzU3RvcmVbbmFtZSArICJQaXhlbFNoYWRlciJdID0gcGl4ZWxTaGFkZXI7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHZlcnRleFNoYWRlcikgeworICAgICAgICAgICAgRWZmZWN0LlNoYWRl
cnNTdG9yZVtuYW1lICsgIlZlcnRleFNoYWRlciJdID0gdmVydGV4U2hhZGVyOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXNldHMgdGhlIGNhY2hlIG9mIGVmZmVjdHMuCisg
ICAgICovCisgICAgRWZmZWN0LlJlc2V0Q2FjaGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIEVm
ZmVjdC5fYmFzZUNhY2hlID0ge307CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIG9yIHNl
dHMgdGhlIHJlbGF0aXZlIHVybCB1c2VkIHRvIGxvYWQgc2hhZGVycyBpZiB1c2luZyB0aGUgZW5n
aW5lIGluIG5vbi1taW5pZmllZCBtb2RlCisgICAgICovCisgICAgRWZmZWN0LlNoYWRlcnNSZXBv
c2l0b3J5ID0gInNyYy9TaGFkZXJzLyI7CisgICAgRWZmZWN0Ll91bmlxdWVJZFNlZWQgPSAwOwor
ICAgIEVmZmVjdC5fYmFzZUNhY2hlID0ge307CisgICAgLyoqCisgICAgICogU3RvcmUgb2YgZWFj
aCBzaGFkZXIgKFRoZSBjYW4gYmUgbG9va2VkIHVwIHVzaW5nIGVmZmVjdC5rZXkpCisgICAgICov
CisgICAgRWZmZWN0LlNoYWRlcnNTdG9yZSA9IHt9OworICAgIC8qKgorICAgICAqIFN0b3JlIG9m
IGVhY2ggaW5jbHVkZWQgZmlsZSBmb3IgYSBzaGFkZXIgKFRoZSBjYW4gYmUgbG9va2VkIHVwIHVz
aW5nIGVmZmVjdC5rZXkpCisgICAgICovCisgICAgRWZmZWN0LkluY2x1ZGVzU2hhZGVyc1N0b3Jl
ID0ge307CisgICAgcmV0dXJuIEVmZmVjdDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdFJlbmRlcmVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9lZmZlY3RSZW5kZXJl
ci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IEVmZmVjdFJlbmRlcmVyLCBFZmZlY3RXcmFwcGVyICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdFJlbmRlcmVyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBFZmZlY3RSZW5kZXJlcjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFZmZlY3RX
cmFwcGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFZmZlY3RXcmFwcGVyOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xp
Yi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVz
X3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0
dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZpZXdwb3J0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZpZXdwb3J0ICov
ICIuL01hdGhzL21hdGgudmlld3BvcnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3Rh
bnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlz
Yy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19wb3N0cHJvY2Vzc192ZXJ0ZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRl
cnMvcG9zdHByb2Nlc3MudmVydGV4ICovICIuL1NoYWRlcnMvcG9zdHByb2Nlc3MudmVydGV4LnRz
Iik7CisKKworCisKKworCisKKy8vIFByZXZlbnRzIEVTNiBDcmFzaCBpZiBub3QgaW1wb3J0ZWQu
CisKKy8qKgorICogSGVscGVyIGNsYXNzIHRvIHJlbmRlciBvbmUgb3IgbW9yZSBlZmZlY3RzCisg
Ki8KK3ZhciBFZmZlY3RSZW5kZXJlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIGVmZmVjdCByZW5kZXJlcgorICAgICAqIEBwYXJhbSBl
bmdpbmUgdGhlIGVuZ2luZSB0byB1c2UgZm9yIHJlbmRlcmluZworICAgICAqIEBwYXJhbSBvcHRp
b25zIGRlZmluZXMgdGhlIG9wdGlvbnMgb2YgdGhlIGVmZmVjdCByZW5kZXJlcgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIEVmZmVjdFJlbmRlcmVyKGVuZ2luZSwgb3B0aW9ucykgeworICAgICAgICB2
YXIgX2E7CisgICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IEVmZmVj
dFJlbmRlcmVyLl9EZWZhdWx0T3B0aW9uczsgfQorICAgICAgICB0aGlzLmVuZ2luZSA9IGVuZ2lu
ZTsKKyAgICAgICAgdGhpcy5fcmluZ0J1ZmZlckluZGV4ID0gMDsKKyAgICAgICAgdGhpcy5fcmlu
Z1NjcmVlbkJ1ZmZlciA9IG51bGw7CisgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5WaWV3cG9ydCA9
IG5ldyBfTWF0aHNfbWF0aF92aWV3cG9ydF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
aWV3cG9ydCJdKDAsIDAsIDEsIDEpOworICAgICAgICBvcHRpb25zID0gdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19hc3NpZ24iXSh7fSwgRWZmZWN0UmVuZGVyZXIuX0RlZmF1
bHRPcHRpb25zLCBvcHRpb25zKTsKKyAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVycyA9IChfYSA9
IHt9LAorICAgICAgICAgICAgX2FbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXSA9IG5ldyBfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXShlbmdpbmUsIG9w
dGlvbnMucG9zaXRpb25zLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIGZhbHNlLCBmYWxzZSwgMiksCisgICAg
ICAgICAgICBfYSk7CisgICAgICAgIHRoaXMuX2luZGV4QnVmZmVyID0gZW5naW5lLmNyZWF0ZUlu
ZGV4QnVmZmVyKG9wdGlvbnMuaW5kaWNlcyk7CisgICAgICAgIC8vIE5vIG5lZWQgaGVyZSBmb3Ig
ZnVsbCBzY3JlZW4gcmVuZGVyLgorICAgICAgICBlbmdpbmUuc2V0RGVwdGhCdWZmZXIoZmFsc2Up
OworICAgICAgICBlbmdpbmUuc2V0U3RlbmNpbEJ1ZmZlcihmYWxzZSk7CisgICAgfQorICAgIEVm
ZmVjdFJlbmRlcmVyLnByb3RvdHlwZS5fZ2V0TmV4dEZyYW1lQnVmZmVyID0gZnVuY3Rpb24gKGlu
Y3JlbWVudEluZGV4KSB7CisgICAgICAgIGlmIChpbmNyZW1lbnRJbmRleCA9PT0gdm9pZCAwKSB7
IGluY3JlbWVudEluZGV4ID0gdHJ1ZTsgfQorICAgICAgICBpZiAoIXRoaXMuX3JpbmdTY3JlZW5C
dWZmZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX3JpbmdTY3JlZW5CdWZmZXIgPSBbXTsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFy
IGludGVybmFsVGV4dHVyZSA9IHRoaXMuZW5naW5lLmNyZWF0ZVJlbmRlclRhcmdldFRleHR1cmUo
eworICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5lbmdpbmUuZ2V0UmVuZGVyV2lkdGgo
dHJ1ZSksCisgICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5lbmdpbmUuZ2V0UmVuZGVy
SGVpZ2h0KHRydWUpLAorICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAg
Z2VuZXJhdGVEZXB0aEJ1ZmZlcjogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRl
U3RlbmNpbEJ1ZmZlcjogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlTWlwTWFw
czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nTW9kZTogX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbnN0YW50cyJdLlRFWFRVUkVf
TkVBUkVTVF9ORUFSRVNULAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHZh
ciB0ZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0oIiIsIG51bGwpOworICAgICAgICAgICAgICAgIHRl
eHR1cmUuX3RleHR1cmUgPSBpbnRlcm5hbFRleHR1cmU7CisgICAgICAgICAgICAgICAgdGhpcy5f
cmluZ1NjcmVlbkJ1ZmZlci5wdXNoKHRleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHZhciByZXQgPSB0aGlzLl9yaW5nU2NyZWVuQnVmZmVyW3RoaXMuX3JpbmdCdWZm
ZXJJbmRleF07CisgICAgICAgIGlmIChpbmNyZW1lbnRJbmRleCkgeworICAgICAgICAgICAgdGhp
cy5fcmluZ0J1ZmZlckluZGV4ID0gKHRoaXMuX3JpbmdCdWZmZXJJbmRleCArIDEpICUgMjsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
cyB0aGUgY3VycmVudCB2aWV3cG9ydCBpbiBub3JtYWxpemVkIGNvb3JkaW5hdGVzIDAtMQorICAg
ICAqIEBwYXJhbSB2aWV3cG9ydCBEZWZpbmVzIHRoZSB2aWV3cG9ydCB0byBzZXQgKGRlZmF1bHRz
IHRvIDAgMCAxIDEpCisgICAgICovCisgICAgRWZmZWN0UmVuZGVyZXIucHJvdG90eXBlLnNldFZp
ZXdwb3J0ID0gZnVuY3Rpb24gKHZpZXdwb3J0KSB7CisgICAgICAgIGlmICh2aWV3cG9ydCA9PT0g
dm9pZCAwKSB7IHZpZXdwb3J0ID0gdGhpcy5fZnVsbHNjcmVlblZpZXdwb3J0OyB9CisgICAgICAg
IHRoaXMuZW5naW5lLnNldFZpZXdwb3J0KHZpZXdwb3J0KTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEJpbmRzIHRoZSBlbWJlZGRlZCBhdHRyaWJ1dGVzIGJ1ZmZlciB0byB0aGUgZWZmZWN0Lgor
ICAgICAqIEBwYXJhbSBlZmZlY3QgRGVmaW5lcyB0aGUgZWZmZWN0IHRvIGJpbmQgdGhlIGF0dHJp
YnV0ZXMgZm9yCisgICAgICovCisgICAgRWZmZWN0UmVuZGVyZXIucHJvdG90eXBlLmJpbmRCdWZm
ZXJzID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICB0aGlzLmVuZ2luZS5iaW5kQnVmZmVy
cyh0aGlzLl92ZXJ0ZXhCdWZmZXJzLCB0aGlzLl9pbmRleEJ1ZmZlciwgZWZmZWN0KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGN1cnJlbnQgZWZmZWN0IHdyYXBwZXIgdG8gdXNl
IGR1cmluZyBkcmF3LgorICAgICAqIFRoZSBlZmZlY3QgbmVlZHMgdG8gYmUgcmVhZHkgYmVmb3Jl
IGNhbGxpbmcgdGhpcyBhcGkuCisgICAgICogVGhpcyBhbHNvIHNldHMgdGhlIGRlZmF1bHQgZnVs
bCBzY3JlZW4gcG9zaXRpb24gYXR0cmlidXRlLgorICAgICAqIEBwYXJhbSBlZmZlY3RXcmFwcGVy
IERlZmluZXMgdGhlIGVmZmVjdCB0byBkcmF3IHdpdGgKKyAgICAgKi8KKyAgICBFZmZlY3RSZW5k
ZXJlci5wcm90b3R5cGUuYXBwbHlFZmZlY3RXcmFwcGVyID0gZnVuY3Rpb24gKGVmZmVjdFdyYXBw
ZXIpIHsKKyAgICAgICAgdGhpcy5lbmdpbmUuZW5hYmxlRWZmZWN0KGVmZmVjdFdyYXBwZXIuZWZm
ZWN0KTsKKyAgICAgICAgdGhpcy5iaW5kQnVmZmVycyhlZmZlY3RXcmFwcGVyLmVmZmVjdCk7Cisg
ICAgICAgIGVmZmVjdFdyYXBwZXIub25BcHBseU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHt9
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERyYXdzIGEgZnVsbCBzY3JlZW4gcXVhZC4KKyAg
ICAgKi8KKyAgICBFZmZlY3RSZW5kZXJlci5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGhpcy5lbmdpbmUuZHJhd0VsZW1lbnRzVHlwZShfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVHJpYW5n
bGVGaWxsTW9kZSwgMCwgNik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiByZW5kZXJzIG9uZSBv
ciBtb3JlIGVmZmVjdHMgdG8gYSBzcGVjaWZpZWQgdGV4dHVyZQorICAgICAqIEBwYXJhbSBlZmZl
Y3RXcmFwcGVycyBsaXN0IG9mIGVmZmVjdHMgdG8gcmVuZGVyZXIKKyAgICAgKiBAcGFyYW0gb3V0
cHV0VGV4dHVyZSB0ZXh0dXJlIHRvIGRyYXcgdG8sIGlmIG51bGwgaXQgd2lsbCByZW5kZXIgdG8g
dGhlIHNjcmVlbgorICAgICAqLworICAgIEVmZmVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIg
PSBmdW5jdGlvbiAoZWZmZWN0V3JhcHBlcnMsIG91dHB1dFRleHR1cmUpIHsKKyAgICAgICAgdmFy
IF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKG91dHB1dFRleHR1cmUgPT09IHZvaWQgMCkgeyBv
dXRwdXRUZXh0dXJlID0gbnVsbDsgfQorICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWZmZWN0
V3JhcHBlcnMpKSB7CisgICAgICAgICAgICBlZmZlY3RXcmFwcGVycyA9IFtlZmZlY3RXcmFwcGVy
c107CisgICAgICAgIH0KKyAgICAgICAgLy8gRW5zdXJlIGFsbCBlZmZlY3RzIGFyZSByZWFkeQor
ICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGVmZmVjdFdyYXBwZXJzXzEgPSBlZmZlY3RXcmFwcGVy
czsgX2kgPCBlZmZlY3RXcmFwcGVyc18xLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFy
IHdyYXBwZXIgPSBlZmZlY3RXcmFwcGVyc18xW19pXTsKKyAgICAgICAgICAgIGlmICghd3JhcHBl
ci5lZmZlY3QuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVmZmVjdFdyYXBwZXJzLmZvckVhY2goZnVuY3Rpb24g
KGVmZmVjdFdyYXBwZXIsIGkpIHsKKyAgICAgICAgICAgIHZhciByZW5kZXJUbyA9IG91dHB1dFRl
eHR1cmU7CisgICAgICAgICAgICAvLyBmb3IgYW55IG5leHQgZWZmZWN0IG1ha2UgaXQncyBpbnB1
dCB0aGUgb3V0cHV0IG9mIHRoZSBwcmV2aW91cyBlZmZlY3QKKyAgICAgICAgICAgIGlmIChpICE9
PSAwKSB7CisgICAgICAgICAgICAgICAgZWZmZWN0V3JhcHBlci5lZmZlY3Qub25CaW5kT2JzZXJ2
YWJsZS5hZGRPbmNlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgZWZmZWN0V3Jh
cHBlci5lZmZlY3Quc2V0VGV4dHVyZSgidGV4dHVyZVNhbXBsZXIiLCBfdGhpcy5fZ2V0TmV4dEZy
YW1lQnVmZmVyKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBTZXQgdGhlIG91dHB1dCB0byB0aGUgbmV4dCBzY3JlZW5idWZmZXIKKyAg
ICAgICAgICAgIGlmIChlZmZlY3RXcmFwcGVycy5sZW5ndGggPiAxICYmIGkgIT0gZWZmZWN0V3Jh
cHBlcnMubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgIHJlbmRlclRvID0gX3RoaXMuX2dl
dE5leHRGcmFtZUJ1ZmZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcmVuZGVyVG8gPSBvdXRwdXRUZXh0dXJlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gUmVzZXQgc3RhdGUKKyAgICAgICAgICAgIF90aGlzLnNldFZpZXdwb3J0
KCk7CisgICAgICAgICAgICBfdGhpcy5hcHBseUVmZmVjdFdyYXBwZXIoZWZmZWN0V3JhcHBlcik7
CisgICAgICAgICAgICBpZiAocmVuZGVyVG8pIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5lbmdp
bmUuYmluZEZyYW1lYnVmZmVyKHJlbmRlclRvLmdldEludGVybmFsVGV4dHVyZSgpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLmRyYXcoKTsKKyAgICAgICAgICAgIGlmIChyZW5k
ZXJUbykgeworICAgICAgICAgICAgICAgIF90aGlzLmVuZ2luZS51bkJpbmRGcmFtZWJ1ZmZlcihy
ZW5kZXJUby5nZXRJbnRlcm5hbFRleHR1cmUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIGVmZmVjdCByZW5kZXJl
cgorICAgICAqLworICAgIEVmZmVjdFJlbmRlcmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBpZiAodGhpcy5fcmluZ1NjcmVlbkJ1ZmZlcikgeworICAgICAgICAg
ICAgdGhpcy5fcmluZ1NjcmVlbkJ1ZmZlci5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7CisgICAgICAg
ICAgICAgICAgYi5kaXNwb3NlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMu
X3JpbmdTY3JlZW5CdWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciB2ZXJ0ZXhC
dWZmZXIgPSB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAgIGlm
ICh2ZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5kaXNwb3NlKCk7Cisg
ICAgICAgICAgICBkZWxldGUgdGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pbmRleEJ1ZmZlcikgeworICAgICAgICAgICAg
dGhpcy5lbmdpbmUuX3JlbGVhc2VCdWZmZXIodGhpcy5faW5kZXhCdWZmZXIpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvLyBGdWxsc2NyZWVuIHF1YWQgYnVmZmVycyBieSBkZWZhdWx0LgorICAg
IEVmZmVjdFJlbmRlcmVyLl9EZWZhdWx0T3B0aW9ucyA9IHsKKyAgICAgICAgcG9zaXRpb25zOiBb
MSwgMSwgLTEsIDEsIC0xLCAtMSwgMSwgLTFdLAorICAgICAgICBpbmRpY2VzOiBbMCwgMSwgMiwg
MCwgMiwgM10KKyAgICB9OworICAgIHJldHVybiBFZmZlY3RSZW5kZXJlcjsKK30oKSk7CisKKy8q
KgorICogV3JhcHMgYW4gZWZmZWN0IHRvIGJlIHVzZWQgZm9yIHJlbmRlcmluZworICovCit2YXIg
RWZmZWN0V3JhcHBlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGFuIGVmZmVjdCB0byBiZSByZW5kZXJlcgorICAgICAqIEBwYXJhbSBjcmVh
dGlvbk9wdGlvbnMgb3B0aW9ucyB0byBjcmVhdGUgdGhlIGVmZmVjdAorICAgICAqLworICAgIGZ1
bmN0aW9uIEVmZmVjdFdyYXBwZXIoY3JlYXRpb25PcHRpb25zKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBFdmVudCB0aGF0IGlzIGZpcmVkIHJp
Z2h0IGJlZm9yZSB0aGUgZWZmZWN0IGlzIGRyYXduIChzaG91bGQgYmUgdXNlZCB0byB1cGRhdGUg
dW5pZm9ybXMpCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uQXBwbHlPYnNlcnZhYmxlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgICAgIHZhciBlZmZlY3RDcmVhdGlvbk9wdGlvbnM7CisgICAgICAgIHZh
ciB1bmlmb3JtTmFtZXMgPSBjcmVhdGlvbk9wdGlvbnMudW5pZm9ybU5hbWVzIHx8IFtdOworICAg
ICAgICBpZiAoY3JlYXRpb25PcHRpb25zLnZlcnRleFNoYWRlcikgeworICAgICAgICAgICAgZWZm
ZWN0Q3JlYXRpb25PcHRpb25zID0geworICAgICAgICAgICAgICAgIGZyYWdtZW50U291cmNlOiBj
cmVhdGlvbk9wdGlvbnMuZnJhZ21lbnRTaGFkZXIsCisgICAgICAgICAgICAgICAgdmVydGV4U291
cmNlOiBjcmVhdGlvbk9wdGlvbnMudmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgIHNwZWN0
b3JOYW1lOiBjcmVhdGlvbk9wdGlvbnMubmFtZSB8fCAiZWZmZWN0V3JhcHBlciIKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBEZWZhdWx0
IHNjYWxlIHRvIHVzZSBpbiBwb3N0IHByb2Nlc3MgdmVydGV4IHNoYWRlci4KKyAgICAgICAgICAg
IHVuaWZvcm1OYW1lcy5wdXNoKCJzY2FsZSIpOworICAgICAgICAgICAgZWZmZWN0Q3JlYXRpb25P
cHRpb25zID0geworICAgICAgICAgICAgICAgIGZyYWdtZW50U291cmNlOiBjcmVhdGlvbk9wdGlv
bnMuZnJhZ21lbnRTaGFkZXIsCisgICAgICAgICAgICAgICAgdmVydGV4OiAicG9zdHByb2Nlc3Mi
LAorICAgICAgICAgICAgICAgIHNwZWN0b3JOYW1lOiBjcmVhdGlvbk9wdGlvbnMubmFtZSB8fCAi
ZWZmZWN0V3JhcHBlciIKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAvLyBTZXRzIHRoZSBk
ZWZhdWx0IHNjYWxlIHRvIGlkZW50aXR5IGZvciB0aGUgcG9zdCBwcm9jZXNzIHZlcnRleCBzaGFk
ZXIuCisgICAgICAgICAgICB0aGlzLm9uQXBwbHlPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICAgICAgX3RoaXMuZWZmZWN0LnNldEZsb2F0Migic2NhbGUiLCAxLCAxKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHRoaXMuZWZmZWN0ID0gbmV3IF9l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRWZmZWN0Il0oZWZmZWN0Q3JlYXRp
b25PcHRpb25zLCBjcmVhdGlvbk9wdGlvbnMuYXR0cmlidXRlTmFtZXMgfHwgWyJwb3NpdGlvbiJd
LCB1bmlmb3JtTmFtZXMsIGNyZWF0aW9uT3B0aW9ucy5zYW1wbGVyTmFtZXMsIGNyZWF0aW9uT3B0
aW9ucy5lbmdpbmUpOworICAgIH0KKyAgICAvKioKKyAgICAqIERpc3Bvc2VzIG9mIHRoZSBlZmZl
Y3Qgd3JhcHBlcgorICAgICovCisgICAgRWZmZWN0V3JhcHBlci5wcm90b3R5cGUuZGlzcG9zZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5lZmZlY3QuZGlzcG9zZSgpOworICAgIH07Cisg
ICAgcmV0dXJuIEVmZmVjdFdyYXBwZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL01hdGVyaWFscy9mcmVzbmVsUGFyYW1ldGVycy50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvZnJlc25lbFBh
cmFtZXRlcnMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBGcmVzbmVsUGFyYW1ldGVycyAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVzbmVsUGFyYW1ldGVycyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gRnJlc25lbFBhcmFtZXRlcnM7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGVlcENvcGllciAqLyAiLi9NaXNjL2RlZXBDb3Bp
ZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVz
L2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIu
L0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisKKworCisKKworLyoqCisgKiBUaGlzIHJlcHJlc2Vu
dHMgYWxsIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiB0byBhZGQgYSBmcmVzbmVsIGVmZmVjdCBv
biBhIG1hdGVyaWFsOgorICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hv
d190b191c2VfZnJlc25lbHBhcmFtZXRlcnMKKyAqLwordmFyIEZyZXNuZWxQYXJhbWV0ZXJzID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEZyZXNuZWxQYXJhbWV0
ZXJzKCkgeworICAgICAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lIHRoZSBjb2xvciB1c2VkIG9uIGVkZ2VzIChncmF6aW5nIGFuZ2xlKQor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5sZWZ0Q29sb3IgPSBfTWF0aHNfbWF0aF9jb2xvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjMiXS5XaGl0ZSgpOworICAgICAgICAv
KioKKyAgICAgICAgICogRGVmaW5lIHRoZSBjb2xvciB1c2VkIG9uIGNlbnRlcgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5yaWdodENvbG9yID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3IzIl0uQmxhY2soKTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIERlZmluZSBiaWFzIGFwcGxpZWQgdG8gY29tcHV0ZWQgZnJlc25lbCB0ZXJtCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLmJpYXMgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICog
RGVmaW5lZCB0aGUgcG93ZXIgZXhwb25lbnQgYXBwbGllZCB0byBmcmVzbmVsIHRlcm0KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMucG93ZXIgPSAxOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoRnJlc25lbFBhcmFtZXRlcnMucHJvdG90eXBlLCAiaXNFbmFibGVkIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGlmIHRoZSBmcmVzbmVsIGVmZmVjdCBpcyBlbmFi
bGUgb3Igbm90LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5faXNFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2lzRW5hYmxlZCA9PT0g
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl9pc0VuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmUiXS5NYXJrQWxsTWF0ZXJpYWxz
QXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
Q29uc3RhbnRzIl0uTUFURVJJQUxfRnJlc25lbERpcnR5RmxhZyB8IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9NaXNj
RGlydHlGbGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQ2xvbmVzIHRo
ZSBjdXJyZW50IGZyZXNuZWwgYW5kIGl0cyB2YWx1dWVzCisgICAgICogQHJldHVybnMgYSBjbG9u
ZSBmcmVzbmVsIGNvbmZpZ3VyYXRpb24KKyAgICAgKi8KKyAgICBGcmVzbmVsUGFyYW1ldGVycy5w
cm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBuZXdGcmVzbmVsUGFy
YW1ldGVycyA9IG5ldyBGcmVzbmVsUGFyYW1ldGVycygpOworICAgICAgICBfTWlzY19kZWVwQ29w
aWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRlZXBDb3BpZXIiXS5EZWVwQ29weSh0
aGlzLCBuZXdGcmVzbmVsUGFyYW1ldGVycyk7CisgICAgICAgIHJldHVybiBuZXdGcmVzbmVsUGFy
YW1ldGVyczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGN1cnJlbnQg
ZnJlc25lbCBwYXJhbWV0ZXJzIHRvIGEgSlNPTiByZXByZXNlbnRhdGlvbi4KKyAgICAgKiBAcmV0
dXJuIHRoZSBKU09OIHNlcmlhbGl6YXRpb24KKyAgICAgKi8KKyAgICBGcmVzbmVsUGFyYW1ldGVy
cy5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFs
aXphdGlvbk9iamVjdCA9IHt9OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmlzRW5hYmxl
ZCA9IHRoaXMuaXNFbmFibGVkOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmxlZnRDb2xv
ciA9IHRoaXMubGVmdENvbG9yLmFzQXJyYXkoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC5yaWdodENvbG9yID0gdGhpcy5yaWdodENvbG9yLmFzQXJyYXkoKTsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5iaWFzID0gdGhpcy5iaWFzOworICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LnBvd2VyID0gdGhpcy5wb3dlcjsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmpl
Y3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQYXJzZSBhIEpTT04gb2JqZWN0IGFuZCBkZXNl
cmlhbGl6ZSBpdCB0byBhIG5ldyBGcmVzbmVsIHBhcmFtZXRlciBvYmplY3QuCisgICAgICogQHBh
cmFtIHBhcnNlZEZyZXNuZWxQYXJhbWV0ZXJzIERlZmluZSB0aGUgSlNPTiByZXByZXNlbnRhdGlv
bgorICAgICAqIEByZXR1cm5zIHRoZSBwYXJzZWQgcGFyYW1ldGVycworICAgICAqLworICAgIEZy
ZXNuZWxQYXJhbWV0ZXJzLlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZEZyZXNuZWxQYXJhbWV0ZXJz
KSB7CisgICAgICAgIHZhciBmcmVzbmVsUGFyYW1ldGVycyA9IG5ldyBGcmVzbmVsUGFyYW1ldGVy
cygpOworICAgICAgICBmcmVzbmVsUGFyYW1ldGVycy5pc0VuYWJsZWQgPSBwYXJzZWRGcmVzbmVs
UGFyYW1ldGVycy5pc0VuYWJsZWQ7CisgICAgICAgIGZyZXNuZWxQYXJhbWV0ZXJzLmxlZnRDb2xv
ciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9y
MyJdLkZyb21BcnJheShwYXJzZWRGcmVzbmVsUGFyYW1ldGVycy5sZWZ0Q29sb3IpOworICAgICAg
ICBmcmVzbmVsUGFyYW1ldGVycy5yaWdodENvbG9yID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3IzIl0uRnJvbUFycmF5KHBhcnNlZEZyZXNuZWxQ
YXJhbWV0ZXJzLnJpZ2h0Q29sb3IpOworICAgICAgICBmcmVzbmVsUGFyYW1ldGVycy5iaWFzID0g
cGFyc2VkRnJlc25lbFBhcmFtZXRlcnMuYmlhczsKKyAgICAgICAgZnJlc25lbFBhcmFtZXRlcnMu
cG93ZXIgPSBwYXJzZWRGcmVzbmVsUGFyYW1ldGVycy5wb3dlciB8fCAxLjA7CisgICAgICAgIHJl
dHVybiBmcmVzbmVsUGFyYW1ldGVyczsKKyAgICB9OworICAgIHJldHVybiBGcmVzbmVsUGFyYW1l
dGVyczsKK30oKSk7CisKKy8vIFJlZmVyZW5jZXMgdGhlIGRlcGVuZGVuY2llcy4KK19NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2VyaWFsaXphdGlvbkhlbHBl
ciJdLl9GcmVzbmVsUGFyYW1ldGVyc1BhcnNlciA9IEZyZXNuZWxQYXJhbWV0ZXJzLlBhcnNlOwor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvaW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGVyaWFscy9pbWFnZVByb2Nlc3NpbmdDb25maWd1
cmF0aW9uLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBJbWFnZVByb2Nlc3NpbmdDb25m
aWd1cmF0aW9uRGVmaW5lcywgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
RGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bkRlZmluZXM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbjsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVs
ZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJs
ZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xzLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4v
TWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlh
bHNfbWF0ZXJpYWxEZWZpbmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvbWF0ZXJpYWxEZWZpbmVzICovICIuL01hdGVy
aWFscy9tYXRlcmlhbERlZmluZXMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX2NvbG9yQ3VydmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvY29sb3JDdXJ2ZXMgKi8gIi4vTWF0ZXJpYWxz
L2NvbG9yQ3VydmVzLnRzIik7CisKKworCisKKworCisKKy8qKgorICogQGhpZGRlbgorICovCit2
YXIgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19leHRlbmRzIl0oSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMsIF9zdXBl
cik7CisgICAgZnVuY3Rpb24gSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMoKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CisgICAgICAg
IF90aGlzLklNQUdFUFJPQ0VTU0lORyA9IGZhbHNlOworICAgICAgICBfdGhpcy5WSUdORVRURSA9
IGZhbHNlOworICAgICAgICBfdGhpcy5WSUdORVRURUJMRU5ETU9ERU1VTFRJUExZID0gZmFsc2U7
CisgICAgICAgIF90aGlzLlZJR05FVFRFQkxFTkRNT0RFT1BBUVVFID0gZmFsc2U7CisgICAgICAg
IF90aGlzLlRPTkVNQVBQSU5HID0gZmFsc2U7CisgICAgICAgIF90aGlzLlRPTkVNQVBQSU5HX0FD
RVMgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ09OVFJBU1QgPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuQ09MT1JDVVJWRVMgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQ09MT1JHUkFESU5HID0gZmFs
c2U7CisgICAgICAgIF90aGlzLkNPTE9SR1JBRElORzNEID0gZmFsc2U7CisgICAgICAgIF90aGlz
LlNBTVBMRVIzREdSRUVOREVQVEggPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuU0FNUExFUjNEQkdS
TUFQID0gZmFsc2U7CisgICAgICAgIF90aGlzLklNQUdFUFJPQ0VTU0lOR1BPU1RQUk9DRVNTID0g
ZmFsc2U7CisgICAgICAgIF90aGlzLkVYUE9TVVJFID0gZmFsc2U7CisgICAgICAgIF90aGlzLnJl
YnVpbGQoKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICByZXR1cm4gSW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXM7Cit9KF9NYXRlcmlhbHNfbWF0ZXJpYWxEZWZp
bmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1hdGVyaWFsRGVmaW5lcyJdKSk7CisK
Ky8qKgorICogVGhpcyBncm91cHMgdG9nZXRoZXIgdGhlIGNvbW1vbiBwcm9wZXJ0aWVzIHVzZWQg
Zm9yIGltYWdlIHByb2Nlc3NpbmcgZWl0aGVyIGluIGRpcmVjdCBmb3J3YXJkIHBhc3MKKyAqIG9y
IHRocm91Z2ggcG9zdCBwcm9jZXNzaW5nIGVmZmVjdCBkZXBlbmRpbmcgb24gdGhlIHVzZSBvZiB0
aGUgaW1hZ2UgcHJvY2Vzc2luZyBwaXBlbGluZSBpbiB5b3VyIHNjZW5lCisgKiBvciBub3QuCisg
Ki8KK3ZhciBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24oKSB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBDb2xvciBjdXJ2ZXMgc2V0dXAgdXNlZCBpbiB0aGUg
ZWZmZWN0IGlmIGNvbG9yQ3VydmVzRW5hYmxlZCBpcyBzZXQgdG8gdHJ1ZQorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5jb2xvckN1cnZlcyA9IG5ldyBfTWF0ZXJpYWxzX2NvbG9yQ3VydmVzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbG9yQ3VydmVzIl0oKTsKKyAgICAgICAgdGhp
cy5fY29sb3JDdXJ2ZXNFbmFibGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NvbG9yR3JhZGlu
Z0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY29sb3JHcmFkaW5nV2l0aEdyZWVuRGVw
dGggPSB0cnVlOworICAgICAgICB0aGlzLl9jb2xvckdyYWRpbmdCR1IgPSB0cnVlOworICAgICAg
ICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9leHBvc3VyZSA9IDEuMDsKKyAgICAgICAg
dGhpcy5fdG9uZU1hcHBpbmdFbmFibGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3RvbmVNYXBw
aW5nVHlwZSA9IEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uVE9ORU1BUFBJTkdfU1RBTkRB
UkQ7CisgICAgICAgIHRoaXMuX2NvbnRyYXN0ID0gMS4wOworICAgICAgICAvKioKKyAgICAgICAg
ICogVmlnbmV0dGUgc3RyZXRjaCBzaXplLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy52aWdu
ZXR0ZVN0cmV0Y2ggPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogVmlnbmV0dGUgY2VudHJl
IFggT2Zmc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy52aWduZXR0ZUNlbnRyZVggPSAw
OworICAgICAgICAvKioKKyAgICAgICAgICogVmlnbmV0dGUgY2VudHJlIFkgT2Zmc2V0LgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy52aWduZXR0ZUNlbnRyZVkgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogVmlnbmV0dGUgd2VpZ2h0IG9yIGludGVuc2l0eSBvZiB0aGUgdmlnbmV0dGUg
ZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy52aWduZXR0ZVdlaWdodCA9IDEuNTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIENvbG9yIG9mIHRoZSB2aWduZXR0ZSBhcHBsaWVkIG9u
IHRoZSBzY3JlZW4gdGhyb3VnaCB0aGUgY2hvc2VuIGJsZW5kIG1vZGUgKHZpZ25ldHRlQmxlbmRN
b2RlKQorICAgICAgICAgKiBpZiB2aWduZXR0ZUVuYWJsZWQgaXMgc2V0IHRvIHRydWUuCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnZpZ25ldHRlQ29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29sb3I0Il0oMCwgMCwgMCwgMCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBDYW1lcmEgZmllbGQgb2YgdmlldyB1c2VkIGJ5IHRoZSBW
aWduZXR0ZSBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZpZ25ldHRlQ2FtZXJh
Rm92ID0gMC41OworICAgICAgICB0aGlzLl92aWduZXR0ZUJsZW5kTW9kZSA9IEltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24uVklHTkVUVEVNT0RFX01VTFRJUExZOworICAgICAgICB0aGlzLl92
aWduZXR0ZUVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fYXBwbHlCeVBvc3RQcm9jZXNz
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWU7CisgICAgICAgIC8qKgor
ICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGNoYW5n
ZXMgYW5kIHJlcXVpcmVzIFNoYWRlciB0byBVcGRhdGUgc29tZSBwYXJhbWV0ZXJzLgorICAgICAg
ICAqLworICAgICAgICB0aGlzLm9uVXBkYXRlUGFyYW1ldGVycyA9IG5ldyBfTWlzY19vYnNlcnZh
YmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgpOworICAgIH0K
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5w
cm90b3R5cGUsICJjb2xvckN1cnZlc0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHdldGhlciB0aGUgY29sb3IgY3VydmVzIGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fY29sb3JDdXJ2ZXNFbmFibGVkOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAg
ICogU2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGN1cnZlcyBlZmZlY3QgaXMgZW5hYmxlZC4KKyAgICAg
ICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fY29sb3JDdXJ2ZXNFbmFibGVkID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2NvbG9yQ3VydmVzRW5hYmxl
ZCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFyYW1ldGVycygpOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUsICJjb2xvckdyYWRpbmdUZXh0dXJlIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogQ29sb3IgZ3JhZGluZyBMVVQgdGV4dHVyZSB1c2VkIGluIHRoZSBlZmZl
Y3QgaWYgY29sb3JHcmFkaW5nRW5hYmxlZCBpcyBzZXQgdG8gdHJ1ZQorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29sb3JH
cmFkaW5nVGV4dHVyZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbG9y
IGdyYWRpbmcgTFVUIHRleHR1cmUgdXNlZCBpbiB0aGUgZWZmZWN0IGlmIGNvbG9yR3JhZGluZ0Vu
YWJsZWQgaXMgc2V0IHRvIHRydWUKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fY29sb3JHcmFkaW5nVGV4dHVyZSA9PT0g
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl9jb2xvckdyYWRpbmdUZXh0dXJlID0gdmFsdWU7CisgICAgICAgICAgICB0aGlz
Ll91cGRhdGVQYXJhbWV0ZXJzKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgImNvbG9y
R3JhZGluZ0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdldGhlciB0
aGUgY29sb3IgZ3JhZGluZyBlZmZlY3QgaXMgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yR3JhZGlu
Z0VuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHdldGhl
ciB0aGUgY29sb3IgZ3JhZGluZyBlZmZlY3QgaXMgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fY29sb3JH
cmFkaW5nRW5hYmxlZCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9jb2xvckdyYWRpbmdFbmFibGVkID0gdmFsdWU7
CisgICAgICAgICAgICB0aGlzLl91cGRhdGVQYXJhbWV0ZXJzKCk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
LnByb3RvdHlwZSwgImNvbG9yR3JhZGluZ1dpdGhHcmVlbkRlcHRoIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGdyYWRpbmcgZWZmZWN0IGlzIHVzaW5n
IGEgZ3JlZW4gZGVwdGggZm9yIHRoZSAzZCBUZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29sb3JHcmFkaW5n
V2l0aEdyZWVuRGVwdGg7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRz
IHdldGhlciB0aGUgY29sb3IgZ3JhZGluZyBlZmZlY3QgaXMgdXNpbmcgYSBncmVlbiBkZXB0aCBm
b3IgdGhlIDNkIFRleHR1cmUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2NvbG9yR3JhZGluZ1dpdGhHcmVlbkRlcHRo
ID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX2NvbG9yR3JhZGluZ1dpdGhHcmVlbkRlcHRoID0gdmFsdWU7CisgICAg
ICAgICAgICB0aGlzLl91cGRhdGVQYXJhbWV0ZXJzKCk7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3Rv
dHlwZSwgImNvbG9yR3JhZGluZ0JHUiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
d2V0aGVyIHRoZSBjb2xvciBncmFkaW5nIHRleHR1cmUgY29udGFpbnMgQkdSIHZhbHVlcy4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2NvbG9yR3JhZGluZ0JHUjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFNldHMgd2V0aGVyIHRoZSBjb2xvciBncmFkaW5nIHRleHR1cmUgY29udGFpbnMgQkdSIHZh
bHVlcy4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5fY29sb3JHcmFkaW5nQkdSID09PSB2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2NvbG9yR3Jh
ZGluZ0JHUiA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFyYW1ldGVycygpOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNz
aW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJleHBvc3VyZSIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIEV4cG9zdXJlIHVzZWQgaW4gdGhlIGVmZmVjdC4KKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2V4cG9zdXJlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUg
RXhwb3N1cmUgdXNlZCBpbiB0aGUgZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9leHBvc3VyZSA9PT0gdmFs
dWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0aGlzLl9leHBvc3VyZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFyYW1l
dGVycygpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ0b25lTWFwcGluZ0VuYWJsZWQi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdldGhlciB0aGUgdG9uZSBtYXBwaW5n
IGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9uZU1hcHBpbmdFbmFibGVkOworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3ZXRoZXIgdGhlIHRvbmUgbWFwcGlu
ZyBlZmZlY3QgaXMgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdG9uZU1hcHBpbmdFbmFibGVkID09PSB2
YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX3RvbmVNYXBwaW5nRW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5f
dXBkYXRlUGFyYW1ldGVycygpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ0b25lTWFw
cGluZ1R5cGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB0eXBlIG9mIHRv
bmUgbWFwcGluZyBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90b25lTWFwcGluZ1R5cGU7CisgICAgICAgIH0s
CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB0eXBlIG9mIHRvbmUgbWFwcGluZyBl
ZmZlY3QgdXNlZCBpbiBCYWJ5bG9uSlMuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RvbmVNYXBwaW5nVHlwZSA9PT0g
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl90b25lTWFwcGluZ1R5cGUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX3Vw
ZGF0ZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiY29udHJhc3Qi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjb250cmFzdCB1c2VkIGluIHRo
ZSBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9jb250cmFzdDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNldHMgdGhlIGNvbnRyYXN0IHVzZWQgaW4gdGhlIGVmZmVjdC4KKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhp
cy5fY29udHJhc3QgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY29udHJhc3QgPSB2YWx1ZTsKKyAgICAgICAgICAg
IHRoaXMuX3VwZGF0ZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAi
dmlnbmV0dGVCbGVuZE1vZGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2
aWduZXR0ZSBibGVuZCBtb2RlIGFsbG93aW5nIGRpZmZlcmVudCBraW5kIG9mIGVmZmVjdC4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3ZpZ25ldHRlQmxlbmRNb2RlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAg
ICAgICogU2V0cyB0aGUgdmlnbmV0dGUgYmxlbmQgbW9kZSBhbGxvd2luZyBkaWZmZXJlbnQga2lu
ZCBvZiBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgaWYgKHRoaXMuX3ZpZ25ldHRlQmxlbmRNb2RlID09PSB2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X3ZpZ25ldHRlQmxlbmRNb2RlID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVQYXJh
bWV0ZXJzKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJ
bWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgInZpZ25ldHRlRW5hYmxlZCIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0aGVyIHRoZSB2aWduZXR0ZSBlZmZl
Y3QgaXMgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZpZ25ldHRlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFNldHMgd2V0aGVyIHRoZSB2aWduZXR0ZSBlZmZlY3QgaXMg
ZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fdmlnbmV0dGVFbmFibGVkID09PSB2YWx1ZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3ZpZ25l
dHRlRW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFyYW1ldGVycygp
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJhcHBseUJ5UG9zdFByb2Nlc3MiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdldGhlciB0aGUgaW1hZ2UgcHJvY2Vzc2luZyBp
cyBhcHBsaWVkIHRocm91Z2ggYSBwb3N0IHByb2Nlc3Mgb3Igbm90LgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlC
eVBvc3RQcm9jZXNzOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3
ZXRoZXIgdGhlIGltYWdlIHByb2Nlc3NpbmcgaXMgYXBwbGllZCB0aHJvdWdoIGEgcG9zdCBwcm9j
ZXNzIG9yIG5vdC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fYXBwbHlCeVBvc3RQcm9jZXNzID09PSB2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X2FwcGx5QnlQb3N0UHJvY2VzcyA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFy
YW1ldGVycygpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
SW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJpc0VuYWJsZWQiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdldGhlciB0aGUgaW1hZ2UgcHJvY2Vzc2luZyBp
cyBlbmFibGVkIG9yIG5vdC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNldHMgd2V0aGVyIHRoZSBpbWFnZSBwcm9jZXNzaW5nIGlzIGVu
YWJsZWQgb3Igbm90LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc0VuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5faXNFbmFi
bGVkID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVQYXJhbWV0ZXJzKCk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIE1ldGhvZCBjYWxsZWQgZWFjaCB0aW1lIHRo
ZSBpbWFnZSBwcm9jZXNzaW5nIGluZm9ybWF0aW9uIGNoYW5nZXMgcmVxdWlyZXMgdG8gcmVjb21w
aWxlIHRoZSBlZmZlY3QuCisgICAgICovCisgICAgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bi5wcm90b3R5cGUuX3VwZGF0ZVBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMub25VcGRhdGVQYXJhbWV0ZXJzLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZS4KKyAgICAgKiBAcmV0dXJu
ICJJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIgorICAgICAqLworICAgIEltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuICJJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIjsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFByZXBhcmUgdGhlIGxpc3Qgb2YgdW5pZm9ybXMgYXNzb2NpYXRlZCB3
aXRoIHRoZSBJbWFnZSBQcm9jZXNzaW5nIGVmZmVjdHMuCisgICAgICogQHBhcmFtIHVuaWZvcm1z
IFRoZSBsaXN0IG9mIHVuaWZvcm1zIHVzZWQgaW4gdGhlIGVmZmVjdAorICAgICAqIEBwYXJhbSBk
ZWZpbmVzIHRoZSBsaXN0IG9mIGRlZmluZXMgY3VycmVudGx5IGluIHVzZQorICAgICAqLworICAg
IEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uUHJlcGFyZVVuaWZvcm1zID0gZnVuY3Rpb24g
KHVuaWZvcm1zLCBkZWZpbmVzKSB7CisgICAgICAgIGlmIChkZWZpbmVzLkVYUE9TVVJFKSB7Cisg
ICAgICAgICAgICB1bmlmb3Jtcy5wdXNoKCJleHBvc3VyZUxpbmVhciIpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChkZWZpbmVzLkNPTlRSQVNUKSB7CisgICAgICAgICAgICB1bmlmb3Jtcy5wdXNo
KCJjb250cmFzdCIpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLkNPTE9SR1JBRElO
RykgeworICAgICAgICAgICAgdW5pZm9ybXMucHVzaCgiY29sb3JUcmFuc2Zvcm1TZXR0aW5ncyIp
OworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLlZJR05FVFRFKSB7CisgICAgICAgICAg
ICB1bmlmb3Jtcy5wdXNoKCJ2SW52ZXJzZVNjcmVlblNpemUiKTsKKyAgICAgICAgICAgIHVuaWZv
cm1zLnB1c2goInZpZ25ldHRlU2V0dGluZ3MxIik7CisgICAgICAgICAgICB1bmlmb3Jtcy5wdXNo
KCJ2aWduZXR0ZVNldHRpbmdzMiIpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLkNP
TE9SQ1VSVkVTKSB7CisgICAgICAgICAgICBfTWF0ZXJpYWxzX2NvbG9yQ3VydmVzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X19bIkNvbG9yQ3VydmVzIl0uUHJlcGFyZVVuaWZvcm1zKHVuaWZv
cm1zKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUHJlcGFyZSB0aGUgbGlz
dCBvZiBzYW1wbGVycyBhc3NvY2lhdGVkIHdpdGggdGhlIEltYWdlIFByb2Nlc3NpbmcgZWZmZWN0
cy4KKyAgICAgKiBAcGFyYW0gc2FtcGxlcnNMaXN0IFRoZSBsaXN0IG9mIHVuaWZvcm1zIHVzZWQg
aW4gdGhlIGVmZmVjdAorICAgICAqIEBwYXJhbSBkZWZpbmVzIHRoZSBsaXN0IG9mIGRlZmluZXMg
Y3VycmVudGx5IGluIHVzZQorICAgICAqLworICAgIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRp
b24uUHJlcGFyZVNhbXBsZXJzID0gZnVuY3Rpb24gKHNhbXBsZXJzTGlzdCwgZGVmaW5lcykgewor
ICAgICAgICBpZiAoZGVmaW5lcy5DT0xPUkdSQURJTkcpIHsKKyAgICAgICAgICAgIHNhbXBsZXJz
TGlzdC5wdXNoKCJ0eENvbG9yVHJhbnNmb3JtIik7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIFByZXBhcmUgdGhlIGxpc3Qgb2YgZGVmaW5lcyBhc3NvY2lhdGVkIHRvIHRoZSBz
aGFkZXIuCisgICAgICogQHBhcmFtIGRlZmluZXMgdGhlIGxpc3Qgb2YgZGVmaW5lcyB0byBjb21w
bGV0ZQorICAgICAqIEBwYXJhbSBmb3JQb3N0UHJvY2VzcyBEZWZpbmUgaWYgd2UgYXJlIGN1cnJl
bnRseSBpbiBwb3N0IHByb2Nlc3MgbW9kZSBvciBub3QKKyAgICAgKi8KKyAgICBJbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZS5wcmVwYXJlRGVmaW5lcyA9IGZ1bmN0aW9uIChk
ZWZpbmVzLCBmb3JQb3N0UHJvY2VzcykgeworICAgICAgICBpZiAoZm9yUG9zdFByb2Nlc3MgPT09
IHZvaWQgMCkgeyBmb3JQb3N0UHJvY2VzcyA9IGZhbHNlOyB9CisgICAgICAgIGlmIChmb3JQb3N0
UHJvY2VzcyAhPT0gdGhpcy5hcHBseUJ5UG9zdFByb2Nlc3MgfHwgIXRoaXMuX2lzRW5hYmxlZCkg
eworICAgICAgICAgICAgZGVmaW5lcy5WSUdORVRURSA9IGZhbHNlOworICAgICAgICAgICAgZGVm
aW5lcy5UT05FTUFQUElORyA9IGZhbHNlOworICAgICAgICAgICAgZGVmaW5lcy5UT05FTUFQUElO
R19BQ0VTID0gZmFsc2U7CisgICAgICAgICAgICBkZWZpbmVzLkNPTlRSQVNUID0gZmFsc2U7Cisg
ICAgICAgICAgICBkZWZpbmVzLkVYUE9TVVJFID0gZmFsc2U7CisgICAgICAgICAgICBkZWZpbmVz
LkNPTE9SQ1VSVkVTID0gZmFsc2U7CisgICAgICAgICAgICBkZWZpbmVzLkNPTE9SR1JBRElORyA9
IGZhbHNlOworICAgICAgICAgICAgZGVmaW5lcy5DT0xPUkdSQURJTkczRCA9IGZhbHNlOworICAg
ICAgICAgICAgZGVmaW5lcy5JTUFHRVBST0NFU1NJTkcgPSBmYWxzZTsKKyAgICAgICAgICAgIGRl
ZmluZXMuSU1BR0VQUk9DRVNTSU5HUE9TVFBST0NFU1MgPSB0aGlzLmFwcGx5QnlQb3N0UHJvY2Vz
cyAmJiB0aGlzLl9pc0VuYWJsZWQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgZGVmaW5lcy5WSUdORVRURSA9IHRoaXMudmlnbmV0dGVFbmFibGVkOworICAgICAgICBk
ZWZpbmVzLlZJR05FVFRFQkxFTkRNT0RFTVVMVElQTFkgPSAodGhpcy52aWduZXR0ZUJsZW5kTW9k
ZSA9PT0gSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5fVklHTkVUVEVNT0RFX01VTFRJUExZ
KTsKKyAgICAgICAgZGVmaW5lcy5WSUdORVRURUJMRU5ETU9ERU9QQVFVRSA9ICFkZWZpbmVzLlZJ
R05FVFRFQkxFTkRNT0RFTVVMVElQTFk7CisgICAgICAgIGRlZmluZXMuVE9ORU1BUFBJTkcgPSB0
aGlzLnRvbmVNYXBwaW5nRW5hYmxlZDsKKyAgICAgICAgc3dpdGNoICh0aGlzLl90b25lTWFwcGlu
Z1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5U
T05FTUFQUElOR19BQ0VTOgorICAgICAgICAgICAgICAgIGRlZmluZXMuVE9ORU1BUFBJTkdfQUNF
UyA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIGRlZmluZXMuVE9ORU1BUFBJTkdfQUNFUyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmluZXMuQ09OVFJBU1QgPSAo
dGhpcy5jb250cmFzdCAhPT0gMS4wKTsKKyAgICAgICAgZGVmaW5lcy5FWFBPU1VSRSA9ICh0aGlz
LmV4cG9zdXJlICE9PSAxLjApOworICAgICAgICBkZWZpbmVzLkNPTE9SQ1VSVkVTID0gKHRoaXMu
Y29sb3JDdXJ2ZXNFbmFibGVkICYmICEhdGhpcy5jb2xvckN1cnZlcyk7CisgICAgICAgIGRlZmlu
ZXMuQ09MT1JHUkFESU5HID0gKHRoaXMuY29sb3JHcmFkaW5nRW5hYmxlZCAmJiAhIXRoaXMuY29s
b3JHcmFkaW5nVGV4dHVyZSk7CisgICAgICAgIGlmIChkZWZpbmVzLkNPTE9SR1JBRElORykgewor
ICAgICAgICAgICAgZGVmaW5lcy5DT0xPUkdSQURJTkczRCA9IHRoaXMuY29sb3JHcmFkaW5nVGV4
dHVyZS5pczNEOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVmaW5l
cy5DT0xPUkdSQURJTkczRCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRlZmluZXMuU0FN
UExFUjNER1JFRU5ERVBUSCA9IHRoaXMuY29sb3JHcmFkaW5nV2l0aEdyZWVuRGVwdGg7CisgICAg
ICAgIGRlZmluZXMuU0FNUExFUjNEQkdSTUFQID0gdGhpcy5jb2xvckdyYWRpbmdCR1I7CisgICAg
ICAgIGRlZmluZXMuSU1BR0VQUk9DRVNTSU5HUE9TVFBST0NFU1MgPSB0aGlzLmFwcGx5QnlQb3N0
UHJvY2VzczsKKyAgICAgICAgZGVmaW5lcy5JTUFHRVBST0NFU1NJTkcgPSBkZWZpbmVzLlZJR05F
VFRFIHx8IGRlZmluZXMuVE9ORU1BUFBJTkcgfHwgZGVmaW5lcy5DT05UUkFTVCB8fCBkZWZpbmVz
LkVYUE9TVVJFIHx8IGRlZmluZXMuQ09MT1JDVVJWRVMgfHwgZGVmaW5lcy5DT0xPUkdSQURJTkc7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgYWxsIHRoZSBpbWFnZSBw
cm9jZXNzaW5nIGluZm9ybWF0aW9uIGFyZSByZWFkeS4KKyAgICAgKiBAcmV0dXJucyBUcnVlIGlm
IHJlYWR5LCBvdGhlcndpc2UsIGZhbHNlCisgICAgICovCisgICAgSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8g
Q29sb3IgR3JhZGluZyB0ZXh1cmUgY2FuIG5vdCBiZSBub25lIGJsb2NraW5nLgorICAgICAgICBy
ZXR1cm4gIXRoaXMuY29sb3JHcmFkaW5nRW5hYmxlZCB8fCAhdGhpcy5jb2xvckdyYWRpbmdUZXh0
dXJlIHx8IHRoaXMuY29sb3JHcmFkaW5nVGV4dHVyZS5pc1JlYWR5KCk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBCaW5kcyB0aGUgaW1hZ2UgcHJvY2Vzc2luZyB0byB0aGUgc2hhZGVyLgorICAg
ICAqIEBwYXJhbSBlZmZlY3QgVGhlIGVmZmVjdCB0byBiaW5kIHRvCisgICAgICogQHBhcmFtIGFz
cGVjdFJhdGlvIERlZmluZSB0aGUgY3VycmVudCBhc3BlY3QgcmF0aW8gb2YgdGhlIGVmZmVjdAor
ICAgICAqLworICAgIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmJpbmQg
PSBmdW5jdGlvbiAoZWZmZWN0LCBhc3BlY3RSYXRpbykgeworICAgICAgICBpZiAoYXNwZWN0UmF0
aW8gPT09IHZvaWQgMCkgeyBhc3BlY3RSYXRpbyA9IDE7IH0KKyAgICAgICAgLy8gQ29sb3IgQ3Vy
dmVzCisgICAgICAgIGlmICh0aGlzLl9jb2xvckN1cnZlc0VuYWJsZWQgJiYgdGhpcy5jb2xvckN1
cnZlcykgeworICAgICAgICAgICAgX01hdGVyaWFsc19jb2xvckN1cnZlc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fWyJDb2xvckN1cnZlcyJdLkJpbmQodGhpcy5jb2xvckN1cnZlcywgZWZm
ZWN0KTsKKyAgICAgICAgfQorICAgICAgICAvLyBWaWduZXR0ZQorICAgICAgICBpZiAodGhpcy5f
dmlnbmV0dGVFbmFibGVkKSB7CisgICAgICAgICAgICB2YXIgaW52ZXJzZVdpZHRoID0gMSAvIGVm
ZmVjdC5nZXRFbmdpbmUoKS5nZXRSZW5kZXJXaWR0aCgpOworICAgICAgICAgICAgdmFyIGludmVy
c2VIZWlnaHQgPSAxIC8gZWZmZWN0LmdldEVuZ2luZSgpLmdldFJlbmRlckhlaWdodCgpOworICAg
ICAgICAgICAgZWZmZWN0LnNldEZsb2F0MigidkludmVyc2VTY3JlZW5TaXplIiwgaW52ZXJzZVdp
ZHRoLCBpbnZlcnNlSGVpZ2h0KTsKKyAgICAgICAgICAgIHZhciB2aWduZXR0ZVNjYWxlWSA9IE1h
dGgudGFuKHRoaXMudmlnbmV0dGVDYW1lcmFGb3YgKiAwLjUpOworICAgICAgICAgICAgdmFyIHZp
Z25ldHRlU2NhbGVYID0gdmlnbmV0dGVTY2FsZVkgKiBhc3BlY3RSYXRpbzsKKyAgICAgICAgICAg
IHZhciB2aWduZXR0ZVNjYWxlR2VvbWV0cmljTWVhbiA9IE1hdGguc3FydCh2aWduZXR0ZVNjYWxl
WCAqIHZpZ25ldHRlU2NhbGVZKTsKKyAgICAgICAgICAgIHZpZ25ldHRlU2NhbGVYID0gX01pc2Nf
dG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG9vbHMiXS5NaXgodmlnbmV0dGVT
Y2FsZVgsIHZpZ25ldHRlU2NhbGVHZW9tZXRyaWNNZWFuLCB0aGlzLnZpZ25ldHRlU3RyZXRjaCk7
CisgICAgICAgICAgICB2aWduZXR0ZVNjYWxlWSA9IF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlRvb2xzIl0uTWl4KHZpZ25ldHRlU2NhbGVZLCB2aWduZXR0ZVNjYWxl
R2VvbWV0cmljTWVhbiwgdGhpcy52aWduZXR0ZVN0cmV0Y2gpOworICAgICAgICAgICAgZWZmZWN0
LnNldEZsb2F0NCgidmlnbmV0dGVTZXR0aW5nczEiLCB2aWduZXR0ZVNjYWxlWCwgdmlnbmV0dGVT
Y2FsZVksIC12aWduZXR0ZVNjYWxlWCAqIHRoaXMudmlnbmV0dGVDZW50cmVYLCAtdmlnbmV0dGVT
Y2FsZVkgKiB0aGlzLnZpZ25ldHRlQ2VudHJlWSk7CisgICAgICAgICAgICB2YXIgdmlnbmV0dGVQ
b3dlciA9IC0yLjAgKiB0aGlzLnZpZ25ldHRlV2VpZ2h0OworICAgICAgICAgICAgZWZmZWN0LnNl
dEZsb2F0NCgidmlnbmV0dGVTZXR0aW5nczIiLCB0aGlzLnZpZ25ldHRlQ29sb3IuciwgdGhpcy52
aWduZXR0ZUNvbG9yLmcsIHRoaXMudmlnbmV0dGVDb2xvci5iLCB2aWduZXR0ZVBvd2VyKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBFeHBvc3VyZQorICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImV4
cG9zdXJlTGluZWFyIiwgdGhpcy5leHBvc3VyZSk7CisgICAgICAgIC8vIENvbnRyYXN0CisgICAg
ICAgIGVmZmVjdC5zZXRGbG9hdCgiY29udHJhc3QiLCB0aGlzLmNvbnRyYXN0KTsKKyAgICAgICAg
Ly8gQ29sb3IgdHJhbnNmb3JtIHNldHRpbmdzCisgICAgICAgIGlmICh0aGlzLmNvbG9yR3JhZGlu
Z1RleHR1cmUpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJ0eENvbG9yVHJhbnNm
b3JtIiwgdGhpcy5jb2xvckdyYWRpbmdUZXh0dXJlKTsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJl
U2l6ZSA9IHRoaXMuY29sb3JHcmFkaW5nVGV4dHVyZS5nZXRTaXplKCkuaGVpZ2h0OworICAgICAg
ICAgICAgZWZmZWN0LnNldEZsb2F0NCgiY29sb3JUcmFuc2Zvcm1TZXR0aW5ncyIsICh0ZXh0dXJl
U2l6ZSAtIDEpIC8gdGV4dHVyZVNpemUsIC8vIHRleHR1cmVTY2FsZQorICAgICAgICAgICAgMC41
IC8gdGV4dHVyZVNpemUsIC8vIHRleHR1cmVPZmZzZXQKKyAgICAgICAgICAgIHRleHR1cmVTaXpl
LCAvLyB0ZXh0dXJlU2l6ZQorICAgICAgICAgICAgdGhpcy5jb2xvckdyYWRpbmdUZXh0dXJlLmxl
dmVsIC8vIHdlaWdodAorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogQ2xvbmVzIHRoZSBjdXJyZW50IGltYWdlIHByb2Nlc3NpbmcgaW5zdGFuY2UuCisg
ICAgICogQHJldHVybiBUaGUgY2xvbmVkIGltYWdlIHByb2Nlc3NpbmcKKyAgICAgKi8KKyAgICBJ
bWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkNsb25lKGZ1bmN0aW9uICgpIHsgcmV0dXJu
IG5ldyBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKCk7IH0sIHRoaXMpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgY3VycmVudCBpbWFnZSBwcm9jZXNzaW5nIGlu
c3RhbmNlIHRvIGEganNvbiByZXByZXNlbnRhdGlvbi4KKyAgICAgKiBAcmV0dXJuIGEgSlNPTiBy
ZXByZXNlbnRhdGlvbgorICAgICAqLworICAgIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24u
cHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhl
bHBlciJdLlNlcmlhbGl6ZSh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlcyB0
aGUgaW1hZ2UgcHJvY2Vzc2luZyBmcm9tIGEganNvbiByZXByZXNlbnRhdGlvbi4KKyAgICAgKiBA
cGFyYW0gc291cmNlIHRoZSBKU09OIHNvdXJjZSB0byBwYXJzZQorICAgICAqIEByZXR1cm4gVGhl
IHBhcnNlZCBpbWFnZSBwcm9jZXNzaW5nCisgICAgICovCisgICAgSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbi5QYXJzZSA9IGZ1bmN0aW9uIChzb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlv
bkhlbHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uKCk7IH0sIHNvdXJjZSwgbnVsbCwgbnVsbCk7CisgICAgfTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiwgIlZJR05FVFRF
TU9ERV9NVUxUSVBMWSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzZWQgdG8gYXBwbHkg
dGhlIHZpZ25ldHRlIGFzIGEgbWl4IHdpdGggdGhlIHBpeGVsIGNvbG9yLgorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fVklH
TkVUVEVNT0RFX01VTFRJUExZOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiwgIlZJR05FVFRFTU9ERV9PUEFR
VUUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVc2VkIHRvIGFwcGx5IHRoZSB2aWduZXR0
ZSBhcyBhIHJlcGxhY2VtZW50IG9mIHRoZSBwaXhlbCBjb2xvci4KKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX1ZJR05FVFRF
TU9ERV9PUEFRVUU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIERlZmF1bHQg
dG9uZSBtYXBwaW5nIGFwcGxpZWQgaW4gQmFieWxvbkpTLgorICAgICAqLworICAgIEltYWdlUHJv
Y2Vzc2luZ0NvbmZpZ3VyYXRpb24uVE9ORU1BUFBJTkdfU1RBTkRBUkQgPSAwOworICAgIC8qKgor
ICAgICAqIEFDRVMgVG9uZSBtYXBwaW5nICh1c2VkIGJ5IGRlZmF1bHQgaW4gdW5yZWFsIGFuZCB1
bml0eSkuIFRoaXMgY2FuIGhlbHAgZ2V0dGluZyBjbG9zZXIKKyAgICAgKiB0byBvdGhlciBlbmdp
bmVzIHJlbmRlcmluZyB0byBpbmNyZWFzZSBwb3J0YWJpbGl0eS4KKyAgICAgKi8KKyAgICBJbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLlRPTkVNQVBQSU5HX0FDRVMgPSAxOworICAgIC8vIFN0
YXRpYyBjb25zdGFudHMgYXNzb2NpYXRlZCB0byB0aGUgaW1hZ2UgcHJvY2Vzc2luZy4KKyAgICBJ
bWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLl9WSUdORVRURU1PREVfTVVMVElQTFkgPSAwOwor
ICAgIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uX1ZJR05FVFRFTU9ERV9PUEFRVUUgPSAx
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bInNlcmlhbGl6ZUFzQ29sb3JDdXJ2ZXMiXSkoKQorICAgIF0sIEltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiY29sb3JDdXJ2ZXMiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5
cGUsICJfY29sb3JDdXJ2ZXNFbmFibGVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1
cmUiXSkoImNvbG9yR3JhZGluZ1RleHR1cmUiKQorICAgIF0sIEltYWdlUHJvY2Vzc2luZ0NvbmZp
Z3VyYXRpb24ucHJvdG90eXBlLCAiX2NvbG9yR3JhZGluZ1RleHR1cmUiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90
b3R5cGUsICJfY29sb3JHcmFkaW5nRW5hYmxlZCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgIl9jb2xv
ckdyYWRpbmdXaXRoR3JlZW5EZXB0aCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAg
ICBdLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgIl9jb2xvckdyYWRp
bmdCR1IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNz
aW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJfZXhwb3N1cmUiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5
cGUsICJfdG9uZU1hcHBpbmdFbmFibGVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiX3RvbmVNYXBw
aW5nVHlwZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBJbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgIl9jb250cmFzdCIsIHZvaWQgMCk7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAg
ICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
c2VyaWFsaXplIl0pKCkKKyAgICBdLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3Rv
dHlwZSwgInZpZ25ldHRlU3RyZXRjaCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAg
ICBdLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgInZpZ25ldHRlQ2Vu
dHJlWCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBJbWFnZVByb2Nlc3Np
bmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgInZpZ25ldHRlQ2VudHJlWSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnBy
b3RvdHlwZSwgInZpZ25ldHRlV2VpZ2h0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0NvbG9y
NCJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICJ2
aWduZXR0ZUNvbG9yIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIEltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAidmlnbmV0dGVDYW1lcmFGb3YiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbi5wcm90b3R5cGUsICJfdmlnbmV0dGVCbGVuZE1vZGUiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcm90b3R5
cGUsICJfdmlnbmV0dGVFbmFibGVkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAiX2FwcGx5QnlQb3N0
UHJvY2VzcyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBJbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uLnByb3RvdHlwZSwgIl9pc0VuYWJsZWQiLCB2b2lkIDApOworICAg
IHJldHVybiBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uOworfSgpKTsKKworLy8gUmVmZXJl
bmNlcyB0aGUgZGVwZW5kZW5jaWVzLgorX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uX0ltYWdlUHJvY2Vzc2luZ0NvbmZp
Z3VyYXRpb25QYXJzZXIgPSBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLlBhcnNlOworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvaW5kZXgudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL2luZGV4LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
Q29sb3JDdXJ2ZXMsIEVmZmVjdEZhbGxiYWNrcywgRWZmZWN0Q3JlYXRpb25PcHRpb25zLCBFZmZl
Y3QsIEZyZXNuZWxQYXJhbWV0ZXJzLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uRGVmaW5l
cywgSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiwgTWF0ZXJpYWwsIE1hdGVyaWFsRGVmaW5l
cywgTWF0ZXJpYWxIZWxwZXIsIE11bHRpTWF0ZXJpYWwsIFB1c2hNYXRlcmlhbCwgU2hhZGVyTWF0
ZXJpYWwsIFN0YW5kYXJkTWF0ZXJpYWxEZWZpbmVzLCBTdGFuZGFyZE1hdGVyaWFsLCBCYXNlVGV4
dHVyZSwgQ3ViZVRleHR1cmUsIER5bmFtaWNUZXh0dXJlLCBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4
dHVyZSwgSERSQ3ViZVRleHR1cmUsIEludGVybmFsVGV4dHVyZSwgTWlycm9yVGV4dHVyZSwgTXVs
dGlSZW5kZXJUYXJnZXQsIFJhd1RleHR1cmUsIFJlbmRlclRhcmdldFRleHR1cmUsIFRleHR1cmUs
IFVuaWZvcm1CdWZmZXIsIE1hdGVyaWFsRmxhZ3MsIEVmZmVjdFJlbmRlcmVyLCBFZmZlY3RXcmFw
cGVyLCBCYWNrZ3JvdW5kTWF0ZXJpYWwsIFBCUk1hdGVyaWFsRGVmaW5lcywgUEJSQmFzZU1hdGVy
aWFsLCBQQlJCYXNlU2ltcGxlTWF0ZXJpYWwsIFBCUk1hdGVyaWFsLCBQQlJNZXRhbGxpY1JvdWdo
bmVzc01hdGVyaWFsLCBQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbCwgQ29sb3JHcmFkaW5n
VGV4dHVyZSwgUmF3Q3ViZVRleHR1cmUsIFJhd1RleHR1cmUzRCwgUmVmcmFjdGlvblRleHR1cmUs
IFZpZGVvVGV4dHVyZSwgSHRtbEVsZW1lbnRUZXh0dXJlLCBOb2RlTWF0ZXJpYWxCbG9ja1Rhcmdl
dHMsIE5vZGVNYXRlcmlhbEJsb2NrQ29ubmVjdGlvblBvaW50VHlwZXMsIE5vZGVNYXRlcmlhbENv
bm5lY3Rpb25Qb2ludCwgTm9kZU1hdGVyaWFsQmxvY2ssIE5vZGVNYXRlcmlhbERlZmluZXMsIE5v
ZGVNYXRlcmlhbCwgTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzLCBfRERTVGV4dHVyZUxvYWRlciwg
X0VOVlRleHR1cmVMb2FkZXIsIF9LVFhUZXh0dXJlTG9hZGVyLCBfVEdBVGV4dHVyZUxvYWRlciwg
X0Jhc2lzVGV4dHVyZUxvYWRlciwgQ3VzdG9tUHJvY2VkdXJhbFRleHR1cmUsIE5vaXNlUHJvY2Vk
dXJhbFRleHR1cmUsIFByb2NlZHVyYWxUZXh0dXJlLCBQcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29t
cG9uZW50LCBNdWx0aXBseUJsb2NrLCBBZGRCbG9jaywgU2NhbGVCbG9jaywgQ2xhbXBCbG9jaywg
Q3Jvc3NCbG9jaywgRG90QmxvY2ssIFRyYW5zZm9ybUJsb2NrLCBSZW1hcEJsb2NrLCBOb3JtYWxp
emVCbG9jaywgVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRpb25zLCBUcmlnb25vbWV0cnlCbG9jaywg
Q29sb3JNZXJnZXJCbG9jaywgVmVjdG9yTWVyZ2VyQmxvY2ssIENvbG9yU3BsaXR0ZXJCbG9jaywg
VmVjdG9yU3BsaXR0ZXJCbG9jaywgTGVycEJsb2NrLCBEaXZpZGVCbG9jaywgU3VidHJhY3RCbG9j
aywgU3RlcEJsb2NrLCBPcHBvc2l0ZUJsb2NrLCBWaWV3RGlyZWN0aW9uQmxvY2ssIEZyZXNuZWxC
bG9jaywgTWF4QmxvY2ssIE1pbkJsb2NrLCBOb2RlTWF0ZXJpYWxPcHRpbWl6ZXIsIFZlcnRleE91
dHB1dEJsb2NrLCBCb25lc0Jsb2NrLCBJbnN0YW5jZXNCbG9jaywgTW9ycGhUYXJnZXRzQmxvY2ss
IExpZ2h0SW5mb3JtYXRpb25CbG9jaywgRnJhZ21lbnRPdXRwdXRCbG9jaywgQWxwaGFUZXN0Qmxv
Y2ssIEltYWdlUHJvY2Vzc2luZ0Jsb2NrLCBQZXJ0dXJiTm9ybWFsQmxvY2ssIEZvZ0Jsb2NrLCBM
aWdodEJsb2NrLCBUZXh0dXJlQmxvY2ssIFJlZmxlY3Rpb25UZXh0dXJlQmxvY2ssIElucHV0Qmxv
Y2ssIEFuaW1hdGVkSW5wdXRCbG9ja1R5cGVzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfQmFja2dyb3VuZF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9CYWNrZ3JvdW5kL2luZGV4ICovICIu
L01hdGVyaWFscy9CYWNrZ3JvdW5kL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhY2tn
cm91bmRNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0JhY2tncm91bmRfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFja2dyb3VuZE1hdGVyaWFsIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbG9yQ3VydmVzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2NvbG9yQ3VydmVzICovICIuL01h
dGVyaWFscy9jb2xvckN1cnZlcy50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvckN1cnZlcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NvbG9yQ3VydmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkNvbG9yQ3VydmVzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJFZmZlY3RGYWxsYmFja3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siRWZmZWN0RmFsbGJhY2tzIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkVmZmVjdENyZWF0aW9uT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFZmZlY3RDcmVhdGlvbk9wdGlvbnMiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRWZmZWN0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkVmZmVjdCJdOyB9KTsKKworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9mcmVzbmVsUGFyYW1ldGVyc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mcmVzbmVsUGFyYW1ldGVycyAq
LyAiLi9NYXRlcmlhbHMvZnJlc25lbFBhcmFtZXRlcnMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
RnJlc25lbFBhcmFtZXRlcnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9mcmVzbmVsUGFyYW1ldGVy
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJGcmVzbmVsUGFyYW1ldGVycyJdOyB9KTsK
KworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gKi8gIi4vTWF0ZXJpYWxzL2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbkRlZmluZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbWFnZVByb2Nlc3Np
bmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb25EZWZpbmVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkltYWdlUHJv
Y2Vzc2luZ0NvbmZpZ3VyYXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vbWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIk1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfbWF0ZXJpYWxEZWZpbmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGVyaWFsRGVmaW5lcyAqLyAiLi9NYXRlcmlh
bHMvbWF0ZXJpYWxEZWZpbmVzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1hdGVyaWFsRGVmaW5l
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGVyaWFsRGVmaW5lc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fWyJNYXRlcmlhbERlZmluZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0ZXJpYWxIZWxwZXIgKi8gIi4vTWF0ZXJpYWxzL21h
dGVyaWFsSGVscGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1hdGVyaWFsSGVscGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzdfX1siTWF0ZXJpYWxIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bXVsdGlNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9tdWx0aU1hdGVyaWFsICovICIuL01hdGVyaWFscy9tdWx0aU1hdGVyaWFs
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk11bHRpTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9tdWx0aU1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIk11bHRpTWF0
ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUEJSX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1BCUi9p
bmRleCAqLyAiLi9NYXRlcmlhbHMvUEJSL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBC
Uk1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BCUl9pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJQQlJNYXRlcmlhbERlZmluZXMiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiUEJSQmFzZU1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUEJSX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlBCUkJhc2VNYXRlcmlhbCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQQlJCYXNlU2ltcGxlTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9QQlJfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siUEJSQmFzZVNp
bXBsZU1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUk1hdGVyaWFsIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfUEJSX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IlBCUk1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUk1ldGFsbGljUm91Z2hu
ZXNzTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QQlJfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siUEJSTWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbCJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQQlJTcGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX1BCUl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJQQlJT
cGVjdWxhckdsb3NzaW5lc3NNYXRlcmlhbCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9wdXNoTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL3B1c2hNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvcHVzaE1hdGVy
aWFsLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlB1c2hNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX3B1c2hNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siUHVzaE1h
dGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NoYWRlck1hdGVyaWFs
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9zaGFkZXJNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvc2hhZGVyTWF0ZXJpYWwudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiU2hhZGVyTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zaGFk
ZXJNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siU2hhZGVyTWF0ZXJpYWwi
XTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3RhbmRhcmRNYXRlcmlhbF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3Rh
bmRhcmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbC50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX3N0YW5kYXJkTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlN0YW5k
YXJkTWF0ZXJpYWxEZWZpbmVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkTWF0
ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMl9fWyJTdGFuZGFyZE1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX1RleHR1cmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9UZXh0dXJlcy9pbmRleCAqLyAiLi9NYXRl
cmlhbHMvVGV4dHVyZXMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzZVRleHR1cmUi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTNfX1siQmFzZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3ViZVRl
eHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTNfX1siQ3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
RHluYW1pY1RleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siRHluYW1pY1RleHR1cmUiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siRXF1aVJl
Y3Rhbmd1bGFyQ3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSERSQ3ViZVRl
eHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTNfX1siSERSQ3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiSW50ZXJuYWxUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkludGVybmFsVGV4dHVyZSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJNaXJyb3JUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4
dHVyZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIk1pcnJvclRleHR1cmUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTXVsdGlSZW5kZXJUYXJnZXQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1si
TXVsdGlSZW5kZXJUYXJnZXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmF3VGV4dHVyZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1RleHR1cmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xM19fWyJSYXdUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbmRlclRh
cmdldFRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlRleHR1cmUiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQ29sb3JHcmFkaW5nVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Rl
eHR1cmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJDb2xvckdyYWRpbmdU
ZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJhd0N1YmVUZXh0dXJlIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEz
X19bIlJhd0N1YmVUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJhd1RleHR1cmUz
RCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1RleHR1cmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xM19fWyJSYXdUZXh0dXJlM0QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVm
cmFjdGlvblRleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUmVmcmFjdGlvblRleHR1cmUiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiVmlkZW9UZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVy
ZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlZpZGVvVGV4dHVyZSJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJIdG1sRWxlbWVudFRleHR1cmUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siSHRt
bEVsZW1lbnRUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9ERFNUZXh0dXJlTG9h
ZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzEzX19bIl9ERFNUZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIl9FTlZUZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIl9FTlZUZXh0dXJlTG9hZGVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIl9LVFhUZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfVGV4dHVyZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIl9LVFhU
ZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9UR0FUZXh0dXJlTG9hZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEzX19bIl9UR0FUZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
Il9CYXNpc1RleHR1cmVMb2FkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9UZXh0dXJlc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siX0Jhc2lzVGV4dHVyZUxvYWRlciJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX1RleHR1cmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19f
WyJDdXN0b21Qcm9jZWR1cmFsVGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2lz
ZVByb2NlZHVyYWxUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfVGV4dHVyZXNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIk5vaXNlUHJvY2VkdXJhbFRleHR1cmUiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUHJvY2VkdXJhbFRleHR1cmUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9UZXh0dXJlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUHJv
Y2VkdXJhbFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUHJvY2VkdXJhbFRleHR1
cmVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1RleHR1cmVzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJQcm9jZWR1cmFsVGV4dHVyZVNjZW5lQ29tcG9u
ZW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3VuaWZvcm1CdWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Vu
aWZvcm1CdWZmZXIgKi8gIi4vTWF0ZXJpYWxzL3VuaWZvcm1CdWZmZXIudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVW5pZm9ybUJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3VuaWZvcm1CdWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlVuaWZvcm1CdWZmZXIiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0ZXJpYWxGbGFncyAq
LyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWxGbGFncy50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNYXRl
cmlhbEZsYWdzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTVfX1siTWF0ZXJpYWxGbGFncyJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9Ob2RlL2luZGV4ICovICIuL01hdGVyaWFscy9Ob2Rl
L2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE2X19bIk5vZGVNYXRlcmlhbEJsb2NrVGFyZ2V0cyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJOb2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siTm9kZU1hdGVy
aWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJO
b2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJOb2RlTWF0ZXJpYWxDb25uZWN0aW9u
UG9pbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsQmxvY2siLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9f
WyJOb2RlTWF0ZXJpYWxCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJp
YWxEZWZpbmVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTZfX1siTm9kZU1hdGVyaWFsRGVmaW5lcyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJOb2RlTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJOb2RlTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsU3lzdGVtVmFsdWVzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siTm9kZU1hdGVyaWFs
U3lzdGVtVmFsdWVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk11bHRpcGx5QmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
Nl9fWyJNdWx0aXBseUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFkZEJsb2NrIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTZfX1siQWRkQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NhbGVCbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2
X19bIlNjYWxlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2xhbXBCbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2
X19bIkNsYW1wQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3Jvc3NCbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2
X19bIkNyb3NzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRG90QmxvY2siLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9f
WyJEb3RCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmFuc2Zvcm1CbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2
X19bIlRyYW5zZm9ybUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbWFwQmxvY2si
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xNl9fWyJSZW1hcEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5vcm1hbGl6ZUJs
b2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTZfX1siTm9ybWFsaXplQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJp
Z29ub21ldHJ5QmxvY2tPcGVyYXRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siVHJpZ29ub21ldHJ5QmxvY2tPcGVyYXRp
b25zIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRyaWdvbm9tZXRyeUJsb2NrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1si
VHJpZ29ub21ldHJ5QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3JNZXJnZXJC
bG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE2X19bIkNvbG9yTWVyZ2VyQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
VmVjdG9yTWVyZ2VyQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJWZWN0b3JNZXJnZXJCbG9jayJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJDb2xvclNwbGl0dGVyQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9O
b2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJDb2xvclNwbGl0dGVyQmxv
Y2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmVjdG9yU3BsaXR0ZXJCbG9jayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19b
IlZlY3RvclNwbGl0dGVyQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVycEJsb2Nr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTZfX1siTGVycEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRpdmlkZUJsb2Nr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTZfX1siRGl2aWRlQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3VidHJhY3RC
bG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE2X19bIlN1YnRyYWN0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3Rl
cEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTZfX1siU3RlcEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9wcG9z
aXRlQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xNl9fWyJPcHBvc2l0ZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlZpZXdEaXJlY3Rpb25CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIlZpZXdEaXJlY3Rpb25CbG9jayJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJGcmVzbmVsQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2Rl
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJGcmVzbmVsQmxvY2siXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiTWF4QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2Rl
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJNYXhCbG9jayJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJNaW5CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIk1pbkJsb2NrIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIk5vZGVNYXRlcmlhbE9wdGltaXplciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIk5vZGVNYXRlcmlhbE9w
dGltaXplciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWZXJ0ZXhPdXRwdXRCbG9jayIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2
X19bIlZlcnRleE91dHB1dEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvbmVzQmxv
Y2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNl9fWyJCb25lc0Jsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkluc3RhbmNl
c0Jsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTZfX1siSW5zdGFuY2VzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
TW9ycGhUYXJnZXRzQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJNb3JwaFRhcmdldHNCbG9jayJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJMaWdodEluZm9ybWF0aW9uQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJMaWdodEluZm9ybWF0
aW9uQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJhZ21lbnRPdXRwdXRCbG9jayIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE2X19bIkZyYWdtZW50T3V0cHV0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWxw
aGFUZXN0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xNl9fWyJBbHBoYVRlc3RCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJJbWFnZVByb2Nlc3NpbmdCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX05vZGVfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkltYWdlUHJvY2Vzc2luZ0Jsb2NrIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBlcnR1cmJOb3JtYWxCbG9jayIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIlBlcnR1
cmJOb3JtYWxCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGb2dCbG9jayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19b
IkZvZ0Jsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxpZ2h0QmxvY2siLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9Ob2RlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJM
aWdodEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRleHR1cmVCbG9jayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX05vZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19b
IlRleHR1cmVCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZsZWN0aW9uVGV4dHVy
ZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTZfX1siUmVmbGVjdGlvblRleHR1cmVCbG9jayJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJJbnB1dEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTm9kZV9pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siSW5wdXRCbG9jayJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJBbmltYXRlZElucHV0QmxvY2tUeXBlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX05v
ZGVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkFuaW1hdGVkSW5wdXRCbG9j
a1R5cGVzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2VmZmVjdFJlbmRlcmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9lZmZlY3RSZW5kZXJlciAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0UmVuZGVyZXIudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRWZmZWN0UmVuZGVyZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lZmZl
Y3RSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siRWZmZWN0UmVuZGVyZXIi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRWZmZWN0V3JhcHBlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2VmZmVjdFJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJFZmZl
Y3RXcmFwcGVyIl07IH0pOworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9tYXRlcmlhbC50cyI6CisvKiEqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvbWF0ZXJp
YWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBNYXRlcmlhbCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWF0ZXJpYWw7IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3Rz
bGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xzLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNl
cnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2lu
ZXMvZW5naW5lU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX3N1
Yk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01lc2hlcy9zdWJNZXNoICovICIuL01lc2hlcy9zdWJNZXNoLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3VuaWZvcm1CdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdW5pZm9ybUJ1ZmZlciAqLyAiLi9NYXRl
cmlhbHMvdW5pZm9ybUJ1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2Vy
ICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGhzL21hdGgucGxhbmUgKi8gIi4vTWF0aHMvbWF0aC5wbGFuZS50cyIp
OworCisKKworCisKKworCisKKworCisvKioKKyAqIEJhc2UgY2xhc3MgZm9yIHRoZSBtYWluIGZl
YXR1cmVzIG9mIGEgbWF0ZXJpYWwgaW4gQmFieWxvbi5qcworICovCit2YXIgTWF0ZXJpYWwgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG1h
dGVyaWFsIGluc3RhbmNlCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0
aGUgbWF0ZXJpYWwKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgdG8gcmVm
ZXJlbmNlCisgICAgICogQHBhcmFtIGRvTm90QWRkIHNwZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwg
c2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBzY2VuZQorICAgICAqLworICAgIGZ1bmN0aW9uIE1hdGVy
aWFsKG5hbWUsIHNjZW5lLCBkb05vdEFkZCkgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBvciBzZXRzIHVzZXIgZGVmaW5lZCBtZXRhZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5tZXRhZGF0YSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGb3IgaW50ZXJuYWwg
dXNlIG9ubHkuIFBsZWFzZSBkbyBub3QgdXNlLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5y
ZXNlcnZlZERhdGFTdG9yZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZp
ZXMgaWYgdGhlIHJlYWR5IHN0YXRlIHNob3VsZCBiZSBjaGVja2VkIG9uIGVhY2ggY2FsbAorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5jaGVja1JlYWR5T25FdmVyeUNhbGwgPSBmYWxzZTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgcmVhZHkgc3RhdGUgc2hvdWxk
IGJlIGNoZWNrZWQgb25jZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5jaGVja1JlYWR5T25s
eU9uY2UgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBzdGF0ZSBvZiB0aGUg
bWF0ZXJpYWwKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc3RhdGUgPSAiIjsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgbWF0ZXJpYWwKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuX2FscGhhID0gMS4wOworICAgICAgICAvKioKKyAgICAgICAgICog
U3BlY2lmaWVzIGlmIGJhY2sgZmFjZSBjdWxsaW5nIGlzIGVuYWJsZWQKKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuX2JhY2tGYWNlQ3VsbGluZyA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBDYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUgbWF0ZXJpYWwgaXMgY29tcGlsZWQKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMub25Db21waWxlZCA9IG51bGw7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBDYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMub25FcnJvciA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBDYWxsYmFjayB0cmlnZ2VyZWQgdG8gZ2V0IHRoZSByZW5kZXIgdGFyZ2V0IHRleHR1cmVz
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmdldFJlbmRlclRhcmdldFRleHR1cmVzID0gbnVs
bDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwgc2hv
dWxkIGJlIHNlcmlhbGl6ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZG9Ob3RTZXJpYWxp
emUgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICov
CisgICAgICAgIHRoaXMuX3N0b3JlRWZmZWN0T25TdWJNZXNoZXMgPSBmYWxzZTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgYW5pbWF0aW9ucyBmb3IgdGhlIG1hdGVyaWFsCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmFuaW1hdGlvbnMgPSBudWxsOworICAgICAgICAvKioK
KyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgbWF0ZXJpYWwgaXMgZGlzcG9z
ZWQKKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlID0gbmV3IF9N
aXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJd
KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBbiBvYnNlcnZlciB3aGljaCB3YXRjaGVzIGZv
ciBkaXNwb3NlIGV2ZW50cworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fb25EaXNwb3NlT2Jz
ZXJ2ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9vblVuQmluZE9ic2VydmFibGUgPSBudWxsOwor
ICAgICAgICAvKioKKyAgICAgICAgICogQW4gb2JzZXJ2ZXIgd2hpY2ggd2F0Y2hlcyBmb3IgYmlu
ZCBldmVudHMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX29uQmluZE9ic2VydmVyID0gbnVs
bDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgdmFsdWUgb2YgdGhlIGFscGhh
IG1vZGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX2FscGhhTW9kZSA9IF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5BTFBIQV9D
T01CSU5FOworICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUg
bmVlZCBkZXB0aCBwcmUtcGFzcyB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fbmVl
ZERlcHRoUHJlUGFzcyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVz
IGlmIGRlcHRoIHdyaXRpbmcgc2hvdWxkIGJlIGRpc2FibGVkCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmRpc2FibGVEZXB0aFdyaXRlID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBTcGVjaWZpZXMgaWYgZGVwdGggd3JpdGluZyBzaG91bGQgYmUgZm9yY2VkCisgICAgICAgICAq
LworICAgICAgICB0aGlzLmZvcmNlRGVwdGhXcml0ZSA9IGZhbHNlOworICAgICAgICAvKioKKyAg
ICAgICAgICogU3BlY2lmaWVzIGlmIHRoZXJlIHNob3VsZCBiZSBhIHNlcGFyYXRlIHBhc3MgZm9y
IGN1bGxpbmcKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc2VwYXJhdGVDdWxsaW5nUGFzcyA9
IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHRoZSBzdGF0ZSBzcGVjaWZp
bmcgaWYgZm9nIHNob3VsZCBiZSBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9m
b2dFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFN0b3JlcyB0aGUgc2l6
ZSBvZiBwb2ludHMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMucG9pbnRTaXplID0gMS4wOwor
ICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIHRoZSB6IG9mZnNldCB2YWx1ZQorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy56T2Zmc2V0ID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEBoaWRkZW4KKyAgICAgICAgICogU3RvcmVzIHRoZSBlZmZlY3RzIGZvciB0aGUgbWF0ZXJpYWwK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuX2VmZmVjdCA9IG51bGw7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwg
d2FzIHByZXZpb3VzbHkgcmVhZHkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX3dhc1ByZXZp
b3VzbHlSZWFkeSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIGlm
IHVuaWZvcm0gYnVmZmVycyBzaG91bGQgYmUgdXNlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5fdXNlVUJPID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTdG9yZXMgdGhlIGZp
bGwgbW9kZSBzdGF0ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fZmlsbE1vZGUgPSBNYXRl
cmlhbC5UcmlhbmdsZUZpbGxNb2RlOworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVz
IGlmIHRoZSBkZXB0aCB3cml0ZSBzdGF0ZSBzaG91bGQgYmUgY2FjaGVkCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLl9jYWNoZWREZXB0aFdyaXRlU3RhdGUgPSBmYWxzZTsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5faW5kZXhJblNjZW5lTWF0ZXJpYWxBcnJheSA9IC0x
OworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLm1lc2hNYXAgPSBudWxsOwor
ICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICB0aGlzLmlkID0gbmFtZSB8fCBfTWlz
Y190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUb29scyJdLlJhbmRvbUlkKCk7
CisgICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmUgfHwgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZFNjZW5l
OworICAgICAgICB0aGlzLnVuaXF1ZUlkID0gdGhpcy5fc2NlbmUuZ2V0VW5pcXVlSWQoKTsKKyAg
ICAgICAgaWYgKHRoaXMuX3NjZW5lLnVzZVJpZ2h0SGFuZGVkU3lzdGVtKSB7CisgICAgICAgICAg
ICB0aGlzLnNpZGVPcmllbnRhdGlvbiA9IE1hdGVyaWFsLkNsb2NrV2lzZVNpZGVPcmllbnRhdGlv
bjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuc2lkZU9yaWVu
dGF0aW9uID0gTWF0ZXJpYWwuQ291bnRlckNsb2NrV2lzZVNpZGVPcmllbnRhdGlvbjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyID0gbmV3IF91bmlmb3JtQnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlVuaWZvcm1CdWZmZXIiXSh0aGlzLl9zY2VuZS5n
ZXRFbmdpbmUoKSk7CisgICAgICAgIHRoaXMuX3VzZVVCTyA9IHRoaXMuZ2V0U2NlbmUoKS5nZXRF
bmdpbmUoKS5zdXBwb3J0c1VuaWZvcm1CdWZmZXJzOworICAgICAgICBpZiAoIWRvTm90QWRkKSB7
CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5hZGRNYXRlcmlhbCh0aGlzKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5fc2NlbmUudXNlTWF0ZXJpYWxNZXNoTWFwKSB7CisgICAgICAgICAg
ICB0aGlzLm1lc2hNYXAgPSB7fTsKKyAgICAgICAgfQorICAgIH0KKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoTWF0ZXJpYWwucHJvdG90eXBlLCAiYWxwaGEiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgbWF0ZXJpYWwKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Fs
cGhhOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgYWxwaGEg
dmFsdWUgb2YgdGhlIG1hdGVyaWFsCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2FscGhhID09PSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2Fs
cGhhID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KE1hdGVyaWFsLk1pc2NE
aXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
TWF0ZXJpYWwucHJvdG90eXBlLCAiYmFja0ZhY2VDdWxsaW5nIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgYmFjay1mYWNlIGN1bGxpbmcgc3RhdGUKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tG
YWNlQ3VsbGluZzsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhl
IGJhY2stZmFjZSBjdWxsaW5nIHN0YXRlCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2JhY2tGYWNlQ3VsbGluZyA9PT0g
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl9iYWNrRmFjZUN1bGxpbmcgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMubWFy
a0FzRGlydHkoTWF0ZXJpYWwuVGV4dHVyZURpcnR5RmxhZyk7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbC5wcm90b3R5cGUsICJoYXNSZW5kZXJU
YXJnZXRUZXh0dXJlcyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFu
IGluZGljYXRpbmcgdGhhdCBjdXJyZW50IG1hdGVyaWFsIG5lZWRzIHRvIHJlZ2lzdGVyIFJUVAor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShN
YXRlcmlhbC5wcm90b3R5cGUsICJvbkRpc3Bvc2UiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBDYWxsZWQgZHVyaW5nIGEgZGlzcG9zZSBldmVudAorICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbkRpc3Bvc2VP
YnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMub25EaXNwb3NlT2JzZXJ2YWJsZS5yZW1v
dmUodGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIgPSB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUuYWRkKGNh
bGxiYWNrKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1h
dGVyaWFsLnByb3RvdHlwZSwgIm9uQmluZE9ic2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBtYXRlcmlhbCBpcyBib3VuZAorICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghdGhp
cy5fb25CaW5kT2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX29uQmluZE9ic2Vy
dmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9vbkJpbmRPYnNlcnZhYmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoTWF0ZXJpYWwucHJvdG90eXBlLCAib25CaW5kIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogQ2FsbGVkIGR1cmluZyBhIGJpbmQgZXZlbnQKKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb25CaW5k
T2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQmluZE9ic2VydmFibGUucmVtb3Zl
KHRoaXMuX29uQmluZE9ic2VydmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X29uQmluZE9ic2VydmVyID0gdGhpcy5vbkJpbmRPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbC5wcm90
b3R5cGUsICJvblVuQmluZE9ic2VydmFibGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIEFu
IGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBtYXRlcmlhbCBpcyB1bmJvdW5kCisgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9vblVu
QmluZE9ic2VydmFibGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9vblVuQmluZE9ic2VydmFi
bGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJP
YnNlcnZhYmxlIl0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9v
blVuQmluZE9ic2VydmFibGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShNYXRlcmlhbC5wcm90b3R5cGUsICJhbHBoYU1vZGUiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYWxwaGEgbW9kZQorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWxw
aGFNb2RlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgdmFs
dWUgb2YgdGhlIGFscGhhIG1vZGUuCisgICAgICAgICAqCisgICAgICAgICAqIHwgVmFsdWUgfCBU
eXBlIHwgRGVzY3JpcHRpb24gfAorICAgICAgICAgKiB8IC0tLSB8IC0tLSB8IC0tLSB8CisgICAg
ICAgICAqIHwgMCB8IEFMUEhBX0RJU0FCTEUgfCAgIHwKKyAgICAgICAgICogfCAxIHwgQUxQSEFf
QUREIHwgICB8CisgICAgICAgICAqIHwgMiB8IEFMUEhBX0NPTUJJTkUgfCAgIHwKKyAgICAgICAg
ICogfCAzIHwgQUxQSEFfU1VCVFJBQ1QgfCAgIHwKKyAgICAgICAgICogfCA0IHwgQUxQSEFfTVVM
VElQTFkgfCAgIHwKKyAgICAgICAgICogfCA1IHwgQUxQSEFfTUFYSU1JWkVEIHwgICB8CisgICAg
ICAgICAqIHwgNiB8IEFMUEhBX09ORU9ORSB8ICAgfAorICAgICAgICAgKiB8IDcgfCBBTFBIQV9Q
UkVNVUxUSVBMSUVEIHwgICB8CisgICAgICAgICAqIHwgOCB8IEFMUEhBX1BSRU1VTFRJUExJRURf
UE9SVEVSRFVGRiB8ICAgfAorICAgICAgICAgKiB8IDkgfCBBTFBIQV9JTlRFUlBPTEFURSB8ICAg
fAorICAgICAgICAgKiB8IDEwIHwgQUxQSEFfU0NSRUVOTU9ERSB8ICAgfAorICAgICAgICAgKgor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9hbHBoYU1vZGUgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYWxwaGFNb2RlID0gdmFsdWU7Cisg
ICAgICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KE1hdGVyaWFsLlRleHR1cmVEaXJ0eUZsYWcpOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0ZXJpYWwucHJv
dG90eXBlLCAibmVlZERlcHRoUHJlUGFzcyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIGRlcHRoIHByZS1wYXNzIHZhbHVlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9uZWVkRGVwdGhQcmVQYXNzOwor
ICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgbmVlZCBkZXB0aCBw
cmUtcGFzcyB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9uZWVkRGVwdGhQcmVQYXNzID09PSB2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X25lZWREZXB0aFByZVBhc3MgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9uZWVkRGVw
dGhQcmVQYXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5jaGVja1JlYWR5T25FdmVyeUNhbGwg
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoTWF0ZXJpYWwucHJvdG90eXBlLCAiZm9nRW5hYmxlZCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSBmb2cgZW5hYmxlZCBzdGF0ZQor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fZm9nRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFNldHMgdGhlIHN0YXRlIGZvciBlbmFibGluZyBmb2cKKyAgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fZm9nRW5hYmxlZCA9
PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9mb2dFbmFibGVkID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLm1hcmtB
c0RpcnR5KE1hdGVyaWFsLk1pc2NEaXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoTWF0ZXJpYWwucHJvdG90eXBlLCAid2lyZWZyYW1lIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIHZhbHVlIHNwZWNpZnlpbmcgaWYgd2lyZWZy
YW1lIG1vZGUgaXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX2ZpbGxNb2RlKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBNYXRlcmlhbC5XaXJlRnJhbWVGaWxsTW9kZToKKyAgICAgICAgICAgICAgICBjYXNl
IE1hdGVyaWFsLkxpbmVMaXN0RHJhd01vZGU6CisgICAgICAgICAgICAgICAgY2FzZSBNYXRlcmlh
bC5MaW5lTG9vcERyYXdNb2RlOgorICAgICAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWwuTGluZVN0
cmlwRHJhd01vZGU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lLmZvcmNlV2lyZWZyYW1lOworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgc3RhdGUgb2Ygd2lyZWZy
YW1lIG1vZGUKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgICAgICB0aGlzLmZpbGxNb2RlID0gKHZhbHVlID8gTWF0ZXJpYWwuV2lyZUZyYW1lRmls
bE1vZGUgOiBNYXRlcmlhbC5UcmlhbmdsZUZpbGxNb2RlKTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdGVyaWFsLnByb3RvdHlwZSwgInBvaW50c0Nsb3Vk
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdmFsdWUgc3BlY2lmeWluZyBp
ZiBwb2ludCBjbG91ZHMgYXJlIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9maWxsTW9kZSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgTWF0ZXJpYWwuUG9pbnRGaWxsTW9kZToKKyAgICAgICAgICAgICAgICBj
YXNlIE1hdGVyaWFsLlBvaW50TGlzdERyYXdNb2RlOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZS5m
b3JjZVBvaW50c0Nsb3VkOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0
cyB0aGUgc3RhdGUgb2YgcG9pbnQgY2xvdWQgbW9kZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuZmlsbE1vZGUgPSAodmFsdWUg
PyBNYXRlcmlhbC5Qb2ludEZpbGxNb2RlIDogTWF0ZXJpYWwuVHJpYW5nbGVGaWxsTW9kZSk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbC5wcm90
b3R5cGUsICJmaWxsTW9kZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG1h
dGVyaWFsIGZpbGwgbW9kZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsbE1vZGU7CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBtYXRlcmlhbCBmaWxsIG1vZGUKKyAgICAgICAgICov
CisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5f
ZmlsbE1vZGUgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fZmlsbE1vZGUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRo
aXMubWFya0FzRGlydHkoTWF0ZXJpYWwuTWlzY0RpcnR5RmxhZyk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhl
IGN1cnJlbnQgbWF0ZXJpYWwKKyAgICAgKiBAcGFyYW0gZnVsbERldGFpbHMgZGVmaW5lcyBhIGJv
b2xlYW4gaW5kaWNhdGluZyB3aGljaCBsZXZlbHMgb2YgbG9nZ2luZyBpcyBkZXNpcmVkCisgICAg
ICogQHJldHVybnMgYSBzdHJpbmcgd2l0aCBtYXRlcmlhbCBpbmZvcm1hdGlvbgorICAgICAqLwor
ICAgIE1hdGVyaWFsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIChmdWxsRGV0YWlscykg
eworICAgICAgICB2YXIgcmV0ID0gIk5hbWU6ICIgKyB0aGlzLm5hbWU7CisgICAgICAgIGlmIChm
dWxsRGV0YWlscykgeworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBtYXRlcmlhbAorICAgICAq
IEByZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIGNsYXNzIG5hbWUgb2YgdGhlIG1hdGVyaWFsCisg
ICAgICovCisgICAgTWF0ZXJpYWwucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICJNYXRlcmlhbCI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoTWF0ZXJpYWwucHJvdG90eXBlLCAiaXNGcm96ZW4iLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdXBkYXRlcyBmb3IgdGhlIG1hdGVyaWFsIGJlZW4gbG9j
a2VkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLmNoZWNrUmVhZHlPbmx5T25jZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqCisgICAgICogTG9ja3MgdXBkYXRlcyBmb3IgdGhlIG1hdGVyaWFsCisgICAgICovCisgICAg
TWF0ZXJpYWwucHJvdG90eXBlLmZyZWV6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5j
aGVja1JlYWR5T25seU9uY2UgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogVW5sb2Nr
cyB1cGRhdGVzIGZvciB0aGUgbWF0ZXJpYWwKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5
cGUudW5mcmVlemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuY2hlY2tSZWFkeU9ubHlP
bmNlID0gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIG1h
dGVyaWFsIGlzIHJlYWR5IHRvIGJlIHVzZWQKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRo
ZSBtZXNoIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHVzZUluc3RhbmNlcyBzcGVjaWZpZXMgaWYg
aW5zdGFuY2VzIHNob3VsZCBiZSB1c2VkCisgICAgICogQHJldHVybnMgYSBib29sZWFuIGluZGlj
YXRpbmcgaWYgdGhlIG1hdGVyaWFsIGlzIHJlYWR5IHRvIGJlIHVzZWQKKyAgICAgKi8KKyAgICBN
YXRlcmlhbC5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uIChtZXNoLCB1c2VJbnN0YW5jZXMp
IHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTcGVjaWZp
ZXMgdGhhdCB0aGUgc3VibWVzaCBpcyByZWFkeSB0byBiZSB1c2VkCisgICAgICogQHBhcmFtIG1l
c2ggZGVmaW5lcyB0aGUgbWVzaCB0byBjaGVjaworICAgICAqIEBwYXJhbSBzdWJNZXNoIGRlZmlu
ZXMgd2hpY2ggc3VibWVzaCB0byBjaGVjaworICAgICAqIEBwYXJhbSB1c2VJbnN0YW5jZXMgc3Bl
Y2lmaWVzIHRoYXQgaW5zdGFuY2VzIHNob3VsZCBiZSB1c2VkCisgICAgICogQHJldHVybnMgYSBi
b29sZWFuIGluZGljYXRpbmcgdGhhdCB0aGUgc3VibWVzaCBpcyByZWFkeSBvciBub3QKKyAgICAg
Ki8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUuaXNSZWFkeUZvclN1Yk1lc2ggPSBmdW5jdGlvbiAo
bWVzaCwgc3ViTWVzaCwgdXNlSW5zdGFuY2VzKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG1hdGVyaWFsIGVmZmVjdAorICAgICAq
IEByZXR1cm5zIHRoZSBlZmZlY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXRlcmlhbAorICAgICAq
LworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5nZXRFZmZlY3QgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9lZmZlY3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IHRoZSBjdXJyZW50IHNjZW5lCisgICAgICogQHJldHVybnMgYSBTY2VuZQorICAgICAqLworICAg
IE1hdGVyaWFsLnByb3RvdHlwZS5nZXRTY2VuZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3NjZW5lOworICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIGlmIHRo
ZSBtYXRlcmlhbCB3aWxsIHJlcXVpcmUgYWxwaGEgYmxlbmRpbmcKKyAgICAgKiBAcmV0dXJucyBh
IGJvb2xlYW4gc3BlY2lmeWluZyBpZiBhbHBoYSBibGVuZGluZyBpcyBuZWVkZWQKKyAgICAgKi8K
KyAgICBNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhhQmxlbmRpbmcgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiAodGhpcy5hbHBoYSA8IDEuMCk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTcGVjaWZpZXMgaWYgdGhlIG1lc2ggd2lsbCByZXF1aXJlIGFscGhhIGJsZW5kaW5nCisg
ICAgICogQHBhcmFtIG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0byBjaGVjaworICAgICAqIEByZXR1
cm5zIGEgYm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGFscGhhIGJsZW5kaW5nIGlzIG5lZWRlZCBmb3Ig
dGhlIG1lc2gKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhhQmxlbmRp
bmdGb3JNZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubmVlZEFs
cGhhQmxlbmRpbmcoKSB8fCAobWVzaC52aXNpYmlsaXR5IDwgMS4wKSB8fCBtZXNoLmhhc1ZlcnRl
eEFscGhhOworICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIGlmIHRoaXMgbWF0ZXJp
YWwgc2hvdWxkIGJlIHJlbmRlcmVkIGluIGFscGhhIHRlc3QgbW9kZQorICAgICAqIEByZXR1cm5z
IGEgYm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGFuIGFscGhhIHRlc3QgaXMgbmVlZGVkLgorICAgICAq
LworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5uZWVkQWxwaGFUZXN0aW5nID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRo
ZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBhbHBoYSB0ZXN0CisgICAgICogQHJldHVybnMgdGhlIHRl
eHR1cmUgdG8gdXNlIGZvciBhbHBoYSB0ZXN0aW5nCisgICAgICovCisgICAgTWF0ZXJpYWwucHJv
dG90eXBlLmdldEFscGhhVGVzdFRleHR1cmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogTWFya3MgdGhlIG1hdGVyaWFsIHRvIGlu
ZGljYXRlIHRoYXQgaXQgbmVlZHMgdG8gYmUgcmUtY2FsY3VsYXRlZAorICAgICAqLworICAgIE1h
dGVyaWFsLnByb3RvdHlwZS5tYXJrRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMu
X3dhc1ByZXZpb3VzbHlSZWFkeSA9IGZhbHNlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBNYXRlcmlhbC5wcm90b3R5cGUuX3ByZUJpbmQgPSBmdW5jdGlvbiAoZWZmZWN0LCBvdmVy
cmlkZU9yaWVudGF0aW9uKSB7CisgICAgICAgIGlmIChvdmVycmlkZU9yaWVudGF0aW9uID09PSB2
b2lkIDApIHsgb3ZlcnJpZGVPcmllbnRhdGlvbiA9IG51bGw7IH0KKyAgICAgICAgdmFyIGVuZ2lu
ZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICB2YXIgb3JpZW50YXRpb24gPSAo
b3ZlcnJpZGVPcmllbnRhdGlvbiA9PSBudWxsKSA/IHRoaXMuc2lkZU9yaWVudGF0aW9uIDogb3Zl
cnJpZGVPcmllbnRhdGlvbjsKKyAgICAgICAgdmFyIHJldmVyc2UgPSBvcmllbnRhdGlvbiA9PT0g
TWF0ZXJpYWwuQ2xvY2tXaXNlU2lkZU9yaWVudGF0aW9uOworICAgICAgICBlbmdpbmUuZW5hYmxl
RWZmZWN0KGVmZmVjdCA/IGVmZmVjdCA6IHRoaXMuX2VmZmVjdCk7CisgICAgICAgIGVuZ2luZS5z
ZXRTdGF0ZSh0aGlzLmJhY2tGYWNlQ3VsbGluZywgdGhpcy56T2Zmc2V0LCBmYWxzZSwgcmV2ZXJz
ZSk7CisgICAgICAgIHJldHVybiByZXZlcnNlOworICAgIH07CisgICAgLyoqCisgICAgICogQmlu
ZHMgdGhlIG1hdGVyaWFsIHRvIHRoZSBtZXNoCisgICAgICogQHBhcmFtIHdvcmxkIGRlZmluZXMg
dGhlIHdvcmxkIHRyYW5zZm9ybWF0aW9uIG1hdHJpeAorICAgICAqIEBwYXJhbSBtZXNoIGRlZmlu
ZXMgdGhlIG1lc2ggdG8gYmluZCB0aGUgbWF0ZXJpYWwgdG8KKyAgICAgKi8KKyAgICBNYXRlcmlh
bC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICh3b3JsZCwgbWVzaCkgeworICAgIH07CisgICAg
LyoqCisgICAgICogQmluZHMgdGhlIHN1Ym1lc2ggdG8gdGhlIG1hdGVyaWFsCisgICAgICogQHBh
cmFtIHdvcmxkIGRlZmluZXMgdGhlIHdvcmxkIHRyYW5zZm9ybWF0aW9uIG1hdHJpeAorICAgICAq
IEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIG1lc2ggY29udGFpbmluZyB0aGUgc3VibWVzaAorICAg
ICAqIEBwYXJhbSBzdWJNZXNoIGRlZmluZXMgdGhlIHN1Ym1lc2ggdG8gYmluZCB0aGUgbWF0ZXJp
YWwgdG8KKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUuYmluZEZvclN1Yk1lc2ggPSBm
dW5jdGlvbiAod29ybGQsIG1lc2gsIHN1Yk1lc2gpIHsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEJpbmRzIHRoZSB3b3JsZCBtYXRyaXggdG8gdGhlIG1hdGVyaWFsCisgICAgICogQHBhcmFtIHdv
cmxkIGRlZmluZXMgdGhlIHdvcmxkIHRyYW5zZm9ybWF0aW9uIG1hdHJpeAorICAgICAqLworICAg
IE1hdGVyaWFsLnByb3RvdHlwZS5iaW5kT25seVdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKHdvcmxk
KSB7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgc2NlbmUncyB1bmlmb3JtIGJ1
ZmZlciB0byB0aGUgZWZmZWN0LgorICAgICAqIEBwYXJhbSBlZmZlY3QgZGVmaW5lcyB0aGUgZWZm
ZWN0IHRvIGJpbmQgdG8gdGhlIHNjZW5lIHVuaWZvcm0gYnVmZmVyCisgICAgICogQHBhcmFtIHNj
ZW5lVWJvIGRlZmluZXMgdGhlIHVuaWZvcm0gYnVmZmVyIHN0b3Jpbmcgc2NlbmUgZGF0YQorICAg
ICAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5iaW5kU2NlbmVVbmlmb3JtQnVmZmVyID0gZnVu
Y3Rpb24gKGVmZmVjdCwgc2NlbmVVYm8pIHsKKyAgICAgICAgc2NlbmVVYm8uYmluZFRvRWZmZWN0
KGVmZmVjdCwgIlNjZW5lIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgdmll
dyBtYXRyaXggdG8gdGhlIGVmZmVjdAorICAgICAqIEBwYXJhbSBlZmZlY3QgZGVmaW5lcyB0aGUg
ZWZmZWN0IHRvIGJpbmQgdGhlIHZpZXcgbWF0cml4IHRvCisgICAgICovCisgICAgTWF0ZXJpYWwu
cHJvdG90eXBlLmJpbmRWaWV3ID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICBpZiAoIXRo
aXMuX3VzZVVCTykgeworICAgICAgICAgICAgZWZmZWN0LnNldE1hdHJpeCgidmlldyIsIHRoaXMu
Z2V0U2NlbmUoKS5nZXRWaWV3TWF0cml4KCkpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgdGhpcy5iaW5kU2NlbmVVbmlmb3JtQnVmZmVyKGVmZmVjdCwgdGhpcy5nZXRT
Y2VuZSgpLmdldFNjZW5lVW5pZm9ybUJ1ZmZlcigpKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqCisgICAgICogQmluZHMgdGhlIHZpZXcgcHJvamVjdGlvbiBtYXRyaXggdG8gdGhlIGVmZmVj
dAorICAgICAqIEBwYXJhbSBlZmZlY3QgZGVmaW5lcyB0aGUgZWZmZWN0IHRvIGJpbmQgdGhlIHZp
ZXcgcHJvamVjdGlvbiBtYXRyaXggdG8KKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUu
YmluZFZpZXdQcm9qZWN0aW9uID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICBpZiAoIXRo
aXMuX3VzZVVCTykgeworICAgICAgICAgICAgZWZmZWN0LnNldE1hdHJpeCgidmlld1Byb2plY3Rp
b24iLCB0aGlzLmdldFNjZW5lKCkuZ2V0VHJhbnNmb3JtTWF0cml4KCkpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5iaW5kU2NlbmVVbmlmb3JtQnVmZmVyKGVm
ZmVjdCwgdGhpcy5nZXRTY2VuZSgpLmdldFNjZW5lVW5pZm9ybUJ1ZmZlcigpKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIGlmIG1hdGVyaWFsIGFscGhhIHRl
c3Rpbmcgc2hvdWxkIGJlIHR1cm5lZCBvbiBmb3IgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gbWVz
aCBkZWZpbmVzIHRoZSBtZXNoIHRvIGNoZWNrCisgICAgICovCisgICAgTWF0ZXJpYWwucHJvdG90
eXBlLl9zaG91bGRUdXJuQWxwaGFUZXN0T24gPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICBy
ZXR1cm4gKCF0aGlzLm5lZWRBbHBoYUJsZW5kaW5nRm9yTWVzaChtZXNoKSAmJiB0aGlzLm5lZWRB
bHBoYVRlc3RpbmcoKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcm9jZXNzZXMgdG8gZXhl
Y3V0ZSBhZnRlciBiaW5kaW5nIHRoZSBtYXRlcmlhbCB0byBhIG1lc2gKKyAgICAgKiBAcGFyYW0g
bWVzaCBkZWZpbmVzIHRoZSByZW5kZXJlZCBtZXNoCisgICAgICovCisgICAgTWF0ZXJpYWwucHJv
dG90eXBlLl9hZnRlckJpbmQgPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICB0aGlzLl9zY2Vu
ZS5fY2FjaGVkTWF0ZXJpYWwgPSB0aGlzOworICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAg
ICAgdGhpcy5fc2NlbmUuX2NhY2hlZFZpc2liaWxpdHkgPSBtZXNoLnZpc2liaWxpdHk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5fY2FjaGVkVmlz
aWJpbGl0eSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29uQmluZE9ic2VydmFi
bGUgJiYgbWVzaCkgeworICAgICAgICAgICAgdGhpcy5fb25CaW5kT2JzZXJ2YWJsZS5ub3RpZnlP
YnNlcnZlcnMobWVzaCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuZGlzYWJsZURlcHRo
V3JpdGUpIHsKKyAgICAgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUo
KTsKKyAgICAgICAgICAgIHRoaXMuX2NhY2hlZERlcHRoV3JpdGVTdGF0ZSA9IGVuZ2luZS5nZXRE
ZXB0aFdyaXRlKCk7CisgICAgICAgICAgICBlbmdpbmUuc2V0RGVwdGhXcml0ZShmYWxzZSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFVuYmluZHMgdGhlIG1hdGVyaWFsIGZy
b20gdGhlIG1lc2gKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUudW5iaW5kID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fb25VbkJpbmRPYnNlcnZhYmxlKSB7CisgICAg
ICAgICAgICB0aGlzLl9vblVuQmluZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmRpc2FibGVEZXB0aFdyaXRlKSB7CisgICAgICAg
ICAgICB2YXIgZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgICAgICBl
bmdpbmUuc2V0RGVwdGhXcml0ZSh0aGlzLl9jYWNoZWREZXB0aFdyaXRlU3RhdGUpOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBhY3RpdmUgdGV4dHVyZXMgZnJv
bSB0aGUgbWF0ZXJpYWwKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB0ZXh0dXJlcworICAg
ICAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5nZXRBY3RpdmVUZXh0dXJlcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuIFtdOworICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lm
aWVzIGlmIHRoZSBtYXRlcmlhbCB1c2VzIGEgdGV4dHVyZQorICAgICAqIEBwYXJhbSB0ZXh0dXJl
IGRlZmluZXMgdGhlIHRleHR1cmUgdG8gY2hlY2sgYWdhaW5zdCB0aGUgbWF0ZXJpYWwKKyAgICAg
KiBAcmV0dXJucyBhIGJvb2xlYW4gc3BlY2lmeWluZyBpZiB0aGUgbWF0ZXJpYWwgdXNlcyB0aGUg
dGV4dHVyZQorICAgICAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5oYXNUZXh0dXJlID0gZnVu
Y3Rpb24gKHRleHR1cmUpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoq
CisgICAgICogTWFrZXMgYSBkdXBsaWNhdGUgb2YgdGhlIG1hdGVyaWFsLCBhbmQgZ2l2ZXMgaXQg
YSBuZXcgbmFtZQorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5ldyBuYW1lIGZvciB0
aGUgZHVwbGljYXRlZCBtYXRlcmlhbAorICAgICAqIEByZXR1cm5zIHRoZSBjbG9uZWQgbWF0ZXJp
YWwKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAobmFt
ZSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMg
dGhlIG1lc2hlcyBib3VuZCB0byB0aGUgbWF0ZXJpYWwKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJh
eSBvZiBtZXNoZXMgYm91bmQgdG8gdGhlIG1hdGVyaWFsCisgICAgICovCisgICAgTWF0ZXJpYWwu
cHJvdG90eXBlLmdldEJpbmRlZE1lc2hlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMubWVzaE1hcCkgeworICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IG5ldyBBcnJheSgpOworICAgICAgICAgICAgZm9yICh2YXIgbWVzaElkIGluIHRo
aXMubWVzaE1hcCkgeworICAgICAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5tZXNoTWFwW21l
c2hJZF07CisgICAgICAgICAgICAgICAgaWYgKG1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnB1c2gobWVzaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHZhciBtZXNoZXMgPSB0aGlzLl9zY2VuZS5tZXNoZXM7CisgICAgICAgICAgICByZXR1
cm4gbWVzaGVzLmZpbHRlcihmdW5jdGlvbiAobWVzaCkgeyByZXR1cm4gbWVzaC5tYXRlcmlhbCA9
PT0gX3RoaXM7IH0pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSBz
aGFkZXIgY29tcGlsYXRpb24KKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIGFz
c29jaWF0ZWQgd2l0aCB0aGlzIG1hdGVyaWFsCisgICAgICogQHBhcmFtIG9uQ29tcGlsZWQgZGVm
aW5lcyBhIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgbWF0ZXJpYWwgaXMgY29tcGlsZWQK
KyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0
aGUgY29tcGlsYXRpb24KKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUuZm9yY2VDb21w
aWxhdGlvbiA9IGZ1bmN0aW9uIChtZXNoLCBvbkNvbXBpbGVkLCBvcHRpb25zKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBsb2NhbE9wdGlvbnMgPSB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fzc2lnbiJdKHsgY2xpcFBsYW5lOiBmYWxzZSB9
LCBvcHRpb25zKTsKKyAgICAgICAgdmFyIHN1Yk1lc2ggPSBuZXcgX01lc2hlc19zdWJNZXNoX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkJhc2VTdWJNZXNoIl0oKTsKKyAgICAgICAgdmFy
IHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICB2YXIgY2hlY2tSZWFkeSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghX3RoaXMuX3NjZW5lIHx8ICFfdGhpcy5fc2NlbmUu
Z2V0RW5naW5lKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoc3ViTWVzaC5fbWF0ZXJpYWxEZWZpbmVzKSB7CisgICAgICAgICAgICAg
ICAgc3ViTWVzaC5fbWF0ZXJpYWxEZWZpbmVzLl9yZW5kZXJJZCA9IC0xOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFyIGNsaXBQbGFuZVN0YXRlID0gc2NlbmUuY2xpcFBsYW5lOworICAg
ICAgICAgICAgaWYgKGxvY2FsT3B0aW9ucy5jbGlwUGxhbmUpIHsKKyAgICAgICAgICAgICAgICBz
Y2VuZS5jbGlwUGxhbmUgPSBuZXcgX01hdGhzX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siUGxhbmUiXSgwLCAwLCAwLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChfdGhpcy5fc3RvcmVFZmZlY3RPblN1Yk1lc2hlcykgeworICAgICAgICAgICAgICAg
IGlmIChfdGhpcy5pc1JlYWR5Rm9yU3ViTWVzaChtZXNoLCBzdWJNZXNoKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAob25Db21waWxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgb25D
b21waWxlZChfdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQo
Y2hlY2tSZWFkeSwgMTYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChfdGhpcy5pc1JlYWR5KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG9uQ29tcGlsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9uQ29tcGlsZWQoX3RoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzZXRU
aW1lb3V0KGNoZWNrUmVhZHksIDE2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAobG9jYWxPcHRpb25zLmNsaXBQbGFuZSkgeworICAgICAgICAgICAg
ICAgIHNjZW5lLmNsaXBQbGFuZSA9IGNsaXBQbGFuZVN0YXRlOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworICAgICAgICBjaGVja1JlYWR5KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBG
b3JjZSBzaGFkZXIgY29tcGlsYXRpb24KKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBt
ZXNoIHRoYXQgd2lsbCB1c2UgdGhpcyBtYXRlcmlhbAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRl
ZmluZXMgYWRkaXRpb25hbCBvcHRpb25zIGZvciBjb21waWxpbmcgdGhlIHNoYWRlcnMKKyAgICAg
KiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21waWxhdGlvbiBj
b21wbGV0ZXMKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5wcm90b3R5cGUuZm9yY2VDb21waWxhdGlv
bkFzeW5jID0gZnVuY3Rpb24gKG1lc2gsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7Cisg
ICAgICAgICAgICBfdGhpcy5mb3JjZUNvbXBpbGF0aW9uKG1lc2gsIGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICB9LCBvcHRpb25zKTsKKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNYXJrcyBhIGRlZmluZSBpbiB0aGUgbWF0
ZXJpYWwgdG8gaW5kaWNhdGUgdGhhdCBpdCBuZWVkcyB0byBiZSByZS1jb21wdXRlZAorICAgICAq
IEBwYXJhbSBmbGFnIGRlZmluZXMgYSBmbGFnIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhcnRz
IG9mIHRoZSBtYXRlcmlhbCBoYXZlIHRvIGJlIG1hcmtlZCBhcyBkaXJ0eQorICAgICAqLworICAg
IE1hdGVyaWFsLnByb3RvdHlwZS5tYXJrQXNEaXJ0eSA9IGZ1bmN0aW9uIChmbGFnKSB7CisgICAg
ICAgIGlmICh0aGlzLmdldFNjZW5lKCkuYmxvY2tNYXRlcmlhbERpcnR5TWVjaGFuaXNtKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgTWF0ZXJpYWwuX0RpcnR5Q2Fs
bGJhY2tBcnJheS5sZW5ndGggPSAwOworICAgICAgICBpZiAoZmxhZyAmIE1hdGVyaWFsLlRleHR1
cmVEaXJ0eUZsYWcpIHsKKyAgICAgICAgICAgIE1hdGVyaWFsLl9EaXJ0eUNhbGxiYWNrQXJyYXku
cHVzaChNYXRlcmlhbC5fVGV4dHVyZURpcnR5Q2FsbEJhY2spOworICAgICAgICB9CisgICAgICAg
IGlmIChmbGFnICYgTWF0ZXJpYWwuTGlnaHREaXJ0eUZsYWcpIHsKKyAgICAgICAgICAgIE1hdGVy
aWFsLl9EaXJ0eUNhbGxiYWNrQXJyYXkucHVzaChNYXRlcmlhbC5fTGlnaHRzRGlydHlDYWxsQmFj
ayk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZsYWcgJiBNYXRlcmlhbC5GcmVzbmVsRGlydHlG
bGFnKSB7CisgICAgICAgICAgICBNYXRlcmlhbC5fRGlydHlDYWxsYmFja0FycmF5LnB1c2goTWF0
ZXJpYWwuX0ZyZXNuZWxEaXJ0eUNhbGxCYWNrKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmxh
ZyAmIE1hdGVyaWFsLkF0dHJpYnV0ZXNEaXJ0eUZsYWcpIHsKKyAgICAgICAgICAgIE1hdGVyaWFs
Ll9EaXJ0eUNhbGxiYWNrQXJyYXkucHVzaChNYXRlcmlhbC5fQXR0cmlidXRlRGlydHlDYWxsQmFj
ayk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZsYWcgJiBNYXRlcmlhbC5NaXNjRGlydHlGbGFn
KSB7CisgICAgICAgICAgICBNYXRlcmlhbC5fRGlydHlDYWxsYmFja0FycmF5LnB1c2goTWF0ZXJp
YWwuX01pc2NEaXJ0eUNhbGxCYWNrKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoTWF0ZXJpYWwu
X0RpcnR5Q2FsbGJhY2tBcnJheS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuX21hcmtBbGxT
dWJNZXNoZXNBc0RpcnR5KE1hdGVyaWFsLl9SdW5EaXJ0eUNhbGxCYWNrcyk7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5nZXRTY2VuZSgpLnJlc2V0Q2FjaGVkTWF0ZXJpYWwoKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIE1hcmtzIGFsbCBzdWJtZXNoZXMgb2YgYSBtYXRlcmlhbCB0byBpbmRp
Y2F0ZSB0aGF0IHRoZWlyIG1hdGVyaWFsIGRlZmluZXMgbmVlZCB0byBiZSByZS1jYWxjdWxhdGVk
CisgICAgICogQHBhcmFtIGZ1bmMgZGVmaW5lcyBhIGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBtYXRl
cmlhbCBkZWZpbmVzIGFnYWluc3QgdGhlIHN1Ym1lc2hlcworICAgICAqLworICAgIE1hdGVyaWFs
LnByb3RvdHlwZS5fbWFya0FsbFN1Yk1lc2hlc0FzRGlydHkgPSBmdW5jdGlvbiAoZnVuYykgewor
ICAgICAgICBpZiAodGhpcy5nZXRTY2VuZSgpLmJsb2NrTWF0ZXJpYWxEaXJ0eU1lY2hhbmlzbSkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBtZXNoZXMgPSB0
aGlzLmdldFNjZW5lKCkubWVzaGVzOworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIG1lc2hlc18x
ID0gbWVzaGVzOyBfaSA8IG1lc2hlc18xLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFy
IG1lc2ggPSBtZXNoZXNfMVtfaV07CisgICAgICAgICAgICBpZiAoIW1lc2guc3ViTWVzaGVzKSB7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHZhciBfYSA9IDAsIF9iID0gbWVzaC5zdWJNZXNoZXM7IF9hIDwgX2IubGVuZ3RoOyBfYSsr
KSB7CisgICAgICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBfYltfYV07CisgICAgICAgICAgICAg
ICAgaWYgKHN1Yk1lc2guZ2V0TWF0ZXJpYWwoKSAhPT0gdGhpcykgeworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFz
dWJNZXNoLl9tYXRlcmlhbERlZmluZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZ1bmMoc3ViTWVzaC5fbWF0ZXJp
YWxEZWZpbmVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
KiBJbmRpY2F0ZXMgdGhhdCB3ZSBuZWVkIHRvIHJlLWNhbGN1bGF0ZWQgZm9yIGFsbCBzdWJtZXNo
ZXMKKyAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5fbWFya0FsbFN1Yk1lc2hlc0FzQWxsRGly
dHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0RpcnR5
KE1hdGVyaWFsLl9BbGxEaXJ0eUNhbGxCYWNrKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIElu
ZGljYXRlcyB0aGF0IGltYWdlIHByb2Nlc3NpbmcgbmVlZHMgdG8gYmUgcmUtY2FsY3VsYXRlZCBm
b3IgYWxsIHN1Ym1lc2hlcworICAgICAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5fbWFya0Fs
bFN1Yk1lc2hlc0FzSW1hZ2VQcm9jZXNzaW5nRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0RpcnR5KE1hdGVyaWFsLl9JbWFnZVByb2Nlc3NpbmdE
aXJ0eUNhbGxCYWNrKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEluZGljYXRlcyB0aGF0IHRl
eHR1cmVzIG5lZWQgdG8gYmUgcmUtY2FsY3VsYXRlZCBmb3IgYWxsIHN1Ym1lc2hlcworICAgICAq
LworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5fbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0
eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzRGlydHko
TWF0ZXJpYWwuX1RleHR1cmVEaXJ0eUNhbGxCYWNrKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEluZGljYXRlcyB0aGF0IGZyZXNuZWwgbmVlZHMgdG8gYmUgcmUtY2FsY3VsYXRlZCBmb3IgYWxs
IHN1Ym1lc2hlcworICAgICAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5fbWFya0FsbFN1Yk1l
c2hlc0FzRnJlc25lbERpcnR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9tYXJrQWxs
U3ViTWVzaGVzQXNEaXJ0eShNYXRlcmlhbC5fRnJlc25lbERpcnR5Q2FsbEJhY2spOworICAgIH07
CisgICAgLyoqCisgICAgICogSW5kaWNhdGVzIHRoYXQgZnJlc25lbCBhbmQgbWlzYyBuZWVkIHRv
IGJlIHJlLWNhbGN1bGF0ZWQgZm9yIGFsbCBzdWJtZXNoZXMKKyAgICAgKi8KKyAgICBNYXRlcmlh
bC5wcm90b3R5cGUuX21hcmtBbGxTdWJNZXNoZXNBc0ZyZXNuZWxBbmRNaXNjRGlydHkgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0RpcnR5KE1hdGVyaWFs
Ll9GcmVzbmVsQW5kTWlzY0RpcnR5Q2FsbEJhY2spOworICAgIH07CisgICAgLyoqCisgICAgICog
SW5kaWNhdGVzIHRoYXQgbGlnaHRzIG5lZWQgdG8gYmUgcmUtY2FsY3VsYXRlZCBmb3IgYWxsIHN1
Ym1lc2hlcworICAgICAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5fbWFya0FsbFN1Yk1lc2hl
c0FzTGlnaHRzRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX21hcmtBbGxTdWJN
ZXNoZXNBc0RpcnR5KE1hdGVyaWFsLl9MaWdodHNEaXJ0eUNhbGxCYWNrKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEluZGljYXRlcyB0aGF0IGF0dHJpYnV0ZXMgbmVlZCB0byBiZSByZS1jYWxj
dWxhdGVkIGZvciBhbGwgc3VibWVzaGVzCisgICAgICovCisgICAgTWF0ZXJpYWwucHJvdG90eXBl
Ll9tYXJrQWxsU3ViTWVzaGVzQXNBdHRyaWJ1dGVzRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0RpcnR5KE1hdGVyaWFsLl9BdHRyaWJ1dGVEaXJ0
eUNhbGxCYWNrKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEluZGljYXRlcyB0aGF0IG1pc2Mg
bmVlZHMgdG8gYmUgcmUtY2FsY3VsYXRlZCBmb3IgYWxsIHN1Ym1lc2hlcworICAgICAqLworICAg
IE1hdGVyaWFsLnByb3RvdHlwZS5fbWFya0FsbFN1Yk1lc2hlc0FzTWlzY0RpcnR5ID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB0aGlzLl9tYXJrQWxsU3ViTWVzaGVzQXNEaXJ0eShNYXRlcmlhbC5f
TWlzY0RpcnR5Q2FsbEJhY2spOworICAgIH07CisgICAgLyoqCisgICAgICogSW5kaWNhdGVzIHRo
YXQgdGV4dHVyZXMgYW5kIG1pc2MgbmVlZCB0byBiZSByZS1jYWxjdWxhdGVkIGZvciBhbGwgc3Vi
bWVzaGVzCisgICAgICovCisgICAgTWF0ZXJpYWwucHJvdG90eXBlLl9tYXJrQWxsU3ViTWVzaGVz
QXNUZXh0dXJlc0FuZE1pc2NEaXJ0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fbWFy
a0FsbFN1Yk1lc2hlc0FzRGlydHkoTWF0ZXJpYWwuX1RleHR1cmVBbmRNaXNjRGlydHlDYWxsQmFj
ayk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgbWF0ZXJpYWwKKyAgICAg
KiBAcGFyYW0gZm9yY2VEaXNwb3NlRWZmZWN0IHNwZWNpZmllcyBpZiBlZmZlY3RzIHNob3VsZCBi
ZSBmb3JjZWZ1bGx5IGRpc3Bvc2VkCisgICAgICogQHBhcmFtIGZvcmNlRGlzcG9zZVRleHR1cmVz
IHNwZWNpZmllcyBpZiB0ZXh0dXJlcyBzaG91bGQgYmUgZm9yY2VmdWxseSBkaXNwb3NlZAorICAg
ICAqIEBwYXJhbSBub3RCb3VuZFRvTWVzaCBzcGVjaWZpZXMgaWYgdGhlIG1hdGVyaWFsIHRoYXQg
aXMgYmVpbmcgZGlzcG9zZWQgaXMga25vd24gdG8gYmUgbm90IGJvdW5kIHRvIGFueSBtZXNoCisg
ICAgICovCisgICAgTWF0ZXJpYWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZm9yY2VE
aXNwb3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcywgbm90Qm91bmRUb01lc2gpIHsKKyAg
ICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICAvLyBBbmltYXRpb25z
CisgICAgICAgIHNjZW5lLnN0b3BBbmltYXRpb24odGhpcyk7CisgICAgICAgIHNjZW5lLmZyZWVQ
cm9jZXNzZWRNYXRlcmlhbHMoKTsKKyAgICAgICAgLy8gUmVtb3ZlIGZyb20gc2NlbmUKKyAgICAg
ICAgc2NlbmUucmVtb3ZlTWF0ZXJpYWwodGhpcyk7CisgICAgICAgIGlmIChub3RCb3VuZFRvTWVz
aCAhPT0gdHJ1ZSkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gbWVzaGVzCisgICAgICAg
ICAgICBpZiAodGhpcy5tZXNoTWFwKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgbWVzaElk
IGluIHRoaXMubWVzaE1hcCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IHRoaXMu
bWVzaE1hcFttZXNoSWRdOworICAgICAgICAgICAgICAgICAgICBpZiAobWVzaCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbCA9IG51bGw7IC8vIHdpbGwgc2V0IHRoZSBl
bnRyeSBpbiB0aGUgbWFwIHRvIHVuZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5yZWxlYXNlVmVydGV4QXJyYXlPYmplY3QobWVzaCwgZm9yY2VEaXNwb3NlRWZmZWN0KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBtZXNoZXMgPSBzY2VuZS5tZXNo
ZXM7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBtZXNoZXNfMiA9IG1lc2hlczsg
X2kgPCBtZXNoZXNfMi5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1l
c2ggPSBtZXNoZXNfMltfaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFs
ID09PSB0aGlzICYmICFtZXNoLnNvdXJjZU1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1lc2gubWF0ZXJpYWwgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxl
YXNlVmVydGV4QXJyYXlPYmplY3QobWVzaCwgZm9yY2VEaXNwb3NlRWZmZWN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmRpc3Bvc2UoKTsKKyAgICAgICAgLy8gU2hh
ZGVyIGFyZSBrZXB0IGluIGNhY2hlIGZvciBmdXJ0aGVyIHVzZSBidXQgd2UgY2FuIGdldCByaWQg
b2YgdGhpcyBieSB1c2luZyBmb3JjZURpc3Bvc2VFZmZlY3QKKyAgICAgICAgaWYgKGZvcmNlRGlz
cG9zZUVmZmVjdCAmJiB0aGlzLl9lZmZlY3QpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fc3Rv
cmVFZmZlY3RPblN1Yk1lc2hlcykgeworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5kaXNw
b3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9lZmZlY3QgPSBudWxsOwor
ICAgICAgICB9CisgICAgICAgIC8vIENhbGxiYWNrCisgICAgICAgIHRoaXMub25EaXNwb3NlT2Jz
ZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIHRoaXMub25EaXNwb3NlT2Jz
ZXJ2YWJsZS5jbGVhcigpOworICAgICAgICBpZiAodGhpcy5fb25CaW5kT2JzZXJ2YWJsZSkgewor
ICAgICAgICAgICAgdGhpcy5fb25CaW5kT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9vblVuQmluZE9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIHRoaXMu
X29uVW5CaW5kT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIE1hdGVyaWFsLnByb3RvdHlwZS5yZWxlYXNlVmVydGV4QXJyYXlPYmpl
Y3QgPSBmdW5jdGlvbiAobWVzaCwgZm9yY2VEaXNwb3NlRWZmZWN0KSB7CisgICAgICAgIGlmICht
ZXNoLmdlb21ldHJ5KSB7CisgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSAobWVzaC5nZW9tZXRy
eSk7CisgICAgICAgICAgICBpZiAodGhpcy5fc3RvcmVFZmZlY3RPblN1Yk1lc2hlcykgeworICAg
ICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBtZXNoLnN1Yk1lc2hlczsgX2kgPCBf
YS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBfYVtf
aV07CisgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5Ll9yZWxlYXNlVmVydGV4QXJyYXlPYmpl
Y3Qoc3ViTWVzaC5fbWF0ZXJpYWxFZmZlY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoZm9y
Y2VEaXNwb3NlRWZmZWN0ICYmIHN1Yk1lc2guX21hdGVyaWFsRWZmZWN0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdWJNZXNoLl9tYXRlcmlhbEVmZmVjdC5kaXNwb3NlKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBnZW9tZXRyeS5fcmVsZWFzZVZlcnRleEFycmF5
T2JqZWN0KHRoaXMuX2VmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhpcyBtYXRlcmlhbAorICAgICAqIEByZXR1cm5z
IHRoZSBzZXJpYWxpemVkIG1hdGVyaWFsIG9iamVjdAorICAgICAqLworICAgIE1hdGVyaWFsLnBy
b3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxw
ZXIiXS5TZXJpYWxpemUodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEg
bWF0ZXJpYWwgZnJvbSBwYXJzZWQgbWF0ZXJpYWwgZGF0YQorICAgICAqIEBwYXJhbSBwYXJzZWRN
YXRlcmlhbCBkZWZpbmVzIHBhcnNlZCBtYXRlcmlhbCBkYXRhCisgICAgICogQHBhcmFtIHNjZW5l
IGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVz
IHRoZSByb290IFVSTCB0byB1c2UgdG8gbG9hZCB0ZXh0dXJlcworICAgICAqIEByZXR1cm5zIGEg
bmV3IG1hdGVyaWFsCisgICAgICovCisgICAgTWF0ZXJpYWwuUGFyc2UgPSBmdW5jdGlvbiAocGFy
c2VkTWF0ZXJpYWwsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIGlmICghcGFyc2VkTWF0ZXJp
YWwuY3VzdG9tVHlwZSkgeworICAgICAgICAgICAgcGFyc2VkTWF0ZXJpYWwuY3VzdG9tVHlwZSA9
ICJCQUJZTE9OLlN0YW5kYXJkTWF0ZXJpYWwiOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KHBhcnNlZE1hdGVyaWFsLmN1c3RvbVR5cGUgPT09ICJCQUJZTE9OLlBCUk1hdGVyaWFsIiAmJiBw
YXJzZWRNYXRlcmlhbC5vdmVybG9hZGVkQWxiZWRvKSB7CisgICAgICAgICAgICBwYXJzZWRNYXRl
cmlhbC5jdXN0b21UeXBlID0gIkJBQllMT04uTGVnYWN5UEJSTWF0ZXJpYWwiOworICAgICAgICAg
ICAgaWYgKCFCQUJZTE9OLkxlZ2FjeVBCUk1hdGVyaWFsKSB7CisgICAgICAgICAgICAgICAgX01p
c2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkxvZ2dlciJdLkVycm9yKCJZ
b3VyIHNjZW5lIGlzIHRyeWluZyB0byBsb2FkIGEgbGVnYWN5IHZlcnNpb24gb2YgdGhlIFBCUk1h
dGVyaWFsLCBwbGVhc2UsIGluY2x1ZGUgaXQgZnJvbSB0aGUgbWF0ZXJpYWxzIGxpYnJhcnkuIik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgdmFyIG1hdGVyaWFsVHlwZSA9IF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlRvb2xzIl0uSW5zdGFudGlhdGUocGFyc2VkTWF0ZXJpYWwuY3VzdG9tVHlw
ZSk7CisgICAgICAgIHJldHVybiBtYXRlcmlhbFR5cGUuUGFyc2UocGFyc2VkTWF0ZXJpYWwsIHNj
ZW5lLCByb290VXJsKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHRyaWFu
Z2xlIGZpbGwgbW9kZQorICAgICAqLworICAgIE1hdGVyaWFsLlRyaWFuZ2xlRmlsbE1vZGUgPSBf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRz
Il0uTUFURVJJQUxfVHJpYW5nbGVGaWxsTW9kZTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSB3aXJlZnJhbWUgbW9kZQorICAgICAqLworICAgIE1hdGVyaWFsLldpcmVGcmFtZUZpbGxNb2Rl
ID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0
YW50cyJdLk1BVEVSSUFMX1dpcmVGcmFtZUZpbGxNb2RlOworICAgIC8qKgorICAgICAqIFJldHVy
bnMgdGhlIHBvaW50IGZpbGwgbW9kZQorICAgICAqLworICAgIE1hdGVyaWFsLlBvaW50RmlsbE1v
ZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29u
c3RhbnRzIl0uTUFURVJJQUxfUG9pbnRGaWxsTW9kZTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IHRoZSBwb2ludCBsaXN0IGRyYXcgbW9kZQorICAgICAqLworICAgIE1hdGVyaWFsLlBvaW50TGlz
dERyYXdNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83
X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1BvaW50TGlzdERyYXdNb2RlOworICAgIC8qKgorICAg
ICAqIFJldHVybnMgdGhlIGxpbmUgbGlzdCBkcmF3IG1vZGUKKyAgICAgKi8KKyAgICBNYXRlcmlh
bC5MaW5lTGlzdERyYXdNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX0xpbmVMaXN0RHJhd01vZGU7CisgICAg
LyoqCisgICAgICogUmV0dXJucyB0aGUgbGluZSBsb29wIGRyYXcgbW9kZQorICAgICAqLworICAg
IE1hdGVyaWFsLkxpbmVMb29wRHJhd01vZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfTGluZUxvb3BEcmF3TW9k
ZTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsaW5lIHN0cmlwIGRyYXcgbW9kZQorICAg
ICAqLworICAgIE1hdGVyaWFsLkxpbmVTdHJpcERyYXdNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX0xpbmVT
dHJpcERyYXdNb2RlOworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHRyaWFuZ2xlIHN0cmlw
IGRyYXcgbW9kZQorICAgICAqLworICAgIE1hdGVyaWFsLlRyaWFuZ2xlU3RyaXBEcmF3TW9kZSA9
IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFu
dHMiXS5NQVRFUklBTF9UcmlhbmdsZVN0cmlwRHJhd01vZGU7CisgICAgLyoqCisgICAgICogUmV0
dXJucyB0aGUgdHJpYW5nbGUgZmFuIGRyYXcgbW9kZQorICAgICAqLworICAgIE1hdGVyaWFsLlRy
aWFuZ2xlRmFuRHJhd01vZGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVHJpYW5nbGVGYW5EcmF3TW9kZTsKKyAg
ICAvKioKKyAgICAgKiBTdG9yZXMgdGhlIGNsb2NrLXdpc2Ugc2lkZSBvcmllbnRhdGlvbgorICAg
ICAqLworICAgIE1hdGVyaWFsLkNsb2NrV2lzZVNpZGVPcmllbnRhdGlvbiA9IF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5NQVRFUklB
TF9DbG9ja1dpc2VTaWRlT3JpZW50YXRpb247CisgICAgLyoqCisgICAgICogU3RvcmVzIHRoZSBj
b3VudGVyIGNsb2NrLXdpc2Ugc2lkZSBvcmllbnRhdGlvbgorICAgICAqLworICAgIE1hdGVyaWFs
LkNvdW50ZXJDbG9ja1dpc2VTaWRlT3JpZW50YXRpb24gPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfQ291bnRlckNs
b2NrV2lzZVNpZGVPcmllbnRhdGlvbjsKKyAgICAvKioKKyAgICAgKiBUaGUgZGlydHkgdGV4dHVy
ZSBmbGFnIHZhbHVlCisgICAgICovCisgICAgTWF0ZXJpYWwuVGV4dHVyZURpcnR5RmxhZyA9IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMi
XS5NQVRFUklBTF9UZXh0dXJlRGlydHlGbGFnOworICAgIC8qKgorICAgICAqIFRoZSBkaXJ0eSBs
aWdodCBmbGFnIHZhbHVlCisgICAgICovCisgICAgTWF0ZXJpYWwuTGlnaHREaXJ0eUZsYWcgPSBf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3RhbnRz
Il0uTUFURVJJQUxfTGlnaHREaXJ0eUZsYWc7CisgICAgLyoqCisgICAgICogVGhlIGRpcnR5IGZy
ZXNuZWwgZmxhZyB2YWx1ZQorICAgICAqLworICAgIE1hdGVyaWFsLkZyZXNuZWxEaXJ0eUZsYWcg
PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29uc3Rh
bnRzIl0uTUFURVJJQUxfRnJlc25lbERpcnR5RmxhZzsKKyAgICAvKioKKyAgICAgKiBUaGUgZGly
dHkgYXR0cmlidXRlIGZsYWcgdmFsdWUKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5BdHRyaWJ1dGVz
RGlydHlGbGFnID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83
X19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX0F0dHJpYnV0ZXNEaXJ0eUZsYWc7CisgICAgLyoqCisg
ICAgICogVGhlIGRpcnR5IG1pc2MgZmxhZyB2YWx1ZQorICAgICAqLworICAgIE1hdGVyaWFsLk1p
c2NEaXJ0eUZsYWcgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzdfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfTWlzY0RpcnR5RmxhZzsKKyAgICAvKioKKyAgICAg
KiBUaGUgYWxsIGRpcnR5IGZsYWcgdmFsdWUKKyAgICAgKi8KKyAgICBNYXRlcmlhbC5BbGxEaXJ0
eUZsYWcgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
Q29uc3RhbnRzIl0uTUFURVJJQUxfQWxsRGlydHlGbGFnOworICAgIE1hdGVyaWFsLl9BbGxEaXJ0
eUNhbGxCYWNrID0gZnVuY3Rpb24gKGRlZmluZXMpIHsgcmV0dXJuIGRlZmluZXMubWFya0FsbEFz
RGlydHkoKTsgfTsKKyAgICBNYXRlcmlhbC5fSW1hZ2VQcm9jZXNzaW5nRGlydHlDYWxsQmFjayA9
IGZ1bmN0aW9uIChkZWZpbmVzKSB7IHJldHVybiBkZWZpbmVzLm1hcmtBc0ltYWdlUHJvY2Vzc2lu
Z0RpcnR5KCk7IH07CisgICAgTWF0ZXJpYWwuX1RleHR1cmVEaXJ0eUNhbGxCYWNrID0gZnVuY3Rp
b24gKGRlZmluZXMpIHsgcmV0dXJuIGRlZmluZXMubWFya0FzVGV4dHVyZXNEaXJ0eSgpOyB9Owor
ICAgIE1hdGVyaWFsLl9GcmVzbmVsRGlydHlDYWxsQmFjayA9IGZ1bmN0aW9uIChkZWZpbmVzKSB7
IHJldHVybiBkZWZpbmVzLm1hcmtBc0ZyZXNuZWxEaXJ0eSgpOyB9OworICAgIE1hdGVyaWFsLl9N
aXNjRGlydHlDYWxsQmFjayA9IGZ1bmN0aW9uIChkZWZpbmVzKSB7IHJldHVybiBkZWZpbmVzLm1h
cmtBc01pc2NEaXJ0eSgpOyB9OworICAgIE1hdGVyaWFsLl9MaWdodHNEaXJ0eUNhbGxCYWNrID0g
ZnVuY3Rpb24gKGRlZmluZXMpIHsgcmV0dXJuIGRlZmluZXMubWFya0FzTGlnaHREaXJ0eSgpOyB9
OworICAgIE1hdGVyaWFsLl9BdHRyaWJ1dGVEaXJ0eUNhbGxCYWNrID0gZnVuY3Rpb24gKGRlZmlu
ZXMpIHsgcmV0dXJuIGRlZmluZXMubWFya0FzQXR0cmlidXRlc0RpcnR5KCk7IH07CisgICAgTWF0
ZXJpYWwuX0ZyZXNuZWxBbmRNaXNjRGlydHlDYWxsQmFjayA9IGZ1bmN0aW9uIChkZWZpbmVzKSB7
CisgICAgICAgIE1hdGVyaWFsLl9GcmVzbmVsRGlydHlDYWxsQmFjayhkZWZpbmVzKTsKKyAgICAg
ICAgTWF0ZXJpYWwuX01pc2NEaXJ0eUNhbGxCYWNrKGRlZmluZXMpOworICAgIH07CisgICAgTWF0
ZXJpYWwuX1RleHR1cmVBbmRNaXNjRGlydHlDYWxsQmFjayA9IGZ1bmN0aW9uIChkZWZpbmVzKSB7
CisgICAgICAgIE1hdGVyaWFsLl9UZXh0dXJlRGlydHlDYWxsQmFjayhkZWZpbmVzKTsKKyAgICAg
ICAgTWF0ZXJpYWwuX01pc2NEaXJ0eUNhbGxCYWNrKGRlZmluZXMpOworICAgIH07CisgICAgTWF0
ZXJpYWwuX0RpcnR5Q2FsbGJhY2tBcnJheSA9IFtdOworICAgIE1hdGVyaWFsLl9SdW5EaXJ0eUNh
bGxCYWNrcyA9IGZ1bmN0aW9uIChkZWZpbmVzKSB7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwg
X2EgPSBNYXRlcmlhbC5fRGlydHlDYWxsYmFja0FycmF5OyBfaSA8IF9hLmxlbmd0aDsgX2krKykg
eworICAgICAgICAgICAgdmFyIGNiID0gX2FbX2ldOworICAgICAgICAgICAgY2IoZGVmaW5lcyk7
CisgICAgICAgIH0KKyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0ZXJpYWwu
cHJvdG90eXBlLCAiaWQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0
ZXJpYWwucHJvdG90eXBlLCAidW5pcXVlSWQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgp
CisgICAgXSwgTWF0ZXJpYWwucHJvdG90eXBlLCAibmFtZSIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBNYXRlcmlhbC5wcm90b3R5cGUsICJjaGVja1JlYWR5T25FdmVyeUNh
bGwiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0ZXJpYWwucHJvdG90
eXBlLCAiY2hlY2tSZWFkeU9ubHlPbmNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIE1hdGVyaWFsLnByb3RvdHlwZSwgInN0YXRlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emUiXSkoImFscGhhIikKKyAgICBdLCBNYXRlcmlhbC5wcm90b3R5cGUsICJfYWxwaGEiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgiYmFja0ZhY2VDdWxsaW5nIikKKyAgICBdLCBNYXRlcmlh
bC5wcm90b3R5cGUsICJfYmFja0ZhY2VDdWxsaW5nIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIE1hdGVyaWFsLnByb3RvdHlwZSwgInNpZGVPcmllbnRhdGlvbiIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCJhbHBoYU1vZGUiKQorICAgIF0sIE1hdGVyaWFsLnByb3Rv
dHlwZSwgIl9hbHBoYU1vZGUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
TWF0ZXJpYWwucHJvdG90eXBlLCAiX25lZWREZXB0aFByZVBhc3MiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0ZXJpYWwucHJvdG90eXBlLCAiZGlzYWJsZURlcHRoV3Jp
dGUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0ZXJpYWwucHJvdG90
eXBlLCAiZm9yY2VEZXB0aFdyaXRlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIE1hdGVyaWFsLnByb3RvdHlwZSwgInNlcGFyYXRlQ3VsbGluZ1Bhc3MiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgiZm9nRW5hYmxlZCIpCisgICAgXSwgTWF0ZXJpYWwucHJvdG90eXBl
LCAiX2ZvZ0VuYWJsZWQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0
ZXJpYWwucHJvdG90eXBlLCAicG9pbnRTaXplIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIE1hdGVyaWFsLnByb3RvdHlwZSwgInpPZmZzZXQiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0ZXJpYWwucHJvdG90eXBlLCAid2lyZWZyYW1lIiwgbnVs
bCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBNYXRlcmlhbC5wcm90b3R5cGUsICJwb2lu
dHNDbG91ZCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgTWF0ZXJpYWwucHJv
dG90eXBlLCAiZmlsbE1vZGUiLCBudWxsKTsKKyAgICByZXR1cm4gTWF0ZXJpYWw7Cit9KCkpOwor
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9tYXRlcmlhbERlZmluZXMudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L01hdGVyaWFscy9tYXRlcmlhbERlZmluZXMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTWF0ZXJpYWxEZWZp
bmVzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1hdGVyaWFsRGVmaW5l
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWF0ZXJpYWxEZWZpbmVzOyB9KTsKKy8qKgorICogTWFu
YWdlcyB0aGUgZGVmaW5lcyBmb3IgdGhlIE1hdGVyaWFsCisgKi8KK3ZhciBNYXRlcmlhbERlZmlu
ZXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gTWF0ZXJpYWxE
ZWZpbmVzKCkgeworICAgICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICAgICAgdGhpcy5fYXJlTGlnaHRzRGlydHkgPSB0cnVlOworICAgICAgICAv
KiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9hcmVMaWdodHNEaXNwb3NlZCA9IGZhbHNlOwor
ICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9hcmVBdHRyaWJ1dGVzRGlydHkg
PSB0cnVlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9hcmVUZXh0dXJl
c0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fYXJl
RnJlc25lbERpcnR5ID0gdHJ1ZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhp
cy5fYXJlTWlzY0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAg
dGhpcy5fYXJlSW1hZ2VQcm9jZXNzaW5nRGlydHkgPSB0cnVlOworICAgICAgICAvKiogQGhpZGRl
biAqLworICAgICAgICB0aGlzLl9ub3JtYWxzID0gZmFsc2U7CisgICAgICAgIC8qKiBAaGlkZGVu
ICovCisgICAgICAgIHRoaXMuX3V2cyA9IGZhbHNlOworICAgICAgICAvKiogQGhpZGRlbiAqLwor
ICAgICAgICB0aGlzLl9uZWVkTm9ybWFscyA9IGZhbHNlOworICAgICAgICAvKiogQGhpZGRlbiAq
LworICAgICAgICB0aGlzLl9uZWVkVVZzID0gZmFsc2U7CisgICAgfQorICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShNYXRlcmlhbERlZmluZXMucHJvdG90eXBlLCAiaXNEaXJ0eSIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwgbmVlZHMgdG8gYmUg
cmUtY2FsY3VsYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEaXJ0eTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqCisgICAgICogTWFya3MgdGhlIG1hdGVyaWFsIHRvIGluZGljYXRlIHRoYXQgaXQgaGFzIGJl
ZW4gcmUtY2FsY3VsYXRlZAorICAgICAqLworICAgIE1hdGVyaWFsRGVmaW5lcy5wcm90b3R5cGUu
bWFya0FzUHJvY2Vzc2VkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9pc0RpcnR5ID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX2FyZUF0dHJpYnV0ZXNEaXJ0eSA9IGZhbHNlOworICAgICAg
ICB0aGlzLl9hcmVUZXh0dXJlc0RpcnR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2FyZUZyZXNu
ZWxEaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9hcmVMaWdodHNEaXJ0eSA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl9hcmVMaWdodHNEaXNwb3NlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9h
cmVNaXNjRGlydHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fYXJlSW1hZ2VQcm9jZXNzaW5nRGly
dHkgPSBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1hcmtzIHRoZSBtYXRlcmlhbCB0
byBpbmRpY2F0ZSB0aGF0IGl0IG5lZWRzIHRvIGJlIHJlLWNhbGN1bGF0ZWQKKyAgICAgKi8KKyAg
ICBNYXRlcmlhbERlZmluZXMucHJvdG90eXBlLm1hcmtBc1VucHJvY2Vzc2VkID0gZnVuY3Rpb24g
KCkgeworICAgICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIE1hcmtzIHRoZSBtYXRlcmlhbCB0byBpbmRpY2F0ZSBhbGwgb2YgaXRzIGRlZmluZXMgbmVl
ZCB0byBiZSByZS1jYWxjdWxhdGVkCisgICAgICovCisgICAgTWF0ZXJpYWxEZWZpbmVzLnByb3Rv
dHlwZS5tYXJrQWxsQXNEaXJ0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fYXJlVGV4
dHVyZXNEaXJ0eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2FyZUF0dHJpYnV0ZXNEaXJ0eSA9IHRy
dWU7CisgICAgICAgIHRoaXMuX2FyZUxpZ2h0c0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5f
YXJlRnJlc25lbERpcnR5ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fYXJlTWlzY0RpcnR5ID0gdHJ1
ZTsKKyAgICAgICAgdGhpcy5fYXJlSW1hZ2VQcm9jZXNzaW5nRGlydHkgPSB0cnVlOworICAgICAg
ICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1hcmtzIHRo
ZSBtYXRlcmlhbCB0byBpbmRpY2F0ZSB0aGF0IGltYWdlIHByb2Nlc3NpbmcgbmVlZHMgdG8gYmUg
cmUtY2FsY3VsYXRlZAorICAgICAqLworICAgIE1hdGVyaWFsRGVmaW5lcy5wcm90b3R5cGUubWFy
a0FzSW1hZ2VQcm9jZXNzaW5nRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2Fy
ZUltYWdlUHJvY2Vzc2luZ0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5faXNEaXJ0eSA9IHRy
dWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNYXJrcyB0aGUgbWF0ZXJpYWwgdG8gaW5kaWNh
dGUgdGhlIGxpZ2h0cyBuZWVkIHRvIGJlIHJlLWNhbGN1bGF0ZWQKKyAgICAgKiBAcGFyYW0gZGlz
cG9zZWQgRGVmaW5lcyB3aGV0aGVyIHRoZSBsaWdodCBpcyBkaXJ0eSBkdWUgdG8gZGlzcG9zZSBv
ciBub3QKKyAgICAgKi8KKyAgICBNYXRlcmlhbERlZmluZXMucHJvdG90eXBlLm1hcmtBc0xpZ2h0
RGlydHkgPSBmdW5jdGlvbiAoZGlzcG9zZWQpIHsKKyAgICAgICAgaWYgKGRpc3Bvc2VkID09PSB2
b2lkIDApIHsgZGlzcG9zZWQgPSBmYWxzZTsgfQorICAgICAgICB0aGlzLl9hcmVMaWdodHNEaXJ0
eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2FyZUxpZ2h0c0Rpc3Bvc2VkID0gdGhpcy5fYXJlTGln
aHRzRGlzcG9zZWQgfHwgZGlzcG9zZWQ7CisgICAgICAgIHRoaXMuX2lzRGlydHkgPSB0cnVlOwor
ICAgIH07CisgICAgLyoqCisgICAgICogTWFya3MgdGhlIGF0dHJpYnV0ZSBzdGF0ZSBhcyBjaGFu
Z2VkCisgICAgICovCisgICAgTWF0ZXJpYWxEZWZpbmVzLnByb3RvdHlwZS5tYXJrQXNBdHRyaWJ1
dGVzRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2FyZUF0dHJpYnV0ZXNEaXJ0
eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2lzRGlydHkgPSB0cnVlOworICAgIH07CisgICAgLyoq
CisgICAgICogTWFya3MgdGhlIHRleHR1cmUgc3RhdGUgYXMgY2hhbmdlZAorICAgICAqLworICAg
IE1hdGVyaWFsRGVmaW5lcy5wcm90b3R5cGUubWFya0FzVGV4dHVyZXNEaXJ0eSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5fYXJlVGV4dHVyZXNEaXJ0eSA9IHRydWU7CisgICAgICAgIHRo
aXMuX2lzRGlydHkgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogTWFya3MgdGhlIGZy
ZXNuZWwgc3RhdGUgYXMgY2hhbmdlZAorICAgICAqLworICAgIE1hdGVyaWFsRGVmaW5lcy5wcm90
b3R5cGUubWFya0FzRnJlc25lbERpcnR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9h
cmVGcmVzbmVsRGlydHkgPSB0cnVlOworICAgICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIE1hcmtzIHRoZSBtaXNjIHN0YXRlIGFzIGNoYW5nZWQKKyAg
ICAgKi8KKyAgICBNYXRlcmlhbERlZmluZXMucHJvdG90eXBlLm1hcmtBc01pc2NEaXJ0eSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fYXJlTWlzY0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAg
dGhpcy5faXNEaXJ0eSA9IHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWJ1aWxkcyB0
aGUgbWF0ZXJpYWwgZGVmaW5lcworICAgICAqLworICAgIE1hdGVyaWFsRGVmaW5lcy5wcm90b3R5
cGUucmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2tleXMpIHsKKyAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9rZXlzOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2tl
eXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IE9iamVjdC5rZXlzKHRoaXMp
OyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGtleSA9IF9hW19pXTsK
KyAgICAgICAgICAgIGlmIChrZXlbMF0gPT09ICJfIikgeworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fa2V5cy5wdXNoKGtleSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyBpZiB0d28gbWF0ZXJp
YWwgZGVmaW5lcyBhcmUgZXF1YWwKKyAgICAgKiBAcGFyYW0gb3RoZXIgLSBBIG1hdGVyaWFsIGRl
ZmluZSBpbnN0YW5jZSB0byBjb21wYXJlIHRvCisgICAgICogQHJldHVybnMgLSBCb29sZWFuIGlu
ZGljYXRpbmcgaWYgdGhlIG1hdGVyaWFsIGRlZmluZXMgYXJlIGVxdWFsICh0cnVlKSBvciBub3Qg
KGZhbHNlKQorICAgICAqLworICAgIE1hdGVyaWFsRGVmaW5lcy5wcm90b3R5cGUuaXNFcXVhbCA9
IGZ1bmN0aW9uIChvdGhlcikgeworICAgICAgICBpZiAodGhpcy5fa2V5cy5sZW5ndGggIT09IG90
aGVyLl9rZXlzLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9rZXlzLmxlbmd0aDsg
aW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHByb3AgPSB0aGlzLl9rZXlzW2luZGV4XTsKKyAg
ICAgICAgICAgIGlmICh0aGlzW3Byb3BdICE9PSBvdGhlcltwcm9wXSkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lcyB0aGlzIGluc3RhbmNlJ3Mg
ZGVmaW5lcyB0byBhbm90aGVyIGluc3RhbmNlCisgICAgICogQHBhcmFtIG90aGVyIC0gbWF0ZXJp
YWwgZGVmaW5lcyB0byBjbG9uZSB2YWx1ZXMgdG8KKyAgICAgKi8KKyAgICBNYXRlcmlhbERlZmlu
ZXMucHJvdG90eXBlLmNsb25lVG8gPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAgICAgaWYgKHRo
aXMuX2tleXMubGVuZ3RoICE9PSBvdGhlci5fa2V5cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIG90
aGVyLl9rZXlzID0gdGhpcy5fa2V5cy5zbGljZSgwKTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fa2V5cy5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgIHZhciBwcm9wID0gdGhpcy5fa2V5c1tpbmRleF07CisgICAgICAgICAgICBvdGhl
cltwcm9wXSA9IHRoaXNbcHJvcF07CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAq
IFJlc2V0cyB0aGUgbWF0ZXJpYWwgZGVmaW5lIHZhbHVlcworICAgICAqLworICAgIE1hdGVyaWFs
RGVmaW5lcy5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9rZXlzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgdmFyIHByb3AgPSB0aGlzLl9rZXlzW2luZGV4XTsKKyAgICAgICAgICAgIHZhciB0eXBl
ID0gdHlwZW9mIHRoaXNbcHJvcF07CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlICJudW1iZXIiOgorICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3Bd
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAi
c3RyaW5nIjoKKyAgICAgICAgICAgICAgICAgICAgdGhpc1twcm9wXSA9ICIiOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICB0aGlzW3Byb3BdID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0
cyB0aGUgbWF0ZXJpYWwgZGVmaW5lIHZhbHVlcyB0byBhIHN0cmluZworICAgICAqIEByZXR1cm5z
IC0gU3RyaW5nIG9mIG1hdGVyaWFsIGRlZmluZSBpbmZvcm1hdGlvbgorICAgICAqLworICAgIE1h
dGVyaWFsRGVmaW5lcy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSAiIjsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRo
aXMuX2tleXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgcHJvcCA9IHRoaXMu
X2tleXNbaW5kZXhdOworICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpc1twcm9wXTsKKyAgICAg
ICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlOworICAgICAgICAgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICAgICAgICAgICAgY2FzZSAibnVtYmVyIjoKKyAgICAgICAgICAgICAgICBjYXNl
ICJzdHJpbmciOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIiNkZWZpbmUgIiArIHBy
b3AgKyAiICIgKyB2YWx1ZSArICJcbiI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIjZGVmaW5lICIgKyBwcm9wICsgIlxu
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07Cisg
ICAgcmV0dXJuIE1hdGVyaWFsRGVmaW5lczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsRmxhZ3MudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvbWF0ZXJpYWxGbGFncy50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogTWF0ZXJpYWxGbGFncyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNYXRlcmlhbEZsYWdzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNYXRlcmlhbEZs
YWdzOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2lu
ZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVz
L2NvbnN0YW50cy50cyIpOworCisKKy8qKgorICogVGhpcyBncm91cHMgYWxsIHRoZSBmbGFncyB1
c2VkIHRvIGNvbnRyb2wgdGhlIG1hdGVyaWFscyBjaGFubmVsLgorICovCit2YXIgTWF0ZXJpYWxG
bGFncyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBNYXRlcmlh
bEZsYWdzKCkgeworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0ZXJpYWxGbGFn
cywgIkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFy
ZSBkaWZmdXNlIHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
RGlmZnVzZVRleHR1cmVFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX0RpZmZ1c2VUZXh0dXJlRW5hYmxlZCA9
PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9EaWZmdXNlVGV4dHVyZUVuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAg
IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5N
YXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZyk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbEZsYWdz
LCAiQW1iaWVudFRleHR1cmVFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQXJl
IGFtYmllbnQgdGV4dHVyZXMgZW5hYmxlZCBpbiB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9B
bWJpZW50VGV4dHVyZUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fQW1iaWVudFRleHR1cmVFbmFibGVkID09
PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX0FtYmllbnRUZXh0dXJlRW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAg
X0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLk1h
cmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGlydHlGbGFnKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdGVyaWFsRmxhZ3Ms
ICJPcGFjaXR5VGV4dHVyZUVuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBcmUg
b3BhY2l0eSB0ZXh0dXJlcyBlbmFibGVkIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX09w
YWNpdHlUZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9PcGFjaXR5VGV4dHVyZUVuYWJsZWQgPT09
IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGhpcy5fT3BhY2l0eVRleHR1cmVFbmFibGVkID0gdmFsdWU7CisgICAgICAgICAgICBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5lIl0uTWFy
a0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RleHR1cmVEaXJ0eUZsYWcpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0ZXJpYWxGbGFncywg
IlJlZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFy
ZSByZWZsZWN0aW9uIHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fUmVmbGVjdGlvblRleHR1cmVFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX1JlZmxlY3Rpb25UZXh0dXJl
RW5hYmxlZCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQgPSB2YWx1ZTsK
KyAgICAgICAgICAgIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJFbmdpbmUiXS5NYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVGV4dHVyZURp
cnR5RmxhZyk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShN
YXRlcmlhbEZsYWdzLCAiRW1pc3NpdmVUZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEFyZSBlbWlzc2l2ZSB0ZXh0dXJlcyBlbmFibGVkIGluIHRoZSBhcHBsaWNhdGlv
bi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX0VtaXNzaXZlVGV4dHVyZUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fRW1pc3NpdmVU
ZXh0dXJlRW5hYmxlZCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9FbWlzc2l2ZVRleHR1cmVFbmFibGVkID0gdmFs
dWU7CisgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siRW5naW5lIl0uTWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RleHR1
cmVEaXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoTWF0ZXJpYWxGbGFncywgIlNwZWN1bGFyVGV4dHVyZUVuYWJsZWQiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBBcmUgc3BlY3VsYXIgdGV4dHVyZXMgZW5hYmxlZCBpbiB0aGUgYXBwbGlj
YXRpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9TcGVjdWxhclRleHR1cmVFbmFibGVkOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX1NwZWN1
bGFyVGV4dHVyZUVuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fU3BlY3VsYXJUZXh0dXJlRW5hYmxlZCA9
IHZhbHVlOworICAgICAgICAgICAgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVuZ2luZSJdLk1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9U
ZXh0dXJlRGlydHlGbGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KE1hdGVyaWFsRmxhZ3MsICJCdW1wVGV4dHVyZUVuYWJsZWQiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBBcmUgYnVtcCB0ZXh0dXJlcyBlbmFibGVkIGluIHRoZSBhcHBsaWNhdGlv
bi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX0J1bXBUZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9CdW1wVGV4dHVyZUVu
YWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5fQnVtcFRleHR1cmVFbmFibGVkID0gdmFsdWU7CisgICAgICAg
ICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRW5naW5l
Il0uTWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RleHR1cmVEaXJ0eUZsYWcp
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0ZXJpYWxG
bGFncywgIkxpZ2h0bWFwVGV4dHVyZUVuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBBcmUgbGlnaHRtYXAgdGV4dHVyZXMgZW5hYmxlZCBpbiB0aGUgYXBwbGljYXRpb24uCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9MaWdodG1hcFRleHR1cmVFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX0xpZ2h0bWFwVGV4dHVyZUVu
YWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5fTGlnaHRtYXBUZXh0dXJlRW5hYmxlZCA9IHZhbHVlOworICAg
ICAgICAgICAgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVu
Z2luZSJdLk1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGlydHlG
bGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdGVy
aWFsRmxhZ3MsICJSZWZyYWN0aW9uVGV4dHVyZUVuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBBcmUgcmVmcmFjdGlvbiB0ZXh0dXJlcyBlbmFibGVkIGluIHRoZSBhcHBsaWNhdGlv
bi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX1JlZnJhY3Rpb25UZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9SZWZyYWN0
aW9uVGV4dHVyZUVuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fUmVmcmFjdGlvblRleHR1cmVFbmFibGVk
ID0gdmFsdWU7CisgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRW5naW5lIl0uTWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLk1BVEVSSUFM
X1RleHR1cmVEaXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoTWF0ZXJpYWxGbGFncywgIkNvbG9yR3JhZGluZ1RleHR1cmVFbmFibGVkIiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogQXJlIGNvbG9yIGdyYWRpbmcgdGV4dHVyZXMgZW5hYmxl
ZCBpbiB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9Db2xvckdyYWRpbmdUZXh0dXJlRW5hYmxl
ZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9Db2xvckdyYWRpbmdUZXh0dXJlRW5hYmxlZCA9PT0gdmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9D
b2xvckdyYWRpbmdUZXh0dXJlRW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAgX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVuZ2luZSJdLk1hcmtBbGxNYXRl
cmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGlydHlGbGFnKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdGVyaWFsRmxhZ3MsICJGcmVzbmVs
RW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFyZSBmcmVzbmVscyBlbmFibGVk
IGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX0ZyZXNuZWxFbmFibGVkOworICAgICAgICB9
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMu
X0ZyZXNuZWxFbmFibGVkID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX0ZyZXNuZWxFbmFibGVkID0gdmFsdWU7Cisg
ICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RW5naW5lIl0uTWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX0ZyZXNuZWxEaXJ0
eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0
ZXJpYWxGbGFncywgIkNsZWFyQ29hdFRleHR1cmVFbmFibGVkIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogQXJlIGNsZWFyIGNvYXQgdGV4dHVyZXMgZW5hYmxlZCBpbiB0aGUgYXBwbGljYXRp
b24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9DbGVhckNvYXRUZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9DbGVhckNv
YXRUZXh0dXJlRW5hYmxlZCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9DbGVhckNvYXRUZXh0dXJlRW5hYmxlZCA9
IHZhbHVlOworICAgICAgICAgICAgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVuZ2luZSJdLk1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9U
ZXh0dXJlRGlydHlGbGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KE1hdGVyaWFsRmxhZ3MsICJDbGVhckNvYXRCdW1wVGV4dHVyZUVuYWJsZWQiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBBcmUgY2xlYXIgY29hdCBidW1wIHRleHR1cmVzIGVuYWJs
ZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fQ2xlYXJDb2F0QnVtcFRleHR1cmVFbmFi
bGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX0NsZWFyQ29hdEJ1bXBUZXh0dXJlRW5hYmxlZCA9PT0gdmFsdWUpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9DbGVhckNvYXRCdW1wVGV4dHVyZUVuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIF9Fbmdp
bmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5NYXJrQWxs
TWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZyk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbEZsYWdzLCAiQ2xl
YXJDb2F0VGludFRleHR1cmVFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQXJl
IGNsZWFyIGNvYXQgdGludCB0ZXh0dXJlcyBlbmFibGVkIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX0NsZWFyQ29hdFRpbnRUZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9DbGVhckNvYXRU
aW50VGV4dHVyZUVuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fQ2xlYXJDb2F0VGludFRleHR1cmVFbmFi
bGVkID0gdmFsdWU7CisgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siRW5naW5lIl0uTWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLk1BVEVS
SUFMX1RleHR1cmVEaXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoTWF0ZXJpYWxGbGFncywgIlNoZWVuVGV4dHVyZUVuYWJsZWQiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBBcmUgc2hlZW4gdGV4dHVyZXMgZW5hYmxlZCBpbiB0aGUgYXBw
bGljYXRpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9TaGVlblRleHR1cmVFbmFibGVkOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX1NoZWVu
VGV4dHVyZUVuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fU2hlZW5UZXh0dXJlRW5hYmxlZCA9IHZhbHVl
OworICAgICAgICAgICAgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkVuZ2luZSJdLk1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0dXJl
RGlydHlGbGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KE1hdGVyaWFsRmxhZ3MsICJBbmlzb3Ryb3BpY1RleHR1cmVFbmFibGVkIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogQXJlIGFuaXNvdHJvcGljIHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFw
cGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fQW5pc290cm9waWNUZXh0dXJlRW5hYmxlZDsKKyAgICAgICAg
fSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9Bbmlzb3Ryb3BpY1RleHR1cmVFbmFibGVkID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX0FuaXNvdHJvcGljVGV4
dHVyZUVuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5NYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29uc3RhbnRz
Il0uTUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZyk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbEZsYWdzLCAiVGhpY2tuZXNzVGV4dHVyZUVuYWJs
ZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBcmUgdGhpY2tuZXNzIHRleHR1cmVzIGVu
YWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fVGhpY2tuZXNzVGV4dHVyZUVuYWJs
ZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fVGhpY2tuZXNzVGV4dHVyZUVuYWJsZWQgPT09IHZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fVGhp
Y2tuZXNzVGV4dHVyZUVuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIF9FbmdpbmVzX2VuZ2lu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFbmdpbmUiXS5NYXJrQWxsTWF0ZXJpYWxz
QXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
Q29uc3RhbnRzIl0uTUFURVJJQUxfVGV4dHVyZURpcnR5RmxhZyk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIC8vIEZsYWdzIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgYSB0eXBlIG9mIHRleHR1
cmUgZm9yIGFsbCBTdGFuZGFyZCBNYXRlcmlhbHMKKyAgICBNYXRlcmlhbEZsYWdzLl9EaWZmdXNl
VGV4dHVyZUVuYWJsZWQgPSB0cnVlOworICAgIE1hdGVyaWFsRmxhZ3MuX0FtYmllbnRUZXh0dXJl
RW5hYmxlZCA9IHRydWU7CisgICAgTWF0ZXJpYWxGbGFncy5fT3BhY2l0eVRleHR1cmVFbmFibGVk
ID0gdHJ1ZTsKKyAgICBNYXRlcmlhbEZsYWdzLl9SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQgPSB0
cnVlOworICAgIE1hdGVyaWFsRmxhZ3MuX0VtaXNzaXZlVGV4dHVyZUVuYWJsZWQgPSB0cnVlOwor
ICAgIE1hdGVyaWFsRmxhZ3MuX1NwZWN1bGFyVGV4dHVyZUVuYWJsZWQgPSB0cnVlOworICAgIE1h
dGVyaWFsRmxhZ3MuX0J1bXBUZXh0dXJlRW5hYmxlZCA9IHRydWU7CisgICAgTWF0ZXJpYWxGbGFn
cy5fTGlnaHRtYXBUZXh0dXJlRW5hYmxlZCA9IHRydWU7CisgICAgTWF0ZXJpYWxGbGFncy5fUmVm
cmFjdGlvblRleHR1cmVFbmFibGVkID0gdHJ1ZTsKKyAgICBNYXRlcmlhbEZsYWdzLl9Db2xvckdy
YWRpbmdUZXh0dXJlRW5hYmxlZCA9IHRydWU7CisgICAgTWF0ZXJpYWxGbGFncy5fRnJlc25lbEVu
YWJsZWQgPSB0cnVlOworICAgIE1hdGVyaWFsRmxhZ3MuX0NsZWFyQ29hdFRleHR1cmVFbmFibGVk
ID0gdHJ1ZTsKKyAgICBNYXRlcmlhbEZsYWdzLl9DbGVhckNvYXRCdW1wVGV4dHVyZUVuYWJsZWQg
PSB0cnVlOworICAgIE1hdGVyaWFsRmxhZ3MuX0NsZWFyQ29hdFRpbnRUZXh0dXJlRW5hYmxlZCA9
IHRydWU7CisgICAgTWF0ZXJpYWxGbGFncy5fU2hlZW5UZXh0dXJlRW5hYmxlZCA9IHRydWU7Cisg
ICAgTWF0ZXJpYWxGbGFncy5fQW5pc290cm9waWNUZXh0dXJlRW5hYmxlZCA9IHRydWU7CisgICAg
TWF0ZXJpYWxGbGFncy5fVGhpY2tuZXNzVGV4dHVyZUVuYWJsZWQgPSB0cnVlOworICAgIHJldHVy
biBNYXRlcmlhbEZsYWdzOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRl
cmlhbHMvbWF0ZXJpYWxIZWxwZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogTWF0ZXJpYWxIZWxwZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTWF0ZXJpYWxIZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1hdGVyaWFsSGVscGVy
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2Vy
ICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5l
U3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVz
aGVzL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0xpZ2h0c19saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTGlnaHRzL2xpZ2h0ICovICIuL0xpZ2h0cy9saWdodC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRo
LmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKworCisKKworCisKKy8qKgorICog
IlN0YXRpYyBDbGFzcyIgY29udGFpbmluZyB0aGUgbW9zdCBjb21tb25seSB1c2VkIGhlbHBlciB3
aGlsZSBkZWFsaW5nIHdpdGggbWF0ZXJpYWwgZm9yCisgKiByZW5kZXJpbmcgcHVycG9zZS4KKyAq
CisgKiBJdCBjb250YWlucyB0aGUgYmFzaWMgdG9vbHMgdG8gaGVscCBkZWZpbmluZyBkZWZpbmVz
LCBiaW5kaW5nIHVuaWZvcm0gZm9yIHRoZSBjb21tb24gcGFydCBvZiB0aGUgbWF0ZXJpYWxzLgor
ICoKKyAqIFRoaXMgd29ya3MgYnkgY29udmVudGlvbiBpbiBCYWJ5bG9uSlMgYnV0IGlzIG1lYW50
IHRvIGJlIHVzZSBvbmx5IHdpdGggc2hhZGVyIGZvbGxvd2luZyB0aGUgaW4gcGxhY2UgbmFtaW5n
IHJ1bGVzIGFuZCBjb252ZW50aW9ucy4KKyAqLwordmFyIE1hdGVyaWFsSGVscGVyID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIE1hdGVyaWFsSGVscGVyKCkgewor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBCaW5kIHRoZSBjdXJyZW50IHZpZXcgcG9zaXRpb24gdG8g
YW4gZWZmZWN0LgorICAgICAqIEBwYXJhbSBlZmZlY3QgVGhlIGVmZmVjdCB0byBiZSBib3VuZAor
ICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhlIGV5ZXMgcG9zaXRpb24gaXMgdXNlZCBm
cm9tCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuQmluZEV5ZVBvc2l0aW9uID0gZnVuY3Rp
b24gKGVmZmVjdCwgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lLl9mb3JjZWRWaWV3UG9zaXRp
b24pIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRWZWN0b3IzKCJ2RXllUG9zaXRpb24iLCBzY2Vu
ZS5fZm9yY2VkVmlld1Bvc2l0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgZ2xvYmFsUG9zaXRpb24gPSBzY2VuZS5hY3RpdmVDYW1lcmEuZ2xvYmFsUG9z
aXRpb247CisgICAgICAgIGlmICghZ2xvYmFsUG9zaXRpb24pIHsKKyAgICAgICAgICAgIC8vIFVz
ZSBXZWJWUkZyZWVjYW1lcmEncyBkZXZpY2UgcG9zaXRpb24gYXMgZ2xvYmFsIHBvc2l0aW9uIGlz
IG5vdCBpdCdzIGFjdHVhbCBwb3NpdGlvbiBpbiBiYWJ5bG9uIHNwYWNlCisgICAgICAgICAgICBn
bG9iYWxQb3NpdGlvbiA9IHNjZW5lLmFjdGl2ZUNhbWVyYS5kZXZpY2VQb3NpdGlvbjsKKyAgICAg
ICAgfQorICAgICAgICBlZmZlY3Quc2V0VmVjdG9yMygidkV5ZVBvc2l0aW9uIiwgc2NlbmUuX21p
cnJvcmVkQ2FtZXJhUG9zaXRpb24gPyBzY2VuZS5fbWlycm9yZWRDYW1lcmFQb3NpdGlvbiA6IGds
b2JhbFBvc2l0aW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEhlbHBzIHByZXBhcmluZyB0
aGUgZGVmaW5lcyB2YWx1ZXMgYWJvdXQgdGhlIFVWcyBpbiB1c2VkIGluIHRoZSBlZmZlY3QuCisg
ICAgICogVVZzIGFyZSBzaGFyZWQgYXMgbXVjaCBhcyB3ZSBjYW4gYWNjcm9zcyBjaGFubmVscyBp
biB0aGUgc2hhZGVycy4KKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBUaGUgdGV4dHVyZSB3ZSBhcmUg
cHJlcGFyaW5nIHRoZSBVVnMgZm9yCisgICAgICogQHBhcmFtIGRlZmluZXMgVGhlIGRlZmluZXMg
dG8gdXBkYXRlCisgICAgICogQHBhcmFtIGtleSBUaGUgY2hhbm5lbCBrZXkgImRpZmZ1c2UiLCAi
c3BlY3VsYXIiLi4uIHVzZWQgaW4gdGhlIHNoYWRlcgorICAgICAqLworICAgIE1hdGVyaWFsSGVs
cGVyLlByZXBhcmVEZWZpbmVzRm9yTWVyZ2VkVVYgPSBmdW5jdGlvbiAodGV4dHVyZSwgZGVmaW5l
cywga2V5KSB7CisgICAgICAgIGRlZmluZXMuX25lZWRVVnMgPSB0cnVlOworICAgICAgICBkZWZp
bmVzW2tleV0gPSB0cnVlOworICAgICAgICBpZiAodGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KCku
aXNJZGVudGl0eUFzM3gyKCkpIHsKKyAgICAgICAgICAgIGRlZmluZXNba2V5ICsgIkRJUkVDVFVW
Il0gPSB0ZXh0dXJlLmNvb3JkaW5hdGVzSW5kZXggKyAxOworICAgICAgICAgICAgaWYgKHRleHR1
cmUuY29vcmRpbmF0ZXNJbmRleCA9PT0gMCkgeworICAgICAgICAgICAgICAgIGRlZmluZXNbIk1B
SU5VVjEiXSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBkZWZpbmVzWyJNQUlOVVYyIl0gPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVmaW5lc1trZXkgKyAiRElSRUNU
VVYiXSA9IDA7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRzIGEgdGV4
dHVyZSBtYXRyaXggdmFsdWUgdG8gaXRzIGNvcnJzcG9uZGluZyB1bmlmb3JtCisgICAgICogQHBh
cmFtIHRleHR1cmUgVGhlIHRleHR1cmUgdG8gYmluZCB0aGUgbWF0cml4IGZvcgorICAgICAqIEBw
YXJhbSB1bmlmb3JtQnVmZmVyIFRoZSB1bmlmb3JtIGJ1ZmZlciByZWNlaXZpbiB0aGUgZGF0YQor
ICAgICAqIEBwYXJhbSBrZXkgVGhlIGNoYW5uZWwga2V5ICJkaWZmdXNlIiwgInNwZWN1bGFyIi4u
LiB1c2VkIGluIHRoZSBzaGFkZXIKKyAgICAgKi8KKyAgICBNYXRlcmlhbEhlbHBlci5CaW5kVGV4
dHVyZU1hdHJpeCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCB1bmlmb3JtQnVmZmVyLCBrZXkpIHsKKyAg
ICAgICAgdmFyIG1hdHJpeCA9IHRleHR1cmUuZ2V0VGV4dHVyZU1hdHJpeCgpOworICAgICAgICB1
bmlmb3JtQnVmZmVyLnVwZGF0ZU1hdHJpeChrZXkgKyAiTWF0cml4IiwgbWF0cml4KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBmb2cgKHNo
b3VsZCBpdCBiZSBlbmFibGVkPykKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNo
IHRvIGV2YWx1YXRlIGZvciBmb2cgc3VwcG9ydAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVz
IHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBmb2cgbXVzdCBiZSBl
bmFibGVkCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuR2V0Rm9nU3RhdGUgPSBmdW5jdGlv
biAobWVzaCwgc2NlbmUpIHsKKyAgICAgICAgcmV0dXJuIChzY2VuZS5mb2dFbmFibGVkICYmIG1l
c2guYXBwbHlGb2cgJiYgc2NlbmUuZm9nTW9kZSAhPT0gX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlNjZW5lIl0uRk9HTU9ERV9OT05FKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEhlbHBlciB1c2VkIHRvIHByZXBhcmUgdGhlIGxpc3Qgb2YgZGVmaW5lcyBhc3NvY2lhdGVk
IHdpdGggbWlzYy4gdmFsdWVzIGZvciBzaGFkZXIgY29tcGlsYXRpb24KKyAgICAgKiBAcGFyYW0g
bWVzaCBkZWZpbmVzIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5l
cyB0aGUgY3VycmVudCBzY2VuZQorICAgICAqIEBwYXJhbSB1c2VMb2dhcml0aG1pY0RlcHRoIGRl
ZmluZXMgaWYgbG9nYXJpdGhtaWMgZGVwdGggaGFzIHRvIGJlIHR1cm5lZCBvbgorICAgICAqIEBw
YXJhbSBwb2ludHNDbG91ZCBkZWZpbmVzIGlmIHBvaW50IGNsb3VkIHJlbmRlcmluZyBoYXMgdG8g
YmUgdHVybmVkIG9uCisgICAgICogQHBhcmFtIGZvZ0VuYWJsZWQgZGVmaW5lcyBpZiBmb2cgaGFz
IHRvIGJlIHR1cm5lZCBvbgorICAgICAqIEBwYXJhbSBhbHBoYVRlc3QgZGVmaW5lcyBpZiBhbHBo
YSB0ZXN0aW5nIGhhcyB0byBiZSB0dXJuZWQgb24KKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZp
bmVzIHRoZSBjdXJyZW50IGxpc3Qgb2YgZGVmaW5lcworICAgICAqLworICAgIE1hdGVyaWFsSGVs
cGVyLlByZXBhcmVEZWZpbmVzRm9yTWlzYyA9IGZ1bmN0aW9uIChtZXNoLCBzY2VuZSwgdXNlTG9n
YXJpdGhtaWNEZXB0aCwgcG9pbnRzQ2xvdWQsIGZvZ0VuYWJsZWQsIGFscGhhVGVzdCwgZGVmaW5l
cykgeworICAgICAgICBpZiAoZGVmaW5lcy5fYXJlTWlzY0RpcnR5KSB7CisgICAgICAgICAgICBk
ZWZpbmVzWyJMT0dBUklUSE1JQ0RFUFRIIl0gPSB1c2VMb2dhcml0aG1pY0RlcHRoOworICAgICAg
ICAgICAgZGVmaW5lc1siUE9JTlRTSVpFIl0gPSBwb2ludHNDbG91ZDsKKyAgICAgICAgICAgIGRl
ZmluZXNbIkZPRyJdID0gZm9nRW5hYmxlZCAmJiB0aGlzLkdldEZvZ1N0YXRlKG1lc2gsIHNjZW5l
KTsKKyAgICAgICAgICAgIGRlZmluZXNbIk5PTlVOSUZPUk1TQ0FMSU5HIl0gPSBtZXNoLm5vblVu
aWZvcm1TY2FsaW5nOworICAgICAgICAgICAgZGVmaW5lc1siQUxQSEFURVNUIl0gPSBhbHBoYVRl
c3Q7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEhlbHBlciB1c2VkIHRvIHBy
ZXBhcmUgdGhlIGxpc3Qgb2YgZGVmaW5lcyBhc3NvY2lhdGVkIHdpdGggZnJhbWUgdmFsdWVzIGZv
ciBzaGFkZXIgY29tcGlsYXRpb24KKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgY3Vy
cmVudCBzY2VuZQorICAgICAqIEBwYXJhbSBlbmdpbmUgZGVmaW5lcyB0aGUgY3VycmVudCBlbmdp
bmUKKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBzcGVjaWZpZXMgdGhlIGxpc3Qgb2YgYWN0aXZlIGRl
ZmluZXMKKyAgICAgKiBAcGFyYW0gdXNlSW5zdGFuY2VzIGRlZmluZXMgaWYgaW5zdGFuY2VzIGhh
dmUgdG8gYmUgdHVybmVkIG9uCisgICAgICogQHBhcmFtIHVzZUNsaXBQbGFuZSBkZWZpbmVzIGlm
IGNsaXAgcGxhbmUgaGF2ZSB0byBiZSB0dXJuZWQgb24KKyAgICAgKi8KKyAgICBNYXRlcmlhbEhl
bHBlci5QcmVwYXJlRGVmaW5lc0ZvckZyYW1lQm91bmRWYWx1ZXMgPSBmdW5jdGlvbiAoc2NlbmUs
IGVuZ2luZSwgZGVmaW5lcywgdXNlSW5zdGFuY2VzLCB1c2VDbGlwUGxhbmUpIHsKKyAgICAgICAg
aWYgKHVzZUNsaXBQbGFuZSA9PT0gdm9pZCAwKSB7IHVzZUNsaXBQbGFuZSA9IG51bGw7IH0KKyAg
ICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgdmFyIHVzZUNsaXBQbGFuZTEgPSBm
YWxzZTsKKyAgICAgICAgdmFyIHVzZUNsaXBQbGFuZTIgPSBmYWxzZTsKKyAgICAgICAgdmFyIHVz
ZUNsaXBQbGFuZTMgPSBmYWxzZTsKKyAgICAgICAgdmFyIHVzZUNsaXBQbGFuZTQgPSBmYWxzZTsK
KyAgICAgICAgdXNlQ2xpcFBsYW5lMSA9IHVzZUNsaXBQbGFuZSA9PSBudWxsID8gKHNjZW5lLmNs
aXBQbGFuZSAhPT0gdW5kZWZpbmVkICYmIHNjZW5lLmNsaXBQbGFuZSAhPT0gbnVsbCkgOiB1c2VD
bGlwUGxhbmU7CisgICAgICAgIHVzZUNsaXBQbGFuZTIgPSB1c2VDbGlwUGxhbmUgPT0gbnVsbCA/
IChzY2VuZS5jbGlwUGxhbmUyICE9PSB1bmRlZmluZWQgJiYgc2NlbmUuY2xpcFBsYW5lMiAhPT0g
bnVsbCkgOiB1c2VDbGlwUGxhbmU7CisgICAgICAgIHVzZUNsaXBQbGFuZTMgPSB1c2VDbGlwUGxh
bmUgPT0gbnVsbCA/IChzY2VuZS5jbGlwUGxhbmUzICE9PSB1bmRlZmluZWQgJiYgc2NlbmUuY2xp
cFBsYW5lMyAhPT0gbnVsbCkgOiB1c2VDbGlwUGxhbmU7CisgICAgICAgIHVzZUNsaXBQbGFuZTQg
PSB1c2VDbGlwUGxhbmUgPT0gbnVsbCA/IChzY2VuZS5jbGlwUGxhbmU0ICE9PSB1bmRlZmluZWQg
JiYgc2NlbmUuY2xpcFBsYW5lNCAhPT0gbnVsbCkgOiB1c2VDbGlwUGxhbmU7CisgICAgICAgIGlm
IChkZWZpbmVzWyJDTElQUExBTkUiXSAhPT0gdXNlQ2xpcFBsYW5lMSkgeworICAgICAgICAgICAg
ZGVmaW5lc1siQ0xJUFBMQU5FIl0gPSB1c2VDbGlwUGxhbmUxOworICAgICAgICAgICAgY2hhbmdl
ZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlZmluZXNbIkNMSVBQTEFORTIiXSAh
PT0gdXNlQ2xpcFBsYW5lMikgeworICAgICAgICAgICAgZGVmaW5lc1siQ0xJUFBMQU5FMiJdID0g
dXNlQ2xpcFBsYW5lMjsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChkZWZpbmVzWyJDTElQUExBTkUzIl0gIT09IHVzZUNsaXBQbGFuZTMpIHsKKyAg
ICAgICAgICAgIGRlZmluZXNbIkNMSVBQTEFORTMiXSA9IHVzZUNsaXBQbGFuZTM7CisgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lc1siQ0xJ
UFBMQU5FNCJdICE9PSB1c2VDbGlwUGxhbmU0KSB7CisgICAgICAgICAgICBkZWZpbmVzWyJDTElQ
UExBTkU0Il0gPSB1c2VDbGlwUGxhbmU0OworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGRlZmluZXNbIkRFUFRIUFJFUEFTUyJdICE9PSAhZW5naW5l
LmdldENvbG9yV3JpdGUoKSkgeworICAgICAgICAgICAgZGVmaW5lc1siREVQVEhQUkVQQVNTIl0g
PSAhZGVmaW5lc1siREVQVEhQUkVQQVNTIl07CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lc1siSU5TVEFOQ0VTIl0gIT09IHVzZUluc3Rh
bmNlcykgeworICAgICAgICAgICAgZGVmaW5lc1siSU5TVEFOQ0VTIl0gPSB1c2VJbnN0YW5jZXM7
CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hh
bmdlZCkgeworICAgICAgICAgICAgZGVmaW5lcy5tYXJrQXNVbnByb2Nlc3NlZCgpOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyB0aGUgZGVmaW5lcyBmb3IgYm9u
ZXMKKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCBjb250YWluaW5nIHRoZSBnZW9tZXRyeSBk
YXRhIHdlIHdpbGwgZHJhdworICAgICAqIEBwYXJhbSBkZWZpbmVzIFRoZSBkZWZpbmVzIHRvIHVw
ZGF0ZQorICAgICAqLworICAgIE1hdGVyaWFsSGVscGVyLlByZXBhcmVEZWZpbmVzRm9yQm9uZXMg
PSBmdW5jdGlvbiAobWVzaCwgZGVmaW5lcykgeworICAgICAgICBpZiAobWVzaC51c2VCb25lcyAm
JiBtZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBtZXNoLnNrZWxldG9uKSB7CisgICAg
ICAgICAgICBkZWZpbmVzWyJOVU1fQk9ORV9JTkZMVUVOQ0VSUyJdID0gbWVzaC5udW1Cb25lSW5m
bHVlbmNlcnM7CisgICAgICAgICAgICB2YXIgbWF0ZXJpYWxTdXBwb3J0c0JvbmVUZXh0dXJlID0g
ZGVmaW5lc1siQk9ORVRFWFRVUkUiXSAhPT0gdW5kZWZpbmVkOworICAgICAgICAgICAgaWYgKG1l
c2guc2tlbGV0b24uaXNVc2luZ1RleHR1cmVGb3JNYXRyaWNlcyAmJiBtYXRlcmlhbFN1cHBvcnRz
Qm9uZVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzWyJCT05FVEVYVFVSRSJdID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGRlZmluZXNbIkJvbmVzUGVyTWVzaCJdID0gKG1lc2guc2tlbGV0b24uYm9uZXMubGVuZ3RoICsg
MSk7CisgICAgICAgICAgICAgICAgZGVmaW5lc1siQk9ORVRFWFRVUkUiXSA9IG1hdGVyaWFsU3Vw
cG9ydHNCb25lVGV4dHVyZSA/IGZhbHNlIDogdW5kZWZpbmVkOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVmaW5lc1siTlVNX0JPTkVfSU5G
TFVFTkNFUlMiXSA9IDA7CisgICAgICAgICAgICBkZWZpbmVzWyJCb25lc1Blck1lc2giXSA9IDA7
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFByZXBhcmVzIHRoZSBkZWZpbmVz
IGZvciBtb3JwaCB0YXJnZXRzCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggY29udGFpbmlu
ZyB0aGUgZ2VvbWV0cnkgZGF0YSB3ZSB3aWxsIGRyYXcKKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBU
aGUgZGVmaW5lcyB0byB1cGRhdGUKKyAgICAgKi8KKyAgICBNYXRlcmlhbEhlbHBlci5QcmVwYXJl
RGVmaW5lc0Zvck1vcnBoVGFyZ2V0cyA9IGZ1bmN0aW9uIChtZXNoLCBkZWZpbmVzKSB7CisgICAg
ICAgIHZhciBtYW5hZ2VyID0gbWVzaC5tb3JwaFRhcmdldE1hbmFnZXI7CisgICAgICAgIGlmICht
YW5hZ2VyKSB7CisgICAgICAgICAgICBkZWZpbmVzWyJNT1JQSFRBUkdFVFNfVVYiXSA9IG1hbmFn
ZXIuc3VwcG9ydHNVVnMgJiYgZGVmaW5lc1siVVYxIl07CisgICAgICAgICAgICBkZWZpbmVzWyJN
T1JQSFRBUkdFVFNfVEFOR0VOVCJdID0gbWFuYWdlci5zdXBwb3J0c1RhbmdlbnRzICYmIGRlZmlu
ZXNbIlRBTkdFTlQiXTsKKyAgICAgICAgICAgIGRlZmluZXNbIk1PUlBIVEFSR0VUU19OT1JNQUwi
XSA9IG1hbmFnZXIuc3VwcG9ydHNOb3JtYWxzICYmIGRlZmluZXNbIk5PUk1BTCJdOworICAgICAg
ICAgICAgZGVmaW5lc1siTU9SUEhUQVJHRVRTIl0gPSAobWFuYWdlci5udW1JbmZsdWVuY2VycyA+
IDApOworICAgICAgICAgICAgZGVmaW5lc1siTlVNX01PUlBIX0lORkxVRU5DRVJTIl0gPSBtYW5h
Z2VyLm51bUluZmx1ZW5jZXJzOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgZGVmaW5lc1siTU9SUEhUQVJHRVRTX1VWIl0gPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmlu
ZXNbIk1PUlBIVEFSR0VUU19UQU5HRU5UIl0gPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXNb
Ik1PUlBIVEFSR0VUU19OT1JNQUwiXSA9IGZhbHNlOworICAgICAgICAgICAgZGVmaW5lc1siTU9S
UEhUQVJHRVRTIl0gPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXNbIk5VTV9NT1JQSF9JTkZM
VUVOQ0VSUyJdID0gMDsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUHJlcGFy
ZXMgdGhlIGRlZmluZXMgdXNlZCBpbiB0aGUgc2hhZGVyIGRlcGVuZGluZyBvbiB0aGUgYXR0cmli
dXRlcyBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBtZXNoIFRoZSBt
ZXNoIGNvbnRhaW5pbmcgdGhlIGdlb21ldHJ5IGRhdGEgd2Ugd2lsbCBkcmF3CisgICAgICogQHBh
cmFtIGRlZmluZXMgVGhlIGRlZmluZXMgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIHVzZVZlcnRl
eENvbG9yIFByZWNpc2Ugd2hldGhlciB2ZXJ0ZXggY29sb3JzIHNob3VsZCBiZSB1c2VkIG9yIG5v
dCAob3ZlcnJpZGUgbWVzaCBpbmZvKQorICAgICAqIEBwYXJhbSB1c2VCb25lcyBQcmVjaXNlIHdo
ZXRoZXIgYm9uZXMgc2hvdWxkIGJlIHVzZWQgb3Igbm90IChvdmVycmlkZSBtZXNoIGluZm8pCisg
ICAgICogQHBhcmFtIHVzZU1vcnBoVGFyZ2V0cyBQcmVjaXNlIHdoZXRoZXIgbW9ycGggdGFyZ2V0
cyBzaG91bGQgYmUgdXNlZCBvciBub3QgKG92ZXJyaWRlIG1lc2ggaW5mbykKKyAgICAgKiBAcGFy
YW0gdXNlVmVydGV4QWxwaGEgUHJlY2lzZSB3aGV0aGVyIHZlcnRleCBhbHBoYSBzaG91bGQgYmUg
dXNlZCBvciBub3QgKG92ZXJyaWRlIG1lc2ggaW5mbykKKyAgICAgKiBAcmV0dXJucyBmYWxzZSBp
ZiBkZWZpbmVzIGFyZSBjb25zaWRlcmVkIG5vdCBkaXJ0eSBhbmQgaGF2ZSBub3QgYmVlbiBjaGVj
a2VkCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuUHJlcGFyZURlZmluZXNGb3JBdHRyaWJ1
dGVzID0gZnVuY3Rpb24gKG1lc2gsIGRlZmluZXMsIHVzZVZlcnRleENvbG9yLCB1c2VCb25lcywg
dXNlTW9ycGhUYXJnZXRzLCB1c2VWZXJ0ZXhBbHBoYSkgeworICAgICAgICBpZiAodXNlTW9ycGhU
YXJnZXRzID09PSB2b2lkIDApIHsgdXNlTW9ycGhUYXJnZXRzID0gZmFsc2U7IH0KKyAgICAgICAg
aWYgKHVzZVZlcnRleEFscGhhID09PSB2b2lkIDApIHsgdXNlVmVydGV4QWxwaGEgPSB0cnVlOyB9
CisgICAgICAgIGlmICghZGVmaW5lcy5fYXJlQXR0cmlidXRlc0RpcnR5ICYmIGRlZmluZXMuX25l
ZWROb3JtYWxzID09PSBkZWZpbmVzLl9ub3JtYWxzICYmIGRlZmluZXMuX25lZWRVVnMgPT09IGRl
ZmluZXMuX3V2cykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGRlZmluZXMuX25vcm1hbHMgPSBkZWZpbmVzLl9uZWVkTm9ybWFsczsKKyAgICAgICAgZGVm
aW5lcy5fdXZzID0gZGVmaW5lcy5fbmVlZFVWczsKKyAgICAgICAgZGVmaW5lc1siTk9STUFMIl0g
PSAoZGVmaW5lcy5fbmVlZE5vcm1hbHMgJiYgbWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0u
Tm9ybWFsS2luZCkpOworICAgICAgICBpZiAoZGVmaW5lcy5fbmVlZE5vcm1hbHMgJiYgbWVzaC5p
c1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVGFuZ2VudEtpbmQpKSB7CisgICAgICAgICAgICBkZWZp
bmVzWyJUQU5HRU5UIl0gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZpbmVzLl9u
ZWVkVVZzKSB7CisgICAgICAgICAgICBkZWZpbmVzWyJVVjEiXSA9IG1lc2guaXNWZXJ0aWNlc0Rh
dGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
cnRleEJ1ZmZlciJdLlVWS2luZCk7CisgICAgICAgICAgICBkZWZpbmVzWyJVVjIiXSA9IG1lc2gu
aXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWMktpbmQpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgZGVmaW5lc1siVVYxIl0gPSBmYWxzZTsKKyAgICAgICAgICAgIGRl
ZmluZXNbIlVWMiJdID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVzZVZlcnRleENv
bG9yKSB7CisgICAgICAgICAgICB2YXIgaGFzVmVydGV4Q29sb3JzID0gbWVzaC51c2VWZXJ0ZXhD
b2xvcnMgJiYgbWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAg
ICAgICAgIGRlZmluZXNbIlZFUlRFWENPTE9SIl0gPSBoYXNWZXJ0ZXhDb2xvcnM7CisgICAgICAg
ICAgICBkZWZpbmVzWyJWRVJURVhBTFBIQSJdID0gbWVzaC5oYXNWZXJ0ZXhBbHBoYSAmJiBoYXNW
ZXJ0ZXhDb2xvcnMgJiYgdXNlVmVydGV4QWxwaGE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVz
ZUJvbmVzKSB7CisgICAgICAgICAgICB0aGlzLlByZXBhcmVEZWZpbmVzRm9yQm9uZXMobWVzaCwg
ZGVmaW5lcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVzZU1vcnBoVGFyZ2V0cykgeworICAg
ICAgICAgICAgdGhpcy5QcmVwYXJlRGVmaW5lc0Zvck1vcnBoVGFyZ2V0cyhtZXNoLCBkZWZpbmVz
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFByZXBhcmVzIHRoZSBkZWZpbmVzIHJlbGF0ZWQgdG8gbXVsdGl2aWV3CisgICAgICogQHBh
cmFtIHNjZW5lIFRoZSBzY2VuZSB3ZSBhcmUgaW50ZW5kaW5nIHRvIGRyYXcKKyAgICAgKiBAcGFy
YW0gZGVmaW5lcyBUaGUgZGVmaW5lcyB0byB1cGRhdGUKKyAgICAgKi8KKyAgICBNYXRlcmlhbEhl
bHBlci5QcmVwYXJlRGVmaW5lc0Zvck11bHRpdmlldyA9IGZ1bmN0aW9uIChzY2VuZSwgZGVmaW5l
cykgeworICAgICAgICBpZiAoc2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICB2YXIg
cHJldmlvdXNNdWx0aXZpZXcgPSBkZWZpbmVzLk1VTFRJVklFVzsKKyAgICAgICAgICAgIGRlZmlu
ZXMuTVVMVElWSUVXID0gKHNjZW5lLmFjdGl2ZUNhbWVyYS5vdXRwdXRSZW5kZXJUYXJnZXQgIT09
IG51bGwgJiYgc2NlbmUuYWN0aXZlQ2FtZXJhLm91dHB1dFJlbmRlclRhcmdldC5nZXRWaWV3Q291
bnQoKSA+IDEpOworICAgICAgICAgICAgaWYgKGRlZmluZXMuTVVMVElWSUVXICE9IHByZXZpb3Vz
TXVsdGl2aWV3KSB7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5tYXJrQXNVbnByb2Nlc3NlZCgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcmVw
YXJlcyB0aGUgZGVmaW5lcyByZWxhdGVkIHRvIHRoZSBsaWdodCBpbmZvcm1hdGlvbiBwYXNzZWQg
aW4gcGFyYW1ldGVyCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB3ZSBhcmUgaW50ZW5k
aW5nIHRvIGRyYXcKKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0aGUgZWZmZWN0IGlzIGNv
bXBpbGluZyBmb3IKKyAgICAgKiBAcGFyYW0gbGlnaHQgVGhlIGxpZ2h0IHRoZSBlZmZlY3QgaXMg
Y29tcGlsaW5nIGZvcgorICAgICAqIEBwYXJhbSBsaWdodEluZGV4IFRoZSBpbmRleCBvZiB0aGUg
bGlnaHQKKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBUaGUgZGVmaW5lcyB0byB1cGRhdGUKKyAgICAg
KiBAcGFyYW0gc3BlY3VsYXJTdXBwb3J0ZWQgU3BlY2lmaWVzIHdoZXRoZXIgc3BlY3VsYXIgaXMg
c3VwcG9ydGVkIG9yIG5vdCAob3ZlcnJpZGUgbGlnaHRzIGRhdGEpCisgICAgICogQHBhcmFtIHN0
YXRlIERlZmluZXMgdGhlIGN1cnJlbnQgc3RhdGUgcmVnYXJkaW5nIHdoYXQgaXMgbmVlZGVkIChu
b3JtYWxzLCBldGMuLi4pCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuUHJlcGFyZURlZmlu
ZXNGb3JMaWdodCA9IGZ1bmN0aW9uIChzY2VuZSwgbWVzaCwgbGlnaHQsIGxpZ2h0SW5kZXgsIGRl
ZmluZXMsIHNwZWN1bGFyU3VwcG9ydGVkLCBzdGF0ZSkgeworICAgICAgICBzdGF0ZS5uZWVkTm9y
bWFscyA9IHRydWU7CisgICAgICAgIGlmIChkZWZpbmVzWyJMSUdIVCIgKyBsaWdodEluZGV4XSA9
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBzdGF0ZS5uZWVkUmVidWlsZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgZGVmaW5lc1siTElHSFQiICsgbGlnaHRJbmRleF0gPSB0cnVlOwor
ICAgICAgICBkZWZpbmVzWyJTUE9UTElHSFQiICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAg
ICAgZGVmaW5lc1siSEVNSUxJR0hUIiArIGxpZ2h0SW5kZXhdID0gZmFsc2U7CisgICAgICAgIGRl
ZmluZXNbIlBPSU5UTElHSFQiICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgZGVmaW5l
c1siRElSTElHSFQiICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgbGlnaHQucHJlcGFy
ZUxpZ2h0U3BlY2lmaWNEZWZpbmVzKGRlZmluZXMsIGxpZ2h0SW5kZXgpOworICAgICAgICAvLyBG
YWxsT2ZmLgorICAgICAgICBkZWZpbmVzWyJMSUdIVF9GQUxMT0ZGX1BIWVNJQ0FMIiArIGxpZ2h0
SW5kZXhdID0gZmFsc2U7CisgICAgICAgIGRlZmluZXNbIkxJR0hUX0ZBTExPRkZfR0xURiIgKyBs
aWdodEluZGV4XSA9IGZhbHNlOworICAgICAgICBkZWZpbmVzWyJMSUdIVF9GQUxMT0ZGX1NUQU5E
QVJEIiArIGxpZ2h0SW5kZXhdID0gZmFsc2U7CisgICAgICAgIHN3aXRjaCAobGlnaHQuZmFsbG9m
ZlR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgX0xpZ2h0c19saWdodF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJMaWdodCJdLkZBTExPRkZfR0xURjoKKyAgICAgICAgICAgICAgICBkZWZp
bmVzWyJMSUdIVF9GQUxMT0ZGX0dMVEYiICsgbGlnaHRJbmRleF0gPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfTGlnaHRzX2xpZ2h0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIkxpZ2h0Il0uRkFMTE9GRl9QSFlTSUNBTDoKKyAgICAgICAgICAg
ICAgICBkZWZpbmVzWyJMSUdIVF9GQUxMT0ZGX1BIWVNJQ0FMIiArIGxpZ2h0SW5kZXhdID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX0xpZ2h0c19saWdo
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJMaWdodCJdLkZBTExPRkZfU1RBTkRBUkQ6
CisgICAgICAgICAgICAgICAgZGVmaW5lc1siTElHSFRfRkFMTE9GRl9TVEFOREFSRCIgKyBsaWdo
dEluZGV4XSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gU3BlY3VsYXIKKyAgICAgICAgaWYgKHNwZWN1bGFyU3VwcG9ydGVkICYmICFsaWdodC5z
cGVjdWxhci5lcXVhbHNGbG9hdHMoMCwgMCwgMCkpIHsKKyAgICAgICAgICAgIHN0YXRlLnNwZWN1
bGFyRW5hYmxlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2hhZG93cworICAgICAg
ICBkZWZpbmVzWyJTSEFET1ciICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgZGVmaW5l
c1siU0hBRE9XUENGIiArIGxpZ2h0SW5kZXhdID0gZmFsc2U7CisgICAgICAgIGRlZmluZXNbIlNI
QURPV1BDU1MiICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgZGVmaW5lc1siU0hBRE9X
UE9JU1NPTiIgKyBsaWdodEluZGV4XSA9IGZhbHNlOworICAgICAgICBkZWZpbmVzWyJTSEFET1dF
U00iICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgZGVmaW5lc1siU0hBRE9XQ1VCRSIg
KyBsaWdodEluZGV4XSA9IGZhbHNlOworICAgICAgICBkZWZpbmVzWyJTSEFET1dMT1dRVUFMSVRZ
IiArIGxpZ2h0SW5kZXhdID0gZmFsc2U7CisgICAgICAgIGRlZmluZXNbIlNIQURPV01FRElVTVFV
QUxJVFkiICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgaWYgKG1lc2ggJiYgbWVzaC5y
ZWNlaXZlU2hhZG93cyAmJiBzY2VuZS5zaGFkb3dzRW5hYmxlZCAmJiBsaWdodC5zaGFkb3dFbmFi
bGVkKSB7CisgICAgICAgICAgICB2YXIgc2hhZG93R2VuZXJhdG9yID0gbGlnaHQuZ2V0U2hhZG93
R2VuZXJhdG9yKCk7CisgICAgICAgICAgICBpZiAoc2hhZG93R2VuZXJhdG9yKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHNoYWRvd01hcCA9IHNoYWRvd0dlbmVyYXRvci5nZXRTaGFkb3dNYXAoKTsK
KyAgICAgICAgICAgICAgICBpZiAoc2hhZG93TWFwKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChzaGFkb3dNYXAucmVuZGVyTGlzdCAmJiBzaGFkb3dNYXAucmVuZGVyTGlzdC5sZW5ndGggPiAw
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zaGFkb3dFbmFibGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd0dlbmVyYXRvci5wcmVwYXJlRGVmaW5lcyhk
ZWZpbmVzLCBsaWdodEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobGlnaHQubGlnaHRt
YXBNb2RlICE9IF9MaWdodHNfbGlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTGln
aHQiXS5MSUdIVE1BUF9ERUZBVUxUKSB7CisgICAgICAgICAgICBzdGF0ZS5saWdodG1hcE1vZGUg
PSB0cnVlOworICAgICAgICAgICAgZGVmaW5lc1siTElHSFRNQVBFWENMVURFRCIgKyBsaWdodElu
ZGV4XSA9IHRydWU7CisgICAgICAgICAgICBkZWZpbmVzWyJMSUdIVE1BUE5PU1BFQ1VMQVIiICsg
bGlnaHRJbmRleF0gPSAobGlnaHQubGlnaHRtYXBNb2RlID09IF9MaWdodHNfbGlnaHRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siTGlnaHQiXS5MSUdIVE1BUF9TSEFET1dTT05MWSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkZWZpbmVzWyJMSUdIVE1BUEVY
Q0xVREVEIiArIGxpZ2h0SW5kZXhdID0gZmFsc2U7CisgICAgICAgICAgICBkZWZpbmVzWyJMSUdI
VE1BUE5PU1BFQ1VMQVIiICsgbGlnaHRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogUHJlcGFyZXMgdGhlIGRlZmluZXMgcmVsYXRlZCB0byB0aGUgbGln
aHQgaW5mb3JtYXRpb24gcGFzc2VkIGluIHBhcmFtZXRlcgorICAgICAqIEBwYXJhbSBzY2VuZSBU
aGUgc2NlbmUgd2UgYXJlIGludGVuZGluZyB0byBkcmF3CisgICAgICogQHBhcmFtIG1lc2ggVGhl
IG1lc2ggdGhlIGVmZmVjdCBpcyBjb21waWxpbmcgZm9yCisgICAgICogQHBhcmFtIGRlZmluZXMg
VGhlIGRlZmluZXMgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIHNwZWN1bGFyU3VwcG9ydGVkIFNw
ZWNpZmllcyB3aGV0aGVyIHNwZWN1bGFyIGlzIHN1cHBvcnRlZCBvciBub3QgKG92ZXJyaWRlIGxp
Z2h0cyBkYXRhKQorICAgICAqIEBwYXJhbSBtYXhTaW11bHRhbmVvdXNMaWdodHMgU3BlY2ZpZXMg
aG93IG1hbnV5IGxpZ2h0cyBjYW4gYmUgYWRkZWQgdG8gdGhlIGVmZmVjdCBhdCBtYXgKKyAgICAg
KiBAcGFyYW0gZGlzYWJsZUxpZ2h0aW5nIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBsaWdodGluZyBp
cyBkaXNhYmxlZCAob3ZlcnJpZGUgc2NlbmUgYW5kIGxpZ2h0KQorICAgICAqIEByZXR1cm5zIHRy
dWUgaWYgbm9ybWFscyB3aWxsIGJlIHJlcXVpcmVkIGZvciB0aGUgcmVzdCBvZiB0aGUgZWZmZWN0
CisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuUHJlcGFyZURlZmluZXNGb3JMaWdodHMgPSBm
dW5jdGlvbiAoc2NlbmUsIG1lc2gsIGRlZmluZXMsIHNwZWN1bGFyU3VwcG9ydGVkLCBtYXhTaW11
bHRhbmVvdXNMaWdodHMsIGRpc2FibGVMaWdodGluZykgeworICAgICAgICBpZiAobWF4U2ltdWx0
YW5lb3VzTGlnaHRzID09PSB2b2lkIDApIHsgbWF4U2ltdWx0YW5lb3VzTGlnaHRzID0gNDsgfQor
ICAgICAgICBpZiAoZGlzYWJsZUxpZ2h0aW5nID09PSB2b2lkIDApIHsgZGlzYWJsZUxpZ2h0aW5n
ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCFkZWZpbmVzLl9hcmVMaWdodHNEaXJ0eSkgeworICAg
ICAgICAgICAgcmV0dXJuIGRlZmluZXMuX25lZWROb3JtYWxzOworICAgICAgICB9CisgICAgICAg
IHZhciBsaWdodEluZGV4ID0gMDsKKyAgICAgICAgdmFyIHN0YXRlID0geworICAgICAgICAgICAg
bmVlZE5vcm1hbHM6IGZhbHNlLAorICAgICAgICAgICAgbmVlZFJlYnVpbGQ6IGZhbHNlLAorICAg
ICAgICAgICAgbGlnaHRtYXBNb2RlOiBmYWxzZSwKKyAgICAgICAgICAgIHNoYWRvd0VuYWJsZWQ6
IGZhbHNlLAorICAgICAgICAgICAgc3BlY3VsYXJFbmFibGVkOiBmYWxzZQorICAgICAgICB9Owor
ICAgICAgICBpZiAoc2NlbmUubGlnaHRzRW5hYmxlZCAmJiAhZGlzYWJsZUxpZ2h0aW5nKSB7Cisg
ICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gbWVzaC5saWdodFNvdXJjZXM7IF9pIDwg
X2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpZ2h0ID0gX2FbX2ldOwor
ICAgICAgICAgICAgICAgIHRoaXMuUHJlcGFyZURlZmluZXNGb3JMaWdodChzY2VuZSwgbWVzaCwg
bGlnaHQsIGxpZ2h0SW5kZXgsIGRlZmluZXMsIHNwZWN1bGFyU3VwcG9ydGVkLCBzdGF0ZSk7Cisg
ICAgICAgICAgICAgICAgbGlnaHRJbmRleCsrOworICAgICAgICAgICAgICAgIGlmIChsaWdodElu
ZGV4ID09PSBtYXhTaW11bHRhbmVvdXNMaWdodHMpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGRlZmluZXNbIlNQRUNVTEFSVEVSTSJdID0gc3RhdGUuc3BlY3VsYXJFbmFibGVkOworICAgICAg
ICBkZWZpbmVzWyJTSEFET1dTIl0gPSBzdGF0ZS5zaGFkb3dFbmFibGVkOworICAgICAgICAvLyBS
ZXNldHRpbmcgYWxsIG90aGVyIGxpZ2h0cyBpZiBhbnkKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSBsaWdodEluZGV4OyBpbmRleCA8IG1heFNpbXVsdGFuZW91c0xpZ2h0czsgaW5kZXgrKykgewor
ICAgICAgICAgICAgaWYgKGRlZmluZXNbIkxJR0hUIiArIGluZGV4XSAhPT0gdW5kZWZpbmVkKSB7
CisgICAgICAgICAgICAgICAgZGVmaW5lc1siTElHSFQiICsgaW5kZXhdID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgZGVmaW5lc1siSEVNSUxJR0hUIiArIGluZGV4XSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGRlZmluZXNbIlBPSU5UTElHSFQiICsgaW5kZXhdID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgZGVmaW5lc1siRElSTElHSFQiICsgaW5kZXhdID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgZGVmaW5lc1siU1BPVExJR0hUIiArIGluZGV4XSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGRlZmluZXNbIlNIQURPVyIgKyBpbmRleF0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBk
ZWZpbmVzWyJTSEFET1dQQ0YiICsgaW5kZXhdID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZGVm
aW5lc1siU0hBRE9XUENTUyIgKyBpbmRleF0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBkZWZp
bmVzWyJTSEFET1dQT0lTU09OIiArIGluZGV4XSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRl
ZmluZXNbIlNIQURPV0VTTSIgKyBpbmRleF0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBkZWZp
bmVzWyJTSEFET1dDVUJFIiArIGluZGV4XSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmlu
ZXNbIlNIQURPV0xPV1FVQUxJVFkiICsgaW5kZXhdID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ZGVmaW5lc1siU0hBRE9XTUVESVVNUVVBTElUWSIgKyBpbmRleF0gPSBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgY2FwcyA9IHNjZW5lLmdldEVuZ2luZSgpLmdl
dENhcHMoKTsKKyAgICAgICAgaWYgKGRlZmluZXNbIlNIQURPV0ZMT0FUIl0gPT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgc3RhdGUubmVlZFJlYnVpbGQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIGRlZmluZXNbIlNIQURPV0ZMT0FUIl0gPSBzdGF0ZS5zaGFkb3dFbmFibGVkICYmCisg
ICAgICAgICAgICAoKGNhcHMudGV4dHVyZUZsb2F0UmVuZGVyICYmIGNhcHMudGV4dHVyZUZsb2F0
TGluZWFyRmlsdGVyaW5nKSB8fAorICAgICAgICAgICAgICAgIChjYXBzLnRleHR1cmVIYWxmRmxv
YXRSZW5kZXIgJiYgY2Fwcy50ZXh0dXJlSGFsZkZsb2F0TGluZWFyRmlsdGVyaW5nKSk7CisgICAg
ICAgIGRlZmluZXNbIkxJR0hUTUFQRVhDTFVERUQiXSA9IHN0YXRlLmxpZ2h0bWFwTW9kZTsKKyAg
ICAgICAgaWYgKHN0YXRlLm5lZWRSZWJ1aWxkKSB7CisgICAgICAgICAgICBkZWZpbmVzLnJlYnVp
bGQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdGUubmVlZE5vcm1hbHM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyB0aGUgdW5pZm9ybXMgYW5kIHNhbXBsZXJzIGxp
c3QgdG8gYmUgdXNlZCBpbiB0aGUgZWZmZWN0IChmb3IgYSBzcGVjaWZpYyBsaWdodCkKKyAgICAg
KiBAcGFyYW0gbGlnaHRJbmRleCBkZWZpbmVzIHRoZSBsaWdodCBpbmRleAorICAgICAqIEBwYXJh
bSB1bmlmb3Jtc0xpc3QgVGhlIHVuaWZvcm0gbGlzdAorICAgICAqIEBwYXJhbSBzYW1wbGVyc0xp
c3QgVGhlIHNhbXBsZXIgbGlzdAorICAgICAqIEBwYXJhbSBwcm9qZWN0ZWRMaWdodFRleHR1cmUg
ZGVmaW5lcyBpZiBwcm9qZWN0ZWQgdGV4dHVyZSBtdXN0IGJlIHVzZWQKKyAgICAgKiBAcGFyYW0g
dW5pZm9ybUJ1ZmZlcnNMaXN0IGRlZmluZXMgYW4gb3B0aW9uYWwgbGlzdCBvZiB1bmlmb3JtIGJ1
ZmZlcnMKKyAgICAgKi8KKyAgICBNYXRlcmlhbEhlbHBlci5QcmVwYXJlVW5pZm9ybXNBbmRTYW1w
bGVyc0ZvckxpZ2h0ID0gZnVuY3Rpb24gKGxpZ2h0SW5kZXgsIHVuaWZvcm1zTGlzdCwgc2FtcGxl
cnNMaXN0LCBwcm9qZWN0ZWRMaWdodFRleHR1cmUsIHVuaWZvcm1CdWZmZXJzTGlzdCkgeworICAg
ICAgICBpZiAodW5pZm9ybUJ1ZmZlcnNMaXN0ID09PSB2b2lkIDApIHsgdW5pZm9ybUJ1ZmZlcnNM
aXN0ID0gbnVsbDsgfQorICAgICAgICB1bmlmb3Jtc0xpc3QucHVzaCgidkxpZ2h0RGF0YSIgKyBs
aWdodEluZGV4LCAidkxpZ2h0RGlmZnVzZSIgKyBsaWdodEluZGV4LCAidkxpZ2h0U3BlY3VsYXIi
ICsgbGlnaHRJbmRleCwgInZMaWdodERpcmVjdGlvbiIgKyBsaWdodEluZGV4LCAidkxpZ2h0RmFs
bG9mZiIgKyBsaWdodEluZGV4LCAidkxpZ2h0R3JvdW5kIiArIGxpZ2h0SW5kZXgsICJsaWdodE1h
dHJpeCIgKyBsaWdodEluZGV4LCAic2hhZG93c0luZm8iICsgbGlnaHRJbmRleCwgImRlcHRoVmFs
dWVzIiArIGxpZ2h0SW5kZXgpOworICAgICAgICBpZiAodW5pZm9ybUJ1ZmZlcnNMaXN0KSB7Cisg
ICAgICAgICAgICB1bmlmb3JtQnVmZmVyc0xpc3QucHVzaCgiTGlnaHQiICsgbGlnaHRJbmRleCk7
CisgICAgICAgIH0KKyAgICAgICAgc2FtcGxlcnNMaXN0LnB1c2goInNoYWRvd1NhbXBsZXIiICsg
bGlnaHRJbmRleCk7CisgICAgICAgIHNhbXBsZXJzTGlzdC5wdXNoKCJkZXB0aFNhbXBsZXIiICsg
bGlnaHRJbmRleCk7CisgICAgICAgIGlmIChwcm9qZWN0ZWRMaWdodFRleHR1cmUpIHsKKyAgICAg
ICAgICAgIHNhbXBsZXJzTGlzdC5wdXNoKCJwcm9qZWN0aW9uTGlnaHRTYW1wbGVyIiArIGxpZ2h0
SW5kZXgpOworICAgICAgICAgICAgdW5pZm9ybXNMaXN0LnB1c2goInRleHR1cmVQcm9qZWN0aW9u
TWF0cml4IiArIGxpZ2h0SW5kZXgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBQcmVwYXJlcyB0aGUgdW5pZm9ybXMgYW5kIHNhbXBsZXJzIGxpc3QgdG8gYmUgdXNlZCBpbiB0
aGUgZWZmZWN0CisgICAgICogQHBhcmFtIHVuaWZvcm1zTGlzdE9yT3B0aW9ucyBUaGUgdW5pZm9y
bSBuYW1lcyB0byBwcmVwYXJlIG9yIGFuIEVmZmVjdENyZWF0aW9uT3B0aW9ucyBjb250YWluaW5n
IHRoZSBsaWlzdCBhbmQgZXh0cmEgaW5mb3JtYXRpb24KKyAgICAgKiBAcGFyYW0gc2FtcGxlcnNM
aXN0IFRoZSBzYW1wbGVyIGxpc3QKKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBUaGUgZGVmaW5lcyBo
ZWxwaW5nIGluIHRoZSBsaXN0IGdlbmVyYXRpb24KKyAgICAgKiBAcGFyYW0gbWF4U2ltdWx0YW5l
b3VzTGlnaHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbm91cyBsaWdodCBhbGxvd2Vk
IGluIHRoZSBlZmZlY3QKKyAgICAgKi8KKyAgICBNYXRlcmlhbEhlbHBlci5QcmVwYXJlVW5pZm9y
bXNBbmRTYW1wbGVyc0xpc3QgPSBmdW5jdGlvbiAodW5pZm9ybXNMaXN0T3JPcHRpb25zLCBzYW1w
bGVyc0xpc3QsIGRlZmluZXMsIG1heFNpbXVsdGFuZW91c0xpZ2h0cykgeworICAgICAgICBpZiAo
bWF4U2ltdWx0YW5lb3VzTGlnaHRzID09PSB2b2lkIDApIHsgbWF4U2ltdWx0YW5lb3VzTGlnaHRz
ID0gNDsgfQorICAgICAgICB2YXIgdW5pZm9ybXNMaXN0OworICAgICAgICB2YXIgdW5pZm9ybUJ1
ZmZlcnNMaXN0ID0gbnVsbDsKKyAgICAgICAgaWYgKHVuaWZvcm1zTGlzdE9yT3B0aW9ucy51bmlm
b3Jtc05hbWVzKSB7CisgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHVuaWZvcm1zTGlzdE9yT3B0
aW9uczsKKyAgICAgICAgICAgIHVuaWZvcm1zTGlzdCA9IG9wdGlvbnMudW5pZm9ybXNOYW1lczsK
KyAgICAgICAgICAgIHVuaWZvcm1CdWZmZXJzTGlzdCA9IG9wdGlvbnMudW5pZm9ybUJ1ZmZlcnNO
YW1lczsKKyAgICAgICAgICAgIHNhbXBsZXJzTGlzdCA9IG9wdGlvbnMuc2FtcGxlcnM7CisgICAg
ICAgICAgICBkZWZpbmVzID0gb3B0aW9ucy5kZWZpbmVzOworICAgICAgICAgICAgbWF4U2ltdWx0
YW5lb3VzTGlnaHRzID0gb3B0aW9ucy5tYXhTaW11bHRhbmVvdXNMaWdodHM7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1bmlmb3Jtc0xpc3QgPSB1bmlmb3Jtc0xpc3RP
ck9wdGlvbnM7CisgICAgICAgICAgICBpZiAoIXNhbXBsZXJzTGlzdCkgeworICAgICAgICAgICAg
ICAgIHNhbXBsZXJzTGlzdCA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGZvciAodmFyIGxpZ2h0SW5kZXggPSAwOyBsaWdodEluZGV4IDwgbWF4U2ltdWx0YW5lb3VzTGln
aHRzOyBsaWdodEluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICghZGVmaW5lc1siTElHSFQiICsg
bGlnaHRJbmRleF0pIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuUHJlcGFyZVVuaWZvcm1zQW5kU2FtcGxlcnNGb3JMaWdodChsaWdodElu
ZGV4LCB1bmlmb3Jtc0xpc3QsIHNhbXBsZXJzTGlzdCwgZGVmaW5lc1siUFJPSkVDVEVETElHSFRU
RVhUVVJFIiArIGxpZ2h0SW5kZXhdLCB1bmlmb3JtQnVmZmVyc0xpc3QpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChkZWZpbmVzWyJOVU1fTU9SUEhfSU5GTFVFTkNFUlMiXSkgeworICAgICAgICAg
ICAgdW5pZm9ybXNMaXN0LnB1c2goIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGhlbHBzIGRlY3JlYXNpbmcgcmFuayBieSBy
YW5rIHRoZSBzaGFkb3cgcXVhbGl0eSAoMCBiZWluZyB0aGUgaGlnaGVzdCByYW5rIGFuZCBxdWFs
aXR5KQorICAgICAqIEBwYXJhbSBkZWZpbmVzIFRoZSBkZWZpbmVzIHRvIHVwZGF0ZSB3aGlsZSBm
YWxsaW5nIGJhY2sKKyAgICAgKiBAcGFyYW0gZmFsbGJhY2tzIFRoZSBhdXRob3JpemVkIGVmZmVj
dCBmYWxsYmFja3MKKyAgICAgKiBAcGFyYW0gbWF4U2ltdWx0YW5lb3VzTGlnaHRzIFRoZSBtYXhp
bXVtIG51bWJlciBvZiBsaWdodHMgYWxsb3dlZAorICAgICAqIEBwYXJhbSByYW5rIHRoZSBjdXJy
ZW50IHJhbmsgb2YgdGhlIEVmZmVjdAorICAgICAqIEByZXR1cm5zIFRoZSBuZXdseSBhZmZlY3Rl
ZCByYW5rCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuSGFuZGxlRmFsbGJhY2tzRm9yU2hh
ZG93cyA9IGZ1bmN0aW9uIChkZWZpbmVzLCBmYWxsYmFja3MsIG1heFNpbXVsdGFuZW91c0xpZ2h0
cywgcmFuaykgeworICAgICAgICBpZiAobWF4U2ltdWx0YW5lb3VzTGlnaHRzID09PSB2b2lkIDAp
IHsgbWF4U2ltdWx0YW5lb3VzTGlnaHRzID0gNDsgfQorICAgICAgICBpZiAocmFuayA9PT0gdm9p
ZCAwKSB7IHJhbmsgPSAwOyB9CisgICAgICAgIHZhciBsaWdodEZhbGxiYWNrUmFuayA9IDA7Cisg
ICAgICAgIGZvciAodmFyIGxpZ2h0SW5kZXggPSAwOyBsaWdodEluZGV4IDwgbWF4U2ltdWx0YW5l
b3VzTGlnaHRzOyBsaWdodEluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICghZGVmaW5lc1siTElH
SFQiICsgbGlnaHRJbmRleF0pIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChsaWdodEluZGV4ID4gMCkgeworICAgICAgICAgICAgICAgIGxp
Z2h0RmFsbGJhY2tSYW5rID0gcmFuayArIGxpZ2h0SW5kZXg7CisgICAgICAgICAgICAgICAgZmFs
bGJhY2tzLmFkZEZhbGxiYWNrKGxpZ2h0RmFsbGJhY2tSYW5rLCAiTElHSFQiICsgbGlnaHRJbmRl
eCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWRlZmluZXNbIlNIQURPV1MiXSkg
eworICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzWyJTSEFET1ciICsgbGlnaHRJbmRleF0pIHsK
KyAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKHJhbmssICJTSEFET1ci
ICsgbGlnaHRJbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChk
ZWZpbmVzWyJTSEFET1dQQ0YiICsgbGlnaHRJbmRleF0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ZmFsbGJhY2tzLmFkZEZhbGxiYWNrKHJhbmssICJTSEFET1dQQ0YiICsgbGlnaHRJbmRleCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChkZWZpbmVzWyJTSEFET1dQQ1NT
IiArIGxpZ2h0SW5kZXhdKSB7CisgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxs
YmFjayhyYW5rLCAiU0hBRE9XUENTUyIgKyBsaWdodEluZGV4KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKGRlZmluZXNbIlNIQURPV1BPSVNTT04iICsgbGlnaHRJbmRl
eF0pIHsKKyAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKHJhbmssICJT
SEFET1dQT0lTU09OIiArIGxpZ2h0SW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoZGVmaW5lc1siU0hBRE9XRVNNIiArIGxpZ2h0SW5kZXhdKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjayhyYW5rLCAiU0hBRE9XRVNNIiArIGxp
Z2h0SW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbGlnaHRGYWxsYmFja1JhbmsrKzsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFByZXBhcmVzIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgcmVxdWlyZWQgZm9yIG1vcnBoIHRh
cmdldHMgYWNjb3JkaW5nIHRvIHRoZSBlZmZlY3QgZGVmaW5lcy4KKyAgICAgKiBAcGFyYW0gYXR0
cmlicyBUaGUgY3VycmVudCBsaXN0IG9mIHN1cHBvcnRlZCBhdHRyaWJzCisgICAgICogQHBhcmFt
IG1lc2ggVGhlIG1lc2ggdG8gcHJlcGFyZSB0aGUgbW9ycGggdGFyZ2V0cyBhdHRyaWJ1dGVzIGZv
cgorICAgICAqIEBwYXJhbSBpbmZsdWVuY2VycyBUaGUgbnVtYmVyIG9mIGluZmx1ZW5jZXJzCisg
ICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuUHJlcGFyZUF0dHJpYnV0ZXNGb3JNb3JwaFRhcmdl
dHNJbmZsdWVuY2VycyA9IGZ1bmN0aW9uIChhdHRyaWJzLCBtZXNoLCBpbmZsdWVuY2Vycykgewor
ICAgICAgICB0aGlzLl9UbXBNb3JwaEluZmx1ZW5jZXJzLk5VTV9NT1JQSF9JTkZMVUVOQ0VSUyA9
IGluZmx1ZW5jZXJzOworICAgICAgICB0aGlzLlByZXBhcmVBdHRyaWJ1dGVzRm9yTW9ycGhUYXJn
ZXRzKGF0dHJpYnMsIG1lc2gsIHRoaXMuX1RtcE1vcnBoSW5mbHVlbmNlcnMpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUHJlcGFyZXMgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyByZXF1aXJlZCBm
b3IgbW9ycGggdGFyZ2V0cyBhY2NvcmRpbmcgdG8gdGhlIGVmZmVjdCBkZWZpbmVzLgorICAgICAq
IEBwYXJhbSBhdHRyaWJzIFRoZSBjdXJyZW50IGxpc3Qgb2Ygc3VwcG9ydGVkIGF0dHJpYnMKKyAg
ICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0byBwcmVwYXJlIHRoZSBtb3JwaCB0YXJnZXRzIGF0
dHJpYnV0ZXMgZm9yCisgICAgICogQHBhcmFtIGRlZmluZXMgVGhlIGN1cnJlbnQgRGVmaW5lcyBv
ZiB0aGUgZWZmZWN0CisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuUHJlcGFyZUF0dHJpYnV0
ZXNGb3JNb3JwaFRhcmdldHMgPSBmdW5jdGlvbiAoYXR0cmlicywgbWVzaCwgZGVmaW5lcykgewor
ICAgICAgICB2YXIgaW5mbHVlbmNlcnMgPSBkZWZpbmVzWyJOVU1fTU9SUEhfSU5GTFVFTkNFUlMi
XTsKKyAgICAgICAgaWYgKGluZmx1ZW5jZXJzID4gMCAmJiBfRW5naW5lc19lbmdpbmVTdG9yZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkRW5n
aW5lKSB7CisgICAgICAgICAgICB2YXIgbWF4QXR0cmlidXRlc0NvdW50ID0gX0VuZ2luZXNfZW5n
aW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lU3RvcmUiXS5MYXN0
Q3JlYXRlZEVuZ2luZS5nZXRDYXBzKCkubWF4VmVydGV4QXR0cmliczsKKyAgICAgICAgICAgIHZh
ciBtYW5hZ2VyID0gbWVzaC5tb3JwaFRhcmdldE1hbmFnZXI7CisgICAgICAgICAgICB2YXIgbm9y
bWFsID0gbWFuYWdlciAmJiBtYW5hZ2VyLnN1cHBvcnRzTm9ybWFscyAmJiBkZWZpbmVzWyJOT1JN
QUwiXTsKKyAgICAgICAgICAgIHZhciB0YW5nZW50ID0gbWFuYWdlciAmJiBtYW5hZ2VyLnN1cHBv
cnRzVGFuZ2VudHMgJiYgZGVmaW5lc1siVEFOR0VOVCJdOworICAgICAgICAgICAgdmFyIHV2ID0g
bWFuYWdlciAmJiBtYW5hZ2VyLnN1cHBvcnRzVVZzICYmIGRlZmluZXNbIlVWMSJdOworICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGluZmx1ZW5jZXJzOyBpbmRleCsrKSB7
CisgICAgICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCArIGluZGV4KTsK
KyAgICAgICAgICAgICAgICBpZiAobm9ybWFsKSB7CisgICAgICAgICAgICAgICAgICAgIGF0dHJp
YnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0
ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kICsgaW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAodGFuZ2VudCkgeworICAgICAgICAgICAgICAgICAgICBhdHRyaWJzLnB1
c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVm
ZmVyIl0uVGFuZ2VudEtpbmQgKyBpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICh1dikgeworICAgICAgICAgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVVZL
aW5kICsgIl8iICsgaW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoYXR0cmlicy5sZW5ndGggPiBtYXhBdHRyaWJ1dGVzQ291bnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJd
LkVycm9yKCJDYW5ub3QgYWRkIG1vcmUgdmVydGV4IGF0dHJpYnV0ZXMgZm9yIG1lc2ggIiArIG1l
c2gubmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHJl
cXVpcmVkIGZvciBib25lcyBhY2NvcmRpbmcgdG8gdGhlIGVmZmVjdCBkZWZpbmVzLgorICAgICAq
IEBwYXJhbSBhdHRyaWJzIFRoZSBjdXJyZW50IGxpc3Qgb2Ygc3VwcG9ydGVkIGF0dHJpYnMKKyAg
ICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB0byBwcmVwYXJlIHRoZSBib25lcyBhdHRyaWJ1dGVz
IGZvcgorICAgICAqIEBwYXJhbSBkZWZpbmVzIFRoZSBjdXJyZW50IERlZmluZXMgb2YgdGhlIGVm
ZmVjdAorICAgICAqIEBwYXJhbSBmYWxsYmFja3MgVGhlIGN1cnJlbnQgZWZmZmVjdCBmYWxsYmFj
ayBzdHJhdGVneQorICAgICAqLworICAgIE1hdGVyaWFsSGVscGVyLlByZXBhcmVBdHRyaWJ1dGVz
Rm9yQm9uZXMgPSBmdW5jdGlvbiAoYXR0cmlicywgbWVzaCwgZGVmaW5lcywgZmFsbGJhY2tzKSB7
CisgICAgICAgIGlmIChkZWZpbmVzWyJOVU1fQk9ORV9JTkZMVUVOQ0VSUyJdID4gMCkgeworICAg
ICAgICAgICAgZmFsbGJhY2tzLmFkZENQVVNraW5uaW5nRmFsbGJhY2soMCwgbWVzaCk7CisgICAg
ICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCk7CisgICAgICAgICAg
ICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCk7CisgICAgICAgICAgICBpZiAo
ZGVmaW5lc1siTlVNX0JPTkVfSU5GTFVFTkNFUlMiXSA+IDQpIHsKKyAgICAgICAgICAgICAgICBh
dHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kKTsKKyAgICAgICAgICAgICAg
ICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzRXh0cmFLaW5kKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2sgYW5kIHByZXBhcmUg
dGhlIGxpc3Qgb2YgYXR0cmlidXRlcyByZXF1aXJlZCBmb3IgaW5zdGFuY2VzIGFjY29yZGluZyB0
byB0aGUgZWZmZWN0IGRlZmluZXMuCisgICAgICogQHBhcmFtIGF0dHJpYnMgVGhlIGN1cnJlbnQg
bGlzdCBvZiBzdXBwb3J0ZWQgYXR0cmlicworICAgICAqIEBwYXJhbSBkZWZpbmVzIFRoZSBjdXJy
ZW50IE1hdGVyaWFsRGVmaW5lcyBvZiB0aGUgZWZmZWN0CisgICAgICovCisgICAgTWF0ZXJpYWxI
ZWxwZXIuUHJlcGFyZUF0dHJpYnV0ZXNGb3JJbnN0YW5jZXMgPSBmdW5jdGlvbiAoYXR0cmlicywg
ZGVmaW5lcykgeworICAgICAgICBpZiAoZGVmaW5lc1siSU5TVEFOQ0VTIl0pIHsKKyAgICAgICAg
ICAgIHRoaXMuUHVzaEF0dHJpYnV0ZXNGb3JJbnN0YW5jZXMoYXR0cmlicyk7CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHJlcXVp
cmVkIGZvciBpbnN0YW5jZXMgdG8gdGhlIGF0dHJpYnMgYXJyYXkuCisgICAgICogQHBhcmFtIGF0
dHJpYnMgVGhlIGN1cnJlbnQgbGlzdCBvZiBzdXBwb3J0ZWQgYXR0cmlicworICAgICAqLworICAg
IE1hdGVyaWFsSGVscGVyLlB1c2hBdHRyaWJ1dGVzRm9ySW5zdGFuY2VzID0gZnVuY3Rpb24gKGF0
dHJpYnMpIHsKKyAgICAgICAgYXR0cmlicy5wdXNoKCJ3b3JsZDAiKTsKKyAgICAgICAgYXR0cmli
cy5wdXNoKCJ3b3JsZDEiKTsKKyAgICAgICAgYXR0cmlicy5wdXNoKCJ3b3JsZDIiKTsKKyAgICAg
ICAgYXR0cmlicy5wdXNoKCJ3b3JsZDMiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRz
IHRoZSBsaWdodCBzaGFkb3cgaW5mb3JtYXRpb24gdG8gdGhlIGVmZmVjdCBmb3IgdGhlIGdpdmVu
IG1lc2guCisgICAgICogQHBhcmFtIGxpZ2h0IFRoZSBsaWdodCBjb250YWluaW5nIHRoZSBnZW5l
cmF0b3IKKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRoZSBsaWdodHMgYmVsb25ncyB0
bworICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHdlIGFyZSBiaW5kaW5nIHRoZSBpbmZvcm1h
dGlvbiB0byByZW5kZXIKKyAgICAgKiBAcGFyYW0gbGlnaHRJbmRleCBUaGUgbGlnaHQgaW5kZXgg
aW4gdGhlIGVmZmVjdCB1c2VkIHRvIHJlbmRlciB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBlZmZl
Y3QgVGhlIGVmZmVjdCB3ZSBhcmUgYmluZGluZyB0aGUgZGF0YSB0bworICAgICAqLworICAgIE1h
dGVyaWFsSGVscGVyLkJpbmRMaWdodFNoYWRvdyA9IGZ1bmN0aW9uIChsaWdodCwgbWVzaCwgbGln
aHRJbmRleCwgZWZmZWN0KSB7CisgICAgICAgIGlmIChsaWdodC5zaGFkb3dFbmFibGVkICYmIG1l
c2gucmVjZWl2ZVNoYWRvd3MpIHsKKyAgICAgICAgICAgIHZhciBzaGFkb3dHZW5lcmF0b3IgPSBs
aWdodC5nZXRTaGFkb3dHZW5lcmF0b3IoKTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dHZW5lcmF0
b3IpIHsKKyAgICAgICAgICAgICAgICBzaGFkb3dHZW5lcmF0b3IuYmluZFNoYWRvd0xpZ2h0KGxp
Z2h0SW5kZXgsIGVmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIEJpbmRzIHRoZSBsaWdodCBpbmZvcm1hdGlvbiB0byB0aGUgZWZmZWN0Lgor
ICAgICAqIEBwYXJhbSBsaWdodCBUaGUgbGlnaHQgY29udGFpbmluZyB0aGUgZ2VuZXJhdG9yCisg
ICAgICogQHBhcmFtIGVmZmVjdCBUaGUgZWZmZWN0IHdlIGFyZSBiaW5kaW5nIHRoZSBkYXRhIHRv
CisgICAgICogQHBhcmFtIGxpZ2h0SW5kZXggVGhlIGxpZ2h0IGluZGV4IGluIHRoZSBlZmZlY3Qg
dXNlZCB0byByZW5kZXIKKyAgICAgKi8KKyAgICBNYXRlcmlhbEhlbHBlci5CaW5kTGlnaHRQcm9w
ZXJ0aWVzID0gZnVuY3Rpb24gKGxpZ2h0LCBlZmZlY3QsIGxpZ2h0SW5kZXgpIHsKKyAgICAgICAg
bGlnaHQudHJhbnNmZXJUb0VmZmVjdChlZmZlY3QsIGxpZ2h0SW5kZXggKyAiIik7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgbGlnaHRzIGluZm9ybWF0aW9uIGZyb20gdGhlIHNj
ZW5lIHRvIHRoZSBlZmZlY3QgZm9yIHRoZSBnaXZlbiBtZXNoLgorICAgICAqIEBwYXJhbSBsaWdo
dCBMaWdodCB0byBiaW5kCisgICAgICogQHBhcmFtIGxpZ2h0SW5kZXggTGlnaHQgaW5kZXgKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHdoZXJlIHRoZSBsaWdodCBiZWxvbmdzIHRvCisg
ICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggd2UgYXJlIGJpbmRpbmcgdGhlIGluZm9ybWF0aW9u
IHRvIHJlbmRlcgorICAgICAqIEBwYXJhbSBlZmZlY3QgVGhlIGVmZmVjdCB3ZSBhcmUgYmluZGlu
ZyB0aGUgZGF0YSB0bworICAgICAqIEBwYXJhbSB1c2VTcGVjdWxhciBEZWZpbmVzIGlmIHNwZWN1
bGFyIGlzIHN1cHBvcnRlZAorICAgICAqIEBwYXJhbSB1c2VQaHlzaWNhbExpZ2h0RmFsbG9mZiBT
cGVjaWZpZXMgd2hldGhlciB0aGUgbGlnaHQgZmFsbG9mZiBpcyBkZWZpbmVkIHBoeXNpY2FsbHkg
b3Igbm90CisgICAgICogQHBhcmFtIHJlYnVpbGRJblBhcmFsbGVsIFNwZWNpZmllcyB3aGV0aGVy
IHRoZSBzaGFkZXIgaXMgcmVidWlsZGluZyBpbiBwYXJhbGxlbAorICAgICAqLworICAgIE1hdGVy
aWFsSGVscGVyLkJpbmRMaWdodCA9IGZ1bmN0aW9uIChsaWdodCwgbGlnaHRJbmRleCwgc2NlbmUs
IG1lc2gsIGVmZmVjdCwgdXNlU3BlY3VsYXIsIHVzZVBoeXNpY2FsTGlnaHRGYWxsb2ZmLCByZWJ1
aWxkSW5QYXJhbGxlbCkgeworICAgICAgICBpZiAodXNlUGh5c2ljYWxMaWdodEZhbGxvZmYgPT09
IHZvaWQgMCkgeyB1c2VQaHlzaWNhbExpZ2h0RmFsbG9mZiA9IGZhbHNlOyB9CisgICAgICAgIGlm
IChyZWJ1aWxkSW5QYXJhbGxlbCA9PT0gdm9pZCAwKSB7IHJlYnVpbGRJblBhcmFsbGVsID0gZmFs
c2U7IH0KKyAgICAgICAgdmFyIGlBc1N0cmluZyA9IGxpZ2h0SW5kZXgudG9TdHJpbmcoKTsKKyAg
ICAgICAgdmFyIHNjYWxlZEludGVuc2l0eSA9IGxpZ2h0LmdldFNjYWxlZEludGVuc2l0eSgpOwor
ICAgICAgICBpZiAoIXJlYnVpbGRJblBhcmFsbGVsKSB7CisgICAgICAgICAgICBsaWdodC5fdW5p
Zm9ybUJ1ZmZlci5iaW5kVG9FZmZlY3QoZWZmZWN0LCAiTGlnaHQiICsgaUFzU3RyaW5nKTsKKyAg
ICAgICAgfQorICAgICAgICBNYXRlcmlhbEhlbHBlci5CaW5kTGlnaHRQcm9wZXJ0aWVzKGxpZ2h0
LCBlZmZlY3QsIGxpZ2h0SW5kZXgpOworICAgICAgICBsaWdodC5kaWZmdXNlLnNjYWxlVG9SZWYo
c2NhbGVkSW50ZW5zaXR5LCBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJUbXBDb2xvcnMiXS5Db2xvcjNbMF0pOworICAgICAgICBsaWdodC5fdW5pZm9ybUJ1
ZmZlci51cGRhdGVDb2xvcjQoInZMaWdodERpZmZ1c2UiLCBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUbXBDb2xvcnMiXS5Db2xvcjNbMF0sIHVzZVBoeXNp
Y2FsTGlnaHRGYWxsb2ZmID8gbGlnaHQucmFkaXVzIDogbGlnaHQucmFuZ2UsIGlBc1N0cmluZyk7
CisgICAgICAgIGlmICh1c2VTcGVjdWxhcikgeworICAgICAgICAgICAgbGlnaHQuc3BlY3VsYXIu
c2NhbGVUb1JlZihzY2FsZWRJbnRlbnNpdHksIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bIlRtcENvbG9ycyJdLkNvbG9yM1sxXSk7CisgICAgICAgICAgICBs
aWdodC5fdW5pZm9ybUJ1ZmZlci51cGRhdGVDb2xvcjMoInZMaWdodFNwZWN1bGFyIiwgX01hdGhz
X21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVG1wQ29sb3JzIl0uQ29s
b3IzWzFdLCBpQXNTdHJpbmcpOworICAgICAgICB9CisgICAgICAgIC8vIFNoYWRvd3MKKyAgICAg
ICAgaWYgKHNjZW5lLnNoYWRvd3NFbmFibGVkKSB7CisgICAgICAgICAgICB0aGlzLkJpbmRMaWdo
dFNoYWRvdyhsaWdodCwgbWVzaCwgaUFzU3RyaW5nLCBlZmZlY3QpOworICAgICAgICB9CisgICAg
ICAgIGxpZ2h0Ll91bmlmb3JtQnVmZmVyLnVwZGF0ZSgpOworICAgIH07CisgICAgLyoqCisgICAg
ICogQmluZHMgdGhlIGxpZ2h0cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzY2VuZSB0byB0aGUgZWZm
ZWN0IGZvciB0aGUgZ2l2ZW4gbWVzaC4KKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRo
ZSBsaWdodHMgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHdlIGFyZSBi
aW5kaW5nIHRoZSBpbmZvcm1hdGlvbiB0byByZW5kZXIKKyAgICAgKiBAcGFyYW0gZWZmZWN0IFRo
ZSBlZmZlY3Qgd2UgYXJlIGJpbmRpbmcgdGhlIGRhdGEgdG8KKyAgICAgKiBAcGFyYW0gZGVmaW5l
cyBUaGUgZ2VuZXJhdGVkIGRlZmluZXMgZm9yIHRoZSBlZmZlY3QKKyAgICAgKiBAcGFyYW0gbWF4
U2ltdWx0YW5lb3VzTGlnaHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaWdodCB0aGF0IGNhbiBi
ZSBib3VuZCB0byB0aGUgZWZmZWN0CisgICAgICogQHBhcmFtIHVzZVBoeXNpY2FsTGlnaHRGYWxs
b2ZmIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBsaWdodCBmYWxsb2ZmIGlzIGRlZmluZWQgcGh5c2lj
YWxseSBvciBub3QKKyAgICAgKiBAcGFyYW0gcmVidWlsZEluUGFyYWxsZWwgU3BlY2lmaWVzIHdo
ZXRoZXIgdGhlIHNoYWRlciBpcyByZWJ1aWxkaW5nIGluIHBhcmFsbGVsCisgICAgICovCisgICAg
TWF0ZXJpYWxIZWxwZXIuQmluZExpZ2h0cyA9IGZ1bmN0aW9uIChzY2VuZSwgbWVzaCwgZWZmZWN0
LCBkZWZpbmVzLCBtYXhTaW11bHRhbmVvdXNMaWdodHMsIHVzZVBoeXNpY2FsTGlnaHRGYWxsb2Zm
LCByZWJ1aWxkSW5QYXJhbGxlbCkgeworICAgICAgICBpZiAobWF4U2ltdWx0YW5lb3VzTGlnaHRz
ID09PSB2b2lkIDApIHsgbWF4U2ltdWx0YW5lb3VzTGlnaHRzID0gNDsgfQorICAgICAgICBpZiAo
dXNlUGh5c2ljYWxMaWdodEZhbGxvZmYgPT09IHZvaWQgMCkgeyB1c2VQaHlzaWNhbExpZ2h0RmFs
bG9mZiA9IGZhbHNlOyB9CisgICAgICAgIGlmIChyZWJ1aWxkSW5QYXJhbGxlbCA9PT0gdm9pZCAw
KSB7IHJlYnVpbGRJblBhcmFsbGVsID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIGxlbiA9IE1hdGgu
bWluKG1lc2gubGlnaHRTb3VyY2VzLmxlbmd0aCwgbWF4U2ltdWx0YW5lb3VzTGlnaHRzKTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgdmFyIGxp
Z2h0ID0gbWVzaC5saWdodFNvdXJjZXNbaV07CisgICAgICAgICAgICB0aGlzLkJpbmRMaWdodChs
aWdodCwgaSwgc2NlbmUsIG1lc2gsIGVmZmVjdCwgdHlwZW9mIGRlZmluZXMgPT09ICJib29sZWFu
IiA/IGRlZmluZXMgOiBkZWZpbmVzWyJTUEVDVUxBUlRFUk0iXSwgdXNlUGh5c2ljYWxMaWdodEZh
bGxvZmYsIHJlYnVpbGRJblBhcmFsbGVsKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogQmluZHMgdGhlIGZvZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzY2VuZSB0byB0aGUgZWZm
ZWN0IGZvciB0aGUgZ2l2ZW4gbWVzaC4KKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRo
ZSBsaWdodHMgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBtZXNoIFRoZSBtZXNoIHdlIGFyZSBi
aW5kaW5nIHRoZSBpbmZvcm1hdGlvbiB0byByZW5kZXIKKyAgICAgKiBAcGFyYW0gZWZmZWN0IFRo
ZSBlZmZlY3Qgd2UgYXJlIGJpbmRpbmcgdGhlIGRhdGEgdG8KKyAgICAgKiBAcGFyYW0gbGluZWFy
U3BhY2UgRGVmaW5lcyBpZiB0aGUgZm9nIGVmZmVjdCBpcyBhcHBsaWVkIGluIGxpbmVhciBzcGFj
ZQorICAgICAqLworICAgIE1hdGVyaWFsSGVscGVyLkJpbmRGb2dQYXJhbWV0ZXJzID0gZnVuY3Rp
b24gKHNjZW5lLCBtZXNoLCBlZmZlY3QsIGxpbmVhclNwYWNlKSB7CisgICAgICAgIGlmIChsaW5l
YXJTcGFjZSA9PT0gdm9pZCAwKSB7IGxpbmVhclNwYWNlID0gZmFsc2U7IH0KKyAgICAgICAgaWYg
KHNjZW5lLmZvZ0VuYWJsZWQgJiYgbWVzaC5hcHBseUZvZyAmJiBzY2VuZS5mb2dNb2RlICE9PSBf
c2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmUiXS5GT0dNT0RFX05PTkUp
IHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDQoInZGb2dJbmZvcyIsIHNjZW5lLmZvZ01v
ZGUsIHNjZW5lLmZvZ1N0YXJ0LCBzY2VuZS5mb2dFbmQsIHNjZW5lLmZvZ0RlbnNpdHkpOworICAg
ICAgICAgICAgLy8gQ29udmVydCBmb2cgY29sb3IgdG8gbGluZWFyIHNwYWNlIGlmIHVzZWQgaW4g
YSBsaW5lYXIgc3BhY2UgY29tcHV0ZWQgc2hhZGVyLgorICAgICAgICAgICAgaWYgKGxpbmVhclNw
YWNlKSB7CisgICAgICAgICAgICAgICAgc2NlbmUuZm9nQ29sb3IudG9MaW5lYXJTcGFjZVRvUmVm
KHRoaXMuX3RlbXBGb2dDb2xvcik7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldENvbG9yMygi
dkZvZ0NvbG9yIiwgdGhpcy5fdGVtcEZvZ0NvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRDb2xvcjMoInZGb2dDb2xvciIs
IHNjZW5lLmZvZ0NvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqCisgICAgICogQmluZHMgdGhlIGJvbmVzIGluZm9ybWF0aW9uIGZyb20gdGhlIG1lc2ggdG8g
dGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0gbWVzaCBUaGUgbWVzaCB3ZSBhcmUgYmluZGluZyB0
aGUgaW5mb3JtYXRpb24gdG8gcmVuZGVyCisgICAgICogQHBhcmFtIGVmZmVjdCBUaGUgZWZmZWN0
IHdlIGFyZSBiaW5kaW5nIHRoZSBkYXRhIHRvCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIu
QmluZEJvbmVzUGFyYW1ldGVycyA9IGZ1bmN0aW9uIChtZXNoLCBlZmZlY3QpIHsKKyAgICAgICAg
aWYgKCFlZmZlY3QgfHwgIW1lc2gpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgJiYgZWZmZWN0Ll9ib25l
c0NvbXB1dGF0aW9uRm9yY2VkVG9DUFUpIHsKKyAgICAgICAgICAgIG1lc2guY29tcHV0ZUJvbmVz
VXNpbmdTaGFkZXJzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2gudXNlQm9u
ZXMgJiYgbWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgJiYgbWVzaC5za2VsZXRvbikgewor
ICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gbWVzaC5za2VsZXRvbjsKKyAgICAgICAgICAgIGlm
IChza2VsZXRvbi5pc1VzaW5nVGV4dHVyZUZvck1hdHJpY2VzICYmIGVmZmVjdC5nZXRVbmlmb3Jt
SW5kZXgoImJvbmVUZXh0dXJlV2lkdGgiKSA+IC0xKSB7CisgICAgICAgICAgICAgICAgdmFyIGJv
bmVUZXh0dXJlID0gc2tlbGV0b24uZ2V0VHJhbnNmb3JtTWF0cml4VGV4dHVyZShtZXNoKTsKKyAg
ICAgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgiYm9uZVNhbXBsZXIiLCBib25lVGV4dHVy
ZSk7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJib25lVGV4dHVyZVdpZHRoIiwg
NC4wICogKHNrZWxldG9uLmJvbmVzLmxlbmd0aCArIDEpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBtYXRyaWNlcyA9IHNrZWxldG9uLmdl
dFRyYW5zZm9ybU1hdHJpY2VzKG1lc2gpOworICAgICAgICAgICAgICAgIGlmIChtYXRyaWNlcykg
eworICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0TWF0cmljZXMoIm1Cb25lcyIsIG1hdHJp
Y2VzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIEJpbmRzIHRoZSBtb3JwaCB0YXJnZXRzIGluZm9ybWF0aW9uIGZy
b20gdGhlIG1lc2ggdG8gdGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0gYWJzdHJhY3RNZXNoIFRo
ZSBtZXNoIHdlIGFyZSBiaW5kaW5nIHRoZSBpbmZvcm1hdGlvbiB0byByZW5kZXIKKyAgICAgKiBA
cGFyYW0gZWZmZWN0IFRoZSBlZmZlY3Qgd2UgYXJlIGJpbmRpbmcgdGhlIGRhdGEgdG8KKyAgICAg
Ki8KKyAgICBNYXRlcmlhbEhlbHBlci5CaW5kTW9ycGhUYXJnZXRQYXJhbWV0ZXJzID0gZnVuY3Rp
b24gKGFic3RyYWN0TWVzaCwgZWZmZWN0KSB7CisgICAgICAgIHZhciBtYW5hZ2VyID0gYWJzdHJh
Y3RNZXNoLm1vcnBoVGFyZ2V0TWFuYWdlcjsKKyAgICAgICAgaWYgKCFhYnN0cmFjdE1lc2ggfHwg
IW1hbmFnZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlZmZl
Y3Quc2V0RmxvYXRBcnJheSgibW9ycGhUYXJnZXRJbmZsdWVuY2VzIiwgbWFuYWdlci5pbmZsdWVu
Y2VzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRzIHRoZSBsb2dhcml0aG1pYyBkZXB0
aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzY2VuZSB0byB0aGUgZWZmZWN0IGZvciB0aGUgZ2l2ZW4g
ZGVmaW5lcy4KKyAgICAgKiBAcGFyYW0gZGVmaW5lcyBUaGUgZ2VuZXJhdGVkIGRlZmluZXMgdXNl
ZCBpbiB0aGUgZWZmZWN0CisgICAgICogQHBhcmFtIGVmZmVjdCBUaGUgZWZmZWN0IHdlIGFyZSBi
aW5kaW5nIHRoZSBkYXRhIHRvCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB3ZSBhcmUg
d2lsbGluZyB0byByZW5kZXIgd2l0aCBsb2dhcml0aG1pYyBzY2FsZSBmb3IKKyAgICAgKi8KKyAg
ICBNYXRlcmlhbEhlbHBlci5CaW5kTG9nRGVwdGggPSBmdW5jdGlvbiAoZGVmaW5lcywgZWZmZWN0
LCBzY2VuZSkgeworICAgICAgICBpZiAoZGVmaW5lc1siTE9HQVJJVEhNSUNERVBUSCJdKSB7Cisg
ICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImxvZ2FyaXRobWljRGVwdGhDb25zdGFudCIsIDIu
MCAvIChNYXRoLmxvZyhzY2VuZS5hY3RpdmVDYW1lcmEubWF4WiArIDEuMCkgLyBNYXRoLkxOMikp
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgY2xpcCBwbGFu
ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzY2VuZSB0byB0aGUgZWZmZWN0LgorICAgICAqIEBwYXJh
bSBzY2VuZSBUaGUgc2NlbmUgdGhlIGNsaXAgcGxhbmUgaW5mb3JtYXRpb24gYXJlIGV4dHJhY3Rl
ZCBmcm9tCisgICAgICogQHBhcmFtIGVmZmVjdCBUaGUgZWZmZWN0IHdlIGFyZSBiaW5kaW5nIHRo
ZSBkYXRhIHRvCisgICAgICovCisgICAgTWF0ZXJpYWxIZWxwZXIuQmluZENsaXBQbGFuZSA9IGZ1
bmN0aW9uIChlZmZlY3QsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZS5jbGlwUGxhbmUpIHsK
KyAgICAgICAgICAgIHZhciBjbGlwUGxhbmUgPSBzY2VuZS5jbGlwUGxhbmU7CisgICAgICAgICAg
ICBlZmZlY3Quc2V0RmxvYXQ0KCJ2Q2xpcFBsYW5lIiwgY2xpcFBsYW5lLm5vcm1hbC54LCBjbGlw
UGxhbmUubm9ybWFsLnksIGNsaXBQbGFuZS5ub3JtYWwueiwgY2xpcFBsYW5lLmQpOworICAgICAg
ICB9CisgICAgICAgIGlmIChzY2VuZS5jbGlwUGxhbmUyKSB7CisgICAgICAgICAgICB2YXIgY2xp
cFBsYW5lID0gc2NlbmUuY2xpcFBsYW5lMjsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDQo
InZDbGlwUGxhbmUyIiwgY2xpcFBsYW5lLm5vcm1hbC54LCBjbGlwUGxhbmUubm9ybWFsLnksIGNs
aXBQbGFuZS5ub3JtYWwueiwgY2xpcFBsYW5lLmQpOworICAgICAgICB9CisgICAgICAgIGlmIChz
Y2VuZS5jbGlwUGxhbmUzKSB7CisgICAgICAgICAgICB2YXIgY2xpcFBsYW5lID0gc2NlbmUuY2xp
cFBsYW5lMzsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDQoInZDbGlwUGxhbmUzIiwgY2xp
cFBsYW5lLm5vcm1hbC54LCBjbGlwUGxhbmUubm9ybWFsLnksIGNsaXBQbGFuZS5ub3JtYWwueiwg
Y2xpcFBsYW5lLmQpOworICAgICAgICB9CisgICAgICAgIGlmIChzY2VuZS5jbGlwUGxhbmU0KSB7
CisgICAgICAgICAgICB2YXIgY2xpcFBsYW5lID0gc2NlbmUuY2xpcFBsYW5lNDsKKyAgICAgICAg
ICAgIGVmZmVjdC5zZXRGbG9hdDQoInZDbGlwUGxhbmU0IiwgY2xpcFBsYW5lLm5vcm1hbC54LCBj
bGlwUGxhbmUubm9ybWFsLnksIGNsaXBQbGFuZS5ub3JtYWwueiwgY2xpcFBsYW5lLmQpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBNYXRlcmlhbEhlbHBlci5fVG1wTW9ycGhJbmZsdWVuY2VycyA9
IHsgIk5VTV9NT1JQSF9JTkZMVUVOQ0VSUyI6IDAgfTsKKyAgICBNYXRlcmlhbEhlbHBlci5fdGVt
cEZvZ0NvbG9yID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siQ29sb3IzIl0uQmxhY2soKTsKKyAgICByZXR1cm4gTWF0ZXJpYWxIZWxwZXI7Cit9KCkpOwor
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGVyaWFscy9tdWx0aU1hdGVyaWFsLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0
ZXJpYWxzL211bHRpTWF0ZXJpYWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE11bHRpTWF0ZXJpYWwgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTXVsdGlNYXRlcmlhbCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gTXVsdGlNYXRlcmlhbDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL21hdGVy
aWFsICovICIuL01hdGVyaWFscy9tYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvdGFncyAqLyAiLi9NaXNjL3RhZ3MudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdHlwZVN0b3JlICovICIuL01p
c2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKy8qKgorICogQSBtdWx0aS1tYXRlcmlhbCBpcyB1
c2VkIHRvIGFwcGx5IGRpZmZlcmVudCBtYXRlcmlhbHMgdG8gZGlmZmVyZW50IHBhcnRzIG9mIHRo
ZSBzYW1lIG9iamVjdCB3aXRob3V0IHRoZSBuZWVkIG9mCisgKiBzZXBhcmF0ZSBtZXNoZXMuIFRo
aXMgY2FuIGJlIHVzZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlcy4KKyAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9tdWx0aV9tYXRlcmlhbHMKKyAqLwordmFyIE11bHRpTWF0
ZXJpYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTXVsdGlNYXRlcmlhbCwgX3N1
cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgTXVsdGkgTWF0ZXJpYWwK
KyAgICAgKiBBIG11bHRpLW1hdGVyaWFsIGlzIHVzZWQgdG8gYXBwbHkgZGlmZmVyZW50IG1hdGVy
aWFscyB0byBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNhbWUgb2JqZWN0IHdpdGhvdXQgdGhlIG5l
ZWQgb2YKKyAgICAgKiBzZXBhcmF0ZSBtZXNoZXMuIFRoaXMgY2FuIGJlIHVzZSB0byBpbXByb3Zl
IHBlcmZvcm1hbmNlcy4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3df
dG8vbXVsdGlfbWF0ZXJpYWxzCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIGlu
IHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSBtYXRl
cmlhbCBiZWxvbmdzIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gTXVsdGlNYXRlcmlhbChuYW1l
LCBzY2VuZSkgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCBz
Y2VuZSwgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgc2NlbmUubXVsdGlNYXRlcmlhbHMucHVzaChf
dGhpcyk7CisgICAgICAgIF90aGlzLnN1Yk1hdGVyaWFscyA9IG5ldyBBcnJheSgpOworICAgICAg
ICBfdGhpcy5fc3RvcmVFZmZlY3RPblN1Yk1lc2hlcyA9IHRydWU7IC8vIG11bHRpbWF0ZXJpYWwg
aXMgY29uc2lkZXJlZCBsaWtlIGEgcHVzaCBtYXRlcmlhbAorICAgICAgICByZXR1cm4gX3RoaXM7
CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdWx0aU1hdGVyaWFsLnByb3RvdHlw
ZSwgInN1Yk1hdGVyaWFscyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3IgU2V0
cyB0aGUgbGlzdCBvZiBNYXRlcmlhbHMgdXNlZCB3aXRoaW4gdGhlIG11bHRpIG1hdGVyaWFsLgor
ICAgICAgICAgKiBUaGV5IG5lZWQgdG8gYmUgb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlIHN1Ym1l
c2hlcyBvcmRlciBpbiB0aGUgYXNzb2NpYXRlZCBtZXNoCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJNYXRlcmlhbHM7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLl9zdWJNYXRlcmlhbHMgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2hvb2tBcnJh
eSh2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEZ1bmN0aW9uIHVz
ZWQgdG8gYWxpZ24gd2l0aCBOb2RlLmdldENoaWxkcmVuKCkKKyAgICAgKiBAcmV0dXJucyB0aGUg
bGlzdCBvZiBNYXRlcmlhbHMgdXNlZCB3aXRoaW4gdGhlIG11bHRpIG1hdGVyaWFsCisgICAgICov
CisgICAgTXVsdGlNYXRlcmlhbC5wcm90b3R5cGUuZ2V0Q2hpbGRyZW4gPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLnN1Yk1hdGVyaWFsczsKKyAgICB9OworICAgIE11bHRpTWF0
ZXJpYWwucHJvdG90eXBlLl9ob29rQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHsKKyAgICAgICAg
dmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIG9sZFB1c2ggPSBhcnJheS5wdXNoOworICAg
ICAgICBhcnJheS5wdXNoID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGl0ZW1zID0g
W107CisgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsg
X2krKykgeworICAgICAgICAgICAgICAgIGl0ZW1zW19pXSA9IGFyZ3VtZW50c1tfaV07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2xkUHVzaC5hcHBseShhcnJheSwg
aXRlbXMpOworICAgICAgICAgICAgX3RoaXMuX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGly
dHkoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07CisgICAgICAgIHZh
ciBvbGRTcGxpY2UgPSBhcnJheS5zcGxpY2U7CisgICAgICAgIGFycmF5LnNwbGljZSA9IGZ1bmN0
aW9uIChpbmRleCwgZGVsZXRlQ291bnQpIHsKKyAgICAgICAgICAgIHZhciBkZWxldGVkID0gb2xk
U3BsaWNlLmFwcGx5KGFycmF5LCBbaW5kZXgsIGRlbGV0ZUNvdW50XSk7CisgICAgICAgICAgICBf
dGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSgpOworICAgICAgICAgICAgcmV0
dXJuIGRlbGV0ZWQ7CisgICAgICAgIH07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgb25l
IG9mIHRoZSBzdWJtYXRlcmlhbCBieSBpdHMgaW5kZXggaW4gdGhlIHN1Ym1hdGVyaWFscyBhcnJh
eQorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggdG8gbG9vayB0aGUgc3ViIG1hdGVyaWFs
IGF0CisgICAgICogQHJldHVybnMgVGhlIE1hdGVyaWFsIGlmIHRoZSBpbmRleCBoYXMgYmVlbiBk
ZWZpbmVkCisgICAgICovCisgICAgTXVsdGlNYXRlcmlhbC5wcm90b3R5cGUuZ2V0U3ViTWF0ZXJp
YWwgPSBmdW5jdGlvbiAoaW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+
PSB0aGlzLnN1Yk1hdGVyaWFscy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmdl
dFNjZW5lKCkuZGVmYXVsdE1hdGVyaWFsOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz
LnN1Yk1hdGVyaWFsc1tpbmRleF07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGxp
c3Qgb2YgYWN0aXZlIHRleHR1cmVzIGZvciB0aGUgd2hvbGUgc3ViIG1hdGVyaWFscyBsaXN0Lgor
ICAgICAqIEByZXR1cm5zIEFsbCB0aGUgdGV4dHVyZXMgdGhhdCB3aWxsIGJlIHVzZWQgZHVyaW5n
IHRoZSByZW5kZXJpbmcKKyAgICAgKi8KKyAgICBNdWx0aU1hdGVyaWFsLnByb3RvdHlwZS5nZXRB
Y3RpdmVUZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF9hOworICAgICAgICBy
ZXR1cm4gKF9hID0gX3N1cGVyLnByb3RvdHlwZS5nZXRBY3RpdmVUZXh0dXJlcy5jYWxsKHRoaXMp
KS5jb25jYXQuYXBwbHkoX2EsIHRoaXMuc3ViTWF0ZXJpYWxzLm1hcChmdW5jdGlvbiAoc3ViTWF0
ZXJpYWwpIHsKKyAgICAgICAgICAgIGlmIChzdWJNYXRlcmlhbCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBzdWJNYXRlcmlhbC5nZXRBY3RpdmVUZXh0dXJlcygpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICAg
ICAgfQorICAgICAgICB9KSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJy
ZW50IGNsYXNzIG5hbWUgb2YgdGhlIG1hdGVyaWFsIGUuZy4gIk11bHRpTWF0ZXJpYWwiCisgICAg
ICogTWFpbmx5IHVzZSBpbiBzZXJpYWxpemF0aW9uLgorICAgICAqIEByZXR1cm5zIHRoZSBjbGFz
cyBuYW1lCisgICAgICovCisgICAgTXVsdGlNYXRlcmlhbC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIk11bHRpTWF0ZXJpYWwiOworICAgIH07
CisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBtYXRlcmlhbCBpcyByZWFkeSB0byByZW5k
ZXIgdGhlIHJlcXVlc3RlZCBzdWIgbWVzaAorICAgICAqIEBwYXJhbSBtZXNoIERlZmluZSB0aGUg
bWVzaCB0aGUgc3VibWVzaCBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIHN1Yk1lc2ggRGVmaW5l
IHRoZSBzdWIgbWVzaCB0byBsb29rIHJlYWR5bmVzcyBmb3IKKyAgICAgKiBAcGFyYW0gdXNlSW5z
dGFuY2VzIERlZmluZSB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0ZXJpYWwgaXMgdXNlZCB3aXRoIGlu
c3RhbmNlcworICAgICAqIEByZXR1cm5zIHRydWUgaWYgcmVhZHksIG90aGVyd2lzZSBmYWxzZQor
ICAgICAqLworICAgIE11bHRpTWF0ZXJpYWwucHJvdG90eXBlLmlzUmVhZHlGb3JTdWJNZXNoID0g
ZnVuY3Rpb24gKG1lc2gsIHN1Yk1lc2gsIHVzZUluc3RhbmNlcykgeworICAgICAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5zdWJNYXRlcmlhbHMubGVuZ3RoOyBpbmRleCsrKSB7
CisgICAgICAgICAgICB2YXIgc3ViTWF0ZXJpYWwgPSB0aGlzLnN1Yk1hdGVyaWFsc1tpbmRleF07
CisgICAgICAgICAgICBpZiAoc3ViTWF0ZXJpYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3Vi
TWF0ZXJpYWwuX3N0b3JlRWZmZWN0T25TdWJNZXNoZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFzdWJNYXRlcmlhbC5pc1JlYWR5Rm9yU3ViTWVzaChtZXNoLCBzdWJNZXNoLCB1c2VJbnN0
YW5jZXMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghc3ViTWF0ZXJpYWwuaXNSZWFkeShtZXNoKSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBjdXJyZW50IG1hdGVyaWFsIGFuZCBpdHMgcmVsYXRl
ZCBzdWIgbWF0ZXJpYWxzCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRo
ZSBuZXdseSBjbG9uZWQgbWF0ZXJpYWwKKyAgICAgKiBAcGFyYW0gY2xvbmVDaGlsZHJlbiBEZWZp
bmUgaWYgc3VibWF0ZXJpYWwgd2lsbCBiZSBjbG9uZWQgb3Igc2hhcmVkIHdpdGggdGhlIHBhcmVu
dCBpbnN0YW5jZQorICAgICAqIEByZXR1cm5zIHRoZSBjbG9uZWQgbWF0ZXJpYWwKKyAgICAgKi8K
KyAgICBNdWx0aU1hdGVyaWFsLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIChuYW1lLCBjbG9u
ZUNoaWxkcmVuKSB7CisgICAgICAgIHZhciBuZXdNdWx0aU1hdGVyaWFsID0gbmV3IE11bHRpTWF0
ZXJpYWwobmFtZSwgdGhpcy5nZXRTY2VuZSgpKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAw
OyBpbmRleCA8IHRoaXMuc3ViTWF0ZXJpYWxzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgdmFyIHN1Yk1hdGVyaWFsID0gbnVsbDsKKyAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhp
cy5zdWJNYXRlcmlhbHNbaW5kZXhdOworICAgICAgICAgICAgaWYgKGNsb25lQ2hpbGRyZW4gJiYg
Y3VycmVudCkgeworICAgICAgICAgICAgICAgIHN1Yk1hdGVyaWFsID0gY3VycmVudC5jbG9uZShu
YW1lICsgIi0iICsgY3VycmVudC5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHN1Yk1hdGVyaWFsID0gdGhpcy5zdWJNYXRlcmlhbHNbaW5k
ZXhdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV3TXVsdGlNYXRlcmlhbC5zdWJNYXRl
cmlhbHMucHVzaChzdWJNYXRlcmlhbCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ld011
bHRpTWF0ZXJpYWw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBtYXRl
cmlhbHMgaW50byBhIEpTT04gcmVwcmVzZW50YXRpb24uCisgICAgICogQHJldHVybnMgdGhlIEpT
T04gcmVwcmVzZW50YXRpb24KKyAgICAgKi8KKyAgICBNdWx0aU1hdGVyaWFsLnByb3RvdHlwZS5z
ZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0
ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubmFtZSA9IHRoaXMubmFtZTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5pZCA9IHRoaXMuaWQ7CisgICAgICAgIGlmIChfTWlz
Y190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRhZ3MiXSkgeworICAgICAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC50YWdzID0gX01pc2NfdGFnc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJUYWdzIl0uR2V0VGFncyh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0Lm1hdGVyaWFscyA9IFtdOworICAgICAgICBmb3IgKHZhciBtYXRJ
bmRleCA9IDA7IG1hdEluZGV4IDwgdGhpcy5zdWJNYXRlcmlhbHMubGVuZ3RoOyBtYXRJbmRleCsr
KSB7CisgICAgICAgICAgICB2YXIgc3ViTWF0ID0gdGhpcy5zdWJNYXRlcmlhbHNbbWF0SW5kZXhd
OworICAgICAgICAgICAgaWYgKHN1Yk1hdCkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QubWF0ZXJpYWxzLnB1c2goc3ViTWF0LmlkKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF0ZXJp
YWxzLnB1c2gobnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlIHRo
ZSBtYXRlcmlhbCBhbmQgcmVsZWFzZSBpdHMgYXNzb2NpYXRlZCByZXNvdXJjZXMKKyAgICAgKiBA
cGFyYW0gZm9yY2VEaXNwb3NlRWZmZWN0IERlZmluZSBpZiB3ZSB3YW50IHRvIGZvcmNlIGRpc3Bv
c2luZyB0aGUgYXNzb2NpYXRlZCBlZmZlY3QgKGlmIGZhbHNlIHRoZSBzaGFkZXIgaXMgbm90IHJl
bGVhc2VkIGFuZCBjb3VsZCBiZSByZXVzZSBsYXRlciBvbikKKyAgICAgKiBAcGFyYW0gZm9yY2VE
aXNwb3NlVGV4dHVyZXMgRGVmaW5lIGlmIHdlIHdhbnQgdG8gZm9yY2UgZGlzcG9zaW5nIHRoZSBh
c3NvY2lhdGVkIHRleHR1cmVzIChpZiBmYWxzZSwgdGhleSB3aWxsIG5vdCBiZSBkaXNwb3NlZCBh
bmQgY2FuIHN0aWxsIGJlIHVzZSBlbHNld2hlcmUgaW4gdGhlIGFwcCkKKyAgICAgKiBAcGFyYW0g
Zm9yY2VEaXNwb3NlQ2hpbGRyZW4gRGVmaW5lIGlmIHdlIHdhbnQgdG8gZm9yY2UgZGlzcG9zaW5n
IHRoZSBhc3NvY2lhdGVkIHN1Ym1hdGVyaWFscyAoaWYgZmFsc2UsIHRoZXkgd2lsbCBub3QgYmUg
ZGlzcG9zZWQgYW5kIGNhbiBzdGlsbCBiZSB1c2UgZWxzZXdoZXJlIGluIHRoZSBhcHApCisgICAg
ICovCisgICAgTXVsdGlNYXRlcmlhbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChmb3Jj
ZURpc3Bvc2VFZmZlY3QsIGZvcmNlRGlzcG9zZVRleHR1cmVzLCBmb3JjZURpc3Bvc2VDaGlsZHJl
bikgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7CisgICAgICAgIGlmICgh
c2NlbmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9y
Y2VEaXNwb3NlQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCB0aGlzLnN1Yk1hdGVyaWFscy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAg
ICB2YXIgc3ViTWF0ZXJpYWwgPSB0aGlzLnN1Yk1hdGVyaWFsc1tpbmRleF07CisgICAgICAgICAg
ICAgICAgaWYgKHN1Yk1hdGVyaWFsKSB7CisgICAgICAgICAgICAgICAgICAgIHN1Yk1hdGVyaWFs
LmRpc3Bvc2UoZm9yY2VEaXNwb3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBpbmRl
eCA9IHNjZW5lLm11bHRpTWF0ZXJpYWxzLmluZGV4T2YodGhpcyk7CisgICAgICAgIGlmIChpbmRl
eCA+PSAwKSB7CisgICAgICAgICAgICBzY2VuZS5tdWx0aU1hdGVyaWFscy5zcGxpY2UoaW5kZXgs
IDEpOworICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRo
aXMsIGZvcmNlRGlzcG9zZUVmZmVjdCwgZm9yY2VEaXNwb3NlVGV4dHVyZXMpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIE11bHRpTWF0ZXJpYWwgZnJvbSBwYXJzZWQgTXVsdGlN
YXRlcmlhbCBkYXRhLgorICAgICAqIEBwYXJhbSBwYXJzZWRNdWx0aU1hdGVyaWFsIGRlZmluZXMg
cGFyc2VkIE11bHRpTWF0ZXJpYWwgZGF0YS4KKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0
aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIGEgbmV3IE11bHRpTWF0ZXJpYWwKKyAg
ICAgKi8KKyAgICBNdWx0aU1hdGVyaWFsLlBhcnNlTXVsdGlNYXRlcmlhbCA9IGZ1bmN0aW9uIChw
YXJzZWRNdWx0aU1hdGVyaWFsLCBzY2VuZSkgeworICAgICAgICB2YXIgbXVsdGlNYXRlcmlhbCA9
IG5ldyBNdWx0aU1hdGVyaWFsKHBhcnNlZE11bHRpTWF0ZXJpYWwubmFtZSwgc2NlbmUpOworICAg
ICAgICBtdWx0aU1hdGVyaWFsLmlkID0gcGFyc2VkTXVsdGlNYXRlcmlhbC5pZDsKKyAgICAgICAg
aWYgKF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVGFncyJdKSB7Cisg
ICAgICAgICAgICBfTWlzY190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRhZ3Mi
XS5BZGRUYWdzVG8obXVsdGlNYXRlcmlhbCwgcGFyc2VkTXVsdGlNYXRlcmlhbC50YWdzKTsKKyAg
ICAgICAgfQorICAgICAgICBmb3IgKHZhciBtYXRJbmRleCA9IDA7IG1hdEluZGV4IDwgcGFyc2Vk
TXVsdGlNYXRlcmlhbC5tYXRlcmlhbHMubGVuZ3RoOyBtYXRJbmRleCsrKSB7CisgICAgICAgICAg
ICB2YXIgc3ViTWF0SWQgPSBwYXJzZWRNdWx0aU1hdGVyaWFsLm1hdGVyaWFsc1ttYXRJbmRleF07
CisgICAgICAgICAgICBpZiAoc3ViTWF0SWQpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
c2FtZSBtdWx0aW1hdGVyaWFsIGlzIGxvYWRlZCB0d2ljZSwgdGhlIDJuZCBtdWx0aW1hdGVyaWFs
IG5lZWRzIHRvIHJlZmVyZW5jZSB0aGUgbGF0ZXN0IG1hdGVyaWFsIGJ5IHRoYXQgaWQgd2hpY2gK
KyAgICAgICAgICAgICAgICAvLyBpcyB3aHkgdGhpcyBsb29rdXAgc2hvdWxkIHVzZSBnZXRMYXN0
TWF0ZXJpYWxCeUlEIGluc3RlYWQgb2YgZ2V0TWF0ZXJpYWxCeUlECisgICAgICAgICAgICAgICAg
bXVsdGlNYXRlcmlhbC5zdWJNYXRlcmlhbHMucHVzaChzY2VuZS5nZXRMYXN0TWF0ZXJpYWxCeUlE
KHN1Yk1hdElkKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBtdWx0aU1hdGVyaWFsLnN1Yk1hdGVyaWFscy5wdXNoKG51bGwpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBtdWx0aU1hdGVyaWFsOworICAgIH07Cisg
ICAgcmV0dXJuIE11bHRpTWF0ZXJpYWw7Cit9KF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTWF0ZXJpYWwiXSkpOworCitfTWlzY190eXBlU3RvcmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1si
QkFCWUxPTi5NdWx0aU1hdGVyaWFsIl0gPSBNdWx0aU1hdGVyaWFsOworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NYXRlcmlhbHMvcHVzaE1hdGVyaWFsLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvcHVzaE1hdGVyaWFs
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IFB1c2hNYXRlcmlhbCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJQdXNoTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFB1c2hNYXRlcmlh
bDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rv
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGVyaWFscy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKworCisKKy8q
KgorICogQmFzZSBjbGFzcyBvZiBtYXRlcmlhbHMgd29ya2luZyBpbiBwdXNoIG1vZGUgaW4gYmFi
eWxvbiBKUworICogQGhpZGRlbgorICovCit2YXIgUHVzaE1hdGVyaWFsID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZXh0ZW5kcyJdKFB1c2hNYXRlcmlhbCwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBQ
dXNoTWF0ZXJpYWwobmFtZSwgc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNh
bGwodGhpcywgbmFtZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9ub3JtYWxNYXRy
aXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
Ik1hdHJpeCJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29s
ZWFuIGluZGljYXRpbmcgdGhhdCB0aGUgbWF0ZXJpYWwgaXMgYWxsb3dlZCB0byBkbyBzaGFkZXIg
aG90IHN3YXBwaW5nLgorICAgICAgICAgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIG1hdGVyaWFsIGNh
biBrZWVwIHVzaW5nIGEgcHJldmlvdXMgc2hhZGVyIHdoaWxlIGEgbmV3IG9uZSBpcyBiZWluZyBj
b21waWxlZC4KKyAgICAgICAgICogVGhpcyBpcyBtb3N0bHkgdXNlZCB3aGVuIHNoYWRlciBwYXJh
bGxlbCBjb21waWxhdGlvbiBpcyBzdXBwb3J0ZWQgKHRydWUgYnkgZGVmYXVsdCkKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLmFsbG93U2hhZGVySG90U3dhcHBpbmcgPSB0cnVlOworICAgICAg
ICBfdGhpcy5fc3RvcmVFZmZlY3RPblN1Yk1lc2hlcyA9IHRydWU7CisgICAgICAgIHJldHVybiBf
dGhpczsKKyAgICB9CisgICAgUHVzaE1hdGVyaWFsLnByb3RvdHlwZS5nZXRFZmZlY3QgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVFZmZlY3Q7CisgICAgfTsKKyAg
ICBQdXNoTWF0ZXJpYWwucHJvdG90eXBlLmlzUmVhZHkgPSBmdW5jdGlvbiAobWVzaCwgdXNlSW5z
dGFuY2VzKSB7CisgICAgICAgIGlmICghbWVzaCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGlmICghbWVzaC5zdWJNZXNoZXMgfHwgbWVzaC5zdWJNZXNo
ZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpcy5pc1JlYWR5Rm9yU3ViTWVzaChtZXNoLCBtZXNoLnN1Yk1lc2hl
c1swXSwgdXNlSW5zdGFuY2VzKTsKKyAgICB9OworICAgIC8qKgorICAgICogQmluZHMgdGhlIGdp
dmVuIHdvcmxkIG1hdHJpeCB0byB0aGUgYWN0aXZlIGVmZmVjdAorICAgICoKKyAgICAqIEBwYXJh
bSB3b3JsZCB0aGUgbWF0cml4IHRvIGJpbmQKKyAgICAqLworICAgIFB1c2hNYXRlcmlhbC5wcm90
b3R5cGUuYmluZE9ubHlXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uICh3b3JsZCkgeworICAgICAgICB0
aGlzLl9hY3RpdmVFZmZlY3Quc2V0TWF0cml4KCJ3b3JsZCIsIHdvcmxkKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEJpbmRzIHRoZSBnaXZlbiBub3JtYWwgbWF0cml4IHRvIHRoZSBhY3RpdmUg
ZWZmZWN0CisgICAgICoKKyAgICAgKiBAcGFyYW0gbm9ybWFsTWF0cml4IHRoZSBtYXRyaXggdG8g
YmluZAorICAgICAqLworICAgIFB1c2hNYXRlcmlhbC5wcm90b3R5cGUuYmluZE9ubHlOb3JtYWxN
YXRyaXggPSBmdW5jdGlvbiAobm9ybWFsTWF0cml4KSB7CisgICAgICAgIHRoaXMuX2FjdGl2ZUVm
ZmVjdC5zZXRNYXRyaXgoIm5vcm1hbE1hdHJpeCIsIG5vcm1hbE1hdHJpeCk7CisgICAgfTsKKyAg
ICBQdXNoTWF0ZXJpYWwucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAod29ybGQsIG1lc2gpIHsK
KyAgICAgICAgaWYgKCFtZXNoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5iaW5kRm9yU3ViTWVzaCh3b3JsZCwgbWVzaCwgbWVzaC5zdWJNZXNoZXNbMF0p
OworICAgIH07CisgICAgUHVzaE1hdGVyaWFsLnByb3RvdHlwZS5fYWZ0ZXJCaW5kID0gZnVuY3Rp
b24gKG1lc2gsIGVmZmVjdCkgeworICAgICAgICBpZiAoZWZmZWN0ID09PSB2b2lkIDApIHsgZWZm
ZWN0ID0gbnVsbDsgfQorICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9hZnRlckJpbmQuY2FsbCh0
aGlzLCBtZXNoKTsKKyAgICAgICAgdGhpcy5nZXRTY2VuZSgpLl9jYWNoZWRFZmZlY3QgPSBlZmZl
Y3Q7CisgICAgfTsKKyAgICBQdXNoTWF0ZXJpYWwucHJvdG90eXBlLl9tdXN0UmViaW5kID0gZnVu
Y3Rpb24gKHNjZW5lLCBlZmZlY3QsIHZpc2liaWxpdHkpIHsKKyAgICAgICAgaWYgKHZpc2liaWxp
dHkgPT09IHZvaWQgMCkgeyB2aXNpYmlsaXR5ID0gMTsgfQorICAgICAgICByZXR1cm4gc2NlbmUu
aXNDYWNoZWRNYXRlcmlhbEludmFsaWQodGhpcywgZWZmZWN0LCB2aXNpYmlsaXR5KTsKKyAgICB9
OworICAgIHJldHVybiBQdXNoTWF0ZXJpYWw7Cit9KF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWF0ZXJpYWwiXSkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL01hdGVyaWFscy9zaGFkZXJNYXRlcmlhbC50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvc2hhZGVyTWF0
ZXJpYWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBTaGFkZXJNYXRlcmlhbCAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTaGFkZXJNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
U2hhZGVyTWF0ZXJpYWw7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2Rl
Y29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9idWZmZXIgKi8gIi4v
TWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
VGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJp
YWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0
ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vbWF0ZXJpYWxIZWxwZXIgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVy
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lZmZlY3QgKi8gIi4vTWF0
ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRlcmlhbF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9t
YXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0
b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworCisKKworCisKKwor
CisKKworCisvKioKKyAqIFRoZSBTaGFkZXJNYXRlcmlhbCBvYmplY3QgaGFzIHRoZSBuZWNlc3Nh
cnkgbWV0aG9kcyB0byBwYXNzIGRhdGEgZnJvbSB5b3VyIHNjZW5lIHRvIHRoZSBWZXJ0ZXggYW5k
IEZyYWdtZW50IFNoYWRlcnMgYW5kIHJldHVybnMgYSBtYXRlcmlhbCB0aGF0IGNhbiBiZSBhcHBs
aWVkIHRvIGFueSBtZXNoLgorICoKKyAqIFRoaXMgcmV0dXJuZWQgbWF0ZXJpYWwgZWZmZWN0cyBo
b3cgdGhlIG1lc2ggd2lsbCBsb29rIGJhc2VkIG9uIHRoZSBjb2RlIGluIHRoZSBzaGFkZXJzLgor
ICoKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9zaGFkZXJfbWF0ZXJp
YWwKKyAqLwordmFyIFNoYWRlck1hdGVyaWFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9z
dXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5k
cyJdKFNoYWRlck1hdGVyaWFsLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRl
IGEgbmV3IHNoYWRlciBtYXRlcmlhbC4KKyAgICAgKiBUaGUgU2hhZGVyTWF0ZXJpYWwgb2JqZWN0
IGhhcyB0aGUgbmVjZXNzYXJ5IG1ldGhvZHMgdG8gcGFzcyBkYXRhIGZyb20geW91ciBzY2VuZSB0
byB0aGUgVmVydGV4IGFuZCBGcmFnbWVudCBTaGFkZXJzIGFuZCByZXR1cm5zIGEgbWF0ZXJpYWwg
dGhhdCBjYW4gYmUgYXBwbGllZCB0byBhbnkgbWVzaC4KKyAgICAgKiBUaGlzIHJldHVybmVkIG1h
dGVyaWFsIGVmZmVjdHMgaG93IHRoZSBtZXNoIHdpbGwgbG9vayBiYXNlZCBvbiB0aGUgY29kZSBp
biB0aGUgc2hhZGVycy4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3df
dG8vc2hhZGVyX21hdGVyaWFsCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9m
IHRoZSBtYXRlcmlhbCBpbiB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lIHRo
ZSBzY2VuZSB0aGUgbWF0ZXJpYWwgYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBzaGFkZXJQYXRo
IERlZmluZXMgIHRoZSByb3V0ZSB0byB0aGUgc2hhZGVyIGNvZGUgaW4gb25lIG9mIHRocmVlIHdh
eXM6CisgICAgICogICogb2JqZWN0OiB7IHZlcnRleDogImN1c3RvbSIsIGZyYWdtZW50OiAiY3Vz
dG9tIiB9LCB1c2VkIHdpdGggRWZmZWN0LlNoYWRlcnNTdG9yZVsiY3VzdG9tVmVydGV4U2hhZGVy
Il0gYW5kIEVmZmVjdC5TaGFkZXJzU3RvcmVbImN1c3RvbUZyYWdtZW50U2hhZGVyIl0KKyAgICAg
KiAgKiBvYmplY3Q6IHsgdmVydGV4RWxlbWVudDogInZlcnRleFNoYWRlckNvZGUiLCBmcmFnbWVu
dEVsZW1lbnQ6ICJmcmFnbWVudFNoYWRlckNvZGUiIH0sIHVzZWQgd2l0aCBzaGFkZXIgY29kZSBp
biBzY3JpcHQgdGFncworICAgICAqICAqIG9iamVjdDogeyB2ZXJ0ZXhTb3VyY2U6ICJ2ZXJ0ZXgg
c2hhZGVyIGNvZGUgc3RyaW5nIiwgZnJhZ21lbnRTb3VyY2U6ICJmcmFnbWVudCBzaGFkZXIgY29k
ZSBzdHJpbmciIH0gdXNpbmcgd2l0aCBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIHNoYWRlcnMgY29k
ZQorICAgICAqICAqIHN0cmluZzogIi4vQ09NTU9OX05BTUUiLCB1c2VkIHdpdGggZXh0ZXJuYWwg
ZmlsZXMgQ09NTU9OX05BTUUudmVydGV4LmZ4IGFuZCBDT01NT05fTkFNRS5mcmFnbWVudC5meCBp
biBpbmRleC5odG1sIGZvbGRlci4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBEZWZpbmUgdGhlIG9w
dGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIHNoYWRlcgorICAgICAqLworICAgIGZ1bmN0aW9uIFNo
YWRlck1hdGVyaWFsKG5hbWUsIHNjZW5lLCBzaGFkZXJQYXRoLCBvcHRpb25zKSB7CisgICAgICAg
IGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9CisgICAgICAgIHZhciBf
dGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICBf
dGhpcy5fdGV4dHVyZXMgPSB7fTsKKyAgICAgICAgX3RoaXMuX3RleHR1cmVBcnJheXMgPSB7fTsK
KyAgICAgICAgX3RoaXMuX2Zsb2F0cyA9IHt9OworICAgICAgICBfdGhpcy5faW50cyA9IHt9Owor
ICAgICAgICBfdGhpcy5fZmxvYXRzQXJyYXlzID0ge307CisgICAgICAgIF90aGlzLl9jb2xvcnMz
ID0ge307CisgICAgICAgIF90aGlzLl9jb2xvcnMzQXJyYXlzID0ge307CisgICAgICAgIF90aGlz
Ll9jb2xvcnM0ID0ge307CisgICAgICAgIF90aGlzLl9jb2xvcnM0QXJyYXlzID0ge307CisgICAg
ICAgIF90aGlzLl92ZWN0b3JzMiA9IHt9OworICAgICAgICBfdGhpcy5fdmVjdG9yczMgPSB7fTsK
KyAgICAgICAgX3RoaXMuX3ZlY3RvcnM0ID0ge307CisgICAgICAgIF90aGlzLl9tYXRyaWNlcyA9
IHt9OworICAgICAgICBfdGhpcy5fbWF0cmljZXMzeDMgPSB7fTsKKyAgICAgICAgX3RoaXMuX21h
dHJpY2VzMngyID0ge307CisgICAgICAgIF90aGlzLl92ZWN0b3JzMkFycmF5cyA9IHt9OworICAg
ICAgICBfdGhpcy5fdmVjdG9yczNBcnJheXMgPSB7fTsKKyAgICAgICAgX3RoaXMuX3ZlY3RvcnM0
QXJyYXlzID0ge307CisgICAgICAgIF90aGlzLl9jYWNoZWRXb3JsZFZpZXdNYXRyaXggPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1hdHJpeCJd
KCk7CisgICAgICAgIF90aGlzLl9jYWNoZWRXb3JsZFZpZXdQcm9qZWN0aW9uTWF0cml4ID0gbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNYXRyaXgi
XSgpOworICAgICAgICBfdGhpcy5fc2hhZGVyUGF0aCA9IHNoYWRlclBhdGg7CisgICAgICAgIF90
aGlzLl9vcHRpb25zID0gdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19hc3Np
Z24iXSh7IG5lZWRBbHBoYUJsZW5kaW5nOiBmYWxzZSwgbmVlZEFscGhhVGVzdGluZzogZmFsc2Us
IGF0dHJpYnV0ZXM6IFsicG9zaXRpb24iLCAibm9ybWFsIiwgInV2Il0sIHVuaWZvcm1zOiBbIndv
cmxkVmlld1Byb2plY3Rpb24iXSwgdW5pZm9ybUJ1ZmZlcnM6IFtdLCBzYW1wbGVyczogW10sIGRl
ZmluZXM6IFtdIH0sIG9wdGlvbnMpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUsICJvcHRpb25z
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNv
bXBpbGUgdGhlIHNoYWRlci4KKyAgICAgICAgICogVGhleSBjYW4gYmUgbW9kaWZpZWQgdG8gdHJp
Z2dlciBhIG5ldyBjb21waWxhdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9uczsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lIG9mIHRoZSBt
YXRlcmlhbCBlLmcuICJTaGFkZXJNYXRlcmlhbCIKKyAgICAgKiBNYWlubHkgdXNlIGluIHNlcmlh
bGl6YXRpb24uCisgICAgICogQHJldHVybnMgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBT
aGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIlNoYWRlck1hdGVyaWFsIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNw
ZWNpZmllcyBpZiB0aGUgbWF0ZXJpYWwgd2lsbCByZXF1aXJlIGFscGhhIGJsZW5kaW5nCisgICAg
ICogQHJldHVybnMgYSBib29sZWFuIHNwZWNpZnlpbmcgaWYgYWxwaGEgYmxlbmRpbmcgaXMgbmVl
ZGVkCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLm5lZWRBbHBoYUJsZW5k
aW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gKHRoaXMuYWxwaGEgPCAxLjApIHx8
IHRoaXMuX29wdGlvbnMubmVlZEFscGhhQmxlbmRpbmc7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTcGVjaWZpZXMgaWYgdGhpcyBtYXRlcmlhbCBzaG91bGQgYmUgcmVuZGVyZWQgaW4gYWxwaGEg
dGVzdCBtb2RlCisgICAgICogQHJldHVybnMgYSBib29sZWFuIHNwZWNpZnlpbmcgaWYgYW4gYWxw
aGEgdGVzdCBpcyBuZWVkZWQuCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBl
Lm5lZWRBbHBoYVRlc3RpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9v
cHRpb25zLm5lZWRBbHBoYVRlc3Rpbmc7CisgICAgfTsKKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90
b3R5cGUuX2NoZWNrVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSkgeworICAgICAgICBp
ZiAodGhpcy5fb3B0aW9ucy51bmlmb3Jtcy5pbmRleE9mKHVuaWZvcm1OYW1lKSA9PT0gLTEpIHsK
KyAgICAgICAgICAgIHRoaXMuX29wdGlvbnMudW5pZm9ybXMucHVzaCh1bmlmb3JtTmFtZSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIHRleHR1cmUgaW4gdGhlIHNo
YWRlci4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0g
c2FtcGxlcnMgYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisgICAgICogQHBhcmFtIHRleHR1cmUg
RGVmaW5lIHRoZSB0ZXh0dXJlIHRvIGJpbmQgdG8gdGhpcyBzYW1wbGVyCisgICAgICogQHJldHVy
biB0aGUgbWF0ZXJpYWwgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQiIGxpa2UgdW5pZm9ybSB1cGRh
dGVzCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLnNldFRleHR1cmUgPSBm
dW5jdGlvbiAobmFtZSwgdGV4dHVyZSkgeworICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5zYW1w
bGVycy5pbmRleE9mKG5hbWUpID09PSAtMSkgeworICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5z
YW1wbGVycy5wdXNoKG5hbWUpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3RleHR1cmVzW25h
bWVdID0gdGV4dHVyZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXQgYSB0ZXh0dXJlIGFycmF5IGluIHRoZSBzaGFkZXIuCisgICAgICogQHBhcmFtIG5h
bWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIHNhbXBsZXIgYXJyYXkgYXMgZGVmaW5l
ZCBpbiB0aGUgc2hhZGVyCisgICAgICogQHBhcmFtIHRleHR1cmVzIERlZmluZSB0aGUgbGlzdCBv
ZiB0ZXh0dXJlcyB0byBiaW5kIHRvIHRoaXMgc2FtcGxlcgorICAgICAqIEByZXR1cm4gdGhlIG1h
dGVyaWFsIGl0c2VsZiBhbGxvd2luZyAiZmx1ZW50IiBsaWtlIHVuaWZvcm0gdXBkYXRlcworICAg
ICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5zZXRUZXh0dXJlQXJyYXkgPSBmdW5j
dGlvbiAobmFtZSwgdGV4dHVyZXMpIHsKKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuc2FtcGxl
cnMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuc2Ft
cGxlcnMucHVzaChuYW1lKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jaGVja1VuaWZvcm0o
bmFtZSk7CisgICAgICAgIHRoaXMuX3RleHR1cmVBcnJheXNbbmFtZV0gPSB0ZXh0dXJlczsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgYSBmbG9hdCBp
biB0aGUgc2hhZGVyLgorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUg
dW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0gdmFsdWUgRGVm
aW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1bmlmb3JtCisgICAgICogQHJldHVybiB0aGUg
bWF0ZXJpYWwgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQiIGxpa2UgdW5pZm9ybSB1cGRhdGVzCisg
ICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLnNldEZsb2F0ID0gZnVuY3Rpb24g
KG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAg
ICAgdGhpcy5fZmxvYXRzW25hbWVdID0gdmFsdWU7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogU2V0IGEgaW50IGluIHRoZSBzaGFkZXIuCisgICAgICogQHBh
cmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGFzIGRlZmluZWQgaW4gdGhl
IHNoYWRlcgorICAgICAqIEBwYXJhbSB2YWx1ZSBEZWZpbmUgdGhlIHZhbHVlIHRvIGdpdmUgdG8g
dGhlIHVuaWZvcm0KKyAgICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBpdHNlbGYgYWxsb3dpbmcg
ImZsdWVudCIgbGlrZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBTaGFkZXJNYXRlcmlh
bC5wcm90b3R5cGUuc2V0SW50ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRo
aXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5faW50c1tuYW1lXSA9IHZhbHVl
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhbiBh
cnJheSBvZiBmbG9hdHMgaW4gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUg
dGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisgICAgICog
QHBhcmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUgdW5pZm9ybQorICAg
ICAqIEByZXR1cm4gdGhlIG1hdGVyaWFsIGl0c2VsZiBhbGxvd2luZyAiZmx1ZW50IiBsaWtlIHVu
aWZvcm0gdXBkYXRlcworICAgICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5zZXRG
bG9hdHMgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5fY2hlY2tVbmlm
b3JtKG5hbWUpOworICAgICAgICB0aGlzLl9mbG9hdHNBcnJheXNbbmFtZV0gPSB2YWx1ZTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgYSB2ZWMzIGlu
IHRoZSBzaGFkZXIgZnJvbSBhIENvbG9yMy4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhl
IG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisgICAgICogQHBh
cmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUgdW5pZm9ybQorICAgICAq
IEByZXR1cm4gdGhlIG1hdGVyaWFsIGl0c2VsZiBhbGxvd2luZyAiZmx1ZW50IiBsaWtlIHVuaWZv
cm0gdXBkYXRlcworICAgICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5zZXRDb2xv
cjMgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5fY2hlY2tVbmlmb3Jt
KG5hbWUpOworICAgICAgICB0aGlzLl9jb2xvcnMzW25hbWVdID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0IGEgdmVjMyBhcnJheSBpbiB0
aGUgc2hhZGVyIGZyb20gYSBDb2xvcjMgYXJyYXkuCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5l
IHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGFzIGRlZmluZWQgaW4gdGhlIHNoYWRlcgorICAgICAq
IEBwYXJhbSB2YWx1ZSBEZWZpbmUgdGhlIHZhbHVlIHRvIGdpdmUgdG8gdGhlIHVuaWZvcm0KKyAg
ICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBpdHNlbGYgYWxsb3dpbmcgImZsdWVudCIgbGlrZSB1
bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuc2V0
Q29sb3IzQXJyYXkgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5fY2hl
Y2tVbmlmb3JtKG5hbWUpOworICAgICAgICB0aGlzLl9jb2xvcnMzQXJyYXlzW25hbWVdID0gdmFs
dWUucmVkdWNlKGZ1bmN0aW9uIChhcnIsIGNvbG9yKSB7CisgICAgICAgICAgICBjb2xvci50b0Fy
cmF5KGFyciwgYXJyLmxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gYXJyOworICAgICAgICB9
LCBbXSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
IGEgdmVjNCBpbiB0aGUgc2hhZGVyIGZyb20gYSBDb2xvcjQuCisgICAgICogQHBhcmFtIG5hbWUg
RGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGFzIGRlZmluZWQgaW4gdGhlIHNoYWRlcgor
ICAgICAqIEBwYXJhbSB2YWx1ZSBEZWZpbmUgdGhlIHZhbHVlIHRvIGdpdmUgdG8gdGhlIHVuaWZv
cm0KKyAgICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBpdHNlbGYgYWxsb3dpbmcgImZsdWVudCIg
bGlrZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5
cGUuc2V0Q29sb3I0ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2No
ZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fY29sb3JzNFtuYW1lXSA9IHZhbHVlOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIHZlYzQg
YXJyYXkgaW4gdGhlIHNoYWRlciBmcm9tIGEgQ29sb3I0IGFycmF5LgorICAgICAqIEBwYXJhbSBu
YW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFk
ZXIKKyAgICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1
bmlmb3JtCisgICAgICogQHJldHVybiB0aGUgbWF0ZXJpYWwgaXRzZWxmIGFsbG93aW5nICJmbHVl
bnQiIGxpa2UgdW5pZm9ybSB1cGRhdGVzCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJv
dG90eXBlLnNldENvbG9yNEFycmF5ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAg
IHRoaXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fY29sb3JzNEFycmF5c1tu
YW1lXSA9IHZhbHVlLnJlZHVjZShmdW5jdGlvbiAoYXJyLCBjb2xvcikgeworICAgICAgICAgICAg
Y29sb3IudG9BcnJheShhcnIsIGFyci5sZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIGFycjsK
KyAgICAgICAgfSwgW10pOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldCBhIHZlYzIgaW4gdGhlIHNoYWRlciBmcm9tIGEgVmVjdG9yMi4KKyAgICAgKiBA
cGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0
aGUgc2hhZGVyCisgICAgICogQHBhcmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0
byB0aGUgdW5pZm9ybQorICAgICAqIEByZXR1cm4gdGhlIG1hdGVyaWFsIGl0c2VsZiBhbGxvd2lu
ZyAiZmx1ZW50IiBsaWtlIHVuaWZvcm0gdXBkYXRlcworICAgICAqLworICAgIFNoYWRlck1hdGVy
aWFsLnByb3RvdHlwZS5zZXRWZWN0b3IyID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAg
ICAgIHRoaXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fdmVjdG9yczJbbmFt
ZV0gPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXQgYSB2ZWMzIGluIHRoZSBzaGFkZXIgZnJvbSBhIFZlY3RvcjMuCisgICAgICogQHBhcmFt
IG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGFzIGRlZmluZWQgaW4gdGhlIHNo
YWRlcgorICAgICAqIEBwYXJhbSB2YWx1ZSBEZWZpbmUgdGhlIHZhbHVlIHRvIGdpdmUgdG8gdGhl
IHVuaWZvcm0KKyAgICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBpdHNlbGYgYWxsb3dpbmcgImZs
dWVudCIgbGlrZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBTaGFkZXJNYXRlcmlhbC5w
cm90b3R5cGUuc2V0VmVjdG9yMyA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkgeworICAgICAgICB0
aGlzLl9jaGVja1VuaWZvcm0obmFtZSk7CisgICAgICAgIHRoaXMuX3ZlY3RvcnMzW25hbWVdID0g
dmFsdWU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
IGEgdmVjNCBpbiB0aGUgc2hhZGVyIGZyb20gYSBWZWN0b3I0LgorICAgICAqIEBwYXJhbSBuYW1l
IERlZmluZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFkZXIK
KyAgICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1bmlm
b3JtCisgICAgICogQHJldHVybiB0aGUgbWF0ZXJpYWwgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQi
IGxpa2UgdW5pZm9ybSB1cGRhdGVzCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90
eXBlLnNldFZlY3RvcjQgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5f
Y2hlY2tVbmlmb3JtKG5hbWUpOworICAgICAgICB0aGlzLl92ZWN0b3JzNFtuYW1lXSA9IHZhbHVl
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBhIG1h
dDQgaW4gdGhlIHNoYWRlciBmcm9tIGEgTWF0cml4LgorICAgICAqIEBwYXJhbSBuYW1lIERlZmlu
ZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRoZSBzaGFkZXIKKyAgICAg
KiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRvIHRoZSB1bmlmb3JtCisg
ICAgICogQHJldHVybiB0aGUgbWF0ZXJpYWwgaXRzZWxmIGFsbG93aW5nICJmbHVlbnQiIGxpa2Ug
dW5pZm9ybSB1cGRhdGVzCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLnNl
dE1hdHJpeCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkgeworICAgICAgICB0aGlzLl9jaGVja1Vu
aWZvcm0obmFtZSk7CisgICAgICAgIHRoaXMuX21hdHJpY2VzW25hbWVdID0gdmFsdWU7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0IGEgbWF0MyBpbiB0
aGUgc2hhZGVyIGZyb20gYSBGbG9hdDMyQXJyYXkuCisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5l
IHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGFzIGRlZmluZWQgaW4gdGhlIHNoYWRlcgorICAgICAq
IEBwYXJhbSB2YWx1ZSBEZWZpbmUgdGhlIHZhbHVlIHRvIGdpdmUgdG8gdGhlIHVuaWZvcm0KKyAg
ICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBpdHNlbGYgYWxsb3dpbmcgImZsdWVudCIgbGlrZSB1
bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuc2V0
TWF0cml4M3gzID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CisgICAgICAgIHRoaXMuX2NoZWNr
VW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fbWF0cmljZXMzeDNbbmFtZV0gPSB2YWx1ZTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgYSBtYXQy
IGluIHRoZSBzaGFkZXIgZnJvbSBhIEZsb2F0MzJBcnJheS4KKyAgICAgKiBAcGFyYW0gbmFtZSBE
ZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisg
ICAgICogQHBhcmFtIHZhbHVlIERlZmluZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUgdW5pZm9y
bQorICAgICAqIEByZXR1cm4gdGhlIG1hdGVyaWFsIGl0c2VsZiBhbGxvd2luZyAiZmx1ZW50IiBs
aWtlIHVuaWZvcm0gdXBkYXRlcworICAgICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlw
ZS5zZXRNYXRyaXgyeDIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5f
Y2hlY2tVbmlmb3JtKG5hbWUpOworICAgICAgICB0aGlzLl9tYXRyaWNlczJ4MltuYW1lXSA9IHZh
bHVlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCBh
IHZlYzIgYXJyYXkgaW4gdGhlIHNoYWRlciBmcm9tIGEgbnVtYmVyIGFycmF5LgorICAgICAqIEBw
YXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybSBhcyBkZWZpbmVkIGluIHRo
ZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0gdmFsdWUgRGVmaW5lIHRoZSB2YWx1ZSB0byBnaXZlIHRv
IHRoZSB1bmlmb3JtCisgICAgICogQHJldHVybiB0aGUgbWF0ZXJpYWwgaXRzZWxmIGFsbG93aW5n
ICJmbHVlbnQiIGxpa2UgdW5pZm9ybSB1cGRhdGVzCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJp
YWwucHJvdG90eXBlLnNldEFycmF5MiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkgeworICAgICAg
ICB0aGlzLl9jaGVja1VuaWZvcm0obmFtZSk7CisgICAgICAgIHRoaXMuX3ZlY3RvcnMyQXJyYXlz
W25hbWVdID0gdmFsdWU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0IGEgdmVjMyBhcnJheSBpbiB0aGUgc2hhZGVyIGZyb20gYSBudW1iZXIgYXJyYXku
CisgICAgICogQHBhcmFtIG5hbWUgRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB1bmlmb3JtIGFzIGRl
ZmluZWQgaW4gdGhlIHNoYWRlcgorICAgICAqIEBwYXJhbSB2YWx1ZSBEZWZpbmUgdGhlIHZhbHVl
IHRvIGdpdmUgdG8gdGhlIHVuaWZvcm0KKyAgICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBpdHNl
bGYgYWxsb3dpbmcgImZsdWVudCIgbGlrZSB1bmlmb3JtIHVwZGF0ZXMKKyAgICAgKi8KKyAgICBT
aGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuc2V0QXJyYXkzID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVl
KSB7CisgICAgICAgIHRoaXMuX2NoZWNrVW5pZm9ybShuYW1lKTsKKyAgICAgICAgdGhpcy5fdmVj
dG9yczNBcnJheXNbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTZXQgYSB2ZWM0IGFycmF5IGluIHRoZSBzaGFkZXIgZnJvbSBhIG51
bWJlciBhcnJheS4KKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHVu
aWZvcm0gYXMgZGVmaW5lZCBpbiB0aGUgc2hhZGVyCisgICAgICogQHBhcmFtIHZhbHVlIERlZmlu
ZSB0aGUgdmFsdWUgdG8gZ2l2ZSB0byB0aGUgdW5pZm9ybQorICAgICAqIEByZXR1cm4gdGhlIG1h
dGVyaWFsIGl0c2VsZiBhbGxvd2luZyAiZmx1ZW50IiBsaWtlIHVuaWZvcm0gdXBkYXRlcworICAg
ICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5zZXRBcnJheTQgPSBmdW5jdGlvbiAo
bmFtZSwgdmFsdWUpIHsKKyAgICAgICAgdGhpcy5fY2hlY2tVbmlmb3JtKG5hbWUpOworICAgICAg
ICB0aGlzLl92ZWN0b3JzNEFycmF5c1tuYW1lXSA9IHZhbHVlOworICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5fY2hlY2tDYWNoZSA9IGZ1
bmN0aW9uIChtZXNoLCB1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgaWYgKCFtZXNoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZWZmZWN0
ICYmICh0aGlzLl9lZmZlY3QuZGVmaW5lcy5pbmRleE9mKCIjZGVmaW5lIElOU1RBTkNFUyIpICE9
PSAtMSkgIT09IHVzZUluc3RhbmNlcykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNw
ZWNpZmllcyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJlYWR5IHRvIGJlIHVzZWQKKyAgICAgKiBAcGFy
YW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHN1Yk1lc2gg
ZGVmaW5lcyB3aGljaCBzdWJtZXNoIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHVzZUluc3RhbmNl
cyBzcGVjaWZpZXMgdGhhdCBpbnN0YW5jZXMgc2hvdWxkIGJlIHVzZWQKKyAgICAgKiBAcmV0dXJu
cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJlYWR5IG9yIG5vdAor
ICAgICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5pc1JlYWR5Rm9yU3ViTWVzaCA9
IGZ1bmN0aW9uIChtZXNoLCBzdWJNZXNoLCB1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuaXNSZWFkeShtZXNoLCB1c2VJbnN0YW5jZXMpOworICAgIH07CisgICAgLyoqCisgICAg
ICogQ2hlY2tzIGlmIHRoZSBtYXRlcmlhbCBpcyByZWFkeSB0byByZW5kZXIgdGhlIHJlcXVlc3Rl
ZCBtZXNoCisgICAgICogQHBhcmFtIG1lc2ggRGVmaW5lIHRoZSBtZXNoIHRvIHJlbmRlcgorICAg
ICAqIEBwYXJhbSB1c2VJbnN0YW5jZXMgRGVmaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRlcmlh
bCBpcyB1c2VkIHdpdGggaW5zdGFuY2VzCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiByZWFkeSwg
b3RoZXJ3aXNlIGZhbHNlCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmlz
UmVhZHkgPSBmdW5jdGlvbiAobWVzaCwgdXNlSW5zdGFuY2VzKSB7CisgICAgICAgIHZhciBzY2Vu
ZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2lu
ZSgpOworICAgICAgICBpZiAoIXRoaXMuY2hlY2tSZWFkeU9uRXZlcnlDYWxsKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fcmVuZGVySWQgPT09IHNjZW5lLmdldFJlbmRlcklkKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fY2hlY2tDYWNoZShtZXNoLCB1c2VJbnN0YW5jZXMpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBJbnN0YW5jZXMKKyAgICAgICAgdmFyIGRl
ZmluZXMgPSBbXTsKKyAgICAgICAgdmFyIGF0dHJpYnMgPSBbXTsKKyAgICAgICAgdmFyIGZhbGxi
YWNrcyA9IG5ldyBfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkVmZmVjdEZh
bGxiYWNrcyJdKCk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9v
cHRpb25zLmRlZmluZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBkZWZpbmVzLnB1
c2godGhpcy5fb3B0aW9ucy5kZWZpbmVzW2luZGV4XSk7CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX29wdGlvbnMuYXR0cmlidXRlcy5sZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgIGF0dHJpYnMucHVzaCh0aGlzLl9vcHRpb25zLmF0dHJp
YnV0ZXNbaW5kZXhdKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWVzaCAmJiBtZXNoLmlzVmVy
dGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQpKSB7CisgICAgICAgICAgICBhdHRyaWJzLnB1
c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVm
ZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBWRVJU
RVhDT0xPUiIpOworICAgICAgICB9CisgICAgICAgIGlmICh1c2VJbnN0YW5jZXMpIHsKKyAgICAg
ICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBJTlNUQU5DRVMiKTsKKyAgICAgICAgICAgIF9t
YXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlhbEhlbHBl
ciJdLlB1c2hBdHRyaWJ1dGVzRm9ySW5zdGFuY2VzKGF0dHJpYnMpOworICAgICAgICB9CisgICAg
ICAgIC8vIEJvbmVzCisgICAgICAgIGlmIChtZXNoICYmIG1lc2gudXNlQm9uZXMgJiYgbWVzaC5j
b21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgJiYgbWVzaC5za2VsZXRvbikgeworICAgICAgICAgICAg
YXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0tpbmQpOworICAgICAgICAgICAgYXR0cmli
cy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpOworICAgICAgICAgICAgaWYgKG1lc2gubnVt
Qm9uZUluZmx1ZW5jZXJzID4gNCkgeworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVzaChfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5N
YXRyaWNlc0luZGljZXNFeHRyYUtpbmQpOworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVzaChf
TWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIi
XS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIHNrZWxldG9uID0gbWVzaC5za2VsZXRvbjsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgi
I2RlZmluZSBOVU1fQk9ORV9JTkZMVUVOQ0VSUyAiICsgbWVzaC5udW1Cb25lSW5mbHVlbmNlcnMp
OworICAgICAgICAgICAgZmFsbGJhY2tzLmFkZENQVVNraW5uaW5nRmFsbGJhY2soMCwgbWVzaCk7
CisgICAgICAgICAgICBpZiAoc2tlbGV0b24uaXNVc2luZ1RleHR1cmVGb3JNYXRyaWNlcykgewor
ICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBCT05FVEVYVFVSRSIpOworICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnVuaWZvcm1zLmluZGV4T2YoImJvbmVUZXh0
dXJlV2lkdGgiKSA9PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy51
bmlmb3Jtcy5wdXNoKCJib25lVGV4dHVyZVdpZHRoIik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnNhbXBsZXJzLmluZGV4T2YoImJvbmVTYW1w
bGVyIikgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuc2FtcGxl
cnMucHVzaCgiYm9uZVNhbXBsZXIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZp
bmUgQm9uZXNQZXJNZXNoICIgKyAoc2tlbGV0b24uYm9uZXMubGVuZ3RoICsgMSkpOworICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnVuaWZvcm1zLmluZGV4T2YoIm1Cb25lcyIpID09
PSAtMSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zLnVuaWZvcm1zLnB1c2go
Im1Cb25lcyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBOVU1fQk9O
RV9JTkZMVUVOQ0VSUyAwIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGV4dHVyZXMKKyAgICAg
ICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykgeworICAgICAgICAgICAgaWYgKCF0
aGlzLl90ZXh0dXJlc1tuYW1lXS5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQWxwaGEgdGVzdAor
ICAgICAgICBpZiAobWVzaCAmJiB0aGlzLl9zaG91bGRUdXJuQWxwaGFUZXN0T24obWVzaCkpIHsK
KyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBBTFBIQVRFU1QiKTsKKyAgICAgICAg
fQorICAgICAgICB2YXIgcHJldmlvdXNFZmZlY3QgPSB0aGlzLl9lZmZlY3Q7CisgICAgICAgIHZh
ciBqb2luID0gZGVmaW5lcy5qb2luKCJcbiIpOworICAgICAgICB0aGlzLl9lZmZlY3QgPSBlbmdp
bmUuY3JlYXRlRWZmZWN0KHRoaXMuX3NoYWRlclBhdGgsIHsKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXM6IGF0dHJpYnMsCisgICAgICAgICAgICB1bmlmb3Jtc05hbWVzOiB0aGlzLl9vcHRpb25zLnVu
aWZvcm1zLAorICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlcnNOYW1lczogdGhpcy5fb3B0aW9ucy51
bmlmb3JtQnVmZmVycywKKyAgICAgICAgICAgIHNhbXBsZXJzOiB0aGlzLl9vcHRpb25zLnNhbXBs
ZXJzLAorICAgICAgICAgICAgZGVmaW5lczogam9pbiwKKyAgICAgICAgICAgIGZhbGxiYWNrczog
ZmFsbGJhY2tzLAorICAgICAgICAgICAgb25Db21waWxlZDogdGhpcy5vbkNvbXBpbGVkLAorICAg
ICAgICAgICAgb25FcnJvcjogdGhpcy5vbkVycm9yCisgICAgICAgIH0sIGVuZ2luZSk7CisgICAg
ICAgIGlmICghdGhpcy5fZWZmZWN0LmlzUmVhZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2aW91c0VmZmVjdCAhPT0gdGhpcy5fZWZm
ZWN0KSB7CisgICAgICAgICAgICBzY2VuZS5yZXNldENhY2hlZE1hdGVyaWFsKCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fcmVuZGVySWQgPSBzY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRzIHRoZSB3b3JsZCBt
YXRyaXggdG8gdGhlIG1hdGVyaWFsCisgICAgICogQHBhcmFtIHdvcmxkIGRlZmluZXMgdGhlIHdv
cmxkIHRyYW5zZm9ybWF0aW9uIG1hdHJpeAorICAgICAqLworICAgIFNoYWRlck1hdGVyaWFsLnBy
b3RvdHlwZS5iaW5kT25seVdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKHdvcmxkKSB7CisgICAgICAg
IHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgaWYgKCF0aGlzLl9lZmZlY3Qp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fb3B0
aW9ucy51bmlmb3Jtcy5pbmRleE9mKCJ3b3JsZCIpICE9PSAtMSkgeworICAgICAgICAgICAgdGhp
cy5fZWZmZWN0LnNldE1hdHJpeCgid29ybGQiLCB3b3JsZCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX29wdGlvbnMudW5pZm9ybXMuaW5kZXhPZigid29ybGRWaWV3IikgIT09IC0xKSB7
CisgICAgICAgICAgICB3b3JsZC5tdWx0aXBseVRvUmVmKHNjZW5lLmdldFZpZXdNYXRyaXgoKSwg
dGhpcy5fY2FjaGVkV29ybGRWaWV3TWF0cml4KTsKKyAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5z
ZXRNYXRyaXgoIndvcmxkVmlldyIsIHRoaXMuX2NhY2hlZFdvcmxkVmlld01hdHJpeCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMudW5pZm9ybXMuaW5kZXhPZigid29ybGRW
aWV3UHJvamVjdGlvbiIpICE9PSAtMSkgeworICAgICAgICAgICAgd29ybGQubXVsdGlwbHlUb1Jl
ZihzY2VuZS5nZXRUcmFuc2Zvcm1NYXRyaXgoKSwgdGhpcy5fY2FjaGVkV29ybGRWaWV3UHJvamVj
dGlvbk1hdHJpeCk7CisgICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0TWF0cml4KCJ3b3JsZFZp
ZXdQcm9qZWN0aW9uIiwgdGhpcy5fY2FjaGVkV29ybGRWaWV3UHJvamVjdGlvbk1hdHJpeCk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRzIHRoZSBtYXRlcmlhbCB0byB0
aGUgbWVzaAorICAgICAqIEBwYXJhbSB3b3JsZCBkZWZpbmVzIHRoZSB3b3JsZCB0cmFuc2Zvcm1h
dGlvbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRvIGJpbmQg
dGhlIG1hdGVyaWFsIHRvCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmJp
bmQgPSBmdW5jdGlvbiAod29ybGQsIG1lc2gpIHsKKyAgICAgICAgLy8gU3RkIHZhbHVlcworICAg
ICAgICB0aGlzLmJpbmRPbmx5V29ybGRNYXRyaXgod29ybGQpOworICAgICAgICBpZiAodGhpcy5f
ZWZmZWN0ICYmIHRoaXMuZ2V0U2NlbmUoKS5nZXRDYWNoZWRNYXRlcmlhbCgpICE9PSB0aGlzKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy51bmlmb3Jtcy5pbmRleE9mKCJ2aWV3Iikg
IT09IC0xKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldE1hdHJpeCgidmlldyIs
IHRoaXMuZ2V0U2NlbmUoKS5nZXRWaWV3TWF0cml4KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHRoaXMuX29wdGlvbnMudW5pZm9ybXMuaW5kZXhPZigicHJvamVjdGlvbiIpICE9
PSAtMSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRNYXRyaXgoInByb2plY3Rp
b24iLCB0aGlzLmdldFNjZW5lKCkuZ2V0UHJvamVjdGlvbk1hdHJpeCgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnVuaWZvcm1zLmluZGV4T2YoInZpZXdQ
cm9qZWN0aW9uIikgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldE1h
dHJpeCgidmlld1Byb2plY3Rpb24iLCB0aGlzLmdldFNjZW5lKCkuZ2V0VHJhbnNmb3JtTWF0cml4
KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQm9uZXMKKyAgICAgICAgICAgIF9t
YXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlhbEhlbHBl
ciJdLkJpbmRCb25lc1BhcmFtZXRlcnMobWVzaCwgdGhpcy5fZWZmZWN0KTsKKyAgICAgICAgICAg
IHZhciBuYW1lOworICAgICAgICAgICAgLy8gVGV4dHVyZQorICAgICAgICAgICAgZm9yIChuYW1l
IGluIHRoaXMuX3RleHR1cmVzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldFRl
eHR1cmUobmFtZSwgdGhpcy5fdGV4dHVyZXNbbmFtZV0pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gVGV4dHVyZSBhcnJheXMKKyAgICAgICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl90
ZXh0dXJlQXJyYXlzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldFRleHR1cmVB
cnJheShuYW1lLCB0aGlzLl90ZXh0dXJlQXJyYXlzW25hbWVdKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIEludAorICAgICAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX2ludHMpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0SW50KG5hbWUsIHRoaXMuX2ludHNbbmFt
ZV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRmxvYXQKKyAgICAgICAgICAgIGZv
ciAobmFtZSBpbiB0aGlzLl9mbG9hdHMpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3Qu
c2V0RmxvYXQobmFtZSwgdGhpcy5fZmxvYXRzW25hbWVdKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIEZsb2F0cworICAgICAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX2Zsb2F0c0Fy
cmF5cykgeworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRBcnJheShuYW1lLCB0aGlz
Ll9mbG9hdHNBcnJheXNbbmFtZV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ29s
b3IzCisgICAgICAgICAgICBmb3IgKG5hbWUgaW4gdGhpcy5fY29sb3JzMykgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2VmZmVjdC5zZXRDb2xvcjMobmFtZSwgdGhpcy5fY29sb3JzM1tuYW1lXSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDb2xvcjNBcnJheQorICAgICAgICAgICAg
Zm9yIChuYW1lIGluIHRoaXMuX2NvbG9yczNBcnJheXMpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9lZmZlY3Quc2V0QXJyYXkzKG5hbWUsIHRoaXMuX2NvbG9yczNBcnJheXNbbmFtZV0pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ29sb3I0CisgICAgICAgICAgICBmb3IgKG5hbWUg
aW4gdGhpcy5fY29sb3JzNCkgeworICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHRoaXMuX2Nv
bG9yczRbbmFtZV07CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldEZsb2F0NChuYW1l
LCBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIENvbG9yNEFycmF5CisgICAgICAgICAgICBmb3IgKG5hbWUgaW4gdGhpcy5f
Y29sb3JzNEFycmF5cykgeworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRBcnJheTQo
bmFtZSwgdGhpcy5fY29sb3JzNEFycmF5c1tuYW1lXSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAvLyBWZWN0b3IyCisgICAgICAgICAgICBmb3IgKG5hbWUgaW4gdGhpcy5fdmVjdG9yczIp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0VmVjdG9yMihuYW1lLCB0aGlzLl92
ZWN0b3JzMltuYW1lXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBWZWN0b3IzCisg
ICAgICAgICAgICBmb3IgKG5hbWUgaW4gdGhpcy5fdmVjdG9yczMpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9lZmZlY3Quc2V0VmVjdG9yMyhuYW1lLCB0aGlzLl92ZWN0b3JzM1tuYW1lXSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBWZWN0b3I0CisgICAgICAgICAgICBmb3IgKG5h
bWUgaW4gdGhpcy5fdmVjdG9yczQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0
VmVjdG9yNChuYW1lLCB0aGlzLl92ZWN0b3JzNFtuYW1lXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBNYXRyaXgKKyAgICAgICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl9tYXRyaWNl
cykgeworICAgICAgICAgICAgICAgIHRoaXMuX2VmZmVjdC5zZXRNYXRyaXgobmFtZSwgdGhpcy5f
bWF0cmljZXNbbmFtZV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gTWF0cml4IDN4
MworICAgICAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX21hdHJpY2VzM3gzKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5fZWZmZWN0LnNldE1hdHJpeDN4MyhuYW1lLCB0aGlzLl9tYXRyaWNlczN4
M1tuYW1lXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBNYXRyaXggMngyCisgICAg
ICAgICAgICBmb3IgKG5hbWUgaW4gdGhpcy5fbWF0cmljZXMyeDIpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9lZmZlY3Quc2V0TWF0cml4MngyKG5hbWUsIHRoaXMuX21hdHJpY2VzMngyW25hbWVd
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFZlY3RvcjJBcnJheQorICAgICAgICAg
ICAgZm9yIChuYW1lIGluIHRoaXMuX3ZlY3RvcnMyQXJyYXlzKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fZWZmZWN0LnNldEFycmF5MihuYW1lLCB0aGlzLl92ZWN0b3JzMkFycmF5c1tuYW1lXSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBWZWN0b3IzQXJyYXkKKyAgICAgICAgICAg
IGZvciAobmFtZSBpbiB0aGlzLl92ZWN0b3JzM0FycmF5cykgeworICAgICAgICAgICAgICAgIHRo
aXMuX2VmZmVjdC5zZXRBcnJheTMobmFtZSwgdGhpcy5fdmVjdG9yczNBcnJheXNbbmFtZV0pOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVmVjdG9yNEFycmF5CisgICAgICAgICAgICBm
b3IgKG5hbWUgaW4gdGhpcy5fdmVjdG9yczRBcnJheXMpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9lZmZlY3Quc2V0QXJyYXk0KG5hbWUsIHRoaXMuX3ZlY3RvcnM0QXJyYXlzW25hbWVdKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hZnRlckJpbmQobWVzaCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBhY3RpdmUgdGV4dHVyZXMgZnJvbSB0aGUg
bWF0ZXJpYWwKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB0ZXh0dXJlcworICAgICAqLwor
ICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5nZXRBY3RpdmVUZXh0dXJlcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIGFjdGl2ZVRleHR1cmVzID0gX3N1cGVyLnByb3RvdHlwZS5nZXRB
Y3RpdmVUZXh0dXJlcy5jYWxsKHRoaXMpOworICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMu
X3RleHR1cmVzKSB7CisgICAgICAgICAgICBhY3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMuX3RleHR1
cmVzW25hbWVdKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX3Rl
eHR1cmVBcnJheXMpIHsKKyAgICAgICAgICAgIHZhciBhcnJheSA9IHRoaXMuX3RleHR1cmVBcnJh
eXNbbmFtZV07CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXku
bGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgYWN0aXZlVGV4dHVyZXMucHVzaChh
cnJheVtpbmRleF0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBh
Y3RpdmVUZXh0dXJlczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyBpZiB0aGUg
bWF0ZXJpYWwgdXNlcyBhIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBkZWZpbmVzIHRo
ZSB0ZXh0dXJlIHRvIGNoZWNrIGFnYWluc3QgdGhlIG1hdGVyaWFsCisgICAgICogQHJldHVybnMg
YSBib29sZWFuIHNwZWNpZnlpbmcgaWYgdGhlIG1hdGVyaWFsIHVzZXMgdGhlIHRleHR1cmUKKyAg
ICAgKi8KKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuaGFzVGV4dHVyZSA9IGZ1bmN0aW9u
ICh0ZXh0dXJlKSB7CisgICAgICAgIGlmIChfc3VwZXIucHJvdG90eXBlLmhhc1RleHR1cmUuY2Fs
bCh0aGlzLCB0ZXh0dXJlKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykgeworICAgICAgICAgICAg
aWYgKHRoaXMuX3RleHR1cmVzW25hbWVdID09PSB0ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIg
bmFtZSBpbiB0aGlzLl90ZXh0dXJlQXJyYXlzKSB7CisgICAgICAgICAgICB2YXIgYXJyYXkgPSB0
aGlzLl90ZXh0dXJlQXJyYXlzW25hbWVdOworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAw
OyBpbmRleCA8IGFycmF5Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIGlmIChh
cnJheVtpbmRleF0gPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1ha2VzIGEgZHVwbGljYXRl
IG9mIHRoZSBtYXRlcmlhbCwgYW5kIGdpdmVzIGl0IGEgbmV3IG5hbWUKKyAgICAgKiBAcGFyYW0g
bmFtZSBkZWZpbmVzIHRoZSBuZXcgbmFtZSBmb3IgdGhlIGR1cGxpY2F0ZWQgbWF0ZXJpYWwKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY2xvbmVkIG1hdGVyaWFsCisgICAgICovCisgICAgU2hhZGVyTWF0
ZXJpYWwucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgdmFyIG5l
d1NoYWRlck1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKG5hbWUsIHRoaXMuZ2V0U2NlbmUo
KSwgdGhpcy5fc2hhZGVyUGF0aCwgdGhpcy5fb3B0aW9ucyk7CisgICAgICAgIHJldHVybiBuZXdT
aGFkZXJNYXRlcmlhbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBtYXRl
cmlhbAorICAgICAqIEBwYXJhbSBmb3JjZURpc3Bvc2VFZmZlY3Qgc3BlY2lmaWVzIGlmIGVmZmVj
dHMgc2hvdWxkIGJlIGZvcmNlZnVsbHkgZGlzcG9zZWQKKyAgICAgKiBAcGFyYW0gZm9yY2VEaXNw
b3NlVGV4dHVyZXMgc3BlY2lmaWVzIGlmIHRleHR1cmVzIHNob3VsZCBiZSBmb3JjZWZ1bGx5IGRp
c3Bvc2VkCisgICAgICogQHBhcmFtIG5vdEJvdW5kVG9NZXNoIHNwZWNpZmllcyBpZiB0aGUgbWF0
ZXJpYWwgdGhhdCBpcyBiZWluZyBkaXNwb3NlZCBpcyBrbm93biB0byBiZSBub3QgYm91bmQgdG8g
YW55IG1lc2gKKyAgICAgKi8KKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuZGlzcG9zZSA9
IGZ1bmN0aW9uIChmb3JjZURpc3Bvc2VFZmZlY3QsIGZvcmNlRGlzcG9zZVRleHR1cmVzLCBub3RC
b3VuZFRvTWVzaCkgeworICAgICAgICBpZiAoZm9yY2VEaXNwb3NlVGV4dHVyZXMpIHsKKyAgICAg
ICAgICAgIHZhciBuYW1lOworICAgICAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX3RleHR1cmVz
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbbmFtZV0uZGlzcG9zZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX3RleHR1cmVBcnJheXMp
IHsKKyAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSB0aGlzLl90ZXh0dXJlQXJyYXlzW25hbWVd
OworICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5n
dGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdLmRpc3Bvc2Uo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fdGV4dHVyZXMgPSB7fTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNh
bGwodGhpcywgZm9yY2VEaXNwb3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcywgbm90Qm91
bmRUb01lc2gpOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGlzIG1hdGVy
aWFsIGluIGEgSlNPTiByZXByZXNlbnRhdGlvbgorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxp
emVkIG1hdGVyaWFsIG9iamVjdAorICAgICAqLworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlw
ZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2Jq
ZWN0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJp
YWxpemF0aW9uSGVscGVyIl0uU2VyaWFsaXplKHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9u
T2JqZWN0LmN1c3RvbVR5cGUgPSAiQkFCWUxPTi5TaGFkZXJNYXRlcmlhbCI7CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3Qub3B0aW9ucyA9IHRoaXMuX29wdGlvbnM7CisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3Quc2hhZGVyUGF0aCA9IHRoaXMuX3NoYWRlclBhdGg7CisgICAgICAgIHZh
ciBuYW1lOworICAgICAgICAvLyBUZXh0dXJlCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
dGV4dHVyZXMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX3RleHR1cmVzKSB7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRleHR1cmVzW25hbWVdID0gdGhpcy5fdGV4
dHVyZXNbbmFtZV0uc2VyaWFsaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGV4dHVyZSBh
cnJheXMKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50ZXh0dXJlQXJyYXlzID0ge307Cisg
ICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl90ZXh0dXJlQXJyYXlzKSB7CisgICAgICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LnRleHR1cmVBcnJheXNbbmFtZV0gPSBbXTsKKyAgICAgICAgICAg
IHZhciBhcnJheSA9IHRoaXMuX3RleHR1cmVBcnJheXNbbmFtZV07CisgICAgICAgICAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50ZXh0dXJlQXJyYXlzW25hbWVdLnB1c2goYXJy
YXlbaW5kZXhdLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAvLyBGbG9hdAorICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmZsb2F0cyA9IHt9OworICAg
ICAgICBmb3IgKG5hbWUgaW4gdGhpcy5fZmxvYXRzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0
aW9uT2JqZWN0LmZsb2F0c1tuYW1lXSA9IHRoaXMuX2Zsb2F0c1tuYW1lXTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBGbG9hdCBzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuRmxvYXRBcnJh
eXMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX2Zsb2F0c0FycmF5cykgeworICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5GbG9hdEFycmF5c1tuYW1lXSA9IHRoaXMuX2Zs
b2F0c0FycmF5c1tuYW1lXTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb2xvcjMKKyAgICAgICAg
c2VyaWFsaXphdGlvbk9iamVjdC5jb2xvcnMzID0ge307CisgICAgICAgIGZvciAobmFtZSBpbiB0
aGlzLl9jb2xvcnMzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvbG9yczNb
bmFtZV0gPSB0aGlzLl9jb2xvcnMzW25hbWVdLmFzQXJyYXkoKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBDb2xvcjMgYXJyYXkKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jb2xvcnMzQXJy
YXlzID0ge307CisgICAgICAgIGZvciAobmFtZSBpbiB0aGlzLl9jb2xvcnMzQXJyYXlzKSB7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvbG9yczNBcnJheXNbbmFtZV0gPSB0aGlz
Ll9jb2xvcnMzQXJyYXlzW25hbWVdOworICAgICAgICB9CisgICAgICAgIC8vIENvbG9yNAorICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvbG9yczQgPSB7fTsKKyAgICAgICAgZm9yIChuYW1l
IGluIHRoaXMuX2NvbG9yczQpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29s
b3JzNFtuYW1lXSA9IHRoaXMuX2NvbG9yczRbbmFtZV0uYXNBcnJheSgpOworICAgICAgICB9Cisg
ICAgICAgIC8vIENvbG9yNCBhcnJheQorICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvbG9y
czRBcnJheXMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX2NvbG9yczRBcnJheXMp
IHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29sb3JzNEFycmF5c1tuYW1lXSA9
IHRoaXMuX2NvbG9yczRBcnJheXNbbmFtZV07CisgICAgICAgIH0KKyAgICAgICAgLy8gVmVjdG9y
MgorICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnZlY3RvcnMyID0ge307CisgICAgICAgIGZv
ciAobmFtZSBpbiB0aGlzLl92ZWN0b3JzMikgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC52ZWN0b3JzMltuYW1lXSA9IHRoaXMuX3ZlY3RvcnMyW25hbWVdLmFzQXJyYXkoKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBWZWN0b3IzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
dmVjdG9yczMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX3ZlY3RvcnMzKSB7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnZlY3RvcnMzW25hbWVdID0gdGhpcy5fdmVj
dG9yczNbbmFtZV0uYXNBcnJheSgpOworICAgICAgICB9CisgICAgICAgIC8vIFZlY3RvcjQKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC52ZWN0b3JzNCA9IHt9OworICAgICAgICBmb3IgKG5h
bWUgaW4gdGhpcy5fdmVjdG9yczQpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
dmVjdG9yczRbbmFtZV0gPSB0aGlzLl92ZWN0b3JzNFtuYW1lXS5hc0FycmF5KCk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gTWF0cml4CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF0cmlj
ZXMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX21hdHJpY2VzKSB7CisgICAgICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdHJpY2VzW25hbWVdID0gdGhpcy5fbWF0cmljZXNb
bmFtZV0uYXNBcnJheSgpOworICAgICAgICB9CisgICAgICAgIC8vIE1hdHJpeCAzeDMKKyAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXRyaWNlczN4MyA9IHt9OworICAgICAgICBmb3IgKG5h
bWUgaW4gdGhpcy5fbWF0cmljZXMzeDMpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QubWF0cmljZXMzeDNbbmFtZV0gPSB0aGlzLl9tYXRyaWNlczN4M1tuYW1lXTsKKyAgICAgICAg
fQorICAgICAgICAvLyBNYXRyaXggMngyCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF0
cmljZXMyeDIgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX21hdHJpY2VzMngyKSB7
CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdHJpY2VzMngyW25hbWVdID0gdGhp
cy5fbWF0cmljZXMyeDJbbmFtZV07CisgICAgICAgIH0KKyAgICAgICAgLy8gVmVjdG9yMkFycmF5
CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudmVjdG9yczJBcnJheXMgPSB7fTsKKyAgICAg
ICAgZm9yIChuYW1lIGluIHRoaXMuX3ZlY3RvcnMyQXJyYXlzKSB7CisgICAgICAgICAgICBzZXJp
YWxpemF0aW9uT2JqZWN0LnZlY3RvcnMyQXJyYXlzW25hbWVdID0gdGhpcy5fdmVjdG9yczJBcnJh
eXNbbmFtZV07CisgICAgICAgIH0KKyAgICAgICAgLy8gVmVjdG9yM0FycmF5CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QudmVjdG9yczNBcnJheXMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1l
IGluIHRoaXMuX3ZlY3RvcnMzQXJyYXlzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LnZlY3RvcnMzQXJyYXlzW25hbWVdID0gdGhpcy5fdmVjdG9yczNBcnJheXNbbmFtZV07Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gVmVjdG9yNEFycmF5CisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QudmVjdG9yczRBcnJheXMgPSB7fTsKKyAgICAgICAgZm9yIChuYW1lIGluIHRoaXMuX3Zl
Y3RvcnM0QXJyYXlzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnZlY3RvcnM0
QXJyYXlzW25hbWVdID0gdGhpcy5fdmVjdG9yczRBcnJheXNbbmFtZV07CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgc2hhZGVyIG1hdGVyaWFsIGZyb20gcGFyc2VkIHNoYWRlciBtYXRlcmlhbCBk
YXRhCisgICAgICogQHBhcmFtIHNvdXJjZSBkZWZpbmVzIHRoZSBKU09OIHJlcHJlc25ldGF0aW9u
IG9mIHRoZSBtYXRlcmlhbAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5n
IHNjZW5lCisgICAgICogQHBhcmFtIHJvb3RVcmwgZGVmaW5lcyB0aGUgcm9vdCBVUkwgdG8gdXNl
IHRvIGxvYWQgdGV4dHVyZXMgYW5kIHJlbGF0aXZlIGRlcGVuZGVuY2llcworICAgICAqIEByZXR1
cm5zIGEgbmV3IG1hdGVyaWFsCisgICAgICovCisgICAgU2hhZGVyTWF0ZXJpYWwuUGFyc2UgPSBm
dW5jdGlvbiAoc291cmNlLCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICB2YXIgbWF0ZXJpYWwg
PSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6
YXRpb25IZWxwZXIiXS5QYXJzZShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU2hhZGVyTWF0ZXJp
YWwoc291cmNlLm5hbWUsIHNjZW5lLCBzb3VyY2Uuc2hhZGVyUGF0aCwgc291cmNlLm9wdGlvbnMp
OyB9LCBzb3VyY2UsIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgdmFyIG5hbWU7CisgICAgICAg
IC8vIFRleHR1cmUKKyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJjZS50ZXh0dXJlcykgeworICAg
ICAgICAgICAgbWF0ZXJpYWwuc2V0VGV4dHVyZShuYW1lLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3Rl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGV4dHVyZSJdLlBhcnNlKHNvdXJj
ZS50ZXh0dXJlc1tuYW1lXSwgc2NlbmUsIHJvb3RVcmwpKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBUZXh0dXJlIGFycmF5cworICAgICAgICBmb3IgKG5hbWUgaW4gc291cmNlLnRleHR1cmVBcnJh
eXMpIHsKKyAgICAgICAgICAgIHZhciBhcnJheSA9IHNvdXJjZS50ZXh0dXJlQXJyYXlzW25hbWVd
OworICAgICAgICAgICAgdmFyIHRleHR1cmVBcnJheSA9IG5ldyBBcnJheSgpOworICAgICAgICAg
ICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5Lmxlbmd0aDsgaW5kZXgrKykgewor
ICAgICAgICAgICAgICAgIHRleHR1cmVBcnJheS5wdXNoKF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uUGFyc2UoYXJyYXlb
aW5kZXhdLCBzY2VuZSwgcm9vdFVybCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0
ZXJpYWwuc2V0VGV4dHVyZUFycmF5KG5hbWUsIHRleHR1cmVBcnJheSk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gRmxvYXQKKyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJjZS5mbG9hdHMpIHsKKyAg
ICAgICAgICAgIG1hdGVyaWFsLnNldEZsb2F0KG5hbWUsIHNvdXJjZS5mbG9hdHNbbmFtZV0pOwor
ICAgICAgICB9CisgICAgICAgIC8vIEZsb2F0IHMKKyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJj
ZS5mbG9hdHNBcnJheXMpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLnNldEZsb2F0cyhuYW1lLCBz
b3VyY2UuZmxvYXRzQXJyYXlzW25hbWVdKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb2xvcjMK
KyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJjZS5jb2xvcnMzKSB7CisgICAgICAgICAgICBtYXRl
cmlhbC5zZXRDb2xvcjMobmFtZSwgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siQ29sb3IzIl0uRnJvbUFycmF5KHNvdXJjZS5jb2xvcnMzW25hbWVdKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gQ29sb3IzIGFycmF5cworICAgICAgICBmb3IgKG5hbWUgaW4g
c291cmNlLmNvbG9yczNBcnJheXMpIHsKKyAgICAgICAgICAgIHZhciBjb2xvcnMgPSBzb3VyY2Uu
Y29sb3JzM0FycmF5c1tuYW1lXS5yZWR1Y2UoZnVuY3Rpb24gKGFyciwgbnVtLCBpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGkgJSAzID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGFyci5w
dXNoKFtudW1dKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFyclthcnIubGVuZ3RoIC0gMV0ucHVzaChudW0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gYXJyOworICAgICAgICAgICAgfSwg
W10pLm1hcChmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJuIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNvbG9yMyJdLkZyb21BcnJheShjb2xvcik7IH0pOwor
ICAgICAgICAgICAgbWF0ZXJpYWwuc2V0Q29sb3IzQXJyYXkobmFtZSwgY29sb3JzKTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBDb2xvcjQKKyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJjZS5jb2xv
cnM0KSB7CisgICAgICAgICAgICBtYXRlcmlhbC5zZXRDb2xvcjQobmFtZSwgX01hdGhzX21hdGhf
Y29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ29sb3I0Il0uRnJvbUFycmF5KHNv
dXJjZS5jb2xvcnM0W25hbWVdKSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29sb3I0IGFycmF5
cworICAgICAgICBmb3IgKG5hbWUgaW4gc291cmNlLmNvbG9yczRBcnJheXMpIHsKKyAgICAgICAg
ICAgIHZhciBjb2xvcnMgPSBzb3VyY2UuY29sb3JzNEFycmF5c1tuYW1lXS5yZWR1Y2UoZnVuY3Rp
b24gKGFyciwgbnVtLCBpKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgJSA0ID09PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKFtudW1dKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFyclthcnIubGVuZ3Ro
IC0gMV0ucHVzaChudW0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gYXJyOworICAgICAgICAgICAgfSwgW10pLm1hcChmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJu
IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNvbG9yNCJd
LkZyb21BcnJheShjb2xvcik7IH0pOworICAgICAgICAgICAgbWF0ZXJpYWwuc2V0Q29sb3I0QXJy
YXkobmFtZSwgY29sb3JzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBWZWN0b3IyCisgICAgICAg
IGZvciAobmFtZSBpbiBzb3VyY2UudmVjdG9yczIpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLnNl
dFZlY3RvcjIobmFtZSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlZlY3RvcjIiXS5Gcm9tQXJyYXkoc291cmNlLnZlY3RvcnMyW25hbWVdKSk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gVmVjdG9yMworICAgICAgICBmb3IgKG5hbWUgaW4gc291cmNlLnZl
Y3RvcnMzKSB7CisgICAgICAgICAgICBtYXRlcmlhbC5zZXRWZWN0b3IzKG5hbWUsIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uRnJvbUFy
cmF5KHNvdXJjZS52ZWN0b3JzM1tuYW1lXSkpOworICAgICAgICB9CisgICAgICAgIC8vIFZlY3Rv
cjQKKyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJjZS52ZWN0b3JzNCkgeworICAgICAgICAgICAg
bWF0ZXJpYWwuc2V0VmVjdG9yNChuYW1lLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVjdG9yNCJdLkZyb21BcnJheShzb3VyY2UudmVjdG9yczRbbmFt
ZV0pKTsKKyAgICAgICAgfQorICAgICAgICAvLyBNYXRyaXgKKyAgICAgICAgZm9yIChuYW1lIGlu
IHNvdXJjZS5tYXRyaWNlcykgeworICAgICAgICAgICAgbWF0ZXJpYWwuc2V0TWF0cml4KG5hbWUs
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNYXRyaXgi
XS5Gcm9tQXJyYXkoc291cmNlLm1hdHJpY2VzW25hbWVdKSk7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gTWF0cml4IDN4MworICAgICAgICBmb3IgKG5hbWUgaW4gc291cmNlLm1hdHJpY2VzM3gzKSB7
CisgICAgICAgICAgICBtYXRlcmlhbC5zZXRNYXRyaXgzeDMobmFtZSwgc291cmNlLm1hdHJpY2Vz
M3gzW25hbWVdKTsKKyAgICAgICAgfQorICAgICAgICAvLyBNYXRyaXggMngyCisgICAgICAgIGZv
ciAobmFtZSBpbiBzb3VyY2UubWF0cmljZXMyeDIpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLnNl
dE1hdHJpeDJ4MihuYW1lLCBzb3VyY2UubWF0cmljZXMyeDJbbmFtZV0pOworICAgICAgICB9Cisg
ICAgICAgIC8vIFZlY3RvcjJBcnJheQorICAgICAgICBmb3IgKG5hbWUgaW4gc291cmNlLnZlY3Rv
cnMyQXJyYXlzKSB7CisgICAgICAgICAgICBtYXRlcmlhbC5zZXRBcnJheTIobmFtZSwgc291cmNl
LnZlY3RvcnMyQXJyYXlzW25hbWVdKTsKKyAgICAgICAgfQorICAgICAgICAvLyBWZWN0b3IzQXJy
YXkKKyAgICAgICAgZm9yIChuYW1lIGluIHNvdXJjZS52ZWN0b3JzM0FycmF5cykgeworICAgICAg
ICAgICAgbWF0ZXJpYWwuc2V0QXJyYXkzKG5hbWUsIHNvdXJjZS52ZWN0b3JzM0FycmF5c1tuYW1l
XSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVmVjdG9yNEFycmF5CisgICAgICAgIGZvciAobmFt
ZSBpbiBzb3VyY2UudmVjdG9yczRBcnJheXMpIHsKKyAgICAgICAgICAgIG1hdGVyaWFsLnNldEFy
cmF5NChuYW1lLCBzb3VyY2UudmVjdG9yczRBcnJheXNbbmFtZV0pOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtYXRlcmlhbDsKKyAgICB9OworICAgIHJldHVybiBTaGFkZXJNYXRlcmlhbDsK
K30oX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsIl0pKTsK
KworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIl9UeXBlU3Rv
cmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uU2hhZGVyTWF0ZXJpYWwiXSA9IFNoYWRlck1h
dGVyaWFsOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRl
cmlhbC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL01hdGVyaWFscy9zdGFuZGFyZE1hdGVyaWFsLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBT
dGFuZGFyZE1hdGVyaWFsRGVmaW5lcywgU3RhbmRhcmRNYXRlcmlhbCAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gU3RhbmRhcmRNYXRlcmlhbERlZmluZXM7IH0pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiU3RhbmRhcmRNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3RhbmRhcmRNYXRlcmlh
bDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvc21hcnRB
cnJheSAqLyAiLi9NaXNjL3NtYXJ0QXJyYXkudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRo
LnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2J1ZmZlciAqLyAiLi9NZXNo
ZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAqLyAiLi9NYXRlcmlh
bHMvaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsRGVmaW5lc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxz
L21hdGVyaWFsRGVmaW5lcyAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWxEZWZpbmVzLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3B1c2hNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcHVzaE1hdGVyaWFsICovICIu
L01hdGVyaWFscy9wdXNoTWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
bWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL21hdGVyaWFsSGVscGVyICovICIuL01hdGVyaWFscy9tYXRlcmlhbEhl
bHBlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNf
dGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0
dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0
b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0ZXJpYWxGbGFncyAqLyAiLi9NYXRl
cmlhbHMvbWF0ZXJpYWxGbGFncy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzX2RlZmF1bHRfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2RlZmF1bHQuZnJhZ21lbnQgKi8gIi4vU2hh
ZGVycy9kZWZhdWx0LmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1No
YWRlcnNfZGVmYXVsdF92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2RlZmF1bHQudmVydGV4ICovICIuL1NoYWRl
cnMvZGVmYXVsdC52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50
cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworLyoqIEBoaWRkZW4gKi8K
K3ZhciBTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChf
c3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVu
ZHMiXShTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcywgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBTdGFu
ZGFyZE1hdGVyaWFsRGVmaW5lcygpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwo
dGhpcykgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuTUFJTlVWMSA9IGZhbHNlOworICAgICAgICBf
dGhpcy5NQUlOVVYyID0gZmFsc2U7CisgICAgICAgIF90aGlzLkRJRkZVU0UgPSBmYWxzZTsKKyAg
ICAgICAgX3RoaXMuRElGRlVTRURJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuQU1CSUVOVCA9
IGZhbHNlOworICAgICAgICBfdGhpcy5BTUJJRU5URElSRUNUVVYgPSAwOworICAgICAgICBfdGhp
cy5PUEFDSVRZID0gZmFsc2U7CisgICAgICAgIF90aGlzLk9QQUNJVFlESVJFQ1RVViA9IDA7Cisg
ICAgICAgIF90aGlzLk9QQUNJVFlSR0IgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElP
TiA9IGZhbHNlOworICAgICAgICBfdGhpcy5FTUlTU0lWRSA9IGZhbHNlOworICAgICAgICBfdGhp
cy5FTUlTU0lWRURJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMuU1BFQ1VMQVIgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuU1BFQ1VMQVJESVJFQ1RVViA9IDA7CisgICAgICAgIF90aGlzLkJVTVAg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQlVNUERJUkVDVFVWID0gMDsKKyAgICAgICAgX3RoaXMu
UEFSQUxMQVggPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUEFSQUxMQVhPQ0NMVVNJT04gPSBmYWxz
ZTsKKyAgICAgICAgX3RoaXMuU1BFQ1VMQVJPVkVSQUxQSEEgPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuQ0xJUFBMQU5FID0gZmFsc2U7CisgICAgICAgIF90aGlzLkNMSVBQTEFORTIgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuQ0xJUFBMQU5FMyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DTElQUExB
TkU0ID0gZmFsc2U7CisgICAgICAgIF90aGlzLkFMUEhBVEVTVCA9IGZhbHNlOworICAgICAgICBf
dGhpcy5ERVBUSFBSRVBBU1MgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuQUxQSEFGUk9NRElGRlVT
RSA9IGZhbHNlOworICAgICAgICBfdGhpcy5QT0lOVFNJWkUgPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuRk9HID0gZmFsc2U7CisgICAgICAgIF90aGlzLlNQRUNVTEFSVEVSTSA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5ESUZGVVNFRlJFU05FTCA9IGZhbHNlOworICAgICAgICBfdGhpcy5PUEFDSVRZ
RlJFU05FTCA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9ORlJFU05FTCA9IGZhbHNl
OworICAgICAgICBfdGhpcy5SRUZSQUNUSU9ORlJFU05FTCA9IGZhbHNlOworICAgICAgICBfdGhp
cy5FTUlTU0lWRUZSRVNORUwgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuRlJFU05FTCA9IGZhbHNl
OworICAgICAgICBfdGhpcy5OT1JNQUwgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVVYxID0gZmFs
c2U7CisgICAgICAgIF90aGlzLlVWMiA9IGZhbHNlOworICAgICAgICBfdGhpcy5WRVJURVhDT0xP
UiA9IGZhbHNlOworICAgICAgICBfdGhpcy5WRVJURVhBTFBIQSA9IGZhbHNlOworICAgICAgICBf
dGhpcy5OVU1fQk9ORV9JTkZMVUVOQ0VSUyA9IDA7CisgICAgICAgIF90aGlzLkJvbmVzUGVyTWVz
aCA9IDA7CisgICAgICAgIF90aGlzLkJPTkVURVhUVVJFID0gZmFsc2U7CisgICAgICAgIF90aGlz
LklOU1RBTkNFUyA9IGZhbHNlOworICAgICAgICBfdGhpcy5HTE9TU0lORVNTID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLlJPVUdITkVTUyA9IGZhbHNlOworICAgICAgICBfdGhpcy5FTUlTU0lWRUFT
SUxMVU1JTkFUSU9OID0gZmFsc2U7CisgICAgICAgIF90aGlzLkxJTktFTUlTU0lWRVdJVEhESUZG
VVNFID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05GUkVTTkVMRlJPTVNQRUNVTEFS
ID0gZmFsc2U7CisgICAgICAgIF90aGlzLkxJR0hUTUFQID0gZmFsc2U7CisgICAgICAgIF90aGlz
LkxJR0hUTUFQRElSRUNUVVYgPSAwOworICAgICAgICBfdGhpcy5PQkpFQ1RTUEFDRV9OT1JNQUxN
QVAgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVVNFTElHSFRNQVBBU1NIQURPV01BUCA9IGZhbHNl
OworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OTUFQXzNEID0gZmFsc2U7CisgICAgICAgIF90aGlz
LlJFRkxFQ1RJT05NQVBfU1BIRVJJQ0FMID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJ
T05NQVBfUExBTkFSID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJFRkxFQ1RJT05NQVBfQ1VCSUMg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVVNFX0xPQ0FMX1JFRkxFQ1RJT05NQVBfQ1VCSUMgPSBm
YWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1BUF9QUk9KRUNUSU9OID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLlJFRkxFQ1RJT05NQVBfU0tZQk9YID0gZmFsc2U7CisgICAgICAgIF90aGlz
LlJFRkxFQ1RJT05NQVBfU0tZQk9YX1RSQU5TRk9STUVEID0gZmFsc2U7CisgICAgICAgIF90aGlz
LlJFRkxFQ1RJT05NQVBfRVhQTElDSVQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElP
Tk1BUF9FUVVJUkVDVEFOR1VMQVIgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElPTk1B
UF9FUVVJUkVDVEFOR1VMQVJfRklYRUQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuUkVGTEVDVElP
Tk1BUF9NSVJST1JFREVRVUlSRUNUQU5HVUxBUl9GSVhFRCA9IGZhbHNlOworICAgICAgICBfdGhp
cy5JTlZFUlRDVUJJQ01BUCA9IGZhbHNlOworICAgICAgICBfdGhpcy5MT0dBUklUSE1JQ0RFUFRI
ID0gZmFsc2U7CisgICAgICAgIF90aGlzLlJFRlJBQ1RJT04gPSBmYWxzZTsKKyAgICAgICAgX3Ro
aXMuUkVGUkFDVElPTk1BUF8zRCA9IGZhbHNlOworICAgICAgICBfdGhpcy5SRUZMRUNUSU9OT1ZF
UkFMUEhBID0gZmFsc2U7CisgICAgICAgIF90aGlzLlRXT1NJREVETElHSFRJTkcgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuU0hBRE9XRkxPQVQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuTU9SUEhU
QVJHRVRTID0gZmFsc2U7CisgICAgICAgIF90aGlzLk1PUlBIVEFSR0VUU19OT1JNQUwgPSBmYWxz
ZTsKKyAgICAgICAgX3RoaXMuTU9SUEhUQVJHRVRTX1RBTkdFTlQgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuTU9SUEhUQVJHRVRTX1VWID0gZmFsc2U7CisgICAgICAgIF90aGlzLk5VTV9NT1JQSF9J
TkZMVUVOQ0VSUyA9IDA7CisgICAgICAgIF90aGlzLk5PTlVOSUZPUk1TQ0FMSU5HID0gZmFsc2U7
IC8vIGh0dHBzOi8vcGxheWdyb3VuZC5iYWJ5bG9uanMuY29tI1Y2RFdJSAorICAgICAgICBfdGhp
cy5QUkVNVUxUSVBMWUFMUEhBID0gZmFsc2U7IC8vIGh0dHBzOi8vcGxheWdyb3VuZC5iYWJ5bG9u
anMuY29tI0xOVkpKNworICAgICAgICBfdGhpcy5JTUFHRVBST0NFU1NJTkcgPSBmYWxzZTsKKyAg
ICAgICAgX3RoaXMuVklHTkVUVEUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuVklHTkVUVEVCTEVO
RE1PREVNVUxUSVBMWSA9IGZhbHNlOworICAgICAgICBfdGhpcy5WSUdORVRURUJMRU5ETU9ERU9Q
QVFVRSA9IGZhbHNlOworICAgICAgICBfdGhpcy5UT05FTUFQUElORyA9IGZhbHNlOworICAgICAg
ICBfdGhpcy5UT05FTUFQUElOR19BQ0VTID0gZmFsc2U7CisgICAgICAgIF90aGlzLkNPTlRSQVNU
ID0gZmFsc2U7CisgICAgICAgIF90aGlzLkNPTE9SQ1VSVkVTID0gZmFsc2U7CisgICAgICAgIF90
aGlzLkNPTE9SR1JBRElORyA9IGZhbHNlOworICAgICAgICBfdGhpcy5DT0xPUkdSQURJTkczRCA9
IGZhbHNlOworICAgICAgICBfdGhpcy5TQU1QTEVSM0RHUkVFTkRFUFRIID0gZmFsc2U7CisgICAg
ICAgIF90aGlzLlNBTVBMRVIzREJHUk1BUCA9IGZhbHNlOworICAgICAgICBfdGhpcy5JTUFHRVBS
T0NFU1NJTkdQT1NUUFJPQ0VTUyA9IGZhbHNlOworICAgICAgICBfdGhpcy5NVUxUSVZJRVcgPSBm
YWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSByZWZsZWN0aW9uIHRleHR1cmUg
b24gdGhpcyBtYXRlcmlhbCBpcyBpbiBsaW5lYXIgY29sb3Igc3BhY2UKKyAgICAgICAgICogQGhp
ZGRlbgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuSVNfUkVGTEVDVElPTl9MSU5FQVIgPSBm
YWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSByZWZyYWN0aW9uIHRleHR1cmUg
b24gdGhpcyBtYXRlcmlhbCBpcyBpbiBsaW5lYXIgY29sb3Igc3BhY2UKKyAgICAgICAgICogQGhp
ZGRlbgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuSVNfUkVGUkFDVElPTl9MSU5FQVIgPSBm
YWxzZTsKKyAgICAgICAgX3RoaXMuRVhQT1NVUkUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMucmVi
dWlsZCgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIFN0YW5kYXJkTWF0ZXJp
YWxEZWZpbmVzLnByb3RvdHlwZS5zZXRSZWZsZWN0aW9uTW9kZSA9IGZ1bmN0aW9uIChtb2RlVG9F
bmFibGUpIHsKKyAgICAgICAgdmFyIG1vZGVzID0gWworICAgICAgICAgICAgIlJFRkxFQ1RJT05N
QVBfQ1VCSUMiLCAiUkVGTEVDVElPTk1BUF9FWFBMSUNJVCIsICJSRUZMRUNUSU9OTUFQX1BMQU5B
UiIsCisgICAgICAgICAgICAiUkVGTEVDVElPTk1BUF9QUk9KRUNUSU9OIiwgIlJFRkxFQ1RJT05N
QVBfUFJPSkVDVElPTiIsICJSRUZMRUNUSU9OTUFQX1NLWUJPWCIsCisgICAgICAgICAgICAiUkVG
TEVDVElPTk1BUF9TUEhFUklDQUwiLCAiUkVGTEVDVElPTk1BUF9FUVVJUkVDVEFOR1VMQVIiLCAi
UkVGTEVDVElPTk1BUF9FUVVJUkVDVEFOR1VMQVJfRklYRUQiLAorICAgICAgICAgICAgIlJFRkxF
Q1RJT05NQVBfTUlSUk9SRURFUVVJUkVDVEFOR1VMQVJfRklYRUQiCisgICAgICAgIF07CisgICAg
ICAgIGZvciAodmFyIF9pID0gMCwgbW9kZXNfMSA9IG1vZGVzOyBfaSA8IG1vZGVzXzEubGVuZ3Ro
OyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbW9kZSA9IG1vZGVzXzFbX2ldOworICAgICAgICAg
ICAgdGhpc1ttb2RlXSA9IChtb2RlID09PSBtb2RlVG9FbmFibGUpOworICAgICAgICB9CisgICAg
fTsKKyAgICByZXR1cm4gU3RhbmRhcmRNYXRlcmlhbERlZmluZXM7Cit9KF9NYXRlcmlhbHNfbWF0
ZXJpYWxEZWZpbmVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIk1hdGVyaWFsRGVmaW5l
cyJdKSk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZGVmYXVsdCBtYXRlcmlhbCB1c2VkIGluIEJh
Ynlsb24uIEl0IGlzIHRoZSBiZXN0IHRyYWRlIG9mZiBiZXR3ZWVuIHF1YWxpdHkKKyAqIGFuZCBw
ZXJmb3JtYW5jZXMuCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAx
L21hdGVyaWFscworICovCit2YXIgU3RhbmRhcmRNYXRlcmlhbCA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2V4dGVuZHMiXShTdGFuZGFyZE1hdGVyaWFsLCBfc3VwZXIpOworICAgIC8qKgorICAgICAq
IEluc3RhbnRpYXRlcyBhIG5ldyBzdGFuZGFyZCBtYXRlcmlhbC4KKyAgICAgKiBUaGlzIGlzIHRo
ZSBkZWZhdWx0IG1hdGVyaWFsIHVzZWQgaW4gQmFieWxvbi4gSXQgaXMgdGhlIGJlc3QgdHJhZGUg
b2ZmIGJldHdlZW4gcXVhbGl0eQorICAgICAqIGFuZCBwZXJmb3JtYW5jZXMuCisgICAgICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9tYXRlcmlhbHMKKyAgICAgKiBA
cGFyYW0gbmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIG1hdGVyaWFsIGluIHRoZSBzY2VuZQor
ICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSBtYXRlcmlhbCBiZWxvbmcg
dG8KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdGFuZGFyZE1hdGVyaWFsKG5hbWUsIHNjZW5lKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0
aGlzOworICAgICAgICBfdGhpcy5fZGlmZnVzZVRleHR1cmUgPSBudWxsOworICAgICAgICBfdGhp
cy5fYW1iaWVudFRleHR1cmUgPSBudWxsOworICAgICAgICBfdGhpcy5fb3BhY2l0eVRleHR1cmUg
PSBudWxsOworICAgICAgICBfdGhpcy5fcmVmbGVjdGlvblRleHR1cmUgPSBudWxsOworICAgICAg
ICBfdGhpcy5fZW1pc3NpdmVUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX3NwZWN1bGFy
VGV4dHVyZSA9IG51bGw7CisgICAgICAgIF90aGlzLl9idW1wVGV4dHVyZSA9IG51bGw7CisgICAg
ICAgIF90aGlzLl9saWdodG1hcFRleHR1cmUgPSBudWxsOworICAgICAgICBfdGhpcy5fcmVmcmFj
dGlvblRleHR1cmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIG9m
IHRoZSBtYXRlcmlhbCBsaXQgYnkgdGhlIGVudmlyb25tZW50YWwgYmFja2dyb3VuZCBsaWdodGlu
Zy4KKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9t
YXRlcmlhbHMjYW1iaWVudC1jb2xvci1leGFtcGxlCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5hbWJpZW50Q29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siQ29sb3IzIl0oMCwgMCwgMCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBU
aGUgYmFzaWMgY29sb3Igb2YgdGhlIG1hdGVyaWFsIGFzIHZpZXdlZCB1bmRlciBhIGxpZ2h0Lgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZGlmZnVzZUNvbG9yID0gbmV3IF9NYXRoc19tYXRo
X2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbG9yMyJdKDEsIDEsIDEpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIGhvdyB0aGUgY29sb3IgYW5kIGludGVuc2l0
eSBvZiB0aGUgaGlnaGxpZ2h0IGdpdmVuIGJ5IHRoZSBsaWdodCBpbiB0aGUgbWF0ZXJpYWwuCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy5zcGVjdWxhckNvbG9yID0gbmV3IF9NYXRoc19tYXRo
X2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbG9yMyJdKDEsIDEsIDEpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lIHRoZSBjb2xvciBvZiB0aGUgbWF0ZXJpYWwg
YXMgaWYgc2VsZiBsaXQuCisgICAgICAgICAqIFRoaXMgd2lsbCBiZSBtaXhlZCBpbiB0aGUgZmlu
YWwgcmVzdWx0IGV2ZW4gaW4gdGhlIGFic2VuY2Ugb2YgbGlnaHQuCisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5lbWlzc2l2ZUNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIkNvbG9yMyJdKDAsIDAsIDApOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lcyBob3cgc2hhcnAgYXJlIHRoZSBoaWdobGlnaHRzIGluIHRoZSBtYXRl
cmlhbC4KKyAgICAgICAgICogVGhlIGJpZ2dlciB0aGUgdmFsdWUgdGhlIHNoYXJwZXIgZ2l2aW5n
IGEgbW9yZSBnbG9zc3kgZmVlbGluZyB0byB0aGUgcmVzdWx0LgorICAgICAgICAgKiBSZXZlcnNl
bHksIHRoZSBzbWFsbGVyIHRoZSB2YWx1ZSB0aGUgYmx1cnJpZXIgZ2l2aW5nIGEgbW9yZSByb3Vn
aCBmZWVsaW5nIHRvIHRoZSByZXN1bHQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5zcGVj
dWxhclBvd2VyID0gNjQ7CisgICAgICAgIF90aGlzLl91c2VBbHBoYUZyb21EaWZmdXNlVGV4dHVy
ZSA9IGZhbHNlOworICAgICAgICBfdGhpcy5fdXNlRW1pc3NpdmVBc0lsbHVtaW5hdGlvbiA9IGZh
bHNlOworICAgICAgICBfdGhpcy5fbGlua0VtaXNzaXZlV2l0aERpZmZ1c2UgPSBmYWxzZTsKKyAg
ICAgICAgX3RoaXMuX3VzZVNwZWN1bGFyT3ZlckFscGhhID0gZmFsc2U7CisgICAgICAgIF90aGlz
Ll91c2VSZWZsZWN0aW9uT3ZlckFscGhhID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9kaXNhYmxl
TGlnaHRpbmcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX3VzZU9iamVjdFNwYWNlTm9ybWFsTWFw
ID0gZmFsc2U7CisgICAgICAgIF90aGlzLl91c2VQYXJhbGxheCA9IGZhbHNlOworICAgICAgICBf
dGhpcy5fdXNlUGFyYWxsYXhPY2NsdXNpb24gPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEFwcGx5IGEgc2NhbGluZyBmYWN0b3IgdGhhdCBkZXRlcm1pbmUgd2hpY2ggImRlcHRoIiB0
aGUgaGVpZ2h0IG1hcCBzaG91bGQgcmVwcmVuc2VudC4gQSB2YWx1ZSBiZXR3ZWVuIDAuMDUgYW5k
IDAuMSBpcyByZWFzb25uYWJsZSBpbiBQYXJhbGxheCwgeW91IGNhbiByZWFjaCAwLjIgdXNpbmcg
UGFyYWxsYXggT2NjbHVzaW9uLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucGFyYWxsYXhT
Y2FsZUJpYXMgPSAwLjA1OworICAgICAgICBfdGhpcy5fcm91Z2huZXNzID0gMDsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEluIGNhc2Ugb2YgcmVmcmFjdGlvbiwgZGVmaW5lIHRoZSB2YWx1ZSBv
ZiB0aGUgaW5kZXggb2YgcmVmcmFjdGlvbi4KKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL3JlZmxlY3QjaG93LXRvLW9idGFpbi1yZWZsZWN0aW9ucy1hbmQt
cmVmcmFjdGlvbnMKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmluZGV4T2ZSZWZyYWN0aW9u
ID0gMC45ODsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludmVydCB0aGUgcmVmcmFjdGlvbiB0
ZXh0dXJlIGFsb25nc2lkZSB0aGUgeSBheGlzLgorICAgICAgICAgKiBJdCBjYW4gYmUgdXNlZnVs
IHdpdGggcHJvY2VkdXJhbCB0ZXh0dXJlcyBvciBwcm9iZSBmb3IgaW5zdGFuY2UuCisgICAgICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9yZWZsZWN0I2hvdy10by1v
YnRhaW4tcmVmbGVjdGlvbnMtYW5kLXJlZnJhY3Rpb25zCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5pbnZlcnRSZWZyYWN0aW9uWSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
ZWZpbmVzIHRoZSBhbHBoYSBsaW1pdHMgaW4gYWxwaGEgdGVzdCBtb2RlLgorICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMuYWxwaGFDdXRPZmYgPSAwLjQ7CisgICAgICAgIF90aGlzLl91c2VMaWdo
dG1hcEFzU2hhZG93bWFwID0gZmFsc2U7CisgICAgICAgIF90aGlzLl91c2VSZWZsZWN0aW9uRnJl
c25lbEZyb21TcGVjdWxhciA9IGZhbHNlOworICAgICAgICBfdGhpcy5fdXNlR2xvc3NpbmVzc0Zy
b21TcGVjdWxhck1hcEFscGhhID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9tYXhTaW11bHRhbmVv
dXNMaWdodHMgPSA0OworICAgICAgICBfdGhpcy5faW52ZXJ0Tm9ybWFsTWFwWCA9IGZhbHNlOwor
ICAgICAgICBfdGhpcy5faW52ZXJ0Tm9ybWFsTWFwWSA9IGZhbHNlOworICAgICAgICBfdGhpcy5f
dHdvU2lkZWRMaWdodGluZyA9IGZhbHNlOworICAgICAgICBfdGhpcy5fcmVuZGVyVGFyZ2V0cyA9
IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNtYXJ0
QXJyYXkiXSgxNik7CisgICAgICAgIF90aGlzLl93b3JsZFZpZXdQcm9qZWN0aW9uTWF0cml4ID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdHJpeCJd
Llplcm8oKTsKKyAgICAgICAgX3RoaXMuX2dsb2JhbEFtYmllbnRDb2xvciA9IG5ldyBfTWF0aHNf
bWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb2xvcjMiXSgwLCAwLCAw
KTsKKyAgICAgICAgX3RoaXMuX3JlYnVpbGRJblBhcmFsbGVsID0gZmFsc2U7CisgICAgICAgIC8v
IFNldHVwIHRoZSBkZWZhdWx0IHByb2Nlc3NpbmcgY29uZmlndXJhdGlvbiB0byB0aGUgc2NlbmUu
CisgICAgICAgIF90aGlzLl9hdHRhY2hJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKG51bGwp
OworICAgICAgICBfdGhpcy5nZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRzLnJlc2V0KCk7CisgICAgICAgICAgICBp
ZiAoU3RhbmRhcmRNYXRlcmlhbC5SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQgJiYgX3RoaXMuX3Jl
ZmxlY3Rpb25UZXh0dXJlICYmIF90aGlzLl9yZWZsZWN0aW9uVGV4dHVyZS5pc1JlbmRlclRhcmdl
dCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9yZW5kZXJUYXJnZXRzLnB1c2goX3RoaXMuX3Jl
ZmxlY3Rpb25UZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTdGFuZGFy
ZE1hdGVyaWFsLlJlZnJhY3Rpb25UZXh0dXJlRW5hYmxlZCAmJiBfdGhpcy5fcmVmcmFjdGlvblRl
eHR1cmUgJiYgX3RoaXMuX3JlZnJhY3Rpb25UZXh0dXJlLmlzUmVuZGVyVGFyZ2V0KSB7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX3JlbmRlclRhcmdldHMucHVzaChfdGhpcy5fcmVmcmFjdGlvblRl
eHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9yZW5kZXJU
YXJnZXRzOworICAgICAgICB9OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgImltYWdlUHJv
Y2Vzc2luZ0NvbmZpZ3VyYXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRo
ZSBpbWFnZSBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24gdXNlZCBlaXRoZXIgaW4gdGhpcyBtYXRl
cmlhbC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb247CisgICAgICAgIH0s
CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBEZWZhdWx0IGltYWdlIHByb2Nlc3Np
bmcgY29uZmlndXJhdGlvbiB1c2VkIGVpdGhlciBpbiB0aGUgdGhpcyBtYXRlcmlhbC4KKyAgICAg
ICAgICoKKyAgICAgICAgICogSWYgc2V0cyB0byBudWxsLCB0aGUgc2NlbmUgb25lIGlzIGluIHVz
ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICB0aGlzLl9hdHRhY2hJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKHZhbHVlKTsKKyAg
ICAgICAgICAgIC8vIEVuc3VyZSB0aGUgZWZmZWN0IHdpbGwgYmUgcmVidWlsdC4KKyAgICAgICAg
ICAgIHRoaXMuX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkoKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLyoqCisgICAgICogQXR0YWNoZXMgYSBuZXcgaW1hZ2UgcHJvY2Vzc2luZyBj
b25maWd1cmF0aW9uIHRvIHRoZSBTdGFuZGFyZCBNYXRlcmlhbC4KKyAgICAgKiBAcGFyYW0gY29u
ZmlndXJhdGlvbgorICAgICAqLworICAgIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLl9hdHRh
Y2hJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24g
PT09IHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBEZXRhY2hlcyBvYnNlcnZlcgorICAgICAgICBp
ZiAodGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiB0aGlzLl9pbWFnZVByb2Nl
c3NpbmdPYnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbi5vblVwZGF0ZVBhcmFtZXRlcnMucmVtb3ZlKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ09i
c2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICAvLyBQaWNrIHRoZSBzY2VuZSBjb25maWd1cmF0
aW9uIGlmIG5lZWRlZAorICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAg
IHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gPSB0aGlzLmdldFNjZW5lKCkuaW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0
aW9uOworICAgICAgICB9CisgICAgICAgIC8vIEF0dGFjaGVzIG9ic2VydmVyCisgICAgICAgIGlm
ICh0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICB0aGlz
Ll9pbWFnZVByb2Nlc3NpbmdPYnNlcnZlciA9IHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24ub25VcGRhdGVQYXJhbWV0ZXJzLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAg
ICAgX3RoaXMuX21hcmtBbGxTdWJNZXNoZXNBc0ltYWdlUHJvY2Vzc2luZ0RpcnR5KCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiY2FtZXJhQ29sb3JDdXJ2ZXNFbmFibGVkIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGN1cnZlcyBl
ZmZlY3QgaXMgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5j
b2xvckN1cnZlc0VuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBT
ZXRzIHdldGhlciB0aGUgY29sb3IgY3VydmVzIGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAg
Ki8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckN1cnZlc0VuYWJsZWQgPSB2YWx1ZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJp
YWwucHJvdG90eXBlLCAiY2FtZXJhQ29sb3JHcmFkaW5nRW5hYmxlZCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgd2V0aGVyIHRoZSBjb2xvciBncmFkaW5nIGVmZmVjdCBpcyBlbmFi
bGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yR3JhZGluZ0Vu
YWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdldGhlciB0
aGUgY29sb3IgZ3JhZGluZyBlZmZlY3QgaXMgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLmltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24uY29sb3JHcmFkaW5nRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5
cGUsICJjYW1lcmFUb25lTWFwcGluZ0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHdldGhlciB0b25lbWFwcGluZyBpcyBlbmFibGVkIG9yIG5vdC4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udG9uZU1hcHBpbmdFbmFibGVkOworICAgICAgICB9
LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3ZXRoZXIgdG9uZW1hcHBpbmcgaXMgZW5h
YmxlZCBvciBub3QKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnRvbmVNYXBw
aW5nRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJjYW1lcmFFeHBvc3VyZSIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjYW1lcmEgZXhwb3N1cmUgdXNlZCBvbiB0aGlz
IG1hdGVyaWFsLgorICAgICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGhlcmUgYW5kIG5vdCBpbiB0
aGUgY2FtZXJhIHRvIGFsbG93IGNvbnRyb2xsaW5nIGV4cG9zdXJlIHdpdGhvdXQgZnVsbCBzY3Jl
ZW4gcG9zdCBwcm9jZXNzLgorICAgICAgICAgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIGEgcGhvdG9n
cmFwaGljIGV4cG9zdXJlLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5l
eHBvc3VyZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjYW1lcmEg
ZXhwb3N1cmUgdXNlZCBvbiB0aGlzIG1hdGVyaWFsLgorICAgICAgICAgKiBUaGlzIHByb3BlcnR5
IGlzIGhlcmUgYW5kIG5vdCBpbiB0aGUgY2FtZXJhIHRvIGFsbG93IGNvbnRyb2xsaW5nIGV4cG9z
dXJlIHdpdGhvdXQgZnVsbCBzY3JlZW4gcG9zdCBwcm9jZXNzLgorICAgICAgICAgKiBUaGlzIGNv
cnJlc3BvbmRzIHRvIGEgcGhvdG9ncmFwaGljIGV4cG9zdXJlLgorICAgICAgICAgKi8KKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24uZXhwb3N1cmUgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiY2Ft
ZXJhQ29udHJhc3QiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIFRoZSBjYW1lcmEg
Y29udHJhc3QgdXNlZCBvbiB0aGlzIG1hdGVyaWFsLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbi5jb250cmFzdDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFNldHMgVGhlIGNhbWVyYSBjb250cmFzdCB1c2VkIG9uIHRoaXMgbWF0ZXJpYWwuCisgICAg
ICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhp
cy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb250cmFzdCA9IHZhbHVlOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5w
cm90b3R5cGUsICJjYW1lcmFDb2xvckdyYWRpbmdUZXh0dXJlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgQ29sb3IgR3JhZGluZyAyRCBMb29rdXAgVGV4dHVyZS4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uY29sb3JHcmFkaW5nVGV4dHVyZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIENvbG9yIEdyYWRpbmcg
MkQgTG9va3VwIFRleHR1cmUuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5j
b2xvckdyYWRpbmdUZXh0dXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgImNhbWVyYUNvbG9y
Q3VydmVzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIGdyYWRpbmcgY3Vy
dmVzIHByb3ZpZGUgYWRkaXRpb25hbCBjb2xvciBhZGp1c3RtbmVudCB0aGF0IGlzIGFwcGxpZWQg
YWZ0ZXIgYW55IGNvbG9yIGdyYWRpbmcgdHJhbnNmb3JtICgzRCBMVVQpLgorICAgICAgICAgKiBU
aGV5IGFsbG93IGJhc2ljIGFkanVzdG1lbnQgb2Ygc2F0dXJhdGlvbiBhbmQgc21hbGwgZXhwb3N1
cmUgYWRqdXN0bWVudHMsIGFsb25nIHdpdGggY29sb3IgZmlsdGVyIHRpbnRpbmcgdG8gcHJvdmlk
ZSB3aGl0ZSBiYWxhbmNlIGFkanVzdG1lbnQgb3IgbW9yZSBzdHlsaXN0aWMgZWZmZWN0cy4KKyAg
ICAgICAgICogVGhlc2UgYXJlIHNpbWlsYXIgdG8gY29udHJvbHMgZm91bmQgaW4gbWFueSBwcm9m
ZXNzaW9uYWwgaW1hZ2luZyBvciBjb2xvcmlzdCBzb2Z0d2FyZS4gVGhlIGdsb2JhbCBjb250cm9s
cyBhcmUgYXBwbGllZCB0byB0aGUgZW50aXJlIGltYWdlLiBGb3IgYWR2YW5jZWQgdHVuaW5nLCBl
eHRyYSBjb250cm9scyBhcmUgcHJvdmlkZWQgdG8gYWRqdXN0IHRoZSBzaGFkb3csIG1pZHRvbmUg
YW5kIGhpZ2hsaWdodCBhcmVhcyBvZiB0aGUgaW1hZ2U7CisgICAgICAgICAqIGNvcnJlc3BvbmRp
bmcgdG8gbG93IGx1bWluYW5jZSwgbWVkaXVtIGx1bWluYW5jZSwgYW5kIGhpZ2ggbHVtaW5hbmNl
IGFyZWFzIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRp
b24uY29sb3JDdXJ2ZXM7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
Y29sb3IgZ3JhZGluZyBjdXJ2ZXMgcHJvdmlkZSBhZGRpdGlvbmFsIGNvbG9yIGFkanVzdG1uZW50
IHRoYXQgaXMgYXBwbGllZCBhZnRlciBhbnkgY29sb3IgZ3JhZGluZyB0cmFuc2Zvcm0gKDNEIExV
VCkuCisgICAgICAgICAqIFRoZXkgYWxsb3cgYmFzaWMgYWRqdXN0bWVudCBvZiBzYXR1cmF0aW9u
IGFuZCBzbWFsbCBleHBvc3VyZSBhZGp1c3RtZW50cywgYWxvbmcgd2l0aCBjb2xvciBmaWx0ZXIg
dGludGluZyB0byBwcm92aWRlIHdoaXRlIGJhbGFuY2UgYWRqdXN0bWVudCBvciBtb3JlIHN0eWxp
c3RpYyBlZmZlY3RzLgorICAgICAgICAgKiBUaGVzZSBhcmUgc2ltaWxhciB0byBjb250cm9scyBm
b3VuZCBpbiBtYW55IHByb2Zlc3Npb25hbCBpbWFnaW5nIG9yIGNvbG9yaXN0IHNvZnR3YXJlLiBU
aGUgZ2xvYmFsIGNvbnRyb2xzIGFyZSBhcHBsaWVkIHRvIHRoZSBlbnRpcmUgaW1hZ2UuIEZvciBh
ZHZhbmNlZCB0dW5pbmcsIGV4dHJhIGNvbnRyb2xzIGFyZSBwcm92aWRlZCB0byBhZGp1c3QgdGhl
IHNoYWRvdywgbWlkdG9uZSBhbmQgaGlnaGxpZ2h0IGFyZWFzIG9mIHRoZSBpbWFnZTsKKyAgICAg
ICAgICogY29ycmVzcG9uZGluZyB0byBsb3cgbHVtaW5hbmNlLCBtZWRpdW0gbHVtaW5hbmNlLCBh
bmQgaGlnaCBsdW1pbmFuY2UgYXJlYXMgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgKi8KKyAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24uY29sb3JDdXJ2ZXMgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAi
aGFzUmVuZGVyVGFyZ2V0VGV4dHVyZXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgY3VycmVudCBtYXRlcmlhbCBuZWVkcyB0byByZWdp
c3RlciBSVFQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgaWYgKFN0YW5kYXJkTWF0ZXJpYWwuUmVmbGVjdGlvblRleHR1cmVFbmFibGVkICYmIHRo
aXMuX3JlZmxlY3Rpb25UZXh0dXJlICYmIHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlLmlzUmVuZGVy
VGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoU3RhbmRhcmRNYXRlcmlhbC5SZWZyYWN0aW9uVGV4dHVyZUVuYWJsZWQg
JiYgdGhpcy5fcmVmcmFjdGlvblRleHR1cmUgJiYgdGhpcy5fcmVmcmFjdGlvblRleHR1cmUuaXNS
ZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgY3VycmVudCBjbGFzcyBuYW1lIG9mIHRoZSBtYXRlcmlhbCBlLmcu
ICJTdGFuZGFyZE1hdGVyaWFsIgorICAgICAqIE1haW5seSB1c2UgaW4gc2VyaWFsaXphdGlvbi4K
KyAgICAgKiBAcmV0dXJucyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFN0YW5kYXJkTWF0
ZXJpYWwucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuICJTdGFuZGFyZE1hdGVyaWFsIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgInVzZUxvZ2FyaXRobWljRGVwdGgiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBJbiBjYXNlIHRoZSBkZXB0aCBidWZmZXIgZG9lcyBub3Qg
YWxsb3cgZW5vdWdoIGRlcHRoIHByZWNpc2lvbiBmb3IgeW91ciBzY2VuZSAobWlnaHQgYmUgdGhl
IGNhc2UgaW4gbGFyZ2Ugc2NlbmVzKQorICAgICAgICAgKiBZb3UgY2FuIHRyeSBzd2l0Y2hpbmcg
dG8gbG9nYXJpdGhtaWMgZGVwdGguCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by91c2luZ19sb2dhcml0aG1pY19kZXB0aF9idWZmZXIKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Vz
ZUxvZ2FyaXRobWljRGVwdGg7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICB0aGlzLl91c2VMb2dhcml0aG1pY0RlcHRoID0gdmFsdWUgJiYg
dGhpcy5nZXRTY2VuZSgpLmdldEVuZ2luZSgpLmdldENhcHMoKS5mcmFnbWVudERlcHRoU3VwcG9y
dGVkOworICAgICAgICAgICAgdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzTWlzY0RpcnR5KCk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbWF0ZXJp
YWwgd2lsbCByZXF1aXJlIGFscGhhIGJsZW5kaW5nCisgICAgICogQHJldHVybnMgYSBib29sZWFu
IHNwZWNpZnlpbmcgaWYgYWxwaGEgYmxlbmRpbmcgaXMgbmVlZGVkCisgICAgICovCisgICAgU3Rh
bmRhcmRNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhhQmxlbmRpbmcgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiAodGhpcy5hbHBoYSA8IDEuMCkgfHwgKHRoaXMuX29wYWNpdHlUZXh0
dXJlICE9IG51bGwpIHx8IHRoaXMuX3Nob3VsZFVzZUFscGhhRnJvbURpZmZ1c2VUZXh0dXJlKCkg
fHwgdGhpcy5fb3BhY2l0eUZyZXNuZWxQYXJhbWV0ZXJzICYmIHRoaXMuX29wYWNpdHlGcmVzbmVs
UGFyYW1ldGVycy5pc0VuYWJsZWQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMg
aWYgdGhpcyBtYXRlcmlhbCBzaG91bGQgYmUgcmVuZGVyZWQgaW4gYWxwaGEgdGVzdCBtb2RlCisg
ICAgICogQHJldHVybnMgYSBib29sZWFuIHNwZWNpZnlpbmcgaWYgYW4gYWxwaGEgdGVzdCBpcyBu
ZWVkZWQuCisgICAgICovCisgICAgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUubmVlZEFscGhh
VGVzdGluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RpZmZ1c2VUZXh0
dXJlICE9IG51bGwgJiYgdGhpcy5fZGlmZnVzZVRleHR1cmUuaGFzQWxwaGE7CisgICAgfTsKKyAg
ICBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZS5fc2hvdWxkVXNlQWxwaGFGcm9tRGlmZnVzZVRl
eHR1cmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9kaWZmdXNlVGV4dHVy
ZSAhPSBudWxsICYmIHRoaXMuX2RpZmZ1c2VUZXh0dXJlLmhhc0FscGhhICYmIHRoaXMuX3VzZUFs
cGhhRnJvbURpZmZ1c2VUZXh0dXJlOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSB0
ZXh0dXJlIHVzZWQgZm9yIGFscGhhIHRlc3QgcHVycG9zZS4KKyAgICAgKiBAcmV0dXJucyB0aGUg
ZGlmZnVzZSB0ZXh0dXJlIGluIGNhc2Ugb2YgdGhlIHN0YW5kYXJkIG1hdGVyaWFsLgorICAgICAq
LworICAgIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLmdldEFscGhhVGVzdFRleHR1cmUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9kaWZmdXNlVGV4dHVyZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldCBpZiB0aGUgc3VibWVzaCBpcyByZWFkeSB0byBiZSB1c2Vk
IGFuZCBhbGwgaXRzIGluZm9ybWF0aW9uIGF2YWlsYWJsZS4KKyAgICAgKiBDaGlsZCBjbGFzc2Vz
IGNhbiB1c2UgaXQgdG8gdXBkYXRlIHNoYWRlcnMKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVz
IHRoZSBtZXNoIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHN1Yk1lc2ggZGVmaW5lcyB3aGljaCBz
dWJtZXNoIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHVzZUluc3RhbmNlcyBzcGVjaWZpZXMgdGhh
dCBpbnN0YW5jZXMgc2hvdWxkIGJlIHVzZWQKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gaW5k
aWNhdGluZyB0aGF0IHRoZSBzdWJtZXNoIGlzIHJlYWR5IG9yIG5vdAorICAgICAqLworICAgIFN0
YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLmlzUmVhZHlGb3JTdWJNZXNoID0gZnVuY3Rpb24gKG1l
c2gsIHN1Yk1lc2gsIHVzZUluc3RhbmNlcykgeworICAgICAgICBpZiAodXNlSW5zdGFuY2VzID09
PSB2b2lkIDApIHsgdXNlSW5zdGFuY2VzID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHN1Yk1lc2gu
ZWZmZWN0ICYmIHRoaXMuaXNGcm96ZW4pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl93YXNQcmV2
aW91c2x5UmVhZHkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXN1Yk1lc2guX21hdGVyaWFsRGVmaW5lcykgewor
ICAgICAgICAgICAgc3ViTWVzaC5fbWF0ZXJpYWxEZWZpbmVzID0gbmV3IFN0YW5kYXJkTWF0ZXJp
YWxEZWZpbmVzKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2Vu
ZSgpOworICAgICAgICB2YXIgZGVmaW5lcyA9IHN1Yk1lc2guX21hdGVyaWFsRGVmaW5lczsKKyAg
ICAgICAgaWYgKCF0aGlzLmNoZWNrUmVhZHlPbkV2ZXJ5Q2FsbCAmJiBzdWJNZXNoLmVmZmVjdCkg
eworICAgICAgICAgICAgaWYgKGRlZmluZXMuX3JlbmRlcklkID09PSBzY2VuZS5nZXRSZW5kZXJJ
ZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICAv
LyBMaWdodHMKKyAgICAgICAgZGVmaW5lcy5fbmVlZE5vcm1hbHMgPSBfbWF0ZXJpYWxIZWxwZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZURl
ZmluZXNGb3JMaWdodHMoc2NlbmUsIG1lc2gsIGRlZmluZXMsIHRydWUsIHRoaXMuX21heFNpbXVs
dGFuZW91c0xpZ2h0cywgdGhpcy5fZGlzYWJsZUxpZ2h0aW5nKTsKKyAgICAgICAgLy8gTXVsdGl2
aWV3CisgICAgICAgIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFf
X1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlRGVmaW5lc0Zvck11bHRpdmlldyhzY2VuZSwgZGVm
aW5lcyk7CisgICAgICAgIC8vIFRleHR1cmVzCisgICAgICAgIGlmIChkZWZpbmVzLl9hcmVUZXh0
dXJlc0RpcnR5KSB7CisgICAgICAgICAgICBkZWZpbmVzLl9uZWVkVVZzID0gZmFsc2U7CisgICAg
ICAgICAgICBkZWZpbmVzLk1BSU5VVjEgPSBmYWxzZTsKKyAgICAgICAgICAgIGRlZmluZXMuTUFJ
TlVWMiA9IGZhbHNlOworICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVy
aWFsLkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRo
aXMuX2RpZmZ1c2VUZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9tYXRlcmlhbEhl
bHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVw
YXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX2RpZmZ1c2VUZXh0dXJlLCBkZWZpbmVzLCAiRElG
RlVTRSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLkRJRkZVU0UgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2FtYmll
bnRUZXh0dXJlICYmIFN0YW5kYXJkTWF0ZXJpYWwuQW1iaWVudFRleHR1cmVFbmFibGVkKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fYW1iaWVudFRleHR1cmUuaXNSZWFkeU9yTm90
QmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MV9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yTWVyZ2VkVVYodGhpcy5fYW1i
aWVudFRleHR1cmUsIGRlZmluZXMsICJBTUJJRU5UIik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuQU1CSUVOVCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fb3BhY2l0eVRleHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlhbC5P
cGFjaXR5VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9v
cGFjaXR5VGV4dHVyZS5pc1JlYWR5T3JOb3RCbG9ja2luZygpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZURl
ZmluZXNGb3JNZXJnZWRVVih0aGlzLl9vcGFjaXR5VGV4dHVyZSwgZGVmaW5lcywgIk9QQUNJVFki
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuT1BBQ0lUWVJHQiA9IHRoaXMuX29w
YWNpdHlUZXh0dXJlLmdldEFscGhhRnJvbVJHQjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lcy5PUEFDSVRZID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLlJl
ZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMu
X3JlZmxlY3Rpb25UZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuX25l
ZWROb3JtYWxzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVD
VElPTiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJPVUdITkVTUyA9
ICh0aGlzLl9yb3VnaG5lc3MgPiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMu
UkVGTEVDVElPTk9WRVJBTFBIQSA9IHRoaXMuX3VzZVJlZmxlY3Rpb25PdmVyQWxwaGE7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLklOVkVSVENVQklDTUFQID0gKHRoaXMuX3JlZmxl
Y3Rpb25UZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSA9PT0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0
dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0dXJlIl0uSU5WQ1VCSUNfTU9E
RSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05NQVBfM0QgPSB0
aGlzLl9yZWZsZWN0aW9uVGV4dHVyZS5pc0N1YmU7CisgICAgICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlLmNvb3JkaW5hdGVzTW9kZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0dXJlIl0uRVhQTElDSVRfTU9ERToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5zZXRSZWZsZWN0aW9uTW9kZSgi
UkVGTEVDVElPTk1BUF9FWFBMSUNJVCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siVGV4dHVyZSJdLlBM
QU5BUl9NT0RFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLnNldFJl
ZmxlY3Rpb25Nb2RlKCJSRUZMRUNUSU9OTUFQX1BMQU5BUiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9N
YXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1si
VGV4dHVyZSJdLlBST0pFQ1RJT05fTU9ERToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lcy5zZXRSZWZsZWN0aW9uTW9kZSgiUkVGTEVDVElPTk1BUF9QUk9KRUNUSU9OIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0dXJlIl0uU0tZQk9YX01PREU6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmluZXMuc2V0UmVmbGVjdGlvbk1vZGUoIlJFRkxFQ1RJT05N
QVBfU0tZQk9YIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVG
TEVDVElPTk1BUF9TS1lCT1hfVFJBTlNGT1JNRUQgPSAhdGhpcy5fcmVmbGVjdGlvblRleHR1cmUu
Z2V0UmVmbGVjdGlvblRleHR1cmVNYXRyaXgoKS5pc0lkZW50aXR5KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
Ml9fWyJUZXh0dXJlIl0uU1BIRVJJQ0FMX01PREU6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuc2V0UmVmbGVjdGlvbk1vZGUoIlJFRkxFQ1RJT05NQVBfU1BIRVJJQ0FM
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0dXJlIl0uRVFVSVJFQ1RBTkdVTEFSX01PREU6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuc2V0UmVmbGVjdGlvbk1vZGUo
IlJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX01hdGVy
aWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0
dXJlIl0uRklYRURfRVFVSVJFQ1RBTkdVTEFSX01PREU6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmluZXMuc2V0UmVmbGVjdGlvbk1vZGUoIlJFRkxFQ1RJT05NQVBfRVFVSVJF
Q1RBTkdVTEFSX0ZJWEVEIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJlc190
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0dXJlIl0uRklYRURfRVFV
SVJFQ1RBTkdVTEFSX01JUlJPUkVEX01PREU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmluZXMuc2V0UmVmbGVjdGlvbk1vZGUoIlJFRkxFQ1RJT05NQVBfTUlSUk9SRURFUVVJ
UkVDVEFOR1VMQVJfRklYRUQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfTWF0ZXJpYWxzX1RleHR1cmVz
X3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlRleHR1cmUiXS5DVUJJQ19N
T0RFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX01hdGVyaWFsc19UZXh0dXJl
c190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJUZXh0dXJlIl0uSU5WQ1VC
SUNfTU9ERToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLnNldFJlZmxlY3Rpb25Nb2RlKCJSRUZMRUNU
SU9OTUFQX0NVQklDIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5l
cy5VU0VfTE9DQUxfUkVGTEVDVElPTk1BUF9DVUJJQyA9IHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJl
LmJvdW5kaW5nQm94U2l6ZSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lcy5SRUZMRUNUSU9OID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRleHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlh
bC5FbWlzc2l2ZVRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhp
cy5fZW1pc3NpdmVUZXh0dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9tYXRlcmlhbEhl
bHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVw
YXJlRGVmaW5lc0Zvck1lcmdlZFVWKHRoaXMuX2VtaXNzaXZlVGV4dHVyZSwgZGVmaW5lcywgIkVN
SVNTSVZFIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuRU1JU1NJVkUg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xp
Z2h0bWFwVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLkxpZ2h0bWFwVGV4dHVyZUVuYWJsZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9saWdodG1hcFRleHR1cmUuaXNSZWFk
eU9yTm90QmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yTWVyZ2VkVVYodGhp
cy5fbGlnaHRtYXBUZXh0dXJlLCBkZWZpbmVzLCAiTElHSFRNQVAiKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmluZXMuVVNFTElHSFRNQVBBU1NIQURPV01BUCA9IHRoaXMuX3VzZUxpZ2h0
bWFwQXNTaGFkb3dtYXA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuTElH
SFRNQVAgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX3NwZWN1bGFyVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLlNwZWN1bGFyVGV4dHVyZUVu
YWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zcGVjdWxhclRleHR1cmUu
aXNSZWFkeU9yTm90QmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yTWVyZ2Vk
VVYodGhpcy5fc3BlY3VsYXJUZXh0dXJlLCBkZWZpbmVzLCAiU1BFQ1VMQVIiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmluZXMuR0xPU1NJTkVTUyA9IHRoaXMuX3VzZUdsb3NzaW5lc3NG
cm9tU3BlY3VsYXJNYXBBbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5l
cy5TUEVDVUxBUiA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoc2NlbmUuZ2V0RW5naW5lKCkuZ2V0Q2FwcygpLnN0YW5kYXJkRGVyaXZhdGl2ZXMgJiYgdGhp
cy5fYnVtcFRleHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlhbC5CdW1wVGV4dHVyZUVuYWJsZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gQnVtcCB0ZXh1cmUgY2FuIG5vdCBiZSBub3QgYmxvY2tp
bmcuCisgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fYnVtcFRleHR1cmUuaXNSZWFkeSgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVy
aWFsSGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JNZXJnZWRVVih0aGlzLl9idW1wVGV4dHVyZSwg
ZGVmaW5lcywgIkJVTVAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUEFSQUxM
QVggPSB0aGlzLl91c2VQYXJhbGxheDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMu
UEFSQUxMQVhPQ0NMVVNJT04gPSB0aGlzLl91c2VQYXJhbGxheE9jY2x1c2lvbjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLk9CSkVDVFNQQUNFX05P
Uk1BTE1BUCA9IHRoaXMuX3VzZU9iamVjdFNwYWNlTm9ybWFsTWFwOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5C
VU1QID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlz
Ll9yZWZyYWN0aW9uVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLlJlZnJhY3Rpb25UZXh0dXJl
RW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3JlZnJhY3Rpb25UZXh0
dXJlLmlzUmVhZHlPck5vdEJsb2NraW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMuX25lZWRVVnMgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZSQUNUSU9OID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGUkFDVElPTk1BUF8zRCA9IHRoaXMuX3JlZnJh
Y3Rpb25UZXh0dXJlLmlzQ3ViZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5l
cy5SRUZSQUNUSU9OID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGRlZmluZXMuVFdPU0lERURMSUdIVElORyA9ICF0aGlzLl9iYWNrRmFjZUN1bGxpbmcgJiYgdGhp
cy5fdHdvU2lkZWRMaWdodGluZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIGRlZmluZXMuRElGRlVTRSA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGRlZmluZXMuQU1CSUVOVCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmluZXMuT1BBQ0lU
WSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmluZXMuUkVGTEVDVElPTiA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIGRlZmluZXMuRU1JU1NJVkUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBkZWZpbmVzLkxJR0hUTUFQID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5CVU1Q
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZSQUNUSU9OID0gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZpbmVzLkFMUEhBRlJPTURJRkZVU0UgPSB0aGlz
Ll9zaG91bGRVc2VBbHBoYUZyb21EaWZmdXNlVGV4dHVyZSgpOworICAgICAgICAgICAgZGVmaW5l
cy5FTUlTU0lWRUFTSUxMVU1JTkFUSU9OID0gdGhpcy5fdXNlRW1pc3NpdmVBc0lsbHVtaW5hdGlv
bjsKKyAgICAgICAgICAgIGRlZmluZXMuTElOS0VNSVNTSVZFV0lUSERJRkZVU0UgPSB0aGlzLl9s
aW5rRW1pc3NpdmVXaXRoRGlmZnVzZTsKKyAgICAgICAgICAgIGRlZmluZXMuU1BFQ1VMQVJPVkVS
QUxQSEEgPSB0aGlzLl91c2VTcGVjdWxhck92ZXJBbHBoYTsKKyAgICAgICAgICAgIGRlZmluZXMu
UFJFTVVMVElQTFlBTFBIQSA9ICh0aGlzLmFscGhhTW9kZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJDb25zdGFudHMiXS5BTFBIQV9QUkVNVUxU
SVBMSUVEIHx8IHRoaXMuYWxwaGFNb2RlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE3X19bIkNvbnN0YW50cyJdLkFMUEhBX1BSRU1VTFRJUExJRURfUE9S
VEVSRFVGRik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlZmluZXMuX2FyZUltYWdlUHJvY2Vz
c2luZ0RpcnR5ICYmIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24pIHsKKyAgICAg
ICAgICAgIGlmICghdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5pc1JlYWR5KCkp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnByZXBhcmVEZWZpbmVzKGRl
ZmluZXMpOworICAgICAgICAgICAgZGVmaW5lcy5JU19SRUZMRUNUSU9OX0xJTkVBUiA9ICh0aGlz
LnJlZmxlY3Rpb25UZXh0dXJlICE9IG51bGwgJiYgIXRoaXMucmVmbGVjdGlvblRleHR1cmUuZ2Ft
bWFTcGFjZSk7CisgICAgICAgICAgICBkZWZpbmVzLklTX1JFRlJBQ1RJT05fTElORUFSID0gKHRo
aXMucmVmcmFjdGlvblRleHR1cmUgIT0gbnVsbCAmJiAhdGhpcy5yZWZyYWN0aW9uVGV4dHVyZS5n
YW1tYVNwYWNlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmaW5lcy5fYXJlRnJlc25lbERp
cnR5KSB7CisgICAgICAgICAgICBpZiAoU3RhbmRhcmRNYXRlcmlhbC5GcmVzbmVsRW5hYmxlZCkg
eworICAgICAgICAgICAgICAgIC8vIEZyZXNuZWwKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5f
ZGlmZnVzZUZyZXNuZWxQYXJhbWV0ZXJzIHx8IHRoaXMuX29wYWNpdHlGcmVzbmVsUGFyYW1ldGVy
cyB8fAorICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWlzc2l2ZUZyZXNuZWxQYXJhbWV0ZXJz
IHx8IHRoaXMuX3JlZnJhY3Rpb25GcmVzbmVsUGFyYW1ldGVycyB8fAorICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9yZWZsZWN0aW9uRnJlc25lbFBhcmFtZXRlcnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lcy5ESUZGVVNFRlJFU05FTCA9ICh0aGlzLl9kaWZmdXNlRnJlc25lbFBhcmFt
ZXRlcnMgJiYgdGhpcy5fZGlmZnVzZUZyZXNuZWxQYXJhbWV0ZXJzLmlzRW5hYmxlZCk7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmluZXMuT1BBQ0lUWUZSRVNORUwgPSAodGhpcy5fb3BhY2l0eUZy
ZXNuZWxQYXJhbWV0ZXJzICYmIHRoaXMuX29wYWNpdHlGcmVzbmVsUGFyYW1ldGVycy5pc0VuYWJs
ZWQpOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRkxFQ1RJT05GUkVTTkVMID0gKHRo
aXMuX3JlZmxlY3Rpb25GcmVzbmVsUGFyYW1ldGVycyAmJiB0aGlzLl9yZWZsZWN0aW9uRnJlc25l
bFBhcmFtZXRlcnMuaXNFbmFibGVkKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5SRUZM
RUNUSU9ORlJFU05FTEZST01TUEVDVUxBUiA9IHRoaXMuX3VzZVJlZmxlY3Rpb25GcmVzbmVsRnJv
bVNwZWN1bGFyOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLlJFRlJBQ1RJT05GUkVTTkVM
ID0gKHRoaXMuX3JlZnJhY3Rpb25GcmVzbmVsUGFyYW1ldGVycyAmJiB0aGlzLl9yZWZyYWN0aW9u
RnJlc25lbFBhcmFtZXRlcnMuaXNFbmFibGVkKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5l
cy5FTUlTU0lWRUZSRVNORUwgPSAodGhpcy5fZW1pc3NpdmVGcmVzbmVsUGFyYW1ldGVycyAmJiB0
aGlzLl9lbWlzc2l2ZUZyZXNuZWxQYXJhbWV0ZXJzLmlzRW5hYmxlZCk7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmluZXMuX25lZWROb3JtYWxzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lcy5GUkVTTkVMID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLkZSRVNORUwgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBNaXNjLgorICAgICAg
ICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFs
SGVscGVyIl0uUHJlcGFyZURlZmluZXNGb3JNaXNjKG1lc2gsIHNjZW5lLCB0aGlzLl91c2VMb2dh
cml0aG1pY0RlcHRoLCB0aGlzLnBvaW50c0Nsb3VkLCB0aGlzLmZvZ0VuYWJsZWQsIHRoaXMuX3No
b3VsZFR1cm5BbHBoYVRlc3RPbihtZXNoKSwgZGVmaW5lcyk7CisgICAgICAgIC8vIEF0dHJpYnMK
KyAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJN
YXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9yQXR0cmlidXRlcyhtZXNoLCBkZWZpbmVz
LCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgLy8gVmFsdWVzIHRoYXQgbmVlZCB0byBiZSBl
dmFsdWF0ZWQgb24gZXZlcnkgZnJhbWUKKyAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLlByZXBhcmVEZWZpbmVzRm9y
RnJhbWVCb3VuZFZhbHVlcyhzY2VuZSwgZW5naW5lLCBkZWZpbmVzLCB1c2VJbnN0YW5jZXMpOwor
ICAgICAgICAvLyBHZXQgY29ycmVjdCBlZmZlY3QKKyAgICAgICAgaWYgKGRlZmluZXMuaXNEaXJ0
eSkgeworICAgICAgICAgICAgdmFyIGxpZ2h0RGlzcG9zZWQgPSBkZWZpbmVzLl9hcmVMaWdodHNE
aXNwb3NlZDsKKyAgICAgICAgICAgIGRlZmluZXMubWFya0FzUHJvY2Vzc2VkKCk7CisgICAgICAg
ICAgICAvLyBGYWxsYmFja3MKKyAgICAgICAgICAgIHZhciBmYWxsYmFja3MgPSBuZXcgX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJFZmZlY3RGYWxsYmFja3MiXSgpOworICAg
ICAgICAgICAgaWYgKGRlZmluZXMuUkVGTEVDVElPTikgeworICAgICAgICAgICAgICAgIGZhbGxi
YWNrcy5hZGRGYWxsYmFjaygwLCAiUkVGTEVDVElPTiIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGRlZmluZXMuU1BFQ1VMQVIpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja3Mu
YWRkRmFsbGJhY2soMCwgIlNQRUNVTEFSIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoZGVmaW5lcy5CVU1QKSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNr
KDAsICJCVU1QIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVmaW5lcy5QQVJB
TExBWCkgeworICAgICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjaygxLCAiUEFSQUxM
QVgiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWZpbmVzLlBBUkFMTEFYT0ND
TFVTSU9OKSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKDAsICJQQVJB
TExBWE9DQ0xVU0lPTiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlZmluZXMu
U1BFQ1VMQVJPVkVSQUxQSEEpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJh
Y2soMCwgIlNQRUNVTEFST1ZFUkFMUEhBIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoZGVmaW5lcy5GT0cpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJhY2so
MSwgIkZPRyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlZmluZXMuUE9JTlRT
SVpFKSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKDAsICJQT0lOVFNJ
WkUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWZpbmVzLkxPR0FSSVRITUlD
REVQVEgpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJhY2soMCwgIkxPR0FS
SVRITUlDREVQVEgiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9tYXRlcmlhbEhlbHBl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0ZXJpYWxIZWxwZXIiXS5IYW5kbGVG
YWxsYmFja3NGb3JTaGFkb3dzKGRlZmluZXMsIGZhbGxiYWNrcywgdGhpcy5fbWF4U2ltdWx0YW5l
b3VzTGlnaHRzKTsKKyAgICAgICAgICAgIGlmIChkZWZpbmVzLlNQRUNVTEFSVEVSTSkgeworICAg
ICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjaygwLCAiU1BFQ1VMQVJURVJNIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVmaW5lcy5ESUZGVVNFRlJFU05FTCkgewor
ICAgICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFjaygxLCAiRElGRlVTRUZSRVNORUwi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWZpbmVzLk9QQUNJVFlGUkVTTkVM
KSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKDIsICJPUEFDSVRZRlJF
U05FTCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlZmluZXMuUkVGTEVDVElP
TkZSRVNORUwpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJhY2soMywgIlJF
RkxFQ1RJT05GUkVTTkVMIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVmaW5l
cy5FTUlTU0lWRUZSRVNORUwpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja3MuYWRkRmFsbGJh
Y2soNCwgIkVNSVNTSVZFRlJFU05FTCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGRlZmluZXMuRlJFU05FTCkgeworICAgICAgICAgICAgICAgIGZhbGxiYWNrcy5hZGRGYWxsYmFj
ayg0LCAiRlJFU05FTCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlZmluZXMu
TVVMVElWSUVXKSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tzLmFkZEZhbGxiYWNrKDAsICJN
VUxUSVZJRVciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vQXR0cmlidXRlcworICAg
ICAgICAgICAgdmFyIGF0dHJpYnMgPSBbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgICAgIGlm
IChkZWZpbmVzLk5PUk1BTCkgeworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVzaChfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3Jt
YWxLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWZpbmVzLlVWMSkgewor
ICAgICAgICAgICAgICAgIGF0dHJpYnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGRlZmluZXMuVVYyKSB7CisgICAgICAgICAgICAgICAgYXR0cmlicy5w
dXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlZlcnRleEJ1
ZmZlciJdLlVWMktpbmQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlZmluZXMu
VkVSVEVYQ09MT1IpIHsKKyAgICAgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5k
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlQXR0cmlidXRlc0Zv
ckJvbmVzKGF0dHJpYnMsIG1lc2gsIGRlZmluZXMsIGZhbGxiYWNrcyk7CisgICAgICAgICAgICBf
bWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVs
cGVyIl0uUHJlcGFyZUF0dHJpYnV0ZXNGb3JJbnN0YW5jZXMoYXR0cmlicywgZGVmaW5lcyk7Cisg
ICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19b
Ik1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZUF0dHJpYnV0ZXNGb3JNb3JwaFRhcmdldHMoYXR0cmli
cywgbWVzaCwgZGVmaW5lcyk7CisgICAgICAgICAgICB2YXIgc2hhZGVyTmFtZSA9ICJkZWZhdWx0
IjsKKyAgICAgICAgICAgIHZhciB1bmlmb3JtcyA9IFsid29ybGQiLCAidmlldyIsICJ2aWV3UHJv
amVjdGlvbiIsICJ2RXllUG9zaXRpb24iLCAidkxpZ2h0c1R5cGUiLCAidkFtYmllbnRDb2xvciIs
ICJ2RGlmZnVzZUNvbG9yIiwgInZTcGVjdWxhckNvbG9yIiwgInZFbWlzc2l2ZUNvbG9yIiwgInZp
c2liaWxpdHkiLAorICAgICAgICAgICAgICAgICJ2Rm9nSW5mb3MiLCAidkZvZ0NvbG9yIiwgInBv
aW50U2l6ZSIsCisgICAgICAgICAgICAgICAgInZEaWZmdXNlSW5mb3MiLCAidkFtYmllbnRJbmZv
cyIsICJ2T3BhY2l0eUluZm9zIiwgInZSZWZsZWN0aW9uSW5mb3MiLCAidkVtaXNzaXZlSW5mb3Mi
LCAidlNwZWN1bGFySW5mb3MiLCAidkJ1bXBJbmZvcyIsICJ2TGlnaHRtYXBJbmZvcyIsICJ2UmVm
cmFjdGlvbkluZm9zIiwKKyAgICAgICAgICAgICAgICAibUJvbmVzIiwKKyAgICAgICAgICAgICAg
ICAidkNsaXBQbGFuZSIsICJ2Q2xpcFBsYW5lMiIsICJ2Q2xpcFBsYW5lMyIsICJ2Q2xpcFBsYW5l
NCIsICJkaWZmdXNlTWF0cml4IiwgImFtYmllbnRNYXRyaXgiLCAib3BhY2l0eU1hdHJpeCIsICJy
ZWZsZWN0aW9uTWF0cml4IiwgImVtaXNzaXZlTWF0cml4IiwgInNwZWN1bGFyTWF0cml4IiwgImJ1
bXBNYXRyaXgiLCAibm9ybWFsTWF0cml4IiwgImxpZ2h0bWFwTWF0cml4IiwgInJlZnJhY3Rpb25N
YXRyaXgiLAorICAgICAgICAgICAgICAgICJkaWZmdXNlTGVmdENvbG9yIiwgImRpZmZ1c2VSaWdo
dENvbG9yIiwgIm9wYWNpdHlQYXJ0cyIsICJyZWZsZWN0aW9uTGVmdENvbG9yIiwgInJlZmxlY3Rp
b25SaWdodENvbG9yIiwgImVtaXNzaXZlTGVmdENvbG9yIiwgImVtaXNzaXZlUmlnaHRDb2xvciIs
ICJyZWZyYWN0aW9uTGVmdENvbG9yIiwgInJlZnJhY3Rpb25SaWdodENvbG9yIiwKKyAgICAgICAg
ICAgICAgICAidlJlZmxlY3Rpb25Qb3NpdGlvbiIsICJ2UmVmbGVjdGlvblNpemUiLAorICAgICAg
ICAgICAgICAgICJsb2dhcml0aG1pY0RlcHRoQ29uc3RhbnQiLCAidlRhbmdlbnRTcGFjZVBhcmFt
cyIsICJhbHBoYUN1dE9mZiIsICJib25lVGV4dHVyZVdpZHRoIgorICAgICAgICAgICAgXTsKKyAg
ICAgICAgICAgIHZhciBzYW1wbGVycyA9IFsiZGlmZnVzZVNhbXBsZXIiLCAiYW1iaWVudFNhbXBs
ZXIiLCAib3BhY2l0eVNhbXBsZXIiLCAicmVmbGVjdGlvbkN1YmVTYW1wbGVyIiwKKyAgICAgICAg
ICAgICAgICAicmVmbGVjdGlvbjJEU2FtcGxlciIsICJlbWlzc2l2ZVNhbXBsZXIiLCAic3BlY3Vs
YXJTYW1wbGVyIiwgImJ1bXBTYW1wbGVyIiwgImxpZ2h0bWFwU2FtcGxlciIsCisgICAgICAgICAg
ICAgICAgInJlZnJhY3Rpb25DdWJlU2FtcGxlciIsICJyZWZyYWN0aW9uMkRTYW1wbGVyIiwgImJv
bmVTYW1wbGVyIl07CisgICAgICAgICAgICB2YXIgdW5pZm9ybUJ1ZmZlcnMgPSBbIk1hdGVyaWFs
IiwgIlNjZW5lIl07CisgICAgICAgICAgICBpZiAoX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRp
b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbiJdKSB7CisgICAgICAgICAgICAgICAgX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
biJdLlByZXBhcmVVbmlmb3Jtcyh1bmlmb3JtcywgZGVmaW5lcyk7CisgICAgICAgICAgICAgICAg
X2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdf
X1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiJdLlByZXBhcmVTYW1wbGVycyhzYW1wbGVy
cywgZGVmaW5lcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uUHJlcGFyZVVu
aWZvcm1zQW5kU2FtcGxlcnNMaXN0KHsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtc05hbWVzOiB1
bmlmb3JtcywKKyAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyc05hbWVzOiB1bmlmb3JtQnVm
ZmVycywKKyAgICAgICAgICAgICAgICBzYW1wbGVyczogc2FtcGxlcnMsCisgICAgICAgICAgICAg
ICAgZGVmaW5lczogZGVmaW5lcywKKyAgICAgICAgICAgICAgICBtYXhTaW11bHRhbmVvdXNMaWdo
dHM6IHRoaXMuX21heFNpbXVsdGFuZW91c0xpZ2h0cworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpZiAodGhpcy5jdXN0b21TaGFkZXJOYW1lUmVzb2x2ZSkgeworICAgICAgICAgICAgICAg
IHNoYWRlck5hbWUgPSB0aGlzLmN1c3RvbVNoYWRlck5hbWVSZXNvbHZlKHNoYWRlck5hbWUsIHVu
aWZvcm1zLCB1bmlmb3JtQnVmZmVycywgc2FtcGxlcnMsIGRlZmluZXMpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFyIGpvaW4gPSBkZWZpbmVzLnRvU3RyaW5nKCk7CisgICAgICAgICAg
ICB2YXIgcHJldmlvdXNFZmZlY3QgPSBzdWJNZXNoLmVmZmVjdDsKKyAgICAgICAgICAgIHZhciBl
ZmZlY3QgPSBzY2VuZS5nZXRFbmdpbmUoKS5jcmVhdGVFZmZlY3Qoc2hhZGVyTmFtZSwgeworICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnMsCisgICAgICAgICAgICAgICAgdW5pZm9y
bXNOYW1lczogdW5pZm9ybXMsCisgICAgICAgICAgICAgICAgdW5pZm9ybUJ1ZmZlcnNOYW1lczog
dW5pZm9ybUJ1ZmZlcnMsCisgICAgICAgICAgICAgICAgc2FtcGxlcnM6IHNhbXBsZXJzLAorICAg
ICAgICAgICAgICAgIGRlZmluZXM6IGpvaW4sCisgICAgICAgICAgICAgICAgZmFsbGJhY2tzOiBm
YWxsYmFja3MsCisgICAgICAgICAgICAgICAgb25Db21waWxlZDogdGhpcy5vbkNvbXBpbGVkLAor
ICAgICAgICAgICAgICAgIG9uRXJyb3I6IHRoaXMub25FcnJvciwKKyAgICAgICAgICAgICAgICBp
bmRleFBhcmFtZXRlcnM6IHsgbWF4U2ltdWx0YW5lb3VzTGlnaHRzOiB0aGlzLl9tYXhTaW11bHRh
bmVvdXNMaWdodHMsIG1heFNpbXVsdGFuZW91c01vcnBoVGFyZ2V0czogZGVmaW5lcy5OVU1fTU9S
UEhfSU5GTFVFTkNFUlMgfQorICAgICAgICAgICAgfSwgZW5naW5lKTsKKyAgICAgICAgICAgIGlm
IChlZmZlY3QpIHsKKyAgICAgICAgICAgICAgICAvLyBVc2UgcHJldmlvdXMgZWZmZWN0IHdoaWxl
IG5ldyBvbmUgaXMgY29tcGlsaW5nCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dTaGFk
ZXJIb3RTd2FwcGluZyAmJiBwcmV2aW91c0VmZmVjdCAmJiAhZWZmZWN0LmlzUmVhZHkoKSkgewor
ICAgICAgICAgICAgICAgICAgICBlZmZlY3QgPSBwcmV2aW91c0VmZmVjdDsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fcmVidWlsZEluUGFyYWxsZWwgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVzLm1hcmtBc1VucHJvY2Vzc2VkKCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChsaWdodERpc3Bvc2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyByZSByZWdpc3Rl
ciBpbiBjYXNlIGl0IHRha2VzIG1vcmUgdGhhbiBvbmUgZnJhbWUuCisgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZpbmVzLl9hcmVMaWdodHNEaXNwb3NlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3JlYnVpbGRJblBhcmFsbGVsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNjZW5l
LnJlc2V0Q2FjaGVkTWF0ZXJpYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgc3ViTWVzaC5zZXRF
ZmZlY3QoZWZmZWN0LCBkZWZpbmVzKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFVu
aWZvcm1MYXlvdXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFzdWJNZXNoLmVmZmVjdCB8fCAhc3ViTWVzaC5lZmZlY3QuaXNSZWFk
eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZGVm
aW5lcy5fcmVuZGVySWQgPSBzY2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICB0aGlzLl93YXNQ
cmV2aW91c2x5UmVhZHkgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEJ1aWxkcyB0aGUgbWF0ZXJpYWwgVUJPIGxheW91dHMuCisgICAgICogVXNl
ZCBpbnRlcm5hbGx5IGR1cmluZyB0aGUgZWZmZWN0IHByZXBhcmF0aW9uLgorICAgICAqLworICAg
IFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLmJ1aWxkVW5pZm9ybUxheW91dCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgLy8gT3JkZXIgaXMgaW1wb3J0YW50ICEKKyAgICAgICAgdmFyIHVibyA9
IHRoaXMuX3VuaWZvcm1CdWZmZXI7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJkaWZmdXNlTGVm
dENvbG9yIiwgNCk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJkaWZmdXNlUmlnaHRDb2xvciIs
IDQpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgib3BhY2l0eVBhcnRzIiwgNCk7CisgICAgICAg
IHViby5hZGRVbmlmb3JtKCJyZWZsZWN0aW9uTGVmdENvbG9yIiwgNCk7CisgICAgICAgIHViby5h
ZGRVbmlmb3JtKCJyZWZsZWN0aW9uUmlnaHRDb2xvciIsIDQpOworICAgICAgICB1Ym8uYWRkVW5p
Zm9ybSgicmVmcmFjdGlvbkxlZnRDb2xvciIsIDQpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgi
cmVmcmFjdGlvblJpZ2h0Q29sb3IiLCA0KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oImVtaXNz
aXZlTGVmdENvbG9yIiwgNCk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJlbWlzc2l2ZVJpZ2h0
Q29sb3IiLCA0KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZEaWZmdXNlSW5mb3MiLCAyKTsK
KyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZBbWJpZW50SW5mb3MiLCAyKTsKKyAgICAgICAgdWJv
LmFkZFVuaWZvcm0oInZPcGFjaXR5SW5mb3MiLCAyKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0o
InZSZWZsZWN0aW9uSW5mb3MiLCAyKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZSZWZsZWN0
aW9uUG9zaXRpb24iLCAzKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZSZWZsZWN0aW9uU2l6
ZSIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgidkVtaXNzaXZlSW5mb3MiLCAyKTsKKyAg
ICAgICAgdWJvLmFkZFVuaWZvcm0oInZMaWdodG1hcEluZm9zIiwgMik7CisgICAgICAgIHViby5h
ZGRVbmlmb3JtKCJ2U3BlY3VsYXJJbmZvcyIsIDIpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgi
dkJ1bXBJbmZvcyIsIDMpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgiZGlmZnVzZU1hdHJpeCIs
IDE2KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oImFtYmllbnRNYXRyaXgiLCAxNik7CisgICAg
ICAgIHViby5hZGRVbmlmb3JtKCJvcGFjaXR5TWF0cml4IiwgMTYpOworICAgICAgICB1Ym8uYWRk
VW5pZm9ybSgicmVmbGVjdGlvbk1hdHJpeCIsIDE2KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0o
ImVtaXNzaXZlTWF0cml4IiwgMTYpOworICAgICAgICB1Ym8uYWRkVW5pZm9ybSgibGlnaHRtYXBN
YXRyaXgiLCAxNik7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJzcGVjdWxhck1hdHJpeCIsIDE2
KTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oImJ1bXBNYXRyaXgiLCAxNik7CisgICAgICAgIHVi
by5hZGRVbmlmb3JtKCJ2VGFuZ2VudFNwYWNlUGFyYW1zIiwgMik7CisgICAgICAgIHViby5hZGRV
bmlmb3JtKCJwb2ludFNpemUiLCAxKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInJlZnJhY3Rp
b25NYXRyaXgiLCAxNik7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2UmVmcmFjdGlvbkluZm9z
IiwgNCk7CisgICAgICAgIHViby5hZGRVbmlmb3JtKCJ2U3BlY3VsYXJDb2xvciIsIDQpOworICAg
ICAgICB1Ym8uYWRkVW5pZm9ybSgidkVtaXNzaXZlQ29sb3IiLCAzKTsKKyAgICAgICAgdWJvLmFk
ZFVuaWZvcm0oInZpc2liaWxpdHkiLCAxKTsKKyAgICAgICAgdWJvLmFkZFVuaWZvcm0oInZEaWZm
dXNlQ29sb3IiLCA0KTsKKyAgICAgICAgdWJvLmNyZWF0ZSgpOworICAgIH07CisgICAgLyoqCisg
ICAgICogVW5iaW5kcyB0aGUgbWF0ZXJpYWwgZnJvbSB0aGUgbWVzaAorICAgICAqLworICAgIFN0
YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKHRoaXMuX2FjdGl2ZUVmZmVjdCkgeworICAgICAgICAgICAgdmFyIG5lZWRGbGFnID0gZmFs
c2U7CisgICAgICAgICAgICBpZiAodGhpcy5fcmVmbGVjdGlvblRleHR1cmUgJiYgdGhpcy5fcmVm
bGVjdGlvblRleHR1cmUuaXNSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9h
Y3RpdmVFZmZlY3Quc2V0VGV4dHVyZSgicmVmbGVjdGlvbjJEU2FtcGxlciIsIG51bGwpOworICAg
ICAgICAgICAgICAgIG5lZWRGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZSAmJiB0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZS5p
c1JlbmRlclRhcmdldCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUVmZmVjdC5zZXRU
ZXh0dXJlKCJyZWZyYWN0aW9uMkRTYW1wbGVyIiwgbnVsbCk7CisgICAgICAgICAgICAgICAgbmVl
ZEZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5lZWRGbGFnKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5fbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5i
aW5kLmNhbGwodGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCaW5kcyB0aGUgc3VibWVz
aCB0byB0aGlzIG1hdGVyaWFsIGJ5IHByZXBhcmluZyB0aGUgZWZmZWN0IGFuZCBzaGFkZXIgdG8g
ZHJhdworICAgICAqIEBwYXJhbSB3b3JsZCBkZWZpbmVzIHRoZSB3b3JsZCB0cmFuc2Zvcm1hdGlv
biBtYXRyaXgKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIGNvbnRhaW5pbmcg
dGhlIHN1Ym1lc2gKKyAgICAgKiBAcGFyYW0gc3ViTWVzaCBkZWZpbmVzIHRoZSBzdWJtZXNoIHRv
IGJpbmQgdGhlIG1hdGVyaWFsIHRvCisgICAgICovCisgICAgU3RhbmRhcmRNYXRlcmlhbC5wcm90
b3R5cGUuYmluZEZvclN1Yk1lc2ggPSBmdW5jdGlvbiAod29ybGQsIG1lc2gsIHN1Yk1lc2gpIHsK
KyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICB2YXIgZGVmaW5l
cyA9IHN1Yk1lc2guX21hdGVyaWFsRGVmaW5lczsKKyAgICAgICAgaWYgKCFkZWZpbmVzKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVmZmVjdCA9IHN1Yk1l
c2guZWZmZWN0OworICAgICAgICBpZiAoIWVmZmVjdCkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2FjdGl2ZUVmZmVjdCA9IGVmZmVjdDsKKyAgICAgICAg
Ly8gTWF0cmljZXMKKyAgICAgICAgaWYgKCFkZWZpbmVzLklOU1RBTkNFUykgeworICAgICAgICAg
ICAgdGhpcy5iaW5kT25seVdvcmxkTWF0cml4KHdvcmxkKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBOb3JtYWwgTWF0cml4CisgICAgICAgIGlmIChkZWZpbmVzLk9CSkVDVFNQQUNFX05PUk1BTE1B
UCkgeworICAgICAgICAgICAgd29ybGQudG9Ob3JtYWxNYXRyaXgodGhpcy5fbm9ybWFsTWF0cml4
KTsKKyAgICAgICAgICAgIHRoaXMuYmluZE9ubHlOb3JtYWxNYXRyaXgodGhpcy5fbm9ybWFsTWF0
cml4KTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbXVzdFJlYmluZCA9IHRoaXMuX211c3RSZWJp
bmQoc2NlbmUsIGVmZmVjdCwgbWVzaC52aXNpYmlsaXR5KTsKKyAgICAgICAgLy8gQm9uZXMKKyAg
ICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRl
cmlhbEhlbHBlciJdLkJpbmRCb25lc1BhcmFtZXRlcnMobWVzaCwgZWZmZWN0KTsKKyAgICAgICAg
dmFyIHVibyA9IHRoaXMuX3VuaWZvcm1CdWZmZXI7CisgICAgICAgIGlmIChtdXN0UmViaW5kKSB7
CisgICAgICAgICAgICB1Ym8uYmluZFRvRWZmZWN0KGVmZmVjdCwgIk1hdGVyaWFsIik7CisgICAg
ICAgICAgICB0aGlzLmJpbmRWaWV3UHJvamVjdGlvbihlZmZlY3QpOworICAgICAgICAgICAgaWYg
KCF1Ym8udXNlVWJvIHx8ICF0aGlzLmlzRnJvemVuIHx8ICF1Ym8uaXNTeW5jKSB7CisgICAgICAg
ICAgICAgICAgaWYgKFN0YW5kYXJkTWF0ZXJpYWwuRnJlc25lbEVuYWJsZWQgJiYgZGVmaW5lcy5G
UkVTTkVMKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZyZXNuZWwKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuZGlmZnVzZUZyZXNuZWxQYXJhbWV0ZXJzICYmIHRoaXMuZGlmZnVzZUZy
ZXNuZWxQYXJhbWV0ZXJzLmlzRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdWJv
LnVwZGF0ZUNvbG9yNCgiZGlmZnVzZUxlZnRDb2xvciIsIHRoaXMuZGlmZnVzZUZyZXNuZWxQYXJh
bWV0ZXJzLmxlZnRDb2xvciwgdGhpcy5kaWZmdXNlRnJlc25lbFBhcmFtZXRlcnMucG93ZXIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUNvbG9yNCgiZGlmZnVzZVJpZ2h0Q29s
b3IiLCB0aGlzLmRpZmZ1c2VGcmVzbmVsUGFyYW1ldGVycy5yaWdodENvbG9yLCB0aGlzLmRpZmZ1
c2VGcmVzbmVsUGFyYW1ldGVycy5iaWFzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpcy5vcGFjaXR5RnJlc25lbFBhcmFtZXRlcnMgJiYgdGhpcy5v
cGFjaXR5RnJlc25lbFBhcmFtZXRlcnMuaXNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB1Ym8udXBkYXRlQ29sb3I0KCJvcGFjaXR5UGFydHMiLCBuZXcgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29sb3IzIl0odGhpcy5vcGFjaXR5RnJl
c25lbFBhcmFtZXRlcnMubGVmdENvbG9yLnRvTHVtaW5hbmNlKCksIHRoaXMub3BhY2l0eUZyZXNu
ZWxQYXJhbWV0ZXJzLnJpZ2h0Q29sb3IudG9MdW1pbmFuY2UoKSwgdGhpcy5vcGFjaXR5RnJlc25l
bFBhcmFtZXRlcnMuYmlhcyksIHRoaXMub3BhY2l0eUZyZXNuZWxQYXJhbWV0ZXJzLnBvd2VyKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWZs
ZWN0aW9uRnJlc25lbFBhcmFtZXRlcnMgJiYgdGhpcy5yZWZsZWN0aW9uRnJlc25lbFBhcmFtZXRl
cnMuaXNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlQ29sb3I0
KCJyZWZsZWN0aW9uTGVmdENvbG9yIiwgdGhpcy5yZWZsZWN0aW9uRnJlc25lbFBhcmFtZXRlcnMu
bGVmdENvbG9yLCB0aGlzLnJlZmxlY3Rpb25GcmVzbmVsUGFyYW1ldGVycy5wb3dlcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlQ29sb3I0KCJyZWZsZWN0aW9uUmlnaHRDb2xv
ciIsIHRoaXMucmVmbGVjdGlvbkZyZXNuZWxQYXJhbWV0ZXJzLnJpZ2h0Q29sb3IsIHRoaXMucmVm
bGVjdGlvbkZyZXNuZWxQYXJhbWV0ZXJzLmJpYXMpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlZnJhY3Rpb25GcmVzbmVsUGFyYW1ldGVycyAm
JiB0aGlzLnJlZnJhY3Rpb25GcmVzbmVsUGFyYW1ldGVycy5pc0VuYWJsZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHViby51cGRhdGVDb2xvcjQoInJlZnJhY3Rpb25MZWZ0Q29sb3IiLCB0
aGlzLnJlZnJhY3Rpb25GcmVzbmVsUGFyYW1ldGVycy5sZWZ0Q29sb3IsIHRoaXMucmVmcmFjdGlv
bkZyZXNuZWxQYXJhbWV0ZXJzLnBvd2VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHViby51
cGRhdGVDb2xvcjQoInJlZnJhY3Rpb25SaWdodENvbG9yIiwgdGhpcy5yZWZyYWN0aW9uRnJlc25l
bFBhcmFtZXRlcnMucmlnaHRDb2xvciwgdGhpcy5yZWZyYWN0aW9uRnJlc25lbFBhcmFtZXRlcnMu
Ymlhcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuZW1pc3NpdmVGcmVzbmVsUGFyYW1ldGVycyAmJiB0aGlzLmVtaXNzaXZlRnJlc25lbFBhcmFt
ZXRlcnMuaXNFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlQ29s
b3I0KCJlbWlzc2l2ZUxlZnRDb2xvciIsIHRoaXMuZW1pc3NpdmVGcmVzbmVsUGFyYW1ldGVycy5s
ZWZ0Q29sb3IsIHRoaXMuZW1pc3NpdmVGcmVzbmVsUGFyYW1ldGVycy5wb3dlcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlQ29sb3I0KCJlbWlzc2l2ZVJpZ2h0Q29sb3IiLCB0
aGlzLmVtaXNzaXZlRnJlc25lbFBhcmFtZXRlcnMucmlnaHRDb2xvciwgdGhpcy5lbWlzc2l2ZUZy
ZXNuZWxQYXJhbWV0ZXJzLmJpYXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFRleHR1cmVzCisgICAgICAgICAgICAgICAgaWYg
KHNjZW5lLnRleHR1cmVzRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5f
ZGlmZnVzZVRleHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlhbC5EaWZmdXNlVGV4dHVyZUVuYWJsZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDIoInZEaWZmdXNlSW5m
b3MiLCB0aGlzLl9kaWZmdXNlVGV4dHVyZS5jb29yZGluYXRlc0luZGV4LCB0aGlzLl9kaWZmdXNl
VGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uQmluZFRleHR1
cmVNYXRyaXgodGhpcy5fZGlmZnVzZVRleHR1cmUsIHVibywgImRpZmZ1c2UiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4dHVyZS5oYXNBbHBoYSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiYWxwaGFDdXRPZmYiLCB0
aGlzLmFscGhhQ3V0T2ZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYW1iaWVudFRleHR1cmUg
JiYgU3RhbmRhcmRNYXRlcmlhbC5BbWJpZW50VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDIoInZBbWJpZW50SW5mb3MiLCB0aGlzLl9hbWJp
ZW50VGV4dHVyZS5jb29yZGluYXRlc0luZGV4LCB0aGlzLl9hbWJpZW50VGV4dHVyZS5sZXZlbCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uQmluZFRleHR1cmVNYXRyaXgodGhpcy5f
YW1iaWVudFRleHR1cmUsIHVibywgImFtYmllbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3BhY2l0eVRleHR1cmUgJiYgU3RhbmRhcmRN
YXRlcmlhbC5PcGFjaXR5VGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHViby51cGRhdGVGbG9hdDIoInZPcGFjaXR5SW5mb3MiLCB0aGlzLl9vcGFjaXR5VGV4dHVyZS5j
b29yZGluYXRlc0luZGV4LCB0aGlzLl9vcGFjaXR5VGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEx
X19bIk1hdGVyaWFsSGVscGVyIl0uQmluZFRleHR1cmVNYXRyaXgodGhpcy5fb3BhY2l0eVRleHR1
cmUsIHVibywgIm9wYWNpdHkiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5fcmVmbGVjdGlvblRleHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlhbC5S
ZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHViby51
cGRhdGVGbG9hdDIoInZSZWZsZWN0aW9uSW5mb3MiLCB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZS5s
ZXZlbCwgdGhpcy5yb3VnaG5lc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0
ZU1hdHJpeCgicmVmbGVjdGlvbk1hdHJpeCIsIHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlLmdldFJl
ZmxlY3Rpb25UZXh0dXJlTWF0cml4KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX3JlZmxlY3Rpb25UZXh0dXJlLmJvdW5kaW5nQm94U2l6ZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBjdWJlVGV4dHVyZSA9IHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVWZWN0b3IzKCJ2UmVmbGVjdGlv
blBvc2l0aW9uIiwgY3ViZVRleHR1cmUuYm91bmRpbmdCb3hQb3NpdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWJvLnVwZGF0ZVZlY3RvcjMoInZSZWZsZWN0aW9uU2l6ZSIsIGN1
YmVUZXh0dXJlLmJvdW5kaW5nQm94U2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VtaXNz
aXZlVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLkVtaXNzaXZlVGV4dHVyZUVuYWJsZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDIoInZFbWlzc2l2ZUluZm9z
IiwgdGhpcy5fZW1pc3NpdmVUZXh0dXJlLmNvb3JkaW5hdGVzSW5kZXgsIHRoaXMuX2VtaXNzaXZl
VGV4dHVyZS5sZXZlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uQmluZFRleHR1
cmVNYXRyaXgodGhpcy5fZW1pc3NpdmVUZXh0dXJlLCB1Ym8sICJlbWlzc2l2ZSIpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9saWdodG1hcFRl
eHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlhbC5MaWdodG1hcFRleHR1cmVFbmFibGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlRmxvYXQyKCJ2TGlnaHRtYXBJbmZvcyIsIHRo
aXMuX2xpZ2h0bWFwVGV4dHVyZS5jb29yZGluYXRlc0luZGV4LCB0aGlzLl9saWdodG1hcFRleHR1
cmUubGV2ZWwpOworICAgICAgICAgICAgICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRUZXh0dXJlTWF0
cml4KHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSwgdWJvLCAibGlnaHRtYXAiKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3BlY3VsYXJUZXh0dXJl
ICYmIFN0YW5kYXJkTWF0ZXJpYWwuU3BlY3VsYXJUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdWJvLnVwZGF0ZUZsb2F0MigidlNwZWN1bGFySW5mb3MiLCB0aGlzLl9z
cGVjdWxhclRleHR1cmUuY29vcmRpbmF0ZXNJbmRleCwgdGhpcy5fc3BlY3VsYXJUZXh0dXJlLmxl
dmVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kVGV4dHVyZU1hdHJpeCh0
aGlzLl9zcGVjdWxhclRleHR1cmUsIHVibywgInNwZWN1bGFyIik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2J1bXBUZXh0dXJlICYmIHNjZW5l
LmdldEVuZ2luZSgpLmdldENhcHMoKS5zdGFuZGFyZERlcml2YXRpdmVzICYmIFN0YW5kYXJkTWF0
ZXJpYWwuQnVtcFRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1Ym8u
dXBkYXRlRmxvYXQzKCJ2QnVtcEluZm9zIiwgdGhpcy5fYnVtcFRleHR1cmUuY29vcmRpbmF0ZXNJ
bmRleCwgMS4wIC8gdGhpcy5fYnVtcFRleHR1cmUubGV2ZWwsIHRoaXMucGFyYWxsYXhTY2FsZUJp
YXMpOworICAgICAgICAgICAgICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRUZXh0dXJlTWF0cml4KHRo
aXMuX2J1bXBUZXh0dXJlLCB1Ym8sICJidW1wIik7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc2NlbmUuX21pcnJvcmVkQ2FtZXJhUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1Ym8udXBkYXRlRmxvYXQyKCJ2VGFuZ2VudFNwYWNlUGFyYW1zIiwgdGhpcy5faW52
ZXJ0Tm9ybWFsTWFwWCA/IDEuMCA6IC0xLjAsIHRoaXMuX2ludmVydE5vcm1hbE1hcFkgPyAxLjAg
OiAtMS4wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHViby51cGRhdGVGbG9hdDIo
InZUYW5nZW50U3BhY2VQYXJhbXMiLCB0aGlzLl9pbnZlcnROb3JtYWxNYXBYID8gLTEuMCA6IDEu
MCwgdGhpcy5faW52ZXJ0Tm9ybWFsTWFwWSA/IC0xLjAgOiAxLjApOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
ICh0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLlJlZnJhY3Rpb25U
ZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlcHRoID0gMS4w
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZS5p
c0N1YmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Ym8udXBkYXRlTWF0cml4KCJy
ZWZyYWN0aW9uTWF0cml4IiwgdGhpcy5fcmVmcmFjdGlvblRleHR1cmUuZ2V0UmVmbGVjdGlvblRl
eHR1cmVNYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Jl
ZnJhY3Rpb25UZXh0dXJlLmRlcHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlcHRoID0gdGhpcy5fcmVmcmFjdGlvblRleHR1cmUuZGVwdGg7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgdWJvLnVwZGF0ZUZsb2F0NCgidlJlZnJhY3Rpb25JbmZvcyIsIHRoaXMuX3JlZnJh
Y3Rpb25UZXh0dXJlLmxldmVsLCB0aGlzLmluZGV4T2ZSZWZyYWN0aW9uLCBkZXB0aCwgdGhpcy5p
bnZlcnRSZWZyYWN0aW9uWSA/IC0xIDogMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gUG9pbnQgc2l6ZQorICAgICAgICAgICAg
ICAgIGlmICh0aGlzLnBvaW50c0Nsb3VkKSB7CisgICAgICAgICAgICAgICAgICAgIHViby51cGRh
dGVGbG9hdCgicG9pbnRTaXplIiwgdGhpcy5wb2ludFNpemUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoZGVmaW5lcy5TUEVDVUxBUlRFUk0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgdWJvLnVwZGF0ZUNvbG9yNCgidlNwZWN1bGFyQ29sb3IiLCB0aGlzLnNwZWN1bGFy
Q29sb3IsIHRoaXMuc3BlY3VsYXJQb3dlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHViby51cGRhdGVDb2xvcjMoInZFbWlzc2l2ZUNvbG9yIiwgU3RhbmRhcmRNYXRlcmlh
bC5FbWlzc2l2ZVRleHR1cmVFbmFibGVkID8gdGhpcy5lbWlzc2l2ZUNvbG9yIDogX01hdGhzX21h
dGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQ29sb3IzIl0uQmxhY2tSZWFk
T25seSk7CisgICAgICAgICAgICAgICAgLy8gVmlzaWJpbGl0eQorICAgICAgICAgICAgICAgIHVi
by51cGRhdGVGbG9hdCgidmlzaWJpbGl0eSIsIG1lc2gudmlzaWJpbGl0eSk7CisgICAgICAgICAg
ICAgICAgLy8gRGlmZnVzZQorICAgICAgICAgICAgICAgIHViby51cGRhdGVDb2xvcjQoInZEaWZm
dXNlQ29sb3IiLCB0aGlzLmRpZmZ1c2VDb2xvciwgdGhpcy5hbHBoYSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAvLyBUZXh0dXJlcworICAgICAgICAgICAgaWYgKHNjZW5lLnRleHR1cmVz
RW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4dHVyZSAmJiBT
dGFuZGFyZE1hdGVyaWFsLkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAg
ICAgICBlZmZlY3Quc2V0VGV4dHVyZSgiZGlmZnVzZVNhbXBsZXIiLCB0aGlzLl9kaWZmdXNlVGV4
dHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hbWJp
ZW50VGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLkFtYmllbnRUZXh0dXJlRW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgiYW1iaWVudFNhbXBsZXIiLCB0
aGlzLl9hbWJpZW50VGV4dHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9vcGFjaXR5VGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLk9wYWNpdHlUZXh0
dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgib3Bh
Y2l0eVNhbXBsZXIiLCB0aGlzLl9vcGFjaXR5VGV4dHVyZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSAmJiBTdGFuZGFyZE1h
dGVyaWFsLlJlZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fcmVmbGVjdGlvblRleHR1cmUuaXNDdWJlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlZmZlY3Quc2V0VGV4dHVyZSgicmVmbGVjdGlvbkN1YmVTYW1wbGVyIiwgdGhpcy5fcmVm
bGVjdGlvblRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInJl
ZmxlY3Rpb24yRFNhbXBsZXIiLCB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMu
X2VtaXNzaXZlVGV4dHVyZSAmJiBTdGFuZGFyZE1hdGVyaWFsLkVtaXNzaXZlVGV4dHVyZUVuYWJs
ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoImVtaXNzaXZlU2Ft
cGxlciIsIHRoaXMuX2VtaXNzaXZlVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9saWdodG1hcFRleHR1cmUgJiYgU3RhbmRhcmRNYXRlcmlhbC5M
aWdodG1hcFRleHR1cmVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRU
ZXh0dXJlKCJsaWdodG1hcFNhbXBsZXIiLCB0aGlzLl9saWdodG1hcFRleHR1cmUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3BlY3VsYXJUZXh0dXJlICYm
IFN0YW5kYXJkTWF0ZXJpYWwuU3BlY3VsYXJUZXh0dXJlRW5hYmxlZCkgeworICAgICAgICAgICAg
ICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgic3BlY3VsYXJTYW1wbGVyIiwgdGhpcy5fc3BlY3Vs
YXJUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMu
X2J1bXBUZXh0dXJlICYmIHNjZW5lLmdldEVuZ2luZSgpLmdldENhcHMoKS5zdGFuZGFyZERlcml2
YXRpdmVzICYmIFN0YW5kYXJkTWF0ZXJpYWwuQnVtcFRleHR1cmVFbmFibGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJidW1wU2FtcGxlciIsIHRoaXMuX2J1bXBU
ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Jl
ZnJhY3Rpb25UZXh0dXJlICYmIFN0YW5kYXJkTWF0ZXJpYWwuUmVmcmFjdGlvblRleHR1cmVFbmFi
bGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBkZXB0aCA9IDEuMDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlLmlzQ3ViZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInJlZnJhY3Rpb25DdWJlU2FtcGxlciIs
IHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRU
ZXh0dXJlKCJyZWZyYWN0aW9uMkRTYW1wbGVyIiwgdGhpcy5fcmVmcmFjdGlvblRleHR1cmUpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gQ2xpcCBwbGFuZQorICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRDbGlwUGxh
bmUoZWZmZWN0LCBzY2VuZSk7CisgICAgICAgICAgICAvLyBDb2xvcnMKKyAgICAgICAgICAgIHNj
ZW5lLmFtYmllbnRDb2xvci5tdWx0aXBseVRvUmVmKHRoaXMuYW1iaWVudENvbG9yLCB0aGlzLl9n
bG9iYWxBbWJpZW50Q29sb3IpOworICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRFeWVQb3NpdGlvbihl
ZmZlY3QsIHNjZW5lKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRDb2xvcjMoInZBbWJpZW50Q29s
b3IiLCB0aGlzLl9nbG9iYWxBbWJpZW50Q29sb3IpOworICAgICAgICB9CisgICAgICAgIGlmICht
dXN0UmViaW5kIHx8ICF0aGlzLmlzRnJvemVuKSB7CisgICAgICAgICAgICAvLyBMaWdodHMKKyAg
ICAgICAgICAgIGlmIChzY2VuZS5saWdodHNFbmFibGVkICYmICF0aGlzLl9kaXNhYmxlTGlnaHRp
bmcpIHsKKyAgICAgICAgICAgICAgICBfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzExX19bIk1hdGVyaWFsSGVscGVyIl0uQmluZExpZ2h0cyhzY2VuZSwgbWVzaCwgZWZm
ZWN0LCBkZWZpbmVzLCB0aGlzLl9tYXhTaW11bHRhbmVvdXNMaWdodHMsIGZhbHNlLCB0aGlzLl9y
ZWJ1aWxkSW5QYXJhbGxlbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBWaWV3Cisg
ICAgICAgICAgICBpZiAoc2NlbmUuZm9nRW5hYmxlZCAmJiBtZXNoLmFwcGx5Rm9nICYmIHNjZW5l
LmZvZ01vZGUgIT09IF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZSJd
LkZPR01PREVfTk9ORSB8fCB0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSB8fCB0aGlzLl9yZWZyYWN0
aW9uVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuYmluZFZpZXcoZWZmZWN0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZvZworICAgICAgICAgICAgX21hdGVyaWFsSGVs
cGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRG
b2dQYXJhbWV0ZXJzKHNjZW5lLCBtZXNoLCBlZmZlY3QpOworICAgICAgICAgICAgLy8gTW9ycGgg
dGFyZ2V0cworICAgICAgICAgICAgaWYgKGRlZmluZXMuTlVNX01PUlBIX0lORkxVRU5DRVJTKSB7
CisgICAgICAgICAgICAgICAgX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRNb3JwaFRhcmdldFBhcmFtZXRlcnMobWVzaCwg
ZWZmZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIExvZy4gZGVwdGgKKyAgICAg
ICAgICAgIF9tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siTWF0
ZXJpYWxIZWxwZXIiXS5CaW5kTG9nRGVwdGgoZGVmaW5lcywgZWZmZWN0LCBzY2VuZSk7CisgICAg
ICAgICAgICAvLyBpbWFnZSBwcm9jZXNzaW5nCisgICAgICAgICAgICBpZiAodGhpcy5faW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiAhdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbi5hcHBseUJ5UG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9pbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uLmJpbmQodGhpcy5fYWN0aXZlRWZmZWN0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB1Ym8udXBkYXRlKCk7CisgICAgICAgIHRoaXMuX2Fm
dGVyQmluZChtZXNoLCB0aGlzLl9hY3RpdmVFZmZlY3QpOworICAgIH07CisgICAgLyoqCisgICAg
ICogR2V0IHRoZSBsaXN0IG9mIGFuaW1hdGFibGVzIGluIHRoZSBtYXRlcmlhbC4KKyAgICAgKiBA
cmV0dXJucyB0aGUgbGlzdCBvZiBhbmltYXRhYmxlcyBvYmplY3QgdXNlZCBpbiB0aGUgbWF0ZXJp
YWwKKyAgICAgKi8KKyAgICBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZS5nZXRBbmltYXRhYmxl
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTsKKyAgICAgICAgaWYg
KHRoaXMuX2RpZmZ1c2VUZXh0dXJlICYmIHRoaXMuX2RpZmZ1c2VUZXh0dXJlLmFuaW1hdGlvbnMg
JiYgdGhpcy5fZGlmZnVzZVRleHR1cmUuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICByZXN1bHRzLnB1c2godGhpcy5fZGlmZnVzZVRleHR1cmUpOworICAgICAgICB9CisgICAg
ICAgIGlmICh0aGlzLl9hbWJpZW50VGV4dHVyZSAmJiB0aGlzLl9hbWJpZW50VGV4dHVyZS5hbmlt
YXRpb25zICYmIHRoaXMuX2FtYmllbnRUZXh0dXJlLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgewor
ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMuX2FtYmllbnRUZXh0dXJlKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5fb3BhY2l0eVRleHR1cmUgJiYgdGhpcy5fb3BhY2l0eVRleHR1
cmUuYW5pbWF0aW9ucyAmJiB0aGlzLl9vcGFjaXR5VGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9vcGFjaXR5VGV4dHVyZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlICYmIHRoaXMuX3Jl
ZmxlY3Rpb25UZXh0dXJlLmFuaW1hdGlvbnMgJiYgdGhpcy5fcmVmbGVjdGlvblRleHR1cmUuYW5p
bWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fcmVm
bGVjdGlvblRleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRl
eHR1cmUgJiYgdGhpcy5fZW1pc3NpdmVUZXh0dXJlLmFuaW1hdGlvbnMgJiYgdGhpcy5fZW1pc3Np
dmVUZXh0dXJlLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgcmVzdWx0cy5w
dXNoKHRoaXMuX2VtaXNzaXZlVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X3NwZWN1bGFyVGV4dHVyZSAmJiB0aGlzLl9zcGVjdWxhclRleHR1cmUuYW5pbWF0aW9ucyAmJiB0
aGlzLl9zcGVjdWxhclRleHR1cmUuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAgICAgICAg
ICByZXN1bHRzLnB1c2godGhpcy5fc3BlY3VsYXJUZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAodGhpcy5fYnVtcFRleHR1cmUgJiYgdGhpcy5fYnVtcFRleHR1cmUuYW5pbWF0aW9ucyAm
JiB0aGlzLl9idW1wVGV4dHVyZS5hbmltYXRpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAg
IHJlc3VsdHMucHVzaCh0aGlzLl9idW1wVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSAmJiB0aGlzLl9saWdodG1hcFRleHR1cmUuYW5pbWF0aW9u
cyAmJiB0aGlzLl9saWdodG1hcFRleHR1cmUuYW5pbWF0aW9ucy5sZW5ndGggPiAwKSB7CisgICAg
ICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fbGlnaHRtYXBUZXh0dXJlKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5fcmVmcmFjdGlvblRleHR1cmUgJiYgdGhpcy5fcmVmcmFjdGlvblRl
eHR1cmUuYW5pbWF0aW9ucyAmJiB0aGlzLl9yZWZyYWN0aW9uVGV4dHVyZS5hbmltYXRpb25zLmxl
bmd0aCA+IDApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9yZWZyYWN0aW9uVGV4
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBhY3RpdmUgdGV4dHVyZXMgZnJvbSB0aGUgbWF0ZXJpYWwKKyAg
ICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB0ZXh0dXJlcworICAgICAqLworICAgIFN0YW5kYXJk
TWF0ZXJpYWwucHJvdG90eXBlLmdldEFjdGl2ZVRleHR1cmVzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgYWN0aXZlVGV4dHVyZXMgPSBfc3VwZXIucHJvdG90eXBlLmdldEFjdGl2ZVRleHR1
cmVzLmNhbGwodGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9kaWZmdXNlVGV4dHVyZSkgeworICAg
ICAgICAgICAgYWN0aXZlVGV4dHVyZXMucHVzaCh0aGlzLl9kaWZmdXNlVGV4dHVyZSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2FtYmllbnRUZXh0dXJlKSB7CisgICAgICAgICAgICBh
Y3RpdmVUZXh0dXJlcy5wdXNoKHRoaXMuX2FtYmllbnRUZXh0dXJlKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodGhpcy5fb3BhY2l0eVRleHR1cmUpIHsKKyAgICAgICAgICAgIGFjdGl2ZVRleHR1
cmVzLnB1c2godGhpcy5fb3BhY2l0eVRleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSkgeworICAgICAgICAgICAgYWN0aXZlVGV4dHVyZXMucHVz
aCh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X2VtaXNzaXZlVGV4dHVyZSkgeworICAgICAgICAgICAgYWN0aXZlVGV4dHVyZXMucHVzaCh0aGlz
Ll9lbWlzc2l2ZVRleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9zcGVjdWxh
clRleHR1cmUpIHsKKyAgICAgICAgICAgIGFjdGl2ZVRleHR1cmVzLnB1c2godGhpcy5fc3BlY3Vs
YXJUZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYnVtcFRleHR1cmUpIHsK
KyAgICAgICAgICAgIGFjdGl2ZVRleHR1cmVzLnB1c2godGhpcy5fYnVtcFRleHR1cmUpOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLl9saWdodG1hcFRleHR1cmUpIHsKKyAgICAgICAgICAg
IGFjdGl2ZVRleHR1cmVzLnB1c2godGhpcy5fbGlnaHRtYXBUZXh0dXJlKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5fcmVmcmFjdGlvblRleHR1cmUpIHsKKyAgICAgICAgICAgIGFjdGl2
ZVRleHR1cmVzLnB1c2godGhpcy5fcmVmcmFjdGlvblRleHR1cmUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBhY3RpdmVUZXh0dXJlczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNwZWNp
ZmllcyBpZiB0aGUgbWF0ZXJpYWwgdXNlcyBhIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gdGV4dHVy
ZSBkZWZpbmVzIHRoZSB0ZXh0dXJlIHRvIGNoZWNrIGFnYWluc3QgdGhlIG1hdGVyaWFsCisgICAg
ICogQHJldHVybnMgYSBib29sZWFuIHNwZWNpZnlpbmcgaWYgdGhlIG1hdGVyaWFsIHVzZXMgdGhl
IHRleHR1cmUKKyAgICAgKi8KKyAgICBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZS5oYXNUZXh0
dXJlID0gZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAgICAgICAgaWYgKF9zdXBlci5wcm90b3R5cGUu
aGFzVGV4dHVyZS5jYWxsKHRoaXMsIHRleHR1cmUpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZGlmZnVzZVRleHR1cmUgPT09IHRleHR1
cmUpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLl9hbWJpZW50VGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29wYWNpdHlUZXh0dXJlID09PSB0ZXh0
dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fcmVmbGVjdGlvblRleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRleHR1cmUgPT09
IHRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9zcGVjdWxhclRleHR1cmUgPT09IHRleHR1cmUpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9idW1wVGV4dHVyZSA9PT0g
dGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX2xpZ2h0bWFwVGV4dHVyZSA9PT0gdGV4dHVyZSkgeworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJl
ID09PSB0ZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUg
bWF0ZXJpYWwKKyAgICAgKiBAcGFyYW0gZm9yY2VEaXNwb3NlRWZmZWN0IHNwZWNpZmllcyBpZiBl
ZmZlY3RzIHNob3VsZCBiZSBmb3JjZWZ1bGx5IGRpc3Bvc2VkCisgICAgICogQHBhcmFtIGZvcmNl
RGlzcG9zZVRleHR1cmVzIHNwZWNpZmllcyBpZiB0ZXh0dXJlcyBzaG91bGQgYmUgZm9yY2VmdWxs
eSBkaXNwb3NlZAorICAgICAqLworICAgIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLmRpc3Bv
c2UgPSBmdW5jdGlvbiAoZm9yY2VEaXNwb3NlRWZmZWN0LCBmb3JjZURpc3Bvc2VUZXh0dXJlcykg
eworICAgICAgICBpZiAoZm9yY2VEaXNwb3NlVGV4dHVyZXMpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9kaWZmdXNlVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2RpZmZ1c2VUZXh0
dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9hbWJp
ZW50VGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2FtYmllbnRUZXh0dXJlLmRpc3Bv
c2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9vcGFjaXR5VGV4dHVy
ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX29wYWNpdHlUZXh0dXJlLmRpc3Bvc2UoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9yZWZsZWN0aW9uVGV4dHVyZSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX3JlZmxlY3Rpb25UZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9lbWlzc2l2ZVRleHR1cmUpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9lbWlzc2l2ZVRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHRoaXMuX3NwZWN1bGFyVGV4dHVyZSkgeworICAgICAgICAgICAg
ICAgIHRoaXMuX3NwZWN1bGFyVGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodGhpcy5fYnVtcFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9i
dW1wVGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhp
cy5fbGlnaHRtYXBUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRtYXBUZXh0
dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9yZWZy
YWN0aW9uVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJhY3Rpb25UZXh0dXJl
LmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5f
aW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdPYnNl
cnZlcikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5v
blVwZGF0ZVBhcmFtZXRlcnMucmVtb3ZlKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ09ic2VydmVyKTsK
KyAgICAgICAgfQorICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzLCBm
b3JjZURpc3Bvc2VFZmZlY3QsIGZvcmNlRGlzcG9zZVRleHR1cmVzKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIE1ha2VzIGEgZHVwbGljYXRlIG9mIHRoZSBtYXRlcmlhbCwgYW5kIGdpdmVzIGl0
IGEgbmV3IG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuZXcgbmFtZSBmb3Ig
dGhlIGR1cGxpY2F0ZWQgbWF0ZXJpYWwKKyAgICAgKiBAcmV0dXJucyB0aGUgY2xvbmVkIG1hdGVy
aWFsCisgICAgICovCisgICAgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5j
dGlvbiAobmFtZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgcmVz
dWx0ID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJp
YWxpemF0aW9uSGVscGVyIl0uQ2xvbmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN0YW5kYXJk
TWF0ZXJpYWwobmFtZSwgX3RoaXMuZ2V0U2NlbmUoKSk7IH0sIHRoaXMpOworICAgICAgICByZXN1
bHQubmFtZSA9IG5hbWU7CisgICAgICAgIHJlc3VsdC5pZCA9IG5hbWU7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoaXMgbWF0ZXJp
YWwgaW4gYSBKU09OIHJlcHJlc2VudGF0aW9uCisgICAgICogQHJldHVybnMgdGhlIHNlcmlhbGl6
ZWQgbWF0ZXJpYWwgb2JqZWN0CisgICAgICovCisgICAgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5
cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0u
U2VyaWFsaXplKHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHN0YW5k
YXJkIG1hdGVyaWFsIGZyb20gcGFyc2VkIG1hdGVyaWFsIGRhdGEKKyAgICAgKiBAcGFyYW0gc291
cmNlIGRlZmluZXMgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdGVyaWFsCisgICAg
ICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0g
cm9vdFVybCBkZWZpbmVzIHRoZSByb290IFVSTCB0byB1c2UgdG8gbG9hZCB0ZXh0dXJlcyBhbmQg
cmVsYXRpdmUgZGVwZW5kZW5jaWVzCisgICAgICogQHJldHVybnMgYSBuZXcgc3RhbmRhcmQgbWF0
ZXJpYWwKKyAgICAgKi8KKyAgICBTdGFuZGFyZE1hdGVyaWFsLlBhcnNlID0gZnVuY3Rpb24gKHNv
dXJjZSwgc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlBhcnNl
KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdGFuZGFyZE1hdGVyaWFsKHNvdXJjZS5uYW1lLCBz
Y2VuZSk7IH0sIHNvdXJjZSwgc2NlbmUsIHJvb3RVcmwpOworICAgIH07CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwsICJEaWZmdXNlVGV4dHVyZUVuYWJsZWQiLCB7
CisgICAgICAgIC8vIEZsYWdzIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgYSB0eXBlIG9mIHRl
eHR1cmUgZm9yIGFsbCBTdGFuZGFyZCBNYXRlcmlhbHMKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEFyZSBkaWZmdXNlIHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX21h
dGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVyaWFsRmxhZ3Mi
XS5EaWZmdXNlVGV4dHVyZUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkRpZmZ1c2VUZXh0dXJlRW5hYmxlZCA9IHZh
bHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRh
cmRNYXRlcmlhbCwgIkFtYmllbnRUZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEFyZSBhbWJpZW50IHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVyaWFs
RmxhZ3MiXS5BbWJpZW50VGV4dHVyZUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkFtYmllbnRUZXh0dXJlRW5hYmxl
ZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
U3RhbmRhcmRNYXRlcmlhbCwgIk9wYWNpdHlUZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEFyZSBvcGFjaXR5IHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0
aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1h
dGVyaWFsRmxhZ3MiXS5PcGFjaXR5VGV4dHVyZUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBfbWF0ZXJpYWxGbGFnc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLk9wYWNpdHlUZXh0dXJl
RW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoU3RhbmRhcmRNYXRlcmlhbCwgIlJlZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEFyZSByZWZsZWN0aW9uIHRleHR1cmVzIGVuYWJsZWQgaW4g
dGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE0X19bIk1hdGVyaWFsRmxhZ3MiXS5SZWZsZWN0aW9uVGV4dHVyZUVuYWJsZWQ7CisgICAg
ICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBfbWF0
ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJd
LlJlZmxlY3Rpb25UZXh0dXJlRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbCwgIkVtaXNzaXZlVGV4dHVy
ZUVuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBcmUgZW1pc3NpdmUgdGV4dHVy
ZXMgZW5hYmxlZCBpbiB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkVtaXNzaXZlVGV4dHVyZUVu
YWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0
ZXJpYWxGbGFncyJdLkVtaXNzaXZlVGV4dHVyZUVuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwsICJTcGVj
dWxhclRleHR1cmVFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQXJlIHNwZWN1
bGFyIHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX21hdGVyaWFsRmxh
Z3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVyaWFsRmxhZ3MiXS5TcGVjdWxh
clRleHR1cmVFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE0X19bIk1hdGVyaWFsRmxhZ3MiXS5TcGVjdWxhclRleHR1cmVFbmFibGVkID0gdmFsdWU7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZE1hdGVy
aWFsLCAiQnVtcFRleHR1cmVFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQXJl
IGJ1bXAgdGV4dHVyZXMgZW5hYmxlZCBpbiB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBfbWF0ZXJpYWxG
bGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkJ1bXBU
ZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
NF9fWyJNYXRlcmlhbEZsYWdzIl0uQnVtcFRleHR1cmVFbmFibGVkID0gdmFsdWU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZE1hdGVyaWFsLCAi
TGlnaHRtYXBUZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFyZSBs
aWdodG1hcCB0ZXh0dXJlcyBlbmFibGVkIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9tYXRlcmlh
bEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbEZsYWdzIl0uTGln
aHRtYXBUZXh0dXJlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIF9tYXRlcmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNF9fWyJNYXRlcmlhbEZsYWdzIl0uTGlnaHRtYXBUZXh0dXJlRW5hYmxlZCA9IHZhbHVl
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRN
YXRlcmlhbCwgIlJlZnJhY3Rpb25UZXh0dXJlRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEFyZSByZWZyYWN0aW9uIHRleHR1cmVzIGVuYWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9u
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVy
aWFsRmxhZ3MiXS5SZWZyYWN0aW9uVGV4dHVyZUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBfbWF0ZXJpYWxGbGFnc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLlJlZnJhY3Rpb25UZXh0
dXJlRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbCwgIkNvbG9yR3JhZGluZ1RleHR1cmVFbmFibGVkIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogQXJlIGNvbG9yIGdyYWRpbmcgdGV4dHVyZXMgZW5h
YmxlZCBpbiB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBfbWF0ZXJpYWxGbGFnc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfX1siTWF0ZXJpYWxGbGFncyJdLkNvbG9yR3JhZGluZ1RleHR1cmVFbmFi
bGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVy
aWFsRmxhZ3MiXS5Db2xvckdyYWRpbmdUZXh0dXJlRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbCwgIkZy
ZXNuZWxFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQXJlIGZyZXNuZWxzIGVu
YWJsZWQgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX21hdGVyaWFsRmxhZ3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE0X19bIk1hdGVyaWFsRmxhZ3MiXS5GcmVzbmVsRW5hYmxlZDsKKyAgICAg
ICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIF9tYXRl
cmlhbEZsYWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbEZsYWdzIl0u
RnJlc25lbEVuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
QXNUZXh0dXJlIl0pKCJkaWZmdXNlVGV4dHVyZSIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5w
cm90b3R5cGUsICJfZGlmZnVzZVRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVy
dHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0FuZE1pc2NEaXJ0eSIpCisgICAgXSwg
U3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJkaWZmdXNlVGV4dHVyZSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCJhbWJpZW50VGV4dHVyZSIpCisgICAgXSwgU3RhbmRh
cmRNYXRlcmlhbC5wcm90b3R5cGUsICJfYW1iaWVudFRleHR1cmUiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4
cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAg
ICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgImFtYmllbnRUZXh0dXJlIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoIm9wYWNpdHlUZXh0dXJlIikKKyAgICBdLCBT
dGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9vcGFjaXR5VGV4dHVyZSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzQW5kTWlz
Y0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIm9wYWNpdHlUZXh0
dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoInJlZmxlY3Rpb25UZXh0
dXJlIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9yZWZsZWN0aW9uVGV4
dHVyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNo
ZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAi
cmVmbGVjdGlvblRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgi
ZW1pc3NpdmVUZXh0dXJlIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9l
bWlzc2l2ZVRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJr
QWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnBy
b3RvdHlwZSwgImVtaXNzaXZlVGV4dHVyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0
dXJlIl0pKCJzcGVjdWxhclRleHR1cmUiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90
eXBlLCAiX3NwZWN1bGFyVGV4dHVyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJd
KSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFN0YW5kYXJkTWF0
ZXJpYWwucHJvdG90eXBlLCAic3BlY3VsYXJUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmpl
Y3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxp
emVBc1RleHR1cmUiXSkoImJ1bXBUZXh0dXJlIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnBy
b3RvdHlwZSwgIl9idW1wVGV4dHVyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJd
KSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFN0YW5kYXJkTWF0
ZXJpYWwucHJvdG90eXBlLCAiYnVtcFRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFz
VGV4dHVyZSJdKSgibGlnaHRtYXBUZXh0dXJlIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnBy
b3RvdHlwZSwgIl9saWdodG1hcFRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVy
dHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFy
ZE1hdGVyaWFsLnByb3RvdHlwZSwgImxpZ2h0bWFwVGV4dHVyZSIsIHZvaWQgMCk7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplQXNUZXh0dXJlIl0pKCJyZWZyYWN0aW9uVGV4dHVyZSIpCisgICAgXSwgU3RhbmRhcmRN
YXRlcmlhbC5wcm90b3R5cGUsICJfcmVmcmFjdGlvblRleHR1cmUiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4
cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAg
ICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgInJlZnJhY3Rpb25UZXh0dXJlIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemVBc0NvbG9yMyJdKSgiYW1iaWVudCIpCisgICAgXSwgU3RhbmRh
cmRNYXRlcmlhbC5wcm90b3R5cGUsICJhbWJpZW50Q29sb3IiLCB2b2lkIDApOworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9i
amVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlh
bGl6ZUFzQ29sb3IzIl0pKCJkaWZmdXNlIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3Rv
dHlwZSwgImRpZmZ1c2VDb2xvciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNDb2xvcjMiXSko
InNwZWN1bGFyIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgInNwZWN1bGFy
Q29sb3IiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzQ29sb3IzIl0pKCJlbWlzc2l2ZSIpCisg
ICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJlbWlzc2l2ZUNvbG9yIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBl
LCAic3BlY3VsYXJQb3dlciIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCJ1c2VBbHBoYUZy
b21EaWZmdXNlVGV4dHVyZSIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJf
dXNlQWxwaGFGcm9tRGlmZnVzZVRleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVy
dHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFy
ZE1hdGVyaWFsLnByb3RvdHlwZSwgInVzZUFscGhhRnJvbURpZmZ1c2VUZXh0dXJlIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoInVzZUVtaXNzaXZlQXNJbGx1bWluYXRpb24iKQorICAgIF0s
IFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX3VzZUVtaXNzaXZlQXNJbGx1bWluYXRpb24i
LCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVj
b3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNU
ZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgInVzZUVt
aXNzaXZlQXNJbGx1bWluYXRpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgibGlua0Vt
aXNzaXZlV2l0aERpZmZ1c2UiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAi
X2xpbmtFbWlzc2l2ZVdpdGhEaWZmdXNlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5
Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgU3RhbmRhcmRN
YXRlcmlhbC5wcm90b3R5cGUsICJsaW5rRW1pc3NpdmVXaXRoRGlmZnVzZSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCJ1c2VTcGVjdWxhck92ZXJBbHBoYSIpCisgICAgXSwgU3RhbmRhcmRN
YXRlcmlhbC5wcm90b3R5cGUsICJfdXNlU3BlY3VsYXJPdmVyQWxwaGEiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
ImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikK
KyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgInVzZVNwZWN1bGFyT3ZlckFscGhh
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoInVzZVJlZmxlY3Rpb25PdmVyQWxwaGEiKQor
ICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX3VzZVJlZmxlY3Rpb25PdmVyQWxw
aGEiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVz
QXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgInVz
ZVJlZmxlY3Rpb25PdmVyQWxwaGEiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgiZGlzYWJs
ZUxpZ2h0aW5nIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9kaXNhYmxl
TGlnaHRpbmciLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3Vi
TWVzaGVzQXNMaWdodHNEaXJ0eSIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUs
ICJkaXNhYmxlTGlnaHRpbmciLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgidXNlT2JqZWN0
U3BhY2VOb3JtYWxNYXAiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX3Vz
ZU9iamVjdFNwYWNlTm9ybWFsTWFwIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0p
KCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVyZXNEaXJ0eSIpCisgICAgXSwgU3RhbmRhcmRNYXRl
cmlhbC5wcm90b3R5cGUsICJ1c2VPYmplY3RTcGFjZU5vcm1hbE1hcCIsIHZvaWQgMCk7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAg
ICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
c2VyaWFsaXplIl0pKCJ1c2VQYXJhbGxheCIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90
b3R5cGUsICJfdXNlUGFyYWxsYXgiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSko
Il9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVy
aWFsLnByb3RvdHlwZSwgInVzZVBhcmFsbGF4Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
InVzZVBhcmFsbGF4T2NjbHVzaW9uIikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlw
ZSwgIl91c2VQYXJhbGxheE9jY2x1c2lvbiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0
eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGlydHkiKQorICAgIF0sIFN0YW5kYXJk
TWF0ZXJpYWwucHJvdG90eXBlLCAidXNlUGFyYWxsYXhPY2NsdXNpb24iLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJwYXJh
bGxheFNjYWxlQmlhcyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCJyb3VnaG5lc3MiKQor
ICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX3JvdWdobmVzcyIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1RleHR1cmVzRGly
dHkiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAicm91Z2huZXNzIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90
eXBlLCAiaW5kZXhPZlJlZnJhY3Rpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisg
ICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJpbnZlcnRSZWZyYWN0aW9uWSIsIHZv
aWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3Rv
dHlwZSwgImFscGhhQ3V0T2ZmIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoInVzZUxpZ2h0
bWFwQXNTaGFkb3dtYXAiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX3Vz
ZUxpZ2h0bWFwQXNTaGFkb3dtYXAiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSko
Il9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVy
aWFsLnByb3RvdHlwZSwgInVzZUxpZ2h0bWFwQXNTaGFkb3dtYXAiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNl
cmlhbGl6ZUFzRnJlc25lbFBhcmFtZXRlcnMiXSkoImRpZmZ1c2VGcmVzbmVsUGFyYW1ldGVycyIp
CisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJfZGlmZnVzZUZyZXNuZWxQYXJh
bWV0ZXJzIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1l
c2hlc0FzRnJlc25lbERpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwg
ImRpZmZ1c2VGcmVzbmVsUGFyYW1ldGVycyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNGcmVz
bmVsUGFyYW1ldGVycyJdKSgib3BhY2l0eUZyZXNuZWxQYXJhbWV0ZXJzIikKKyAgICBdLCBTdGFu
ZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9vcGFjaXR5RnJlc25lbFBhcmFtZXRlcnMiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNGcmVzbmVs
QW5kTWlzY0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIm9wYWNp
dHlGcmVzbmVsUGFyYW1ldGVycyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNGcmVzbmVsUGFy
YW1ldGVycyJdKSgicmVmbGVjdGlvbkZyZXNuZWxQYXJhbWV0ZXJzIikKKyAgICBdLCBTdGFuZGFy
ZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9yZWZsZWN0aW9uRnJlc25lbFBhcmFtZXRlcnMiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNGcmVzbmVs
RGlydHkiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAicmVmbGVjdGlvbkZy
ZXNuZWxQYXJhbWV0ZXJzIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc0ZyZXNuZWxQYXJhbWV0
ZXJzIl0pKCJyZWZyYWN0aW9uRnJlc25lbFBhcmFtZXRlcnMiKQorICAgIF0sIFN0YW5kYXJkTWF0
ZXJpYWwucHJvdG90eXBlLCAiX3JlZnJhY3Rpb25GcmVzbmVsUGFyYW1ldGVycyIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc0ZyZXNuZWxEaXJ0
eSIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJyZWZyYWN0aW9uRnJlc25l
bFBhcmFtZXRlcnMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzRnJlc25lbFBhcmFtZXRlcnMi
XSkoImVtaXNzaXZlRnJlc25lbFBhcmFtZXRlcnMiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwu
cHJvdG90eXBlLCAiX2VtaXNzaXZlRnJlc25lbFBhcmFtZXRlcnMiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4
cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNGcmVzbmVsRGlydHkiKQorICAg
IF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiZW1pc3NpdmVGcmVzbmVsUGFyYW1ldGVy
cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCJ1c2VSZWZsZWN0aW9uRnJlc25lbEZyb21T
cGVjdWxhciIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJfdXNlUmVmbGVj
dGlvbkZyZXNuZWxGcm9tU3BlY3VsYXIiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19k
ZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHki
XSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNGcmVzbmVsRGlydHkiKQorICAgIF0sIFN0YW5kYXJkTWF0
ZXJpYWwucHJvdG90eXBlLCAidXNlUmVmbGVjdGlvbkZyZXNuZWxGcm9tU3BlY3VsYXIiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgidXNlR2xvc3NpbmVzc0Zyb21TcGVjdWxhck1hcEFscGhh
IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl91c2VHbG9zc2luZXNzRnJv
bVNwZWN1bGFyTWFwQWxwaGEiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9t
YXJrQWxsU3ViTWVzaGVzQXNUZXh0dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFs
LnByb3RvdHlwZSwgInVzZUdsb3NzaW5lc3NGcm9tU3BlY3VsYXJNYXBBbHBoYSIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1sic2VyaWFsaXplIl0pKCJtYXhTaW11bHRhbmVvdXNMaWdodHMiKQorICAgIF0sIFN0YW5k
YXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX21heFNpbXVsdGFuZW91c0xpZ2h0cyIsIHZvaWQgMCk7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsK
KyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc0xpZ2h0c0RpcnR5
IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIm1heFNpbXVsdGFuZW91c0xp
Z2h0cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCJpbnZlcnROb3JtYWxNYXBYIikKKyAg
ICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgIl9pbnZlcnROb3JtYWxNYXBYIiwgdm9p
ZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJleHBhbmRUb1Byb3BlcnR5Il0pKCJfbWFya0FsbFN1Yk1lc2hlc0FzVGV4dHVy
ZXNEaXJ0eSIpCisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJpbnZlcnROb3Jt
YWxNYXBYIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoImludmVydE5vcm1hbE1hcFkiKQor
ICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAiX2ludmVydE5vcm1hbE1hcFkiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bImV4cGFuZFRvUHJvcGVydHkiXSkoIl9tYXJrQWxsU3ViTWVzaGVzQXNUZXh0
dXJlc0RpcnR5IikKKyAgICBdLCBTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgImludmVydE5v
cm1hbE1hcFkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgidHdvU2lkZWRMaWdodGluZyIp
CisgICAgXSwgU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICJfdHdvU2lkZWRMaWdodGluZyIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siZXhwYW5kVG9Qcm9wZXJ0eSJdKSgiX21hcmtBbGxTdWJNZXNoZXNBc1Rl
eHR1cmVzRGlydHkiKQorICAgIF0sIFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAidHdvU2lk
ZWRMaWdodGluZyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFy
ZE1hdGVyaWFsLnByb3RvdHlwZSwgInVzZUxvZ2FyaXRobWljRGVwdGgiLCBudWxsKTsKKyAgICBy
ZXR1cm4gU3RhbmRhcmRNYXRlcmlhbDsKK30oX3B1c2hNYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTBfX1siUHVzaE1hdGVyaWFsIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJC
QUJZTE9OLlN0YW5kYXJkTWF0ZXJpYWwiXSA9IFN0YW5kYXJkTWF0ZXJpYWw7Citfc2NlbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmUiXS5EZWZhdWx0TWF0ZXJpYWxGYWN0b3J5
ID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAgcmV0dXJuIG5ldyBTdGFuZGFyZE1hdGVyaWFsKCJk
ZWZhdWx0IG1hdGVyaWFsIiwgc2NlbmUpOworfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWF0ZXJpYWxzL3VuaWZvcm1CdWZmZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRlcmlhbHMvdW5pZm9ybUJ1ZmZlci50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogVW5pZm9ybUJ1ZmZlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJVbmlmb3JtQnVmZmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVbmlmb3JtQnVmZmVyOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICov
ICIuL01pc2MvbG9nZ2VyLnRzIik7CisKKy8qKgorICogVW5pZm9ybSBidWZmZXIgb2JqZWN0cy4K
KyAqCisgKiBIYW5kbGVzIGJsb2NrcyBvZiB1bmlmb3JtIG9uIHRoZSBHUFUuCisgKgorICogSWYg
V2ViR0wgMiBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIGNsYXNzIGZhbGxzIGJhY2sgb24gdHJhZGl0
aW9ubmFsIHNldFVuaWZvcm1YWFggY2FsbHMuCisgKgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24s
IHBsZWFzZSByZWZlciB0byA6CisgKiBodHRwczovL3d3dy5raHJvbm9zLm9yZy9vcGVuZ2wvd2lr
aS9Vbmlmb3JtX0J1ZmZlcl9PYmplY3QKKyAqLwordmFyIFVuaWZvcm1CdWZmZXIgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgbmV3
IFVuaWZvcm0gYnVmZmVyIG9iamVjdHMuCisgICAgICoKKyAgICAgKiBIYW5kbGVzIGJsb2NrcyBv
ZiB1bmlmb3JtIG9uIHRoZSBHUFUuCisgICAgICoKKyAgICAgKiBJZiBXZWJHTCAyIGlzIG5vdCBh
dmFpbGFibGUsIHRoaXMgY2xhc3MgZmFsbHMgYmFjayBvbiB0cmFkaXRpb25uYWwgc2V0VW5pZm9y
bVhYWCBjYWxscy4KKyAgICAgKgorICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ug
cmVmZXIgdG8gOgorICAgICAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsL3dp
a2kvVW5pZm9ybV9CdWZmZXJfT2JqZWN0CisgICAgICogQHBhcmFtIGVuZ2luZSBEZWZpbmUgdGhl
IGVuZ2luZSB0aGUgYnVmZmVyIGlzIGFzc29jaWF0ZWQgd2l0aAorICAgICAqIEBwYXJhbSBkYXRh
IERlZmluZSB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlIGJ1ZmZlcgorICAgICAqIEBwYXJhbSBk
eW5hbWljIERlZmluZSBpZiB0aGUgYnVmZmVyIGlzIHVwZGF0YWJsZQorICAgICAqLworICAgIGZ1
bmN0aW9uIFVuaWZvcm1CdWZmZXIoZW5naW5lLCBkYXRhLCBkeW5hbWljKSB7CisgICAgICAgIC8v
IE1hdHJpeCBjYWNoZQorICAgICAgICB0aGlzLl92YWx1ZUNhY2hlID0ge307CisgICAgICAgIHRo
aXMuX2VuZ2luZSA9IGVuZ2luZTsKKyAgICAgICAgdGhpcy5fbm9VQk8gPSAhZW5naW5lLnN1cHBv
cnRzVW5pZm9ybUJ1ZmZlcnM7CisgICAgICAgIHRoaXMuX2R5bmFtaWMgPSBkeW5hbWljOworICAg
ICAgICB0aGlzLl9kYXRhID0gZGF0YSB8fCBbXTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUxvY2F0
aW9ucyA9IHt9OworICAgICAgICB0aGlzLl91bmlmb3JtU2l6ZXMgPSB7fTsKKyAgICAgICAgdGhp
cy5fdW5pZm9ybUFycmF5U2l6ZXMgPSB7fTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUxvY2F0aW9u
UG9pbnRlciA9IDA7CisgICAgICAgIHRoaXMuX25lZWRTeW5jID0gZmFsc2U7CisgICAgICAgIGlm
ICh0aGlzLl9ub1VCTykgeworICAgICAgICAgICAgdGhpcy51cGRhdGVNYXRyaXgzeDMgPSB0aGlz
Ll91cGRhdGVNYXRyaXgzeDNGb3JFZmZlY3Q7CisgICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJp
eDJ4MiA9IHRoaXMuX3VwZGF0ZU1hdHJpeDJ4MkZvckVmZmVjdDsKKyAgICAgICAgICAgIHRoaXMu
dXBkYXRlRmxvYXQgPSB0aGlzLl91cGRhdGVGbG9hdEZvckVmZmVjdDsKKyAgICAgICAgICAgIHRo
aXMudXBkYXRlRmxvYXQyID0gdGhpcy5fdXBkYXRlRmxvYXQyRm9yRWZmZWN0OworICAgICAgICAg
ICAgdGhpcy51cGRhdGVGbG9hdDMgPSB0aGlzLl91cGRhdGVGbG9hdDNGb3JFZmZlY3Q7CisgICAg
ICAgICAgICB0aGlzLnVwZGF0ZUZsb2F0NCA9IHRoaXMuX3VwZGF0ZUZsb2F0NEZvckVmZmVjdDsK
KyAgICAgICAgICAgIHRoaXMudXBkYXRlRmxvYXRBcnJheSA9IHRoaXMuX3VwZGF0ZUZsb2F0QXJy
YXlGb3JFZmZlY3Q7CisgICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpeCA9IHRoaXMuX3VwZGF0
ZU1hdHJpeEZvckVmZmVjdDsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cmljZXMgPSB0aGlz
Ll91cGRhdGVNYXRyaWNlc0ZvckVmZmVjdDsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlVmVjdG9y
MyA9IHRoaXMuX3VwZGF0ZVZlY3RvcjNGb3JFZmZlY3Q7CisgICAgICAgICAgICB0aGlzLnVwZGF0
ZVZlY3RvcjQgPSB0aGlzLl91cGRhdGVWZWN0b3I0Rm9yRWZmZWN0OworICAgICAgICAgICAgdGhp
cy51cGRhdGVDb2xvcjMgPSB0aGlzLl91cGRhdGVDb2xvcjNGb3JFZmZlY3Q7CisgICAgICAgICAg
ICB0aGlzLnVwZGF0ZUNvbG9yNCA9IHRoaXMuX3VwZGF0ZUNvbG9yNEZvckVmZmVjdDsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5fdW5pZm9ybUJ1
ZmZlcnMucHVzaCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cml4M3gzID0gdGhp
cy5fdXBkYXRlTWF0cml4M3gzRm9yVW5pZm9ybTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0
cml4MngyID0gdGhpcy5fdXBkYXRlTWF0cml4MngyRm9yVW5pZm9ybTsKKyAgICAgICAgICAgIHRo
aXMudXBkYXRlRmxvYXQgPSB0aGlzLl91cGRhdGVGbG9hdEZvclVuaWZvcm07CisgICAgICAgICAg
ICB0aGlzLnVwZGF0ZUZsb2F0MiA9IHRoaXMuX3VwZGF0ZUZsb2F0MkZvclVuaWZvcm07CisgICAg
ICAgICAgICB0aGlzLnVwZGF0ZUZsb2F0MyA9IHRoaXMuX3VwZGF0ZUZsb2F0M0ZvclVuaWZvcm07
CisgICAgICAgICAgICB0aGlzLnVwZGF0ZUZsb2F0NCA9IHRoaXMuX3VwZGF0ZUZsb2F0NEZvclVu
aWZvcm07CisgICAgICAgICAgICB0aGlzLnVwZGF0ZUZsb2F0QXJyYXkgPSB0aGlzLl91cGRhdGVG
bG9hdEFycmF5Rm9yVW5pZm9ybTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cml4ID0gdGhp
cy5fdXBkYXRlTWF0cml4Rm9yVW5pZm9ybTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cmlj
ZXMgPSB0aGlzLl91cGRhdGVNYXRyaWNlc0ZvclVuaWZvcm07CisgICAgICAgICAgICB0aGlzLnVw
ZGF0ZVZlY3RvcjMgPSB0aGlzLl91cGRhdGVWZWN0b3IzRm9yVW5pZm9ybTsKKyAgICAgICAgICAg
IHRoaXMudXBkYXRlVmVjdG9yNCA9IHRoaXMuX3VwZGF0ZVZlY3RvcjRGb3JVbmlmb3JtOworICAg
ICAgICAgICAgdGhpcy51cGRhdGVDb2xvcjMgPSB0aGlzLl91cGRhdGVDb2xvcjNGb3JVbmlmb3Jt
OworICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvcjQgPSB0aGlzLl91cGRhdGVDb2xvcjRGb3JV
bmlmb3JtOworICAgICAgICB9CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbmlm
b3JtQnVmZmVyLnByb3RvdHlwZSwgInVzZVVibyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEluZGljYXRlcyBpZiB0aGUgYnVmZmVyIGlzIHVzaW5nIHRoZSBXZWJHTDIgVUJPIGltcGxlbWVu
dGF0aW9uLAorICAgICAgICAgKiBvciBqdXN0IGZhbGxpbmcgYmFjayBvbiBzZXRVbmlmb3JtWFhY
IGNhbGxzLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gIXRoaXMuX25vVUJPOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUsICJpc1N5bmMiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIFdlYkdMIHVuZGVybHlpbmcgdW5p
Zm9ybSBidWZmZXIgaXMgaW4gc3luYworICAgICAgICAgKiB3aXRoIHRoZSBqYXZhc2NyaXB0IGNh
Y2hlIGRhdGEuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiAhdGhpcy5fbmVlZFN5bmM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8q
KgorICAgICAqIEluZGljYXRlcyBpZiB0aGUgV2ViR0wgdW5kZXJseWluZyB1bmlmb3JtIGJ1ZmZl
ciBpcyBkeW5hbWljLgorICAgICAqIEFsc28sIGEgZHluYW1pYyBVbmlmb3JtQnVmZmVyIHdpbGwg
ZGlzYWJsZSBjYWNoZSB2ZXJpZmljYXRpb24gYW5kIGFsd2F5cworICAgICAqIHVwZGF0ZSB0aGUg
dW5kZXJseWluZyBXZWJHTCB1bmlmb3JtIGJ1ZmZlciB0byB0aGUgR1BVLgorICAgICAqIEByZXR1
cm5zIGlmIER5bmFtaWMsIG90aGVyd2lzZSBmYWxzZQorICAgICAqLworICAgIFVuaWZvcm1CdWZm
ZXIucHJvdG90eXBlLmlzRHluYW1pYyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2R5bmFtaWMgIT09IHVuZGVmaW5lZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoZSBk
YXRhIGNhY2hlIG9uIEpTIHNpZGUuCisgICAgICogQHJldHVybnMgdGhlIHVuZGVybHlpbmcgZGF0
YSBhcyBhIGZsb2F0IGFycmF5CisgICAgICovCisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUu
Z2V0RGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlckRhdGE7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGUgdW5kZXJseWluZyBXZWJHTCBVbmlmb3JtIGJ1
ZmZlci4KKyAgICAgKiBAcmV0dXJucyB0aGUgd2ViZ2wgYnVmZmVyCisgICAgICovCisgICAgVW5p
Zm9ybUJ1ZmZlci5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fYnVmZmVyOworICAgIH07CisgICAgLyoqCisgICAgICogc3RkMTQwIGxheW91
dCBzcGVjaWZpZXMgaG93IHRvIGFsaWduIGRhdGEgd2l0aGluIGFuIFVCTyBzdHJ1Y3R1cmUuCisg
ICAgICogU2VlIGh0dHBzOi8va2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlbkdML3NwZWNzL2dsL2ds
c3BlYzQ1LmNvcmUucGRmI3BhZ2U9MTU5CisgICAgICogZm9yIHNwZWNzLgorICAgICAqLworICAg
IFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl9maWxsQWxpZ25tZW50ID0gZnVuY3Rpb24gKHNpemUp
IHsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGhhcyBiZWVuIHNpbXBsaWZpZWQgYmVjYXVzZSB3ZSBv
bmx5IHVzZSBmbG9hdHMsIHZlY3RvcnMgb2YgMSwgMiwgMywgNCBjb21wb25lbnRzCisgICAgICAg
IC8vIGFuZCA0eDQgbWF0cmljZXMKKyAgICAgICAgLy8gVE9ETyA6IGNoYW5nZSBpZiBvdGhlciB0
eXBlcyBhcmUgdXNlZAorICAgICAgICB2YXIgYWxpZ25tZW50OworICAgICAgICBpZiAoc2l6ZSA8
PSAyKSB7CisgICAgICAgICAgICBhbGlnbm1lbnQgPSBzaXplOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgYWxpZ25tZW50ID0gNDsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoKHRoaXMuX3VuaWZvcm1Mb2NhdGlvblBvaW50ZXIgJSBhbGlnbm1lbnQpICE9PSAwKSB7Cisg
ICAgICAgICAgICB2YXIgb2xkUG9pbnRlciA9IHRoaXMuX3VuaWZvcm1Mb2NhdGlvblBvaW50ZXI7
CisgICAgICAgICAgICB0aGlzLl91bmlmb3JtTG9jYXRpb25Qb2ludGVyICs9IGFsaWdubWVudCAt
ICh0aGlzLl91bmlmb3JtTG9jYXRpb25Qb2ludGVyICUgYWxpZ25tZW50KTsKKyAgICAgICAgICAg
IHZhciBkaWZmID0gdGhpcy5fdW5pZm9ybUxvY2F0aW9uUG9pbnRlciAtIG9sZFBvaW50ZXI7Cisg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmY7IGkrKykgeworICAgICAgICAgICAg
ICAgIHRoaXMuX2RhdGEucHVzaCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogQWRkcyBhbiB1bmlmb3JtIGluIHRoZSBidWZmZXIuCisgICAgICog
V2FybmluZyA6IHRoZSBzdWJzZXF1ZW50cyBjYWxscyBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUg
aW4gdGhlIHNhbWUgb3JkZXIgYXMgZGVjbGFyZWQgaW4gdGhlIHNoYWRlcgorICAgICAqIGZvciB0
aGUgbGF5b3V0IHRvIGJlIGNvcnJlY3QgIQorICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhl
IHVuaWZvcm0sIGFzIHVzZWQgaW4gdGhlIHVuaWZvcm0gYmxvY2sgaW4gdGhlIHNoYWRlci4KKyAg
ICAgKiBAcGFyYW0gc2l6ZSBEYXRhIHNpemUsIG9yIGRhdGEgZGlyZWN0bHkuCisgICAgICogQHBh
cmFtIGFycmF5U2l6ZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheSwgMCBpZiBu
b3QgYW4gYXJyYXkuCisgICAgICovCisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuYWRkVW5p
Zm9ybSA9IGZ1bmN0aW9uIChuYW1lLCBzaXplLCBhcnJheVNpemUpIHsKKyAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PT0gdm9pZCAwKSB7IGFycmF5U2l6ZSA9IDA7IH0KKyAgICAgICAgaWYgKHRoaXMu
X25vVUJPKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX3VuaWZvcm1Mb2NhdGlvbnNbbmFtZV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAg
Ly8gQWxyZWFkeSBleGlzdGluZyB1bmlmb3JtCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgb3JkZXIg
b2YgdGhlIHNoYWRlciBsYXlvdXQgIQorICAgICAgICAvLyBzaXplIGNhbiBiZSB0aGUgc2l6ZSBv
ZiB0aGUgdW5pZm9ybSwgb3IgZGF0YSBkaXJlY3RseQorICAgICAgICB2YXIgZGF0YTsKKyAgICAg
ICAgLy8gc3RkMTQwIEZUVy4uLgorICAgICAgICBpZiAoYXJyYXlTaXplID4gMCkgeworICAgICAg
ICAgICAgaWYgKHNpemUgaW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgICAgIHRocm93
ICJhZGRVbmlmb3JtIHNob3VsZCBub3QgYmUgdXNlIHdpdGggQXJyYXkgaW4gVUJPOiAiICsgbmFt
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3VuaWZvcm1BcnJheVNpemVzW25h
bWVdID0geyBzdHJpZGVTaXplOiBzaXplLCBhcnJheVNpemU6IGFycmF5U2l6ZSB9OworICAgICAg
ICAgICAgaWYgKHNpemUgPT0gMTYpIHsKKyAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSAqIGFy
cmF5U2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHZhciBwZXJFbGVtZW50UGFkZGluZyA9IDQgLSBzaXplOworICAgICAgICAgICAgICAgIHZh
ciB0b3RhbFBhZGRpbmcgPSBwZXJFbGVtZW50UGFkZGluZyAqIGFycmF5U2l6ZTsKKyAgICAgICAg
ICAgICAgICBzaXplID0gc2l6ZSAqIGFycmF5U2l6ZSArIHRvdGFsUGFkZGluZzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGRhdGEgPSBbXTsKKyAgICAgICAgICAgIC8vIEZpbGwgd2l0aCB6
ZXJvcworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBkYXRhLnB1c2goMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoc2l6ZSBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAg
ICAgICAgICAgICAgZGF0YSA9IHNpemU7CisgICAgICAgICAgICAgICAgc2l6ZSA9IGRhdGEubGVu
Z3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
c2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAgZGF0YSA9IFtdOworICAgICAgICAgICAgICAg
IC8vIEZpbGwgd2l0aCB6ZXJvcworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaCgwKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9maWxsQWxpZ25tZW50
KHNpemUpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VuaWZvcm1TaXplc1tuYW1lXSA9IHNp
emU7CisgICAgICAgIHRoaXMuX3VuaWZvcm1Mb2NhdGlvbnNbbmFtZV0gPSB0aGlzLl91bmlmb3Jt
TG9jYXRpb25Qb2ludGVyOworICAgICAgICB0aGlzLl91bmlmb3JtTG9jYXRpb25Qb2ludGVyICs9
IHNpemU7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
ICAgICB0aGlzLl9kYXRhLnB1c2goZGF0YVtpXSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
bmVlZFN5bmMgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIE1hdHJpeCA0
eDQgdG8gdGhlIHVuaWZvcm0gYnVmZmVyLgorICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhl
IHVuaWZvcm0sIGFzIHVzZWQgaW4gdGhlIHVuaWZvcm0gYmxvY2sgaW4gdGhlIHNoYWRlci4KKyAg
ICAgKiBAcGFyYW0gbWF0IEEgNHg0IG1hdHJpeC4KKyAgICAgKi8KKyAgICBVbmlmb3JtQnVmZmVy
LnByb3RvdHlwZS5hZGRNYXRyaXggPSBmdW5jdGlvbiAobmFtZSwgbWF0KSB7CisgICAgICAgIHRo
aXMuYWRkVW5pZm9ybShuYW1lLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtYXQudG9BcnJh
eSgpKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgdmVjMiB0byB0aGUgdW5pZm9y
bSBidWZmZXIuCisgICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgdW5pZm9ybSwgYXMgdXNl
ZCBpbiB0aGUgdW5pZm9ybSBibG9jayBpbiB0aGUgc2hhZGVyLgorICAgICAqIEBwYXJhbSB4IERl
ZmluZSB0aGUgeCBjb21wb25lbnQgdmFsdWUgb2YgdGhlIHZlYzIKKyAgICAgKiBAcGFyYW0geSBE
ZWZpbmUgdGhlIHkgY29tcG9uZW50IHZhbHVlIG9mIHRoZSB2ZWMyCisgICAgICovCisgICAgVW5p
Zm9ybUJ1ZmZlci5wcm90b3R5cGUuYWRkRmxvYXQyID0gZnVuY3Rpb24gKG5hbWUsIHgsIHkpIHsK
KyAgICAgICAgdmFyIHRlbXAgPSBbeCwgeV07CisgICAgICAgIHRoaXMuYWRkVW5pZm9ybShuYW1l
LCB0ZW1wKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgYSB2ZWMzIHRvIHRoZSB1bmlm
b3JtIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSB1bmlmb3JtLCBhcyB1
c2VkIGluIHRoZSB1bmlmb3JtIGJsb2NrIGluIHRoZSBzaGFkZXIuCisgICAgICogQHBhcmFtIHgg
RGVmaW5lIHRoZSB4IGNvbXBvbmVudCB2YWx1ZSBvZiB0aGUgdmVjMworICAgICAqIEBwYXJhbSB5
IERlZmluZSB0aGUgeSBjb21wb25lbnQgdmFsdWUgb2YgdGhlIHZlYzMKKyAgICAgKiBAcGFyYW0g
eiBEZWZpbmUgdGhlIHogY29tcG9uZW50IHZhbHVlIG9mIHRoZSB2ZWMzCisgICAgICovCisgICAg
VW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuYWRkRmxvYXQzID0gZnVuY3Rpb24gKG5hbWUsIHgsIHks
IHopIHsKKyAgICAgICAgdmFyIHRlbXAgPSBbeCwgeSwgel07CisgICAgICAgIHRoaXMuYWRkVW5p
Zm9ybShuYW1lLCB0ZW1wKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgYSB2ZWMzIHRv
IHRoZSB1bmlmb3JtIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSB1bmlm
b3JtLCBhcyB1c2VkIGluIHRoZSB1bmlmb3JtIGJsb2NrIGluIHRoZSBzaGFkZXIuCisgICAgICog
QHBhcmFtIGNvbG9yIERlZmluZSB0aGUgdmVjMyBmcm9tIGEgQ29sb3IKKyAgICAgKi8KKyAgICBV
bmlmb3JtQnVmZmVyLnByb3RvdHlwZS5hZGRDb2xvcjMgPSBmdW5jdGlvbiAobmFtZSwgY29sb3Ip
IHsKKyAgICAgICAgdmFyIHRlbXAgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgY29sb3IudG9BcnJh
eSh0ZW1wKTsKKyAgICAgICAgdGhpcy5hZGRVbmlmb3JtKG5hbWUsIHRlbXApOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQWRkcyBhIHZlYzQgdG8gdGhlIHVuaWZvcm0gYnVmZmVyLgorICAgICAq
IEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHVuaWZvcm0sIGFzIHVzZWQgaW4gdGhlIHVuaWZvcm0g
YmxvY2sgaW4gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0gY29sb3IgRGVmaW5lIHRoZSByZ2Ig
Y29tcG9uZW50cyBmcm9tIGEgQ29sb3IKKyAgICAgKiBAcGFyYW0gYWxwaGEgRGVmaW5lIHRoZSBh
IGNvbXBvbmVudCBvZiB0aGUgdmVjNAorICAgICAqLworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90
eXBlLmFkZENvbG9yNCA9IGZ1bmN0aW9uIChuYW1lLCBjb2xvciwgYWxwaGEpIHsKKyAgICAgICAg
dmFyIHRlbXAgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgY29sb3IudG9BcnJheSh0ZW1wKTsKKyAg
ICAgICAgdGVtcC5wdXNoKGFscGhhKTsKKyAgICAgICAgdGhpcy5hZGRVbmlmb3JtKG5hbWUsIHRl
bXApOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIHZlYzMgdG8gdGhlIHVuaWZvcm0g
YnVmZmVyLgorICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHVuaWZvcm0sIGFzIHVzZWQg
aW4gdGhlIHVuaWZvcm0gYmxvY2sgaW4gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0gdmVjdG9y
IERlZmluZSB0aGUgdmVjMyBjb21wb25lbnRzIGZyb20gYSBWZWN0b3IKKyAgICAgKi8KKyAgICBV
bmlmb3JtQnVmZmVyLnByb3RvdHlwZS5hZGRWZWN0b3IzID0gZnVuY3Rpb24gKG5hbWUsIHZlY3Rv
cikgeworICAgICAgICB2YXIgdGVtcCA9IG5ldyBBcnJheSgpOworICAgICAgICB2ZWN0b3IudG9B
cnJheSh0ZW1wKTsKKyAgICAgICAgdGhpcy5hZGRVbmlmb3JtKG5hbWUsIHRlbXApOworICAgIH07
CisgICAgLyoqCisgICAgICogQWRkcyBhIE1hdHJpeCAzeDMgdG8gdGhlIHVuaWZvcm0gYnVmZmVy
LgorICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHVuaWZvcm0sIGFzIHVzZWQgaW4gdGhl
IHVuaWZvcm0gYmxvY2sgaW4gdGhlIHNoYWRlci4KKyAgICAgKi8KKyAgICBVbmlmb3JtQnVmZmVy
LnByb3RvdHlwZS5hZGRNYXRyaXgzeDMgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICB0aGlz
LmFkZFVuaWZvcm0obmFtZSwgMTIpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIE1h
dHJpeCAyeDIgdG8gdGhlIHVuaWZvcm0gYnVmZmVyLgorICAgICAqIEBwYXJhbSBuYW1lIE5hbWUg
b2YgdGhlIHVuaWZvcm0sIGFzIHVzZWQgaW4gdGhlIHVuaWZvcm0gYmxvY2sgaW4gdGhlIHNoYWRl
ci4KKyAgICAgKi8KKyAgICBVbmlmb3JtQnVmZmVyLnByb3RvdHlwZS5hZGRNYXRyaXgyeDIgPSBm
dW5jdGlvbiAobmFtZSkgeworICAgICAgICB0aGlzLmFkZFVuaWZvcm0obmFtZSwgOCk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBFZmZlY3RpdmVseSBjcmVhdGVzIHRoZSBXZWJHTCBVbmlmb3Jt
IEJ1ZmZlciwgb25jZSBsYXlvdXQgaXMgY29tcGxldGVkIHdpdGggYGFkZFVuaWZvcm1gLgorICAg
ICAqLworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMuX25vVUJPKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikgeworICAgICAgICAgICAgcmV0dXJuOyAvLyBu
b3RoaW5nIHRvIGRvCisgICAgICAgIH0KKyAgICAgICAgLy8gU2VlIHNwZWMsIGFsaWdubWVudCBt
dXN0IGJlIGZpbGxlZCBhcyBhIHZlYzQKKyAgICAgICAgdGhpcy5fZmlsbEFsaWdubWVudCg0KTsK
KyAgICAgICAgdGhpcy5fYnVmZmVyRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5fZGF0YSk7
CisgICAgICAgIHRoaXMuX3JlYnVpbGQoKTsKKyAgICAgICAgdGhpcy5fbmVlZFN5bmMgPSB0cnVl
OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBVbmlmb3JtQnVmZmVyLnByb3RvdHlw
ZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX25vVUJPIHx8ICF0
aGlzLl9idWZmZXJEYXRhKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuX2R5bmFtaWMpIHsKKyAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IHRoaXMu
X2VuZ2luZS5jcmVhdGVEeW5hbWljVW5pZm9ybUJ1ZmZlcih0aGlzLl9idWZmZXJEYXRhKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IHRoaXMu
X2VuZ2luZS5jcmVhdGVVbmlmb3JtQnVmZmVyKHRoaXMuX2J1ZmZlckRhdGEpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBXZWJHTCBVbmlmb3JtIEJ1ZmZl
ciBvbiB0aGUgR1BVLgorICAgICAqIElmIHRoZSBgZHluYW1pY2AgZmxhZyBpcyBzZXQgdG8gdHJ1
ZSwgbm8gY2FjaGUgY29tcGFyaXNvbiBpcyBkb25lLgorICAgICAqIE90aGVyd2lzZSwgdGhlIGJ1
ZmZlciB3aWxsIGJlIHVwZGF0ZWQgb25seSBpZiB0aGUgY2FjaGUgZGlmZmVycy4KKyAgICAgKi8K
KyAgICBVbmlmb3JtQnVmZmVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICghdGhpcy5fYnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLmNyZWF0ZSgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fZHluYW1pYyAm
JiAhdGhpcy5fbmVlZFN5bmMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9lbmdpbmUudXBkYXRlVW5pZm9ybUJ1ZmZlcih0aGlzLl9idWZmZXIsIHRoaXMu
X2J1ZmZlckRhdGEpOworICAgICAgICB0aGlzLl9uZWVkU3luYyA9IGZhbHNlOworICAgIH07Cisg
ICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgdmFsdWUgb2YgYW4gdW5pZm9ybS4gVGhlIGB1cGRh
dGVgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBhZnRlcndhcmRzIHRvIG1ha2UgaXQgZWZmZWN0aXZl
IGluIHRoZSBHUFUuCisgICAgICogQHBhcmFtIHVuaWZvcm1OYW1lIERlZmluZSB0aGUgbmFtZSBv
ZiB0aGUgdW5pZm9ybSwgYXMgdXNlZCBpbiB0aGUgdW5pZm9ybSBibG9jayBpbiB0aGUgc2hhZGVy
LgorICAgICAqIEBwYXJhbSBkYXRhIERlZmluZSB0aGUgZmxhdHRlbmVkIGRhdGEKKyAgICAgKiBA
cGFyYW0gc2l6ZSBEZWZpbmUgdGhlIHNpemUgb2YgdGhlIGRhdGEuCisgICAgICovCisgICAgVW5p
Zm9ybUJ1ZmZlci5wcm90b3R5cGUudXBkYXRlVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtTmFt
ZSwgZGF0YSwgc2l6ZSkgeworICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl91bmlmb3JtTG9j
YXRpb25zW3VuaWZvcm1OYW1lXTsKKyAgICAgICAgaWYgKGxvY2F0aW9uID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBD
YW5ub3QgYWRkIGFuIHVuaWZvcm0gaWYgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IGNyZWF0ZWQKKyAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
TG9nZ2VyIl0uRXJyb3IoIkNhbm5vdCBhZGQgYW4gdW5pZm9ybSBhZnRlciBVQk8gaGFzIGJlZW4g
Y3JlYXRlZC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLmFkZFVuaWZvcm0odW5pZm9ybU5hbWUsIHNpemUpOworICAgICAgICAgICAg
bG9jYXRpb24gPSB0aGlzLl91bmlmb3JtTG9jYXRpb25zW3VuaWZvcm1OYW1lXTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXRoaXMuX2J1ZmZlcikgeworICAgICAgICAgICAgdGhpcy5jcmVhdGUo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2R5bmFtaWMpIHsKKyAgICAgICAgICAg
IC8vIENhY2hlIGZvciBzdGF0aWMgdW5pZm9ybSBidWZmZXJzCisgICAgICAgICAgICB2YXIgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PT0gMTYgfHwgdGhpcy5fYnVmZmVyRGF0YVts
b2NhdGlvbiArIGldICE9PSBkYXRhW2ldKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXJEYXRhW2xvY2F0aW9uICsg
aV0gPSBkYXRhW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX25lZWRTeW5jID0gdGhpcy5fbmVlZFN5bmMgfHwgY2hhbmdlZDsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vIGNhY2hlIGZvciBkeW5hbWljCisg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAg
ICAgIHRoaXMuX2J1ZmZlckRhdGFbbG9jYXRpb24gKyBpXSA9IGRhdGFbaV07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIHZhbHVl
IG9mIGFuIHVuaWZvcm0uIFRoZSBgdXBkYXRlYCBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYWZ0ZXJ3
YXJkcyB0byBtYWtlIGl0IGVmZmVjdGl2ZSBpbiB0aGUgR1BVLgorICAgICAqIEBwYXJhbSB1bmlm
b3JtTmFtZSBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIHVuaWZvcm0sIGFzIHVzZWQgaW4gdGhlIHVu
aWZvcm0gYmxvY2sgaW4gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0gZGF0YSBEZWZpbmUgdGhl
IGZsYXR0ZW5lZCBkYXRhCisgICAgICogQHBhcmFtIHNpemUgRGVmaW5lIHRoZSBzaXplIG9mIHRo
ZSBkYXRhLgorICAgICAqLworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLnVwZGF0ZVVuaWZv
cm1BcnJheSA9IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgZGF0YSwgc2l6ZSkgeworICAgICAgICB2
YXIgbG9jYXRpb24gPSB0aGlzLl91bmlmb3JtTG9jYXRpb25zW3VuaWZvcm1OYW1lXTsKKyAgICAg
ICAgaWYgKGxvY2F0aW9uID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMb2dnZXIiXS5FcnJvcigiQ2Fubm90IGFk
ZCBhbiB1bmlmb3JtIEFycmF5IGR5bmFtaWNhbGx5LiBQbGVhc2UsIGFkZCBpdCB1c2luZyBhZGRV
bmlmb3JtLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICgh
dGhpcy5fYnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLmNyZWF0ZSgpOworICAgICAgICB9Cisg
ICAgICAgIHZhciBhcnJheVNpemVzID0gdGhpcy5fdW5pZm9ybUFycmF5U2l6ZXNbdW5pZm9ybU5h
bWVdOworICAgICAgICBpZiAoIXRoaXMuX2R5bmFtaWMpIHsKKyAgICAgICAgICAgIC8vIENhY2hl
IGZvciBzdGF0aWMgdW5pZm9ybSBidWZmZXJzCisgICAgICAgICAgICB2YXIgY2hhbmdlZCA9IGZh
bHNlOworICAgICAgICAgICAgdmFyIGNvdW50VG9Gb3VyID0gMDsKKyAgICAgICAgICAgIHZhciBi
YXNlU3RyaWRlID0gMDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlckRhdGFbbG9jYXRpb24gKyBiYXNl
U3RyaWRlICogNCArIGNvdW50VG9Gb3VyXSAhPT0gZGF0YVtpXSkgeworICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyRGF0
YVtsb2NhdGlvbiArIGJhc2VTdHJpZGUgKiA0ICsgY291bnRUb0ZvdXJdID0gZGF0YVtpXTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY291bnRUb0ZvdXIrKzsKKyAgICAgICAg
ICAgICAgICBpZiAoY291bnRUb0ZvdXIgPT09IGFycmF5U2l6ZXMuc3RyaWRlU2l6ZSkgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKDsgY291bnRUb0ZvdXIgPCA0OyBjb3VudFRvRm91cisrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXJEYXRhW2xvY2F0aW9uICsgYmFz
ZVN0cmlkZSAqIDQgKyBjb3VudFRvRm91cl0gPSAwOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGNvdW50VG9Gb3VyID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
YmFzZVN0cmlkZSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX25lZWRTeW5jID0gdGhpcy5fbmVlZFN5bmMgfHwgY2hhbmdlZDsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vIGNhY2hlIGZvciBkeW5hbWljCisg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAg
ICAgIHRoaXMuX2J1ZmZlckRhdGFbbG9jYXRpb24gKyBpXSA9IGRhdGFbaV07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl9jYWNo
ZU1hdHJpeCA9IGZ1bmN0aW9uIChuYW1lLCBtYXRyaXgpIHsKKyAgICAgICAgdmFyIGNhY2hlID0g
dGhpcy5fdmFsdWVDYWNoZVtuYW1lXTsKKyAgICAgICAgdmFyIGZsYWcgPSBtYXRyaXgudXBkYXRl
RmxhZzsKKyAgICAgICAgaWYgKGNhY2hlICE9PSB1bmRlZmluZWQgJiYgY2FjaGUgPT09IGZsYWcp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl92
YWx1ZUNhY2hlW25hbWVdID0gZmxhZzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAg
ICAvLyBVcGRhdGUgbWV0aG9kcworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl91cGRhdGVN
YXRyaXgzeDNGb3JVbmlmb3JtID0gZnVuY3Rpb24gKG5hbWUsIG1hdHJpeCkgeworICAgICAgICAv
LyBUbyBtYXRjaCBzdGQxNDAsIG1hdHJpeCBtdXN0IGJlIHJlYWxpZ25lZAorICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVt
cEJ1ZmZlcltpICogNF0gPSBtYXRyaXhbaSAqIDNdOworICAgICAgICAgICAgVW5pZm9ybUJ1ZmZl
ci5fdGVtcEJ1ZmZlcltpICogNCArIDFdID0gbWF0cml4W2kgKiAzICsgMV07CisgICAgICAgICAg
ICBVbmlmb3JtQnVmZmVyLl90ZW1wQnVmZmVyW2kgKiA0ICsgMl0gPSBtYXRyaXhbaSAqIDMgKyAy
XTsKKyAgICAgICAgICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXJbaSAqIDQgKyAzXSA9IDAu
MDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnVwZGF0ZVVuaWZvcm0obmFtZSwgVW5pZm9ybUJ1
ZmZlci5fdGVtcEJ1ZmZlciwgMTIpOworICAgIH07CisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5
cGUuX3VwZGF0ZU1hdHJpeDN4M0ZvckVmZmVjdCA9IGZ1bmN0aW9uIChuYW1lLCBtYXRyaXgpIHsK
KyAgICAgICAgdGhpcy5fY3VycmVudEVmZmVjdC5zZXRNYXRyaXgzeDMobmFtZSwgbWF0cml4KTsK
KyAgICB9OworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl91cGRhdGVNYXRyaXgyeDJGb3JF
ZmZlY3QgPSBmdW5jdGlvbiAobmFtZSwgbWF0cml4KSB7CisgICAgICAgIHRoaXMuX2N1cnJlbnRF
ZmZlY3Quc2V0TWF0cml4MngyKG5hbWUsIG1hdHJpeCk7CisgICAgfTsKKyAgICBVbmlmb3JtQnVm
ZmVyLnByb3RvdHlwZS5fdXBkYXRlTWF0cml4MngyRm9yVW5pZm9ybSA9IGZ1bmN0aW9uIChuYW1l
LCBtYXRyaXgpIHsKKyAgICAgICAgLy8gVG8gbWF0Y2ggc3RkMTQwLCBtYXRyaXggbXVzdCBiZSBy
ZWFsaWduZWQKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAg
ICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXJbaSAqIDRdID0gbWF0cml4W2kgKiAyXTsKKyAg
ICAgICAgICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXJbaSAqIDQgKyAxXSA9IG1hdHJpeFtp
ICogMiArIDFdOworICAgICAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlcltpICogNCAr
IDJdID0gMC4wOworICAgICAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlcltpICogNCAr
IDNdID0gMC4wOworICAgICAgICB9CisgICAgICAgIHRoaXMudXBkYXRlVW5pZm9ybShuYW1lLCBV
bmlmb3JtQnVmZmVyLl90ZW1wQnVmZmVyLCA4KTsKKyAgICB9OworICAgIFVuaWZvcm1CdWZmZXIu
cHJvdG90eXBlLl91cGRhdGVGbG9hdEZvckVmZmVjdCA9IGZ1bmN0aW9uIChuYW1lLCB4KSB7Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnRFZmZlY3Quc2V0RmxvYXQobmFtZSwgeCk7CisgICAgfTsKKyAg
ICBVbmlmb3JtQnVmZmVyLnByb3RvdHlwZS5fdXBkYXRlRmxvYXRGb3JVbmlmb3JtID0gZnVuY3Rp
b24gKG5hbWUsIHgpIHsKKyAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlclswXSA9IHg7
CisgICAgICAgIHRoaXMudXBkYXRlVW5pZm9ybShuYW1lLCBVbmlmb3JtQnVmZmVyLl90ZW1wQnVm
ZmVyLCAxKTsKKyAgICB9OworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl91cGRhdGVGbG9h
dDJGb3JFZmZlY3QgPSBmdW5jdGlvbiAobmFtZSwgeCwgeSwgc3VmZml4KSB7CisgICAgICAgIGlm
IChzdWZmaXggPT09IHZvaWQgMCkgeyBzdWZmaXggPSAiIjsgfQorICAgICAgICB0aGlzLl9jdXJy
ZW50RWZmZWN0LnNldEZsb2F0MihuYW1lICsgc3VmZml4LCB4LCB5KTsKKyAgICB9OworICAgIFVu
aWZvcm1CdWZmZXIucHJvdG90eXBlLl91cGRhdGVGbG9hdDJGb3JVbmlmb3JtID0gZnVuY3Rpb24g
KG5hbWUsIHgsIHkpIHsKKyAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlclswXSA9IHg7
CisgICAgICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXJbMV0gPSB5OworICAgICAgICB0aGlz
LnVwZGF0ZVVuaWZvcm0obmFtZSwgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlciwgMik7CisgICAg
fTsKKyAgICBVbmlmb3JtQnVmZmVyLnByb3RvdHlwZS5fdXBkYXRlRmxvYXQzRm9yRWZmZWN0ID0g
ZnVuY3Rpb24gKG5hbWUsIHgsIHksIHosIHN1ZmZpeCkgeworICAgICAgICBpZiAoc3VmZml4ID09
PSB2b2lkIDApIHsgc3VmZml4ID0gIiI7IH0KKyAgICAgICAgdGhpcy5fY3VycmVudEVmZmVjdC5z
ZXRGbG9hdDMobmFtZSArIHN1ZmZpeCwgeCwgeSwgeik7CisgICAgfTsKKyAgICBVbmlmb3JtQnVm
ZmVyLnByb3RvdHlwZS5fdXBkYXRlRmxvYXQzRm9yVW5pZm9ybSA9IGZ1bmN0aW9uIChuYW1lLCB4
LCB5LCB6KSB7CisgICAgICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXJbMF0gPSB4OworICAg
ICAgICBVbmlmb3JtQnVmZmVyLl90ZW1wQnVmZmVyWzFdID0geTsKKyAgICAgICAgVW5pZm9ybUJ1
ZmZlci5fdGVtcEJ1ZmZlclsyXSA9IHo7CisgICAgICAgIHRoaXMudXBkYXRlVW5pZm9ybShuYW1l
LCBVbmlmb3JtQnVmZmVyLl90ZW1wQnVmZmVyLCAzKTsKKyAgICB9OworICAgIFVuaWZvcm1CdWZm
ZXIucHJvdG90eXBlLl91cGRhdGVGbG9hdDRGb3JFZmZlY3QgPSBmdW5jdGlvbiAobmFtZSwgeCwg
eSwgeiwgdywgc3VmZml4KSB7CisgICAgICAgIGlmIChzdWZmaXggPT09IHZvaWQgMCkgeyBzdWZm
aXggPSAiIjsgfQorICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0LnNldEZsb2F0NChuYW1lICsg
c3VmZml4LCB4LCB5LCB6LCB3KTsKKyAgICB9OworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBl
Ll91cGRhdGVGbG9hdDRGb3JVbmlmb3JtID0gZnVuY3Rpb24gKG5hbWUsIHgsIHksIHosIHcpIHsK
KyAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlclswXSA9IHg7CisgICAgICAgIFVuaWZv
cm1CdWZmZXIuX3RlbXBCdWZmZXJbMV0gPSB5OworICAgICAgICBVbmlmb3JtQnVmZmVyLl90ZW1w
QnVmZmVyWzJdID0gejsKKyAgICAgICAgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlclszXSA9IHc7
CisgICAgICAgIHRoaXMudXBkYXRlVW5pZm9ybShuYW1lLCBVbmlmb3JtQnVmZmVyLl90ZW1wQnVm
ZmVyLCA0KTsKKyAgICB9OworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl91cGRhdGVGbG9h
dEFycmF5Rm9yRWZmZWN0ID0gZnVuY3Rpb24gKG5hbWUsIGFycmF5KSB7CisgICAgICAgIHRoaXMu
X2N1cnJlbnRFZmZlY3Quc2V0RmxvYXRBcnJheShuYW1lLCBhcnJheSk7CisgICAgfTsKKyAgICBV
bmlmb3JtQnVmZmVyLnByb3RvdHlwZS5fdXBkYXRlRmxvYXRBcnJheUZvclVuaWZvcm0gPSBmdW5j
dGlvbiAobmFtZSwgYXJyYXkpIHsKKyAgICAgICAgdGhpcy51cGRhdGVVbmlmb3JtQXJyYXkobmFt
ZSwgYXJyYXksIGFycmF5Lmxlbmd0aCk7CisgICAgfTsKKyAgICBVbmlmb3JtQnVmZmVyLnByb3Rv
dHlwZS5fdXBkYXRlTWF0cml4Rm9yRWZmZWN0ID0gZnVuY3Rpb24gKG5hbWUsIG1hdCkgeworICAg
ICAgICB0aGlzLl9jdXJyZW50RWZmZWN0LnNldE1hdHJpeChuYW1lLCBtYXQpOworICAgIH07Cisg
ICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuX3VwZGF0ZU1hdHJpeEZvclVuaWZvcm0gPSBmdW5j
dGlvbiAobmFtZSwgbWF0KSB7CisgICAgICAgIGlmICh0aGlzLl9jYWNoZU1hdHJpeChuYW1lLCBt
YXQpKSB7CisgICAgICAgICAgICB0aGlzLnVwZGF0ZVVuaWZvcm0obmFtZSwgbWF0LnRvQXJyYXko
KSwgMTYpOworICAgICAgICB9CisgICAgfTsKKyAgICBVbmlmb3JtQnVmZmVyLnByb3RvdHlwZS5f
dXBkYXRlTWF0cmljZXNGb3JFZmZlY3QgPSBmdW5jdGlvbiAobmFtZSwgbWF0KSB7CisgICAgICAg
IHRoaXMuX2N1cnJlbnRFZmZlY3Quc2V0TWF0cmljZXMobmFtZSwgbWF0KTsKKyAgICB9OworICAg
IFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLl91cGRhdGVNYXRyaWNlc0ZvclVuaWZvcm0gPSBmdW5j
dGlvbiAobmFtZSwgbWF0KSB7CisgICAgICAgIHRoaXMudXBkYXRlVW5pZm9ybShuYW1lLCBtYXQs
IG1hdC5sZW5ndGgpOworICAgIH07CisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuX3VwZGF0
ZVZlY3RvcjNGb3JFZmZlY3QgPSBmdW5jdGlvbiAobmFtZSwgdmVjdG9yKSB7CisgICAgICAgIHRo
aXMuX2N1cnJlbnRFZmZlY3Quc2V0VmVjdG9yMyhuYW1lLCB2ZWN0b3IpOworICAgIH07CisgICAg
VW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuX3VwZGF0ZVZlY3RvcjNGb3JVbmlmb3JtID0gZnVuY3Rp
b24gKG5hbWUsIHZlY3RvcikgeworICAgICAgICB2ZWN0b3IudG9BcnJheShVbmlmb3JtQnVmZmVy
Ll90ZW1wQnVmZmVyKTsKKyAgICAgICAgdGhpcy51cGRhdGVVbmlmb3JtKG5hbWUsIFVuaWZvcm1C
dWZmZXIuX3RlbXBCdWZmZXIsIDMpOworICAgIH07CisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5
cGUuX3VwZGF0ZVZlY3RvcjRGb3JFZmZlY3QgPSBmdW5jdGlvbiAobmFtZSwgdmVjdG9yKSB7Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnRFZmZlY3Quc2V0VmVjdG9yNChuYW1lLCB2ZWN0b3IpOworICAg
IH07CisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuX3VwZGF0ZVZlY3RvcjRGb3JVbmlmb3Jt
ID0gZnVuY3Rpb24gKG5hbWUsIHZlY3RvcikgeworICAgICAgICB2ZWN0b3IudG9BcnJheShVbmlm
b3JtQnVmZmVyLl90ZW1wQnVmZmVyKTsKKyAgICAgICAgdGhpcy51cGRhdGVVbmlmb3JtKG5hbWUs
IFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXIsIDQpOworICAgIH07CisgICAgVW5pZm9ybUJ1ZmZl
ci5wcm90b3R5cGUuX3VwZGF0ZUNvbG9yM0ZvckVmZmVjdCA9IGZ1bmN0aW9uIChuYW1lLCBjb2xv
ciwgc3VmZml4KSB7CisgICAgICAgIGlmIChzdWZmaXggPT09IHZvaWQgMCkgeyBzdWZmaXggPSAi
IjsgfQorICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0LnNldENvbG9yMyhuYW1lICsgc3VmZml4
LCBjb2xvcik7CisgICAgfTsKKyAgICBVbmlmb3JtQnVmZmVyLnByb3RvdHlwZS5fdXBkYXRlQ29s
b3IzRm9yVW5pZm9ybSA9IGZ1bmN0aW9uIChuYW1lLCBjb2xvcikgeworICAgICAgICBjb2xvci50
b0FycmF5KFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXIpOworICAgICAgICB0aGlzLnVwZGF0ZVVu
aWZvcm0obmFtZSwgVW5pZm9ybUJ1ZmZlci5fdGVtcEJ1ZmZlciwgMyk7CisgICAgfTsKKyAgICBV
bmlmb3JtQnVmZmVyLnByb3RvdHlwZS5fdXBkYXRlQ29sb3I0Rm9yRWZmZWN0ID0gZnVuY3Rpb24g
KG5hbWUsIGNvbG9yLCBhbHBoYSwgc3VmZml4KSB7CisgICAgICAgIGlmIChzdWZmaXggPT09IHZv
aWQgMCkgeyBzdWZmaXggPSAiIjsgfQorICAgICAgICB0aGlzLl9jdXJyZW50RWZmZWN0LnNldENv
bG9yNChuYW1lICsgc3VmZml4LCBjb2xvciwgYWxwaGEpOworICAgIH07CisgICAgVW5pZm9ybUJ1
ZmZlci5wcm90b3R5cGUuX3VwZGF0ZUNvbG9yNEZvclVuaWZvcm0gPSBmdW5jdGlvbiAobmFtZSwg
Y29sb3IsIGFscGhhKSB7CisgICAgICAgIGNvbG9yLnRvQXJyYXkoVW5pZm9ybUJ1ZmZlci5fdGVt
cEJ1ZmZlcik7CisgICAgICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXJbM10gPSBhbHBoYTsK
KyAgICAgICAgdGhpcy51cGRhdGVVbmlmb3JtKG5hbWUsIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZm
ZXIsIDQpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBhIHNhbXBsZXIgdW5pZm9ybSBv
biB0aGUgZWZmZWN0LgorICAgICAqIEBwYXJhbSBuYW1lIERlZmluZSB0aGUgbmFtZSBvZiB0aGUg
c2FtcGxlci4KKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBEZWZpbmUgdGhlIHRleHR1cmUgdG8gc2V0
IGluIHRoZSBzYW1wbGVyCisgICAgICovCisgICAgVW5pZm9ybUJ1ZmZlci5wcm90b3R5cGUuc2V0
VGV4dHVyZSA9IGZ1bmN0aW9uIChuYW1lLCB0ZXh0dXJlKSB7CisgICAgICAgIHRoaXMuX2N1cnJl
bnRFZmZlY3Quc2V0VGV4dHVyZShuYW1lLCB0ZXh0dXJlKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIERpcmVjdGx5IHVwZGF0ZXMgdGhlIHZhbHVlIG9mIHRoZSB1bmlmb3JtIGluIHRoZSBjYWNo
ZSBBTkQgb24gdGhlIEdQVS4KKyAgICAgKiBAcGFyYW0gdW5pZm9ybU5hbWUgRGVmaW5lIHRoZSBu
YW1lIG9mIHRoZSB1bmlmb3JtLCBhcyB1c2VkIGluIHRoZSB1bmlmb3JtIGJsb2NrIGluIHRoZSBz
aGFkZXIuCisgICAgICogQHBhcmFtIGRhdGEgRGVmaW5lIHRoZSBmbGF0dGVuZWQgZGF0YQorICAg
ICAqLworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBlLnVwZGF0ZVVuaWZvcm1EaXJlY3RseSA9
IGZ1bmN0aW9uICh1bmlmb3JtTmFtZSwgZGF0YSkgeworICAgICAgICB0aGlzLnVwZGF0ZVVuaWZv
cm0odW5pZm9ybU5hbWUsIGRhdGEsIGRhdGEubGVuZ3RoKTsKKyAgICAgICAgdGhpcy51cGRhdGUo
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJpbmRzIHRoaXMgdW5pZm9ybSBidWZmZXIgdG8g
YW4gZWZmZWN0LgorICAgICAqIEBwYXJhbSBlZmZlY3QgRGVmaW5lIHRoZSBlZmZlY3QgdG8gYmlu
ZCB0aGUgYnVmZmVyIHRvCisgICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgdW5pZm9ybSBi
bG9jayBpbiB0aGUgc2hhZGVyLgorICAgICAqLworICAgIFVuaWZvcm1CdWZmZXIucHJvdG90eXBl
LmJpbmRUb0VmZmVjdCA9IGZ1bmN0aW9uIChlZmZlY3QsIG5hbWUpIHsKKyAgICAgICAgdGhpcy5f
Y3VycmVudEVmZmVjdCA9IGVmZmVjdDsKKyAgICAgICAgaWYgKHRoaXMuX25vVUJPIHx8ICF0aGlz
Ll9idWZmZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlZmZl
Y3QuYmluZFVuaWZvcm1CdWZmZXIodGhpcy5fYnVmZmVyLCBuYW1lKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIERpc3Bvc2VzIHRoZSB1bmlmb3JtIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBVbmlm
b3JtQnVmZmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5fbm9VQk8pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2
YXIgdW5pZm9ybUJ1ZmZlcnMgPSB0aGlzLl9lbmdpbmUuX3VuaWZvcm1CdWZmZXJzOworICAgICAg
ICB2YXIgaW5kZXggPSB1bmlmb3JtQnVmZmVycy5pbmRleE9mKHRoaXMpOworICAgICAgICBpZiAo
aW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICB1bmlmb3JtQnVmZmVyc1tpbmRleF0gPSB1bmlm
b3JtQnVmZmVyc1t1bmlmb3JtQnVmZmVycy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIHVuaWZv
cm1CdWZmZXJzLnBvcCgpOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fYnVmZmVyKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2VuZ2lu
ZS5fcmVsZWFzZUJ1ZmZlcih0aGlzLl9idWZmZXIpKSB7CisgICAgICAgICAgICB0aGlzLl9idWZm
ZXIgPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICAvLyBQb29sIGZvciBhdm9pZGluZyBt
ZW1vcnkgbGVha3MKKyAgICBVbmlmb3JtQnVmZmVyLl9NQVhfVU5JRk9STV9TSVpFID0gMjU2Owor
ICAgIFVuaWZvcm1CdWZmZXIuX3RlbXBCdWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KFVuaWZvcm1C
dWZmZXIuX01BWF9VTklGT1JNX1NJWkUpOworICAgIHJldHVybiBVbmlmb3JtQnVmZmVyOworfSgp
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRocy9pbmRleC50cyI6CisvKiEqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGhzL2luZGV4LnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTY2FsYXIs
IFNwYWNlLCBBeGlzLCBDb2xvcjMsIENvbG9yNCwgVG1wQ29sb3JzLCBUb0dhbW1hU3BhY2UsIFRv
TGluZWFyU3BhY2UsIEVwc2lsb24sIEZydXN0dW0sIFBsYW5lLCBTaXplLCBWZWN0b3IyLCBWZWN0
b3IzLCBWZWN0b3I0LCBRdWF0ZXJuaW9uLCBNYXRyaXgsIFRtcFZlY3RvcnMsIFZpZXdwb3J0LCBT
cGhlcmljYWxIYXJtb25pY3MsIFNwaGVyaWNhbFBvbHlub21pYWwsIE9yaWVudGF0aW9uLCBCZXpp
ZXJDdXJ2ZSwgQW5nbGUsIEFyYzIsIFBhdGgyLCBQYXRoM0QsIEN1cnZlMywgUG9zaXRpb25Ob3Jt
YWxWZXJ0ZXgsIFBvc2l0aW9uTm9ybWFsVGV4dHVyZVZlcnRleCAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGguc2NhbGFyICovICIu
L01hdGhzL21hdGguc2NhbGFyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjYWxhciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlNjYWxhciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGggKi8g
Ii4vTWF0aHMvbWF0aC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGFjZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU3BhY2UiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiQXhpcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQXhpcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJDb2xvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIkNvbG9yMyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvcjQiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9y
NCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUbXBDb2xvcnMiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcENvbG9ycyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJUb0dhbW1hU3BhY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9t
YXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRvR2FtbWFTcGFjZSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJUb0xpbmVhclNwYWNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb0xpbmVhclNwYWNlIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkVwc2lsb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkVwc2lsb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiRnJ1c3R1bSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siRnJ1c3R1bSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQbGFuZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUGxh
bmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2l6ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2l6ZSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJWZWN0b3IyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZl
Y3RvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlZlY3RvcjMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmVjdG9yNCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9y
NCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJRdWF0ZXJuaW9uIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk1hdHJpeCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlRtcFZlY3RvcnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Vmlld3BvcnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlZpZXdwb3J0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9yaWVudGF0aW9u
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJPcmllbnRhdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCZXppZXJDdXJ2ZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQmV6
aWVyQ3VydmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5nbGUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFuZ2xlIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkFyYzIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFyYzIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
UGF0aDIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlBhdGgyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhdGgzRCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUGF0aDNEIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN1cnZlMyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21h
dGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ3VydmUzIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlBvc2l0aW9uTm9ybWFsVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb3NpdGlvbk5vcm1hbFZlcnRleCJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJQb3NpdGlvbk5vcm1hbFRleHR1cmVWZXJ0ZXgiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc2l0
aW9uTm9ybWFsVGV4dHVyZVZlcnRleCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9zcGhlcmljYWxQb2x5bm9taWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3NwaGVyaWNhbFBvbHlub21pYWwgKi8gIi4vTWF0aHMvc3Bo
ZXJpY2FsUG9seW5vbWlhbC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGhlcmljYWxIYXJtb25p
Y3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zcGhlcmljYWxQb2x5bm9taWFsX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlNwaGVyaWNhbEhhcm1vbmljcyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJTcGhlcmljYWxQb2x5bm9taWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3BoZXJp
Y2FsUG9seW5vbWlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTcGhlcmljYWxQb2x5
bm9taWFsIl07IH0pOworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGhzL21h
dGguYXhpcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NYXRocy9tYXRoLmF4aXMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTcGFjZSwgQXhpcyAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTcGFjZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3BhY2U7IH0p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiQXhpcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXhpczsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGgudmVjdG9yICovICIu
L01hdGhzL21hdGgudmVjdG9yLnRzIik7CisKKy8qKiBEZWZpbmVzIHN1cHBvcnRlZCBzcGFjZXMg
Ki8KK3ZhciBTcGFjZTsKKyhmdW5jdGlvbiAoU3BhY2UpIHsKKyAgICAvKiogTG9jYWwgKG9iamVj
dCkgc3BhY2UgKi8KKyAgICBTcGFjZVtTcGFjZVsiTE9DQUwiXSA9IDBdID0gIkxPQ0FMIjsKKyAg
ICAvKiogV29ybGQgc3BhY2UgKi8KKyAgICBTcGFjZVtTcGFjZVsiV09STEQiXSA9IDFdID0gIldP
UkxEIjsKKyAgICAvKiogQm9uZSBzcGFjZSAqLworICAgIFNwYWNlW1NwYWNlWyJCT05FIl0gPSAy
XSA9ICJCT05FIjsKK30pKFNwYWNlIHx8IChTcGFjZSA9IHt9KSk7CisvKiogRGVmaW5lcyB0aGUg
MyBtYWluIGF4ZXMgKi8KK3ZhciBBeGlzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
ICAgIGZ1bmN0aW9uIEF4aXMoKSB7CisgICAgfQorICAgIC8qKiBYIGF4aXMgKi8KKyAgICBBeGlz
LlggPSBuZXcgX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3Rv
cjMiXSgxLjAsIDAuMCwgMC4wKTsKKyAgICAvKiogWSBheGlzICovCisgICAgQXhpcy5ZID0gbmV3
IF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMC4w
LCAxLjAsIDAuMCk7CisgICAgLyoqIFogYXhpcyAqLworICAgIEF4aXMuWiA9IG5ldyBfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAuMCwgMC4wLCAx
LjApOworICAgIHJldHVybiBBeGlzOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9NYXRocy9tYXRoLmNvbG9yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9NYXRocy9tYXRoLmNvbG9yLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbG9yMywgQ29sb3I0LCBU
bXBDb2xvcnMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3IzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBDb2xvcjM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3I0
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb2xvcjQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG1w
Q29sb3JzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUbXBDb2xvcnM7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tYXRoLnNjYWxhciAqLyAiLi9NYXRocy9tYXRoLnNj
YWxhci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRoX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tYXRo
LmNvbnN0YW50cyAqLyAiLi9NYXRocy9tYXRoLmNvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NaXNjX2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvYXJyYXlUb29scyAqLyAiLi9NaXNj
L2FycmF5VG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3Rv
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2MvdHlwZVN0b3JlLnRzIik7CisKKworCisKKy8q
KgorICogQ2xhc3MgdXNlZCB0byBob2xkIGEgUkJHIGNvbG9yCisgKi8KK3ZhciBDb2xvcjMgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5l
dyBDb2xvcjMgb2JqZWN0IGZyb20gcmVkLCBncmVlbiwgYmx1ZSB2YWx1ZXMsIGFsbCBiZXR3ZWVu
IDAgYW5kIDEKKyAgICAgKiBAcGFyYW0gciBkZWZpbmVzIHRoZSByZWQgY29tcG9uZW50IChiZXR3
ZWVuIDAgYW5kIDEsIGRlZmF1bHQgaXMgMCkKKyAgICAgKiBAcGFyYW0gZyBkZWZpbmVzIHRoZSBn
cmVlbiBjb21wb25lbnQgKGJldHdlZW4gMCBhbmQgMSwgZGVmYXVsdCBpcyAwKQorICAgICAqIEBw
YXJhbSBiIGRlZmluZXMgdGhlIGJsdWUgY29tcG9uZW50IChiZXR3ZWVuIDAgYW5kIDEsIGRlZmF1
bHQgaXMgMCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDb2xvcjMoCisgICAgLyoqCisgICAgICog
RGVmaW5lcyB0aGUgcmVkIGNvbXBvbmVudCAoYmV0d2VlbiAwIGFuZCAxLCBkZWZhdWx0IGlzIDAp
CisgICAgICovCisgICAgciwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgZ3JlZW4gY29t
cG9uZW50IChiZXR3ZWVuIDAgYW5kIDEsIGRlZmF1bHQgaXMgMCkKKyAgICAgKi8KKyAgICBnLCAK
KyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBibHVlIGNvbXBvbmVudCAoYmV0d2VlbiAwIGFu
ZCAxLCBkZWZhdWx0IGlzIDApCisgICAgICovCisgICAgYikgeworICAgICAgICBpZiAociA9PT0g
dm9pZCAwKSB7IHIgPSAwOyB9CisgICAgICAgIGlmIChnID09PSB2b2lkIDApIHsgZyA9IDA7IH0K
KyAgICAgICAgaWYgKGIgPT09IHZvaWQgMCkgeyBiID0gMDsgfQorICAgICAgICB0aGlzLnIgPSBy
OworICAgICAgICB0aGlzLmcgPSBnOworICAgICAgICB0aGlzLmIgPSBiOworICAgIH0KKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgc3RyaW5nIHdpdGggdGhlIENvbG9yMyBjdXJyZW50IHZhbHVl
cworICAgICAqIEByZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIENvbG9y
MyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gIntSOiAiICsgdGhpcy5yICsgIiBHOiIgKyB0aGlzLmcg
KyAiIEI6IiArIHRoaXMuYiArICJ9IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
dGhlIHN0cmluZyAiQ29sb3IzIgorICAgICAqIEByZXR1cm5zICJDb2xvcjMiCisgICAgICovCisg
ICAgQ29sb3IzLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiAiQ29sb3IzIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXB1dGUgdGhlIENv
bG9yMyBoYXNoIGNvZGUKKyAgICAgKiBAcmV0dXJucyBhbiB1bmlxdWUgbnVtYmVyIHRoYXQgY2Fu
IGJlIHVzZWQgdG8gaGFzaCBDb2xvcjMgb2JqZWN0cworICAgICAqLworICAgIENvbG9yMy5wcm90
b3R5cGUuZ2V0SGFzaENvZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBoYXNoID0gKHRo
aXMuciAqIDI1NSkgfCAwOworICAgICAgICBoYXNoID0gKGhhc2ggKiAzOTcpIF4gKCh0aGlzLmcg
KiAyNTUpIHwgMCk7CisgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAoKHRoaXMuYiAqIDI1
NSkgfCAwKTsKKyAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgfTsKKyAgICAvLyBPcGVyYXRvcnMK
KyAgICAvKioKKyAgICAgKiBTdG9yZXMgaW4gdGhlIGdpdmVuIGFycmF5IGZyb20gdGhlIGdpdmVu
IHN0YXJ0aW5nIGluZGV4IHRoZSByZWQsIGdyZWVuLCBibHVlIHZhbHVlcyBhcyBzdWNjZXNzaXZl
IGVsZW1lbnRzCisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIGFycmF5IHdoZXJlIHRv
IHN0b3JlIHRoZSByLGcsYiBjb21wb25lbnRzCisgICAgICogQHBhcmFtIGluZGV4IGRlZmluZXMg
YW4gb3B0aW9uYWwgaW5kZXggaW4gdGhlIHRhcmdldCBhcnJheSB0byBkZWZpbmUgd2hlcmUgdG8g
c3RhcnQgc3RvcmluZyB2YWx1ZXMKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBDb2xvcjMg
b2JqZWN0CisgICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24g
KGFycmF5LCBpbmRleCkgeworICAgICAgICBpZiAoaW5kZXggPT09IHZvaWQgMCkgeyBpbmRleCA9
IDA7IH0KKyAgICAgICAgYXJyYXlbaW5kZXhdID0gdGhpcy5yOworICAgICAgICBhcnJheVtpbmRl
eCArIDFdID0gdGhpcy5nOworICAgICAgICBhcnJheVtpbmRleCArIDJdID0gdGhpcy5iOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcg
Q29sb3I0IG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IENvbG9yMyBhbmQgdGhlIGdpdmVuIGFscGhh
CisgICAgICogQHBhcmFtIGFscGhhIGRlZmluZXMgdGhlIGFscGhhIGNvbXBvbmVudCBvbiB0aGUg
bmV3IENvbG9yNCBvYmplY3QgKGRlZmF1bHQgaXMgMSkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBD
b2xvcjQgb2JqZWN0CisgICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS50b0NvbG9yNCA9IGZ1
bmN0aW9uIChhbHBoYSkgeworICAgICAgICBpZiAoYWxwaGEgPT09IHZvaWQgMCkgeyBhbHBoYSA9
IDE7IH0KKyAgICAgICAgcmV0dXJuIG5ldyBDb2xvcjQodGhpcy5yLCB0aGlzLmcsIHRoaXMuYiwg
YWxwaGEpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBhcnJheSBwb3B1
bGF0ZWQgd2l0aCAzIG51bWVyaWMgZWxlbWVudHMgOiByZWQsIGdyZWVuIGFuZCBibHVlIHZhbHVl
cworICAgICAqIEByZXR1cm5zIHRoZSBuZXcgYXJyYXkKKyAgICAgKi8KKyAgICBDb2xvcjMucHJv
dG90eXBlLmFzQXJyYXkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgdGhpcy50b0FycmF5KHJlc3VsdCwgMCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsdW1pbmFuY2Ug
dmFsdWUKKyAgICAgKiBAcmV0dXJucyBhIGZsb2F0IHZhbHVlCisgICAgICovCisgICAgQ29sb3Iz
LnByb3RvdHlwZS50b0x1bWluYW5jZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuciAqIDAuMyArIHRoaXMuZyAqIDAuNTkgKyB0aGlzLmIgKiAwLjExOworICAgIH07CisgICAg
LyoqCisgICAgICogTXVsdGlwbHkgZWFjaCBDb2xvcjMgcmdiIHZhbHVlcyBieSB0aGUgZ2l2ZW4g
Q29sb3IzIHJnYiB2YWx1ZXMgaW4gYSBuZXcgQ29sb3IzIG9iamVjdAorICAgICAqIEBwYXJhbSBv
dGhlckNvbG9yIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHJldHVybnMgdGhl
IG5ldyBDb2xvcjMgb2JqZWN0CisgICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS5tdWx0aXBs
eSA9IGZ1bmN0aW9uIChvdGhlckNvbG9yKSB7CisgICAgICAgIHJldHVybiBuZXcgQ29sb3IzKHRo
aXMuciAqIG90aGVyQ29sb3IuciwgdGhpcy5nICogb3RoZXJDb2xvci5nLCB0aGlzLmIgKiBvdGhl
ckNvbG9yLmIpOworICAgIH07CisgICAgLyoqCisgICAgICogTXVsdGlwbHkgdGhlIHJnYiB2YWx1
ZXMgb2YgdGhlIENvbG9yMyBhbmQgdGhlIGdpdmVuIENvbG9yMyBhbmQgc3RvcmVzIHRoZSByZXN1
bHQgaW4gdGhlIG9iamVjdCAicmVzdWx0IgorICAgICAqIEBwYXJhbSBvdGhlckNvbG9yIGRlZmlu
ZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSBD
b2xvcjMgb2JqZWN0IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0
aGUgY3VycmVudCBDb2xvcjMKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLm11bHRpcGx5
VG9SZWYgPSBmdW5jdGlvbiAob3RoZXJDb2xvciwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC5y
ID0gdGhpcy5yICogb3RoZXJDb2xvci5yOworICAgICAgICByZXN1bHQuZyA9IHRoaXMuZyAqIG90
aGVyQ29sb3IuZzsKKyAgICAgICAgcmVzdWx0LmIgPSB0aGlzLmIgKiBvdGhlckNvbG9yLmI7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBl
cXVhbGl0eSBiZXR3ZWVuIENvbG9yMyBvYmplY3RzCisgICAgICogQHBhcmFtIG90aGVyQ29sb3Ig
ZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBy
Z2IgdmFsdWVzIGFyZSBlcXVhbCB0byB0aGUgZ2l2ZW4gb25lcworICAgICAqLworICAgIENvbG9y
My5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyQ29sb3IpIHsKKyAgICAgICAgcmV0
dXJuIG90aGVyQ29sb3IgJiYgdGhpcy5yID09PSBvdGhlckNvbG9yLnIgJiYgdGhpcy5nID09PSBv
dGhlckNvbG9yLmcgJiYgdGhpcy5iID09PSBvdGhlckNvbG9yLmI7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBEZXRlcm1pbmVzIGVxdWFsaXR5IGJldHdlZW4gdGhlIGN1cnJlbnQgQ29sb3IzIG9i
amVjdCBhbmQgYSBzZXQgb2YgcixiLGcgdmFsdWVzCisgICAgICogQHBhcmFtIHIgZGVmaW5lcyB0
aGUgcmVkIGNvbXBvbmVudCB0byBjaGVjaworICAgICAqIEBwYXJhbSBnIGRlZmluZXMgdGhlIGdy
ZWVuIGNvbXBvbmVudCB0byBjaGVjaworICAgICAqIEBwYXJhbSBiIGRlZmluZXMgdGhlIGJsdWUg
Y29tcG9uZW50IHRvIGNoZWNrCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgcmdiIHZhbHVl
cyBhcmUgZXF1YWwgdG8gdGhlIGdpdmVuIG9uZXMKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90
eXBlLmVxdWFsc0Zsb2F0cyA9IGZ1bmN0aW9uIChyLCBnLCBiKSB7CisgICAgICAgIHJldHVybiB0
aGlzLnIgPT09IHIgJiYgdGhpcy5nID09PSBnICYmIHRoaXMuYiA9PT0gYjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIE11bHRpcGxpZXMgaW4gcGxhY2UgZWFjaCByZ2IgdmFsdWUgYnkgc2NhbGUK
KyAgICAgKiBAcGFyYW0gc2NhbGUgZGVmaW5lcyB0aGUgc2NhbGluZyBmYWN0b3IKKyAgICAgKiBA
cmV0dXJucyB0aGUgdXBkYXRlZCBDb2xvcjMKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBl
LnNjYWxlID0gZnVuY3Rpb24gKHNjYWxlKSB7CisgICAgICAgIHJldHVybiBuZXcgQ29sb3IzKHRo
aXMuciAqIHNjYWxlLCB0aGlzLmcgKiBzY2FsZSwgdGhpcy5iICogc2NhbGUpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogTXVsdGlwbGllcyB0aGUgcmdiIHZhbHVlcyBieSBzY2FsZSBhbmQgc3Rv
cmVzIHRoZSByZXN1bHQgaW50byAicmVzdWx0IgorICAgICAqIEBwYXJhbSBzY2FsZSBkZWZpbmVz
IHRoZSBzY2FsaW5nIGZhY3RvcgorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgQ29s
b3IzIG9iamVjdCB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0CisgICAgICogQHJldHVybnMgdGhl
IHVubW9kaWZpZWQgY3VycmVudCBDb2xvcjMKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBl
LnNjYWxlVG9SZWYgPSBmdW5jdGlvbiAoc2NhbGUsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQu
ciA9IHRoaXMuciAqIHNjYWxlOworICAgICAgICByZXN1bHQuZyA9IHRoaXMuZyAqIHNjYWxlOwor
ICAgICAgICByZXN1bHQuYiA9IHRoaXMuYiAqIHNjYWxlOworICAgICAgICByZXR1cm4gdGhpczsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNjYWxlIHRoZSBjdXJyZW50IENvbG9yMyB2YWx1ZXMg
YnkgYSBmYWN0b3IgYW5kIGFkZCB0aGUgcmVzdWx0IHRvIGEgZ2l2ZW4gQ29sb3IzCisgICAgICog
QHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxlIGZhY3RvcgorICAgICAqIEBwYXJhbSByZXN1
bHQgZGVmaW5lcyBjb2xvciB0byBzdG9yZSB0aGUgcmVzdWx0IGludG8KKyAgICAgKiBAcmV0dXJu
cyB0aGUgdW5tb2RpZmllZCBjdXJyZW50IENvbG9yMworICAgICAqLworICAgIENvbG9yMy5wcm90
b3R5cGUuc2NhbGVBbmRBZGRUb1JlZiA9IGZ1bmN0aW9uIChzY2FsZSwgcmVzdWx0KSB7CisgICAg
ICAgIHJlc3VsdC5yICs9IHRoaXMuciAqIHNjYWxlOworICAgICAgICByZXN1bHQuZyArPSB0aGlz
LmcgKiBzY2FsZTsKKyAgICAgICAgcmVzdWx0LmIgKz0gdGhpcy5iICogc2NhbGU7CisgICAgICAg
IHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ2xhbXBzIHRoZSByZ2IgdmFs
dWVzIGJ5IHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGludG8g
InJlc3VsdCIKKyAgICAgKiBAcGFyYW0gbWluIGRlZmluZXMgbWluaW11bSBjbGFtcGluZyB2YWx1
ZSAoZGVmYXVsdCBpcyAwKQorICAgICAqIEBwYXJhbSBtYXggZGVmaW5lcyBtYXhpbXVtIGNsYW1w
aW5nIHZhbHVlIChkZWZhdWx0IGlzIDEpCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIGNv
bG9yIHRvIHN0b3JlIHRoZSByZXN1bHQgaW50bworICAgICAqIEByZXR1cm5zIHRoZSBvcmlnaW5h
bCBDb2xvcjMKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLmNsYW1wVG9SZWYgPSBmdW5j
dGlvbiAobWluLCBtYXgsIHJlc3VsdCkgeworICAgICAgICBpZiAobWluID09PSB2b2lkIDApIHsg
bWluID0gMDsgfQorICAgICAgICBpZiAobWF4ID09PSB2b2lkIDApIHsgbWF4ID0gMTsgfQorICAg
ICAgICByZXN1bHQuciA9IF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJTY2FsYXIiXS5DbGFtcCh0aGlzLnIsIG1pbiwgbWF4KTsKKyAgICAgICAgcmVzdWx0LmcgPSBf
bWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uQ2xhbXAo
dGhpcy5nLCBtaW4sIG1heCk7CisgICAgICAgIHJlc3VsdC5iID0gX21hdGhfc2NhbGFyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjYWxhciJdLkNsYW1wKHRoaXMuYiwgbWluLCBtYXgp
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgQ29sb3IzIHNldCB3aXRoIHRoZSBhZGRlZCB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgQ29s
b3IzIGFuZCBvZiB0aGUgZ2l2ZW4gb25lCisgICAgICogQHBhcmFtIG90aGVyQ29sb3IgZGVmaW5l
cyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IENvbG9yMworICAg
ICAqLworICAgIENvbG9yMy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG90aGVyQ29sb3IpIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBDb2xvcjModGhpcy5yICsgb3RoZXJDb2xvci5yLCB0aGlzLmcg
KyBvdGhlckNvbG9yLmcsIHRoaXMuYiArIG90aGVyQ29sb3IuYik7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgYWRkaXRpb24gb2YgdGhlIGN1cnJlbnQg
Q29sb3IzIGFuZCBnaXZlbiBvbmUgcmdiIHZhbHVlcyBpbnRvICJyZXN1bHQiCisgICAgICogQHBh
cmFtIG90aGVyQ29sb3IgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0g
cmVzdWx0IGRlZmluZXMgQ29sb3IzIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGludG8KKyAg
ICAgKiBAcmV0dXJucyB0aGUgdW5tb2RpZmllZCBjdXJyZW50IENvbG9yMworICAgICAqLworICAg
IENvbG9yMy5wcm90b3R5cGUuYWRkVG9SZWYgPSBmdW5jdGlvbiAob3RoZXJDb2xvciwgcmVzdWx0
KSB7CisgICAgICAgIHJlc3VsdC5yID0gdGhpcy5yICsgb3RoZXJDb2xvci5yOworICAgICAgICBy
ZXN1bHQuZyA9IHRoaXMuZyArIG90aGVyQ29sb3IuZzsKKyAgICAgICAgcmVzdWx0LmIgPSB0aGlz
LmIgKyBvdGhlckNvbG9yLmI7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoq
CisgICAgICogUmV0dXJucyBhIG5ldyBDb2xvcjMgc2V0IHdpdGggdGhlIHN1YnRyYWN0ZWQgdmFs
dWVzIG9mIHRoZSBnaXZlbiBvbmUgZnJvbSB0aGUgY3VycmVudCBDb2xvcjMKKyAgICAgKiBAcGFy
YW0gb3RoZXJDb2xvciBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5z
IHRoZSBuZXcgQ29sb3IzCisgICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS5zdWJ0cmFjdCA9
IGZ1bmN0aW9uIChvdGhlckNvbG9yKSB7CisgICAgICAgIHJldHVybiBuZXcgQ29sb3IzKHRoaXMu
ciAtIG90aGVyQ29sb3IuciwgdGhpcy5nIC0gb3RoZXJDb2xvci5nLCB0aGlzLmIgLSBvdGhlckNv
bG9yLmIpOworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcmVzIHRoZSByZXN1bHQgb2YgdGhl
IHN1YnRyYWN0aW9uIG9mIGdpdmVuIG9uZSBmcm9tIHRoZSBjdXJyZW50IENvbG9yMyByZ2IgdmFs
dWVzIGludG8gInJlc3VsdCIKKyAgICAgKiBAcGFyYW0gb3RoZXJDb2xvciBkZWZpbmVzIHRoZSBz
ZWNvbmQgb3BlcmFuZAorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyBDb2xvcjMgb2JqZWN0
IHRvIHN0b3JlIHRoZSByZXN1bHQgaW50bworICAgICAqIEByZXR1cm5zIHRoZSB1bm1vZGlmaWVk
IGN1cnJlbnQgQ29sb3IzCisgICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS5zdWJ0cmFjdFRv
UmVmID0gZnVuY3Rpb24gKG90aGVyQ29sb3IsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQuciA9
IHRoaXMuciAtIG90aGVyQ29sb3IucjsKKyAgICAgICAgcmVzdWx0LmcgPSB0aGlzLmcgLSBvdGhl
ckNvbG9yLmc7CisgICAgICAgIHJlc3VsdC5iID0gdGhpcy5iIC0gb3RoZXJDb2xvci5iOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvcHkgdGhlIGN1cnJl
bnQgb2JqZWN0CisgICAgICogQHJldHVybnMgYSBuZXcgQ29sb3IzIGNvcGllZCB0aGUgY3VycmVu
dCBvbmUKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gbmV3IENvbG9yMyh0aGlzLnIsIHRoaXMuZywgdGhpcy5iKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIENvcGllcyB0aGUgcmdiIHZhbHVlcyBmcm9tIHRoZSBzb3Vy
Y2UgaW4gdGhlIGN1cnJlbnQgQ29sb3IzCisgICAgICogQHBhcmFtIHNvdXJjZSBkZWZpbmVzIHRo
ZSBzb3VyY2UgQ29sb3IzIG9iamVjdAorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIENvbG9y
MyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLmNvcHlGcm9tID0gZnVuY3Rp
b24gKHNvdXJjZSkgeworICAgICAgICB0aGlzLnIgPSBzb3VyY2UucjsKKyAgICAgICAgdGhpcy5n
ID0gc291cmNlLmc7CisgICAgICAgIHRoaXMuYiA9IHNvdXJjZS5iOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIENvbG9yMyByZ2IgdmFs
dWVzIGZyb20gdGhlIGdpdmVuIGZsb2F0cworICAgICAqIEBwYXJhbSByIGRlZmluZXMgdGhlIHJl
ZCBjb21wb25lbnQgdG8gcmVhZCBmcm9tCisgICAgICogQHBhcmFtIGcgZGVmaW5lcyB0aGUgZ3Jl
ZW4gY29tcG9uZW50IHRvIHJlYWQgZnJvbQorICAgICAqIEBwYXJhbSBiIGRlZmluZXMgdGhlIGJs
dWUgY29tcG9uZW50IHRvIHJlYWQgZnJvbQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IENv
bG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLmNvcHlGcm9tRmxvYXRz
ID0gZnVuY3Rpb24gKHIsIGcsIGIpIHsKKyAgICAgICAgdGhpcy5yID0gcjsKKyAgICAgICAgdGhp
cy5nID0gZzsKKyAgICAgICAgdGhpcy5iID0gYjsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBDb2xvcjMgcmdiIHZhbHVlcyBmcm9tIHRo
ZSBnaXZlbiBmbG9hdHMKKyAgICAgKiBAcGFyYW0gciBkZWZpbmVzIHRoZSByZWQgY29tcG9uZW50
IHRvIHJlYWQgZnJvbQorICAgICAqIEBwYXJhbSBnIGRlZmluZXMgdGhlIGdyZWVuIGNvbXBvbmVu
dCB0byByZWFkIGZyb20KKyAgICAgKiBAcGFyYW0gYiBkZWZpbmVzIHRoZSBibHVlIGNvbXBvbmVu
dCB0byByZWFkIGZyb20KKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBDb2xvcjMgb2JqZWN0
CisgICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAociwgZywgYikg
eworICAgICAgICByZXR1cm4gdGhpcy5jb3B5RnJvbUZsb2F0cyhyLCBnLCBiKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIENvbXB1dGUgdGhlIENvbG9yMyBoZXhhZGVjaW1hbCBjb2RlIGFzIGEg
c3RyaW5nCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgaGV4YWRlY2lt
YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xv
cjMucHJvdG90eXBlLnRvSGV4U3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaW50
UiA9ICh0aGlzLnIgKiAyNTUpIHwgMDsKKyAgICAgICAgdmFyIGludEcgPSAodGhpcy5nICogMjU1
KSB8IDA7CisgICAgICAgIHZhciBpbnRCID0gKHRoaXMuYiAqIDI1NSkgfCAwOworICAgICAgICBy
ZXR1cm4gIiMiICsgX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNj
YWxhciJdLlRvSGV4KGludFIpICsgX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlNjYWxhciJdLlRvSGV4KGludEcpICsgX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlNjYWxhciJdLlRvSGV4KGludEIpOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ29tcHV0ZXMgYSBuZXcgQ29sb3IzIGNvbnZlcnRlZCBmcm9tIHRoZSBjdXJyZW50IG9u
ZSB0byBsaW5lYXIgc3BhY2UKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjMgb2JqZWN0Cisg
ICAgICovCisgICAgQ29sb3IzLnByb3RvdHlwZS50b0xpbmVhclNwYWNlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgY29udmVydGVkQ29sb3IgPSBuZXcgQ29sb3IzKCk7CisgICAgICAgIHRo
aXMudG9MaW5lYXJTcGFjZVRvUmVmKGNvbnZlcnRlZENvbG9yKTsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRlZENvbG9yOworICAgIH07CisgICAgLyoqCisgICAgICogQ29udmVydHMgY3VycmVudCBj
b2xvciBpbiByZ2Igc3BhY2UgdG8gSFNWIHZhbHVlcworICAgICAqIEByZXR1cm5zIGEgbmV3IGNv
bG9yMyByZXByZXNlbnRpbmcgdGhlIEhTViB2YWx1ZXMKKyAgICAgKi8KKyAgICBDb2xvcjMucHJv
dG90eXBlLnRvSFNWID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IENv
bG9yMygpOworICAgICAgICB0aGlzLnRvSFNWVG9SZWYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbnZlcnRzIGN1cnJlbnQgY29sb3Ig
aW4gcmdiIHNwYWNlIHRvIEhTViB2YWx1ZXMKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMg
dGhlIENvbG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgSFNWIHZhbHVlcworICAgICAqLworICAgIENv
bG9yMy5wcm90b3R5cGUudG9IU1ZUb1JlZiA9IGZ1bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAg
dmFyIHIgPSB0aGlzLnI7CisgICAgICAgIHZhciBnID0gdGhpcy5nOworICAgICAgICB2YXIgYiA9
IHRoaXMuYjsKKyAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpOworICAgICAgICB2
YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7CisgICAgICAgIHZhciBoID0gMDsKKyAgICAgICAg
dmFyIHMgPSAwOworICAgICAgICB2YXIgdiA9IG1heDsKKyAgICAgICAgdmFyIGRtID0gbWF4IC0g
bWluOworICAgICAgICBpZiAobWF4ICE9PSAwKSB7CisgICAgICAgICAgICBzID0gZG0gLyBtYXg7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1heCAhPSBtaW4pIHsKKyAgICAgICAgICAgIGlmICht
YXggPT0gcikgeworICAgICAgICAgICAgICAgIGggPSAoZyAtIGIpIC8gZG07CisgICAgICAgICAg
ICAgICAgaWYgKGcgPCBiKSB7CisgICAgICAgICAgICAgICAgICAgIGggKz0gNjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtYXggPT0gZykg
eworICAgICAgICAgICAgICAgIGggPSAoYiAtIHIpIC8gZG0gKyAyOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAobWF4ID09IGIpIHsKKyAgICAgICAgICAgICAgICBoID0gKHIg
LSBnKSAvIGRtICsgNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGggKj0gNjA7CisgICAg
ICAgIH0KKyAgICAgICAgcmVzdWx0LnIgPSBoOworICAgICAgICByZXN1bHQuZyA9IHM7CisgICAg
ICAgIHJlc3VsdC5iID0gdjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbnZlcnRzIHRoZSBD
b2xvcjMgdmFsdWVzIHRvIGxpbmVhciBzcGFjZSBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gImNv
bnZlcnRlZENvbG9yIgorICAgICAqIEBwYXJhbSBjb252ZXJ0ZWRDb2xvciBkZWZpbmVzIHRoZSBD
b2xvcjMgb2JqZWN0IHdoZXJlIHRvIHN0b3JlIHRoZSBsaW5lYXIgc3BhY2UgdmVyc2lvbgorICAg
ICAqIEByZXR1cm5zIHRoZSB1bm1vZGlmaWVkIENvbG9yMworICAgICAqLworICAgIENvbG9yMy5w
cm90b3R5cGUudG9MaW5lYXJTcGFjZVRvUmVmID0gZnVuY3Rpb24gKGNvbnZlcnRlZENvbG9yKSB7
CisgICAgICAgIGNvbnZlcnRlZENvbG9yLnIgPSBNYXRoLnBvdyh0aGlzLnIsIF9tYXRoX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb0xpbmVhclNwYWNlIl0pOworICAg
ICAgICBjb252ZXJ0ZWRDb2xvci5nID0gTWF0aC5wb3codGhpcy5nLCBfbWF0aF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG9MaW5lYXJTcGFjZSJdKTsKKyAgICAgICAg
Y29udmVydGVkQ29sb3IuYiA9IE1hdGgucG93KHRoaXMuYiwgX21hdGhfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRvTGluZWFyU3BhY2UiXSk7CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ29tcHV0ZXMgYSBuZXcgQ29sb3IzIGNv
bnZlcnRlZCBmcm9tIHRoZSBjdXJyZW50IG9uZSB0byBnYW1tYSBzcGFjZQorICAgICAqIEByZXR1
cm5zIGEgbmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMucHJvdG90eXBlLnRv
R2FtbWFTcGFjZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGNvbnZlcnRlZENvbG9yID0g
bmV3IENvbG9yMygpOworICAgICAgICB0aGlzLnRvR2FtbWFTcGFjZVRvUmVmKGNvbnZlcnRlZENv
bG9yKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRlZENvbG9yOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ29udmVydHMgdGhlIENvbG9yMyB2YWx1ZXMgdG8gZ2FtbWEgc3BhY2UgYW5kIHN0b3Jl
cyB0aGUgcmVzdWx0IGluICJjb252ZXJ0ZWRDb2xvciIKKyAgICAgKiBAcGFyYW0gY29udmVydGVk
Q29sb3IgZGVmaW5lcyB0aGUgQ29sb3IzIG9iamVjdCB3aGVyZSB0byBzdG9yZSB0aGUgZ2FtbWEg
c3BhY2UgdmVyc2lvbgorICAgICAqIEByZXR1cm5zIHRoZSB1bm1vZGlmaWVkIENvbG9yMworICAg
ICAqLworICAgIENvbG9yMy5wcm90b3R5cGUudG9HYW1tYVNwYWNlVG9SZWYgPSBmdW5jdGlvbiAo
Y29udmVydGVkQ29sb3IpIHsKKyAgICAgICAgY29udmVydGVkQ29sb3IuciA9IE1hdGgucG93KHRo
aXMuciwgX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRvR2Ft
bWFTcGFjZSJdKTsKKyAgICAgICAgY29udmVydGVkQ29sb3IuZyA9IE1hdGgucG93KHRoaXMuZywg
X21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRvR2FtbWFTcGFj
ZSJdKTsKKyAgICAgICAgY29udmVydGVkQ29sb3IuYiA9IE1hdGgucG93KHRoaXMuYiwgX21hdGhf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRvR2FtbWFTcGFjZSJdKTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IEh1
ZSwgc2F0dXJhdGlvbiBhbmQgdmFsdWUgdG8gYSBDb2xvcjMgKFJHQikKKyAgICAgKiBAcGFyYW0g
aHVlIGRlZmluZXMgdGhlIGh1ZQorICAgICAqIEBwYXJhbSBzYXR1cmF0aW9uIGRlZmluZXMgdGhl
IHNhdHVyYXRpb24KKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5lcyB0aGUgdmFsdWUKKyAgICAg
KiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIENvbG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgUkdC
IHZhbHVlcworICAgICAqLworICAgIENvbG9yMy5IU1Z0b1JHQlRvUmVmID0gZnVuY3Rpb24gKGh1
ZSwgc2F0dXJhdGlvbiwgdmFsdWUsIHJlc3VsdCkgeworICAgICAgICB2YXIgY2hyb21hID0gdmFs
dWUgKiBzYXR1cmF0aW9uOworICAgICAgICB2YXIgaCA9IGh1ZSAvIDYwOworICAgICAgICB2YXIg
eCA9IGNocm9tYSAqICgxIC0gTWF0aC5hYnMoKGggJSAyKSAtIDEpKTsKKyAgICAgICAgdmFyIHIg
PSAwOworICAgICAgICB2YXIgZyA9IDA7CisgICAgICAgIHZhciBiID0gMDsKKyAgICAgICAgaWYg
KGggPj0gMCAmJiBoIDw9IDEpIHsKKyAgICAgICAgICAgIHIgPSBjaHJvbWE7CisgICAgICAgICAg
ICBnID0geDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChoID49IDEgJiYgaCA8PSAyKSB7
CisgICAgICAgICAgICByID0geDsKKyAgICAgICAgICAgIGcgPSBjaHJvbWE7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoaCA+PSAyICYmIGggPD0gMykgeworICAgICAgICAgICAgZyA9IGNo
cm9tYTsKKyAgICAgICAgICAgIGIgPSB4OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGgg
Pj0gMyAmJiBoIDw9IDQpIHsKKyAgICAgICAgICAgIGcgPSB4OworICAgICAgICAgICAgYiA9IGNo
cm9tYTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChoID49IDQgJiYgaCA8PSA1KSB7Cisg
ICAgICAgICAgICByID0geDsKKyAgICAgICAgICAgIGIgPSBjaHJvbWE7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoaCA+PSA1ICYmIGggPD0gNikgeworICAgICAgICAgICAgciA9IGNocm9t
YTsKKyAgICAgICAgICAgIGIgPSB4OworICAgICAgICB9CisgICAgICAgIHZhciBtID0gdmFsdWUg
LSBjaHJvbWE7CisgICAgICAgIHJlc3VsdC5zZXQoKHIgKyBtKSwgKGcgKyBtKSwgKGIgKyBtKSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IENvbG9yMyBmcm9tIHRoZSBz
dHJpbmcgY29udGFpbmluZyB2YWxpZCBoZXhhZGVjaW1hbCB2YWx1ZXMKKyAgICAgKiBAcGFyYW0g
aGV4IGRlZmluZXMgYSBzdHJpbmcgY29udGFpbmluZyB2YWxpZCBoZXhhZGVjaW1hbCB2YWx1ZXMK
KyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjMgb2JqZWN0CisgICAgICovCisgICAgQ29sb3Iz
LkZyb21IZXhTdHJpbmcgPSBmdW5jdGlvbiAoaGV4KSB7CisgICAgICAgIGlmIChoZXguc3Vic3Ry
aW5nKDAsIDEpICE9PSAiIyIgfHwgaGV4Lmxlbmd0aCAhPT0gNykgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyBDb2xvcjMoMCwgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHIgPSBwYXJz
ZUludChoZXguc3Vic3RyaW5nKDEsIDMpLCAxNik7CisgICAgICAgIHZhciBnID0gcGFyc2VJbnQo
aGV4LnN1YnN0cmluZygzLCA1KSwgMTYpOworICAgICAgICB2YXIgYiA9IHBhcnNlSW50KGhleC5z
dWJzdHJpbmcoNSwgNyksIDE2KTsKKyAgICAgICAgcmV0dXJuIENvbG9yMy5Gcm9tSW50cyhyLCBn
LCBiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgQ29sb3IzIGZyb20g
dGhlIHN0YXJ0aW5nIGluZGV4IG9mIHRoZSBnaXZlbiBhcnJheQorICAgICAqIEBwYXJhbSBhcnJh
eSBkZWZpbmVzIHRoZSBzb3VyY2UgYXJyYXkKKyAgICAgKiBAcGFyYW0gb2Zmc2V0IGRlZmluZXMg
YW4gb2Zmc2V0IGluIHRoZSBzb3VyY2UgYXJyYXkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xv
cjMgb2JqZWN0CisgICAgICovCisgICAgQ29sb3IzLkZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJh
eSwgb2Zmc2V0KSB7CisgICAgICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgeyBvZmZzZXQgPSAw
OyB9CisgICAgICAgIHJldHVybiBuZXcgQ29sb3IzKGFycmF5W29mZnNldF0sIGFycmF5W29mZnNl
dCArIDFdLCBhcnJheVtvZmZzZXQgKyAyXSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IENvbG9yMyBmcm9tIGludGVnZXIgdmFsdWVzICg8IDI1NikKKyAgICAgKiBAcGFy
YW0gciBkZWZpbmVzIHRoZSByZWQgY29tcG9uZW50IHRvIHJlYWQgZnJvbSAodmFsdWUgYmV0d2Vl
biAwIGFuZCAyNTUpCisgICAgICogQHBhcmFtIGcgZGVmaW5lcyB0aGUgZ3JlZW4gY29tcG9uZW50
IHRvIHJlYWQgZnJvbSAodmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUpCisgICAgICogQHBhcmFtIGIg
ZGVmaW5lcyB0aGUgYmx1ZSBjb21wb25lbnQgdG8gcmVhZCBmcm9tICh2YWx1ZSBiZXR3ZWVuIDAg
YW5kIDI1NSkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjMgb2JqZWN0CisgICAgICovCisg
ICAgQ29sb3IzLkZyb21JbnRzID0gZnVuY3Rpb24gKHIsIGcsIGIpIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBDb2xvcjMociAvIDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUuMCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IENvbG9yMyB3aXRoIHZhbHVlcyBsaW5lYXJseSBp
bnRlcnBvbGF0ZWQgb2YgImFtb3VudCIgYmV0d2VlbiB0aGUgc3RhcnQgQ29sb3IzIGFuZCB0aGUg
ZW5kIENvbG9yMworICAgICAqIEBwYXJhbSBzdGFydCBkZWZpbmVzIHRoZSBzdGFydCBDb2xvcjMg
dmFsdWUKKyAgICAgKiBAcGFyYW0gZW5kIGRlZmluZXMgdGhlIGVuZCBDb2xvcjMgdmFsdWUKKyAg
ICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHZhbHVlIGJldHdlZW4gc3Rh
cnQgYW5kIGVuZAorICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8K
KyAgICBDb2xvcjMuTGVycCA9IGZ1bmN0aW9uIChzdGFydCwgZW5kLCBhbW91bnQpIHsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IG5ldyBDb2xvcjMoMC4wLCAwLjAsIDAuMCk7CisgICAgICAgIENvbG9y
My5MZXJwVG9SZWYoc3RhcnQsIGVuZCwgYW1vdW50LCByZXN1bHQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBDb2xvcjMgd2l0
aCB2YWx1ZXMgbGluZWFybHkgaW50ZXJwb2xhdGVkIG9mICJhbW91bnQiIGJldHdlZW4gdGhlIHN0
YXJ0IENvbG9yMyBhbmQgdGhlIGVuZCBDb2xvcjMKKyAgICAgKiBAcGFyYW0gbGVmdCBkZWZpbmVz
IHRoZSBzdGFydCB2YWx1ZQorICAgICAqIEBwYXJhbSByaWdodCBkZWZpbmVzIHRoZSBlbmQgdmFs
dWUKKyAgICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGdyYWRpZW50IGZhY3RvcgorICAg
ICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgQ29sb3IzIG9iamVjdCB3aGVyZSB0byBzdG9y
ZSB0aGUgcmVzdWx0CisgICAgICovCisgICAgQ29sb3IzLkxlcnBUb1JlZiA9IGZ1bmN0aW9uIChs
ZWZ0LCByaWdodCwgYW1vdW50LCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnIgPSBsZWZ0LnIg
KyAoKHJpZ2h0LnIgLSBsZWZ0LnIpICogYW1vdW50KTsKKyAgICAgICAgcmVzdWx0LmcgPSBsZWZ0
LmcgKyAoKHJpZ2h0LmcgLSBsZWZ0LmcpICogYW1vdW50KTsKKyAgICAgICAgcmVzdWx0LmIgPSBs
ZWZ0LmIgKyAoKHJpZ2h0LmIgLSBsZWZ0LmIpICogYW1vdW50KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJldHVybnMgYSBDb2xvcjMgdmFsdWUgY29udGFpbmluZyBhIHJlZCBjb2xvcgorICAg
ICAqIEByZXR1cm5zIGEgbmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMuUmVk
ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IENvbG9yMygxLCAwLCAwKTsgfTsKKyAgICAvKioK
KyAgICAgKiBSZXR1cm5zIGEgQ29sb3IzIHZhbHVlIGNvbnRhaW5pbmcgYSBncmVlbiBjb2xvcgor
ICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMu
R3JlZW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29sb3IzKDAsIDEsIDApOyB9OworICAg
IC8qKgorICAgICAqIFJldHVybnMgYSBDb2xvcjMgdmFsdWUgY29udGFpbmluZyBhIGJsdWUgY29s
b3IKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjMgb2JqZWN0CisgICAgICovCisgICAgQ29s
b3IzLkJsdWUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29sb3IzKDAsIDAsIDEpOyB9Owor
ICAgIC8qKgorICAgICAqIFJldHVybnMgYSBDb2xvcjMgdmFsdWUgY29udGFpbmluZyBhIGJsYWNr
IGNvbG9yCisgICAgICogQHJldHVybnMgYSBuZXcgQ29sb3IzIG9iamVjdAorICAgICAqLworICAg
IENvbG9yMy5CbGFjayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBDb2xvcjMoMCwgMCwgMCk7
IH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yMywgIkJsYWNrUmVhZE9ubHkiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgICogR2V0cyBhIENvbG9yMyB2YWx1ZSBjb250YWluaW5n
IGEgYmxhY2sgY29sb3IgdGhhdCBtdXN0IG5vdCBiZSB1cGRhdGVkCisgICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gQ29sb3IzLl9CbGFj
a1JlYWRPbmx5OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEg
Q29sb3IzIHZhbHVlIGNvbnRhaW5pbmcgYSB3aGl0ZSBjb2xvcgorICAgICAqIEByZXR1cm5zIGEg
bmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMuV2hpdGUgPSBmdW5jdGlvbiAo
KSB7IHJldHVybiBuZXcgQ29sb3IzKDEsIDEsIDEpOyB9OworICAgIC8qKgorICAgICAqIFJldHVy
bnMgYSBDb2xvcjMgdmFsdWUgY29udGFpbmluZyBhIHB1cnBsZSBjb2xvcgorICAgICAqIEByZXR1
cm5zIGEgbmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMuUHVycGxlID0gZnVu
Y3Rpb24gKCkgeyByZXR1cm4gbmV3IENvbG9yMygwLjUsIDAsIDAuNSk7IH07CisgICAgLyoqCisg
ICAgICogUmV0dXJucyBhIENvbG9yMyB2YWx1ZSBjb250YWluaW5nIGEgbWFnZW50YSBjb2xvcgor
ICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yMyBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjMu
TWFnZW50YSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBDb2xvcjMoMSwgMCwgMSk7IH07Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIENvbG9yMyB2YWx1ZSBjb250YWluaW5nIGEgeWVsbG93
IGNvbG9yCisgICAgICogQHJldHVybnMgYSBuZXcgQ29sb3IzIG9iamVjdAorICAgICAqLworICAg
IENvbG9yMy5ZZWxsb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29sb3IzKDEsIDEsIDAp
OyB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBDb2xvcjMgdmFsdWUgY29udGFpbmluZyBh
IGdyYXkgY29sb3IKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjMgb2JqZWN0CisgICAgICov
CisgICAgQ29sb3IzLkdyYXkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29sb3IzKDAuNSwg
MC41LCAwLjUpOyB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBDb2xvcjMgdmFsdWUgY29u
dGFpbmluZyBhIHRlYWwgY29sb3IKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjMgb2JqZWN0
CisgICAgICovCisgICAgQ29sb3IzLlRlYWwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQ29s
b3IzKDAsIDEuMCwgMS4wKTsgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgQ29sb3IzIHZh
bHVlIGNvbnRhaW5pbmcgYSByYW5kb20gY29sb3IKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xv
cjMgb2JqZWN0CisgICAgICovCisgICAgQ29sb3IzLlJhbmRvbSA9IGZ1bmN0aW9uICgpIHsgcmV0
dXJuIG5ldyBDb2xvcjMoTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20o
KSk7IH07CisgICAgLy8gU3RhdGljcworICAgIENvbG9yMy5fQmxhY2tSZWFkT25seSA9IENvbG9y
My5CbGFjaygpOworICAgIHJldHVybiBDb2xvcjM7Cit9KCkpOworCisvKioKKyAqIENsYXNzIHVz
ZWQgdG8gaG9sZCBhIFJCR0EgY29sb3IKKyAqLwordmFyIENvbG9yNCA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IENvbG9yNCBvYmpl
Y3QgZnJvbSByZWQsIGdyZWVuLCBibHVlIHZhbHVlcywgYWxsIGJldHdlZW4gMCBhbmQgMQorICAg
ICAqIEBwYXJhbSByIGRlZmluZXMgdGhlIHJlZCBjb21wb25lbnQgKGJldHdlZW4gMCBhbmQgMSwg
ZGVmYXVsdCBpcyAwKQorICAgICAqIEBwYXJhbSBnIGRlZmluZXMgdGhlIGdyZWVuIGNvbXBvbmVu
dCAoYmV0d2VlbiAwIGFuZCAxLCBkZWZhdWx0IGlzIDApCisgICAgICogQHBhcmFtIGIgZGVmaW5l
cyB0aGUgYmx1ZSBjb21wb25lbnQgKGJldHdlZW4gMCBhbmQgMSwgZGVmYXVsdCBpcyAwKQorICAg
ICAqIEBwYXJhbSBhIGRlZmluZXMgdGhlIGFscGhhIGNvbXBvbmVudCAoYmV0d2VlbiAwIGFuZCAx
LCBkZWZhdWx0IGlzIDEpCisgICAgICovCisgICAgZnVuY3Rpb24gQ29sb3I0KAorICAgIC8qKgor
ICAgICAqIERlZmluZXMgdGhlIHJlZCBjb21wb25lbnQgKGJldHdlZW4gMCBhbmQgMSwgZGVmYXVs
dCBpcyAwKQorICAgICAqLworICAgIHIsIAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGdy
ZWVuIGNvbXBvbmVudCAoYmV0d2VlbiAwIGFuZCAxLCBkZWZhdWx0IGlzIDApCisgICAgICovCisg
ICAgZywgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgYmx1ZSBjb21wb25lbnQgKGJldHdl
ZW4gMCBhbmQgMSwgZGVmYXVsdCBpcyAwKQorICAgICAqLworICAgIGIsIAorICAgIC8qKgorICAg
ICAqIERlZmluZXMgdGhlIGFscGhhIGNvbXBvbmVudCAoYmV0d2VlbiAwIGFuZCAxLCBkZWZhdWx0
IGlzIDEpCisgICAgICovCisgICAgYSkgeworICAgICAgICBpZiAociA9PT0gdm9pZCAwKSB7IHIg
PSAwOyB9CisgICAgICAgIGlmIChnID09PSB2b2lkIDApIHsgZyA9IDA7IH0KKyAgICAgICAgaWYg
KGIgPT09IHZvaWQgMCkgeyBiID0gMDsgfQorICAgICAgICBpZiAoYSA9PT0gdm9pZCAwKSB7IGEg
PSAxOyB9CisgICAgICAgIHRoaXMuciA9IHI7CisgICAgICAgIHRoaXMuZyA9IGc7CisgICAgICAg
IHRoaXMuYiA9IGI7CisgICAgICAgIHRoaXMuYSA9IGE7CisgICAgfQorICAgIC8vIE9wZXJhdG9y
cworICAgIC8qKgorICAgICAqIEFkZHMgaW4gcGxhY2UgdGhlIGdpdmVuIENvbG9yNCB2YWx1ZXMg
dG8gdGhlIGN1cnJlbnQgQ29sb3I0IG9iamVjdAorICAgICAqIEBwYXJhbSByaWdodCBkZWZpbmVz
IHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQg
Q29sb3I0IG9iamVjdAorICAgICAqLworICAgIENvbG9yNC5wcm90b3R5cGUuYWRkSW5QbGFjZSA9
IGZ1bmN0aW9uIChyaWdodCkgeworICAgICAgICB0aGlzLnIgKz0gcmlnaHQucjsKKyAgICAgICAg
dGhpcy5nICs9IHJpZ2h0Lmc7CisgICAgICAgIHRoaXMuYiArPSByaWdodC5iOworICAgICAgICB0
aGlzLmEgKz0gcmlnaHQuYTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgbmV3IGFycmF5IHBvcHVsYXRlZCB3aXRoIDQgbnVtZXJpYyBlbGVt
ZW50cyA6IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIHZhbHVlcworICAgICAqIEByZXR1cm5zIHRo
ZSBuZXcgYXJyYXkKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLmFzQXJyYXkgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhp
cy50b0FycmF5KHJlc3VsdCwgMCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTdG9yZXMgZnJvbSB0aGUgc3RhcnRpbmcgaW5kZXggaW4gdGhlIGdpdmVu
IGFycmF5IHRoZSBDb2xvcjQgc3VjY2Vzc2l2ZSB2YWx1ZXMKKyAgICAgKiBAcGFyYW0gYXJyYXkg
ZGVmaW5lcyB0aGUgYXJyYXkgd2hlcmUgdG8gc3RvcmUgdGhlIHIsZyxiIGNvbXBvbmVudHMKKyAg
ICAgKiBAcGFyYW0gaW5kZXggZGVmaW5lcyBhbiBvcHRpb25hbCBpbmRleCBpbiB0aGUgdGFyZ2V0
IGFycmF5IHRvIGRlZmluZSB3aGVyZSB0byBzdGFydCBzdG9yaW5nIHZhbHVlcworICAgICAqIEBy
ZXR1cm5zIHRoZSBjdXJyZW50IENvbG9yNCBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjQucHJv
dG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXksIGluZGV4KSB7CisgICAgICAgIGlmIChp
bmRleCA9PT0gdm9pZCAwKSB7IGluZGV4ID0gMDsgfQorICAgICAgICBhcnJheVtpbmRleF0gPSB0
aGlzLnI7CisgICAgICAgIGFycmF5W2luZGV4ICsgMV0gPSB0aGlzLmc7CisgICAgICAgIGFycmF5
W2luZGV4ICsgMl0gPSB0aGlzLmI7CisgICAgICAgIGFycmF5W2luZGV4ICsgM10gPSB0aGlzLmE7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0ZXJtaW5l
cyBlcXVhbGl0eSBiZXR3ZWVuIENvbG9yNCBvYmplY3RzCisgICAgICogQHBhcmFtIG90aGVyQ29s
b3IgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRo
ZSByZ2JhIHZhbHVlcyBhcmUgZXF1YWwgdG8gdGhlIGdpdmVuIG9uZXMKKyAgICAgKi8KKyAgICBD
b2xvcjQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlckNvbG9yKSB7CisgICAgICAg
IHJldHVybiBvdGhlckNvbG9yICYmIHRoaXMuciA9PT0gb3RoZXJDb2xvci5yICYmIHRoaXMuZyA9
PT0gb3RoZXJDb2xvci5nICYmIHRoaXMuYiA9PT0gb3RoZXJDb2xvci5iICYmIHRoaXMuYSA9PT0g
b3RoZXJDb2xvci5hOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBDb2xv
cjQgc2V0IHdpdGggdGhlIGFkZGVkIHZhbHVlcyBvZiB0aGUgY3VycmVudCBDb2xvcjQgYW5kIG9m
IHRoZSBnaXZlbiBvbmUKKyAgICAgKiBAcGFyYW0gcmlnaHQgZGVmaW5lcyB0aGUgc2Vjb25kIG9w
ZXJhbmQKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBDb2xvcjQgb2JqZWN0CisgICAgICovCisgICAg
Q29sb3I0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAocmlnaHQpIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBDb2xvcjQodGhpcy5yICsgcmlnaHQuciwgdGhpcy5nICsgcmlnaHQuZywgdGhpcy5iICsg
cmlnaHQuYiwgdGhpcy5hICsgcmlnaHQuYSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IENvbG9yNCBzZXQgd2l0aCB0aGUgc3VidHJhY3RlZCB2YWx1ZXMgb2YgdGhlIGdp
dmVuIG9uZSBmcm9tIHRoZSBjdXJyZW50IENvbG9yNAorICAgICAqIEBwYXJhbSByaWdodCBkZWZp
bmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yNCBvYmpl
Y3QKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLnN1YnRyYWN0ID0gZnVuY3Rpb24gKHJp
Z2h0KSB7CisgICAgICAgIHJldHVybiBuZXcgQ29sb3I0KHRoaXMuciAtIHJpZ2h0LnIsIHRoaXMu
ZyAtIHJpZ2h0LmcsIHRoaXMuYiAtIHJpZ2h0LmIsIHRoaXMuYSAtIHJpZ2h0LmEpOworICAgIH07
CisgICAgLyoqCisgICAgICogU3VidHJhY3RzIHRoZSBnaXZlbiBvbmVzIGZyb20gdGhlIGN1cnJl
bnQgQ29sb3I0IHZhbHVlcyBhbmQgc3RvcmVzIHRoZSByZXN1bHRzIGluICJyZXN1bHQiCisgICAg
ICogQHBhcmFtIHJpZ2h0IGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHBhcmFt
IHJlc3VsdCBkZWZpbmVzIHRoZSBDb2xvcjQgb2JqZWN0IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1
bHQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBDb2xvcjQgb2JqZWN0CisgICAgICovCisg
ICAgQ29sb3I0LnByb3RvdHlwZS5zdWJ0cmFjdFRvUmVmID0gZnVuY3Rpb24gKHJpZ2h0LCByZXN1
bHQpIHsKKyAgICAgICAgcmVzdWx0LnIgPSB0aGlzLnIgLSByaWdodC5yOworICAgICAgICByZXN1
bHQuZyA9IHRoaXMuZyAtIHJpZ2h0Lmc7CisgICAgICAgIHJlc3VsdC5iID0gdGhpcy5iIC0gcmln
aHQuYjsKKyAgICAgICAgcmVzdWx0LmEgPSB0aGlzLmEgLSByaWdodC5hOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgQ29sb3I0IHdp
dGggdGhlIGN1cnJlbnQgQ29sb3I0IHZhbHVlcyBtdWx0aXBsaWVkIGJ5IHNjYWxlCisgICAgICog
QHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxpbmcgZmFjdG9yIHRvIGFwcGx5CisgICAgICog
QHJldHVybnMgYSBuZXcgQ29sb3I0IG9iamVjdAorICAgICAqLworICAgIENvbG9yNC5wcm90b3R5
cGUuc2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDb2xvcjQo
dGhpcy5yICogc2NhbGUsIHRoaXMuZyAqIHNjYWxlLCB0aGlzLmIgKiBzY2FsZSwgdGhpcy5hICog
c2NhbGUpOworICAgIH07CisgICAgLyoqCisgICAgICogTXVsdGlwbGllcyB0aGUgY3VycmVudCBD
b2xvcjQgdmFsdWVzIGJ5IHNjYWxlIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiAicmVzdWx0Igor
ICAgICAqIEBwYXJhbSBzY2FsZSBkZWZpbmVzIHRoZSBzY2FsaW5nIGZhY3RvciB0byBhcHBseQor
ICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgQ29sb3I0IG9iamVjdCB3aGVyZSB0byBz
dG9yZSB0aGUgcmVzdWx0CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdW5tb2RpZmllZCBD
b2xvcjQKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLnNjYWxlVG9SZWYgPSBmdW5jdGlv
biAoc2NhbGUsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQuciA9IHRoaXMuciAqIHNjYWxlOwor
ICAgICAgICByZXN1bHQuZyA9IHRoaXMuZyAqIHNjYWxlOworICAgICAgICByZXN1bHQuYiA9IHRo
aXMuYiAqIHNjYWxlOworICAgICAgICByZXN1bHQuYSA9IHRoaXMuYSAqIHNjYWxlOworICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNjYWxlIHRoZSBjdXJyZW50
IENvbG9yNCB2YWx1ZXMgYnkgYSBmYWN0b3IgYW5kIGFkZCB0aGUgcmVzdWx0IHRvIGEgZ2l2ZW4g
Q29sb3I0CisgICAgICogQHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxlIGZhY3RvcgorICAg
ICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgQ29sb3I0IG9iamVjdCB3aGVyZSB0byBzdG9y
ZSB0aGUgcmVzdWx0CisgICAgICogQHJldHVybnMgdGhlIHVubW9kaWZpZWQgY3VycmVudCBDb2xv
cjQKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLnNjYWxlQW5kQWRkVG9SZWYgPSBmdW5j
dGlvbiAoc2NhbGUsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQuciArPSB0aGlzLnIgKiBzY2Fs
ZTsKKyAgICAgICAgcmVzdWx0LmcgKz0gdGhpcy5nICogc2NhbGU7CisgICAgICAgIHJlc3VsdC5i
ICs9IHRoaXMuYiAqIHNjYWxlOworICAgICAgICByZXN1bHQuYSArPSB0aGlzLmEgKiBzY2FsZTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbGFtcHMgdGhl
IHJnYiB2YWx1ZXMgYnkgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBhbmQgc3RvcmVzIHRoZSByZXN1
bHQgaW50byAicmVzdWx0IgorICAgICAqIEBwYXJhbSBtaW4gZGVmaW5lcyBtaW5pbXVtIGNsYW1w
aW5nIHZhbHVlIChkZWZhdWx0IGlzIDApCisgICAgICogQHBhcmFtIG1heCBkZWZpbmVzIG1heGlt
dW0gY2xhbXBpbmcgdmFsdWUgKGRlZmF1bHQgaXMgMSkKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRl
ZmluZXMgY29sb3IgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbnRvLgorICAgICAqIEByZXR1cm5zIHRo
ZSBjdXVyZW50IENvbG9yNAorICAgICAqLworICAgIENvbG9yNC5wcm90b3R5cGUuY2xhbXBUb1Jl
ZiA9IGZ1bmN0aW9uIChtaW4sIG1heCwgcmVzdWx0KSB7CisgICAgICAgIGlmIChtaW4gPT09IHZv
aWQgMCkgeyBtaW4gPSAwOyB9CisgICAgICAgIGlmIChtYXggPT09IHZvaWQgMCkgeyBtYXggPSAx
OyB9CisgICAgICAgIHJlc3VsdC5yID0gX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlNjYWxhciJdLkNsYW1wKHRoaXMuciwgbWluLCBtYXgpOworICAgICAgICByZXN1
bHQuZyA9IF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIi
XS5DbGFtcCh0aGlzLmcsIG1pbiwgbWF4KTsKKyAgICAgICAgcmVzdWx0LmIgPSBfbWF0aF9zY2Fs
YXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uQ2xhbXAodGhpcy5iLCBt
aW4sIG1heCk7CisgICAgICAgIHJlc3VsdC5hID0gX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlNjYWxhciJdLkNsYW1wKHRoaXMuYSwgbWluLCBtYXgpOworICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAgKiBNdWx0aXB5IGFuIENvbG9y
NCB2YWx1ZSBieSBhbm90aGVyIGFuZCByZXR1cm4gYSBuZXcgQ29sb3I0IG9iamVjdAorICAgICAg
KiBAcGFyYW0gY29sb3IgZGVmaW5lcyB0aGUgQ29sb3I0IHZhbHVlIHRvIG11bHRpcGx5IGJ5Cisg
ICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yNCBvYmplY3QKKyAgICAgICovCisgICAgQ29sb3I0
LnByb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIChjb2xvcikgeworICAgICAgICByZXR1cm4g
bmV3IENvbG9yNCh0aGlzLnIgKiBjb2xvci5yLCB0aGlzLmcgKiBjb2xvci5nLCB0aGlzLmIgKiBj
b2xvci5iLCB0aGlzLmEgKiBjb2xvci5hKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE11bHRp
cHkgYSBDb2xvcjQgdmFsdWUgYnkgYW5vdGhlciBhbmQgcHVzaCB0aGUgcmVzdWx0IGluIGEgcmVm
ZXJlbmNlIHZhbHVlCisgICAgICogQHBhcmFtIGNvbG9yIGRlZmluZXMgdGhlIENvbG9yNCB2YWx1
ZSB0byBtdWx0aXBseSBieQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgQ29sb3I0
IHRvIGZpbGwgdGhlIHJlc3VsdCBpbgorICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHQgQ29sb3I0
CisgICAgICovCisgICAgQ29sb3I0LnByb3RvdHlwZS5tdWx0aXBseVRvUmVmID0gZnVuY3Rpb24g
KGNvbG9yLCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnIgPSB0aGlzLnIgKiBjb2xvci5yOwor
ICAgICAgICByZXN1bHQuZyA9IHRoaXMuZyAqIGNvbG9yLmc7CisgICAgICAgIHJlc3VsdC5iID0g
dGhpcy5iICogY29sb3IuYjsKKyAgICAgICAgcmVzdWx0LmEgPSB0aGlzLmEgKiBjb2xvci5hOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBh
IHN0cmluZyB3aXRoIHRoZSBDb2xvcjQgY3VycmVudCB2YWx1ZXMKKyAgICAgKiBAcmV0dXJucyB0
aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBDb2xvcjQgb2JqZWN0CisgICAgICovCisg
ICAgQ29sb3I0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuICJ7UjogIiArIHRoaXMuciArICIgRzoiICsgdGhpcy5nICsgIiBCOiIgKyB0aGlzLmIgKyAi
IEE6IiArIHRoaXMuYSArICJ9IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhl
IHN0cmluZyAiQ29sb3I0IgorICAgICAqIEByZXR1cm5zICJDb2xvcjQiCisgICAgICovCisgICAg
Q29sb3I0LnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAiQ29sb3I0IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXB1dGUgdGhlIENvbG9y
NCBoYXNoIGNvZGUKKyAgICAgKiBAcmV0dXJucyBhbiB1bmlxdWUgbnVtYmVyIHRoYXQgY2FuIGJl
IHVzZWQgdG8gaGFzaCBDb2xvcjQgb2JqZWN0cworICAgICAqLworICAgIENvbG9yNC5wcm90b3R5
cGUuZ2V0SGFzaENvZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBoYXNoID0gKHRoaXMu
ciAqIDI1NSkgfCAwOworICAgICAgICBoYXNoID0gKGhhc2ggKiAzOTcpIF4gKCh0aGlzLmcgKiAy
NTUpIHwgMCk7CisgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAoKHRoaXMuYiAqIDI1NSkg
fCAwKTsKKyAgICAgICAgaGFzaCA9IChoYXNoICogMzk3KSBeICgodGhpcy5hICogMjU1KSB8IDAp
OworICAgICAgICByZXR1cm4gaGFzaDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgQ29sb3I0IGNvcGllZCBmcm9tIHRoZSBjdXJyZW50IG9uZQorICAgICAqIEByZXR1cm5z
IGEgbmV3IENvbG9yNCBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLmNsb25l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IENvbG9yNCh0aGlzLnIsIHRoaXMu
ZywgdGhpcy5iLCB0aGlzLmEpOworICAgIH07CisgICAgLyoqCisgICAgICogQ29waWVzIHRoZSBn
aXZlbiBDb2xvcjQgdmFsdWVzIGludG8gdGhlIGN1cnJlbnQgb25lCisgICAgICogQHBhcmFtIHNv
dXJjZSBkZWZpbmVzIHRoZSBzb3VyY2UgQ29sb3I0IG9iamVjdAorICAgICAqIEByZXR1cm5zIHRo
ZSBjdXJyZW50IHVwZGF0ZWQgQ29sb3I0IG9iamVjdAorICAgICAqLworICAgIENvbG9yNC5wcm90
b3R5cGUuY29weUZyb20gPSBmdW5jdGlvbiAoc291cmNlKSB7CisgICAgICAgIHRoaXMuciA9IHNv
dXJjZS5yOworICAgICAgICB0aGlzLmcgPSBzb3VyY2UuZzsKKyAgICAgICAgdGhpcy5iID0gc291
cmNlLmI7CisgICAgICAgIHRoaXMuYSA9IHNvdXJjZS5hOworICAgICAgICByZXR1cm4gdGhpczsK
KyAgICB9OworICAgIC8qKgorICAgICAqIENvcGllcyB0aGUgZ2l2ZW4gZmxvYXQgdmFsdWVzIGlu
dG8gdGhlIGN1cnJlbnQgb25lCisgICAgICogQHBhcmFtIHIgZGVmaW5lcyB0aGUgcmVkIGNvbXBv
bmVudCB0byByZWFkIGZyb20KKyAgICAgKiBAcGFyYW0gZyBkZWZpbmVzIHRoZSBncmVlbiBjb21w
b25lbnQgdG8gcmVhZCBmcm9tCisgICAgICogQHBhcmFtIGIgZGVmaW5lcyB0aGUgYmx1ZSBjb21w
b25lbnQgdG8gcmVhZCBmcm9tCisgICAgICogQHBhcmFtIGEgZGVmaW5lcyB0aGUgYWxwaGEgY29t
cG9uZW50IHRvIHJlYWQgZnJvbQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQg
Q29sb3I0IG9iamVjdAorICAgICAqLworICAgIENvbG9yNC5wcm90b3R5cGUuY29weUZyb21GbG9h
dHMgPSBmdW5jdGlvbiAociwgZywgYiwgYSkgeworICAgICAgICB0aGlzLnIgPSByOworICAgICAg
ICB0aGlzLmcgPSBnOworICAgICAgICB0aGlzLmIgPSBiOworICAgICAgICB0aGlzLmEgPSBhOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvcGllcyB0aGUg
Z2l2ZW4gZmxvYXQgdmFsdWVzIGludG8gdGhlIGN1cnJlbnQgb25lCisgICAgICogQHBhcmFtIHIg
ZGVmaW5lcyB0aGUgcmVkIGNvbXBvbmVudCB0byByZWFkIGZyb20KKyAgICAgKiBAcGFyYW0gZyBk
ZWZpbmVzIHRoZSBncmVlbiBjb21wb25lbnQgdG8gcmVhZCBmcm9tCisgICAgICogQHBhcmFtIGIg
ZGVmaW5lcyB0aGUgYmx1ZSBjb21wb25lbnQgdG8gcmVhZCBmcm9tCisgICAgICogQHBhcmFtIGEg
ZGVmaW5lcyB0aGUgYWxwaGEgY29tcG9uZW50IHRvIHJlYWQgZnJvbQorICAgICAqIEByZXR1cm5z
IHRoZSBjdXJyZW50IHVwZGF0ZWQgQ29sb3I0IG9iamVjdAorICAgICAqLworICAgIENvbG9yNC5w
cm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHIsIGcsIGIsIGEpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuY29weUZyb21GbG9hdHMociwgZywgYiwgYSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
b21wdXRlIHRoZSBDb2xvcjQgaGV4YWRlY2ltYWwgY29kZSBhcyBhIHN0cmluZworICAgICAqIEBy
ZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9u
IG9mIHRoZSBDb2xvcjQgb2JqZWN0CisgICAgICovCisgICAgQ29sb3I0LnByb3RvdHlwZS50b0hl
eFN0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGludFIgPSAodGhpcy5yICogMjU1
KSB8IDA7CisgICAgICAgIHZhciBpbnRHID0gKHRoaXMuZyAqIDI1NSkgfCAwOworICAgICAgICB2
YXIgaW50QiA9ICh0aGlzLmIgKiAyNTUpIHwgMDsKKyAgICAgICAgdmFyIGludEEgPSAodGhpcy5h
ICogMjU1KSB8IDA7CisgICAgICAgIHJldHVybiAiIyIgKyBfbWF0aF9zY2FsYXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uVG9IZXgoaW50UikgKyBfbWF0aF9zY2FsYXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uVG9IZXgoaW50RykgKyBfbWF0
aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uVG9IZXgoaW50
QikgKyBfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0u
VG9IZXgoaW50QSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb21wdXRlcyBhIG5ldyBDb2xv
cjQgY29udmVydGVkIGZyb20gdGhlIGN1cnJlbnQgb25lIHRvIGxpbmVhciBzcGFjZQorICAgICAq
IEByZXR1cm5zIGEgbmV3IENvbG9yNCBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90
eXBlLnRvTGluZWFyU3BhY2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBjb252ZXJ0ZWRD
b2xvciA9IG5ldyBDb2xvcjQoKTsKKyAgICAgICAgdGhpcy50b0xpbmVhclNwYWNlVG9SZWYoY29u
dmVydGVkQ29sb3IpOworICAgICAgICByZXR1cm4gY29udmVydGVkQ29sb3I7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGUgQ29sb3I0IHZhbHVlcyB0byBsaW5lYXIgc3BhY2Ug
YW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluICJjb252ZXJ0ZWRDb2xvciIKKyAgICAgKiBAcGFyYW0g
Y29udmVydGVkQ29sb3IgZGVmaW5lcyB0aGUgQ29sb3I0IG9iamVjdCB3aGVyZSB0byBzdG9yZSB0
aGUgbGluZWFyIHNwYWNlIHZlcnNpb24KKyAgICAgKiBAcmV0dXJucyB0aGUgdW5tb2RpZmllZCBD
b2xvcjQKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLnRvTGluZWFyU3BhY2VUb1JlZiA9
IGZ1bmN0aW9uIChjb252ZXJ0ZWRDb2xvcikgeworICAgICAgICBjb252ZXJ0ZWRDb2xvci5yID0g
TWF0aC5wb3codGhpcy5yLCBfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVG9MaW5lYXJTcGFjZSJdKTsKKyAgICAgICAgY29udmVydGVkQ29sb3IuZyA9IE1hdGgu
cG93KHRoaXMuZywgX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlRvTGluZWFyU3BhY2UiXSk7CisgICAgICAgIGNvbnZlcnRlZENvbG9yLmIgPSBNYXRoLnBvdyh0
aGlzLmIsIF9tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb0xp
bmVhclNwYWNlIl0pOworICAgICAgICBjb252ZXJ0ZWRDb2xvci5hID0gdGhpcy5hOworICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXB1dGVzIGEgbmV3IENv
bG9yNCBjb252ZXJ0ZWQgZnJvbSB0aGUgY3VycmVudCBvbmUgdG8gZ2FtbWEgc3BhY2UKKyAgICAg
KiBAcmV0dXJucyBhIG5ldyBDb2xvcjQgb2JqZWN0CisgICAgICovCisgICAgQ29sb3I0LnByb3Rv
dHlwZS50b0dhbW1hU3BhY2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBjb252ZXJ0ZWRD
b2xvciA9IG5ldyBDb2xvcjQoKTsKKyAgICAgICAgdGhpcy50b0dhbW1hU3BhY2VUb1JlZihjb252
ZXJ0ZWRDb2xvcik7CisgICAgICAgIHJldHVybiBjb252ZXJ0ZWRDb2xvcjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIENvbnZlcnRzIHRoZSBDb2xvcjQgdmFsdWVzIHRvIGdhbW1hIHNwYWNlIGFu
ZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiAiY29udmVydGVkQ29sb3IiCisgICAgICogQHBhcmFtIGNv
bnZlcnRlZENvbG9yIGRlZmluZXMgdGhlIENvbG9yNCBvYmplY3Qgd2hlcmUgdG8gc3RvcmUgdGhl
IGdhbW1hIHNwYWNlIHZlcnNpb24KKyAgICAgKiBAcmV0dXJucyB0aGUgdW5tb2RpZmllZCBDb2xv
cjQKKyAgICAgKi8KKyAgICBDb2xvcjQucHJvdG90eXBlLnRvR2FtbWFTcGFjZVRvUmVmID0gZnVu
Y3Rpb24gKGNvbnZlcnRlZENvbG9yKSB7CisgICAgICAgIGNvbnZlcnRlZENvbG9yLnIgPSBNYXRo
LnBvdyh0aGlzLnIsIF9tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJUb0dhbW1hU3BhY2UiXSk7CisgICAgICAgIGNvbnZlcnRlZENvbG9yLmcgPSBNYXRoLnBvdyh0
aGlzLmcsIF9tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb0dh
bW1hU3BhY2UiXSk7CisgICAgICAgIGNvbnZlcnRlZENvbG9yLmIgPSBNYXRoLnBvdyh0aGlzLmIs
IF9tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb0dhbW1hU3Bh
Y2UiXSk7CisgICAgICAgIGNvbnZlcnRlZENvbG9yLmEgPSB0aGlzLmE7CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLy8gU3RhdGljcworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgQ29sb3I0IGZyb20gdGhlIHN0cmluZyBjb250YWluaW5nIHZhbGlkIGhleGFkZWNpbWFs
IHZhbHVlcworICAgICAqIEBwYXJhbSBoZXggZGVmaW5lcyBhIHN0cmluZyBjb250YWluaW5nIHZh
bGlkIGhleGFkZWNpbWFsIHZhbHVlcworICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yNCBvYmpl
Y3QKKyAgICAgKi8KKyAgICBDb2xvcjQuRnJvbUhleFN0cmluZyA9IGZ1bmN0aW9uIChoZXgpIHsK
KyAgICAgICAgaWYgKGhleC5zdWJzdHJpbmcoMCwgMSkgIT09ICIjIiB8fCBoZXgubGVuZ3RoICE9
PSA5KSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yNCgwLjAsIDAuMCwgMC4wLCAwLjAp
OworICAgICAgICB9CisgICAgICAgIHZhciByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygxLCAz
KSwgMTYpOworICAgICAgICB2YXIgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMywgNSksIDE2
KTsKKyAgICAgICAgdmFyIGIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDUsIDcpLCAxNik7Cisg
ICAgICAgIHZhciBhID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg3LCA5KSwgMTYpOworICAgICAg
ICByZXR1cm4gQ29sb3I0LkZyb21JbnRzKHIsIGcsIGIsIGEpOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIG5ldyBDb2xvcjQgb2JqZWN0IHNldCB3aXRoIHRoZSBsaW5lYXJseSBp
bnRlcnBvbGF0ZWQgdmFsdWVzIG9mICJhbW91bnQiIGJldHdlZW4gdGhlIGxlZnQgQ29sb3I0IG9i
amVjdCBhbmQgdGhlIHJpZ2h0IENvbG9yNCBvYmplY3QKKyAgICAgKiBAcGFyYW0gbGVmdCBkZWZp
bmVzIHRoZSBzdGFydCB2YWx1ZQorICAgICAqIEBwYXJhbSByaWdodCBkZWZpbmVzIHRoZSBlbmQg
dmFsdWUKKyAgICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGdyYWRpZW50IGZhY3Rvcgor
ICAgICAqIEByZXR1cm5zIGEgbmV3IENvbG9yNCBvYmplY3QKKyAgICAgKi8KKyAgICBDb2xvcjQu
TGVycCA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYW1vdW50KSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBuZXcgQ29sb3I0KDAuMCwgMC4wLCAwLjAsIDAuMCk7CisgICAgICAgIENvbG9yNC5MZXJw
VG9SZWYobGVmdCwgcmlnaHQsIGFtb3VudCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgZ2l2ZW4gInJlc3VsdCIgd2l0aCB0
aGUgbGluZWFybHkgaW50ZXJwb2xhdGVkIHZhbHVlcyBvZiAiYW1vdW50IiBiZXR3ZWVuIHRoZSBs
ZWZ0IENvbG9yNCBvYmplY3QgYW5kIHRoZSByaWdodCBDb2xvcjQgb2JqZWN0CisgICAgICogQHBh
cmFtIGxlZnQgZGVmaW5lcyB0aGUgc3RhcnQgdmFsdWUKKyAgICAgKiBAcGFyYW0gcmlnaHQgZGVm
aW5lcyB0aGUgZW5kIHZhbHVlCisgICAgICogQHBhcmFtIGFtb3VudCBkZWZpbmVzIHRoZSBncmFk
aWVudCBmYWN0b3IKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIENvbG9yNCBvYmpl
Y3Qgd2hlcmUgdG8gc3RvcmUgZGF0YQorICAgICAqLworICAgIENvbG9yNC5MZXJwVG9SZWYgPSBm
dW5jdGlvbiAobGVmdCwgcmlnaHQsIGFtb3VudCwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC5y
ID0gbGVmdC5yICsgKHJpZ2h0LnIgLSBsZWZ0LnIpICogYW1vdW50OworICAgICAgICByZXN1bHQu
ZyA9IGxlZnQuZyArIChyaWdodC5nIC0gbGVmdC5nKSAqIGFtb3VudDsKKyAgICAgICAgcmVzdWx0
LmIgPSBsZWZ0LmIgKyAocmlnaHQuYiAtIGxlZnQuYikgKiBhbW91bnQ7CisgICAgICAgIHJlc3Vs
dC5hID0gbGVmdC5hICsgKHJpZ2h0LmEgLSBsZWZ0LmEpICogYW1vdW50OworICAgIH07CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBDb2xvcjQgZnJvbSBhIENvbG9yMyBhbmQgYW4gYWxw
aGEgdmFsdWUKKyAgICAgKiBAcGFyYW0gY29sb3IzIGRlZmluZXMgdGhlIHNvdXJjZSBDb2xvcjMg
dG8gcmVhZCBmcm9tCisgICAgICogQHBhcmFtIGFscGhhIGRlZmluZXMgdGhlIGFscGhhIGNvbXBv
bmVudCAoMS4wIGJ5IGRlZmF1bHQpCisgICAgICogQHJldHVybnMgYSBuZXcgQ29sb3I0IG9iamVj
dAorICAgICAqLworICAgIENvbG9yNC5Gcm9tQ29sb3IzID0gZnVuY3Rpb24gKGNvbG9yMywgYWxw
aGEpIHsKKyAgICAgICAgaWYgKGFscGhhID09PSB2b2lkIDApIHsgYWxwaGEgPSAxLjA7IH0KKyAg
ICAgICAgcmV0dXJuIG5ldyBDb2xvcjQoY29sb3IzLnIsIGNvbG9yMy5nLCBjb2xvcjMuYiwgYWxw
aGEpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBDb2xvcjQgZnJvbSB0
aGUgc3RhcnRpbmcgaW5kZXggZWxlbWVudCBvZiB0aGUgZ2l2ZW4gYXJyYXkKKyAgICAgKiBAcGFy
YW0gYXJyYXkgZGVmaW5lcyB0aGUgc291cmNlIGFycmF5IHRvIHJlYWQgZnJvbQorICAgICAqIEBw
YXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGluIHRoZSBzb3VyY2UgYXJyYXkKKyAgICAg
KiBAcmV0dXJucyBhIG5ldyBDb2xvcjQgb2JqZWN0CisgICAgICovCisgICAgQ29sb3I0LkZyb21B
cnJheSA9IGZ1bmN0aW9uIChhcnJheSwgb2Zmc2V0KSB7CisgICAgICAgIGlmIChvZmZzZXQgPT09
IHZvaWQgMCkgeyBvZmZzZXQgPSAwOyB9CisgICAgICAgIHJldHVybiBuZXcgQ29sb3I0KGFycmF5
W29mZnNldF0sIGFycmF5W29mZnNldCArIDFdLCBhcnJheVtvZmZzZXQgKyAyXSwgYXJyYXlbb2Zm
c2V0ICsgM10pOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBDb2xvcjMg
ZnJvbSBpbnRlZ2VyIHZhbHVlcyAoPCAyNTYpCisgICAgICogQHBhcmFtIHIgZGVmaW5lcyB0aGUg
cmVkIGNvbXBvbmVudCB0byByZWFkIGZyb20gKHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1KQorICAg
ICAqIEBwYXJhbSBnIGRlZmluZXMgdGhlIGdyZWVuIGNvbXBvbmVudCB0byByZWFkIGZyb20gKHZh
bHVlIGJldHdlZW4gMCBhbmQgMjU1KQorICAgICAqIEBwYXJhbSBiIGRlZmluZXMgdGhlIGJsdWUg
Y29tcG9uZW50IHRvIHJlYWQgZnJvbSAodmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUpCisgICAgICog
QHBhcmFtIGEgZGVmaW5lcyB0aGUgYWxwaGEgY29tcG9uZW50IHRvIHJlYWQgZnJvbSAodmFsdWUg
YmV0d2VlbiAwIGFuZCAyNTUpCisgICAgICogQHJldHVybnMgYSBuZXcgQ29sb3IzIG9iamVjdAor
ICAgICAqLworICAgIENvbG9yNC5Gcm9tSW50cyA9IGZ1bmN0aW9uIChyLCBnLCBiLCBhKSB7Cisg
ICAgICAgIHJldHVybiBuZXcgQ29sb3I0KHIgLyAyNTUuMCwgZyAvIDI1NS4wLCBiIC8gMjU1LjAs
IGEgLyAyNTUuMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVjayB0aGUgY29udGVudCBv
ZiBhIGdpdmVuIGFycmF5IGFuZCBjb252ZXJ0IGl0IHRvIGFuIGFycmF5IGNvbnRhaW5pbmcgUkdC
QSBkYXRhCisgICAgICogSWYgdGhlIG9yaWdpbmFsIGFycmF5IHdhcyBhbHJlYWR5IGNvbnRhaW5p
bmcgY291bnQgKiA0IHZhbHVlcyB0aGVuIGl0IGlzIHJldHVybmVkIGRpcmVjdGx5CisgICAgICog
QHBhcmFtIGNvbG9ycyBkZWZpbmVzIHRoZSBhcnJheSB0byBjaGVjaworICAgICAqIEBwYXJhbSBj
b3VudCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgUkdCQSBkYXRhIHRvIGV4cGVjdAorICAgICAqIEBy
ZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgY291bnQgKiA0IHZhbHVlcyAoUkdCQSkKKyAgICAg
Ki8KKyAgICBDb2xvcjQuQ2hlY2tDb2xvcnM0ID0gZnVuY3Rpb24gKGNvbG9ycywgY291bnQpIHsK
KyAgICAgICAgLy8gQ2hlY2sgaWYgY29sb3IzIHdhcyB1c2VkCisgICAgICAgIGlmIChjb2xvcnMu
bGVuZ3RoID09PSBjb3VudCAqIDMpIHsKKyAgICAgICAgICAgIHZhciBjb2xvcnM0ID0gW107Cisg
ICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgY29sb3JzLmxlbmd0aDsgaW5k
ZXggKz0gMykgeworICAgICAgICAgICAgICAgIHZhciBuZXdJbmRleCA9IChpbmRleCAvIDMpICog
NDsKKyAgICAgICAgICAgICAgICBjb2xvcnM0W25ld0luZGV4XSA9IGNvbG9yc1tpbmRleF07Cisg
ICAgICAgICAgICAgICAgY29sb3JzNFtuZXdJbmRleCArIDFdID0gY29sb3JzW2luZGV4ICsgMV07
CisgICAgICAgICAgICAgICAgY29sb3JzNFtuZXdJbmRleCArIDJdID0gY29sb3JzW2luZGV4ICsg
Ml07CisgICAgICAgICAgICAgICAgY29sb3JzNFtuZXdJbmRleCArIDNdID0gMS4wOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbG9yczQ7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGNvbG9yczsKKyAgICB9OworICAgIHJldHVybiBDb2xvcjQ7Cit9KCkpOworCisvKioK
KyAqIEBoaWRkZW4KKyAqLwordmFyIFRtcENvbG9ycyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICBmdW5jdGlvbiBUbXBDb2xvcnMoKSB7CisgICAgfQorICAgIFRtcENvbG9ycy5D
b2xvcjMgPSBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFy
cmF5VG9vbHMiXS5CdWlsZEFycmF5KDMsIENvbG9yMy5CbGFjayk7CisgICAgVG1wQ29sb3JzLkNv
bG9yNCA9IF9NaXNjX2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQXJy
YXlUb29scyJdLkJ1aWxkQXJyYXkoMywgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IENvbG9yNCgw
LCAwLCAwLCAwKTsgfSk7CisgICAgcmV0dXJuIFRtcENvbG9yczsKK30oKSk7CisKK19NaXNjX3R5
cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJfVHlwZVN0b3JlIl0uUmVnaXN0
ZXJlZFR5cGVzWyJCQUJZTE9OLkNvbG9yMyJdID0gQ29sb3IzOworX01pc2NfdHlwZVN0b3JlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNb
IkJBQllMT04uQ29sb3I0Il0gPSBDb2xvcjQ7CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01h
dGhzL21hdGguY29uc3RhbnRzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vTWF0aHMvbWF0aC5jb25zdGFudHMudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFRvR2Ft
bWFTcGFjZSwgVG9MaW5lYXJTcGFjZSwgRXBzaWxvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJUb0dhbW1hU3BhY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRvR2FtbWFT
cGFjZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUb0xpbmVhclNwYWNlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBUb0xpbmVhclNwYWNlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVwc2lsb24iLCBm
dW5jdGlvbigpIHsgcmV0dXJuIEVwc2lsb247IH0pOworLyoqCisgKiBDb25zdGFudCB1c2VkIHRv
IGNvbnZlcnQgYSB2YWx1ZSB0byBnYW1tYSBzcGFjZQorICogQGlnbm9yZW5hbWluZworICovCit2
YXIgVG9HYW1tYVNwYWNlID0gMSAvIDIuMjsKKy8qKgorICogQ29uc3RhbnQgdXNlZCB0byBjb252
ZXJ0IGEgdmFsdWUgdG8gbGluZWFyIHNwYWNlCisgKiBAaWdub3JlbmFtaW5nCisgKi8KK3ZhciBU
b0xpbmVhclNwYWNlID0gMi4yOworLyoqCisgKiBDb25zdGFudCB1c2VkIHRvIGRlZmluZSB0aGUg
bWluaW1hbCBudW1iZXIgdmFsdWUgaW4gQmFieWxvbi5qcworICogQGlnbm9yZW5hbWluZworICov
Cit2YXIgRXBzaWxvbiA9IDAuMDAxOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGhz
L21hdGguZnJ1c3R1bS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NYXRocy9tYXRoLmZydXN0dW0udHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBGcnVzdHVtICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZydXN0dW0iLCBmdW5jdGlvbigpIHsgcmV0
dXJuIEZydXN0dW07IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRoX3BsYW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21h
dGgucGxhbmUgKi8gIi4vTWF0aHMvbWF0aC5wbGFuZS50cyIpOworCisvKioKKyAqIFJlcHJhc2Vu
dHMgYSBjYW1lcmEgZnJ1c3R1bQorICovCit2YXIgRnJ1c3R1bSA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBGcnVzdHVtKCkgeworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBHZXRzIHRoZSBwbGFuZXMgcmVwcmVzZW50aW5nIHRoZSBmcnVzdHVtCisgICAgICogQHBh
cmFtIHRyYW5zZm9ybSBtYXRyaXggdG8gYmUgYXBwbGllZCB0byB0aGUgcmV0dXJuZWQgcGxhbmVz
CisgICAgICogQHJldHVybnMgYSBuZXcgYXJyYXkgb2YgNiBGcnVzdHVtIHBsYW5lcyBjb21wdXRl
ZCBieSB0aGUgZ2l2ZW4gdHJhbnNmb3JtYXRpb24gbWF0cml4LgorICAgICAqLworICAgIEZydXN0
dW0uR2V0UGxhbmVzID0gZnVuY3Rpb24gKHRyYW5zZm9ybSkgeworICAgICAgICB2YXIgZnJ1c3R1
bVBsYW5lcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgNjsgaW5k
ZXgrKykgeworICAgICAgICAgICAgZnJ1c3R1bVBsYW5lcy5wdXNoKG5ldyBfbWF0aF9wbGFuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQbGFuZSJdKDAuMCwgMC4wLCAwLjAsIDAuMCkp
OworICAgICAgICB9CisgICAgICAgIEZydXN0dW0uR2V0UGxhbmVzVG9SZWYodHJhbnNmb3JtLCBm
cnVzdHVtUGxhbmVzKTsKKyAgICAgICAgcmV0dXJuIGZydXN0dW1QbGFuZXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXRzIHRoZSBuZWFyIGZydXN0dW0gcGxhbmUgdHJhbnNmb3JtZWQgYnkg
dGhlIHRyYW5zZm9ybSBtYXRyaXgKKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXN1bHRpbmcgZnJ1c3R1bSBwbGFuZQor
ICAgICAqIEBwYXJhbSBmcnVzdHVtUGxhbmUgdGhlIHJlc3VsaW5nIGZydXN0dW0gcGxhbmUKKyAg
ICAgKi8KKyAgICBGcnVzdHVtLkdldE5lYXJQbGFuZVRvUmVmID0gZnVuY3Rpb24gKHRyYW5zZm9y
bSwgZnJ1c3R1bVBsYW5lKSB7CisgICAgICAgIHZhciBtID0gdHJhbnNmb3JtLm07CisgICAgICAg
IGZydXN0dW1QbGFuZS5ub3JtYWwueCA9IG1bM10gKyBtWzJdOworICAgICAgICBmcnVzdHVtUGxh
bmUubm9ybWFsLnkgPSBtWzddICsgbVs2XTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbC56
ID0gbVsxMV0gKyBtWzEwXTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLmQgPSBtWzE1XSArIG1bMTRd
OworICAgICAgICBmcnVzdHVtUGxhbmUubm9ybWFsaXplKCk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXRzIHRoZSBmYXIgZnJ1c3R1bSBwbGFuZSB0cmFuc2Zvcm1lZCBieSB0aGUgdHJhbnNm
b3JtIG1hdHJpeAorICAgICAqIEBwYXJhbSB0cmFuc2Zvcm0gdHJhbnNmb3JtYXRpb24gbWF0cml4
IHRvIGJlIGFwcGxpZWQgdG8gdGhlIHJlc3VsdGluZyBmcnVzdHVtIHBsYW5lCisgICAgICogQHBh
cmFtIGZydXN0dW1QbGFuZSB0aGUgcmVzdWxpbmcgZnJ1c3R1bSBwbGFuZQorICAgICAqLworICAg
IEZydXN0dW0uR2V0RmFyUGxhbmVUb1JlZiA9IGZ1bmN0aW9uICh0cmFuc2Zvcm0sIGZydXN0dW1Q
bGFuZSkgeworICAgICAgICB2YXIgbSA9IHRyYW5zZm9ybS5tOworICAgICAgICBmcnVzdHVtUGxh
bmUubm9ybWFsLnggPSBtWzNdIC0gbVsyXTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbC55
ID0gbVs3XSAtIG1bNl07CisgICAgICAgIGZydXN0dW1QbGFuZS5ub3JtYWwueiA9IG1bMTFdIC0g
bVsxMF07CisgICAgICAgIGZydXN0dW1QbGFuZS5kID0gbVsxNV0gLSBtWzE0XTsKKyAgICAgICAg
ZnJ1c3R1bVBsYW5lLm5vcm1hbGl6ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0
aGUgbGVmdCBmcnVzdHVtIHBsYW5lIHRyYW5zZm9ybWVkIGJ5IHRoZSB0cmFuc2Zvcm0gbWF0cml4
CisgICAgICogQHBhcmFtIHRyYW5zZm9ybSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdG8gYmUgYXBw
bGllZCB0byB0aGUgcmVzdWx0aW5nIGZydXN0dW0gcGxhbmUKKyAgICAgKiBAcGFyYW0gZnJ1c3R1
bVBsYW5lIHRoZSByZXN1bGluZyBmcnVzdHVtIHBsYW5lCisgICAgICovCisgICAgRnJ1c3R1bS5H
ZXRMZWZ0UGxhbmVUb1JlZiA9IGZ1bmN0aW9uICh0cmFuc2Zvcm0sIGZydXN0dW1QbGFuZSkgewor
ICAgICAgICB2YXIgbSA9IHRyYW5zZm9ybS5tOworICAgICAgICBmcnVzdHVtUGxhbmUubm9ybWFs
LnggPSBtWzNdICsgbVswXTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbC55ID0gbVs3XSAr
IG1bNF07CisgICAgICAgIGZydXN0dW1QbGFuZS5ub3JtYWwueiA9IG1bMTFdICsgbVs4XTsKKyAg
ICAgICAgZnJ1c3R1bVBsYW5lLmQgPSBtWzE1XSArIG1bMTJdOworICAgICAgICBmcnVzdHVtUGxh
bmUubm9ybWFsaXplKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByaWdodCBm
cnVzdHVtIHBsYW5lIHRyYW5zZm9ybWVkIGJ5IHRoZSB0cmFuc2Zvcm0gbWF0cml4CisgICAgICog
QHBhcmFtIHRyYW5zZm9ybSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdG8gYmUgYXBwbGllZCB0byB0
aGUgcmVzdWx0aW5nIGZydXN0dW0gcGxhbmUKKyAgICAgKiBAcGFyYW0gZnJ1c3R1bVBsYW5lIHRo
ZSByZXN1bGluZyBmcnVzdHVtIHBsYW5lCisgICAgICovCisgICAgRnJ1c3R1bS5HZXRSaWdodFBs
YW5lVG9SZWYgPSBmdW5jdGlvbiAodHJhbnNmb3JtLCBmcnVzdHVtUGxhbmUpIHsKKyAgICAgICAg
dmFyIG0gPSB0cmFuc2Zvcm0ubTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbC54ID0gbVsz
XSAtIG1bMF07CisgICAgICAgIGZydXN0dW1QbGFuZS5ub3JtYWwueSA9IG1bN10gLSBtWzRdOwor
ICAgICAgICBmcnVzdHVtUGxhbmUubm9ybWFsLnogPSBtWzExXSAtIG1bOF07CisgICAgICAgIGZy
dXN0dW1QbGFuZS5kID0gbVsxNV0gLSBtWzEyXTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1h
bGl6ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdG9wIGZydXN0dW0gcGxh
bmUgdHJhbnNmb3JtZWQgYnkgdGhlIHRyYW5zZm9ybSBtYXRyaXgKKyAgICAgKiBAcGFyYW0gdHJh
bnNmb3JtIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXN1bHRp
bmcgZnJ1c3R1bSBwbGFuZQorICAgICAqIEBwYXJhbSBmcnVzdHVtUGxhbmUgdGhlIHJlc3VsaW5n
IGZydXN0dW0gcGxhbmUKKyAgICAgKi8KKyAgICBGcnVzdHVtLkdldFRvcFBsYW5lVG9SZWYgPSBm
dW5jdGlvbiAodHJhbnNmb3JtLCBmcnVzdHVtUGxhbmUpIHsKKyAgICAgICAgdmFyIG0gPSB0cmFu
c2Zvcm0ubTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbC54ID0gbVszXSAtIG1bMV07Cisg
ICAgICAgIGZydXN0dW1QbGFuZS5ub3JtYWwueSA9IG1bN10gLSBtWzVdOworICAgICAgICBmcnVz
dHVtUGxhbmUubm9ybWFsLnogPSBtWzExXSAtIG1bOV07CisgICAgICAgIGZydXN0dW1QbGFuZS5k
ID0gbVsxNV0gLSBtWzEzXTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbGl6ZSgpOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgYm90dG9tIGZydXN0dW0gcGxhbmUgdHJhbnNm
b3JtZWQgYnkgdGhlIHRyYW5zZm9ybSBtYXRyaXgKKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtIHRy
YW5zZm9ybWF0aW9uIG1hdHJpeCB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXN1bHRpbmcgZnJ1c3R1
bSBwbGFuZQorICAgICAqIEBwYXJhbSBmcnVzdHVtUGxhbmUgdGhlIHJlc3VsaW5nIGZydXN0dW0g
cGxhbmUKKyAgICAgKi8KKyAgICBGcnVzdHVtLkdldEJvdHRvbVBsYW5lVG9SZWYgPSBmdW5jdGlv
biAodHJhbnNmb3JtLCBmcnVzdHVtUGxhbmUpIHsKKyAgICAgICAgdmFyIG0gPSB0cmFuc2Zvcm0u
bTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbC54ID0gbVszXSArIG1bMV07CisgICAgICAg
IGZydXN0dW1QbGFuZS5ub3JtYWwueSA9IG1bN10gKyBtWzVdOworICAgICAgICBmcnVzdHVtUGxh
bmUubm9ybWFsLnogPSBtWzExXSArIG1bOV07CisgICAgICAgIGZydXN0dW1QbGFuZS5kID0gbVsx
NV0gKyBtWzEzXTsKKyAgICAgICAgZnJ1c3R1bVBsYW5lLm5vcm1hbGl6ZSgpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2ZW4gYXJyYXkgImZydXN0dW1QbGFuZXMiIHdpdGgg
dGhlIDYgRnJ1c3R1bSBwbGFuZXMgY29tcHV0ZWQgYnkgdGhlIGdpdmVuIHRyYW5zZm9ybWF0aW9u
IG1hdHJpeC4KKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0
byBiZSBhcHBsaWVkIHRvIHRoZSByZXN1bHRpbmcgZnJ1c3R1bSBwbGFuZXMKKyAgICAgKiBAcGFy
YW0gZnJ1c3R1bVBsYW5lcyB0aGUgcmVzdWxpbmcgZnJ1c3R1bSBwbGFuZXMKKyAgICAgKi8KKyAg
ICBGcnVzdHVtLkdldFBsYW5lc1RvUmVmID0gZnVuY3Rpb24gKHRyYW5zZm9ybSwgZnJ1c3R1bVBs
YW5lcykgeworICAgICAgICAvLyBOZWFyCisgICAgICAgIEZydXN0dW0uR2V0TmVhclBsYW5lVG9S
ZWYodHJhbnNmb3JtLCBmcnVzdHVtUGxhbmVzWzBdKTsKKyAgICAgICAgLy8gRmFyCisgICAgICAg
IEZydXN0dW0uR2V0RmFyUGxhbmVUb1JlZih0cmFuc2Zvcm0sIGZydXN0dW1QbGFuZXNbMV0pOwor
ICAgICAgICAvLyBMZWZ0CisgICAgICAgIEZydXN0dW0uR2V0TGVmdFBsYW5lVG9SZWYodHJhbnNm
b3JtLCBmcnVzdHVtUGxhbmVzWzJdKTsKKyAgICAgICAgLy8gUmlnaHQKKyAgICAgICAgRnJ1c3R1
bS5HZXRSaWdodFBsYW5lVG9SZWYodHJhbnNmb3JtLCBmcnVzdHVtUGxhbmVzWzNdKTsKKyAgICAg
ICAgLy8gVG9wCisgICAgICAgIEZydXN0dW0uR2V0VG9wUGxhbmVUb1JlZih0cmFuc2Zvcm0sIGZy
dXN0dW1QbGFuZXNbNF0pOworICAgICAgICAvLyBCb3R0b20KKyAgICAgICAgRnJ1c3R1bS5HZXRC
b3R0b21QbGFuZVRvUmVmKHRyYW5zZm9ybSwgZnJ1c3R1bVBsYW5lc1s1XSk7CisgICAgfTsKKyAg
ICByZXR1cm4gRnJ1c3R1bTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0
aHMvbWF0aC5mdW5jdGlvbnMudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9NYXRocy9tYXRoLmZ1bmN0aW9ucy50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZXh0cmFj
dE1pbkFuZE1heEluZGV4ZWQsIGV4dHJhY3RNaW5BbmRNYXggKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiZXh0cmFjdE1pbkFuZE1heEluZGV4ZWQiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIGV4dHJhY3RNaW5BbmRNYXhJbmRleGVkOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImV4
dHJhY3RNaW5BbmRNYXgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV4dHJhY3RNaW5BbmRNYXg7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tYXRoLnZlY3RvciAqLyAi
Li9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworCisvKioKKyAqIEV4dHJhY3RzIG1pbmltdW0gYW5k
IG1heGltdW0gdmFsdWVzIGZyb20gYSBsaXN0IG9mIGluZGV4ZWQgcG9zaXRpb25zCisgKiBAcGFy
YW0gcG9zaXRpb25zIGRlZmluZXMgdGhlIHBvc2l0aW9ucyB0byB1c2UKKyAqIEBwYXJhbSBpbmRp
Y2VzIGRlZmluZXMgdGhlIGluZGljZXMgdG8gdGhlIHBvc2l0aW9ucworICogQHBhcmFtIGluZGV4
U3RhcnQgZGVmaW5lcyB0aGUgc3RhcnQgaW5kZXgKKyAqIEBwYXJhbSBpbmRleENvdW50IGRlZmlu
ZXMgdGhlIGVuZCBpbmRleAorICogQHBhcmFtIGJpYXMgZGVmaW5lcyBiaWFzIHZhbHVlIHRvIGFk
ZCB0byB0aGUgcmVzdWx0CisgKiBAcmV0dXJuIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzCisg
Ki8KK2Z1bmN0aW9uIGV4dHJhY3RNaW5BbmRNYXhJbmRleGVkKHBvc2l0aW9ucywgaW5kaWNlcywg
aW5kZXhTdGFydCwgaW5kZXhDb3VudCwgYmlhcykgeworICAgIGlmIChiaWFzID09PSB2b2lkIDAp
IHsgYmlhcyA9IG51bGw7IH0KKyAgICB2YXIgbWluaW11bSA9IG5ldyBfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKE51bWJlci5NQVhfVkFMVUUsIE51
bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUUpOworICAgIHZhciBtYXhpbXVtID0gbmV3
IF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oLU51
bWJlci5NQVhfVkFMVUUsIC1OdW1iZXIuTUFYX1ZBTFVFLCAtTnVtYmVyLk1BWF9WQUxVRSk7Cisg
ICAgZm9yICh2YXIgaW5kZXggPSBpbmRleFN0YXJ0OyBpbmRleCA8IGluZGV4U3RhcnQgKyBpbmRl
eENvdW50OyBpbmRleCsrKSB7CisgICAgICAgIHZhciBvZmZzZXQgPSBpbmRpY2VzW2luZGV4XSAq
IDM7CisgICAgICAgIHZhciB4ID0gcG9zaXRpb25zW29mZnNldF07CisgICAgICAgIHZhciB5ID0g
cG9zaXRpb25zW29mZnNldCArIDFdOworICAgICAgICB2YXIgeiA9IHBvc2l0aW9uc1tvZmZzZXQg
KyAyXTsKKyAgICAgICAgbWluaW11bS5taW5pbWl6ZUluUGxhY2VGcm9tRmxvYXRzKHgsIHksIHop
OworICAgICAgICBtYXhpbXVtLm1heGltaXplSW5QbGFjZUZyb21GbG9hdHMoeCwgeSwgeik7Cisg
ICAgfQorICAgIGlmIChiaWFzKSB7CisgICAgICAgIG1pbmltdW0ueCAtPSBtaW5pbXVtLnggKiBi
aWFzLnggKyBiaWFzLnk7CisgICAgICAgIG1pbmltdW0ueSAtPSBtaW5pbXVtLnkgKiBiaWFzLngg
KyBiaWFzLnk7CisgICAgICAgIG1pbmltdW0ueiAtPSBtaW5pbXVtLnogKiBiaWFzLnggKyBiaWFz
Lnk7CisgICAgICAgIG1heGltdW0ueCArPSBtYXhpbXVtLnggKiBiaWFzLnggKyBiaWFzLnk7Cisg
ICAgICAgIG1heGltdW0ueSArPSBtYXhpbXVtLnkgKiBiaWFzLnggKyBiaWFzLnk7CisgICAgICAg
IG1heGltdW0ueiArPSBtYXhpbXVtLnogKiBiaWFzLnggKyBiaWFzLnk7CisgICAgfQorICAgIHJl
dHVybiB7CisgICAgICAgIG1pbmltdW06IG1pbmltdW0sCisgICAgICAgIG1heGltdW06IG1heGlt
dW0KKyAgICB9OworfQorLyoqCisgKiBFeHRyYWN0cyBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVl
cyBmcm9tIGEgbGlzdCBvZiBwb3NpdGlvbnMKKyAqIEBwYXJhbSBwb3NpdGlvbnMgZGVmaW5lcyB0
aGUgcG9zaXRpb25zIHRvIHVzZQorICogQHBhcmFtIHN0YXJ0IGRlZmluZXMgdGhlIHN0YXJ0IGlu
ZGV4IGluIHRoZSBwb3NpdGlvbnMgYXJyYXkKKyAqIEBwYXJhbSBjb3VudCBkZWZpbmVzIHRoZSBu
dW1iZXIgb2YgcG9zaXRpb25zIHRvIGhhbmRsZQorICogQHBhcmFtIGJpYXMgZGVmaW5lcyBiaWFz
IHZhbHVlIHRvIGFkZCB0byB0aGUgcmVzdWx0CisgKiBAcGFyYW0gc3RyaWRlIGRlZmluZXMgdGhl
IHN0cmlkZSBzaXplIHRvIHVzZSAoZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9zaXRpb25zIGluIHRo
ZSBwb3NpdGlvbnMgYXJyYXkpCisgKiBAcmV0dXJuIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVz
CisgKi8KK2Z1bmN0aW9uIGV4dHJhY3RNaW5BbmRNYXgocG9zaXRpb25zLCBzdGFydCwgY291bnQs
IGJpYXMsIHN0cmlkZSkgeworICAgIGlmIChiaWFzID09PSB2b2lkIDApIHsgYmlhcyA9IG51bGw7
IH0KKyAgICB2YXIgbWluaW11bSA9IG5ldyBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdKE51bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUUs
IE51bWJlci5NQVhfVkFMVUUpOworICAgIHZhciBtYXhpbXVtID0gbmV3IF9tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oLU51bWJlci5NQVhfVkFMVUUs
IC1OdW1iZXIuTUFYX1ZBTFVFLCAtTnVtYmVyLk1BWF9WQUxVRSk7CisgICAgaWYgKCFzdHJpZGUp
IHsKKyAgICAgICAgc3RyaWRlID0gMzsKKyAgICB9CisgICAgZm9yICh2YXIgaW5kZXggPSBzdGFy
dCwgb2Zmc2V0ID0gc3RhcnQgKiBzdHJpZGU7IGluZGV4IDwgc3RhcnQgKyBjb3VudDsgaW5kZXgr
Kywgb2Zmc2V0ICs9IHN0cmlkZSkgeworICAgICAgICB2YXIgeCA9IHBvc2l0aW9uc1tvZmZzZXRd
OworICAgICAgICB2YXIgeSA9IHBvc2l0aW9uc1tvZmZzZXQgKyAxXTsKKyAgICAgICAgdmFyIHog
PSBwb3NpdGlvbnNbb2Zmc2V0ICsgMl07CisgICAgICAgIG1pbmltdW0ubWluaW1pemVJblBsYWNl
RnJvbUZsb2F0cyh4LCB5LCB6KTsKKyAgICAgICAgbWF4aW11bS5tYXhpbWl6ZUluUGxhY2VGcm9t
RmxvYXRzKHgsIHksIHopOworICAgIH0KKyAgICBpZiAoYmlhcykgeworICAgICAgICBtaW5pbXVt
LnggLT0gbWluaW11bS54ICogYmlhcy54ICsgYmlhcy55OworICAgICAgICBtaW5pbXVtLnkgLT0g
bWluaW11bS55ICogYmlhcy54ICsgYmlhcy55OworICAgICAgICBtaW5pbXVtLnogLT0gbWluaW11
bS56ICogYmlhcy54ICsgYmlhcy55OworICAgICAgICBtYXhpbXVtLnggKz0gbWF4aW11bS54ICog
Ymlhcy54ICsgYmlhcy55OworICAgICAgICBtYXhpbXVtLnkgKz0gbWF4aW11bS55ICogYmlhcy54
ICsgYmlhcy55OworICAgICAgICBtYXhpbXVtLnogKz0gbWF4aW11bS56ICogYmlhcy54ICsgYmlh
cy55OworICAgIH0KKyAgICByZXR1cm4geworICAgICAgICBtaW5pbXVtOiBtaW5pbXVtLAorICAg
ICAgICBtYXhpbXVtOiBtYXhpbXVtCisgICAgfTsKK30KKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vTWF0aHMvbWF0aC5wYXRoLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL01hdGhzL21hdGgucGF0aC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE9yaWVudGF0aW9uLCBCZXppZXJD
dXJ2ZSwgQW5nbGUsIEFyYzIsIFBhdGgyLCBQYXRoM0QsIEN1cnZlMyAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJPcmllbnRhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
T3JpZW50YXRpb247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmV6aWVyQ3VydmUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEJlemllckN1cnZlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuZ2xlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBBbmdsZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmMyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBBcmMyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhdGgyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBQYXRoMjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQYXRoM0Qi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFBhdGgzRDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDdXJ2
ZTMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEN1cnZlMzsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL21hdGguc2NhbGFyICovICIuL01hdGhzL21hdGguc2NhbGFyLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGgudmVjdG9yICov
ICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21h
dGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL21hdGguY29uc3RhbnRzICovICIuL01hdGhzL21hdGguY29uc3RhbnRzLnRz
Iik7CisKKworCisvKioKKyAqIERlZmluZXMgcG90ZW50aWFsIG9yaWVudGF0aW9uIGZvciBiYWNr
IGZhY2UgY3VsbGluZworICovCit2YXIgT3JpZW50YXRpb247CisoZnVuY3Rpb24gKE9yaWVudGF0
aW9uKSB7CisgICAgLyoqCisgICAgICogQ2xvY2t3aXNlCisgICAgICovCisgICAgT3JpZW50YXRp
b25bT3JpZW50YXRpb25bIkNXIl0gPSAwXSA9ICJDVyI7CisgICAgLyoqIENvdW50ZXIgY2xvY2t3
aXNlICovCisgICAgT3JpZW50YXRpb25bT3JpZW50YXRpb25bIkNDVyJdID0gMV0gPSAiQ0NXIjsK
K30pKE9yaWVudGF0aW9uIHx8IChPcmllbnRhdGlvbiA9IHt9KSk7CisvKiogQ2xhc3MgdXNlZCB0
byByZXByZXNlbnQgYSBCZXppZXIgY3VydmUgKi8KK3ZhciBCZXppZXJDdXJ2ZSA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBCZXppZXJDdXJ2ZSgpIHsKKyAgICB9
CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY3ViaWMgQmV6aWVyIGludGVycG9sYXRlZCB2
YWx1ZSAoZmxvYXQpIGF0ICJ0IiAoZmxvYXQpIGZyb20gdGhlIGdpdmVuIHgxLCB5MSwgeDIsIHky
IGZsb2F0cworICAgICAqIEBwYXJhbSB0IGRlZmluZXMgdGhlIHRpbWUKKyAgICAgKiBAcGFyYW0g
eDEgZGVmaW5lcyB0aGUgbGVmdCBjb29yZGluYXRlIG9uIFggYXhpcworICAgICAqIEBwYXJhbSB5
MSBkZWZpbmVzIHRoZSBsZWZ0IGNvb3JkaW5hdGUgb24gWSBheGlzCisgICAgICogQHBhcmFtIHgy
IGRlZmluZXMgdGhlIHJpZ2h0IGNvb3JkaW5hdGUgb24gWCBheGlzCisgICAgICogQHBhcmFtIHky
IGRlZmluZXMgdGhlIHJpZ2h0IGNvb3JkaW5hdGUgb24gWSBheGlzCisgICAgICogQHJldHVybnMg
dGhlIGludGVycG9sYXRlZCB2YWx1ZQorICAgICAqLworICAgIEJlemllckN1cnZlLkludGVycG9s
YXRlID0gZnVuY3Rpb24gKHQsIHgxLCB5MSwgeDIsIHkyKSB7CisgICAgICAgIC8vIEV4dHJhY3Qg
WCAod2hpY2ggaXMgZXF1YWwgdG8gdGltZSBoZXJlKQorICAgICAgICB2YXIgZjAgPSAxIC0gMyAq
IHgyICsgMyAqIHgxOworICAgICAgICB2YXIgZjEgPSAzICogeDIgLSA2ICogeDE7CisgICAgICAg
IHZhciBmMiA9IDMgKiB4MTsKKyAgICAgICAgdmFyIHJlZmluZWRUID0gdDsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgICAgIHZhciByZWZpbmVkVDIgPSBy
ZWZpbmVkVCAqIHJlZmluZWRUOworICAgICAgICAgICAgdmFyIHJlZmluZWRUMyA9IHJlZmluZWRU
MiAqIHJlZmluZWRUOworICAgICAgICAgICAgdmFyIHggPSBmMCAqIHJlZmluZWRUMyArIGYxICog
cmVmaW5lZFQyICsgZjIgKiByZWZpbmVkVDsKKyAgICAgICAgICAgIHZhciBzbG9wZSA9IDEuMCAv
ICgzLjAgKiBmMCAqIHJlZmluZWRUMiArIDIuMCAqIGYxICogcmVmaW5lZFQgKyBmMik7CisgICAg
ICAgICAgICByZWZpbmVkVCAtPSAoeCAtIHQpICogc2xvcGU7CisgICAgICAgICAgICByZWZpbmVk
VCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHJlZmluZWRUKSk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gUmVzb2x2ZSBjdWJpYyBiZXppZXIgZm9yIHRoZSBnaXZlbiB4CisgICAgICAgIHJldHVy
biAzICogTWF0aC5wb3coMSAtIHJlZmluZWRULCAyKSAqIHJlZmluZWRUICogeTEgKworICAgICAg
ICAgICAgMyAqICgxIC0gcmVmaW5lZFQpICogTWF0aC5wb3cocmVmaW5lZFQsIDIpICogeTIgKwor
ICAgICAgICAgICAgTWF0aC5wb3cocmVmaW5lZFQsIDMpOworICAgIH07CisgICAgcmV0dXJuIEJl
emllckN1cnZlOworfSgpKTsKKworLyoqCisgKiBEZWZpbmVzIGFuZ2xlIHJlcHJlc2VudGF0aW9u
CisgKi8KK3ZhciBBbmdsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGFuIEFuZ2xlIG9iamVjdCBvZiAicmFkaWFucyIgcmFkaWFucyAoZmxv
YXQpLgorICAgICAqIEBwYXJhbSByYWRpYW5zIHRoZSBhbmdsZSBpbiByYWRpYW5zCisgICAgICov
CisgICAgZnVuY3Rpb24gQW5nbGUocmFkaWFucykgeworICAgICAgICB0aGlzLl9yYWRpYW5zID0g
cmFkaWFuczsKKyAgICAgICAgaWYgKHRoaXMuX3JhZGlhbnMgPCAwLjApIHsKKyAgICAgICAgICAg
IHRoaXMuX3JhZGlhbnMgKz0gKDIuMCAqIE1hdGguUEkpOworICAgICAgICB9CisgICAgfQorICAg
IC8qKgorICAgICAqIEdldCB2YWx1ZSBpbiBkZWdyZWVzCisgICAgICogQHJldHVybnMgdGhlIEFu
Z2xlIHZhbHVlIGluIGRlZ3JlZXMgKGZsb2F0KQorICAgICAqLworICAgIEFuZ2xlLnByb3RvdHlw
ZS5kZWdyZWVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fcmFkaWFucyAq
IDE4MC4wIC8gTWF0aC5QSTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCB2YWx1ZSBpbiBy
YWRpYW5zCisgICAgICogQHJldHVybnMgdGhlIEFuZ2xlIHZhbHVlIGluIHJhZGlhbnMgKGZsb2F0
KQorICAgICAqLworICAgIEFuZ2xlLnByb3RvdHlwZS5yYWRpYW5zID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fcmFkaWFuczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdl
dHMgYSBuZXcgQW5nbGUgb2JqZWN0IHZhbHVlZCB3aXRoIHRoZSBhbmdsZSB2YWx1ZSBpbiByYWRp
YW5zIGJldHdlZW4gdGhlIHR3byBnaXZlbiB2ZWN0b3JzCisgICAgICogQHBhcmFtIGEgZGVmaW5l
cyBmaXJzdCB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gYiBkZWZpbmVzIHNlY29uZCB2ZWN0b3IKKyAg
ICAgKiBAcmV0dXJucyBhIG5ldyBBbmdsZQorICAgICAqLworICAgIEFuZ2xlLkJldHdlZW5Ud29Q
b2ludHMgPSBmdW5jdGlvbiAoYSwgYikgeworICAgICAgICB2YXIgZGVsdGEgPSBiLnN1YnRyYWN0
KGEpOworICAgICAgICB2YXIgdGhldGEgPSBNYXRoLmF0YW4yKGRlbHRhLnksIGRlbHRhLngpOwor
ICAgICAgICByZXR1cm4gbmV3IEFuZ2xlKHRoZXRhKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEdldHMgYSBuZXcgQW5nbGUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGZsb2F0IGluIHJhZGlhbnMK
KyAgICAgKiBAcGFyYW0gcmFkaWFucyBkZWZpbmVzIHRoZSBhbmdsZSB2YWx1ZSBpbiByYWRpYW5z
CisgICAgICogQHJldHVybnMgYSBuZXcgQW5nbGUKKyAgICAgKi8KKyAgICBBbmdsZS5Gcm9tUmFk
aWFucyA9IGZ1bmN0aW9uIChyYWRpYW5zKSB7CisgICAgICAgIHJldHVybiBuZXcgQW5nbGUocmFk
aWFucyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbmV3IEFuZ2xlIG9iamVjdCBm
cm9tIHRoZSBnaXZlbiBmbG9hdCBpbiBkZWdyZWVzCisgICAgICogQHBhcmFtIGRlZ3JlZXMgZGVm
aW5lcyB0aGUgYW5nbGUgdmFsdWUgaW4gZGVncmVlcworICAgICAqIEByZXR1cm5zIGEgbmV3IEFu
Z2xlCisgICAgICovCisgICAgQW5nbGUuRnJvbURlZ3JlZXMgPSBmdW5jdGlvbiAoZGVncmVlcykg
eworICAgICAgICByZXR1cm4gbmV3IEFuZ2xlKGRlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApOwor
ICAgIH07CisgICAgcmV0dXJuIEFuZ2xlOworfSgpKTsKKworLyoqCisgKiBUaGlzIHJlcHJlc2Vu
dHMgYW4gYXJjIGluIGEgMmQgc3BhY2UuCisgKi8KK3ZhciBBcmMyID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gQXJjIG9iamVjdCBmcm9t
IHRoZSB0aHJlZSBnaXZlbiBwb2ludHMgOiBzdGFydCwgbWlkZGxlIGFuZCBlbmQuCisgICAgICog
QHBhcmFtIHN0YXJ0UG9pbnQgRGVmaW5lcyB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlIGFyYworICAg
ICAqIEBwYXJhbSBtaWRQb2ludCBEZWZpbmVzIHRoZSBtaWRsbGUgcG9pbnQgb2YgdGhlIGFyYwor
ICAgICAqIEBwYXJhbSBlbmRQb2ludCBEZWZpbmVzIHRoZSBlbmQgcG9pbnQgb2YgdGhlIGFyYwor
ICAgICAqLworICAgIGZ1bmN0aW9uIEFyYzIoCisgICAgLyoqIERlZmluZXMgdGhlIHN0YXJ0IHBv
aW50IG9mIHRoZSBhcmMgKi8KKyAgICBzdGFydFBvaW50LCAKKyAgICAvKiogRGVmaW5lcyB0aGUg
bWlkIHBvaW50IG9mIHRoZSBhcmMgKi8KKyAgICBtaWRQb2ludCwgCisgICAgLyoqIERlZmluZXMg
dGhlIGVuZCBwb2ludCBvZiB0aGUgYXJjICovCisgICAgZW5kUG9pbnQpIHsKKyAgICAgICAgdGhp
cy5zdGFydFBvaW50ID0gc3RhcnRQb2ludDsKKyAgICAgICAgdGhpcy5taWRQb2ludCA9IG1pZFBv
aW50OworICAgICAgICB0aGlzLmVuZFBvaW50ID0gZW5kUG9pbnQ7CisgICAgICAgIHZhciB0ZW1w
ID0gTWF0aC5wb3cobWlkUG9pbnQueCwgMikgKyBNYXRoLnBvdyhtaWRQb2ludC55LCAyKTsKKyAg
ICAgICAgdmFyIHN0YXJ0VG9NaWQgPSAoTWF0aC5wb3coc3RhcnRQb2ludC54LCAyKSArIE1hdGgu
cG93KHN0YXJ0UG9pbnQueSwgMikgLSB0ZW1wKSAvIDIuOworICAgICAgICB2YXIgbWlkVG9FbmQg
PSAodGVtcCAtIE1hdGgucG93KGVuZFBvaW50LngsIDIpIC0gTWF0aC5wb3coZW5kUG9pbnQueSwg
MikpIC8gMi47CisgICAgICAgIHZhciBkZXQgPSAoc3RhcnRQb2ludC54IC0gbWlkUG9pbnQueCkg
KiAobWlkUG9pbnQueSAtIGVuZFBvaW50LnkpIC0gKG1pZFBvaW50LnggLSBlbmRQb2ludC54KSAq
IChzdGFydFBvaW50LnkgLSBtaWRQb2ludC55KTsKKyAgICAgICAgdGhpcy5jZW50ZXJQb2ludCA9
IG5ldyBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJd
KChzdGFydFRvTWlkICogKG1pZFBvaW50LnkgLSBlbmRQb2ludC55KSAtIG1pZFRvRW5kICogKHN0
YXJ0UG9pbnQueSAtIG1pZFBvaW50LnkpKSAvIGRldCwgKChzdGFydFBvaW50LnggLSBtaWRQb2lu
dC54KSAqIG1pZFRvRW5kIC0gKG1pZFBvaW50LnggLSBlbmRQb2ludC54KSAqIHN0YXJ0VG9NaWQp
IC8gZGV0KTsKKyAgICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLmNlbnRlclBvaW50LnN1YnRyYWN0
KHRoaXMuc3RhcnRQb2ludCkubGVuZ3RoKCk7CisgICAgICAgIHRoaXMuc3RhcnRBbmdsZSA9IEFu
Z2xlLkJldHdlZW5Ud29Qb2ludHModGhpcy5jZW50ZXJQb2ludCwgdGhpcy5zdGFydFBvaW50KTsK
KyAgICAgICAgdmFyIGExID0gdGhpcy5zdGFydEFuZ2xlLmRlZ3JlZXMoKTsKKyAgICAgICAgdmFy
IGEyID0gQW5nbGUuQmV0d2VlblR3b1BvaW50cyh0aGlzLmNlbnRlclBvaW50LCB0aGlzLm1pZFBv
aW50KS5kZWdyZWVzKCk7CisgICAgICAgIHZhciBhMyA9IEFuZ2xlLkJldHdlZW5Ud29Qb2ludHMo
dGhpcy5jZW50ZXJQb2ludCwgdGhpcy5lbmRQb2ludCkuZGVncmVlcygpOworICAgICAgICAvLyBh
bmdsZXMgY29ycmVjdGlvbgorICAgICAgICBpZiAoYTIgLSBhMSA+ICsxODAuMCkgeworICAgICAg
ICAgICAgYTIgLT0gMzYwLjA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGEyIC0gYTEgPCAtMTgw
LjApIHsKKyAgICAgICAgICAgIGEyICs9IDM2MC4wOworICAgICAgICB9CisgICAgICAgIGlmIChh
MyAtIGEyID4gKzE4MC4wKSB7CisgICAgICAgICAgICBhMyAtPSAzNjAuMDsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoYTMgLSBhMiA8IC0xODAuMCkgeworICAgICAgICAgICAgYTMgKz0gMzYwLjA7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IChhMiAtIGExKSA8IDAgPyBP
cmllbnRhdGlvbi5DVyA6IE9yaWVudGF0aW9uLkNDVzsKKyAgICAgICAgdGhpcy5hbmdsZSA9IEFu
Z2xlLkZyb21EZWdyZWVzKHRoaXMub3JpZW50YXRpb24gPT09IE9yaWVudGF0aW9uLkNXID8gYTEg
LSBhMyA6IGEzIC0gYTEpOworICAgIH0KKyAgICByZXR1cm4gQXJjMjsKK30oKSk7CisKKy8qKgor
ICogUmVwcmVzZW50cyBhIDJEIHBhdGggbWFkZSB1cCBvZiBtdWx0aXBsZSAyRCBwb2ludHMKKyAq
LwordmFyIFBhdGgyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBQYXRoMiBvYmplY3QgZnJvbSB0aGUgc3RhcnRpbmcgMkQgY29vcmRpbmF0
ZXMgeCBhbmQgeS4KKyAgICAgKiBAcGFyYW0geCB0aGUgc3RhcnRpbmcgcG9pbnRzIHggdmFsdWUK
KyAgICAgKiBAcGFyYW0geSB0aGUgc3RhcnRpbmcgcG9pbnRzIHkgdmFsdWUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBQYXRoMih4LCB5KSB7CisgICAgICAgIHRoaXMuX3BvaW50cyA9IG5ldyBBcnJh
eSgpOworICAgICAgICB0aGlzLl9sZW5ndGggPSAwLjA7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBJZiB0aGUgcGF0aCBzdGFydCBhbmQgZW5kIHBvaW50IGFyZSB0aGUgc2FtZQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcG9pbnRzLnB1
c2gobmV3IF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3Iy
Il0oeCwgeSkpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGRzIGEgbmV3IHNlZ21lbnQgdW50
aWwgdGhlIGdpdmVuIGNvb3JkaW5hdGVzICh4LCB5KSB0byB0aGUgY3VycmVudCBQYXRoMi4KKyAg
ICAgKiBAcGFyYW0geCB0aGUgYWRkZWQgcG9pbnRzIHggdmFsdWUKKyAgICAgKiBAcGFyYW0geSB0
aGUgYWRkZWQgcG9pbnRzIHkgdmFsdWUKKyAgICAgKiBAcmV0dXJucyB0aGUgdXBkYXRlZCBQYXRo
Mi4KKyAgICAgKi8KKyAgICBQYXRoMi5wcm90b3R5cGUuYWRkTGluZVRvID0gZnVuY3Rpb24gKHgs
IHkpIHsKKyAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgfQorICAgICAgICB2YXIgbmV3UG9pbnQgPSBuZXcgX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjIiXSh4LCB5KTsKKyAgICAgICAgdmFy
IHByZXZpb3VzUG9pbnQgPSB0aGlzLl9wb2ludHNbdGhpcy5fcG9pbnRzLmxlbmd0aCAtIDFdOwor
ICAgICAgICB0aGlzLl9wb2ludHMucHVzaChuZXdQb2ludCk7CisgICAgICAgIHRoaXMuX2xlbmd0
aCArPSBuZXdQb2ludC5zdWJ0cmFjdChwcmV2aW91c1BvaW50KS5sZW5ndGgoKTsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIF9udW1iZXJPZlNlZ21l
bnRzXyBzZWdtZW50cyBhY2NvcmRpbmcgdG8gdGhlIGFyYyBkZWZpbml0aW9uIChtaWRkbGUgcG9p
bnQgY29vcmRpbmF0ZXMsIGVuZCBwb2ludCBjb29yZGluYXRlcywgdGhlIGFyYyBzdGFydCBwb2lu
dCBiZWluZyB0aGUgY3VycmVudCBQYXRoMiBsYXN0IHBvaW50KSB0byB0aGUgY3VycmVudCBQYXRo
Mi4KKyAgICAgKiBAcGFyYW0gbWlkWCBtaWRkbGUgcG9pbnQgeCB2YWx1ZQorICAgICAqIEBwYXJh
bSBtaWRZIG1pZGRsZSBwb2ludCB5IHZhbHVlCisgICAgICogQHBhcmFtIGVuZFggZW5kIHBvaW50
IHggdmFsdWUKKyAgICAgKiBAcGFyYW0gZW5kWSBlbmQgcG9pbnQgeSB2YWx1ZQorICAgICAqIEBw
YXJhbSBudW1iZXJPZlNlZ21lbnRzIChkZWZhdWx0OiAzNikKKyAgICAgKiBAcmV0dXJucyB0aGUg
dXBkYXRlZCBQYXRoMi4KKyAgICAgKi8KKyAgICBQYXRoMi5wcm90b3R5cGUuYWRkQXJjVG8gPSBm
dW5jdGlvbiAobWlkWCwgbWlkWSwgZW5kWCwgZW5kWSwgbnVtYmVyT2ZTZWdtZW50cykgeworICAg
ICAgICBpZiAobnVtYmVyT2ZTZWdtZW50cyA9PT0gdm9pZCAwKSB7IG51bWJlck9mU2VnbWVudHMg
PSAzNjsgfQorICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICB9CisgICAgICAgIHZhciBzdGFydFBvaW50ID0gdGhpcy5fcG9pbnRzW3Ro
aXMuX3BvaW50cy5sZW5ndGggLSAxXTsKKyAgICAgICAgdmFyIG1pZFBvaW50ID0gbmV3IF9tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0obWlkWCwgbWlk
WSk7CisgICAgICAgIHZhciBlbmRQb2ludCA9IG5ldyBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKGVuZFgsIGVuZFkpOworICAgICAgICB2YXIgYXJj
ID0gbmV3IEFyYzIoc3RhcnRQb2ludCwgbWlkUG9pbnQsIGVuZFBvaW50KTsKKyAgICAgICAgdmFy
IGluY3JlbWVudCA9IGFyYy5hbmdsZS5yYWRpYW5zKCkgLyBudW1iZXJPZlNlZ21lbnRzOworICAg
ICAgICBpZiAoYXJjLm9yaWVudGF0aW9uID09PSBPcmllbnRhdGlvbi5DVykgeworICAgICAgICAg
ICAgaW5jcmVtZW50ICo9IC0xOworICAgICAgICB9CisgICAgICAgIHZhciBjdXJyZW50QW5nbGUg
PSBhcmMuc3RhcnRBbmdsZS5yYWRpYW5zKCkgKyBpbmNyZW1lbnQ7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbnVtYmVyT2ZTZWdtZW50czsgaSsrKSB7CisgICAgICAgICAgICB2YXIgeCA9
IE1hdGguY29zKGN1cnJlbnRBbmdsZSkgKiBhcmMucmFkaXVzICsgYXJjLmNlbnRlclBvaW50Lng7
CisgICAgICAgICAgICB2YXIgeSA9IE1hdGguc2luKGN1cnJlbnRBbmdsZSkgKiBhcmMucmFkaXVz
ICsgYXJjLmNlbnRlclBvaW50Lnk7CisgICAgICAgICAgICB0aGlzLmFkZExpbmVUbyh4LCB5KTsK
KyAgICAgICAgICAgIGN1cnJlbnRBbmdsZSArPSBpbmNyZW1lbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9zZXMgdGhlIFBhdGgy
LgorICAgICAqIEByZXR1cm5zIHRoZSBQYXRoMi4KKyAgICAgKi8KKyAgICBQYXRoMi5wcm90b3R5
cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzdW0g
b2YgdGhlIGRpc3RhbmNlIGJldHdlZW4gZWFjaCBzZXF1ZW50aWFsIHBvaW50IGluIHRoZSBwYXRo
CisgICAgICogQHJldHVybnMgdGhlIFBhdGgyIHRvdGFsIGxlbmd0aCAoZmxvYXQpLgorICAgICAq
LworICAgIFBhdGgyLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh
ciByZXN1bHQgPSB0aGlzLl9sZW5ndGg7CisgICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHsKKyAg
ICAgICAgICAgIHZhciBsYXN0UG9pbnQgPSB0aGlzLl9wb2ludHNbdGhpcy5fcG9pbnRzLmxlbmd0
aCAtIDFdOworICAgICAgICAgICAgdmFyIGZpcnN0UG9pbnQgPSB0aGlzLl9wb2ludHNbMF07Cisg
ICAgICAgICAgICByZXN1bHQgKz0gKGZpcnN0UG9pbnQuc3VidHJhY3QobGFzdFBvaW50KS5sZW5n
dGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEdldHMgdGhlIHBvaW50cyB3aGljaCBjb25zdHJ1Y3QgdGhlIHBhdGgKKyAgICAg
KiBAcmV0dXJucyB0aGUgUGF0aDIgaW50ZXJuYWwgYXJyYXkgb2YgcG9pbnRzLgorICAgICAqLwor
ICAgIFBhdGgyLnByb3RvdHlwZS5nZXRQb2ludHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9wb2ludHM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXRyZWl2ZXMgdGhl
IHBvaW50IGF0IHRoZSBkaXN0YW5jZSBhd2F5cyBmcm9tIHRoZSBzdGFydGluZyBwb2ludAorICAg
ICAqIEBwYXJhbSBub3JtYWxpemVkTGVuZ3RoUG9zaXRpb24gdGhlIGxlbmd0aCBhbG9uZyB0aGUg
cGF0aCB0byByZXRyZWl2ZSB0aGUgcG9pbnQgZnJvbQorICAgICAqIEByZXR1cm5zIGEgbmV3IFZl
Y3RvcjIgbG9jYXRlZCBhdCBhIHBlcmNlbnRhZ2Ugb2YgdGhlIFBhdGgyIHRvdGFsIGxlbmd0aCBv
biB0aGlzIHBhdGguCisgICAgICovCisgICAgUGF0aDIucHJvdG90eXBlLmdldFBvaW50QXRMZW5n
dGhQb3NpdGlvbiA9IGZ1bmN0aW9uIChub3JtYWxpemVkTGVuZ3RoUG9zaXRpb24pIHsKKyAgICAg
ICAgaWYgKG5vcm1hbGl6ZWRMZW5ndGhQb3NpdGlvbiA8IDAgfHwgbm9ybWFsaXplZExlbmd0aFBv
c2l0aW9uID4gMSkgeworICAgICAgICAgICAgcmV0dXJuIF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0uWmVybygpOworICAgICAgICB9CisgICAgICAg
IHZhciBsZW5ndGhQb3NpdGlvbiA9IG5vcm1hbGl6ZWRMZW5ndGhQb3NpdGlvbiAqIHRoaXMubGVu
Z3RoKCk7CisgICAgICAgIHZhciBwcmV2aW91c09mZnNldCA9IDA7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5fcG9pbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIg
aiA9IChpICsgMSkgJSB0aGlzLl9wb2ludHMubGVuZ3RoOworICAgICAgICAgICAgdmFyIGEgPSB0
aGlzLl9wb2ludHNbaV07CisgICAgICAgICAgICB2YXIgYiA9IHRoaXMuX3BvaW50c1tqXTsKKyAg
ICAgICAgICAgIHZhciBiVG9BID0gYi5zdWJ0cmFjdChhKTsKKyAgICAgICAgICAgIHZhciBuZXh0
T2Zmc2V0ID0gKGJUb0EubGVuZ3RoKCkgKyBwcmV2aW91c09mZnNldCk7CisgICAgICAgICAgICBp
ZiAobGVuZ3RoUG9zaXRpb24gPj0gcHJldmlvdXNPZmZzZXQgJiYgbGVuZ3RoUG9zaXRpb24gPD0g
bmV4dE9mZnNldCkgeworICAgICAgICAgICAgICAgIHZhciBkaXIgPSBiVG9BLm5vcm1hbGl6ZSgp
OworICAgICAgICAgICAgICAgIHZhciBsb2NhbE9mZnNldCA9IGxlbmd0aFBvc2l0aW9uIC0gcHJl
dmlvdXNPZmZzZXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKGEueCArIChkaXIueCAqIGxvY2Fs
T2Zmc2V0KSwgYS55ICsgKGRpci55ICogbG9jYWxPZmZzZXQpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gbmV4dE9mZnNldDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3Rv
cjIiXS5aZXJvKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHBhdGgg
c3RhcnRpbmcgZnJvbSBhbiB4IGFuZCB5IHBvc2l0aW9uCisgICAgICogQHBhcmFtIHggc3RhcnRp
bmcgeCB2YWx1ZQorICAgICAqIEBwYXJhbSB5IHN0YXJ0aW5nIHkgdmFsdWUKKyAgICAgKiBAcmV0
dXJucyBhIG5ldyBQYXRoMiBzdGFydGluZyBhdCB0aGUgY29vcmRpbmF0ZXMgKHgsIHkpLgorICAg
ICAqLworICAgIFBhdGgyLlN0YXJ0aW5nQXQgPSBmdW5jdGlvbiAoeCwgeSkgeworICAgICAgICBy
ZXR1cm4gbmV3IFBhdGgyKHgsIHkpOworICAgIH07CisgICAgcmV0dXJuIFBhdGgyOworfSgpKTsK
KworLyoqCisgKiBSZXByZXNlbnRzIGEgM0QgcGF0aCBtYWRlIHVwIG9mIG11bHRpcGxlIDNEIHBv
aW50cworICovCit2YXIgUGF0aDNEID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAg
IC8qKgorICAgICogbmV3IFBhdGgzRChwYXRoLCBub3JtYWwsIHJhdykKKyAgICAqIENyZWF0ZXMg
YSBQYXRoM0QuIEEgUGF0aDNEIGlzIGEgbG9naWNhbCBtYXRoIG9iamVjdCwgc28gbm90IGEgbWVz
aC4KKyAgICAqIHBsZWFzZSByZWFkIHRoZSBkZXNjcmlwdGlvbiBpbiB0aGUgdHV0b3JpYWwgOiBo
dHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3BhdGgzZAorICAgICog
QHBhcmFtIHBhdGggYW4gYXJyYXkgb2YgVmVjdG9yMywgdGhlIGN1cnZlIGF4aXMgb2YgdGhlIFBh
dGgzRAorICAgICogQHBhcmFtIGZpcnN0Tm9ybWFsIChvcHRpb25zKSBWZWN0b3IzLCB0aGUgZmly
c3Qgd2FudGVkIG5vcm1hbCB0byB0aGUgY3VydmUuIEV4ICgwLCAxLCAwKSBmb3IgYSB2ZXJ0aWNh
bCBub3JtYWwuCisgICAgKiBAcGFyYW0gcmF3IChvcHRpb25hbCwgZGVmYXVsdCBmYWxzZSkgOiBi
b29sZWFuLCBpZiB0cnVlIHRoZSByZXR1cm5lZCBQYXRoM0QgaXNuJ3Qgbm9ybWFsaXplZC4gVXNl
ZnVsIHRvIGRlcGljdCBwYXRoIGFjY2VsZXJhdGlvbiBvciBzcGVlZC4KKyAgICAqLworICAgIGZ1
bmN0aW9uIFBhdGgzRCgKKyAgICAvKioKKyAgICAgKiBhbiBhcnJheSBvZiBWZWN0b3IzLCB0aGUg
Y3VydmUgYXhpcyBvZiB0aGUgUGF0aDNECisgICAgICovCisgICAgcGF0aCwgZmlyc3ROb3JtYWws
IHJhdykgeworICAgICAgICBpZiAoZmlyc3ROb3JtYWwgPT09IHZvaWQgMCkgeyBmaXJzdE5vcm1h
bCA9IG51bGw7IH0KKyAgICAgICAgdGhpcy5wYXRoID0gcGF0aDsKKyAgICAgICAgdGhpcy5fY3Vy
dmUgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fZGlzdGFuY2VzID0gbmV3IEFycmF5KCk7
CisgICAgICAgIHRoaXMuX3RhbmdlbnRzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX25v
cm1hbHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fYmlub3JtYWxzID0gbmV3IEFycmF5
KCk7CisgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgcGF0aC5sZW5ndGg7IHArKykgeworICAg
ICAgICAgICAgdGhpcy5fY3VydmVbcF0gPSBwYXRoW3BdLmNsb25lKCk7IC8vIGhhcmQgY29weQor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX3JhdyA9IHJhdyB8fCBmYWxzZTsKKyAgICAgICAgdGhp
cy5fY29tcHV0ZShmaXJzdE5vcm1hbCk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJldHVybnMg
dGhlIFBhdGgzRCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMgZGVzaWduaW5nIGl0cyBjdXJ2
ZS4KKyAgICAgKiBAcmV0dXJucyB0aGUgUGF0aDNEIGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9y
MyBkZXNpZ25pbmcgaXRzIGN1cnZlLgorICAgICAqLworICAgIFBhdGgzRC5wcm90b3R5cGUuZ2V0
Q3VydmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9jdXJ2ZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gYXJyYXkgcG9wdWxhdGVkIHdpdGggdGFuZ2Vu
dCB2ZWN0b3JzIG9uIGVhY2ggUGF0aDNEIGN1cnZlIHBvaW50LgorICAgICAqIEByZXR1cm5zIGFu
IGFycmF5IHBvcHVsYXRlZCB3aXRoIHRhbmdlbnQgdmVjdG9ycyBvbiBlYWNoIFBhdGgzRCBjdXJ2
ZSBwb2ludC4KKyAgICAgKi8KKyAgICBQYXRoM0QucHJvdG90eXBlLmdldFRhbmdlbnRzID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdGFuZ2VudHM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBSZXR1cm5zIGFuIGFycmF5IHBvcHVsYXRlZCB3aXRoIG5vcm1hbCB2ZWN0b3Jz
IG9uIGVhY2ggUGF0aDNEIGN1cnZlIHBvaW50LgorICAgICAqIEByZXR1cm5zIGFuIGFycmF5IHBv
cHVsYXRlZCB3aXRoIG5vcm1hbCB2ZWN0b3JzIG9uIGVhY2ggUGF0aDNEIGN1cnZlIHBvaW50Lgor
ICAgICAqLworICAgIFBhdGgzRC5wcm90b3R5cGUuZ2V0Tm9ybWFscyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX25vcm1hbHM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIGFuIGFycmF5IHBvcHVsYXRlZCB3aXRoIGJpbm9ybWFsIHZlY3RvcnMgb24gZWFjaCBQ
YXRoM0QgY3VydmUgcG9pbnQuCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgcG9wdWxhdGVkIHdp
dGggYmlub3JtYWwgdmVjdG9ycyBvbiBlYWNoIFBhdGgzRCBjdXJ2ZSBwb2ludC4KKyAgICAgKi8K
KyAgICBQYXRoM0QucHJvdG90eXBlLmdldEJpbm9ybWFscyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2Jpbm9ybWFsczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVy
bnMgYW4gYXJyYXkgcG9wdWxhdGVkIHdpdGggZGlzdGFuY2VzIChmbG9hdCkgb2YgdGhlIGktdGgg
cG9pbnQgZnJvbSB0aGUgZmlyc3QgY3VydmUgcG9pbnQuCisgICAgICogQHJldHVybnMgYW4gYXJy
YXkgcG9wdWxhdGVkIHdpdGggZGlzdGFuY2VzIChmbG9hdCkgb2YgdGhlIGktdGggcG9pbnQgZnJv
bSB0aGUgZmlyc3QgY3VydmUgcG9pbnQuCisgICAgICovCisgICAgUGF0aDNELnByb3RvdHlwZS5n
ZXREaXN0YW5jZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9kaXN0YW5j
ZXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZXMgdGhlIFBhdGgzRCB0YW5nZW50LCBu
b3JtYWwsIGJpbm9ybWFsIGFuZCBkaXN0YW5jZSByZWNvbXB1dGF0aW9uLgorICAgICAqIEBwYXJh
bSBwYXRoIHBhdGggd2hpY2ggYWxsIHZhbHVlcyBhcmUgY29waWVkIGludG8gdGhlIGN1cnZlcyBw
b2ludHMKKyAgICAgKiBAcGFyYW0gZmlyc3ROb3JtYWwgd2hpY2ggc2hvdWxkIGJlIHByb2plY3Rl
ZCBvbnRvIHRoZSBjdXJ2ZQorICAgICAqIEByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCB1cGRhdGVk
LgorICAgICAqLworICAgIFBhdGgzRC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKHBhdGgs
IGZpcnN0Tm9ybWFsKSB7CisgICAgICAgIGlmIChmaXJzdE5vcm1hbCA9PT0gdm9pZCAwKSB7IGZp
cnN0Tm9ybWFsID0gbnVsbDsgfQorICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHBhdGgubGVu
Z3RoOyBwKyspIHsKKyAgICAgICAgICAgIHRoaXMuX2N1cnZlW3BdLnggPSBwYXRoW3BdLng7Cisg
ICAgICAgICAgICB0aGlzLl9jdXJ2ZVtwXS55ID0gcGF0aFtwXS55OworICAgICAgICAgICAgdGhp
cy5fY3VydmVbcF0ueiA9IHBhdGhbcF0uejsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb21w
dXRlKGZpcnN0Tm9ybWFsKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvLyBw
cml2YXRlIGZ1bmN0aW9uIGNvbXB1dGUoKSA6IGNvbXB1dGVzIHRhbmdlbnRzLCBub3JtYWxzIGFu
ZCBiaW5vcm1hbHMKKyAgICBQYXRoM0QucHJvdG90eXBlLl9jb21wdXRlID0gZnVuY3Rpb24gKGZp
cnN0Tm9ybWFsKSB7CisgICAgICAgIHZhciBsID0gdGhpcy5fY3VydmUubGVuZ3RoOworICAgICAg
ICAvLyBmaXJzdCBhbmQgbGFzdCB0YW5nZW50cworICAgICAgICB0aGlzLl90YW5nZW50c1swXSA9
IHRoaXMuX2dldEZpcnN0Tm9uTnVsbFZlY3RvcigwKTsKKyAgICAgICAgaWYgKCF0aGlzLl9yYXcp
IHsKKyAgICAgICAgICAgIHRoaXMuX3RhbmdlbnRzWzBdLm5vcm1hbGl6ZSgpOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX3RhbmdlbnRzW2wgLSAxXSA9IHRoaXMuX2N1cnZlW2wgLSAxXS5zdWJ0
cmFjdCh0aGlzLl9jdXJ2ZVtsIC0gMl0pOworICAgICAgICBpZiAoIXRoaXMuX3JhdykgeworICAg
ICAgICAgICAgdGhpcy5fdGFuZ2VudHNbbCAtIDFdLm5vcm1hbGl6ZSgpOworICAgICAgICB9Cisg
ICAgICAgIC8vIG5vcm1hbHMgYW5kIGJpbm9ybWFscyBhdCBmaXJzdCBwb2ludCA6IGFyYml0cmFy
eSB2ZWN0b3Igd2l0aCBfbm9ybWFsVmVjdG9yKCkKKyAgICAgICAgdmFyIHRnMCA9IHRoaXMuX3Rh
bmdlbnRzWzBdOworICAgICAgICB2YXIgcHAwID0gdGhpcy5fbm9ybWFsVmVjdG9yKHRnMCwgZmly
c3ROb3JtYWwpOworICAgICAgICB0aGlzLl9ub3JtYWxzWzBdID0gcHAwOworICAgICAgICBpZiAo
IXRoaXMuX3JhdykgeworICAgICAgICAgICAgdGhpcy5fbm9ybWFsc1swXS5ub3JtYWxpemUoKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9iaW5vcm1hbHNbMF0gPSBfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKHRnMCwgdGhpcy5fbm9y
bWFsc1swXSk7CisgICAgICAgIGlmICghdGhpcy5fcmF3KSB7CisgICAgICAgICAgICB0aGlzLl9i
aW5vcm1hbHNbMF0ubm9ybWFsaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGlzdGFu
Y2VzWzBdID0gMC4wOworICAgICAgICAvLyBub3JtYWxzIGFuZCBiaW5vcm1hbHMgOiBuZXh0IHBv
aW50cworICAgICAgICB2YXIgcHJldjsgLy8gcHJldmlvdXMgdmVjdG9yIChzZWdtZW50KQorICAg
ICAgICB2YXIgY3VyOyAvLyBjdXJyZW50IHZlY3RvciAoc2VnbWVudCkKKyAgICAgICAgdmFyIGN1
clRhbmc7IC8vIGN1cnJlbnQgdGFuZ2VudAorICAgICAgICAvLyBwcmV2aW91cyBub3JtYWwKKyAg
ICAgICAgdmFyIHByZXZCaW5vcjsgLy8gcHJldmlvdXMgYmlub3JtYWwKKyAgICAgICAgZm9yICh2
YXIgaSA9IDE7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgIC8vIHRhbmdlbnRzCisgICAgICAg
ICAgICBwcmV2ID0gdGhpcy5fZ2V0TGFzdE5vbk51bGxWZWN0b3IoaSk7CisgICAgICAgICAgICBp
ZiAoaSA8IGwgLSAxKSB7CisgICAgICAgICAgICAgICAgY3VyID0gdGhpcy5fZ2V0Rmlyc3ROb25O
dWxsVmVjdG9yKGkpOworICAgICAgICAgICAgICAgIHRoaXMuX3RhbmdlbnRzW2ldID0gcHJldi5h
ZGQoY3VyKTsKKyAgICAgICAgICAgICAgICB0aGlzLl90YW5nZW50c1tpXS5ub3JtYWxpemUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlc1tpXSA9IHRoaXMuX2Rp
c3RhbmNlc1tpIC0gMV0gKyBwcmV2Lmxlbmd0aCgpOworICAgICAgICAgICAgLy8gbm9ybWFscyBh
bmQgYmlub3JtYWxzCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LmNzLmNtdS5lZHUvYWZzL2Fu
ZHJldy9zY3MvY3MvMTUtNDYyL3dlYi9vbGQvYXNzdDJjYW1lcmEuaHRtbAorICAgICAgICAgICAg
Y3VyVGFuZyA9IHRoaXMuX3RhbmdlbnRzW2ldOworICAgICAgICAgICAgcHJldkJpbm9yID0gdGhp
cy5fYmlub3JtYWxzW2kgLSAxXTsKKyAgICAgICAgICAgIHRoaXMuX25vcm1hbHNbaV0gPSBfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKHBy
ZXZCaW5vciwgY3VyVGFuZyk7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3JhdykgeworICAgICAg
ICAgICAgICAgIHRoaXMuX25vcm1hbHNbaV0ubm9ybWFsaXplKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl9iaW5vcm1hbHNbaV0gPSBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKGN1clRhbmcsIHRoaXMuX25vcm1hbHNb
aV0pOworICAgICAgICAgICAgaWYgKCF0aGlzLl9yYXcpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9iaW5vcm1hbHNbaV0ubm9ybWFsaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworICAgIC8vIHByaXZhdGUgZnVuY3Rpb24gZ2V0Rmlyc3ROb25OdWxsVmVjdG9yKGluZGV4
KQorICAgIC8vIHJldHVybnMgdGhlIGZpcnN0IG5vbiBudWxsIHZlY3RvciBmcm9tIGluZGV4IDog
Y3VydmVbaW5kZXggKyBOXS5zdWJ0cmFjdChjdXJ2ZVtpbmRleF0pCisgICAgUGF0aDNELnByb3Rv
dHlwZS5fZ2V0Rmlyc3ROb25OdWxsVmVjdG9yID0gZnVuY3Rpb24gKGluZGV4KSB7CisgICAgICAg
IHZhciBpID0gMTsKKyAgICAgICAgdmFyIG5OVmVjdG9yID0gdGhpcy5fY3VydmVbaW5kZXggKyBp
XS5zdWJ0cmFjdCh0aGlzLl9jdXJ2ZVtpbmRleF0pOworICAgICAgICB3aGlsZSAobk5WZWN0b3Iu
bGVuZ3RoKCkgPT09IDAgJiYgaW5kZXggKyBpICsgMSA8IHRoaXMuX2N1cnZlLmxlbmd0aCkgewor
ICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgbk5WZWN0b3IgPSB0aGlzLl9jdXJ2ZVtpbmRl
eCArIGldLnN1YnRyYWN0KHRoaXMuX2N1cnZlW2luZGV4XSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG5OVmVjdG9yOworICAgIH07CisgICAgLy8gcHJpdmF0ZSBmdW5jdGlvbiBnZXRMYXN0
Tm9uTnVsbFZlY3RvcihpbmRleCkKKyAgICAvLyByZXR1cm5zIHRoZSBsYXN0IG5vbiBudWxsIHZl
Y3RvciBmcm9tIGluZGV4IDogY3VydmVbaW5kZXhdLnN1YnRyYWN0KGN1cnZlW2luZGV4IC0gTl0p
CisgICAgUGF0aDNELnByb3RvdHlwZS5fZ2V0TGFzdE5vbk51bGxWZWN0b3IgPSBmdW5jdGlvbiAo
aW5kZXgpIHsKKyAgICAgICAgdmFyIGkgPSAxOworICAgICAgICB2YXIgbkxWZWN0b3IgPSB0aGlz
Ll9jdXJ2ZVtpbmRleF0uc3VidHJhY3QodGhpcy5fY3VydmVbaW5kZXggLSBpXSk7CisgICAgICAg
IHdoaWxlIChuTFZlY3Rvci5sZW5ndGgoKSA9PT0gMCAmJiBpbmRleCA+IGkgKyAxKSB7CisgICAg
ICAgICAgICBpKys7CisgICAgICAgICAgICBuTFZlY3RvciA9IHRoaXMuX2N1cnZlW2luZGV4XS5z
dWJ0cmFjdCh0aGlzLl9jdXJ2ZVtpbmRleCAtIGldKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbkxWZWN0b3I7CisgICAgfTsKKyAgICAvLyBwcml2YXRlIGZ1bmN0aW9uIG5vcm1hbFZlY3Rv
cih2MCwgdnQsIHZhKSA6CisgICAgLy8gcmV0dXJucyBhbiBhcmJpdHJhcnkgcG9pbnQgaW4gdGhl
IHBsYW5lIGRlZmluZWQgYnkgdGhlIHBvaW50IHYwIGFuZCB0aGUgdmVjdG9yIHZ0IG9ydGhvZ29u
YWwgdG8gdGhpcyBwbGFuZQorICAgIC8vIGlmIHZhIGlzIHBhc3NlZCwgaXQgcmV0dXJucyB0aGUg
dmEgcHJvamVjdGlvbiBvbiB0aGUgcGxhbmUgb3J0aG9nb25hbCB0byB2dCBhdCB0aGUgcG9pbnQg
djAKKyAgICBQYXRoM0QucHJvdG90eXBlLl9ub3JtYWxWZWN0b3IgPSBmdW5jdGlvbiAodnQsIHZh
KSB7CisgICAgICAgIHZhciBub3JtYWwwOworICAgICAgICB2YXIgdGdsID0gdnQubGVuZ3RoKCk7
CisgICAgICAgIGlmICh0Z2wgPT09IDAuMCkgeworICAgICAgICAgICAgdGdsID0gMS4wOworICAg
ICAgICB9CisgICAgICAgIGlmICh2YSA9PT0gdW5kZWZpbmVkIHx8IHZhID09PSBudWxsKSB7Cisg
ICAgICAgICAgICB2YXIgcG9pbnQ7CisgICAgICAgICAgICBpZiAoIV9tYXRoX3NjYWxhcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRoaW5FcHNpbG9uKE1hdGguYWJz
KHZ0LnkpIC8gdGdsLCAxLjAsIF9tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJFcHNpbG9uIl0pKSB7IC8vIHNlYXJjaCBmb3IgYSBwb2ludCBpbiB0aGUgcGxhbmUK
KyAgICAgICAgICAgICAgICBwb2ludCA9IG5ldyBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAuMCwgLTEuMCwgMC4wKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKCFfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siU2NhbGFyIl0uV2l0aGluRXBzaWxvbihNYXRoLmFicyh2dC54KSAvIHRnbCwgMS4w
LCBfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRXBzaWxvbiJd
KSkgeworICAgICAgICAgICAgICAgIHBvaW50ID0gbmV3IF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0oMS4wLCAwLjAsIDAuMCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmICghX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlNjYWxhciJdLldpdGhpbkVwc2lsb24oTWF0aC5hYnModnQueikgLyB0Z2ws
IDEuMCwgX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkVwc2ls
b24iXSkpIHsKKyAgICAgICAgICAgICAgICBwb2ludCA9IG5ldyBfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAuMCwgMC4wLCAxLjApOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcG9pbnQgPSBfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vcm1hbDAgPSBfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNyb3NzKHZ0LCBwb2ludCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBub3JtYWwwID0gX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Dcm9zcyh2dCwgdmEpOwor
ICAgICAgICAgICAgX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZl
Y3RvcjMiXS5Dcm9zc1RvUmVmKG5vcm1hbDAsIHZ0LCBub3JtYWwwKTsKKyAgICAgICAgfQorICAg
ICAgICBub3JtYWwwLm5vcm1hbGl6ZSgpOworICAgICAgICByZXR1cm4gbm9ybWFsMDsKKyAgICB9
OworICAgIHJldHVybiBQYXRoM0Q7Cit9KCkpOworCisvKioKKyAqIEEgQ3VydmUzIG9iamVjdCBp
cyBhIGxvZ2ljYWwgb2JqZWN0LCBzbyBub3QgYSBtZXNoLCB0byBoYW5kbGUgY3VydmVzIGluIHRo
ZSAzRCBnZW9tZXRyaWMgc3BhY2UuCisgKiBBIEN1cnZlMyBpcyBkZXNpZ25lZCBmcm9tIGEgc2Vy
aWVzIG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMy4KKyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9jdXJ2ZTMKKyAqLwordmFyIEN1cnZlMyA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBBIEN1cnZlMyBvYmplY3QgaXMg
YSBsb2dpY2FsIG9iamVjdCwgc28gbm90IGEgbWVzaCwgdG8gaGFuZGxlIGN1cnZlcyBpbiB0aGUg
M0QgZ2VvbWV0cmljIHNwYWNlLgorICAgICAqIEEgQ3VydmUzIGlzIGRlc2lnbmVkIGZyb20gYSBz
ZXJpZXMgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzLgorICAgICAqIFR1dG8gOiBodHRwczovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2N1cnZlMyNjdXJ2ZTMtb2JqZWN0CisgICAg
ICogQHBhcmFtIHBvaW50cyBwb2ludHMgd2hpY2ggbWFrZSB1cCB0aGUgY3VydmUKKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBDdXJ2ZTMocG9pbnRzKSB7CisgICAgICAgIHRoaXMuX2xlbmd0aCA9IDAu
MDsKKyAgICAgICAgdGhpcy5fcG9pbnRzID0gcG9pbnRzOworICAgICAgICB0aGlzLl9sZW5ndGgg
PSB0aGlzLl9jb21wdXRlTGVuZ3RoKHBvaW50cyk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJl
dHVybnMgYSBDdXJ2ZTMgb2JqZWN0IGFsb25nIGEgUXVhZHJhdGljIEJlemllciBjdXJ2ZSA6IGh0
dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfY3VydmUzI3F1YWRyYXRp
Yy1iZXppZXItY3VydmUKKyAgICAgKiBAcGFyYW0gdjAgKFZlY3RvcjMpIHRoZSBvcmlnaW4gcG9p
bnQgb2YgdGhlIFF1YWRyYXRpYyBCZXppZXIKKyAgICAgKiBAcGFyYW0gdjEgKFZlY3RvcjMpIHRo
ZSBjb250cm9sIHBvaW50CisgICAgICogQHBhcmFtIHYyIChWZWN0b3IzKSB0aGUgZW5kIHBvaW50
IG9mIHRoZSBRdWFkcmF0aWMgQmV6aWVyCisgICAgICogQHBhcmFtIG5iUG9pbnRzIChpbnRlZ2Vy
KSB0aGUgd2FudGVkIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGN1cnZlCisgICAgICogQHJldHVy
bnMgdGhlIGNyZWF0ZWQgQ3VydmUzCisgICAgICovCisgICAgQ3VydmUzLkNyZWF0ZVF1YWRyYXRp
Y0JlemllciA9IGZ1bmN0aW9uICh2MCwgdjEsIHYyLCBuYlBvaW50cykgeworICAgICAgICBuYlBv
aW50cyA9IG5iUG9pbnRzID4gMiA/IG5iUG9pbnRzIDogMzsKKyAgICAgICAgdmFyIGJleiA9IG5l
dyBBcnJheSgpOworICAgICAgICB2YXIgZXF1YXRpb24gPSBmdW5jdGlvbiAodCwgdmFsMCwgdmFs
MSwgdmFsMikgeworICAgICAgICAgICAgdmFyIHJlcyA9ICgxLjAgLSB0KSAqICgxLjAgLSB0KSAq
IHZhbDAgKyAyLjAgKiB0ICogKDEuMCAtIHQpICogdmFsMSArIHQgKiB0ICogdmFsMjsKKyAgICAg
ICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH07CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDw9IG5iUG9pbnRzOyBpKyspIHsKKyAgICAgICAgICAgIGJlei5wdXNoKG5ldyBfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKGVxdWF0aW9uKGkgLyBu
YlBvaW50cywgdjAueCwgdjEueCwgdjIueCksIGVxdWF0aW9uKGkgLyBuYlBvaW50cywgdjAueSwg
djEueSwgdjIueSksIGVxdWF0aW9uKGkgLyBuYlBvaW50cywgdjAueiwgdjEueiwgdjIueikpKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IEN1cnZlMyhiZXopOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyBhIEN1cnZlMyBvYmplY3QgYWxvbmcgYSBDdWJpYyBCZXppZXIg
Y3VydmUgOiBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2N1cnZl
MyNjdWJpYy1iZXppZXItY3VydmUKKyAgICAgKiBAcGFyYW0gdjAgKFZlY3RvcjMpIHRoZSBvcmln
aW4gcG9pbnQgb2YgdGhlIEN1YmljIEJlemllcgorICAgICAqIEBwYXJhbSB2MSAoVmVjdG9yMykg
dGhlIGZpcnN0IGNvbnRyb2wgcG9pbnQKKyAgICAgKiBAcGFyYW0gdjIgKFZlY3RvcjMpIHRoZSBz
ZWNvbmQgY29udHJvbCBwb2ludAorICAgICAqIEBwYXJhbSB2MyAoVmVjdG9yMykgdGhlIGVuZCBw
b2ludCBvZiB0aGUgQ3ViaWMgQmV6aWVyCisgICAgICogQHBhcmFtIG5iUG9pbnRzIChpbnRlZ2Vy
KSB0aGUgd2FudGVkIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGN1cnZlCisgICAgICogQHJldHVy
bnMgdGhlIGNyZWF0ZWQgQ3VydmUzCisgICAgICovCisgICAgQ3VydmUzLkNyZWF0ZUN1YmljQmV6
aWVyID0gZnVuY3Rpb24gKHYwLCB2MSwgdjIsIHYzLCBuYlBvaW50cykgeworICAgICAgICBuYlBv
aW50cyA9IG5iUG9pbnRzID4gMyA/IG5iUG9pbnRzIDogNDsKKyAgICAgICAgdmFyIGJleiA9IG5l
dyBBcnJheSgpOworICAgICAgICB2YXIgZXF1YXRpb24gPSBmdW5jdGlvbiAodCwgdmFsMCwgdmFs
MSwgdmFsMiwgdmFsMykgeworICAgICAgICAgICAgdmFyIHJlcyA9ICgxLjAgLSB0KSAqICgxLjAg
LSB0KSAqICgxLjAgLSB0KSAqIHZhbDAgKyAzLjAgKiB0ICogKDEuMCAtIHQpICogKDEuMCAtIHQp
ICogdmFsMSArIDMuMCAqIHQgKiB0ICogKDEuMCAtIHQpICogdmFsMiArIHQgKiB0ICogdCAqIHZh
bDM7CisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9OworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8PSBuYlBvaW50czsgaSsrKSB7CisgICAgICAgICAgICBiZXoucHVzaChuZXcg
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXShlcXVh
dGlvbihpIC8gbmJQb2ludHMsIHYwLngsIHYxLngsIHYyLngsIHYzLngpLCBlcXVhdGlvbihpIC8g
bmJQb2ludHMsIHYwLnksIHYxLnksIHYyLnksIHYzLnkpLCBlcXVhdGlvbihpIC8gbmJQb2ludHMs
IHYwLnosIHYxLnosIHYyLnosIHYzLnopKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5l
dyBDdXJ2ZTMoYmV6KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBDdXJ2ZTMg
b2JqZWN0IGFsb25nIGEgSGVybWl0ZSBTcGxpbmUgY3VydmUgOiBodHRwczovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9ob3dfdG9fdXNlX2N1cnZlMyNoZXJtaXRlLXNwbGluZQorICAgICAqIEBw
YXJhbSBwMSAoVmVjdG9yMykgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgSGVybWl0ZSBTcGxpbmUK
KyAgICAgKiBAcGFyYW0gdDEgKFZlY3RvcjMpIHRoZSB0YW5nZW50IHZlY3RvciBhdCB0aGUgb3Jp
Z2luIHBvaW50CisgICAgICogQHBhcmFtIHAyIChWZWN0b3IzKSB0aGUgZW5kIHBvaW50IG9mIHRo
ZSBIZXJtaXRlIFNwbGluZQorICAgICAqIEBwYXJhbSB0MiAoVmVjdG9yMykgdGhlIHRhbmdlbnQg
dmVjdG9yIGF0IHRoZSBlbmQgcG9pbnQKKyAgICAgKiBAcGFyYW0gbmJQb2ludHMgKGludGVnZXIp
IHRoZSB3YW50ZWQgbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgY3VydmUKKyAgICAgKiBAcmV0dXJu
cyB0aGUgY3JlYXRlZCBDdXJ2ZTMKKyAgICAgKi8KKyAgICBDdXJ2ZTMuQ3JlYXRlSGVybWl0ZVNw
bGluZSA9IGZ1bmN0aW9uIChwMSwgdDEsIHAyLCB0MiwgbmJQb2ludHMpIHsKKyAgICAgICAgdmFy
IGhlcm1pdGUgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdmFyIHN0ZXAgPSAxLjAgLyBuYlBvaW50
czsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbmJQb2ludHM7IGkrKykgeworICAgICAg
ICAgICAgaGVybWl0ZS5wdXNoKF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJWZWN0b3IzIl0uSGVybWl0ZShwMSwgdDEsIHAyLCB0MiwgaSAqIHN0ZXApKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbmV3IEN1cnZlMyhoZXJtaXRlKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFJldHVybnMgYSBDdXJ2ZTMgb2JqZWN0IGFsb25nIGEgQ2F0bXVsbFJvbSBTcGxp
bmUgY3VydmUgOgorICAgICAqIEBwYXJhbSBwb2ludHMgKGFycmF5IG9mIFZlY3RvcjMpIHRoZSBw
b2ludHMgdGhlIHNwbGluZSBtdXN0IHBhc3MgdGhyb3VnaC4gQXQgbGVhc3QsIGZvdXIgcG9pbnRz
IHJlcXVpcmVkCisgICAgICogQHBhcmFtIG5iUG9pbnRzIChpbnRlZ2VyKSB0aGUgd2FudGVkIG51
bWJlciBvZiBwb2ludHMgYmV0d2VlbiBlYWNoIGN1cnZlIGNvbnRyb2wgcG9pbnRzCisgICAgICog
QHBhcmFtIGNsb3NlZCAoYm9vbGVhbikgb3B0aW9uYWwgd2l0aCBkZWZhdWx0IGZhbHNlLCB3aGVu
IHRydWUgZm9ybXMgYSBjbG9zZWQgbG9vcCBmcm9tIHRoZSBwb2ludHMKKyAgICAgKiBAcmV0dXJu
cyB0aGUgY3JlYXRlZCBDdXJ2ZTMKKyAgICAgKi8KKyAgICBDdXJ2ZTMuQ3JlYXRlQ2F0bXVsbFJv
bVNwbGluZSA9IGZ1bmN0aW9uIChwb2ludHMsIG5iUG9pbnRzLCBjbG9zZWQpIHsKKyAgICAgICAg
dmFyIGNhdG11bGxSb20gPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdmFyIHN0ZXAgPSAxLjAgLyBu
YlBvaW50czsKKyAgICAgICAgdmFyIGFtb3VudCA9IDAuMDsKKyAgICAgICAgaWYgKGNsb3NlZCkg
eworICAgICAgICAgICAgdmFyIHBvaW50c0NvdW50ID0gcG9pbnRzLmxlbmd0aDsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzQ291bnQ7IGkrKykgeworICAgICAgICAgICAg
ICAgIGFtb3VudCA9IDA7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBuYlBv
aW50czsgYysrKSB7CisgICAgICAgICAgICAgICAgICAgIGNhdG11bGxSb20ucHVzaChfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNhdG11bGxSb20o
cG9pbnRzW2kgJSBwb2ludHNDb3VudF0sIHBvaW50c1soaSArIDEpICUgcG9pbnRzQ291bnRdLCBw
b2ludHNbKGkgKyAyKSAlIHBvaW50c0NvdW50XSwgcG9pbnRzWyhpICsgMykgJSBwb2ludHNDb3Vu
dF0sIGFtb3VudCkpOworICAgICAgICAgICAgICAgICAgICBhbW91bnQgKz0gc3RlcDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRtdWxsUm9tLnB1c2go
Y2F0bXVsbFJvbVswXSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2
YXIgdG90YWxQb2ludHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAgIHRvdGFsUG9pbnRzLnB1
c2gocG9pbnRzWzBdLmNsb25lKCkpOworICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2gu
YXBwbHkodG90YWxQb2ludHMsIHBvaW50cyk7CisgICAgICAgICAgICB0b3RhbFBvaW50cy5wdXNo
KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0uY2xvbmUoKSk7CisgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRvdGFsUG9pbnRzLmxlbmd0aCAtIDM7IGkrKykgeworICAgICAgICAgICAg
ICAgIGFtb3VudCA9IDA7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBuYlBv
aW50czsgYysrKSB7CisgICAgICAgICAgICAgICAgICAgIGNhdG11bGxSb20ucHVzaChfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkNhdG11bGxSb20o
dG90YWxQb2ludHNbaV0sIHRvdGFsUG9pbnRzW2kgKyAxXSwgdG90YWxQb2ludHNbaSArIDJdLCB0
b3RhbFBvaW50c1tpICsgM10sIGFtb3VudCkpOworICAgICAgICAgICAgICAgICAgICBhbW91bnQg
Kz0gc3RlcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
LS07CisgICAgICAgICAgICBjYXRtdWxsUm9tLnB1c2goX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5DYXRtdWxsUm9tKHRvdGFsUG9pbnRzW2ldLCB0
b3RhbFBvaW50c1tpICsgMV0sIHRvdGFsUG9pbnRzW2kgKyAyXSwgdG90YWxQb2ludHNbaSArIDNd
LCBhbW91bnQpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IEN1cnZlMyhjYXRtdWxs
Um9tKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEByZXR1cm5zIHRoZSBDdXJ2ZTMgc3RvcmVk
IGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMworICAgICAqLworICAgIEN1cnZlMy5wcm90b3R5
cGUuZ2V0UG9pbnRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fcG9pbnRz
OworICAgIH07CisgICAgLyoqCisgICAgICogQHJldHVybnMgdGhlIGNvbXB1dGVkIGxlbmd0aCAo
ZmxvYXQpIG9mIHRoZSBjdXJ2ZS4KKyAgICAgKi8KKyAgICBDdXJ2ZTMucHJvdG90eXBlLmxlbmd0
aCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgQ3VydmUzIG9iamVjdCA6
IHZhciBjdXJ2ZSA9IGN1cnZlQS5jb250aW51ZShjdXJ2ZUIpOworICAgICAqIFRoaXMgbmV3IEN1
cnZlMyBpcyBidWlsdCBieSB0cmFuc2xhdGluZyBhbmQgc3RpY2tpbmcgdGhlIGN1cnZlQiBhdCB0
aGUgZW5kIG9mIHRoZSBjdXJ2ZUEuCisgICAgICogY3VydmVBIGFuZCBjdXJ2ZUIga2VlcCB1bmNo
YW5nZWQuCisgICAgICogQHBhcmFtIGN1cnZlIHRoZSBjdXJ2ZSB0byBjb250aW51ZSBmcm9tIHRo
aXMgY3VydmUKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3bHkgY29uc3RydWN0ZWQgY3VydmUKKyAg
ICAgKi8KKyAgICBDdXJ2ZTMucHJvdG90eXBlLmNvbnRpbnVlID0gZnVuY3Rpb24gKGN1cnZlKSB7
CisgICAgICAgIHZhciBsYXN0UG9pbnQgPSB0aGlzLl9wb2ludHNbdGhpcy5fcG9pbnRzLmxlbmd0
aCAtIDFdOworICAgICAgICB2YXIgY29udGludWVkUG9pbnRzID0gdGhpcy5fcG9pbnRzLnNsaWNl
KCk7CisgICAgICAgIHZhciBjdXJ2ZVBvaW50cyA9IGN1cnZlLmdldFBvaW50cygpOworICAgICAg
ICBmb3IgKHZhciBpID0gMTsgaSA8IGN1cnZlUG9pbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICBjb250aW51ZWRQb2ludHMucHVzaChjdXJ2ZVBvaW50c1tpXS5zdWJ0cmFjdChjdXJ2ZVBv
aW50c1swXSkuYWRkKGxhc3RQb2ludCkpOworICAgICAgICB9CisgICAgICAgIHZhciBjb250aW51
ZWRDdXJ2ZSA9IG5ldyBDdXJ2ZTMoY29udGludWVkUG9pbnRzKTsKKyAgICAgICAgcmV0dXJuIGNv
bnRpbnVlZEN1cnZlOworICAgIH07CisgICAgQ3VydmUzLnByb3RvdHlwZS5fY29tcHV0ZUxlbmd0
aCA9IGZ1bmN0aW9uIChwYXRoKSB7CisgICAgICAgIHZhciBsID0gMDsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDE7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBsICs9IChwYXRo
W2ldLnN1YnRyYWN0KHBhdGhbaSAtIDFdKSkubGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGw7CisgICAgfTsKKyAgICByZXR1cm4gQ3VydmUzOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NYXRocy9tYXRoLnBsYW5lLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NYXRocy9tYXRoLnBsYW5lLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBs
YW5lICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBsYW5lIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBQbGFuZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisKKy8qKgor
ICogUmVwcmVzZW5zIGEgcGxhbmUgYnkgdGhlIGVxdWF0aW9uIGF4ICsgYnkgKyBjeiArIGQgPSAw
CisgKi8KK3ZhciBQbGFuZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgUGxhbmUgb2JqZWN0IGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZmxv
YXRzIGEsIGIsIGMsIGQgYW5kIHRoZSBwbGFuZSBlcXVhdGlvbiA6IGF4ICsgYnkgKyBjeiArIGQg
PSAwCisgICAgICogQHBhcmFtIGEgYSBjb21wb25lbnQgb2YgdGhlIHBsYW5lCisgICAgICogQHBh
cmFtIGIgYiBjb21wb25lbnQgb2YgdGhlIHBsYW5lCisgICAgICogQHBhcmFtIGMgYyBjb21wb25l
bnQgb2YgdGhlIHBsYW5lCisgICAgICogQHBhcmFtIGQgZCBjb21wb25lbnQgb2YgdGhlIHBsYW5l
CisgICAgICovCisgICAgZnVuY3Rpb24gUGxhbmUoYSwgYiwgYywgZCkgeworICAgICAgICB0aGlz
Lm5vcm1hbCA9IG5ldyBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdKGEsIGIsIGMpOworICAgICAgICB0aGlzLmQgPSBkOworICAgIH0KKyAgICAvKioK
KyAgICAgKiBAcmV0dXJucyB0aGUgcGxhbmUgY29vcmRpbmF0ZXMgYXMgYSBuZXcgYXJyYXkgb2Yg
NCBlbGVtZW50cyBbYSwgYiwgYywgZF0uCisgICAgICovCisgICAgUGxhbmUucHJvdG90eXBlLmFz
QXJyYXkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBbdGhpcy5ub3JtYWwueCwgdGhp
cy5ub3JtYWwueSwgdGhpcy5ub3JtYWwueiwgdGhpcy5kXTsKKyAgICB9OworICAgIC8vIE1ldGhv
ZHMKKyAgICAvKioKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBwbGFuZSBjb3BpZWQgZnJvbSB0aGUg
Y3VycmVudCBQbGFuZS4KKyAgICAgKi8KKyAgICBQbGFuZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgUGxhbmUodGhpcy5ub3JtYWwueCwgdGhpcy5u
b3JtYWwueSwgdGhpcy5ub3JtYWwueiwgdGhpcy5kKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEByZXR1cm5zIHRoZSBzdHJpbmcgIlBsYW5lIi4KKyAgICAgKi8KKyAgICBQbGFuZS5wcm90b3R5
cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlBsYW5lIjsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEByZXR1cm5zIHRoZSBQbGFuZSBoYXNoIGNvZGUuCisg
ICAgICovCisgICAgUGxhbmUucHJvdG90eXBlLmdldEhhc2hDb2RlID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgaGFzaCA9IHRoaXMubm9ybWFsLmdldEhhc2hDb2RlKCk7CisgICAgICAgIGhh
c2ggPSAoaGFzaCAqIDM5NykgXiAodGhpcy5kIHwgMCk7CisgICAgICAgIHJldHVybiBoYXNoOwor
ICAgIH07CisgICAgLyoqCisgICAgICogTm9ybWFsaXplIHRoZSBjdXJyZW50IFBsYW5lIGluIHBs
YWNlLgorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIFBsYW5lLgorICAgICAqLworICAgIFBs
YW5lLnByb3RvdHlwZS5ub3JtYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBub3Jt
ID0gKE1hdGguc3FydCgodGhpcy5ub3JtYWwueCAqIHRoaXMubm9ybWFsLngpICsgKHRoaXMubm9y
bWFsLnkgKiB0aGlzLm5vcm1hbC55KSArICh0aGlzLm5vcm1hbC56ICogdGhpcy5ub3JtYWwueikp
KTsKKyAgICAgICAgdmFyIG1hZ25pdHVkZSA9IDAuMDsKKyAgICAgICAgaWYgKG5vcm0gIT09IDAp
IHsKKyAgICAgICAgICAgIG1hZ25pdHVkZSA9IDEuMCAvIG5vcm07CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5ub3JtYWwueCAqPSBtYWduaXR1ZGU7CisgICAgICAgIHRoaXMubm9ybWFsLnkgKj0g
bWFnbml0dWRlOworICAgICAgICB0aGlzLm5vcm1hbC56ICo9IG1hZ25pdHVkZTsKKyAgICAgICAg
dGhpcy5kICo9IG1hZ25pdHVkZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBcHBsaWVzIGEgdHJhbnNmb3JtYXRpb24gdGhlIHBsYW5lIGFuZCByZXR1cm5z
IHRoZSByZXN1bHQKKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtYXRpb24gdGhlIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCB0byBiZSBhcHBsaWVkIHRvIHRoZSBwbGFuZQorICAgICAqIEByZXR1cm5zIGEg
bmV3IFBsYW5lIGFzIHRoZSByZXN1bHQgb2YgdGhlIHRyYW5zZm9ybWF0aW9uIG9mIHRoZSBjdXJy
ZW50IFBsYW5lIGJ5IHRoZSBnaXZlbiBtYXRyaXguCisgICAgICovCisgICAgUGxhbmUucHJvdG90
eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uICh0cmFuc2Zvcm1hdGlvbikgeworICAgICAgICB2YXIg
dHJhbnNwb3NlZE1hdHJpeCA9IFBsYW5lLl9UbXBNYXRyaXg7CisgICAgICAgIF9tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5UcmFuc3Bvc2VUb1JlZih0
cmFuc2Zvcm1hdGlvbiwgdHJhbnNwb3NlZE1hdHJpeCk7CisgICAgICAgIHZhciBtID0gdHJhbnNw
b3NlZE1hdHJpeC5tOworICAgICAgICB2YXIgeCA9IHRoaXMubm9ybWFsLng7CisgICAgICAgIHZh
ciB5ID0gdGhpcy5ub3JtYWwueTsKKyAgICAgICAgdmFyIHogPSB0aGlzLm5vcm1hbC56OworICAg
ICAgICB2YXIgZCA9IHRoaXMuZDsKKyAgICAgICAgdmFyIG5vcm1hbFggPSB4ICogbVswXSArIHkg
KiBtWzFdICsgeiAqIG1bMl0gKyBkICogbVszXTsKKyAgICAgICAgdmFyIG5vcm1hbFkgPSB4ICog
bVs0XSArIHkgKiBtWzVdICsgeiAqIG1bNl0gKyBkICogbVs3XTsKKyAgICAgICAgdmFyIG5vcm1h
bFogPSB4ICogbVs4XSArIHkgKiBtWzldICsgeiAqIG1bMTBdICsgZCAqIG1bMTFdOworICAgICAg
ICB2YXIgZmluYWxEID0geCAqIG1bMTJdICsgeSAqIG1bMTNdICsgeiAqIG1bMTRdICsgZCAqIG1b
MTVdOworICAgICAgICByZXR1cm4gbmV3IFBsYW5lKG5vcm1hbFgsIG5vcm1hbFksIG5vcm1hbFos
IGZpbmFsRCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxjdWFsdHRlIHRoZSBkb3QgcHJv
ZHVjdCBiZXR3ZWVuIHRoZSBwb2ludCBhbmQgdGhlIHBsYW5lIG5vcm1hbAorICAgICAqIEBwYXJh
bSBwb2ludCBwb2ludCB0byBjYWxjdWxhdGUgdGhlIGRvdCBwcm9kdWN0IHdpdGgKKyAgICAgKiBA
cmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBvZiB0aGUgcG9pbnQgY29vcmRpbmF0ZXMg
YW5kIHRoZSBwbGFuZSBub3JtYWwuCisgICAgICovCisgICAgUGxhbmUucHJvdG90eXBlLmRvdENv
b3JkaW5hdGUgPSBmdW5jdGlvbiAocG9pbnQpIHsKKyAgICAgICAgcmV0dXJuICgoKCh0aGlzLm5v
cm1hbC54ICogcG9pbnQueCkgKyAodGhpcy5ub3JtYWwueSAqIHBvaW50LnkpKSArICh0aGlzLm5v
cm1hbC56ICogcG9pbnQueikpICsgdGhpcy5kKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVw
ZGF0ZXMgdGhlIGN1cnJlbnQgUGxhbmUgZnJvbSB0aGUgcGxhbmUgZGVmaW5lZCBieSB0aGUgdGhy
ZWUgZ2l2ZW4gcG9pbnRzLgorICAgICAqIEBwYXJhbSBwb2ludDEgb25lIG9mIHRoZSBwb2ludHMg
dXNlZCB0byBjb250cnVjdCB0aGUgcGxhbmUKKyAgICAgKiBAcGFyYW0gcG9pbnQyIG9uZSBvZiB0
aGUgcG9pbnRzIHVzZWQgdG8gY29udHJ1Y3QgdGhlIHBsYW5lCisgICAgICogQHBhcmFtIHBvaW50
MyBvbmUgb2YgdGhlIHBvaW50cyB1c2VkIHRvIGNvbnRydWN0IHRoZSBwbGFuZQorICAgICAqIEBy
ZXR1cm5zIHRoZSB1cGRhdGVkIFBsYW5lLgorICAgICAqLworICAgIFBsYW5lLnByb3RvdHlwZS5j
b3B5RnJvbVBvaW50cyA9IGZ1bmN0aW9uIChwb2ludDEsIHBvaW50MiwgcG9pbnQzKSB7CisgICAg
ICAgIHZhciB4MSA9IHBvaW50Mi54IC0gcG9pbnQxLng7CisgICAgICAgIHZhciB5MSA9IHBvaW50
Mi55IC0gcG9pbnQxLnk7CisgICAgICAgIHZhciB6MSA9IHBvaW50Mi56IC0gcG9pbnQxLno7Cisg
ICAgICAgIHZhciB4MiA9IHBvaW50My54IC0gcG9pbnQxLng7CisgICAgICAgIHZhciB5MiA9IHBv
aW50My55IC0gcG9pbnQxLnk7CisgICAgICAgIHZhciB6MiA9IHBvaW50My56IC0gcG9pbnQxLno7
CisgICAgICAgIHZhciB5eiA9ICh5MSAqIHoyKSAtICh6MSAqIHkyKTsKKyAgICAgICAgdmFyIHh6
ID0gKHoxICogeDIpIC0gKHgxICogejIpOworICAgICAgICB2YXIgeHkgPSAoeDEgKiB5MikgLSAo
eTEgKiB4Mik7CisgICAgICAgIHZhciBweXRoID0gKE1hdGguc3FydCgoeXogKiB5eikgKyAoeHog
KiB4eikgKyAoeHkgKiB4eSkpKTsKKyAgICAgICAgdmFyIGludlB5dGg7CisgICAgICAgIGlmIChw
eXRoICE9PSAwKSB7CisgICAgICAgICAgICBpbnZQeXRoID0gMS4wIC8gcHl0aDsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludlB5dGggPSAwLjA7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5ub3JtYWwueCA9IHl6ICogaW52UHl0aDsKKyAgICAgICAgdGhpcy5ub3Jt
YWwueSA9IHh6ICogaW52UHl0aDsKKyAgICAgICAgdGhpcy5ub3JtYWwueiA9IHh5ICogaW52UHl0
aDsKKyAgICAgICAgdGhpcy5kID0gLSgodGhpcy5ub3JtYWwueCAqIHBvaW50MS54KSArICh0aGlz
Lm5vcm1hbC55ICogcG9pbnQxLnkpICsgKHRoaXMubm9ybWFsLnogKiBwb2ludDEueikpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiB0aGUg
cGxhbmUgaXMgZmFjaW5nIGEgZ2l2ZW4gZGlyZWN0aW9uCisgICAgICogQHBhcmFtIGRpcmVjdGlv
biB0aGUgZGlyZWN0aW9uIHRvIGNoZWNrIGlmIHRoZSBwbGFuZSBpcyBmYWNpbmcKKyAgICAgKiBA
cGFyYW0gZXBzaWxvbiB2YWx1ZSB0aGUgZG90IHByb2R1Y3QgaXMgY29tcGFyZWQgYWdhaW5zdCAo
cmV0dXJucyB0cnVlIGlmIGRvdCA8PSBlcHNpbG9uKQorICAgICAqIEByZXR1cm5zIFRydWUgaXMg
dGhlIHZlY3RvciAiZGlyZWN0aW9uIiAgaXMgdGhlIHNhbWUgc2lkZSB0aGFuIHRoZSBwbGFuZSBu
b3JtYWwuCisgICAgICovCisgICAgUGxhbmUucHJvdG90eXBlLmlzRnJvbnRGYWNpbmdUbyA9IGZ1
bmN0aW9uIChkaXJlY3Rpb24sIGVwc2lsb24pIHsKKyAgICAgICAgdmFyIGRvdCA9IF9tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KHRoaXMubm9y
bWFsLCBkaXJlY3Rpb24pOworICAgICAgICByZXR1cm4gKGRvdCA8PSBlcHNpbG9uKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENhbGN1bGF0ZXMgdGhlIGRpc3RhbmNlIHRvIGEgcG9pbnQKKyAg
ICAgKiBAcGFyYW0gcG9pbnQgcG9pbnQgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIHRvCisgICAgICog
QHJldHVybnMgdGhlIHNpZ25lZCBkaXN0YW5jZSAoZmxvYXQpIGZyb20gdGhlIGdpdmVuIHBvaW50
IHRvIHRoZSBQbGFuZS4KKyAgICAgKi8KKyAgICBQbGFuZS5wcm90b3R5cGUuc2lnbmVkRGlzdGFu
Y2VUbyA9IGZ1bmN0aW9uIChwb2ludCkgeworICAgICAgICByZXR1cm4gX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Eb3QocG9pbnQsIHRoaXMubm9y
bWFsKSArIHRoaXMuZDsKKyAgICB9OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgcGxhbmUgZnJvbSBhbiAgYXJyYXkKKyAgICAgKiBAcGFyYW0gYXJyYXkgdGhlIGFy
cmF5IHRvIGNyZWF0ZSBhIHBsYW5lIGZyb20KKyAgICAgKiBAcmV0dXJucyBhIG5ldyBQbGFuZSBm
cm9tIHRoZSBnaXZlbiBhcnJheS4KKyAgICAgKi8KKyAgICBQbGFuZS5Gcm9tQXJyYXkgPSBmdW5j
dGlvbiAoYXJyYXkpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQbGFuZShhcnJheVswXSwgYXJyYXlb
MV0sIGFycmF5WzJdLCBhcnJheVszXSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgcGxhbmUgZnJvbSB0aHJlZSBwb2ludHMKKyAgICAgKiBAcGFyYW0gcG9pbnQxIHBvaW50IHVz
ZWQgdG8gY3JlYXRlIHRoZSBwbGFuZQorICAgICAqIEBwYXJhbSBwb2ludDIgcG9pbnQgdXNlZCB0
byBjcmVhdGUgdGhlIHBsYW5lCisgICAgICogQHBhcmFtIHBvaW50MyBwb2ludCB1c2VkIHRvIGNy
ZWF0ZSB0aGUgcGxhbmUKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBQbGFuZSBkZWZpbmVkIGJ5IHRo
ZSB0aHJlZSBnaXZlbiBwb2ludHMuCisgICAgICovCisgICAgUGxhbmUuRnJvbVBvaW50cyA9IGZ1
bmN0aW9uIChwb2ludDEsIHBvaW50MiwgcG9pbnQzKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBu
ZXcgUGxhbmUoMC4wLCAwLjAsIDAuMCwgMC4wKTsKKyAgICAgICAgcmVzdWx0LmNvcHlGcm9tUG9p
bnRzKHBvaW50MSwgcG9pbnQyLCBwb2ludDMpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHBsYW5lIGZyb20gYW4gb3JpZ2luIHBvaW50
IGFuZCBhIG5vcm1hbAorICAgICAqIEBwYXJhbSBvcmlnaW4gb3JpZ2luIG9mIHRoZSBwbGFuZSB0
byBiZSBjb25zdHJ1Y3RlZAorICAgICAqIEBwYXJhbSBub3JtYWwgbm9ybWFsIG9mIHRoZSBwbGFu
ZSB0byBiZSBjb25zdHJ1Y3RlZAorICAgICAqIEByZXR1cm5zIGEgbmV3IFBsYW5lIHRoZSBub3Jt
YWwgdmVjdG9yIHRvIHRoaXMgcGxhbmUgYXQgdGhlIGdpdmVuIG9yaWdpbiBwb2ludC4KKyAgICAg
KiBOb3RlIDogdGhlIHZlY3RvciAibm9ybWFsIiBpcyB1cGRhdGVkIGJlY2F1c2Ugbm9ybWFsaXpl
ZC4KKyAgICAgKi8KKyAgICBQbGFuZS5Gcm9tUG9zaXRpb25BbmROb3JtYWwgPSBmdW5jdGlvbiAo
b3JpZ2luLCBub3JtYWwpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBQbGFuZSgwLjAsIDAu
MCwgMC4wLCAwLjApOworICAgICAgICBub3JtYWwubm9ybWFsaXplKCk7CisgICAgICAgIHJlc3Vs
dC5ub3JtYWwgPSBub3JtYWw7CisgICAgICAgIHJlc3VsdC5kID0gLShub3JtYWwueCAqIG9yaWdp
bi54ICsgbm9ybWFsLnkgKiBvcmlnaW4ueSArIG5vcm1hbC56ICogb3JpZ2luLnopOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ2FsY3VsYXRlcyB0aGUg
ZGlzdGFuY2UgZnJvbSBhIHBsYW5lIGFuZCBhIHBvaW50CisgICAgICogQHBhcmFtIG9yaWdpbiBv
cmlnaW4gb2YgdGhlIHBsYW5lIHRvIGJlIGNvbnN0cnVjdGVkCisgICAgICogQHBhcmFtIG5vcm1h
bCBub3JtYWwgb2YgdGhlIHBsYW5lIHRvIGJlIGNvbnN0cnVjdGVkCisgICAgICogQHBhcmFtIHBv
aW50IHBvaW50IHRvIGNhbGN1bGF0ZSBkaXN0YW5jZSB0bworICAgICAqIEByZXR1cm5zIHRoZSBz
aWduZWQgZGlzdGFuY2UgYmV0d2VlbiB0aGUgcGxhbmUgZGVmaW5lZCBieSB0aGUgbm9ybWFsIHZl
Y3RvciBhdCB0aGUgIm9yaWdpbiIiIHBvaW50IGFuZCB0aGUgZ2l2ZW4gb3RoZXIgcG9pbnQuCisg
ICAgICovCisgICAgUGxhbmUuU2lnbmVkRGlzdGFuY2VUb1BsYW5lRnJvbVBvc2l0aW9uQW5kTm9y
bWFsID0gZnVuY3Rpb24gKG9yaWdpbiwgbm9ybWFsLCBwb2ludCkgeworICAgICAgICB2YXIgZCA9
IC0obm9ybWFsLnggKiBvcmlnaW4ueCArIG5vcm1hbC55ICogb3JpZ2luLnkgKyBub3JtYWwueiAq
IG9yaWdpbi56KTsKKyAgICAgICAgcmV0dXJuIF9tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KHBvaW50LCBub3JtYWwpICsgZDsKKyAgICB9Owor
ICAgIFBsYW5lLl9UbXBNYXRyaXggPSBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICByZXR1cm4gUGxhbmU7Cit9KCkpOwor
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01hdGhzL21hdGguc2NhbGFyLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0aHMvbWF0aC5zY2Fs
YXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFNjYWxhciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTY2FsYXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNjYWxhcjsgfSk7CisvKioKKyAqIFNjYWxh
ciBjb21wdXRhdGlvbiBsaWJyYXJ5CisgKi8KK3ZhciBTY2FsYXIgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gU2NhbGFyKCkgeworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBCb29sZWFuIDogdHJ1ZSBpZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEg
YW5kIGIgaXMgbG93ZXIgdGhhbiBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KQorICAg
ICAqIEBwYXJhbSBhIG51bWJlcgorICAgICAqIEBwYXJhbSBiIG51bWJlcgorICAgICAqIEBwYXJh
bSBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KQorICAgICAqIEByZXR1cm5zIHRydWUg
aWYgdGhlIGFic29sdXRlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGFuZCBiIGlzIGxvd2VyIHRoYW4g
ZXBzaWxvbiAoZGVmYXVsdCA9IDEuNDAxMjk4RS00NSkKKyAgICAgKi8KKyAgICBTY2FsYXIuV2l0
aGluRXBzaWxvbiA9IGZ1bmN0aW9uIChhLCBiLCBlcHNpbG9uKSB7CisgICAgICAgIGlmIChlcHNp
bG9uID09PSB2b2lkIDApIHsgZXBzaWxvbiA9IDEuNDAxMjk4RS00NTsgfQorICAgICAgICB2YXIg
bnVtID0gYSAtIGI7CisgICAgICAgIHJldHVybiAtZXBzaWxvbiA8PSBudW0gJiYgbnVtIDw9IGVw
c2lsb247CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIDogdGhlIHVw
cGVyIGNhc2UgdHJhbnNsYXRpb24gb2YgdGhlIG51bWJlciBpIHRvIGhleGFkZWNpbWFsLgorICAg
ICAqIEBwYXJhbSBpIG51bWJlcgorICAgICAqIEByZXR1cm5zIHRoZSB1cHBlciBjYXNlIHRyYW5z
bGF0aW9uIG9mIHRoZSBudW1iZXIgaSB0byBoZXhhZGVjaW1hbC4KKyAgICAgKi8KKyAgICBTY2Fs
YXIuVG9IZXggPSBmdW5jdGlvbiAoaSkgeworICAgICAgICB2YXIgc3RyID0gaS50b1N0cmluZygx
Nik7CisgICAgICAgIGlmIChpIDw9IDE1KSB7CisgICAgICAgICAgICByZXR1cm4gKCIwIiArIHN0
cikudG9VcHBlckNhc2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RyLnRvVXBwZXJD
YXNlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIC0xIGlmIHZhbHVlIGlzIG5l
Z2F0aXZlIGFuZCArMSBpcyB2YWx1ZSBpcyBwb3NpdGl2ZS4KKyAgICAgKiBAcGFyYW0gdmFsdWUg
dGhlIHZhbHVlCisgICAgICogQHJldHVybnMgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCdzIGVxdWFs
IHRvIHplcm8uCisgICAgICovCisgICAgU2NhbGFyLlNpZ24gPSBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgdmFsdWUgPSArdmFsdWU7IC8vIGNvbnZlcnQgdG8gYSBudW1iZXIKKyAgICAgICAg
aWYgKHZhbHVlID09PSAwIHx8IGlzTmFOKHZhbHVlKSkgeworICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZSA+IDAgPyAxIDogLTE7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBpdHNlbGYgaWYgaXQncyBiZXR3
ZWVuIG1pbiBhbmQgbWF4LgorICAgICAqIFJldHVybnMgbWluIGlmIHRoZSB2YWx1ZSBpcyBsb3dl
ciB0aGFuIG1pbi4KKyAgICAgKiBSZXR1cm5zIG1heCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0
aGFuIG1heC4KKyAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGNsbWFwCisgICAgICog
QHBhcmFtIG1pbiB0aGUgbWluIHZhbHVlIHRvIGNsYW1wIHRvIChkZWZhdWx0OiAwKQorICAgICAq
IEBwYXJhbSBtYXggdGhlIG1heCB2YWx1ZSB0byBjbGFtcCB0byAoZGVmYXVsdDogMSkKKyAgICAg
KiBAcmV0dXJucyB0aGUgY2xhbXBlZCB2YWx1ZQorICAgICAqLworICAgIFNjYWxhci5DbGFtcCA9
IGZ1bmN0aW9uICh2YWx1ZSwgbWluLCBtYXgpIHsKKyAgICAgICAgaWYgKG1pbiA9PT0gdm9pZCAw
KSB7IG1pbiA9IDA7IH0KKyAgICAgICAgaWYgKG1heCA9PT0gdm9pZCAwKSB7IG1heCA9IDE7IH0K
KyAgICAgICAgcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB2YWx1ZSkpOworICAg
IH07CisgICAgLyoqCisgICAgICogdGhlIGxvZzIgb2YgdmFsdWUuCisgICAgICogQHBhcmFtIHZh
bHVlIHRoZSB2YWx1ZSB0byBjb21wdXRlIGxvZzIgb2YKKyAgICAgKiBAcmV0dXJucyB0aGUgbG9n
MiBvZiB2YWx1ZS4KKyAgICAgKi8KKyAgICBTY2FsYXIuTG9nMiA9IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICByZXR1cm4gTWF0aC5sb2codmFsdWUpICogTWF0aC5MT0cyRTsKKyAgICB9Owor
ICAgIC8qKgorICAgICogTG9vcHMgdGhlIHZhbHVlLCBzbyB0aGF0IGl0IGlzIG5ldmVyIGxhcmdl
ciB0aGFuIGxlbmd0aCBhbmQgbmV2ZXIgc21hbGxlciB0aGFuIDAuCisgICAgKgorICAgICogVGhp
cyBpcyBzaW1pbGFyIHRvIHRoZSBtb2R1bG8gb3BlcmF0b3IgYnV0IGl0IHdvcmtzIHdpdGggZmxv
YXRpbmcgcG9pbnQgbnVtYmVycy4KKyAgICAqIEZvciBleGFtcGxlLCB1c2luZyAzLjAgZm9yIHQg
YW5kIDIuNSBmb3IgbGVuZ3RoLCB0aGUgcmVzdWx0IHdvdWxkIGJlIDAuNS4KKyAgICAqIFdpdGgg
dCA9IDUgYW5kIGxlbmd0aCA9IDIuNSwgdGhlIHJlc3VsdCB3b3VsZCBiZSAwLjAuCisgICAgKiBO
b3RlLCBob3dldmVyLCB0aGF0IHRoZSBiZWhhdmlvdXIgaXMgbm90IGRlZmluZWQgZm9yIG5lZ2F0
aXZlIG51bWJlcnMgYXMgaXQgaXMgZm9yIHRoZSBtb2R1bG8gb3BlcmF0b3IKKyAgICAqIEBwYXJh
bSB2YWx1ZSB0aGUgdmFsdWUKKyAgICAqIEBwYXJhbSBsZW5ndGggdGhlIGxlbmd0aAorICAgICog
QHJldHVybnMgdGhlIGxvb3BlZCB2YWx1ZQorICAgICovCisgICAgU2NhbGFyLlJlcGVhdCA9IGZ1
bmN0aW9uICh2YWx1ZSwgbGVuZ3RoKSB7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIE1hdGguZmxv
b3IodmFsdWUgLyBsZW5ndGgpICogbGVuZ3RoOworICAgIH07CisgICAgLyoqCisgICAgICogTm9y
bWFsaXplIHRoZSB2YWx1ZSBiZXR3ZWVuIDAuMCBhbmQgMS4wIHVzaW5nIG1pbiBhbmQgbWF4IHZh
bHVlcworICAgICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBub3JtYWxpemUKKyAgICAgKiBAcGFy
YW0gbWluIG1heCB0byBub3JtYWxpemUgYmV0d2VlbgorICAgICAqIEBwYXJhbSBtYXggbWluIHRv
IG5vcm1hbGl6ZSBiZXR3ZWVuCisgICAgICogQHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUK
KyAgICAgKi8KKyAgICBTY2FsYXIuTm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlLCBtaW4sIG1h
eCkgeworICAgICAgICByZXR1cm4gKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pOworICAgIH07
CisgICAgLyoqCisgICAgKiBEZW5vcm1hbGl6ZSB0aGUgdmFsdWUgZnJvbSAwLjAgYW5kIDEuMCB1
c2luZyBtaW4gYW5kIG1heCB2YWx1ZXMKKyAgICAqIEBwYXJhbSBub3JtYWxpemVkIHZhbHVlIHRv
IGRlbm9ybWFsaXplCisgICAgKiBAcGFyYW0gbWluIG1heCB0byBkZW5vcm1hbGl6ZSBiZXR3ZWVu
CisgICAgKiBAcGFyYW0gbWF4IG1pbiB0byBkZW5vcm1hbGl6ZSBiZXR3ZWVuCisgICAgKiBAcmV0
dXJucyB0aGUgZGVub3JtYWxpemVkIHZhbHVlCisgICAgKi8KKyAgICBTY2FsYXIuRGVub3JtYWxp
emUgPSBmdW5jdGlvbiAobm9ybWFsaXplZCwgbWluLCBtYXgpIHsKKyAgICAgICAgcmV0dXJuIChu
b3JtYWxpemVkICogKG1heCAtIG1pbikgKyBtaW4pOworICAgIH07CisgICAgLyoqCisgICAgKiBD
YWxjdWxhdGVzIHRoZSBzaG9ydGVzdCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGdpdmVuIGFuZ2xl
cyBnaXZlbiBpbiBkZWdyZWVzLgorICAgICogQHBhcmFtIGN1cnJlbnQgY3VycmVudCBhbmdsZSBp
biBkZWdyZWVzCisgICAgKiBAcGFyYW0gdGFyZ2V0IHRhcmdldCBhbmdsZSBpbiBkZWdyZWVzCisg
ICAgKiBAcmV0dXJucyB0aGUgZGVsdGEKKyAgICAqLworICAgIFNjYWxhci5EZWx0YUFuZ2xlID0g
ZnVuY3Rpb24gKGN1cnJlbnQsIHRhcmdldCkgeworICAgICAgICB2YXIgbnVtID0gU2NhbGFyLlJl
cGVhdCh0YXJnZXQgLSBjdXJyZW50LCAzNjAuMCk7CisgICAgICAgIGlmIChudW0gPiAxODAuMCkg
eworICAgICAgICAgICAgbnVtIC09IDM2MC4wOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dW07CisgICAgfTsKKyAgICAvKioKKyAgICAqIFBpbmdQb25ncyB0aGUgdmFsdWUgdCwgc28gdGhh
dCBpdCBpcyBuZXZlciBsYXJnZXIgdGhhbiBsZW5ndGggYW5kIG5ldmVyIHNtYWxsZXIgdGhhbiAw
LgorICAgICogQHBhcmFtIHR4IHZhbHVlCisgICAgKiBAcGFyYW0gbGVuZ3RoIGxlbmd0aAorICAg
ICogQHJldHVybnMgVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgbW92ZSBiYWNrIGFuZCBmb3J0aCBi
ZXR3ZWVuIDAgYW5kIGxlbmd0aAorICAgICovCisgICAgU2NhbGFyLlBpbmdQb25nID0gZnVuY3Rp
b24gKHR4LCBsZW5ndGgpIHsKKyAgICAgICAgdmFyIHQgPSBTY2FsYXIuUmVwZWF0KHR4LCBsZW5n
dGggKiAyLjApOworICAgICAgICByZXR1cm4gbGVuZ3RoIC0gTWF0aC5hYnModCAtIGxlbmd0aCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAqIEludGVycG9sYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4
IHdpdGggc21vb3RoaW5nIGF0IHRoZSBsaW1pdHMuCisgICAgKgorICAgICogVGhpcyBmdW5jdGlv
biBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBtaW4gYW5kIG1heCBpbiBhIHNpbWlsYXIgd2F5IHRvIExl
cnAuIEhvd2V2ZXIsIHRoZSBpbnRlcnBvbGF0aW9uIHdpbGwgZ3JhZHVhbGx5IHNwZWVkIHVwCisg
ICAgKiBmcm9tIHRoZSBzdGFydCBhbmQgc2xvdyBkb3duIHRvd2FyZCB0aGUgZW5kLiBUaGlzIGlz
IHVzZWZ1bCBmb3IgY3JlYXRpbmcgbmF0dXJhbC1sb29raW5nIGFuaW1hdGlvbiwgZmFkaW5nIGFu
ZCBvdGhlciB0cmFuc2l0aW9ucy4KKyAgICAqIEBwYXJhbSBmcm9tIGZyb20KKyAgICAqIEBwYXJh
bSB0byB0bworICAgICogQHBhcmFtIHR4IHZhbHVlCisgICAgKiBAcmV0dXJucyB0aGUgc21vb3Ro
IHN0ZXBwZWQgdmFsdWUKKyAgICAqLworICAgIFNjYWxhci5TbW9vdGhTdGVwID0gZnVuY3Rpb24g
KGZyb20sIHRvLCB0eCkgeworICAgICAgICB2YXIgdCA9IFNjYWxhci5DbGFtcCh0eCk7CisgICAg
ICAgIHQgPSAtMi4wICogdCAqIHQgKiB0ICsgMy4wICogdCAqIHQ7CisgICAgICAgIHJldHVybiB0
byAqIHQgKyBmcm9tICogKDEuMCAtIHQpOworICAgIH07CisgICAgLyoqCisgICAgKiBNb3ZlcyBh
IHZhbHVlIGN1cnJlbnQgdG93YXJkcyB0YXJnZXQuCisgICAgKgorICAgICogVGhpcyBpcyBlc3Nl
bnRpYWxseSB0aGUgc2FtZSBhcyBNYXRoZi5MZXJwIGJ1dCBpbnN0ZWFkIHRoZSBmdW5jdGlvbiB3
aWxsIGVuc3VyZSB0aGF0IHRoZSBzcGVlZCBuZXZlciBleGNlZWRzIG1heERlbHRhLgorICAgICog
TmVnYXRpdmUgdmFsdWVzIG9mIG1heERlbHRhIHB1c2hlcyB0aGUgdmFsdWUgYXdheSBmcm9tIHRh
cmdldC4KKyAgICAqIEBwYXJhbSBjdXJyZW50IGN1cnJlbnQgdmFsdWUKKyAgICAqIEBwYXJhbSB0
YXJnZXQgdGFyZ2V0IHZhbHVlCisgICAgKiBAcGFyYW0gbWF4RGVsdGEgbWF4IGRpc3RhbmNlIHRv
IG1vdmUKKyAgICAqIEByZXR1cm5zIHJlc3VsdGluZyB2YWx1ZQorICAgICovCisgICAgU2NhbGFy
Lk1vdmVUb3dhcmRzID0gZnVuY3Rpb24gKGN1cnJlbnQsIHRhcmdldCwgbWF4RGVsdGEpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgICAgIGlmIChNYXRoLmFicyh0YXJnZXQgLSBjdXJy
ZW50KSA8PSBtYXhEZWx0YSkgeworICAgICAgICAgICAgcmVzdWx0ID0gdGFyZ2V0OworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudCArIFNjYWxh
ci5TaWduKHRhcmdldCAtIGN1cnJlbnQpICogbWF4RGVsdGE7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICogU2FtZSBhcyBNb3ZlVG93YXJk
cyBidXQgbWFrZXMgc3VyZSB0aGUgdmFsdWVzIGludGVycG9sYXRlIGNvcnJlY3RseSB3aGVuIHRo
ZXkgd3JhcCBhcm91bmQgMzYwIGRlZ3JlZXMuCisgICAgKgorICAgICogVmFyaWFibGVzIGN1cnJl
bnQgYW5kIHRhcmdldCBhcmUgYXNzdW1lZCB0byBiZSBpbiBkZWdyZWVzLiBGb3Igb3B0aW1pemF0
aW9uIHJlYXNvbnMsIG5lZ2F0aXZlIHZhbHVlcyBvZiBtYXhEZWx0YQorICAgICogIGFyZSBub3Qg
c3VwcG9ydGVkIGFuZCBtYXkgY2F1c2Ugb3NjaWxsYXRpb24uIFRvIHB1c2ggY3VycmVudCBhd2F5
IGZyb20gYSB0YXJnZXQgYW5nbGUsIGFkZCAxODAgdG8gdGhhdCBhbmdsZSBpbnN0ZWFkLgorICAg
ICogQHBhcmFtIGN1cnJlbnQgY3VycmVudCB2YWx1ZQorICAgICogQHBhcmFtIHRhcmdldCB0YXJn
ZXQgdmFsdWUKKyAgICAqIEBwYXJhbSBtYXhEZWx0YSBtYXggZGlzdGFuY2UgdG8gbW92ZQorICAg
ICogQHJldHVybnMgcmVzdWx0aW5nIGFuZ2xlCisgICAgKi8KKyAgICBTY2FsYXIuTW92ZVRvd2Fy
ZHNBbmdsZSA9IGZ1bmN0aW9uIChjdXJyZW50LCB0YXJnZXQsIG1heERlbHRhKSB7CisgICAgICAg
IHZhciBudW0gPSBTY2FsYXIuRGVsdGFBbmdsZShjdXJyZW50LCB0YXJnZXQpOworICAgICAgICB2
YXIgcmVzdWx0ID0gMDsKKyAgICAgICAgaWYgKC1tYXhEZWx0YSA8IG51bSAmJiBudW0gPCBtYXhE
ZWx0YSkgeworICAgICAgICAgICAgcmVzdWx0ID0gdGFyZ2V0OworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGFyZ2V0ID0gY3VycmVudCArIG51bTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IFNjYWxhci5Nb3ZlVG93YXJkcyhjdXJyZW50LCB0YXJnZXQsIG1heERlbHRhKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIG5ldyBzY2FsYXIgd2l0aCB2YWx1ZXMgbGluZWFybHkgaW50ZXJwb2xhdGVk
IG9mICJhbW91bnQiIGJldHdlZW4gdGhlIHN0YXJ0IHNjYWxhciBhbmQgdGhlIGVuZCBzY2FsYXIu
CisgICAgICogQHBhcmFtIHN0YXJ0IHN0YXJ0IHZhbHVlCisgICAgICogQHBhcmFtIGVuZCB0YXJn
ZXQgdmFsdWUKKyAgICAgKiBAcGFyYW0gYW1vdW50IGFtb3VudCB0byBsZXJwIGJldHdlZW4KKyAg
ICAgKiBAcmV0dXJucyB0aGUgbGVycGVkIHZhbHVlCisgICAgICovCisgICAgU2NhbGFyLkxlcnAg
PSBmdW5jdGlvbiAoc3RhcnQsIGVuZCwgYW1vdW50KSB7CisgICAgICAgIHJldHVybiBzdGFydCAr
ICgoZW5kIC0gc3RhcnQpICogYW1vdW50KTsKKyAgICB9OworICAgIC8qKgorICAgICogU2FtZSBh
cyBMZXJwIGJ1dCBtYWtlcyBzdXJlIHRoZSB2YWx1ZXMgaW50ZXJwb2xhdGUgY29ycmVjdGx5IHdo
ZW4gdGhleSB3cmFwIGFyb3VuZCAzNjAgZGVncmVlcy4KKyAgICAqIFRoZSBwYXJhbWV0ZXIgdCBp
cyBjbGFtcGVkIHRvIHRoZSByYW5nZSBbMCwgMV0uIFZhcmlhYmxlcyBhIGFuZCBiIGFyZSBhc3N1
bWVkIHRvIGJlIGluIGRlZ3JlZXMuCisgICAgKiBAcGFyYW0gc3RhcnQgc3RhcnQgdmFsdWUKKyAg
ICAqIEBwYXJhbSBlbmQgdGFyZ2V0IHZhbHVlCisgICAgKiBAcGFyYW0gYW1vdW50IGFtb3VudCB0
byBsZXJwIGJldHdlZW4KKyAgICAqIEByZXR1cm5zIHRoZSBsZXJwZWQgdmFsdWUKKyAgICAqLwor
ICAgIFNjYWxhci5MZXJwQW5nbGUgPSBmdW5jdGlvbiAoc3RhcnQsIGVuZCwgYW1vdW50KSB7Cisg
ICAgICAgIHZhciBudW0gPSBTY2FsYXIuUmVwZWF0KGVuZCAtIHN0YXJ0LCAzNjAuMCk7CisgICAg
ICAgIGlmIChudW0gPiAxODAuMCkgeworICAgICAgICAgICAgbnVtIC09IDM2MC4wOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzdGFydCArIG51bSAqIFNjYWxhci5DbGFtcChhbW91bnQpOwor
ICAgIH07CisgICAgLyoqCisgICAgKiBDYWxjdWxhdGVzIHRoZSBsaW5lYXIgcGFyYW1ldGVyIHQg
dGhhdCBwcm9kdWNlcyB0aGUgaW50ZXJwb2xhbnQgdmFsdWUgd2l0aGluIHRoZSByYW5nZSBbYSwg
Yl0uCisgICAgKiBAcGFyYW0gYSBzdGFydCB2YWx1ZQorICAgICogQHBhcmFtIGIgdGFyZ2V0IHZh
bHVlCisgICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgYmV0d2VlbiBhIGFuZCBiCisgICAgKiBAcmV0
dXJucyB0aGUgaW52ZXJzZUxlcnAgdmFsdWUKKyAgICAqLworICAgIFNjYWxhci5JbnZlcnNlTGVy
cCA9IGZ1bmN0aW9uIChhLCBiLCB2YWx1ZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gMDsKKyAg
ICAgICAgaWYgKGEgIT0gYikgeworICAgICAgICAgICAgcmVzdWx0ID0gU2NhbGFyLkNsYW1wKCh2
YWx1ZSAtIGEpIC8gKGIgLSBhKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICByZXN1bHQgPSAwLjA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgc2NhbGFyIGxvY2F0ZWQgZm9yICJh
bW91bnQiIChmbG9hdCkgb24gdGhlIEhlcm1pdGUgc3BsaW5lIGRlZmluZWQgYnkgdGhlIHNjYWxh
cnMgInZhbHVlMSIsICJ2YWx1ZTMiLCAidGFuZ2VudDEiLCAidGFuZ2VudDIiLgorICAgICAqIEBz
ZWUgaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9IZXJtaXRlUG9seW5vbWlhbC5odG1sCisg
ICAgICogQHBhcmFtIHZhbHVlMSBzcGxpbmUgdmFsdWUKKyAgICAgKiBAcGFyYW0gdGFuZ2VudDEg
c3BsaW5lIHZhbHVlCisgICAgICogQHBhcmFtIHZhbHVlMiBzcGxpbmUgdmFsdWUKKyAgICAgKiBA
cGFyYW0gdGFuZ2VudDIgc3BsaW5lIHZhbHVlCisgICAgICogQHBhcmFtIGFtb3VudCBpbnB1dCB2
YWx1ZQorICAgICAqIEByZXR1cm5zIGhlcm1pdGUgcmVzdWx0CisgICAgICovCisgICAgU2NhbGFy
Lkhlcm1pdGUgPSBmdW5jdGlvbiAodmFsdWUxLCB0YW5nZW50MSwgdmFsdWUyLCB0YW5nZW50Miwg
YW1vdW50KSB7CisgICAgICAgIHZhciBzcXVhcmVkID0gYW1vdW50ICogYW1vdW50OworICAgICAg
ICB2YXIgY3ViZWQgPSBhbW91bnQgKiBzcXVhcmVkOworICAgICAgICB2YXIgcGFydDEgPSAoKDIu
MCAqIGN1YmVkKSAtICgzLjAgKiBzcXVhcmVkKSkgKyAxLjA7CisgICAgICAgIHZhciBwYXJ0MiA9
ICgtMi4wICogY3ViZWQpICsgKDMuMCAqIHNxdWFyZWQpOworICAgICAgICB2YXIgcGFydDMgPSAo
Y3ViZWQgLSAoMi4wICogc3F1YXJlZCkpICsgYW1vdW50OworICAgICAgICB2YXIgcGFydDQgPSBj
dWJlZCAtIHNxdWFyZWQ7CisgICAgICAgIHJldHVybiAoKCh2YWx1ZTEgKiBwYXJ0MSkgKyAodmFs
dWUyICogcGFydDIpKSArICh0YW5nZW50MSAqIHBhcnQzKSkgKyAodGFuZ2VudDIgKiBwYXJ0NCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAqIFJldHVybnMgYSByYW5kb20gZmxvYXQgbnVtYmVyIGJl
dHdlZW4gYW5kIG1pbiBhbmQgbWF4IHZhbHVlcworICAgICogQHBhcmFtIG1pbiBtaW4gdmFsdWUg
b2YgcmFuZG9tCisgICAgKiBAcGFyYW0gbWF4IG1heCB2YWx1ZSBvZiByYW5kb20KKyAgICAqIEBy
ZXR1cm5zIHJhbmRvbSB2YWx1ZQorICAgICovCisgICAgU2NhbGFyLlJhbmRvbVJhbmdlID0gZnVu
Y3Rpb24gKG1pbiwgbWF4KSB7CisgICAgICAgIGlmIChtaW4gPT09IG1heCkgeworICAgICAgICAg
ICAgcmV0dXJuIG1pbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKChNYXRoLnJhbmRvbSgp
ICogKG1heCAtIG1pbikpICsgbWluKTsKKyAgICB9OworICAgIC8qKgorICAgICogVGhpcyBmdW5j
dGlvbiByZXR1cm5zIHBlcmNlbnRhZ2Ugb2YgYSBudW1iZXIgaW4gYSBnaXZlbiByYW5nZS4KKyAg
ICAqCisgICAgKiBSYW5nZVRvUGVyY2VudCg0MCwyMCw2MCkgd2lsbCByZXR1cm4gMC41ICg1MCUp
CisgICAgKiBSYW5nZVRvUGVyY2VudCgzNCwwLDEwMCkgd2lsbCByZXR1cm4gMC4zNCAoMzQlKQor
ICAgICogQHBhcmFtIG51bWJlciB0byBjb252ZXJ0IHRvIHBlcmNlbnRhZ2UKKyAgICAqIEBwYXJh
bSBtaW4gbWluIHJhbmdlCisgICAgKiBAcGFyYW0gbWF4IG1heCByYW5nZQorICAgICogQHJldHVy
bnMgdGhlIHBlcmNlbnRhZ2UKKyAgICAqLworICAgIFNjYWxhci5SYW5nZVRvUGVyY2VudCA9IGZ1
bmN0aW9uIChudW1iZXIsIG1pbiwgbWF4KSB7CisgICAgICAgIHJldHVybiAoKG51bWJlciAtIG1p
bikgLyAobWF4IC0gbWluKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAqIFRoaXMgZnVuY3Rpb24g
cmV0dXJucyBudW1iZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcGVyY2VudGFnZSBpbiBhIGdp
dmVuIHJhbmdlLgorICAgICoKKyAgICAqIFBlcmNlbnRUb1JhbmdlKDAuMzQsMCwxMDApIHdpbGwg
cmV0dXJuIDM0LgorICAgICogQHBhcmFtIHBlcmNlbnQgdG8gY29udmVydCB0byBudW1iZXIKKyAg
ICAqIEBwYXJhbSBtaW4gbWluIHJhbmdlCisgICAgKiBAcGFyYW0gbWF4IG1heCByYW5nZQorICAg
ICogQHJldHVybnMgdGhlIG51bWJlcgorICAgICovCisgICAgU2NhbGFyLlBlcmNlbnRUb1Jhbmdl
ID0gZnVuY3Rpb24gKHBlcmNlbnQsIG1pbiwgbWF4KSB7CisgICAgICAgIHJldHVybiAoKG1heCAt
IG1pbikgKiBwZXJjZW50ICsgbWluKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
dGhlIGFuZ2xlIGNvbnZlcnRlZCB0byBlcXVpdmFsZW50IHZhbHVlIGJldHdlZW4gLU1hdGguUEkg
YW5kIE1hdGguUEkgcmFkaWFucy4KKyAgICAgKiBAcGFyYW0gYW5nbGUgVGhlIGFuZ2xlIHRvIG5v
cm1hbGl6ZSBpbiByYWRpYW4uCisgICAgICogQHJldHVybiBUaGUgY29udmVydGVkIGFuZ2xlLgor
ICAgICAqLworICAgIFNjYWxhci5Ob3JtYWxpemVSYWRpYW5zID0gZnVuY3Rpb24gKGFuZ2xlKSB7
CisgICAgICAgIC8vIE1vcmUgcHJlY2lzZSBidXQgc2xvd2VyIHZlcnNpb24ga2VwdCBmb3IgcmVm
ZXJlbmNlLgorICAgICAgICAvLyBhbmdsZSA9IGFuZ2xlICUgVG9vbHMuVHdvUGk7CisgICAgICAg
IC8vIGFuZ2xlID0gKGFuZ2xlICsgVG9vbHMuVHdvUGkpICUgVG9vbHMuVHdvUGk7CisgICAgICAg
IC8vaWYgKGFuZ2xlID4gTWF0aC5QSSkgeworICAgICAgICAvLwlhbmdsZSAtPSBUb29scy5Ud29Q
aTsKKyAgICAgICAgLy99CisgICAgICAgIGFuZ2xlIC09IChTY2FsYXIuVHdvUGkgKiBNYXRoLmZs
b29yKChhbmdsZSArIE1hdGguUEkpIC8gU2NhbGFyLlR3b1BpKSk7CisgICAgICAgIHJldHVybiBh
bmdsZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFR3byBwaSBjb25zdGFudHMgY29udmVuaWVu
dCBmb3IgY29tcHV0YXRpb24uCisgICAgICovCisgICAgU2NhbGFyLlR3b1BpID0gTWF0aC5QSSAq
IDI7CisgICAgcmV0dXJuIFNjYWxhcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vTWF0aHMvbWF0aC5zaXplLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL01hdGhzL21hdGguc2l6ZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNpemUgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2l6ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2l6ZTsg
fSk7CisvKioKKyAqIFNpemUgY29udGFpbmluZyB3aWRodCBhbmQgaGVpZ2h0CisgKi8KK3ZhciBT
aXplID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0
ZXMgYSBTaXplIG9iamVjdCBmcm9tIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IChmbG9hdHMp
LgorICAgICAqIEBwYXJhbSB3aWR0aCB3aWR0aCBvZiB0aGUgbmV3IHNpemUKKyAgICAgKiBAcGFy
YW0gaGVpZ2h0IGhlaWdodCBvZiB0aGUgbmV3IHNpemUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBT
aXplKHdpZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOworICAgICAg
ICB0aGlzLmhlaWdodCA9IGhlaWdodDsKKyAgICB9CisgICAgLyoqCisgICAgICogUmV0dXJucyBh
IHN0cmluZyB3aXRoIHRoZSBTaXplIHdpZHRoIGFuZCBoZWlnaHQKKyAgICAgKiBAcmV0dXJucyBh
IHN0cmluZyB3aXRoIHRoZSBTaXplIHdpZHRoIGFuZCBoZWlnaHQKKyAgICAgKi8KKyAgICBTaXpl
LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJ7Vzog
IiArIHRoaXMud2lkdGggKyAiLCBIOiAiICsgdGhpcy5oZWlnaHQgKyAifSI7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiAiU2l6ZSIKKyAgICAgKiBAcmV0dXJucyB0aGUgc3RyaW5nICJTaXplIgor
ICAgICAqLworICAgIFNpemUucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuICJTaXplIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
dGhlIFNpemUgaGFzaCBjb2RlLgorICAgICAqIEByZXR1cm5zIGEgaGFzaCBjb2RlIGZvciBhIHVu
aXF1ZSB3aWR0aCBhbmQgaGVpZ2h0CisgICAgICovCisgICAgU2l6ZS5wcm90b3R5cGUuZ2V0SGFz
aENvZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBoYXNoID0gdGhpcy53aWR0aCB8IDA7
CisgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAodGhpcy5oZWlnaHQgfCAwKTsKKyAgICAg
ICAgcmV0dXJuIGhhc2g7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBjdXJy
ZW50IHNpemUgZnJvbSB0aGUgZ2l2ZW4gb25lLgorICAgICAqIEBwYXJhbSBzcmMgdGhlIGdpdmVu
IHNpemUKKyAgICAgKi8KKyAgICBTaXplLnByb3RvdHlwZS5jb3B5RnJvbSA9IGZ1bmN0aW9uIChz
cmMpIHsKKyAgICAgICAgdGhpcy53aWR0aCA9IHNyYy53aWR0aDsKKyAgICAgICAgdGhpcy5oZWln
aHQgPSBzcmMuaGVpZ2h0OworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyBpbiBwbGFj
ZSB0aGUgY3VycmVudCBTaXplIGZyb20gdGhlIGdpdmVuIGZsb2F0cy4KKyAgICAgKiBAcGFyYW0g
d2lkdGggd2lkdGggb2YgdGhlIG5ldyBzaXplCisgICAgICogQHBhcmFtIGhlaWdodCBoZWlnaHQg
b2YgdGhlIG5ldyBzaXplCisgICAgICogQHJldHVybnMgdGhlIHVwZGF0ZWQgU2l6ZS4KKyAgICAg
Ki8KKyAgICBTaXplLnByb3RvdHlwZS5jb3B5RnJvbUZsb2F0cyA9IGZ1bmN0aW9uICh3aWR0aCwg
aGVpZ2h0KSB7CisgICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKKyAgICAgICAgdGhpcy5oZWln
aHQgPSBoZWlnaHQ7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAg
ICogVXBkYXRlcyBpbiBwbGFjZSB0aGUgY3VycmVudCBTaXplIGZyb20gdGhlIGdpdmVuIGZsb2F0
cy4KKyAgICAgKiBAcGFyYW0gd2lkdGggd2lkdGggdG8gc2V0CisgICAgICogQHBhcmFtIGhlaWdo
dCBoZWlnaHQgdG8gc2V0CisgICAgICogQHJldHVybnMgdGhlIHVwZGF0ZWQgU2l6ZS4KKyAgICAg
Ki8KKyAgICBTaXplLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5jb3B5RnJvbUZsb2F0cyh3aWR0aCwgaGVpZ2h0KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIE11bHRpcGxpZXMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYnkgbnVt
YmVycworICAgICAqIEBwYXJhbSB3IGZhY3RvciB0byBtdWx0aXBsZSB0aGUgd2lkdGggYnkKKyAg
ICAgKiBAcGFyYW0gaCBmYWN0b3IgdG8gbXVsdGlwbGUgdGhlIGhlaWdodCBieQorICAgICAqIEBy
ZXR1cm5zIGEgbmV3IFNpemUgc2V0IHdpdGggdGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBvZiB0
aGUgY3VycmVudCBTaXplIGFuZCB0aGUgZ2l2ZW4gZmxvYXRzLgorICAgICAqLworICAgIFNpemUu
cHJvdG90eXBlLm11bHRpcGx5QnlGbG9hdHMgPSBmdW5jdGlvbiAodywgaCkgeworICAgICAgICBy
ZXR1cm4gbmV3IFNpemUodGhpcy53aWR0aCAqIHcsIHRoaXMuaGVpZ2h0ICogaCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhlIHNpemUKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBT
aXplIGNvcGllZCBmcm9tIHRoZSBnaXZlbiBvbmUuCisgICAgICovCisgICAgU2l6ZS5wcm90b3R5
cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgU2l6ZSh0aGlzLndp
ZHRoLCB0aGlzLmhlaWdodCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUcnVlIGlmIHRoZSBj
dXJyZW50IFNpemUgYW5kIHRoZSBnaXZlbiBvbmUgd2lkdGggYW5kIGhlaWdodCBhcmUgc3RyaWN0
bHkgZXF1YWwuCisgICAgICogQHBhcmFtIG90aGVyIHRoZSBvdGhlciBzaXplIHRvIGNvbXBhcmUg
YWdhaW5zdAorICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1cnJlbnQgU2l6ZSBhbmQgdGhl
IGdpdmVuIG9uZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBzdHJpY3RseSBlcXVhbC4KKyAgICAgKi8K
KyAgICBTaXplLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAgICAg
aWYgKCFvdGhlcikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiAodGhpcy53aWR0aCA9PT0gb3RoZXIud2lkdGgpICYmICh0aGlzLmhlaWdodCA9
PT0gb3RoZXIuaGVpZ2h0KTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaXpl
LnByb3RvdHlwZSwgInN1cmZhY2UiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc3Vy
ZmFjZSBvZiB0aGUgU2l6ZSA6IHdpZHRoICogaGVpZ2h0IChmbG9hdCkuCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLndpZHRo
ICogdGhpcy5oZWlnaHQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIENyZWF0
ZSBhIG5ldyBzaXplIG9mIHplcm8KKyAgICAgKiBAcmV0dXJucyBhIG5ldyBTaXplIHNldCB0byAo
MC4wLCAwLjApCisgICAgICovCisgICAgU2l6ZS5aZXJvID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gbmV3IFNpemUoMC4wLCAwLjApOworICAgIH07CisgICAgLyoqCisgICAgICogU3Vt
cyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0d28gc2l6ZXMKKyAgICAgKiBAcGFyYW0gb3RoZXJT
aXplIHNpemUgdG8gYWRkIHRvIHRoaXMgc2l6ZQorICAgICAqIEByZXR1cm5zIGEgbmV3IFNpemUg
c2V0IGFzIHRoZSBhZGRpdGlvbiByZXN1bHQgb2YgdGhlIGN1cnJlbnQgU2l6ZSBhbmQgdGhlIGdp
dmVuIG9uZS4KKyAgICAgKi8KKyAgICBTaXplLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAob3Ro
ZXJTaXplKSB7CisgICAgICAgIHZhciByID0gbmV3IFNpemUodGhpcy53aWR0aCArIG90aGVyU2l6
ZS53aWR0aCwgdGhpcy5oZWlnaHQgKyBvdGhlclNpemUuaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJu
IHI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTdWJ0cmFjdHMgdGhlIHdpZHRoIGFuZCBoZWln
aHQgb2YgdHdvCisgICAgICogQHBhcmFtIG90aGVyU2l6ZSBzaXplIHRvIHN1YnRyYWN0IHRvIHRo
aXMgc2l6ZQorICAgICAqIEByZXR1cm5zIGEgbmV3IFNpemUgc2V0IGFzIHRoZSBzdWJ0cmFjdGlv
biByZXN1bHQgb2YgIHRoZSBnaXZlbiBvbmUgZnJvbSB0aGUgY3VycmVudCBTaXplLgorICAgICAq
LworICAgIFNpemUucHJvdG90eXBlLnN1YnRyYWN0ID0gZnVuY3Rpb24gKG90aGVyU2l6ZSkgewor
ICAgICAgICB2YXIgciA9IG5ldyBTaXplKHRoaXMud2lkdGggLSBvdGhlclNpemUud2lkdGgsIHRo
aXMuaGVpZ2h0IC0gb3RoZXJTaXplLmhlaWdodCk7CisgICAgICAgIHJldHVybiByOworICAgIH07
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBTaXplIHNldCBhdCB0aGUgbGluZWFyIGlu
dGVycG9sYXRpb24gImFtb3VudCIgYmV0d2VlbiAic3RhcnQiIGFuZCAiZW5kIgorICAgICAqIEBw
YXJhbSBzdGFydCBzdGFydGluZyBzaXplIHRvIGxlcnAgYmV0d2VlbgorICAgICAqIEBwYXJhbSBl
bmQgZW5kIHNpemUgdG8gbGVycCBiZXR3ZWVuCisgICAgICogQHBhcmFtIGFtb3VudCBhbW91bnQg
dG8gbGVycCBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIHZhbHVlcworICAgICAqIEByZXR1cm5z
IGEgbmV3IFNpemUgc2V0IGF0IHRoZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiAiYW1vdW50IiBiZXR3
ZWVuICJzdGFydCIgYW5kICJlbmQiCisgICAgICovCisgICAgU2l6ZS5MZXJwID0gZnVuY3Rpb24g
KHN0YXJ0LCBlbmQsIGFtb3VudCkgeworICAgICAgICB2YXIgdyA9IHN0YXJ0LndpZHRoICsgKChl
bmQud2lkdGggLSBzdGFydC53aWR0aCkgKiBhbW91bnQpOworICAgICAgICB2YXIgaCA9IHN0YXJ0
LmhlaWdodCArICgoZW5kLmhlaWdodCAtIHN0YXJ0LmhlaWdodCkgKiBhbW91bnQpOworICAgICAg
ICByZXR1cm4gbmV3IFNpemUodywgaCk7CisgICAgfTsKKyAgICByZXR1cm4gU2l6ZTsKK30oKSk7
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWF0aHMvbWF0aC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWF0aHMvbWF0aC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTcGFjZSwgQXhpcywg
Q29sb3IzLCBDb2xvcjQsIFRtcENvbG9ycywgVG9HYW1tYVNwYWNlLCBUb0xpbmVhclNwYWNlLCBF
cHNpbG9uLCBGcnVzdHVtLCBQbGFuZSwgU2l6ZSwgVmVjdG9yMiwgVmVjdG9yMywgVmVjdG9yNCwg
UXVhdGVybmlvbiwgTWF0cml4LCBUbXBWZWN0b3JzLCBWaWV3cG9ydCwgT3JpZW50YXRpb24sIEJl
emllckN1cnZlLCBBbmdsZSwgQXJjMiwgUGF0aDIsIFBhdGgzRCwgQ3VydmUzLCBQb3NpdGlvbk5v
cm1hbFZlcnRleCwgUG9zaXRpb25Ob3JtYWxUZXh0dXJlVmVydGV4ICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGguYXhpcyAqLyAiLi9N
YXRocy9tYXRoLmF4aXMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3BhY2UiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU3BhY2Ui
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXhpcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21h
dGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBeGlzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0aC5jb2xvciAqLyAiLi9NYXRocy9t
YXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yMyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3IzIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yNCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21h
dGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3I0Il07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlRtcENvbG9ycyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG1wQ29sb3JzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGguY29uc3RhbnRzICovICIu
L01hdGhzL21hdGguY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvR2FtbWFTcGFj
ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlRvR2FtbWFTcGFjZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUb0xp
bmVhclNwYWNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siVG9MaW5lYXJTcGFjZSJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJFcHNpbG9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF9jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siRXBzaWxvbiJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9tYXRoX2ZydXN0dW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0aC5mcnVzdHVtICovICIuL01hdGhzL21hdGguZnJ1
c3R1bS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcnVzdHVtIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfbWF0aF9mcnVzdHVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkZydXN0dW0iXTsg
fSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0aF9wYXRoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGgucGF0aCAqLyAi
Li9NYXRocy9tYXRoLnBhdGgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT3JpZW50YXRpb24iLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siT3JpZW50YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmV6aWVyQ3VydmUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siQmV6aWVyQ3VydmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5nbGUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9tYXRoX3BhdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQW5n
bGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjMiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X21hdGhfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBcmMyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBhdGgyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF9wYXRoX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBhdGgyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBhdGgzRCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfcGF0aF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJQYXRoM0QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3VydmUz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF9wYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkN1cnZlMyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tYXRoX3Bs
YW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL21hdGgucGxhbmUgKi8gIi4vTWF0aHMvbWF0aC5wbGFuZS50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJQbGFuZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfcGxhbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siUGxhbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfbWF0aF9zaXplX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL21hdGguc2l6ZSAqLyAiLi9NYXRocy9tYXRoLnNpemUudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiU2l6ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfc2l6ZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTaXplIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3RvcjIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZWN0b3IyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlZlY3RvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZWN0b3IzIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlZlY3RvcjQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZWN0b3I0Il07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlF1YXRlcm5pb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJRdWF0ZXJuaW9uIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk1hdHJpeCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIk1hdHJpeCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUbXBW
ZWN0b3JzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzdfX1siVG1wVmVjdG9ycyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9tYXRoX3ZlcnRleEZvcm1hdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tYXRoLnZlcnRleEZvcm1hdCAqLyAiLi9NYXRocy9tYXRo
LnZlcnRleEZvcm1hdC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NpdGlvbk5vcm1hbFZlcnRl
eCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhfdmVydGV4Rm9ybWF0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV84X19bIlBvc2l0aW9uTm9ybWFsVmVydGV4Il07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBvc2l0aW9uTm9ybWFsVGV4dHVyZVZlcnRleCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X21hdGhfdmVydGV4Rm9ybWF0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBvc2l0aW9u
Tm9ybWFsVGV4dHVyZVZlcnRleCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9t
YXRoX3ZpZXdwb3J0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL21hdGgudmlld3BvcnQgKi8gIi4vTWF0aHMvbWF0aC52aWV3cG9ydC50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJWaWV3cG9ydCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21hdGhf
dmlld3BvcnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmlld3BvcnQiXTsgfSk7CisK
KworCisKKworCisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NYXRocy9tYXRo
LnZlY3Rvci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL01hdGhzL21hdGgudmVjdG9yLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBWZWN0b3IyLCBWZWN0b3IzLCBWZWN0b3I0
LCBRdWF0ZXJuaW9uLCBNYXRyaXgsIFRtcFZlY3RvcnMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiVmVjdG9yMiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVmVjdG9yMjsgfSk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJWZWN0b3IzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBWZWN0b3Iz
OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3RvcjQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFZl
Y3RvcjQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUXVhdGVybmlvbiIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gUXVhdGVybmlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNYXRyaXgiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIE1hdHJpeDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUbXBWZWN0b3JzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBUbXBWZWN0b3JzOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vbWF0aC5zY2FsYXIgKi8gIi4vTWF0aHMvbWF0aC5zY2FsYXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWF0aC5jb25zdGFu
dHMgKi8gIi4vTWF0aHMvbWF0aC5jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2FycmF5VG9vbHMgKi8gIi4vTWlzYy9hcnJheVRv
b2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNj
L3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKworCisvKioKKyAqIENs
YXNzIHJlcHJlc2VudGluZyBhIHZlY3RvciBjb250YWluaW5nIDIgY29vcmRpbmF0ZXMKKyAqLwor
dmFyIFZlY3RvcjIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIG5ldyBWZWN0b3IyIGZyb20gdGhlIGdpdmVuIHggYW5kIHkgY29vcmRpbmF0
ZXMKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlCisgICAgICog
QHBhcmFtIHkgZGVmaW5lcyB0aGUgc2Vjb25kIGNvb3JkaW5hdGUKKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBWZWN0b3IyKAorICAgIC8qKiBkZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlICovCisg
ICAgeCwgCisgICAgLyoqIGRlZmluZXMgdGhlIHNlY29uZCBjb29yZGluYXRlICovCisgICAgeSkg
eworICAgICAgICBpZiAoeCA9PT0gdm9pZCAwKSB7IHggPSAwOyB9CisgICAgICAgIGlmICh5ID09
PSB2b2lkIDApIHsgeSA9IDA7IH0KKyAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgdGhpcy55
ID0geTsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyB3aXRoIHRoZSBWZWN0
b3IyIGNvb3JkaW5hdGVzCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgVmVjdG9y
MiBjb29yZGluYXRlcworICAgICAqLworICAgIFZlY3RvcjIucHJvdG90eXBlLnRvU3RyaW5nID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIntYOiAiICsgdGhpcy54ICsgIiBZOiIgKyB0
aGlzLnkgKyAifSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGNsYXNzIG5hbWUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgc3RyaW5nICJWZWN0b3IyIgorICAgICAqLworICAgIFZlY3RvcjIu
cHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJW
ZWN0b3IyIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgY3VycmVudCB2ZWN0b3IgaGFz
aCBjb2RlCisgICAgICogQHJldHVybnMgdGhlIFZlY3RvcjIgaGFzaCBjb2RlIGFzIGEgbnVtYmVy
CisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuZ2V0SGFzaENvZGUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBoYXNoID0gdGhpcy54IHwgMDsKKyAgICAgICAgaGFzaCA9IChoYXNo
ICogMzk3KSBeICh0aGlzLnkgfCAwKTsKKyAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgfTsKKyAg
ICAvLyBPcGVyYXRvcnMKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBWZWN0b3IyIGNvb3JkaW5h
dGVzIGluIHRoZSBnaXZlbiBhcnJheSBvciBGbG9hdDMyQXJyYXkgZnJvbSB0aGUgZ2l2ZW4gaW5k
ZXguCisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIHNvdXJjZSBhcnJheQorICAgICAq
IEBwYXJhbSBpbmRleCBkZWZpbmVzIHRoZSBvZmZzZXQgaW4gc291cmNlIGFycmF5CisgICAgICog
QHJldHVybnMgdGhlIGN1cnJlbnQgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90
eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXksIGluZGV4KSB7CisgICAgICAgIGlmIChpbmRl
eCA9PT0gdm9pZCAwKSB7IGluZGV4ID0gMDsgfQorICAgICAgICBhcnJheVtpbmRleF0gPSB0aGlz
Lng7CisgICAgICAgIGFycmF5W2luZGV4ICsgMV0gPSB0aGlzLnk7CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ29weSB0aGUgY3VycmVudCB2ZWN0b3IgdG8g
YW4gYXJyYXkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBhcnJheSB3aXRoIDIgZWxlbWVudHM6IHRo
ZSBWZWN0b3IyIGNvb3JkaW5hdGVzLgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90eXBlLmFz
QXJyYXkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoKTsK
KyAgICAgICAgdGhpcy50b0FycmF5KHJlc3VsdCwgMCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBWZWN0b3IyIGNvb3JkaW5hdGVzIHdp
dGggdGhlIGdpdmVuIFZlY3RvcjIgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gc291cmNlIGRl
ZmluZXMgdGhlIHNvdXJjZSBWZWN0b3IyCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBk
YXRlZCBWZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuY29weUZyb20gPSBm
dW5jdGlvbiAoc291cmNlKSB7CisgICAgICAgIHRoaXMueCA9IHNvdXJjZS54OworICAgICAgICB0
aGlzLnkgPSBzb3VyY2UueTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTZXRzIHRoZSBWZWN0b3IyIGNvb3JkaW5hdGVzIHdpdGggdGhlIGdpdmVuIGZsb2F0
cworICAgICAqIEBwYXJhbSB4IGRlZmluZXMgdGhlIGZpcnN0IGNvb3JkaW5hdGUKKyAgICAgKiBA
cGFyYW0geSBkZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZQorICAgICAqIEByZXR1cm5zIHRo
ZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90eXBl
LmNvcHlGcm9tRmxvYXRzID0gZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAgdGhpcy54ID0geDsK
KyAgICAgICAgdGhpcy55ID0geTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIHRoZSBWZWN0b3IyIGNvb3JkaW5hdGVzIHdpdGggdGhlIGdpdmVuIGZs
b2F0cworICAgICAqIEBwYXJhbSB4IGRlZmluZXMgdGhlIGZpcnN0IGNvb3JkaW5hdGUKKyAgICAg
KiBAcGFyYW0geSBkZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZQorICAgICAqIEByZXR1cm5z
IHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90
eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvcHlGcm9t
RmxvYXRzKHgsIHkpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGFub3RoZXIgdmVjdG9y
IHdpdGggdGhlIGN1cnJlbnQgb25lCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIGRlZmluZXMg
dGhlIG90aGVyIHZlY3RvcgorICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjIgc2V0IHdpdGgg
dGhlIGFkZGl0aW9uIG9mIHRoZSBjdXJyZW50IFZlY3RvcjIgYW5kIHRoZSBnaXZlbiBvbmUgY29v
cmRpbmF0ZXMKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAo
b3RoZXJWZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHRoaXMueCArIG90aGVy
VmVjdG9yLngsIHRoaXMueSArIG90aGVyVmVjdG9yLnkpOworICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0cyB0aGUgInJlc3VsdCIgY29vcmRpbmF0ZXMgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhl
IGN1cnJlbnQgVmVjdG9yMiBhbmQgdGhlIGdpdmVuIG9uZSBjb29yZGluYXRlcworICAgICAqIEBw
YXJhbSBvdGhlclZlY3RvciBkZWZpbmVzIHRoZSBvdGhlciB2ZWN0b3IKKyAgICAgKiBAcGFyYW0g
cmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgdW5t
b2RpZmllZCBjdXJyZW50IFZlY3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlwZS5h
ZGRUb1JlZiA9IGZ1bmN0aW9uIChvdGhlclZlY3RvciwgcmVzdWx0KSB7CisgICAgICAgIHJlc3Vs
dC54ID0gdGhpcy54ICsgb3RoZXJWZWN0b3IueDsKKyAgICAgICAgcmVzdWx0LnkgPSB0aGlzLnkg
KyBvdGhlclZlY3Rvci55OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldCB0aGUgVmVjdG9yMiBjb29yZGluYXRlcyBieSBhZGRpbmcgdGhlIGdpdmVuIFZl
Y3RvcjIgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUg
b3RoZXIgdmVjdG9yCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3Iy
CisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuYWRkSW5QbGFjZSA9IGZ1bmN0aW9uIChv
dGhlclZlY3RvcikgeworICAgICAgICB0aGlzLnggKz0gb3RoZXJWZWN0b3IueDsKKyAgICAgICAg
dGhpcy55ICs9IG90aGVyVmVjdG9yLnk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyBhIG5ldyBWZWN0b3IyIGJ5IGFkZGluZyB0aGUgY3VycmVudCBW
ZWN0b3IyIGNvb3JkaW5hdGVzIHRvIHRoZSBnaXZlbiBWZWN0b3IzIHgsIHkgY29vcmRpbmF0ZXMK
KyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUgb3RoZXIgdmVjdG9yCisgICAg
ICogQHJldHVybnMgYSBuZXcgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90eXBl
LmFkZFZlY3RvcjMgPSBmdW5jdGlvbiAob3RoZXJWZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBWZWN0b3IyKHRoaXMueCArIG90aGVyVmVjdG9yLngsIHRoaXMueSArIG90aGVyVmVjdG9yLnkp
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIG5ldyBWZWN0b3IyIHNldCB3aXRoIHRo
ZSBzdWJ0cmFjdGVkIGNvb3JkaW5hdGVzIG9mIHRoZSBnaXZlbiBvbmUgZnJvbSB0aGUgY3VycmVu
dCBWZWN0b3IyCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIGRlZmluZXMgdGhlIG90aGVyIHZl
Y3RvcgorICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3Iy
LnByb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIChvdGhlclZlY3RvcikgeworICAgICAgICBy
ZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54IC0gb3RoZXJWZWN0b3IueCwgdGhpcy55IC0gb3RoZXJW
ZWN0b3IueSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSAicmVzdWx0IiBjb29y
ZGluYXRlcyB3aXRoIHRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgZ2l2ZW4gb25lIGZyb20gdGhlIGN1
cnJlbnQgVmVjdG9yMiBjb29yZGluYXRlcy4KKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVm
aW5lcyB0aGUgb3RoZXIgdmVjdG9yCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0
YXJnZXQgdmVjdG9yCisgICAgICogQHJldHVybnMgdGhlIHVubW9kaWZpZWQgY3VycmVudCBWZWN0
b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuc3VidHJhY3RUb1JlZiA9IGZ1bmN0
aW9uIChvdGhlclZlY3RvciwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0gdGhpcy54IC0g
b3RoZXJWZWN0b3IueDsKKyAgICAgICAgcmVzdWx0LnkgPSB0aGlzLnkgLSBvdGhlclZlY3Rvci55
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IGN1cnJlbnQgVmVjdG9yMiBjb29yZGluYXRlcyBieSBzdWJ0cmFjdGluZyBmcm9tIGl0IHRoZSBn
aXZlbiBvbmUgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0
aGUgb3RoZXIgdmVjdG9yCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0
b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuc3VidHJhY3RJblBsYWNlID0gZnVu
Y3Rpb24gKG90aGVyVmVjdG9yKSB7CisgICAgICAgIHRoaXMueCAtPSBvdGhlclZlY3Rvci54Owor
ICAgICAgICB0aGlzLnkgLT0gb3RoZXJWZWN0b3IueTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBNdWx0aXBsaWVzIGluIHBsYWNlIHRoZSBjdXJyZW50IFZl
Y3RvcjIgY29vcmRpbmF0ZXMgYnkgdGhlIGdpdmVuIG9uZXMKKyAgICAgKiBAcGFyYW0gb3RoZXJW
ZWN0b3IgZGVmaW5lcyB0aGUgb3RoZXIgdmVjdG9yCisgICAgICogQHJldHVybnMgdGhlIGN1cnJl
bnQgdXBkYXRlZCBWZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUubXVsdGlw
bHlJblBsYWNlID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yKSB7CisgICAgICAgIHRoaXMueCAqPSBv
dGhlclZlY3Rvci54OworICAgICAgICB0aGlzLnkgKj0gb3RoZXJWZWN0b3IueTsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3Rv
cjIgc2V0IHdpdGggdGhlIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBjdXJyZW50IFZlY3RvcjIgYW5k
IHRoZSBnaXZlbiBvbmUgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVm
aW5lcyB0aGUgb3RoZXIgdmVjdG9yCisgICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMgorICAg
ICAqLworICAgIFZlY3RvcjIucHJvdG90eXBlLm11bHRpcGx5ID0gZnVuY3Rpb24gKG90aGVyVmVj
dG9yKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMih0aGlzLnggKiBvdGhlclZlY3Rvci54
LCB0aGlzLnkgKiBvdGhlclZlY3Rvci55KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMg
InJlc3VsdCIgY29vcmRpbmF0ZXMgd2l0aCB0aGUgbXVsdGlwbGljYXRpb24gb2YgdGhlIGN1cnJl
bnQgVmVjdG9yMiBhbmQgdGhlIGdpdmVuIG9uZSBjb29yZGluYXRlcworICAgICAqIEBwYXJhbSBv
dGhlclZlY3RvciBkZWZpbmVzIHRoZSBvdGhlciB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gcmVzdWx0
IGRlZmluZXMgdGhlIHRhcmdldCB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgdW5tb2RpZmll
ZCBjdXJyZW50IFZlY3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlwZS5tdWx0aXBs
eVRvUmVmID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yLCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0
LnggPSB0aGlzLnggKiBvdGhlclZlY3Rvci54OworICAgICAgICByZXN1bHQueSA9IHRoaXMueSAq
IG90aGVyVmVjdG9yLnk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogR2V0cyBhIG5ldyBWZWN0b3IyIHNldCB3aXRoIHRoZSBWZWN0b3IyIGNvb3JkaW5hdGVz
IG11bHRpcGxpZWQgYnkgdGhlIGdpdmVuIGZsb2F0cworICAgICAqIEBwYXJhbSB4IGRlZmluZXMg
dGhlIGZpcnN0IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSBzZWNvbmQg
Y29vcmRpbmF0ZQorICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjIKKyAgICAgKi8KKyAgICBW
ZWN0b3IyLnByb3RvdHlwZS5tdWx0aXBseUJ5RmxvYXRzID0gZnVuY3Rpb24gKHgsIHkpIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHRoaXMueCAqIHgsIHRoaXMueSAqIHkpOworICAgIH07
CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IyIHNldCB3aXRoIHRoZSBWZWN0
b3IyIGNvb3JkaW5hdGVzIGRpdmlkZWQgYnkgdGhlIGdpdmVuIG9uZSBjb29yZGluYXRlcworICAg
ICAqIEBwYXJhbSBvdGhlclZlY3RvciBkZWZpbmVzIHRoZSBvdGhlciB2ZWN0b3IKKyAgICAgKiBA
cmV0dXJucyBhIG5ldyBWZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuZGl2
aWRlID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9y
Mih0aGlzLnggLyBvdGhlclZlY3Rvci54LCB0aGlzLnkgLyBvdGhlclZlY3Rvci55KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgdGhlICJyZXN1bHQiIGNvb3JkaW5hdGVzIHdpdGggdGhl
IFZlY3RvcjIgZGl2aWRlZCBieSB0aGUgZ2l2ZW4gb25lIGNvb3JkaW5hdGVzCisgICAgICogQHBh
cmFtIG90aGVyVmVjdG9yIGRlZmluZXMgdGhlIG90aGVyIHZlY3RvcgorICAgICAqIEBwYXJhbSBy
ZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IHZlY3RvcgorICAgICAqIEByZXR1cm5zIHRoZSB1bm1v
ZGlmaWVkIGN1cnJlbnQgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90eXBlLmRp
dmlkZVRvUmVmID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yLCByZXN1bHQpIHsKKyAgICAgICAgcmVz
dWx0LnggPSB0aGlzLnggLyBvdGhlclZlY3Rvci54OworICAgICAgICByZXN1bHQueSA9IHRoaXMu
eSAvIG90aGVyVmVjdG9yLnk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoq
CisgICAgICogRGl2aWRlcyB0aGUgY3VycmVudCBWZWN0b3IyIGNvb3JkaW5hdGVzIGJ5IHRoZSBn
aXZlbiBvbmVzCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIGRlZmluZXMgdGhlIG90aGVyIHZl
Y3RvcgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yMgorICAgICAq
LworICAgIFZlY3RvcjIucHJvdG90eXBlLmRpdmlkZUluUGxhY2UgPSBmdW5jdGlvbiAob3RoZXJW
ZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZGl2aWRlVG9SZWYob3RoZXJWZWN0b3IsIHRo
aXMpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIG5ldyBWZWN0b3IyIHdpdGggY3Vy
cmVudCBWZWN0b3IyIG5lZ2F0ZWQgY29vcmRpbmF0ZXMKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBW
ZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUubmVnYXRlID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoLXRoaXMueCwgLXRoaXMueSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBNdWx0aXBseSB0aGUgVmVjdG9yMiBjb29yZGluYXRlcyBieSBz
Y2FsZQorICAgICAqIEBwYXJhbSBzY2FsZSBkZWZpbmVzIHRoZSBzY2FsaW5nIGZhY3RvcgorICAg
ICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yMgorICAgICAqLworICAgIFZl
Y3RvcjIucHJvdG90eXBlLnNjYWxlSW5QbGFjZSA9IGZ1bmN0aW9uIChzY2FsZSkgeworICAgICAg
ICB0aGlzLnggKj0gc2NhbGU7CisgICAgICAgIHRoaXMueSAqPSBzY2FsZTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjIg
c2NhbGVkIGJ5ICJzY2FsZSIgZnJvbSB0aGUgY3VycmVudCBWZWN0b3IyCisgICAgICogQHBhcmFt
IHNjYWxlIGRlZmluZXMgdGhlIHNjYWxpbmcgZmFjdG9yCisgICAgICogQHJldHVybnMgYSBuZXcg
VmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24g
KHNjYWxlKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgVmVjdG9yMigwLCAwKTsKKyAgICAg
ICAgdGhpcy5zY2FsZVRvUmVmKHNjYWxlLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07CisgICAgLyoqCisgICAgICogU2NhbGUgdGhlIGN1cnJlbnQgVmVjdG9yMiB2YWx1
ZXMgYnkgYSBmYWN0b3IgdG8gYSBnaXZlbiBWZWN0b3IyCisgICAgICogQHBhcmFtIHNjYWxlIGRl
ZmluZXMgdGhlIHNjYWxlIGZhY3RvcgorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUg
VmVjdG9yMiBvYmplY3Qgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5z
IHRoZSB1bm1vZGlmaWVkIGN1cnJlbnQgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIucHJv
dG90eXBlLnNjYWxlVG9SZWYgPSBmdW5jdGlvbiAoc2NhbGUsIHJlc3VsdCkgeworICAgICAgICBy
ZXN1bHQueCA9IHRoaXMueCAqIHNjYWxlOworICAgICAgICByZXN1bHQueSA9IHRoaXMueSAqIHNj
YWxlOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNjYWxl
IHRoZSBjdXJyZW50IFZlY3RvcjIgdmFsdWVzIGJ5IGEgZmFjdG9yIGFuZCBhZGQgdGhlIHJlc3Vs
dCB0byBhIGdpdmVuIFZlY3RvcjIKKyAgICAgKiBAcGFyYW0gc2NhbGUgZGVmaW5lcyB0aGUgc2Nh
bGUgZmFjdG9yCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSBWZWN0b3IyIG9iamVj
dCB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0CisgICAgICogQHJldHVybnMgdGhlIHVubW9kaWZp
ZWQgY3VycmVudCBWZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuc2NhbGVB
bmRBZGRUb1JlZiA9IGZ1bmN0aW9uIChzY2FsZSwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54
ICs9IHRoaXMueCAqIHNjYWxlOworICAgICAgICByZXN1bHQueSArPSB0aGlzLnkgKiBzY2FsZTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9v
bGVhbiBpZiB0d28gdmVjdG9ycyBhcmUgZXF1YWxzCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9y
IGRlZmluZXMgdGhlIG90aGVyIHZlY3RvcgorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGdp
dmVuIHZlY3RvciBjb29yZGluYXRlcyBzdHJpY3RseSBlcXVhbCB0aGUgY3VycmVudCBWZWN0b3Iy
IG9uZXMKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAo
b3RoZXJWZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIG90aGVyVmVjdG9yICYmIHRoaXMueCA9PT0g
b3RoZXJWZWN0b3IueCAmJiB0aGlzLnkgPT09IG90aGVyVmVjdG9yLnk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpZiB0d28gdmVjdG9ycyBhcmUgZXF1YWxzICh1c2lu
ZyBhbiBlcHNpbG9uIHZhbHVlKQorICAgICAqIEBwYXJhbSBvdGhlclZlY3RvciBkZWZpbmVzIHRo
ZSBvdGhlciB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gZXBzaWxvbiBkZWZpbmVzIHRoZSBtaW5pbWFs
IGRpc3RhbmNlIHRvIGNvbnNpZGVyIGVxdWFsaXR5CisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0
aGUgZ2l2ZW4gdmVjdG9yIGNvb3JkaW5hdGVzIGFyZSBjbG9zZSB0byB0aGUgY3VycmVudCBvbmVz
IGJ5IGEgZGlzdGFuY2Ugb2YgZXBzaWxvbi4KKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlw
ZS5lcXVhbHNXaXRoRXBzaWxvbiA9IGZ1bmN0aW9uIChvdGhlclZlY3RvciwgZXBzaWxvbikgewor
ICAgICAgICBpZiAoZXBzaWxvbiA9PT0gdm9pZCAwKSB7IGVwc2lsb24gPSBfbWF0aF9jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRXBzaWxvbiJdOyB9CisgICAgICAgIHJl
dHVybiBvdGhlclZlY3RvciAmJiBfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siU2NhbGFyIl0uV2l0aGluRXBzaWxvbih0aGlzLngsIG90aGVyVmVjdG9yLngsIGVwc2ls
b24pICYmIF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIi
XS5XaXRoaW5FcHNpbG9uKHRoaXMueSwgb3RoZXJWZWN0b3IueSwgZXBzaWxvbik7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIGEgbmV3IFZlY3RvcjIgZnJvbSBjdXJyZW50IFZlY3RvcjIg
Zmxvb3JlZCB2YWx1ZXMKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IyCisgICAgICovCisg
ICAgVmVjdG9yMi5wcm90b3R5cGUuZmxvb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biBuZXcgVmVjdG9yMihNYXRoLmZsb29yKHRoaXMueCksIE1hdGguZmxvb3IodGhpcy55KSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbmV3IFZlY3RvcjIgZnJvbSBjdXJyZW50IFZl
Y3RvcjIgZmxvb3JlZCB2YWx1ZXMKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IyCisgICAg
ICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUuZnJhY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiBuZXcgVmVjdG9yMih0aGlzLnggLSBNYXRoLmZsb29yKHRoaXMueCksIHRoaXMueSAt
IE1hdGguZmxvb3IodGhpcy55KSk7CisgICAgfTsKKyAgICAvLyBQcm9wZXJ0aWVzCisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyB0
aGUgdmVjdG9yIGxlbmd0aCAoZmxvYXQpCisgICAgICovCisgICAgVmVjdG9yMi5wcm90b3R5cGUu
bGVuZ3RoID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAq
IHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRz
IHRoZSB2ZWN0b3Igc3F1YXJlZCBsZW5ndGgKKyAgICAgKiBAcmV0dXJucyB0aGUgdmVjdG9yIHNx
dWFyZWQgbGVuZ3RoIChmbG9hdCkKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlwZS5sZW5n
dGhTcXVhcmVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gKHRoaXMueCAqIHRoaXMu
eCArIHRoaXMueSAqIHRoaXMueSk7CisgICAgfTsKKyAgICAvLyBNZXRob2RzCisgICAgLyoqCisg
ICAgICogTm9ybWFsaXplIHRoZSB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1
cGRhdGVkIFZlY3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlwZS5ub3JtYWxpemUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aCgpOworICAgICAg
ICBpZiAobGVuID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgbnVtID0gMS4wIC8gbGVuOworICAgICAgICB0aGlzLnggKj0gbnVtOworICAg
ICAgICB0aGlzLnkgKj0gbnVtOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEdldHMgYSBuZXcgVmVjdG9yMiBjb3BpZWQgZnJvbSB0aGUgVmVjdG9yMgorICAg
ICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3IyLnByb3RvdHlw
ZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHRoaXMu
eCwgdGhpcy55KTsKKyAgICB9OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAgICAgKiBHZXRz
IGEgbmV3IFZlY3RvcjIoMCwgMCkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IyCisgICAg
ICovCisgICAgVmVjdG9yMi5aZXJvID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3
IFZlY3RvcjIoMCwgMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbmV3IFZlY3Rv
cjIoMSwgMSkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IyCisgICAgICovCisgICAgVmVj
dG9yMi5PbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMigxLCAx
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBuZXcgVmVjdG9yMiBzZXQgZnJvbSB0
aGUgZ2l2ZW4gaW5kZXggZWxlbWVudCBvZiB0aGUgZ2l2ZW4gYXJyYXkKKyAgICAgKiBAcGFyYW0g
YXJyYXkgZGVmaW5lcyB0aGUgZGF0YSBzb3VyY2UKKyAgICAgKiBAcGFyYW0gb2Zmc2V0IGRlZmlu
ZXMgdGhlIG9mZnNldCBpbiB0aGUgZGF0YSBzb3VyY2UKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBW
ZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5Gcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXks
IG9mZnNldCkgeworICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsgb2Zmc2V0ID0gMDsg
fQorICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoYXJyYXlbb2Zmc2V0XSwgYXJyYXlbb2Zmc2V0
ICsgMV0pOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyAicmVzdWx0IiBmcm9tIHRoZSBn
aXZlbiBpbmRleCBlbGVtZW50IG9mIHRoZSBnaXZlbiBhcnJheQorICAgICAqIEBwYXJhbSBhcnJh
eSBkZWZpbmVzIHRoZSBkYXRhIHNvdXJjZQorICAgICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0
aGUgb2Zmc2V0IGluIHRoZSBkYXRhIHNvdXJjZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5l
cyB0aGUgdGFyZ2V0IHZlY3RvcgorICAgICAqLworICAgIFZlY3RvcjIuRnJvbUFycmF5VG9SZWYg
PSBmdW5jdGlvbiAoYXJyYXksIG9mZnNldCwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0g
YXJyYXlbb2Zmc2V0XTsKKyAgICAgICAgcmVzdWx0LnkgPSBhcnJheVtvZmZzZXQgKyAxXTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBuZXcgVmVjdG9yMiBsb2NhdGVkIGZvciAiYW1v
dW50IiAoZmxvYXQpIG9uIHRoZSBDYXRtdWxsUm9tIHNwbGluZSBkZWZpbmVkIGJ5IHRoZSBnaXZl
biBmb3VyIFZlY3RvcjIKKyAgICAgKiBAcGFyYW0gdmFsdWUxIGRlZmluZXMgMXN0IHBvaW50IG9m
IGNvbnRyb2wKKyAgICAgKiBAcGFyYW0gdmFsdWUyIGRlZmluZXMgMm5kIHBvaW50IG9mIGNvbnRy
b2wKKyAgICAgKiBAcGFyYW0gdmFsdWUzIGRlZmluZXMgM3JkIHBvaW50IG9mIGNvbnRyb2wKKyAg
ICAgKiBAcGFyYW0gdmFsdWU0IGRlZmluZXMgNHRoIHBvaW50IG9mIGNvbnRyb2wKKyAgICAgKiBA
cGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGludGVycG9sYXRpb24gZmFjdG9yCisgICAgICogQHJl
dHVybnMgYSBuZXcgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIuQ2F0bXVsbFJvbSA9IGZ1
bmN0aW9uICh2YWx1ZTEsIHZhbHVlMiwgdmFsdWUzLCB2YWx1ZTQsIGFtb3VudCkgeworICAgICAg
ICB2YXIgc3F1YXJlZCA9IGFtb3VudCAqIGFtb3VudDsKKyAgICAgICAgdmFyIGN1YmVkID0gYW1v
dW50ICogc3F1YXJlZDsKKyAgICAgICAgdmFyIHggPSAwLjUgKiAoKCgoMi4wICogdmFsdWUyLngp
ICsgKCgtdmFsdWUxLnggKyB2YWx1ZTMueCkgKiBhbW91bnQpKSArCisgICAgICAgICAgICAoKCgo
KDIuMCAqIHZhbHVlMS54KSAtICg1LjAgKiB2YWx1ZTIueCkpICsgKDQuMCAqIHZhbHVlMy54KSkg
LSB2YWx1ZTQueCkgKiBzcXVhcmVkKSkgKworICAgICAgICAgICAgKCgoKC12YWx1ZTEueCArICgz
LjAgKiB2YWx1ZTIueCkpIC0gKDMuMCAqIHZhbHVlMy54KSkgKyB2YWx1ZTQueCkgKiBjdWJlZCkp
OworICAgICAgICB2YXIgeSA9IDAuNSAqICgoKCgyLjAgKiB2YWx1ZTIueSkgKyAoKC12YWx1ZTEu
eSArIHZhbHVlMy55KSAqIGFtb3VudCkpICsKKyAgICAgICAgICAgICgoKCgoMi4wICogdmFsdWUx
LnkpIC0gKDUuMCAqIHZhbHVlMi55KSkgKyAoNC4wICogdmFsdWUzLnkpKSAtIHZhbHVlNC55KSAq
IHNxdWFyZWQpKSArCisgICAgICAgICAgICAoKCgoLXZhbHVlMS55ICsgKDMuMCAqIHZhbHVlMi55
KSkgLSAoMy4wICogdmFsdWUzLnkpKSArIHZhbHVlNC55KSAqIGN1YmVkKSk7CisgICAgICAgIHJl
dHVybiBuZXcgVmVjdG9yMih4LCB5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBuZXcgVmVjdG9yMiBzZXQgd2l0aCBzYW1lIHRoZSBjb29yZGluYXRlcyB0aGFuICJ2YWx1ZSIg
b25lcyBpZiB0aGUgdmVjdG9yICJ2YWx1ZSIgaXMgaW4gdGhlIHNxdWFyZSBkZWZpbmVkIGJ5ICJt
aW4iIGFuZCAibWF4Ii4KKyAgICAgKiBJZiBhIGNvb3JkaW5hdGUgb2YgInZhbHVlIiBpcyBsb3dl
ciB0aGFuICJtaW4iIGNvb3JkaW5hdGVzLCB0aGUgcmV0dXJuZWQgVmVjdG9yMiBpcyBnaXZlbiB0
aGlzICJtaW4iIGNvb3JkaW5hdGUuCisgICAgICogSWYgYSBjb29yZGluYXRlIG9mICJ2YWx1ZSIg
aXMgZ3JlYXRlciB0aGFuICJtYXgiIGNvb3JkaW5hdGVzLCB0aGUgcmV0dXJuZWQgVmVjdG9yMiBp
cyBnaXZlbiB0aGlzICJtYXgiIGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5l
cyB0aGUgdmFsdWUgdG8gY2xhbXAKKyAgICAgKiBAcGFyYW0gbWluIGRlZmluZXMgdGhlIGxvd2Vy
IGxpbWl0CisgICAgICogQHBhcmFtIG1heCBkZWZpbmVzIHRoZSB1cHBlciBsaW1pdAorICAgICAq
IEByZXR1cm5zIGEgbmV3IFZlY3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3IyLkNsYW1wID0gZnVu
Y3Rpb24gKHZhbHVlLCBtaW4sIG1heCkgeworICAgICAgICB2YXIgeCA9IHZhbHVlLng7CisgICAg
ICAgIHggPSAoeCA+IG1heC54KSA/IG1heC54IDogeDsKKyAgICAgICAgeCA9ICh4IDwgbWluLngp
ID8gbWluLnggOiB4OworICAgICAgICB2YXIgeSA9IHZhbHVlLnk7CisgICAgICAgIHkgPSAoeSA+
IG1heC55KSA/IG1heC55IDogeTsKKyAgICAgICAgeSA9ICh5IDwgbWluLnkpID8gbWluLnkgOiB5
OworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoeCwgeSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjIgbG9jYXRlZCBmb3IgImFtb3VudCIgKGZsb2F0KSBv
biB0aGUgSGVybWl0ZSBzcGxpbmUgZGVmaW5lZCBieSB0aGUgdmVjdG9ycyAidmFsdWUxIiwgInZh
bHVlMyIsICJ0YW5nZW50MSIsICJ0YW5nZW50MiIKKyAgICAgKiBAcGFyYW0gdmFsdWUxIGRlZmlu
ZXMgdGhlIDFzdCBjb250cm9sIHBvaW50CisgICAgICogQHBhcmFtIHRhbmdlbnQxIGRlZmluZXMg
dGhlIG91dGdvaW5nIHRhbmdlbnQKKyAgICAgKiBAcGFyYW0gdmFsdWUyIGRlZmluZXMgdGhlIDJu
ZCBjb250cm9sIHBvaW50CisgICAgICogQHBhcmFtIHRhbmdlbnQyIGRlZmluZXMgdGhlIGluY29t
aW5nIHRhbmdlbnQKKyAgICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGludGVycG9sYXRp
b24gZmFjdG9yCisgICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMgorICAgICAqLworICAgIFZl
Y3RvcjIuSGVybWl0ZSA9IGZ1bmN0aW9uICh2YWx1ZTEsIHRhbmdlbnQxLCB2YWx1ZTIsIHRhbmdl
bnQyLCBhbW91bnQpIHsKKyAgICAgICAgdmFyIHNxdWFyZWQgPSBhbW91bnQgKiBhbW91bnQ7Cisg
ICAgICAgIHZhciBjdWJlZCA9IGFtb3VudCAqIHNxdWFyZWQ7CisgICAgICAgIHZhciBwYXJ0MSA9
ICgoMi4wICogY3ViZWQpIC0gKDMuMCAqIHNxdWFyZWQpKSArIDEuMDsKKyAgICAgICAgdmFyIHBh
cnQyID0gKC0yLjAgKiBjdWJlZCkgKyAoMy4wICogc3F1YXJlZCk7CisgICAgICAgIHZhciBwYXJ0
MyA9IChjdWJlZCAtICgyLjAgKiBzcXVhcmVkKSkgKyBhbW91bnQ7CisgICAgICAgIHZhciBwYXJ0
NCA9IGN1YmVkIC0gc3F1YXJlZDsKKyAgICAgICAgdmFyIHggPSAoKCh2YWx1ZTEueCAqIHBhcnQx
KSArICh2YWx1ZTIueCAqIHBhcnQyKSkgKyAodGFuZ2VudDEueCAqIHBhcnQzKSkgKyAodGFuZ2Vu
dDIueCAqIHBhcnQ0KTsKKyAgICAgICAgdmFyIHkgPSAoKCh2YWx1ZTEueSAqIHBhcnQxKSArICh2
YWx1ZTIueSAqIHBhcnQyKSkgKyAodGFuZ2VudDEueSAqIHBhcnQzKSkgKyAodGFuZ2VudDIueSAq
IHBhcnQ0KTsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHgsIHkpOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IyIGxvY2F0ZWQgZm9yICJhbW91bnQiIChm
bG9hdCkgb24gdGhlIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIHZlY3RvciAic3Rh
cnQiIGFkbiB0aGUgdmVjdG9yICJlbmQiLgorICAgICAqIEBwYXJhbSBzdGFydCBkZWZpbmVzIHRo
ZSBzdGFydCB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gZW5kIGRlZmluZXMgdGhlIGVuZCB2ZWN0b3IK
KyAgICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGludGVycG9sYXRpb24gZmFjdG9yCisg
ICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIuTGVycCA9
IGZ1bmN0aW9uIChzdGFydCwgZW5kLCBhbW91bnQpIHsKKyAgICAgICAgdmFyIHggPSBzdGFydC54
ICsgKChlbmQueCAtIHN0YXJ0LngpICogYW1vdW50KTsKKyAgICAgICAgdmFyIHkgPSBzdGFydC55
ICsgKChlbmQueSAtIHN0YXJ0LnkpICogYW1vdW50KTsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0
b3IyKHgsIHkpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZG90IHByb2R1Y3Qg
b2YgdGhlIHZlY3RvciAibGVmdCIgYW5kIHRoZSB2ZWN0b3IgInJpZ2h0IgorICAgICAqIEBwYXJh
bSBsZWZ0IGRlZmluZXMgZmlyc3QgdmVjdG9yCisgICAgICogQHBhcmFtIHJpZ2h0IGRlZmluZXMg
c2Vjb25kIHZlY3RvcgorICAgICAqIEByZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCAoZmxvYXQpCisg
ICAgICovCisgICAgVmVjdG9yMi5Eb3QgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsKKyAgICAg
ICAgcmV0dXJuIGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55OworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IyIGVxdWFsIHRvIHRoZSBub3JtYWxp
emVkIGdpdmVuIHZlY3RvcgorICAgICAqIEBwYXJhbSB2ZWN0b3IgZGVmaW5lcyB0aGUgdmVjdG9y
IHRvIG5vcm1hbGl6ZQorICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjIKKyAgICAgKi8KKyAg
ICBWZWN0b3IyLk5vcm1hbGl6ZSA9IGZ1bmN0aW9uICh2ZWN0b3IpIHsKKyAgICAgICAgdmFyIG5l
d1ZlY3RvciA9IHZlY3Rvci5jbG9uZSgpOworICAgICAgICBuZXdWZWN0b3Iubm9ybWFsaXplKCk7
CisgICAgICAgIHJldHVybiBuZXdWZWN0b3I7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRz
IGEgbmV3IFZlY3RvcjIgc2V0IHdpdGggdGhlIG1pbmltYWwgY29vcmRpbmF0ZSB2YWx1ZXMgZnJv
bSB0aGUgImxlZnQiIGFuZCAicmlnaHQiIHZlY3RvcnMKKyAgICAgKiBAcGFyYW0gbGVmdCBkZWZp
bmVzIDFzdCB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gcmlnaHQgZGVmaW5lcyAybmQgdmVjdG9yCisg
ICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMgorICAgICAqLworICAgIFZlY3RvcjIuTWluaW1p
emUgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsKKyAgICAgICAgdmFyIHggPSAobGVmdC54IDwg
cmlnaHQueCkgPyBsZWZ0LnggOiByaWdodC54OworICAgICAgICB2YXIgeSA9IChsZWZ0LnkgPCBy
aWdodC55KSA/IGxlZnQueSA6IHJpZ2h0Lnk7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMih4
LCB5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBuZXcgVmVjdG8yIHNldCB3aXRo
IHRoZSBtYXhpbWFsIGNvb3JkaW5hdGUgdmFsdWVzIGZyb20gdGhlICJsZWZ0IiBhbmQgInJpZ2h0
IiB2ZWN0b3JzCisgICAgICogQHBhcmFtIGxlZnQgZGVmaW5lcyAxc3QgdmVjdG9yCisgICAgICog
QHBhcmFtIHJpZ2h0IGRlZmluZXMgMm5kIHZlY3RvcgorICAgICAqIEByZXR1cm5zIGEgbmV3IFZl
Y3RvcjIKKyAgICAgKi8KKyAgICBWZWN0b3IyLk1heGltaXplID0gZnVuY3Rpb24gKGxlZnQsIHJp
Z2h0KSB7CisgICAgICAgIHZhciB4ID0gKGxlZnQueCA+IHJpZ2h0LngpID8gbGVmdC54IDogcmln
aHQueDsKKyAgICAgICAgdmFyIHkgPSAobGVmdC55ID4gcmlnaHQueSkgPyBsZWZ0LnkgOiByaWdo
dC55OworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoeCwgeSk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBHZXRzIGEgbmV3IFZlY3RvcjIgc2V0IHdpdGggdGhlIHRyYW5zZm9ybWVkIGNvb3Jk
aW5hdGVzIG9mIHRoZSBnaXZlbiB2ZWN0b3IgYnkgdGhlIGdpdmVuIHRyYW5zZm9ybWF0aW9uIG1h
dHJpeAorICAgICAqIEBwYXJhbSB2ZWN0b3IgZGVmaW5lcyB0aGUgdmVjdG9yIHRvIHRyYW5zZm9y
bQorICAgICAqIEBwYXJhbSB0cmFuc2Zvcm1hdGlvbiBkZWZpbmVzIHRoZSBtYXRyaXggdG8gYXBw
bHkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IyCisgICAgICovCisgICAgVmVjdG9yMi5U
cmFuc2Zvcm0gPSBmdW5jdGlvbiAodmVjdG9yLCB0cmFuc2Zvcm1hdGlvbikgeworICAgICAgICB2
YXIgciA9IFZlY3RvcjIuWmVybygpOworICAgICAgICBWZWN0b3IyLlRyYW5zZm9ybVRvUmVmKHZl
Y3RvciwgdHJhbnNmb3JtYXRpb24sIHIpOworICAgICAgICByZXR1cm4gcjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFRyYW5zZm9ybXMgdGhlIGdpdmVuIHZlY3RvciBjb29yZGluYXRlcyBieSB0
aGUgZ2l2ZW4gdHJhbnNmb3JtYXRpb24gbWF0cml4IGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0
aGUgdmVjdG9yICJyZXN1bHQiIGNvb3JkaW5hdGVzCisgICAgICogQHBhcmFtIHZlY3RvciBkZWZp
bmVzIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtCisgICAgICogQHBhcmFtIHRyYW5zZm9ybWF0aW9u
IGRlZmluZXMgdGhlIG1hdHJpeCB0byBhcHBseQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5l
cyB0aGUgdGFyZ2V0IHZlY3RvcgorICAgICAqLworICAgIFZlY3RvcjIuVHJhbnNmb3JtVG9SZWYg
PSBmdW5jdGlvbiAodmVjdG9yLCB0cmFuc2Zvcm1hdGlvbiwgcmVzdWx0KSB7CisgICAgICAgIHZh
ciBtID0gdHJhbnNmb3JtYXRpb24ubTsKKyAgICAgICAgdmFyIHggPSAodmVjdG9yLnggKiBtWzBd
KSArICh2ZWN0b3IueSAqIG1bNF0pICsgbVsxMl07CisgICAgICAgIHZhciB5ID0gKHZlY3Rvci54
ICogbVsxXSkgKyAodmVjdG9yLnkgKiBtWzVdKSArIG1bMTNdOworICAgICAgICByZXN1bHQueCA9
IHg7CisgICAgICAgIHJlc3VsdC55ID0geTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERldGVy
bWluZXMgaWYgYSBnaXZlbiB2ZWN0b3IgaXMgaW5jbHVkZWQgaW4gYSB0cmlhbmdsZQorICAgICAq
IEBwYXJhbSBwIGRlZmluZXMgdGhlIHZlY3RvciB0byB0ZXN0CisgICAgICogQHBhcmFtIHAwIGRl
ZmluZXMgMXN0IHRyaWFuZ2xlIHBvaW50CisgICAgICogQHBhcmFtIHAxIGRlZmluZXMgMm5kIHRy
aWFuZ2xlIHBvaW50CisgICAgICogQHBhcmFtIHAyIGRlZmluZXMgM3JkIHRyaWFuZ2xlIHBvaW50
CisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgcG9pbnQgInAiIGlzIGluIHRoZSB0cmlhbmds
ZSBkZWZpbmVkIGJ5IHRoZSB2ZXJ0b3JzICJwMCIsICJwMSIsICJwMiIKKyAgICAgKi8KKyAgICBW
ZWN0b3IyLlBvaW50SW5UcmlhbmdsZSA9IGZ1bmN0aW9uIChwLCBwMCwgcDEsIHAyKSB7CisgICAg
ICAgIHZhciBhID0gMSAvIDIgKiAoLXAxLnkgKiBwMi54ICsgcDAueSAqICgtcDEueCArIHAyLngp
ICsgcDAueCAqIChwMS55IC0gcDIueSkgKyBwMS54ICogcDIueSk7CisgICAgICAgIHZhciBzaWdu
ID0gYSA8IDAgPyAtMSA6IDE7CisgICAgICAgIHZhciBzID0gKHAwLnkgKiBwMi54IC0gcDAueCAq
IHAyLnkgKyAocDIueSAtIHAwLnkpICogcC54ICsgKHAwLnggLSBwMi54KSAqIHAueSkgKiBzaWdu
OworICAgICAgICB2YXIgdCA9IChwMC54ICogcDEueSAtIHAwLnkgKiBwMS54ICsgKHAwLnkgLSBw
MS55KSAqIHAueCArIChwMS54IC0gcDAueCkgKiBwLnkpICogc2lnbjsKKyAgICAgICAgcmV0dXJu
IHMgPiAwICYmIHQgPiAwICYmIChzICsgdCkgPCAyICogYSAqIHNpZ247CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB2ZWN0b3JzICJ2YWx1ZTEi
IGFuZCAidmFsdWUyIgorICAgICAqIEBwYXJhbSB2YWx1ZTEgZGVmaW5lcyBmaXJzdCB2ZWN0b3IK
KyAgICAgKiBAcGFyYW0gdmFsdWUyIGRlZmluZXMgc2Vjb25kIHZlY3RvcgorICAgICAqIEByZXR1
cm5zIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHZlY3RvcnMKKyAgICAgKi8KKyAgICBWZWN0b3IyLkRp
c3RhbmNlID0gZnVuY3Rpb24gKHZhbHVlMSwgdmFsdWUyKSB7CisgICAgICAgIHJldHVybiBNYXRo
LnNxcnQoVmVjdG9yMi5EaXN0YW5jZVNxdWFyZWQodmFsdWUxLCB2YWx1ZTIpKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiB0aGUg
dmVjdG9ycyAidmFsdWUxIiBhbmQgInZhbHVlMiIKKyAgICAgKiBAcGFyYW0gdmFsdWUxIGRlZmlu
ZXMgZmlyc3QgdmVjdG9yCisgICAgICogQHBhcmFtIHZhbHVlMiBkZWZpbmVzIHNlY29uZCB2ZWN0
b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgc3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIHZlY3RvcnMK
KyAgICAgKi8KKyAgICBWZWN0b3IyLkRpc3RhbmNlU3F1YXJlZCA9IGZ1bmN0aW9uICh2YWx1ZTEs
IHZhbHVlMikgeworICAgICAgICB2YXIgeCA9IHZhbHVlMS54IC0gdmFsdWUyLng7CisgICAgICAg
IHZhciB5ID0gdmFsdWUxLnkgLSB2YWx1ZTIueTsKKyAgICAgICAgcmV0dXJuICh4ICogeCkgKyAo
eSAqIHkpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIG5ldyBWZWN0b3IyIGxvY2F0
ZWQgYXQgdGhlIGNlbnRlciBvZiB0aGUgdmVjdG9ycyAidmFsdWUxIiBhbmQgInZhbHVlMiIKKyAg
ICAgKiBAcGFyYW0gdmFsdWUxIGRlZmluZXMgZmlyc3QgdmVjdG9yCisgICAgICogQHBhcmFtIHZh
bHVlMiBkZWZpbmVzIHNlY29uZCB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3Iy
CisgICAgICovCisgICAgVmVjdG9yMi5DZW50ZXIgPSBmdW5jdGlvbiAodmFsdWUxLCB2YWx1ZTIp
IHsKKyAgICAgICAgdmFyIGNlbnRlciA9IHZhbHVlMS5hZGQodmFsdWUyKTsKKyAgICAgICAgY2Vu
dGVyLnNjYWxlSW5QbGFjZSgwLjUpOworICAgICAgICByZXR1cm4gY2VudGVyOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgc2hvcnRlc3QgZGlzdGFuY2UgKGZsb2F0KSBiZXR3ZWVu
IHRoZSBwb2ludCAicCIgYW5kIHRoZSBzZWdtZW50IGRlZmluZWQgYnkgdGhlIHR3byBwb2ludHMg
InNlZ0EiIGFuZCAic2VnQiIuCisgICAgICogQHBhcmFtIHAgZGVmaW5lcyB0aGUgbWlkZGxlIHBv
aW50CisgICAgICogQHBhcmFtIHNlZ0EgZGVmaW5lcyBvbmUgcG9pbnQgb2YgdGhlIHNlZ21lbnQK
KyAgICAgKiBAcGFyYW0gc2VnQiBkZWZpbmVzIHRoZSBvdGhlciBwb2ludCBvZiB0aGUgc2VnbWVu
dAorICAgICAqIEByZXR1cm5zIHRoZSBzaG9ydGVzdCBkaXN0YW5jZQorICAgICAqLworICAgIFZl
Y3RvcjIuRGlzdGFuY2VPZlBvaW50RnJvbVNlZ21lbnQgPSBmdW5jdGlvbiAocCwgc2VnQSwgc2Vn
QikgeworICAgICAgICB2YXIgbDIgPSBWZWN0b3IyLkRpc3RhbmNlU3F1YXJlZChzZWdBLCBzZWdC
KTsKKyAgICAgICAgaWYgKGwyID09PSAwLjApIHsKKyAgICAgICAgICAgIHJldHVybiBWZWN0b3Iy
LkRpc3RhbmNlKHAsIHNlZ0EpOworICAgICAgICB9CisgICAgICAgIHZhciB2ID0gc2VnQi5zdWJ0
cmFjdChzZWdBKTsKKyAgICAgICAgdmFyIHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBWZWN0
b3IyLkRvdChwLnN1YnRyYWN0KHNlZ0EpLCB2KSAvIGwyKSk7CisgICAgICAgIHZhciBwcm9qID0g
c2VnQS5hZGQodi5tdWx0aXBseUJ5RmxvYXRzKHQsIHQpKTsKKyAgICAgICAgcmV0dXJuIFZlY3Rv
cjIuRGlzdGFuY2UocCwgcHJvaik7CisgICAgfTsKKyAgICByZXR1cm4gVmVjdG9yMjsKK30oKSk7
CisKKy8qKgorICogQ2xhc3NlZCB1c2VkIHRvIHN0b3JlICh4LHkseikgdmVjdG9yIHJlcHJlc2Vu
dGF0aW9uCisgKiBBIFZlY3RvcjMgaXMgdGhlIG1haW4gb2JqZWN0IHVzZWQgaW4gM0QgZ2VvbWV0
cnkKKyAqIEl0IGNhbiByZXByZXNlbnQgZXRpaGVyIHRoZSBjb29yZGluYXRlcyBvZiBhIHBvaW50
IHRoZSBzcGFjZSwgZWl0aGVyIGEgZGlyZWN0aW9uCisgKiBSZW1pbmRlcjoganMgdXNlcyBhIGxl
ZnQgaGFuZGVkIGZvcndhcmQgZmFjaW5nIHN5c3RlbQorICovCit2YXIgVmVjdG9yMyA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFZl
Y3RvcjMgb2JqZWN0IGZyb20gdGhlIGdpdmVuIHgsIHksIHogKGZsb2F0cykgY29vcmRpbmF0ZXMu
CisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgZmlyc3QgY29vcmRpbmF0ZXMgKG9uIFggYXhp
cykKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZXMgKG9uIFkg
YXhpcykKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB0aGlyZCBjb29yZGluYXRlcyAob24g
WiBheGlzKQorICAgICAqLworICAgIGZ1bmN0aW9uIFZlY3RvcjMoCisgICAgLyoqCisgICAgICog
RGVmaW5lcyB0aGUgZmlyc3QgY29vcmRpbmF0ZXMgKG9uIFggYXhpcykKKyAgICAgKi8KKyAgICB4
LCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZXMgKG9uIFkg
YXhpcykKKyAgICAgKi8KKyAgICB5LCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSB0aGly
ZCBjb29yZGluYXRlcyAob24gWiBheGlzKQorICAgICAqLworICAgIHopIHsKKyAgICAgICAgaWYg
KHggPT09IHZvaWQgMCkgeyB4ID0gMDsgfQorICAgICAgICBpZiAoeSA9PT0gdm9pZCAwKSB7IHkg
PSAwOyB9CisgICAgICAgIGlmICh6ID09PSB2b2lkIDApIHsgeiA9IDA7IH0KKyAgICAgICAgdGhp
cy54ID0geDsKKyAgICAgICAgdGhpcy55ID0geTsKKyAgICAgICAgdGhpcy56ID0gejsKKyAgICB9
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUg
VmVjdG9yMworICAgICAqIEByZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIFZlY3RvcjMgY29vcmRp
bmF0ZXMuCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiAie1g6ICIgKyB0aGlzLnggKyAiIFk6IiArIHRoaXMueSAr
ICIgWjoiICsgdGhpcy56ICsgIn0iOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
Y2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBzdHJpbmcgIlZlY3RvcjMiCisgICAgICov
CisgICAgVmVjdG9yMy5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIlZlY3RvcjMiOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0
aGUgVmVjdG9yMyBoYXNoIGNvZGUKKyAgICAgKiBAcmV0dXJucyBhIG51bWJlciB3aGljaCB0ZW5k
cyB0byBiZSB1bmlxdWUgYmV0d2VlbiBWZWN0b3IzIGluc3RhbmNlcworICAgICAqLworICAgIFZl
Y3RvcjMucHJvdG90eXBlLmdldEhhc2hDb2RlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIg
aGFzaCA9IHRoaXMueCB8IDA7CisgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAodGhpcy55
IHwgMCk7CisgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAodGhpcy56IHwgMCk7CisgICAg
ICAgIHJldHVybiBoYXNoOworICAgIH07CisgICAgLy8gT3BlcmF0b3JzCisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRocmVlIGVsZW1lbnRzIDogdGhlIGNvb3Jk
aW5hdGVzIG9mIHRoZSBWZWN0b3IzCisgICAgICogQHJldHVybnMgYSBuZXcgYXJyYXkgb2YgbnVt
YmVycworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLmFzQXJyYXkgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICAgICAgdGhpcy50b0FycmF5KHJlc3Vs
dCwgMCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQ
b3B1bGF0ZXMgdGhlIGdpdmVuIGFycmF5IG9yIEZsb2F0MzJBcnJheSBmcm9tIHRoZSBnaXZlbiBp
bmRleCB3aXRoIHRoZSBzdWNjZXNzaXZlIGNvb3JkaW5hdGVzIG9mIHRoZSBWZWN0b3IzCisgICAg
ICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIGRlc3RpbmF0aW9uIGFycmF5CisgICAgICogQHBh
cmFtIGluZGV4IGRlZmluZXMgdGhlIG9mZnNldCBpbiB0aGUgZGVzdGluYXRpb24gYXJyYXkKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5w
cm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIChhcnJheSwgaW5kZXgpIHsKKyAgICAgICAgaWYg
KGluZGV4ID09PSB2b2lkIDApIHsgaW5kZXggPSAwOyB9CisgICAgICAgIGFycmF5W2luZGV4XSA9
IHRoaXMueDsKKyAgICAgICAgYXJyYXlbaW5kZXggKyAxXSA9IHRoaXMueTsKKyAgICAgICAgYXJy
YXlbaW5kZXggKyAyXSA9IHRoaXMuejsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDb252ZXJ0cyB0aGUgY3VycmVudCBWZWN0b3IzIGludG8gYSBxdWF0ZXJu
aW9uIChjb25zaWRlcmluZyB0aGF0IHRoZSBWZWN0b3IzIGNvbnRhaW5zIEV1bGVyIGFuZ2xlcyBy
ZXByZXNlbnRhdGlvbiBvZiBhIHJvdGF0aW9uKQorICAgICAqIEByZXR1cm5zIGEgbmV3IFF1YXRl
cm5pb24gb2JqZWN0LCBjb21wdXRlZCBmcm9tIHRoZSBWZWN0b3IzIGNvb3JkaW5hdGVzCisgICAg
ICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUudG9RdWF0ZXJuaW9uID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gUXVhdGVybmlvbi5Sb3RhdGlvbllhd1BpdGNoUm9sbCh0aGlzLnksIHRo
aXMueCwgdGhpcy56KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgdGhlIGdpdmVuIHZl
Y3RvciB0byB0aGUgY3VycmVudCBWZWN0b3IzCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIGRl
ZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBk
YXRlZCBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuYWRkSW5QbGFjZSA9
IGZ1bmN0aW9uIChvdGhlclZlY3RvcikgeworICAgICAgICByZXR1cm4gdGhpcy5hZGRJblBsYWNl
RnJvbUZsb2F0cyhvdGhlclZlY3Rvci54LCBvdGhlclZlY3Rvci55LCBvdGhlclZlY3Rvci56KTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIHRvIHRo
ZSBjdXJyZW50IFZlY3RvcjMKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB4IGNvb3JkaW5h
dGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5IGNvb3JkaW5h
dGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB6IGNvb3JkaW5h
dGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZl
Y3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLnByb3RvdHlwZS5hZGRJblBsYWNlRnJvbUZsb2F0
cyA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7CisgICAgICAgIHRoaXMueCArPSB4OworICAgICAgICB0
aGlzLnkgKz0geTsKKyAgICAgICAgdGhpcy56ICs9IHo7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIG5ldyBWZWN0b3IzLCByZXN1bHQgb2YgdGhl
IGFkZGl0aW9uIHRoZSBjdXJyZW50IFZlY3RvcjMgYW5kIHRoZSBnaXZlbiB2ZWN0b3IKKyAgICAg
KiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBA
cmV0dXJucyB0aGUgcmVzdWx0aW5nIFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLnByb3Rv
dHlwZS5hZGQgPSBmdW5jdGlvbiAob3RoZXJWZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBW
ZWN0b3IzKHRoaXMueCArIG90aGVyVmVjdG9yLngsIHRoaXMueSArIG90aGVyVmVjdG9yLnksIHRo
aXMueiArIG90aGVyVmVjdG9yLnopOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyB0aGUg
Y3VycmVudCBWZWN0b3IzIHRvIHRoZSBnaXZlbiBvbmUgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGlu
IHRoZSB2ZWN0b3IgInJlc3VsdCIKKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0
aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3Rv
cjMgb2JqZWN0IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y3VycmVudCBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuYWRkVG9SZWYg
PSBmdW5jdGlvbiAob3RoZXJWZWN0b3IsIHJlc3VsdCkgeworICAgICAgICByZXR1cm4gcmVzdWx0
LmNvcHlGcm9tRmxvYXRzKHRoaXMueCArIG90aGVyVmVjdG9yLngsIHRoaXMueSArIG90aGVyVmVj
dG9yLnksIHRoaXMueiArIG90aGVyVmVjdG9yLnopOworICAgIH07CisgICAgLyoqCisgICAgICog
U3VidHJhY3QgdGhlIGdpdmVuIHZlY3RvciBmcm9tIHRoZSBjdXJyZW50IFZlY3RvcjMKKyAgICAg
KiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBA
cmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3Iz
LnByb3RvdHlwZS5zdWJ0cmFjdEluUGxhY2UgPSBmdW5jdGlvbiAob3RoZXJWZWN0b3IpIHsKKyAg
ICAgICAgdGhpcy54IC09IG90aGVyVmVjdG9yLng7CisgICAgICAgIHRoaXMueSAtPSBvdGhlclZl
Y3Rvci55OworICAgICAgICB0aGlzLnogLT0gb3RoZXJWZWN0b3IuejsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMsIHJl
c3VsdCBvZiB0aGUgc3VidHJhY3Rpb24gb2YgdGhlIGdpdmVuIHZlY3RvciBmcm9tIHRoZSBjdXJy
ZW50IFZlY3RvcjMKKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUgc2Vjb25k
IG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIFZlY3RvcjMKKyAgICAgKi8K
KyAgICBWZWN0b3IzLnByb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIChvdGhlclZlY3Rvcikg
eworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54IC0gb3RoZXJWZWN0b3IueCwgdGhp
cy55IC0gb3RoZXJWZWN0b3IueSwgdGhpcy56IC0gb3RoZXJWZWN0b3Iueik7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTdWJ0cmFjdHMgdGhlIGdpdmVuIHZlY3RvciBmcm9tIHRoZSBjdXJyZW50
IFZlY3RvcjMgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSB2ZWN0b3IgInJlc3VsdCIuCisg
ICAgICogQHBhcmFtIG90aGVyVmVjdG9yIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAg
ICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSBWZWN0b3IzIG9iamVjdCB3aGVyZSB0byBzdG9y
ZSB0aGUgcmVzdWx0CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgVmVjdG9yMworICAgICAq
LworICAgIFZlY3RvcjMucHJvdG90eXBlLnN1YnRyYWN0VG9SZWYgPSBmdW5jdGlvbiAob3RoZXJW
ZWN0b3IsIHJlc3VsdCkgeworICAgICAgICByZXR1cm4gdGhpcy5zdWJ0cmFjdEZyb21GbG9hdHNU
b1JlZihvdGhlclZlY3Rvci54LCBvdGhlclZlY3Rvci55LCBvdGhlclZlY3Rvci56LCByZXN1bHQp
OworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRo
IHRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgZ2l2ZW4gZmxvYXRzIGZyb20gdGhlIGN1cnJlbnQgVmVj
dG9yMyBjb29yZGluYXRlcworICAgICAqIEBwYXJhbSB4IGRlZmluZXMgdGhlIHggY29vcmRpbmF0
ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgdGhlIHkgY29vcmRpbmF0
ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEBwYXJhbSB6IGRlZmluZXMgdGhlIHogY29vcmRpbmF0
ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgVmVjdG9yMwor
ICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLnN1YnRyYWN0RnJvbUZsb2F0cyA9IGZ1bmN0
aW9uICh4LCB5LCB6KSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyh0aGlzLnggLSB4LCB0
aGlzLnkgLSB5LCB0aGlzLnogLSB6KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFN1YnRyYWN0
cyB0aGUgZ2l2ZW4gZmxvYXRzIGZyb20gdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBh
bmQgc2V0IHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIgd2l0aCB0aGlzIHJlc3VsdAorICAgICAq
IEBwYXJhbSB4IGRlZmluZXMgdGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAq
IEBwYXJhbSB5IGRlZmluZXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAq
IEBwYXJhbSB6IGRlZmluZXMgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAq
IEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgVmVjdG9yMyBvYmplY3Qgd2hlcmUgdG8gc3RvcmUg
dGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IFZlY3RvcjMKKyAgICAgKi8K
KyAgICBWZWN0b3IzLnByb3RvdHlwZS5zdWJ0cmFjdEZyb21GbG9hdHNUb1JlZiA9IGZ1bmN0aW9u
ICh4LCB5LCB6LCByZXN1bHQpIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3B5RnJvbUZsb2F0
cyh0aGlzLnggLSB4LCB0aGlzLnkgLSB5LCB0aGlzLnogLSB6KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEdldHMgYSBuZXcgVmVjdG9yMyBzZXQgd2l0aCB0aGUgY3VycmVudCBWZWN0b3IzIG5l
Z2F0ZWQgY29vcmRpbmF0ZXMKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IzCisgICAgICov
CisgICAgVmVjdG9yMy5wcm90b3R5cGUubmVnYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gbmV3IFZlY3RvcjMoLXRoaXMueCwgLXRoaXMueSwgLXRoaXMueik7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBNdWx0aXBsaWVzIHRoZSBWZWN0b3IzIGNvb3JkaW5hdGVzIGJ5IHRoZSBm
bG9hdCAic2NhbGUiCisgICAgICogQHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIG11bHRpcGxpZXIg
ZmFjdG9yCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzCisgICAg
ICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuc2NhbGVJblBsYWNlID0gZnVuY3Rpb24gKHNjYWxl
KSB7CisgICAgICAgIHRoaXMueCAqPSBzY2FsZTsKKyAgICAgICAgdGhpcy55ICo9IHNjYWxlOwor
ICAgICAgICB0aGlzLnogKj0gc2NhbGU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRoIHRoZSBjdXJyZW50
IFZlY3RvcjMgY29vcmRpbmF0ZXMgbXVsdGlwbGllZCBieSB0aGUgZmxvYXQgInNjYWxlIgorICAg
ICAqIEBwYXJhbSBzY2FsZSBkZWZpbmVzIHRoZSBtdWx0aXBsaWVyIGZhY3RvcgorICAgICAqIEBy
ZXR1cm5zIGEgbmV3IFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLnByb3RvdHlwZS5zY2Fs
ZSA9IGZ1bmN0aW9uIChzY2FsZSkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54
ICogc2NhbGUsIHRoaXMueSAqIHNjYWxlLCB0aGlzLnogKiBzY2FsZSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBNdWx0aXBsaWVzIHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMgYnkg
dGhlIGZsb2F0ICJzY2FsZSIgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBnaXZlbiB2ZWN0
b3IgInJlc3VsdCIgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gc2NhbGUgZGVmaW5lcyB0aGUg
bXVsdGlwbGllciBmYWN0b3IKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3Rv
cjMgb2JqZWN0IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y3VycmVudCBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuc2NhbGVUb1Jl
ZiA9IGZ1bmN0aW9uIChzY2FsZSwgcmVzdWx0KSB7CisgICAgICAgIHJldHVybiByZXN1bHQuY29w
eUZyb21GbG9hdHModGhpcy54ICogc2NhbGUsIHRoaXMueSAqIHNjYWxlLCB0aGlzLnogKiBzY2Fs
ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0aGUgY3VycmVudCBWZWN0b3IzIHZh
bHVlcyBieSBhIGZhY3RvciBhbmQgYWRkIHRoZSByZXN1bHQgdG8gYSBnaXZlbiBWZWN0b3IzCisg
ICAgICogQHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxlIGZhY3RvcgorICAgICAqIEBwYXJh
bSByZXN1bHQgZGVmaW5lcyB0aGUgVmVjdG9yMyBvYmplY3Qgd2hlcmUgdG8gc3RvcmUgdGhlIHJl
c3VsdAorICAgICAqIEByZXR1cm5zIHRoZSB1bm1vZGlmaWVkIGN1cnJlbnQgVmVjdG9yMworICAg
ICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLnNjYWxlQW5kQWRkVG9SZWYgPSBmdW5jdGlvbiAo
c2NhbGUsIHJlc3VsdCkgeworICAgICAgICByZXR1cm4gcmVzdWx0LmFkZEluUGxhY2VGcm9tRmxv
YXRzKHRoaXMueCAqIHNjYWxlLCB0aGlzLnkgKiBzY2FsZSwgdGhpcy56ICogc2NhbGUpOworICAg
IH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IFZlY3RvcjMg
YW5kIHRoZSBnaXZlbiB2ZWN0b3IgY29vcmRpbmF0ZXMgYXJlIHN0cmljdGx5IGVxdWFsCisgICAg
ICogQHBhcmFtIG90aGVyVmVjdG9yIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICog
QHJldHVybnMgdHJ1ZSBpZiBib3RoIHZlY3RvcnMgYXJlIGVxdWFscworICAgICAqLworICAgIFZl
Y3RvcjMucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlclZlY3RvcikgeworICAgICAg
ICByZXR1cm4gb3RoZXJWZWN0b3IgJiYgdGhpcy54ID09PSBvdGhlclZlY3Rvci54ICYmIHRoaXMu
eSA9PT0gb3RoZXJWZWN0b3IueSAmJiB0aGlzLnogPT09IG90aGVyVmVjdG9yLno7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgVmVjdG9yMyBhbmQg
dGhlIGdpdmVuIHZlY3RvciBjb29yZGluYXRlcyBhcmUgZGlzdGFudCBsZXNzIHRoYW4gZXBzaWxv
bgorICAgICAqIEBwYXJhbSBvdGhlclZlY3RvciBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAor
ICAgICAqIEBwYXJhbSBlcHNpbG9uIGRlZmluZXMgdGhlIG1pbmltYWwgZGlzdGFuY2UgdG8gZGVm
aW5lIHZhbHVlcyBhcyBlcXVhbHMKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGJvdGggdmVjdG9y
cyBhcmUgZGlzdGFudCBsZXNzIHRoYW4gZXBzaWxvbgorICAgICAqLworICAgIFZlY3RvcjMucHJv
dG90eXBlLmVxdWFsc1dpdGhFcHNpbG9uID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yLCBlcHNpbG9u
KSB7CisgICAgICAgIGlmIChlcHNpbG9uID09PSB2b2lkIDApIHsgZXBzaWxvbiA9IF9tYXRoX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFcHNpbG9uIl07IH0KKyAgICAg
ICAgcmV0dXJuIG90aGVyVmVjdG9yICYmIF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRoaW5FcHNpbG9uKHRoaXMueCwgb3RoZXJWZWN0b3IueCwg
ZXBzaWxvbikgJiYgX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNj
YWxhciJdLldpdGhpbkVwc2lsb24odGhpcy55LCBvdGhlclZlY3Rvci55LCBlcHNpbG9uKSAmJiBf
bWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uV2l0aGlu
RXBzaWxvbih0aGlzLnosIG90aGVyVmVjdG9yLnosIGVwc2lsb24pOworICAgIH07CisgICAgLyoq
CisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMg
ZXF1YWxzIHRoZSBnaXZlbiBmbG9hdHMKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB4IGNv
b3JkaW5hdGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5IGNv
b3JkaW5hdGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB6IGNv
b3JkaW5hdGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGJvdGggdmVj
dG9ycyBhcmUgZXF1YWxzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuZXF1YWxzVG9G
bG9hdHMgPSBmdW5jdGlvbiAoeCwgeSwgeikgeworICAgICAgICByZXR1cm4gdGhpcy54ID09PSB4
ICYmIHRoaXMueSA9PT0geSAmJiB0aGlzLnogPT09IHo7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBNdWx0aXBsaWVzIHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMgYnkgdGhlIGdpdmVu
IG9uZXMKKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJh
bmQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjMKKyAgICAgKi8K
KyAgICBWZWN0b3IzLnByb3RvdHlwZS5tdWx0aXBseUluUGxhY2UgPSBmdW5jdGlvbiAob3RoZXJW
ZWN0b3IpIHsKKyAgICAgICAgdGhpcy54ICo9IG90aGVyVmVjdG9yLng7CisgICAgICAgIHRoaXMu
eSAqPSBvdGhlclZlY3Rvci55OworICAgICAgICB0aGlzLnogKj0gb3RoZXJWZWN0b3IuejsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3
IFZlY3RvcjMsIHJlc3VsdCBvZiB0aGUgbXVsdGlwbGljYXRpb24gb2YgdGhlIGN1cnJlbnQgVmVj
dG9yMyBieSB0aGUgZ2l2ZW4gdmVjdG9yCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIGRlZmlu
ZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHJldHVybnMgdGhlIG5ldyBWZWN0b3IzCisg
ICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUubXVsdGlwbHkgPSBmdW5jdGlvbiAob3RoZXJW
ZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlCeUZsb2F0cyhvdGhlclZlY3Rv
ci54LCBvdGhlclZlY3Rvci55LCBvdGhlclZlY3Rvci56KTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIE11bHRpcGxpZXMgdGhlIGN1cnJlbnQgVmVjdG9yMyBieSB0aGUgZ2l2ZW4gb25lIGFuZCBz
dG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gdmVjdG9yICJyZXN1bHQiCisgICAgICogQHBh
cmFtIG90aGVyVmVjdG9yIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHBhcmFt
IHJlc3VsdCBkZWZpbmVzIHRoZSBWZWN0b3IzIG9iamVjdCB3aGVyZSB0byBzdG9yZSB0aGUgcmVz
dWx0CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgVmVjdG9yMworICAgICAqLworICAgIFZl
Y3RvcjMucHJvdG90eXBlLm11bHRpcGx5VG9SZWYgPSBmdW5jdGlvbiAob3RoZXJWZWN0b3IsIHJl
c3VsdCkgeworICAgICAgICByZXR1cm4gcmVzdWx0LmNvcHlGcm9tRmxvYXRzKHRoaXMueCAqIG90
aGVyVmVjdG9yLngsIHRoaXMueSAqIG90aGVyVmVjdG9yLnksIHRoaXMueiAqIG90aGVyVmVjdG9y
LnopOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3
aXRoIHRoZSByZXN1bHQgb2YgdGhlIG11bGxpcGxpY2F0aW9uIG9mIHRoZSBjdXJyZW50IFZlY3Rv
cjMgY29vcmRpbmF0ZXMgYnkgdGhlIGdpdmVuIGZsb2F0cworICAgICAqIEBwYXJhbSB4IGRlZmlu
ZXMgdGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEBwYXJhbSB5IGRlZmlu
ZXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEBwYXJhbSB6IGRlZmlu
ZXMgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBu
ZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLm11bHRpcGx5QnlGbG9h
dHMgPSBmdW5jdGlvbiAoeCwgeSwgeikgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhp
cy54ICogeCwgdGhpcy55ICogeSwgdGhpcy56ICogeik7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZGl2aXNp
b24gb2YgdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBieSB0aGUgZ2l2ZW4gb25lcwor
ICAgICAqIEBwYXJhbSBvdGhlclZlY3RvciBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAg
ICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90
eXBlLmRpdmlkZSA9IGZ1bmN0aW9uIChvdGhlclZlY3RvcikgeworICAgICAgICByZXR1cm4gbmV3
IFZlY3RvcjModGhpcy54IC8gb3RoZXJWZWN0b3IueCwgdGhpcy55IC8gb3RoZXJWZWN0b3IueSwg
dGhpcy56IC8gb3RoZXJWZWN0b3Iueik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXZpZGVz
IHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMgYnkgdGhlIGdpdmVuIG9uZXMgYW5kIHN0
b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIKKyAgICAgKiBAcGFy
YW0gb3RoZXJWZWN0b3IgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0g
cmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjMgb2JqZWN0IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1
bHQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0b3IzCisgICAgICovCisgICAgVmVj
dG9yMy5wcm90b3R5cGUuZGl2aWRlVG9SZWYgPSBmdW5jdGlvbiAob3RoZXJWZWN0b3IsIHJlc3Vs
dCkgeworICAgICAgICByZXR1cm4gcmVzdWx0LmNvcHlGcm9tRmxvYXRzKHRoaXMueCAvIG90aGVy
VmVjdG9yLngsIHRoaXMueSAvIG90aGVyVmVjdG9yLnksIHRoaXMueiAvIG90aGVyVmVjdG9yLnop
OworICAgIH07CisgICAgLyoqCisgICAgICogRGl2aWRlcyB0aGUgY3VycmVudCBWZWN0b3IzIGNv
b3JkaW5hdGVzIGJ5IHRoZSBnaXZlbiBvbmVzLgorICAgICAqIEBwYXJhbSBvdGhlclZlY3RvciBk
ZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVw
ZGF0ZWQgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLmRpdmlkZUluUGxh
Y2UgPSBmdW5jdGlvbiAob3RoZXJWZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZGl2aWRl
VG9SZWYob3RoZXJWZWN0b3IsIHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRl
cyB0aGUgY3VycmVudCBWZWN0b3IzIHdpdGggdGhlIG1pbmltYWwgY29vcmRpbmF0ZSB2YWx1ZXMg
YmV0d2VlbiBpdHMgYW5kIHRoZSBnaXZlbiB2ZWN0b3Igb25lcworICAgICAqIEBwYXJhbSBvdGhl
ciBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50
IHVwZGF0ZWQgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLm1pbmltaXpl
SW5QbGFjZSA9IGZ1bmN0aW9uIChvdGhlcikgeworICAgICAgICByZXR1cm4gdGhpcy5taW5pbWl6
ZUluUGxhY2VGcm9tRmxvYXRzKG90aGVyLngsIG90aGVyLnksIG90aGVyLnopOworICAgIH07Cisg
ICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgY3VycmVudCBWZWN0b3IzIHdpdGggdGhlIG1heGlt
YWwgY29vcmRpbmF0ZSB2YWx1ZXMgYmV0d2VlbiBpdHMgYW5kIHRoZSBnaXZlbiB2ZWN0b3Igb25l
cy4KKyAgICAgKiBAcGFyYW0gb3RoZXIgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0
b3IzLnByb3RvdHlwZS5tYXhpbWl6ZUluUGxhY2UgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMubWF4aW1pemVJblBsYWNlRnJvbUZsb2F0cyhvdGhlci54LCBvdGhlci55
LCBvdGhlci56KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQg
VmVjdG9yMyB3aXRoIHRoZSBtaW5pbWFsIGNvb3JkaW5hdGUgdmFsdWVzIGJldHdlZW4gaXRzIGFu
ZCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB4IGNv
b3JkaW5hdGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5IGNv
b3JkaW5hdGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB6IGNv
b3JkaW5hdGUgb2YgdGhlIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRh
dGVkIFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLnByb3RvdHlwZS5taW5pbWl6ZUluUGxh
Y2VGcm9tRmxvYXRzID0gZnVuY3Rpb24gKHgsIHksIHopIHsKKyAgICAgICAgaWYgKHggPCB0aGlz
LngpIHsKKyAgICAgICAgICAgIHRoaXMueCA9IHg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkg
PCB0aGlzLnkpIHsKKyAgICAgICAgICAgIHRoaXMueSA9IHk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHogPCB0aGlzLnopIHsKKyAgICAgICAgICAgIHRoaXMueiA9IHo7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBj
dXJyZW50IFZlY3RvcjMgd2l0aCB0aGUgbWF4aW1hbCBjb29yZGluYXRlIHZhbHVlcyBiZXR3ZWVu
IGl0cyBhbmQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLgorICAgICAqIEBwYXJhbSB4IGRlZmluZXMg
dGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEBwYXJhbSB5IGRlZmluZXMg
dGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEBwYXJhbSB6IGRlZmluZXMg
dGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJy
ZW50IHVwZGF0ZWQgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLm1heGlt
aXplSW5QbGFjZUZyb21GbG9hdHMgPSBmdW5jdGlvbiAoeCwgeSwgeikgeworICAgICAgICBpZiAo
eCA+IHRoaXMueCkgeworICAgICAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoeSA+IHRoaXMueSkgeworICAgICAgICAgICAgdGhpcy55ID0geTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoeiA+IHRoaXMueikgeworICAgICAgICAgICAgdGhpcy56ID0gejsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIER1ZSB0
byBmbG9hdCBwcmVjaXNpb24sIHNjYWxlIG9mIGEgbWVzaCBjb3VsZCBiZSB1bmlmb3JtIGJ1dCBm
bG9hdCB2YWx1ZXMgYXJlIG9mZiBieSBhIHNtYWxsIGZyYWN0aW9uCisgICAgICogQ2hlY2sgaWYg
aXMgbm9uIHVuaWZvcm0gd2l0aGluIGEgY2VydGFpbiBhbW91bnQgb2YgZGVjaW1hbCBwbGFjZXMg
dG8gYWNjb3VudCBmb3IgdGhpcworICAgICAqIEBwYXJhbSBlcHNpbG9uIHRoZSBhbW91bnQgdGhl
IHZhbHVlcyBjYW4gZGlmZmVyCisgICAgICogQHJldHVybnMgaWYgdGhlIHRoZSB2ZWN0b3IgaXMg
bm9uIHVuaWZvcm0gdG8gYSBjZXJ0YWluIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcworICAgICAq
LworICAgIFZlY3RvcjMucHJvdG90eXBlLmlzTm9uVW5pZm9ybVdpdGhpbkVwc2lsb24gPSBmdW5j
dGlvbiAoZXBzaWxvbikgeworICAgICAgICB2YXIgYWJzWCA9IE1hdGguYWJzKHRoaXMueCk7Cisg
ICAgICAgIHZhciBhYnNZID0gTWF0aC5hYnModGhpcy55KTsKKyAgICAgICAgaWYgKCFfbWF0aF9z
Y2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uV2l0aGluRXBzaWxv
bihhYnNYLCBhYnNZLCBlcHNpbG9uKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGFic1ogPSBNYXRoLmFicyh0aGlzLnopOworICAgICAgICBpZiAo
IV9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRo
aW5FcHNpbG9uKGFic1gsIGFic1osIGVwc2lsb24pKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIV9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRoaW5FcHNpbG9uKGFic1ksIGFic1osIGVwc2lsb24p
KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVjdG9yMy5wcm90b3R5
cGUsICJpc05vblVuaWZvcm0iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGEgYm9v
bGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhlIHZlY3RvciBpcyBub24gdW5pZm9ybSBtZWFuaW5nIHgs
IHkgb3IgeiBhcmUgbm90IGFsbCB0aGUgc2FtZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgYWJzWCA9IE1hdGguYWJzKHRoaXMueCk7Cisg
ICAgICAgICAgICB2YXIgYWJzWSA9IE1hdGguYWJzKHRoaXMueSk7CisgICAgICAgICAgICBpZiAo
YWJzWCAhPT0gYWJzWSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIGFic1ogPSBNYXRoLmFicyh0aGlzLnopOworICAgICAgICAg
ICAgaWYgKGFic1ggIT09IGFic1opIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhYnNZICE9PSBhYnNaKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldHMgYSBuZXcgVmVjdG9y
MyBmcm9tIGN1cnJlbnQgVmVjdG9yMyBmbG9vcmVkIHZhbHVlcworICAgICAqIEByZXR1cm5zIGEg
bmV3IFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLnByb3RvdHlwZS5mbG9vciA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKE1hdGguZmxvb3IodGhpcy54KSwg
TWF0aC5mbG9vcih0aGlzLnkpLCBNYXRoLmZsb29yKHRoaXMueikpOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyBhIG5ldyBWZWN0b3IzIGZyb20gY3VycmVudCBWZWN0b3IzIGZsb29yZWQg
dmFsdWVzCisgICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3Rv
cjMucHJvdG90eXBlLmZyYWN0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZl
Y3RvcjModGhpcy54IC0gTWF0aC5mbG9vcih0aGlzLngpLCB0aGlzLnkgLSBNYXRoLmZsb29yKHRo
aXMueSksIHRoaXMueiAtIE1hdGguZmxvb3IodGhpcy56KSk7CisgICAgfTsKKyAgICAvLyBQcm9w
ZXJ0aWVzCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBWZWN0b3IzCisg
ICAgICogQHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgVmVjdG9yMworICAgICAqLworICAgIFZl
Y3RvcjMucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIE1h
dGguc3FydCh0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlz
LnopOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc3F1YXJlZCBsZW5ndGggb2Yg
dGhlIFZlY3RvcjMKKyAgICAgKiBAcmV0dXJucyBzcXVhcmVkIGxlbmd0aCBvZiB0aGUgVmVjdG9y
MworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLmxlbmd0aFNxdWFyZWQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiAodGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55
ICsgdGhpcy56ICogdGhpcy56KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE5vcm1hbGl6ZSB0
aGUgY3VycmVudCBWZWN0b3IzLgorICAgICAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBhbiBp
biBwbGFjZSBvcGVyYXRpb24uCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBW
ZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVGcm9tTGVuZ3RoKHRoaXMubGVu
Z3RoKCkpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVvcmRlcnMgdGhlIHggeSB6IHByb3Bl
cnRpZXMgb2YgdGhlIHZlY3RvciBpbiBwbGFjZQorICAgICAqIEBwYXJhbSBvcmRlciBuZXcgb3Jk
ZXJpbmcgb2YgdGhlIHByb3BlcnRpZXMgKGVnLiBmb3IgdmVjdG9yIDEsMiwzIHdpdGggIlpZWCIg
d2lsbCBwcm9kdWNlIDMsMiwxKQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQg
dmVjdG9yCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUucmVvcmRlckluUGxhY2UgPSBm
dW5jdGlvbiAob3JkZXIpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgb3Jk
ZXIgPSBvcmRlci50b0xvd2VyQ2FzZSgpOworICAgICAgICBpZiAob3JkZXIgPT09ICJ4eXoiKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBNYXRoVG1wLlZl
Y3RvcjNbMF0uY29weUZyb20odGhpcyk7CisgICAgICAgIFsieCIsICJ5IiwgInoiXS5mb3JFYWNo
KGZ1bmN0aW9uICh2YWwsIGkpIHsKKyAgICAgICAgICAgIF90aGlzW3ZhbF0gPSBNYXRoVG1wLlZl
Y3RvcjNbMF1bb3JkZXJbaV1dOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSb3RhdGVzIHRoZSB2ZWN0b3IgYXJvdW5kIDAsMCwwIGJ5
IGEgcXVhdGVybmlvbgorICAgICAqIEBwYXJhbSBxdWF0ZXJuaW9uIHRoZSByb3RhdGlvbiBxdWF0
ZXJuaW9uCisgICAgICogQHBhcmFtIHJlc3VsdCB2ZWN0b3IgdG8gc3RvcmUgdGhlIHJlc3VsdAor
ICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yCisgICAgICovCisgICAgVmVjdG9y
My5wcm90b3R5cGUucm90YXRlQnlRdWF0ZXJuaW9uVG9SZWYgPSBmdW5jdGlvbiAocXVhdGVybmlv
biwgcmVzdWx0KSB7CisgICAgICAgIHF1YXRlcm5pb24udG9Sb3RhdGlvbk1hdHJpeChNYXRoVG1w
Lk1hdHJpeFswXSk7CisgICAgICAgIFZlY3RvcjMuVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZih0
aGlzLCBNYXRoVG1wLk1hdHJpeFswXSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJvdGF0ZXMgYSB2ZWN0b3IgYXJvdW5kIGEgZ2l2ZW4g
cG9pbnQKKyAgICAgKiBAcGFyYW0gcXVhdGVybmlvbiB0aGUgcm90YXRpb24gcXVhdGVybmlvbgor
ICAgICAqIEBwYXJhbSBwb2ludCB0aGUgcG9pbnQgdG8gcm90YXRlIGFyb3VuZAorICAgICAqIEBw
YXJhbSByZXN1bHQgdmVjdG9yIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0
aGUgcmVzdWx0aW5nIHZlY3RvcgorICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLnJvdGF0
ZUJ5UXVhdGVybmlvbkFyb3VuZFBvaW50VG9SZWYgPSBmdW5jdGlvbiAocXVhdGVybmlvbiwgcG9p
bnQsIHJlc3VsdCkgeworICAgICAgICB0aGlzLnN1YnRyYWN0VG9SZWYocG9pbnQsIE1hdGhUbXAu
VmVjdG9yM1swXSk7CisgICAgICAgIE1hdGhUbXAuVmVjdG9yM1swXS5yb3RhdGVCeVF1YXRlcm5p
b25Ub1JlZihxdWF0ZXJuaW9uLCBNYXRoVG1wLlZlY3RvcjNbMF0pOworICAgICAgICBwb2ludC5h
ZGRUb1JlZihNYXRoVG1wLlZlY3RvcjNbMF0sIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9y
MyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBsZW5ndGguCisgICAgICogUGxlYXNlIG5vdGUgdGhhdCB0
aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi4KKyAgICAgKiBAcGFyYW0gbGVuIHRoZSBsZW5n
dGggb2YgdGhlIHZlY3RvcgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVj
dG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLm5vcm1hbGl6ZUZyb21MZW5ndGgg
PSBmdW5jdGlvbiAobGVuKSB7CisgICAgICAgIGlmIChsZW4gPT09IDAgfHwgbGVuID09PSAxLjAp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
aGlzLnNjYWxlSW5QbGFjZSgxLjAgLyBsZW4pOworICAgIH07CisgICAgLyoqCisgICAgICogTm9y
bWFsaXplIHRoZSBjdXJyZW50IFZlY3RvcjMgdG8gYSBuZXcgdmVjdG9yCisgICAgICogQHJldHVy
bnMgdGhlIG5ldyBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUubm9ybWFs
aXplVG9OZXcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBub3JtYWxpemVkID0gbmV3IFZl
Y3RvcjMoMCwgMCwgMCk7CisgICAgICAgIHRoaXMubm9ybWFsaXplVG9SZWYobm9ybWFsaXplZCk7
CisgICAgICAgIHJldHVybiBub3JtYWxpemVkOworICAgIH07CisgICAgLyoqCisgICAgICogTm9y
bWFsaXplIHRoZSBjdXJyZW50IFZlY3RvcjMgdG8gdGhlIHJlZmVyZW5jZQorICAgICAqIEBwYXJh
bSByZWZlcmVuY2UgZGVmaW5lIHRoZSBWZWN0b3IzIHRvIHVwZGF0ZQorICAgICAqIEByZXR1cm5z
IHRoZSB1cGRhdGVkIFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLnByb3RvdHlwZS5ub3Jt
YWxpemVUb1JlZiA9IGZ1bmN0aW9uIChyZWZlcmVuY2UpIHsKKyAgICAgICAgdmFyIGxlbiA9IHRo
aXMubGVuZ3RoKCk7CisgICAgICAgIGlmIChsZW4gPT09IDAgfHwgbGVuID09PSAxLjApIHsKKyAg
ICAgICAgICAgIHJldHVybiByZWZlcmVuY2UuY29weUZyb21GbG9hdHModGhpcy54LCB0aGlzLnks
IHRoaXMueik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGVUb1JlZigxLjAg
LyBsZW4sIHJlZmVyZW5jZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3
IFZlY3RvcjMgY29waWVkIGZyb20gdGhlIGN1cnJlbnQgVmVjdG9yMworICAgICAqIEByZXR1cm5z
IHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLmNsb25lID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54LCB0aGlzLnks
IHRoaXMueik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb3BpZXMgdGhlIGdpdmVuIHZlY3Rv
ciBjb29yZGluYXRlcyB0byB0aGUgY3VycmVudCBWZWN0b3IzIG9uZXMKKyAgICAgKiBAcGFyYW0g
c291cmNlIGRlZmluZXMgdGhlIHNvdXJjZSBWZWN0b3IzCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgdXBkYXRlZCBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuY29w
eUZyb20gPSBmdW5jdGlvbiAoc291cmNlKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvcHlGcm9t
RmxvYXRzKHNvdXJjZS54LCBzb3VyY2UueSwgc291cmNlLnopOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ29waWVzIHRoZSBnaXZlbiBmbG9hdHMgdG8gdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29y
ZGluYXRlcworICAgICAqIEBwYXJhbSB4IGRlZmluZXMgdGhlIHggY29vcmRpbmF0ZSBvZiB0aGUg
b3BlcmFuZAorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUg
b3BlcmFuZAorICAgICAqIEBwYXJhbSB6IGRlZmluZXMgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGUg
b3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yMworICAg
ICAqLworICAgIFZlY3RvcjMucHJvdG90eXBlLmNvcHlGcm9tRmxvYXRzID0gZnVuY3Rpb24gKHgs
IHksIHopIHsKKyAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgdGhpcy55ID0geTsKKyAgICAg
ICAgdGhpcy56ID0gejsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDb3BpZXMgdGhlIGdpdmVuIGZsb2F0cyB0byB0aGUgY3VycmVudCBWZWN0b3IzIGNvb3Jk
aW5hdGVzCisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgeCBjb29yZGluYXRlIG9mIHRoZSBv
cGVyYW5kCisgICAgICogQHBhcmFtIHkgZGVmaW5lcyB0aGUgeSBjb29yZGluYXRlIG9mIHRoZSBv
cGVyYW5kCisgICAgICogQHBhcmFtIHogZGVmaW5lcyB0aGUgeiBjb29yZGluYXRlIG9mIHRoZSBv
cGVyYW5kCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzCisgICAg
ICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHksIHopIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuY29weUZyb21GbG9hdHMoeCwgeSwgeik7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDb3BpZXMgdGhlIGdpdmVuIGZsb2F0IHRvIHRoZSBjdXJyZW50IFZlY3RvcjMg
Y29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gdiBkZWZpbmVzIHRoZSB4LCB5IGFuZCB6IGNvb3Jk
aW5hdGVzIG9mIHRoZSBvcGVyYW5kCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRl
ZCBWZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yMy5wcm90b3R5cGUuc2V0QWxsID0gZnVuY3Rp
b24gKHYpIHsKKyAgICAgICAgdGhpcy54ID0gdGhpcy55ID0gdGhpcy56ID0gdjsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvLyBTdGF0aWNzCisgICAgLyoqCisgICAgICogR2V0
IHRoZSBjbGlwIGZhY3RvciBiZXR3ZWVuIHR3byB2ZWN0b3JzCisgICAgICogQHBhcmFtIHZlY3Rv
cjAgZGVmaW5lcyB0aGUgZmlyc3Qgb3BlcmFuZAorICAgICAqIEBwYXJhbSB2ZWN0b3IxIGRlZmlu
ZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHBhcmFtIGF4aXMgZGVmaW5lcyB0aGUgYXhp
cyB0byB1c2UKKyAgICAgKiBAcGFyYW0gc2l6ZSBkZWZpbmVzIHRoZSBzaXplIGFsb25nIHRoZSBh
eGlzCisgICAgICogQHJldHVybnMgdGhlIGNsaXAgZmFjdG9yCisgICAgICovCisgICAgVmVjdG9y
My5HZXRDbGlwRmFjdG9yID0gZnVuY3Rpb24gKHZlY3RvcjAsIHZlY3RvcjEsIGF4aXMsIHNpemUp
IHsKKyAgICAgICAgdmFyIGQwID0gVmVjdG9yMy5Eb3QodmVjdG9yMCwgYXhpcykgLSBzaXplOwor
ICAgICAgICB2YXIgZDEgPSBWZWN0b3IzLkRvdCh2ZWN0b3IxLCBheGlzKSAtIHNpemU7CisgICAg
ICAgIHZhciBzID0gZDAgLyAoZDAgLSBkMSk7CisgICAgICAgIHJldHVybiBzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0IGFuZ2xlIGJldHdlZW4gdHdvIHZlY3RvcnMKKyAgICAgKiBAcGFy
YW0gdmVjdG9yMCBhbmdsZSBiZXR3ZWVuIHZlY3RvcjAgYW5kIHZlY3RvcjEKKyAgICAgKiBAcGFy
YW0gdmVjdG9yMSBhbmdsZSBiZXR3ZWVuIHZlY3RvcjAgYW5kIHZlY3RvcjEKKyAgICAgKiBAcGFy
YW0gbm9ybWFsIGRpcmVjdGlvbiBvZiB0aGUgbm9ybWFsCisgICAgICogQHJldHVybiB0aGUgYW5n
bGUgYmV0d2VlbiB2ZWN0b3IwIGFuZCB2ZWN0b3IxCisgICAgICovCisgICAgVmVjdG9yMy5HZXRB
bmdsZUJldHdlZW5WZWN0b3JzID0gZnVuY3Rpb24gKHZlY3RvcjAsIHZlY3RvcjEsIG5vcm1hbCkg
eworICAgICAgICB2YXIgdjAgPSB2ZWN0b3IwLm5vcm1hbGl6ZVRvUmVmKE1hdGhUbXAuVmVjdG9y
M1sxXSk7CisgICAgICAgIHZhciB2MSA9IHZlY3RvcjEubm9ybWFsaXplVG9SZWYoTWF0aFRtcC5W
ZWN0b3IzWzJdKTsKKyAgICAgICAgdmFyIGRvdCA9IFZlY3RvcjMuRG90KHYwLCB2MSk7CisgICAg
ICAgIHZhciBuID0gTWF0aFRtcC5WZWN0b3IzWzNdOworICAgICAgICBWZWN0b3IzLkNyb3NzVG9S
ZWYodjAsIHYxLCBuKTsKKyAgICAgICAgaWYgKFZlY3RvcjMuRG90KG4sIG5vcm1hbCkgPiAwKSB7
CisgICAgICAgICAgICByZXR1cm4gTWF0aC5hY29zKGRvdCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIC1NYXRoLmFjb3MoZG90KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBuZXcgVmVjdG9yMyBzZXQgZnJvbSB0aGUgaW5kZXggIm9mZnNldCIgb2YgdGhlIGdpdmVuIGFy
cmF5CisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIHNvdXJjZSBhcnJheQorICAgICAq
IEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGluIHRoZSBzb3VyY2UgYXJyYXkKKyAg
ICAgKiBAcmV0dXJucyB0aGUgbmV3IFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLkZyb21B
cnJheSA9IGZ1bmN0aW9uIChhcnJheSwgb2Zmc2V0KSB7CisgICAgICAgIGlmIChvZmZzZXQgPT09
IHZvaWQgMCkgeyBvZmZzZXQgPSAwOyB9CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyhhcnJh
eVtvZmZzZXRdLCBhcnJheVtvZmZzZXQgKyAxXSwgYXJyYXlbb2Zmc2V0ICsgMl0pOworICAgIH07
CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCBmcm9tIHRoZSBpbmRl
eCAib2Zmc2V0IiBvZiB0aGUgZ2l2ZW4gRmxvYXQzMkFycmF5CisgICAgICogVGhpcyBmdW5jdGlv
biBpcyBkZXByZWNhdGVkLiBVc2UgRnJvbUFycmF5IGluc3RlYWQKKyAgICAgKiBAcGFyYW0gYXJy
YXkgZGVmaW5lcyB0aGUgc291cmNlIGFycmF5CisgICAgICogQHBhcmFtIG9mZnNldCBkZWZpbmVz
IHRoZSBvZmZzZXQgaW4gdGhlIHNvdXJjZSBhcnJheQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcg
VmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuRnJvbUZsb2F0QXJyYXkgPSBmdW5jdGlvbiAo
YXJyYXksIG9mZnNldCkgeworICAgICAgICByZXR1cm4gVmVjdG9yMy5Gcm9tQXJyYXkoYXJyYXks
IG9mZnNldCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3Ig
InJlc3VsdCIgd2l0aCB0aGUgZWxlbWVudCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggIm9mZnNldCIg
b2YgdGhlIGdpdmVuIGFycmF5CisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIHNvdXJj
ZSBhcnJheQorICAgICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGluIHRoZSBz
b3VyY2UgYXJyYXkKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjMgd2hl
cmUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqLworICAgIFZlY3RvcjMuRnJvbUFycmF5VG9S
ZWYgPSBmdW5jdGlvbiAoYXJyYXksIG9mZnNldCwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54
ID0gYXJyYXlbb2Zmc2V0XTsKKyAgICAgICAgcmVzdWx0LnkgPSBhcnJheVtvZmZzZXQgKyAxXTsK
KyAgICAgICAgcmVzdWx0LnogPSBhcnJheVtvZmZzZXQgKyAyXTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciAicmVzdWx0IiB3aXRoIHRoZSBlbGVtZW50IHZh
bHVlcyBmcm9tIHRoZSBpbmRleCAib2Zmc2V0IiBvZiB0aGUgZ2l2ZW4gRmxvYXQzMkFycmF5Cisg
ICAgICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiAgVXNlIEZyb21BcnJheVRvUmVmIGlu
c3RlYWQuCisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIHNvdXJjZSBhcnJheQorICAg
ICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGluIHRoZSBzb3VyY2UgYXJyYXkK
KyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8gc3RvcmUg
dGhlIHJlc3VsdAorICAgICAqLworICAgIFZlY3RvcjMuRnJvbUZsb2F0QXJyYXlUb1JlZiA9IGZ1
bmN0aW9uIChhcnJheSwgb2Zmc2V0LCByZXN1bHQpIHsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjMu
RnJvbUFycmF5VG9SZWYoYXJyYXksIG9mZnNldCwgcmVzdWx0KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciAicmVzdWx0IiB3aXRoIHRoZSBnaXZlbiBmbG9h
dHMuCisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgeCBjb29yZGluYXRlIG9mIHRoZSBzb3Vy
Y2UKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHNvdXJj
ZQorICAgICAqIEBwYXJhbSB6IGRlZmluZXMgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgc291cmNl
CisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSBWZWN0b3IzIHdoZXJlIHRvIHN0b3Jl
IHRoZSByZXN1bHQKKyAgICAgKi8KKyAgICBWZWN0b3IzLkZyb21GbG9hdHNUb1JlZiA9IGZ1bmN0
aW9uICh4LCB5LCB6LCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LmNvcHlGcm9tRmxvYXRzKHgs
IHksIHopOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNl
dCB0byAoMC4wLCAwLjAsIDAuMCkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBlbXB0eSBWZWN0b3Iz
CisgICAgICovCisgICAgVmVjdG9yMy5aZXJvID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gbmV3IFZlY3RvcjMoMC4wLCAwLjAsIDAuMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgxLjAsIDEuMCwgMS4wKQorICAgICAqIEByZXR1
cm5zIGEgbmV3IHVuaXQgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuT25lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMS4wLCAxLjAsIDEuMCk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgwLjAsIDEu
MCwgMC4wKQorICAgICAqIEByZXR1cm5zIGEgbmV3IHVwIFZlY3RvcjMKKyAgICAgKi8KKyAgICBW
ZWN0b3IzLlVwID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMC4w
LCAxLjAsIDAuMCk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmVjdG9yMywg
IlVwUmVhZE9ubHkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGEgdXAgVmVjdG9y
MyB0aGF0IG11c3Qgbm90IGJlIHVwZGF0ZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjMuX1VwUmVhZE9ubHk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWZWN0b3IzLCAiWmVyb1Jl
YWRPbmx5IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIHplcm8gVmVjdG9yMyB0
aGF0IG11c3Qgbm90IGJlIHVwZGF0ZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjMuX1plcm9SZWFkT25seTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0
byAoMC4wLCAtMS4wLCAwLjApCisgICAgICogQHJldHVybnMgYSBuZXcgZG93biBWZWN0b3IzCisg
ICAgICovCisgICAgVmVjdG9yMy5Eb3duID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
bmV3IFZlY3RvcjMoMC4wLCAtMS4wLCAwLjApOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0
dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIDEuMCkKKyAgICAgKiBAcmV0dXJu
cyBhIG5ldyBmb3J3YXJkIFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLkZvcndhcmQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLjAsIDAuMCwgMS4wKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDAu
MCwgMC4wLCAtMS4wKQorICAgICAqIEByZXR1cm5zIGEgbmV3IGZvcndhcmQgVmVjdG9yMworICAg
ICAqLworICAgIFZlY3RvcjMuQmFja3dhcmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biBuZXcgVmVjdG9yMygwLjAsIDAuMCwgLTEuMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgxLjAsIDAuMCwgMC4wKQorICAgICAqIEByZXR1
cm5zIGEgbmV3IHJpZ2h0IFZlY3RvcjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLlJpZ2h0ID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMS4wLCAwLjAsIDAuMCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgtMS4w
LCAwLjAsIDAuMCkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBsZWZ0IFZlY3RvcjMKKyAgICAgKi8K
KyAgICBWZWN0b3IzLkxlZnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVj
dG9yMygtMS4wLCAwLjAsIDAuMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEg
bmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgdHJhbnNmb3JtYXRpb24gYnkg
dGhlIGdpdmVuIG1hdHJpeCBvZiB0aGUgZ2l2ZW4gdmVjdG9yLgorICAgICAqIFRoaXMgbWV0aG9k
IGNvbXB1dGVzIHRyYW5mb3JtZWQgY29vcmRpbmF0ZXMgb25seSwgbm90IHRyYW5zZm9ybWVkIGRp
cmVjdGlvbiB2ZWN0b3JzIChpZS4gaXQgdGFrZXMgdHJhbnNsYXRpb24gaW4gYWNjb3VudCkKKyAg
ICAgKiBAcGFyYW0gdmVjdG9yIGRlZmluZXMgdGhlIFZlY3RvcjMgdG8gdHJhbnNmb3JtCisgICAg
ICogQHBhcmFtIHRyYW5zZm9ybWF0aW9uIGRlZmluZXMgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJp
eAorICAgICAqIEByZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCBWZWN0b3IzCisgICAgICovCisgICAg
VmVjdG9yMy5UcmFuc2Zvcm1Db29yZGluYXRlcyA9IGZ1bmN0aW9uICh2ZWN0b3IsIHRyYW5zZm9y
bWF0aW9uKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBWZWN0b3IzLlplcm8oKTsKKyAgICAgICAg
VmVjdG9yMy5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHZlY3RvciwgdHJhbnNmb3JtYXRpb24s
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIgY29vcmRpbmF0ZXMgd2l0aCB0aGUgcmVz
dWx0IG9mIHRoZSB0cmFuc2Zvcm1hdGlvbiBieSB0aGUgZ2l2ZW4gbWF0cml4IG9mIHRoZSBnaXZl
biB2ZWN0b3IKKyAgICAgKiBUaGlzIG1ldGhvZCBjb21wdXRlcyB0cmFuZm9ybWVkIGNvb3JkaW5h
dGVzIG9ubHksIG5vdCB0cmFuc2Zvcm1lZCBkaXJlY3Rpb24gdmVjdG9ycyAoaWUuIGl0IHRha2Vz
IHRyYW5zbGF0aW9uIGluIGFjY291bnQpCisgICAgICogQHBhcmFtIHZlY3RvciBkZWZpbmVzIHRo
ZSBWZWN0b3IzIHRvIHRyYW5zZm9ybQorICAgICAqIEBwYXJhbSB0cmFuc2Zvcm1hdGlvbiBkZWZp
bmVzIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmlu
ZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqLworICAgIFZl
Y3RvcjMuVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZiA9IGZ1bmN0aW9uICh2ZWN0b3IsIHRyYW5z
Zm9ybWF0aW9uLCByZXN1bHQpIHsKKyAgICAgICAgVmVjdG9yMy5UcmFuc2Zvcm1Db29yZGluYXRl
c0Zyb21GbG9hdHNUb1JlZih2ZWN0b3IueCwgdmVjdG9yLnksIHZlY3Rvci56LCB0cmFuc2Zvcm1h
dGlvbiwgcmVzdWx0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGdpdmVuIHZl
Y3RvciAicmVzdWx0IiBjb29yZGluYXRlcyB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIHRyYW5zZm9y
bWF0aW9uIGJ5IHRoZSBnaXZlbiBtYXRyaXggb2YgdGhlIGdpdmVuIGZsb2F0cyAoeCwgeSwgeikK
KyAgICAgKiBUaGlzIG1ldGhvZCBjb21wdXRlcyB0cmFuZm9ybWVkIGNvb3JkaW5hdGVzIG9ubHks
IG5vdCB0cmFuc2Zvcm1lZCBkaXJlY3Rpb24gdmVjdG9ycworICAgICAqIEBwYXJhbSB4IGRlZmlu
ZSB0aGUgeCBjb29yZGluYXRlIG9mIHRoZSBzb3VyY2UgdmVjdG9yCisgICAgICogQHBhcmFtIHkg
ZGVmaW5lIHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHNvdXJjZSB2ZWN0b3IKKyAgICAgKiBAcGFy
YW0geiBkZWZpbmUgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgc291cmNlIHZlY3RvcgorICAgICAq
IEBwYXJhbSB0cmFuc2Zvcm1hdGlvbiBkZWZpbmVzIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgK
KyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8gc3RvcmUg
dGhlIHJlc3VsdAorICAgICAqLworICAgIFZlY3RvcjMuVHJhbnNmb3JtQ29vcmRpbmF0ZXNGcm9t
RmxvYXRzVG9SZWYgPSBmdW5jdGlvbiAoeCwgeSwgeiwgdHJhbnNmb3JtYXRpb24sIHJlc3VsdCkg
eworICAgICAgICB2YXIgbSA9IHRyYW5zZm9ybWF0aW9uLm07CisgICAgICAgIHZhciByeCA9IHgg
KiBtWzBdICsgeSAqIG1bNF0gKyB6ICogbVs4XSArIG1bMTJdOworICAgICAgICB2YXIgcnkgPSB4
ICogbVsxXSArIHkgKiBtWzVdICsgeiAqIG1bOV0gKyBtWzEzXTsKKyAgICAgICAgdmFyIHJ6ID0g
eCAqIG1bMl0gKyB5ICogbVs2XSArIHogKiBtWzEwXSArIG1bMTRdOworICAgICAgICB2YXIgcncg
PSAxIC8gKHggKiBtWzNdICsgeSAqIG1bN10gKyB6ICogbVsxMV0gKyBtWzE1XSk7CisgICAgICAg
IHJlc3VsdC54ID0gcnggKiBydzsKKyAgICAgICAgcmVzdWx0LnkgPSByeSAqIHJ3OworICAgICAg
ICByZXN1bHQueiA9IHJ6ICogcnc7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEg
bmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgbm9ybWFsIHRyYW5zZm9ybWF0
aW9uIGJ5IHRoZSBnaXZlbiBtYXRyaXggb2YgdGhlIGdpdmVuIHZlY3RvcgorICAgICAqIFRoaXMg
bWV0aG9kcyBjb21wdXRlcyB0cmFuc2Zvcm1lZCBub3JtYWxpemVkIGRpcmVjdGlvbiB2ZWN0b3Jz
IG9ubHkgKGllLiBpdCBkb2VzIG5vdCBhcHBseSB0cmFuc2xhdGlvbikKKyAgICAgKiBAcGFyYW0g
dmVjdG9yIGRlZmluZXMgdGhlIFZlY3RvcjMgdG8gdHJhbnNmb3JtCisgICAgICogQHBhcmFtIHRy
YW5zZm9ybWF0aW9uIGRlZmluZXMgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeAorICAgICAqIEBy
ZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuVHJhbnNmb3JtTm9y
bWFsID0gZnVuY3Rpb24gKHZlY3RvciwgdHJhbnNmb3JtYXRpb24pIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IFZlY3RvcjMuWmVybygpOworICAgICAgICBWZWN0b3IzLlRyYW5zZm9ybU5vcm1hbFRv
UmVmKHZlY3RvciwgdHJhbnNmb3JtYXRpb24sIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3IgInJlc3Vs
dCIgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBub3JtYWwgdHJhbnNmb3JtYXRpb24gYnkgdGhlIGdp
dmVuIG1hdHJpeCBvZiB0aGUgZ2l2ZW4gdmVjdG9yCisgICAgICogVGhpcyBtZXRob2RzIGNvbXB1
dGVzIHRyYW5zZm9ybWVkIG5vcm1hbGl6ZWQgZGlyZWN0aW9uIHZlY3RvcnMgb25seSAoaWUuIGl0
IGRvZXMgbm90IGFwcGx5IHRyYW5zbGF0aW9uKQorICAgICAqIEBwYXJhbSB2ZWN0b3IgZGVmaW5l
cyB0aGUgVmVjdG9yMyB0byB0cmFuc2Zvcm0KKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtYXRpb24g
ZGVmaW5lcyB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4CisgICAgICogQHBhcmFtIHJlc3VsdCBk
ZWZpbmVzIHRoZSBWZWN0b3IzIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKi8KKyAg
ICBWZWN0b3IzLlRyYW5zZm9ybU5vcm1hbFRvUmVmID0gZnVuY3Rpb24gKHZlY3RvciwgdHJhbnNm
b3JtYXRpb24sIHJlc3VsdCkgeworICAgICAgICB0aGlzLlRyYW5zZm9ybU5vcm1hbEZyb21GbG9h
dHNUb1JlZih2ZWN0b3IueCwgdmVjdG9yLnksIHZlY3Rvci56LCB0cmFuc2Zvcm1hdGlvbiwgcmVz
dWx0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciAicmVz
dWx0IiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIG5vcm1hbCB0cmFuc2Zvcm1hdGlvbiBieSB0aGUg
Z2l2ZW4gbWF0cml4IG9mIHRoZSBnaXZlbiBmbG9hdHMgKHgsIHksIHopCisgICAgICogVGhpcyBt
ZXRob2RzIGNvbXB1dGVzIHRyYW5zZm9ybWVkIG5vcm1hbGl6ZWQgZGlyZWN0aW9uIHZlY3RvcnMg
b25seSAoaWUuIGl0IGRvZXMgbm90IGFwcGx5IHRyYW5zbGF0aW9uKQorICAgICAqIEBwYXJhbSB4
IGRlZmluZSB0aGUgeCBjb29yZGluYXRlIG9mIHRoZSBzb3VyY2UgdmVjdG9yCisgICAgICogQHBh
cmFtIHkgZGVmaW5lIHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHNvdXJjZSB2ZWN0b3IKKyAgICAg
KiBAcGFyYW0geiBkZWZpbmUgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgc291cmNlIHZlY3Rvcgor
ICAgICAqIEBwYXJhbSB0cmFuc2Zvcm1hdGlvbiBkZWZpbmVzIHRoZSB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXgKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8g
c3RvcmUgdGhlIHJlc3VsdAorICAgICAqLworICAgIFZlY3RvcjMuVHJhbnNmb3JtTm9ybWFsRnJv
bUZsb2F0c1RvUmVmID0gZnVuY3Rpb24gKHgsIHksIHosIHRyYW5zZm9ybWF0aW9uLCByZXN1bHQp
IHsKKyAgICAgICAgdmFyIG0gPSB0cmFuc2Zvcm1hdGlvbi5tOworICAgICAgICByZXN1bHQueCA9
IHggKiBtWzBdICsgeSAqIG1bNF0gKyB6ICogbVs4XTsKKyAgICAgICAgcmVzdWx0LnkgPSB4ICog
bVsxXSArIHkgKiBtWzVdICsgeiAqIG1bOV07CisgICAgICAgIHJlc3VsdC56ID0geCAqIG1bMl0g
KyB5ICogbVs2XSArIHogKiBtWzEwXTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBuZXcgVmVjdG9yMyBsb2NhdGVkIGZvciAiYW1vdW50IiBvbiB0aGUgQ2F0bXVsbFJvbSBpbnRl
cnBvbGF0aW9uIHNwbGluZSBkZWZpbmVkIGJ5IHRoZSB2ZWN0b3JzICJ2YWx1ZTEiLCAidmFsdWUy
IiwgInZhbHVlMyIsICJ2YWx1ZTQiCisgICAgICogQHBhcmFtIHZhbHVlMSBkZWZpbmVzIHRoZSBm
aXJzdCBjb250cm9sIHBvaW50CisgICAgICogQHBhcmFtIHZhbHVlMiBkZWZpbmVzIHRoZSBzZWNv
bmQgY29udHJvbCBwb2ludAorICAgICAqIEBwYXJhbSB2YWx1ZTMgZGVmaW5lcyB0aGUgdGhpcmQg
Y29udHJvbCBwb2ludAorICAgICAqIEBwYXJhbSB2YWx1ZTQgZGVmaW5lcyB0aGUgZm91cnRoIGNv
bnRyb2wgcG9pbnQKKyAgICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGFtb3VudCBvbiB0
aGUgc3BsaW5lIHRvIHVzZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAq
LworICAgIFZlY3RvcjMuQ2F0bXVsbFJvbSA9IGZ1bmN0aW9uICh2YWx1ZTEsIHZhbHVlMiwgdmFs
dWUzLCB2YWx1ZTQsIGFtb3VudCkgeworICAgICAgICB2YXIgc3F1YXJlZCA9IGFtb3VudCAqIGFt
b3VudDsKKyAgICAgICAgdmFyIGN1YmVkID0gYW1vdW50ICogc3F1YXJlZDsKKyAgICAgICAgdmFy
IHggPSAwLjUgKiAoKCgoMi4wICogdmFsdWUyLngpICsgKCgtdmFsdWUxLnggKyB2YWx1ZTMueCkg
KiBhbW91bnQpKSArCisgICAgICAgICAgICAoKCgoKDIuMCAqIHZhbHVlMS54KSAtICg1LjAgKiB2
YWx1ZTIueCkpICsgKDQuMCAqIHZhbHVlMy54KSkgLSB2YWx1ZTQueCkgKiBzcXVhcmVkKSkgKwor
ICAgICAgICAgICAgKCgoKC12YWx1ZTEueCArICgzLjAgKiB2YWx1ZTIueCkpIC0gKDMuMCAqIHZh
bHVlMy54KSkgKyB2YWx1ZTQueCkgKiBjdWJlZCkpOworICAgICAgICB2YXIgeSA9IDAuNSAqICgo
KCgyLjAgKiB2YWx1ZTIueSkgKyAoKC12YWx1ZTEueSArIHZhbHVlMy55KSAqIGFtb3VudCkpICsK
KyAgICAgICAgICAgICgoKCgoMi4wICogdmFsdWUxLnkpIC0gKDUuMCAqIHZhbHVlMi55KSkgKyAo
NC4wICogdmFsdWUzLnkpKSAtIHZhbHVlNC55KSAqIHNxdWFyZWQpKSArCisgICAgICAgICAgICAo
KCgoLXZhbHVlMS55ICsgKDMuMCAqIHZhbHVlMi55KSkgLSAoMy4wICogdmFsdWUzLnkpKSArIHZh
bHVlNC55KSAqIGN1YmVkKSk7CisgICAgICAgIHZhciB6ID0gMC41ICogKCgoKDIuMCAqIHZhbHVl
Mi56KSArICgoLXZhbHVlMS56ICsgdmFsdWUzLnopICogYW1vdW50KSkgKworICAgICAgICAgICAg
KCgoKCgyLjAgKiB2YWx1ZTEueikgLSAoNS4wICogdmFsdWUyLnopKSArICg0LjAgKiB2YWx1ZTMu
eikpIC0gdmFsdWU0LnopICogc3F1YXJlZCkpICsKKyAgICAgICAgICAgICgoKCgtdmFsdWUxLnog
KyAoMy4wICogdmFsdWUyLnopKSAtICgzLjAgKiB2YWx1ZTMueikpICsgdmFsdWU0LnopICogY3Vi
ZWQpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKHgsIHksIHopOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRoIHRoZSBjb29yZGluYXRl
cyBvZiAidmFsdWUiLCBpZiB0aGUgdmVjdG9yICJ2YWx1ZSIgaXMgaW4gdGhlIGN1YmUgZGVmaW5l
ZCBieSB0aGUgdmVjdG9ycyAibWluIiBhbmQgIm1heCIKKyAgICAgKiBJZiBhIGNvb3JkaW5hdGUg
dmFsdWUgb2YgInZhbHVlIiBpcyBsb3dlciB0aGFuIG9uZSBvZiB0aGUgIm1pbiIgY29vcmRpbmF0
ZSwgdGhlbiB0aGlzICJ2YWx1ZSIgY29vcmRpbmF0ZSBpcyBzZXQgd2l0aCB0aGUgIm1pbiIgb25l
CisgICAgICogSWYgYSBjb29yZGluYXRlIHZhbHVlIG9mICJ2YWx1ZSIgaXMgZ3JlYXRlciB0aGFu
IG9uZSBvZiB0aGUgIm1heCIgY29vcmRpbmF0ZSwgdGhlbiB0aGlzICJ2YWx1ZSIgY29vcmRpbmF0
ZSBpcyBzZXQgd2l0aCB0aGUgIm1heCIgb25lCisgICAgICogQHBhcmFtIHZhbHVlIGRlZmluZXMg
dGhlIGN1cnJlbnQgdmFsdWUKKyAgICAgKiBAcGFyYW0gbWluIGRlZmluZXMgdGhlIGxvd2VyIHJh
bmdlIHZhbHVlCisgICAgICogQHBhcmFtIG1heCBkZWZpbmVzIHRoZSB1cHBlciByYW5nZSB2YWx1
ZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMu
Q2xhbXAgPSBmdW5jdGlvbiAodmFsdWUsIG1pbiwgbWF4KSB7CisgICAgICAgIHZhciB2ID0gbmV3
IFZlY3RvcjMoKTsKKyAgICAgICAgVmVjdG9yMy5DbGFtcFRvUmVmKHZhbHVlLCBtaW4sIG1heCwg
dik7CisgICAgICAgIHJldHVybiB2OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUg
Z2l2ZW4gdmVjdG9yICJyZXN1bHQiIHdpdGggdGhlIGNvb3JkaW5hdGVzIG9mICJ2YWx1ZSIsIGlm
IHRoZSB2ZWN0b3IgInZhbHVlIiBpcyBpbiB0aGUgY3ViZSBkZWZpbmVkIGJ5IHRoZSB2ZWN0b3Jz
ICJtaW4iIGFuZCAibWF4IgorICAgICAqIElmIGEgY29vcmRpbmF0ZSB2YWx1ZSBvZiAidmFsdWUi
IGlzIGxvd2VyIHRoYW4gb25lIG9mIHRoZSAibWluIiBjb29yZGluYXRlLCB0aGVuIHRoaXMgInZh
bHVlIiBjb29yZGluYXRlIGlzIHNldCB3aXRoIHRoZSAibWluIiBvbmUKKyAgICAgKiBJZiBhIGNv
b3JkaW5hdGUgdmFsdWUgb2YgInZhbHVlIiBpcyBncmVhdGVyIHRoYW4gb25lIG9mIHRoZSAibWF4
IiBjb29yZGluYXRlLCB0aGVuIHRoaXMgInZhbHVlIiBjb29yZGluYXRlIGlzIHNldCB3aXRoIHRo
ZSAibWF4IiBvbmUKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5lcyB0aGUgY3VycmVudCB2YWx1
ZQorICAgICAqIEBwYXJhbSBtaW4gZGVmaW5lcyB0aGUgbG93ZXIgcmFuZ2UgdmFsdWUKKyAgICAg
KiBAcGFyYW0gbWF4IGRlZmluZXMgdGhlIHVwcGVyIHJhbmdlIHZhbHVlCisgICAgICogQHBhcmFt
IHJlc3VsdCBkZWZpbmVzIHRoZSBWZWN0b3IzIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAg
ICAgKi8KKyAgICBWZWN0b3IzLkNsYW1wVG9SZWYgPSBmdW5jdGlvbiAodmFsdWUsIG1pbiwgbWF4
LCByZXN1bHQpIHsKKyAgICAgICAgdmFyIHggPSB2YWx1ZS54OworICAgICAgICB4ID0gKHggPiBt
YXgueCkgPyBtYXgueCA6IHg7CisgICAgICAgIHggPSAoeCA8IG1pbi54KSA/IG1pbi54IDogeDsK
KyAgICAgICAgdmFyIHkgPSB2YWx1ZS55OworICAgICAgICB5ID0gKHkgPiBtYXgueSkgPyBtYXgu
eSA6IHk7CisgICAgICAgIHkgPSAoeSA8IG1pbi55KSA/IG1pbi55IDogeTsKKyAgICAgICAgdmFy
IHogPSB2YWx1ZS56OworICAgICAgICB6ID0gKHogPiBtYXgueikgPyBtYXgueiA6IHo7CisgICAg
ICAgIHogPSAoeiA8IG1pbi56KSA/IG1pbi56IDogejsKKyAgICAgICAgcmVzdWx0LmNvcHlGcm9t
RmxvYXRzKHgsIHksIHopOworICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIGEgZ2l2
ZW4gdmVjdG9yIGlzIGluc2lkZSBhIHNwZWNpZmljIHJhbmdlCisgICAgICogQHBhcmFtIHYgZGVm
aW5lcyB0aGUgdmVjdG9yIHRvIHRlc3QKKyAgICAgKiBAcGFyYW0gbWluIGRlZmluZXMgdGhlIG1p
bmltdW0gcmFuZ2UKKyAgICAgKiBAcGFyYW0gbWF4IGRlZmluZXMgdGhlIG1heGltdW0gcmFuZ2UK
KyAgICAgKi8KKyAgICBWZWN0b3IzLkNoZWNrRXh0ZW5kcyA9IGZ1bmN0aW9uICh2LCBtaW4sIG1h
eCkgeworICAgICAgICBtaW4ubWluaW1pemVJblBsYWNlKHYpOworICAgICAgICBtYXgubWF4aW1p
emVJblBsYWNlKHYpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0
b3IzIGxvY2F0ZWQgZm9yICJhbW91bnQiIChmbG9hdCkgb24gdGhlIEhlcm1pdGUgaW50ZXJwb2xh
dGlvbiBzcGxpbmUgZGVmaW5lZCBieSB0aGUgdmVjdG9ycyAidmFsdWUxIiwgInRhbmdlbnQxIiwg
InZhbHVlMiIsICJ0YW5nZW50MiIKKyAgICAgKiBAcGFyYW0gdmFsdWUxIGRlZmluZXMgdGhlIGZp
cnN0IGNvbnRyb2wgcG9pbnQKKyAgICAgKiBAcGFyYW0gdGFuZ2VudDEgZGVmaW5lcyB0aGUgZmly
c3QgdGFuZ2VudCB2ZWN0b3IKKyAgICAgKiBAcGFyYW0gdmFsdWUyIGRlZmluZXMgdGhlIHNlY29u
ZCBjb250cm9sIHBvaW50CisgICAgICogQHBhcmFtIHRhbmdlbnQyIGRlZmluZXMgdGhlIHNlY29u
ZCB0YW5nZW50IHZlY3RvcgorICAgICAqIEBwYXJhbSBhbW91bnQgZGVmaW5lcyB0aGUgYW1vdW50
IG9uIHRoZSBpbnRlcnBvbGF0aW9uIHNwbGluZSAoYmV0d2VlbiAwIGFuZCAxKQorICAgICAqIEBy
ZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuSGVybWl0ZSA9IGZ1
bmN0aW9uICh2YWx1ZTEsIHRhbmdlbnQxLCB2YWx1ZTIsIHRhbmdlbnQyLCBhbW91bnQpIHsKKyAg
ICAgICAgdmFyIHNxdWFyZWQgPSBhbW91bnQgKiBhbW91bnQ7CisgICAgICAgIHZhciBjdWJlZCA9
IGFtb3VudCAqIHNxdWFyZWQ7CisgICAgICAgIHZhciBwYXJ0MSA9ICgoMi4wICogY3ViZWQpIC0g
KDMuMCAqIHNxdWFyZWQpKSArIDEuMDsKKyAgICAgICAgdmFyIHBhcnQyID0gKC0yLjAgKiBjdWJl
ZCkgKyAoMy4wICogc3F1YXJlZCk7CisgICAgICAgIHZhciBwYXJ0MyA9IChjdWJlZCAtICgyLjAg
KiBzcXVhcmVkKSkgKyBhbW91bnQ7CisgICAgICAgIHZhciBwYXJ0NCA9IGN1YmVkIC0gc3F1YXJl
ZDsKKyAgICAgICAgdmFyIHggPSAoKCh2YWx1ZTEueCAqIHBhcnQxKSArICh2YWx1ZTIueCAqIHBh
cnQyKSkgKyAodGFuZ2VudDEueCAqIHBhcnQzKSkgKyAodGFuZ2VudDIueCAqIHBhcnQ0KTsKKyAg
ICAgICAgdmFyIHkgPSAoKCh2YWx1ZTEueSAqIHBhcnQxKSArICh2YWx1ZTIueSAqIHBhcnQyKSkg
KyAodGFuZ2VudDEueSAqIHBhcnQzKSkgKyAodGFuZ2VudDIueSAqIHBhcnQ0KTsKKyAgICAgICAg
dmFyIHogPSAoKCh2YWx1ZTEueiAqIHBhcnQxKSArICh2YWx1ZTIueiAqIHBhcnQyKSkgKyAodGFu
Z2VudDEueiAqIHBhcnQzKSkgKyAodGFuZ2VudDIueiAqIHBhcnQ0KTsKKyAgICAgICAgcmV0dXJu
IG5ldyBWZWN0b3IzKHgsIHksIHopOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBh
IG5ldyBWZWN0b3IzIGxvY2F0ZWQgZm9yICJhbW91bnQiIChmbG9hdCkgb24gdGhlIGxpbmVhciBp
bnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIHZlY3RvcnMgInN0YXJ0IiBhbmQgImVuZCIKKyAgICAg
KiBAcGFyYW0gc3RhcnQgZGVmaW5lcyB0aGUgc3RhcnQgdmFsdWUKKyAgICAgKiBAcGFyYW0gZW5k
IGRlZmluZXMgdGhlIGVuZCB2YWx1ZQorICAgICAqIEBwYXJhbSBhbW91bnQgbWF4IGRlZmluZXMg
YW1vdW50IGJldHdlZW4gYm90aCAoYmV0d2VlbiAwIGFuZCAxKQorICAgICAqIEByZXR1cm5zIHRo
ZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuTGVycCA9IGZ1bmN0aW9uIChzdGFy
dCwgZW5kLCBhbW91bnQpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBWZWN0b3IzKDAsIDAs
IDApOworICAgICAgICBWZWN0b3IzLkxlcnBUb1JlZihzdGFydCwgZW5kLCBhbW91bnQsIHJlc3Vs
dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRz
IHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBsaW5lYXIg
aW50ZXJwb2xhdGlvbiBmcm9tIHRoZSB2ZWN0b3IgInN0YXJ0IiBmb3IgImFtb3VudCIgdG8gdGhl
IHZlY3RvciAiZW5kIgorICAgICAqIEBwYXJhbSBzdGFydCBkZWZpbmVzIHRoZSBzdGFydCB2YWx1
ZQorICAgICAqIEBwYXJhbSBlbmQgZGVmaW5lcyB0aGUgZW5kIHZhbHVlCisgICAgICogQHBhcmFt
IGFtb3VudCBtYXggZGVmaW5lcyBhbW91bnQgYmV0d2VlbiBib3RoIChiZXR3ZWVuIDAgYW5kIDEp
CisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSBWZWN0b3IzIHdoZXJlIHRvIHN0b3Jl
IHRoZSByZXN1bHQKKyAgICAgKi8KKyAgICBWZWN0b3IzLkxlcnBUb1JlZiA9IGZ1bmN0aW9uIChz
dGFydCwgZW5kLCBhbW91bnQsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQueCA9IHN0YXJ0Lngg
KyAoKGVuZC54IC0gc3RhcnQueCkgKiBhbW91bnQpOworICAgICAgICByZXN1bHQueSA9IHN0YXJ0
LnkgKyAoKGVuZC55IC0gc3RhcnQueSkgKiBhbW91bnQpOworICAgICAgICByZXN1bHQueiA9IHN0
YXJ0LnogKyAoKGVuZC56IC0gc3RhcnQueikgKiBhbW91bnQpOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBiZXR3ZWVuIHRoZSB2ZWN0b3Jz
ICJsZWZ0IiBhbmQgInJpZ2h0IgorICAgICAqIEBwYXJhbSBsZWZ0IGRlZmluZXMgdGhlIGxlZnQg
b3BlcmFuZAorICAgICAqIEBwYXJhbSByaWdodCBkZWZpbmVzIHRoZSByaWdodCBvcGVyYW5kCisg
ICAgICogQHJldHVybnMgdGhlIGRvdCBwcm9kdWN0CisgICAgICovCisgICAgVmVjdG9yMy5Eb3Qg
PSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsKKyAgICAgICAgcmV0dXJuIChsZWZ0LnggKiByaWdo
dC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0LnopOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGFzIHRoZSBjcm9zcyBwcm9kdWN0IG9m
IHRoZSB2ZWN0b3JzICJsZWZ0IiBhbmQgInJpZ2h0IgorICAgICAqIFRoZSBjcm9zcyBwcm9kdWN0
IGlzIHRoZW4gb3J0aG9nb25hbCB0byBib3RoICJsZWZ0IiBhbmQgInJpZ2h0IgorICAgICAqIEBw
YXJhbSBsZWZ0IGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZAorICAgICAqIEBwYXJhbSByaWdodCBk
ZWZpbmVzIHRoZSByaWdodCBvcGVyYW5kCisgICAgICogQHJldHVybnMgdGhlIGNyb3NzIHByb2R1
Y3QKKyAgICAgKi8KKyAgICBWZWN0b3IzLkNyb3NzID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7
CisgICAgICAgIHZhciByZXN1bHQgPSBWZWN0b3IzLlplcm8oKTsKKyAgICAgICAgVmVjdG9yMy5D
cm9zc1RvUmVmKGxlZnQsIHJpZ2h0LCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2ZW4gdmVjdG9yICJyZXN1bHQiIHdp
dGggdGhlIGNyb3NzIHByb2R1Y3Qgb2YgImxlZnQiIGFuZCAicmlnaHQiCisgICAgICogVGhlIGNy
b3NzIHByb2R1Y3QgaXMgdGhlbiBvcnRob2dvbmFsIHRvIGJvdGggImxlZnQiIGFuZCAicmlnaHQi
CisgICAgICogQHBhcmFtIGxlZnQgZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kCisgICAgICogQHBh
cmFtIHJpZ2h0IGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmQKKyAgICAgKiBAcGFyYW0gcmVzdWx0
IGRlZmluZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqLwor
ICAgIFZlY3RvcjMuQ3Jvc3NUb1JlZiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgcmVzdWx0KSB7
CisgICAgICAgIHZhciB4ID0gbGVmdC55ICogcmlnaHQueiAtIGxlZnQueiAqIHJpZ2h0Lnk7Cisg
ICAgICAgIHZhciB5ID0gbGVmdC56ICogcmlnaHQueCAtIGxlZnQueCAqIHJpZ2h0Lno7CisgICAg
ICAgIHZhciB6ID0gbGVmdC54ICogcmlnaHQueSAtIGxlZnQueSAqIHJpZ2h0Lng7CisgICAgICAg
IHJlc3VsdC5jb3B5RnJvbUZsb2F0cyh4LCB5LCB6KTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgbm9ybWFsaXphdGlvbiBvZiB0aGUgZ2l2ZW4g
dmVjdG9yCisgICAgICogQHBhcmFtIHZlY3RvciBkZWZpbmVzIHRoZSBWZWN0b3IzIHRvIG5vcm1h
bGl6ZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3Rv
cjMuTm9ybWFsaXplID0gZnVuY3Rpb24gKHZlY3RvcikgeworICAgICAgICB2YXIgcmVzdWx0ID0g
VmVjdG9yMy5aZXJvKCk7CisgICAgICAgIFZlY3RvcjMuTm9ybWFsaXplVG9SZWYodmVjdG9yLCBy
ZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICog
U2V0cyB0aGUgZ2l2ZW4gdmVjdG9yICJyZXN1bHQiIHdpdGggdGhlIG5vcm1hbGl6YXRpb24gb2Yg
dGhlIGdpdmVuIGZpcnN0IHZlY3RvcgorICAgICAqIEBwYXJhbSB2ZWN0b3IgZGVmaW5lcyB0aGUg
VmVjdG9yMyB0byBub3JtYWxpemUKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZl
Y3RvcjMgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqLworICAgIFZlY3RvcjMuTm9y
bWFsaXplVG9SZWYgPSBmdW5jdGlvbiAodmVjdG9yLCByZXN1bHQpIHsKKyAgICAgICAgdmVjdG9y
Lm5vcm1hbGl6ZVRvUmVmKHJlc3VsdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcm9qZWN0
IGEgVmVjdG9yMyBvbnRvIHNjcmVlbiBzcGFjZQorICAgICAqIEBwYXJhbSB2ZWN0b3IgZGVmaW5l
cyB0aGUgVmVjdG9yMyB0byBwcm9qZWN0CisgICAgICogQHBhcmFtIHdvcmxkIGRlZmluZXMgdGhl
IHdvcmxkIG1hdHJpeCB0byB1c2UKKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtIGRlZmluZXMgdGhl
IHRyYW5zZm9ybSAodmlldyB4IHByb2plY3Rpb24pIG1hdHJpeCB0byB1c2UKKyAgICAgKiBAcGFy
YW0gdmlld3BvcnQgZGVmaW5lcyB0aGUgc2NyZWVuIHZpZXdwb3J0IHRvIHVzZQorICAgICAqIEBy
ZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuUHJvamVjdCA9IGZ1
bmN0aW9uICh2ZWN0b3IsIHdvcmxkLCB0cmFuc2Zvcm0sIHZpZXdwb3J0KSB7CisgICAgICAgIHZh
ciBjdyA9IHZpZXdwb3J0LndpZHRoOworICAgICAgICB2YXIgY2ggPSB2aWV3cG9ydC5oZWlnaHQ7
CisgICAgICAgIHZhciBjeCA9IHZpZXdwb3J0Lng7CisgICAgICAgIHZhciBjeSA9IHZpZXdwb3J0
Lnk7CisgICAgICAgIHZhciB2aWV3cG9ydE1hdHJpeCA9IE1hdGhUbXAuTWF0cml4WzFdOworICAg
ICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKGN3IC8gMi4wLCAwLCAwLCAwLCAwLCAtY2ggLyAy
LjAsIDAsIDAsIDAsIDAsIDAuNSwgMCwgY3ggKyBjdyAvIDIuMCwgY2ggLyAyLjAgKyBjeSwgMC41
LCAxLCB2aWV3cG9ydE1hdHJpeCk7CisgICAgICAgIHZhciBtYXRyaXggPSBNYXRoVG1wLk1hdHJp
eFswXTsKKyAgICAgICAgd29ybGQubXVsdGlwbHlUb1JlZih0cmFuc2Zvcm0sIG1hdHJpeCk7Cisg
ICAgICAgIG1hdHJpeC5tdWx0aXBseVRvUmVmKHZpZXdwb3J0TWF0cml4LCBtYXRyaXgpOworICAg
ICAgICByZXR1cm4gVmVjdG9yMy5UcmFuc2Zvcm1Db29yZGluYXRlcyh2ZWN0b3IsIG1hdHJpeCk7
CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFZlY3RvcjMuX1VucHJvamVjdEZyb21J
bnZlcnRlZE1hdHJpeFRvUmVmID0gZnVuY3Rpb24gKHNvdXJjZSwgbWF0cml4LCByZXN1bHQpIHsK
KyAgICAgICAgVmVjdG9yMy5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHNvdXJjZSwgbWF0cml4
LCByZXN1bHQpOworICAgICAgICB2YXIgbSA9IG1hdHJpeC5tOworICAgICAgICB2YXIgbnVtID0g
c291cmNlLnggKiBtWzNdICsgc291cmNlLnkgKiBtWzddICsgc291cmNlLnogKiBtWzExXSArIG1b
MTVdOworICAgICAgICBpZiAoX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlNjYWxhciJdLldpdGhpbkVwc2lsb24obnVtLCAxLjApKSB7CisgICAgICAgICAgICByZXN1
bHQuc2NhbGVJblBsYWNlKDEuMCAvIG51bSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIFVucHJvamVjdCBmcm9tIHNjcmVlbiBzcGFjZSB0byBvYmplY3Qgc3BhY2UKKyAgICAg
KiBAcGFyYW0gc291cmNlIGRlZmluZXMgdGhlIHNjcmVlbiBzcGFjZSBWZWN0b3IzIHRvIHVzZQor
ICAgICAqIEBwYXJhbSB2aWV3cG9ydFdpZHRoIGRlZmluZXMgdGhlIGN1cnJlbnQgd2lkdGggb2Yg
dGhlIHZpZXdwb3J0CisgICAgICogQHBhcmFtIHZpZXdwb3J0SGVpZ2h0IGRlZmluZXMgdGhlIGN1
cnJlbnQgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydAorICAgICAqIEBwYXJhbSB3b3JsZCBkZWZpbmVz
IHRoZSB3b3JsZCBtYXRyaXggdG8gdXNlIChjYW4gYmUgc2V0IHRvIElkZW50aXR5IHRvIGdvIHRv
IHdvcmxkIHNwYWNlKQorICAgICAqIEBwYXJhbSB0cmFuc2Zvcm0gZGVmaW5lcyB0aGUgdHJhbnNm
b3JtICh2aWV3IHggcHJvamVjdGlvbikgbWF0cml4IHRvIHVzZQorICAgICAqIEByZXR1cm5zIHRo
ZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuVW5wcm9qZWN0RnJvbVRyYW5zZm9y
bSA9IGZ1bmN0aW9uIChzb3VyY2UsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB3b3Js
ZCwgdHJhbnNmb3JtKSB7CisgICAgICAgIHZhciBtYXRyaXggPSBNYXRoVG1wLk1hdHJpeFswXTsK
KyAgICAgICAgd29ybGQubXVsdGlwbHlUb1JlZih0cmFuc2Zvcm0sIG1hdHJpeCk7CisgICAgICAg
IG1hdHJpeC5pbnZlcnQoKTsKKyAgICAgICAgc291cmNlLnggPSBzb3VyY2UueCAvIHZpZXdwb3J0
V2lkdGggKiAyIC0gMTsKKyAgICAgICAgc291cmNlLnkgPSAtKHNvdXJjZS55IC8gdmlld3BvcnRI
ZWlnaHQgKiAyIC0gMSk7CisgICAgICAgIHZhciB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpOworICAg
ICAgICBWZWN0b3IzLl9VbnByb2plY3RGcm9tSW52ZXJ0ZWRNYXRyaXhUb1JlZihzb3VyY2UsIG1h
dHJpeCwgdmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIHZlY3RvcjsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFVucHJvamVjdCBmcm9tIHNjcmVlbiBzcGFjZSB0byBvYmplY3Qgc3BhY2UKKyAgICAg
KiBAcGFyYW0gc291cmNlIGRlZmluZXMgdGhlIHNjcmVlbiBzcGFjZSBWZWN0b3IzIHRvIHVzZQor
ICAgICAqIEBwYXJhbSB2aWV3cG9ydFdpZHRoIGRlZmluZXMgdGhlIGN1cnJlbnQgd2lkdGggb2Yg
dGhlIHZpZXdwb3J0CisgICAgICogQHBhcmFtIHZpZXdwb3J0SGVpZ2h0IGRlZmluZXMgdGhlIGN1
cnJlbnQgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydAorICAgICAqIEBwYXJhbSB3b3JsZCBkZWZpbmVz
IHRoZSB3b3JsZCBtYXRyaXggdG8gdXNlIChjYW4gYmUgc2V0IHRvIElkZW50aXR5IHRvIGdvIHRv
IHdvcmxkIHNwYWNlKQorICAgICAqIEBwYXJhbSB2aWV3IGRlZmluZXMgdGhlIHZpZXcgbWF0cml4
IHRvIHVzZQorICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIGRlZmluZXMgdGhlIHByb2plY3Rpb24g
bWF0cml4IHRvIHVzZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLwor
ICAgIFZlY3RvcjMuVW5wcm9qZWN0ID0gZnVuY3Rpb24gKHNvdXJjZSwgdmlld3BvcnRXaWR0aCwg
dmlld3BvcnRIZWlnaHQsIHdvcmxkLCB2aWV3LCBwcm9qZWN0aW9uKSB7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBWZWN0b3IzLlplcm8oKTsKKyAgICAgICAgVmVjdG9yMy5VbnByb2plY3RUb1JlZihz
b3VyY2UsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB3b3JsZCwgdmlldywgcHJvamVj
dGlvbiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFVucHJvamVjdCBmcm9tIHNjcmVlbiBzcGFjZSB0byBvYmplY3Qgc3BhY2UKKyAgICAg
KiBAcGFyYW0gc291cmNlIGRlZmluZXMgdGhlIHNjcmVlbiBzcGFjZSBWZWN0b3IzIHRvIHVzZQor
ICAgICAqIEBwYXJhbSB2aWV3cG9ydFdpZHRoIGRlZmluZXMgdGhlIGN1cnJlbnQgd2lkdGggb2Yg
dGhlIHZpZXdwb3J0CisgICAgICogQHBhcmFtIHZpZXdwb3J0SGVpZ2h0IGRlZmluZXMgdGhlIGN1
cnJlbnQgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydAorICAgICAqIEBwYXJhbSB3b3JsZCBkZWZpbmVz
IHRoZSB3b3JsZCBtYXRyaXggdG8gdXNlIChjYW4gYmUgc2V0IHRvIElkZW50aXR5IHRvIGdvIHRv
IHdvcmxkIHNwYWNlKQorICAgICAqIEBwYXJhbSB2aWV3IGRlZmluZXMgdGhlIHZpZXcgbWF0cml4
IHRvIHVzZQorICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIGRlZmluZXMgdGhlIHByb2plY3Rpb24g
bWF0cml4IHRvIHVzZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgVmVjdG9yMyB3
aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0CisgICAgICovCisgICAgVmVjdG9yMy5VbnByb2plY3RU
b1JlZiA9IGZ1bmN0aW9uIChzb3VyY2UsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB3
b3JsZCwgdmlldywgcHJvamVjdGlvbiwgcmVzdWx0KSB7CisgICAgICAgIFZlY3RvcjMuVW5wcm9q
ZWN0RmxvYXRzVG9SZWYoc291cmNlLngsIHNvdXJjZS55LCBzb3VyY2Uueiwgdmlld3BvcnRXaWR0
aCwgdmlld3BvcnRIZWlnaHQsIHdvcmxkLCB2aWV3LCBwcm9qZWN0aW9uLCByZXN1bHQpOworICAg
IH07CisgICAgLyoqCisgICAgICogVW5wcm9qZWN0IGZyb20gc2NyZWVuIHNwYWNlIHRvIG9iamVj
dCBzcGFjZQorICAgICAqIEBwYXJhbSBzb3VyY2VYIGRlZmluZXMgdGhlIHNjcmVlbiBzcGFjZSB4
IGNvb3JkaW5hdGUgdG8gdXNlCisgICAgICogQHBhcmFtIHNvdXJjZVkgZGVmaW5lcyB0aGUgc2Ny
ZWVuIHNwYWNlIHkgY29vcmRpbmF0ZSB0byB1c2UKKyAgICAgKiBAcGFyYW0gc291cmNlWiBkZWZp
bmVzIHRoZSBzY3JlZW4gc3BhY2UgeiBjb29yZGluYXRlIHRvIHVzZQorICAgICAqIEBwYXJhbSB2
aWV3cG9ydFdpZHRoIGRlZmluZXMgdGhlIGN1cnJlbnQgd2lkdGggb2YgdGhlIHZpZXdwb3J0Cisg
ICAgICogQHBhcmFtIHZpZXdwb3J0SGVpZ2h0IGRlZmluZXMgdGhlIGN1cnJlbnQgaGVpZ2h0IG9m
IHRoZSB2aWV3cG9ydAorICAgICAqIEBwYXJhbSB3b3JsZCBkZWZpbmVzIHRoZSB3b3JsZCBtYXRy
aXggdG8gdXNlIChjYW4gYmUgc2V0IHRvIElkZW50aXR5IHRvIGdvIHRvIHdvcmxkIHNwYWNlKQor
ICAgICAqIEBwYXJhbSB2aWV3IGRlZmluZXMgdGhlIHZpZXcgbWF0cml4IHRvIHVzZQorICAgICAq
IEBwYXJhbSBwcm9qZWN0aW9uIGRlZmluZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IHRvIHVzZQor
ICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgVmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0
aGUgcmVzdWx0CisgICAgICovCisgICAgVmVjdG9yMy5VbnByb2plY3RGbG9hdHNUb1JlZiA9IGZ1
bmN0aW9uIChzb3VyY2VYLCBzb3VyY2VZLCBzb3VyY2VaLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9y
dEhlaWdodCwgd29ybGQsIHZpZXcsIHByb2plY3Rpb24sIHJlc3VsdCkgeworICAgICAgICB2YXIg
bWF0cml4ID0gTWF0aFRtcC5NYXRyaXhbMF07CisgICAgICAgIHdvcmxkLm11bHRpcGx5VG9SZWYo
dmlldywgbWF0cml4KTsKKyAgICAgICAgbWF0cml4Lm11bHRpcGx5VG9SZWYocHJvamVjdGlvbiwg
bWF0cml4KTsKKyAgICAgICAgbWF0cml4LmludmVydCgpOworICAgICAgICB2YXIgc2NyZWVuU291
cmNlID0gTWF0aFRtcC5WZWN0b3IzWzBdOworICAgICAgICBzY3JlZW5Tb3VyY2UueCA9IHNvdXJj
ZVggLyB2aWV3cG9ydFdpZHRoICogMiAtIDE7CisgICAgICAgIHNjcmVlblNvdXJjZS55ID0gLShz
b3VyY2VZIC8gdmlld3BvcnRIZWlnaHQgKiAyIC0gMSk7CisgICAgICAgIHNjcmVlblNvdXJjZS56
ID0gMiAqIHNvdXJjZVogLSAxLjA7CisgICAgICAgIFZlY3RvcjMuX1VucHJvamVjdEZyb21JbnZl
cnRlZE1hdHJpeFRvUmVmKHNjcmVlblNvdXJjZSwgbWF0cml4LCByZXN1bHQpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgbWluaW1hbCBjb29yZGluYXRlIHZhbHVlcyBiZXR3ZWVu
IHR3byBWZWN0b3IzCisgICAgICogQHBhcmFtIGxlZnQgZGVmaW5lcyB0aGUgZmlyc3Qgb3BlcmFu
ZAorICAgICAqIEBwYXJhbSByaWdodCBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAq
IEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuTWluaW1pemUg
PSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHsKKyAgICAgICAgdmFyIG1pbiA9IGxlZnQuY2xvbmUo
KTsKKyAgICAgICAgbWluLm1pbmltaXplSW5QbGFjZShyaWdodCk7CisgICAgICAgIHJldHVybiBt
aW47CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBtYXhpbWFsIGNvb3JkaW5hdGUg
dmFsdWVzIGJldHdlZW4gdHdvIFZlY3RvcjMKKyAgICAgKiBAcGFyYW0gbGVmdCBkZWZpbmVzIHRo
ZSBmaXJzdCBvcGVyYW5kCisgICAgICogQHBhcmFtIHJpZ2h0IGRlZmluZXMgdGhlIHNlY29uZCBv
cGVyYW5kCisgICAgICogQHJldHVybnMgdGhlIG5ldyBWZWN0b3IzCisgICAgICovCisgICAgVmVj
dG9yMy5NYXhpbWl6ZSA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeworICAgICAgICB2YXIgbWF4
ID0gbGVmdC5jbG9uZSgpOworICAgICAgICBtYXgubWF4aW1pemVJblBsYWNlKHJpZ2h0KTsKKyAg
ICAgICAgcmV0dXJuIG1heDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGRp
c3RhbmNlIGJldHdlZW4gdGhlIHZlY3RvcnMgInZhbHVlMSIgYW5kICJ2YWx1ZTIiCisgICAgICog
QHBhcmFtIHZhbHVlMSBkZWZpbmVzIHRoZSBmaXJzdCBvcGVyYW5kCisgICAgICogQHBhcmFtIHZh
bHVlMiBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBkaXN0
YW5jZQorICAgICAqLworICAgIFZlY3RvcjMuRGlzdGFuY2UgPSBmdW5jdGlvbiAodmFsdWUxLCB2
YWx1ZTIpIHsKKyAgICAgICAgcmV0dXJuIE1hdGguc3FydChWZWN0b3IzLkRpc3RhbmNlU3F1YXJl
ZCh2YWx1ZTEsIHZhbHVlMikpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUg
c3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB2ZWN0b3JzICJ2YWx1ZTEiIGFuZCAidmFsdWUy
IgorICAgICAqIEBwYXJhbSB2YWx1ZTEgZGVmaW5lcyB0aGUgZmlyc3Qgb3BlcmFuZAorICAgICAq
IEBwYXJhbSB2YWx1ZTIgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcmV0dXJu
cyB0aGUgc3F1YXJlZCBkaXN0YW5jZQorICAgICAqLworICAgIFZlY3RvcjMuRGlzdGFuY2VTcXVh
cmVkID0gZnVuY3Rpb24gKHZhbHVlMSwgdmFsdWUyKSB7CisgICAgICAgIHZhciB4ID0gdmFsdWUx
LnggLSB2YWx1ZTIueDsKKyAgICAgICAgdmFyIHkgPSB2YWx1ZTEueSAtIHZhbHVlMi55OworICAg
ICAgICB2YXIgeiA9IHZhbHVlMS56IC0gdmFsdWUyLno7CisgICAgICAgIHJldHVybiAoeCAqIHgp
ICsgKHkgKiB5KSArICh6ICogeik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEg
bmV3IFZlY3RvcjMgbG9jYXRlZCBhdCB0aGUgY2VudGVyIGJldHdlZW4gInZhbHVlMSIgYW5kICJ2
YWx1ZTIiCisgICAgICogQHBhcmFtIHZhbHVlMSBkZWZpbmVzIHRoZSBmaXJzdCBvcGVyYW5kCisg
ICAgICogQHBhcmFtIHZhbHVlMiBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEBy
ZXR1cm5zIHRoZSBuZXcgVmVjdG9yMworICAgICAqLworICAgIFZlY3RvcjMuQ2VudGVyID0gZnVu
Y3Rpb24gKHZhbHVlMSwgdmFsdWUyKSB7CisgICAgICAgIHZhciBjZW50ZXIgPSB2YWx1ZTEuYWRk
KHZhbHVlMik7CisgICAgICAgIGNlbnRlci5zY2FsZUluUGxhY2UoMC41KTsKKyAgICAgICAgcmV0
dXJuIGNlbnRlcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdpdmVuIHRocmVlIG9ydGhvZ29u
YWwgbm9ybWFsaXplZCBsZWZ0LWhhbmRlZCBvcmllbnRlZCBWZWN0b3IzIGF4aXMgaW4gc3BhY2Ug
KHRhcmdldCBzeXN0ZW0pLAorICAgICAqIFJvdGF0aW9uRnJvbUF4aXMoKSByZXR1cm5zIHRoZSBy
b3RhdGlvbiBFdWxlciBhbmdsZXMgKGV4IDogcm90YXRpb24ueCwgcm90YXRpb24ueSwgcm90YXRp
b24ueikgdG8gYXBwbHkKKyAgICAgKiB0byBzb21ldGhpbmcgaW4gb3JkZXIgdG8gcm90YXRlIGl0
IGZyb20gaXRzIGxvY2FsIHN5c3RlbSB0byB0aGUgZ2l2ZW4gdGFyZ2V0IHN5c3RlbQorICAgICAq
IE5vdGU6IGF4aXMxLCBheGlzMiBhbmQgYXhpczMgYXJlIG5vcm1hbGl6ZWQgZHVyaW5nIHRoaXMg
b3BlcmF0aW9uCisgICAgICogQHBhcmFtIGF4aXMxIGRlZmluZXMgdGhlIGZpcnN0IGF4aXMKKyAg
ICAgKiBAcGFyYW0gYXhpczIgZGVmaW5lcyB0aGUgc2Vjb25kIGF4aXMKKyAgICAgKiBAcGFyYW0g
YXhpczMgZGVmaW5lcyB0aGUgdGhpcmQgYXhpcworICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3Rv
cjMKKyAgICAgKi8KKyAgICBWZWN0b3IzLlJvdGF0aW9uRnJvbUF4aXMgPSBmdW5jdGlvbiAoYXhp
czEsIGF4aXMyLCBheGlzMykgeworICAgICAgICB2YXIgcm90YXRpb24gPSBWZWN0b3IzLlplcm8o
KTsKKyAgICAgICAgVmVjdG9yMy5Sb3RhdGlvbkZyb21BeGlzVG9SZWYoYXhpczEsIGF4aXMyLCBh
eGlzMywgcm90YXRpb24pOworICAgICAgICByZXR1cm4gcm90YXRpb247CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBUaGUgc2FtZSB0aGFuIFJvdGF0aW9uRnJvbUF4aXMgYnV0IHVwZGF0ZXMgdGhl
IGdpdmVuIHJlZiBWZWN0b3IzIHBhcmFtZXRlciBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBW
ZWN0b3IzCisgICAgICogQHBhcmFtIGF4aXMxIGRlZmluZXMgdGhlIGZpcnN0IGF4aXMKKyAgICAg
KiBAcGFyYW0gYXhpczIgZGVmaW5lcyB0aGUgc2Vjb25kIGF4aXMKKyAgICAgKiBAcGFyYW0gYXhp
czMgZGVmaW5lcyB0aGUgdGhpcmQgYXhpcworICAgICAqIEBwYXJhbSByZWYgZGVmaW5lcyB0aGUg
VmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0CisgICAgICovCisgICAgVmVjdG9yMy5S
b3RhdGlvbkZyb21BeGlzVG9SZWYgPSBmdW5jdGlvbiAoYXhpczEsIGF4aXMyLCBheGlzMywgcmVm
KSB7CisgICAgICAgIHZhciBxdWF0ID0gTWF0aFRtcC5RdWF0ZXJuaW9uWzBdOworICAgICAgICBR
dWF0ZXJuaW9uLlJvdGF0aW9uUXVhdGVybmlvbkZyb21BeGlzVG9SZWYoYXhpczEsIGF4aXMyLCBh
eGlzMywgcXVhdCk7CisgICAgICAgIHF1YXQudG9FdWxlckFuZ2xlc1RvUmVmKHJlZik7CisgICAg
fTsKKyAgICBWZWN0b3IzLl9VcFJlYWRPbmx5ID0gVmVjdG9yMy5VcCgpOworICAgIFZlY3RvcjMu
X1plcm9SZWFkT25seSA9IFZlY3RvcjMuWmVybygpOworICAgIHJldHVybiBWZWN0b3IzOworfSgp
KTsKKworLyoqCisgKiBWZWN0b3I0IGNsYXNzIGNyZWF0ZWQgZm9yIEV1bGVyQW5nbGUgY2xhc3Mg
Y29udmVyc2lvbiB0byBRdWF0ZXJuaW9uCisgKi8KK3ZhciBWZWN0b3I0ID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBWZWN0b3I0IG9iamVj
dCBmcm9tIHRoZSBnaXZlbiBmbG9hdHMuCisgICAgICogQHBhcmFtIHggeCB2YWx1ZSBvZiB0aGUg
dmVjdG9yCisgICAgICogQHBhcmFtIHkgeSB2YWx1ZSBvZiB0aGUgdmVjdG9yCisgICAgICogQHBh
cmFtIHogeiB2YWx1ZSBvZiB0aGUgdmVjdG9yCisgICAgICogQHBhcmFtIHcgdyB2YWx1ZSBvZiB0
aGUgdmVjdG9yCisgICAgICovCisgICAgZnVuY3Rpb24gVmVjdG9yNCgKKyAgICAvKiogeCB2YWx1
ZSBvZiB0aGUgdmVjdG9yICovCisgICAgeCwgCisgICAgLyoqIHkgdmFsdWUgb2YgdGhlIHZlY3Rv
ciAqLworICAgIHksIAorICAgIC8qKiB6IHZhbHVlIG9mIHRoZSB2ZWN0b3IgKi8KKyAgICB6LCAK
KyAgICAvKiogdyB2YWx1ZSBvZiB0aGUgdmVjdG9yICovCisgICAgdykgeworICAgICAgICB0aGlz
LnggPSB4OworICAgICAgICB0aGlzLnkgPSB5OworICAgICAgICB0aGlzLnogPSB6OworICAgICAg
ICB0aGlzLncgPSB3OworICAgIH0KKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcg
d2l0aCB0aGUgVmVjdG9yNCBjb29yZGluYXRlcy4KKyAgICAgKiBAcmV0dXJucyBhIHN0cmluZyBj
b250YWluaW5nIGFsbCB0aGUgdmVjdG9yIHZhbHVlcworICAgICAqLworICAgIFZlY3RvcjQucHJv
dG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIntYOiAiICsg
dGhpcy54ICsgIiBZOiIgKyB0aGlzLnkgKyAiIFo6IiArIHRoaXMueiArICIgVzoiICsgdGhpcy53
ICsgIn0iOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3RyaW5nICJWZWN0
b3I0Ii4KKyAgICAgKiBAcmV0dXJucyAiVmVjdG9yNCIKKyAgICAgKi8KKyAgICBWZWN0b3I0LnBy
b3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiVmVj
dG9yNCI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBWZWN0b3I0IGhhc2gg
Y29kZS4KKyAgICAgKiBAcmV0dXJucyBhIHVuaXF1ZSBoYXNoIGNvZGUKKyAgICAgKi8KKyAgICBW
ZWN0b3I0LnByb3RvdHlwZS5nZXRIYXNoQ29kZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IGhhc2ggPSB0aGlzLnggfCAwOworICAgICAgICBoYXNoID0gKGhhc2ggKiAzOTcpIF4gKHRoaXMu
eSB8IDApOworICAgICAgICBoYXNoID0gKGhhc2ggKiAzOTcpIF4gKHRoaXMueiB8IDApOworICAg
ICAgICBoYXNoID0gKGhhc2ggKiAzOTcpIF4gKHRoaXMudyB8IDApOworICAgICAgICByZXR1cm4g
aGFzaDsKKyAgICB9OworICAgIC8vIE9wZXJhdG9ycworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBuZXcgYXJyYXkgcG9wdWxhdGVkIHdpdGggNCBlbGVtZW50cyA6IHRoZSBWZWN0b3I0IGNvb3Jk
aW5hdGVzLgorICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgYXJyYXkKKyAgICAgKi8KKyAg
ICBWZWN0b3I0LnByb3RvdHlwZS5hc0FycmF5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIg
cmVzdWx0ID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMudG9BcnJheShyZXN1bHQsIDApOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogUG9wdWxhdGVz
IHRoZSBnaXZlbiBhcnJheSBmcm9tIHRoZSBnaXZlbiBpbmRleCB3aXRoIHRoZSBWZWN0b3I0IGNv
b3JkaW5hdGVzLgorICAgICAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBwb3B1bGF0ZQorICAgICAq
IEBwYXJhbSBpbmRleCBpbmRleCBvZiB0aGUgYXJyYXkgdG8gc3RhcnQgYXQgKGRlZmF1bHQ6IDAp
CisgICAgICogQHJldHVybnMgdGhlIFZlY3RvcjQuCisgICAgICovCisgICAgVmVjdG9yNC5wcm90
b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIChhcnJheSwgaW5kZXgpIHsKKyAgICAgICAgaWYgKGlu
ZGV4ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgfQor
ICAgICAgICBhcnJheVtpbmRleF0gPSB0aGlzLng7CisgICAgICAgIGFycmF5W2luZGV4ICsgMV0g
PSB0aGlzLnk7CisgICAgICAgIGFycmF5W2luZGV4ICsgMl0gPSB0aGlzLno7CisgICAgICAgIGFy
cmF5W2luZGV4ICsgM10gPSB0aGlzLnc7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQWRkcyB0aGUgZ2l2ZW4gdmVjdG9yIHRvIHRoZSBjdXJyZW50IFZlY3Rv
cjQuCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIHRoZSB2ZWN0b3IgdG8gYWRkCisgICAgICog
QHJldHVybnMgdGhlIHVwZGF0ZWQgVmVjdG9yNC4KKyAgICAgKi8KKyAgICBWZWN0b3I0LnByb3Rv
dHlwZS5hZGRJblBsYWNlID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yKSB7CisgICAgICAgIHRoaXMu
eCArPSBvdGhlclZlY3Rvci54OworICAgICAgICB0aGlzLnkgKz0gb3RoZXJWZWN0b3IueTsKKyAg
ICAgICAgdGhpcy56ICs9IG90aGVyVmVjdG9yLno7CisgICAgICAgIHRoaXMudyArPSBvdGhlclZl
Y3Rvci53OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
dHVybnMgYSBuZXcgVmVjdG9yNCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBhZGRpdGlvbiBvZiB0aGUg
Y3VycmVudCBWZWN0b3I0IGFuZCB0aGUgZ2l2ZW4gb25lLgorICAgICAqIEBwYXJhbSBvdGhlclZl
Y3RvciB0aGUgdmVjdG9yIHRvIGFkZAorICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVj
dG9yCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG90aGVy
VmVjdG9yKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCh0aGlzLnggKyBvdGhlclZlY3Rv
ci54LCB0aGlzLnkgKyBvdGhlclZlY3Rvci55LCB0aGlzLnogKyBvdGhlclZlY3Rvci56LCB0aGlz
LncgKyBvdGhlclZlY3Rvci53KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhl
IGdpdmVuIHZlY3RvciAicmVzdWx0IiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGFkZGl0aW9uIG9m
IHRoZSBjdXJyZW50IFZlY3RvcjQgYW5kIHRoZSBnaXZlbiBvbmUuCisgICAgICogQHBhcmFtIG90
aGVyVmVjdG9yIHRoZSB2ZWN0b3IgdG8gYWRkCisgICAgICogQHBhcmFtIHJlc3VsdCB0aGUgdmVj
dG9yIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0
b3I0LgorICAgICAqLworICAgIFZlY3RvcjQucHJvdG90eXBlLmFkZFRvUmVmID0gZnVuY3Rpb24g
KG90aGVyVmVjdG9yLCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnggPSB0aGlzLnggKyBvdGhl
clZlY3Rvci54OworICAgICAgICByZXN1bHQueSA9IHRoaXMueSArIG90aGVyVmVjdG9yLnk7Cisg
ICAgICAgIHJlc3VsdC56ID0gdGhpcy56ICsgb3RoZXJWZWN0b3IuejsKKyAgICAgICAgcmVzdWx0
LncgPSB0aGlzLncgKyBvdGhlclZlY3Rvci53OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFN1YnRyYWN0IGluIHBsYWNlIHRoZSBnaXZlbiB2ZWN0b3IgZnJv
bSB0aGUgY3VycmVudCBWZWN0b3I0LgorICAgICAqIEBwYXJhbSBvdGhlclZlY3RvciB0aGUgdmVj
dG9yIHRvIHN1YnRyYWN0CisgICAgICogQHJldHVybnMgdGhlIHVwZGF0ZWQgVmVjdG9yNC4KKyAg
ICAgKi8KKyAgICBWZWN0b3I0LnByb3RvdHlwZS5zdWJ0cmFjdEluUGxhY2UgPSBmdW5jdGlvbiAo
b3RoZXJWZWN0b3IpIHsKKyAgICAgICAgdGhpcy54IC09IG90aGVyVmVjdG9yLng7CisgICAgICAg
IHRoaXMueSAtPSBvdGhlclZlY3Rvci55OworICAgICAgICB0aGlzLnogLT0gb3RoZXJWZWN0b3Iu
ejsKKyAgICAgICAgdGhpcy53IC09IG90aGVyVmVjdG9yLnc7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3I0IHdpdGggdGhl
IHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb24gb2YgdGhlIGdpdmVuIHZlY3RvciBmcm9tIHRoZSBj
dXJyZW50IFZlY3RvcjQuCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIHRoZSB2ZWN0b3IgdG8g
YWRkCisgICAgICogQHJldHVybnMgdGhlIG5ldyB2ZWN0b3Igd2l0aCB0aGUgcmVzdWx0CisgICAg
ICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiAob3RoZXJWZWN0
b3IpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3I0KHRoaXMueCAtIG90aGVyVmVjdG9yLngs
IHRoaXMueSAtIG90aGVyVmVjdG9yLnksIHRoaXMueiAtIG90aGVyVmVjdG9yLnosIHRoaXMudyAt
IG90aGVyVmVjdG9yLncpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2ZW4g
dmVjdG9yICJyZXN1bHQiIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb24gb2YgdGhl
IGdpdmVuIHZlY3RvciBmcm9tIHRoZSBjdXJyZW50IFZlY3RvcjQuCisgICAgICogQHBhcmFtIG90
aGVyVmVjdG9yIHRoZSB2ZWN0b3IgdG8gc3VidHJhY3QKKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRo
ZSB2ZWN0b3IgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50
IFZlY3RvcjQuCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuc3VidHJhY3RUb1JlZiA9
IGZ1bmN0aW9uIChvdGhlclZlY3RvciwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0gdGhp
cy54IC0gb3RoZXJWZWN0b3IueDsKKyAgICAgICAgcmVzdWx0LnkgPSB0aGlzLnkgLSBvdGhlclZl
Y3Rvci55OworICAgICAgICByZXN1bHQueiA9IHRoaXMueiAtIG90aGVyVmVjdG9yLno7CisgICAg
ICAgIHJlc3VsdC53ID0gdGhpcy53IC0gb3RoZXJWZWN0b3IudzsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjQgc2V0IHdp
dGggdGhlIHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb24gb2YgdGhlIGdpdmVuIGZsb2F0cyBmcm9t
IHRoZSBjdXJyZW50IFZlY3RvcjQgY29vcmRpbmF0ZXMuCisgICAgICovCisgICAgLyoqCisgICAg
ICogUmV0dXJucyBhIG5ldyBWZWN0b3I0IHNldCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIHN1YnRy
YWN0aW9uIG9mIHRoZSBnaXZlbiBmbG9hdHMgZnJvbSB0aGUgY3VycmVudCBWZWN0b3I0IGNvb3Jk
aW5hdGVzLgorICAgICAqIEBwYXJhbSB4IHZhbHVlIHRvIHN1YnRyYWN0CisgICAgICogQHBhcmFt
IHkgdmFsdWUgdG8gc3VidHJhY3QKKyAgICAgKiBAcGFyYW0geiB2YWx1ZSB0byBzdWJ0cmFjdAor
ICAgICAqIEBwYXJhbSB3IHZhbHVlIHRvIHN1YnRyYWN0CisgICAgICogQHJldHVybnMgbmV3IHZl
Y3RvciBjb250YWluaW5nIHRoZSByZXN1bHQKKyAgICAgKi8KKyAgICBWZWN0b3I0LnByb3RvdHlw
ZS5zdWJ0cmFjdEZyb21GbG9hdHMgPSBmdW5jdGlvbiAoeCwgeSwgeiwgdykgeworICAgICAgICBy
ZXR1cm4gbmV3IFZlY3RvcjQodGhpcy54IC0geCwgdGhpcy55IC0geSwgdGhpcy56IC0geiwgdGhp
cy53IC0gdyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3Ig
InJlc3VsdCIgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb24gb2YgdGhlIGdp
dmVuIGZsb2F0cyBmcm9tIHRoZSBjdXJyZW50IFZlY3RvcjQgY29vcmRpbmF0ZXMuCisgICAgICog
QHBhcmFtIHggdmFsdWUgdG8gc3VidHJhY3QKKyAgICAgKiBAcGFyYW0geSB2YWx1ZSB0byBzdWJ0
cmFjdAorICAgICAqIEBwYXJhbSB6IHZhbHVlIHRvIHN1YnRyYWN0CisgICAgICogQHBhcmFtIHcg
dmFsdWUgdG8gc3VidHJhY3QKKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSB2ZWN0b3IgdG8gc3Rv
cmUgdGhlIHJlc3VsdCBpbgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IFZlY3RvcjQuCisg
ICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuc3VidHJhY3RGcm9tRmxvYXRzVG9SZWYgPSBm
dW5jdGlvbiAoeCwgeSwgeiwgdywgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0gdGhpcy54
IC0geDsKKyAgICAgICAgcmVzdWx0LnkgPSB0aGlzLnkgLSB5OworICAgICAgICByZXN1bHQueiA9
IHRoaXMueiAtIHo7CisgICAgICAgIHJlc3VsdC53ID0gdGhpcy53IC0gdzsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjQg
c2V0IHdpdGggdGhlIGN1cnJlbnQgVmVjdG9yNCBuZWdhdGVkIGNvb3JkaW5hdGVzLgorICAgICAq
IEByZXR1cm5zIGEgbmV3IHZlY3RvciB3aXRoIHRoZSBuZWdhdGVkIHZhbHVlcworICAgICAqLwor
ICAgIFZlY3RvcjQucHJvdG90eXBlLm5lZ2F0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBWZWN0b3I0KC10aGlzLngsIC10aGlzLnksIC10aGlzLnosIC10aGlzLncpOworICAg
IH07CisgICAgLyoqCisgICAgICogTXVsdGlwbGllcyB0aGUgY3VycmVudCBWZWN0b3I0IGNvb3Jk
aW5hdGVzIGJ5IHNjYWxlIChmbG9hdCkuCisgICAgICogQHBhcmFtIHNjYWxlIHRoZSBudW1iZXIg
dG8gc2NhbGUgd2l0aAorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIFZlY3RvcjQuCisgICAg
ICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuc2NhbGVJblBsYWNlID0gZnVuY3Rpb24gKHNjYWxl
KSB7CisgICAgICAgIHRoaXMueCAqPSBzY2FsZTsKKyAgICAgICAgdGhpcy55ICo9IHNjYWxlOwor
ICAgICAgICB0aGlzLnogKj0gc2NhbGU7CisgICAgICAgIHRoaXMudyAqPSBzY2FsZTsKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZl
Y3RvcjQgc2V0IHdpdGggdGhlIGN1cnJlbnQgVmVjdG9yNCBjb29yZGluYXRlcyBtdWx0aXBsaWVk
IGJ5IHNjYWxlIChmbG9hdCkuCisgICAgICogQHBhcmFtIHNjYWxlIHRoZSBudW1iZXIgdG8gc2Nh
bGUgd2l0aAorICAgICAqIEByZXR1cm5zIGEgbmV3IHZlY3RvciB3aXRoIHRoZSByZXN1bHQKKyAg
ICAgKi8KKyAgICBWZWN0b3I0LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSkgewor
ICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjQodGhpcy54ICogc2NhbGUsIHRoaXMueSAqIHNjYWxl
LCB0aGlzLnogKiBzY2FsZSwgdGhpcy53ICogc2NhbGUpOworICAgIH07CisgICAgLyoqCisgICAg
ICogU2V0cyB0aGUgZ2l2ZW4gdmVjdG9yICJyZXN1bHQiIHdpdGggdGhlIGN1cnJlbnQgVmVjdG9y
NCBjb29yZGluYXRlcyBtdWx0aXBsaWVkIGJ5IHNjYWxlIChmbG9hdCkuCisgICAgICogQHBhcmFt
IHNjYWxlIHRoZSBudW1iZXIgdG8gc2NhbGUgd2l0aAorICAgICAqIEBwYXJhbSByZXN1bHQgYSB2
ZWN0b3IgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50
IFZlY3RvcjQuCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuc2NhbGVUb1JlZiA9IGZ1
bmN0aW9uIChzY2FsZSwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0gdGhpcy54ICogc2Nh
bGU7CisgICAgICAgIHJlc3VsdC55ID0gdGhpcy55ICogc2NhbGU7CisgICAgICAgIHJlc3VsdC56
ID0gdGhpcy56ICogc2NhbGU7CisgICAgICAgIHJlc3VsdC53ID0gdGhpcy53ICogc2NhbGU7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2NhbGUgdGhlIGN1
cnJlbnQgVmVjdG9yNCB2YWx1ZXMgYnkgYSBmYWN0b3IgYW5kIGFkZCB0aGUgcmVzdWx0IHRvIGEg
Z2l2ZW4gVmVjdG9yNAorICAgICAqIEBwYXJhbSBzY2FsZSBkZWZpbmVzIHRoZSBzY2FsZSBmYWN0
b3IKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjQgb2JqZWN0IHdoZXJl
IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0aGUgdW5tb2RpZmllZCBjdXJy
ZW50IFZlY3RvcjQKKyAgICAgKi8KKyAgICBWZWN0b3I0LnByb3RvdHlwZS5zY2FsZUFuZEFkZFRv
UmVmID0gZnVuY3Rpb24gKHNjYWxlLCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnggKz0gdGhp
cy54ICogc2NhbGU7CisgICAgICAgIHJlc3VsdC55ICs9IHRoaXMueSAqIHNjYWxlOworICAgICAg
ICByZXN1bHQueiArPSB0aGlzLnogKiBzY2FsZTsKKyAgICAgICAgcmVzdWx0LncgKz0gdGhpcy53
ICogc2NhbGU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICog
Qm9vbGVhbiA6IFRydWUgaWYgdGhlIGN1cnJlbnQgVmVjdG9yNCBjb29yZGluYXRlcyBhcmUgc3Ry
aWNseSBlcXVhbCB0byB0aGUgZ2l2ZW4gb25lcy4KKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3Ig
dGhlIHZlY3RvciB0byBjb21wYXJlIGFnYWluc3QKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRo
ZXkgYXJlIGVxdWFsCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuZXF1YWxzID0gZnVu
Y3Rpb24gKG90aGVyVmVjdG9yKSB7CisgICAgICAgIHJldHVybiBvdGhlclZlY3RvciAmJiB0aGlz
LnggPT09IG90aGVyVmVjdG9yLnggJiYgdGhpcy55ID09PSBvdGhlclZlY3Rvci55ICYmIHRoaXMu
eiA9PT0gb3RoZXJWZWN0b3IueiAmJiB0aGlzLncgPT09IG90aGVyVmVjdG9yLnc7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBCb29sZWFuIDogVHJ1ZSBpZiB0aGUgY3VycmVudCBWZWN0b3I0IGNv
b3JkaW5hdGVzIGFyZSBlYWNoIGJlbmVhdGggdGhlIGRpc3RhbmNlICJlcHNpbG9uIiBmcm9tIHRo
ZSBnaXZlbiB2ZWN0b3Igb25lcy4KKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgdmVjdG9yIHRv
IGNvbXBhcmUgYWdhaW5zdAorICAgICAqIEBwYXJhbSBlcHNpbG9uIChEZWZhdWx0OiB2ZXJ5IHNt
YWxsIG51bWJlcikKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZXkgYXJlIGVxdWFsCisgICAg
ICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUuZXF1YWxzV2l0aEVwc2lsb24gPSBmdW5jdGlvbiAo
b3RoZXJWZWN0b3IsIGVwc2lsb24pIHsKKyAgICAgICAgaWYgKGVwc2lsb24gPT09IHZvaWQgMCkg
eyBlcHNpbG9uID0gX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkVwc2lsb24iXTsgfQorICAgICAgICByZXR1cm4gb3RoZXJWZWN0b3IKKyAgICAgICAgICAgICYm
IF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRo
aW5FcHNpbG9uKHRoaXMueCwgb3RoZXJWZWN0b3IueCwgZXBzaWxvbikKKyAgICAgICAgICAgICYm
IF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRo
aW5FcHNpbG9uKHRoaXMueSwgb3RoZXJWZWN0b3IueSwgZXBzaWxvbikKKyAgICAgICAgICAgICYm
IF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRo
aW5FcHNpbG9uKHRoaXMueiwgb3RoZXJWZWN0b3IueiwgZXBzaWxvbikKKyAgICAgICAgICAgICYm
IF9tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5XaXRo
aW5FcHNpbG9uKHRoaXMudywgb3RoZXJWZWN0b3IudywgZXBzaWxvbik7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBCb29sZWFuIDogVHJ1ZSBpZiB0aGUgZ2l2ZW4gZmxvYXRzIGFyZSBzdHJpY3Rs
eSBlcXVhbCB0byB0aGUgY3VycmVudCBWZWN0b3I0IGNvb3JkaW5hdGVzLgorICAgICAqIEBwYXJh
bSB4IHggdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0CisgICAgICogQHBhcmFtIHkgeSB2YWx1ZSB0
byBjb21wYXJlIGFnYWluc3QKKyAgICAgKiBAcGFyYW0geiB6IHZhbHVlIHRvIGNvbXBhcmUgYWdh
aW5zdAorICAgICAqIEBwYXJhbSB3IHcgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0CisgICAgICog
QHJldHVybnMgdHJ1ZSBpZiBlcXVhbAorICAgICAqLworICAgIFZlY3RvcjQucHJvdG90eXBlLmVx
dWFsc1RvRmxvYXRzID0gZnVuY3Rpb24gKHgsIHksIHosIHcpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMueCA9PT0geCAmJiB0aGlzLnkgPT09IHkgJiYgdGhpcy56ID09PSB6ICYmIHRoaXMudyA9PT0g
dzsKKyAgICB9OworICAgIC8qKgorICAgICAqIE11bHRpcGxpZXMgaW4gcGxhY2UgdGhlIGN1cnJl
bnQgVmVjdG9yNCBieSB0aGUgZ2l2ZW4gb25lLgorICAgICAqIEBwYXJhbSBvdGhlclZlY3RvciB2
ZWN0b3IgdG8gbXVsdGlwbGUgd2l0aAorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIFZlY3Rv
cjQuCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUubXVsdGlwbHlJblBsYWNlID0gZnVu
Y3Rpb24gKG90aGVyVmVjdG9yKSB7CisgICAgICAgIHRoaXMueCAqPSBvdGhlclZlY3Rvci54Owor
ICAgICAgICB0aGlzLnkgKj0gb3RoZXJWZWN0b3IueTsKKyAgICAgICAgdGhpcy56ICo9IG90aGVy
VmVjdG9yLno7CisgICAgICAgIHRoaXMudyAqPSBvdGhlclZlY3Rvci53OworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yNCBz
ZXQgd2l0aCB0aGUgbXVsdGlwbGljYXRpb24gcmVzdWx0IG9mIHRoZSBjdXJyZW50IFZlY3RvcjQg
YW5kIHRoZSBnaXZlbiBvbmUuCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9yIHZlY3RvciB0byBt
dWx0aXBsZSB3aXRoCisgICAgICogQHJldHVybnMgcmVzdWx0aW5nIG5ldyB2ZWN0b3IKKyAgICAg
Ki8KKyAgICBWZWN0b3I0LnByb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdGhlclZlY3Rv
cikgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjQodGhpcy54ICogb3RoZXJWZWN0b3IueCwg
dGhpcy55ICogb3RoZXJWZWN0b3IueSwgdGhpcy56ICogb3RoZXJWZWN0b3IueiwgdGhpcy53ICog
b3RoZXJWZWN0b3Iudyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBnaXZl
biB2ZWN0b3IgInJlc3VsdCIgd2l0aCB0aGUgbXVsdGlwbGljYXRpb24gcmVzdWx0IG9mIHRoZSBj
dXJyZW50IFZlY3RvcjQgYW5kIHRoZSBnaXZlbiBvbmUuCisgICAgICogQHBhcmFtIG90aGVyVmVj
dG9yIHZlY3RvciB0byBtdWx0aXBsZSB3aXRoCisgICAgICogQHBhcmFtIHJlc3VsdCB2ZWN0b3Ig
dG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IFZlY3RvcjQu
CisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUubXVsdGlwbHlUb1JlZiA9IGZ1bmN0aW9u
IChvdGhlclZlY3RvciwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0gdGhpcy54ICogb3Ro
ZXJWZWN0b3IueDsKKyAgICAgICAgcmVzdWx0LnkgPSB0aGlzLnkgKiBvdGhlclZlY3Rvci55Owor
ICAgICAgICByZXN1bHQueiA9IHRoaXMueiAqIG90aGVyVmVjdG9yLno7CisgICAgICAgIHJlc3Vs
dC53ID0gdGhpcy53ICogb3RoZXJWZWN0b3IudzsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjQgc2V0IHdpdGggdGhlIG11
bHRpcGxpY2F0aW9uIHJlc3VsdCBvZiB0aGUgZ2l2ZW4gZmxvYXRzIGFuZCB0aGUgY3VycmVudCBW
ZWN0b3I0IGNvb3JkaW5hdGVzLgorICAgICAqIEBwYXJhbSB4IHggdmFsdWUgbXVsdGlwbHkgd2l0
aAorICAgICAqIEBwYXJhbSB5IHkgdmFsdWUgbXVsdGlwbHkgd2l0aAorICAgICAqIEBwYXJhbSB6
IHogdmFsdWUgbXVsdGlwbHkgd2l0aAorICAgICAqIEBwYXJhbSB3IHcgdmFsdWUgbXVsdGlwbHkg
d2l0aAorICAgICAqIEByZXR1cm5zIHJlc3VsdGluZyBuZXcgdmVjdG9yCisgICAgICovCisgICAg
VmVjdG9yNC5wcm90b3R5cGUubXVsdGlwbHlCeUZsb2F0cyA9IGZ1bmN0aW9uICh4LCB5LCB6LCB3
KSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCh0aGlzLnggKiB4LCB0aGlzLnkgKiB5LCB0
aGlzLnogKiB6LCB0aGlzLncgKiB3KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBuZXcgVmVjdG9yNCBzZXQgd2l0aCB0aGUgZGl2aXNpb24gcmVzdWx0IG9mIHRoZSBjdXJyZW50
IFZlY3RvcjQgYnkgdGhlIGdpdmVuIG9uZS4KKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgdmVj
dG9yIHRvIGRldmlkZSB3aXRoCisgICAgICogQHJldHVybnMgcmVzdWx0aW5nIG5ldyB2ZWN0b3IK
KyAgICAgKi8KKyAgICBWZWN0b3I0LnByb3RvdHlwZS5kaXZpZGUgPSBmdW5jdGlvbiAob3RoZXJW
ZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3I0KHRoaXMueCAvIG90aGVyVmVjdG9y
LngsIHRoaXMueSAvIG90aGVyVmVjdG9yLnksIHRoaXMueiAvIG90aGVyVmVjdG9yLnosIHRoaXMu
dyAvIG90aGVyVmVjdG9yLncpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUg
Z2l2ZW4gdmVjdG9yICJyZXN1bHQiIHdpdGggdGhlIGRpdmlzaW9uIHJlc3VsdCBvZiB0aGUgY3Vy
cmVudCBWZWN0b3I0IGJ5IHRoZSBnaXZlbiBvbmUuCisgICAgICogQHBhcmFtIG90aGVyVmVjdG9y
IHZlY3RvciB0byBkZXZpZGUgd2l0aAorICAgICAqIEBwYXJhbSByZXN1bHQgdmVjdG9yIHRvIHN0
b3JlIHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0b3I0LgorICAg
ICAqLworICAgIFZlY3RvcjQucHJvdG90eXBlLmRpdmlkZVRvUmVmID0gZnVuY3Rpb24gKG90aGVy
VmVjdG9yLCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnggPSB0aGlzLnggLyBvdGhlclZlY3Rv
ci54OworICAgICAgICByZXN1bHQueSA9IHRoaXMueSAvIG90aGVyVmVjdG9yLnk7CisgICAgICAg
IHJlc3VsdC56ID0gdGhpcy56IC8gb3RoZXJWZWN0b3IuejsKKyAgICAgICAgcmVzdWx0LncgPSB0
aGlzLncgLyBvdGhlclZlY3Rvci53OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAg
IC8qKgorICAgICAqIERpdmlkZXMgdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBieSB0
aGUgZ2l2ZW4gb25lcy4KKyAgICAgKiBAcGFyYW0gb3RoZXJWZWN0b3IgdmVjdG9yIHRvIGRldmlk
ZSB3aXRoCisgICAgICogQHJldHVybnMgdGhlIHVwZGF0ZWQgVmVjdG9yMy4KKyAgICAgKi8KKyAg
ICBWZWN0b3I0LnByb3RvdHlwZS5kaXZpZGVJblBsYWNlID0gZnVuY3Rpb24gKG90aGVyVmVjdG9y
KSB7CisgICAgICAgIHJldHVybiB0aGlzLmRpdmlkZVRvUmVmKG90aGVyVmVjdG9yLCB0aGlzKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIFZlY3RvcjQgY29vcmRpbmF0ZXMg
d2l0aCB0aGUgbWluaW11bSB2YWx1ZXMgYmV0d2VlbiBpdHMgb3duIGFuZCB0aGUgZ2l2ZW4gdmVj
dG9yIG9uZXMKKyAgICAgKiBAcGFyYW0gb3RoZXIgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQK
KyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjQKKyAgICAgKi8KKyAg
ICBWZWN0b3I0LnByb3RvdHlwZS5taW5pbWl6ZUluUGxhY2UgPSBmdW5jdGlvbiAob3RoZXIpIHsK
KyAgICAgICAgaWYgKG90aGVyLnggPCB0aGlzLngpIHsKKyAgICAgICAgICAgIHRoaXMueCA9IG90
aGVyLng7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG90aGVyLnkgPCB0aGlzLnkpIHsKKyAgICAg
ICAgICAgIHRoaXMueSA9IG90aGVyLnk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG90aGVyLnog
PCB0aGlzLnopIHsKKyAgICAgICAgICAgIHRoaXMueiA9IG90aGVyLno7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG90aGVyLncgPCB0aGlzLncpIHsKKyAgICAgICAgICAgIHRoaXMudyA9IG90aGVy
Lnc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBVcGRhdGVzIHRoZSBWZWN0b3I0IGNvb3JkaW5hdGVzIHdpdGggdGhlIG1heGltdW0gdmFs
dWVzIGJldHdlZW4gaXRzIG93biBhbmQgdGhlIGdpdmVuIHZlY3RvciBvbmVzCisgICAgICogQHBh
cmFtIG90aGVyIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHJldHVybnMgdGhl
IGN1cnJlbnQgdXBkYXRlZCBWZWN0b3I0CisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUu
bWF4aW1pemVJblBsYWNlID0gZnVuY3Rpb24gKG90aGVyKSB7CisgICAgICAgIGlmIChvdGhlci54
ID4gdGhpcy54KSB7CisgICAgICAgICAgICB0aGlzLnggPSBvdGhlci54OworICAgICAgICB9Cisg
ICAgICAgIGlmIChvdGhlci55ID4gdGhpcy55KSB7CisgICAgICAgICAgICB0aGlzLnkgPSBvdGhl
ci55OworICAgICAgICB9CisgICAgICAgIGlmIChvdGhlci56ID4gdGhpcy56KSB7CisgICAgICAg
ICAgICB0aGlzLnogPSBvdGhlci56OworICAgICAgICB9CisgICAgICAgIGlmIChvdGhlci53ID4g
dGhpcy53KSB7CisgICAgICAgICAgICB0aGlzLncgPSBvdGhlci53OworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIG5ldyBWZWN0
b3I0IGZyb20gY3VycmVudCBWZWN0b3I0IGZsb29yZWQgdmFsdWVzCisgICAgICogQHJldHVybnMg
YSBuZXcgVmVjdG9yNAorICAgICAqLworICAgIFZlY3RvcjQucHJvdG90eXBlLmZsb29yID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjQoTWF0aC5mbG9vcih0aGlzLngp
LCBNYXRoLmZsb29yKHRoaXMueSksIE1hdGguZmxvb3IodGhpcy56KSwgTWF0aC5mbG9vcih0aGlz
LncpKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBuZXcgVmVjdG9yNCBmcm9tIGN1
cnJlbnQgVmVjdG9yMyBmbG9vcmVkIHZhbHVlcworICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3Rv
cjQKKyAgICAgKi8KKyAgICBWZWN0b3I0LnByb3RvdHlwZS5mcmFjdCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3I0KHRoaXMueCAtIE1hdGguZmxvb3IodGhpcy54KSwg
dGhpcy55IC0gTWF0aC5mbG9vcih0aGlzLnkpLCB0aGlzLnogLSBNYXRoLmZsb29yKHRoaXMueiks
IHRoaXMudyAtIE1hdGguZmxvb3IodGhpcy53KSk7CisgICAgfTsKKyAgICAvLyBQcm9wZXJ0aWVz
CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgVmVjdG9yNCBsZW5ndGggKGZsb2F0KS4KKyAg
ICAgKiBAcmV0dXJucyB0aGUgbGVuZ3RoCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUu
bGVuZ3RoID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAq
IHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueiArIHRoaXMudyAqIHRo
aXMudyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBWZWN0b3I0IHNxdWFy
ZWQgbGVuZ3RoIChmbG9hdCkuCisgICAgICogQHJldHVybnMgdGhlIGxlbmd0aCBzcXVhcmVkCisg
ICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5cGUubGVuZ3RoU3F1YXJlZCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICh0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0
aGlzLnogKiB0aGlzLnogKyB0aGlzLncgKiB0aGlzLncpOworICAgIH07CisgICAgLy8gTWV0aG9k
cworICAgIC8qKgorICAgICAqIE5vcm1hbGl6ZXMgaW4gcGxhY2UgdGhlIFZlY3RvcjQuCisgICAg
ICogQHJldHVybnMgdGhlIHVwZGF0ZWQgVmVjdG9yNC4KKyAgICAgKi8KKyAgICBWZWN0b3I0LnBy
b3RvdHlwZS5ub3JtYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBsZW4gPSB0aGlz
Lmxlbmd0aCgpOworICAgICAgICBpZiAobGVuID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5zY2FsZUluUGxhY2UoMS4wIC8g
bGVuKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBmcm9t
IHRoZSBWZWN0b3I0ICh4LCB5LCB6KSBjb29yZGluYXRlcy4KKyAgICAgKiBAcmV0dXJucyB0aGlz
IGNvbnZlcnRlZCB0byBhIG5ldyB2ZWN0b3IzCisgICAgICovCisgICAgVmVjdG9yNC5wcm90b3R5
cGUudG9WZWN0b3IzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMo
dGhpcy54LCB0aGlzLnksIHRoaXMueik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IGEgbmV3IFZlY3RvcjQgY29waWVkIGZyb20gdGhlIGN1cnJlbnQgb25lLgorICAgICAqIEByZXR1
cm5zIHRoZSBuZXcgY2xvbmVkIHZlY3RvcgorICAgICAqLworICAgIFZlY3RvcjQucHJvdG90eXBl
LmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjQodGhpcy54
LCB0aGlzLnksIHRoaXMueiwgdGhpcy53KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0
ZXMgdGhlIGN1cnJlbnQgVmVjdG9yNCB3aXRoIHRoZSBnaXZlbiBvbmUgY29vcmRpbmF0ZXMuCisg
ICAgICogQHBhcmFtIHNvdXJjZSB0aGUgc291cmNlIHZlY3RvciB0byBjb3B5IGZyb20KKyAgICAg
KiBAcmV0dXJucyB0aGUgdXBkYXRlZCBWZWN0b3I0LgorICAgICAqLworICAgIFZlY3RvcjQucHJv
dG90eXBlLmNvcHlGcm9tID0gZnVuY3Rpb24gKHNvdXJjZSkgeworICAgICAgICB0aGlzLnggPSBz
b3VyY2UueDsKKyAgICAgICAgdGhpcy55ID0gc291cmNlLnk7CisgICAgICAgIHRoaXMueiA9IHNv
dXJjZS56OworICAgICAgICB0aGlzLncgPSBzb3VyY2UudzsKKyAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50IFZlY3RvcjQgY29v
cmRpbmF0ZXMgd2l0aCB0aGUgZ2l2ZW4gZmxvYXRzLgorICAgICAqIEBwYXJhbSB4IGZsb2F0IHRv
IGNvcHkgZnJvbQorICAgICAqIEBwYXJhbSB5IGZsb2F0IHRvIGNvcHkgZnJvbQorICAgICAqIEBw
YXJhbSB6IGZsb2F0IHRvIGNvcHkgZnJvbQorICAgICAqIEBwYXJhbSB3IGZsb2F0IHRvIGNvcHkg
ZnJvbQorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIFZlY3RvcjQuCisgICAgICovCisgICAg
VmVjdG9yNC5wcm90b3R5cGUuY29weUZyb21GbG9hdHMgPSBmdW5jdGlvbiAoeCwgeSwgeiwgdykg
eworICAgICAgICB0aGlzLnggPSB4OworICAgICAgICB0aGlzLnkgPSB5OworICAgICAgICB0aGlz
LnogPSB6OworICAgICAgICB0aGlzLncgPSB3OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgVmVjdG9yNCBjb29yZGluYXRl
cyB3aXRoIHRoZSBnaXZlbiBmbG9hdHMuCisgICAgICogQHBhcmFtIHggZmxvYXQgdG8gc2V0IGZy
b20KKyAgICAgKiBAcGFyYW0geSBmbG9hdCB0byBzZXQgZnJvbQorICAgICAqIEBwYXJhbSB6IGZs
b2F0IHRvIHNldCBmcm9tCisgICAgICogQHBhcmFtIHcgZmxvYXQgdG8gc2V0IGZyb20KKyAgICAg
KiBAcmV0dXJucyB0aGUgdXBkYXRlZCBWZWN0b3I0LgorICAgICAqLworICAgIFZlY3RvcjQucHJv
dG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5LCB6LCB3KSB7CisgICAgICAgIHJldHVybiB0aGlz
LmNvcHlGcm9tRmxvYXRzKHgsIHksIHosIHcpOworICAgIH07CisgICAgLyoqCisgICAgICogQ29w
aWVzIHRoZSBnaXZlbiBmbG9hdCB0byB0aGUgY3VycmVudCBWZWN0b3IzIGNvb3JkaW5hdGVzCisg
ICAgICogQHBhcmFtIHYgZGVmaW5lcyB0aGUgeCwgeSwgeiBhbmQgdyBjb29yZGluYXRlcyBvZiB0
aGUgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yMwor
ICAgICAqLworICAgIFZlY3RvcjQucHJvdG90eXBlLnNldEFsbCA9IGZ1bmN0aW9uICh2KSB7Cisg
ICAgICAgIHRoaXMueCA9IHRoaXMueSA9IHRoaXMueiA9IHRoaXMudyA9IHY7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgLy8gU3RhdGljcworICAgIC8qKgorICAgICAqIFJldHVy
bnMgYSBuZXcgVmVjdG9yNCBzZXQgZnJvbSB0aGUgc3RhcnRpbmcgaW5kZXggb2YgdGhlIGdpdmVu
IGFycmF5LgorICAgICAqIEBwYXJhbSBhcnJheSB0aGUgYXJyYXkgdG8gcHVsbCB2YWx1ZXMgZnJv
bQorICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBhcnJheSB0byBzdGFy
dCBhdAorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgdmVjdG9yCisgICAgICovCisgICAgVmVjdG9y
NC5Gcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXksIG9mZnNldCkgeworICAgICAgICBpZiAoIW9m
ZnNldCkgeworICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbmV3IFZlY3RvcjQoYXJyYXlbb2Zmc2V0XSwgYXJyYXlbb2Zmc2V0ICsgMV0sIGFycmF5W29m
ZnNldCArIDJdLCBhcnJheVtvZmZzZXQgKyAzXSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBV
cGRhdGVzIHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIgZnJvbSB0aGUgc3RhcnRpbmcgaW5kZXgg
b2YgdGhlIGdpdmVuIGFycmF5LgorICAgICAqIEBwYXJhbSBhcnJheSB0aGUgYXJyYXkgdG8gcHVs
bCB2YWx1ZXMgZnJvbQorICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBh
cnJheSB0byBzdGFydCBhdAorICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHZlY3RvciB0byBzdG9y
ZSB0aGUgcmVzdWx0IGluCisgICAgICovCisgICAgVmVjdG9yNC5Gcm9tQXJyYXlUb1JlZiA9IGZ1
bmN0aW9uIChhcnJheSwgb2Zmc2V0LCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnggPSBhcnJh
eVtvZmZzZXRdOworICAgICAgICByZXN1bHQueSA9IGFycmF5W29mZnNldCArIDFdOworICAgICAg
ICByZXN1bHQueiA9IGFycmF5W29mZnNldCArIDJdOworICAgICAgICByZXN1bHQudyA9IGFycmF5
W29mZnNldCArIDNdOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgZ2l2ZW4g
dmVjdG9yICJyZXN1bHQiIGZyb20gdGhlIHN0YXJ0aW5nIGluZGV4IG9mIHRoZSBnaXZlbiBGbG9h
dDMyQXJyYXkuCisgICAgICogQHBhcmFtIGFycmF5IHRoZSBhcnJheSB0byBwdWxsIHZhbHVlcyBm
cm9tCisgICAgICogQHBhcmFtIG9mZnNldCB0aGUgb2Zmc2V0IGludG8gdGhlIGFycmF5IHRvIHN0
YXJ0IGF0CisgICAgICogQHBhcmFtIHJlc3VsdCB0aGUgdmVjdG9yIHRvIHN0b3JlIHRoZSByZXN1
bHQgaW4KKyAgICAgKi8KKyAgICBWZWN0b3I0LkZyb21GbG9hdEFycmF5VG9SZWYgPSBmdW5jdGlv
biAoYXJyYXksIG9mZnNldCwgcmVzdWx0KSB7CisgICAgICAgIFZlY3RvcjQuRnJvbUFycmF5VG9S
ZWYoYXJyYXksIG9mZnNldCwgcmVzdWx0KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0
ZXMgdGhlIGdpdmVuIHZlY3RvciAicmVzdWx0IiBjb29yZGluYXRlcyBmcm9tIHRoZSBnaXZlbiBm
bG9hdHMuCisgICAgICogQHBhcmFtIHggZmxvYXQgdG8gc2V0IGZyb20KKyAgICAgKiBAcGFyYW0g
eSBmbG9hdCB0byBzZXQgZnJvbQorICAgICAqIEBwYXJhbSB6IGZsb2F0IHRvIHNldCBmcm9tCisg
ICAgICogQHBhcmFtIHcgZmxvYXQgdG8gc2V0IGZyb20KKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRo
ZSB2ZWN0b3IgdG8gdGhlIGZsb2F0cyBpbgorICAgICAqLworICAgIFZlY3RvcjQuRnJvbUZsb2F0
c1RvUmVmID0gZnVuY3Rpb24gKHgsIHksIHosIHcsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQu
eCA9IHg7CisgICAgICAgIHJlc3VsdC55ID0geTsKKyAgICAgICAgcmVzdWx0LnogPSB6OworICAg
ICAgICByZXN1bHQudyA9IHc7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3
IFZlY3RvcjQgc2V0IHRvICgwLjAsIDAuMCwgMC4wLCAwLjApCisgICAgICogQHJldHVybnMgdGhl
IG5ldyB2ZWN0b3IKKyAgICAgKi8KKyAgICBWZWN0b3I0Llplcm8gPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCgwLjAsIDAuMCwgMC4wLCAwLjApOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3I0IHNldCB0byAoMS4wLCAxLjAsIDEu
MCwgMS4wKQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgdmVjdG9yCisgICAgICovCisgICAgVmVj
dG9yNC5PbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCgxLjAs
IDEuMCwgMS4wLCAxLjApOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBu
b3JtYWxpemVkIFZlY3RvcjQgZnJvbSB0aGUgZ2l2ZW4gb25lLgorICAgICAqIEBwYXJhbSB2ZWN0
b3IgdGhlIHZlY3RvciB0byBub3JtYWxpemUKKyAgICAgKiBAcmV0dXJucyB0aGUgdmVjdG9yCisg
ICAgICovCisgICAgVmVjdG9yNC5Ob3JtYWxpemUgPSBmdW5jdGlvbiAodmVjdG9yKSB7CisgICAg
ICAgIHZhciByZXN1bHQgPSBWZWN0b3I0Llplcm8oKTsKKyAgICAgICAgVmVjdG9yNC5Ob3JtYWxp
emVUb1JlZih2ZWN0b3IsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIgZnJvbSB0
aGUgbm9ybWFsaXphdGlvbiBvZiB0aGUgZ2l2ZW4gb25lLgorICAgICAqIEBwYXJhbSB2ZWN0b3Ig
dGhlIHZlY3RvciB0byBub3JtYWxpemUKKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSB2ZWN0b3Ig
dG8gc3RvcmUgdGhlIHJlc3VsdCBpbgorICAgICAqLworICAgIFZlY3RvcjQuTm9ybWFsaXplVG9S
ZWYgPSBmdW5jdGlvbiAodmVjdG9yLCByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LmNvcHlGcm9t
KHZlY3Rvcik7CisgICAgICAgIHJlc3VsdC5ub3JtYWxpemUoKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJldHVybnMgYSB2ZWN0b3Igd2l0aCB0aGUgbWluaW11bSB2YWx1ZXMgZnJvbSB0aGUg
bGVmdCBhbmQgcmlnaHQgdmVjdG9ycworICAgICAqIEBwYXJhbSBsZWZ0IGxlZnQgdmVjdG9yIHRv
IG1pbmltaXplCisgICAgICogQHBhcmFtIHJpZ2h0IHJpZ2h0IHZlY3RvciB0byBtaW5pbWl6ZQor
ICAgICAqIEByZXR1cm5zIGEgbmV3IHZlY3RvciB3aXRoIHRoZSBtaW5pbXVtIG9mIHRoZSBsZWZ0
IGFuZCByaWdodCB2ZWN0b3IgdmFsdWVzCisgICAgICovCisgICAgVmVjdG9yNC5NaW5pbWl6ZSA9
IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeworICAgICAgICB2YXIgbWluID0gbGVmdC5jbG9uZSgp
OworICAgICAgICBtaW4ubWluaW1pemVJblBsYWNlKHJpZ2h0KTsKKyAgICAgICAgcmV0dXJuIG1p
bjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSB2ZWN0b3Igd2l0aCB0aGUgbWF4
aW11bSB2YWx1ZXMgZnJvbSB0aGUgbGVmdCBhbmQgcmlnaHQgdmVjdG9ycworICAgICAqIEBwYXJh
bSBsZWZ0IGxlZnQgdmVjdG9yIHRvIG1heGltaXplCisgICAgICogQHBhcmFtIHJpZ2h0IHJpZ2h0
IHZlY3RvciB0byBtYXhpbWl6ZQorICAgICAqIEByZXR1cm5zIGEgbmV3IHZlY3RvciB3aXRoIHRo
ZSBtYXhpbXVtIG9mIHRoZSBsZWZ0IGFuZCByaWdodCB2ZWN0b3IgdmFsdWVzCisgICAgICovCisg
ICAgVmVjdG9yNC5NYXhpbWl6ZSA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkgeworICAgICAgICB2
YXIgbWF4ID0gbGVmdC5jbG9uZSgpOworICAgICAgICBtYXgubWF4aW1pemVJblBsYWNlKHJpZ2h0
KTsKKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
dGhlIGRpc3RhbmNlIChmbG9hdCkgYmV0d2VlbiB0aGUgdmVjdG9ycyAidmFsdWUxIiBhbmQgInZh
bHVlMiIuCisgICAgICogQHBhcmFtIHZhbHVlMSB2YWx1ZSB0byBjYWx1bGF0ZSB0aGUgZGlzdGFu
Y2UgYmV0d2VlbgorICAgICAqIEBwYXJhbSB2YWx1ZTIgdmFsdWUgdG8gY2FsdWxhdGUgdGhlIGRp
c3RhbmNlIGJldHdlZW4KKyAgICAgKiBAcmV0dXJuIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0
d28gdmVjdG9ycworICAgICAqLworICAgIFZlY3RvcjQuRGlzdGFuY2UgPSBmdW5jdGlvbiAodmFs
dWUxLCB2YWx1ZTIpIHsKKyAgICAgICAgcmV0dXJuIE1hdGguc3FydChWZWN0b3I0LkRpc3RhbmNl
U3F1YXJlZCh2YWx1ZTEsIHZhbHVlMikpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJu
cyB0aGUgc3F1YXJlZCBkaXN0YW5jZSAoZmxvYXQpIGJldHdlZW4gdGhlIHZlY3RvcnMgInZhbHVl
MSIgYW5kICJ2YWx1ZTIiLgorICAgICAqIEBwYXJhbSB2YWx1ZTEgdmFsdWUgdG8gY2FsdWxhdGUg
dGhlIGRpc3RhbmNlIGJldHdlZW4KKyAgICAgKiBAcGFyYW0gdmFsdWUyIHZhbHVlIHRvIGNhbHVs
YXRlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuCisgICAgICogQHJldHVybiB0aGUgZGlzdGFuY2UgYmV0
d2VlbiB0aGUgdHdvIHZlY3RvcnMgc3F1YXJlZAorICAgICAqLworICAgIFZlY3RvcjQuRGlzdGFu
Y2VTcXVhcmVkID0gZnVuY3Rpb24gKHZhbHVlMSwgdmFsdWUyKSB7CisgICAgICAgIHZhciB4ID0g
dmFsdWUxLnggLSB2YWx1ZTIueDsKKyAgICAgICAgdmFyIHkgPSB2YWx1ZTEueSAtIHZhbHVlMi55
OworICAgICAgICB2YXIgeiA9IHZhbHVlMS56IC0gdmFsdWUyLno7CisgICAgICAgIHZhciB3ID0g
dmFsdWUxLncgLSB2YWx1ZTIudzsKKyAgICAgICAgcmV0dXJuICh4ICogeCkgKyAoeSAqIHkpICsg
KHogKiB6KSArICh3ICogdyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3
IFZlY3RvcjQgbG9jYXRlZCBhdCB0aGUgY2VudGVyIGJldHdlZW4gdGhlIHZlY3RvcnMgInZhbHVl
MSIgYW5kICJ2YWx1ZTIiLgorICAgICAqIEBwYXJhbSB2YWx1ZTEgdmFsdWUgdG8gY2FsdWxhdGUg
dGhlIGNlbnRlciBiZXR3ZWVuCisgICAgICogQHBhcmFtIHZhbHVlMiB2YWx1ZSB0byBjYWx1bGF0
ZSB0aGUgY2VudGVyIGJldHdlZW4KKyAgICAgKiBAcmV0dXJuIHRoZSBjZW50ZXIgYmV0d2VlbiB0
aGUgdHdvIHZlY3RvcnMKKyAgICAgKi8KKyAgICBWZWN0b3I0LkNlbnRlciA9IGZ1bmN0aW9uICh2
YWx1ZTEsIHZhbHVlMikgeworICAgICAgICB2YXIgY2VudGVyID0gdmFsdWUxLmFkZCh2YWx1ZTIp
OworICAgICAgICBjZW50ZXIuc2NhbGVJblBsYWNlKDAuNSk7CisgICAgICAgIHJldHVybiBjZW50
ZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjQgc2V0IHdp
dGggdGhlIHJlc3VsdCBvZiB0aGUgbm9ybWFsIHRyYW5zZm9ybWF0aW9uIGJ5IHRoZSBnaXZlbiBt
YXRyaXggb2YgdGhlIGdpdmVuIHZlY3Rvci4KKyAgICAgKiBUaGlzIG1ldGhvZHMgY29tcHV0ZXMg
dHJhbnNmb3JtZWQgbm9ybWFsaXplZCBkaXJlY3Rpb24gdmVjdG9ycyBvbmx5LgorICAgICAqIEBw
YXJhbSB2ZWN0b3IgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm0KKyAgICAgKiBAcGFyYW0gdHJhbnNm
b3JtYXRpb24gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0byBhcHBseQorICAgICAqIEByZXR1
cm5zIHRoZSBuZXcgdmVjdG9yCisgICAgICovCisgICAgVmVjdG9yNC5UcmFuc2Zvcm1Ob3JtYWwg
PSBmdW5jdGlvbiAodmVjdG9yLCB0cmFuc2Zvcm1hdGlvbikgeworICAgICAgICB2YXIgcmVzdWx0
ID0gVmVjdG9yNC5aZXJvKCk7CisgICAgICAgIFZlY3RvcjQuVHJhbnNmb3JtTm9ybWFsVG9SZWYo
dmVjdG9yLCB0cmFuc2Zvcm1hdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciAicmVzdWx0IiB3
aXRoIHRoZSByZXN1bHQgb2YgdGhlIG5vcm1hbCB0cmFuc2Zvcm1hdGlvbiBieSB0aGUgZ2l2ZW4g
bWF0cml4IG9mIHRoZSBnaXZlbiB2ZWN0b3IuCisgICAgICogVGhpcyBtZXRob2RzIGNvbXB1dGVz
IHRyYW5zZm9ybWVkIG5vcm1hbGl6ZWQgZGlyZWN0aW9uIHZlY3RvcnMgb25seS4KKyAgICAgKiBA
cGFyYW0gdmVjdG9yIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtCisgICAgICogQHBhcmFtIHRyYW5z
Zm9ybWF0aW9uIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdG8gYXBwbHkKKyAgICAgKiBAcGFy
YW0gcmVzdWx0IHRoZSB2ZWN0b3IgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbgorICAgICAqLworICAg
IFZlY3RvcjQuVHJhbnNmb3JtTm9ybWFsVG9SZWYgPSBmdW5jdGlvbiAodmVjdG9yLCB0cmFuc2Zv
cm1hdGlvbiwgcmVzdWx0KSB7CisgICAgICAgIHZhciBtID0gdHJhbnNmb3JtYXRpb24ubTsKKyAg
ICAgICAgdmFyIHggPSAodmVjdG9yLnggKiBtWzBdKSArICh2ZWN0b3IueSAqIG1bNF0pICsgKHZl
Y3Rvci56ICogbVs4XSk7CisgICAgICAgIHZhciB5ID0gKHZlY3Rvci54ICogbVsxXSkgKyAodmVj
dG9yLnkgKiBtWzVdKSArICh2ZWN0b3IueiAqIG1bOV0pOworICAgICAgICB2YXIgeiA9ICh2ZWN0
b3IueCAqIG1bMl0pICsgKHZlY3Rvci55ICogbVs2XSkgKyAodmVjdG9yLnogKiBtWzEwXSk7Cisg
ICAgICAgIHJlc3VsdC54ID0geDsKKyAgICAgICAgcmVzdWx0LnkgPSB5OworICAgICAgICByZXN1
bHQueiA9IHo7CisgICAgICAgIHJlc3VsdC53ID0gdmVjdG9yLnc7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3IgInJlc3VsdCIgd2l0aCB0aGUgcmVzdWx0IG9m
IHRoZSBub3JtYWwgdHJhbnNmb3JtYXRpb24gYnkgdGhlIGdpdmVuIG1hdHJpeCBvZiB0aGUgZ2l2
ZW4gZmxvYXRzICh4LCB5LCB6LCB3KS4KKyAgICAgKiBUaGlzIG1ldGhvZHMgY29tcHV0ZXMgdHJh
bnNmb3JtZWQgbm9ybWFsaXplZCBkaXJlY3Rpb24gdmVjdG9ycyBvbmx5LgorICAgICAqIEBwYXJh
bSB4IHZhbHVlIHRvIHRyYW5zZm9ybQorICAgICAqIEBwYXJhbSB5IHZhbHVlIHRvIHRyYW5zZm9y
bQorICAgICAqIEBwYXJhbSB6IHZhbHVlIHRvIHRyYW5zZm9ybQorICAgICAqIEBwYXJhbSB3IHZh
bHVlIHRvIHRyYW5zZm9ybQorICAgICAqIEBwYXJhbSB0cmFuc2Zvcm1hdGlvbiB0aGUgdHJhbnNm
b3JtYXRpb24gbWF0cml4IHRvIGFwcGx5CisgICAgICogQHBhcmFtIHJlc3VsdCB0aGUgdmVjdG9y
IHRvIHN0b3JlIHRoZSByZXN1bHRzIGluCisgICAgICovCisgICAgVmVjdG9yNC5UcmFuc2Zvcm1O
b3JtYWxGcm9tRmxvYXRzVG9SZWYgPSBmdW5jdGlvbiAoeCwgeSwgeiwgdywgdHJhbnNmb3JtYXRp
b24sIHJlc3VsdCkgeworICAgICAgICB2YXIgbSA9IHRyYW5zZm9ybWF0aW9uLm07CisgICAgICAg
IHJlc3VsdC54ID0gKHggKiBtWzBdKSArICh5ICogbVs0XSkgKyAoeiAqIG1bOF0pOworICAgICAg
ICByZXN1bHQueSA9ICh4ICogbVsxXSkgKyAoeSAqIG1bNV0pICsgKHogKiBtWzldKTsKKyAgICAg
ICAgcmVzdWx0LnogPSAoeCAqIG1bMl0pICsgKHkgKiBtWzZdKSArICh6ICogbVsxMF0pOworICAg
ICAgICByZXN1bHQudyA9IHc7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3
IFZlY3RvcjQgZnJvbSBhIFZlY3RvcjMKKyAgICAgKiBAcGFyYW0gc291cmNlIGRlZmluZXMgdGhl
IHNvdXJjZSBkYXRhCisgICAgICogQHBhcmFtIHcgZGVmaW5lcyB0aGUgNHRoIGNvbXBvbmVudCAo
ZGVmYXVsdCBpcyAwKQorICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjQKKyAgICAgKi8KKyAg
ICBWZWN0b3I0LkZyb21WZWN0b3IzID0gZnVuY3Rpb24gKHNvdXJjZSwgdykgeworICAgICAgICBp
ZiAodyA9PT0gdm9pZCAwKSB7IHcgPSAwOyB9CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yNChz
b3VyY2UueCwgc291cmNlLnksIHNvdXJjZS56LCB3KTsKKyAgICB9OworICAgIHJldHVybiBWZWN0
b3I0OworfSgpKTsKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHN0b3JlIHF1YXRlcm5pb24gZGF0
YQorICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdWF0ZXJuaW9uCisgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9mZWF0dXJlcy9wb3NpdGlvbixfcm90YXRpb24s
X3NjYWxpbmcKKyAqLwordmFyIFF1YXRlcm5pb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBRdWF0ZXJuaW9uIGZyb20gdGhlIGdp
dmVuIGZsb2F0cworICAgICAqIEBwYXJhbSB4IGRlZmluZXMgdGhlIGZpcnN0IGNvbXBvbmVudCAo
MCBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgdGhlIHNlY29uZCBjb21wb25l
bnQgKDAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB0aGlyZCBjb21w
b25lbnQgKDAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gdyBkZWZpbmVzIHRoZSBmb3VydGgg
Y29tcG9uZW50ICgxLjAgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBRdWF0ZXJu
aW9uKAorICAgIC8qKiBkZWZpbmVzIHRoZSBmaXJzdCBjb21wb25lbnQgKDAgYnkgZGVmYXVsdCkg
Ki8KKyAgICB4LCAKKyAgICAvKiogZGVmaW5lcyB0aGUgc2Vjb25kIGNvbXBvbmVudCAoMCBieSBk
ZWZhdWx0KSAqLworICAgIHksIAorICAgIC8qKiBkZWZpbmVzIHRoZSB0aGlyZCBjb21wb25lbnQg
KDAgYnkgZGVmYXVsdCkgKi8KKyAgICB6LCAKKyAgICAvKiogZGVmaW5lcyB0aGUgZm91cnRoIGNv
bXBvbmVudCAoMS4wIGJ5IGRlZmF1bHQpICovCisgICAgdykgeworICAgICAgICBpZiAoeCA9PT0g
dm9pZCAwKSB7IHggPSAwLjA7IH0KKyAgICAgICAgaWYgKHkgPT09IHZvaWQgMCkgeyB5ID0gMC4w
OyB9CisgICAgICAgIGlmICh6ID09PSB2b2lkIDApIHsgeiA9IDAuMDsgfQorICAgICAgICBpZiAo
dyA9PT0gdm9pZCAwKSB7IHcgPSAxLjA7IH0KKyAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAg
dGhpcy55ID0geTsKKyAgICAgICAgdGhpcy56ID0gejsKKyAgICAgICAgdGhpcy53ID0gdzsKKyAg
ICB9CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhl
IGN1cnJlbnQgcXVhdGVybmlvbgorICAgICAqIEByZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIFF1
YXRlcm5pb24gY29vcmRpbmF0ZXMKKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLnByb3RvdHlwZS50
b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJ7WDogIiArIHRoaXMueCAr
ICIgWToiICsgdGhpcy55ICsgIiBaOiIgKyB0aGlzLnogKyAiIFc6IiArIHRoaXMudyArICJ9IjsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIHF1YXRl
cm5pb24KKyAgICAgKiBAcmV0dXJucyB0aGUgc3RyaW5nICJRdWF0ZXJuaW9uIgorICAgICAqLwor
ICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuICJRdWF0ZXJuaW9uIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMg
YSBoYXNoIGNvZGUgZm9yIHRoaXMgcXVhdGVybmlvbgorICAgICAqIEByZXR1cm5zIHRoZSBxdWF0
ZXJuaW9uIGhhc2ggY29kZQorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmdldEhh
c2hDb2RlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaGFzaCA9IHRoaXMueCB8IDA7Cisg
ICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAodGhpcy55IHwgMCk7CisgICAgICAgIGhhc2gg
PSAoaGFzaCAqIDM5NykgXiAodGhpcy56IHwgMCk7CisgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5
NykgXiAodGhpcy53IHwgMCk7CisgICAgICAgIHJldHVybiBoYXNoOworICAgIH07CisgICAgLyoq
CisgICAgICogQ29weSB0aGUgcXVhdGVybmlvbiB0byBhbiBhcnJheQorICAgICAqIEByZXR1cm5z
IGEgbmV3IGFycmF5IHBvcHVsYXRlZCB3aXRoIDQgZWxlbWVudHMgZnJvbSB0aGUgcXVhdGVybmlv
biBjb29yZGluYXRlcworICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmFzQXJyYXkg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnksIHRoaXMueiwg
dGhpcy53XTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHR3byBxdWF0ZXJuaW9u
cyBhcmUgZXF1YWxzCisgICAgICogQHBhcmFtIG90aGVyUXVhdGVybmlvbiBkZWZpbmVzIHRoZSBz
ZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCBxdWF0ZXJu
aW9uIGFuZCB0aGUgZ2l2ZW4gb25lIGNvb3JkaW5hdGVzIGFyZSBzdHJpY3RseSBlcXVhbHMKKyAg
ICAgKi8KKyAgICBRdWF0ZXJuaW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAob3RoZXJR
dWF0ZXJuaW9uKSB7CisgICAgICAgIHJldHVybiBvdGhlclF1YXRlcm5pb24gJiYgdGhpcy54ID09
PSBvdGhlclF1YXRlcm5pb24ueCAmJiB0aGlzLnkgPT09IG90aGVyUXVhdGVybmlvbi55ICYmIHRo
aXMueiA9PT0gb3RoZXJRdWF0ZXJuaW9uLnogJiYgdGhpcy53ID09PSBvdGhlclF1YXRlcm5pb24u
dzsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lIHRoZSBjdXJyZW50IHF1YXRlcm5pb24K
KyAgICAgKiBAcmV0dXJucyBhIG5ldyBxdWF0ZXJuaW9uIGNvcGllZCBmcm9tIHRoZSBjdXJyZW50
IG9uZQorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gbmV3IFF1YXRlcm5pb24odGhpcy54LCB0aGlzLnksIHRoaXMu
eiwgdGhpcy53KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvcHkgYSBxdWF0ZXJuaW9uIHRv
IHRoZSBjdXJyZW50IG9uZQorICAgICAqIEBwYXJhbSBvdGhlciBkZWZpbmVzIHRoZSBvdGhlciBx
dWF0ZXJuaW9uCisgICAgICogQHJldHVybnMgdGhlIHVwZGF0ZWQgY3VycmVudCBxdWF0ZXJuaW9u
CisgICAgICovCisgICAgUXVhdGVybmlvbi5wcm90b3R5cGUuY29weUZyb20gPSBmdW5jdGlvbiAo
b3RoZXIpIHsKKyAgICAgICAgdGhpcy54ID0gb3RoZXIueDsKKyAgICAgICAgdGhpcy55ID0gb3Ro
ZXIueTsKKyAgICAgICAgdGhpcy56ID0gb3RoZXIuejsKKyAgICAgICAgdGhpcy53ID0gb3RoZXIu
dzsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVz
IHRoZSBjdXJyZW50IHF1YXRlcm5pb24gd2l0aCB0aGUgZ2l2ZW4gZmxvYXQgY29vcmRpbmF0ZXMK
KyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB4IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0g
eSBkZWZpbmVzIHRoZSB5IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB6
IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gdyBkZWZpbmVzIHRoZSB3IGNvb3JkaW5hdGUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgdXBkYXRlZCBjdXJyZW50IHF1YXRlcm5pb24KKyAgICAgKi8KKyAg
ICBRdWF0ZXJuaW9uLnByb3RvdHlwZS5jb3B5RnJvbUZsb2F0cyA9IGZ1bmN0aW9uICh4LCB5LCB6
LCB3KSB7CisgICAgICAgIHRoaXMueCA9IHg7CisgICAgICAgIHRoaXMueSA9IHk7CisgICAgICAg
IHRoaXMueiA9IHo7CisgICAgICAgIHRoaXMudyA9IHc7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgY3VycmVudCBxdWF0ZXJuaW9uIGZy
b20gdGhlIGdpdmVuIGZsb2F0IGNvb3JkaW5hdGVzCisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0
aGUgeCBjb29yZGluYXRlCisgICAgICogQHBhcmFtIHkgZGVmaW5lcyB0aGUgeSBjb29yZGluYXRl
CisgICAgICogQHBhcmFtIHogZGVmaW5lcyB0aGUgeiBjb29yZGluYXRlCisgICAgICogQHBhcmFt
IHcgZGVmaW5lcyB0aGUgdyBjb29yZGluYXRlCisgICAgICogQHJldHVybnMgdGhlIHVwZGF0ZWQg
Y3VycmVudCBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5wcm90b3R5cGUuc2V0
ID0gZnVuY3Rpb24gKHgsIHksIHosIHcpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY29weUZyb21G
bG9hdHMoeCwgeSwgeiwgdyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIHR3byBxdWF0
ZXJuaW9ucworICAgICAqIEBwYXJhbSBvdGhlciBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAor
ICAgICAqIEByZXR1cm5zIGEgbmV3IHF1YXRlcm5pb24gYXMgdGhlIGFkZGl0aW9uIHJlc3VsdCBv
ZiB0aGUgZ2l2ZW4gb25lIGFuZCB0aGUgY3VycmVudCBxdWF0ZXJuaW9uCisgICAgICovCisgICAg
UXVhdGVybmlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG90aGVyKSB7CisgICAgICAgIHJl
dHVybiBuZXcgUXVhdGVybmlvbih0aGlzLnggKyBvdGhlci54LCB0aGlzLnkgKyBvdGhlci55LCB0
aGlzLnogKyBvdGhlci56LCB0aGlzLncgKyBvdGhlci53KTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEFkZCBhIHF1YXRlcm5pb24gdG8gdGhlIGN1cnJlbnQgb25lCisgICAgICogQHBhcmFtIG90
aGVyIGRlZmluZXMgdGhlIHF1YXRlcm5pb24gdG8gYWRkCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgcXVhdGVybmlvbgorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmFkZElu
UGxhY2UgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAgICAgdGhpcy54ICs9IG90aGVyLng7Cisg
ICAgICAgIHRoaXMueSArPSBvdGhlci55OworICAgICAgICB0aGlzLnogKz0gb3RoZXIuejsKKyAg
ICAgICAgdGhpcy53ICs9IG90aGVyLnc7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU3VidHJhY3QgdHdvIHF1YXRlcm5pb25zCisgICAgICogQHBhcmFtIG90
aGVyIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kCisgICAgICogQHJldHVybnMgYSBuZXcgcXVh
dGVybmlvbiBhcyB0aGUgc3VidHJhY3Rpb24gcmVzdWx0IG9mIHRoZSBnaXZlbiBvbmUgZnJvbSB0
aGUgY3VycmVudCBvbmUKKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLnByb3RvdHlwZS5zdWJ0cmFj
dCA9IGZ1bmN0aW9uIChvdGhlcikgeworICAgICAgICByZXR1cm4gbmV3IFF1YXRlcm5pb24odGhp
cy54IC0gb3RoZXIueCwgdGhpcy55IC0gb3RoZXIueSwgdGhpcy56IC0gb3RoZXIueiwgdGhpcy53
IC0gb3RoZXIudyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNdWx0aXBsaWVzIHRoZSBjdXJy
ZW50IHF1YXRlcm5pb24gYnkgYSBzY2FsZSBmYWN0b3IKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVm
aW5lcyB0aGUgc2NhbGUgZmFjdG9yCisgICAgICogQHJldHVybnMgYSBuZXcgcXVhdGVybmlvbiBz
ZXQgYnkgbXVsdGlwbHlpbmcgdGhlIGN1cnJlbnQgcXVhdGVybmlvbiBjb29yZGluYXRlcyBieSB0
aGUgZmxvYXQgInNjYWxlIgorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLnNjYWxl
ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHJldHVybiBuZXcgUXVhdGVybmlvbih0aGlz
LnggKiB2YWx1ZSwgdGhpcy55ICogdmFsdWUsIHRoaXMueiAqIHZhbHVlLCB0aGlzLncgKiB2YWx1
ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0aGUgY3VycmVudCBxdWF0ZXJuaW9u
IHZhbHVlcyBieSBhIGZhY3RvciBhbmQgc3RvcmVzIHRoZSByZXN1bHQgdG8gYSBnaXZlbiBxdWF0
ZXJuaW9uCisgICAgICogQHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxlIGZhY3RvcgorICAg
ICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgUXVhdGVybmlvbiBvYmplY3Qgd2hlcmUgdG8g
c3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSB1bm1vZGlmaWVkIGN1cnJlbnQg
cXVhdGVybmlvbgorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLnNjYWxlVG9SZWYg
PSBmdW5jdGlvbiAoc2NhbGUsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQueCA9IHRoaXMueCAq
IHNjYWxlOworICAgICAgICByZXN1bHQueSA9IHRoaXMueSAqIHNjYWxlOworICAgICAgICByZXN1
bHQueiA9IHRoaXMueiAqIHNjYWxlOworICAgICAgICByZXN1bHQudyA9IHRoaXMudyAqIHNjYWxl
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIE11bHRpcGxp
ZXMgaW4gcGxhY2UgdGhlIGN1cnJlbnQgcXVhdGVybmlvbiBieSBhIHNjYWxlIGZhY3RvcgorICAg
ICAqIEBwYXJhbSB2YWx1ZSBkZWZpbmVzIHRoZSBzY2FsZSBmYWN0b3IKKyAgICAgKiBAcmV0dXJu
cyB0aGUgY3VycmVudCBtb2RpZmllZCBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlv
bi5wcm90b3R5cGUuc2NhbGVJblBsYWNlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHRo
aXMueCAqPSB2YWx1ZTsKKyAgICAgICAgdGhpcy55ICo9IHZhbHVlOworICAgICAgICB0aGlzLnog
Kj0gdmFsdWU7CisgICAgICAgIHRoaXMudyAqPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0aGUgY3VycmVudCBxdWF0ZXJuaW9uIHZh
bHVlcyBieSBhIGZhY3RvciBhbmQgYWRkIHRoZSByZXN1bHQgdG8gYSBnaXZlbiBxdWF0ZXJuaW9u
CisgICAgICogQHBhcmFtIHNjYWxlIGRlZmluZXMgdGhlIHNjYWxlIGZhY3RvcgorICAgICAqIEBw
YXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgUXVhdGVybmlvbiBvYmplY3Qgd2hlcmUgdG8gc3RvcmUg
dGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSB1bm1vZGlmaWVkIGN1cnJlbnQgcXVhdGVy
bmlvbgorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLnNjYWxlQW5kQWRkVG9SZWYg
PSBmdW5jdGlvbiAoc2NhbGUsIHJlc3VsdCkgeworICAgICAgICByZXN1bHQueCArPSB0aGlzLngg
KiBzY2FsZTsKKyAgICAgICAgcmVzdWx0LnkgKz0gdGhpcy55ICogc2NhbGU7CisgICAgICAgIHJl
c3VsdC56ICs9IHRoaXMueiAqIHNjYWxlOworICAgICAgICByZXN1bHQudyArPSB0aGlzLncgKiBz
Y2FsZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNdWx0
aXBsaWVzIHR3byBxdWF0ZXJuaW9ucworICAgICAqIEBwYXJhbSBxMSBkZWZpbmVzIHRoZSBzZWNv
bmQgb3BlcmFuZAorICAgICAqIEByZXR1cm5zIGEgbmV3IHF1YXRlcm5pb24gc2V0IGFzIHRoZSBt
dWx0aXBsaWNhdGlvbiByZXN1bHQgb2YgdGhlIGN1cnJlbnQgb25lIHdpdGggdGhlIGdpdmVuIG9u
ZSAicTEiCisgICAgICovCisgICAgUXVhdGVybmlvbi5wcm90b3R5cGUubXVsdGlwbHkgPSBmdW5j
dGlvbiAocTEpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBRdWF0ZXJuaW9uKDAsIDAsIDAs
IDEuMCk7CisgICAgICAgIHRoaXMubXVsdGlwbHlUb1JlZihxMSwgcmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGdpdmVuICJy
ZXN1bHQiIGFzIHRoZSB0aGUgbXVsdGlwbGljYXRpb24gcmVzdWx0IG9mIHRoZSBjdXJyZW50IG9u
ZSB3aXRoIHRoZSBnaXZlbiBvbmUgInExIgorICAgICAqIEBwYXJhbSBxMSBkZWZpbmVzIHRoZSBz
ZWNvbmQgb3BlcmFuZAorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IHF1
YXRlcm5pb24KKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBxdWF0ZXJuaW9uCisgICAgICov
CisgICAgUXVhdGVybmlvbi5wcm90b3R5cGUubXVsdGlwbHlUb1JlZiA9IGZ1bmN0aW9uIChxMSwg
cmVzdWx0KSB7CisgICAgICAgIHZhciB4ID0gdGhpcy54ICogcTEudyArIHRoaXMueSAqIHExLnog
LSB0aGlzLnogKiBxMS55ICsgdGhpcy53ICogcTEueDsKKyAgICAgICAgdmFyIHkgPSAtdGhpcy54
ICogcTEueiArIHRoaXMueSAqIHExLncgKyB0aGlzLnogKiBxMS54ICsgdGhpcy53ICogcTEueTsK
KyAgICAgICAgdmFyIHogPSB0aGlzLnggKiBxMS55IC0gdGhpcy55ICogcTEueCArIHRoaXMueiAq
IHExLncgKyB0aGlzLncgKiBxMS56OworICAgICAgICB2YXIgdyA9IC10aGlzLnggKiBxMS54IC0g
dGhpcy55ICogcTEueSAtIHRoaXMueiAqIHExLnogKyB0aGlzLncgKiBxMS53OworICAgICAgICBy
ZXN1bHQuY29weUZyb21GbG9hdHMoeCwgeSwgeiwgdyk7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgY3VycmVudCBxdWF0ZXJuaW9uIHdp
dGggdGhlIG11bHRpcGxpY2F0aW9uIG9mIGl0c2VsZiB3aXRoIHRoZSBnaXZlbiBvbmUgInExIgor
ICAgICAqIEBwYXJhbSBxMSBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAorICAgICAqIEByZXR1
cm5zIHRoZSBjdXJyZW50dXBkYXRlZCBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlv
bi5wcm90b3R5cGUubXVsdGlwbHlJblBsYWNlID0gZnVuY3Rpb24gKHExKSB7CisgICAgICAgIHRo
aXMubXVsdGlwbHlUb1JlZihxMSwgdGhpcyk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogQ29uanVnYXRlcyAoMS1xKSB0aGUgY3VycmVudCBxdWF0ZXJuaW9u
IGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gcXVhdGVybmlvbgorICAgICAqIEBw
YXJhbSByZWYgZGVmaW5lcyB0aGUgdGFyZ2V0IHF1YXRlcm5pb24KKyAgICAgKiBAcmV0dXJucyB0
aGUgY3VycmVudCBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5wcm90b3R5cGUu
Y29uanVnYXRlVG9SZWYgPSBmdW5jdGlvbiAocmVmKSB7CisgICAgICAgIHJlZi5jb3B5RnJvbUZs
b2F0cygtdGhpcy54LCAtdGhpcy55LCAtdGhpcy56LCB0aGlzLncpOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbmp1Z2F0ZXMgaW4gcGxhY2UgKDEtcSkg
dGhlIGN1cnJlbnQgcXVhdGVybmlvbgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0
ZWQgcXVhdGVybmlvbgorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmNvbmp1Z2F0
ZUluUGxhY2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMueCAqPSAtMTsKKyAgICAgICAg
dGhpcy55ICo9IC0xOworICAgICAgICB0aGlzLnogKj0gLTE7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogQ29uanVnYXRlcyBpbiBwbGFjZSAoMS1xKSB0aGUg
Y3VycmVudCBxdWF0ZXJuaW9uCisgICAgICogQHJldHVybnMgYSBuZXcgcXVhdGVybmlvbgorICAg
ICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLmNvbmp1Z2F0ZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBRdWF0ZXJuaW9uKC10aGlzLngsIC10aGlzLnksIC10
aGlzLnosIHRoaXMudyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBHZXRzIGxlbmd0aCBvZiBjdXJyZW50IHF1YXRlcm5pb24KKyAgICAgKiBAcmV0dXJu
cyB0aGUgcXVhdGVybmlvbiBsZW5ndGggKGZsb2F0KQorICAgICAqLworICAgIFF1YXRlcm5pb24u
cHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIE1hdGguc3Fy
dCgodGhpcy54ICogdGhpcy54KSArICh0aGlzLnkgKiB0aGlzLnkpICsgKHRoaXMueiAqIHRoaXMu
eikgKyAodGhpcy53ICogdGhpcy53KSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBOb3JtYWxp
emUgaW4gcGxhY2UgdGhlIGN1cnJlbnQgcXVhdGVybmlvbgorICAgICAqIEByZXR1cm5zIHRoZSBj
dXJyZW50IHVwZGF0ZWQgcXVhdGVybmlvbgorICAgICAqLworICAgIFF1YXRlcm5pb24ucHJvdG90
eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGxlbiA9IHRoaXMubGVu
Z3RoKCk7CisgICAgICAgIGlmIChsZW4gPT09IDApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICB9CisgICAgICAgIHZhciBpbnYgPSAxLjAgLyBsZW47CisgICAgICAgIHRoaXMu
eCAqPSBpbnY7CisgICAgICAgIHRoaXMueSAqPSBpbnY7CisgICAgICAgIHRoaXMueiAqPSBpbnY7
CisgICAgICAgIHRoaXMudyAqPSBpbnY7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRoIHRoZSBFdWxlciBh
bmdsZXMgdHJhbnNsYXRlZCBmcm9tIHRoZSBjdXJyZW50IHF1YXRlcm5pb24KKyAgICAgKiBAcGFy
YW0gb3JkZXIgaXMgYSByZXNlcnZlZCBwYXJhbWV0ZXIgYW5kIGlzIGlnbm9yZSBmb3Igbm93Cisg
ICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMyBjb250YWluaW5nIHRoZSBFdWxlciBhbmdsZXMK
KyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLnByb3RvdHlwZS50b0V1bGVyQW5nbGVzID0gZnVuY3Rp
b24gKG9yZGVyKSB7CisgICAgICAgIGlmIChvcmRlciA9PT0gdm9pZCAwKSB7IG9yZGVyID0gIlla
WCI7IH0KKyAgICAgICAgdmFyIHJlc3VsdCA9IFZlY3RvcjMuWmVybygpOworICAgICAgICB0aGlz
LnRvRXVsZXJBbmdsZXNUb1JlZihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2ZW4gdmVjdG9yMyAicmVzdWx0IiB3aXRo
IHRoZSBFdWxlciBhbmdsZXMgdHJhbnNsYXRlZCBmcm9tIHRoZSBjdXJyZW50IHF1YXRlcm5pb24K
KyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHZlY3RvciB3aGljaCB3aWxsIGJlIGZp
bGxlZCB3aXRoIHRoZSBFdWxlciBhbmdsZXMKKyAgICAgKiBAcGFyYW0gb3JkZXIgaXMgYSByZXNl
cnZlZCBwYXJhbWV0ZXIgYW5kIGlzIGlnbm9yZSBmb3Igbm93CisgICAgICogQHJldHVybnMgdGhl
IGN1cnJlbnQgdW5jaGFuZ2VkIHF1YXRlcm5pb24KKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLnBy
b3RvdHlwZS50b0V1bGVyQW5nbGVzVG9SZWYgPSBmdW5jdGlvbiAocmVzdWx0KSB7CisgICAgICAg
IHZhciBxeiA9IHRoaXMuejsKKyAgICAgICAgdmFyIHF4ID0gdGhpcy54OworICAgICAgICB2YXIg
cXkgPSB0aGlzLnk7CisgICAgICAgIHZhciBxdyA9IHRoaXMudzsKKyAgICAgICAgdmFyIHNxdyA9
IHF3ICogcXc7CisgICAgICAgIHZhciBzcXogPSBxeiAqIHF6OworICAgICAgICB2YXIgc3F4ID0g
cXggKiBxeDsKKyAgICAgICAgdmFyIHNxeSA9IHF5ICogcXk7CisgICAgICAgIHZhciB6QXhpc1kg
PSBxeSAqIHF6IC0gcXggKiBxdzsKKyAgICAgICAgdmFyIGxpbWl0ID0gLjQ5OTk5OTk7CisgICAg
ICAgIGlmICh6QXhpc1kgPCAtbGltaXQpIHsKKyAgICAgICAgICAgIHJlc3VsdC55ID0gMiAqIE1h
dGguYXRhbjIocXksIHF3KTsKKyAgICAgICAgICAgIHJlc3VsdC54ID0gTWF0aC5QSSAvIDI7Cisg
ICAgICAgICAgICByZXN1bHQueiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoekF4
aXNZID4gbGltaXQpIHsKKyAgICAgICAgICAgIHJlc3VsdC55ID0gMiAqIE1hdGguYXRhbjIocXks
IHF3KTsKKyAgICAgICAgICAgIHJlc3VsdC54ID0gLU1hdGguUEkgLyAyOworICAgICAgICAgICAg
cmVzdWx0LnogPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVz
dWx0LnogPSBNYXRoLmF0YW4yKDIuMCAqIChxeCAqIHF5ICsgcXogKiBxdyksICgtc3F6IC0gc3F4
ICsgc3F5ICsgc3F3KSk7CisgICAgICAgICAgICByZXN1bHQueCA9IE1hdGguYXNpbigtMi4wICog
KHF6ICogcXkgLSBxeCAqIHF3KSk7CisgICAgICAgICAgICByZXN1bHQueSA9IE1hdGguYXRhbjIo
Mi4wICogKHF6ICogcXggKyBxeSAqIHF3KSwgKHNxeiAtIHNxeCAtIHNxeSArIHNxdykpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogVXBk
YXRlcyB0aGUgZ2l2ZW4gcm90YXRpb24gbWF0cml4IHdpdGggdGhlIGN1cnJlbnQgcXVhdGVybmlv
biB2YWx1ZXMKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBtYXRyaXgK
KyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1bmNoYW5nZWQgcXVhdGVybmlvbgorICAgICAq
LworICAgIFF1YXRlcm5pb24ucHJvdG90eXBlLnRvUm90YXRpb25NYXRyaXggPSBmdW5jdGlvbiAo
cmVzdWx0KSB7CisgICAgICAgIE1hdHJpeC5Gcm9tUXVhdGVybmlvblRvUmVmKHRoaXMsIHJlc3Vs
dCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRl
cyB0aGUgY3VycmVudCBxdWF0ZXJuaW9uIGZyb20gdGhlIGdpdmVuIHJvdGF0aW9uIG1hdHJpeCB2
YWx1ZXMKKyAgICAgKiBAcGFyYW0gbWF0cml4IGRlZmluZXMgdGhlIHNvdXJjZSBtYXRyaXgKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIHF1YXRlcm5pb24KKyAgICAgKi8KKyAg
ICBRdWF0ZXJuaW9uLnByb3RvdHlwZS5mcm9tUm90YXRpb25NYXRyaXggPSBmdW5jdGlvbiAobWF0
cml4KSB7CisgICAgICAgIFF1YXRlcm5pb24uRnJvbVJvdGF0aW9uTWF0cml4VG9SZWYobWF0cml4
LCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvLyBTdGF0aWNzCisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBxdWF0ZXJuaW9uIGZyb20gYSByb3RhdGlvbiBt
YXRyaXgKKyAgICAgKiBAcGFyYW0gbWF0cml4IGRlZmluZXMgdGhlIHNvdXJjZSBtYXRyaXgKKyAg
ICAgKiBAcmV0dXJucyBhIG5ldyBxdWF0ZXJuaW9uIGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gcm90
YXRpb24gbWF0cml4IHZhbHVlcworICAgICAqLworICAgIFF1YXRlcm5pb24uRnJvbVJvdGF0aW9u
TWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFF1
YXRlcm5pb24oKTsKKyAgICAgICAgUXVhdGVybmlvbi5Gcm9tUm90YXRpb25NYXRyaXhUb1JlZiht
YXRyaXgsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBVcGRhdGVzIHRoZSBnaXZlbiBxdWF0ZXJuaW9uIHdpdGggdGhlIGdpdmVuIHJvdGF0
aW9uIG1hdHJpeCB2YWx1ZXMKKyAgICAgKiBAcGFyYW0gbWF0cml4IGRlZmluZXMgdGhlIHNvdXJj
ZSBtYXRyaXgKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJu
aW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5Gcm9tUm90YXRpb25NYXRyaXhUb1JlZiA9IGZ1
bmN0aW9uIChtYXRyaXgsIHJlc3VsdCkgeworICAgICAgICB2YXIgZGF0YSA9IG1hdHJpeC5tOwor
ICAgICAgICB2YXIgbTExID0gZGF0YVswXSwgbTEyID0gZGF0YVs0XSwgbTEzID0gZGF0YVs4XTsK
KyAgICAgICAgdmFyIG0yMSA9IGRhdGFbMV0sIG0yMiA9IGRhdGFbNV0sIG0yMyA9IGRhdGFbOV07
CisgICAgICAgIHZhciBtMzEgPSBkYXRhWzJdLCBtMzIgPSBkYXRhWzZdLCBtMzMgPSBkYXRhWzEw
XTsKKyAgICAgICAgdmFyIHRyYWNlID0gbTExICsgbTIyICsgbTMzOworICAgICAgICB2YXIgczsK
KyAgICAgICAgaWYgKHRyYWNlID4gMCkgeworICAgICAgICAgICAgcyA9IDAuNSAvIE1hdGguc3Fy
dCh0cmFjZSArIDEuMCk7CisgICAgICAgICAgICByZXN1bHQudyA9IDAuMjUgLyBzOworICAgICAg
ICAgICAgcmVzdWx0LnggPSAobTMyIC0gbTIzKSAqIHM7CisgICAgICAgICAgICByZXN1bHQueSA9
IChtMTMgLSBtMzEpICogczsKKyAgICAgICAgICAgIHJlc3VsdC56ID0gKG0yMSAtIG0xMikgKiBz
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG0xMSA+IG0yMiAmJiBtMTEgPiBtMzMpIHsK
KyAgICAgICAgICAgIHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTExIC0gbTIyIC0gbTMzKTsK
KyAgICAgICAgICAgIHJlc3VsdC53ID0gKG0zMiAtIG0yMykgLyBzOworICAgICAgICAgICAgcmVz
dWx0LnggPSAwLjI1ICogczsKKyAgICAgICAgICAgIHJlc3VsdC55ID0gKG0xMiArIG0yMSkgLyBz
OworICAgICAgICAgICAgcmVzdWx0LnogPSAobTEzICsgbTMxKSAvIHM7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAobTIyID4gbTMzKSB7CisgICAgICAgICAgICBzID0gMi4wICogTWF0aC5z
cXJ0KDEuMCArIG0yMiAtIG0xMSAtIG0zMyk7CisgICAgICAgICAgICByZXN1bHQudyA9IChtMTMg
LSBtMzEpIC8gczsKKyAgICAgICAgICAgIHJlc3VsdC54ID0gKG0xMiArIG0yMSkgLyBzOworICAg
ICAgICAgICAgcmVzdWx0LnkgPSAwLjI1ICogczsKKyAgICAgICAgICAgIHJlc3VsdC56ID0gKG0y
MyArIG0zMikgLyBzOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcyA9
IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMzMgLSBtMTEgLSBtMjIpOworICAgICAgICAgICAgcmVz
dWx0LncgPSAobTIxIC0gbTEyKSAvIHM7CisgICAgICAgICAgICByZXN1bHQueCA9IChtMTMgKyBt
MzEpIC8gczsKKyAgICAgICAgICAgIHJlc3VsdC55ID0gKG0yMyArIG0zMikgLyBzOworICAgICAg
ICAgICAgcmVzdWx0LnogPSAwLjI1ICogczsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogUmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBiZXR3ZWVuIHRoZSBxdWF0ZXJu
aW9ucyAibGVmdCIgYW5kICJyaWdodCIKKyAgICAgKiBAcGFyYW0gbGVmdCBkZWZpbmVzIHRoZSBs
ZWZ0IG9wZXJhbmQKKyAgICAgKiBAcGFyYW0gcmlnaHQgZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFu
ZAorICAgICAqIEByZXR1cm5zIHRoZSBkb3QgcHJvZHVjdAorICAgICAqLworICAgIFF1YXRlcm5p
b24uRG90ID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7CisgICAgICAgIHJldHVybiAobGVmdC54
ICogcmlnaHQueCArIGxlZnQueSAqIHJpZ2h0LnkgKyBsZWZ0LnogKiByaWdodC56ICsgbGVmdC53
ICogcmlnaHQudyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIHR3byBx
dWF0ZXJuaW9ucyBhcmUgY2xvc2UgdG8gZWFjaCBvdGhlcgorICAgICAqIEBwYXJhbSBxdWF0MCBk
ZWZpbmVzIHRoZSBmaXJzdCBxdWF0ZXJuaW9uIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHF1YXQx
IGRlZmluZXMgdGhlIHNlY29uZCBxdWF0ZXJuaW9uIHRvIGNoZWNrCisgICAgICogQHJldHVybnMg
dHJ1ZSBpZiB0aGUgdHdvIHF1YXRlcm5pb25zIGFyZSBjbG9zZSB0byBlYWNoIG90aGVyCisgICAg
ICovCisgICAgUXVhdGVybmlvbi5BcmVDbG9zZSA9IGZ1bmN0aW9uIChxdWF0MCwgcXVhdDEpIHsK
KyAgICAgICAgdmFyIGRvdCA9IFF1YXRlcm5pb24uRG90KHF1YXQwLCBxdWF0MSk7CisgICAgICAg
IHJldHVybiBkb3QgPj0gMDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gZW1w
dHkgcXVhdGVybmlvbgorICAgICAqIEByZXR1cm5zIGEgbmV3IHF1YXRlcm5pb24gc2V0IHRvICgw
LjAsIDAuMCwgMC4wKQorICAgICAqLworICAgIFF1YXRlcm5pb24uWmVybyA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBRdWF0ZXJuaW9uKDAuMCwgMC4wLCAwLjAsIDAuMCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnZlcnNlIGEgZ2l2ZW4gcXVhdGVybmlvbgorICAgICAq
IEBwYXJhbSBxIGRlZmluZXMgdGhlIHNvdXJjZSBxdWF0ZXJuaW9uCisgICAgICogQHJldHVybnMg
YSBuZXcgcXVhdGVybmlvbiBhcyB0aGUgaW52ZXJ0ZWQgY3VycmVudCBxdWF0ZXJuaW9uCisgICAg
ICovCisgICAgUXVhdGVybmlvbi5JbnZlcnNlID0gZnVuY3Rpb24gKHEpIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBRdWF0ZXJuaW9uKC1xLngsIC1xLnksIC1xLnosIHEudyk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBJbnZlcnNlIGEgZ2l2ZW4gcXVhdGVybmlvbgorICAgICAqIEBwYXJhbSBxIGRl
ZmluZXMgdGhlIHNvdXJjZSBxdWF0ZXJuaW9uCisgICAgICogQHBhcmFtIHJlc3VsdCB0aGUgcXVh
dGVybmlvbiB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluCisgICAgICogQHJldHVybnMgdGhl
IHJlc3VsdCBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5JbnZlcnNlVG9SZWYg
PSBmdW5jdGlvbiAocSwgcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC5zZXQoLXEueCwgLXEueSwg
LXEueiwgcS53KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgcXVhdGVybmlvbgorICAgICAqIEByZXR1cm5zIHRoZSBp
ZGVudGl0eSBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5JZGVudGl0eSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBRdWF0ZXJuaW9uKDAuMCwgMC4wLCAwLjAs
IDEuMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5n
IGlmIHRoZSBnaXZlbiBxdWF0ZXJuaW9uIGlzIGlkZW50aXR5CisgICAgICogQHBhcmFtIHF1YXRl
cm5pb24gZGVmaW5lcyB0aGUgcXVhdGVybmlvbiB0byBjaGVjaworICAgICAqIEByZXR1cm5zIHRy
dWUgaWYgdGhlIHF1YXRlcm5pb24gaXMgaWRlbnRpdHkKKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9u
LklzSWRlbnRpdHkgPSBmdW5jdGlvbiAocXVhdGVybmlvbikgeworICAgICAgICByZXR1cm4gcXVh
dGVybmlvbiAmJiBxdWF0ZXJuaW9uLnggPT09IDAgJiYgcXVhdGVybmlvbi55ID09PSAwICYmIHF1
YXRlcm5pb24ueiA9PT0gMCAmJiBxdWF0ZXJuaW9uLncgPT09IDE7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgcXVhdGVybmlvbiBmcm9tIGEgcm90YXRpb24gYXJvdW5kIGFuIGF4
aXMKKyAgICAgKiBAcGFyYW0gYXhpcyBkZWZpbmVzIHRoZSBheGlzIHRvIHVzZQorICAgICAqIEBw
YXJhbSBhbmdsZSBkZWZpbmVzIHRoZSBhbmdsZSB0byB1c2UKKyAgICAgKiBAcmV0dXJucyBhIG5l
dyBxdWF0ZXJuaW9uIGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gYXhpcyAoVmVjdG9yMykgYW5kIGFu
Z2xlIGluIHJhZGlhbnMgKGZsb2F0KQorICAgICAqLworICAgIFF1YXRlcm5pb24uUm90YXRpb25B
eGlzID0gZnVuY3Rpb24gKGF4aXMsIGFuZ2xlKSB7CisgICAgICAgIHJldHVybiBRdWF0ZXJuaW9u
LlJvdGF0aW9uQXhpc1RvUmVmKGF4aXMsIGFuZ2xlLCBuZXcgUXVhdGVybmlvbigpKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSByb3RhdGlvbiBhcm91bmQgYW4gYXhpcyBhbmQg
c3RvcmVzIGl0IGludG8gdGhlIGdpdmVuIHF1YXRlcm5pb24KKyAgICAgKiBAcGFyYW0gYXhpcyBk
ZWZpbmVzIHRoZSBheGlzIHRvIHVzZQorICAgICAqIEBwYXJhbSBhbmdsZSBkZWZpbmVzIHRoZSBh
bmdsZSB0byB1c2UKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBxdWF0
ZXJuaW9uCisgICAgICogQHJldHVybnMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uCisgICAgICovCisg
ICAgUXVhdGVybmlvbi5Sb3RhdGlvbkF4aXNUb1JlZiA9IGZ1bmN0aW9uIChheGlzLCBhbmdsZSwg
cmVzdWx0KSB7CisgICAgICAgIHZhciBzaW4gPSBNYXRoLnNpbihhbmdsZSAvIDIpOworICAgICAg
ICBheGlzLm5vcm1hbGl6ZSgpOworICAgICAgICByZXN1bHQudyA9IE1hdGguY29zKGFuZ2xlIC8g
Mik7CisgICAgICAgIHJlc3VsdC54ID0gYXhpcy54ICogc2luOworICAgICAgICByZXN1bHQueSA9
IGF4aXMueSAqIHNpbjsKKyAgICAgICAgcmVzdWx0LnogPSBheGlzLnogKiBzaW47CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHF1
YXRlcm5pb24gZnJvbSBkYXRhIHN0b3JlZCBpbnRvIGFuIGFycmF5CisgICAgICogQHBhcmFtIGFy
cmF5IGRlZmluZXMgdGhlIGRhdGEgc291cmNlCisgICAgICogQHBhcmFtIG9mZnNldCBkZWZpbmVz
IHRoZSBvZmZzZXQgaW4gdGhlIHNvdXJjZSBhcnJheSB3aGVyZSB0aGUgZGF0YSBzdGFydHMKKyAg
ICAgKiBAcmV0dXJucyBhIG5ldyBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5G
cm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXksIG9mZnNldCkgeworICAgICAgICBpZiAoIW9mZnNl
dCkgeworICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bmV3IFF1YXRlcm5pb24oYXJyYXlbb2Zmc2V0XSwgYXJyYXlbb2Zmc2V0ICsgMV0sIGFycmF5W29m
ZnNldCArIDJdLCBhcnJheVtvZmZzZXQgKyAzXSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGUgYSBxdWF0ZXJuaW9uIGZyb20gRXVsZXIgcm90YXRpb24gYW5nbGVzCisgICAgICogQHBh
cmFtIHggUGl0Y2gKKyAgICAgKiBAcGFyYW0geSBZYXcKKyAgICAgKiBAcGFyYW0geiBSb2xsCisg
ICAgICogQHJldHVybnMgdGhlIG5ldyBRdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlv
bi5Gcm9tRXVsZXJBbmdsZXMgPSBmdW5jdGlvbiAoeCwgeSwgeikgeworICAgICAgICB2YXIgcSA9
IG5ldyBRdWF0ZXJuaW9uKCk7CisgICAgICAgIFF1YXRlcm5pb24uUm90YXRpb25ZYXdQaXRjaFJv
bGxUb1JlZih5LCB4LCB6LCBxKTsKKyAgICAgICAgcmV0dXJuIHE7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBVcGRhdGVzIGEgcXVhdGVybmlvbiBmcm9tIEV1bGVyIHJvdGF0aW9uIGFuZ2xlcwor
ICAgICAqIEBwYXJhbSB4IFBpdGNoCisgICAgICogQHBhcmFtIHkgWWF3CisgICAgICogQHBhcmFt
IHogUm9sbAorICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHF1YXRlcm5pb24gdG8gc3RvcmUgdGhl
IHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIHF1YXRlcm5pb24KKyAgICAgKi8K
KyAgICBRdWF0ZXJuaW9uLkZyb21FdWxlckFuZ2xlc1RvUmVmID0gZnVuY3Rpb24gKHgsIHksIHos
IHJlc3VsdCkgeworICAgICAgICBRdWF0ZXJuaW9uLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYo
eSwgeCwgeiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENyZWF0ZSBhIHF1YXRlcm5pb24gZnJvbSBFdWxlciByb3RhdGlvbiB2ZWN0b3IK
KyAgICAgKiBAcGFyYW0gdmVjIHRoZSBFdWxlciB2ZWN0b3IgKHggUGl0Y2gsIHkgWWF3LCB6IFJv
bGwpCisgICAgICogQHJldHVybnMgdGhlIG5ldyBRdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVh
dGVybmlvbi5Gcm9tRXVsZXJWZWN0b3IgPSBmdW5jdGlvbiAodmVjKSB7CisgICAgICAgIHZhciBx
ID0gbmV3IFF1YXRlcm5pb24oKTsKKyAgICAgICAgUXVhdGVybmlvbi5Sb3RhdGlvbllhd1BpdGNo
Um9sbFRvUmVmKHZlYy55LCB2ZWMueCwgdmVjLnosIHEpOworICAgICAgICByZXR1cm4gcTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgYSBxdWF0ZXJuaW9uIGZyb20gRXVsZXIgcm90
YXRpb24gdmVjdG9yCisgICAgICogQHBhcmFtIHZlYyB0aGUgRXVsZXIgdmVjdG9yICh4IFBpdGNo
LCB5IFlhdywgeiBSb2xsKQorICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHF1YXRlcm5pb24gdG8g
c3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIHF1YXRlcm5pb24K
KyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLkZyb21FdWxlclZlY3RvclRvUmVmID0gZnVuY3Rpb24g
KHZlYywgcmVzdWx0KSB7CisgICAgICAgIFF1YXRlcm5pb24uUm90YXRpb25ZYXdQaXRjaFJvbGxU
b1JlZih2ZWMueSwgdmVjLngsIHZlYy56LCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBxdWF0ZXJuaW9uIGZyb20g
dGhlIGdpdmVuIEV1bGVyIGZsb2F0IGFuZ2xlcyAoeSwgeCwgeikKKyAgICAgKiBAcGFyYW0geWF3
IGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBZIGF4aXMKKyAgICAgKiBAcGFyYW0gcGl0Y2gg
ZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFggYXhpcworICAgICAqIEBwYXJhbSByb2xsIGRl
ZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBaIGF4aXMKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3
IHF1YXRlcm5pb24KKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLlJvdGF0aW9uWWF3UGl0Y2hSb2xs
ID0gZnVuY3Rpb24gKHlhdywgcGl0Y2gsIHJvbGwpIHsKKyAgICAgICAgdmFyIHEgPSBuZXcgUXVh
dGVybmlvbigpOworICAgICAgICBRdWF0ZXJuaW9uLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYo
eWF3LCBwaXRjaCwgcm9sbCwgcSk7CisgICAgICAgIHJldHVybiBxOworICAgIH07CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBmcm9tIHRoZSBnaXZlbiBFdWxlciBmbG9h
dCBhbmdsZXMgKHksIHgsIHopIGFuZCBzdG9yZXMgaXQgaW4gdGhlIHRhcmdldCBxdWF0ZXJuaW9u
CisgICAgICogQHBhcmFtIHlhdyBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWSBheGlzCisg
ICAgICogQHBhcmFtIHBpdGNoIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBYIGF4aXMKKyAg
ICAgKiBAcGFyYW0gcm9sbCBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWiBheGlzCisgICAg
ICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvbgorICAgICAqLwor
ICAgIFF1YXRlcm5pb24uUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZiA9IGZ1bmN0aW9uICh5YXcs
IHBpdGNoLCByb2xsLCByZXN1bHQpIHsKKyAgICAgICAgLy8gUHJvZHVjZXMgYSBxdWF0ZXJuaW9u
IGZyb20gRXVsZXIgYW5nbGVzIGluIHRoZSB6LXkteCBvcmllbnRhdGlvbiAoVGFpdC1CcnlhbiBh
bmdsZXMpCisgICAgICAgIHZhciBoYWxmUm9sbCA9IHJvbGwgKiAwLjU7CisgICAgICAgIHZhciBo
YWxmUGl0Y2ggPSBwaXRjaCAqIDAuNTsKKyAgICAgICAgdmFyIGhhbGZZYXcgPSB5YXcgKiAwLjU7
CisgICAgICAgIHZhciBzaW5Sb2xsID0gTWF0aC5zaW4oaGFsZlJvbGwpOworICAgICAgICB2YXIg
Y29zUm9sbCA9IE1hdGguY29zKGhhbGZSb2xsKTsKKyAgICAgICAgdmFyIHNpblBpdGNoID0gTWF0
aC5zaW4oaGFsZlBpdGNoKTsKKyAgICAgICAgdmFyIGNvc1BpdGNoID0gTWF0aC5jb3MoaGFsZlBp
dGNoKTsKKyAgICAgICAgdmFyIHNpbllhdyA9IE1hdGguc2luKGhhbGZZYXcpOworICAgICAgICB2
YXIgY29zWWF3ID0gTWF0aC5jb3MoaGFsZllhdyk7CisgICAgICAgIHJlc3VsdC54ID0gKGNvc1lh
dyAqIHNpblBpdGNoICogY29zUm9sbCkgKyAoc2luWWF3ICogY29zUGl0Y2ggKiBzaW5Sb2xsKTsK
KyAgICAgICAgcmVzdWx0LnkgPSAoc2luWWF3ICogY29zUGl0Y2ggKiBjb3NSb2xsKSAtIChjb3NZ
YXcgKiBzaW5QaXRjaCAqIHNpblJvbGwpOworICAgICAgICByZXN1bHQueiA9IChjb3NZYXcgKiBj
b3NQaXRjaCAqIHNpblJvbGwpIC0gKHNpbllhdyAqIHNpblBpdGNoICogY29zUm9sbCk7CisgICAg
ICAgIHJlc3VsdC53ID0gKGNvc1lhdyAqIGNvc1BpdGNoICogY29zUm9sbCkgKyAoc2luWWF3ICog
c2luUGl0Y2ggKiBzaW5Sb2xsKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBu
ZXcgcXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiBFdWxlciBmbG9hdCBhbmdsZXMgZXhwcmVzc2Vk
IGluIHoteC16IG9yaWVudGF0aW9uCisgICAgICogQHBhcmFtIGFscGhhIGRlZmluZXMgdGhlIHJv
dGF0aW9uIGFyb3VuZCBmaXJzdCBheGlzCisgICAgICogQHBhcmFtIGJldGEgZGVmaW5lcyB0aGUg
cm90YXRpb24gYXJvdW5kIHNlY29uZCBheGlzCisgICAgICogQHBhcmFtIGdhbW1hIGRlZmluZXMg
dGhlIHJvdGF0aW9uIGFyb3VuZCB0aGlyZCBheGlzCisgICAgICogQHJldHVybnMgdGhlIG5ldyBx
dWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5Sb3RhdGlvbkFscGhhQmV0YUdhbW1h
ID0gZnVuY3Rpb24gKGFscGhhLCBiZXRhLCBnYW1tYSkgeworICAgICAgICB2YXIgcmVzdWx0ID0g
bmV3IFF1YXRlcm5pb24oKTsKKyAgICAgICAgUXVhdGVybmlvbi5Sb3RhdGlvbkFscGhhQmV0YUdh
bW1hVG9SZWYoYWxwaGEsIGJldGEsIGdhbW1hLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBxdWF0ZXJuaW9uIGZy
b20gdGhlIGdpdmVuIEV1bGVyIGZsb2F0IGFuZ2xlcyBleHByZXNzZWQgaW4gei14LXogb3JpZW50
YXRpb24gYW5kIHN0b3JlcyBpdCBpbiB0aGUgdGFyZ2V0IHF1YXRlcm5pb24KKyAgICAgKiBAcGFy
YW0gYWxwaGEgZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIGZpcnN0IGF4aXMKKyAgICAgKiBA
cGFyYW0gYmV0YSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgc2Vjb25kIGF4aXMKKyAgICAg
KiBAcGFyYW0gZ2FtbWEgZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIHRoaXJkIGF4aXMKKyAg
ICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uCisgICAgICov
CisgICAgUXVhdGVybmlvbi5Sb3RhdGlvbkFscGhhQmV0YUdhbW1hVG9SZWYgPSBmdW5jdGlvbiAo
YWxwaGEsIGJldGEsIGdhbW1hLCByZXN1bHQpIHsKKyAgICAgICAgLy8gUHJvZHVjZXMgYSBxdWF0
ZXJuaW9uIGZyb20gRXVsZXIgYW5nbGVzIGluIHRoZSB6LXgteiBvcmllbnRhdGlvbgorICAgICAg
ICB2YXIgaGFsZkdhbW1hUGx1c0FscGhhID0gKGdhbW1hICsgYWxwaGEpICogMC41OworICAgICAg
ICB2YXIgaGFsZkdhbW1hTWludXNBbHBoYSA9IChnYW1tYSAtIGFscGhhKSAqIDAuNTsKKyAgICAg
ICAgdmFyIGhhbGZCZXRhID0gYmV0YSAqIDAuNTsKKyAgICAgICAgcmVzdWx0LnggPSBNYXRoLmNv
cyhoYWxmR2FtbWFNaW51c0FscGhhKSAqIE1hdGguc2luKGhhbGZCZXRhKTsKKyAgICAgICAgcmVz
dWx0LnkgPSBNYXRoLnNpbihoYWxmR2FtbWFNaW51c0FscGhhKSAqIE1hdGguc2luKGhhbGZCZXRh
KTsKKyAgICAgICAgcmVzdWx0LnogPSBNYXRoLnNpbihoYWxmR2FtbWFQbHVzQWxwaGEpICogTWF0
aC5jb3MoaGFsZkJldGEpOworICAgICAgICByZXN1bHQudyA9IE1hdGguY29zKGhhbGZHYW1tYVBs
dXNBbHBoYSkgKiBNYXRoLmNvcyhoYWxmQmV0YSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgbmV3IHF1YXRlcm5pb24gY29udGFpbmluZyB0aGUgcm90YXRpb24gdmFsdWUgdG8g
cmVhY2ggdGhlIHRhcmdldCAoYXhpczEsIGF4aXMyLCBheGlzMykgb3JpZW50YXRpb24gYXMgYSBy
b3RhdGVkIFhZWiBzeXN0ZW0gKGF4aXMxLCBheGlzMiBhbmQgYXhpczMgYXJlIG5vcm1hbGl6ZWQg
ZHVyaW5nIHRoaXMgb3BlcmF0aW9uKQorICAgICAqIEBwYXJhbSBheGlzMSBkZWZpbmVzIHRoZSBm
aXJzdCBheGlzCisgICAgICogQHBhcmFtIGF4aXMyIGRlZmluZXMgdGhlIHNlY29uZCBheGlzCisg
ICAgICogQHBhcmFtIGF4aXMzIGRlZmluZXMgdGhlIHRoaXJkIGF4aXMKKyAgICAgKiBAcmV0dXJu
cyB0aGUgbmV3IHF1YXRlcm5pb24KKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLlJvdGF0aW9uUXVh
dGVybmlvbkZyb21BeGlzID0gZnVuY3Rpb24gKGF4aXMxLCBheGlzMiwgYXhpczMpIHsKKyAgICAg
ICAgdmFyIHF1YXQgPSBuZXcgUXVhdGVybmlvbigwLjAsIDAuMCwgMC4wLCAwLjApOworICAgICAg
ICBRdWF0ZXJuaW9uLlJvdGF0aW9uUXVhdGVybmlvbkZyb21BeGlzVG9SZWYoYXhpczEsIGF4aXMy
LCBheGlzMywgcXVhdCk7CisgICAgICAgIHJldHVybiBxdWF0OworICAgIH07CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIHJvdGF0aW9uIHZhbHVlIHRvIHJlYWNoIHRoZSB0YXJnZXQgKGF4aXMx
LCBheGlzMiwgYXhpczMpIG9yaWVudGF0aW9uIGFzIGEgcm90YXRlZCBYWVogc3lzdGVtIChheGlz
MSwgYXhpczIgYW5kIGF4aXMzIGFyZSBub3JtYWxpemVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbikg
YW5kIHN0b3JlcyBpdCBpbiB0aGUgdGFyZ2V0IHF1YXRlcm5pb24KKyAgICAgKiBAcGFyYW0gYXhp
czEgZGVmaW5lcyB0aGUgZmlyc3QgYXhpcworICAgICAqIEBwYXJhbSBheGlzMiBkZWZpbmVzIHRo
ZSBzZWNvbmQgYXhpcworICAgICAqIEBwYXJhbSBheGlzMyBkZWZpbmVzIHRoZSB0aGlyZCBheGlz
CisgICAgICogQHBhcmFtIHJlZiBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvbgorICAgICAq
LworICAgIFF1YXRlcm5pb24uUm90YXRpb25RdWF0ZXJuaW9uRnJvbUF4aXNUb1JlZiA9IGZ1bmN0
aW9uIChheGlzMSwgYXhpczIsIGF4aXMzLCByZWYpIHsKKyAgICAgICAgdmFyIHJvdE1hdCA9IE1h
dGhUbXAuTWF0cml4WzBdOworICAgICAgICBNYXRyaXguRnJvbVhZWkF4ZXNUb1JlZihheGlzMS5u
b3JtYWxpemUoKSwgYXhpczIubm9ybWFsaXplKCksIGF4aXMzLm5vcm1hbGl6ZSgpLCByb3RNYXQp
OworICAgICAgICBRdWF0ZXJuaW9uLkZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKHJvdE1hdCwgcmVm
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEludGVycG9sYXRlcyBiZXR3ZWVuIHR3byBxdWF0
ZXJuaW9ucworICAgICAqIEBwYXJhbSBsZWZ0IGRlZmluZXMgZmlyc3QgcXVhdGVybmlvbgorICAg
ICAqIEBwYXJhbSByaWdodCBkZWZpbmVzIHNlY29uZCBxdWF0ZXJuaW9uCisgICAgICogQHBhcmFt
IGFtb3VudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2UKKyAgICAgKiBAcmV0dXJucyB0aGUg
bmV3IGludGVycG9sYXRlZCBxdWF0ZXJuaW9uCisgICAgICovCisgICAgUXVhdGVybmlvbi5TbGVy
cCA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYW1vdW50KSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBRdWF0ZXJuaW9uLklkZW50aXR5KCk7CisgICAgICAgIFF1YXRlcm5pb24uU2xlcnBUb1JlZihs
ZWZ0LCByaWdodCwgYW1vdW50LCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07CisgICAgLyoqCisgICAgICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIHF1YXRlcm5pb25z
IGFuZCBzdG9yZXMgaXQgaW50byBhIHRhcmdldCBxdWF0ZXJuaW9uCisgICAgICogQHBhcmFtIGxl
ZnQgZGVmaW5lcyBmaXJzdCBxdWF0ZXJuaW9uCisgICAgICogQHBhcmFtIHJpZ2h0IGRlZmluZXMg
c2Vjb25kIHF1YXRlcm5pb24KKyAgICAgKiBAcGFyYW0gYW1vdW50IGRlZmluZXMgdGhlIGdyYWRp
ZW50IHRvIHVzZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IHF1YXRl
cm5pb24KKyAgICAgKi8KKyAgICBRdWF0ZXJuaW9uLlNsZXJwVG9SZWYgPSBmdW5jdGlvbiAobGVm
dCwgcmlnaHQsIGFtb3VudCwgcmVzdWx0KSB7CisgICAgICAgIHZhciBudW0yOworICAgICAgICB2
YXIgbnVtMzsKKyAgICAgICAgdmFyIG51bTQgPSAoKChsZWZ0LnggKiByaWdodC54KSArIChsZWZ0
LnkgKiByaWdodC55KSkgKyAobGVmdC56ICogcmlnaHQueikpICsgKGxlZnQudyAqIHJpZ2h0Lncp
OworICAgICAgICB2YXIgZmxhZyA9IGZhbHNlOworICAgICAgICBpZiAobnVtNCA8IDApIHsKKyAg
ICAgICAgICAgIGZsYWcgPSB0cnVlOworICAgICAgICAgICAgbnVtNCA9IC1udW00OworICAgICAg
ICB9CisgICAgICAgIGlmIChudW00ID4gMC45OTk5OTkpIHsKKyAgICAgICAgICAgIG51bTMgPSAx
IC0gYW1vdW50OworICAgICAgICAgICAgbnVtMiA9IGZsYWcgPyAtYW1vdW50IDogYW1vdW50Owor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIG51bTUgPSBNYXRoLmFj
b3MobnVtNCk7CisgICAgICAgICAgICB2YXIgbnVtNiA9ICgxLjAgLyBNYXRoLnNpbihudW01KSk7
CisgICAgICAgICAgICBudW0zID0gKE1hdGguc2luKCgxLjAgLSBhbW91bnQpICogbnVtNSkpICog
bnVtNjsKKyAgICAgICAgICAgIG51bTIgPSBmbGFnID8gKCgtTWF0aC5zaW4oYW1vdW50ICogbnVt
NSkpICogbnVtNikgOiAoKE1hdGguc2luKGFtb3VudCAqIG51bTUpKSAqIG51bTYpOworICAgICAg
ICB9CisgICAgICAgIHJlc3VsdC54ID0gKG51bTMgKiBsZWZ0LngpICsgKG51bTIgKiByaWdodC54
KTsKKyAgICAgICAgcmVzdWx0LnkgPSAobnVtMyAqIGxlZnQueSkgKyAobnVtMiAqIHJpZ2h0Lnkp
OworICAgICAgICByZXN1bHQueiA9IChudW0zICogbGVmdC56KSArIChudW0yICogcmlnaHQueik7
CisgICAgICAgIHJlc3VsdC53ID0gKG51bTMgKiBsZWZ0LncpICsgKG51bTIgKiByaWdodC53KTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEludGVycG9sYXRlIGJldHdlZW4gdHdvIHF1YXRlcm5p
b25zIHVzaW5nIEhlcm1pdGUgaW50ZXJwb2xhdGlvbgorICAgICAqIEBwYXJhbSB2YWx1ZTEgZGVm
aW5lcyBmaXJzdCBxdWF0ZXJuaW9uCisgICAgICogQHBhcmFtIHRhbmdlbnQxIGRlZmluZXMgdGhl
IGluY29taW5nIHRhbmdlbnQKKyAgICAgKiBAcGFyYW0gdmFsdWUyIGRlZmluZXMgc2Vjb25kIHF1
YXRlcm5pb24KKyAgICAgKiBAcGFyYW0gdGFuZ2VudDIgZGVmaW5lcyB0aGUgb3V0Z29pbmcgdGFu
Z2VudAorICAgICAqIEBwYXJhbSBhbW91bnQgZGVmaW5lcyB0aGUgdGFyZ2V0IHF1YXRlcm5pb24K
KyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGludGVycG9sYXRlZCBxdWF0ZXJuaW9uCisgICAgICov
CisgICAgUXVhdGVybmlvbi5IZXJtaXRlID0gZnVuY3Rpb24gKHZhbHVlMSwgdGFuZ2VudDEsIHZh
bHVlMiwgdGFuZ2VudDIsIGFtb3VudCkgeworICAgICAgICB2YXIgc3F1YXJlZCA9IGFtb3VudCAq
IGFtb3VudDsKKyAgICAgICAgdmFyIGN1YmVkID0gYW1vdW50ICogc3F1YXJlZDsKKyAgICAgICAg
dmFyIHBhcnQxID0gKCgyLjAgKiBjdWJlZCkgLSAoMy4wICogc3F1YXJlZCkpICsgMS4wOworICAg
ICAgICB2YXIgcGFydDIgPSAoLTIuMCAqIGN1YmVkKSArICgzLjAgKiBzcXVhcmVkKTsKKyAgICAg
ICAgdmFyIHBhcnQzID0gKGN1YmVkIC0gKDIuMCAqIHNxdWFyZWQpKSArIGFtb3VudDsKKyAgICAg
ICAgdmFyIHBhcnQ0ID0gY3ViZWQgLSBzcXVhcmVkOworICAgICAgICB2YXIgeCA9ICgoKHZhbHVl
MS54ICogcGFydDEpICsgKHZhbHVlMi54ICogcGFydDIpKSArICh0YW5nZW50MS54ICogcGFydDMp
KSArICh0YW5nZW50Mi54ICogcGFydDQpOworICAgICAgICB2YXIgeSA9ICgoKHZhbHVlMS55ICog
cGFydDEpICsgKHZhbHVlMi55ICogcGFydDIpKSArICh0YW5nZW50MS55ICogcGFydDMpKSArICh0
YW5nZW50Mi55ICogcGFydDQpOworICAgICAgICB2YXIgeiA9ICgoKHZhbHVlMS56ICogcGFydDEp
ICsgKHZhbHVlMi56ICogcGFydDIpKSArICh0YW5nZW50MS56ICogcGFydDMpKSArICh0YW5nZW50
Mi56ICogcGFydDQpOworICAgICAgICB2YXIgdyA9ICgoKHZhbHVlMS53ICogcGFydDEpICsgKHZh
bHVlMi53ICogcGFydDIpKSArICh0YW5nZW50MS53ICogcGFydDMpKSArICh0YW5nZW50Mi53ICog
cGFydDQpOworICAgICAgICByZXR1cm4gbmV3IFF1YXRlcm5pb24oeCwgeSwgeiwgdyk7CisgICAg
fTsKKyAgICByZXR1cm4gUXVhdGVybmlvbjsKK30oKSk7CisKKy8qKgorICogQ2xhc3MgdXNlZCB0
byBzdG9yZSBtYXRyaXggZGF0YSAoNHg0KQorICovCit2YXIgTWF0cml4ID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gZW1wdHkgbWF0cml4
IChmaWxsZWQgd2l0aCB6ZXJvcykKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBNYXRyaXgoKSB7Cisg
ICAgICAgIHRoaXMuX2lzSWRlbnRpdHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faXNJZGVudGl0
eURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5faXNJZGVudGl0eTN4MiA9IHRydWU7CisgICAg
ICAgIHRoaXMuX2lzSWRlbnRpdHkzeDJEaXJ0eSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIHRoZSB1cGRhdGUgZmxhZyBvZiB0aGUgbWF0cml4IHdoaWNoIGlzIGFuIHVuaXF1
ZSBudW1iZXIgZm9yIHRoZSBtYXRyaXguCisgICAgICAgICAqIEl0IHdpbGwgYmUgaW5jcmVtZW50
ZWQgZXZlcnkgdGltZSB0aGUgbWF0cml4IGRhdGEgY2hhbmdlLgorICAgICAgICAgKiBZb3UgY2Fu
IHVzZSBpdCB0byBzcGVlZCB0aGUgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2ZXJzaW9ucyBvZiB0
aGUgc2FtZSBtYXRyaXguCisgICAgICAgICAqLworICAgICAgICB0aGlzLnVwZGF0ZUZsYWcgPSAt
MTsKKyAgICAgICAgdGhpcy5fbSA9IG5ldyBGbG9hdDMyQXJyYXkoMTYpOworICAgICAgICB0aGlz
Ll91cGRhdGVJZGVudGl0eVN0YXR1cyhmYWxzZSk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShNYXRyaXgucHJvdG90eXBlLCAibSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIGludGVybmFsIGRhdGEgb2YgdGhlIG1hdHJpeAorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9tOyB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKiog
QGhpZGRlbiAqLworICAgIE1hdHJpeC5wcm90b3R5cGUuX21hcmtBc1VwZGF0ZWQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRoaXMudXBkYXRlRmxhZyA9IE1hdHJpeC5fdXBkYXRlRmxhZ1NlZWQr
KzsKKyAgICAgICAgdGhpcy5faXNJZGVudGl0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0lk
ZW50aXR5M3gyID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lzSWRlbnRpdHlEaXJ0eSA9IHRydWU7
CisgICAgICAgIHRoaXMuX2lzSWRlbnRpdHkzeDJEaXJ0eSA9IHRydWU7CisgICAgfTsKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIE1hdHJpeC5wcm90b3R5cGUuX3VwZGF0ZUlkZW50aXR5U3RhdHVz
ID0gZnVuY3Rpb24gKGlzSWRlbnRpdHksIGlzSWRlbnRpdHlEaXJ0eSwgaXNJZGVudGl0eTN4Miwg
aXNJZGVudGl0eTN4MkRpcnR5KSB7CisgICAgICAgIGlmIChpc0lkZW50aXR5RGlydHkgPT09IHZv
aWQgMCkgeyBpc0lkZW50aXR5RGlydHkgPSBmYWxzZTsgfQorICAgICAgICBpZiAoaXNJZGVudGl0
eTN4MiA9PT0gdm9pZCAwKSB7IGlzSWRlbnRpdHkzeDIgPSBmYWxzZTsgfQorICAgICAgICBpZiAo
aXNJZGVudGl0eTN4MkRpcnR5ID09PSB2b2lkIDApIHsgaXNJZGVudGl0eTN4MkRpcnR5ID0gdHJ1
ZTsgfQorICAgICAgICB0aGlzLnVwZGF0ZUZsYWcgPSBNYXRyaXguX3VwZGF0ZUZsYWdTZWVkKys7
CisgICAgICAgIHRoaXMuX2lzSWRlbnRpdHkgPSBpc0lkZW50aXR5OworICAgICAgICB0aGlzLl9p
c0lkZW50aXR5M3gyID0gaXNJZGVudGl0eSB8fCBpc0lkZW50aXR5M3gyOworICAgICAgICB0aGlz
Ll9pc0lkZW50aXR5RGlydHkgPSB0aGlzLl9pc0lkZW50aXR5ID8gZmFsc2UgOiBpc0lkZW50aXR5
RGlydHk7CisgICAgICAgIHRoaXMuX2lzSWRlbnRpdHkzeDJEaXJ0eSA9IHRoaXMuX2lzSWRlbnRp
dHkzeDIgPyBmYWxzZSA6IGlzSWRlbnRpdHkzeDJEaXJ0eTsKKyAgICB9OworICAgIC8vIFByb3Bl
cnRpZXMKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCBtYXRyaXggaXMgaWRl
bnRpdHkKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlzIHRoZSBtYXRyaXggaXMgdGhlIGlkZW50aXR5
IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUuaXNJZGVudGl0eSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2lzSWRlbnRpdHlEaXJ0eSkgeworICAgICAgICAg
ICAgdGhpcy5faXNJZGVudGl0eURpcnR5ID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgbSA9IHRo
aXMuX207CisgICAgICAgICAgICB0aGlzLl9pc0lkZW50aXR5ID0gKG1bMF0gPT09IDEuMCAmJiBt
WzFdID09PSAwLjAgJiYgbVsyXSA9PT0gMC4wICYmIG1bM10gPT09IDAuMCAmJgorICAgICAgICAg
ICAgICAgIG1bNF0gPT09IDAuMCAmJiBtWzVdID09PSAxLjAgJiYgbVs2XSA9PT0gMC4wICYmIG1b
N10gPT09IDAuMCAmJgorICAgICAgICAgICAgICAgIG1bOF0gPT09IDAuMCAmJiBtWzldID09PSAw
LjAgJiYgbVsxMF0gPT09IDEuMCAmJiBtWzExXSA9PT0gMC4wICYmCisgICAgICAgICAgICAgICAg
bVsxMl0gPT09IDAuMCAmJiBtWzEzXSA9PT0gMC4wICYmIG1bMTRdID09PSAwLjAgJiYgbVsxNV0g
PT09IDEuMCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2lzSWRlbnRpdHk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCBtYXRyaXggaXMgaWRl
bnRpdHkgYXMgYSB0ZXh0dXJlIG1hdHJpeCAoM3gyIHN0b3JlIGluIDR4NCkKKyAgICAgKiBAcmV0
dXJucyB0cnVlIGlzIHRoZSBtYXRyaXggaXMgdGhlIGlkZW50aXR5IG1hdHJpeAorICAgICAqLwor
ICAgIE1hdHJpeC5wcm90b3R5cGUuaXNJZGVudGl0eUFzM3gyID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAodGhpcy5faXNJZGVudGl0eTN4MkRpcnR5KSB7CisgICAgICAgICAgICB0aGlzLl9p
c0lkZW50aXR5M3gyRGlydHkgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9tWzBdICE9
PSAxLjAgfHwgdGhpcy5fbVs1XSAhPT0gMS4wIHx8IHRoaXMuX21bMTVdICE9PSAxLjApIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9pc0lkZW50aXR5M3gyID0gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9tWzFdICE9PSAwLjAgfHwgdGhpcy5fbVsyXSAh
PT0gMC4wIHx8IHRoaXMuX21bM10gIT09IDAuMCB8fAorICAgICAgICAgICAgICAgIHRoaXMuX21b
NF0gIT09IDAuMCB8fCB0aGlzLl9tWzZdICE9PSAwLjAgfHwgdGhpcy5fbVs3XSAhPT0gMC4wIHx8
CisgICAgICAgICAgICAgICAgdGhpcy5fbVs4XSAhPT0gMC4wIHx8IHRoaXMuX21bOV0gIT09IDAu
MCB8fCB0aGlzLl9tWzEwXSAhPT0gMC4wIHx8IHRoaXMuX21bMTFdICE9PSAwLjAgfHwKKyAgICAg
ICAgICAgICAgICB0aGlzLl9tWzEyXSAhPT0gMC4wIHx8IHRoaXMuX21bMTNdICE9PSAwLjAgfHwg
dGhpcy5fbVsxNF0gIT09IDAuMCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2lzSWRlbnRpdHkz
eDIgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2lzSWRlbnRpdHkzeDIgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzLl9pc0lkZW50aXR5M3gyOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgZGV0ZXJtaW5hbnQgb2YgdGhlIG1hdHJpeAorICAgICAqIEByZXR1
cm5zIHRoZSBtYXRyaXggZGV0ZXJtaW5hbnQKKyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBl
LmRldGVybWluYW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5faXNJZGVudGl0
eSA9PT0gdHJ1ZSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIG0gPSB0aGlzLl9tOworICAgICAgICB2YXIgbTAwID0gbVswXSwgbTAxID0gbVsxXSwgbTAy
ID0gbVsyXSwgbTAzID0gbVszXTsKKyAgICAgICAgdmFyIG0xMCA9IG1bNF0sIG0xMSA9IG1bNV0s
IG0xMiA9IG1bNl0sIG0xMyA9IG1bN107CisgICAgICAgIHZhciBtMjAgPSBtWzhdLCBtMjEgPSBt
WzldLCBtMjIgPSBtWzEwXSwgbTIzID0gbVsxMV07CisgICAgICAgIHZhciBtMzAgPSBtWzEyXSwg
bTMxID0gbVsxM10sIG0zMiA9IG1bMTRdLCBtMzMgPSBtWzE1XTsKKyAgICAgICAgLy8gaHR0cHM6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGFwbGFjZV9leHBhbnNpb24KKyAgICAgICAgLy8gdG8g
Y29tcHV0ZSB0aGUgZGV0ZXJybWluYW50IG9mIGEgNHg0IE1hdHJpeCB3ZSBjb21wdXRlIHRoZSBj
b2ZhY3RvcnMgb2YgYW55IHJvdyBvciBjb2x1bW4sCisgICAgICAgIC8vIHRoZW4gd2UgbXVsdGlw
bHkgZWFjaCBDb2ZhY3RvciBieSBpdHMgY29ycmVzcG9uZGluZyBtYXRyaXggdmFsdWUgYW5kIHN1
bSB0aGVtIGFsbCB0byBnZXQgdGhlIGRldGVybWluYW50CisgICAgICAgIC8vIENvZmFjdG9yKGks
IGopID0gc2lnbihpLGopICogZGV0KE1pbm9yKGksIGopKQorICAgICAgICAvLyB3aGVyZQorICAg
ICAgICAvLyAgLSBzaWduKGksaikgPSAoaStqKSAlIDIgPT09IDAgPyAxIDogLTEKKyAgICAgICAg
Ly8gIC0gTWlub3IoaSwgaikgaXMgdGhlIDN4MyBtYXRyaXggd2UgZ2V0IGJ5IHJlbW92aW5nIHJv
dyBpIGFuZCBjb2x1bW4gaiBmcm9tIGN1cnJlbnQgTWF0cml4CisgICAgICAgIC8vCisgICAgICAg
IC8vIEhlcmUgd2UgZG8gdGhhdCBmb3IgdGhlIDFzdCByb3cuCisgICAgICAgIHZhciBkZXRfMjJf
MzMgPSBtMjIgKiBtMzMgLSBtMzIgKiBtMjM7CisgICAgICAgIHZhciBkZXRfMjFfMzMgPSBtMjEg
KiBtMzMgLSBtMzEgKiBtMjM7CisgICAgICAgIHZhciBkZXRfMjFfMzIgPSBtMjEgKiBtMzIgLSBt
MzEgKiBtMjI7CisgICAgICAgIHZhciBkZXRfMjBfMzMgPSBtMjAgKiBtMzMgLSBtMzAgKiBtMjM7
CisgICAgICAgIHZhciBkZXRfMjBfMzIgPSBtMjAgKiBtMzIgLSBtMjIgKiBtMzA7CisgICAgICAg
IHZhciBkZXRfMjBfMzEgPSBtMjAgKiBtMzEgLSBtMzAgKiBtMjE7CisgICAgICAgIHZhciBjb2Zh
Y3RfMDAgPSArKG0xMSAqIGRldF8yMl8zMyAtIG0xMiAqIGRldF8yMV8zMyArIG0xMyAqIGRldF8y
MV8zMik7CisgICAgICAgIHZhciBjb2ZhY3RfMDEgPSAtKG0xMCAqIGRldF8yMl8zMyAtIG0xMiAq
IGRldF8yMF8zMyArIG0xMyAqIGRldF8yMF8zMik7CisgICAgICAgIHZhciBjb2ZhY3RfMDIgPSAr
KG0xMCAqIGRldF8yMV8zMyAtIG0xMSAqIGRldF8yMF8zMyArIG0xMyAqIGRldF8yMF8zMSk7Cisg
ICAgICAgIHZhciBjb2ZhY3RfMDMgPSAtKG0xMCAqIGRldF8yMV8zMiAtIG0xMSAqIGRldF8yMF8z
MiArIG0xMiAqIGRldF8yMF8zMSk7CisgICAgICAgIHJldHVybiBtMDAgKiBjb2ZhY3RfMDAgKyBt
MDEgKiBjb2ZhY3RfMDEgKyBtMDIgKiBjb2ZhY3RfMDIgKyBtMDMgKiBjb2ZhY3RfMDM7CisgICAg
fTsKKyAgICAvLyBNZXRob2RzCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbWF0cml4IGFz
IGEgRmxvYXQzMkFycmF5CisgICAgICogQHJldHVybnMgdGhlIG1hdHJpeCB1bmRlcmx5aW5nIGFy
cmF5CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5fbTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVy
bnMgdGhlIG1hdHJpeCBhcyBhIEZsb2F0MzJBcnJheQorICAgICogQHJldHVybnMgdGhlIG1hdHJp
eCB1bmRlcmx5aW5nIGFycmF5LgorICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS5hc0FycmF5
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fbTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEludmVydHMgdGhlIGN1cnJlbnQgbWF0cml4IGluIHBsYWNlCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgaW52ZXJ0ZWQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnBy
b3RvdHlwZS5pbnZlcnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuaW52ZXJ0VG9SZWYo
dGhpcyk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
cyBhbGwgdGhlIG1hdHJpeCBlbGVtZW50cyB0byB6ZXJvCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgTWF0cml4LkZyb21WYWx1ZXNUb1JlZigwLjAsIDAuMCwgMC4wLCAw
LjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4w
LCAwLjAsIHRoaXMpOworICAgICAgICB0aGlzLl91cGRhdGVJZGVudGl0eVN0YXR1cyhmYWxzZSk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyB0aGUg
Y3VycmVudCBtYXRyaXggd2l0aCBhIHNlY29uZCBvbmUKKyAgICAgKiBAcGFyYW0gb3RoZXIgZGVm
aW5lcyB0aGUgbWF0cml4IHRvIGFkZAorICAgICAqIEByZXR1cm5zIGEgbmV3IG1hdHJpeCBhcyB0
aGUgYWRkaXRpb24gb2YgdGhlIGN1cnJlbnQgbWF0cml4IGFuZCB0aGUgZ2l2ZW4gb25lCisgICAg
ICovCisgICAgTWF0cml4LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IG5ldyBNYXRyaXgoKTsKKyAgICAgICAgdGhpcy5hZGRUb1JlZihvdGhl
ciwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldHMgdGhlIGdpdmVuIG1hdHJpeCAicmVzdWx0IiB0byB0aGUgYWRkaXRpb24gb2YgdGhl
IGN1cnJlbnQgbWF0cml4IGFuZCB0aGUgZ2l2ZW4gb25lCisgICAgICogQHBhcmFtIG90aGVyIGRl
ZmluZXMgdGhlIG1hdHJpeCB0byBhZGQKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhl
IHRhcmdldCBtYXRyaXgKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtYXRyaXgKKyAgICAg
Ki8KKyAgICBNYXRyaXgucHJvdG90eXBlLmFkZFRvUmVmID0gZnVuY3Rpb24gKG90aGVyLCByZXN1
bHQpIHsKKyAgICAgICAgdmFyIG0gPSB0aGlzLl9tOworICAgICAgICB2YXIgcmVzdWx0TSA9IHJl
c3VsdC5fbTsKKyAgICAgICAgdmFyIG90aGVyTSA9IG90aGVyLm07CisgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCAxNjsgaW5kZXgrKykgeworICAgICAgICAgICAgcmVzdWx0TVtp
bmRleF0gPSBtW2luZGV4XSArIG90aGVyTVtpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgcmVz
dWx0Ll9tYXJrQXNVcGRhdGVkKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
LyoqCisgICAgICogQWRkcyBpbiBwbGFjZSB0aGUgZ2l2ZW4gbWF0cml4IHRvIHRoZSBjdXJyZW50
IG1hdHJpeAorICAgICAqIEBwYXJhbSBvdGhlciBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZAor
ICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgbWF0cml4CisgICAgICovCisgICAg
TWF0cml4LnByb3RvdHlwZS5hZGRUb1NlbGYgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAgICAg
dmFyIG0gPSB0aGlzLl9tOworICAgICAgICB2YXIgb3RoZXJNID0gb3RoZXIubTsKKyAgICAgICAg
Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IDE2OyBpbmRleCsrKSB7CisgICAgICAgICAgICBt
W2luZGV4XSArPSBvdGhlck1baW5kZXhdOworICAgICAgICB9CisgICAgICAgIHRoaXMuX21hcmtB
c1VwZGF0ZWQoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSBnaXZlbiBtYXRyaXggdG8gdGhlIGN1cnJlbnQgaW52ZXJ0ZWQgTWF0cml4Cisg
ICAgICogQHBhcmFtIG90aGVyIGRlZmluZXMgdGhlIHRhcmdldCBtYXRyaXgKKyAgICAgKiBAcmV0
dXJucyB0aGUgdW5tb2RpZmllZCBjdXJyZW50IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5w
cm90b3R5cGUuaW52ZXJ0VG9SZWYgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAgICAgaWYgKHRo
aXMuX2lzSWRlbnRpdHkgPT09IHRydWUpIHsKKyAgICAgICAgICAgIE1hdHJpeC5JZGVudGl0eVRv
UmVmKG90aGVyKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAg
IC8vIHRoZSBpbnZlcnNlIG9mIGEgTWF0cml4IGlzIHRoZSB0cmFuc3Bvc2Ugb2YgY29mYWN0b3Ig
bWF0cml4IGRpdmlkZWQgYnkgdGhlIGRldGVybWluYW50CisgICAgICAgIHZhciBtID0gdGhpcy5f
bTsKKyAgICAgICAgdmFyIG0wMCA9IG1bMF0sIG0wMSA9IG1bMV0sIG0wMiA9IG1bMl0sIG0wMyA9
IG1bM107CisgICAgICAgIHZhciBtMTAgPSBtWzRdLCBtMTEgPSBtWzVdLCBtMTIgPSBtWzZdLCBt
MTMgPSBtWzddOworICAgICAgICB2YXIgbTIwID0gbVs4XSwgbTIxID0gbVs5XSwgbTIyID0gbVsx
MF0sIG0yMyA9IG1bMTFdOworICAgICAgICB2YXIgbTMwID0gbVsxMl0sIG0zMSA9IG1bMTNdLCBt
MzIgPSBtWzE0XSwgbTMzID0gbVsxNV07CisgICAgICAgIHZhciBkZXRfMjJfMzMgPSBtMjIgKiBt
MzMgLSBtMzIgKiBtMjM7CisgICAgICAgIHZhciBkZXRfMjFfMzMgPSBtMjEgKiBtMzMgLSBtMzEg
KiBtMjM7CisgICAgICAgIHZhciBkZXRfMjFfMzIgPSBtMjEgKiBtMzIgLSBtMzEgKiBtMjI7Cisg
ICAgICAgIHZhciBkZXRfMjBfMzMgPSBtMjAgKiBtMzMgLSBtMzAgKiBtMjM7CisgICAgICAgIHZh
ciBkZXRfMjBfMzIgPSBtMjAgKiBtMzIgLSBtMjIgKiBtMzA7CisgICAgICAgIHZhciBkZXRfMjBf
MzEgPSBtMjAgKiBtMzEgLSBtMzAgKiBtMjE7CisgICAgICAgIHZhciBjb2ZhY3RfMDAgPSArKG0x
MSAqIGRldF8yMl8zMyAtIG0xMiAqIGRldF8yMV8zMyArIG0xMyAqIGRldF8yMV8zMik7CisgICAg
ICAgIHZhciBjb2ZhY3RfMDEgPSAtKG0xMCAqIGRldF8yMl8zMyAtIG0xMiAqIGRldF8yMF8zMyAr
IG0xMyAqIGRldF8yMF8zMik7CisgICAgICAgIHZhciBjb2ZhY3RfMDIgPSArKG0xMCAqIGRldF8y
MV8zMyAtIG0xMSAqIGRldF8yMF8zMyArIG0xMyAqIGRldF8yMF8zMSk7CisgICAgICAgIHZhciBj
b2ZhY3RfMDMgPSAtKG0xMCAqIGRldF8yMV8zMiAtIG0xMSAqIGRldF8yMF8zMiArIG0xMiAqIGRl
dF8yMF8zMSk7CisgICAgICAgIHZhciBkZXQgPSBtMDAgKiBjb2ZhY3RfMDAgKyBtMDEgKiBjb2Zh
Y3RfMDEgKyBtMDIgKiBjb2ZhY3RfMDIgKyBtMDMgKiBjb2ZhY3RfMDM7CisgICAgICAgIGlmIChk
ZXQgPT09IDApIHsKKyAgICAgICAgICAgIC8vIG5vdCBpbnZlcnRpYmxlCisgICAgICAgICAgICBv
dGhlci5jb3B5RnJvbSh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9
CisgICAgICAgIHZhciBkZXRJbnYgPSAxIC8gZGV0OworICAgICAgICB2YXIgZGV0XzEyXzMzID0g
bTEyICogbTMzIC0gbTMyICogbTEzOworICAgICAgICB2YXIgZGV0XzExXzMzID0gbTExICogbTMz
IC0gbTMxICogbTEzOworICAgICAgICB2YXIgZGV0XzExXzMyID0gbTExICogbTMyIC0gbTMxICog
bTEyOworICAgICAgICB2YXIgZGV0XzEwXzMzID0gbTEwICogbTMzIC0gbTMwICogbTEzOworICAg
ICAgICB2YXIgZGV0XzEwXzMyID0gbTEwICogbTMyIC0gbTMwICogbTEyOworICAgICAgICB2YXIg
ZGV0XzEwXzMxID0gbTEwICogbTMxIC0gbTMwICogbTExOworICAgICAgICB2YXIgZGV0XzEyXzIz
ID0gbTEyICogbTIzIC0gbTIyICogbTEzOworICAgICAgICB2YXIgZGV0XzExXzIzID0gbTExICog
bTIzIC0gbTIxICogbTEzOworICAgICAgICB2YXIgZGV0XzExXzIyID0gbTExICogbTIyIC0gbTIx
ICogbTEyOworICAgICAgICB2YXIgZGV0XzEwXzIzID0gbTEwICogbTIzIC0gbTIwICogbTEzOwor
ICAgICAgICB2YXIgZGV0XzEwXzIyID0gbTEwICogbTIyIC0gbTIwICogbTEyOworICAgICAgICB2
YXIgZGV0XzEwXzIxID0gbTEwICogbTIxIC0gbTIwICogbTExOworICAgICAgICB2YXIgY29mYWN0
XzEwID0gLShtMDEgKiBkZXRfMjJfMzMgLSBtMDIgKiBkZXRfMjFfMzMgKyBtMDMgKiBkZXRfMjFf
MzIpOworICAgICAgICB2YXIgY29mYWN0XzExID0gKyhtMDAgKiBkZXRfMjJfMzMgLSBtMDIgKiBk
ZXRfMjBfMzMgKyBtMDMgKiBkZXRfMjBfMzIpOworICAgICAgICB2YXIgY29mYWN0XzEyID0gLSht
MDAgKiBkZXRfMjFfMzMgLSBtMDEgKiBkZXRfMjBfMzMgKyBtMDMgKiBkZXRfMjBfMzEpOworICAg
ICAgICB2YXIgY29mYWN0XzEzID0gKyhtMDAgKiBkZXRfMjFfMzIgLSBtMDEgKiBkZXRfMjBfMzIg
KyBtMDIgKiBkZXRfMjBfMzEpOworICAgICAgICB2YXIgY29mYWN0XzIwID0gKyhtMDEgKiBkZXRf
MTJfMzMgLSBtMDIgKiBkZXRfMTFfMzMgKyBtMDMgKiBkZXRfMTFfMzIpOworICAgICAgICB2YXIg
Y29mYWN0XzIxID0gLShtMDAgKiBkZXRfMTJfMzMgLSBtMDIgKiBkZXRfMTBfMzMgKyBtMDMgKiBk
ZXRfMTBfMzIpOworICAgICAgICB2YXIgY29mYWN0XzIyID0gKyhtMDAgKiBkZXRfMTFfMzMgLSBt
MDEgKiBkZXRfMTBfMzMgKyBtMDMgKiBkZXRfMTBfMzEpOworICAgICAgICB2YXIgY29mYWN0XzIz
ID0gLShtMDAgKiBkZXRfMTFfMzIgLSBtMDEgKiBkZXRfMTBfMzIgKyBtMDIgKiBkZXRfMTBfMzEp
OworICAgICAgICB2YXIgY29mYWN0XzMwID0gLShtMDEgKiBkZXRfMTJfMjMgLSBtMDIgKiBkZXRf
MTFfMjMgKyBtMDMgKiBkZXRfMTFfMjIpOworICAgICAgICB2YXIgY29mYWN0XzMxID0gKyhtMDAg
KiBkZXRfMTJfMjMgLSBtMDIgKiBkZXRfMTBfMjMgKyBtMDMgKiBkZXRfMTBfMjIpOworICAgICAg
ICB2YXIgY29mYWN0XzMyID0gLShtMDAgKiBkZXRfMTFfMjMgLSBtMDEgKiBkZXRfMTBfMjMgKyBt
MDMgKiBkZXRfMTBfMjEpOworICAgICAgICB2YXIgY29mYWN0XzMzID0gKyhtMDAgKiBkZXRfMTFf
MjIgLSBtMDEgKiBkZXRfMTBfMjIgKyBtMDIgKiBkZXRfMTBfMjEpOworICAgICAgICBNYXRyaXgu
RnJvbVZhbHVlc1RvUmVmKGNvZmFjdF8wMCAqIGRldEludiwgY29mYWN0XzEwICogZGV0SW52LCBj
b2ZhY3RfMjAgKiBkZXRJbnYsIGNvZmFjdF8zMCAqIGRldEludiwgY29mYWN0XzAxICogZGV0SW52
LCBjb2ZhY3RfMTEgKiBkZXRJbnYsIGNvZmFjdF8yMSAqIGRldEludiwgY29mYWN0XzMxICogZGV0
SW52LCBjb2ZhY3RfMDIgKiBkZXRJbnYsIGNvZmFjdF8xMiAqIGRldEludiwgY29mYWN0XzIyICog
ZGV0SW52LCBjb2ZhY3RfMzIgKiBkZXRJbnYsIGNvZmFjdF8wMyAqIGRldEludiwgY29mYWN0XzEz
ICogZGV0SW52LCBjb2ZhY3RfMjMgKiBkZXRJbnYsIGNvZmFjdF8zMyAqIGRldEludiwgb3RoZXIp
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIGFkZCBhIHZh
bHVlIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgTWF0cml4CisgICAg
ICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgdmFsdWUgd2l0aGluIHRoZSBtYXRyaXgu
IGJldHdlZW4gMCBhbmQgMTUuCisgICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBiZSBh
ZGRlZAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgbWF0cml4CisgICAgICov
CisgICAgTWF0cml4LnByb3RvdHlwZS5hZGRBdEluZGV4ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1
ZSkgeworICAgICAgICB0aGlzLl9tW2luZGV4XSArPSB2YWx1ZTsKKyAgICAgICAgdGhpcy5fbWFy
a0FzVXBkYXRlZCgpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIG11dGlwbHkgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBNYXRyaXgg
YnkgYSB2YWx1ZQorICAgICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIHZhbHVlIHdp
dGhpbiB0aGUgbWF0cml4LiBiZXR3ZWVuIDAgYW5kIDE1LgorICAgICAqIEBwYXJhbSB2YWx1ZSB0
aGUgdmFsdWUgdG8gYmUgYWRkZWQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVk
IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUubXVsdGlwbHlBdEluZGV4ID0g
ZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkgeworICAgICAgICB0aGlzLl9tW2luZGV4XSAqPSB2YWx1
ZTsKKyAgICAgICAgdGhpcy5fbWFya0FzVXBkYXRlZCgpOworICAgICAgICByZXR1cm4gdGhpczsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEluc2VydHMgdGhlIHRyYW5zbGF0aW9uIHZlY3RvciAo
dXNpbmcgMyBmbG9hdHMpIGluIHRoZSBjdXJyZW50IG1hdHJpeAorICAgICAqIEBwYXJhbSB4IGRl
ZmluZXMgdGhlIDFzdCBjb21wb25lbnQgb2YgdGhlIHRyYW5zbGF0aW9uCisgICAgICogQHBhcmFt
IHkgZGVmaW5lcyB0aGUgMm5kIGNvbXBvbmVudCBvZiB0aGUgdHJhbnNsYXRpb24KKyAgICAgKiBA
cGFyYW0geiBkZWZpbmVzIHRoZSAzcmQgY29tcG9uZW50IG9mIHRoZSB0cmFuc2xhdGlvbgorICAg
ICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgbWF0cml4CisgICAgICovCisgICAgTWF0
cml4LnByb3RvdHlwZS5zZXRUcmFuc2xhdGlvbkZyb21GbG9hdHMgPSBmdW5jdGlvbiAoeCwgeSwg
eikgeworICAgICAgICB0aGlzLl9tWzEyXSA9IHg7CisgICAgICAgIHRoaXMuX21bMTNdID0geTsK
KyAgICAgICAgdGhpcy5fbVsxNF0gPSB6OworICAgICAgICB0aGlzLl9tYXJrQXNVcGRhdGVkKCk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyB0aGUg
dHJhbnNsYXRpb24gdmVjdG9yICh1c2luZyAzIGZsb2F0cykgaW4gdGhlIGN1cnJlbnQgbWF0cml4
CisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgMXN0IGNvbXBvbmVudCBvZiB0aGUgdHJhbnNs
YXRpb24KKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSAybmQgY29tcG9uZW50IG9mIHRoZSB0
cmFuc2xhdGlvbgorICAgICAqIEBwYXJhbSB6IGRlZmluZXMgdGhlIDNyZCBjb21wb25lbnQgb2Yg
dGhlIHRyYW5zbGF0aW9uCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBtYXRy
aXgKKyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLmFkZFRyYW5zbGF0aW9uRnJvbUZsb2F0
cyA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7CisgICAgICAgIHRoaXMuX21bMTJdICs9IHg7CisgICAg
ICAgIHRoaXMuX21bMTNdICs9IHk7CisgICAgICAgIHRoaXMuX21bMTRdICs9IHo7CisgICAgICAg
IHRoaXMuX21hcmtBc1VwZGF0ZWQoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBJbnNlcnRzIHRoZSB0cmFuc2xhdGlvbiB2ZWN0b3IgaW4gdGhlIGN1cnJl
bnQgbWF0cml4CisgICAgICogQHBhcmFtIHZlY3RvcjMgZGVmaW5lcyB0aGUgdHJhbnNsYXRpb24g
dG8gaW5zZXJ0CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBtYXRyaXgKKyAg
ICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLnNldFRyYW5zbGF0aW9uID0gZnVuY3Rpb24gKHZl
Y3RvcjMpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2V0VHJhbnNsYXRpb25Gcm9tRmxvYXRzKHZl
Y3RvcjMueCwgdmVjdG9yMy55LCB2ZWN0b3IzLnopOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0cyB0aGUgdHJhbnNsYXRpb24gdmFsdWUgb2YgdGhlIGN1cnJlbnQgbWF0cml4CisgICAgICog
QHJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgZXh0cmFjdGVkIHRyYW5zbGF0aW9uIGZyb20g
dGhlIG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUuZ2V0VHJhbnNsYXRpb24g
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyh0aGlzLl9tWzEyXSwg
dGhpcy5fbVsxM10sIHRoaXMuX21bMTRdKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEZpbGwg
YSBWZWN0b3IzIHdpdGggdGhlIGV4dHJhY3RlZCB0cmFuc2xhdGlvbiBmcm9tIHRoZSBtYXRyaXgK
KyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8gc3RvcmUg
dGhlIHRyYW5zbGF0aW9uCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWF0cml4CisgICAg
ICovCisgICAgTWF0cml4LnByb3RvdHlwZS5nZXRUcmFuc2xhdGlvblRvUmVmID0gZnVuY3Rpb24g
KHJlc3VsdCkgeworICAgICAgICByZXN1bHQueCA9IHRoaXMuX21bMTJdOworICAgICAgICByZXN1
bHQueSA9IHRoaXMuX21bMTNdOworICAgICAgICByZXN1bHQueiA9IHRoaXMuX21bMTRdOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSByb3RhdGlv
biBhbmQgc2NhbGluZyBwYXJ0IGZyb20gdGhlIG1hdHJpeAorICAgICAqIEByZXR1cm5zIHRoZSB1
cGRhdGVkIG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUucmVtb3ZlUm90YXRp
b25BbmRTY2FsaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbSA9IHRoaXMubTsKKyAg
ICAgICAgTWF0cml4LkZyb21WYWx1ZXNUb1JlZigxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4w
LCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMCwgMC4wLCBtWzEyXSwgbVsxM10sIG1bMTRdLCBtWzE1
XSwgdGhpcyk7CisgICAgICAgIHRoaXMuX3VwZGF0ZUlkZW50aXR5U3RhdHVzKG1bMTJdID09PSAw
ICYmIG1bMTNdID09PSAwICYmIG1bMTRdID09PSAwICYmIG1bMTVdID09PSAxKTsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNdWx0aXBseSB0d28gbWF0cmlj
ZXMKKyAgICAgKiBAcGFyYW0gb3RoZXIgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAg
KiBAcmV0dXJucyBhIG5ldyBtYXRyaXggc2V0IHdpdGggdGhlIG11bHRpcGxpY2F0aW9uIHJlc3Vs
dCBvZiB0aGUgY3VycmVudCBNYXRyaXggYW5kIHRoZSBnaXZlbiBvbmUKKyAgICAgKi8KKyAgICBN
YXRyaXgucHJvdG90eXBlLm11bHRpcGx5ID0gZnVuY3Rpb24gKG90aGVyKSB7CisgICAgICAgIHZh
ciByZXN1bHQgPSBuZXcgTWF0cml4KCk7CisgICAgICAgIHRoaXMubXVsdGlwbHlUb1JlZihvdGhl
ciwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENvcHkgdGhlIGN1cnJlbnQgbWF0cml4IGZyb20gdGhlIGdpdmVuIG9uZQorICAgICAqIEBw
YXJhbSBvdGhlciBkZWZpbmVzIHRoZSBzb3VyY2UgbWF0cml4CisgICAgICogQHJldHVybnMgdGhl
IGN1cnJlbnQgdXBkYXRlZCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLmNv
cHlGcm9tID0gZnVuY3Rpb24gKG90aGVyKSB7CisgICAgICAgIG90aGVyLmNvcHlUb0FycmF5KHRo
aXMuX20pOworICAgICAgICB2YXIgbyA9IG90aGVyOworICAgICAgICB0aGlzLl91cGRhdGVJZGVu
dGl0eVN0YXR1cyhvLl9pc0lkZW50aXR5LCBvLl9pc0lkZW50aXR5RGlydHksIG8uX2lzSWRlbnRp
dHkzeDIsIG8uX2lzSWRlbnRpdHkzeDJEaXJ0eSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogUG9wdWxhdGVzIHRoZSBnaXZlbiBhcnJheSBmcm9tIHRoZSBz
dGFydGluZyBpbmRleCB3aXRoIHRoZSBjdXJyZW50IG1hdHJpeCB2YWx1ZXMKKyAgICAgKiBAcGFy
YW0gYXJyYXkgZGVmaW5lcyB0aGUgdGFyZ2V0IGFycmF5CisgICAgICogQHBhcmFtIG9mZnNldCBk
ZWZpbmVzIHRoZSBvZmZzZXQgaW4gdGhlIHRhcmdldCBhcnJheSB3aGVyZSB0byBzdGFydCBzdG9y
aW5nIHZhbHVlcworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1hdHJpeAorICAgICAqLwor
ICAgIE1hdHJpeC5wcm90b3R5cGUuY29weVRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXksIG9mZnNl
dCkgeworICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsgb2Zmc2V0ID0gMDsgfQorICAg
ICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgMTY7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHRoaXMuX21baW5kZXhdOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2
ZW4gbWF0cml4ICJyZXN1bHQiIHdpdGggdGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBvZiB0aGUg
Y3VycmVudCBNYXRyaXggYW5kIHRoZSBnaXZlbiBvbmUKKyAgICAgKiBAcGFyYW0gb3RoZXIgZGVm
aW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhl
IG1hdHJpeCB3aGVyZSB0byBzdG9yZSB0aGUgbXVsdGlwbGljYXRpb24KKyAgICAgKiBAcmV0dXJu
cyB0aGUgY3VycmVudCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLm11bHRp
cGx5VG9SZWYgPSBmdW5jdGlvbiAob3RoZXIsIHJlc3VsdCkgeworICAgICAgICBpZiAodGhpcy5f
aXNJZGVudGl0eSkgeworICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKG90aGVyKTsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmIChvdGhlci5faXNJZGVu
dGl0eSkgeworICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKHRoaXMpOworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5tdWx0aXBseVRvQXJyYXkob3Ro
ZXIsIHJlc3VsdC5fbSwgMCk7CisgICAgICAgIHJlc3VsdC5fbWFya0FzVXBkYXRlZCgpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIEZsb2F0
MzJBcnJheSAicmVzdWx0IiBmcm9tIHRoZSBnaXZlbiBpbmRleCAib2Zmc2V0IiB3aXRoIHRoZSBt
dWx0aXBsaWNhdGlvbiBvZiB0aGUgY3VycmVudCBtYXRyaXggYW5kIHRoZSBnaXZlbiBvbmUKKyAg
ICAgKiBAcGFyYW0gb3RoZXIgZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgKiBAcGFy
YW0gcmVzdWx0IGRlZmluZXMgdGhlIGFycmF5IHdoZXJlIHRvIHN0b3JlIHRoZSBtdWx0aXBsaWNh
dGlvbgorICAgICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGluIHRoZSB0YXJn
ZXQgYXJyYXkgd2hlcmUgdG8gc3RhcnQgc3RvcmluZyB2YWx1ZXMKKyAgICAgKiBAcmV0dXJucyB0
aGUgY3VycmVudCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLm11bHRpcGx5
VG9BcnJheSA9IGZ1bmN0aW9uIChvdGhlciwgcmVzdWx0LCBvZmZzZXQpIHsKKyAgICAgICAgdmFy
IG0gPSB0aGlzLl9tOworICAgICAgICB2YXIgb3RoZXJNID0gb3RoZXIubTsKKyAgICAgICAgdmFy
IHRtMCA9IG1bMF0sIHRtMSA9IG1bMV0sIHRtMiA9IG1bMl0sIHRtMyA9IG1bM107CisgICAgICAg
IHZhciB0bTQgPSBtWzRdLCB0bTUgPSBtWzVdLCB0bTYgPSBtWzZdLCB0bTcgPSBtWzddOworICAg
ICAgICB2YXIgdG04ID0gbVs4XSwgdG05ID0gbVs5XSwgdG0xMCA9IG1bMTBdLCB0bTExID0gbVsx
MV07CisgICAgICAgIHZhciB0bTEyID0gbVsxMl0sIHRtMTMgPSBtWzEzXSwgdG0xNCA9IG1bMTRd
LCB0bTE1ID0gbVsxNV07CisgICAgICAgIHZhciBvbTAgPSBvdGhlck1bMF0sIG9tMSA9IG90aGVy
TVsxXSwgb20yID0gb3RoZXJNWzJdLCBvbTMgPSBvdGhlck1bM107CisgICAgICAgIHZhciBvbTQg
PSBvdGhlck1bNF0sIG9tNSA9IG90aGVyTVs1XSwgb202ID0gb3RoZXJNWzZdLCBvbTcgPSBvdGhl
ck1bN107CisgICAgICAgIHZhciBvbTggPSBvdGhlck1bOF0sIG9tOSA9IG90aGVyTVs5XSwgb20x
MCA9IG90aGVyTVsxMF0sIG9tMTEgPSBvdGhlck1bMTFdOworICAgICAgICB2YXIgb20xMiA9IG90
aGVyTVsxMl0sIG9tMTMgPSBvdGhlck1bMTNdLCBvbTE0ID0gb3RoZXJNWzE0XSwgb20xNSA9IG90
aGVyTVsxNV07CisgICAgICAgIHJlc3VsdFtvZmZzZXRdID0gdG0wICogb20wICsgdG0xICogb200
ICsgdG0yICogb204ICsgdG0zICogb20xMjsKKyAgICAgICAgcmVzdWx0W29mZnNldCArIDFdID0g
dG0wICogb20xICsgdG0xICogb201ICsgdG0yICogb205ICsgdG0zICogb20xMzsKKyAgICAgICAg
cmVzdWx0W29mZnNldCArIDJdID0gdG0wICogb20yICsgdG0xICogb202ICsgdG0yICogb20xMCAr
IHRtMyAqIG9tMTQ7CisgICAgICAgIHJlc3VsdFtvZmZzZXQgKyAzXSA9IHRtMCAqIG9tMyArIHRt
MSAqIG9tNyArIHRtMiAqIG9tMTEgKyB0bTMgKiBvbTE1OworICAgICAgICByZXN1bHRbb2Zmc2V0
ICsgNF0gPSB0bTQgKiBvbTAgKyB0bTUgKiBvbTQgKyB0bTYgKiBvbTggKyB0bTcgKiBvbTEyOwor
ICAgICAgICByZXN1bHRbb2Zmc2V0ICsgNV0gPSB0bTQgKiBvbTEgKyB0bTUgKiBvbTUgKyB0bTYg
KiBvbTkgKyB0bTcgKiBvbTEzOworICAgICAgICByZXN1bHRbb2Zmc2V0ICsgNl0gPSB0bTQgKiBv
bTIgKyB0bTUgKiBvbTYgKyB0bTYgKiBvbTEwICsgdG03ICogb20xNDsKKyAgICAgICAgcmVzdWx0
W29mZnNldCArIDddID0gdG00ICogb20zICsgdG01ICogb203ICsgdG02ICogb20xMSArIHRtNyAq
IG9tMTU7CisgICAgICAgIHJlc3VsdFtvZmZzZXQgKyA4XSA9IHRtOCAqIG9tMCArIHRtOSAqIG9t
NCArIHRtMTAgKiBvbTggKyB0bTExICogb20xMjsKKyAgICAgICAgcmVzdWx0W29mZnNldCArIDld
ID0gdG04ICogb20xICsgdG05ICogb201ICsgdG0xMCAqIG9tOSArIHRtMTEgKiBvbTEzOworICAg
ICAgICByZXN1bHRbb2Zmc2V0ICsgMTBdID0gdG04ICogb20yICsgdG05ICogb202ICsgdG0xMCAq
IG9tMTAgKyB0bTExICogb20xNDsKKyAgICAgICAgcmVzdWx0W29mZnNldCArIDExXSA9IHRtOCAq
IG9tMyArIHRtOSAqIG9tNyArIHRtMTAgKiBvbTExICsgdG0xMSAqIG9tMTU7CisgICAgICAgIHJl
c3VsdFtvZmZzZXQgKyAxMl0gPSB0bTEyICogb20wICsgdG0xMyAqIG9tNCArIHRtMTQgKiBvbTgg
KyB0bTE1ICogb20xMjsKKyAgICAgICAgcmVzdWx0W29mZnNldCArIDEzXSA9IHRtMTIgKiBvbTEg
KyB0bTEzICogb201ICsgdG0xNCAqIG9tOSArIHRtMTUgKiBvbTEzOworICAgICAgICByZXN1bHRb
b2Zmc2V0ICsgMTRdID0gdG0xMiAqIG9tMiArIHRtMTMgKiBvbTYgKyB0bTE0ICogb20xMCArIHRt
MTUgKiBvbTE0OworICAgICAgICByZXN1bHRbb2Zmc2V0ICsgMTVdID0gdG0xMiAqIG9tMyArIHRt
MTMgKiBvbTcgKyB0bTE0ICogb20xMSArIHRtMTUgKiBvbTE1OworICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrIGVxdWFsaXR5IGJldHdlZW4gdGhpcyBt
YXRyaXggYW5kIGEgc2Vjb25kIG9uZQorICAgICAqIEBwYXJhbSB2YWx1ZSBkZWZpbmVzIHRoZSBz
ZWNvbmQgbWF0cml4IHRvIGNvbXBhcmUKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlzIHRoZSBjdXJy
ZW50IG1hdHJpeCBhbmQgdGhlIGdpdmVuIG9uZSB2YWx1ZXMgYXJlIHN0cmljdGx5IGVxdWFsCisg
ICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgdmFyIG90aGVyID0gdmFsdWU7CisgICAgICAgIGlmICghb3RoZXIpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5faXNJZGVu
dGl0eSB8fCBvdGhlci5faXNJZGVudGl0eSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0lk
ZW50aXR5RGlydHkgJiYgIW90aGVyLl9pc0lkZW50aXR5RGlydHkpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5faXNJZGVudGl0eSAmJiBvdGhlci5faXNJZGVudGl0eTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgbSA9IHRoaXMubTsKKyAgICAgICAgdmFyIG9t
ID0gb3RoZXIubTsKKyAgICAgICAgcmV0dXJuIChtWzBdID09PSBvbVswXSAmJiBtWzFdID09PSBv
bVsxXSAmJiBtWzJdID09PSBvbVsyXSAmJiBtWzNdID09PSBvbVszXSAmJgorICAgICAgICAgICAg
bVs0XSA9PT0gb21bNF0gJiYgbVs1XSA9PT0gb21bNV0gJiYgbVs2XSA9PT0gb21bNl0gJiYgbVs3
XSA9PT0gb21bN10gJiYKKyAgICAgICAgICAgIG1bOF0gPT09IG9tWzhdICYmIG1bOV0gPT09IG9t
WzldICYmIG1bMTBdID09PSBvbVsxMF0gJiYgbVsxMV0gPT09IG9tWzExXSAmJgorICAgICAgICAg
ICAgbVsxMl0gPT09IG9tWzEyXSAmJiBtWzEzXSA9PT0gb21bMTNdICYmIG1bMTRdID09PSBvbVsx
NF0gJiYgbVsxNV0gPT09IG9tWzE1XSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZSB0
aGUgY3VycmVudCBtYXRyaXgKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBtYXRyaXggZnJvbSB0aGUg
Y3VycmVudCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpOworICAgICAgICBt
YXRyaXguY29weUZyb20odGhpcyk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IG1hdHJpeCBjbGFz
cworICAgICAqIEByZXR1cm5zIHRoZSBzdHJpbmcgIk1hdHJpeCIKKyAgICAgKi8KKyAgICBNYXRy
aXgucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
ICJNYXRyaXgiOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgaGFzaCBjb2RlIG9m
IHRoZSBjdXJyZW50IG1hdHJpeAorICAgICAqIEByZXR1cm5zIHRoZSBoYXNoIGNvZGUKKyAgICAg
Ki8KKyAgICBNYXRyaXgucHJvdG90eXBlLmdldEhhc2hDb2RlID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgaGFzaCA9IHRoaXMuX21bMF0gfCAwOworICAgICAgICBmb3IgKHZhciBpID0gMTsg
aSA8IDE2OyBpKyspIHsKKyAgICAgICAgICAgIGhhc2ggPSAoaGFzaCAqIDM5NykgXiAodGhpcy5f
bVtpXSB8IDApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNoOworICAgIH07CisgICAg
LyoqCisgICAgICogRGVjb21wb3NlcyB0aGUgY3VycmVudCBNYXRyaXggaW50byBhIHRyYW5zbGF0
aW9uLCByb3RhdGlvbiBhbmQgc2NhbGluZyBjb21wb25lbnRzCisgICAgICogQHBhcmFtIHNjYWxl
IGRlZmluZXMgdGhlIHNjYWxlIHZlY3RvcjMgZ2l2ZW4gYXMgYSByZWZlcmVuY2UgdG8gdXBkYXRl
CisgICAgICogQHBhcmFtIHJvdGF0aW9uIGRlZmluZXMgdGhlIHJvdGF0aW9uIHF1YXRlcm5pb24g
Z2l2ZW4gYXMgYSByZWZlcmVuY2UgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIHRyYW5zbGF0aW9u
IGRlZmluZXMgdGhlIHRyYW5zbGF0aW9uIHZlY3RvcjMgZ2l2ZW4gYXMgYSByZWZlcmVuY2UgdG8g
dXBkYXRlCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwK
KyAgICAgKi8KKyAgICBNYXRyaXgucHJvdG90eXBlLmRlY29tcG9zZSA9IGZ1bmN0aW9uIChzY2Fs
ZSwgcm90YXRpb24sIHRyYW5zbGF0aW9uKSB7CisgICAgICAgIGlmICh0aGlzLl9pc0lkZW50aXR5
KSB7CisgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0cmFu
c2xhdGlvbi5zZXRBbGwoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2NhbGUp
IHsKKyAgICAgICAgICAgICAgICBzY2FsZS5zZXRBbGwoMSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAocm90YXRpb24pIHsKKyAgICAgICAgICAgICAgICByb3RhdGlvbi5jb3B5RnJv
bUZsb2F0cygwLCAwLCAwLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHZhciBtID0gdGhpcy5fbTsKKyAgICAgICAgaWYgKHRy
YW5zbGF0aW9uKSB7CisgICAgICAgICAgICB0cmFuc2xhdGlvbi5jb3B5RnJvbUZsb2F0cyhtWzEy
XSwgbVsxM10sIG1bMTRdKTsKKyAgICAgICAgfQorICAgICAgICBzY2FsZSA9IHNjYWxlIHx8IE1h
dGhUbXAuVmVjdG9yM1swXTsKKyAgICAgICAgc2NhbGUueCA9IE1hdGguc3FydChtWzBdICogbVsw
XSArIG1bMV0gKiBtWzFdICsgbVsyXSAqIG1bMl0pOworICAgICAgICBzY2FsZS55ID0gTWF0aC5z
cXJ0KG1bNF0gKiBtWzRdICsgbVs1XSAqIG1bNV0gKyBtWzZdICogbVs2XSk7CisgICAgICAgIHNj
YWxlLnogPSBNYXRoLnNxcnQobVs4XSAqIG1bOF0gKyBtWzldICogbVs5XSArIG1bMTBdICogbVsx
MF0pOworICAgICAgICBpZiAodGhpcy5kZXRlcm1pbmFudCgpIDw9IDApIHsKKyAgICAgICAgICAg
IHNjYWxlLnkgKj0gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjYWxlLnggPT09IDAgfHwg
c2NhbGUueSA9PT0gMCB8fCBzY2FsZS56ID09PSAwKSB7CisgICAgICAgICAgICBpZiAocm90YXRp
b24pIHsKKyAgICAgICAgICAgICAgICByb3RhdGlvbi5jb3B5RnJvbUZsb2F0cygwLjAsIDAuMCwg
MC4wLCAxLjApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGlmIChyb3RhdGlvbikgeworICAgICAgICAgICAgdmFyIHN4ID0gMSAv
IHNjYWxlLngsIHN5ID0gMSAvIHNjYWxlLnksIHN6ID0gMSAvIHNjYWxlLno7CisgICAgICAgICAg
ICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKG1bMF0gKiBzeCwgbVsxXSAqIHN4LCBtWzJdICogc3gs
IDAuMCwgbVs0XSAqIHN5LCBtWzVdICogc3ksIG1bNl0gKiBzeSwgMC4wLCBtWzhdICogc3osIG1b
OV0gKiBzeiwgbVsxMF0gKiBzeiwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIE1hdGhUbXAuTWF0
cml4WzBdKTsKKyAgICAgICAgICAgIFF1YXRlcm5pb24uRnJvbVJvdGF0aW9uTWF0cml4VG9SZWYo
TWF0aFRtcC5NYXRyaXhbMF0sIHJvdGF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgc3BlY2lmaWMgcm93IG9mIHRoZSBt
YXRyaXgKKyAgICAgKiBAcGFyYW0gaW5kZXggZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHRoZSByb3cg
dG8gZ2V0CisgICAgICogQHJldHVybnMgdGhlIGluZGV4LXRoIHJvdyBvZiB0aGUgY3VycmVudCBt
YXRyaXggYXMgYSBuZXcgVmVjdG9yNAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUuZ2V0
Um93ID0gZnVuY3Rpb24gKGluZGV4KSB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXgg
PiAzKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB2YXIg
aSA9IGluZGV4ICogNDsKKyAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3I0KHRoaXMuX21baSArIDBd
LCB0aGlzLl9tW2kgKyAxXSwgdGhpcy5fbVtpICsgMl0sIHRoaXMuX21baSArIDNdKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGluZGV4LXRoIHJvdyBvZiB0aGUgY3VycmVudCBt
YXRyaXggdG8gdGhlIHZlY3RvcjQgdmFsdWVzCisgICAgICogQHBhcmFtIGluZGV4IGRlZmluZXMg
dGhlIG51bWJlciBvZiB0aGUgcm93IHRvIHNldAorICAgICAqIEBwYXJhbSByb3cgZGVmaW5lcyB0
aGUgdGFyZ2V0IHZlY3RvcjQKKyAgICAgKiBAcmV0dXJucyB0aGUgdXBkYXRlZCBjdXJyZW50IG1h
dHJpeAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUuc2V0Um93ID0gZnVuY3Rpb24gKGlu
ZGV4LCByb3cpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2V0Um93RnJvbUZsb2F0cyhpbmRleCwg
cm93LngsIHJvdy55LCByb3cueiwgcm93LncpOworICAgIH07CisgICAgLyoqCisgICAgICogQ29t
cHV0ZSB0aGUgdHJhbnNwb3NlIG9mIHRoZSBtYXRyaXgKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3
IHRyYW5zcG9zZWQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS50cmFuc3Bv
c2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBNYXRyaXguVHJhbnNwb3NlKHRoaXMp
OworICAgIH07CisgICAgLyoqCisgICAgICogQ29tcHV0ZSB0aGUgdHJhbnNwb3NlIG9mIHRoZSBt
YXRyaXggYW5kIHN0b3JlIGl0IGluIGEgZ2l2ZW4gbWF0cml4CisgICAgICogQHBhcmFtIHJlc3Vs
dCBkZWZpbmVzIHRoZSB0YXJnZXQgbWF0cml4CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQg
bWF0cml4CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS50cmFuc3Bvc2VUb1JlZiA9IGZ1
bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAgTWF0cml4LlRyYW5zcG9zZVRvUmVmKHRoaXMsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
cyB0aGUgaW5kZXgtdGggcm93IG9mIHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIHRoZSBnaXZlbiA0
IHggZmxvYXQgdmFsdWVzCisgICAgICogQHBhcmFtIGluZGV4IGRlZmluZXMgdGhlIHJvdyBpbmRl
eAorICAgICAqIEBwYXJhbSB4IGRlZmluZXMgdGhlIHggY29tcG9uZW50IHRvIHNldAorICAgICAq
IEBwYXJhbSB5IGRlZmluZXMgdGhlIHkgY29tcG9uZW50IHRvIHNldAorICAgICAqIEBwYXJhbSB6
IGRlZmluZXMgdGhlIHogY29tcG9uZW50IHRvIHNldAorICAgICAqIEBwYXJhbSB3IGRlZmluZXMg
dGhlIHcgY29tcG9uZW50IHRvIHNldAorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIGN1cnJl
bnQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS5zZXRSb3dGcm9tRmxvYXRz
ID0gZnVuY3Rpb24gKGluZGV4LCB4LCB5LCB6LCB3KSB7CisgICAgICAgIGlmIChpbmRleCA8IDAg
fHwgaW5kZXggPiAzKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgaSA9IGluZGV4ICogNDsKKyAgICAgICAgdGhpcy5fbVtpICsgMF0gPSB4OworICAg
ICAgICB0aGlzLl9tW2kgKyAxXSA9IHk7CisgICAgICAgIHRoaXMuX21baSArIDJdID0gejsKKyAg
ICAgICAgdGhpcy5fbVtpICsgM10gPSB3OworICAgICAgICB0aGlzLl9tYXJrQXNVcGRhdGVkKCk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ29tcHV0ZSBh
IG5ldyBtYXRyaXggc2V0IHdpdGggdGhlIGN1cnJlbnQgbWF0cml4IHZhbHVlcyBtdWx0aXBsaWVk
IGJ5IHNjYWxlIChmbG9hdCkKKyAgICAgKiBAcGFyYW0gc2NhbGUgZGVmaW5lcyB0aGUgc2NhbGUg
ZmFjdG9yCisgICAgICogQHJldHVybnMgYSBuZXcgbWF0cml4CisgICAgICovCisgICAgTWF0cml4
LnByb3RvdHlwZS5zY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gbmV3IE1hdHJpeCgpOworICAgICAgICB0aGlzLnNjYWxlVG9SZWYoc2NhbGUsIHJlc3VsdCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0
aGUgY3VycmVudCBtYXRyaXggdmFsdWVzIGJ5IGEgZmFjdG9yIHRvIGEgZ2l2ZW4gcmVzdWx0IG1h
dHJpeAorICAgICAqIEBwYXJhbSBzY2FsZSBkZWZpbmVzIHRoZSBzY2FsZSBmYWN0b3IKKyAgICAg
KiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIG1hdHJpeCB0byBzdG9yZSB0aGUgcmVzdWx0Cisg
ICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnBy
b3RvdHlwZS5zY2FsZVRvUmVmID0gZnVuY3Rpb24gKHNjYWxlLCByZXN1bHQpIHsKKyAgICAgICAg
Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IDE2OyBpbmRleCsrKSB7CisgICAgICAgICAgICBy
ZXN1bHQuX21baW5kZXhdID0gdGhpcy5fbVtpbmRleF0gKiBzY2FsZTsKKyAgICAgICAgfQorICAg
ICAgICByZXN1bHQuX21hcmtBc1VwZGF0ZWQoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTY2FsZSB0aGUgY3VycmVudCBtYXRyaXggdmFsdWVzIGJ5IGEg
ZmFjdG9yIGFuZCBhZGQgdGhlIHJlc3VsdCB0byBhIGdpdmVuIG1hdHJpeAorICAgICAqIEBwYXJh
bSBzY2FsZSBkZWZpbmVzIHRoZSBzY2FsZSBmYWN0b3IKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRl
ZmluZXMgdGhlIE1hdHJpeCB0byBzdG9yZSB0aGUgcmVzdWx0CisgICAgICogQHJldHVybnMgdGhl
IGN1cnJlbnQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS5zY2FsZUFuZEFk
ZFRvUmVmID0gZnVuY3Rpb24gKHNjYWxlLCByZXN1bHQpIHsKKyAgICAgICAgZm9yICh2YXIgaW5k
ZXggPSAwOyBpbmRleCA8IDE2OyBpbmRleCsrKSB7CisgICAgICAgICAgICByZXN1bHQuX21baW5k
ZXhdICs9IHRoaXMuX21baW5kZXhdICogc2NhbGU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0
Ll9tYXJrQXNVcGRhdGVkKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoq
CisgICAgICogV3JpdGVzIHRvIHRoZSBnaXZlbiBtYXRyaXggYSBub3JtYWwgbWF0cml4LCBjb21w
dXRlZCBmcm9tIHRoaXMgb25lICh1c2luZyB2YWx1ZXMgZnJvbSBpZGVudGl0eSBtYXRyaXggZm9y
IGZvdXJ0aCByb3cgYW5kIGNvbHVtbikuCisgICAgICogQHBhcmFtIHJlZiBtYXRyaXggdG8gc3Rv
cmUgdGhlIHJlc3VsdAorICAgICAqLworICAgIE1hdHJpeC5wcm90b3R5cGUudG9Ob3JtYWxNYXRy
aXggPSBmdW5jdGlvbiAocmVmKSB7CisgICAgICAgIHZhciB0bXAgPSBNYXRoVG1wLk1hdHJpeFsw
XTsKKyAgICAgICAgdGhpcy5pbnZlcnRUb1JlZih0bXApOworICAgICAgICB0bXAudHJhbnNwb3Nl
VG9SZWYocmVmKTsKKyAgICAgICAgdmFyIG0gPSByZWYuX207CisgICAgICAgIE1hdHJpeC5Gcm9t
VmFsdWVzVG9SZWYobVswXSwgbVsxXSwgbVsyXSwgMC4wLCBtWzRdLCBtWzVdLCBtWzZdLCAwLjAs
IG1bOF0sIG1bOV0sIG1bMTBdLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMCwgcmVmKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgb25seSByb3RhdGlvbiBwYXJ0IG9mIHRoZSBjdXJyZW50
IG1hdHJpeAorICAgICAqIEByZXR1cm5zIGEgbmV3IG1hdHJpeCBzZXRzIHRvIHRoZSBleHRyYWN0
ZWQgcm90YXRpb24gbWF0cml4IGZyb20gdGhlIGN1cnJlbnQgb25lCisgICAgICovCisgICAgTWF0
cml4LnByb3RvdHlwZS5nZXRSb3RhdGlvbk1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IG5ldyBNYXRyaXgoKTsKKyAgICAgICAgdGhpcy5nZXRSb3RhdGlvbk1hdHJp
eFRvUmVmKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBFeHRyYWN0cyB0aGUgcm90YXRpb24gbWF0cml4IGZyb20gdGhlIGN1cnJlbnQgb25l
IGFuZCBzZXRzIGl0IGFzIHRoZSBnaXZlbiAicmVzdWx0IgorICAgICAqIEBwYXJhbSByZXN1bHQg
ZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeCB0byBzdG9yZSBkYXRhIHRvCisgICAgICogQHJldHVy
bnMgdGhlIGN1cnJlbnQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LnByb3RvdHlwZS5nZXRS
b3RhdGlvbk1hdHJpeFRvUmVmID0gZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICB2YXIgc2Nh
bGUgPSBNYXRoVG1wLlZlY3RvcjNbMF07CisgICAgICAgIGlmICghdGhpcy5kZWNvbXBvc2Uoc2Nh
bGUpKSB7CisgICAgICAgICAgICBNYXRyaXguSWRlbnRpdHlUb1JlZihyZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG0gPSB0aGlzLl9tOwor
ICAgICAgICB2YXIgc3ggPSAxIC8gc2NhbGUueCwgc3kgPSAxIC8gc2NhbGUueSwgc3ogPSAxIC8g
c2NhbGUuejsKKyAgICAgICAgTWF0cml4LkZyb21WYWx1ZXNUb1JlZihtWzBdICogc3gsIG1bMV0g
KiBzeCwgbVsyXSAqIHN4LCAwLjAsIG1bNF0gKiBzeSwgbVs1XSAqIHN5LCBtWzZdICogc3ksIDAu
MCwgbVs4XSAqIHN6LCBtWzldICogc3osIG1bMTBdICogc3osIDAuMCwgMC4wLCAwLjAsIDAuMCwg
MS4wLCByZXN1bHQpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFRvZ2dsZXMgbW9kZWwgbWF0cml4IGZyb20gYmVpbmcgcmlnaHQgaGFuZGVkIHRvIGxlZnQg
aGFuZGVkIGluIHBsYWNlIGFuZCB2aWNlIHZlcnNhCisgICAgICovCisgICAgTWF0cml4LnByb3Rv
dHlwZS50b2dnbGVNb2RlbE1hdHJpeEhhbmRJblBsYWNlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgbSA9IHRoaXMuX207CisgICAgICAgIG1bMl0gKj0gLTE7CisgICAgICAgIG1bNl0gKj0g
LTE7CisgICAgICAgIG1bOF0gKj0gLTE7CisgICAgICAgIG1bOV0gKj0gLTE7CisgICAgICAgIG1b
MTRdICo9IC0xOworICAgICAgICB0aGlzLl9tYXJrQXNVcGRhdGVkKCk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBUb2dnbGVzIHByb2plY3Rpb24gbWF0cml4IGZyb20gYmVpbmcgcmlnaHQgaGFu
ZGVkIHRvIGxlZnQgaGFuZGVkIGluIHBsYWNlIGFuZCB2aWNlIHZlcnNhCisgICAgICovCisgICAg
TWF0cml4LnByb3RvdHlwZS50b2dnbGVQcm9qZWN0aW9uTWF0cml4SGFuZEluUGxhY2UgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciBtID0gdGhpcy5fbTsKKyAgICAgICAgbVs4XSAqPSAtMTsK
KyAgICAgICAgbVs5XSAqPSAtMTsKKyAgICAgICAgbVsxMF0gKj0gLTE7CisgICAgICAgIG1bMTFd
ICo9IC0xOworICAgICAgICB0aGlzLl9tYXJrQXNVcGRhdGVkKCk7CisgICAgfTsKKyAgICAvLyBT
dGF0aWNzCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGFuIGFycmF5Cisg
ICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIHNvdXJjZSBhcnJheQorICAgICAqIEBwYXJh
bSBvZmZzZXQgZGVmaW5lcyBhbiBvZmZzZXQgaW4gdGhlIHNvdXJjZSBhcnJheQorICAgICAqIEBy
ZXR1cm5zIGEgbmV3IE1hdHJpeCBzZXQgZnJvbSB0aGUgc3RhcnRpbmcgaW5kZXggb2YgdGhlIGdp
dmVuIGFycmF5CisgICAgICovCisgICAgTWF0cml4LkZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJh
eSwgb2Zmc2V0KSB7CisgICAgICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgeyBvZmZzZXQgPSAw
OyB9CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgTWF0cml4KCk7CisgICAgICAgIE1hdHJpeC5G
cm9tQXJyYXlUb1JlZihhcnJheSwgb2Zmc2V0LCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ29weSB0aGUgY29udGVudCBvZiBhbiBhcnJh
eSBpbnRvIGEgZ2l2ZW4gbWF0cml4CisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIHNv
dXJjZSBhcnJheQorICAgICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyBhbiBvZmZzZXQgaW4gdGhl
IHNvdXJjZSBhcnJheQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1h
dHJpeAorICAgICAqLworICAgIE1hdHJpeC5Gcm9tQXJyYXlUb1JlZiA9IGZ1bmN0aW9uIChhcnJh
eSwgb2Zmc2V0LCByZXN1bHQpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IDE2OyBpbmRleCsrKSB7CisgICAgICAgICAgICByZXN1bHQuX21baW5kZXhdID0gYXJyYXlbaW5k
ZXggKyBvZmZzZXRdOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5fbWFya0FzVXBkYXRlZCgp
OworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcmVzIGFuIGFycmF5IGludG8gYSBtYXRyaXgg
YWZ0ZXIgaGF2aW5nIG11bHRpcGxpZWQgZWFjaCBjb21wb25lbnQgYnkgYSBnaXZlbiBmYWN0b3IK
KyAgICAgKiBAcGFyYW0gYXJyYXkgZGVmaW5lcyB0aGUgc291cmNlIGFycmF5CisgICAgICogQHBh
cmFtIG9mZnNldCBkZWZpbmVzIHRoZSBvZmZzZXQgaW4gdGhlIHNvdXJjZSBhcnJheQorICAgICAq
IEBwYXJhbSBzY2FsZSBkZWZpbmVzIHRoZSBzY2FsaW5nIGZhY3RvcgorICAgICAqIEBwYXJhbSBy
ZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5Gcm9t
RmxvYXQzMkFycmF5VG9SZWZTY2FsZWQgPSBmdW5jdGlvbiAoYXJyYXksIG9mZnNldCwgc2NhbGUs
IHJlc3VsdCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgMTY7IGluZGV4
KyspIHsKKyAgICAgICAgICAgIHJlc3VsdC5fbVtpbmRleF0gPSBhcnJheVtpbmRleCArIG9mZnNl
dF0gKiBzY2FsZTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuX21hcmtBc1VwZGF0ZWQoKTsK
KyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRyaXgsICJJZGVudGl0eVJlYWRP
bmx5IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhbiBpZGVudGl0eSBtYXRyaXgg
dGhhdCBtdXN0IG5vdCBiZSB1cGRhdGVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBNYXRyaXguX2lkZW50aXR5UmVhZE9ubHk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFN0b3JlcyBhIGxpc3Qgb2YgdmFsdWVz
ICgxNikgaW5zaWRlIGEgZ2l2ZW4gbWF0cml4CisgICAgICogQHBhcmFtIGluaXRpYWxNMTEgZGVm
aW5lcyAxc3QgdmFsdWUgb2YgMXN0IHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTEyIGRlZmlu
ZXMgMm5kIHZhbHVlIG9mIDFzdCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0xMyBkZWZpbmVz
IDNyZCB2YWx1ZSBvZiAxc3Qgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMTQgZGVmaW5lcyA0
dGggdmFsdWUgb2YgMXN0IHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTIxIGRlZmluZXMgMXN0
IHZhbHVlIG9mIDJuZCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0yMiBkZWZpbmVzIDJuZCB2
YWx1ZSBvZiAybmQgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMjMgZGVmaW5lcyAzcmQgdmFs
dWUgb2YgMm5kIHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTI0IGRlZmluZXMgNHRoIHZhbHVl
IG9mIDJuZCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0zMSBkZWZpbmVzIDFzdCB2YWx1ZSBv
ZiAzcmQgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMzIgZGVmaW5lcyAybmQgdmFsdWUgb2Yg
M3JkIHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTMzIGRlZmluZXMgM3JkIHZhbHVlIG9mIDNy
ZCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0zNCBkZWZpbmVzIDR0aCB2YWx1ZSBvZiAzcmQg
cm93CisgICAgICogQHBhcmFtIGluaXRpYWxNNDEgZGVmaW5lcyAxc3QgdmFsdWUgb2YgNHRoIHJv
dworICAgICAqIEBwYXJhbSBpbml0aWFsTTQyIGRlZmluZXMgMm5kIHZhbHVlIG9mIDR0aCByb3cK
KyAgICAgKiBAcGFyYW0gaW5pdGlhbE00MyBkZWZpbmVzIDNyZCB2YWx1ZSBvZiA0dGggcm93Cisg
ICAgICogQHBhcmFtIGluaXRpYWxNNDQgZGVmaW5lcyA0dGggdmFsdWUgb2YgNHRoIHJvdworICAg
ICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAg
IE1hdHJpeC5Gcm9tVmFsdWVzVG9SZWYgPSBmdW5jdGlvbiAoaW5pdGlhbE0xMSwgaW5pdGlhbE0x
MiwgaW5pdGlhbE0xMywgaW5pdGlhbE0xNCwgaW5pdGlhbE0yMSwgaW5pdGlhbE0yMiwgaW5pdGlh
bE0yMywgaW5pdGlhbE0yNCwgaW5pdGlhbE0zMSwgaW5pdGlhbE0zMiwgaW5pdGlhbE0zMywgaW5p
dGlhbE0zNCwgaW5pdGlhbE00MSwgaW5pdGlhbE00MiwgaW5pdGlhbE00MywgaW5pdGlhbE00NCwg
cmVzdWx0KSB7CisgICAgICAgIHZhciBtID0gcmVzdWx0Ll9tOworICAgICAgICBtWzBdID0gaW5p
dGlhbE0xMTsKKyAgICAgICAgbVsxXSA9IGluaXRpYWxNMTI7CisgICAgICAgIG1bMl0gPSBpbml0
aWFsTTEzOworICAgICAgICBtWzNdID0gaW5pdGlhbE0xNDsKKyAgICAgICAgbVs0XSA9IGluaXRp
YWxNMjE7CisgICAgICAgIG1bNV0gPSBpbml0aWFsTTIyOworICAgICAgICBtWzZdID0gaW5pdGlh
bE0yMzsKKyAgICAgICAgbVs3XSA9IGluaXRpYWxNMjQ7CisgICAgICAgIG1bOF0gPSBpbml0aWFs
TTMxOworICAgICAgICBtWzldID0gaW5pdGlhbE0zMjsKKyAgICAgICAgbVsxMF0gPSBpbml0aWFs
TTMzOworICAgICAgICBtWzExXSA9IGluaXRpYWxNMzQ7CisgICAgICAgIG1bMTJdID0gaW5pdGlh
bE00MTsKKyAgICAgICAgbVsxM10gPSBpbml0aWFsTTQyOworICAgICAgICBtWzE0XSA9IGluaXRp
YWxNNDM7CisgICAgICAgIG1bMTVdID0gaW5pdGlhbE00NDsKKyAgICAgICAgcmVzdWx0Ll9tYXJr
QXNVcGRhdGVkKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIG5ldyBtYXRyaXgg
ZnJvbSBhIGxpc3Qgb2YgdmFsdWVzICgxNikKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0xMSBkZWZp
bmVzIDFzdCB2YWx1ZSBvZiAxc3Qgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMTIgZGVmaW5l
cyAybmQgdmFsdWUgb2YgMXN0IHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTEzIGRlZmluZXMg
M3JkIHZhbHVlIG9mIDFzdCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0xNCBkZWZpbmVzIDR0
aCB2YWx1ZSBvZiAxc3Qgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMjEgZGVmaW5lcyAxc3Qg
dmFsdWUgb2YgMm5kIHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTIyIGRlZmluZXMgMm5kIHZh
bHVlIG9mIDJuZCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0yMyBkZWZpbmVzIDNyZCB2YWx1
ZSBvZiAybmQgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMjQgZGVmaW5lcyA0dGggdmFsdWUg
b2YgMm5kIHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTMxIGRlZmluZXMgMXN0IHZhbHVlIG9m
IDNyZCByb3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE0zMiBkZWZpbmVzIDJuZCB2YWx1ZSBvZiAz
cmQgcm93CisgICAgICogQHBhcmFtIGluaXRpYWxNMzMgZGVmaW5lcyAzcmQgdmFsdWUgb2YgM3Jk
IHJvdworICAgICAqIEBwYXJhbSBpbml0aWFsTTM0IGRlZmluZXMgNHRoIHZhbHVlIG9mIDNyZCBy
b3cKKyAgICAgKiBAcGFyYW0gaW5pdGlhbE00MSBkZWZpbmVzIDFzdCB2YWx1ZSBvZiA0dGggcm93
CisgICAgICogQHBhcmFtIGluaXRpYWxNNDIgZGVmaW5lcyAybmQgdmFsdWUgb2YgNHRoIHJvdwor
ICAgICAqIEBwYXJhbSBpbml0aWFsTTQzIGRlZmluZXMgM3JkIHZhbHVlIG9mIDR0aCByb3cKKyAg
ICAgKiBAcGFyYW0gaW5pdGlhbE00NCBkZWZpbmVzIDR0aCB2YWx1ZSBvZiA0dGggcm93CisgICAg
ICogQHJldHVybnMgdGhlIG5ldyBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguRnJvbVZhbHVl
cyA9IGZ1bmN0aW9uIChpbml0aWFsTTExLCBpbml0aWFsTTEyLCBpbml0aWFsTTEzLCBpbml0aWFs
TTE0LCBpbml0aWFsTTIxLCBpbml0aWFsTTIyLCBpbml0aWFsTTIzLCBpbml0aWFsTTI0LCBpbml0
aWFsTTMxLCBpbml0aWFsTTMyLCBpbml0aWFsTTMzLCBpbml0aWFsTTM0LCBpbml0aWFsTTQxLCBp
bml0aWFsTTQyLCBpbml0aWFsTTQzLCBpbml0aWFsTTQ0KSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBuZXcgTWF0cml4KCk7CisgICAgICAgIHZhciBtID0gcmVzdWx0Ll9tOworICAgICAgICBtWzBd
ID0gaW5pdGlhbE0xMTsKKyAgICAgICAgbVsxXSA9IGluaXRpYWxNMTI7CisgICAgICAgIG1bMl0g
PSBpbml0aWFsTTEzOworICAgICAgICBtWzNdID0gaW5pdGlhbE0xNDsKKyAgICAgICAgbVs0XSA9
IGluaXRpYWxNMjE7CisgICAgICAgIG1bNV0gPSBpbml0aWFsTTIyOworICAgICAgICBtWzZdID0g
aW5pdGlhbE0yMzsKKyAgICAgICAgbVs3XSA9IGluaXRpYWxNMjQ7CisgICAgICAgIG1bOF0gPSBp
bml0aWFsTTMxOworICAgICAgICBtWzldID0gaW5pdGlhbE0zMjsKKyAgICAgICAgbVsxMF0gPSBp
bml0aWFsTTMzOworICAgICAgICBtWzExXSA9IGluaXRpYWxNMzQ7CisgICAgICAgIG1bMTJdID0g
aW5pdGlhbE00MTsKKyAgICAgICAgbVsxM10gPSBpbml0aWFsTTQyOworICAgICAgICBtWzE0XSA9
IGluaXRpYWxNNDM7CisgICAgICAgIG1bMTVdID0gaW5pdGlhbE00NDsKKyAgICAgICAgcmVzdWx0
Ll9tYXJrQXNVcGRhdGVkKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IG1hdHJpeCBjb21wb3NlZCBieSBtZXJnaW5nIHNjYWxl
ICh2ZWN0b3IzKSwgcm90YXRpb24gKHF1YXRlcm5pb24pIGFuZCB0cmFuc2xhdGlvbiAodmVjdG9y
MykKKyAgICAgKiBAcGFyYW0gc2NhbGUgZGVmaW5lcyB0aGUgc2NhbGUgdmVjdG9yMworICAgICAq
IEBwYXJhbSByb3RhdGlvbiBkZWZpbmVzIHRoZSByb3RhdGlvbiBxdWF0ZXJuaW9uCisgICAgICog
QHBhcmFtIHRyYW5zbGF0aW9uIGRlZmluZXMgdGhlIHRyYW5zbGF0aW9uIHZlY3RvcjMKKyAgICAg
KiBAcmV0dXJucyBhIG5ldyBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguQ29tcG9zZSA9IGZ1
bmN0aW9uIChzY2FsZSwgcm90YXRpb24sIHRyYW5zbGF0aW9uKSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBuZXcgTWF0cml4KCk7CisgICAgICAgIE1hdHJpeC5Db21wb3NlVG9SZWYoc2NhbGUsIHJv
dGF0aW9uLCB0cmFuc2xhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFNldHMgYSBtYXRyaXggdG8gYSB2YWx1ZSBjb21wb3NlZCBi
eSBtZXJnaW5nIHNjYWxlICh2ZWN0b3IzKSwgcm90YXRpb24gKHF1YXRlcm5pb24pIGFuZCB0cmFu
c2xhdGlvbiAodmVjdG9yMykKKyAgICAgKiBAcGFyYW0gc2NhbGUgZGVmaW5lcyB0aGUgc2NhbGUg
dmVjdG9yMworICAgICAqIEBwYXJhbSByb3RhdGlvbiBkZWZpbmVzIHRoZSByb3RhdGlvbiBxdWF0
ZXJuaW9uCisgICAgICogQHBhcmFtIHRyYW5zbGF0aW9uIGRlZmluZXMgdGhlIHRyYW5zbGF0aW9u
IHZlY3RvcjMKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBtYXRyaXgK
KyAgICAgKi8KKyAgICBNYXRyaXguQ29tcG9zZVRvUmVmID0gZnVuY3Rpb24gKHNjYWxlLCByb3Rh
dGlvbiwgdHJhbnNsYXRpb24sIHJlc3VsdCkgeworICAgICAgICB2YXIgbSA9IHJlc3VsdC5fbTsK
KyAgICAgICAgdmFyIHggPSByb3RhdGlvbi54LCB5ID0gcm90YXRpb24ueSwgeiA9IHJvdGF0aW9u
LnosIHcgPSByb3RhdGlvbi53OworICAgICAgICB2YXIgeDIgPSB4ICsgeCwgeTIgPSB5ICsgeSwg
ejIgPSB6ICsgejsKKyAgICAgICAgdmFyIHh4ID0geCAqIHgyLCB4eSA9IHggKiB5MiwgeHogPSB4
ICogejI7CisgICAgICAgIHZhciB5eSA9IHkgKiB5MiwgeXogPSB5ICogejIsIHp6ID0geiAqIHoy
OworICAgICAgICB2YXIgd3ggPSB3ICogeDIsIHd5ID0gdyAqIHkyLCB3eiA9IHcgKiB6MjsKKyAg
ICAgICAgdmFyIHN4ID0gc2NhbGUueCwgc3kgPSBzY2FsZS55LCBzeiA9IHNjYWxlLno7CisgICAg
ICAgIG1bMF0gPSAoMSAtICh5eSArIHp6KSkgKiBzeDsKKyAgICAgICAgbVsxXSA9ICh4eSArIHd6
KSAqIHN4OworICAgICAgICBtWzJdID0gKHh6IC0gd3kpICogc3g7CisgICAgICAgIG1bM10gPSAw
OworICAgICAgICBtWzRdID0gKHh5IC0gd3opICogc3k7CisgICAgICAgIG1bNV0gPSAoMSAtICh4
eCArIHp6KSkgKiBzeTsKKyAgICAgICAgbVs2XSA9ICh5eiArIHd4KSAqIHN5OworICAgICAgICBt
WzddID0gMDsKKyAgICAgICAgbVs4XSA9ICh4eiArIHd5KSAqIHN6OworICAgICAgICBtWzldID0g
KHl6IC0gd3gpICogc3o7CisgICAgICAgIG1bMTBdID0gKDEgLSAoeHggKyB5eSkpICogc3o7Cisg
ICAgICAgIG1bMTFdID0gMDsKKyAgICAgICAgbVsxMl0gPSB0cmFuc2xhdGlvbi54OworICAgICAg
ICBtWzEzXSA9IHRyYW5zbGF0aW9uLnk7CisgICAgICAgIG1bMTRdID0gdHJhbnNsYXRpb24uejsK
KyAgICAgICAgbVsxNV0gPSAxOworICAgICAgICByZXN1bHQuX21hcmtBc1VwZGF0ZWQoKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0cml4CisgICAg
ICogQHJldHVybnMgYSBuZXcgaWRlbnRpdHkgbWF0cml4CisgICAgICovCisgICAgTWF0cml4Lklk
ZW50aXR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaWRlbnRpdHkgPSBNYXRyaXguRnJv
bVZhbHVlcygxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAsIDAuMCwgMC4wLCAwLjAs
IDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjApOworICAgICAgICBpZGVudGl0eS5fdXBkYXRl
SWRlbnRpdHlTdGF0dXModHJ1ZSk7CisgICAgICAgIHJldHVybiBpZGVudGl0eTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0cml4IGFuZCBzdG9yZXMg
dGhlIHJlc3VsdCBpbiBhIGdpdmVuIG1hdHJpeAorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5l
cyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5JZGVudGl0eVRvUmVmID0g
ZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKDEuMCwg
MC4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAsIDAu
MCwgMC4wLCAwLjAsIDEuMCwgcmVzdWx0KTsKKyAgICAgICAgcmVzdWx0Ll91cGRhdGVJZGVudGl0
eVN0YXR1cyh0cnVlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgemVy
byBtYXRyaXgKKyAgICAgKiBAcmV0dXJucyBhIG5ldyB6ZXJvIG1hdHJpeAorICAgICAqLworICAg
IE1hdHJpeC5aZXJvID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgemVybyA9IE1hdHJpeC5G
cm9tVmFsdWVzKDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAu
MCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCk7CisgICAgICAgIHplcm8uX3VwZGF0ZUlk
ZW50aXR5U3RhdHVzKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHplcm87CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHJvdGF0aW9uIG1hdHJpeCBmb3IgImFuZ2xlIiByYWRp
YW5zIGFyb3VuZCB0aGUgWCBheGlzCisgICAgICogQHBhcmFtIGFuZ2xlIGRlZmluZXMgdGhlIGFu
Z2xlIChpbiByYWRpYW5zKSB0byB1c2UKKyAgICAgKiBAcmV0dXJuIHRoZSBuZXcgbWF0cml4Cisg
ICAgICovCisgICAgTWF0cml4LlJvdGF0aW9uWCA9IGZ1bmN0aW9uIChhbmdsZSkgeworICAgICAg
ICB2YXIgcmVzdWx0ID0gbmV3IE1hdHJpeCgpOworICAgICAgICBNYXRyaXguUm90YXRpb25YVG9S
ZWYoYW5nbGUsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IG1hdHJpeCBhcyB0aGUgaW52ZXJ0IG9mIGEgZ2l2ZW4g
bWF0cml4CisgICAgICogQHBhcmFtIHNvdXJjZSBkZWZpbmVzIHRoZSBzb3VyY2UgbWF0cml4Cisg
ICAgICogQHJldHVybnMgdGhlIG5ldyBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguSW52ZXJ0
ID0gZnVuY3Rpb24gKHNvdXJjZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IE1hdHJpeCgp
OworICAgICAgICBzb3VyY2UuaW52ZXJ0VG9SZWYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgcm90YXRpb24gbWF0
cml4IGZvciAiYW5nbGUiIHJhZGlhbnMgYXJvdW5kIHRoZSBYIGF4aXMgYW5kIHN0b3JlcyBpdCBp
biBhIGdpdmVuIG1hdHJpeAorICAgICAqIEBwYXJhbSBhbmdsZSBkZWZpbmVzIHRoZSBhbmdsZSAo
aW4gcmFkaWFucykgdG8gdXNlCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJn
ZXQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LlJvdGF0aW9uWFRvUmVmID0gZnVuY3Rpb24g
KGFuZ2xlLCByZXN1bHQpIHsKKyAgICAgICAgdmFyIHMgPSBNYXRoLnNpbihhbmdsZSk7CisgICAg
ICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpOworICAgICAgICBNYXRyaXguRnJvbVZhbHVlc1Rv
UmVmKDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCBjLCBzLCAwLjAsIDAuMCwgLXMsIGMsIDAuMCwg
MC4wLCAwLjAsIDAuMCwgMS4wLCByZXN1bHQpOworICAgICAgICByZXN1bHQuX3VwZGF0ZUlkZW50
aXR5U3RhdHVzKGMgPT09IDEgJiYgcyA9PT0gMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgbmV3IHJvdGF0aW9uIG1hdHJpeCBmb3IgImFuZ2xlIiByYWRpYW5zIGFyb3VuZCB0
aGUgWSBheGlzCisgICAgICogQHBhcmFtIGFuZ2xlIGRlZmluZXMgdGhlIGFuZ2xlIChpbiByYWRp
YW5zKSB0byB1c2UKKyAgICAgKiBAcmV0dXJuIHRoZSBuZXcgbWF0cml4CisgICAgICovCisgICAg
TWF0cml4LlJvdGF0aW9uWSA9IGZ1bmN0aW9uIChhbmdsZSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gbmV3IE1hdHJpeCgpOworICAgICAgICBNYXRyaXguUm90YXRpb25ZVG9SZWYoYW5nbGUsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgbmV3IHJvdGF0aW9uIG1hdHJpeCBmb3IgImFuZ2xlIiByYWRpYW5zIGFyb3VuZCB0
aGUgWSBheGlzIGFuZCBzdG9yZXMgaXQgaW4gYSBnaXZlbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0g
YW5nbGUgZGVmaW5lcyB0aGUgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHVzZQorICAgICAqIEBwYXJh
bSByZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5S
b3RhdGlvbllUb1JlZiA9IGZ1bmN0aW9uIChhbmdsZSwgcmVzdWx0KSB7CisgICAgICAgIHZhciBz
ID0gTWF0aC5zaW4oYW5nbGUpOworICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTsKKyAg
ICAgICAgTWF0cml4LkZyb21WYWx1ZXNUb1JlZihjLCAwLjAsIC1zLCAwLjAsIDAuMCwgMS4wLCAw
LjAsIDAuMCwgcywgMC4wLCBjLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMCwgcmVzdWx0KTsKKyAg
ICAgICAgcmVzdWx0Ll91cGRhdGVJZGVudGl0eVN0YXR1cyhjID09PSAxICYmIHMgPT09IDApOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBtYXRyaXggZm9y
ICJhbmdsZSIgcmFkaWFucyBhcm91bmQgdGhlIFogYXhpcworICAgICAqIEBwYXJhbSBhbmdsZSBk
ZWZpbmVzIHRoZSBhbmdsZSAoaW4gcmFkaWFucykgdG8gdXNlCisgICAgICogQHJldHVybiB0aGUg
bmV3IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5Sb3RhdGlvblogPSBmdW5jdGlvbiAoYW5n
bGUpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBNYXRyaXgoKTsKKyAgICAgICAgTWF0cml4
LlJvdGF0aW9uWlRvUmVmKGFuZ2xlLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBtYXRyaXggZm9y
ICJhbmdsZSIgcmFkaWFucyBhcm91bmQgdGhlIFogYXhpcyBhbmQgc3RvcmVzIGl0IGluIGEgZ2l2
ZW4gbWF0cml4CisgICAgICogQHBhcmFtIGFuZ2xlIGRlZmluZXMgdGhlIGFuZ2xlIChpbiByYWRp
YW5zKSB0byB1c2UKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBtYXRy
aXgKKyAgICAgKi8KKyAgICBNYXRyaXguUm90YXRpb25aVG9SZWYgPSBmdW5jdGlvbiAoYW5nbGUs
IHJlc3VsdCkgeworICAgICAgICB2YXIgcyA9IE1hdGguc2luKGFuZ2xlKTsKKyAgICAgICAgdmFy
IGMgPSBNYXRoLmNvcyhhbmdsZSk7CisgICAgICAgIE1hdHJpeC5Gcm9tVmFsdWVzVG9SZWYoYywg
cywgMC4wLCAwLjAsIC1zLCBjLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMCwgMC4wLCAwLjAsIDAu
MCwgMC4wLCAxLjAsIHJlc3VsdCk7CisgICAgICAgIHJlc3VsdC5fdXBkYXRlSWRlbnRpdHlTdGF0
dXMoYyA9PT0gMSAmJiBzID09PSAwKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgcm90YXRpb24gbWF0cml4IGZvciAiYW5nbGUiIHJhZGlhbnMgYXJvdW5kIHRoZSBnaXZl
biBheGlzCisgICAgICogQHBhcmFtIGF4aXMgZGVmaW5lcyB0aGUgYXhpcyB0byB1c2UKKyAgICAg
KiBAcGFyYW0gYW5nbGUgZGVmaW5lcyB0aGUgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHVzZQorICAg
ICAqIEByZXR1cm4gdGhlIG5ldyBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguUm90YXRpb25B
eGlzID0gZnVuY3Rpb24gKGF4aXMsIGFuZ2xlKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcg
TWF0cml4KCk7CisgICAgICAgIE1hdHJpeC5Sb3RhdGlvbkF4aXNUb1JlZihheGlzLCBhbmdsZSwg
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgcm90YXRpb24gbWF0cml4IGZvciAiYW5nbGUiIHJhZGlhbnMgYXJvdW5k
IHRoZSBnaXZlbiBheGlzIGFuZCBzdG9yZXMgaXQgaW4gYSBnaXZlbiBtYXRyaXgKKyAgICAgKiBA
cGFyYW0gYXhpcyBkZWZpbmVzIHRoZSBheGlzIHRvIHVzZQorICAgICAqIEBwYXJhbSBhbmdsZSBk
ZWZpbmVzIHRoZSBhbmdsZSAoaW4gcmFkaWFucykgdG8gdXNlCisgICAgICogQHBhcmFtIHJlc3Vs
dCBkZWZpbmVzIHRoZSB0YXJnZXQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LlJvdGF0aW9u
QXhpc1RvUmVmID0gZnVuY3Rpb24gKGF4aXMsIGFuZ2xlLCByZXN1bHQpIHsKKyAgICAgICAgdmFy
IHMgPSBNYXRoLnNpbigtYW5nbGUpOworICAgICAgICB2YXIgYyA9IE1hdGguY29zKC1hbmdsZSk7
CisgICAgICAgIHZhciBjMSA9IDEgLSBjOworICAgICAgICBheGlzLm5vcm1hbGl6ZSgpOworICAg
ICAgICB2YXIgbSA9IHJlc3VsdC5fbTsKKyAgICAgICAgbVswXSA9IChheGlzLnggKiBheGlzLngp
ICogYzEgKyBjOworICAgICAgICBtWzFdID0gKGF4aXMueCAqIGF4aXMueSkgKiBjMSAtIChheGlz
LnogKiBzKTsKKyAgICAgICAgbVsyXSA9IChheGlzLnggKiBheGlzLnopICogYzEgKyAoYXhpcy55
ICogcyk7CisgICAgICAgIG1bM10gPSAwLjA7CisgICAgICAgIG1bNF0gPSAoYXhpcy55ICogYXhp
cy54KSAqIGMxICsgKGF4aXMueiAqIHMpOworICAgICAgICBtWzVdID0gKGF4aXMueSAqIGF4aXMu
eSkgKiBjMSArIGM7CisgICAgICAgIG1bNl0gPSAoYXhpcy55ICogYXhpcy56KSAqIGMxIC0gKGF4
aXMueCAqIHMpOworICAgICAgICBtWzddID0gMC4wOworICAgICAgICBtWzhdID0gKGF4aXMueiAq
IGF4aXMueCkgKiBjMSAtIChheGlzLnkgKiBzKTsKKyAgICAgICAgbVs5XSA9IChheGlzLnogKiBh
eGlzLnkpICogYzEgKyAoYXhpcy54ICogcyk7CisgICAgICAgIG1bMTBdID0gKGF4aXMueiAqIGF4
aXMueikgKiBjMSArIGM7CisgICAgICAgIG1bMTFdID0gMC4wOworICAgICAgICBtWzEyXSA9IDAu
MDsKKyAgICAgICAgbVsxM10gPSAwLjA7CisgICAgICAgIG1bMTRdID0gMC4wOworICAgICAgICBt
WzE1XSA9IDEuMDsKKyAgICAgICAgcmVzdWx0Ll9tYXJrQXNVcGRhdGVkKCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBUYWtlcyBub3JtYWxpc2VkIHZlY3RvcnMgYW5kIHJldHVybnMgYSByb3Rh
dGlvbiBtYXRyaXggdG8gYWxpZ24gImZyb20iIHdpdGggInRvIi4KKyAgICAgKiBUYWtlbiBmcm9t
IGh0dHA6Ly93d3cuaXF1aWxlemxlcy5vcmcvd3d3L2FydGljbGVzL25vYWNvcy9ub2Fjb3MuaHRt
CisgICAgICogQHBhcmFtIGZyb20gZGVmaW5lcyB0aGUgdmVjdG9yIHRvIGFsaWduCisgICAgICog
QHBhcmFtIHRvIGRlZmluZXMgdGhlIHZlY3RvciB0byBhbGlnbiB0bworICAgICAqIEBwYXJhbSBy
ZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5Sb3Rh
dGlvbkFsaWduVG9SZWYgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHJlc3VsdCkgeworICAgICAgICB2
YXIgdiA9IFZlY3RvcjMuQ3Jvc3ModG8sIGZyb20pOworICAgICAgICB2YXIgYyA9IFZlY3RvcjMu
RG90KHRvLCBmcm9tKTsKKyAgICAgICAgdmFyIGsgPSAxIC8gKDEgKyBjKTsKKyAgICAgICAgdmFy
IG0gPSByZXN1bHQuX207CisgICAgICAgIG1bMF0gPSB2LnggKiB2LnggKiBrICsgYzsKKyAgICAg
ICAgbVsxXSA9IHYueSAqIHYueCAqIGsgLSB2Lno7CisgICAgICAgIG1bMl0gPSB2LnogKiB2Lngg
KiBrICsgdi55OworICAgICAgICBtWzNdID0gMDsKKyAgICAgICAgbVs0XSA9IHYueCAqIHYueSAq
IGsgKyB2Lno7CisgICAgICAgIG1bNV0gPSB2LnkgKiB2LnkgKiBrICsgYzsKKyAgICAgICAgbVs2
XSA9IHYueiAqIHYueSAqIGsgLSB2Lng7CisgICAgICAgIG1bN10gPSAwOworICAgICAgICBtWzhd
ID0gdi54ICogdi56ICogayAtIHYueTsKKyAgICAgICAgbVs5XSA9IHYueSAqIHYueiAqIGsgKyB2
Lng7CisgICAgICAgIG1bMTBdID0gdi56ICogdi56ICogayArIGM7CisgICAgICAgIG1bMTFdID0g
MDsKKyAgICAgICAgbVsxMl0gPSAwOworICAgICAgICBtWzEzXSA9IDA7CisgICAgICAgIG1bMTRd
ID0gMDsKKyAgICAgICAgbVsxNV0gPSAxOworICAgICAgICByZXN1bHQuX21hcmtBc1VwZGF0ZWQo
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSByb3RhdGlvbiBtYXRyaXgKKyAg
ICAgKiBAcGFyYW0geWF3IGRlZmluZXMgdGhlIHlhdyBhbmdsZSBpbiByYWRpYW5zIChZIGF4aXMp
CisgICAgICogQHBhcmFtIHBpdGNoIGRlZmluZXMgdGhlIHBpdGNoIGFuZ2xlIGluIHJhZGlhbnMg
KFggYXhpcykKKyAgICAgKiBAcGFyYW0gcm9sbCBkZWZpbmVzIHRoZSByb2xsIGFuZ2xlIGluIHJh
ZGlhbnMgKFggYXhpcykKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IHJvdGF0aW9uIG1hdHJpeAor
ICAgICAqLworICAgIE1hdHJpeC5Sb3RhdGlvbllhd1BpdGNoUm9sbCA9IGZ1bmN0aW9uICh5YXcs
IHBpdGNoLCByb2xsKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgTWF0cml4KCk7CisgICAg
ICAgIE1hdHJpeC5Sb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKHlhdywgcGl0Y2gsIHJvbGwsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgcm90YXRpb24gbWF0cml4IGFuZCBzdG9yZXMgaXQgaW4gYSBnaXZlbiBtYXRyaXgK
KyAgICAgKiBAcGFyYW0geWF3IGRlZmluZXMgdGhlIHlhdyBhbmdsZSBpbiByYWRpYW5zIChZIGF4
aXMpCisgICAgICogQHBhcmFtIHBpdGNoIGRlZmluZXMgdGhlIHBpdGNoIGFuZ2xlIGluIHJhZGlh
bnMgKFggYXhpcykKKyAgICAgKiBAcGFyYW0gcm9sbCBkZWZpbmVzIHRoZSByb2xsIGFuZ2xlIGlu
IHJhZGlhbnMgKFggYXhpcykKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdl
dCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguUm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZiA9
IGZ1bmN0aW9uICh5YXcsIHBpdGNoLCByb2xsLCByZXN1bHQpIHsKKyAgICAgICAgUXVhdGVybmlv
bi5Sb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKHlhdywgcGl0Y2gsIHJvbGwsIE1hdGhUbXAuUXVh
dGVybmlvblswXSk7CisgICAgICAgIE1hdGhUbXAuUXVhdGVybmlvblswXS50b1JvdGF0aW9uTWF0
cml4KHJlc3VsdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgc2NhbGluZyBt
YXRyaXgKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSBzY2FsZSBmYWN0b3Igb24gWCBheGlz
CisgICAgICogQHBhcmFtIHkgZGVmaW5lcyB0aGUgc2NhbGUgZmFjdG9yIG9uIFkgYXhpcworICAg
ICAqIEBwYXJhbSB6IGRlZmluZXMgdGhlIHNjYWxlIGZhY3RvciBvbiBaIGF4aXMKKyAgICAgKiBA
cmV0dXJucyB0aGUgbmV3IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5TY2FsaW5nID0gZnVu
Y3Rpb24gKHgsIHksIHopIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBNYXRyaXgoKTsKKyAg
ICAgICAgTWF0cml4LlNjYWxpbmdUb1JlZih4LCB5LCB6LCByZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHNjYWxpbmcgbWF0
cml4IGFuZCBzdG9yZXMgaXQgaW4gYSBnaXZlbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0geCBkZWZp
bmVzIHRoZSBzY2FsZSBmYWN0b3Igb24gWCBheGlzCisgICAgICogQHBhcmFtIHkgZGVmaW5lcyB0
aGUgc2NhbGUgZmFjdG9yIG9uIFkgYXhpcworICAgICAqIEBwYXJhbSB6IGRlZmluZXMgdGhlIHNj
YWxlIGZhY3RvciBvbiBaIGF4aXMKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIHRh
cmdldCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguU2NhbGluZ1RvUmVmID0gZnVuY3Rpb24g
KHgsIHksIHosIHJlc3VsdCkgeworICAgICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKHgsIDAu
MCwgMC4wLCAwLjAsIDAuMCwgeSwgMC4wLCAwLjAsIDAuMCwgMC4wLCB6LCAwLjAsIDAuMCwgMC4w
LCAwLjAsIDEuMCwgcmVzdWx0KTsKKyAgICAgICAgcmVzdWx0Ll91cGRhdGVJZGVudGl0eVN0YXR1
cyh4ID09PSAxICYmIHkgPT09IDEgJiYgeiA9PT0gMSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgdHJhbnNsYXRpb24gbWF0cml4CisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0
aGUgdHJhbnNsYXRpb24gb24gWCBheGlzCisgICAgICogQHBhcmFtIHkgZGVmaW5lcyB0aGUgdHJh
bnNsYXRpb24gb24gWSBheGlzCisgICAgICogQHBhcmFtIHogZGVmaW5lcyB0aGUgdHJhbnNsYXRp
b25vbiBaIGF4aXMKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IG1hdHJpeAorICAgICAqLworICAg
IE1hdHJpeC5UcmFuc2xhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBuZXcgTWF0cml4KCk7CisgICAgICAgIE1hdHJpeC5UcmFuc2xhdGlvblRvUmVmKHgs
IHksIHosIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGVzIGEgdHJhbnNsYXRpb24gbWF0cml4IGFuZCBzdG9yZXMgaXQgaW4gYSBn
aXZlbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB0cmFuc2xhdGlvbiBvbiBY
IGF4aXMKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB0cmFuc2xhdGlvbiBvbiBZIGF4aXMK
KyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHRoZSB0cmFuc2xhdGlvbm9uIFogYXhpcworICAgICAq
IEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1h
dHJpeC5UcmFuc2xhdGlvblRvUmVmID0gZnVuY3Rpb24gKHgsIHksIHosIHJlc3VsdCkgeworICAg
ICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjAs
IDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAsIHgsIHksIHosIDEuMCwgcmVzdWx0KTsKKyAg
ICAgICAgcmVzdWx0Ll91cGRhdGVJZGVudGl0eVN0YXR1cyh4ID09PSAwICYmIHkgPT09IDAgJiYg
eiA9PT0gMCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IE1hdHJpeCB3
aG9zZSB2YWx1ZXMgYXJlIHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWVzIGZvciAiZ3JhZGllbnQiIChm
bG9hdCkgYmV0d2VlbiB0aGUgb25lcyBvZiB0aGUgbWF0cmljZXMgInN0YXJ0VmFsdWUiIGFuZCAi
ZW5kVmFsdWUiLgorICAgICAqIEBwYXJhbSBzdGFydFZhbHVlIGRlZmluZXMgdGhlIHN0YXJ0IHZh
bHVlCisgICAgICogQHBhcmFtIGVuZFZhbHVlIGRlZmluZXMgdGhlIGVuZCB2YWx1ZQorICAgICAq
IEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCBmYWN0b3IKKyAgICAgKiBAcmV0
dXJucyB0aGUgbmV3IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5MZXJwID0gZnVuY3Rpb24g
KHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBncmFkaWVudCkgeworICAgICAgICB2YXIgcmVzdWx0ID0g
bmV3IE1hdHJpeCgpOworICAgICAgICBNYXRyaXguTGVycFRvUmVmKHN0YXJ0VmFsdWUsIGVuZFZh
bHVlLCBncmFkaWVudCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNldCB0aGUgZ2l2ZW4gbWF0cml4ICJyZXN1bHQiIGFzIHRoZSBpbnRl
cnBvbGF0ZWQgdmFsdWVzIGZvciAiZ3JhZGllbnQiIChmbG9hdCkgYmV0d2VlbiB0aGUgb25lcyBv
ZiB0aGUgbWF0cmljZXMgInN0YXJ0VmFsdWUiIGFuZCAiZW5kVmFsdWUiLgorICAgICAqIEBwYXJh
bSBzdGFydFZhbHVlIGRlZmluZXMgdGhlIHN0YXJ0IHZhbHVlCisgICAgICogQHBhcmFtIGVuZFZh
bHVlIGRlZmluZXMgdGhlIGVuZCB2YWx1ZQorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVz
IHRoZSBncmFkaWVudCBmYWN0b3IKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGRlZmluZXMgdGhlIE1h
dHJpeCBvYmplY3Qgd2hlcmUgdG8gc3RvcmUgZGF0YQorICAgICAqLworICAgIE1hdHJpeC5MZXJw
VG9SZWYgPSBmdW5jdGlvbiAoc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50LCByZXN1bHQp
IHsKKyAgICAgICAgdmFyIHJlc3VsdE0gPSByZXN1bHQuX207CisgICAgICAgIHZhciBzdGFydE0g
PSBzdGFydFZhbHVlLm07CisgICAgICAgIHZhciBlbmRNID0gZW5kVmFsdWUubTsKKyAgICAgICAg
Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IDE2OyBpbmRleCsrKSB7CisgICAgICAgICAgICBy
ZXN1bHRNW2luZGV4XSA9IHN0YXJ0TVtpbmRleF0gKiAoMS4wIC0gZ3JhZGllbnQpICsgZW5kTVtp
bmRleF0gKiBncmFkaWVudDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuX21hcmtBc1VwZGF0
ZWQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJ1aWxkcyBhIG5ldyBtYXRyaXggd2hvc2Ug
dmFsdWVzIGFyZSBjb21wdXRlZCBieToKKyAgICAgKiAqIGRlY29tcG9zaW5nIHRoZSB0aGUgInN0
YXJ0VmFsdWUiIGFuZCAiZW5kVmFsdWUiIG1hdHJpY2VzIGludG8gdGhlaXIgcmVzcGVjdGl2ZSBz
Y2FsZSwgcm90YXRpb24gYW5kIHRyYW5zbGF0aW9uIG1hdHJpY2VzCisgICAgICogKiBpbnRlcnBv
bGF0aW5nIGZvciAiZ3JhZGllbnQiIChmbG9hdCkgdGhlIHZhbHVlcyBiZXR3ZWVuIGVhY2ggb2Yg
dGhlc2UgZGVjb21wb3NlZCBtYXRyaWNlcyBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgdGhlIGVuZAor
ICAgICAqICogcmVjb21wb3NpbmcgYSBuZXcgbWF0cml4IGZyb20gdGhlc2UgMyBpbnRlcnBvbGF0
ZWQgc2NhbGUsIHJvdGF0aW9uIGFuZCB0cmFuc2xhdGlvbiBtYXRyaWNlcworICAgICAqIEBwYXJh
bSBzdGFydFZhbHVlIGRlZmluZXMgdGhlIGZpcnN0IG1hdHJpeAorICAgICAqIEBwYXJhbSBlbmRW
YWx1ZSBkZWZpbmVzIHRoZSBzZWNvbmQgbWF0cml4CisgICAgICogQHBhcmFtIGdyYWRpZW50IGRl
ZmluZXMgdGhlIGdyYWRpZW50IGJldHdlZW4gdGhlIHR3byBtYXRyaWNlcworICAgICAqIEByZXR1
cm5zIHRoZSBuZXcgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LkRlY29tcG9zZUxlcnAgPSBm
dW5jdGlvbiAoc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50KSB7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBuZXcgTWF0cml4KCk7CisgICAgICAgIE1hdHJpeC5EZWNvbXBvc2VMZXJwVG9SZWYo
c3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGdyYWRpZW50LCByZXN1bHQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIGEgbWF0cml4IHRvIHZhbHVl
cyB3aGljaCBhcmUgY29tcHV0ZWQgYnk6CisgICAgICogKiBkZWNvbXBvc2luZyB0aGUgdGhlICJz
dGFydFZhbHVlIiBhbmQgImVuZFZhbHVlIiBtYXRyaWNlcyBpbnRvIHRoZWlyIHJlc3BlY3RpdmUg
c2NhbGUsIHJvdGF0aW9uIGFuZCB0cmFuc2xhdGlvbiBtYXRyaWNlcworICAgICAqICogaW50ZXJw
b2xhdGluZyBmb3IgImdyYWRpZW50IiAoZmxvYXQpIHRoZSB2YWx1ZXMgYmV0d2VlbiBlYWNoIG9m
IHRoZXNlIGRlY29tcG9zZWQgbWF0cmljZXMgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIHRoZSBlbmQK
KyAgICAgKiAqIHJlY29tcG9zaW5nIGEgbmV3IG1hdHJpeCBmcm9tIHRoZXNlIDMgaW50ZXJwb2xh
dGVkIHNjYWxlLCByb3RhdGlvbiBhbmQgdHJhbnNsYXRpb24gbWF0cmljZXMKKyAgICAgKiBAcGFy
YW0gc3RhcnRWYWx1ZSBkZWZpbmVzIHRoZSBmaXJzdCBtYXRyaXgKKyAgICAgKiBAcGFyYW0gZW5k
VmFsdWUgZGVmaW5lcyB0aGUgc2Vjb25kIG1hdHJpeAorICAgICAqIEBwYXJhbSBncmFkaWVudCBk
ZWZpbmVzIHRoZSBncmFkaWVudCBiZXR3ZWVuIHRoZSB0d28gbWF0cmljZXMKKyAgICAgKiBAcGFy
YW0gcmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXgu
RGVjb21wb3NlTGVycFRvUmVmID0gZnVuY3Rpb24gKHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBncmFk
aWVudCwgcmVzdWx0KSB7CisgICAgICAgIHZhciBzdGFydFNjYWxlID0gTWF0aFRtcC5WZWN0b3Iz
WzBdOworICAgICAgICB2YXIgc3RhcnRSb3RhdGlvbiA9IE1hdGhUbXAuUXVhdGVybmlvblswXTsK
KyAgICAgICAgdmFyIHN0YXJ0VHJhbnNsYXRpb24gPSBNYXRoVG1wLlZlY3RvcjNbMV07CisgICAg
ICAgIHN0YXJ0VmFsdWUuZGVjb21wb3NlKHN0YXJ0U2NhbGUsIHN0YXJ0Um90YXRpb24sIHN0YXJ0
VHJhbnNsYXRpb24pOworICAgICAgICB2YXIgZW5kU2NhbGUgPSBNYXRoVG1wLlZlY3RvcjNbMl07
CisgICAgICAgIHZhciBlbmRSb3RhdGlvbiA9IE1hdGhUbXAuUXVhdGVybmlvblsxXTsKKyAgICAg
ICAgdmFyIGVuZFRyYW5zbGF0aW9uID0gTWF0aFRtcC5WZWN0b3IzWzNdOworICAgICAgICBlbmRW
YWx1ZS5kZWNvbXBvc2UoZW5kU2NhbGUsIGVuZFJvdGF0aW9uLCBlbmRUcmFuc2xhdGlvbik7Cisg
ICAgICAgIHZhciByZXN1bHRTY2FsZSA9IE1hdGhUbXAuVmVjdG9yM1s0XTsKKyAgICAgICAgVmVj
dG9yMy5MZXJwVG9SZWYoc3RhcnRTY2FsZSwgZW5kU2NhbGUsIGdyYWRpZW50LCByZXN1bHRTY2Fs
ZSk7CisgICAgICAgIHZhciByZXN1bHRSb3RhdGlvbiA9IE1hdGhUbXAuUXVhdGVybmlvblsyXTsK
KyAgICAgICAgUXVhdGVybmlvbi5TbGVycFRvUmVmKHN0YXJ0Um90YXRpb24sIGVuZFJvdGF0aW9u
LCBncmFkaWVudCwgcmVzdWx0Um90YXRpb24pOworICAgICAgICB2YXIgcmVzdWx0VHJhbnNsYXRp
b24gPSBNYXRoVG1wLlZlY3RvcjNbNV07CisgICAgICAgIFZlY3RvcjMuTGVycFRvUmVmKHN0YXJ0
VHJhbnNsYXRpb24sIGVuZFRyYW5zbGF0aW9uLCBncmFkaWVudCwgcmVzdWx0VHJhbnNsYXRpb24p
OworICAgICAgICBNYXRyaXguQ29tcG9zZVRvUmVmKHJlc3VsdFNjYWxlLCByZXN1bHRSb3RhdGlv
biwgcmVzdWx0VHJhbnNsYXRpb24sIHJlc3VsdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIGEgbmV3IHJvdGF0aW9uIG1hdHJpeCB1c2VkIHRvIHJvdGF0ZSBhbiBlbnRpdHkgc28gYXMg
aXQgbG9va3MgYXQgdGhlIHRhcmdldCB2ZWN0b3IzLCBmcm9tIHRoZSBleWUgdmVjdG9yMyBwb3Np
dGlvbiwgdGhlIHVwIHZlY3RvcjMgYmVpbmcgb3JpZW50ZWQgbGlrZSAidXAiCisgICAgICogVGhp
cyBmdW5jdGlvbiB3b3JrcyBpbiBsZWZ0IGhhbmRlZCBtb2RlCisgICAgICogQHBhcmFtIGV5ZSBk
ZWZpbmVzIHRoZSBmaW5hbCBwb3NpdGlvbiBvZiB0aGUgZW50aXR5CisgICAgICogQHBhcmFtIHRh
cmdldCBkZWZpbmVzIHdoZXJlIHRoZSBlbnRpdHkgc2hvdWxkIGxvb2sgYXQKKyAgICAgKiBAcGFy
YW0gdXAgZGVmaW5lcyB0aGUgdXAgdmVjdG9yIGZvciB0aGUgZW50aXR5CisgICAgICogQHJldHVy
bnMgdGhlIG5ldyBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguTG9va0F0TEggPSBmdW5jdGlv
biAoZXllLCB0YXJnZXQsIHVwKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgTWF0cml4KCk7
CisgICAgICAgIE1hdHJpeC5Mb29rQXRMSFRvUmVmKGV5ZSwgdGFyZ2V0LCB1cCwgcmVzdWx0KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IGdpdmVuICJyZXN1bHQiIE1hdHJpeCB0byBhIHJvdGF0aW9uIG1hdHJpeCB1c2VkIHRvIHJvdGF0
ZSBhbiBlbnRpdHkgc28gdGhhdCBpdCBsb29rcyBhdCB0aGUgdGFyZ2V0IHZlY3RvcjMsIGZyb20g
dGhlIGV5ZSB2ZWN0b3IzIHBvc2l0aW9uLCB0aGUgdXAgdmVjdG9yMyBiZWluZyBvcmllbnRlZCBs
aWtlICJ1cCIuCisgICAgICogVGhpcyBmdW5jdGlvbiB3b3JrcyBpbiBsZWZ0IGhhbmRlZCBtb2Rl
CisgICAgICogQHBhcmFtIGV5ZSBkZWZpbmVzIHRoZSBmaW5hbCBwb3NpdGlvbiBvZiB0aGUgZW50
aXR5CisgICAgICogQHBhcmFtIHRhcmdldCBkZWZpbmVzIHdoZXJlIHRoZSBlbnRpdHkgc2hvdWxk
IGxvb2sgYXQKKyAgICAgKiBAcGFyYW0gdXAgZGVmaW5lcyB0aGUgdXAgdmVjdG9yIGZvciB0aGUg
ZW50aXR5CisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQgbWF0cml4Cisg
ICAgICovCisgICAgTWF0cml4Lkxvb2tBdExIVG9SZWYgPSBmdW5jdGlvbiAoZXllLCB0YXJnZXQs
IHVwLCByZXN1bHQpIHsKKyAgICAgICAgdmFyIHhBeGlzID0gTWF0aFRtcC5WZWN0b3IzWzBdOwor
ICAgICAgICB2YXIgeUF4aXMgPSBNYXRoVG1wLlZlY3RvcjNbMV07CisgICAgICAgIHZhciB6QXhp
cyA9IE1hdGhUbXAuVmVjdG9yM1syXTsKKyAgICAgICAgLy8gWiBheGlzCisgICAgICAgIHRhcmdl
dC5zdWJ0cmFjdFRvUmVmKGV5ZSwgekF4aXMpOworICAgICAgICB6QXhpcy5ub3JtYWxpemUoKTsK
KyAgICAgICAgLy8gWCBheGlzCisgICAgICAgIFZlY3RvcjMuQ3Jvc3NUb1JlZih1cCwgekF4aXMs
IHhBeGlzKTsKKyAgICAgICAgdmFyIHhTcXVhcmVMZW5ndGggPSB4QXhpcy5sZW5ndGhTcXVhcmVk
KCk7CisgICAgICAgIGlmICh4U3F1YXJlTGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICB4QXhp
cy54ID0gMS4wOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgeEF4aXMu
bm9ybWFsaXplRnJvbUxlbmd0aChNYXRoLnNxcnQoeFNxdWFyZUxlbmd0aCkpOworICAgICAgICB9
CisgICAgICAgIC8vIFkgYXhpcworICAgICAgICBWZWN0b3IzLkNyb3NzVG9SZWYoekF4aXMsIHhB
eGlzLCB5QXhpcyk7CisgICAgICAgIHlBeGlzLm5vcm1hbGl6ZSgpOworICAgICAgICAvLyBFeWUg
YW5nbGVzCisgICAgICAgIHZhciBleCA9IC1WZWN0b3IzLkRvdCh4QXhpcywgZXllKTsKKyAgICAg
ICAgdmFyIGV5ID0gLVZlY3RvcjMuRG90KHlBeGlzLCBleWUpOworICAgICAgICB2YXIgZXogPSAt
VmVjdG9yMy5Eb3QoekF4aXMsIGV5ZSk7CisgICAgICAgIE1hdHJpeC5Gcm9tVmFsdWVzVG9SZWYo
eEF4aXMueCwgeUF4aXMueCwgekF4aXMueCwgMC4wLCB4QXhpcy55LCB5QXhpcy55LCB6QXhpcy55
LCAwLjAsIHhBeGlzLnosIHlBeGlzLnosIHpBeGlzLnosIDAuMCwgZXgsIGV5LCBleiwgMS4wLCBy
ZXN1bHQpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIG5ldyByb3RhdGlvbiBtYXRy
aXggdXNlZCB0byByb3RhdGUgYW4gZW50aXR5IHNvIGFzIGl0IGxvb2tzIGF0IHRoZSB0YXJnZXQg
dmVjdG9yMywgZnJvbSB0aGUgZXllIHZlY3RvcjMgcG9zaXRpb24sIHRoZSB1cCB2ZWN0b3IzIGJl
aW5nIG9yaWVudGVkIGxpa2UgInVwIgorICAgICAqIFRoaXMgZnVuY3Rpb24gd29ya3MgaW4gcmln
aHQgaGFuZGVkIG1vZGUKKyAgICAgKiBAcGFyYW0gZXllIGRlZmluZXMgdGhlIGZpbmFsIHBvc2l0
aW9uIG9mIHRoZSBlbnRpdHkKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgd2hlcmUgdGhl
IGVudGl0eSBzaG91bGQgbG9vayBhdAorICAgICAqIEBwYXJhbSB1cCBkZWZpbmVzIHRoZSB1cCB2
ZWN0b3IgZm9yIHRoZSBlbnRpdHkKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IG1hdHJpeAorICAg
ICAqLworICAgIE1hdHJpeC5Mb29rQXRSSCA9IGZ1bmN0aW9uIChleWUsIHRhcmdldCwgdXApIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBNYXRyaXgoKTsKKyAgICAgICAgTWF0cml4Lkxvb2tB
dFJIVG9SZWYoZXllLCB0YXJnZXQsIHVwLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2ZW4gInJlc3VsdCIgTWF0cml4
IHRvIGEgcm90YXRpb24gbWF0cml4IHVzZWQgdG8gcm90YXRlIGFuIGVudGl0eSBzbyB0aGF0IGl0
IGxvb2tzIGF0IHRoZSB0YXJnZXQgdmVjdG9yMywgZnJvbSB0aGUgZXllIHZlY3RvcjMgcG9zaXRp
b24sIHRoZSB1cCB2ZWN0b3IzIGJlaW5nIG9yaWVudGVkIGxpa2UgInVwIi4KKyAgICAgKiBUaGlz
IGZ1bmN0aW9uIHdvcmtzIGluIHJpZ2h0IGhhbmRlZCBtb2RlCisgICAgICogQHBhcmFtIGV5ZSBk
ZWZpbmVzIHRoZSBmaW5hbCBwb3NpdGlvbiBvZiB0aGUgZW50aXR5CisgICAgICogQHBhcmFtIHRh
cmdldCBkZWZpbmVzIHdoZXJlIHRoZSBlbnRpdHkgc2hvdWxkIGxvb2sgYXQKKyAgICAgKiBAcGFy
YW0gdXAgZGVmaW5lcyB0aGUgdXAgdmVjdG9yIGZvciB0aGUgZW50aXR5CisgICAgICogQHBhcmFt
IHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4Lkxv
b2tBdFJIVG9SZWYgPSBmdW5jdGlvbiAoZXllLCB0YXJnZXQsIHVwLCByZXN1bHQpIHsKKyAgICAg
ICAgdmFyIHhBeGlzID0gTWF0aFRtcC5WZWN0b3IzWzBdOworICAgICAgICB2YXIgeUF4aXMgPSBN
YXRoVG1wLlZlY3RvcjNbMV07CisgICAgICAgIHZhciB6QXhpcyA9IE1hdGhUbXAuVmVjdG9yM1sy
XTsKKyAgICAgICAgLy8gWiBheGlzCisgICAgICAgIGV5ZS5zdWJ0cmFjdFRvUmVmKHRhcmdldCwg
ekF4aXMpOworICAgICAgICB6QXhpcy5ub3JtYWxpemUoKTsKKyAgICAgICAgLy8gWCBheGlzCisg
ICAgICAgIFZlY3RvcjMuQ3Jvc3NUb1JlZih1cCwgekF4aXMsIHhBeGlzKTsKKyAgICAgICAgdmFy
IHhTcXVhcmVMZW5ndGggPSB4QXhpcy5sZW5ndGhTcXVhcmVkKCk7CisgICAgICAgIGlmICh4U3F1
YXJlTGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICB4QXhpcy54ID0gMS4wOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgeEF4aXMubm9ybWFsaXplRnJvbUxlbmd0aChN
YXRoLnNxcnQoeFNxdWFyZUxlbmd0aCkpOworICAgICAgICB9CisgICAgICAgIC8vIFkgYXhpcwor
ICAgICAgICBWZWN0b3IzLkNyb3NzVG9SZWYoekF4aXMsIHhBeGlzLCB5QXhpcyk7CisgICAgICAg
IHlBeGlzLm5vcm1hbGl6ZSgpOworICAgICAgICAvLyBFeWUgYW5nbGVzCisgICAgICAgIHZhciBl
eCA9IC1WZWN0b3IzLkRvdCh4QXhpcywgZXllKTsKKyAgICAgICAgdmFyIGV5ID0gLVZlY3RvcjMu
RG90KHlBeGlzLCBleWUpOworICAgICAgICB2YXIgZXogPSAtVmVjdG9yMy5Eb3QoekF4aXMsIGV5
ZSk7CisgICAgICAgIE1hdHJpeC5Gcm9tVmFsdWVzVG9SZWYoeEF4aXMueCwgeUF4aXMueCwgekF4
aXMueCwgMC4wLCB4QXhpcy55LCB5QXhpcy55LCB6QXhpcy55LCAwLjAsIHhBeGlzLnosIHlBeGlz
LnosIHpBeGlzLnosIDAuMCwgZXgsIGV5LCBleiwgMS4wLCByZXN1bHQpOworICAgIH07CisgICAg
LyoqCisgICAgICogQ3JlYXRlIGEgbGVmdC1oYW5kZWQgb3J0aG9ncmFwaGljIHByb2plY3Rpb24g
bWF0cml4CisgICAgICogQHBhcmFtIHdpZHRoIGRlZmluZXMgdGhlIHZpZXdwb3J0IHdpZHRoCisg
ICAgICogQHBhcmFtIGhlaWdodCBkZWZpbmVzIHRoZSB2aWV3cG9ydCBoZWlnaHQKKyAgICAgKiBA
cGFyYW0gem5lYXIgZGVmaW5lcyB0aGUgbmVhciBjbGlwIHBsYW5lCisgICAgICogQHBhcmFtIHpm
YXIgZGVmaW5lcyB0aGUgZmFyIGNsaXAgcGxhbmUKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBtYXRy
aXggYXMgYSBsZWZ0LWhhbmRlZCBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBtYXRyaXgKKyAgICAg
Ki8KKyAgICBNYXRyaXguT3J0aG9MSCA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB6bmVhciwg
emZhcikgeworICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpOworICAgICAgICBNYXRy
aXguT3J0aG9MSFRvUmVmKHdpZHRoLCBoZWlnaHQsIHpuZWFyLCB6ZmFyLCBtYXRyaXgpOworICAg
ICAgICByZXR1cm4gbWF0cml4OworICAgIH07CisgICAgLyoqCisgICAgICogU3RvcmUgYSBsZWZ0
LWhhbmRlZCBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiB0byBhIGdpdmVuIG1hdHJpeAorICAgICAq
IEBwYXJhbSB3aWR0aCBkZWZpbmVzIHRoZSB2aWV3cG9ydCB3aWR0aAorICAgICAqIEBwYXJhbSBo
ZWlnaHQgZGVmaW5lcyB0aGUgdmlld3BvcnQgaGVpZ2h0CisgICAgICogQHBhcmFtIHpuZWFyIGRl
ZmluZXMgdGhlIG5lYXIgY2xpcCBwbGFuZQorICAgICAqIEBwYXJhbSB6ZmFyIGRlZmluZXMgdGhl
IGZhciBjbGlwIHBsYW5lCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQg
bWF0cml4CisgICAgICovCisgICAgTWF0cml4Lk9ydGhvTEhUb1JlZiA9IGZ1bmN0aW9uICh3aWR0
aCwgaGVpZ2h0LCB6bmVhciwgemZhciwgcmVzdWx0KSB7CisgICAgICAgIHZhciBuID0gem5lYXI7
CisgICAgICAgIHZhciBmID0gemZhcjsKKyAgICAgICAgdmFyIGEgPSAyLjAgLyB3aWR0aDsKKyAg
ICAgICAgdmFyIGIgPSAyLjAgLyBoZWlnaHQ7CisgICAgICAgIHZhciBjID0gMi4wIC8gKGYgLSBu
KTsKKyAgICAgICAgdmFyIGQgPSAtKGYgKyBuKSAvIChmIC0gbik7CisgICAgICAgIE1hdHJpeC5G
cm9tVmFsdWVzVG9SZWYoYSwgMC4wLCAwLjAsIDAuMCwgMC4wLCBiLCAwLjAsIDAuMCwgMC4wLCAw
LjAsIGMsIDAuMCwgMC4wLCAwLjAsIGQsIDEuMCwgcmVzdWx0KTsKKyAgICAgICAgcmVzdWx0Ll91
cGRhdGVJZGVudGl0eVN0YXR1cyhhID09PSAxICYmIGIgPT09IDEgJiYgYyA9PT0gMSAmJiBkID09
PSAwKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGxlZnQtaGFuZGVkIG9ydGhv
Z3JhcGhpYyBwcm9qZWN0aW9uIG1hdHJpeAorICAgICAqIEBwYXJhbSBsZWZ0IGRlZmluZXMgdGhl
IHZpZXdwb3J0IGxlZnQgY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSByaWdodCBkZWZpbmVzIHRo
ZSB2aWV3cG9ydCByaWdodCBjb29yZGluYXRlCisgICAgICogQHBhcmFtIGJvdHRvbSBkZWZpbmVz
IHRoZSB2aWV3cG9ydCBib3R0b20gY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSB0b3AgZGVmaW5l
cyB0aGUgdmlld3BvcnQgdG9wIGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gem5lYXIgZGVmaW5l
cyB0aGUgbmVhciBjbGlwIHBsYW5lCisgICAgICogQHBhcmFtIHpmYXIgZGVmaW5lcyB0aGUgZmFy
IGNsaXAgcGxhbmUKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBtYXRyaXggYXMgYSBsZWZ0LWhhbmRl
ZCBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguT3J0
aG9PZmZDZW50ZXJMSCA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIHpuZWFy
LCB6ZmFyKSB7CisgICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7CisgICAgICAgIE1h
dHJpeC5PcnRob09mZkNlbnRlckxIVG9SZWYobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCB6bmVh
ciwgemZhciwgbWF0cml4KTsKKyAgICAgICAgcmV0dXJuIG1hdHJpeDsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFN0b3JlcyBhIGxlZnQtaGFuZGVkIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIGlu
dG8gYSBnaXZlbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0gbGVmdCBkZWZpbmVzIHRoZSB2aWV3cG9y
dCBsZWZ0IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gcmlnaHQgZGVmaW5lcyB0aGUgdmlld3Bv
cnQgcmlnaHQgY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSBib3R0b20gZGVmaW5lcyB0aGUgdmll
d3BvcnQgYm90dG9tIGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gdG9wIGRlZmluZXMgdGhlIHZp
ZXdwb3J0IHRvcCBjb29yZGluYXRlCisgICAgICogQHBhcmFtIHpuZWFyIGRlZmluZXMgdGhlIG5l
YXIgY2xpcCBwbGFuZQorICAgICAqIEBwYXJhbSB6ZmFyIGRlZmluZXMgdGhlIGZhciBjbGlwIHBs
YW5lCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQgbWF0cml4CisgICAg
ICovCisgICAgTWF0cml4Lk9ydGhvT2ZmQ2VudGVyTEhUb1JlZiA9IGZ1bmN0aW9uIChsZWZ0LCBy
aWdodCwgYm90dG9tLCB0b3AsIHpuZWFyLCB6ZmFyLCByZXN1bHQpIHsKKyAgICAgICAgdmFyIG4g
PSB6bmVhcjsKKyAgICAgICAgdmFyIGYgPSB6ZmFyOworICAgICAgICB2YXIgYSA9IDIuMCAvIChy
aWdodCAtIGxlZnQpOworICAgICAgICB2YXIgYiA9IDIuMCAvICh0b3AgLSBib3R0b20pOworICAg
ICAgICB2YXIgYyA9IDIuMCAvIChmIC0gbik7CisgICAgICAgIHZhciBkID0gLShmICsgbikgLyAo
ZiAtIG4pOworICAgICAgICB2YXIgaTAgPSAobGVmdCArIHJpZ2h0KSAvIChsZWZ0IC0gcmlnaHQp
OworICAgICAgICB2YXIgaTEgPSAodG9wICsgYm90dG9tKSAvIChib3R0b20gLSB0b3ApOworICAg
ICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKGEsIDAuMCwgMC4wLCAwLjAsIDAuMCwgYiwgMC4w
LCAwLjAsIDAuMCwgMC4wLCBjLCAwLjAsIGkwLCBpMSwgZCwgMS4wLCByZXN1bHQpOworICAgICAg
ICByZXN1bHQuX21hcmtBc1VwZGF0ZWQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0
ZXMgYSByaWdodC1oYW5kZWQgb3J0aG9ncmFwaGljIHByb2plY3Rpb24gbWF0cml4CisgICAgICog
QHBhcmFtIGxlZnQgZGVmaW5lcyB0aGUgdmlld3BvcnQgbGVmdCBjb29yZGluYXRlCisgICAgICog
QHBhcmFtIHJpZ2h0IGRlZmluZXMgdGhlIHZpZXdwb3J0IHJpZ2h0IGNvb3JkaW5hdGUKKyAgICAg
KiBAcGFyYW0gYm90dG9tIGRlZmluZXMgdGhlIHZpZXdwb3J0IGJvdHRvbSBjb29yZGluYXRlCisg
ICAgICogQHBhcmFtIHRvcCBkZWZpbmVzIHRoZSB2aWV3cG9ydCB0b3AgY29vcmRpbmF0ZQorICAg
ICAqIEBwYXJhbSB6bmVhciBkZWZpbmVzIHRoZSBuZWFyIGNsaXAgcGxhbmUKKyAgICAgKiBAcGFy
YW0gemZhciBkZWZpbmVzIHRoZSBmYXIgY2xpcCBwbGFuZQorICAgICAqIEByZXR1cm5zIGEgbmV3
IG1hdHJpeCBhcyBhIHJpZ2h0LWhhbmRlZCBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBtYXRyaXgK
KyAgICAgKi8KKyAgICBNYXRyaXguT3J0aG9PZmZDZW50ZXJSSCA9IGZ1bmN0aW9uIChsZWZ0LCBy
aWdodCwgYm90dG9tLCB0b3AsIHpuZWFyLCB6ZmFyKSB7CisgICAgICAgIHZhciBtYXRyaXggPSBu
ZXcgTWF0cml4KCk7CisgICAgICAgIE1hdHJpeC5PcnRob09mZkNlbnRlclJIVG9SZWYobGVmdCwg
cmlnaHQsIGJvdHRvbSwgdG9wLCB6bmVhciwgemZhciwgbWF0cml4KTsKKyAgICAgICAgcmV0dXJu
IG1hdHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFN0b3JlcyBhIHJpZ2h0LWhhbmRlZCBv
cnRob2dyYXBoaWMgcHJvamVjdGlvbiBpbnRvIGEgZ2l2ZW4gbWF0cml4CisgICAgICogQHBhcmFt
IGxlZnQgZGVmaW5lcyB0aGUgdmlld3BvcnQgbGVmdCBjb29yZGluYXRlCisgICAgICogQHBhcmFt
IHJpZ2h0IGRlZmluZXMgdGhlIHZpZXdwb3J0IHJpZ2h0IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFy
YW0gYm90dG9tIGRlZmluZXMgdGhlIHZpZXdwb3J0IGJvdHRvbSBjb29yZGluYXRlCisgICAgICog
QHBhcmFtIHRvcCBkZWZpbmVzIHRoZSB2aWV3cG9ydCB0b3AgY29vcmRpbmF0ZQorICAgICAqIEBw
YXJhbSB6bmVhciBkZWZpbmVzIHRoZSBuZWFyIGNsaXAgcGxhbmUKKyAgICAgKiBAcGFyYW0gemZh
ciBkZWZpbmVzIHRoZSBmYXIgY2xpcCBwbGFuZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5l
cyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5PcnRob09mZkNlbnRlclJI
VG9SZWYgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCB6bmVhciwgemZhciwg
cmVzdWx0KSB7CisgICAgICAgIE1hdHJpeC5PcnRob09mZkNlbnRlckxIVG9SZWYobGVmdCwgcmln
aHQsIGJvdHRvbSwgdG9wLCB6bmVhciwgemZhciwgcmVzdWx0KTsKKyAgICAgICAgcmVzdWx0Ll9t
WzEwXSAqPSAtMTsgLy8gTm8gbmVlZCB0byBjYWxsIF9tYXJrQXNVcGRhdGVkIGFzIHByZXZpb3Vz
IGZ1bmN0aW9uIGFscmVhZHkgY2FsbGVkIGl0IGFuZCBsZXQgX2lzSWRlbnRpdHlEaXJ0eSB0byB0
cnVlCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbGVmdC1oYW5kZWQgcGVyc3Bl
Y3RpdmUgcHJvamVjdGlvbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0gd2lkdGggZGVmaW5lcyB0aGUg
dmlld3BvcnQgd2lkdGgKKyAgICAgKiBAcGFyYW0gaGVpZ2h0IGRlZmluZXMgdGhlIHZpZXdwb3J0
IGhlaWdodAorICAgICAqIEBwYXJhbSB6bmVhciBkZWZpbmVzIHRoZSBuZWFyIGNsaXAgcGxhbmUK
KyAgICAgKiBAcGFyYW0gemZhciBkZWZpbmVzIHRoZSBmYXIgY2xpcCBwbGFuZQorICAgICAqIEBy
ZXR1cm5zIGEgbmV3IG1hdHJpeCBhcyBhIGxlZnQtaGFuZGVkIHBlcnNwZWN0aXZlIHByb2plY3Rp
b24gbWF0cml4CisgICAgICovCisgICAgTWF0cml4LlBlcnNwZWN0aXZlTEggPSBmdW5jdGlvbiAo
d2lkdGgsIGhlaWdodCwgem5lYXIsIHpmYXIpIHsKKyAgICAgICAgdmFyIG1hdHJpeCA9IG5ldyBN
YXRyaXgoKTsKKyAgICAgICAgdmFyIG4gPSB6bmVhcjsKKyAgICAgICAgdmFyIGYgPSB6ZmFyOwor
ICAgICAgICB2YXIgYSA9IDIuMCAqIG4gLyB3aWR0aDsKKyAgICAgICAgdmFyIGIgPSAyLjAgKiBu
IC8gaGVpZ2h0OworICAgICAgICB2YXIgYyA9IChmICsgbikgLyAoZiAtIG4pOworICAgICAgICB2
YXIgZCA9IC0yLjAgKiBmICogbiAvIChmIC0gbik7CisgICAgICAgIE1hdHJpeC5Gcm9tVmFsdWVz
VG9SZWYoYSwgMC4wLCAwLjAsIDAuMCwgMC4wLCBiLCAwLjAsIDAuMCwgMC4wLCAwLjAsIGMsIDEu
MCwgMC4wLCAwLjAsIGQsIDAuMCwgbWF0cml4KTsKKyAgICAgICAgbWF0cml4Ll91cGRhdGVJZGVu
dGl0eVN0YXR1cyhmYWxzZSk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbGVmdC1oYW5kZWQgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBt
YXRyaXgKKyAgICAgKiBAcGFyYW0gZm92IGRlZmluZXMgdGhlIGhvcml6b250YWwgZmllbGQgb2Yg
dmlldworICAgICAqIEBwYXJhbSBhc3BlY3QgZGVmaW5lcyB0aGUgYXNwZWN0IHJhdGlvCisgICAg
ICogQHBhcmFtIHpuZWFyIGRlZmluZXMgdGhlIG5lYXIgY2xpcCBwbGFuZQorICAgICAqIEBwYXJh
bSB6ZmFyIGRlZmluZXMgdGhlIGZhciBjbGlwIHBsYW5lCisgICAgICogQHJldHVybnMgYSBuZXcg
bWF0cml4IGFzIGEgbGVmdC1oYW5kZWQgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXgKKyAg
ICAgKi8KKyAgICBNYXRyaXguUGVyc3BlY3RpdmVGb3ZMSCA9IGZ1bmN0aW9uIChmb3YsIGFzcGVj
dCwgem5lYXIsIHpmYXIpIHsKKyAgICAgICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXgoKTsKKyAg
ICAgICAgTWF0cml4LlBlcnNwZWN0aXZlRm92TEhUb1JlZihmb3YsIGFzcGVjdCwgem5lYXIsIHpm
YXIsIG1hdHJpeCk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTdG9yZXMgYSBsZWZ0LWhhbmRlZCBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIGludG8gYSBn
aXZlbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0gZm92IGRlZmluZXMgdGhlIGhvcml6b250YWwgZmll
bGQgb2YgdmlldworICAgICAqIEBwYXJhbSBhc3BlY3QgZGVmaW5lcyB0aGUgYXNwZWN0IHJhdGlv
CisgICAgICogQHBhcmFtIHpuZWFyIGRlZmluZXMgdGhlIG5lYXIgY2xpcCBwbGFuZQorICAgICAq
IEBwYXJhbSB6ZmFyIGRlZmluZXMgdGhlIGZhciBjbGlwIHBsYW5lCisgICAgICogQHBhcmFtIHJl
c3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQgbWF0cml4CisgICAgICogQHBhcmFtIGlzVmVydGljYWxG
b3ZGaXhlZCBkZWZpbmVzIGl0IHRoZSBmb3YgaXMgdmVydGljYWxseSBmaXhlZCAoZGVmYXVsdCkg
b3IgaG9yaXpvbnRhbGx5CisgICAgICovCisgICAgTWF0cml4LlBlcnNwZWN0aXZlRm92TEhUb1Jl
ZiA9IGZ1bmN0aW9uIChmb3YsIGFzcGVjdCwgem5lYXIsIHpmYXIsIHJlc3VsdCwgaXNWZXJ0aWNh
bEZvdkZpeGVkKSB7CisgICAgICAgIGlmIChpc1ZlcnRpY2FsRm92Rml4ZWQgPT09IHZvaWQgMCkg
eyBpc1ZlcnRpY2FsRm92Rml4ZWQgPSB0cnVlOyB9CisgICAgICAgIHZhciBuID0gem5lYXI7Cisg
ICAgICAgIHZhciBmID0gemZhcjsKKyAgICAgICAgdmFyIHQgPSAxLjAgLyAoTWF0aC50YW4oZm92
ICogMC41KSk7CisgICAgICAgIHZhciBhID0gaXNWZXJ0aWNhbEZvdkZpeGVkID8gKHQgLyBhc3Bl
Y3QpIDogdDsKKyAgICAgICAgdmFyIGIgPSBpc1ZlcnRpY2FsRm92Rml4ZWQgPyB0IDogKHQgKiBh
c3BlY3QpOworICAgICAgICB2YXIgYyA9IChmICsgbikgLyAoZiAtIG4pOworICAgICAgICB2YXIg
ZCA9IC0yLjAgKiBmICogbiAvIChmIC0gbik7CisgICAgICAgIE1hdHJpeC5Gcm9tVmFsdWVzVG9S
ZWYoYSwgMC4wLCAwLjAsIDAuMCwgMC4wLCBiLCAwLjAsIDAuMCwgMC4wLCAwLjAsIGMsIDEuMCwg
MC4wLCAwLjAsIGQsIDAuMCwgcmVzdWx0KTsKKyAgICAgICAgcmVzdWx0Ll91cGRhdGVJZGVudGl0
eVN0YXR1cyhmYWxzZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcmlnaHQt
aGFuZGVkIHBlcnNwZWN0aXZlIHByb2plY3Rpb24gbWF0cml4CisgICAgICogQHBhcmFtIGZvdiBk
ZWZpbmVzIHRoZSBob3Jpem9udGFsIGZpZWxkIG9mIHZpZXcKKyAgICAgKiBAcGFyYW0gYXNwZWN0
IGRlZmluZXMgdGhlIGFzcGVjdCByYXRpbworICAgICAqIEBwYXJhbSB6bmVhciBkZWZpbmVzIHRo
ZSBuZWFyIGNsaXAgcGxhbmUKKyAgICAgKiBAcGFyYW0gemZhciBkZWZpbmVzIHRoZSBmYXIgY2xp
cCBwbGFuZQorICAgICAqIEByZXR1cm5zIGEgbmV3IG1hdHJpeCBhcyBhIHJpZ2h0LWhhbmRlZCBw
ZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5QZXJzcGVj
dGl2ZUZvdlJIID0gZnVuY3Rpb24gKGZvdiwgYXNwZWN0LCB6bmVhciwgemZhcikgeworICAgICAg
ICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpOworICAgICAgICBNYXRyaXguUGVyc3BlY3RpdmVG
b3ZSSFRvUmVmKGZvdiwgYXNwZWN0LCB6bmVhciwgemZhciwgbWF0cml4KTsKKyAgICAgICAgcmV0
dXJuIG1hdHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFN0b3JlcyBhIHJpZ2h0LWhhbmRl
ZCBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIGludG8gYSBnaXZlbiBtYXRyaXgKKyAgICAgKiBAcGFy
YW0gZm92IGRlZmluZXMgdGhlIGhvcml6b250YWwgZmllbGQgb2YgdmlldworICAgICAqIEBwYXJh
bSBhc3BlY3QgZGVmaW5lcyB0aGUgYXNwZWN0IHJhdGlvCisgICAgICogQHBhcmFtIHpuZWFyIGRl
ZmluZXMgdGhlIG5lYXIgY2xpcCBwbGFuZQorICAgICAqIEBwYXJhbSB6ZmFyIGRlZmluZXMgdGhl
IGZhciBjbGlwIHBsYW5lCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSB0YXJnZXQg
bWF0cml4CisgICAgICogQHBhcmFtIGlzVmVydGljYWxGb3ZGaXhlZCBkZWZpbmVzIGl0IHRoZSBm
b3YgaXMgdmVydGljYWxseSBmaXhlZCAoZGVmYXVsdCkgb3IgaG9yaXpvbnRhbGx5CisgICAgICov
CisgICAgTWF0cml4LlBlcnNwZWN0aXZlRm92UkhUb1JlZiA9IGZ1bmN0aW9uIChmb3YsIGFzcGVj
dCwgem5lYXIsIHpmYXIsIHJlc3VsdCwgaXNWZXJ0aWNhbEZvdkZpeGVkKSB7CisgICAgICAgIC8v
YWx0ZXJuYXRpdmVseSB0aGlzIGNvdWxkIGJlIGV4cHJlc3NlZCBhczoKKyAgICAgICAgLy8gICAg
bSA9IFBlcnNwZWN0aXZlRm92TEhUb1JlZgorICAgICAgICAvLyAgICBtWzEwXSAqPSAtMS4wOwor
ICAgICAgICAvLyAgICBtWzExXSAqPSAtMS4wOworICAgICAgICBpZiAoaXNWZXJ0aWNhbEZvdkZp
eGVkID09PSB2b2lkIDApIHsgaXNWZXJ0aWNhbEZvdkZpeGVkID0gdHJ1ZTsgfQorICAgICAgICB2
YXIgbiA9IHpuZWFyOworICAgICAgICB2YXIgZiA9IHpmYXI7CisgICAgICAgIHZhciB0ID0gMS4w
IC8gKE1hdGgudGFuKGZvdiAqIDAuNSkpOworICAgICAgICB2YXIgYSA9IGlzVmVydGljYWxGb3ZG
aXhlZCA/ICh0IC8gYXNwZWN0KSA6IHQ7CisgICAgICAgIHZhciBiID0gaXNWZXJ0aWNhbEZvdkZp
eGVkID8gdCA6ICh0ICogYXNwZWN0KTsKKyAgICAgICAgdmFyIGMgPSAtKGYgKyBuKSAvIChmIC0g
bik7CisgICAgICAgIHZhciBkID0gLTIgKiBmICogbiAvIChmIC0gbik7CisgICAgICAgIE1hdHJp
eC5Gcm9tVmFsdWVzVG9SZWYoYSwgMC4wLCAwLjAsIDAuMCwgMC4wLCBiLCAwLjAsIDAuMCwgMC4w
LCAwLjAsIGMsIC0xLjAsIDAuMCwgMC4wLCBkLCAwLjAsIHJlc3VsdCk7CisgICAgICAgIHJlc3Vs
dC5fdXBkYXRlSWRlbnRpdHlTdGF0dXMoZmFsc2UpOworICAgIH07CisgICAgLyoqCisgICAgICog
U3RvcmVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBmb3IgV2ViVlIgaW5mbyBhIGdpdmVuIG1h
dHJpeAorICAgICAqIEBwYXJhbSBmb3YgZGVmaW5lcyB0aGUgZmllbGQgb2YgdmlldworICAgICAq
IEBwYXJhbSB6bmVhciBkZWZpbmVzIHRoZSBuZWFyIGNsaXAgcGxhbmUKKyAgICAgKiBAcGFyYW0g
emZhciBkZWZpbmVzIHRoZSBmYXIgY2xpcCBwbGFuZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVm
aW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqIEBwYXJhbSByaWdodEhhbmRlZCBkZWZpbmVz
IGlmIHRoZSBtYXRyaXggbXVzdCBiZSBpbiByaWdodC1oYW5kZWQgbW9kZSAoZmFsc2UgYnkgZGVm
YXVsdCkKKyAgICAgKi8KKyAgICBNYXRyaXguUGVyc3BlY3RpdmVGb3ZXZWJWUlRvUmVmID0gZnVu
Y3Rpb24gKGZvdiwgem5lYXIsIHpmYXIsIHJlc3VsdCwgcmlnaHRIYW5kZWQpIHsKKyAgICAgICAg
aWYgKHJpZ2h0SGFuZGVkID09PSB2b2lkIDApIHsgcmlnaHRIYW5kZWQgPSBmYWxzZTsgfQorICAg
ICAgICB2YXIgcmlnaHRIYW5kZWRGYWN0b3IgPSByaWdodEhhbmRlZCA/IC0xIDogMTsKKyAgICAg
ICAgdmFyIHVwVGFuID0gTWF0aC50YW4oZm92LnVwRGVncmVlcyAqIE1hdGguUEkgLyAxODAuMCk7
CisgICAgICAgIHZhciBkb3duVGFuID0gTWF0aC50YW4oZm92LmRvd25EZWdyZWVzICogTWF0aC5Q
SSAvIDE4MC4wKTsKKyAgICAgICAgdmFyIGxlZnRUYW4gPSBNYXRoLnRhbihmb3YubGVmdERlZ3Jl
ZXMgKiBNYXRoLlBJIC8gMTgwLjApOworICAgICAgICB2YXIgcmlnaHRUYW4gPSBNYXRoLnRhbihm
b3YucmlnaHREZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTsKKyAgICAgICAgdmFyIHhTY2FsZSA9
IDIuMCAvIChsZWZ0VGFuICsgcmlnaHRUYW4pOworICAgICAgICB2YXIgeVNjYWxlID0gMi4wIC8g
KHVwVGFuICsgZG93blRhbik7CisgICAgICAgIHZhciBtID0gcmVzdWx0Ll9tOworICAgICAgICBt
WzBdID0geFNjYWxlOworICAgICAgICBtWzFdID0gbVsyXSA9IG1bM10gPSBtWzRdID0gMC4wOwor
ICAgICAgICBtWzVdID0geVNjYWxlOworICAgICAgICBtWzZdID0gbVs3XSA9IDAuMDsKKyAgICAg
ICAgbVs4XSA9ICgobGVmdFRhbiAtIHJpZ2h0VGFuKSAqIHhTY2FsZSAqIDAuNSk7CisgICAgICAg
IG1bOV0gPSAtKCh1cFRhbiAtIGRvd25UYW4pICogeVNjYWxlICogMC41KTsKKyAgICAgICAgbVsx
MF0gPSAtemZhciAvICh6bmVhciAtIHpmYXIpOworICAgICAgICBtWzExXSA9IDEuMCAqIHJpZ2h0
SGFuZGVkRmFjdG9yOworICAgICAgICBtWzEyXSA9IG1bMTNdID0gbVsxNV0gPSAwLjA7CisgICAg
ICAgIG1bMTRdID0gLSgyLjAgKiB6ZmFyICogem5lYXIpIC8gKHpmYXIgLSB6bmVhcik7CisgICAg
ICAgIHJlc3VsdC5fbWFya0FzVXBkYXRlZCgpOworICAgIH07CisgICAgLyoqCisgICAgICogQ29t
cHV0ZXMgYSBjb21wbGV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKKyAgICAgKiBAcGFyYW0gdmll
d3BvcnQgZGVmaW5lcyB0aGUgdmlld3BvcnQgdG8gdXNlCisgICAgICogQHBhcmFtIHdvcmxkIGRl
ZmluZXMgdGhlIHdvcmxkIG1hdHJpeAorICAgICAqIEBwYXJhbSB2aWV3IGRlZmluZXMgdGhlIHZp
ZXcgbWF0cml4CisgICAgICogQHBhcmFtIHByb2plY3Rpb24gZGVmaW5lcyB0aGUgcHJvamVjdGlv
biBtYXRyaXgKKyAgICAgKiBAcGFyYW0gem1pbiBkZWZpbmVzIHRoZSBuZWFyIGNsaXAgcGxhbmUK
KyAgICAgKiBAcGFyYW0gem1heCBkZWZpbmVzIHRoZSBmYXIgY2xpcCBwbGFuZQorICAgICAqIEBy
ZXR1cm5zIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguR2V0
RmluYWxNYXRyaXggPSBmdW5jdGlvbiAodmlld3BvcnQsIHdvcmxkLCB2aWV3LCBwcm9qZWN0aW9u
LCB6bWluLCB6bWF4KSB7CisgICAgICAgIHZhciBjdyA9IHZpZXdwb3J0LndpZHRoOworICAgICAg
ICB2YXIgY2ggPSB2aWV3cG9ydC5oZWlnaHQ7CisgICAgICAgIHZhciBjeCA9IHZpZXdwb3J0Lng7
CisgICAgICAgIHZhciBjeSA9IHZpZXdwb3J0Lnk7CisgICAgICAgIHZhciB2aWV3cG9ydE1hdHJp
eCA9IE1hdHJpeC5Gcm9tVmFsdWVzKGN3IC8gMi4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIC1jaCAv
IDIuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCB6bWF4IC0gem1pbiwgMC4wLCBjeCArIGN3IC8gMi4w
LCBjaCAvIDIuMCArIGN5LCB6bWluLCAxLjApOworICAgICAgICB2YXIgbWF0cml4ID0gTWF0aFRt
cC5NYXRyaXhbMF07CisgICAgICAgIHdvcmxkLm11bHRpcGx5VG9SZWYodmlldywgbWF0cml4KTsK
KyAgICAgICAgbWF0cml4Lm11bHRpcGx5VG9SZWYocHJvamVjdGlvbiwgbWF0cml4KTsKKyAgICAg
ICAgcmV0dXJuIG1hdHJpeC5tdWx0aXBseSh2aWV3cG9ydE1hdHJpeCk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBFeHRyYWN0cyBhIDJ4MiBtYXRyaXggZnJvbSBhIGdpdmVuIG1hdHJpeCBhbmQg
c3RvcmUgdGhlIHJlc3VsdCBpbiBhIEZsb2F0MzJBcnJheQorICAgICAqIEBwYXJhbSBtYXRyaXgg
ZGVmaW5lcyB0aGUgbWF0cml4IHRvIHVzZQorICAgICAqIEByZXR1cm5zIGEgbmV3IEZsb2F0MzJB
cnJheSBhcnJheSB3aXRoIDQgZWxlbWVudHMgOiB0aGUgMngyIG1hdHJpeCBleHRyYWN0ZWQgZnJv
bSB0aGUgZ2l2ZW4gbWF0cml4CisgICAgICovCisgICAgTWF0cml4LkdldEFzTWF0cml4MngyID0g
ZnVuY3Rpb24gKG1hdHJpeCkgeworICAgICAgICB2YXIgbSA9IG1hdHJpeC5tOworICAgICAgICBy
ZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbbVswXSwgbVsxXSwgbVs0XSwgbVs1XV0pOworICAgIH07
CisgICAgLyoqCisgICAgICogRXh0cmFjdHMgYSAzeDMgbWF0cml4IGZyb20gYSBnaXZlbiBtYXRy
aXggYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gYSBGbG9hdDMyQXJyYXkKKyAgICAgKiBAcGFyYW0g
bWF0cml4IGRlZmluZXMgdGhlIG1hdHJpeCB0byB1c2UKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBG
bG9hdDMyQXJyYXkgYXJyYXkgd2l0aCA5IGVsZW1lbnRzIDogdGhlIDN4MyBtYXRyaXggZXh0cmFj
dGVkIGZyb20gdGhlIGdpdmVuIG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5HZXRBc01hdHJp
eDN4MyA9IGZ1bmN0aW9uIChtYXRyaXgpIHsKKyAgICAgICAgdmFyIG0gPSBtYXRyaXgubTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAgICAgbVswXSwgbVsxXSwg
bVsyXSwKKyAgICAgICAgICAgIG1bNF0sIG1bNV0sIG1bNl0sCisgICAgICAgICAgICBtWzhdLCBt
WzldLCBtWzEwXQorICAgICAgICBdKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXB1dGUg
dGhlIHRyYW5zcG9zZSBvZiBhIGdpdmVuIG1hdHJpeAorICAgICAqIEBwYXJhbSBtYXRyaXggZGVm
aW5lcyB0aGUgbWF0cml4IHRvIHRyYW5zcG9zZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgbWF0
cml4CisgICAgICovCisgICAgTWF0cml4LlRyYW5zcG9zZSA9IGZ1bmN0aW9uIChtYXRyaXgpIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBNYXRyaXgoKTsKKyAgICAgICAgTWF0cml4LlRyYW5z
cG9zZVRvUmVmKG1hdHJpeCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENvbXB1dGUgdGhlIHRyYW5zcG9zZSBvZiBhIG1hdHJpeCBhbmQg
c3RvcmUgaXQgaW4gYSB0YXJnZXQgbWF0cml4CisgICAgICogQHBhcmFtIG1hdHJpeCBkZWZpbmVz
IHRoZSBtYXRyaXggdG8gdHJhbnNwb3NlCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRo
ZSB0YXJnZXQgbWF0cml4CisgICAgICovCisgICAgTWF0cml4LlRyYW5zcG9zZVRvUmVmID0gZnVu
Y3Rpb24gKG1hdHJpeCwgcmVzdWx0KSB7CisgICAgICAgIHZhciBybSA9IHJlc3VsdC5fbTsKKyAg
ICAgICAgdmFyIG1tID0gbWF0cml4Lm07CisgICAgICAgIHJtWzBdID0gbW1bMF07CisgICAgICAg
IHJtWzFdID0gbW1bNF07CisgICAgICAgIHJtWzJdID0gbW1bOF07CisgICAgICAgIHJtWzNdID0g
bW1bMTJdOworICAgICAgICBybVs0XSA9IG1tWzFdOworICAgICAgICBybVs1XSA9IG1tWzVdOwor
ICAgICAgICBybVs2XSA9IG1tWzldOworICAgICAgICBybVs3XSA9IG1tWzEzXTsKKyAgICAgICAg
cm1bOF0gPSBtbVsyXTsKKyAgICAgICAgcm1bOV0gPSBtbVs2XTsKKyAgICAgICAgcm1bMTBdID0g
bW1bMTBdOworICAgICAgICBybVsxMV0gPSBtbVsxNF07CisgICAgICAgIHJtWzEyXSA9IG1tWzNd
OworICAgICAgICBybVsxM10gPSBtbVs3XTsKKyAgICAgICAgcm1bMTRdID0gbW1bMTFdOworICAg
ICAgICBybVsxNV0gPSBtbVsxNV07CisgICAgICAgIC8vIGlkZW50aXR5LW5lc3MgZG9lcyBub3Qg
Y2hhbmdlIHdoZW4gdHJhbnNwb3NpbmcKKyAgICAgICAgcmVzdWx0Ll91cGRhdGVJZGVudGl0eVN0
YXR1cyhtYXRyaXguX2lzSWRlbnRpdHksIG1hdHJpeC5faXNJZGVudGl0eURpcnR5KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENvbXB1dGVzIGEgcmVmbGVjdGlvbiBtYXRyaXggZnJvbSBhIHBs
YW5lCisgICAgICogQHBhcmFtIHBsYW5lIGRlZmluZXMgdGhlIHJlZmxlY3Rpb24gcGxhbmUKKyAg
ICAgKiBAcmV0dXJucyBhIG5ldyBtYXRyaXgKKyAgICAgKi8KKyAgICBNYXRyaXguUmVmbGVjdGlv
biA9IGZ1bmN0aW9uIChwbGFuZSkgeworICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgp
OworICAgICAgICBNYXRyaXguUmVmbGVjdGlvblRvUmVmKHBsYW5lLCBtYXRyaXgpOworICAgICAg
ICByZXR1cm4gbWF0cml4OworICAgIH07CisgICAgLyoqCisgICAgICogQ29tcHV0ZXMgYSByZWZs
ZWN0aW9uIG1hdHJpeCBmcm9tIGEgcGxhbmUKKyAgICAgKiBAcGFyYW0gcGxhbmUgZGVmaW5lcyB0
aGUgcmVmbGVjdGlvbiBwbGFuZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFy
Z2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5SZWZsZWN0aW9uVG9SZWYgPSBmdW5jdGlv
biAocGxhbmUsIHJlc3VsdCkgeworICAgICAgICBwbGFuZS5ub3JtYWxpemUoKTsKKyAgICAgICAg
dmFyIHggPSBwbGFuZS5ub3JtYWwueDsKKyAgICAgICAgdmFyIHkgPSBwbGFuZS5ub3JtYWwueTsK
KyAgICAgICAgdmFyIHogPSBwbGFuZS5ub3JtYWwuejsKKyAgICAgICAgdmFyIHRlbXAgPSAtMiAq
IHg7CisgICAgICAgIHZhciB0ZW1wMiA9IC0yICogeTsKKyAgICAgICAgdmFyIHRlbXAzID0gLTIg
KiB6OworICAgICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKHRlbXAgKiB4ICsgMSwgdGVtcDIg
KiB4LCB0ZW1wMyAqIHgsIDAuMCwgdGVtcCAqIHksIHRlbXAyICogeSArIDEsIHRlbXAzICogeSwg
MC4wLCB0ZW1wICogeiwgdGVtcDIgKiB6LCB0ZW1wMyAqIHogKyAxLCAwLjAsIHRlbXAgKiBwbGFu
ZS5kLCB0ZW1wMiAqIHBsYW5lLmQsIHRlbXAzICogcGxhbmUuZCwgMS4wLCByZXN1bHQpOworICAg
IH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ2l2ZW4gbWF0cml4IGFzIGEgcm90YXRpb24g
bWF0cml4IGNvbXBvc2VkIGZyb20gdGhlIDMgbGVmdCBoYW5kZWQgYXhlcworICAgICAqIEBwYXJh
bSB4YXhpcyBkZWZpbmVzIHRoZSB2YWx1ZSBvZiB0aGUgMXN0IGF4aXMKKyAgICAgKiBAcGFyYW0g
eWF4aXMgZGVmaW5lcyB0aGUgdmFsdWUgb2YgdGhlIDJuZCBheGlzCisgICAgICogQHBhcmFtIHph
eGlzIGRlZmluZXMgdGhlIHZhbHVlIG9mIHRoZSAzcmQgYXhpcworICAgICAqIEBwYXJhbSByZXN1
bHQgZGVmaW5lcyB0aGUgdGFyZ2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5Gcm9tWFla
QXhlc1RvUmVmID0gZnVuY3Rpb24gKHhheGlzLCB5YXhpcywgemF4aXMsIHJlc3VsdCkgeworICAg
ICAgICBNYXRyaXguRnJvbVZhbHVlc1RvUmVmKHhheGlzLngsIHhheGlzLnksIHhheGlzLnosIDAu
MCwgeWF4aXMueCwgeWF4aXMueSwgeWF4aXMueiwgMC4wLCB6YXhpcy54LCB6YXhpcy55LCB6YXhp
cy56LCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMCwgcmVzdWx0KTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgYSByb3RhdGlvbiBtYXRyaXggZnJvbSBhIHF1YXRlcm5pb24gYW5kIHN0
b3JlcyBpdCBpbiBhIHRhcmdldCBtYXRyaXgKKyAgICAgKiBAcGFyYW0gcXVhdCBkZWZpbmVzIHRo
ZSBxdWF0ZXJuaW9uIHRvIHVzZQorICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgdGFy
Z2V0IG1hdHJpeAorICAgICAqLworICAgIE1hdHJpeC5Gcm9tUXVhdGVybmlvblRvUmVmID0gZnVu
Y3Rpb24gKHF1YXQsIHJlc3VsdCkgeworICAgICAgICB2YXIgeHggPSBxdWF0LnggKiBxdWF0Lng7
CisgICAgICAgIHZhciB5eSA9IHF1YXQueSAqIHF1YXQueTsKKyAgICAgICAgdmFyIHp6ID0gcXVh
dC56ICogcXVhdC56OworICAgICAgICB2YXIgeHkgPSBxdWF0LnggKiBxdWF0Lnk7CisgICAgICAg
IHZhciB6dyA9IHF1YXQueiAqIHF1YXQudzsKKyAgICAgICAgdmFyIHp4ID0gcXVhdC56ICogcXVh
dC54OworICAgICAgICB2YXIgeXcgPSBxdWF0LnkgKiBxdWF0Lnc7CisgICAgICAgIHZhciB5eiA9
IHF1YXQueSAqIHF1YXQuejsKKyAgICAgICAgdmFyIHh3ID0gcXVhdC54ICogcXVhdC53OworICAg
ICAgICByZXN1bHQuX21bMF0gPSAxLjAgLSAoMi4wICogKHl5ICsgenopKTsKKyAgICAgICAgcmVz
dWx0Ll9tWzFdID0gMi4wICogKHh5ICsgencpOworICAgICAgICByZXN1bHQuX21bMl0gPSAyLjAg
KiAoenggLSB5dyk7CisgICAgICAgIHJlc3VsdC5fbVszXSA9IDAuMDsKKyAgICAgICAgcmVzdWx0
Ll9tWzRdID0gMi4wICogKHh5IC0gencpOworICAgICAgICByZXN1bHQuX21bNV0gPSAxLjAgLSAo
Mi4wICogKHp6ICsgeHgpKTsKKyAgICAgICAgcmVzdWx0Ll9tWzZdID0gMi4wICogKHl6ICsgeHcp
OworICAgICAgICByZXN1bHQuX21bN10gPSAwLjA7CisgICAgICAgIHJlc3VsdC5fbVs4XSA9IDIu
MCAqICh6eCArIHl3KTsKKyAgICAgICAgcmVzdWx0Ll9tWzldID0gMi4wICogKHl6IC0geHcpOwor
ICAgICAgICByZXN1bHQuX21bMTBdID0gMS4wIC0gKDIuMCAqICh5eSArIHh4KSk7CisgICAgICAg
IHJlc3VsdC5fbVsxMV0gPSAwLjA7CisgICAgICAgIHJlc3VsdC5fbVsxMl0gPSAwLjA7CisgICAg
ICAgIHJlc3VsdC5fbVsxM10gPSAwLjA7CisgICAgICAgIHJlc3VsdC5fbVsxNF0gPSAwLjA7Cisg
ICAgICAgIHJlc3VsdC5fbVsxNV0gPSAxLjA7CisgICAgICAgIHJlc3VsdC5fbWFya0FzVXBkYXRl
ZCgpOworICAgIH07CisgICAgTWF0cml4Ll91cGRhdGVGbGFnU2VlZCA9IDA7CisgICAgTWF0cml4
Ll9pZGVudGl0eVJlYWRPbmx5ID0gTWF0cml4LklkZW50aXR5KCk7CisgICAgcmV0dXJuIE1hdHJp
eDsKK30oKSk7CisKKy8qKgorICogQGhpZGRlbgorICogU2FtZSBhcyBUbXAgYnV0IG5vdCBleHBv
cnRlZCB0byBrZWVwIGl0IG9ubHkgZm9yIG1hdGggZnVuY3Rpb25zIHRvIGF2b2lkIGNvbmZsaWN0
cworICovCit2YXIgTWF0aFRtcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBm
dW5jdGlvbiBNYXRoVG1wKCkgeworICAgIH0KKyAgICBNYXRoVG1wLlZlY3RvcjMgPSBfTWlzY19h
cnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFycmF5VG9vbHMiXS5CdWls
ZEFycmF5KDYsIFZlY3RvcjMuWmVybyk7CisgICAgTWF0aFRtcC5NYXRyaXggPSBfTWlzY19hcnJh
eVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFycmF5VG9vbHMiXS5CdWlsZEFy
cmF5KDIsIE1hdHJpeC5JZGVudGl0eSk7CisgICAgTWF0aFRtcC5RdWF0ZXJuaW9uID0gX01pc2Nf
YXJyYXlUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBcnJheVRvb2xzIl0uQnVp
bGRBcnJheSgzLCBRdWF0ZXJuaW9uLlplcm8pOworICAgIHJldHVybiBNYXRoVG1wOworfSgpKTsK
Ky8qKgorICogQGhpZGRlbgorICovCit2YXIgVG1wVmVjdG9ycyA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBUbXBWZWN0b3JzKCkgeworICAgIH0KKyAgICBUbXBW
ZWN0b3JzLlZlY3RvcjIgPSBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkFycmF5VG9vbHMiXS5CdWlsZEFycmF5KDMsIFZlY3RvcjIuWmVybyk7IC8vIDMgdGVt
cCBWZWN0b3IyIGF0IG9uY2Ugc2hvdWxkIGJlIGVub3VnaAorICAgIFRtcFZlY3RvcnMuVmVjdG9y
MyA9IF9NaXNjX2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQXJyYXlU
b29scyJdLkJ1aWxkQXJyYXkoMTMsIFZlY3RvcjMuWmVybyk7IC8vIDEzIHRlbXAgVmVjdG9yMyBh
dCBvbmNlIHNob3VsZCBiZSBlbm91Z2gKKyAgICBUbXBWZWN0b3JzLlZlY3RvcjQgPSBfTWlzY19h
cnJheVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFycmF5VG9vbHMiXS5CdWls
ZEFycmF5KDMsIFZlY3RvcjQuWmVybyk7IC8vIDMgdGVtcCBWZWN0b3I0IGF0IG9uY2Ugc2hvdWxk
IGJlIGVub3VnaAorICAgIFRtcFZlY3RvcnMuUXVhdGVybmlvbiA9IF9NaXNjX2FycmF5VG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQXJyYXlUb29scyJdLkJ1aWxkQXJyYXkoMiwg
UXVhdGVybmlvbi5aZXJvKTsgLy8gMiB0ZW1wIFF1YXRlcm5pb24gYXQgb25jZSBzaG91bGQgYmUg
ZW5vdWdoCisgICAgVG1wVmVjdG9ycy5NYXRyaXggPSBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIkFycmF5VG9vbHMiXS5CdWlsZEFycmF5KDgsIE1hdHJpeC5J
ZGVudGl0eSk7IC8vIDggdGVtcCBNYXRyaWNlcyBhdCBvbmNlIHNob3VsZCBiZSBlbm91Z2gKKyAg
ICByZXR1cm4gVG1wVmVjdG9yczsKK30oKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9O
LlZlY3RvcjIiXSA9IFZlY3RvcjI7CitfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5WZWN0b3Iz
Il0gPSBWZWN0b3IzOworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVkVHlwZXNbIkJBQllMT04uVmVjdG9yNCJdID0gVmVj
dG9yNDsKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJfVHlw
ZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLk1hdHJpeCJdID0gTWF0cml4OworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9NYXRocy9tYXRoLnZlcnRleEZvcm1hdC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGhzL21h
dGgudmVydGV4Rm9ybWF0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQb3NpdGlvbk5vcm1hbFZlcnRleCwgUG9z
aXRpb25Ob3JtYWxUZXh0dXJlVmVydGV4ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBvc2l0aW9uTm9ybWFsVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBQb3NpdGlv
bk5vcm1hbFZlcnRleDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NpdGlvbk5vcm1hbFRleHR1
cmVWZXJ0ZXgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvc2l0aW9uTm9ybWFsVGV4dHVyZVZlcnRl
eDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisKKy8qKgorICogQ29udGFpbnMgcG9zaXRp
b24gYW5kIG5vcm1hbCB2ZWN0b3JzIGZvciBhIHZlcnRleAorICovCit2YXIgUG9zaXRpb25Ob3Jt
YWxWZXJ0ZXggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIFBvc2l0aW9uTm9ybWFsVmVydGV4CisgICAgICogQHBhcmFtIHBvc2l0aW9uIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgdmVydGV4IChkZWZhdXQ6IDAsMCwwKQorICAgICAqIEBwYXJhbSBu
b3JtYWwgdGhlIG5vcm1hbCBvZiB0aGUgdmVydGV4IChkZWZhdXQ6IDAsMSwwKQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIFBvc2l0aW9uTm9ybWFsVmVydGV4KAorICAgIC8qKiB0aGUgcG9zaXRpb24g
b2YgdGhlIHZlcnRleCAoZGVmYXV0OiAwLDAsMCkgKi8KKyAgICBwb3NpdGlvbiwgCisgICAgLyoq
IHRoZSBub3JtYWwgb2YgdGhlIHZlcnRleCAoZGVmYXV0OiAwLDEsMCkgKi8KKyAgICBub3JtYWwp
IHsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09PSB2b2lkIDApIHsgcG9zaXRpb24gPSBfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsgfQor
ICAgICAgICBpZiAobm9ybWFsID09PSB2b2lkIDApIHsgbm9ybWFsID0gX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5VcCgpOyB9CisgICAgICAgIHRo
aXMucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgdGhpcy5ub3JtYWwgPSBub3JtYWw7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIENsb25lcyB0aGUgUG9zaXRpb25Ob3JtYWxWZXJ0ZXgKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY2xvbmVkIFBvc2l0aW9uTm9ybWFsVmVydGV4CisgICAgICovCisg
ICAgUG9zaXRpb25Ob3JtYWxWZXJ0ZXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gbmV3IFBvc2l0aW9uTm9ybWFsVmVydGV4KHRoaXMucG9zaXRpb24uY2xv
bmUoKSwgdGhpcy5ub3JtYWwuY2xvbmUoKSk7CisgICAgfTsKKyAgICByZXR1cm4gUG9zaXRpb25O
b3JtYWxWZXJ0ZXg7Cit9KCkpOworCisvKioKKyAqIENvbnRhaW5zIHBvc2l0aW9uLCBub3JtYWwg
YW5kIHV2IHZlY3RvcnMgZm9yIGEgdmVydGV4CisgKi8KK3ZhciBQb3NpdGlvbk5vcm1hbFRleHR1
cmVWZXJ0ZXggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIFBvc2l0aW9uTm9ybWFsVGV4dHVyZVZlcnRleAorICAgICAqIEBwYXJhbSBwb3Np
dGlvbiB0aGUgcG9zaXRpb24gb2YgdGhlIHZlcnRleCAoZGVmYXV0OiAwLDAsMCkKKyAgICAgKiBA
cGFyYW0gbm9ybWFsIHRoZSBub3JtYWwgb2YgdGhlIHZlcnRleCAoZGVmYXV0OiAwLDEsMCkKKyAg
ICAgKiBAcGFyYW0gdXYgdGhlIHV2IG9mIHRoZSB2ZXJ0ZXggKGRlZmF1bHQ6IDAsMCkKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBQb3NpdGlvbk5vcm1hbFRleHR1cmVWZXJ0ZXgoCisgICAgLyoqIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgdmVydGV4IChkZWZhdXQ6IDAsMCwwKSAqLworICAgIHBvc2l0aW9u
LCAKKyAgICAvKiogdGhlIG5vcm1hbCBvZiB0aGUgdmVydGV4IChkZWZhdXQ6IDAsMSwwKSAqLwor
ICAgIG5vcm1hbCwgCisgICAgLyoqIHRoZSB1diBvZiB0aGUgdmVydGV4IChkZWZhdWx0OiAwLDAp
ICovCisgICAgdXYpIHsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09PSB2b2lkIDApIHsgcG9zaXRp
b24gPSBfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJd
Llplcm8oKTsgfQorICAgICAgICBpZiAobm9ybWFsID09PSB2b2lkIDApIHsgbm9ybWFsID0gX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5VcCgpOyB9
CisgICAgICAgIGlmICh1diA9PT0gdm9pZCAwKSB7IHV2ID0gX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjIiXS5aZXJvKCk7IH0KKyAgICAgICAgdGhpcy5w
b3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbDsKKyAgICAg
ICAgdGhpcy51diA9IHV2OworICAgIH0KKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhlIFBvc2l0
aW9uTm9ybWFsVGV4dHVyZVZlcnRleAorICAgICAqIEByZXR1cm5zIHRoZSBjbG9uZWQgUG9zaXRp
b25Ob3JtYWxUZXh0dXJlVmVydGV4CisgICAgICovCisgICAgUG9zaXRpb25Ob3JtYWxUZXh0dXJl
VmVydGV4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBQb3NpdGlvbk5vcm1hbFRleHR1cmVWZXJ0ZXgodGhpcy5wb3NpdGlvbi5jbG9uZSgpLCB0aGlz
Lm5vcm1hbC5jbG9uZSgpLCB0aGlzLnV2LmNsb25lKCkpOworICAgIH07CisgICAgcmV0dXJuIFBv
c2l0aW9uTm9ybWFsVGV4dHVyZVZlcnRleDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWF0aHMvbWF0aC52aWV3cG9ydC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vTWF0aHMvbWF0aC52aWV3cG9ydC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBW
aWV3cG9ydCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWaWV3cG9ydCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gVmlld3BvcnQ7IH0pOworLyoqCisgKiBDbGFzcyB1c2VkIHRv
IHJlcHJlc2VudCBhIHZpZXdwb3J0IG9uIHNjcmVlbgorICovCit2YXIgVmlld3BvcnQgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIFZpZXdw
b3J0IG9iamVjdCBsb2NhdGVkIGF0ICh4LCB5KSBhbmQgc2l6ZWQgKHdpZHRoLCBoZWlnaHQpCisg
ICAgICogQHBhcmFtIHggZGVmaW5lcyB2aWV3cG9ydCBsZWZ0IGNvb3JkaW5hdGUKKyAgICAgKiBA
cGFyYW0geSBkZWZpbmVzIHZpZXdwb3J0IHRvcCBjb29yZGluYXRlCisgICAgICogQHBhcmFtIHdp
ZHRoIGRlZmluZXMgdGhlIHZpZXdwb3J0IHdpZHRoCisgICAgICogQHBhcmFtIGhlaWdodCBkZWZp
bmVzIHRoZSB2aWV3cG9ydCBoZWlnaHQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBWaWV3cG9ydCgK
KyAgICAvKiogdmlld3BvcnQgbGVmdCBjb29yZGluYXRlICovCisgICAgeCwgCisgICAgLyoqIHZp
ZXdwb3J0IHRvcCBjb29yZGluYXRlICovCisgICAgeSwgCisgICAgLyoqdmlld3BvcnQgd2lkdGgg
Ki8KKyAgICB3aWR0aCwgCisgICAgLyoqIHZpZXdwb3J0IGhlaWdodCAqLworICAgIGhlaWdodCkg
eworICAgICAgICB0aGlzLnggPSB4OworICAgICAgICB0aGlzLnkgPSB5OworICAgICAgICB0aGlz
LndpZHRoID0gd2lkdGg7CisgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OworICAgIH0KKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHZpZXdwb3J0IHVzaW5nIGFic29sdXRlIHNpemlu
ZyAoZnJvbSAwLT4gd2lkdGgsIDAtPiBoZWlnaHQgaW5zdGVhZCBvZiAwLT4xKQorICAgICAqIEBw
YXJhbSByZW5kZXJXaWR0aCBkZWZpbmVzIHRoZSByZW5kZXJpbmcgd2lkdGgKKyAgICAgKiBAcGFy
YW0gcmVuZGVySGVpZ2h0IGRlZmluZXMgdGhlIHJlbmRlcmluZyBoZWlnaHQKKyAgICAgKiBAcmV0
dXJucyBhIG5ldyBWaWV3cG9ydAorICAgICAqLworICAgIFZpZXdwb3J0LnByb3RvdHlwZS50b0ds
b2JhbCA9IGZ1bmN0aW9uIChyZW5kZXJXaWR0aCwgcmVuZGVySGVpZ2h0KSB7CisgICAgICAgIHJl
dHVybiBuZXcgVmlld3BvcnQodGhpcy54ICogcmVuZGVyV2lkdGgsIHRoaXMueSAqIHJlbmRlckhl
aWdodCwgdGhpcy53aWR0aCAqIHJlbmRlcldpZHRoLCB0aGlzLmhlaWdodCAqIHJlbmRlckhlaWdo
dCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTdG9yZXMgYWJzb2x1dGUgdmlld3BvcnQgdmFs
dWUgaW50byBhIHRhcmdldCB2aWV3cG9ydCAoZnJvbSAwLT4gd2lkdGgsIDAtPiBoZWlnaHQgaW5z
dGVhZCBvZiAwLT4xKQorICAgICAqIEBwYXJhbSByZW5kZXJXaWR0aCBkZWZpbmVzIHRoZSByZW5k
ZXJpbmcgd2lkdGgKKyAgICAgKiBAcGFyYW0gcmVuZGVySGVpZ2h0IGRlZmluZXMgdGhlIHJlbmRl
cmluZyBoZWlnaHQKKyAgICAgKiBAcGFyYW0gcmVmIGRlZmluZXMgdGhlIHRhcmdldCB2aWV3cG9y
dAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHZpZXdwb3J0CisgICAgICovCisgICAgVmll
d3BvcnQucHJvdG90eXBlLnRvR2xvYmFsVG9SZWYgPSBmdW5jdGlvbiAocmVuZGVyV2lkdGgsIHJl
bmRlckhlaWdodCwgcmVmKSB7CisgICAgICAgIHJlZi54ID0gdGhpcy54ICogcmVuZGVyV2lkdGg7
CisgICAgICAgIHJlZi55ID0gdGhpcy55ICogcmVuZGVySGVpZ2h0OworICAgICAgICByZWYud2lk
dGggPSB0aGlzLndpZHRoICogcmVuZGVyV2lkdGg7CisgICAgICAgIHJlZi5oZWlnaHQgPSB0aGlz
LmhlaWdodCAqIHJlbmRlckhlaWdodDsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IFZpZXdwb3J0IGNvcGllZCBmcm9tIHRoZSBjdXJy
ZW50IG9uZQorICAgICAqIEByZXR1cm5zIGEgbmV3IFZpZXdwb3J0CisgICAgICovCisgICAgVmll
d3BvcnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3
IFZpZXdwb3J0KHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7CisgICAg
fTsKKyAgICByZXR1cm4gVmlld3BvcnQ7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL01hdGhzL3NwaGVyaWNhbFBvbHlub21pYWwudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01hdGhzL3NwaGVyaWNhbFBvbHlub21p
YWwudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogU3BoZXJpY2FsSGFybW9uaWNzLCBTcGhlcmljYWxQb2x5bm9t
aWFsICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNwaGVyaWNhbEhhcm1v
bmljcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3BoZXJpY2FsSGFybW9uaWNzOyB9KTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlNwaGVyaWNhbFBvbHlub21pYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNw
aGVyaWNhbFBvbHlub21pYWw7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMi
KTsKKworLy8gaHR0cHM6Ly9kaWNreWppbS53b3JkcHJlc3MuY29tLzIwMTMvMDkvMDQvc3BoZXJp
Y2FsLWhhcm1vbmljcy1mb3ItYmVnaW5uZXJzLworLy8gaHR0cDovL3NpbHZpb2plbW1hLmNvbS9w
dWJsaWMvcGFwZXJzL2xpZ2h0aW5nL3NwaGVyaWNhbC1oYXJtb25pYy1saWdodGluZy5wZGYKKy8v
IGh0dHBzOi8vd3d3LnBwc2xvYW4ub3JnL3B1YmxpY2F0aW9ucy9TdHVwaWRTSDM2LnBkZgorLy8g
aHR0cDovL2NzZXdlYi51Y3NkLmVkdS9+cmF2aXIvcGFwZXJzL2Vudm1hcC9lbnZtYXAucGRmCisv
LyBodHRwczovL3d3dy5wcHNsb2FuLm9yZy9wdWJsaWNhdGlvbnMvU0hKQ0dULnBkZgorLy8gaHR0
cHM6Ly93d3cucHBzbG9hbi5vcmcvcHVibGljYXRpb25zL3NoZGVyaW5nLnBkZgorLy8gaHR0cHM6
Ly9nb29nbGUuZ2l0aHViLmlvL2ZpbGFtZW50L0ZpbGFtZW50Lm1kLmh0bWwjYW5uZXgvc3BoZXJp
Y2FsaGFybW9uaWNzCisvLyBodHRwczovL3BhdGFwb20uY29tL2Jsb2cvU0hQb3J0YWwvCisvLyBo
dHRwczovL2ltZG9pbmdpdHdyb25nLndvcmRwcmVzcy5jb20vMjAxMS8wNC8xNC9zcGhlcmljYWwt
aGFybW9uaWNzLXd0Zi8KKy8vIFVzaW5nIHJlYWwgU0ggYmFzaXM6CisvLyAgbT4wICAgICAgICAg
ICAgIG0gICBtCisvLyB5ICAgPSBzcXJ0KDIpICogSyAqIFAgKiBjb3MobSpwaGkpICogY29zKHRo
ZXRhKQorLy8gIGwgICAgICAgICAgICAgICBsICAgbAorLy8KKy8vICBtPDAgICAgICAgICAgICAg
bSAgIHxtfAorLy8geSAgID0gc3FydCgyKSAqIEsgKiBQICogc2luKG0qcGhpKSAqIGNvcyh0aGV0
YSkKKy8vICBsICAgICAgICAgICAgICAgbCAgIGwKKy8vCisvLyAgbT0wICAgMCAgIDAKKy8vIHkg
ICA9IEsgKiBQICogdHJpZ29ubyB0ZXJtcworLy8gIGwgICAgIGwgICBsCisvLworLy8gIG0gICAg
ICAgKDJsICsgMSkobCAtIHxtfCkhCisvLyBLID0gc3FydCgtLS0tLS0tLS0tLS0tLS0tLS0pCisv
LyAgbCAgICAgICAgICAgNHBpKGwgKyB8bXwpIQorLy8KKy8vIGFuZCBQIGJ5IHJlY3Vyc2lvbjoK
Ky8vCisvLyBQMDAoeCkgPSAxCisvLyBQMDEoeCkgPSB4CisvLyBQbGwoeCkgPSAoLTFebCkoMmwg
LSAxKSEhKDEteCp4KV4oMS8yKQorLy8gICAgICAgICAgKCgybCAtIDEpeFtQbC0xL21dLShsICsg
bSAtIDEpW1BsLTIvbV0pCisvLyBQbG0oeCkgPSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgIGwgLSBtCisvLyBMZWF2aW5n
IHRoZSB0cmlnb25vbWV0cmljIHRlcm1zIGFzaWRlIHdlIGNhbiBwcmVjb21wdXRlIHRoZSBjb25z
dGFudHMgdG8gOgordmFyIFNIM3lsbUJhc2lzQ29uc3RhbnRzID0gWworICAgIE1hdGguc3FydCgx
IC8gKDQgKiBNYXRoLlBJKSksCisgICAgLU1hdGguc3FydCgzIC8gKDQgKiBNYXRoLlBJKSksCisg
ICAgTWF0aC5zcXJ0KDMgLyAoNCAqIE1hdGguUEkpKSwKKyAgICAtTWF0aC5zcXJ0KDMgLyAoNCAq
IE1hdGguUEkpKSwKKyAgICBNYXRoLnNxcnQoMTUgLyAoNCAqIE1hdGguUEkpKSwKKyAgICAtTWF0
aC5zcXJ0KDE1IC8gKDQgKiBNYXRoLlBJKSksCisgICAgTWF0aC5zcXJ0KDUgLyAoMTYgKiBNYXRo
LlBJKSksCisgICAgLU1hdGguc3FydCgxNSAvICg0ICogTWF0aC5QSSkpLAorICAgIE1hdGguc3Fy
dCgxNSAvICgxNiAqIE1hdGguUEkpKSwKK107CisvLyBjbSA9IGNvcyhtICogcGhpKQorLy8gc20g
PSBzaW4obSAqIHBoaSkKKy8vIHt4LHksen0gPSB7Y29zKHBoaSlzaW4odGhldGEpLCBzaW4ocGhp
KXNpbih0aGV0YSksIGNvcyh0aGV0YSl9CisvLyBCeSByZWN1cnNpb24gb24gdXNpbmcgdHJpZ28g
aWRlbnRpdGllczoKK3ZhciBTSDN5bG1CYXNpc1RyaWdvbm9tZXRyaWNUZXJtcyA9IFsKKyAgICBm
dW5jdGlvbiAoZGlyZWN0aW9uKSB7IHJldHVybiAxOyB9LAorICAgIGZ1bmN0aW9uIChkaXJlY3Rp
b24pIHsgcmV0dXJuIGRpcmVjdGlvbi55OyB9LAorICAgIGZ1bmN0aW9uIChkaXJlY3Rpb24pIHsg
cmV0dXJuIGRpcmVjdGlvbi56OyB9LAorICAgIGZ1bmN0aW9uIChkaXJlY3Rpb24pIHsgcmV0dXJu
IGRpcmVjdGlvbi54OyB9LAorICAgIGZ1bmN0aW9uIChkaXJlY3Rpb24pIHsgcmV0dXJuIGRpcmVj
dGlvbi54ICogZGlyZWN0aW9uLnk7IH0sCisgICAgZnVuY3Rpb24gKGRpcmVjdGlvbikgeyByZXR1
cm4gZGlyZWN0aW9uLnkgKiBkaXJlY3Rpb24uejsgfSwKKyAgICBmdW5jdGlvbiAoZGlyZWN0aW9u
KSB7IHJldHVybiAzICogZGlyZWN0aW9uLnogKiBkaXJlY3Rpb24ueiAtIDE7IH0sCisgICAgZnVu
Y3Rpb24gKGRpcmVjdGlvbikgeyByZXR1cm4gZGlyZWN0aW9uLnggKiBkaXJlY3Rpb24uejsgfSwK
KyAgICBmdW5jdGlvbiAoZGlyZWN0aW9uKSB7IHJldHVybiBkaXJlY3Rpb24ueCAqIGRpcmVjdGlv
bi54IC0gZGlyZWN0aW9uLnkgKiBkaXJlY3Rpb24ueTsgfSwKK107CisvLyBXcmFwIHRoZSBmdWxs
IGNvbXB1dGUKK3ZhciBhcHBseVNIMyA9IGZ1bmN0aW9uIChsbSwgZGlyZWN0aW9uKSB7CisgICAg
cmV0dXJuIFNIM3lsbUJhc2lzQ29uc3RhbnRzW2xtXSAqIFNIM3lsbUJhc2lzVHJpZ29ub21ldHJp
Y1Rlcm1zW2xtXShkaXJlY3Rpb24pOworfTsKKy8vIERlcml2ZWQgZnJvbSB0aGUgaW50ZWdyYXRp
b24gb2YgdGhlIGEga2VybmVsIGNvbnZvbHV0aW9uIHRvIFNILgorLy8gR3JlYXQgZXhwbGFuYXRp
b24gaGVyZTogaHR0cHM6Ly9wYXRhcG9tLmNvbS9ibG9nL1NIUG9ydGFsLyNhYm91dC1kaXN0YW50
LXJhZGlhbmNlLWFuZC1pcnJhZGlhbmNlLWVudmlyb25tZW50cwordmFyIFNIQ29zS2VybmVsQ29u
dm9sdXRpb24gPSBbCisgICAgTWF0aC5QSSwKKyAgICAyICogTWF0aC5QSSAvIDMsCisgICAgMiAq
IE1hdGguUEkgLyAzLAorICAgIDIgKiBNYXRoLlBJIC8gMywKKyAgICBNYXRoLlBJIC8gNCwKKyAg
ICBNYXRoLlBJIC8gNCwKKyAgICBNYXRoLlBJIC8gNCwKKyAgICBNYXRoLlBJIC8gNCwKKyAgICBN
YXRoLlBJIC8gNCwKK107CisvKioKKyAqIENsYXNzIHJlcHJlc2VudGluZyBzcGhlcmljYWwgaGFy
bW9uaWNzIGNvZWZmaWNpZW50cyB0byB0aGUgM3JkIGRlZ3JlZQorICovCit2YXIgU3BoZXJpY2Fs
SGFybW9uaWNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFNw
aGVyaWNhbEhhcm1vbmljcygpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgd2hl
dGhlciBvciBub3QgdGhlIGhhcm1vbmljcyBoYXZlIGJlZW4gcHJlc2NhbGVkIGZvciByZW5kZXJp
bmcuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnByZVNjYWxlZCA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogVGhlIGwwLDAgY29lZmZpY2llbnRzIG9mIHRoZSBzcGhlcmljYWwg
aGFybW9uaWNzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmwwMCA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAg
ICAgICAvKioKKyAgICAgICAgICogVGhlIGwxLC0xIGNvZWZmaWNpZW50cyBvZiB0aGUgc3BoZXJp
Y2FsIGhhcm1vbmljcworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5sMV8xID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbDEsMCBjb2VmZmljaWVudHMgb2YgdGhlIHNw
aGVyaWNhbCBoYXJtb25pY3MKKyAgICAgICAgICovCisgICAgICAgIHRoaXMubDEwID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbDEsMSBjb2VmZmljaWVudHMgb2YgdGhl
IHNwaGVyaWNhbCBoYXJtb25pY3MKKyAgICAgICAgICovCisgICAgICAgIHRoaXMubDExID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbDIsLTIgY29lZmZpY2llbnRzIG9m
IHRoZSBzcGhlcmljYWwgaGFybW9uaWNzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmwyXzIg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBsMiwtMSBjb2VmZmljaWVu
dHMgb2YgdGhlIHNwaGVyaWNhbCBoYXJtb25pY3MKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
bDJfMSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0uWmVybygpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGwyLDAgY29lZmZp
Y2llbnRzIG9mIHRoZSBzcGhlcmljYWwgaGFybW9uaWNzCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmwyMCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGwyLDEgY29l
ZmZpY2llbnRzIG9mIHRoZSBzcGhlcmljYWwgaGFybW9uaWNzCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmwyMSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGwyLDIg
Y29lZmZpY2llbnRzIG9mIHRoZSBzcGhlcmljYWwgaGFybW9uaWNzCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLmwyMiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGRzIGEg
bGlnaHQgdG8gdGhlIHNwaGVyaWNhbCBoYXJtb25pY3MKKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9u
IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGxpZ2h0CisgICAgICogQHBhcmFtIGNvbG9yIHRoZSBjb2xv
ciBvZiB0aGUgbGlnaHQKKyAgICAgKiBAcGFyYW0gZGVsdGFTb2xpZEFuZ2xlIHRoZSBkZWx0YSBz
b2xpZCBhbmdsZSBvZiB0aGUgbGlnaHQKKyAgICAgKi8KKyAgICBTcGhlcmljYWxIYXJtb25pY3Mu
cHJvdG90eXBlLmFkZExpZ2h0ID0gZnVuY3Rpb24gKGRpcmVjdGlvbiwgY29sb3IsIGRlbHRhU29s
aWRBbmdsZSkgeworICAgICAgICB2YXIgY29sb3JWZWN0b3IgPSBuZXcgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShjb2xvci5yLCBjb2xv
ci5nLCBjb2xvci5iKTsKKyAgICAgICAgdmFyIGMgPSBjb2xvclZlY3Rvci5zY2FsZShkZWx0YVNv
bGlkQW5nbGUpOworICAgICAgICB0aGlzLmwwMCA9IHRoaXMubDAwLmFkZChjLnNjYWxlKGFwcGx5
U0gzKDAsIGRpcmVjdGlvbikpKTsKKyAgICAgICAgdGhpcy5sMV8xID0gdGhpcy5sMV8xLmFkZChj
LnNjYWxlKGFwcGx5U0gzKDEsIGRpcmVjdGlvbikpKTsKKyAgICAgICAgdGhpcy5sMTAgPSB0aGlz
LmwxMC5hZGQoYy5zY2FsZShhcHBseVNIMygyLCBkaXJlY3Rpb24pKSk7CisgICAgICAgIHRoaXMu
bDExID0gdGhpcy5sMTEuYWRkKGMuc2NhbGUoYXBwbHlTSDMoMywgZGlyZWN0aW9uKSkpOworICAg
ICAgICB0aGlzLmwyXzIgPSB0aGlzLmwyXzIuYWRkKGMuc2NhbGUoYXBwbHlTSDMoNCwgZGlyZWN0
aW9uKSkpOworICAgICAgICB0aGlzLmwyXzEgPSB0aGlzLmwyXzEuYWRkKGMuc2NhbGUoYXBwbHlT
SDMoNSwgZGlyZWN0aW9uKSkpOworICAgICAgICB0aGlzLmwyMCA9IHRoaXMubDIwLmFkZChjLnNj
YWxlKGFwcGx5U0gzKDYsIGRpcmVjdGlvbikpKTsKKyAgICAgICAgdGhpcy5sMjEgPSB0aGlzLmwy
MS5hZGQoYy5zY2FsZShhcHBseVNIMyg3LCBkaXJlY3Rpb24pKSk7CisgICAgICAgIHRoaXMubDIy
ID0gdGhpcy5sMjIuYWRkKGMuc2NhbGUoYXBwbHlTSDMoOCwgZGlyZWN0aW9uKSkpOworICAgIH07
CisgICAgLyoqCisgICAgICogU2NhbGVzIHRoZSBzcGhlcmljYWwgaGFybW9uaWNzIGJ5IHRoZSBn
aXZlbiBhbW91bnQKKyAgICAgKiBAcGFyYW0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZQorICAg
ICAqLworICAgIFNwaGVyaWNhbEhhcm1vbmljcy5wcm90b3R5cGUuc2NhbGVJblBsYWNlID0gZnVu
Y3Rpb24gKHNjYWxlKSB7CisgICAgICAgIHRoaXMubDAwLnNjYWxlSW5QbGFjZShzY2FsZSk7Cisg
ICAgICAgIHRoaXMubDFfMS5zY2FsZUluUGxhY2Uoc2NhbGUpOworICAgICAgICB0aGlzLmwxMC5z
Y2FsZUluUGxhY2Uoc2NhbGUpOworICAgICAgICB0aGlzLmwxMS5zY2FsZUluUGxhY2Uoc2NhbGUp
OworICAgICAgICB0aGlzLmwyXzIuc2NhbGVJblBsYWNlKHNjYWxlKTsKKyAgICAgICAgdGhpcy5s
Ml8xLnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgICAgIHRoaXMubDIwLnNjYWxlSW5QbGFjZShz
Y2FsZSk7CisgICAgICAgIHRoaXMubDIxLnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgICAgIHRo
aXMubDIyLnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb252
ZXJ0IGZyb20gaW5jaWRlbnQgcmFkaWFuY2UgKExpKSB0byBpcnJhZGlhbmNlIChFKSBieSBhcHBs
eWluZyBjb252b2x1dGlvbiB3aXRoIHRoZSBjb3NpbmUtd2VpZ2h0ZWQgaGVtaXNwaGVyZS4KKyAg
ICAgKgorICAgICAqIGBgYAorICAgICAqIEVfbG0gPSBBX2wgKiBMX2xtCisgICAgICogYGBgCisg
ICAgICoKKyAgICAgKiBJbiBzcGhlcmljYWwgaGFybW9uaWNzIHRoaXMgY29udm9sdXRpb24gYW1v
dW50cyB0byBzY2FsaW5nIGZhY3RvcnMgZm9yIGVhY2ggZnJlcXVlbmN5IGJhbmQuCisgICAgICog
VGhpcyBjb3JyZXNwb25kcyB0byBlcXVhdGlvbiA1IGluICJBbiBFZmZpY2llbnQgUmVwcmVzZW50
YXRpb24gZm9yIElycmFkaWFuY2UgRW52aXJvbm1lbnQgTWFwcyIsIHdoZXJlCisgICAgICogdGhl
IHNjYWxpbmcgZmFjdG9ycyBhcmUgZ2l2ZW4gaW4gZXF1YXRpb24gOS4KKyAgICAgKi8KKyAgICBT
cGhlcmljYWxIYXJtb25pY3MucHJvdG90eXBlLmNvbnZlcnRJbmNpZGVudFJhZGlhbmNlVG9JcnJh
ZGlhbmNlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBDb25zdGFudCAoQmFuZCAwKQorICAg
ICAgICB0aGlzLmwwMC5zY2FsZUluUGxhY2UoU0hDb3NLZXJuZWxDb252b2x1dGlvblswXSk7Cisg
ICAgICAgIC8vIExpbmVhciAoQmFuZCAxKQorICAgICAgICB0aGlzLmwxXzEuc2NhbGVJblBsYWNl
KFNIQ29zS2VybmVsQ29udm9sdXRpb25bMV0pOworICAgICAgICB0aGlzLmwxMC5zY2FsZUluUGxh
Y2UoU0hDb3NLZXJuZWxDb252b2x1dGlvblsyXSk7CisgICAgICAgIHRoaXMubDExLnNjYWxlSW5Q
bGFjZShTSENvc0tlcm5lbENvbnZvbHV0aW9uWzNdKTsKKyAgICAgICAgLy8gUXVhZHJhdGljIChC
YW5kIDIpCisgICAgICAgIHRoaXMubDJfMi5zY2FsZUluUGxhY2UoU0hDb3NLZXJuZWxDb252b2x1
dGlvbls0XSk7CisgICAgICAgIHRoaXMubDJfMS5zY2FsZUluUGxhY2UoU0hDb3NLZXJuZWxDb252
b2x1dGlvbls1XSk7CisgICAgICAgIHRoaXMubDIwLnNjYWxlSW5QbGFjZShTSENvc0tlcm5lbENv
bnZvbHV0aW9uWzZdKTsKKyAgICAgICAgdGhpcy5sMjEuc2NhbGVJblBsYWNlKFNIQ29zS2VybmVs
Q29udm9sdXRpb25bN10pOworICAgICAgICB0aGlzLmwyMi5zY2FsZUluUGxhY2UoU0hDb3NLZXJu
ZWxDb252b2x1dGlvbls4XSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGZyb20g
aXJyYWRpYW5jZSB0byBvdXRnb2luZyByYWRpYW5jZSBmb3IgTGFtYmVydGlhbiBCRFJGLCBzdWl0
YWJsZSBmb3IgZWZmaWNpZW50IHNoYWRlciBldmFsdWF0aW9uLgorICAgICAqCisgICAgICogYGBg
CisgICAgICogTCA9ICgxL3BpKSAqIEUgKiByaG8KKyAgICAgKiBgYGAKKyAgICAgKgorICAgICAq
IFRoaXMgaXMgZG9uZSBieSBhbiBhZGRpdGlvbmFsIHNjYWxlIGJ5IDEvcGksIHNvIGlzIGEgZmFp
cmx5IHRyaXZpYWwgb3BlcmF0aW9uIGJ1dCBpbXBvcnRhbnQgY29uY2VwdHVhbGx5LgorICAgICAq
LworICAgIFNwaGVyaWNhbEhhcm1vbmljcy5wcm90b3R5cGUuY29udmVydElycmFkaWFuY2VUb0xh
bWJlcnRpYW5SYWRpYW5jZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2FsZUluUGxh
Y2UoMS4wIC8gTWF0aC5QSSk7CisgICAgICAgIC8vIFRoZSByZXN1bHRhbnQgU0ggbm93IHJlcHJl
c2VudHMgb3V0Z29pbmcgcmFkaWFuY2UsIHNvIGluY2x1ZGVzIHRoZSBMYW1iZXJ0IDEvcGkgbm9y
bWFsaXNhdGlvbiBmYWN0b3IgYnV0IHdpdGhvdXQgYWxiZWRvIChyaG8pIGFwcGxpZWQKKyAgICAg
ICAgLy8gKFRoZSBwaXhlbCBzaGFkZXIgbXVzdCBhcHBseSBhbGJlZG8gYWZ0ZXIgdGV4dHVyZSBm
ZXRjaGVzLCBldGMpLgorICAgIH07CisgICAgLyoqCisgICAgICogSW50ZWdyYXRlcyB0aGUgcmVj
b25zdHJ1Y3Rpb24gY29lZmZpY2llbnRzIGRpcmVjdGx5IGluIHRvIHRoZSBTSCBwcmV2ZW50aW5n
IGZ1cnRoZXIKKyAgICAgKiByZXF1aXJlZCBvcGVyYXRpb25zIGF0IHJ1biB0aW1lLgorICAgICAq
CisgICAgICogVGhpcyBpcyBzaW1wbHkgZG9uZSBieSBzY2FsaW5nIGJhY2sgdGhlIFNIIHdpdGgg
WWxtIGNvbnN0YW50cyBwYXJhbWV0ZXIuCisgICAgICogVGhlIHRyaWdvbm9tZXRyaWMgcGFydCBi
ZWluZyBhcHBsaWVkIGJ5IHRoZSBzaGFkZXIgYXQgcnVuIHRpbWUuCisgICAgICovCisgICAgU3Bo
ZXJpY2FsSGFybW9uaWNzLnByb3RvdHlwZS5wcmVTY2FsZUZvclJlbmRlcmluZyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5wcmVTY2FsZWQgPSB0cnVlOworICAgICAgICB0aGlzLmwwMC5z
Y2FsZUluUGxhY2UoU0gzeWxtQmFzaXNDb25zdGFudHNbMF0pOworICAgICAgICB0aGlzLmwxXzEu
c2NhbGVJblBsYWNlKFNIM3lsbUJhc2lzQ29uc3RhbnRzWzFdKTsKKyAgICAgICAgdGhpcy5sMTAu
c2NhbGVJblBsYWNlKFNIM3lsbUJhc2lzQ29uc3RhbnRzWzJdKTsKKyAgICAgICAgdGhpcy5sMTEu
c2NhbGVJblBsYWNlKFNIM3lsbUJhc2lzQ29uc3RhbnRzWzNdKTsKKyAgICAgICAgdGhpcy5sMl8y
LnNjYWxlSW5QbGFjZShTSDN5bG1CYXNpc0NvbnN0YW50c1s0XSk7CisgICAgICAgIHRoaXMubDJf
MS5zY2FsZUluUGxhY2UoU0gzeWxtQmFzaXNDb25zdGFudHNbNV0pOworICAgICAgICB0aGlzLmwy
MC5zY2FsZUluUGxhY2UoU0gzeWxtQmFzaXNDb25zdGFudHNbNl0pOworICAgICAgICB0aGlzLmwy
MS5zY2FsZUluUGxhY2UoU0gzeWxtQmFzaXNDb25zdGFudHNbN10pOworICAgICAgICB0aGlzLmwy
Mi5zY2FsZUluUGxhY2UoU0gzeWxtQmFzaXNDb25zdGFudHNbOF0pOworICAgIH07CisgICAgLyoq
CisgICAgICogQ29uc3RydWN0cyBhIHNwaGVyaWNhbCBoYXJtb25pY3MgZnJvbSBhbiBhcnJheS4K
KyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSA5eDMgY29lZmZpY2llbnRzIChsMDAsIGwx
LTEsIGwxMCwgbDExLCBsMi0yLCBsMi0xLCBsMjAsIGwyMSwgbDIyKQorICAgICAqIEByZXR1cm5z
IHRoZSBzcGhlcmljYWwgaGFybW9uaWNzCisgICAgICovCisgICAgU3BoZXJpY2FsSGFybW9uaWNz
LkZyb21BcnJheSA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIHZhciBzaCA9IG5ldyBTcGhl
cmljYWxIYXJtb25pY3MoKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRhWzBdLCAwLCBz
aC5sMDApOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKGRhdGFbMV0sIDAsIHNoLmwxXzEpOwor
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKGRhdGFbMl0sIDAsIHNoLmwxMCk7CisgICAgICAgIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0u
RnJvbUFycmF5VG9SZWYoZGF0YVszXSwgMCwgc2gubDExKTsKKyAgICAgICAgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlU
b1JlZihkYXRhWzRdLCAwLCBzaC5sMl8yKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRh
WzVdLCAwLCBzaC5sMl8xKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRhWzZdLCAwLCBz
aC5sMjApOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKGRhdGFbN10sIDAsIHNoLmwyMSk7Cisg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYoZGF0YVs4XSwgMCwgc2gubDIyKTsKKyAgICAgICAgcmV0
dXJuIHNoOworICAgIH07CisgICAgLy8gS2VlcCBmb3IgcmVmZXJlbmNlcy4KKyAgICAvKioKKyAg
ICAgKiBHZXRzIHRoZSBzcGhlcmljYWwgaGFybW9uaWNzIGZyb20gcG9seW5vbWlhbAorICAgICAq
IEBwYXJhbSBwb2x5bm9taWFsIHRoZSBzcGhlcmljYWwgcG9seW5vbWlhbAorICAgICAqIEByZXR1
cm5zIHRoZSBzcGhlcmljYWwgaGFybW9uaWNzCisgICAgICovCisgICAgU3BoZXJpY2FsSGFybW9u
aWNzLkZyb21Qb2x5bm9taWFsID0gZnVuY3Rpb24gKHBvbHlub21pYWwpIHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IG5ldyBTcGhlcmljYWxIYXJtb25pY3MoKTsKKyAgICAgICAgcmVzdWx0LmwwMCA9
IHBvbHlub21pYWwueHguc2NhbGUoMC4zNzYxMjcpLmFkZChwb2x5bm9taWFsLnl5LnNjYWxlKDAu
Mzc2MTI3KSkuYWRkKHBvbHlub21pYWwuenouc2NhbGUoMC4zNzYxMjYpKTsKKyAgICAgICAgcmVz
dWx0LmwxXzEgPSBwb2x5bm9taWFsLnkuc2NhbGUoMC45NzcyMDQpOworICAgICAgICByZXN1bHQu
bDEwID0gcG9seW5vbWlhbC56LnNjYWxlKDAuOTc3MjA0KTsKKyAgICAgICAgcmVzdWx0LmwxMSA9
IHBvbHlub21pYWwueC5zY2FsZSgwLjk3NzIwNCk7CisgICAgICAgIHJlc3VsdC5sMl8yID0gcG9s
eW5vbWlhbC54eS5zY2FsZSgxLjE2NTM4KTsKKyAgICAgICAgcmVzdWx0LmwyXzEgPSBwb2x5bm9t
aWFsLnl6LnNjYWxlKDEuMTY1MzgpOworICAgICAgICByZXN1bHQubDIwID0gcG9seW5vbWlhbC56
ei5zY2FsZSgxLjM0NTY3KS5zdWJ0cmFjdChwb2x5bm9taWFsLnh4LnNjYWxlKDAuNjcyODM0KSku
c3VidHJhY3QocG9seW5vbWlhbC55eS5zY2FsZSgwLjY3MjgzNCkpOworICAgICAgICByZXN1bHQu
bDIxID0gcG9seW5vbWlhbC56eC5zY2FsZSgxLjE2NTM4KTsKKyAgICAgICAgcmVzdWx0LmwyMiA9
IHBvbHlub21pYWwueHguc2NhbGUoMS4xNjUzOCkuc3VidHJhY3QocG9seW5vbWlhbC55eS5zY2Fs
ZSgxLjE2NTM4KSk7CisgICAgICAgIHJlc3VsdC5sMV8xLnNjYWxlSW5QbGFjZSgtMSk7CisgICAg
ICAgIHJlc3VsdC5sMTEuc2NhbGVJblBsYWNlKC0xKTsKKyAgICAgICAgcmVzdWx0LmwyXzEuc2Nh
bGVJblBsYWNlKC0xKTsKKyAgICAgICAgcmVzdWx0LmwyMS5zY2FsZUluUGxhY2UoLTEpOworICAg
ICAgICByZXN1bHQuc2NhbGVJblBsYWNlKE1hdGguUEkpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07CisgICAgcmV0dXJuIFNwaGVyaWNhbEhhcm1vbmljczsKK30oKSk7CisKKy8qKgor
ICogQ2xhc3MgcmVwcmVzZW50aW5nIHNwaGVyaWNhbCBwb2x5bm9taWFsIGNvZWZmaWNpZW50cyB0
byB0aGUgM3JkIGRlZ3JlZQorICovCit2YXIgU3BoZXJpY2FsUG9seW5vbWlhbCA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBTcGhlcmljYWxQb2x5bm9taWFsKCkg
eworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHggY29lZmZpY2llbnRzIG9mIHRoZSBzcGhl
cmljYWwgcG9seW5vbWlhbAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy54ID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgeSBjb2VmZmljaWVudHMgb2YgdGhlIHNwaGVy
aWNhbCBwb2x5bm9taWFsCisgICAgICAgICAqLworICAgICAgICB0aGlzLnkgPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB6IGNvZWZmaWNpZW50cyBvZiB0aGUgc3BoZXJp
Y2FsIHBvbHlub21pYWwKKyAgICAgICAgICovCisgICAgICAgIHRoaXMueiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHh4IGNvZWZmaWNpZW50cyBvZiB0aGUgc3BoZXJp
Y2FsIHBvbHlub21pYWwKKyAgICAgICAgICovCisgICAgICAgIHRoaXMueHggPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB5eSBjb2VmZmljaWVudHMgb2YgdGhlIHNwaGVy
aWNhbCBwb2x5bm9taWFsCisgICAgICAgICAqLworICAgICAgICB0aGlzLnl5ID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgenogY29lZmZpY2llbnRzIG9mIHRoZSBzcGhl
cmljYWwgcG9seW5vbWlhbAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy56eiA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygp
OworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHh5IGNvZWZmaWNpZW50cyBvZiB0aGUgc3Bo
ZXJpY2FsIHBvbHlub21pYWwKKyAgICAgICAgICovCisgICAgICAgIHRoaXMueHkgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8o
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB5eiBjb2VmZmljaWVudHMgb2YgdGhlIHNw
aGVyaWNhbCBwb2x5bm9taWFsCisgICAgICAgICAqLworICAgICAgICB0aGlzLnl6ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgenggY29lZmZpY2llbnRzIG9mIHRoZSBz
cGhlcmljYWwgcG9seW5vbWlhbAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy56eCA9IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVy
bygpOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3BoZXJpY2FsUG9seW5vbWlh
bC5wcm90b3R5cGUsICJwcmVTY2FsZWRIYXJtb25pY3MiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaGUgc3BoZXJpY2FsIGhhcm1vbmljcyB1c2VkIHRvIGNyZWF0ZSB0aGUgcG9seW5vbWlh
bHMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy5faGFybW9uaWNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5faGFybW9uaWNz
ID0gU3BoZXJpY2FsSGFybW9uaWNzLkZyb21Qb2x5bm9taWFsKHRoaXMpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCF0aGlzLl9oYXJtb25pY3MucHJlU2NhbGVkKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5faGFybW9uaWNzLnByZVNjYWxlRm9yUmVuZGVyaW5nKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFybW9uaWNzOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGFuIGFtYmllbnQgY29sb3IgdG8gdGhlIHNwaGVy
aWNhbCBwb2x5bm9taWFsCisgICAgICogQHBhcmFtIGNvbG9yIHRoZSBjb2xvciB0byBhZGQKKyAg
ICAgKi8KKyAgICBTcGhlcmljYWxQb2x5bm9taWFsLnByb3RvdHlwZS5hZGRBbWJpZW50ID0gZnVu
Y3Rpb24gKGNvbG9yKSB7CisgICAgICAgIHZhciBjb2xvclZlY3RvciA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKGNvbG9yLnIs
IGNvbG9yLmcsIGNvbG9yLmIpOworICAgICAgICB0aGlzLnh4ID0gdGhpcy54eC5hZGQoY29sb3JW
ZWN0b3IpOworICAgICAgICB0aGlzLnl5ID0gdGhpcy55eS5hZGQoY29sb3JWZWN0b3IpOworICAg
ICAgICB0aGlzLnp6ID0gdGhpcy56ei5hZGQoY29sb3JWZWN0b3IpOworICAgIH07CisgICAgLyoq
CisgICAgICogU2NhbGVzIHRoZSBzcGhlcmljYWwgcG9seW5vbWlhbCBieSB0aGUgZ2l2ZW4gYW1v
dW50CisgICAgICogQHBhcmFtIHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUKKyAgICAgKi8KKyAg
ICBTcGhlcmljYWxQb2x5bm9taWFsLnByb3RvdHlwZS5zY2FsZUluUGxhY2UgPSBmdW5jdGlvbiAo
c2NhbGUpIHsKKyAgICAgICAgdGhpcy54LnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgICAgIHRo
aXMueS5zY2FsZUluUGxhY2Uoc2NhbGUpOworICAgICAgICB0aGlzLnouc2NhbGVJblBsYWNlKHNj
YWxlKTsKKyAgICAgICAgdGhpcy54eC5zY2FsZUluUGxhY2Uoc2NhbGUpOworICAgICAgICB0aGlz
Lnl5LnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgICAgIHRoaXMuenouc2NhbGVJblBsYWNlKHNj
YWxlKTsKKyAgICAgICAgdGhpcy55ei5zY2FsZUluUGxhY2Uoc2NhbGUpOworICAgICAgICB0aGlz
Lnp4LnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgICAgIHRoaXMueHkuc2NhbGVJblBsYWNlKHNj
YWxlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHNwaGVyaWNhbCBwb2x5bm9t
aWFsIGZyb20gaGFybW9uaWNzCisgICAgICogQHBhcmFtIGhhcm1vbmljcyB0aGUgc3BoZXJpY2Fs
IGhhcm1vbmljcworICAgICAqIEByZXR1cm5zIHRoZSBzcGhlcmljYWwgcG9seW5vbWlhbAorICAg
ICAqLworICAgIFNwaGVyaWNhbFBvbHlub21pYWwuRnJvbUhhcm1vbmljcyA9IGZ1bmN0aW9uICho
YXJtb25pY3MpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBTcGhlcmljYWxQb2x5bm9taWFs
KCk7CisgICAgICAgIHJlc3VsdC5faGFybW9uaWNzID0gaGFybW9uaWNzOworICAgICAgICByZXN1
bHQueCA9IGhhcm1vbmljcy5sMTEuc2NhbGUoMS4wMjMzMykuc2NhbGUoLTEpOworICAgICAgICBy
ZXN1bHQueSA9IGhhcm1vbmljcy5sMV8xLnNjYWxlKDEuMDIzMzMpLnNjYWxlKC0xKTsKKyAgICAg
ICAgcmVzdWx0LnogPSBoYXJtb25pY3MubDEwLnNjYWxlKDEuMDIzMzMpOworICAgICAgICByZXN1
bHQueHggPSBoYXJtb25pY3MubDAwLnNjYWxlKDAuODg2Mjc3KS5zdWJ0cmFjdChoYXJtb25pY3Mu
bDIwLnNjYWxlKDAuMjQ3NzA4KSkuYWRkKGhhcm1vbmljcy5sMjIuc2NhbGUoMC40MjkwNDMpKTsK
KyAgICAgICAgcmVzdWx0Lnl5ID0gaGFybW9uaWNzLmwwMC5zY2FsZSgwLjg4NjI3Nykuc3VidHJh
Y3QoaGFybW9uaWNzLmwyMC5zY2FsZSgwLjI0NzcwOCkpLnN1YnRyYWN0KGhhcm1vbmljcy5sMjIu
c2NhbGUoMC40MjkwNDMpKTsKKyAgICAgICAgcmVzdWx0Lnp6ID0gaGFybW9uaWNzLmwwMC5zY2Fs
ZSgwLjg4NjI3NykuYWRkKGhhcm1vbmljcy5sMjAuc2NhbGUoMC40OTU0MTcpKTsKKyAgICAgICAg
cmVzdWx0Lnl6ID0gaGFybW9uaWNzLmwyXzEuc2NhbGUoMC44NTgwODYpLnNjYWxlKC0xKTsKKyAg
ICAgICAgcmVzdWx0Lnp4ID0gaGFybW9uaWNzLmwyMS5zY2FsZSgwLjg1ODA4Nikuc2NhbGUoLTEp
OworICAgICAgICByZXN1bHQueHkgPSBoYXJtb25pY3MubDJfMi5zY2FsZSgwLjg1ODA4Nik7Cisg
ICAgICAgIHJlc3VsdC5zY2FsZUluUGxhY2UoMS4wIC8gTWF0aC5QSSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgc3BoZXJpY2Fs
IHBvbHlub21pYWwgZnJvbSBhbiBhcnJheS4KKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRo
ZSA5eDMgY29lZmZpY2llbnRzICh4LCB5LCB6LCB4eCwgeXksIHp6LCB5eiwgengsIHh5KQorICAg
ICAqIEByZXR1cm5zIHRoZSBzcGhlcmljYWwgcG9seW5vbWlhbAorICAgICAqLworICAgIFNwaGVy
aWNhbFBvbHlub21pYWwuRnJvbUFycmF5ID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdmFy
IHNwID0gbmV3IFNwaGVyaWNhbFBvbHlub21pYWwoKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1Jl
ZihkYXRhWzBdLCAwLCBzcC54KTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRhWzFdLCAw
LCBzcC55KTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRhWzJdLCAwLCBzcC56KTsKKyAg
ICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRhWzNdLCAwLCBzcC54eCk7CisgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJv
bUFycmF5VG9SZWYoZGF0YVs0XSwgMCwgc3AueXkpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVm
KGRhdGFbNV0sIDAsIHNwLnp6KTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihkYXRhWzZdLCAw
LCBzcC55eik7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYoZGF0YVs3XSwgMCwgc3AuengpOwor
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKGRhdGFbOF0sIDAsIHNwLnh5KTsKKyAgICAgICAgcmV0
dXJuIHNwOworICAgIH07CisgICAgcmV0dXJuIFNwaGVyaWNhbFBvbHlub21pYWw7Cit9KCkpOwor
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy9CdWlsZGVycy9ib3hCdWlsZGVyLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTWVzaGVzL0J1aWxkZXJzL2JveEJ1aWxkZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJveEJ1aWxk
ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm94QnVpbGRlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gQm94QnVpbGRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2gudmVydGV4
RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0ZXhEYXRhLnRzIik7CisKKworCisKK19tZXNoX3Zl
cnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdLkNyZWF0
ZUJveCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgdmFyIG5iRmFjZXMgPSA2OworICAgIHZh
ciBpbmRpY2VzID0gWzAsIDEsIDIsIDAsIDIsIDMsIDQsIDUsIDYsIDQsIDYsIDcsIDgsIDksIDEw
LCA4LCAxMCwgMTEsIDEyLCAxMywgMTQsIDEyLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE2LCAxOCwg
MTksIDIwLCAyMSwgMjIsIDIwLCAyMiwgMjNdOworICAgIHZhciBub3JtYWxzID0gWzAsIDAsIDEs
IDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEs
IDAsIDAsIC0xLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAtMSwgMCwgMCwg
LTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwg
MCwgMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDBdOworICAgIHZh
ciB1dnMgPSBbXTsKKyAgICB2YXIgcG9zaXRpb25zID0gW107CisgICAgdmFyIHdpZHRoID0gb3B0
aW9ucy53aWR0aCB8fCBvcHRpb25zLnNpemUgfHwgMTsKKyAgICB2YXIgaGVpZ2h0ID0gb3B0aW9u
cy5oZWlnaHQgfHwgb3B0aW9ucy5zaXplIHx8IDE7CisgICAgdmFyIGRlcHRoID0gb3B0aW9ucy5k
ZXB0aCB8fCBvcHRpb25zLnNpemUgfHwgMTsKKyAgICB2YXIgd3JhcCA9IG9wdGlvbnMud3JhcCB8
fCBmYWxzZTsKKyAgICB2YXIgdG9wQmFzZUF0ID0gKG9wdGlvbnMudG9wQmFzZUF0ID09PSB2b2lk
IDApID8gMSA6IG9wdGlvbnMudG9wQmFzZUF0OworICAgIHZhciBib3R0b21CYXNlQXQgPSAob3B0
aW9ucy5ib3R0b21CYXNlQXQgPT09IHZvaWQgMCkgPyAwIDogb3B0aW9ucy5ib3R0b21CYXNlQXQ7
CisgICAgdG9wQmFzZUF0ID0gKHRvcEJhc2VBdCArIDQpICUgNDsgLy8gcGxhY2VzIHZhbHVlcyBh
cyAwIHRvIDMKKyAgICBib3R0b21CYXNlQXQgPSAoYm90dG9tQmFzZUF0ICsgNCkgJSA0OyAvLyBw
bGFjZXMgdmFsdWVzIGFzIDAgdG8gMworICAgIHZhciB0b3BPcmRlciA9IFsyLCAwLCAzLCAxXTsK
KyAgICB2YXIgYm90dG9tT3JkZXIgPSBbMiwgMCwgMSwgM107CisgICAgdmFyIHRvcEluZGV4ID0g
dG9wT3JkZXJbdG9wQmFzZUF0XTsKKyAgICB2YXIgYm90dG9tSW5kZXggPSBib3R0b21PcmRlclti
b3R0b21CYXNlQXRdOworICAgIHZhciBiYXNlUG9zaXRpb25zID0gWzEsIC0xLCAxLCAtMSwgLTEs
IDEsIC0xLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAtMSwgLTEsIDEsIC0xLCAtMSwgLTEsIC0xLCAx
LCAtMSwgLTEsIDEsIDEsIC0xLCAxLCAtMSwgLTEsIDEsIC0xLCAxLCAxLCAxLCAxLCAtMSwgMSwg
MSwgLTEsIC0xLCAxLCAtMSwgLTEsIC0xLCAtMSwgMSwgLTEsIC0xLCAxLCAxLCAtMSwgMSwgLTEs
IDEsIDEsIC0xLCAxLCAxLCAxLCAxLCAtMSwgMSwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg
LTEsIDFdOworICAgIGlmICh3cmFwKSB7CisgICAgICAgIGluZGljZXMgPSBbMiwgMywgMCwgMiwg
MCwgMSwgNCwgNSwgNiwgNCwgNiwgNywgOSwgMTAsIDExLCA5LCAxMSwgOCwgMTIsIDE0LCAxNSwg
MTIsIDEzLCAxNF07CisgICAgICAgIGJhc2VQb3NpdGlvbnMgPSBbLTEsIDEsIDEsIDEsIDEsIDEs
IDEsIC0xLCAxLCAtMSwgLTEsIDEsIDEsIDEsIC0xLCAtMSwgMSwgLTEsIC0xLCAtMSwgLTEsIDEs
IC0xLCAtMSwgMSwgMSwgMSwgMSwgMSwgLTEsIDEsIC0xLCAtMSwgMSwgLTEsIDEsIC0xLCAxLCAt
MSwgLTEsIDEsIDEsIC0xLCAtMSwgMSwgLTEsIC0xLCAtMV07CisgICAgICAgIHZhciB0b3BGYWNl
QmFzZSA9IFtbMSwgMSwgMV0sIFstMSwgMSwgMV0sIFstMSwgMSwgLTFdLCBbMSwgMSwgLTFdXTsK
KyAgICAgICAgdmFyIGJvdHRvbUZhY2VCYXNlID0gW1stMSwgLTEsIDFdLCBbMSwgLTEsIDFdLCBb
MSwgLTEsIC0xXSwgWy0xLCAtMSwgLTFdXTsKKyAgICAgICAgdmFyIHRvcEZhY2VPcmRlciA9IFsx
NywgMTgsIDE5LCAxNl07CisgICAgICAgIHZhciBib3R0b21GYWNlT3JkZXIgPSBbMjIsIDIzLCAy
MCwgMjFdOworICAgICAgICB3aGlsZSAodG9wSW5kZXggPiAwKSB7CisgICAgICAgICAgICB0b3BG
YWNlQmFzZS51bnNoaWZ0KHRvcEZhY2VCYXNlLnBvcCgpKTsKKyAgICAgICAgICAgIHRvcEZhY2VP
cmRlci51bnNoaWZ0KHRvcEZhY2VPcmRlci5wb3AoKSk7CisgICAgICAgICAgICB0b3BJbmRleC0t
OworICAgICAgICB9CisgICAgICAgIHdoaWxlIChib3R0b21JbmRleCA+IDApIHsKKyAgICAgICAg
ICAgIGJvdHRvbUZhY2VCYXNlLnVuc2hpZnQoYm90dG9tRmFjZUJhc2UucG9wKCkpOworICAgICAg
ICAgICAgYm90dG9tRmFjZU9yZGVyLnVuc2hpZnQoYm90dG9tRmFjZU9yZGVyLnBvcCgpKTsKKyAg
ICAgICAgICAgIGJvdHRvbUluZGV4LS07CisgICAgICAgIH0KKyAgICAgICAgdG9wRmFjZUJhc2Ug
PSB0b3BGYWNlQmFzZS5mbGF0KCk7CisgICAgICAgIGJvdHRvbUZhY2VCYXNlID0gYm90dG9tRmFj
ZUJhc2UuZmxhdCgpOworICAgICAgICBiYXNlUG9zaXRpb25zID0gYmFzZVBvc2l0aW9ucy5jb25j
YXQodG9wRmFjZUJhc2UpLmNvbmNhdChib3R0b21GYWNlQmFzZSk7CisgICAgICAgIGluZGljZXMu
cHVzaCh0b3BGYWNlT3JkZXJbMF0sIHRvcEZhY2VPcmRlclsyXSwgdG9wRmFjZU9yZGVyWzNdLCB0
b3BGYWNlT3JkZXJbMF0sIHRvcEZhY2VPcmRlclsxXSwgdG9wRmFjZU9yZGVyWzJdKTsKKyAgICAg
ICAgaW5kaWNlcy5wdXNoKGJvdHRvbUZhY2VPcmRlclswXSwgYm90dG9tRmFjZU9yZGVyWzJdLCBi
b3R0b21GYWNlT3JkZXJbM10sIGJvdHRvbUZhY2VPcmRlclswXSwgYm90dG9tRmFjZU9yZGVyWzFd
LCBib3R0b21GYWNlT3JkZXJbMl0pOworICAgIH0KKyAgICB2YXIgc2NhbGVBcnJheSA9IFt3aWR0
aCAvIDIsIGhlaWdodCAvIDIsIGRlcHRoIC8gMl07CisgICAgcG9zaXRpb25zID0gYmFzZVBvc2l0
aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGN1cnJlbnRJ
bmRleCkgeyByZXR1cm4gYWNjdW11bGF0b3IuY29uY2F0KGN1cnJlbnRWYWx1ZSAqIHNjYWxlQXJy
YXlbY3VycmVudEluZGV4ICUgM10pOyB9LCBbXSk7CisgICAgdmFyIHNpZGVPcmllbnRhdGlvbiA9
IChvcHRpb25zLnNpZGVPcmllbnRhdGlvbiA9PT0gMCkgPyAwIDogb3B0aW9ucy5zaWRlT3JpZW50
YXRpb24gfHwgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZXJ0ZXhEYXRhIl0uREVGQVVMVFNJREU7CisgICAgdmFyIGZhY2VVViA9IG9wdGlvbnMuZmFjZVVW
IHx8IG5ldyBBcnJheSg2KTsKKyAgICB2YXIgZmFjZUNvbG9ycyA9IG9wdGlvbnMuZmFjZUNvbG9y
czsKKyAgICB2YXIgY29sb3JzID0gW107CisgICAgLy8gZGVmYXVsdCBmYWNlIGNvbG9ycyBhbmQg
VVYgaWYgdW5kZWZpbmVkCisgICAgZm9yICh2YXIgZiA9IDA7IGYgPCA2OyBmKyspIHsKKyAgICAg
ICAgaWYgKGZhY2VVVltmXSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBmYWNlVVZbZl0g
PSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjQiXSgwLCAwLCAxLCAxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmFjZUNvbG9ycyAm
JiBmYWNlQ29sb3JzW2ZdID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGZhY2VDb2xvcnNb
Zl0gPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
Q29sb3I0Il0oMSwgMSwgMSwgMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gQ3JlYXRlIGVh
Y2ggZmFjZSBpbiB0dXJuLgorICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBuYkZhY2Vz
OyBpbmRleCsrKSB7CisgICAgICAgIHV2cy5wdXNoKGZhY2VVVltpbmRleF0ueiwgZmFjZVVWW2lu
ZGV4XS53KTsKKyAgICAgICAgdXZzLnB1c2goZmFjZVVWW2luZGV4XS54LCBmYWNlVVZbaW5kZXhd
LncpOworICAgICAgICB1dnMucHVzaChmYWNlVVZbaW5kZXhdLngsIGZhY2VVVltpbmRleF0ueSk7
CisgICAgICAgIHV2cy5wdXNoKGZhY2VVVltpbmRleF0ueiwgZmFjZVVWW2luZGV4XS55KTsKKyAg
ICAgICAgaWYgKGZhY2VDb2xvcnMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwg
NDsgYysrKSB7CisgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goZmFjZUNvbG9yc1tpbmRleF0u
ciwgZmFjZUNvbG9yc1tpbmRleF0uZywgZmFjZUNvbG9yc1tpbmRleF0uYiwgZmFjZUNvbG9yc1tp
bmRleF0uYSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gc2lkZXMK
KyAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eERhdGEiXS5fQ29tcHV0ZVNpZGVzKHNpZGVPcmllbnRhdGlvbiwgcG9zaXRpb25zLCBpbmRpY2Vz
LCBub3JtYWxzLCB1dnMsIG9wdGlvbnMuZnJvbnRVVnMsIG9wdGlvbnMuYmFja1VWcyk7CisgICAg
Ly8gUmVzdWx0CisgICAgdmFyIHZlcnRleERhdGEgPSBuZXcgX21lc2hfdmVydGV4RGF0YV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAgICB2ZXJ0ZXhEYXRh
LmluZGljZXMgPSBpbmRpY2VzOworICAgIHZlcnRleERhdGEucG9zaXRpb25zID0gcG9zaXRpb25z
OworICAgIHZlcnRleERhdGEubm9ybWFscyA9IG5vcm1hbHM7CisgICAgdmVydGV4RGF0YS51dnMg
PSB1dnM7CisgICAgaWYgKGZhY2VDb2xvcnMpIHsKKyAgICAgICAgdmFyIHRvdGFsQ29sb3JzID0g
KHNpZGVPcmllbnRhdGlvbiA9PT0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uRE9VQkxFU0lERSkgPyBjb2xvcnMuY29uY2F0KGNvbG9y
cykgOiBjb2xvcnM7CisgICAgICAgIHZlcnRleERhdGEuY29sb3JzID0gdG90YWxDb2xvcnM7Cisg
ICAgfQorICAgIHJldHVybiB2ZXJ0ZXhEYXRhOworfTsKK19tZXNoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk1lc2giXS5DcmVhdGVCb3ggPSBmdW5jdGlvbiAobmFtZSwgc2l6ZSwgc2Nl
bmUsIHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uKSB7CisgICAgaWYgKHNjZW5lID09PSB2b2lk
IDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIHNpemU6
IHNpemUsCisgICAgICAgIHNpZGVPcmllbnRhdGlvbjogc2lkZU9yaWVudGF0aW9uLAorICAgICAg
ICB1cGRhdGFibGU6IHVwZGF0YWJsZQorICAgIH07CisgICAgcmV0dXJuIEJveEJ1aWxkZXIuQ3Jl
YXRlQm94KG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKK307CisvKioKKyAqIENsYXNzIGNvbnRhaW5p
bmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWlsZCBtZXNoZXMKKyAq
LwordmFyIEJveEJ1aWxkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVu
Y3Rpb24gQm94QnVpbGRlcigpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGJv
eCBtZXNoCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBzaXplYCBzZXRzIHRoZSBzaXplIChmbG9h
dCkgb2YgZWFjaCBib3ggc2lkZSAoZGVmYXVsdCAxKQorICAgICAqICogWW91IGNhbiBzZXQgc29t
ZSBkaWZmZXJlbnQgYm94IGRpbWVuc2lvbnMgYnkgdXNpbmcgdGhlIHBhcmFtZXRlcnMgYHdpZHRo
YCwgYGhlaWdodGAgYW5kIGBkZXB0aGAgKGFsbCBieSBkZWZhdWx0IGhhdmUgdGhlIHNhbWUgdmFs
dWUgb2YgYHNpemVgKQorICAgICAqICogWW91IGNhbiBzZXQgZGlmZmVyZW50IGNvbG9ycyBhbmQg
ZGlmZmVyZW50IGltYWdlcyB0byBlYWNoIGJveCBzaWRlIGJ5IHVzaW5nIHRoZSBwYXJhbWV0ZXJz
IGBmYWNlQ29sb3JzYCAoYW4gYXJyYXkgb2YgNiBDb2xvcjMgZWxlbWVudHMpIGFuZCBgZmFjZVVW
YCAoYW4gYXJyYXkgb2YgNiBWZWN0b3I0IGVsZW1lbnRzKQorICAgICAqICogUGxlYXNlIHJlYWQg
dGhpcyB0dXRvcmlhbCA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2NyZWF0ZWJv
eF9wZXJfZmFjZV90ZXh0dXJlc19hbmRfY29sb3JzCisgICAgICogKiBZb3UgY2FuIGFsc28gc2V0
IHRoZSBtZXNoIHNpZGUgb3JpZW50YXRpb24gd2l0aCB0aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNo
LkZST05UU0lERSAoZGVmYXVsdCksIEJBQllMT04uTWVzaC5CQUNLU0lERSBvciBCQUJZTE9OLk1l
c2guRE9VQkxFU0lERQorICAgICAqICogSWYgeW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNo
LCB5b3UgY2FuIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3Ag
YW5kIHN0aWNrIHJlc3BlY3RpdmVseSBvbiB0aGUgZnJvbnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdp
dGggdGhlIHBhcmFtZXRlcnMgYGZyb250VVZzYCBhbmQgYGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0
YWlsIGhlcmUgOiBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJf
YmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRhdGlvbgorICAgICAqICogVGhlIG1lc2ggY2FuIGJl
IHNldCB0byB1cGRhdGFibGUgd2l0aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAg
KGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBj
aGFuZ2Ugb25jZSBjcmVhdGVkCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9zZXRfc2hhcGVzI2JveAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5h
bWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25z
IHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhl
IGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgYm94IG1lc2gKKyAgICAgKi8KKyAg
ICBCb3hCdWlsZGVyLkNyZWF0ZUJveCA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkg
eworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAg
ICAgdmFyIGJveCA9IG5ldyBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNo
Il0obmFtZSwgc2NlbmUpOworICAgICAgICBvcHRpb25zLnNpZGVPcmllbnRhdGlvbiA9IF9tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1lc2giXS5fR2V0RGVmYXVsdFNpZGVPcmll
bnRhdGlvbihvcHRpb25zLnNpZGVPcmllbnRhdGlvbik7CisgICAgICAgIGJveC5fb3JpZ2luYWxC
dWlsZGVyU2lkZU9yaWVudGF0aW9uID0gb3B0aW9ucy5zaWRlT3JpZW50YXRpb247CisgICAgICAg
IHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlQm94KG9wdGlvbnMpOworICAgICAgICB2ZXJ0ZXhE
YXRhLmFwcGx5VG9NZXNoKGJveCwgb3B0aW9ucy51cGRhdGFibGUpOworICAgICAgICByZXR1cm4g
Ym94OworICAgIH07CisgICAgcmV0dXJuIEJveEJ1aWxkZXI7Cit9KCkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1aWxkZXIudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1aWxkZXIudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
Q3lsaW5kZXJCdWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN5
bGluZGVyQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ3lsaW5kZXJCdWlsZGVyOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21h
dGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0
aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tZXNo
ICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3NjZW5lICovICIuL3Nj
ZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfYXhpc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWF0aHMvbWF0aC5heGlzICovICIuL01hdGhzL21hdGguYXhpcy50cyIpOworCisKKworCisKKwor
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRh
Il0uQ3JlYXRlQ3lsaW5kZXIgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgIHZhciBoZWlnaHQg
PSBvcHRpb25zLmhlaWdodCB8fCAyOworICAgIHZhciBkaWFtZXRlclRvcCA9IChvcHRpb25zLmRp
YW1ldGVyVG9wID09PSAwKSA/IDAgOiBvcHRpb25zLmRpYW1ldGVyVG9wIHx8IG9wdGlvbnMuZGlh
bWV0ZXIgfHwgMTsKKyAgICB2YXIgZGlhbWV0ZXJCb3R0b20gPSAob3B0aW9ucy5kaWFtZXRlckJv
dHRvbSA9PT0gMCkgPyAwIDogb3B0aW9ucy5kaWFtZXRlckJvdHRvbSB8fCBvcHRpb25zLmRpYW1l
dGVyIHx8IDE7CisgICAgZGlhbWV0ZXJUb3AgPSBkaWFtZXRlclRvcCB8fCAwLjAwMDAxOyAvLyBQ
cmV2ZW50IGJyb2tlbiBub3JtYWxzCisgICAgZGlhbWV0ZXJCb3R0b20gPSBkaWFtZXRlckJvdHRv
bSB8fCAwLjAwMDAxOyAvLyBQcmV2ZW50IGJyb2tlbiBub3JtYWxzCisgICAgdmFyIHRlc3NlbGxh
dGlvbiA9IG9wdGlvbnMudGVzc2VsbGF0aW9uIHx8IDI0OworICAgIHZhciBzdWJkaXZpc2lvbnMg
PSBvcHRpb25zLnN1YmRpdmlzaW9ucyB8fCAxOworICAgIHZhciBoYXNSaW5ncyA9IG9wdGlvbnMu
aGFzUmluZ3MgPyB0cnVlIDogZmFsc2U7CisgICAgdmFyIGVuY2xvc2UgPSBvcHRpb25zLmVuY2xv
c2UgPyB0cnVlIDogZmFsc2U7CisgICAgdmFyIGNhcCA9IChvcHRpb25zLmNhcCA9PT0gMCkgPyAw
IDogb3B0aW9ucy5jYXAgfHwgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVz
aCJdLkNBUF9BTEw7CisgICAgdmFyIGFyYyA9IG9wdGlvbnMuYXJjICYmIChvcHRpb25zLmFyYyA8
PSAwIHx8IG9wdGlvbnMuYXJjID4gMSkgPyAxLjAgOiBvcHRpb25zLmFyYyB8fCAxLjA7CisgICAg
dmFyIHNpZGVPcmllbnRhdGlvbiA9IChvcHRpb25zLnNpZGVPcmllbnRhdGlvbiA9PT0gMCkgPyAw
IDogb3B0aW9ucy5zaWRlT3JpZW50YXRpb24gfHwgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uREVGQVVMVFNJREU7CisgICAgdmFyIGZh
Y2VVViA9IG9wdGlvbnMuZmFjZVVWIHx8IG5ldyBBcnJheSgzKTsKKyAgICB2YXIgZmFjZUNvbG9y
cyA9IG9wdGlvbnMuZmFjZUNvbG9yczsKKyAgICAvLyBkZWZhdWx0IGZhY2UgY29sb3JzIGFuZCBV
ViBpZiB1bmRlZmluZWQKKyAgICB2YXIgcXVhZE5iID0gKGFyYyAhPT0gMSAmJiBlbmNsb3NlKSA/
IDIgOiAwOworICAgIHZhciByaW5nTmIgPSAoaGFzUmluZ3MpID8gc3ViZGl2aXNpb25zIDogMTsK
KyAgICB2YXIgc3VyZmFjZU5iID0gMiArICgxICsgcXVhZE5iKSAqIHJpbmdOYjsKKyAgICB2YXIg
ZjsKKyAgICBmb3IgKGYgPSAwOyBmIDwgc3VyZmFjZU5iOyBmKyspIHsKKyAgICAgICAgaWYgKGZh
Y2VDb2xvcnMgJiYgZmFjZUNvbG9yc1tmXSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBm
YWNlQ29sb3JzW2ZdID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIkNvbG9yNCJdKDEsIDEsIDEsIDEpOworICAgICAgICB9CisgICAgfQorICAgIGZv
ciAoZiA9IDA7IGYgPCBzdXJmYWNlTmI7IGYrKykgeworICAgICAgICBpZiAoZmFjZVVWICYmIGZh
Y2VVVltmXSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBmYWNlVVZbZl0gPSBuZXcgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjQiXSgw
LCAwLCAxLCAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2YXIgaW5kaWNlcyA9IG5ldyBBcnJh
eSgpOworICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgbm9ybWFscyA9
IG5ldyBBcnJheSgpOworICAgIHZhciB1dnMgPSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgY29sb3Jz
ID0gbmV3IEFycmF5KCk7CisgICAgdmFyIGFuZ2xlX3N0ZXAgPSBNYXRoLlBJICogMiAqIGFyYyAv
IHRlc3NlbGxhdGlvbjsKKyAgICB2YXIgYW5nbGU7CisgICAgdmFyIGg7CisgICAgdmFyIHJhZGl1
czsKKyAgICB2YXIgdGFuID0gKGRpYW1ldGVyQm90dG9tIC0gZGlhbWV0ZXJUb3ApIC8gMiAvIGhl
aWdodDsKKyAgICB2YXIgcmluZ1ZlcnRleCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgIHZhciByaW5nTm9ybWFs
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3Rv
cjMiXS5aZXJvKCk7CisgICAgdmFyIHJpbmdGaXJzdFZlcnRleCA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgIHZh
ciByaW5nRmlyc3ROb3JtYWwgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICB2YXIgcXVhZE5vcm1hbCA9IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVy
bygpOworICAgIHZhciBZID0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJBeGlzIl0uWTsKKyAgICAvLyBwb3NpdGlvbnMsIG5vcm1hbHMsIHV2cworICAgIHZh
ciBpOworICAgIHZhciBqOworICAgIHZhciByOworICAgIHZhciByaW5nSWR4ID0gMTsKKyAgICB2
YXIgcyA9IDE7IC8vIHN1cmZhY2UgaW5kZXgKKyAgICB2YXIgY3MgPSAwOworICAgIHZhciB2ID0g
MDsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IHN1YmRpdmlzaW9uczsgaSsrKSB7CisgICAgICAgIGgg
PSBpIC8gc3ViZGl2aXNpb25zOworICAgICAgICByYWRpdXMgPSAoaCAqIChkaWFtZXRlclRvcCAt
IGRpYW1ldGVyQm90dG9tKSArIGRpYW1ldGVyQm90dG9tKSAvIDI7CisgICAgICAgIHJpbmdJZHgg
PSAoaGFzUmluZ3MgJiYgaSAhPT0gMCAmJiBpICE9PSBzdWJkaXZpc2lvbnMpID8gMiA6IDE7Cisg
ICAgICAgIGZvciAociA9IDA7IHIgPCByaW5nSWR4OyByKyspIHsKKyAgICAgICAgICAgIGlmICho
YXNSaW5ncykgeworICAgICAgICAgICAgICAgIHMgKz0gcjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChlbmNsb3NlKSB7CisgICAgICAgICAgICAgICAgcyArPSAyICogcjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPD0gdGVzc2VsbGF0aW9uOyBqKysp
IHsKKyAgICAgICAgICAgICAgICBhbmdsZSA9IGogKiBhbmdsZV9zdGVwOworICAgICAgICAgICAg
ICAgIC8vIHBvc2l0aW9uCisgICAgICAgICAgICAgICAgcmluZ1ZlcnRleC54ID0gTWF0aC5jb3Mo
LWFuZ2xlKSAqIHJhZGl1czsKKyAgICAgICAgICAgICAgICByaW5nVmVydGV4LnkgPSAtaGVpZ2h0
IC8gMiArIGggKiBoZWlnaHQ7CisgICAgICAgICAgICAgICAgcmluZ1ZlcnRleC56ID0gTWF0aC5z
aW4oLWFuZ2xlKSAqIHJhZGl1czsKKyAgICAgICAgICAgICAgICAvLyBub3JtYWwKKyAgICAgICAg
ICAgICAgICBpZiAoZGlhbWV0ZXJUb3AgPT09IDAgJiYgaSA9PT0gc3ViZGl2aXNpb25zKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vIHRvcCBjYXAsIHJldXNlIGZvcm1lciBub3JtYWxz
CisgICAgICAgICAgICAgICAgICAgIHJpbmdOb3JtYWwueCA9IG5vcm1hbHNbbm9ybWFscy5sZW5n
dGggLSAodGVzc2VsbGF0aW9uICsgMSkgKiAzXTsKKyAgICAgICAgICAgICAgICAgICAgcmluZ05v
cm1hbC55ID0gbm9ybWFsc1tub3JtYWxzLmxlbmd0aCAtICh0ZXNzZWxsYXRpb24gKyAxKSAqIDMg
KyAxXTsKKyAgICAgICAgICAgICAgICAgICAgcmluZ05vcm1hbC56ID0gbm9ybWFsc1tub3JtYWxz
Lmxlbmd0aCAtICh0ZXNzZWxsYXRpb24gKyAxKSAqIDMgKyAyXTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJpbmdOb3JtYWwu
eCA9IHJpbmdWZXJ0ZXgueDsKKyAgICAgICAgICAgICAgICAgICAgcmluZ05vcm1hbC56ID0gcmlu
Z1ZlcnRleC56OworICAgICAgICAgICAgICAgICAgICByaW5nTm9ybWFsLnkgPSBNYXRoLnNxcnQo
cmluZ05vcm1hbC54ICogcmluZ05vcm1hbC54ICsgcmluZ05vcm1hbC56ICogcmluZ05vcm1hbC56
KSAqIHRhbjsKKyAgICAgICAgICAgICAgICAgICAgcmluZ05vcm1hbC5ub3JtYWxpemUoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8ga2VlcCBmaXJzdCByaW5nIHZlcnRl
eCB2YWx1ZXMgZm9yIGVuY2xvc2UKKyAgICAgICAgICAgICAgICBpZiAoaiA9PT0gMCkgeworICAg
ICAgICAgICAgICAgICAgICByaW5nRmlyc3RWZXJ0ZXguY29weUZyb20ocmluZ1ZlcnRleCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJpbmdGaXJzdE5vcm1hbC5jb3B5RnJvbShyaW5nTm9ybWFsKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2gocmluZ1Zl
cnRleC54LCByaW5nVmVydGV4LnksIHJpbmdWZXJ0ZXgueik7CisgICAgICAgICAgICAgICAgbm9y
bWFscy5wdXNoKHJpbmdOb3JtYWwueCwgcmluZ05vcm1hbC55LCByaW5nTm9ybWFsLnopOworICAg
ICAgICAgICAgICAgIGlmIChoYXNSaW5ncykgeworICAgICAgICAgICAgICAgICAgICB2ID0gKGNz
ICE9PSBzKSA/IGZhY2VVVltzXS55IDogZmFjZVVWW3NdLnc7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2ID0gZmFjZVVWW3Nd
LnkgKyAoZmFjZVVWW3NdLncgLSBmYWNlVVZbc10ueSkgKiBoOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB1dnMucHVzaChmYWNlVVZbc10ueCArIChmYWNlVVZbc10ueiAtIGZh
Y2VVVltzXS54KSAqIGogLyB0ZXNzZWxsYXRpb24sIHYpOworICAgICAgICAgICAgICAgIGlmIChm
YWNlQ29sb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbG9ycy5wdXNoKGZhY2VDb2xvcnNb
c10uciwgZmFjZUNvbG9yc1tzXS5nLCBmYWNlQ29sb3JzW3NdLmIsIGZhY2VDb2xvcnNbc10uYSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gaWYgZW5j
bG9zZSwgYWRkIGZvdXIgdmVydGljZXMgYW5kIHRoZWlyIGRlZGljYXRlZCBub3JtYWxzCisgICAg
ICAgICAgICBpZiAoYXJjICE9PSAxICYmIGVuY2xvc2UpIHsKKyAgICAgICAgICAgICAgICBwb3Np
dGlvbnMucHVzaChyaW5nVmVydGV4LngsIHJpbmdWZXJ0ZXgueSwgcmluZ1ZlcnRleC56KTsKKyAg
ICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCgwLCByaW5nVmVydGV4LnksIDApOworICAgICAg
ICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKDAsIHJpbmdWZXJ0ZXgueSwgMCk7CisgICAgICAgICAg
ICAgICAgcG9zaXRpb25zLnB1c2gocmluZ0ZpcnN0VmVydGV4LngsIHJpbmdGaXJzdFZlcnRleC55
LCByaW5nRmlyc3RWZXJ0ZXgueik7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Dcm9zc1RvUmVmKFksIHJp
bmdOb3JtYWwsIHF1YWROb3JtYWwpOworICAgICAgICAgICAgICAgIHF1YWROb3JtYWwubm9ybWFs
aXplKCk7CisgICAgICAgICAgICAgICAgbm9ybWFscy5wdXNoKHF1YWROb3JtYWwueCwgcXVhZE5v
cm1hbC55LCBxdWFkTm9ybWFsLnosIHF1YWROb3JtYWwueCwgcXVhZE5vcm1hbC55LCBxdWFkTm9y
bWFsLnopOworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZihyaW5nRmlyc3ROb3JtYWwsIFks
IHF1YWROb3JtYWwpOworICAgICAgICAgICAgICAgIHF1YWROb3JtYWwubm9ybWFsaXplKCk7Cisg
ICAgICAgICAgICAgICAgbm9ybWFscy5wdXNoKHF1YWROb3JtYWwueCwgcXVhZE5vcm1hbC55LCBx
dWFkTm9ybWFsLnosIHF1YWROb3JtYWwueCwgcXVhZE5vcm1hbC55LCBxdWFkTm9ybWFsLnopOwor
ICAgICAgICAgICAgICAgIGlmIChoYXNSaW5ncykgeworICAgICAgICAgICAgICAgICAgICB2ID0g
KGNzICE9PSBzKSA/IGZhY2VVVltzICsgMV0ueSA6IGZhY2VVVltzICsgMV0udzsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHYg
PSBmYWNlVVZbcyArIDFdLnkgKyAoZmFjZVVWW3MgKyAxXS53IC0gZmFjZVVWW3MgKyAxXS55KSAq
IGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHV2cy5wdXNoKGZhY2VVVltz
ICsgMV0ueCwgdik7CisgICAgICAgICAgICAgICAgdXZzLnB1c2goZmFjZVVWW3MgKyAxXS56LCB2
KTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzUmluZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAg
diA9IChjcyAhPT0gcykgPyBmYWNlVVZbcyArIDJdLnkgOiBmYWNlVVZbcyArIDJdLnc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB2ID0gZmFjZVVWW3MgKyAyXS55ICsgKGZhY2VVVltzICsgMl0udyAtIGZhY2VVVltzICsgMl0u
eSkgKiBoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1dnMucHVzaChmYWNl
VVZbcyArIDJdLngsIHYpOworICAgICAgICAgICAgICAgIHV2cy5wdXNoKGZhY2VVVltzICsgMl0u
eiwgdik7CisgICAgICAgICAgICAgICAgaWYgKGZhY2VDb2xvcnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29sb3JzLnB1c2goZmFjZUNvbG9yc1tzICsgMV0uciwgZmFjZUNvbG9yc1tzICsgMV0u
ZywgZmFjZUNvbG9yc1tzICsgMV0uYiwgZmFjZUNvbG9yc1tzICsgMV0uYSk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbG9ycy5wdXNoKGZhY2VDb2xvcnNbcyArIDFdLnIsIGZhY2VDb2xvcnNbcyAr
IDFdLmcsIGZhY2VDb2xvcnNbcyArIDFdLmIsIGZhY2VDb2xvcnNbcyArIDFdLmEpOworICAgICAg
ICAgICAgICAgICAgICBjb2xvcnMucHVzaChmYWNlQ29sb3JzW3MgKyAyXS5yLCBmYWNlQ29sb3Jz
W3MgKyAyXS5nLCBmYWNlQ29sb3JzW3MgKyAyXS5iLCBmYWNlQ29sb3JzW3MgKyAyXS5hKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goZmFjZUNvbG9yc1tzICsgMl0uciwgZmFjZUNv
bG9yc1tzICsgMl0uZywgZmFjZUNvbG9yc1tzICsgMl0uYiwgZmFjZUNvbG9yc1tzICsgMl0uYSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNzICE9
PSBzKSB7CisgICAgICAgICAgICAgICAgY3MgPSBzOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIC8vIGluZGljZXMKKyAgICB2YXIgZSA9IChhcmMgIT09IDEgJiYgZW5jbG9z
ZSkgPyB0ZXNzZWxsYXRpb24gKyA0IDogdGVzc2VsbGF0aW9uOyAvLyBjb3JyZWN0aW9uIG9mIG51
bWJlciBvZiBpdGVyYXRpb24gaWYgZW5jbG9zZQorICAgIHZhciBzOworICAgIGkgPSAwOworICAg
IGZvciAocyA9IDA7IHMgPCBzdWJkaXZpc2lvbnM7IHMrKykgeworICAgICAgICB2YXIgaTAgPSAw
OworICAgICAgICB2YXIgaTEgPSAwOworICAgICAgICB2YXIgaTIgPSAwOworICAgICAgICB2YXIg
aTMgPSAwOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgdGVzc2VsbGF0aW9uOyBqKyspIHsKKyAg
ICAgICAgICAgIGkwID0gaSAqIChlICsgMSkgKyBqOworICAgICAgICAgICAgaTEgPSAoaSArIDEp
ICogKGUgKyAxKSArIGo7CisgICAgICAgICAgICBpMiA9IGkgKiAoZSArIDEpICsgKGogKyAxKTsK
KyAgICAgICAgICAgIGkzID0gKGkgKyAxKSAqIChlICsgMSkgKyAoaiArIDEpOworICAgICAgICAg
ICAgaW5kaWNlcy5wdXNoKGkwLCBpMSwgaTIpOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGkz
LCBpMiwgaTEpOworICAgICAgICB9CisgICAgICAgIGlmIChhcmMgIT09IDEgJiYgZW5jbG9zZSkg
eyAvLyBpZiBlbmNsb3NlLCBhZGQgdHdvIHF1YWRzCisgICAgICAgICAgICBpbmRpY2VzLnB1c2go
aTAgKyAyLCBpMSArIDIsIGkyICsgMik7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaTMgKyAy
LCBpMiArIDIsIGkxICsgMik7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaTAgKyA0LCBpMSAr
IDQsIGkyICsgNCk7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaTMgKyA0LCBpMiArIDQsIGkx
ICsgNCk7CisgICAgICAgIH0KKyAgICAgICAgaSA9IChoYXNSaW5ncykgPyAoaSArIDIpIDogKGkg
KyAxKTsKKyAgICB9CisgICAgLy8gQ2FwcworICAgIHZhciBjcmVhdGVDeWxpbmRlckNhcCA9IGZ1
bmN0aW9uIChpc1RvcCkgeworICAgICAgICB2YXIgcmFkaXVzID0gaXNUb3AgPyBkaWFtZXRlclRv
cCAvIDIgOiBkaWFtZXRlckJvdHRvbSAvIDI7CisgICAgICAgIGlmIChyYWRpdXMgPT09IDApIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBDYXAgcG9zaXRpb25z
LCBub3JtYWxzICYgdXZzCisgICAgICAgIHZhciBhbmdsZTsKKyAgICAgICAgdmFyIGNpcmNsZVZl
Y3RvcjsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIHZhciB1ID0gKGlzVG9wKSA/IGZhY2VVVltz
dXJmYWNlTmIgLSAxXSA6IGZhY2VVVlswXTsKKyAgICAgICAgdmFyIGMgPSBudWxsOworICAgICAg
ICBpZiAoZmFjZUNvbG9ycykgeworICAgICAgICAgICAgYyA9IChpc1RvcCkgPyBmYWNlQ29sb3Jz
W3N1cmZhY2VOYiAtIDFdIDogZmFjZUNvbG9yc1swXTsKKyAgICAgICAgfQorICAgICAgICAvLyBj
YXAgY2VudGVyCisgICAgICAgIHZhciB2YmFzZSA9IHBvc2l0aW9ucy5sZW5ndGggLyAzOworICAg
ICAgICB2YXIgb2Zmc2V0ID0gaXNUb3AgPyBoZWlnaHQgLyAyIDogLWhlaWdodCAvIDI7CisgICAg
ICAgIHZhciBjZW50ZXIgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCBvZmZzZXQsIDApOworICAgICAgICBwb3NpdGlvbnMu
cHVzaChjZW50ZXIueCwgY2VudGVyLnksIGNlbnRlci56KTsKKyAgICAgICAgbm9ybWFscy5wdXNo
KDAsIGlzVG9wID8gMSA6IC0xLCAwKTsKKyAgICAgICAgdXZzLnB1c2godS54ICsgKHUueiAtIHUu
eCkgKiAwLjUsIHUueSArICh1LncgLSB1LnkpICogMC41KTsKKyAgICAgICAgaWYgKGMpIHsKKyAg
ICAgICAgICAgIGNvbG9ycy5wdXNoKGMuciwgYy5nLCBjLmIsIGMuYSk7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIHRleHR1cmVTY2FsZSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdKDAuNSwgMC41KTsKKyAgICAgICAgZm9yIChp
ID0gMDsgaSA8PSB0ZXNzZWxsYXRpb247IGkrKykgeworICAgICAgICAgICAgYW5nbGUgPSBNYXRo
LlBJICogMiAqIGkgKiBhcmMgLyB0ZXNzZWxsYXRpb247CisgICAgICAgICAgICB2YXIgY29zID0g
TWF0aC5jb3MoLWFuZ2xlKTsKKyAgICAgICAgICAgIHZhciBzaW4gPSBNYXRoLnNpbigtYW5nbGUp
OworICAgICAgICAgICAgY2lyY2xlVmVjdG9yID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oY29zICogcmFkaXVzLCBvZmZzZXQs
IHNpbiAqIHJhZGl1cyk7CisgICAgICAgICAgICB2YXIgdGV4dHVyZUNvb3JkaW5hdGUgPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjIi
XShjb3MgKiB0ZXh0dXJlU2NhbGUueCArIDAuNSwgc2luICogdGV4dHVyZVNjYWxlLnkgKyAwLjUp
OworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goY2lyY2xlVmVjdG9yLngsIGNpcmNsZVZlY3Rv
ci55LCBjaXJjbGVWZWN0b3Iueik7CisgICAgICAgICAgICBub3JtYWxzLnB1c2goMCwgaXNUb3Ag
PyAxIDogLTEsIDApOworICAgICAgICAgICAgdXZzLnB1c2godS54ICsgKHUueiAtIHUueCkgKiB0
ZXh0dXJlQ29vcmRpbmF0ZS54LCB1LnkgKyAodS53IC0gdS55KSAqIHRleHR1cmVDb29yZGluYXRl
LnkpOworICAgICAgICAgICAgaWYgKGMpIHsKKyAgICAgICAgICAgICAgICBjb2xvcnMucHVzaChj
LnIsIGMuZywgYy5iLCBjLmEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IENhcCBpbmRpY2VzCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZXNzZWxsYXRpb247IGkrKykg
eworICAgICAgICAgICAgaWYgKCFpc1RvcCkgeworICAgICAgICAgICAgICAgIGluZGljZXMucHVz
aCh2YmFzZSk7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZiYXNlICsgKGkgKyAxKSk7
CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZiYXNlICsgKGkgKyAyKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2go
dmJhc2UpOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCh2YmFzZSArIChpICsgMikpOwor
ICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCh2YmFzZSArIChpICsgMSkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvLyBhZGQgY2FwcyB0byBnZW9tZXRyeSBiYXNl
ZCBvbiBjYXAgcGFyYW1ldGVyCisgICAgaWYgKChjYXAgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk1lc2giXS5DQVBfU1RBUlQpCisgICAgICAgIHx8IChjYXAgPT09IF9t
ZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1lc2giXS5DQVBfQUxMKSkgeworICAg
ICAgICBjcmVhdGVDeWxpbmRlckNhcChmYWxzZSk7CisgICAgfQorICAgIGlmICgoY2FwID09PSBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uQ0FQX0VORCkKKyAgICAg
ICAgfHwgKGNhcCA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJd
LkNBUF9BTEwpKSB7CisgICAgICAgIGNyZWF0ZUN5bGluZGVyQ2FwKHRydWUpOworICAgIH0KKyAg
ICAvLyBTaWRlcworICAgIF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVydGV4RGF0YSJdLl9Db21wdXRlU2lkZXMoc2lkZU9yaWVudGF0aW9uLCBwb3NpdGlv
bnMsIGluZGljZXMsIG5vcm1hbHMsIHV2cywgb3B0aW9ucy5mcm9udFVWcywgb3B0aW9ucy5iYWNr
VVZzKTsKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXSgpOworICAgIHZlcnRleERhdGEuaW5k
aWNlcyA9IGluZGljZXM7CisgICAgdmVydGV4RGF0YS5wb3NpdGlvbnMgPSBwb3NpdGlvbnM7Cisg
ICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRhLnV2cyA9IHV2
czsKKyAgICBpZiAoZmFjZUNvbG9ycykgeworICAgICAgICB2ZXJ0ZXhEYXRhLmNvbG9ycyA9IGNv
bG9yczsKKyAgICB9CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdLkNyZWF0ZUN5bGluZGVyID0gZnVuY3Rpb24gKG5h
bWUsIGhlaWdodCwgZGlhbWV0ZXJUb3AsIGRpYW1ldGVyQm90dG9tLCB0ZXNzZWxsYXRpb24sIHN1
YmRpdmlzaW9ucywgc2NlbmUsIHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uKSB7CisgICAgaWYg
KHNjZW5lID09PSB1bmRlZmluZWQgfHwgIShzY2VuZSBpbnN0YW5jZW9mIF9zY2VuZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZSJdKSkgeworICAgICAgICBpZiAoc2NlbmUgIT09
IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgc2lkZU9yaWVudGF0aW9uID0gdXBkYXRhYmxlIHx8
IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1lc2giXS5ERUZBVUxUU0lERTsK
KyAgICAgICAgICAgIHVwZGF0YWJsZSA9IHNjZW5lOworICAgICAgICB9CisgICAgICAgIHNjZW5l
ID0gc3ViZGl2aXNpb25zOworICAgICAgICBzdWJkaXZpc2lvbnMgPSAxOworICAgIH0KKyAgICB2
YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCisgICAgICAgIGRpYW1ldGVy
VG9wOiBkaWFtZXRlclRvcCwKKyAgICAgICAgZGlhbWV0ZXJCb3R0b206IGRpYW1ldGVyQm90dG9t
LAorICAgICAgICB0ZXNzZWxsYXRpb246IHRlc3NlbGxhdGlvbiwKKyAgICAgICAgc3ViZGl2aXNp
b25zOiBzdWJkaXZpc2lvbnMsCisgICAgICAgIHNpZGVPcmllbnRhdGlvbjogc2lkZU9yaWVudGF0
aW9uLAorICAgICAgICB1cGRhdGFibGU6IHVwZGF0YWJsZQorICAgIH07CisgICAgcmV0dXJuIEN5
bGluZGVyQnVpbGRlci5DcmVhdGVDeWxpbmRlcihuYW1lLCBvcHRpb25zLCBzY2VuZSk7Cit9Owor
LyoqCisgKiBDbGFzcyBjb250YWluaW5nIHN0YXRpYyBmdW5jdGlvbnMgdG8gaGVscCBwcm9jZWR1
cmFsbHkgYnVpbGQgbWVzaGVzCisgKi8KK3ZhciBDeWxpbmRlckJ1aWxkZXIgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gQ3lsaW5kZXJCdWlsZGVyKCkgeworICAg
IH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgY3lsaW5kZXIgb3IgYSBjb25lIG1lc2gKKyAg
ICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGhlaWdodGAgc2V0cyB0aGUgaGVpZ2h0IHNpemUgKGZsb2F0
KSBvZiB0aGUgY3lsaW5kZXIvY29uZSAoZmxvYXQsIGRlZmF1bHQgMikuCisgICAgICogKiBUaGUg
cGFyYW1ldGVyIGBkaWFtZXRlcmAgc2V0cyB0aGUgZGlhbWV0ZXIgb2YgdGhlIHRvcCBhbmQgYm90
dG9tIGNhcCBhdCBvbmNlIChmbG9hdCwgZGVmYXVsdCAxKS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0
ZXJzIGBkaWFtZXRlclRvcGAgYW5kIGBkaWFtZXRlckJvdHRvbWAgb3ZlcndyaXRlIHRoZSBwYXJh
bWV0ZXIgYGRpYW1ldGVyYCBhbmQgc2V0IHJlc3BlY3RpdmVseSB0aGUgdG9wIGNhcCBhbmQgYm90
dG9tIGNhcCBkaWFtZXRlciAoZmxvYXRzLCBkZWZhdWx0IDEpLiBUaGUgcGFyYW1ldGVyICJkaWFt
ZXRlckJvdHRvbSIgY2FuJ3QgYmUgemVyby4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHRlc3Nl
bGxhdGlvbmAgc2V0cyB0aGUgbnVtYmVyIG9mIGN5bGluZGVyIHNpZGVzIChwb3NpdGl2ZSBpbnRl
Z2VyLCBkZWZhdWx0IDI0KS4gU2V0IGl0IHRvIDMgdG8gZ2V0IGEgcHJpc20gZm9yIGluc3RhbmNl
LgorICAgICAqICogVGhlIHBhcmFtZXRlciBgc3ViZGl2aXNpb25zYCBzZXRzIHRoZSBudW1iZXIg
b2YgcmluZ3MgYWxvbmcgdGhlIGN5bGluZGVyIGhlaWdodCAocG9zaXRpdmUgaW50ZWdlciwgZGVm
YXVsdCAxKS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGhhc1JpbmdzYCAoYm9vbGVhbiwgZGVm
YXVsdCBmYWxzZSkgbWFrZXMgdGhlIHN1YmRpdmlzaW9ucyBpbmRlcGVuZGVudCBmcm9tIGVhY2gg
b3RoZXIsIHNvIHRoZXkgYmVjb21lIGRpZmZlcmVudCBmYWNlcy4KKyAgICAgKiAqIFRoZSBwYXJh
bWV0ZXIgYGVuY2xvc2VgICAoYm9vbGVhbiwgZGVmYXVsdCBmYWxzZSkgYWRkcyB0d28gZXh0cmEg
ZmFjZXMgcGVyIHN1YmRpdmlzaW9uIHRvIGEgc2xpY2VkIGN5bGluZGVyIHRvIGNsb3NlIGl0IGFy
b3VuZCBpdHMgaGVpZ2h0IGF4aXMuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBjYXBgIHNldHMg
dGhlIHdheSB0aGUgY3lsaW5kZXIgaXMgY2FwcGVkLiBQb3NzaWJsZSB2YWx1ZXMgOiBCQUJZTE9O
Lk1lc2guTk9fQ0FQLCBCQUJZTE9OLk1lc2guQ0FQX1NUQVJULCBCQUJZTE9OLk1lc2guQ0FQX0VO
RCwgQkFCWUxPTi5NZXNoLkNBUF9BTEwgKGRlZmF1bHQpLgorICAgICAqICogVGhlIHBhcmFtZXRl
ciBgYXJjYCAoZmxvYXQsIGRlZmF1bHQgMSkgaXMgdGhlIHJhdGlvIChtYXggMSkgdG8gYXBwbHkg
dG8gdGhlIGNpcmN1bWZlcmVuY2UgdG8gc2xpY2UgdGhlIGN5bGluZGVyLgorICAgICAqICogWW91
IGNhbiBzZXQgZGlmZmVyZW50IGNvbG9ycyBhbmQgZGlmZmVyZW50IGltYWdlcyB0byBlYWNoIGJv
eCBzaWRlIGJ5IHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGBmYWNlQ29sb3JzYCAoYW4gYXJyYXkgb2Yg
biBDb2xvcjMgZWxlbWVudHMpIGFuZCBgZmFjZVVWYCAoYW4gYXJyYXkgb2YgbiBWZWN0b3I0IGVs
ZW1lbnRzKS4KKyAgICAgKiAqIFRoZSB2YWx1ZSBvZiBuIGlzIHRoZSBudW1iZXIgb2YgY3lsaW5k
ZXIgZmFjZXMuIElmIHRoZSBjeWxpbmRlciBoYXMgb25seSAxIHN1YmRpdmlzaW9ucywgbiBlcXVh
bHMgOiB0b3AgZmFjZSArIGN5bGluZGVyIHN1cmZhY2UgKyBib3R0b20gZmFjZSA9IDMKKyAgICAg
KiAqIE5vdywgaWYgdGhlIGN5bGluZGVyIGhhcyA1IGluZGVwZW5kZW50IHN1YmRpdmlzaW9ucyAo
aGFzUmluZ3MgPSB0cnVlKSwgbiBlcXVhbHMgOiB0b3AgZmFjZSArIDUgc3RyaXBlIHN1cmZhY2Vz
ICsgYm90dG9tIGZhY2UgPSAyICsgNSA9IDcKKyAgICAgKiAqIEZpbmFsbHksIGlmIHRoZSBjeWxp
bmRlciBoYXMgNSBpbmRlcGVuZGVudCBzdWJkaXZpc2lvbnMgYW5kIGlzIGVuY2xvc2UsIG4gZXF1
YWxzIDogdG9wIGZhY2UgKyA1IHggKHN0cmlwZSBzdXJmYWNlICsgMiBjbG9zaW5nIGZhY2VzKSAr
IGJvdHRvbSBmYWNlID0gMiArIDUgKiAzID0gMTcKKyAgICAgKiAqIEVhY2ggYXJyYXkgKGNvbG9y
IG9yIFVWcykgaXMgYWx3YXlzIG9yZGVyZWQgdGhlIHNhbWUgd2F5IDogdGhlIGZpcnN0IGVsZW1l
bnQgaXMgdGhlIGJvdHRvbSBjYXAsIHRoZSBsYXN0IGVsZW1lbnQgaXMgdGhlIHRvcCBjYXAuIFRo
ZSBvdGhlciBlbGVtZW50cyBhcmUgZWFjaCBhIHJpbmcgc3VyZmFjZS4KKyAgICAgKiAqIElmIGBl
bmNsb3NlYCBpcyBmYWxzZSwgYSByaW5nIHN1cmZhY2UgaXMgb25lIGVsZW1lbnQuCisgICAgICog
KiBJZiBgZW5jbG9zZWAgaXMgdHJ1ZSwgYSByaW5nIHN1cmZhY2UgaXMgMyBzdWNjZXNzaXZlIGVs
ZW1lbnRzIGluIHRoZSBhcnJheSA6IHRoZSB0dWJ1bGFyIHN1cmZhY2UsIHRoZW4gdGhlIHR3byBj
bG9zaW5nIGZhY2VzLgorICAgICAqICogRXhhbXBsZSBob3cgdG8gc2V0IGNvbG9ycyBhbmQgdGV4
dHVyZXMgb24gYSBzbGljZWQgY3lsaW5kZXIgOiBodHRwczovL3d3dy5odG1sNWdhbWVkZXZzLmNv
bS90b3BpYy8xNzk0NS1jcmVhdGluZy1hLWNsb3NlZC1zbGljZS1vZi1hLWN5bGluZGVyLyNjb21t
ZW50LTEwNjM3OQorICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVu
dGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQp
LCBCQUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNoLkRPVUJMRVNJREUKKyAgICAg
KiAqIElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hh
dCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZl
bHkgb24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBm
cm9udFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFpbCBoZXJlIDogaHR0cHM6Ly9k
b2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUt
b3JpZW50YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdp
dGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBp
dHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZC4K
KyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICog
QHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVz
aAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICog
QHJldHVybnMgdGhlIGN5bGluZGVyIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vaG93X3RvL3NldF9zaGFwZXMjY3lsaW5kZXItb3ItY29uZQorICAgICAqLworICAg
IEN5bGluZGVyQnVpbGRlci5DcmVhdGVDeWxpbmRlciA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25z
LCBzY2VuZSkgeworICAgICAgICB2YXIgY3lsaW5kZXIgPSBuZXcgX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTWVzaCJdKG5hbWUsIHNjZW5lKTsKKyAgICAgICAgb3B0aW9ucy5z
aWRlT3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNo
Il0uX0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24pOwor
ICAgICAgICBjeWxpbmRlci5fb3JpZ2luYWxCdWlsZGVyU2lkZU9yaWVudGF0aW9uID0gb3B0aW9u
cy5zaWRlT3JpZW50YXRpb247CisgICAgICAgIHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4
RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlQ3ls
aW5kZXIob3B0aW9ucyk7CisgICAgICAgIHZlcnRleERhdGEuYXBwbHlUb01lc2goY3lsaW5kZXIs
IG9wdGlvbnMudXBkYXRhYmxlKTsKKyAgICAgICAgcmV0dXJuIGN5bGluZGVyOworICAgIH07Cisg
ICAgcmV0dXJuIEN5bGluZGVyQnVpbGRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWVzaGVzL0J1aWxkZXJzL2RlY2FsQnVpbGRlci50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL0J1aWxkZXJz
L2RlY2FsQnVpbGRlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBEZWNhbEJ1aWxkZXIgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVjYWxCdWlsZGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBEZWNhbEJ1aWxkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaCAqLyAiLi9NZXNo
ZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2J1ZmZlciAq
LyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZXJ0ZXhGb3JtYXRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01hdGhzL21hdGgudmVydGV4Rm9ybWF0ICovICIuL01hdGhzL21hdGgudmVydGV4Rm9ybWF0
LnRzIik7CisKKworCisKKworX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVz
aCJdLkNyZWF0ZURlY2FsID0gZnVuY3Rpb24gKG5hbWUsIHNvdXJjZU1lc2gsIHBvc2l0aW9uLCBu
b3JtYWwsIHNpemUsIGFuZ2xlKSB7CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIHBvc2l0
aW9uOiBwb3NpdGlvbiwKKyAgICAgICAgbm9ybWFsOiBub3JtYWwsCisgICAgICAgIHNpemU6IHNp
emUsCisgICAgICAgIGFuZ2xlOiBhbmdsZQorICAgIH07CisgICAgcmV0dXJuIERlY2FsQnVpbGRl
ci5DcmVhdGVEZWNhbChuYW1lLCBzb3VyY2VNZXNoLCBvcHRpb25zKTsKK307CisvKioKKyAqIENs
YXNzIGNvbnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWls
ZCBtZXNoZXMKKyAqLwordmFyIERlY2FsQnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICBmdW5jdGlvbiBEZWNhbEJ1aWxkZXIoKSB7CisgICAgfQorICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBkZWNhbCBtZXNoLgorICAgICAqIEEgZGVjYWwgaXMgYSBtZXNoIHVzdWFs
bHkgYXBwbGllZCBhcyBhIG1vZGVsIG9udG8gdGhlIHN1cmZhY2Ugb2YgYW5vdGhlciBtZXNoLiBT
byBkb24ndCBmb3JnZXQgdGhlIHBhcmFtZXRlciBgc291cmNlTWVzaGAgZGVwaWN0aW5nIHRoZSBk
ZWNhbAorICAgICAqICogVGhlIHBhcmFtZXRlciBgcG9zaXRpb25gIChWZWN0b3IzLCBkZWZhdWx0
IGAoMCwgMCwgMClgKSBzZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVjYWwgaW4gV29ybGQgY29v
cmRpbmF0ZXMKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYG5vcm1hbGAgKFZlY3RvcjMsIGRlZmF1
bHQgYFZlY3RvcjMuVXBgKSBzZXRzIHRoZSBub3JtYWwgb2YgdGhlIG1lc2ggd2hlcmUgdGhlIGRl
Y2FsIGlzIGFwcGxpZWQgb250byBpbiBXb3JsZCBjb29yZGluYXRlcworICAgICAqICogVGhlIHBh
cmFtZXRlciBgc2l6ZWAgKFZlY3RvcjMsIGRlZmF1bHQgYCgxLCAxLCAxKWApIHNldHMgdGhlIGRl
Y2FsIHNjYWxpbmcKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGFuZ2xlYCAoZmxvYXQgaW4gcmFk
aWFuLCBkZWZhdWx0IDApIHNldHMgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgZGVjYWwKKyAgICAg
KiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFt
IHNvdXJjZU1lc2ggZGVmaW5lcyB0aGUgbWVzaCB3aGVyZSB0aGUgZGVjYWwgbXVzdCBiZSBhcHBs
aWVkCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNy
ZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNj
ZW5lCisgICAgICogQHJldHVybnMgdGhlIGRlY2FsIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8v
ZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2RlY2FscworICAgICAqLworICAgIERlY2FsQnVpbGRl
ci5DcmVhdGVEZWNhbCA9IGZ1bmN0aW9uIChuYW1lLCBzb3VyY2VNZXNoLCBvcHRpb25zKSB7Cisg
ICAgICAgIHZhciBpbmRpY2VzID0gc291cmNlTWVzaC5nZXRJbmRpY2VzKCk7CisgICAgICAgIHZh
ciBwb3NpdGlvbnMgPSBzb3VyY2VNZXNoLmdldFZlcnRpY2VzRGF0YShfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7CisgICAg
ICAgIHZhciBub3JtYWxzID0gc291cmNlTWVzaC5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKTsKKyAg
ICAgICAgdmFyIHBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiB8fCBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAg
ICAgdmFyIG5vcm1hbCA9IG9wdGlvbnMubm9ybWFsIHx8IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVXAoKTsKKyAgICAgICAgdmFyIHNp
emUgPSBvcHRpb25zLnNpemUgfHwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5PbmUoKTsKKyAgICAgICAgdmFyIGFuZ2xlID0gb3B0aW9u
cy5hbmdsZSB8fCAwOworICAgICAgICAvLyBHZXR0aW5nIGNvcnJlY3Qgcm90YXRpb24KKyAgICAg
ICAgaWYgKCFub3JtYWwpIHsKKyAgICAgICAgICAgIHZhciB0YXJnZXQgPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAwLCAx
KTsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSBzb3VyY2VNZXNoLmdldFNjZW5lKCkuYWN0aXZl
Q2FtZXJhOworICAgICAgICAgICAgdmFyIGNhbWVyYVdvcmxkVGFyZ2V0ID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1D
b29yZGluYXRlcyh0YXJnZXQsIGNhbWVyYS5nZXRXb3JsZE1hdHJpeCgpKTsKKyAgICAgICAgICAg
IG5vcm1hbCA9IGNhbWVyYS5nbG9iYWxQb3NpdGlvbi5zdWJ0cmFjdChjYW1lcmFXb3JsZFRhcmdl
dCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHlhdyA9IC1NYXRoLmF0YW4yKG5vcm1hbC56LCBu
b3JtYWwueCkgLSBNYXRoLlBJIC8gMjsKKyAgICAgICAgdmFyIGxlbiA9IE1hdGguc3FydChub3Jt
YWwueCAqIG5vcm1hbC54ICsgbm9ybWFsLnogKiBub3JtYWwueik7CisgICAgICAgIHZhciBwaXRj
aCA9IE1hdGguYXRhbjIobm9ybWFsLnksIGxlbik7CisgICAgICAgIC8vIE1hdHJpeAorICAgICAg
ICB2YXIgZGVjYWxXb3JsZE1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5Sb3RhdGlvbllhd1BpdGNoUm9sbCh5YXcsIHBpdGNo
LCBhbmdsZSkubXVsdGlwbHkoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIk1hdHJpeCJdLlRyYW5zbGF0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBv
c2l0aW9uLnopKTsKKyAgICAgICAgdmFyIGludmVyc2VEZWNhbFdvcmxkTWF0cml4ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLkludmVy
dChkZWNhbFdvcmxkTWF0cml4KTsKKyAgICAgICAgdmFyIG1lc2hXb3JsZE1hdHJpeCA9IHNvdXJj
ZU1lc2guZ2V0V29ybGRNYXRyaXgoKTsKKyAgICAgICAgdmFyIHRyYW5zZm9ybU1hdHJpeCA9IG1l
c2hXb3JsZE1hdHJpeC5tdWx0aXBseShpbnZlcnNlRGVjYWxXb3JsZE1hdHJpeCk7CisgICAgICAg
IHZhciB2ZXJ0ZXhEYXRhID0gbmV3IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVmVydGV4RGF0YSJdKCk7CisgICAgICAgIHZlcnRleERhdGEuaW5kaWNlcyA9
IFtdOworICAgICAgICB2ZXJ0ZXhEYXRhLnBvc2l0aW9ucyA9IFtdOworICAgICAgICB2ZXJ0ZXhE
YXRhLm5vcm1hbHMgPSBbXTsKKyAgICAgICAgdmVydGV4RGF0YS51dnMgPSBbXTsKKyAgICAgICAg
dmFyIGN1cnJlbnRWZXJ0ZXhEYXRhSW5kZXggPSAwOworICAgICAgICB2YXIgZXh0cmFjdERlY2Fs
VmVjdG9yMyA9IGZ1bmN0aW9uIChpbmRleElkKSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0g
bmV3IF9NYXRoc19tYXRoX3ZlcnRleEZvcm1hdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJQb3NpdGlvbk5vcm1hbFZlcnRleCJdKCk7CisgICAgICAgICAgICBpZiAoIWluZGljZXMgfHwg
IXBvc2l0aW9ucyB8fCAhbm9ybWFscykgeworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgdmVydGV4SWQgPSBpbmRpY2VzW2luZGV4
SWRdOworICAgICAgICAgICAgcmVzdWx0LnBvc2l0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0ocG9zaXRpb25zW3ZlcnRl
eElkICogM10sIHBvc2l0aW9uc1t2ZXJ0ZXhJZCAqIDMgKyAxXSwgcG9zaXRpb25zW3ZlcnRleElk
ICogMyArIDJdKTsKKyAgICAgICAgICAgIC8vIFNlbmQgdmVjdG9yIHRvIGRlY2FsIGxvY2FsIHdv
cmxkCisgICAgICAgICAgICByZXN1bHQucG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVz
KHJlc3VsdC5wb3NpdGlvbiwgdHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgICAgIC8vIEdldCBu
b3JtYWwKKyAgICAgICAgICAgIHJlc3VsdC5ub3JtYWwgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShub3JtYWxzW3ZlcnRleElk
ICogM10sIG5vcm1hbHNbdmVydGV4SWQgKiAzICsgMV0sIG5vcm1hbHNbdmVydGV4SWQgKiAzICsg
Ml0pOworICAgICAgICAgICAgcmVzdWx0Lm5vcm1hbCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKHJlc3Vs
dC5ub3JtYWwsIHRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9OyAvLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vbXJkb29iL3RocmVl
LmpzL2Jsb2IvZWVlMjMxOTYwODgyZjZmM2I2MTEzNDA1ZjUyNDk1NjE0NTE0ODE0Ni9leGFtcGxl
cy9qcy9nZW9tZXRyaWVzL0RlY2FsR2VvbWV0cnkuanMKKyAgICAgICAgdmFyIGNsaXAgPSBmdW5j
dGlvbiAodmVydGljZXMsIGF4aXMpIHsKKyAgICAgICAgICAgIGlmICh2ZXJ0aWNlcy5sZW5ndGgg
PT09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmVydGljZXM7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXIgY2xpcFNpemUgPSAwLjUgKiBNYXRoLmFicyhfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdChzaXplLCBh
eGlzKSk7CisgICAgICAgICAgICB2YXIgY2xpcFZlcnRpY2VzID0gZnVuY3Rpb24gKHYwLCB2MSkg
eworICAgICAgICAgICAgICAgIHZhciBjbGlwRmFjdG9yID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5HZXRDbGlwRmFjdG9yKHYwLnBv
c2l0aW9uLCB2MS5wb3NpdGlvbiwgYXhpcywgY2xpcFNpemUpOworICAgICAgICAgICAgICAgIHJl
dHVybiBuZXcgX01hdGhzX21hdGhfdmVydGV4Rm9ybWF0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIlBvc2l0aW9uTm9ybWFsVmVydGV4Il0oX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5MZXJwKHYwLnBvc2l0aW9uLCB2MS5wb3Np
dGlvbiwgY2xpcEZhY3RvciksIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJWZWN0b3IzIl0uTGVycCh2MC5ub3JtYWwsIHYxLm5vcm1hbCwgY2xpcEZhY3Rv
cikpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXko
KTsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB2ZXJ0aWNlcy5sZW5n
dGg7IGluZGV4ICs9IDMpIHsKKyAgICAgICAgICAgICAgICB2YXIgdjFPdXQ7CisgICAgICAgICAg
ICAgICAgdmFyIHYyT3V0OworICAgICAgICAgICAgICAgIHZhciB2M091dDsKKyAgICAgICAgICAg
ICAgICB2YXIgdG90YWwgPSAwOworICAgICAgICAgICAgICAgIHZhciBuVjEgPSBudWxsOworICAg
ICAgICAgICAgICAgIHZhciBuVjIgPSBudWxsOworICAgICAgICAgICAgICAgIHZhciBuVjMgPSBu
dWxsOworICAgICAgICAgICAgICAgIHZhciBuVjQgPSBudWxsOworICAgICAgICAgICAgICAgIHZh
ciBkMSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0uRG90KHZlcnRpY2VzW2luZGV4XS5wb3NpdGlvbiwgYXhpcykgLSBjbGlwU2l6ZTsK
KyAgICAgICAgICAgICAgICB2YXIgZDIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdCh2ZXJ0aWNlc1tpbmRleCArIDFdLnBvc2l0
aW9uLCBheGlzKSAtIGNsaXBTaXplOworICAgICAgICAgICAgICAgIHZhciBkMyA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KHZl
cnRpY2VzW2luZGV4ICsgMl0ucG9zaXRpb24sIGF4aXMpIC0gY2xpcFNpemU7CisgICAgICAgICAg
ICAgICAgdjFPdXQgPSBkMSA+IDA7CisgICAgICAgICAgICAgICAgdjJPdXQgPSBkMiA+IDA7Cisg
ICAgICAgICAgICAgICAgdjNPdXQgPSBkMyA+IDA7CisgICAgICAgICAgICAgICAgdG90YWwgPSAo
djFPdXQgPyAxIDogMCkgKyAodjJPdXQgPyAxIDogMCkgKyAodjNPdXQgPyAxIDogMCk7CisgICAg
ICAgICAgICAgICAgc3dpdGNoICh0b3RhbCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDA6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2ZXJ0aWNlc1tpbmRleF0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godmVydGljZXNbaW5kZXggKyAxXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2ZXJ0aWNlc1tpbmRleCArIDJd
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodjFPdXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuVjEgPSB2ZXJ0aWNlc1tpbmRleCArIDFdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5WMiA9IHZlcnRpY2VzW2luZGV4ICsgMl07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgblYzID0gY2xpcFZlcnRpY2VzKHZlcnRpY2VzW2luZGV4XSwgblYxKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuVjQgPSBjbGlwVmVydGljZXModmVydGljZXNb
aW5kZXhdLCBuVjIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHYyT3V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgblYxID0g
dmVydGljZXNbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WMiA9IHZlcnRp
Y2VzW2luZGV4ICsgMl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgblYzID0gY2xpcFZl
cnRpY2VzKHZlcnRpY2VzW2luZGV4ICsgMV0sIG5WMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgblY0ID0gY2xpcFZlcnRpY2VzKHZlcnRpY2VzW2luZGV4ICsgMV0sIG5WMik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goblYzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQucHVzaChuVjIuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnB1c2goblYxLmNsb25lKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5wdXNoKG5WMi5jbG9uZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQucHVzaChuVjMuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnB1c2goblY0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2M091dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WMSA9IHZlcnRpY2VzW2lu
ZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuVjIgPSB2ZXJ0aWNlc1tpbmRleCAr
IDFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WMyA9IGNsaXBWZXJ0aWNlcyh2ZXJ0
aWNlc1tpbmRleCArIDJdLCBuVjEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WNCA9
IGNsaXBWZXJ0aWNlcyh2ZXJ0aWNlc1tpbmRleCArIDJdLCBuVjIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5WMSAmJiBuVjIgJiYgblYz
ICYmIG5WNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5WMS5j
bG9uZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuVjIuY2xv
bmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goblYzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuVjQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5WMy5jbG9uZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQucHVzaChuVjIuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2MU91dCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5WMSA9IHZlcnRpY2VzW2luZGV4XS5jbG9uZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WMiA9IGNsaXBWZXJ0aWNlcyhuVjEsIHZlcnRp
Y2VzW2luZGV4ICsgMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WMyA9IGNsaXBW
ZXJ0aWNlcyhuVjEsIHZlcnRpY2VzW2luZGV4ICsgMl0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5wdXNoKG5WMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnB1c2goblYyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChu
VjMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCF2Mk91dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5WMSA9IHZlcnRpY2Vz
W2luZGV4ICsgMV0uY2xvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuVjIgPSBj
bGlwVmVydGljZXMoblYxLCB2ZXJ0aWNlc1tpbmRleCArIDJdKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuVjMgPSBjbGlwVmVydGljZXMoblYxLCB2ZXJ0aWNlc1tpbmRleF0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5WMSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goblYyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQucHVzaChuVjMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCF2M091dCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5WMSA9IHZlcnRpY2VzW2luZGV4ICsgMl0uY2xvbmUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuVjIgPSBjbGlwVmVydGljZXMoblYxLCB2ZXJ0aWNlc1tpbmRleF0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5WMyA9IGNsaXBWZXJ0aWNlcyhuVjEsIHZlcnRpY2Vz
W2luZGV4ICsgMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5W
MSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goblYyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuVjMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH07CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBpbmRpY2VzLmxlbmd0
aDsgaW5kZXggKz0gMykgeworICAgICAgICAgICAgdmFyIGZhY2VWZXJ0aWNlcyA9IG5ldyBBcnJh
eSgpOworICAgICAgICAgICAgZmFjZVZlcnRpY2VzLnB1c2goZXh0cmFjdERlY2FsVmVjdG9yMyhp
bmRleCkpOworICAgICAgICAgICAgZmFjZVZlcnRpY2VzLnB1c2goZXh0cmFjdERlY2FsVmVjdG9y
MyhpbmRleCArIDEpKTsKKyAgICAgICAgICAgIGZhY2VWZXJ0aWNlcy5wdXNoKGV4dHJhY3REZWNh
bFZlY3RvcjMoaW5kZXggKyAyKSk7CisgICAgICAgICAgICAvLyBDbGlwCisgICAgICAgICAgICBm
YWNlVmVydGljZXMgPSBjbGlwKGZhY2VWZXJ0aWNlcywgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMSwgMCwgMCkpOworICAgICAg
ICAgICAgZmFjZVZlcnRpY2VzID0gY2xpcChmYWNlVmVydGljZXMsIG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKC0xLCAwLCAwKSk7
CisgICAgICAgICAgICBmYWNlVmVydGljZXMgPSBjbGlwKGZhY2VWZXJ0aWNlcywgbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMCwg
MSwgMCkpOworICAgICAgICAgICAgZmFjZVZlcnRpY2VzID0gY2xpcChmYWNlVmVydGljZXMsIG5l
dyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdKDAsIC0xLCAwKSk7CisgICAgICAgICAgICBmYWNlVmVydGljZXMgPSBjbGlwKGZhY2VWZXJ0
aWNlcywgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0oMCwgMCwgMSkpOworICAgICAgICAgICAgZmFjZVZlcnRpY2VzID0gY2xpcChm
YWNlVmVydGljZXMsIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVmVjdG9yMyJdKDAsIDAsIC0xKSk7CisgICAgICAgICAgICBpZiAoZmFjZVZlcnRp
Y2VzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gQWRkIFVWcyBhbmQgZ2V0IGJhY2sgdG8gd29ybGQKKyAgICAg
ICAgICAgIGZvciAodmFyIHZJbmRleCA9IDA7IHZJbmRleCA8IGZhY2VWZXJ0aWNlcy5sZW5ndGg7
IHZJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHZlcnRleCA9IGZhY2VWZXJ0aWNlc1t2
SW5kZXhdOworICAgICAgICAgICAgICAgIC8vVE9ETyBjaGVjayBmb3IgSW50MzJBcnJheSB8IFVp
bnQzMkFycmF5IHwgVWludDE2QXJyYXkKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhEYXRhLmluZGlj
ZXMucHVzaChjdXJyZW50VmVydGV4RGF0YUluZGV4KTsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXgu
cG9zaXRpb24udG9BcnJheSh2ZXJ0ZXhEYXRhLnBvc2l0aW9ucywgY3VycmVudFZlcnRleERhdGFJ
bmRleCAqIDMpOworICAgICAgICAgICAgICAgIHZlcnRleC5ub3JtYWwudG9BcnJheSh2ZXJ0ZXhE
YXRhLm5vcm1hbHMsIGN1cnJlbnRWZXJ0ZXhEYXRhSW5kZXggKiAzKTsKKyAgICAgICAgICAgICAg
ICB2ZXJ0ZXhEYXRhLnV2cy5wdXNoKDAuNSArIHZlcnRleC5wb3NpdGlvbi54IC8gc2l6ZS54KTsK
KyAgICAgICAgICAgICAgICB2ZXJ0ZXhEYXRhLnV2cy5wdXNoKDAuNSArIHZlcnRleC5wb3NpdGlv
bi55IC8gc2l6ZS55KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50VmVydGV4RGF0YUluZGV4Kys7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gUmV0dXJuIG1lc2gKKyAgICAg
ICAgdmFyIGRlY2FsID0gbmV3IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1l
c2giXShuYW1lLCBzb3VyY2VNZXNoLmdldFNjZW5lKCkpOworICAgICAgICB2ZXJ0ZXhEYXRhLmFw
cGx5VG9NZXNoKGRlY2FsKTsKKyAgICAgICAgZGVjYWwucG9zaXRpb24gPSBwb3NpdGlvbi5jbG9u
ZSgpOworICAgICAgICBkZWNhbC5yb3RhdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKHBpdGNoLCB5YXcsIGFuZ2xlKTsK
KyAgICAgICAgcmV0dXJuIGRlY2FsOworICAgIH07CisgICAgcmV0dXJuIERlY2FsQnVpbGRlcjsK
K30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL0J1aWxkZXJzL2Rpc2NC
dWlsZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL01lc2hlcy9CdWlsZGVycy9kaXNjQnVpbGRlci50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IERpc2NCdWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRp
c2NCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEaXNjQnVpbGRlcjsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tZXNoLnZlcnRleERhdGEg
Ki8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50cyIpOworCisKK19tZXNoX3ZlcnRleERhdGFf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4RGF0YSJdLkNyZWF0ZURpc2MgPSBm
dW5jdGlvbiAob3B0aW9ucykgeworICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAg
ICB2YXIgaW5kaWNlcyA9IG5ldyBBcnJheSgpOworICAgIHZhciBub3JtYWxzID0gbmV3IEFycmF5
KCk7CisgICAgdmFyIHV2cyA9IG5ldyBBcnJheSgpOworICAgIHZhciByYWRpdXMgPSBvcHRpb25z
LnJhZGl1cyB8fCAwLjU7CisgICAgdmFyIHRlc3NlbGxhdGlvbiA9IG9wdGlvbnMudGVzc2VsbGF0
aW9uIHx8IDY0OworICAgIHZhciBhcmMgPSBvcHRpb25zLmFyYyAmJiAob3B0aW9ucy5hcmMgPD0g
MCB8fCBvcHRpb25zLmFyYyA+IDEpID8gMS4wIDogb3B0aW9ucy5hcmMgfHwgMS4wOworICAgIHZh
ciBzaWRlT3JpZW50YXRpb24gPSAob3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPT09IDApID8gMCA6
IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uIHx8IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVydGV4RGF0YSJdLkRFRkFVTFRTSURFOworICAgIC8vIHBvc2l0
aW9ucyBhbmQgdXZzCisgICAgcG9zaXRpb25zLnB1c2goMCwgMCwgMCk7IC8vIGRpc2MgY2VudGVy
IGZpcnN0CisgICAgdXZzLnB1c2goMC41LCAwLjUpOworICAgIHZhciB0aGV0YSA9IE1hdGguUEkg
KiAyICogYXJjOworICAgIHZhciBzdGVwID0gdGhldGEgLyB0ZXNzZWxsYXRpb247CisgICAgZm9y
ICh2YXIgYSA9IDA7IGEgPCB0aGV0YTsgYSArPSBzdGVwKSB7CisgICAgICAgIHZhciB4ID0gTWF0
aC5jb3MoYSk7CisgICAgICAgIHZhciB5ID0gTWF0aC5zaW4oYSk7CisgICAgICAgIHZhciB1ID0g
KHggKyAxKSAvIDI7CisgICAgICAgIHZhciB2ID0gKDEgLSB5KSAvIDI7CisgICAgICAgIHBvc2l0
aW9ucy5wdXNoKHJhZGl1cyAqIHgsIHJhZGl1cyAqIHksIDApOworICAgICAgICB1dnMucHVzaCh1
LCB2KTsKKyAgICB9CisgICAgaWYgKGFyYyA9PT0gMSkgeworICAgICAgICBwb3NpdGlvbnMucHVz
aChwb3NpdGlvbnNbM10sIHBvc2l0aW9uc1s0XSwgcG9zaXRpb25zWzVdKTsgLy8gY2xvc2UgdGhl
IGNpcmNsZQorICAgICAgICB1dnMucHVzaCh1dnNbMl0sIHV2c1szXSk7CisgICAgfQorICAgIC8v
aW5kaWNlcworICAgIHZhciB2ZXJ0ZXhOYiA9IHBvc2l0aW9ucy5sZW5ndGggLyAzOworICAgIGZv
ciAodmFyIGkgPSAxOyBpIDwgdmVydGV4TmIgLSAxOyBpKyspIHsKKyAgICAgICAgaW5kaWNlcy5w
dXNoKGkgKyAxLCAwLCBpKTsKKyAgICB9CisgICAgLy8gcmVzdWx0CisgICAgX21lc2hfdmVydGV4
RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhEYXRhIl0uQ29tcHV0ZU5v
cm1hbHMocG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzKTsKKyAgICBfbWVzaF92ZXJ0ZXhEYXRh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleERhdGEiXS5fQ29tcHV0ZVNpZGVz
KHNpZGVPcmllbnRhdGlvbiwgcG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzLCB1dnMsIG9wdGlv
bnMuZnJvbnRVVnMsIG9wdGlvbnMuYmFja1VWcyk7CisgICAgdmFyIHZlcnRleERhdGEgPSBuZXcg
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhEYXRh
Il0oKTsKKyAgICB2ZXJ0ZXhEYXRhLmluZGljZXMgPSBpbmRpY2VzOworICAgIHZlcnRleERhdGEu
cG9zaXRpb25zID0gcG9zaXRpb25zOworICAgIHZlcnRleERhdGEubm9ybWFscyA9IG5vcm1hbHM7
CisgICAgdmVydGV4RGF0YS51dnMgPSB1dnM7CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9Owor
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkNyZWF0ZURpc2MgPSBm
dW5jdGlvbiAobmFtZSwgcmFkaXVzLCB0ZXNzZWxsYXRpb24sIHNjZW5lLCB1cGRhdGFibGUsIHNp
ZGVPcmllbnRhdGlvbikgeworICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVs
bDsgfQorICAgIHZhciBvcHRpb25zID0geworICAgICAgICByYWRpdXM6IHJhZGl1cywKKyAgICAg
ICAgdGVzc2VsbGF0aW9uOiB0ZXNzZWxsYXRpb24sCisgICAgICAgIHNpZGVPcmllbnRhdGlvbjog
c2lkZU9yaWVudGF0aW9uLAorICAgICAgICB1cGRhdGFibGU6IHVwZGF0YWJsZQorICAgIH07Cisg
ICAgcmV0dXJuIERpc2NCdWlsZGVyLkNyZWF0ZURpc2MobmFtZSwgb3B0aW9ucywgc2NlbmUpOwor
fTsKKy8qKgorICogQ2xhc3MgY29udGFpbmluZyBzdGF0aWMgZnVuY3Rpb25zIHRvIGhlbHAgcHJv
Y2VkdXJhbGx5IGJ1aWxkIG1lc2hlcworICovCit2YXIgRGlzY0J1aWxkZXIgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRGlzY0J1aWxkZXIoKSB7CisgICAgfQor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBwbGFuZSBwb2x5Z29uYWwgbWVzaC4gIEJ5IGRlZmF1
bHQsIHRoaXMgaXMgYSBkaXNjCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGByYWRpdXNgIHNldHMg
dGhlIHJhZGl1cyBzaXplIChmbG9hdCkgb2YgdGhlIHBvbHlnb24gKGRlZmF1bHQgMC41KQorICAg
ICAqICogVGhlIHBhcmFtZXRlciBgdGVzc2VsbGF0aW9uYCBzZXRzIHRoZSBudW1iZXIgb2YgcG9s
eWdvbiBzaWRlcyAocG9zaXRpdmUgaW50ZWdlciwgZGVmYXVsdCA2NCkuIFNvIGEgdGVzc2VsbGF0
aW9uIHZhbHVlZCB0byAzIHdpbGwgYnVpbGQgYSB0cmlhbmdsZSwgdG8gNCBhIHNxdWFyZSwgZXRj
CisgICAgICogKiBZb3UgY2FuIGNyZWF0ZSBhbiB1bmNsb3NlZCBwb2x5Z29uIHdpdGggdGhlIHBh
cmFtZXRlciBgYXJjYCAocG9zaXRpdmUgZmxvYXQsIGRlZmF1bHQgMSksIHZhbHVlZCBiZXR3ZWVu
IDAgYW5kIDEsIHdoYXQgaXMgdGhlIHJhdGlvIG9mIHRoZSBjaXJjdW1mZXJlbmNlIDogMiB4IFBJ
IHggcmF0aW8KKyAgICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRh
dGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwg
QkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICog
KiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQg
cGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5
IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJv
bnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9j
LmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9y
aWVudGF0aW9uCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRo
IHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRz
IGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAg
ICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBh
cmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAor
ICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJl
dHVybnMgdGhlIHBsYW5lIHBvbHlnb25hbCBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by9zZXRfc2hhcGVzI2Rpc2Mtb3ItcmVndWxhci1wb2x5Z29uCisg
ICAgICovCisgICAgRGlzY0J1aWxkZXIuQ3JlYXRlRGlzYyA9IGZ1bmN0aW9uIChuYW1lLCBvcHRp
b25zLCBzY2VuZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51
bGw7IH0KKyAgICAgICAgdmFyIGRpc2MgPSBuZXcgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTWVzaCJdKG5hbWUsIHNjZW5lKTsKKyAgICAgICAgb3B0aW9ucy5zaWRlT3JpZW50
YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uX0dldERl
ZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24pOworICAgICAgICBk
aXNjLl9vcmlnaW5hbEJ1aWxkZXJTaWRlT3JpZW50YXRpb24gPSBvcHRpb25zLnNpZGVPcmllbnRh
dGlvbjsKKyAgICAgICAgdmFyIHZlcnRleERhdGEgPSBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleERhdGEiXS5DcmVhdGVEaXNjKG9wdGlvbnMpOwor
ICAgICAgICB2ZXJ0ZXhEYXRhLmFwcGx5VG9NZXNoKGRpc2MsIG9wdGlvbnMudXBkYXRhYmxlKTsK
KyAgICAgICAgcmV0dXJuIGRpc2M7CisgICAgfTsKKyAgICByZXR1cm4gRGlzY0J1aWxkZXI7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy9CdWlsZGVycy9ncm91bmRC
dWlsZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vTWVzaGVzL0J1aWxkZXJzL2dyb3VuZEJ1aWxkZXIudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IEdyb3VuZEJ1aWxkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiR3JvdW5kQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gR3JvdW5kQnVpbGRlcjsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRo
cy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLmNvbG9yICovICIu
L01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
bWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9t
ZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL21lc2gudmVydGV4RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0ZXhE
YXRhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2dyb3VuZE1lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2dyb3VuZE1l
c2ggKi8gIi4vTWVzaGVzL2dyb3VuZE1lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vTWlzYy90b29scyAqLyAiLi9NaXNjL3Rvb2xzLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvZW5n
aW5lU3RvcmUgKi8gIi4vRW5naW5lcy9lbmdpbmVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC5jb25zdGFudHMg
Ki8gIi4vTWF0aHMvbWF0aC5jb25zdGFudHMudHMiKTsKKworCisKKworCisKKworCitfbWVzaF92
ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5DcmVh
dGVHcm91bmQgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgIHZhciBpbmRpY2VzID0gW107Cisg
ICAgdmFyIHBvc2l0aW9ucyA9IFtdOworICAgIHZhciBub3JtYWxzID0gW107CisgICAgdmFyIHV2
cyA9IFtdOworICAgIHZhciByb3csIGNvbDsKKyAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRo
IHx8IDE7CisgICAgdmFyIGhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0IHx8IDE7CisgICAgdmFyIHN1
YmRpdmlzaW9uc1ggPSBvcHRpb25zLnN1YmRpdmlzaW9uc1ggfHwgb3B0aW9ucy5zdWJkaXZpc2lv
bnMgfHwgMTsKKyAgICB2YXIgc3ViZGl2aXNpb25zWSA9IG9wdGlvbnMuc3ViZGl2aXNpb25zWSB8
fCBvcHRpb25zLnN1YmRpdmlzaW9ucyB8fCAxOworICAgIGZvciAocm93ID0gMDsgcm93IDw9IHN1
YmRpdmlzaW9uc1k7IHJvdysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDw9IHN1YmRp
dmlzaW9uc1g7IGNvbCsrKSB7CisgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgoY29s
ICogd2lkdGgpIC8gc3ViZGl2aXNpb25zWCAtICh3aWR0aCAvIDIuMCksIDAsICgoc3ViZGl2aXNp
b25zWSAtIHJvdykgKiBoZWlnaHQpIC8gc3ViZGl2aXNpb25zWSAtIChoZWlnaHQgLyAyLjApKTsK
KyAgICAgICAgICAgIHZhciBub3JtYWwgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAxLjAsIDApOworICAgICAgICAgICAg
cG9zaXRpb25zLnB1c2gocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7CisgICAg
ICAgICAgICBub3JtYWxzLnB1c2gobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7CisgICAg
ICAgICAgICB1dnMucHVzaChjb2wgLyBzdWJkaXZpc2lvbnNYLCAxLjAgLSByb3cgLyBzdWJkaXZp
c2lvbnNZKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IHN1YmRp
dmlzaW9uc1k7IHJvdysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgc3ViZGl2aXNp
b25zWDsgY29sKyspIHsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChjb2wgKyAxICsgKHJvdyAr
IDEpICogKHN1YmRpdmlzaW9uc1ggKyAxKSk7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goY29s
ICsgMSArIHJvdyAqIChzdWJkaXZpc2lvbnNYICsgMSkpOworICAgICAgICAgICAgaW5kaWNlcy5w
dXNoKGNvbCArIHJvdyAqIChzdWJkaXZpc2lvbnNYICsgMSkpOworICAgICAgICAgICAgaW5kaWNl
cy5wdXNoKGNvbCArIChyb3cgKyAxKSAqIChzdWJkaXZpc2lvbnNYICsgMSkpOworICAgICAgICAg
ICAgaW5kaWNlcy5wdXNoKGNvbCArIDEgKyAocm93ICsgMSkgKiAoc3ViZGl2aXNpb25zWCArIDEp
KTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChjb2wgKyByb3cgKiAoc3ViZGl2aXNpb25zWCAr
IDEpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBSZXN1bHQKKyAgICB2YXIgdmVydGV4RGF0
YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
cnRleERhdGEiXSgpOworICAgIHZlcnRleERhdGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgdmVy
dGV4RGF0YS5wb3NpdGlvbnMgPSBwb3NpdGlvbnM7CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0g
bm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRhLnV2cyA9IHV2czsKKyAgICByZXR1cm4gdmVydGV4RGF0
YTsKK307CitfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
cnRleERhdGEiXS5DcmVhdGVUaWxlZEdyb3VuZCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAg
dmFyIHhtaW4gPSAob3B0aW9ucy54bWluICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy54bWluICE9
PSBudWxsKSA/IG9wdGlvbnMueG1pbiA6IC0xLjA7CisgICAgdmFyIHptaW4gPSAob3B0aW9ucy56
bWluICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy56bWluICE9PSBudWxsKSA/IG9wdGlvbnMuem1p
biA6IC0xLjA7CisgICAgdmFyIHhtYXggPSAob3B0aW9ucy54bWF4ICE9PSB1bmRlZmluZWQgJiYg
b3B0aW9ucy54bWF4ICE9PSBudWxsKSA/IG9wdGlvbnMueG1heCA6IDEuMDsKKyAgICB2YXIgem1h
eCA9IChvcHRpb25zLnptYXggIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnptYXggIT09IG51bGwp
ID8gb3B0aW9ucy56bWF4IDogMS4wOworICAgIHZhciBzdWJkaXZpc2lvbnMgPSBvcHRpb25zLnN1
YmRpdmlzaW9ucyB8fCB7IHc6IDEsIGg6IDEgfTsKKyAgICB2YXIgcHJlY2lzaW9uID0gb3B0aW9u
cy5wcmVjaXNpb24gfHwgeyB3OiAxLCBoOiAxIH07CisgICAgdmFyIGluZGljZXMgPSBuZXcgQXJy
YXkoKTsKKyAgICB2YXIgcG9zaXRpb25zID0gbmV3IEFycmF5KCk7CisgICAgdmFyIG5vcm1hbHMg
PSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgdXZzID0gbmV3IEFycmF5KCk7CisgICAgdmFyIHJvdywg
Y29sLCB0aWxlUm93LCB0aWxlQ29sOworICAgIHN1YmRpdmlzaW9ucy5oID0gKHN1YmRpdmlzaW9u
cy5oIDwgMSkgPyAxIDogc3ViZGl2aXNpb25zLmg7CisgICAgc3ViZGl2aXNpb25zLncgPSAoc3Vi
ZGl2aXNpb25zLncgPCAxKSA/IDEgOiBzdWJkaXZpc2lvbnMudzsKKyAgICBwcmVjaXNpb24udyA9
IChwcmVjaXNpb24udyA8IDEpID8gMSA6IHByZWNpc2lvbi53OworICAgIHByZWNpc2lvbi5oID0g
KHByZWNpc2lvbi5oIDwgMSkgPyAxIDogcHJlY2lzaW9uLmg7CisgICAgdmFyIHRpbGVTaXplID0g
eworICAgICAgICAndyc6ICh4bWF4IC0geG1pbikgLyBzdWJkaXZpc2lvbnMudywKKyAgICAgICAg
J2gnOiAoem1heCAtIHptaW4pIC8gc3ViZGl2aXNpb25zLmgKKyAgICB9OworICAgIGZ1bmN0aW9u
IGFwcGx5VGlsZSh4VGlsZU1pbiwgelRpbGVNaW4sIHhUaWxlTWF4LCB6VGlsZU1heCkgeworICAg
ICAgICAvLyBJbmRpY2VzCisgICAgICAgIHZhciBiYXNlID0gcG9zaXRpb25zLmxlbmd0aCAvIDM7
CisgICAgICAgIHZhciByb3dMZW5ndGggPSBwcmVjaXNpb24udyArIDE7CisgICAgICAgIGZvciAo
cm93ID0gMDsgcm93IDwgcHJlY2lzaW9uLmg7IHJvdysrKSB7CisgICAgICAgICAgICBmb3IgKGNv
bCA9IDA7IGNvbCA8IHByZWNpc2lvbi53OyBjb2wrKykgeworICAgICAgICAgICAgICAgIHZhciBz
cXVhcmUgPSBbCisgICAgICAgICAgICAgICAgICAgIGJhc2UgKyBjb2wgKyByb3cgKiByb3dMZW5n
dGgsCisgICAgICAgICAgICAgICAgICAgIGJhc2UgKyAoY29sICsgMSkgKyByb3cgKiByb3dMZW5n
dGgsCisgICAgICAgICAgICAgICAgICAgIGJhc2UgKyAoY29sICsgMSkgKyAocm93ICsgMSkgKiBy
b3dMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGJhc2UgKyBjb2wgKyAocm93ICsgMSkgKiBy
b3dMZW5ndGgKKyAgICAgICAgICAgICAgICBdOworICAgICAgICAgICAgICAgIGluZGljZXMucHVz
aChzcXVhcmVbMV0pOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChzcXVhcmVbMl0pOwor
ICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChzcXVhcmVbM10pOworICAgICAgICAgICAgICAg
IGluZGljZXMucHVzaChzcXVhcmVbMF0pOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChz
cXVhcmVbMV0pOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChzcXVhcmVbM10pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFBvc2l0aW9uLCBub3JtYWxzIGFuZCB1
dnMKKyAgICAgICAgdmFyIHBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHZhciBub3JtYWwg
PSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXSgwLCAxLjAsIDApOworICAgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8PSBwcmVjaXNp
b24uaDsgcm93KyspIHsKKyAgICAgICAgICAgIHBvc2l0aW9uLnogPSAocm93ICogKHpUaWxlTWF4
IC0gelRpbGVNaW4pKSAvIHByZWNpc2lvbi5oICsgelRpbGVNaW47CisgICAgICAgICAgICBmb3Ig
KGNvbCA9IDA7IGNvbCA8PSBwcmVjaXNpb24udzsgY29sKyspIHsKKyAgICAgICAgICAgICAgICBw
b3NpdGlvbi54ID0gKGNvbCAqICh4VGlsZU1heCAtIHhUaWxlTWluKSkgLyBwcmVjaXNpb24udyAr
IHhUaWxlTWluOworICAgICAgICAgICAgICAgIHBvc2l0aW9uLnkgPSAwOworICAgICAgICAgICAg
ICAgIHBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopOwor
ICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaChub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56
KTsKKyAgICAgICAgICAgICAgICB1dnMucHVzaChjb2wgLyBwcmVjaXNpb24udywgcm93IC8gcHJl
Y2lzaW9uLmgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZvciAodGls
ZVJvdyA9IDA7IHRpbGVSb3cgPCBzdWJkaXZpc2lvbnMuaDsgdGlsZVJvdysrKSB7CisgICAgICAg
IGZvciAodGlsZUNvbCA9IDA7IHRpbGVDb2wgPCBzdWJkaXZpc2lvbnMudzsgdGlsZUNvbCsrKSB7
CisgICAgICAgICAgICBhcHBseVRpbGUoeG1pbiArIHRpbGVDb2wgKiB0aWxlU2l6ZS53LCB6bWlu
ICsgdGlsZVJvdyAqIHRpbGVTaXplLmgsIHhtaW4gKyAodGlsZUNvbCArIDEpICogdGlsZVNpemUu
dywgem1pbiArICh0aWxlUm93ICsgMSkgKiB0aWxlU2l6ZS5oKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAvLyBSZXN1bHQKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXSgpOworICAgIHZlcnRl
eERhdGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgdmVydGV4RGF0YS5wb3NpdGlvbnMgPSBwb3Np
dGlvbnM7CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRh
LnV2cyA9IHV2czsKKyAgICByZXR1cm4gdmVydGV4RGF0YTsKK307CitfbWVzaF92ZXJ0ZXhEYXRh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5DcmVhdGVHcm91bmRG
cm9tSGVpZ2h0TWFwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICB2YXIgaW5kaWNlcyA9IFtd
OworICAgIHZhciBwb3NpdGlvbnMgPSBbXTsKKyAgICB2YXIgbm9ybWFscyA9IFtdOworICAgIHZh
ciB1dnMgPSBbXTsKKyAgICB2YXIgcm93LCBjb2w7CisgICAgdmFyIGZpbHRlciA9IG9wdGlvbnMu
Y29sb3JGaWx0ZXIgfHwgbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIkNvbG9yMyJdKDAuMywgMC41OSwgMC4xMSk7CisgICAgdmFyIGFscGhhRmlsdGVy
ID0gb3B0aW9ucy5hbHBoYUZpbHRlciB8fCAwLjA7CisgICAgdmFyIGludmVydCA9IGZhbHNlOwor
ICAgIGlmIChvcHRpb25zLm1pbkhlaWdodCA+IG9wdGlvbnMubWF4SGVpZ2h0KSB7CisgICAgICAg
IGludmVydCA9IHRydWU7CisgICAgICAgIHZhciB0ZW1wID0gb3B0aW9ucy5tYXhIZWlnaHQ7Cisg
ICAgICAgIG9wdGlvbnMubWF4SGVpZ2h0ID0gb3B0aW9ucy5taW5IZWlnaHQ7CisgICAgICAgIG9w
dGlvbnMubWluSGVpZ2h0ID0gdGVtcDsKKyAgICB9CisgICAgLy8gVmVydGljZXMKKyAgICBmb3Ig
KHJvdyA9IDA7IHJvdyA8PSBvcHRpb25zLnN1YmRpdmlzaW9uczsgcm93KyspIHsKKyAgICAgICAg
Zm9yIChjb2wgPSAwOyBjb2wgPD0gb3B0aW9ucy5zdWJkaXZpc2lvbnM7IGNvbCsrKSB7CisgICAg
ICAgICAgICB2YXIgcG9zaXRpb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgoY29sICogb3B0aW9ucy53aWR0aCkgLyBvcHRp
b25zLnN1YmRpdmlzaW9ucyAtIChvcHRpb25zLndpZHRoIC8gMi4wKSwgMCwgKChvcHRpb25zLnN1
YmRpdmlzaW9ucyAtIHJvdykgKiBvcHRpb25zLmhlaWdodCkgLyBvcHRpb25zLnN1YmRpdmlzaW9u
cyAtIChvcHRpb25zLmhlaWdodCAvIDIuMCkpOworICAgICAgICAgICAgLy8gQ29tcHV0ZSBoZWln
aHQKKyAgICAgICAgICAgIHZhciBoZWlnaHRNYXBYID0gKCgocG9zaXRpb24ueCArIG9wdGlvbnMu
d2lkdGggLyAyKSAvIG9wdGlvbnMud2lkdGgpICogKG9wdGlvbnMuYnVmZmVyV2lkdGggLSAxKSkg
fCAwOworICAgICAgICAgICAgdmFyIGhlaWdodE1hcFkgPSAoKDEuMCAtIChwb3NpdGlvbi56ICsg
b3B0aW9ucy5oZWlnaHQgLyAyKSAvIG9wdGlvbnMuaGVpZ2h0KSAqIChvcHRpb25zLmJ1ZmZlckhl
aWdodCAtIDEpKSB8IDA7CisgICAgICAgICAgICB2YXIgcG9zID0gKGhlaWdodE1hcFggKyBoZWln
aHRNYXBZICogb3B0aW9ucy5idWZmZXJXaWR0aCkgKiA0OworICAgICAgICAgICAgdmFyIHIgPSBv
cHRpb25zLmJ1ZmZlcltwb3NdIC8gMjU1LjA7CisgICAgICAgICAgICB2YXIgZyA9IG9wdGlvbnMu
YnVmZmVyW3BvcyArIDFdIC8gMjU1LjA7CisgICAgICAgICAgICB2YXIgYiA9IG9wdGlvbnMuYnVm
ZmVyW3BvcyArIDJdIC8gMjU1LjA7CisgICAgICAgICAgICB2YXIgYSA9IG9wdGlvbnMuYnVmZmVy
W3BvcyArIDNdIC8gMjU1LjA7CisgICAgICAgICAgICBpZiAoaW52ZXJ0KSB7CisgICAgICAgICAg
ICAgICAgciA9IDEuMCAtIHI7CisgICAgICAgICAgICAgICAgZyA9IDEuMCAtIGc7CisgICAgICAg
ICAgICAgICAgYiA9IDEuMCAtIGI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgZ3Jh
ZGllbnQgPSByICogZmlsdGVyLnIgKyBnICogZmlsdGVyLmcgKyBiICogZmlsdGVyLmI7CisgICAg
ICAgICAgICAvLyBJZiBvdXIgYWxwaGEgY2hhbm5lbCBpcyBub3Qgd2l0aGluIG91ciBmaWx0ZXIg
dGhlbiB3ZSB3aWxsIGFzc2lnbiBhICdzcGVjaWFsJyBoZWlnaHQKKyAgICAgICAgICAgIC8vIFRo
ZW4gd2hlbiBidWlsZGluZyB0aGUgaW5kaWNlcywgd2Ugd2lsbCBpZ25vcmUgYW55IHZlcnRleCB0
aGF0IGlzIHVzaW5nIHRoZSBzcGVjaWFsIGhlaWdodAorICAgICAgICAgICAgaWYgKGEgPj0gYWxw
aGFGaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbi55ID0gb3B0aW9ucy5taW5IZWln
aHQgKyAob3B0aW9ucy5tYXhIZWlnaHQgLSBvcHRpb25zLm1pbkhlaWdodCkgKiBncmFkaWVudDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBvc2l0
aW9uLnkgPSBvcHRpb25zLm1pbkhlaWdodCAtIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJFcHNpbG9uIl07IC8vIFdlIGNhbid0IGhhdmUgYSBoZWln
aHQgYmVsb3cgbWluSGVpZ2h0LCBub3JtYWxseS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC8vIEFkZCAgdmVydGV4CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChwb3NpdGlvbi54LCBw
b3NpdGlvbi55LCBwb3NpdGlvbi56KTsKKyAgICAgICAgICAgIG5vcm1hbHMucHVzaCgwLCAwLCAw
KTsKKyAgICAgICAgICAgIHV2cy5wdXNoKGNvbCAvIG9wdGlvbnMuc3ViZGl2aXNpb25zLCAxLjAg
LSByb3cgLyBvcHRpb25zLnN1YmRpdmlzaW9ucyk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8g
SW5kaWNlcworICAgIGZvciAocm93ID0gMDsgcm93IDwgb3B0aW9ucy5zdWJkaXZpc2lvbnM7IHJv
dysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgb3B0aW9ucy5zdWJkaXZpc2lvbnM7
IGNvbCsrKSB7CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgSW5kaWNlcworICAgICAgICAgICAg
dmFyIGlkeDEgPSAoY29sICsgMSArIChyb3cgKyAxKSAqIChvcHRpb25zLnN1YmRpdmlzaW9ucyAr
IDEpKTsKKyAgICAgICAgICAgIHZhciBpZHgyID0gKGNvbCArIDEgKyByb3cgKiAob3B0aW9ucy5z
dWJkaXZpc2lvbnMgKyAxKSk7CisgICAgICAgICAgICB2YXIgaWR4MyA9IChjb2wgKyByb3cgKiAo
b3B0aW9ucy5zdWJkaXZpc2lvbnMgKyAxKSk7CisgICAgICAgICAgICB2YXIgaWR4NCA9IChjb2wg
KyAocm93ICsgMSkgKiAob3B0aW9ucy5zdWJkaXZpc2lvbnMgKyAxKSk7CisgICAgICAgICAgICAv
LyBDaGVjayB0aGF0IGFsbCBpbmRpY2VzIGFyZSB2aXNpYmxlIChiYXNlZCBvbiBvdXIgc3BlY2lh
bCBoZWlnaHQpCisgICAgICAgICAgICAvLyBPbmx5IGRpc3BsYXkgdGhlIHZlcnRleCBpZiBhbGwg
SW5kaWNlcyBhcmUgdmlzaWJsZQorICAgICAgICAgICAgLy8gUG9zaXRpb25zIGFyZSBzdG9yZWQg
eCx5LHogZm9yIGVhY2ggdmVydGV4LCBoZW5jZSB0aGUgKiAzIGFuZCArIDEgZm9yIGhlaWdodAor
ICAgICAgICAgICAgdmFyIGlzVmlzaWJsZUlkeDEgPSBwb3NpdGlvbnNbaWR4MSAqIDMgKyAxXSA+
PSBvcHRpb25zLm1pbkhlaWdodDsKKyAgICAgICAgICAgIHZhciBpc1Zpc2libGVJZHgyID0gcG9z
aXRpb25zW2lkeDIgKiAzICsgMV0gPj0gb3B0aW9ucy5taW5IZWlnaHQ7CisgICAgICAgICAgICB2
YXIgaXNWaXNpYmxlSWR4MyA9IHBvc2l0aW9uc1tpZHgzICogMyArIDFdID49IG9wdGlvbnMubWlu
SGVpZ2h0OworICAgICAgICAgICAgaWYgKGlzVmlzaWJsZUlkeDEgJiYgaXNWaXNpYmxlSWR4MiAm
JiBpc1Zpc2libGVJZHgzKSB7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGlkeDEpOwor
ICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChpZHgyKTsKKyAgICAgICAgICAgICAgICBpbmRp
Y2VzLnB1c2goaWR4Myk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgaXNWaXNpYmxl
SWR4NCA9IHBvc2l0aW9uc1tpZHg0ICogMyArIDFdID49IG9wdGlvbnMubWluSGVpZ2h0OworICAg
ICAgICAgICAgaWYgKGlzVmlzaWJsZUlkeDQgJiYgaXNWaXNpYmxlSWR4MSAmJiBpc1Zpc2libGVJ
ZHgzKSB7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGlkeDQpOworICAgICAgICAgICAg
ICAgIGluZGljZXMucHVzaChpZHgxKTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goaWR4
Myk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gTm9ybWFscworICAg
IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0
YSJdLkNvbXB1dGVOb3JtYWxzKHBvc2l0aW9ucywgaW5kaWNlcywgbm9ybWFscyk7CisgICAgLy8g
UmVzdWx0CisgICAgdmFyIHZlcnRleERhdGEgPSBuZXcgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAgICB2ZXJ0ZXhEYXRhLmlu
ZGljZXMgPSBpbmRpY2VzOworICAgIHZlcnRleERhdGEucG9zaXRpb25zID0gcG9zaXRpb25zOwor
ICAgIHZlcnRleERhdGEubm9ybWFscyA9IG5vcm1hbHM7CisgICAgdmVydGV4RGF0YS51dnMgPSB1
dnM7CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siTWVzaCJdLkNyZWF0ZUdyb3VuZCA9IGZ1bmN0aW9uIChuYW1lLCB3aWR0aCwg
aGVpZ2h0LCBzdWJkaXZpc2lvbnMsIHNjZW5lLCB1cGRhdGFibGUpIHsKKyAgICB2YXIgb3B0aW9u
cyA9IHsKKyAgICAgICAgd2lkdGg6IHdpZHRoLAorICAgICAgICBoZWlnaHQ6IGhlaWdodCwKKyAg
ICAgICAgc3ViZGl2aXNpb25zOiBzdWJkaXZpc2lvbnMsCisgICAgICAgIHVwZGF0YWJsZTogdXBk
YXRhYmxlCisgICAgfTsKKyAgICByZXR1cm4gR3JvdW5kQnVpbGRlci5DcmVhdGVHcm91bmQobmFt
ZSwgb3B0aW9ucywgc2NlbmUpOworfTsKK19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIk1lc2giXS5DcmVhdGVUaWxlZEdyb3VuZCA9IGZ1bmN0aW9uIChuYW1lLCB4bWluLCB6bWlu
LCB4bWF4LCB6bWF4LCBzdWJkaXZpc2lvbnMsIHByZWNpc2lvbiwgc2NlbmUsIHVwZGF0YWJsZSkg
eworICAgIHZhciBvcHRpb25zID0geworICAgICAgICB4bWluOiB4bWluLAorICAgICAgICB6bWlu
OiB6bWluLAorICAgICAgICB4bWF4OiB4bWF4LAorICAgICAgICB6bWF4OiB6bWF4LAorICAgICAg
ICBzdWJkaXZpc2lvbnM6IHN1YmRpdmlzaW9ucywKKyAgICAgICAgcHJlY2lzaW9uOiBwcmVjaXNp
b24sCisgICAgICAgIHVwZGF0YWJsZTogdXBkYXRhYmxlCisgICAgfTsKKyAgICByZXR1cm4gR3Jv
dW5kQnVpbGRlci5DcmVhdGVUaWxlZEdyb3VuZChuYW1lLCBvcHRpb25zLCBzY2VuZSk7Cit9Owor
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdLkNyZWF0ZUdyb3VuZEZy
b21IZWlnaHRNYXAgPSBmdW5jdGlvbiAobmFtZSwgdXJsLCB3aWR0aCwgaGVpZ2h0LCBzdWJkaXZp
c2lvbnMsIG1pbkhlaWdodCwgbWF4SGVpZ2h0LCBzY2VuZSwgdXBkYXRhYmxlLCBvblJlYWR5LCBh
bHBoYUZpbHRlcikgeworICAgIHZhciBvcHRpb25zID0geworICAgICAgICB3aWR0aDogd2lkdGgs
CisgICAgICAgIGhlaWdodDogaGVpZ2h0LAorICAgICAgICBzdWJkaXZpc2lvbnM6IHN1YmRpdmlz
aW9ucywKKyAgICAgICAgbWluSGVpZ2h0OiBtaW5IZWlnaHQsCisgICAgICAgIG1heEhlaWdodDog
bWF4SGVpZ2h0LAorICAgICAgICB1cGRhdGFibGU6IHVwZGF0YWJsZSwKKyAgICAgICAgb25SZWFk
eTogb25SZWFkeSwKKyAgICAgICAgYWxwaGFGaWx0ZXI6IGFscGhhRmlsdGVyCisgICAgfTsKKyAg
ICByZXR1cm4gR3JvdW5kQnVpbGRlci5DcmVhdGVHcm91bmRGcm9tSGVpZ2h0TWFwKG5hbWUsIHVy
bCwgb3B0aW9ucywgc2NlbmUpOworfTsKKy8qKgorICogQ2xhc3MgY29udGFpbmluZyBzdGF0aWMg
ZnVuY3Rpb25zIHRvIGhlbHAgcHJvY2VkdXJhbGx5IGJ1aWxkIG1lc2hlcworICovCit2YXIgR3Jv
dW5kQnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBH
cm91bmRCdWlsZGVyKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgZ3JvdW5k
IG1lc2gKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXJzIGB3aWR0aGAgYW5kIGBoZWlnaHRgIChmbG9h
dHMsIGRlZmF1bHQgMSkgc2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHNpemVzIG9mIHRoZSBncm91
bmQKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHN1YmRpdmlzaW9uc2AgKHBvc2l0aXZlIGludGVn
ZXIpIHNldHMgdGhlIG51bWJlciBvZiBzdWJkaXZpc2lvbnMgcGVyIHNpZGUKKyAgICAgKiAqIFRo
ZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVy
IGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMg
c3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmlu
ZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRo
ZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRl
ZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgZ3JvdW5kIG1lc2gK
KyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3NldF9zaGFwZXMj
Z3JvdW5kCisgICAgICovCisgICAgR3JvdW5kQnVpbGRlci5DcmVhdGVHcm91bmQgPSBmdW5jdGlv
biAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgdmFyIGdyb3VuZCA9IG5ldyBfZ3Jv
dW5kTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJHcm91bmRNZXNoIl0obmFtZSwg
c2NlbmUpOworICAgICAgICBncm91bmQuX3NldFJlYWR5KGZhbHNlKTsKKyAgICAgICAgZ3JvdW5k
Ll9zdWJkaXZpc2lvbnNYID0gb3B0aW9ucy5zdWJkaXZpc2lvbnNYIHx8IG9wdGlvbnMuc3ViZGl2
aXNpb25zIHx8IDE7CisgICAgICAgIGdyb3VuZC5fc3ViZGl2aXNpb25zWSA9IG9wdGlvbnMuc3Vi
ZGl2aXNpb25zWSB8fCBvcHRpb25zLnN1YmRpdmlzaW9ucyB8fCAxOworICAgICAgICBncm91bmQu
X3dpZHRoID0gb3B0aW9ucy53aWR0aCB8fCAxOworICAgICAgICBncm91bmQuX2hlaWdodCA9IG9w
dGlvbnMuaGVpZ2h0IHx8IDE7CisgICAgICAgIGdyb3VuZC5fbWF4WCA9IGdyb3VuZC5fd2lkdGgg
LyAyOworICAgICAgICBncm91bmQuX21heFogPSBncm91bmQuX2hlaWdodCAvIDI7CisgICAgICAg
IGdyb3VuZC5fbWluWCA9IC1ncm91bmQuX21heFg7CisgICAgICAgIGdyb3VuZC5fbWluWiA9IC1n
cm91bmQuX21heFo7CisgICAgICAgIHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4RGF0YV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlR3JvdW5kKG9w
dGlvbnMpOworICAgICAgICB2ZXJ0ZXhEYXRhLmFwcGx5VG9NZXNoKGdyb3VuZCwgb3B0aW9ucy51
cGRhdGFibGUpOworICAgICAgICBncm91bmQuX3NldFJlYWR5KHRydWUpOworICAgICAgICByZXR1
cm4gZ3JvdW5kOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHRpbGVkIGdyb3Vu
ZCBtZXNoCisgICAgICogKiBUaGUgcGFyYW1ldGVycyBgeG1pbmAgYW5kIGB4bWF4YCAoZmxvYXRz
LCBkZWZhdWx0IC0xIGFuZCAxKSBzZXQgdGhlIGdyb3VuZCBtaW5pbXVtIGFuZCBtYXhpbXVtIFgg
Y29vcmRpbmF0ZXMKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXJzIGB6bWluYCBhbmQgYHptYXhgIChm
bG9hdHMsIGRlZmF1bHQgLTEgYW5kIDEpIHNldCB0aGUgZ3JvdW5kIG1pbmltdW0gYW5kIG1heGlt
dW0gWiBjb29yZGluYXRlcworICAgICAqICogVGhlIHBhcmFtZXRlciBgc3ViZGl2aXNpb25zYCBp
cyBhIGphdmFzY3JpcHQgb2JqZWN0IGB7dzogcG9zaXRpdmUgaW50ZWdlciwgaDogcG9zaXRpdmUg
aW50ZWdlcn1gIChkZWZhdWx0IGB7dzogNiwgaDogNn1gKS4gYHdgIGFuZCBgaGAgYXJlIHRoZSBu
dW1iZXJzIG9mIHN1YmRpdmlzaW9ucyBvbiB0aGUgZ3JvdW5kIHdpZHRoIGFuZCBoZWlnaHQuIEVh
Y2ggc3ViZGl2aXNpb24gaXMgY2FsbGVkIGEgdGlsZQorICAgICAqICogVGhlIHBhcmFtZXRlciBg
cHJlY2lzaW9uYCBpcyBhIGphdmFzY3JpcHQgb2JqZWN0IGB7dzogcG9zaXRpdmUgaW50ZWdlciwg
aDogcG9zaXRpdmUgaW50ZWdlcn1gIChkZWZhdWx0IGB7dzogMiwgaDogMn1gKS4gYHdgIGFuZCBg
aGAgYXJlIHRoZSBudW1iZXJzIG9mIHN1YmRpdmlzaW9ucyBvbiB0aGUgZ3JvdW5kIHdpZHRoIGFu
ZCBoZWlnaHQgb2YgZWFjaCB0aWxlCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVw
ZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBm
YWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNl
IGNyZWF0ZWQuCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVz
aAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVh
dGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2Vu
ZQorICAgICAqIEByZXR1cm5zIHRoZSB0aWxlZCBncm91bmQgbWVzaAorICAgICAqIEBzZWUgaHR0
cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vc2V0X3NoYXBlcyN0aWxlZC1ncm91bmQKKyAg
ICAgKi8KKyAgICBHcm91bmRCdWlsZGVyLkNyZWF0ZVRpbGVkR3JvdW5kID0gZnVuY3Rpb24gKG5h
bWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNj
ZW5lID0gbnVsbDsgfQorICAgICAgICB2YXIgdGlsZWRHcm91bmQgPSBuZXcgX21lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdKG5hbWUsIHNjZW5lKTsKKyAgICAgICAgdmFy
IHZlcnRleERhdGEgPSBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlZlcnRleERhdGEiXS5DcmVhdGVUaWxlZEdyb3VuZChvcHRpb25zKTsKKyAgICAgICAgdmVy
dGV4RGF0YS5hcHBseVRvTWVzaCh0aWxlZEdyb3VuZCwgb3B0aW9ucy51cGRhdGFibGUpOworICAg
ICAgICByZXR1cm4gdGlsZWRHcm91bmQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgZ3JvdW5kIG1lc2ggZnJvbSBhIGhlaWdodCBtYXAKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIg
YHVybGAgc2V0cyB0aGUgVVJMIG9mIHRoZSBoZWlnaHQgbWFwIGltYWdlIHJlc291cmNlLgorICAg
ICAqICogVGhlIHBhcmFtZXRlcnMgYHdpZHRoYCBhbmQgYGhlaWdodGAgKHBvc2l0aXZlIGZsb2F0
cywgZGVmYXVsdCAxMCkgc2V0IHRoZSBncm91bmQgd2lkdGggYW5kIGhlaWdodCBzaXplcy4KKyAg
ICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHN1YmRpdmlzaW9uc2AgKHBvc2l0aXZlIGludGVnZXIsIGRl
ZmF1bHQgMSkgc2V0cyB0aGUgbnVtYmVyIG9mIHN1YmRpdmlzaW9uIHBlciBzaWRlLgorICAgICAq
ICogVGhlIHBhcmFtZXRlciBgbWluSGVpZ2h0YCAoZmxvYXQsIGRlZmF1bHQgMCkgaXMgdGhlIG1p
bmltdW0gYWx0aXR1ZGUgb24gdGhlIGdyb3VuZC4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYG1h
eEhlaWdodGAgKGZsb2F0LCBkZWZhdWx0IDEpIGlzIHRoZSBtYXhpbXVtIGFsdGl0dWRlIG9uIHRo
ZSBncm91bmQuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBjb2xvckZpbHRlcmAgKG9wdGlvbmFs
IENvbG9yMywgZGVmYXVsdCAoMC4zLCAwLjU5LCAwLjExKSApIGlzIHRoZSBmaWx0ZXIgdG8gYXBw
bHkgdG8gdGhlIGltYWdlIHBpeGVsIGNvbG9ycyB0byBjb21wdXRlIHRoZSBoZWlnaHQuCisgICAg
ICogKiBUaGUgcGFyYW1ldGVyIGBvblJlYWR5YCBpcyBhIGphdmFzY3JpcHQgY2FsbGJhY2sgZnVu
Y3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCAgb25jZSB0aGUgbWVzaCBpcyBqdXN0IGJ1aWx0ICh0
aGUgaGVpZ2h0IG1hcCBkb3dubG9hZCBjYW4gbGFzdCBzb21lIHRpbWUpLgorICAgICAqICogVGhl
IHBhcmFtZXRlciBgYWxwaGFGaWx0ZXJgIHdpbGwgZmlsdGVyIGFueSBkYXRhIHdoZXJlIHRoZSBh
bHBoYSBjaGFubmVsIGlzIGJlbG93IHRoaXMgdmFsdWUsIGRlZmF1bHRzIDAgKGFsbCBkYXRhIHZp
c2libGUpCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRo
ZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGlu
dGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQuCisgICAg
ICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJh
bSB1cmwgZGVmaW5lcyB0aGUgdXJsIHRvIHRoZSBoZWlnaHQgbWFwCisgICAgICogQHBhcmFtIG9w
dGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAq
IEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMg
dGhlIGdyb3VuZCBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2Jh
Ynlsb24xMDEvaGVpZ2h0X21hcAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNv
bS9ob3dfdG8vc2V0X3NoYXBlcyNncm91bmQtZnJvbS1hLWhlaWdodC1tYXAKKyAgICAgKi8KKyAg
ICBHcm91bmRCdWlsZGVyLkNyZWF0ZUdyb3VuZEZyb21IZWlnaHRNYXAgPSBmdW5jdGlvbiAobmFt
ZSwgdXJsLCBvcHRpb25zLCBzY2VuZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkg
eyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCB8fCAx
MC4wOworICAgICAgICB2YXIgaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgMTAuMDsKKyAgICAg
ICAgdmFyIHN1YmRpdmlzaW9ucyA9IG9wdGlvbnMuc3ViZGl2aXNpb25zIHx8IDEgfCAwOworICAg
ICAgICB2YXIgbWluSGVpZ2h0ID0gb3B0aW9ucy5taW5IZWlnaHQgfHwgMC4wOworICAgICAgICB2
YXIgbWF4SGVpZ2h0ID0gb3B0aW9ucy5tYXhIZWlnaHQgfHwgMS4wOworICAgICAgICB2YXIgZmls
dGVyID0gb3B0aW9ucy5jb2xvckZpbHRlciB8fCBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3IzIl0oMC4zLCAwLjU5LCAwLjExKTsKKyAgICAg
ICAgdmFyIGFscGhhRmlsdGVyID0gb3B0aW9ucy5hbHBoYUZpbHRlciB8fCAwLjA7CisgICAgICAg
IHZhciB1cGRhdGFibGUgPSBvcHRpb25zLnVwZGF0YWJsZTsKKyAgICAgICAgdmFyIG9uUmVhZHkg
PSBvcHRpb25zLm9uUmVhZHk7CisgICAgICAgIHNjZW5lID0gc2NlbmUgfHwgX0VuZ2luZXNfZW5n
aW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRW5naW5lU3RvcmUiXS5MYXN0
Q3JlYXRlZFNjZW5lOworICAgICAgICB2YXIgZ3JvdW5kID0gbmV3IF9ncm91bmRNZXNoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkdyb3VuZE1lc2giXShuYW1lLCBzY2VuZSk7CisgICAg
ICAgIGdyb3VuZC5fc3ViZGl2aXNpb25zWCA9IHN1YmRpdmlzaW9uczsKKyAgICAgICAgZ3JvdW5k
Ll9zdWJkaXZpc2lvbnNZID0gc3ViZGl2aXNpb25zOworICAgICAgICBncm91bmQuX3dpZHRoID0g
d2lkdGg7CisgICAgICAgIGdyb3VuZC5faGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBncm91bmQu
X21heFggPSBncm91bmQuX3dpZHRoIC8gMi4wOworICAgICAgICBncm91bmQuX21heFogPSBncm91
bmQuX2hlaWdodCAvIDIuMDsKKyAgICAgICAgZ3JvdW5kLl9taW5YID0gLWdyb3VuZC5fbWF4WDsK
KyAgICAgICAgZ3JvdW5kLl9taW5aID0gLWdyb3VuZC5fbWF4WjsKKyAgICAgICAgZ3JvdW5kLl9z
ZXRSZWFkeShmYWxzZSk7CisgICAgICAgIHZhciBvbmxvYWQgPSBmdW5jdGlvbiAoaW1nKSB7Cisg
ICAgICAgICAgICAvLyBHZXR0aW5nIGhlaWdodCBtYXAgZGF0YQorICAgICAgICAgICAgdmFyIGNh
bnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOworICAgICAgICAgICAgdmFy
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICAgICAgICAgIGlmICghY29u
dGV4dCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGdldCAy
ZCBjb250ZXh0IGZvciBDcmVhdGVHcm91bmRGcm9tSGVpZ2h0TWFwIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoc2NlbmUuaXNEaXNwb3NlZCkgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBidWZmZXJXaWR0aCA9IGltZy53
aWR0aDsKKyAgICAgICAgICAgIHZhciBidWZmZXJIZWlnaHQgPSBpbWcuaGVpZ2h0OworICAgICAg
ICAgICAgY2FudmFzLndpZHRoID0gYnVmZmVyV2lkdGg7CisgICAgICAgICAgICBjYW52YXMuaGVp
Z2h0ID0gYnVmZmVySGVpZ2h0OworICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1nLCAw
LCAwKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBWZXJ0ZXhEYXRhIGZyb20gbWFwIGRhdGEKKyAg
ICAgICAgICAgIC8vIENhc3QgaXMgZHVlIHRvIHdyb25nIGRlZmluaXRpb24gaW4gbGliLmQudHMg
ZnJvbSB0cyAxLjMgLSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNz
dWVzLzk0OQorICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAs
IDAsIGJ1ZmZlcldpZHRoLCBidWZmZXJIZWlnaHQpLmRhdGE7CisgICAgICAgICAgICB2YXIgdmVy
dGV4RGF0YSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVydGV4RGF0YSJdLkNyZWF0ZUdyb3VuZEZyb21IZWlnaHRNYXAoeworICAgICAgICAgICAgICAg
IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAgICAgICAgc3ViZGl2aXNp
b25zOiBzdWJkaXZpc2lvbnMsCisgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBtaW5IZWlnaHQs
IG1heEhlaWdodDogbWF4SGVpZ2h0LCBjb2xvckZpbHRlcjogZmlsdGVyLAorICAgICAgICAgICAg
ICAgIGJ1ZmZlcjogYnVmZmVyLCBidWZmZXJXaWR0aDogYnVmZmVyV2lkdGgsIGJ1ZmZlckhlaWdo
dDogYnVmZmVySGVpZ2h0LAorICAgICAgICAgICAgICAgIGFscGhhRmlsdGVyOiBhbHBoYUZpbHRl
cgorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB2ZXJ0ZXhEYXRhLmFwcGx5VG9NZXNoKGdy
b3VuZCwgdXBkYXRhYmxlKTsKKyAgICAgICAgICAgIC8vZXhlY3V0ZSByZWFkeSBjYWxsYmFjaywg
aWYgc2V0CisgICAgICAgICAgICBpZiAob25SZWFkeSkgeworICAgICAgICAgICAgICAgIG9uUmVh
ZHkoZ3JvdW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdyb3VuZC5fc2V0UmVhZHko
dHJ1ZSk7CisgICAgICAgIH07CisgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlRvb2xzIl0uTG9hZEltYWdlKHVybCwgb25sb2FkLCBmdW5jdGlvbiAoKSB7
IH0sIHNjZW5lLm9mZmxpbmVQcm92aWRlcik7CisgICAgICAgIHJldHVybiBncm91bmQ7CisgICAg
fTsKKyAgICByZXR1cm4gR3JvdW5kQnVpbGRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWVzaGVzL0J1aWxkZXJzL2hlbWlzcGhlcmVCdWlsZGVyLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01l
c2hlcy9CdWlsZGVycy9oZW1pc3BoZXJlQnVpbGRlci50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IEhlbWlzcGhlcmVCdWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkhlbWlzcGhlcmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBIZW1pc3BoZXJlQnVpbGRl
cjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2ggKi8gIi4vTWVzaGVz
L21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQnVpbGRlcnNfc3BoZXJlQnVp
bGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vQnVpbGRlcnMvc3BoZXJlQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJl
QnVpbGRlci50cyIpOworCisKKy8qKgorICogQ3JlYXRlcyBhIGhlbWlzcGhlcmljIGxpZ2h0Cisg
Ki8KK19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5DcmVhdGVIZW1p
c3BoZXJlID0gZnVuY3Rpb24gKG5hbWUsIHNlZ21lbnRzLCBkaWFtZXRlciwgc2NlbmUpIHsKKyAg
ICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgc2VnbWVudHM6IHNlZ21lbnRzLAorICAgICAgICBk
aWFtZXRlcjogZGlhbWV0ZXIKKyAgICB9OworICAgIHJldHVybiBIZW1pc3BoZXJlQnVpbGRlci5D
cmVhdGVIZW1pc3BoZXJlKG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKK307CisvKioKKyAqIENsYXNz
IGNvbnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWlsZCBt
ZXNoZXMKKyAqLwordmFyIEhlbWlzcGhlcmVCdWlsZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgeworICAgIGZ1bmN0aW9uIEhlbWlzcGhlcmVCdWlsZGVyKCkgeworICAgIH0KKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgaGVtaXNwaGVyZSBtZXNoCisgICAgICogQHBhcmFtIG5hbWUg
ZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmlu
ZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSBoZW1pc3Bo
ZXJlIG1lc2gKKyAgICAgKi8KKyAgICBIZW1pc3BoZXJlQnVpbGRlci5DcmVhdGVIZW1pc3BoZXJl
ID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmICghb3B0aW9u
cy5kaWFtZXRlcikgeworICAgICAgICAgICAgb3B0aW9ucy5kaWFtZXRlciA9IDE7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFvcHRpb25zLnNlZ21lbnRzKSB7CisgICAgICAgICAgICBvcHRpb25z
LnNlZ21lbnRzID0gMTY7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGhhbGZTcGhlcmUgPSBfQnVp
bGRlcnNfc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTcGhlcmVC
dWlsZGVyIl0uQ3JlYXRlU3BoZXJlKCIiLCB7IHNsaWNlOiAwLjUsIGRpYW1ldGVyOiBvcHRpb25z
LmRpYW1ldGVyLCBzZWdtZW50czogb3B0aW9ucy5zZWdtZW50cyB9LCBzY2VuZSk7CisgICAgICAg
IHZhciBkaXNjID0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkNy
ZWF0ZURpc2MoIiIsIG9wdGlvbnMuZGlhbWV0ZXIgLyAyLCAob3B0aW9ucy5zZWdtZW50cyAqIDMp
ICsgKDQgLSBvcHRpb25zLnNlZ21lbnRzKSwgc2NlbmUpOworICAgICAgICBkaXNjLnJvdGF0aW9u
LnggPSAtTWF0aC5QSSAvIDI7CisgICAgICAgIGRpc2MucGFyZW50ID0gaGFsZlNwaGVyZTsKKyAg
ICAgICAgdmFyIG1lcmdlZCA9IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1l
c2giXS5NZXJnZU1lc2hlcyhbZGlzYywgaGFsZlNwaGVyZV0sIHRydWUpOworICAgICAgICBtZXJn
ZWQubmFtZSA9IG5hbWU7CisgICAgICAgIHJldHVybiBtZXJnZWQ7CisgICAgfTsKKyAgICByZXR1
cm4gSGVtaXNwaGVyZUJ1aWxkZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L01lc2hlcy9CdWlsZGVycy9pY29TcGhlcmVCdWlsZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL0J1aWxk
ZXJzL2ljb1NwaGVyZUJ1aWxkZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEljb1NwaGVyZUJ1
aWxkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSWNvU3BoZXJlQnVp
bGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSWNvU3BoZXJlQnVpbGRlcjsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3Rv
ciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNo
LnZlcnRleERhdGEudHMiKTsKKworCisKK19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siVmVydGV4RGF0YSJdLkNyZWF0ZUljb1NwaGVyZSA9IGZ1bmN0aW9uIChv
cHRpb25zKSB7CisgICAgdmFyIHNpZGVPcmllbnRhdGlvbiA9IG9wdGlvbnMuc2lkZU9yaWVudGF0
aW9uIHx8IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVy
dGV4RGF0YSJdLkRFRkFVTFRTSURFOworICAgIHZhciByYWRpdXMgPSBvcHRpb25zLnJhZGl1cyB8
fCAxOworICAgIHZhciBmbGF0ID0gKG9wdGlvbnMuZmxhdCA9PT0gdW5kZWZpbmVkKSA/IHRydWUg
OiBvcHRpb25zLmZsYXQ7CisgICAgdmFyIHN1YmRpdmlzaW9ucyA9IG9wdGlvbnMuc3ViZGl2aXNp
b25zIHx8IDQ7CisgICAgdmFyIHJhZGl1c1ggPSBvcHRpb25zLnJhZGl1c1ggfHwgcmFkaXVzOwor
ICAgIHZhciByYWRpdXNZID0gb3B0aW9ucy5yYWRpdXNZIHx8IHJhZGl1czsKKyAgICB2YXIgcmFk
aXVzWiA9IG9wdGlvbnMucmFkaXVzWiB8fCByYWRpdXM7CisgICAgdmFyIHQgPSAoMSArIE1hdGgu
c3FydCg1KSkgLyAyOworICAgIC8vIDEyIHZlcnRleCB4LHksegorICAgIHZhciBpY29fdmVydGlj
ZXMgPSBbCisgICAgICAgIC0xLCB0LCAtMCwgMSwgdCwgMCwgLTEsIC10LCAwLCAxLCAtdCwgMCwK
KyAgICAgICAgMCwgLTEsIC10LCAwLCAxLCAtdCwgMCwgLTEsIHQsIDAsIDEsIHQsCisgICAgICAg
IHQsIDAsIDEsIHQsIDAsIC0xLCAtdCwgMCwgMSwgLXQsIDAsIC0xIC8vIHY4LTExCisgICAgXTsK
KyAgICAvLyBpbmRleCBvZiAzIHZlcnRleCBtYWtlcyBhIGZhY2Ugb2YgaWNvcHNoZXJlCisgICAg
dmFyIGljb19pbmRpY2VzID0gWworICAgICAgICAwLCAxMSwgNSwgMCwgNSwgMSwgMCwgMSwgNywg
MCwgNywgMTAsIDEyLCAyMiwgMjMsCisgICAgICAgIDEsIDUsIDIwLCA1LCAxMSwgNCwgMjMsIDIy
LCAxMywgMjIsIDE4LCA2LCA3LCAxLCA4LAorICAgICAgICAxNCwgMjEsIDQsIDE0LCA0LCAyLCAx
NiwgMTMsIDYsIDE1LCA2LCAxOSwgMywgOCwgOSwKKyAgICAgICAgNCwgMjEsIDUsIDEzLCAxNywg
MjMsIDYsIDEzLCAyMiwgMTksIDYsIDE4LCA5LCA4LCAxCisgICAgXTsKKyAgICAvLyB2ZXJ0ZXgg
Zm9yIHV2IGhhdmUgYWxpYXNlZCBwb3NpdGlvbiwgbm90IGZvciBVVgorICAgIHZhciB2ZXJ0aWNl
c191bmFsaWFzX2lkID0gWworICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx
MCwgMTEsCisgICAgICAgIC8vIHZlcnRleCBhbGlhcworICAgICAgICAwLAorICAgICAgICAyLAor
ICAgICAgICAzLAorICAgICAgICAzLAorICAgICAgICAzLAorICAgICAgICA0LAorICAgICAgICA3
LAorICAgICAgICA4LAorICAgICAgICA5LAorICAgICAgICA5LAorICAgICAgICAxMCwKKyAgICAg
ICAgMTEgLy8gMjM6IEIgKyAxMgorICAgIF07CisgICAgLy8gdXYgYXMgaW50ZWdlciBzdGVwIChu
b3QgcGl4ZWxzICEpCisgICAgdmFyIGljb192ZXJ0ZXh1diA9IFsKKyAgICAgICAgNSwgMSwgMywg
MSwgNiwgNCwgMCwgMCwKKyAgICAgICAgNSwgMywgNCwgMiwgMiwgMiwgNCwgMCwKKyAgICAgICAg
MiwgMCwgMSwgMSwgNiwgMCwgNiwgMiwKKyAgICAgICAgLy8gdmVydGV4IGFsaWFzIChmb3Igc2Ft
ZSB2ZXJ0ZXggb24gZGlmZmVyZW50IGZhY2VzKQorICAgICAgICAwLCA0LAorICAgICAgICAzLCAz
LAorICAgICAgICA0LCA0LAorICAgICAgICAzLCAxLAorICAgICAgICA0LCAyLAorICAgICAgICA0
LCA0LAorICAgICAgICAwLCAyLAorICAgICAgICAxLCAxLAorICAgICAgICAyLCAyLAorICAgICAg
ICAzLCAzLAorICAgICAgICAxLCAzLAorICAgICAgICAyLCA0IC8vIDIzOiBCICsgMTIKKyAgICBd
OworICAgIC8vIFZlcnRpY2VzWzAsIDEsIC4uLjksIEEsIEJdIDogcG9zaXRpb24gb24gVVYgcGxh
bmUKKyAgICAvLyAnKycgaW5kaWNhdGUgZHVwbGljYXRlIHBvc2l0aW9uIHRvIGJlIGZpeGVkICgz
LDk6MCwyLDMsNCw3LDgsQSxCKQorICAgIC8vIEZpcnN0IGlzbGFuZCBvZiB1diBtYXBwaW5nCisg
ICAgLy8gdiA9IDRoICAgICAgICAgIDMrICAyCisgICAgLy8gdiA9IDNoICAgICAgICA5KyAgNAor
ICAgIC8vIHYgPSAyaCAgICAgIDkrICA1ICAgQgorICAgIC8vIHYgPSAxaCAgICA5ICAgMSAgIDAK
KyAgICAvLyB2ID0gMGggIDMgICA4ICAgNyAgIEEKKyAgICAvLyAgICAgdSA9IDAgMSAyIDMgNCA1
IDYgICphCisgICAgLy8gU2Vjb25kIGlzbGFuZCBvZiB1diBtYXBwaW5nCisgICAgLy8gdiA9IDRo
ICAwKyAgQisgIDQrCisgICAgLy8gdiA9IDNoICAgIEErICAyKworICAgIC8vIHYgPSAyaCAgNysg
IDYgICAzKworICAgIC8vIHYgPSAxaCAgICA4KyAgMysKKyAgICAvLyB2ID0gMGgKKyAgICAvLyAg
ICAgdSA9IDAgMSAyIDMgNCA1IDYgICphCisgICAgLy8gRmFjZSBsYXlvdXQgb24gdGV4dHVyZSBV
ViBtYXBwaW5nCisgICAgLy8gPT09PT09PT09PT09CisgICAgLy8gXCA0ICAvXCAxNiAvICAgPT09
PT09CisgICAgLy8gIFwgIC8gIFwgIC8gICAvXCAxMSAvCisgICAgLy8gICBcLyA3ICBcLyAgIC8g
IFwgIC8KKyAgICAvLyAgICA9PT09PT09ICAvIDEwIFwvCisgICAgLy8gICAvXCAxNyAvXCAgPT09
PT09PQorICAgIC8vICAvICBcICAvICBcIFwgMTUgL1wKKyAgICAvLyAvIDggIFwvIDEyIFwgXCAg
LyAgXAorICAgIC8vID09PT09PT09PT09PSAgXC8gNiAgXAorICAgIC8vIFwgMTggL1wgID09PT09
PT09PT09PQorICAgIC8vICBcICAvICBcIFwgNSAgL1wgMCAgLworICAgIC8vICAgXC8gMTMgXCBc
ICAvICBcICAvCisgICAgLy8gICA9PT09PT09ICBcLyAxICBcLworICAgIC8vICAgICAgID09PT09
PT09PT09PT0KKyAgICAvLyAgICAgIC9cIDE5IC9cICAyIC9cCisgICAgLy8gICAgIC8gIFwgIC8g
IFwgIC8gIFwKKyAgICAvLyAgICAvIDE0IFwvIDkgIFwvICAzIFwKKyAgICAvLyAgID09PT09PT09
PT09PT09PT09PT0KKyAgICAvLyB1diBzdGVwIGlzIHU6MSBvciAwLjUsIHY6Y29zKDMwKT1zcXJ0
KDMpLzIsIHJhdGlvIGFwcHJveCBpcyA4NC85NworICAgIHZhciB1c3RlcCA9IDEzOCAvIDEwMjQ7
CisgICAgdmFyIHZzdGVwID0gMjM5IC8gMTAyNDsKKyAgICB2YXIgdW9mZnNldCA9IDYwIC8gMTAy
NDsKKyAgICB2YXIgdm9mZnNldCA9IDI2IC8gMTAyNDsKKyAgICAvLyBTZWNvbmQgaXNsYW5kIHNo
b3VsZCBoYXZlIG1hcmdpbiwgbm90IHRvIHRvdWNoIHRoZSBmaXJzdCBpc2xhbmQKKyAgICAvLyBh
dm9pZCBhbnkgYm9yZGVybGluZSBhcnRlZmFjdCBpbiBwaXhlbCByb3VuZGluZworICAgIHZhciBp
c2xhbmRfdV9vZmZzZXQgPSAtNDAgLyAxMDI0OworICAgIHZhciBpc2xhbmRfdl9vZmZzZXQgPSAr
MjAgLyAxMDI0OworICAgIC8vIGZhY2UgaXMgZWl0aGVyIGlzbGFuZCAwIG9yIDEgOgorICAgIC8v
IHNlY29uZCBpc2xhbmQgaXMgZm9yIGZhY2VzIDogWzQsIDcsIDgsIDEyLCAxMywgMTYsIDE3LCAx
OF0KKyAgICB2YXIgaXNsYW5kID0gWworICAgICAgICAwLCAwLCAwLCAwLCAxLAorICAgICAgICAw
LCAwLCAxLCAxLCAwLAorICAgICAgICAwLCAwLCAxLCAxLCAwLAorICAgICAgICAwLCAxLCAxLCAx
LCAwIC8vICAxNSAtIDE5CisgICAgXTsKKyAgICB2YXIgaW5kaWNlcyA9IG5ldyBBcnJheSgpOwor
ICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgbm9ybWFscyA9IG5ldyBB
cnJheSgpOworICAgIHZhciB1dnMgPSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgY3VycmVudF9pbmRp
Y2UgPSAwOworICAgIC8vIHByZXBhcmUgYXJyYXkgb2YgMyB2ZWN0b3IgKGVtcHR5KSAodG8gYmUg
d29ya2VkIGluIHBsYWNlLCBzaGFyZWQgZm9yIGVhY2ggZmFjZSkKKyAgICB2YXIgZmFjZV92ZXJ0
ZXhfcG9zID0gbmV3IEFycmF5KDMpOworICAgIHZhciBmYWNlX3ZlcnRleF91diA9IG5ldyBBcnJh
eSgzKTsKKyAgICB2YXIgdjAxMjsKKyAgICBmb3IgKHYwMTIgPSAwOyB2MDEyIDwgMzsgdjAxMisr
KSB7CisgICAgICAgIGZhY2VfdmVydGV4X3Bvc1t2MDEyXSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBm
YWNlX3ZlcnRleF91dlt2MDEyXSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJWZWN0b3IyIl0uWmVybygpOworICAgIH0KKyAgICAvLyBjcmVhdGUgYWxs
IHdpdGggbm9ybWFscworICAgIGZvciAodmFyIGZhY2UgPSAwOyBmYWNlIDwgMjA7IGZhY2UrKykg
eworICAgICAgICAvLyAzIHZlcnRleCBwZXIgZmFjZQorICAgICAgICBmb3IgKHYwMTIgPSAwOyB2
MDEyIDwgMzsgdjAxMisrKSB7CisgICAgICAgICAgICAvLyBsb29rIHVwIHZlcnRleCAwLDEsMiB0
byBpdHMgaW5kZXggaW4gMCB0byAxMSAob3IgMjMgaW5jbHVkaW5nIGFsaWFzKQorICAgICAgICAg
ICAgdmFyIHZfaWQgPSBpY29faW5kaWNlc1szICogZmFjZSArIHYwMTJdOworICAgICAgICAgICAg
Ly8gdmVydGV4IGhhdmUgM0QgcG9zaXRpb24gKHgseSx6KQorICAgICAgICAgICAgZmFjZV92ZXJ0
ZXhfcG9zW3YwMTJdLmNvcHlGcm9tRmxvYXRzKGljb192ZXJ0aWNlc1szICogdmVydGljZXNfdW5h
bGlhc19pZFt2X2lkXV0sIGljb192ZXJ0aWNlc1szICogdmVydGljZXNfdW5hbGlhc19pZFt2X2lk
XSArIDFdLCBpY29fdmVydGljZXNbMyAqIHZlcnRpY2VzX3VuYWxpYXNfaWRbdl9pZF0gKyAyXSk7
CisgICAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gZ2V0IG5vcm1hbCwgdGhlbiBzY2FsZSB0byBy
YWRpdXMKKyAgICAgICAgICAgIGZhY2VfdmVydGV4X3Bvc1t2MDEyXS5ub3JtYWxpemUoKS5zY2Fs
ZUluUGxhY2UocmFkaXVzKTsKKyAgICAgICAgICAgIC8vIHV2IENvb3JkaW5hdGVzIGZyb20gdmVy
dGV4IElECisgICAgICAgICAgICBmYWNlX3ZlcnRleF91dlt2MDEyXS5jb3B5RnJvbUZsb2F0cyhp
Y29fdmVydGV4dXZbMiAqIHZfaWRdICogdXN0ZXAgKyB1b2Zmc2V0ICsgaXNsYW5kW2ZhY2VdICog
aXNsYW5kX3Vfb2Zmc2V0LCBpY29fdmVydGV4dXZbMiAqIHZfaWQgKyAxXSAqIHZzdGVwICsgdm9m
ZnNldCArIGlzbGFuZFtmYWNlXSAqIGlzbGFuZF92X29mZnNldCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gU3ViZGl2aWRlIHRoZSBmYWNlIChpbnRlcnBvbGF0ZSBwb3MsIG5vcm0sIHV2KQorICAg
ICAgICAvLyAtIHBvcyBpcyBsaW5lYXIgaW50ZXJwb2xhdGlvbiwgdGhlbiBwcm9qZWN0ZWQgdG8g
c3BoZXJlIChjb252ZXJnZSBwb2x5aGVkcm9uIHRvIHNwaGVyZSkKKyAgICAgICAgLy8gLSBub3Jt
IGlzIGxpbmVhciBpbnRlcnBvbGF0aW9uIG9mIHZlcnRleCBjb3JuZXIgbm9ybWFsCisgICAgICAg
IC8vICAgKHRvIGJlIGNoZWNrZWQgaWYgYmV0dGVyIHRvIHJlLWNhbGMgZnJvbSBmYWNlIHZlcnRl
eCwgb3IgaWYgYXBwcm94aW1hdGlvbiBpcyBPSyA/Pz8gKQorICAgICAgICAvLyAtIHV2IGlzIGxp
bmVhciBpbnRlcnBvbGF0aW9uCisgICAgICAgIC8vCisgICAgICAgIC8vIFRvcG9sb2d5IGlzIGFz
IGJlbG93IGZvciBzdWItZGl2aWRlIGJ5IDIKKyAgICAgICAgLy8gdmVydGV4IHNob3duIGFzIHYw
LHYxLHYyCisgICAgICAgIC8vIGludGVycCBpbmRleCBpcyBpMSB0byBwcm9ncmVzcyBpbiByYW5n
ZSBbdjAsdjFbCisgICAgICAgIC8vIGludGVycCBpbmRleCBpcyBpMiB0byBwcm9ncmVzcyBpbiBy
YW5nZSBbdjAsdjJbCisgICAgICAgIC8vIGZhY2UgaW5kZXggYXMgIChpMSxpMikgIGZvciAvXCAg
OiAoaTEsaTIpLChpMSsxLGkyKSwoaTEsaTIrMSkKKyAgICAgICAgLy8gICAgICAgICAgICBhbmQg
KGkxLGkyKScgZm9yIFwvICA6IChpMSsxLGkyKSwoaTErMSxpMisxKSwoaTEsaTIrMSkKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIGkyICAgIHYy
CisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBeICAgIF4KKyAgICAgICAgLy8gICAgICAg
ICAgICAgICAgICAgLyAgICAvIFwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAvICAgIC8g
ICBcCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAvICAgIC8gICAgIFwKKyAgICAgICAgLy8g
ICAgICAgICAgICAgICAgLyAgICAvICgwLDEpIFwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAv
ICAgICMtLS0tLS0tLS1cCisgICAgICAgIC8vICAgICAgICAgICAgICAvICAgIC8gXCAoMCwwKScv
IFwKKyAgICAgICAgLy8gICAgICAgICAgICAgLyAgICAvICAgXCAgICAgLyAgIFwKKyAgICAgICAg
Ly8gICAgICAgICAgICAvICAgIC8gICAgIFwgICAvICAgICBcCisgICAgICAgIC8vICAgICAgICAg
ICAvICAgIC8gKDAsMCkgXCAvICgxLDApIFwKKyAgICAgICAgLy8gICAgICAgICAgLyAgICAjLS0t
LS0tLS0tIy0tLS0tLS0tLVwKKyAgICAgICAgLy8gICAgICAgICAgICAgIHYwICAgICAgICAgICAg
ICAgICAgICB2MQorICAgICAgICAvLworICAgICAgICAvLyAgICAgICAgICAgICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0+IGkxCisgICAgICAgIC8vCisgICAgICAgIC8vIGludGVycCBvZiAoaTEsaTIp
OgorICAgICAgICAvLyAgYWxvbmcgaTIgOiAgeDA9bGVycCh2MCx2MiwgaTIvUykgPC0tLT4geDE9
bGVycCh2MSx2MiwgaTIvUykKKyAgICAgICAgLy8gIGFsb25nIGkxIDogIGxlcnAoeDAseDEsIGkx
LyhTLWkyKSkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gY2VudHJvaWQgb2YgdHJpYW5nbGUgaXMg
bmVlZGVkIHRvIGdldCBoZWxwIG5vcm1hbCBjb21wdXRhdGlvbgorICAgICAgICAvLyAgKGMxLGMy
KSBhcmUgdXNlZCBmb3IgY2VudHJvaWQgbG9jYXRpb24KKyAgICAgICAgdmFyIGludGVycF92ZXJ0
ZXggPSBmdW5jdGlvbiAoaTEsIGkyLCBjMSwgYzIpIHsKKyAgICAgICAgICAgIC8vIHZlcnRleCBp
cyBpbnRlcnBvbGF0ZWQgZnJvbQorICAgICAgICAgICAgLy8gICAtIGZhY2VfdmVydGV4X3Bvc1sw
Li4yXQorICAgICAgICAgICAgLy8gICAtIGZhY2VfdmVydGV4X3V2WzAuLjJdCisgICAgICAgICAg
ICB2YXIgcG9zX3gwID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlZlY3RvcjMiXS5MZXJwKGZhY2VfdmVydGV4X3Bvc1swXSwgZmFjZV92ZXJ0ZXhfcG9z
WzJdLCBpMiAvIHN1YmRpdmlzaW9ucyk7CisgICAgICAgICAgICB2YXIgcG9zX3gxID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5MZXJw
KGZhY2VfdmVydGV4X3Bvc1sxXSwgZmFjZV92ZXJ0ZXhfcG9zWzJdLCBpMiAvIHN1YmRpdmlzaW9u
cyk7CisgICAgICAgICAgICB2YXIgcG9zX2ludGVycCA9IChzdWJkaXZpc2lvbnMgPT09IGkyKSA/
IGZhY2VfdmVydGV4X3Bvc1syXSA6IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uTGVycChwb3NfeDAsIHBvc194MSwgaTEgLyAoc3ViZGl2
aXNpb25zIC0gaTIpKTsKKyAgICAgICAgICAgIHBvc19pbnRlcnAubm9ybWFsaXplKCk7CisgICAg
ICAgICAgICB2YXIgdmVydGV4X25vcm1hbDsKKyAgICAgICAgICAgIGlmIChmbGF0KSB7CisgICAg
ICAgICAgICAgICAgLy8gaW4gZmxhdCBtb2RlLCByZWNhbGN1bGF0ZSBub3JtYWwgYXMgZmFjZSBj
ZW50cm9pZCBub3JtYWwKKyAgICAgICAgICAgICAgICB2YXIgY2VudHJvaWRfeDAgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkxlcnAo
ZmFjZV92ZXJ0ZXhfcG9zWzBdLCBmYWNlX3ZlcnRleF9wb3NbMl0sIGMyIC8gc3ViZGl2aXNpb25z
KTsKKyAgICAgICAgICAgICAgICB2YXIgY2VudHJvaWRfeDEgPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkxlcnAoZmFjZV92ZXJ0ZXhf
cG9zWzFdLCBmYWNlX3ZlcnRleF9wb3NbMl0sIGMyIC8gc3ViZGl2aXNpb25zKTsKKyAgICAgICAg
ICAgICAgICB2ZXJ0ZXhfbm9ybWFsID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5MZXJwKGNlbnRyb2lkX3gwLCBjZW50cm9pZF94MSwg
YzEgLyAoc3ViZGl2aXNpb25zIC0gYzIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIGluIHNtb290aCBtb2RlLCByZWNhbGN1bGF0ZSBub3Jt
YWwgZnJvbSBlYWNoIHNpbmdsZSB2ZXJ0ZXggcG9zaXRpb24KKyAgICAgICAgICAgICAgICB2ZXJ0
ZXhfbm9ybWFsID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0ocG9zX2ludGVycC54LCBwb3NfaW50ZXJwLnksIHBvc19pbnRlcnAu
eik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBWZXJ0ZXggbm9ybWFsIG5lZWQgY29y
cmVjdGlvbiBkdWUgdG8gWCxZLFogcmFkaXVzIHNjYWxpbmcKKyAgICAgICAgICAgIHZlcnRleF9u
b3JtYWwueCAvPSByYWRpdXNYOworICAgICAgICAgICAgdmVydGV4X25vcm1hbC55IC89IHJhZGl1
c1k7CisgICAgICAgICAgICB2ZXJ0ZXhfbm9ybWFsLnogLz0gcmFkaXVzWjsKKyAgICAgICAgICAg
IHZlcnRleF9ub3JtYWwubm9ybWFsaXplKCk7CisgICAgICAgICAgICB2YXIgdXZfeDAgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdLkxl
cnAoZmFjZV92ZXJ0ZXhfdXZbMF0sIGZhY2VfdmVydGV4X3V2WzJdLCBpMiAvIHN1YmRpdmlzaW9u
cyk7CisgICAgICAgICAgICB2YXIgdXZfeDEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdLkxlcnAoZmFjZV92ZXJ0ZXhfdXZbMV0sIGZh
Y2VfdmVydGV4X3V2WzJdLCBpMiAvIHN1YmRpdmlzaW9ucyk7CisgICAgICAgICAgICB2YXIgdXZf
aW50ZXJwID0gKHN1YmRpdmlzaW9ucyA9PT0gaTIpID8gZmFjZV92ZXJ0ZXhfdXZbMl0gOiBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdLkxl
cnAodXZfeDAsIHV2X3gxLCBpMSAvIChzdWJkaXZpc2lvbnMgLSBpMikpOworICAgICAgICAgICAg
cG9zaXRpb25zLnB1c2gocG9zX2ludGVycC54ICogcmFkaXVzWCwgcG9zX2ludGVycC55ICogcmFk
aXVzWSwgcG9zX2ludGVycC56ICogcmFkaXVzWik7CisgICAgICAgICAgICBub3JtYWxzLnB1c2go
dmVydGV4X25vcm1hbC54LCB2ZXJ0ZXhfbm9ybWFsLnksIHZlcnRleF9ub3JtYWwueik7CisgICAg
ICAgICAgICB1dnMucHVzaCh1dl9pbnRlcnAueCwgdXZfaW50ZXJwLnkpOworICAgICAgICAgICAg
Ly8gcHVzaCBlYWNoIHZlcnRleCBoYXMgbWVtYmVyIG9mIGEgZmFjZQorICAgICAgICAgICAgLy8g
U2FtZSB2ZXJ0ZXggY2FuIGJsZW9uZyB0byBtdWx0aXBsZSBmYWNlLCBpdCBpcyBwdXNoZWQgbXVs
dGlwbGUgdGltZSAoZHVwbGljYXRlIHZlcnRleCBhcmUgcHJlc2VudCkKKyAgICAgICAgICAgIGlu
ZGljZXMucHVzaChjdXJyZW50X2luZGljZSk7CisgICAgICAgICAgICBjdXJyZW50X2luZGljZSsr
OworICAgICAgICB9OworICAgICAgICBmb3IgKHZhciBpMiA9IDA7IGkyIDwgc3ViZGl2aXNpb25z
OyBpMisrKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpMSA9IDA7IGkxICsgaTIgPCBzdWJkaXZp
c2lvbnM7IGkxKyspIHsKKyAgICAgICAgICAgICAgICAvLyBmYWNlIDogKGkxLGkyKSAgZm9yIC9c
ICA6CisgICAgICAgICAgICAgICAgLy8gaW50ZXJwIGZvciA6IChpMSxpMiksKGkxKzEsaTIpLChp
MSxpMisxKQorICAgICAgICAgICAgICAgIGludGVycF92ZXJ0ZXgoaTEsIGkyLCBpMSArIDEuMCAv
IDMsIGkyICsgMS4wIC8gMyk7CisgICAgICAgICAgICAgICAgaW50ZXJwX3ZlcnRleChpMSArIDEs
IGkyLCBpMSArIDEuMCAvIDMsIGkyICsgMS4wIC8gMyk7CisgICAgICAgICAgICAgICAgaW50ZXJw
X3ZlcnRleChpMSwgaTIgKyAxLCBpMSArIDEuMCAvIDMsIGkyICsgMS4wIC8gMyk7CisgICAgICAg
ICAgICAgICAgaWYgKGkxICsgaTIgKyAxIDwgc3ViZGl2aXNpb25zKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIGZhY2UgOiAoaTEsaTIpJyBmb3IgXC8gIDoKKyAgICAgICAgICAgICAgICAgICAg
Ly8gaW50ZXJwIGZvciAoaTErMSxpMiksKGkxKzEsaTIrMSksKGkxLGkyKzEpCisgICAgICAgICAg
ICAgICAgICAgIGludGVycF92ZXJ0ZXgoaTEgKyAxLCBpMiwgaTEgKyAyLjAgLyAzLCBpMiArIDIu
MCAvIDMpOworICAgICAgICAgICAgICAgICAgICBpbnRlcnBfdmVydGV4KGkxICsgMSwgaTIgKyAx
LCBpMSArIDIuMCAvIDMsIGkyICsgMi4wIC8gMyk7CisgICAgICAgICAgICAgICAgICAgIGludGVy
cF92ZXJ0ZXgoaTEsIGkyICsgMSwgaTEgKyAyLjAgLyAzLCBpMiArIDIuMCAvIDMpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBTaWRl
cworICAgIF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVy
dGV4RGF0YSJdLl9Db21wdXRlU2lkZXMoc2lkZU9yaWVudGF0aW9uLCBwb3NpdGlvbnMsIGluZGlj
ZXMsIG5vcm1hbHMsIHV2cywgb3B0aW9ucy5mcm9udFVWcywgb3B0aW9ucy5iYWNrVVZzKTsKKyAg
ICAvLyBSZXN1bHQKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleERhdGEiXSgpOworICAgIHZlcnRleERh
dGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgdmVydGV4RGF0YS5wb3NpdGlvbnMgPSBwb3NpdGlv
bnM7CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRhLnV2
cyA9IHV2czsKKyAgICByZXR1cm4gdmVydGV4RGF0YTsKK307CitfbWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uQ3JlYXRlSWNvU3BoZXJlID0gZnVuY3Rpb24gKG5hbWUs
IG9wdGlvbnMsIHNjZW5lKSB7CisgICAgcmV0dXJuIEljb1NwaGVyZUJ1aWxkZXIuQ3JlYXRlSWNv
U3BoZXJlKG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKK307CisvKioKKyAqIENsYXNzIGNvbnRhaW5p
bmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWlsZCBtZXNoZXMKKyAq
LwordmFyIEljb1NwaGVyZUJ1aWxkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgZnVuY3Rpb24gSWNvU3BoZXJlQnVpbGRlcigpIHsKKyAgICB9CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIHNwaGVyZSBiYXNlZCB1cG9uIGFuIGljb3NhaGVkcm9uIHdpdGggMjAgdHJpYW5n
dWxhciBmYWNlcyB3aGljaCBjYW4gYmUgc3ViZGl2aWRlZAorICAgICAqICogVGhlIHBhcmFtZXRl
ciBgcmFkaXVzYCBzZXRzIHRoZSByYWRpdXMgc2l6ZSAoZmxvYXQpIG9mIHRoZSBpY29zcGhlcmUg
KGRlZmF1bHQgMSkKKyAgICAgKiAqIFlvdSBjYW4gc2V0IHNvbWUgZGlmZmVyZW50IGljb3NwaGVy
ZSBkaW1lbnNpb25zLCBmb3IgaW5zdGFuY2UgdG8gYnVpbGQgYW4gZWxsaXBzb2lkLCBieSB1c2lu
ZyB0aGUgcGFyYW1ldGVycyBgcmFkaXVzWGAsIGByYWRpdXNZYCBhbmQgYHJhZGl1c1pgIChhbGwg
YnkgZGVmYXVsdCBoYXZlIHRoZSBzYW1lIHZhbHVlIG9mIGByYWRpdXNgKQorICAgICAqICogVGhl
IHBhcmFtZXRlciBgc3ViZGl2aXNpb25zYCBzZXRzIHRoZSBudW1iZXIgb2Ygc3ViZGl2aXNpb25z
IChwb3N0aXZlIGludGVnZXIsIGRlZmF1bHQgNCkuIFRoZSBtb3JlIHN1YmRpdmlzaW9ucywgdGhl
IG1vcmUgZmFjZXMgb24gdGhlIGljb3NwaGVyZSB3aGF0ZXZlciBpdHMgc2l6ZQorICAgICAqICog
VGhlIHBhcmFtZXRlciBgZmxhdGAgKGJvb2xlYW4sIGRlZmF1bHQgdHJ1ZSkgZ2l2ZXMgZWFjaCBz
aWRlIGl0cyBvd24gbm9ybWFscy4gU2V0IGl0IHRvIGZhbHNlIHRvIGdldCBhIHNtb290aCBjb250
aW51b3VzIGxpZ2h0IHJlZmxlY3Rpb24gb24gdGhlIHN1cmZhY2UKKyAgICAgKiAqIFlvdSBjYW4g
YWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZ
TE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJB
QllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNp
ZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2Ug
dG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sg
c2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3Rv
cjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9k
aXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUgbWVz
aCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBk
YXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBv
c2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRo
ZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0
aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVz
IHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdGhlIGljb3NhaGVkcm9uIG1lc2gK
KyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BvbHloZWRyYV9z
aGFwZXMjaWNvc3BoZXJlCisgICAgICovCisgICAgSWNvU3BoZXJlQnVpbGRlci5DcmVhdGVJY29T
cGhlcmUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNj
ZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHZhciBzcGhlcmUgPSBu
ZXcgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdKG5hbWUsIHNjZW5l
KTsKKyAgICAgICAgb3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uX0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9u
cy5zaWRlT3JpZW50YXRpb24pOworICAgICAgICBzcGhlcmUuX29yaWdpbmFsQnVpbGRlclNpZGVP
cmllbnRhdGlvbiA9IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uOworICAgICAgICB2YXIgdmVydGV4
RGF0YSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVy
dGV4RGF0YSJdLkNyZWF0ZUljb1NwaGVyZShvcHRpb25zKTsKKyAgICAgICAgdmVydGV4RGF0YS5h
cHBseVRvTWVzaChzcGhlcmUsIG9wdGlvbnMudXBkYXRhYmxlKTsKKyAgICAgICAgcmV0dXJuIHNw
aGVyZTsKKyAgICB9OworICAgIHJldHVybiBJY29TcGhlcmVCdWlsZGVyOworfSgpKTsKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRlcnMvaW5kZXgudHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL0J1aWxk
ZXJzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogQm94QnVpbGRlciwgU3BoZXJlQnVpbGRlciwgQ3lsaW5k
ZXJCdWlsZGVyLCBUb3J1c0J1aWxkZXIsIExpbmVzQnVpbGRlciwgUGxhbmVCdWlsZGVyLCBHcm91
bmRCdWlsZGVyLCBUaWxlZEJveEJ1aWxkZXIsIERpc2NCdWlsZGVyLCBSaWJib25CdWlsZGVyLCBI
ZW1pc3BoZXJlQnVpbGRlciwgVG9ydXNLbm90QnVpbGRlciwgUG9seWdvbkJ1aWxkZXIsIFNoYXBl
QnVpbGRlciwgTGF0aGVCdWlsZGVyLCBUaWxlZFBsYW5lQnVpbGRlciwgVHViZUJ1aWxkZXIsIFBv
bHloZWRyb25CdWlsZGVyLCBJY29TcGhlcmVCdWlsZGVyLCBEZWNhbEJ1aWxkZXIgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ib3hCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2JveEJ1aWxk
ZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL2JveEJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQm94QnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2JveEJ1aWxkZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siQm94QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF90aWxlZEJveEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGlsZWRCb3hCdWlsZGVyICovICIuL01lc2hlcy9C
dWlsZGVycy90aWxlZEJveEJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGlsZWRCb3hC
dWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdGlsZWRCb3hCdWlsZGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlRpbGVkQm94QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9kaXNjQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kaXNjQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRl
cnMvZGlzY0J1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGlzY0J1aWxkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9kaXNjQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJEaXNjQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yaWJib25C
dWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL3JpYmJvbkJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3JpYmJvbkJ1aWxkZXIu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmliYm9uQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX3JpYmJvbkJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUmliYm9uQnVp
bGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGhlcmVCdWlsZGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Nw
aGVyZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3NwaGVyZUJ1aWxkZXIudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiU3BoZXJlQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NwaGVy
ZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BoZXJlQnVpbGRlciJdOyB9
KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZW1pc3BoZXJlQnVpbGRlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZW1pc3Bo
ZXJlQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvaGVtaXNwaGVyZUJ1aWxkZXIudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiSGVtaXNwaGVyZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9oZW1pc3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJIZW1pc3Bo
ZXJlQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jeWxpbmRlckJ1
aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vY3lsaW5kZXJCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1aWxk
ZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJCdWlsZGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfY3lsaW5kZXJCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkN5
bGluZGVyQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b3J1c0J1
aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vdG9ydXNCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy90b3J1c0J1aWxkZXIudHMi
KTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVG9ydXNCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
dG9ydXNCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlRvcnVzQnVpbGRlciJd
OyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b3J1c0tub3RCdWlsZGVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvcnVz
S25vdEJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3RvcnVzS25vdEJ1aWxkZXIudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiVG9ydXNLbm90QnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X3RvcnVzS25vdEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVG9ydXNLbm90
QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saW5lc0J1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
bGluZXNCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9saW5lc0J1aWxkZXIudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiTGluZXNCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbGluZXNC
dWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkxpbmVzQnVpbGRlciJdOyB9KTsK
KworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb2x5Z29uQnVpbGRlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9seWdvbkJ1aWxk
ZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3BvbHlnb25CdWlsZGVyLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBvbHlnb25CdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9seWdvbkJ1aWxk
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlBvbHlnb25CdWlsZGVyIl07IH0pOwor
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NoYXBlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2hhcGVCdWlsZGVyICov
ICIuL01lc2hlcy9CdWlsZGVycy9zaGFwZUJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U2hhcGVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2hhcGVCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fWyJTaGFwZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfbGF0aGVCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9sYXRoZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1
aWxkZXJzL2xhdGhlQnVpbGRlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMYXRoZUJ1aWxkZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9sYXRoZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEyX19bIkxhdGhlQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9wbGFuZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL3BsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvcGxhbmVC
dWlsZGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBsYW5lQnVpbGRlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX3BsYW5lQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUGxh
bmVCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RpbGVkUGxhbmVC
dWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi90aWxlZFBsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdGlsZWRQbGFu
ZUJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGlsZWRQbGFuZUJ1aWxkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF90aWxlZFBsYW5lQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTRfX1siVGlsZWRQbGFuZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfZ3JvdW5kQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vZ3JvdW5kQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMv
Z3JvdW5kQnVpbGRlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHcm91bmRCdWlsZGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfZ3JvdW5kQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTVfX1siR3JvdW5kQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90
dWJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vdHViZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3R1YmVCdWlsZGVy
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlR1YmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfdHViZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIlR1YmVCdWlsZGVy
Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BvbHloZWRyb25CdWlsZGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9w
b2x5aGVkcm9uQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvcG9seWhlZHJvbkJ1aWxkZXIu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWhlZHJvbkJ1aWxkZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9wb2x5aGVkcm9uQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1si
UG9seWhlZHJvbkJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaWNv
U3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vaWNvU3BoZXJlQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvaWNv
U3BoZXJlQnVpbGRlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJY29TcGhlcmVCdWlsZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfaWNvU3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMThfX1siSWNvU3BoZXJlQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9kZWNhbEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL2RlY2FsQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMv
ZGVjYWxCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlY2FsQnVpbGRlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2RlY2FsQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlf
X1siRGVjYWxCdWlsZGVyIl07IH0pOworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRlcnMvbGF0aGVC
dWlsZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9NZXNoZXMvQnVpbGRlcnMvbGF0aGVCdWlsZGVyLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IExhdGhlQnVpbGRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJMYXRoZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIExhdGhlQnVpbGRlcjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRo
LnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX3JpYmJvbkJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmliYm9uQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVp
bGRlcnMvcmliYm9uQnVpbGRlci50cyIpOworCisKKworX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZUxhdGhlID0gZnVuY3Rpb24gKG5hbWUsIHNoYXBlLCBy
YWRpdXMsIHRlc3NlbGxhdGlvbiwgc2NlbmUsIHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uKSB7
CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIHNoYXBlOiBzaGFwZSwKKyAgICAgICAgcmFk
aXVzOiByYWRpdXMsCisgICAgICAgIHRlc3NlbGxhdGlvbjogdGVzc2VsbGF0aW9uLAorICAgICAg
ICBzaWRlT3JpZW50YXRpb246IHNpZGVPcmllbnRhdGlvbiwKKyAgICAgICAgdXBkYXRhYmxlOiB1
cGRhdGFibGUKKyAgICB9OworICAgIHJldHVybiBMYXRoZUJ1aWxkZXIuQ3JlYXRlTGF0aGUobmFt
ZSwgb3B0aW9ucywgc2NlbmUpOworfTsKKy8qKgorICogQ2xhc3MgY29udGFpbmluZyBzdGF0aWMg
ZnVuY3Rpb25zIHRvIGhlbHAgcHJvY2VkdXJhbGx5IGJ1aWxkIG1lc2hlcworICovCit2YXIgTGF0
aGVCdWlsZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIExh
dGhlQnVpbGRlcigpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBsYXRoZSBtZXNo
LgorICAgICAqIFRoZSBsYXRoZSBpcyBhIHNoYXBlIHdpdGggYSBzeW1ldHJ5IGF4aXMgOiBhIDJE
IG1vZGVsIHNoYXBlIGlzIHJvdGF0ZWQgYXJvdW5kIHRoaXMgYXhpcyB0byBkZXNpZ24gdGhlIGxh
dGhlCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBzaGFwZWAgaXMgYSByZXF1aXJlZCBhcnJheSBv
ZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgYXJyYXkgZGVwaWN0cyB0aGUgc2hhcGUgdG8gYmUg
cm90YXRlZCBpbiBpdHMgbG9jYWwgc3BhY2UgOiB0aGUgc2hhcGUgbXVzdCBiZSBkZXNpZ25lZCBp
biB0aGUgeE95IHBsYW5lIGFuZCB3aWxsIGJlIHJvdGF0ZWQgYXJvdW5kIHRoZSBZIGF4aXMuIEl0
J3MgdXN1YWxseSBhIDJEIHNoYXBlLCBzbyB0aGUgVmVjdG9yMyB6IGNvb3JkaW5hdGVzIGFyZSBv
ZnRlbiBzZXQgdG8gemVybworICAgICAqICogVGhlIHBhcmFtZXRlciBgcmFkaXVzYCAocG9zaXRp
dmUgZmxvYXQsIGRlZmF1bHQgMSkgaXMgdGhlIHJhZGl1cyB2YWx1ZSBvZiB0aGUgbGF0aGUKKyAg
ICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHRlc3NlbGxhdGlvbmAgKHBvc2l0aXZlIGludGVnZXIsIGRl
ZmF1bHQgNjQpIGlzIHRoZSBzaWRlIG51bWJlciBvZiB0aGUgbGF0aGUKKyAgICAgKiAqIFRoZSBw
YXJhbWV0ZXIgYGNsaXBgIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDApIGlzIHRoZSBudW1i
ZXIgb2Ygc2lkZXMgdG8gbm90IGNyZWF0ZSB3aXRob3V0IGVmZmVjdGluZyB0aGUgZ2VuZXJhbCBz
aGFwZSBvZiB0aGUgc2lkZXMKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGFyY2AgKHBvc2l0aXZl
IGZsb2F0LCBkZWZhdWx0IDEpIGlzIHRoZSByYXRpbyBvZiB0aGUgbGF0aGUuIDAuNSBidWlsZHMg
Zm9yIGluc3RhbmNlIGhhbGYgYSBsYXRoZSwgc28gYW4gb3BlbmVkIHNoYXBlCisgICAgICogKiBU
aGUgcGFyYW1ldGVyIGBjbG9zZWRgIChib29sZWFuLCBkZWZhdWx0IHRydWUpIG9wZW5zL2Nsb3Nl
cyB0aGUgbGF0aGUgY2lyY3VtZmVyZW5jZS4gVGhpcyBzaG91bGQgYmUgc2V0IHRvIGZhbHNlIHdo
ZW4gdXNlZCB3aXRoIHRoZSBwYXJhbWV0ZXIgImFyYyIKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIg
YGNhcGAgc2V0cyB0aGUgd2F5IHRoZSBleHRydWRlZCBzaGFwZSBpcyBjYXBwZWQuIFBvc3NpYmxl
IHZhbHVlcyA6IEJBQllMT04uTWVzaC5OT19DQVAgKGRlZmF1bHQpLCBCQUJZTE9OLk1lc2guQ0FQ
X1NUQVJULCBCQUJZTE9OLk1lc2guQ0FQX0VORCwgQkFCWUxPTi5NZXNoLkNBUF9BTEwKKyAgICAg
KiAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2
YWx1ZXMgOiBCQUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJB
Q0tTSURFIG9yIEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRl
IGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRl
eHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBh
bmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFj
a1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20v
YmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAg
ICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnZlcnRVVmAgKGJvb2xlYW4sIGRlZmF1bHQg
ZmFsc2UpIHN3YXBzIGluIHRoZSBnZW9tZXRyeSB0aGUgVSBhbmQgViBjb29yZGluYXRlcyB0byBh
cHBseSBhIHRleHR1cmUKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxl
IHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBp
ZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRl
ZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAg
KiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBt
ZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAg
KiBAcmV0dXJucyB0aGUgbGF0aGUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxv
bmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjbGF0aGUKKyAgICAgKi8KKyAgICBMYXRo
ZUJ1aWxkZXIuQ3JlYXRlTGF0aGUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsK
KyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAg
IHZhciBhcmMgPSBvcHRpb25zLmFyYyA/ICgob3B0aW9ucy5hcmMgPD0gMCB8fCBvcHRpb25zLmFy
YyA+IDEpID8gMS4wIDogb3B0aW9ucy5hcmMpIDogMS4wOworICAgICAgICB2YXIgY2xvc2VkID0g
KG9wdGlvbnMuY2xvc2VkID09PSB1bmRlZmluZWQpID8gdHJ1ZSA6IG9wdGlvbnMuY2xvc2VkOwor
ICAgICAgICB2YXIgc2hhcGUgPSBvcHRpb25zLnNoYXBlOworICAgICAgICB2YXIgcmFkaXVzID0g
b3B0aW9ucy5yYWRpdXMgfHwgMTsKKyAgICAgICAgdmFyIHRlc3NlbGxhdGlvbiA9IG9wdGlvbnMu
dGVzc2VsbGF0aW9uIHx8IDY0OworICAgICAgICB2YXIgY2xpcCA9IG9wdGlvbnMuY2xpcCB8fCAw
OworICAgICAgICB2YXIgdXBkYXRhYmxlID0gb3B0aW9ucy51cGRhdGFibGU7CisgICAgICAgIHZh
ciBzaWRlT3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJN
ZXNoIl0uX0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24p
OworICAgICAgICB2YXIgY2FwID0gb3B0aW9ucy5jYXAgfHwgX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siTWVzaCJdLk5PX0NBUDsKKyAgICAgICAgdmFyIHBpMiA9IE1hdGguUEkg
KiAyOworICAgICAgICB2YXIgcGF0aHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdmFyIGludmVy
dFVWID0gb3B0aW9ucy5pbnZlcnRVViB8fCBmYWxzZTsKKyAgICAgICAgdmFyIGkgPSAwOworICAg
ICAgICB2YXIgcCA9IDA7CisgICAgICAgIHZhciBzdGVwID0gcGkyIC8gdGVzc2VsbGF0aW9uICog
YXJjOworICAgICAgICB2YXIgcm90YXRlZDsKKyAgICAgICAgdmFyIHBhdGggPSBuZXcgQXJyYXko
KTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8PSB0ZXNzZWxsYXRpb24gLSBjbGlwOyBpKyspIHsK
KyAgICAgICAgICAgIHZhciBwYXRoID0gW107CisgICAgICAgICAgICBpZiAoY2FwID09IF9tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfU1RBUlQgfHwgY2FwID09
IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfQUxMKSB7Cisg
ICAgICAgICAgICAgICAgcGF0aC5wdXNoKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIHNoYXBlWzBdLnksIDApKTsKKyAgICAg
ICAgICAgICAgICBwYXRoLnB1c2gobmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oTWF0aC5jb3MoaSAqIHN0ZXApICogc2hhcGVbMF0u
eCAqIHJhZGl1cywgc2hhcGVbMF0ueSwgTWF0aC5zaW4oaSAqIHN0ZXApICogc2hhcGVbMF0ueCAq
IHJhZGl1cykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChwID0gMDsgcCA8IHNo
YXBlLmxlbmd0aDsgcCsrKSB7CisgICAgICAgICAgICAgICAgcm90YXRlZCA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKE1hdGgu
Y29zKGkgKiBzdGVwKSAqIHNoYXBlW3BdLnggKiByYWRpdXMsIHNoYXBlW3BdLnksIE1hdGguc2lu
KGkgKiBzdGVwKSAqIHNoYXBlW3BdLnggKiByYWRpdXMpOworICAgICAgICAgICAgICAgIHBhdGgu
cHVzaChyb3RhdGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYXAgPT0gX21l
c2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNBUF9FTkQgfHwgY2FwID09
IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfQUxMKSB7Cisg
ICAgICAgICAgICAgICAgcGF0aC5wdXNoKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKE1hdGguY29zKGkgKiBzdGVwKSAqIHNoYXBl
W3NoYXBlLmxlbmd0aCAtIDFdLnggKiByYWRpdXMsIHNoYXBlW3NoYXBlLmxlbmd0aCAtIDFdLnks
IE1hdGguc2luKGkgKiBzdGVwKSAqIHNoYXBlW3NoYXBlLmxlbmd0aCAtIDFdLnggKiByYWRpdXMp
KTsKKyAgICAgICAgICAgICAgICBwYXRoLnB1c2gobmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMCwgc2hhcGVbc2hhcGUubGVuZ3Ro
IC0gMV0ueSwgMCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGF0aHMucHVzaChwYXRo
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBsYXRoZSByaWJib24KKyAgICAgICAgdmFyIGxhdGhl
ID0gX3JpYmJvbkJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUmliYm9uQnVp
bGRlciJdLkNyZWF0ZVJpYmJvbihuYW1lLCB7IHBhdGhBcnJheTogcGF0aHMsIGNsb3NlQXJyYXk6
IGNsb3NlZCwgc2lkZU9yaWVudGF0aW9uOiBzaWRlT3JpZW50YXRpb24sIHVwZGF0YWJsZTogdXBk
YXRhYmxlLCBpbnZlcnRVVjogaW52ZXJ0VVYsIGZyb250VVZzOiBvcHRpb25zLmZyb250VVZzLCBi
YWNrVVZzOiBvcHRpb25zLmJhY2tVVnMgfSwgc2NlbmUpOworICAgICAgICByZXR1cm4gbGF0aGU7
CisgICAgfTsKKyAgICByZXR1cm4gTGF0aGVCdWlsZGVyOworfSgpKTsKKworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRlcnMvbGluZXNCdWlsZGVyLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NZXNoZXMv
QnVpbGRlcnMvbGluZXNCdWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IExpbmVzQnVpbGRlciAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaW5lc0J1aWxkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIExpbmVzQnVpbGRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9t
YXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tZXNoICov
ICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfdmVy
dGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2xpbmVzTWVzaF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVz
L2xpbmVzTWVzaCAqLyAiLi9NZXNoZXMvbGluZXNNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1
ZmZlci50cyIpOworCisKKworCisKK19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siVmVydGV4RGF0YSJdLkNyZWF0ZUxpbmVTeXN0ZW0gPSBmdW5jdGlvbiAob3B0
aW9ucykgeworICAgIHZhciBpbmRpY2VzID0gW107CisgICAgdmFyIHBvc2l0aW9ucyA9IFtdOwor
ICAgIHZhciBsaW5lcyA9IG9wdGlvbnMubGluZXM7CisgICAgdmFyIGNvbG9ycyA9IG9wdGlvbnMu
Y29sb3JzOworICAgIHZhciB2ZXJ0ZXhDb2xvcnMgPSBbXTsKKyAgICB2YXIgaWR4ID0gMDsKKyAg
ICBmb3IgKHZhciBsID0gMDsgbCA8IGxpbmVzLmxlbmd0aDsgbCsrKSB7CisgICAgICAgIHZhciBw
b2ludHMgPSBsaW5lc1tsXTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHBv
aW50cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHBvaW50
c1tpbmRleF0ueCwgcG9pbnRzW2luZGV4XS55LCBwb2ludHNbaW5kZXhdLnopOworICAgICAgICAg
ICAgaWYgKGNvbG9ycykgeworICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGNvbG9yc1tsXTsK
KyAgICAgICAgICAgICAgICB2ZXJ0ZXhDb2xvcnMucHVzaChjb2xvcltpbmRleF0uciwgY29sb3Jb
aW5kZXhdLmcsIGNvbG9yW2luZGV4XS5iLCBjb2xvcltpbmRleF0uYSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5w
dXNoKGlkeCAtIDEpOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChpZHgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWR4Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgdmFyIHZl
cnRleERhdGEgPSBuZXcgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAgICB2ZXJ0ZXhEYXRhLmluZGljZXMgPSBpbmRpY2VzOwor
ICAgIHZlcnRleERhdGEucG9zaXRpb25zID0gcG9zaXRpb25zOworICAgIGlmIChjb2xvcnMpIHsK
KyAgICAgICAgdmVydGV4RGF0YS5jb2xvcnMgPSB2ZXJ0ZXhDb2xvcnM7CisgICAgfQorICAgIHJl
dHVybiB2ZXJ0ZXhEYXRhOworfTsKK19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siVmVydGV4RGF0YSJdLkNyZWF0ZURhc2hlZExpbmVzID0gZnVuY3Rpb24gKG9w
dGlvbnMpIHsKKyAgICB2YXIgZGFzaFNpemUgPSBvcHRpb25zLmRhc2hTaXplIHx8IDM7CisgICAg
dmFyIGdhcFNpemUgPSBvcHRpb25zLmdhcFNpemUgfHwgMTsKKyAgICB2YXIgZGFzaE5iID0gb3B0
aW9ucy5kYXNoTmIgfHwgMjAwOworICAgIHZhciBwb2ludHMgPSBvcHRpb25zLnBvaW50czsKKyAg
ICB2YXIgcG9zaXRpb25zID0gbmV3IEFycmF5KCk7CisgICAgdmFyIGluZGljZXMgPSBuZXcgQXJy
YXkoKTsKKyAgICB2YXIgY3VydmVjdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgIHZhciBsZyA9IDA7CisgICAg
dmFyIG5iID0gMDsKKyAgICB2YXIgc2hmdCA9IDA7CisgICAgdmFyIGRhc2hzaGZ0ID0gMDsKKyAg
ICB2YXIgY3Vyc2hmdCA9IDA7CisgICAgdmFyIGlkeCA9IDA7CisgICAgdmFyIGkgPSAwOworICAg
IGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgICAgIHBvaW50
c1tpICsgMV0uc3VidHJhY3RUb1JlZihwb2ludHNbaV0sIGN1cnZlY3QpOworICAgICAgICBsZyAr
PSBjdXJ2ZWN0Lmxlbmd0aCgpOworICAgIH0KKyAgICBzaGZ0ID0gbGcgLyBkYXNoTmI7CisgICAg
ZGFzaHNoZnQgPSBkYXNoU2l6ZSAqIHNoZnQgLyAoZGFzaFNpemUgKyBnYXBTaXplKTsKKyAgICBm
b3IgKGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykgeworICAgICAgICBwb2ludHNb
aSArIDFdLnN1YnRyYWN0VG9SZWYocG9pbnRzW2ldLCBjdXJ2ZWN0KTsKKyAgICAgICAgbmIgPSBN
YXRoLmZsb29yKGN1cnZlY3QubGVuZ3RoKCkgLyBzaGZ0KTsKKyAgICAgICAgY3VydmVjdC5ub3Jt
YWxpemUoKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuYjsgaisrKSB7CisgICAgICAg
ICAgICBjdXJzaGZ0ID0gc2hmdCAqIGo7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChwb2lu
dHNbaV0ueCArIGN1cnNoZnQgKiBjdXJ2ZWN0LngsIHBvaW50c1tpXS55ICsgY3Vyc2hmdCAqIGN1
cnZlY3QueSwgcG9pbnRzW2ldLnogKyBjdXJzaGZ0ICogY3VydmVjdC56KTsKKyAgICAgICAgICAg
IHBvc2l0aW9ucy5wdXNoKHBvaW50c1tpXS54ICsgKGN1cnNoZnQgKyBkYXNoc2hmdCkgKiBjdXJ2
ZWN0LngsIHBvaW50c1tpXS55ICsgKGN1cnNoZnQgKyBkYXNoc2hmdCkgKiBjdXJ2ZWN0LnksIHBv
aW50c1tpXS56ICsgKGN1cnNoZnQgKyBkYXNoc2hmdCkgKiBjdXJ2ZWN0LnopOworICAgICAgICAg
ICAgaW5kaWNlcy5wdXNoKGlkeCwgaWR4ICsgMSk7CisgICAgICAgICAgICBpZHggKz0gMjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAvLyBSZXN1bHQKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBf
bWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleERhdGEi
XSgpOworICAgIHZlcnRleERhdGEucG9zaXRpb25zID0gcG9zaXRpb25zOworICAgIHZlcnRleERh
dGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZUxpbmVzID0gZnVuY3Rp
b24gKG5hbWUsIHBvaW50cywgc2NlbmUsIHVwZGF0YWJsZSwgaW5zdGFuY2UpIHsKKyAgICBpZiAo
c2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICBpZiAodXBkYXRhYmxlID09
PSB2b2lkIDApIHsgdXBkYXRhYmxlID0gZmFsc2U7IH0KKyAgICBpZiAoaW5zdGFuY2UgPT09IHZv
aWQgMCkgeyBpbnN0YW5jZSA9IG51bGw7IH0KKyAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAg
cG9pbnRzOiBwb2ludHMsCisgICAgICAgIHVwZGF0YWJsZTogdXBkYXRhYmxlLAorICAgICAgICBp
bnN0YW5jZTogaW5zdGFuY2UKKyAgICB9OworICAgIHJldHVybiBMaW5lc0J1aWxkZXIuQ3JlYXRl
TGluZXMobmFtZSwgb3B0aW9ucywgc2NlbmUpOworfTsKK19tZXNoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIk1lc2giXS5DcmVhdGVEYXNoZWRMaW5lcyA9IGZ1bmN0aW9uIChuYW1lLCBw
b2ludHMsIGRhc2hTaXplLCBnYXBTaXplLCBkYXNoTmIsIHNjZW5lLCB1cGRhdGFibGUsIGluc3Rh
bmNlKSB7CisgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAg
dmFyIG9wdGlvbnMgPSB7CisgICAgICAgIHBvaW50czogcG9pbnRzLAorICAgICAgICBkYXNoU2l6
ZTogZGFzaFNpemUsCisgICAgICAgIGdhcFNpemU6IGdhcFNpemUsCisgICAgICAgIGRhc2hOYjog
ZGFzaE5iLAorICAgICAgICB1cGRhdGFibGU6IHVwZGF0YWJsZSwKKyAgICAgICAgaW5zdGFuY2U6
IGluc3RhbmNlCisgICAgfTsKKyAgICByZXR1cm4gTGluZXNCdWlsZGVyLkNyZWF0ZURhc2hlZExp
bmVzKG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKK307CisvKioKKyAqIENsYXNzIGNvbnRhaW5pbmcg
c3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWlsZCBtZXNoZXMKKyAqLwor
dmFyIExpbmVzQnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5j
dGlvbiBMaW5lc0J1aWxkZXIoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBs
aW5lIHN5c3RlbSBtZXNoLiBBIGxpbmUgc3lzdGVtIGlzIGEgcG9vbCBvZiBtYW55IGxpbmVzIGdh
dGhlcmVkIGluIGEgc2luZ2xlIG1lc2gKKyAgICAgKiAqIEEgbGluZSBzeXN0ZW0gbWVzaCBpcyBj
b25zaWRlcmVkIGFzIGEgcGFyYW1ldHJpYyBzaGFwZSBzaW5jZSBpdCBoYXMgbm8gcHJlZGVmaW5l
ZCBvcmlnaW5hbCBzaGFwZS4gSXRzIHNoYXBlIGlzIGRldGVybWluZWQgYnkgdGhlIHBhc3NlZCBh
cnJheSBvZiBsaW5lcyBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIKKyAgICAgKiAqIExpa2UgZXZlcnkg
b3RoZXIgcGFyYW1ldHJpYyBzaGFwZSwgaXQgaXMgZHluYW1pY2FsbHkgdXBkYXRhYmxlIGJ5IHBh
c3NpbmcgYW4gZXhpc3RpbmcgaW5zdGFuY2Ugb2YgTGluZVN5c3RlbSB0byB0aGlzIHN0YXRpYyBm
dW5jdGlvbgorICAgICAqICogVGhlIHBhcmFtZXRlciBgbGluZXNgIGlzIGFuIGFycmF5IG9mIGxp
bmVzLCBlYWNoIGxpbmUgYmVpbmcgYW4gYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzCisgICAg
ICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnN0YW5jZWAgaXMgYW4gaW5zdGFuY2Ugb2Yg
YW4gZXhpc3RpbmcgTGluZVN5c3RlbSBvYmplY3QgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZSBwYXNz
ZWQgYGxpbmVzYCBwYXJhbWV0ZXIKKyAgICAgKiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYGNv
bG9yc2AgaXMgYW4gYXJyYXkgb2YgbGluZSBjb2xvcnMsIGVhY2ggbGluZSBjb2xvcnMgYmVpbmcg
YW4gYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBDb2xvcjQsIG9uZSBwZXIgbGluZSBwb2ludAorICAgICAq
ICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgdXNlVmVydGV4QWxwaGFgIGlzIHRvIGJlIHNldCB0
byBgZmFsc2VgIChkZWZhdWx0IGB0cnVlYCkgd2hlbiB5b3UgZG9uJ3QgbmVlZCB0aGUgYWxwaGEg
YmxlbmRpbmcgKGZhc3RlcikKKyAgICAgKiAqIFVwZGF0aW5nIGEgc2ltcGxlIExpbmUgbWVzaCwg
eW91IGp1c3QgbmVlZCB0byB1cGRhdGUgZXZlcnkgbGluZSBpbiB0aGUgYGxpbmVzYCBhcnJheSA6
IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b19keW5hbWljYWxseV9tb3Jw
aF9hX21lc2gjbGluZXMtYW5kLWRhc2hlZGxpbmVzCisgICAgICogKiBXaGVuIHVwZGF0aW5nIGFu
IGluc3RhbmNlLCByZW1lbWJlciB0aGF0IG9ubHkgbGluZSBwb2ludCBwb3NpdGlvbnMgY2FuIGNo
YW5nZSwgbm90IHRoZSBudW1iZXIgb2YgcG9pbnRzLCBuZWl0aGVyIHRoZSBudW1iZXIgb2YgbGlu
ZXMKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhlIGJv
b2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50ZXJu
YWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAorICAgICAqIEBz
ZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjbGlu
ZS1zeXN0ZW0KKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBuZXcg
bGluZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVz
ZWQgdG8gY3JlYXRlIHRoZSBsaW5lIHN5c3RlbQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVz
IHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgYSBuZXcgbGluZSBzeXN0ZW0gbWVz
aAorICAgICAqLworICAgIExpbmVzQnVpbGRlci5DcmVhdGVMaW5lU3lzdGVtID0gZnVuY3Rpb24g
KG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIHZhciBpbnN0YW5jZSA9IG9wdGlvbnMu
aW5zdGFuY2U7CisgICAgICAgIHZhciBsaW5lcyA9IG9wdGlvbnMubGluZXM7CisgICAgICAgIHZh
ciBjb2xvcnMgPSBvcHRpb25zLmNvbG9yczsKKyAgICAgICAgaWYgKGluc3RhbmNlKSB7IC8vIGxp
bmVzIHVwZGF0ZQorICAgICAgICAgICAgdmFyIHBvc2l0aW9ucyA9IGluc3RhbmNlLmdldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0
ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpOworICAgICAgICAgICAgdmFyIHZlcnRleENvbG9yOwor
ICAgICAgICAgICAgdmFyIGxpbmVDb2xvcnM7CisgICAgICAgICAgICBpZiAoY29sb3JzKSB7Cisg
ICAgICAgICAgICAgICAgdmVydGV4Q29sb3IgPSBpbnN0YW5jZS5nZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVydGV4QnVmZmVyIl0u
Q29sb3JLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBpID0gMDsKKyAgICAg
ICAgICAgIHZhciBjID0gMDsKKyAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgbGluZXMu
bGVuZ3RoOyBsKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcG9pbnRzID0gbGluZXNbbF07Cisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBwb2ludHMubGVuZ3RoOyBwKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW2ldID0gcG9pbnRzW3BdLng7CisgICAgICAg
ICAgICAgICAgICAgIHBvc2l0aW9uc1tpICsgMV0gPSBwb2ludHNbcF0ueTsKKyAgICAgICAgICAg
ICAgICAgICAgcG9zaXRpb25zW2kgKyAyXSA9IHBvaW50c1twXS56OworICAgICAgICAgICAgICAg
ICAgICBpZiAoY29sb3JzICYmIHZlcnRleENvbG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lQ29sb3JzID0gY29sb3JzW2xdOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4
Q29sb3JbY10gPSBsaW5lQ29sb3JzW3BdLnI7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0
ZXhDb2xvcltjICsgMV0gPSBsaW5lQ29sb3JzW3BdLmc7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2ZXJ0ZXhDb2xvcltjICsgMl0gPSBsaW5lQ29sb3JzW3BdLmI7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhDb2xvcltjICsgM10gPSBsaW5lQ29sb3JzW3BdLmE7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjICs9IDQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGluc3RhbmNlLnVwZGF0ZVZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHBvc2l0
aW9ucywgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChjb2xvcnMgJiYgdmVydGV4Q29s
b3IpIHsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVydGV4QnVmZmVyIl0uQ29s
b3JLaW5kLCB2ZXJ0ZXhDb2xvciwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICAgICAgfQorICAgICAgICAvLyBsaW5lIHN5c3Rl
bSBjcmVhdGlvbgorICAgICAgICB2YXIgdXNlVmVydGV4Q29sb3IgPSAoY29sb3JzKSA/IHRydWUg
OiBmYWxzZTsKKyAgICAgICAgdmFyIGxpbmVTeXN0ZW0gPSBuZXcgX01lc2hlc19saW5lc01lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTGluZXNNZXNoIl0obmFtZSwgc2NlbmUsIG51
bGwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1c2VWZXJ0ZXhDb2xvciwgb3B0aW9ucy51c2VWZXJ0
ZXhBbHBoYSk7CisgICAgICAgIHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlTGluZVN5c3RlbShv
cHRpb25zKTsKKyAgICAgICAgdmVydGV4RGF0YS5hcHBseVRvTWVzaChsaW5lU3lzdGVtLCBvcHRp
b25zLnVwZGF0YWJsZSk7CisgICAgICAgIHJldHVybiBsaW5lU3lzdGVtOworICAgIH07CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIGxpbmUgbWVzaAorICAgICAqIEEgbGluZSBtZXNoIGlzIGNv
bnNpZGVyZWQgYXMgYSBwYXJhbWV0cmljIHNoYXBlIHNpbmNlIGl0IGhhcyBubyBwcmVkZWZpbmVk
IG9yaWdpbmFsIHNoYXBlLiBJdHMgc2hhcGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcGFzc2VkIGFy
cmF5IG9mIHBvaW50cyBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIKKyAgICAgKiAqIExpa2UgZXZlcnkg
b3RoZXIgcGFyYW1ldHJpYyBzaGFwZSwgaXQgaXMgZHluYW1pY2FsbHkgdXBkYXRhYmxlIGJ5IHBh
c3NpbmcgYW4gZXhpc3RpbmcgaW5zdGFuY2Ugb2YgTGluZU1lc2ggdG8gdGhpcyBzdGF0aWMgZnVu
Y3Rpb24KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHBvaW50c2AgaXMgYW4gYXJyYXkgc3VjY2Vz
c2l2ZSBWZWN0b3IzCisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnN0YW5jZWAg
aXMgYW4gaW5zdGFuY2Ugb2YgYW4gZXhpc3RpbmcgTGluZU1lc2ggb2JqZWN0IHRvIGJlIHVwZGF0
ZWQgd2l0aCB0aGUgcGFzc2VkIGBwb2ludHNgIHBhcmFtZXRlciA6IGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vaG93X3RvL2hvd190b19keW5hbWljYWxseV9tb3JwaF9hX21lc2gjbGluZXMtYW5k
LWRhc2hlZGxpbmVzCisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBjb2xvcnNgIGlz
IGFuIGFycmF5IG9mIHN1Y2Nlc3NpdmUgQ29sb3I0LCBvbmUgcGVyIGxpbmUgcG9pbnQKKyAgICAg
KiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYHVzZVZlcnRleEFscGhhYCBpcyB0byBiZSBzZXQg
dG8gYGZhbHNlYCAoZGVmYXVsdCBgdHJ1ZWApIHdoZW4geW91IGRvbid0IG5lZWQgYWxwaGEgYmxl
bmRpbmcgKGZhc3RlcikKKyAgICAgKiAqIFdoZW4gdXBkYXRpbmcgYW4gaW5zdGFuY2UsIHJlbWVt
YmVyIHRoYXQgb25seSBwb2ludCBwb3NpdGlvbnMgY2FuIGNoYW5nZSwgbm90IHRoZSBudW1iZXIg
b2YgcG9pbnRzCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRo
IHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRz
IGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAg
ICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BhcmFtZXRyaWNfc2hh
cGVzI2xpbmVzCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3
IGxpbmUgc3lzdGVtCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1
c2VkIHRvIGNyZWF0ZSB0aGUgbGluZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5l
cyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIGEgbmV3IGxpbmUgbWVzaAorICAg
ICAqLworICAgIExpbmVzQnVpbGRlci5DcmVhdGVMaW5lcyA9IGZ1bmN0aW9uIChuYW1lLCBvcHRp
b25zLCBzY2VuZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51
bGw7IH0KKyAgICAgICAgdmFyIGNvbG9ycyA9IChvcHRpb25zLmNvbG9ycykgPyBbb3B0aW9ucy5j
b2xvcnNdIDogbnVsbDsKKyAgICAgICAgdmFyIGxpbmVzID0gTGluZXNCdWlsZGVyLkNyZWF0ZUxp
bmVTeXN0ZW0obmFtZSwgeyBsaW5lczogW29wdGlvbnMucG9pbnRzXSwgdXBkYXRhYmxlOiBvcHRp
b25zLnVwZGF0YWJsZSwgaW5zdGFuY2U6IG9wdGlvbnMuaW5zdGFuY2UsIGNvbG9yczogY29sb3Jz
LCB1c2VWZXJ0ZXhBbHBoYTogb3B0aW9ucy51c2VWZXJ0ZXhBbHBoYSB9LCBzY2VuZSk7CisgICAg
ICAgIHJldHVybiBsaW5lczsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBkYXNo
ZWQgbGluZSBtZXNoCisgICAgICogKiBBIGRhc2hlZCBsaW5lIG1lc2ggaXMgY29uc2lkZXJlZCBh
cyBhIHBhcmFtZXRyaWMgc2hhcGUgc2luY2UgaXQgaGFzIG5vIHByZWRlZmluZWQgb3JpZ2luYWwg
c2hhcGUuIEl0cyBzaGFwZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwYXNzZWQgYXJyYXkgb2YgcG9p
bnRzIGFzIGFuIGlucHV0IHBhcmFtZXRlcgorICAgICAqICogTGlrZSBldmVyeSBvdGhlciBwYXJh
bWV0cmljIHNoYXBlLCBpdCBpcyBkeW5hbWljYWxseSB1cGRhdGFibGUgYnkgcGFzc2luZyBhbiBl
eGlzdGluZyBpbnN0YW5jZSBvZiBMaW5lTWVzaCB0byB0aGlzIHN0YXRpYyBmdW5jdGlvbgorICAg
ICAqICogVGhlIHBhcmFtZXRlciBgcG9pbnRzYCBpcyBhbiBhcnJheSBzdWNjZXNzaXZlIFZlY3Rv
cjMKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGRhc2hOYmAgaXMgdGhlIGludGVuZGVkIHRvdGFs
IG51bWJlciBvZiBkYXNoZXMgKHBvc2l0aXZlIGludGVnZXIsIGRlZmF1bHQgMjAwKQorICAgICAq
ICogVGhlIHBhcmFtZXRlciBgZGFzaFNpemVgIGlzIHRoZSBzaXplIG9mIHRoZSBkYXNoZXMgcmVs
YXRpdmVseSB0aGUgZGFzaCBudW1iZXIgKHBvc2l0aXZlIGZsb2F0LCBkZWZhdWx0IDMpCisgICAg
ICogKiBUaGUgcGFyYW1ldGVyIGBnYXBTaXplYCBpcyB0aGUgc2l6ZSBvZiB0aGUgZ2FwIGJldHdl
ZW4gdHdvIHN1Y2Nlc3NpdmUgZGFzaGVzIHJlbGF0aXZlbHkgdGhlIGRhc2ggbnVtYmVyIChwb3Np
dGl2ZSBmbG9hdCwgZGVmYXVsdCAxKQorICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBg
aW5zdGFuY2VgIGlzIGFuIGluc3RhbmNlIG9mIGFuIGV4aXN0aW5nIExpbmVNZXNoIG9iamVjdCB0
byBiZSB1cGRhdGVkIHdpdGggdGhlIHBhc3NlZCBgcG9pbnRzYCBwYXJhbWV0ZXIgOiBodHRwczov
L2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fZHluYW1pY2FsbHlfbW9ycGhfYV9tZXNo
I2xpbmVzLWFuZC1kYXNoZWRsaW5lcworICAgICAqICogV2hlbiB1cGRhdGluZyBhbiBpbnN0YW5j
ZSwgcmVtZW1iZXIgdGhhdCBvbmx5IHBvaW50IHBvc2l0aW9ucyBjYW4gY2hhbmdlLCBub3QgdGhl
IG51bWJlciBvZiBwb2ludHMKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRh
YmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNl
KSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3Jl
YXRlZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAg
ICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRo
ZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgZGFzaGVkIGxpbmUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9k
b2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjZGFzaGVkLWxpbmVzCisg
ICAgICovCisgICAgTGluZXNCdWlsZGVyLkNyZWF0ZURhc2hlZExpbmVzID0gZnVuY3Rpb24gKG5h
bWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNj
ZW5lID0gbnVsbDsgfQorICAgICAgICB2YXIgcG9pbnRzID0gb3B0aW9ucy5wb2ludHM7CisgICAg
ICAgIHZhciBpbnN0YW5jZSA9IG9wdGlvbnMuaW5zdGFuY2U7CisgICAgICAgIHZhciBnYXBTaXpl
ID0gb3B0aW9ucy5nYXBTaXplIHx8IDE7CisgICAgICAgIHZhciBkYXNoU2l6ZSA9IG9wdGlvbnMu
ZGFzaFNpemUgfHwgMzsKKyAgICAgICAgaWYgKGluc3RhbmNlKSB7IC8vICBkYXNoZWQgbGluZXMg
dXBkYXRlCisgICAgICAgICAgICB2YXIgcG9zaXRpb25GdW5jdGlvbiA9IGZ1bmN0aW9uIChwb3Np
dGlvbnMpIHsKKyAgICAgICAgICAgICAgICB2YXIgY3VydmVjdCA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAg
ICAgICAgICAgIHZhciBuYlNlZyA9IHBvc2l0aW9ucy5sZW5ndGggLyA2OworICAgICAgICAgICAg
ICAgIHZhciBsZyA9IDA7CisgICAgICAgICAgICAgICAgdmFyIG5iID0gMDsKKyAgICAgICAgICAg
ICAgICB2YXIgc2hmdCA9IDA7CisgICAgICAgICAgICAgICAgdmFyIGRhc2hzaGZ0ID0gMDsKKyAg
ICAgICAgICAgICAgICB2YXIgY3Vyc2hmdCA9IDA7CisgICAgICAgICAgICAgICAgdmFyIHAgPSAw
OworICAgICAgICAgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgICAgICAgICB2YXIgaiA9IDA7
CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2kgKyAxXS5zdWJ0cmFjdFRvUmVmKHBvaW50
c1tpXSwgY3VydmVjdCk7CisgICAgICAgICAgICAgICAgICAgIGxnICs9IGN1cnZlY3QubGVuZ3Ro
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNoZnQgPSBsZyAvIG5iU2Vn
OworICAgICAgICAgICAgICAgIHZhciBkYXNoU2l6ZSA9IGluc3RhbmNlLl9jcmVhdGlvbkRhdGFT
dG9yYWdlLmRhc2hTaXplOworICAgICAgICAgICAgICAgIHZhciBnYXBTaXplID0gaW5zdGFuY2Uu
X2NyZWF0aW9uRGF0YVN0b3JhZ2UuZ2FwU2l6ZTsKKyAgICAgICAgICAgICAgICBkYXNoc2hmdCA9
IGRhc2hTaXplICogc2hmdCAvIChkYXNoU2l6ZSArIGdhcFNpemUpOworICAgICAgICAgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIHBvaW50c1tpICsgMV0uc3VidHJhY3RUb1JlZihwb2ludHNbaV0sIGN1cnZlY3QpOwor
ICAgICAgICAgICAgICAgICAgICBuYiA9IE1hdGguZmxvb3IoY3VydmVjdC5sZW5ndGgoKSAvIHNo
ZnQpOworICAgICAgICAgICAgICAgICAgICBjdXJ2ZWN0Lm5vcm1hbGl6ZSgpOworICAgICAgICAg
ICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBuYiAmJiBw
IDwgcG9zaXRpb25zLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc2hmdCA9
IHNoZnQgKiBqOworICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW3BdID0gcG9pbnRz
W2ldLnggKyBjdXJzaGZ0ICogY3VydmVjdC54OworICAgICAgICAgICAgICAgICAgICAgICAgcG9z
aXRpb25zW3AgKyAxXSA9IHBvaW50c1tpXS55ICsgY3Vyc2hmdCAqIGN1cnZlY3QueTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1twICsgMl0gPSBwb2ludHNbaV0ueiArIGN1cnNo
ZnQgKiBjdXJ2ZWN0Lno7CisgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbcCArIDNd
ID0gcG9pbnRzW2ldLnggKyAoY3Vyc2hmdCArIGRhc2hzaGZ0KSAqIGN1cnZlY3QueDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1twICsgNF0gPSBwb2ludHNbaV0ueSArIChjdXJz
aGZ0ICsgZGFzaHNoZnQpICogY3VydmVjdC55OworICAgICAgICAgICAgICAgICAgICAgICAgcG9z
aXRpb25zW3AgKyA1XSA9IHBvaW50c1tpXS56ICsgKGN1cnNoZnQgKyBkYXNoc2hmdCkgKiBjdXJ2
ZWN0Lno7CisgICAgICAgICAgICAgICAgICAgICAgICBwICs9IDY7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBwb3NpdGlvbnMubGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgICAgIHBvc2l0aW9uc1twXSA9IHBvaW50c1tpXS54OworICAgICAgICAgICAgICAgICAg
ICBwb3NpdGlvbnNbcCArIDFdID0gcG9pbnRzW2ldLnk7CisgICAgICAgICAgICAgICAgICAgIHBv
c2l0aW9uc1twICsgMl0gPSBwb2ludHNbaV0uejsKKyAgICAgICAgICAgICAgICAgICAgcCArPSAz
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpbnN0YW5j
ZS51cGRhdGVNZXNoUG9zaXRpb25zKHBvc2l0aW9uRnVuY3Rpb24sIGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICAgICAgfQorICAgICAgICAvLyBkYXNoZWQgbGluZXMg
Y3JlYXRpb24KKyAgICAgICAgdmFyIGRhc2hlZExpbmVzID0gbmV3IF9NZXNoZXNfbGluZXNNZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkxpbmVzTWVzaCJdKG5hbWUsIHNjZW5lKTsK
KyAgICAgICAgdmFyIHZlcnRleERhdGEgPSBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlZlcnRleERhdGEiXS5DcmVhdGVEYXNoZWRMaW5lcyhvcHRpb25zKTsK
KyAgICAgICAgdmVydGV4RGF0YS5hcHBseVRvTWVzaChkYXNoZWRMaW5lcywgb3B0aW9ucy51cGRh
dGFibGUpOworICAgICAgICBkYXNoZWRMaW5lcy5fY3JlYXRpb25EYXRhU3RvcmFnZSA9IG5ldyBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJfQ3JlYXRpb25EYXRhU3RvcmFnZSJd
KCk7CisgICAgICAgIGRhc2hlZExpbmVzLl9jcmVhdGlvbkRhdGFTdG9yYWdlLmRhc2hTaXplID0g
ZGFzaFNpemU7CisgICAgICAgIGRhc2hlZExpbmVzLl9jcmVhdGlvbkRhdGFTdG9yYWdlLmdhcFNp
emUgPSBnYXBTaXplOworICAgICAgICByZXR1cm4gZGFzaGVkTGluZXM7CisgICAgfTsKKyAgICBy
ZXR1cm4gTGluZXNCdWlsZGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9N
ZXNoZXMvQnVpbGRlcnMvcGxhbmVCdWlsZGVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NZXNoZXMvQnVpbGRlcnMvcGxhbmVC
dWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBsYW5lQnVpbGRlciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJQbGFuZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFBsYW5lQnVpbGRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2gg
Ki8gIi4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF92
ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9tZXNoLnZlcnRleERhdGEgKi8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50
cyIpOworCisKK19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVydGV4RGF0YSJdLkNyZWF0ZVBsYW5lID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICB2YXIg
aW5kaWNlcyA9IFtdOworICAgIHZhciBwb3NpdGlvbnMgPSBbXTsKKyAgICB2YXIgbm9ybWFscyA9
IFtdOworICAgIHZhciB1dnMgPSBbXTsKKyAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoIHx8
IG9wdGlvbnMuc2l6ZSB8fCAxOworICAgIHZhciBoZWlnaHQgPSBvcHRpb25zLmhlaWdodCB8fCBv
cHRpb25zLnNpemUgfHwgMTsKKyAgICB2YXIgc2lkZU9yaWVudGF0aW9uID0gKG9wdGlvbnMuc2lk
ZU9yaWVudGF0aW9uID09PSAwKSA/IDAgOiBvcHRpb25zLnNpZGVPcmllbnRhdGlvbiB8fCBfbWVz
aF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleERhdGEiXS5E
RUZBVUxUU0lERTsKKyAgICAvLyBWZXJ0aWNlcworICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAv
IDIuMDsKKyAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDIuMDsKKyAgICBwb3NpdGlvbnMu
cHVzaCgtaGFsZldpZHRoLCAtaGFsZkhlaWdodCwgMCk7CisgICAgbm9ybWFscy5wdXNoKDAsIDAs
IC0xLjApOworICAgIHV2cy5wdXNoKDAuMCwgMC4wKTsKKyAgICBwb3NpdGlvbnMucHVzaChoYWxm
V2lkdGgsIC1oYWxmSGVpZ2h0LCAwKTsKKyAgICBub3JtYWxzLnB1c2goMCwgMCwgLTEuMCk7Cisg
ICAgdXZzLnB1c2goMS4wLCAwLjApOworICAgIHBvc2l0aW9ucy5wdXNoKGhhbGZXaWR0aCwgaGFs
ZkhlaWdodCwgMCk7CisgICAgbm9ybWFscy5wdXNoKDAsIDAsIC0xLjApOworICAgIHV2cy5wdXNo
KDEuMCwgMS4wKTsKKyAgICBwb3NpdGlvbnMucHVzaCgtaGFsZldpZHRoLCBoYWxmSGVpZ2h0LCAw
KTsKKyAgICBub3JtYWxzLnB1c2goMCwgMCwgLTEuMCk7CisgICAgdXZzLnB1c2goMC4wLCAxLjAp
OworICAgIC8vIEluZGljZXMKKyAgICBpbmRpY2VzLnB1c2goMCk7CisgICAgaW5kaWNlcy5wdXNo
KDEpOworICAgIGluZGljZXMucHVzaCgyKTsKKyAgICBpbmRpY2VzLnB1c2goMCk7CisgICAgaW5k
aWNlcy5wdXNoKDIpOworICAgIGluZGljZXMucHVzaCgzKTsKKyAgICAvLyBTaWRlcworICAgIF9t
ZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4RGF0YSJd
Ll9Db21wdXRlU2lkZXMoc2lkZU9yaWVudGF0aW9uLCBwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1h
bHMsIHV2cywgb3B0aW9ucy5mcm9udFVWcywgb3B0aW9ucy5iYWNrVVZzKTsKKyAgICAvLyBSZXN1
bHQKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlcnRleERhdGEiXSgpOworICAgIHZlcnRleERhdGEuaW5kaWNl
cyA9IGluZGljZXM7CisgICAgdmVydGV4RGF0YS5wb3NpdGlvbnMgPSBwb3NpdGlvbnM7CisgICAg
dmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRhLnV2cyA9IHV2czsK
KyAgICByZXR1cm4gdmVydGV4RGF0YTsKK307CitfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJNZXNoIl0uQ3JlYXRlUGxhbmUgPSBmdW5jdGlvbiAobmFtZSwgc2l6ZSwgc2NlbmUs
IHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uKSB7CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAg
ICAgIHNpemU6IHNpemUsCisgICAgICAgIHdpZHRoOiBzaXplLAorICAgICAgICBoZWlnaHQ6IHNp
emUsCisgICAgICAgIHNpZGVPcmllbnRhdGlvbjogc2lkZU9yaWVudGF0aW9uLAorICAgICAgICB1
cGRhdGFibGU6IHVwZGF0YWJsZQorICAgIH07CisgICAgcmV0dXJuIFBsYW5lQnVpbGRlci5DcmVh
dGVQbGFuZShuYW1lLCBvcHRpb25zLCBzY2VuZSk7Cit9OworLyoqCisgKiBDbGFzcyBjb250YWlu
aW5nIHN0YXRpYyBmdW5jdGlvbnMgdG8gaGVscCBwcm9jZWR1cmFsbHkgYnVpbGQgbWVzaGVzCisg
Ki8KK3ZhciBQbGFuZUJ1aWxkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
ZnVuY3Rpb24gUGxhbmVCdWlsZGVyKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgcGxhbmUgbWVzaAorICAgICAqICogVGhlIHBhcmFtZXRlciBgc2l6ZWAgc2V0cyB0aGUgc2l6
ZSAoZmxvYXQpIG9mIGJvdGggc2lkZXMgb2YgdGhlIHBsYW5lIGF0IG9uY2UgKGRlZmF1bHQgMSkK
KyAgICAgKiAqIFlvdSBjYW4gc2V0IHNvbWUgZGlmZmVyZW50IHBsYW5lIGRpbWVuc2lvbnMgYnkg
dXNpbmcgdGhlIHBhcmFtZXRlcnMgYHdpZHRoYCBhbmQgYGhlaWdodGAgKGJvdGggYnkgZGVmYXVs
dCBoYXZlIHRoZSBzYW1lIHZhbHVlIG9mIGBzaXplYCkKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIg
YHNvdXJjZVBsYW5lYCBpcyBhIFBsYW5lIGluc3RhbmNlLiBJdCBidWlsZHMgYSBtZXNoIHBsYW5l
IGZyb20gYSBNYXRoIHBsYW5lCisgICAgICogKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtZXNoIHNp
ZGUgb3JpZW50YXRpb24gd2l0aCB0aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLkZST05UU0lERSAo
ZGVmYXVsdCksIEJBQllMT04uTWVzaC5CQUNLU0lERSBvciBCQUJZTE9OLk1lc2guRE9VQkxFU0lE
RQorICAgICAqICogSWYgeW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNo
b29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJl
c3BlY3RpdmVseSBvbiB0aGUgZnJvbnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGggdGhlIHBhcmFt
ZXRlcnMgYGZyb250VVZzYCBhbmQgYGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBo
dHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVu
dHMjc2lkZS1vcmllbnRhdGlvbgorICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRh
dGFibGUgd2l0aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFs
c2UpIGlmIGl0cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBj
cmVhdGVkCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAor
ICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUg
dGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQor
ICAgICAqIEByZXR1cm5zIHRoZSBwbGFuZSBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by9zZXRfc2hhcGVzI3BsYW5lCisgICAgICovCisgICAgUGxhbmVC
dWlsZGVyLkNyZWF0ZVBsYW5lID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7Cisg
ICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICB2
YXIgcGxhbmUgPSBuZXcgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJd
KG5hbWUsIHNjZW5lKTsKKyAgICAgICAgb3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPSBfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uX0dldERlZmF1bHRTaWRlT3JpZW50
YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24pOworICAgICAgICBwbGFuZS5fb3JpZ2luYWxC
dWlsZGVyU2lkZU9yaWVudGF0aW9uID0gb3B0aW9ucy5zaWRlT3JpZW50YXRpb247CisgICAgICAg
IHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlUGxhbmUob3B0aW9ucyk7CisgICAgICAgIHZlcnRl
eERhdGEuYXBwbHlUb01lc2gocGxhbmUsIG9wdGlvbnMudXBkYXRhYmxlKTsKKyAgICAgICAgaWYg
KG9wdGlvbnMuc291cmNlUGxhbmUpIHsKKyAgICAgICAgICAgIHBsYW5lLnRyYW5zbGF0ZShvcHRp
b25zLnNvdXJjZVBsYW5lLm5vcm1hbCwgLW9wdGlvbnMuc291cmNlUGxhbmUuZCk7CisgICAgICAg
ICAgICBwbGFuZS5zZXREaXJlY3Rpb24ob3B0aW9ucy5zb3VyY2VQbGFuZS5ub3JtYWwuc2NhbGUo
LTEpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGxhbmU7CisgICAgfTsKKyAgICByZXR1
cm4gUGxhbmVCdWlsZGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNo
ZXMvQnVpbGRlcnMvcG9seWdvbkJ1aWxkZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL0J1aWxkZXJzL3BvbHln
b25CdWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9seWdvbkJ1aWxkZXIgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWdvbkJ1aWxkZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFBvbHlnb25CdWlsZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgu
dmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRh
ICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcG9seWdvbk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL3BvbHlnb25NZXNoICovICIuL01lc2hlcy9wb2x5Z29uTWVzaC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NZXNoZXMv
YnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9Fbmdp
bmVzL2VuZ2luZVN0b3JlLnRzIik7CisKKworCisKKworCisKK19tZXNoX3ZlcnRleERhdGFfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdLkNyZWF0ZVBvbHlnb24gPSBm
dW5jdGlvbiAocG9seWdvbiwgc2lkZU9yaWVudGF0aW9uLCBmVVYsIGZDb2xvcnMsIGZyb250VVZz
LCBiYWNrVVZzKSB7CisgICAgdmFyIGZhY2VVViA9IGZVViB8fCBuZXcgQXJyYXkoMyk7CisgICAg
dmFyIGZhY2VDb2xvcnMgPSBmQ29sb3JzOworICAgIHZhciBjb2xvcnMgPSBbXTsKKyAgICAvLyBk
ZWZhdWx0IGZhY2UgY29sb3JzIGFuZCBVViBpZiB1bmRlZmluZWQKKyAgICBmb3IgKHZhciBmID0g
MDsgZiA8IDM7IGYrKykgeworICAgICAgICBpZiAoZmFjZVVWW2ZdID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIGZhY2VVVltmXSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yNCJdKDAsIDAsIDEsIDEpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmYWNlQ29sb3JzICYmIGZhY2VDb2xvcnNbZl0gPT09IHVuZGVmaW5lZCkgewor
ICAgICAgICAgICAgZmFjZUNvbG9yc1tmXSA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjQiXSgxLCAxLCAxLCAxKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB2YXIgcG9zaXRpb25zID0gcG9seWdvbi5nZXRWZXJ0aWNlc0RhdGEoX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uUG9z
aXRpb25LaW5kKTsKKyAgICB2YXIgbm9ybWFscyA9IHBvbHlnb24uZ2V0VmVydGljZXNEYXRhKF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlcnRleEJ1ZmZlciJd
Lk5vcm1hbEtpbmQpOworICAgIHZhciB1dnMgPSBwb2x5Z29uLmdldFZlcnRpY2VzRGF0YShfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZmZXIiXS5V
VktpbmQpOworICAgIHZhciBpbmRpY2VzID0gcG9seWdvbi5nZXRJbmRpY2VzKCk7CisgICAgLy8g
c2V0IGZhY2UgY29sb3VycyBhbmQgdGV4dHVyZXMKKyAgICB2YXIgaWR4ID0gMDsKKyAgICB2YXIg
ZmFjZSA9IDA7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG5vcm1hbHMubGVuZ3Ro
OyBpbmRleCArPSAzKSB7CisgICAgICAgIC8vRWRnZSBGYWNlICBuby4gMQorICAgICAgICBpZiAo
TWF0aC5hYnMobm9ybWFsc1tpbmRleCArIDFdKSA8IDAuMDAxKSB7CisgICAgICAgICAgICBmYWNl
ID0gMTsKKyAgICAgICAgfQorICAgICAgICAvL1RvcCBGYWNlICBuby4gMAorICAgICAgICBpZiAo
TWF0aC5hYnMobm9ybWFsc1tpbmRleCArIDFdIC0gMSkgPCAwLjAwMSkgeworICAgICAgICAgICAg
ZmFjZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgLy9Cb3R0b20gRmFjZSAgbm8uIDIKKyAgICAg
ICAgaWYgKE1hdGguYWJzKG5vcm1hbHNbaW5kZXggKyAxXSArIDEpIDwgMC4wMDEpIHsKKyAgICAg
ICAgICAgIGZhY2UgPSAyOworICAgICAgICB9CisgICAgICAgIGlkeCA9IGluZGV4IC8gMzsKKyAg
ICAgICAgdXZzWzIgKiBpZHhdID0gKDEgLSB1dnNbMiAqIGlkeF0pICogZmFjZVVWW2ZhY2VdLngg
KyB1dnNbMiAqIGlkeF0gKiBmYWNlVVZbZmFjZV0uejsKKyAgICAgICAgdXZzWzIgKiBpZHggKyAx
XSA9ICgxIC0gdXZzWzIgKiBpZHggKyAxXSkgKiBmYWNlVVZbZmFjZV0ueSArIHV2c1syICogaWR4
ICsgMV0gKiBmYWNlVVZbZmFjZV0udzsKKyAgICAgICAgaWYgKGZhY2VDb2xvcnMpIHsKKyAgICAg
ICAgICAgIGNvbG9ycy5wdXNoKGZhY2VDb2xvcnNbZmFjZV0uciwgZmFjZUNvbG9yc1tmYWNlXS5n
LCBmYWNlQ29sb3JzW2ZhY2VdLmIsIGZhY2VDb2xvcnNbZmFjZV0uYSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgLy8gc2lkZXMKKyAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5fQ29tcHV0ZVNpZGVzKHNpZGVPcmllbnRhdGlvbiwg
cG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzLCB1dnMsIGZyb250VVZzLCBiYWNrVVZzKTsKKyAg
ICAvLyBSZXN1bHQKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXSgpOworICAgIHZlcnRleERh
dGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgdmVydGV4RGF0YS5wb3NpdGlvbnMgPSBwb3NpdGlv
bnM7CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRhLnV2
cyA9IHV2czsKKyAgICBpZiAoZmFjZUNvbG9ycykgeworICAgICAgICB2YXIgdG90YWxDb2xvcnMg
PSAoc2lkZU9yaWVudGF0aW9uID09PSBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5ET1VCTEVTSURFKSA/IGNvbG9ycy5jb25jYXQoY29s
b3JzKSA6IGNvbG9yczsKKyAgICAgICAgdmVydGV4RGF0YS5jb2xvcnMgPSB0b3RhbENvbG9yczsK
KyAgICB9CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTWVzaCJdLkNyZWF0ZVBvbHlnb24gPSBmdW5jdGlvbiAobmFtZSwgc2hh
cGUsIHNjZW5lLCBob2xlcywgdXBkYXRhYmxlLCBzaWRlT3JpZW50YXRpb24sIGVhcmN1dEluamVj
dGlvbikgeworICAgIGlmIChlYXJjdXRJbmplY3Rpb24gPT09IHZvaWQgMCkgeyBlYXJjdXRJbmpl
Y3Rpb24gPSBlYXJjdXQ7IH0KKyAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgc2hhcGU6IHNo
YXBlLAorICAgICAgICBob2xlczogaG9sZXMsCisgICAgICAgIHVwZGF0YWJsZTogdXBkYXRhYmxl
LAorICAgICAgICBzaWRlT3JpZW50YXRpb246IHNpZGVPcmllbnRhdGlvbgorICAgIH07CisgICAg
cmV0dXJuIFBvbHlnb25CdWlsZGVyLkNyZWF0ZVBvbHlnb24obmFtZSwgb3B0aW9ucywgc2NlbmUs
IGVhcmN1dEluamVjdGlvbik7Cit9OworX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siTWVzaCJdLkV4dHJ1ZGVQb2x5Z29uID0gZnVuY3Rpb24gKG5hbWUsIHNoYXBlLCBkZXB0aCwg
c2NlbmUsIGhvbGVzLCB1cGRhdGFibGUsIHNpZGVPcmllbnRhdGlvbiwgZWFyY3V0SW5qZWN0aW9u
KSB7CisgICAgaWYgKGVhcmN1dEluamVjdGlvbiA9PT0gdm9pZCAwKSB7IGVhcmN1dEluamVjdGlv
biA9IGVhcmN1dDsgfQorICAgIHZhciBvcHRpb25zID0geworICAgICAgICBzaGFwZTogc2hhcGUs
CisgICAgICAgIGhvbGVzOiBob2xlcywKKyAgICAgICAgZGVwdGg6IGRlcHRoLAorICAgICAgICB1
cGRhdGFibGU6IHVwZGF0YWJsZSwKKyAgICAgICAgc2lkZU9yaWVudGF0aW9uOiBzaWRlT3JpZW50
YXRpb24KKyAgICB9OworICAgIHJldHVybiBQb2x5Z29uQnVpbGRlci5FeHRydWRlUG9seWdvbihu
YW1lLCBvcHRpb25zLCBzY2VuZSwgZWFyY3V0SW5qZWN0aW9uKTsKK307CisvKioKKyAqIENsYXNz
IGNvbnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWlsZCBt
ZXNoZXMKKyAqLwordmFyIFBvbHlnb25CdWlsZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KCkgeworICAgIGZ1bmN0aW9uIFBvbHlnb25CdWlsZGVyKCkgeworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgcG9seWdvbiBtZXNoCisgICAgICogVGhlIHBvbHlnb24ncyBzaGFwZSB3
aWxsIGRlcGVuZCBvbiB0aGUgaW5wdXQgcGFyYW1ldGVycyBhbmQgaXMgY29uc3RydWN0ZWQgcGFy
YWxsZWwgdG8gYSBncm91bmQgbWVzaAorICAgICAqICogVGhlIHBhcmFtZXRlciBgc2hhcGVgIGlz
IGEgcmVxdWlyZWQgYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzIHJlcHJlc2VudGluZyB0aGUg
Y29ybmVycyBvZiB0aGUgcG9seWdvbiBpbiB0aCBYb1ogcGxhbmUsIHRoYXQgaXMgeSA9IDAgZm9y
IGFsbCB2ZWN0b3JzCisgICAgICogKiBZb3UgY2FuIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVudGF0
aW9uIHdpdGggdGhlIHZhbHVlcyA6IE1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgTWVzaC5CQUNL
U0lERSBvciBNZXNoLkRPVUJMRVNJREUKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8g
dXBkYXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0
IGZhbHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9u
Y2UgY3JlYXRlZAorICAgICAqICogSWYgeW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5
b3UgY2FuIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5k
IHN0aWNrIHJlc3BlY3RpdmVseSBvbiB0aGUgZnJvbnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGgg
dGhlIHBhcmFtZXRlcnMgYGZyb250VVZzYCBhbmQgYGJhY2tVVnNgIChWZWN0b3I0KQorICAgICAq
ICogUmVtZW1iZXIgeW91IGNhbiBvbmx5IGNoYW5nZSB0aGUgc2hhcGUgcG9zaXRpb25zLCBub3Qg
dGhlaXIgbnVtYmVyIHdoZW4gdXBkYXRpbmcgYSBwb2x5Z29uCisgICAgICogQHBhcmFtIG5hbWUg
ZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmlu
ZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSBlYXJjdXRJbmplY3Rp
b24gY2FuIGJlIHVzZWQgdG8gaW5qZWN0IHlvdXIgb3duIGVhcmN1dCByZWZlcmVuY2UKKyAgICAg
KiBAcmV0dXJucyB0aGUgcG9seWdvbiBtZXNoCisgICAgICovCisgICAgUG9seWdvbkJ1aWxkZXIu
Q3JlYXRlUG9seWdvbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSwgZWFyY3V0SW5q
ZWN0aW9uKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsg
fQorICAgICAgICBpZiAoZWFyY3V0SW5qZWN0aW9uID09PSB2b2lkIDApIHsgZWFyY3V0SW5qZWN0
aW9uID0gZWFyY3V0OyB9CisgICAgICAgIG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uID0gX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdLl9HZXREZWZhdWx0U2lkZU9yaWVu
dGF0aW9uKG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uKTsKKyAgICAgICAgdmFyIHNoYXBlID0gb3B0
aW9ucy5zaGFwZTsKKyAgICAgICAgdmFyIGhvbGVzID0gb3B0aW9ucy5ob2xlcyB8fCBbXTsKKyAg
ICAgICAgdmFyIGRlcHRoID0gb3B0aW9ucy5kZXB0aCB8fCAwOworICAgICAgICB2YXIgY29udG91
cnMgPSBbXTsKKyAgICAgICAgdmFyIGhvbGUgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzaGFwZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgY29udG91cnNbaV0gPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjIi
XShzaGFwZVtpXS54LCBzaGFwZVtpXS56KTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZXBzaWxv
biA9IDAuMDAwMDAwMDE7CisgICAgICAgIGlmIChjb250b3Vyc1swXS5lcXVhbHNXaXRoRXBzaWxv
bihjb250b3Vyc1tjb250b3Vycy5sZW5ndGggLSAxXSwgZXBzaWxvbikpIHsKKyAgICAgICAgICAg
IGNvbnRvdXJzLnBvcCgpOworICAgICAgICB9CisgICAgICAgIHZhciBwb2x5Z29uVHJpYW5ndWxh
dGlvbiA9IG5ldyBfcG9seWdvbk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUG9s
eWdvbk1lc2hCdWlsZGVyIl0obmFtZSwgY29udG91cnMsIHNjZW5lIHx8IF9FbmdpbmVzX2VuZ2lu
ZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkVuZ2luZVN0b3JlIl0uTGFzdENy
ZWF0ZWRTY2VuZSwgZWFyY3V0SW5qZWN0aW9uKTsKKyAgICAgICAgZm9yICh2YXIgaE5iID0gMDsg
aE5iIDwgaG9sZXMubGVuZ3RoOyBoTmIrKykgeworICAgICAgICAgICAgaG9sZSA9IFtdOworICAg
ICAgICAgICAgZm9yICh2YXIgaFBvaW50ID0gMDsgaFBvaW50IDwgaG9sZXNbaE5iXS5sZW5ndGg7
IGhQb2ludCsrKSB7CisgICAgICAgICAgICAgICAgaG9sZS5wdXNoKG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdKGhvbGVzW2hOYl1b
aFBvaW50XS54LCBob2xlc1toTmJdW2hQb2ludF0ueikpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcG9seWdvblRyaWFuZ3VsYXRpb24uYWRkSG9sZShob2xlKTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgcG9seWdvbiA9IHBvbHlnb25Ucmlhbmd1bGF0aW9uLmJ1aWxkKG9wdGlvbnMudXBk
YXRhYmxlLCBkZXB0aCk7CisgICAgICAgIHBvbHlnb24uX29yaWdpbmFsQnVpbGRlclNpZGVPcmll
bnRhdGlvbiA9IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uOworICAgICAgICB2YXIgdmVydGV4RGF0
YSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
RGF0YSJdLkNyZWF0ZVBvbHlnb24ocG9seWdvbiwgb3B0aW9ucy5zaWRlT3JpZW50YXRpb24sIG9w
dGlvbnMuZmFjZVVWLCBvcHRpb25zLmZhY2VDb2xvcnMsIG9wdGlvbnMuZnJvbnRVVnMsIG9wdGlv
bnMuYmFja1VWcyk7CisgICAgICAgIHZlcnRleERhdGEuYXBwbHlUb01lc2gocG9seWdvbiwgb3B0
aW9ucy51cGRhdGFibGUpOworICAgICAgICByZXR1cm4gcG9seWdvbjsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYW4gZXh0cnVkZWQgcG9seWdvbiBtZXNoLCB3aXRoIGRlcHRoIGlu
IHRoZSBZIGRpcmVjdGlvbi4KKyAgICAgKiAqIFlvdSBjYW4gc2V0IGRpZmZlcmVudCBjb2xvcnMg
YW5kIGRpZmZlcmVudCBpbWFnZXMgdG8gdGhlIHRvcCwgYm90dG9tIGFuZCBleHRydWRlZCBzaWRl
IGJ5IHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGBmYWNlQ29sb3JzYCAoYW4gYXJyYXkgb2YgMyBDb2xv
cjMgZWxlbWVudHMpIGFuZCBgZmFjZVVWYCAoYW4gYXJyYXkgb2YgMyBWZWN0b3I0IGVsZW1lbnRz
KQorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3JlYXRlYm94
X3Blcl9mYWNlX3RleHR1cmVzX2FuZF9jb2xvcnMKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVz
IHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUg
b3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZp
bmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIGVhcmN1dEluamVjdGlvbiBjYW4g
YmUgdXNlZCB0byBpbmplY3QgeW91ciBvd24gZWFyY3V0IHJlZmVyZW5jZQorICAgICAqIEByZXR1
cm5zIHRoZSBwb2x5Z29uIG1lc2gKKyAgICAgKi8KKyAgICBQb2x5Z29uQnVpbGRlci5FeHRydWRl
UG9seWdvbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSwgZWFyY3V0SW5qZWN0aW9u
KSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAg
ICAgICBpZiAoZWFyY3V0SW5qZWN0aW9uID09PSB2b2lkIDApIHsgZWFyY3V0SW5qZWN0aW9uID0g
ZWFyY3V0OyB9CisgICAgICAgIHJldHVybiBQb2x5Z29uQnVpbGRlci5DcmVhdGVQb2x5Z29uKG5h
bWUsIG9wdGlvbnMsIHNjZW5lLCBlYXJjdXRJbmplY3Rpb24pOworICAgIH07CisgICAgcmV0dXJu
IFBvbHlnb25CdWlsZGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNo
ZXMvQnVpbGRlcnMvcG9seWhlZHJvbkJ1aWxkZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL0J1aWxkZXJz
L3BvbHloZWRyb25CdWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9seWhlZHJvbkJ1
aWxkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWhlZHJvbkJ1
aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvbHloZWRyb25CdWlsZGVyOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVj
dG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0
aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tZXNoICovICIu
L01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfdmVydGV4
RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEudHMiKTsK
KworCisKKworX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZXJ0ZXhEYXRhIl0uQ3JlYXRlUG9seWhlZHJvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAg
Ly8gcHJvdmlkZWQgcG9seWhlZHJvbiB0eXBlcyA6CisgICAgLy8gMCA6IFRldHJhaGVkcm9uLCAx
IDogT2N0YWhlZHJvbiwgMiA6IERvZGVjYWhlZHJvbiwgMyA6IEljb3NhaGVkcm9uLCA0IDogUmhv
bWJpY3Vib2N0YWhlZHJvbiwgNSA6IFRyaWFuZ3VsYXIgUHJpc20sIDYgOiBQZW50YWdvbmFsIFBy
aXNtLCA3IDogSGV4YWdvbmFsIFByaXNtLCA4IDogU3F1YXJlIFB5cmFtaWQgKEoxKQorICAgIC8v
IDkgOiBQZW50YWdvbmFsIFB5cmFtaWQgKEoyKSwgMTAgOiBUcmlhbmd1bGFyIERpcHlyYW1pZCAo
SjEyKSwgMTEgOiBQZW50YWdvbmFsIERpcHlyYW1pZCAoSjEzKSwgMTIgOiBFbG9uZ2F0ZWQgU3F1
YXJlIERpcHlyYW1pZCAoSjE1KSwgMTMgOiBFbG9uZ2F0ZWQgUGVudGFnb25hbCBEaXB5cmFtaWQg
KEoxNiksIDE0IDogRWxvbmdhdGVkIFBlbnRhZ29uYWwgQ3Vwb2xhIChKMjApCisgICAgdmFyIHBv
bHloZWRyYSA9IFtdOworICAgIHBvbHloZWRyYVswXSA9IHsgdmVydGV4OiBbWzAsIDAsIDEuNzMy
MDUxXSwgWzEuNjMyOTkzLCAwLCAtMC41NzczNTAzXSwgWy0wLjgxNjQ5NjYsIDEuNDE0MjE0LCAt
MC41NzczNTAzXSwgWy0wLjgxNjQ5NjYsIC0xLjQxNDIxNCwgLTAuNTc3MzUwM11dLCBmYWNlOiBb
WzAsIDEsIDJdLCBbMCwgMiwgM10sIFswLCAzLCAxXSwgWzEsIDMsIDJdXSB9OworICAgIHBvbHlo
ZWRyYVsxXSA9IHsgdmVydGV4OiBbWzAsIDAsIDEuNDE0MjE0XSwgWzEuNDE0MjE0LCAwLCAwXSwg
WzAsIDEuNDE0MjE0LCAwXSwgWy0xLjQxNDIxNCwgMCwgMF0sIFswLCAtMS40MTQyMTQsIDBdLCBb
MCwgMCwgLTEuNDE0MjE0XV0sIGZhY2U6IFtbMCwgMSwgMl0sIFswLCAyLCAzXSwgWzAsIDMsIDRd
LCBbMCwgNCwgMV0sIFsxLCA0LCA1XSwgWzEsIDUsIDJdLCBbMiwgNSwgM10sIFszLCA1LCA0XV0g
fTsKKyAgICBwb2x5aGVkcmFbMl0gPSB7CisgICAgICAgIHZlcnRleDogW1swLCAwLCAxLjA3MDQ2
Nl0sIFswLjcxMzY0NDIsIDAsIDAuNzk3ODc4NF0sIFstMC4zNTY4MjIxLCAwLjYxODAzNCwgMC43
OTc4Nzg0XSwgWy0wLjM1NjgyMjEsIC0wLjYxODAzNCwgMC43OTc4Nzg0XSwgWzAuNzk3ODc4NCwg
MC42MTgwMzQsIDAuMzU2ODIyMV0sIFswLjc5Nzg3ODQsIC0wLjYxODAzNCwgMC4zNTY4MjIxXSwg
Wy0wLjkzNDE3MjQsIDAuMzgxOTY2LCAwLjM1NjgyMjFdLCBbMC4xMzYyOTM5LCAxLCAwLjM1Njgy
MjFdLCBbMC4xMzYyOTM5LCAtMSwgMC4zNTY4MjIxXSwgWy0wLjkzNDE3MjQsIC0wLjM4MTk2Niwg
MC4zNTY4MjIxXSwgWzAuOTM0MTcyNCwgMC4zODE5NjYsIC0wLjM1NjgyMjFdLCBbMC45MzQxNzI0
LCAtMC4zODE5NjYsIC0wLjM1NjgyMjFdLCBbLTAuNzk3ODc4NCwgMC42MTgwMzQsIC0wLjM1Njgy
MjFdLCBbLTAuMTM2MjkzOSwgMSwgLTAuMzU2ODIyMV0sIFstMC4xMzYyOTM5LCAtMSwgLTAuMzU2
ODIyMV0sIFstMC43OTc4Nzg0LCAtMC42MTgwMzQsIC0wLjM1NjgyMjFdLCBbMC4zNTY4MjIxLCAw
LjYxODAzNCwgLTAuNzk3ODc4NF0sIFswLjM1NjgyMjEsIC0wLjYxODAzNCwgLTAuNzk3ODc4NF0s
IFstMC43MTM2NDQyLCAwLCAtMC43OTc4Nzg0XSwgWzAsIDAsIC0xLjA3MDQ2Nl1dLAorICAgICAg
ICBmYWNlOiBbWzAsIDEsIDQsIDcsIDJdLCBbMCwgMiwgNiwgOSwgM10sIFswLCAzLCA4LCA1LCAx
XSwgWzEsIDUsIDExLCAxMCwgNF0sIFsyLCA3LCAxMywgMTIsIDZdLCBbMywgOSwgMTUsIDE0LCA4
XSwgWzQsIDEwLCAxNiwgMTMsIDddLCBbNSwgOCwgMTQsIDE3LCAxMV0sIFs2LCAxMiwgMTgsIDE1
LCA5XSwgWzEwLCAxMSwgMTcsIDE5LCAxNl0sIFsxMiwgMTMsIDE2LCAxOSwgMThdLCBbMTQsIDE1
LCAxOCwgMTksIDE3XV0KKyAgICB9OworICAgIHBvbHloZWRyYVszXSA9IHsKKyAgICAgICAgdmVy
dGV4OiBbWzAsIDAsIDEuMTc1NTcxXSwgWzEuMDUxNDYyLCAwLCAwLjUyNTczMTFdLCBbMC4zMjQ5
MTk3LCAxLCAwLjUyNTczMTFdLCBbLTAuODUwNjUwOCwgMC42MTgwMzQsIDAuNTI1NzMxMV0sIFst
MC44NTA2NTA4LCAtMC42MTgwMzQsIDAuNTI1NzMxMV0sIFswLjMyNDkxOTcsIC0xLCAwLjUyNTcz
MTFdLCBbMC44NTA2NTA4LCAwLjYxODAzNCwgLTAuNTI1NzMxMV0sIFswLjg1MDY1MDgsIC0wLjYx
ODAzNCwgLTAuNTI1NzMxMV0sIFstMC4zMjQ5MTk3LCAxLCAtMC41MjU3MzExXSwgWy0xLjA1MTQ2
MiwgMCwgLTAuNTI1NzMxMV0sIFstMC4zMjQ5MTk3LCAtMSwgLTAuNTI1NzMxMV0sIFswLCAwLCAt
MS4xNzU1NzFdXSwKKyAgICAgICAgZmFjZTogW1swLCAxLCAyXSwgWzAsIDIsIDNdLCBbMCwgMywg
NF0sIFswLCA0LCA1XSwgWzAsIDUsIDFdLCBbMSwgNSwgN10sIFsxLCA3LCA2XSwgWzEsIDYsIDJd
LCBbMiwgNiwgOF0sIFsyLCA4LCAzXSwgWzMsIDgsIDldLCBbMywgOSwgNF0sIFs0LCA5LCAxMF0s
IFs0LCAxMCwgNV0sIFs1LCAxMCwgN10sIFs2LCA3LCAxMV0sIFs2LCAxMSwgOF0sIFs3LCAxMCwg
MTFdLCBbOCwgMTEsIDldLCBbOSwgMTEsIDEwXV0KKyAgICB9OworICAgIHBvbHloZWRyYVs0XSA9
IHsKKyAgICAgICAgdmVydGV4OiBbWzAsIDAsIDEuMDcwNzIyXSwgWzAuNzE0ODEzNSwgMCwgMC43
OTcxNzUyXSwgWy0wLjEwNDY4MiwgMC43MDcxMDY4LCAwLjc5NzE3NTJdLCBbLTAuNjg0MTUyOCwg
MC4yMDcxMDY4LCAwLjc5NzE3NTJdLCBbLTAuMTA0NjgyLCAtMC43MDcxMDY4LCAwLjc5NzE3NTJd
LCBbMC42MTAxMzE1LCAwLjcwNzEwNjgsIDAuNTIzNjI3OV0sIFsxLjA0MTU2LCAwLjIwNzEwNjgs
IDAuMTM2NzczNl0sIFswLjYxMDEzMTUsIC0wLjcwNzEwNjgsIDAuNTIzNjI3OV0sIFstMC4zNTc0
MDY3LCAxLCAwLjEzNjc3MzZdLCBbLTAuNzg4ODM0OCwgLTAuNSwgMC41MjM2Mjc5XSwgWy0wLjkz
Njg3NzYsIDAuNSwgMC4xMzY3NzM2XSwgWy0wLjM1NzQwNjcsIC0xLCAwLjEzNjc3MzZdLCBbMC4z
NTc0MDY3LCAxLCAtMC4xMzY3NzM2XSwgWzAuOTM2ODc3NiwgLTAuNSwgLTAuMTM2NzczNl0sIFsw
Ljc4ODgzNDgsIDAuNSwgLTAuNTIzNjI3OV0sIFswLjM1NzQwNjcsIC0xLCAtMC4xMzY3NzM2XSwg
Wy0wLjYxMDEzMTUsIDAuNzA3MTA2OCwgLTAuNTIzNjI3OV0sIFstMS4wNDE1NiwgLTAuMjA3MTA2
OCwgLTAuMTM2NzczNl0sIFstMC42MTAxMzE1LCAtMC43MDcxMDY4LCAtMC41MjM2Mjc5XSwgWzAu
MTA0NjgyLCAwLjcwNzEwNjgsIC0wLjc5NzE3NTJdLCBbMC42ODQxNTI4LCAtMC4yMDcxMDY4LCAt
MC43OTcxNzUyXSwgWzAuMTA0NjgyLCAtMC43MDcxMDY4LCAtMC43OTcxNzUyXSwgWy0wLjcxNDgx
MzUsIDAsIC0wLjc5NzE3NTJdLCBbMCwgMCwgLTEuMDcwNzIyXV0sCisgICAgICAgIGZhY2U6IFtb
MCwgMiwgM10sIFsxLCA2LCA1XSwgWzQsIDksIDExXSwgWzcsIDE1LCAxM10sIFs4LCAxNiwgMTBd
LCBbMTIsIDE0LCAxOV0sIFsxNywgMjIsIDE4XSwgWzIwLCAyMSwgMjNdLCBbMCwgMSwgNSwgMl0s
IFswLCAzLCA5LCA0XSwgWzAsIDQsIDcsIDFdLCBbMSwgNywgMTMsIDZdLCBbMiwgNSwgMTIsIDhd
LCBbMiwgOCwgMTAsIDNdLCBbMywgMTAsIDE3LCA5XSwgWzQsIDExLCAxNSwgN10sIFs1LCA2LCAx
NCwgMTJdLCBbNiwgMTMsIDIwLCAxNF0sIFs4LCAxMiwgMTksIDE2XSwgWzksIDE3LCAxOCwgMTFd
LCBbMTAsIDE2LCAyMiwgMTddLCBbMTEsIDE4LCAyMSwgMTVdLCBbMTMsIDE1LCAyMSwgMjBdLCBb
MTQsIDIwLCAyMywgMTldLCBbMTYsIDE5LCAyMywgMjJdLCBbMTgsIDIyLCAyMywgMjFdXQorICAg
IH07CisgICAgcG9seWhlZHJhWzVdID0geyB2ZXJ0ZXg6IFtbMCwgMCwgMS4zMjI4NzZdLCBbMS4z
MDkzMDcsIDAsIDAuMTg4OTgyMl0sIFstMC45ODE5ODA1LCAwLjg2NjAyNTQsIDAuMTg4OTgyMl0s
IFswLjE2MzY2MzQsIC0xLjI5OTAzOCwgMC4xODg5ODIyXSwgWzAuMzI3MzI2OCwgMC44NjYwMjU0
LCAtMC45NDQ5MTEyXSwgWy0wLjgxODMxNzEsIC0wLjQzMzAxMjcsIC0wLjk0NDkxMTJdXSwgZmFj
ZTogW1swLCAzLCAxXSwgWzIsIDQsIDVdLCBbMCwgMSwgNCwgMl0sIFswLCAyLCA1LCAzXSwgWzEs
IDMsIDUsIDRdXSB9OworICAgIHBvbHloZWRyYVs2XSA9IHsgdmVydGV4OiBbWzAsIDAsIDEuMTU5
OTUzXSwgWzEuMDEzNDY0LCAwLCAwLjU2NDI1NDJdLCBbLTAuMzUwMTQzMSwgMC45NTEwNTY1LCAw
LjU2NDI1NDJdLCBbLTAuNzcxNTIwOCwgLTAuNjU3MTYzOSwgMC41NjQyNTQyXSwgWzAuNjYzMzIw
NiwgMC45NTEwNTY1LCAtMC4wMzE0NDQ4MV0sIFswLjg2ODI5NzksIC0wLjY1NzE2MzksIC0wLjM5
OTYwNzFdLCBbLTEuMTIxNjY0LCAwLjI5Mzg5MjYsIC0wLjAzMTQ0NDgxXSwgWy0wLjIzNDg4MzEs
IC0xLjA2MzMxNCwgLTAuMzk5NjA3MV0sIFswLjUxODE1NDgsIDAuMjkzODkyNiwgLTAuOTk1MzA2
MV0sIFstMC41ODUwMjYyLCAtMC4xMTIyNTcsIC0wLjk5NTMwNjFdXSwgZmFjZTogW1swLCAxLCA0
LCAyXSwgWzAsIDIsIDYsIDNdLCBbMSwgNSwgOCwgNF0sIFszLCA2LCA5LCA3XSwgWzUsIDcsIDks
IDhdLCBbMCwgMywgNywgNSwgMV0sIFsyLCA0LCA4LCA5LCA2XV0gfTsKKyAgICBwb2x5aGVkcmFb
N10gPSB7IHZlcnRleDogW1swLCAwLCAxLjExODAzNF0sIFswLjg5NDQyNzIsIDAsIDAuNjcwODIw
NF0sIFstMC4yMjM2MDY4LCAwLjg2NjAyNTQsIDAuNjcwODIwNF0sIFstMC43ODI2MjM4LCAtMC40
MzMwMTI3LCAwLjY3MDgyMDRdLCBbMC42NzA4MjA0LCAwLjg2NjAyNTQsIDAuMjIzNjA2OF0sIFsx
LjAwNjIzMSwgLTAuNDMzMDEyNywgLTAuMjIzNjA2OF0sIFstMS4wMDYyMzEsIDAuNDMzMDEyNywg
MC4yMjM2MDY4XSwgWy0wLjY3MDgyMDQsIC0wLjg2NjAyNTQsIC0wLjIyMzYwNjhdLCBbMC43ODI2
MjM4LCAwLjQzMzAxMjcsIC0wLjY3MDgyMDRdLCBbMC4yMjM2MDY4LCAtMC44NjYwMjU0LCAtMC42
NzA4MjA0XSwgWy0wLjg5NDQyNzIsIDAsIC0wLjY3MDgyMDRdLCBbMCwgMCwgLTEuMTE4MDM0XV0s
IGZhY2U6IFtbMCwgMSwgNCwgMl0sIFswLCAyLCA2LCAzXSwgWzEsIDUsIDgsIDRdLCBbMywgNiwg
MTAsIDddLCBbNSwgOSwgMTEsIDhdLCBbNywgMTAsIDExLCA5XSwgWzAsIDMsIDcsIDksIDUsIDFd
LCBbMiwgNCwgOCwgMTEsIDEwLCA2XV0gfTsKKyAgICBwb2x5aGVkcmFbOF0gPSB7IHZlcnRleDog
W1stMC43Mjk2NjUsIDAuNjcwMTIxLCAwLjMxOTE1NV0sIFstMC42NTUyMzUsIC0wLjI5MjEzLCAt
MC43NTQwOTZdLCBbLTAuMDkzOTIyLCAtMC42MDcxMjMsIDAuNTM3ODE4XSwgWzAuNzAyMTk2LCAw
LjU5NTY5MSwgMC40ODUxODddLCBbMC43NzY2MjYsIC0wLjM2NjU2LCAtMC41ODgwNjRdXSwgZmFj
ZTogW1sxLCA0LCAyXSwgWzAsIDEsIDJdLCBbMywgMCwgMl0sIFs0LCAzLCAyXSwgWzQsIDEsIDAs
IDNdXSB9OworICAgIHBvbHloZWRyYVs5XSA9IHsgdmVydGV4OiBbWy0wLjg2ODg0OSwgLTAuMTAw
MDQxLCAwLjYxMjU3XSwgWy0wLjMyOTQ1OCwgMC45NzYwOTksIDAuMjgwNzhdLCBbLTAuMjY2Mjks
IC0wLjAxMzc5NiwgLTAuNDc3NjU0XSwgWy0wLjEzMzkyLCAtMS4wMzQxMTUsIDAuMjI5ODI5XSwg
WzAuNzM4ODM0LCAwLjcwNzExNywgLTAuMzA3MDE4XSwgWzAuODU5NjgzLCAtMC41MzUyNjQsIC0w
LjMzODUwOF1dLCBmYWNlOiBbWzMsIDAsIDJdLCBbNSwgMywgMl0sIFs0LCA1LCAyXSwgWzEsIDQs
IDJdLCBbMCwgMSwgMl0sIFswLCAzLCA1LCA0LCAxXV0gfTsKKyAgICBwb2x5aGVkcmFbMTBdID0g
eyB2ZXJ0ZXg6IFtbLTAuNjEwMzg5LCAwLjI0Mzk3NSwgMC41MzEyMTNdLCBbLTAuMTg3ODEyLCAt
MC40ODc5NSwgLTAuNjY0MDE2XSwgWy0wLjE4NzgxMiwgMC45NzU5LCAtMC42NjQwMTZdLCBbMC4x
ODc4MTIsIC0wLjk3NTksIDAuNjY0MDE2XSwgWzAuNzk4MjAxLCAwLjI0Mzk3NSwgMC4xMzI4MDNd
XSwgZmFjZTogW1sxLCAzLCAwXSwgWzMsIDQsIDBdLCBbMywgMSwgNF0sIFswLCAyLCAxXSwgWzAs
IDQsIDJdLCBbMiwgNCwgMV1dIH07CisgICAgcG9seWhlZHJhWzExXSA9IHsgdmVydGV4OiBbWy0x
LjAyODc3OCwgMC4zOTIwMjcsIC0wLjA0ODc4Nl0sIFstMC42NDA1MDMsIC0wLjY0NjE2MSwgMC42
MjE4MzddLCBbLTAuMTI1MTYyLCAtMC4zOTU2NjMsIC0wLjU0MDA1OV0sIFswLjAwNDY4MywgMC44
ODg0NDcsIC0wLjY1MTk4OF0sIFswLjEyNTE2MSwgMC4zOTU2NjMsIDAuNTQwMDU5XSwgWzAuNjMy
OTI1LCAtMC43OTEzNzYsIDAuNDMzMTAyXSwgWzEuMDMxNjcyLCAwLjE1NzA2MywgLTAuMzU0MTY1
XV0sIGZhY2U6IFtbMywgMiwgMF0sIFsyLCAxLCAwXSwgWzIsIDUsIDFdLCBbMCwgNCwgM10sIFsw
LCAxLCA0XSwgWzQsIDEsIDVdLCBbMiwgMywgNl0sIFszLCA0LCA2XSwgWzUsIDIsIDZdLCBbNCwg
NSwgNl1dIH07CisgICAgcG9seWhlZHJhWzEyXSA9IHsgdmVydGV4OiBbWy0wLjY2OTg2NywgMC4z
MzQ5MzMsIC0wLjUyOTU3Nl0sIFstMC42Njk4NjcsIDAuMzM0OTMzLCAwLjUyOTU3N10sIFstMC40
MDQzLCAxLjIxMjkwMSwgMF0sIFstMC4zMzQ5MzMsIC0wLjY2OTg2NywgLTAuNTI5NTc2XSwgWy0w
LjMzNDkzMywgLTAuNjY5ODY3LCAwLjUyOTU3N10sIFswLjMzNDkzMywgMC42Njk4NjcsIC0wLjUy
OTU3Nl0sIFswLjMzNDkzMywgMC42Njk4NjcsIDAuNTI5NTc3XSwgWzAuNDA0MywgLTEuMjEyOTAx
LCAwXSwgWzAuNjY5ODY3LCAtMC4zMzQ5MzMsIC0wLjUyOTU3Nl0sIFswLjY2OTg2NywgLTAuMzM0
OTMzLCAwLjUyOTU3N11dLCBmYWNlOiBbWzgsIDksIDddLCBbNiwgNSwgMl0sIFszLCA4LCA3XSwg
WzUsIDAsIDJdLCBbNCwgMywgN10sIFswLCAxLCAyXSwgWzksIDQsIDddLCBbMSwgNiwgMl0sIFs5
LCA4LCA1LCA2XSwgWzgsIDMsIDAsIDVdLCBbMywgNCwgMSwgMF0sIFs0LCA5LCA2LCAxXV0gfTsK
KyAgICBwb2x5aGVkcmFbMTNdID0geyB2ZXJ0ZXg6IFtbLTAuOTMxODM2LCAwLjIxOTk3NiwgLTAu
MjY0NjMyXSwgWy0wLjYzNjcwNiwgMC4zMTgzNTMsIDAuNjkyODE2XSwgWy0wLjYxMzQ4MywgLTAu
NzM1MDgzLCAtMC4yNjQ2MzJdLCBbLTAuMzI2NTQ1LCAwLjk3OTYzNCwgMF0sIFstMC4zMTgzNTMs
IC0wLjYzNjcwNiwgMC42OTI4MTZdLCBbLTAuMTU5MTc2LCAwLjQ3NzUyOSwgLTAuODU2MzY4XSwg
WzAuMTU5MTc2LCAtMC40Nzc1MjksIC0wLjg1NjM2OF0sIFswLjMxODM1MywgMC42MzY3MDYsIDAu
NjkyODE2XSwgWzAuMzI2NTQ1LCAtMC45Nzk2MzQsIDBdLCBbMC42MTM0ODIsIDAuNzM1MDgyLCAt
MC4yNjQ2MzJdLCBbMC42MzY3MDYsIC0wLjMxODM1MywgMC42OTI4MTZdLCBbMC45MzE4MzUsIC0w
LjIxOTk3NywgLTAuMjY0NjMyXV0sIGZhY2U6IFtbMTEsIDEwLCA4XSwgWzcsIDksIDNdLCBbNiwg
MTEsIDhdLCBbOSwgNSwgM10sIFsyLCA2LCA4XSwgWzUsIDAsIDNdLCBbNCwgMiwgOF0sIFswLCAx
LCAzXSwgWzEwLCA0LCA4XSwgWzEsIDcsIDNdLCBbMTAsIDExLCA5LCA3XSwgWzExLCA2LCA1LCA5
XSwgWzYsIDIsIDAsIDVdLCBbMiwgNCwgMSwgMF0sIFs0LCAxMCwgNywgMV1dIH07CisgICAgcG9s
eWhlZHJhWzE0XSA9IHsKKyAgICAgICAgdmVydGV4OiBbWy0wLjkzNDY1LCAwLjMwMDQ1OSwgLTAu
MjcxMTg1XSwgWy0wLjgzODY4OSwgLTAuMjYwMjE5LCAtMC41MTYwMTddLCBbLTAuNzExMzE5LCAw
LjcxNzU5MSwgMC4xMjgzNTldLCBbLTAuNzEwMzM0LCAtMC4xNTY5MjIsIDAuMDgwOTQ2XSwgWy0w
LjU5OTc5OSwgMC41NTYwMDMsIC0wLjcyNTE0OF0sIFstMC41MDM4MzgsIC0wLjAwNDY3NSwgLTAu
OTY5OTgxXSwgWy0wLjQ4NzAwNCwgMC4yNjAyMSwgMC40ODA0OV0sIFstMC40NjAwODksIC0wLjc1
MDI4MiwgLTAuNTEyNjIyXSwgWy0wLjM3NjQ2OCwgMC45NzMxMzUsIC0wLjMyNTYwNV0sIFstMC4z
MzE3MzUsIC0wLjY0Njk4NSwgMC4wODQzNDJdLCBbLTAuMjU0MDAxLCAwLjgzMTg0NywgMC41MzAw
MDFdLCBbLTAuMTI1MjM5LCAtMC40OTQ3MzgsIC0wLjk2NjU4Nl0sIFswLjAyOTYyMiwgMC4wMjc5
NDksIDAuNzMwODE3XSwgWzAuMDU2NTM2LCAtMC45ODI1NDMsIC0wLjI2MjI5NV0sIFswLjA4MDg1
LCAxLjA4NzM5MSwgMC4wNzYwMzddLCBbMC4xMjU1ODMsIC0wLjUzMjcyOSwgMC40ODU5ODRdLCBb
MC4yNjI2MjUsIDAuNTk5NTg2LCAwLjc4MDMyOF0sIFswLjM5MTM4NywgLTAuNzI2OTk5LCAtMC43
MTYyNTldLCBbMC41MTM4NTQsIC0wLjg2ODI4NywgMC4xMzkzNDddLCBbMC41OTc0NzUsIDAuODU1
MTMsIDAuMzI2MzY0XSwgWzAuNjQxMjI0LCAwLjEwOTUyMywgMC43ODM3MjNdLCBbMC43MzcxODUs
IC0wLjQ1MTE1NSwgMC41Mzg4OTFdLCBbMC44NDg3MDUsIC0wLjYxMjc0MiwgLTAuMzE0NjE2XSwg
WzAuOTc2MDc1LCAwLjM2NTA2NywgMC4zMjk3Nl0sIFsxLjA3MjAzNiwgLTAuMTk1NjEsIDAuMDg0
OTI3XV0sCisgICAgICAgIGZhY2U6IFtbMTUsIDE4LCAyMV0sIFsxMiwgMjAsIDE2XSwgWzYsIDEw
LCAyXSwgWzMsIDAsIDFdLCBbOSwgNywgMTNdLCBbMiwgOCwgNCwgMF0sIFswLCA0LCA1LCAxXSwg
WzEsIDUsIDExLCA3XSwgWzcsIDExLCAxNywgMTNdLCBbMTMsIDE3LCAyMiwgMThdLCBbMTgsIDIy
LCAyNCwgMjFdLCBbMjEsIDI0LCAyMywgMjBdLCBbMjAsIDIzLCAxOSwgMTZdLCBbMTYsIDE5LCAx
NCwgMTBdLCBbMTAsIDE0LCA4LCAyXSwgWzE1LCA5LCAxMywgMThdLCBbMTIsIDE1LCAyMSwgMjBd
LCBbNiwgMTIsIDE2LCAxMF0sIFszLCA2LCAyLCAwXSwgWzksIDMsIDEsIDddLCBbOSwgMTUsIDEy
LCA2LCAzXSwgWzIyLCAxNywgMTEsIDUsIDQsIDgsIDE0LCAxOSwgMjMsIDI0XV0KKyAgICB9Owor
ICAgIHZhciB0eXBlID0gb3B0aW9ucy50eXBlICYmIChvcHRpb25zLnR5cGUgPCAwIHx8IG9wdGlv
bnMudHlwZSA+PSBwb2x5aGVkcmEubGVuZ3RoKSA/IDAgOiBvcHRpb25zLnR5cGUgfHwgMDsKKyAg
ICB2YXIgc2l6ZSA9IG9wdGlvbnMuc2l6ZTsKKyAgICB2YXIgc2l6ZVggPSBvcHRpb25zLnNpemVY
IHx8IHNpemUgfHwgMTsKKyAgICB2YXIgc2l6ZVkgPSBvcHRpb25zLnNpemVZIHx8IHNpemUgfHwg
MTsKKyAgICB2YXIgc2l6ZVogPSBvcHRpb25zLnNpemVaIHx8IHNpemUgfHwgMTsKKyAgICB2YXIg
ZGF0YSA9IG9wdGlvbnMuY3VzdG9tIHx8IHBvbHloZWRyYVt0eXBlXTsKKyAgICB2YXIgbmJmYWNl
cyA9IGRhdGEuZmFjZS5sZW5ndGg7CisgICAgdmFyIGZhY2VVViA9IG9wdGlvbnMuZmFjZVVWIHx8
IG5ldyBBcnJheShuYmZhY2VzKTsKKyAgICB2YXIgZmFjZUNvbG9ycyA9IG9wdGlvbnMuZmFjZUNv
bG9yczsKKyAgICB2YXIgZmxhdCA9IChvcHRpb25zLmZsYXQgPT09IHVuZGVmaW5lZCkgPyB0cnVl
IDogb3B0aW9ucy5mbGF0OworICAgIHZhciBzaWRlT3JpZW50YXRpb24gPSAob3B0aW9ucy5zaWRl
T3JpZW50YXRpb24gPT09IDApID8gMCA6IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uIHx8IF9tZXNo
X3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdLkRF
RkFVTFRTSURFOworICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgaW5k
aWNlcyA9IG5ldyBBcnJheSgpOworICAgIHZhciBub3JtYWxzID0gbmV3IEFycmF5KCk7CisgICAg
dmFyIHV2cyA9IG5ldyBBcnJheSgpOworICAgIHZhciBjb2xvcnMgPSBuZXcgQXJyYXkoKTsKKyAg
ICB2YXIgaW5kZXggPSAwOworICAgIHZhciBmYWNlSWR4ID0gMDsgLy8gZmFjZSBjdXJzb3IgaW4g
dGhlIGFycmF5ICJpbmRleGVzIgorICAgIHZhciBpbmRleGVzID0gbmV3IEFycmF5KCk7CisgICAg
dmFyIGkgPSAwOworICAgIHZhciBmID0gMDsKKyAgICB2YXIgdSwgdiwgYW5nLCB4LCB5LCB0bXA7
CisgICAgLy8gZGVmYXVsdCBmYWNlIGNvbG9ycyBhbmQgVVYgaWYgdW5kZWZpbmVkCisgICAgaWYg
KGZsYXQpIHsKKyAgICAgICAgZm9yIChmID0gMDsgZiA8IG5iZmFjZXM7IGYrKykgeworICAgICAg
ICAgICAgaWYgKGZhY2VDb2xvcnMgJiYgZmFjZUNvbG9yc1tmXSA9PT0gdW5kZWZpbmVkKSB7Cisg
ICAgICAgICAgICAgICAgZmFjZUNvbG9yc1tmXSA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjQiXSgxLCAxLCAxLCAxKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChmYWNlVVYgJiYgZmFjZVVWW2ZdID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgICAgICBmYWNlVVZbZl0gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjQiXSgwLCAwLCAxLCAxKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWZsYXQpIHsKKyAgICAgICAgZm9y
IChpID0gMDsgaSA8IGRhdGEudmVydGV4Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBwb3Np
dGlvbnMucHVzaChkYXRhLnZlcnRleFtpXVswXSAqIHNpemVYLCBkYXRhLnZlcnRleFtpXVsxXSAq
IHNpemVZLCBkYXRhLnZlcnRleFtpXVsyXSAqIHNpemVaKTsKKyAgICAgICAgICAgIHV2cy5wdXNo
KDAsIDApOworICAgICAgICB9CisgICAgICAgIGZvciAoZiA9IDA7IGYgPCBuYmZhY2VzOyBmKysp
IHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhLmZhY2VbZl0ubGVuZ3RoIC0gMjsg
aSsrKSB7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGRhdGEuZmFjZVtmXVswXSwgZGF0
YS5mYWNlW2ZdW2kgKyAyXSwgZGF0YS5mYWNlW2ZdW2kgKyAxXSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZvciAoZiA9IDA7IGYgPCBuYmZh
Y2VzOyBmKyspIHsKKyAgICAgICAgICAgIHZhciBmbCA9IGRhdGEuZmFjZVtmXS5sZW5ndGg7IC8v
IG51bWJlciBvZiB2ZXJ0aWNlcyBvZiB0aGUgY3VycmVudCBmYWNlCisgICAgICAgICAgICBhbmcg
PSAyICogTWF0aC5QSSAvIGZsOworICAgICAgICAgICAgeCA9IDAuNSAqIE1hdGgudGFuKGFuZyAv
IDIpOworICAgICAgICAgICAgeSA9IDAuNTsKKyAgICAgICAgICAgIC8vIHBvc2l0aW9ucywgdXZz
LCBjb2xvcnMKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmbDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgLy8gcG9zaXRpb25zCisgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goZGF0
YS52ZXJ0ZXhbZGF0YS5mYWNlW2ZdW2ldXVswXSAqIHNpemVYLCBkYXRhLnZlcnRleFtkYXRhLmZh
Y2VbZl1baV1dWzFdICogc2l6ZVksIGRhdGEudmVydGV4W2RhdGEuZmFjZVtmXVtpXV1bMl0gKiBz
aXplWik7CisgICAgICAgICAgICAgICAgaW5kZXhlcy5wdXNoKGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBpbmRleCsrOworICAgICAgICAgICAgICAgIC8vIHV2cworICAgICAgICAgICAgICAgIHUg
PSBmYWNlVVZbZl0ueCArIChmYWNlVVZbZl0ueiAtIGZhY2VVVltmXS54KSAqICgwLjUgKyB4KTsK
KyAgICAgICAgICAgICAgICB2ID0gZmFjZVVWW2ZdLnkgKyAoZmFjZVVWW2ZdLncgLSBmYWNlVVZb
Zl0ueSkgKiAoeSAtIDAuNSk7CisgICAgICAgICAgICAgICAgdXZzLnB1c2godSwgdik7CisgICAg
ICAgICAgICAgICAgdG1wID0geCAqIE1hdGguY29zKGFuZykgLSB5ICogTWF0aC5zaW4oYW5nKTsK
KyAgICAgICAgICAgICAgICB5ID0geCAqIE1hdGguc2luKGFuZykgKyB5ICogTWF0aC5jb3MoYW5n
KTsKKyAgICAgICAgICAgICAgICB4ID0gdG1wOworICAgICAgICAgICAgICAgIC8vIGNvbG9ycwor
ICAgICAgICAgICAgICAgIGlmIChmYWNlQ29sb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bG9ycy5wdXNoKGZhY2VDb2xvcnNbZl0uciwgZmFjZUNvbG9yc1tmXS5nLCBmYWNlQ29sb3JzW2Zd
LmIsIGZhY2VDb2xvcnNbZl0uYSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gaW5kaWNlcyBmcm9tIGluZGV4ZXMKKyAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBmbCAtIDI7IGkrKykgeworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRl
eGVzWzAgKyBmYWNlSWR4XSwgaW5kZXhlc1tpICsgMiArIGZhY2VJZHhdLCBpbmRleGVzW2kgKyAx
ICsgZmFjZUlkeF0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFjZUlkeCArPSBmbDsK
KyAgICAgICAgfQorICAgIH0KKyAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5Db21wdXRlTm9ybWFscyhwb3NpdGlvbnMsIGluZGlj
ZXMsIG5vcm1hbHMpOworICAgIF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVydGV4RGF0YSJdLl9Db21wdXRlU2lkZXMoc2lkZU9yaWVudGF0aW9uLCBwb3Np
dGlvbnMsIGluZGljZXMsIG5vcm1hbHMsIHV2cywgb3B0aW9ucy5mcm9udFVWcywgb3B0aW9ucy5i
YWNrVVZzKTsKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXSgpOworICAgIHZlcnRleERhdGEu
cG9zaXRpb25zID0gcG9zaXRpb25zOworICAgIHZlcnRleERhdGEuaW5kaWNlcyA9IGluZGljZXM7
CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAgICB2ZXJ0ZXhEYXRhLnV2cyA9
IHV2czsKKyAgICBpZiAoZmFjZUNvbG9ycyAmJiBmbGF0KSB7CisgICAgICAgIHZlcnRleERhdGEu
Y29sb3JzID0gY29sb3JzOworICAgIH0KKyAgICByZXR1cm4gdmVydGV4RGF0YTsKK307CitfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uQ3JlYXRlUG9seWhlZHJvbiA9
IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkgeworICAgIHJldHVybiBQb2x5aGVkcm9u
QnVpbGRlci5DcmVhdGVQb2x5aGVkcm9uKG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKK307CisvKioK
KyAqIENsYXNzIGNvbnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxs
eSBidWlsZCBtZXNoZXMKKyAqLwordmFyIFBvbHloZWRyb25CdWlsZGVyID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFBvbHloZWRyb25CdWlsZGVyKCkgeworICAg
IH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcG9seWhlZHJvbiBtZXNoCisgICAgICogKiBU
aGUgcGFyYW1ldGVyIGB0eXBlYCAocG9zaXRpdmUgaW50ZWdlciwgbWF4IDE0LCBkZWZhdWx0IDAp
IHNldHMgdGhlIHBvbHloZWRyb24gdHlwZSB0byBidWlsZCBhbW9uZyB0aGUgMTUgZW1iYmVkZWQg
dHlwZXMuIFBsZWFzZSByZWZlciB0byB0aGUgdHlwZSBzaGVldCBpbiB0aGUgdHV0b3JpYWwgdG8g
Y2hvb3NlIHRoZSB3YW50ZWQgdHlwZQorICAgICAqICogVGhlIHBhcmFtZXRlciBgc2l6ZWAgKHBv
c2l0aXZlIGZsb2F0LCBkZWZhdWx0IDEpIHNldHMgdGhlIHBvbHlnb24gc2l6ZQorICAgICAqICog
WW91IGNhbiBvdmVyd3JpdGUgdGhlIGBzaXplYCBvbiBlYWNoIGRpbWVuc2lvbiBidSB1c2luZyB0
aGUgcGFyYW1ldGVycyBgc2l6ZVhgLCBgc2l6ZVlgIG9yIGBzaXplWmAgKHBvc2l0aXZlIGZsb2F0
cywgZGVmYXVsdCB0byBgc2l6ZWAgdmFsdWUpCisgICAgICogKiBZb3UgY2FuIGJ1aWxkIG90aGVy
IHBvbHloZWRyb24gdHlwZXMgdGhhbiB0aGUgMTUgZW1iYmVkZWQgb25lcyBieSBzZXR0aW5nIHRo
ZSBwYXJhbWV0ZXIgYGN1c3RvbWAgKGBwb2x5aGVkcm9uT2JqZWN0YCwgZGVmYXVsdCBudWxsKS4g
SWYgeW91IHNldCB0aGUgcGFyYW1ldGVyIGBjdXN0b21gLCB0aGlzIG92ZXJ3cml0dGVzIHRoZSBw
YXJhbWV0ZXIgYHR5cGVgCisgICAgICogKiBBIGBwb2x5aGVkcm9uT2JqZWN0YCBpcyBhIGZvcm1h
dHRlZCBqYXZhc2NyaXB0IG9iamVjdC4gWW91J2xsIGZpbmQgYSBmdWxsIGZpbGUgd2l0aCBwcmUt
c2V0IHBvbHloZWRyYSBoZXJlIDogaHR0cHM6Ly9naXRodWIuY29tL0JhYnlsb25KUy9FeHRlbnNp
b25zL3RyZWUvbWFzdGVyL1BvbHloZWRyb24KKyAgICAgKiAqIFlvdSBjYW4gc2V0IHRoZSBjb2xv
ciBhbmQgdGhlIFVWIG9mIGVhY2ggc2lkZSBvZiB0aGUgcG9seWhlZHJvbiB3aXRoIHRoZSBwYXJh
bWV0ZXJzIGBmYWNlQ29sb3JzYCAoQ29sb3I0LCBkZWZhdWx0IGAoMSwgMSwgMSwgMSlgKSBhbmQg
ZmFjZVVWIChWZWN0b3I0LCBkZWZhdWx0IGAoMCwgMCwgMSwgMSlgKQorICAgICAqICogVG8gdW5k
ZXJzdGFuZCBob3cgdG8gc2V0IGBmYWNlVVZgIG9yIGBmYWNlQ29sb3JzYCwgcGxlYXNlIHJlYWQg
dGhpcyBieSBjb25zaWRlcmluZyB0aGUgcmlnaHQgbnVtYmVyIG9mIGZhY2VzIG9mIHlvdXIgcG9s
eWhlZHJvbiwgaW5zdGVhZCBvZiBvbmx5IDYgZm9yIHRoZSBib3ggOiBodHRwczovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9jcmVhdGVib3hfcGVyX2ZhY2VfdGV4dHVyZXNfYW5kX2NvbG9ycwor
ICAgICAqICogVGhlIHBhcmFtZXRlciBgZmxhdGAgKGJvb2xlYW4sIGRlZmF1bHQgdHJ1ZSkuIElm
IHNldCB0byBmYWxzZSwgaXQgZ2l2ZXMgdGhlIHBvbHloZWRyb24gYSBzaW5nbGUgZ2xvYmFsIGZh
Y2UsIHNvIGxlc3MgdmVydGljZXMgYW5kIHNoYXJlZCBub3JtYWxzLiBJbiB0aGlzIGNhc2UsIGBm
YWNlQ29sb3JzYCBhbmQgYGZhY2VVVmAgYXJlIGlnbm9yZWQKKyAgICAgKiAqIFlvdSBjYW4gYWxz
byBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9O
Lk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJBQllM
T04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVk
IG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8g
Y3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lk
ZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3RvcjQp
LiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNj
b3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUgbWVzaCBj
YW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRh
YmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2Vk
IHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBu
YW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9u
cyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRo
ZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdGhlIHBvbHloZWRyb24gbWVzaAorICAg
ICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcG9seWhlZHJhX3NoYXBl
cworICAgICAqLworICAgIFBvbHloZWRyb25CdWlsZGVyLkNyZWF0ZVBvbHloZWRyb24gPSBmdW5j
dGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lk
IDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHZhciBwb2x5aGVkcm9uID0gbmV3IF9tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1lc2giXShuYW1lLCBzY2VuZSk7CisgICAg
ICAgIG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uID0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTWVzaCJdLl9HZXREZWZhdWx0U2lkZU9yaWVudGF0aW9uKG9wdGlvbnMuc2lkZU9y
aWVudGF0aW9uKTsKKyAgICAgICAgcG9seWhlZHJvbi5fb3JpZ2luYWxCdWlsZGVyU2lkZU9yaWVu
dGF0aW9uID0gb3B0aW9ucy5zaWRlT3JpZW50YXRpb247CisgICAgICAgIHZhciB2ZXJ0ZXhEYXRh
ID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhE
YXRhIl0uQ3JlYXRlUG9seWhlZHJvbihvcHRpb25zKTsKKyAgICAgICAgdmVydGV4RGF0YS5hcHBs
eVRvTWVzaChwb2x5aGVkcm9uLCBvcHRpb25zLnVwZGF0YWJsZSk7CisgICAgICAgIHJldHVybiBw
b2x5aGVkcm9uOworICAgIH07CisgICAgcmV0dXJuIFBvbHloZWRyb25CdWlsZGVyOworfSgpKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRlcnMvcmliYm9uQnVpbGRl
ci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL01lc2hlcy9CdWlsZGVycy9yaWJib25CdWlsZGVyLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBSaWJib25CdWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlJpYmJvbkJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJpYmJvbkJ1aWxkZXI7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0
aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRh
ICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0N1bGxpbmcvYm91bmRpbmdJbmZvICovICIu
L0N1bGxpbmcvYm91bmRpbmdJbmZvLnRzIik7CisKKworCisKKworX21lc2hfdmVydGV4RGF0YV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlUmliYm9uID0g
ZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICB2YXIgcGF0aEFycmF5ID0gb3B0aW9ucy5wYXRoQXJy
YXk7CisgICAgdmFyIGNsb3NlQXJyYXkgPSBvcHRpb25zLmNsb3NlQXJyYXkgfHwgZmFsc2U7Cisg
ICAgdmFyIGNsb3NlUGF0aCA9IG9wdGlvbnMuY2xvc2VQYXRoIHx8IGZhbHNlOworICAgIHZhciBp
bnZlcnRVViA9IG9wdGlvbnMuaW52ZXJ0VVYgfHwgZmFsc2U7CisgICAgdmFyIGRlZmF1bHRPZmZz
ZXQgPSBNYXRoLmZsb29yKHBhdGhBcnJheVswXS5sZW5ndGggLyAyKTsKKyAgICB2YXIgb2Zmc2V0
ID0gb3B0aW9ucy5vZmZzZXQgfHwgZGVmYXVsdE9mZnNldDsKKyAgICBvZmZzZXQgPSBvZmZzZXQg
PiBkZWZhdWx0T2Zmc2V0ID8gZGVmYXVsdE9mZnNldCA6IE1hdGguZmxvb3Iob2Zmc2V0KTsgLy8g
b2Zmc2V0IG1heCBhbGxvd2VkIDogZGVmYXVsdE9mZnNldAorICAgIHZhciBzaWRlT3JpZW50YXRp
b24gPSAob3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPT09IDApID8gMCA6IG9wdGlvbnMuc2lkZU9y
aWVudGF0aW9uIHx8IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVydGV4RGF0YSJdLkRFRkFVTFRTSURFOworICAgIHZhciBjdXN0b21VViA9IG9wdGlvbnMu
dXZzOworICAgIHZhciBjdXN0b21Db2xvcnMgPSBvcHRpb25zLmNvbG9yczsKKyAgICB2YXIgcG9z
aXRpb25zID0gW107CisgICAgdmFyIGluZGljZXMgPSBbXTsKKyAgICB2YXIgbm9ybWFscyA9IFtd
OworICAgIHZhciB1dnMgPSBbXTsKKyAgICB2YXIgdXMgPSBbXTsgLy8gdXNbcGF0aF9pZF0gPSBb
dURpc3QxLCB1RGlzdDIsIHVEaXN0MyAuLi4gXSBkaXN0YW5jZXMgYmV0d2VlbiBwb2ludHMgb24g
cGF0aCBwYXRoX2lkCisgICAgdmFyIHZzID0gW107IC8vIHZzW2ldID0gW3ZEaXN0MSwgdkRpc3Qy
LCB2RGlzdDMsIC4uLiBdIGRpc3RhbmNlcyBiZXR3ZWVuIHBvaW50cyBpIG9mIGNvbnNlY3V0aXZl
cyBwYXRocyBmcm9tIHBhdGhBcnJheQorICAgIHZhciB1VG90YWxEaXN0YW5jZSA9IFtdOyAvLyB1
VG90YWxEaXN0YW5jZVtwXSA6IHRvdGFsIGRpc3RhbmNlIG9mIHBhdGggcAorICAgIHZhciB2VG90
YWxEaXN0YW5jZSA9IFtdOyAvLyAgdlRvdGFsRGlzdGFuY2VbaV0gOiB0b3RhbCBkaXN0YW5jZSBi
ZXR3ZWVuIHBvaW50cyBpIG9mIGZpcnN0IGFuZCBsYXN0IHBhdGggZnJvbSBwYXRoQXJyYXkKKyAg
ICB2YXIgbWlubGc7IC8vIG1pbmltYWwgbGVuZ3RoIGFtb25nIGFsbCBwYXRocyBmcm9tIHBhdGhB
cnJheQorICAgIHZhciBsZyA9IFtdOyAvLyBhcnJheSBvZiBwYXRoIGxlbmd0aHMgOiBuYiBvZiB2
ZXJ0ZXggcGVyIHBhdGgKKyAgICB2YXIgaWR4ID0gW107IC8vIGFycmF5IG9mIHBhdGggaW5kZXhl
cyA6IGluZGV4IG9mIGVhY2ggcGF0aCAoZmlyc3QgdmVydGV4KSBpbiB0aGUgdG90YWwgdmVydGV4
IG51bWJlcgorICAgIHZhciBwOyAvLyBwYXRoIGl0ZXJhdG9yCisgICAgdmFyIGk7IC8vIHBvaW50
IGl0ZXJhdG9yCisgICAgdmFyIGo7IC8vIHBvaW50IGl0ZXJhdG9yCisgICAgLy8gaWYgc2luZ2xl
IHBhdGggaW4gcGF0aEFycmF5CisgICAgaWYgKHBhdGhBcnJheS5sZW5ndGggPCAyKSB7CisgICAg
ICAgIHZhciBhcjEgPSBbXTsKKyAgICAgICAgdmFyIGFyMiA9IFtdOworICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgcGF0aEFycmF5WzBdLmxlbmd0aCAtIG9mZnNldDsgaSsrKSB7CisgICAgICAgICAg
ICBhcjEucHVzaChwYXRoQXJyYXlbMF1baV0pOworICAgICAgICAgICAgYXIyLnB1c2gocGF0aEFy
cmF5WzBdW2kgKyBvZmZzZXRdKTsKKyAgICAgICAgfQorICAgICAgICBwYXRoQXJyYXkgPSBbYXIx
LCBhcjJdOworICAgIH0KKyAgICAvLyBwb3NpdGlvbnMgYW5kIGhvcml6b250YWwgZGlzdGFuY2Vz
ICh1KQorICAgIHZhciBpZGMgPSAwOworICAgIHZhciBjbG9zZVBhdGhDb3JyID0gKGNsb3NlUGF0
aCkgPyAxIDogMDsgLy8gdGhlIGZpbmFsIGluZGV4IHdpbGwgYmUgKzEgaWYgY2xvc2VQYXRoCisg
ICAgdmFyIHBhdGg7CisgICAgdmFyIGw7CisgICAgbWlubGcgPSBwYXRoQXJyYXlbMF0ubGVuZ3Ro
OworICAgIHZhciB2ZWN0bGc7CisgICAgdmFyIGRpc3Q7CisgICAgZm9yIChwID0gMDsgcCA8IHBh
dGhBcnJheS5sZW5ndGg7IHArKykgeworICAgICAgICB1VG90YWxEaXN0YW5jZVtwXSA9IDA7Cisg
ICAgICAgIHVzW3BdID0gWzBdOworICAgICAgICBwYXRoID0gcGF0aEFycmF5W3BdOworICAgICAg
ICBsID0gcGF0aC5sZW5ndGg7CisgICAgICAgIG1pbmxnID0gKG1pbmxnIDwgbCkgPyBtaW5sZyA6
IGw7CisgICAgICAgIGogPSAwOworICAgICAgICB3aGlsZSAoaiA8IGwpIHsKKyAgICAgICAgICAg
IHBvc2l0aW9ucy5wdXNoKHBhdGhbal0ueCwgcGF0aFtqXS55LCBwYXRoW2pdLnopOworICAgICAg
ICAgICAgaWYgKGogPiAwKSB7CisgICAgICAgICAgICAgICAgdmVjdGxnID0gcGF0aFtqXS5zdWJ0
cmFjdChwYXRoW2ogLSAxXSkubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgZGlzdCA9IHZlY3Rs
ZyArIHVUb3RhbERpc3RhbmNlW3BdOworICAgICAgICAgICAgICAgIHVzW3BdLnB1c2goZGlzdCk7
CisgICAgICAgICAgICAgICAgdVRvdGFsRGlzdGFuY2VbcF0gPSBkaXN0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaisrOworICAgICAgICB9CisgICAgICAgIGlmIChjbG9zZVBhdGgpIHsg
Ly8gYW4gZXh0cmEgaGlkZGVuIHZlcnRleCBpcyBhZGRlZCBpbiB0aGUgInBvc2l0aW9ucyIgYXJy
YXkKKyAgICAgICAgICAgIGotLTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHBhdGhbMF0u
eCwgcGF0aFswXS55LCBwYXRoWzBdLnopOworICAgICAgICAgICAgdmVjdGxnID0gcGF0aFtqXS5z
dWJ0cmFjdChwYXRoWzBdKS5sZW5ndGgoKTsKKyAgICAgICAgICAgIGRpc3QgPSB2ZWN0bGcgKyB1
VG90YWxEaXN0YW5jZVtwXTsKKyAgICAgICAgICAgIHVzW3BdLnB1c2goZGlzdCk7CisgICAgICAg
ICAgICB1VG90YWxEaXN0YW5jZVtwXSA9IGRpc3Q7CisgICAgICAgIH0KKyAgICAgICAgbGdbcF0g
PSBsICsgY2xvc2VQYXRoQ29ycjsKKyAgICAgICAgaWR4W3BdID0gaWRjOworICAgICAgICBpZGMg
Kz0gKGwgKyBjbG9zZVBhdGhDb3JyKTsKKyAgICB9CisgICAgLy8gdmVydGljYWwgZGlzdGFuY2Vz
ICh2KQorICAgIHZhciBwYXRoMTsKKyAgICB2YXIgcGF0aDI7CisgICAgdmFyIHZlcnRleDEgPSBu
dWxsOworICAgIHZhciB2ZXJ0ZXgyID0gbnVsbDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbWlubGcg
KyBjbG9zZVBhdGhDb3JyOyBpKyspIHsKKyAgICAgICAgdlRvdGFsRGlzdGFuY2VbaV0gPSAwOwor
ICAgICAgICB2c1tpXSA9IFswXTsKKyAgICAgICAgZm9yIChwID0gMDsgcCA8IHBhdGhBcnJheS5s
ZW5ndGggLSAxOyBwKyspIHsKKyAgICAgICAgICAgIHBhdGgxID0gcGF0aEFycmF5W3BdOworICAg
ICAgICAgICAgcGF0aDIgPSBwYXRoQXJyYXlbcCArIDFdOworICAgICAgICAgICAgaWYgKGkgPT09
IG1pbmxnKSB7IC8vIGNsb3NlUGF0aAorICAgICAgICAgICAgICAgIHZlcnRleDEgPSBwYXRoMVsw
XTsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXgyID0gcGF0aDJbMF07CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXgxID0gcGF0aDFbaV07Cisg
ICAgICAgICAgICAgICAgdmVydGV4MiA9IHBhdGgyW2ldOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmVjdGxnID0gdmVydGV4Mi5zdWJ0cmFjdCh2ZXJ0ZXgxKS5sZW5ndGgoKTsKKyAgICAg
ICAgICAgIGRpc3QgPSB2ZWN0bGcgKyB2VG90YWxEaXN0YW5jZVtpXTsKKyAgICAgICAgICAgIHZz
W2ldLnB1c2goZGlzdCk7CisgICAgICAgICAgICB2VG90YWxEaXN0YW5jZVtpXSA9IGRpc3Q7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNsb3NlQXJyYXkgJiYgdmVydGV4MiAmJiB2ZXJ0ZXgxKSB7
CisgICAgICAgICAgICBwYXRoMSA9IHBhdGhBcnJheVtwXTsKKyAgICAgICAgICAgIHBhdGgyID0g
cGF0aEFycmF5WzBdOworICAgICAgICAgICAgaWYgKGkgPT09IG1pbmxnKSB7IC8vIGNsb3NlUGF0
aAorICAgICAgICAgICAgICAgIHZlcnRleDIgPSBwYXRoMlswXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZlY3RsZyA9IHZlcnRleDIuc3VidHJhY3QodmVydGV4MSkubGVuZ3RoKCk7Cisg
ICAgICAgICAgICBkaXN0ID0gdmVjdGxnICsgdlRvdGFsRGlzdGFuY2VbaV07CisgICAgICAgICAg
ICB2VG90YWxEaXN0YW5jZVtpXSA9IGRpc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gdXZz
CisgICAgdmFyIHU7CisgICAgdmFyIHY7CisgICAgaWYgKGN1c3RvbVVWKSB7CisgICAgICAgIGZv
ciAocCA9IDA7IHAgPCBjdXN0b21VVi5sZW5ndGg7IHArKykgeworICAgICAgICAgICAgdXZzLnB1
c2goY3VzdG9tVVZbcF0ueCwgY3VzdG9tVVZbcF0ueSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSB7CisgICAgICAgIGZvciAocCA9IDA7IHAgPCBwYXRoQXJyYXkubGVuZ3RoOyBwKyspIHsK
KyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW5sZyArIGNsb3NlUGF0aENvcnI7IGkrKykg
eworICAgICAgICAgICAgICAgIHUgPSAodVRvdGFsRGlzdGFuY2VbcF0gIT0gMC4wKSA/IHVzW3Bd
W2ldIC8gdVRvdGFsRGlzdGFuY2VbcF0gOiAwLjA7CisgICAgICAgICAgICAgICAgdiA9ICh2VG90
YWxEaXN0YW5jZVtpXSAhPSAwLjApID8gdnNbaV1bcF0gLyB2VG90YWxEaXN0YW5jZVtpXSA6IDAu
MDsKKyAgICAgICAgICAgICAgICBpZiAoaW52ZXJ0VVYpIHsKKyAgICAgICAgICAgICAgICAgICAg
dXZzLnB1c2godiwgdSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICB1dnMucHVzaCh1LCB2KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gaW5kaWNlcworICAgIHAg
PSAwOyAvLyBwYXRoIGluZGV4CisgICAgdmFyIHBpID0gMDsgLy8gcG9zaXRpb25zIGFycmF5IGlu
ZGV4CisgICAgdmFyIGwxID0gbGdbcF0gLSAxOyAvLyBwYXRoMSBsZW5ndGgKKyAgICB2YXIgbDIg
PSBsZ1twICsgMV0gLSAxOyAvLyBwYXRoMiBsZW5ndGgKKyAgICB2YXIgbWluID0gKGwxIDwgbDIp
ID8gbDEgOiBsMjsgLy8gY3VycmVudCBwYXRoIHN0b3AgaW5kZXgKKyAgICB2YXIgc2hmdCA9IGlk
eFsxXSAtIGlkeFswXTsgLy8gc2hpZnQKKyAgICB2YXIgcGF0aDFuYiA9IGNsb3NlQXJyYXkgPyBs
Zy5sZW5ndGggOiBsZy5sZW5ndGggLSAxOyAvLyBudW1iZXIgb2YgcGF0aDEgdG8gaXRlcmF0ZQlv
bgorICAgIHdoaWxlIChwaSA8PSBtaW4gJiYgcCA8IHBhdGgxbmIpIHsgLy8gIHN0YXkgdW5kZXIg
bWluIGFuZCBkb24ndCBnbyBvdmVyIG5leHQgdG8gbGFzdCBwYXRoCisgICAgICAgIC8vIGRyYXcg
dHdvIHRyaWFuZ2xlcyBiZXR3ZWVuIHBhdGgxIChwMSkgYW5kIHBhdGgyIChwMikgOiAocDEucGks
IHAyLnBpLCBwMS5waSsxKSBhbmQgKHAyLnBpKzEsIHAxLnBpKzEsIHAyLnBpKSBjbG9ja3dpc2UK
KyAgICAgICAgaW5kaWNlcy5wdXNoKHBpLCBwaSArIHNoZnQsIHBpICsgMSk7CisgICAgICAgIGlu
ZGljZXMucHVzaChwaSArIHNoZnQgKyAxLCBwaSArIDEsIHBpICsgc2hmdCk7CisgICAgICAgIHBp
ICs9IDE7CisgICAgICAgIGlmIChwaSA9PT0gbWluKSB7IC8vIGlmIGVuZCBvZiBvbmUgb2YgdHdv
IGNvbnNlY3V0aXZlIHBhdGhzIHJlYWNoZWQsIGdvIHRvIG5leHQgZXhpc3RpbmcgcGF0aAorICAg
ICAgICAgICAgcCsrOworICAgICAgICAgICAgaWYgKHAgPT09IGxnLmxlbmd0aCAtIDEpIHsgLy8g
bGFzdCBwYXRoIG9mIHBhdGhBcnJheSByZWFjaGVkIDw9PiBjbG9zZUFycmF5ID09IHRydWUKKyAg
ICAgICAgICAgICAgICBzaGZ0ID0gaWR4WzBdIC0gaWR4W3BdOworICAgICAgICAgICAgICAgIGwx
ID0gbGdbcF0gLSAxOworICAgICAgICAgICAgICAgIGwyID0gbGdbMF0gLSAxOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc2hmdCA9IGlkeFtwICsg
MV0gLSBpZHhbcF07CisgICAgICAgICAgICAgICAgbDEgPSBsZ1twXSAtIDE7CisgICAgICAgICAg
ICAgICAgbDIgPSBsZ1twICsgMV0gLSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGkg
PSBpZHhbcF07CisgICAgICAgICAgICBtaW4gPSAobDEgPCBsMikgPyBsMSArIHBpIDogbDIgKyBw
aTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBub3JtYWxzCisgICAgX21lc2hfdmVydGV4RGF0
YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ29tcHV0ZU5vcm1h
bHMocG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzKTsKKyAgICBpZiAoY2xvc2VQYXRoKSB7IC8v
IHVwZGF0ZSBib3RoIHRoZSBmaXJzdCBhbmQgbGFzdCB2ZXJ0ZXggbm9ybWFscyB0byB0aGVpciBh
dmVyYWdlIHZhbHVlCisgICAgICAgIHZhciBpbmRleEZpcnN0ID0gMDsKKyAgICAgICAgdmFyIGlu
ZGV4TGFzdCA9IDA7CisgICAgICAgIGZvciAocCA9IDA7IHAgPCBwYXRoQXJyYXkubGVuZ3RoOyBw
KyspIHsKKyAgICAgICAgICAgIGluZGV4Rmlyc3QgPSBpZHhbcF0gKiAzOworICAgICAgICAgICAg
aWYgKHAgKyAxIDwgcGF0aEFycmF5Lmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGluZGV4TGFz
dCA9IChpZHhbcCArIDFdIC0gMSkgKiAzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgaW5kZXhMYXN0ID0gbm9ybWFscy5sZW5ndGggLSAzOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbm9ybWFsc1tpbmRleEZpcnN0XSA9IChub3JtYWxzW2lu
ZGV4Rmlyc3RdICsgbm9ybWFsc1tpbmRleExhc3RdKSAqIDAuNTsKKyAgICAgICAgICAgIG5vcm1h
bHNbaW5kZXhGaXJzdCArIDFdID0gKG5vcm1hbHNbaW5kZXhGaXJzdCArIDFdICsgbm9ybWFsc1tp
bmRleExhc3QgKyAxXSkgKiAwLjU7CisgICAgICAgICAgICBub3JtYWxzW2luZGV4Rmlyc3QgKyAy
XSA9IChub3JtYWxzW2luZGV4Rmlyc3QgKyAyXSArIG5vcm1hbHNbaW5kZXhMYXN0ICsgMl0pICog
MC41OworICAgICAgICAgICAgbm9ybWFsc1tpbmRleExhc3RdID0gbm9ybWFsc1tpbmRleEZpcnN0
XTsKKyAgICAgICAgICAgIG5vcm1hbHNbaW5kZXhMYXN0ICsgMV0gPSBub3JtYWxzW2luZGV4Rmly
c3QgKyAxXTsKKyAgICAgICAgICAgIG5vcm1hbHNbaW5kZXhMYXN0ICsgMl0gPSBub3JtYWxzW2lu
ZGV4Rmlyc3QgKyAyXTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBzaWRlcworICAgIF9tZXNo
X3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdLl9D
b21wdXRlU2lkZXMoc2lkZU9yaWVudGF0aW9uLCBwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1hbHMs
IHV2cywgb3B0aW9ucy5mcm9udFVWcywgb3B0aW9ucy5iYWNrVVZzKTsKKyAgICAvLyBDb2xvcnMK
KyAgICB2YXIgY29sb3JzID0gbnVsbDsKKyAgICBpZiAoY3VzdG9tQ29sb3JzKSB7CisgICAgICAg
IGNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoY3VzdG9tQ29sb3JzLmxlbmd0aCAqIDQpOworICAg
ICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGN1c3RvbUNvbG9ycy5sZW5ndGg7IGMrKykgeworICAg
ICAgICAgICAgY29sb3JzW2MgKiA0XSA9IGN1c3RvbUNvbG9yc1tjXS5yOworICAgICAgICAgICAg
Y29sb3JzW2MgKiA0ICsgMV0gPSBjdXN0b21Db2xvcnNbY10uZzsKKyAgICAgICAgICAgIGNvbG9y
c1tjICogNCArIDJdID0gY3VzdG9tQ29sb3JzW2NdLmI7CisgICAgICAgICAgICBjb2xvcnNbYyAq
IDQgKyAzXSA9IGN1c3RvbUNvbG9yc1tjXS5hOworICAgICAgICB9CisgICAgfQorICAgIC8vIFJl
c3VsdAorICAgIHZhciB2ZXJ0ZXhEYXRhID0gbmV3IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdKCk7CisgICAgdmFyIHBvc2l0aW9uczMy
ID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMpOworICAgIHZhciBub3JtYWxzMzIgPSBuZXcg
RmxvYXQzMkFycmF5KG5vcm1hbHMpOworICAgIHZhciB1dnMzMiA9IG5ldyBGbG9hdDMyQXJyYXko
dXZzKTsKKyAgICB2ZXJ0ZXhEYXRhLmluZGljZXMgPSBpbmRpY2VzOworICAgIHZlcnRleERhdGEu
cG9zaXRpb25zID0gcG9zaXRpb25zMzI7CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFs
czMyOworICAgIHZlcnRleERhdGEudXZzID0gdXZzMzI7CisgICAgaWYgKGNvbG9ycykgeworICAg
ICAgICB2ZXJ0ZXhEYXRhLnNldChjb2xvcnMsIF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kKTsKKyAgICB9CisgICAgaWYgKGNsb3Nl
UGF0aCkgeworICAgICAgICB2ZXJ0ZXhEYXRhLl9pZHggPSBpZHg7CisgICAgfQorICAgIHJldHVy
biB2ZXJ0ZXhEYXRhOworfTsKK19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1l
c2giXS5DcmVhdGVSaWJib24gPSBmdW5jdGlvbiAobmFtZSwgcGF0aEFycmF5LCBjbG9zZUFycmF5
LCBjbG9zZVBhdGgsIG9mZnNldCwgc2NlbmUsIHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uLCBp
bnN0YW5jZSkgeworICAgIGlmIChjbG9zZUFycmF5ID09PSB2b2lkIDApIHsgY2xvc2VBcnJheSA9
IGZhbHNlOyB9CisgICAgaWYgKHVwZGF0YWJsZSA9PT0gdm9pZCAwKSB7IHVwZGF0YWJsZSA9IGZh
bHNlOyB9CisgICAgcmV0dXJuIFJpYmJvbkJ1aWxkZXIuQ3JlYXRlUmliYm9uKG5hbWUsIHsKKyAg
ICAgICAgcGF0aEFycmF5OiBwYXRoQXJyYXksCisgICAgICAgIGNsb3NlQXJyYXk6IGNsb3NlQXJy
YXksCisgICAgICAgIGNsb3NlUGF0aDogY2xvc2VQYXRoLAorICAgICAgICBvZmZzZXQ6IG9mZnNl
dCwKKyAgICAgICAgdXBkYXRhYmxlOiB1cGRhdGFibGUsCisgICAgICAgIHNpZGVPcmllbnRhdGlv
bjogc2lkZU9yaWVudGF0aW9uLAorICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UKKyAgICB9LCBz
Y2VuZSk7Cit9OworLyoqCisgKiBDbGFzcyBjb250YWluaW5nIHN0YXRpYyBmdW5jdGlvbnMgdG8g
aGVscCBwcm9jZWR1cmFsbHkgYnVpbGQgbWVzaGVzCisgKi8KK3ZhciBSaWJib25CdWlsZGVyID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFJpYmJvbkJ1aWxkZXIo
KSB7CisgICAgfQorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSByaWJib24gbWVzaC4gVGhlIHJp
YmJvbiBpcyBhIHBhcmFtZXRyaWMgc2hhcGUuICBJdCBoYXMgbm8gcHJlZGVmaW5lZCBzaGFwZS4g
SXRzIGZpbmFsIHNoYXBlIHdpbGwgZGVwZW5kIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzCisgICAg
ICogKiBUaGUgcGFyYW1ldGVyIGBwYXRoQXJyYXlgIGlzIGEgcmVxdWlyZWQgYXJyYXkgb2YgcGF0
aHMsIHdoYXQgYXJlIGVhY2ggYW4gYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzLiBUaGUgcGF0
aEFycmF5IHBhcmFtZXRlciBkZXBpY3RzIHRoZSByaWJib24gZ2VvbWV0cnkKKyAgICAgKiAqIFRo
ZSBwYXJhbWV0ZXIgYGNsb3NlQXJyYXlgIChib29sZWFuLCBkZWZhdWx0IGZhbHNlKSBjcmVhdGVz
IGEgc2VhbSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgcGF0aHMgb2YgdGhlIHBhdGgg
YXJyYXkKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGNsb3NlUGF0aGAgKGJvb2xlYW4sIGRlZmF1
bHQgZmFsc2UpIGNyZWF0ZXMgYSBzZWFtIGJldHdlZW4gdGhlIGZpcnN0IGFuZCB0aGUgbGFzdCBw
b2ludHMgb2YgZWFjaCBwYXRoIG9mIHRoZSBwYXRoIGFycmF5CisgICAgICogKiBUaGUgcGFyYW1l
dGVyIGBvZmZzZXRgIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDogcm91bmRlZCBoYWxmIHNp
emUgb2YgdGhlIHBhdGhBcnJheSBsZW5ndGgpLCBpcyB0YWtlbiBpbiBhY2NvdW50IG9ubHkgaWYg
dGhlIGBwYXRoQXJyYXlgIGlzIGNvbnRhaW5pbmcgYSBzaW5nbGUgcGF0aAorICAgICAqICogSXQn
cyB0aGUgb2Zmc2V0IHRvIGpvaW4gdGhlIHBvaW50cyBmcm9tIHRoZSBzYW1lIHBhdGguIEV4IDog
b2Zmc2V0ID0gMTAgbWVhbnMgdGhlIHBvaW50IDEgaXMgam9pbmVkIHRvIHRoZSBwb2ludCAxMQor
ICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgaW5zdGFuY2VgIGlzIGFuIGluc3RhbmNl
IG9mIGFuIGV4aXN0aW5nIFJpYmJvbiBvYmplY3QgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZSBwYXNz
ZWQgYHBhdGhBcnJheWAgcGFyYW1ldGVyIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3df
dG8vaG93X3RvX2R5bmFtaWNhbGx5X21vcnBoX2FfbWVzaCNyaWJib24KKyAgICAgKiAqIFlvdSBj
YW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBC
QUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9y
IEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91Ymxl
LXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1h
Z2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJh
Y2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZl
Y3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEw
MS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUg
b3B0aW9uYWwgcGFyYW1ldGVyIGBpbnZlcnRVVmAgKGJvb2xlYW4sIGRlZmF1bHQgZmFsc2UpIHN3
YXBzIGluIHRoZSBnZW9tZXRyeSB0aGUgVSBhbmQgViBjb29yZGluYXRlcyB0byBhcHBseSBhIHRl
eHR1cmUKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHV2c2AgaXMgYW4gb3B0aW9uYWwgZmxhdCBh
cnJheSBvZiBgVmVjdG9yMmAgdG8gdXBkYXRlL3NldCBlYWNoIHJpYmJvbiB2ZXJ0ZXggd2l0aCBp
dHMgb3duIGN1c3RvbSBVViB2YWx1ZXMgaW5zdGVhZCBvZiB0aGUgY29tcHV0ZWQgb25lcworICAg
ICAqICogVGhlIHBhcmFtZXRlcnMgYGNvbG9yc2AgaXMgYW4gb3B0aW9uYWwgZmxhdCBhcnJheSBv
ZiBgQ29sb3I0YCB0byBzZXQvdXBkYXRlIGVhY2ggcmliYm9uIHZlcnRleCB3aXRoIGl0cyBvd24g
Y3VzdG9tIGNvbG9yIHZhbHVlcworICAgICAqICogTm90ZSB0aGF0IGlmIHlvdSB1c2UgdGhlIHBh
cmFtZXRlcnMgYHV2c2Agb3IgYGNvbG9yc2AsIHRoZSBwYXNzZWQgYXJyYXlzIG11c3QgYmUgcG9w
dWxhdGVkIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBlbGVtZW50cywgaXQgaXMgdG8gc2F5IHRo
ZSBudW1iZXIgb2YgcmliYm9uIHZlcnRpY2VzLiBSZW1lbWJlciB0aGF0IGlmIHlvdSBzZXQgYGNs
b3NlUGF0aGAgdG8gYHRydWVgLCB0aGVyZSdzIG9uZSBleHRyYSB2ZXJ0ZXggcGVyIHBhdGggaW4g
dGhlIGdlb21ldHJ5CisgICAgICogKiBNb3Jlb3ZlciwgeW91IGNhbiB1c2UgdGhlIHBhcmFtZXRl
ciBgY29sb3JgIHdpdGggYGluc3RhbmNlYCAodG8gdXBkYXRlIHRoZSByaWJib24pLCBvbmx5IGlm
IHlvdSBwcmV2aW91c2x5IHVzZWQgaXQgYXQgY3JlYXRpb24gdGltZQorICAgICAqICogVGhlIG1l
c2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVw
ZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBw
b3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0
aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9w
dGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5l
cyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSByaWJib24gbWVzaAorICAg
ICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcmliYm9uX3R1dG9yaWFs
CisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9wYXJhbWV0cmlj
X3NoYXBlcworICAgICAqLworICAgIFJpYmJvbkJ1aWxkZXIuQ3JlYXRlUmliYm9uID0gZnVuY3Rp
b24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAw
KSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICB2YXIgcGF0aEFycmF5ID0gb3B0aW9ucy5wYXRo
QXJyYXk7CisgICAgICAgIHZhciBjbG9zZUFycmF5ID0gb3B0aW9ucy5jbG9zZUFycmF5OworICAg
ICAgICB2YXIgY2xvc2VQYXRoID0gb3B0aW9ucy5jbG9zZVBhdGg7CisgICAgICAgIHZhciBzaWRl
T3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0u
X0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24pOworICAg
ICAgICB2YXIgaW5zdGFuY2UgPSBvcHRpb25zLmluc3RhbmNlOworICAgICAgICB2YXIgdXBkYXRh
YmxlID0gb3B0aW9ucy51cGRhdGFibGU7CisgICAgICAgIGlmIChpbnN0YW5jZSkgeyAvLyBleGlz
dGluZyByaWJib24gaW5zdGFuY2UgdXBkYXRlCisgICAgICAgICAgICAvLyBwb3NpdGlvbkZ1bmN0
aW9uIDogcmliYm9uIGNhc2UKKyAgICAgICAgICAgIC8vIG9ubHkgcGF0aEFycmF5IGFuZCBzaWRl
T3JpZW50YXRpb24gcGFyYW1ldGVycyBhcmUgdGFrZW4gaW50byBhY2NvdW50IGZvciBwb3NpdGlv
bnMgdXBkYXRlCisgICAgICAgICAgICB2YXIgbWluaW11bV8xID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdLnNl
dEFsbChOdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICAgICAgICAgIHZhciBtYXhpbXVtXzEgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJd
LlZlY3RvcjNbMV0uc2V0QWxsKC1OdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICAgICAgICAgIHZhciBw
b3NpdGlvbkZ1bmN0aW9uID0gZnVuY3Rpb24gKHBvc2l0aW9ucykgeworICAgICAgICAgICAgICAg
IHZhciBtaW5sZyA9IHBhdGhBcnJheVswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgdmFyIG1l
c2ggPSBpbnN0YW5jZTsKKyAgICAgICAgICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgICAgICAg
ICAgdmFyIG5zID0gKG1lc2guX29yaWdpbmFsQnVpbGRlclNpZGVPcmllbnRhdGlvbiA9PT0gX21l
c2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkRPVUJMRVNJREUpID8gMiA6
IDE7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgc2kgPSAxOyBzaSA8PSBuczsgKytzaSkgewor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHBhdGhBcnJheS5sZW5ndGg7
ICsrcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGggPSBwYXRoQXJyYXlbcF07
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHBhdGgubGVuZ3RoOworICAgICAgICAg
ICAgICAgICAgICAgICAgbWlubGcgPSAobWlubGcgPCBsKSA/IG1pbmxnIDogbDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWlubGc7ICsraikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRoUG9pbnQgPSBwYXRoW2pdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tpXSA9IHBhdGhQb2ludC54OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tpICsgMV0gPSBwYXRoUG9pbnQueTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbaSArIDJdID0gcGF0aFBvaW50Lno7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bV8xLm1pbmltaXplSW5QbGFjZUZyb21G
bG9hdHMocGF0aFBvaW50LngsIHBhdGhQb2ludC55LCBwYXRoUG9pbnQueik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF4aW11bV8xLm1heGltaXplSW5QbGFjZUZyb21GbG9hdHMocGF0
aFBvaW50LngsIHBhdGhQb2ludC55LCBwYXRoUG9pbnQueik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1lc2guX2NyZWF0aW9uRGF0YVN0b3JhZ2UgJiYgbWVzaC5fY3JlYXRp
b25EYXRhU3RvcmFnZS5jbG9zZVBhdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcGF0aFBvaW50ID0gcGF0aFswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Np
dGlvbnNbaV0gPSBwYXRoUG9pbnQueDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Np
dGlvbnNbaSArIDFdID0gcGF0aFBvaW50Lnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9zaXRpb25zW2kgKyAyXSA9IHBhdGhQb2ludC56OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGkgKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB2YXIg
cG9zaXRpb25zID0gaW5zdGFuY2UuZ2V0VmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAg
ICAgIHBvc2l0aW9uRnVuY3Rpb24ocG9zaXRpb25zKTsKKyAgICAgICAgICAgIGlmIChpbnN0YW5j
ZS5fYm91bmRpbmdJbmZvKSB7CisgICAgICAgICAgICAgICAgaW5zdGFuY2UuX2JvdW5kaW5nSW5m
by5yZUNvbnN0cnVjdChtaW5pbXVtXzEsIG1heGltdW1fMSwgaW5zdGFuY2UuX3dvcmxkTWF0cml4
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlu
c3RhbmNlLl9ib3VuZGluZ0luZm8gPSBuZXcgX0N1bGxpbmdfYm91bmRpbmdJbmZvX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIkJvdW5kaW5nSW5mbyJdKG1pbmltdW1fMSwgbWF4aW11bV8x
LCBpbnN0YW5jZS5fd29ybGRNYXRyaXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5z
dGFuY2UudXBkYXRlVmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kLCBwb3NpdGlvbnMsIGZhbHNlLCBmYWxz
ZSk7CisgICAgICAgICAgICBpZiAob3B0aW9ucy5jb2xvcnMpIHsKKyAgICAgICAgICAgICAgICB2
YXIgY29sb3JzID0gaW5zdGFuY2UuZ2V0VmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHZhciBjID0gMCwgY29sb3JJbmRleCA9IDA7IGMgPCBvcHRpb25zLmNvbG9ycy5s
ZW5ndGg7IGMrKywgY29sb3JJbmRleCArPSA0KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBj
b2xvciA9IG9wdGlvbnMuY29sb3JzW2NdOworICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY29s
b3JJbmRleF0gPSBjb2xvci5yOworICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JJbmRl
eCArIDFdID0gY29sb3IuZzsKKyAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbG9ySW5kZXgg
KyAyXSA9IGNvbG9yLmI7CisgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvckluZGV4ICsg
M10gPSBjb2xvci5hOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnN0YW5j
ZS51cGRhdGVWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQsIGNvbG9ycywgZmFsc2UsIGZhbHNlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnV2cykgeworICAgICAgICAgICAgICAg
IHZhciB1dnMgPSBpbnN0YW5jZS5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy51dnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgdXZzW2kgKiAyXSA9IG9wdGlvbnMudXZzW2ldLng7CisgICAgICAgICAgICAg
ICAgICAgIHV2c1tpICogMiArIDFdID0gb3B0aW9ucy51dnNbaV0ueTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaW5zdGFuY2UudXBkYXRlVmVydGljZXNEYXRhKF9idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kLCB1dnMs
IGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWluc3RhbmNl
LmFyZU5vcm1hbHNGcm96ZW4gfHwgaW5zdGFuY2UuaXNGYWNldERhdGFFbmFibGVkKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGluZGljZXMgPSBpbnN0YW5jZS5nZXRJbmRpY2VzKCk7CisgICAgICAg
ICAgICAgICAgdmFyIG5vcm1hbHMgPSBpbnN0YW5jZS5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKTsK
KyAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gaW5zdGFuY2UuaXNGYWNldERhdGFFbmFibGVk
ID8gaW5zdGFuY2UuZ2V0RmFjZXREYXRhUGFyYW1ldGVycygpIDogbnVsbDsKKyAgICAgICAgICAg
ICAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eERhdGEiXS5Db21wdXRlTm9ybWFscyhwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1hbHMsIHBhcmFt
cyk7CisgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLl9jcmVhdGlvbkRhdGFTdG9yYWdlICYm
IGluc3RhbmNlLl9jcmVhdGlvbkRhdGFTdG9yYWdlLmNsb3NlUGF0aCkgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgaW5kZXhGaXJzdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHZhciBpbmRl
eExhc3QgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHBhdGhB
cnJheS5sZW5ndGg7IHArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGaXJzdCA9
IGluc3RhbmNlLl9jcmVhdGlvbkRhdGFTdG9yYWdlLmlkeFtwXSAqIDM7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocCArIDEgPCBwYXRoQXJyYXkubGVuZ3RoKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhMYXN0ID0gKGluc3RhbmNlLl9jcmVhdGlvbkRhdGFTdG9yYWdl
LmlkeFtwICsgMV0gLSAxKSAqIDM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eExhc3QgPSBub3JtYWxzLmxlbmd0aCAtIDM7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzW2luZGV4Rmlyc3RdID0gKG5vcm1hbHNbaW5k
ZXhGaXJzdF0gKyBub3JtYWxzW2luZGV4TGFzdF0pICogMC41OworICAgICAgICAgICAgICAgICAg
ICAgICAgbm9ybWFsc1tpbmRleEZpcnN0ICsgMV0gPSAobm9ybWFsc1tpbmRleEZpcnN0ICsgMV0g
KyBub3JtYWxzW2luZGV4TGFzdCArIDFdKSAqIDAuNTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5vcm1hbHNbaW5kZXhGaXJzdCArIDJdID0gKG5vcm1hbHNbaW5kZXhGaXJzdCArIDJdICsgbm9y
bWFsc1tpbmRleExhc3QgKyAyXSkgKiAwLjU7CisgICAgICAgICAgICAgICAgICAgICAgICBub3Jt
YWxzW2luZGV4TGFzdF0gPSBub3JtYWxzW2luZGV4Rmlyc3RdOworICAgICAgICAgICAgICAgICAg
ICAgICAgbm9ybWFsc1tpbmRleExhc3QgKyAxXSA9IG5vcm1hbHNbaW5kZXhGaXJzdCArIDFdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1tpbmRleExhc3QgKyAyXSA9IG5vcm1hbHNb
aW5kZXhGaXJzdCArIDJdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICghKGluc3RhbmNlLmFyZU5vcm1hbHNGcm96ZW4pKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnVwZGF0ZVZlcnRpY2VzRGF0YShfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQsIG5v
cm1hbHMsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAv
LyBuZXcgcmliYm9uIGNyZWF0aW9uCisgICAgICAgICAgICB2YXIgcmliYm9uID0gbmV3IF9tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXShuYW1lLCBzY2VuZSk7CisgICAg
ICAgICAgICByaWJib24uX29yaWdpbmFsQnVpbGRlclNpZGVPcmllbnRhdGlvbiA9IHNpZGVPcmll
bnRhdGlvbjsKKyAgICAgICAgICAgIHJpYmJvbi5fY3JlYXRpb25EYXRhU3RvcmFnZSA9IG5ldyBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJfQ3JlYXRpb25EYXRhU3RvcmFnZSJd
KCk7CisgICAgICAgICAgICB2YXIgdmVydGV4RGF0YSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdLkNyZWF0ZVJpYmJvbihvcHRpb25z
KTsKKyAgICAgICAgICAgIGlmIChjbG9zZVBhdGgpIHsKKyAgICAgICAgICAgICAgICByaWJib24u
X2NyZWF0aW9uRGF0YVN0b3JhZ2UuaWR4ID0gdmVydGV4RGF0YS5faWR4OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmliYm9uLl9jcmVhdGlvbkRhdGFTdG9yYWdlLmNsb3NlUGF0aCA9IGNs
b3NlUGF0aDsKKyAgICAgICAgICAgIHJpYmJvbi5fY3JlYXRpb25EYXRhU3RvcmFnZS5jbG9zZUFy
cmF5ID0gY2xvc2VBcnJheTsKKyAgICAgICAgICAgIHZlcnRleERhdGEuYXBwbHlUb01lc2gocmli
Ym9uLCB1cGRhdGFibGUpOworICAgICAgICAgICAgcmV0dXJuIHJpYmJvbjsKKyAgICAgICAgfQor
ICAgIH07CisgICAgcmV0dXJuIFJpYmJvbkJ1aWxkZXI7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL01lc2hlcy9CdWlsZGVycy9zaGFwZUJ1aWxkZXIudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hlcy9C
dWlsZGVycy9zaGFwZUJ1aWxkZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2hhcGVCdWlsZGVyICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNoYXBlQnVpbGRlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gU2hhcGVCdWlsZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21h
dGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2ggKi8g
Ii4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmliYm9uQnVp
bGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9yaWJib25CdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9yaWJib25CdWlsZGVyLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfcGF0aF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMv
bWF0aC5wYXRoICovICIuL01hdGhzL21hdGgucGF0aC50cyIpOworCisKKworCitfbWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uRXh0cnVkZVNoYXBlID0gZnVuY3Rpb24g
KG5hbWUsIHNoYXBlLCBwYXRoLCBzY2FsZSwgcm90YXRpb24sIGNhcCwgc2NlbmUsIHVwZGF0YWJs
ZSwgc2lkZU9yaWVudGF0aW9uLCBpbnN0YW5jZSkgeworICAgIGlmIChzY2VuZSA9PT0gdm9pZCAw
KSB7IHNjZW5lID0gbnVsbDsgfQorICAgIHZhciBvcHRpb25zID0geworICAgICAgICBzaGFwZTog
c2hhcGUsCisgICAgICAgIHBhdGg6IHBhdGgsCisgICAgICAgIHNjYWxlOiBzY2FsZSwKKyAgICAg
ICAgcm90YXRpb246IHJvdGF0aW9uLAorICAgICAgICBjYXA6IChjYXAgPT09IDApID8gMCA6IGNh
cCB8fCBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uTk9fQ0FQLAor
ICAgICAgICBzaWRlT3JpZW50YXRpb246IHNpZGVPcmllbnRhdGlvbiwKKyAgICAgICAgaW5zdGFu
Y2U6IGluc3RhbmNlLAorICAgICAgICB1cGRhdGFibGU6IHVwZGF0YWJsZQorICAgIH07CisgICAg
cmV0dXJuIFNoYXBlQnVpbGRlci5FeHRydWRlU2hhcGUobmFtZSwgb3B0aW9ucywgc2NlbmUpOwor
fTsKK19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5FeHRydWRlU2hh
cGVDdXN0b20gPSBmdW5jdGlvbiAobmFtZSwgc2hhcGUsIHBhdGgsIHNjYWxlRnVuY3Rpb24sIHJv
dGF0aW9uRnVuY3Rpb24sIHJpYmJvbkNsb3NlQXJyYXksIHJpYmJvbkNsb3NlUGF0aCwgY2FwLCBz
Y2VuZSwgdXBkYXRhYmxlLCBzaWRlT3JpZW50YXRpb24sIGluc3RhbmNlKSB7CisgICAgdmFyIG9w
dGlvbnMgPSB7CisgICAgICAgIHNoYXBlOiBzaGFwZSwKKyAgICAgICAgcGF0aDogcGF0aCwKKyAg
ICAgICAgc2NhbGVGdW5jdGlvbjogc2NhbGVGdW5jdGlvbiwKKyAgICAgICAgcm90YXRpb25GdW5j
dGlvbjogcm90YXRpb25GdW5jdGlvbiwKKyAgICAgICAgcmliYm9uQ2xvc2VBcnJheTogcmliYm9u
Q2xvc2VBcnJheSwKKyAgICAgICAgcmliYm9uQ2xvc2VQYXRoOiByaWJib25DbG9zZVBhdGgsCisg
ICAgICAgIGNhcDogKGNhcCA9PT0gMCkgPyAwIDogY2FwIHx8IF9tZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIk1lc2giXS5OT19DQVAsCisgICAgICAgIHNpZGVPcmllbnRhdGlvbjog
c2lkZU9yaWVudGF0aW9uLAorICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsCisgICAgICAgIHVw
ZGF0YWJsZTogdXBkYXRhYmxlCisgICAgfTsKKyAgICByZXR1cm4gU2hhcGVCdWlsZGVyLkV4dHJ1
ZGVTaGFwZUN1c3RvbShuYW1lLCBvcHRpb25zLCBzY2VuZSk7Cit9OworLyoqCisgKiBDbGFzcyBj
b250YWluaW5nIHN0YXRpYyBmdW5jdGlvbnMgdG8gaGVscCBwcm9jZWR1cmFsbHkgYnVpbGQgbWVz
aGVzCisgKi8KK3ZhciBTaGFwZUJ1aWxkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgZnVuY3Rpb24gU2hhcGVCdWlsZGVyKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGFuIGV4dHJ1ZGVkIHNoYXBlIG1lc2guIFRoZSBleHRydXNpb24gaXMgYSBwYXJhbWV0
cmljIHNoYXBlLiBJdCBoYXMgbm8gcHJlZGVmaW5lZCBzaGFwZS4gSXRzIGZpbmFsIHNoYXBlIHdp
bGwgZGVwZW5kIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLgorICAgICAqICogVGhlIHBhcmFtZXRl
ciBgc2hhcGVgIGlzIGEgcmVxdWlyZWQgYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzLiBUaGlz
IGFycmF5IGRlcGljdHMgdGhlIHNoYXBlIHRvIGJlIGV4dHJ1ZGVkIGluIGl0cyBsb2NhbCBzcGFj
ZSA6IHRoZSBzaGFwZSBtdXN0IGJlIGRlc2lnbmVkIGluIHRoZSB4T3kgcGxhbmUgYW5kIHdpbGwg
YmUgZXh0cnVkZWQgYWxvbmcgdGhlIFogYXhpcy4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHBh
dGhgIGlzIGEgcmVxdWlyZWQgYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzLiBUaGlzIGlzIHRo
ZSBheGlzIGN1cnZlIHRoZSBzaGFwZSBpcyBleHRydWRlZCBhbG9uZy4KKyAgICAgKiAqIFRoZSBw
YXJhbWV0ZXIgYHJvdGF0aW9uYCAoZmxvYXQsIGRlZmF1bHQgMCByYWRpYW5zKSBpcyB0aGUgYW5n
bGUgdmFsdWUgdG8gcm90YXRlIHRoZSBzaGFwZSBlYWNoIHN0ZXAgKGVhY2ggcGF0aCBwb2ludCks
IGZyb20gdGhlIGZvcm1lciBzdGVwIChzbyByb3RhdGlvbiBhZGRlZCBlYWNoIHN0ZXApIGFsb25n
IHRoZSBjdXJ2ZS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHNjYWxlYCAoZmxvYXQsIGRlZmF1
bHQgMSkgaXMgdGhlIHZhbHVlIHRvIHNjYWxlIHRoZSBzaGFwZS4KKyAgICAgKiAqIFRoZSBwYXJh
bWV0ZXIgYGNhcGAgc2V0cyB0aGUgd2F5IHRoZSBleHRydWRlZCBzaGFwZSBpcyBjYXBwZWQuIFBv
c3NpYmxlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5OT19DQVAgKGRlZmF1bHQpLCBCQUJZTE9OLk1l
c2guQ0FQX1NUQVJULCBCQUJZTE9OLk1lc2guQ0FQX0VORCwgQkFCWUxPTi5NZXNoLkNBUF9BTEwK
KyAgICAgKiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYGluc3RhbmNlYCBpcyBhbiBpbnN0YW5j
ZSBvZiBhbiBleGlzdGluZyBFeHRydWRlZFNoYXBlIG9iamVjdCB0byBiZSB1cGRhdGVkIHdpdGgg
dGhlIHBhc3NlZCBgc2hhcGVgLCBgcGF0aGAsIGBzY2FsZWAgb3IgYHJvdGF0aW9uYCBwYXJhbWV0
ZXJzIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX2R5bmFtaWNhbGx5
X21vcnBoX2FfbWVzaCNleHRydWRlZC1zaGFwZQorICAgICAqICogUmVtZW1iZXIgeW91IGNhbiBv
bmx5IGNoYW5nZSB0aGUgc2hhcGUgb3IgcGF0aCBwb2ludCBwb3NpdGlvbnMsIG5vdCB0aGVpciBu
dW1iZXIgd2hlbiB1cGRhdGluZyBhbiBleHRydWRlZCBzaGFwZS4KKyAgICAgKiAqIFlvdSBjYW4g
YWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZ
TE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJB
QllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNp
ZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2Ug
dG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sg
c2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3Rv
cjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9k
aXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUgb3B0
aW9uYWwgcGFyYW1ldGVyIGBpbnZlcnRVVmAgKGJvb2xlYW4sIGRlZmF1bHQgZmFsc2UpIHN3YXBz
IGluIHRoZSBnZW9tZXRyeSB0aGUgVSBhbmQgViBjb29yZGluYXRlcyB0byBhcHBseSBhIHRleHR1
cmUuCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBi
b29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVy
bmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQuCisgICAgICog
QHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBv
cHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAg
KiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5z
IHRoZSBleHRydWRlZCBzaGFwZSBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9wYXJhbWV0cmljX3NoYXBlcworICAgICAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjZXh0cnVkZWQtc2hhcGVzCisg
ICAgICovCisgICAgU2hhcGVCdWlsZGVyLkV4dHJ1ZGVTaGFwZSA9IGZ1bmN0aW9uIChuYW1lLCBv
cHRpb25zLCBzY2VuZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9
IG51bGw7IH0KKyAgICAgICAgdmFyIHBhdGggPSBvcHRpb25zLnBhdGg7CisgICAgICAgIHZhciBz
aGFwZSA9IG9wdGlvbnMuc2hhcGU7CisgICAgICAgIHZhciBzY2FsZSA9IG9wdGlvbnMuc2NhbGUg
fHwgMTsKKyAgICAgICAgdmFyIHJvdGF0aW9uID0gb3B0aW9ucy5yb3RhdGlvbiB8fCAwOworICAg
ICAgICB2YXIgY2FwID0gKG9wdGlvbnMuY2FwID09PSAwKSA/IDAgOiBvcHRpb25zLmNhcCB8fCBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uTk9fQ0FQOworICAgICAg
ICB2YXIgdXBkYXRhYmxlID0gb3B0aW9ucy51cGRhdGFibGU7CisgICAgICAgIHZhciBzaWRlT3Jp
ZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uX0dl
dERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24pOworICAgICAg
ICB2YXIgaW5zdGFuY2UgPSBvcHRpb25zLmluc3RhbmNlIHx8IG51bGw7CisgICAgICAgIHZhciBp
bnZlcnRVViA9IG9wdGlvbnMuaW52ZXJ0VVYgfHwgZmFsc2U7CisgICAgICAgIHJldHVybiBTaGFw
ZUJ1aWxkZXIuX0V4dHJ1ZGVTaGFwZUdlbmVyaWMobmFtZSwgc2hhcGUsIHBhdGgsIHNjYWxlLCBy
b3RhdGlvbiwgbnVsbCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBjYXAsIGZhbHNlLCBzY2VuZSwgdXBk
YXRhYmxlID8gdHJ1ZSA6IGZhbHNlLCBzaWRlT3JpZW50YXRpb24sIGluc3RhbmNlLCBpbnZlcnRV
Viwgb3B0aW9ucy5mcm9udFVWcyB8fCBudWxsLCBvcHRpb25zLmJhY2tVVnMgfHwgbnVsbCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIGN1c3RvbSBleHRydWRlZCBzaGFwZSBt
ZXNoLgorICAgICAqIFRoZSBjdXN0b20gZXh0cnVzaW9uIGlzIGEgcGFyYW1ldHJpYyBzaGFwZS4g
SXQgaGFzIG5vIHByZWRlZmluZWQgc2hhcGUuIEl0cyBmaW5hbCBzaGFwZSB3aWxsIGRlcGVuZCBv
biB0aGUgaW5wdXQgcGFyYW1ldGVycy4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHNoYXBlYCBp
cyBhIHJlcXVpcmVkIGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMy4gVGhpcyBhcnJheSBkZXBp
Y3RzIHRoZSBzaGFwZSB0byBiZSBleHRydWRlZCBpbiBpdHMgbG9jYWwgc3BhY2UgOiB0aGUgc2hh
cGUgbXVzdCBiZSBkZXNpZ25lZCBpbiB0aGUgeE95IHBsYW5lIGFuZCB3aWxsIGJlIGV4dHJ1ZGVk
IGFsb25nIHRoZSBaIGF4aXMuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBwYXRoYCBpcyBhIHJl
cXVpcmVkIGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMy4gVGhpcyBpcyB0aGUgYXhpcyBjdXJ2
ZSB0aGUgc2hhcGUgaXMgZXh0cnVkZWQgYWxvbmcuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBy
b3RhdGlvbkZ1bmN0aW9uYCAoSlMgZnVuY3Rpb24pIGlzIGEgY3VzdG9tIEphdmFzY3JpcHQgZnVu
Y3Rpb24gY2FsbGVkIG9uIGVhY2ggcGF0aCBwb2ludC4gVGhpcyBmdW5jdGlvbiBpcyBwYXNzZWQg
dGhlIHBvc2l0aW9uIGkgb2YgdGhlIHBvaW50IGluIHRoZSBwYXRoIGFuZCB0aGUgZGlzdGFuY2Ug
b2YgdGhpcyBwb2ludCBmcm9tIHRoZSBiZWdpbmluZyBvZiB0aGUgcGF0aAorICAgICAqICogSXQg
bXVzdCByZXR1cm5zIGEgZmxvYXQgdmFsdWUgdGhhdCB3aWxsIGJlIHRoZSByb3RhdGlvbiBpbiBy
YWRpYW5zIGFwcGxpZWQgdG8gdGhlIHNoYXBlIG9uIGVhY2ggcGF0aCBwb2ludC4KKyAgICAgKiAq
IFRoZSBwYXJhbWV0ZXIgYHNjYWxlRnVuY3Rpb25gIChKUyBmdW5jdGlvbikgaXMgYSBjdXN0b20g
SmF2YXNjcmlwdCBmdW5jdGlvbiBjYWxsZWQgb24gZWFjaCBwYXRoIHBvaW50LiBUaGlzIGZ1bmN0
aW9uIGlzIHBhc3NlZCB0aGUgcG9zaXRpb24gaSBvZiB0aGUgcG9pbnQgaW4gdGhlIHBhdGggYW5k
IHRoZSBkaXN0YW5jZSBvZiB0aGlzIHBvaW50IGZyb20gdGhlIGJlZ2luaW5nIG9mIHRoZSBwYXRo
CisgICAgICogKiBJdCBtdXN0IHJldHVybnMgYSBmbG9hdCB2YWx1ZSB0aGF0IHdpbGwgYmUgdGhl
IHNjYWxlIHZhbHVlIGFwcGxpZWQgdG8gdGhlIHNoYXBlIG9uIGVhY2ggcGF0aCBwb2ludAorICAg
ICAqICogVGhlIHBhcmFtZXRlciBgcmliYm9uQ2xvc2VQYXRoYCAoYm9vbGVhbiwgZGVmYXVsdCBm
YWxzZSkgZm9yY2VzIHRoZSBleHRydXNpb24gdW5kZXJseWluZyByaWJib24gdG8gY2xvc2UgYWxs
IHRoZSBwYXRocyBpbiBpdHMgYHBhdGhBcnJheWAKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHJp
YmJvbkNsb3NlQXJyYXlgIChib29sZWFuLCBkZWZhdWx0IGZhbHNlKSBmb3JjZXMgdGhlIGV4dHJ1
c2lvbiB1bmRlcmx5aW5nIHJpYmJvbiB0byBjbG9zZSBpdHMgYHBhdGhBcnJheWAKKyAgICAgKiAq
IFRoZSBwYXJhbWV0ZXIgYGNhcGAgc2V0cyB0aGUgd2F5IHRoZSBleHRydWRlZCBzaGFwZSBpcyBj
YXBwZWQuIFBvc3NpYmxlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5OT19DQVAgKGRlZmF1bHQpLCBC
QUJZTE9OLk1lc2guQ0FQX1NUQVJULCBCQUJZTE9OLk1lc2guQ0FQX0VORCwgQkFCWUxPTi5NZXNo
LkNBUF9BTEwKKyAgICAgKiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYGluc3RhbmNlYCBpcyBh
biBpbnN0YW5jZSBvZiBhbiBleGlzdGluZyBFeHRydWRlZFNoYXBlIG9iamVjdCB0byBiZSB1cGRh
dGVkIHdpdGggdGhlIHBhc3NlZCBgc2hhcGVgLCBgcGF0aGAsIGBzY2FsZWAgb3IgYHJvdGF0aW9u
YCBwYXJhbWV0ZXJzIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX2R5
bmFtaWNhbGx5X21vcnBoX2FfbWVzaCNleHRydWRlZC1zaGFwZQorICAgICAqICogUmVtZW1iZXIg
eW91IGNhbiBvbmx5IGNoYW5nZSB0aGUgc2hhcGUgb3IgcGF0aCBwb2ludCBwb3NpdGlvbnMsIG5v
dCB0aGVpciBudW1iZXIgd2hlbiB1cGRhdGluZyBhbiBleHRydWRlZCBzaGFwZQorICAgICAqICog
WW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9uIHdpdGggdGhlIHZhbHVl
cyA6IEJBQllMT04uTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBCQUJZTE9OLk1lc2guQkFDS1NJ
REUgb3IgQkFCWUxPTi5NZXNoLkRPVUJMRVNJREUKKyAgICAgKiAqIElmIHlvdSBjcmVhdGUgYSBk
b3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVy
ZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZlbHkgb24gdGhlIGZyb250IGFuZCB0
aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBmcm9udFVWc2AgYW5kIGBiYWNrVVZz
YCAoVmVjdG9yNCkuIERldGFpbCBoZXJlIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5
bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50YXRpb24KKyAgICAgKiAq
IFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYGludmVydFVWYCAoYm9vbGVhbiwgZGVmYXVsdCBmYWxz
ZSkgc3dhcHMgaW4gdGhlIGdlb21ldHJ5IHRoZSBVIGFuZCBWIGNvb3JkaW5hdGVzIHRvIGFwcGx5
IGEgdGV4dHVyZQorICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0
aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0
cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkCisg
ICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBw
YXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gK
KyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBy
ZXR1cm5zIHRoZSBjdXN0b20gZXh0cnVkZWQgc2hhcGUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6
Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjY3VzdG9tLWV4dHJ1
ZGVkLXNoYXBlcworICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
cGFyYW1ldHJpY19zaGFwZXMKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL3BhcmFtZXRyaWNfc2hhcGVzI2V4dHJ1ZGVkLXNoYXBlcworICAgICAqLworICAgIFNo
YXBlQnVpbGRlci5FeHRydWRlU2hhcGVDdXN0b20gPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywg
c2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9
CisgICAgICAgIHZhciBwYXRoID0gb3B0aW9ucy5wYXRoOworICAgICAgICB2YXIgc2hhcGUgPSBv
cHRpb25zLnNoYXBlOworICAgICAgICB2YXIgc2NhbGVGdW5jdGlvbiA9IG9wdGlvbnMuc2NhbGVG
dW5jdGlvbiB8fCAoZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSk7CisgICAgICAgIHZhciByb3Rh
dGlvbkZ1bmN0aW9uID0gb3B0aW9ucy5yb3RhdGlvbkZ1bmN0aW9uIHx8IChmdW5jdGlvbiAoKSB7
IHJldHVybiAwOyB9KTsKKyAgICAgICAgdmFyIHJpYmJvbkNsb3NlQXJyYXkgPSBvcHRpb25zLnJp
YmJvbkNsb3NlQXJyYXkgfHwgZmFsc2U7CisgICAgICAgIHZhciByaWJib25DbG9zZVBhdGggPSBv
cHRpb25zLnJpYmJvbkNsb3NlUGF0aCB8fCBmYWxzZTsKKyAgICAgICAgdmFyIGNhcCA9IChvcHRp
b25zLmNhcCA9PT0gMCkgPyAwIDogb3B0aW9ucy5jYXAgfHwgX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siTWVzaCJdLk5PX0NBUDsKKyAgICAgICAgdmFyIHVwZGF0YWJsZSA9IG9w
dGlvbnMudXBkYXRhYmxlOworICAgICAgICB2YXIgc2lkZU9yaWVudGF0aW9uID0gX21lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLl9HZXREZWZhdWx0U2lkZU9yaWVudGF0
aW9uKG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uKTsKKyAgICAgICAgdmFyIGluc3RhbmNlID0gb3B0
aW9ucy5pbnN0YW5jZTsKKyAgICAgICAgdmFyIGludmVydFVWID0gb3B0aW9ucy5pbnZlcnRVViB8
fCBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFNoYXBlQnVpbGRlci5fRXh0cnVkZVNoYXBlR2VuZXJp
YyhuYW1lLCBzaGFwZSwgcGF0aCwgbnVsbCwgbnVsbCwgc2NhbGVGdW5jdGlvbiwgcm90YXRpb25G
dW5jdGlvbiwgcmliYm9uQ2xvc2VBcnJheSwgcmliYm9uQ2xvc2VQYXRoLCBjYXAsIHRydWUsIHNj
ZW5lLCB1cGRhdGFibGUgPyB0cnVlIDogZmFsc2UsIHNpZGVPcmllbnRhdGlvbiwgaW5zdGFuY2Ug
fHwgbnVsbCwgaW52ZXJ0VVYsIG9wdGlvbnMuZnJvbnRVVnMgfHwgbnVsbCwgb3B0aW9ucy5iYWNr
VVZzIHx8IG51bGwpOworICAgIH07CisgICAgU2hhcGVCdWlsZGVyLl9FeHRydWRlU2hhcGVHZW5l
cmljID0gZnVuY3Rpb24gKG5hbWUsIHNoYXBlLCBjdXJ2ZSwgc2NhbGUsIHJvdGF0aW9uLCBzY2Fs
ZUZ1bmN0aW9uLCByb3RhdGVGdW5jdGlvbiwgcmJDQSwgcmJDUCwgY2FwLCBjdXN0b20sIHNjZW5l
LCB1cGR0YmwsIHNpZGUsIGluc3RhbmNlLCBpbnZlcnRVViwgZnJvbnRVVnMsIGJhY2tVVnMpIHsK
KyAgICAgICAgLy8gZXh0cnVzaW9uIGdlb21ldHJ5CisgICAgICAgIHZhciBleHRydXNpb25QYXRo
QXJyYXkgPSBmdW5jdGlvbiAoc2hhcGUsIGN1cnZlLCBwYXRoM0QsIHNoYXBlUGF0aHMsIHNjYWxl
LCByb3RhdGlvbiwgc2NhbGVGdW5jdGlvbiwgcm90YXRlRnVuY3Rpb24sIGNhcCwgY3VzdG9tKSB7
CisgICAgICAgICAgICB2YXIgdGFuZ2VudHMgPSBwYXRoM0QuZ2V0VGFuZ2VudHMoKTsKKyAgICAg
ICAgICAgIHZhciBub3JtYWxzID0gcGF0aDNELmdldE5vcm1hbHMoKTsKKyAgICAgICAgICAgIHZh
ciBiaW5vcm1hbHMgPSBwYXRoM0QuZ2V0Qmlub3JtYWxzKCk7CisgICAgICAgICAgICB2YXIgZGlz
dGFuY2VzID0gcGF0aDNELmdldERpc3RhbmNlcygpOworICAgICAgICAgICAgdmFyIGFuZ2xlID0g
MDsKKyAgICAgICAgICAgIHZhciByZXR1cm5TY2FsZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNj
YWxlICE9PSBudWxsID8gc2NhbGUgOiAxOyB9OworICAgICAgICAgICAgdmFyIHJldHVyblJvdGF0
aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcm90YXRpb24gIT09IG51bGwgPyByb3RhdGlvbiA6
IDA7IH07CisgICAgICAgICAgICB2YXIgcm90YXRlID0gY3VzdG9tICYmIHJvdGF0ZUZ1bmN0aW9u
ID8gcm90YXRlRnVuY3Rpb24gOiByZXR1cm5Sb3RhdGlvbjsKKyAgICAgICAgICAgIHZhciBzY2wg
PSBjdXN0b20gJiYgc2NhbGVGdW5jdGlvbiA/IHNjYWxlRnVuY3Rpb24gOiByZXR1cm5TY2FsZTsK
KyAgICAgICAgICAgIHZhciBpbmRleCA9IChjYXAgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIk1lc2giXS5OT19DQVAgfHwgY2FwID09PSBfbWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uQ0FQX0VORCkgPyAwIDogMjsKKyAgICAgICAgICAgIHZh
ciByb3RhdGlvbk1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdOworICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjdXJ2ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBzaGFw
ZVBhdGggPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAgICAgICB2YXIgYW5nbGVTdGVwID0gcm90
YXRlKGksIGRpc3RhbmNlc1tpXSk7CisgICAgICAgICAgICAgICAgdmFyIHNjYWxlUmF0aW8gPSBz
Y2woaSwgZGlzdGFuY2VzW2ldKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8
IHNoYXBlLmxlbmd0aDsgcCsrKSB7CisgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXS5Sb3RhdGlvbkF4aXNU
b1JlZih0YW5nZW50c1tpXSwgYW5nbGUsIHJvdGF0aW9uTWF0cml4KTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHBsYW5lZCA9ICgodGFuZ2VudHNbaV0uc2NhbGUoc2hhcGVbcF0ueikpLmFkZChu
b3JtYWxzW2ldLnNjYWxlKHNoYXBlW3BdLngpKS5hZGQoYmlub3JtYWxzW2ldLnNjYWxlKHNoYXBl
W3BdLnkpKSk7CisgICAgICAgICAgICAgICAgICAgIHZhciByb3RhdGVkID0gc2hhcGVQYXRoW3Bd
ID8gc2hhcGVQYXRoW3BdIDogX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICAgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNm
b3JtQ29vcmRpbmF0ZXNUb1JlZihwbGFuZWQsIHJvdGF0aW9uTWF0cml4LCByb3RhdGVkKTsKKyAg
ICAgICAgICAgICAgICAgICAgcm90YXRlZC5zY2FsZUluUGxhY2Uoc2NhbGVSYXRpbykuYWRkSW5Q
bGFjZShjdXJ2ZVtpXSk7CisgICAgICAgICAgICAgICAgICAgIHNoYXBlUGF0aFtwXSA9IHJvdGF0
ZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNoYXBlUGF0aHNbaW5kZXhd
ID0gc2hhcGVQYXRoOworICAgICAgICAgICAgICAgIGFuZ2xlICs9IGFuZ2xlU3RlcDsKKyAgICAg
ICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gY2FwCisg
ICAgICAgICAgICB2YXIgY2FwUGF0aCA9IGZ1bmN0aW9uIChzaGFwZVBhdGgpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgcG9pbnRDYXAgPSBBcnJheSgpOworICAgICAgICAgICAgICAgIHZhciBiYXJ5
Y2VudGVyID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICAgICAgdmFyIGk7CisgICAgICAgICAgICAg
ICAgZm9yIChpID0gMDsgaSA8IHNoYXBlUGF0aC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBiYXJ5Y2VudGVyLmFkZEluUGxhY2Uoc2hhcGVQYXRoW2ldKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYmFyeWNlbnRlci5zY2FsZUluUGxhY2UoMS4wIC8gc2hh
cGVQYXRoLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNoYXBlUGF0
aC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBwb2ludENhcC5wdXNoKGJhcnlj
ZW50ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnRD
YXA7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgc3dpdGNoIChjYXApIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5O
T19DQVA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNBUF9TVEFSVDoKKyAg
ICAgICAgICAgICAgICAgICAgc2hhcGVQYXRoc1swXSA9IGNhcFBhdGgoc2hhcGVQYXRoc1syXSk7
CisgICAgICAgICAgICAgICAgICAgIHNoYXBlUGF0aHNbMV0gPSBzaGFwZVBhdGhzWzJdOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIF9tZXNoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfRU5EOgorICAgICAgICAgICAgICAg
ICAgICBzaGFwZVBhdGhzW2luZGV4XSA9IHNoYXBlUGF0aHNbaW5kZXggLSAxXTsKKyAgICAgICAg
ICAgICAgICAgICAgc2hhcGVQYXRoc1tpbmRleCArIDFdID0gY2FwUGF0aChzaGFwZVBhdGhzW2lu
ZGV4IC0gMV0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfQUxMOgor
ICAgICAgICAgICAgICAgICAgICBzaGFwZVBhdGhzWzBdID0gY2FwUGF0aChzaGFwZVBhdGhzWzJd
KTsKKyAgICAgICAgICAgICAgICAgICAgc2hhcGVQYXRoc1sxXSA9IHNoYXBlUGF0aHNbMl07Cisg
ICAgICAgICAgICAgICAgICAgIHNoYXBlUGF0aHNbaW5kZXhdID0gc2hhcGVQYXRoc1tpbmRleCAt
IDFdOworICAgICAgICAgICAgICAgICAgICBzaGFwZVBhdGhzW2luZGV4ICsgMV0gPSBjYXBQYXRo
KHNoYXBlUGF0aHNbaW5kZXggLSAxXSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNoYXBlUGF0aHM7CisgICAgICAgIH07CisgICAg
ICAgIHZhciBwYXRoM0Q7CisgICAgICAgIHZhciBwYXRoQXJyYXk7CisgICAgICAgIGlmIChpbnN0
YW5jZSkgeyAvLyBpbnN0YW5jZSB1cGRhdGUKKyAgICAgICAgICAgIHZhciBzdG9yYWdlID0gaW5z
dGFuY2UuX2NyZWF0aW9uRGF0YVN0b3JhZ2U7CisgICAgICAgICAgICBwYXRoM0QgPSBzdG9yYWdl
LnBhdGgzRC51cGRhdGUoY3VydmUpOworICAgICAgICAgICAgcGF0aEFycmF5ID0gZXh0cnVzaW9u
UGF0aEFycmF5KHNoYXBlLCBjdXJ2ZSwgc3RvcmFnZS5wYXRoM0QsIHN0b3JhZ2UucGF0aEFycmF5
LCBzY2FsZSwgcm90YXRpb24sIHNjYWxlRnVuY3Rpb24sIHJvdGF0ZUZ1bmN0aW9uLCBzdG9yYWdl
LmNhcCwgY3VzdG9tKTsKKyAgICAgICAgICAgIGluc3RhbmNlID0gX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZVJpYmJvbigiIiwgcGF0aEFycmF5LCBmYWxz
ZSwgZmFsc2UsIDAsIHNjZW5lIHx8IHVuZGVmaW5lZCwgZmFsc2UsIDAsIGluc3RhbmNlKTsKKyAg
ICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICAgICAgfQorICAgICAgICAvLyBleHRydWRl
ZCBzaGFwZSBjcmVhdGlvbgorICAgICAgICBwYXRoM0QgPSBuZXcgX01hdGhzX21hdGhfcGF0aF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQYXRoM0QiXShjdXJ2ZSk7CisgICAgICAgIHZh
ciBuZXdTaGFwZVBhdGhzID0gbmV3IEFycmF5KCk7CisgICAgICAgIGNhcCA9IChjYXAgPCAwIHx8
IGNhcCA+IDMpID8gMCA6IGNhcDsKKyAgICAgICAgcGF0aEFycmF5ID0gZXh0cnVzaW9uUGF0aEFy
cmF5KHNoYXBlLCBjdXJ2ZSwgcGF0aDNELCBuZXdTaGFwZVBhdGhzLCBzY2FsZSwgcm90YXRpb24s
IHNjYWxlRnVuY3Rpb24sIHJvdGF0ZUZ1bmN0aW9uLCBjYXAsIGN1c3RvbSk7CisgICAgICAgIHZh
ciBleHRydWRlZEdlbmVyaWMgPSBfcmliYm9uQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJSaWJib25CdWlsZGVyIl0uQ3JlYXRlUmliYm9uKG5hbWUsIHsgcGF0aEFycmF5OiBw
YXRoQXJyYXksIGNsb3NlQXJyYXk6IHJiQ0EsIGNsb3NlUGF0aDogcmJDUCwgdXBkYXRhYmxlOiB1
cGR0YmwsIHNpZGVPcmllbnRhdGlvbjogc2lkZSwgaW52ZXJ0VVY6IGludmVydFVWLCBmcm9udFVW
czogZnJvbnRVVnMgfHwgdW5kZWZpbmVkLCBiYWNrVVZzOiBiYWNrVVZzIHx8IHVuZGVmaW5lZCB9
LCBzY2VuZSk7CisgICAgICAgIGV4dHJ1ZGVkR2VuZXJpYy5fY3JlYXRpb25EYXRhU3RvcmFnZS5w
YXRoQXJyYXkgPSBwYXRoQXJyYXk7CisgICAgICAgIGV4dHJ1ZGVkR2VuZXJpYy5fY3JlYXRpb25E
YXRhU3RvcmFnZS5wYXRoM0QgPSBwYXRoM0Q7CisgICAgICAgIGV4dHJ1ZGVkR2VuZXJpYy5fY3Jl
YXRpb25EYXRhU3RvcmFnZS5jYXAgPSBjYXA7CisgICAgICAgIHJldHVybiBleHRydWRlZEdlbmVy
aWM7CisgICAgfTsKKyAgICByZXR1cm4gU2hhcGVCdWlsZGVyOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlci50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01l
c2hlcy9CdWlsZGVycy9zcGhlcmVCdWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTcGhlcmVC
dWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNwaGVyZUJ1aWxk
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNwaGVyZUJ1aWxkZXI7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8g
Ii4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL21lc2gudmVydGV4RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0
ZXhEYXRhLnRzIik7CisKKworCitfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlcnRleERhdGEiXS5DcmVhdGVTcGhlcmUgPSBmdW5jdGlvbiAob3B0aW9ucykg
eworICAgIHZhciBzZWdtZW50cyA9IG9wdGlvbnMuc2VnbWVudHMgfHwgMzI7CisgICAgdmFyIGRp
YW1ldGVyWCA9IG9wdGlvbnMuZGlhbWV0ZXJYIHx8IG9wdGlvbnMuZGlhbWV0ZXIgfHwgMTsKKyAg
ICB2YXIgZGlhbWV0ZXJZID0gb3B0aW9ucy5kaWFtZXRlclkgfHwgb3B0aW9ucy5kaWFtZXRlciB8
fCAxOworICAgIHZhciBkaWFtZXRlclogPSBvcHRpb25zLmRpYW1ldGVyWiB8fCBvcHRpb25zLmRp
YW1ldGVyIHx8IDE7CisgICAgdmFyIGFyYyA9IG9wdGlvbnMuYXJjICYmIChvcHRpb25zLmFyYyA8
PSAwIHx8IG9wdGlvbnMuYXJjID4gMSkgPyAxLjAgOiBvcHRpb25zLmFyYyB8fCAxLjA7CisgICAg
dmFyIHNsaWNlID0gb3B0aW9ucy5zbGljZSAmJiAob3B0aW9ucy5zbGljZSA8PSAwKSA/IDEuMCA6
IG9wdGlvbnMuc2xpY2UgfHwgMS4wOworICAgIHZhciBzaWRlT3JpZW50YXRpb24gPSAob3B0aW9u
cy5zaWRlT3JpZW50YXRpb24gPT09IDApID8gMCA6IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uIHx8
IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4RGF0
YSJdLkRFRkFVTFRTSURFOworICAgIHZhciByYWRpdXMgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShkaWFtZXRlclggLyAyLCBk
aWFtZXRlclkgLyAyLCBkaWFtZXRlclogLyAyKTsKKyAgICB2YXIgdG90YWxaUm90YXRpb25TdGVw
cyA9IDIgKyBzZWdtZW50czsKKyAgICB2YXIgdG90YWxZUm90YXRpb25TdGVwcyA9IDIgKiB0b3Rh
bFpSb3RhdGlvblN0ZXBzOworICAgIHZhciBpbmRpY2VzID0gW107CisgICAgdmFyIHBvc2l0aW9u
cyA9IFtdOworICAgIHZhciBub3JtYWxzID0gW107CisgICAgdmFyIHV2cyA9IFtdOworICAgIGZv
ciAodmFyIHpSb3RhdGlvblN0ZXAgPSAwOyB6Um90YXRpb25TdGVwIDw9IHRvdGFsWlJvdGF0aW9u
U3RlcHM7IHpSb3RhdGlvblN0ZXArKykgeworICAgICAgICB2YXIgbm9ybWFsaXplZFogPSB6Um90
YXRpb25TdGVwIC8gdG90YWxaUm90YXRpb25TdGVwczsKKyAgICAgICAgdmFyIGFuZ2xlWiA9IG5v
cm1hbGl6ZWRaICogTWF0aC5QSSAqIHNsaWNlOworICAgICAgICBmb3IgKHZhciB5Um90YXRpb25T
dGVwID0gMDsgeVJvdGF0aW9uU3RlcCA8PSB0b3RhbFlSb3RhdGlvblN0ZXBzOyB5Um90YXRpb25T
dGVwKyspIHsKKyAgICAgICAgICAgIHZhciBub3JtYWxpemVkWSA9IHlSb3RhdGlvblN0ZXAgLyB0
b3RhbFlSb3RhdGlvblN0ZXBzOworICAgICAgICAgICAgdmFyIGFuZ2xlWSA9IG5vcm1hbGl6ZWRZ
ICogTWF0aC5QSSAqIDIgKiBhcmM7CisgICAgICAgICAgICB2YXIgcm90YXRpb25aID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlJvdGF0
aW9uWigtYW5nbGVaKTsKKyAgICAgICAgICAgIHZhciByb3RhdGlvblkgPSBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWF0cml4Il0uUm90YXRpb25ZKGFu
Z2xlWSk7CisgICAgICAgICAgICB2YXIgYWZ0ZXJSb3RaID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRl
cyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdLlVwKCksIHJvdGF0aW9uWik7CisgICAgICAgICAgICB2YXIgY29tcGxldGUgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5z
Zm9ybUNvb3JkaW5hdGVzKGFmdGVyUm90Wiwgcm90YXRpb25ZKTsKKyAgICAgICAgICAgIHZhciB2
ZXJ0ZXggPSBjb21wbGV0ZS5tdWx0aXBseShyYWRpdXMpOworICAgICAgICAgICAgdmFyIG5vcm1h
bCA9IGNvbXBsZXRlLmRpdmlkZShyYWRpdXMpLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgcG9z
aXRpb25zLnB1c2godmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueik7CisgICAgICAgICAgICBu
b3JtYWxzLnB1c2gobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7CisgICAgICAgICAgICB1
dnMucHVzaChub3JtYWxpemVkWSwgbm9ybWFsaXplZFopOworICAgICAgICB9CisgICAgICAgIGlm
ICh6Um90YXRpb25TdGVwID4gMCkgeworICAgICAgICAgICAgdmFyIHZlcnRpY2VzQ291bnQgPSBw
b3NpdGlvbnMubGVuZ3RoIC8gMzsKKyAgICAgICAgICAgIGZvciAodmFyIGZpcnN0SW5kZXggPSB2
ZXJ0aWNlc0NvdW50IC0gMiAqICh0b3RhbFlSb3RhdGlvblN0ZXBzICsgMSk7IChmaXJzdEluZGV4
ICsgdG90YWxZUm90YXRpb25TdGVwcyArIDIpIDwgdmVydGljZXNDb3VudDsgZmlyc3RJbmRleCsr
KSB7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKChmaXJzdEluZGV4KSk7CisgICAgICAg
ICAgICAgICAgaW5kaWNlcy5wdXNoKChmaXJzdEluZGV4ICsgMSkpOworICAgICAgICAgICAgICAg
IGluZGljZXMucHVzaChmaXJzdEluZGV4ICsgdG90YWxZUm90YXRpb25TdGVwcyArIDEpOworICAg
ICAgICAgICAgICAgIGluZGljZXMucHVzaCgoZmlyc3RJbmRleCArIHRvdGFsWVJvdGF0aW9uU3Rl
cHMgKyAxKSk7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKChmaXJzdEluZGV4ICsgMSkp
OworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCgoZmlyc3RJbmRleCArIHRvdGFsWVJvdGF0
aW9uU3RlcHMgKyAyKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy8g
U2lkZXMKKyAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlcnRleERhdGEiXS5fQ29tcHV0ZVNpZGVzKHNpZGVPcmllbnRhdGlvbiwgcG9zaXRpb25zLCBp
bmRpY2VzLCBub3JtYWxzLCB1dnMsIG9wdGlvbnMuZnJvbnRVVnMsIG9wdGlvbnMuYmFja1VWcyk7
CisgICAgLy8gUmVzdWx0CisgICAgdmFyIHZlcnRleERhdGEgPSBuZXcgX21lc2hfdmVydGV4RGF0
YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAgICB2ZXJ0
ZXhEYXRhLmluZGljZXMgPSBpbmRpY2VzOworICAgIHZlcnRleERhdGEucG9zaXRpb25zID0gcG9z
aXRpb25zOworICAgIHZlcnRleERhdGEubm9ybWFscyA9IG5vcm1hbHM7CisgICAgdmVydGV4RGF0
YS51dnMgPSB1dnM7CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZVNwaGVyZSA9IGZ1bmN0aW9uIChuYW1l
LCBzZWdtZW50cywgZGlhbWV0ZXIsIHNjZW5lLCB1cGRhdGFibGUsIHNpZGVPcmllbnRhdGlvbikg
eworICAgIHZhciBvcHRpb25zID0geworICAgICAgICBzZWdtZW50czogc2VnbWVudHMsCisgICAg
ICAgIGRpYW1ldGVyWDogZGlhbWV0ZXIsCisgICAgICAgIGRpYW1ldGVyWTogZGlhbWV0ZXIsCisg
ICAgICAgIGRpYW1ldGVyWjogZGlhbWV0ZXIsCisgICAgICAgIHNpZGVPcmllbnRhdGlvbjogc2lk
ZU9yaWVudGF0aW9uLAorICAgICAgICB1cGRhdGFibGU6IHVwZGF0YWJsZQorICAgIH07CisgICAg
cmV0dXJuIFNwaGVyZUJ1aWxkZXIuQ3JlYXRlU3BoZXJlKG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsK
K307CisvKioKKyAqIENsYXNzIGNvbnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHBy
b2NlZHVyYWxseSBidWlsZCBtZXNoZXMKKyAqLwordmFyIFNwaGVyZUJ1aWxkZXIgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gU3BoZXJlQnVpbGRlcigpIHsKKyAg
ICB9CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHNwaGVyZSBtZXNoCisgICAgICogKiBUaGUg
cGFyYW1ldGVyIGBkaWFtZXRlcmAgc2V0cyB0aGUgZGlhbWV0ZXIgc2l6ZSAoZmxvYXQpIG9mIHRo
ZSBzcGhlcmUgKGRlZmF1bHQgMSkKKyAgICAgKiAqIFlvdSBjYW4gc2V0IHNvbWUgZGlmZmVyZW50
IHNwaGVyZSBkaW1lbnNpb25zLCBmb3IgaW5zdGFuY2UgdG8gYnVpbGQgYW4gZWxsaXBzb2lkLCBi
eSB1c2luZyB0aGUgcGFyYW1ldGVycyBgZGlhbWV0ZXJYYCwgYGRpYW1ldGVyWWAgYW5kIGBkaWFt
ZXRlclpgIChhbGwgYnkgZGVmYXVsdCBoYXZlIHRoZSBzYW1lIHZhbHVlIG9mIGBkaWFtZXRlcmAp
CisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBzZWdtZW50c2Agc2V0cyB0aGUgc3BoZXJlIG51bWJl
ciBvZiBob3Jpem9udGFsIHN0cmlwZXMgKHBvc2l0aXZlIGludGVnZXIsIGRlZmF1bHQgMzIpCisg
ICAgICogKiBZb3UgY2FuIGNyZWF0ZSBhbiB1bmNsb3NlZCBzcGhlcmUgd2l0aCB0aGUgcGFyYW1l
dGVyIGBhcmNgIChwb3NpdGl2ZSBmbG9hdCwgZGVmYXVsdCAxKSwgdmFsdWVkIGJldHdlZW4gMCBh
bmQgMSwgd2hhdCBpcyB0aGUgcmF0aW8gb2YgdGhlIGNpcmN1bWZlcmVuY2UgKGxhdGl0dWRlKSA6
IDIgeCBQSSB4IHJhdGlvCisgICAgICogKiBZb3UgY2FuIGNyZWF0ZSBhbiB1bmNsb3NlZCBzcGhl
cmUgb24gaXRzIGhlaWdodCB3aXRoIHRoZSBwYXJhbWV0ZXIgYHNsaWNlYCAocG9zaXRpdmUgZmxv
YXQsIGRlZmF1bHQxKSwgdmFsdWVkIGJldHdlZW4gMCBhbmQgMSwgd2hhdCBpcyB0aGUgaGVpZ2h0
IHJhdGlvIChsb25naXR1ZGUpCisgICAgICogKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtZXNoIHNp
ZGUgb3JpZW50YXRpb24gd2l0aCB0aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLkZST05UU0lERSAo
ZGVmYXVsdCksIEJBQllMT04uTWVzaC5CQUNLU0lERSBvciBCQUJZTE9OLk1lc2guRE9VQkxFU0lE
RQorICAgICAqICogSWYgeW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNo
b29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJl
c3BlY3RpdmVseSBvbiB0aGUgZnJvbnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGggdGhlIHBhcmFt
ZXRlcnMgYGZyb250VVZzYCBhbmQgYGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBo
dHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVu
dHMjc2lkZS1vcmllbnRhdGlvbgorICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRh
dGFibGUgd2l0aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFs
c2UpIGlmIGl0cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBj
cmVhdGVkCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAor
ICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUg
dGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQor
ICAgICAqIEByZXR1cm5zIHRoZSBzcGhlcmUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vc2V0X3NoYXBlcyNzcGhlcmUKKyAgICAgKi8KKyAgICBTcGhl
cmVCdWlsZGVyLkNyZWF0ZVNwaGVyZSA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkg
eworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAg
ICAgdmFyIHNwaGVyZSA9IG5ldyBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJN
ZXNoIl0obmFtZSwgc2NlbmUpOworICAgICAgICBvcHRpb25zLnNpZGVPcmllbnRhdGlvbiA9IF9t
ZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5fR2V0RGVmYXVsdFNpZGVP
cmllbnRhdGlvbihvcHRpb25zLnNpZGVPcmllbnRhdGlvbik7CisgICAgICAgIHNwaGVyZS5fb3Jp
Z2luYWxCdWlsZGVyU2lkZU9yaWVudGF0aW9uID0gb3B0aW9ucy5zaWRlT3JpZW50YXRpb247Cisg
ICAgICAgIHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlU3BoZXJlKG9wdGlvbnMpOworICAgICAg
ICB2ZXJ0ZXhEYXRhLmFwcGx5VG9NZXNoKHNwaGVyZSwgb3B0aW9ucy51cGRhdGFibGUpOworICAg
ICAgICByZXR1cm4gc3BoZXJlOworICAgIH07CisgICAgcmV0dXJuIFNwaGVyZUJ1aWxkZXI7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy9CdWlsZGVycy90aWxlZEJv
eEJ1aWxkZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL01lc2hlcy9CdWlsZGVycy90aWxlZEJveEJ1aWxkZXIudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogVGlsZWRCb3hCdWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlRpbGVkQm94QnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVGls
ZWRCb3hCdWlsZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21h
dGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hl
cy9tZXNoLnZlcnRleERhdGEudHMiKTsKKworCisKKworX21lc2hfdmVydGV4RGF0YV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlVGlsZWRCb3ggPSBmdW5j
dGlvbiAob3B0aW9ucykgeworICAgIHZhciBuYkZhY2VzID0gNjsKKyAgICB2YXIgZmFjZVVWID0g
b3B0aW9ucy5mYWNlVVYgfHwgbmV3IEFycmF5KDYpOworICAgIHZhciBmYWNlQ29sb3JzID0gb3B0
aW9ucy5mYWNlQ29sb3JzOworICAgIHZhciBmbGlwVGlsZSA9IG9wdGlvbnMucGF0dGVybiB8fCBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uTk9fRkxJUDsKKyAgICB2
YXIgd2lkdGggPSBvcHRpb25zLndpZHRoIHx8IG9wdGlvbnMuc2l6ZSB8fCAxOworICAgIHZhciBo
ZWlnaHQgPSBvcHRpb25zLmhlaWdodCB8fCBvcHRpb25zLnNpemUgfHwgMTsKKyAgICB2YXIgZGVw
dGggPSBvcHRpb25zLmRlcHRoIHx8IG9wdGlvbnMuc2l6ZSB8fCAxOworICAgIHZhciB0aWxlV2lk
dGggPSBvcHRpb25zLnRpbGVXaWR0aCB8fCBvcHRpb25zLnRpbGVTaXplIHx8IDE7CisgICAgdmFy
IHRpbGVIZWlnaHQgPSBvcHRpb25zLnRpbGVIZWlnaHQgfHwgb3B0aW9ucy50aWxlU2l6ZSB8fCAx
OworICAgIHZhciBhbGlnbkggPSBvcHRpb25zLmFsaWduSG9yaXpvbnRhbCB8fCAwOworICAgIHZh
ciBhbGlnblYgPSBvcHRpb25zLmFsaWduVmVydGljYWwgfHwgMDsKKyAgICB2YXIgc2lkZU9yaWVu
dGF0aW9uID0gKG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uID09PSAwKSA/IDAgOiBvcHRpb25zLnNp
ZGVPcmllbnRhdGlvbiB8fCBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlcnRleERhdGEiXS5ERUZBVUxUU0lERTsKKyAgICAvLyBkZWZhdWx0IGZhY2UgY29s
b3JzIGFuZCBVViBpZiB1bmRlZmluZWQKKyAgICBmb3IgKHZhciBmID0gMDsgZiA8IG5iRmFjZXM7
IGYrKykgeworICAgICAgICBpZiAoZmFjZVVWW2ZdID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgIGZhY2VVVltmXSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yNCJdKDAsIDAsIDEsIDEpOworICAgICAgICB9CisgICAgICAgIGlm
IChmYWNlQ29sb3JzICYmIGZhY2VDb2xvcnNbZl0gPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgZmFjZUNvbG9yc1tmXSA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJDb2xvcjQiXSgxLCAxLCAxLCAxKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyOworICAgIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0
IC8gMjsKKyAgICB2YXIgaGFsZkRlcHRoID0gZGVwdGggLyAyOworICAgIHZhciBmYWNlVmVydGV4
RGF0YSA9IFtdOworICAgIGZvciAodmFyIGYgPSAwOyBmIDwgMjsgZisrKSB7IC8vZnJvbnQgYW5k
IGJhY2sKKyAgICAgICAgZmFjZVZlcnRleERhdGFbZl0gPSBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5DcmVhdGVUaWxlZFBsYW5lKHsK
KyAgICAgICAgICAgIHBhdHRlcm46IGZsaXBUaWxlLAorICAgICAgICAgICAgdGlsZVdpZHRoOiB0
aWxlV2lkdGgsCisgICAgICAgICAgICB0aWxlSGVpZ2h0OiB0aWxlSGVpZ2h0LAorICAgICAgICAg
ICAgd2lkdGg6IHdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAg
ICBhbGlnblZlcnRpY2FsOiBhbGlnblYsCisgICAgICAgICAgICBhbGlnbkhvcml6b250YWw6IGFs
aWduSCwKKyAgICAgICAgICAgIHNpZGVPcmllbnRhdGlvbjogc2lkZU9yaWVudGF0aW9uCisgICAg
ICAgIH0pOworICAgIH0KKyAgICBmb3IgKHZhciBmID0gMjsgZiA8IDQ7IGYrKykgeyAvL3NpZGVz
CisgICAgICAgIGZhY2VWZXJ0ZXhEYXRhW2ZdID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlVGlsZWRQbGFuZSh7CisgICAg
ICAgICAgICBwYXR0ZXJuOiBmbGlwVGlsZSwKKyAgICAgICAgICAgIHRpbGVXaWR0aDogdGlsZVdp
ZHRoLAorICAgICAgICAgICAgdGlsZUhlaWdodDogdGlsZUhlaWdodCwKKyAgICAgICAgICAgIHdp
ZHRoOiBkZXB0aCwKKyAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAorICAgICAgICAgICAgYWxp
Z25WZXJ0aWNhbDogYWxpZ25WLAorICAgICAgICAgICAgYWxpZ25Ib3Jpem9udGFsOiBhbGlnbkgs
CisgICAgICAgICAgICBzaWRlT3JpZW50YXRpb246IHNpZGVPcmllbnRhdGlvbgorICAgICAgICB9
KTsKKyAgICB9CisgICAgdmFyIGJhc2VBbGlnblYgPSBhbGlnblY7CisgICAgaWYgKGFsaWduViA9
PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdLkJPVFRPTSkgewor
ICAgICAgICBiYXNlQWxpZ25WID0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
TWVzaCJdLlRPUDsKKyAgICB9CisgICAgZWxzZSBpZiAoYWxpZ25WID09PSBfbWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uVE9QKSB7CisgICAgICAgIGJhc2VBbGlnblYg
PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uQk9UVE9NOworICAg
IH0KKyAgICBmb3IgKHZhciBmID0gNDsgZiA8IDY7IGYrKykgeyAvL3RvcCBhbmQgYm90dG9tCisg
ICAgICAgIGZhY2VWZXJ0ZXhEYXRhW2ZdID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlVGlsZWRQbGFuZSh7CisgICAgICAg
ICAgICBwYXR0ZXJuOiBmbGlwVGlsZSwKKyAgICAgICAgICAgIHRpbGVXaWR0aDogdGlsZVdpZHRo
LAorICAgICAgICAgICAgdGlsZUhlaWdodDogdGlsZUhlaWdodCwKKyAgICAgICAgICAgIHdpZHRo
OiB3aWR0aCwKKyAgICAgICAgICAgIGhlaWdodDogZGVwdGgsCisgICAgICAgICAgICBhbGlnblZl
cnRpY2FsOiBiYXNlQWxpZ25WLAorICAgICAgICAgICAgYWxpZ25Ib3Jpem9udGFsOiBhbGlnbkgs
CisgICAgICAgICAgICBzaWRlT3JpZW50YXRpb246IHNpZGVPcmllbnRhdGlvbgorICAgICAgICB9
KTsKKyAgICB9CisgICAgdmFyIHBvc2l0aW9ucyA9IFtdOworICAgIHZhciBub3JtYWxzID0gW107
CisgICAgdmFyIHV2cyA9IFtdOworICAgIHZhciBpbmRpY2VzID0gW107CisgICAgdmFyIGNvbG9y
cyA9IFtdOworICAgIHZhciBmYWNlUG9zaXRpb25zID0gW107CisgICAgdmFyIGZhY2VOb3JtYWxz
ID0gW107CisgICAgdmFyIG5ld0ZhY2VVViA9IFtdOworICAgIHZhciBsZW4gPSAwOworICAgIHZh
ciBsdSA9IDA7CisgICAgdmFyIGxpID0gMDsKKyAgICBmb3IgKHZhciBmID0gMDsgZiA8IG5iRmFj
ZXM7IGYrKykgeworICAgICAgICB2YXIgbGVuID0gZmFjZVZlcnRleERhdGFbZl0ucG9zaXRpb25z
Lmxlbmd0aDsKKyAgICAgICAgZmFjZVBvc2l0aW9uc1tmXSA9IFtdOworICAgICAgICBmYWNlTm9y
bWFsc1tmXSA9IFtdOworICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IGxlbiAvIDM7IHArKykg
eworICAgICAgICAgICAgZmFjZVBvc2l0aW9uc1tmXS5wdXNoKG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKGZhY2VWZXJ0ZXhEYXRh
W2ZdLnBvc2l0aW9uc1szICogcF0sIGZhY2VWZXJ0ZXhEYXRhW2ZdLnBvc2l0aW9uc1szICogcCAr
IDFdLCBmYWNlVmVydGV4RGF0YVtmXS5wb3NpdGlvbnNbMyAqIHAgKyAyXSkpOworICAgICAgICAg
ICAgZmFjZU5vcm1hbHNbZl0ucHVzaChuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShmYWNlVmVydGV4RGF0YVtmXS5ub3JtYWxzWzMg
KiBwXSwgZmFjZVZlcnRleERhdGFbZl0ubm9ybWFsc1szICogcCArIDFdLCBmYWNlVmVydGV4RGF0
YVtmXS5ub3JtYWxzWzMgKiBwICsgMl0pKTsKKyAgICAgICAgfQorICAgICAgICAvLyB1dnMKKyAg
ICAgICAgbHUgPSBmYWNlVmVydGV4RGF0YVtmXS51dnMubGVuZ3RoOworICAgICAgICBuZXdGYWNl
VVZbZl0gPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsdTsgaSArPSAyKSB7Cisg
ICAgICAgICAgICBuZXdGYWNlVVZbZl1baV0gPSBmYWNlVVZbZl0ueCArIChmYWNlVVZbZl0ueiAt
IGZhY2VVVltmXS54KSAqIGZhY2VWZXJ0ZXhEYXRhW2ZdLnV2c1tpXTsKKyAgICAgICAgICAgIG5l
d0ZhY2VVVltmXVtpICsgMV0gPSBmYWNlVVZbZl0ueSArIChmYWNlVVZbZl0udyAtIGZhY2VVVltm
XS55KSAqIGZhY2VWZXJ0ZXhEYXRhW2ZdLnV2c1tpICsgMV07CisgICAgICAgIH0KKyAgICAgICAg
dXZzID0gdXZzLmNvbmNhdChuZXdGYWNlVVZbZl0pOworICAgICAgICBpbmRpY2VzID0gaW5kaWNl
cy5jb25jYXQoZmFjZVZlcnRleERhdGFbZl0uaW5kaWNlcy5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0
dXJuIHggKyBsaTsgfSkpOworICAgICAgICBsaSArPSBmYWNlUG9zaXRpb25zW2ZdLmxlbmd0aDsK
KyAgICAgICAgaWYgKGZhY2VDb2xvcnMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBj
IDwgNDsgYysrKSB7CisgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goZmFjZUNvbG9yc1tmXS5y
LCBmYWNlQ29sb3JzW2ZdLmcsIGZhY2VDb2xvcnNbZl0uYiwgZmFjZUNvbG9yc1tmXS5hKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB2YXIgdmVjMCA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIDAs
IGhhbGZEZXB0aCk7CisgICAgdmFyIG10cngwID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlJvdGF0aW9uWShNYXRoLlBJKTsKKyAgICBw
b3NpdGlvbnMgPSBmYWNlUG9zaXRpb25zWzBdLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJu
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0uVHJhbnNmb3JtTm9ybWFsKGVudHJ5LCBtdHJ4MCkuYWRkKHZlYzApOyB9KS5tYXAoZnVuY3Rp
b24gKGVudHJ5KSB7IHJldHVybiBbZW50cnkueCwgZW50cnkueSwgZW50cnkuel07IH0pLnJlZHVj
ZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgeyByZXR1cm4gYWNjdW11bGF0
b3IuY29uY2F0KGN1cnJlbnRWYWx1ZSk7IH0sIFtdKTsKKyAgICBub3JtYWxzID0gZmFjZU5vcm1h
bHNbMF0ubWFwKGZ1bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwoZW50
cnksIG10cngwKTsgfSkubWFwKGZ1bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gW2VudHJ5LngsIGVu
dHJ5LnksIGVudHJ5LnpdOyB9KS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBjdXJyZW50
VmFsdWUpIHsgcmV0dXJuIGFjY3VtdWxhdG9yLmNvbmNhdChjdXJyZW50VmFsdWUpOyB9LCBbXSk7
CisgICAgcG9zaXRpb25zID0gcG9zaXRpb25zLmNvbmNhdChmYWNlUG9zaXRpb25zWzFdLm1hcChm
dW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIGVudHJ5LnN1YnRyYWN0KHZlYzApOyB9KS5tYXAoZnVu
Y3Rpb24gKGVudHJ5KSB7IHJldHVybiBbZW50cnkueCwgZW50cnkueSwgZW50cnkuel07IH0pLnJl
ZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgeyByZXR1cm4gYWNjdW11
bGF0b3IuY29uY2F0KGN1cnJlbnRWYWx1ZSk7IH0sIFtdKSk7CisgICAgbm9ybWFscyA9IG5vcm1h
bHMuY29uY2F0KGZhY2VOb3JtYWxzWzFdLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIFtl
bnRyeS54LCBlbnRyeS55LCBlbnRyeS56XTsgfSkucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRv
ciwgY3VycmVudFZhbHVlKSB7IHJldHVybiBhY2N1bXVsYXRvci5jb25jYXQoY3VycmVudFZhbHVl
KTsgfSwgW10pKTsKKyAgICB2YXIgdmVjMiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKGhhbGZXaWR0aCwgMCwgMCk7CisgICAg
dmFyIG10cngyID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIk1hdHJpeCJdLlJvdGF0aW9uWSgtTWF0aC5QSSAvIDIpOworICAgIHBvc2l0aW9ucyA9IHBv
c2l0aW9ucy5jb25jYXQoZmFjZVBvc2l0aW9uc1syXS5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7IHJl
dHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVj
dG9yMyJdLlRyYW5zZm9ybU5vcm1hbChlbnRyeSwgbXRyeDIpLmFkZCh2ZWMyKTsgfSkubWFwKGZ1
bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gW2VudHJ5LngsIGVudHJ5LnksIGVudHJ5LnpdOyB9KS5y
ZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpIHsgcmV0dXJuIGFjY3Vt
dWxhdG9yLmNvbmNhdChjdXJyZW50VmFsdWUpOyB9LCBbXSkpOworICAgIG5vcm1hbHMgPSBub3Jt
YWxzLmNvbmNhdChmYWNlTm9ybWFsc1syXS5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7IHJldHVybiBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJd
LlRyYW5zZm9ybU5vcm1hbChlbnRyeSwgbXRyeDIpOyB9KS5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7
IHJldHVybiBbZW50cnkueCwgZW50cnkueSwgZW50cnkuel07IH0pLnJlZHVjZShmdW5jdGlvbiAo
YWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgeyByZXR1cm4gYWNjdW11bGF0b3IuY29uY2F0KGN1
cnJlbnRWYWx1ZSk7IH0sIFtdKSk7CisgICAgdmFyIG10cngzID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlJvdGF0aW9uWShNYXRoLlBJ
IC8gMik7CisgICAgcG9zaXRpb25zID0gcG9zaXRpb25zLmNvbmNhdChmYWNlUG9zaXRpb25zWzNd
Lm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKGVudHJ5LCBt
dHJ4Mykuc3VidHJhY3QodmVjMik7IH0pLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIFtl
bnRyeS54LCBlbnRyeS55LCBlbnRyeS56XTsgfSkucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRv
ciwgY3VycmVudFZhbHVlKSB7IHJldHVybiBhY2N1bXVsYXRvci5jb25jYXQoY3VycmVudFZhbHVl
KTsgfSwgW10pKTsKKyAgICBub3JtYWxzID0gbm9ybWFscy5jb25jYXQoZmFjZU5vcm1hbHNbM10u
bWFwKGZ1bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwoZW50cnksIG10
cngzKTsgfSkubWFwKGZ1bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gW2VudHJ5LngsIGVudHJ5Lnks
IGVudHJ5LnpdOyB9KS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUp
IHsgcmV0dXJuIGFjY3VtdWxhdG9yLmNvbmNhdChjdXJyZW50VmFsdWUpOyB9LCBbXSkpOworICAg
IHZhciB2ZWM0ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0oMCwgaGFsZkhlaWdodCwgMCk7CisgICAgdmFyIG10cng0ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlJv
dGF0aW9uWChNYXRoLlBJIC8gMik7CisgICAgcG9zaXRpb25zID0gcG9zaXRpb25zLmNvbmNhdChm
YWNlUG9zaXRpb25zWzRdLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3Jt
Tm9ybWFsKGVudHJ5LCBtdHJ4NCkuYWRkKHZlYzQpOyB9KS5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7
IHJldHVybiBbZW50cnkueCwgZW50cnkueSwgZW50cnkuel07IH0pLnJlZHVjZShmdW5jdGlvbiAo
YWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgeyByZXR1cm4gYWNjdW11bGF0b3IuY29uY2F0KGN1
cnJlbnRWYWx1ZSk7IH0sIFtdKSk7CisgICAgbm9ybWFscyA9IG5vcm1hbHMuY29uY2F0KGZhY2VO
b3JtYWxzWzRdLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFs
KGVudHJ5LCBtdHJ4NCk7IH0pLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIFtlbnRyeS54
LCBlbnRyeS55LCBlbnRyeS56XTsgfSkucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgY3Vy
cmVudFZhbHVlKSB7IHJldHVybiBhY2N1bXVsYXRvci5jb25jYXQoY3VycmVudFZhbHVlKTsgfSwg
W10pKTsKKyAgICB2YXIgbXRyeDUgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siTWF0cml4Il0uUm90YXRpb25YKC1NYXRoLlBJIC8gMik7CisgICAgcG9z
aXRpb25zID0gcG9zaXRpb25zLmNvbmNhdChmYWNlUG9zaXRpb25zWzVdLm1hcChmdW5jdGlvbiAo
ZW50cnkpIHsgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKGVudHJ5LCBtdHJ4NSkuc3VidHJhY3Qo
dmVjNCk7IH0pLm1hcChmdW5jdGlvbiAoZW50cnkpIHsgcmV0dXJuIFtlbnRyeS54LCBlbnRyeS55
LCBlbnRyeS56XTsgfSkucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVl
KSB7IHJldHVybiBhY2N1bXVsYXRvci5jb25jYXQoY3VycmVudFZhbHVlKTsgfSwgW10pKTsKKyAg
ICBub3JtYWxzID0gbm9ybWFscy5jb25jYXQoZmFjZU5vcm1hbHNbNV0ubWFwKGZ1bmN0aW9uIChl
bnRyeSkgeyByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwoZW50cnksIG10cng1KTsgfSkubWFwKGZ1
bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gW2VudHJ5LngsIGVudHJ5LnksIGVudHJ5LnpdOyB9KS5y
ZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpIHsgcmV0dXJuIGFjY3Vt
dWxhdG9yLmNvbmNhdChjdXJyZW50VmFsdWUpOyB9LCBbXSkpOworICAgIC8vIHNpZGVzCisgICAg
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRh
Il0uX0NvbXB1dGVTaWRlcyhzaWRlT3JpZW50YXRpb24sIHBvc2l0aW9ucywgaW5kaWNlcywgbm9y
bWFscywgdXZzKTsKKyAgICAvLyBSZXN1bHQKKyAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVz
aF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXSgp
OworICAgIHZlcnRleERhdGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgdmVydGV4RGF0YS5wb3Np
dGlvbnMgPSBwb3NpdGlvbnM7CisgICAgdmVydGV4RGF0YS5ub3JtYWxzID0gbm9ybWFsczsKKyAg
ICB2ZXJ0ZXhEYXRhLnV2cyA9IHV2czsKKyAgICBpZiAoZmFjZUNvbG9ycykgeworICAgICAgICB2
YXIgdG90YWxDb2xvcnMgPSAoc2lkZU9yaWVudGF0aW9uID09PSBfbWVzaF92ZXJ0ZXhEYXRhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5ET1VCTEVTSURFKSA/IGNv
bG9ycy5jb25jYXQoY29sb3JzKSA6IGNvbG9yczsKKyAgICAgICAgdmVydGV4RGF0YS5jb2xvcnMg
PSB0b3RhbENvbG9yczsKKyAgICB9CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworLyoqCisg
KiBDbGFzcyBjb250YWluaW5nIHN0YXRpYyBmdW5jdGlvbnMgdG8gaGVscCBwcm9jZWR1cmFsbHkg
YnVpbGQgbWVzaGVzCisgKi8KK3ZhciBUaWxlZEJveEJ1aWxkZXIgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gVGlsZWRCb3hCdWlsZGVyKCkgeworICAgIH0KKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgYm94IG1lc2gKKyAgICAgKiBmYWNlVGlsZXMgc2V0cyB0
aGUgcGF0dGVybiwgdGlsZSBzaXplIGFuZCBudW1iZXIgb2YgdGlsZXMgZm9yIGEgZmFjZSAgICAg
KiAqIFlvdSBjYW4gc2V0IGRpZmZlcmVudCBjb2xvcnMgYW5kIGRpZmZlcmVudCBpbWFnZXMgdG8g
ZWFjaCBib3ggc2lkZSBieSB1c2luZyB0aGUgcGFyYW1ldGVycyBgZmFjZUNvbG9yc2AgKGFuIGFy
cmF5IG9mIDYgQ29sb3IzIGVsZW1lbnRzKSBhbmQgYGZhY2VVVmAgKGFuIGFycmF5IG9mIDYgVmVj
dG9yNCBlbGVtZW50cykKKyAgICAgKiAqIFBsZWFzZSByZWFkIHRoaXMgdHV0b3JpYWwgOiBodHRw
czovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jcmVhdGVib3hfcGVyX2ZhY2VfdGV4dHVyZXNf
YW5kX2NvbG9ycworICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVu
dGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQp
LCBCQUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNoLkRPVUJMRVNJREUKKyAgICAg
KiAqIElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hh
dCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZl
bHkgb24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBm
cm9udFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFpbCBoZXJlIDogaHR0cHM6Ly9k
b2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUt
b3JpZW50YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdp
dGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBp
dHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAor
ICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBA
cGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNo
CisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBA
cmV0dXJucyB0aGUgYm94IG1lc2gKKyAgICAgKi8KKyAgICBUaWxlZEJveEJ1aWxkZXIuQ3JlYXRl
VGlsZWRCb3ggPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYg
KHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHZhciBib3ggPSBu
ZXcgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTWVzaCJdKG5hbWUsIHNjZW5l
KTsKKyAgICAgICAgb3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0uX0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9u
cy5zaWRlT3JpZW50YXRpb24pOworICAgICAgICBib3guX29yaWdpbmFsQnVpbGRlclNpZGVPcmll
bnRhdGlvbiA9IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uOworICAgICAgICB2YXIgdmVydGV4RGF0
YSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
RGF0YSJdLkNyZWF0ZVRpbGVkQm94KG9wdGlvbnMpOworICAgICAgICB2ZXJ0ZXhEYXRhLmFwcGx5
VG9NZXNoKGJveCwgb3B0aW9ucy51cGRhdGFibGUpOworICAgICAgICByZXR1cm4gYm94OworICAg
IH07CisgICAgcmV0dXJuIFRpbGVkQm94QnVpbGRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3RpbGVkUGxhbmVCdWlsZGVyLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L01lc2hlcy9CdWlsZGVycy90aWxlZFBsYW5lQnVpbGRlci50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IFRpbGVkUGxhbmVCdWlsZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlRpbGVkUGxhbmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUaWxlZFBsYW5lQnVp
bGRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2ggKi8gIi4vTWVz
aGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF92ZXJ0ZXhEYXRh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9tZXNoLnZlcnRleERhdGEgKi8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50cyIpOworCisK
K19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4RGF0
YSJdLkNyZWF0ZVRpbGVkUGxhbmUgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgIHZhciBmbGlw
VGlsZSA9IG9wdGlvbnMucGF0dGVybiB8fCBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJNZXNoIl0uTk9fRkxJUDsKKyAgICB2YXIgdGlsZVdpZHRoID0gb3B0aW9ucy50aWxlV2lk
dGggfHwgb3B0aW9ucy50aWxlU2l6ZSB8fCAxOworICAgIHZhciB0aWxlSGVpZ2h0ID0gb3B0aW9u
cy50aWxlSGVpZ2h0IHx8IG9wdGlvbnMudGlsZVNpemUgfHwgMTsKKyAgICB2YXIgYWxpZ25IID0g
b3B0aW9ucy5hbGlnbkhvcml6b250YWwgfHwgMDsKKyAgICB2YXIgYWxpZ25WID0gb3B0aW9ucy5h
bGlnblZlcnRpY2FsIHx8IDA7CisgICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCB8fCBvcHRp
b25zLnNpemUgfHwgMTsKKyAgICB2YXIgdGlsZXNYID0gTWF0aC5mbG9vcih3aWR0aCAvIHRpbGVX
aWR0aCk7CisgICAgdmFyIG9mZnNldFggPSB3aWR0aCAtIHRpbGVzWCAqIHRpbGVXaWR0aDsKKyAg
ICB2YXIgaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgb3B0aW9ucy5zaXplIHx8IDE7CisgICAg
dmFyIHRpbGVzWSA9IE1hdGguZmxvb3IoaGVpZ2h0IC8gdGlsZUhlaWdodCk7CisgICAgdmFyIG9m
ZnNldFkgPSBoZWlnaHQgLSB0aWxlc1kgKiB0aWxlSGVpZ2h0OworICAgIHZhciBoYWxmV2lkdGgg
PSB0aWxlV2lkdGggKiB0aWxlc1ggLyAyOworICAgIHZhciBoYWxmSGVpZ2h0ID0gdGlsZUhlaWdo
dCAqIHRpbGVzWSAvIDI7CisgICAgdmFyIGFkanVzdFggPSAwOworICAgIHZhciBhZGp1c3RZID0g
MDsKKyAgICB2YXIgc3RhcnRYID0gMDsKKyAgICB2YXIgc3RhcnRZID0gMDsKKyAgICB2YXIgZW5k
WCA9IDA7CisgICAgdmFyIGVuZFkgPSAwOworICAgIC8vUGFydCBUaWxlcworICAgIGlmIChvZmZz
ZXRYID4gMCB8fCBvZmZzZXRZID4gMCkgeworICAgICAgICBzdGFydFggPSAtaGFsZldpZHRoOwor
ICAgICAgICBzdGFydFkgPSAtaGFsZkhlaWdodDsKKyAgICAgICAgdmFyIGVuZFggPSBoYWxmV2lk
dGg7CisgICAgICAgIHZhciBlbmRZID0gaGFsZkhlaWdodDsKKyAgICAgICAgc3dpdGNoIChhbGln
bkgpIHsKKyAgICAgICAgICAgIGNhc2UgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siTWVzaCJdLkNFTlRFUjoKKyAgICAgICAgICAgICAgICBvZmZzZXRYIC89IDI7CisgICAgICAg
ICAgICAgICAgc3RhcnRYIC09IG9mZnNldFg7CisgICAgICAgICAgICAgICAgZW5kWCArPSBvZmZz
ZXRYOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfbWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uTEVGVDoKKyAgICAgICAgICAgICAgICBl
bmRYICs9IG9mZnNldFg7CisgICAgICAgICAgICAgICAgYWRqdXN0WCA9IC1vZmZzZXRYIC8gMjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJJR0hUOgorICAgICAgICAgICAgICAgIHN0YXJ0
WCAtPSBvZmZzZXRYOworICAgICAgICAgICAgICAgIGFkanVzdFggPSBvZmZzZXRYIC8gMjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKGFsaWduVikg
eworICAgICAgICAgICAgY2FzZSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJN
ZXNoIl0uQ0VOVEVSOgorICAgICAgICAgICAgICAgIG9mZnNldFkgLz0gMjsKKyAgICAgICAgICAg
ICAgICBzdGFydFkgLT0gb2Zmc2V0WTsKKyAgICAgICAgICAgICAgICBlbmRZICs9IG9mZnNldFk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9tZXNoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5CT1RUT006CisgICAgICAgICAgICAgICAgZW5k
WSArPSBvZmZzZXRZOworICAgICAgICAgICAgICAgIGFkanVzdFkgPSAtb2Zmc2V0WSAvIDI7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9tZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5UT1A6CisgICAgICAgICAgICAgICAgc3RhcnRZIC09
IG9mZnNldFk7CisgICAgICAgICAgICAgICAgYWRqdXN0WSA9IG9mZnNldFkgLyAyOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHZhciBwb3NpdGlvbnMgPSBb
XTsKKyAgICB2YXIgbm9ybWFscyA9IFtdOworICAgIHZhciB1dkJhc2UgPSBbXTsKKyAgICB1dkJh
c2VbMF0gPSBbMCwgMCwgMSwgMCwgMSwgMSwgMCwgMV07CisgICAgdXZCYXNlWzFdID0gWzAsIDAs
IDEsIDAsIDEsIDEsIDAsIDFdOworICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9USUxFIHx8IGZsaXBUaWxlID09PSBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1JPVykgewor
ICAgICAgICB1dkJhc2VbMV0gPSBbMSwgMSwgMCwgMSwgMCwgMCwgMSwgMF07CisgICAgfQorICAg
IGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVz
aCJdLkZMSVBfVElMRSB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTWVzaCJdLkZMSVBfUk9XKSB7CisgICAgICAgIHV2QmFzZVsxXSA9IFsxLCAwLCAw
LCAwLCAwLCAxLCAxLCAxXTsKKyAgICB9CisgICAgaWYgKGZsaXBUaWxlID09PSBfbWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9OX1JPVEFURV9USUxFIHx8IGZs
aXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJ
UF9OX1JPVEFURV9ST1cpIHsKKyAgICAgICAgdXZCYXNlWzFdID0gWzAsIDEsIDEsIDEsIDEsIDAs
IDAsIDBdOworICAgIH0KKyAgICB2YXIgdXZzID0gW107CisgICAgdmFyIGNvbG9ycyA9IFtdOwor
ICAgIHZhciBpbmRpY2VzID0gW107CisgICAgdmFyIGluZGV4ID0gMDsKKyAgICBmb3IgKHZhciB5
ID0gMDsgeSA8IHRpbGVzWTsgeSsrKSB7CisgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdGls
ZXNYOyB4KyspIHsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKC1oYWxmV2lkdGggKyB4ICog
dGlsZVdpZHRoICsgYWRqdXN0WCwgLWhhbGZIZWlnaHQgKyB5ICogdGlsZUhlaWdodCArIGFkanVz
dFksIDApOworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goLWhhbGZXaWR0aCArICh4ICsgMSkg
KiB0aWxlV2lkdGggKyBhZGp1c3RYLCAtaGFsZkhlaWdodCArIHkgKiB0aWxlSGVpZ2h0ICsgYWRq
dXN0WSwgMCk7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCgtaGFsZldpZHRoICsgKHggKyAx
KSAqIHRpbGVXaWR0aCArIGFkanVzdFgsIC1oYWxmSGVpZ2h0ICsgKHkgKyAxKSAqIHRpbGVIZWln
aHQgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKC1oYWxmV2lkdGgg
KyB4ICogdGlsZVdpZHRoICsgYWRqdXN0WCwgLWhhbGZIZWlnaHQgKyAoeSArIDEpICogdGlsZUhl
aWdodCArIGFkanVzdFksIDApOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4LCBpbmRl
eCArIDEsIGluZGV4ICsgMywgaW5kZXggKyAxLCBpbmRleCArIDIsIGluZGV4ICsgMyk7CisgICAg
ICAgICAgICBpZiAoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIk1lc2giXS5GTElQX1RJTEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIk1lc2giXS5ST1RBVEVfVElMRSB8fCBmbGlwVGlsZSA9PT0gX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfVElMRSkg
eworICAgICAgICAgICAgICAgIHV2cyA9IHV2cy5jb25jYXQodXZCYXNlWyh4ICUgMiArIHkgJSAy
KSAlIDJdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGZsaXBUaWxlID09
PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9ST1cgfHwg
ZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5S
T1RBVEVfUk9XIHx8IGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJNZXNoIl0uRkxJUF9OX1JPVEFURV9ST1cpIHsKKyAgICAgICAgICAgICAgICB1dnMgPSB1
dnMuY29uY2F0KHV2QmFzZVt5ICUgMl0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgdXZzID0gdXZzLmNvbmNhdCh1dkJhc2VbMF0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY29sb3JzLnB1c2goMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSk7CisgICAgICAgICAgICBub3JtYWxzLnB1c2goMCwgMCwg
LTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEpOworICAgICAgICAgICAgaW5kZXggKz0g
NDsKKyAgICAgICAgfQorICAgIH0KKyAgICAvL1BhcnQgVGlsZXMKKyAgICBpZiAob2Zmc2V0WCA+
IDAgfHwgb2Zmc2V0WSA+IDApIHsKKyAgICAgICAgdmFyIHBhcnRpYWxCb3R0b21Sb3cgPSAob2Zm
c2V0WSA+IDAgJiYgKGFsaWduViA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siTWVzaCJdLkNFTlRFUiB8fCBhbGlnblYgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIk1lc2giXS5UT1ApKTsKKyAgICAgICAgdmFyIHBhcnRpYWxUb3BSb3cgPSAob2Zm
c2V0WSA+IDAgJiYgKGFsaWduViA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siTWVzaCJdLkNFTlRFUiB8fCBhbGlnblYgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIk1lc2giXS5CT1RUT00pKTsKKyAgICAgICAgdmFyIHBhcnRpYWxMZWZ0Q29sID0g
KG9mZnNldFggPiAwICYmIChhbGlnbkggPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIk1lc2giXS5DRU5URVIgfHwgYWxpZ25IID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJNZXNoIl0uUklHSFQpKTsKKyAgICAgICAgdmFyIHBhcnRpYWxSaWdodENv
bCA9IChvZmZzZXRYID4gMCAmJiAoYWxpZ25IID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJNZXNoIl0uQ0VOVEVSIHx8IGFsaWduSCA9PT0gX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkxFRlQpKTsKKyAgICAgICAgdmFyIHV2UGFydCA9IFtd
OworICAgICAgICB2YXIgYSwgYiwgYywgZDsKKyAgICAgICAgLy9jb3JuZXJzCisgICAgICAgIGlm
IChwYXJ0aWFsQm90dG9tUm93ICYmIHBhcnRpYWxMZWZ0Q29sKSB7IC8vYm90dG9tIGxlZnQgY29y
bmVyCisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChzdGFydFggKyBhZGp1c3RYLCBzdGFydFkg
KyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKC1oYWxmV2lkdGggKyBh
ZGp1c3RYLCBzdGFydFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNo
KC1oYWxmV2lkdGggKyBhZGp1c3RYLCBzdGFydFkgKyBvZmZzZXRZICsgYWRqdXN0WSwgMCk7Cisg
ICAgICAgICAgICBwb3NpdGlvbnMucHVzaChzdGFydFggKyBhZGp1c3RYLCBzdGFydFkgKyBvZmZz
ZXRZICsgYWRqdXN0WSwgMCk7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXgsIGluZGV4
ICsgMSwgaW5kZXggKyAzLCBpbmRleCArIDEsIGluZGV4ICsgMiwgaW5kZXggKyAzKTsKKyAgICAg
ICAgICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICBhID0gMSAtIG9mZnNldFggLyB0aWxlV2lk
dGg7CisgICAgICAgICAgICBiID0gMSAtIG9mZnNldFkgLyB0aWxlSGVpZ2h0OworICAgICAgICAg
ICAgYyA9IDE7CisgICAgICAgICAgICBkID0gMTsKKyAgICAgICAgICAgIHV2UGFydCA9IFthLCBi
LCBjLCBiLCBjLCBkLCBhLCBkXTsKKyAgICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9ST1cpIHsKKyAgICAg
ICAgICAgICAgICB1dlBhcnQgPSBbMSAtIGEsIDEgLSBiLCAxIC0gYywgMSAtIGIsIDEgLSBjLCAx
IC0gZCwgMSAtIGEsIDEgLSBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmbGlw
VGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBf
Uk9XKSB7CisgICAgICAgICAgICAgICAgdXZQYXJ0ID0gWzEgLSBhLCBiLCAxIC0gYywgYiwgMSAt
IGMsIGQsIDEgLSBhLCBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmbGlwVGls
ZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9S
T1RBVEVfUk9XKSB7CisgICAgICAgICAgICAgICAgdXZQYXJ0ID0gW2EsIDEgLSBiLCBjLCAxIC0g
YiwgYywgMSAtIGQsIGEsIDEgLSBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHV2cyA9
IHV2cy5jb25jYXQodXZQYXJ0KTsKKyAgICAgICAgICAgIGNvbG9ycy5wdXNoKDEsIDEsIDEsIDEs
IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEpOworICAgICAgICAgICAgbm9ybWFs
cy5wdXNoKDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAocGFydGlhbEJvdHRvbVJvdyAmJiBwYXJ0aWFsUmlnaHRDb2wpIHsgLy9i
b3R0b20gcmlnaHQgY29ybmVyCisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChoYWxmV2lkdGgg
KyBhZGp1c3RYLCBzdGFydFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5w
dXNoKGVuZFggKyBhZGp1c3RYLCBzdGFydFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBv
c2l0aW9ucy5wdXNoKGVuZFggKyBhZGp1c3RYLCBzdGFydFkgKyBvZmZzZXRZICsgYWRqdXN0WSwg
MCk7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChoYWxmV2lkdGggKyBhZGp1c3RYLCBzdGFy
dFkgKyBvZmZzZXRZICsgYWRqdXN0WSwgMCk7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaW5k
ZXgsIGluZGV4ICsgMSwgaW5kZXggKyAzLCBpbmRleCArIDEsIGluZGV4ICsgMiwgaW5kZXggKyAz
KTsKKyAgICAgICAgICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICBhID0gMCwKKyAgICAgICAg
ICAgICAgICBiID0gMSAtIG9mZnNldFkgLyB0aWxlSGVpZ2h0OworICAgICAgICAgICAgYyA9IG9m
ZnNldFggLyB0aWxlV2lkdGg7CisgICAgICAgICAgICBkID0gMTsKKyAgICAgICAgICAgIHV2UGFy
dCA9IFthLCBiLCBjLCBiLCBjLCBkLCBhLCBkXTsKKyAgICAgICAgICAgIGlmIChmbGlwVGlsZSA9
PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9ST1cg
fHwgKGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNo
Il0uUk9UQVRFX1RJTEUgJiYgKHRpbGVzWCAlIDIpID09PSAwKSkgeworICAgICAgICAgICAgICAg
IHV2UGFydCA9IFsxIC0gYSwgMSAtIGIsIDEgLSBjLCAxIC0gYiwgMSAtIGMsIDEgLSBkLCAxIC0g
YSwgMSAtIGRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZsaXBUaWxlID09PSBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9ST1cgfHwgKGZs
aXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJ
UF9USUxFICYmICh0aWxlc1ggJSAyKSA9PT0gMCkpIHsKKyAgICAgICAgICAgICAgICB1dlBhcnQg
PSBbMSAtIGEsIGIsIDEgLSBjLCBiLCAxIC0gYywgZCwgMSAtIGEsIGRdOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9OX1JPVEFURV9ST1cgfHwgKGZsaXBUaWxlID09PSBfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9OX1JPVEFURV9USUxF
ICYmICh0aWxlc1ggJSAyKSA9PT0gMCkpIHsKKyAgICAgICAgICAgICAgICB1dlBhcnQgPSBbYSwg
MSAtIGIsIGMsIDEgLSBiLCBjLCAxIC0gZCwgYSwgMSAtIGRdOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdXZzID0gdXZzLmNvbmNhdCh1dlBhcnQpOworICAgICAgICAgICAgY29sb3JzLnB1
c2goMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSk7CisgICAg
ICAgICAgICBub3JtYWxzLnB1c2goMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwg
LTEpOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJ0aWFsVG9wUm93ICYmIHBhcnRpYWxMZWZ0
Q29sKSB7IC8vdG9wIGxlZnQgY29ybmVyCisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChzdGFy
dFggKyBhZGp1c3RYLCBoYWxmSGVpZ2h0ICsgYWRqdXN0WSwgMCk7CisgICAgICAgICAgICBwb3Np
dGlvbnMucHVzaCgtaGFsZldpZHRoICsgYWRqdXN0WCwgaGFsZkhlaWdodCArIGFkanVzdFksIDAp
OworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goLWhhbGZXaWR0aCArIGFkanVzdFgsIGVuZFkg
KyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHN0YXJ0WCArIGFkanVz
dFgsIGVuZFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRleCwg
aW5kZXggKyAxLCBpbmRleCArIDMsIGluZGV4ICsgMSwgaW5kZXggKyAyLCBpbmRleCArIDMpOwor
ICAgICAgICAgICAgaW5kZXggKz0gNDsKKyAgICAgICAgICAgIGEgPSAxIC0gb2Zmc2V0WCAvIHRp
bGVXaWR0aDsKKyAgICAgICAgICAgIGIgPSAwOworICAgICAgICAgICAgYyA9IDE7CisgICAgICAg
ICAgICBkID0gb2Zmc2V0WSAvIHRpbGVIZWlnaHQ7CisgICAgICAgICAgICB1dlBhcnQgPSBbYSwg
YiwgYywgYiwgYywgZCwgYSwgZF07CisgICAgICAgICAgICBpZiAoKGZsaXBUaWxlID09PSBfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1JPVyAmJiAodGls
ZXNZICUgMikgPT09IDEpIHx8IChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9USUxFICYmICh0aWxlc1kgJSAxKSA9PT0gMCkpIHsK
KyAgICAgICAgICAgICAgICB1dlBhcnQgPSBbMSAtIGEsIDEgLSBiLCAxIC0gYywgMSAtIGIsIDEg
LSBjLCAxIC0gZCwgMSAtIGEsIDEgLSBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICgoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2gi
XS5GTElQX1JPVyAmJiAodGlsZXNZICUgMikgPT09IDEpIHx8IChmbGlwVGlsZSA9PT0gX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfVElMRSAmJiAodGlsZXNZ
ICUgMikgPT09IDApKSB7CisgICAgICAgICAgICAgICAgdXZQYXJ0ID0gWzEgLSBhLCBiLCAxIC0g
YywgYiwgMSAtIGMsIGQsIDEgLSBhLCBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICgoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2gi
XS5GTElQX05fUk9UQVRFX1JPVyAmJiAodGlsZXNZICUgMikgPT09IDEpIHx8IChmbGlwVGlsZSA9
PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9ST1RB
VEVfVElMRSAmJiAodGlsZXNZICUgMikgPT09IDApKSB7CisgICAgICAgICAgICAgICAgdXZQYXJ0
ID0gW2EsIDEgLSBiLCBjLCAxIC0gYiwgYywgMSAtIGQsIGEsIDEgLSBkXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHV2cyA9IHV2cy5jb25jYXQodXZQYXJ0KTsKKyAgICAgICAgICAgIGNv
bG9ycy5wdXNoKDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEp
OworICAgICAgICAgICAgbm9ybWFscy5wdXNoKDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEs
IDAsIDAsIC0xKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFydGlhbFRvcFJvdyAmJiBwYXJ0
aWFsUmlnaHRDb2wpIHsgLy90b3AgcmlnaHQgY29ybmVyCisgICAgICAgICAgICBwb3NpdGlvbnMu
cHVzaChoYWxmV2lkdGggKyBhZGp1c3RYLCBoYWxmSGVpZ2h0ICsgYWRqdXN0WSwgMCk7CisgICAg
ICAgICAgICBwb3NpdGlvbnMucHVzaChlbmRYICsgYWRqdXN0WCwgaGFsZkhlaWdodCArIGFkanVz
dFksIDApOworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goZW5kWCArIGFkanVzdFgsIGVuZFkg
KyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKGhhbGZXaWR0aCArIGFk
anVzdFgsIGVuZFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRl
eCwgaW5kZXggKyAxLCBpbmRleCArIDMsIGluZGV4ICsgMSwgaW5kZXggKyAyLCBpbmRleCArIDMp
OworICAgICAgICAgICAgaW5kZXggKz0gNDsKKyAgICAgICAgICAgIGEgPSAwLAorICAgICAgICAg
ICAgICAgIGIgPSAwOworICAgICAgICAgICAgYyA9IG9mZnNldFggLyB0aWxlV2lkdGg7CisgICAg
ICAgICAgICBkID0gb2Zmc2V0WSAvIHRpbGVIZWlnaHQ7CisgICAgICAgICAgICB1dlBhcnQgPSBb
YSwgYiwgYywgYiwgYywgZCwgYSwgZF07CisgICAgICAgICAgICBpZiAoKGZsaXBUaWxlID09PSBf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1JPVyAmJiAo
dGlsZXNZICUgMikgPT09IDEpIHx8IChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9USUxFICYmICh0aWxlc1kgKyB0aWxlc1gpICUg
MiA9PT0gMSkpIHsKKyAgICAgICAgICAgICAgICB1dlBhcnQgPSBbMSAtIGEsIDEgLSBiLCAxIC0g
YywgMSAtIGIsIDEgLSBjLCAxIC0gZCwgMSAtIGEsIDEgLSBkXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICgoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIk1lc2giXS5GTElQX1JPVyAmJiAodGlsZXNZICUgMikgPT09IDEpIHx8IChmbGlwVGls
ZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfVElM
RSAmJiAodGlsZXNZICsgdGlsZXNYKSAlIDIgPT09IDEpKSB7CisgICAgICAgICAgICAgICAgdXZQ
YXJ0ID0gWzEgLSBhLCBiLCAxIC0gYywgYiwgMSAtIGMsIGQsIDEgLSBhLCBkXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICgoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIk1lc2giXS5GTElQX05fUk9UQVRFX1JPVyAmJiAodGlsZXNZICUgMikg
PT09IDEpIHx8IChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfVElMRSAmJiAodGlsZXNZICsgdGlsZXNYKSAlIDIgPT09
IDEpKSB7CisgICAgICAgICAgICAgICAgdXZQYXJ0ID0gW2EsIDEgLSBiLCBjLCAxIC0gYiwgYywg
MSAtIGQsIGEsIDEgLSBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHV2cyA9IHV2cy5j
b25jYXQodXZQYXJ0KTsKKyAgICAgICAgICAgIGNvbG9ycy5wdXNoKDEsIDEsIDEsIDEsIDEsIDEs
IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEpOworICAgICAgICAgICAgbm9ybWFscy5wdXNo
KDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xKTsKKyAgICAgICAgfQorICAg
ICAgICAvL3BhcnQgcm93cworICAgICAgICBpZiAocGFydGlhbEJvdHRvbVJvdykgeworICAgICAg
ICAgICAgdmFyIHV2QmFzZUJSID0gW107CisgICAgICAgICAgICBhID0gMDsKKyAgICAgICAgICAg
IGIgPSAxIC0gb2Zmc2V0WSAvIHRpbGVIZWlnaHQ7CisgICAgICAgICAgICBjID0gMTsKKyAgICAg
ICAgICAgIGQgPSAxOworICAgICAgICAgICAgdXZCYXNlQlJbMF0gPSBbYSwgYiwgYywgYiwgYywg
ZCwgYSwgZF07CisgICAgICAgICAgICB1dkJhc2VCUlsxXSA9IFthLCBiLCBjLCBiLCBjLCBkLCBh
LCBkXTsKKyAgICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9USUxFIHx8IGZsaXBUaWxlID09PSBfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1JPVykgeworICAgICAg
ICAgICAgICAgIHV2QmFzZUJSWzFdID0gWzEgLSBhLCAxIC0gYiwgMSAtIGMsIDEgLSBiLCAxIC0g
YywgMSAtIGQsIDEgLSBhLCAxIC0gZF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5G
TElQX1RJTEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIk1lc2giXS5GTElQX1JPVykgeworICAgICAgICAgICAgICAgIHV2QmFzZUJSWzFdID0gWzEg
LSBhLCBiLCAxIC0gYywgYiwgMSAtIGMsIGQsIDEgLSBhLCBkXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfVElMRSB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfUk9XKSB7Cisg
ICAgICAgICAgICAgICAgdXZCYXNlQlJbMV0gPSBbYSwgMSAtIGIsIGMsIDEgLSBiLCBjLCAxIC0g
ZCwgYSwgMSAtIGRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7
IHggPCB0aWxlc1g7IHgrKykgeworICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKC1oYWxm
V2lkdGggKyB4ICogdGlsZVdpZHRoICsgYWRqdXN0WCwgc3RhcnRZICsgYWRqdXN0WSwgMCk7Cisg
ICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goLWhhbGZXaWR0aCArICh4ICsgMSkgKiB0aWxl
V2lkdGggKyBhZGp1c3RYLCBzdGFydFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgICAgICBw
b3NpdGlvbnMucHVzaCgtaGFsZldpZHRoICsgKHggKyAxKSAqIHRpbGVXaWR0aCArIGFkanVzdFgs
IHN0YXJ0WSArIG9mZnNldFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgICAgICBwb3NpdGlv
bnMucHVzaCgtaGFsZldpZHRoICsgeCAqIHRpbGVXaWR0aCArIGFkanVzdFgsIHN0YXJ0WSArIG9m
ZnNldFkgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXgs
IGluZGV4ICsgMSwgaW5kZXggKyAzLCBpbmRleCArIDEsIGluZGV4ICsgMiwgaW5kZXggKyAzKTsK
KyAgICAgICAgICAgICAgICBpbmRleCArPSA0OworICAgICAgICAgICAgICAgIGlmIChmbGlwVGls
ZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfVElM
RSB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVz
aCJdLlJPVEFURV9USUxFIHx8IGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9OX1JPVEFURV9USUxFKSB7CisgICAgICAgICAgICAgICAg
ICAgIHV2cyA9IHV2cy5jb25jYXQodXZCYXNlQlJbKHggKyAxKSAlIDJdKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5GTElQX1JPVyB8fCBmbGlwVGlsZSA9PT0g
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9ST1cgfHwg
ZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5G
TElQX05fUk9UQVRFX1JPVykgeworICAgICAgICAgICAgICAgICAgICB1dnMgPSB1dnMuY29uY2F0
KHV2QmFzZUJSWzFdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHV2cyA9IHV2cy5jb25jYXQodXZCYXNlQlJbMF0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2xvcnMucHVzaCgxLCAxLCAxLCAxLCAx
LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxKTsKKyAgICAgICAgICAgICAgICBub3Jt
YWxzLnB1c2goMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwYXJ0aWFsVG9wUm93KSB7CisgICAgICAg
ICAgICB2YXIgdXZCYXNlVFIgPSBbXTsKKyAgICAgICAgICAgIGEgPSAwOworICAgICAgICAgICAg
YiA9IDA7CisgICAgICAgICAgICBjID0gMTsKKyAgICAgICAgICAgIGQgPSBvZmZzZXRZIC8gdGls
ZUhlaWdodDsKKyAgICAgICAgICAgIHV2QmFzZVRSWzBdID0gW2EsIGIsIGMsIGIsIGMsIGQsIGEs
IGRdOworICAgICAgICAgICAgdXZCYXNlVFJbMV0gPSBbYSwgYiwgYywgYiwgYywgZCwgYSwgZF07
CisgICAgICAgICAgICBpZiAoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIk1lc2giXS5ST1RBVEVfVElMRSB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9ST1cpIHsKKyAgICAgICAgICAg
ICAgICB1dkJhc2VUUlsxXSA9IFsxIC0gYSwgMSAtIGIsIDEgLSBjLCAxIC0gYiwgMSAtIGMsIDEg
LSBkLCAxIC0gYSwgMSAtIGRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZsaXBU
aWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9U
SUxFIHx8IGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJN
ZXNoIl0uRkxJUF9ST1cpIHsKKyAgICAgICAgICAgICAgICB1dkJhc2VUUlsxXSA9IFsxIC0gYSwg
YiwgMSAtIGMsIGIsIDEgLSBjLCBkLCAxIC0gYSwgZF07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Ik1lc2giXS5GTElQX05fUk9UQVRFX1RJTEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5GTElQX05fUk9UQVRFX1JPVykgeworICAgICAg
ICAgICAgICAgIHV2QmFzZVRSWzFdID0gW2EsIDEgLSBiLCBjLCAxIC0gYiwgYywgMSAtIGQsIGEs
IDEgLSBkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwg
dGlsZXNYOyB4KyspIHsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCgtaGFsZldpZHRo
ICsgeCAqIHRpbGVXaWR0aCArIGFkanVzdFgsIGVuZFkgLSBvZmZzZXRZICsgYWRqdXN0WSwgMCk7
CisgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goLWhhbGZXaWR0aCArICh4ICsgMSkgKiB0
aWxlV2lkdGggKyBhZGp1c3RYLCBlbmRZIC0gb2Zmc2V0WSArIGFkanVzdFksIDApOworICAgICAg
ICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKC1oYWxmV2lkdGggKyAoeCArIDEpICogdGlsZVdpZHRo
ICsgYWRqdXN0WCwgZW5kWSArIGFkanVzdFksIDApOworICAgICAgICAgICAgICAgIHBvc2l0aW9u
cy5wdXNoKC1oYWxmV2lkdGggKyB4ICogdGlsZVdpZHRoICsgYWRqdXN0WCwgZW5kWSArIGFkanVz
dFksIDApOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRleCwgaW5kZXggKyAxLCBp
bmRleCArIDMsIGluZGV4ICsgMSwgaW5kZXggKyAyLCBpbmRleCArIDMpOworICAgICAgICAgICAg
ICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICAgICAgaWYgKGZsaXBUaWxlID09PSBfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9USUxFIHx8IGZsaXBUaWxl
ID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1RJ
TEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1l
c2giXS5GTElQX05fUk9UQVRFX1RJTEUpIHsKKyAgICAgICAgICAgICAgICAgICAgdXZzID0gdXZz
LmNvbmNhdCh1dkJhc2VUUlsoeCArIHRpbGVzWSkgJSAyXSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9ST1cgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5ST1RBVEVfUk9XIHx8IGZsaXBUaWxl
ID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9OX1JP
VEFURV9ST1cpIHsKKyAgICAgICAgICAgICAgICAgICAgdXZzID0gdXZzLmNvbmNhdCh1dkJhc2VU
Ult0aWxlc1kgJSAyXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICB1dnMgPSB1dnMuY29uY2F0KHV2QmFzZVRSWzBdKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goMSwgMSwgMSwgMSwg
MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSk7CisgICAgICAgICAgICAgICAgbm9y
bWFscy5wdXNoKDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFydGlhbExlZnRDb2wpIHsKKyAgICAg
ICAgICAgIHZhciB1dkJhc2VMQyA9IFtdOworICAgICAgICAgICAgYSA9IDEgLSBvZmZzZXRYIC8g
dGlsZVdpZHRoOworICAgICAgICAgICAgYiA9IDA7CisgICAgICAgICAgICBjID0gMTsKKyAgICAg
ICAgICAgIGQgPSAxOworICAgICAgICAgICAgdXZCYXNlTENbMF0gPSBbYSwgYiwgYywgYiwgYywg
ZCwgYSwgZF07CisgICAgICAgICAgICB1dkJhc2VMQ1sxXSA9IFthLCBiLCBjLCBiLCBjLCBkLCBh
LCBkXTsKKyAgICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9USUxFIHx8IGZsaXBUaWxlID09PSBfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1JPVykgeworICAgICAg
ICAgICAgICAgIHV2QmFzZUxDWzFdID0gWzEgLSBhLCAxIC0gYiwgMSAtIGMsIDEgLSBiLCAxIC0g
YywgMSAtIGQsIDEgLSBhLCAxIC0gZF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5G
TElQX1RJTEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIk1lc2giXS5GTElQX1JPVykgeworICAgICAgICAgICAgICAgIHV2QmFzZUxDWzFdID0gWzEg
LSBhLCBiLCAxIC0gYywgYiwgMSAtIGMsIGQsIDEgLSBhLCBkXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfVElMRSB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfUk9XKSB7Cisg
ICAgICAgICAgICAgICAgdXZCYXNlTENbMV0gPSBbYSwgMSAtIGIsIGMsIDEgLSBiLCBjLCAxIC0g
ZCwgYSwgMSAtIGRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7
IHkgPCB0aWxlc1k7IHkrKykgeworICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHN0YXJ0
WCArIGFkanVzdFgsIC1oYWxmSGVpZ2h0ICsgeSAqIHRpbGVIZWlnaHQgKyBhZGp1c3RZLCAwKTsK
KyAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChzdGFydFggKyBvZmZzZXRYICsgYWRqdXN0
WCwgLWhhbGZIZWlnaHQgKyB5ICogdGlsZUhlaWdodCArIGFkanVzdFksIDApOworICAgICAgICAg
ICAgICAgIHBvc2l0aW9ucy5wdXNoKHN0YXJ0WCArIG9mZnNldFggKyBhZGp1c3RYLCAtaGFsZkhl
aWdodCArICh5ICsgMSkgKiB0aWxlSGVpZ2h0ICsgYWRqdXN0WSwgMCk7CisgICAgICAgICAgICAg
ICAgcG9zaXRpb25zLnB1c2goc3RhcnRYICsgYWRqdXN0WCwgLWhhbGZIZWlnaHQgKyAoeSArIDEp
ICogdGlsZUhlaWdodCArIGFkanVzdFksIDApOworICAgICAgICAgICAgICAgIGluZGljZXMucHVz
aChpbmRleCwgaW5kZXggKyAxLCBpbmRleCArIDMsIGluZGV4ICsgMSwgaW5kZXggKyAyLCBpbmRl
eCArIDMpOworICAgICAgICAgICAgICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICAgICAgaWYg
KGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0u
RkxJUF9USUxFIHx8IGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJNZXNoIl0uUk9UQVRFX1RJTEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIk1lc2giXS5GTElQX05fUk9UQVRFX1RJTEUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdXZzID0gdXZzLmNvbmNhdCh1dkJhc2VMQ1soeSArIDEpICUgMl0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGlwVGlsZSA9PT0gX21l
c2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfUk9XIHx8IGZsaXBU
aWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRF
X1JPVyB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
TWVzaCJdLkZMSVBfTl9ST1RBVEVfUk9XKSB7CisgICAgICAgICAgICAgICAgICAgIHV2cyA9IHV2
cy5jb25jYXQodXZCYXNlTENbeSAlIDJdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHV2cyA9IHV2cy5jb25jYXQodXZCYXNl
TENbMF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2xvcnMucHVzaCgx
LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxKTsKKyAgICAgICAg
ICAgICAgICBub3JtYWxzLnB1c2goMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwg
LTEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwYXJ0aWFsUmlnaHRD
b2wpIHsKKyAgICAgICAgICAgIHZhciB1dkJhc2VSQyA9IFtdOworICAgICAgICAgICAgYSA9IDA7
CisgICAgICAgICAgICBiID0gMDsKKyAgICAgICAgICAgIGMgPSBvZmZzZXRYIC8gdGlsZUhlaWdo
dDsKKyAgICAgICAgICAgIGQgPSAxOworICAgICAgICAgICAgdXZCYXNlUkNbMF0gPSBbYSwgYiwg
YywgYiwgYywgZCwgYSwgZF07CisgICAgICAgICAgICB1dkJhc2VSQ1sxXSA9IFthLCBiLCBjLCBi
LCBjLCBkLCBhLCBkXTsKKyAgICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLlJPVEFURV9USUxFIHx8IGZsaXBUaWxlID09
PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uUk9UQVRFX1JPVykg
eworICAgICAgICAgICAgICAgIHV2QmFzZVJDWzFdID0gWzEgLSBhLCAxIC0gYiwgMSAtIGMsIDEg
LSBiLCAxIC0gYywgMSAtIGQsIDEgLSBhLCAxIC0gZF07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Ik1lc2giXS5GTElQX1RJTEUgfHwgZmxpcFRpbGUgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIk1lc2giXS5GTElQX1JPVykgeworICAgICAgICAgICAgICAgIHV2QmFzZVJD
WzFdID0gWzEgLSBhLCBiLCAxIC0gYywgYiwgMSAtIGMsIGQsIDEgLSBhLCBkXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfVElMRSB8fCBmbGlwVGlsZSA9PT0g
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVf
Uk9XKSB7CisgICAgICAgICAgICAgICAgdXZCYXNlUkNbMV0gPSBbYSwgMSAtIGIsIGMsIDEgLSBi
LCBjLCAxIC0gZCwgYSwgMSAtIGRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2
YXIgeSA9IDA7IHkgPCB0aWxlc1k7IHkrKykgeworICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5w
dXNoKGVuZFggLSBvZmZzZXRYICsgYWRqdXN0WCwgLWhhbGZIZWlnaHQgKyB5ICogdGlsZUhlaWdo
dCArIGFkanVzdFksIDApOworICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKGVuZFggKyBh
ZGp1c3RYLCAtaGFsZkhlaWdodCArIHkgKiB0aWxlSGVpZ2h0ICsgYWRqdXN0WSwgMCk7CisgICAg
ICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goZW5kWCArIGFkanVzdFgsIC1oYWxmSGVpZ2h0ICsg
KHkgKyAxKSAqIHRpbGVIZWlnaHQgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgICAgICBwb3Np
dGlvbnMucHVzaChlbmRYIC0gb2Zmc2V0WCArIGFkanVzdFgsIC1oYWxmSGVpZ2h0ICsgKHkgKyAx
KSAqIHRpbGVIZWlnaHQgKyBhZGp1c3RZLCAwKTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1
c2goaW5kZXgsIGluZGV4ICsgMSwgaW5kZXggKyAzLCBpbmRleCArIDEsIGluZGV4ICsgMiwgaW5k
ZXggKyAzKTsKKyAgICAgICAgICAgICAgICBpbmRleCArPSA0OworICAgICAgICAgICAgICAgIGlm
IChmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJd
LkZMSVBfVElMRSB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTWVzaCJdLlJPVEFURV9USUxFIHx8IGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0uRkxJUF9OX1JPVEFURV9USUxFKSB7CisgICAgICAg
ICAgICAgICAgICAgIHV2cyA9IHV2cy5jb25jYXQodXZCYXNlUkNbKHkgKyB0aWxlc1gpICUgMl0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGlwVGlsZSA9
PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdLkZMSVBfUk9XIHx8
IGZsaXBUaWxlID09PSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0u
Uk9UQVRFX1JPVyB8fCBmbGlwVGlsZSA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTWVzaCJdLkZMSVBfTl9ST1RBVEVfUk9XKSB7CisgICAgICAgICAgICAgICAgICAgIHV2
cyA9IHV2cy5jb25jYXQodXZCYXNlUkNbeSAlIDJdKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHV2cyA9IHV2cy5jb25jYXQo
dXZCYXNlUkNbMF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2xvcnMu
cHVzaCgxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxKTsKKyAg
ICAgICAgICAgICAgICBub3JtYWxzLnB1c2goMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwg
MCwgMCwgLTEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHZhciBzaWRl
T3JpZW50YXRpb24gPSAob3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPT09IDApID8gMCA6IG9wdGlv
bnMuc2lkZU9yaWVudGF0aW9uIHx8IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVydGV4RGF0YSJdLkRFRkFVTFRTSURFOworICAgIC8vIHNpZGVzCisgICAg
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhEYXRh
Il0uX0NvbXB1dGVTaWRlcyhzaWRlT3JpZW50YXRpb24sIHBvc2l0aW9ucywgaW5kaWNlcywgbm9y
bWFscywgdXZzLCBvcHRpb25zLmZyb250VVZzLCBvcHRpb25zLmJhY2tVVnMpOworICAgIC8vIFJl
c3VsdAorICAgIHZhciB2ZXJ0ZXhEYXRhID0gbmV3IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4RGF0YSJdKCk7CisgICAgdmVydGV4RGF0YS5pbmRp
Y2VzID0gaW5kaWNlczsKKyAgICB2ZXJ0ZXhEYXRhLnBvc2l0aW9ucyA9IHBvc2l0aW9uczsKKyAg
ICB2ZXJ0ZXhEYXRhLm5vcm1hbHMgPSBub3JtYWxzOworICAgIHZlcnRleERhdGEudXZzID0gdXZz
OworICAgIHZhciB0b3RhbENvbG9ycyA9IChzaWRlT3JpZW50YXRpb24gPT09IF9tZXNoX3ZlcnRl
eERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4RGF0YSJdLkRPVUJMRVNJ
REUpID8gY29sb3JzLmNvbmNhdChjb2xvcnMpIDogY29sb3JzOworICAgIHZlcnRleERhdGEuY29s
b3JzID0gdG90YWxDb2xvcnM7CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworLyoqCisgKiBD
bGFzcyBjb250YWluaW5nIHN0YXRpYyBmdW5jdGlvbnMgdG8gaGVscCBwcm9jZWR1cmFsbHkgYnVp
bGQgbWVzaGVzCisgKi8KK3ZhciBUaWxlZFBsYW5lQnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBUaWxlZFBsYW5lQnVpbGRlcigpIHsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHRpbGVkIHBsYW5lIG1lc2gKKyAgICAgKiAqIFRoZSBw
YXJhbWV0ZXIgYHBhdHRlcm5gIHdpbGwsIGRlcGVuZGluZyBvbiB2YWx1ZSwgZG8gbm90aGluZyBv
cgorICAgICAqICogKiBmbGlwIChyZWZsZWN0IGFib3V0IGNlbnRyYWwgdmVydGljYWwpIGFsdGVy
bmF0ZSB0aWxlcyBhY3Jvc3MgYW5kIHVwCisgICAgICogKiAqIGZsaXAgZXZlcnkgdGlsZSBvbiBh
bHRlcm5hdGUgcm93cworICAgICAqICogKiByb3RhdGUgKDE4MCBkZWdzKSBhbHRlcm5hdGUgdGls
ZXMgYWNyb3NzIGFuZCB1cAorICAgICAqICogKiByb3RhdGUgZXZlcnkgdGlsZSBvbiBhbHRlcm5h
dGUgcm93cworICAgICAqICogKiBmbGlwIGFuZCByb3RhdGUgYWx0ZXJuYXRlIHRpbGVzIGFjcm9z
cyBhbmQgdXAKKyAgICAgKiAqICogZmxpcCBhbmQgcm90YXRlIGV2ZXJ5IHRpbGUgb24gYWx0ZXJu
YXRlIHJvd3MKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHRpbGVTaXplYCBzZXRzIHRoZSBzaXpl
IChmbG9hdCkgb2YgZWFjaCB0aWxlIHNpZGUgKGRlZmF1bHQgMSkKKyAgICAgKiAqIFlvdSBjYW4g
c2V0IHNvbWUgZGlmZmVyZW50IHRpbGUgZGltZW5zaW9ucyBieSB1c2luZyB0aGUgcGFyYW1ldGVy
cyBgdGlsZVdpZHRoYCBhbmQgYHRpbGVIZWlnaHRgIChib3RoIGJ5IGRlZmF1bHQgaGF2ZSB0aGUg
c2FtZSB2YWx1ZSBvZiBgdGlsZVNpemVgKQorICAgICAqICogSWYgeW91IGNyZWF0ZSBhIGRvdWJs
ZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGlt
YWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJlc3BlY3RpdmVseSBvbiB0aGUgZnJvbnQgYW5kIHRoZSBi
YWNrIHNpZGVzIHdpdGggdGhlIHBhcmFtZXRlcnMgYGZyb250VVZzYCBhbmQgYGJhY2tVVnNgIChW
ZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24x
MDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRhdGlvbgorICAgICAqICogc2lk
ZU9yaWVudGF0aW9uIG9wdGlvbmFsIGFuZCB0YWtlcyB0aGUgdmFsdWVzIDogTWVzaC5GUk9OVFNJ
REUgKGRlZmF1bHQpLCBNZXNoLkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lERQorICAgICAqICog
ZnJvbnRVdnMgb25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gs
IHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBh
bmQgYXBwbHkgb24gdGhlIGZyb250IHNpZGUsIG9wdGlvbmFsLCBkZWZhdWx0IHZlY3RvcjQgKDAs
IDAsIDEsIDEpCisgICAgICogKiBiYWNrVVZzIG9ubHkgdXNhYmxlIHdoZW4geW91IGNyZWF0ZSBh
IGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0
dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBiYWNrIHNpZGUsIG9wdGlvbmFsLCBk
ZWZhdWx0IHZlY3RvcjQgKDAsIDAsIDEsIDEpCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9zZXRfc2hhcGVzI2JveAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmlu
ZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRo
ZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRl
ZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgYm94IG1lc2gKKyAg
ICAgKi8KKyAgICBUaWxlZFBsYW5lQnVpbGRlci5DcmVhdGVUaWxlZFBsYW5lID0gZnVuY3Rpb24g
KG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7
IHNjZW5lID0gbnVsbDsgfQorICAgICAgICB2YXIgcGxhbmUgPSBuZXcgX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJdKG5hbWUsIHNjZW5lKTsKKyAgICAgICAgb3B0aW9u
cy5zaWRlT3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJN
ZXNoIl0uX0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5zaWRlT3JpZW50YXRpb24p
OworICAgICAgICBwbGFuZS5fb3JpZ2luYWxCdWlsZGVyU2lkZU9yaWVudGF0aW9uID0gb3B0aW9u
cy5zaWRlT3JpZW50YXRpb247CisgICAgICAgIHZhciB2ZXJ0ZXhEYXRhID0gX21lc2hfdmVydGV4
RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhEYXRhIl0uQ3JlYXRlVGls
ZWRQbGFuZShvcHRpb25zKTsKKyAgICAgICAgdmVydGV4RGF0YS5hcHBseVRvTWVzaChwbGFuZSwg
b3B0aW9ucy51cGRhdGFibGUpOworICAgICAgICByZXR1cm4gcGxhbmU7CisgICAgfTsKKyAgICBy
ZXR1cm4gVGlsZWRQbGFuZUJ1aWxkZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL01lc2hlcy9CdWlsZGVycy90b3J1c0J1aWxkZXIudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hlcy9CdWlsZGVycy90
b3J1c0J1aWxkZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogVG9ydXNCdWlsZGVyICovCisvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvcnVzQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gVG9ydXNCdWlsZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9y
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21lc2ggKi8gIi4vTWVzaGVz
L21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF92ZXJ0ZXhEYXRhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9t
ZXNoLnZlcnRleERhdGEgKi8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50cyIpOworCisKKwor
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhEYXRh
Il0uQ3JlYXRlVG9ydXMgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgIHZhciBpbmRpY2VzID0g
W107CisgICAgdmFyIHBvc2l0aW9ucyA9IFtdOworICAgIHZhciBub3JtYWxzID0gW107CisgICAg
dmFyIHV2cyA9IFtdOworICAgIHZhciBkaWFtZXRlciA9IG9wdGlvbnMuZGlhbWV0ZXIgfHwgMTsK
KyAgICB2YXIgdGhpY2tuZXNzID0gb3B0aW9ucy50aGlja25lc3MgfHwgMC41OworICAgIHZhciB0
ZXNzZWxsYXRpb24gPSBvcHRpb25zLnRlc3NlbGxhdGlvbiB8fCAxNjsKKyAgICB2YXIgc2lkZU9y
aWVudGF0aW9uID0gKG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uID09PSAwKSA/IDAgOiBvcHRpb25z
LnNpZGVPcmllbnRhdGlvbiB8fCBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlcnRleERhdGEiXS5ERUZBVUxUU0lERTsKKyAgICB2YXIgc3RyaWRlID0gdGVz
c2VsbGF0aW9uICsgMTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8PSB0ZXNzZWxsYXRpb247IGkr
KykgeworICAgICAgICB2YXIgdSA9IGkgLyB0ZXNzZWxsYXRpb247CisgICAgICAgIHZhciBvdXRl
ckFuZ2xlID0gaSAqIE1hdGguUEkgKiAyLjAgLyB0ZXNzZWxsYXRpb24gLSBNYXRoLlBJIC8gMi4w
OworICAgICAgICB2YXIgdHJhbnNmb3JtID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLlRyYW5zbGF0aW9uKGRpYW1ldGVyIC8gMi4wLCAw
LCAwKS5tdWx0aXBseShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTWF0cml4Il0uUm90YXRpb25ZKG91dGVyQW5nbGUpKTsKKyAgICAgICAgZm9yICh2YXIg
aiA9IDA7IGogPD0gdGVzc2VsbGF0aW9uOyBqKyspIHsKKyAgICAgICAgICAgIHZhciB2ID0gMSAt
IGogLyB0ZXNzZWxsYXRpb247CisgICAgICAgICAgICB2YXIgaW5uZXJBbmdsZSA9IGogKiBNYXRo
LlBJICogMi4wIC8gdGVzc2VsbGF0aW9uICsgTWF0aC5QSTsKKyAgICAgICAgICAgIHZhciBkeCA9
IE1hdGguY29zKGlubmVyQW5nbGUpOworICAgICAgICAgICAgdmFyIGR5ID0gTWF0aC5zaW4oaW5u
ZXJBbmdsZSk7CisgICAgICAgICAgICAvLyBDcmVhdGUgYSB2ZXJ0ZXguCisgICAgICAgICAgICB2
YXIgbm9ybWFsID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0oZHgsIGR5LCAwKTsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9
IG5vcm1hbC5zY2FsZSh0aGlja25lc3MgLyAyKTsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlQ29v
cmRpbmF0ZSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMiJdKHUsIHYpOworICAgICAgICAgICAgcG9zaXRpb24gPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9y
bUNvb3JkaW5hdGVzKHBvc2l0aW9uLCB0cmFuc2Zvcm0pOworICAgICAgICAgICAgbm9ybWFsID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMi
XS5UcmFuc2Zvcm1Ob3JtYWwobm9ybWFsLCB0cmFuc2Zvcm0pOworICAgICAgICAgICAgcG9zaXRp
b25zLnB1c2gocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7CisgICAgICAgICAg
ICBub3JtYWxzLnB1c2gobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7CisgICAgICAgICAg
ICB1dnMucHVzaCh0ZXh0dXJlQ29vcmRpbmF0ZS54LCB0ZXh0dXJlQ29vcmRpbmF0ZS55KTsKKyAg
ICAgICAgICAgIC8vIEFuZCBjcmVhdGUgaW5kaWNlcyBmb3IgdHdvIHRyaWFuZ2xlcy4KKyAgICAg
ICAgICAgIHZhciBuZXh0SSA9IChpICsgMSkgJSBzdHJpZGU7CisgICAgICAgICAgICB2YXIgbmV4
dEogPSAoaiArIDEpICUgc3RyaWRlOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGkgKiBzdHJp
ZGUgKyBqKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChpICogc3RyaWRlICsgbmV4dEopOwor
ICAgICAgICAgICAgaW5kaWNlcy5wdXNoKG5leHRJICogc3RyaWRlICsgaik7CisgICAgICAgICAg
ICBpbmRpY2VzLnB1c2goaSAqIHN0cmlkZSArIG5leHRKKTsKKyAgICAgICAgICAgIGluZGljZXMu
cHVzaChuZXh0SSAqIHN0cmlkZSArIG5leHRKKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChu
ZXh0SSAqIHN0cmlkZSArIGopOworICAgICAgICB9CisgICAgfQorICAgIC8vIFNpZGVzCisgICAg
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhEYXRh
Il0uX0NvbXB1dGVTaWRlcyhzaWRlT3JpZW50YXRpb24sIHBvc2l0aW9ucywgaW5kaWNlcywgbm9y
bWFscywgdXZzLCBvcHRpb25zLmZyb250VVZzLCBvcHRpb25zLmJhY2tVVnMpOworICAgIC8vIFJl
c3VsdAorICAgIHZhciB2ZXJ0ZXhEYXRhID0gbmV3IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4RGF0YSJdKCk7CisgICAgdmVydGV4RGF0YS5pbmRp
Y2VzID0gaW5kaWNlczsKKyAgICB2ZXJ0ZXhEYXRhLnBvc2l0aW9ucyA9IHBvc2l0aW9uczsKKyAg
ICB2ZXJ0ZXhEYXRhLm5vcm1hbHMgPSBub3JtYWxzOworICAgIHZlcnRleERhdGEudXZzID0gdXZz
OworICAgIHJldHVybiB2ZXJ0ZXhEYXRhOworfTsKK19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk1lc2giXS5DcmVhdGVUb3J1cyA9IGZ1bmN0aW9uIChuYW1lLCBkaWFtZXRlciwg
dGhpY2tuZXNzLCB0ZXNzZWxsYXRpb24sIHNjZW5lLCB1cGRhdGFibGUsIHNpZGVPcmllbnRhdGlv
bikgeworICAgIHZhciBvcHRpb25zID0geworICAgICAgICBkaWFtZXRlcjogZGlhbWV0ZXIsCisg
ICAgICAgIHRoaWNrbmVzczogdGhpY2tuZXNzLAorICAgICAgICB0ZXNzZWxsYXRpb246IHRlc3Nl
bGxhdGlvbiwKKyAgICAgICAgc2lkZU9yaWVudGF0aW9uOiBzaWRlT3JpZW50YXRpb24sCisgICAg
ICAgIHVwZGF0YWJsZTogdXBkYXRhYmxlCisgICAgfTsKKyAgICByZXR1cm4gVG9ydXNCdWlsZGVy
LkNyZWF0ZVRvcnVzKG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKK307CisvKioKKyAqIENsYXNzIGNv
bnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxwIHByb2NlZHVyYWxseSBidWlsZCBtZXNo
ZXMKKyAqLwordmFyIFRvcnVzQnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICBmdW5jdGlvbiBUb3J1c0J1aWxkZXIoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSB0b3J1cyBtZXNoCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBkaWFtZXRlcmAgc2V0
cyB0aGUgZGlhbWV0ZXIgc2l6ZSAoZmxvYXQpIG9mIHRoZSB0b3J1cyAoZGVmYXVsdCAxKQorICAg
ICAqICogVGhlIHBhcmFtZXRlciBgdGhpY2tuZXNzYCBzZXRzIHRoZSBkaWFtZXRlciBzaXplIG9m
IHRoZSB0dWJlIG9mIHRoZSB0b3J1cyAoZmxvYXQsIGRlZmF1bHQgMC41KQorICAgICAqICogVGhl
IHBhcmFtZXRlciBgdGVzc2VsbGF0aW9uYCBzZXRzIHRoZSBudW1iZXIgb2YgdG9ydXMgc2lkZXMg
KHBvc3RpdmUgaW50ZWdlciwgZGVmYXVsdCAxNikKKyAgICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQg
dGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2gu
RlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJBQllMT04uTWVz
aC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gs
IHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBh
bmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0
aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBEZXRh
aWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9i
YXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUg
c2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAo
ZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNo
YW5nZSBvbmNlIGNyZWF0ZWQuCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBv
ZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNl
ZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9z
dGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSB0b3J1cyBtZXNoCisgICAgICogQHNlZSBo
dHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9zZXRfc2hhcGVzI3RvcnVzCisgICAgICov
CisgICAgVG9ydXNCdWlsZGVyLkNyZWF0ZVRvcnVzID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMs
IHNjZW5lKSB7CisgICAgICAgIHZhciB0b3J1cyA9IG5ldyBfbWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJNZXNoIl0obmFtZSwgc2NlbmUpOworICAgICAgICBvcHRpb25zLnNpZGVP
cmllbnRhdGlvbiA9IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5f
R2V0RGVmYXVsdFNpZGVPcmllbnRhdGlvbihvcHRpb25zLnNpZGVPcmllbnRhdGlvbik7CisgICAg
ICAgIHRvcnVzLl9vcmlnaW5hbEJ1aWxkZXJTaWRlT3JpZW50YXRpb24gPSBvcHRpb25zLnNpZGVP
cmllbnRhdGlvbjsKKyAgICAgICAgdmFyIHZlcnRleERhdGEgPSBfbWVzaF92ZXJ0ZXhEYXRhX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleERhdGEiXS5DcmVhdGVUb3J1cyhvcHRp
b25zKTsKKyAgICAgICAgdmVydGV4RGF0YS5hcHBseVRvTWVzaCh0b3J1cywgb3B0aW9ucy51cGRh
dGFibGUpOworICAgICAgICByZXR1cm4gdG9ydXM7CisgICAgfTsKKyAgICByZXR1cm4gVG9ydXNC
dWlsZGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRl
cnMvdG9ydXNLbm90QnVpbGRlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hlcy9CdWlsZGVycy90b3J1c0tub3RC
dWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBUb3J1c0tub3RCdWlsZGVyICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvcnVzS25vdEJ1aWxkZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFRvcnVzS25vdEJ1aWxkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMv
bWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWVzaCAq
LyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoX3Zl
cnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL21lc2gudmVydGV4RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0ZXhEYXRhLnRz
Iik7CisKKworCitfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlcnRleERhdGEiXS5DcmVhdGVUb3J1c0tub3QgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAg
IHZhciBpbmRpY2VzID0gbmV3IEFycmF5KCk7CisgICAgdmFyIHBvc2l0aW9ucyA9IG5ldyBBcnJh
eSgpOworICAgIHZhciBub3JtYWxzID0gbmV3IEFycmF5KCk7CisgICAgdmFyIHV2cyA9IG5ldyBB
cnJheSgpOworICAgIHZhciByYWRpdXMgPSBvcHRpb25zLnJhZGl1cyB8fCAyOworICAgIHZhciB0
dWJlID0gb3B0aW9ucy50dWJlIHx8IDAuNTsKKyAgICB2YXIgcmFkaWFsU2VnbWVudHMgPSBvcHRp
b25zLnJhZGlhbFNlZ21lbnRzIHx8IDMyOworICAgIHZhciB0dWJ1bGFyU2VnbWVudHMgPSBvcHRp
b25zLnR1YnVsYXJTZWdtZW50cyB8fCAzMjsKKyAgICB2YXIgcCA9IG9wdGlvbnMucCB8fCAyOwor
ICAgIHZhciBxID0gb3B0aW9ucy5xIHx8IDM7CisgICAgdmFyIHNpZGVPcmllbnRhdGlvbiA9IChv
cHRpb25zLnNpZGVPcmllbnRhdGlvbiA9PT0gMCkgPyAwIDogb3B0aW9ucy5zaWRlT3JpZW50YXRp
b24gfHwgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0
ZXhEYXRhIl0uREVGQVVMVFNJREU7CisgICAgLy8gSGVscGVyCisgICAgdmFyIGdldFBvcyA9IGZ1
bmN0aW9uIChhbmdsZSkgeworICAgICAgICB2YXIgY3UgPSBNYXRoLmNvcyhhbmdsZSk7CisgICAg
ICAgIHZhciBzdSA9IE1hdGguc2luKGFuZ2xlKTsKKyAgICAgICAgdmFyIHF1T3ZlclAgPSBxIC8g
cCAqIGFuZ2xlOworICAgICAgICB2YXIgY3MgPSBNYXRoLmNvcyhxdU92ZXJQKTsKKyAgICAgICAg
dmFyIHR4ID0gcmFkaXVzICogKDIgKyBjcykgKiAwLjUgKiBjdTsKKyAgICAgICAgdmFyIHR5ID0g
cmFkaXVzICogKDIgKyBjcykgKiBzdSAqIDAuNTsKKyAgICAgICAgdmFyIHR6ID0gcmFkaXVzICog
TWF0aC5zaW4ocXVPdmVyUCkgKiAwLjU7CisgICAgICAgIHJldHVybiBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSh0eCwgdHksIHR6
KTsKKyAgICB9OworICAgIC8vIFZlcnRpY2VzCisgICAgdmFyIGk7CisgICAgdmFyIGo7CisgICAg
Zm9yIChpID0gMDsgaSA8PSByYWRpYWxTZWdtZW50czsgaSsrKSB7CisgICAgICAgIHZhciBtb2RJ
ID0gaSAlIHJhZGlhbFNlZ21lbnRzOworICAgICAgICB2YXIgdSA9IG1vZEkgLyByYWRpYWxTZWdt
ZW50cyAqIDIgKiBwICogTWF0aC5QSTsKKyAgICAgICAgdmFyIHAxID0gZ2V0UG9zKHUpOworICAg
ICAgICB2YXIgcDIgPSBnZXRQb3ModSArIDAuMDEpOworICAgICAgICB2YXIgdGFuZyA9IHAyLnN1
YnRyYWN0KHAxKTsKKyAgICAgICAgdmFyIG4gPSBwMi5hZGQocDEpOworICAgICAgICB2YXIgYml0
YW4gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVj
dG9yMyJdLkNyb3NzKHRhbmcsIG4pOworICAgICAgICBuID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Dcm9zcyhiaXRhbiwgdGFuZyk7
CisgICAgICAgIGJpdGFuLm5vcm1hbGl6ZSgpOworICAgICAgICBuLm5vcm1hbGl6ZSgpOworICAg
ICAgICBmb3IgKGogPSAwOyBqIDwgdHVidWxhclNlZ21lbnRzOyBqKyspIHsKKyAgICAgICAgICAg
IHZhciBtb2RKID0gaiAlIHR1YnVsYXJTZWdtZW50czsKKyAgICAgICAgICAgIHZhciB2ID0gbW9k
SiAvIHR1YnVsYXJTZWdtZW50cyAqIDIgKiBNYXRoLlBJOworICAgICAgICAgICAgdmFyIGN4ID0g
LXR1YmUgKiBNYXRoLmNvcyh2KTsKKyAgICAgICAgICAgIHZhciBjeSA9IHR1YmUgKiBNYXRoLnNp
bih2KTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHAxLnggKyBjeCAqIG4ueCArIGN5ICog
Yml0YW4ueCk7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChwMS55ICsgY3ggKiBuLnkgKyBj
eSAqIGJpdGFuLnkpOworICAgICAgICAgICAgcG9zaXRpb25zLnB1c2gocDEueiArIGN4ICogbi56
ICsgY3kgKiBiaXRhbi56KTsKKyAgICAgICAgICAgIHV2cy5wdXNoKGkgLyByYWRpYWxTZWdtZW50
cyk7CisgICAgICAgICAgICB1dnMucHVzaChqIC8gdHVidWxhclNlZ21lbnRzKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgcmFkaWFsU2VnbWVudHM7IGkrKykgeworICAg
ICAgICBmb3IgKGogPSAwOyBqIDwgdHVidWxhclNlZ21lbnRzOyBqKyspIHsKKyAgICAgICAgICAg
IHZhciBqTmV4dCA9IChqICsgMSkgJSB0dWJ1bGFyU2VnbWVudHM7CisgICAgICAgICAgICB2YXIg
YSA9IGkgKiB0dWJ1bGFyU2VnbWVudHMgKyBqOworICAgICAgICAgICAgdmFyIGIgPSAoaSArIDEp
ICogdHVidWxhclNlZ21lbnRzICsgajsKKyAgICAgICAgICAgIHZhciBjID0gKGkgKyAxKSAqIHR1
YnVsYXJTZWdtZW50cyArIGpOZXh0OworICAgICAgICAgICAgdmFyIGQgPSBpICogdHVidWxhclNl
Z21lbnRzICsgak5leHQ7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goZCk7CisgICAgICAgICAg
ICBpbmRpY2VzLnB1c2goYik7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goYSk7CisgICAgICAg
ICAgICBpbmRpY2VzLnB1c2goZCk7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goYyk7CisgICAg
ICAgICAgICBpbmRpY2VzLnB1c2goYik7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gTm9ybWFs
cworICAgIF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVy
dGV4RGF0YSJdLkNvbXB1dGVOb3JtYWxzKHBvc2l0aW9ucywgaW5kaWNlcywgbm9ybWFscyk7Cisg
ICAgLy8gU2lkZXMKKyAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlZlcnRleERhdGEiXS5fQ29tcHV0ZVNpZGVzKHNpZGVPcmllbnRhdGlvbiwgcG9zaXRp
b25zLCBpbmRpY2VzLCBub3JtYWxzLCB1dnMsIG9wdGlvbnMuZnJvbnRVVnMsIG9wdGlvbnMuYmFj
a1VWcyk7CisgICAgLy8gUmVzdWx0CisgICAgdmFyIHZlcnRleERhdGEgPSBuZXcgX21lc2hfdmVy
dGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAg
ICB2ZXJ0ZXhEYXRhLmluZGljZXMgPSBpbmRpY2VzOworICAgIHZlcnRleERhdGEucG9zaXRpb25z
ID0gcG9zaXRpb25zOworICAgIHZlcnRleERhdGEubm9ybWFscyA9IG5vcm1hbHM7CisgICAgdmVy
dGV4RGF0YS51dnMgPSB1dnM7CisgICAgcmV0dXJuIHZlcnRleERhdGE7Cit9OworX21lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdLkNyZWF0ZVRvcnVzS25vdCA9IGZ1bmN0
aW9uIChuYW1lLCByYWRpdXMsIHR1YmUsIHJhZGlhbFNlZ21lbnRzLCB0dWJ1bGFyU2VnbWVudHMs
IHAsIHEsIHNjZW5lLCB1cGRhdGFibGUsIHNpZGVPcmllbnRhdGlvbikgeworICAgIHZhciBvcHRp
b25zID0geworICAgICAgICByYWRpdXM6IHJhZGl1cywKKyAgICAgICAgdHViZTogdHViZSwKKyAg
ICAgICAgcmFkaWFsU2VnbWVudHM6IHJhZGlhbFNlZ21lbnRzLAorICAgICAgICB0dWJ1bGFyU2Vn
bWVudHM6IHR1YnVsYXJTZWdtZW50cywKKyAgICAgICAgcDogcCwKKyAgICAgICAgcTogcSwKKyAg
ICAgICAgc2lkZU9yaWVudGF0aW9uOiBzaWRlT3JpZW50YXRpb24sCisgICAgICAgIHVwZGF0YWJs
ZTogdXBkYXRhYmxlCisgICAgfTsKKyAgICByZXR1cm4gVG9ydXNLbm90QnVpbGRlci5DcmVhdGVU
b3J1c0tub3QobmFtZSwgb3B0aW9ucywgc2NlbmUpOworfTsKKy8qKgorICogQ2xhc3MgY29udGFp
bmluZyBzdGF0aWMgZnVuY3Rpb25zIHRvIGhlbHAgcHJvY2VkdXJhbGx5IGJ1aWxkIG1lc2hlcwor
ICovCit2YXIgVG9ydXNLbm90QnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICBmdW5jdGlvbiBUb3J1c0tub3RCdWlsZGVyKCkgeworICAgIH0KKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgdG9ydXMga25vdCBtZXNoCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGByYWRp
dXNgIHNldHMgdGhlIGdsb2JhbCByYWRpdXMgc2l6ZSAoZmxvYXQpIG9mIHRoZSB0b3J1cyBrbm90
IChkZWZhdWx0IDIpCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGByYWRpYWxTZWdtZW50c2Agc2V0
cyB0aGUgbnVtYmVyIG9mIHNpZGVzIG9uIGVhY2ggdHViZSBzZWdtZW50cyAocG9zaXRpdmUgaW50
ZWdlciwgZGVmYXVsdCAzMikKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHR1YnVsYXJTZWdtZW50
c2Agc2V0cyB0aGUgbnVtYmVyIG9mIHR1YmVzIHRvIGRlY29tcG9zZSB0aGUga25vdCBpbnRvIChw
b3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDMyKQorICAgICAqICogVGhlIHBhcmFtZXRlcnMgYHBg
IGFuZCBgcWAgYXJlIHRoZSBudW1iZXIgb2Ygd2luZGluZ3Mgb24gZWFjaCBheGlzIChwb3NpdGl2
ZSBpbnRlZ2VycywgZGVmYXVsdCAyIGFuZCAzKQorICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0
aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5G
Uk9OVFNJREUgKGRlZmF1bHQpLCBCQUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNo
LkRPVUJMRVNJREUKKyAgICAgKiAqIElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwg
eW91IGNhbiBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFu
ZCBzdGljayByZXNwZWN0aXZlbHkgb24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRo
IHRoZSBwYXJhbWV0ZXJzIGBmcm9udFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFp
bCBoZXJlIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jh
c2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBz
ZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChk
ZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hh
bmdlIG9uY2UgY3JlYXRlZC4KKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9m
IHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2Vk
IHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0
aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdGhlIHRvcnVzIGtub3QgbWVzaAorICAgICAqIEBz
ZWUgIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3NldF9zaGFwZXMjdG9ydXMta25v
dAorICAgICAqLworICAgIFRvcnVzS25vdEJ1aWxkZXIuQ3JlYXRlVG9ydXNLbm90ID0gZnVuY3Rp
b24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIHZhciB0b3J1c0tub3QgPSBuZXcg
X21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdKG5hbWUsIHNjZW5lKTsK
KyAgICAgICAgb3B0aW9ucy5zaWRlT3JpZW50YXRpb24gPSBfbWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJNZXNoIl0uX0dldERlZmF1bHRTaWRlT3JpZW50YXRpb24ob3B0aW9ucy5z
aWRlT3JpZW50YXRpb24pOworICAgICAgICB0b3J1c0tub3QuX29yaWdpbmFsQnVpbGRlclNpZGVP
cmllbnRhdGlvbiA9IG9wdGlvbnMuc2lkZU9yaWVudGF0aW9uOworICAgICAgICB2YXIgdmVydGV4
RGF0YSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVy
dGV4RGF0YSJdLkNyZWF0ZVRvcnVzS25vdChvcHRpb25zKTsKKyAgICAgICAgdmVydGV4RGF0YS5h
cHBseVRvTWVzaCh0b3J1c0tub3QsIG9wdGlvbnMudXBkYXRhYmxlKTsKKyAgICAgICAgcmV0dXJu
IHRvcnVzS25vdDsKKyAgICB9OworICAgIHJldHVybiBUb3J1c0tub3RCdWlsZGVyOworfSgpKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdHViZUJ1aWxkZXIu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vTWVzaGVzL0J1aWxkZXJzL3R1YmVCdWlsZGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogVHVi
ZUJ1aWxkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHViZUJ1aWxk
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFR1YmVCdWlsZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIu
L01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cmliYm9uQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9yaWJib25CdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9yaWJib25C
dWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfcGF0aF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWF0aHMvbWF0aC5wYXRoICovICIuL01hdGhzL21hdGgucGF0aC50cyIpOworCisKKworCitf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uQ3JlYXRlVHViZSA9IGZ1
bmN0aW9uIChuYW1lLCBwYXRoLCByYWRpdXMsIHRlc3NlbGxhdGlvbiwgcmFkaXVzRnVuY3Rpb24s
IGNhcCwgc2NlbmUsIHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uLCBpbnN0YW5jZSkgeworICAg
IHZhciBvcHRpb25zID0geworICAgICAgICBwYXRoOiBwYXRoLAorICAgICAgICByYWRpdXM6IHJh
ZGl1cywKKyAgICAgICAgdGVzc2VsbGF0aW9uOiB0ZXNzZWxsYXRpb24sCisgICAgICAgIHJhZGl1
c0Z1bmN0aW9uOiByYWRpdXNGdW5jdGlvbiwKKyAgICAgICAgYXJjOiAxLAorICAgICAgICBjYXA6
IGNhcCwKKyAgICAgICAgdXBkYXRhYmxlOiB1cGRhdGFibGUsCisgICAgICAgIHNpZGVPcmllbnRh
dGlvbjogc2lkZU9yaWVudGF0aW9uLAorICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UKKyAgICB9
OworICAgIHJldHVybiBUdWJlQnVpbGRlci5DcmVhdGVUdWJlKG5hbWUsIG9wdGlvbnMsIHNjZW5l
KTsKK307CisvKioKKyAqIENsYXNzIGNvbnRhaW5pbmcgc3RhdGljIGZ1bmN0aW9ucyB0byBoZWxw
IHByb2NlZHVyYWxseSBidWlsZCBtZXNoZXMKKyAqLwordmFyIFR1YmVCdWlsZGVyID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFR1YmVCdWlsZGVyKCkgeworICAg
IH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgdHViZSBtZXNoLgorICAgICAqIFRoZSB0dWJl
IGlzIGEgcGFyYW1ldHJpYyBzaGFwZS4gSXQgaGFzIG5vIHByZWRlZmluZWQgc2hhcGUuIEl0cyBm
aW5hbCBzaGFwZSB3aWxsIGRlcGVuZCBvbiB0aGUgaW5wdXQgcGFyYW1ldGVycworICAgICAqICog
VGhlIHBhcmFtZXRlciBgcGF0aGAgaXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZl
Y3RvcjMuIEl0IGlzIHRoZSBjdXJ2ZSB1c2VkIGFzIHRoZSBheGlzIG9mIHRoZSB0dWJlCisgICAg
ICogKiBUaGUgcGFyYW1ldGVyIGByYWRpdXNgIChwb3NpdGl2ZSBmbG9hdCwgZGVmYXVsdCAxKSBz
ZXRzIHRoZSB0dWJlIHJhZGl1cyBzaXplCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGB0ZXNzZWxs
YXRpb25gIChwb3NpdGl2ZSBmbG9hdCwgZGVmYXVsdCA2NCkgaXMgdGhlIG51bWJlciBvZiBzaWRl
cyBvbiB0aGUgdHVidWxhciBzdXJmYWNlCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGByYWRpdXNG
dW5jdGlvbmAgKGphdmFzY3JpcHQgZnVuY3Rpb24sIGRlZmF1bHQgbnVsbCkgaXMgYSB2YW5pbGxh
IGphdmFzY3JpcHQgZnVuY3Rpb24uIElmIGl0IGlzIG5vdCBudWxsLCBpdCBvdmVyd3JpdHRlcyB0
aGUgcGFyYW1ldGVyIGByYWRpdXNgCisgICAgICogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBv
biBlYWNoIHBvaW50IG9mIHRoZSB0dWJlIHBhdGggYW5kIGlzIHBhc3NlZCB0aGUgaW5kZXggYGlg
IG9mIHRoZSBpLXRoIHBvaW50IGFuZCB0aGUgZGlzdGFuY2Ugb2YgdGhpcyBwb2ludCBmcm9tIHRo
ZSBmaXJzdCBwb2ludCBvZiB0aGUgcGF0aC4gSXQgbXVzdCByZXR1cm4gYSByYWRpdXMgdmFsdWUg
KHBvc2l0aXZlIGZsb2F0KQorICAgICAqICogVGhlIHBhcmFtZXRlciBgYXJjYCAocG9zaXRpdmUg
ZmxvYXQsIG1heGltdW0gMSwgZGVmYXVsdCAxKSBpcyB0aGUgcmF0aW8gdG8gYXBwbHkgdG8gdGhl
IHR1YmUgY2lyY3VtZmVyZW5jZSA6IDIgeCBQSSB4IGFyYworICAgICAqICogVGhlIHBhcmFtZXRl
ciBgY2FwYCBzZXRzIHRoZSB3YXkgdGhlIGV4dHJ1ZGVkIHNoYXBlIGlzIGNhcHBlZC4gUG9zc2li
bGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLk5PX0NBUCAoZGVmYXVsdCksIEJBQllMT04uTWVzaC5D
QVBfU1RBUlQsIEJBQllMT04uTWVzaC5DQVBfRU5ELCBCQUJZTE9OLk1lc2guQ0FQX0FMTAorICAg
ICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgaW5zdGFuY2VgIGlzIGFuIGluc3RhbmNlIG9m
IGFuIGV4aXN0aW5nIFR1YmUgb2JqZWN0IHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGUgcGFzc2VkIGBw
YXRoQXJyYXlgIHBhcmFtZXRlciA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hv
d190b19keW5hbWljYWxseV9tb3JwaF9hX21lc2gjdHViZQorICAgICAqICogWW91IGNhbiBhbHNv
IHNldCB0aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04u
TWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBCQUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxP
Ti5NZXNoLkRPVUJMRVNJREUKKyAgICAgKiAqIElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQg
bWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBj
cm9wIGFuZCBzdGljayByZXNwZWN0aXZlbHkgb24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRl
cyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBmcm9udFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCku
IERldGFpbCBoZXJlIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2Nv
dmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50YXRpb24KKyAgICAgKiAqIFRoZSBvcHRpb25h
bCBwYXJhbWV0ZXIgYGludmVydFVWYCAoYm9vbGVhbiwgZGVmYXVsdCBmYWxzZSkgc3dhcHMgaW4g
dGhlIGdlb21ldHJ5IHRoZSBVIGFuZCBWIGNvb3JkaW5hdGVzIHRvIGFwcGx5IGEgdGV4dHVyZQor
ICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0aCB0aGUgYm9vbGVh
biBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBpbnRlcm5hbCBn
ZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkCisgICAgICogQHBhcmFt
IG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25z
IGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFy
YW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSB0
dWJlIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3Bh
cmFtZXRyaWNfc2hhcGVzCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hv
d190by9zZXRfc2hhcGVzI3R1YmUKKyAgICAgKi8KKyAgICBUdWJlQnVpbGRlci5DcmVhdGVUdWJl
ID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZSA9
PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICB2YXIgcGF0aCA9IG9wdGlvbnMu
cGF0aDsKKyAgICAgICAgdmFyIGluc3RhbmNlID0gb3B0aW9ucy5pbnN0YW5jZTsKKyAgICAgICAg
dmFyIHJhZGl1cyA9IDEuMDsKKyAgICAgICAgaWYgKG9wdGlvbnMucmFkaXVzICE9PSB1bmRlZmlu
ZWQpIHsKKyAgICAgICAgICAgIHJhZGl1cyA9IG9wdGlvbnMucmFkaXVzOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKGluc3RhbmNlKSB7CisgICAgICAgICAgICByYWRpdXMgPSBpbnN0YW5j
ZS5fY3JlYXRpb25EYXRhU3RvcmFnZS5yYWRpdXM7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRl
c3NlbGxhdGlvbiA9IG9wdGlvbnMudGVzc2VsbGF0aW9uIHx8IDY0IHwgMDsKKyAgICAgICAgdmFy
IHJhZGl1c0Z1bmN0aW9uID0gb3B0aW9ucy5yYWRpdXNGdW5jdGlvbiB8fCBudWxsOworICAgICAg
ICB2YXIgY2FwID0gb3B0aW9ucy5jYXAgfHwgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siTWVzaCJdLk5PX0NBUDsKKyAgICAgICAgdmFyIGludmVydFVWID0gb3B0aW9ucy5pbnZl
cnRVViB8fCBmYWxzZTsKKyAgICAgICAgdmFyIHVwZGF0YWJsZSA9IG9wdGlvbnMudXBkYXRhYmxl
OworICAgICAgICB2YXIgc2lkZU9yaWVudGF0aW9uID0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTWVzaCJdLl9HZXREZWZhdWx0U2lkZU9yaWVudGF0aW9uKG9wdGlvbnMuc2lk
ZU9yaWVudGF0aW9uKTsKKyAgICAgICAgb3B0aW9ucy5hcmMgPSBvcHRpb25zLmFyYyAmJiAob3B0
aW9ucy5hcmMgPD0gMC4wIHx8IG9wdGlvbnMuYXJjID4gMS4wKSA/IDEuMCA6IG9wdGlvbnMuYXJj
IHx8IDEuMDsKKyAgICAgICAgLy8gdHViZSBnZW9tZXRyeQorICAgICAgICB2YXIgdHViZVBhdGhB
cnJheSA9IGZ1bmN0aW9uIChwYXRoLCBwYXRoM0QsIGNpcmNsZVBhdGhzLCByYWRpdXMsIHRlc3Nl
bGxhdGlvbiwgcmFkaXVzRnVuY3Rpb24sIGNhcCwgYXJjKSB7CisgICAgICAgICAgICB2YXIgdGFu
Z2VudHMgPSBwYXRoM0QuZ2V0VGFuZ2VudHMoKTsKKyAgICAgICAgICAgIHZhciBub3JtYWxzID0g
cGF0aDNELmdldE5vcm1hbHMoKTsKKyAgICAgICAgICAgIHZhciBkaXN0YW5jZXMgPSBwYXRoM0Qu
Z2V0RGlzdGFuY2VzKCk7CisgICAgICAgICAgICB2YXIgcGkyID0gTWF0aC5QSSAqIDI7CisgICAg
ICAgICAgICB2YXIgc3RlcCA9IHBpMiAvIHRlc3NlbGxhdGlvbiAqIGFyYzsKKyAgICAgICAgICAg
IHZhciByZXR1cm5SYWRpdXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiByYWRpdXM7IH07CisgICAg
ICAgICAgICB2YXIgcmFkaXVzRnVuY3Rpb25GaW5hbCA9IHJhZGl1c0Z1bmN0aW9uIHx8IHJldHVy
blJhZGl1czsKKyAgICAgICAgICAgIHZhciBjaXJjbGVQYXRoOworICAgICAgICAgICAgdmFyIHJh
ZDsKKyAgICAgICAgICAgIHZhciBub3JtYWw7CisgICAgICAgICAgICB2YXIgcm90YXRlZDsKKyAg
ICAgICAgICAgIHZhciByb3RhdGlvbk1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdOworICAgICAgICAg
ICAgdmFyIGluZGV4ID0gKGNhcCA9PT0gX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siTWVzaCJdLk5PX0NBUCB8fCBjYXAgPT09IF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIk1lc2giXS5DQVBfRU5EKSA/IDAgOiAyOworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgcmFkID0gcmFkaXVz
RnVuY3Rpb25GaW5hbChpLCBkaXN0YW5jZXNbaV0pOyAvLyBjdXJyZW50IHJhZGl1cworICAgICAg
ICAgICAgICAgIGNpcmNsZVBhdGggPSBBcnJheSgpOyAvLyBjdXJyZW50IGNpcmNsZSBhcnJheQor
ICAgICAgICAgICAgICAgIG5vcm1hbCA9IG5vcm1hbHNbaV07IC8vIGN1cnJlbnQgbm9ybWFsCisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCB0ZXNzZWxsYXRpb247IHQrKykgewor
ICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siTWF0cml4Il0uUm90YXRpb25BeGlzVG9SZWYodGFuZ2VudHNbaV0sIHN0ZXAg
KiB0LCByb3RhdGlvbk1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgIHJvdGF0ZWQgPSBjaXJj
bGVQYXRoW3RdID8gY2lyY2xlUGF0aFt0XSA6IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAgICAgICAgICAg
ICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYobm9ybWFsLCByb3RhdGlvbk1hdHJpeCwgcm90
YXRlZCk7CisgICAgICAgICAgICAgICAgICAgIHJvdGF0ZWQuc2NhbGVJblBsYWNlKHJhZCkuYWRk
SW5QbGFjZShwYXRoW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgY2lyY2xlUGF0aFt0XSA9IHJv
dGF0ZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNpcmNsZVBhdGhzW2lu
ZGV4XSA9IGNpcmNsZVBhdGg7CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIGNhcAorICAgICAgICAgICAgdmFyIGNhcFBhdGggPSBmdW5jdGlv
biAobmJQb2ludHMsIHBhdGhJbmRleCkgeworICAgICAgICAgICAgICAgIHZhciBwb2ludENhcCA9
IEFycmF5KCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYlBvaW50czsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHBvaW50Q2FwLnB1c2gocGF0aFtwYXRoSW5kZXhd
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50Q2FwOwor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHN3aXRjaCAoY2FwKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNZXNoIl0uTk9fQ0FQ
OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIF9tZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfU1RBUlQ6CisgICAgICAg
ICAgICAgICAgICAgIGNpcmNsZVBhdGhzWzBdID0gY2FwUGF0aCh0ZXNzZWxsYXRpb24sIDApOwor
ICAgICAgICAgICAgICAgICAgICBjaXJjbGVQYXRoc1sxXSA9IGNpcmNsZVBhdGhzWzJdLnNsaWNl
KDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIF9t
ZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2giXS5DQVBfRU5EOgorICAgICAg
ICAgICAgICAgICAgICBjaXJjbGVQYXRoc1tpbmRleF0gPSBjaXJjbGVQYXRoc1tpbmRleCAtIDFd
LnNsaWNlKDApOworICAgICAgICAgICAgICAgICAgICBjaXJjbGVQYXRoc1tpbmRleCArIDFdID0g
Y2FwUGF0aCh0ZXNzZWxsYXRpb24sIHBhdGgubGVuZ3RoIC0gMSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTWVzaCJdLkNBUF9BTEw6CisgICAgICAgICAgICAgICAgICAgIGNpcmNsZVBh
dGhzWzBdID0gY2FwUGF0aCh0ZXNzZWxsYXRpb24sIDApOworICAgICAgICAgICAgICAgICAgICBj
aXJjbGVQYXRoc1sxXSA9IGNpcmNsZVBhdGhzWzJdLnNsaWNlKDApOworICAgICAgICAgICAgICAg
ICAgICBjaXJjbGVQYXRoc1tpbmRleF0gPSBjaXJjbGVQYXRoc1tpbmRleCAtIDFdLnNsaWNlKDAp
OworICAgICAgICAgICAgICAgICAgICBjaXJjbGVQYXRoc1tpbmRleCArIDFdID0gY2FwUGF0aCh0
ZXNzZWxsYXRpb24sIHBhdGgubGVuZ3RoIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNpcmNsZVBhdGhzOworICAgICAgICB9
OworICAgICAgICB2YXIgcGF0aDNEOworICAgICAgICB2YXIgcGF0aEFycmF5OworICAgICAgICBp
ZiAoaW5zdGFuY2UpIHsgLy8gdHViZSB1cGRhdGUKKyAgICAgICAgICAgIHZhciBzdG9yYWdlID0g
aW5zdGFuY2UuX2NyZWF0aW9uRGF0YVN0b3JhZ2U7CisgICAgICAgICAgICB2YXIgYXJjID0gb3B0
aW9ucy5hcmMgfHwgc3RvcmFnZS5hcmM7CisgICAgICAgICAgICBwYXRoM0QgPSBzdG9yYWdlLnBh
dGgzRC51cGRhdGUocGF0aCk7CisgICAgICAgICAgICBwYXRoQXJyYXkgPSB0dWJlUGF0aEFycmF5
KHBhdGgsIHBhdGgzRCwgc3RvcmFnZS5wYXRoQXJyYXksIHJhZGl1cywgc3RvcmFnZS50ZXNzZWxs
YXRpb24sIHJhZGl1c0Z1bmN0aW9uLCBzdG9yYWdlLmNhcCwgYXJjKTsKKyAgICAgICAgICAgIGlu
c3RhbmNlID0gX3JpYmJvbkJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUmli
Ym9uQnVpbGRlciJdLkNyZWF0ZVJpYmJvbigiIiwgeyBwYXRoQXJyYXk6IHBhdGhBcnJheSwgaW5z
dGFuY2U6IGluc3RhbmNlIH0pOworICAgICAgICAgICAgLy8gVXBkYXRlIG1vZGUsIG5vIG5lZWQg
dG8gcmVjcmVhdGUgdGhlIHN0b3JhZ2UuCisgICAgICAgICAgICBzdG9yYWdlLnBhdGgzRCA9IHBh
dGgzRDsKKyAgICAgICAgICAgIHN0b3JhZ2UucGF0aEFycmF5ID0gcGF0aEFycmF5OworICAgICAg
ICAgICAgc3RvcmFnZS5hcmMgPSBhcmM7CisgICAgICAgICAgICBzdG9yYWdlLnJhZGl1cyA9IHJh
ZGl1czsKKyAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICAgICAgfQorICAgICAgICAv
LyB0dWJlIGNyZWF0aW9uCisgICAgICAgIHBhdGgzRCA9IG5ldyBfTWF0aHNfbWF0aF9wYXRoX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBhdGgzRCJdKHBhdGgpOworICAgICAgICB2YXIg
bmV3UGF0aEFycmF5ID0gbmV3IEFycmF5KCk7CisgICAgICAgIGNhcCA9IChjYXAgPCAwIHx8IGNh
cCA+IDMpID8gMCA6IGNhcDsKKyAgICAgICAgcGF0aEFycmF5ID0gdHViZVBhdGhBcnJheShwYXRo
LCBwYXRoM0QsIG5ld1BhdGhBcnJheSwgcmFkaXVzLCB0ZXNzZWxsYXRpb24sIHJhZGl1c0Z1bmN0
aW9uLCBjYXAsIG9wdGlvbnMuYXJjKTsKKyAgICAgICAgdmFyIHR1YmUgPSBfcmliYm9uQnVpbGRl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJSaWJib25CdWlsZGVyIl0uQ3JlYXRlUmli
Ym9uKG5hbWUsIHsgcGF0aEFycmF5OiBwYXRoQXJyYXksIGNsb3NlUGF0aDogdHJ1ZSwgY2xvc2VB
cnJheTogZmFsc2UsIHVwZGF0YWJsZTogdXBkYXRhYmxlLCBzaWRlT3JpZW50YXRpb246IHNpZGVP
cmllbnRhdGlvbiwgaW52ZXJ0VVY6IGludmVydFVWLCBmcm9udFVWczogb3B0aW9ucy5mcm9udFVW
cywgYmFja1VWczogb3B0aW9ucy5iYWNrVVZzIH0sIHNjZW5lKTsKKyAgICAgICAgdHViZS5fY3Jl
YXRpb25EYXRhU3RvcmFnZS5wYXRoQXJyYXkgPSBwYXRoQXJyYXk7CisgICAgICAgIHR1YmUuX2Ny
ZWF0aW9uRGF0YVN0b3JhZ2UucGF0aDNEID0gcGF0aDNEOworICAgICAgICB0dWJlLl9jcmVhdGlv
bkRhdGFTdG9yYWdlLnRlc3NlbGxhdGlvbiA9IHRlc3NlbGxhdGlvbjsKKyAgICAgICAgdHViZS5f
Y3JlYXRpb25EYXRhU3RvcmFnZS5jYXAgPSBjYXA7CisgICAgICAgIHR1YmUuX2NyZWF0aW9uRGF0
YVN0b3JhZ2UuYXJjID0gb3B0aW9ucy5hcmM7CisgICAgICAgIHR1YmUuX2NyZWF0aW9uRGF0YVN0
b3JhZ2UucmFkaXVzID0gcmFkaXVzOworICAgICAgICByZXR1cm4gdHViZTsKKyAgICB9OworICAg
IHJldHVybiBUdWJlQnVpbGRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWVzaGVzL0NvbXByZXNzaW9uL2RyYWNvQ29tcHJlc3Npb24udHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NZXNoZXMv
Q29tcHJlc3Npb24vZHJhY29Db21wcmVzc2lvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
RHJhY29Db21wcmVzc2lvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJE
cmFjb0NvbXByZXNzaW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEcmFjb0NvbXByZXNzaW9uOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy90b29scyAq
LyAiLi9NaXNjL3Rvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfd29y
a2VyUG9vbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vTWlzYy93b3JrZXJQb29sICovICIuL01pc2Mvd29ya2VyUG9vbC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NZXNo
ZXMvbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEudHMiKTsKKwor
CisKK2Z1bmN0aW9uIGxvYWRTY3JpcHRBc3luYyh1cmwpIHsKKyAgICBpZiAodHlwZW9mIGltcG9y
dFNjcmlwdHMgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgaW1wb3J0U2NyaXB0cyh1cmwpOwor
ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgfQorICAgIGVsc2UgeworICAg
ICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeworICAg
ICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMi
XS5Mb2FkU2NyaXB0KHVybCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJlc29sdmUo
KTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChtZXNzYWdlKSB7CisgICAgICAgICAgICAgICAg
cmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfQorfQorZnVuY3Rpb24gbG9hZEZpbGVBc3luYyh1cmwpIHsKKyAgICByZXR1cm4gbmV3
IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICBfTWlzY190b29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLkxvYWRGaWxlKHVybCwgZnVu
Y3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7CisgICAgICAgIH0sIHVu
ZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlLCBmdW5jdGlvbiAocmVxdWVzdCwgZXhjZXB0aW9uKSB7
CisgICAgICAgICAgICByZWplY3QoZXhjZXB0aW9uKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9
CitmdW5jdGlvbiBjcmVhdGVEZWNvZGVyQXN5bmMod2FzbVVybCwgd2FzbUJpbmFyeSwgZmFsbGJh
Y2tVcmwpIHsKKyAgICB2YXIgZGVjb2RlclVybCA9ICh3YXNtQmluYXJ5ICYmIHdhc21VcmwpIHx8
IGZhbGxiYWNrVXJsOworICAgIGlmIChkZWNvZGVyVXJsKSB7CisgICAgICAgIHJldHVybiBsb2Fk
U2NyaXB0QXN5bmMoZGVjb2RlclVybCkudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsKKyAgICAgICAgICAgICAgICBE
cmFjb0RlY29kZXJNb2R1bGUoeyB3YXNtQmluYXJ5OiB3YXNtQmluYXJ5IH0pLnRoZW4oZnVuY3Rp
b24gKG1vZHVsZSkgeworICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgbW9kdWxlOiBtb2R1
bGUgfSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfQorICAgIHJldHVybiB1bmRlZmluZWQ7Cit9CitmdW5jdGlvbiBkZWNvZGVNZXNoKGRl
Y29kZXJNb2R1bGUsIGRhdGFWaWV3LCBhdHRyaWJ1dGVzLCBvbkluZGljZXNEYXRhLCBvbkF0dHJp
YnV0ZURhdGEpIHsKKyAgICB2YXIgYnVmZmVyID0gbmV3IGRlY29kZXJNb2R1bGUuRGVjb2RlckJ1
ZmZlcigpOworICAgIGJ1ZmZlci5Jbml0KGRhdGFWaWV3LCBkYXRhVmlldy5ieXRlTGVuZ3RoKTsK
KyAgICB2YXIgZGVjb2RlciA9IG5ldyBkZWNvZGVyTW9kdWxlLkRlY29kZXIoKTsKKyAgICB2YXIg
Z2VvbWV0cnk7CisgICAgdmFyIHN0YXR1czsKKyAgICB0cnkgeworICAgICAgICB2YXIgdHlwZSA9
IGRlY29kZXIuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZShidWZmZXIpOworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgZGVjb2Rlck1vZHVsZS5UUklBTkdVTEFSX01FU0g6
CisgICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBuZXcgZGVjb2Rlck1vZHVsZS5NZXNoKCk7Cisg
ICAgICAgICAgICAgICAgc3RhdHVzID0gZGVjb2Rlci5EZWNvZGVCdWZmZXJUb01lc2goYnVmZmVy
LCBnZW9tZXRyeSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGRl
Y29kZXJNb2R1bGUuUE9JTlRfQ0xPVUQ6CisgICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBuZXcg
ZGVjb2Rlck1vZHVsZS5Qb2ludENsb3VkKCk7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gZGVj
b2Rlci5EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWQoYnVmZmVyLCBnZW9tZXRyeSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiSW52YWxpZCBnZW9tZXRyeSB0eXBlICIgKyB0eXBlKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXN0YXR1cy5vaygpIHx8ICFnZW9tZXRyeS5wdHIpIHsKKyAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcihzdGF0dXMuZXJyb3JfbXNnKCkpOworICAgICAgICB9CisgICAg
ICAgIHZhciBudW1Qb2ludHNfMSA9IGdlb21ldHJ5Lm51bV9wb2ludHMoKTsKKyAgICAgICAgaWYg
KHR5cGUgPT09IGRlY29kZXJNb2R1bGUuVFJJQU5HVUxBUl9NRVNIKSB7CisgICAgICAgICAgICB2
YXIgbnVtRmFjZXMgPSBnZW9tZXRyeS5udW1fZmFjZXMoKTsKKyAgICAgICAgICAgIHZhciBmYWNl
SW5kaWNlcyA9IG5ldyBkZWNvZGVyTW9kdWxlLkRyYWNvSW50MzJBcnJheSgpOworICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShu
dW1GYWNlcyAqIDMpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRmFj
ZXM7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLkdldEZhY2VGcm9tTWVzaChn
ZW9tZXRyeSwgaSwgZmFjZUluZGljZXMpOworICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0
ID0gaSAqIDM7CisgICAgICAgICAgICAgICAgICAgIGluZGljZXNbb2Zmc2V0ICsgMF0gPSBmYWNl
SW5kaWNlcy5HZXRWYWx1ZSgwKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tvZmZzZXQg
KyAxXSA9IGZhY2VJbmRpY2VzLkdldFZhbHVlKDEpOworICAgICAgICAgICAgICAgICAgICBpbmRp
Y2VzW29mZnNldCArIDJdID0gZmFjZUluZGljZXMuR2V0VmFsdWUoMik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIG9uSW5kaWNlc0RhdGEoaW5kaWNlcyk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBkZWNvZGVyTW9kdWxl
LmRlc3Ryb3koZmFjZUluZGljZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHZhciBwcm9jZXNzQXR0cmlidXRlID0gZnVuY3Rpb24gKGtpbmQsIGF0dHJpYnV0ZSkgeworICAg
ICAgICAgICAgdmFyIGRyYWNvRGF0YSA9IG5ldyBkZWNvZGVyTW9kdWxlLkRyYWNvRmxvYXQzMkFy
cmF5KCk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRlY29kZXIuR2V0QXR0
cmlidXRlRmxvYXRGb3JBbGxQb2ludHMoZ2VvbWV0cnksIGF0dHJpYnV0ZSwgZHJhY29EYXRhKTsK
KyAgICAgICAgICAgICAgICB2YXIgYmFieWxvbkRhdGEgPSBuZXcgRmxvYXQzMkFycmF5KG51bVBv
aW50c18xICogYXR0cmlidXRlLm51bV9jb21wb25lbnRzKCkpOworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYmFieWxvbkRhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgYmFieWxvbkRhdGFbaV0gPSBkcmFjb0RhdGEuR2V0VmFsdWUoaSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9uQXR0cmlidXRlRGF0YShraW5kLCBiYWJ5bG9u
RGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbGx5IHsKKyAgICAgICAgICAg
ICAgICBkZWNvZGVyTW9kdWxlLmRlc3Ryb3koZHJhY29EYXRhKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIGZvciAodmFy
IGtpbmQgaW4gYXR0cmlidXRlcykgeworICAgICAgICAgICAgICAgIHZhciBpZCA9IGF0dHJpYnV0
ZXNba2luZF07CisgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGRlY29kZXIuR2V0QXR0
cmlidXRlQnlVbmlxdWVJZChnZW9tZXRyeSwgaWQpOworICAgICAgICAgICAgICAgIHByb2Nlc3NB
dHRyaWJ1dGUoa2luZCwgYXR0cmlidXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBuYXRpdmVBdHRyaWJ1dGVUeXBlcyA9IHsKKyAg
ICAgICAgICAgICAgICAicG9zaXRpb24iOiAiUE9TSVRJT04iLAorICAgICAgICAgICAgICAgICJu
b3JtYWwiOiAiTk9STUFMIiwKKyAgICAgICAgICAgICAgICAiY29sb3IiOiAiQ09MT1IiLAorICAg
ICAgICAgICAgICAgICJ1diI6ICJURVhfQ09PUkQiCisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgZm9yICh2YXIga2luZCBpbiBuYXRpdmVBdHRyaWJ1dGVUeXBlcykgeworICAgICAgICAgICAg
ICAgIHZhciBpZCA9IGRlY29kZXIuR2V0QXR0cmlidXRlSWQoZ2VvbWV0cnksIGRlY29kZXJNb2R1
bGVbbmF0aXZlQXR0cmlidXRlVHlwZXNba2luZF1dKTsKKyAgICAgICAgICAgICAgICBpZiAoaWQg
IT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSBkZWNvZGVyLkdl
dEF0dHJpYnV0ZShnZW9tZXRyeSwgaWQpOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0
cmlidXRlKGtpbmQsIGF0dHJpYnV0ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgICBpZiAoZ2VvbWV0cnkp
IHsKKyAgICAgICAgICAgIGRlY29kZXJNb2R1bGUuZGVzdHJveShnZW9tZXRyeSk7CisgICAgICAg
IH0KKyAgICAgICAgZGVjb2Rlck1vZHVsZS5kZXN0cm95KGRlY29kZXIpOworICAgICAgICBkZWNv
ZGVyTW9kdWxlLmRlc3Ryb3koYnVmZmVyKTsKKyAgICB9Cit9CisvKioKKyAqIFRoZSB3b3JrZXIg
ZnVuY3Rpb24gdGhhdCBnZXRzIGNvbnZlcnRlZCB0byBhIGJsb2IgdXJsIHRvIHBhc3MgaW50byBh
IHdvcmtlci4KKyAqLworZnVuY3Rpb24gd29ya2VyKCkgeworICAgIHZhciBkZWNvZGVyUHJvbWlz
ZTsKKyAgICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgdmFyIGRhdGEg
PSBldmVudC5kYXRhOworICAgICAgICBzd2l0Y2ggKGRhdGEuaWQpIHsKKyAgICAgICAgICAgIGNh
c2UgImluaXQiOiB7CisgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBkYXRhLmRlY29kZXI7
CisgICAgICAgICAgICAgICAgZGVjb2RlclByb21pc2UgPSBjcmVhdGVEZWNvZGVyQXN5bmMoZGVj
b2Rlci53YXNtVXJsLCBkZWNvZGVyLndhc21CaW5hcnksIGRlY29kZXIuZmFsbGJhY2tVcmwpOwor
ICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJkb25lIik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlICJkZWNvZGVNZXNoIjogeworICAg
ICAgICAgICAgICAgIGlmICghZGVjb2RlclByb21pc2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJEcmFjbyBkZWNvZGVyIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlIik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlY29kZXJQcm9taXNlLnRoZW4o
ZnVuY3Rpb24gKGRlY29kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlTWVzaChkZWNv
ZGVyLm1vZHVsZSwgZGF0YS5kYXRhVmlldywgZGF0YS5hdHRyaWJ1dGVzLCBmdW5jdGlvbiAoaW5k
aWNlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoeyBpZDogImluZGlj
ZXMiLCB2YWx1ZTogaW5kaWNlcyB9LCBbaW5kaWNlcy5idWZmZXJdKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSwgZnVuY3Rpb24gKGtpbmQsIGRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBvc3RNZXNzYWdlKHsgaWQ6IGtpbmQsIHZhbHVlOiBkYXRhIH0sIFtkYXRhLmJ1ZmZlcl0pOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uo
ImRvbmUiKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9CitmdW5jdGlvbiBnZXRBYnNvbHV0ZVVy
bCh1cmwpIHsKKyAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAib2JqZWN0IiB8fCB0eXBlb2Yg
dXJsICE9PSAic3RyaW5nIikgeworICAgICAgICByZXR1cm4gdXJsOworICAgIH0KKyAgICByZXR1
cm4gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5HZXRB
YnNvbHV0ZVVybCh1cmwpOworfQorLyoqCisgKiBEcmFjbyBjb21wcmVzc2lvbiAoaHR0cHM6Ly9n
b29nbGUuZ2l0aHViLmlvL2RyYWNvLykKKyAqCisgKiBUaGlzIGNsYXNzIHdyYXBzIHRoZSBEcmFj
byBtb2R1bGUuCisgKgorICogKipFbmNvZGVyKioKKyAqCisgKiBUaGUgZW5jb2RlciBpcyBub3Qg
Y3VycmVudGx5IGltcGxlbWVudGVkLgorICoKKyAqICoqRGVjb2RlcioqCisgKgorICogQnkgZGVm
YXVsdCwgdGhlIGNvbmZpZ3VyYXRpb24gcG9pbnRzIHRvIGEgY29weSBvZiB0aGUgRHJhY28gZGVj
b2RlciBmaWxlcyBmb3IgZ2xURiBmcm9tIHRoZSBiYWJ5bG9uLmpzIHByZXZpZXcgY2RuIGh0dHBz
Oi8vcHJldmlldy5iYWJ5bG9uanMuY29tL2RyYWNvX3dhc21fd3JhcHBlcl9nbHRmLmpzLgorICoK
KyAqIFRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiwgdXNlIHRoZSBmb2xsb3dpbmcgY29kZToK
KyAqIGBgYGphdmFzY3JpcHQKKyAqICAgICBEcmFjb0NvbXByZXNzaW9uLkNvbmZpZ3VyYXRpb24g
PSB7CisgKiAgICAgICAgIGRlY29kZXI6IHsKKyAqICAgICAgICAgICAgIHdhc21Vcmw6ICI8dXJs
IHRvIHRoZSBXZWJBc3NlbWJseSBsaWJyYXJ5PiIsCisgKiAgICAgICAgICAgICB3YXNtQmluYXJ5
VXJsOiAiPHVybCB0byB0aGUgV2ViQXNzZW1ibHkgYmluYXJ5PiIsCisgKiAgICAgICAgICAgICBm
YWxsYmFja1VybDogIjx1cmwgdG8gdGhlIGZhbGxiYWNrIEphdmFTY3JpcHQgbGlicmFyeT4iLAor
ICogICAgICAgICB9CisgKiAgICAgfTsKKyAqIGBgYAorICoKKyAqIERyYWNvIGhhcyB0d28gdmVy
c2lvbnMsIG9uZSBmb3IgV2ViQXNzZW1ibHkgYW5kIG9uZSBmb3IgSmF2YVNjcmlwdC4gVGhlIGRl
Y29kZXIgY29uZmlndXJhdGlvbiBjYW4gYmUgc2V0IHRvIG9ubHkgc3VwcG9ydCBXZWJzc2VtYmx5
IG9yIG9ubHkgc3VwcG9ydCB0aGUgSmF2YVNjcmlwdCB2ZXJzaW9uLgorICogRGVjb2Rpbmcgd2ls
bCBhdXRvbWF0aWNhbGx5IGZhbGxiYWNrIHRvIHRoZSBKYXZhU2NyaXB0IHZlcnNpb24gaWYgV2Vi
QXNzZW1ibHkgdmVyc2lvbiBpcyBub3QgY29uZmlndXJlZCBvciBpZiBXZWJBc3NlbWJseSBpcyBu
b3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLgorICogVXNlIGBEcmFjb0NvbXByZXNzaW9uLkRl
Y29kZXJBdmFpbGFibGVgIHRvIGRldGVybWluZSBpZiB0aGUgZGVjb2RlciBjb25maWd1cmF0aW9u
IGlzIGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQgY29udGV4dC4KKyAqCisgKiBUbyBkZWNvZGUg
RHJhY28gY29tcHJlc3NlZCBkYXRhLCBnZXQgdGhlIGRlZmF1bHQgRHJhY29Db21wcmVzc2lvbiBv
YmplY3QgYW5kIGNhbGwgZGVjb2RlTWVzaEFzeW5jOgorICogYGBgamF2YXNjcmlwdAorICogICAg
IHZhciB2ZXJ0ZXhEYXRhID0gYXdhaXQgRHJhY29Db21wcmVzc2lvbi5EZWZhdWx0LmRlY29kZU1l
c2hBc3luYyhkYXRhKTsKKyAqIGBgYAorICoKKyAqIEBzZWUgaHR0cHM6Ly93d3cuYmFieWxvbmpz
LXBsYXlncm91bmQuY29tLyNOM0VLNEIjMAorICovCit2YXIgRHJhY29Db21wcmVzc2lvbiA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3Rvcgor
ICAgICAqIEBwYXJhbSBudW1Xb3JrZXJzIFRoZSBudW1iZXIgb2Ygd29ya2VycyBmb3IgYXN5bmMg
b3BlcmF0aW9ucy4gU3BlY2lmeSBgMGAgdG8gZGlzYWJsZSB3ZWIgd29ya2VycyBhbmQgcnVuIHN5
bmNocm9ub3VzbHkgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBEcmFjb0NvbXByZXNzaW9uKG51bVdvcmtlcnMpIHsKKyAgICAgICAgaWYgKG51bVdvcmtlcnMg
PT09IHZvaWQgMCkgeyBudW1Xb3JrZXJzID0gRHJhY29Db21wcmVzc2lvbi5EZWZhdWx0TnVtV29y
a2VyczsgfQorICAgICAgICB2YXIgZGVjb2RlciA9IERyYWNvQ29tcHJlc3Npb24uQ29uZmlndXJh
dGlvbi5kZWNvZGVyOworICAgICAgICB2YXIgZGVjb2Rlcldhc21CaW5hcnlQcm9taXNlID0gKGRl
Y29kZXIud2FzbVVybCAmJiBkZWNvZGVyLndhc21CaW5hcnlVcmwgJiYgdHlwZW9mIFdlYkFzc2Vt
Ymx5ID09PSAib2JqZWN0IikKKyAgICAgICAgICAgID8gbG9hZEZpbGVBc3luYyhnZXRBYnNvbHV0
ZVVybChkZWNvZGVyLndhc21CaW5hcnlVcmwpKQorICAgICAgICAgICAgOiBQcm9taXNlLnJlc29s
dmUodW5kZWZpbmVkKTsKKyAgICAgICAgaWYgKG51bVdvcmtlcnMgJiYgdHlwZW9mIFdvcmtlciA9
PT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgdGhpcy5fd29ya2VyUG9vbFByb21pc2UgPSBk
ZWNvZGVyV2FzbUJpbmFyeVByb21pc2UudGhlbihmdW5jdGlvbiAoZGVjb2Rlcldhc21CaW5hcnkp
IHsKKyAgICAgICAgICAgICAgICB2YXIgd29ya2VyQ29udGVudCA9ICIiICsgbG9hZFNjcmlwdEFz
eW5jICsgY3JlYXRlRGVjb2RlckFzeW5jICsgZGVjb2RlTWVzaCArICIoIiArIHdvcmtlciArICIp
KCkiOworICAgICAgICAgICAgICAgIHZhciB3b3JrZXJCbG9iVXJsID0gVVJMLmNyZWF0ZU9iamVj
dFVSTChuZXcgQmxvYihbd29ya2VyQ29udGVudF0sIHsgdHlwZTogImFwcGxpY2F0aW9uL2phdmFz
Y3JpcHQiIH0pKTsKKyAgICAgICAgICAgICAgICB2YXIgd29ya2VyUHJvbWlzZXMgPSBuZXcgQXJy
YXkobnVtV29ya2Vycyk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jr
ZXJQcm9taXNlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB3b3JrZXJQcm9t
aXNlc1tpXSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlckJsb2JVcmwp
OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3Ip
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5l
cigiZXJyb3IiLCBvbkVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb25NZXNzYWdlID0gZnVuY3Rpb24gKG1lc3Nh
Z2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kYXRhID09PSAi
ZG9uZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLnJlbW92ZUV2
ZW50TGlzdGVuZXIoImVycm9yIiwgb25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgb25NZXNzYWdlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh3b3JrZXIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgICAgICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBvbkVy
cm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCJt
ZXNzYWdlIiwgb25NZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0
TWVzc2FnZSh7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICJpbml0IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyOiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdhc21Vcmw6IGdldEFic29sdXRlVXJsKGRlY29kZXIud2FzbVVybCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc21CaW5hcnk6IGRlY29kZXJXYXNtQmluYXJ5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFja1VybDogZ2V0QWJzb2x1
dGVVcmwoZGVjb2Rlci5mYWxsYmFja1VybCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh3b3Jr
ZXJQcm9taXNlcykudGhlbihmdW5jdGlvbiAod29ya2VycykgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IF9NaXNjX3dvcmtlclBvb2xfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siV29ya2VyUG9vbCJdKHdvcmtlcnMpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9kZWNv
ZGVyTW9kdWxlUHJvbWlzZSA9IGRlY29kZXJXYXNtQmluYXJ5UHJvbWlzZS50aGVuKGZ1bmN0aW9u
IChkZWNvZGVyV2FzbUJpbmFyeSkgeworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVEZWNv
ZGVyQXN5bmMoZGVjb2Rlci53YXNtVXJsLCBkZWNvZGVyV2FzbUJpbmFyeSwgZGVjb2Rlci5mYWxs
YmFja1VybCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoRHJhY29Db21wcmVzc2lvbiwgIkRlY29kZXJBdmFpbGFibGUiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGRlY29kZXIgY29uZmln
dXJhdGlvbiBpcyBhdmFpbGFibGUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHZhciBkZWNvZGVyID0gRHJhY29Db21wcmVzc2lvbi5Db25maWd1
cmF0aW9uLmRlY29kZXI7CisgICAgICAgICAgICByZXR1cm4gISEoKGRlY29kZXIud2FzbVVybCAm
JiBkZWNvZGVyLndhc21CaW5hcnlVcmwgJiYgdHlwZW9mIFdlYkFzc2VtYmx5ID09PSAib2JqZWN0
IikgfHwgZGVjb2Rlci5mYWxsYmFja1VybCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIERyYWNv
Q29tcHJlc3Npb24uR2V0RGVmYXVsdE51bVdvcmtlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAib2JqZWN0IiB8fCAhbmF2aWdhdG9yLmhhcmR3YXJl
Q29uY3VycmVuY3kpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAg
IC8vIFVzZSA1MCUgb2YgdGhlIGF2YWlsYWJsZSBsb2dpY2FsIHByb2Nlc3NvcnMgYnV0IGNhcHBl
ZCBhdCA0LgorICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5mbG9vcihuYXZpZ2F0b3IuaGFy
ZHdhcmVDb25jdXJyZW5jeSAqIDAuNSksIDQpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KERyYWNvQ29tcHJlc3Npb24sICJEZWZhdWx0IiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogRGVmYXVsdCBpbnN0YW5jZSBmb3IgdGhlIGRyYWNvIGNvbXByZXNzaW9uIG9iamVjdC4K
KyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYg
KCFEcmFjb0NvbXByZXNzaW9uLl9EZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgRHJhY29Db21w
cmVzc2lvbi5fRGVmYXVsdCA9IG5ldyBEcmFjb0NvbXByZXNzaW9uKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gRHJhY29Db21wcmVzc2lvbi5fRGVmYXVsdDsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgLyoqCisgICAgICogU3RvcCBhbGwgYXN5bmMgb3BlcmF0aW9ucyBhbmQg
cmVsZWFzZSByZXNvdXJjZXMuCisgICAgICovCisgICAgRHJhY29Db21wcmVzc2lvbi5wcm90b3R5
cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3dvcmtlclBvb2xQ
cm9taXNlKSB7CisgICAgICAgICAgICB0aGlzLl93b3JrZXJQb29sUHJvbWlzZS50aGVuKGZ1bmN0
aW9uICh3b3JrZXJQb29sKSB7CisgICAgICAgICAgICAgICAgd29ya2VyUG9vbC5kaXNwb3NlKCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgdGhpcy5fd29ya2Vy
UG9vbFByb21pc2U7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9kZWNvZGVyTW9kdWxlUHJvbWlzZTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMg
d2hlbiByZWFkeS4gQ2FsbCB0aGlzIG1hbnVhbGx5IHRvIGVuc3VyZSBkcmFjbyBjb21wcmVzc2lv
biBpcyByZWFkeSBiZWZvcmUgdXNlLgorICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJl
c29sdmVzIHdoZW4gcmVhZHkKKyAgICAgKi8KKyAgICBEcmFjb0NvbXByZXNzaW9uLnByb3RvdHlw
ZS53aGVuUmVhZHlBc3luYyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3dvcmtl
clBvb2xQcm9taXNlKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fd29ya2VyUG9vbFByb21p
c2UudGhlbihmdW5jdGlvbiAoKSB7IH0pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9k
ZWNvZGVyTW9kdWxlUHJvbWlzZSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlY29kZXJN
b2R1bGVQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyB9KTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgICogRGVjb2Rl
IERyYWNvIGNvbXByZXNzZWQgbWVzaCBkYXRhIHRvIHZlcnRleCBkYXRhLgorICAgICAgKiBAcGFy
YW0gZGF0YSBUaGUgQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3IGZvciB0aGUgRHJhY28g
Y29tcHJlc3Npb24gZGF0YQorICAgICAgKiBAcGFyYW0gYXR0cmlidXRlcyBBIG1hcCBvZiBhdHRy
aWJ1dGVzIGZyb20gdmVydGV4IGJ1ZmZlciBraW5kcyB0byBEcmFjbyB1bmlxdWUgaWRzCisgICAg
ICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgdmVy
dGV4IGRhdGEKKyAgICAgICovCisgICAgRHJhY29Db21wcmVzc2lvbi5wcm90b3R5cGUuZGVjb2Rl
TWVzaEFzeW5jID0gZnVuY3Rpb24gKGRhdGEsIGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgdmFyIGRh
dGFWaWV3ID0gZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoZGF0
YSkgOiBkYXRhOworICAgICAgICBpZiAodGhpcy5fd29ya2VyUG9vbFByb21pc2UpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl93b3JrZXJQb29sUHJvbWlzZS50aGVuKGZ1bmN0aW9uICh3b3Jr
ZXJQb29sKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChy
ZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyUG9vbC5wdXNoKGZ1
bmN0aW9uICh3b3JrZXIsIG9uQ29tcGxldGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB2ZXJ0ZXhEYXRhID0gbmV3IF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlZlcnRleERhdGEiXSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG9uRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBvbkVycm9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2Fn
ZSIsIG9uTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9y
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uTWVzc2FnZSA9
IGZ1bmN0aW9uIChtZXNzYWdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1l
c3NhZ2UuZGF0YSA9PT0gImRvbmUiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsIG9uRXJyb3IpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2Fn
ZSIsIG9uTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUo
dmVydGV4RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobWVzc2FnZS5kYXRhLmlkID09PSAiaW5kaWNlcyIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4RGF0YS5pbmRpY2VzID0gbWVzc2FnZS5kYXRh
LnZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4
RGF0YS5zZXQobWVzc2FnZS5kYXRhLnZhbHVlLCBtZXNzYWdlLmRhdGEuaWQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgICAgICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBvbkVycm9y
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCJtZXNz
YWdlIiwgb25NZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhVmlld0Nv
cHkgPSBuZXcgVWludDhBcnJheShkYXRhVmlldy5ieXRlTGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFWaWV3Q29weS5zZXQobmV3IFVpbnQ4QXJyYXkoZGF0YVZpZXcuYnVmZmVy
LCBkYXRhVmlldy5ieXRlT2Zmc2V0LCBkYXRhVmlldy5ieXRlTGVuZ3RoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZDogImRlY29kZU1lc2giLCBkYXRh
VmlldzogZGF0YVZpZXdDb3B5LCBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzIH0sIFtkYXRhVmlld0Nv
cHkuYnVmZmVyXSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2RlY29kZXJN
b2R1bGVQcm9taXNlKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVjb2Rlck1vZHVsZVBy
b21pc2UudGhlbihmdW5jdGlvbiAoZGVjb2RlcikgeworICAgICAgICAgICAgICAgIHZhciB2ZXJ0
ZXhEYXRhID0gbmV3IF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlcnRleERhdGEiXSgpOworICAgICAgICAgICAgICAgIGRlY29kZU1lc2goZGVj
b2Rlci5tb2R1bGUsIGRhdGFWaWV3LCBhdHRyaWJ1dGVzLCBmdW5jdGlvbiAoaW5kaWNlcykgewor
ICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhEYXRhLmluZGljZXMgPSBpbmRpY2VzOworICAgICAg
ICAgICAgICAgIH0sIGZ1bmN0aW9uIChraW5kLCBkYXRhKSB7CisgICAgICAgICAgICAgICAgICAg
IHZlcnRleERhdGEuc2V0KGRhdGEsIGtpbmQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIHJldHVybiB2ZXJ0ZXhEYXRhOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEcmFjbyBkZWNvZGVyIG1vZHVsZSBpcyBub3QgYXZh
aWxhYmxlIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGUgY29uZmlndXJhdGlvbi4gRGVm
YXVsdHMgdG8gdGhlIGZvbGxvd2luZyB1cmxzOgorICAgICAqIC0gd2FzbVVybDogImh0dHBzOi8v
cHJldmlldy5iYWJ5bG9uanMuY29tL2RyYWNvX3dhc21fd3JhcHBlcl9nbHRmLmpzIgorICAgICAq
IC0gd2FzbUJpbmFyeVVybDogImh0dHBzOi8vcHJldmlldy5iYWJ5bG9uanMuY29tL2RyYWNvX2Rl
Y29kZXJfZ2x0Zi53YXNtIgorICAgICAqIC0gZmFsbGJhY2tVcmw6ICJodHRwczovL3ByZXZpZXcu
YmFieWxvbmpzLmNvbS9kcmFjb19kZWNvZGVyX2dsdGYuanMiCisgICAgICovCisgICAgRHJhY29D
b21wcmVzc2lvbi5Db25maWd1cmF0aW9uID0geworICAgICAgICBkZWNvZGVyOiB7CisgICAgICAg
ICAgICB3YXNtVXJsOiAiaHR0cHM6Ly9wcmV2aWV3LmJhYnlsb25qcy5jb20vZHJhY29fd2FzbV93
cmFwcGVyX2dsdGYuanMiLAorICAgICAgICAgICAgd2FzbUJpbmFyeVVybDogImh0dHBzOi8vcHJl
dmlldy5iYWJ5bG9uanMuY29tL2RyYWNvX2RlY29kZXJfZ2x0Zi53YXNtIiwKKyAgICAgICAgICAg
IGZhbGxiYWNrVXJsOiAiaHR0cHM6Ly9wcmV2aWV3LmJhYnlsb25qcy5jb20vZHJhY29fZGVjb2Rl
cl9nbHRmLmpzIgorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IG51
bWJlciBvZiB3b3JrZXJzIHRvIGNyZWF0ZSB3aGVuIGNyZWF0aW5nIHRoZSBkcmFjbyBjb21wcmVz
c2lvbiBvYmplY3QuCisgICAgICovCisgICAgRHJhY29Db21wcmVzc2lvbi5EZWZhdWx0TnVtV29y
a2VycyA9IERyYWNvQ29tcHJlc3Npb24uR2V0RGVmYXVsdE51bVdvcmtlcnMoKTsKKyAgICBEcmFj
b0NvbXByZXNzaW9uLl9EZWZhdWx0ID0gbnVsbDsKKyAgICByZXR1cm4gRHJhY29Db21wcmVzc2lv
bjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL0NvbXByZXNzaW9u
L2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL01lc2hlcy9Db21wcmVzc2lvbi9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IERyYWNv
Q29tcHJlc3Npb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9kcmFjb0NvbXByZXNzaW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2RyYWNvQ29tcHJlc3Npb24gKi8gIi4vTWVzaGVzL0NvbXByZXNz
aW9uL2RyYWNvQ29tcHJlc3Npb24udHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRHJhY29Db21wcmVz
c2lvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RyYWNvQ29tcHJlc3Npb25fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRHJhY29Db21wcmVzc2lvbiJdOyB9KTsKKworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL01lc2hlcy9XZWJHTC93ZWJHTERhdGFCdWZmZXIudHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hl
cy9XZWJHTC93ZWJHTERhdGFCdWZmZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogV2ViR0xEYXRhQnVm
ZmVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkdMRGF0YUJ1ZmZl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViR0xEYXRhQnVmZmVyOyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5l
czYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGF0YUJ1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vZGF0YUJ1ZmZl
ciAqLyAiLi9NZXNoZXMvZGF0YUJ1ZmZlci50cyIpOworCisKKy8qKiBAaGlkZGVuICovCit2YXIg
V2ViR0xEYXRhQnVmZmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFdlYkdMRGF0
YUJ1ZmZlciwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBXZWJHTERhdGFCdWZmZXIocmVzb3VyY2Up
IHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKKyAgICAg
ICAgX3RoaXMuX2J1ZmZlciA9IHJlc291cmNlOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAg
fQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJHTERhdGFCdWZmZXIucHJvdG90eXBlLCAi
dW5kZXJseWluZ1Jlc291cmNlIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIHJldHVy
biBXZWJHTERhdGFCdWZmZXI7Cit9KF9kYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkRhdGFCdWZmZXIiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hl
cy9XZWJHUFUvd2ViZ3B1RGF0YUJ1ZmZlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NZXNoZXMvV2ViR1BVL3dlYmdwdURh
dGFCdWZmZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBXZWJHUFVEYXRhQnVmZmVyICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkdQVURhdGFCdWZmZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFdlYkdQVURhdGFCdWZmZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9kYXRhQnVmZmVyICovICIuL01l
c2hlcy9kYXRhQnVmZmVyLnRzIik7CisKKworLyoqIEBoaWRkZW4gKi8KK3ZhciBXZWJHUFVEYXRh
QnVmZmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFdlYkdQVURhdGFCdWZmZXIs
IF9zdXBlcik7CisgICAgZnVuY3Rpb24gV2ViR1BVRGF0YUJ1ZmZlcihyZXNvdXJjZSkgeworICAg
ICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOworICAgICAgICBfdGhp
cy5fYnVmZmVyID0gcmVzb3VyY2U7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYkdQVURhdGFCdWZmZXIucHJvdG90eXBlLCAidW5kZXJs
eWluZ1Jlc291cmNlIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9idWZmZXI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIHJldHVybiBXZWJH
UFVEYXRhQnVmZmVyOworfShfZGF0YUJ1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJEYXRhQnVmZmVyIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvYWJz
dHJhY3RNZXNoLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9NZXNoZXMvYWJzdHJhY3RNZXNoLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFic3RyYWN0TWVzaCAqLwor
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBYnN0cmFjdE1lc2giLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEFic3RyYWN0TWVzaDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90
b29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01p
c2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01h
dGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNf
ZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01l
c2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWVzaGVzL21lc2gudmVydGV4RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0
ZXhEYXRhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc190cmFuc2Zvcm1O
b2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NZXNoZXMvdHJhbnNmb3JtTm9kZSAqLyAiLi9NZXNoZXMvdHJhbnNmb3JtTm9kZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Db2xsaXNpb25zX3BpY2tpbmdJbmZvX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9Db2xs
aXNpb25zL3BpY2tpbmdJbmZvICovICIuL0NvbGxpc2lvbnMvcGlja2luZ0luZm8udHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0N1bGxpbmcvYm91
bmRpbmdJbmZvICovICIuL0N1bGxpbmcvYm91bmRpbmdJbmZvLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4v
RW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJp
YWxzX3VuaWZvcm1CdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvdW5pZm9ybUJ1ZmZlciAqLyAiLi9NYXRlcmlh
bHMvdW5pZm9ybUJ1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Db2xsaXNp
b25zX21lc2hDb2xsaXNpb25EYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ29sbGlzaW9ucy9tZXNoQ29sbGlzaW9uRGF0YSAqLyAi
Li9Db2xsaXNpb25zL21lc2hDb2xsaXNpb25EYXRhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2RldlRvb2xzICovICIuL01pc2MvZGV2VG9vbHMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9mdW5jdGlvbnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRocy9tYXRoLmZ1bmN0aW9ucyAqLyAiLi9NYXRocy9tYXRoLmZ1bmN0aW9ucy50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xv
ciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb25zdGFudHMgKi8gIi4vTWF0aHMv
bWF0aC5jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0
aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0aHMvbWF0aC5heGlzICovICIuL01hdGhzL21hdGguYXhpcy50cyIpOworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworLyoqIEBoaWRkZW4gKi8KK3ZhciBfRmFj
ZXREYXRhU3RvcmFnZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlv
biBfRmFjZXREYXRhU3RvcmFnZSgpIHsKKyAgICAgICAgdGhpcy5mYWNldE5iID0gMDsgLy8gZmFj
ZXQgbnVtYmVyCisgICAgICAgIHRoaXMucGFydGl0aW9uaW5nU3ViZGl2aXNpb25zID0gMTA7IC8v
IG51bWJlciBvZiBzdWJkaXZpc2lvbnMgcGVyIGF4aXMgaW4gdGhlIHBhcnRpb25pbmcgc3BhY2UK
KyAgICAgICAgdGhpcy5wYXJ0aXRpb25pbmdCQm94UmF0aW8gPSAxLjAxOyAvLyB0aGUgcGFydGlv
bmluZyBhcnJheSBzcGFjZSBpcyBieSBkZWZhdWx0IDElIGJpZ2dlciB0aGFuIHRoZSBib3VuZGlu
ZyBib3gKKyAgICAgICAgdGhpcy5mYWNldERhdGFFbmFibGVkID0gZmFsc2U7IC8vIGlzIHRoZSBm
YWNldCBkYXRhIGZlYXR1cmUgZW5hYmxlZCBvbiB0aGlzIG1lc2ggPworICAgICAgICB0aGlzLmZh
Y2V0UGFyYW1ldGVycyA9IHt9OyAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgcGFy
YW1ldGVycyB0byBhdm9pZCBtZW1vcnkgcmUtYWxsb2NhdGlvbgorICAgICAgICB0aGlzLmJiU2l6
ZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0
b3IzIl0uWmVybygpOyAvLyBiYm94IHNpemUgYXBwcm94aW1hdGVkIGZvciBmYWNldCBkYXRhCisg
ICAgICAgIHRoaXMuc3ViRGl2ID0geworICAgICAgICAgICAgbWF4OiAxLAorICAgICAgICAgICAg
WDogMSwKKyAgICAgICAgICAgIFk6IDEsCisgICAgICAgICAgICBaOiAxCisgICAgICAgIH07Cisg
ICAgICAgIHRoaXMuZmFjZXREZXB0aFNvcnQgPSBmYWxzZTsgLy8gaXMgdGhlIGZhY2V0IGRlcHRo
IHNvcnQgdG8gYmUgY29tcHV0ZWQKKyAgICAgICAgdGhpcy5mYWNldERlcHRoU29ydEVuYWJsZWQg
PSBmYWxzZTsgLy8gaXMgdGhlIGZhY2V0IGRlcHRoIHNvcnQgaW5pdGlhbGl6ZWQKKyAgICB9Cisg
ICAgcmV0dXJuIF9GYWNldERhdGFTdG9yYWdlOworfSgpKTsKKy8qKgorICogQGhpZGRlbgorICoq
LwordmFyIF9JbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIF9JbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvKCkg
eworICAgICAgICB0aGlzLl9oYXNWZXJ0ZXhBbHBoYSA9IGZhbHNlOworICAgICAgICB0aGlzLl91
c2VWZXJ0ZXhDb2xvcnMgPSB0cnVlOworICAgICAgICB0aGlzLl9udW1Cb25lSW5mbHVlbmNlcnMg
PSA0OworICAgICAgICB0aGlzLl9hcHBseUZvZyA9IHRydWU7CisgICAgICAgIHRoaXMuX3JlY2Vp
dmVTaGFkb3dzID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2ZhY2V0RGF0YSA9IG5ldyBfRmFjZXRE
YXRhU3RvcmFnZSgpOworICAgICAgICB0aGlzLl92aXNpYmlsaXR5ID0gMS4wOworICAgICAgICB0
aGlzLl9za2VsZXRvbiA9IG51bGw7CisgICAgICAgIHRoaXMuX2xheWVyTWFzayA9IDB4MEZGRkZG
RkY7CisgICAgICAgIHRoaXMuX2NvbXB1dGVCb25lc1VzaW5nU2hhZGVycyA9IHRydWU7CisgICAg
ICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7CisgICAgICAgIHRoaXMuX29ubHlGb3JJbnN0YW5j
ZXMgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faXNBY3RpdmVJbnRlcm1lZGlhdGUgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fb25seUZvckluc3RhbmNlc0ludGVybWVkaWF0ZSA9IGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gX0ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm87Cit9KCkpOworLyoq
CisgKiBDbGFzcyB1c2VkIHRvIHN0b3JlIGFsbCBjb21tb24gbWVzaCBwcm9wZXJ0aWVzCisgKi8K
K3ZhciBBYnN0cmFjdE1lc2ggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oQWJzdHJh
Y3RNZXNoLCBfc3VwZXIpOworICAgIC8vIENvbnN0cnVjdG9yCisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyBhIG5ldyBBYnN0cmFjdE1lc2gKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBu
YW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcg
c2NlbmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBBYnN0cmFjdE1lc2gobmFtZSwgc2NlbmUpIHsK
KyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAg
IHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lLCBmYWxzZSkgfHwgdGhp
czsKKyAgICAgICAgLy8gSW50ZXJuYWwgZGF0YQorICAgICAgICAvKiogQGhpZGRlbiAqLworICAg
ICAgICBfdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mbyA9IG5ldyBfSW50ZXJuYWxB
YnN0cmFjdE1lc2hEYXRhSW5mbygpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGN1bGxp
bmcgc3RyYXRlZ3kgdG8gdXNlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIG1lc2ggbXVzdCBiZSByZW5k
ZXJlZCBvciBub3QuCisgICAgICAgICAqIFRoaXMgdmFsdWUgY2FuIGJlIGNoYW5nZWQgYXQgYW55
IHRpbWUgYW5kIHdpbGwgYmUgdXNlZCBvbiB0aGUgbmV4dCByZW5kZXIgbWVzaCBzZWxlY3Rpb24u
CisgICAgICAgICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlIDoKKyAgICAgICAgICogLSBBYnN0
cmFjdE1lc2guQ1VMTElOR1NUUkFURUdZX1NUQU5EQVJECisgICAgICAgICAqIC0gQWJzdHJhY3RN
ZXNoLkNVTExJTkdTVFJBVEVHWV9CT1VORElOR1NQSEVSRV9PTkxZCisgICAgICAgICAqIC0gQWJz
dHJhY3RNZXNoLkNVTExJTkdTVFJBVEVHWV9PUFRJTUlTVElDX0lOQ0xVU0lPTgorICAgICAgICAg
KiAtIEFic3RyYWN0TWVzaC5DVUxMSU5HU1RSQVRFR1lfT1BUSU1JU1RJQ19JTkNMVVNJT05fVEhF
Tl9CU1BIRVJFX09OTFkKKyAgICAgICAgICogUGxlYXNlIHJlYWQgZWFjaCBzdGF0aWMgdmFyaWFi
bGUgZG9jdW1lbnRhdGlvbiB0byBnZXQgZGV0YWlscyBhYm91dCB0aGUgY3VsbGluZyBwcm9jZXNz
LgorICAgICAgICAgKiAqLworICAgICAgICBfdGhpcy5jdWxsaW5nU3RyYXRlZ3kgPSBBYnN0cmFj
dE1lc2guQ1VMTElOR1NUUkFURUdZX1NUQU5EQVJEOworICAgICAgICAvLyBFdmVudHMKKyAgICAg
ICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhpcyBtZXNoIGNvbGxp
ZGVzIHdpdGggYW5vdGhlciBvbmUKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25Db2xsaWRl
T2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0
cmlnZ2VyZWQgd2hlbiB0aGUgY29sbGlzaW9uJ3MgcG9zaXRpb24gY2hhbmdlcworICAgICAgICAq
LworICAgICAgICBfdGhpcy5vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdlT2JzZXJ2YWJsZSA9IG5l
dyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk9ic2VydmFi
bGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiBt
YXRlcmlhbCBpcyBjaGFuZ2VkCisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uTWF0ZXJpYWxD
aGFuZ2VkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvLyBQcm9wZXJ0aWVzCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIG9yaWVudGF0aW9uIGZvciBQT1Yg
bW92ZW1lbnQgJiByb3RhdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZGVmaW5lZEZh
Y2luZ0ZvcndhcmQgPSB0cnVlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhp
cy5fb2NjbHVzaW9uUXVlcnkgPSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAg
ICBfdGhpcy5fcmVuZGVyaW5nR3JvdXAgPSBudWxsOworICAgICAgICAvKiogR2V0cyBvciBzZXRz
IHRoZSBhbHBoYSBpbmRleCB1c2VkIHRvIHNvcnQgdHJhbnNwYXJlbnQgbWVzaGVzCisgICAgICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL3Jlc291cmNlcy90cmFuc3BhcmVuY3lf
YW5kX2hvd19tZXNoZXNfYXJlX3JlbmRlcmVkI2FscGhhLWluZGV4CisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5hbHBoYUluZGV4ID0gTnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgbWVzaCBp
cyB2aXNpYmxlIChyZW5kZXJhYmxlKS4gRGVmYXVsdCBpcyB0cnVlCisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5pc1Zpc2libGUgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBtZXNoIGNhbiBiZSBwaWNrZWQg
KGJ5IHNjZW5lLnBpY2sgZm9yIGluc3RhbmNlIG9yIHRocm91Z2ggYWN0aW9ucykuIERlZmF1bHQg
aXMgdHJ1ZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaXNQaWNrYWJsZSA9IHRydWU7Cisg
ICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCBib3VuZGlu
ZyBib3hlcyBvZiBzdWJNZXNoZXMgbXVzdCBiZSByZW5kZXJlZCBhcyB3ZWxsIChmYWxzZSBieSBk
ZWZhdWx0KSAqLworICAgICAgICBfdGhpcy5zaG93U3ViTWVzaGVzQm91bmRpbmdCb3ggPSBmYWxz
ZTsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUg
bWVzaCBtdXN0IGJlIGNvbnNpZGVyZWQgYXMgYSByYXkgYmxvY2tlciBmb3IgbGVucyBmbGFyZXMg
KGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9ob3dfdG9fdXNlX2xlbnNfZmxhcmVzCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5pc0Jsb2NrZXIgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Ig
c2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHBvaW50ZXIgbW92ZSBldmVudHMgbXVzdCBi
ZSBzdXBwb3J0ZWQgb24gdGhpcyBtZXNoIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMuZW5hYmxlUG9pbnRlck1vdmVFdmVudHMgPSBmYWxzZTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFNwZWNpZmllcyB0aGUgcmVuZGVyaW5nIGdyb3VwIGlkIGZvciB0aGlz
IG1lc2ggKDAgYnkgZGVmYXVsdCkKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25q
cy5jb20vcmVzb3VyY2VzL3RyYW5zcGFyZW5jeV9hbmRfaG93X21lc2hlc19hcmVfcmVuZGVyZWQj
cmVuZGVyaW5nLWdyb3VwcworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucmVuZGVyaW5nR3Jv
dXBJZCA9IDA7CisgICAgICAgIF90aGlzLl9tYXRlcmlhbCA9IG51bGw7CisgICAgICAgIC8qKiBE
ZWZpbmVzIGNvbG9yIHRvIHVzZSB3aGVuIHJlbmRlcmluZyBvdXRsaW5lICovCisgICAgICAgIF90
aGlzLm91dGxpbmVDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNV9fWyJDb2xvcjMiXS5SZWQoKTsKKyAgICAgICAgLyoqIERlZmluZSB3aWR0aCB0byB1
c2Ugd2hlbiByZW5kZXJpbmcgb3V0bGluZSAqLworICAgICAgICBfdGhpcy5vdXRsaW5lV2lkdGgg
PSAwLjAyOworICAgICAgICAvKiogRGVmaW5lcyBjb2xvciB0byB1c2Ugd2hlbiByZW5kZXJpbmcg
b3ZlcmxheSAqLworICAgICAgICBfdGhpcy5vdmVybGF5Q29sb3IgPSBfTWF0aHNfbWF0aF9jb2xv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siQ29sb3IzIl0uUmVkKCk7CisgICAgICAg
IC8qKiBEZWZpbmVzIGFscGhhIHRvIHVzZSB3aGVuIHJlbmRlcmluZyBvdmVybGF5ICovCisgICAg
ICAgIF90aGlzLm92ZXJsYXlBbHBoYSA9IDAuNTsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyBh
IGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGludGVybmFsIG9jdHJlZSAoaWYgYXZhaWxhYmxlKSBj
YW4gYmUgdXNlZCB0byBib29zdCBzdWJtZXNoZXMgc2VsZWN0aW9uICh0cnVlIGJ5IGRlZmF1bHQp
ICovCisgICAgICAgIF90aGlzLnVzZU9jdHJlZUZvclJlbmRlcmluZ1NlbGVjdGlvbiA9IHRydWU7
CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCBpbnRl
cm5hbCBvY3RyZWUgKGlmIGF2YWlsYWJsZSkgY2FuIGJlIHVzZWQgdG8gYm9vc3Qgc3VibWVzaGVz
IHBpY2tpbmcgKHRydWUgYnkgZGVmYXVsdCkgKi8KKyAgICAgICAgX3RoaXMudXNlT2N0cmVlRm9y
UGlja2luZyA9IHRydWU7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGlj
YXRpbmcgdGhhdCBpbnRlcm5hbCBvY3RyZWUgKGlmIGF2YWlsYWJsZSkgY2FuIGJlIHVzZWQgdG8g
Ym9vc3Qgc3VibWVzaGVzIGNvbGxpc2lvbiAodHJ1ZSBieSBkZWZhdWx0KSAqLworICAgICAgICBf
dGhpcy51c2VPY3RyZWVGb3JDb2xsaXNpb25zID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFRydWUgaWYgdGhlIG1lc2ggbXVzdCBiZSByZW5kZXJlZCBpbiBhbnkgY2FzZSAodGhpcyB3
aWxsIHNob3J0Y3V0IHRoZSBmcnVzdHVtIGNsaXBwaW5nIHBoYXNlKQorICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMuYWx3YXlzU2VsZWN0QXNBY3RpdmVNZXNoID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCB0aGUg
Ym91bmRpbmcgaW5mbyBkb2VzIG5vdCBuZWVkIHRvIGJlIGtlcHQgaW4gc3luYyAoZm9yIHBlcmZv
cm1hbmNlIHJlYXNvbikKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmRvTm90U3luY0JvdW5k
aW5nSW5mbyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRo
ZSBjdXJyZW50IGFjdGlvbiBtYW5hZ2VyCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2FjdGlvbnMKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLmFjdGlvbk1hbmFnZXIgPSBudWxsOworICAgICAgICAvLyBDb2xsaXNpb25zCisgICAg
ICAgIF90aGlzLl9tZXNoQ29sbGlzaW9uRGF0YSA9IG5ldyBfQ29sbGlzaW9uc19tZXNoQ29sbGlz
aW9uRGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siX01lc2hDb2xsaXNpb25EYXRh
Il0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgZWxsaXBzb2lk
IHVzZWQgdG8gaW1wZXJzb25hdGUgdGhpcyBtZXNoIHdoZW4gdXNpbmcgY29sbGlzaW9uIGVuZ2lu
ZSAoZGVmYXVsdCBpcyAoMC41LCAxLCAwLjUpKQorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2NhbWVyYXMsX21lc2hfY29sbGlzaW9uc19hbmRfZ3Jh
dml0eQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZWxsaXBzb2lkID0gbmV3IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMC41LCAx
LCAwLjUpOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBlbGxpcHNv
aWQgb2Zmc2V0IHVzZWQgdG8gaW1wZXJzb25hdGUgdGhpcyBtZXNoIHdoZW4gdXNpbmcgY29sbGlz
aW9uIGVuZ2luZSAoZGVmYXVsdCBpcyAoMCwgMCwgMCkpCisgICAgICAgICAqIEBzZWUgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvY2FtZXJhcyxfbWVzaF9jb2xsaXNpb25zX2Fu
ZF9ncmF2aXR5CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5lbGxpcHNvaWRPZmZzZXQgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXSgwLCAwLCAwKTsKKyAgICAgICAgLy8gRWRnZXMKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERlZmluZXMgZWRnZSB3aWR0aCB1c2VkIHdoZW4gZWRnZXNSZW5kZXJlciBpcyBlbmFibGVkCisg
ICAgICAgICAqIEBzZWUgaHR0cHM6Ly93d3cuYmFieWxvbmpzLXBsYXlncm91bmQuY29tLyMxME9K
U0cjMTMKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmVkZ2VzV2lkdGggPSAxOworICAgICAg
ICAvKioKKyAgICAgICAgICogRGVmaW5lcyBlZGdlIGNvbG9yIHVzZWQgd2hlbiBlZGdlc1JlbmRl
cmVyIGlzIGVuYWJsZWQKKyAgICAgICAgICogQHNlZSBodHRwczovL3d3dy5iYWJ5bG9uanMtcGxh
eWdyb3VuZC5jb20vIzEwT0pTRyMxMworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZWRnZXND
b2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVf
X1siQ29sb3I0Il0oMSwgMCwgMCwgMSk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAg
IF90aGlzLl9lZGdlc1JlbmRlcmVyID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICAgICAgX3RoaXMuX21hc3Rlck1lc2ggPSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLwor
ICAgICAgICBfdGhpcy5fYm91bmRpbmdJbmZvID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4g
Ki8KKyAgICAgICAgX3RoaXMuX3JlbmRlcklkID0gMDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICAgICAgX3RoaXMuX2ludGVyc2VjdGlvbnNJblByb2dyZXNzID0gbmV3IEFycmF5KCk7Cisg
ICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl91bkluZGV4ZWQgPSBmYWxzZTsK
KyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2xpZ2h0U291cmNlcyA9IG5l
dyBBcnJheSgpOworICAgICAgICAvLyBMb2FkaW5nIHByb3BlcnRpZXMKKyAgICAgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX3dhaXRpbmdEYXRhID0geworICAgICAgICAgICAgbG9k
czogbnVsbCwKKyAgICAgICAgICAgIGFjdGlvbnM6IG51bGwsCisgICAgICAgICAgICBmcmVlemVX
b3JsZE1hdHJpeDogbnVsbAorICAgICAgICB9OworICAgICAgICAvKiogQGhpZGRlbiAqLworICAg
ICAgICBfdGhpcy5fYm9uZXNUcmFuc2Zvcm1NYXRyaWNlcyA9IG51bGw7CisgICAgICAgIC8qKiBA
aGlkZGVuICovCisgICAgICAgIF90aGlzLl90cmFuc2Zvcm1NYXRyaXhUZXh0dXJlID0gbnVsbDsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBtZXNo
IGlzIHJlYnVpbHQuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vblJlYnVpbGRPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIF90aGlzLl9vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdl
ID0gZnVuY3Rpb24gKGNvbGxpc2lvbklkLCBuZXdQb3NpdGlvbiwgY29sbGlkZWRNZXNoKSB7Cisg
ICAgICAgICAgICBpZiAoY29sbGlkZWRNZXNoID09PSB2b2lkIDApIHsgY29sbGlkZWRNZXNoID0g
bnVsbDsgfQorICAgICAgICAgICAgbmV3UG9zaXRpb24uc3VidHJhY3RUb1JlZihfdGhpcy5fbWVz
aENvbGxpc2lvbkRhdGEuX29sZFBvc2l0aW9uRm9yQ29sbGlzaW9ucywgX3RoaXMuX21lc2hDb2xs
aXNpb25EYXRhLl9kaWZmUG9zaXRpb25Gb3JDb2xsaXNpb25zKTsKKyAgICAgICAgICAgIGlmIChf
dGhpcy5fbWVzaENvbGxpc2lvbkRhdGEuX2RpZmZQb3NpdGlvbkZvckNvbGxpc2lvbnMubGVuZ3Ro
KCkgPiBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRW5naW5l
Il0uQ29sbGlzaW9uc0Vwc2lsb24pIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5wb3NpdGlvbi5h
ZGRJblBsYWNlKF90aGlzLl9tZXNoQ29sbGlzaW9uRGF0YS5fZGlmZlBvc2l0aW9uRm9yQ29sbGlz
aW9ucyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29sbGlkZWRNZXNoKSB7Cisg
ICAgICAgICAgICAgICAgX3RoaXMub25Db2xsaWRlT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMo
Y29sbGlkZWRNZXNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLm9uQ29sbGlz
aW9uUG9zaXRpb25DaGFuZ2VPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhfdGhpcy5wb3NpdGlv
bik7CisgICAgICAgIH07CisgICAgICAgIF90aGlzLmdldFNjZW5lKCkuYWRkTWVzaChfdGhpcyk7
CisgICAgICAgIF90aGlzLl9yZXN5bmNMaWdodFNvdXJjZXMoKTsKKyAgICAgICAgLy8gTWVzaCBV
bmlmb3JtIEJ1ZmZlci4KKyAgICAgICAgX3RoaXMuX3VuaWZvcm1CdWZmZXIgPSBuZXcgX01hdGVy
aWFsc191bmlmb3JtQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJVbmlmb3Jt
QnVmZmVyIl0oX3RoaXMuZ2V0U2NlbmUoKS5nZXRFbmdpbmUoKSk7CisgICAgICAgIF90aGlzLl9i
dWlsZFVuaWZvcm1MYXlvdXQoKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLCAiQklMTEJPQVJETU9ERV9OT05FIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogTm8gYmlsbGJvYXJkCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBfTWVzaGVzX3RyYW5z
Zm9ybU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVHJhbnNmb3JtTm9kZSJdLkJJ
TExCT0FSRE1PREVfTk9ORTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEFic3RyYWN0TWVzaCwgIkJJTExCT0FSRE1PREVfWCIsIHsKKyAgICAgICAgLyoqIEJp
bGxib2FyZCBvbiBYIGF4aXMgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gX01lc2hlc190cmFuc2Zvcm1Ob2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIlRyYW5zZm9ybU5vZGUiXS5CSUxMQk9BUkRNT0RFX1g7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gsICJCSUxMQk9BUkRNT0RF
X1kiLCB7CisgICAgICAgIC8qKiBCaWxsYm9hcmQgb24gWSBheGlzICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJUcmFuc2Zvcm1Ob2RlIl0uQklMTEJPQVJETU9E
RV9ZOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJh
Y3RNZXNoLCAiQklMTEJPQVJETU9ERV9aIiwgeworICAgICAgICAvKiogQmlsbGJvYXJkIG9uIFog
YXhpcyAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBf
TWVzaGVzX3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVHJhbnNm
b3JtTm9kZSJdLkJJTExCT0FSRE1PREVfWjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEFic3RyYWN0TWVzaCwgIkJJTExCT0FSRE1PREVfQUxMIiwgeworICAg
ICAgICAvKiogQmlsbGJvYXJkIG9uIGFsbCBheGVzICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJUcmFuc2Zvcm1Ob2RlIl0uQklMTEJPQVJETU9ERV9BTEw7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gs
ICJCSUxMQk9BUkRNT0RFX1VTRV9QT1NJVElPTiIsIHsKKyAgICAgICAgLyoqIEJpbGxib2FyZCBv
biB1c2luZyBwb3NpdGlvbiBpbnN0ZWFkIG9mIG9yaWVudGF0aW9uICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJUcmFuc2Zvcm1Ob2RlIl0uQklMTEJPQVJETU9E
RV9VU0VfUE9TSVRJT047CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90eXBlLCAiZmFjZXROYiIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIG51bWJlciBvZiBmYWNldHMgaW4gdGhlIG1lc2gKKyAgICAgICAg
ICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfZmFjZXRk
YXRhI3doYXQtaXMtYS1tZXNoLWZhY2V0CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERh
dGFJbmZvLl9mYWNldERhdGEuZmFjZXROYjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEFic3RyYWN0TWVzaC5wcm90b3R5cGUsICJwYXJ0aXRpb25pbmdTdWJk
aXZpc2lvbnMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldCB0aGUgbnVt
YmVyIChpbnRlZ2VyKSBvZiBzdWJkaXZpc2lvbnMgcGVyIGF4aXMgaW4gdGhlIHBhcnRpb25pbmcg
c3BhY2UKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hv
d190b191c2VfZmFjZXRkYXRhI3R3ZWFraW5nLXRoZS1wYXJ0aXRpb25pbmcKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lu
dGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2ZhY2V0RGF0YS5wYXJ0aXRpb25pbmdTdWJkaXZp
c2lvbnM7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKG5iKSB7CisgICAgICAg
ICAgICB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9mYWNldERhdGEucGFydGl0
aW9uaW5nU3ViZGl2aXNpb25zID0gbmI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90eXBlLCAicGFydGl0aW9uaW5nQkJveFJh
dGlvIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHJhdGlvIChmbG9hdCkgdG8gYXBw
bHkgdG8gdGhlIGJvdWRpbmcgYm94IHNpemUgdG8gc2V0IHRvIHRoZSBwYXJ0aW9uaW5nIHNwYWNl
LgorICAgICAgICAgKiBFeCA6IDEuMDEgKGRlZmF1bHQpIHRoZSBwYXJ0aW9uaW5nIHNwYWNlIGlz
IDElIGJpZ2dlciB0aGFuIHRoZSBib3VuZGluZyBib3gKKyAgICAgICAgICogQHNlZSBodHRwOi8v
ZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfZmFjZXRkYXRhI3R3ZWFraW5nLXRo
ZS1wYXJ0aXRpb25pbmcKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2Zh
Y2V0RGF0YS5wYXJ0aXRpb25pbmdCQm94UmF0aW87CisgICAgICAgIH0sCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHJhdGlvKSB7CisgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVz
aERhdGFJbmZvLl9mYWNldERhdGEucGFydGl0aW9uaW5nQkJveFJhdGlvID0gcmF0aW87CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJv
dG90eXBlLCAibXVzdERlcHRoU29ydEZhY2V0cyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoZSBmYWNldHMgbXVzdCBi
ZSBkZXB0aCBzb3J0ZWQgb24gbmV4dCBjYWxsIHRvIGB1cGRhdGVGYWNldERhdGEoKWAuCisgICAg
ICAgICAqIFdvcmtzIG9ubHkgZm9yIHVwZGF0YWJsZSBtZXNoZXMuCisgICAgICAgICAqIERvZXNu
J3Qgd29yayB3aXRoIG11bHRpLW1hdGVyaWFscworICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9mYWNldGRhdGEjZmFjZXQtZGVwdGgtc29y
dAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fZmFjZXREYXRhLmZhY2V0
RGVwdGhTb3J0OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzb3J0KSB7Cisg
ICAgICAgICAgICB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9mYWNldERhdGEu
ZmFjZXREZXB0aFNvcnQgPSBzb3J0OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgImZhY2V0RGVwdGhTb3J0RnJvbSIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBsb2NhdGlvbiAoVmVjdG9yMykgd2hlcmUg
dGhlIGZhY2V0IGRlcHRoIHNvcnQgbXVzdCBiZSBjb21wdXRlZCBmcm9tLgorICAgICAgICAgKiBC
eSBkZWZhdWx0LCB0aGUgYWN0aXZlIGNhbWVyYSBwb3NpdGlvbi4KKyAgICAgICAgICogVXNlZCBv
bmx5IHdoZW4gZmFjZXQgZGVwdGggc29ydCBpcyBlbmFibGVkCisgICAgICAgICAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2ZhY2V0ZGF0YSNmYWNldC1k
ZXB0aC1zb3J0CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9mYWNldERh
dGEuZmFjZXREZXB0aFNvcnRGcm9tOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
IChsb2NhdGlvbikgeworICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRh
SW5mby5fZmFjZXREYXRhLmZhY2V0RGVwdGhTb3J0RnJvbSA9IGxvY2F0aW9uOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlw
ZSwgImlzRmFjZXREYXRhRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIGdldHMg
YSBib29sZWFuIGluZGljYXRpbmcgaWYgZmFjZXREYXRhIGlzIGVuYWJsZWQKKyAgICAgICAgICog
QHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfZmFjZXRkYXRh
I3doYXQtaXMtYS1tZXNoLWZhY2V0CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJ
bmZvLl9mYWNldERhdGEuZmFjZXREYXRhRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLl91cGRhdGVOb25Vbmlm
b3JtU2NhbGluZ1N0YXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIGlmICghX3N1cGVy
LnByb3RvdHlwZS5fdXBkYXRlTm9uVW5pZm9ybVNjYWxpbmdTdGF0ZS5jYWxsKHRoaXMsIHZhbHVl
KSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHRoaXMu
X21hcmtTdWJNZXNoZXNBc01pc2NEaXJ0eSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90eXBlLCAib25D
b2xsaWRlIiwgeworICAgICAgICAvKiogU2V0IGEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMg
bWVzaCBjb2xsaWRlcyB3aXRoIGFub3RoZXIgb25lICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fbWVzaENvbGxpc2lvbkRhdGEuX29u
Q29sbGlkZU9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vbkNvbGxpZGVPYnNlcnZh
YmxlLnJlbW92ZSh0aGlzLl9tZXNoQ29sbGlzaW9uRGF0YS5fb25Db2xsaWRlT2JzZXJ2ZXIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fbWVzaENvbGxpc2lvbkRhdGEuX29uQ29s
bGlkZU9ic2VydmVyID0gdGhpcy5vbkNvbGxpZGVPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gu
cHJvdG90eXBlLCAib25Db2xsaXNpb25Qb3NpdGlvbkNoYW5nZSIsIHsKKyAgICAgICAgLyoqIFNl
dCBhIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgY29sbGlzaW9uJ3MgcG9zaXRpb24gY2hhbmdl
cyAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICAgICAgaWYg
KHRoaXMuX21lc2hDb2xsaXNpb25EYXRhLl9vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdlT2JzZXJ2
ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQ29sbGlzaW9uUG9zaXRpb25DaGFuZ2VPYnNl
cnZhYmxlLnJlbW92ZSh0aGlzLl9tZXNoQ29sbGlzaW9uRGF0YS5fb25Db2xsaXNpb25Qb3NpdGlv
bkNoYW5nZU9ic2VydmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX21lc2hD
b2xsaXNpb25EYXRhLl9vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdlT2JzZXJ2ZXIgPSB0aGlzLm9u
Q29sbGlzaW9uUG9zaXRpb25DaGFuZ2VPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90
eXBlLCAidmlzaWJpbGl0eSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0
cyBtZXNoIHZpc2liaWxpdHkgYmV0d2VlbiAwIGFuZCAxIChkZWZhdWx0IGlzIDEpCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl92aXNpYmlsaXR5OworICAgICAgICB9LAor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIG1lc2ggdmlzaWJpbGl0eSBiZXR3
ZWVuIDAgYW5kIDEgKGRlZmF1bHQgaXMgMSkKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5faW50ZXJuYWxBYnN0cmFjdE1l
c2hEYXRhSW5mby5fdmlzaWJpbGl0eSA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVz
aERhdGFJbmZvLl92aXNpYmlsaXR5ID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9tYXJrU3Vi
TWVzaGVzQXNNaXNjRGlydHkoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEFic3RyYWN0TWVzaC5wcm90b3R5cGUsICJtYXRlcmlhbCIsIHsKKyAgICAgICAg
LyoqIEdldHMgb3Igc2V0cyBjdXJyZW50IG1hdGVyaWFsICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hdGVyaWFsOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX21h
dGVyaWFsID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIG1hdGVyaWFsIG1lc2ggbWFwIGlkIG5lZWRl
ZAorICAgICAgICAgICAgaWYgKHRoaXMuX21hdGVyaWFsICYmIHRoaXMuX21hdGVyaWFsLm1lc2hN
YXApIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXRlcmlhbC5tZXNoTWFwW3RoaXMudW5pcXVl
SWRdID0gdW5kZWZpbmVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fbWF0ZXJp
YWwgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5tZXNoTWFwKSB7Cisg
ICAgICAgICAgICAgICAgdmFsdWUubWVzaE1hcFt0aGlzLnVuaXF1ZUlkXSA9IHRoaXM7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5vbk1hdGVyaWFsQ2hhbmdlZE9ic2VydmFi
bGUuaGFzT2JzZXJ2ZXJzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vbk1hdGVyaWFsQ2hhbmdl
ZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCF0aGlzLnN1Yk1lc2hlcykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3VuQmluZEVmZmVjdCgpOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlw
ZSwgInJlY2VpdmVTaGFkb3dzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBz
ZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBtZXNoIGNhbiByZWNlaXZlIHJlYWx0
aW1lIHNoYWRvd3MKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFi
eWxvbjEwMS9zaGFkb3dzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9y
ZWNlaXZlU2hhZG93czsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9y
ZWNlaXZlU2hhZG93cyA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZv
Ll9yZWNlaXZlU2hhZG93cyA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fbWFya1N1Yk1lc2hl
c0FzTGlnaHREaXJ0eSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgImhhc1ZlcnRleEFscGhhIiwgeworICAgICAg
ICAvKiogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBtZXNoIGNv
bnRhaW5zIHZlcnRleCBjb2xvciBkYXRhIHdpdGggYWxwaGEgdmFsdWVzICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsQWJzdHJh
Y3RNZXNoRGF0YUluZm8uX2hhc1ZlcnRleEFscGhhOworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2ludGVybmFsQWJzdHJh
Y3RNZXNoRGF0YUluZm8uX2hhc1ZlcnRleEFscGhhID09PSB2YWx1ZSkgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ludGVybmFsQWJz
dHJhY3RNZXNoRGF0YUluZm8uX2hhc1ZlcnRleEFscGhhID0gdmFsdWU7CisgICAgICAgICAgICB0
aGlzLl9tYXJrU3ViTWVzaGVzQXNBdHRyaWJ1dGVzRGlydHkoKTsKKyAgICAgICAgICAgIHRoaXMu
X21hcmtTdWJNZXNoZXNBc01pc2NEaXJ0eSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgInVzZVZlcnRleENvbG9y
cyIsIHsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0
IHRoaXMgbWVzaCBuZWVkcyB0byB1c2UgdmVydGV4IGNvbG9yIGRhdGEgdG8gcmVuZGVyIChpZiB0
aGlzIGtpbmQgb2YgdmVydGV4IGRhdGEgaXMgYXZhaWxhYmxlIGluIHRoZSBnZW9tZXRyeSkgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50
ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fdXNlVmVydGV4Q29sb3JzOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2lu
dGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX3VzZVZlcnRleENvbG9ycyA9PT0gdmFsdWUpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl91c2VWZXJ0ZXhDb2xvcnMgPSB2YWx1ZTsK
KyAgICAgICAgICAgIHRoaXMuX21hcmtTdWJNZXNoZXNBc0F0dHJpYnV0ZXNEaXJ0eSgpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnBy
b3RvdHlwZSwgImNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGJvbmUgYW5pbWF0
aW9ucyBtdXN0IGJlIGNvbXB1dGVkIGJ5IHRoZSBDUFUgKGZhbHNlIGJ5IGRlZmF1bHQpCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9jb21wdXRlQm9uZXNVc2luZ1NoYWRl
cnM7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fY29tcHV0ZUJvbmVz
VXNpbmdTaGFkZXJzID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8u
X2NvbXB1dGVCb25lc1VzaW5nU2hhZGVycyA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fbWFy
a1N1Yk1lc2hlc0FzQXR0cmlidXRlc0RpcnR5KCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90eXBlLCAibnVtQm9uZUluZmx1
ZW5jZXJzIiwgeworICAgICAgICAvKiogR2V0cyBvciBzZXRzIHRoZSBudW1iZXIgb2YgYWxsb3dl
ZCBib25lIGluZmx1ZW5jZXMgcGVyIHZlcnRleCAoNCBieSBkZWZhdWx0KSAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEFic3Ry
YWN0TWVzaERhdGFJbmZvLl9udW1Cb25lSW5mbHVlbmNlcnM7CisgICAgICAgIH0sCisgICAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5faW50ZXJuYWxB
YnN0cmFjdE1lc2hEYXRhSW5mby5fbnVtQm9uZUluZmx1ZW5jZXJzID09PSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2lu
dGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX251bUJvbmVJbmZsdWVuY2VycyA9IHZhbHVlOwor
ICAgICAgICAgICAgdGhpcy5fbWFya1N1Yk1lc2hlc0FzQXR0cmlidXRlc0RpcnR5KCk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJv
dG90eXBlLCAiYXBwbHlGb2ciLCB7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFu
IGluZGljYXRpbmcgdGhhdCB0aGlzIG1lc2ggd2lsbCBhbGxvdyBmb2cgdG8gYmUgcmVuZGVyZWQg
b24gaXQgKHRydWUgYnkgZGVmYXVsdCkgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fYXBw
bHlGb2c7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fYXBwbHlGb2cg
PT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fYXBwbHlGb2cgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtTdWJNZXNoZXNBc01pc2NEaXJ0eSgpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnBy
b3RvdHlwZSwgImxheWVyTWFzayIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Ig
c2V0cyB0aGUgY3VycmVudCBsYXllciBtYXNrIChkZWZhdWx0IGlzIDB4MEZGRkZGRkYpCisgICAg
ICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9sYXllcm1hc2tzX2Fu
ZF9tdWx0aS1jYW1fdGV4dHVyZXMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUlu
Zm8uX2xheWVyTWFzazsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hE
YXRhSW5mby5fbGF5ZXJNYXNrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fbGF5
ZXJNYXNrID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9yZXN5bmNMaWdodFNvdXJjZXMoKTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFic3RyYWN0TWVz
aC5wcm90b3R5cGUsICJjb2xsaXNpb25NYXNrIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyBvciBzZXRzIGEgY29sbGlzaW9uIG1hc2sgdXNlZCB0byBtYXNrIGNvbGxpc2lvbnMgKGRl
ZmF1bHQgaXMgLTEpLgorICAgICAgICAgKiBBIGNvbGxpc2lvbiBiZXR3ZWVuIEEgYW5kIEIgd2ls
bCBoYXBwZW4gaWYgQS5jb2xsaXNpb25Hcm91cCAmIGIuY29sbGlzaW9uTWFzayAhPT0gMAorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fbWVzaENvbGxpc2lvbkRhdGEuX2NvbGxpc2lvbk1hc2s7CisgICAgICAgIH0sCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKG1hc2spIHsKKyAgICAgICAgICAgIHRoaXMuX21lc2hDb2xsaXNp
b25EYXRhLl9jb2xsaXNpb25NYXNrID0gIWlzTmFOKG1hc2spID8gbWFzayA6IC0xOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3Rv
dHlwZSwgImNvbGxpc2lvbkdyb3VwIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBv
ciBzZXRzIHRoZSBjdXJyZW50IGNvbGxpc2lvbiBncm91cCBtYXNrICgtMSBieSBkZWZhdWx0KS4K
KyAgICAgICAgICogQSBjb2xsaXNpb24gYmV0d2VlbiBBIGFuZCBCIHdpbGwgaGFwcGVuIGlmIEEu
Y29sbGlzaW9uR3JvdXAgJiBiLmNvbGxpc2lvbk1hc2sgIT09IDAKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lc2hDb2xs
aXNpb25EYXRhLl9jb2xsaXNpb25Hcm91cDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAobWFzaykgeworICAgICAgICAgICAgdGhpcy5fbWVzaENvbGxpc2lvbkRhdGEuX2NvbGxp
c2lvbkdyb3VwID0gIWlzTmFOKG1hc2spID8gbWFzayA6IC0xOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgImxpZ2h0
U291cmNlcyIsIHsKKyAgICAgICAgLyoqIEdldHMgdGhlIGxpc3Qgb2YgbGlnaHRzIGFmZmVjdGlu
ZyB0aGF0IG1lc2ggKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fbGlnaHRTb3VyY2VzOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgIl9wb3NpdGlvbnMiLCB7Cisg
ICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90eXBlLCAic2tlbGV0b24iLCB7CisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsQWJzdHJh
Y3RNZXNoRGF0YUluZm8uX3NrZWxldG9uOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBvciBzZXRzIGEgc2tlbGV0b24gdG8gYXBwbHkgc2tpbmluZyB0cmFuc2Zvcm1h
dGlvbnMKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hv
d190b191c2VfYm9uZXNfYW5kX3NrZWxldG9ucworICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IHRoaXMuX2ludGVy
bmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX3NrZWxldG9uOworICAgICAgICAgICAgaWYgKHNrZWxl
dG9uICYmIHNrZWxldG9uLm5lZWRJbml0aWFsU2tpbk1hdHJpeCkgeworICAgICAgICAgICAgICAg
IHNrZWxldG9uLl91bnJlZ2lzdGVyTWVzaFdpdGhQb3NlTWF0cml4KHRoaXMpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLm5lZWRJbml0aWFsU2tpbk1hdHJp
eCkgeworICAgICAgICAgICAgICAgIHZhbHVlLl9yZWdpc3Rlck1lc2hXaXRoUG9zZU1hdHJpeCh0
aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ludGVybmFsQWJzdHJhY3RN
ZXNoRGF0YUluZm8uX3NrZWxldG9uID0gdmFsdWU7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2lu
dGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX3NrZWxldG9uKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fYm9uZXNUcmFuc2Zvcm1NYXRyaWNlcyA9IG51bGw7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9tYXJrU3ViTWVzaGVzQXNBdHRyaWJ1dGVzRGlydHkoKTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fYnVpbGRVbmlmb3JtTGF5b3V0
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0o
IndvcmxkIiwgMTYpOworICAgICAgICB0aGlzLl91bmlmb3JtQnVmZmVyLmFkZFVuaWZvcm0oInZp
c2liaWxpdHkiLCAxKTsKKyAgICAgICAgdGhpcy5fdW5pZm9ybUJ1ZmZlci5jcmVhdGUoKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFRyYW5zZmVyIHRoZSBtZXNoIHZhbHVlcyB0byBpdHMgVUJP
LgorICAgICAqIEBwYXJhbSB3b3JsZCBUaGUgd29ybGQgbWF0cml4IGFzc29jaWF0ZWQgd2l0aCB0
aGUgbWVzaAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUudHJhbnNmZXJUb0Vm
ZmVjdCA9IGZ1bmN0aW9uICh3b3JsZCkgeworICAgICAgICB2YXIgdWJvID0gdGhpcy5fdW5pZm9y
bUJ1ZmZlcjsKKyAgICAgICAgdWJvLnVwZGF0ZU1hdHJpeCgid29ybGQiLCB3b3JsZCk7CisgICAg
ICAgIHViby51cGRhdGVGbG9hdCgidmlzaWJpbGl0eSIsIHRoaXMuX2ludGVybmFsQWJzdHJhY3RN
ZXNoRGF0YUluZm8uX3Zpc2liaWxpdHkpOworICAgICAgICB1Ym8udXBkYXRlKCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBtZXNoIHVuaWZvcm0gYnVmZmVyLgorICAgICAqIEBy
ZXR1cm4gdGhlIHVuaWZvcm0gYnVmZmVyIG9mIHRoZSBtZXNoLgorICAgICAqLworICAgIEFic3Ry
YWN0TWVzaC5wcm90b3R5cGUuZ2V0TWVzaFVuaWZvcm1CdWZmZXIgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl91bmlmb3JtQnVmZmVyOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmV0dXJucyB0aGUgc3RyaW5nICJBYnN0cmFjdE1lc2giCisgICAgICogQHJldHVybnMgIkFi
c3RyYWN0TWVzaCIKKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLmdldENsYXNz
TmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJBYnN0cmFjdE1lc2giOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUg
Y3VycmVudCBtZXNoCisgICAgICogQHBhcmFtIGZ1bGxEZXRhaWxzIGRlZmluZXMgYSBib29sZWFu
IGluZGljYXRpbmcgaWYgZnVsbCBkZXRhaWxzIG11c3QgYmUgaW5jbHVkZWQKKyAgICAgKiBAcmV0
dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBtZXNoCisgICAgICov
CisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIChmdWxsRGV0
YWlscykgeworICAgICAgICB2YXIgcmV0ID0gIk5hbWU6ICIgKyB0aGlzLm5hbWUgKyAiLCBpc0lu
c3RhbmNlOiAiICsgKHRoaXMuZ2V0Q2xhc3NOYW1lKCkgIT09ICJJbnN0YW5jZWRNZXNoIiA/ICJZ
RVMiIDogIk5PIik7CisgICAgICAgIHJldCArPSAiLCAjIG9mIHN1Ym1lc2hlczogIiArICh0aGlz
LnN1Yk1lc2hlcyA/IHRoaXMuc3ViTWVzaGVzLmxlbmd0aCA6IDApOworICAgICAgICB2YXIgc2tl
bGV0b24gPSB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9za2VsZXRvbjsKKyAg
ICAgICAgaWYgKHNrZWxldG9uKSB7CisgICAgICAgICAgICByZXQgKz0gIiwgc2tlbGV0b246ICIg
KyBza2VsZXRvbi5uYW1lOworICAgICAgICB9CisgICAgICAgIGlmIChmdWxsRGV0YWlscykgewor
ICAgICAgICAgICAgcmV0ICs9ICIsIGJpbGxib2FyZCBtb2RlOiAiICsgKFsiTk9ORSIsICJYIiwg
IlkiLCBudWxsLCAiWiIsIG51bGwsIG51bGwsICJBTEwiXSlbdGhpcy5iaWxsYm9hcmRNb2RlXTsK
KyAgICAgICAgICAgIHJldCArPSAiLCBmcmVlemUgd3JsZCBtYXQ6ICIgKyAodGhpcy5faXNXb3Js
ZE1hdHJpeEZyb3plbiB8fCB0aGlzLl93YWl0aW5nRGF0YS5mcmVlemVXb3JsZE1hdHJpeCA/ICJZ
RVMiIDogIk5PIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBl
Ll9nZXRFZmZlY3RpdmVQYXJlbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9t
YXN0ZXJNZXNoICYmIHRoaXMuYmlsbGJvYXJkTW9kZSAhPT0gX01lc2hlc190cmFuc2Zvcm1Ob2Rl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlRyYW5zZm9ybU5vZGUiXS5CSUxMQk9BUkRN
T0RFX05PTkUpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXN0ZXJNZXNoOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl9nZXRFZmZlY3RpdmVQYXJlbnQu
Y2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQWJzdHJhY3RNZXNo
LnByb3RvdHlwZS5fZ2V0QWN0aW9uTWFuYWdlckZvclRyaWdnZXIgPSBmdW5jdGlvbiAodHJpZ2dl
ciwgaW5pdGlhbENhbGwpIHsKKyAgICAgICAgaWYgKGluaXRpYWxDYWxsID09PSB2b2lkIDApIHsg
aW5pdGlhbENhbGwgPSB0cnVlOyB9CisgICAgICAgIGlmICh0aGlzLmFjdGlvbk1hbmFnZXIgJiYg
KGluaXRpYWxDYWxsIHx8IHRoaXMuYWN0aW9uTWFuYWdlci5pc1JlY3Vyc2l2ZSkpIHsKKyAgICAg
ICAgICAgIGlmICh0cmlnZ2VyKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uTWFu
YWdlci5oYXNTcGVjaWZpY1RyaWdnZXIodHJpZ2dlcikpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuYWN0aW9uTWFuYWdlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hY3Rp
b25NYW5hZ2VyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5w
YXJlbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLnBhcmVudC5fZ2V0QWN0aW9uTWFuYWdlckZvclRyaWdnZXIodHJpZ2dlciwgZmFs
c2UpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90
eXBlLl9yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLm9uUmVidWlsZE9ic2Vy
dmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICBpZiAodGhpcy5fb2NjbHVzaW9u
UXVlcnkpIHsKKyAgICAgICAgICAgIHRoaXMuX29jY2x1c2lvblF1ZXJ5ID0gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXRoaXMuc3ViTWVzaGVzKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuc3ViTWVzaGVz
OyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBfYVtf
aV07CisgICAgICAgICAgICBzdWJNZXNoLl9yZWJ1aWxkKCk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKiBAaGlkZGVuICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fcmVzeW5jTGln
aHRTb3VyY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9saWdodFNvdXJjZXMubGVu
Z3RoID0gMDsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuZ2V0U2NlbmUoKS5s
aWdodHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbGlnaHQgPSBf
YVtfaV07CisgICAgICAgICAgICBpZiAoIWxpZ2h0LmlzRW5hYmxlZCgpKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGlnaHQuY2Fu
QWZmZWN0TWVzaCh0aGlzKSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2xpZ2h0U291cmNlcy5w
dXNoKGxpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9tYXJr
U3ViTWVzaGVzQXNMaWdodERpcnR5KCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAg
IEFic3RyYWN0TWVzaC5wcm90b3R5cGUuX3Jlc3luY0xpZ2hTb3VyY2UgPSBmdW5jdGlvbiAobGln
aHQpIHsKKyAgICAgICAgdmFyIGlzSW4gPSBsaWdodC5pc0VuYWJsZWQoKSAmJiBsaWdodC5jYW5B
ZmZlY3RNZXNoKHRoaXMpOworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9saWdodFNvdXJjZXMu
aW5kZXhPZihsaWdodCk7CisgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAgICAg
IGlmICghaXNJbikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX2xpZ2h0U291cmNlcy5wdXNoKGxpZ2h0KTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0luKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fbGlnaHRTb3VyY2VzLnNwbGlj
ZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbWFya1N1Yk1lc2hlc0FzTGln
aHREaXJ0eSgpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBBYnN0cmFjdE1lc2gu
cHJvdG90eXBlLl91bkJpbmRFZmZlY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFy
IF9pID0gMCwgX2EgPSB0aGlzLnN1Yk1lc2hlczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAg
ICAgICAgICAgIHZhciBzdWJNZXNoID0gX2FbX2ldOworICAgICAgICAgICAgc3ViTWVzaC5zZXRF
ZmZlY3QobnVsbCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAg
QWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fcmVtb3ZlTGlnaHRTb3VyY2UgPSBmdW5jdGlvbiAobGln
aHQsIGRpc3Bvc2UpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fbGlnaHRTb3VyY2VzLmlu
ZGV4T2YobGlnaHQpOworICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbGlnaHRTb3VyY2VzLnNwbGljZShpbmRl
eCwgMSk7CisgICAgICAgIHRoaXMuX21hcmtTdWJNZXNoZXNBc0xpZ2h0RGlydHkoZGlzcG9zZSk7
CisgICAgfTsKKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLl9tYXJrU3ViTWVzaGVzQXNEaXJ0
eSA9IGZ1bmN0aW9uIChmdW5jKSB7CisgICAgICAgIGlmICghdGhpcy5zdWJNZXNoZXMpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9h
ID0gdGhpcy5zdWJNZXNoZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2
YXIgc3ViTWVzaCA9IF9hW19pXTsKKyAgICAgICAgICAgIGlmIChzdWJNZXNoLl9tYXRlcmlhbERl
ZmluZXMpIHsKKyAgICAgICAgICAgICAgICBmdW5jKHN1Yk1lc2guX21hdGVyaWFsRGVmaW5lcyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fbWFya1N1Yk1lc2hlc0FzTGlnaHREaXJ0eSA9IGZ1
bmN0aW9uIChkaXNwb3NlKSB7CisgICAgICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHsgZGlz
cG9zZSA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMuX21hcmtTdWJNZXNoZXNBc0RpcnR5KGZ1bmN0
aW9uIChkZWZpbmVzKSB7IHJldHVybiBkZWZpbmVzLm1hcmtBc0xpZ2h0RGlydHkoZGlzcG9zZSk7
IH0pOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90
eXBlLl9tYXJrU3ViTWVzaGVzQXNBdHRyaWJ1dGVzRGlydHkgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX21hcmtTdWJNZXNoZXNBc0RpcnR5KGZ1bmN0aW9uIChkZWZpbmVzKSB7IHJldHVy
biBkZWZpbmVzLm1hcmtBc0F0dHJpYnV0ZXNEaXJ0eSgpOyB9KTsKKyAgICB9OworICAgIC8qKiBA
aGlkZGVuICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fbWFya1N1Yk1lc2hlc0FzTWlz
Y0RpcnR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuc3ViTWVzaGVzKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBf
YSA9IHRoaXMuc3ViTWVzaGVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAg
dmFyIHN1Yk1lc2ggPSBfYVtfaV07CisgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBzdWJNZXNo
LmdldE1hdGVyaWFsKCk7CisgICAgICAgICAgICBpZiAobWF0ZXJpYWwpIHsKKyAgICAgICAgICAg
ICAgICBtYXRlcmlhbC5tYXJrQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEwX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX01pc2NEaXJ0eUZsYWcpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgInNjYWxpbmciLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAqIEdldHMgb3Igc2V0cyBhIFZlY3RvcjMgZGVwaWN0aW5nIHRoZSBtZXNoIHNjYWxpbmcg
YWxvbmcgZWFjaCBsb2NhbCBheGlzIFgsIFksIFouICBEZWZhdWx0IGlzICgxLjAsIDEuMCwgMS4w
KQorICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9zY2FsaW5nOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChu
ZXdTY2FsaW5nKSB7CisgICAgICAgICAgICB0aGlzLl9zY2FsaW5nID0gbmV3U2NhbGluZzsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFic3RyYWN0TWVzaC5w
cm90b3R5cGUsICJpc0Jsb2NrZWQiLCB7CisgICAgICAgIC8vIE1ldGhvZHMKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWVzaCBpcyBibG9ja2VkLiBJbXBsZW1l
bnRlZCBieSBjaGlsZCBjbGFzc2VzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
LyoqCisgICAgICogUmV0dXJucyB0aGUgbWVzaCBpdHNlbGYgYnkgZGVmYXVsdC4gSW1wbGVtZW50
ZWQgYnkgY2hpbGQgY2xhc3NlcworICAgICAqIEBwYXJhbSBjYW1lcmEgZGVmaW5lcyB0aGUgY2Ft
ZXJhIHRvIHVzZSB0byBwaWNrIHRoZSByaWdodCBMT0QgbGV2ZWwKKyAgICAgKiBAcmV0dXJucyB0
aGUgY3VycmVudEFic3RyYWN0TWVzaAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5
cGUuZ2V0TE9EID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgMCBieSBkZWZhdWx0LiBJbXBsZW1lbnRlZCBi
eSBjaGlsZCBjbGFzc2VzCisgICAgICogQHJldHVybnMgYW4gaW50ZWdlcgorICAgICAqLworICAg
IEFic3RyYWN0TWVzaC5wcm90b3R5cGUuZ2V0VG90YWxWZXJ0aWNlcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgcG9z
aXRpdmUgaW50ZWdlciA6IHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kaWNlcyBpbiB0aGlzIG1lc2gg
Z2VvbWV0cnkuCisgICAgICogQHJldHVybnMgdGhlIG51bW5lciBvZiBpbmRpY2VzIG9yIHplcm8g
aWYgdGhlIG1lc2ggaGFzIG5vIGdlb21ldHJ5LgorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5w
cm90b3R5cGUuZ2V0VG90YWxJbmRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
MDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgbnVsbCBieSBkZWZhdWx0LiBJbXBs
ZW1lbnRlZCBieSBjaGlsZCBjbGFzc2VzCisgICAgICogQHJldHVybnMgbnVsbAorICAgICAqLwor
ICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuZ2V0SW5kaWNlcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBh
cnJheSBvZiB0aGUgcmVxdWVzdGVkIHZlcnRleCBkYXRhIGtpbmQuIEltcGxlbWVudGVkIGJ5IGNo
aWxkIGNsYXNzZXMKKyAgICAgKiBAcGFyYW0ga2luZCBkZWZpbmVzIHRoZSB2ZXJ0ZXggZGF0YSBr
aW5kIHRvIHVzZQorICAgICAqIEByZXR1cm5zIG51bGwKKyAgICAgKi8KKyAgICBBYnN0cmFjdE1l
c2gucHJvdG90eXBlLmdldFZlcnRpY2VzRGF0YSA9IGZ1bmN0aW9uIChraW5kKSB7CisgICAgICAg
IHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgdmVydGV4IGRh
dGEgb2YgdGhlIG1lc2ggZ2VvbWV0cnkgZm9yIHRoZSByZXF1ZXN0ZWQgYGtpbmRgLgorICAgICAq
IElmIHRoZSBtZXNoIGhhcyBubyBnZW9tZXRyeSwgYSBuZXcgR2VvbWV0cnkgb2JqZWN0IGlzIHNl
dCB0byB0aGUgbWVzaCBhbmQgdGhlbiBwYXNzZWQgdGhpcyB2ZXJ0ZXggZGF0YS4KKyAgICAgKiBO
b3RlIHRoYXQgYSBuZXcgdW5kZXJseWluZyBWZXJ0ZXhCdWZmZXIgb2JqZWN0IGlzIGNyZWF0ZWQg
ZWFjaCBjYWxsLgorICAgICAqIElmIHRoZSBga2luZGAgaXMgdGhlIGBQb3NpdGlvbktpbmRgLCB0
aGUgbWVzaCBCb3VuZGluZ0luZm8gaXMgcmVuZXdlZCwgc28gdGhlIGJvdW5kaW5nIGJveCBhbmQg
c3BoZXJlLCBhbmQgdGhlIG1lc2ggV29ybGQgTWF0cml4IGlzIHJlY29tcHV0ZWQuCisgICAgICog
QHBhcmFtIGtpbmQgZGVmaW5lcyB2ZXJ0ZXggZGF0YSBraW5kOgorICAgICAqICogVmVydGV4QnVm
ZmVyLlBvc2l0aW9uS2luZAorICAgICAqICogVmVydGV4QnVmZmVyLlVWS2luZAorICAgICAqICog
VmVydGV4QnVmZmVyLlVWMktpbmQKKyAgICAgKiAqIFZlcnRleEJ1ZmZlci5VVjNLaW5kCisgICAg
ICogKiBWZXJ0ZXhCdWZmZXIuVVY0S2luZAorICAgICAqICogVmVydGV4QnVmZmVyLlVWNUtpbmQK
KyAgICAgKiAqIFZlcnRleEJ1ZmZlci5VVjZLaW5kCisgICAgICogKiBWZXJ0ZXhCdWZmZXIuQ29s
b3JLaW5kCisgICAgICogKiBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzS2luZAorICAgICAq
ICogVmVydGV4QnVmZmVyLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZAorICAgICAqICogVmVydGV4
QnVmZmVyLk1hdHJpY2VzV2VpZ2h0c0tpbmQKKyAgICAgKiAqIFZlcnRleEJ1ZmZlci5NYXRyaWNl
c1dlaWdodHNFeHRyYUtpbmQKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHNv
dXJjZQorICAgICAqIEBwYXJhbSB1cGRhdGFibGUgZGVmaW5lcyBpZiB0aGUgZGF0YSBtdXN0IGJl
IGZsYWdnZWQgYXMgdXBkYXRhYmxlIChvciBzdGF0aWMpCisgICAgICogQHBhcmFtIHN0cmlkZSBk
ZWZpbmVzIHRoZSB2ZXJ0ZXggc3RyaWRlIChzaXplIG9mIGFuIGVudGlyZSB2ZXJ0ZXgpLiBDYW4g
YmUgbnVsbCBhbmQgaW4gdGhpcyBjYXNlIHdpbGwgYmUgZGVkdWNlZCBmcm9tIHZlcnRleCBkYXRh
IGtpbmQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICovCisgICAgQWJz
dHJhY3RNZXNoLnByb3RvdHlwZS5zZXRWZXJ0aWNlc0RhdGEgPSBmdW5jdGlvbiAoa2luZCwgZGF0
YSwgdXBkYXRhYmxlLCBzdHJpZGUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBleGlzdGluZyB2ZXJ0ZXggZGF0YSBvZiB0aGUgbWVz
aCBnZW9tZXRyeSBmb3IgdGhlIHJlcXVlc3RlZCBga2luZGAuCisgICAgICogSWYgdGhlIG1lc2gg
aGFzIG5vIGdlb21ldHJ5LCBpdCBpcyBzaW1wbHkgcmV0dXJuZWQgYXMgaXQgaXMuCisgICAgICog
QHBhcmFtIGtpbmQgZGVmaW5lcyB2ZXJ0ZXggZGF0YSBraW5kOgorICAgICAqICogVmVydGV4QnVm
ZmVyLlBvc2l0aW9uS2luZAorICAgICAqICogVmVydGV4QnVmZmVyLlVWS2luZAorICAgICAqICog
VmVydGV4QnVmZmVyLlVWMktpbmQKKyAgICAgKiAqIFZlcnRleEJ1ZmZlci5VVjNLaW5kCisgICAg
ICogKiBWZXJ0ZXhCdWZmZXIuVVY0S2luZAorICAgICAqICogVmVydGV4QnVmZmVyLlVWNUtpbmQK
KyAgICAgKiAqIFZlcnRleEJ1ZmZlci5VVjZLaW5kCisgICAgICogKiBWZXJ0ZXhCdWZmZXIuQ29s
b3JLaW5kCisgICAgICogKiBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzS2luZAorICAgICAq
ICogVmVydGV4QnVmZmVyLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZAorICAgICAqICogVmVydGV4
QnVmZmVyLk1hdHJpY2VzV2VpZ2h0c0tpbmQKKyAgICAgKiAqIFZlcnRleEJ1ZmZlci5NYXRyaWNl
c1dlaWdodHNFeHRyYUtpbmQKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHNv
dXJjZQorICAgICAqIEBwYXJhbSB1cGRhdGVFeHRlbmRzIElmIGBraW5kYCBpcyBgUG9zaXRpb25L
aW5kYCBhbmQgaWYgYHVwZGF0ZUV4dGVuZHNgIGlzIHRydWUsIHRoZSBtZXNoIEJvdW5kaW5nSW5m
byBpcyByZW5ld2VkLCBzbyB0aGUgYm91bmRpbmcgYm94IGFuZCBzcGhlcmUsIGFuZCB0aGUgbWVz
aCBXb3JsZCBNYXRyaXggaXMgcmVjb21wdXRlZAorICAgICAqIEBwYXJhbSBtYWtlSXRVbmlxdWUg
SWYgdHJ1ZSwgYSBuZXcgZ2xvYmFsIGdlb21ldHJ5IGlzIGNyZWF0ZWQgZnJvbSB0aGlzIGRhdGEg
YW5kIGlzIHNldCB0byB0aGUgbWVzaAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gK
KyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLnVwZGF0ZVZlcnRpY2VzRGF0YSA9
IGZ1bmN0aW9uIChraW5kLCBkYXRhLCB1cGRhdGVFeHRlbmRzLCBtYWtlSXRVbmlxdWUpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBtZXNo
IGluZGljZXMsCisgICAgICogSWYgdGhlIG1lc2ggaGFzIG5vIGdlb21ldHJ5LCBhIG5ldyBHZW9t
ZXRyeSBvYmplY3QgaXMgY3JlYXRlZCBhbmQgc2V0IHRvIHRoZSBtZXNoLgorICAgICAqIEBwYXJh
bSBpbmRpY2VzIEV4cGVjdHMgYW4gYXJyYXkgcG9wdWxhdGVkIHdpdGggaW50ZWdlcnMgb3IgYSB0
eXBlZCBhcnJheSAoSW50MzJBcnJheSwgVWludDMyQXJyYXksIFVpbnQxNkFycmF5KQorICAgICAq
IEBwYXJhbSB0b3RhbFZlcnRpY2VzIERlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNl
cworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBBYnN0cmFj
dE1lc2gucHJvdG90eXBlLnNldEluZGljZXMgPSBmdW5jdGlvbiAoaW5kaWNlcywgdG90YWxWZXJ0
aWNlcykgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdl
dHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgc3BlY2lmaWMgdmVydGV4IGRhdGEgaXMgcHJlc2Vu
dAorICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMgdGhlIHZlcnRleCBkYXRhIGtpbmQgdG8gdXNl
CisgICAgICogQHJldHVybnMgdHJ1ZSBpcyBkYXRhIGtpbmQgaXMgcHJlc2VudAorICAgICAqLwor
ICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuaXNWZXJ0aWNlc0RhdGFQcmVzZW50ID0gZnVuY3Rp
b24gKGtpbmQpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmV0dXJucyB0aGUgbWVzaCBCb3VuZGluZ0luZm8gb2JqZWN0IG9yIGNyZWF0ZXMgYSBuZXcg
b25lIGFuZCByZXR1cm5zIGlmIGl0IHdhcyB1bmRlZmluZWQuCisgICAgICogTm90ZSB0aGF0IGl0
IHJldHVybnMgYSBzaGFsbG93IGJvdW5kaW5nIG9mIHRoZSBtZXNoIChpLmUuIGl0IGRvZXMgbm90
IGluY2x1ZGUgY2hpbGRyZW4pLgorICAgICAqIFRvIGdldCB0aGUgZnVsbCBib3VuZGluZyBvZiBh
bGwgY2hpbGRyZW4sIGNhbGwgYGdldEhpZXJhcmNoeUJvdW5kaW5nVmVjdG9yc2AgaW5zdGVhZC4K
KyAgICAgKiBAcmV0dXJucyBhIEJvdW5kaW5nSW5mbworICAgICAqLworICAgIEFic3RyYWN0TWVz
aC5wcm90b3R5cGUuZ2V0Qm91bmRpbmdJbmZvID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5fbWFzdGVyTWVzaCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc3Rlck1lc2gu
Z2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9ib3VuZGlu
Z0luZm8pIHsKKyAgICAgICAgICAgIC8vIHRoaXMuX2JvdW5kaW5nSW5mbyBpcyBiZWluZyBjcmVh
dGVkIGhlcmUKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJvdW5kaW5nSW5mbygpOworICAgICAg
ICB9CisgICAgICAgIC8vIGNhbm5vdCBiZSBudWxsLgorICAgICAgICByZXR1cm4gdGhpcy5fYm91
bmRpbmdJbmZvOworICAgIH07CisgICAgLyoqCisgICAgICogVW5pZm9ybWx5IHNjYWxlcyB0aGUg
bWVzaCB0byBmaXQgaW5zaWRlIG9mIGEgdW5pdCBjdWJlICgxIFggMSBYIDEgdW5pdHMpCisgICAg
ICogQHBhcmFtIGluY2x1ZGVEZXNjZW5kYW50cyBVc2UgdGhlIGhpZXJhcmNoeSdzIGJvdW5kaW5n
IGJveCBpbnN0ZWFkIG9mIHRoZSBtZXNoJ3MgYm91bmRpbmcgYm94LiBEZWZhdWx0IGlzIGZhbHNl
CisgICAgICogQHBhcmFtIGlnbm9yZVJvdGF0aW9uIGlnbm9yZSByb3RhdGlvbiB3aGVuIGNvbXB1
dGluZyB0aGUgc2NhbGUgKGllLiBvYmplY3Qgd2lsbCBiZSBheGlzIGFsaWduZWQpLiBEZWZhdWx0
IGlzIGZhbHNlCisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBwcmVkaWNhdGUgdGhhdCBpcyBwYXNz
ZWQgaW4gdG8gZ2V0SGllcmFyY2h5Qm91bmRpbmdWZWN0b3JzIHdoZW4gc2VsZWN0aW5nIHdoaWNo
IG9iamVjdCBzaG91bGQgYmUgaW5jbHVkZWQgd2hlbiBzY2FsaW5nCisgICAgICogQHJldHVybnMg
dGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUubm9y
bWFsaXplVG9Vbml0Q3ViZSA9IGZ1bmN0aW9uIChpbmNsdWRlRGVzY2VuZGFudHMsIGlnbm9yZVJv
dGF0aW9uLCBwcmVkaWNhdGUpIHsKKyAgICAgICAgaWYgKGluY2x1ZGVEZXNjZW5kYW50cyA9PT0g
dm9pZCAwKSB7IGluY2x1ZGVEZXNjZW5kYW50cyA9IHRydWU7IH0KKyAgICAgICAgaWYgKGlnbm9y
ZVJvdGF0aW9uID09PSB2b2lkIDApIHsgaWdub3JlUm90YXRpb24gPSBmYWxzZTsgfQorICAgICAg
ICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5ub3JtYWxpemVUb1VuaXRDdWJlLmNhbGwodGhpcywg
aW5jbHVkZURlc2NlbmRhbnRzLCBpZ25vcmVSb3RhdGlvbiwgcHJlZGljYXRlKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIE92ZXJ3cml0ZSB0aGUgY3VycmVudCBib3VuZGluZyBpbmZvCisgICAg
ICogQHBhcmFtIGJvdW5kaW5nSW5mbyBkZWZpbmVzIHRoZSBuZXcgYm91bmRpbmcgaW5mbworICAg
ICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gu
cHJvdG90eXBlLnNldEJvdW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChib3VuZGluZ0luZm8pIHsKKyAg
ICAgICAgdGhpcy5fYm91bmRpbmdJbmZvID0gYm91bmRpbmdJbmZvOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJv
dG90eXBlLCAidXNlQm9uZXMiLCB7CisgICAgICAgIC8qKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0
aW5nIGlmIHRoaXMgbWVzaCBoYXMgc2tpbm5pbmcgZGF0YSBhbmQgYW4gYXR0YWNoZWQgc2tlbGV0
b24gKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gKHRo
aXMuc2tlbGV0b24gJiYgdGhpcy5nZXRTY2VuZSgpLnNrZWxldG9uc0VuYWJsZWQgJiYgdGhpcy5p
c1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCkgJiYgdGhpcy5pc1Zl
cnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCkpOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuX3By
ZUFjdGl2YXRlID0gZnVuY3Rpb24gKCkgeworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLl9wcmVBY3RpdmF0ZUZvckludGVybWVkaWF0ZVJlbmRl
cmluZyA9IGZ1bmN0aW9uIChyZW5kZXJJZCkgeworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLl9hY3RpdmF0ZSA9IGZ1bmN0aW9uIChyZW5kZXJJ
ZCwgaW50ZXJtZWRpYXRlUmVuZGVyaW5nKSB7CisgICAgICAgIHRoaXMuX3JlbmRlcklkID0gcmVu
ZGVySWQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLl9wb3N0QWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAg
QWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fZnJlZXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICAv
LyBEbyBub3RoaW5nCisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFic3RyYWN0TWVz
aC5wcm90b3R5cGUuX3VuRnJlZXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBEbyBub3Ro
aW5nCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHdvcmxkIG1hdHJp
eAorICAgICAqIEByZXR1cm5zIGEgTWF0cml4CisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnBy
b3RvdHlwZS5nZXRXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMu
X21hc3Rlck1lc2ggJiYgdGhpcy5iaWxsYm9hcmRNb2RlID09PSBfTWVzaGVzX3RyYW5zZm9ybU5v
ZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVHJhbnNmb3JtTm9kZSJdLkJJTExCT0FS
RE1PREVfTk9ORSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc3Rlck1lc2guZ2V0V29y
bGRNYXRyaXgoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5n
ZXRXb3JsZE1hdHJpeC5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLl9nZXRXb3JsZE1hdHJpeERldGVybWluYW50ID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fbWFzdGVyTWVzaCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX21hc3Rlck1lc2guX2dldFdvcmxkTWF0cml4RGV0ZXJtaW5hbnQoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fZ2V0V29ybGRNYXRyaXhE
ZXRlcm1pbmFudC5jYWxsKHRoaXMpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEFic3RyYWN0TWVzaC5wcm90b3R5cGUsICJpc0FuSW5zdGFuY2UiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgbWVzaCBpcyBhbiBp
bnN0YW5jZSBvciBhIHJlZ3VsYXIgbWVzaAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdE1lc2gucHJvdG90eXBlLCAiaGFzSW5z
dGFuY2VzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNh
dGluZyBpZiB0aGlzIG1lc2ggaGFzIGluc3RhbmNlcworICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUG9pbnQgb2Yg
VmlldyBNb3ZlbWVudCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvKioK
KyAgICAgKiBQZXJmb3JtIHJlbGF0aXZlIHBvc2l0aW9uIGNoYW5nZSBmcm9tIHRoZSBwb2ludCBv
ZiB2aWV3IG9mIGJlaGluZCB0aGUgZnJvbnQgb2YgdGhlIG1lc2guCisgICAgICogVGhpcyBpcyBw
ZXJmb3JtZWQgdGFraW5nIGludG8gYWNjb3VudCB0aGUgbWVzaGVzIGN1cnJlbnQgcm90YXRpb24s
IHNvIHlvdSBkbyBub3QgaGF2ZSB0byBjYXJlLgorICAgICAqIFN1cHBvcnRzIGRlZmluaXRpb24g
b2YgbWVzaCBmYWNpbmcgZm9yd2FyZCBvciBiYWNrd2FyZAorICAgICAqIEBwYXJhbSBhbW91bnRS
aWdodCBkZWZpbmVzIHRoZSBkaXN0YW5jZSBvbiB0aGUgcmlnaHQgYXhpcworICAgICAqIEBwYXJh
bSBhbW91bnRVcCBkZWZpbmVzIHRoZSBkaXN0YW5jZSBvbiB0aGUgdXAgYXhpcworICAgICAqIEBw
YXJhbSBhbW91bnRGb3J3YXJkIGRlZmluZXMgdGhlIGRpc3RhbmNlIG9uIHRoZSBmb3J3YXJkIGF4
aXMKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICovCisgICAgQWJzdHJh
Y3RNZXNoLnByb3RvdHlwZS5tb3ZlUE9WID0gZnVuY3Rpb24gKGFtb3VudFJpZ2h0LCBhbW91bnRV
cCwgYW1vdW50Rm9yd2FyZCkgeworICAgICAgICB0aGlzLnBvc2l0aW9uLmFkZEluUGxhY2UodGhp
cy5jYWxjTW92ZVBPVihhbW91bnRSaWdodCwgYW1vdW50VXAsIGFtb3VudEZvcndhcmQpKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxjdWxhdGUgcmVs
YXRpdmUgcG9zaXRpb24gY2hhbmdlIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgYmVoaW5kIHRo
ZSBmcm9udCBvZiB0aGUgbWVzaC4KKyAgICAgKiBUaGlzIGlzIHBlcmZvcm1lZCB0YWtpbmcgaW50
byBhY2NvdW50IHRoZSBtZXNoZXMgY3VycmVudCByb3RhdGlvbiwgc28geW91IGRvIG5vdCBoYXZl
IHRvIGNhcmUuCisgICAgICogU3VwcG9ydHMgZGVmaW5pdGlvbiBvZiBtZXNoIGZhY2luZyBmb3J3
YXJkIG9yIGJhY2t3YXJkCisgICAgICogQHBhcmFtIGFtb3VudFJpZ2h0IGRlZmluZXMgdGhlIGRp
c3RhbmNlIG9uIHRoZSByaWdodCBheGlzCisgICAgICogQHBhcmFtIGFtb3VudFVwIGRlZmluZXMg
dGhlIGRpc3RhbmNlIG9uIHRoZSB1cCBheGlzCisgICAgICogQHBhcmFtIGFtb3VudEZvcndhcmQg
ZGVmaW5lcyB0aGUgZGlzdGFuY2Ugb24gdGhlIGZvcndhcmQgYXhpcworICAgICAqIEByZXR1cm5z
IHRoZSBuZXcgZGlzcGxhY2VtZW50IHZlY3RvcgorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5w
cm90b3R5cGUuY2FsY01vdmVQT1YgPSBmdW5jdGlvbiAoYW1vdW50UmlnaHQsIGFtb3VudFVwLCBh
bW91bnRGb3J3YXJkKSB7CisgICAgICAgIHZhciByb3RNYXRyaXggPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdKCk7CisgICAgICAg
IHZhciByb3RRdWF0ZXJuaW9uID0gKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSA/IHRoaXMucm90
YXRpb25RdWF0ZXJuaW9uIDogX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbllhd1BpdGNoUm9sbCh0aGlzLnJvdGF0aW9u
LnksIHRoaXMucm90YXRpb24ueCwgdGhpcy5yb3RhdGlvbi56KTsKKyAgICAgICAgcm90UXVhdGVy
bmlvbi50b1JvdGF0aW9uTWF0cml4KHJvdE1hdHJpeCk7CisgICAgICAgIHZhciB0cmFuc2xhdGlv
bkRlbHRhID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHZhciBkZWZGb3J3YXJkTXVsdCA9IHRoaXMuZGVm
aW5lZEZhY2luZ0ZvcndhcmQgPyAtMSA6IDE7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0
ZXNGcm9tRmxvYXRzVG9SZWYoYW1vdW50UmlnaHQgKiBkZWZGb3J3YXJkTXVsdCwgYW1vdW50VXAs
IGFtb3VudEZvcndhcmQgKiBkZWZGb3J3YXJkTXVsdCwgcm90TWF0cml4LCB0cmFuc2xhdGlvbkRl
bHRhKTsKKyAgICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uRGVsdGE7CisgICAgfTsKKyAgICAvLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFBvaW50IG9mIFZpZXcgUm90YXRpb24g
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLyoqCisgICAgICogUGVyZm9y
bSByZWxhdGl2ZSByb3RhdGlvbiBjaGFuZ2UgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBiZWhp
bmQgdGhlIGZyb250IG9mIHRoZSBtZXNoLgorICAgICAqIFN1cHBvcnRzIGRlZmluaXRpb24gb2Yg
bWVzaCBmYWNpbmcgZm9yd2FyZCBvciBiYWNrd2FyZAorICAgICAqIEBwYXJhbSBmbGlwQmFjayBk
ZWZpbmVzIHRoZSBmbGlwCisgICAgICogQHBhcmFtIHR3aXJsQ2xvY2t3aXNlIGRlZmluZXMgdGhl
IHR3aXJsCisgICAgICogQHBhcmFtIHRpbHRSaWdodCBkZWZpbmVzIHRoZSB0aWx0CisgICAgICog
QHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90
b3R5cGUucm90YXRlUE9WID0gZnVuY3Rpb24gKGZsaXBCYWNrLCB0d2lybENsb2Nrd2lzZSwgdGls
dFJpZ2h0KSB7CisgICAgICAgIHRoaXMucm90YXRpb24uYWRkSW5QbGFjZSh0aGlzLmNhbGNSb3Rh
dGVQT1YoZmxpcEJhY2ssIHR3aXJsQ2xvY2t3aXNlLCB0aWx0UmlnaHQpKTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxjdWxhdGUgcmVsYXRpdmUgcm90
YXRpb24gY2hhbmdlIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgYmVoaW5kIHRoZSBmcm9udCBv
ZiB0aGUgbWVzaC4KKyAgICAgKiBTdXBwb3J0cyBkZWZpbml0aW9uIG9mIG1lc2ggZmFjaW5nIGZv
cndhcmQgb3IgYmFja3dhcmQuCisgICAgICogQHBhcmFtIGZsaXBCYWNrIGRlZmluZXMgdGhlIGZs
aXAKKyAgICAgKiBAcGFyYW0gdHdpcmxDbG9ja3dpc2UgZGVmaW5lcyB0aGUgdHdpcmwKKyAgICAg
KiBAcGFyYW0gdGlsdFJpZ2h0IGRlZmluZXMgdGhlIHRpbHQKKyAgICAgKiBAcmV0dXJucyB0aGUg
bmV3IHJvdGF0aW9uIHZlY3RvcgorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUu
Y2FsY1JvdGF0ZVBPViA9IGZ1bmN0aW9uIChmbGlwQmFjaywgdHdpcmxDbG9ja3dpc2UsIHRpbHRS
aWdodCkgeworICAgICAgICB2YXIgZGVmRm9yd2FyZE11bHQgPSB0aGlzLmRlZmluZWRGYWNpbmdG
b3J3YXJkID8gMSA6IC0xOworICAgICAgICByZXR1cm4gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oZmxpcEJhY2sgKiBkZWZGb3J3
YXJkTXVsdCwgdHdpcmxDbG9ja3dpc2UsIHRpbHRSaWdodCAqIGRlZkZvcndhcmRNdWx0KTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlY29tcHV0ZXMgYW5kIHNldHMgYSBu
ZXcgQm91bmRpbmdJbmZvIHRvIHRoZSBtZXNoIHVubGVzcyBpdCBpcyBsb2NrZWQuCisgICAgICog
VGhpcyBtZWFucyB0aGUgbWVzaCB1bmRlcmx5aW5nIGJvdW5kaW5nIGJveCBhbmQgc3BoZXJlIGFy
ZSByZWNvbXB1dGVkLgorICAgICAqIEBwYXJhbSBhcHBseVNrZWxldG9uIGRlZmluZXMgd2hldGhl
ciB0byBhcHBseSB0aGUgc2tlbGV0b24gYmVmb3JlIGNvbXB1dGluZyB0aGUgYm91bmRpbmcgaW5m
bworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBBYnN0cmFj
dE1lc2gucHJvdG90eXBlLnJlZnJlc2hCb3VuZGluZ0luZm8gPSBmdW5jdGlvbiAoYXBwbHlTa2Vs
ZXRvbikgeworICAgICAgICBpZiAoYXBwbHlTa2VsZXRvbiA9PT0gdm9pZCAwKSB7IGFwcGx5U2tl
bGV0b24gPSBmYWxzZTsgfQorICAgICAgICBpZiAodGhpcy5fYm91bmRpbmdJbmZvICYmIHRoaXMu
X2JvdW5kaW5nSW5mby5pc0xvY2tlZCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fcmVmcmVzaEJvdW5kaW5nSW5mbyh0aGlzLl9nZXRQb3NpdGlv
bkRhdGEoYXBwbHlTa2VsZXRvbiksIG51bGwpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fcmVmcmVz
aEJvdW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChkYXRhLCBiaWFzKSB7CisgICAgICAgIGlmIChkYXRh
KSB7CisgICAgICAgICAgICB2YXIgZXh0ZW5kID0gT2JqZWN0KF9NYXRoc19tYXRoX2Z1bmN0aW9u
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siZXh0cmFjdE1pbkFuZE1heCJdKShkYXRh
LCAwLCB0aGlzLmdldFRvdGFsVmVydGljZXMoKSwgYmlhcyk7CisgICAgICAgICAgICBpZiAodGhp
cy5fYm91bmRpbmdJbmZvKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYm91bmRpbmdJbmZvLnJl
Q29uc3RydWN0KGV4dGVuZC5taW5pbXVtLCBleHRlbmQubWF4aW11bSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ib3VuZGluZ0luZm8g
PSBuZXcgX0N1bGxpbmdfYm91bmRpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IkJvdW5kaW5nSW5mbyJdKGV4dGVuZC5taW5pbXVtLCBleHRlbmQubWF4aW11bSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuc3ViTWVzaGVzKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5zdWJNZXNoZXMubGVuZ3RoOyBp
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zdWJNZXNoZXNbaW5kZXhdLnJlZnJlc2hC
b3VuZGluZ0luZm8oZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fdXBkYXRlQm91bmRpbmdJbmZvKCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAg
IEFic3RyYWN0TWVzaC5wcm90b3R5cGUuX2dldFBvc2l0aW9uRGF0YSA9IGZ1bmN0aW9uIChhcHBs
eVNrZWxldG9uKSB7CisgICAgICAgIHZhciBkYXRhID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0u
UG9zaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKGRhdGEgJiYgYXBwbHlTa2VsZXRvbiAmJiB0aGlz
LnNrZWxldG9uKSB7CisgICAgICAgICAgICBkYXRhID0gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVG9vbHMiXS5TbGljZShkYXRhKTsKKyAgICAgICAgICAgIHRoaXMu
X2dlbmVyYXRlUG9pbnRzQXJyYXkoKTsKKyAgICAgICAgICAgIHZhciBtYXRyaWNlc0luZGljZXNE
YXRhID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCk7CisgICAg
ICAgICAgICB2YXIgbWF0cmljZXNXZWlnaHRzRGF0YSA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlcnRleEJ1ZmZlciJd
Lk1hdHJpY2VzV2VpZ2h0c0tpbmQpOworICAgICAgICAgICAgaWYgKG1hdHJpY2VzV2VpZ2h0c0Rh
dGEgJiYgbWF0cmljZXNJbmRpY2VzRGF0YSkgeworICAgICAgICAgICAgICAgIHZhciBuZWVkRXh0
cmFzID0gdGhpcy5udW1Cb25lSW5mbHVlbmNlcnMgPiA0OworICAgICAgICAgICAgICAgIHZhciBt
YXRyaWNlc0luZGljZXNFeHRyYURhdGEgPSBuZWVkRXh0cmFzID8gdGhpcy5nZXRWZXJ0aWNlc0Rh
dGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVm
ZmVyIl0uTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kKSA6IG51bGw7CisgICAgICAgICAgICAgICAg
dmFyIG1hdHJpY2VzV2VpZ2h0c0V4dHJhRGF0YSA9IG5lZWRFeHRyYXMgPyB0aGlzLmdldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0
ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQpIDogbnVsbDsKKyAgICAgICAgICAg
ICAgICB0aGlzLnNrZWxldG9uLnByZXBhcmUoKTsKKyAgICAgICAgICAgICAgICB2YXIgc2tlbGV0
b25NYXRyaWNlcyA9IHRoaXMuc2tlbGV0b24uZ2V0VHJhbnNmb3JtTWF0cmljZXModGhpcyk7Cisg
ICAgICAgICAgICAgICAgdmFyIHRlbXBWZWN0b3IgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF07CisgICAgICAg
ICAgICAgICAgdmFyIGZpbmFsTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF07CisgICAgICAgICAgICAg
ICAgdmFyIHRlbXBNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsxXTsKKyAgICAgICAgICAgICAgICB2YXIg
bWF0V2VpZ2h0SWR4ID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4ICs9IDMsIG1hdFdlaWdodElkeCArPSA0KSB7CisgICAg
ICAgICAgICAgICAgICAgIGZpbmFsTWF0cml4LnJlc2V0KCk7CisgICAgICAgICAgICAgICAgICAg
IHZhciBpbmY7CisgICAgICAgICAgICAgICAgICAgIHZhciB3ZWlnaHQ7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW5mID0gMDsgaW5mIDwgNDsgaW5mKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdlaWdodCA9IG1hdHJpY2VzV2VpZ2h0c0RhdGFbbWF0V2VpZ2h0SWR4ICsgaW5mXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIk1hdHJpeCJdLkZyb21GbG9hdDMyQXJyYXlUb1JlZlNjYWxlZChza2VsZXRvbk1hdHJp
Y2VzLCBNYXRoLmZsb29yKG1hdHJpY2VzSW5kaWNlc0RhdGFbbWF0V2VpZ2h0SWR4ICsgaW5mXSAq
IDE2KSwgd2VpZ2h0LCB0ZW1wTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aW5hbE1hdHJpeC5hZGRUb1NlbGYodGVtcE1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRF
eHRyYXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW5mID0gMDsgaW5mIDwgNDsg
aW5mKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQgPSBtYXRyaWNlc1dl
aWdodHNFeHRyYURhdGFbbWF0V2VpZ2h0SWR4ICsgaW5mXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAod2VpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4
Il0uRnJvbUZsb2F0MzJBcnJheVRvUmVmU2NhbGVkKHNrZWxldG9uTWF0cmljZXMsIE1hdGguZmxv
b3IobWF0cmljZXNJbmRpY2VzRXh0cmFEYXRhW21hdFdlaWdodElkeCArIGluZl0gKiAxNiksIHdl
aWdodCwgdGVtcE1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFs
TWF0cml4LmFkZFRvU2VsZih0ZW1wTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc0Zyb21GbG9hdHNUb1JlZihk
YXRhW2luZGV4XSwgZGF0YVtpbmRleCArIDFdLCBkYXRhW2luZGV4ICsgMl0sIGZpbmFsTWF0cml4
LCB0ZW1wVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcFZlY3Rvci50b0FycmF5KGRh
dGEsIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9ucykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25zW2luZGV4IC8gM10uY29weUZy
b20odGVtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuX3VwZGF0ZUJv
dW5kaW5nSW5mbyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGVmZmVjdGl2ZU1lc2ggPSB0
aGlzLl9lZmZlY3RpdmVNZXNoOworICAgICAgICBpZiAodGhpcy5fYm91bmRpbmdJbmZvKSB7Cisg
ICAgICAgICAgICB0aGlzLl9ib3VuZGluZ0luZm8udXBkYXRlKGVmZmVjdGl2ZU1lc2gud29ybGRN
YXRyaXhGcm9tQ2FjaGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
dGhpcy5fYm91bmRpbmdJbmZvID0gbmV3IF9DdWxsaW5nX2JvdW5kaW5nSW5mb19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJCb3VuZGluZ0luZm8iXSh0aGlzLmFic29sdXRlUG9zaXRpb24s
IHRoaXMuYWJzb2x1dGVQb3NpdGlvbiwgZWZmZWN0aXZlTWVzaC53b3JsZE1hdHJpeEZyb21DYWNo
ZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdXBkYXRlU3ViTWVzaGVzQm91bmRpbmdJbmZv
KGVmZmVjdGl2ZU1lc2gud29ybGRNYXRyaXhGcm9tQ2FjaGUpOworICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlw
ZS5fdXBkYXRlU3ViTWVzaGVzQm91bmRpbmdJbmZvID0gZnVuY3Rpb24gKG1hdHJpeCkgeworICAg
ICAgICBpZiAoIXRoaXMuc3ViTWVzaGVzKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgY291bnQgPSB0aGlzLnN1Yk1lc2hlcy5sZW5ndGg7CisgICAg
ICAgIGZvciAodmFyIHN1YkluZGV4ID0gMDsgc3ViSW5kZXggPCBjb3VudDsgc3ViSW5kZXgrKykg
eworICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSB0aGlzLnN1Yk1lc2hlc1tzdWJJbmRleF07Cisg
ICAgICAgICAgICBpZiAoY291bnQgPiAxIHx8ICFzdWJNZXNoLklzR2xvYmFsKSB7CisgICAgICAg
ICAgICAgICAgc3ViTWVzaC51cGRhdGVCb3VuZGluZ0luZm8obWF0cml4KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKiBAaGlk
ZGVuICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fYWZ0ZXJDb21wdXRlV29ybGRNYXRy
aXggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLmRvTm90U3luY0JvdW5kaW5nSW5m
bykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEJvdW5kaW5n
IGluZm8KKyAgICAgICAgdGhpcy5fdXBkYXRlQm91bmRpbmdJbmZvKCk7CisgICAgfTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgIl9lZmZlY3RpdmVN
ZXNoIiwgeworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiAodGhpcy5za2VsZXRvbiAmJiB0aGlzLnNrZWxldG9uLm92
ZXJyaWRlTWVzaCkgfHwgdGhpczsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICog
UmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG1lc2ggaXMgd2l0aGluIHRoZSBmcnVzdHVtIGRlZmluZWQg
YnkgdGhlIHBhc3NlZCBhcnJheSBvZiBwbGFuZXMuCisgICAgICogQSBtZXNoIGlzIGluIHRoZSBm
cnVzdHVtIGlmIGl0cyBib3VuZGluZyBib3ggaW50ZXJzZWN0cyB0aGUgZnJ1c3R1bQorICAgICAq
IEBwYXJhbSBmcnVzdHVtUGxhbmVzIGRlZmluZXMgdGhlIGZydXN0dW0gdG8gdGVzdAorICAgICAq
IEByZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggaXMgaW4gdGhlIGZydXN0dW0gcGxhbmVzCisgICAg
ICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5pc0luRnJ1c3R1bSA9IGZ1bmN0aW9uIChm
cnVzdHVtUGxhbmVzKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9ib3VuZGluZ0luZm8gIT09IG51
bGwgJiYgdGhpcy5fYm91bmRpbmdJbmZvLmlzSW5GcnVzdHVtKGZydXN0dW1QbGFuZXMsIHRoaXMu
Y3VsbGluZ1N0cmF0ZWd5KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYHRydWVg
IGlmIHRoZSBtZXNoIGlzIGNvbXBsZXRlbHkgaW4gdGhlIGZydXN0dW0gZGVmaW5lZCBiZSB0aGUg
cGFzc2VkIGFycmF5IG9mIHBsYW5lcy4KKyAgICAgKiBBIG1lc2ggaXMgY29tcGxldGVseSBpbiB0
aGUgZnJ1c3R1bSBpZiBpdHMgYm91bmRpbmcgYm94IGl0IGNvbXBsZXRlbHkgaW5zaWRlIHRoZSBm
cnVzdHVtLgorICAgICAqIEBwYXJhbSBmcnVzdHVtUGxhbmVzIGRlZmluZXMgdGhlIGZydXN0dW0g
dG8gdGVzdAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIG1lc2ggaXMgY29tcGxldGVseSBp
biB0aGUgZnJ1c3R1bSBwbGFuZXMKKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBl
LmlzQ29tcGxldGVseUluRnJ1c3R1bSA9IGZ1bmN0aW9uIChmcnVzdHVtUGxhbmVzKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9ib3VuZGluZ0luZm8gIT09IG51bGwgJiYgdGhpcy5fYm91bmRpbmdJ
bmZvLmlzQ29tcGxldGVseUluRnJ1c3R1bShmcnVzdHVtUGxhbmVzKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFRydWUgaWYgdGhlIG1lc2ggaW50ZXJzZWN0cyBhbm90aGVyIG1lc2ggb3IgYSBT
b2xpZFBhcnRpY2xlIG9iamVjdAorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgYSB0YXJnZXQg
bWVzaCBvciBTb2xpZFBhcnRpY2xlIHRvIHRlc3QKKyAgICAgKiBAcGFyYW0gcHJlY2lzZSBVbmxl
c3MgdGhlIHBhcmFtZXRlciBgcHJlY2lzZWAgaXMgc2V0IHRvIGB0cnVlYCB0aGUgaW50ZXJzZWN0
aW9uIGlzIGNvbXB1dGVkIGFjY29yZGluZyB0byBBeGlzIEFsaWduZWQgQm91bmRpbmcgQm94ZXMg
KEFBQkIpLCBlbHNlIGFjY29yZGluZyB0byBPQkIgKE9yaWVudGVkIEJCb3hlcykKKyAgICAgKiBA
cGFyYW0gaW5jbHVkZURlc2NlbmRhbnRzIENhbiBiZSBzZXQgdG8gdHJ1ZSB0byB0ZXN0IGlmIHRo
ZSBtZXNoIGRlZmluZWQgaW4gcGFyYW1ldGVycyBpbnRlcnNlY3RzIHdpdGggdGhlIGN1cnJlbnQg
bWVzaCBvciBhbnkgY2hpbGQgbWVzaGVzCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBp
cyBhbiBpbnRlcnNlY3Rpb24KKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLmlu
dGVyc2VjdHNNZXNoID0gZnVuY3Rpb24gKG1lc2gsIHByZWNpc2UsIGluY2x1ZGVEZXNjZW5kYW50
cykgeworICAgICAgICBpZiAocHJlY2lzZSA9PT0gdm9pZCAwKSB7IHByZWNpc2UgPSBmYWxzZTsg
fQorICAgICAgICBpZiAoIXRoaXMuX2JvdW5kaW5nSW5mbyB8fCAhbWVzaC5fYm91bmRpbmdJbmZv
KSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMuX2JvdW5kaW5nSW5mby5pbnRlcnNlY3RzKG1lc2guX2JvdW5kaW5nSW5mbywgcHJlY2lzZSkp
IHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpbmNs
dWRlRGVzY2VuZGFudHMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlz
LmdldENoaWxkTWVzaGVzKCk7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGNoaWxkID0gX2FbX2ldOworICAgICAgICAgICAgICAgIGlmIChjaGlsZC5pbnRlcnNl
Y3RzTWVzaChtZXNoLCBwcmVjaXNlLCB0cnVlKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVl
IGlmIHRoZSBwYXNzZWQgcG9pbnQgKFZlY3RvcjMpIGlzIGluc2lkZSB0aGUgbWVzaCBib3VuZGlu
ZyBib3gKKyAgICAgKiBAcGFyYW0gcG9pbnQgZGVmaW5lcyB0aGUgcG9pbnQgdG8gdGVzdAorICAg
ICAqIEByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gaW50ZXJzZWN0aW9uCisgICAgICovCisg
ICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5pbnRlcnNlY3RzUG9pbnQgPSBmdW5jdGlvbiAocG9p
bnQpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9ib3VuZGluZ0luZm8pIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fYm91bmRpbmdJbmZv
LmludGVyc2VjdHNQb2ludChwb2ludCk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQWJzdHJhY3RNZXNoLnByb3RvdHlwZSwgImNoZWNrQ29sbGlzaW9ucyIsIHsKKyAgICAgICAg
Ly8gQ29sbGlzaW9ucworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9v
bGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBtZXNoIGNhbiBiZSB1c2VkIGluIHRoZSBjb2xsaXNp
b24gZW5naW5lCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnls
b24xMDEvY2FtZXJhcyxfbWVzaF9jb2xsaXNpb25zX2FuZF9ncmF2aXR5CisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXNo
Q29sbGlzaW9uRGF0YS5fY2hlY2tDb2xsaXNpb25zOworICAgICAgICB9LAorICAgICAgICBzZXQ6
IGZ1bmN0aW9uIChjb2xsaXNpb25FbmFibGVkKSB7CisgICAgICAgICAgICB0aGlzLl9tZXNoQ29s
bGlzaW9uRGF0YS5fY2hlY2tDb2xsaXNpb25zID0gY29sbGlzaW9uRW5hYmxlZDsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFic3RyYWN0TWVzaC5wcm90b3R5
cGUsICJjb2xsaWRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgQ29sbGlkZXIg
b2JqZWN0IHVzZWQgdG8gY29tcHV0ZSBjb2xsaXNpb25zIChub3QgcGh5c2ljcykKKyAgICAgICAg
ICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9jYW1lcmFzLF9tZXNo
X2NvbGxpc2lvbnNfYW5kX2dyYXZpdHkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lc2hDb2xsaXNpb25EYXRhLl9jb2xs
aWRlcjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogTW92ZSB0aGUgbWVzaCB1
c2luZyBjb2xsaXNpb24gZW5naW5lCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vYmFieWxvbjEwMS9jYW1lcmFzLF9tZXNoX2NvbGxpc2lvbnNfYW5kX2dyYXZpdHkKKyAgICAg
KiBAcGFyYW0gZGlzcGxhY2VtZW50IGRlZmluZXMgdGhlIHJlcXVlc3RlZCBkaXNwbGFjZW1lbnQg
dmVjdG9yCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIEFi
c3RyYWN0TWVzaC5wcm90b3R5cGUubW92ZVdpdGhDb2xsaXNpb25zID0gZnVuY3Rpb24gKGRpc3Bs
YWNlbWVudCkgeworICAgICAgICB2YXIgZ2xvYmFsUG9zaXRpb24gPSB0aGlzLmdldEFic29sdXRl
UG9zaXRpb24oKTsKKyAgICAgICAgZ2xvYmFsUG9zaXRpb24uYWRkVG9SZWYodGhpcy5lbGxpcHNv
aWRPZmZzZXQsIHRoaXMuX21lc2hDb2xsaXNpb25EYXRhLl9vbGRQb3NpdGlvbkZvckNvbGxpc2lv
bnMpOworICAgICAgICB2YXIgY29vcmRpbmF0b3IgPSB0aGlzLmdldFNjZW5lKCkuY29sbGlzaW9u
Q29vcmRpbmF0b3I7CisgICAgICAgIGlmICghdGhpcy5fbWVzaENvbGxpc2lvbkRhdGEuX2NvbGxp
ZGVyKSB7CisgICAgICAgICAgICB0aGlzLl9tZXNoQ29sbGlzaW9uRGF0YS5fY29sbGlkZXIgPSBj
b29yZGluYXRvci5jcmVhdGVDb2xsaWRlcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX21l
c2hDb2xsaXNpb25EYXRhLl9jb2xsaWRlci5fcmFkaXVzID0gdGhpcy5lbGxpcHNvaWQ7CisgICAg
ICAgIGNvb3JkaW5hdG9yLmdldE5ld1Bvc2l0aW9uKHRoaXMuX21lc2hDb2xsaXNpb25EYXRhLl9v
bGRQb3NpdGlvbkZvckNvbGxpc2lvbnMsIGRpc3BsYWNlbWVudCwgdGhpcy5fbWVzaENvbGxpc2lv
bkRhdGEuX2NvbGxpZGVyLCAzLCB0aGlzLCB0aGlzLl9vbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdl
LCB0aGlzLnVuaXF1ZUlkKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvLyBD
b2xsaXNpb25zCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBl
Ll9jb2xsaWRlRm9yU3ViTWVzaCA9IGZ1bmN0aW9uIChzdWJNZXNoLCB0cmFuc2Zvcm1NYXRyaXgs
IGNvbGxpZGVyKSB7CisgICAgICAgIHRoaXMuX2dlbmVyYXRlUG9pbnRzQXJyYXkoKTsKKyAgICAg
ICAgaWYgKCF0aGlzLl9wb3NpdGlvbnMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICB9CisgICAgICAgIC8vIFRyYW5zZm9ybWF0aW9uCisgICAgICAgIGlmICghc3ViTWVzaC5f
bGFzdENvbGxpZGVyV29ybGRWZXJ0aWNlcyB8fCAhc3ViTWVzaC5fbGFzdENvbGxpZGVyVHJhbnNm
b3JtTWF0cml4LmVxdWFscyh0cmFuc2Zvcm1NYXRyaXgpKSB7CisgICAgICAgICAgICBzdWJNZXNo
Ll9sYXN0Q29sbGlkZXJUcmFuc2Zvcm1NYXRyaXggPSB0cmFuc2Zvcm1NYXRyaXguY2xvbmUoKTsK
KyAgICAgICAgICAgIHN1Yk1lc2guX2xhc3RDb2xsaWRlcldvcmxkVmVydGljZXMgPSBbXTsKKyAg
ICAgICAgICAgIHN1Yk1lc2guX3RyaWFuZ2xlUGxhbmVzID0gW107CisgICAgICAgICAgICB2YXIg
c3RhcnQgPSBzdWJNZXNoLnZlcnRpY2VzU3RhcnQ7CisgICAgICAgICAgICB2YXIgZW5kID0gKHN1
Yk1lc2gudmVydGljZXNTdGFydCArIHN1Yk1lc2gudmVydGljZXNDb3VudCk7CisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgeworICAgICAgICAgICAgICAgIHN1
Yk1lc2guX2xhc3RDb2xsaWRlcldvcmxkVmVydGljZXMucHVzaChfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5h
dGVzKHRoaXMuX3Bvc2l0aW9uc1tpXSwgdHJhbnNmb3JtTWF0cml4KSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29sbGlkZQorICAgICAgICBjb2xsaWRlci5fY29sbGlk
ZShzdWJNZXNoLl90cmlhbmdsZVBsYW5lcywgc3ViTWVzaC5fbGFzdENvbGxpZGVyV29ybGRWZXJ0
aWNlcywgdGhpcy5nZXRJbmRpY2VzKCksIHN1Yk1lc2guaW5kZXhTdGFydCwgc3ViTWVzaC5pbmRl
eFN0YXJ0ICsgc3ViTWVzaC5pbmRleENvdW50LCBzdWJNZXNoLnZlcnRpY2VzU3RhcnQsICEhc3Vi
TWVzaC5nZXRNYXRlcmlhbCgpLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuX3Byb2Nlc3ND
b2xsaXNpb25zRm9yU3ViTWVzaGVzID0gZnVuY3Rpb24gKGNvbGxpZGVyLCB0cmFuc2Zvcm1NYXRy
aXgpIHsKKyAgICAgICAgdmFyIHN1Yk1lc2hlcyA9IHRoaXMuX3NjZW5lLmdldENvbGxpZGluZ1N1
Yk1lc2hDYW5kaWRhdGVzKHRoaXMsIGNvbGxpZGVyKTsKKyAgICAgICAgdmFyIGxlbiA9IHN1Yk1l
c2hlcy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW47IGlu
ZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBzdWJNZXNoID0gc3ViTWVzaGVzLmRhdGFbaW5kZXhd
OworICAgICAgICAgICAgLy8gQm91bmRpbmcgdGVzdAorICAgICAgICAgICAgaWYgKGxlbiA+IDEg
JiYgIXN1Yk1lc2guX2NoZWNrQ29sbGlzaW9uKGNvbGxpZGVyKSkgeworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY29sbGlkZUZvclN1
Yk1lc2goc3ViTWVzaCwgdHJhbnNmb3JtTWF0cml4LCBjb2xsaWRlcik7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFic3Ry
YWN0TWVzaC5wcm90b3R5cGUuX2NoZWNrQ29sbGlzaW9uID0gZnVuY3Rpb24gKGNvbGxpZGVyKSB7
CisgICAgICAgIC8vIEJvdW5kaW5nIGJveCB0ZXN0CisgICAgICAgIGlmICghdGhpcy5fYm91bmRp
bmdJbmZvIHx8ICF0aGlzLl9ib3VuZGluZ0luZm8uX2NoZWNrQ29sbGlzaW9uKGNvbGxpZGVyKSkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgLy8gVHJhbnNm
b3JtYXRpb24gbWF0cml4CisgICAgICAgIHZhciBjb2xsaXNpb25zU2NhbGluZ01hdHJpeCA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3Jz
Il0uTWF0cml4WzBdOworICAgICAgICB2YXIgY29sbGlzaW9uc1RyYW5zZm9ybU1hdHJpeCA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3Jz
Il0uTWF0cml4WzFdOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siTWF0cml4Il0uU2NhbGluZ1RvUmVmKDEuMCAvIGNvbGxpZGVyLl9yYWRp
dXMueCwgMS4wIC8gY29sbGlkZXIuX3JhZGl1cy55LCAxLjAgLyBjb2xsaWRlci5fcmFkaXVzLnos
IGNvbGxpc2lvbnNTY2FsaW5nTWF0cml4KTsKKyAgICAgICAgdGhpcy53b3JsZE1hdHJpeEZyb21D
YWNoZS5tdWx0aXBseVRvUmVmKGNvbGxpc2lvbnNTY2FsaW5nTWF0cml4LCBjb2xsaXNpb25zVHJh
bnNmb3JtTWF0cml4KTsKKyAgICAgICAgdGhpcy5fcHJvY2Vzc0NvbGxpc2lvbnNGb3JTdWJNZXNo
ZXMoY29sbGlkZXIsIGNvbGxpc2lvbnNUcmFuc2Zvcm1NYXRyaXgpOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8vIFBpY2tpbmcKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEFi
c3RyYWN0TWVzaC5wcm90b3R5cGUuX2dlbmVyYXRlUG9pbnRzQXJyYXkgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENoZWNrcyBp
ZiB0aGUgcGFzc2VkIFJheSBpbnRlcnNlY3RzIHdpdGggdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0g
cmF5IGRlZmluZXMgdGhlIHJheSB0byB1c2UKKyAgICAgKiBAcGFyYW0gZmFzdENoZWNrIGRlZmlu
ZXMgaWYgZmFzdCBtb2RlIChidXQgbGVzcyBwcmVjaXNlKSBtdXN0IGJlIHVzZWQgKGZhbHNlIGJ5
IGRlZmF1bHQpCisgICAgICogQHBhcmFtIHRyaWFuZ2xlUHJlZGljYXRlIGRlZmluZXMgYW4gb3B0
aW9uYWwgcHJlZGljYXRlIHVzZWQgdG8gc2VsZWN0IGZhY2VzIHdoZW4gYSBtZXNoIGludGVyc2Vj
dGlvbiBpcyBkZXRlY3RlZAorICAgICAqIEByZXR1cm5zIHRoZSBwaWNraW5nIGluZm8KKyAgICAg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2ludGVyc2VjdF9jb2xs
aXNpb25zXy1fbWVzaAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuaW50ZXJz
ZWN0cyA9IGZ1bmN0aW9uIChyYXksIGZhc3RDaGVjaywgdHJpYW5nbGVQcmVkaWNhdGUpIHsKKyAg
ICAgICAgdmFyIHBpY2tpbmdJbmZvID0gbmV3IF9Db2xsaXNpb25zX3BpY2tpbmdJbmZvX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBpY2tpbmdJbmZvIl0oKTsKKyAgICAgICAgdmFyIGlu
dGVyc2VjdGlvblRocmVzaG9sZCA9IHRoaXMuZ2V0Q2xhc3NOYW1lKCkgPT09ICJJbnN0YW5jZWRM
aW5lc01lc2giIHx8IHRoaXMuZ2V0Q2xhc3NOYW1lKCkgPT09ICJMaW5lc01lc2giID8gdGhpcy5p
bnRlcnNlY3Rpb25UaHJlc2hvbGQgOiAwOworICAgICAgICB2YXIgYm91bmRpbmdJbmZvID0gdGhp
cy5fYm91bmRpbmdJbmZvOworICAgICAgICBpZiAoIXRoaXMuc3ViTWVzaGVzIHx8ICFib3VuZGlu
Z0luZm8gfHwgIXJheS5pbnRlcnNlY3RzU3BoZXJlKGJvdW5kaW5nSW5mby5ib3VuZGluZ1NwaGVy
ZSwgaW50ZXJzZWN0aW9uVGhyZXNob2xkKSB8fCAhcmF5LmludGVyc2VjdHNCb3goYm91bmRpbmdJ
bmZvLmJvdW5kaW5nQm94LCBpbnRlcnNlY3Rpb25UaHJlc2hvbGQpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcGlja2luZ0luZm87CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9nZW5lcmF0
ZVBvaW50c0FycmF5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBwaWNraW5nSW5mbzsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgaW50ZXJzZWN0SW5mbyA9IG51bGw7CisgICAgICAgIHZhciBzdWJN
ZXNoZXMgPSB0aGlzLl9zY2VuZS5nZXRJbnRlcnNlY3RpbmdTdWJNZXNoQ2FuZGlkYXRlcyh0aGlz
LCByYXkpOworICAgICAgICB2YXIgbGVuID0gc3ViTWVzaGVzLmxlbmd0aDsKKyAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFy
IHN1Yk1lc2ggPSBzdWJNZXNoZXMuZGF0YVtpbmRleF07CisgICAgICAgICAgICAvLyBCb3VuZGlu
ZyB0ZXN0CisgICAgICAgICAgICBpZiAobGVuID4gMSAmJiAhc3ViTWVzaC5jYW5JbnRlcnNlY3Rz
KHJheSkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHZhciBjdXJyZW50SW50ZXJzZWN0SW5mbyA9IHN1Yk1lc2guaW50ZXJzZWN0cyhyYXks
IHRoaXMuX3Bvc2l0aW9ucywgdGhpcy5nZXRJbmRpY2VzKCksIGZhc3RDaGVjaywgdHJpYW5nbGVQ
cmVkaWNhdGUpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRJbnRlcnNlY3RJbmZvKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGZhc3RDaGVjayB8fCAhaW50ZXJzZWN0SW5mbyB8fCBjdXJyZW50SW50
ZXJzZWN0SW5mby5kaXN0YW5jZSA8IGludGVyc2VjdEluZm8uZGlzdGFuY2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW50ZXJzZWN0SW5mbyA9IGN1cnJlbnRJbnRlcnNlY3RJbmZvOworICAgICAg
ICAgICAgICAgICAgICBpbnRlcnNlY3RJbmZvLnN1Yk1lc2hJZCA9IGluZGV4OworICAgICAgICAg
ICAgICAgICAgICBpZiAoZmFzdENoZWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaW50ZXJzZWN0SW5mbykgeworICAgICAgICAgICAg
Ly8gR2V0IHBpY2tlZCBwb2ludAorICAgICAgICAgICAgdmFyIHdvcmxkID0gdGhpcy5nZXRXb3Js
ZE1hdHJpeCgpOworICAgICAgICAgICAgdmFyIHdvcmxkT3JpZ2luID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBd
OworICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1sxXTsKKyAgICAgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0
b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihyYXkub3JpZ2luLCB3b3JsZCwgd29ybGRP
cmlnaW4pOworICAgICAgICAgICAgcmF5LmRpcmVjdGlvbi5zY2FsZVRvUmVmKGludGVyc2VjdElu
Zm8uZGlzdGFuY2UsIGRpcmVjdGlvbik7CisgICAgICAgICAgICB2YXIgd29ybGREaXJlY3Rpb24g
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9y
MyJdLlRyYW5zZm9ybU5vcm1hbChkaXJlY3Rpb24sIHdvcmxkKTsKKyAgICAgICAgICAgIHZhciBw
aWNrZWRQb2ludCA9IHdvcmxkRGlyZWN0aW9uLmFkZEluUGxhY2Uod29ybGRPcmlnaW4pOworICAg
ICAgICAgICAgLy8gUmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgcGlja2luZ0luZm8uaGl0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIHBpY2tpbmdJbmZvLmRpc3RhbmNlID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5EaXN0YW5jZSh3b3Js
ZE9yaWdpbiwgcGlja2VkUG9pbnQpOworICAgICAgICAgICAgcGlja2luZ0luZm8ucGlja2VkUG9p
bnQgPSBwaWNrZWRQb2ludDsKKyAgICAgICAgICAgIHBpY2tpbmdJbmZvLnBpY2tlZE1lc2ggPSB0
aGlzOworICAgICAgICAgICAgcGlja2luZ0luZm8uYnUgPSBpbnRlcnNlY3RJbmZvLmJ1IHx8IDA7
CisgICAgICAgICAgICBwaWNraW5nSW5mby5idiA9IGludGVyc2VjdEluZm8uYnYgfHwgMDsKKyAg
ICAgICAgICAgIHBpY2tpbmdJbmZvLmZhY2VJZCA9IGludGVyc2VjdEluZm8uZmFjZUlkOworICAg
ICAgICAgICAgcGlja2luZ0luZm8uc3ViTWVzaElkID0gaW50ZXJzZWN0SW5mby5zdWJNZXNoSWQ7
CisgICAgICAgICAgICByZXR1cm4gcGlja2luZ0luZm87CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHBpY2tpbmdJbmZvOworICAgIH07CisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBjdXJy
ZW50IG1lc2gKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBtZXNoIG5hbWUKKyAgICAg
KiBAcGFyYW0gbmV3UGFyZW50IGRlZmluZXMgdGhlIG5ldyBtZXNoIHBhcmVudAorICAgICAqIEBw
YXJhbSBkb05vdENsb25lQ2hpbGRyZW4gZGVmaW5lcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0
IGNoaWxkcmVuIG11c3Qgbm90IGJlIGNsb25lZCAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKiBA
cmV0dXJucyB0aGUgbmV3IG1lc2gKKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBl
LmNsb25lID0gZnVuY3Rpb24gKG5hbWUsIG5ld1BhcmVudCwgZG9Ob3RDbG9uZUNoaWxkcmVuKSB7
CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMg
YWxsIHRoZSBzdWJtZXNoZXMgb2YgdGhlIGN1cnJlbnQgbWVzaG5wCisgICAgICogQHJldHVybnMg
dGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUucmVs
ZWFzZVN1Yk1lc2hlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuc3ViTWVzaGVz
KSB7CisgICAgICAgICAgICB3aGlsZSAodGhpcy5zdWJNZXNoZXMubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5zdWJNZXNoZXNbMF0uZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5zdWJNZXNoZXMgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFJlbGVhc2VzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhYnN0cmFj
dCBtZXNoLgorICAgICAqIEBwYXJhbSBkb05vdFJlY3Vyc2UgU2V0IHRvIHRydWUgdG8gbm90IHJl
Y3Vyc2UgaW50byBlYWNoIGNoaWxkcmVuIChyZWN1cnNlIGludG8gZWFjaCBjaGlsZHJlbiBieSBk
ZWZhdWx0KQorICAgICAqIEBwYXJhbSBkaXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcyBTZXQgdG8g
dHJ1ZSB0byBhbHNvIGRpc3Bvc2UgcmVmZXJlbmNlZCBtYXRlcmlhbHMgYW5kIHRleHR1cmVzIChm
YWxzZSBieSBkZWZhdWx0KQorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuZGlz
cG9zZSA9IGZ1bmN0aW9uIChkb05vdFJlY3Vyc2UsIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVz
KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChkaXNwb3NlTWF0ZXJp
YWxBbmRUZXh0dXJlcyA9PT0gdm9pZCAwKSB7IGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzID0g
ZmFsc2U7IH0KKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICAvLyBtZXNoIG1hcCByZWxlYXNl
LgorICAgICAgICBpZiAodGhpcy5fc2NlbmUudXNlTWF0ZXJpYWxNZXNoTWFwKSB7CisgICAgICAg
ICAgICAvLyByZW1vdmUgZnJvbSBtYXRlcmlhbCBtZXNoIG1hcCBpZCBuZWVkZWQKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9tYXRlcmlhbCAmJiB0aGlzLl9tYXRlcmlhbC5tZXNoTWFwKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fbWF0ZXJpYWwubWVzaE1hcFt0aGlzLnVuaXF1ZUlkXSA9IHVuZGVm
aW5lZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBTbWFydCBBcnJheSBS
ZXRhaW5lcnMuCisgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5mcmVlQWN0aXZlTWVzaGVzKCk7Cisg
ICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5mcmVlUmVuZGVyaW5nR3JvdXBzKCk7CisgICAgICAgIC8v
IEFjdGlvbiBtYW5hZ2VyCisgICAgICAgIGlmICh0aGlzLmFjdGlvbk1hbmFnZXIgIT09IHVuZGVm
aW5lZCAmJiB0aGlzLmFjdGlvbk1hbmFnZXIgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMu
YWN0aW9uTWFuYWdlci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLmFjdGlvbk1hbmFnZXIg
PSBudWxsOworICAgICAgICB9CisgICAgICAgIC8vIFNrZWxldG9uCisgICAgICAgIHRoaXMuX2lu
dGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX3NrZWxldG9uID0gbnVsbDsKKyAgICAgICAgaWYg
KHRoaXMuX3RyYW5zZm9ybU1hdHJpeFRleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3RyYW5z
Zm9ybU1hdHJpeFRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3Jt
TWF0cml4VGV4dHVyZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW50ZXJzZWN0aW9u
cyBpbiBwcm9ncmVzcworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9pbnRl
cnNlY3Rpb25zSW5Qcm9ncmVzcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBv
dGhlciA9IHRoaXMuX2ludGVyc2VjdGlvbnNJblByb2dyZXNzW2luZGV4XTsKKyAgICAgICAgICAg
IHZhciBwb3MgPSBvdGhlci5faW50ZXJzZWN0aW9uc0luUHJvZ3Jlc3MuaW5kZXhPZih0aGlzKTsK
KyAgICAgICAgICAgIG90aGVyLl9pbnRlcnNlY3Rpb25zSW5Qcm9ncmVzcy5zcGxpY2UocG9zLCAx
KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pbnRlcnNlY3Rpb25zSW5Qcm9ncmVzcyA9IFtd
OworICAgICAgICAvLyBMaWdodHMKKyAgICAgICAgdmFyIGxpZ2h0cyA9IHRoaXMuZ2V0U2NlbmUo
KS5saWdodHM7CisgICAgICAgIGxpZ2h0cy5mb3JFYWNoKGZ1bmN0aW9uIChsaWdodCkgeworICAg
ICAgICAgICAgdmFyIG1lc2hJbmRleCA9IGxpZ2h0LmluY2x1ZGVkT25seU1lc2hlcy5pbmRleE9m
KF90aGlzKTsKKyAgICAgICAgICAgIGlmIChtZXNoSW5kZXggIT09IC0xKSB7CisgICAgICAgICAg
ICAgICAgbGlnaHQuaW5jbHVkZWRPbmx5TWVzaGVzLnNwbGljZShtZXNoSW5kZXgsIDEpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbWVzaEluZGV4ID0gbGlnaHQuZXhjbHVkZWRNZXNoZXMu
aW5kZXhPZihfdGhpcyk7CisgICAgICAgICAgICBpZiAobWVzaEluZGV4ICE9PSAtMSkgeworICAg
ICAgICAgICAgICAgIGxpZ2h0LmV4Y2x1ZGVkTWVzaGVzLnNwbGljZShtZXNoSW5kZXgsIDEpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gU2hhZG93IGdlbmVyYXRvcnMKKyAgICAgICAg
ICAgIHZhciBnZW5lcmF0b3IgPSBsaWdodC5nZXRTaGFkb3dHZW5lcmF0b3IoKTsKKyAgICAgICAg
ICAgIGlmIChnZW5lcmF0b3IpIHsKKyAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwID0gZ2Vu
ZXJhdG9yLmdldFNoYWRvd01hcCgpOworICAgICAgICAgICAgICAgIGlmIChzaGFkb3dNYXAgJiYg
c2hhZG93TWFwLnJlbmRlckxpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzaEluZGV4ID0g
c2hhZG93TWFwLnJlbmRlckxpc3QuaW5kZXhPZihfdGhpcyk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtZXNoSW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dN
YXAucmVuZGVyTGlzdC5zcGxpY2UobWVzaEluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAg
IC8vIFN1Yk1lc2hlcworICAgICAgICBpZiAodGhpcy5nZXRDbGFzc05hbWUoKSAhPT0gIkluc3Rh
bmNlZE1lc2giIHx8IHRoaXMuZ2V0Q2xhc3NOYW1lKCkgIT09ICJJbnN0YW5jZWRMaW5lc01lc2gi
KSB7CisgICAgICAgICAgICB0aGlzLnJlbGVhc2VTdWJNZXNoZXMoKTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBRdWVyeQorICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRTY2VuZSgpLmdldEVu
Z2luZSgpOworICAgICAgICBpZiAodGhpcy5fb2NjbHVzaW9uUXVlcnkpIHsKKyAgICAgICAgICAg
IHRoaXMuaXNPY2NsdXNpb25RdWVyeUluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIGVu
Z2luZS5kZWxldGVRdWVyeSh0aGlzLl9vY2NsdXNpb25RdWVyeSk7CisgICAgICAgICAgICB0aGlz
Ll9vY2NsdXNpb25RdWVyeSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8gRW5naW5lCisg
ICAgICAgIGVuZ2luZS53aXBlQ2FjaGVzKCk7CisgICAgICAgIC8vIFJlbW92ZSBmcm9tIHNjZW5l
CisgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5yZW1vdmVNZXNoKHRoaXMpOworICAgICAgICBpZiAo
ZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm1hdGVy
aWFsKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWwuZ2V0Q2xhc3NOYW1lKCkg
PT09ICJNdWx0aU1hdGVyaWFsIikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFs
LmRpc3Bvc2UoZmFsc2UsIHRydWUsIHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC5kaXNwb3Nl
KGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFkb05vdFJlY3Vyc2UpIHsKKyAgICAgICAgICAgIC8vIFBhcnRpY2xl
cworICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5nZXRTY2VuZSgpLnBh
cnRpY2xlU3lzdGVtcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAodGhp
cy5nZXRTY2VuZSgpLnBhcnRpY2xlU3lzdGVtc1tpbmRleF0uZW1pdHRlciA9PT0gdGhpcykgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNjZW5lKCkucGFydGljbGVTeXN0ZW1zW2luZGV4
XS5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIGluZGV4LS07CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGZhY2V0IGRhdGEKKyAg
ICAgICAgaWYgKHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2ZhY2V0RGF0YS5m
YWNldERhdGFFbmFibGVkKSB7CisgICAgICAgICAgICB0aGlzLmRpc2FibGVGYWNldERhdGEoKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLm9uQWZ0ZXJXb3JsZE1hdHJpeFVwZGF0ZU9ic2VydmFi
bGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkNvbGxpZGVPYnNlcnZhYmxlLmNsZWFyKCk7Cisg
ICAgICAgIHRoaXMub25Db2xsaXNpb25Qb3NpdGlvbkNoYW5nZU9ic2VydmFibGUuY2xlYXIoKTsK
KyAgICAgICAgdGhpcy5vblJlYnVpbGRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIF9zdXBl
ci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMsIGRvTm90UmVjdXJzZSwgZGlzcG9zZU1hdGVy
aWFsQW5kVGV4dHVyZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyB0aGUgcGFzc2Vk
IG1lc2ggYXMgYSBjaGlsZCB0byB0aGUgY3VycmVudCBtZXNoCisgICAgICogQHBhcmFtIG1lc2gg
ZGVmaW5lcyB0aGUgY2hpbGQgbWVzaAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gK
KyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24g
KG1lc2gpIHsKKyAgICAgICAgbWVzaC5zZXRQYXJlbnQodGhpcyk7CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgcGFzc2VkIG1lc2ggZnJv
bSB0aGUgY3VycmVudCBtZXNoIGNoaWxkcmVuIGxpc3QKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZp
bmVzIHRoZSBjaGlsZCBtZXNoCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAg
ICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAo
bWVzaCkgeworICAgICAgICBtZXNoLnNldFBhcmVudChudWxsKTsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvLyBGYWNldCBkYXRhCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBB
YnN0cmFjdE1lc2gucHJvdG90eXBlLl9pbml0RmFjZXREYXRhID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgZGF0YSA9IHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2ZhY2V0
RGF0YTsKKyAgICAgICAgaWYgKCFkYXRhLmZhY2V0Tm9ybWFscykgeworICAgICAgICAgICAgZGF0
YS5mYWNldE5vcm1hbHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWRh
dGEuZmFjZXRQb3NpdGlvbnMpIHsKKyAgICAgICAgICAgIGRhdGEuZmFjZXRQb3NpdGlvbnMgPSBu
ZXcgQXJyYXkoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWRhdGEuZmFjZXRQYXJ0aXRpb25p
bmcpIHsKKyAgICAgICAgICAgIGRhdGEuZmFjZXRQYXJ0aXRpb25pbmcgPSBuZXcgQXJyYXkoKTsK
KyAgICAgICAgfQorICAgICAgICBkYXRhLmZhY2V0TmIgPSAodGhpcy5nZXRJbmRpY2VzKCkubGVu
Z3RoIC8gMykgfCAwOworICAgICAgICBkYXRhLnBhcnRpdGlvbmluZ1N1YmRpdmlzaW9ucyA9IChk
YXRhLnBhcnRpdGlvbmluZ1N1YmRpdmlzaW9ucykgPyBkYXRhLnBhcnRpdGlvbmluZ1N1YmRpdmlz
aW9ucyA6IDEwOyAvLyBkZWZhdWx0IG5iIG9mIHBhcnRpdGlvbmluZyBzdWJkaXZpc2lvbnMgPSAx
MAorICAgICAgICBkYXRhLnBhcnRpdGlvbmluZ0JCb3hSYXRpbyA9IChkYXRhLnBhcnRpdGlvbmlu
Z0JCb3hSYXRpbykgPyBkYXRhLnBhcnRpdGlvbmluZ0JCb3hSYXRpbyA6IDEuMDE7IC8vIGRlZmF1
bHQgcmF0aW8gMS4wMSA9IHRoZSBwYXJ0aXRpb25pbmcgaXMgMSUgYmlnZ2VyIHRoYW4gdGhlIGJv
dW5kaW5nIGJveAorICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGRhdGEuZmFjZXROYjsgZisr
KSB7CisgICAgICAgICAgICBkYXRhLmZhY2V0Tm9ybWFsc1tmXSA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAg
ICAgICAgZGF0YS5mYWNldFBvc2l0aW9uc1tmXSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB9CisgICAg
ICAgIGRhdGEuZmFjZXREYXRhRW5hYmxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgbWVzaCBmYWNldERhdGEgYXJyYXlz
IGFuZCB0aGUgaW50ZXJuYWwgcGFydGl0aW9uaW5nIHdoZW4gdGhlIG1lc2ggaXMgbW9ycGhlZCBv
ciB1cGRhdGVkLgorICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgd2l0aGluIHRoZSBy
ZW5kZXIgbG9vcC4KKyAgICAgKiBZb3UgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMgbWV0aG9kIGJ5
IHlvdXJzZWxmIGluIHRoZSByZW5kZXIgbG9vcCB3aGVuIHlvdSB1cGRhdGUvbW9ycGggYSBtZXNo
IHdpdGggdGhlIG1ldGhvZHMgQ3JlYXRlWFhYKCkgYXMgdGhleSBhdXRvbWF0aWNhbGx5IG1hbmFn
ZSB0aGlzIGNvbXB1dGF0aW9uCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2ZhY2V0
ZGF0YQorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUudXBkYXRlRmFjZXREYXRh
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2ludGVybmFsQWJzdHJh
Y3RNZXNoRGF0YUluZm8uX2ZhY2V0RGF0YTsKKyAgICAgICAgaWYgKCFkYXRhLmZhY2V0RGF0YUVu
YWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2luaXRGYWNldERhdGEoKTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25L
aW5kKTsKKyAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmdldEluZGljZXMoKTsKKyAgICAgICAg
dmFyIG5vcm1hbHMgPSB0aGlzLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKTsKKyAgICAg
ICAgdmFyIGJJbmZvID0gdGhpcy5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgaWYgKGRhdGEu
ZmFjZXREZXB0aFNvcnQgJiYgIWRhdGEuZmFjZXREZXB0aFNvcnRFbmFibGVkKSB7CisgICAgICAg
ICAgICAvLyBpbml0IGFycmF5cywgbWF0cml4IGFuZCBzb3J0IGZ1bmN0aW9uIG9uIGZpcnN0IGNh
bGwKKyAgICAgICAgICAgIGRhdGEuZmFjZXREZXB0aFNvcnRFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGlmIChpbmRpY2VzIGluc3RhbmNlb2YgVWludDE2QXJyYXkpIHsKKyAgICAgICAgICAg
ICAgICBkYXRhLmRlcHRoU29ydGVkSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGluZGljZXMgaW5zdGFuY2VvZiBV
aW50MzJBcnJheSkgeworICAgICAgICAgICAgICAgIGRhdGEuZGVwdGhTb3J0ZWRJbmRpY2VzID0g
bmV3IFVpbnQzMkFycmF5KGluZGljZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgdmFyIG5lZWRzMzJiaXRzID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpbmRpY2VzW2ldID4gNjU1MzUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5lZWRzMzJiaXRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChuZWVkczMyYml0cykgeworICAgICAgICAgICAgICAgICAgICBkYXRhLmRlcHRoU29y
dGVkSW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShpbmRpY2VzKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEuZGVwdGhT
b3J0ZWRJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGEuZmFjZXREZXB0aFNvcnRGdW5jdGlv
biA9IGZ1bmN0aW9uIChmMSwgZjIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGYyLnNxRGlz
dGFuY2UgLSBmMS5zcURpc3RhbmNlKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAo
IWRhdGEuZmFjZXREZXB0aFNvcnRGcm9tKSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbWVyYSA9
IHRoaXMuZ2V0U2NlbmUoKS5hY3RpdmVDYW1lcmE7CisgICAgICAgICAgICAgICAgZGF0YS5mYWNl
dERlcHRoU29ydEZyb20gPSAoY2FtZXJhKSA/IGNhbWVyYS5wb3NpdGlvbiA6IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YS5kZXB0aFNvcnRlZEZhY2V0cyA9IFtdOwor
ICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBkYXRhLmZhY2V0TmI7IGYrKykgeworICAg
ICAgICAgICAgICAgIHZhciBkZXB0aFNvcnRlZEZhY2V0ID0geyBpbmQ6IGYgKiAzLCBzcURpc3Rh
bmNlOiAwLjAgfTsKKyAgICAgICAgICAgICAgICBkYXRhLmRlcHRoU29ydGVkRmFjZXRzLnB1c2go
ZGVwdGhTb3J0ZWRGYWNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhLmludmVy
dGVkTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgICAgICAgICBkYXRhLmZhY2V0RGVwdGhTb3J0
T3JpZ2luID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YS5iYlNpemUueCA9IChi
SW5mby5tYXhpbXVtLnggLSBiSW5mby5taW5pbXVtLnggPiBfTWF0aHNfbWF0aF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkVwc2lsb24iXSkgPyBiSW5mby5tYXhpbXVt
LnggLSBiSW5mby5taW5pbXVtLnggOiBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE2X19bIkVwc2lsb24iXTsKKyAgICAgICAgZGF0YS5iYlNpemUueSA9IChi
SW5mby5tYXhpbXVtLnkgLSBiSW5mby5taW5pbXVtLnkgPiBfTWF0aHNfbWF0aF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkVwc2lsb24iXSkgPyBiSW5mby5tYXhpbXVt
LnkgLSBiSW5mby5taW5pbXVtLnkgOiBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE2X19bIkVwc2lsb24iXTsKKyAgICAgICAgZGF0YS5iYlNpemUueiA9IChi
SW5mby5tYXhpbXVtLnogLSBiSW5mby5taW5pbXVtLnogPiBfTWF0aHNfbWF0aF9jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkVwc2lsb24iXSkgPyBiSW5mby5tYXhpbXVt
LnogLSBiSW5mby5taW5pbXVtLnogOiBfTWF0aHNfbWF0aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE2X19bIkVwc2lsb24iXTsKKyAgICAgICAgdmFyIGJiU2l6ZU1heCA9IChk
YXRhLmJiU2l6ZS54ID4gZGF0YS5iYlNpemUueSkgPyBkYXRhLmJiU2l6ZS54IDogZGF0YS5iYlNp
emUueTsKKyAgICAgICAgYmJTaXplTWF4ID0gKGJiU2l6ZU1heCA+IGRhdGEuYmJTaXplLnopID8g
YmJTaXplTWF4IDogZGF0YS5iYlNpemUuejsKKyAgICAgICAgZGF0YS5zdWJEaXYubWF4ID0gZGF0
YS5wYXJ0aXRpb25pbmdTdWJkaXZpc2lvbnM7CisgICAgICAgIGRhdGEuc3ViRGl2LlggPSBNYXRo
LmZsb29yKGRhdGEuc3ViRGl2Lm1heCAqIGRhdGEuYmJTaXplLnggLyBiYlNpemVNYXgpOyAvLyBh
ZGp1c3QgdGhlIG51bWJlciBvZiBzdWJkaXZpc2lvbnMgcGVyIGF4aXMKKyAgICAgICAgZGF0YS5z
dWJEaXYuWSA9IE1hdGguZmxvb3IoZGF0YS5zdWJEaXYubWF4ICogZGF0YS5iYlNpemUueSAvIGJi
U2l6ZU1heCk7IC8vIGFjY29yZGluZyB0byBlYWNoIGJib3ggc2l6ZSBwZXIgYXhpcworICAgICAg
ICBkYXRhLnN1YkRpdi5aID0gTWF0aC5mbG9vcihkYXRhLnN1YkRpdi5tYXggKiBkYXRhLmJiU2l6
ZS56IC8gYmJTaXplTWF4KTsKKyAgICAgICAgZGF0YS5zdWJEaXYuWCA9IGRhdGEuc3ViRGl2Llgg
PCAxID8gMSA6IGRhdGEuc3ViRGl2Llg7IC8vIGF0IGxlYXN0IG9uZSBzdWJkaXZpc2lvbgorICAg
ICAgICBkYXRhLnN1YkRpdi5ZID0gZGF0YS5zdWJEaXYuWSA8IDEgPyAxIDogZGF0YS5zdWJEaXYu
WTsKKyAgICAgICAgZGF0YS5zdWJEaXYuWiA9IGRhdGEuc3ViRGl2LlogPCAxID8gMSA6IGRhdGEu
c3ViRGl2Llo7CisgICAgICAgIC8vIHNldCB0aGUgcGFyYW1ldGVycyBmb3IgQ29tcHV0ZU5vcm1h
bHMoKQorICAgICAgICBkYXRhLmZhY2V0UGFyYW1ldGVycy5mYWNldE5vcm1hbHMgPSB0aGlzLmdl
dEZhY2V0TG9jYWxOb3JtYWxzKCk7CisgICAgICAgIGRhdGEuZmFjZXRQYXJhbWV0ZXJzLmZhY2V0
UG9zaXRpb25zID0gdGhpcy5nZXRGYWNldExvY2FsUG9zaXRpb25zKCk7CisgICAgICAgIGRhdGEu
ZmFjZXRQYXJhbWV0ZXJzLmZhY2V0UGFydGl0aW9uaW5nID0gdGhpcy5nZXRGYWNldExvY2FsUGFy
dGl0aW9uaW5nKCk7CisgICAgICAgIGRhdGEuZmFjZXRQYXJhbWV0ZXJzLmJJbmZvID0gYkluZm87
CisgICAgICAgIGRhdGEuZmFjZXRQYXJhbWV0ZXJzLmJiU2l6ZSA9IGRhdGEuYmJTaXplOworICAg
ICAgICBkYXRhLmZhY2V0UGFyYW1ldGVycy5zdWJEaXYgPSBkYXRhLnN1YkRpdjsKKyAgICAgICAg
ZGF0YS5mYWNldFBhcmFtZXRlcnMucmF0aW8gPSB0aGlzLnBhcnRpdGlvbmluZ0JCb3hSYXRpbzsK
KyAgICAgICAgZGF0YS5mYWNldFBhcmFtZXRlcnMuZGVwdGhTb3J0ID0gZGF0YS5mYWNldERlcHRo
U29ydDsKKyAgICAgICAgaWYgKGRhdGEuZmFjZXREZXB0aFNvcnQgJiYgZGF0YS5mYWNldERlcHRo
U29ydEVuYWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUp
OworICAgICAgICAgICAgdGhpcy5fd29ybGRNYXRyaXguaW52ZXJ0VG9SZWYoZGF0YS5pbnZlcnRl
ZE1hdHJpeCk7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYoZGF0YS5m
YWNldERlcHRoU29ydEZyb20sIGRhdGEuaW52ZXJ0ZWRNYXRyaXgsIGRhdGEuZmFjZXREZXB0aFNv
cnRPcmlnaW4pOworICAgICAgICAgICAgZGF0YS5mYWNldFBhcmFtZXRlcnMuZGlzdGFuY2VUbyA9
IGRhdGEuZmFjZXREZXB0aFNvcnRPcmlnaW47CisgICAgICAgIH0KKyAgICAgICAgZGF0YS5mYWNl
dFBhcmFtZXRlcnMuZGVwdGhTb3J0ZWRGYWNldHMgPSBkYXRhLmRlcHRoU29ydGVkRmFjZXRzOwor
ICAgICAgICBfTWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fWyJWZXJ0ZXhEYXRhIl0uQ29tcHV0ZU5vcm1hbHMocG9zaXRpb25zLCBpbmRpY2VzLCBub3Jt
YWxzLCBkYXRhLmZhY2V0UGFyYW1ldGVycyk7CisgICAgICAgIGlmIChkYXRhLmZhY2V0RGVwdGhT
b3J0ICYmIGRhdGEuZmFjZXREZXB0aFNvcnRFbmFibGVkKSB7CisgICAgICAgICAgICBkYXRhLmRl
cHRoU29ydGVkRmFjZXRzLnNvcnQoZGF0YS5mYWNldERlcHRoU29ydEZ1bmN0aW9uKTsKKyAgICAg
ICAgICAgIHZhciBsID0gKGRhdGEuZGVwdGhTb3J0ZWRJbmRpY2VzLmxlbmd0aCAvIDMpIHwgMDsK
KyAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgbDsgZisrKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHNpbmQgPSBkYXRhLmRlcHRoU29ydGVkRmFjZXRzW2ZdLmluZDsKKyAgICAgICAgICAg
ICAgICBkYXRhLmRlcHRoU29ydGVkSW5kaWNlc1tmICogM10gPSBpbmRpY2VzW3NpbmRdOworICAg
ICAgICAgICAgICAgIGRhdGEuZGVwdGhTb3J0ZWRJbmRpY2VzW2YgKiAzICsgMV0gPSBpbmRpY2Vz
W3NpbmQgKyAxXTsKKyAgICAgICAgICAgICAgICBkYXRhLmRlcHRoU29ydGVkSW5kaWNlc1tmICog
MyArIDJdID0gaW5kaWNlc1tzaW5kICsgMl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aGlzLnVwZGF0ZUluZGljZXMoZGF0YS5kZXB0aFNvcnRlZEluZGljZXMsIHVuZGVmaW5lZCwgdHJ1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIHRoZSBmYWNldExvY2FsTm9ybWFscyBhcnJheS4KKyAgICAgKiBUaGUgbm9y
bWFscyBhcmUgZXhwcmVzc2VkIGluIHRoZSBtZXNoIGxvY2FsIHNwYWMKKyAgICAgKiBAcmV0dXJu
cyBhbiBhcnJheSBvZiBWZWN0b3IzCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNo
LnByb3RvdHlwZS5nZXRGYWNldExvY2FsTm9ybWFscyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dmFyIGZhY2V0RGF0YSA9IHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2ZhY2V0
RGF0YTsKKyAgICAgICAgaWYgKCFmYWNldERhdGEuZmFjZXROb3JtYWxzKSB7CisgICAgICAgICAg
ICB0aGlzLnVwZGF0ZUZhY2V0RGF0YSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWNl
dERhdGEuZmFjZXROb3JtYWxzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUg
ZmFjZXRMb2NhbFBvc2l0aW9ucyBhcnJheS4KKyAgICAgKiBUaGUgZmFjZXQgcG9zaXRpb25zIGFy
ZSBleHByZXNzZWQgaW4gdGhlIG1lc2ggbG9jYWwgc3BhY2UKKyAgICAgKiBAcmV0dXJucyBhbiBh
cnJheSBvZiBWZWN0b3IzCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3Rv
dHlwZS5nZXRGYWNldExvY2FsUG9zaXRpb25zID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIg
ZmFjZXREYXRhID0gdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fZmFjZXREYXRh
OworICAgICAgICBpZiAoIWZhY2V0RGF0YS5mYWNldFBvc2l0aW9ucykgeworICAgICAgICAgICAg
dGhpcy51cGRhdGVGYWNldERhdGEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFjZXRE
YXRhLmZhY2V0UG9zaXRpb25zOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUg
ZmFjZXRMb2NhbFBhcnRpb25pbmcgYXJyYXkKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBh
cnJheSBvZiBudW1iZXJzCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3Rv
dHlwZS5nZXRGYWNldExvY2FsUGFydGl0aW9uaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2
YXIgZmFjZXREYXRhID0gdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5fZmFjZXRE
YXRhOworICAgICAgICBpZiAoIWZhY2V0RGF0YS5mYWNldFBhcnRpdGlvbmluZykgeworICAgICAg
ICAgICAgdGhpcy51cGRhdGVGYWNldERhdGEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFjZXREYXRhLmZhY2V0UGFydGl0aW9uaW5nOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0
dXJucyB0aGUgaS10aCBmYWNldCBwb3NpdGlvbiBpbiB0aGUgd29ybGQgc3lzdGVtLgorICAgICAq
IFRoaXMgbWV0aG9kIGFsbG9jYXRlcyBhIG5ldyBWZWN0b3IzIHBlciBjYWxsCisgICAgICogQHBh
cmFtIGkgZGVmaW5lcyB0aGUgZmFjZXQgaW5kZXgKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0
b3IzCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191
c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5nZXRGYWNl
dFBvc2l0aW9uID0gZnVuY3Rpb24gKGkpIHsKKyAgICAgICAgdmFyIHBvcyA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICB0aGlzLmdldEZhY2V0UG9zaXRpb25Ub1JlZihpLCBwb3MpOworICAgICAgICByZXR1
cm4gcG9zOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgcmVmZXJlbmNlIFZlY3Rv
cjMgd2l0aCB0aGUgaS10aCBmYWNldCBwb3NpdGlvbiBpbiB0aGUgd29ybGQgc3lzdGVtCisgICAg
ICogQHBhcmFtIGkgZGVmaW5lcyB0aGUgZmFjZXQgaW5kZXgKKyAgICAgKiBAcGFyYW0gcmVmIGRl
ZmluZXMgdGhlIHRhcmdldCB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNo
CisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vf
ZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5nZXRGYWNldFBv
c2l0aW9uVG9SZWYgPSBmdW5jdGlvbiAoaSwgcmVmKSB7CisgICAgICAgIHZhciBsb2NhbFBvcyA9
ICh0aGlzLmdldEZhY2V0TG9jYWxQb3NpdGlvbnMoKSlbaV07CisgICAgICAgIHZhciB3b3JsZCA9
IHRoaXMuZ2V0V29ybGRNYXRyaXgoKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1Rv
UmVmKGxvY2FsUG9zLCB3b3JsZCwgcmVmKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpLXRoIGZhY2V0IG5vcm1hbCBpbiB0aGUgd29y
bGQgc3lzdGVtLgorICAgICAqIFRoaXMgbWV0aG9kIGFsbG9jYXRlcyBhIG5ldyBWZWN0b3IzIHBl
ciBjYWxsCisgICAgICogQHBhcmFtIGkgZGVmaW5lcyB0aGUgZmFjZXQgaW5kZXgKKyAgICAgKiBA
cmV0dXJucyBhIG5ldyBWZWN0b3IzCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNo
LnByb3RvdHlwZS5nZXRGYWNldE5vcm1hbCA9IGZ1bmN0aW9uIChpKSB7CisgICAgICAgIHZhciBu
b3JtID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
Y3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuZ2V0RmFjZXROb3JtYWxUb1JlZihpLCBub3Jt
KTsKKyAgICAgICAgcmV0dXJuIG5vcm07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRo
ZSByZWZlcmVuY2UgVmVjdG9yMyB3aXRoIHRoZSBpLXRoIGZhY2V0IG5vcm1hbCBpbiB0aGUgd29y
bGQgc3lzdGVtCisgICAgICogQHBhcmFtIGkgZGVmaW5lcyB0aGUgZmFjZXQgaW5kZXgKKyAgICAg
KiBAcGFyYW0gcmVmIGRlZmluZXMgdGhlIHRhcmdldCB2ZWN0b3IKKyAgICAgKiBAcmV0dXJucyB0
aGUgY3VycmVudCBtZXNoCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3Rv
dHlwZS5nZXRGYWNldE5vcm1hbFRvUmVmID0gZnVuY3Rpb24gKGksIHJlZikgeworICAgICAgICB2
YXIgbG9jYWxOb3JtID0gKHRoaXMuZ2V0RmFjZXRMb2NhbE5vcm1hbHMoKSlbaV07CisgICAgICAg
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3Iz
Il0uVHJhbnNmb3JtTm9ybWFsVG9SZWYobG9jYWxOb3JtLCB0aGlzLmdldFdvcmxkTWF0cml4KCks
IHJlZik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0
dXJucyB0aGUgZmFjZXRzIChpbiBhbiBhcnJheSkgaW4gdGhlIHNhbWUgcGFydGl0aW9uaW5nIGJs
b2NrIHRoYW4gdGhlIG9uZSB0aGUgcGFzc2VkIGNvb3JkaW5hdGVzIGFyZSBsb2NhdGVkIChleHBy
ZXNzZWQgaW4gdGhlIG1lc2ggbG9jYWwgc3lzdGVtKQorICAgICAqIEBwYXJhbSB4IGRlZmluZXMg
eCBjb29yZGluYXRlCisgICAgICogQHBhcmFtIHkgZGVmaW5lcyB5IGNvb3JkaW5hdGUKKyAgICAg
KiBAcGFyYW0geiBkZWZpbmVzIHogY29vcmRpbmF0ZQorICAgICAqIEByZXR1cm5zIHRoZSBhcnJh
eSBvZiBmYWNldCBpbmRleGVzCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnBy
b3RvdHlwZS5nZXRGYWNldHNBdExvY2FsQ29vcmRpbmF0ZXMgPSBmdW5jdGlvbiAoeCwgeSwgeikg
eworICAgICAgICB2YXIgYkluZm8gPSB0aGlzLmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICB2
YXIgZGF0YSA9IHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2ZhY2V0RGF0YTsK
KyAgICAgICAgdmFyIG94ID0gTWF0aC5mbG9vcigoeCAtIGJJbmZvLm1pbmltdW0ueCAqIGRhdGEu
cGFydGl0aW9uaW5nQkJveFJhdGlvKSAqIGRhdGEuc3ViRGl2LlggKiBkYXRhLnBhcnRpdGlvbmlu
Z0JCb3hSYXRpbyAvIGRhdGEuYmJTaXplLngpOworICAgICAgICB2YXIgb3kgPSBNYXRoLmZsb29y
KCh5IC0gYkluZm8ubWluaW11bS55ICogZGF0YS5wYXJ0aXRpb25pbmdCQm94UmF0aW8pICogZGF0
YS5zdWJEaXYuWSAqIGRhdGEucGFydGl0aW9uaW5nQkJveFJhdGlvIC8gZGF0YS5iYlNpemUueSk7
CisgICAgICAgIHZhciBveiA9IE1hdGguZmxvb3IoKHogLSBiSW5mby5taW5pbXVtLnogKiBkYXRh
LnBhcnRpdGlvbmluZ0JCb3hSYXRpbykgKiBkYXRhLnN1YkRpdi5aICogZGF0YS5wYXJ0aXRpb25p
bmdCQm94UmF0aW8gLyBkYXRhLmJiU2l6ZS56KTsKKyAgICAgICAgaWYgKG94IDwgMCB8fCBveCA+
IGRhdGEuc3ViRGl2Lm1heCB8fCBveSA8IDAgfHwgb3kgPiBkYXRhLnN1YkRpdi5tYXggfHwgb3og
PCAwIHx8IG96ID4gZGF0YS5zdWJEaXYubWF4KSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YS5mYWNldFBhcnRpdGlvbmluZ1tveCArIGRh
dGEuc3ViRGl2Lm1heCAqIG95ICsgZGF0YS5zdWJEaXYubWF4ICogZGF0YS5zdWJEaXYubWF4ICog
b3pdOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY2xvc2VzdCBtZXNoIGZh
Y2V0IGluZGV4IGF0ICh4LHkseikgV29ybGQgY29vcmRpbmF0ZXMsIG51bGwgaWYgbm90IGZvdW5k
CisgICAgICogQHBhcmFtIHByb2plY3RlZCBzZXRzIGFzIHRoZSAoeCx5LHopIHdvcmxkIHByb2pl
Y3Rpb24gb24gdGhlIGZhY2V0CisgICAgICogQHBhcmFtIGNoZWNrRmFjZSBpZiB0cnVlIChkZWZh
dWx0IGZhbHNlKSwgb25seSB0aGUgZmFjZXQgImZhY2luZyIgdG8gKHgseSx6KSBvciBvbmx5IHRo
ZSBvbmVzICJ0dXJuaW5nIHRoZWlyIGJhY2tzIiwgYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXIg
ImZhY2luZyIgYXJlIHJldHVybmVkCisgICAgICogQHBhcmFtIGZhY2luZyBpZiBmYWNpbmcgYW5k
IGNoZWNrRmFjZSBhcmUgdHJ1ZSwgb25seSB0aGUgZmFjZXQgImZhY2luZyIgdG8gKHgsIHksIHop
IGFyZSByZXR1cm5lZCA6IHBvc2l0aXZlIGRvdCAoeCwgeSwgeikgKiBmYWNldCBwb3NpdGlvbi4g
SWYgZmFjaW5nIHNpIGZhbHNlIGFuZCBjaGVja0ZhY2UgaXMgdHJ1ZSwgb25seSB0aGUgZmFjZXQg
InR1cm5pbmcgdGhlaXIgYmFja3MiIHRvICh4LCB5LCB6KSBhcmUgcmV0dXJuZWQgOiBuZWdhdGl2
ZSBkb3QgKHgsIHksIHopICogZmFjZXQgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0geCBkZWZpbmVz
IHggY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgeSBjb29yZGluYXRlCisgICAg
ICogQHBhcmFtIHogZGVmaW5lcyB6IGNvb3JkaW5hdGUKKyAgICAgKiBAcmV0dXJucyB0aGUgZmFj
ZSBpbmRleCBpZiBmb3VuZCAob3IgbnVsbCBpbnN0ZWFkKQorICAgICAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2ZhY2V0ZGF0YQorICAgICAqLworICAg
IEFic3RyYWN0TWVzaC5wcm90b3R5cGUuZ2V0Q2xvc2VzdEZhY2V0QXRDb29yZGluYXRlcyA9IGZ1
bmN0aW9uICh4LCB5LCB6LCBwcm9qZWN0ZWQsIGNoZWNrRmFjZSwgZmFjaW5nKSB7CisgICAgICAg
IGlmIChjaGVja0ZhY2UgPT09IHZvaWQgMCkgeyBjaGVja0ZhY2UgPSBmYWxzZTsgfQorICAgICAg
ICBpZiAoZmFjaW5nID09PSB2b2lkIDApIHsgZmFjaW5nID0gdHJ1ZTsgfQorICAgICAgICB2YXIg
d29ybGQgPSB0aGlzLmdldFdvcmxkTWF0cml4KCk7CisgICAgICAgIHZhciBpbnZNYXQgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJd
Lk1hdHJpeFs1XTsKKyAgICAgICAgd29ybGQuaW52ZXJ0VG9SZWYoaW52TWF0KTsKKyAgICAgICAg
dmFyIGludlZlY3QgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbOF07CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRp
bmF0ZXNGcm9tRmxvYXRzVG9SZWYoeCwgeSwgeiwgaW52TWF0LCBpbnZWZWN0KTsgLy8gdHJhbnNm
b3JtICh4LHkseikgdG8gY29vcmRpbmF0ZXMgaW4gdGhlIG1lc2ggbG9jYWwgc3BhY2UKKyAgICAg
ICAgdmFyIGNsb3Nlc3QgPSB0aGlzLmdldENsb3Nlc3RGYWNldEF0TG9jYWxDb29yZGluYXRlcyhp
bnZWZWN0LngsIGludlZlY3QueSwgaW52VmVjdC56LCBwcm9qZWN0ZWQsIGNoZWNrRmFjZSwgZmFj
aW5nKTsKKyAgICAgICAgaWYgKHByb2plY3RlZCkgeworICAgICAgICAgICAgLy8gdHJhbmZvcm0g
dGhlIGxvY2FsIGNvbXB1dGVkIHByb2plY3RlZCB2ZWN0b3IgdG8gd29ybGQgY29vcmRpbmF0ZXMK
KyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNGcm9tRmxvYXRzVG9SZWYocHJvamVj
dGVkLngsIHByb2plY3RlZC55LCBwcm9qZWN0ZWQueiwgd29ybGQsIHByb2plY3RlZCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGNsb3Nlc3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIHRoZSBjbG9zZXN0IG1lc2ggZmFjZXQgaW5kZXggYXQgKHgseSx6KSBsb2NhbCBjb29y
ZGluYXRlcywgbnVsbCBpZiBub3QgZm91bmQKKyAgICAgKiBAcGFyYW0gcHJvamVjdGVkIHNldHMg
YXMgdGhlICh4LHkseikgbG9jYWwgcHJvamVjdGlvbiBvbiB0aGUgZmFjZXQKKyAgICAgKiBAcGFy
YW0gY2hlY2tGYWNlIGlmIHRydWUgKGRlZmF1bHQgZmFsc2UpLCBvbmx5IHRoZSBmYWNldCAiZmFj
aW5nIiB0byAoeCx5LHopIG9yIG9ubHkgdGhlIG9uZXMgInR1cm5pbmcgdGhlaXIgYmFja3MiLCBh
Y2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlciAiZmFjaW5nIiBhcmUgcmV0dXJuZWQKKyAgICAgKiBA
cGFyYW0gZmFjaW5nIGlmIGZhY2luZyBhbmQgY2hlY2tGYWNlIGFyZSB0cnVlLCBvbmx5IHRoZSBm
YWNldCAiZmFjaW5nIiB0byAoeCwgeSwgeikgYXJlIHJldHVybmVkIDogcG9zaXRpdmUgZG90ICh4
LCB5LCB6KSAqIGZhY2V0IHBvc2l0aW9uLiBJZiBmYWNpbmcgc2kgZmFsc2UgYW5kIGNoZWNrRmFj
ZSBpcyB0cnVlLCBvbmx5IHRoZSBmYWNldCAidHVybmluZyB0aGVpciBiYWNrcyIgdG8gKHgsIHks
IHopIGFyZSByZXR1cm5lZCA6IG5lZ2F0aXZlIGRvdCAoeCwgeSwgeikgKiBmYWNldCBwb3NpdGlv
bgorICAgICAqIEBwYXJhbSB4IGRlZmluZXMgeCBjb29yZGluYXRlCisgICAgICogQHBhcmFtIHkg
ZGVmaW5lcyB5IGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0geiBkZWZpbmVzIHogY29vcmRpbmF0
ZQorICAgICAqIEByZXR1cm5zIHRoZSBmYWNlIGluZGV4IGlmIGZvdW5kIChvciBudWxsIGluc3Rl
YWQpCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191
c2VfZmFjZXRkYXRhCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5nZXRDbG9z
ZXN0RmFjZXRBdExvY2FsQ29vcmRpbmF0ZXMgPSBmdW5jdGlvbiAoeCwgeSwgeiwgcHJvamVjdGVk
LCBjaGVja0ZhY2UsIGZhY2luZykgeworICAgICAgICBpZiAoY2hlY2tGYWNlID09PSB2b2lkIDAp
IHsgY2hlY2tGYWNlID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGZhY2luZyA9PT0gdm9pZCAwKSB7
IGZhY2luZyA9IHRydWU7IH0KKyAgICAgICAgdmFyIGNsb3Nlc3QgPSBudWxsOworICAgICAgICB2
YXIgdG1weCA9IDAuMDsKKyAgICAgICAgdmFyIHRtcHkgPSAwLjA7CisgICAgICAgIHZhciB0bXB6
ID0gMC4wOworICAgICAgICB2YXIgZCA9IDAuMDsgLy8gdG1wIGRvdCBmYWNldCBub3JtYWwgKiBm
YWNldCBwb3NpdGlvbgorICAgICAgICB2YXIgdDAgPSAwLjA7CisgICAgICAgIHZhciBwcm9qeCA9
IDAuMDsKKyAgICAgICAgdmFyIHByb2p5ID0gMC4wOworICAgICAgICB2YXIgcHJvanogPSAwLjA7
CisgICAgICAgIC8vIEdldCBhbGwgdGhlIGZhY2V0cyBpbiB0aGUgc2FtZSBwYXJ0aXRpb25pbmcg
YmxvY2sgdGhhbiAoeCwgeSwgeikKKyAgICAgICAgdmFyIGZhY2V0UG9zaXRpb25zID0gdGhpcy5n
ZXRGYWNldExvY2FsUG9zaXRpb25zKCk7CisgICAgICAgIHZhciBmYWNldE5vcm1hbHMgPSB0aGlz
LmdldEZhY2V0TG9jYWxOb3JtYWxzKCk7CisgICAgICAgIHZhciBmYWNldHNJbkJsb2NrID0gdGhp
cy5nZXRGYWNldHNBdExvY2FsQ29vcmRpbmF0ZXMoeCwgeSwgeik7CisgICAgICAgIGlmICghZmFj
ZXRzSW5CbG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gR2V0IHRoZSBjbG9zZXN0IGZhY2V0IHRvICh4LCB5LCB6KQorICAgICAgICB2YXIgc2hv
cnRlc3QgPSBOdW1iZXIuTUFYX1ZBTFVFOyAvLyBpbml0IGRpc3RhbmNlIHZhcnMKKyAgICAgICAg
dmFyIHRtcERpc3RhbmNlID0gc2hvcnRlc3Q7CisgICAgICAgIHZhciBmaWI7IC8vIGN1cnJlbnQg
ZmFjZXQgaW4gdGhlIGJsb2NrCisgICAgICAgIHZhciBub3JtOyAvLyBjdXJyZW50IGZhY2V0IG5v
cm1hbAorICAgICAgICB2YXIgcDA7IC8vIGN1cnJlbnQgZmFjZXQgYmFyeWNlbnRlciBwb3NpdGlv
bgorICAgICAgICAvLyBsb29wIG9uIGFsbCB0aGUgZmFjZXRzIGluIHRoZSBjdXJyZW50IHBhcnRp
dGlvbmluZyBibG9jaworICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBmYWNldHNJbkJs
b2NrLmxlbmd0aDsgaWR4KyspIHsKKyAgICAgICAgICAgIGZpYiA9IGZhY2V0c0luQmxvY2tbaWR4
XTsKKyAgICAgICAgICAgIG5vcm0gPSBmYWNldE5vcm1hbHNbZmliXTsKKyAgICAgICAgICAgIHAw
ID0gZmFjZXRQb3NpdGlvbnNbZmliXTsKKyAgICAgICAgICAgIGQgPSAoeCAtIHAwLngpICogbm9y
bS54ICsgKHkgLSBwMC55KSAqIG5vcm0ueSArICh6IC0gcDAueikgKiBub3JtLno7CisgICAgICAg
ICAgICBpZiAoIWNoZWNrRmFjZSB8fCAoY2hlY2tGYWNlICYmIGZhY2luZyAmJiBkID49IDAuMCkg
fHwgKGNoZWNrRmFjZSAmJiAhZmFjaW5nICYmIGQgPD0gMC4wKSkgeworICAgICAgICAgICAgICAg
IC8vIGNvbXB1dGUgKHgseSx6KSBwcm9qZWN0aW9uIG9uIHRoZSBmYWNldCA9IChwcm9qeCwgcHJv
anksIHByb2p6KQorICAgICAgICAgICAgICAgIGQgPSBub3JtLnggKiBwMC54ICsgbm9ybS55ICog
cDAueSArIG5vcm0ueiAqIHAwLno7CisgICAgICAgICAgICAgICAgdDAgPSAtKG5vcm0ueCAqIHgg
KyBub3JtLnkgKiB5ICsgbm9ybS56ICogeiAtIGQpIC8gKG5vcm0ueCAqIG5vcm0ueCArIG5vcm0u
eSAqIG5vcm0ueSArIG5vcm0ueiAqIG5vcm0ueik7CisgICAgICAgICAgICAgICAgcHJvanggPSB4
ICsgbm9ybS54ICogdDA7CisgICAgICAgICAgICAgICAgcHJvankgPSB5ICsgbm9ybS55ICogdDA7
CisgICAgICAgICAgICAgICAgcHJvanogPSB6ICsgbm9ybS56ICogdDA7CisgICAgICAgICAgICAg
ICAgdG1weCA9IHByb2p4IC0geDsKKyAgICAgICAgICAgICAgICB0bXB5ID0gcHJvankgLSB5Owor
ICAgICAgICAgICAgICAgIHRtcHogPSBwcm9qeiAtIHo7CisgICAgICAgICAgICAgICAgdG1wRGlz
dGFuY2UgPSB0bXB4ICogdG1weCArIHRtcHkgKiB0bXB5ICsgdG1weiAqIHRtcHo7IC8vIGNvbXB1
dGUgbGVuZ3RoIGJldHdlZW4gKHgsIHksIHopIGFuZCBpdHMgcHJvamVjdGlvbiBvbiB0aGUgZmFj
ZXQKKyAgICAgICAgICAgICAgICBpZiAodG1wRGlzdGFuY2UgPCBzaG9ydGVzdCkgeyAvLyBqdXN0
IGtlZXAgdGhlIGNsb3Nlc3QgZmFjZXQgdG8gKHgsIHksIHopCisgICAgICAgICAgICAgICAgICAg
IHNob3J0ZXN0ID0gdG1wRGlzdGFuY2U7CisgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3QgPSBm
aWI7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9qZWN0ZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByb2plY3RlZC54ID0gcHJvang7CisgICAgICAgICAgICAgICAgICAgICAgICBw
cm9qZWN0ZWQueSA9IHByb2p5OworICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdGVkLnog
PSBwcm9qejsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2xvc2VzdDsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFJldHVybnMgdGhlIG9iamVjdCAicGFyYW1ldGVyIiBzZXQgd2l0aCBhbGwg
dGhlIGV4cGVjdGVkIHBhcmFtZXRlcnMgZm9yIGZhY2V0RGF0YSBjb21wdXRhdGlvbiBieSBDb21w
dXRlTm9ybWFscygpCisgICAgICogQHJldHVybnMgdGhlIHBhcmFtZXRlcnMKKyAgICAgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9mYWNldGRhdGEKKyAg
ICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLmdldEZhY2V0RGF0YVBhcmFtZXRlcnMg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVz
aERhdGFJbmZvLl9mYWNldERhdGEuZmFjZXRQYXJhbWV0ZXJzOworICAgIH07CisgICAgLyoqCisg
ICAgICogRGlzYWJsZXMgdGhlIGZlYXR1cmUgRmFjZXREYXRhIGFuZCBmcmVlcyB0aGUgcmVsYXRl
ZCBtZW1vcnkKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICogQHNlZSBo
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfZmFjZXRkYXRhCisgICAg
ICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5kaXNhYmxlRmFjZXREYXRhID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB2YXIgZmFjZXREYXRhID0gdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1l
c2hEYXRhSW5mby5fZmFjZXREYXRhOworICAgICAgICBpZiAoZmFjZXREYXRhLmZhY2V0RGF0YUVu
YWJsZWQpIHsKKyAgICAgICAgICAgIGZhY2V0RGF0YS5mYWNldERhdGFFbmFibGVkID0gZmFsc2U7
CisgICAgICAgICAgICBmYWNldERhdGEuZmFjZXRQb3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgICAgIGZhY2V0RGF0YS5mYWNldE5vcm1hbHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAg
ICAgIGZhY2V0RGF0YS5mYWNldFBhcnRpdGlvbmluZyA9IG5ldyBBcnJheSgpOworICAgICAgICAg
ICAgZmFjZXREYXRhLmZhY2V0UGFyYW1ldGVycyA9IG51bGw7CisgICAgICAgICAgICBmYWNldERh
dGEuZGVwdGhTb3J0ZWRJbmRpY2VzID0gbmV3IFVpbnQzMkFycmF5KDApOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUg
QWJzdHJhY3RNZXNoIGluZGljZXMgYXJyYXkKKyAgICAgKiBAcGFyYW0gaW5kaWNlcyBkZWZpbmVz
IHRoZSBkYXRhIHNvdXJjZQorICAgICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0
IGluIHRoZSBpbmRleCBidWZmZXIgd2hlcmUgdG8gc3RvcmUgdGhlIG5ldyBkYXRhIChjYW4gYmUg
bnVsbCkKKyAgICAgKiBAcGFyYW0gZ3B1TWVtb3J5T25seSBkZWZpbmVzIGEgYm9vbGVhbiBpbmRp
Y2F0aW5nIHRoYXQgb25seSB0aGUgR1BVIG1lbW9yeSBtdXN0IGJlIHVwZGF0ZWQgbGVhdmluZyB0
aGUgQ1BVIHZlcnNpb24gb2YgdGhlIGluZGljZXMgdW5jaGFuZ2VkIChmYWxzZSBieSBkZWZhdWx0
KQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBBYnN0cmFj
dE1lc2gucHJvdG90eXBlLnVwZGF0ZUluZGljZXMgPSBmdW5jdGlvbiAoaW5kaWNlcywgb2Zmc2V0
LCBncHVNZW1vcnlPbmx5KSB7CisgICAgICAgIGlmIChncHVNZW1vcnlPbmx5ID09PSB2b2lkIDAp
IHsgZ3B1TWVtb3J5T25seSA9IGZhbHNlOyB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBuZXcgbm9ybWFscyBkYXRhIGZvciB0aGUgbWVzaAor
ICAgICAqIEBwYXJhbSB1cGRhdGFibGUgZGVmaW5lcyBpZiB0aGUgbm9ybWFsIHZlcnRleCBidWZm
ZXIgbXVzdCBiZSBmbGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJy
ZW50IG1lc2gKKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2gucHJvdG90eXBlLmNyZWF0ZU5vcm1h
bHMgPSBmdW5jdGlvbiAodXBkYXRhYmxlKSB7CisgICAgICAgIHZhciBwb3NpdGlvbnMgPSB0aGlz
LmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpOworICAgICAgICB2YXIgaW5kaWNlcyA9
IHRoaXMuZ2V0SW5kaWNlcygpOworICAgICAgICB2YXIgbm9ybWFsczsKKyAgICAgICAgaWYgKHRo
aXMuaXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQpKSB7CisgICAgICAgICAgICBu
b3JtYWxzID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBub3JtYWxzID0gW107CisgICAgICAgIH0KKyAg
ICAgICAgX01lc2hlc19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siVmVydGV4RGF0YSJdLkNvbXB1dGVOb3JtYWxzKHBvc2l0aW9ucywgaW5kaWNlcywgbm9ybWFs
cywgeyB1c2VSaWdodEhhbmRlZFN5c3RlbTogdGhpcy5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVk
U3lzdGVtIH0pOworICAgICAgICB0aGlzLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBu
b3JtYWxzLCB1cGRhdGFibGUpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEFsaWduIHRoZSBtZXNoIHdpdGggYSBub3JtYWwKKyAgICAgKiBAcGFyYW0gbm9y
bWFsIGRlZmluZXMgdGhlIG5vcm1hbCB0byB1c2UKKyAgICAgKiBAcGFyYW0gdXBEaXJlY3Rpb24g
Y2FuIGJlIHVzZWQgdG8gcmVkZWZpbmVkIHRoZSB1cCB2ZWN0b3IgdG8gdXNlICh3aWxsIHVzZSB0
aGUgKDAsIDEsIDApIGJ5IGRlZmF1bHQpCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVz
aAorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5wcm90b3R5cGUuYWxpZ25XaXRoTm9ybWFsID0g
ZnVuY3Rpb24gKG5vcm1hbCwgdXBEaXJlY3Rpb24pIHsKKyAgICAgICAgaWYgKCF1cERpcmVjdGlv
bikgeworICAgICAgICAgICAgdXBEaXJlY3Rpb24gPSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xN19fWyJBeGlzIl0uWTsKKyAgICAgICAgfQorICAgICAgICB2YXIg
YXhpc1ggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VG1wVmVjdG9ycyJdLlZlY3RvcjNbMF07CisgICAgICAgIHZhciBheGlzWiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9y
M1sxXTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlY3RvcjMiXS5Dcm9zc1RvUmVmKHVwRGlyZWN0aW9uLCBub3JtYWwsIGF4aXNaKTsK
KyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlY3RvcjMiXS5Dcm9zc1RvUmVmKG5vcm1hbCwgYXhpc1osIGF4aXNYKTsKKyAgICAgICAgaWYg
KHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVhdGVybmlvbiJdLlJvdGF0aW9uUXVh
dGVybmlvbkZyb21BeGlzVG9SZWYoYXhpc1gsIG5vcm1hbCwgYXhpc1osIHRoaXMucm90YXRpb25R
dWF0ZXJuaW9uKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uUm90
YXRpb25Gcm9tQXhpc1RvUmVmKGF4aXNYLCBub3JtYWwsIGF4aXNaLCB0aGlzLnJvdGF0aW9uKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKiBAaGlkZGVu
ICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5fY2hlY2tPY2NsdXNpb25RdWVyeSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqCisgICAg
ICogRGlzYWJsZXMgdGhlIG1lc2ggZWRnZSByZW5kZXJpbmcgbW9kZQorICAgICAqIEByZXR1cm5z
IHRoZSBjdXJyZW50QWJzdHJhY3RNZXNoCisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLnByb3Rv
dHlwZS5kaXNhYmxlRWRnZXNSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93
IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJfRGV2VG9vbHMi
XS5XYXJuSW1wb3J0KCJFZGdlc1JlbmRlcmVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBF
bmFibGVzIHRoZSBlZGdlIHJlbmRlcmluZyBtb2RlIG9uIHRoZSBtZXNoLgorICAgICAqIFRoaXMg
bW9kZSBtYWtlcyB0aGUgbWVzaCBlZGdlcyB2aXNpYmxlCisgICAgICogQHBhcmFtIGVwc2lsb24g
ZGVmaW5lcyB0aGUgbWF4aW1hbCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBhbmdsZXMgdG8gZGV0ZWN0
IGEgZmFjZQorICAgICAqIEBwYXJhbSBjaGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcyBpbmRp
Y2F0ZXMgdGhhdCB3ZSBzaG91bGQgY2hlY2sgdmVydGV4IGxpc3QgZGlyZWN0bHkgaW5zdGVhZCBv
ZiBmYWNlcworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50QWJzdHJhY3RNZXNoCisgICAgICog
QHNlZSBodHRwczovL3d3dy5iYWJ5bG9uanMtcGxheWdyb3VuZC5jb20vIzE5TzlUVSMwCisgICAg
ICovCisgICAgQWJzdHJhY3RNZXNoLnByb3RvdHlwZS5lbmFibGVFZGdlc1JlbmRlcmluZyA9IGZ1
bmN0aW9uIChlcHNpbG9uLCBjaGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcykgeworICAgICAg
ICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siX0Rl
dlRvb2xzIl0uV2FybkltcG9ydCgiRWRnZXNSZW5kZXJlciIpOworICAgIH07CisgICAgLyoqIE5v
IG9jY2x1c2lvbiAqLworICAgIEFic3RyYWN0TWVzaC5PQ0NMVVNJT05fVFlQRV9OT05FID0gMDsK
KyAgICAvKiogT2NjbHVzaW9uIHNldCB0byBvcHRpbWlzaXRpYyAqLworICAgIEFic3RyYWN0TWVz
aC5PQ0NMVVNJT05fVFlQRV9PUFRJTUlTVElDID0gMTsKKyAgICAvKiogT2NjbHVzaW9uIHNldCB0
byBzdHJpY3QgKi8KKyAgICBBYnN0cmFjdE1lc2guT0NDTFVTSU9OX1RZUEVfU1RSSUNUID0gMjsK
KyAgICAvKiogVXNlIGFuIGFjY3VyYW50ZSBvY2NsdXNpb24gYWxnb3JpdGhtICovCisgICAgQWJz
dHJhY3RNZXNoLk9DQ0xVU0lPTl9BTEdPUklUSE1fVFlQRV9BQ0NVUkFURSA9IDA7CisgICAgLyoq
IFVzZSBhIGNvbnNlcnZhdGl2ZSBvY2NsdXNpb24gYWxnb3JpdGhtICovCisgICAgQWJzdHJhY3RN
ZXNoLk9DQ0xVU0lPTl9BTEdPUklUSE1fVFlQRV9DT05TRVJWQVRJVkUgPSAxOworICAgIC8qKiBE
ZWZhdWx0IGN1bGxpbmcgc3RyYXRlZ3kgOiB0aGlzIGlzIGFuIGV4Y2x1c2lvbiB0ZXN0IGFuZCBp
dCdzIHRoZSBtb3JlIGFjY3VyYXRlLgorICAgICAqICBUZXN0IG9yZGVyIDoKKyAgICAgKiAgSXMg
dGhlIGJvdW5kaW5nIHNwaGVyZSBvdXRzaWRlIHRoZSBmcnVzdHVtID8KKyAgICAgKiAgSWYgbm90
LCBhcmUgdGhlIGJvdW5kaW5nIGJveCB2ZXJ0aWNlcyBvdXRzaWRlIHRoZSBmcnVzdHVtID8KKyAg
ICAgKiAgSXQgbm90LCB0aGVuIHRoZSBjdWxsYWJsZSBvYmplY3QgaXMgaW4gdGhlIGZydXN0dW0u
CisgICAgICovCisgICAgQWJzdHJhY3RNZXNoLkNVTExJTkdTVFJBVEVHWV9TVEFOREFSRCA9IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQ29uc3RhbnRz
Il0uTUVTSEVTX0NVTExJTkdTVFJBVEVHWV9TVEFOREFSRDsKKyAgICAvKiogQ3VsbGluZyBzdHJh
dGVneSA6IEJvdW5kaW5nIFNwaGVyZSBPbmx5LgorICAgICAqICBUaGlzIGlzIGFuIGV4Y2x1c2lv
biB0ZXN0LiBJdCdzIGZhc3RlciB0aGFuIHRoZSBzdGFuZGFyZCBzdHJhdGVneSBiZWNhdXNlIHRo
ZSBib3VuZGluZyBib3ggaXMgbm90IHRlc3RlZC4KKyAgICAgKiAgSXQncyBhbHNvIGxlc3MgYWNj
dXJhdGUgdGhhbiB0aGUgc3RhbmRhcmQgYmVjYXVzZSBzb21lIG5vdCB2aXNpYmxlIG9iamVjdHMg
Y2FuIHN0aWxsIGJlIHNlbGVjdGVkLgorICAgICAqICBUZXN0IDogaXMgdGhlIGJvdW5kaW5nIHNw
aGVyZSBvdXRzaWRlIHRoZSBmcnVzdHVtID8KKyAgICAgKiAgSWYgbm90LCB0aGVuIHRoZSBjdWxs
YWJsZSBvYmplY3QgaXMgaW4gdGhlIGZydXN0dW0uCisgICAgICovCisgICAgQWJzdHJhY3RNZXNo
LkNVTExJTkdTVFJBVEVHWV9CT1VORElOR1NQSEVSRV9PTkxZID0gX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJDb25zdGFudHMiXS5NRVNIRVNfQ1VMTElO
R1NUUkFURUdZX0JPVU5ESU5HU1BIRVJFX09OTFk7CisgICAgLyoqIEN1bGxpbmcgc3RyYXRlZ3kg
OiBPcHRpbWlzdGljIEluY2x1c2lvbi4KKyAgICAgKiAgVGhpcyBpbiBhbiBpbmNsdXNpb24gdGVz
dCBmaXJzdCwgdGhlbiB0aGUgc3RhbmRhcmQgZXhjbHVzaW9uIHRlc3QuCisgICAgICogIFRoaXMg
Y2FuIGJlIGZhc3RlciB3aGVuIGEgY3VsbGFibGUgb2JqZWN0IGlzIGV4cGVjdGVkIHRvIGJlIGFs
bW9zdCBhbHdheXMgaW4gdGhlIGNhbWVyYSBmcnVzdHVtLgorICAgICAqICBUaGlzIGNvdWxkIGFs
c28gYmUgYSBsaXR0bGUgc2xvd2VyIHRoYW4gdGhlIHN0YW5kYXJkIHRlc3Qgd2hlbiB0aGUgdGVz
dGVkIG9iamVjdCBjZW50ZXIgaXMgbm90IHRoZSBmcnVzdHVtIGJ1dCBvbmUgb2YgaXRzIGJvdW5k
aW5nIGJveCB2ZXJ0ZXggaXMgc3RpbGwgaW5zaWRlLgorICAgICAqICBBbnl3YXksIGl0J3MgYXMg
YWNjdXJhdGUgYXMgdGhlIHN0YW5kYXJkIHN0cmF0ZWd5LgorICAgICAqICBUZXN0IDoKKyAgICAg
KiAgSXMgdGhlIGN1bGxhYmxlIG9iamVjdCBib3VuZGluZyBzcGhlcmUgY2VudGVyIGluIHRoZSBm
cnVzdHVtID8KKyAgICAgKiAgSWYgbm90LCBhcHBseSB0aGUgZGVmYXVsdCBjdWxsaW5nIHN0cmF0
ZWd5LgorICAgICAqLworICAgIEFic3RyYWN0TWVzaC5DVUxMSU5HU1RSQVRFR1lfT1BUSU1JU1RJ
Q19JTkNMVVNJT04gPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzEwX19bIkNvbnN0YW50cyJdLk1FU0hFU19DVUxMSU5HU1RSQVRFR1lfT1BUSU1JU1RJQ19JTkNM
VVNJT047CisgICAgLyoqIEN1bGxpbmcgc3RyYXRlZ3kgOiBPcHRpbWlzdGljIEluY2x1c2lvbiB0
aGVuIEJvdW5kaW5nIFNwaGVyZSBPbmx5LgorICAgICAqICBUaGlzIGluIGFuIGluY2x1c2lvbiB0
ZXN0IGZpcnN0LCB0aGVuIHRoZSBib3VuZGluZyBzcGhlcmUgb25seSBleGNsdXNpb24gdGVzdC4K
KyAgICAgKiAgVGhpcyBjYW4gYmUgdGhlIGZhc3Rlc3QgdGVzdCB3aGVuIGEgY3VsbGFibGUgb2Jq
ZWN0IGlzIGV4cGVjdGVkIHRvIGJlIGFsbW9zdCBhbHdheXMgaW4gdGhlIGNhbWVyYSBmcnVzdHVt
LgorICAgICAqICBUaGlzIGNvdWxkIGFsc28gYmUgYSBsaXR0bGUgc2xvd2VyIHRoYW4gdGhlIEJv
dW5kaW5nU3BoZXJlT25seSBzdHJhdGVneSB3aGVuIHRoZSB0ZXN0ZWQgb2JqZWN0IGNlbnRlciBp
cyBub3QgaW4gdGhlIGZydXN0dW0gYnV0IGl0cyBib3VuZGluZyBzcGhlcmUgc3RpbGwgaW50ZXJz
ZWN0cyBpdC4KKyAgICAgKiAgSXQncyBsZXNzIGFjY3VyYXRlIHRoYW4gdGhlIHN0YW5kYXJkIHN0
cmF0ZWd5IGFuZCBhcyBhY2N1cmF0ZSBhcyB0aGUgQm91bmRpbmdTcGhlcmVPbmx5IHN0cmF0ZWd5
LgorICAgICAqICBUZXN0IDoKKyAgICAgKiAgSXMgdGhlIGN1bGxhYmxlIG9iamVjdCBib3VuZGlu
ZyBzcGhlcmUgY2VudGVyIGluIHRoZSBmcnVzdHVtID8KKyAgICAgKiAgSWYgbm90LCBhcHBseSB0
aGUgQm91bmRpbmcgU3BoZXJlIE9ubHkgc3RyYXRlZ3kuIE5vIEJvdW5kaW5nIEJveCBpcyB0ZXN0
ZWQgaGVyZS4KKyAgICAgKi8KKyAgICBBYnN0cmFjdE1lc2guQ1VMTElOR1NUUkFURUdZX09QVElN
SVNUSUNfSU5DTFVTSU9OX1RIRU5fQlNQSEVSRV9PTkxZID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJDb25zdGFudHMiXS5NRVNIRVNfQ1VMTElOR1NU
UkFURUdZX09QVElNSVNUSUNfSU5DTFVTSU9OX1RIRU5fQlNQSEVSRV9PTkxZOworICAgIHJldHVy
biBBYnN0cmFjdE1lc2g7Cit9KF9NZXNoZXNfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJUcmFuc2Zvcm1Ob2RlIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9NZXNoZXMvYnVmZmVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9NZXNoZXMvYnVmZmVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJ1ZmZlciwgVmVydGV4QnVmZmVyICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gQnVmZmVyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlcnRleEJ1ZmZlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gVmVydGV4QnVmZmVyOyB9KTsKKy8qKgorICogQ2xhc3MgdXNlZCB0byBz
dG9yZSBkYXRhIHRoYXQgd2lsbCBiZSBzdG9yZSBpbiBHUFUgbWVtb3J5CisgKi8KK3ZhciBCdWZm
ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ29uc3Ry
dWN0b3IKKyAgICAgKiBAcGFyYW0gZW5naW5lIHRoZSBlbmdpbmUKKyAgICAgKiBAcGFyYW0gZGF0
YSB0aGUgZGF0YSB0byB1c2UgZm9yIHRoaXMgYnVmZmVyCisgICAgICogQHBhcmFtIHVwZGF0YWJs
ZSB3aGV0aGVyIHRoZSBkYXRhIGlzIHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBzdHJpZGUgdGhl
IHN0cmlkZSAob3B0aW9uYWwpCisgICAgICogQHBhcmFtIHBvc3Rwb25lSW50ZXJuYWxDcmVhdGlv
biB3aGV0aGVyIHRvIHBvc3Rwb25lIGNyZWF0aW5nIHRoZSBpbnRlcm5hbCBXZWJHTCBidWZmZXIg
KG9wdGlvbmFsKQorICAgICAqIEBwYXJhbSBpbnN0YW5jZWQgd2hldGhlciB0aGUgYnVmZmVyIGlz
IGluc3RhbmNlZCAob3B0aW9uYWwpCisgICAgICogQHBhcmFtIHVzZUJ5dGVzIHNldCB0byB0cnVl
IGlmIHRoZSBzdHJpZGUgaW4gaW4gYnl0ZXMgKG9wdGlvbmFsKQorICAgICAqLworICAgIGZ1bmN0
aW9uIEJ1ZmZlcihlbmdpbmUsIGRhdGEsIHVwZGF0YWJsZSwgc3RyaWRlLCBwb3N0cG9uZUludGVy
bmFsQ3JlYXRpb24sIGluc3RhbmNlZCwgdXNlQnl0ZXMpIHsKKyAgICAgICAgaWYgKHN0cmlkZSA9
PT0gdm9pZCAwKSB7IHN0cmlkZSA9IDA7IH0KKyAgICAgICAgaWYgKHBvc3Rwb25lSW50ZXJuYWxD
cmVhdGlvbiA9PT0gdm9pZCAwKSB7IHBvc3Rwb25lSW50ZXJuYWxDcmVhdGlvbiA9IGZhbHNlOyB9
CisgICAgICAgIGlmIChpbnN0YW5jZWQgPT09IHZvaWQgMCkgeyBpbnN0YW5jZWQgPSBmYWxzZTsg
fQorICAgICAgICBpZiAodXNlQnl0ZXMgPT09IHZvaWQgMCkgeyB1c2VCeXRlcyA9IGZhbHNlOyB9
CisgICAgICAgIGlmIChlbmdpbmUuZ2V0U2NlbmUpIHsgLy8gb2xkIHZlcnNpb25zIG9mIFZlcnRl
eEJ1ZmZlciBhY2NlcHRlZCAnbWVzaCcgaW5zdGVhZCBvZiAnZW5naW5lJworICAgICAgICAgICAg
dGhpcy5fZW5naW5lID0gZW5naW5lLmdldFNjZW5lKCkuZ2V0RW5naW5lKCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUgPSBlbmdpbmU7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fdXBkYXRhYmxlID0gdXBkYXRhYmxlOworICAgICAgICB0aGlz
Ll9pbnN0YW5jZWQgPSBpbnN0YW5jZWQ7CisgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhOworICAg
ICAgICB0aGlzLmJ5dGVTdHJpZGUgPSB1c2VCeXRlcyA/IHN0cmlkZSA6IHN0cmlkZSAqIEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDsKKyAgICAgICAgaWYgKCFwb3N0cG9uZUludGVybmFs
Q3JlYXRpb24pIHsgLy8gYnkgZGVmYXVsdAorICAgICAgICAgICAgdGhpcy5jcmVhdGUoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgVmVydGV4QnVmZmVy
IGJhc2VkIG9uIHRoZSBjdXJyZW50IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMg
dGhlIHZlcnRleCBidWZmZXIga2luZCAocG9zaXRpb24sIG5vcm1hbCwgZXRjLikKKyAgICAgKiBA
cGFyYW0gb2Zmc2V0IGRlZmluZXMgb2Zmc2V0IGluIHRoZSBidWZmZXIgKDAgYnkgZGVmYXVsdCkK
KyAgICAgKiBAcGFyYW0gc2l6ZSBkZWZpbmVzIHRoZSBzaXplIGluIGZsb2F0cyBvZiBhdHRyaWJ1
dGVzIChwb3NpdGlvbiBpcyAzIGZvciBpbnN0YW5jZSkKKyAgICAgKiBAcGFyYW0gc3RyaWRlIGRl
ZmluZXMgdGhlIHN0cmlkZSBzaXplIGluIGZsb2F0cyBpbiB0aGUgYnVmZmVyICh0aGUgb2Zmc2V0
IHRvIGFwcGx5IHRvIHJlYWNoIG5leHQgdmFsdWUgd2hlbiBkYXRhIGlzIGludGVybGVhdmVkKQor
ICAgICAqIEBwYXJhbSBpbnN0YW5jZWQgZGVmaW5lcyBpZiB0aGUgdmVydGV4IGJ1ZmZlciBjb250
YWlucyBpbmRleGVkIGRhdGEKKyAgICAgKiBAcGFyYW0gdXNlQnl0ZXMgZGVmaW5lcyBpZiB0aGUg
b2Zmc2V0IGFuZCBzdHJpZGUgYXJlIGluIGJ5dGVzCisgICAgICogQHJldHVybnMgdGhlIG5ldyB2
ZXJ0ZXggYnVmZmVyCisgICAgICovCisgICAgQnVmZmVyLnByb3RvdHlwZS5jcmVhdGVWZXJ0ZXhC
dWZmZXIgPSBmdW5jdGlvbiAoa2luZCwgb2Zmc2V0LCBzaXplLCBzdHJpZGUsIGluc3RhbmNlZCwg
dXNlQnl0ZXMpIHsKKyAgICAgICAgaWYgKHVzZUJ5dGVzID09PSB2b2lkIDApIHsgdXNlQnl0ZXMg
PSBmYWxzZTsgfQorICAgICAgICB2YXIgYnl0ZU9mZnNldCA9IHVzZUJ5dGVzID8gb2Zmc2V0IDog
b2Zmc2V0ICogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UOworICAgICAgICB2YXIgYnl0
ZVN0cmlkZSA9IHN0cmlkZSA/ICh1c2VCeXRlcyA/IHN0cmlkZSA6IHN0cmlkZSAqIEZsb2F0MzJB
cnJheS5CWVRFU19QRVJfRUxFTUVOVCkgOiB0aGlzLmJ5dGVTdHJpZGU7CisgICAgICAgIC8vIGEg
bG90IG9mIHRoZXNlIHBhcmFtZXRlcnMgYXJlIGlnbm9yZWQgYXMgdGhleSBhcmUgb3ZlcnJpZGVu
IGJ5IHRoZSBidWZmZXIKKyAgICAgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIodGhpcy5fZW5n
aW5lLCB0aGlzLCBraW5kLCB0aGlzLl91cGRhdGFibGUsIHRydWUsIGJ5dGVTdHJpZGUsIGluc3Rh
bmNlZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5faW5zdGFuY2VkIDogaW5zdGFuY2VkLCBieXRlT2Zm
c2V0LCBzaXplLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSk7CisgICAgfTsKKyAgICAvLyBQ
cm9wZXJ0aWVzCisgICAgLyoqCisgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0
aGUgQnVmZmVyIGlzIHVwZGF0YWJsZT8KKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBidWZm
ZXIgaXMgdXBkYXRhYmxlCisgICAgICovCisgICAgQnVmZmVyLnByb3RvdHlwZS5pc1VwZGF0YWJs
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0YWJsZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgY3VycmVudCBidWZmZXIncyBkYXRhCisgICAgICogQHJl
dHVybnMgYSBEYXRhQXJyYXkgb3IgbnVsbAorICAgICAqLworICAgIEJ1ZmZlci5wcm90b3R5cGUu
Z2V0RGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHVuZGVybHlpbmcgbmF0aXZlIGJ1ZmZlcgorICAgICAq
IEByZXR1cm5zIHVuZGVybHlpbmcgbmF0aXZlIGJ1ZmZlcgorICAgICAqLworICAgIEJ1ZmZlci5w
cm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5f
YnVmZmVyOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc3RyaWRlIGluIGZsb2F0
MzIgdW5pdHMgKGkuZS4gYnl0ZSBzdHJpZGUgLyA0KS4KKyAgICAgKiBNYXkgbm90IGJlIGFuIGlu
dGVnZXIgaWYgdGhlIGJ5dGUgc3RyaWRlIGlzIG5vdCBkaXZpc2libGUgYnkgNC4KKyAgICAgKiBE
RVBSRUNBVEVELiBVc2UgYnl0ZVN0cmlkZSBpbnN0ZWFkLgorICAgICAqIEByZXR1cm5zIHRoZSBz
dHJpZGUgaW4gZmxvYXQzMiB1bml0cworICAgICAqLworICAgIEJ1ZmZlci5wcm90b3R5cGUuZ2V0
U3RyaWRlU2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZVN0cmlk
ZSAvIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDsKKyAgICB9OworICAgIC8vIE1ldGhv
ZHMKKyAgICAvKioKKyAgICAgKiBTdG9yZSBkYXRhIGludG8gdGhlIGJ1ZmZlci4gSWYgdGhlIGJ1
ZmZlciB3YXMgYWxyZWFkeSB1c2VkIGl0IHdpbGwgYmUgZWl0aGVyIHJlY3JlYXRlZCBvciB1cGRh
dGVkIGRlcGVuZGluZyBvbiBpc1VwZGF0YWJsZSBwcm9wZXJ0eQorICAgICAqIEBwYXJhbSBkYXRh
IGRlZmluZXMgdGhlIGRhdGEgdG8gc3RvcmUKKyAgICAgKi8KKyAgICBCdWZmZXIucHJvdG90eXBl
LmNyZWF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIGlmIChkYXRhID09PSB2b2lkIDAp
IHsgZGF0YSA9IG51bGw7IH0KKyAgICAgICAgaWYgKCFkYXRhICYmIHRoaXMuX2J1ZmZlcikgewor
ICAgICAgICAgICAgcmV0dXJuOyAvLyBub3RoaW5nIHRvIGRvCisgICAgICAgIH0KKyAgICAgICAg
ZGF0YSA9IGRhdGEgfHwgdGhpcy5fZGF0YTsKKyAgICAgICAgaWYgKCFkYXRhKSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9idWZmZXIpIHsgLy8g
Y3JlYXRlIGJ1ZmZlcgorICAgICAgICAgICAgaWYgKHRoaXMuX3VwZGF0YWJsZSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IHRoaXMuX2VuZ2luZS5jcmVhdGVEeW5hbWljVmVydGV4
QnVmZmVyKGRhdGEpOworICAgICAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVy
ID0gdGhpcy5fZW5naW5lLmNyZWF0ZVZlcnRleEJ1ZmZlcihkYXRhKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLl91cGRhdGFibGUpIHsgLy8gdXBkYXRl
IGJ1ZmZlcgorICAgICAgICAgICAgdGhpcy5fZW5naW5lLnVwZGF0ZUR5bmFtaWNWZXJ0ZXhCdWZm
ZXIodGhpcy5fYnVmZmVyLCBkYXRhKTsKKyAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEJ1ZmZlci5wcm90b3R5
cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7
CisgICAgICAgIHRoaXMuY3JlYXRlKHRoaXMuX2RhdGEpOworICAgIH07CisgICAgLyoqCisgICAg
ICogVXBkYXRlIGN1cnJlbnQgYnVmZmVyIGRhdGEKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVz
IHRoZSBkYXRhIHRvIHN0b3JlCisgICAgICovCisgICAgQnVmZmVyLnByb3RvdHlwZS51cGRhdGUg
PSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB0aGlzLmNyZWF0ZShkYXRhKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGRhdGEgZGlyZWN0bHkuCisgICAgICogQHBhcmFt
IGRhdGEgdGhlIG5ldyBkYXRhCisgICAgICogQHBhcmFtIG9mZnNldCB0aGUgbmV3IG9mZnNldAor
ICAgICAqIEBwYXJhbSB2ZXJ0ZXhDb3VudCB0aGUgdmVydGV4IGNvdW50IChvcHRpb25hbCkKKyAg
ICAgKiBAcGFyYW0gdXNlQnl0ZXMgc2V0IHRvIHRydWUgaWYgdGhlIG9mZnNldCBpcyBpbiBieXRl
cworICAgICAqLworICAgIEJ1ZmZlci5wcm90b3R5cGUudXBkYXRlRGlyZWN0bHkgPSBmdW5jdGlv
biAoZGF0YSwgb2Zmc2V0LCB2ZXJ0ZXhDb3VudCwgdXNlQnl0ZXMpIHsKKyAgICAgICAgaWYgKHVz
ZUJ5dGVzID09PSB2b2lkIDApIHsgdXNlQnl0ZXMgPSBmYWxzZTsgfQorICAgICAgICBpZiAoIXRo
aXMuX2J1ZmZlcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLl91cGRhdGFibGUpIHsgLy8gdXBkYXRlIGJ1ZmZlcgorICAgICAgICAgICAgdGhpcy5f
ZW5naW5lLnVwZGF0ZUR5bmFtaWNWZXJ0ZXhCdWZmZXIodGhpcy5fYnVmZmVyLCBkYXRhLCB1c2VC
eXRlcyA/IG9mZnNldCA6IG9mZnNldCAqIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwg
KHZlcnRleENvdW50ID8gdmVydGV4Q291bnQgKiB0aGlzLmJ5dGVTdHJpZGUgOiB1bmRlZmluZWQp
KTsKKyAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZWxlYXNlIGFsbCByZXNvdXJjZXMKKyAgICAgKi8KKyAgICBCdWZmZXIu
cHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fYnVm
ZmVyKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X2VuZ2luZS5fcmVsZWFzZUJ1ZmZlcih0aGlzLl9idWZmZXIpKSB7CisgICAgICAgICAgICB0aGlz
Ll9idWZmZXIgPSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gQnVmZmVyOwor
fSgpKTsKKworLyoqCisgICAgICogU3BlY2lhbGl6ZWQgYnVmZmVyIHVzZWQgdG8gc3RvcmUgdmVy
dGV4IGRhdGEKKyAgICAgKi8KK3ZhciBWZXJ0ZXhCdWZmZXIgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IKKyAgICAgKiBAcGFyYW0gZW5n
aW5lIHRoZSBlbmdpbmUKKyAgICAgKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSB0byB1c2UgZm9yIHRo
aXMgdmVydGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBraW5kIHRoZSB2ZXJ0ZXggYnVmZmVyIGtp
bmQKKyAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIHdoZXRoZXIgdGhlIGRhdGEgaXMgdXBkYXRhYmxl
CisgICAgICogQHBhcmFtIHBvc3Rwb25lSW50ZXJuYWxDcmVhdGlvbiB3aGV0aGVyIHRvIHBvc3Rw
b25lIGNyZWF0aW5nIHRoZSBpbnRlcm5hbCBXZWJHTCBidWZmZXIgKG9wdGlvbmFsKQorICAgICAq
IEBwYXJhbSBzdHJpZGUgdGhlIHN0cmlkZSAob3B0aW9uYWwpCisgICAgICogQHBhcmFtIGluc3Rh
bmNlZCB3aGV0aGVyIHRoZSBidWZmZXIgaXMgaW5zdGFuY2VkIChvcHRpb25hbCkKKyAgICAgKiBA
cGFyYW0gb2Zmc2V0IHRoZSBvZmZzZXQgb2YgdGhlIGRhdGEgKG9wdGlvbmFsKQorICAgICAqIEBw
YXJhbSBzaXplIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyAob3B0aW9uYWwpCisgICAgICogQHBh
cmFtIHR5cGUgdGhlIHR5cGUgb2YgdGhlIGNvbXBvbmVudCAob3B0aW9uYWwpCisgICAgICogQHBh
cmFtIG5vcm1hbGl6ZWQgd2hldGhlciB0aGUgZGF0YSBjb250YWlucyBub3JtYWxpemVkIGRhdGEg
KG9wdGlvbmFsKQorICAgICAqIEBwYXJhbSB1c2VCeXRlcyBzZXQgdG8gdHJ1ZSBpZiBzdHJpZGUg
YW5kIG9mZnNldCBhcmUgaW4gYnl0ZXMgKG9wdGlvbmFsKQorICAgICAqLworICAgIGZ1bmN0aW9u
IFZlcnRleEJ1ZmZlcihlbmdpbmUsIGRhdGEsIGtpbmQsIHVwZGF0YWJsZSwgcG9zdHBvbmVJbnRl
cm5hbENyZWF0aW9uLCBzdHJpZGUsIGluc3RhbmNlZCwgb2Zmc2V0LCBzaXplLCB0eXBlLCBub3Jt
YWxpemVkLCB1c2VCeXRlcykgeworICAgICAgICBpZiAobm9ybWFsaXplZCA9PT0gdm9pZCAwKSB7
IG5vcm1hbGl6ZWQgPSBmYWxzZTsgfQorICAgICAgICBpZiAodXNlQnl0ZXMgPT09IHZvaWQgMCkg
eyB1c2VCeXRlcyA9IGZhbHNlOyB9CisgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQnVmZmVy
KSB7CisgICAgICAgICAgICB0aGlzLl9idWZmZXIgPSBkYXRhOworICAgICAgICAgICAgdGhpcy5f
b3duc0J1ZmZlciA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5fYnVmZmVyID0gbmV3IEJ1ZmZlcihlbmdpbmUsIGRhdGEsIHVwZGF0YWJsZSwgc3Ry
aWRlLCBwb3N0cG9uZUludGVybmFsQ3JlYXRpb24sIGluc3RhbmNlZCwgdXNlQnl0ZXMpOworICAg
ICAgICAgICAgdGhpcy5fb3duc0J1ZmZlciA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fa2luZCA9IGtpbmQ7CisgICAgICAgIGlmICh0eXBlID09IHVuZGVmaW5lZCkgeworICAgICAg
ICAgICAgdmFyIGRhdGFfMSA9IHRoaXMuZ2V0RGF0YSgpOworICAgICAgICAgICAgdGhpcy50eXBl
ID0gVmVydGV4QnVmZmVyLkZMT0FUOworICAgICAgICAgICAgaWYgKGRhdGFfMSBpbnN0YW5jZW9m
IEludDhBcnJheSkgeworICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9IFZlcnRleEJ1ZmZlci5C
WVRFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZGF0YV8xIGluc3RhbmNl
b2YgVWludDhBcnJheSkgeworICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9IFZlcnRleEJ1ZmZl
ci5VTlNJR05FRF9CWVRFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZGF0
YV8xIGluc3RhbmNlb2YgSW50MTZBcnJheSkgeworICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9
IFZlcnRleEJ1ZmZlci5TSE9SVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KGRhdGFfMSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSB7CisgICAgICAgICAgICAgICAgdGhpcy50
eXBlID0gVmVydGV4QnVmZmVyLlVOU0lHTkVEX1NIT1JUOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAoZGF0YV8xIGluc3RhbmNlb2YgSW50MzJBcnJheSkgeworICAgICAgICAg
ICAgICAgIHRoaXMudHlwZSA9IFZlcnRleEJ1ZmZlci5JTlQ7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmIChkYXRhXzEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkgeworICAgICAg
ICAgICAgICAgIHRoaXMudHlwZSA9IFZlcnRleEJ1ZmZlci5VTlNJR05FRF9JTlQ7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLnR5cGUg
PSB0eXBlOworICAgICAgICB9CisgICAgICAgIHZhciB0eXBlQnl0ZUxlbmd0aCA9IFZlcnRleEJ1
ZmZlci5HZXRUeXBlQnl0ZUxlbmd0aCh0aGlzLnR5cGUpOworICAgICAgICBpZiAodXNlQnl0ZXMp
IHsKKyAgICAgICAgICAgIHRoaXMuX3NpemUgPSBzaXplIHx8IChzdHJpZGUgPyAoc3RyaWRlIC8g
dHlwZUJ5dGVMZW5ndGgpIDogVmVydGV4QnVmZmVyLkRlZHVjZVN0cmlkZShraW5kKSk7CisgICAg
ICAgICAgICB0aGlzLmJ5dGVTdHJpZGUgPSBzdHJpZGUgfHwgdGhpcy5fYnVmZmVyLmJ5dGVTdHJp
ZGUgfHwgKHRoaXMuX3NpemUgKiB0eXBlQnl0ZUxlbmd0aCk7CisgICAgICAgICAgICB0aGlzLmJ5
dGVPZmZzZXQgPSBvZmZzZXQgfHwgMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHRoaXMuX3NpemUgPSBzaXplIHx8IHN0cmlkZSB8fCBWZXJ0ZXhCdWZmZXIuRGVkdWNl
U3RyaWRlKGtpbmQpOworICAgICAgICAgICAgdGhpcy5ieXRlU3RyaWRlID0gc3RyaWRlID8gKHN0
cmlkZSAqIHR5cGVCeXRlTGVuZ3RoKSA6ICh0aGlzLl9idWZmZXIuYnl0ZVN0cmlkZSB8fCAodGhp
cy5fc2l6ZSAqIHR5cGVCeXRlTGVuZ3RoKSk7CisgICAgICAgICAgICB0aGlzLmJ5dGVPZmZzZXQg
PSAob2Zmc2V0IHx8IDApICogdHlwZUJ5dGVMZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5ub3JtYWxpemVkID0gbm9ybWFsaXplZDsKKyAgICAgICAgdGhpcy5faW5zdGFuY2VkID0gaW5z
dGFuY2VkICE9PSB1bmRlZmluZWQgPyBpbnN0YW5jZWQgOiBmYWxzZTsKKyAgICAgICAgdGhpcy5f
aW5zdGFuY2VEaXZpc29yID0gaW5zdGFuY2VkID8gMSA6IDA7CisgICAgfQorICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShWZXJ0ZXhCdWZmZXIucHJvdG90eXBlLCAiaW5zdGFuY2VEaXZpc29yIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBpbnN0YW5jZSBkaXZp
c29yIHdoZW4gaW4gaW5zdGFuY2VkIG1vZGUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlRGl2aXNvcjsKKyAg
ICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRo
aXMuX2luc3RhbmNlRGl2aXNvciA9IHZhbHVlOworICAgICAgICAgICAgaWYgKHZhbHVlID09IDAp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlZCA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKiBAaGlkZGVu
ICovCisgICAgVmVydGV4QnVmZmVyLnByb3RvdHlwZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9idWZmZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9idWZmZXIuX3JlYnVpbGQoKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJldHVybnMgdGhlIGtpbmQgb2YgdGhlIFZlcnRleEJ1ZmZlciAoc3RyaW5nKQorICAg
ICAqIEByZXR1cm5zIGEgc3RyaW5nCisgICAgICovCisgICAgVmVydGV4QnVmZmVyLnByb3RvdHlw
ZS5nZXRLaW5kID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fa2luZDsKKyAg
ICB9OworICAgIC8vIFByb3BlcnRpZXMKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBp
bmRpY2F0aW5nIGlmIHRoZSBWZXJ0ZXhCdWZmZXIgaXMgdXBkYXRhYmxlPworICAgICAqIEByZXR1
cm5zIHRydWUgaWYgdGhlIGJ1ZmZlciBpcyB1cGRhdGFibGUKKyAgICAgKi8KKyAgICBWZXJ0ZXhC
dWZmZXIucHJvdG90eXBlLmlzVXBkYXRhYmxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fYnVmZmVyLmlzVXBkYXRhYmxlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIGN1cnJlbnQgYnVmZmVyJ3MgZGF0YQorICAgICAqIEByZXR1cm5zIGEgRGF0YUFycmF5IG9y
IG51bGwKKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIucHJvdG90eXBlLmdldERhdGEgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZ2V0RGF0YSgpOworICAgIH07
CisgICAgLyoqCisgICAgICogR2V0cyB1bmRlcmx5aW5nIG5hdGl2ZSBidWZmZXIKKyAgICAgKiBA
cmV0dXJucyB1bmRlcmx5aW5nIG5hdGl2ZSBidWZmZXIKKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZm
ZXIucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2J1ZmZlci5nZXRCdWZmZXIoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhl
IHN0cmlkZSBpbiBmbG9hdDMyIHVuaXRzIChpLmUuIGJ5dGUgc3RyaWRlIC8gNCkuCisgICAgICog
TWF5IG5vdCBiZSBhbiBpbnRlZ2VyIGlmIHRoZSBieXRlIHN0cmlkZSBpcyBub3QgZGl2aXNpYmxl
IGJ5IDQuCisgICAgICogREVQUkVDQVRFRC4gVXNlIGJ5dGVTdHJpZGUgaW5zdGVhZC4KKyAgICAg
KiBAcmV0dXJucyB0aGUgc3RyaWRlIGluIGZsb2F0MzIgdW5pdHMKKyAgICAgKi8KKyAgICBWZXJ0
ZXhCdWZmZXIucHJvdG90eXBlLmdldFN0cmlkZVNpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLmJ5dGVTdHJpZGUgLyBWZXJ0ZXhCdWZmZXIuR2V0VHlwZUJ5dGVMZW5ndGgo
dGhpcy50eXBlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG9mZnNldCBh
cyBhIG11bHRpcGxlIG9mIHRoZSB0eXBlIGJ5dGUgbGVuZ3RoLgorICAgICAqIERFUFJFQ0FURUQu
IFVzZSBieXRlT2Zmc2V0IGluc3RlYWQuCisgICAgICogQHJldHVybnMgdGhlIG9mZnNldCBpbiBi
eXRlcworICAgICAqLworICAgIFZlcnRleEJ1ZmZlci5wcm90b3R5cGUuZ2V0T2Zmc2V0ID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0IC8gVmVydGV4QnVmZmVy
LkdldFR5cGVCeXRlTGVuZ3RoKHRoaXMudHlwZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBwZXIgdmVydGV4IGF0dHJpYnV0ZSAoaW50
ZWdlcikKKyAgICAgKiBAcmV0dXJucyB0aGUgc2l6ZSBpbiBmbG9hdAorICAgICAqLworICAgIFZl
cnRleEJ1ZmZlci5wcm90b3R5cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3NpemU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBp
bmRpY2F0aW5nIGlzIHRoZSBpbnRlcm5hbCBidWZmZXIgb2YgdGhlIFZlcnRleEJ1ZmZlciBpcyBp
bnN0YW5jZWQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoaXMgYnVmZmVyIGlzIGluc3RhbmNl
ZAorICAgICAqLworICAgIFZlcnRleEJ1ZmZlci5wcm90b3R5cGUuZ2V0SXNJbnN0YW5jZWQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZWQ7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbnN0YW5jaW5nIGRpdmlzb3IsIHplcm8gZm9yIG5v
bi1pbnN0YW5jZWQgKGludGVnZXIpLgorICAgICAqIEByZXR1cm5zIGEgbnVtYmVyCisgICAgICov
CisgICAgVmVydGV4QnVmZmVyLnByb3RvdHlwZS5nZXRJbnN0YW5jZURpdmlzb3IgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZURpdmlzb3I7CisgICAgfTsKKyAg
ICAvLyBNZXRob2RzCisgICAgLyoqCisgICAgICogU3RvcmUgZGF0YSBpbnRvIHRoZSBidWZmZXIu
IElmIHRoZSBidWZmZXIgd2FzIGFscmVhZHkgdXNlZCBpdCB3aWxsIGJlIGVpdGhlciByZWNyZWF0
ZWQgb3IgdXBkYXRlZCBkZXBlbmRpbmcgb24gaXNVcGRhdGFibGUgcHJvcGVydHkKKyAgICAgKiBA
cGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHRvIHN0b3JlCisgICAgICovCisgICAgVmVydGV4
QnVmZmVyLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB0aGlz
Ll9idWZmZXIuY3JlYXRlKGRhdGEpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0
aGUgdW5kZXJseWluZyBidWZmZXIgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbnVtZXJpYyBhcnJh
eSBvciBGbG9hdDMyQXJyYXkuCisgICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhIG5l
dyBidWZmZXIgaWYgdGhlIGN1cnJlbnQgb25lIGlzIG5vdCB1cGRhdGFibGUKKyAgICAgKiBAcGFy
YW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHRvIHN0b3JlCisgICAgICovCisgICAgVmVydGV4QnVm
ZmVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB0aGlzLl9i
dWZmZXIudXBkYXRlKGRhdGEpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyBkaXJl
Y3RseSB0aGUgdW5kZXJseWluZyBXZWJHTEJ1ZmZlciBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBu
dW1lcmljIGFycmF5IG9yIEZsb2F0MzJBcnJheS4KKyAgICAgKiBSZXR1cm5zIHRoZSBkaXJlY3Rs
eSB1cGRhdGVkIFdlYkdMQnVmZmVyLgorICAgICAqIEBwYXJhbSBkYXRhIHRoZSBuZXcgZGF0YQor
ICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIG5ldyBvZmZzZXQKKyAgICAgKiBAcGFyYW0gdXNlQnl0
ZXMgc2V0IHRvIHRydWUgaWYgdGhlIG9mZnNldCBpcyBpbiBieXRlcworICAgICAqLworICAgIFZl
cnRleEJ1ZmZlci5wcm90b3R5cGUudXBkYXRlRGlyZWN0bHkgPSBmdW5jdGlvbiAoZGF0YSwgb2Zm
c2V0LCB1c2VCeXRlcykgeworICAgICAgICBpZiAodXNlQnl0ZXMgPT09IHZvaWQgMCkgeyB1c2VC
eXRlcyA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMuX2J1ZmZlci51cGRhdGVEaXJlY3RseShkYXRh
LCBvZmZzZXQsIHVuZGVmaW5lZCwgdXNlQnl0ZXMpOworICAgIH07CisgICAgLyoqCisgICAgICog
RGlzcG9zZXMgdGhlIFZlcnRleEJ1ZmZlciBhbmQgdGhlIHVuZGVybHlpbmcgV2ViR0xCdWZmZXIu
CisgICAgICovCisgICAgVmVydGV4QnVmZmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24g
KCkgeworICAgICAgICBpZiAodGhpcy5fb3duc0J1ZmZlcikgeworICAgICAgICAgICAgdGhpcy5f
YnVmZmVyLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRW51
bWVyYXRlcyBlYWNoIHZhbHVlIG9mIHRoaXMgdmVydGV4IGJ1ZmZlciBhcyBudW1iZXJzLgorICAg
ICAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHZhbHVlcyB0byBlbnVtZXJhdGUKKyAgICAg
KiBAcGFyYW0gY2FsbGJhY2sgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCB2
YWx1ZQorICAgICAqLworICAgIFZlcnRleEJ1ZmZlci5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0
aW9uIChjb3VudCwgY2FsbGJhY2spIHsKKyAgICAgICAgVmVydGV4QnVmZmVyLkZvckVhY2godGhp
cy5fYnVmZmVyLmdldERhdGEoKSwgdGhpcy5ieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTdHJpZGUsIHRo
aXMuX3NpemUsIHRoaXMudHlwZSwgY291bnQsIHRoaXMubm9ybWFsaXplZCwgY2FsbGJhY2spOwor
ICAgIH07CisgICAgLyoqCisgICAgICogRGVkdWNlcyB0aGUgc3RyaWRlIGdpdmVuIGEga2luZC4K
KyAgICAgKiBAcGFyYW0ga2luZCBUaGUga2luZCBzdHJpbmcgdG8gZGVkdWNlCisgICAgICogQHJl
dHVybnMgVGhlIGRlZHVjZWQgc3RyaWRlCisgICAgICovCisgICAgVmVydGV4QnVmZmVyLkRlZHVj
ZVN0cmlkZSA9IGZ1bmN0aW9uIChraW5kKSB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAg
ICAgICAgICAgY2FzZSBWZXJ0ZXhCdWZmZXIuVVZLaW5kOgorICAgICAgICAgICAgY2FzZSBWZXJ0
ZXhCdWZmZXIuVVYyS2luZDoKKyAgICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLlVWM0tpbmQ6
CisgICAgICAgICAgICBjYXNlIFZlcnRleEJ1ZmZlci5VVjRLaW5kOgorICAgICAgICAgICAgY2Fz
ZSBWZXJ0ZXhCdWZmZXIuVVY1S2luZDoKKyAgICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLlVW
NktpbmQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgICAgICBjYXNlIFZlcnRl
eEJ1ZmZlci5Ob3JtYWxLaW5kOgorICAgICAgICAgICAgY2FzZSBWZXJ0ZXhCdWZmZXIuUG9zaXRp
b25LaW5kOgorICAgICAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICAgICAgY2FzZSBWZXJ0
ZXhCdWZmZXIuQ29sb3JLaW5kOgorICAgICAgICAgICAgY2FzZSBWZXJ0ZXhCdWZmZXIuTWF0cmlj
ZXNJbmRpY2VzS2luZDoKKyAgICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLk1hdHJpY2VzSW5k
aWNlc0V4dHJhS2luZDoKKyAgICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLk1hdHJpY2VzV2Vp
Z2h0c0tpbmQ6CisgICAgICAgICAgICBjYXNlIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNF
eHRyYUtpbmQ6CisgICAgICAgICAgICBjYXNlIFZlcnRleEJ1ZmZlci5UYW5nZW50S2luZDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGtpbmQgJyIgKyBraW5kICsgIiciKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgYnl0ZSBsZW5ndGggb2Yg
dGhlIGdpdmVuIHR5cGUuCisgICAgICogQHBhcmFtIHR5cGUgdGhlIHR5cGUKKyAgICAgKiBAcmV0
dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgICAgICovCisgICAgVmVydGV4QnVmZmVyLkdldFR5
cGVCeXRlTGVuZ3RoID0gZnVuY3Rpb24gKHR5cGUpIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgICAgICBjYXNlIFZlcnRleEJ1ZmZlci5CWVRFOgorICAgICAgICAgICAgY2FzZSBW
ZXJ0ZXhCdWZmZXIuVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLlNIT1JUOgorICAgICAgICAgICAgY2FzZSBWZXJ0
ZXhCdWZmZXIuVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAg
ICAgICAgICBjYXNlIFZlcnRleEJ1ZmZlci5JTlQ6CisgICAgICAgICAgICBjYXNlIFZlcnRleEJ1
ZmZlci5VTlNJR05FRF9JTlQ6CisgICAgICAgICAgICBjYXNlIFZlcnRleEJ1ZmZlci5GTE9BVDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHR5cGUgJyIgKyB0eXBlICsgIiciKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRW51bWVyYXRlcyBlYWNoIHZhbHVl
IG9mIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFzIG51bWJlcnMuCisgICAgICogQHBhcmFtIGRhdGEg
dGhlIGRhdGEgdG8gZW51bWVyYXRlCisgICAgICogQHBhcmFtIGJ5dGVPZmZzZXQgdGhlIGJ5dGUg
b2Zmc2V0IG9mIHRoZSBkYXRhCisgICAgICogQHBhcmFtIGJ5dGVTdHJpZGUgdGhlIGJ5dGUgc3Ry
aWRlIG9mIHRoZSBkYXRhCisgICAgICogQHBhcmFtIGNvbXBvbmVudENvdW50IHRoZSBudW1iZXIg
b2YgY29tcG9uZW50cyBwZXIgZWxlbWVudAorICAgICAqIEBwYXJhbSBjb21wb25lbnRUeXBlIHRo
ZSB0eXBlIG9mIHRoZSBjb21wb25lbnQKKyAgICAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBv
ZiB2YWx1ZXMgdG8gZW51bWVyYXRlCisgICAgICogQHBhcmFtIG5vcm1hbGl6ZWQgd2hldGhlciB0
aGUgZGF0YSBpcyBub3JtYWxpemVkCisgICAgICogQHBhcmFtIGNhbGxiYWNrIHRoZSBjYWxsYmFj
ayBmdW5jdGlvbiBjYWxsZWQgZm9yIGVhY2ggdmFsdWUKKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZm
ZXIuRm9yRWFjaCA9IGZ1bmN0aW9uIChkYXRhLCBieXRlT2Zmc2V0LCBieXRlU3RyaWRlLCBjb21w
b25lbnRDb3VudCwgY29tcG9uZW50VHlwZSwgY291bnQsIG5vcm1hbGl6ZWQsIGNhbGxiYWNrKSB7
CisgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgIHZhciBv
ZmZzZXQgPSBieXRlT2Zmc2V0IC8gNDsKKyAgICAgICAgICAgIHZhciBzdHJpZGUgPSBieXRlU3Ry
aWRlIC8gNDsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsg
aW5kZXggKz0gY29tcG9uZW50Q291bnQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBjb21w
b25lbnRJbmRleCA9IDA7IGNvbXBvbmVudEluZGV4IDwgY29tcG9uZW50Q291bnQ7IGNvbXBvbmVu
dEluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YVtvZmZzZXQgKyBj
b21wb25lbnRJbmRleF0sIGluZGV4ICsgY29tcG9uZW50SW5kZXgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGRhdGFWaWV3ID0gZGF0YSBp
bnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IERhdGFWaWV3KGRhdGEpIDogbmV3IERhdGFWaWV3
KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCk7CisgICAgICAg
ICAgICB2YXIgY29tcG9uZW50Qnl0ZUxlbmd0aCA9IFZlcnRleEJ1ZmZlci5HZXRUeXBlQnl0ZUxl
bmd0aChjb21wb25lbnRUeXBlKTsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBjb3VudDsgaW5kZXggKz0gY29tcG9uZW50Q291bnQpIHsKKyAgICAgICAgICAgICAgICB2
YXIgY29tcG9uZW50Qnl0ZU9mZnNldCA9IGJ5dGVPZmZzZXQ7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgY29tcG9uZW50SW5kZXggPSAwOyBjb21wb25lbnRJbmRleCA8IGNvbXBvbmVudENvdW50
OyBjb21wb25lbnRJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IFZl
cnRleEJ1ZmZlci5fR2V0RmxvYXRWYWx1ZShkYXRhVmlldywgY29tcG9uZW50VHlwZSwgY29tcG9u
ZW50Qnl0ZU9mZnNldCwgbm9ybWFsaXplZCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr
KHZhbHVlLCBpbmRleCArIGNvbXBvbmVudEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgY29t
cG9uZW50Qnl0ZU9mZnNldCArPSBjb21wb25lbnRCeXRlTGVuZ3RoOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBieXRlT2Zmc2V0ICs9IGJ5dGVTdHJpZGU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworICAgIFZlcnRleEJ1ZmZlci5fR2V0RmxvYXRWYWx1ZSA9
IGZ1bmN0aW9uIChkYXRhVmlldywgdHlwZSwgYnl0ZU9mZnNldCwgbm9ybWFsaXplZCkgeworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLkJZVEU6
IHsKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBkYXRhVmlldy5nZXRJbnQ4KGJ5dGVPZmZz
ZXQpOworICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlID0gTWF0aC5tYXgodmFsdWUgLyAxMjcsIC0xKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBWZXJ0ZXhCdWZmZXIuVU5TSUdORURfQllURTogeworICAgICAgICAgICAgICAgIHZh
ciB2YWx1ZSA9IGRhdGFWaWV3LmdldFVpbnQ4KGJ5dGVPZmZzZXQpOworICAgICAgICAgICAgICAg
IGlmIChub3JtYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyAy
NTU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVydGV4QnVmZmVyLlNIT1JUOiB7CisgICAg
ICAgICAgICAgICAgdmFyIHZhbHVlID0gZGF0YVZpZXcuZ2V0SW50MTYoYnl0ZU9mZnNldCwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBNYXRoLm1heCh2YWx1ZSAvIDMyNzY3LCAtMSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgVmVydGV4QnVmZmVyLlVOU0lHTkVEX1NIT1JUOiB7CisgICAgICAgICAgICAgICAg
dmFyIHZhbHVlID0gZGF0YVZpZXcuZ2V0VWludDE2KGJ5dGVPZmZzZXQsIHRydWUpOworICAgICAg
ICAgICAgICAgIGlmIChub3JtYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0g
dmFsdWUgLyA2NTUzNTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0ZXhCdWZmZXIuSU5U
OiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFWaWV3LmdldEludDMyKGJ5dGVPZmZzZXQs
IHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0ZXhCdWZmZXIuVU5T
SUdORURfSU5UOiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFWaWV3LmdldFVpbnQzMihi
eXRlT2Zmc2V0LCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVydGV4
QnVmZmVyLkZMT0FUOiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFWaWV3LmdldEZsb2F0
MzIoYnl0ZU9mZnNldCwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0
OiB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbXBvbmVudCB0
eXBlICIgKyB0eXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogVGhlIGJ5dGUgdHlwZS4KKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIuQllURSA9
IDUxMjA7CisgICAgLyoqCisgICAgICogVGhlIHVuc2lnbmVkIGJ5dGUgdHlwZS4KKyAgICAgKi8K
KyAgICBWZXJ0ZXhCdWZmZXIuVU5TSUdORURfQllURSA9IDUxMjE7CisgICAgLyoqCisgICAgICog
VGhlIHNob3J0IHR5cGUuCisgICAgICovCisgICAgVmVydGV4QnVmZmVyLlNIT1JUID0gNTEyMjsK
KyAgICAvKioKKyAgICAgKiBUaGUgdW5zaWduZWQgc2hvcnQgdHlwZS4KKyAgICAgKi8KKyAgICBW
ZXJ0ZXhCdWZmZXIuVU5TSUdORURfU0hPUlQgPSA1MTIzOworICAgIC8qKgorICAgICAqIFRoZSBp
bnRlZ2VyIHR5cGUuCisgICAgICovCisgICAgVmVydGV4QnVmZmVyLklOVCA9IDUxMjQ7CisgICAg
LyoqCisgICAgICogVGhlIHVuc2lnbmVkIGludGVnZXIgdHlwZS4KKyAgICAgKi8KKyAgICBWZXJ0
ZXhCdWZmZXIuVU5TSUdORURfSU5UID0gNTEyNTsKKyAgICAvKioKKyAgICAgKiBUaGUgZmxvYXQg
dHlwZS4KKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIuRkxPQVQgPSA1MTI2OworICAgIC8vIEVu
dW1zCisgICAgLyoqCisgICAgICogUG9zaXRpb25zCisgICAgICovCisgICAgVmVydGV4QnVmZmVy
LlBvc2l0aW9uS2luZCA9ICJwb3NpdGlvbiI7CisgICAgLyoqCisgICAgICogTm9ybWFscworICAg
ICAqLworICAgIFZlcnRleEJ1ZmZlci5Ob3JtYWxLaW5kID0gIm5vcm1hbCI7CisgICAgLyoqCisg
ICAgICogVGFuZ2VudHMKKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIuVGFuZ2VudEtpbmQgPSAi
dGFuZ2VudCI7CisgICAgLyoqCisgICAgICogVGV4dHVyZSBjb29yZGluYXRlcworICAgICAqLwor
ICAgIFZlcnRleEJ1ZmZlci5VVktpbmQgPSAidXYiOworICAgIC8qKgorICAgICAqIFRleHR1cmUg
Y29vcmRpbmF0ZXMgMgorICAgICAqLworICAgIFZlcnRleEJ1ZmZlci5VVjJLaW5kID0gInV2MiI7
CisgICAgLyoqCisgICAgICogVGV4dHVyZSBjb29yZGluYXRlcyAzCisgICAgICovCisgICAgVmVy
dGV4QnVmZmVyLlVWM0tpbmQgPSAidXYzIjsKKyAgICAvKioKKyAgICAgKiBUZXh0dXJlIGNvb3Jk
aW5hdGVzIDQKKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIuVVY0S2luZCA9ICJ1djQiOworICAg
IC8qKgorICAgICAqIFRleHR1cmUgY29vcmRpbmF0ZXMgNQorICAgICAqLworICAgIFZlcnRleEJ1
ZmZlci5VVjVLaW5kID0gInV2NSI7CisgICAgLyoqCisgICAgICogVGV4dHVyZSBjb29yZGluYXRl
cyA2CisgICAgICovCisgICAgVmVydGV4QnVmZmVyLlVWNktpbmQgPSAidXY2IjsKKyAgICAvKioK
KyAgICAgKiBDb2xvcnMKKyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIuQ29sb3JLaW5kID0gImNv
bG9yIjsKKyAgICAvKioKKyAgICAgKiBNYXRyaXggaW5kaWNlcyAoZm9yIGJvbmVzKQorICAgICAq
LworICAgIFZlcnRleEJ1ZmZlci5NYXRyaWNlc0luZGljZXNLaW5kID0gIm1hdHJpY2VzSW5kaWNl
cyI7CisgICAgLyoqCisgICAgICogTWF0cml4IHdlaWdodHMgKGZvciBib25lcykKKyAgICAgKi8K
KyAgICBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNXZWlnaHRzS2luZCA9ICJtYXRyaWNlc1dlaWdodHMi
OworICAgIC8qKgorICAgICAqIEFkZGl0aW9uYWwgbWF0cml4IGluZGljZXMgKGZvciBib25lcykK
KyAgICAgKi8KKyAgICBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kID0gIm1h
dHJpY2VzSW5kaWNlc0V4dHJhIjsKKyAgICAvKioKKyAgICAgKiBBZGRpdGlvbmFsIG1hdHJpeCB3
ZWlnaHRzIChmb3IgYm9uZXMpCisgICAgICovCisgICAgVmVydGV4QnVmZmVyLk1hdHJpY2VzV2Vp
Z2h0c0V4dHJhS2luZCA9ICJtYXRyaWNlc1dlaWdodHNFeHRyYSI7CisgICAgcmV0dXJuIFZlcnRl
eEJ1ZmZlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL2NzZy50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL2NzZy50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBDU0cgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ1NHIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBDU0c7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2J1ZmZl
ciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01l
c2hlc19zdWJNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvc3ViTWVzaCAqLyAiLi9NZXNoZXMvc3ViTWVzaC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2ggKi8gIi4v
TWVzaGVzL21lc2gudHMiKTsKKworCisKKworLyoqCisgKiBVbmlxdWUgSUQgd2hlbiB3ZSBpbXBv
cnQgbWVzaGVzIGZyb20gQmFieWxvbiB0byBDU0cKKyAqLwordmFyIGN1cnJlbnRDU0dNZXNoSWQg
PSAwOworLyoqCisgKiBSZXByZXNlbnRzIGEgdmVydGV4IG9mIGEgcG9seWdvbi4gVXNlIHlvdXIg
b3duIHZlcnRleCBjbGFzcyBpbnN0ZWFkIG9mIHRoaXMKKyAqIG9uZSB0byBwcm92aWRlIGFkZGl0
aW9uYWwgZmVhdHVyZXMgbGlrZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGFuZCB2ZXJ0ZXgKKyAqIGNv
bG9ycy4gQ3VzdG9tIHZlcnRleCBjbGFzc2VzIG5lZWQgdG8gcHJvdmlkZSBhIGBwb3NgIHByb3Bl
cnR5IGFuZCBgY2xvbmUoKWAsCisgKiBgZmxpcCgpYCwgYW5kIGBpbnRlcnBvbGF0ZSgpYCBtZXRo
b2RzIHRoYXQgYmVoYXZlIGFuYWxvZ291cyB0byB0aGUgb25lcworICogZGVmaW5lZCBieSBgQkFC
WUxPTi5DU0cuVmVydGV4YC4gVGhpcyBjbGFzcyBwcm92aWRlcyBgbm9ybWFsYCBzbyBjb252ZW5p
ZW5jZQorICogZnVuY3Rpb25zIGxpa2UgYEJBQllMT04uQ1NHLnNwaGVyZSgpYCBjYW4gcmV0dXJu
IGEgc21vb3RoIHZlcnRleCBub3JtYWwsIGJ1dCBgbm9ybWFsYAorICogaXMgbm90IHVzZWQgYW55
d2hlcmUgZWxzZS4KKyAqIFNhbWUgZ29lcyBmb3IgdXYsIGl0IGFsbG93cyB0byBrZWVwIHRoZSBv
cmlnaW5hbCB2ZXJ0ZXggdXYgY29vcmRpbmF0ZXMgb2YgdGhlIDIgbWVzaGVzCisgKi8KK3ZhciBW
ZXJ0ZXggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5p
dGlhbGl6ZXMgdGhlIHZlcnRleAorICAgICAqIEBwYXJhbSBwb3MgVGhlIHBvc2l0aW9uIG9mIHRo
ZSB2ZXJ0ZXgKKyAgICAgKiBAcGFyYW0gbm9ybWFsIFRoZSBub3JtYWwgb2YgdGhlIHZlcnRleAor
ICAgICAqIEBwYXJhbSB1diBUaGUgdGV4dHVyZSBjb29yZGluYXRlIG9mIHRoZSB2ZXJ0ZXgKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBWZXJ0ZXgoCisgICAgLyoqCisgICAgICogVGhlIHBvc2l0aW9u
IG9mIHRoZSB2ZXJ0ZXgKKyAgICAgKi8KKyAgICBwb3MsIAorICAgIC8qKgorICAgICAqIFRoZSBu
b3JtYWwgb2YgdGhlIHZlcnRleAorICAgICAqLworICAgIG5vcm1hbCwgCisgICAgLyoqCisgICAg
ICogVGhlIHRleHR1cmUgY29vcmRpbmF0ZSBvZiB0aGUgdmVydGV4CisgICAgICovCisgICAgdXYp
IHsKKyAgICAgICAgdGhpcy5wb3MgPSBwb3M7CisgICAgICAgIHRoaXMubm9ybWFsID0gbm9ybWFs
OworICAgICAgICB0aGlzLnV2ID0gdXY7CisgICAgfQorICAgIC8qKgorICAgICAqIE1ha2UgYSBj
bG9uZSwgb3IgZGVlcCBjb3B5LCBvZiB0aGUgdmVydGV4CisgICAgICogQHJldHVybnMgQSBuZXcg
VmVydGV4CisgICAgICovCisgICAgVmVydGV4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBWZXJ0ZXgodGhpcy5wb3MuY2xvbmUoKSwgdGhpcy5ub3Jt
YWwuY2xvbmUoKSwgdGhpcy51di5jbG9uZSgpKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIElu
dmVydCBhbGwgb3JpZW50YXRpb24tc3BlY2lmaWMgZGF0YSAoZS5nLiB2ZXJ0ZXggbm9ybWFsKS4g
Q2FsbGVkIHdoZW4gdGhlCisgICAgICogb3JpZW50YXRpb24gb2YgYSBwb2x5Z29uIGlzIGZsaXBw
ZWQuCisgICAgICovCisgICAgVmVydGV4LnByb3RvdHlwZS5mbGlwID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB0aGlzLm5vcm1hbCA9IHRoaXMubm9ybWFsLnNjYWxlKC0xKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyB2ZXJ0ZXggYmV0d2VlbiB0aGlzIHZlcnRleCBhbmQg
YG90aGVyYCBieSBsaW5lYXJseQorICAgICAqIGludGVycG9sYXRpbmcgYWxsIHByb3BlcnRpZXMg
dXNpbmcgYSBwYXJhbWV0ZXIgb2YgYHRgLiBTdWJjbGFzc2VzIHNob3VsZAorICAgICAqIG92ZXJy
aWRlIHRoaXMgdG8gaW50ZXJwb2xhdGUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzLgorICAgICAqIEBw
YXJhbSBvdGhlciB0aGUgdmVydGV4IHRvIGludGVycG9sYXRlIGFnYWluc3QKKyAgICAgKiBAcGFy
YW0gdCBUaGUgZmFjdG9yIHVzZWQgdG8gbGluZWFybHkgaW50ZXJwb2xhdGUgYmV0d2VlbiB0aGUg
dmVydGljZXMKKyAgICAgKi8KKyAgICBWZXJ0ZXgucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVu
Y3Rpb24gKG90aGVyLCB0KSB7CisgICAgICAgIHJldHVybiBuZXcgVmVydGV4KF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uTGVycCh0aGlz
LnBvcywgb3RoZXIucG9zLCB0KSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5MZXJwKHRoaXMubm9ybWFsLCBvdGhlci5ub3JtYWwsIHQp
LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MiJdLkxlcnAodGhpcy51diwgb3RoZXIudXYsIHQpKTsKKyAgICB9OworICAgIHJldHVybiBWZXJ0
ZXg7Cit9KCkpOworLyoqCisgKiBSZXByZXNlbnRzIGEgcGxhbmUgaW4gM0Qgc3BhY2UuCisgKi8K
K3ZhciBQbGFuZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBJbml0aWFsaXplcyB0aGUgcGxhbmUKKyAgICAgKiBAcGFyYW0gbm9ybWFsIFRoZSBub3JtYWwg
Zm9yIHRoZSBwbGFuZQorICAgICAqIEBwYXJhbSB3CisgICAgICovCisgICAgZnVuY3Rpb24gUGxh
bmUobm9ybWFsLCB3KSB7CisgICAgICAgIHRoaXMubm9ybWFsID0gbm9ybWFsOworICAgICAgICB0
aGlzLncgPSB3OworICAgIH0KKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBwbGFuZSBmcm9t
IHRocmVlIHBvaW50cworICAgICAqIEBwYXJhbSBhIFBvaW50IGEKKyAgICAgKiBAcGFyYW0gYiBQ
b2ludCBiCisgICAgICogQHBhcmFtIGMgUG9pbnQgYworICAgICAqLworICAgIFBsYW5lLkZyb21Q
b2ludHMgPSBmdW5jdGlvbiAoYSwgYiwgYykgeworICAgICAgICB2YXIgdjAgPSBjLnN1YnRyYWN0
KGEpOworICAgICAgICB2YXIgdjEgPSBiLnN1YnRyYWN0KGEpOworICAgICAgICBpZiAodjAubGVu
Z3RoU3F1YXJlZCgpID09PSAwIHx8IHYxLmxlbmd0aFNxdWFyZWQoKSA9PT0gMCkgeworICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG4gPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLk5vcm1hbGl6
ZShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdLkNyb3NzKHYwLCB2MSkpOworICAgICAgICByZXR1cm4gbmV3IFBsYW5lKG4sIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KG4s
IGEpKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lLCBvciBtYWtlIGEgZGVlcCBjb3B5
IG9mIHRoZSBwbGFuZQorICAgICAqIEByZXR1cm5zIGEgbmV3IFBsYW5lCisgICAgICovCisgICAg
UGxhbmUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gbmV3
IFBsYW5lKHRoaXMubm9ybWFsLmNsb25lKCksIHRoaXMudyk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBGbGlwIHRoZSBmYWNlIG9mIHRoZSBwbGFuZQorICAgICAqLworICAgIFBsYW5lLnByb3Rv
dHlwZS5mbGlwID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLm5vcm1hbC5zY2FsZUluUGxh
Y2UoLTEpOworICAgICAgICB0aGlzLncgPSAtdGhpcy53OworICAgIH07CisgICAgLyoqCisgICAg
ICogU3BsaXQgYHBvbHlnb25gIGJ5IHRoaXMgcGxhbmUgaWYgbmVlZGVkLCB0aGVuIHB1dCB0aGUg
cG9seWdvbiBvciBwb2x5Z29uCisgICAgICogZnJhZ21lbnRzIGluIHRoZSBhcHByb3ByaWF0ZSBs
aXN0cy4gQ29wbGFuYXIgcG9seWdvbnMgZ28gaW50byBlaXRoZXIKKyAgICBgKiBjb3BsYW5hckZy
b250YCBvciBgY29wbGFuYXJCYWNrYCBkZXBlbmRpbmcgb24gdGhlaXIgb3JpZW50YXRpb24gd2l0
aAorICAgICAqIHJlc3BlY3QgdG8gdGhpcyBwbGFuZS4gUG9seWdvbnMgaW4gZnJvbnQgb3IgaW4g
YmFjayBvZiB0aGlzIHBsYW5lIGdvIGludG8KKyAgICAgKiBlaXRoZXIgYGZyb250YCBvciBgYmFj
a2AKKyAgICAgKiBAcGFyYW0gcG9seWdvbiBUaGUgcG9seWdvbiB0byBiZSBzcGxpdAorICAgICAq
IEBwYXJhbSBjb3BsYW5hckZyb250IFdpbGwgY29udGFpbiBwb2x5Z29ucyBjb3BsYW5hciB3aXRo
IHRoZSBwbGFuZSB0aGF0IGFyZSBvcmllbnRlZCB0byB0aGUgZnJvbnQgb2YgdGhlIHBsYW5lCisg
ICAgICogQHBhcmFtIGNvcGxhbmFyQmFjayBXaWxsIGNvbnRhaW4gcG9seWdvbnMgY29wbGFuYXIg
d2l0aCB0aGUgcGxhbmUgdGhhdCBhcmUgb3JpZW50ZWQgdG8gdGhlIGJhY2sgb2YgdGhlIHBsYW5l
CisgICAgICogQHBhcmFtIGZyb250IFdpbGwgY29udGFpbiB0aGUgcG9seWdvbnMgaW4gZnJvbnQg
b2YgdGhlIHBsYW5lCisgICAgICogQHBhcmFtIGJhY2sgV2lsbCBjb250YWluIHRoZSBwb2x5Z29u
cyBiZWdpbmQgdGhlIHBsYW5lCisgICAgICovCisgICAgUGxhbmUucHJvdG90eXBlLnNwbGl0UG9s
eWdvbiA9IGZ1bmN0aW9uIChwb2x5Z29uLCBjb3BsYW5hckZyb250LCBjb3BsYW5hckJhY2ssIGZy
b250LCBiYWNrKSB7CisgICAgICAgIHZhciBDT1BMQU5BUiA9IDA7CisgICAgICAgIHZhciBGUk9O
VCA9IDE7CisgICAgICAgIHZhciBCQUNLID0gMjsKKyAgICAgICAgdmFyIFNQQU5OSU5HID0gMzsK
KyAgICAgICAgLy8gQ2xhc3NpZnkgZWFjaCBwb2ludCBhcyB3ZWxsIGFzIHRoZSBlbnRpcmUgcG9s
eWdvbiBpbnRvIG9uZSBvZiB0aGUgYWJvdmUKKyAgICAgICAgLy8gZm91ciBjbGFzc2VzLgorICAg
ICAgICB2YXIgcG9seWdvblR5cGUgPSAwOworICAgICAgICB2YXIgdHlwZXMgPSBbXTsKKyAgICAg
ICAgdmFyIGk7CisgICAgICAgIHZhciB0OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG9seWdv
bi52ZXJ0aWNlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdCA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KHRoaXMubm9y
bWFsLCBwb2x5Z29uLnZlcnRpY2VzW2ldLnBvcykgLSB0aGlzLnc7CisgICAgICAgICAgICB2YXIg
dHlwZSA9ICh0IDwgLVBsYW5lLkVQU0lMT04pID8gQkFDSyA6ICh0ID4gUGxhbmUuRVBTSUxPTikg
PyBGUk9OVCA6IENPUExBTkFSOworICAgICAgICAgICAgcG9seWdvblR5cGUgfD0gdHlwZTsKKyAg
ICAgICAgICAgIHR5cGVzLnB1c2godHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUHV0IHRo
ZSBwb2x5Z29uIGluIHRoZSBjb3JyZWN0IGxpc3QsIHNwbGl0dGluZyBpdCB3aGVuIG5lY2Vzc2Fy
eQorICAgICAgICBzd2l0Y2ggKHBvbHlnb25UeXBlKSB7CisgICAgICAgICAgICBjYXNlIENPUExB
TkFSOgorICAgICAgICAgICAgICAgIChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdCh0aGlzLm5vcm1hbCwgcG9seWdvbi5wbGFuZS5u
b3JtYWwpID4gMCA/IGNvcGxhbmFyRnJvbnQgOiBjb3BsYW5hckJhY2spLnB1c2gocG9seWdvbik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZST05UOgorICAgICAg
ICAgICAgICAgIGZyb250LnB1c2gocG9seWdvbik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEJBQ0s6CisgICAgICAgICAgICAgICAgYmFjay5wdXNoKHBvbHlnb24p
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTUEFOTklORzoKKyAg
ICAgICAgICAgICAgICB2YXIgZiA9IFtdLCBiID0gW107CisgICAgICAgICAgICAgICAgZm9yIChp
ID0gMDsgaSA8IHBvbHlnb24udmVydGljZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGogPSAoaSArIDEpICUgcG9seWdvbi52ZXJ0aWNlcy5sZW5ndGg7CisgICAgICAg
ICAgICAgICAgICAgIHZhciB0aSA9IHR5cGVzW2ldLCB0aiA9IHR5cGVzW2pdOworICAgICAgICAg
ICAgICAgICAgICB2YXIgdmkgPSBwb2x5Z29uLnZlcnRpY2VzW2ldLCB2aiA9IHBvbHlnb24udmVy
dGljZXNbal07CisgICAgICAgICAgICAgICAgICAgIGlmICh0aSAhPT0gQkFDSykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZi5wdXNoKHZpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAodGkgIT09IEZST05UKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBiLnB1c2godGkgIT09IEJBQ0sgPyB2aS5jbG9uZSgpIDogdmkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgodGkgfCB0aikgPT09IFNQQU5OSU5H
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHRoaXMudyAtIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRG90KHRoaXMubm9y
bWFsLCB2aS5wb3MpKSAvIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0uRG90KHRoaXMubm9ybWFsLCB2ai5wb3Muc3VidHJhY3QodmkucG9z
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IHZpLmludGVycG9sYXRlKHZqLCB0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGYucHVzaCh2KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGIucHVzaCh2LmNsb25lKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBwb2x5OworICAgICAgICAgICAgICAgIGlm
IChmLmxlbmd0aCA+PSAzKSB7CisgICAgICAgICAgICAgICAgICAgIHBvbHkgPSBuZXcgUG9seWdv
bihmLCBwb2x5Z29uLnNoYXJlZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb2x5LnBsYW5l
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcm9udC5wdXNoKHBvbHkpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChiLmxl
bmd0aCA+PSAzKSB7CisgICAgICAgICAgICAgICAgICAgIHBvbHkgPSBuZXcgUG9seWdvbihiLCBw
b2x5Z29uLnNoYXJlZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb2x5LnBsYW5lKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBiYWNrLnB1c2gocG9seSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIGBDU0cuUGxhbmUuRVBTSUxPTmAgaXMgdGhlIHRv
bGVyYW5jZSB1c2VkIGJ5IGBzcGxpdFBvbHlnb24oKWAgdG8gZGVjaWRlIGlmIGEKKyAgICAgKiBw
b2ludCBpcyBvbiB0aGUgcGxhbmUKKyAgICAgKi8KKyAgICBQbGFuZS5FUFNJTE9OID0gMWUtNTsK
KyAgICByZXR1cm4gUGxhbmU7Cit9KCkpOworLyoqCisgKiBSZXByZXNlbnRzIGEgY29udmV4IHBv
bHlnb24uIFRoZSB2ZXJ0aWNlcyB1c2VkIHRvIGluaXRpYWxpemUgYSBwb2x5Z29uIG11c3QKKyAq
IGJlIGNvcGxhbmFyIGFuZCBmb3JtIGEgY29udmV4IGxvb3AuCisgKgorICogRWFjaCBjb252ZXgg
cG9seWdvbiBoYXMgYSBgc2hhcmVkYCBwcm9wZXJ0eSwgd2hpY2ggaXMgc2hhcmVkIGJldHdlZW4g
YWxsCisgKiBwb2x5Z29ucyB0aGF0IGFyZSBjbG9uZXMgb2YgZWFjaCBvdGhlciBvciB3ZXJlIHNw
bGl0IGZyb20gdGhlIHNhbWUgcG9seWdvbi4KKyAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGVmaW5l
IHBlci1wb2x5Z29uIHByb3BlcnRpZXMgKHN1Y2ggYXMgc3VyZmFjZSBjb2xvcikKKyAqLwordmFy
IFBvbHlnb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICog
SW5pdGlhbGl6ZXMgdGhlIHBvbHlnb24KKyAgICAgKiBAcGFyYW0gdmVydGljZXMgVGhlIHZlcnRp
Y2VzIG9mIHRoZSBwb2x5Z29uCisgICAgICogQHBhcmFtIHNoYXJlZCBUaGUgcHJvcGVydGllcyBz
aGFyZWQgYWNyb3NzIGFsbCBwb2x5Z29ucworICAgICAqLworICAgIGZ1bmN0aW9uIFBvbHlnb24o
dmVydGljZXMsIHNoYXJlZCkgeworICAgICAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXM7Cisg
ICAgICAgIHRoaXMuc2hhcmVkID0gc2hhcmVkOworICAgICAgICB0aGlzLnBsYW5lID0gUGxhbmUu
RnJvbVBvaW50cyh2ZXJ0aWNlc1swXS5wb3MsIHZlcnRpY2VzWzFdLnBvcywgdmVydGljZXNbMl0u
cG9zKTsKKyAgICB9CisgICAgLyoqCisgICAgICogQ2xvbmVzLCBvciBtYWtlcyBhIGRlZXAgY29w
eSwgb3IgdGhlIHBvbHlnb24KKyAgICAgKi8KKyAgICBQb2x5Z29uLnByb3RvdHlwZS5jbG9uZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcy5tYXAo
ZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYuY2xvbmUoKTsgfSk7CisgICAgICAgIHJldHVybiBuZXcg
UG9seWdvbih2ZXJ0aWNlcywgdGhpcy5zaGFyZWQpOworICAgIH07CisgICAgLyoqCisgICAgICog
RmxpcHMgdGhlIGZhY2VzIG9mIHRoZSBwb2x5Z29uCisgICAgICovCisgICAgUG9seWdvbi5wcm90
b3R5cGUuZmxpcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy52ZXJ0aWNlcy5yZXZlcnNl
KCkubWFwKGZ1bmN0aW9uICh2KSB7IHYuZmxpcCgpOyB9KTsKKyAgICAgICAgdGhpcy5wbGFuZS5m
bGlwKCk7CisgICAgfTsKKyAgICByZXR1cm4gUG9seWdvbjsKK30oKSk7CisvKioKKyAqIEhvbGRz
IGEgbm9kZSBpbiBhIEJTUCB0cmVlLiBBIEJTUCB0cmVlIGlzIGJ1aWx0IGZyb20gYSBjb2xsZWN0
aW9uIG9mIHBvbHlnb25zCisgKiBieSBwaWNraW5nIGEgcG9seWdvbiB0byBzcGxpdCBhbG9uZy4g
VGhhdCBwb2x5Z29uIChhbmQgYWxsIG90aGVyIGNvcGxhbmFyCisgKiBwb2x5Z29ucykgYXJlIGFk
ZGVkIGRpcmVjdGx5IHRvIHRoYXQgbm9kZSBhbmQgdGhlIG90aGVyIHBvbHlnb25zIGFyZSBhZGRl
ZCB0bworICogdGhlIGZyb250IGFuZC9vciBiYWNrIHN1YnRyZWVzLiBUaGlzIGlzIG5vdCBhIGxl
YWZ5IEJTUCB0cmVlIHNpbmNlIHRoZXJlIGlzCisgKiBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIGlu
dGVybmFsIGFuZCBsZWFmIG5vZGVzCisgKi8KK3ZhciBOb2RlID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBub2RlCisgICAgICog
QHBhcmFtIHBvbHlnb25zIEEgY29sbGVjdGlvbiBvZiBwb2x5Z29ucyBoZWxkIGluIHRoZSBub2Rl
CisgICAgICovCisgICAgZnVuY3Rpb24gTm9kZShwb2x5Z29ucykgeworICAgICAgICB0aGlzLnBs
YW5lID0gbnVsbDsKKyAgICAgICAgdGhpcy5mcm9udCA9IG51bGw7CisgICAgICAgIHRoaXMuYmFj
ayA9IG51bGw7CisgICAgICAgIHRoaXMucG9seWdvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAg
aWYgKHBvbHlnb25zKSB7CisgICAgICAgICAgICB0aGlzLmJ1aWxkKHBvbHlnb25zKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAvKioKKyAgICAgKiBDbG9uZXMsIG9yIG1ha2VzIGEgZGVlcCBjb3B5
LCBvZiB0aGUgbm9kZQorICAgICAqIEByZXR1cm5zIFRoZSBjbG9uZWQgbm9kZQorICAgICAqLwor
ICAgIE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbm9k
ZSA9IG5ldyBOb2RlKCk7CisgICAgICAgIG5vZGUucGxhbmUgPSB0aGlzLnBsYW5lICYmIHRoaXMu
cGxhbmUuY2xvbmUoKTsKKyAgICAgICAgbm9kZS5mcm9udCA9IHRoaXMuZnJvbnQgJiYgdGhpcy5m
cm9udC5jbG9uZSgpOworICAgICAgICBub2RlLmJhY2sgPSB0aGlzLmJhY2sgJiYgdGhpcy5iYWNr
LmNsb25lKCk7CisgICAgICAgIG5vZGUucG9seWdvbnMgPSB0aGlzLnBvbHlnb25zLm1hcChmdW5j
dGlvbiAocCkgeyByZXR1cm4gcC5jbG9uZSgpOyB9KTsKKyAgICAgICAgcmV0dXJuIG5vZGU7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IHNvbGlkIHNwYWNlIHRvIGVtcHR5IHNwYWNl
IGFuZCBlbXB0eSBzcGFjZSB0byBzb2xpZCBzcGFjZQorICAgICAqLworICAgIE5vZGUucHJvdG90
eXBlLmludmVydCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLnBvbHlnb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnBvbHlnb25zW2ld
LmZsaXAoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5wbGFuZSkgeworICAgICAgICAg
ICAgdGhpcy5wbGFuZS5mbGlwKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuZnJvbnQp
IHsKKyAgICAgICAgICAgIHRoaXMuZnJvbnQuaW52ZXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuYmFjaykgeworICAgICAgICAgICAgdGhpcy5iYWNrLmludmVydCgpOworICAgICAg
ICB9CisgICAgICAgIHZhciB0ZW1wID0gdGhpcy5mcm9udDsKKyAgICAgICAgdGhpcy5mcm9udCA9
IHRoaXMuYmFjazsKKyAgICAgICAgdGhpcy5iYWNrID0gdGVtcDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJlY3Vyc2l2ZWx5IHJlbW92ZSBhbGwgcG9seWdvbnMgaW4gYHBvbHlnb25zYCB0aGF0
IGFyZSBpbnNpZGUgdGhpcyBCU1AKKyAgICAgKiB0cmVlLgorICAgICAqIEBwYXJhbSBwb2x5Z29u
cyBQb2x5Z29ucyB0byByZW1vdmUgZnJvbSB0aGUgQlNQCisgICAgICogQHJldHVybnMgUG9seWdv
bnMgY2xpcHBlZCBmcm9tIHRoZSBCU1AKKyAgICAgKi8KKyAgICBOb2RlLnByb3RvdHlwZS5jbGlw
UG9seWdvbnMgPSBmdW5jdGlvbiAocG9seWdvbnMpIHsKKyAgICAgICAgaWYgKCF0aGlzLnBsYW5l
KSB7CisgICAgICAgICAgICByZXR1cm4gcG9seWdvbnMuc2xpY2UoKTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgZnJvbnQgPSBuZXcgQXJyYXkoKSwgYmFjayA9IG5ldyBBcnJheSgpOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHBvbHlnb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICB0aGlzLnBsYW5lLnNwbGl0UG9seWdvbihwb2x5Z29uc1tpXSwgZnJvbnQsIGJhY2ssIGZyb250
LCBiYWNrKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5mcm9udCkgeworICAgICAgICAg
ICAgZnJvbnQgPSB0aGlzLmZyb250LmNsaXBQb2x5Z29ucyhmcm9udCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuYmFjaykgeworICAgICAgICAgICAgYmFjayA9IHRoaXMuYmFjay5jbGlw
UG9seWdvbnMoYmFjayk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBi
YWNrID0gW107CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZyb250LmNvbmNhdChiYWNrKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhbGwgcG9seWdvbnMgaW4gdGhpcyBCU1Ag
dHJlZSB0aGF0IGFyZSBpbnNpZGUgdGhlIG90aGVyIEJTUCB0cmVlCisgICAgICogYGJzcGAuCisg
ICAgICogQHBhcmFtIGJzcCBCU1AgY29udGFpbmluZyBwb2x5Z29ucyB0byByZW1vdmUgZnJvbSB0
aGlzIEJTUAorICAgICAqLworICAgIE5vZGUucHJvdG90eXBlLmNsaXBUbyA9IGZ1bmN0aW9uIChi
c3ApIHsKKyAgICAgICAgdGhpcy5wb2x5Z29ucyA9IGJzcC5jbGlwUG9seWdvbnModGhpcy5wb2x5
Z29ucyk7CisgICAgICAgIGlmICh0aGlzLmZyb250KSB7CisgICAgICAgICAgICB0aGlzLmZyb250
LmNsaXBUbyhic3ApOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmJhY2spIHsKKyAgICAg
ICAgICAgIHRoaXMuYmFjay5jbGlwVG8oYnNwKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoq
CisgICAgICogUmV0dXJuIGEgbGlzdCBvZiBhbGwgcG9seWdvbnMgaW4gdGhpcyBCU1AgdHJlZQor
ICAgICAqIEByZXR1cm5zIExpc3Qgb2YgYWxsIHBvbHlnb25zIGluIHRoaXMgQlNQIHRyZWUKKyAg
ICAgKi8KKyAgICBOb2RlLnByb3RvdHlwZS5hbGxQb2x5Z29ucyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHBvbHlnb25zID0gdGhpcy5wb2x5Z29ucy5zbGljZSgpOworICAgICAgICBpZiAo
dGhpcy5mcm9udCkgeworICAgICAgICAgICAgcG9seWdvbnMgPSBwb2x5Z29ucy5jb25jYXQodGhp
cy5mcm9udC5hbGxQb2x5Z29ucygpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5iYWNr
KSB7CisgICAgICAgICAgICBwb2x5Z29ucyA9IHBvbHlnb25zLmNvbmNhdCh0aGlzLmJhY2suYWxs
UG9seWdvbnMoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBvbHlnb25zOworICAgIH07
CisgICAgLyoqCisgICAgICogQnVpbGQgYSBCU1AgdHJlZSBvdXQgb2YgYHBvbHlnb25zYC4gV2hl
biBjYWxsZWQgb24gYW4gZXhpc3RpbmcgdHJlZSwgdGhlCisgICAgICogbmV3IHBvbHlnb25zIGFy
ZSBmaWx0ZXJlZCBkb3duIHRvIHRoZSBib3R0b20gb2YgdGhlIHRyZWUgYW5kIGJlY29tZSBuZXcK
KyAgICAgKiBub2RlcyB0aGVyZS4gRWFjaCBzZXQgb2YgcG9seWdvbnMgaXMgcGFydGl0aW9uZWQg
dXNpbmcgdGhlIGZpcnN0IHBvbHlnb24KKyAgICAgKiAobm8gaGV1cmlzdGljIGlzIHVzZWQgdG8g
cGljayBhIGdvb2Qgc3BsaXQpCisgICAgICogQHBhcmFtIHBvbHlnb25zIFBvbHlnb25zIHVzZWQg
dG8gY29uc3RydWN0IHRoZSBCU1AgdHJlZQorICAgICAqLworICAgIE5vZGUucHJvdG90eXBlLmJ1
aWxkID0gZnVuY3Rpb24gKHBvbHlnb25zKSB7CisgICAgICAgIGlmICghcG9seWdvbnMubGVuZ3Ro
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnBs
YW5lKSB7CisgICAgICAgICAgICB0aGlzLnBsYW5lID0gcG9seWdvbnNbMF0ucGxhbmUuY2xvbmUo
KTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZnJvbnQgPSBuZXcgQXJyYXkoKSwgYmFjayA9IG5l
dyBBcnJheSgpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvbHlnb25zLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICB0aGlzLnBsYW5lLnNwbGl0UG9seWdvbihwb2x5Z29uc1tpXSwg
dGhpcy5wb2x5Z29ucywgdGhpcy5wb2x5Z29ucywgZnJvbnQsIGJhY2spOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmcm9udC5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5mcm9udCkg
eworICAgICAgICAgICAgICAgIHRoaXMuZnJvbnQgPSBuZXcgTm9kZSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5mcm9udC5idWlsZChmcm9udCk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGJhY2subGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuYmFjaykgeworICAg
ICAgICAgICAgICAgIHRoaXMuYmFjayA9IG5ldyBOb2RlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLmJhY2suYnVpbGQoYmFjayk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJl
dHVybiBOb2RlOworfSgpKTsKKy8qKgorICogQ2xhc3MgZm9yIGJ1aWxkaW5nIENvbnN0cnVjdGl2
ZSBTb2xpZCBHZW9tZXRyeQorICovCit2YXIgQ1NHID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KCkgeworICAgIGZ1bmN0aW9uIENTRygpIHsKKyAgICAgICAgdGhpcy5wb2x5Z29ucyA9IG5ldyBB
cnJheSgpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IHRoZSBNZXNoIHRvIENTRwor
ICAgICAqIEBwYXJhbSBtZXNoIFRoZSBNZXNoIHRvIGNvbnZlcnQgdG8gQ1NHCisgICAgICogQHJl
dHVybnMgQSBuZXcgQ1NHIGZyb20gdGhlIE1lc2gKKyAgICAgKi8KKyAgICBDU0cuRnJvbU1lc2gg
PSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICB2YXIgdmVydGV4LCBub3JtYWwsIHV2LCBwb3Np
dGlvbiwgcG9seWdvbiwgcG9seWdvbnMgPSBuZXcgQXJyYXkoKSwgdmVydGljZXM7CisgICAgICAg
IHZhciBtYXRyaXgsIG1lc2hQb3NpdGlvbiwgbWVzaFJvdGF0aW9uLCBtZXNoUm90YXRpb25RdWF0
ZXJuaW9uID0gbnVsbCwgbWVzaFNjYWxpbmc7CisgICAgICAgIGlmIChtZXNoIGluc3RhbmNlb2Yg
X01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1lc2giXSkgeworICAg
ICAgICAgICAgbWVzaC5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgICAgICBtYXRy
aXggPSBtZXNoLmdldFdvcmxkTWF0cml4KCk7CisgICAgICAgICAgICBtZXNoUG9zaXRpb24gPSBt
ZXNoLnBvc2l0aW9uLmNsb25lKCk7CisgICAgICAgICAgICBtZXNoUm90YXRpb24gPSBtZXNoLnJv
dGF0aW9uLmNsb25lKCk7CisgICAgICAgICAgICBpZiAobWVzaC5yb3RhdGlvblF1YXRlcm5pb24p
IHsKKyAgICAgICAgICAgICAgICBtZXNoUm90YXRpb25RdWF0ZXJuaW9uID0gbWVzaC5yb3RhdGlv
blF1YXRlcm5pb24uY2xvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lc2hTY2Fs
aW5nID0gbWVzaC5zY2FsaW5nLmNsb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICB0aHJvdyAnQkFCWUxPTi5DU0c6IFdyb25nIE1lc2ggdHlwZSwgbXVzdCBiZSBC
QUJZTE9OLk1lc2gnOworICAgICAgICB9CisgICAgICAgIHZhciBpbmRpY2VzID0gbWVzaC5nZXRJ
bmRpY2VzKCksIHBvc2l0aW9ucyA9IG1lc2guZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2lu
ZCksIG5vcm1hbHMgPSBtZXNoLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKSwgdXZzID0g
bWVzaC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kKTsKKyAgICAgICAgdmFyIHN1Yk1lc2hlcyA9
IG1lc2guc3ViTWVzaGVzOworICAgICAgICBmb3IgKHZhciBzbSA9IDAsIHNtbCA9IHN1Yk1lc2hl
cy5sZW5ndGg7IHNtIDwgc21sOyBzbSsrKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gc3Vi
TWVzaGVzW3NtXS5pbmRleFN0YXJ0LCBpbCA9IHN1Yk1lc2hlc1tzbV0uaW5kZXhDb3VudCArIHN1
Yk1lc2hlc1tzbV0uaW5kZXhTdGFydDsgaSA8IGlsOyBpICs9IDMpIHsKKyAgICAgICAgICAgICAg
ICB2ZXJ0aWNlcyA9IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsg
aisrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VOb3JtYWwgPSBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShub3Jt
YWxzW2luZGljZXNbaSArIGpdICogM10sIG5vcm1hbHNbaW5kaWNlc1tpICsgal0gKiAzICsgMV0s
IG5vcm1hbHNbaW5kaWNlc1tpICsgal0gKiAzICsgMl0pOworICAgICAgICAgICAgICAgICAgICB1
diA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMiJdKHV2c1tpbmRpY2VzW2kgKyBqXSAqIDJdLCB1dnNbaW5kaWNlc1tpICsgal0gKiAy
ICsgMV0pOworICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlUG9zaXRpb24gPSBuZXcgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXShw
b3NpdGlvbnNbaW5kaWNlc1tpICsgal0gKiAzXSwgcG9zaXRpb25zW2luZGljZXNbaSArIGpdICog
MyArIDFdLCBwb3NpdGlvbnNbaW5kaWNlc1tpICsgal0gKiAzICsgMl0pOworICAgICAgICAgICAg
ICAgICAgICBwb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXMoc291cmNlUG9zaXRpb24s
IG1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgIG5vcm1hbCA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFs
KHNvdXJjZU5vcm1hbCwgbWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4ID0gbmV3
IFZlcnRleChwb3NpdGlvbiwgbm9ybWFsLCB1dik7CisgICAgICAgICAgICAgICAgICAgIHZlcnRp
Y2VzLnB1c2godmVydGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcG9s
eWdvbiA9IG5ldyBQb2x5Z29uKHZlcnRpY2VzLCB7IHN1Yk1lc2hJZDogc20sIG1lc2hJZDogY3Vy
cmVudENTR01lc2hJZCwgbWF0ZXJpYWxJbmRleDogc3ViTWVzaGVzW3NtXS5tYXRlcmlhbEluZGV4
IH0pOworICAgICAgICAgICAgICAgIC8vIFRvIGhhbmRsZSB0aGUgY2FzZSBvZiBkZWdlbmVyYXRl
ZCB0cmlhbmdsZQorICAgICAgICAgICAgICAgIC8vIHBvbHlnb24ucGxhbmUgPT0gbnVsbCA8PT4g
dGhlIHBvbHlnb24gZG9lcyBub3QgcmVwcmVzZW50IDEgc2luZ2xlIHBsYW5lIDw9PiB0aGUgdHJp
YW5nbGUgaXMgZGVnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICBpZiAocG9seWdvbi5wbGFuZSkg
eworICAgICAgICAgICAgICAgICAgICBwb2x5Z29ucy5wdXNoKHBvbHlnb24pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgY3NnID0gQ1NH
LkZyb21Qb2x5Z29ucyhwb2x5Z29ucyk7CisgICAgICAgIGNzZy5tYXRyaXggPSBtYXRyaXg7Cisg
ICAgICAgIGNzZy5wb3NpdGlvbiA9IG1lc2hQb3NpdGlvbjsKKyAgICAgICAgY3NnLnJvdGF0aW9u
ID0gbWVzaFJvdGF0aW9uOworICAgICAgICBjc2cuc2NhbGluZyA9IG1lc2hTY2FsaW5nOworICAg
ICAgICBjc2cucm90YXRpb25RdWF0ZXJuaW9uID0gbWVzaFJvdGF0aW9uUXVhdGVybmlvbjsKKyAg
ICAgICAgY3VycmVudENTR01lc2hJZCsrOworICAgICAgICByZXR1cm4gY3NnOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgQ1NHIHNvbGlkIGZyb20gYSBsaXN0IG9mIGBDU0cu
UG9seWdvbmAgaW5zdGFuY2VzLgorICAgICAqIEBwYXJhbSBwb2x5Z29ucyBQb2x5Z29ucyB1c2Vk
IHRvIGNvbnN0cnVjdCBhIENTRyBzb2xpZAorICAgICAqLworICAgIENTRy5Gcm9tUG9seWdvbnMg
PSBmdW5jdGlvbiAocG9seWdvbnMpIHsKKyAgICAgICAgdmFyIGNzZyA9IG5ldyBDU0coKTsKKyAg
ICAgICAgY3NnLnBvbHlnb25zID0gcG9seWdvbnM7CisgICAgICAgIHJldHVybiBjc2c7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBDbG9uZXMsIG9yIG1ha2VzIGEgZGVlcCBjb3B5LCBvZiB0aGUg
Q1NHCisgICAgICogQHJldHVybnMgQSBuZXcgQ1NHCisgICAgICovCisgICAgQ1NHLnByb3RvdHlw
ZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGNzZyA9IG5ldyBDU0coKTsKKyAg
ICAgICAgY3NnLnBvbHlnb25zID0gdGhpcy5wb2x5Z29ucy5tYXAoZnVuY3Rpb24gKHApIHsgcmV0
dXJuIHAuY2xvbmUoKTsgfSk7CisgICAgICAgIGNzZy5jb3B5VHJhbnNmb3JtQXR0cmlidXRlcyh0
aGlzKTsKKyAgICAgICAgcmV0dXJuIGNzZzsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVuaW9u
cyB0aGlzIENTRyB3aXRoIGFub3RoZXIgQ1NHCisgICAgICogQHBhcmFtIGNzZyBUaGUgQ1NHIHRv
IHVuaW9uIGFnYWluc3QgdGhpcyBDU0cKKyAgICAgKiBAcmV0dXJucyBUaGUgdW5pb25lZCBDU0cK
KyAgICAgKi8KKyAgICBDU0cucHJvdG90eXBlLnVuaW9uID0gZnVuY3Rpb24gKGNzZykgeworICAg
ICAgICB2YXIgYSA9IG5ldyBOb2RlKHRoaXMuY2xvbmUoKS5wb2x5Z29ucyk7CisgICAgICAgIHZh
ciBiID0gbmV3IE5vZGUoY3NnLmNsb25lKCkucG9seWdvbnMpOworICAgICAgICBhLmNsaXBUbyhi
KTsKKyAgICAgICAgYi5jbGlwVG8oYSk7CisgICAgICAgIGIuaW52ZXJ0KCk7CisgICAgICAgIGIu
Y2xpcFRvKGEpOworICAgICAgICBiLmludmVydCgpOworICAgICAgICBhLmJ1aWxkKGIuYWxsUG9s
eWdvbnMoKSk7CisgICAgICAgIHJldHVybiBDU0cuRnJvbVBvbHlnb25zKGEuYWxsUG9seWdvbnMo
KSkuY29weVRyYW5zZm9ybUF0dHJpYnV0ZXModGhpcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBVbmlvbnMgdGhpcyBDU0cgd2l0aCBhbm90aGVyIENTRyBpbiBwbGFjZQorICAgICAqIEBwYXJh
bSBjc2cgVGhlIENTRyB0byB1bmlvbiBhZ2FpbnN0IHRoaXMgQ1NHCisgICAgICovCisgICAgQ1NH
LnByb3RvdHlwZS51bmlvbkluUGxhY2UgPSBmdW5jdGlvbiAoY3NnKSB7CisgICAgICAgIHZhciBh
ID0gbmV3IE5vZGUodGhpcy5wb2x5Z29ucyk7CisgICAgICAgIHZhciBiID0gbmV3IE5vZGUoY3Nn
LnBvbHlnb25zKTsKKyAgICAgICAgYS5jbGlwVG8oYik7CisgICAgICAgIGIuY2xpcFRvKGEpOwor
ICAgICAgICBiLmludmVydCgpOworICAgICAgICBiLmNsaXBUbyhhKTsKKyAgICAgICAgYi5pbnZl
cnQoKTsKKyAgICAgICAgYS5idWlsZChiLmFsbFBvbHlnb25zKCkpOworICAgICAgICB0aGlzLnBv
bHlnb25zID0gYS5hbGxQb2x5Z29ucygpOworICAgIH07CisgICAgLyoqCisgICAgICogU3VidHJh
Y3RzIHRoaXMgQ1NHIHdpdGggYW5vdGhlciBDU0cKKyAgICAgKiBAcGFyYW0gY3NnIFRoZSBDU0cg
dG8gc3VidHJhY3QgYWdhaW5zdCB0aGlzIENTRworICAgICAqIEByZXR1cm5zIEEgbmV3IENTRwor
ICAgICAqLworICAgIENTRy5wcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiAoY3NnKSB7Cisg
ICAgICAgIHZhciBhID0gbmV3IE5vZGUodGhpcy5jbG9uZSgpLnBvbHlnb25zKTsKKyAgICAgICAg
dmFyIGIgPSBuZXcgTm9kZShjc2cuY2xvbmUoKS5wb2x5Z29ucyk7CisgICAgICAgIGEuaW52ZXJ0
KCk7CisgICAgICAgIGEuY2xpcFRvKGIpOworICAgICAgICBiLmNsaXBUbyhhKTsKKyAgICAgICAg
Yi5pbnZlcnQoKTsKKyAgICAgICAgYi5jbGlwVG8oYSk7CisgICAgICAgIGIuaW52ZXJ0KCk7Cisg
ICAgICAgIGEuYnVpbGQoYi5hbGxQb2x5Z29ucygpKTsKKyAgICAgICAgYS5pbnZlcnQoKTsKKyAg
ICAgICAgcmV0dXJuIENTRy5Gcm9tUG9seWdvbnMoYS5hbGxQb2x5Z29ucygpKS5jb3B5VHJhbnNm
b3JtQXR0cmlidXRlcyh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFN1YnRyYWN0cyB0
aGlzIENTRyB3aXRoIGFub3RoZXIgQ1NHIGluIHBsYWNlCisgICAgICogQHBhcmFtIGNzZyBUaGUg
Q1NHIHRvIHN1YnRhY3QgYWdhaW5zdCB0aGlzIENTRworICAgICAqLworICAgIENTRy5wcm90b3R5
cGUuc3VidHJhY3RJblBsYWNlID0gZnVuY3Rpb24gKGNzZykgeworICAgICAgICB2YXIgYSA9IG5l
dyBOb2RlKHRoaXMucG9seWdvbnMpOworICAgICAgICB2YXIgYiA9IG5ldyBOb2RlKGNzZy5wb2x5
Z29ucyk7CisgICAgICAgIGEuaW52ZXJ0KCk7CisgICAgICAgIGEuY2xpcFRvKGIpOworICAgICAg
ICBiLmNsaXBUbyhhKTsKKyAgICAgICAgYi5pbnZlcnQoKTsKKyAgICAgICAgYi5jbGlwVG8oYSk7
CisgICAgICAgIGIuaW52ZXJ0KCk7CisgICAgICAgIGEuYnVpbGQoYi5hbGxQb2x5Z29ucygpKTsK
KyAgICAgICAgYS5pbnZlcnQoKTsKKyAgICAgICAgdGhpcy5wb2x5Z29ucyA9IGEuYWxsUG9seWdv
bnMoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEludGVyc2VjdCB0aGlzIENTRyB3aXRoIGFu
b3RoZXIgQ1NHCisgICAgICogQHBhcmFtIGNzZyBUaGUgQ1NHIHRvIGludGVyc2VjdCBhZ2FpbnN0
IHRoaXMgQ1NHCisgICAgICogQHJldHVybnMgQSBuZXcgQ1NHCisgICAgICovCisgICAgQ1NHLnBy
b3RvdHlwZS5pbnRlcnNlY3QgPSBmdW5jdGlvbiAoY3NnKSB7CisgICAgICAgIHZhciBhID0gbmV3
IE5vZGUodGhpcy5jbG9uZSgpLnBvbHlnb25zKTsKKyAgICAgICAgdmFyIGIgPSBuZXcgTm9kZShj
c2cuY2xvbmUoKS5wb2x5Z29ucyk7CisgICAgICAgIGEuaW52ZXJ0KCk7CisgICAgICAgIGIuY2xp
cFRvKGEpOworICAgICAgICBiLmludmVydCgpOworICAgICAgICBhLmNsaXBUbyhiKTsKKyAgICAg
ICAgYi5jbGlwVG8oYSk7CisgICAgICAgIGEuYnVpbGQoYi5hbGxQb2x5Z29ucygpKTsKKyAgICAg
ICAgYS5pbnZlcnQoKTsKKyAgICAgICAgcmV0dXJuIENTRy5Gcm9tUG9seWdvbnMoYS5hbGxQb2x5
Z29ucygpKS5jb3B5VHJhbnNmb3JtQXR0cmlidXRlcyh0aGlzKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEludGVyc2VjdHMgdGhpcyBDU0cgd2l0aCBhbm90aGVyIENTRyBpbiBwbGFjZQorICAg
ICAqIEBwYXJhbSBjc2cgVGhlIENTRyB0byBpbnRlcnNlY3QgYWdhaW5zdCB0aGlzIENTRworICAg
ICAqLworICAgIENTRy5wcm90b3R5cGUuaW50ZXJzZWN0SW5QbGFjZSA9IGZ1bmN0aW9uIChjc2cp
IHsKKyAgICAgICAgdmFyIGEgPSBuZXcgTm9kZSh0aGlzLnBvbHlnb25zKTsKKyAgICAgICAgdmFy
IGIgPSBuZXcgTm9kZShjc2cucG9seWdvbnMpOworICAgICAgICBhLmludmVydCgpOworICAgICAg
ICBiLmNsaXBUbyhhKTsKKyAgICAgICAgYi5pbnZlcnQoKTsKKyAgICAgICAgYS5jbGlwVG8oYik7
CisgICAgICAgIGIuY2xpcFRvKGEpOworICAgICAgICBhLmJ1aWxkKGIuYWxsUG9seWdvbnMoKSk7
CisgICAgICAgIGEuaW52ZXJ0KCk7CisgICAgICAgIHRoaXMucG9seWdvbnMgPSBhLmFsbFBvbHln
b25zKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBuZXcgQ1NHIHNvbGlkIHdp
dGggc29saWQgYW5kIGVtcHR5IHNwYWNlIHN3aXRjaGVkLiBUaGlzIHNvbGlkIGlzCisgICAgICog
bm90IG1vZGlmaWVkLgorICAgICAqIEByZXR1cm5zIEEgbmV3IENTRyBzb2xpZCB3aXRoIHNvbGlk
IGFuZCBlbXB0eSBzcGFjZSBzd2l0Y2hlZAorICAgICAqLworICAgIENTRy5wcm90b3R5cGUuaW52
ZXJzZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGNzZyA9IHRoaXMuY2xvbmUoKTsKKyAg
ICAgICAgY3NnLmludmVyc2VJblBsYWNlKCk7CisgICAgICAgIHJldHVybiBjc2c7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBJbnZlcnNlcyB0aGUgQ1NHIGluIHBsYWNlCisgICAgICovCisgICAg
Q1NHLnByb3RvdHlwZS5pbnZlcnNlSW5QbGFjZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy5wb2x5Z29ucy5tYXAoZnVuY3Rpb24gKHApIHsgcC5mbGlwKCk7IH0pOworICAgIH07CisgICAg
LyoqCisgICAgICogVGhpcyBpcyB1c2VkIHRvIGtlZXAgbWVzaGVzIHRyYW5zZm9ybWF0aW9ucyBz
byB0aGV5IGNhbiBiZSByZXN0b3JlZAorICAgICAqIHdoZW4gd2UgYnVpbGQgYmFjayBhIEJhYnls
b24gTWVzaAorICAgICAqIE5CIDogQWxsIENTRyBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgaW4g
d29ybGQgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gY3NnIFRoZSBDU0cgdG8gY29weSB0aGUg
dHJhbnNmb3JtIGF0dHJpYnV0ZXMgZnJvbQorICAgICAqIEByZXR1cm5zIFRoaXMgQ1NHCisgICAg
ICovCisgICAgQ1NHLnByb3RvdHlwZS5jb3B5VHJhbnNmb3JtQXR0cmlidXRlcyA9IGZ1bmN0aW9u
IChjc2cpIHsKKyAgICAgICAgdGhpcy5tYXRyaXggPSBjc2cubWF0cml4OworICAgICAgICB0aGlz
LnBvc2l0aW9uID0gY3NnLnBvc2l0aW9uOworICAgICAgICB0aGlzLnJvdGF0aW9uID0gY3NnLnJv
dGF0aW9uOworICAgICAgICB0aGlzLnNjYWxpbmcgPSBjc2cuc2NhbGluZzsKKyAgICAgICAgdGhp
cy5yb3RhdGlvblF1YXRlcm5pb24gPSBjc2cucm90YXRpb25RdWF0ZXJuaW9uOworICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJ1aWxkIFJhdyBtZXNoIGZyb20g
Q1NHCisgICAgICogQ29vcmRpbmF0ZXMgaGVyZSBhcmUgaW4gd29ybGQgc3BhY2UKKyAgICAgKiBA
cGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbWVzaCBnZW9tZXRyeQorICAgICAqIEBwYXJhbSBz
Y2VuZSBUaGUgU2NlbmUKKyAgICAgKiBAcGFyYW0ga2VlcFN1Yk1lc2hlcyBTcGVjaWZpZXMgaWYg
dGhlIHN1Ym1lc2hlcyBzaG91bGQgYmUga2VwdAorICAgICAqIEByZXR1cm5zIEEgbmV3IE1lc2gK
KyAgICAgKi8KKyAgICBDU0cucHJvdG90eXBlLmJ1aWxkTWVzaEdlb21ldHJ5ID0gZnVuY3Rpb24g
KG5hbWUsIHNjZW5lLCBrZWVwU3ViTWVzaGVzKSB7CisgICAgICAgIHZhciBtYXRyaXggPSB0aGlz
Lm1hdHJpeC5jbG9uZSgpOworICAgICAgICBtYXRyaXguaW52ZXJ0KCk7CisgICAgICAgIHZhciBt
ZXNoID0gbmV3IF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNZXNo
Il0obmFtZSwgc2NlbmUpLCB2ZXJ0aWNlcyA9IFtdLCBpbmRpY2VzID0gW10sIG5vcm1hbHMgPSBb
XSwgdXZzID0gW10sIHZlcnRleCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpLCBub3JtYWwgPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKSwgdXYgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJd
Llplcm8oKSwgcG9seWdvbnMgPSB0aGlzLnBvbHlnb25zLCBwb2x5Z29uSW5kaWNlcyA9IFswLCAw
LCAwXSwgcG9seWdvbiwgdmVydGljZV9kaWN0ID0ge30sIHZlcnRleF9pZHgsIGN1cnJlbnRJbmRl
eCA9IDAsIHN1Yk1lc2hfZGljdCA9IHt9LCBzdWJNZXNoX29iajsKKyAgICAgICAgaWYgKGtlZXBT
dWJNZXNoZXMpIHsKKyAgICAgICAgICAgIC8vIFNvcnQgUG9seWdvbnMsIHNpbmNlIHN1Yk1lc2hl
cyBhcmUgaW5kaWNlcyByYW5nZQorICAgICAgICAgICAgcG9seWdvbnMuc29ydChmdW5jdGlvbiAo
YSwgYikgeworICAgICAgICAgICAgICAgIGlmIChhLnNoYXJlZC5tZXNoSWQgPT09IGIuc2hhcmVk
Lm1lc2hJZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5zaGFyZWQuc3ViTWVzaElk
IC0gYi5zaGFyZWQuc3ViTWVzaElkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuc2hhcmVkLm1lc2hJZCAtIGIu
c2hhcmVkLm1lc2hJZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb2x5Z29ucy5sZW5ndGg7IGkgPCBp
bDsgaSsrKSB7CisgICAgICAgICAgICBwb2x5Z29uID0gcG9seWdvbnNbaV07CisgICAgICAgICAg
ICAvLyBCdWlsZGluZyBTdWJNZXNoZXMKKyAgICAgICAgICAgIGlmICghc3ViTWVzaF9kaWN0W3Bv
bHlnb24uc2hhcmVkLm1lc2hJZF0pIHsKKyAgICAgICAgICAgICAgICBzdWJNZXNoX2RpY3RbcG9s
eWdvbi5zaGFyZWQubWVzaElkXSA9IHt9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCFzdWJNZXNoX2RpY3RbcG9seWdvbi5zaGFyZWQubWVzaElkXVtwb2x5Z29uLnNoYXJlZC5zdWJN
ZXNoSWRdKSB7CisgICAgICAgICAgICAgICAgc3ViTWVzaF9kaWN0W3BvbHlnb24uc2hhcmVkLm1l
c2hJZF1bcG9seWdvbi5zaGFyZWQuc3ViTWVzaElkXSA9IHsKKyAgICAgICAgICAgICAgICAgICAg
aW5kZXhTdGFydDogK0luZmluaXR5LAorICAgICAgICAgICAgICAgICAgICBpbmRleEVuZDogLUlu
ZmluaXR5LAorICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbEluZGV4OiBwb2x5Z29uLnNoYXJl
ZC5tYXRlcmlhbEluZGV4CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHN1Yk1lc2hfb2JqID0gc3ViTWVzaF9kaWN0W3BvbHlnb24uc2hhcmVkLm1lc2hJZF1b
cG9seWdvbi5zaGFyZWQuc3ViTWVzaElkXTsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAyLCBq
bCA9IHBvbHlnb24udmVydGljZXMubGVuZ3RoOyBqIDwgamw7IGorKykgeworICAgICAgICAgICAg
ICAgIHBvbHlnb25JbmRpY2VzWzBdID0gMDsKKyAgICAgICAgICAgICAgICBwb2x5Z29uSW5kaWNl
c1sxXSA9IGogLSAxOworICAgICAgICAgICAgICAgIHBvbHlnb25JbmRpY2VzWzJdID0gajsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDM7IGsrKykgeworICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXguY29weUZyb20ocG9seWdvbi52ZXJ0aWNlc1twb2x5Z29uSW5kaWNlc1tr
XV0ucG9zKTsKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsLmNvcHlGcm9tKHBvbHlnb24udmVy
dGljZXNbcG9seWdvbkluZGljZXNba11dLm5vcm1hbCk7CisgICAgICAgICAgICAgICAgICAgIHV2
LmNvcHlGcm9tKHBvbHlnb24udmVydGljZXNbcG9seWdvbkluZGljZXNba11dLnV2KTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGxvY2FsVmVydGV4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlcyh2
ZXJ0ZXgsIG1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhbE5vcm1hbCA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0u
VHJhbnNmb3JtTm9ybWFsKG5vcm1hbCwgbWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgdmVy
dGV4X2lkeCA9IHZlcnRpY2VfZGljdFtsb2NhbFZlcnRleC54ICsgJywnICsgbG9jYWxWZXJ0ZXgu
eSArICcsJyArIGxvY2FsVmVydGV4LnpdOworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBp
ZiAyIHBvaW50cyBjYW4gYmUgbWVyZ2VkCisgICAgICAgICAgICAgICAgICAgIGlmICghKHR5cGVv
ZiB2ZXJ0ZXhfaWR4ICE9PSAndW5kZWZpbmVkJyAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsc1t2ZXJ0ZXhfaWR4ICogM10gPT09IGxvY2FsTm9ybWFsLnggJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vcm1hbHNbdmVydGV4X2lkeCAqIDMgKyAxXSA9PT0gbG9jYWxOb3JtYWwu
eSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1t2ZXJ0ZXhfaWR4ICogMyArIDJd
ID09PSBsb2NhbE5vcm1hbC56ICYmCisgICAgICAgICAgICAgICAgICAgICAgICB1dnNbdmVydGV4
X2lkeCAqIDJdID09PSB1di54ICYmCisgICAgICAgICAgICAgICAgICAgICAgICB1dnNbdmVydGV4
X2lkeCAqIDIgKyAxXSA9PT0gdXYueSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRp
Y2VzLnB1c2gobG9jYWxWZXJ0ZXgueCwgbG9jYWxWZXJ0ZXgueSwgbG9jYWxWZXJ0ZXgueik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB1dnMucHVzaCh1di54LCB1di55KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vcm1hbHMucHVzaChub3JtYWwueCwgbm9ybWFsLnksIG5vcm1hbC56KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleF9pZHggPSB2ZXJ0aWNlX2RpY3RbbG9jYWxW
ZXJ0ZXgueCArICcsJyArIGxvY2FsVmVydGV4LnkgKyAnLCcgKyBsb2NhbFZlcnRleC56XSA9ICh2
ZXJ0aWNlcy5sZW5ndGggLyAzKSAtIDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRleF9pZHgpOworICAgICAgICAgICAgICAgICAg
ICBzdWJNZXNoX29iai5pbmRleFN0YXJ0ID0gTWF0aC5taW4oY3VycmVudEluZGV4LCBzdWJNZXNo
X29iai5pbmRleFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgc3ViTWVzaF9vYmouaW5kZXhF
bmQgPSBNYXRoLm1heChjdXJyZW50SW5kZXgsIHN1Yk1lc2hfb2JqLmluZGV4RW5kKTsKKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudEluZGV4Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0
aW9uS2luZCwgdmVydGljZXMpOworICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3Jt
YWxLaW5kLCBub3JtYWxzKTsKKyAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5k
LCB1dnMpOworICAgICAgICBtZXNoLnNldEluZGljZXMoaW5kaWNlcywgbnVsbCk7CisgICAgICAg
IGlmIChrZWVwU3ViTWVzaGVzKSB7CisgICAgICAgICAgICAvLyBXZSBvZmZzZXQgdGhlIG1hdGVy
aWFsSW5kZXggYnkgdGhlIHByZXZpb3VzIG51bWJlciBvZiBtYXRlcmlhbHMgaW4gdGhlIENTRyBt
aXhlZCBtZXNoZXMKKyAgICAgICAgICAgIHZhciBtYXRlcmlhbEluZGV4T2Zmc2V0ID0gMCwgbWF0
ZXJpYWxNYXhJbmRleDsKKyAgICAgICAgICAgIG1lc2guc3ViTWVzaGVzID0gbmV3IEFycmF5KCk7
CisgICAgICAgICAgICBmb3IgKHZhciBtIGluIHN1Yk1lc2hfZGljdCkgeworICAgICAgICAgICAg
ICAgIG1hdGVyaWFsTWF4SW5kZXggPSAtMTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBzbSBp
biBzdWJNZXNoX2RpY3RbbV0pIHsKKyAgICAgICAgICAgICAgICAgICAgc3ViTWVzaF9vYmogPSBz
dWJNZXNoX2RpY3RbbV1bc21dOworICAgICAgICAgICAgICAgICAgICBfTWVzaGVzX3N1Yk1lc2hf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU3ViTWVzaCJdLkNyZWF0ZUZyb21JbmRpY2Vz
KHN1Yk1lc2hfb2JqLm1hdGVyaWFsSW5kZXggKyBtYXRlcmlhbEluZGV4T2Zmc2V0LCBzdWJNZXNo
X29iai5pbmRleFN0YXJ0LCBzdWJNZXNoX29iai5pbmRleEVuZCAtIHN1Yk1lc2hfb2JqLmluZGV4
U3RhcnQgKyAxLCBtZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxNYXhJbmRleCA9
IE1hdGgubWF4KHN1Yk1lc2hfb2JqLm1hdGVyaWFsSW5kZXgsIG1hdGVyaWFsTWF4SW5kZXgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRlcmlhbEluZGV4T2Zmc2V0ICs9
ICsrbWF0ZXJpYWxNYXhJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbWVzaDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEJ1aWxkIE1lc2ggZnJvbSBDU0cg
dGFraW5nIG1hdGVyaWFsIGFuZCB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAorICAgICAqIEBwYXJh
bSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBNZXNoCisgICAgICogQHBhcmFtIG1hdGVyaWFsIFRoZSBt
YXRlcmlhbCBvZiB0aGUgTWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgU2NlbmUKKyAgICAg
KiBAcGFyYW0ga2VlcFN1Yk1lc2hlcyBTcGVjaWZpZXMgaWYgc3VibWVzaGVzIHNob3VsZCBiZSBr
ZXB0CisgICAgICogQHJldHVybnMgVGhlIG5ldyBNZXNoCisgICAgICovCisgICAgQ1NHLnByb3Rv
dHlwZS50b01lc2ggPSBmdW5jdGlvbiAobmFtZSwgbWF0ZXJpYWwsIHNjZW5lLCBrZWVwU3ViTWVz
aGVzKSB7CisgICAgICAgIGlmIChtYXRlcmlhbCA9PT0gdm9pZCAwKSB7IG1hdGVyaWFsID0gbnVs
bDsgfQorICAgICAgICB2YXIgbWVzaCA9IHRoaXMuYnVpbGRNZXNoR2VvbWV0cnkobmFtZSwgc2Nl
bmUsIGtlZXBTdWJNZXNoZXMpOworICAgICAgICBtZXNoLm1hdGVyaWFsID0gbWF0ZXJpYWw7Cisg
ICAgICAgIG1lc2gucG9zaXRpb24uY29weUZyb20odGhpcy5wb3NpdGlvbik7CisgICAgICAgIG1l
c2gucm90YXRpb24uY29weUZyb20odGhpcy5yb3RhdGlvbik7CisgICAgICAgIGlmICh0aGlzLnJv
dGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgbWVzaC5yb3RhdGlvblF1YXRlcm5pb24g
PSB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbi5jbG9uZSgpOworICAgICAgICB9CisgICAgICAgIG1l
c2guc2NhbGluZy5jb3B5RnJvbSh0aGlzLnNjYWxpbmcpOworICAgICAgICBtZXNoLmNvbXB1dGVX
b3JsZE1hdHJpeCh0cnVlKTsKKyAgICAgICAgcmV0dXJuIG1lc2g7CisgICAgfTsKKyAgICByZXR1
cm4gQ1NHOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvZGF0YUJ1
ZmZlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L01lc2hlcy9kYXRhQnVmZmVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBEYXRhQnVmZmVyICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkRhdGFCdWZmZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERh
dGFCdWZmZXI7IH0pOworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHN0b3JlIGdmeCBkYXRhIChsaWtl
IFdlYkdMQnVmZmVyKQorICovCit2YXIgRGF0YUJ1ZmZlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uICgpIHsKKyAgICBmdW5jdGlvbiBEYXRhQnVmZmVyKCkgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBvciBzZXRzIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyByZWZlcmVuY2luZyB0aGlz
IGJ1ZmZlcgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZWZlcmVuY2VzID0gMDsKKyAgICAg
ICAgLyoqIEdldHMgb3Igc2V0cyB0aGUgc2l6ZSBvZiB0aGUgdW5kZXJseWluZyBidWZmZXIgKi8K
KyAgICAgICAgdGhpcy5jYXBhY2l0eSA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGJ1ZmZlciBjb250YWlucyAzMmJp
dHMgaW5kaWNlcworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pczMyQml0cyA9IGZhbHNlOwor
ICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YUJ1ZmZlci5wcm90b3R5cGUsICJ1
bmRlcmx5aW5nUmVzb3VyY2UiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB1
bmRlcmx5aW5nIGJ1ZmZlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgcmV0dXJu
IERhdGFCdWZmZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy9n
ZW9tZXRyeS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NZXNoZXMvZ2VvbWV0cnkudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBHZW9tZXRyeSAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJHZW9tZXRyeSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gR2VvbWV0cnk7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMv
bWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRo
cy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNo
X3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01lc2hlcy9tZXNoLnZlcnRleERhdGEgKi8gIi4vTWVzaGVzL21lc2gudmVy
dGV4RGF0YS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
ZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWVzaGVzX3N1Yk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9zdWJNZXNoICovICIuL01lc2hlcy9zdWJN
ZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0xvYWRpbmdfc2NlbmVMb2FkZXJG
bGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTG9hZGluZy9zY2VuZUxvYWRlckZsYWdzICovICIuL0xvYWRpbmcvc2NlbmVMb2FkZXJG
bGFncy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DdWxsaW5nX2JvdW5kaW5nSW5m
b19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vQ3VsbGluZy9ib3VuZGluZ0luZm8gKi8gIi4vQ3VsbGluZy9ib3VuZGluZ0luZm8udHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29u
c3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdGFncyAqLyAiLi9NaXNjL3Rh
Z3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9mdW5jdGlvbnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRocy9tYXRoLmZ1bmN0aW9ucyAqLyAiLi9NYXRocy9tYXRoLmZ1bmN0aW9ucy50cyIpOwor
CisKKworCisKKworCisKKworCisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBzdG9yZSBnZW9tZXRy
eSBkYXRhICh2ZXJ0ZXggYnVmZmVycyArIGluZGV4IGJ1ZmZlcikKKyAqLwordmFyIEdlb21ldHJ5
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgZ2VvbWV0cnkKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgdW5pcXVlIElECisg
ICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFy
YW0gdmVydGV4RGF0YSBkZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhIHVzZWQgdG8gZ2V0IGdlb21ldHJ5
IGRhdGEKKyAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMgaWYgZ2VvbWV0cnkgbXVzdCBi
ZSB1cGRhdGFibGUgKGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5l
cyB0aGUgbWVzaCB0aGF0IHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnZW9tZXRyeQorICAg
ICAqLworICAgIGZ1bmN0aW9uIEdlb21ldHJ5KGlkLCBzY2VuZSwgdmVydGV4RGF0YSwgdXBkYXRh
YmxlLCBtZXNoKSB7CisgICAgICAgIGlmICh1cGRhdGFibGUgPT09IHZvaWQgMCkgeyB1cGRhdGFi
bGUgPSBmYWxzZTsgfQorICAgICAgICBpZiAobWVzaCA9PT0gdm9pZCAwKSB7IG1lc2ggPSBudWxs
OyB9CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBkZWxheSBsb2FkaW5nIHN0YXRl
IG9mIHRoZSBnZW9tZXRyeSAobm9uZSBieSBkZWZhdWx0IHdoaWNoIG1lYW5zIG5vdCBkZWxheWVk
KQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5ERUxBWUxP
QURTVEFURV9OT05FOworICAgICAgICB0aGlzLl90b3RhbFZlcnRpY2VzID0gMDsKKyAgICAgICAg
dGhpcy5faXNEaXNwb3NlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9pbmRleEJ1ZmZlcklzVXBk
YXRhYmxlID0gZmFsc2U7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy51bmlx
dWVJZCA9IHNjZW5lLmdldFVuaXF1ZUlkKCk7CisgICAgICAgIHRoaXMuX2VuZ2luZSA9IHNjZW5l
LmdldEVuZ2luZSgpOworICAgICAgICB0aGlzLl9tZXNoZXMgPSBbXTsKKyAgICAgICAgdGhpcy5f
c2NlbmUgPSBzY2VuZTsKKyAgICAgICAgLy9Jbml0IHZlcnRleCBidWZmZXIgY2FjaGUKKyAgICAg
ICAgdGhpcy5fdmVydGV4QnVmZmVycyA9IHt9OworICAgICAgICB0aGlzLl9pbmRpY2VzID0gW107
CisgICAgICAgIHRoaXMuX3VwZGF0YWJsZSA9IHVwZGF0YWJsZTsKKyAgICAgICAgLy8gdmVydGV4
RGF0YQorICAgICAgICBpZiAodmVydGV4RGF0YSkgeworICAgICAgICAgICAgdGhpcy5zZXRBbGxW
ZXJ0aWNlc0RhdGEodmVydGV4RGF0YSwgdXBkYXRhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3RvdGFsVmVydGljZXMgPSAwOworICAgICAgICAgICAg
dGhpcy5faW5kaWNlcyA9IFtdOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9lbmdpbmUu
Z2V0Q2FwcygpLnZlcnRleEFycmF5T2JqZWN0KSB7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhB
cnJheU9iamVjdHMgPSB7fTsKKyAgICAgICAgfQorICAgICAgICAvLyBhcHBseVRvTWVzaAorICAg
ICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgdGhpcy5hcHBseVRvTWVzaChtZXNoKTsKKyAg
ICAgICAgICAgIG1lc2guY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAgICB9CisgICAg
fQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeS5wcm90b3R5cGUsICJib3VuZGlu
Z0JpYXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiAgR2V0cyBvciBzZXRzIHRoZSBCaWFz
IFZlY3RvciB0byBhcHBseSBvbiB0aGUgYm91bmRpbmcgZWxlbWVudHMgKGJveC9zcGhlcmUpLCB0
aGUgbWF4IGV4dGVuZCBpcyBjb21wdXRlZCBhcyB2ICs9IHYgKiBiaWFzLnggKyBiaWFzLnksIHRo
ZSBtaW4gaXMgY29tcHV0ZWQgYXMgdiAtPSB2ICogYmlhcy54ICsgYmlhcy55CisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9i
b3VuZGluZ0JpYXM7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiAgR2V0cyBv
ciBzZXRzIHRoZSBCaWFzIFZlY3RvciB0byBhcHBseSBvbiB0aGUgYm91bmRpbmcgZWxlbWVudHMg
KGJveC9zcGhlcmUpLCB0aGUgbWF4IGV4dGVuZCBpcyBjb21wdXRlZCBhcyB2ICs9IHYgKiBiaWFz
LnggKyBiaWFzLnksIHRoZSBtaW4gaXMgY29tcHV0ZWQgYXMgdiAtPSB2ICogYmlhcy54ICsgYmlh
cy55CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX2JvdW5kaW5nQmlhcykgeworICAgICAgICAgICAgICAgIHRoaXMuX2Jv
dW5kaW5nQmlhcy5jb3B5RnJvbSh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ib3VuZGluZ0JpYXMgPSB2YWx1ZS5jbG9uZSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fdXBkYXRlQm91bmRpbmdJbmZvKHRy
dWUsIG51bGwpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBTdGF0aWMgZnVu
Y3Rpb24gdXNlZCB0byBhdHRhY2ggYSBuZXcgZW1wdHkgZ2VvbWV0cnkgdG8gYSBtZXNoCisgICAg
ICogQHBhcmFtIG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0byBhdHRhY2ggdGhlIGdlb21ldHJ5IHRv
CisgICAgICogQHJldHVybnMgdGhlIG5ldyBHZW9tZXRyeQorICAgICAqLworICAgIEdlb21ldHJ5
LkNyZWF0ZUdlb21ldHJ5Rm9yTWVzaCA9IGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgIHZhciBn
ZW9tZXRyeSA9IG5ldyBHZW9tZXRyeShHZW9tZXRyeS5SYW5kb21JZCgpLCBtZXNoLmdldFNjZW5l
KCkpOworICAgICAgICBnZW9tZXRyeS5hcHBseVRvTWVzaChtZXNoKTsKKyAgICAgICAgcmV0dXJu
IGdlb21ldHJ5OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEdlb21ldHJ5LnBy
b3RvdHlwZSwgImV4dGVuZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGN1
cnJlbnQgZXh0ZW5kIG9mIHRoZSBnZW9tZXRyeQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXh0ZW5kOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICog
QHJldHVybnMgdGhlIGhvc3RpbmcgU2NlbmUKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5
cGUuZ2V0U2NlbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGhvc3RpbmcgZW5naW5lCisgICAgICog
QHJldHVybnMgdGhlIGhvc3RpbmcgRW5naW5lCisgICAgICovCisgICAgR2VvbWV0cnkucHJvdG90
eXBlLmdldEVuZ2luZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuZ2lu
ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmluZXMgaWYgdGhlIGdlb21ldHJ5IGlzIHJl
YWR5IHRvIHVzZQorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGdlb21ldHJ5IGlzIHJlYWR5
IHRvIGJlIHVzZWQKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZGVsYXlMb2FkU3RhdGUgPT09IF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5E
RUxBWUxPQURTVEFURV9MT0FERUQgfHwgdGhpcy5kZWxheUxvYWRTdGF0ZSA9PT0gX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNvbnN0YW50cyJdLkRFTEFZ
TE9BRFNUQVRFX05PTkU7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0
cnkucHJvdG90eXBlLCAiZG9Ob3RTZXJpYWxpemUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB0aGF0IHRoZSBnZW9tZXRyeSBzaG91bGQgbm90IGJl
IHNlcmlhbGl6ZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX21lc2hlcy5sZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21lc2hlc1tpbmRleF0uZG9O
b3RTZXJpYWxpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIEdlb21ldHJ5LnByb3RvdHlw
ZS5fcmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3ZlcnRleEFycmF5
T2JqZWN0cykgeworICAgICAgICAgICAgdGhpcy5fdmVydGV4QXJyYXlPYmplY3RzID0ge307Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gSW5kZXggYnVmZmVyCisgICAgICAgIGlmICh0aGlzLl9tZXNo
ZXMubGVuZ3RoICE9PSAwICYmIHRoaXMuX2luZGljZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX2lu
ZGV4QnVmZmVyID0gdGhpcy5fZW5naW5lLmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuX2luZGljZXMp
OworICAgICAgICB9CisgICAgICAgIC8vIFZlcnRleCBidWZmZXJzCisgICAgICAgIGZvciAodmFy
IGtleSBpbiB0aGlzLl92ZXJ0ZXhCdWZmZXJzKSB7CisgICAgICAgICAgICB2YXIgdmVydGV4QnVm
ZmVyID0gdGhpcy5fdmVydGV4QnVmZmVyc1trZXldOworICAgICAgICAgICAgdmVydGV4QnVmZmVy
Ll9yZWJ1aWxkKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEFmZmVjdHMg
YWxsIGdlb21ldHJ5IGRhdGEgaW4gb25lIGNhbGwKKyAgICAgKiBAcGFyYW0gdmVydGV4RGF0YSBk
ZWZpbmVzIHRoZSBnZW9tZXRyeSBkYXRhCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVz
IGlmIHRoZSBnZW9tZXRyeSBtdXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlIChmYWxzZSBhcyBk
ZWZhdWx0KQorICAgICAqLworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5zZXRBbGxWZXJ0aWNlc0Rh
dGEgPSBmdW5jdGlvbiAodmVydGV4RGF0YSwgdXBkYXRhYmxlKSB7CisgICAgICAgIHZlcnRleERh
dGEuYXBwbHlUb0dlb21ldHJ5KHRoaXMsIHVwZGF0YWJsZSk7CisgICAgICAgIHRoaXMubm90aWZ5
VXBkYXRlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgc3BlY2lmaWMgdmVydGV4IGRh
dGEKKyAgICAgKiBAcGFyYW0ga2luZCBkZWZpbmVzIHRoZSBkYXRhIGtpbmQgKFBvc2l0aW9uLCBu
b3JtYWwsIGV0Yy4uLikKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSB2ZXJ0ZXggZGF0
YSB0byB1c2UKKyAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMgaWYgdGhlIHZlcnRleCBt
dXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlIChmYWxzZSBhcyBkZWZhdWx0KQorICAgICAqIEBw
YXJhbSBzdHJpZGUgZGVmaW5lcyB0aGUgc3RyaWRlIHRvIHVzZSAoMCBieSBkZWZhdWx0KS4gVGhp
cyB2YWx1ZSBpcyBkZWR1Y2VkIGZyb20gdGhlIGtpbmQgdmFsdWUgaWYgbm90IHNwZWNpZmllZAor
ICAgICAqLworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5zZXRWZXJ0aWNlc0RhdGEgPSBmdW5jdGlv
biAoa2luZCwgZGF0YSwgdXBkYXRhYmxlLCBzdHJpZGUpIHsKKyAgICAgICAgaWYgKHVwZGF0YWJs
ZSA9PT0gdm9pZCAwKSB7IHVwZGF0YWJsZSA9IGZhbHNlOyB9CisgICAgICAgIHZhciBidWZmZXIg
PSBuZXcgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
QnVmZmVyIl0odGhpcy5fZW5naW5lLCBkYXRhLCBraW5kLCB1cGRhdGFibGUsIHRoaXMuX21lc2hl
cy5sZW5ndGggPT09IDAsIHN0cmlkZSk7CisgICAgICAgIHRoaXMuc2V0VmVydGljZXNCdWZmZXIo
YnVmZmVyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMgYSBzcGVjaWZpYyB2ZXJ0
ZXggZGF0YQorICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMgdGhlIGRhdGEga2luZCAoUG9zaXRp
b24sIG5vcm1hbCwgZXRjLi4uKQorICAgICAqLworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5yZW1v
dmVWZXJ0aWNlc0RhdGEgPSBmdW5jdGlvbiAoa2luZCkgeworICAgICAgICBpZiAodGhpcy5fdmVy
dGV4QnVmZmVyc1traW5kXSkgeworICAgICAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1traW5k
XS5kaXNwb3NlKCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fdmVydGV4QnVmZmVyc1traW5k
XTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQWZmZWN0IGEgdmVydGV4IGJ1
ZmZlciB0byB0aGUgZ2VvbWV0cnkuIHRoZSB2ZXJ0ZXhCdWZmZXIuZ2V0S2luZCgpIGZ1bmN0aW9u
IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIHN0b3JlIHRoZSBkYXRhCisgICAgICogQHBh
cmFtIGJ1ZmZlciBkZWZpbmVzIHRoZSB2ZXJ0ZXggYnVmZmVyIHRvIHVzZQorICAgICAqIEBwYXJh
bSB0b3RhbFZlcnRpY2VzIGRlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlcyBmb3Ig
cG9zaXRpb24ga2luZCAoY291bGQgYmUgbnVsbCkKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90
b3R5cGUuc2V0VmVydGljZXNCdWZmZXIgPSBmdW5jdGlvbiAoYnVmZmVyLCB0b3RhbFZlcnRpY2Vz
KSB7CisgICAgICAgIGlmICh0b3RhbFZlcnRpY2VzID09PSB2b2lkIDApIHsgdG90YWxWZXJ0aWNl
cyA9IG51bGw7IH0KKyAgICAgICAgdmFyIGtpbmQgPSBidWZmZXIuZ2V0S2luZCgpOworICAgICAg
ICBpZiAodGhpcy5fdmVydGV4QnVmZmVyc1traW5kXSkgeworICAgICAgICAgICAgdGhpcy5fdmVy
dGV4QnVmZmVyc1traW5kXS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdmVy
dGV4QnVmZmVyc1traW5kXSA9IGJ1ZmZlcjsKKyAgICAgICAgaWYgKGtpbmQgPT09IF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0
aW9uS2luZCkgeworICAgICAgICAgICAgdmFyIGRhdGEgPSBidWZmZXIuZ2V0RGF0YSgpOworICAg
ICAgICAgICAgaWYgKHRvdGFsVmVydGljZXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRo
aXMuX3RvdGFsVmVydGljZXMgPSB0b3RhbFZlcnRpY2VzOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl90b3RhbFZlcnRpY2VzID0gZGF0YS5sZW5ndGggLyAoYnVmZmVy
LmJ5dGVTdHJpZGUgLyA0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl91cGRhdGVFeHRlbmQoZGF0YSk7CisgICAgICAgICAgICB0aGlzLl9yZXNl
dFBvaW50c0FycmF5Q2FjaGUoKTsKKyAgICAgICAgICAgIHZhciBtZXNoZXMgPSB0aGlzLl9tZXNo
ZXM7CisgICAgICAgICAgICB2YXIgbnVtT2ZNZXNoZXMgPSBtZXNoZXMubGVuZ3RoOworICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG51bU9mTWVzaGVzOyBpbmRleCsrKSB7
CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBtZXNoZXNbaW5kZXhdOworICAgICAgICAgICAg
ICAgIG1lc2guX2JvdW5kaW5nSW5mbyA9IG5ldyBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siQm91bmRpbmdJbmZvIl0odGhpcy5fZXh0ZW5kLm1pbmlt
dW0sIHRoaXMuX2V4dGVuZC5tYXhpbXVtKTsKKyAgICAgICAgICAgICAgICBtZXNoLl9jcmVhdGVH
bG9iYWxTdWJNZXNoKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtZXNoLmNvbXB1dGVXb3JsZE1h
dHJpeCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLm5vdGlm
eVVwZGF0ZShraW5kKTsKKyAgICAgICAgaWYgKHRoaXMuX3ZlcnRleEFycmF5T2JqZWN0cykgewor
ICAgICAgICAgICAgdGhpcy5fZGlzcG9zZVZlcnRleEFycmF5T2JqZWN0cygpOworICAgICAgICAg
ICAgdGhpcy5fdmVydGV4QXJyYXlPYmplY3RzID0ge307IC8vIFdpbGwgdHJpZ2dlciBhIHJlYnVp
bGQgb2YgdGhlIFZBTyBpZiBzdXBwb3J0ZWQKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogVXBkYXRlIGEgc3BlY2lmaWMgdmVydGV4IGJ1ZmZlcgorICAgICAqIFRoaXMgZnVuY3Rp
b24gd2lsbCBkaXJlY3RseSB1cGRhdGUgdGhlIHVuZGVybHlpbmcgRGF0YUJ1ZmZlciBhY2NvcmRp
bmcgdG8gdGhlIHBhc3NlZCBudW1lcmljIGFycmF5IG9yIEZsb2F0MzJBcnJheQorICAgICAqIEl0
IHdpbGwgZG8gbm90aGluZyBpZiB0aGUgYnVmZmVyIGlzIG5vdCB1cGRhdGFibGUKKyAgICAgKiBA
cGFyYW0ga2luZCBkZWZpbmVzIHRoZSBkYXRhIGtpbmQgKFBvc2l0aW9uLCBub3JtYWwsIGV0Yy4u
LikKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVzIHRoZSBkYXRhIHRvIHVzZQorICAgICAqIEBw
YXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0IGluIHRoZSB0YXJnZXQgYnVmZmVyIHdoZXJl
IHRvIHN0b3JlIHRoZSBkYXRhCisgICAgICogQHBhcmFtIHVzZUJ5dGVzIHNldCB0byB0cnVlIGlm
IHRoZSBvZmZzZXQgaXMgaW4gYnl0ZXMKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUu
dXBkYXRlVmVydGljZXNEYXRhRGlyZWN0bHkgPSBmdW5jdGlvbiAoa2luZCwgZGF0YSwgb2Zmc2V0
LCB1c2VCeXRlcykgeworICAgICAgICBpZiAodXNlQnl0ZXMgPT09IHZvaWQgMCkgeyB1c2VCeXRl
cyA9IGZhbHNlOyB9CisgICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB0aGlzLmdldFZlcnRleEJ1
ZmZlcihraW5kKTsKKyAgICAgICAgaWYgKCF2ZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICB2ZXJ0ZXhCdWZmZXIudXBkYXRlRGlyZWN0bHkoZGF0
YSwgb2Zmc2V0LCB1c2VCeXRlcyk7CisgICAgICAgIHRoaXMubm90aWZ5VXBkYXRlKGtpbmQpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIGEgc3BlY2lmaWMgdmVydGV4IGJ1ZmZlcgor
ICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYSBuZXcgYnVmZmVyIGlmIHRoZSBjdXJy
ZW50IG9uZSBpcyBub3QgdXBkYXRhYmxlCisgICAgICogQHBhcmFtIGtpbmQgZGVmaW5lcyB0aGUg
ZGF0YSBraW5kIChQb3NpdGlvbiwgbm9ybWFsLCBldGMuLi4pCisgICAgICogQHBhcmFtIGRhdGEg
ZGVmaW5lcyB0aGUgZGF0YSB0byB1c2UKKyAgICAgKiBAcGFyYW0gdXBkYXRlRXh0ZW5kcyBkZWZp
bmVzIGlmIHRoZSBnZW9tZXRyeSBleHRlbmRzIG11c3QgYmUgcmVjb21wdXRlZCAoZmFsc2UgYnkg
ZGVmYXVsdCkKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUudXBkYXRlVmVydGljZXNE
YXRhID0gZnVuY3Rpb24gKGtpbmQsIGRhdGEsIHVwZGF0ZUV4dGVuZHMpIHsKKyAgICAgICAgaWYg
KHVwZGF0ZUV4dGVuZHMgPT09IHZvaWQgMCkgeyB1cGRhdGVFeHRlbmRzID0gZmFsc2U7IH0KKyAg
ICAgICAgdmFyIHZlcnRleEJ1ZmZlciA9IHRoaXMuZ2V0VmVydGV4QnVmZmVyKGtpbmQpOworICAg
ICAgICBpZiAoIXZlcnRleEJ1ZmZlcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHZlcnRleEJ1ZmZlci51cGRhdGUoZGF0YSk7CisgICAgICAgIGlmIChraW5kID09
PSBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZm
ZXIiXS5Qb3NpdGlvbktpbmQpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJvdW5kaW5nSW5m
byh1cGRhdGVFeHRlbmRzLCBkYXRhKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm5vdGlmeVVw
ZGF0ZShraW5kKTsKKyAgICB9OworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5fdXBkYXRlQm91bmRp
bmdJbmZvID0gZnVuY3Rpb24gKHVwZGF0ZUV4dGVuZHMsIGRhdGEpIHsKKyAgICAgICAgaWYgKHVw
ZGF0ZUV4dGVuZHMpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUV4dGVuZChkYXRhKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9yZXNldFBvaW50c0FycmF5Q2FjaGUoKTsKKyAgICAgICAg
aWYgKHVwZGF0ZUV4dGVuZHMpIHsKKyAgICAgICAgICAgIHZhciBtZXNoZXMgPSB0aGlzLl9tZXNo
ZXM7CisgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIG1lc2hlc18xID0gbWVzaGVzOyBfaSA8
IG1lc2hlc18xLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZhciBtZXNoID0gbWVz
aGVzXzFbX2ldOworICAgICAgICAgICAgICAgIGlmIChtZXNoLl9ib3VuZGluZ0luZm8pIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWVzaC5fYm91bmRpbmdJbmZvLnJlQ29uc3RydWN0KHRoaXMuX2V4
dGVuZC5taW5pbXVtLCB0aGlzLl9leHRlbmQubWF4aW11bSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtZXNoLl9ib3VuZGlu
Z0luZm8gPSBuZXcgX0N1bGxpbmdfYm91bmRpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIkJvdW5kaW5nSW5mbyJdKHRoaXMuX2V4dGVuZC5taW5pbXVtLCB0aGlzLl9leHRlbmQu
bWF4aW11bSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBzdWJNZXNo
ZXMgPSBtZXNoLnN1Yk1lc2hlczsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBfYSA9IDAsIHN1
Yk1lc2hlc18xID0gc3ViTWVzaGVzOyBfYSA8IHN1Yk1lc2hlc18xLmxlbmd0aDsgX2ErKykgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgc3ViTWVzaCA9IHN1Yk1lc2hlc18xW19hXTsKKyAgICAg
ICAgICAgICAgICAgICAgc3ViTWVzaC5yZWZyZXNoQm91bmRpbmdJbmZvKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRl
biAqLworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5fYmluZCA9IGZ1bmN0aW9uIChlZmZlY3QsIGlu
ZGV4VG9CaW5kKSB7CisgICAgICAgIGlmICghZWZmZWN0KSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZGV4VG9CaW5kID09PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgIGluZGV4VG9CaW5kID0gdGhpcy5faW5kZXhCdWZmZXI7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIHZicyA9IHRoaXMuZ2V0VmVydGV4QnVmZmVycygpOworICAgICAgICBpZiAoIXZi
cykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChpbmRleFRv
QmluZCAhPSB0aGlzLl9pbmRleEJ1ZmZlciB8fCAhdGhpcy5fdmVydGV4QXJyYXlPYmplY3RzKSB7
CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUuYmluZEJ1ZmZlcnModmJzLCBpbmRleFRvQmluZCwg
ZWZmZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBVc2lu
ZyBWQU8KKyAgICAgICAgaWYgKCF0aGlzLl92ZXJ0ZXhBcnJheU9iamVjdHNbZWZmZWN0LmtleV0p
IHsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleEFycmF5T2JqZWN0c1tlZmZlY3Qua2V5XSA9IHRo
aXMuX2VuZ2luZS5yZWNvcmRWZXJ0ZXhBcnJheU9iamVjdCh2YnMsIGluZGV4VG9CaW5kLCBlZmZl
Y3QpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VuZ2luZS5iaW5kVmVydGV4QXJyYXlPYmpl
Y3QodGhpcy5fdmVydGV4QXJyYXlPYmplY3RzW2VmZmVjdC5rZXldLCBpbmRleFRvQmluZCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlcworICAg
ICAqIEByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXMKKyAgICAgKi8KKyAgICBH
ZW9tZXRyeS5wcm90b3R5cGUuZ2V0VG90YWxWZXJ0aWNlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgaWYgKCF0aGlzLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3RvdGFsVmVydGljZXM7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBHZXRzIGEgc3BlY2lmaWMgdmVydGV4IGRhdGEgYXR0YWNoZWQgdG8gdGhpcyBnZW9t
ZXRyeS4gRmxvYXQgZGF0YSBpcyBjb25zdHJ1Y3RlZCBpZiB0aGUgdmVydGV4IGJ1ZmZlciBkYXRh
IGNhbm5vdCBiZSByZXR1cm5lZCBkaXJlY3RseS4KKyAgICAgKiBAcGFyYW0ga2luZCBkZWZpbmVz
IHRoZSBkYXRhIGtpbmQgKFBvc2l0aW9uLCBub3JtYWwsIGV0Yy4uLikKKyAgICAgKiBAcGFyYW0g
Y29weVdoZW5TaGFyZWQgZGVmaW5lcyBpZiB0aGUgcmV0dXJuZWQgYXJyYXkgbXVzdCBiZSBjbG9u
ZWQgdXBvbiByZXR1cm5pbmcgaXQgaWYgdGhlIGN1cnJlbnQgZ2VvbWV0cnkgaXMgc2hhcmVkIGJl
dHdlZW4gbXVsdGlwbGUgbWVzaGVzCisgICAgICogQHBhcmFtIGZvcmNlQ29weSBkZWZpbmVzIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhlIHJldHVybmVkIGFycmF5IG11c3QgYmUgY2xvbmVk
IHVwb24gcmV0dXJuaW5nIGl0CisgICAgICogQHJldHVybnMgYSBmbG9hdCBhcnJheSBjb250YWlu
aW5nIHZlcnRleCBkYXRhCisgICAgICovCisgICAgR2VvbWV0cnkucHJvdG90eXBlLmdldFZlcnRp
Y2VzRGF0YSA9IGZ1bmN0aW9uIChraW5kLCBjb3B5V2hlblNoYXJlZCwgZm9yY2VDb3B5KSB7Cisg
ICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIgPSB0aGlzLmdldFZlcnRleEJ1ZmZlcihraW5kKTsKKyAg
ICAgICAgaWYgKCF2ZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICB9CisgICAgICAgIHZhciBkYXRhID0gdmVydGV4QnVmZmVyLmdldERhdGEoKTsKKyAgICAg
ICAgaWYgKCFkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgdGlnaHRseVBhY2tlZEJ5dGVTdHJpZGUgPSB2ZXJ0ZXhCdWZmZXIuZ2V0U2l6ZSgp
ICogX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVm
ZmVyIl0uR2V0VHlwZUJ5dGVMZW5ndGgodmVydGV4QnVmZmVyLnR5cGUpOworICAgICAgICB2YXIg
Y291bnQgPSB0aGlzLl90b3RhbFZlcnRpY2VzICogdmVydGV4QnVmZmVyLmdldFNpemUoKTsKKyAg
ICAgICAgaWYgKHZlcnRleEJ1ZmZlci50eXBlICE9PSBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5GTE9BVCB8fCB2ZXJ0ZXhCdWZmZXIu
Ynl0ZVN0cmlkZSAhPT0gdGlnaHRseVBhY2tlZEJ5dGVTdHJpZGUpIHsKKyAgICAgICAgICAgIHZh
ciBjb3B5XzEgPSBbXTsKKyAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5mb3JFYWNoKGNvdW50LCBm
dW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGNvcHlfMS5wdXNoKHZhbHVlKTsgfSk7CisgICAgICAg
ICAgICByZXR1cm4gY29weV8xOworICAgICAgICB9CisgICAgICAgIGlmICghKChkYXRhIGluc3Rh
bmNlb2YgQXJyYXkpIHx8IChkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSkgfHwgdmVydGV4
QnVmZmVyLmJ5dGVPZmZzZXQgIT09IDAgfHwgZGF0YS5sZW5ndGggIT09IGNvdW50KSB7CisgICAg
ICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICAgICAgdmFy
IG9mZnNldCA9IHZlcnRleEJ1ZmZlci5ieXRlT2Zmc2V0IC8gNDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVG9vbHMiXS5T
bGljZShkYXRhLCBvZmZzZXQsIG9mZnNldCArIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgeworICAgICAgICAg
ICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGRhdGEsIHZlcnRleEJ1ZmZlci5ieXRlT2Zm
c2V0LCBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2YXIgb2Zmc2V0ID0gZGF0YS5ieXRlT2Zmc2V0ICsgdmVydGV4QnVmZmVyLmJ5dGVP
ZmZzZXQ7CisgICAgICAgICAgICAgICAgaWYgKGZvcmNlQ29weSB8fCAoY29weVdoZW5TaGFyZWQg
JiYgdGhpcy5fbWVzaGVzLmxlbmd0aCAhPT0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQpOworICAgICAgICAgICAgICAgICAgICB2
YXIgc291cmNlID0gbmV3IEZsb2F0MzJBcnJheShkYXRhLmJ1ZmZlciwgb2Zmc2V0LCBjb3VudCk7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoc291cmNlKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoZGF0YS5idWZmZXIsIG9mZnNldCwgY291bnQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmb3JjZUNvcHkgfHwgKGNvcHlXaGVu
U2hhcmVkICYmIHRoaXMuX21lc2hlcy5sZW5ndGggIT09IDEpKSB7CisgICAgICAgICAgICByZXR1
cm4gX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVG9vbHMiXS5TbGlj
ZShkYXRhKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFJldHVybnMgYSBib29sZWFuIGRlZmluaW5nIGlmIHRoZSB2ZXJ0ZXggZGF0YSBm
b3IgdGhlIHJlcXVlc3RlZCBga2luZGAgaXMgdXBkYXRhYmxlCisgICAgICogQHBhcmFtIGtpbmQg
ZGVmaW5lcyB0aGUgZGF0YSBraW5kIChQb3NpdGlvbiwgbm9ybWFsLCBldGMuLi4pCisgICAgICog
QHJldHVybnMgdHJ1ZSBpZiB0aGUgdmVydGV4IGJ1ZmZlciB3aXRoIHRoZSBzcGVjaWZpZWQga2lu
ZCBpcyB1cGRhdGFibGUKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuaXNWZXJ0ZXhC
dWZmZXJVcGRhdGFibGUgPSBmdW5jdGlvbiAoa2luZCkgeworICAgICAgICB2YXIgdmIgPSB0aGlz
Ll92ZXJ0ZXhCdWZmZXJzW2tpbmRdOworICAgICAgICBpZiAoIXZiKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZiLmlzVXBkYXRhYmxlKCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc3BlY2lmaWMgdmVydGV4IGJ1ZmZlcgor
ICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMgdGhlIGRhdGEga2luZCAoUG9zaXRpb24sIG5vcm1h
bCwgZXRjLi4uKQorICAgICAqIEByZXR1cm5zIGEgVmVydGV4QnVmZmVyCisgICAgICovCisgICAg
R2VvbWV0cnkucHJvdG90eXBlLmdldFZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uIChraW5kKSB7Cisg
ICAgICAgIGlmICghdGhpcy5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl92ZXJ0ZXhCdWZmZXJzW2tpbmRdOworICAg
IH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhbGwgdmVydGV4IGJ1ZmZlcnMKKyAgICAgKiBA
cmV0dXJuIGFuIG9iamVjdCBob2xkaW5nIGFsbCB2ZXJ0ZXggYnVmZmVycyBpbmRleGVkIGJ5IGtp
bmQKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuZ2V0VmVydGV4QnVmZmVycyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHkoKSkgeworICAgICAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnRleEJ1ZmZl
cnM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlm
IHNwZWNpZmljIHZlcnRleCBidWZmZXIgaXMgcHJlc2VudAorICAgICAqIEBwYXJhbSBraW5kIGRl
ZmluZXMgdGhlIGRhdGEga2luZCAoUG9zaXRpb24sIG5vcm1hbCwgZXRjLi4uKQorICAgICAqIEBy
ZXR1cm5zIHRydWUgaWYgZGF0YSBpcyBwcmVzZW50CisgICAgICovCisgICAgR2VvbWV0cnkucHJv
dG90eXBlLmlzVmVydGljZXNEYXRhUHJlc2VudCA9IGZ1bmN0aW9uIChraW5kKSB7CisgICAgICAg
IGlmICghdGhpcy5fdmVydGV4QnVmZmVycykgeworICAgICAgICAgICAgaWYgKHRoaXMuX2RlbGF5
SW5mbykgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxheUluZm8uaW5kZXhPZihr
aW5kKSAhPT0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnRleEJ1ZmZlcnNba2luZF0gIT09IHVu
ZGVmaW5lZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBsaXN0IG9mIGFsbCBhdHRh
Y2hlZCBkYXRhIGtpbmRzIChQb3NpdGlvbiwgbm9ybWFsLCBldGMuLi4pCisgICAgICogQHJldHVy
bnMgYSBsaXN0IG9mIHN0cmluZyBjb250YWluaW5nIGFsbCBraW5kcworICAgICAqLworICAgIEdl
b21ldHJ5LnByb3RvdHlwZS5nZXRWZXJ0aWNlc0RhdGFLaW5kcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAgICAgICB2YXIga2luZDsKKyAgICAgICAgaWYgKCF0
aGlzLl92ZXJ0ZXhCdWZmZXJzICYmIHRoaXMuX2RlbGF5SW5mbykgeworICAgICAgICAgICAgZm9y
IChraW5kIGluIHRoaXMuX2RlbGF5SW5mbykgeworICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNo
KGtpbmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgZm9yIChraW5kIGluIHRoaXMuX3ZlcnRleEJ1ZmZlcnMpIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQucHVzaChraW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIGluZGV4IGJ1ZmZl
cgorICAgICAqIEBwYXJhbSBpbmRpY2VzIGRlZmluZXMgdGhlIGluZGljZXMgdG8gc3RvcmUgaW4g
dGhlIGluZGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBvZmZzZXQgZGVmaW5lcyB0aGUgb2Zmc2V0
IGluIHRoZSB0YXJnZXQgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSBkYXRhCisgICAgICogQHBh
cmFtIGdwdU1lbW9yeU9ubHkgZGVmaW5lcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IG9ubHkg
dGhlIEdQVSBtZW1vcnkgbXVzdCBiZSB1cGRhdGVkIGxlYXZpbmcgdGhlIENQVSB2ZXJzaW9uIG9m
IHRoZSBpbmRpY2VzIHVuY2hhbmdlZCAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBH
ZW9tZXRyeS5wcm90b3R5cGUudXBkYXRlSW5kaWNlcyA9IGZ1bmN0aW9uIChpbmRpY2VzLCBvZmZz
ZXQsIGdwdU1lbW9yeU9ubHkpIHsKKyAgICAgICAgaWYgKGdwdU1lbW9yeU9ubHkgPT09IHZvaWQg
MCkgeyBncHVNZW1vcnlPbmx5ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCF0aGlzLl9pbmRleEJ1
ZmZlcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghdGhp
cy5faW5kZXhCdWZmZXJJc1VwZGF0YWJsZSkgeworICAgICAgICAgICAgdGhpcy5zZXRJbmRpY2Vz
KGluZGljZXMsIG51bGwsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdmFyIG5lZWRUb1VwZGF0ZVN1Yk1lc2hlcyA9IGluZGljZXMubGVuZ3RoICE9PSB0aGlz
Ll9pbmRpY2VzLmxlbmd0aDsKKyAgICAgICAgICAgIGlmICghZ3B1TWVtb3J5T25seSkgeworICAg
ICAgICAgICAgICAgIHRoaXMuX2luZGljZXMgPSBpbmRpY2VzLnNsaWNlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUudXBkYXRlRHluYW1pY0luZGV4QnVmZmVyKHRo
aXMuX2luZGV4QnVmZmVyLCBpbmRpY2VzLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKG5lZWRU
b1VwZGF0ZVN1Yk1lc2hlcykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2Eg
PSB0aGlzLl9tZXNoZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBtZXNoID0gX2FbX2ldOworICAgICAgICAgICAgICAgICAgICBtZXNoLl9jcmVhdGVH
bG9iYWxTdWJNZXNoKHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbmRleCBidWZm
ZXIKKyAgICAgKiBAcGFyYW0gaW5kaWNlcyBkZWZpbmVzIHRoZSBpbmRpY2VzIHRvIHN0b3JlIGlu
IHRoZSBpbmRleCBidWZmZXIKKyAgICAgKiBAcGFyYW0gdG90YWxWZXJ0aWNlcyBkZWZpbmVzIHRo
ZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXMgKGNvdWxkIGJlIG51bGwpCisgICAgICogQHBhcmFt
IHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBpbmRleCBidWZmZXIgbXVzdCBiZSBmbGFnZ2VkIGFz
IHVwZGF0YWJsZSAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90
b3R5cGUuc2V0SW5kaWNlcyA9IGZ1bmN0aW9uIChpbmRpY2VzLCB0b3RhbFZlcnRpY2VzLCB1cGRh
dGFibGUpIHsKKyAgICAgICAgaWYgKHRvdGFsVmVydGljZXMgPT09IHZvaWQgMCkgeyB0b3RhbFZl
cnRpY2VzID0gbnVsbDsgfQorICAgICAgICBpZiAodXBkYXRhYmxlID09PSB2b2lkIDApIHsgdXBk
YXRhYmxlID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHRoaXMuX2luZGV4QnVmZmVyKSB7CisgICAg
ICAgICAgICB0aGlzLl9lbmdpbmUuX3JlbGVhc2VCdWZmZXIodGhpcy5faW5kZXhCdWZmZXIpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2Rpc3Bvc2VWZXJ0ZXhBcnJheU9iamVjdHMoKTsKKyAg
ICAgICAgdGhpcy5faW5kaWNlcyA9IGluZGljZXM7CisgICAgICAgIHRoaXMuX2luZGV4QnVmZmVy
SXNVcGRhdGFibGUgPSB1cGRhdGFibGU7CisgICAgICAgIGlmICh0aGlzLl9tZXNoZXMubGVuZ3Ro
ICE9PSAwICYmIHRoaXMuX2luZGljZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX2luZGV4QnVmZmVy
ID0gdGhpcy5fZW5naW5lLmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuX2luZGljZXMsIHVwZGF0YWJs
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRvdGFsVmVydGljZXMgIT0gdW5kZWZpbmVkKSB7
IC8vIGluY2x1ZGluZyBudWxsIGFuZCB1bmRlZmluZWQKKyAgICAgICAgICAgIHRoaXMuX3RvdGFs
VmVydGljZXMgPSB0b3RhbFZlcnRpY2VzOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIF9p
ID0gMCwgX2EgPSB0aGlzLl9tZXNoZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAg
ICAgICB2YXIgbWVzaCA9IF9hW19pXTsKKyAgICAgICAgICAgIG1lc2guX2NyZWF0ZUdsb2JhbFN1
Yk1lc2godHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5ub3RpZnlVcGRhdGUoKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMK
KyAgICAgKiBAcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMKKyAgICAgKi8KKyAg
ICBHZW9tZXRyeS5wcm90b3R5cGUuZ2V0VG90YWxJbmRpY2VzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAoIXRoaXMuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpcy5faW5kaWNlcy5sZW5ndGg7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBpbmRleCBidWZmZXIgYXJyYXkKKyAgICAgKiBAcGFyYW0gY29w
eVdoZW5TaGFyZWQgZGVmaW5lcyBpZiB0aGUgcmV0dXJuZWQgYXJyYXkgbXVzdCBiZSBjbG9uZWQg
dXBvbiByZXR1cm5pbmcgaXQgaWYgdGhlIGN1cnJlbnQgZ2VvbWV0cnkgaXMgc2hhcmVkIGJldHdl
ZW4gbXVsdGlwbGUgbWVzaGVzCisgICAgICogQHBhcmFtIGZvcmNlQ29weSBkZWZpbmVzIGEgYm9v
bGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhlIHJldHVybmVkIGFycmF5IG11c3QgYmUgY2xvbmVkIHVw
b24gcmV0dXJuaW5nIGl0CisgICAgICogQHJldHVybnMgdGhlIGluZGV4IGJ1ZmZlciBhcnJheQor
ICAgICAqLworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5nZXRJbmRpY2VzID0gZnVuY3Rpb24gKGNv
cHlXaGVuU2hhcmVkLCBmb3JjZUNvcHkpIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHkoKSkg
eworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9yaWcg
PSB0aGlzLl9pbmRpY2VzOworICAgICAgICBpZiAoIWZvcmNlQ29weSAmJiAoIWNvcHlXaGVuU2hh
cmVkIHx8IHRoaXMuX21lc2hlcy5sZW5ndGggPT09IDEpKSB7CisgICAgICAgICAgICByZXR1cm4g
b3JpZzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBsZW4gPSBv
cmlnLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBjb3B5ID0gW107CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29weS5wdXNoKG9y
aWdbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGluZGV4IGJ1ZmZlcgorICAgICAq
IEByZXR1cm4gdGhlIGluZGV4IGJ1ZmZlcgorICAgICAqLworICAgIEdlb21ldHJ5LnByb3RvdHlw
ZS5nZXRJbmRleEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzUmVh
ZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMuX2luZGV4QnVmZmVyOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBH
ZW9tZXRyeS5wcm90b3R5cGUuX3JlbGVhc2VWZXJ0ZXhBcnJheU9iamVjdCA9IGZ1bmN0aW9uIChl
ZmZlY3QpIHsKKyAgICAgICAgaWYgKGVmZmVjdCA9PT0gdm9pZCAwKSB7IGVmZmVjdCA9IG51bGw7
IH0KKyAgICAgICAgaWYgKCFlZmZlY3QgfHwgIXRoaXMuX3ZlcnRleEFycmF5T2JqZWN0cykgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl92ZXJ0ZXhB
cnJheU9iamVjdHNbZWZmZWN0LmtleV0pIHsKKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5yZWxl
YXNlVmVydGV4QXJyYXlPYmplY3QodGhpcy5fdmVydGV4QXJyYXlPYmplY3RzW2VmZmVjdC5rZXld
KTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl92ZXJ0ZXhBcnJheU9iamVjdHNbZWZmZWN0Lmtl
eV07CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbGVhc2UgdGhlIGFzc29j
aWF0ZWQgcmVzb3VyY2VzIGZvciBhIHNwZWNpZmljIG1lc2gKKyAgICAgKiBAcGFyYW0gbWVzaCBk
ZWZpbmVzIHRoZSBzb3VyY2UgbWVzaAorICAgICAqIEBwYXJhbSBzaG91bGREaXNwb3NlIGRlZmlu
ZXMgaWYgdGhlIGdlb21ldHJ5IG11c3QgYmUgZGlzcG9zZWQgaWYgdGhlcmUgaXMgbm8gbW9yZSBt
ZXNoIHBvaW50aW5nIHRvIGl0CisgICAgICovCisgICAgR2VvbWV0cnkucHJvdG90eXBlLnJlbGVh
c2VGb3JNZXNoID0gZnVuY3Rpb24gKG1lc2gsIHNob3VsZERpc3Bvc2UpIHsKKyAgICAgICAgdmFy
IG1lc2hlcyA9IHRoaXMuX21lc2hlczsKKyAgICAgICAgdmFyIGluZGV4ID0gbWVzaGVzLmluZGV4
T2YobWVzaCk7CisgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBtZXNoZXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAg
bWVzaC5fZ2VvbWV0cnkgPSBudWxsOworICAgICAgICBpZiAobWVzaGVzLmxlbmd0aCA9PT0gMCAm
JiBzaG91bGREaXNwb3NlKSB7CisgICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogQXBwbHkgY3VycmVudCBnZW9tZXRyeSB0byBhIGdp
dmVuIG1lc2gKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRvIGFwcGx5IGdl
b21ldHJ5IHRvCisgICAgICovCisgICAgR2VvbWV0cnkucHJvdG90eXBlLmFwcGx5VG9NZXNoID0g
ZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgaWYgKG1lc2guX2dlb21ldHJ5ID09PSB0aGlzKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHByZXZpb3VzR2Vv
bWV0cnkgPSBtZXNoLl9nZW9tZXRyeTsKKyAgICAgICAgaWYgKHByZXZpb3VzR2VvbWV0cnkpIHsK
KyAgICAgICAgICAgIHByZXZpb3VzR2VvbWV0cnkucmVsZWFzZUZvck1lc2gobWVzaCk7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIG1lc2hlcyA9IHRoaXMuX21lc2hlczsKKyAgICAgICAgLy8gbXVz
dCBiZSBkb25lIGJlZm9yZSBzZXR0aW5nIHZlcnRleEJ1ZmZlcnMgYmVjYXVzZSBvZiBtZXNoLl9j
cmVhdGVHbG9iYWxTdWJNZXNoKCkKKyAgICAgICAgbWVzaC5fZ2VvbWV0cnkgPSB0aGlzOworICAg
ICAgICB0aGlzLl9zY2VuZS5wdXNoR2VvbWV0cnkodGhpcyk7CisgICAgICAgIG1lc2hlcy5wdXNo
KG1lc2gpOworICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgIHRoaXMu
X2FwcGx5VG9NZXNoKG1lc2gpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgbWVzaC5fYm91bmRpbmdJbmZvID0gdGhpcy5fYm91bmRpbmdJbmZvOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuX3VwZGF0ZUV4dGVuZCA9IGZ1bmN0aW9uIChk
YXRhKSB7CisgICAgICAgIGlmIChkYXRhID09PSB2b2lkIDApIHsgZGF0YSA9IG51bGw7IH0KKyAg
ICAgICAgaWYgKCFkYXRhKSB7CisgICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRWZXJ0aWNlc0Rh
dGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVm
ZmVyIl0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9leHRlbmQgPSBP
YmplY3QoX01hdGhzX21hdGhfZnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9f
WyJleHRyYWN0TWluQW5kTWF4Il0pKGRhdGEsIDAsIHRoaXMuX3RvdGFsVmVydGljZXMsIHRoaXMu
Ym91bmRpbmdCaWFzLCAzKTsKKyAgICB9OworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5fYXBwbHlU
b01lc2ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICB2YXIgbnVtT2ZNZXNoZXMgPSB0aGlz
Ll9tZXNoZXMubGVuZ3RoOworICAgICAgICAvLyB2ZXJ0ZXhCdWZmZXJzCisgICAgICAgIGZvciAo
dmFyIGtpbmQgaW4gdGhpcy5fdmVydGV4QnVmZmVycykgeworICAgICAgICAgICAgaWYgKG51bU9m
TWVzaGVzID09PSAxKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1traW5k
XS5jcmVhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlz
Ll92ZXJ0ZXhCdWZmZXJzW2tpbmRdLmdldEJ1ZmZlcigpOworICAgICAgICAgICAgaWYgKGJ1ZmZl
cikgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5yZWZlcmVuY2VzID0gbnVtT2ZNZXNoZXM7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoa2luZCA9PT0gX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSB7
CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9leHRlbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fdXBkYXRlRXh0ZW5kKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIG1lc2guX2JvdW5kaW5nSW5mbyA9IG5ldyBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1siQm91bmRpbmdJbmZvIl0odGhpcy5fZXh0ZW5kLm1pbmlt
dW0sIHRoaXMuX2V4dGVuZC5tYXhpbXVtKTsKKyAgICAgICAgICAgICAgICBtZXNoLl9jcmVhdGVH
bG9iYWxTdWJNZXNoKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAvL2JvdW5kaW5nIGluZm8gd2Fz
IGp1c3QgY3JlYXRlZCBhZ2Fpbiwgd29ybGQgbWF0cml4IHNob3VsZCBiZSBhcHBsaWVkIGFnYWlu
LgorICAgICAgICAgICAgICAgIG1lc2guX3VwZGF0ZUJvdW5kaW5nSW5mbygpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGluZGV4QnVmZmVyCisgICAgICAgIGlmIChudW1P
Zk1lc2hlcyA9PT0gMSAmJiB0aGlzLl9pbmRpY2VzICYmIHRoaXMuX2luZGljZXMubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgdGhpcy5faW5kZXhCdWZmZXIgPSB0aGlzLl9lbmdpbmUuY3JlYXRl
SW5kZXhCdWZmZXIodGhpcy5faW5kaWNlcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X2luZGV4QnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9pbmRleEJ1ZmZlci5yZWZlcmVuY2Vz
ID0gbnVtT2ZNZXNoZXM7CisgICAgICAgIH0KKyAgICAgICAgLy8gbW9ycGhUYXJnZXRzCisgICAg
ICAgIG1lc2guX3N5bmNHZW9tZXRyeVdpdGhNb3JwaFRhcmdldE1hbmFnZXIoKTsKKyAgICAgICAg
Ly8gaW5zdGFuY2VzCisgICAgICAgIG1lc2guc3luY2hyb25pemVJbnN0YW5jZXMoKTsKKyAgICB9
OworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5ub3RpZnlVcGRhdGUgPSBmdW5jdGlvbiAoa2luZCkg
eworICAgICAgICBpZiAodGhpcy5vbkdlb21ldHJ5VXBkYXRlZCkgeworICAgICAgICAgICAgdGhp
cy5vbkdlb21ldHJ5VXBkYXRlZCh0aGlzLCBraW5kKTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KHZhciBfaSA9IDAsIF9hID0gdGhpcy5fbWVzaGVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewor
ICAgICAgICAgICAgdmFyIG1lc2ggPSBfYVtfaV07CisgICAgICAgICAgICBtZXNoLl9tYXJrU3Vi
TWVzaGVzQXNBdHRyaWJ1dGVzRGlydHkoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogTG9hZCB0aGUgZ2VvbWV0cnkgaWYgaXQgd2FzIGZsYWdnZWQgYXMgZGVsYXkgbG9hZGVk
CisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBA
cGFyYW0gb25Mb2FkZWQgZGVmaW5lcyBhIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBnZW9tZXRy
eSBpcyBsb2FkZWQKKyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUubG9hZCA9IGZ1bmN0
aW9uIChzY2VuZSwgb25Mb2FkZWQpIHsKKyAgICAgICAgaWYgKHRoaXMuZGVsYXlMb2FkU3RhdGUg
PT09IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25z
dGFudHMiXS5ERUxBWUxPQURTVEFURV9MT0FESU5HKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuaXNSZWFkeSgpKSB7CisgICAgICAgICAgICBpZiAo
b25Mb2FkZWQpIHsKKyAgICAgICAgICAgICAgICBvbkxvYWRlZCgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuZGVsYXlMb2FkU3Rh
dGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29u
c3RhbnRzIl0uREVMQVlMT0FEU1RBVEVfTE9BRElORzsKKyAgICAgICAgdGhpcy5fcXVldWVMb2Fk
KHNjZW5lLCBvbkxvYWRlZCk7CisgICAgfTsKKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuX3F1ZXVl
TG9hZCA9IGZ1bmN0aW9uIChzY2VuZSwgb25Mb2FkZWQpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgaWYgKCF0aGlzLmRlbGF5TG9hZGluZ0ZpbGUpIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzY2VuZS5fYWRkUGVuZGluZ0RhdGEodGhpcyk7
CisgICAgICAgIHNjZW5lLl9sb2FkRmlsZSh0aGlzLmRlbGF5TG9hZGluZ0ZpbGUsIGZ1bmN0aW9u
IChkYXRhKSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLl9kZWxheUxvYWRpbmdGdW5jdGlvbikg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90
aGlzLl9kZWxheUxvYWRpbmdGdW5jdGlvbihKU09OLnBhcnNlKGRhdGEpLCBfdGhpcyk7CisgICAg
ICAgICAgICBfdGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9MT0FERUQ7
CisgICAgICAgICAgICBfdGhpcy5fZGVsYXlJbmZvID0gW107CisgICAgICAgICAgICBzY2VuZS5f
cmVtb3ZlUGVuZGluZ0RhdGEoX3RoaXMpOworICAgICAgICAgICAgdmFyIG1lc2hlcyA9IF90aGlz
Ll9tZXNoZXM7CisgICAgICAgICAgICB2YXIgbnVtT2ZNZXNoZXMgPSBtZXNoZXMubGVuZ3RoOwor
ICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG51bU9mTWVzaGVzOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2FwcGx5VG9NZXNoKG1lc2hlc1tpbmRleF0p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9uTG9hZGVkKSB7CisgICAgICAgICAg
ICAgICAgb25Mb2FkZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgdW5kZWZpbmVkLCB0
cnVlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEludmVydCB0aGUgZ2VvbWV0cnkgdG8gbW92
ZSBmcm9tIGEgcmlnaHQgaGFuZGVkIHN5c3RlbSB0byBhIGxlZnQgaGFuZGVkIG9uZS4KKyAgICAg
Ki8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUudG9MZWZ0SGFuZGVkID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAvLyBGbGlwIGZhY2VzCisgICAgICAgIHZhciB0SW5kaWNlcyA9IHRoaXMuZ2V0SW5k
aWNlcyhmYWxzZSk7CisgICAgICAgIGlmICh0SW5kaWNlcyAhPSBudWxsICYmIHRJbmRpY2VzLmxl
bmd0aCA+IDApIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdEluZGljZXMubGVu
Z3RoOyBpICs9IDMpIHsKKyAgICAgICAgICAgICAgICB2YXIgdFRlbXAgPSB0SW5kaWNlc1tpICsg
MF07CisgICAgICAgICAgICAgICAgdEluZGljZXNbaSArIDBdID0gdEluZGljZXNbaSArIDJdOwor
ICAgICAgICAgICAgICAgIHRJbmRpY2VzW2kgKyAyXSA9IHRUZW1wOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5zZXRJbmRpY2VzKHRJbmRpY2VzKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBOZWdhdGUgcG9zaXRpb24uegorICAgICAgICB2YXIgdFBvc2l0aW9ucyA9IHRoaXMuZ2V0
VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgZmFsc2UpOworICAgICAgICBpZiAodFBvc2l0
aW9ucyAhPSBudWxsICYmIHRQb3NpdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0UG9zaXRpb25zLmxlbmd0aDsgaSArPSAzKSB7CisgICAgICAgICAg
ICAgICAgdFBvc2l0aW9uc1tpICsgMl0gPSAtdFBvc2l0aW9uc1tpICsgMl07CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHRQ
b3NpdGlvbnMsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBOZWdhdGUgbm9ybWFsLnoK
KyAgICAgICAgdmFyIHROb3JtYWxzID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2lu
ZCwgZmFsc2UpOworICAgICAgICBpZiAodE5vcm1hbHMgIT0gbnVsbCAmJiB0Tm9ybWFscy5sZW5n
dGggPiAwKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHROb3JtYWxzLmxlbmd0
aDsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgdE5vcm1hbHNbaSArIDJdID0gLXROb3JtYWxz
W2kgKyAyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc2V0VmVydGljZXNEYXRh
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZl
ciJdLk5vcm1hbEtpbmQsIHROb3JtYWxzLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8vIENhY2hlCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuX3Jl
c2V0UG9pbnRzQXJyYXlDYWNoZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fcG9zaXRp
b25zID0gbnVsbDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgR2VvbWV0cnkucHJv
dG90eXBlLl9nZW5lcmF0ZVBvaW50c0FycmF5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5fcG9zaXRpb25zKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7
CisgICAgICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Bvc2l0aW9ucyA9IFtdOwor
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4ICs9
IDMpIHsKKyAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9ucy5wdXNoKF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KGRhdGEs
IGluZGV4KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgZ2VvbWV0cnkgaXMgZGlz
cG9zZWQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBnZW9tZXRyeSB3YXMgZGlzcG9zZWQK
KyAgICAgKi8KKyAgICBHZW9tZXRyeS5wcm90b3R5cGUuaXNEaXNwb3NlZCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ7CisgICAgfTsKKyAgICBHZW9tZXRy
eS5wcm90b3R5cGUuX2Rpc3Bvc2VWZXJ0ZXhBcnJheU9iamVjdHMgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGlmICh0aGlzLl92ZXJ0ZXhBcnJheU9iamVjdHMpIHsKKyAgICAgICAgICAgIGZvciAo
dmFyIGtpbmQgaW4gdGhpcy5fdmVydGV4QXJyYXlPYmplY3RzKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fZW5naW5lLnJlbGVhc2VWZXJ0ZXhBcnJheU9iamVjdCh0aGlzLl92ZXJ0ZXhBcnJheU9i
amVjdHNba2luZF0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fdmVydGV4QXJy
YXlPYmplY3RzID0ge307CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEZyZWUg
YWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgICAgICovCisgICAgR2VvbWV0cnkucHJvdG90eXBl
LmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBtZXNoZXMgPSB0aGlzLl9tZXNo
ZXM7CisgICAgICAgIHZhciBudW1PZk1lc2hlcyA9IG1lc2hlcy5sZW5ndGg7CisgICAgICAgIHZh
ciBpbmRleDsKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtT2ZNZXNoZXM7IGlu
ZGV4KyspIHsKKyAgICAgICAgICAgIHRoaXMucmVsZWFzZUZvck1lc2gobWVzaGVzW2luZGV4XSk7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbWVzaGVzID0gW107CisgICAgICAgIHRoaXMuX2Rp
c3Bvc2VWZXJ0ZXhBcnJheU9iamVjdHMoKTsKKyAgICAgICAgZm9yICh2YXIga2luZCBpbiB0aGlz
Ll92ZXJ0ZXhCdWZmZXJzKSB7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzW2tpbmRd
LmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzID0ge307
CisgICAgICAgIHRoaXMuX3RvdGFsVmVydGljZXMgPSAwOworICAgICAgICBpZiAodGhpcy5faW5k
ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5fcmVsZWFzZUJ1ZmZlcih0aGlz
Ll9pbmRleEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5faW5kZXhCdWZmZXIgPSBu
dWxsOworICAgICAgICB0aGlzLl9pbmRpY2VzID0gW107CisgICAgICAgIHRoaXMuZGVsYXlMb2Fk
U3RhdGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
Q29uc3RhbnRzIl0uREVMQVlMT0FEU1RBVEVfTk9ORTsKKyAgICAgICAgdGhpcy5kZWxheUxvYWRp
bmdGaWxlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZGVsYXlMb2FkaW5nRnVuY3Rpb24gPSBudWxs
OworICAgICAgICB0aGlzLl9kZWxheUluZm8gPSBbXTsKKyAgICAgICAgdGhpcy5fYm91bmRpbmdJ
bmZvID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2NlbmUucmVtb3ZlR2VvbWV0cnkodGhpcyk7Cisg
ICAgICAgIHRoaXMuX2lzRGlzcG9zZWQgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICog
Q2xvbmUgdGhlIGN1cnJlbnQgZ2VvbWV0cnkgaW50byBhIG5ldyBnZW9tZXRyeQorICAgICAqIEBw
YXJhbSBpZCBkZWZpbmVzIHRoZSB1bmlxdWUgSUQgb2YgdGhlIG5ldyBnZW9tZXRyeQorICAgICAq
IEByZXR1cm5zIGEgbmV3IGdlb21ldHJ5IG9iamVjdAorICAgICAqLworICAgIEdlb21ldHJ5LnBy
b3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIHZhciB2ZXJ0ZXhEYXRhID0g
bmV3IF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlcnRleERhdGEiXSgpOworICAgICAgICB2ZXJ0ZXhEYXRhLmluZGljZXMgPSBbXTsKKyAgICAg
ICAgdmFyIGluZGljZXMgPSB0aGlzLmdldEluZGljZXMoKTsKKyAgICAgICAgaWYgKGluZGljZXMp
IHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBpbmRpY2VzLmxlbmd0
aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZlcnRleERhdGEuaW5kaWNlcy5wdXNoKGlu
ZGljZXNbaW5kZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgdXBk
YXRhYmxlID0gZmFsc2U7CisgICAgICAgIHZhciBzdG9wQ2hlY2tpbmcgPSBmYWxzZTsKKyAgICAg
ICAgdmFyIGtpbmQ7CisgICAgICAgIGZvciAoa2luZCBpbiB0aGlzLl92ZXJ0ZXhCdWZmZXJzKSB7
CisgICAgICAgICAgICAvLyB1c2luZyBzbGljZSgpIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBhcnJh
eSBhbmQgbm90IGp1c3QgcmVmZXJlbmNlIGl0CisgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMu
Z2V0VmVydGljZXNEYXRhKGtpbmQpOworICAgICAgICAgICAgaWYgKGRhdGEpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkgeworICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhEYXRhLnNldChuZXcgRmxvYXQzMkFycmF5KGRhdGEpLCBraW5kKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHZlcnRleERhdGEuc2V0KGRhdGEuc2xpY2UoMCksIGtpbmQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoIXN0b3BDaGVja2luZykgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgdmIgPSB0aGlzLmdldFZlcnRleEJ1ZmZlcihraW5kKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGFibGUgPSB2Yi5p
c1VwZGF0YWJsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcENoZWNraW5nID0gIXVw
ZGF0YWJsZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnko
aWQsIHRoaXMuX3NjZW5lLCB2ZXJ0ZXhEYXRhLCB1cGRhdGFibGUpOworICAgICAgICBnZW9tZXRy
eS5kZWxheUxvYWRTdGF0ZSA9IHRoaXMuZGVsYXlMb2FkU3RhdGU7CisgICAgICAgIGdlb21ldHJ5
LmRlbGF5TG9hZGluZ0ZpbGUgPSB0aGlzLmRlbGF5TG9hZGluZ0ZpbGU7CisgICAgICAgIGdlb21l
dHJ5Ll9kZWxheUxvYWRpbmdGdW5jdGlvbiA9IHRoaXMuX2RlbGF5TG9hZGluZ0Z1bmN0aW9uOwor
ICAgICAgICBmb3IgKGtpbmQgaW4gdGhpcy5fZGVsYXlJbmZvKSB7CisgICAgICAgICAgICBnZW9t
ZXRyeS5fZGVsYXlJbmZvID0gZ2VvbWV0cnkuX2RlbGF5SW5mbyB8fCBbXTsKKyAgICAgICAgICAg
IGdlb21ldHJ5Ll9kZWxheUluZm8ucHVzaChraW5kKTsKKyAgICAgICAgfQorICAgICAgICAvLyBC
b3VuZGluZyBpbmZvCisgICAgICAgIGdlb21ldHJ5Ll9ib3VuZGluZ0luZm8gPSBuZXcgX0N1bGxp
bmdfYm91bmRpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkJvdW5kaW5nSW5m
byJdKHRoaXMuX2V4dGVuZC5taW5pbXVtLCB0aGlzLl9leHRlbmQubWF4aW11bSk7CisgICAgICAg
IHJldHVybiBnZW9tZXRyeTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUg
Y3VycmVudCBnZW9tZXRyeSBpbmZvIChhbmQgbm90IHRoZSB2ZXJ0aWNlcyBkYXRhKSBpbnRvIGEg
SlNPTiBvYmplY3QKKyAgICAgKiBAcmV0dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUg
Y3VycmVudCBnZW9tZXRyeSBkYXRhICh3aXRob3V0IHRoZSB2ZXJ0aWNlcyBkYXRhKQorICAgICAq
LworICAgIEdlb21ldHJ5LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QuaWQgPSB0aGlzLmlkOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnVwZGF0YWJs
ZSA9IHRoaXMuX3VwZGF0YWJsZTsKKyAgICAgICAgaWYgKF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siVGFncyJdICYmIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfX1siVGFncyJdLkhhc1RhZ3ModGhpcykpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QudGFncyA9IF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siVGFncyJdLkdldFRhZ3ModGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlcmlh
bGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICBHZW9tZXRyeS5wcm90b3R5cGUudG9OdW1iZXJB
cnJheSA9IGZ1bmN0aW9uIChvcmlnaW4pIHsKKyAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3Jp
Z2luKSkgeworICAgICAgICAgICAgcmV0dXJuIG9yaWdpbjsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvcmln
aW4pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgYWxsIHZl
cnRpY2VzIGRhdGEgaW50byBhIEpTT04gb2plY3QKKyAgICAgKiBAcmV0dXJucyBhIEpTT04gcmVw
cmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgZ2VvbWV0cnkgZGF0YQorICAgICAqLworICAgIEdl
b21ldHJ5LnByb3RvdHlwZS5zZXJpYWxpemVWZXJ0aWNlRGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB0aGlzLnNlcmlhbGl6ZSgpOworICAgICAg
ICBpZiAodGhpcy5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSkgeworICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5wb3NpdGlvbnMgPSB0aGlzLnRvTnVtYmVyQXJy
YXkodGhpcy5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSk7CisgICAgICAgICAgICBp
ZiAodGhpcy5pc1ZlcnRleEJ1ZmZlclVwZGF0YWJsZShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpKSB7CisgICAg
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5wb3NpdGlvbnMuX3VwZGF0YWJsZSA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNl
c0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQpKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9u
T2JqZWN0Lm5vcm1hbHMgPSB0aGlzLnRvTnVtYmVyQXJyYXkodGhpcy5nZXRWZXJ0aWNlc0RhdGEo
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVy
Il0uTm9ybWFsS2luZCkpOworICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0ZXhCdWZmZXJVcGRh
dGFibGUoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
QnVmZmVyIl0uTm9ybWFsS2luZCkpIHsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0Lm5vcm1hbHMuX3VwZGF0YWJsZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlRhbmdlbnRLaW5kKSkg
eworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50YW5nZXRzID0gdGhpcy50b051bWJl
ckFycmF5KHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlRhbmdlbnRLaW5kKSk7CisgICAgICAgICAg
ICBpZiAodGhpcy5pc1ZlcnRleEJ1ZmZlclVwZGF0YWJsZShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5UYW5nZW50S2luZCkpIHsKKyAg
ICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRhbmdldHMuX3VwZGF0YWJsZSA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNl
c0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLlVWS2luZCkpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QudXZzID0gdGhpcy50b051bWJlckFycmF5KHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWS2lu
ZCkpOworICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0ZXhCdWZmZXJVcGRhdGFibGUoX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVVZL
aW5kKSkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudXZzLl91cGRhdGFi
bGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmlz
VmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjJLaW5kKSkgeworICAgICAgICAgICAgc2VyaWFsaXph
dGlvbk9iamVjdC51djJzID0gdGhpcy50b051bWJlckFycmF5KHRoaXMuZ2V0VmVydGljZXNEYXRh
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZl
ciJdLlVWMktpbmQpKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzVmVydGV4QnVmZmVyVXBkYXRh
YmxlKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1
ZmZlciJdLlVWMktpbmQpKSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51
djJzLl91cGRhdGFibGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjNLaW5kKSkgeworICAgICAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC51djNzID0gdGhpcy50b051bWJlckFycmF5KHRoaXMuZ2V0
VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLlVWM0tpbmQpKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzVmVydGV4
QnVmZmVyVXBkYXRhYmxlKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlZlcnRleEJ1ZmZlciJdLlVWM0tpbmQpKSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXph
dGlvbk9iamVjdC51djNzLl91cGRhdGFibGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjRLaW5kKSkg
eworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51djRzID0gdGhpcy50b051bWJlckFy
cmF5KHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWNEtpbmQpKTsKKyAgICAgICAgICAgIGlmICh0
aGlzLmlzVmVydGV4QnVmZmVyVXBkYXRhYmxlKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWNEtpbmQpKSB7CisgICAgICAgICAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC51djRzLl91cGRhdGFibGUgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmlzVmVydGljZXNEYXRhUHJlc2VudChf
TWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIi
XS5VVjVLaW5kKSkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51djVzID0gdGhp
cy50b051bWJlckFycmF5KHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWNUtpbmQpKTsKKyAgICAg
ICAgICAgIGlmICh0aGlzLmlzVmVydGV4QnVmZmVyVXBkYXRhYmxlKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWNUtpbmQpKSB7Cisg
ICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51djVzLl91cGRhdGFibGUgPSB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmlzVmVydGljZXNE
YXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZXJ0ZXhCdWZmZXIiXS5VVjZLaW5kKSkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC51djZzID0gdGhpcy50b051bWJlckFycmF5KHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWNktp
bmQpKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzVmVydGV4QnVmZmVyVXBkYXRhYmxlKF9NZXNo
ZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVW
NktpbmQpKSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51djZzLl91cGRh
dGFibGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
LmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQpKSB7CisgICAgICAgICAgICBzZXJp
YWxpemF0aW9uT2JqZWN0LmNvbG9ycyA9IHRoaXMudG9OdW1iZXJBcnJheSh0aGlzLmdldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0
ZXhCdWZmZXIiXS5Db2xvcktpbmQpKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzVmVydGV4QnVm
ZmVyVXBkYXRhYmxlKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCkpIHsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0
aW9uT2JqZWN0LmNvbG9ycy5fdXBkYXRhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJ
bmRpY2VzS2luZCkpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF0cmljZXNJ
bmRpY2VzID0gdGhpcy50b051bWJlckFycmF5KHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJp
Y2VzSW5kaWNlc0tpbmQpKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF0cmlj
ZXNJbmRpY2VzLl9pc0V4cGFuZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLmlzVmVy
dGV4QnVmZmVyVXBkYXRhYmxlKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0tpbmQpKSB7CisgICAgICAgICAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXRyaWNlc0luZGljZXMuX3VwZGF0YWJsZSA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNl
c0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpKSB7CisgICAgICAgICAgICBzZXJp
YWxpemF0aW9uT2JqZWN0Lm1hdHJpY2VzV2VpZ2h0cyA9IHRoaXMudG9OdW1iZXJBcnJheSh0aGlz
LmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKSk7CisgICAgICAgICAgICBp
ZiAodGhpcy5pc1ZlcnRleEJ1ZmZlclVwZGF0YWJsZShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKSkg
eworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF0cmljZXNXZWlnaHRzLl91
cGRhdGFibGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3QuaW5kaWNlcyA9IHRoaXMudG9OdW1iZXJBcnJheSh0aGlzLmdldEluZGlj
ZXMoKSk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAg
Ly8gU3RhdGljcworICAgIC8qKgorICAgICAqIEV4dHJhY3RzIGEgY2xvbmUgb2YgYSBtZXNoIGdl
b21ldHJ5CisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5lcyB0aGUgc291cmNlIG1lc2gKKyAgICAg
KiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgdW5pcXVlIElEIG9mIHRoZSBuZXcgZ2VvbWV0cnkgb2Jq
ZWN0CisgICAgICogQHJldHVybnMgdGhlIG5ldyBnZW9tZXRyeSBvYmplY3QKKyAgICAgKi8KKyAg
ICBHZW9tZXRyeS5FeHRyYWN0RnJvbU1lc2ggPSBmdW5jdGlvbiAobWVzaCwgaWQpIHsKKyAgICAg
ICAgdmFyIGdlb21ldHJ5ID0gbWVzaC5fZ2VvbWV0cnk7CisgICAgICAgIGlmICghZ2VvbWV0cnkp
IHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBn
ZW9tZXRyeS5jb3B5KGlkKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFlvdSBzaG91bGQgbm93
IHVzZSBUb29scy5SYW5kb21JZCgpLCB0aGlzIG1ldGhvZCBpcyBzdGlsbCBoZXJlIGZvciBsZWdh
Y3kgcmVhc29ucy4KKyAgICAgKiBJbXBsZW1lbnRhdGlvbiBmcm9tIGh0dHA6Ly9zdGFja292ZXJm
bG93LmNvbS9xdWVzdGlvbnMvMTA1MDM0L2hvdy10by1jcmVhdGUtYS1ndWlkLXV1aWQtaW4tamF2
YXNjcmlwdC8yMTE3NTIzI2Fuc3dlci0yMTE3NTIzCisgICAgICogQmUgYXdhcmUgTWF0aC5yYW5k
b20oKSBjb3VsZCBjYXVzZSBjb2xsaXNpb25zLCBidXQ6CisgICAgICogIkFsbCBidXQgNiBvZiB0
aGUgMTI4IGJpdHMgb2YgdGhlIElEIGFyZSByYW5kb21seSBnZW5lcmF0ZWQsIHdoaWNoIG1lYW5z
IHRoYXQgZm9yIGFueSB0d28gaWRzLCB0aGVyZSdzIGEgMSBpbiAyXl4xMjIgKG9yIDUuM3gxMF5e
MzYpIGNoYW5jZSB0aGV5J2xsIGNvbGxpZGUiCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29u
dGFpbmluZyBhIG5ldyBHVUlECisgICAgICovCisgICAgR2VvbWV0cnkuUmFuZG9tSWQgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOF9fWyJUb29scyJdLlJhbmRvbUlkKCk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIEdlb21ldHJ5Ll9JbXBvcnRHZW9tZXRyeSA9IGZ1bmN0aW9uIChwYXJzZWRHZW9tZXRy
eSwgbWVzaCkgeworICAgICAgICB2YXIgc2NlbmUgPSBtZXNoLmdldFNjZW5lKCk7CisgICAgICAg
IC8vIEdlb21ldHJ5CisgICAgICAgIHZhciBnZW9tZXRyeUlkID0gcGFyc2VkR2VvbWV0cnkuZ2Vv
bWV0cnlJZDsKKyAgICAgICAgaWYgKGdlb21ldHJ5SWQpIHsKKyAgICAgICAgICAgIHZhciBnZW9t
ZXRyeSA9IHNjZW5lLmdldEdlb21ldHJ5QnlJRChnZW9tZXRyeUlkKTsKKyAgICAgICAgICAgIGlm
IChnZW9tZXRyeSkgeworICAgICAgICAgICAgICAgIGdlb21ldHJ5LmFwcGx5VG9NZXNoKG1lc2gp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZEdlb21l
dHJ5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgICAgIHZhciBiaW5hcnlJbmZv
ID0gbWVzaC5fYmluYXJ5SW5mbzsKKyAgICAgICAgICAgIGlmIChiaW5hcnlJbmZvLnBvc2l0aW9u
c0F0dHJEZXNjICYmIGJpbmFyeUluZm8ucG9zaXRpb25zQXR0ckRlc2MuY291bnQgPiAwKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uc0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KHBhcnNl
ZEdlb21ldHJ5LCBiaW5hcnlJbmZvLnBvc2l0aW9uc0F0dHJEZXNjLm9mZnNldCwgYmluYXJ5SW5m
by5wb3NpdGlvbnNBdHRyRGVzYy5jb3VudCk7CisgICAgICAgICAgICAgICAgbWVzaC5zZXRWZXJ0
aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVy
dGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kLCBwb3NpdGlvbnNEYXRhLCBmYWxzZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoYmluYXJ5SW5mby5ub3JtYWxzQXR0ckRlc2MgJiYgYmlu
YXJ5SW5mby5ub3JtYWxzQXR0ckRlc2MuY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgdmFy
IG5vcm1hbHNEYXRhID0gbmV3IEZsb2F0MzJBcnJheShwYXJzZWRHZW9tZXRyeSwgYmluYXJ5SW5m
by5ub3JtYWxzQXR0ckRlc2Mub2Zmc2V0LCBiaW5hcnlJbmZvLm5vcm1hbHNBdHRyRGVzYy5jb3Vu
dCk7CisgICAgICAgICAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCwg
bm9ybWFsc0RhdGEsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiaW5h
cnlJbmZvLnRhbmdldHNBdHRyRGVzYyAmJiBiaW5hcnlJbmZvLnRhbmdldHNBdHRyRGVzYy5jb3Vu
dCA+IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgdGFuZ2VudHNEYXRhID0gbmV3IEZsb2F0MzJB
cnJheShwYXJzZWRHZW9tZXRyeSwgYmluYXJ5SW5mby50YW5nZXRzQXR0ckRlc2Mub2Zmc2V0LCBi
aW5hcnlJbmZvLnRhbmdldHNBdHRyRGVzYy5jb3VudCk7CisgICAgICAgICAgICAgICAgbWVzaC5z
ZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVydGV4QnVmZmVyIl0uVGFuZ2VudEtpbmQsIHRhbmdlbnRzRGF0YSwgZmFsc2UpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJpbmFyeUluZm8udXZzQXR0ckRlc2MgJiYgYmlu
YXJ5SW5mby51dnNBdHRyRGVzYy5jb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgdXZz
RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkocGFyc2VkR2VvbWV0cnksIGJpbmFyeUluZm8udXZzQXR0
ckRlc2Mub2Zmc2V0LCBiaW5hcnlJbmZvLnV2c0F0dHJEZXNjLmNvdW50KTsKKyAgICAgICAgICAg
ICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQsIHV2c0RhdGEsIGZhbHNlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiaW5hcnlJbmZvLnV2czJBdHRyRGVzYyAmJiBi
aW5hcnlJbmZvLnV2czJBdHRyRGVzYy5jb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICB2YXIg
dXZzMkRhdGEgPSBuZXcgRmxvYXQzMkFycmF5KHBhcnNlZEdlb21ldHJ5LCBiaW5hcnlJbmZvLnV2
czJBdHRyRGVzYy5vZmZzZXQsIGJpbmFyeUluZm8udXZzMkF0dHJEZXNjLmNvdW50KTsKKyAgICAg
ICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjJLaW5kLCB1dnMyRGF0YSwgZmFs
c2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJpbmFyeUluZm8udXZzM0F0dHJE
ZXNjICYmIGJpbmFyeUluZm8udXZzM0F0dHJEZXNjLmNvdW50ID4gMCkgeworICAgICAgICAgICAg
ICAgIHZhciB1dnMzRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkocGFyc2VkR2VvbWV0cnksIGJpbmFy
eUluZm8udXZzM0F0dHJEZXNjLm9mZnNldCwgYmluYXJ5SW5mby51dnMzQXR0ckRlc2MuY291bnQp
OworICAgICAgICAgICAgICAgIG1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWM0tpbmQsIHV2czNE
YXRhLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYmluYXJ5SW5mby51
dnM0QXR0ckRlc2MgJiYgYmluYXJ5SW5mby51dnM0QXR0ckRlc2MuY291bnQgPiAwKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHV2czREYXRhID0gbmV3IEZsb2F0MzJBcnJheShwYXJzZWRHZW9tZXRy
eSwgYmluYXJ5SW5mby51dnM0QXR0ckRlc2Mub2Zmc2V0LCBiaW5hcnlJbmZvLnV2czRBdHRyRGVz
Yy5jb3VudCk7CisgICAgICAgICAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVVY0S2lu
ZCwgdXZzNERhdGEsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiaW5h
cnlJbmZvLnV2czVBdHRyRGVzYyAmJiBiaW5hcnlJbmZvLnV2czVBdHRyRGVzYy5jb3VudCA+IDAp
IHsKKyAgICAgICAgICAgICAgICB2YXIgdXZzNURhdGEgPSBuZXcgRmxvYXQzMkFycmF5KHBhcnNl
ZEdlb21ldHJ5LCBiaW5hcnlJbmZvLnV2czVBdHRyRGVzYy5vZmZzZXQsIGJpbmFyeUluZm8udXZz
NUF0dHJEZXNjLmNvdW50KTsKKyAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShf
TWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIi
XS5VVjVLaW5kLCB1dnM1RGF0YSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGJpbmFyeUluZm8udXZzNkF0dHJEZXNjICYmIGJpbmFyeUluZm8udXZzNkF0dHJEZXNjLmNv
dW50ID4gMCkgeworICAgICAgICAgICAgICAgIHZhciB1dnM2RGF0YSA9IG5ldyBGbG9hdDMyQXJy
YXkocGFyc2VkR2VvbWV0cnksIGJpbmFyeUluZm8udXZzNkF0dHJEZXNjLm9mZnNldCwgYmluYXJ5
SW5mby51dnM2QXR0ckRlc2MuY291bnQpOworICAgICAgICAgICAgICAgIG1lc2guc2V0VmVydGlj
ZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eEJ1ZmZlciJdLlVWNktpbmQsIHV2czZEYXRhLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoYmluYXJ5SW5mby5jb2xvcnNBdHRyRGVzYyAmJiBiaW5hcnlJbmZvLmNvbG9y
c0F0dHJEZXNjLmNvdW50ID4gMCkgeworICAgICAgICAgICAgICAgIHZhciBjb2xvcnNEYXRhID0g
bmV3IEZsb2F0MzJBcnJheShwYXJzZWRHZW9tZXRyeSwgYmluYXJ5SW5mby5jb2xvcnNBdHRyRGVz
Yy5vZmZzZXQsIGJpbmFyeUluZm8uY29sb3JzQXR0ckRlc2MuY291bnQpOworICAgICAgICAgICAg
ICAgIG1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCwgY29sb3JzRGF0YSwgZmFsc2Us
IGJpbmFyeUluZm8uY29sb3JzQXR0ckRlc2Muc3RyaWRlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChiaW5hcnlJbmZvLm1hdHJpY2VzSW5kaWNlc0F0dHJEZXNjICYmIGJpbmFyeUlu
Zm8ubWF0cmljZXNJbmRpY2VzQXR0ckRlc2MuY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAg
dmFyIG1hdHJpY2VzSW5kaWNlc0RhdGEgPSBuZXcgSW50MzJBcnJheShwYXJzZWRHZW9tZXRyeSwg
YmluYXJ5SW5mby5tYXRyaWNlc0luZGljZXNBdHRyRGVzYy5vZmZzZXQsIGJpbmFyeUluZm8ubWF0
cmljZXNJbmRpY2VzQXR0ckRlc2MuY291bnQpOworICAgICAgICAgICAgICAgIHZhciBmbG9hdElu
ZGljZXMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdHJpY2Vz
SW5kaWNlc0RhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4
ID0gbWF0cmljZXNJbmRpY2VzRGF0YVtpXTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXRJbmRp
Y2VzLnB1c2goaW5kZXggJiAweDAwMDAwMEZGKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXRJ
bmRpY2VzLnB1c2goKGluZGV4ICYgMHgwMDAwRkYwMCkgPj4gOCk7CisgICAgICAgICAgICAgICAg
ICAgIGZsb2F0SW5kaWNlcy5wdXNoKChpbmRleCAmIDB4MDBGRjAwMDApID4+IDE2KTsKKyAgICAg
ICAgICAgICAgICAgICAgZmxvYXRJbmRpY2VzLnB1c2goaW5kZXggPj4gMjQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNl
c0luZGljZXNLaW5kLCBmbG9hdEluZGljZXMsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChiaW5hcnlJbmZvLm1hdHJpY2VzV2VpZ2h0c0F0dHJEZXNjICYmIGJpbmFyeUlu
Zm8ubWF0cmljZXNXZWlnaHRzQXR0ckRlc2MuY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAg
dmFyIG1hdHJpY2VzV2VpZ2h0c0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KHBhcnNlZEdlb21ldHJ5
LCBiaW5hcnlJbmZvLm1hdHJpY2VzV2VpZ2h0c0F0dHJEZXNjLm9mZnNldCwgYmluYXJ5SW5mby5t
YXRyaWNlc1dlaWdodHNBdHRyRGVzYy5jb3VudCk7CisgICAgICAgICAgICAgICAgbWVzaC5zZXRW
ZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCwgbWF0cmljZXNXZWlnaHRzRGF0YSwg
ZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJpbmFyeUluZm8uaW5kaWNl
c0F0dHJEZXNjICYmIGJpbmFyeUluZm8uaW5kaWNlc0F0dHJEZXNjLmNvdW50ID4gMCkgeworICAg
ICAgICAgICAgICAgIHZhciBpbmRpY2VzRGF0YSA9IG5ldyBJbnQzMkFycmF5KHBhcnNlZEdlb21l
dHJ5LCBiaW5hcnlJbmZvLmluZGljZXNBdHRyRGVzYy5vZmZzZXQsIGJpbmFyeUluZm8uaW5kaWNl
c0F0dHJEZXNjLmNvdW50KTsKKyAgICAgICAgICAgICAgICBtZXNoLnNldEluZGljZXMoaW5kaWNl
c0RhdGEsIG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJpbmFyeUluZm8u
c3ViTWVzaGVzQXR0ckRlc2MgJiYgYmluYXJ5SW5mby5zdWJNZXNoZXNBdHRyRGVzYy5jb3VudCA+
IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgc3ViTWVzaGVzRGF0YSA9IG5ldyBJbnQzMkFycmF5
KHBhcnNlZEdlb21ldHJ5LCBiaW5hcnlJbmZvLnN1Yk1lc2hlc0F0dHJEZXNjLm9mZnNldCwgYmlu
YXJ5SW5mby5zdWJNZXNoZXNBdHRyRGVzYy5jb3VudCAqIDUpOworICAgICAgICAgICAgICAgIG1l
c2guc3ViTWVzaGVzID0gW107CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBi
aW5hcnlJbmZvLnN1Yk1lc2hlc0F0dHJEZXNjLmNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIG1hdGVyaWFsSW5kZXggPSBzdWJNZXNoZXNEYXRhWyhpICogNSkgKyAwXTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzU3RhcnQgPSBzdWJNZXNoZXNEYXRhWyhpICog
NSkgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzQ291bnQgPSBzdWJNZXNo
ZXNEYXRhWyhpICogNSkgKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4U3RhcnQg
PSBzdWJNZXNoZXNEYXRhWyhpICogNSkgKyAzXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGlu
ZGV4Q291bnQgPSBzdWJNZXNoZXNEYXRhWyhpICogNSkgKyA0XTsKKyAgICAgICAgICAgICAgICAg
ICAgX01lc2hlc19zdWJNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlN1Yk1lc2gi
XS5BZGRUb01lc2gobWF0ZXJpYWxJbmRleCwgdmVydGljZXNTdGFydCwgdmVydGljZXNDb3VudCwg
aW5kZXhTdGFydCwgaW5kZXhDb3VudCwgbWVzaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZEdlb21ldHJ5LnBvc2l0
aW9ucyAmJiBwYXJzZWRHZW9tZXRyeS5ub3JtYWxzICYmIHBhcnNlZEdlb21ldHJ5LmluZGljZXMp
IHsKKyAgICAgICAgICAgIG1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgcGFy
c2VkR2VvbWV0cnkucG9zaXRpb25zLCBwYXJzZWRHZW9tZXRyeS5wb3NpdGlvbnMuX3VwZGF0YWJs
ZSk7CisgICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBwYXJz
ZWRHZW9tZXRyeS5ub3JtYWxzLCBwYXJzZWRHZW9tZXRyeS5ub3JtYWxzLl91cGRhdGFibGUpOwor
ICAgICAgICAgICAgaWYgKHBhcnNlZEdlb21ldHJ5LnRhbmdlbnRzKSB7CisgICAgICAgICAgICAg
ICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVGFuZ2VudEtpbmQsIHBhcnNlZEdlb21ldHJ5LnRh
bmdlbnRzLCBwYXJzZWRHZW9tZXRyeS50YW5nZW50cy5fdXBkYXRhYmxlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRHZW9tZXRyeS51dnMpIHsKKyAgICAgICAgICAgICAg
ICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQsIHBhcnNlZEdlb21ldHJ5LnV2cywgcGFy
c2VkR2VvbWV0cnkudXZzLl91cGRhdGFibGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHBhcnNlZEdlb21ldHJ5LnV2czIpIHsKKyAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0
ZXhCdWZmZXIiXS5VVjJLaW5kLCBwYXJzZWRHZW9tZXRyeS51dnMyLCBwYXJzZWRHZW9tZXRyeS51
dnMyLl91cGRhdGFibGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZEdl
b21ldHJ5LnV2czMpIHsKKyAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5V
VjNLaW5kLCBwYXJzZWRHZW9tZXRyeS51dnMzLCBwYXJzZWRHZW9tZXRyeS51dnMzLl91cGRhdGFi
bGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZEdlb21ldHJ5LnV2czQp
IHsKKyAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjRLaW5kLCBwYXJz
ZWRHZW9tZXRyeS51dnM0LCBwYXJzZWRHZW9tZXRyeS51dnM0Ll91cGRhdGFibGUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZEdlb21ldHJ5LnV2czUpIHsKKyAgICAgICAg
ICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjVLaW5kLCBwYXJzZWRHZW9tZXRyeS51
dnM1LCBwYXJzZWRHZW9tZXRyeS51dnM1Ll91cGRhdGFibGUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHBhcnNlZEdlb21ldHJ5LnV2czYpIHsKKyAgICAgICAgICAgICAgICBtZXNo
LnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjZLaW5kLCBwYXJzZWRHZW9tZXRyeS51dnM2LCBwYXJzZWRH
ZW9tZXRyeS51dnM2Ll91cGRhdGFibGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHBhcnNlZEdlb21ldHJ5LmNvbG9ycykgeworICAgICAgICAgICAgICAgIG1lc2guc2V0VmVydGlj
ZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eEJ1ZmZlciJdLkNvbG9yS2luZCwgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siQ29sb3I0Il0uQ2hlY2tDb2xvcnM0KHBhcnNlZEdlb21ldHJ5LmNvbG9ycywg
cGFyc2VkR2VvbWV0cnkucG9zaXRpb25zLmxlbmd0aCAvIDMpLCBwYXJzZWRHZW9tZXRyeS5jb2xv
cnMuX3VwZGF0YWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFyc2VkR2Vv
bWV0cnkubWF0cmljZXNJbmRpY2VzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRHZW9t
ZXRyeS5tYXRyaWNlc0luZGljZXMuX2lzRXhwYW5kZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGZsb2F0SW5kaWNlcyA9IFtdOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHBhcnNlZEdlb21ldHJ5Lm1hdHJpY2VzSW5kaWNlcy5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpY2VzSW5kZXggPSBwYXJzZWRHZW9tZXRyeS5t
YXRyaWNlc0luZGljZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdEluZGljZXMu
cHVzaChtYXRyaWNlc0luZGV4ICYgMHgwMDAwMDBGRik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdEluZGljZXMucHVzaCgobWF0cmljZXNJbmRleCAmIDB4MDAwMEZGMDApID4+IDgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRJbmRpY2VzLnB1c2goKG1hdHJpY2VzSW5kZXgg
JiAweDAwRkYwMDAwKSA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdEluZGlj
ZXMucHVzaChtYXRyaWNlc0luZGV4ID4+IDI0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNL
aW5kLCBmbG9hdEluZGljZXMsIHBhcnNlZEdlb21ldHJ5Lm1hdHJpY2VzSW5kaWNlcy5fdXBkYXRh
YmxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBwYXJzZWRHZW9tZXRyeS5tYXRyaWNlc0luZGljZXMuX2lzRXhw
YW5kZWQ7CisgICAgICAgICAgICAgICAgICAgIG1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJp
Y2VzSW5kaWNlc0tpbmQsIHBhcnNlZEdlb21ldHJ5Lm1hdHJpY2VzSW5kaWNlcywgcGFyc2VkR2Vv
bWV0cnkubWF0cmljZXNJbmRpY2VzLl91cGRhdGFibGUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRHZW9tZXRyeS5tYXRyaWNlc0luZGlj
ZXNFeHRyYSkgeworICAgICAgICAgICAgICAgIGlmICghcGFyc2VkR2VvbWV0cnkubWF0cmljZXNJ
bmRpY2VzRXh0cmEuX2lzRXhwYW5kZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZsb2F0
SW5kaWNlcyA9IFtdOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBh
cnNlZEdlb21ldHJ5Lm1hdHJpY2VzSW5kaWNlc0V4dHJhLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgbWF0cmljZXNJbmRleCA9IHBhcnNlZEdlb21ldHJ5Lm1hdHJp
Y2VzSW5kaWNlc0V4dHJhW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRJbmRpY2Vz
LnB1c2gobWF0cmljZXNJbmRleCAmIDB4MDAwMDAwRkYpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXRJbmRpY2VzLnB1c2goKG1hdHJpY2VzSW5kZXggJiAweDAwMDBGRjAwKSA+PiA4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0SW5kaWNlcy5wdXNoKChtYXRyaWNlc0luZGV4
ICYgMHgwMEZGMDAwMCkgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRJbmRp
Y2VzLnB1c2gobWF0cmljZXNJbmRleCA+PiAyNCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2Vz
RXh0cmFLaW5kLCBmbG9hdEluZGljZXMsIHBhcnNlZEdlb21ldHJ5Lm1hdHJpY2VzSW5kaWNlc0V4
dHJhLl91cGRhdGFibGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnNlZEdlb21ldHJ5Lm1hdHJpY2VzSW5k
aWNlcy5faXNFeHBhbmRlZDsKKyAgICAgICAgICAgICAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0Rh
dGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVm
ZmVyIl0uTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kLCBwYXJzZWRHZW9tZXRyeS5tYXRyaWNlc0lu
ZGljZXNFeHRyYSwgcGFyc2VkR2VvbWV0cnkubWF0cmljZXNJbmRpY2VzRXh0cmEuX3VwZGF0YWJs
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBh
cnNlZEdlb21ldHJ5Lm1hdHJpY2VzV2VpZ2h0cykgeworICAgICAgICAgICAgICAgIEdlb21ldHJ5
Ll9DbGVhbk1hdHJpY2VzV2VpZ2h0cyhwYXJzZWRHZW9tZXRyeSwgbWVzaCk7CisgICAgICAgICAg
ICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCwgcGFyc2Vk
R2VvbWV0cnkubWF0cmljZXNXZWlnaHRzLCBwYXJzZWRHZW9tZXRyeS5tYXRyaWNlc1dlaWdodHMu
X3VwZGF0YWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFyc2VkR2VvbWV0
cnkubWF0cmljZXNXZWlnaHRzRXh0cmEpIHsKKyAgICAgICAgICAgICAgICBtZXNoLnNldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0
ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQsIHBhcnNlZEdlb21ldHJ5Lm1hdHJp
Y2VzV2VpZ2h0c0V4dHJhLCBwYXJzZWRHZW9tZXRyeS5tYXRyaWNlc1dlaWdodHMuX3VwZGF0YWJs
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXNoLnNldEluZGljZXMocGFyc2VkR2Vv
bWV0cnkuaW5kaWNlcywgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU3ViTWVzaGVzCisg
ICAgICAgIGlmIChwYXJzZWRHZW9tZXRyeS5zdWJNZXNoZXMpIHsKKyAgICAgICAgICAgIG1lc2gu
c3ViTWVzaGVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBzdWJJbmRleCA9IDA7IHN1Yklu
ZGV4IDwgcGFyc2VkR2VvbWV0cnkuc3ViTWVzaGVzLmxlbmd0aDsgc3ViSW5kZXgrKykgeworICAg
ICAgICAgICAgICAgIHZhciBwYXJzZWRTdWJNZXNoID0gcGFyc2VkR2VvbWV0cnkuc3ViTWVzaGVz
W3N1YkluZGV4XTsKKyAgICAgICAgICAgICAgICBfTWVzaGVzX3N1Yk1lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siU3ViTWVzaCJdLkFkZFRvTWVzaChwYXJzZWRTdWJNZXNoLm1hdGVy
aWFsSW5kZXgsIHBhcnNlZFN1Yk1lc2gudmVydGljZXNTdGFydCwgcGFyc2VkU3ViTWVzaC52ZXJ0
aWNlc0NvdW50LCBwYXJzZWRTdWJNZXNoLmluZGV4U3RhcnQsIHBhcnNlZFN1Yk1lc2guaW5kZXhD
b3VudCwgbWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gRmxhdCBz
aGFkaW5nCisgICAgICAgIGlmIChtZXNoLl9zaG91bGRHZW5lcmF0ZUZsYXRTaGFkaW5nKSB7Cisg
ICAgICAgICAgICBtZXNoLmNvbnZlcnRUb0ZsYXRTaGFkZWRNZXNoKCk7CisgICAgICAgICAgICBk
ZWxldGUgbWVzaC5fc2hvdWxkR2VuZXJhdGVGbGF0U2hhZGluZzsKKyAgICAgICAgfQorICAgICAg
ICAvLyBVcGRhdGUKKyAgICAgICAgbWVzaC5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAg
ICAgIHNjZW5lLm9uTWVzaEltcG9ydGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMobWVzaCk7
CisgICAgfTsKKyAgICBHZW9tZXRyeS5fQ2xlYW5NYXRyaWNlc1dlaWdodHMgPSBmdW5jdGlvbiAo
cGFyc2VkR2VvbWV0cnksIG1lc2gpIHsKKyAgICAgICAgdmFyIGVwc2lsb24gPSAxZS0zOworICAg
ICAgICBpZiAoIV9Mb2FkaW5nX3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siU2NlbmVMb2FkZXJGbGFncyJdLkNsZWFuQm9uZU1hdHJpeFdlaWdodHMpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgbm9JbmZsdWVuY2VCb25l
SW5kZXggPSAwLjA7CisgICAgICAgIGlmIChwYXJzZWRHZW9tZXRyeS5za2VsZXRvbklkID4gLTEp
IHsKKyAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IG1lc2guZ2V0U2NlbmUoKS5nZXRMYXN0U2tl
bGV0b25CeUlEKHBhcnNlZEdlb21ldHJ5LnNrZWxldG9uSWQpOworICAgICAgICAgICAgaWYgKCFz
a2VsZXRvbikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG5vSW5mbHVlbmNlQm9uZUluZGV4ID0gc2tlbGV0b24uYm9uZXMubGVuZ3RoOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHZhciBtYXRyaWNlc0luZGljZXMgPSBtZXNoLmdldFZlcnRpY2VzRGF0YShfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRy
aWNlc0luZGljZXNLaW5kKTsKKyAgICAgICAgdmFyIG1hdHJpY2VzSW5kaWNlc0V4dHJhID0gbWVz
aC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kKTsKKyAgICAgICAg
dmFyIG1hdHJpY2VzV2VpZ2h0cyA9IHBhcnNlZEdlb21ldHJ5Lm1hdHJpY2VzV2VpZ2h0czsKKyAg
ICAgICAgdmFyIG1hdHJpY2VzV2VpZ2h0c0V4dHJhID0gcGFyc2VkR2VvbWV0cnkubWF0cmljZXNX
ZWlnaHRzRXh0cmE7CisgICAgICAgIHZhciBpbmZsdWVuY2VycyA9IHBhcnNlZEdlb21ldHJ5Lm51
bUJvbmVJbmZsdWVuY2VyOworICAgICAgICB2YXIgc2l6ZSA9IG1hdHJpY2VzV2VpZ2h0cy5sZW5n
dGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAgICAg
ICAgICB2YXIgd2VpZ2h0ID0gMC4wOworICAgICAgICAgICAgdmFyIGZpcnN0WmVyb1dlaWdodCA9
IC0xOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHsKKyAgICAgICAg
ICAgICAgICB2YXIgdyA9IG1hdHJpY2VzV2VpZ2h0c1tpICsgal07CisgICAgICAgICAgICAgICAg
d2VpZ2h0ICs9IHc7CisgICAgICAgICAgICAgICAgaWYgKHcgPCBlcHNpbG9uICYmIGZpcnN0WmVy
b1dlaWdodCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RaZXJvV2VpZ2h0ID0gajsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWF0cmlj
ZXNXZWlnaHRzRXh0cmEpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7
IGorKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgdyA9IG1hdHJpY2VzV2VpZ2h0c0V4dHJh
W2kgKyBqXTsKKyAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ICs9IHc7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh3IDwgZXBzaWxvbiAmJiBmaXJzdFplcm9XZWlnaHQgPCAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmaXJzdFplcm9XZWlnaHQgPSBqICsgNDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChmaXJzdFplcm9XZWlnaHQgPCAwIHx8IGZpcnN0WmVyb1dlaWdodCA+IChpbmZsdWVuY2VycyAt
IDEpKSB7CisgICAgICAgICAgICAgICAgZmlyc3RaZXJvV2VpZ2h0ID0gaW5mbHVlbmNlcnMgLSAx
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHdlaWdodCA+IGVwc2lsb24pIHsKKyAg
ICAgICAgICAgICAgICB2YXIgbXdlaWdodCA9IDEuMCAvIHdlaWdodDsKKyAgICAgICAgICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICBtYXRy
aWNlc1dlaWdodHNbaSArIGpdICo9IG13ZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChtYXRyaWNlc1dlaWdodHNFeHRyYSkgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
bWF0cmljZXNXZWlnaHRzRXh0cmFbaSArIGpdICo9IG13ZWlnaHQ7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RaZXJvV2VpZ2h0ID49IDQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbWF0cmljZXNXZWlnaHRzRXh0cmFbaSArIGZpcnN0WmVyb1dlaWdodCAtIDRd
ID0gMS4wIC0gd2VpZ2h0OworICAgICAgICAgICAgICAgICAgICBtYXRyaWNlc0luZGljZXNFeHRy
YVtpICsgZmlyc3RaZXJvV2VpZ2h0IC0gNF0gPSBub0luZmx1ZW5jZUJvbmVJbmRleDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IG1hdHJpY2VzV2VpZ2h0c1tpICsgZmlyc3RaZXJvV2VpZ2h0XSA9IDEuMCAtIHdlaWdodDsKKyAg
ICAgICAgICAgICAgICAgICAgbWF0cmljZXNJbmRpY2VzW2kgKyBmaXJzdFplcm9XZWlnaHRdID0g
bm9JbmZsdWVuY2VCb25lSW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIG1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNl
c0tpbmQsIG1hdHJpY2VzSW5kaWNlcyk7CisgICAgICAgIGlmIChwYXJzZWRHZW9tZXRyeS5tYXRy
aWNlc1dlaWdodHNFeHRyYSkgeworICAgICAgICAgICAgbWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0u
TWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kLCBtYXRyaWNlc0luZGljZXNFeHRyYSk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBnZW9tZXRyeSBmcm9tIHBl
cnNpc3RlZCBkYXRhIChVc2luZyAuYmFieWxvbiBmaWxlIGZvcm1hdCkKKyAgICAgKiBAcGFyYW0g
cGFyc2VkVmVydGV4RGF0YSBkZWZpbmVzIHRoZSBwZXJzaXN0ZWQgZGF0YQorICAgICAqIEBwYXJh
bSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHJvb3RVcmwg
ZGVmaW5lcyB0aGUgcm9vdCB1cmwgdG8gdXNlIHRvIGxvYWQgYXNzZXRzIChsaWtlIGRlbGF5ZWQg
ZGF0YSkKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGdlb21ldHJ5IG9iamVjdAorICAgICAqLwor
ICAgIEdlb21ldHJ5LlBhcnNlID0gZnVuY3Rpb24gKHBhcnNlZFZlcnRleERhdGEsIHNjZW5lLCBy
b290VXJsKSB7CisgICAgICAgIGlmIChzY2VuZS5nZXRHZW9tZXRyeUJ5SUQocGFyc2VkVmVydGV4
RGF0YS5pZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBudWxsIHNpbmNlIGdlb21l
dHJ5IGNvdWxkIGJlIHNvbWV0aGluZyBlbHNlIHRoYW4gYSBib3guLi4KKyAgICAgICAgfQorICAg
ICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkocGFyc2VkVmVydGV4RGF0YS5pZCwgc2Nl
bmUsIHVuZGVmaW5lZCwgcGFyc2VkVmVydGV4RGF0YS51cGRhdGFibGUpOworICAgICAgICBpZiAo
X01pc2NfdGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJUYWdzIl0pIHsKKyAgICAg
ICAgICAgIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVGFncyJdLkFk
ZFRhZ3NUbyhnZW9tZXRyeSwgcGFyc2VkVmVydGV4RGF0YS50YWdzKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocGFyc2VkVmVydGV4RGF0YS5kZWxheUxvYWRpbmdGaWxlKSB7CisgICAgICAgICAg
ICBnZW9tZXRyeS5kZWxheUxvYWRTdGF0ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9OT1RMT0FERUQ7
CisgICAgICAgICAgICBnZW9tZXRyeS5kZWxheUxvYWRpbmdGaWxlID0gcm9vdFVybCArIHBhcnNl
ZFZlcnRleERhdGEuZGVsYXlMb2FkaW5nRmlsZTsKKyAgICAgICAgICAgIGdlb21ldHJ5Ll9ib3Vu
ZGluZ0luZm8gPSBuZXcgX0N1bGxpbmdfYm91bmRpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV82X19bIkJvdW5kaW5nSW5mbyJdKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KHBhcnNlZFZlcnRleERhdGEuYm91
bmRpbmdCb3hNaW5pbXVtKSwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocGFyc2VkVmVydGV4RGF0YS5ib3VuZGluZ0Jv
eE1heGltdW0pKTsKKyAgICAgICAgICAgIGdlb21ldHJ5Ll9kZWxheUluZm8gPSBbXTsKKyAgICAg
ICAgICAgIGlmIChwYXJzZWRWZXJ0ZXhEYXRhLmhhc1VWcykgeworICAgICAgICAgICAgICAgIGdl
b21ldHJ5Ll9kZWxheUluZm8ucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHBhcnNlZFZlcnRleERhdGEuaGFzVVZzMikgeworICAgICAgICAgICAgICAgIGdl
b21ldHJ5Ll9kZWxheUluZm8ucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjJLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChwYXJzZWRWZXJ0ZXhEYXRhLmhhc1VWczMpIHsKKyAgICAgICAgICAgICAgICBn
ZW9tZXRyeS5fZGVsYXlJbmZvLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVVYzS2luZCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAocGFyc2VkVmVydGV4RGF0YS5oYXNVVnM0KSB7CisgICAgICAgICAgICAgICAg
Z2VvbWV0cnkuX2RlbGF5SW5mby5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLlVWNEtpbmQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHBhcnNlZFZlcnRleERhdGEuaGFzVVZzNSkgeworICAgICAgICAgICAgICAg
IGdlb21ldHJ5Ll9kZWxheUluZm8ucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVjVLaW5kKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChwYXJzZWRWZXJ0ZXhEYXRhLmhhc1VWczYpIHsKKyAgICAgICAgICAgICAg
ICBnZW9tZXRyeS5fZGVsYXlJbmZvLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVVY2S2luZCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAocGFyc2VkVmVydGV4RGF0YS5oYXNDb2xvcnMpIHsKKyAgICAgICAgICAg
ICAgICBnZW9tZXRyeS5fZGVsYXlJbmZvLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRWZXJ0ZXhEYXRhLmhhc01hdHJpY2VzSW5kaWNlcykg
eworICAgICAgICAgICAgICAgIGdlb21ldHJ5Ll9kZWxheUluZm8ucHVzaChfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0lu
ZGljZXNLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRWZXJ0ZXhE
YXRhLmhhc01hdHJpY2VzV2VpZ2h0cykgeworICAgICAgICAgICAgICAgIGdlb21ldHJ5Ll9kZWxh
eUluZm8ucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGdlb21ldHJ5Ll9kZWxheUxvYWRpbmdGdW5jdGlvbiA9IF9NZXNoZXNfbWVzaF92ZXJ0
ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleERhdGEiXS5JbXBvcnRW
ZXJ0ZXhEYXRhOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX01lc2hl
c19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4RGF0
YSJdLkltcG9ydFZlcnRleERhdGEocGFyc2VkVmVydGV4RGF0YSwgZ2VvbWV0cnkpOworICAgICAg
ICB9CisgICAgICAgIHNjZW5lLnB1c2hHZW9tZXRyeShnZW9tZXRyeSwgdHJ1ZSk7CisgICAgICAg
IHJldHVybiBnZW9tZXRyeTsKKyAgICB9OworICAgIHJldHVybiBHZW9tZXRyeTsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL2dyb3VuZE1lc2gudHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NZXNoZXMvZ3JvdW5kTWVz
aC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogR3JvdW5kTWVzaCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJHcm91bmRNZXNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBHcm91bmRNZXNoOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xp
Yi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9idWZmZXIgKi8g
Ii4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNf
bWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsKKworCisKKworX01lc2hl
c19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1lc2giXS5fR3JvdW5kTWVzaFBh
cnNlciA9IGZ1bmN0aW9uIChwYXJzZWRNZXNoLCBzY2VuZSkgeworICAgIHJldHVybiBHcm91bmRN
ZXNoLlBhcnNlKHBhcnNlZE1lc2gsIHNjZW5lKTsKK307CisvKioKKyAqIE1lc2ggcmVwcmVzZW50
aW5nIHRoZSBnb3J1bmQKKyAqLwordmFyIEdyb3VuZE1lc2ggPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oR3JvdW5kTWVzaCwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBHcm91bmRNZXNo
KG5hbWUsIHNjZW5lKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5h
bWUsIHNjZW5lKSB8fCB0aGlzOworICAgICAgICAvKiogSWYgb2N0cmVlIHNob3VsZCBiZSBnZW5l
cmF0ZWQgKi8KKyAgICAgICAgX3RoaXMuZ2VuZXJhdGVPY3RyZWUgPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiAiR3JvdW5kTWVzaCIKKyAgICAg
KiBAcmV0dXJucyAiR3JvdW5kTWVzaCIKKyAgICAgKi8KKyAgICBHcm91bmRNZXNoLnByb3RvdHlw
ZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiR3JvdW5kTWVz
aCI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR3JvdW5kTWVzaC5wcm90b3R5
cGUsICJzdWJkaXZpc2lvbnMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbWluaW11
bSBvZiB4IGFuZCB5IHN1YmRpdmlzaW9ucworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5fc3ViZGl2aXNpb25z
WCwgdGhpcy5fc3ViZGl2aXNpb25zWSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShHcm91bmRNZXNoLnByb3RvdHlwZSwgInN1YmRpdmlzaW9uc1giLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBYIHN1YmRpdmlzaW9ucworICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3ViZGl2aXNp
b25zWDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEdyb3Vu
ZE1lc2gucHJvdG90eXBlLCAic3ViZGl2aXNpb25zWSIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFkgc3ViZGl2aXNpb25zCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJkaXZpc2lvbnNZOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIGFuIG9jdHJl
ZSB0byBoZWxwIHRvIHNlbGVjdCB0aGUgcmlnaHQgc3VibWVzaGVzIGZvciByZW5kZXJpbmcsIHBp
Y2tpbmcgYW5kIGNvbGxpc2lvbiBjb21wdXRhdGlvbnMuCisgICAgICogUGxlYXNlIG5vdGUgdGhh
dCB5b3UgbXVzdCBoYXZlIGEgZGVjZW50IG51bWJlciBvZiBzdWJtZXNoZXMgdG8gZ2V0IHBlcmZv
cm1hbmNlIGltcHJvdmVtZW50cyB3aGVuIHVzaW5nIGFuIG9jdHJlZQorICAgICAqIEBwYXJhbSBj
aHVua3NDb3VudCB0aGUgbnVtYmVyIG9mIHN1YmRpdmlzaW9ucyBmb3IgeCBhbmQgeQorICAgICAq
IEBwYXJhbSBvY3RyZWVCbG9ja3NTaXplIChEZWZhdWx0OiAzMikKKyAgICAgKi8KKyAgICBHcm91
bmRNZXNoLnByb3RvdHlwZS5vcHRpbWl6ZSA9IGZ1bmN0aW9uIChjaHVua3NDb3VudCwgb2N0cmVl
QmxvY2tzU2l6ZSkgeworICAgICAgICBpZiAob2N0cmVlQmxvY2tzU2l6ZSA9PT0gdm9pZCAwKSB7
IG9jdHJlZUJsb2Nrc1NpemUgPSAzMjsgfQorICAgICAgICB0aGlzLl9zdWJkaXZpc2lvbnNYID0g
Y2h1bmtzQ291bnQ7CisgICAgICAgIHRoaXMuX3N1YmRpdmlzaW9uc1kgPSBjaHVua3NDb3VudDsK
KyAgICAgICAgdGhpcy5zdWJkaXZpZGUoY2h1bmtzQ291bnQpOworICAgICAgICAvLyBDYWxsIHRo
ZSBvY3RyZWUgc3lzdGVtIG9wdGltaXphdGlvbiBpZiBpdCBpcyBkZWZpbmVkLgorICAgICAgICB2
YXIgdGhpc0FzQW55ID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXNBc0FueS5jcmVhdGVPclVwZGF0
ZVN1Ym1lc2hlc09jdHJlZSkgeworICAgICAgICAgICAgdGhpc0FzQW55LmNyZWF0ZU9yVXBkYXRl
U3VibWVzaGVzT2N0cmVlKG9jdHJlZUJsb2Nrc1NpemUpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIGEgaGVpZ2h0ICh5KSB2YWx1ZSBpbiB0aGUgV29ybCBzeXN0
ZW0gOgorICAgICAqIHRoZSBncm91bmQgYWx0aXR1ZGUgYXQgdGhlIGNvb3JkaW5hdGVzICh4LCB6
KSBleHByZXNzZWQgaW4gdGhlIFdvcmxkIHN5c3RlbS4KKyAgICAgKiBAcGFyYW0geCB4IGNvb3Jk
aW5hdGUKKyAgICAgKiBAcGFyYW0geiB6IGNvb3JkaW5hdGUKKyAgICAgKiBAcmV0dXJucyB0aGUg
Z3JvdW5kIHkgcG9zaXRpb24gaWYgKHgsIHopIGFyZSBvdXRzaWRlIHRoZSBncm91bmQgc3VyZmFj
ZS4KKyAgICAgKi8KKyAgICBHcm91bmRNZXNoLnByb3RvdHlwZS5nZXRIZWlnaHRBdENvb3JkaW5h
dGVzID0gZnVuY3Rpb24gKHgsIHopIHsKKyAgICAgICAgdmFyIHdvcmxkID0gdGhpcy5nZXRXb3Js
ZE1hdHJpeCgpOworICAgICAgICB2YXIgaW52TWF0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbNV07CisgICAgICAg
IHdvcmxkLmludmVydFRvUmVmKGludk1hdCk7CisgICAgICAgIHZhciB0bXBWZWN0ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5W
ZWN0b3IzWzhdOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzRnJvbUZsb2F0c1RvUmVm
KHgsIDAuMCwgeiwgaW52TWF0LCB0bXBWZWN0KTsgLy8gdHJhbnNmb3JtIHgseiBpbiB0aGUgbWVz
aCBsb2NhbCBzcGFjZQorICAgICAgICB4ID0gdG1wVmVjdC54OworICAgICAgICB6ID0gdG1wVmVj
dC56OworICAgICAgICBpZiAoeCA8IHRoaXMuX21pblggfHwgeCA+IHRoaXMuX21heFggfHwgeiA8
IHRoaXMuX21pblogfHwgeiA+IHRoaXMuX21heFopIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LnBvc2l0aW9uLnk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9oZWlnaHRRdWFkcyB8
fCB0aGlzLl9oZWlnaHRRdWFkcy5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgdGhpcy5faW5p
dEhlaWdodFF1YWRzKCk7CisgICAgICAgICAgICB0aGlzLl9jb21wdXRlSGVpZ2h0UXVhZHMoKTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgZmFjZXQgPSB0aGlzLl9nZXRGYWNldEF0KHgsIHopOwor
ICAgICAgICB2YXIgeSA9IC0oZmFjZXQueCAqIHggKyBmYWNldC56ICogeiArIGZhY2V0LncpIC8g
ZmFjZXQueTsKKyAgICAgICAgLy8gcmV0dXJuIHkgaW4gdGhlIFdvcmxkIHN5c3RlbQorICAgICAg
ICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9y
MyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzRnJvbUZsb2F0c1RvUmVmKDAuMCwgeSwgMC4wLCB3b3Js
ZCwgdG1wVmVjdCk7CisgICAgICAgIHJldHVybiB0bXBWZWN0Lnk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZXR1cm5zIGEgbm9ybWFsaXplZCB2ZWN0b3IgKFZlY3RvcjMpIG9ydGhvZ29uYWwg
dG8gdGhlIGdyb3VuZAorICAgICAqIGF0IHRoZSBncm91bmQgY29vcmRpbmF0ZXMgKHgsIHopIGV4
cHJlc3NlZCBpbiB0aGUgV29ybGQgc3lzdGVtLgorICAgICAqIEBwYXJhbSB4IHggY29vcmRpbmF0
ZQorICAgICAqIEBwYXJhbSB6IHogY29vcmRpbmF0ZQorICAgICAqIEByZXR1cm5zIFZlY3RvcjMo
MC4wLCAxLjAsIDAuMCkgaWYgKHgsIHopIGFyZSBvdXRzaWRlIHRoZSBncm91bmQgc3VyZmFjZS4K
KyAgICAgKi8KKyAgICBHcm91bmRNZXNoLnByb3RvdHlwZS5nZXROb3JtYWxBdENvb3JkaW5hdGVz
ID0gZnVuY3Rpb24gKHgsIHopIHsKKyAgICAgICAgdmFyIG5vcm1hbCA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAuMCwgMS4w
LCAwLjApOworICAgICAgICB0aGlzLmdldE5vcm1hbEF0Q29vcmRpbmF0ZXNUb1JlZih4LCB6LCBu
b3JtYWwpOworICAgICAgICByZXR1cm4gbm9ybWFsOworICAgIH07CisgICAgLyoqCisgICAgICog
VXBkYXRlcyB0aGUgVmVjdG9yMyBwYXNzZWQgYSByZWZlcmVuY2Ugd2l0aCBhIG5vcm1hbGl6ZWQg
dmVjdG9yIG9ydGhvZ29uYWwgdG8gdGhlIGdyb3VuZAorICAgICAqIGF0IHRoZSBncm91bmQgY29v
cmRpbmF0ZXMgKHgsIHopIGV4cHJlc3NlZCBpbiB0aGUgV29ybGQgc3lzdGVtLgorICAgICAqIERv
ZXNuJ3QgdXB0YWRlIHRoZSByZWZlcmVuY2UgVmVjdG9yMyBpZiAoeCwgeikgYXJlIG91dHNpZGUg
dGhlIGdyb3VuZCBzdXJmYWNlLgorICAgICAqIEBwYXJhbSB4IHggY29vcmRpbmF0ZQorICAgICAq
IEBwYXJhbSB6IHogY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSByZWYgdmVjdG9yIHRvIHN0b3Jl
IHRoZSByZXN1bHQKKyAgICAgKiBAcmV0dXJucyB0aGUgR3JvdW5kTWVzaC4KKyAgICAgKi8KKyAg
ICBHcm91bmRNZXNoLnByb3RvdHlwZS5nZXROb3JtYWxBdENvb3JkaW5hdGVzVG9SZWYgPSBmdW5j
dGlvbiAoeCwgeiwgcmVmKSB7CisgICAgICAgIHZhciB3b3JsZCA9IHRoaXMuZ2V0V29ybGRNYXRy
aXgoKTsKKyAgICAgICAgdmFyIHRtcE1hdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzVdOworICAgICAgICB3b3Js
ZC5pbnZlcnRUb1JlZih0bXBNYXQpOworICAgICAgICB2YXIgdG1wVmVjdCA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3JzIl0uVmVjdG9y
M1s4XTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc0Zyb21GbG9hdHNUb1JlZih4LCAw
LjAsIHosIHRtcE1hdCwgdG1wVmVjdCk7IC8vIHRyYW5zZm9ybSB4LHogaW4gdGhlIG1lc2ggbG9j
YWwgc3BhY2UKKyAgICAgICAgeCA9IHRtcFZlY3QueDsKKyAgICAgICAgeiA9IHRtcFZlY3QuejsK
KyAgICAgICAgaWYgKHggPCB0aGlzLl9taW5YIHx8IHggPiB0aGlzLl9tYXhYIHx8IHogPCB0aGlz
Ll9taW5aIHx8IHogPiB0aGlzLl9tYXhaKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2hlaWdodFF1YWRzIHx8IHRoaXMuX2hlaWdodFF1
YWRzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICB0aGlzLl9pbml0SGVpZ2h0UXVhZHMoKTsK
KyAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVIZWlnaHRRdWFkcygpOworICAgICAgICB9CisgICAg
ICAgIHZhciBmYWNldCA9IHRoaXMuX2dldEZhY2V0QXQoeCwgeik7CisgICAgICAgIF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNm
b3JtTm9ybWFsRnJvbUZsb2F0c1RvUmVmKGZhY2V0LngsIGZhY2V0LnksIGZhY2V0LnosIHdvcmxk
LCByZWYpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICogRm9y
Y2UgdGhlIGhlaWdodHMgdG8gYmUgcmVjb21wdXRlZCBmb3IgZ2V0SGVpZ2h0QXRDb29yZGluYXRl
cygpIG9yIGdldE5vcm1hbEF0Q29vcmRpbmF0ZXMoKQorICAgICogaWYgdGhlIGdyb3VuZCBoYXMg
YmVlbiB1cGRhdGVkLgorICAgICogVGhpcyBjYW4gYmUgdXNlZCBpbiB0aGUgcmVuZGVyIGxvb3Au
CisgICAgKiBAcmV0dXJucyB0aGUgR3JvdW5kTWVzaC4KKyAgICAqLworICAgIEdyb3VuZE1lc2gu
cHJvdG90eXBlLnVwZGF0ZUNvb3JkaW5hdGVIZWlnaHRzID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAoIXRoaXMuX2hlaWdodFF1YWRzIHx8IHRoaXMuX2hlaWdodFF1YWRzLmxlbmd0aCA9PSAw
KSB7CisgICAgICAgICAgICB0aGlzLl9pbml0SGVpZ2h0UXVhZHMoKTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9jb21wdXRlSGVpZ2h0UXVhZHMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICAvLyBSZXR1cm5zIHRoZSBlbGVtZW50ICJmYWNldCIgZnJvbSB0aGUgaGVpZ2h0
UXVhZHMgYXJyYXkgcmVsYXRpdmUgdG8gKHgsIHopIGxvY2FsIGNvb3JkaW5hdGVzCisgICAgR3Jv
dW5kTWVzaC5wcm90b3R5cGUuX2dldEZhY2V0QXQgPSBmdW5jdGlvbiAoeCwgeikgeworICAgICAg
ICAvLyByZXRyaWV2ZSBjb2wgYW5kIHJvdyBmcm9tIHgsIHogY29vcmRpbmF0ZXMgaW4gdGhlIGdy
b3VuZCBsb2NhbCBzeXN0ZW0KKyAgICAgICAgdmFyIGNvbCA9IE1hdGguZmxvb3IoKHggKyB0aGlz
Ll9tYXhYKSAqIHRoaXMuX3N1YmRpdmlzaW9uc1ggLyB0aGlzLl93aWR0aCk7CisgICAgICAgIHZh
ciByb3cgPSBNYXRoLmZsb29yKC0oeiArIHRoaXMuX21heFopICogdGhpcy5fc3ViZGl2aXNpb25z
WSAvIHRoaXMuX2hlaWdodCArIHRoaXMuX3N1YmRpdmlzaW9uc1kpOworICAgICAgICB2YXIgcXVh
ZCA9IHRoaXMuX2hlaWdodFF1YWRzW3JvdyAqIHRoaXMuX3N1YmRpdmlzaW9uc1ggKyBjb2xdOwor
ICAgICAgICB2YXIgZmFjZXQ7CisgICAgICAgIGlmICh6IDwgcXVhZC5zbG9wZS54ICogeCArIHF1
YWQuc2xvcGUueSkgeworICAgICAgICAgICAgZmFjZXQgPSBxdWFkLmZhY2V0MTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZhY2V0ID0gcXVhZC5mYWNldDI7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhY2V0OworICAgIH07CisgICAgLy8gIENyZWF0ZXMgYW5k
IHBvcHVsYXRlcyB0aGUgaGVpZ2h0TWFwIGFycmF5IHdpdGggImZhY2V0IiBlbGVtZW50cyA6Cisg
ICAgLy8gYSBxdWFkIGlzIHR3byB0cmlhbmd1bGFyIGZhY2V0cyBzZXBhcmF0ZWQgYnkgYSBzbG9w
ZSwgc28gYSAiZmFjZXQiIGVsZW1lbnQgaXMgMSBzbG9wZSArIDIgZmFjZXRzCisgICAgLy8gc2xv
cGUgOiBWZWN0b3IyKGMsIGgpID0gMkQgZGlhZ29uYWwgbGluZSBlcXVhdGlvbiBzZXR0aW5nIGFw
cGFydCB0d28gdHJpYW5ndWxhciBmYWNldHMgaW4gYSBxdWFkIDogeiA9IGN4ICsgaAorICAgIC8v
IGZhY2V0MSA6IFZlY3RvcjQoYSwgYiwgYywgZCkgPSBmaXJzdCBmYWNldCAzRCBwbGFuZSBlcXVh
dGlvbiA6IGF4ICsgYnkgKyBjeiArIGQgPSAwCisgICAgLy8gZmFjZXQyIDogIFZlY3RvcjQoYSwg
YiwgYywgZCkgPSBzZWNvbmQgZmFjZXQgM0QgcGxhbmUgZXF1YXRpb24gOiBheCArIGJ5ICsgY3og
KyBkID0gMAorICAgIC8vIFJldHVybnMgdGhlIEdyb3VuZE1lc2guCisgICAgR3JvdW5kTWVzaC5w
cm90b3R5cGUuX2luaXRIZWlnaHRRdWFkcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHN1
YmRpdmlzaW9uc1ggPSB0aGlzLl9zdWJkaXZpc2lvbnNYOworICAgICAgICB2YXIgc3ViZGl2aXNp
b25zWSA9IHRoaXMuX3N1YmRpdmlzaW9uc1k7CisgICAgICAgIHRoaXMuX2hlaWdodFF1YWRzID0g
bmV3IEFycmF5KCk7CisgICAgICAgIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IHN1YmRpdmlzaW9u
c1k7IHJvdysrKSB7CisgICAgICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBzdWJkaXZp
c2lvbnNYOyBjb2wrKykgeworICAgICAgICAgICAgICAgIHZhciBxdWFkID0geyBzbG9wZTogX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjIiXS5a
ZXJvKCksIGZhY2V0MTogbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3I0Il0oMC4wLCAwLjAsIDAuMCwgMC4wKSwgZmFjZXQyOiBuZXcgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjQiXSgw
LjAsIDAuMCwgMC4wLCAwLjApIH07CisgICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0UXVhZHNb
cm93ICogc3ViZGl2aXNpb25zWCArIGNvbF0gPSBxdWFkOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLy8gQ29tcHV0ZSBlYWNoIHF1
YWQgZWxlbWVudCB2YWx1ZXMgYW5kIHVwZGF0ZSB0aGUgdGhlIGhlaWdodE1hcCBhcnJheSA6Cisg
ICAgLy8gc2xvcGUgOiBWZWN0b3IyKGMsIGgpID0gMkQgZGlhZ29uYWwgbGluZSBlcXVhdGlvbiBz
ZXR0aW5nIGFwcGFydCB0d28gdHJpYW5ndWxhciBmYWNldHMgaW4gYSBxdWFkIDogeiA9IGN4ICsg
aAorICAgIC8vIGZhY2V0MSA6IFZlY3RvcjQoYSwgYiwgYywgZCkgPSBmaXJzdCBmYWNldCAzRCBw
bGFuZSBlcXVhdGlvbiA6IGF4ICsgYnkgKyBjeiArIGQgPSAwCisgICAgLy8gZmFjZXQyIDogIFZl
Y3RvcjQoYSwgYiwgYywgZCkgPSBzZWNvbmQgZmFjZXQgM0QgcGxhbmUgZXF1YXRpb24gOiBheCAr
IGJ5ICsgY3ogKyBkID0gMAorICAgIC8vIFJldHVybnMgdGhlIEdyb3VuZE1lc2guCisgICAgR3Jv
dW5kTWVzaC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHRRdWFkcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2lu
ZCk7CisgICAgICAgIGlmICghcG9zaXRpb25zKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgICAgfQorICAgICAgICB2YXIgdjEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbM107CisgICAgICAgIHZh
ciB2MiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJU
bXBWZWN0b3JzIl0uVmVjdG9yM1syXTsKKyAgICAgICAgdmFyIHYzID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzFd
OworICAgICAgICB2YXIgdjQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF07CisgICAgICAgIHZhciB2MXYyID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3Rv
cnMiXS5WZWN0b3IzWzRdOworICAgICAgICB2YXIgdjF2MyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1s1XTsKKyAg
ICAgICAgdmFyIHYxdjQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbNl07CisgICAgICAgIHZhciBub3JtMSA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3Jz
Il0uVmVjdG9yM1s3XTsKKyAgICAgICAgdmFyIG5vcm0yID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzhdOworICAg
ICAgICB2YXIgaSA9IDA7CisgICAgICAgIHZhciBqID0gMDsKKyAgICAgICAgdmFyIGsgPSAwOwor
ICAgICAgICB2YXIgY2QgPSAwOyAvLyAyRCBzbG9wZSBjb2VmZmljaWVudCA6IHogPSBjZCAqIHgg
KyBoCisgICAgICAgIHZhciBoID0gMDsKKyAgICAgICAgdmFyIGQxID0gMDsgLy8gZmFjZXQgcGxh
bmUgZXF1YXRpb24gOiBheCArIGJ5ICsgY3ogKyBkID0gMAorICAgICAgICB2YXIgZDIgPSAwOwor
ICAgICAgICB2YXIgc3ViZGl2aXNpb25zWCA9IHRoaXMuX3N1YmRpdmlzaW9uc1g7CisgICAgICAg
IHZhciBzdWJkaXZpc2lvbnNZID0gdGhpcy5fc3ViZGl2aXNpb25zWTsKKyAgICAgICAgZm9yICh2
YXIgcm93ID0gMDsgcm93IDwgc3ViZGl2aXNpb25zWTsgcm93KyspIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIGNvbCA9IDA7IGNvbCA8IHN1YmRpdmlzaW9uc1g7IGNvbCsrKSB7CisgICAgICAgICAg
ICAgICAgaSA9IGNvbCAqIDM7CisgICAgICAgICAgICAgICAgaiA9IHJvdyAqIChzdWJkaXZpc2lv
bnNYICsgMSkgKiAzOworICAgICAgICAgICAgICAgIGsgPSAocm93ICsgMSkgKiAoc3ViZGl2aXNp
b25zWCArIDEpICogMzsKKyAgICAgICAgICAgICAgICB2MS54ID0gcG9zaXRpb25zW2ogKyBpXTsK
KyAgICAgICAgICAgICAgICB2MS55ID0gcG9zaXRpb25zW2ogKyBpICsgMV07CisgICAgICAgICAg
ICAgICAgdjEueiA9IHBvc2l0aW9uc1tqICsgaSArIDJdOworICAgICAgICAgICAgICAgIHYyLngg
PSBwb3NpdGlvbnNbaiArIGkgKyAzXTsKKyAgICAgICAgICAgICAgICB2Mi55ID0gcG9zaXRpb25z
W2ogKyBpICsgNF07CisgICAgICAgICAgICAgICAgdjIueiA9IHBvc2l0aW9uc1tqICsgaSArIDVd
OworICAgICAgICAgICAgICAgIHYzLnggPSBwb3NpdGlvbnNbayArIGldOworICAgICAgICAgICAg
ICAgIHYzLnkgPSBwb3NpdGlvbnNbayArIGkgKyAxXTsKKyAgICAgICAgICAgICAgICB2My56ID0g
cG9zaXRpb25zW2sgKyBpICsgMl07CisgICAgICAgICAgICAgICAgdjQueCA9IHBvc2l0aW9uc1tr
ICsgaSArIDNdOworICAgICAgICAgICAgICAgIHY0LnkgPSBwb3NpdGlvbnNbayArIGkgKyA0XTsK
KyAgICAgICAgICAgICAgICB2NC56ID0gcG9zaXRpb25zW2sgKyBpICsgNV07CisgICAgICAgICAg
ICAgICAgLy8gMkQgc2xvcGUgVjFWNAorICAgICAgICAgICAgICAgIGNkID0gKHY0LnogLSB2MS56
KSAvICh2NC54IC0gdjEueCk7CisgICAgICAgICAgICAgICAgaCA9IHYxLnogLSBjZCAqIHYxLng7
IC8vIHYxIGJlbG9uZ3MgdG8gdGhlIHNsb3BlCisgICAgICAgICAgICAgICAgLy8gZmFjZXQgZXF1
YXRpb25zIDoKKyAgICAgICAgICAgICAgICAvLyB3ZSBjb21wdXRlIGVhY2ggZmFjZXQgbm9ybWFs
IHZlY3RvcgorICAgICAgICAgICAgICAgIC8vIHRoZSBlcXVhdGlvbiBvZiB0aGUgZmFjZXQgcGxh
bmUgaXMgOiBub3JtLnggKiB4ICsgbm9ybS55ICogeSArIG5vcm0ueiAqIHogKyBkID0gMAorICAg
ICAgICAgICAgICAgIC8vIHdlIGNvbXB1dGUgdGhlIHZhbHVlIGQgYnkgYXBwbHlpbmcgdGhlIGVx
dWF0aW9uIHRvIHYxIHdoaWNoIGJlbG9uZ3MgdG8gdGhlIHBsYW5lCisgICAgICAgICAgICAgICAg
Ly8gdGhlbiB3ZSBzdG9yZSB0aGUgZmFjZXQgZXF1YXRpb24gaW4gYSBWZWN0b3I0CisgICAgICAg
ICAgICAgICAgdjIuc3VidHJhY3RUb1JlZih2MSwgdjF2Mik7CisgICAgICAgICAgICAgICAgdjMu
c3VidHJhY3RUb1JlZih2MSwgdjF2Myk7CisgICAgICAgICAgICAgICAgdjQuc3VidHJhY3RUb1Jl
Zih2MSwgdjF2NCk7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Dcm9zc1RvUmVmKHYxdjQsIHYxdjMsIG5v
cm0xKTsgLy8gY2F1dGlvbiA6IENyb3NzVG9SZWYgdXNlcyB0aGUgVG1wIGNsYXNzCisgICAgICAg
ICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlY3RvcjMiXS5Dcm9zc1RvUmVmKHYxdjIsIHYxdjQsIG5vcm0yKTsKKyAgICAgICAgICAgICAg
ICBub3JtMS5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICBub3JtMi5ub3JtYWxpemUoKTsK
KyAgICAgICAgICAgICAgICBkMSA9IC0obm9ybTEueCAqIHYxLnggKyBub3JtMS55ICogdjEueSAr
IG5vcm0xLnogKiB2MS56KTsKKyAgICAgICAgICAgICAgICBkMiA9IC0obm9ybTIueCAqIHYyLngg
KyBub3JtMi55ICogdjIueSArIG5vcm0yLnogKiB2Mi56KTsKKyAgICAgICAgICAgICAgICB2YXIg
cXVhZCA9IHRoaXMuX2hlaWdodFF1YWRzW3JvdyAqIHN1YmRpdmlzaW9uc1ggKyBjb2xdOworICAg
ICAgICAgICAgICAgIHF1YWQuc2xvcGUuY29weUZyb21GbG9hdHMoY2QsIGgpOworICAgICAgICAg
ICAgICAgIHF1YWQuZmFjZXQxLmNvcHlGcm9tRmxvYXRzKG5vcm0xLngsIG5vcm0xLnksIG5vcm0x
LnosIGQxKTsKKyAgICAgICAgICAgICAgICBxdWFkLmZhY2V0Mi5jb3B5RnJvbUZsb2F0cyhub3Jt
Mi54LCBub3JtMi55LCBub3JtMi56LCBkMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRo
aXMgZ3JvdW5kIG1lc2gKKyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlvbk9iamVjdCBvYmplY3Qg
dG8gd3JpdGUgc2VyaWFsaXphdGlvbiB0bworICAgICAqLworICAgIEdyb3VuZE1lc2gucHJvdG90
eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0KSB7CisgICAgICAg
IF9zdXBlci5wcm90b3R5cGUuc2VyaWFsaXplLmNhbGwodGhpcywgc2VyaWFsaXphdGlvbk9iamVj
dCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc3ViZGl2aXNpb25zWCA9IHRoaXMuX3N1
YmRpdmlzaW9uc1g7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc3ViZGl2aXNpb25zWSA9
IHRoaXMuX3N1YmRpdmlzaW9uc1k7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWluWCA9
IHRoaXMuX21pblg7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF4WCA9IHRoaXMuX21h
eFg7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWluWiA9IHRoaXMuX21pblo7CisgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF4WiA9IHRoaXMuX21heFo7CisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3Qud2lkdGggPSB0aGlzLl93aWR0aDsKKyAgICAgICAgc2VyaWFsaXphdGlv
bk9iamVjdC5oZWlnaHQgPSB0aGlzLl9oZWlnaHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQ
YXJzZXMgYSBzZXJpYWxpemVkIGdyb3VuZCBtZXNoCisgICAgICogQHBhcmFtIHBhcnNlZE1lc2gg
dGhlIHNlcmlhbGl6ZWQgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSB0aGUgc2NlbmUgdG8gY3Jl
YXRlIHRoZSBncm91bmQgbWVzaCBpbgorICAgICAqIEByZXR1cm5zIHRoZSBjcmVhdGVkIGdyb3Vu
ZCBtZXNoCisgICAgICovCisgICAgR3JvdW5kTWVzaC5QYXJzZSA9IGZ1bmN0aW9uIChwYXJzZWRN
ZXNoLCBzY2VuZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEdyb3VuZE1lc2gocGFyc2Vk
TWVzaC5uYW1lLCBzY2VuZSk7CisgICAgICAgIHJlc3VsdC5fc3ViZGl2aXNpb25zWCA9IHBhcnNl
ZE1lc2guc3ViZGl2aXNpb25zWCB8fCAxOworICAgICAgICByZXN1bHQuX3N1YmRpdmlzaW9uc1kg
PSBwYXJzZWRNZXNoLnN1YmRpdmlzaW9uc1kgfHwgMTsKKyAgICAgICAgcmVzdWx0Ll9taW5YID0g
cGFyc2VkTWVzaC5taW5YOworICAgICAgICByZXN1bHQuX21heFggPSBwYXJzZWRNZXNoLm1heFg7
CisgICAgICAgIHJlc3VsdC5fbWluWiA9IHBhcnNlZE1lc2gubWluWjsKKyAgICAgICAgcmVzdWx0
Ll9tYXhaID0gcGFyc2VkTWVzaC5tYXhaOworICAgICAgICByZXN1bHQuX3dpZHRoID0gcGFyc2Vk
TWVzaC53aWR0aDsKKyAgICAgICAgcmVzdWx0Ll9oZWlnaHQgPSBwYXJzZWRNZXNoLmhlaWdodDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIHJldHVybiBHcm91bmRNZXNoOwor
fShfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWVzaCJdKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL2luZGV4LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hlcy9pbmRleC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFic3RyYWN0
TWVzaCwgQnVmZmVyLCBWZXJ0ZXhCdWZmZXIsIENTRywgR2VvbWV0cnksIEdyb3VuZE1lc2gsIFRy
YWlsTWVzaCwgSW5zdGFuY2VkTWVzaCwgTGluZXNNZXNoLCBJbnN0YW5jZWRMaW5lc01lc2gsIF9D
cmVhdGlvbkRhdGFTdG9yYWdlLCBfSW5zdGFuY2VzQmF0Y2gsIE1lc2gsIFZlcnRleERhdGEsIE1l
c2hCdWlsZGVyLCBTaW1wbGlmaWNhdGlvblNldHRpbmdzLCBTaW1wbGlmaWNhdGlvblF1ZXVlLCBT
aW1wbGlmaWNhdGlvblR5cGUsIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQsIFBvbHln
b24sIFBvbHlnb25NZXNoQnVpbGRlciwgQmFzZVN1Yk1lc2gsIFN1Yk1lc2gsIE1lc2hMT0RMZXZl
bCwgVHJhbnNmb3JtTm9kZSwgQm94QnVpbGRlciwgU3BoZXJlQnVpbGRlciwgQ3lsaW5kZXJCdWls
ZGVyLCBUb3J1c0J1aWxkZXIsIExpbmVzQnVpbGRlciwgUGxhbmVCdWlsZGVyLCBHcm91bmRCdWls
ZGVyLCBEYXRhQnVmZmVyLCBXZWJHTERhdGFCdWZmZXIsIFdlYkdQVURhdGFCdWZmZXIsIERyYWNv
Q29tcHJlc3Npb24sIFRpbGVkQm94QnVpbGRlciwgRGlzY0J1aWxkZXIsIFJpYmJvbkJ1aWxkZXIs
IEhlbWlzcGhlcmVCdWlsZGVyLCBUb3J1c0tub3RCdWlsZGVyLCBQb2x5Z29uQnVpbGRlciwgU2hh
cGVCdWlsZGVyLCBMYXRoZUJ1aWxkZXIsIFRpbGVkUGxhbmVCdWlsZGVyLCBUdWJlQnVpbGRlciwg
UG9seWhlZHJvbkJ1aWxkZXIsIEljb1NwaGVyZUJ1aWxkZXIsIERlY2FsQnVpbGRlciAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Fic3RyYWN0TWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hYnN0
cmFjdE1lc2ggKi8gIi4vTWVzaGVzL2Fic3RyYWN0TWVzaC50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJBYnN0cmFjdE1lc2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hYnN0cmFjdE1lc2hfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siQWJzdHJhY3RNZXNoIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJCdWZmZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQnVmZmVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlZlcnRleEJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfQ29tcHJlc3Npb25faW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQ29tcHJlc3Npb24vaW5kZXggKi8gIi4vTWVz
aGVzL0NvbXByZXNzaW9uL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRyYWNvQ29tcHJl
c3Npb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Db21wcmVzc2lvbl9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJEcmFjb0NvbXByZXNzaW9uIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2NzZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9jc2cgKi8gIi4vTWVzaGVzL2NzZy50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJDU0ciLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9jc2dfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siQ1NHIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2dlb21l
dHJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL2dlb21ldHJ5ICovICIuL01lc2hlcy9nZW9tZXRyeS50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJHZW9tZXRyeSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2dlb21ldHJ5X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIkdlb21ldHJ5Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2dyb3VuZE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vZ3JvdW5kTWVzaCAqLyAiLi9NZXNoZXMvZ3JvdW5kTWVzaC50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJHcm91bmRNZXNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZ3JvdW5k
TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJHcm91bmRNZXNoIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RyYWlsTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90cmFpbE1lc2ggKi8gIi4vTWVzaGVz
L3RyYWlsTWVzaC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmFpbE1lc2giLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF90cmFpbE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVHJhaWxN
ZXNoIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2luc3RhbmNlZE1lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaW5z
dGFuY2VkTWVzaCAqLyAiLi9NZXNoZXMvaW5zdGFuY2VkTWVzaC50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJJbnN0YW5jZWRNZXNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaW5zdGFuY2VkTWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJJbnN0YW5jZWRNZXNoIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2xpbmVzTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9saW5lc01lc2ggKi8gIi4vTWVzaGVzL2xp
bmVzTWVzaC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMaW5lc01lc2giLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9saW5lc01lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTGluZXNNZXNo
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkluc3RhbmNlZExpbmVzTWVzaCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX2xpbmVzTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJJbnN0
YW5jZWRMaW5lc01lc2giXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9t
ZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9DcmVhdGlvbkRh
dGFTdG9yYWdlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOV9fWyJfQ3JlYXRpb25EYXRhU3RvcmFnZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJfSW5zdGFuY2VzQmF0Y2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9tZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIl9JbnN0YW5jZXNCYXRjaCJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJNZXNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOV9fWyJNZXNoIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmVydGV4RGF0YSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siVmVydGV4RGF0
YSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoQnVpbGRlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWVzaEJ1
aWxkZXIgKi8gIi4vTWVzaGVzL21lc2hCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1l
c2hCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWVzaEJ1aWxkZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzExX19bIk1lc2hCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX21lc2hTaW1wbGlmaWNhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWVzaFNpbXBsaWZpY2F0aW9uICovICIuL01l
c2hlcy9tZXNoU2ltcGxpZmljYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2ltcGxpZmlj
YXRpb25TZXR0aW5ncyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21lc2hTaW1wbGlmaWNhdGlvbl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siU2ltcGxpZmljYXRpb25TZXR0aW5ncyJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTaW1wbGlmaWNhdGlvblF1ZXVlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfbWVzaFNpbXBsaWZpY2F0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9f
WyJTaW1wbGlmaWNhdGlvblF1ZXVlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbXBsaWZp
Y2F0aW9uVHlwZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21lc2hTaW1wbGlmaWNhdGlvbl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siU2ltcGxpZmljYXRpb25UeXBlIl07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hTaW1wbGlmaWNhdGlvblNjZW5lQ29tcG9uZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9tZXNoU2ltcGxpZmljYXRpb25TY2VuZUNvbXBvbmVudCAqLyAiLi9NZXNoZXMvbWVzaFNpbXBs
aWZpY2F0aW9uU2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2ltcGxpY2F0
aW9uUXVldWVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21lc2hTaW1wbGlm
aWNhdGlvblNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJTaW1w
bGljYXRpb25RdWV1ZVNjZW5lQ29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX3BvbHlnb25NZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9wb2x5Z29uTWVzaCAqLyAiLi9NZXNoZXMvcG9seWdvbk1lc2gu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWdvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Bv
bHlnb25NZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJQb2x5Z29uIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlBvbHlnb25NZXNoQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX3BvbHlnb25NZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJQb2x5Z29uTWVz
aEJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3ViTWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3Vi
TWVzaCAqLyAiLi9NZXNoZXMvc3ViTWVzaC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCYXNlU3Vi
TWVzaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N1Yk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE1X19bIkJhc2VTdWJNZXNoIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN1Yk1lc2gi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zdWJNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
NV9fWyJTdWJNZXNoIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hMT0RM
ZXZlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vbWVzaExPRExldmVsICovICIuL01lc2hlcy9tZXNoTE9ETGV2ZWwudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTWVzaExPRExldmVsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbWVzaExPRExl
dmVsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJNZXNoTE9ETGV2ZWwiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdHJhbnNmb3JtTm9kZSAq
LyAiLi9NZXNoZXMvdHJhbnNmb3JtTm9kZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmFuc2Zv
cm1Ob2RlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdHJhbnNmb3JtTm9kZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTdfX1siVHJhbnNmb3JtTm9kZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9CdWlsZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQnVpbGRlcnMvaW5kZXggKi8gIi4vTWVzaGVzL0J1
aWxkZXJzL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJveEJ1aWxkZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9CdWlsZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThf
X1siQm94QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGhlcmVCdWlsZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE4X19bIlNwaGVyZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3lsaW5k
ZXJCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE4X19bIkN5bGluZGVyQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJUb3J1c0J1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CdWlsZGVyc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siVG9ydXNCdWlsZGVyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkxpbmVzQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0J1aWxk
ZXJzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJMaW5lc0J1aWxkZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxhbmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfQnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIlBsYW5lQnVp
bGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHcm91bmRCdWlsZGVyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfQnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19b
Ikdyb3VuZEJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGlsZWRCb3hCdWlsZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE4X19bIlRpbGVkQm94QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJE
aXNjQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0J1aWxkZXJzX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xOF9fWyJEaXNjQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJSaWJib25CdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIlJpYmJvbkJ1aWxkZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiSGVtaXNwaGVyZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9C
dWlsZGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siSGVtaXNwaGVyZUJ1
aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG9ydXNLbm90QnVpbGRlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0J1aWxkZXJzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
OF9fWyJUb3J1c0tub3RCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvbHlnb25C
dWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE4X19bIlBvbHlnb25CdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlNoYXBlQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0J1aWxkZXJzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJTaGFwZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTGF0aGVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIkxhdGhlQnVpbGRlciJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJUaWxlZFBsYW5lQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0J1aWxkZXJzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJUaWxlZFBs
YW5lQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUdWJlQnVpbGRlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0J1aWxkZXJzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
OF9fWyJUdWJlQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2x5aGVkcm9uQnVp
bGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0J1aWxkZXJzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOF9fWyJQb2x5aGVkcm9uQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJJY29TcGhlcmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQnVpbGRlcnNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIkljb1NwaGVyZUJ1aWxkZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRGVjYWxCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
QnVpbGRlcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIkRlY2FsQnVpbGRl
ciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kYXRhQnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kYXRhQnVm
ZmVyICovICIuL01lc2hlcy9kYXRhQnVmZmVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRhdGFC
dWZmZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kYXRhQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xOV9fWyJEYXRhQnVmZmVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1dlYkdMX3dlYkdMRGF0YUJ1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vV2ViR0wvd2ViR0xEYXRhQnVmZmVyICovICIuL01l
c2hlcy9XZWJHTC93ZWJHTERhdGFCdWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViR0xE
YXRhQnVmZmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfV2ViR0xfd2ViR0xEYXRhQnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJXZWJHTERhdGFCdWZmZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfV2ViR1BVX3dlYmdwdURhdGFCdWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzIxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1dlYkdQVS93
ZWJncHVEYXRhQnVmZmVyICovICIuL01lc2hlcy9XZWJHUFUvd2ViZ3B1RGF0YUJ1ZmZlci50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJXZWJHUFVEYXRhQnVmZmVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfV2ViR1BVX3dlYmdwdURhdGFCdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19b
IldlYkdQVURhdGFCdWZmZXIiXTsgfSk7CisKKworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvaW5zdGFuY2Vk
TWVzaC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL01lc2hlcy9pbnN0YW5jZWRNZXNoLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBJbnN0YW5jZWRNZXNoICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkluc3RhbmNlZE1lc2giLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEluc3RhbmNlZE1lc2g7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0
b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9hYnN0cmFj
dE1lc2ggKi8gIi4vTWVzaGVzL2Fic3RyYWN0TWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWVwQ29waWVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2RlZXBDb3Bp
ZXIgKi8gIi4vTWlzYy9kZWVwQ29waWVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vdHJhbnNmb3JtTm9kZSAqLyAiLi9NZXNoZXMvdHJhbnNmb3JtTm9kZS50
cyIpOworCisKKworCisKKworCitfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siTWVzaCJdLl9pbnN0YW5jZWRNZXNoRmFjdG9yeSA9IGZ1bmN0aW9uIChuYW1lLCBtZXNo
KSB7CisgICAgcmV0dXJuIG5ldyBJbnN0YW5jZWRNZXNoKG5hbWUsIG1lc2gpOworfTsKKy8qKgor
ICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBiYXNlZCBvbiBhIHNvdXJjZSBtZXNoLgorICovCit2YXIg
SW5zdGFuY2VkTWVzaCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShJbnN0YW5jZWRN
ZXNoLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIEluc3RhbmNlZE1lc2gobmFtZSwgc291cmNlKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNvdXJjZS5nZXRT
Y2VuZSgpKSB8fCB0aGlzOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhpcy5f
aW5kZXhJblNvdXJjZU1lc2hJbnN0YW5jZUFycmF5ID0gLTE7CisgICAgICAgIHNvdXJjZS5hZGRJ
bnN0YW5jZShfdGhpcyk7CisgICAgICAgIF90aGlzLl9zb3VyY2VNZXNoID0gc291cmNlOworICAg
ICAgICBfdGhpcy5fdW5JbmRleGVkID0gc291cmNlLl91bkluZGV4ZWQ7CisgICAgICAgIF90aGlz
LnBvc2l0aW9uLmNvcHlGcm9tKHNvdXJjZS5wb3NpdGlvbik7CisgICAgICAgIF90aGlzLnJvdGF0
aW9uLmNvcHlGcm9tKHNvdXJjZS5yb3RhdGlvbik7CisgICAgICAgIF90aGlzLnNjYWxpbmcuY29w
eUZyb20oc291cmNlLnNjYWxpbmcpOworICAgICAgICBpZiAoc291cmNlLnJvdGF0aW9uUXVhdGVy
bmlvbikgeworICAgICAgICAgICAgX3RoaXMucm90YXRpb25RdWF0ZXJuaW9uID0gc291cmNlLnJv
dGF0aW9uUXVhdGVybmlvbi5jbG9uZSgpOworICAgICAgICB9CisgICAgICAgIF90aGlzLmluZmlu
aXRlRGlzdGFuY2UgPSBzb3VyY2UuaW5maW5pdGVEaXN0YW5jZTsKKyAgICAgICAgX3RoaXMuc2V0
UGl2b3RNYXRyaXgoc291cmNlLmdldFBpdm90TWF0cml4KCkpOworICAgICAgICBfdGhpcy5yZWZy
ZXNoQm91bmRpbmdJbmZvKCk7CisgICAgICAgIF90aGlzLl9zeW5jU3ViTWVzaGVzKCk7CisgICAg
ICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3Ry
aW5nICJJbnN0YW5jZWRNZXNoIi4KKyAgICAgKi8KKyAgICBJbnN0YW5jZWRNZXNoLnByb3RvdHlw
ZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiSW5zdGFuY2Vk
TWVzaCI7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5zdGFuY2VkTWVzaC5w
cm90b3R5cGUsICJsaWdodFNvdXJjZXMiLCB7CisgICAgICAgIC8qKiBHZXRzIHRoZSBsaXN0IG9m
IGxpZ2h0cyBhZmZlY3RpbmcgdGhhdCBtZXNoICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZU1lc2guX2xpZ2h0U291cmNlczsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgSW5zdGFuY2VkTWVzaC5wcm90b3R5cGUuX3Jlc3luY0xpZ2h0
U291cmNlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gRG8gbm90aGluZyBhcyBhbGwgdGhl
IHdvcmsgd2lsbCBiZSBkb25lIGJ5IHNvdXJjZSBtZXNoCisgICAgfTsKKyAgICBJbnN0YW5jZWRN
ZXNoLnByb3RvdHlwZS5fcmVzeW5jTGlnaFNvdXJjZSA9IGZ1bmN0aW9uIChsaWdodCkgeworICAg
ICAgICAvLyBEbyBub3RoaW5nIGFzIGFsbCB0aGUgd29yayB3aWxsIGJlIGRvbmUgYnkgc291cmNl
IG1lc2gKKyAgICB9OworICAgIEluc3RhbmNlZE1lc2gucHJvdG90eXBlLl9yZW1vdmVMaWdodFNv
dXJjZSA9IGZ1bmN0aW9uIChsaWdodCwgZGlzcG9zZSkgeworICAgICAgICAvLyBEbyBub3RoaW5n
IGFzIGFsbCB0aGUgd29yayB3aWxsIGJlIGRvbmUgYnkgc291cmNlIG1lc2gKKyAgICB9OworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnN0YW5jZWRNZXNoLnByb3RvdHlwZSwgInJlY2VpdmVT
aGFkb3dzIiwgeworICAgICAgICAvLyBNZXRob2RzCisgICAgICAgIC8qKgorICAgICAgICAgKiBJ
ZiB0aGUgc291cmNlIG1lc2ggcmVjZWl2ZXMgc2hhZG93cworICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlTWVzaC5y
ZWNlaXZlU2hhZG93czsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KEluc3RhbmNlZE1lc2gucHJvdG90eXBlLCAibWF0ZXJpYWwiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaGUgbWF0ZXJpYWwgb2YgdGhlIHNvdXJjZSBtZXNoCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3Vy
Y2VNZXNoLm1hdGVyaWFsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoSW5zdGFuY2VkTWVzaC5wcm90b3R5cGUsICJ2aXNpYmlsaXR5IiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogVmlzaWJpbGl0eSBvZiB0aGUgc291cmNlIG1lc2gKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Nv
dXJjZU1lc2gudmlzaWJpbGl0eTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEluc3RhbmNlZE1lc2gucHJvdG90eXBlLCAic2tlbGV0b24iLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBTa2VsZXRvbiBvZiB0aGUgc291cmNlIG1lc2gKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Nv
dXJjZU1lc2guc2tlbGV0b247CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShJbnN0YW5jZWRNZXNoLnByb3RvdHlwZSwgInJlbmRlcmluZ0dyb3VwSWQiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBSZW5kZXJpbmcgZ3JvdW5kIGlkIG9mIHRoZSBzb3VyY2Ug
bWVzaAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fc291cmNlTWVzaC5yZW5kZXJpbmdHcm91cElkOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9z
b3VyY2VNZXNoIHx8IHZhbHVlID09PSB0aGlzLl9zb3VyY2VNZXNoLnJlbmRlcmluZ0dyb3VwSWQp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
L25vLW9wIHdpdGggd2FybmluZworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIkxvZ2dlciJdLldhcm4oIk5vdGUgLSBzZXR0aW5nIHJlbmRlcmlu
Z0dyb3VwSWQgb2YgYW4gaW5zdGFuY2VkIG1lc2ggaGFzIG5vIGVmZmVjdCBvbiB0aGUgc2NlbmUi
KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdG90YWwg
bnVtYmVyIG9mIHZlcnRpY2VzIChpbnRlZ2VyKS4KKyAgICAgKi8KKyAgICBJbnN0YW5jZWRNZXNo
LnByb3RvdHlwZS5nZXRUb3RhbFZlcnRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fc291cmNlTWVzaCA/IHRoaXMuX3NvdXJjZU1lc2guZ2V0VG90YWxWZXJ0aWNlcygp
IDogMDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBwb3NpdGl2ZSBpbnRlZ2Vy
IDogdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIHRoaXMgbWVzaCBnZW9tZXRyeS4KKyAg
ICAgKiBAcmV0dXJucyB0aGUgbnVtbmVyIG9mIGluZGljZXMgb3IgemVybyBpZiB0aGUgbWVzaCBo
YXMgbm8gZ2VvbWV0cnkuCisgICAgICovCisgICAgSW5zdGFuY2VkTWVzaC5wcm90b3R5cGUuZ2V0
VG90YWxJbmRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fc291cmNl
TWVzaC5nZXRUb3RhbEluZGljZXMoKTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShJbnN0YW5jZWRNZXNoLnByb3RvdHlwZSwgInNvdXJjZU1lc2giLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaGUgc291cmNlIG1lc2ggb2YgdGhlIGluc3RhbmNlCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3Vy
Y2VNZXNoOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBJcyB0aGlzIG5vZGUg
cmVhZHkgdG8gYmUgdXNlZC9yZW5kZXJlZAorICAgICAqIEBwYXJhbSBjb21wbGV0ZUNoZWNrIGRl
ZmluZXMgaWYgYSBjb21wbGV0ZSBjaGVjayAoaW5jbHVkaW5nIG1hdGVyaWFscyBhbmQgbGlnaHRz
KSBoYXMgdG8gYmUgZG9uZSAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKiBAcmV0dXJuIHtib29s
ZWFufSBpcyBpdCByZWFkeQorICAgICAqLworICAgIEluc3RhbmNlZE1lc2gucHJvdG90eXBlLmlz
UmVhZHkgPSBmdW5jdGlvbiAoY29tcGxldGVDaGVjaykgeworICAgICAgICBpZiAoY29tcGxldGVD
aGVjayA9PT0gdm9pZCAwKSB7IGNvbXBsZXRlQ2hlY2sgPSBmYWxzZTsgfQorICAgICAgICByZXR1
cm4gdGhpcy5fc291cmNlTWVzaC5pc1JlYWR5KGNvbXBsZXRlQ2hlY2ssIHRydWUpOworICAgIH07
CisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBpbnRlZ2VycyBvciBhIHR5cGVk
IGFycmF5IChJbnQzMkFycmF5LCBVaW50MzJBcnJheSwgVWludDE2QXJyYXkpIHBvcHVsYXRlZCB3
aXRoIHRoZSBtZXNoIGluZGljZXMuCisgICAgICogQHBhcmFtIGtpbmQga2luZCBvZiB2ZXJ0aWNp
ZXMgdG8gcmV0cmVpdmUgKGVnLiBwb3NpdG9ucywgbm9ybWFscywgdXZzLCBldGMuKQorICAgICAq
IEBwYXJhbSBjb3B5V2hlblNoYXJlZCBJZiB0cnVlIChkZWZhdWx0IGZhbHNlKSBhbmQgYW5kIGlm
IHRoZSBtZXNoIGdlb21ldHJ5IGlzIHNoYXJlZCBhbW9uZyBzb21lIG90aGVyIG1lc2hlcywgdGhl
IHJldHVybmVkIGFycmF5IGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgb25lLgorICAgICAqIEBy
ZXR1cm5zIGEgZmxvYXQgYXJyYXkgb3IgYSBGbG9hdDMyQXJyYXkgb2YgdGhlIHJlcXVlc3RlZCBr
aW5kIG9mIGRhdGEgOiBwb3NpdG9ucywgbm9ybWFscywgdXZzLCBldGMuCisgICAgICovCisgICAg
SW5zdGFuY2VkTWVzaC5wcm90b3R5cGUuZ2V0VmVydGljZXNEYXRhID0gZnVuY3Rpb24gKGtpbmQs
IGNvcHlXaGVuU2hhcmVkKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VNZXNoLmdldFZl
cnRpY2VzRGF0YShraW5kLCBjb3B5V2hlblNoYXJlZCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSB2ZXJ0ZXggZGF0YSBvZiB0aGUgbWVzaCBnZW9tZXRyeSBmb3IgdGhlIHJlcXVl
c3RlZCBga2luZGAuCisgICAgICogSWYgdGhlIG1lc2ggaGFzIG5vIGdlb21ldHJ5LCBhIG5ldyBH
ZW9tZXRyeSBvYmplY3QgaXMgc2V0IHRvIHRoZSBtZXNoIGFuZCB0aGVuIHBhc3NlZCB0aGlzIHZl
cnRleCBkYXRhLgorICAgICAqIFRoZSBgZGF0YWAgYXJlIGVpdGhlciBhIG51bWVyaWMgYXJyYXkg
ZWl0aGVyIGEgRmxvYXQzMkFycmF5LgorICAgICAqIFRoZSBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAg
aXMgcGFzc2VkIGFzIGlzIHRvIHRoZSB1bmRlcmx5aW5nIEdlb21ldHJ5IG9iamVjdCBjb25zdHJ1
Y3RvciAoaWYgaW5pdGlhbmlsbHkgbm9uZSkgb3IgdXBkYXRlci4KKyAgICAgKiBUaGUgcGFyYW1l
dGVyIGBzdHJpZGVgIGlzIGFuIG9wdGlvbmFsIHBvc2l0aXZlIGludGVnZXIsIGl0IGlzIHVzdWFs
bHkgYXV0b21hdGljYWxseSBkZWR1Y3RlZCBmcm9tIHRoZSBga2luZGAgKDMgZm9yIHBvc2l0aW9u
cyBvciBub3JtYWxzLCAyIGZvciBVViwgZXRjKS4KKyAgICAgKiBOb3RlIHRoYXQgYSBuZXcgdW5k
ZXJseWluZyBWZXJ0ZXhCdWZmZXIgb2JqZWN0IGlzIGNyZWF0ZWQgZWFjaCBjYWxsLgorICAgICAq
IElmIHRoZSBga2luZGAgaXMgdGhlIGBQb3NpdGlvbktpbmRgLCB0aGUgbWVzaCBCb3VuZGluZ0lu
Zm8gaXMgcmVuZXdlZCwgc28gdGhlIGJvdW5kaW5nIGJveCBhbmQgc3BoZXJlLCBhbmQgdGhlIG1l
c2ggV29ybGQgTWF0cml4IGlzIHJlY29tcHV0ZWQuCisgICAgICoKKyAgICAgKiBQb3NzaWJsZSBg
a2luZGAgdmFsdWVzIDoKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5Qb3NpdGlvbktpbmQKKyAgICAg
KiAtIFZlcnRleEJ1ZmZlci5VVktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjJLaW5kCisg
ICAgICogLSBWZXJ0ZXhCdWZmZXIuVVYzS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNEtp
bmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjVLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIu
VVY2S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLkNvbG9yS2luZAorICAgICAqIC0gVmVydGV4
QnVmZmVyLk1hdHJpY2VzSW5kaWNlc0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNl
c0luZGljZXNFeHRyYUtpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNL
aW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNXZWlnaHRzRXh0cmFLaW5kCisgICAg
ICoKKyAgICAgKiBSZXR1cm5zIHRoZSBNZXNoLgorICAgICAqLworICAgIEluc3RhbmNlZE1lc2gu
cHJvdG90eXBlLnNldFZlcnRpY2VzRGF0YSA9IGZ1bmN0aW9uIChraW5kLCBkYXRhLCB1cGRhdGFi
bGUsIHN0cmlkZSkgeworICAgICAgICBpZiAodGhpcy5zb3VyY2VNZXNoKSB7CisgICAgICAgICAg
ICB0aGlzLnNvdXJjZU1lc2guc2V0VmVydGljZXNEYXRhKGtpbmQsIGRhdGEsIHVwZGF0YWJsZSwg
c3RyaWRlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VNZXNoOworICAg
IH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgZXhpc3RpbmcgdmVydGV4IGRhdGEgb2Yg
dGhlIG1lc2ggZ2VvbWV0cnkgZm9yIHRoZSByZXF1ZXN0ZWQgYGtpbmRgLgorICAgICAqIElmIHRo
ZSBtZXNoIGhhcyBubyBnZW9tZXRyeSwgaXQgaXMgc2ltcGx5IHJldHVybmVkIGFzIGl0IGlzLgor
ICAgICAqIFRoZSBgZGF0YWAgYXJlIGVpdGhlciBhIG51bWVyaWMgYXJyYXkgZWl0aGVyIGEgRmxv
YXQzMkFycmF5LgorICAgICAqIE5vIG5ldyB1bmRlcmx5aW5nIFZlcnRleEJ1ZmZlciBvYmplY3Qg
aXMgY3JlYXRlZC4KKyAgICAgKiBJZiB0aGUgYGtpbmRgIGlzIHRoZSBgUG9zaXRpb25LaW5kYCBh
bmQgaWYgYHVwZGF0ZUV4dGVuZHNgIGlzIHRydWUsIHRoZSBtZXNoIEJvdW5kaW5nSW5mbyBpcyBy
ZW5ld2VkLCBzbyB0aGUgYm91bmRpbmcgYm94IGFuZCBzcGhlcmUsIGFuZCB0aGUgbWVzaCBXb3Js
ZCBNYXRyaXggaXMgcmVjb21wdXRlZC4KKyAgICAgKiBJZiB0aGUgcGFyYW1ldGVyIGBtYWtlSXRV
bmlxdWVgIGlzIHRydWUsIGEgbmV3IGdsb2JhbCBnZW9tZXRyeSBpcyBjcmVhdGVkIGZyb20gdGhp
cyBwb3NpdGlvbnMgYW5kIGlzIHNldCB0byB0aGUgbWVzaC4KKyAgICAgKgorICAgICAqIFBvc3Np
YmxlIGBraW5kYCB2YWx1ZXMgOgorICAgICAqIC0gVmVydGV4QnVmZmVyLlBvc2l0aW9uS2luZAor
ICAgICAqIC0gVmVydGV4QnVmZmVyLlVWS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWMktp
bmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjNLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIu
VVY0S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNUtpbmQKKyAgICAgKiAtIFZlcnRleEJ1
ZmZlci5VVjZLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuQ29sb3JLaW5kCisgICAgICogLSBW
ZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk1h
dHJpY2VzSW5kaWNlc0V4dHJhS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk1hdHJpY2VzV2Vp
Z2h0c0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQK
KyAgICAgKgorICAgICAqIFJldHVybnMgdGhlIE1lc2guCisgICAgICovCisgICAgSW5zdGFuY2Vk
TWVzaC5wcm90b3R5cGUudXBkYXRlVmVydGljZXNEYXRhID0gZnVuY3Rpb24gKGtpbmQsIGRhdGEs
IHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1ZSkgeworICAgICAgICBpZiAodGhpcy5zb3VyY2VN
ZXNoKSB7CisgICAgICAgICAgICB0aGlzLnNvdXJjZU1lc2gudXBkYXRlVmVydGljZXNEYXRhKGtp
bmQsIGRhdGEsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRoaXMuc291cmNlTWVzaDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMg
dGhlIG1lc2ggaW5kaWNlcy4KKyAgICAgKiBFeHBlY3RzIGFuIGFycmF5IHBvcHVsYXRlZCB3aXRo
IGludGVnZXJzIG9yIGEgdHlwZWQgYXJyYXkgKEludDMyQXJyYXksIFVpbnQzMkFycmF5LCBVaW50
MTZBcnJheSkuCisgICAgICogSWYgdGhlIG1lc2ggaGFzIG5vIGdlb21ldHJ5LCBhIG5ldyBHZW9t
ZXRyeSBvYmplY3QgaXMgY3JlYXRlZCBhbmQgc2V0IHRvIHRoZSBtZXNoLgorICAgICAqIFRoaXMg
bWV0aG9kIGNyZWF0ZXMgYSBuZXcgaW5kZXggYnVmZmVyIGVhY2ggY2FsbC4KKyAgICAgKiBSZXR1
cm5zIHRoZSBNZXNoLgorICAgICAqLworICAgIEluc3RhbmNlZE1lc2gucHJvdG90eXBlLnNldElu
ZGljZXMgPSBmdW5jdGlvbiAoaW5kaWNlcywgdG90YWxWZXJ0aWNlcykgeworICAgICAgICBpZiAo
dG90YWxWZXJ0aWNlcyA9PT0gdm9pZCAwKSB7IHRvdGFsVmVydGljZXMgPSBudWxsOyB9CisgICAg
ICAgIGlmICh0aGlzLnNvdXJjZU1lc2gpIHsKKyAgICAgICAgICAgIHRoaXMuc291cmNlTWVzaC5z
ZXRJbmRpY2VzKGluZGljZXMsIHRvdGFsVmVydGljZXMpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLnNvdXJjZU1lc2g7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCb29sZWFuIDog
VHJ1ZSBpZiB0aGUgbWVzaCBvd25zIHRoZSByZXF1ZXN0ZWQga2luZCBvZiBkYXRhLgorICAgICAq
LworICAgIEluc3RhbmNlZE1lc2gucHJvdG90eXBlLmlzVmVydGljZXNEYXRhUHJlc2VudCA9IGZ1
bmN0aW9uIChraW5kKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VNZXNoLmlzVmVydGlj
ZXNEYXRhUHJlc2VudChraW5kKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4g
YXJyYXkgb2YgaW5kaWNlcyAoSW5kaWNlc0FycmF5KS4KKyAgICAgKi8KKyAgICBJbnN0YW5jZWRN
ZXNoLnByb3RvdHlwZS5nZXRJbmRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5fc291cmNlTWVzaC5nZXRJbmRpY2VzKCk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoSW5zdGFuY2VkTWVzaC5wcm90b3R5cGUsICJfcG9zaXRpb25zIiwgeworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VNZXNo
Ll9wb3NpdGlvbnM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFRoaXMgbWV0
aG9kIHJlY29tcHV0ZXMgYW5kIHNldHMgYSBuZXcgQm91bmRpbmdJbmZvIHRvIHRoZSBtZXNoIHVu
bGVzcyBpdCBpcyBsb2NrZWQuCisgICAgICogVGhpcyBtZWFucyB0aGUgbWVzaCB1bmRlcmx5aW5n
IGJvdW5kaW5nIGJveCBhbmQgc3BoZXJlIGFyZSByZWNvbXB1dGVkLgorICAgICAqIEBwYXJhbSBh
cHBseVNrZWxldG9uIGRlZmluZXMgd2hldGhlciB0byBhcHBseSB0aGUgc2tlbGV0b24gYmVmb3Jl
IGNvbXB1dGluZyB0aGUgYm91bmRpbmcgaW5mbworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50
IG1lc2gKKyAgICAgKi8KKyAgICBJbnN0YW5jZWRNZXNoLnByb3RvdHlwZS5yZWZyZXNoQm91bmRp
bmdJbmZvID0gZnVuY3Rpb24gKGFwcGx5U2tlbGV0b24pIHsKKyAgICAgICAgaWYgKGFwcGx5U2tl
bGV0b24gPT09IHZvaWQgMCkgeyBhcHBseVNrZWxldG9uID0gZmFsc2U7IH0KKyAgICAgICAgaWYg
KHRoaXMuX2JvdW5kaW5nSW5mbyAmJiB0aGlzLl9ib3VuZGluZ0luZm8uaXNMb2NrZWQpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZhciBiaWFzID0gdGhp
cy5fc291cmNlTWVzaC5nZW9tZXRyeSA/IHRoaXMuX3NvdXJjZU1lc2guZ2VvbWV0cnkuYm91bmRp
bmdCaWFzIDogbnVsbDsKKyAgICAgICAgdGhpcy5fcmVmcmVzaEJvdW5kaW5nSW5mbyh0aGlzLl9z
b3VyY2VNZXNoLl9nZXRQb3NpdGlvbkRhdGEoYXBwbHlTa2VsZXRvbiksIGJpYXMpOworICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgSW5zdGFuY2Vk
TWVzaC5wcm90b3R5cGUuX3ByZUFjdGl2YXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5fY3VycmVudExPRCkgeworICAgICAgICAgICAgdGhpcy5fY3VycmVudExPRC5fcHJlQWN0
aXZhdGUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8q
KiBAaGlkZGVuICovCisgICAgSW5zdGFuY2VkTWVzaC5wcm90b3R5cGUuX2FjdGl2YXRlID0gZnVu
Y3Rpb24gKHJlbmRlcklkLCBpbnRlcm1lZGlhdGVSZW5kZXJpbmcpIHsKKyAgICAgICAgaWYgKCF0
aGlzLl9zb3VyY2VNZXNoLnN1Yk1lc2hlcykgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkxvZ2dlciJdLldhcm4oIkluc3RhbmNlcyBzaG91
bGQgb25seSBiZSBjcmVhdGVkIGZvciBtZXNoZXMgd2l0aCBnZW9tZXRyeS4iKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5fY3VycmVudExPRCkgeworICAgICAgICAgICAgdGhpcy5fY3Vy
cmVudExPRC5fcmVnaXN0ZXJJbnN0YW5jZUZvclJlbmRlcklkKHRoaXMsIHJlbmRlcklkKTsKKyAg
ICAgICAgICAgIGlmIChpbnRlcm1lZGlhdGVSZW5kZXJpbmcpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMuX2N1cnJlbnRMT0QuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2lzQWN0
aXZlSW50ZXJtZWRpYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRMT0Qu
X2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX29ubHlGb3JJbnN0YW5jZXNJbnRlcm1lZGlh
dGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXRoaXMuX2N1cnJlbnRMT0QuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2lz
QWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRMT0QuX2ludGVybmFs
QWJzdHJhY3RNZXNoRGF0YUluZm8uX29ubHlGb3JJbnN0YW5jZXMgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBJbnN0YW5jZWRNZXNoLnByb3RvdHlwZS5fcG9zdEFjdGl2YXRlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBpZiAodGhpcy5fZWRnZXNSZW5kZXJlciAmJiB0aGlzLl9lZGdlc1Jl
bmRlcmVyLmlzRW5hYmxlZCAmJiB0aGlzLl9zb3VyY2VNZXNoLl9yZW5kZXJpbmdHcm91cCkgewor
ICAgICAgICAgICAgdGhpcy5fc291cmNlTWVzaC5fcmVuZGVyaW5nR3JvdXAuX2VkZ2VzUmVuZGVy
ZXJzLnB1c2godGhpcy5fZWRnZXNSZW5kZXJlcik7CisgICAgICAgIH0KKyAgICB9OworICAgIElu
c3RhbmNlZE1lc2gucHJvdG90eXBlLmdldFdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBpZiAodGhpcy5fY3VycmVudExPRCAmJiB0aGlzLl9jdXJyZW50TE9ELmJpbGxib2FyZE1v
ZGUgIT09IF90cmFuc2Zvcm1Ob2RlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRyYW5z
Zm9ybU5vZGUiXS5CSUxMQk9BUkRNT0RFX05PTkUgJiYgdGhpcy5fY3VycmVudExPRC5fbWFzdGVy
TWVzaCAhPT0gdGhpcykgeworICAgICAgICAgICAgdmFyIHRlbXBNYXN0ZXIgPSB0aGlzLl9jdXJy
ZW50TE9ELl9tYXN0ZXJNZXNoOworICAgICAgICAgICAgdGhpcy5fY3VycmVudExPRC5fbWFzdGVy
TWVzaCA9IHRoaXM7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXS5jb3B5RnJvbSh0aGlzLl9j
dXJyZW50TE9ELmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKSk7CisgICAgICAgICAgICB0aGlzLl9j
dXJyZW50TE9ELl9tYXN0ZXJNZXNoID0gdGVtcE1hc3RlcjsKKyAgICAgICAgICAgIHJldHVybiBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG1wVmVjdG9y
cyJdLk1hdHJpeFswXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlw
ZS5nZXRXb3JsZE1hdHJpeC5jYWxsKHRoaXMpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEluc3RhbmNlZE1lc2gucHJvdG90eXBlLCAiaXNBbkluc3RhbmNlIiwgeworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFzc29jaWF0ZWQg
TE9EIEFic3RyYWN0TWVzaC4KKyAgICAgKi8KKyAgICBJbnN0YW5jZWRNZXNoLnByb3RvdHlwZS5n
ZXRMT0QgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAgICAgIGlmICghY2FtZXJhKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB2YXIgYm91bmRpbmdJbmZv
ID0gdGhpcy5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgdGhpcy5fY3VycmVudExPRCA9IHRo
aXMuc291cmNlTWVzaC5nZXRMT0QoY2FtZXJhLCBib3VuZGluZ0luZm8uYm91bmRpbmdTcGhlcmUp
OworICAgICAgICBpZiAodGhpcy5fY3VycmVudExPRCA9PT0gdGhpcy5zb3VyY2VNZXNoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VNZXNoOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLl9jdXJyZW50TE9EOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBJ
bnN0YW5jZWRNZXNoLnByb3RvdHlwZS5fc3luY1N1Yk1lc2hlcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5yZWxlYXNlU3ViTWVzaGVzKCk7CisgICAgICAgIGlmICh0aGlzLl9zb3VyY2VN
ZXNoLnN1Yk1lc2hlcykgeworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IHRoaXMuX3NvdXJjZU1lc2guc3ViTWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgICAgIHRoaXMuX3NvdXJjZU1lc2guc3ViTWVzaGVzW2luZGV4XS5jbG9uZSh0aGlzLCB0aGlz
Ll9zb3VyY2VNZXNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgSW5zdGFuY2VkTWVzaC5wcm90
b3R5cGUuX2dlbmVyYXRlUG9pbnRzQXJyYXkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biB0aGlzLl9zb3VyY2VNZXNoLl9nZW5lcmF0ZVBvaW50c0FycmF5KCk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEluc3RhbmNlZE1lc2ggZnJvbSB0aGUgY3VycmVudCBt
ZXNoLgorICAgICAqIC0gbmFtZSAoc3RyaW5nKSA6IHRoZSBjbG9uZWQgbWVzaCBuYW1lCisgICAg
ICogLSBuZXdQYXJlbnQgKG9wdGlvbmFsIE5vZGUpIDogdGhlIG9wdGlvbmFsIE5vZGUgdG8gcGFy
ZW50IHRoZSBjbG9uZSB0by4KKyAgICAgKiAtIGRvTm90Q2xvbmVDaGlsZHJlbiAob3B0aW9uYWwg
Ym9vbGVhbiwgZGVmYXVsdCBgZmFsc2VgKSA6IGlmIGB0cnVlYCB0aGUgbW9kZWwgY2hpbGRyZW4g
YXJlbid0IGNsb25lZC4KKyAgICAgKgorICAgICAqIFJldHVybnMgdGhlIGNsb25lLgorICAgICAq
LworICAgIEluc3RhbmNlZE1lc2gucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUsIG5l
d1BhcmVudCwgZG9Ob3RDbG9uZUNoaWxkcmVuKSB7CisgICAgICAgIGlmIChuZXdQYXJlbnQgPT09
IHZvaWQgMCkgeyBuZXdQYXJlbnQgPSBudWxsOyB9CisgICAgICAgIHZhciByZXN1bHQgPSB0aGlz
Ll9zb3VyY2VNZXNoLmNyZWF0ZUluc3RhbmNlKG5hbWUpOworICAgICAgICAvLyBEZWVwIGNvcHkK
KyAgICAgICAgX01pc2NfZGVlcENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJE
ZWVwQ29waWVyIl0uRGVlcENvcHkodGhpcywgcmVzdWx0LCBbIm5hbWUiLCAic3ViTWVzaGVzIiwg
InVuaXF1ZUlkIl0sIFtdKTsKKyAgICAgICAgLy8gQm91bmRpbmcgaW5mbworICAgICAgICB0aGlz
LnJlZnJlc2hCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgLy8gUGFyZW50CisgICAgICAgIGlmIChu
ZXdQYXJlbnQpIHsKKyAgICAgICAgICAgIHJlc3VsdC5wYXJlbnQgPSBuZXdQYXJlbnQ7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFkb05vdENsb25lQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIC8v
IENoaWxkcmVuCisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5n
ZXRTY2VuZSgpLm1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
bWVzaCA9IHRoaXMuZ2V0U2NlbmUoKS5tZXNoZXNbaW5kZXhdOworICAgICAgICAgICAgICAgIGlm
IChtZXNoLnBhcmVudCA9PT0gdGhpcykgeworICAgICAgICAgICAgICAgICAgICBtZXNoLmNsb25l
KG1lc2gubmFtZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBJ
bnN0YW5jZWRNZXNoLgorICAgICAqIFJldHVybnMgbm90aGluZy4KKyAgICAgKi8KKyAgICBJbnN0
YW5jZWRNZXNoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGRvTm90UmVjdXJzZSwgZGlz
cG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMpIHsKKyAgICAgICAgaWYgKGRpc3Bvc2VNYXRlcmlhbEFu
ZFRleHR1cmVzID09PSB2b2lkIDApIHsgZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMgPSBmYWxz
ZTsgfQorICAgICAgICAvLyBSZW1vdmUgZnJvbSBtZXNoCisgICAgICAgIHRoaXMuX3NvdXJjZU1l
c2gucmVtb3ZlSW5zdGFuY2UodGhpcyk7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9z
ZS5jYWxsKHRoaXMsIGRvTm90UmVjdXJzZSwgZGlzcG9zZU1hdGVyaWFsQW5kVGV4dHVyZXMpOwor
ICAgIH07CisgICAgcmV0dXJuIEluc3RhbmNlZE1lc2g7Cit9KF9NZXNoZXNfYWJzdHJhY3RNZXNo
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkFic3RyYWN0TWVzaCJdKSk7CisKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL2xpbmVzTWVzaC50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL2xpbmVzTWVzaC50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBMaW5lc01lc2gsIEluc3RhbmNlZExpbmVzTWVzaCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJMaW5lc01lc2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIExpbmVzTWVzaDsg
fSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJJbnN0YW5jZWRMaW5lc01lc2giLCBmdW5jdGlvbigpIHsg
cmV0dXJuIEluc3RhbmNlZExpbmVzTWVzaDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3Ig
Ki8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9tZXNoICovICIuL01l
c2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19pbnN0YW5j
ZWRNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NZXNoZXMvaW5zdGFuY2VkTWVzaCAqLyAiLi9NZXNoZXMvaW5zdGFuY2VkTWVzaC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVy
aWFscy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX3NoYWRlck1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc2hhZGVy
TWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL3NoYWRlck1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL21hdGVy
aWFsSGVscGVyICovICIuL01hdGVyaWFscy9tYXRlcmlhbEhlbHBlci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2NvbG9yX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2NvbG9yLmZy
YWdtZW50ICovICIuL1NoYWRlcnMvY29sb3IuZnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfU2hhZGVyc19jb2xvcl92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvY29sb3IudmVydGV4ICov
ICIuL1NoYWRlcnMvY29sb3IudmVydGV4LnRzIik7CisKKworCisKKworCisKKworCisKKy8qKgor
ICogTGluZSBtZXNoCisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEw
MS9wYXJhbWV0cmljX3NoYXBlcworICovCit2YXIgTGluZXNNZXNoID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZXh0ZW5kcyJdKExpbmVzTWVzaCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IExpbmVzTWVzaAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUK
KyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBw
YXJhbSBwYXJlbnQgZGVmaW5lcyB0aGUgcGFyZW50IG1lc2ggaWYgYW55CisgICAgICogQHBhcmFt
IHNvdXJjZSBkZWZpbmVzIHRoZSBvcHRpb25hbCBzb3VyY2UgTGluZXNNZXNoIHVzZWQgdG8gY2xv
bmUgZGF0YSBmcm9tCisgICAgICogQHBhcmFtIGRvTm90Q2xvbmVDaGlsZHJlbiBXaGVuIGNsb25p
bmcsIHNraXAgY2xvbmluZyBjaGlsZCBtZXNoZXMgb2Ygc291cmNlLCBkZWZhdWx0IEZhbHNlLgor
ICAgICAqIFdoZW4gZmFsc2UsIGFjaGlldmVkIGJ5IGNhbGxpbmcgYSBjbG9uZSgpLCBhbHNvIHBh
c3NpbmcgRmFsc2UuCisgICAgICogVGhpcyB3aWxsIG1ha2UgY3JlYXRpb24gb2YgY2hpbGRyZW4s
IHJlY3Vyc2l2ZS4KKyAgICAgKiBAcGFyYW0gdXNlVmVydGV4Q29sb3IgZGVmaW5lcyBpZiB0aGlz
IExpbmVzTWVzaCBzdXBwb3J0cyB2ZXJ0ZXggY29sb3IKKyAgICAgKiBAcGFyYW0gdXNlVmVydGV4
QWxwaGEgZGVmaW5lcyBpZiB0aGlzIExpbmVzTWVzaCBzdXBwb3J0cyB2ZXJ0ZXggYWxwaGEKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBMaW5lc01lc2gobmFtZSwgc2NlbmUsIHBhcmVudCwgc291cmNl
LCBkb05vdENsb25lQ2hpbGRyZW4sIAorICAgIC8qKgorICAgICAqIElmIHZlcnRleCBjb2xvciBz
aG91bGQgYmUgYXBwbGllZCB0byB0aGUgbWVzaAorICAgICAqLworICAgIHVzZVZlcnRleENvbG9y
LCAKKyAgICAvKioKKyAgICAgKiBJZiB2ZXJ0ZXggYWxwaGEgc2hvdWxkIGJlIGFwcGxpZWQgdG8g
dGhlIG1lc2gKKyAgICAgKi8KKyAgICB1c2VWZXJ0ZXhBbHBoYSkgeworICAgICAgICBpZiAoc2Nl
bmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgaWYgKHBhcmVudCA9PT0g
dm9pZCAwKSB7IHBhcmVudCA9IG51bGw7IH0KKyAgICAgICAgaWYgKHNvdXJjZSA9PT0gdm9pZCAw
KSB7IHNvdXJjZSA9IG51bGw7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgbmFtZSwgc2NlbmUsIHBhcmVudCwgc291cmNlLCBkb05vdENsb25lQ2hpbGRyZW4pIHx8IHRo
aXM7CisgICAgICAgIF90aGlzLnVzZVZlcnRleENvbG9yID0gdXNlVmVydGV4Q29sb3I7CisgICAg
ICAgIF90aGlzLnVzZVZlcnRleEFscGhhID0gdXNlVmVydGV4QWxwaGE7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBDb2xvciBvZiB0aGUgbGluZSAoRGVmYXVsdDogV2hpdGUpCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5jb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjMiXSgxLCAxLCAxKTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEFscGhhIG9mIHRoZSBsaW5lIChEZWZhdWx0OiAxKQorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuYWxwaGEgPSAxOworICAgICAgICBpZiAoc291cmNlKSB7CisgICAgICAgICAgICBf
dGhpcy5jb2xvciA9IHNvdXJjZS5jb2xvci5jbG9uZSgpOworICAgICAgICAgICAgX3RoaXMuYWxw
aGEgPSBzb3VyY2UuYWxwaGE7CisgICAgICAgICAgICBfdGhpcy51c2VWZXJ0ZXhDb2xvciA9IHNv
dXJjZS51c2VWZXJ0ZXhDb2xvcjsKKyAgICAgICAgICAgIF90aGlzLnVzZVZlcnRleEFscGhhID0g
c291cmNlLnVzZVZlcnRleEFscGhhOworICAgICAgICB9CisgICAgICAgIF90aGlzLmludGVyc2Vj
dGlvblRocmVzaG9sZCA9IDAuMTsKKyAgICAgICAgdmFyIGRlZmluZXMgPSBbXTsKKyAgICAgICAg
dmFyIG9wdGlvbnMgPSB7CisgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5k
LCAid29ybGQwIiwgIndvcmxkMSIsICJ3b3JsZDIiLCAid29ybGQzIl0sCisgICAgICAgICAgICB1
bmlmb3JtczogWyJ2Q2xpcFBsYW5lIiwgInZDbGlwUGxhbmUyIiwgInZDbGlwUGxhbmUzIiwgInZD
bGlwUGxhbmU0IiwgIndvcmxkIiwgInZpZXdQcm9qZWN0aW9uIl0sCisgICAgICAgICAgICBuZWVk
QWxwaGFCbGVuZGluZzogdHJ1ZSwKKyAgICAgICAgICAgIGRlZmluZXM6IGRlZmluZXMKKyAgICAg
ICAgfTsKKyAgICAgICAgaWYgKHVzZVZlcnRleEFscGhhID09PSBmYWxzZSkgeworICAgICAgICAg
ICAgb3B0aW9ucy5uZWVkQWxwaGFCbGVuZGluZyA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmICghdXNlVmVydGV4Q29sb3IpIHsKKyAgICAgICAgICAgIG9wdGlvbnMudW5pZm9ybXMucHVz
aCgiY29sb3IiKTsKKyAgICAgICAgICAgIF90aGlzLmNvbG9yNCA9IG5ldyBfTWF0aHNfbWF0aF9j
b2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjQiXSgpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb3B0aW9ucy5kZWZpbmVzLnB1c2goIiNkZWZp
bmUgVkVSVEVYQ09MT1IiKTsKKyAgICAgICAgICAgIG9wdGlvbnMuYXR0cmlidXRlcy5wdXNoKF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJd
LkNvbG9yS2luZCk7CisgICAgICAgIH0KKyAgICAgICAgX3RoaXMuX2NvbG9yU2hhZGVyID0gbmV3
IF9NYXRlcmlhbHNfc2hhZGVyTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
U2hhZGVyTWF0ZXJpYWwiXSgiY29sb3JTaGFkZXIiLCBfdGhpcy5nZXRTY2VuZSgpLCAiY29sb3Ii
LCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBMaW5lc01lc2gu
cHJvdG90eXBlLl9hZGRDbGlwUGxhbmVEZWZpbmUgPSBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAg
ICAgdmFyIGRlZmluZSA9ICIjZGVmaW5lICIgKyBsYWJlbDsKKyAgICAgICAgdmFyIGluZGV4ID0g
dGhpcy5fY29sb3JTaGFkZXIub3B0aW9ucy5kZWZpbmVzLmluZGV4T2YoZGVmaW5lKTsKKyAgICAg
ICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2NvbG9yU2hhZGVyLm9wdGlvbnMuZGVmaW5lcy5wdXNoKGRlZmluZSk7Cisg
ICAgfTsKKyAgICBMaW5lc01lc2gucHJvdG90eXBlLl9yZW1vdmVDbGlwUGxhbmVEZWZpbmUgPSBm
dW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgdmFyIGRlZmluZSA9ICIjZGVmaW5lICIgKyBsYWJl
bDsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fY29sb3JTaGFkZXIub3B0aW9ucy5kZWZpbmVz
LmluZGV4T2YoZGVmaW5lKTsKKyAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NvbG9yU2hhZGVyLm9wdGlvbnMu
ZGVmaW5lcy5zcGxpY2UoaW5kZXgsIDEpOworICAgIH07CisgICAgTGluZXNNZXNoLnByb3RvdHlw
ZS5pc1JlYWR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLmdldFNj
ZW5lKCk7CisgICAgICAgIC8vIENsaXAgcGxhbmVzCisgICAgICAgIHNjZW5lLmNsaXBQbGFuZSA/
IHRoaXMuX2FkZENsaXBQbGFuZURlZmluZSgiQ0xJUFBMQU5FIikgOiB0aGlzLl9yZW1vdmVDbGlw
UGxhbmVEZWZpbmUoIkNMSVBQTEFORSIpOworICAgICAgICBzY2VuZS5jbGlwUGxhbmUyID8gdGhp
cy5fYWRkQ2xpcFBsYW5lRGVmaW5lKCJDTElQUExBTkUyIikgOiB0aGlzLl9yZW1vdmVDbGlwUGxh
bmVEZWZpbmUoIkNMSVBQTEFORTIiKTsKKyAgICAgICAgc2NlbmUuY2xpcFBsYW5lMyA/IHRoaXMu
X2FkZENsaXBQbGFuZURlZmluZSgiQ0xJUFBMQU5FMyIpIDogdGhpcy5fcmVtb3ZlQ2xpcFBsYW5l
RGVmaW5lKCJDTElQUExBTkUzIik7CisgICAgICAgIHNjZW5lLmNsaXBQbGFuZTQgPyB0aGlzLl9h
ZGRDbGlwUGxhbmVEZWZpbmUoIkNMSVBQTEFORTQiKSA6IHRoaXMuX3JlbW92ZUNsaXBQbGFuZURl
ZmluZSgiQ0xJUFBMQU5FNCIpOworICAgICAgICBpZiAoIXRoaXMuX2NvbG9yU2hhZGVyLmlzUmVh
ZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBfc3VwZXIucHJvdG90eXBlLmlzUmVhZHkuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyAiTGluZU1lc2giCisgICAgICovCisgICAgTGlu
ZXNNZXNoLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAiTGluZXNNZXNoIjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaW5l
c01lc2gucHJvdG90eXBlLCAibWF0ZXJpYWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBA
aGlkZGVuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9jb2xvclNoYWRlcjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaW5lc01lc2gucHJvdG90eXBlLCAiY2hlY2tDb2xsaXNp
b25zIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIC8qKiBAaGlkZGVuICovCisgICAgTGluZXNNZXNoLnByb3RvdHlw
ZS5fYmluZCA9IGZ1bmN0aW9uIChzdWJNZXNoLCBlZmZlY3QsIGZpbGxNb2RlKSB7CisgICAgICAg
IGlmICghdGhpcy5fZ2VvbWV0cnkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICB9CisgICAgICAgIHZhciBjb2xvckVmZmVjdCA9IHRoaXMuX2NvbG9yU2hhZGVyLmdldEVmZmVj
dCgpOworICAgICAgICAvLyBWQk9zCisgICAgICAgIHZhciBpbmRleFRvQmluZCA9IHRoaXMuaXNV
bkluZGV4ZWQgPyBudWxsIDogdGhpcy5fZ2VvbWV0cnkuZ2V0SW5kZXhCdWZmZXIoKTsKKyAgICAg
ICAgdGhpcy5fZ2VvbWV0cnkuX2JpbmQoY29sb3JFZmZlY3QsIGluZGV4VG9CaW5kKTsKKyAgICAg
ICAgLy8gQ29sb3IKKyAgICAgICAgaWYgKCF0aGlzLnVzZVZlcnRleENvbG9yKSB7CisgICAgICAg
ICAgICB2YXIgX2EgPSB0aGlzLmNvbG9yLCByID0gX2EuciwgZyA9IF9hLmcsIGIgPSBfYS5iOwor
ICAgICAgICAgICAgdGhpcy5jb2xvcjQuc2V0KHIsIGcsIGIsIHRoaXMuYWxwaGEpOworICAgICAg
ICAgICAgdGhpcy5fY29sb3JTaGFkZXIuc2V0Q29sb3I0KCJjb2xvciIsIHRoaXMuY29sb3I0KTsK
KyAgICAgICAgfQorICAgICAgICAvLyBDbGlwIHBsYW5lcworICAgICAgICBfTWF0ZXJpYWxzX21h
dGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsSGVscGVy
Il0uQmluZENsaXBQbGFuZShjb2xvckVmZmVjdCwgdGhpcy5nZXRTY2VuZSgpKTsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIExpbmVzTWVzaC5w
cm90b3R5cGUuX2RyYXcgPSBmdW5jdGlvbiAoc3ViTWVzaCwgZmlsbE1vZGUsIGluc3RhbmNlc0Nv
dW50KSB7CisgICAgICAgIGlmICghdGhpcy5fZ2VvbWV0cnkgfHwgIXRoaXMuX2dlb21ldHJ5Lmdl
dFZlcnRleEJ1ZmZlcnMoKSB8fCAoIXRoaXMuX3VuSW5kZXhlZCAmJiAhdGhpcy5fZ2VvbWV0cnku
Z2V0SW5kZXhCdWZmZXIoKSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9
CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLmdldFNjZW5lKCkuZ2V0RW5naW5lKCk7CisgICAg
ICAgIC8vIERyYXcgb3JkZXIKKyAgICAgICAgaWYgKHRoaXMuX3VuSW5kZXhlZCkgeworICAgICAg
ICAgICAgZW5naW5lLmRyYXdBcnJheXNUeXBlKF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWwiXS5MaW5lTGlzdERyYXdNb2RlLCBzdWJNZXNo
LnZlcnRpY2VzU3RhcnQsIHN1Yk1lc2gudmVydGljZXNDb3VudCwgaW5zdGFuY2VzQ291bnQpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW5naW5lLmRyYXdFbGVtZW50
c1R5cGUoX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJN
YXRlcmlhbCJdLkxpbmVMaXN0RHJhd01vZGUsIHN1Yk1lc2guaW5kZXhTdGFydCwgc3ViTWVzaC5p
bmRleENvdW50LCBpbnN0YW5jZXNDb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyBvZiB0aGUgbGluZSBtZXNoCisg
ICAgICogQHBhcmFtIGRvTm90UmVjdXJzZSBJZiBjaGlsZHJlbiBzaG91bGQgYmUgZGlzcG9zZWQK
KyAgICAgKi8KKyAgICBMaW5lc01lc2gucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZG9O
b3RSZWN1cnNlKSB7CisgICAgICAgIHRoaXMuX2NvbG9yU2hhZGVyLmRpc3Bvc2UoZmFsc2UsIGZh
bHNlLCB0cnVlKTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcywg
ZG9Ob3RSZWN1cnNlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgTGlu
ZU1lc2ggb2JqZWN0IGNsb25lZCBmcm9tIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgKi8KKyAgICBM
aW5lc01lc2gucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUsIG5ld1BhcmVudCwgZG9O
b3RDbG9uZUNoaWxkcmVuKSB7CisgICAgICAgIGlmIChuZXdQYXJlbnQgPT09IHZvaWQgMCkgeyBu
ZXdQYXJlbnQgPSBudWxsOyB9CisgICAgICAgIHJldHVybiBuZXcgTGluZXNNZXNoKG5hbWUsIHRo
aXMuZ2V0U2NlbmUoKSwgbmV3UGFyZW50LCB0aGlzLCBkb05vdENsb25lQ2hpbGRyZW4pOworICAg
IH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBJbnN0YW5jZWRMaW5lc01lc2ggb2Jq
ZWN0IGZyb20gdGhlIG1lc2ggbW9kZWwuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25q
cy5jb20vaG93X3RvL2hvd190b191c2VfaW5zdGFuY2VzCisgICAgICogQHBhcmFtIG5hbWUgZGVm
aW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3IGluc3RhbmNlCisgICAgICogQHJldHVybnMgYSBuZXcg
SW5zdGFuY2VkTGluZXNNZXNoCisgICAgICovCisgICAgTGluZXNNZXNoLnByb3RvdHlwZS5jcmVh
dGVJbnN0YW5jZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHJldHVybiBuZXcgSW5zdGFu
Y2VkTGluZXNNZXNoKG5hbWUsIHRoaXMpOworICAgIH07CisgICAgcmV0dXJuIExpbmVzTWVzaDsK
K30oX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1lc2giXSkpOwor
CisvKioKKyAqIENyZWF0ZXMgYW4gaW5zdGFuY2UgYmFzZWQgb24gYSBzb3VyY2UgTGluZXNNZXNo
CisgKi8KK3ZhciBJbnN0YW5jZWRMaW5lc01lc2ggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
X3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRl
bmRzIl0oSW5zdGFuY2VkTGluZXNNZXNoLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIEluc3RhbmNl
ZExpbmVzTWVzaChuYW1lLCBzb3VyY2UpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNh
bGwodGhpcywgbmFtZSwgc291cmNlKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5pbnRlcnNlY3Rp
b25UaHJlc2hvbGQgPSBzb3VyY2UuaW50ZXJzZWN0aW9uVGhyZXNob2xkOworICAgICAgICByZXR1
cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyAiSW5z
dGFuY2VkTGluZXNNZXNoIi4KKyAgICAgKi8KKyAgICBJbnN0YW5jZWRMaW5lc01lc2gucHJvdG90
eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJJbnN0YW5j
ZWRMaW5lc01lc2giOworICAgIH07CisgICAgcmV0dXJuIEluc3RhbmNlZExpbmVzTWVzaDsKK30o
X01lc2hlc19pbnN0YW5jZWRNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkluc3Rh
bmNlZE1lc2giXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy9tZXNoLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL21lc2gu
dHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IF9DcmVhdGlvbkRhdGFTdG9yYWdlLCBfSW5zdGFuY2VzQmF0Y2gsIE1lc2ggKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0NyZWF0aW9uRGF0YVN0b3JhZ2UiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9DcmVhdGlvbkRhdGFTdG9yYWdlOyB9KTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIl9JbnN0YW5jZXNCYXRjaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0luc3RhbmNlc0JhdGNo
OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1lc2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1lc2g7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1
bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNj
X29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAiLi9N
aXNjL3Rvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVlcENvcGll
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWlzYy9kZWVwQ29waWVyICovICIuL01pc2MvZGVlcENvcGllci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdGFncyAqLyAiLi9NaXNjL3RhZ3MudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21h
dGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMv
bWF0aC5jb2xvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9ub2RlICov
ICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2J1ZmZlciAq
LyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9tZXNoLnZlcnRleERhdGEgKi8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9nZW9tZXRyeV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZ2VvbWV0cnkgKi8gIi4v
TWVzaGVzL2dlb21ldHJ5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Fic3RyYWN0
TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1lc2gudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfc3ViTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3ViTWVzaCAqLyAiLi9NZXNoZXMvc3ViTWVz
aC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DdWxsaW5nX2JvdW5kaW5nSW5mb19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L0N1bGxpbmcvYm91bmRpbmdJbmZvICovICIuL0N1bGxpbmcvYm91bmRpbmdJbmZvLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9t
YXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX211bHRpTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvbXVsdGlNYXRlcmlh
bCAqLyAiLi9NYXRlcmlhbHMvbXVsdGlNYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9Mb2FkaW5nX3NjZW5lTG9hZGVyRmxhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9Mb2FkaW5nL3NjZW5lTG9hZGVyRmxh
Z3MgKi8gIi4vTG9hZGluZy9zY2VuZUxvYWRlckZsYWdzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5n
aW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01p
c2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWlzYy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGV2VG9vbHMgKi8gIi4vTWlzYy9k
ZXZUb29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZUNvbXBvbmVudF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX21lc2hMT0RMZXZlbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWVzaExPRExldmVsICovICIuL01lc2hlcy9tZXNo
TE9ETGV2ZWwudHMiKTsKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworLyoqCisgKiBAaGlkZGVuCisgKiovCit2YXIgX0NyZWF0aW9uRGF0YVN0b3JhZ2Ug
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gX0NyZWF0aW9uRGF0
YVN0b3JhZ2UoKSB7CisgICAgfQorICAgIHJldHVybiBfQ3JlYXRpb25EYXRhU3RvcmFnZTsKK30o
KSk7CisKKy8qKgorICogQGhpZGRlbgorICoqLwordmFyIF9JbnN0YW5jZURhdGFTdG9yYWdlID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIF9JbnN0YW5jZURhdGFT
dG9yYWdlKCkgeworICAgICAgICB0aGlzLnZpc2libGVJbnN0YW5jZXMgPSB7fTsKKyAgICAgICAg
dGhpcy5iYXRjaENhY2hlID0gbmV3IF9JbnN0YW5jZXNCYXRjaCgpOworICAgICAgICB0aGlzLmlu
c3RhbmNlc0J1ZmZlclNpemUgPSAzMiAqIDE2ICogNDsgLy8gbGV0J3Mgc3RhcnQgd2l0aCBhIG1h
eGltdW0gb2YgMzIgaW5zdGFuY2VzCisgICAgfQorICAgIHJldHVybiBfSW5zdGFuY2VEYXRhU3Rv
cmFnZTsKK30oKSk7CisvKioKKyAqIEBoaWRkZW4KKyAqKi8KK3ZhciBfSW5zdGFuY2VzQmF0Y2gg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gX0luc3RhbmNlc0Jh
dGNoKCkgeworICAgICAgICB0aGlzLm11c3RSZXR1cm4gPSBmYWxzZTsKKyAgICAgICAgdGhpcy52
aXNpYmxlSW5zdGFuY2VzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMucmVuZGVyU2VsZiA9
IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLmhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nID0g
bmV3IEFycmF5KCk7CisgICAgfQorICAgIHJldHVybiBfSW5zdGFuY2VzQmF0Y2g7Cit9KCkpOwor
CisvKioKKyAqIEBoaWRkZW4KKyAqKi8KK3ZhciBfSW50ZXJuYWxNZXNoRGF0YUluZm8gPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gX0ludGVybmFsTWVzaERhdGFJ
bmZvKCkgeworICAgICAgICB0aGlzLl9hcmVOb3JtYWxzRnJvemVuID0gZmFsc2U7IC8vIFdpbGwg
YmUgdXNlZCBieSByaWJib25zIG1haW5seQorICAgICAgICAvLyBXaWxsIGJlIHVzZWQgdG8gc2F2
ZSBhIHNvdXJjZSBtZXNoIHJlZmVyZW5jZSwgSWYgYW55CisgICAgICAgIHRoaXMuX3NvdXJjZSA9
IG51bGw7CisgICAgICAgIC8vIFdpbGwgYmUgdXNlZCB0byBmb3IgZmFzdCBjbG9uZWQgbWVzaCBs
b29rdXAKKyAgICAgICAgdGhpcy5tZXNoTWFwID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcHJlQWN0
aXZhdGVJZCA9IC0xOworICAgICAgICB0aGlzLl9MT0RMZXZlbHMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgLy8gTW9ycGgKKyAgICAgICAgdGhpcy5fbW9ycGhUYXJnZXRNYW5hZ2VyID0gbnVsbDsK
KyAgICB9CisgICAgcmV0dXJuIF9JbnRlcm5hbE1lc2hEYXRhSW5mbzsKK30oKSk7CisvKioKKyAq
IENsYXNzIHVzZWQgdG8gcmVwcmVzZW50IHJlbmRlcmFibGUgbW9kZWxzCisgKi8KK3ZhciBNZXNo
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKE1lc2gsIF9zdXBlcik7CisgICAgLyoq
CisgICAgICogQGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFtIG5hbWUgVGhlIHZhbHVlIHVzZWQg
Ynkgc2NlbmUuZ2V0TWVzaEJ5TmFtZSgpIHRvIGRvIGEgbG9va3VwLgorICAgICAqIEBwYXJhbSBz
Y2VuZSBUaGUgc2NlbmUgdG8gYWRkIHRoaXMgbWVzaCB0by4KKyAgICAgKiBAcGFyYW0gcGFyZW50
IFRoZSBwYXJlbnQgb2YgdGhpcyBtZXNoLCBpZiBpdCBoYXMgb25lCisgICAgICogQHBhcmFtIHNv
dXJjZSBBbiBvcHRpb25hbCBNZXNoIGZyb20gd2hpY2ggZ2VvbWV0cnkgaXMgc2hhcmVkLCBjbG9u
ZWQuCisgICAgICogQHBhcmFtIGRvTm90Q2xvbmVDaGlsZHJlbiBXaGVuIGNsb25pbmcsIHNraXAg
Y2xvbmluZyBjaGlsZCBtZXNoZXMgb2Ygc291cmNlLCBkZWZhdWx0IEZhbHNlLgorICAgICAqICAg
ICAgICAgICAgICAgICAgV2hlbiBmYWxzZSwgYWNoaWV2ZWQgYnkgY2FsbGluZyBhIGNsb25lKCks
IGFsc28gcGFzc2luZyBGYWxzZS4KKyAgICAgKiAgICAgICAgICAgICAgICAgIFRoaXMgd2lsbCBt
YWtlIGNyZWF0aW9uIG9mIGNoaWxkcmVuLCByZWN1cnNpdmUuCisgICAgICogQHBhcmFtIGNsb25l
UGh5c2ljc0ltcG9zdG9yIFdoZW4gY2xvbmluZywgaW5jbHVkZSBjbG9uaW5nIG1lc2ggcGh5c2lj
cyBpbXBvc3RvciwgZGVmYXVsdCBUcnVlLgorICAgICAqLworICAgIGZ1bmN0aW9uIE1lc2gobmFt
ZSwgc2NlbmUsIHBhcmVudCwgc291cmNlLCBkb05vdENsb25lQ2hpbGRyZW4sIGNsb25lUGh5c2lj
c0ltcG9zdG9yKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVs
bDsgfQorICAgICAgICBpZiAocGFyZW50ID09PSB2b2lkIDApIHsgcGFyZW50ID0gbnVsbDsgfQor
ICAgICAgICBpZiAoc291cmNlID09PSB2b2lkIDApIHsgc291cmNlID0gbnVsbDsgfQorICAgICAg
ICBpZiAoY2xvbmVQaHlzaWNzSW1wb3N0b3IgPT09IHZvaWQgMCkgeyBjbG9uZVBoeXNpY3NJbXBv
c3RvciA9IHRydWU7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFt
ZSwgc2NlbmUpIHx8IHRoaXM7CisgICAgICAgIC8vIEludGVybmFsIGRhdGEKKyAgICAgICAgX3Ro
aXMuX2ludGVybmFsTWVzaERhdGFJbmZvID0gbmV3IF9JbnRlcm5hbE1lc2hEYXRhSW5mbygpOwor
ICAgICAgICAvLyBNZW1iZXJzCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBkZWxh
eSBsb2FkaW5nIHN0YXRlIG9mIHRoZSBtZXNoICh3aGVuIGRlbGF5IGxvYWRpbmcgaXMgdHVybmVk
IG9uKQorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vdXNp
bmdfdGhlX2luY3JlbWVudGFsX2xvYWRpbmdfc3lzdGVtCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5kZWxheUxvYWRTdGF0ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTdfX1siQ29uc3RhbnRzIl0uREVMQVlMT0FEU1RBVEVfTk9ORTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgaW5zdGFuY2VzIGNyZWF0ZWQgZnJvbSB0
aGlzIG1lc2gKKyAgICAgICAgICogaXQgaXMgbm90IHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIG1h
bnVhbGx5LgorICAgICAgICAgKiBOb3RlIGFsc28gdGhhdCB0aGUgb3JkZXIgb2YgdGhlIEluc3Rh
bmNlZE1lc2ggd2loaW4gdGhlIGFycmF5IGlzIG5vdCBzaWduaWZpY2FudCBhbmQgbWlnaHQgY2hh
bmdlLgorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93
X3RvX3VzZV9pbnN0YW5jZXMKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmluc3RhbmNlcyA9
IG5ldyBBcnJheSgpOworICAgICAgICAvLyBQcml2YXRlCisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIF90aGlzLl9jcmVhdGlvbkRhdGFTdG9yYWdlID0gbnVsbDsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2dlb21ldHJ5ID0gbnVsbDsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2luc3RhbmNlRGF0YVN0b3JhZ2UgPSBuZXcgX0lu
c3RhbmNlRGF0YVN0b3JhZ2UoKTsKKyAgICAgICAgX3RoaXMuX2VmZmVjdGl2ZU1hdGVyaWFsID0g
bnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX3Nob3VsZEdlbmVy
YXRlRmxhdFNoYWRpbmcgPSBmYWxzZTsKKyAgICAgICAgLy8gVXNlIGJ5IGJ1aWxkZXIgb25seSB0
byBrbm93IHdoYXQgb3JpZW50YXRpb24gd2VyZSB0aGUgbWVzaCBidWlsZCBpbi4KKyAgICAgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX29yaWdpbmFsQnVpbGRlclNpZGVPcmllbnRh
dGlvbiA9IE1lc2guREVGQVVMVFNJREU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVc2UgdGhp
cyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIG9yaWdpbmFsIHNpZGUgb3JpZW50YXRpb24gZGVmaW5l
ZCBhdCBjb25zdHJ1Y3Rpb24gdGltZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub3ZlcnJp
ZGVNYXRlcmlhbFNpZGVPcmllbnRhdGlvbiA9IG51bGw7CisgICAgICAgIHNjZW5lID0gX3RoaXMu
Z2V0U2NlbmUoKTsKKyAgICAgICAgaWYgKHNvdXJjZSkgeworICAgICAgICAgICAgLy8gR2VvbWV0
cnkKKyAgICAgICAgICAgIGlmIChzb3VyY2UuX2dlb21ldHJ5KSB7CisgICAgICAgICAgICAgICAg
c291cmNlLl9nZW9tZXRyeS5hcHBseVRvTWVzaChfdGhpcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBEZWVwIGNvcHkKKyAgICAgICAgICAgIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHNvdXJjZSwgX3Ro
aXMsIFsibmFtZSIsICJtYXRlcmlhbCIsICJza2VsZXRvbiIsICJpbnN0YW5jZXMiLCAicGFyZW50
IiwgInVuaXF1ZUlkIiwKKyAgICAgICAgICAgICAgICAic291cmNlIiwgIm1ldGFkYXRhIiwgImhh
c0xPRExldmVscyIsICJnZW9tZXRyeSIsICJpc0Jsb2NrZWQiLCAiYXJlTm9ybWFsc0Zyb3plbiIs
CisgICAgICAgICAgICAgICAgIm9uQmVmb3JlRHJhd09ic2VydmFibGUiLCAib25CZWZvcmVSZW5k
ZXJPYnNlcnZhYmxlIiwgIm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlIiwgIm9uQmVmb3JlRHJhdyIs
CisgICAgICAgICAgICAgICAgIm9uQWZ0ZXJXb3JsZE1hdHJpeFVwZGF0ZU9ic2VydmFibGUiLCAi
b25Db2xsaWRlT2JzZXJ2YWJsZSIsICJvbkNvbGxpc2lvblBvc2l0aW9uQ2hhbmdlT2JzZXJ2YWJs
ZSIsICJvblJlYnVpbGRPYnNlcnZhYmxlIiwKKyAgICAgICAgICAgICAgICAib25EaXNwb3NlT2Jz
ZXJ2YWJsZSIsICJsaWdodFNvdXJjZXMiCisgICAgICAgICAgICBdLCBbIl9wb3NlTWF0cml4Il0p
OworICAgICAgICAgICAgLy8gU291cmNlIG1lc2gKKyAgICAgICAgICAgIF90aGlzLl9pbnRlcm5h
bE1lc2hEYXRhSW5mby5fc291cmNlID0gc291cmNlOworICAgICAgICAgICAgaWYgKHNjZW5lLnVz
ZUNsb25lZE1lc2hoTWFwKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzb3VyY2UuX2ludGVybmFs
TWVzaERhdGFJbmZvLm1lc2hNYXApIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlLl9pbnRl
cm5hbE1lc2hEYXRhSW5mby5tZXNoTWFwID0ge307CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHNvdXJjZS5faW50ZXJuYWxNZXNoRGF0YUluZm8ubWVzaE1hcFtfdGhpcy51bmlx
dWVJZF0gPSBfdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENvbnN0cnVjdGlv
biBQYXJhbXMKKyAgICAgICAgICAgIC8vIENsb25lIHBhcmFtZXRlcnMgYWxsb3dpbmcgbWVzaCB0
byBiZSB1cGRhdGVkIGluIGNhc2Ugb2YgcGFyYW1ldHJpYyBzaGFwZXMuCisgICAgICAgICAgICBf
dGhpcy5fb3JpZ2luYWxCdWlsZGVyU2lkZU9yaWVudGF0aW9uID0gc291cmNlLl9vcmlnaW5hbEJ1
aWxkZXJTaWRlT3JpZW50YXRpb247CisgICAgICAgICAgICBfdGhpcy5fY3JlYXRpb25EYXRhU3Rv
cmFnZSA9IHNvdXJjZS5fY3JlYXRpb25EYXRhU3RvcmFnZTsKKyAgICAgICAgICAgIC8vIEFuaW1h
dGlvbiByYW5nZXMKKyAgICAgICAgICAgIGlmIChzb3VyY2UuX3JhbmdlcykgeworICAgICAgICAg
ICAgICAgIHZhciByYW5nZXMgPSBzb3VyY2UuX3JhbmdlczsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBuYW1lIGluIHJhbmdlcykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlcy5o
YXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyYW5nZXNb
bmFtZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF90aGlzLmNyZWF0ZUFuaW1hdGlvblJhbmdl
KG5hbWUsIHJhbmdlc1tuYW1lXS5mcm9tLCByYW5nZXNbbmFtZV0udG8pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE1ldGFkYXRhCisgICAgICAgICAg
ICBpZiAoc291cmNlLm1ldGFkYXRhICYmIHNvdXJjZS5tZXRhZGF0YS5jbG9uZSkgeworICAgICAg
ICAgICAgICAgIF90aGlzLm1ldGFkYXRhID0gc291cmNlLm1ldGFkYXRhLmNsb25lKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5tZXRh
ZGF0YSA9IHNvdXJjZS5tZXRhZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRh
Z3MKKyAgICAgICAgICAgIGlmIChfTWlzY190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIlRhZ3MiXSAmJiBfTWlzY190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRh
Z3MiXS5IYXNUYWdzKHNvdXJjZSkpIHsKKyAgICAgICAgICAgICAgICBfTWlzY190YWdzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRhZ3MiXS5BZGRUYWdzVG8oX3RoaXMsIF9NaXNjX3Rh
Z3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGFncyJdLkdldFRhZ3Moc291cmNlLCB0
cnVlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBQYXJlbnQKKyAgICAgICAgICAg
IF90aGlzLnBhcmVudCA9IHNvdXJjZS5wYXJlbnQ7CisgICAgICAgICAgICAvLyBQaXZvdAorICAg
ICAgICAgICAgX3RoaXMuc2V0UGl2b3RNYXRyaXgoc291cmNlLmdldFBpdm90TWF0cml4KCkpOwor
ICAgICAgICAgICAgX3RoaXMuaWQgPSBuYW1lICsgIi4iICsgc291cmNlLmlkOworICAgICAgICAg
ICAgLy8gTWF0ZXJpYWwKKyAgICAgICAgICAgIF90aGlzLm1hdGVyaWFsID0gc291cmNlLm1hdGVy
aWFsOworICAgICAgICAgICAgdmFyIGluZGV4OworICAgICAgICAgICAgaWYgKCFkb05vdENsb25l
Q2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAgICAvLyBDaGlsZHJlbgorICAgICAgICAgICAgICAg
IHZhciBkaXJlY3REZXNjZW5kYW50cyA9IHNvdXJjZS5nZXREZXNjZW5kYW50cyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleF8xID0gMDsgaW5kZXhfMSA8IGRpcmVjdERlc2Nl
bmRhbnRzLmxlbmd0aDsgaW5kZXhfMSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjaGls
ZCA9IGRpcmVjdERlc2NlbmRhbnRzW2luZGV4XzFdOworICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQuY2xvbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmNsb25lKG5hbWUg
KyAiLiIgKyBjaGlsZC5uYW1lLCBfdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBQaHlzaWNzIGNsb25l
CisgICAgICAgICAgICBpZiAoc2NlbmUuZ2V0UGh5c2ljc0VuZ2luZSkgeworICAgICAgICAgICAg
ICAgIHZhciBwaHlzaWNzRW5naW5lID0gc2NlbmUuZ2V0UGh5c2ljc0VuZ2luZSgpOworICAgICAg
ICAgICAgICAgIGlmIChjbG9uZVBoeXNpY3NJbXBvc3RvciAmJiBwaHlzaWNzRW5naW5lKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBpbXBvc3RvciA9IHBoeXNpY3NFbmdpbmUuZ2V0SW1wb3N0
b3JGb3JQaHlzaWNzT2JqZWN0KHNvdXJjZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbXBv
c3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucGh5c2ljc0ltcG9zdG9yID0g
aW1wb3N0b3IuY2xvbmUoX3RoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUGFydGljbGVzCisgICAgICAg
ICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzY2VuZS5wYXJ0aWNsZVN5c3RlbXMubGVuZ3Ro
OyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHN5c3RlbSA9IHNjZW5lLnBhcnRpY2xl
U3lzdGVtc1tpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKHN5c3RlbS5lbWl0dGVyID09PSBz
b3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLmNsb25lKHN5c3RlbS5uYW1lLCBf
dGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgX3Ro
aXMucmVmcmVzaEJvdW5kaW5nSW5mbygpOworICAgICAgICAgICAgX3RoaXMuY29tcHV0ZVdvcmxk
TWF0cml4KHRydWUpOworICAgICAgICB9CisgICAgICAgIC8vIFBhcmVudAorICAgICAgICBpZiAo
cGFyZW50ICE9PSBudWxsKSB7CisgICAgICAgICAgICBfdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Cisg
ICAgICAgIH0KKyAgICAgICAgX3RoaXMuX2luc3RhbmNlRGF0YVN0b3JhZ2UuaGFyZHdhcmVJbnN0
YW5jZWRSZW5kZXJpbmcgPSBfdGhpcy5nZXRFbmdpbmUoKS5nZXRDYXBzKCkuaW5zdGFuY2VkQXJy
YXlzOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMg
dGhlIGRlZmF1bHQgc2lkZSBvcmllbnRhdGlvbi4KKyAgICAgKiBAcGFyYW0gb3JpZW50YXRpb24g
dGhlIG9yaWVudGF0aW9uIHRvIHZhbHVlIHRvIGF0dGVtcHQgdG8gZ2V0CisgICAgICogQHJldHVy
bnMgdGhlIGRlZmF1bHQgb3JpZW50YXRpb24KKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAg
TWVzaC5fR2V0RGVmYXVsdFNpZGVPcmllbnRhdGlvbiA9IGZ1bmN0aW9uIChvcmllbnRhdGlvbikg
eworICAgICAgICByZXR1cm4gb3JpZW50YXRpb24gfHwgTWVzaC5GUk9OVFNJREU7IC8vIHdvcmtz
IGFzIE1lc2guRlJPTlRTSURFIGlzIDAKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShNZXNoLnByb3RvdHlwZSwgIm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZSIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCBiZWZvcmUgcmVuZGVyaW5nIHRoZSBt
ZXNoCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm8uX29uQmVmb3JlUmVuZGVyT2JzZXJ2YWJs
ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTWVzaERhdGFJbmZvLl9vbkJlZm9y
ZVJlbmRlck9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mby5fb25CZWZvcmVSZW5kZXJPYnNlcnZh
YmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzaC5w
cm90b3R5cGUsICJvbkJlZm9yZUJpbmRPYnNlcnZhYmxlIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSBiaW5kaW5nIHRoZSBtZXNoCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5f
aW50ZXJuYWxNZXNoRGF0YUluZm8uX29uQmVmb3JlQmluZE9ic2VydmFibGUpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mby5fb25CZWZvcmVCaW5kT2JzZXJ2YWJs
ZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk9i
c2VydmFibGUiXSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lu
dGVybmFsTWVzaERhdGFJbmZvLl9vbkJlZm9yZUJpbmRPYnNlcnZhYmxlOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzaC5wcm90b3R5cGUsICJvbkFmdGVy
UmVuZGVyT2JzZXJ2YWJsZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJp
Z2dlcmVkIGFmdGVyIHJlbmRlcmluZyB0aGUgbWVzaAorICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5faW50ZXJuYWxNZXNoRGF0YUlu
Zm8uX29uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5faW50
ZXJuYWxNZXNoRGF0YUluZm8uX29uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29i
c2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxNZXNoRGF0YUlu
Zm8uX29uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoTWVzaC5wcm90b3R5cGUsICJvbkJlZm9yZURyYXdPYnNlcnZhYmxl
IiwgeworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgYmVmb3JlIGRy
YXdpbmcgdGhlIG1lc2gKKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBpZiAoIXRoaXMuX2ludGVybmFsTWVzaERhdGFJbmZvLl9vbkJlZm9yZURyYXdP
YnNlcnZhYmxlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm8u
X29uQmVmb3JlRHJhd09ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mby5fb25CZWZvcmVEcmF3T2Jz
ZXJ2YWJsZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1l
c2gucHJvdG90eXBlLCAib25CZWZvcmVEcmF3IiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
U2V0cyBhIGNhbGxiYWNrIHRvIGNhbGwgYmVmb3JlIGRyYXdpbmcgdGhlIG1lc2guIEl0IGlzIHJl
Y29tbWVuZGVkIHRvIHVzZSBvbkJlZm9yZURyYXdPYnNlcnZhYmxlIGluc3RlYWQKKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fb25CZWZvcmVEcmF3T2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQmVm
b3JlRHJhd09ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQmVmb3JlRHJhd09ic2VydmVyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX29uQmVmb3JlRHJhd09ic2VydmVyID0gdGhp
cy5vbkJlZm9yZURyYXdPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXNoLnByb3RvdHlwZSwgImhhc0luc3RhbmNl
cyIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5pbnN0YW5jZXMubGVuZ3RoID4gMDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KE1lc2gucHJvdG90eXBlLCAibW9ycGhUYXJnZXRNYW5hZ2VyIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBtb3JwaCB0YXJnZXQgbWFuYWdl
cgorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3Rv
X3VzZV9tb3JwaHRhcmdldHMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsTWVzaERhdGFJbmZvLl9tb3JwaFRh
cmdldE1hbmFnZXI7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm8uX21vcnBoVGFyZ2V0
TWFuYWdlciA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mby5fbW9ycGhUYXJnZXRN
YW5hZ2VyID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9zeW5jR2VvbWV0cnlXaXRoTW9ycGhU
YXJnZXRNYW5hZ2VyKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShNZXNoLnByb3RvdHlwZSwgInNvdXJjZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIHNvdXJjZSBtZXNoICh0aGUgb25lIHVzZWQgdG8gY2xvbmUgdGhpcyBvbmUgZnJv
bSkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2ludGVybmFsTWVzaERhdGFJbmZvLl9zb3VyY2U7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXNoLnByb3RvdHlwZSwgImlzVW5JbmRl
eGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBp
bmRpY2F0aW5nIHRoYXQgdGhpcyBtZXNoIGRvZXMgbm90IHVzZSBpbmRleCBidWZmZXIKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3VuSW5kZXhlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl91bkluZGV4ZWQgIT09IHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5fdW5JbmRleGVkID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdGhpcy5f
bWFya1N1Yk1lc2hlc0FzQXR0cmlidXRlc0RpcnR5KCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIC8vIE1ldGhvZHMKKyAgICBNZXNoLnByb3RvdHlwZS5pbnN0YW50aWF0
ZUhpZXJhcnljaHkgPSBmdW5jdGlvbiAobmV3UGFyZW50KSB7CisgICAgICAgIGlmIChuZXdQYXJl
bnQgPT09IHZvaWQgMCkgeyBuZXdQYXJlbnQgPSBudWxsOyB9CisgICAgICAgIHZhciBpbnN0YW5j
ZSA9IHRoaXMuY3JlYXRlSW5zdGFuY2UoImluc3RhbmNlIG9mICIgKyAodGhpcy5uYW1lIHx8IHRo
aXMuaWQpKTsKKyAgICAgICAgaW5zdGFuY2UucGFyZW50ID0gbmV3UGFyZW50IHx8IHRoaXMucGFy
ZW50OworICAgICAgICBpbnN0YW5jZS5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb24uY2xvbmUoKTsK
KyAgICAgICAgaW5zdGFuY2Uuc2NhbGluZyA9IHRoaXMuc2NhbGluZy5jbG9uZSgpOworICAgICAg
ICBpZiAodGhpcy5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIGluc3RhbmNlLnJv
dGF0aW9uUXVhdGVybmlvbiA9IHRoaXMucm90YXRpb25RdWF0ZXJuaW9uLmNsb25lKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnN0YW5jZS5yb3RhdGlvbiA9IHRo
aXMucm90YXRpb24uY2xvbmUoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAs
IF9hID0gdGhpcy5nZXRDaGlsZFRyYW5zZm9ybU5vZGVzKHRydWUpOyBfaSA8IF9hLmxlbmd0aDsg
X2krKykgeworICAgICAgICAgICAgdmFyIGNoaWxkID0gX2FbX2ldOworICAgICAgICAgICAgY2hp
bGQuaW5zdGFudGlhdGVIaWVyYXJ5Y2h5KGluc3RhbmNlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjbGFzcyBu
YW1lCisgICAgICogQHJldHVybnMgdGhlIHN0cmluZyAiTWVzaCIuCisgICAgICovCisgICAgTWVz
aC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
Ik1lc2giOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1lc2gucHJvdG90eXBl
LCAiX2lzTWVzaCIsIHsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgLyoqCisgICAgICogUmV0dXJucyBhIGRlc2NyaXB0aW9uIG9mIHRoaXMgbWVzaAorICAgICAq
IEBwYXJhbSBmdWxsRGV0YWlscyBkZWZpbmUgaWYgZnVsbCBkZXRhaWxzIGFib3V0IHRoaXMgbWVz
aCBtdXN0IGJlIHVzZWQKKyAgICAgKiBAcmV0dXJucyBhIGRlc2NyaXB0aXZlIHN0cmluZyByZXBy
ZXNlbnRpbmcgdGhpcyBtZXNoCisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUudG9TdHJpbmcg
PSBmdW5jdGlvbiAoZnVsbERldGFpbHMpIHsKKyAgICAgICAgdmFyIHJldCA9IF9zdXBlci5wcm90
b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzLCBmdWxsRGV0YWlscyk7CisgICAgICAgIHJldCArPSAi
LCBuIHZlcnRpY2VzOiAiICsgdGhpcy5nZXRUb3RhbFZlcnRpY2VzKCk7CisgICAgICAgIHJldCAr
PSAiLCBwYXJlbnQ6ICIgKyAodGhpcy5fd2FpdGluZ1BhcmVudElkID8gdGhpcy5fd2FpdGluZ1Bh
cmVudElkIDogKHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQubmFtZSA6ICJOT05FIikpOworICAg
ICAgICBpZiAodGhpcy5hbmltYXRpb25zKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHJldCAr
PSAiLCBhbmltYXRpb25bMF06ICIgKyB0aGlzLmFuaW1hdGlvbnNbaV0udG9TdHJpbmcoZnVsbERl
dGFpbHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmdWxsRGV0YWls
cykgeworICAgICAgICAgICAgaWYgKHRoaXMuX2dlb21ldHJ5KSB7CisgICAgICAgICAgICAgICAg
dmFyIGliID0gdGhpcy5nZXRJbmRpY2VzKCk7CisgICAgICAgICAgICAgICAgdmFyIHZiID0gdGhp
cy5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJW
ZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpOworICAgICAgICAgICAgICAgIGlmICh2YiAmJiBp
YikgeworICAgICAgICAgICAgICAgICAgICByZXQgKz0gIiwgZmxhdCBzaGFkaW5nOiAiICsgKHZi
Lmxlbmd0aCAvIDMgPT09IGliLmxlbmd0aCA/ICJZRVMiIDogIk5PIik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
cmV0ICs9ICIsIGZsYXQgc2hhZGluZzogVU5LTk9XTiI7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAg
TWVzaC5wcm90b3R5cGUuX3VuQmluZEVmZmVjdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgX3N1
cGVyLnByb3RvdHlwZS5fdW5CaW5kRWZmZWN0LmNhbGwodGhpcyk7CisgICAgICAgIGZvciAodmFy
IF9pID0gMCwgX2EgPSB0aGlzLmluc3RhbmNlczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAg
ICAgICAgICAgIHZhciBpbnN0YW5jZSA9IF9hW19pXTsKKyAgICAgICAgICAgIGluc3RhbmNlLl91
bkJpbmRFZmZlY3QoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KE1lc2gucHJvdG90eXBlLCAiaGFzTE9ETGV2ZWxzIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIG1lc2ggaGFzIExPRAorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm8uX0xPRExldmVscy5sZW5ndGggPiAwOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIE1lc2hMT0RMZXZl
bCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgbWVzaAorICAgICAqIEByZXR1cm5zIGFuIGFy
cmF5IG9mIE1lc2hMT0RMZXZlbAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLmdldExPRExl
dmVscyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsTWVzaERh
dGFJbmZvLl9MT0RMZXZlbHM7CisgICAgfTsKKyAgICBNZXNoLnByb3RvdHlwZS5fc29ydExPRExl
dmVscyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm8u
X0xPRExldmVscy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICBpZiAoYS5kaXN0
YW5jZSA8IGIuZGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChhLmRpc3RhbmNlID4gYi5kaXN0YW5jZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBhIG1lc2ggYXMgTE9E
IGxldmVsIHRyaWdnZXJlZCBhdCB0aGUgZ2l2ZW4gZGlzdGFuY2UuCisgICAgICogQHNlZSBodHRw
czovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX2xvZAorICAgICAqIEBwYXJh
bSBkaXN0YW5jZSBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBvYmplY3QgdG8g
c2hvdyB0aGlzIGxldmVsCisgICAgICogQHBhcmFtIG1lc2ggVGhlIG1lc2ggdG8gYmUgYWRkZWQg
YXMgTE9EIGxldmVsIChjYW4gYmUgbnVsbCkKKyAgICAgKiBAcmV0dXJuIFRoaXMgbWVzaCAoZm9y
IGNoYWluaW5nKQorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLmFkZExPRExldmVsID0gZnVu
Y3Rpb24gKGRpc3RhbmNlLCBtZXNoKSB7CisgICAgICAgIGlmIChtZXNoICYmIG1lc2guX21hc3Rl
ck1lc2gpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTlfX1siTG9nZ2VyIl0uV2FybigiWW91IGNhbm5vdCB1c2UgYSBtZXNoIGFzIExPRCBsZXZl
bCB0d2ljZSIpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGxldmVsID0gbmV3IF9tZXNoTE9ETGV2ZWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIz
X19bIk1lc2hMT0RMZXZlbCJdKGRpc3RhbmNlLCBtZXNoKTsKKyAgICAgICAgdGhpcy5faW50ZXJu
YWxNZXNoRGF0YUluZm8uX0xPRExldmVscy5wdXNoKGxldmVsKTsKKyAgICAgICAgaWYgKG1lc2gp
IHsKKyAgICAgICAgICAgIG1lc2guX21hc3Rlck1lc2ggPSB0aGlzOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX3NvcnRMT0RMZXZlbHMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBMT0QgbGV2ZWwgbWVzaCBhdCB0aGUgcGFzc2Vk
IGRpc3RhbmNlIG9yIG51bGwgaWYgbm90IGZvdW5kLgorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9sb2QKKyAgICAgKiBAcGFyYW0gZGlzdGFu
Y2UgVGhlIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgb2JqZWN0IHRvIHNob3cgdGhp
cyBsZXZlbAorICAgICAqIEByZXR1cm5zIGEgTWVzaCBvciBgbnVsbGAKKyAgICAgKi8KKyAgICBN
ZXNoLnByb3RvdHlwZS5nZXRMT0RMZXZlbEF0RGlzdGFuY2UgPSBmdW5jdGlvbiAoZGlzdGFuY2Up
IHsKKyAgICAgICAgdmFyIGludGVybmFsRGF0YUluZm8gPSB0aGlzLl9pbnRlcm5hbE1lc2hEYXRh
SW5mbzsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGludGVybmFsRGF0YUlu
Zm8uX0xPRExldmVscy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBsZXZlbCA9
IGludGVybmFsRGF0YUluZm8uX0xPRExldmVsc1tpbmRleF07CisgICAgICAgICAgICBpZiAobGV2
ZWwuZGlzdGFuY2UgPT09IGRpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxldmVs
Lm1lc2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBtZXNoIGZyb20gdGhlIExPRCBhcnJheQor
ICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9s
b2QKKyAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRvIGJlIHJlbW92ZWQKKyAg
ICAgKiBAcmV0dXJuIFRoaXMgbWVzaCAoZm9yIGNoYWluaW5nKQorICAgICAqLworICAgIE1lc2gu
cHJvdG90eXBlLnJlbW92ZUxPRExldmVsID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgdmFy
IGludGVybmFsRGF0YUluZm8gPSB0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mbzsKKyAgICAgICAg
Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGludGVybmFsRGF0YUluZm8uX0xPRExldmVscy5s
ZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmIChpbnRlcm5hbERhdGFJbmZvLl9MT0RM
ZXZlbHNbaW5kZXhdLm1lc2ggPT09IG1lc2gpIHsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbERh
dGFJbmZvLl9MT0RMZXZlbHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICBpZiAo
bWVzaCkgeworICAgICAgICAgICAgICAgICAgICBtZXNoLl9tYXN0ZXJNZXNoID0gbnVsbDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
c29ydExPRExldmVscygpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJldHVybnMgdGhlIHJlZ2lzdGVyZWQgTE9EIG1lc2ggZGlzdGFudCBmcm9tIHRoZSBw
YXJhbWV0ZXIgYGNhbWVyYWAgcG9zaXRpb24gaWYgYW55LCBlbHNlIHJldHVybnMgdGhlIGN1cnJl
bnQgbWVzaC4KKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hv
d190b191c2VfbG9kCisgICAgICogQHBhcmFtIGNhbWVyYSBkZWZpbmVzIHRoZSBjYW1lcmEgdG8g
dXNlIHRvIGNvbXB1dGUgZGlzdGFuY2UKKyAgICAgKiBAcGFyYW0gYm91bmRpbmdTcGhlcmUgZGVm
aW5lcyBhIGN1c3RvbSBib3VuZGluZyBzcGhlcmUgdG8gdXNlIGluc3RlYWQgb2YgdGhlIG9uZSBm
cm9tIHRoaXMgbWVzaAorICAgICAqIEByZXR1cm4gVGhpcyBtZXNoIChmb3IgY2hhaW5pbmcpCisg
ICAgICovCisgICAgTWVzaC5wcm90b3R5cGUuZ2V0TE9EID0gZnVuY3Rpb24gKGNhbWVyYSwgYm91
bmRpbmdTcGhlcmUpIHsKKyAgICAgICAgdmFyIGludGVybmFsRGF0YUluZm8gPSB0aGlzLl9pbnRl
cm5hbE1lc2hEYXRhSW5mbzsKKyAgICAgICAgaWYgKCFpbnRlcm5hbERhdGFJbmZvLl9MT0RMZXZl
bHMgfHwgaW50ZXJuYWxEYXRhSW5mby5fTE9ETGV2ZWxzLmxlbmd0aCA9PT0gMCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGJTcGhlcmU7CisgICAg
ICAgIGlmIChib3VuZGluZ1NwaGVyZSkgeworICAgICAgICAgICAgYlNwaGVyZSA9IGJvdW5kaW5n
U3BoZXJlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGJvdW5k
aW5nSW5mbyA9IHRoaXMuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICBiU3BoZXJlID0g
Ym91bmRpbmdJbmZvLmJvdW5kaW5nU3BoZXJlOworICAgICAgICB9CisgICAgICAgIHZhciBkaXN0
YW5jZVRvQ2FtZXJhID0gYlNwaGVyZS5jZW50ZXJXb3JsZC5zdWJ0cmFjdChjYW1lcmEuZ2xvYmFs
UG9zaXRpb24pLmxlbmd0aCgpOworICAgICAgICBpZiAoaW50ZXJuYWxEYXRhSW5mby5fTE9ETGV2
ZWxzW2ludGVybmFsRGF0YUluZm8uX0xPRExldmVscy5sZW5ndGggLSAxXS5kaXN0YW5jZSA+IGRp
c3RhbmNlVG9DYW1lcmEpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm9uTE9ETGV2ZWxTZWxlY3Rp
b24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uTE9ETGV2ZWxTZWxlY3Rpb24oZGlzdGFuY2VU
b0NhbWVyYSwgdGhpcywgaW50ZXJuYWxEYXRhSW5mby5fTE9ETGV2ZWxzW2ludGVybmFsRGF0YUlu
Zm8uX0xPRExldmVscy5sZW5ndGggLSAxXS5tZXNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsg
aW5kZXggPCBpbnRlcm5hbERhdGFJbmZvLl9MT0RMZXZlbHMubGVuZ3RoOyBpbmRleCsrKSB7Cisg
ICAgICAgICAgICB2YXIgbGV2ZWwgPSBpbnRlcm5hbERhdGFJbmZvLl9MT0RMZXZlbHNbaW5kZXhd
OworICAgICAgICAgICAgaWYgKGxldmVsLmRpc3RhbmNlIDwgZGlzdGFuY2VUb0NhbWVyYSkgewor
ICAgICAgICAgICAgICAgIGlmIChsZXZlbC5tZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIGxl
dmVsLm1lc2guX3ByZUFjdGl2YXRlKCk7CisgICAgICAgICAgICAgICAgICAgIGxldmVsLm1lc2gu
X3VwZGF0ZVN1Yk1lc2hlc0JvdW5kaW5nSW5mbyh0aGlzLndvcmxkTWF0cml4RnJvbUNhY2hlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMub25MT0RMZXZlbFNl
bGVjdGlvbikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTE9ETGV2ZWxTZWxlY3Rpb24o
ZGlzdGFuY2VUb0NhbWVyYSwgdGhpcywgbGV2ZWwubWVzaCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiBsZXZlbC5tZXNoOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLm9uTE9ETGV2ZWxTZWxlY3Rpb24pIHsKKyAgICAgICAgICAg
IHRoaXMub25MT0RMZXZlbFNlbGVjdGlvbihkaXN0YW5jZVRvQ2FtZXJhLCB0aGlzLCB0aGlzKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShNZXNoLnByb3RvdHlwZSwgImdlb21ldHJ5IiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgbWVzaCBpbnRlcm5hbCBHZW9tZXRyeSBvYmplY3QKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2dlb21ldHJ5OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXMgd2l0aGluIHRoZSBtZXNoIGdlb21ldHJ5IG9yIHpl
cm8gaWYgdGhlIG1lc2ggaGFzIG5vIGdlb21ldHJ5LgorICAgICAqIEByZXR1cm5zIHRoZSB0b3Rh
bCBudW1iZXIgb2YgdmVydGljZXMKKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5nZXRUb3Rh
bFZlcnRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fZ2VvbWV0cnkgPT09
IG51bGwgfHwgdGhpcy5fZ2VvbWV0cnkgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2dlb21ldHJ5LmdldFRvdGFs
VmVydGljZXMoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGNvbnRlbnQg
b2YgYW4gYXNzb2NpYXRlZCB2ZXJ0ZXggYnVmZmVyCisgICAgICogQHBhcmFtIGtpbmQgZGVmaW5l
cyB3aGljaCBidWZmZXIgdG8gcmVhZCBmcm9tIChwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1hbHMs
IGV0YykuIFBvc3NpYmxlIGBraW5kYCB2YWx1ZXMgOgorICAgICAqIC0gVmVydGV4QnVmZmVyLlBv
c2l0aW9uS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWS2luZAorICAgICAqIC0gVmVydGV4
QnVmZmVyLlVWMktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjNLaW5kCisgICAgICogLSBW
ZXJ0ZXhCdWZmZXIuVVY0S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNUtpbmQKKyAgICAg
KiAtIFZlcnRleEJ1ZmZlci5VVjZLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuQ29sb3JLaW5k
CisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzS2luZAorICAgICAqIC0gVmVy
dGV4QnVmZmVyLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVy
Lk1hdHJpY2VzV2VpZ2h0c0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdo
dHNFeHRyYUtpbmQKKyAgICAgKiBAcGFyYW0gY29weVdoZW5TaGFyZWQgZGVmaW5lcyBhIGJvb2xl
YW4gaW5kaWNhdGluZyB0aGF0IGlmIHRoZSBtZXNoIGdlb21ldHJ5IGlzIHNoYXJlZCBhbW9uZyBz
b21lIG90aGVyIG1lc2hlcywgdGhlIHJldHVybmVkIGFycmF5IGlzIGEgY29weSBvZiB0aGUgaW50
ZXJuYWwgb25lCisgICAgICogQHBhcmFtIGZvcmNlQ29weSBkZWZpbmVzIGEgYm9vbGVhbiBmb3Jj
aW5nIHRoZSBjb3B5IG9mIHRoZSBidWZmZXIgbm8gbWF0dGVyIHdoYXQgdGhlIHZhbHVlIG9mIGNv
cHlXaGVuU2hhcmVkIGlzCisgICAgICogQHJldHVybnMgYSBGbG9hdEFycmF5IG9yIG51bGwgaWYg
dGhlIG1lc2ggaGFzIG5vIGdlb21ldHJ5IG9yIG5vIHZlcnRleCBidWZmZXIgZm9yIHRoaXMga2lu
ZC4KKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5nZXRWZXJ0aWNlc0RhdGEgPSBmdW5jdGlv
biAoa2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSkgeworICAgICAgICBpZiAoIXRoaXMu
X2dlb21ldHJ5KSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdGhpcy5fZ2VvbWV0cnkuZ2V0VmVydGljZXNEYXRhKGtpbmQsIGNvcHlXaGVuU2hh
cmVkLCBmb3JjZUNvcHkpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbWVz
aCBWZXJ0ZXhCdWZmZXIgb2JqZWN0IGZyb20gdGhlIHJlcXVlc3RlZCBga2luZGAKKyAgICAgKiBA
cGFyYW0ga2luZCBkZWZpbmVzIHdoaWNoIGJ1ZmZlciB0byByZWFkIGZyb20gKHBvc2l0aW9ucywg
aW5kaWNlcywgbm9ybWFscywgZXRjKS4gUG9zc2libGUgYGtpbmRgIHZhbHVlcyA6CisgICAgICog
LSBWZXJ0ZXhCdWZmZXIuUG9zaXRpb25LaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTm9ybWFs
S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVy
LlVWMktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjNLaW5kCisgICAgICogLSBWZXJ0ZXhC
dWZmZXIuVVY0S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNUtpbmQKKyAgICAgKiAtIFZl
cnRleEJ1ZmZlci5VVjZLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuQ29sb3JLaW5kCisgICAg
ICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzS2luZAorICAgICAqIC0gVmVydGV4QnVm
ZmVyLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk1hdHJp
Y2VzV2VpZ2h0c0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNFeHRy
YUtpbmQKKyAgICAgKiBAcmV0dXJucyBhIEZsb2F0QXJyYXkgb3IgbnVsbCBpZiB0aGUgbWVzaCBo
YXMgbm8gdmVydGV4IGJ1ZmZlciBmb3IgdGhpcyBraW5kLgorICAgICAqLworICAgIE1lc2gucHJv
dG90eXBlLmdldFZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uIChraW5kKSB7CisgICAgICAgIGlmICgh
dGhpcy5fZ2VvbWV0cnkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLl9nZW9tZXRyeS5nZXRWZXJ0ZXhCdWZmZXIoa2luZCk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBUZXN0cyBpZiBhIHNwZWNpZmljIHZlcnRleCBidWZmZXIgaXMg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgbWVzaAorICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMgd2hp
Y2ggYnVmZmVyIHRvIGNoZWNrIChwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1hbHMsIGV0YykuIFBv
c3NpYmxlIGBraW5kYCB2YWx1ZXMgOgorICAgICAqIC0gVmVydGV4QnVmZmVyLlBvc2l0aW9uS2lu
ZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk5vcm1hbEtpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZl
ci5VVktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjJLaW5kCisgICAgICogLSBWZXJ0ZXhC
dWZmZXIuVVYzS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNEtpbmQKKyAgICAgKiAtIFZl
cnRleEJ1ZmZlci5VVjVLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuVVY2S2luZAorICAgICAq
IC0gVmVydGV4QnVmZmVyLkNvbG9yS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk1hdHJpY2Vz
SW5kaWNlc0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc0luZGljZXNFeHRyYUtp
bmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNLaW5kCisgICAgICogLSBW
ZXJ0ZXhCdWZmZXIuTWF0cmljZXNXZWlnaHRzRXh0cmFLaW5kCisgICAgICogQHJldHVybnMgYSBi
b29sZWFuCisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUuaXNWZXJ0aWNlc0RhdGFQcmVzZW50
ID0gZnVuY3Rpb24gKGtpbmQpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9nZW9tZXRyeSkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX2RlbGF5SW5mbykgeworICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLl9kZWxheUluZm8uaW5kZXhPZihraW5kKSAhPT0gLTE7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2dl
b21ldHJ5LmlzVmVydGljZXNEYXRhUHJlc2VudChraW5kKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJldHVybnMgYSBib29sZWFuIGRlZmluaW5nIGlmIHRoZSB2ZXJ0ZXggZGF0YSBmb3IgdGhl
IHJlcXVlc3RlZCBga2luZGAgaXMgdXBkYXRhYmxlLgorICAgICAqIEBwYXJhbSBraW5kIGRlZmlu
ZXMgd2hpY2ggYnVmZmVyIHRvIGNoZWNrIChwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1hbHMsIGV0
YykuIFBvc3NpYmxlIGBraW5kYCB2YWx1ZXMgOgorICAgICAqIC0gVmVydGV4QnVmZmVyLlBvc2l0
aW9uS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWS2luZAorICAgICAqIC0gVmVydGV4QnVm
ZmVyLlVWMktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjNLaW5kCisgICAgICogLSBWZXJ0
ZXhCdWZmZXIuVVY0S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNUtpbmQKKyAgICAgKiAt
IFZlcnRleEJ1ZmZlci5VVjZLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuQ29sb3JLaW5kCisg
ICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzS2luZAorICAgICAqIC0gVmVydGV4
QnVmZmVyLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk1h
dHJpY2VzV2VpZ2h0c0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNF
eHRyYUtpbmQKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4KKyAgICAgKi8KKyAgICBNZXNoLnBy
b3RvdHlwZS5pc1ZlcnRleEJ1ZmZlclVwZGF0YWJsZSA9IGZ1bmN0aW9uIChraW5kKSB7CisgICAg
ICAgIGlmICghdGhpcy5fZ2VvbWV0cnkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9kZWxheUlu
Zm8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsYXlJbmZvLmluZGV4T2Yoa2lu
ZCkgIT09IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nZW9tZXRyeS5pc1ZlcnRleEJ1ZmZlclVwZGF0
YWJsZShraW5kKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgd2hp
Y2ggY29udGFpbnMgdGhlIGxpc3Qgb2YgZXhpc3RpbmcgYGtpbmRzYCBvZiBWZXJ0ZXggRGF0YSBh
c3NvY2lhdGVkIHdpdGggdGhpcyBtZXNoLgorICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMgd2hp
Y2ggYnVmZmVyIHRvIHJlYWQgZnJvbSAocG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzLCBldGMp
LiBQb3NzaWJsZSBga2luZGAgdmFsdWVzIDoKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5Qb3NpdGlv
bktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5Ob3JtYWxLaW5kCisgICAgICogLSBWZXJ0ZXhC
dWZmZXIuVVZLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuVVYyS2luZAorICAgICAqIC0gVmVy
dGV4QnVmZmVyLlVWM0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjRLaW5kCisgICAgICog
LSBWZXJ0ZXhCdWZmZXIuVVY1S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNktpbmQKKyAg
ICAgKiAtIFZlcnRleEJ1ZmZlci5Db2xvcktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRy
aWNlc0luZGljZXNLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzRXh0
cmFLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNXZWlnaHRzS2luZAorICAgICAq
IC0gVmVydGV4QnVmZmVyLk1hdHJpY2VzV2VpZ2h0c0V4dHJhS2luZAorICAgICAqIEByZXR1cm5z
IGFuIGFycmF5IG9mIHN0cmluZ3MKKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5nZXRWZXJ0
aWNlc0RhdGFLaW5kcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9nZW9tZXRy
eSkgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheSgpOworICAgICAgICAgICAg
aWYgKHRoaXMuX2RlbGF5SW5mbykgeworICAgICAgICAgICAgICAgIHRoaXMuX2RlbGF5SW5mby5m
b3JFYWNoKGZ1bmN0aW9uIChraW5kKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNo
KGtpbmQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fZ2VvbWV0cnku
Z2V0VmVydGljZXNEYXRhS2luZHMoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBwb3NpdGl2ZSBpbnRlZ2VyIDogdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIHRoaXMg
bWVzaCBnZW9tZXRyeS4KKyAgICAgKiBAcmV0dXJucyB0aGUgbnVtbmVyIG9mIGluZGljZXMgb3Ig
emVybyBpZiB0aGUgbWVzaCBoYXMgbm8gZ2VvbWV0cnkuCisgICAgICovCisgICAgTWVzaC5wcm90
b3R5cGUuZ2V0VG90YWxJbmRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMu
X2dlb21ldHJ5KSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5fZ2VvbWV0cnkuZ2V0VG90YWxJbmRpY2VzKCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGludGVnZXJzIG9yIGEgdHlwZWQgYXJyYXkgKElu
dDMyQXJyYXksIFVpbnQzMkFycmF5LCBVaW50MTZBcnJheSkgcG9wdWxhdGVkIHdpdGggdGhlIG1l
c2ggaW5kaWNlcy4KKyAgICAgKiBAcGFyYW0gY29weVdoZW5TaGFyZWQgSWYgdHJ1ZSAoZGVmYXVs
dCBmYWxzZSkgYW5kIGFuZCBpZiB0aGUgbWVzaCBnZW9tZXRyeSBpcyBzaGFyZWQgYW1vbmcgc29t
ZSBvdGhlciBtZXNoZXMsIHRoZSByZXR1cm5lZCBhcnJheSBpcyBhIGNvcHkgb2YgdGhlIGludGVy
bmFsIG9uZS4KKyAgICAgKiBAcGFyYW0gZm9yY2VDb3B5IGRlZmluZXMgYSBib29sZWFuIGluZGlj
YXRpbmcgdGhhdCB0aGUgcmV0dXJuZWQgYXJyYXkgbXVzdCBiZSBjbG9uZWQgdXBvbiByZXR1cm5p
bmcgaXQKKyAgICAgKiBAcmV0dXJucyB0aGUgaW5kaWNlcyBhcnJheSBvciBhbiBlbXB0eSBhcnJh
eSBpZiB0aGUgbWVzaCBoYXMgbm8gZ2VvbWV0cnkKKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlw
ZS5nZXRJbmRpY2VzID0gZnVuY3Rpb24gKGNvcHlXaGVuU2hhcmVkLCBmb3JjZUNvcHkpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9nZW9tZXRyeSkgeworICAgICAgICAgICAgcmV0dXJuIFtdOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9nZW9tZXRyeS5nZXRJbmRpY2VzKGNvcHlXaGVu
U2hhcmVkLCBmb3JjZUNvcHkpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1l
c2gucHJvdG90eXBlLCAiaXNCbG9ja2VkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXN0ZXJNZXNoICE9PSBudWxsICYmIHRoaXMuX21h
c3Rlck1lc2ggIT09IHVuZGVmaW5lZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAg
ICogRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IG1lc2ggaXMgcmVhZHkgdG8gYmUgcmVuZGVyZWQK
KyAgICAgKiBAcGFyYW0gY29tcGxldGVDaGVjayBkZWZpbmVzIGlmIGEgY29tcGxldGUgY2hlY2sg
KGluY2x1ZGluZyBtYXRlcmlhbHMgYW5kIGxpZ2h0cykgaGFzIHRvIGJlIGRvbmUgKGZhbHNlIGJ5
IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGZvcmNlSW5zdGFuY2VTdXBwb3J0IHdpbGwgY2hlY2sg
aWYgdGhlIG1lc2ggd2lsbCBiZSByZWFkeSB3aGVuIHVzZWQgd2l0aCBpbnN0YW5jZXMgKGZhbHNl
IGJ5IGRlZmF1bHQpCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBhbGwgYXNzb2NpYXRlZCBhc3Nl
dHMgYXJlIHJlYWR5IChtYXRlcmlhbCwgdGV4dHVyZXMsIHNoYWRlcnMpCisgICAgICovCisgICAg
TWVzaC5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uIChjb21wbGV0ZUNoZWNrLCBmb3JjZUlu
c3RhbmNlU3VwcG9ydCkgeworICAgICAgICBpZiAoY29tcGxldGVDaGVjayA9PT0gdm9pZCAwKSB7
IGNvbXBsZXRlQ2hlY2sgPSBmYWxzZTsgfQorICAgICAgICBpZiAoZm9yY2VJbnN0YW5jZVN1cHBv
cnQgPT09IHZvaWQgMCkgeyBmb3JjZUluc3RhbmNlU3VwcG9ydCA9IGZhbHNlOyB9CisgICAgICAg
IGlmICh0aGlzLmRlbGF5TG9hZFN0YXRlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE3X19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNUQVRFX0xPQURJTkcp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIV9z
dXBlci5wcm90b3R5cGUuaXNSZWFkeS5jYWxsKHRoaXMsIGNvbXBsZXRlQ2hlY2spKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnN1Yk1l
c2hlcyB8fCB0aGlzLnN1Yk1lc2hlcy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghY29tcGxldGVDaGVjaykgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHRoaXMu
Z2V0RW5naW5lKCk7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAg
ICAgdmFyIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nID0gZm9yY2VJbnN0YW5jZVN1cHBvcnQg
fHwgZW5naW5lLmdldENhcHMoKS5pbnN0YW5jZWRBcnJheXMgJiYgdGhpcy5pbnN0YW5jZXMubGVu
Z3RoID4gMDsKKyAgICAgICAgdGhpcy5jb21wdXRlV29ybGRNYXRyaXgoKTsKKyAgICAgICAgdmFy
IG1hdCA9IHRoaXMubWF0ZXJpYWwgfHwgc2NlbmUuZGVmYXVsdE1hdGVyaWFsOworICAgICAgICBp
ZiAobWF0KSB7CisgICAgICAgICAgICBpZiAobWF0Ll9zdG9yZUVmZmVjdE9uU3ViTWVzaGVzKSB7
CisgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuc3ViTWVzaGVzOyBf
aSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgc3ViTWVzaCA9
IF9hW19pXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGVmZmVjdGl2ZU1hdGVyaWFsID0gc3Vi
TWVzaC5nZXRNYXRlcmlhbCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZWZmZWN0aXZlTWF0
ZXJpYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZmZlY3RpdmVNYXRlcmlhbC5f
c3RvcmVFZmZlY3RPblN1Yk1lc2hlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghZWZmZWN0aXZlTWF0ZXJpYWwuaXNSZWFkeUZvclN1Yk1lc2godGhpcywgc3ViTWVzaCwgaGFy
ZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVmZmVjdGl2ZU1hdGVyaWFsLmlzUmVhZHkodGhp
cywgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIW1hdC5pc1JlYWR5KHRoaXMsIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nKSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFNoYWRvd3MKKyAgICAgICAgZm9y
ICh2YXIgX2IgPSAwLCBfYyA9IHRoaXMubGlnaHRTb3VyY2VzOyBfYiA8IF9jLmxlbmd0aDsgX2Ir
KykgeworICAgICAgICAgICAgdmFyIGxpZ2h0ID0gX2NbX2JdOworICAgICAgICAgICAgdmFyIGdl
bmVyYXRvciA9IGxpZ2h0LmdldFNoYWRvd0dlbmVyYXRvcigpOworICAgICAgICAgICAgaWYgKGdl
bmVyYXRvcikgeworICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gMCwgX2UgPSB0aGlzLnN1
Yk1lc2hlczsgX2QgPCBfZS5sZW5ndGg7IF9kKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHN1Yk1lc2ggPSBfZVtfZF07CisgICAgICAgICAgICAgICAgICAgIGlmICghZ2VuZXJhdG9yLmlz
UmVhZHkoc3ViTWVzaCwgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gTE9ECisg
ICAgICAgIGZvciAodmFyIF9mID0gMCwgX2cgPSB0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mby5f
TE9ETGV2ZWxzOyBfZiA8IF9nLmxlbmd0aDsgX2YrKykgeworICAgICAgICAgICAgdmFyIGxvZCA9
IF9nW19mXTsKKyAgICAgICAgICAgIGlmIChsb2QubWVzaCAmJiAhbG9kLm1lc2guaXNSZWFkeSho
YXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzaC5wcm90b3R5cGUsICJhcmVOb3JtYWxz
RnJvemVuIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNh
dGluZyBpZiB0aGUgbm9ybWFscyBhcmVuJ3QgdG8gYmUgcmVjb21wdXRlZCBvbiBuZXh0IG1lc2gg
YHBvc2l0aW9uc2AgYXJyYXkgdXBkYXRlLiBUaGlzIHByb3BlcnR5IGlzIHBlcnRpbmVudCBvbmx5
IGZvciB1cGRhdGFibGUgcGFyYW1ldHJpYyBzaGFwZXMuCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbE1lc2hE
YXRhSW5mby5fYXJlTm9ybWFsc0Zyb3plbjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisg
ICAgICogVGhpcyBmdW5jdGlvbiBhZmZlY3RzIHBhcmFtZXRyaWMgc2hhcGVzIG9uIHZlcnRleCBw
b3NpdGlvbiB1cGRhdGUgb25seSA6IHJpYmJvbnMsIHR1YmVzLCBldGMuIEl0IGhhcyBubyBlZmZl
Y3QgYXQgYWxsIG9uIG90aGVyIHNoYXBlcy4gSXQgcHJldmVudHMgdGhlIG1lc2ggbm9ybWFscyBm
cm9tIGJlaW5nIHJlY29tcHV0ZWQgb24gbmV4dCBgcG9zaXRpb25zYCBhcnJheSB1cGRhdGUuCisg
ICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90
eXBlLmZyZWV6ZU5vcm1hbHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2ludGVybmFs
TWVzaERhdGFJbmZvLl9hcmVOb3JtYWxzRnJvemVuID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGFmZmVjdHMgcGFyYW1l
dHJpYyBzaGFwZXMgb24gdmVydGV4IHBvc2l0aW9uIHVwZGF0ZSBvbmx5IDogcmliYm9ucywgdHVi
ZXMsIGV0Yy4gSXQgaGFzIG5vIGVmZmVjdCBhdCBhbGwgb24gb3RoZXIgc2hhcGVzLiBJdCByZWFj
dGl2YXRlcyB0aGUgbWVzaCBub3JtYWxzIGNvbXB1dGF0aW9uIGlmIGl0IHdhcyBwcmV2aW91c2x5
IGZyb3plbgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBN
ZXNoLnByb3RvdHlwZS51bmZyZWV6ZU5vcm1hbHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMuX2ludGVybmFsTWVzaERhdGFJbmZvLl9hcmVOb3JtYWxzRnJvemVuID0gZmFsc2U7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1lc2gu
cHJvdG90eXBlLCAib3ZlcnJpZGVuSW5zdGFuY2VDb3VudCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFNldHMgYSB2YWx1ZSBvdmVycmlkaW5nIHRoZSBpbnN0YW5jZSBjb3VudC4gT25seSBh
cHBsaWNhYmxlIHdoZW4gY3VzdG9tIGluc3RhbmNlZCBJbnRlcmxlYXZlZFZlcnRleEJ1ZmZlciBh
cmUgdXNlZCByYXRoZXIgdGhhbiBJbnN0YW5jZWRNZXNocworICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAoY291bnQpIHsKKyAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlRGF0YVN0
b3JhZ2Uub3ZlcnJpZGVuSW5zdGFuY2VDb3VudCA9IGNvdW50OworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvLyBNZXRob2RzCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBNZXNoLnByb3RvdHlwZS5f
cHJlQWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpbnRlcm5hbERhdGFJbmZv
ID0gdGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm87CisgICAgICAgIHZhciBzY2VuZVJlbmRlcklk
ID0gdGhpcy5nZXRTY2VuZSgpLmdldFJlbmRlcklkKCk7CisgICAgICAgIGlmIChpbnRlcm5hbERh
dGFJbmZvLl9wcmVBY3RpdmF0ZUlkID09PSBzY2VuZVJlbmRlcklkKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBpbnRlcm5hbERhdGFJbmZvLl9wcmVBY3Rp
dmF0ZUlkID0gc2NlbmVSZW5kZXJJZDsKKyAgICAgICAgdGhpcy5faW5zdGFuY2VEYXRhU3RvcmFn
ZS52aXNpYmxlSW5zdGFuY2VzID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIE1lc2gucHJvdG90eXBlLl9wcmVBY3RpdmF0ZUZvcklu
dGVybWVkaWF0ZVJlbmRlcmluZyA9IGZ1bmN0aW9uIChyZW5kZXJJZCkgeworICAgICAgICBpZiAo
dGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS52aXNpYmxlSW5zdGFuY2VzKSB7CisgICAgICAgICAg
ICB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLnZpc2libGVJbnN0YW5jZXMuaW50ZXJtZWRpYXRl
RGVmYXVsdFJlbmRlcklkID0gcmVuZGVySWQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE1lc2gucHJvdG90eXBlLl9yZWdp
c3Rlckluc3RhbmNlRm9yUmVuZGVySWQgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIHJlbmRlcklkKSB7
CisgICAgICAgIGlmICghdGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS52aXNpYmxlSW5zdGFuY2Vz
KSB7CisgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLnZpc2libGVJbnN0YW5j
ZXMgPSB7CisgICAgICAgICAgICAgICAgZGVmYXVsdFJlbmRlcklkOiByZW5kZXJJZCwKKyAgICAg
ICAgICAgICAgICBzZWxmRGVmYXVsdFJlbmRlcklkOiB0aGlzLl9yZW5kZXJJZAorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlRGF0YVN0b3JhZ2Uu
dmlzaWJsZUluc3RhbmNlc1tyZW5kZXJJZF0pIHsKKyAgICAgICAgICAgIHRoaXMuX2luc3RhbmNl
RGF0YVN0b3JhZ2UudmlzaWJsZUluc3RhbmNlc1tyZW5kZXJJZF0gPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLnZpc2libGVJbnN0YW5j
ZXNbcmVuZGVySWRdLnB1c2goaW5zdGFuY2UpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlY29tcHV0ZXMgYW5kIHNldHMgYSBuZXcg
Qm91bmRpbmdJbmZvIHRvIHRoZSBtZXNoIHVubGVzcyBpdCBpcyBsb2NrZWQuCisgICAgICogVGhp
cyBtZWFucyB0aGUgbWVzaCB1bmRlcmx5aW5nIGJvdW5kaW5nIGJveCBhbmQgc3BoZXJlIGFyZSBy
ZWNvbXB1dGVkLgorICAgICAqIEBwYXJhbSBhcHBseVNrZWxldG9uIGRlZmluZXMgd2hldGhlciB0
byBhcHBseSB0aGUgc2tlbGV0b24gYmVmb3JlIGNvbXB1dGluZyB0aGUgYm91bmRpbmcgaW5mbwor
ICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBNZXNoLnByb3Rv
dHlwZS5yZWZyZXNoQm91bmRpbmdJbmZvID0gZnVuY3Rpb24gKGFwcGx5U2tlbGV0b24pIHsKKyAg
ICAgICAgaWYgKGFwcGx5U2tlbGV0b24gPT09IHZvaWQgMCkgeyBhcHBseVNrZWxldG9uID0gZmFs
c2U7IH0KKyAgICAgICAgaWYgKHRoaXMuX2JvdW5kaW5nSW5mbyAmJiB0aGlzLl9ib3VuZGluZ0lu
Zm8uaXNMb2NrZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAg
ICAgIHZhciBiaWFzID0gdGhpcy5nZW9tZXRyeSA/IHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdCaWFz
IDogbnVsbDsKKyAgICAgICAgdGhpcy5fcmVmcmVzaEJvdW5kaW5nSW5mbyh0aGlzLl9nZXRQb3Np
dGlvbkRhdGEoYXBwbHlTa2VsZXRvbiksIGJpYXMpOworICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTWVzaC5wcm90b3R5cGUuX2NyZWF0ZUdsb2Jh
bFN1Yk1lc2ggPSBmdW5jdGlvbiAoZm9yY2UpIHsKKyAgICAgICAgdmFyIHRvdGFsVmVydGljZXMg
PSB0aGlzLmdldFRvdGFsVmVydGljZXMoKTsKKyAgICAgICAgaWYgKCF0b3RhbFZlcnRpY2VzIHx8
ICF0aGlzLmdldEluZGljZXMoKSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAg
IH0KKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byByZWNyZWF0ZSB0aGUgc3VibWVzaGVz
CisgICAgICAgIGlmICh0aGlzLnN1Yk1lc2hlcyAmJiB0aGlzLnN1Yk1lc2hlcy5sZW5ndGggPiAw
KSB7CisgICAgICAgICAgICB2YXIgaWIgPSB0aGlzLmdldEluZGljZXMoKTsKKyAgICAgICAgICAg
IGlmICghaWIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZhciB0b3RhbEluZGljZXMgPSBpYi5sZW5ndGg7CisgICAgICAgICAgICB2
YXIgbmVlZFRvUmVjcmVhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChmb3JjZSkgeworICAg
ICAgICAgICAgICAgIG5lZWRUb1JlY3JlYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlz
LnN1Yk1lc2hlczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHN1Ym1lc2ggPSBfYVtfaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChzdWJtZXNoLmlu
ZGV4U3RhcnQgKyBzdWJtZXNoLmluZGV4Q291bnQgPj0gdG90YWxJbmRpY2VzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBuZWVkVG9SZWNyZWF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBpZiAoc3VibWVzaC52ZXJ0aWNlc1N0YXJ0ICsgc3VibWVzaC52ZXJ0aWNlc0NvdW50ID49IHRv
dGFsVmVydGljZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRUb1JlY3JlYXRlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFu
ZWVkVG9SZWNyZWF0ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Yk1lc2hlc1sw
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLnJlbGVhc2VTdWJNZXNo
ZXMoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBfc3ViTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTJfX1siU3ViTWVzaCJdKDAsIDAsIHRvdGFsVmVydGljZXMsIDAsIHRoaXMuZ2V0VG90YWxJ
bmRpY2VzKCksIHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiB3
aWxsIHN1YmRpdmlkZSB0aGUgbWVzaCBpbnRvIG11bHRpcGxlIHN1Ym1lc2hlcworICAgICAqIEBw
YXJhbSBjb3VudCBkZWZpbmVzIHRoZSBleHBlY3RlZCBudW1iZXIgb2Ygc3VibWVzaGVzCisgICAg
ICovCisgICAgTWVzaC5wcm90b3R5cGUuc3ViZGl2aWRlID0gZnVuY3Rpb24gKGNvdW50KSB7Cisg
ICAgICAgIGlmIChjb3VudCA8IDEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgdG90YWxJbmRpY2VzID0gdGhpcy5nZXRUb3RhbEluZGljZXMoKTsKKyAgICAg
ICAgdmFyIHN1YmRpdmlzaW9uU2l6ZSA9ICh0b3RhbEluZGljZXMgLyBjb3VudCkgfCAwOworICAg
ICAgICB2YXIgb2Zmc2V0ID0gMDsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgc3ViZGl2aXNpb25T
aXplIGlzIGEgbXVsdGlwbGUgb2YgMworICAgICAgICB3aGlsZSAoc3ViZGl2aXNpb25TaXplICUg
MyAhPT0gMCkgeworICAgICAgICAgICAgc3ViZGl2aXNpb25TaXplKys7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5yZWxlYXNlU3ViTWVzaGVzKCk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0g
MDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKG9mZnNldCA+PSB0
b3RhbEluZGljZXMpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIF9zdWJNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJTdWJNZXNo
Il0uQ3JlYXRlRnJvbUluZGljZXMoMCwgb2Zmc2V0LCBNYXRoLm1pbihzdWJkaXZpc2lvblNpemUs
IHRvdGFsSW5kaWNlcyAtIG9mZnNldCksIHRoaXMpOworICAgICAgICAgICAgb2Zmc2V0ICs9IHN1
YmRpdmlzaW9uU2l6ZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnN5bmNocm9uaXplSW5zdGFu
Y2VzKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDb3B5IGEgRmxvYXRBcnJheSBpbnRvIGEg
c3BlY2lmaWMgYXNzb2NpYXRlZCB2ZXJ0ZXggYnVmZmVyCisgICAgICogQHBhcmFtIGtpbmQgZGVm
aW5lcyB3aGljaCBidWZmZXIgdG8gd3JpdGUgdG8gKHBvc2l0aW9ucywgaW5kaWNlcywgbm9ybWFs
cywgZXRjKS4gUG9zc2libGUgYGtpbmRgIHZhbHVlcyA6CisgICAgICogLSBWZXJ0ZXhCdWZmZXIu
UG9zaXRpb25LaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuVVZLaW5kCisgICAgICogLSBWZXJ0
ZXhCdWZmZXIuVVYyS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWM0tpbmQKKyAgICAgKiAt
IFZlcnRleEJ1ZmZlci5VVjRLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuVVY1S2luZAorICAg
ICAqIC0gVmVydGV4QnVmZmVyLlVWNktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5Db2xvcktp
bmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc0luZGljZXNLaW5kCisgICAgICogLSBW
ZXJ0ZXhCdWZmZXIuTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZm
ZXIuTWF0cmljZXNXZWlnaHRzS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLk1hdHJpY2VzV2Vp
Z2h0c0V4dHJhS2luZAorICAgICAqIEBwYXJhbSBkYXRhIGRlZmluZXMgdGhlIGRhdGEgc291cmNl
CisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSB1cGRhdGVkIHZlcnRleCBi
dWZmZXIgbXVzdCBiZSBmbGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBzdHJpZGUg
ZGVmaW5lcyB0aGUgZGF0YSBzdHJpZGUgc2l6ZSAoY2FuIGJlIG51bGwpCisgICAgICogQHJldHVy
bnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLnNldFZlcnRp
Y2VzRGF0YSA9IGZ1bmN0aW9uIChraW5kLCBkYXRhLCB1cGRhdGFibGUsIHN0cmlkZSkgeworICAg
ICAgICBpZiAodXBkYXRhYmxlID09PSB2b2lkIDApIHsgdXBkYXRhYmxlID0gZmFsc2U7IH0KKyAg
ICAgICAgaWYgKCF0aGlzLl9nZW9tZXRyeSkgeworICAgICAgICAgICAgdmFyIHZlcnRleERhdGEg
PSBuZXcgX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJWZXJ0
ZXhEYXRhIl0oKTsKKyAgICAgICAgICAgIHZlcnRleERhdGEuc2V0KGRhdGEsIGtpbmQpOworICAg
ICAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICAgICAgbmV3IF9n
ZW9tZXRyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siR2VvbWV0cnkiXShfZ2VvbWV0
cnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkdlb21ldHJ5Il0uUmFuZG9tSWQoKSwg
c2NlbmUsIHZlcnRleERhdGEsIHVwZGF0YWJsZSwgdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9nZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoa2luZCwg
ZGF0YSwgdXBkYXRhYmxlLCBzdHJpZGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogRmxhZ3MgYW4gYXNzb2NpYXRlZCB2ZXJ0ZXggYnVm
ZmVyIGFzIHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBraW5kIGRlZmluZXMgd2hpY2ggYnVmZmVy
IHRvIHVzZSAocG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzLCBldGMpLiBQb3NzaWJsZSBga2lu
ZGAgdmFsdWVzIDoKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5Qb3NpdGlvbktpbmQKKyAgICAgKiAt
IFZlcnRleEJ1ZmZlci5VVktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjJLaW5kCisgICAg
ICogLSBWZXJ0ZXhCdWZmZXIuVVYzS2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLlVWNEtpbmQK
KyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjVLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuVVY2
S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLkNvbG9yS2luZAorICAgICAqIC0gVmVydGV4QnVm
ZmVyLk1hdHJpY2VzSW5kaWNlc0tpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc0lu
ZGljZXNFeHRyYUtpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5NYXRyaWNlc1dlaWdodHNLaW5k
CisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNXZWlnaHRzRXh0cmFLaW5kCisgICAgICog
QHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSB1cGRhdGVkIHZlcnRleCBidWZmZXIgbXVz
dCBiZSBmbGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLm1h
cmtWZXJ0aWNlc0RhdGFBc1VwZGF0YWJsZSA9IGZ1bmN0aW9uIChraW5kLCB1cGRhdGFibGUpIHsK
KyAgICAgICAgaWYgKHVwZGF0YWJsZSA9PT0gdm9pZCAwKSB7IHVwZGF0YWJsZSA9IHRydWU7IH0K
KyAgICAgICAgdmFyIHZiID0gdGhpcy5nZXRWZXJ0ZXhCdWZmZXIoa2luZCk7CisgICAgICAgIGlm
ICghdmIgfHwgdmIuaXNVcGRhdGFibGUoKSA9PT0gdXBkYXRhYmxlKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zZXRWZXJ0aWNlc0RhdGEoa2luZCwgdGhp
cy5nZXRWZXJ0aWNlc0RhdGEoa2luZCksIHVwZGF0YWJsZSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXRzIHRoZSBtZXNoIGdsb2JhbCBWZXJ0ZXggQnVmZmVyCisgICAgICogQHBhcmFtIGJ1
ZmZlciBkZWZpbmVzIHRoZSBidWZmZXIgdG8gdXNlCisgICAgICogQHJldHVybnMgdGhlIGN1cnJl
bnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLnNldFZlcnRpY2VzQnVmZmVyID0g
ZnVuY3Rpb24gKGJ1ZmZlcikgeworICAgICAgICBpZiAoIXRoaXMuX2dlb21ldHJ5KSB7CisgICAg
ICAgICAgICB0aGlzLl9nZW9tZXRyeSA9IF9nZW9tZXRyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTBfX1siR2VvbWV0cnkiXS5DcmVhdGVHZW9tZXRyeUZvck1lc2godGhpcyk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fZ2VvbWV0cnkuc2V0VmVydGljZXNCdWZmZXIoYnVmZmVyKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgYSBzcGVj
aWZpYyBhc3NvY2lhdGVkIHZlcnRleCBidWZmZXIKKyAgICAgKiBAcGFyYW0ga2luZCBkZWZpbmVz
IHdoaWNoIGJ1ZmZlciB0byB3cml0ZSB0byAocG9zaXRpb25zLCBpbmRpY2VzLCBub3JtYWxzLCBl
dGMpLiBQb3NzaWJsZSBga2luZGAgdmFsdWVzIDoKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5Qb3Np
dGlvbktpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVktpbmQKKyAgICAgKiAtIFZlcnRleEJ1
ZmZlci5VVjJLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuVVYzS2luZAorICAgICAqIC0gVmVy
dGV4QnVmZmVyLlVWNEtpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5VVjVLaW5kCisgICAgICog
LSBWZXJ0ZXhCdWZmZXIuVVY2S2luZAorICAgICAqIC0gVmVydGV4QnVmZmVyLkNvbG9yS2luZAor
ICAgICAqIC0gVmVydGV4QnVmZmVyLk1hdHJpY2VzSW5kaWNlc0tpbmQKKyAgICAgKiAtIFZlcnRl
eEJ1ZmZlci5NYXRyaWNlc0luZGljZXNFeHRyYUtpbmQKKyAgICAgKiAtIFZlcnRleEJ1ZmZlci5N
YXRyaWNlc1dlaWdodHNLaW5kCisgICAgICogLSBWZXJ0ZXhCdWZmZXIuTWF0cmljZXNXZWlnaHRz
RXh0cmFLaW5kCisgICAgICogQHBhcmFtIGRhdGEgZGVmaW5lcyB0aGUgZGF0YSBzb3VyY2UKKyAg
ICAgKiBAcGFyYW0gdXBkYXRlRXh0ZW5kcyBkZWZpbmVzIGlmIGV4dGVuZHMgaW5mbyBvZiB0aGUg
bWVzaCBtdXN0IGJlIHVwZGF0ZWQgKGNhbiBiZSBudWxsKS4gVGhpcyBpcyBtb3N0bHkgdXNlZnVs
IGZvciAicG9zaXRpb24iIGtpbmQKKyAgICAgKiBAcGFyYW0gbWFrZUl0VW5pcXVlIGRlZmluZXMg
aWYgdGhlIGdlb21ldHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzaCBtdXN0IGJlIGNsb25lZCB0
byBtYWtlIHRoZSBjaGFuZ2Ugb25seSBmb3IgdGhpcyBtZXNoIChhbmQgbm90IGFsbCBtZXNoZXMg
YXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIGdlb21ldHJ5KQorICAgICAqIEByZXR1cm5zIHRoZSBj
dXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS51cGRhdGVWZXJ0aWNlc0Rh
dGEgPSBmdW5jdGlvbiAoa2luZCwgZGF0YSwgdXBkYXRlRXh0ZW5kcywgbWFrZUl0VW5pcXVlKSB7
CisgICAgICAgIGlmICghdGhpcy5fZ2VvbWV0cnkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICB9CisgICAgICAgIGlmICghbWFrZUl0VW5pcXVlKSB7CisgICAgICAgICAgICB0
aGlzLl9nZW9tZXRyeS51cGRhdGVWZXJ0aWNlc0RhdGEoa2luZCwgZGF0YSwgdXBkYXRlRXh0ZW5k
cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLm1ha2VHZW9t
ZXRyeVVuaXF1ZSgpOworICAgICAgICAgICAgdGhpcy51cGRhdGVWZXJ0aWNlc0RhdGEoa2luZCwg
ZGF0YSwgdXBkYXRlRXh0ZW5kcywgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgdmVy
dGV4IHBvc2l0aW9ucyBvZiBhbiB1cGRhdGFibGUgbWVzaCBhY2NvcmRpbmcgdG8gdGhlIGBwb3Np
dGlvbkZ1bmN0aW9uYCByZXR1cm5lZCB2YWx1ZXMuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2hvd190b19keW5hbWljYWxseV9tb3JwaF9hX21lc2gjb3RoZXIt
c2hhcGVzLXVwZGF0ZW1lc2hwb3NpdGlvbnMKKyAgICAgKiBAcGFyYW0gcG9zaXRpb25GdW5jdGlv
biBpcyBhIHNpbXBsZSBKUyBmdW5jdGlvbiB3aGF0IGlzIHBhc3NlZCB0aGUgbWVzaCBgcG9zaXRp
b25zYCBhcnJheS4gSXQgZG9lc24ndCBuZWVkIHRvIHJldHVybiBhbnl0aGluZworICAgICAqIEBw
YXJhbSBjb21wdXRlTm9ybWFscyBpcyBhIGJvb2xlYW4gKGRlZmF1bHQgdHJ1ZSkgdG8gZW5hYmxl
L2Rpc2FibGUgdGhlIG1lc2ggbm9ybWFsIHJlY29tcHV0YXRpb24gYWZ0ZXIgdGhlIHZlcnRleCBw
b3NpdGlvbiB1cGRhdGUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICov
CisgICAgTWVzaC5wcm90b3R5cGUudXBkYXRlTWVzaFBvc2l0aW9ucyA9IGZ1bmN0aW9uIChwb3Np
dGlvbkZ1bmN0aW9uLCBjb21wdXRlTm9ybWFscykgeworICAgICAgICBpZiAoY29tcHV0ZU5vcm1h
bHMgPT09IHZvaWQgMCkgeyBjb21wdXRlTm9ybWFscyA9IHRydWU7IH0KKyAgICAgICAgdmFyIHBv
c2l0aW9ucyA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCFw
b3NpdGlvbnMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAg
IHBvc2l0aW9uRnVuY3Rpb24ocG9zaXRpb25zKTsKKyAgICAgICAgdGhpcy51cGRhdGVWZXJ0aWNl
c0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIi
XS5Qb3NpdGlvbktpbmQsIHBvc2l0aW9ucywgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgaWYgKGNv
bXB1dGVOb3JtYWxzKSB7CisgICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuZ2V0SW5kaWNl
cygpOworICAgICAgICAgICAgdmFyIG5vcm1hbHMgPSB0aGlzLmdldFZlcnRpY2VzRGF0YShfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtp
bmQpOworICAgICAgICAgICAgaWYgKCFub3JtYWxzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlZlcnRleERhdGEiXS5Db21wdXRlTm9ybWFscyhwb3Np
dGlvbnMsIGluZGljZXMsIG5vcm1hbHMpOworICAgICAgICAgICAgdGhpcy51cGRhdGVWZXJ0aWNl
c0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIi
XS5Ob3JtYWxLaW5kLCBub3JtYWxzLCBmYWxzZSwgZmFsc2UpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHVuLXNoYXJl
ZCBzcGVjaWZpYyBvY2N1cmVuY2Ugb2YgdGhlIGdlb21ldHJ5IGZvciB0aGUgbWVzaC4KKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUu
bWFrZUdlb21ldHJ5VW5pcXVlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX2dl
b21ldHJ5KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB2
YXIgb2xkR2VvbWV0cnkgPSB0aGlzLl9nZW9tZXRyeTsKKyAgICAgICAgdmFyIGdlb21ldHJ5ID0g
dGhpcy5fZ2VvbWV0cnkuY29weShfZ2VvbWV0cnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEw
X19bIkdlb21ldHJ5Il0uUmFuZG9tSWQoKSk7CisgICAgICAgIG9sZEdlb21ldHJ5LnJlbGVhc2VG
b3JNZXNoKHRoaXMsIHRydWUpOworICAgICAgICBnZW9tZXRyeS5hcHBseVRvTWVzaCh0aGlzKTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGlu
ZGV4IGJ1ZmZlciBvZiB0aGlzIG1lc2gKKyAgICAgKiBAcGFyYW0gaW5kaWNlcyBkZWZpbmVzIHRo
ZSBzb3VyY2UgZGF0YQorICAgICAqIEBwYXJhbSB0b3RhbFZlcnRpY2VzIGRlZmluZXMgdGhlIHRv
dGFsIG51bWJlciBvZiB2ZXJ0aWNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgaW5kZXggZGF0YSAoY2Fu
IGJlIG51bGwpCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSB1cGRhdGVk
IGluZGV4IGJ1ZmZlciBtdXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlIChkZWZhdWx0IGlzIGZh
bHNlKQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBNZXNo
LnByb3RvdHlwZS5zZXRJbmRpY2VzID0gZnVuY3Rpb24gKGluZGljZXMsIHRvdGFsVmVydGljZXMs
IHVwZGF0YWJsZSkgeworICAgICAgICBpZiAodG90YWxWZXJ0aWNlcyA9PT0gdm9pZCAwKSB7IHRv
dGFsVmVydGljZXMgPSBudWxsOyB9CisgICAgICAgIGlmICh1cGRhdGFibGUgPT09IHZvaWQgMCkg
eyB1cGRhdGFibGUgPSBmYWxzZTsgfQorICAgICAgICBpZiAoIXRoaXMuX2dlb21ldHJ5KSB7Cisg
ICAgICAgICAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X19bIlZlcnRleERhdGEiXSgpOworICAgICAgICAgICAgdmVydGV4
RGF0YS5pbmRpY2VzID0gaW5kaWNlczsKKyAgICAgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0
U2NlbmUoKTsKKyAgICAgICAgICAgIG5ldyBfZ2VvbWV0cnlfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEwX19bIkdlb21ldHJ5Il0oX2dlb21ldHJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fWyJHZW9tZXRyeSJdLlJhbmRvbUlkKCksIHNjZW5lLCB2ZXJ0ZXhEYXRhLCB1cGRhdGFibGUs
IHRoaXMpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZ2Vv
bWV0cnkuc2V0SW5kaWNlcyhpbmRpY2VzLCB0b3RhbFZlcnRpY2VzLCB1cGRhdGFibGUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogVXBk
YXRlIHRoZSBjdXJyZW50IGluZGV4IGJ1ZmZlcgorICAgICAqIEBwYXJhbSBpbmRpY2VzIGRlZmlu
ZXMgdGhlIHNvdXJjZSBkYXRhCisgICAgICogQHBhcmFtIG9mZnNldCBkZWZpbmVzIHRoZSBvZmZz
ZXQgaW4gdGhlIGluZGV4IGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgbmV3IGRhdGEgKGNhbiBi
ZSBudWxsKQorICAgICAqIEBwYXJhbSBncHVNZW1vcnlPbmx5IGRlZmluZXMgYSBib29sZWFuIGlu
ZGljYXRpbmcgdGhhdCBvbmx5IHRoZSBHUFUgbWVtb3J5IG11c3QgYmUgdXBkYXRlZCBsZWF2aW5n
IHRoZSBDUFUgdmVyc2lvbiBvZiB0aGUgaW5kaWNlcyB1bmNoYW5nZWQgKGZhbHNlIGJ5IGRlZmF1
bHQpCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gu
cHJvdG90eXBlLnVwZGF0ZUluZGljZXMgPSBmdW5jdGlvbiAoaW5kaWNlcywgb2Zmc2V0LCBncHVN
ZW1vcnlPbmx5KSB7CisgICAgICAgIGlmIChncHVNZW1vcnlPbmx5ID09PSB2b2lkIDApIHsgZ3B1
TWVtb3J5T25seSA9IGZhbHNlOyB9CisgICAgICAgIGlmICghdGhpcy5fZ2VvbWV0cnkpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2dlb21ldHJ5
LnVwZGF0ZUluZGljZXMoaW5kaWNlcywgb2Zmc2V0LCBncHVNZW1vcnlPbmx5KTsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnZlcnQgdGhlIGdlb21ldHJ5
IHRvIG1vdmUgZnJvbSBhIHJpZ2h0IGhhbmRlZCBzeXN0ZW0gdG8gYSBsZWZ0IGhhbmRlZCBvbmUu
CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJv
dG90eXBlLnRvTGVmdEhhbmRlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9n
ZW9tZXRyeSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fZ2VvbWV0cnkudG9MZWZ0SGFuZGVkKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBNZXNoLnByb3RvdHlwZS5fYmluZCA9IGZ1bmN0
aW9uIChzdWJNZXNoLCBlZmZlY3QsIGZpbGxNb2RlKSB7CisgICAgICAgIGlmICghdGhpcy5fZ2Vv
bWV0cnkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZh
ciBlbmdpbmUgPSB0aGlzLmdldFNjZW5lKCkuZ2V0RW5naW5lKCk7CisgICAgICAgIC8vIFdpcmVm
cmFtZQorICAgICAgICB2YXIgaW5kZXhUb0JpbmQ7CisgICAgICAgIGlmICh0aGlzLl91bkluZGV4
ZWQpIHsKKyAgICAgICAgICAgIGluZGV4VG9CaW5kID0gbnVsbDsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZmlsbE1vZGUpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19b
Ik1hdGVyaWFsIl0uUG9pbnRGaWxsTW9kZToKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhUb0Jp
bmQgPSBudWxsOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1h
dGVyaWFsIl0uV2lyZUZyYW1lRmlsbE1vZGU6CisgICAgICAgICAgICAgICAgICAgIGluZGV4VG9C
aW5kID0gc3ViTWVzaC5fZ2V0TGluZXNJbmRleEJ1ZmZlcih0aGlzLmdldEluZGljZXMoKSwgZW5n
aW5lKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBjYXNlIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE0X19bIk1hdGVyaWFsIl0uVHJpYW5nbGVGaWxsTW9kZToKKyAgICAgICAg
ICAgICAgICAgICAgaW5kZXhUb0JpbmQgPSB0aGlzLl9nZW9tZXRyeS5nZXRJbmRleEJ1ZmZlcigp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAvLyBWQk9zCisgICAgICAgIHRoaXMuX2dlb21ldHJ5Ll9iaW5kKGVmZmVjdCwgaW5k
ZXhUb0JpbmQpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKiBAaGlkZGVu
ICovCisgICAgTWVzaC5wcm90b3R5cGUuX2RyYXcgPSBmdW5jdGlvbiAoc3ViTWVzaCwgZmlsbE1v
ZGUsIGluc3RhbmNlc0NvdW50KSB7CisgICAgICAgIGlmICghdGhpcy5fZ2VvbWV0cnkgfHwgIXRo
aXMuX2dlb21ldHJ5LmdldFZlcnRleEJ1ZmZlcnMoKSB8fCAoIXRoaXMuX3VuSW5kZXhlZCAmJiAh
dGhpcy5fZ2VvbWV0cnkuZ2V0SW5kZXhCdWZmZXIoKSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pbnRlcm5hbE1lc2hEYXRhSW5mby5f
b25CZWZvcmVEcmF3T2JzZXJ2YWJsZSkgeworICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxNZXNo
RGF0YUluZm8uX29uQmVmb3JlRHJhd09ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOwor
ICAgICAgICB9CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAg
dmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAodGhpcy5fdW5JbmRl
eGVkIHx8IGZpbGxNb2RlID09IF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE0X19bIk1hdGVyaWFsIl0uUG9pbnRGaWxsTW9kZSkgeworICAgICAgICAgICAgLy8g
b3IgdHJpYW5nbGVzIGFzIHBvaW50cworICAgICAgICAgICAgZW5naW5lLmRyYXdBcnJheXNUeXBl
KGZpbGxNb2RlLCBzdWJNZXNoLnZlcnRpY2VzU3RhcnQsIHN1Yk1lc2gudmVydGljZXNDb3VudCwg
aW5zdGFuY2VzQ291bnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZpbGxNb2RlID09
IF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIk1hdGVy
aWFsIl0uV2lyZUZyYW1lRmlsbE1vZGUpIHsKKyAgICAgICAgICAgIC8vIFRyaWFuZ2xlcyBhcyB3
aXJlZnJhbWUKKyAgICAgICAgICAgIGVuZ2luZS5kcmF3RWxlbWVudHNUeXBlKGZpbGxNb2RlLCAw
LCBzdWJNZXNoLl9saW5lc0luZGV4Q291bnQsIGluc3RhbmNlc0NvdW50KTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVuZ2luZS5kcmF3RWxlbWVudHNUeXBlKGZpbGxN
b2RlLCBzdWJNZXNoLmluZGV4U3RhcnQsIHN1Yk1lc2guaW5kZXhDb3VudCwgaW5zdGFuY2VzQ291
bnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmVnaXN0ZXJzIGZvciB0aGlzIG1lc2ggYSBqYXZhc2NyaXB0IGZ1bmN0aW9uIGNhbGxl
ZCBqdXN0IGJlZm9yZSB0aGUgcmVuZGVyaW5nIHByb2Nlc3MKKyAgICAgKiBAcGFyYW0gZnVuYyBk
ZWZpbmVzIHRoZSBmdW5jdGlvbiB0byBjYWxsIGJlZm9yZSByZW5kZXJpbmcgdGhpcyBtZXNoCisg
ICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90
eXBlLnJlZ2lzdGVyQmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKGZ1bmMpIHsKKyAgICAgICAgdGhp
cy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmMpOworICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIGEgcHJldmlvdXNseSByZWdpc3Rl
cmVkIGphdmFzY3JpcHQgZnVuY3Rpb24gY2FsbGVkIGJlZm9yZSB0aGUgcmVuZGVyaW5nCisgICAg
ICogQHBhcmFtIGZ1bmMgZGVmaW5lcyB0aGUgZnVuY3Rpb24gdG8gcmVtb3ZlCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLnVucmVn
aXN0ZXJCZWZvcmVSZW5kZXIgPSBmdW5jdGlvbiAoZnVuYykgeworICAgICAgICB0aGlzLm9uQmVm
b3JlUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmVDYWxsYmFjayhmdW5jKTsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlcnMgZm9yIHRoaXMgbWVzaCBh
IGphdmFzY3JpcHQgZnVuY3Rpb24gY2FsbGVkIGp1c3QgYWZ0ZXIgdGhlIHJlbmRlcmluZyBpcyBj
b21wbGV0ZQorICAgICAqIEBwYXJhbSBmdW5jIGRlZmluZXMgdGhlIGZ1bmN0aW9uIHRvIGNhbGwg
YWZ0ZXIgcmVuZGVyaW5nIHRoaXMgbWVzaAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1l
c2gKKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5yZWdpc3RlckFmdGVyUmVuZGVyID0gZnVu
Y3Rpb24gKGZ1bmMpIHsKKyAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5hZGQo
ZnVuYyk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogRGlz
cG9zZXMgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgamF2YXNjcmlwdCBmdW5jdGlvbiBjYWxsZWQg
YWZ0ZXIgdGhlIHJlbmRlcmluZy4KKyAgICAgKiBAcGFyYW0gZnVuYyBkZWZpbmVzIHRoZSBmdW5j
dGlvbiB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICov
CisgICAgTWVzaC5wcm90b3R5cGUudW5yZWdpc3RlckFmdGVyUmVuZGVyID0gZnVuY3Rpb24gKGZ1
bmMpIHsKKyAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmVDYWxsYmFj
ayhmdW5jKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIE1lc2gucHJvdG90eXBlLl9nZXRJbnN0YW5jZXNSZW5kZXJMaXN0ID0gZnVuY3Rpb24g
KHN1Yk1lc2hJZCkgeworICAgICAgICBpZiAodGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS5pc0Zy
b3plbiAmJiB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLnByZXZpb3VzQmF0Y2gpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLnByZXZpb3VzQmF0Y2g7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICB2
YXIgaXNJbkludGVybWVkaWF0ZVJlbmRlcmluZyA9IHNjZW5lLl9pc0luSW50ZXJtZWRpYXRlUmVu
ZGVyaW5nKCk7CisgICAgICAgIHZhciBvbmx5Rm9ySW5zdGFuY2VzID0gaXNJbkludGVybWVkaWF0
ZVJlbmRlcmluZyA/IHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX29ubHlGb3JJ
bnN0YW5jZXNJbnRlcm1lZGlhdGUgOiB0aGlzLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZv
Ll9vbmx5Rm9ySW5zdGFuY2VzOworICAgICAgICB2YXIgYmF0Y2hDYWNoZSA9IHRoaXMuX2luc3Rh
bmNlRGF0YVN0b3JhZ2UuYmF0Y2hDYWNoZTsKKyAgICAgICAgYmF0Y2hDYWNoZS5tdXN0UmV0dXJu
ID0gZmFsc2U7CisgICAgICAgIGJhdGNoQ2FjaGUucmVuZGVyU2VsZltzdWJNZXNoSWRdID0gIW9u
bHlGb3JJbnN0YW5jZXMgJiYgdGhpcy5pc0VuYWJsZWQoKSAmJiB0aGlzLmlzVmlzaWJsZTsKKyAg
ICAgICAgYmF0Y2hDYWNoZS52aXNpYmxlSW5zdGFuY2VzW3N1Yk1lc2hJZF0gPSBudWxsOworICAg
ICAgICBpZiAodGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS52aXNpYmxlSW5zdGFuY2VzKSB7Cisg
ICAgICAgICAgICB2YXIgdmlzaWJsZUluc3RhbmNlcyA9IHRoaXMuX2luc3RhbmNlRGF0YVN0b3Jh
Z2UudmlzaWJsZUluc3RhbmNlczsKKyAgICAgICAgICAgIHZhciBjdXJyZW50UmVuZGVySWQgPSBz
Y2VuZS5nZXRSZW5kZXJJZCgpOworICAgICAgICAgICAgdmFyIGRlZmF1bHRSZW5kZXJJZCA9IChp
c0luSW50ZXJtZWRpYXRlUmVuZGVyaW5nID8gdmlzaWJsZUluc3RhbmNlcy5pbnRlcm1lZGlhdGVE
ZWZhdWx0UmVuZGVySWQgOiB2aXNpYmxlSW5zdGFuY2VzLmRlZmF1bHRSZW5kZXJJZCk7CisgICAg
ICAgICAgICBiYXRjaENhY2hlLnZpc2libGVJbnN0YW5jZXNbc3ViTWVzaElkXSA9IHZpc2libGVJ
bnN0YW5jZXNbY3VycmVudFJlbmRlcklkXTsKKyAgICAgICAgICAgIGlmICghYmF0Y2hDYWNoZS52
aXNpYmxlSW5zdGFuY2VzW3N1Yk1lc2hJZF0gJiYgZGVmYXVsdFJlbmRlcklkKSB7CisgICAgICAg
ICAgICAgICAgYmF0Y2hDYWNoZS52aXNpYmxlSW5zdGFuY2VzW3N1Yk1lc2hJZF0gPSB2aXNpYmxl
SW5zdGFuY2VzW2RlZmF1bHRSZW5kZXJJZF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgYmF0Y2hDYWNoZS5oYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZ1tzdWJNZXNoSWRdID0g
dGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS5oYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZyAmJiAo
YmF0Y2hDYWNoZS52aXNpYmxlSW5zdGFuY2VzW3N1Yk1lc2hJZF0gIT09IG51bGwpICYmIChiYXRj
aENhY2hlLnZpc2libGVJbnN0YW5jZXNbc3ViTWVzaElkXSAhPT0gdW5kZWZpbmVkKTsKKyAgICAg
ICAgdGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS5wcmV2aW91c0JhdGNoID0gYmF0Y2hDYWNoZTsK
KyAgICAgICAgcmV0dXJuIGJhdGNoQ2FjaGU7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIE1lc2gucHJvdG90eXBlLl9yZW5kZXJXaXRoSW5zdGFuY2VzID0gZnVuY3Rpb24gKHN1Yk1l
c2gsIGZpbGxNb2RlLCBiYXRjaCwgZWZmZWN0LCBlbmdpbmUpIHsKKyAgICAgICAgdmFyIHZpc2li
bGVJbnN0YW5jZXMgPSBiYXRjaC52aXNpYmxlSW5zdGFuY2VzW3N1Yk1lc2guX2lkXTsKKyAgICAg
ICAgaWYgKCF2aXNpYmxlSW5zdGFuY2VzKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgaW5zdGFuY2VTdG9yYWdlID0gdGhpcy5faW5zdGFuY2VEYXRh
U3RvcmFnZTsKKyAgICAgICAgdmFyIGN1cnJlbnRJbnN0YW5jZXNCdWZmZXJTaXplID0gaW5zdGFu
Y2VTdG9yYWdlLmluc3RhbmNlc0J1ZmZlclNpemU7CisgICAgICAgIHZhciBpbnN0YW5jZXNCdWZm
ZXIgPSBpbnN0YW5jZVN0b3JhZ2UuaW5zdGFuY2VzQnVmZmVyOworICAgICAgICB2YXIgbWF0cmlj
ZXNDb3VudCA9IHZpc2libGVJbnN0YW5jZXMubGVuZ3RoICsgMTsKKyAgICAgICAgdmFyIGJ1ZmZl
clNpemUgPSBtYXRyaWNlc0NvdW50ICogMTYgKiA0OworICAgICAgICB3aGlsZSAoaW5zdGFuY2VT
dG9yYWdlLmluc3RhbmNlc0J1ZmZlclNpemUgPCBidWZmZXJTaXplKSB7CisgICAgICAgICAgICBp
bnN0YW5jZVN0b3JhZ2UuaW5zdGFuY2VzQnVmZmVyU2l6ZSAqPSAyOworICAgICAgICB9CisgICAg
ICAgIGlmICghaW5zdGFuY2VTdG9yYWdlLmluc3RhbmNlc0RhdGEgfHwgY3VycmVudEluc3RhbmNl
c0J1ZmZlclNpemUgIT0gaW5zdGFuY2VTdG9yYWdlLmluc3RhbmNlc0J1ZmZlclNpemUpIHsKKyAg
ICAgICAgICAgIGluc3RhbmNlU3RvcmFnZS5pbnN0YW5jZXNEYXRhID0gbmV3IEZsb2F0MzJBcnJh
eShpbnN0YW5jZVN0b3JhZ2UuaW5zdGFuY2VzQnVmZmVyU2l6ZSAvIDQpOworICAgICAgICB9Cisg
ICAgICAgIHZhciBvZmZzZXQgPSAwOworICAgICAgICB2YXIgaW5zdGFuY2VzQ291bnQgPSAwOwor
ICAgICAgICB2YXIgd29ybGQgPSB0aGlzLl9lZmZlY3RpdmVNZXNoLmdldFdvcmxkTWF0cml4KCk7
CisgICAgICAgIGlmIChiYXRjaC5yZW5kZXJTZWxmW3N1Yk1lc2guX2lkXSkgeworICAgICAgICAg
ICAgd29ybGQuY29weVRvQXJyYXkoaW5zdGFuY2VTdG9yYWdlLmluc3RhbmNlc0RhdGEsIG9mZnNl
dCk7CisgICAgICAgICAgICBvZmZzZXQgKz0gMTY7CisgICAgICAgICAgICBpbnN0YW5jZXNDb3Vu
dCsrOworICAgICAgICB9CisgICAgICAgIGlmICh2aXNpYmxlSW5zdGFuY2VzKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBpbnN0YW5jZUluZGV4ID0gMDsgaW5zdGFuY2VJbmRleCA8IHZpc2libGVJ
bnN0YW5jZXMubGVuZ3RoOyBpbnN0YW5jZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
aW5zdGFuY2UgPSB2aXNpYmxlSW5zdGFuY2VzW2luc3RhbmNlSW5kZXhdOworICAgICAgICAgICAg
ICAgIGluc3RhbmNlLmdldFdvcmxkTWF0cml4KCkuY29weVRvQXJyYXkoaW5zdGFuY2VTdG9yYWdl
Lmluc3RhbmNlc0RhdGEsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE2Owor
ICAgICAgICAgICAgICAgIGluc3RhbmNlc0NvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFpbnN0YW5jZXNCdWZmZXIgfHwgY3VycmVudEluc3RhbmNlc0J1ZmZl
clNpemUgIT0gaW5zdGFuY2VTdG9yYWdlLmluc3RhbmNlc0J1ZmZlclNpemUpIHsKKyAgICAgICAg
ICAgIGlmIChpbnN0YW5jZXNCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZXNCdWZm
ZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5zdGFuY2VzQnVmZmVy
ID0gbmV3IF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQnVmZmVyIl0oZW5n
aW5lLCBpbnN0YW5jZVN0b3JhZ2UuaW5zdGFuY2VzRGF0YSwgdHJ1ZSwgMTYsIGZhbHNlLCB0cnVl
KTsKKyAgICAgICAgICAgIGluc3RhbmNlU3RvcmFnZS5pbnN0YW5jZXNCdWZmZXIgPSBpbnN0YW5j
ZXNCdWZmZXI7CisgICAgICAgICAgICB0aGlzLnNldFZlcnRpY2VzQnVmZmVyKGluc3RhbmNlc0J1
ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoIndvcmxkMCIsIDAsIDQpKTsKKyAgICAgICAgICAgIHRo
aXMuc2V0VmVydGljZXNCdWZmZXIoaW5zdGFuY2VzQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcigi
d29ybGQxIiwgNCwgNCkpOworICAgICAgICAgICAgdGhpcy5zZXRWZXJ0aWNlc0J1ZmZlcihpbnN0
YW5jZXNCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKCJ3b3JsZDIiLCA4LCA0KSk7CisgICAgICAg
ICAgICB0aGlzLnNldFZlcnRpY2VzQnVmZmVyKGluc3RhbmNlc0J1ZmZlci5jcmVhdGVWZXJ0ZXhC
dWZmZXIoIndvcmxkMyIsIDEyLCA0KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBpbnN0YW5jZXNCdWZmZXIudXBkYXRlRGlyZWN0bHkoaW5zdGFuY2VTdG9yYWdlLmlu
c3RhbmNlc0RhdGEsIDAsIGluc3RhbmNlc0NvdW50KTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9iaW5kKHN1Yk1lc2gsIGVmZmVjdCwgZmlsbE1vZGUpOworICAgICAgICB0aGlzLl9kcmF3KHN1
Yk1lc2gsIGZpbGxNb2RlLCBpbnN0YW5jZXNDb3VudCk7CisgICAgICAgIGVuZ2luZS51bmJpbmRJ
bnN0YW5jZUF0dHJpYnV0ZXMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIE1lc2gucHJvdG90eXBlLl9wcm9jZXNzUmVuZGVyaW5nID0gZnVu
Y3Rpb24gKHN1Yk1lc2gsIGVmZmVjdCwgZmlsbE1vZGUsIGJhdGNoLCBoYXJkd2FyZUluc3RhbmNl
ZFJlbmRlcmluZywgb25CZWZvcmVEcmF3LCBlZmZlY3RpdmVNYXRlcmlhbCkgeworICAgICAgICB2
YXIgc2NlbmUgPSB0aGlzLmdldFNjZW5lKCk7CisgICAgICAgIHZhciBlbmdpbmUgPSBzY2VuZS5n
ZXRFbmdpbmUoKTsKKyAgICAgICAgaWYgKGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nKSB7Cisg
ICAgICAgICAgICB0aGlzLl9yZW5kZXJXaXRoSW5zdGFuY2VzKHN1Yk1lc2gsIGZpbGxNb2RlLCBi
YXRjaCwgZWZmZWN0LCBlbmdpbmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgaWYgKGJhdGNoLnJlbmRlclNlbGZbc3ViTWVzaC5faWRdKSB7CisgICAgICAgICAgICAg
ICAgLy8gRHJhdworICAgICAgICAgICAgICAgIGlmIChvbkJlZm9yZURyYXcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgb25CZWZvcmVEcmF3KGZhbHNlLCB0aGlzLl9lZmZlY3RpdmVNZXNoLmdldFdv
cmxkTWF0cml4KCksIGVmZmVjdGl2ZU1hdGVyaWFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgdGhpcy5fZHJhdyhzdWJNZXNoLCBmaWxsTW9kZSwgdGhpcy5faW5zdGFuY2VE
YXRhU3RvcmFnZS5vdmVycmlkZW5JbnN0YW5jZUNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHZhciB2aXNpYmxlSW5zdGFuY2VzRm9yU3ViTWVzaCA9IGJhdGNoLnZpc2libGVJbnN0
YW5jZXNbc3ViTWVzaC5faWRdOworICAgICAgICAgICAgaWYgKHZpc2libGVJbnN0YW5jZXNGb3JT
dWJNZXNoKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5zdGFuY2VJbmRleCA9IDA7IGlu
c3RhbmNlSW5kZXggPCB2aXNpYmxlSW5zdGFuY2VzRm9yU3ViTWVzaC5sZW5ndGg7IGluc3RhbmNl
SW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB2aXNpYmxlSW5z
dGFuY2VzRm9yU3ViTWVzaFtpbnN0YW5jZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
V29ybGQKKyAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmxkID0gaW5zdGFuY2UuZ2V0V29ybGRN
YXRyaXgoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9uQmVmb3JlRHJhdykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgb25CZWZvcmVEcmF3KHRydWUsIHdvcmxkLCBlZmZlY3RpdmVNYXRl
cmlhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gRHJh
dworICAgICAgICAgICAgICAgICAgICB0aGlzLl9kcmF3KHN1Yk1lc2gsIGZpbGxNb2RlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE1lc2gucHJvdG90eXBlLl9y
ZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5faW5zdGFuY2VEYXRhU3Rv
cmFnZS5pbnN0YW5jZXNCdWZmZXIpIHsKKyAgICAgICAgICAgIC8vIERpc3Bvc2UgaW5zdGFuY2Ug
YnVmZmVyIHRvIGJlIHJlY3JlYXRlZCBpbiBfcmVuZGVyV2l0aEluc3RhbmNlcyB3aGVuIHJlbmRl
cmVkCisgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLmluc3RhbmNlc0J1ZmZl
ci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdlLmluc3Rh
bmNlc0J1ZmZlciA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5f
cmVidWlsZC5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBNZXNo
LnByb3RvdHlwZS5fZnJlZXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuc3Vi
TWVzaGVzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gUHJl
cGFyZSBiYXRjaGVzCisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnN1
Yk1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHRoaXMuX2dldEluc3RhbmNl
c1JlbmRlckxpc3QoaW5kZXgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VmZmVjdGl2ZU1h
dGVyaWFsID0gbnVsbDsKKyAgICAgICAgdGhpcy5faW5zdGFuY2VEYXRhU3RvcmFnZS5pc0Zyb3pl
biA9IHRydWU7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE1lc2gucHJvdG90eXBl
Ll91bkZyZWV6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW5zdGFuY2VEYXRhU3Rv
cmFnZS5pc0Zyb3plbiA9IGZhbHNlOworICAgICAgICB0aGlzLl9pbnN0YW5jZURhdGFTdG9yYWdl
LnByZXZpb3VzQmF0Y2ggPSBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogVHJpZ2dlcnMg
dGhlIGRyYXcgY2FsbCBmb3IgdGhlIG1lc2guIFVzdWFsbHksIHlvdSBkb24ndCBuZWVkIHRvIGNh
bGwgdGhpcyBtZXRob2QgYnkgeW91ciBvd24gYmVjYXVzZSB0aGUgbWVzaCByZW5kZXJpbmcgaXMg
aGFuZGxlZCBieSB0aGUgc2NlbmUgcmVuZGVyaW5nIG1hbmFnZXIKKyAgICAgKiBAcGFyYW0gc3Vi
TWVzaCBkZWZpbmVzIHRoZSBzdWJNZXNoIHRvIHJlbmRlcgorICAgICAqIEBwYXJhbSBlbmFibGVB
bHBoYU1vZGUgZGVmaW5lcyBpZiBhbHBoYSBtb2RlIGNhbiBiZSBjaGFuZ2VkCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLnJlbmRl
ciA9IGZ1bmN0aW9uIChzdWJNZXNoLCBlbmFibGVBbHBoYU1vZGUpIHsKKyAgICAgICAgdmFyIHNj
ZW5lID0gdGhpcy5nZXRTY2VuZSgpOworICAgICAgICBpZiAoc2NlbmUuX2lzSW5JbnRlcm1lZGlh
dGVSZW5kZXJpbmcoKSkgeworICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxBYnN0cmFjdE1lc2hE
YXRhSW5mby5faXNBY3RpdmVJbnRlcm1lZGlhdGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8u
X2lzQWN0aXZlID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2NoZWNrT2Nj
bHVzaW9uUXVlcnkoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gTWFuYWdpbmcgaW5zdGFuY2VzCisgICAgICAgIHZhciBiYXRjaCA9IHRoaXMuX2dl
dEluc3RhbmNlc1JlbmRlckxpc3Qoc3ViTWVzaC5faWQpOworICAgICAgICBpZiAoYmF0Y2gubXVz
dFJldHVybikgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQ2hlY2tpbmcgZ2VvbWV0cnkgc3RhdGUKKyAgICAgICAgaWYgKCF0aGlzLl9nZW9tZXRyeSB8
fCAhdGhpcy5fZ2VvbWV0cnkuZ2V0VmVydGV4QnVmZmVycygpIHx8ICghdGhpcy5fdW5JbmRleGVk
ICYmICF0aGlzLl9nZW9tZXRyeS5nZXRJbmRleEJ1ZmZlcigpKSkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2ludGVybmFsTWVzaERhdGFJ
bmZvLl9vbkJlZm9yZVJlbmRlck9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2ludGVy
bmFsTWVzaERhdGFJbmZvLl9vbkJlZm9yZVJlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJz
KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUo
KTsKKyAgICAgICAgdmFyIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nID0gYmF0Y2guaGFyZHdh
cmVJbnN0YW5jZWRSZW5kZXJpbmdbc3ViTWVzaC5faWRdOworICAgICAgICB2YXIgaW5zdGFuY2VE
YXRhU3RvcmFnZSA9IHRoaXMuX2luc3RhbmNlRGF0YVN0b3JhZ2U7CisgICAgICAgIHZhciBtYXRl
cmlhbCA9IHN1Yk1lc2guZ2V0TWF0ZXJpYWwoKTsKKyAgICAgICAgaWYgKCFtYXRlcmlhbCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgLy8gTWF0ZXJpYWwK
KyAgICAgICAgaWYgKCFpbnN0YW5jZURhdGFTdG9yYWdlLmlzRnJvemVuIHx8ICF0aGlzLl9lZmZl
Y3RpdmVNYXRlcmlhbCB8fCB0aGlzLl9lZmZlY3RpdmVNYXRlcmlhbCAhPT0gbWF0ZXJpYWwpIHsK
KyAgICAgICAgICAgIHRoaXMuX2VmZmVjdGl2ZU1hdGVyaWFsID0gbWF0ZXJpYWw7CisgICAgICAg
ICAgICBpZiAodGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwuX3N0b3JlRWZmZWN0T25TdWJNZXNoZXMp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2VmZmVjdGl2ZU1hdGVyaWFsLmlzUmVhZHlG
b3JTdWJNZXNoKHRoaXMsIHN1Yk1lc2gsIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nKSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwu
aXNSZWFkeSh0aGlzLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZykpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBB
bHBoYSBtb2RlCisgICAgICAgIGlmIChlbmFibGVBbHBoYU1vZGUpIHsKKyAgICAgICAgICAgIGVu
Z2luZS5zZXRBbHBoYU1vZGUodGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwuYWxwaGFNb2RlKTsKKyAg
ICAgICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gc2NlbmUuX2JlZm9yZVJlbmRl
cmluZ01lc2hTdGFnZTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBz
dGVwID0gX2FbX2ldOworICAgICAgICAgICAgc3RlcC5hY3Rpb24odGhpcywgc3ViTWVzaCwgYmF0
Y2gpOworICAgICAgICB9CisgICAgICAgIHZhciBlZmZlY3Q7CisgICAgICAgIGlmICh0aGlzLl9l
ZmZlY3RpdmVNYXRlcmlhbC5fc3RvcmVFZmZlY3RPblN1Yk1lc2hlcykgeworICAgICAgICAgICAg
ZWZmZWN0ID0gc3ViTWVzaC5lZmZlY3Q7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBlZmZlY3QgPSB0aGlzLl9lZmZlY3RpdmVNYXRlcmlhbC5nZXRFZmZlY3QoKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWVmZmVjdCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVmZmVjdGl2ZU1lc2ggPSB0aGlzLl9lZmZlY3RpdmVN
ZXNoOworICAgICAgICB2YXIgc2lkZU9yaWVudGF0aW9uOworICAgICAgICBpZiAoIWluc3RhbmNl
RGF0YVN0b3JhZ2UuaXNGcm96ZW4pIHsKKyAgICAgICAgICAgIHNpZGVPcmllbnRhdGlvbiA9IHRo
aXMub3ZlcnJpZGVNYXRlcmlhbFNpZGVPcmllbnRhdGlvbjsKKyAgICAgICAgICAgIGlmIChzaWRl
T3JpZW50YXRpb24gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNpZGVPcmllbnRhdGlvbiA9
IHRoaXMuX2VmZmVjdGl2ZU1hdGVyaWFsLnNpZGVPcmllbnRhdGlvbjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChlZmZlY3RpdmVNZXNoLl9nZXRXb3JsZE1hdHJpeERldGVybWluYW50
KCkgPCAwKSB7CisgICAgICAgICAgICAgICAgc2lkZU9yaWVudGF0aW9uID0gKHNpZGVPcmllbnRh
dGlvbiA9PT0gX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRf
X1siTWF0ZXJpYWwiXS5DbG9ja1dpc2VTaWRlT3JpZW50YXRpb24gPyBfTWF0ZXJpYWxzX21hdGVy
aWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbCJdLkNvdW50ZXJDbG9j
a1dpc2VTaWRlT3JpZW50YXRpb24gOiBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbCJdLkNsb2NrV2lzZVNpZGVPcmllbnRhdGlvbik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpbnN0YW5jZURhdGFTdG9yYWdlLnNpZGVPcmllbnRh
dGlvbiA9IHNpZGVPcmllbnRhdGlvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHNpZGVPcmllbnRhdGlvbiA9IGluc3RhbmNlRGF0YVN0b3JhZ2Uuc2lkZU9yaWVudGF0
aW9uOworICAgICAgICB9CisgICAgICAgIHZhciByZXZlcnNlID0gdGhpcy5fZWZmZWN0aXZlTWF0
ZXJpYWwuX3ByZUJpbmQoZWZmZWN0LCBzaWRlT3JpZW50YXRpb24pOworICAgICAgICBpZiAodGhp
cy5fZWZmZWN0aXZlTWF0ZXJpYWwuZm9yY2VEZXB0aFdyaXRlKSB7CisgICAgICAgICAgICBlbmdp
bmUuc2V0RGVwdGhXcml0ZSh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBCaW5kCisgICAg
ICAgIHZhciBmaWxsTW9kZSA9IHNjZW5lLmZvcmNlUG9pbnRzQ2xvdWQgPyBfTWF0ZXJpYWxzX21h
dGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbCJdLlBvaW50Rmls
bE1vZGUgOiAoc2NlbmUuZm9yY2VXaXJlZnJhbWUgPyBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJNYXRlcmlhbCJdLldpcmVGcmFtZUZpbGxNb2RlIDog
dGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwuZmlsbE1vZGUpOworICAgICAgICBpZiAodGhpcy5faW50
ZXJuYWxNZXNoRGF0YUluZm8uX29uQmVmb3JlQmluZE9ic2VydmFibGUpIHsKKyAgICAgICAgICAg
IHRoaXMuX2ludGVybmFsTWVzaERhdGFJbmZvLl9vbkJlZm9yZUJpbmRPYnNlcnZhYmxlLm5vdGlm
eU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWhhcmR3YXJlSW5zdGFu
Y2VkUmVuZGVyaW5nKSB7IC8vIEJpbmRpbmcgd2lsbCBiZSBkb25lIGxhdGVyIGJlY2F1c2Ugd2Ug
bmVlZCB0byBhZGQgbW9yZSBpbmZvIHRvIHRoZSBWQgorICAgICAgICAgICAgdGhpcy5fYmluZChz
dWJNZXNoLCBlZmZlY3QsIGZpbGxNb2RlKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgd29ybGQg
PSBlZmZlY3RpdmVNZXNoLmdldFdvcmxkTWF0cml4KCk7CisgICAgICAgIGlmICh0aGlzLl9lZmZl
Y3RpdmVNYXRlcmlhbC5fc3RvcmVFZmZlY3RPblN1Yk1lc2hlcykgeworICAgICAgICAgICAgdGhp
cy5fZWZmZWN0aXZlTWF0ZXJpYWwuYmluZEZvclN1Yk1lc2god29ybGQsIHRoaXMsIHN1Yk1lc2gp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZWZmZWN0aXZl
TWF0ZXJpYWwuYmluZCh3b3JsZCwgdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlz
Ll9lZmZlY3RpdmVNYXRlcmlhbC5iYWNrRmFjZUN1bGxpbmcgJiYgdGhpcy5fZWZmZWN0aXZlTWF0
ZXJpYWwuc2VwYXJhdGVDdWxsaW5nUGFzcykgeworICAgICAgICAgICAgZW5naW5lLnNldFN0YXRl
KHRydWUsIHRoaXMuX2VmZmVjdGl2ZU1hdGVyaWFsLnpPZmZzZXQsIGZhbHNlLCAhcmV2ZXJzZSk7
CisgICAgICAgICAgICB0aGlzLl9wcm9jZXNzUmVuZGVyaW5nKHN1Yk1lc2gsIGVmZmVjdCwgZmls
bE1vZGUsIGJhdGNoLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZywgdGhpcy5fb25CZWZvcmVE
cmF3LCB0aGlzLl9lZmZlY3RpdmVNYXRlcmlhbCk7CisgICAgICAgICAgICBlbmdpbmUuc2V0U3Rh
dGUodHJ1ZSwgdGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwuek9mZnNldCwgZmFsc2UsIHJldmVyc2Up
OworICAgICAgICB9CisgICAgICAgIC8vIERyYXcKKyAgICAgICAgdGhpcy5fcHJvY2Vzc1JlbmRl
cmluZyhzdWJNZXNoLCBlZmZlY3QsIGZpbGxNb2RlLCBiYXRjaCwgaGFyZHdhcmVJbnN0YW5jZWRS
ZW5kZXJpbmcsIHRoaXMuX29uQmVmb3JlRHJhdywgdGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwpOwor
ICAgICAgICAvLyBVbmJpbmQKKyAgICAgICAgdGhpcy5fZWZmZWN0aXZlTWF0ZXJpYWwudW5iaW5k
KCk7CisgICAgICAgIGZvciAodmFyIF9iID0gMCwgX2MgPSBzY2VuZS5fYWZ0ZXJSZW5kZXJpbmdN
ZXNoU3RhZ2U7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7CisgICAgICAgICAgICB2YXIgc3RlcCA9
IF9jW19iXTsKKyAgICAgICAgICAgIHN0ZXAuYWN0aW9uKHRoaXMsIHN1Yk1lc2gsIGJhdGNoKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm8uX29uQWZ0
ZXJSZW5kZXJPYnNlcnZhYmxlKSB7CisgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbE1lc2hEYXRh
SW5mby5fb25BZnRlclJlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgTWVzaC5wcm90b3R5cGUu
X29uQmVmb3JlRHJhdyA9IGZ1bmN0aW9uIChpc0luc3RhbmNlLCB3b3JsZCwgZWZmZWN0aXZlTWF0
ZXJpYWwpIHsKKyAgICAgICAgaWYgKGlzSW5zdGFuY2UgJiYgZWZmZWN0aXZlTWF0ZXJpYWwpIHsK
KyAgICAgICAgICAgIGVmZmVjdGl2ZU1hdGVyaWFsLmJpbmRPbmx5V29ybGRNYXRyaXgod29ybGQp
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiAgIFJlbm9ybWFsaXplIHRoZSBt
ZXNoIGFuZCBwYXRjaCBpdCB1cCBpZiB0aGVyZSBhcmUgbm8gd2VpZ2h0cworICAgICAqICAgU2lt
aWxhciB0byBub3JtYWxpemF0aW9uIGJ5IGFkZGluZyB0aGUgd2VpZ2h0cyBjb21wdXRlIHRoZSBy
ZWNpcHJvY2FsIGFuZCBtdWx0aXBseSBhbGwgZWxlbWVudHMsIHRoaXMgd2lsIGVuc3VyZSB0aGF0
IGV2ZXJ5dGhpbmcgYWRkcyB0byAxLgorICAgICAqICAgSG93ZXZlciBpbiB0aGUgY2FzZSBvZiB6
ZXJvIHdlaWdodHMgdGhlbiB3ZSBzZXQganVzdCBhIHNpbmdsZSBpbmZsdWVuY2UgdG8gMS4KKyAg
ICAgKiAgIFdlIGNoZWNrIGluIHRoZSBmdW5jdGlvbiBmb3IgZXh0cmEncyBwcmVzZW50IGFuZCBp
ZiBzbyB3ZSB1c2UgdGhlIG5vcm1hbGl6ZVNraW5XZWlnaHRzV2l0aEV4dHJhcyByYXRoZXIgdGhh
biB0aGUgRm91cldlaWdodHMgdmVyc2lvbi4KKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5j
bGVhbk1hdHJpeFdlaWdodHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLmlzVmVy
dGljZXNEYXRhUHJlc2VudChfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZl
cnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpKSB7CisgICAgICAgICAgICBpZiAodGhp
cy5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQpKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5ub3JtYWxpemVTa2luV2VpZ2h0c0FuZEV4dHJhKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZVNr
aW5Gb3VyV2VpZ2h0cygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAv
LyBmYXN0ZXIgNCB3ZWlnaHQgdmVyc2lvbi4KKyAgICBNZXNoLnByb3RvdHlwZS5ub3JtYWxpemVT
a2luRm91cldlaWdodHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBtYXRyaWNlc1dlaWdo
dHMgPSB0aGlzLmdldFZlcnRpY2VzRGF0YShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV84X19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpOworICAgICAgICB2YXIg
bnVtV2VpZ2h0cyA9IG1hdHJpY2VzV2VpZ2h0cy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGEg
PSAwOyBhIDwgbnVtV2VpZ2h0czsgYSArPSA0KSB7CisgICAgICAgICAgICAvLyBhY2N1bXVsYXRl
IHdlaWdodHMKKyAgICAgICAgICAgIHZhciB0ID0gbWF0cmljZXNXZWlnaHRzW2FdICsgbWF0cmlj
ZXNXZWlnaHRzW2EgKyAxXSArIG1hdHJpY2VzV2VpZ2h0c1thICsgMl0gKyBtYXRyaWNlc1dlaWdo
dHNbYSArIDNdOworICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGludmFsaWQgd2VpZ2h0IGFuZCBq
dXN0IHNldCBpdCB0byAxLgorICAgICAgICAgICAgaWYgKHQgPT09IDApIHsKKyAgICAgICAgICAg
ICAgICBtYXRyaWNlc1dlaWdodHNbYV0gPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gcmVub3JtYWxpemUgc28gZXZlcnl0aGluZyBhZGRz
IHRvIDEgdXNlIHJlY2lwcmljYWwKKyAgICAgICAgICAgICAgICB2YXIgcmVjaXAgPSAxIC8gdDsK
KyAgICAgICAgICAgICAgICBtYXRyaWNlc1dlaWdodHNbYV0gKj0gcmVjaXA7CisgICAgICAgICAg
ICAgICAgbWF0cmljZXNXZWlnaHRzW2EgKyAxXSAqPSByZWNpcDsKKyAgICAgICAgICAgICAgICBt
YXRyaWNlc1dlaWdodHNbYSArIDJdICo9IHJlY2lwOworICAgICAgICAgICAgICAgIG1hdHJpY2Vz
V2VpZ2h0c1thICsgM10gKj0gcmVjaXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5zZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kLCBtYXRyaWNlc1dlaWdodHMp
OworICAgIH07CisgICAgLy8gaGFuZGxlIHNwZWNpYWwgY2FzZSBvZiBleHRyYSB2ZXJ0cy4gIChp
biB0aGVvcnkgZ2x0ZiBjYW4gaGFuZGxlIDEyIGluZmx1ZW5jZXMpCisgICAgTWVzaC5wcm90b3R5
cGUubm9ybWFsaXplU2tpbldlaWdodHNBbmRFeHRyYSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dmFyIG1hdHJpY2VzV2VpZ2h0c0V4dHJhID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdo
dHNFeHRyYUtpbmQpOworICAgICAgICB2YXIgbWF0cmljZXNXZWlnaHRzID0gdGhpcy5nZXRWZXJ0
aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZm
ZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKTsKKyAgICAgICAgdmFyIG51bVdlaWdodHMgPSBtYXRy
aWNlc1dlaWdodHMubGVuZ3RoOworICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IG51bVdlaWdo
dHM7IGEgKz0gNCkgeworICAgICAgICAgICAgLy8gYWNjdW11bGF0ZSB3ZWlnaHRzCisgICAgICAg
ICAgICB2YXIgdCA9IG1hdHJpY2VzV2VpZ2h0c1thXSArIG1hdHJpY2VzV2VpZ2h0c1thICsgMV0g
KyBtYXRyaWNlc1dlaWdodHNbYSArIDJdICsgbWF0cmljZXNXZWlnaHRzW2EgKyAzXTsKKyAgICAg
ICAgICAgIHQgKz0gbWF0cmljZXNXZWlnaHRzRXh0cmFbYV0gKyBtYXRyaWNlc1dlaWdodHNFeHRy
YVthICsgMV0gKyBtYXRyaWNlc1dlaWdodHNFeHRyYVthICsgMl0gKyBtYXRyaWNlc1dlaWdodHNF
eHRyYVthICsgM107CisgICAgICAgICAgICAvLyBjaGVjayBmb3IgaW52YWxpZCB3ZWlnaHQgYW5k
IGp1c3Qgc2V0IGl0IHRvIDEuCisgICAgICAgICAgICBpZiAodCA9PT0gMCkgeworICAgICAgICAg
ICAgICAgIG1hdHJpY2VzV2VpZ2h0c1thXSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyByZW5vcm1hbGl6ZSBzbyBldmVyeXRoaW5nIGFk
ZHMgdG8gMSB1c2UgcmVjaXByaWNhbAorICAgICAgICAgICAgICAgIHZhciByZWNpcCA9IDEgLyB0
OworICAgICAgICAgICAgICAgIG1hdHJpY2VzV2VpZ2h0c1thXSAqPSByZWNpcDsKKyAgICAgICAg
ICAgICAgICBtYXRyaWNlc1dlaWdodHNbYSArIDFdICo9IHJlY2lwOworICAgICAgICAgICAgICAg
IG1hdHJpY2VzV2VpZ2h0c1thICsgMl0gKj0gcmVjaXA7CisgICAgICAgICAgICAgICAgbWF0cmlj
ZXNXZWlnaHRzW2EgKyAzXSAqPSByZWNpcDsKKyAgICAgICAgICAgICAgICAvLyBzYW1lIGdvZXMg
Zm9yIGV4dHJhcworICAgICAgICAgICAgICAgIG1hdHJpY2VzV2VpZ2h0c0V4dHJhW2FdICo9IHJl
Y2lwOworICAgICAgICAgICAgICAgIG1hdHJpY2VzV2VpZ2h0c0V4dHJhW2EgKyAxXSAqPSByZWNp
cDsKKyAgICAgICAgICAgICAgICBtYXRyaWNlc1dlaWdodHNFeHRyYVthICsgMl0gKj0gcmVjaXA7
CisgICAgICAgICAgICAgICAgbWF0cmljZXNXZWlnaHRzRXh0cmFbYSArIDNdICo9IHJlY2lwOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuc2V0VmVydGljZXNEYXRhKF9i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTWF0cmlj
ZXNXZWlnaHRzS2luZCwgbWF0cmljZXNXZWlnaHRzKTsKKyAgICAgICAgdGhpcy5zZXRWZXJ0aWNl
c0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIi
XS5NYXRyaWNlc1dlaWdodHNLaW5kLCBtYXRyaWNlc1dlaWdodHNFeHRyYSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBWYWxpZGF0ZVNraW5uaW5nIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoYXQg
YSBtZXNoIGhhcyB2YWxpZCBza2lubmluZyBkYXRhIGFsb25nIHdpdGggc2tpbiBtZXRyaWNzLCBp
ZiBtaXNzaW5nIHdlaWdodHMsCisgICAgICogb3Igbm90IG5vcm1hbGl6ZWQgaXQgaXMgcmV0dXJu
ZWQgYXMgaW52YWxpZCBtZXNoIHRoZSBzdHJpbmcgY2FuIGJlIHVzZWQgZm9yIGNvbnNvbGUgbG9n
cywgb3Igb24gc2NyZWVuIG1lc3NhZ2VzIHRvIGxldAorICAgICAqIHRoZSB1c2VyIGtub3cgdGhl
cmUgd2FzIGFuIGlzc3VlIHdpdGggaW1wb3J0aW5nIHRoZSBtZXNoCisgICAgICogQHJldHVybnMg
YSB2YWxpZGF0aW9uIG9iamVjdCB3aXRoIHNraW5uZWQsIHZhbGlkIGFuZCByZXBvcnQgc3RyaW5n
CisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUudmFsaWRhdGVTa2lubmluZyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIG1hdHJpY2VzV2VpZ2h0c0V4dHJhID0gdGhpcy5nZXRWZXJ0aWNl
c0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIi
XS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQpOworICAgICAgICB2YXIgbWF0cmljZXNXZWlnaHRz
ID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKTsKKyAgICAgICAgaWYgKG1h
dHJpY2VzV2VpZ2h0cyA9PT0gbnVsbCB8fCB0aGlzLnNrZWxldG9uID09IG51bGwpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7IHNraW5uZWQ6IGZhbHNlLCB2YWxpZDogdHJ1ZSwgcmVwb3J0OiAibm90
IHNraW5uZWQiIH07CisgICAgICAgIH0KKyAgICAgICAgdmFyIG51bVdlaWdodHMgPSBtYXRyaWNl
c1dlaWdodHMubGVuZ3RoOworICAgICAgICB2YXIgbnVtYmVyTm90U29ydGVkID0gMDsKKyAgICAg
ICAgdmFyIG1pc3NpbmdXZWlnaHRzID0gMDsKKyAgICAgICAgdmFyIG1heFVzZWRXZWlnaHRzID0g
MDsKKyAgICAgICAgdmFyIG51bWJlck5vdE5vcm1hbGl6ZWQgPSAwOworICAgICAgICB2YXIgbnVt
SW5mbHVlbmNlcyA9IG1hdHJpY2VzV2VpZ2h0c0V4dHJhID09PSBudWxsID8gNCA6IDg7CisgICAg
ICAgIHZhciB1c2VkV2VpZ2h0Q291bnRzID0gbmV3IEFycmF5KCk7CisgICAgICAgIGZvciAodmFy
IGEgPSAwOyBhIDw9IG51bUluZmx1ZW5jZXM7IGErKykgeworICAgICAgICAgICAgdXNlZFdlaWdo
dENvdW50c1thXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRvbGVyYW5jZUVwc2lsb24g
PSAwLjAwMTsKKyAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBudW1XZWlnaHRzOyBhICs9IDQp
IHsKKyAgICAgICAgICAgIHZhciBsYXN0V2VpZ2h0ID0gbWF0cmljZXNXZWlnaHRzW2FdOworICAg
ICAgICAgICAgdmFyIHQgPSBsYXN0V2VpZ2h0OworICAgICAgICAgICAgdmFyIHVzZWRXZWlnaHRz
ID0gdCA9PT0gMCA/IDAgOiAxOworICAgICAgICAgICAgZm9yICh2YXIgYiA9IDE7IGIgPCBudW1J
bmZsdWVuY2VzOyBiKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgZCA9IGIgPCA0ID8gbWF0cmlj
ZXNXZWlnaHRzW2EgKyBiXSA6IG1hdHJpY2VzV2VpZ2h0c0V4dHJhW2EgKyBiIC0gNF07CisgICAg
ICAgICAgICAgICAgaWYgKGQgPiBsYXN0V2VpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIG51
bWJlck5vdFNvcnRlZCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
ZCAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB1c2VkV2VpZ2h0cysrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ICs9IGQ7CisgICAgICAgICAgICAgICAgbGFzdFdl
aWdodCA9IGQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBjb3VudCB0aGUgYnVmZmVy
IHdlaWdodHMgdXNhZ2UKKyAgICAgICAgICAgIHVzZWRXZWlnaHRDb3VudHNbdXNlZFdlaWdodHNd
Kys7CisgICAgICAgICAgICAvLyBtYXggaW5mbHVlbmNlcworICAgICAgICAgICAgaWYgKHVzZWRX
ZWlnaHRzID4gbWF4VXNlZFdlaWdodHMpIHsKKyAgICAgICAgICAgICAgICBtYXhVc2VkV2VpZ2h0
cyA9IHVzZWRXZWlnaHRzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gY2hlY2sgZm9y
IGludmFsaWQgd2VpZ2h0IGFuZCBqdXN0IHNldCBpdCB0byAxLgorICAgICAgICAgICAgaWYgKHQg
PT09IDApIHsKKyAgICAgICAgICAgICAgICBtaXNzaW5nV2VpZ2h0cysrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gcmVub3JtYWxpemUgc28g
ZXZlcnl0aGluZyBhZGRzIHRvIDEgdXNlIHJlY2lwcmljYWwKKyAgICAgICAgICAgICAgICB2YXIg
cmVjaXAgPSAxIC8gdDsKKyAgICAgICAgICAgICAgICB2YXIgdG9sZXJhbmNlID0gMDsKKyAgICAg
ICAgICAgICAgICBmb3IgKGIgPSAwOyBiIDwgbnVtSW5mbHVlbmNlczsgYisrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChiIDwgNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdG9sZXJh
bmNlICs9IE1hdGguYWJzKG1hdHJpY2VzV2VpZ2h0c1thICsgYl0gLSAobWF0cmljZXNXZWlnaHRz
W2EgKyBiXSAqIHJlY2lwKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0b2xlcmFuY2UgKz0gTWF0aC5h
YnMobWF0cmljZXNXZWlnaHRzRXh0cmFbYSArIGIgLSA0XSAtIChtYXRyaWNlc1dlaWdodHNFeHRy
YVthICsgYiAtIDRdICogcmVjaXApKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBhcmJpdGFyeSBlcHNpbG9uIHZhbHVlIGZvciBk
aWNkYXRpbmcgbm90IG5vcm1hbGl6ZWQKKyAgICAgICAgICAgICAgICBpZiAodG9sZXJhbmNlID4g
dG9sZXJhbmNlRXBzaWxvbikgeworICAgICAgICAgICAgICAgICAgICBudW1iZXJOb3ROb3JtYWxp
emVkKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIC8vIHZhbGlkYXRlIGJvbmUgaW5kaWNlcyBhcmUgaW4gcmFuZ2Ugb2YgdGhlIHNrZWxldG9u
CisgICAgICAgIHZhciBudW1Cb25lcyA9IHRoaXMuc2tlbGV0b24uYm9uZXMubGVuZ3RoOworICAg
ICAgICB2YXIgbWF0cmljZXNJbmRpY2VzID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGlj
ZXNLaW5kKTsKKyAgICAgICAgdmFyIG1hdHJpY2VzSW5kaWNlc0V4dHJhID0gdGhpcy5nZXRWZXJ0
aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZm
ZXIiXS5NYXRyaWNlc0luZGljZXNFeHRyYUtpbmQpOworICAgICAgICB2YXIgbnVtQmFkQm9uZUlu
ZGljZXMgPSAwOworICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IG51bVdlaWdodHM7IGErKykg
eworICAgICAgICAgICAgZm9yICh2YXIgYiA9IDA7IGIgPCBudW1JbmZsdWVuY2VzOyBiKyspIHsK
KyAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBiIDwgNCA/IG1hdHJpY2VzSW5kaWNlc1tiXSA6
IG1hdHJpY2VzSW5kaWNlc0V4dHJhW2IgLSA0XTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXgg
Pj0gbnVtQm9uZXMgfHwgaW5kZXggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIG51bUJhZEJv
bmVJbmRpY2VzKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIC8vIGxvZyBtZXNoIHN0YXRzCisgICAgICAgIHZhciBvdXRwdXQgPSAiTnVtYmVy
IG9mIFdlaWdodHMgPSAiICsgbnVtV2VpZ2h0cyAvIDQgKyAiXG5NYXhpbXVtIGluZmx1ZW5jZXMg
PSAiICsgbWF4VXNlZFdlaWdodHMgKworICAgICAgICAgICAgIlxuTWlzc2luZyBXZWlnaHRzID0g
IiArIG1pc3NpbmdXZWlnaHRzICsgIlxuTm90IFNvcnRlZCA9ICIgKyBudW1iZXJOb3RTb3J0ZWQg
KworICAgICAgICAgICAgIlxuTm90IE5vcm1hbGl6ZWQgPSAiICsgbnVtYmVyTm90Tm9ybWFsaXpl
ZCArICJcbldlaWdodENvdW50cyA9IFsiICsgdXNlZFdlaWdodENvdW50cyArICJdIiArCisgICAg
ICAgICAgICAiXG5OdW1iZXIgb2YgYm9uZXMgPSAiICsgbnVtQm9uZXMgKyAiXG5CYWQgQm9uZSBJ
bmRpY2VzID0gIiArIG51bUJhZEJvbmVJbmRpY2VzOworICAgICAgICByZXR1cm4geyBza2lubmVk
OiB0cnVlLCB2YWxpZDogbWlzc2luZ1dlaWdodHMgPT09IDAgJiYgbnVtYmVyTm90Tm9ybWFsaXpl
ZCA9PT0gMCAmJiBudW1CYWRCb25lSW5kaWNlcyA9PT0gMCwgcmVwb3J0OiBvdXRwdXQgfTsKKyAg
ICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTWVzaC5wcm90b3R5cGUuX2NoZWNrRGVsYXlT
dGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5nZXRTY2VuZSgp
OworICAgICAgICBpZiAodGhpcy5fZ2VvbWV0cnkpIHsKKyAgICAgICAgICAgIHRoaXMuX2dlb21l
dHJ5LmxvYWQoc2NlbmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMuZGVsYXlM
b2FkU3RhdGUgPT09IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTdfX1siQ29uc3RhbnRzIl0uREVMQVlMT0FEU1RBVEVfTk9UTE9BREVEKSB7CisgICAgICAgICAg
ICB0aGlzLmRlbGF5TG9hZFN0YXRlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9MT0FESU5HOworICAg
ICAgICAgICAgdGhpcy5fcXVldWVMb2FkKHNjZW5lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIE1lc2gucHJvdG90eXBlLl9xdWV1ZUxvYWQgPSBmdW5jdGlv
biAoc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgc2NlbmUuX2Fk
ZFBlbmRpbmdEYXRhKHRoaXMpOworICAgICAgICB2YXIgZ2V0QmluYXJ5RGF0YSA9ICh0aGlzLmRl
bGF5TG9hZGluZ0ZpbGUuaW5kZXhPZigiLmJhYnlsb25iaW5hcnltZXNoZGF0YSIpICE9PSAtMSk7
CisgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRvb2xz
Il0uTG9hZEZpbGUodGhpcy5kZWxheUxvYWRpbmdGaWxlLCBmdW5jdGlvbiAoZGF0YSkgeworICAg
ICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgeworICAgICAgICAgICAg
ICAgIF90aGlzLl9kZWxheUxvYWRpbmdGdW5jdGlvbihkYXRhLCBfdGhpcyk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fZGVsYXlMb2Fk
aW5nRnVuY3Rpb24oSlNPTi5wYXJzZShkYXRhKSwgX3RoaXMpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgX3RoaXMuaW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24gKGluc3RhbmNlKSB7Cisg
ICAgICAgICAgICAgICAgaW5zdGFuY2UucmVmcmVzaEJvdW5kaW5nSW5mbygpOworICAgICAgICAg
ICAgICAgIGluc3RhbmNlLl9zeW5jU3ViTWVzaGVzKCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIF90aGlzLmRlbGF5TG9hZFN0YXRlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9MT0FERUQ7
CisgICAgICAgICAgICBzY2VuZS5fcmVtb3ZlUGVuZGluZ0RhdGEoX3RoaXMpOworICAgICAgICB9
LCBmdW5jdGlvbiAoKSB7IH0sIHNjZW5lLm9mZmxpbmVQcm92aWRlciwgZ2V0QmluYXJ5RGF0YSk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBg
dHJ1ZWAgaWYgdGhlIG1lc2ggaXMgd2l0aGluIHRoZSBmcnVzdHVtIGRlZmluZWQgYnkgdGhlIHBh
c3NlZCBhcnJheSBvZiBwbGFuZXMuCisgICAgICogQSBtZXNoIGlzIGluIHRoZSBmcnVzdHVtIGlm
IGl0cyBib3VuZGluZyBib3ggaW50ZXJzZWN0cyB0aGUgZnJ1c3R1bQorICAgICAqIEBwYXJhbSBm
cnVzdHVtUGxhbmVzIGRlZmluZXMgdGhlIGZydXN0dW0gdG8gdGVzdAorICAgICAqIEByZXR1cm5z
IHRydWUgaWYgdGhlIG1lc2ggaXMgaW4gdGhlIGZydXN0dW0gcGxhbmVzCisgICAgICovCisgICAg
TWVzaC5wcm90b3R5cGUuaXNJbkZydXN0dW0gPSBmdW5jdGlvbiAoZnJ1c3R1bVBsYW5lcykgewor
ICAgICAgICBpZiAodGhpcy5kZWxheUxvYWRTdGF0ZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJDb25zdGFudHMiXS5ERUxBWUxPQURTVEFURV9M
T0FESU5HKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFfc3VwZXIucHJvdG90eXBlLmlzSW5GcnVzdHVtLmNhbGwodGhpcywgZnJ1c3R1bVBsYW5l
cykpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9jaGVja0RlbGF5U3RhdGUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIHRoZSBtZXNoIG1hdGVyaWFsIGJ5IHRoZSBtYXRlcmlhbCBvciBtdWx0
aU1hdGVyaWFsIGBpZGAgcHJvcGVydHkKKyAgICAgKiBAcGFyYW0gaWQgaXMgYSBzdHJpbmcgaWRl
bnRpZnlpbmcgdGhlIG1hdGVyaWFsIG9yIHRoZSBtdWx0aU1hdGVyaWFsCisgICAgICogQHJldHVy
bnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLnNldE1hdGVy
aWFsQnlJRCA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICB2YXIgbWF0ZXJpYWxzID0gdGhpcy5n
ZXRTY2VuZSgpLm1hdGVyaWFsczsKKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICBmb3IgKGlu
ZGV4ID0gbWF0ZXJpYWxzLmxlbmd0aCAtIDE7IGluZGV4ID4gLTE7IGluZGV4LS0pIHsKKyAgICAg
ICAgICAgIGlmIChtYXRlcmlhbHNbaW5kZXhdLmlkID09PSBpZCkgeworICAgICAgICAgICAgICAg
IHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbHNbaW5kZXhdOworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE11bHRpCisgICAg
ICAgIHZhciBtdWx0aU1hdGVyaWFscyA9IHRoaXMuZ2V0U2NlbmUoKS5tdWx0aU1hdGVyaWFsczsK
KyAgICAgICAgZm9yIChpbmRleCA9IG11bHRpTWF0ZXJpYWxzLmxlbmd0aCAtIDE7IGluZGV4ID4g
LTE7IGluZGV4LS0pIHsKKyAgICAgICAgICAgIGlmIChtdWx0aU1hdGVyaWFsc1tpbmRleF0uaWQg
PT09IGlkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG11bHRpTWF0ZXJpYWxz
W2luZGV4XTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
dHVybnMgYXMgYSBuZXcgYXJyYXkgcG9wdWxhdGVkIHdpdGggdGhlIG1lc2ggbWF0ZXJpYWwgYW5k
L29yIHNrZWxldG9uLCBpZiBhbnkuCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgSUFuaW1h
dGFibGUKKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5nZXRBbmltYXRhYmxlcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgaWYg
KHRoaXMubWF0ZXJpYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLm1hdGVyaWFs
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5za2VsZXRvbikgeworICAgICAgICAgICAg
cmVzdWx0cy5wdXNoKHRoaXMuc2tlbGV0b24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXN1bHRzOworICAgIH07CisgICAgLyoqCisgICAgICogTW9kaWZpZXMgdGhlIG1lc2ggZ2VvbWV0
cnkgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgdHJhbnNmb3JtYXRpb24gbWF0cml4LgorICAgICAq
IFRoaXMgbWV0aG9kIHJldHVybnMgbm90aGluZyBidXQgaXQgcmVhbGx5IG1vZGlmaWVzIHRoZSBt
ZXNoIGV2ZW4gaWYgaXQncyBvcmlnaW5hbGx5IG5vdCBzZXQgYXMgdXBkYXRhYmxlLgorICAgICAq
IFRoZSBtZXNoIG5vcm1hbHMgYXJlIG1vZGlmaWVkIHVzaW5nIHRoZSBzYW1lIHRyYW5zZm9ybWF0
aW9uLgorICAgICAqIE5vdGUgdGhhdCwgdW5kZXIgdGhlIGhvb2QsIHRoaXMgbWV0aG9kIHNldHMg
YSBuZXcgVmVydGV4QnVmZmVyIGVhY2ggY2FsbC4KKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtIGRl
ZmluZXMgdGhlIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlCisgICAgICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vcmVzb3VyY2VzL2Jha2luZ190cmFuc2Zvcm1hdGlvbnMKKyAgICAgKiBA
cmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUuYmFr
ZVRyYW5zZm9ybUludG9WZXJ0aWNlcyA9IGZ1bmN0aW9uICh0cmFuc2Zvcm0pIHsKKyAgICAgICAg
Ly8gUG9zaXRpb24KKyAgICAgICAgaWYgKCF0aGlzLmlzVmVydGljZXNEYXRhUHJlc2VudChfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9u
S2luZCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZh
ciBzdWJtZXNoZXMgPSB0aGlzLnN1Yk1lc2hlcy5zcGxpY2UoMCk7CisgICAgICAgIHRoaXMuX3Jl
c2V0UG9pbnRzQXJyYXlDYWNoZSgpOworICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0VmVydGlj
ZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVy
Il0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAgdmFyIHRlbXAgPSBuZXcgQXJyYXkoKTsKKyAgICAg
ICAgdmFyIGluZGV4OworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0
aDsgaW5kZXggKz0gMykgeworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlcyhfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZy
b21BcnJheShkYXRhLCBpbmRleCksIHRyYW5zZm9ybSkudG9BcnJheSh0ZW1wLCBpbmRleCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5zZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHRlbXAsIHRo
aXMuZ2V0VmVydGV4QnVmZmVyKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
VmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKS5pc1VwZGF0YWJsZSgpKTsKKyAgICAgICAgLy8g
Tm9ybWFscworICAgICAgICBpZiAodGhpcy5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKSkg
eworICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCk7CisgICAg
ICAgICAgICB0ZW1wID0gW107CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBk
YXRhLmxlbmd0aDsgaW5kZXggKz0gMykgeworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9y
bWFsKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0
b3IzIl0uRnJvbUFycmF5KGRhdGEsIGluZGV4KSwgdHJhbnNmb3JtKS5ub3JtYWxpemUoKS50b0Fy
cmF5KHRlbXAsIGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc2V0VmVy
dGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVm
ZmVyIl0uTm9ybWFsS2luZCwgdGVtcCwgdGhpcy5nZXRWZXJ0ZXhCdWZmZXIoX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKS5pc1Vw
ZGF0YWJsZSgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBmbGlwIGZhY2VzPworICAgICAgICBp
ZiAodHJhbnNmb3JtLm1bMF0gKiB0cmFuc2Zvcm0ubVs1XSAqIHRyYW5zZm9ybS5tWzEwXSA8IDAp
IHsKKyAgICAgICAgICAgIHRoaXMuZmxpcEZhY2VzKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8g
UmVzdG9yZSBzdWJtZXNoZXMKKyAgICAgICAgdGhpcy5yZWxlYXNlU3ViTWVzaGVzKCk7CisgICAg
ICAgIHRoaXMuc3ViTWVzaGVzID0gc3VibWVzaGVzOworICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIE1vZGlmaWVzIHRoZSBtZXNoIGdlb21ldHJ5IGFjY29yZGlu
ZyB0byBpdHMgb3duIGN1cnJlbnQgV29ybGQgTWF0cml4LgorICAgICAqIFRoZSBtZXNoIFdvcmxk
IE1hdHJpeCBpcyB0aGVuIHJlc2V0LgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgbm90aGlu
ZyBidXQgcmVhbGx5IG1vZGlmaWVzIHRoZSBtZXNoIGV2ZW4gaWYgaXQncyBvcmlnaW5hbGx5IG5v
dCBzZXQgYXMgdXBkYXRhYmxlLgorICAgICAqIE5vdGUgdGhhdCwgdW5kZXIgdGhlIGhvb2QsIHRo
aXMgbWV0aG9kIHNldHMgYSBuZXcgVmVydGV4QnVmZmVyIGVhY2ggY2FsbC4KKyAgICAgKiBAc2Vl
IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9yZXNvdXJjZXMvYmFraW5nX3RyYW5zZm9ybWF0aW9u
cworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBNZXNoLnBy
b3RvdHlwZS5iYWtlQ3VycmVudFRyYW5zZm9ybUludG9WZXJ0aWNlcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGhpcy5iYWtlVHJhbnNmb3JtSW50b1ZlcnRpY2VzKHRoaXMuY29tcHV0ZVdvcmxk
TWF0cml4KHRydWUpKTsKKyAgICAgICAgdGhpcy5zY2FsaW5nLmNvcHlGcm9tRmxvYXRzKDEsIDEs
IDEpOworICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHlGcm9tRmxvYXRzKDAsIDAsIDApOworICAg
ICAgICB0aGlzLnJvdGF0aW9uLmNvcHlGcm9tRmxvYXRzKDAsIDAsIDApOworICAgICAgICAvL29u
bHkgaWYgcXVhdGVybmlvbiBpcyBhbHJlYWR5IHNldAorICAgICAgICBpZiAodGhpcy5yb3RhdGlv
blF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlF1YXRlcm5pb24i
XS5JZGVudGl0eSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1hdHJpeCJdLklk
ZW50aXR5KCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KE1lc2gucHJvdG90eXBlLCAiX3Bvc2l0aW9ucyIsIHsKKyAgICAgICAgLy8gQ2Fj
aGUKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fZ2VvbWV0cnkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5fZ2VvbWV0cnkuX3Bvc2l0aW9uczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE1l
c2gucHJvdG90eXBlLl9yZXNldFBvaW50c0FycmF5Q2FjaGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICh0aGlzLl9nZW9tZXRyeSkgeworICAgICAgICAgICAgdGhpcy5fZ2VvbWV0cnkuX3Jl
c2V0UG9pbnRzQXJyYXlDYWNoZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBNZXNoLnByb3RvdHlwZS5fZ2VuZXJhdGVQ
b2ludHNBcnJheSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2dlb21ldHJ5KSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2VvbWV0cnkuX2dlbmVyYXRlUG9pbnRzQXJyYXko
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIGEgbmV3IE1lc2ggb2JqZWN0IGdlbmVyYXRlZCBmcm9tIHRoZSBjdXJyZW50
IG1lc2ggcHJvcGVydGllcy4KKyAgICAgKiBUaGlzIG1ldGhvZCBtdXN0IG5vdCBnZXQgY29uZnVz
ZWQgd2l0aCBjcmVhdGVJbnN0YW5jZSgpCisgICAgICogQHBhcmFtIG5hbWUgaXMgYSBzdHJpbmcs
IHRoZSBuYW1lIGdpdmVuIHRvIHRoZSBuZXcgbWVzaAorICAgICAqIEBwYXJhbSBuZXdQYXJlbnQg
Y2FuIGJlIGFueSBOb2RlIG9iamVjdCAoZGVmYXVsdCBgbnVsbGApCisgICAgICogQHBhcmFtIGRv
Tm90Q2xvbmVDaGlsZHJlbiBhbGxvd3MvZGVuaWVzIHRoZSByZWN1cnNpdmUgY2xvbmluZyBvZiB0
aGUgb3JpZ2luYWwgbWVzaCBjaGlsZHJlbiBpZiBhbnkgKGRlZmF1bHQgYGZhbHNlYCkKKyAgICAg
KiBAcGFyYW0gY2xvbmVQaHlzaWNzSW1wb3N0b3IgYWxsb3dzL2RlbmllcyB0aGUgY2xvbmluZyBp
biB0aGUgc2FtZSB0aW1lIG9mIHRoZSBvcmlnaW5hbCBtZXNoIGBib2R5YCB1c2VkIGJ5IHRoZSBw
aHlzaWNzIGVuZ2luZSwgaWYgYW55IChkZWZhdWx0IGB0cnVlYCkKKyAgICAgKiBAcmV0dXJucyBh
IG5ldyBtZXNoCisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAo
bmFtZSwgbmV3UGFyZW50LCBkb05vdENsb25lQ2hpbGRyZW4sIGNsb25lUGh5c2ljc0ltcG9zdG9y
KSB7CisgICAgICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9ICIiOyB9CisgICAgICAg
IGlmIChuZXdQYXJlbnQgPT09IHZvaWQgMCkgeyBuZXdQYXJlbnQgPSBudWxsOyB9CisgICAgICAg
IGlmIChjbG9uZVBoeXNpY3NJbXBvc3RvciA9PT0gdm9pZCAwKSB7IGNsb25lUGh5c2ljc0ltcG9z
dG9yID0gdHJ1ZTsgfQorICAgICAgICByZXR1cm4gbmV3IE1lc2gobmFtZSwgdGhpcy5nZXRTY2Vu
ZSgpLCBuZXdQYXJlbnQsIHRoaXMsIGRvTm90Q2xvbmVDaGlsZHJlbiwgY2xvbmVQaHlzaWNzSW1w
b3N0b3IpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZXMgcmVzb3VyY2VzIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIG1lc2guCisgICAgICogQHBhcmFtIGRvTm90UmVjdXJzZSBTZXQgdG8g
dHJ1ZSB0byBub3QgcmVjdXJzZSBpbnRvIGVhY2ggY2hpbGRyZW4gKHJlY3Vyc2UgaW50byBlYWNo
IGNoaWxkcmVuIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGRpc3Bvc2VNYXRlcmlhbEFuZFRl
eHR1cmVzIFNldCB0byB0cnVlIHRvIGFsc28gZGlzcG9zZSByZWZlcmVuY2VkIG1hdGVyaWFscyBh
bmQgdGV4dHVyZXMgKGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgTWVzaC5wcm90b3R5
cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChkb05vdFJlY3Vyc2UsIGRpc3Bvc2VNYXRlcmlhbEFuZFRl
eHR1cmVzKSB7CisgICAgICAgIGlmIChkaXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcyA9PT0gdm9p
ZCAwKSB7IGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzID0gZmFsc2U7IH0KKyAgICAgICAgdGhp
cy5tb3JwaFRhcmdldE1hbmFnZXIgPSBudWxsOworICAgICAgICBpZiAodGhpcy5fZ2VvbWV0cnkp
IHsKKyAgICAgICAgICAgIHRoaXMuX2dlb21ldHJ5LnJlbGVhc2VGb3JNZXNoKHRoaXMsIHRydWUp
OworICAgICAgICB9CisgICAgICAgIHZhciBpbnRlcm5hbERhdGFJbmZvID0gdGhpcy5faW50ZXJu
YWxNZXNoRGF0YUluZm87CisgICAgICAgIGlmIChpbnRlcm5hbERhdGFJbmZvLl9vbkJlZm9yZURy
YXdPYnNlcnZhYmxlKSB7CisgICAgICAgICAgICBpbnRlcm5hbERhdGFJbmZvLl9vbkJlZm9yZURy
YXdPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGludGVybmFsRGF0
YUluZm8uX29uQmVmb3JlQmluZE9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIGludGVybmFsRGF0
YUluZm8uX29uQmVmb3JlQmluZE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoaW50ZXJuYWxEYXRhSW5mby5fb25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlKSB7CisgICAg
ICAgICAgICBpbnRlcm5hbERhdGFJbmZvLl9vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuY2xlYXIo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW50ZXJuYWxEYXRhSW5mby5fb25BZnRlclJlbmRl
ck9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIGludGVybmFsRGF0YUluZm8uX29uQWZ0ZXJSZW5k
ZXJPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU291cmNlcworICAg
ICAgICBpZiAodGhpcy5fc2NlbmUudXNlQ2xvbmVkTWVzaGhNYXApIHsKKyAgICAgICAgICAgIGlm
IChpbnRlcm5hbERhdGFJbmZvLm1lc2hNYXApIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciB1
bmlxdWVJZCBpbiBpbnRlcm5hbERhdGFJbmZvLm1lc2hNYXApIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIG1lc2ggPSBpbnRlcm5hbERhdGFJbmZvLm1lc2hNYXBbdW5pcXVlSWRdOworICAgICAg
ICAgICAgICAgICAgICBpZiAobWVzaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5f
aW50ZXJuYWxNZXNoRGF0YUluZm8uX3NvdXJjZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnRlcm5hbERhdGFJbmZvLm1lc2hNYXBbdW5pcXVlSWRdID0gdW5kZWZpbmVkOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGludGVybmFsRGF0YUluZm8uX3NvdXJjZSAmJiBpbnRlcm5hbERhdGFJbmZv
Ll9zb3VyY2UuX2ludGVybmFsTWVzaERhdGFJbmZvLm1lc2hNYXApIHsKKyAgICAgICAgICAgICAg
ICBpbnRlcm5hbERhdGFJbmZvLl9zb3VyY2UuX2ludGVybmFsTWVzaERhdGFJbmZvLm1lc2hNYXBb
dGhpcy51bmlxdWVJZF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgbWVzaGVzID0gdGhpcy5nZXRTY2VuZSgpLm1l
c2hlczsKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgbWVzaGVzXzEgPSBtZXNoZXM7IF9p
IDwgbWVzaGVzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGFic3RyYWN0
TWVzaCA9IG1lc2hlc18xW19pXTsKKyAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IGFic3RyYWN0
TWVzaDsKKyAgICAgICAgICAgICAgICBpZiAobWVzaC5faW50ZXJuYWxNZXNoRGF0YUluZm8gJiYg
bWVzaC5faW50ZXJuYWxNZXNoRGF0YUluZm8uX3NvdXJjZSAmJiBtZXNoLl9pbnRlcm5hbE1lc2hE
YXRhSW5mby5fc291cmNlID09PSB0aGlzKSB7CisgICAgICAgICAgICAgICAgICAgIG1lc2guX2lu
dGVybmFsTWVzaERhdGFJbmZvLl9zb3VyY2UgPSBudWxsOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnRlcm5hbERhdGFJbmZvLl9zb3VyY2Ug
PSBudWxsOworICAgICAgICAvLyBJbnN0YW5jZXMKKyAgICAgICAgaWYgKHRoaXMuX2luc3RhbmNl
RGF0YVN0b3JhZ2UuaW5zdGFuY2VzQnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9pbnN0YW5j
ZURhdGFTdG9yYWdlLmluc3RhbmNlc0J1ZmZlci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlz
Ll9pbnN0YW5jZURhdGFTdG9yYWdlLmluc3RhbmNlc0J1ZmZlciA9IG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgd2hpbGUgKHRoaXMuaW5zdGFuY2VzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhp
cy5pbnN0YW5jZXNbMF0uZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90
b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMsIGRvTm90UmVjdXJzZSwgZGlzcG9zZU1hdGVyaWFsQW5k
VGV4dHVyZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogTW9kaWZpZXMgdGhlIG1lc2ggZ2Vv
bWV0cnkgYWNjb3JkaW5nIHRvIGEgZGlzcGxhY2VtZW50IG1hcC4KKyAgICAgKiBBIGRpc3BsYWNl
bWVudCBtYXAgaXMgYSBjb2xvcmVkIGltYWdlLiBFYWNoIHBpeGVsIGNvbG9yIHZhbHVlIChhY3R1
YWxseSBhIGdyYWRpZW50IGNvbXB1dGVkIGZyb20gcmVkLCBncmVlbiwgYmx1ZSB2YWx1ZXMpIHdp
bGwgZ2l2ZSB0aGUgZGlzcGxhY2VtZW50IHRvIGFwcGx5IHRvIGVhY2ggbWVzaCB2ZXJ0ZXguCisg
ICAgICogVGhlIG1lc2ggbXVzdCBiZSBzZXQgYXMgdXBkYXRhYmxlLiBJdHMgaW50ZXJuYWwgZ2Vv
bWV0cnkgaXMgZGlyZWN0bHkgbW9kaWZpZWQsIG5vIG5ldyBidWZmZXIgYXJlIGFsbG9jYXRlZC4K
KyAgICAgKiBAcGFyYW0gdXJsIGlzIGEgc3RyaW5nLCB0aGUgVVJMIGZyb20gdGhlIGltYWdlIGZp
bGUgaXMgdG8gYmUgZG93bmxvYWRlZC4KKyAgICAgKiBAcGFyYW0gbWluSGVpZ2h0IGlzIHRoZSBs
b3dlciBsaW1pdCBvZiB0aGUgZGlzcGxhY2VtZW50LgorICAgICAqIEBwYXJhbSBtYXhIZWlnaHQg
aXMgdGhlIHVwcGVyIGxpbWl0IG9mIHRoZSBkaXNwbGFjZW1lbnQuCisgICAgICogQHBhcmFtIG9u
U3VjY2VzcyBpcyBhbiBvcHRpb25hbCBKYXZhc2NyaXB0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBq
dXN0IGFmdGVyIHRoZSBtZXNoIGlzIG1vZGlmaWVkLiBJdCBpcyBwYXNzZWQgdGhlIG1vZGlmaWVk
IG1lc2ggYW5kIG11c3QgcmV0dXJuIG5vdGhpbmcuCisgICAgICogQHBhcmFtIHV2T2Zmc2V0IGlz
IGFuIG9wdGlvbmFsIHZlY3RvcjIgdXNlZCB0byBvZmZzZXQgVVYuCisgICAgICogQHBhcmFtIHV2
U2NhbGUgaXMgYW4gb3B0aW9uYWwgdmVjdG9yMiB1c2VkIHRvIHNjYWxlIFVWLgorICAgICAqIEBw
YXJhbSBmb3JjZVVwZGF0ZSBkZWZpbmVzIHdoZXRoZXIgb3Igbm90IHRvIGZvcmNlIGFuIHVwZGF0
ZSBvZiB0aGUgZ2VuZXJhdGVkIGJ1ZmZlcnMuIFRoaXMgaXMgdXNlZnVsIHRvIGFwcGx5IG9uIGEg
ZGVzZXJpYWxpemVkIG1vZGVsIGZvciBpbnN0YW5jZS4KKyAgICAgKiBAcmV0dXJucyB0aGUgTWVz
aC4KKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5hcHBseURpc3BsYWNlbWVudE1hcCA9IGZ1
bmN0aW9uICh1cmwsIG1pbkhlaWdodCwgbWF4SGVpZ2h0LCBvblN1Y2Nlc3MsIHV2T2Zmc2V0LCB1
dlNjYWxlLCBmb3JjZVVwZGF0ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAg
ICBpZiAoZm9yY2VVcGRhdGUgPT09IHZvaWQgMCkgeyBmb3JjZVVwZGF0ZSA9IGZhbHNlOyB9Cisg
ICAgICAgIHZhciBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoKTsKKyAgICAgICAgdmFyIG9ubG9hZCA9
IGZ1bmN0aW9uIChpbWcpIHsKKyAgICAgICAgICAgIC8vIEdldHRpbmcgaGVpZ2h0IG1hcCBkYXRh
CisgICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFz
Iik7CisgICAgICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwor
ICAgICAgICAgICAgdmFyIGhlaWdodE1hcFdpZHRoID0gaW1nLndpZHRoOworICAgICAgICAgICAg
dmFyIGhlaWdodE1hcEhlaWdodCA9IGltZy5oZWlnaHQ7CisgICAgICAgICAgICBjYW52YXMud2lk
dGggPSBoZWlnaHRNYXBXaWR0aDsKKyAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHRN
YXBIZWlnaHQ7CisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWcsIDAsIDApOworICAg
ICAgICAgICAgLy8gQ3JlYXRlIFZlcnRleERhdGEgZnJvbSBtYXAgZGF0YQorICAgICAgICAgICAg
Ly9DYXN0IGlzIGR1ZSB0byB3cm9uZyBkZWZpbml0aW9uIGluIGxpYi5kLnRzIGZyb20gdHMgMS4z
IC0gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy85NDkKKyAg
ICAgICAgICAgIHZhciBidWZmZXIgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBoZWlnaHRN
YXBXaWR0aCwgaGVpZ2h0TWFwSGVpZ2h0KS5kYXRhOworICAgICAgICAgICAgX3RoaXMuYXBwbHlE
aXNwbGFjZW1lbnRNYXBGcm9tQnVmZmVyKGJ1ZmZlciwgaGVpZ2h0TWFwV2lkdGgsIGhlaWdodE1h
cEhlaWdodCwgbWluSGVpZ2h0LCBtYXhIZWlnaHQsIHV2T2Zmc2V0LCB1dlNjYWxlLCBmb3JjZVVw
ZGF0ZSk7CisgICAgICAgICAgICAvL2V4ZWN1dGUgc3VjY2VzcyBjYWxsYmFjaywgaWYgc2V0Cisg
ICAgICAgICAgICBpZiAob25TdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgb25TdWNjZXNzKF90
aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgX01pc2NfdG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9vbHMiXS5Mb2FkSW1hZ2UodXJsLCBvbmxvYWQs
IGZ1bmN0aW9uICgpIHsgfSwgc2NlbmUub2ZmbGluZVByb3ZpZGVyKTsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBNb2RpZmllcyB0aGUgbWVzaCBnZW9tZXRy
eSBhY2NvcmRpbmcgdG8gYSBkaXNwbGFjZW1lbnRNYXAgYnVmZmVyLgorICAgICAqIEEgZGlzcGxh
Y2VtZW50IG1hcCBpcyBhIGNvbG9yZWQgaW1hZ2UuIEVhY2ggcGl4ZWwgY29sb3IgdmFsdWUgKGFj
dHVhbGx5IGEgZ3JhZGllbnQgY29tcHV0ZWQgZnJvbSByZWQsIGdyZWVuLCBibHVlIHZhbHVlcykg
d2lsbCBnaXZlIHRoZSBkaXNwbGFjZW1lbnQgdG8gYXBwbHkgdG8gZWFjaCBtZXNoIHZlcnRleC4K
KyAgICAgKiBUaGUgbWVzaCBtdXN0IGJlIHNldCBhcyB1cGRhdGFibGUuIEl0cyBpbnRlcm5hbCBn
ZW9tZXRyeSBpcyBkaXJlY3RseSBtb2RpZmllZCwgbm8gbmV3IGJ1ZmZlciBhcmUgYWxsb2NhdGVk
LgorICAgICAqIEBwYXJhbSBidWZmZXIgaXMgYSBgVWludDhBcnJheWAgYnVmZmVyIGNvbnRhaW5p
bmcgc2VyaWVzIG9mIGBVaW50OGAgbG93ZXIgdGhhbiAyNTUsIHRoZSByZWQsIGdyZWVuLCBibHVl
IGFuZCBhbHBoYSB2YWx1ZXMgb2YgZWFjaCBzdWNjZXNzaXZlIHBpeGVsLgorICAgICAqIEBwYXJh
bSBoZWlnaHRNYXBXaWR0aCBpcyB0aGUgd2lkdGggb2YgdGhlIGJ1ZmZlciBpbWFnZS4KKyAgICAg
KiBAcGFyYW0gaGVpZ2h0TWFwSGVpZ2h0IGlzIHRoZSBoZWlnaHQgb2YgdGhlIGJ1ZmZlciBpbWFn
ZS4KKyAgICAgKiBAcGFyYW0gbWluSGVpZ2h0IGlzIHRoZSBsb3dlciBsaW1pdCBvZiB0aGUgZGlz
cGxhY2VtZW50LgorICAgICAqIEBwYXJhbSBtYXhIZWlnaHQgaXMgdGhlIHVwcGVyIGxpbWl0IG9m
IHRoZSBkaXNwbGFjZW1lbnQuCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhbiBvcHRpb25h
bCBKYXZhc2NyaXB0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBqdXN0IGFmdGVyIHRoZSBtZXNoIGlz
IG1vZGlmaWVkLiBJdCBpcyBwYXNzZWQgdGhlIG1vZGlmaWVkIG1lc2ggYW5kIG11c3QgcmV0dXJu
IG5vdGhpbmcuCisgICAgICogQHBhcmFtIHV2T2Zmc2V0IGlzIGFuIG9wdGlvbmFsIHZlY3RvcjIg
dXNlZCB0byBvZmZzZXQgVVYuCisgICAgICogQHBhcmFtIHV2U2NhbGUgaXMgYW4gb3B0aW9uYWwg
dmVjdG9yMiB1c2VkIHRvIHNjYWxlIFVWLgorICAgICAqIEBwYXJhbSBmb3JjZVVwZGF0ZSBkZWZp
bmVzIHdoZXRoZXIgb3Igbm90IHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgZ2VuZXJhdGVkIGJ1
ZmZlcnMuIFRoaXMgaXMgdXNlZnVsIHRvIGFwcGx5IG9uIGEgZGVzZXJpYWxpemVkIG1vZGVsIGZv
ciBpbnN0YW5jZS4KKyAgICAgKiBAcmV0dXJucyB0aGUgTWVzaC4KKyAgICAgKi8KKyAgICBNZXNo
LnByb3RvdHlwZS5hcHBseURpc3BsYWNlbWVudE1hcEZyb21CdWZmZXIgPSBmdW5jdGlvbiAoYnVm
ZmVyLCBoZWlnaHRNYXBXaWR0aCwgaGVpZ2h0TWFwSGVpZ2h0LCBtaW5IZWlnaHQsIG1heEhlaWdo
dCwgdXZPZmZzZXQsIHV2U2NhbGUsIGZvcmNlVXBkYXRlKSB7CisgICAgICAgIGlmIChmb3JjZVVw
ZGF0ZSA9PT0gdm9pZCAwKSB7IGZvcmNlVXBkYXRlID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKCF0
aGlzLmlzVmVydGljZXNEYXRhUHJlc2VudChfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV84X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCkKKyAgICAgICAgICAgIHx8ICF0aGlz
LmlzVmVydGljZXNEYXRhUHJlc2VudChfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQpCisgICAgICAgICAgICB8fCAhdGhpcy5pc1Zl
cnRpY2VzRGF0YVByZXNlbnQoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJW
ZXJ0ZXhCdWZmZXIiXS5VVktpbmQpKSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE5X19bIkxvZ2dlciJdLldhcm4oIkNhbm5vdCBjYWxsIGFwcGx5
RGlzcGxhY2VtZW50TWFwOiBHaXZlbiBtZXNoIGlzIG5vdCBjb21wbGV0ZS4gUG9zaXRpb24sIE5v
cm1hbCBvciBVViBhcmUgbWlzc2luZyIpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25L
aW5kLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgdmFyIG5vcm1hbHMgPSB0aGlzLmdldFZlcnRpY2Vz
RGF0YShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJd
Lk5vcm1hbEtpbmQpOworICAgICAgICB2YXIgdXZzID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQp
OworICAgICAgICB2YXIgcG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgdmFyIG5vcm1hbCA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0b3Iz
Il0uWmVybygpOworICAgICAgICB2YXIgdXYgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMiJdLlplcm8oKTsKKyAgICAgICAgdXZPZmZzZXQg
PSB1dk9mZnNldCB8fCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siVmVjdG9yMiJdLlplcm8oKTsKKyAgICAgICAgdXZTY2FsZSA9IHV2U2NhbGUgfHwgbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0b3Iy
Il0oMSwgMSk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBwb3NpdGlvbnMu
bGVuZ3RoOyBpbmRleCArPSAzKSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKHBvc2l0
aW9ucywgaW5kZXgsIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYobm9y
bWFscywgaW5kZXgsIG5vcm1hbCk7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMiJdLkZyb21BcnJheVRvUmVmKHV2cywg
KGluZGV4IC8gMykgKiAyLCB1dik7CisgICAgICAgICAgICAvLyBDb21wdXRlIGhlaWdodAorICAg
ICAgICAgICAgdmFyIHUgPSAoKE1hdGguYWJzKHV2LnggKiB1dlNjYWxlLnggKyB1dk9mZnNldC54
KSAqIGhlaWdodE1hcFdpZHRoKSAlIGhlaWdodE1hcFdpZHRoKSB8IDA7CisgICAgICAgICAgICB2
YXIgdiA9ICgoTWF0aC5hYnModXYueSAqIHV2U2NhbGUueSArIHV2T2Zmc2V0LnkpICogaGVpZ2h0
TWFwSGVpZ2h0KSAlIGhlaWdodE1hcEhlaWdodCkgfCAwOworICAgICAgICAgICAgdmFyIHBvcyA9
ICh1ICsgdiAqIGhlaWdodE1hcFdpZHRoKSAqIDQ7CisgICAgICAgICAgICB2YXIgciA9IGJ1ZmZl
cltwb3NdIC8gMjU1LjA7CisgICAgICAgICAgICB2YXIgZyA9IGJ1ZmZlcltwb3MgKyAxXSAvIDI1
NS4wOworICAgICAgICAgICAgdmFyIGIgPSBidWZmZXJbcG9zICsgMl0gLyAyNTUuMDsKKyAgICAg
ICAgICAgIHZhciBncmFkaWVudCA9IHIgKiAwLjMgKyBnICogMC41OSArIGIgKiAwLjExOworICAg
ICAgICAgICAgbm9ybWFsLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgbm9ybWFsLnNjYWxlSW5Q
bGFjZShtaW5IZWlnaHQgKyAobWF4SGVpZ2h0IC0gbWluSGVpZ2h0KSAqIGdyYWRpZW50KTsKKyAg
ICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24uYWRkKG5vcm1hbCk7CisgICAgICAgICAgICBw
b3NpdGlvbi50b0FycmF5KHBvc2l0aW9ucywgaW5kZXgpOworICAgICAgICB9CisgICAgICAgIF9t
ZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmVydGV4RGF0YSJd
LkNvbXB1dGVOb3JtYWxzKHBvc2l0aW9ucywgdGhpcy5nZXRJbmRpY2VzKCksIG5vcm1hbHMpOwor
ICAgICAgICBpZiAoZm9yY2VVcGRhdGUpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0VmVydGljZXNE
YXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0u
UG9zaXRpb25LaW5kLCBwb3NpdGlvbnMpOworICAgICAgICAgICAgdGhpcy5zZXRWZXJ0aWNlc0Rh
dGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5O
b3JtYWxLaW5kLCBub3JtYWxzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHRoaXMudXBkYXRlVmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kLCBwb3NpdGlvbnMpOworICAgICAg
ICAgICAgdGhpcy51cGRhdGVWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBub3JtYWxzKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1vZGlmeSB0
aGUgbWVzaCB0byBnZXQgYSBmbGF0IHNoYWRpbmcgcmVuZGVyaW5nLgorICAgICAqIFRoaXMgbWVh
bnMgZWFjaCBtZXNoIGZhY2V0IHdpbGwgdGhlbiBoYXZlIGl0cyBvd24gbm9ybWFscy4gVXN1YWxs
eSBuZXcgdmVydGljZXMgYXJlIGFkZGVkIGluIHRoZSBtZXNoIGdlb21ldHJ5IHRvIGdldCB0aGlz
IHJlc3VsdC4KKyAgICAgKiBXYXJuaW5nIDogdGhlIG1lc2ggaXMgcmVhbGx5IG1vZGlmaWVkIGV2
ZW4gaWYgbm90IHNldCBvcmlnaW5hbGx5IGFzIHVwZGF0YWJsZSBhbmQsIHVuZGVyIHRoZSBob29k
LCBhIG5ldyBWZXJ0ZXhCdWZmZXIgaXMgYWxsb2NhdGVkLgorICAgICAqIEByZXR1cm5zIGN1cnJl
bnQgbWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLmNvbnZlcnRUb0ZsYXRTaGFkZWRN
ZXNoID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIga2luZHMgPSB0aGlzLmdldFZlcnRpY2Vz
RGF0YUtpbmRzKCk7CisgICAgICAgIHZhciB2YnMgPSB7fTsKKyAgICAgICAgdmFyIGRhdGEgPSB7
fTsKKyAgICAgICAgdmFyIG5ld2RhdGEgPSB7fTsKKyAgICAgICAgdmFyIHVwZGF0YWJsZU5vcm1h
bHMgPSBmYWxzZTsKKyAgICAgICAgdmFyIGtpbmRJbmRleDsKKyAgICAgICAgdmFyIGtpbmQ7Cisg
ICAgICAgIGZvciAoa2luZEluZGV4ID0gMDsga2luZEluZGV4IDwga2luZHMubGVuZ3RoOyBraW5k
SW5kZXgrKykgeworICAgICAgICAgICAga2luZCA9IGtpbmRzW2tpbmRJbmRleF07CisgICAgICAg
ICAgICB2YXIgdmVydGV4QnVmZmVyID0gdGhpcy5nZXRWZXJ0ZXhCdWZmZXIoa2luZCk7CisgICAg
ICAgICAgICBpZiAoa2luZCA9PT0gX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
WyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKSB7CisgICAgICAgICAgICAgICAgdXBkYXRhYmxl
Tm9ybWFscyA9IHZlcnRleEJ1ZmZlci5pc1VwZGF0YWJsZSgpOworICAgICAgICAgICAgICAgIGtp
bmRzLnNwbGljZShraW5kSW5kZXgsIDEpOworICAgICAgICAgICAgICAgIGtpbmRJbmRleC0tOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmJz
W2tpbmRdID0gdmVydGV4QnVmZmVyOworICAgICAgICAgICAgZGF0YVtraW5kXSA9IHZic1traW5k
XS5nZXREYXRhKCk7CisgICAgICAgICAgICBuZXdkYXRhW2tpbmRdID0gW107CisgICAgICAgIH0K
KyAgICAgICAgLy8gU2F2ZSBwcmV2aW91cyBzdWJtZXNoZXMKKyAgICAgICAgdmFyIHByZXZpb3Vz
U3VibWVzaGVzID0gdGhpcy5zdWJNZXNoZXMuc2xpY2UoMCk7CisgICAgICAgIHZhciBpbmRpY2Vz
ID0gdGhpcy5nZXRJbmRpY2VzKCk7CisgICAgICAgIHZhciB0b3RhbEluZGljZXMgPSB0aGlzLmdl
dFRvdGFsSW5kaWNlcygpOworICAgICAgICAvLyBHZW5lcmF0aW5nIHVuaXF1ZSB2ZXJ0aWNlcyBw
ZXIgZmFjZQorICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRl
eCA8IHRvdGFsSW5kaWNlczsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHZlcnRleEluZGV4
ID0gaW5kaWNlc1tpbmRleF07CisgICAgICAgICAgICBmb3IgKGtpbmRJbmRleCA9IDA7IGtpbmRJ
bmRleCA8IGtpbmRzLmxlbmd0aDsga2luZEluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBraW5k
ID0ga2luZHNba2luZEluZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgc3RyaWRlID0gdmJzW2tp
bmRdLmdldFN0cmlkZVNpemUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBvZmZzZXQgPSAw
OyBvZmZzZXQgPCBzdHJpZGU7IG9mZnNldCsrKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld2Rh
dGFba2luZF0ucHVzaChkYXRhW2tpbmRdW3ZlcnRleEluZGV4ICogc3RyaWRlICsgb2Zmc2V0XSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IFVwZGF0aW5nIGZhY2VzICYgbm9ybWFsCisgICAgICAgIHZhciBub3JtYWxzID0gW107CisgICAg
ICAgIHZhciBwb3NpdGlvbnMgPSBuZXdkYXRhW19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgZm9yIChpbmRl
eCA9IDA7IGluZGV4IDwgdG90YWxJbmRpY2VzOyBpbmRleCArPSAzKSB7CisgICAgICAgICAgICBp
bmRpY2VzW2luZGV4XSA9IGluZGV4OworICAgICAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0g
aW5kZXggKyAxOworICAgICAgICAgICAgaW5kaWNlc1tpbmRleCArIDJdID0gaW5kZXggKyAyOwor
ICAgICAgICAgICAgdmFyIHAxID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocG9zaXRpb25zLCBpbmRleCAqIDMpOwor
ICAgICAgICAgICAgdmFyIHAyID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocG9zaXRpb25zLCAoaW5kZXggKyAxKSAq
IDMpOworICAgICAgICAgICAgdmFyIHAzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocG9zaXRpb25zLCAoaW5kZXgg
KyAyKSAqIDMpOworICAgICAgICAgICAgdmFyIHAxcDIgPSBwMS5zdWJ0cmFjdChwMik7CisgICAg
ICAgICAgICB2YXIgcDNwMiA9IHAzLnN1YnRyYWN0KHAyKTsKKyAgICAgICAgICAgIHZhciBub3Jt
YWwgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVj
dG9yMyJdLk5vcm1hbGl6ZShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siVmVjdG9yMyJdLkNyb3NzKHAxcDIsIHAzcDIpKTsKKyAgICAgICAgICAgIC8vIFN0
b3JlIHNhbWUgbm9ybWFscyBmb3IgZXZlcnkgdmVydGV4CisgICAgICAgICAgICBmb3IgKHZhciBs
b2NhbEluZGV4ID0gMDsgbG9jYWxJbmRleCA8IDM7IGxvY2FsSW5kZXgrKykgeworICAgICAgICAg
ICAgICAgIG5vcm1hbHMucHVzaChub3JtYWwueCk7CisgICAgICAgICAgICAgICAgbm9ybWFscy5w
dXNoKG5vcm1hbC55KTsKKyAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2gobm9ybWFsLnopOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuc2V0SW5kaWNlcyhpbmRpY2Vz
KTsKKyAgICAgICAgdGhpcy5zZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBub3JtYWxzLCB1cGRhdGFi
bGVOb3JtYWxzKTsKKyAgICAgICAgLy8gVXBkYXRpbmcgdmVydGV4IGJ1ZmZlcnMKKyAgICAgICAg
Zm9yIChraW5kSW5kZXggPSAwOyBraW5kSW5kZXggPCBraW5kcy5sZW5ndGg7IGtpbmRJbmRleCsr
KSB7CisgICAgICAgICAgICBraW5kID0ga2luZHNba2luZEluZGV4XTsKKyAgICAgICAgICAgIHRo
aXMuc2V0VmVydGljZXNEYXRhKGtpbmQsIG5ld2RhdGFba2luZF0sIHZic1traW5kXS5pc1VwZGF0
YWJsZSgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBVcGRhdGluZyBzdWJtZXNoZXMKKyAgICAg
ICAgdGhpcy5yZWxlYXNlU3ViTWVzaGVzKCk7CisgICAgICAgIGZvciAodmFyIHN1Ym1lc2hJbmRl
eCA9IDA7IHN1Ym1lc2hJbmRleCA8IHByZXZpb3VzU3VibWVzaGVzLmxlbmd0aDsgc3VibWVzaElu
ZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBwcmV2aW91c09uZSA9IHByZXZpb3VzU3VibWVzaGVz
W3N1Ym1lc2hJbmRleF07CisgICAgICAgICAgICBfc3ViTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTJfX1siU3ViTWVzaCJdLkFkZFRvTWVzaChwcmV2aW91c09uZS5tYXRlcmlhbEluZGV4
LCBwcmV2aW91c09uZS5pbmRleFN0YXJ0LCBwcmV2aW91c09uZS5pbmRleENvdW50LCBwcmV2aW91
c09uZS5pbmRleFN0YXJ0LCBwcmV2aW91c09uZS5pbmRleENvdW50LCB0aGlzKTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLnN5bmNocm9uaXplSW5zdGFuY2VzKCk7CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgdGhl
IG1lc2ggaW5kaWNlcyBhbmQgYWRkIG5ldyB2ZXJ0aWNlcyAoZHVwbGljYXRpb24pIGluIG9yZGVy
IHRvIHVuZm9sZCBmYWNldHMgaW50byBidWZmZXJzLgorICAgICAqIEluIG90aGVyIHdvcmRzLCBt
b3JlIHZlcnRpY2VzLCBubyBtb3JlIGluZGljZXMgYW5kIGEgc2luZ2xlIGJpZ2dlciBWQk8uCisg
ICAgICogVGhlIG1lc2ggaXMgcmVhbGx5IG1vZGlmaWVkIGV2ZW4gaWYgbm90IHNldCBvcmlnaW5h
bGx5IGFzIHVwZGF0YWJsZS4gVW5kZXIgdGhlIGhvb2QsIGEgbmV3IFZlcnRleEJ1ZmZlciBpcyBh
bGxvY2F0ZWQuCisgICAgICogQHJldHVybnMgY3VycmVudCBtZXNoCisgICAgICovCisgICAgTWVz
aC5wcm90b3R5cGUuY29udmVydFRvVW5JbmRleGVkTWVzaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIGtpbmRzID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGFLaW5kcygpOworICAgICAgICB2YXIg
dmJzID0ge307CisgICAgICAgIHZhciBkYXRhID0ge307CisgICAgICAgIHZhciBuZXdkYXRhID0g
e307CisgICAgICAgIHZhciBraW5kSW5kZXg7CisgICAgICAgIHZhciBraW5kOworICAgICAgICBm
b3IgKGtpbmRJbmRleCA9IDA7IGtpbmRJbmRleCA8IGtpbmRzLmxlbmd0aDsga2luZEluZGV4Kysp
IHsKKyAgICAgICAgICAgIGtpbmQgPSBraW5kc1traW5kSW5kZXhdOworICAgICAgICAgICAgdmFy
IHZlcnRleEJ1ZmZlciA9IHRoaXMuZ2V0VmVydGV4QnVmZmVyKGtpbmQpOworICAgICAgICAgICAg
dmJzW2tpbmRdID0gdmVydGV4QnVmZmVyOworICAgICAgICAgICAgZGF0YVtraW5kXSA9IHZic1tr
aW5kXS5nZXREYXRhKCk7CisgICAgICAgICAgICBuZXdkYXRhW2tpbmRdID0gW107CisgICAgICAg
IH0KKyAgICAgICAgLy8gU2F2ZSBwcmV2aW91cyBzdWJtZXNoZXMKKyAgICAgICAgdmFyIHByZXZp
b3VzU3VibWVzaGVzID0gdGhpcy5zdWJNZXNoZXMuc2xpY2UoMCk7CisgICAgICAgIHZhciBpbmRp
Y2VzID0gdGhpcy5nZXRJbmRpY2VzKCk7CisgICAgICAgIHZhciB0b3RhbEluZGljZXMgPSB0aGlz
LmdldFRvdGFsSW5kaWNlcygpOworICAgICAgICAvLyBHZW5lcmF0aW5nIHVuaXF1ZSB2ZXJ0aWNl
cyBwZXIgZmFjZQorICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBp
bmRleCA8IHRvdGFsSW5kaWNlczsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHZlcnRleElu
ZGV4ID0gaW5kaWNlc1tpbmRleF07CisgICAgICAgICAgICBmb3IgKGtpbmRJbmRleCA9IDA7IGtp
bmRJbmRleCA8IGtpbmRzLmxlbmd0aDsga2luZEluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBr
aW5kID0ga2luZHNba2luZEluZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgc3RyaWRlID0gdmJz
W2tpbmRdLmdldFN0cmlkZVNpemUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBvZmZzZXQg
PSAwOyBvZmZzZXQgPCBzdHJpZGU7IG9mZnNldCsrKSB7CisgICAgICAgICAgICAgICAgICAgIG5l
d2RhdGFba2luZF0ucHVzaChkYXRhW2tpbmRdW3ZlcnRleEluZGV4ICogc3RyaWRlICsgb2Zmc2V0
XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IC8vIFVwZGF0aW5nIGluZGljZXMKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdG90
YWxJbmRpY2VzOyBpbmRleCArPSAzKSB7CisgICAgICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGlu
ZGV4OworICAgICAgICAgICAgaW5kaWNlc1tpbmRleCArIDFdID0gaW5kZXggKyAxOworICAgICAg
ICAgICAgaW5kaWNlc1tpbmRleCArIDJdID0gaW5kZXggKyAyOworICAgICAgICB9CisgICAgICAg
IHRoaXMuc2V0SW5kaWNlcyhpbmRpY2VzKTsKKyAgICAgICAgLy8gVXBkYXRpbmcgdmVydGV4IGJ1
ZmZlcnMKKyAgICAgICAgZm9yIChraW5kSW5kZXggPSAwOyBraW5kSW5kZXggPCBraW5kcy5sZW5n
dGg7IGtpbmRJbmRleCsrKSB7CisgICAgICAgICAgICBraW5kID0ga2luZHNba2luZEluZGV4XTsK
KyAgICAgICAgICAgIHRoaXMuc2V0VmVydGljZXNEYXRhKGtpbmQsIG5ld2RhdGFba2luZF0sIHZi
c1traW5kXS5pc1VwZGF0YWJsZSgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBVcGRhdGluZyBz
dWJtZXNoZXMKKyAgICAgICAgdGhpcy5yZWxlYXNlU3ViTWVzaGVzKCk7CisgICAgICAgIGZvciAo
dmFyIHN1Ym1lc2hJbmRleCA9IDA7IHN1Ym1lc2hJbmRleCA8IHByZXZpb3VzU3VibWVzaGVzLmxl
bmd0aDsgc3VibWVzaEluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBwcmV2aW91c09uZSA9IHBy
ZXZpb3VzU3VibWVzaGVzW3N1Ym1lc2hJbmRleF07CisgICAgICAgICAgICBfc3ViTWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siU3ViTWVzaCJdLkFkZFRvTWVzaChwcmV2aW91c09u
ZS5tYXRlcmlhbEluZGV4LCBwcmV2aW91c09uZS5pbmRleFN0YXJ0LCBwcmV2aW91c09uZS5pbmRl
eENvdW50LCBwcmV2aW91c09uZS5pbmRleFN0YXJ0LCBwcmV2aW91c09uZS5pbmRleENvdW50LCB0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl91bkluZGV4ZWQgPSB0cnVlOworICAgICAg
ICB0aGlzLnN5bmNocm9uaXplSW5zdGFuY2VzKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogSW52ZXJzZXMgZmFjZXQgb3JpZW50YXRpb25zLgorICAgICAq
IFdhcm5pbmcgOiB0aGUgbWVzaCBpcyByZWFsbHkgbW9kaWZpZWQgZXZlbiBpZiBub3Qgc2V0IG9y
aWdpbmFsbHkgYXMgdXBkYXRhYmxlLiBBIG5ldyBWZXJ0ZXhCdWZmZXIgaXMgY3JlYXRlZCB1bmRl
ciB0aGUgaG9vZCBlYWNoIGNhbGwuCisgICAgICogQHBhcmFtIGZsaXBOb3JtYWxzIHdpbGwgYWxz
byBpbnZlcnRzIHRoZSBub3JtYWxzCisgICAgICogQHJldHVybnMgY3VycmVudCBtZXNoCisgICAg
ICovCisgICAgTWVzaC5wcm90b3R5cGUuZmxpcEZhY2VzID0gZnVuY3Rpb24gKGZsaXBOb3JtYWxz
KSB7CisgICAgICAgIGlmIChmbGlwTm9ybWFscyA9PT0gdm9pZCAwKSB7IGZsaXBOb3JtYWxzID0g
ZmFsc2U7IH0KKyAgICAgICAgdmFyIHZlcnRleF9kYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJWZXJ0ZXhEYXRhIl0uRXh0cmFjdEZyb21NZXNoKHRo
aXMpOworICAgICAgICB2YXIgaTsKKyAgICAgICAgaWYgKGZsaXBOb3JtYWxzICYmIHRoaXMuaXNW
ZXJ0aWNlc0RhdGFQcmVzZW50KF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
VmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCkgJiYgdmVydGV4X2RhdGEubm9ybWFscykgeworICAg
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IHZlcnRleF9kYXRhLm5vcm1hbHMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5ub3JtYWxzW2ldICo9IC0xOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh2ZXJ0ZXhfZGF0YS5pbmRpY2VzKSB7Cisg
ICAgICAgICAgICB2YXIgdGVtcDsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB2ZXJ0ZXhf
ZGF0YS5pbmRpY2VzLmxlbmd0aDsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgLy8gcmVhc3Np
Z24gaW5kaWNlcworICAgICAgICAgICAgICAgIHRlbXAgPSB2ZXJ0ZXhfZGF0YS5pbmRpY2VzW2kg
KyAxXTsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5pbmRpY2VzW2kgKyAxXSA9IHZlcnRl
eF9kYXRhLmluZGljZXNbaSArIDJdOworICAgICAgICAgICAgICAgIHZlcnRleF9kYXRhLmluZGlj
ZXNbaSArIDJdID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2ZXJ0
ZXhfZGF0YS5hcHBseVRvTWVzaCh0aGlzLCB0aGlzLmlzVmVydGV4QnVmZmVyVXBkYXRhYmxlKF9i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRp
b25LaW5kKSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICog
SW5jcmVhc2UgdGhlIG51bWJlciBvZiBmYWNldHMgYW5kIGhlbmNlIHZlcnRpY2VzIGluIGEgbWVz
aAorICAgICAqIFZlcnRleCBub3JtYWxzIGFyZSBpbnRlcnBvbGF0ZWQgZnJvbSBleGlzdGluZyB2
ZXJ0ZXggbm9ybWFscworICAgICAqIFdhcm5pbmcgOiB0aGUgbWVzaCBpcyByZWFsbHkgbW9kaWZp
ZWQgZXZlbiBpZiBub3Qgc2V0IG9yaWdpbmFsbHkgYXMgdXBkYXRhYmxlLiBBIG5ldyBWZXJ0ZXhC
dWZmZXIgaXMgY3JlYXRlZCB1bmRlciB0aGUgaG9vZCBlYWNoIGNhbGwuCisgICAgICogQHBhcmFt
IG51bWJlclBlckVkZ2UgdGhlIG51bWJlciBvZiBuZXcgdmVydGljZXMgdG8gYWRkIHRvIGVhY2gg
ZWRnZSBvZiBhIGZhY2V0LCBvcHRpb25hbCBkZWZhdWx0IDEKKyAgICAgKi8KKyAgICBNZXNoLnBy
b3RvdHlwZS5pbmNyZWFzZVZlcnRpY2VzID0gZnVuY3Rpb24gKG51bWJlclBlckVkZ2UpIHsKKyAg
ICAgICAgdmFyIHZlcnRleF9kYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOV9fWyJWZXJ0ZXhEYXRhIl0uRXh0cmFjdEZyb21NZXNoKHRoaXMpOworICAgICAg
ICB2YXIgdXZzID0gdmVydGV4X2RhdGEudXZzOworICAgICAgICB2YXIgY3VycmVudEluZGljZXMg
PSB2ZXJ0ZXhfZGF0YS5pbmRpY2VzOworICAgICAgICB2YXIgcG9zaXRpb25zID0gdmVydGV4X2Rh
dGEucG9zaXRpb25zOworICAgICAgICB2YXIgbm9ybWFscyA9IHZlcnRleF9kYXRhLm5vcm1hbHM7
CisgICAgICAgIGlmIChjdXJyZW50SW5kaWNlcyA9PT0gbnVsbCB8fCBwb3NpdGlvbnMgPT09IG51
bGwgfHwgbm9ybWFscyA9PT0gbnVsbCB8fCB1dnMgPT09IG51bGwpIHsKKyAgICAgICAgICAgIF9N
aXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siTG9nZ2VyIl0uV2Fybigi
VmVydGV4RGF0YSBjb250YWlucyBudWxsIGVudHJpZXMiKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHZhciBzZWdtZW50cyA9IG51bWJlclBlckVkZ2UgKyAxOyAvL3Nl
Z21lbnRzIHBlciBjdXJyZW50IGZhY2V0IGVkZ2UsIGJlY29tZSBzaWRlcyBvZiBuZXcgZmFjZXRz
CisgICAgICAgICAgICB2YXIgdGVtcEluZGljZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMgKyAxOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICB0ZW1wSW5kaWNlc1tpXSA9IG5ldyBBcnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdmFyIGE7IC8vdmVydGV4IGluZGV4IG9mIG9uZSBlbmQgb2YgYSBzaWRlCisgICAgICAgICAg
ICB2YXIgYjsgLy92ZXJ0ZXggaW5kZXggb2Ygb3RoZXIgZW5kIG9mIHRoZSBzaWRlCisgICAgICAg
ICAgICB2YXIgZGVsdGFQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdKDAsIDAsIDApOworICAgICAgICAgICAgdmFy
IGRlbHRhTm9ybWFsID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNV9fWyJWZWN0b3IzIl0oMCwgMCwgMCk7CisgICAgICAgICAgICB2YXIgZGVsdGFVViA9
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVj
dG9yMiJdKDAsIDApOworICAgICAgICAgICAgdmFyIGluZGljZXMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgICAgIHZhciB2ZXJ0ZXhJbmRleCA9IG5ldyBBcnJheSgpOworICAgICAgICAgICAgdmFy
IHNpZGUgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAgIHZhciBsZW47CisgICAgICAgICAgICB2
YXIgcG9zaXRpb25QdHIgPSBwb3NpdGlvbnMubGVuZ3RoOworICAgICAgICAgICAgdmFyIHV2UHRy
ID0gdXZzLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3VycmVudElu
ZGljZXMubGVuZ3RoOyBpICs9IDMpIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhJbmRleFswXSA9
IGN1cnJlbnRJbmRpY2VzW2ldOworICAgICAgICAgICAgICAgIHZlcnRleEluZGV4WzFdID0gY3Vy
cmVudEluZGljZXNbaSArIDFdOworICAgICAgICAgICAgICAgIHZlcnRleEluZGV4WzJdID0gY3Vy
cmVudEluZGljZXNbaSArIDJdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
MzsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGEgPSB2ZXJ0ZXhJbmRleFtqXTsKKyAgICAg
ICAgICAgICAgICAgICAgYiA9IHZlcnRleEluZGV4WyhqICsgMSkgJSAzXTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNpZGVbYV0gPT09IHVuZGVmaW5lZCAmJiBzaWRlW2JdID09PSB1bmRlZmlu
ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVbYV0gPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNpZGVbYl0gPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzaWRlW2FdID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaWRlW2FdID0gbmV3IEFycmF5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lkZVtiXSA9PT0gdW5kZWZpbmVkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVtiXSA9IG5ldyBBcnJheSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzaWRlW2FdW2JdID09PSB1bmRlZmluZWQgJiYgc2lkZVtiXVthXSA9PT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlW2FdW2JdID0gW107CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWx0YVBvc2l0aW9uLnggPSAocG9zaXRpb25zWzMgKiBiXSAt
IHBvc2l0aW9uc1szICogYV0pIC8gc2VnbWVudHM7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWx0YVBvc2l0aW9uLnkgPSAocG9zaXRpb25zWzMgKiBiICsgMV0gLSBwb3NpdGlvbnNbMyAqIGEg
KyAxXSkgLyBzZWdtZW50czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhUG9zaXRpb24u
eiA9IChwb3NpdGlvbnNbMyAqIGIgKyAyXSAtIHBvc2l0aW9uc1szICogYSArIDJdKSAvIHNlZ21l
bnRzOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFOb3JtYWwueCA9IChub3JtYWxzWzMg
KiBiXSAtIG5vcm1hbHNbMyAqIGFdKSAvIHNlZ21lbnRzOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsdGFOb3JtYWwueSA9IChub3JtYWxzWzMgKiBiICsgMV0gLSBub3JtYWxzWzMgKiBhICsg
MV0pIC8gc2VnbWVudHM7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YU5vcm1hbC56ID0g
KG5vcm1hbHNbMyAqIGIgKyAyXSAtIG5vcm1hbHNbMyAqIGEgKyAyXSkgLyBzZWdtZW50czsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbHRhVVYueCA9ICh1dnNbMiAqIGJdIC0gdXZzWzIgKiBh
XSkgLyBzZWdtZW50czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhVVYueSA9ICh1dnNb
MiAqIGIgKyAxXSAtIHV2c1syICogYSArIDFdKSAvIHNlZ21lbnRzOworICAgICAgICAgICAgICAg
ICAgICAgICAgc2lkZVthXVtiXS5wdXNoKGEpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgayA9IDE7IGsgPCBzZWdtZW50czsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2lkZVthXVtiXS5wdXNoKHBvc2l0aW9ucy5sZW5ndGggLyAzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbcG9zaXRpb25QdHJdID0gcG9zaXRpb25zWzMgKiBh
XSArIGsgKiBkZWx0YVBvc2l0aW9uLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9y
bWFsc1twb3NpdGlvblB0cisrXSA9IG5vcm1hbHNbMyAqIGFdICsgayAqIGRlbHRhTm9ybWFsLng7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW3Bvc2l0aW9uUHRyXSA9IHBv
c2l0aW9uc1szICogYSArIDFdICsgayAqIGRlbHRhUG9zaXRpb24ueTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub3JtYWxzW3Bvc2l0aW9uUHRyKytdID0gbm9ybWFsc1szICogYSArIDFd
ICsgayAqIGRlbHRhTm9ybWFsLnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRp
b25zW3Bvc2l0aW9uUHRyXSA9IHBvc2l0aW9uc1szICogYSArIDJdICsgayAqIGRlbHRhUG9zaXRp
b24uejsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzW3Bvc2l0aW9uUHRyKytd
ID0gbm9ybWFsc1szICogYSArIDJdICsgayAqIGRlbHRhTm9ybWFsLno7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXZzW3V2UHRyKytdID0gdXZzWzIgKiBhXSArIGsgKiBkZWx0YVVWLng7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZzW3V2UHRyKytdID0gdXZzWzIgKiBhICsg
MV0gKyBrICogZGVsdGFVVi55OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgc2lkZVthXVtiXS5wdXNoKGIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc2lkZVtiXVthXSA9IG5ldyBBcnJheSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVu
ID0gc2lkZVthXVtiXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2lkZVtiXVthXVtpZHhdID0gc2lkZVthXVtiXVtsZW4gLSAxIC0gaWR4XTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvL0NhbGN1bGF0ZSBwb3NpdGlvbnMsIG5vcm1hbHMgYW5kIHV2cyBv
ZiBuZXcgaW50ZXJuYWwgdmVydGljZXMKKyAgICAgICAgICAgICAgICB0ZW1wSW5kaWNlc1swXVsw
XSA9IGN1cnJlbnRJbmRpY2VzW2ldOworICAgICAgICAgICAgICAgIHRlbXBJbmRpY2VzWzFdWzBd
ID0gc2lkZVtjdXJyZW50SW5kaWNlc1tpXV1bY3VycmVudEluZGljZXNbaSArIDFdXVsxXTsKKyAg
ICAgICAgICAgICAgICB0ZW1wSW5kaWNlc1sxXVsxXSA9IHNpZGVbY3VycmVudEluZGljZXNbaV1d
W2N1cnJlbnRJbmRpY2VzW2kgKyAyXV1bMV07CisgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9
IDI7IGsgPCBzZWdtZW50czsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIHRlbXBJbmRpY2Vz
W2tdWzBdID0gc2lkZVtjdXJyZW50SW5kaWNlc1tpXV1bY3VycmVudEluZGljZXNbaSArIDFdXVtr
XTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcEluZGljZXNba11ba10gPSBzaWRlW2N1cnJlbnRJ
bmRpY2VzW2ldXVtjdXJyZW50SW5kaWNlc1tpICsgMl1dW2tdOworICAgICAgICAgICAgICAgICAg
ICBkZWx0YVBvc2l0aW9uLnggPSAocG9zaXRpb25zWzMgKiB0ZW1wSW5kaWNlc1trXVtrXV0gLSBw
b3NpdGlvbnNbMyAqIHRlbXBJbmRpY2VzW2tdWzBdXSkgLyBrOworICAgICAgICAgICAgICAgICAg
ICBkZWx0YVBvc2l0aW9uLnkgPSAocG9zaXRpb25zWzMgKiB0ZW1wSW5kaWNlc1trXVtrXSArIDFd
IC0gcG9zaXRpb25zWzMgKiB0ZW1wSW5kaWNlc1trXVswXSArIDFdKSAvIGs7CisgICAgICAgICAg
ICAgICAgICAgIGRlbHRhUG9zaXRpb24ueiA9IChwb3NpdGlvbnNbMyAqIHRlbXBJbmRpY2VzW2td
W2tdICsgMl0gLSBwb3NpdGlvbnNbMyAqIHRlbXBJbmRpY2VzW2tdWzBdICsgMl0pIC8gazsKKyAg
ICAgICAgICAgICAgICAgICAgZGVsdGFOb3JtYWwueCA9IChub3JtYWxzWzMgKiB0ZW1wSW5kaWNl
c1trXVtrXV0gLSBub3JtYWxzWzMgKiB0ZW1wSW5kaWNlc1trXVswXV0pIC8gazsKKyAgICAgICAg
ICAgICAgICAgICAgZGVsdGFOb3JtYWwueSA9IChub3JtYWxzWzMgKiB0ZW1wSW5kaWNlc1trXVtr
XSArIDFdIC0gbm9ybWFsc1szICogdGVtcEluZGljZXNba11bMF0gKyAxXSkgLyBrOworICAgICAg
ICAgICAgICAgICAgICBkZWx0YU5vcm1hbC56ID0gKG5vcm1hbHNbMyAqIHRlbXBJbmRpY2VzW2td
W2tdICsgMl0gLSBub3JtYWxzWzMgKiB0ZW1wSW5kaWNlc1trXVswXSArIDJdKSAvIGs7CisgICAg
ICAgICAgICAgICAgICAgIGRlbHRhVVYueCA9ICh1dnNbMiAqIHRlbXBJbmRpY2VzW2tdW2tdXSAt
IHV2c1syICogdGVtcEluZGljZXNba11bMF1dKSAvIGs7CisgICAgICAgICAgICAgICAgICAgIGRl
bHRhVVYueSA9ICh1dnNbMiAqIHRlbXBJbmRpY2VzW2tdW2tdICsgMV0gLSB1dnNbMiAqIHRlbXBJ
bmRpY2VzW2tdWzBdICsgMV0pIC8gazsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDE7IGogPCBrOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBJbmRpY2VzW2td
W2pdID0gcG9zaXRpb25zLmxlbmd0aCAvIDM7CisgICAgICAgICAgICAgICAgICAgICAgICBwb3Np
dGlvbnNbcG9zaXRpb25QdHJdID0gcG9zaXRpb25zWzMgKiB0ZW1wSW5kaWNlc1trXVswXV0gKyBq
ICogZGVsdGFQb3NpdGlvbi54OworICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1twb3Np
dGlvblB0cisrXSA9IG5vcm1hbHNbMyAqIHRlbXBJbmRpY2VzW2tdWzBdXSArIGogKiBkZWx0YU5v
cm1hbC54OworICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW3Bvc2l0aW9uUHRyXSA9
IHBvc2l0aW9uc1szICogdGVtcEluZGljZXNba11bMF0gKyAxXSArIGogKiBkZWx0YVBvc2l0aW9u
Lnk7CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzW3Bvc2l0aW9uUHRyKytdID0gbm9y
bWFsc1szICogdGVtcEluZGljZXNba11bMF0gKyAxXSArIGogKiBkZWx0YU5vcm1hbC55OworICAg
ICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW3Bvc2l0aW9uUHRyXSA9IHBvc2l0aW9uc1sz
ICogdGVtcEluZGljZXNba11bMF0gKyAyXSArIGogKiBkZWx0YVBvc2l0aW9uLno7CisgICAgICAg
ICAgICAgICAgICAgICAgICBub3JtYWxzW3Bvc2l0aW9uUHRyKytdID0gbm9ybWFsc1szICogdGVt
cEluZGljZXNba11bMF0gKyAyXSArIGogKiBkZWx0YU5vcm1hbC56OworICAgICAgICAgICAgICAg
ICAgICAgICAgdXZzW3V2UHRyKytdID0gdXZzWzIgKiB0ZW1wSW5kaWNlc1trXVswXV0gKyBqICog
ZGVsdGFVVi54OworICAgICAgICAgICAgICAgICAgICAgICAgdXZzW3V2UHRyKytdID0gdXZzWzIg
KiB0ZW1wSW5kaWNlc1trXVswXSArIDFdICsgaiAqIGRlbHRhVVYueTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZW1wSW5kaWNlc1tz
ZWdtZW50c10gPSBzaWRlW2N1cnJlbnRJbmRpY2VzW2kgKyAxXV1bY3VycmVudEluZGljZXNbaSAr
IDJdXTsKKyAgICAgICAgICAgICAgICAvLyByZWZvcm0gaW5kaWNlcworICAgICAgICAgICAgICAg
IGluZGljZXMucHVzaCh0ZW1wSW5kaWNlc1swXVswXSwgdGVtcEluZGljZXNbMV1bMF0sIHRlbXBJ
bmRpY2VzWzFdWzFdKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMTsgayA8IHNlZ21l
bnRzOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrOyBq
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCh0ZW1wSW5kaWNlc1tr
XVtqXSwgdGVtcEluZGljZXNbayArIDFdW2pdLCB0ZW1wSW5kaWNlc1trICsgMV1baiArIDFdKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCh0ZW1wSW5kaWNlc1trXVtqXSwg
dGVtcEluZGljZXNbayArIDFdW2ogKyAxXSwgdGVtcEluZGljZXNba11baiArIDFdKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2godGVtcElu
ZGljZXNba11bal0sIHRlbXBJbmRpY2VzW2sgKyAxXVtqXSwgdGVtcEluZGljZXNbayArIDFdW2og
KyAxXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdmVy
dGV4X2RhdGEuaW5kaWNlcyA9IGluZGljZXM7CisgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5hcHBs
eVRvTWVzaCh0aGlzLCB0aGlzLmlzVmVydGV4QnVmZmVyVXBkYXRhYmxlKF9idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEZvcmNlIGFkamFjZW50IGZhY2V0cyB0
byBzaGFyZSB2ZXJ0aWNlcyBhbmQgcmVtb3ZlIGFueSBmYWNldHMgdGhhdCBoYXZlIGFsbCB2ZXJ0
aWNlcyBpbiBhIGxpbmUKKyAgICAgKiBUaGlzIHdpbGwgdW5kbyBhbnkgYXBwbGljYXRpb24gb2Yg
Y292ZXJ0VG9GbGF0U2hhZGVkTWVzaAorICAgICAqIFdhcm5pbmcgOiB0aGUgbWVzaCBpcyByZWFs
bHkgbW9kaWZpZWQgZXZlbiBpZiBub3Qgc2V0IG9yaWdpbmFsbHkgYXMgdXBkYXRhYmxlLiBBIG5l
dyBWZXJ0ZXhCdWZmZXIgaXMgY3JlYXRlZCB1bmRlciB0aGUgaG9vZCBlYWNoIGNhbGwuCisgICAg
ICovCisgICAgTWVzaC5wcm90b3R5cGUuZm9yY2VTaGFyZWRWZXJ0aWNlcyA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdmFyIHZlcnRleF9kYXRhID0gX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOV9fWyJWZXJ0ZXhEYXRhIl0uRXh0cmFjdEZyb21NZXNoKHRoaXMpOwor
ICAgICAgICB2YXIgY3VycmVudFVWcyA9IHZlcnRleF9kYXRhLnV2czsKKyAgICAgICAgdmFyIGN1
cnJlbnRJbmRpY2VzID0gdmVydGV4X2RhdGEuaW5kaWNlczsKKyAgICAgICAgdmFyIGN1cnJlbnRQ
b3NpdGlvbnMgPSB2ZXJ0ZXhfZGF0YS5wb3NpdGlvbnM7CisgICAgICAgIHZhciBjdXJyZW50Q29s
b3JzID0gdmVydGV4X2RhdGEuY29sb3JzOworICAgICAgICBpZiAoY3VycmVudEluZGljZXMgPT09
IHZvaWQgMCB8fCBjdXJyZW50UG9zaXRpb25zID09PSB2b2lkIDAgfHwgY3VycmVudEluZGljZXMg
PT09IG51bGwgfHwgY3VycmVudFBvc2l0aW9ucyA9PT0gbnVsbCkgeworICAgICAgICAgICAgX01p
c2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJMb2dnZXIiXS5XYXJuKCJW
ZXJ0ZXhEYXRhIGNvbnRhaW5zIGVtcHR5IGVudHJpZXMiKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAg
ICAgIHZhciBpbmRpY2VzID0gbmV3IEFycmF5KCk7CisgICAgICAgICAgICB2YXIgdXZzID0gbmV3
IEFycmF5KCk7CisgICAgICAgICAgICB2YXIgY29sb3JzID0gbmV3IEFycmF5KCk7CisgICAgICAg
ICAgICB2YXIgcHN0cmluZyA9IG5ldyBBcnJheSgpOyAvL2xpc3RzIGZhY2V0IHZlcnRleCBwb3Np
dGlvbnMgKGEsYixjKSBhcyBzdHJpbmcgImF8YnxjIgorICAgICAgICAgICAgdmFyIGluZGV4UHRy
ID0gMDsgLy8gcG9pbnRlciB0byBuZXh0IGF2YWlsYWJsZSBpbmRleCB2YWx1ZQorICAgICAgICAg
ICAgdmFyIHVuaXF1ZVBvc2l0aW9ucyA9IG5ldyBBcnJheSgpOyAvLyB1bmlxdWUgdmVydGV4IHBv
c2l0aW9ucworICAgICAgICAgICAgdmFyIHB0cjsgLy8gcG9pbnRlciB0byBlbGVtZW50IGluIHVu
aXF1ZVBvc2l0aW9ucworICAgICAgICAgICAgdmFyIGZhY2V0OworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBjdXJyZW50SW5kaWNlcy5sZW5ndGg7IGkgKz0gMykgeworICAgICAgICAg
ICAgICAgIGZhY2V0ID0gW2N1cnJlbnRJbmRpY2VzW2ldLCBjdXJyZW50SW5kaWNlc1tpICsgMV0s
IGN1cnJlbnRJbmRpY2VzW2kgKyAyXV07IC8vZmFjZXQgdmVydGV4IGluZGljZXMKKyAgICAgICAg
ICAgICAgICBwc3RyaW5nID0gbmV3IEFycmF5KCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
aiA9IDA7IGogPCAzOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcHN0cmluZ1tqXSA9ICIi
OworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDM7IGsrKykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy9zbWFsbCB2YWx1ZXMgbWFrZSAwCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoTWF0aC5hYnMoY3VycmVudFBvc2l0aW9uc1szICogZmFjZXRbal0gKyBr
XSkgPCAwLjAwMDAwMDAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBv
c2l0aW9uc1szICogZmFjZXRbal0gKyBrXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBwc3RyaW5nW2pdICs9IGN1cnJlbnRQb3NpdGlvbnNb
MyAqIGZhY2V0W2pdICsga10gKyAifCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgcHN0cmluZ1tqXSA9IHBzdHJpbmdbal0uc2xpY2UoMCwgLTEpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvL2NoZWNrIGZhY2V0IHZlcnRpY2VzIHRvIHNl
ZSB0aGF0IG5vbmUgYXJlIHJlcGVhdGVkCisgICAgICAgICAgICAgICAgLy8gZG8gbm90IHByb2Nl
c3MgYW55IGZhY2V0IHRoYXQgaGFzIGEgcmVwZWF0ZWQgdmVydGV4LCBpZSBpcyBhIGxpbmUKKyAg
ICAgICAgICAgICAgICBpZiAoIShwc3RyaW5nWzBdID09IHBzdHJpbmdbMV0gfHwgcHN0cmluZ1sw
XSA9PSBwc3RyaW5nWzJdIHx8IHBzdHJpbmdbMV0gPT0gcHN0cmluZ1syXSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy9mb3IgZWFjaCBmYWNldCBwb3NpdGlvbiBjaGVjayBpZiBhbHJlYWR5IGxp
c3RlZCBpbiB1bmlxdWVQb3NpdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IGxp
c3RlZCBhZGQgdG8gdW5pcXVlUG9zaXRpb25zIGFuZCBzZXQgaW5kZXggcG9pbnRlcgorICAgICAg
ICAgICAgICAgICAgICAvLyBpZiBsaXN0ZWQgdXNlIGl0cyBpbmRleCBpbiB1bmlxdWVQb3NpdGlv
bnMgYW5kIG5ldyBpbmRleCBwb2ludGVyCisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGog
PSAwOyBqIDwgMzsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSB1bmlxdWVQ
b3NpdGlvbnMuaW5kZXhPZihwc3RyaW5nW2pdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwdHIgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlUG9zaXRpb25z
LnB1c2gocHN0cmluZ1tqXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gaW5k
ZXhQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL25vdCBsaXN0ZWQgc28gYWRk
IGluZGl2aWR1YWwgeCwgeSwgeiBjb29yZGluYXRlcyB0byBwb3NpdGlvbnMKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDM7IGsrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChjdXJyZW50UG9zaXRpb25zWzMg
KiBmYWNldFtqXSArIGtdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2xvcnMgIT09IG51bGwgJiYgY3VycmVu
dENvbG9ycyAhPT0gdm9pZCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2xvcnMucHVzaChjdXJyZW50Q29sb3JzWzQgKiBmYWNldFtqXSArIGtdKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFVWcyAhPT0gbnVs
bCAmJiBjdXJyZW50VVZzICE9PSB2b2lkIDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCAyOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHV2cy5wdXNoKGN1cnJlbnRVVnNbMiAqIGZhY2V0W2pdICsga10pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYWRkIG5ldyBpbmRleCBwb2ludGVyIHRvIGluZGljZXMgYXJyYXkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGljZXMucHVzaChwdHIpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG5vcm1hbHMg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAgIF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siVmVydGV4RGF0YSJdLkNvbXB1dGVOb3JtYWxzKHBvc2l0aW9ucywg
aW5kaWNlcywgbm9ybWFscyk7CisgICAgICAgICAgICAvL2NyZWF0ZSBuZXcgdmVydGV4IGRhdGEg
b2JqZWN0IGFuZCB1cGRhdGUKKyAgICAgICAgICAgIHZlcnRleF9kYXRhLnBvc2l0aW9ucyA9IHBv
c2l0aW9uczsKKyAgICAgICAgICAgIHZlcnRleF9kYXRhLmluZGljZXMgPSBpbmRpY2VzOworICAg
ICAgICAgICAgdmVydGV4X2RhdGEubm9ybWFscyA9IG5vcm1hbHM7CisgICAgICAgICAgICBpZiAo
Y3VycmVudFVWcyAhPT0gbnVsbCAmJiBjdXJyZW50VVZzICE9PSB2b2lkIDApIHsKKyAgICAgICAg
ICAgICAgICB2ZXJ0ZXhfZGF0YS51dnMgPSB1dnM7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoY3VycmVudENvbG9ycyAhPT0gbnVsbCAmJiBjdXJyZW50Q29sb3JzICE9PSB2b2lkIDAp
IHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5jb2xvcnMgPSBjb2xvcnM7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5hcHBseVRvTWVzaCh0aGlzLCB0aGlzLmlz
VmVydGV4QnVmZmVyVXBkYXRhYmxlKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
X1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8vIEluc3RhbmNlcworICAgIC8qKiBAaGlkZGVuICovCisgICAgTWVzaC5faW5zdGFuY2VkTWVz
aEZhY3RvcnkgPSBmdW5jdGlvbiAobmFtZSwgbWVzaCkgeworICAgICAgICB0aHJvdyBfTWlzY19k
ZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRvb2xzIl0uV2Fybklt
cG9ydCgiSW5zdGFuY2VkTWVzaCIpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBN
ZXNoLl9QaHlzaWNzSW1wb3N0b3JQYXJzZXIgPSBmdW5jdGlvbiAoc2NlbmUsIHBoeXNpY09iamVj
dCwganNvbk9iamVjdCkgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiUGh5c2ljc0ltcG9z
dG9yIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEluc3RhbmNlZE1l
c2ggb2JqZWN0IGZyb20gdGhlIG1lc2ggbW9kZWwuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfaW5zdGFuY2VzCisgICAgICogQHBhcmFtIG5h
bWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3IGluc3RhbmNlCisgICAgICogQHJldHVybnMg
YSBuZXcgSW5zdGFuY2VkTWVzaAorICAgICAqLworICAgIE1lc2gucHJvdG90eXBlLmNyZWF0ZUlu
c3RhbmNlID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIE1lc2guX2luc3RhbmNl
ZE1lc2hGYWN0b3J5KG5hbWUsIHRoaXMpOworICAgIH07CisgICAgLyoqCisgICAgICogU3luY2hy
b25pc2VzIGFsbCB0aGUgbWVzaCBpbnN0YW5jZSBzdWJtZXNoZXMgdG8gdGhlIGN1cnJlbnQgbWVz
aCBzdWJtZXNoZXMsIGlmIGFueS4KKyAgICAgKiBBZnRlciB0aGlzIGNhbGwsIGFsbCB0aGUgbWVz
aCBpbnN0YW5jZXMgaGF2ZSB0aGUgc2FtZSBzdWJtZXNoZXMgdGhhbiB0aGUgY3VycmVudCBtZXNo
LgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBNZXNoLnBy
b3RvdHlwZS5zeW5jaHJvbml6ZUluc3RhbmNlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9y
ICh2YXIgaW5zdGFuY2VJbmRleCA9IDA7IGluc3RhbmNlSW5kZXggPCB0aGlzLmluc3RhbmNlcy5s
ZW5ndGg7IGluc3RhbmNlSW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gdGhp
cy5pbnN0YW5jZXNbaW5zdGFuY2VJbmRleF07CisgICAgICAgICAgICBpbnN0YW5jZS5fc3luY1N1
Yk1lc2hlcygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
LyoqCisgICAgICogT3B0aW1pemF0aW9uIG9mIHRoZSBtZXNoJ3MgaW5kaWNlcywgaW4gY2FzZSBh
IG1lc2ggaGFzIGR1cGxpY2F0ZWQgdmVydGljZXMuCisgICAgICogVGhlIGZ1bmN0aW9uIHdpbGwg
b25seSByZW9yZGVyIHRoZSBpbmRpY2VzIGFuZCB3aWxsIG5vdCByZW1vdmUgdW51c2VkIHZlcnRp
Y2VzIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggc3VibWVzaGVzLgorICAgICAqIFRoaXMgc2hvdWxk
IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgc2ltcGxpZmljYXRpb24gdG8gYXZvaWQgZGlzYXBw
ZWFyaW5nIHRyaWFuZ2xlcy4KKyAgICAgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIGFuIG9wdGlv
bmFsIHN1Y2Nlc3MgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBvcHRpbWl6YXRpb24g
ZmluaXNoZWQuCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgbWVzaAorICAgICAqLworICAg
IE1lc2gucHJvdG90eXBlLm9wdGltaXplSW5kaWNlcyA9IGZ1bmN0aW9uIChzdWNjZXNzQ2FsbGJh
Y2spIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIGluZGljZXMgPSB0
aGlzLmdldEluZGljZXMoKTsKKyAgICAgICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMuZ2V0VmVydGlj
ZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVy
Il0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCFwb3NpdGlvbnMgfHwgIWluZGljZXMpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZhciB2ZWN0b3JQ
b3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgZm9yICh2YXIgcG9zID0gMDsgcG9zIDwg
cG9zaXRpb25zLmxlbmd0aDsgcG9zID0gcG9zICsgMykgeworICAgICAgICAgICAgdmVjdG9yUG9z
aXRpb25zLnB1c2goX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocG9zaXRpb25zLCBwb3MpKTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgZHVwZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siQXN5bmNMb29wIl0uU3luY0FzeW5jRm9yTG9vcCh2ZWN0
b3JQb3NpdGlvbnMubGVuZ3RoLCA0MCwgZnVuY3Rpb24gKGl0ZXJhdGlvbikgeworICAgICAgICAg
ICAgdmFyIHJlYWxQb3MgPSB2ZWN0b3JQb3NpdGlvbnMubGVuZ3RoIC0gMSAtIGl0ZXJhdGlvbjsK
KyAgICAgICAgICAgIHZhciB0ZXN0ZWRQb3NpdGlvbiA9IHZlY3RvclBvc2l0aW9uc1tyZWFsUG9z
XTsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVhbFBvczsgKytqKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGFnYWluc3RQb3NpdGlvbiA9IHZlY3RvclBvc2l0aW9uc1tqXTsKKyAg
ICAgICAgICAgICAgICBpZiAodGVzdGVkUG9zaXRpb24uZXF1YWxzKGFnYWluc3RQb3NpdGlvbikp
IHsKKyAgICAgICAgICAgICAgICAgICAgZHVwZXNbcmVhbFBvc10gPSBqOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNl
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGluZGljZXNbaV0gPSBkdXBlc1tpbmRp
Y2VzW2ldXSB8fCBpbmRpY2VzW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy9pbmRp
Y2VzIGFyZSBub3cgcmVvcmRlcmVkCisgICAgICAgICAgICB2YXIgb3JpZ2luYWxTdWJNZXNoZXMg
PSBfdGhpcy5zdWJNZXNoZXMuc2xpY2UoMCk7CisgICAgICAgICAgICBfdGhpcy5zZXRJbmRpY2Vz
KGluZGljZXMpOworICAgICAgICAgICAgX3RoaXMuc3ViTWVzaGVzID0gb3JpZ2luYWxTdWJNZXNo
ZXM7CisgICAgICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAg
c3VjY2Vzc0NhbGxiYWNrKF90aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplIGN1cnJl
bnQgbWVzaAorICAgICAqIEBwYXJhbSBzZXJpYWxpemF0aW9uT2JqZWN0IGRlZmluZXMgdGhlIG9i
amVjdCB3aGljaCB3aWxsIHJlY2VpdmUgdGhlIHNlcmlhbGl6YXRpb24gZGF0YQorICAgICAqLwor
ICAgIE1lc2gucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2Jq
ZWN0KSB7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubmFtZSA9IHRoaXMubmFtZTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5pZCA9IHRoaXMuaWQ7CisgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QudHlwZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIGlmIChfTWlz
Y190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRhZ3MiXSAmJiBfTWlzY190YWdz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRhZ3MiXS5IYXNUYWdzKHRoaXMpKSB7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRhZ3MgPSBfTWlzY190YWdzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlRhZ3MiXS5HZXRUYWdzKHRoaXMpOworICAgICAgICB9Cisg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uLmFzQXJy
YXkoKTsKKyAgICAgICAgaWYgKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAg
ICBzZXJpYWxpemF0aW9uT2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbiA9IHRoaXMucm90YXRpb25R
dWF0ZXJuaW9uLmFzQXJyYXkoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLnJv
dGF0aW9uKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJvdGF0aW9uID0gdGhp
cy5yb3RhdGlvbi5hc0FycmF5KCk7CisgICAgICAgIH0KKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5zY2FsaW5nID0gdGhpcy5zY2FsaW5nLmFzQXJyYXkoKTsKKyAgICAgICAgaWYgKHRoaXMu
X3Bvc3RNdWx0aXBseVBpdm90TWF0cml4KSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LnBpdm90TWF0cml4ID0gdGhpcy5nZXRQaXZvdE1hdHJpeCgpLmFzQXJyYXkoKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubG9j
YWxNYXRyaXggPSB0aGlzLmdldFBpdm90TWF0cml4KCkuYXNBcnJheSgpOworICAgICAgICB9Cisg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaXNFbmFibGVkID0gdGhpcy5pc0VuYWJsZWQoZmFs
c2UpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmlzVmlzaWJsZSA9IHRoaXMuaXNWaXNp
YmxlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmluZmluaXRlRGlzdGFuY2UgPSB0aGlz
LmluZmluaXRlRGlzdGFuY2U7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucGlja2FibGUg
PSB0aGlzLmlzUGlja2FibGU7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmVjZWl2ZVNo
YWRvd3MgPSB0aGlzLnJlY2VpdmVTaGFkb3dzOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0
LmJpbGxib2FyZE1vZGUgPSB0aGlzLmJpbGxib2FyZE1vZGU7CisgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QudmlzaWJpbGl0eSA9IHRoaXMudmlzaWJpbGl0eTsKKyAgICAgICAgc2VyaWFsaXph
dGlvbk9iamVjdC5jaGVja0NvbGxpc2lvbnMgPSB0aGlzLmNoZWNrQ29sbGlzaW9uczsKKyAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC5pc0Jsb2NrZXIgPSB0aGlzLmlzQmxvY2tlcjsKKyAgICAg
ICAgLy8gUGFyZW50CisgICAgICAgIGlmICh0aGlzLnBhcmVudCkgeworICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5wYXJlbnRJZCA9IHRoaXMucGFyZW50LmlkOworICAgICAgICB9Cisg
ICAgICAgIC8vIEdlb21ldHJ5CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaXNVbkluZGV4
ZWQgPSB0aGlzLmlzVW5JbmRleGVkOworICAgICAgICB2YXIgZ2VvbWV0cnkgPSB0aGlzLl9nZW9t
ZXRyeTsKKyAgICAgICAgaWYgKGdlb21ldHJ5KSB7CisgICAgICAgICAgICB2YXIgZ2VvbWV0cnlJ
ZCA9IGdlb21ldHJ5LmlkOworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5nZW9tZXRy
eUlkID0gZ2VvbWV0cnlJZDsKKyAgICAgICAgICAgIC8vIFN1Yk1lc2hlcworICAgICAgICAgICAg
c2VyaWFsaXphdGlvbk9iamVjdC5zdWJNZXNoZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFy
IHN1YkluZGV4ID0gMDsgc3ViSW5kZXggPCB0aGlzLnN1Yk1lc2hlcy5sZW5ndGg7IHN1YkluZGV4
KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgc3ViTWVzaCA9IHRoaXMuc3ViTWVzaGVzW3N1Yklu
ZGV4XTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnN1Yk1lc2hlcy5wdXNo
KHsKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxJbmRleDogc3ViTWVzaC5tYXRlcmlhbElu
ZGV4LAorICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1N0YXJ0OiBzdWJNZXNoLnZlcnRpY2Vz
U3RhcnQsCisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzQ291bnQ6IHN1Yk1lc2gudmVydGlj
ZXNDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFydDogc3ViTWVzaC5pbmRleFN0
YXJ0LAorICAgICAgICAgICAgICAgICAgICBpbmRleENvdW50OiBzdWJNZXNoLmluZGV4Q291bnQK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAv
LyBNYXRlcmlhbAorICAgICAgICBpZiAodGhpcy5tYXRlcmlhbCkgeworICAgICAgICAgICAgaWYg
KCF0aGlzLm1hdGVyaWFsLmRvTm90U2VyaWFsaXplKSB7CisgICAgICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5tYXRlcmlhbElkID0gdGhpcy5tYXRlcmlhbC5pZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwg
PSBudWxsOworICAgICAgICB9CisgICAgICAgIC8vIE1vcnBoIHRhcmdldHMKKyAgICAgICAgaWYg
KHRoaXMubW9ycGhUYXJnZXRNYW5hZ2VyKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0Lm1vcnBoVGFyZ2V0TWFuYWdlcklkID0gdGhpcy5tb3JwaFRhcmdldE1hbmFnZXIudW5pcXVl
SWQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2tlbGV0b24KKyAgICAgICAgaWYgKHRoaXMuc2tl
bGV0b24pIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc2tlbGV0b25JZCA9IHRo
aXMuc2tlbGV0b24uaWQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gUGh5c2ljcworICAgICAgICAv
L1RPRE8gaW1wbGVtZW50IGNvcnJlY3Qgc2VyaWFsaXphdGlvbiBmb3IgcGh5c2ljcyBpbXBvc3Rv
cnMuCisgICAgICAgIGlmICh0aGlzLmdldFNjZW5lKCkuX2dldENvbXBvbmVudChfc2NlbmVDb21w
b25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIlNjZW5lQ29tcG9uZW50Q29uc3Rh
bnRzIl0uTkFNRV9QSFlTSUNTRU5HSU5FKSkgeworICAgICAgICAgICAgdmFyIGltcG9zdG9yID0g
dGhpcy5nZXRQaHlzaWNzSW1wb3N0b3IoKTsKKyAgICAgICAgICAgIGlmIChpbXBvc3Rvcikgewor
ICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucGh5c2ljc01hc3MgPSBpbXBvc3Rv
ci5nZXRQYXJhbSgibWFzcyIpOworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
cGh5c2ljc0ZyaWN0aW9uID0gaW1wb3N0b3IuZ2V0UGFyYW0oImZyaWN0aW9uIik7CisgICAgICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5waHlzaWNzUmVzdGl0dXRpb24gPSBpbXBvc3Rv
ci5nZXRQYXJhbSgibWFzcyIpOworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
cGh5c2ljc0ltcG9zdG9yID0gaW1wb3N0b3IudHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAvLyBNZXRhZGF0YQorICAgICAgICBpZiAodGhpcy5tZXRhZGF0YSkgeworICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tZXRhZGF0YSA9IHRoaXMubWV0YWRhdGE7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gSW5zdGFuY2VzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QuaW5zdGFuY2VzID0gW107CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0
aGlzLmluc3RhbmNlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBpbnN0YW5j
ZSA9IHRoaXMuaW5zdGFuY2VzW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChpbnN0YW5jZS5kb05v
dFNlcmlhbGl6ZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25JbnN0YW5jZSA9IHsKKyAgICAgICAgICAgICAg
ICBuYW1lOiBpbnN0YW5jZS5uYW1lLAorICAgICAgICAgICAgICAgIGlkOiBpbnN0YW5jZS5pZCwK
KyAgICAgICAgICAgICAgICBwb3NpdGlvbjogaW5zdGFuY2UucG9zaXRpb24uYXNBcnJheSgpLAor
ICAgICAgICAgICAgICAgIHNjYWxpbmc6IGluc3RhbmNlLnNjYWxpbmcuYXNBcnJheSgpCisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgaWYgKGluc3RhbmNlLnBhcmVudCkgeworICAgICAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25JbnN0YW5jZS5wYXJlbnRJZCA9IGluc3RhbmNlLnBhcmVudC5p
ZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnN0YW5jZS5yb3RhdGlvblF1YXRl
cm5pb24pIHsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uSW5zdGFuY2Uucm90YXRpb25R
dWF0ZXJuaW9uID0gaW5zdGFuY2Uucm90YXRpb25RdWF0ZXJuaW9uLmFzQXJyYXkoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGluc3RhbmNlLnJvdGF0aW9uKSB7CisgICAg
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbkluc3RhbmNlLnJvdGF0aW9uID0gaW5zdGFuY2Uucm90
YXRpb24uYXNBcnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VyaWFsaXphdGlv
bk9iamVjdC5pbnN0YW5jZXMucHVzaChzZXJpYWxpemF0aW9uSW5zdGFuY2UpOworICAgICAgICAg
ICAgLy8gQW5pbWF0aW9ucworICAgICAgICAgICAgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMThfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkFwcGVuZFNlcmlhbGl6
ZWRBbmltYXRpb25zKGluc3RhbmNlLCBzZXJpYWxpemF0aW9uSW5zdGFuY2UpOworICAgICAgICAg
ICAgc2VyaWFsaXphdGlvbkluc3RhbmNlLnJhbmdlcyA9IGluc3RhbmNlLnNlcmlhbGl6ZUFuaW1h
dGlvblJhbmdlcygpOworICAgICAgICB9CisgICAgICAgIC8vCisgICAgICAgIC8vIEFuaW1hdGlv
bnMKKyAgICAgICAgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThf
X1siU2VyaWFsaXphdGlvbkhlbHBlciJdLkFwcGVuZFNlcmlhbGl6ZWRBbmltYXRpb25zKHRoaXMs
IHNlcmlhbGl6YXRpb25PYmplY3QpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJhbmdl
cyA9IHRoaXMuc2VyaWFsaXplQW5pbWF0aW9uUmFuZ2VzKCk7CisgICAgICAgIC8vIExheWVyIG1h
c2sKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5sYXllck1hc2sgPSB0aGlzLmxheWVyTWFz
azsKKyAgICAgICAgLy8gQWxwaGEKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hbHBoYUlu
ZGV4ID0gdGhpcy5hbHBoYUluZGV4OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lmhhc1Zl
cnRleEFscGhhID0gdGhpcy5oYXNWZXJ0ZXhBbHBoYTsKKyAgICAgICAgLy8gT3ZlcmxheQorICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm92ZXJsYXlBbHBoYSA9IHRoaXMub3ZlcmxheUFscGhh
OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm92ZXJsYXlDb2xvciA9IHRoaXMub3Zlcmxh
eUNvbG9yLmFzQXJyYXkoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5yZW5kZXJPdmVy
bGF5ID0gdGhpcy5yZW5kZXJPdmVybGF5OworICAgICAgICAvLyBGb2cKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5hcHBseUZvZyA9IHRoaXMuYXBwbHlGb2c7CisgICAgICAgIC8vIEFjdGlv
biBNYW5hZ2VyCisgICAgICAgIGlmICh0aGlzLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAg
IHNlcmlhbGl6YXRpb25PYmplY3QuYWN0aW9ucyA9IHRoaXMuYWN0aW9uTWFuYWdlci5zZXJpYWxp
emUodGhpcy5uYW1lKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBNZXNoLnByb3RvdHlwZS5fc3luY0dlb21ldHJ5V2l0aE1vcnBoVGFyZ2V0TWFuYWdlciA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmdlb21ldHJ5KSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbWFya1N1Yk1lc2hlc0FzQXR0cmlidXRl
c0RpcnR5KCk7CisgICAgICAgIHZhciBtb3JwaFRhcmdldE1hbmFnZXIgPSB0aGlzLl9pbnRlcm5h
bE1lc2hEYXRhSW5mby5fbW9ycGhUYXJnZXRNYW5hZ2VyOworICAgICAgICBpZiAobW9ycGhUYXJn
ZXRNYW5hZ2VyICYmIG1vcnBoVGFyZ2V0TWFuYWdlci52ZXJ0ZXhDb3VudCkgeworICAgICAgICAg
ICAgaWYgKG1vcnBoVGFyZ2V0TWFuYWdlci52ZXJ0ZXhDb3VudCAhPT0gdGhpcy5nZXRUb3RhbFZl
cnRpY2VzKCkpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE5X19bIkxvZ2dlciJdLkVycm9yKCJNZXNoIGlzIGluY29tcGF0aWJsZSB3aXRo
IG1vcnBoIHRhcmdldHMuIFRhcmdldHMgYW5kIG1lc2ggbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSB2
ZXJ0aWNlcyBjb3VudC4iKTsKKyAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0TWFuYWdl
ciA9IG51bGw7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG1vcnBoVGFyZ2V0TWFuYWdlci5udW1J
bmZsdWVuY2VyczsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBtb3JwaFRhcmdldCA9
IG1vcnBoVGFyZ2V0TWFuYWdlci5nZXRBY3RpdmVUYXJnZXQoaW5kZXgpOworICAgICAgICAgICAg
ICAgIHZhciBwb3NpdGlvbnMgPSBtb3JwaFRhcmdldC5nZXRQb3NpdGlvbnMoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXBvc2l0aW9ucykgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIkxvZ2dlciJdLkVycm9yKCJJbnZhbGlk
IG1vcnBoIHRhcmdldC4gVGFyZ2V0IG11c3QgaGF2ZSBwb3NpdGlvbnMuIik7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhp
cy5nZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQgKyBpbmRleCwgcG9zaXRpb25zLCBm
YWxzZSwgMyk7CisgICAgICAgICAgICAgICAgdmFyIG5vcm1hbHMgPSBtb3JwaFRhcmdldC5nZXRO
b3JtYWxzKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vcm1hbHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5nZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kICsgaW5kZXgsIG5vcm1h
bHMsIGZhbHNlLCAzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHRh
bmdlbnRzID0gbW9ycGhUYXJnZXQuZ2V0VGFuZ2VudHMoKTsKKyAgICAgICAgICAgICAgICBpZiAo
dGFuZ2VudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW9tZXRyeS5zZXRWZXJ0aWNl
c0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIi
XS5UYW5nZW50S2luZCArIGluZGV4LCB0YW5nZW50cywgZmFsc2UsIDMpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgdXZzID0gbW9ycGhUYXJnZXQuZ2V0VVZzKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHV2cykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmdlb21l
dHJ5LnNldFZlcnRpY2VzRGF0YShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IlZlcnRleEJ1ZmZlciJdLlVWS2luZCArICJfIiArIGluZGV4LCB1dnMsIGZhbHNlLCAyKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICAgICAgLy8gUG9zaXRpb25zCisg
ICAgICAgICAgICB3aGlsZSAodGhpcy5nZW9tZXRyeS5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlv
bktpbmQgKyBpbmRleCkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmdlb21ldHJ5LnJlbW92ZVZl
cnRpY2VzRGF0YShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1
ZmZlciJdLlBvc2l0aW9uS2luZCArIGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5n
ZW9tZXRyeS5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kICsgaW5kZXgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZ2VvbWV0cnkucmVtb3ZlVmVydGljZXNEYXRhKF9idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCArIGlu
ZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2VvbWV0
cnkuaXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siVmVydGV4QnVmZmVyIl0uVGFuZ2VudEtpbmQgKyBpbmRleCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5nZW9tZXRyeS5yZW1vdmVWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5UYW5nZW50S2luZCArIGluZGV4
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2VvbWV0cnku
aXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
X1siVmVydGV4QnVmZmVyIl0uVVZLaW5kICsgaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuZ2VvbWV0cnkucmVtb3ZlVmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kICsgIl8iICsgaW5kZXgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbmV3IE1lc2ggb2Jq
ZWN0IHBhcnNlZCBmcm9tIHRoZSBzb3VyY2UgcHJvdmlkZWQuCisgICAgICogQHBhcmFtIHBhcnNl
ZE1lc2ggaXMgdGhlIHNvdXJjZQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0
aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHJvb3RVcmwgaXMgdGhlIHJvb3QgVVJMIHRvIHByZWZp
eCB0aGUgYGRlbGF5TG9hZGluZ0ZpbGVgIHByb3BlcnR5IHdpdGgKKyAgICAgKiBAcmV0dXJucyBh
IG5ldyBNZXNoCisgICAgICovCisgICAgTWVzaC5QYXJzZSA9IGZ1bmN0aW9uIChwYXJzZWRNZXNo
LCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICB2YXIgbWVzaDsKKyAgICAgICAgaWYgKHBhcnNl
ZE1lc2gudHlwZSAmJiBwYXJzZWRNZXNoLnR5cGUgPT09ICJHcm91bmRNZXNoIikgeworICAgICAg
ICAgICAgbWVzaCA9IE1lc2guX0dyb3VuZE1lc2hQYXJzZXIocGFyc2VkTWVzaCwgc2NlbmUpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWVzaCA9IG5ldyBNZXNoKHBh
cnNlZE1lc2gubmFtZSwgc2NlbmUpOworICAgICAgICB9CisgICAgICAgIG1lc2guaWQgPSBwYXJz
ZWRNZXNoLmlkOworICAgICAgICBpZiAoX01pc2NfdGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJUYWdzIl0pIHsKKyAgICAgICAgICAgIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siVGFncyJdLkFkZFRhZ3NUbyhtZXNoLCBwYXJzZWRNZXNoLnRhZ3MpOwor
ICAgICAgICB9CisgICAgICAgIG1lc2gucG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZyb21BcnJheShwYXJzZWRNZXNo
LnBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHBhcnNlZE1lc2gubWV0YWRhdGEgIT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgbWVzaC5tZXRhZGF0YSA9IHBhcnNlZE1lc2gubWV0YWRhdGE7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uKSB7Cisg
ICAgICAgICAgICBtZXNoLnJvdGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJRdWF0ZXJuaW9uIl0uRnJvbUFycmF5KHBhcnNl
ZE1lc2gucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChw
YXJzZWRNZXNoLnJvdGF0aW9uKSB7CisgICAgICAgICAgICBtZXNoLnJvdGF0aW9uID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5Gcm9t
QXJyYXkocGFyc2VkTWVzaC5yb3RhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgbWVzaC5zY2Fs
aW5nID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZl
Y3RvcjMiXS5Gcm9tQXJyYXkocGFyc2VkTWVzaC5zY2FsaW5nKTsKKyAgICAgICAgaWYgKHBhcnNl
ZE1lc2gubG9jYWxNYXRyaXgpIHsKKyAgICAgICAgICAgIG1lc2guc2V0UHJlVHJhbnNmb3JtTWF0
cml4KF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRy
aXgiXS5Gcm9tQXJyYXkocGFyc2VkTWVzaC5sb2NhbE1hdHJpeCkpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHBhcnNlZE1lc2gucGl2b3RNYXRyaXgpIHsKKyAgICAgICAgICAgIG1lc2gu
c2V0UGl2b3RNYXRyaXgoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X19bIk1hdHJpeCJdLkZyb21BcnJheShwYXJzZWRNZXNoLnBpdm90TWF0cml4KSk7CisgICAg
ICAgIH0KKyAgICAgICAgbWVzaC5zZXRFbmFibGVkKHBhcnNlZE1lc2guaXNFbmFibGVkKTsKKyAg
ICAgICAgbWVzaC5pc1Zpc2libGUgPSBwYXJzZWRNZXNoLmlzVmlzaWJsZTsKKyAgICAgICAgbWVz
aC5pbmZpbml0ZURpc3RhbmNlID0gcGFyc2VkTWVzaC5pbmZpbml0ZURpc3RhbmNlOworICAgICAg
ICBtZXNoLnNob3dCb3VuZGluZ0JveCA9IHBhcnNlZE1lc2guc2hvd0JvdW5kaW5nQm94OworICAg
ICAgICBtZXNoLnNob3dTdWJNZXNoZXNCb3VuZGluZ0JveCA9IHBhcnNlZE1lc2guc2hvd1N1Yk1l
c2hlc0JvdW5kaW5nQm94OworICAgICAgICBpZiAocGFyc2VkTWVzaC5hcHBseUZvZyAhPT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICBtZXNoLmFwcGx5Rm9nID0gcGFyc2VkTWVzaC5hcHBseUZv
ZzsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkTWVzaC5waWNrYWJsZSAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICAgICAgICBtZXNoLmlzUGlja2FibGUgPSBwYXJzZWRNZXNoLnBpY2thYmxl
OworICAgICAgICB9CisgICAgICAgIGlmIChwYXJzZWRNZXNoLmFscGhhSW5kZXggIT09IHVuZGVm
aW5lZCkgeworICAgICAgICAgICAgbWVzaC5hbHBoYUluZGV4ID0gcGFyc2VkTWVzaC5hbHBoYUlu
ZGV4OworICAgICAgICB9CisgICAgICAgIG1lc2gucmVjZWl2ZVNoYWRvd3MgPSBwYXJzZWRNZXNo
LnJlY2VpdmVTaGFkb3dzOworICAgICAgICBtZXNoLmJpbGxib2FyZE1vZGUgPSBwYXJzZWRNZXNo
LmJpbGxib2FyZE1vZGU7CisgICAgICAgIGlmIChwYXJzZWRNZXNoLnZpc2liaWxpdHkgIT09IHVu
ZGVmaW5lZCkgeworICAgICAgICAgICAgbWVzaC52aXNpYmlsaXR5ID0gcGFyc2VkTWVzaC52aXNp
YmlsaXR5OworICAgICAgICB9CisgICAgICAgIG1lc2guY2hlY2tDb2xsaXNpb25zID0gcGFyc2Vk
TWVzaC5jaGVja0NvbGxpc2lvbnM7CisgICAgICAgIGlmIChwYXJzZWRNZXNoLmlzQmxvY2tlciAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBtZXNoLmlzQmxvY2tlciA9IHBhcnNlZE1lc2gu
aXNCbG9ja2VyOworICAgICAgICB9CisgICAgICAgIG1lc2guX3Nob3VsZEdlbmVyYXRlRmxhdFNo
YWRpbmcgPSBwYXJzZWRNZXNoLnVzZUZsYXRTaGFkaW5nOworICAgICAgICAvLyBmcmVlemVXb3Js
ZE1hdHJpeAorICAgICAgICBpZiAocGFyc2VkTWVzaC5mcmVlemVXb3JsZE1hdHJpeCkgeworICAg
ICAgICAgICAgbWVzaC5fd2FpdGluZ0RhdGEuZnJlZXplV29ybGRNYXRyaXggPSBwYXJzZWRNZXNo
LmZyZWV6ZVdvcmxkTWF0cml4OworICAgICAgICB9CisgICAgICAgIC8vIFBhcmVudAorICAgICAg
ICBpZiAocGFyc2VkTWVzaC5wYXJlbnRJZCkgeworICAgICAgICAgICAgbWVzaC5fd2FpdGluZ1Bh
cmVudElkID0gcGFyc2VkTWVzaC5wYXJlbnRJZDsKKyAgICAgICAgfQorICAgICAgICAvLyBBY3Rp
b25zCisgICAgICAgIGlmIChwYXJzZWRNZXNoLmFjdGlvbnMgIT09IHVuZGVmaW5lZCkgeworICAg
ICAgICAgICAgbWVzaC5fd2FpdGluZ0RhdGEuYWN0aW9ucyA9IHBhcnNlZE1lc2guYWN0aW9uczsK
KyAgICAgICAgfQorICAgICAgICAvLyBPdmVybGF5CisgICAgICAgIGlmIChwYXJzZWRNZXNoLm92
ZXJsYXlBbHBoYSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBtZXNoLm92ZXJsYXlBbHBo
YSA9IHBhcnNlZE1lc2gub3ZlcmxheUFscGhhOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJz
ZWRNZXNoLm92ZXJsYXlDb2xvciAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBtZXNoLm92
ZXJsYXlDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82
X19bIkNvbG9yMyJdLkZyb21BcnJheShwYXJzZWRNZXNoLm92ZXJsYXlDb2xvcik7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHBhcnNlZE1lc2gucmVuZGVyT3ZlcmxheSAhPT0gdW5kZWZpbmVkKSB7
CisgICAgICAgICAgICBtZXNoLnJlbmRlck92ZXJsYXkgPSBwYXJzZWRNZXNoLnJlbmRlck92ZXJs
YXk7CisgICAgICAgIH0KKyAgICAgICAgLy8gR2VvbWV0cnkKKyAgICAgICAgbWVzaC5pc1VuSW5k
ZXhlZCA9ICEhcGFyc2VkTWVzaC5pc1VuSW5kZXhlZDsKKyAgICAgICAgbWVzaC5oYXNWZXJ0ZXhB
bHBoYSA9IHBhcnNlZE1lc2guaGFzVmVydGV4QWxwaGE7CisgICAgICAgIGlmIChwYXJzZWRNZXNo
LmRlbGF5TG9hZGluZ0ZpbGUpIHsKKyAgICAgICAgICAgIG1lc2guZGVsYXlMb2FkU3RhdGUgPSBf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bIkNvbnN0YW50
cyJdLkRFTEFZTE9BRFNUQVRFX05PVExPQURFRDsKKyAgICAgICAgICAgIG1lc2guZGVsYXlMb2Fk
aW5nRmlsZSA9IHJvb3RVcmwgKyBwYXJzZWRNZXNoLmRlbGF5TG9hZGluZ0ZpbGU7CisgICAgICAg
ICAgICBtZXNoLl9ib3VuZGluZ0luZm8gPSBuZXcgX0N1bGxpbmdfYm91bmRpbmdJbmZvX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJCb3VuZGluZ0luZm8iXShfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZyb21BcnJheShwYXJz
ZWRNZXNoLmJvdW5kaW5nQm94TWluaW11bSksIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KHBhcnNlZE1lc2guYm91bmRp
bmdCb3hNYXhpbXVtKSk7CisgICAgICAgICAgICBpZiAocGFyc2VkTWVzaC5fYmluYXJ5SW5mbykg
eworICAgICAgICAgICAgICAgIG1lc2guX2JpbmFyeUluZm8gPSBwYXJzZWRNZXNoLl9iaW5hcnlJ
bmZvOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVzaC5fZGVsYXlJbmZvID0gW107Cisg
ICAgICAgICAgICBpZiAocGFyc2VkTWVzaC5oYXNVVnMpIHsKKyAgICAgICAgICAgICAgICBtZXNo
Ll9kZWxheUluZm8ucHVzaChfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZl
cnRleEJ1ZmZlciJdLlVWS2luZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFy
c2VkTWVzaC5oYXNVVnMyKSB7CisgICAgICAgICAgICAgICAgbWVzaC5fZGVsYXlJbmZvLnB1c2go
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjJL
aW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRNZXNoLmhhc1VWczMp
IHsKKyAgICAgICAgICAgICAgICBtZXNoLl9kZWxheUluZm8ucHVzaChfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLlVWM0tpbmQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZE1lc2guaGFzVVZzNCkgeworICAgICAgICAgICAg
ICAgIG1lc2guX2RlbGF5SW5mby5wdXNoKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siVmVydGV4QnVmZmVyIl0uVVY0S2luZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAocGFyc2VkTWVzaC5oYXNVVnM1KSB7CisgICAgICAgICAgICAgICAgbWVzaC5fZGVsYXlJ
bmZvLnB1c2goX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZm
ZXIiXS5VVjVLaW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRNZXNo
Lmhhc1VWczYpIHsKKyAgICAgICAgICAgICAgICBtZXNoLl9kZWxheUluZm8ucHVzaChfYnVmZmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLlVWNktpbmQpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlZE1lc2guaGFzQ29sb3JzKSB7Cisg
ICAgICAgICAgICAgICAgbWVzaC5fZGVsYXlJbmZvLnB1c2goX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHBhcnNlZE1lc2guaGFzTWF0cmljZXNJbmRpY2VzKSB7CisgICAg
ICAgICAgICAgICAgbWVzaC5fZGVsYXlJbmZvLnB1c2goX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNLaW5kKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJzZWRNZXNoLmhhc01hdHJpY2VzV2VpZ2h0cykg
eworICAgICAgICAgICAgICAgIG1lc2guX2RlbGF5SW5mby5wdXNoKF9idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXNoLl9kZWxheUxvYWRpbmdGdW5jdGlvbiA9
IF9nZW9tZXRyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siR2VvbWV0cnkiXS5fSW1w
b3J0R2VvbWV0cnk7CisgICAgICAgICAgICBpZiAoX0xvYWRpbmdfc2NlbmVMb2FkZXJGbGFnc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siU2NlbmVMb2FkZXJGbGFncyJdLkZvcmNlRnVs
bFNjZW5lTG9hZGluZ0ZvckluY3JlbWVudGFsKSB7CisgICAgICAgICAgICAgICAgbWVzaC5fY2hl
Y2tEZWxheVN0YXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBfZ2VvbWV0cnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkdl
b21ldHJ5Il0uX0ltcG9ydEdlb21ldHJ5KHBhcnNlZE1lc2gsIG1lc2gpOworICAgICAgICB9Cisg
ICAgICAgIC8vIE1hdGVyaWFsCisgICAgICAgIGlmIChwYXJzZWRNZXNoLm1hdGVyaWFsSWQpIHsK
KyAgICAgICAgICAgIG1lc2guc2V0TWF0ZXJpYWxCeUlEKHBhcnNlZE1lc2gubWF0ZXJpYWxJZCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtZXNoLm1hdGVyaWFsID0g
bnVsbDsKKyAgICAgICAgfQorICAgICAgICAvLyBNb3JwaCB0YXJnZXRzCisgICAgICAgIGlmIChw
YXJzZWRNZXNoLm1vcnBoVGFyZ2V0TWFuYWdlcklkID4gLTEpIHsKKyAgICAgICAgICAgIG1lc2gu
bW9ycGhUYXJnZXRNYW5hZ2VyID0gc2NlbmUuZ2V0TW9ycGhUYXJnZXRNYW5hZ2VyQnlJZChwYXJz
ZWRNZXNoLm1vcnBoVGFyZ2V0TWFuYWdlcklkKTsKKyAgICAgICAgfQorICAgICAgICAvLyBTa2Vs
ZXRvbgorICAgICAgICBpZiAocGFyc2VkTWVzaC5za2VsZXRvbklkID4gLTEpIHsKKyAgICAgICAg
ICAgIG1lc2guc2tlbGV0b24gPSBzY2VuZS5nZXRMYXN0U2tlbGV0b25CeUlEKHBhcnNlZE1lc2gu
c2tlbGV0b25JZCk7CisgICAgICAgICAgICBpZiAocGFyc2VkTWVzaC5udW1Cb25lSW5mbHVlbmNl
cnMpIHsKKyAgICAgICAgICAgICAgICBtZXNoLm51bUJvbmVJbmZsdWVuY2VycyA9IHBhcnNlZE1l
c2gubnVtQm9uZUluZmx1ZW5jZXJzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IC8vIEFuaW1hdGlvbnMKKyAgICAgICAgaWYgKHBhcnNlZE1lc2guYW5pbWF0aW9ucykgeworICAg
ICAgICAgICAgZm9yICh2YXIgYW5pbWF0aW9uSW5kZXggPSAwOyBhbmltYXRpb25JbmRleCA8IHBh
cnNlZE1lc2guYW5pbWF0aW9ucy5sZW5ndGg7IGFuaW1hdGlvbkluZGV4KyspIHsKKyAgICAgICAg
ICAgICAgICB2YXIgcGFyc2VkQW5pbWF0aW9uID0gcGFyc2VkTWVzaC5hbmltYXRpb25zW2FuaW1h
dGlvbkluZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxDbGFzcyA9IF9NaXNjX3R5
cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siX1R5cGVTdG9yZSJdLkdldENs
YXNzKCJCQUJZTE9OLkFuaW1hdGlvbiIpOworICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbENs
YXNzKSB7CisgICAgICAgICAgICAgICAgICAgIG1lc2guYW5pbWF0aW9ucy5wdXNoKGludGVybmFs
Q2xhc3MuUGFyc2UocGFyc2VkQW5pbWF0aW9uKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1si
Tm9kZSJdLlBhcnNlQW5pbWF0aW9uUmFuZ2VzKG1lc2gsIHBhcnNlZE1lc2gsIHNjZW5lKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAocGFyc2VkTWVzaC5hdXRvQW5pbWF0ZSkgeworICAgICAgICAg
ICAgc2NlbmUuYmVnaW5BbmltYXRpb24obWVzaCwgcGFyc2VkTWVzaC5hdXRvQW5pbWF0ZUZyb20s
IHBhcnNlZE1lc2guYXV0b0FuaW1hdGVUbywgcGFyc2VkTWVzaC5hdXRvQW5pbWF0ZUxvb3AsIHBh
cnNlZE1lc2guYXV0b0FuaW1hdGVTcGVlZCB8fCAxLjApOworICAgICAgICB9CisgICAgICAgIC8v
IExheWVyIE1hc2sKKyAgICAgICAgaWYgKHBhcnNlZE1lc2gubGF5ZXJNYXNrICYmICghaXNOYU4o
cGFyc2VkTWVzaC5sYXllck1hc2spKSkgeworICAgICAgICAgICAgbWVzaC5sYXllck1hc2sgPSBN
YXRoLmFicyhwYXJzZUludChwYXJzZWRNZXNoLmxheWVyTWFzaykpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbWVzaC5sYXllck1hc2sgPSAweDBGRkZGRkZGOworICAg
ICAgICB9CisgICAgICAgIC8vIFBoeXNpY3MKKyAgICAgICAgaWYgKHBhcnNlZE1lc2gucGh5c2lj
c0ltcG9zdG9yKSB7CisgICAgICAgICAgICBNZXNoLl9QaHlzaWNzSW1wb3N0b3JQYXJzZXIoc2Nl
bmUsIG1lc2gsIHBhcnNlZE1lc2gpOworICAgICAgICB9CisgICAgICAgIC8vIExldmVscworICAg
ICAgICBpZiAocGFyc2VkTWVzaC5sb2RNZXNoSWRzKSB7CisgICAgICAgICAgICBtZXNoLl93YWl0
aW5nRGF0YS5sb2RzID0geworICAgICAgICAgICAgICAgIGlkczogcGFyc2VkTWVzaC5sb2RNZXNo
SWRzLAorICAgICAgICAgICAgICAgIGRpc3RhbmNlczogKHBhcnNlZE1lc2gubG9kRGlzdGFuY2Vz
KSA/IHBhcnNlZE1lc2gubG9kRGlzdGFuY2VzIDogbnVsbCwKKyAgICAgICAgICAgICAgICBjb3Zl
cmFnZXM6IChwYXJzZWRNZXNoLmxvZENvdmVyYWdlcykgPyBwYXJzZWRNZXNoLmxvZENvdmVyYWdl
cyA6IG51bGwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5zdGFuY2Vz
CisgICAgICAgIGlmIChwYXJzZWRNZXNoLmluc3RhbmNlcykgeworICAgICAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IHBhcnNlZE1lc2guaW5zdGFuY2VzLmxlbmd0aDsgaW5kZXgr
KykgeworICAgICAgICAgICAgICAgIHZhciBwYXJzZWRJbnN0YW5jZSA9IHBhcnNlZE1lc2guaW5z
dGFuY2VzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBtZXNoLmNyZWF0
ZUluc3RhbmNlKHBhcnNlZEluc3RhbmNlLm5hbWUpOworICAgICAgICAgICAgICAgIGlmIChwYXJz
ZWRJbnN0YW5jZS5pZCkgeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5pZCA9IHBhcnNl
ZEluc3RhbmNlLmlkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoX01p
c2NfdGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUYWdzIl0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhcnNlZEluc3RhbmNlLnRhZ3MpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVGFncyJdLkFk
ZFRhZ3NUbyhpbnN0YW5jZSwgcGFyc2VkSW5zdGFuY2UudGFncyk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBfTWlzY190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRhZ3MiXS5BZGRUYWdz
VG8oaW5zdGFuY2UsIHBhcnNlZE1lc2gudGFncyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5zdGFuY2UucG9zaXRpb24gPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkZy
b21BcnJheShwYXJzZWRJbnN0YW5jZS5wb3NpdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKHBh
cnNlZEluc3RhbmNlLm1ldGFkYXRhICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW5zdGFuY2UubWV0YWRhdGEgPSBwYXJzZWRJbnN0YW5jZS5tZXRhZGF0YTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZEluc3RhbmNlLnBhcmVudElkKSB7
CisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLl93YWl0aW5nUGFyZW50SWQgPSBwYXJzZWRJ
bnN0YW5jZS5wYXJlbnRJZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KHBhcnNlZEluc3RhbmNlLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgICAg
ICBpbnN0YW5jZS5yb3RhdGlvblF1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siUXVhdGVybmlvbiJdLkZyb21BcnJheShwYXJzZWRJbnN0
YW5jZS5yb3RhdGlvblF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChwYXJzZWRJbnN0YW5jZS5yb3RhdGlvbikgeworICAgICAgICAgICAgICAg
ICAgICBpbnN0YW5jZS5yb3RhdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KHBhcnNlZEluc3RhbmNlLnJvdGF0
aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2NhbGlu
ZyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0
b3IzIl0uRnJvbUFycmF5KHBhcnNlZEluc3RhbmNlLnNjYWxpbmcpOworICAgICAgICAgICAgICAg
IGlmIChwYXJzZWRJbnN0YW5jZS5jaGVja0NvbGxpc2lvbnMgIT0gdW5kZWZpbmVkICYmIHBhcnNl
ZEluc3RhbmNlLmNoZWNrQ29sbGlzaW9ucyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAg
IGluc3RhbmNlLmNoZWNrQ29sbGlzaW9ucyA9IHBhcnNlZEluc3RhbmNlLmNoZWNrQ29sbGlzaW9u
czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZEluc3RhbmNl
LnBpY2thYmxlICE9IHVuZGVmaW5lZCAmJiBwYXJzZWRJbnN0YW5jZS5waWNrYWJsZSAhPSBudWxs
KSB7CisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmlzUGlja2FibGUgPSBwYXJzZWRJbnN0
YW5jZS5waWNrYWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBh
cnNlZEluc3RhbmNlLnNob3dCb3VuZGluZ0JveCAhPSB1bmRlZmluZWQgJiYgcGFyc2VkSW5zdGFu
Y2Uuc2hvd0JvdW5kaW5nQm94ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFu
Y2Uuc2hvd0JvdW5kaW5nQm94ID0gcGFyc2VkSW5zdGFuY2Uuc2hvd0JvdW5kaW5nQm94OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5zdGFuY2Uuc2hvd1N1
Yk1lc2hlc0JvdW5kaW5nQm94ICE9IHVuZGVmaW5lZCAmJiBwYXJzZWRJbnN0YW5jZS5zaG93U3Vi
TWVzaGVzQm91bmRpbmdCb3ggIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5j
ZS5zaG93U3ViTWVzaGVzQm91bmRpbmdCb3ggPSBwYXJzZWRJbnN0YW5jZS5zaG93U3ViTWVzaGVz
Qm91bmRpbmdCb3g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwYXJz
ZWRJbnN0YW5jZS5hbHBoYUluZGV4ICE9IHVuZGVmaW5lZCAmJiBwYXJzZWRJbnN0YW5jZS5zaG93
U3ViTWVzaGVzQm91bmRpbmdCb3ggIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpbnN0
YW5jZS5hbHBoYUluZGV4ID0gcGFyc2VkSW5zdGFuY2UuYWxwaGFJbmRleDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgLy8gUGh5c2ljcworICAgICAgICAgICAgICAgIGlmIChw
YXJzZWRJbnN0YW5jZS5waHlzaWNzSW1wb3N0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgTWVz
aC5fUGh5c2ljc0ltcG9zdG9yUGFyc2VyKHNjZW5lLCBpbnN0YW5jZSwgcGFyc2VkSW5zdGFuY2Up
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBBbmltYXRpb24KKyAgICAg
ICAgICAgICAgICBpZiAocGFyc2VkSW5zdGFuY2UuYW5pbWF0aW9ucykgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKGFuaW1hdGlvbkluZGV4ID0gMDsgYW5pbWF0aW9uSW5kZXggPCBwYXJzZWRJ
bnN0YW5jZS5hbmltYXRpb25zLmxlbmd0aDsgYW5pbWF0aW9uSW5kZXgrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VkQW5pbWF0aW9uID0gcGFyc2VkSW5zdGFuY2UuYW5pbWF0aW9u
c1thbmltYXRpb25JbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxD
bGFzcyA9IF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siX1R5
cGVTdG9yZSJdLkdldENsYXNzKCJCQUJZTE9OLkFuaW1hdGlvbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGludGVybmFsQ2xhc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnN0YW5jZS5hbmltYXRpb25zLnB1c2goaW50ZXJuYWxDbGFzcy5QYXJzZShwYXJzZWRBbmlt
YXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJOb2RlIl0uUGFyc2VBbmltYXRpb25SYW5nZXMoaW5zdGFuY2UsIHBhcnNlZEluc3RhbmNlLCBz
Y2VuZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWRJbnN0YW5jZS5hdXRvQW5pbWF0
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmUuYmVnaW5BbmltYXRpb24oaW5zdGFu
Y2UsIHBhcnNlZEluc3RhbmNlLmF1dG9BbmltYXRlRnJvbSwgcGFyc2VkSW5zdGFuY2UuYXV0b0Fu
aW1hdGVUbywgcGFyc2VkSW5zdGFuY2UuYXV0b0FuaW1hdGVMb29wLCBwYXJzZWRJbnN0YW5jZS5h
dXRvQW5pbWF0ZVNwZWVkIHx8IDEuMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1lc2g7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcmliYm9uIG1lc2guIFBsZWFzZSBj
b25zaWRlciB1c2luZyB0aGUgc2FtZSBtZXRob2QgZnJvbSB0aGUgTWVzaEJ1aWxkZXIgY2xhc3Mg
aW5zdGVhZAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9wYXJh
bWV0cmljX3NoYXBlcworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhl
IG1lc2ggdG8gY3JlYXRlCisgICAgICogQHBhcmFtIHBhdGhBcnJheSBpcyBhIHJlcXVpcmVkIGFy
cmF5IG9mIHBhdGhzLCB3aGF0IGFyZSBlYWNoIGFuIGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9y
My4gVGhlIHBhdGhBcnJheSBwYXJhbWV0ZXIgZGVwaWN0cyB0aGUgcmliYm9uIGdlb21ldHJ5Lgor
ICAgICAqIEBwYXJhbSBjbG9zZUFycmF5IGNyZWF0ZXMgYSBzZWFtIGJldHdlZW4gdGhlIGZpcnN0
IGFuZCB0aGUgbGFzdCBwYXRocyBvZiB0aGUgcGF0aCBhcnJheSAoZGVmYXVsdCBpcyBmYWxzZSkK
KyAgICAgKiBAcGFyYW0gY2xvc2VQYXRoIGNyZWF0ZXMgYSBzZWFtIGJldHdlZW4gdGhlIGZpcnN0
IGFuZCB0aGUgbGFzdCBwb2ludHMgb2YgZWFjaCBwYXRoIG9mIHRoZSBwYXRoIGFycmF5CisgICAg
ICogQHBhcmFtIG9mZnNldCBpcyB0YWtlbiBpbiBhY2NvdW50IG9ubHkgaWYgdGhlIGBwYXRoQXJy
YXlgIGlzIGNvbnRhaW5pbmcgYSBzaW5nbGUgcGF0aAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZp
bmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlm
IHRoZSBtZXNoIG11c3QgYmUgZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBAcGFyYW0gc2lk
ZU9yaWVudGF0aW9uIGRlZmluZXMgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiAoaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1v
cmllbnRhdGlvbikKKyAgICAgKiBAcGFyYW0gaW5zdGFuY2UgZGVmaW5lcyBhbiBpbnN0YW5jZSBv
ZiBhbiBleGlzdGluZyBSaWJib24gb2JqZWN0IHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGUgcGFzc2Vk
IGBwYXRoQXJyYXlgIHBhcmFtZXRlciAoaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9I
b3dfdG9fZHluYW1pY2FsbHlfbW9ycGhfYV9tZXNoI3JpYmJvbikKKyAgICAgKiBAcmV0dXJucyBh
IG5ldyBNZXNoCisgICAgICovCisgICAgTWVzaC5DcmVhdGVSaWJib24gPSBmdW5jdGlvbiAobmFt
ZSwgcGF0aEFycmF5LCBjbG9zZUFycmF5LCBjbG9zZVBhdGgsIG9mZnNldCwgc2NlbmUsIHVwZGF0
YWJsZSwgc2lkZU9yaWVudGF0aW9uLCBpbnN0YW5jZSkgeworICAgICAgICB0aHJvdyBfTWlzY19k
ZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRvb2xzIl0uV2Fybklt
cG9ydCgiTWVzaEJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAgKiBDcmVhdGVzIGEg
cGxhbmUgcG9seWdvbmFsIG1lc2guICBCeSBkZWZhdWx0LCB0aGlzIGlzIGEgZGlzYy4gUGxlYXNl
IGNvbnNpZGVyIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBmcm9tIHRoZSBNZXNoQnVpbGRlciBjbGFz
cyBpbnN0ZWFkCisgICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1l
c2ggdG8gY3JlYXRlCisgICAgICAqIEBwYXJhbSByYWRpdXMgc2V0cyB0aGUgcmFkaXVzIHNpemUg
KGZsb2F0KSBvZiB0aGUgcG9seWdvbiAoZGVmYXVsdCAwLjUpCisgICAgICAqIEBwYXJhbSB0ZXNz
ZWxsYXRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIHBvbHlnb24gc2lkZXMgKHBvc2l0aXZlIGludGVn
ZXIsIGRlZmF1bHQgNjQpLiBTbyBhIHRlc3NlbGxhdGlvbiB2YWx1ZWQgdG8gMyB3aWxsIGJ1aWxk
IGEgdHJpYW5nbGUsIHRvIDQgYSBzcXVhcmUsIGV0YworICAgICAgKiBAcGFyYW0gc2NlbmUgZGVm
aW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMg
aWYgdGhlIG1lc2ggbXVzdCBiZSBmbGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAgKiBAcGFyYW0g
c2lkZU9yaWVudGF0aW9uIGRlZmluZXMgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiAoaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lk
ZS1vcmllbnRhdGlvbikKKyAgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAgKi8KKyAg
ICBNZXNoLkNyZWF0ZURpc2MgPSBmdW5jdGlvbiAobmFtZSwgcmFkaXVzLCB0ZXNzZWxsYXRpb24s
IHNjZW5lLCB1cGRhdGFibGUsIHNpZGVPcmllbnRhdGlvbikgeworICAgICAgICBpZiAoc2NlbmUg
PT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9v
bHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQo
Ik1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgYm94IG1l
c2guIFBsZWFzZSBjb25zaWRlciB1c2luZyB0aGUgc2FtZSBtZXRob2QgZnJvbSB0aGUgTWVzaEJ1
aWxkZXIgY2xhc3MgaW5zdGVhZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUg
b2YgdGhlIG1lc2ggdG8gY3JlYXRlCisgICAgICogQHBhcmFtIHNpemUgc2V0cyB0aGUgc2l6ZSAo
ZmxvYXQpIG9mIGVhY2ggYm94IHNpZGUgKGRlZmF1bHQgMSkKKyAgICAgKiBAcGFyYW0gc2NlbmUg
ZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSB1cGRhdGFibGUgZGVmaW5l
cyBpZiB0aGUgbWVzaCBtdXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlCisgICAgICogQHBhcmFt
IHNpZGVPcmllbnRhdGlvbiBkZWZpbmVzIHRoZSBtZXNoIHNpZGUgb3JpZW50YXRpb24gKGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3Np
ZGUtb3JpZW50YXRpb24pCisgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAg
IE1lc2guQ3JlYXRlQm94ID0gZnVuY3Rpb24gKG5hbWUsIHNpemUsIHNjZW5lLCB1cGRhdGFibGUs
IHNpZGVPcmllbnRhdGlvbikgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2Vu
ZSA9IG51bGw7IH0KKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgICogQ3JlYXRlcyBhIHNwaGVyZSBtZXNoLiBQbGVhc2UgY29u
c2lkZXIgdXNpbmcgdGhlIHNhbWUgbWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGlu
c3RlYWQKKyAgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaCB0
byBjcmVhdGUKKyAgICAgICogQHBhcmFtIHNlZ21lbnRzIHNldHMgdGhlIHNwaGVyZSBudW1iZXIg
b2YgaG9yaXpvbnRhbCBzdHJpcGVzIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDMyKQorICAg
ICAgKiBAcGFyYW0gZGlhbWV0ZXIgc2V0cyB0aGUgZGlhbWV0ZXIgc2l6ZSAoZmxvYXQpIG9mIHRo
ZSBzcGhlcmUgKGRlZmF1bHQgMSkKKyAgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhv
c3Rpbmcgc2NlbmUKKyAgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBtZXNo
IG11c3QgYmUgZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgICogQHBhcmFtIHNpZGVPcmllbnRh
dGlvbiBkZWZpbmVzIHRoZSBtZXNoIHNpZGUgb3JpZW50YXRpb24gKGh0dHA6Ly9kb2MuYmFieWxv
bmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50YXRp
b24pCisgICAgICAqIEByZXR1cm5zIGEgbmV3IE1lc2gKKyAgICAgICovCisgICAgTWVzaC5DcmVh
dGVTcGhlcmUgPSBmdW5jdGlvbiAobmFtZSwgc2VnbWVudHMsIGRpYW1ldGVyLCBzY2VuZSwgdXBk
YXRhYmxlLCBzaWRlT3JpZW50YXRpb24pIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIk1l
c2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgICogQ3JlYXRlcyBhIGhlbWlzcGhl
cmUgbWVzaC4gUGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBmcm9tIHRoZSBN
ZXNoQnVpbGRlciBjbGFzcyBpbnN0ZWFkCisgICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhl
IG5hbWUgb2YgdGhlIG1lc2ggdG8gY3JlYXRlCisgICAgICAqIEBwYXJhbSBzZWdtZW50cyBzZXRz
IHRoZSBzcGhlcmUgbnVtYmVyIG9mIGhvcml6b250YWwgc3RyaXBlcyAocG9zaXRpdmUgaW50ZWdl
ciwgZGVmYXVsdCAzMikKKyAgICAgICogQHBhcmFtIGRpYW1ldGVyIHNldHMgdGhlIGRpYW1ldGVy
IHNpemUgKGZsb2F0KSBvZiB0aGUgc3BoZXJlIChkZWZhdWx0IDEpCisgICAgICAqIEBwYXJhbSBz
Y2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICAqIEByZXR1cm5zIGEgbmV3IE1l
c2gKKyAgICAgICovCisgICAgTWVzaC5DcmVhdGVIZW1pc3BoZXJlID0gZnVuY3Rpb24gKG5hbWUs
IHNlZ21lbnRzLCBkaWFtZXRlciwgc2NlbmUpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9v
bHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQo
Ik1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgY3lsaW5k
ZXIgb3IgYSBjb25lIG1lc2guIFBsZWFzZSBjb25zaWRlciB1c2luZyB0aGUgc2FtZSBtZXRob2Qg
ZnJvbSB0aGUgTWVzaEJ1aWxkZXIgY2xhc3MgaW5zdGVhZAorICAgICAqIEBwYXJhbSBuYW1lIGRl
ZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2ggdG8gY3JlYXRlCisgICAgICogQHBhcmFtIGhlaWdo
dCBzZXRzIHRoZSBoZWlnaHQgc2l6ZSAoZmxvYXQpIG9mIHRoZSBjeWxpbmRlci9jb25lIChmbG9h
dCwgZGVmYXVsdCAyKQorICAgICAqIEBwYXJhbSBkaWFtZXRlclRvcCBzZXQgdGhlIHRvcCBjYXAg
ZGlhbWV0ZXIgKGZsb2F0cywgZGVmYXVsdCAxKQorICAgICAqIEBwYXJhbSBkaWFtZXRlckJvdHRv
bSBzZXQgdGhlIGJvdHRvbSBjYXAgZGlhbWV0ZXIgKGZsb2F0cywgZGVmYXVsdCAxKS4gVGhpcyB2
YWx1ZSBjYW4ndCBiZSB6ZXJvCisgICAgICogQHBhcmFtIHRlc3NlbGxhdGlvbiBzZXRzIHRoZSBu
dW1iZXIgb2YgY3lsaW5kZXIgc2lkZXMgKHBvc2l0aXZlIGludGVnZXIsIGRlZmF1bHQgMjQpLiBT
ZXQgaXQgdG8gMyB0byBnZXQgYSBwcmlzbSBmb3IgaW5zdGFuY2UKKyAgICAgKiBAcGFyYW0gc3Vi
ZGl2aXNpb25zIHNldHMgdGhlIG51bWJlciBvZiByaW5ncyBhbG9uZyB0aGUgY3lsaW5kZXIgaGVp
Z2h0IChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDEpCisgICAgICogQHBhcmFtIHNjZW5lIGRl
ZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMg
aWYgdGhlIG1lc2ggbXVzdCBiZSBmbGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBz
aWRlT3JpZW50YXRpb24gZGVmaW5lcyB0aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9uIChodHRwOi8v
ZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRl
LW9yaWVudGF0aW9uKQorICAgICAqIEByZXR1cm5zIGEgbmV3IE1lc2gKKyAgICAgKi8KKyAgICBN
ZXNoLkNyZWF0ZUN5bGluZGVyID0gZnVuY3Rpb24gKG5hbWUsIGhlaWdodCwgZGlhbWV0ZXJUb3As
IGRpYW1ldGVyQm90dG9tLCB0ZXNzZWxsYXRpb24sIHN1YmRpdmlzaW9ucywgc2NlbmUsIHVwZGF0
YWJsZSwgc2lkZU9yaWVudGF0aW9uKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJNZXNo
QnVpbGRlciIpOworICAgIH07CisgICAgLy8gVG9ydXMgIChDb2RlIGZyb20gU2hhcnBEWC5vcmcp
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHRvcnVzIG1lc2guIFBsZWFzZSBjb25zaWRlciB1
c2luZyB0aGUgc2FtZSBtZXRob2QgZnJvbSB0aGUgTWVzaEJ1aWxkZXIgY2xhc3MgaW5zdGVhZAor
ICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2ggdG8gY3JlYXRl
CisgICAgICogQHBhcmFtIGRpYW1ldGVyIHNldHMgdGhlIGRpYW1ldGVyIHNpemUgKGZsb2F0KSBv
ZiB0aGUgdG9ydXMgKGRlZmF1bHQgMSkKKyAgICAgKiBAcGFyYW0gdGhpY2tuZXNzIHNldHMgdGhl
IGRpYW1ldGVyIHNpemUgb2YgdGhlIHR1YmUgb2YgdGhlIHRvcnVzIChmbG9hdCwgZGVmYXVsdCAw
LjUpCisgICAgICogQHBhcmFtIHRlc3NlbGxhdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgdG9ydXMg
c2lkZXMgKHBvc3RpdmUgaW50ZWdlciwgZGVmYXVsdCAxNikKKyAgICAgKiBAcGFyYW0gc2NlbmUg
ZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSB1cGRhdGFibGUgZGVmaW5l
cyBpZiB0aGUgbWVzaCBtdXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlCisgICAgICogQHBhcmFt
IHNpZGVPcmllbnRhdGlvbiBkZWZpbmVzIHRoZSBtZXNoIHNpZGUgb3JpZW50YXRpb24gKGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3Np
ZGUtb3JpZW50YXRpb24pCisgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAg
IE1lc2guQ3JlYXRlVG9ydXMgPSBmdW5jdGlvbiAobmFtZSwgZGlhbWV0ZXIsIHRoaWNrbmVzcywg
dGVzc2VsbGF0aW9uLCBzY2VuZSwgdXBkYXRhYmxlLCBzaWRlT3JpZW50YXRpb24pIHsKKyAgICAg
ICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9E
ZXZUb29scyJdLldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgdG9ydXMga25vdCBtZXNoLiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhl
IHNhbWUgbWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQKKyAgICAgKiBA
cGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoIHRvIGNyZWF0ZQorICAgICAq
IEBwYXJhbSByYWRpdXMgc2V0cyB0aGUgZ2xvYmFsIHJhZGl1cyBzaXplIChmbG9hdCkgb2YgdGhl
IHRvcnVzIGtub3QgKGRlZmF1bHQgMikKKyAgICAgKiBAcGFyYW0gdHViZSBzZXRzIHRoZSBkaWFt
ZXRlciBzaXplIG9mIHRoZSB0dWJlIG9mIHRoZSB0b3J1cyAoZmxvYXQsIGRlZmF1bHQgMC41KQor
ICAgICAqIEBwYXJhbSByYWRpYWxTZWdtZW50cyBzZXRzIHRoZSBudW1iZXIgb2Ygc2lkZXMgb24g
ZWFjaCB0dWJlIHNlZ21lbnRzIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDMyKQorICAgICAq
IEBwYXJhbSB0dWJ1bGFyU2VnbWVudHMgc2V0cyB0aGUgbnVtYmVyIG9mIHR1YmVzIHRvIGRlY29t
cG9zZSB0aGUga25vdCBpbnRvIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDMyKQorICAgICAq
IEBwYXJhbSBwIHRoZSBudW1iZXIgb2Ygd2luZGluZ3Mgb24gWCBheGlzIChwb3NpdGl2ZSBpbnRl
Z2VycywgZGVmYXVsdCAyKQorICAgICAqIEBwYXJhbSBxIHRoZSBudW1iZXIgb2Ygd2luZGluZ3Mg
b24gWSBheGlzIChwb3NpdGl2ZSBpbnRlZ2VycywgZGVmYXVsdCAzKQorICAgICAqIEBwYXJhbSBz
Y2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBk
ZWZpbmVzIGlmIHRoZSBtZXNoIG11c3QgYmUgZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBA
cGFyYW0gc2lkZU9yaWVudGF0aW9uIGRlZmluZXMgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiAo
aHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVu
dHMjc2lkZS1vcmllbnRhdGlvbikKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBNZXNoCisgICAgICov
CisgICAgTWVzaC5DcmVhdGVUb3J1c0tub3QgPSBmdW5jdGlvbiAobmFtZSwgcmFkaXVzLCB0dWJl
LCByYWRpYWxTZWdtZW50cywgdHVidWxhclNlZ21lbnRzLCBwLCBxLCBzY2VuZSwgdXBkYXRhYmxl
LCBzaWRlT3JpZW50YXRpb24pIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIk1lc2hCdWls
ZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbGluZSBtZXNoLiBQbGVh
c2UgY29uc2lkZXIgdXNpbmcgdGhlIHNhbWUgbWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNs
YXNzIGluc3RlYWQuCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUg
bWVzaCB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0gcG9pbnRzIGlzIGFuIGFycmF5IHN1Y2Nlc3Np
dmUgVmVjdG9yMworICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5l
CisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBtZXNoIG11c3QgYmUgZmxh
Z2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBAcGFyYW0gaW5zdGFuY2UgaXMgYW4gaW5zdGFuY2Ug
b2YgYW4gZXhpc3RpbmcgTGluZU1lc2ggb2JqZWN0IHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGUgcGFz
c2VkIGBwb2ludHNgIHBhcmFtZXRlciAoaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9I
b3dfdG9fZHluYW1pY2FsbHlfbW9ycGhfYV9tZXNoI2xpbmVzLWFuZC1kYXNoZWRsaW5lcykuCisg
ICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAgIE1lc2guQ3JlYXRlTGluZXMg
PSBmdW5jdGlvbiAobmFtZSwgcG9pbnRzLCBzY2VuZSwgdXBkYXRhYmxlLCBpbnN0YW5jZSkgewor
ICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAg
aWYgKHVwZGF0YWJsZSA9PT0gdm9pZCAwKSB7IHVwZGF0YWJsZSA9IGZhbHNlOyB9CisgICAgICAg
IGlmIChpbnN0YW5jZSA9PT0gdm9pZCAwKSB7IGluc3RhbmNlID0gbnVsbDsgfQorICAgICAgICB0
aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRv
b2xzIl0uV2FybkltcG9ydCgiTWVzaEJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBkYXNoZWQgbGluZSBtZXNoLiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHNh
bWUgbWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQKKyAgICAgKiBAcGFy
YW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoIHRvIGNyZWF0ZQorICAgICAqIEBw
YXJhbSBwb2ludHMgaXMgYW4gYXJyYXkgc3VjY2Vzc2l2ZSBWZWN0b3IzCisgICAgICogQHBhcmFt
IGRhc2hTaXplIGlzIHRoZSBzaXplIG9mIHRoZSBkYXNoZXMgcmVsYXRpdmVseSB0aGUgZGFzaCBu
dW1iZXIgKHBvc2l0aXZlIGZsb2F0LCBkZWZhdWx0IDMpCisgICAgICogQHBhcmFtIGdhcFNpemUg
aXMgdGhlIHNpemUgb2YgdGhlIGdhcCBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGRhc2hlcyByZWxh
dGl2ZWx5IHRoZSBkYXNoIG51bWJlciAocG9zaXRpdmUgZmxvYXQsIGRlZmF1bHQgMSkKKyAgICAg
KiBAcGFyYW0gZGFzaE5iIGlzIHRoZSBpbnRlbmRlZCB0b3RhbCBudW1iZXIgb2YgZGFzaGVzIChw
b3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDIwMCkKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5l
cyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSB1cGRhdGFibGUgZGVmaW5lcyBpZiB0
aGUgbWVzaCBtdXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlCisgICAgICogQHBhcmFtIGluc3Rh
bmNlIGlzIGFuIGluc3RhbmNlIG9mIGFuIGV4aXN0aW5nIExpbmVNZXNoIG9iamVjdCB0byBiZSB1
cGRhdGVkIHdpdGggdGhlIHBhc3NlZCBgcG9pbnRzYCBwYXJhbWV0ZXIgKGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vSG93X3RvX2R5bmFtaWNhbGx5X21vcnBoX2FfbWVzaCNsaW5lcy1h
bmQtZGFzaGVkbGluZXMpCisgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAg
IE1lc2guQ3JlYXRlRGFzaGVkTGluZXMgPSBmdW5jdGlvbiAobmFtZSwgcG9pbnRzLCBkYXNoU2l6
ZSwgZ2FwU2l6ZSwgZGFzaE5iLCBzY2VuZSwgdXBkYXRhYmxlLCBpbnN0YW5jZSkgeworICAgICAg
ICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgdGhyb3cg
X01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJd
Lldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgcG9seWdvbiBtZXNoLlBsZWFzZSBjb25zaWRlciB1c2luZyB0aGUgc2FtZSBtZXRob2Qg
ZnJvbSB0aGUgTWVzaEJ1aWxkZXIgY2xhc3MgaW5zdGVhZAorICAgICAqIFRoZSBwb2x5Z29uJ3Mg
c2hhcGUgd2lsbCBkZXBlbmQgb24gdGhlIGlucHV0IHBhcmFtZXRlcnMgYW5kIGlzIGNvbnN0cnVj
dGVkIHBhcmFsbGVsIHRvIGEgZ3JvdW5kIG1lc2guCisgICAgICogVGhlIHBhcmFtZXRlciBgc2hh
cGVgIGlzIGEgcmVxdWlyZWQgYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzIHJlcHJlc2VudGlu
ZyB0aGUgY29ybmVycyBvZiB0aGUgcG9seWdvbiBpbiB0aCBYb1ogcGxhbmUsIHRoYXQgaXMgeSA9
IDAgZm9yIGFsbCB2ZWN0b3JzLgorICAgICAqIFlvdSBjYW4gc2V0IHRoZSBtZXNoIHNpZGUgb3Jp
ZW50YXRpb24gd2l0aCB0aGUgdmFsdWVzIDogTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBNZXNo
LkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lERQorICAgICAqIFRoZSBtZXNoIGNhbiBiZSBzZXQg
dG8gdXBkYXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZh
dWx0IGZhbHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdl
IG9uY2UgY3JlYXRlZC4KKyAgICAgKiBSZW1lbWJlciB5b3UgY2FuIG9ubHkgY2hhbmdlIHRoZSBz
aGFwZSBwb3NpdGlvbnMsIG5vdCB0aGVpciBudW1iZXIgd2hlbiB1cGRhdGluZyBhIHBvbHlnb24u
CisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BhcmFtZXRyaWNf
c2hhcGVzI25vbi1yZWd1bGFyLXBvbHlnb24KKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRo
ZSBuYW1lIG9mIHRoZSBtZXNoIHRvIGNyZWF0ZQorICAgICAqIEBwYXJhbSBzaGFwZSBpcyBhIHJl
cXVpcmVkIGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMyByZXByZXNlbnRpbmcgdGhlIGNvcm5l
cnMgb2YgdGhlIHBvbHlnb24gaW4gdGggWG9aIHBsYW5lLCB0aGF0IGlzIHkgPSAwIGZvciBhbGwg
dmVjdG9ycworICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisg
ICAgICogQHBhcmFtIGhvbGVzIGlzIGEgcmVxdWlyZWQgYXJyYXkgb2YgYXJyYXlzIG9mIHN1Y2Nl
c3NpdmUgVmVjdG9yMyB1c2VkIHRvIGRlZmluZXMgaG9sZXMgaW4gdGhlIHBvbHlnb24KKyAgICAg
KiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMgaWYgdGhlIG1lc2ggbXVzdCBiZSBmbGFnZ2VkIGFz
IHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBzaWRlT3JpZW50YXRpb24gZGVmaW5lcyB0aGUgbWVz
aCBzaWRlIG9yaWVudGF0aW9uIChodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9k
aXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uKQorICAgICAqIEBwYXJhbSBl
YXJjdXRJbmplY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW5qZWN0IHlvdXIgb3duIGVhcmN1dCByZWZl
cmVuY2UKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBNZXNoCisgICAgICovCisgICAgTWVzaC5DcmVh
dGVQb2x5Z29uID0gZnVuY3Rpb24gKG5hbWUsIHNoYXBlLCBzY2VuZSwgaG9sZXMsIHVwZGF0YWJs
ZSwgc2lkZU9yaWVudGF0aW9uLCBlYXJjdXRJbmplY3Rpb24pIHsKKyAgICAgICAgaWYgKGVhcmN1
dEluamVjdGlvbiA9PT0gdm9pZCAwKSB7IGVhcmN1dEluamVjdGlvbiA9IGVhcmN1dDsgfQorICAg
ICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1si
X0RldlRvb2xzIl0uV2FybkltcG9ydCgiTWVzaEJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgYW4gZXh0cnVkZWQgcG9seWdvbiBtZXNoLCB3aXRoIGRlcHRoIGluIHRo
ZSBZIGRpcmVjdGlvbi4gUGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBmcm9t
IHRoZSBNZXNoQnVpbGRlciBjbGFzcyBpbnN0ZWFkLgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by9wYXJhbWV0cmljX3NoYXBlcyNleHRydWRlZC1ub24tcmVndWxh
ci1wb2x5Z29uCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVz
aCB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0gc2hhcGUgaXMgYSByZXF1aXJlZCBhcnJheSBvZiBz
dWNjZXNzaXZlIFZlY3RvcjMgcmVwcmVzZW50aW5nIHRoZSBjb3JuZXJzIG9mIHRoZSBwb2x5Z29u
IGluIHRoIFhvWiBwbGFuZSwgdGhhdCBpcyB5ID0gMCBmb3IgYWxsIHZlY3RvcnMKKyAgICAgKiBA
cGFyYW0gZGVwdGggZGVmaW5lcyB0aGUgaGVpZ2h0IG9mIGV4dHJ1c2lvbgorICAgICAqIEBwYXJh
bSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIGhvbGVzIGlz
IGEgcmVxdWlyZWQgYXJyYXkgb2YgYXJyYXlzIG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMyB1c2VkIHRv
IGRlZmluZXMgaG9sZXMgaW4gdGhlIHBvbHlnb24KKyAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRl
ZmluZXMgaWYgdGhlIG1lc2ggbXVzdCBiZSBmbGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAqIEBw
YXJhbSBzaWRlT3JpZW50YXRpb24gZGVmaW5lcyB0aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9uICho
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50
cyNzaWRlLW9yaWVudGF0aW9uKQorICAgICAqIEBwYXJhbSBlYXJjdXRJbmplY3Rpb24gY2FuIGJl
IHVzZWQgdG8gaW5qZWN0IHlvdXIgb3duIGVhcmN1dCByZWZlcmVuY2UKKyAgICAgKiBAcmV0dXJu
cyBhIG5ldyBNZXNoCisgICAgICovCisgICAgTWVzaC5FeHRydWRlUG9seWdvbiA9IGZ1bmN0aW9u
IChuYW1lLCBzaGFwZSwgZGVwdGgsIHNjZW5lLCBob2xlcywgdXBkYXRhYmxlLCBzaWRlT3JpZW50
YXRpb24sIGVhcmN1dEluamVjdGlvbikgeworICAgICAgICBpZiAoZWFyY3V0SW5qZWN0aW9uID09
PSB2b2lkIDApIHsgZWFyY3V0SW5qZWN0aW9uID0gZWFyY3V0OyB9CisgICAgICAgIHRocm93IF9N
aXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJfRGV2VG9vbHMiXS5X
YXJuSW1wb3J0KCJNZXNoQnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRl
cyBhbiBleHRydWRlZCBzaGFwZSBtZXNoLgorICAgICAqIFRoZSBleHRydXNpb24gaXMgYSBwYXJh
bWV0cmljIHNoYXBlLiBJdCBoYXMgbm8gcHJlZGVmaW5lZCBzaGFwZS4gSXRzIGZpbmFsIHNoYXBl
IHdpbGwgZGVwZW5kIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgY29uc2lkZXIgdXNp
bmcgdGhlIHNhbWUgbWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQKKyAg
ICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFw
ZXMKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJp
Y19zaGFwZXMjZXh0cnVkZWQtc2hhcGVzCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
bmFtZSBvZiB0aGUgbWVzaCB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0gc2hhcGUgaXMgYSByZXF1
aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgYXJyYXkgZGVwaWN0cyB0aGUg
c2hhcGUgdG8gYmUgZXh0cnVkZWQgaW4gaXRzIGxvY2FsIHNwYWNlIDogdGhlIHNoYXBlIG11c3Qg
YmUgZGVzaWduZWQgaW4gdGhlIHhPeSBwbGFuZSBhbmQgd2lsbCBiZSBleHRydWRlZCBhbG9uZyB0
aGUgWiBheGlzCisgICAgICogQHBhcmFtIHBhdGggaXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNj
ZXNzaXZlIFZlY3RvcjMuIFRoaXMgaXMgdGhlIGF4aXMgY3VydmUgdGhlIHNoYXBlIGlzIGV4dHJ1
ZGVkIGFsb25nCisgICAgICogQHBhcmFtIHNjYWxlIGlzIHRoZSB2YWx1ZSB0byBzY2FsZSB0aGUg
c2hhcGUKKyAgICAgKiBAcGFyYW0gcm90YXRpb24gaXMgdGhlIGFuZ2xlIHZhbHVlIHRvIHJvdGF0
ZSB0aGUgc2hhcGUgZWFjaCBzdGVwIChlYWNoIHBhdGggcG9pbnQpLCBmcm9tIHRoZSBmb3JtZXIg
c3RlcCAoc28gcm90YXRpb24gYWRkZWQgZWFjaCBzdGVwKSBhbG9uZyB0aGUgY3VydmUKKyAgICAg
KiBAcGFyYW0gY2FwIHNldHMgdGhlIHdheSB0aGUgZXh0cnVkZWQgc2hhcGUgaXMgY2FwcGVkLiBQ
b3NzaWJsZSB2YWx1ZXMgOiBNZXNoLk5PX0NBUCAoZGVmYXVsdCksIE1lc2guQ0FQX1NUQVJULCBN
ZXNoLkNBUF9FTkQsIE1lc2guQ0FQX0FMTAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRo
ZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBt
ZXNoIG11c3QgYmUgZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBAcGFyYW0gc2lkZU9yaWVu
dGF0aW9uIGRlZmluZXMgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiAoaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRh
dGlvbikKKyAgICAgKiBAcGFyYW0gaW5zdGFuY2UgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gZXhpc3Rp
bmcgRXh0cnVkZWRTaGFwZSBvYmplY3QgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZSBwYXNzZWQgYHNo
YXBlYCwgYHBhdGhgLCBgc2NhbGVgIG9yIGByb3RhdGlvbmAgcGFyYW1ldGVycyAoaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9Ib3dfdG9fZHluYW1pY2FsbHlfbW9ycGhfYV9tZXNoI2V4
dHJ1ZGVkLXNoYXBlKQorICAgICAqIEByZXR1cm5zIGEgbmV3IE1lc2gKKyAgICAgKi8KKyAgICBN
ZXNoLkV4dHJ1ZGVTaGFwZSA9IGZ1bmN0aW9uIChuYW1lLCBzaGFwZSwgcGF0aCwgc2NhbGUsIHJv
dGF0aW9uLCBjYXAsIHNjZW5lLCB1cGRhdGFibGUsIHNpZGVPcmllbnRhdGlvbiwgaW5zdGFuY2Up
IHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAg
ICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJf
RGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJNZXNoQnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhbiBjdXN0b20gZXh0cnVkZWQgc2hhcGUgbWVzaC4KKyAgICAgKiBUaGUg
Y3VzdG9tIGV4dHJ1c2lvbiBpcyBhIHBhcmFtZXRyaWMgc2hhcGUuCisgICAgICogSXQgaGFzIG5v
IHByZWRlZmluZWQgc2hhcGUuIEl0cyBmaW5hbCBzaGFwZSB3aWxsIGRlcGVuZCBvbiB0aGUgaW5w
dXQgcGFyYW1ldGVycy4KKyAgICAgKiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHNhbWUgbWV0
aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQKKyAgICAgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjZXh0cnVkZWQtc2hh
cGVzCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaCB0byBj
cmVhdGUKKyAgICAgKiBAcGFyYW0gc2hhcGUgaXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNz
aXZlIFZlY3RvcjMuIFRoaXMgYXJyYXkgZGVwaWN0cyB0aGUgc2hhcGUgdG8gYmUgZXh0cnVkZWQg
aW4gaXRzIGxvY2FsIHNwYWNlIDogdGhlIHNoYXBlIG11c3QgYmUgZGVzaWduZWQgaW4gdGhlIHhP
eSBwbGFuZSBhbmQgd2lsbCBiZSBleHRydWRlZCBhbG9uZyB0aGUgWiBheGlzCisgICAgICogQHBh
cmFtIHBhdGggaXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMg
aXMgdGhlIGF4aXMgY3VydmUgdGhlIHNoYXBlIGlzIGV4dHJ1ZGVkIGFsb25nCisgICAgICogQHBh
cmFtIHNjYWxlRnVuY3Rpb24gaXMgYSBjdXN0b20gSmF2YXNjcmlwdCBmdW5jdGlvbiBjYWxsZWQg
b24gZWFjaCBwYXRoIHBvaW50CisgICAgICogQHBhcmFtIHJvdGF0aW9uRnVuY3Rpb24gaXMgYSBj
dXN0b20gSmF2YXNjcmlwdCBmdW5jdGlvbiBjYWxsZWQgb24gZWFjaCBwYXRoIHBvaW50CisgICAg
ICogQHBhcmFtIHJpYmJvbkNsb3NlQXJyYXkgZm9yY2VzIHRoZSBleHRydXNpb24gdW5kZXJseWlu
ZyByaWJib24gdG8gY2xvc2UgYWxsIHRoZSBwYXRocyBpbiBpdHMgYHBhdGhBcnJheWAKKyAgICAg
KiBAcGFyYW0gcmliYm9uQ2xvc2VQYXRoIGZvcmNlcyB0aGUgZXh0cnVzaW9uIHVuZGVybHlpbmcg
cmliYm9uIHRvIGNsb3NlIGl0cyBgcGF0aEFycmF5YAorICAgICAqIEBwYXJhbSBjYXAgc2V0cyB0
aGUgd2F5IHRoZSBleHRydWRlZCBzaGFwZSBpcyBjYXBwZWQuIFBvc3NpYmxlIHZhbHVlcyA6IE1l
c2guTk9fQ0FQIChkZWZhdWx0KSwgTWVzaC5DQVBfU1RBUlQsIE1lc2guQ0FQX0VORCwgTWVzaC5D
QVBfQUxMCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAg
ICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMgaWYgdGhlIG1lc2ggbXVzdCBiZSBmbGFnZ2Vk
IGFzIHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBzaWRlT3JpZW50YXRpb24gZGVmaW5lcyB0aGUg
bWVzaCBzaWRlIG9yaWVudGF0aW9uIChodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEw
MS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uKQorICAgICAqIEBwYXJh
bSBpbnN0YW5jZSBpcyBhbiBpbnN0YW5jZSBvZiBhbiBleGlzdGluZyBFeHRydWRlZFNoYXBlIG9i
amVjdCB0byBiZSB1cGRhdGVkIHdpdGggdGhlIHBhc3NlZCBgc2hhcGVgLCBgcGF0aGAsIGBzY2Fs
ZWAgb3IgYHJvdGF0aW9uYCBwYXJhbWV0ZXJzIChodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL2hvd190b19keW5hbWljYWxseV9tb3JwaF9hX21lc2gjZXh0cnVkZWQtc2hhcGUpCisgICAg
ICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAgIE1lc2guRXh0cnVkZVNoYXBlQ3Vz
dG9tID0gZnVuY3Rpb24gKG5hbWUsIHNoYXBlLCBwYXRoLCBzY2FsZUZ1bmN0aW9uLCByb3RhdGlv
bkZ1bmN0aW9uLCByaWJib25DbG9zZUFycmF5LCByaWJib25DbG9zZVBhdGgsIGNhcCwgc2NlbmUs
IHVwZGF0YWJsZSwgc2lkZU9yaWVudGF0aW9uLCBpbnN0YW5jZSkgeworICAgICAgICB0aHJvdyBf
TWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRvb2xzIl0u
V2FybkltcG9ydCgiTWVzaEJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0
ZXMgbGF0aGUgbWVzaC4KKyAgICAgKiBUaGUgbGF0aGUgaXMgYSBzaGFwZSB3aXRoIGEgc3ltZXRy
eSBheGlzIDogYSAyRCBtb2RlbCBzaGFwZSBpcyByb3RhdGVkIGFyb3VuZCB0aGlzIGF4aXMgdG8g
ZGVzaWduIHRoZSBsYXRoZS4KKyAgICAgKiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHNhbWUg
bWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQKKyAgICAgKiBAcGFyYW0g
bmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoIHRvIGNyZWF0ZQorICAgICAqIEBwYXJh
bSBzaGFwZSBpcyBhIHJlcXVpcmVkIGFycmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMy4gVGhpcyBh
cnJheSBkZXBpY3RzIHRoZSBzaGFwZSB0byBiZSByb3RhdGVkIGluIGl0cyBsb2NhbCBzcGFjZSA6
IHRoZSBzaGFwZSBtdXN0IGJlIGRlc2lnbmVkIGluIHRoZSB4T3kgcGxhbmUgYW5kIHdpbGwgYmUg
cm90YXRlZCBhcm91bmQgdGhlIFkgYXhpcy4gSXQncyB1c3VhbGx5IGEgMkQgc2hhcGUsIHNvIHRo
ZSBWZWN0b3IzIHogY29vcmRpbmF0ZXMgYXJlIG9mdGVuIHNldCB0byB6ZXJvCisgICAgICogQHBh
cmFtIHJhZGl1cyBpcyB0aGUgcmFkaXVzIHZhbHVlIG9mIHRoZSBsYXRoZQorICAgICAqIEBwYXJh
bSB0ZXNzZWxsYXRpb24gaXMgdGhlIHNpZGUgbnVtYmVyIG9mIHRoZSBsYXRoZS4KKyAgICAgKiBA
cGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSB1cGRh
dGFibGUgZGVmaW5lcyBpZiB0aGUgbWVzaCBtdXN0IGJlIGZsYWdnZWQgYXMgdXBkYXRhYmxlCisg
ICAgICogQHBhcmFtIHNpZGVPcmllbnRhdGlvbiBkZWZpbmVzIHRoZSBtZXNoIHNpZGUgb3JpZW50
YXRpb24gKGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2lj
X2VsZW1lbnRzI3NpZGUtb3JpZW50YXRpb24pCisgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAor
ICAgICAqLworICAgIE1lc2guQ3JlYXRlTGF0aGUgPSBmdW5jdGlvbiAobmFtZSwgc2hhcGUsIHJh
ZGl1cywgdGVzc2VsbGF0aW9uLCBzY2VuZSwgdXBkYXRhYmxlLCBzaWRlT3JpZW50YXRpb24pIHsK
KyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIx
X19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgcGxhbmUgbWVzaC4gUGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRo
ZSBzYW1lIG1ldGhvZCBmcm9tIHRoZSBNZXNoQnVpbGRlciBjbGFzcyBpbnN0ZWFkCisgICAgICog
QHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaCB0byBjcmVhdGUKKyAgICAg
KiBAcGFyYW0gc2l6ZSBzZXRzIHRoZSBzaXplIChmbG9hdCkgb2YgYm90aCBzaWRlcyBvZiB0aGUg
cGxhbmUgYXQgb25jZSAoZGVmYXVsdCAxKQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRo
ZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBt
ZXNoIG11c3QgYmUgZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBAcGFyYW0gc2lkZU9yaWVu
dGF0aW9uIGRlZmluZXMgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiAoaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRh
dGlvbikKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBNZXNoCisgICAgICovCisgICAgTWVzaC5DcmVh
dGVQbGFuZSA9IGZ1bmN0aW9uIChuYW1lLCBzaXplLCBzY2VuZSwgdXBkYXRhYmxlLCBzaWRlT3Jp
ZW50YXRpb24pIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgZ3JvdW5kIG1lc2guCisgICAgICogUGxl
YXNlIGNvbnNpZGVyIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBmcm9tIHRoZSBNZXNoQnVpbGRlciBj
bGFzcyBpbnN0ZWFkCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUg
bWVzaCB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0gd2lkdGggc2V0IHRoZSB3aWR0aCBvZiB0aGUg
Z3JvdW5kCisgICAgICogQHBhcmFtIGhlaWdodCBzZXQgdGhlIGhlaWdodCBvZiB0aGUgZ3JvdW5k
CisgICAgICogQHBhcmFtIHN1YmRpdmlzaW9ucyBzZXRzIHRoZSBudW1iZXIgb2Ygc3ViZGl2aXNp
b25zIHBlciBzaWRlCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2Nl
bmUKKyAgICAgKiBAcGFyYW0gdXBkYXRhYmxlIGRlZmluZXMgaWYgdGhlIG1lc2ggbXVzdCBiZSBm
bGFnZ2VkIGFzIHVwZGF0YWJsZQorICAgICAqIEByZXR1cm5zIGEgbmV3IE1lc2gKKyAgICAgKi8K
KyAgICBNZXNoLkNyZWF0ZUdyb3VuZCA9IGZ1bmN0aW9uIChuYW1lLCB3aWR0aCwgaGVpZ2h0LCBz
dWJkaXZpc2lvbnMsIHNjZW5lLCB1cGRhdGFibGUpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2
VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBv
cnQoIk1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgdGls
ZWQgZ3JvdW5kIG1lc2guCisgICAgICogUGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRoZSBzYW1lIG1l
dGhvZCBmcm9tIHRoZSBNZXNoQnVpbGRlciBjbGFzcyBpbnN0ZWFkCisgICAgICogQHBhcmFtIG5h
bWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaCB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0g
eG1pbiBzZXQgdGhlIGdyb3VuZCBtaW5pbXVtIFggY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSB6
bWluIHNldCB0aGUgZ3JvdW5kIG1pbmltdW0gWSBjb29yZGluYXRlCisgICAgICogQHBhcmFtIHht
YXggc2V0IHRoZSBncm91bmQgbWF4aW11bSBYIGNvb3JkaW5hdGUKKyAgICAgKiBAcGFyYW0gem1h
eCBzZXQgdGhlIGdyb3VuZCBtYXhpbXVtIFogY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSBzdWJk
aXZpc2lvbnMgaXMgYW4gb2JqZWN0IGB7dzogcG9zaXRpdmUgaW50ZWdlciwgaDogcG9zaXRpdmUg
aW50ZWdlcn1gIChkZWZhdWx0IGB7dzogNiwgaDogNn1gKS4gYHdgIGFuZCBgaGAgYXJlIHRoZSBu
dW1iZXJzIG9mIHN1YmRpdmlzaW9ucyBvbiB0aGUgZ3JvdW5kIHdpZHRoIGFuZCBoZWlnaHQuIEVh
Y2ggc3ViZGl2aXNpb24gaXMgY2FsbGVkIGEgdGlsZQorICAgICAqIEBwYXJhbSBwcmVjaXNpb24g
aXMgYW4gb2JqZWN0IGB7dzogcG9zaXRpdmUgaW50ZWdlciwgaDogcG9zaXRpdmUgaW50ZWdlcn1g
IChkZWZhdWx0IGB7dzogMiwgaDogMn1gKS4gYHdgIGFuZCBgaGAgYXJlIHRoZSBudW1iZXJzIG9m
IHN1YmRpdmlzaW9ucyBvbiB0aGUgZ3JvdW5kIHdpZHRoIGFuZCBoZWlnaHQgb2YgZWFjaCB0aWxl
CisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBA
cGFyYW0gdXBkYXRhYmxlIGRlZmluZXMgaWYgdGhlIG1lc2ggbXVzdCBiZSBmbGFnZ2VkIGFzIHVw
ZGF0YWJsZQorICAgICAqIEByZXR1cm5zIGEgbmV3IE1lc2gKKyAgICAgKi8KKyAgICBNZXNoLkNy
ZWF0ZVRpbGVkR3JvdW5kID0gZnVuY3Rpb24gKG5hbWUsIHhtaW4sIHptaW4sIHhtYXgsIHptYXgs
IHN1YmRpdmlzaW9ucywgcHJlY2lzaW9uLCBzY2VuZSwgdXBkYXRhYmxlKSB7CisgICAgICAgIHRo
cm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJfRGV2VG9v
bHMiXS5XYXJuSW1wb3J0KCJNZXNoQnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAgICog
Q3JlYXRlcyBhIGdyb3VuZCBtZXNoIGZyb20gYSBoZWlnaHQgbWFwLgorICAgICAqIFBsZWFzZSBj
b25zaWRlciB1c2luZyB0aGUgc2FtZSBtZXRob2QgZnJvbSB0aGUgTWVzaEJ1aWxkZXIgY2xhc3Mg
aW5zdGVhZAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEv
aGVpZ2h0X21hcAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1l
c2ggdG8gY3JlYXRlCisgICAgICogQHBhcmFtIHVybCBzZXRzIHRoZSBVUkwgb2YgdGhlIGhlaWdo
dCBtYXAgaW1hZ2UgcmVzb3VyY2UKKyAgICAgKiBAcGFyYW0gd2lkdGggc2V0IHRoZSBncm91bmQg
d2lkdGggc2l6ZQorICAgICAqIEBwYXJhbSBoZWlnaHQgc2V0IHRoZSBncm91bmQgaGVpZ2h0IHNp
emUKKyAgICAgKiBAcGFyYW0gc3ViZGl2aXNpb25zIHNldHMgdGhlIG51bWJlciBvZiBzdWJkaXZp
c2lvbiBwZXIgc2lkZQorICAgICAqIEBwYXJhbSBtaW5IZWlnaHQgaXMgdGhlIG1pbmltdW0gYWx0
aXR1ZGUgb24gdGhlIGdyb3VuZAorICAgICAqIEBwYXJhbSBtYXhIZWlnaHQgaXMgdGhlIG1heGlt
dW0gYWx0aXR1ZGUgb24gdGhlIGdyb3VuZAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRo
ZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBt
ZXNoIG11c3QgYmUgZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBAcGFyYW0gb25SZWFkeSAg
aXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkICBvbmNlIHRoZSBtZXNo
IGlzIGJ1aWx0ICh0aGUgaGVpZ2h0IG1hcCBkb3dubG9hZCBjYW4gbGFzdCBzb21lIHRpbWUpCisg
ICAgICogQHBhcmFtIGFscGhhRmlsdGVyIHdpbGwgZmlsdGVyIGFueSBkYXRhIHdoZXJlIHRoZSBh
bHBoYSBjaGFubmVsIGlzIGJlbG93IHRoaXMgdmFsdWUsIGRlZmF1bHRzIDAgKGFsbCBkYXRhIHZp
c2libGUpCisgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAgIE1lc2guQ3Jl
YXRlR3JvdW5kRnJvbUhlaWdodE1hcCA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIHdpZHRoLCBoZWln
aHQsIHN1YmRpdmlzaW9ucywgbWluSGVpZ2h0LCBtYXhIZWlnaHQsIHNjZW5lLCB1cGRhdGFibGUs
IG9uUmVhZHksIGFscGhhRmlsdGVyKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJNZXNo
QnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHR1YmUgbWVzaC4K
KyAgICAgKiBUaGUgdHViZSBpcyBhIHBhcmFtZXRyaWMgc2hhcGUuCisgICAgICogSXQgaGFzIG5v
IHByZWRlZmluZWQgc2hhcGUuIEl0cyBmaW5hbCBzaGFwZSB3aWxsIGRlcGVuZCBvbiB0aGUgaW5w
dXQgcGFyYW1ldGVycy4KKyAgICAgKiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHNhbWUgbWV0
aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQKKyAgICAgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMKKyAgICAgKiBAcGFy
YW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoIHRvIGNyZWF0ZQorICAgICAqIEBw
YXJhbSBwYXRoIGlzIGEgcmVxdWlyZWQgYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBWZWN0b3IzLiBJdCBp
cyB0aGUgY3VydmUgdXNlZCBhcyB0aGUgYXhpcyBvZiB0aGUgdHViZQorICAgICAqIEBwYXJhbSBy
YWRpdXMgc2V0cyB0aGUgdHViZSByYWRpdXMgc2l6ZQorICAgICAqIEBwYXJhbSB0ZXNzZWxsYXRp
b24gaXMgdGhlIG51bWJlciBvZiBzaWRlcyBvbiB0aGUgdHVidWxhciBzdXJmYWNlCisgICAgICog
QHBhcmFtIHJhZGl1c0Z1bmN0aW9uIGlzIGEgY3VzdG9tIGZ1bmN0aW9uLiBJZiBpdCBpcyBub3Qg
bnVsbCwgaXQgb3ZlcndyaXR0ZXMgdGhlIHBhcmFtZXRlciBgcmFkaXVzYC4gVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgb24gZWFjaCBwb2ludCBvZiB0aGUgdHViZSBwYXRoIGFuZCBpcyBwYXNzZWQg
dGhlIGluZGV4IGBpYCBvZiB0aGUgaS10aCBwb2ludCBhbmQgdGhlIGRpc3RhbmNlIG9mIHRoaXMg
cG9pbnQgZnJvbSB0aGUgZmlyc3QgcG9pbnQgb2YgdGhlIHBhdGgKKyAgICAgKiBAcGFyYW0gY2Fw
IHNldHMgdGhlIHdheSB0aGUgZXh0cnVkZWQgc2hhcGUgaXMgY2FwcGVkLiBQb3NzaWJsZSB2YWx1
ZXMgOiBNZXNoLk5PX0NBUCAoZGVmYXVsdCksIE1lc2guQ0FQX1NUQVJULCBNZXNoLkNBUF9FTkQs
IE1lc2guQ0FQX0FMTAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNj
ZW5lCisgICAgICogQHBhcmFtIHVwZGF0YWJsZSBkZWZpbmVzIGlmIHRoZSBtZXNoIG11c3QgYmUg
ZmxhZ2dlZCBhcyB1cGRhdGFibGUKKyAgICAgKiBAcGFyYW0gc2lkZU9yaWVudGF0aW9uIGRlZmlu
ZXMgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiAoaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2Jh
Ynlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRhdGlvbikKKyAgICAg
KiBAcGFyYW0gaW5zdGFuY2UgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gZXhpc3RpbmcgVHViZSBvYmpl
Y3QgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZSBwYXNzZWQgYHBhdGhBcnJheWAgcGFyYW1ldGVyICho
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL0hvd190b19keW5hbWljYWxseV9tb3JwaF9h
X21lc2gjdHViZSkKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBNZXNoCisgICAgICovCisgICAgTWVz
aC5DcmVhdGVUdWJlID0gZnVuY3Rpb24gKG5hbWUsIHBhdGgsIHJhZGl1cywgdGVzc2VsbGF0aW9u
LCByYWRpdXNGdW5jdGlvbiwgY2FwLCBzY2VuZSwgdXBkYXRhYmxlLCBzaWRlT3JpZW50YXRpb24s
IGluc3RhbmNlKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMV9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJNZXNoQnVpbGRlciIpOwor
ICAgIH07CisgICAgLyoqCisgICAgICAqIENyZWF0ZXMgYSBwb2x5aGVkcm9uIG1lc2guCisgICAg
ICAqIFBsZWFzZSBjb25zaWRlciB1c2luZyB0aGUgc2FtZSBtZXRob2QgZnJvbSB0aGUgTWVzaEJ1
aWxkZXIgY2xhc3MgaW5zdGVhZC4KKyAgICAgICogKiBUaGUgcGFyYW1ldGVyIGB0eXBlYCAocG9z
aXRpdmUgaW50ZWdlciwgbWF4IDE0LCBkZWZhdWx0IDApIHNldHMgdGhlIHBvbHloZWRyb24gdHlw
ZSB0byBidWlsZCBhbW9uZyB0aGUgMTUgZW1iYmVkZWQgdHlwZXMuIFBsZWFzZSByZWZlciB0byB0
aGUgdHlwZSBzaGVldCBpbiB0aGUgdHV0b3JpYWwgdG8gY2hvb3NlIHRoZSB3YW50ZWQgdHlwZQor
ICAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHNpemVgIChwb3NpdGl2ZSBmbG9hdCwgZGVmYXVsdCAx
KSBzZXRzIHRoZSBwb2x5Z29uIHNpemUKKyAgICAgICogKiBZb3UgY2FuIG92ZXJ3cml0ZSB0aGUg
YHNpemVgIG9uIGVhY2ggZGltZW5zaW9uIGJ1IHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGBzaXplWGAs
IGBzaXplWWAgb3IgYHNpemVaYCAocG9zaXRpdmUgZmxvYXRzLCBkZWZhdWx0IHRvIGBzaXplYCB2
YWx1ZSkKKyAgICAgICogKiBZb3UgY2FuIGJ1aWxkIG90aGVyIHBvbHloZWRyb24gdHlwZXMgdGhh
biB0aGUgMTUgZW1iYmVkZWQgb25lcyBieSBzZXR0aW5nIHRoZSBwYXJhbWV0ZXIgYGN1c3RvbWAg
KGBwb2x5aGVkcm9uT2JqZWN0YCwgZGVmYXVsdCBudWxsKS4gSWYgeW91IHNldCB0aGUgcGFyYW1l
dGVyIGBjdXN0b21gLCB0aGlzIG92ZXJ3cml0dGVzIHRoZSBwYXJhbWV0ZXIgYHR5cGVgCisgICAg
ICAqICogQSBgcG9seWhlZHJvbk9iamVjdGAgaXMgYSBmb3JtYXR0ZWQgamF2YXNjcmlwdCBvYmpl
Y3QuIFlvdSdsbCBmaW5kIGEgZnVsbCBmaWxlIHdpdGggcHJlLXNldCBwb2x5aGVkcmEgaGVyZSA6
IGh0dHBzOi8vZ2l0aHViLmNvbS9CYWJ5bG9uSlMvRXh0ZW5zaW9ucy90cmVlL21hc3Rlci9Qb2x5
aGVkcm9uCisgICAgICAqICogWW91IGNhbiBzZXQgdGhlIGNvbG9yIGFuZCB0aGUgVVYgb2YgZWFj
aCBzaWRlIG9mIHRoZSBwb2x5aGVkcm9uIHdpdGggdGhlIHBhcmFtZXRlcnMgYGZhY2VDb2xvcnNg
IChDb2xvcjQsIGRlZmF1bHQgYCgxLCAxLCAxLCAxKWApIGFuZCBmYWNlVVYgKFZlY3RvcjQsIGRl
ZmF1bHQgYCgwLCAwLCAxLCAxKWApCisgICAgICAqICogVG8gdW5kZXJzdGFuZCBob3cgdG8gc2V0
IGBmYWNlVVZgIG9yIGBmYWNlQ29sb3JzYCwgcGxlYXNlIHJlYWQgdGhpcyBieSBjb25zaWRlcmlu
ZyB0aGUgcmlnaHQgbnVtYmVyIG9mIGZhY2VzIG9mIHlvdXIgcG9seWhlZHJvbiwgaW5zdGVhZCBv
ZiBvbmx5IDYgZm9yIHRoZSBib3ggOiBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9j
cmVhdGVib3hfcGVyX2ZhY2VfdGV4dHVyZXNfYW5kX2NvbG9ycworICAgICAgKiAqIFRoZSBwYXJh
bWV0ZXIgYGZsYXRgIChib29sZWFuLCBkZWZhdWx0IHRydWUpLiBJZiBzZXQgdG8gZmFsc2UsIGl0
IGdpdmVzIHRoZSBwb2x5aGVkcm9uIGEgc2luZ2xlIGdsb2JhbCBmYWNlLCBzbyBsZXNzIHZlcnRp
Y2VzIGFuZCBzaGFyZWQgbm9ybWFscy4gSW4gdGhpcyBjYXNlLCBgZmFjZUNvbG9yc2AgYW5kIGBm
YWNlVVZgIGFyZSBpZ25vcmVkCisgICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBz
aWRlIG9yaWVudGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IE1lc2guRlJPTlRTSURFIChkZWZhdWx0
KSwgTWVzaC5CQUNLU0lERSBvciBNZXNoLkRPVUJMRVNJREUKKyAgICAgICogKiBJZiB5b3UgY3Jl
YXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhl
IHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9u
dCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBg
YmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNv
bS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50YXRpb24KKyAg
ICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFu
IHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdl
b21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAgICAgICogQHBhcmFt
IG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaCB0byBjcmVhdGUKKyAgICAgICogQHBh
cmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAor
ICAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAgKiBA
cmV0dXJucyBhIG5ldyBNZXNoCisgICAgICAqLworICAgIE1lc2guQ3JlYXRlUG9seWhlZHJvbiA9
IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkgeworICAgICAgICB0aHJvdyBfTWlzY19k
ZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRvb2xzIl0uV2Fybklt
cG9ydCgiTWVzaEJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBz
cGhlcmUgYmFzZWQgdXBvbiBhbiBpY29zYWhlZHJvbiB3aXRoIDIwIHRyaWFuZ3VsYXIgZmFjZXMg
d2hpY2ggY2FuIGJlIHN1YmRpdmlkZWQKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHJhZGl1c2Ag
c2V0cyB0aGUgcmFkaXVzIHNpemUgKGZsb2F0KSBvZiB0aGUgaWNvc3BoZXJlIChkZWZhdWx0IDEp
CisgICAgICogKiBZb3UgY2FuIHNldCBzb21lIGRpZmZlcmVudCBpY29zcGhlcmUgZGltZW5zaW9u
cywgZm9yIGluc3RhbmNlIHRvIGJ1aWxkIGFuIGVsbGlwc29pZCwgYnkgdXNpbmcgdGhlIHBhcmFt
ZXRlcnMgYHJhZGl1c1hgLCBgcmFkaXVzWWAgYW5kIGByYWRpdXNaYCAoYWxsIGJ5IGRlZmF1bHQg
aGF2ZSB0aGUgc2FtZSB2YWx1ZSB0aGFuIGByYWRpdXNgKQorICAgICAqICogVGhlIHBhcmFtZXRl
ciBgc3ViZGl2aXNpb25zYCBzZXRzIHRoZSBudW1iZXIgb2Ygc3ViZGl2aXNpb25zIChwb3N0aXZl
IGludGVnZXIsIGRlZmF1bHQgNCkuIFRoZSBtb3JlIHN1YmRpdmlzaW9ucywgdGhlIG1vcmUgZmFj
ZXMgb24gdGhlIGljb3NwaGVyZSB3aGF0ZXZlciBpdHMgc2l6ZQorICAgICAqICogVGhlIHBhcmFt
ZXRlciBgZmxhdGAgKGJvb2xlYW4sIGRlZmF1bHQgdHJ1ZSkgZ2l2ZXMgZWFjaCBzaWRlIGl0cyBv
d24gbm9ybWFscy4gU2V0IGl0IHRvIGZhbHNlIHRvIGdldCBhIHNtb290aCBjb250aW51b3VzIGxp
Z2h0IHJlZmxlY3Rpb24gb24gdGhlIHN1cmZhY2UKKyAgICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQg
dGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBNZXNoLkZST05UU0lE
RSAoZGVmYXVsdCksIE1lc2guQkFDS1NJREUgb3IgTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJ
ZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFy
dHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9u
IHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRV
VnNgIGFuZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50
YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhl
IGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50
ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAorICAgICAq
IEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0g
b3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisgICAg
ICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJu
cyBhIG5ldyBNZXNoCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3Rv
L3BvbHloZWRyYV9zaGFwZXMjaWNvc3BoZXJlCisgICAgICovCisgICAgTWVzaC5DcmVhdGVJY29T
cGhlcmUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgdGhyb3cg
X01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJd
Lldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgZGVjYWwgbWVzaC4KKyAgICAgKiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHNhbWUg
bWV0aG9kIGZyb20gdGhlIE1lc2hCdWlsZGVyIGNsYXNzIGluc3RlYWQuCisgICAgICogQSBkZWNh
bCBpcyBhIG1lc2ggdXN1YWxseSBhcHBsaWVkIGFzIGEgbW9kZWwgb250byB0aGUgc3VyZmFjZSBv
ZiBhbm90aGVyIG1lc2gKKyAgICAgKiBAcGFyYW0gbmFtZSAgZGVmaW5lcyB0aGUgbmFtZSBvZiB0
aGUgbWVzaAorICAgICAqIEBwYXJhbSBzb3VyY2VNZXNoIGRlZmluZXMgdGhlIG1lc2ggcmVjZWl2
aW5nIHRoZSBkZWNhbAorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBzZXRzIHRoZSBwb3NpdGlvbiBv
ZiB0aGUgZGVjYWwgaW4gd29ybGQgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gbm9ybWFsIHNl
dHMgdGhlIG5vcm1hbCBvZiB0aGUgbWVzaCB3aGVyZSB0aGUgZGVjYWwgaXMgYXBwbGllZCBvbnRv
IGluIHdvcmxkIGNvb3JkaW5hdGVzCisgICAgICogQHBhcmFtIHNpemUgc2V0cyB0aGUgZGVjYWwg
c2NhbGluZworICAgICAqIEBwYXJhbSBhbmdsZSBzZXRzIHRoZSBhbmdsZSB0byByb3RhdGUgdGhl
IGRlY2FsCisgICAgICogQHJldHVybnMgYSBuZXcgTWVzaAorICAgICAqLworICAgIE1lc2guQ3Jl
YXRlRGVjYWwgPSBmdW5jdGlvbiAobmFtZSwgc291cmNlTWVzaCwgcG9zaXRpb24sIG5vcm1hbCwg
c2l6ZSwgYW5nbGUpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIxX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIk1lc2hCdWlsZGVyIik7
CisgICAgfTsKKyAgICAvLyBTa2VsZXRvbnMKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlIGludGVy
bmFsIHBvc2l0aW9uIGFycmF5IGZvciBzb2Z0d2FyZSBDUFUgc2tpbm5pbmcKKyAgICAgKiBAcmV0
dXJucyBvcmlnaW5hbCBwb3NpdGlvbnMgdXNlZCBmb3IgQ1BVIHNraW5uaW5nLiBVc2VmdWwgZm9y
IGludGVncmF0aW5nIE1vcnBoaW5nIHdpdGggc2tlbGV0b25zIGluIHNhbWUgbWVzaAorICAgICAq
LworICAgIE1lc2gucHJvdG90eXBlLnNldFBvc2l0aW9uc0ZvckNQVVNraW5uaW5nID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB2YXIgaW50ZXJuYWxEYXRhSW5mbyA9IHRoaXMuX2ludGVybmFsTWVz
aERhdGFJbmZvOworICAgICAgICBpZiAoIWludGVybmFsRGF0YUluZm8uX3NvdXJjZVBvc2l0aW9u
cykgeworICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25L
aW5kKTsKKyAgICAgICAgICAgIGlmICghc291cmNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGludGVybmFsRGF0YUluZm8uX3NvdXJjZVBvc2l0aW9uczsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGludGVybmFsRGF0YUluZm8uX3NvdXJjZVBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJy
YXkoc291cmNlKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5pc1ZlcnRleEJ1ZmZlclVwZGF0YWJs
ZShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLlBv
c2l0aW9uS2luZCkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNldFZlcnRpY2VzRGF0YShfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9u
S2luZCwgc291cmNlLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gaW50ZXJuYWxEYXRhSW5mby5fc291cmNlUG9zaXRpb25zOworICAgIH07CisgICAgLyoq
CisgICAgICogUHJlcGFyZSBpbnRlcm5hbCBub3JtYWwgYXJyYXkgZm9yIHNvZnR3YXJlIENQVSBz
a2lubmluZworICAgICAqIEByZXR1cm5zIG9yaWdpbmFsIG5vcm1hbHMgdXNlZCBmb3IgQ1BVIHNr
aW5uaW5nLiBVc2VmdWwgZm9yIGludGVncmF0aW5nIE1vcnBoaW5nIHdpdGggc2tlbGV0b25zIGlu
IHNhbWUgbWVzaC4KKyAgICAgKi8KKyAgICBNZXNoLnByb3RvdHlwZS5zZXROb3JtYWxzRm9yQ1BV
U2tpbm5pbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpbnRlcm5hbERhdGFJbmZvID0g
dGhpcy5faW50ZXJuYWxNZXNoRGF0YUluZm87CisgICAgICAgIGlmICghaW50ZXJuYWxEYXRhSW5m
by5fc291cmNlTm9ybWFscykgeworICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMuZ2V0VmVy
dGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVm
ZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAgICAgICBpZiAoIXNvdXJjZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBpbnRlcm5hbERhdGFJbmZvLl9zb3VyY2VOb3JtYWxzOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaW50ZXJuYWxEYXRhSW5mby5fc291cmNlTm9ybWFscyA9IG5ldyBG
bG9hdDMyQXJyYXkoc291cmNlKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5pc1ZlcnRleEJ1ZmZl
clVwZGF0YWJsZShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1
ZmZlciJdLk5vcm1hbEtpbmQpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zZXRWZXJ0aWNlc0Rh
dGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5O
b3JtYWxLaW5kLCBzb3VyY2UsIHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBpbnRlcm5hbERhdGFJbmZvLl9zb3VyY2VOb3JtYWxzOworICAgIH07CisgICAg
LyoqCisgICAgICogVXBkYXRlcyB0aGUgdmVydGV4IGJ1ZmZlciBieSBhcHBseWluZyB0cmFuc2Zv
cm1hdGlvbiBmcm9tIHRoZSBib25lcworICAgICAqIEBwYXJhbSBza2VsZXRvbiBkZWZpbmVzIHRo
ZSBza2VsZXRvbiB0byBhcHBseSB0byBjdXJyZW50IG1lc2gKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y3VycmVudCBtZXNoCisgICAgICovCisgICAgTWVzaC5wcm90b3R5cGUuYXBwbHlTa2VsZXRvbiA9
IGZ1bmN0aW9uIChza2VsZXRvbikgeworICAgICAgICBpZiAoIXRoaXMuZ2VvbWV0cnkpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmdlb21l
dHJ5Ll9zb2Z0d2FyZVNraW5uaW5nRnJhbWVJZCA9PSB0aGlzLmdldFNjZW5lKCkuZ2V0RnJhbWVJ
ZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Lmdlb21ldHJ5Ll9zb2Z0d2FyZVNraW5uaW5nRnJhbWVJZCA9IHRoaXMuZ2V0U2NlbmUoKS5nZXRG
cmFtZUlkKCk7CisgICAgICAgIGlmICghdGhpcy5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktp
bmQpKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IXRoaXMuaXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCkpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5pc1ZlcnRpY2VzRGF0YVByZXNl
bnQoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5N
YXRyaWNlc0luZGljZXNLaW5kKSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCF0aGlzLmlzVmVydGljZXNEYXRhUHJlc2VudChfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tp
bmQpKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB2YXIg
aW50ZXJuYWxEYXRhSW5mbyA9IHRoaXMuX2ludGVybmFsTWVzaERhdGFJbmZvOworICAgICAgICBp
ZiAoIWludGVybmFsRGF0YUluZm8uX3NvdXJjZVBvc2l0aW9ucykgeworICAgICAgICAgICAgdmFy
IHN1Ym1lc2hlcyA9IHRoaXMuc3ViTWVzaGVzLnNsaWNlKCk7CisgICAgICAgICAgICB0aGlzLnNl
dFBvc2l0aW9uc0ZvckNQVVNraW5uaW5nKCk7CisgICAgICAgICAgICB0aGlzLnN1Yk1lc2hlcyA9
IHN1Ym1lc2hlczsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWludGVybmFsRGF0YUluZm8uX3Nv
dXJjZU5vcm1hbHMpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0Tm9ybWFsc0ZvckNQVVNraW5uaW5n
KCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gcG9zaXRpb25zRGF0YSBjaGVja3MgZm9yIG5vdCBi
ZWluZyBGbG9hdDMyQXJyYXkgd2lsbCBvbmx5IHBhc3MgYXQgbW9zdCBvbmNlCisgICAgICAgIHZh
ciBwb3NpdGlvbnNEYXRhID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpOworICAgICAg
ICBpZiAoIXBvc2l0aW9uc0RhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICB9CisgICAgICAgIGlmICghKHBvc2l0aW9uc0RhdGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkp
KSB7CisgICAgICAgICAgICBwb3NpdGlvbnNEYXRhID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlv
bnNEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAvLyBub3JtYWxzRGF0YSBjaGVja3MgZm9yIG5v
dCBiZWluZyBGbG9hdDMyQXJyYXkgd2lsbCBvbmx5IHBhc3MgYXQgbW9zdCBvbmNlCisgICAgICAg
IHZhciBub3JtYWxzRGF0YSA9IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAg
IGlmICghbm9ybWFsc0RhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9
CisgICAgICAgIGlmICghKG5vcm1hbHNEYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSkgewor
ICAgICAgICAgICAgbm9ybWFsc0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KG5vcm1hbHNEYXRhKTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgbWF0cmljZXNJbmRpY2VzRGF0YSA9IHRoaXMuZ2V0VmVy
dGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVmVydGV4QnVm
ZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCk7CisgICAgICAgIHZhciBtYXRyaWNlc1dlaWdodHNE
YXRhID0gdGhpcy5nZXRWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKTsKKyAgICAgICAgaWYg
KCFtYXRyaWNlc1dlaWdodHNEYXRhIHx8ICFtYXRyaWNlc0luZGljZXNEYXRhKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB2YXIgbmVlZEV4dHJhcyA9IHRo
aXMubnVtQm9uZUluZmx1ZW5jZXJzID4gNDsKKyAgICAgICAgdmFyIG1hdHJpY2VzSW5kaWNlc0V4
dHJhRGF0YSA9IG5lZWRFeHRyYXMgPyB0aGlzLmdldFZlcnRpY2VzRGF0YShfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0V4
dHJhS2luZCkgOiBudWxsOworICAgICAgICB2YXIgbWF0cmljZXNXZWlnaHRzRXh0cmFEYXRhID0g
bmVlZEV4dHJhcyA/IHRoaXMuZ2V0VmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzRXh0cmFLaW5kKSA6
IG51bGw7CisgICAgICAgIHZhciBza2VsZXRvbk1hdHJpY2VzID0gc2tlbGV0b24uZ2V0VHJhbnNm
b3JtTWF0cmljZXModGhpcyk7CisgICAgICAgIHZhciB0ZW1wVmVjdG9yMyA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICB2YXIgZmluYWxNYXRyaXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIk1hdHJpeCJdKCk7CisgICAgICAgIHZhciB0ZW1wTWF0cml4
ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJN
YXRyaXgiXSgpOworICAgICAgICB2YXIgbWF0V2VpZ2h0SWR4ID0gMDsKKyAgICAgICAgdmFyIGlu
ZjsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHBvc2l0aW9uc0RhdGEubGVu
Z3RoOyBpbmRleCArPSAzLCBtYXRXZWlnaHRJZHggKz0gNCkgeworICAgICAgICAgICAgdmFyIHdl
aWdodDsKKyAgICAgICAgICAgIGZvciAoaW5mID0gMDsgaW5mIDwgNDsgaW5mKyspIHsKKyAgICAg
ICAgICAgICAgICB3ZWlnaHQgPSBtYXRyaWNlc1dlaWdodHNEYXRhW21hdFdlaWdodElkeCArIGlu
Zl07CisgICAgICAgICAgICAgICAgaWYgKHdlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1hdHJp
eCJdLkZyb21GbG9hdDMyQXJyYXlUb1JlZlNjYWxlZChza2VsZXRvbk1hdHJpY2VzLCBNYXRoLmZs
b29yKG1hdHJpY2VzSW5kaWNlc0RhdGFbbWF0V2VpZ2h0SWR4ICsgaW5mXSAqIDE2KSwgd2VpZ2h0
LCB0ZW1wTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWxNYXRyaXguYWRkVG9TZWxm
KHRlbXBNYXRyaXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChuZWVkRXh0cmFzKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbmYgPSAwOyBpbmYg
PCA0OyBpbmYrKykgeworICAgICAgICAgICAgICAgICAgICB3ZWlnaHQgPSBtYXRyaWNlc1dlaWdo
dHNFeHRyYURhdGFbbWF0V2VpZ2h0SWR4ICsgaW5mXTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHdlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRyaXgiXS5Gcm9tRmxvYXQzMkFycmF5
VG9SZWZTY2FsZWQoc2tlbGV0b25NYXRyaWNlcywgTWF0aC5mbG9vcihtYXRyaWNlc0luZGljZXNF
eHRyYURhdGFbbWF0V2VpZ2h0SWR4ICsgaW5mXSAqIDE2KSwgd2VpZ2h0LCB0ZW1wTWF0cml4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsTWF0cml4LmFkZFRvU2VsZih0ZW1wTWF0cml4
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNGcm9tRmxvYXRzVG9SZWYoaW50
ZXJuYWxEYXRhSW5mby5fc291cmNlUG9zaXRpb25zW2luZGV4XSwgaW50ZXJuYWxEYXRhSW5mby5f
c291cmNlUG9zaXRpb25zW2luZGV4ICsgMV0sIGludGVybmFsRGF0YUluZm8uX3NvdXJjZVBvc2l0
aW9uc1tpbmRleCArIDJdLCBmaW5hbE1hdHJpeCwgdGVtcFZlY3RvcjMpOworICAgICAgICAgICAg
dGVtcFZlY3RvcjMudG9BcnJheShwb3NpdGlvbnNEYXRhLCBpbmRleCk7CisgICAgICAgICAgICBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJd
LlRyYW5zZm9ybU5vcm1hbEZyb21GbG9hdHNUb1JlZihpbnRlcm5hbERhdGFJbmZvLl9zb3VyY2VO
b3JtYWxzW2luZGV4XSwgaW50ZXJuYWxEYXRhSW5mby5fc291cmNlTm9ybWFsc1tpbmRleCArIDFd
LCBpbnRlcm5hbERhdGFJbmZvLl9zb3VyY2VOb3JtYWxzW2luZGV4ICsgMl0sIGZpbmFsTWF0cml4
LCB0ZW1wVmVjdG9yMyk7CisgICAgICAgICAgICB0ZW1wVmVjdG9yMy50b0FycmF5KG5vcm1hbHNE
YXRhLCBpbmRleCk7CisgICAgICAgICAgICBmaW5hbE1hdHJpeC5yZXNldCgpOworICAgICAgICB9
CisgICAgICAgIHRoaXMudXBkYXRlVmVydGljZXNEYXRhKF9idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kLCBwb3NpdGlvbnNEYXRh
KTsKKyAgICAgICAgdGhpcy51cGRhdGVWZXJ0aWNlc0RhdGEoX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBub3JtYWxzRGF0YSk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLy8gVG9vbHMKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIGEgbWluIGFuZCBtYXggVmVjdG9yMyB3
aGljaCBhcmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmVjdG9ycyBvZiBlYWNoIG1lc2ggYm91
bmRpbmcgYm94IGZyb20gdGhlIHBhc3NlZCBhcnJheSwgaW4gdGhlIHdvcmxkIGNvb3JkaW5hdGVz
CisgICAgICogQHBhcmFtIG1lc2hlcyBkZWZpbmVzIHRoZSBsaXN0IG9mIG1lc2hlcyB0byBzY2Fu
CisgICAgICogQHJldHVybnMgYW4gb2JqZWN0IGB7bWluOmAgVmVjdG9yM2AsIG1heDpgIFZlY3Rv
cjNgfWAKKyAgICAgKi8KKyAgICBNZXNoLk1pbk1heCA9IGZ1bmN0aW9uIChtZXNoZXMpIHsKKyAg
ICAgICAgdmFyIG1pblZlY3RvciA9IG51bGw7CisgICAgICAgIHZhciBtYXhWZWN0b3IgPSBudWxs
OworICAgICAgICBtZXNoZXMuZm9yRWFjaChmdW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAg
dmFyIGJvdW5kaW5nSW5mbyA9IG1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICB2
YXIgYm91bmRpbmdCb3ggPSBib3VuZGluZ0luZm8uYm91bmRpbmdCb3g7CisgICAgICAgICAgICBp
ZiAoIW1pblZlY3RvciB8fCAhbWF4VmVjdG9yKSB7CisgICAgICAgICAgICAgICAgbWluVmVjdG9y
ID0gYm91bmRpbmdCb3gubWluaW11bVdvcmxkOworICAgICAgICAgICAgICAgIG1heFZlY3RvciA9
IGJvdW5kaW5nQm94Lm1heGltdW1Xb3JsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIG1pblZlY3Rvci5taW5pbWl6ZUluUGxhY2UoYm91bmRpbmdC
b3gubWluaW11bVdvcmxkKTsKKyAgICAgICAgICAgICAgICBtYXhWZWN0b3IubWF4aW1pemVJblBs
YWNlKGJvdW5kaW5nQm94Lm1heGltdW1Xb3JsZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgICAgICBpZiAoIW1pblZlY3RvciB8fCAhbWF4VmVjdG9yKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIG1pbjogX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXS5aZXJvKCksCisgICAgICAgICAgICAgICAg
bWF4OiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVj
dG9yMyJdLlplcm8oKQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgbWluOiBtaW5WZWN0b3IsCisgICAgICAgICAgICBtYXg6IG1heFZlY3Rv
cgorICAgICAgICB9OworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY2VudGVy
IG9mIHRoZSBge21pbjpgIFZlY3RvcjNgLCBtYXg6YCBWZWN0b3IzYH1gIG9yIHRoZSBjZW50ZXIg
b2YgTWluTWF4IHZlY3RvcjMgY29tcHV0ZWQgZnJvbSBhIG1lc2ggYXJyYXkKKyAgICAgKiBAcGFy
YW0gbWVzaGVzT3JNaW5NYXhWZWN0b3IgY291bGQgYmUgYW4gYXJyYXkgb2YgbWVzaGVzIG9yIGEg
YHttaW46YCBWZWN0b3IzYCwgbWF4OmAgVmVjdG9yM2B9YCBvYmplY3QKKyAgICAgKiBAcmV0dXJu
cyBhIHZlY3RvcjMKKyAgICAgKi8KKyAgICBNZXNoLkNlbnRlciA9IGZ1bmN0aW9uIChtZXNoZXNP
ck1pbk1heFZlY3RvcikgeworICAgICAgICB2YXIgbWluTWF4VmVjdG9yID0gKG1lc2hlc09yTWlu
TWF4VmVjdG9yIGluc3RhbmNlb2YgQXJyYXkpID8gTWVzaC5NaW5NYXgobWVzaGVzT3JNaW5NYXhW
ZWN0b3IpIDogbWVzaGVzT3JNaW5NYXhWZWN0b3I7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVjdG9yMyJdLkNlbnRlciht
aW5NYXhWZWN0b3IubWluLCBtaW5NYXhWZWN0b3IubWF4KTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIE1lcmdlIHRoZSBhcnJheSBvZiBtZXNoZXMgaW50byBhIHNpbmdsZSBtZXNoIGZvciBwZXJm
b3JtYW5jZSByZWFzb25zLgorICAgICAqIEBwYXJhbSBtZXNoZXMgZGVmaW5lcyBoZSB2ZXJ0aWNl
cyBzb3VyY2UuICBUaGV5IHNob3VsZCBhbGwgYmUgb2YgdGhlIHNhbWUgbWF0ZXJpYWwuICBFbnRy
aWVzIGNhbiBlbXB0eQorICAgICAqIEBwYXJhbSBkaXNwb3NlU291cmNlIHdoZW4gdHJ1ZSAoZGVm
YXVsdCksIGRpc3Bvc2Ugb2YgdGhlIHZlcnRpY2VzIGZyb20gdGhlIHNvdXJjZSBtZXNoZXMKKyAg
ICAgKiBAcGFyYW0gYWxsb3czMkJpdHNJbmRpY2VzIHdoZW4gdGhlIHN1bSBvZiB0aGUgdmVydGlj
ZXMgPiA2NGssIHRoaXMgbXVzdCBiZSBzZXQgdG8gdHJ1ZQorICAgICAqIEBwYXJhbSBtZXNoU3Vi
Y2xhc3Mgd2hlbiBzZXQsIHZlcnRpY2VzIGluc2VydGVkIGludG8gdGhpcyBNZXNoLiAgTWVzaGVz
IGNhbiB0aGVuIGJlIG1lcmdlZCBpbnRvIGEgTWVzaCBzdWItY2xhc3MuCisgICAgICogQHBhcmFt
IHN1YmRpdmlkZVdpdGhTdWJNZXNoZXMgd2hlbiB0cnVlIChmYWxzZSBkZWZhdWx0KSwgc3ViZGl2
aWRlIG1lc2ggdG8gaGlzIHN1Yk1lc2ggYXJyYXkgd2l0aCBtZXNoZXMgc291cmNlLgorICAgICAq
IEBwYXJhbSBtdWx0aU11bHRpTWF0ZXJpYWxzIHdoZW4gdHJ1ZSAoZmFsc2UgZGVmYXVsdCksIHN1
YmRpdmlkZSBtZXNoIGFuZCBhY2NlcHQgbXVsdGlwbGUgbXVsdGkgbWF0ZXJpYWxzLCBpZ25vcmVz
IHN1YmRpdmlkZVdpdGhTdWJNZXNoZXMuCisgICAgICogQHJldHVybnMgYSBuZXcgbWVzaAorICAg
ICAqLworICAgIE1lc2guTWVyZ2VNZXNoZXMgPSBmdW5jdGlvbiAobWVzaGVzLCBkaXNwb3NlU291
cmNlLCBhbGxvdzMyQml0c0luZGljZXMsIG1lc2hTdWJjbGFzcywgc3ViZGl2aWRlV2l0aFN1Yk1l
c2hlcywgbXVsdGlNdWx0aU1hdGVyaWFscykgeworICAgICAgICBpZiAoZGlzcG9zZVNvdXJjZSA9
PT0gdm9pZCAwKSB7IGRpc3Bvc2VTb3VyY2UgPSB0cnVlOyB9CisgICAgICAgIHZhciBpbmRleDsK
KyAgICAgICAgaWYgKCFhbGxvdzMyQml0c0luZGljZXMpIHsKKyAgICAgICAgICAgIHZhciB0b3Rh
bFZlcnRpY2VzID0gMDsKKyAgICAgICAgICAgIC8vIENvdW50aW5nIHZlcnRpY2VzCisgICAgICAg
ICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1lc2hlc1tpbmRleF0pIHsKKyAgICAgICAgICAgICAgICAgICAg
dG90YWxWZXJ0aWNlcyArPSBtZXNoZXNbaW5kZXhdLmdldFRvdGFsVmVydGljZXMoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRvdGFsVmVydGljZXMgPj0gNjU1MzYpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1si
TG9nZ2VyIl0uV2FybigiQ2Fubm90IG1lcmdlIG1lc2hlcyBiZWNhdXNlIHJlc3VsdGluZyBtZXNo
IHdpbGwgaGF2ZSBtb3JlIHRoYW4gNjU1MzYgdmVydGljZXMuIFBsZWFzZSB1c2UgYWxsb3czMkJp
dHNJbmRpY2VzID0gdHJ1ZSB0byB1c2UgMzIgYml0cyBpbmRpY2VzIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobXVsdGlNdWx0
aU1hdGVyaWFscykgeworICAgICAgICAgICAgdmFyIG5ld011bHRpTWF0ZXJpYWwgPSBudWxsOwor
ICAgICAgICAgICAgdmFyIHN1YkluZGV4OworICAgICAgICAgICAgdmFyIG1hdEluZGV4OworICAg
ICAgICAgICAgc3ViZGl2aWRlV2l0aFN1Yk1lc2hlcyA9IGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHZhciBtYXRlcmlhbEFycmF5ID0gbmV3IEFycmF5KCk7CisgICAgICAgIHZhciBtYXRlcmlh
bEluZGV4QXJyYXkgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLy8gTWVyZ2UKKyAgICAgICAgdmFy
IHZlcnRleERhdGEgPSBudWxsOworICAgICAgICB2YXIgb3RoZXJWZXJ0ZXhEYXRhOworICAgICAg
ICB2YXIgaW5kaWNlQXJyYXkgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdmFyIHNvdXJjZSA9IG51
bGw7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1lc2hlcy5sZW5ndGg7IGluZGV4
KyspIHsKKyAgICAgICAgICAgIGlmIChtZXNoZXNbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAg
dmFyIG1lc2ggPSBtZXNoZXNbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChtZXNoLmlzQW5J
bnN0YW5jZSkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE5X19bIkxvZ2dlciJdLldhcm4oIkNhbm5vdCBtZXJnZSBpbnN0YW5jZSBt
ZXNoZXMuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgd20gPSBtZXNoLmNvbXB1dGVXb3JsZE1hdHJpeCh0
cnVlKTsKKyAgICAgICAgICAgICAgICBvdGhlclZlcnRleERhdGEgPSBfbWVzaF92ZXJ0ZXhEYXRh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlZlcnRleERhdGEiXS5FeHRyYWN0RnJvbU1l
c2gobWVzaCwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgb3RoZXJWZXJ0ZXhEYXRhLnRy
YW5zZm9ybSh3bSk7CisgICAgICAgICAgICAgICAgaWYgKHZlcnRleERhdGEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmVydGV4RGF0YS5tZXJnZShvdGhlclZlcnRleERhdGEsIGFsbG93MzJCaXRz
SW5kaWNlcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICB2ZXJ0ZXhEYXRhID0gb3RoZXJWZXJ0ZXhEYXRhOworICAgICAgICAg
ICAgICAgICAgICBzb3VyY2UgPSBtZXNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoc3ViZGl2aWRlV2l0aFN1Yk1lc2hlcykgeworICAgICAgICAgICAgICAgICAgICBp
bmRpY2VBcnJheS5wdXNoKG1lc2guZ2V0VG90YWxJbmRpY2VzKCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAobXVsdGlNdWx0aU1hdGVyaWFscykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtYXRlcmlhbCBpbnN0YW5jZW9mIF9NYXRlcmlhbHNfbXVsdGlNYXRlcmlhbF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTVfX1siTXVsdGlNYXRlcmlhbCJdKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChtYXRJbmRleCA9IDA7IG1hdEluZGV4IDwgbWF0ZXJpYWwuc3ViTWF0
ZXJpYWxzLmxlbmd0aDsgbWF0SW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobWF0ZXJpYWxBcnJheS5pbmRleE9mKG1hdGVyaWFsLnN1Yk1hdGVyaWFsc1ttYXRJ
bmRleF0pIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJp
YWxBcnJheS5wdXNoKG1hdGVyaWFsLnN1Yk1hdGVyaWFsc1ttYXRJbmRleF0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3ViSW5kZXggPSAwOyBzdWJJbmRleCA8
IG1lc2guc3ViTWVzaGVzLmxlbmd0aDsgc3ViSW5kZXgrKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRlcmlhbEluZGV4QXJyYXkucHVzaChtYXRlcmlhbEFycmF5LmluZGV4
T2YobWF0ZXJpYWwuc3ViTWF0ZXJpYWxzW21lc2guc3ViTWVzaGVzW3N1YkluZGV4XS5tYXRlcmlh
bEluZGV4XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VBcnJheS5w
dXNoKG1lc2guc3ViTWVzaGVzW3N1YkluZGV4XS5pbmRleENvdW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0ZXJp
YWxBcnJheS5pbmRleE9mKG1hdGVyaWFsKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0ZXJpYWxBcnJheS5wdXNoKG1hdGVyaWFsKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzdWJJbmRleCA9
IDA7IHN1YkluZGV4IDwgbWVzaC5zdWJNZXNoZXMubGVuZ3RoOyBzdWJJbmRleCsrKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsSW5kZXhBcnJheS5wdXNoKG1hdGVy
aWFsQXJyYXkuaW5kZXhPZihtYXRlcmlhbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRpY2VBcnJheS5wdXNoKG1lc2guc3ViTWVzaGVzW3N1YkluZGV4XS5pbmRleENvdW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN1YkluZGV4ID0gMDsgc3ViSW5kZXggPCBtZXNo
LnN1Yk1lc2hlcy5sZW5ndGg7IHN1YkluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRlcmlhbEluZGV4QXJyYXkucHVzaCgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRpY2VBcnJheS5wdXNoKG1lc2guc3ViTWVzaGVzW3N1YkluZGV4XS5pbmRleENvdW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzb3VyY2Ug
PSBzb3VyY2U7CisgICAgICAgIGlmICghbWVzaFN1YmNsYXNzKSB7CisgICAgICAgICAgICBtZXNo
U3ViY2xhc3MgPSBuZXcgTWVzaChzb3VyY2UubmFtZSArICJfbWVyZ2VkIiwgc291cmNlLmdldFNj
ZW5lKCkpOworICAgICAgICB9CisgICAgICAgIHZlcnRleERhdGEuYXBwbHlUb01lc2gobWVzaFN1
YmNsYXNzKTsKKyAgICAgICAgLy8gU2V0dGluZyBwcm9wZXJ0aWVzCisgICAgICAgIG1lc2hTdWJj
bGFzcy5jaGVja0NvbGxpc2lvbnMgPSBzb3VyY2UuY2hlY2tDb2xsaXNpb25zOworICAgICAgICAv
LyBDbGVhbmluZworICAgICAgICBpZiAoZGlzcG9zZVNvdXJjZSkgeworICAgICAgICAgICAgZm9y
IChpbmRleCA9IDA7IGluZGV4IDwgbWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgICAgIGlmIChtZXNoZXNbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAgICAgIG1lc2hlc1tp
bmRleF0uZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAvLyBTdWJkaXZpZGUKKyAgICAgICAgaWYgKHN1YmRpdmlkZVdpdGhTdWJN
ZXNoZXMgfHwgbXVsdGlNdWx0aU1hdGVyaWFscykgeworICAgICAgICAgICAgLy8tLSByZW1vdmFs
IG9mIGdsb2JhbCBzdWJtZXNoCisgICAgICAgICAgICBtZXNoU3ViY2xhc3MucmVsZWFzZVN1Yk1l
c2hlcygpOworICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICAgICAgdmFyIG9mZnNldCA9
IDA7CisgICAgICAgICAgICAvLy0tIGFwcGx5IHN1YmRpdmlzaW9uIGFjY29yZGluZyB0byBpbmRl
eCB0YWJsZQorICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgaW5kaWNlQXJyYXkubGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgX3N1Yk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19b
IlN1Yk1lc2giXS5DcmVhdGVGcm9tSW5kaWNlcygwLCBvZmZzZXQsIGluZGljZUFycmF5W2luZGV4
XSwgbWVzaFN1YmNsYXNzKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gaW5kaWNlQXJyYXlb
aW5kZXhdOworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG11bHRpTXVsdGlNYXRlcmlhbHMpIHsKKyAgICAgICAgICAgIG5ld011
bHRpTWF0ZXJpYWwgPSBuZXcgX01hdGVyaWFsc19tdWx0aU1hdGVyaWFsX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xNV9fWyJNdWx0aU1hdGVyaWFsIl0oc291cmNlLm5hbWUgKyAiX21lcmdlZCIs
IHNvdXJjZS5nZXRTY2VuZSgpKTsKKyAgICAgICAgICAgIG5ld011bHRpTWF0ZXJpYWwuc3ViTWF0
ZXJpYWxzID0gbWF0ZXJpYWxBcnJheTsKKyAgICAgICAgICAgIGZvciAoc3ViSW5kZXggPSAwOyBz
dWJJbmRleCA8IG1lc2hTdWJjbGFzcy5zdWJNZXNoZXMubGVuZ3RoOyBzdWJJbmRleCsrKSB7Cisg
ICAgICAgICAgICAgICAgbWVzaFN1YmNsYXNzLnN1Yk1lc2hlc1tzdWJJbmRleF0ubWF0ZXJpYWxJ
bmRleCA9IG1hdGVyaWFsSW5kZXhBcnJheVtzdWJJbmRleF07CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtZXNoU3ViY2xhc3MubWF0ZXJpYWwgPSBuZXdNdWx0aU1hdGVyaWFsOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWVzaFN1YmNsYXNzLm1hdGVyaWFsID0g
c291cmNlLm1hdGVyaWFsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtZXNoU3ViY2xhc3M7
CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE1lc2gucHJvdG90eXBlLmFkZEluc3Rh
bmNlID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7CisgICAgICAgIGluc3RhbmNlLl9pbmRleEluU291
cmNlTWVzaEluc3RhbmNlQXJyYXkgPSB0aGlzLmluc3RhbmNlcy5sZW5ndGg7CisgICAgICAgIHRo
aXMuaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBNZXNoLnByb3RvdHlwZS5yZW1vdmVJbnN0YW5jZSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkg
eworICAgICAgICAvLyBSZW1vdmUgZnJvbSBtZXNoCisgICAgICAgIHZhciBpbmRleCA9IGluc3Rh
bmNlLl9pbmRleEluU291cmNlTWVzaEluc3RhbmNlQXJyYXk7CisgICAgICAgIGlmIChpbmRleCAh
PSAtMSkgeworICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB0aGlzLmluc3RhbmNlcy5sZW5ndGgg
LSAxKSB7CisgICAgICAgICAgICAgICAgdmFyIGxhc3QgPSB0aGlzLmluc3RhbmNlc1t0aGlzLmlu
c3RhbmNlcy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlc1tpbmRl
eF0gPSBsYXN0OworICAgICAgICAgICAgICAgIGxhc3QuX2luZGV4SW5Tb3VyY2VNZXNoSW5zdGFu
Y2VBcnJheSA9IGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5zdGFuY2UuX2lu
ZGV4SW5Tb3VyY2VNZXNoSW5zdGFuY2VBcnJheSA9IC0xOworICAgICAgICAgICAgdGhpcy5pbnN0
YW5jZXMucG9wKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8vIENvbnN0cworICAgIC8qKgor
ICAgICAqIE1lc2ggc2lkZSBvcmllbnRhdGlvbiA6IHVzdWFsbHkgdGhlIGV4dGVybmFsIG9yIGZy
b250IHN1cmZhY2UKKyAgICAgKi8KKyAgICBNZXNoLkZST05UU0lERSA9IF9tZXNoX3ZlcnRleERh
dGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siVmVydGV4RGF0YSJdLkZST05UU0lERTsK
KyAgICAvKioKKyAgICAgKiBNZXNoIHNpZGUgb3JpZW50YXRpb24gOiB1c3VhbGx5IHRoZSBpbnRl
cm5hbCBvciBiYWNrIHN1cmZhY2UKKyAgICAgKi8KKyAgICBNZXNoLkJBQ0tTSURFID0gX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJWZXJ0ZXhEYXRhIl0uQkFD
S1NJREU7CisgICAgLyoqCisgICAgICogTWVzaCBzaWRlIG9yaWVudGF0aW9uIDogYm90aCBpbnRl
cm5hbCBhbmQgZXh0ZXJuYWwgb3IgZnJvbnQgYW5kIGJhY2sgc3VyZmFjZXMKKyAgICAgKi8KKyAg
ICBNZXNoLkRPVUJMRVNJREUgPSBfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIlZlcnRleERhdGEiXS5ET1VCTEVTSURFOworICAgIC8qKgorICAgICAqIE1lc2gg
c2lkZSBvcmllbnRhdGlvbiA6IGJ5IGRlZmF1bHQsIGBGUk9OVFNJREVgCisgICAgICovCisgICAg
TWVzaC5ERUZBVUxUU0lERSA9IF9tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfX1siVmVydGV4RGF0YSJdLkRFRkFVTFRTSURFOworICAgIC8qKgorICAgICAqIE1lc2gg
Y2FwIHNldHRpbmcgOiBubyBjYXAKKyAgICAgKi8KKyAgICBNZXNoLk5PX0NBUCA9IDA7CisgICAg
LyoqCisgICAgICogTWVzaCBjYXAgc2V0dGluZyA6IG9uZSBjYXAgYXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgbWVzaAorICAgICAqLworICAgIE1lc2guQ0FQX1NUQVJUID0gMTsKKyAgICAvKioKKyAg
ICAgKiBNZXNoIGNhcCBzZXR0aW5nIDogb25lIGNhcCBhdCB0aGUgZW5kIG9mIHRoZSBtZXNoCisg
ICAgICovCisgICAgTWVzaC5DQVBfRU5EID0gMjsKKyAgICAvKioKKyAgICAgKiBNZXNoIGNhcCBz
ZXR0aW5nIDogdHdvIGNhcHMsIG9uZSBhdCB0aGUgYmVnaW5uaW5nICBhbmQgb25lIGF0IHRoZSBl
bmQgb2YgdGhlIG1lc2gKKyAgICAgKi8KKyAgICBNZXNoLkNBUF9BTEwgPSAzOworICAgIC8qKgor
ICAgICAqIE1lc2ggcGF0dGVybiBzZXR0aW5nIDogbm8gZmxpcCBvciByb3RhdGUKKyAgICAgKi8K
KyAgICBNZXNoLk5PX0ZMSVAgPSAwOworICAgIC8qKgorICAgICAqIE1lc2ggcGF0dGVybiBzZXR0
aW5nIDogZmxpcCAocmVmbGVjdCBpbiB5IGF4aXMpIGFsdGVybmF0ZSB0aWxlcyBvbiBlYWNoIHJv
dyBvciBjb2x1bW4KKyAgICAgKi8KKyAgICBNZXNoLkZMSVBfVElMRSA9IDE7CisgICAgLyoqCisg
ICAgICogTWVzaCBwYXR0ZXJuIHNldHRpbmcgOiByb3RhdGUgKDE4MGRlZ3MpIGFsdGVybmF0ZSB0
aWxlcyBvbiBlYWNoIHJvdyBvciBjb2x1bW4KKyAgICAgKi8KKyAgICBNZXNoLlJPVEFURV9USUxF
ID0gMjsKKyAgICAvKioKKyAgICAgKiBNZXNoIHBhdHRlcm4gc2V0dGluZyA6IGZsaXAgKHJlZmxl
Y3QgaW4geSBheGlzKSBhbGwgdGlsZXMgb24gYWx0ZXJuYXRlIHJvd3MKKyAgICAgKi8KKyAgICBN
ZXNoLkZMSVBfUk9XID0gMzsKKyAgICAvKioKKyAgICAgKiBNZXNoIHBhdHRlcm4gc2V0dGluZyA6
IHJvdGF0ZSAoMTgwZGVncykgYWxsIHRpbGVzIG9uIGFsdGVybmF0ZSByb3dzCisgICAgICovCisg
ICAgTWVzaC5ST1RBVEVfUk9XID0gNDsKKyAgICAvKioKKyAgICAgKiBNZXNoIHBhdHRlcm4gc2V0
dGluZyA6IGZsaXAgYW5kIHJvdGF0ZSBhbHRlcm5hdGUgdGlsZXMgb24gZWFjaCByb3cgb3IgY29s
dW1uCisgICAgICovCisgICAgTWVzaC5GTElQX05fUk9UQVRFX1RJTEUgPSA1OworICAgIC8qKgor
ICAgICAqIE1lc2ggcGF0dGVybiBzZXR0aW5nIDogcm90YXRlIHBhdHRlcm4gYW5kIHJvdGF0ZQor
ICAgICAqLworICAgIE1lc2guRkxJUF9OX1JPVEFURV9ST1cgPSA2OworICAgIC8qKgorICAgICAq
IE1lc2ggdGlsZSBwb3NpdGlvbmluZyA6IHBhcnQgdGlsZXMgc2FtZSBvbiBsZWZ0L3JpZ2h0IG9y
IHRvcC9ib3R0b20KKyAgICAgKi8KKyAgICBNZXNoLkNFTlRFUiA9IDA7CisgICAgLyoqCisgICAg
ICogTWVzaCB0aWxlIHBvc2l0aW9uaW5nIDogcGFydCB0aWxlcyBvbiBsZWZ0CisgICAgICovCisg
ICAgTWVzaC5MRUZUID0gMTsKKyAgICAvKioKKyAgICAgKiBNZXNoIHRpbGUgcG9zaXRpb25pbmcg
OiBwYXJ0IHRpbGVzIG9uIHJpZ2h0CisgICAgICovCisgICAgTWVzaC5SSUdIVCA9IDI7CisgICAg
LyoqCisgICAgICogTWVzaCB0aWxlIHBvc2l0aW9uaW5nIDogcGFydCB0aWxlcyBvbiB0b3AKKyAg
ICAgKi8KKyAgICBNZXNoLlRPUCA9IDM7CisgICAgLyoqCisgICAgICogTWVzaCB0aWxlIHBvc2l0
aW9uaW5nIDogcGFydCB0aWxlcyBvbiBib3R0b20KKyAgICAgKi8KKyAgICBNZXNoLkJPVFRPTSA9
IDQ7CisgICAgLy8gU3RhdGljcworICAgIC8qKiBAaGlkZGVuICovCisgICAgTWVzaC5fR3JvdW5k
TWVzaFBhcnNlciA9IGZ1bmN0aW9uIChwYXJzZWRNZXNoLCBzY2VuZSkgeworICAgICAgICB0aHJv
dyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0RldlRvb2xz
Il0uV2FybkltcG9ydCgiR3JvdW5kTWVzaCIpOworICAgIH07CisgICAgcmV0dXJuIE1lc2g7Cit9
KF9hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkFic3RyYWN0TWVz
aCJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0
YS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBWZXJ0ZXhEYXRhICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlcnRleERhdGEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFZlcnRleERhdGE7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3Iu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2J1
ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01pc2MvZGV2VG9vbHMgKi8gIi4vTWlzYy9kZXZUb29scy50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmNv
bG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKworCisKKworLyoqCisgKiBUaGlzIGNs
YXNzIGNvbnRhaW5zIHRoZSB2YXJpb3VzIGtpbmRzIG9mIGRhdGEgb24gZXZlcnkgdmVydGV4IG9m
IGEgbWVzaCB1c2VkIGluIGRldGVybWluaW5nIGl0cyBzaGFwZSBhbmQgYXBwZWFyYW5jZQorICov
Cit2YXIgVmVydGV4RGF0YSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5j
dGlvbiBWZXJ0ZXhEYXRhKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBVc2VzIHRoZSBwYXNz
ZWQgZGF0YSBhcnJheSB0byBzZXQgdGhlIHNldCB0aGUgdmFsdWVzIGZvciB0aGUgc3BlY2lmaWVk
IGtpbmQgb2YgZGF0YQorICAgICAqIEBwYXJhbSBkYXRhIGEgbGluZWFyIGFycmF5IG9mIGZsb2F0
aW5nIG51bWJlcnMKKyAgICAgKiBAcGFyYW0ga2luZCB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgaXMg
YmVpbmcgc2V0LCBlZyBwb3NpdGlvbnMsIGNvbG9ycyBldGMKKyAgICAgKi8KKyAgICBWZXJ0ZXhE
YXRhLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZGF0YSwga2luZCkgeworICAgICAgICBzd2l0
Y2ggKGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kOgorICAgICAgICAg
ICAgICAgIHRoaXMucG9zaXRpb25zID0gZGF0YTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZDoKKyAgICAgICAgICAgICAgICB0aGlzLm5vcm1h
bHMgPSBkYXRhOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5U
YW5nZW50S2luZDoKKyAgICAgICAgICAgICAgICB0aGlzLnRhbmdlbnRzID0gZGF0YTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kOgorICAgICAgICAg
ICAgICAgIHRoaXMudXZzID0gZGF0YTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVy
dGV4QnVmZmVyIl0uVVYyS2luZDoKKyAgICAgICAgICAgICAgICB0aGlzLnV2czIgPSBkYXRhOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfTWVzaGVzX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjNLaW5kOgorICAg
ICAgICAgICAgICAgIHRoaXMudXZzMyA9IGRhdGE7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlcnRleEJ1ZmZlciJdLlVWNEtpbmQ6CisgICAgICAgICAgICAgICAgdGhpcy51dnM0ID0g
ZGF0YTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVY1S2lu
ZDoKKyAgICAgICAgICAgICAgICB0aGlzLnV2czUgPSBkYXRhOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjZLaW5kOgorICAgICAgICAgICAgICAgIHRoaXMu
dXZzNiA9IGRhdGE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJd
LkNvbG9yS2luZDoKKyAgICAgICAgICAgICAgICB0aGlzLmNvbG9ycyA9IGRhdGE7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0tpbmQ6
CisgICAgICAgICAgICAgICAgdGhpcy5tYXRyaWNlc0luZGljZXMgPSBkYXRhOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kOgor
ICAgICAgICAgICAgICAgIHRoaXMubWF0cmljZXNXZWlnaHRzID0gZGF0YTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzRXh0cmFLaW5k
OgorICAgICAgICAgICAgICAgIHRoaXMubWF0cmljZXNJbmRpY2VzRXh0cmEgPSBkYXRhOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNF
eHRyYUtpbmQ6CisgICAgICAgICAgICAgICAgdGhpcy5tYXRyaWNlc1dlaWdodHNFeHRyYSA9IGRh
dGE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFzc29jaWF0ZXMgdGhlIHZlcnRleERhdGEgdG8gdGhlIHBhc3NlZCBNZXNoLgorICAg
ICAqIFNldHMgaXQgYXMgdXBkYXRhYmxlIG9yIG5vdCAoZGVmYXVsdCBgZmFsc2VgKQorICAgICAq
IEBwYXJhbSBtZXNoIHRoZSBtZXNoIHRoZSB2ZXJ0ZXhEYXRhIGlzIGFwcGxpZWQgdG8KKyAgICAg
KiBAcGFyYW0gdXBkYXRhYmxlIHdoZW4gdXNlZCBhbmQgaGF2aW5nIHRoZSB2YWx1ZSB0cnVlIGFs
bG93cyBuZXcgZGF0YSB0byB1cGRhdGUgdGhlIHZlcnRleERhdGEKKyAgICAgKiBAcmV0dXJucyB0
aGUgVmVydGV4RGF0YQorICAgICAqLworICAgIFZlcnRleERhdGEucHJvdG90eXBlLmFwcGx5VG9N
ZXNoID0gZnVuY3Rpb24gKG1lc2gsIHVwZGF0YWJsZSkgeworICAgICAgICB0aGlzLl9hcHBseVRv
KG1lc2gsIHVwZGF0YWJsZSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoq
CisgICAgICogQXNzb2NpYXRlcyB0aGUgdmVydGV4RGF0YSB0byB0aGUgcGFzc2VkIEdlb21ldHJ5
LgorICAgICAqIFNldHMgaXQgYXMgdXBkYXRhYmxlIG9yIG5vdCAoZGVmYXVsdCBgZmFsc2VgKQor
ICAgICAqIEBwYXJhbSBnZW9tZXRyeSB0aGUgZ2VvbWV0cnkgdGhlIHZlcnRleERhdGEgaXMgYXBw
bGllZCB0bworICAgICAqIEBwYXJhbSB1cGRhdGFibGUgd2hlbiB1c2VkIGFuZCBoYXZpbmcgdGhl
IHZhbHVlIHRydWUgYWxsb3dzIG5ldyBkYXRhIHRvIHVwZGF0ZSB0aGUgdmVydGV4RGF0YQorICAg
ICAqIEByZXR1cm5zIFZlcnRleERhdGEKKyAgICAgKi8KKyAgICBWZXJ0ZXhEYXRhLnByb3RvdHlw
ZS5hcHBseVRvR2VvbWV0cnkgPSBmdW5jdGlvbiAoZ2VvbWV0cnksIHVwZGF0YWJsZSkgeworICAg
ICAgICB0aGlzLl9hcHBseVRvKGdlb21ldHJ5LCB1cGRhdGFibGUpOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGFzc29jaWF0ZWQgbWVz
aAorICAgICAqIEBwYXJhbSBtZXNoIHRoZSBtZXNoIHRvIGJlIHVwZGF0ZWQKKyAgICAgKiBAcGFy
YW0gdXBkYXRlRXh0ZW5kcyB3aGVuIHRydWUgdGhlIG1lc2ggQm91bmRpbmdJbmZvIHdpbGwgYmUg
cmVuZXdlZCB3aGVuIGFuZCBpZiBwb3NpdGlvbiBraW5kIGlzIHVwZGF0ZWQsIG9wdGlvbmFsIHdp
dGggZGVmYXVsdCBmYWxzZQorICAgICAqIEBwYXJhbSBtYWtlSXRVbmlxdWUgd2hlbiB0cnVlLCBh
bmQgd2hlbiBhbmQgaWYgcG9zaXRpb24ga2luZCBpcyB1cGRhdGVkLCBhIG5ldyBnbG9iYWwgZ2Vv
bWV0cnkgd2lsbCBiZSAgY3JlYXRlZCBmcm9tIHRoZXNlIHBvc2l0aW9ucyBhbmQgc2V0IHRvIHRo
ZSBtZXNoLCBvcHRpb25hbCB3aXRoIGRlZmF1bHQgZmFsc2UKKyAgICAgKiBAcmV0dXJucyBWZXJ0
ZXhEYXRhCisgICAgICovCisgICAgVmVydGV4RGF0YS5wcm90b3R5cGUudXBkYXRlTWVzaCA9IGZ1
bmN0aW9uIChtZXNoKSB7CisgICAgICAgIHRoaXMuX3VwZGF0ZShtZXNoKTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBhc3NvY2lhdGVk
IGdlb21ldHJ5CisgICAgICogQHBhcmFtIGdlb21ldHJ5IHRoZSBnZW9tZXRyeSB0byBiZSB1cGRh
dGVkCisgICAgICogQHBhcmFtIHVwZGF0ZUV4dGVuZHMgd2hlbiB0cnVlIEJvdW5kaW5nSW5mbyB3
aWxsIGJlIHJlbmV3ZWQgd2hlbiBhbmQgaWYgcG9zaXRpb24ga2luZCBpcyB1cGRhdGVkLCBvcHRp
b25hbCB3aXRoIGRlZmF1bHQgZmFsc2UKKyAgICAgKiBAcGFyYW0gbWFrZUl0VW5pcXVlIHdoZW4g
dHJ1ZSwgYW5kIHdoZW4gYW5kIGlmIHBvc2l0aW9uIGtpbmQgaXMgdXBkYXRlZCwgYSBuZXcgZ2xv
YmFsIGdlb21ldHJ5IHdpbGwgYmUgY3JlYXRlZCBmcm9tIHRoZXNlIHBvc2l0aW9ucyBhbmQgc2V0
IHRvIHRoZSBtZXNoLCBvcHRpb25hbCB3aXRoIGRlZmF1bHQgZmFsc2UKKyAgICAgKiBAcmV0dXJu
cyBWZXJ0ZXhEYXRhLgorICAgICAqLworICAgIFZlcnRleERhdGEucHJvdG90eXBlLnVwZGF0ZUdl
b21ldHJ5ID0gZnVuY3Rpb24gKGdlb21ldHJ5KSB7CisgICAgICAgIHRoaXMuX3VwZGF0ZShnZW9t
ZXRyeSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgVmVydGV4RGF0YS5wcm90
b3R5cGUuX2FwcGx5VG8gPSBmdW5jdGlvbiAobWVzaE9yR2VvbWV0cnksIHVwZGF0YWJsZSkgewor
ICAgICAgICBpZiAodXBkYXRhYmxlID09PSB2b2lkIDApIHsgdXBkYXRhYmxlID0gZmFsc2U7IH0K
KyAgICAgICAgaWYgKHRoaXMucG9zaXRpb25zKSB7CisgICAgICAgICAgICBtZXNoT3JHZW9tZXRy
eS5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kLCB0aGlzLnBvc2l0aW9ucywgdXBkYXRh
YmxlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5ub3JtYWxzKSB7CisgICAgICAgICAg
ICBtZXNoT3JHZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCwgdGhpcy5ub3Jt
YWxzLCB1cGRhdGFibGUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnRhbmdlbnRzKSB7
CisgICAgICAgICAgICBtZXNoT3JHZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVGFuZ2VudEtp
bmQsIHRoaXMudGFuZ2VudHMsIHVwZGF0YWJsZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMudXZzKSB7CisgICAgICAgICAgICBtZXNoT3JHZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0u
VVZLaW5kLCB0aGlzLnV2cywgdXBkYXRhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy51dnMyKSB7CisgICAgICAgICAgICBtZXNoT3JHZW9tZXRyeS5zZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0u
VVYyS2luZCwgdGhpcy51dnMyLCB1cGRhdGFibGUpOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLnV2czMpIHsKKyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnNldFZlcnRpY2VzRGF0YShf
TWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIi
XS5VVjNLaW5kLCB0aGlzLnV2czMsIHVwZGF0YWJsZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMudXZzNCkgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkuc2V0VmVydGljZXNEYXRh
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZl
ciJdLlVWNEtpbmQsIHRoaXMudXZzNCwgdXBkYXRhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy51dnM1KSB7CisgICAgICAgICAgICBtZXNoT3JHZW9tZXRyeS5zZXRWZXJ0aWNlc0Rh
dGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVm
ZmVyIl0uVVY1S2luZCwgdGhpcy51dnM1LCB1cGRhdGFibGUpOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLnV2czYpIHsKKyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnNldFZlcnRpY2Vz
RGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhC
dWZmZXIiXS5VVjZLaW5kLCB0aGlzLnV2czYsIHVwZGF0YWJsZSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuY29sb3JzKSB7CisgICAgICAgICAgICBtZXNoT3JHZW9tZXRyeS5zZXRWZXJ0
aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVy
dGV4QnVmZmVyIl0uQ29sb3JLaW5kLCB0aGlzLmNvbG9ycywgdXBkYXRhYmxlKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy5tYXRyaWNlc0luZGljZXMpIHsKKyAgICAgICAgICAgIG1lc2hP
ckdlb21ldHJ5LnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNLaW5kLCB0aGlzLm1h
dHJpY2VzSW5kaWNlcywgdXBkYXRhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5t
YXRyaWNlc1dlaWdodHMpIHsKKyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnNldFZlcnRpY2Vz
RGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhC
dWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kLCB0aGlzLm1hdHJpY2VzV2VpZ2h0cywgdXBkYXRh
YmxlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5tYXRyaWNlc0luZGljZXNFeHRyYSkg
eworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkuc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2Vz
SW5kaWNlc0V4dHJhS2luZCwgdGhpcy5tYXRyaWNlc0luZGljZXNFeHRyYSwgdXBkYXRhYmxlKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5tYXRyaWNlc1dlaWdodHNFeHRyYSkgeworICAg
ICAgICAgICAgbWVzaE9yR2VvbWV0cnkuc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0
c0V4dHJhS2luZCwgdGhpcy5tYXRyaWNlc1dlaWdodHNFeHRyYSwgdXBkYXRhYmxlKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5pbmRpY2VzKSB7CisgICAgICAgICAgICBtZXNoT3JHZW9t
ZXRyeS5zZXRJbmRpY2VzKHRoaXMuaW5kaWNlcywgbnVsbCwgdXBkYXRhYmxlKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnNldEluZGljZXMo
W10sIG51bGwpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
VmVydGV4RGF0YS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChtZXNoT3JHZW9tZXRyeSwg
dXBkYXRlRXh0ZW5kcywgbWFrZUl0VW5pcXVlKSB7CisgICAgICAgIGlmICh0aGlzLnBvc2l0aW9u
cykgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkudXBkYXRlVmVydGljZXNEYXRhKF9NZXNo
ZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBv
c2l0aW9uS2luZCwgdGhpcy5wb3NpdGlvbnMsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubm9ybWFscykgeworICAgICAgICAgICAgbWVz
aE9yR2VvbWV0cnkudXBkYXRlVmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQsIHRoaXMubm9ybWFs
cywgdXBkYXRlRXh0ZW5kcywgbWFrZUl0VW5pcXVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy50YW5nZW50cykgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkudXBkYXRlVmVydGlj
ZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLlRhbmdlbnRLaW5kLCB0aGlzLnRhbmdlbnRzLCB1cGRhdGVFeHRlbmRzLCBtYWtl
SXRVbmlxdWUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnV2cykgeworICAgICAgICAg
ICAgbWVzaE9yR2VvbWV0cnkudXBkYXRlVmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCwgdGhpcy51dnMs
IHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMudXZzMikgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkudXBkYXRlVmVydGljZXNEYXRh
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZl
ciJdLlVWMktpbmQsIHRoaXMudXZzMiwgdXBkYXRlRXh0ZW5kcywgbWFrZUl0VW5pcXVlKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy51dnMzKSB7CisgICAgICAgICAgICBtZXNoT3JHZW9t
ZXRyeS51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVYzS2luZCwgdGhpcy51dnMzLCB1cGRhdGVFeHRl
bmRzLCBtYWtlSXRVbmlxdWUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnV2czQpIHsK
KyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnVwZGF0ZVZlcnRpY2VzRGF0YShfTWVzaGVzX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjRLaW5k
LCB0aGlzLnV2czQsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMudXZzNSkgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkudXBkYXRl
VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlcnRleEJ1ZmZlciJdLlVWNUtpbmQsIHRoaXMudXZzNSwgdXBkYXRlRXh0ZW5kcywgbWFrZUl0
VW5pcXVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy51dnM2KSB7CisgICAgICAgICAg
ICBtZXNoT3JHZW9tZXRyeS51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVY2S2luZCwgdGhpcy51dnM2
LCB1cGRhdGVFeHRlbmRzLCBtYWtlSXRVbmlxdWUpOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLmNvbG9ycykgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkudXBkYXRlVmVydGljZXNE
YXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1
ZmZlciJdLkNvbG9yS2luZCwgdGhpcy5jb2xvcnMsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubWF0cmljZXNJbmRpY2VzKSB7CisgICAg
ICAgICAgICBtZXNoT3JHZW9tZXRyeS51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRp
Y2VzS2luZCwgdGhpcy5tYXRyaWNlc0luZGljZXMsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubWF0cmljZXNXZWlnaHRzKSB7CisgICAg
ICAgICAgICBtZXNoT3JHZW9tZXRyeS51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWln
aHRzS2luZCwgdGhpcy5tYXRyaWNlc1dlaWdodHMsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubWF0cmljZXNJbmRpY2VzRXh0cmEpIHsK
KyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnVwZGF0ZVZlcnRpY2VzRGF0YShfTWVzaGVzX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNl
c0luZGljZXNFeHRyYUtpbmQsIHRoaXMubWF0cmljZXNJbmRpY2VzRXh0cmEsIHVwZGF0ZUV4dGVu
ZHMsIG1ha2VJdFVuaXF1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubWF0cmljZXNX
ZWlnaHRzRXh0cmEpIHsKKyAgICAgICAgICAgIG1lc2hPckdlb21ldHJ5LnVwZGF0ZVZlcnRpY2Vz
RGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhC
dWZmZXIiXS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQsIHRoaXMubWF0cmljZXNXZWlnaHRzRXh0
cmEsIHVwZGF0ZUV4dGVuZHMsIG1ha2VJdFVuaXF1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuaW5kaWNlcykgeworICAgICAgICAgICAgbWVzaE9yR2VvbWV0cnkuc2V0SW5kaWNlcyh0
aGlzLmluZGljZXMsIG51bGwpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogVHJhbnNmb3JtcyBlYWNoIHBvc2l0aW9uIGFuZCBlYWNoIG5v
cm1hbCBvZiB0aGUgdmVydGV4RGF0YSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBNYXRyaXgKKyAg
ICAgKiBAcGFyYW0gbWF0cml4IHRoZSB0cmFuc2Zvcm1pbmcgbWF0cml4CisgICAgICogQHJldHVy
bnMgdGhlIFZlcnRleERhdGEKKyAgICAgKi8KKyAgICBWZXJ0ZXhEYXRhLnByb3RvdHlwZS50cmFu
c2Zvcm0gPSBmdW5jdGlvbiAobWF0cml4KSB7CisgICAgICAgIHZhciBmbGlwID0gbWF0cml4Lm1b
MF0gKiBtYXRyaXgubVs1XSAqIG1hdHJpeC5tWzEwXSA8IDA7CisgICAgICAgIHZhciB0cmFuc2Zv
cm1lZCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0uWmVybygpOworICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIGlmICh0aGlzLnBv
c2l0aW9ucykgeworICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAg
ICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnBvc2l0aW9ucy5sZW5ndGg7IGluZGV4
ICs9IDMpIHsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKHRoaXMucG9zaXRpb25z
LCBpbmRleCwgcG9zaXRpb24pOworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0
ZXNUb1JlZihwb3NpdGlvbiwgbWF0cml4LCB0cmFuc2Zvcm1lZCk7CisgICAgICAgICAgICAgICAg
dGhpcy5wb3NpdGlvbnNbaW5kZXhdID0gdHJhbnNmb3JtZWQueDsKKyAgICAgICAgICAgICAgICB0
aGlzLnBvc2l0aW9uc1tpbmRleCArIDFdID0gdHJhbnNmb3JtZWQueTsKKyAgICAgICAgICAgICAg
ICB0aGlzLnBvc2l0aW9uc1tpbmRleCArIDJdID0gdHJhbnNmb3JtZWQuejsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5ub3JtYWxzKSB7CisgICAgICAgICAgICB2
YXIgbm9ybWFsID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLm5vcm1hbHMubGVuZ3RoOyBpbmRleCArPSAzKSB7CisgICAgICAgICAgICAgICAgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5G
cm9tQXJyYXlUb1JlZih0aGlzLm5vcm1hbHMsIGluZGV4LCBub3JtYWwpOworICAgICAgICAgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0
b3IzIl0uVHJhbnNmb3JtTm9ybWFsVG9SZWYobm9ybWFsLCBtYXRyaXgsIHRyYW5zZm9ybWVkKTsK
KyAgICAgICAgICAgICAgICB0aGlzLm5vcm1hbHNbaW5kZXhdID0gdHJhbnNmb3JtZWQueDsKKyAg
ICAgICAgICAgICAgICB0aGlzLm5vcm1hbHNbaW5kZXggKyAxXSA9IHRyYW5zZm9ybWVkLnk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5ub3JtYWxzW2luZGV4ICsgMl0gPSB0cmFuc2Zvcm1lZC56Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnRhbmdlbnRzKSB7Cisg
ICAgICAgICAgICB2YXIgdGFuZ2VudCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJWZWN0b3I0Il0uWmVybygpOworICAgICAgICAgICAgdmFyIHRhbmdl
bnRUcmFuc2Zvcm1lZCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3I0Il0uWmVybygpOworICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGlu
ZGV4IDwgdGhpcy50YW5nZW50cy5sZW5ndGg7IGluZGV4ICs9IDQpIHsKKyAgICAgICAgICAgICAg
ICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
NCJdLkZyb21BcnJheVRvUmVmKHRoaXMudGFuZ2VudHMsIGluZGV4LCB0YW5nZW50KTsKKyAgICAg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yNCJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKHRhbmdlbnQsIG1hdHJpeCwgdGFuZ2Vu
dFRyYW5zZm9ybWVkKTsKKyAgICAgICAgICAgICAgICB0aGlzLnRhbmdlbnRzW2luZGV4XSA9IHRh
bmdlbnRUcmFuc2Zvcm1lZC54OworICAgICAgICAgICAgICAgIHRoaXMudGFuZ2VudHNbaW5kZXgg
KyAxXSA9IHRhbmdlbnRUcmFuc2Zvcm1lZC55OworICAgICAgICAgICAgICAgIHRoaXMudGFuZ2Vu
dHNbaW5kZXggKyAyXSA9IHRhbmdlbnRUcmFuc2Zvcm1lZC56OworICAgICAgICAgICAgICAgIHRo
aXMudGFuZ2VudHNbaW5kZXggKyAzXSA9IHRhbmdlbnRUcmFuc2Zvcm1lZC53OworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmbGlwICYmIHRoaXMuaW5kaWNlcykgeworICAg
ICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5pbmRpY2VzLmxlbmd0aDsgaW5k
ZXggKz0gMykgeworICAgICAgICAgICAgICAgIHZhciB0bXAgPSB0aGlzLmluZGljZXNbaW5kZXgg
KyAxXTsKKyAgICAgICAgICAgICAgICB0aGlzLmluZGljZXNbaW5kZXggKyAxXSA9IHRoaXMuaW5k
aWNlc1tpbmRleCArIDJdOworICAgICAgICAgICAgICAgIHRoaXMuaW5kaWNlc1tpbmRleCArIDJd
ID0gdG1wOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogTWVyZ2VzIHRoZSBwYXNzZWQgVmVydGV4RGF0YSBpbnRv
IHRoZSBjdXJyZW50IG9uZQorICAgICAqIEBwYXJhbSBvdGhlciB0aGUgVmVydGV4RGF0YSB0byBi
ZSBtZXJnZWQgaW50byB0aGUgY3VycmVudCBvbmUKKyAgICAgKiBAcGFyYW0gdXNlMzJCaXRzSW5k
aWNlcyBkZWZpbmVzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGluZGljZXMgbXVzdCBiZSBzdG9y
ZSBpbiBhIDMyIGJpdHMgYXJyYXkKKyAgICAgKiBAcmV0dXJucyB0aGUgbW9kaWZpZWQgVmVydGV4
RGF0YQorICAgICAqLworICAgIFZlcnRleERhdGEucHJvdG90eXBlLm1lcmdlID0gZnVuY3Rpb24g
KG90aGVyLCB1c2UzMkJpdHNJbmRpY2VzKSB7CisgICAgICAgIGlmICh1c2UzMkJpdHNJbmRpY2Vz
ID09PSB2b2lkIDApIHsgdXNlMzJCaXRzSW5kaWNlcyA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMu
X3ZhbGlkYXRlKCk7CisgICAgICAgIG90aGVyLl92YWxpZGF0ZSgpOworICAgICAgICBpZiAoIXRo
aXMubm9ybWFscyAhPT0gIW90aGVyLm5vcm1hbHMgfHwKKyAgICAgICAgICAgICF0aGlzLnRhbmdl
bnRzICE9PSAhb3RoZXIudGFuZ2VudHMgfHwKKyAgICAgICAgICAgICF0aGlzLnV2cyAhPT0gIW90
aGVyLnV2cyB8fAorICAgICAgICAgICAgIXRoaXMudXZzMiAhPT0gIW90aGVyLnV2czIgfHwKKyAg
ICAgICAgICAgICF0aGlzLnV2czMgIT09ICFvdGhlci51dnMzIHx8CisgICAgICAgICAgICAhdGhp
cy51dnM0ICE9PSAhb3RoZXIudXZzNCB8fAorICAgICAgICAgICAgIXRoaXMudXZzNSAhPT0gIW90
aGVyLnV2czUgfHwKKyAgICAgICAgICAgICF0aGlzLnV2czYgIT09ICFvdGhlci51dnM2IHx8Cisg
ICAgICAgICAgICAhdGhpcy5jb2xvcnMgIT09ICFvdGhlci5jb2xvcnMgfHwKKyAgICAgICAgICAg
ICF0aGlzLm1hdHJpY2VzSW5kaWNlcyAhPT0gIW90aGVyLm1hdHJpY2VzSW5kaWNlcyB8fAorICAg
ICAgICAgICAgIXRoaXMubWF0cmljZXNXZWlnaHRzICE9PSAhb3RoZXIubWF0cmljZXNXZWlnaHRz
IHx8CisgICAgICAgICAgICAhdGhpcy5tYXRyaWNlc0luZGljZXNFeHRyYSAhPT0gIW90aGVyLm1h
dHJpY2VzSW5kaWNlc0V4dHJhIHx8CisgICAgICAgICAgICAhdGhpcy5tYXRyaWNlc1dlaWdodHNF
eHRyYSAhPT0gIW90aGVyLm1hdHJpY2VzV2VpZ2h0c0V4dHJhKSB7CisgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkNhbm5vdCBtZXJnZSB2ZXJ0ZXggZGF0YSB0aGF0IGRvIG5vdCBoYXZlIHRo
ZSBzYW1lIHNldCBvZiBhdHRyaWJ1dGVzIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG90aGVy
LmluZGljZXMpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5pbmRpY2VzKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5pbmRpY2VzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIg
b2Zmc2V0ID0gdGhpcy5wb3NpdGlvbnMgPyB0aGlzLnBvc2l0aW9ucy5sZW5ndGggLyAzIDogMDsK
KyAgICAgICAgICAgIHZhciBpc1NyY1R5cGVkQXJyYXkgPSB0aGlzLmluZGljZXMuQllURVNfUEVS
X0VMRU1FTlQgIT09IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIGlmIChpc1NyY1R5cGVkQXJyYXkp
IHsKKyAgICAgICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aCArIG90aGVy
LmluZGljZXMubGVuZ3RoOworICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gdXNlMzJCaXRzSW5k
aWNlcyB8fCB0aGlzLmluZGljZXMgaW5zdGFuY2VvZiBVaW50MzJBcnJheSA/IG5ldyBVaW50MzJB
cnJheShsZW4pIDogbmV3IFVpbnQxNkFycmF5KGxlbik7CisgICAgICAgICAgICAgICAgdGVtcC5z
ZXQodGhpcy5pbmRpY2VzKTsKKyAgICAgICAgICAgICAgICB2YXIgZGVjYWwgPSB0aGlzLmluZGlj
ZXMubGVuZ3RoOworICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBv
dGhlci5pbmRpY2VzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICB0ZW1w
W2RlY2FsICsgaW5kZXhdID0gb3RoZXIuaW5kaWNlc1tpbmRleF0gKyBvZmZzZXQ7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuaW5kaWNlcyA9IHRlbXA7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRl
eCA9IDA7IGluZGV4IDwgb3RoZXIuaW5kaWNlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5pbmRpY2VzLnB1c2gob3RoZXIuaW5kaWNlc1tpbmRleF0gKyBvZmZz
ZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB0aGlzLnBvc2l0aW9ucyA9IHRoaXMuX21lcmdlRWxlbWVudCh0aGlzLnBvc2l0aW9ucywgb3Ro
ZXIucG9zaXRpb25zKTsKKyAgICAgICAgdGhpcy5ub3JtYWxzID0gdGhpcy5fbWVyZ2VFbGVtZW50
KHRoaXMubm9ybWFscywgb3RoZXIubm9ybWFscyk7CisgICAgICAgIHRoaXMudGFuZ2VudHMgPSB0
aGlzLl9tZXJnZUVsZW1lbnQodGhpcy50YW5nZW50cywgb3RoZXIudGFuZ2VudHMpOworICAgICAg
ICB0aGlzLnV2cyA9IHRoaXMuX21lcmdlRWxlbWVudCh0aGlzLnV2cywgb3RoZXIudXZzKTsKKyAg
ICAgICAgdGhpcy51dnMyID0gdGhpcy5fbWVyZ2VFbGVtZW50KHRoaXMudXZzMiwgb3RoZXIudXZz
Mik7CisgICAgICAgIHRoaXMudXZzMyA9IHRoaXMuX21lcmdlRWxlbWVudCh0aGlzLnV2czMsIG90
aGVyLnV2czMpOworICAgICAgICB0aGlzLnV2czQgPSB0aGlzLl9tZXJnZUVsZW1lbnQodGhpcy51
dnM0LCBvdGhlci51dnM0KTsKKyAgICAgICAgdGhpcy51dnM1ID0gdGhpcy5fbWVyZ2VFbGVtZW50
KHRoaXMudXZzNSwgb3RoZXIudXZzNSk7CisgICAgICAgIHRoaXMudXZzNiA9IHRoaXMuX21lcmdl
RWxlbWVudCh0aGlzLnV2czYsIG90aGVyLnV2czYpOworICAgICAgICB0aGlzLmNvbG9ycyA9IHRo
aXMuX21lcmdlRWxlbWVudCh0aGlzLmNvbG9ycywgb3RoZXIuY29sb3JzKTsKKyAgICAgICAgdGhp
cy5tYXRyaWNlc0luZGljZXMgPSB0aGlzLl9tZXJnZUVsZW1lbnQodGhpcy5tYXRyaWNlc0luZGlj
ZXMsIG90aGVyLm1hdHJpY2VzSW5kaWNlcyk7CisgICAgICAgIHRoaXMubWF0cmljZXNXZWlnaHRz
ID0gdGhpcy5fbWVyZ2VFbGVtZW50KHRoaXMubWF0cmljZXNXZWlnaHRzLCBvdGhlci5tYXRyaWNl
c1dlaWdodHMpOworICAgICAgICB0aGlzLm1hdHJpY2VzSW5kaWNlc0V4dHJhID0gdGhpcy5fbWVy
Z2VFbGVtZW50KHRoaXMubWF0cmljZXNJbmRpY2VzRXh0cmEsIG90aGVyLm1hdHJpY2VzSW5kaWNl
c0V4dHJhKTsKKyAgICAgICAgdGhpcy5tYXRyaWNlc1dlaWdodHNFeHRyYSA9IHRoaXMuX21lcmdl
RWxlbWVudCh0aGlzLm1hdHJpY2VzV2VpZ2h0c0V4dHJhLCBvdGhlci5tYXRyaWNlc1dlaWdodHNF
eHRyYSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgVmVydGV4RGF0YS5wcm90
b3R5cGUuX21lcmdlRWxlbWVudCA9IGZ1bmN0aW9uIChzb3VyY2UsIG90aGVyKSB7CisgICAgICAg
IGlmICghc291cmNlKSB7CisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFvdGhlcikgeworICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTsKKyAgICAgICAg
fQorICAgICAgICB2YXIgbGVuID0gb3RoZXIubGVuZ3RoICsgc291cmNlLmxlbmd0aDsKKyAgICAg
ICAgdmFyIGlzU3JjVHlwZWRBcnJheSA9IHNvdXJjZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheTsK
KyAgICAgICAgdmFyIGlzT3RoVHlwZWRBcnJheSA9IG90aGVyIGluc3RhbmNlb2YgRmxvYXQzMkFy
cmF5OworICAgICAgICAvLyB1c2Ugbm9uLWxvb3AgbWV0aG9kIHdoZW4gdGhlIHNvdXJjZSBpcyBG
bG9hdDMyQXJyYXkKKyAgICAgICAgaWYgKGlzU3JjVHlwZWRBcnJheSkgeworICAgICAgICAgICAg
dmFyIHJldDMyID0gbmV3IEZsb2F0MzJBcnJheShsZW4pOworICAgICAgICAgICAgcmV0MzIuc2V0
KHNvdXJjZSk7CisgICAgICAgICAgICByZXQzMi5zZXQob3RoZXIsIHNvdXJjZS5sZW5ndGgpOwor
ICAgICAgICAgICAgcmV0dXJuIHJldDMyOworICAgICAgICAgICAgLy8gc291cmNlIGlzIG51bWJl
cltdLCB3aGVuIG90aGVyIGlzIGFsc28gdXNlIGNvbmNhdAorICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKCFpc090aFR5cGVkQXJyYXkpIHsKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2UuY29u
Y2F0KG90aGVyKTsKKyAgICAgICAgICAgIC8vIHNvdXJjZSBpcyBhIG51bWJlcltdLCBidXQgb3Ro
ZXIgaXMgYSBGbG9hdDMyQXJyYXksIGxvb3AgcmVxdWlyZWQKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHZhciByZXQgPSBzb3VyY2Uuc2xpY2UoMCk7IC8vIGNvcHkgc291
cmNlIHRvIGEgc2VwYXJhdGUgYXJyYXkKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4g
PSBvdGhlci5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIHJldC5wdXNo
KG90aGVyW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAg
ICAgIH0KKyAgICB9OworICAgIFZlcnRleERhdGEucHJvdG90eXBlLl92YWxpZGF0ZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLnBvc2l0aW9ucykgeworICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJQb3NpdGlvbnMgYXJlIHJlcXVpcmVkIik7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIGdldEVsZW1lbnRDb3VudCA9IGZ1bmN0aW9uIChraW5kLCB2YWx1ZXMpIHsKKyAgICAg
ICAgICAgIHZhciBzdHJpZGUgPSBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5EZWR1Y2VTdHJpZGUoa2luZCk7CisgICAgICAgICAgICBp
ZiAoKHZhbHVlcy5sZW5ndGggJSBzdHJpZGUpICE9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJUaGUgIiArIGtpbmQgKyAicyBhcnJheSBjb3VudCBtdXN0IGJlIGEgbXVs
dGlwbGUgb2YgIiArIHN0cmlkZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dmFsdWVzLmxlbmd0aCAvIHN0cmlkZTsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHBvc2l0aW9u
c0VsZW1lbnRDb3VudCA9IGdldEVsZW1lbnRDb3VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHRoaXMucG9z
aXRpb25zKTsKKyAgICAgICAgdmFyIHZhbGlkYXRlRWxlbWVudENvdW50ID0gZnVuY3Rpb24gKGtp
bmQsIHZhbHVlcykgeworICAgICAgICAgICAgdmFyIGVsZW1lbnRDb3VudCA9IGdldEVsZW1lbnRD
b3VudChraW5kLCB2YWx1ZXMpOworICAgICAgICAgICAgaWYgKGVsZW1lbnRDb3VudCAhPT0gcG9z
aXRpb25zRWxlbWVudENvdW50KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJU
aGUgIiArIGtpbmQgKyAicyBlbGVtZW50IGNvdW50ICgiICsgZWxlbWVudENvdW50ICsgIikgZG9l
cyBub3QgbWF0Y2ggdGhlIHBvc2l0aW9ucyBjb3VudCAoIiArIHBvc2l0aW9uc0VsZW1lbnRDb3Vu
dCArICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIGlmICh0aGlzLm5v
cm1hbHMpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudENvdW50KF9NZXNoZXNfYnVmZmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQs
IHRoaXMubm9ybWFscyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudGFuZ2VudHMpIHsK
KyAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudENvdW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlRhbmdlbnRLaW5kLCB0aGlzLnRh
bmdlbnRzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy51dnMpIHsKKyAgICAgICAgICAg
IHZhbGlkYXRlRWxlbWVudENvdW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCwgdGhpcy51dnMpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLnV2czIpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudENvdW50
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZl
ciJdLlVWMktpbmQsIHRoaXMudXZzMik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudXZz
MykgeworICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50Q291bnQoX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVYzS2luZCwgdGhpcy51
dnMzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy51dnM0KSB7CisgICAgICAgICAgICB2
YWxpZGF0ZUVsZW1lbnRDb3VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjRLaW5kLCB0aGlzLnV2czQpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLnV2czUpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudENvdW50
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZl
ciJdLlVWNUtpbmQsIHRoaXMudXZzNSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudXZz
NikgeworICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50Q291bnQoX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVY2S2luZCwgdGhpcy51
dnM2KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5jb2xvcnMpIHsKKyAgICAgICAgICAg
IHZhbGlkYXRlRWxlbWVudENvdW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCwgdGhpcy5jb2xvcnMpOworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLm1hdHJpY2VzSW5kaWNlcykgeworICAgICAgICAgICAgdmFs
aWRhdGVFbGVtZW50Q291bnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCwgdGhpcy5tYXRyaWNlc0lu
ZGljZXMpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLm1hdHJpY2VzV2VpZ2h0cykgewor
ICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50Q291bnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCwg
dGhpcy5tYXRyaWNlc1dlaWdodHMpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLm1hdHJp
Y2VzSW5kaWNlc0V4dHJhKSB7CisgICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnRDb3VudChfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5N
YXRyaWNlc0luZGljZXNFeHRyYUtpbmQsIHRoaXMubWF0cmljZXNJbmRpY2VzRXh0cmEpOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLm1hdHJpY2VzV2VpZ2h0c0V4dHJhKSB7CisgICAgICAg
ICAgICB2YWxpZGF0ZUVsZW1lbnRDb3VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQsIHRo
aXMubWF0cmljZXNXZWlnaHRzRXh0cmEpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXJpYWxpemVzIHRoZSBWZXJ0ZXhEYXRhCisgICAgICogQHJldHVybnMgYSBzZXJpYWxp
emVkIG9iamVjdAorICAgICAqLworICAgIFZlcnRleERhdGEucHJvdG90eXBlLnNlcmlhbGl6ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB0aGlzLnNl
cmlhbGl6ZSgpOworICAgICAgICBpZiAodGhpcy5wb3NpdGlvbnMpIHsKKyAgICAgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QucG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMubm9ybWFscykgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5ub3JtYWxzID0gdGhpcy5ub3JtYWxzOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
LnRhbmdlbnRzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRhbmdlbnRzID0g
dGhpcy50YW5nZW50czsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy51dnMpIHsKKyAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudXZzID0gdGhpcy51dnM7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMudXZzMikgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51
dnMyID0gdGhpcy51dnMyOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnV2czMpIHsKKyAg
ICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudXZzMyA9IHRoaXMudXZzMzsKKyAgICAgICAg
fQorICAgICAgICBpZiAodGhpcy51dnM0KSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LnV2czQgPSB0aGlzLnV2czQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudXZzNSkg
eworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC51dnM1ID0gdGhpcy51dnM1OworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLnV2czYpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QudXZzNiA9IHRoaXMudXZzNjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5j
b2xvcnMpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29sb3JzID0gdGhpcy5j
b2xvcnM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubWF0cmljZXNJbmRpY2VzKSB7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdHJpY2VzSW5kaWNlcyA9IHRoaXMubWF0
cmljZXNJbmRpY2VzOworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXRyaWNlc0lu
ZGljZXMuX2lzRXhwYW5kZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLm1h
dHJpY2VzV2VpZ2h0cykgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXRyaWNl
c1dlaWdodHMgPSB0aGlzLm1hdHJpY2VzV2VpZ2h0czsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5tYXRyaWNlc0luZGljZXNFeHRyYSkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5tYXRyaWNlc0luZGljZXNFeHRyYSA9IHRoaXMubWF0cmljZXNJbmRpY2VzRXh0cmE7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdHJpY2VzSW5kaWNlc0V4dHJhLl9pc0V4
cGFuZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5tYXRyaWNlc1dlaWdo
dHNFeHRyYSkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXRyaWNlc1dlaWdo
dHNFeHRyYSA9IHRoaXMubWF0cmljZXNXZWlnaHRzRXh0cmE7CisgICAgICAgIH0KKyAgICAgICAg
c2VyaWFsaXphdGlvbk9iamVjdC5pbmRpY2VzID0gdGhpcy5pbmRpY2VzOworICAgICAgICByZXR1
cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioK
KyAgICAgKiBFeHRyYWN0cyB0aGUgdmVydGV4RGF0YSBmcm9tIGEgbWVzaAorICAgICAqIEBwYXJh
bSBtZXNoIHRoZSBtZXNoIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgVmVydGV4RGF0YQorICAg
ICAqIEBwYXJhbSBjb3B5V2hlblNoYXJlZCBkZWZpbmVzIGlmIHRoZSBWZXJ0ZXhEYXRhIG11c3Qg
YmUgY2xvbmVkIHdoZW4gc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgbWVzaGVzLCBvcHRpb25hbCwg
ZGVmYXVsdCBmYWxzZQorICAgICAqIEBwYXJhbSBmb3JjZUNvcHkgaW5kaWNhdGluZyB0aGF0IHRo
ZSBWZXJ0ZXhEYXRhIG11c3QgYmUgY2xvbmVkLCBvcHRpb25hbCwgZGVmYXVsdCBmYWxzZQorICAg
ICAqIEByZXR1cm5zIHRoZSBvYmplY3QgVmVydGV4RGF0YSBhc3NvY2lhdGVkIHRvIHRoZSBwYXNz
ZWQgbWVzaAorICAgICAqLworICAgIFZlcnRleERhdGEuRXh0cmFjdEZyb21NZXNoID0gZnVuY3Rp
b24gKG1lc2gsIGNvcHlXaGVuU2hhcmVkLCBmb3JjZUNvcHkpIHsKKyAgICAgICAgcmV0dXJuIFZl
cnRleERhdGEuX0V4dHJhY3RGcm9tKG1lc2gsIGNvcHlXaGVuU2hhcmVkLCBmb3JjZUNvcHkpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogRXh0cmFjdHMgdGhlIHZlcnRleERhdGEgZnJvbSB0aGUg
Z2VvbWV0cnkKKyAgICAgKiBAcGFyYW0gZ2VvbWV0cnkgdGhlIGdlb21ldHJ5IGZyb20gd2hpY2gg
dG8gZXh0cmFjdCB0aGUgVmVydGV4RGF0YQorICAgICAqIEBwYXJhbSBjb3B5V2hlblNoYXJlZCBk
ZWZpbmVzIGlmIHRoZSBWZXJ0ZXhEYXRhIG11c3QgYmUgY2xvbmVkIHdoZW4gdGhlIGdlb21ldHJ0
eSBpcyBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBtZXNoZXMsIG9wdGlvbmFsLCBkZWZhdWx0IGZh
bHNlCisgICAgICogQHBhcmFtIGZvcmNlQ29weSBpbmRpY2F0aW5nIHRoYXQgdGhlIFZlcnRleERh
dGEgbXVzdCBiZSBjbG9uZWQsIG9wdGlvbmFsLCBkZWZhdWx0IGZhbHNlCisgICAgICogQHJldHVy
bnMgdGhlIG9iamVjdCBWZXJ0ZXhEYXRhIGFzc29jaWF0ZWQgdG8gdGhlIHBhc3NlZCBtZXNoCisg
ICAgICovCisgICAgVmVydGV4RGF0YS5FeHRyYWN0RnJvbUdlb21ldHJ5ID0gZnVuY3Rpb24gKGdl
b21ldHJ5LCBjb3B5V2hlblNoYXJlZCwgZm9yY2VDb3B5KSB7CisgICAgICAgIHJldHVybiBWZXJ0
ZXhEYXRhLl9FeHRyYWN0RnJvbShnZW9tZXRyeSwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7
CisgICAgfTsKKyAgICBWZXJ0ZXhEYXRhLl9FeHRyYWN0RnJvbSA9IGZ1bmN0aW9uIChtZXNoT3JH
ZW9tZXRyeSwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gbmV3IFZlcnRleERhdGEoKTsKKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGlj
ZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpKSB7CisgICAgICAgICAgICByZXN1bHQucG9z
aXRpb25zID0gbWVzaE9yR2VvbWV0cnkuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwg
Y29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hP
ckdlb21ldHJ5LmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKSkgeworICAgICAg
ICAgICAgcmVzdWx0Lm5vcm1hbHMgPSBtZXNoT3JHZW9tZXRyeS5nZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0u
Tm9ybWFsS2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5UYW5nZW50S2lu
ZCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC50YW5nZW50cyA9IG1lc2hPckdlb21ldHJ5LmdldFZl
cnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJW
ZXJ0ZXhCdWZmZXIiXS5UYW5nZW50S2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNEYXRhUHJlc2Vu
dChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZm
ZXIiXS5VVktpbmQpKSB7CisgICAgICAgICAgICByZXN1bHQudXZzID0gbWVzaE9yR2VvbWV0cnku
Z2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNEYXRhUHJlc2Vu
dChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZm
ZXIiXS5VVjJLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0LnV2czIgPSBtZXNoT3JHZW9tZXRy
eS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVydGV4QnVmZmVyIl0uVVYyS2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNEYXRhUHJl
c2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhC
dWZmZXIiXS5VVjNLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0LnV2czMgPSBtZXNoT3JHZW9t
ZXRyeS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVYzS2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29w
eSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNEYXRh
UHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0
ZXhCdWZmZXIiXS5VVjRLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0LnV2czQgPSBtZXNoT3JH
ZW9tZXRyeS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVY0S2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNl
Q29weSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNE
YXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJW
ZXJ0ZXhCdWZmZXIiXS5VVjVLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0LnV2czUgPSBtZXNo
T3JHZW9tZXRyeS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVY1S2luZCwgY29weVdoZW5TaGFyZWQsIGZv
cmNlQ29weSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGlj
ZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJWZXJ0ZXhCdWZmZXIiXS5VVjZLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0LnV2czYgPSBt
ZXNoT3JHZW9tZXRyeS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVY2S2luZCwgY29weVdoZW5TaGFyZWQs
IGZvcmNlQ29weSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21ldHJ5LmlzVmVy
dGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQpKSB7CisgICAgICAgICAgICByZXN1bHQuY29s
b3JzID0gbWVzaE9yR2VvbWV0cnkuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCwgY29weVdo
ZW5TaGFyZWQsIGZvcmNlQ29weSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2hPckdlb21l
dHJ5LmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNLaW5kKSkgeworICAg
ICAgICAgICAgcmVzdWx0Lm1hdHJpY2VzSW5kaWNlcyA9IG1lc2hPckdlb21ldHJ5LmdldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0
ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNLaW5kLCBjb3B5V2hlblNoYXJlZCwgZm9yY2VDb3B5
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWVzaE9yR2VvbWV0cnkuaXNWZXJ0aWNlc0RhdGFQ
cmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpKSB7CisgICAgICAgICAgICByZXN1bHQubWF0
cmljZXNXZWlnaHRzID0gbWVzaE9yR2VvbWV0cnkuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2Vz
V2VpZ2h0c0tpbmQsIGNvcHlXaGVuU2hhcmVkLCBmb3JjZUNvcHkpOworICAgICAgICB9CisgICAg
ICAgIGlmIChtZXNoT3JHZW9tZXRyeS5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJ
bmRpY2VzRXh0cmFLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0Lm1hdHJpY2VzSW5kaWNlc0V4
dHJhID0gbWVzaE9yR2VvbWV0cnkuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0V4
dHJhS2luZCwgY29weVdoZW5TaGFyZWQsIGZvcmNlQ29weSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG1lc2hPckdlb21ldHJ5LmlzVmVydGljZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdo
dHNFeHRyYUtpbmQpKSB7CisgICAgICAgICAgICByZXN1bHQubWF0cmljZXNXZWlnaHRzRXh0cmEg
PSBtZXNoT3JHZW9tZXRyeS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzRXh0cmFL
aW5kLCBjb3B5V2hlblNoYXJlZCwgZm9yY2VDb3B5KTsKKyAgICAgICAgfQorICAgICAgICByZXN1
bHQuaW5kaWNlcyA9IG1lc2hPckdlb21ldHJ5LmdldEluZGljZXMoY29weVdoZW5TaGFyZWQsIGZv
cmNlQ29weSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIHRoZSBWZXJ0ZXhEYXRhIGZvciBhIFJpYmJvbgorICAgICAqIEBwYXJhbSBvcHRp
b25zIGFuIG9iamVjdCB1c2VkIHRvIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRl
cnMgZm9yIHRoZSByaWJib24sIHJlcXVpcmVkIGJ1dCBjYW4gYmUgZW1wdHkKKyAgICAgICogKiBw
YXRoQXJyYXkgYXJyYXkgb2YgcGF0aHMsIGVhY2ggb2Ygd2hpY2ggYW4gYXJyYXkgb2Ygc3VjY2Vz
c2l2ZSBWZWN0b3IzCisgICAgICAqICogY2xvc2VBcnJheSBjcmVhdGVzIGEgc2VhbSBiZXR3ZWVu
IHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgcGF0aHMgb2YgdGhlIHBhdGhBcnJheSwgb3B0aW9uYWws
IGRlZmF1bHQgZmFsc2UKKyAgICAgICogKiBjbG9zZVBhdGggY3JlYXRlcyBhIHNlYW0gYmV0d2Vl
biB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IHBvaW50cyBvZiBlYWNoIHBhdGggb2YgdGhlIHBhdGgg
YXJyYXksIG9wdGlvbmFsLCBkZWZhdWx0IGZhbHNlCisgICAgICAqICogb2Zmc2V0IGEgcG9zaXRp
dmUgaW50ZWdlciwgb25seSB1c2VkIHdoZW4gcGF0aEFycmF5IGNvbnRhaW5zIGEgc2luZ2xlIHBh
dGggKG9mZnNldCA9IDEwIG1lYW5zIHRoZSBwb2ludCAxIGlzIGpvaW5lZCB0byB0aGUgcG9pbnQg
MTEpLCBkZWZhdWx0IHJvdW5kZWQgaGFsZiBzaXplIG9mIHRoZSBwYXRoQXJyYXkgbGVuZ3RoCisg
ICAgICAqICogc2lkZU9yaWVudGF0aW9uIG9wdGlvbmFsIGFuZCB0YWtlcyB0aGUgdmFsdWVzIDog
TWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBNZXNoLkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lE
RQorICAgICAgKiAqIGZyb250VXZzIG9ubHkgdXNhYmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJs
ZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGlt
YWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBmcm9udCBzaWRlLCBvcHRpb25hbCwgZGVmYXVs
dCB2ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAgKiAqIGJhY2tVVnMgb25seSB1c2FibGUgd2hl
biB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFy
dHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgYXBwbHkgb24gdGhlIGJhY2sgc2lk
ZSwgb3B0aW9uYWwsIGRlZmF1bHQgdmVjdG9yNCAoMCwgMCwgMSwgMSkKKyAgICAgICogKiBpbnZl
cnRVViBzd2FwcyBpbiB0aGUgVSBhbmQgViBjb29yZGluYXRlcyB3aGVuIGFwcGx5aW5nIGEgdGV4
dHVyZSwgb3B0aW9uYWwsIGRlZmF1bHQgZmFsc2UKKyAgICAgICogKiB1dnMgYSBsaW5lYXIgYXJy
YXksIG9mIGxlbmd0aCAyICogbnVtYmVyIG9mIHZlcnRpY2VzLCBvZiBjdXN0b20gVVYgdmFsdWVz
LCBvcHRpb25hbAorICAgICAgKiAqIGNvbG9ycyBhIGxpbmVhciBhcnJheSwgb2YgbGVuZ3RoIDQg
KiBudW1iZXIgb2YgdmVydGljZXMsIG9mIGN1c3RvbSBjb2xvciB2YWx1ZXMsIG9wdGlvbmFsCisg
ICAgICogQHJldHVybnMgdGhlIFZlcnRleERhdGEgb2YgdGhlIHJpYmJvbgorICAgICAqLworICAg
IFZlcnRleERhdGEuQ3JlYXRlUmliYm9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICAgICAg
dGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siX0RldlRv
b2xzIl0uV2FybkltcG9ydCgicmliYm9uQnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyB0aGUgVmVydGV4RGF0YSBmb3IgYSBib3gKKyAgICAgKiBAcGFyYW0gb3B0aW9u
cyBhbiBvYmplY3QgdXNlZCB0byBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJz
IGZvciB0aGUgYm94LCByZXF1aXJlZCBidXQgY2FuIGJlIGVtcHR5CisgICAgICAqICogc2l6ZSBz
ZXRzIHRoZSB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGUgYm94IHRvIHRoZSB2YWx1ZSBv
ZiBzaXplLCBvcHRpb25hbCBkZWZhdWx0IDEKKyAgICAgICogKiB3aWR0aCBzZXRzIHRoZSB3aWR0
aCAoeCBkaXJlY3Rpb24pIG9mIHRoZSBib3gsIG92ZXJ3cml0ZXMgdGhlIHdpZHRoIHNldCBieSBz
aXplLCBvcHRpb25hbCwgZGVmYXVsdCBzaXplCisgICAgICAqICogaGVpZ2h0IHNldHMgdGhlIGhl
aWdodCAoeSBkaXJlY3Rpb24pIG9mIHRoZSBib3gsIG92ZXJ3cml0ZXMgdGhlIGhlaWdodCBzZXQg
Ynkgc2l6ZSwgb3B0aW9uYWwsIGRlZmF1bHQgc2l6ZQorICAgICAgKiAqIGRlcHRoIHNldHMgdGhl
IGRlcHRoICh6IGRpcmVjdGlvbikgb2YgdGhlIGJveCwgb3ZlcndyaXRlcyB0aGUgZGVwdGggc2V0
IGJ5IHNpemUsIG9wdGlvbmFsLCBkZWZhdWx0IHNpemUKKyAgICAgICogKiBmYWNlVVYgYW4gYXJy
YXkgb2YgNiBWZWN0b3I0IGVsZW1lbnRzIHVzZWQgdG8gc2V0IGRpZmZlcmVudCBpbWFnZXMgdG8g
ZWFjaCBib3ggc2lkZQorICAgICAgKiAqIGZhY2VDb2xvcnMgYW4gYXJyYXkgb2YgNiBDb2xvcjMg
ZWxlbWVudHMgdXNlZCB0byBzZXQgZGlmZmVyZW50IGNvbG9ycyB0byBlYWNoIGJveCBzaWRlCisg
ICAgICAqICogc2lkZU9yaWVudGF0aW9uIG9wdGlvbmFsIGFuZCB0YWtlcyB0aGUgdmFsdWVzIDog
TWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBNZXNoLkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lE
RQorICAgICAgKiAqIGZyb250VXZzIG9ubHkgdXNhYmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJs
ZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGlt
YWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBmcm9udCBzaWRlLCBvcHRpb25hbCwgZGVmYXVs
dCB2ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAgKiAqIGJhY2tVVnMgb25seSB1c2FibGUgd2hl
biB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFy
dHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgYXBwbHkgb24gdGhlIGJhY2sgc2lk
ZSwgb3B0aW9uYWwsIGRlZmF1bHQgdmVjdG9yNCAoMCwgMCwgMSwgMSkKKyAgICAgKiBAcmV0dXJu
cyB0aGUgVmVydGV4RGF0YSBvZiB0aGUgYm94CisgICAgICovCisgICAgVmVydGV4RGF0YS5DcmVh
dGVCb3ggPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJi
b3hCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBWZXJ0ZXhE
YXRhIGZvciBhIHRpbGVkIGJveAorICAgICAqIEBwYXJhbSBvcHRpb25zIGFuIG9iamVjdCB1c2Vk
IHRvIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBib3gsIHJl
cXVpcmVkIGJ1dCBjYW4gYmUgZW1wdHkKKyAgICAgICogKiBmYWNlVGlsZXMgc2V0cyB0aGUgcGF0
dGVybiwgdGlsZSBzaXplIGFuZCBudW1iZXIgb2YgdGlsZXMgZm9yIGEgZmFjZQorICAgICAgKiAq
IGZhY2VVViBhbiBhcnJheSBvZiA2IFZlY3RvcjQgZWxlbWVudHMgdXNlZCB0byBzZXQgZGlmZmVy
ZW50IGltYWdlcyB0byBlYWNoIGJveCBzaWRlCisgICAgICAqICogZmFjZUNvbG9ycyBhbiBhcnJh
eSBvZiA2IENvbG9yMyBlbGVtZW50cyB1c2VkIHRvIHNldCBkaWZmZXJlbnQgY29sb3JzIHRvIGVh
Y2ggYm94IHNpZGUKKyAgICAgICogKiBzaWRlT3JpZW50YXRpb24gb3B0aW9uYWwgYW5kIHRha2Vz
IHRoZSB2YWx1ZXMgOiBNZXNoLkZST05UU0lERSAoZGVmYXVsdCksIE1lc2guQkFDS1NJREUgb3Ig
TWVzaC5ET1VCTEVTSURFCisgICAgICogQHJldHVybnMgdGhlIFZlcnRleERhdGEgb2YgdGhlIGJv
eAorICAgICAqLworICAgIFZlcnRleERhdGEuQ3JlYXRlVGlsZWRCb3ggPSBmdW5jdGlvbiAob3B0
aW9ucykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJ0aWxlZEJveEJ1aWxkZXIiKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgdGhlIFZlcnRleERhdGEgZm9yIGEgdGlsZWQg
cGxhbmUKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBhbiBvYmplY3QgdXNlZCB0byBzZXQgdGhlIGZv
bGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgYm94LCByZXF1aXJlZCBidXQgY2Fu
IGJlIGVtcHR5CisgICAgICAqICogcGF0dGVybiBhIGxpbWl0ZWQgcGF0dGVybiBhcnJhbmdlbWVu
dCBkZXBlbmRpbmcgb24gdGhlIG51bWJlcgorICAgICAgKiAqIHRpbGVTaXplIHNldHMgdGhlIHdp
ZHRoLCBoZWlnaHQgYW5kIGRlcHRoIG9mIHRoZSB0aWxlIHRvIHRoZSB2YWx1ZSBvZiBzaXplLCBv
cHRpb25hbCBkZWZhdWx0IDEKKyAgICAgICogKiB0aWxlV2lkdGggc2V0cyB0aGUgd2lkdGggKHgg
ZGlyZWN0aW9uKSBvZiB0aGUgdGlsZSwgb3ZlcndyaXRlcyB0aGUgd2lkdGggc2V0IGJ5IHNpemUs
IG9wdGlvbmFsLCBkZWZhdWx0IHNpemUKKyAgICAgICogKiB0aWxlSGVpZ2h0IHNldHMgdGhlIGhl
aWdodCAoeSBkaXJlY3Rpb24pIG9mIHRoZSB0aWxlLCBvdmVyd3JpdGVzIHRoZSBoZWlnaHQgc2V0
IGJ5IHNpemUsIG9wdGlvbmFsLCBkZWZhdWx0IHNpemUKKyAgICAgICogKiBzaWRlT3JpZW50YXRp
b24gb3B0aW9uYWwgYW5kIHRha2VzIHRoZSB2YWx1ZXMgOiBNZXNoLkZST05UU0lERSAoZGVmYXVs
dCksIE1lc2guQkFDS1NJREUgb3IgTWVzaC5ET1VCTEVTSURFCisgICAgICAqICogZnJvbnRVdnMg
b25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHVzZWQgdG8g
Y2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgYXBwbHkg
b24gdGhlIGZyb250IHNpZGUsIG9wdGlvbmFsLCBkZWZhdWx0IHZlY3RvcjQgKDAsIDAsIDEsIDEp
CisgICAgICAqICogYmFja1VWcyBvbmx5IHVzYWJsZSB3aGVuIHlvdSBjcmVhdGUgYSBkb3VibGUt
c2lkZWQgbWVzaCwgdXNlZCB0byBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFn
ZSB0byBjcm9wIGFuZCBhcHBseSBvbiB0aGUgYmFjayBzaWRlLCBvcHRpb25hbCwgZGVmYXVsdCB2
ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAqIEByZXR1cm5zIHRoZSBWZXJ0ZXhEYXRhIG9mIHRo
ZSB0aWxlZCBwbGFuZQorICAgICAqLworICAgIFZlcnRleERhdGEuQ3JlYXRlVGlsZWRQbGFuZSA9
IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoInRpbGVkUGxh
bmVCdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBWZXJ0ZXhE
YXRhIGZvciBhbiBlbGxpcHNvaWQsIGRlZmF1bHRzIHRvIGEgc3BoZXJlCisgICAgICogQHBhcmFt
IG9wdGlvbnMgYW4gb2JqZWN0IHVzZWQgdG8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcGFy
YW1ldGVycyBmb3IgdGhlIGJveCwgcmVxdWlyZWQgYnV0IGNhbiBiZSBlbXB0eQorICAgICAgKiAq
IHNlZ21lbnRzIHNldHMgdGhlIG51bWJlciBvZiBob3Jpem9udGFsIHN0cmlwcyBvcHRpb25hbCwg
ZGVmYXVsdCAzMgorICAgICAgKiAqIGRpYW1ldGVyIHNldHMgdGhlIGF4ZXMgZGltZW5zaW9ucywg
ZGlhbWV0ZXJYLCBkaWFtZXRlclkgYW5kIGRpYW1ldGVyWiB0byB0aGUgdmFsdWUgb2YgZGlhbWV0
ZXIsIG9wdGlvbmFsIGRlZmF1bHQgMQorICAgICAgKiAqIGRpYW1ldGVyWCBzZXRzIHRoZSBkaWFt
ZXRlclggKHggZGlyZWN0aW9uKSBvZiB0aGUgZWxsaXBzb2lkLCBvdmVyd3JpdGVzIHRoZSBkaWFt
ZXRlclggc2V0IGJ5IGRpYW1ldGVyLCBvcHRpb25hbCwgZGVmYXVsdCBkaWFtZXRlcgorICAgICAg
KiAqIGRpYW1ldGVyWSBzZXRzIHRoZSBkaWFtZXRlclkgKHkgZGlyZWN0aW9uKSBvZiB0aGUgZWxs
aXBzb2lkLCBvdmVyd3JpdGVzIHRoZSBkaWFtZXRlclkgc2V0IGJ5IGRpYW1ldGVyLCBvcHRpb25h
bCwgZGVmYXVsdCBkaWFtZXRlcgorICAgICAgKiAqIGRpYW1ldGVyWiBzZXRzIHRoZSBkaWFtZXRl
clogKHogZGlyZWN0aW9uKSBvZiB0aGUgZWxsaXBzb2lkLCBvdmVyd3JpdGVzIHRoZSBkaWFtZXRl
clogc2V0IGJ5IGRpYW1ldGVyLCBvcHRpb25hbCwgZGVmYXVsdCBkaWFtZXRlcgorICAgICAgKiAq
IGFyYyBhIG51bWJlciBmcm9tIDAgdG8gMSwgdG8gY3JlYXRlIGFuIHVuY2xvc2VkIGVsbGlwc29p
ZCBiYXNlZCBvbiB0aGUgZnJhY3Rpb24gb2YgdGhlIGNpcmN1bWZlcmVuY2UgKGxhdGl0dWRlKSBn
aXZlbiBieSB0aGUgYXJjIHZhbHVlLCBvcHRpb25hbCwgZGVmYXVsdCAxCisgICAgICAqICogc2xp
Y2UgYSBudW1iZXIgZnJvbSAwIHRvIDEsIHRvIGNyZWF0ZSBhbiB1bmNsb3NlZCBlbGxpcHNvaWQg
YmFzZWQgb24gdGhlIGZyYWN0aW9uIG9mIHRoZSBoZWlnaHQgKGxhdGl0dWRlKSBnaXZlbiBieSB0
aGUgYXJjIHZhbHVlLCBvcHRpb25hbCwgZGVmYXVsdCAxCisgICAgICAqICogc2lkZU9yaWVudGF0
aW9uIG9wdGlvbmFsIGFuZCB0YWtlcyB0aGUgdmFsdWVzIDogTWVzaC5GUk9OVFNJREUgKGRlZmF1
bHQpLCBNZXNoLkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lERQorICAgICAgKiAqIGZyb250VXZz
IG9ubHkgdXNhYmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRv
IGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5
IG9uIHRoZSBmcm9udCBzaWRlLCBvcHRpb25hbCwgZGVmYXVsdCB2ZWN0b3I0ICgwLCAwLCAxLCAx
KQorICAgICAgKiAqIGJhY2tVVnMgb25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91Ymxl
LXNpZGVkIG1lc2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1h
Z2UgdG8gY3JvcCBhbmQgYXBwbHkgb24gdGhlIGJhY2sgc2lkZSwgb3B0aW9uYWwsIGRlZmF1bHQg
dmVjdG9yNCAoMCwgMCwgMSwgMSkKKyAgICAgKiBAcmV0dXJucyB0aGUgVmVydGV4RGF0YSBvZiB0
aGUgZWxsaXBzb2lkCisgICAgICovCisgICAgVmVydGV4RGF0YS5DcmVhdGVTcGhlcmUgPSBmdW5j
dGlvbiAob3B0aW9ucykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJzcGhlcmVCdWlsZGVy
Iik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBWZXJ0ZXhEYXRhIGZvciBh
IGN5bGluZGVyLCBjb25lIG9yIHByaXNtCisgICAgICogQHBhcmFtIG9wdGlvbnMgYW4gb2JqZWN0
IHVzZWQgdG8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIGJv
eCwgcmVxdWlyZWQgYnV0IGNhbiBiZSBlbXB0eQorICAgICAgKiAqIGhlaWdodCBzZXRzIHRoZSBo
ZWlnaHQgKHkgZGlyZWN0aW9uKSBvZiB0aGUgY3lsaW5kZXIsIG9wdGlvbmFsLCBkZWZhdWx0IDIK
KyAgICAgICogKiBkaWFtZXRlclRvcCBzZXRzIHRoZSBkaWFtZXRlciBvZiB0aGUgdG9wIG9mIHRo
ZSBjb25lLCBvdmVyd3JpdGVzIGRpYW1ldGVyLCAgb3B0aW9uYWwsIGRlZmF1bHQgZGlhbWV0ZXIK
KyAgICAgICogKiBkaWFtZXRlckJvdHRvbSBzZXRzIHRoZSBkaWFtZXRlciBvZiB0aGUgYm90dG9t
IG9mIHRoZSBjb25lLCBvdmVyd3JpdGVzIGRpYW1ldGVyLCAgb3B0aW9uYWwsIGRlZmF1bHQgZGlh
bWV0ZXIKKyAgICAgICogKiBkaWFtZXRlciBzZXRzIHRoZSBkaWFtZXRlciBvZiB0aGUgdG9wIGFu
ZCBib3R0b20gb2YgdGhlIGNvbmUsIG9wdGlvbmFsIGRlZmF1bHQgMQorICAgICAgKiAqIHRlc3Nl
bGxhdGlvbiB0aGUgbnVtYmVyIG9mIHByaXNtIHNpZGVzLCAzIGZvciBhIHRyaWFuZ3VsYXIgcHJp
c20sIG9wdGlvbmFsLCBkZWZhdWx0IDI0CisgICAgICAqICogc3ViZGl2aXNpb25zYCB0aGUgbnVt
YmVyIG9mIHJpbmdzIGFsb25nIHRoZSBjeWxpbmRlciBoZWlnaHQsIG9wdGlvbmFsLCBkZWZhdWx0
IDEKKyAgICAgICogKiBhcmMgYSBudW1iZXIgZnJvbSAwIHRvIDEsIHRvIGNyZWF0ZSBhbiB1bmNs
b3NlZCBjeWxpbmRlciBiYXNlZCBvbiB0aGUgZnJhY3Rpb24gb2YgdGhlIGNpcmN1bWZlcmVuY2Ug
Z2l2ZW4gYnkgdGhlIGFyYyB2YWx1ZSwgb3B0aW9uYWwsIGRlZmF1bHQgMQorICAgICAgKiAqIGZh
Y2VDb2xvcnMgYW4gYXJyYXkgb2YgQ29sb3IzIGVsZW1lbnRzIHVzZWQgdG8gc2V0IGRpZmZlcmVu
dCBjb2xvcnMgdG8gdGhlIHRvcCwgcmluZ3MgYW5kIGJvdHRvbSByZXNwZWN0aXZlbHkKKyAgICAg
ICogKiBmYWNlVVYgYW4gYXJyYXkgb2YgVmVjdG9yNCBlbGVtZW50cyB1c2VkIHRvIHNldCBkaWZm
ZXJlbnQgaW1hZ2VzIHRvIHRoZSB0b3AsIHJpbmdzIGFuZCBib3R0b20gcmVzcGVjdGl2ZWx5Cisg
ICAgICAqICogaGFzUmluZ3Mgd2hlbiB0cnVlIG1ha2VzIGVhY2ggc3ViZGl2aXNpb24gaW5kZXBl
bmRhbnRseSB0cmVhdGVkIGFzIGEgZmFjZSBmb3IgZmFjZVVWIGFuZCBmYWNlQ29sb3JzLCBvcHRp
b25hbCwgZGVmYXVsdCBmYWxzZQorICAgICAgKiAqIGVuY2xvc2Ugd2hlbiB0cnVlIGNsb3NlcyBh
biBvcGVuIGN5bGluZGVyIGJ5IGFkZGluZyBleHRyYSBmbGF0IGZhY2VzIGJldHdlZW4gdGhlIGhl
aWdodCBheGlzIGFuZCB2ZXJ0aWNhbCBlZGdlcywgdGhpbmsgY3V0IGNha2UKKyAgICAgICogKiBz
aWRlT3JpZW50YXRpb24gb3B0aW9uYWwgYW5kIHRha2VzIHRoZSB2YWx1ZXMgOiBNZXNoLkZST05U
U0lERSAoZGVmYXVsdCksIE1lc2guQkFDS1NJREUgb3IgTWVzaC5ET1VCTEVTSURFCisgICAgICAq
ICogZnJvbnRVdnMgb25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1l
c2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3Jv
cCBhbmQgYXBwbHkgb24gdGhlIGZyb250IHNpZGUsIG9wdGlvbmFsLCBkZWZhdWx0IHZlY3RvcjQg
KDAsIDAsIDEsIDEpCisgICAgICAqICogYmFja1VWcyBvbmx5IHVzYWJsZSB3aGVuIHlvdSBjcmVh
dGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgdXNlZCB0byBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUg
dGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBhcHBseSBvbiB0aGUgYmFjayBzaWRlLCBvcHRpb25h
bCwgZGVmYXVsdCB2ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAqIEByZXR1cm5zIHRoZSBWZXJ0
ZXhEYXRhIG9mIHRoZSBjeWxpbmRlciwgY29uZSBvciBwcmlzbQorICAgICAqLworICAgIFZlcnRl
eERhdGEuQ3JlYXRlQ3lsaW5kZXIgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICB0aHJv
dyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfRGV2VG9vbHMi
XS5XYXJuSW1wb3J0KCJjeWxpbmRlckJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgdGhlIFZlcnRleERhdGEgZm9yIGEgdG9ydXMKKyAgICAgKiBAcGFyYW0gb3B0aW9u
cyBhbiBvYmplY3QgdXNlZCB0byBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJz
IGZvciB0aGUgYm94LCByZXF1aXJlZCBidXQgY2FuIGJlIGVtcHR5CisgICAgICAqICogZGlhbWV0
ZXIgdGhlIGRpYW1ldGVyIG9mIHRoZSB0b3J1cywgb3B0aW9uYWwgZGVmYXVsdCAxCisgICAgICAq
ICogdGhpY2tuZXNzIHRoZSBkaWFtZXRlciBvZiB0aGUgdHViZSBmb3JtaW5nIHRoZSB0b3J1cywg
b3B0aW9uYWwgZGVmYXVsdCAwLjUKKyAgICAgICogKiB0ZXNzZWxsYXRpb24gdGhlIG51bWJlciBv
ZiBwcmlzbSBzaWRlcywgMyBmb3IgYSB0cmlhbmd1bGFyIHByaXNtLCBvcHRpb25hbCwgZGVmYXVs
dCAyNAorICAgICAgKiAqIHNpZGVPcmllbnRhdGlvbiBvcHRpb25hbCBhbmQgdGFrZXMgdGhlIHZh
bHVlcyA6IE1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgTWVzaC5CQUNLU0lERSBvciBNZXNoLkRP
VUJMRVNJREUKKyAgICAgICogKiBmcm9udFV2cyBvbmx5IHVzYWJsZSB3aGVuIHlvdSBjcmVhdGUg
YSBkb3VibGUtc2lkZWQgbWVzaCwgdXNlZCB0byBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4
dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBhcHBseSBvbiB0aGUgZnJvbnQgc2lkZSwgb3B0aW9uYWws
IGRlZmF1bHQgdmVjdG9yNCAoMCwgMCwgMSwgMSkKKyAgICAgICogKiBiYWNrVVZzIG9ubHkgdXNh
YmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3
aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBi
YWNrIHNpZGUsIG9wdGlvbmFsLCBkZWZhdWx0IHZlY3RvcjQgKDAsIDAsIDEsIDEpCisgICAgICog
QHJldHVybnMgdGhlIFZlcnRleERhdGEgb2YgdGhlIHRvcnVzCisgICAgICovCisgICAgVmVydGV4
RGF0YS5DcmVhdGVUb3J1cyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICAgIHRocm93IF9N
aXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9EZXZUb29scyJdLldh
cm5JbXBvcnQoInRvcnVzQnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRl
cyB0aGUgVmVydGV4RGF0YSBvZiB0aGUgTGluZVN5c3RlbQorICAgICAqIEBwYXJhbSBvcHRpb25z
IGFuIG9iamVjdCB1c2VkIHRvIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMg
Zm9yIHRoZSBMaW5lU3lzdGVtLCByZXF1aXJlZCBidXQgY2FuIGJlIGVtcHR5CisgICAgICogIC0g
bGluZXMgYW4gYXJyYXkgb2YgbGluZXMsIGVhY2ggbGluZSBiZWluZyBhbiBhcnJheSBvZiBzdWNj
ZXNzaXZlIFZlY3RvcjMKKyAgICAgKiAgLSBjb2xvcnMgYW4gYXJyYXkgb2YgbGluZSBjb2xvcnMs
IGVhY2ggb2YgdGhlIGxpbmUgY29sb3JzIGJlaW5nIGFuIGFycmF5IG9mIHN1Y2Nlc3NpdmUgQ29s
b3I0LCBvbmUgcGVyIGxpbmUgcG9pbnQKKyAgICAgKiBAcmV0dXJucyB0aGUgVmVydGV4RGF0YSBv
ZiB0aGUgTGluZVN5c3RlbQorICAgICAqLworICAgIFZlcnRleERhdGEuQ3JlYXRlTGluZVN5c3Rl
bSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoImxpbmVz
QnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlIHRoZSBWZXJ0ZXhEYXRh
IGZvciBhIERhc2hlZExpbmVzCisgICAgICogQHBhcmFtIG9wdGlvbnMgYW4gb2JqZWN0IHVzZWQg
dG8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIERhc2hlZExp
bmVzLCByZXF1aXJlZCBidXQgY2FuIGJlIGVtcHR5CisgICAgICogIC0gcG9pbnRzIGFuIGFycmF5
IHN1Y2Nlc3NpdmUgVmVjdG9yMworICAgICAqICAtIGRhc2hTaXplIHRoZSBzaXplIG9mIHRoZSBk
YXNoZXMgcmVsYXRpdmUgdG8gdGhlIGRhc2ggbnVtYmVyLCBvcHRpb25hbCwgZGVmYXVsdCAzCisg
ICAgICogIC0gZ2FwU2l6ZSB0aGUgc2l6ZSBvZiB0aGUgZ2FwIGJldHdlZW4gdHdvIHN1Y2Nlc3Np
dmUgZGFzaGVzIHJlbGF0aXZlIHRvIHRoZSBkYXNoIG51bWJlciwgb3B0aW9uYWwsIGRlZmF1bHQg
MQorICAgICAqICAtIGRhc2hOYiB0aGUgaW50ZW5kZWQgdG90YWwgbnVtYmVyIG9mIGRhc2hlcywg
b3B0aW9uYWwsIGRlZmF1bHQgMjAwCisgICAgICogQHJldHVybnMgdGhlIFZlcnRleERhdGEgZm9y
IHRoZSBEYXNoZWRMaW5lcworICAgICAqLworICAgIFZlcnRleERhdGEuQ3JlYXRlRGFzaGVkTGlu
ZXMgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJsaW5l
c0J1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgdGhlIFZlcnRleERh
dGEgZm9yIGEgR3JvdW5kCisgICAgICogQHBhcmFtIG9wdGlvbnMgYW4gb2JqZWN0IHVzZWQgdG8g
c2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIEdyb3VuZCwgcmVx
dWlyZWQgYnV0IGNhbiBiZSBlbXB0eQorICAgICAqICAtIHdpZHRoIHRoZSB3aWR0aCAoeCBkaXJl
Y3Rpb24pIG9mIHRoZSBncm91bmQsIG9wdGlvbmFsLCBkZWZhdWx0IDEKKyAgICAgKiAgLSBoZWln
aHQgdGhlIGhlaWdodCAoeiBkaXJlY3Rpb24pIG9mIHRoZSBncm91bmQsIG9wdGlvbmFsLCBkZWZh
dWx0IDEKKyAgICAgKiAgLSBzdWJkaXZpc2lvbnMgdGhlIG51bWJlciBvZiBzdWJkaXZpc2lvbnMg
cGVyIHNpZGUsIG9wdGlvbmFsLCBkZWZhdWx0IDEKKyAgICAgKiBAcmV0dXJucyB0aGUgVmVydGV4
RGF0YSBvZiB0aGUgR3JvdW5kCisgICAgICovCisgICAgVmVydGV4RGF0YS5DcmVhdGVHcm91bmQg
PSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJncm91bmRC
dWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBWZXJ0ZXhEYXRh
IGZvciBhIFRpbGVkR3JvdW5kIGJ5IHN1YmRpdmlkaW5nIHRoZSBncm91bmQgaW50byB0aWxlcwor
ICAgICAqIEBwYXJhbSBvcHRpb25zIGFuIG9iamVjdCB1c2VkIHRvIHNldCB0aGUgZm9sbG93aW5n
IG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBHcm91bmQsIHJlcXVpcmVkIGJ1dCBjYW4gYmUg
ZW1wdHkKKyAgICAgICogKiB4bWluIHRoZSBncm91bmQgbWluaW11bSBYIGNvb3JkaW5hdGUsIG9w
dGlvbmFsLCBkZWZhdWx0IC0xCisgICAgICAqICogem1pbiB0aGUgZ3JvdW5kIG1pbmltdW0gWiBj
b29yZGluYXRlLCBvcHRpb25hbCwgZGVmYXVsdCAtMQorICAgICAgKiAqIHhtYXggdGhlIGdyb3Vu
ZCBtYXhpbXVtIFggY29vcmRpbmF0ZSwgb3B0aW9uYWwsIGRlZmF1bHQgMQorICAgICAgKiAqIHpt
YXggdGhlIGdyb3VuZCBtYXhpbXVtIFogY29vcmRpbmF0ZSwgb3B0aW9uYWwsIGRlZmF1bHQgMQor
ICAgICAgKiAqIHN1YmRpdmlzaW9ucyBhIGphdmFzY3JpcHQgb2JqZWN0IHt3OiBwb3NpdGl2ZSBp
bnRlZ2VyLCBoOiBwb3NpdGl2ZSBpbnRlZ2VyfSwgYHdgIGFuZCBgaGAgYXJlIHRoZSBudW1iZXJz
IG9mIHN1YmRpdmlzaW9ucyBvbiB0aGUgZ3JvdW5kIHdpZHRoIGFuZCBoZWlnaHQgY3JlYXRpbmcg
J3RpbGVzJywgZGVmYXVsdCB7dzogNiwgaDogNn0KKyAgICAgICogKiBwcmVjaXNpb24gYSBqYXZh
c2NyaXB0IG9iamVjdCB7dzogcG9zaXRpdmUgaW50ZWdlciwgaDogcG9zaXRpdmUgaW50ZWdlcn0s
IGB3YCBhbmQgYGhgIGFyZSB0aGUgbnVtYmVycyBvZiBzdWJkaXZpc2lvbnMgb24gdGhlIHRpbGUg
d2lkdGggYW5kIGhlaWdodCwgZGVmYXVsdCB7dzogMiwgaDogMn0KKyAgICAgKiBAcmV0dXJucyB0
aGUgVmVydGV4RGF0YSBvZiB0aGUgVGlsZWRHcm91bmQKKyAgICAgKi8KKyAgICBWZXJ0ZXhEYXRh
LkNyZWF0ZVRpbGVkR3JvdW5kID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICAgICAgdGhyb3cg
X01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siX0RldlRvb2xzIl0u
V2FybkltcG9ydCgiZ3JvdW5kQnVpbGRlciIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyB0aGUgVmVydGV4RGF0YSBvZiB0aGUgR3JvdW5kIGRlc2lnbmVkIGZyb20gYSBoZWlnaHRt
YXAKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBhbiBvYmplY3QgdXNlZCB0byBzZXQgdGhlIGZvbGxv
d2luZyBwYXJhbWV0ZXJzIGZvciB0aGUgR3JvdW5kLCByZXF1aXJlZCBhbmQgcHJvdmlkZWQgYnkg
TWVzaEJ1aWxkZXIuQ3JlYXRlR3JvdW5kRnJvbUhlaWdodE1hcAorICAgICAgKiAqIHdpZHRoIHRo
ZSB3aWR0aCAoeCBkaXJlY3Rpb24pIG9mIHRoZSBncm91bmQKKyAgICAgICogKiBoZWlnaHQgdGhl
IGhlaWdodCAoeiBkaXJlY3Rpb24pIG9mIHRoZSBncm91bmQKKyAgICAgICogKiBzdWJkaXZpc2lv
bnMgdGhlIG51bWJlciBvZiBzdWJkaXZpc2lvbnMgcGVyIHNpZGUKKyAgICAgICogKiBtaW5IZWln
aHQgdGhlIG1pbmltdW0gYWx0aXR1ZGUgb24gdGhlIGdyb3VuZCwgb3B0aW9uYWwsIGRlZmF1bHQg
MAorICAgICAgKiAqIG1heEhlaWdodCB0aGUgbWF4aW11bSBhbHRpdHVkZSBvbiB0aGUgZ3JvdW5k
LCBvcHRpb25hbCBkZWZhdWx0IDEKKyAgICAgICogKiBjb2xvckZpbHRlciB0aGUgZmlsdGVyIHRv
IGFwcGx5IHRvIHRoZSBpbWFnZSBwaXhlbCBjb2xvcnMgdG8gY29tcHV0ZSB0aGUgaGVpZ2h0LCBv
cHRpb25hbCBDb2xvcjMsIGRlZmF1bHQgKDAuMywgMC41OSwgMC4xMSkKKyAgICAgICogKiBidWZm
ZXIgdGhlIGFycmF5IGhvbGRpbmcgdGhlIGltYWdlIGNvbG9yIGRhdGEKKyAgICAgICogKiBidWZm
ZXJXaWR0aCB0aGUgd2lkdGggb2YgaW1hZ2UKKyAgICAgICogKiBidWZmZXJIZWlnaHQgdGhlIGhl
aWdodCBvZiBpbWFnZQorICAgICAgKiAqIGFscGhhRmlsdGVyIFJlbW92ZSBhbnkgZGF0YSB3aGVy
ZSB0aGUgYWxwaGEgY2hhbm5lbCBpcyBiZWxvdyB0aGlzIHZhbHVlLCBkZWZhdWx0cyAwIChhbGwg
ZGF0YSB2aXNpYmxlKQorICAgICAqIEByZXR1cm5zIHRoZSBWZXJ0ZXhEYXRhIG9mIHRoZSBHcm91
bmQgZGVzaWduZWQgZnJvbSBhIGhlaWdodG1hcAorICAgICAqLworICAgIFZlcnRleERhdGEuQ3Jl
YXRlR3JvdW5kRnJvbUhlaWdodE1hcCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICAgIHRo
cm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9EZXZUb29s
cyJdLldhcm5JbXBvcnQoImdyb3VuZEJ1aWxkZXIiKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgdGhlIFZlcnRleERhdGEgZm9yIGEgUGxhbmUKKyAgICAgKiBAcGFyYW0gb3B0aW9u
cyBhbiBvYmplY3QgdXNlZCB0byBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJz
IGZvciB0aGUgcGxhbmUsIHJlcXVpcmVkIGJ1dCBjYW4gYmUgZW1wdHkKKyAgICAgICogKiBzaXpl
IHNldHMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHBsYW5lIHRvIHRoZSB2YWx1ZSBvZiBz
aXplLCBvcHRpb25hbCBkZWZhdWx0IDEKKyAgICAgICogKiB3aWR0aCBzZXRzIHRoZSB3aWR0aCAo
eCBkaXJlY3Rpb24pIG9mIHRoZSBwbGFuZSwgb3ZlcndyaXRlcyB0aGUgd2lkdGggc2V0IGJ5IHNp
emUsIG9wdGlvbmFsLCBkZWZhdWx0IHNpemUKKyAgICAgICogKiBoZWlnaHQgc2V0cyB0aGUgaGVp
Z2h0ICh5IGRpcmVjdGlvbikgb2YgdGhlIHBsYW5lLCBvdmVyd3JpdGVzIHRoZSBoZWlnaHQgc2V0
IGJ5IHNpemUsIG9wdGlvbmFsLCBkZWZhdWx0IHNpemUKKyAgICAgICogKiBzaWRlT3JpZW50YXRp
b24gb3B0aW9uYWwgYW5kIHRha2VzIHRoZSB2YWx1ZXMgOiBNZXNoLkZST05UU0lERSAoZGVmYXVs
dCksIE1lc2guQkFDS1NJREUgb3IgTWVzaC5ET1VCTEVTSURFCisgICAgICAqICogZnJvbnRVdnMg
b25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHVzZWQgdG8g
Y2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgYXBwbHkg
b24gdGhlIGZyb250IHNpZGUsIG9wdGlvbmFsLCBkZWZhdWx0IHZlY3RvcjQgKDAsIDAsIDEsIDEp
CisgICAgICAqICogYmFja1VWcyBvbmx5IHVzYWJsZSB3aGVuIHlvdSBjcmVhdGUgYSBkb3VibGUt
c2lkZWQgbWVzaCwgdXNlZCB0byBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFn
ZSB0byBjcm9wIGFuZCBhcHBseSBvbiB0aGUgYmFjayBzaWRlLCBvcHRpb25hbCwgZGVmYXVsdCB2
ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAqIEByZXR1cm5zIHRoZSBWZXJ0ZXhEYXRhIG9mIHRo
ZSBib3gKKyAgICAgKi8KKyAgICBWZXJ0ZXhEYXRhLkNyZWF0ZVBsYW5lID0gZnVuY3Rpb24gKG9w
dGlvbnMpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgicGxhbmVCdWlsZGVyIik7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBWZXJ0ZXhEYXRhIG9mIHRoZSBEaXNjIG9y
IHJlZ3VsYXIgUG9seWdvbgorICAgICAqIEBwYXJhbSBvcHRpb25zIGFuIG9iamVjdCB1c2VkIHRv
IHNldCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBkaXNjLCByZXF1
aXJlZCBidXQgY2FuIGJlIGVtcHR5CisgICAgICAqICogcmFkaXVzIHRoZSByYWRpdXMgb2YgdGhl
IGRpc2MsIG9wdGlvbmFsIGRlZmF1bHQgMC41CisgICAgICAqICogdGVzc2VsbGF0aW9uIHRoZSBu
dW1iZXIgb2YgcG9seWdvbiBzaWRlcywgb3B0aW9uYWwsIGRlZmF1bHQgNjQKKyAgICAgICogKiBh
cmMgYSBudW1iZXIgZnJvbSAwIHRvIDEsIHRvIGNyZWF0ZSBhbiB1bmNsb3NlZCBwb2x5Z29uIGJh
c2VkIG9uIHRoZSBmcmFjdGlvbiBvZiB0aGUgY2lyY3VtZmVyZW5jZSBnaXZlbiBieSB0aGUgYXJj
IHZhbHVlLCBvcHRpb25hbCwgZGVmYXVsdCAxCisgICAgICAqICogc2lkZU9yaWVudGF0aW9uIG9w
dGlvbmFsIGFuZCB0YWtlcyB0aGUgdmFsdWVzIDogTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBN
ZXNoLkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lERQorICAgICAgKiAqIGZyb250VXZzIG9ubHkg
dXNhYmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29z
ZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRo
ZSBmcm9udCBzaWRlLCBvcHRpb25hbCwgZGVmYXVsdCB2ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAg
ICAgKiAqIGJhY2tVVnMgb25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVk
IG1lc2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8g
Y3JvcCBhbmQgYXBwbHkgb24gdGhlIGJhY2sgc2lkZSwgb3B0aW9uYWwsIGRlZmF1bHQgdmVjdG9y
NCAoMCwgMCwgMSwgMSkKKyAgICAgKiBAcmV0dXJucyB0aGUgVmVydGV4RGF0YSBvZiB0aGUgYm94
CisgICAgICovCisgICAgVmVydGV4RGF0YS5DcmVhdGVEaXNjID0gZnVuY3Rpb24gKG9wdGlvbnMp
IHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiZGlzY0J1aWxkZXIiKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIENyZWF0ZXMgdGhlIFZlcnRleERhdGEgZm9yIGFuIGlycmVndWxhciBQb2x5
Z29uIGluIHRoZSBYb1ogcGxhbmUgdXNpbmcgYSBtZXNoIGJ1aWx0IGJ5IHBvbHlnb25Ucmlhbmd1
bGF0aW9uLmJ1aWxkKCkKKyAgICAgKiBBbGwgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQgYnkgTWVz
aEJ1aWxkZXIuQ3JlYXRlUG9seWdvbiBhcyBuZWVkZWQKKyAgICAgKiBAcGFyYW0gcG9seWdvbiBh
IG1lc2ggYnVpbHQgZnJvbSBwb2x5Z29uVHJpYW5ndWxhdGlvbi5idWlsZCgpCisgICAgICogQHBh
cmFtIHNpZGVPcmllbnRhdGlvbiB0YWtlcyB0aGUgdmFsdWVzIE1lc2guRlJPTlRTSURFIChkZWZh
dWx0KSwgTWVzaC5CQUNLU0lERSBvciBNZXNoLkRPVUJMRVNJREUKKyAgICAgKiBAcGFyYW0gZlVW
IGFuIGFycmF5IG9mIFZlY3RvcjQgZWxlbWVudHMgdXNlZCB0byBzZXQgZGlmZmVyZW50IGltYWdl
cyB0byB0aGUgdG9wLCByaW5ncyBhbmQgYm90dG9tIHJlc3BlY3RpdmVseQorICAgICAqIEBwYXJh
bSBmQ29sb3JzIGFuIGFycmF5IG9mIENvbG9yMyBlbGVtZW50cyB1c2VkIHRvIHNldCBkaWZmZXJl
bnQgY29sb3JzIHRvIHRoZSB0b3AsIHJpbmdzIGFuZCBib3R0b20gcmVzcGVjdGl2ZWx5CisgICAg
ICogQHBhcmFtIGZyb250VVZzIG9ubHkgdXNhYmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJsZS1z
aWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdl
IHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBmcm9udCBzaWRlLCBvcHRpb25hbCwgZGVmYXVsdCB2
ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAqIEBwYXJhbSBiYWNrVVZzIG9ubHkgdXNhYmxlIHdo
ZW4geW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3aGF0IHBh
cnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBiYWNrIHNp
ZGUsIG9wdGlvbmFsLCBkZWZhdWx0IHZlY3RvcjQgKDAsIDAsIDEsIDEpCisgICAgICogQHJldHVy
bnMgdGhlIFZlcnRleERhdGEgb2YgdGhlIFBvbHlnb24KKyAgICAgKi8KKyAgICBWZXJ0ZXhEYXRh
LkNyZWF0ZVBvbHlnb24gPSBmdW5jdGlvbiAocG9seWdvbiwgc2lkZU9yaWVudGF0aW9uLCBmVVYs
IGZDb2xvcnMsIGZyb250VVZzLCBiYWNrVVZzKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQo
InBvbHlnb25CdWlsZGVyIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBW
ZXJ0ZXhEYXRhIG9mIHRoZSBJY29TcGhlcmUKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBhbiBvYmpl
Y3QgdXNlZCB0byBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUg
SWNvU3BoZXJlLCByZXF1aXJlZCBidXQgY2FuIGJlIGVtcHR5CisgICAgICAqICogcmFkaXVzIHRo
ZSByYWRpdXMgb2YgdGhlIEljb1NwaGVyZSwgb3B0aW9uYWwgZGVmYXVsdCAxCisgICAgICAqICog
cmFkaXVzWCBhbGxvd3Mgc3RyZXRjaGluZyBpbiB0aGUgeCBkaXJlY3Rpb24sIG9wdGlvbmFsLCBk
ZWZhdWx0IHJhZGl1cworICAgICAgKiAqIHJhZGl1c1kgYWxsb3dzIHN0cmV0Y2hpbmcgaW4gdGhl
IHkgZGlyZWN0aW9uLCBvcHRpb25hbCwgZGVmYXVsdCByYWRpdXMKKyAgICAgICogKiByYWRpdXNa
IGFsbG93cyBzdHJldGNoaW5nIGluIHRoZSB6IGRpcmVjdGlvbiwgb3B0aW9uYWwsIGRlZmF1bHQg
cmFkaXVzCisgICAgICAqICogZmxhdCB3aGVuIHRydWUgY3JlYXRlcyBhIGZsYXQgc2hhZGVkIG1l
c2gsIG9wdGlvbmFsLCBkZWZhdWx0IHRydWUKKyAgICAgICogKiBzdWJkaXZpc2lvbnMgaW5jcmVh
c2luZyB0aGUgc3ViZGl2aXNpb25zIGluY3JlYXNlcyB0aGUgbnVtYmVyIG9mIGZhY2VzLCBvcHRp
b25hbCwgZGVmYXVsdCA0CisgICAgICAqICogc2lkZU9yaWVudGF0aW9uIG9wdGlvbmFsIGFuZCB0
YWtlcyB0aGUgdmFsdWVzIDogTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBNZXNoLkJBQ0tTSURF
IG9yIE1lc2guRE9VQkxFU0lERQorICAgICAgKiAqIGZyb250VXZzIG9ubHkgdXNhYmxlIHdoZW4g
eW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3aGF0IHBhcnRz
IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBmcm9udCBzaWRl
LCBvcHRpb25hbCwgZGVmYXVsdCB2ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAgKiAqIGJhY2tV
VnMgb25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHVzZWQg
dG8gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgYXBw
bHkgb24gdGhlIGJhY2sgc2lkZSwgb3B0aW9uYWwsIGRlZmF1bHQgdmVjdG9yNCAoMCwgMCwgMSwg
MSkKKyAgICAgKiBAcmV0dXJucyB0aGUgVmVydGV4RGF0YSBvZiB0aGUgSWNvU3BoZXJlCisgICAg
ICovCisgICAgVmVydGV4RGF0YS5DcmVhdGVJY29TcGhlcmUgPSBmdW5jdGlvbiAob3B0aW9ucykg
eworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJpY29TcGhlcmVCdWlsZGVyIik7CisgICAgfTsK
KyAgICAvLyBpbnNwaXJlZCBmcm9tIC8vIGh0dHA6Ly9zdGVta29za2kuZ2l0aHViLmlvL1RocmVl
LmpzL1BvbHloZWRyYS5odG1sCisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0aGUgVmVydGV4RGF0
YSBmb3IgYSBQb2x5aGVkcm9uCisgICAgICogQHBhcmFtIG9wdGlvbnMgYW4gb2JqZWN0IHVzZWQg
dG8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHBvbHloZWRy
b24sIHJlcXVpcmVkIGJ1dCBjYW4gYmUgZW1wdHkKKyAgICAgKiAqIHR5cGUgcHJvdmlkZWQgdHlw
ZXMgYXJlOgorICAgICAqICAqIDAgOiBUZXRyYWhlZHJvbiwgMSA6IE9jdGFoZWRyb24sIDIgOiBE
b2RlY2FoZWRyb24sIDMgOiBJY29zYWhlZHJvbiwgNCA6IFJob21iaWN1Ym9jdGFoZWRyb24sIDUg
OiBUcmlhbmd1bGFyIFByaXNtLCA2IDogUGVudGFnb25hbCBQcmlzbSwgNyA6IEhleGFnb25hbCBQ
cmlzbSwgOCA6IFNxdWFyZSBQeXJhbWlkIChKMSkKKyAgICAgKiAgKiA5IDogUGVudGFnb25hbCBQ
eXJhbWlkIChKMiksIDEwIDogVHJpYW5ndWxhciBEaXB5cmFtaWQgKEoxMiksIDExIDogUGVudGFn
b25hbCBEaXB5cmFtaWQgKEoxMyksIDEyIDogRWxvbmdhdGVkIFNxdWFyZSBEaXB5cmFtaWQgKEox
NSksIDEzIDogRWxvbmdhdGVkIFBlbnRhZ29uYWwgRGlweXJhbWlkIChKMTYpLCAxNCA6IEVsb25n
YXRlZCBQZW50YWdvbmFsIEN1cG9sYSAoSjIwKQorICAgICAqICogc2l6ZSB0aGUgc2l6ZSBvZiB0
aGUgSWNvU3BoZXJlLCBvcHRpb25hbCBkZWZhdWx0IDEKKyAgICAgKiAqIHNpemVYIGFsbG93cyBz
dHJldGNoaW5nIGluIHRoZSB4IGRpcmVjdGlvbiwgb3B0aW9uYWwsIGRlZmF1bHQgc2l6ZQorICAg
ICAqICogc2l6ZVkgYWxsb3dzIHN0cmV0Y2hpbmcgaW4gdGhlIHkgZGlyZWN0aW9uLCBvcHRpb25h
bCwgZGVmYXVsdCBzaXplCisgICAgICogKiBzaXplWiBhbGxvd3Mgc3RyZXRjaGluZyBpbiB0aGUg
eiBkaXJlY3Rpb24sIG9wdGlvbmFsLCBkZWZhdWx0IHNpemUKKyAgICAgKiAqIGN1c3RvbSBhIG51
bWJlciB0aGF0IG92ZXJ3cml0ZXMgdGhlIHR5cGUgdG8gY3JlYXRlIGZyb20gYW4gZXh0ZW5kZWQg
c2V0IG9mIHBvbHloZWRyb24gZnJvbSBodHRwczovL3d3dy5iYWJ5bG9uanMtcGxheWdyb3VuZC5j
b20vIzIxUVJTSyMxNSB3aXRoIG1pbmltaXNlZCBlZGl0b3IKKyAgICAgKiAqIGZhY2VVViBhbiBh
cnJheSBvZiBWZWN0b3I0IGVsZW1lbnRzIHVzZWQgdG8gc2V0IGRpZmZlcmVudCBpbWFnZXMgdG8g
dGhlIHRvcCwgcmluZ3MgYW5kIGJvdHRvbSByZXNwZWN0aXZlbHkKKyAgICAgKiAqIGZhY2VDb2xv
cnMgYW4gYXJyYXkgb2YgQ29sb3IzIGVsZW1lbnRzIHVzZWQgdG8gc2V0IGRpZmZlcmVudCBjb2xv
cnMgdG8gdGhlIHRvcCwgcmluZ3MgYW5kIGJvdHRvbSByZXNwZWN0aXZlbHkKKyAgICAgKiAqIGZs
YXQgd2hlbiB0cnVlIGNyZWF0ZXMgYSBmbGF0IHNoYWRlZCBtZXNoLCBvcHRpb25hbCwgZGVmYXVs
dCB0cnVlCisgICAgICogKiBzdWJkaXZpc2lvbnMgaW5jcmVhc2luZyB0aGUgc3ViZGl2aXNpb25z
IGluY3JlYXNlcyB0aGUgbnVtYmVyIG9mIGZhY2VzLCBvcHRpb25hbCwgZGVmYXVsdCA0CisgICAg
ICogKiBzaWRlT3JpZW50YXRpb24gb3B0aW9uYWwgYW5kIHRha2VzIHRoZSB2YWx1ZXMgOiBNZXNo
LkZST05UU0lERSAoZGVmYXVsdCksIE1lc2guQkFDS1NJREUgb3IgTWVzaC5ET1VCTEVTSURFCisg
ICAgICogKiBmcm9udFV2cyBvbmx5IHVzYWJsZSB3aGVuIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lk
ZWQgbWVzaCwgdXNlZCB0byBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0
byBjcm9wIGFuZCBhcHBseSBvbiB0aGUgZnJvbnQgc2lkZSwgb3B0aW9uYWwsIGRlZmF1bHQgdmVj
dG9yNCAoMCwgMCwgMSwgMSkKKyAgICAgKiAqIGJhY2tVVnMgb25seSB1c2FibGUgd2hlbiB5b3Ug
Y3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFydHMgb2Yg
dGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgYXBwbHkgb24gdGhlIGJhY2sgc2lkZSwgb3B0
aW9uYWwsIGRlZmF1bHQgdmVjdG9yNCAoMCwgMCwgMSwgMSkKKyAgICAgKiBAcmV0dXJucyB0aGUg
VmVydGV4RGF0YSBvZiB0aGUgUG9seWhlZHJvbgorICAgICAqLworICAgIFZlcnRleERhdGEuQ3Jl
YXRlUG9seWhlZHJvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgICAgIHRocm93IF9NaXNj
X2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9EZXZUb29scyJdLldhcm5J
bXBvcnQoInBvbHloZWRyb25CdWlsZGVyIik7CisgICAgfTsKKyAgICAvLyBiYXNlZCBvbiBodHRw
Oi8vY29kZS5nb29nbGUuY29tL3AvYXdheTNkL3NvdXJjZS9icm93c2UvdHJ1bmsvZnAxMC9Bd2F5
M0Qvc3JjL2F3YXkzZC9wcmltaXRpdmVzL1RvcnVzS25vdC5hcz9zcGVjPXN2bjI0NzMmcj0yNDcz
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0aGUgVmVydGV4RGF0YSBmb3IgYSBUb3J1c0tub3QK
KyAgICAgKiBAcGFyYW0gb3B0aW9ucyBhbiBvYmplY3QgdXNlZCB0byBzZXQgdGhlIGZvbGxvd2lu
ZyBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgVG9ydXNLbm90LCByZXF1aXJlZCBidXQgY2Fu
IGJlIGVtcHR5CisgICAgICAqICogcmFkaXVzIHRoZSByYWRpdXMgb2YgdGhlIHRvcnVzIGtub3Qs
IG9wdGlvbmFsLCBkZWZhdWx0IDIKKyAgICAgICogKiB0dWJlIHRoZSB0aGlja25lc3Mgb2YgdGhl
IHR1YmUsIG9wdGlvbmFsLCBkZWZhdWx0IDAuNQorICAgICAgKiAqIHJhZGlhbFNlZ21lbnRzIHRo
ZSBudW1iZXIgb2Ygc2lkZXMgb24gZWFjaCB0dWJlIHNlZ21lbnRzLCBvcHRpb25hbCwgZGVmYXVs
dCAzMgorICAgICAgKiAqIHR1YnVsYXJTZWdtZW50cyB0aGUgbnVtYmVyIG9mIHR1YmVzIHRvIGRl
Y29tcG9zZSB0aGUga25vdCBpbnRvLCBvcHRpb25hbCwgZGVmYXVsdCAzMgorICAgICAgKiAqIHAg
dGhlIG51bWJlciBvZiB3aW5kaW5ncyBhcm91bmQgdGhlIHogYXhpcywgb3B0aW9uYWwsICBkZWZh
dWx0IDIKKyAgICAgICogKiBxIHRoZSBudW1iZXIgb2Ygd2luZGluZ3MgYXJvdW5kIHRoZSB4IGF4
aXMsIG9wdGlvbmFsLCAgZGVmYXVsdCAzCisgICAgICAqICogc2lkZU9yaWVudGF0aW9uIG9wdGlv
bmFsIGFuZCB0YWtlcyB0aGUgdmFsdWVzIDogTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBNZXNo
LkJBQ0tTSURFIG9yIE1lc2guRE9VQkxFU0lERQorICAgICAgKiAqIGZyb250VXZzIG9ubHkgdXNh
YmxlIHdoZW4geW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB1c2VkIHRvIGNob29zZSB3
aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIGFwcGx5IG9uIHRoZSBm
cm9udCBzaWRlLCBvcHRpb25hbCwgZGVmYXVsdCB2ZWN0b3I0ICgwLCAwLCAxLCAxKQorICAgICAg
KiAqIGJhY2tVVnMgb25seSB1c2FibGUgd2hlbiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1l
c2gsIHVzZWQgdG8gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3Jv
cCBhbmQgYXBwbHkgb24gdGhlIGJhY2sgc2lkZSwgb3B0aW9uYWwsIGRlZmF1bHQgdmVjdG9yNCAo
MCwgMCwgMSwgMSkKKyAgICAgKiBAcmV0dXJucyB0aGUgVmVydGV4RGF0YSBvZiB0aGUgVG9ydXMg
S25vdAorICAgICAqLworICAgIFZlcnRleERhdGEuQ3JlYXRlVG9ydXNLbm90ID0gZnVuY3Rpb24g
KG9wdGlvbnMpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgidG9ydXNLbm90QnVpbGRlciIp
OworICAgIH07CisgICAgLy8gVG9vbHMKKyAgICAvKioKKyAgICAgKiBDb21wdXRlIG5vcm1hbHMg
Zm9yIGdpdmVuIHBvc2l0aW9ucyBhbmQgaW5kaWNlcworICAgICAqIEBwYXJhbSBwb3NpdGlvbnMg
YW4gYXJyYXkgb2YgdmVydGV4IHBvc2l0aW9ucywgWy4uLi4sIHgsIHksIHosIC4uLi4uLl0KKyAg
ICAgKiBAcGFyYW0gaW5kaWNlcyBhbiBhcnJheSBvZiBpbmRpY2VzIGluIGdyb3VwcyBvZiB0aHJl
ZSBmb3IgZWFjaCB0cmlhbmd1bGFyIGZhY2V0LCBbLi4uLiwgaSwgaiwgaywgLi4uLi4uXQorICAg
ICAqIEBwYXJhbSBub3JtYWxzIGFuIGFycmF5IG9mIHZlcnRleCBub3JtYWxzLCBbLi4uLiwgeCwg
eSwgeiwgLi4uLi4uXQorICAgICAqIEBwYXJhbSBvcHRpb25zIGFuIG9iamVjdCB1c2VkIHRvIHNl
dCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBUb3J1c0tub3QsIG9w
dGlvbmFsCisgICAgICAqICogZmFjZXROb3JtYWxzIDogb3B0aW9uYWwgYXJyYXkgb2YgZmFjZXQg
bm9ybWFscyAodmVjdG9yMykKKyAgICAgICogKiBmYWNldFBvc2l0aW9ucyA6IG9wdGlvbmFsIGFy
cmF5IG9mIGZhY2V0IHBvc2l0aW9ucyAodmVjdG9yMykKKyAgICAgICogKiBmYWNldFBhcnRpdGlv
bmluZyA6IG9wdGlvbmFsIHBhcnRpdGlvbmluZyBhcnJheS4gZmFjZXRQb3NpdGlvbnMgaXMgcmVx
dWlyZWQgZm9yIGZhY2V0UGFydGl0aW9uaW5nIGNvbXB1dGF0aW9uCisgICAgICAqICogcmF0aW8g
OiBvcHRpb25hbCBwYXJ0aXRpb25pbmcgcmF0aW8gLyBib3VuZGluZyBib3gsIHJlcXVpcmVkIGZv
ciBmYWNldFBhcnRpdGlvbmluZyBjb21wdXRhdGlvbgorICAgICAgKiAqIGJJbmZvIDogb3B0aW9u
YWwgYm91bmRpbmcgaW5mbywgcmVxdWlyZWQgZm9yIGZhY2V0UGFydGl0aW9uaW5nIGNvbXB1dGF0
aW9uCisgICAgICAqICogYmJTaXplIDogb3B0aW9uYWwgYm91bmRpbmcgYm94IHNpemUgZGF0YSwg
cmVxdWlyZWQgZm9yIGZhY2V0UGFydGl0aW9uaW5nIGNvbXB1dGF0aW9uCisgICAgICAqICogc3Vi
RGl2IDogb3B0aW9uYWwgcGFydGl0aW9uaW5nIGRhdGEgYWJvdXQgc3ViZGl2c2lvbnMgb24gIGVh
Y2ggYXhpcyAoaW50KSwgcmVxdWlyZWQgZm9yIGZhY2V0UGFydGl0aW9uaW5nIGNvbXB1dGF0aW9u
CisgICAgICAqICogdXNlUmlnaHRIYW5kZWRTeXN0ZW06IG9wdGlvbmFsIGJvb2xlYW4gdG8gZm9y
IHJpZ2h0IGhhbmRlZCBzeXN0ZW0gY29tcHV0YXRpb24KKyAgICAgICogKiBkZXB0aFNvcnQgOiBv
cHRpb25hbCBib29sZWFuIHRvIGVuYWJsZSB0aGUgZmFjZXQgZGVwdGggc29ydCBjb21wdXRhdGlv
bgorICAgICAgKiAqIGRpc3RhbmNlVG8gOiBvcHRpb25hbCBWZWN0b3IzIHRvIGNvbXB1dGUgdGhl
IGZhY2V0IGRlcHRoIGZyb20gdGhpcyBsb2NhdGlvbgorICAgICAgKiAqIGRlcHRoU29ydGVkRmFj
ZXRzIDogb3B0aW9uYWwgYXJyYXkgb2YgZGVwdGhTb3J0ZWRGYWNldHMgdG8gc3RvcmUgdGhlIGZh
Y2V0IGRpc3RhbmNlcyBmcm9tIHRoZSByZWZlcmVuY2UgbG9jYXRpb24KKyAgICAgKi8KKyAgICBW
ZXJ0ZXhEYXRhLkNvbXB1dGVOb3JtYWxzID0gZnVuY3Rpb24gKHBvc2l0aW9ucywgaW5kaWNlcywg
bm9ybWFscywgb3B0aW9ucykgeworICAgICAgICAvLyB0ZW1wb3Jhcnkgc2NhbGFyIHZhcmlhYmxl
cworICAgICAgICB2YXIgaW5kZXggPSAwOyAvLyBmYWNldCBpbmRleAorICAgICAgICB2YXIgcDFw
MnggPSAwLjA7IC8vIHAxcDIgdmVjdG9yIHggY29vcmRpbmF0ZQorICAgICAgICB2YXIgcDFwMnkg
PSAwLjA7IC8vIHAxcDIgdmVjdG9yIHkgY29vcmRpbmF0ZQorICAgICAgICB2YXIgcDFwMnogPSAw
LjA7IC8vIHAxcDIgdmVjdG9yIHogY29vcmRpbmF0ZQorICAgICAgICB2YXIgcDNwMnggPSAwLjA7
IC8vIHAzcDIgdmVjdG9yIHggY29vcmRpbmF0ZQorICAgICAgICB2YXIgcDNwMnkgPSAwLjA7IC8v
IHAzcDIgdmVjdG9yIHkgY29vcmRpbmF0ZQorICAgICAgICB2YXIgcDNwMnogPSAwLjA7IC8vIHAz
cDIgdmVjdG9yIHogY29vcmRpbmF0ZQorICAgICAgICB2YXIgZmFjZU5vcm1hbHggPSAwLjA7IC8v
IGZhY2V0IG5vcm1hbCB4IGNvb3JkaW5hdGUKKyAgICAgICAgdmFyIGZhY2VOb3JtYWx5ID0gMC4w
OyAvLyBmYWNldCBub3JtYWwgeSBjb29yZGluYXRlCisgICAgICAgIHZhciBmYWNlTm9ybWFseiA9
IDAuMDsgLy8gZmFjZXQgbm9ybWFsIHogY29vcmRpbmF0ZQorICAgICAgICB2YXIgbGVuZ3RoID0g
MC4wOyAvLyBmYWNldCBub3JtYWwgbGVuZ3RoIGJlZm9yZSBub3JtYWxpemF0aW9uCisgICAgICAg
IHZhciB2MXggPSAwOyAvLyB2ZWN0b3IxIHggaW5kZXggaW4gdGhlIHBvc2l0aW9ucyBhcnJheQor
ICAgICAgICB2YXIgdjF5ID0gMDsgLy8gdmVjdG9yMSB5IGluZGV4IGluIHRoZSBwb3NpdGlvbnMg
YXJyYXkKKyAgICAgICAgdmFyIHYxeiA9IDA7IC8vIHZlY3RvcjEgeiBpbmRleCBpbiB0aGUgcG9z
aXRpb25zIGFycmF5CisgICAgICAgIHZhciB2MnggPSAwOyAvLyB2ZWN0b3IyIHggaW5kZXggaW4g
dGhlIHBvc2l0aW9ucyBhcnJheQorICAgICAgICB2YXIgdjJ5ID0gMDsgLy8gdmVjdG9yMiB5IGlu
ZGV4IGluIHRoZSBwb3NpdGlvbnMgYXJyYXkKKyAgICAgICAgdmFyIHYyeiA9IDA7IC8vIHZlY3Rv
cjIgeiBpbmRleCBpbiB0aGUgcG9zaXRpb25zIGFycmF5CisgICAgICAgIHZhciB2M3ggPSAwOyAv
LyB2ZWN0b3IzIHggaW5kZXggaW4gdGhlIHBvc2l0aW9ucyBhcnJheQorICAgICAgICB2YXIgdjN5
ID0gMDsgLy8gdmVjdG9yMyB5IGluZGV4IGluIHRoZSBwb3NpdGlvbnMgYXJyYXkKKyAgICAgICAg
dmFyIHYzeiA9IDA7IC8vIHZlY3RvcjMgeiBpbmRleCBpbiB0aGUgcG9zaXRpb25zIGFycmF5Cisg
ICAgICAgIHZhciBjb21wdXRlRmFjZXROb3JtYWxzID0gZmFsc2U7CisgICAgICAgIHZhciBjb21w
dXRlRmFjZXRQb3NpdGlvbnMgPSBmYWxzZTsKKyAgICAgICAgdmFyIGNvbXB1dGVGYWNldFBhcnRp
dGlvbmluZyA9IGZhbHNlOworICAgICAgICB2YXIgY29tcHV0ZURlcHRoU29ydCA9IGZhbHNlOwor
ICAgICAgICB2YXIgZmFjZU5vcm1hbFNpZ24gPSAxOworICAgICAgICB2YXIgcmF0aW8gPSAwOwor
ICAgICAgICB2YXIgZGlzdGFuY2VUbyA9IG51bGw7CisgICAgICAgIGlmIChvcHRpb25zKSB7Cisg
ICAgICAgICAgICBjb21wdXRlRmFjZXROb3JtYWxzID0gKG9wdGlvbnMuZmFjZXROb3JtYWxzKSA/
IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgIGNvbXB1dGVGYWNldFBvc2l0aW9ucyA9IChvcHRp
b25zLmZhY2V0UG9zaXRpb25zKSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgIGNvbXB1dGVG
YWNldFBhcnRpdGlvbmluZyA9IChvcHRpb25zLmZhY2V0UGFydGl0aW9uaW5nKSA/IHRydWUgOiBm
YWxzZTsKKyAgICAgICAgICAgIGZhY2VOb3JtYWxTaWduID0gKG9wdGlvbnMudXNlUmlnaHRIYW5k
ZWRTeXN0ZW0gPT09IHRydWUpID8gLTEgOiAxOworICAgICAgICAgICAgcmF0aW8gPSBvcHRpb25z
LnJhdGlvIHx8IDA7CisgICAgICAgICAgICBjb21wdXRlRGVwdGhTb3J0ID0gKG9wdGlvbnMuZGVw
dGhTb3J0KSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgIGRpc3RhbmNlVG8gPSAob3B0aW9u
cy5kaXN0YW5jZVRvKTsKKyAgICAgICAgICAgIGlmIChjb21wdXRlRGVwdGhTb3J0KSB7CisgICAg
ICAgICAgICAgICAgaWYgKGRpc3RhbmNlVG8gPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAg
ICAgICAgICBkaXN0YW5jZVRvID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHZhciBkZXB0aFNvcnRlZEZhY2V0cyA9IG9wdGlvbnMuZGVwdGhTb3J0ZWRGYWNl
dHM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gZmFjZXRQYXJ0aXRpb25p
bmcgcmVpbml0IGlmIG5lZWRlZAorICAgICAgICB2YXIgeFN1YlJhdGlvID0gMDsKKyAgICAgICAg
dmFyIHlTdWJSYXRpbyA9IDA7CisgICAgICAgIHZhciB6U3ViUmF0aW8gPSAwOworICAgICAgICB2
YXIgc3ViU3EgPSAwOworICAgICAgICBpZiAoY29tcHV0ZUZhY2V0UGFydGl0aW9uaW5nICYmIG9w
dGlvbnMgJiYgb3B0aW9ucy5iYlNpemUpIHsKKyAgICAgICAgICAgIHZhciBveCA9IDA7IC8vIFgg
cGFydGl0aW9uaW5nIGluZGV4IGZvciBmYWNldCBwb3NpdGlvbgorICAgICAgICAgICAgdmFyIG95
ID0gMDsgLy8gWSBwYXJ0aW5pb25pbmcgaW5kZXggZm9yIGZhY2V0IHBvc2l0aW9uCisgICAgICAg
ICAgICB2YXIgb3ogPSAwOyAvLyBaIHBhcnRpbmlvbmluZyBpbmRleCBmb3IgZmFjZXQgcG9zaXRp
b24KKyAgICAgICAgICAgIHZhciBiMXggPSAwOyAvLyBYIHBhcnRpdGlvbmluZyBpbmRleCBmb3Ig
ZmFjZXQgdjEgdmVydGV4CisgICAgICAgICAgICB2YXIgYjF5ID0gMDsgLy8gWSBwYXJ0aXRpb25p
bmcgaW5kZXggZm9yIGZhY2V0IHYxIHZlcnRleAorICAgICAgICAgICAgdmFyIGIxeiA9IDA7IC8v
IHogcGFydGl0aW9uaW5nIGluZGV4IGZvciBmYWNldCB2MSB2ZXJ0ZXgKKyAgICAgICAgICAgIHZh
ciBiMnggPSAwOyAvLyBYIHBhcnRpdGlvbmluZyBpbmRleCBmb3IgZmFjZXQgdjIgdmVydGV4Cisg
ICAgICAgICAgICB2YXIgYjJ5ID0gMDsgLy8gWSBwYXJ0aXRpb25pbmcgaW5kZXggZm9yIGZhY2V0
IHYyIHZlcnRleAorICAgICAgICAgICAgdmFyIGIyeiA9IDA7IC8vIFogcGFydGl0aW9uaW5nIGlu
ZGV4IGZvciBmYWNldCB2MiB2ZXJ0ZXgKKyAgICAgICAgICAgIHZhciBiM3ggPSAwOyAvLyBYIHBh
cnRpdGlvbmluZyBpbmRleCBmb3IgZmFjZXQgdjMgdmVydGV4CisgICAgICAgICAgICB2YXIgYjN5
ID0gMDsgLy8gWSBwYXJ0aXRpb25pbmcgaW5kZXggZm9yIGZhY2V0IHYzIHZlcnRleAorICAgICAg
ICAgICAgdmFyIGIzeiA9IDA7IC8vIFogcGFydGl0aW9uaW5nIGluZGV4IGZvciBmYWNldCB2MyB2
ZXJ0ZXgKKyAgICAgICAgICAgIHZhciBibG9ja19pZHhfbyA9IDA7IC8vIGZhY2V0IGJhcnljZW50
ZXIgYmxvY2sgaW5kZXgKKyAgICAgICAgICAgIHZhciBibG9ja19pZHhfdjEgPSAwOyAvLyB2MSB2
ZXJ0ZXggYmxvY2sgaW5kZXgKKyAgICAgICAgICAgIHZhciBibG9ja19pZHhfdjIgPSAwOyAvLyB2
MiB2ZXJ0ZXggYmxvY2sgaW5kZXgKKyAgICAgICAgICAgIHZhciBibG9ja19pZHhfdjMgPSAwOyAv
LyB2MyB2ZXJ0ZXggYmxvY2sgaW5kZXgKKyAgICAgICAgICAgIHZhciBiYlNpemVNYXggPSAob3B0
aW9ucy5iYlNpemUueCA+IG9wdGlvbnMuYmJTaXplLnkpID8gb3B0aW9ucy5iYlNpemUueCA6IG9w
dGlvbnMuYmJTaXplLnk7CisgICAgICAgICAgICBiYlNpemVNYXggPSAoYmJTaXplTWF4ID4gb3B0
aW9ucy5iYlNpemUueikgPyBiYlNpemVNYXggOiBvcHRpb25zLmJiU2l6ZS56OworICAgICAgICAg
ICAgeFN1YlJhdGlvID0gb3B0aW9ucy5zdWJEaXYuWCAqIHJhdGlvIC8gb3B0aW9ucy5iYlNpemUu
eDsKKyAgICAgICAgICAgIHlTdWJSYXRpbyA9IG9wdGlvbnMuc3ViRGl2LlkgKiByYXRpbyAvIG9w
dGlvbnMuYmJTaXplLnk7CisgICAgICAgICAgICB6U3ViUmF0aW8gPSBvcHRpb25zLnN1YkRpdi5a
ICogcmF0aW8gLyBvcHRpb25zLmJiU2l6ZS56OworICAgICAgICAgICAgc3ViU3EgPSBvcHRpb25z
LnN1YkRpdi5tYXggKiBvcHRpb25zLnN1YkRpdi5tYXg7CisgICAgICAgICAgICBvcHRpb25zLmZh
Y2V0UGFydGl0aW9uaW5nLmxlbmd0aCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgLy8gcmVzZXQg
dGhlIG5vcm1hbHMKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcG9zaXRpb25zLmxl
bmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgbm9ybWFsc1tpbmRleF0gPSAwLjA7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gTG9vcCA6IDEgaW5kaWNlIHRyaXBsZXQgPSAxIGZhY2V0CisgICAg
ICAgIHZhciBuYkZhY2VzID0gKGluZGljZXMubGVuZ3RoIC8gMykgfCAwOworICAgICAgICBmb3Ig
KGluZGV4ID0gMDsgaW5kZXggPCBuYkZhY2VzOyBpbmRleCsrKSB7CisgICAgICAgICAgICAvLyBn
ZXQgdGhlIGluZGV4ZXMgb2YgdGhlIGNvb3JkaW5hdGVzIG9mIGVhY2ggdmVydGV4IG9mIHRoZSBm
YWNldAorICAgICAgICAgICAgdjF4ID0gaW5kaWNlc1tpbmRleCAqIDNdICogMzsKKyAgICAgICAg
ICAgIHYxeSA9IHYxeCArIDE7CisgICAgICAgICAgICB2MXogPSB2MXggKyAyOworICAgICAgICAg
ICAgdjJ4ID0gaW5kaWNlc1tpbmRleCAqIDMgKyAxXSAqIDM7CisgICAgICAgICAgICB2MnkgPSB2
MnggKyAxOworICAgICAgICAgICAgdjJ6ID0gdjJ4ICsgMjsKKyAgICAgICAgICAgIHYzeCA9IGlu
ZGljZXNbaW5kZXggKiAzICsgMl0gKiAzOworICAgICAgICAgICAgdjN5ID0gdjN4ICsgMTsKKyAg
ICAgICAgICAgIHYzeiA9IHYzeCArIDI7CisgICAgICAgICAgICBwMXAyeCA9IHBvc2l0aW9uc1t2
MXhdIC0gcG9zaXRpb25zW3YyeF07IC8vIGNvbXB1dGUgdHdvIHZlY3RvcnMgcGVyIGZhY2V0IDog
cDFwMiBhbmQgcDNwMgorICAgICAgICAgICAgcDFwMnkgPSBwb3NpdGlvbnNbdjF5XSAtIHBvc2l0
aW9uc1t2MnldOworICAgICAgICAgICAgcDFwMnogPSBwb3NpdGlvbnNbdjF6XSAtIHBvc2l0aW9u
c1t2MnpdOworICAgICAgICAgICAgcDNwMnggPSBwb3NpdGlvbnNbdjN4XSAtIHBvc2l0aW9uc1t2
MnhdOworICAgICAgICAgICAgcDNwMnkgPSBwb3NpdGlvbnNbdjN5XSAtIHBvc2l0aW9uc1t2Mnld
OworICAgICAgICAgICAgcDNwMnogPSBwb3NpdGlvbnNbdjN6XSAtIHBvc2l0aW9uc1t2MnpdOwor
ICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgZmFjZSBub3JtYWwgd2l0aCB0aGUgY3Jvc3MgcHJv
ZHVjdAorICAgICAgICAgICAgZmFjZU5vcm1hbHggPSBmYWNlTm9ybWFsU2lnbiAqIChwMXAyeSAq
IHAzcDJ6IC0gcDFwMnogKiBwM3AyeSk7CisgICAgICAgICAgICBmYWNlTm9ybWFseSA9IGZhY2VO
b3JtYWxTaWduICogKHAxcDJ6ICogcDNwMnggLSBwMXAyeCAqIHAzcDJ6KTsKKyAgICAgICAgICAg
IGZhY2VOb3JtYWx6ID0gZmFjZU5vcm1hbFNpZ24gKiAocDFwMnggKiBwM3AyeSAtIHAxcDJ5ICog
cDNwMngpOworICAgICAgICAgICAgLy8gbm9ybWFsaXplIHRoaXMgbm9ybWFsIGFuZCBzdG9yZSBp
dCBpbiB0aGUgYXJyYXkgZmFjZXREYXRhCisgICAgICAgICAgICBsZW5ndGggPSBNYXRoLnNxcnQo
ZmFjZU5vcm1hbHggKiBmYWNlTm9ybWFseCArIGZhY2VOb3JtYWx5ICogZmFjZU5vcm1hbHkgKyBm
YWNlTm9ybWFseiAqIGZhY2VOb3JtYWx6KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IChsZW5ndGgg
PT09IDApID8gMS4wIDogbGVuZ3RoOworICAgICAgICAgICAgZmFjZU5vcm1hbHggLz0gbGVuZ3Ro
OworICAgICAgICAgICAgZmFjZU5vcm1hbHkgLz0gbGVuZ3RoOworICAgICAgICAgICAgZmFjZU5v
cm1hbHogLz0gbGVuZ3RoOworICAgICAgICAgICAgaWYgKGNvbXB1dGVGYWNldE5vcm1hbHMgJiYg
b3B0aW9ucykgeworICAgICAgICAgICAgICAgIG9wdGlvbnMuZmFjZXROb3JtYWxzW2luZGV4XS54
ID0gZmFjZU5vcm1hbHg7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5mYWNldE5vcm1hbHNbaW5k
ZXhdLnkgPSBmYWNlTm9ybWFseTsKKyAgICAgICAgICAgICAgICBvcHRpb25zLmZhY2V0Tm9ybWFs
c1tpbmRleF0ueiA9IGZhY2VOb3JtYWx6OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGNvbXB1dGVGYWNldFBvc2l0aW9ucyAmJiBvcHRpb25zKSB7CisgICAgICAgICAgICAgICAgLy8g
Y29tcHV0ZSBhbmQgdGhlIGZhY2V0IGJhcnljZW50ZXIgY29vcmRpbmF0ZXMgaW4gdGhlIGFycmF5
IGZhY2V0UG9zaXRpb25zCisgICAgICAgICAgICAgICAgb3B0aW9ucy5mYWNldFBvc2l0aW9uc1tp
bmRleF0ueCA9IChwb3NpdGlvbnNbdjF4XSArIHBvc2l0aW9uc1t2MnhdICsgcG9zaXRpb25zW3Yz
eF0pIC8gMy4wOworICAgICAgICAgICAgICAgIG9wdGlvbnMuZmFjZXRQb3NpdGlvbnNbaW5kZXhd
LnkgPSAocG9zaXRpb25zW3YxeV0gKyBwb3NpdGlvbnNbdjJ5XSArIHBvc2l0aW9uc1t2M3ldKSAv
IDMuMDsKKyAgICAgICAgICAgICAgICBvcHRpb25zLmZhY2V0UG9zaXRpb25zW2luZGV4XS56ID0g
KHBvc2l0aW9uc1t2MXpdICsgcG9zaXRpb25zW3Yyel0gKyBwb3NpdGlvbnNbdjN6XSkgLyAzLjA7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29tcHV0ZUZhY2V0UGFydGl0aW9uaW5n
ICYmIG9wdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAvLyBzdG9yZSB0aGUgZmFjZXQgaW5kZXhl
cyBpbiBhcnJheXMgaW4gdGhlIG1haW4gZmFjZXRQYXJ0aXRpb25pbmcgYXJyYXkgOgorICAgICAg
ICAgICAgICAgIC8vIGNvbXB1dGUgZWFjaCBmYWNldCB2ZXJ0ZXggKCsgZmFjZXQgYmFyeWNlbnRl
cikgaW5kZXggaW4gdGhlIHBhcnRpbmlvbmcgYXJyYXkKKyAgICAgICAgICAgICAgICBveCA9IE1h
dGguZmxvb3IoKG9wdGlvbnMuZmFjZXRQb3NpdGlvbnNbaW5kZXhdLnggLSBvcHRpb25zLmJJbmZv
Lm1pbmltdW0ueCAqIHJhdGlvKSAqIHhTdWJSYXRpbyk7CisgICAgICAgICAgICAgICAgb3kgPSBN
YXRoLmZsb29yKChvcHRpb25zLmZhY2V0UG9zaXRpb25zW2luZGV4XS55IC0gb3B0aW9ucy5iSW5m
by5taW5pbXVtLnkgKiByYXRpbykgKiB5U3ViUmF0aW8pOworICAgICAgICAgICAgICAgIG96ID0g
TWF0aC5mbG9vcigob3B0aW9ucy5mYWNldFBvc2l0aW9uc1tpbmRleF0ueiAtIG9wdGlvbnMuYklu
Zm8ubWluaW11bS56ICogcmF0aW8pICogelN1YlJhdGlvKTsKKyAgICAgICAgICAgICAgICBiMXgg
PSBNYXRoLmZsb29yKChwb3NpdGlvbnNbdjF4XSAtIG9wdGlvbnMuYkluZm8ubWluaW11bS54ICog
cmF0aW8pICogeFN1YlJhdGlvKTsKKyAgICAgICAgICAgICAgICBiMXkgPSBNYXRoLmZsb29yKChw
b3NpdGlvbnNbdjF5XSAtIG9wdGlvbnMuYkluZm8ubWluaW11bS55ICogcmF0aW8pICogeVN1YlJh
dGlvKTsKKyAgICAgICAgICAgICAgICBiMXogPSBNYXRoLmZsb29yKChwb3NpdGlvbnNbdjF6XSAt
IG9wdGlvbnMuYkluZm8ubWluaW11bS56ICogcmF0aW8pICogelN1YlJhdGlvKTsKKyAgICAgICAg
ICAgICAgICBiMnggPSBNYXRoLmZsb29yKChwb3NpdGlvbnNbdjJ4XSAtIG9wdGlvbnMuYkluZm8u
bWluaW11bS54ICogcmF0aW8pICogeFN1YlJhdGlvKTsKKyAgICAgICAgICAgICAgICBiMnkgPSBN
YXRoLmZsb29yKChwb3NpdGlvbnNbdjJ5XSAtIG9wdGlvbnMuYkluZm8ubWluaW11bS55ICogcmF0
aW8pICogeVN1YlJhdGlvKTsKKyAgICAgICAgICAgICAgICBiMnogPSBNYXRoLmZsb29yKChwb3Np
dGlvbnNbdjJ6XSAtIG9wdGlvbnMuYkluZm8ubWluaW11bS56ICogcmF0aW8pICogelN1YlJhdGlv
KTsKKyAgICAgICAgICAgICAgICBiM3ggPSBNYXRoLmZsb29yKChwb3NpdGlvbnNbdjN4XSAtIG9w
dGlvbnMuYkluZm8ubWluaW11bS54ICogcmF0aW8pICogeFN1YlJhdGlvKTsKKyAgICAgICAgICAg
ICAgICBiM3kgPSBNYXRoLmZsb29yKChwb3NpdGlvbnNbdjN5XSAtIG9wdGlvbnMuYkluZm8ubWlu
aW11bS55ICogcmF0aW8pICogeVN1YlJhdGlvKTsKKyAgICAgICAgICAgICAgICBiM3ogPSBNYXRo
LmZsb29yKChwb3NpdGlvbnNbdjN6XSAtIG9wdGlvbnMuYkluZm8ubWluaW11bS56ICogcmF0aW8p
ICogelN1YlJhdGlvKTsKKyAgICAgICAgICAgICAgICBibG9ja19pZHhfdjEgPSBiMXggKyBvcHRp
b25zLnN1YkRpdi5tYXggKiBiMXkgKyBzdWJTcSAqIGIxejsKKyAgICAgICAgICAgICAgICBibG9j
a19pZHhfdjIgPSBiMnggKyBvcHRpb25zLnN1YkRpdi5tYXggKiBiMnkgKyBzdWJTcSAqIGIyejsK
KyAgICAgICAgICAgICAgICBibG9ja19pZHhfdjMgPSBiM3ggKyBvcHRpb25zLnN1YkRpdi5tYXgg
KiBiM3kgKyBzdWJTcSAqIGIzejsKKyAgICAgICAgICAgICAgICBibG9ja19pZHhfbyA9IG94ICsg
b3B0aW9ucy5zdWJEaXYubWF4ICogb3kgKyBzdWJTcSAqIG96OworICAgICAgICAgICAgICAgIG9w
dGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X29dID0gb3B0aW9ucy5mYWNldFBhcnRp
dGlvbmluZ1tibG9ja19pZHhfb10gPyBvcHRpb25zLmZhY2V0UGFydGl0aW9uaW5nW2Jsb2NrX2lk
eF9vXSA6IG5ldyBBcnJheSgpOworICAgICAgICAgICAgICAgIG9wdGlvbnMuZmFjZXRQYXJ0aXRp
b25pbmdbYmxvY2tfaWR4X3YxXSA9IG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4
X3YxXSA/IG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X3YxXSA6IG5ldyBBcnJh
eSgpOworICAgICAgICAgICAgICAgIG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4
X3YyXSA9IG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X3YyXSA/IG9wdGlvbnMu
ZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X3YyXSA6IG5ldyBBcnJheSgpOworICAgICAgICAg
ICAgICAgIG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X3YzXSA9IG9wdGlvbnMu
ZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X3YzXSA/IG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25p
bmdbYmxvY2tfaWR4X3YzXSA6IG5ldyBBcnJheSgpOworICAgICAgICAgICAgICAgIC8vIHB1c2gg
ZWFjaCBmYWNldCBpbmRleCBpbiBlYWNoIGJsb2NrIGNvbnRhaW5pbmcgdGhlIHZlcnRleAorICAg
ICAgICAgICAgICAgIG9wdGlvbnMuZmFjZXRQYXJ0aXRpb25pbmdbYmxvY2tfaWR4X3YxXS5wdXNo
KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2tfaWR4X3YyICE9IGJsb2NrX2lkeF92
MSkgeworICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZhY2V0UGFydGl0aW9uaW5nW2Jsb2Nr
X2lkeF92Ml0ucHVzaChpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICghKGJsb2NrX2lkeF92MyA9PSBibG9ja19pZHhfdjIgfHwgYmxvY2tfaWR4X3YzID09IGJs
b2NrX2lkeF92MSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5mYWNldFBhcnRpdGlv
bmluZ1tibG9ja19pZHhfdjNdLnB1c2goaW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoIShibG9ja19pZHhfbyA9PSBibG9ja19pZHhfdjEgfHwgYmxvY2tfaWR4
X28gPT0gYmxvY2tfaWR4X3YyIHx8IGJsb2NrX2lkeF9vID09IGJsb2NrX2lkeF92MykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgb3B0aW9ucy5mYWNldFBhcnRpdGlvbmluZ1tibG9ja19pZHhfb10u
cHVzaChpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGNvbXB1dGVEZXB0aFNvcnQgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmZhY2V0UG9zaXRp
b25zKSB7CisgICAgICAgICAgICAgICAgdmFyIGRzZiA9IGRlcHRoU29ydGVkRmFjZXRzW2luZGV4
XTsKKyAgICAgICAgICAgICAgICBkc2YuaW5kID0gaW5kZXggKiAzOworICAgICAgICAgICAgICAg
IGRzZi5zcURpc3RhbmNlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5EaXN0YW5jZVNxdWFyZWQob3B0aW9ucy5mYWNldFBvc2l0aW9u
c1tpbmRleF0sIGRpc3RhbmNlVG8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gY29t
cHV0ZSB0aGUgbm9ybWFscyBhbnl3YXkKKyAgICAgICAgICAgIG5vcm1hbHNbdjF4XSArPSBmYWNl
Tm9ybWFseDsgLy8gYWNjdW11bGF0ZSBhbGwgdGhlIG5vcm1hbHMgcGVyIGZhY2UKKyAgICAgICAg
ICAgIG5vcm1hbHNbdjF5XSArPSBmYWNlTm9ybWFseTsKKyAgICAgICAgICAgIG5vcm1hbHNbdjF6
XSArPSBmYWNlTm9ybWFsejsKKyAgICAgICAgICAgIG5vcm1hbHNbdjJ4XSArPSBmYWNlTm9ybWFs
eDsKKyAgICAgICAgICAgIG5vcm1hbHNbdjJ5XSArPSBmYWNlTm9ybWFseTsKKyAgICAgICAgICAg
IG5vcm1hbHNbdjJ6XSArPSBmYWNlTm9ybWFsejsKKyAgICAgICAgICAgIG5vcm1hbHNbdjN4XSAr
PSBmYWNlTm9ybWFseDsKKyAgICAgICAgICAgIG5vcm1hbHNbdjN5XSArPSBmYWNlTm9ybWFseTsK
KyAgICAgICAgICAgIG5vcm1hbHNbdjN6XSArPSBmYWNlTm9ybWFsejsKKyAgICAgICAgfQorICAg
ICAgICAvLyBsYXN0IG5vcm1hbGl6YXRpb24gb2YgZWFjaCBub3JtYWwKKyAgICAgICAgZm9yIChp
bmRleCA9IDA7IGluZGV4IDwgbm9ybWFscy5sZW5ndGggLyAzOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICBmYWNlTm9ybWFseCA9IG5vcm1hbHNbaW5kZXggKiAzXTsKKyAgICAgICAgICAgIGZhY2VO
b3JtYWx5ID0gbm9ybWFsc1tpbmRleCAqIDMgKyAxXTsKKyAgICAgICAgICAgIGZhY2VOb3JtYWx6
ID0gbm9ybWFsc1tpbmRleCAqIDMgKyAyXTsKKyAgICAgICAgICAgIGxlbmd0aCA9IE1hdGguc3Fy
dChmYWNlTm9ybWFseCAqIGZhY2VOb3JtYWx4ICsgZmFjZU5vcm1hbHkgKiBmYWNlTm9ybWFseSAr
IGZhY2VOb3JtYWx6ICogZmFjZU5vcm1hbHopOworICAgICAgICAgICAgbGVuZ3RoID0gKGxlbmd0
aCA9PT0gMCkgPyAxLjAgOiBsZW5ndGg7CisgICAgICAgICAgICBmYWNlTm9ybWFseCAvPSBsZW5n
dGg7CisgICAgICAgICAgICBmYWNlTm9ybWFseSAvPSBsZW5ndGg7CisgICAgICAgICAgICBmYWNl
Tm9ybWFseiAvPSBsZW5ndGg7CisgICAgICAgICAgICBub3JtYWxzW2luZGV4ICogM10gPSBmYWNl
Tm9ybWFseDsKKyAgICAgICAgICAgIG5vcm1hbHNbaW5kZXggKiAzICsgMV0gPSBmYWNlTm9ybWFs
eTsKKyAgICAgICAgICAgIG5vcm1hbHNbaW5kZXggKiAzICsgMl0gPSBmYWNlTm9ybWFsejsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBWZXJ0ZXhEYXRhLl9Db21w
dXRlU2lkZXMgPSBmdW5jdGlvbiAoc2lkZU9yaWVudGF0aW9uLCBwb3NpdGlvbnMsIGluZGljZXMs
IG5vcm1hbHMsIHV2cywgZnJvbnRVVnMsIGJhY2tVVnMpIHsKKyAgICAgICAgdmFyIGxpID0gaW5k
aWNlcy5sZW5ndGg7CisgICAgICAgIHZhciBsbiA9IG5vcm1hbHMubGVuZ3RoOworICAgICAgICB2
YXIgaTsKKyAgICAgICAgdmFyIG47CisgICAgICAgIHNpZGVPcmllbnRhdGlvbiA9IHNpZGVPcmll
bnRhdGlvbiB8fCBWZXJ0ZXhEYXRhLkRFRkFVTFRTSURFOworICAgICAgICBzd2l0Y2ggKHNpZGVP
cmllbnRhdGlvbikgeworICAgICAgICAgICAgY2FzZSBWZXJ0ZXhEYXRhLkZST05UU0lERToKKyAg
ICAgICAgICAgICAgICAvLyBub3RoaW5nIGNoYW5nZWQKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgVmVydGV4RGF0YS5CQUNLU0lERToKKyAgICAgICAgICAgICAgICB2
YXIgdG1wOworICAgICAgICAgICAgICAgIC8vIGluZGljZXMKKyAgICAgICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbGk7IGkgKz0gMykgeworICAgICAgICAgICAgICAgICAgICB0bXAgPSBpbmRp
Y2VzW2ldOworICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2ldID0gaW5kaWNlc1tpICsgMl07
CisgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaSArIDJdID0gdG1wOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAvLyBub3JtYWxzCisgICAgICAgICAgICAgICAgZm9yIChu
ID0gMDsgbiA8IGxuOyBuKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1tuXSA9IC1u
b3JtYWxzW25dOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVmVydGV4RGF0YS5ET1VCTEVTSURFOgorICAgICAgICAgICAgICAgIC8v
IHBvc2l0aW9ucworICAgICAgICAgICAgICAgIHZhciBscCA9IHBvc2l0aW9ucy5sZW5ndGg7Cisg
ICAgICAgICAgICAgICAgdmFyIGwgPSBscCAvIDM7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
cCA9IDA7IHAgPCBscDsgcCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tscCAr
IHBdID0gcG9zaXRpb25zW3BdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
LyBpbmRpY2VzCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpOyBpICs9IDMpIHsK
KyAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpICsgbGldID0gaW5kaWNlc1tpICsgMl0gKyBs
OworICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2kgKyAxICsgbGldID0gaW5kaWNlc1tpICsg
MV0gKyBsOworICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2kgKyAyICsgbGldID0gaW5kaWNl
c1tpXSArIGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIG5vcm1hbHMK
KyAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbG47IG4rKykgeworICAgICAgICAgICAg
ICAgICAgICBub3JtYWxzW2xuICsgbl0gPSAtbm9ybWFsc1tuXTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgLy8gdXZzCisgICAgICAgICAgICAgICAgdmFyIGx1ID0gdXZzLmxl
bmd0aDsKKyAgICAgICAgICAgICAgICB2YXIgdSA9IDA7CisgICAgICAgICAgICAgICAgZm9yICh1
ID0gMDsgdSA8IGx1OyB1KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdXZzW3UgKyBsdV0gPSB1
dnNbdV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZyb250VVZzID0gZnJv
bnRVVnMgPyBmcm9udFVWcyA6IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVmVjdG9yNCJdKDAuMCwgMC4wLCAxLjAsIDEuMCk7CisgICAgICAgICAg
ICAgICAgYmFja1VWcyA9IGJhY2tVVnMgPyBiYWNrVVZzIDogbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3I0Il0oMC4wLCAwLjAsIDEuMCwg
MS4wKTsKKyAgICAgICAgICAgICAgICB1ID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgbHUgLyAyOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdXZzW3VdID0gZnJvbnRV
VnMueCArIChmcm9udFVWcy56IC0gZnJvbnRVVnMueCkgKiB1dnNbdV07CisgICAgICAgICAgICAg
ICAgICAgIHV2c1t1ICsgMV0gPSBmcm9udFVWcy55ICsgKGZyb250VVZzLncgLSBmcm9udFVWcy55
KSAqIHV2c1t1ICsgMV07CisgICAgICAgICAgICAgICAgICAgIHV2c1t1ICsgbHVdID0gYmFja1VW
cy54ICsgKGJhY2tVVnMueiAtIGJhY2tVVnMueCkgKiB1dnNbdSArIGx1XTsKKyAgICAgICAgICAg
ICAgICAgICAgdXZzW3UgKyBsdSArIDFdID0gYmFja1VWcy55ICsgKGJhY2tVVnMudyAtIGJhY2tV
VnMueSkgKiB1dnNbdSArIGx1ICsgMV07CisgICAgICAgICAgICAgICAgICAgIHUgKz0gMjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIEFwcGxpZXMgVmVydGV4RGF0YSBjcmVhdGVkIGZyb20gdGhlIGlt
cG9ydGVkIHBhcmFtZXRlcnMgdG8gdGhlIGdlb21ldHJ5CisgICAgICogQHBhcmFtIHBhcnNlZFZl
cnRleERhdGEgdGhlIHBhcnNlZCBkYXRhIGZyb20gYW4gaW1wb3J0ZWQgZmlsZQorICAgICAqIEBw
YXJhbSBnZW9tZXRyeSB0aGUgZ2VvbWV0cnkgdG8gYXBwbHkgdGhlIFZlcnRleERhdGEgdG8KKyAg
ICAgKi8KKyAgICBWZXJ0ZXhEYXRhLkltcG9ydFZlcnRleERhdGEgPSBmdW5jdGlvbiAocGFyc2Vk
VmVydGV4RGF0YSwgZ2VvbWV0cnkpIHsKKyAgICAgICAgdmFyIHZlcnRleERhdGEgPSBuZXcgVmVy
dGV4RGF0YSgpOworICAgICAgICAvLyBwb3NpdGlvbnMKKyAgICAgICAgdmFyIHBvc2l0aW9ucyA9
IHBhcnNlZFZlcnRleERhdGEucG9zaXRpb25zOworICAgICAgICBpZiAocG9zaXRpb25zKSB7Cisg
ICAgICAgICAgICB2ZXJ0ZXhEYXRhLnNldChwb3NpdGlvbnMsIF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gbm9ybWFscworICAgICAgICB2YXIgbm9ybWFscyA9IHBhcnNl
ZFZlcnRleERhdGEubm9ybWFsczsKKyAgICAgICAgaWYgKG5vcm1hbHMpIHsKKyAgICAgICAgICAg
IHZlcnRleERhdGEuc2V0KG5vcm1hbHMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQpOworICAgICAgICB9CisgICAg
ICAgIC8vIHRhbmdlbnRzCisgICAgICAgIHZhciB0YW5nZW50cyA9IHBhcnNlZFZlcnRleERhdGEu
dGFuZ2VudHM7CisgICAgICAgIGlmICh0YW5nZW50cykgeworICAgICAgICAgICAgdmVydGV4RGF0
YS5zZXQodGFuZ2VudHMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlcnRleEJ1ZmZlciJdLlRhbmdlbnRLaW5kKTsKKyAgICAgICAgfQorICAgICAgICAvLyB1
dnMKKyAgICAgICAgdmFyIHV2cyA9IHBhcnNlZFZlcnRleERhdGEudXZzOworICAgICAgICBpZiAo
dXZzKSB7CisgICAgICAgICAgICB2ZXJ0ZXhEYXRhLnNldCh1dnMsIF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gdXYycworICAgICAgICB2YXIgdXYycyA9IHBhcnNlZFZlcnRleERh
dGEudXYyczsKKyAgICAgICAgaWYgKHV2MnMpIHsKKyAgICAgICAgICAgIHZlcnRleERhdGEuc2V0
KHV2MnMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLlVWMktpbmQpOworICAgICAgICB9CisgICAgICAgIC8vIHV2M3MKKyAgICAgICAg
dmFyIHV2M3MgPSBwYXJzZWRWZXJ0ZXhEYXRhLnV2M3M7CisgICAgICAgIGlmICh1djNzKSB7Cisg
ICAgICAgICAgICB2ZXJ0ZXhEYXRhLnNldCh1djNzLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjNLaW5kKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyB1djRzCisgICAgICAgIHZhciB1djRzID0gcGFyc2VkVmVydGV4RGF0YS51djRz
OworICAgICAgICBpZiAodXY0cykgeworICAgICAgICAgICAgdmVydGV4RGF0YS5zZXQodXY0cywg
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVy
Il0uVVY0S2luZCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gdXY1cworICAgICAgICB2YXIgdXY1
cyA9IHBhcnNlZFZlcnRleERhdGEudXY1czsKKyAgICAgICAgaWYgKHV2NXMpIHsKKyAgICAgICAg
ICAgIHZlcnRleERhdGEuc2V0KHV2NXMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWNUtpbmQpOworICAgICAgICB9CisgICAgICAg
IC8vIHV2NnMKKyAgICAgICAgdmFyIHV2NnMgPSBwYXJzZWRWZXJ0ZXhEYXRhLnV2NnM7CisgICAg
ICAgIGlmICh1djZzKSB7CisgICAgICAgICAgICB2ZXJ0ZXhEYXRhLnNldCh1djZzLCBfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVjZL
aW5kKTsKKyAgICAgICAgfQorICAgICAgICAvLyBjb2xvcnMKKyAgICAgICAgdmFyIGNvbG9ycyA9
IHBhcnNlZFZlcnRleERhdGEuY29sb3JzOworICAgICAgICBpZiAoY29sb3JzKSB7CisgICAgICAg
ICAgICB2ZXJ0ZXhEYXRhLnNldChfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJDb2xvcjQiXS5DaGVja0NvbG9yczQoY29sb3JzLCBwb3NpdGlvbnMubGVuZ3Ro
IC8gMyksIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLkNvbG9yS2luZCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gbWF0cmljZXNJbmRp
Y2VzCisgICAgICAgIHZhciBtYXRyaWNlc0luZGljZXMgPSBwYXJzZWRWZXJ0ZXhEYXRhLm1hdHJp
Y2VzSW5kaWNlczsKKyAgICAgICAgaWYgKG1hdHJpY2VzSW5kaWNlcykgeworICAgICAgICAgICAg
dmVydGV4RGF0YS5zZXQobWF0cmljZXNJbmRpY2VzLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNLaW5kKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBtYXRyaWNlc1dlaWdodHMKKyAgICAgICAgdmFyIG1hdHJp
Y2VzV2VpZ2h0cyA9IHBhcnNlZFZlcnRleERhdGEubWF0cmljZXNXZWlnaHRzOworICAgICAgICBp
ZiAobWF0cmljZXNXZWlnaHRzKSB7CisgICAgICAgICAgICB2ZXJ0ZXhEYXRhLnNldChtYXRyaWNl
c1dlaWdodHMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZl
cnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpOworICAgICAgICB9CisgICAgICAgIC8v
IGluZGljZXMKKyAgICAgICAgdmFyIGluZGljZXMgPSBwYXJzZWRWZXJ0ZXhEYXRhLmluZGljZXM7
CisgICAgICAgIGlmIChpbmRpY2VzKSB7CisgICAgICAgICAgICB2ZXJ0ZXhEYXRhLmluZGljZXMg
PSBpbmRpY2VzOworICAgICAgICB9CisgICAgICAgIGdlb21ldHJ5LnNldEFsbFZlcnRpY2VzRGF0
YSh2ZXJ0ZXhEYXRhLCBwYXJzZWRWZXJ0ZXhEYXRhLnVwZGF0YWJsZSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBNZXNoIHNpZGUgb3JpZW50YXRpb24gOiB1c3VhbGx5IHRoZSBleHRlcm5hbCBv
ciBmcm9udCBzdXJmYWNlCisgICAgICovCisgICAgVmVydGV4RGF0YS5GUk9OVFNJREUgPSAwOwor
ICAgIC8qKgorICAgICAqIE1lc2ggc2lkZSBvcmllbnRhdGlvbiA6IHVzdWFsbHkgdGhlIGludGVy
bmFsIG9yIGJhY2sgc3VyZmFjZQorICAgICAqLworICAgIFZlcnRleERhdGEuQkFDS1NJREUgPSAx
OworICAgIC8qKgorICAgICAqIE1lc2ggc2lkZSBvcmllbnRhdGlvbiA6IGJvdGggaW50ZXJuYWwg
YW5kIGV4dGVybmFsIG9yIGZyb250IGFuZCBiYWNrIHN1cmZhY2VzCisgICAgICovCisgICAgVmVy
dGV4RGF0YS5ET1VCTEVTSURFID0gMjsKKyAgICAvKioKKyAgICAgKiBNZXNoIHNpZGUgb3JpZW50
YXRpb24gOiBieSBkZWZhdWx0LCBgRlJPTlRTSURFYAorICAgICAqLworICAgIFZlcnRleERhdGEu
REVGQVVMVFNJREUgPSAwOworICAgIHJldHVybiBWZXJ0ZXhEYXRhOworfSgpKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvbWVzaEJ1aWxkZXIudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL21lc2hCdWlsZGVyLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogTWVzaEJ1aWxkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiTWVzaEJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1lc2hCdWlsZGVyOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQnVpbGRlcnNfcmliYm9uQnVpbGRlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9CdWlsZGVycy9y
aWJib25CdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9yaWJib25CdWlsZGVyLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0J1aWxkZXJzX2Rpc2NCdWlsZGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0J1aWxkZXJzL2Rp
c2NCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9kaXNjQnVpbGRlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9CdWlsZGVyc19ib3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0J1aWxkZXJzL2JveEJ1aWxk
ZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL2JveEJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfQnVpbGRlcnNfdGlsZWRCb3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0J1aWxkZXJzL3RpbGVkQm94QnVp
bGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdGlsZWRCb3hCdWlsZGVyLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0J1aWxkZXJzX3NwaGVyZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQnVpbGRlcnMvc3BoZXJl
QnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9CdWlsZGVyc19jeWxpbmRlckJ1aWxkZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQnVpbGRlcnMvY3ls
aW5kZXJCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9jeWxpbmRlckJ1aWxkZXIudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQnVpbGRlcnNfdG9ydXNCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0J1aWxkZXJz
L3RvcnVzQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdG9ydXNCdWlsZGVyLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0J1aWxkZXJzX3RvcnVzS25vdEJ1aWxkZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQnVpbGRl
cnMvdG9ydXNLbm90QnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdG9ydXNLbm90QnVpbGRl
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9CdWlsZGVyc19saW5lc0J1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
QnVpbGRlcnMvbGluZXNCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9saW5lc0J1aWxkZXIu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQnVpbGRlcnNfcG9seWdvbkJ1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
QnVpbGRlcnMvcG9seWdvbkJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL3BvbHlnb25CdWls
ZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0J1aWxkZXJzX3NoYXBlQnVpbGRl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vQnVpbGRlcnMvc2hhcGVCdWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9zaGFwZUJ1aWxk
ZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQnVpbGRlcnNfbGF0aGVCdWlsZGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9CdWlsZGVycy9sYXRoZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJzL2xhdGhlQnVpbGRl
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9CdWlsZGVyc19wbGFuZUJ1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L0J1aWxkZXJzL3BsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvcGxhbmVCdWlsZGVy
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0J1aWxkZXJzX3RpbGVkUGxhbmVCdWls
ZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9CdWlsZGVycy90aWxlZFBsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvdGls
ZWRQbGFuZUJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQnVpbGRlcnNf
Z3JvdW5kQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vQnVpbGRlcnMvZ3JvdW5kQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRl
cnMvZ3JvdW5kQnVpbGRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9CdWlsZGVy
c190dWJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vQnVpbGRlcnMvdHViZUJ1aWxkZXIgKi8gIi4vTWVzaGVzL0J1aWxkZXJz
L3R1YmVCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0J1aWxkZXJzX3Bv
bHloZWRyb25CdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9CdWlsZGVycy9wb2x5aGVkcm9uQnVpbGRlciAqLyAiLi9NZXNoZXMv
QnVpbGRlcnMvcG9seWhlZHJvbkJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfQnVpbGRlcnNfaWNvU3BoZXJlQnVpbGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQnVpbGRlcnMvaWNvU3BoZXJlQnVpbGRlciAq
LyAiLi9NZXNoZXMvQnVpbGRlcnMvaWNvU3BoZXJlQnVpbGRlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9CdWlsZGVyc19kZWNhbEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0J1aWxkZXJzL2RlY2FsQnVpbGRl
ciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvZGVjYWxCdWlsZGVyLnRzIik7CisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKy8qKgorICogQ2xhc3MgY29udGFpbmluZyBzdGF0aWMg
ZnVuY3Rpb25zIHRvIGhlbHAgcHJvY2VkdXJhbGx5IGJ1aWxkIG1lc2hlcworICovCit2YXIgTWVz
aEJ1aWxkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gTWVz
aEJ1aWxkZXIoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBib3ggbWVzaAor
ICAgICAqICogVGhlIHBhcmFtZXRlciBgc2l6ZWAgc2V0cyB0aGUgc2l6ZSAoZmxvYXQpIG9mIGVh
Y2ggYm94IHNpZGUgKGRlZmF1bHQgMSkKKyAgICAgKiAqIFlvdSBjYW4gc2V0IHNvbWUgZGlmZmVy
ZW50IGJveCBkaW1lbnNpb25zIGJ5IHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGB3aWR0aGAsIGBoZWln
aHRgIGFuZCBgZGVwdGhgIChhbGwgYnkgZGVmYXVsdCBoYXZlIHRoZSBzYW1lIHZhbHVlIG9mIGBz
aXplYCkKKyAgICAgKiAqIFlvdSBjYW4gc2V0IGRpZmZlcmVudCBjb2xvcnMgYW5kIGRpZmZlcmVu
dCBpbWFnZXMgdG8gZWFjaCBib3ggc2lkZSBieSB1c2luZyB0aGUgcGFyYW1ldGVycyBgZmFjZUNv
bG9yc2AgKGFuIGFycmF5IG9mIDYgQ29sb3IzIGVsZW1lbnRzKSBhbmQgYGZhY2VVVmAgKGFuIGFy
cmF5IG9mIDYgVmVjdG9yNCBlbGVtZW50cykKKyAgICAgKiAqIFBsZWFzZSByZWFkIHRoaXMgdHV0
b3JpYWwgOiBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jcmVhdGVib3hfcGVyX2Zh
Y2VfdGV4dHVyZXNfYW5kX2NvbG9ycworICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVz
aCBzaWRlIG9yaWVudGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5GUk9OVFNJ
REUgKGRlZmF1bHQpLCBCQUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNoLkRPVUJM
RVNJREUKKyAgICAgKiAqIElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNh
biBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGlj
ayByZXNwZWN0aXZlbHkgb24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBw
YXJhbWV0ZXJzIGBmcm9udFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFpbCBoZXJl
IDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2Vs
ZW1lbnRzI3NpZGUtb3JpZW50YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8g
dXBkYXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0
IGZhbHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9u
Y2UgY3JlYXRlZAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
c2V0X3NoYXBlcyNib3gKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRo
ZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRv
IGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5n
IHNjZW5lCisgICAgICogQHJldHVybnMgdGhlIGJveCBtZXNoCisgICAgICovCisgICAgTWVzaEJ1
aWxkZXIuQ3JlYXRlQm94ID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAg
ICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICByZXR1
cm4gX0J1aWxkZXJzX2JveEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQm94
QnVpbGRlciJdLkNyZWF0ZUJveChuYW1lLCBvcHRpb25zLCBzY2VuZSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgdGlsZWQgYm94IG1lc2gKKyAgICAgKiAqIGZhY2VUaWxlcyBz
ZXRzIHRoZSBwYXR0ZXJuLCB0aWxlIHNpemUgYW5kIG51bWJlciBvZiB0aWxlcyBmb3IgYSBmYWNl
CisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29s
ZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFs
IGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAgICAgKiBAcGFy
YW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlv
bnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBw
YXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdGhl
IHRpbGVkIGJveCBtZXNoCisgICAgICovCisgICAgTWVzaEJ1aWxkZXIuQ3JlYXRlVGlsZWRCb3gg
PSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09
PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfdGls
ZWRCb3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRpbGVkQm94QnVpbGRl
ciJdLkNyZWF0ZVRpbGVkQm94KG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYSBzcGhlcmUgbWVzaAorICAgICAqICogVGhlIHBhcmFtZXRlciBg
ZGlhbWV0ZXJgIHNldHMgdGhlIGRpYW1ldGVyIHNpemUgKGZsb2F0KSBvZiB0aGUgc3BoZXJlIChk
ZWZhdWx0IDEpCisgICAgICogKiBZb3UgY2FuIHNldCBzb21lIGRpZmZlcmVudCBzcGhlcmUgZGlt
ZW5zaW9ucywgZm9yIGluc3RhbmNlIHRvIGJ1aWxkIGFuIGVsbGlwc29pZCwgYnkgdXNpbmcgdGhl
IHBhcmFtZXRlcnMgYGRpYW1ldGVyWGAsIGBkaWFtZXRlcllgIGFuZCBgZGlhbWV0ZXJaYCAoYWxs
IGJ5IGRlZmF1bHQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBvZiBgZGlhbWV0ZXJgKQorICAgICAqICog
VGhlIHBhcmFtZXRlciBgc2VnbWVudHNgIHNldHMgdGhlIHNwaGVyZSBudW1iZXIgb2YgaG9yaXpv
bnRhbCBzdHJpcGVzIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDMyKQorICAgICAqICogWW91
IGNhbiBjcmVhdGUgYW4gdW5jbG9zZWQgc3BoZXJlIHdpdGggdGhlIHBhcmFtZXRlciBgYXJjYCAo
cG9zaXRpdmUgZmxvYXQsIGRlZmF1bHQgMSksIHZhbHVlZCBiZXR3ZWVuIDAgYW5kIDEsIHdoYXQg
aXMgdGhlIHJhdGlvIG9mIHRoZSBjaXJjdW1mZXJlbmNlIChsYXRpdHVkZSkgOiAyIHggUEkgeCBy
YXRpbworICAgICAqICogWW91IGNhbiBjcmVhdGUgYW4gdW5jbG9zZWQgc3BoZXJlIG9uIGl0cyBo
ZWlnaHQgd2l0aCB0aGUgcGFyYW1ldGVyIGBzbGljZWAgKHBvc2l0aXZlIGZsb2F0LCBkZWZhdWx0
MSksIHZhbHVlZCBiZXR3ZWVuIDAgYW5kIDEsIHdoYXQgaXMgdGhlIGhlaWdodCByYXRpbyAobG9u
Z2l0dWRlKQorICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVudGF0
aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBC
QUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNoLkRPVUJMRVNJREUKKyAgICAgKiAq
IElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hhdCBw
YXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZlbHkg
b24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBmcm9u
dFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFpbCBoZXJlIDogaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3Jp
ZW50YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGgg
dGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMg
aW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAorICAg
ICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFy
YW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisg
ICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0
dXJucyB0aGUgc3BoZXJlIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL3NldF9zaGFwZXMjc3BoZXJlCisgICAgICovCisgICAgTWVzaEJ1aWxkZXIuQ3Jl
YXRlU3BoZXJlID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlm
IChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICByZXR1cm4gX0J1
aWxkZXJzX3NwaGVyZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU3BoZXJl
QnVpbGRlciJdLkNyZWF0ZVNwaGVyZShuYW1lLCBvcHRpb25zLCBzY2VuZSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcGxhbmUgcG9seWdvbmFsIG1lc2guICBCeSBkZWZhdWx0
LCB0aGlzIGlzIGEgZGlzYworICAgICAqICogVGhlIHBhcmFtZXRlciBgcmFkaXVzYCBzZXRzIHRo
ZSByYWRpdXMgc2l6ZSAoZmxvYXQpIG9mIHRoZSBwb2x5Z29uIChkZWZhdWx0IDAuNSkKKyAgICAg
KiAqIFRoZSBwYXJhbWV0ZXIgYHRlc3NlbGxhdGlvbmAgc2V0cyB0aGUgbnVtYmVyIG9mIHBvbHln
b24gc2lkZXMgKHBvc2l0aXZlIGludGVnZXIsIGRlZmF1bHQgNjQpLiBTbyBhIHRlc3NlbGxhdGlv
biB2YWx1ZWQgdG8gMyB3aWxsIGJ1aWxkIGEgdHJpYW5nbGUsIHRvIDQgYSBzcXVhcmUsIGV0Ywor
ICAgICAqICogWW91IGNhbiBjcmVhdGUgYW4gdW5jbG9zZWQgcG9seWdvbiB3aXRoIHRoZSBwYXJh
bWV0ZXIgYGFyY2AgKHBvc2l0aXZlIGZsb2F0LCBkZWZhdWx0IDEpLCB2YWx1ZWQgYmV0d2VlbiAw
IGFuZCAxLCB3aGF0IGlzIHRoZSByYXRpbyBvZiB0aGUgY2lyY3VtZmVyZW5jZSA6IDIgeCBQSSB4
IHJhdGlvCisgICAgICogKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtZXNoIHNpZGUgb3JpZW50YXRp
b24gd2l0aCB0aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLkZST05UU0lERSAoZGVmYXVsdCksIEJB
QllMT04uTWVzaC5CQUNLU0lERSBvciBCQUJZTE9OLk1lc2guRE9VQkxFU0lERQorICAgICAqICog
SWYgeW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNob29zZSB3aGF0IHBh
cnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJlc3BlY3RpdmVseSBv
biB0aGUgZnJvbnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGggdGhlIHBhcmFtZXRlcnMgYGZyb250
VVZzYCBhbmQgYGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBodHRwczovL2RvYy5i
YWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmll
bnRhdGlvbgorICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0aCB0
aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBp
bnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkCisgICAg
ICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJh
bSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1
cm5zIHRoZSBwbGFuZSBwb2x5Z29uYWwgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vc2V0X3NoYXBlcyNkaXNjLW9yLXJlZ3VsYXItcG9seWdvbgorICAg
ICAqLworICAgIE1lc2hCdWlsZGVyLkNyZWF0ZURpc2MgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9u
cywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxs
OyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfZGlzY0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siRGlzY0J1aWxkZXIiXS5DcmVhdGVEaXNjKG5hbWUsIG9wdGlvbnMsIHNj
ZW5lKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBzcGhlcmUgYmFzZWQgdXBv
biBhbiBpY29zYWhlZHJvbiB3aXRoIDIwIHRyaWFuZ3VsYXIgZmFjZXMgd2hpY2ggY2FuIGJlIHN1
YmRpdmlkZWQKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHJhZGl1c2Agc2V0cyB0aGUgcmFkaXVz
IHNpemUgKGZsb2F0KSBvZiB0aGUgaWNvc3BoZXJlIChkZWZhdWx0IDEpCisgICAgICogKiBZb3Ug
Y2FuIHNldCBzb21lIGRpZmZlcmVudCBpY29zcGhlcmUgZGltZW5zaW9ucywgZm9yIGluc3RhbmNl
IHRvIGJ1aWxkIGFuIGVsbGlwc29pZCwgYnkgdXNpbmcgdGhlIHBhcmFtZXRlcnMgYHJhZGl1c1hg
LCBgcmFkaXVzWWAgYW5kIGByYWRpdXNaYCAoYWxsIGJ5IGRlZmF1bHQgaGF2ZSB0aGUgc2FtZSB2
YWx1ZSBvZiBgcmFkaXVzYCkKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHN1YmRpdmlzaW9uc2Ag
c2V0cyB0aGUgbnVtYmVyIG9mIHN1YmRpdmlzaW9ucyAocG9zdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0
IDQpLiBUaGUgbW9yZSBzdWJkaXZpc2lvbnMsIHRoZSBtb3JlIGZhY2VzIG9uIHRoZSBpY29zcGhl
cmUgd2hhdGV2ZXIgaXRzIHNpemUKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGZsYXRgIChib29s
ZWFuLCBkZWZhdWx0IHRydWUpIGdpdmVzIGVhY2ggc2lkZSBpdHMgb3duIG5vcm1hbHMuIFNldCBp
dCB0byBmYWxzZSB0byBnZXQgYSBzbW9vdGggY29udGludW91cyBsaWdodCByZWZsZWN0aW9uIG9u
IHRoZSBzdXJmYWNlCisgICAgICogKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtZXNoIHNpZGUgb3Jp
ZW50YXRpb24gd2l0aCB0aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLkZST05UU0lERSAoZGVmYXVs
dCksIEJBQllMT04uTWVzaC5CQUNLU0lERSBvciBCQUJZTE9OLk1lc2guRE9VQkxFU0lERQorICAg
ICAqICogSWYgeW91IGNyZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNob29zZSB3
aGF0IHBhcnRzIG9mIHRoZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJlc3BlY3Rp
dmVseSBvbiB0aGUgZnJvbnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGggdGhlIHBhcmFtZXRlcnMg
YGZyb250VVZzYCBhbmQgYGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBodHRwczov
L2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lk
ZS1vcmllbnRhdGlvbgorICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUg
d2l0aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlm
IGl0cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVk
CisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAq
IEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1l
c2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAq
IEByZXR1cm5zIHRoZSBpY29zYWhlZHJvbiBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by9wb2x5aGVkcmFfc2hhcGVzI2ljb3NwaGVyZQorICAgICAqLwor
ICAgIE1lc2hCdWlsZGVyLkNyZWF0ZUljb1NwaGVyZSA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25z
LCBzY2VuZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7
IH0KKyAgICAgICAgcmV0dXJuIF9CdWlsZGVyc19pY29TcGhlcmVCdWlsZGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xN19fWyJJY29TcGhlcmVCdWlsZGVyIl0uQ3JlYXRlSWNvU3BoZXJlKG5h
bWUsIG9wdGlvbnMsIHNjZW5lKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBy
aWJib24gbWVzaC4gVGhlIHJpYmJvbiBpcyBhIHBhcmFtZXRyaWMgc2hhcGUuICBJdCBoYXMgbm8g
cHJlZGVmaW5lZCBzaGFwZS4gSXRzIGZpbmFsIHNoYXBlIHdpbGwgZGVwZW5kIG9uIHRoZSBpbnB1
dCBwYXJhbWV0ZXJzCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBwYXRoQXJyYXlgIGlzIGEgcmVx
dWlyZWQgYXJyYXkgb2YgcGF0aHMsIHdoYXQgYXJlIGVhY2ggYW4gYXJyYXkgb2Ygc3VjY2Vzc2l2
ZSBWZWN0b3IzLiBUaGUgcGF0aEFycmF5IHBhcmFtZXRlciBkZXBpY3RzIHRoZSByaWJib24gZ2Vv
bWV0cnkKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGNsb3NlQXJyYXlgIChib29sZWFuLCBkZWZh
dWx0IGZhbHNlKSBjcmVhdGVzIGEgc2VhbSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3Qg
cGF0aHMgb2YgdGhlIHBhdGggYXJyYXkKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGNsb3NlUGF0
aGAgKGJvb2xlYW4sIGRlZmF1bHQgZmFsc2UpIGNyZWF0ZXMgYSBzZWFtIGJldHdlZW4gdGhlIGZp
cnN0IGFuZCB0aGUgbGFzdCBwb2ludHMgb2YgZWFjaCBwYXRoIG9mIHRoZSBwYXRoIGFycmF5Cisg
ICAgICogKiBUaGUgcGFyYW1ldGVyIGBvZmZzZXRgIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0
IDogcm91bmRlZCBoYWxmIHNpemUgb2YgdGhlIHBhdGhBcnJheSBsZW5ndGgpLCBpcyB0YWtlbiBp
biBhY2NvdW50IG9ubHkgaWYgdGhlIGBwYXRoQXJyYXlgIGlzIGNvbnRhaW5pbmcgYSBzaW5nbGUg
cGF0aAorICAgICAqICogSXQncyB0aGUgb2Zmc2V0IHRvIGpvaW4gdGhlIHBvaW50cyBmcm9tIHRo
ZSBzYW1lIHBhdGguIEV4IDogb2Zmc2V0ID0gMTAgbWVhbnMgdGhlIHBvaW50IDEgaXMgam9pbmVk
IHRvIHRoZSBwb2ludCAxMQorICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgaW5zdGFu
Y2VgIGlzIGFuIGluc3RhbmNlIG9mIGFuIGV4aXN0aW5nIFJpYmJvbiBvYmplY3QgdG8gYmUgdXBk
YXRlZCB3aXRoIHRoZSBwYXNzZWQgYHBhdGhBcnJheWAgcGFyYW1ldGVyIDogaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX2R5bmFtaWNhbGx5X21vcnBoX2FfbWVzaCNyaWJi
b24KKyAgICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3
aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxP
Ti5NZXNoLkJBQ0tTSURFIG9yIEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5
b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMg
b2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRo
ZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNg
IGFuZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0
aW9uCisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnZlcnRVVmAgKGJvb2xlYW4s
IGRlZmF1bHQgZmFsc2UpIHN3YXBzIGluIHRoZSBnZW9tZXRyeSB0aGUgVSBhbmQgViBjb29yZGlu
YXRlcyB0byBhcHBseSBhIHRleHR1cmUKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHV2c2AgaXMg
YW4gb3B0aW9uYWwgZmxhdCBhcnJheSBvZiBgVmVjdG9yMmAgdG8gdXBkYXRlL3NldCBlYWNoIHJp
YmJvbiB2ZXJ0ZXggd2l0aCBpdHMgb3duIGN1c3RvbSBVViB2YWx1ZXMgaW5zdGVhZCBvZiB0aGUg
Y29tcHV0ZWQgb25lcworICAgICAqICogVGhlIHBhcmFtZXRlcnMgYGNvbG9yc2AgaXMgYW4gb3B0
aW9uYWwgZmxhdCBhcnJheSBvZiBgQ29sb3I0YCB0byBzZXQvdXBkYXRlIGVhY2ggcmliYm9uIHZl
cnRleCB3aXRoIGl0cyBvd24gY3VzdG9tIGNvbG9yIHZhbHVlcworICAgICAqICogTm90ZSB0aGF0
IGlmIHlvdSB1c2UgdGhlIHBhcmFtZXRlcnMgYHV2c2Agb3IgYGNvbG9yc2AsIHRoZSBwYXNzZWQg
YXJyYXlzIG11c3QgYmUgcG9wdWxhdGVkIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBlbGVtZW50
cywgaXQgaXMgdG8gc2F5IHRoZSBudW1iZXIgb2YgcmliYm9uIHZlcnRpY2VzLiBSZW1lbWJlciB0
aGF0IGlmIHlvdSBzZXQgYGNsb3NlUGF0aGAgdG8gYHRydWVgLCB0aGVyZSdzIG9uZSBleHRyYSB2
ZXJ0ZXggcGVyIHBhdGggaW4gdGhlIGdlb21ldHJ5CisgICAgICogKiBNb3Jlb3ZlciwgeW91IGNh
biB1c2UgdGhlIHBhcmFtZXRlciBgY29sb3JgIHdpdGggYGluc3RhbmNlYCAodG8gdXBkYXRlIHRo
ZSByaWJib24pLCBvbmx5IGlmIHlvdSBwcmV2aW91c2x5IHVzZWQgaXQgYXQgY3JlYXRpb24gdGlt
ZQorICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0aCB0aGUgYm9v
bGVhbiBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBpbnRlcm5h
bCBnZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkCisgICAgICogQHBh
cmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRp
b25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBA
cGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRo
ZSByaWJib24gbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3df
dG8vcmliYm9uX3R1dG9yaWFsCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9wYXJhbWV0cmljX3NoYXBlcworICAgICAqLworICAgIE1lc2hCdWlsZGVyLkNyZWF0
ZVJpYmJvbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkgeworICAgICAgICBpZiAo
c2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgcmV0dXJuIF9CdWls
ZGVyc19yaWJib25CdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJpYmJvbkJ1
aWxkZXIiXS5DcmVhdGVSaWJib24obmFtZSwgb3B0aW9ucywgc2NlbmUpOworICAgIH07CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIGN5bGluZGVyIG9yIGEgY29uZSBtZXNoCisgICAgICogKiBU
aGUgcGFyYW1ldGVyIGBoZWlnaHRgIHNldHMgdGhlIGhlaWdodCBzaXplIChmbG9hdCkgb2YgdGhl
IGN5bGluZGVyL2NvbmUgKGZsb2F0LCBkZWZhdWx0IDIpLgorICAgICAqICogVGhlIHBhcmFtZXRl
ciBgZGlhbWV0ZXJgIHNldHMgdGhlIGRpYW1ldGVyIG9mIHRoZSB0b3AgYW5kIGJvdHRvbSBjYXAg
YXQgb25jZSAoZmxvYXQsIGRlZmF1bHQgMSkuCisgICAgICogKiBUaGUgcGFyYW1ldGVycyBgZGlh
bWV0ZXJUb3BgIGFuZCBgZGlhbWV0ZXJCb3R0b21gIG92ZXJ3cml0ZSB0aGUgcGFyYW1ldGVyIGBk
aWFtZXRlcmAgYW5kIHNldCByZXNwZWN0aXZlbHkgdGhlIHRvcCBjYXAgYW5kIGJvdHRvbSBjYXAg
ZGlhbWV0ZXIgKGZsb2F0cywgZGVmYXVsdCAxKS4gVGhlIHBhcmFtZXRlciAiZGlhbWV0ZXJCb3R0
b20iIGNhbid0IGJlIHplcm8uCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGB0ZXNzZWxsYXRpb25g
IHNldHMgdGhlIG51bWJlciBvZiBjeWxpbmRlciBzaWRlcyAocG9zaXRpdmUgaW50ZWdlciwgZGVm
YXVsdCAyNCkuIFNldCBpdCB0byAzIHRvIGdldCBhIHByaXNtIGZvciBpbnN0YW5jZS4KKyAgICAg
KiAqIFRoZSBwYXJhbWV0ZXIgYHN1YmRpdmlzaW9uc2Agc2V0cyB0aGUgbnVtYmVyIG9mIHJpbmdz
IGFsb25nIHRoZSBjeWxpbmRlciBoZWlnaHQgKHBvc2l0aXZlIGludGVnZXIsIGRlZmF1bHQgMSku
CisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBoYXNSaW5nc2AgKGJvb2xlYW4sIGRlZmF1bHQgZmFs
c2UpIG1ha2VzIHRoZSBzdWJkaXZpc2lvbnMgaW5kZXBlbmRlbnQgZnJvbSBlYWNoIG90aGVyLCBz
byB0aGV5IGJlY29tZSBkaWZmZXJlbnQgZmFjZXMuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBl
bmNsb3NlYCAgKGJvb2xlYW4sIGRlZmF1bHQgZmFsc2UpIGFkZHMgdHdvIGV4dHJhIGZhY2VzIHBl
ciBzdWJkaXZpc2lvbiB0byBhIHNsaWNlZCBjeWxpbmRlciB0byBjbG9zZSBpdCBhcm91bmQgaXRz
IGhlaWdodCBheGlzLgorICAgICAqICogVGhlIHBhcmFtZXRlciBgY2FwYCBzZXRzIHRoZSB3YXkg
dGhlIGN5bGluZGVyIGlzIGNhcHBlZC4gUG9zc2libGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLk5P
X0NBUCwgQkFCWUxPTi5NZXNoLkNBUF9TVEFSVCwgQkFCWUxPTi5NZXNoLkNBUF9FTkQsIEJBQllM
T04uTWVzaC5DQVBfQUxMIChkZWZhdWx0KS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGFyY2Ag
KGZsb2F0LCBkZWZhdWx0IDEpIGlzIHRoZSByYXRpbyAobWF4IDEpIHRvIGFwcGx5IHRvIHRoZSBj
aXJjdW1mZXJlbmNlIHRvIHNsaWNlIHRoZSBjeWxpbmRlci4KKyAgICAgKiAqIFlvdSBjYW4gc2V0
IGRpZmZlcmVudCBjb2xvcnMgYW5kIGRpZmZlcmVudCBpbWFnZXMgdG8gZWFjaCBib3ggc2lkZSBi
eSB1c2luZyB0aGUgcGFyYW1ldGVycyBgZmFjZUNvbG9yc2AgKGFuIGFycmF5IG9mIG4gQ29sb3Iz
IGVsZW1lbnRzKSBhbmQgYGZhY2VVVmAgKGFuIGFycmF5IG9mIG4gVmVjdG9yNCBlbGVtZW50cyku
CisgICAgICogKiBUaGUgdmFsdWUgb2YgbiBpcyB0aGUgbnVtYmVyIG9mIGN5bGluZGVyIGZhY2Vz
LiBJZiB0aGUgY3lsaW5kZXIgaGFzIG9ubHkgMSBzdWJkaXZpc2lvbnMsIG4gZXF1YWxzIDogdG9w
IGZhY2UgKyBjeWxpbmRlciBzdXJmYWNlICsgYm90dG9tIGZhY2UgPSAzCisgICAgICogKiBOb3cs
IGlmIHRoZSBjeWxpbmRlciBoYXMgNSBpbmRlcGVuZGVudCBzdWJkaXZpc2lvbnMgKGhhc1Jpbmdz
ID0gdHJ1ZSksIG4gZXF1YWxzIDogdG9wIGZhY2UgKyA1IHN0cmlwZSBzdXJmYWNlcyArIGJvdHRv
bSBmYWNlID0gMiArIDUgPSA3CisgICAgICogKiBGaW5hbGx5LCBpZiB0aGUgY3lsaW5kZXIgaGFz
IDUgaW5kZXBlbmRlbnQgc3ViZGl2aXNpb25zIGFuZCBpcyBlbmNsb3NlLCBuIGVxdWFscyA6IHRv
cCBmYWNlICsgNSB4IChzdHJpcGUgc3VyZmFjZSArIDIgY2xvc2luZyBmYWNlcykgKyBib3R0b20g
ZmFjZSA9IDIgKyA1ICogMyA9IDE3CisgICAgICogKiBFYWNoIGFycmF5IChjb2xvciBvciBVVnMp
IGlzIGFsd2F5cyBvcmRlcmVkIHRoZSBzYW1lIHdheSA6IHRoZSBmaXJzdCBlbGVtZW50IGlzIHRo
ZSBib3R0b20gY2FwLCB0aGUgbGFzdCBlbGVtZW50IGlzIHRoZSB0b3AgY2FwLiBUaGUgb3RoZXIg
ZWxlbWVudHMgYXJlIGVhY2ggYSByaW5nIHN1cmZhY2UuCisgICAgICogKiBJZiBgZW5jbG9zZWAg
aXMgZmFsc2UsIGEgcmluZyBzdXJmYWNlIGlzIG9uZSBlbGVtZW50LgorICAgICAqICogSWYgYGVu
Y2xvc2VgIGlzIHRydWUsIGEgcmluZyBzdXJmYWNlIGlzIDMgc3VjY2Vzc2l2ZSBlbGVtZW50cyBp
biB0aGUgYXJyYXkgOiB0aGUgdHVidWxhciBzdXJmYWNlLCB0aGVuIHRoZSB0d28gY2xvc2luZyBm
YWNlcy4KKyAgICAgKiAqIEV4YW1wbGUgaG93IHRvIHNldCBjb2xvcnMgYW5kIHRleHR1cmVzIG9u
IGEgc2xpY2VkIGN5bGluZGVyIDogaHR0cHM6Ly93d3cuaHRtbDVnYW1lZGV2cy5jb20vdG9waWMv
MTc5NDUtY3JlYXRpbmctYS1jbG9zZWQtc2xpY2Utb2YtYS1jeWxpbmRlci8jY29tbWVudC0xMDYz
NzkKKyAgICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3
aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxP
Ti5NZXNoLkJBQ0tTSURFIG9yIEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5
b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMg
b2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRo
ZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNg
IGFuZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0
aW9uCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBi
b29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVy
bmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQuCisgICAgICog
QHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBv
cHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAg
KiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5z
IHRoZSBjeWxpbmRlciBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9zZXRfc2hhcGVzI2N5bGluZGVyLW9yLWNvbmUKKyAgICAgKi8KKyAgICBNZXNoQnVp
bGRlci5DcmVhdGVDeWxpbmRlciA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkgewor
ICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAg
cmV0dXJuIF9CdWlsZGVyc19jeWxpbmRlckJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siQ3lsaW5kZXJCdWlsZGVyIl0uQ3JlYXRlQ3lsaW5kZXIobmFtZSwgb3B0aW9ucywgc2Nl
bmUpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHRvcnVzIG1lc2gKKyAgICAg
KiAqIFRoZSBwYXJhbWV0ZXIgYGRpYW1ldGVyYCBzZXRzIHRoZSBkaWFtZXRlciBzaXplIChmbG9h
dCkgb2YgdGhlIHRvcnVzIChkZWZhdWx0IDEpCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGB0aGlj
a25lc3NgIHNldHMgdGhlIGRpYW1ldGVyIHNpemUgb2YgdGhlIHR1YmUgb2YgdGhlIHRvcnVzIChm
bG9hdCwgZGVmYXVsdCAwLjUpCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGB0ZXNzZWxsYXRpb25g
IHNldHMgdGhlIG51bWJlciBvZiB0b3J1cyBzaWRlcyAocG9zdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0
IDE2KQorICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9u
IHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBCQUJZ
TE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNoLkRPVUJMRVNJREUKKyAgICAgKiAqIElm
IHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hhdCBwYXJ0
cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZlbHkgb24g
dGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBmcm9udFVW
c2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFpbCBoZXJlIDogaHR0cHM6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50
YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhl
IGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50
ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZC4KKyAgICAg
KiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFt
IG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAg
ICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVy
bnMgdGhlIHRvcnVzIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL3NldF9zaGFwZXMjdG9ydXMKKyAgICAgKi8KKyAgICBNZXNoQnVpbGRlci5DcmVhdGVU
b3J1cyA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkgeworICAgICAgICBpZiAoc2Nl
bmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgcmV0dXJuIF9CdWlsZGVy
c190b3J1c0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVG9ydXNCdWlsZGVy
Il0uQ3JlYXRlVG9ydXMobmFtZSwgb3B0aW9ucywgc2NlbmUpOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIHRvcnVzIGtub3QgbWVzaAorICAgICAqICogVGhlIHBhcmFtZXRlciBg
cmFkaXVzYCBzZXRzIHRoZSBnbG9iYWwgcmFkaXVzIHNpemUgKGZsb2F0KSBvZiB0aGUgdG9ydXMg
a25vdCAoZGVmYXVsdCAyKQorICAgICAqICogVGhlIHBhcmFtZXRlciBgcmFkaWFsU2VnbWVudHNg
IHNldHMgdGhlIG51bWJlciBvZiBzaWRlcyBvbiBlYWNoIHR1YmUgc2VnbWVudHMgKHBvc2l0aXZl
IGludGVnZXIsIGRlZmF1bHQgMzIpCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGB0dWJ1bGFyU2Vn
bWVudHNgIHNldHMgdGhlIG51bWJlciBvZiB0dWJlcyB0byBkZWNvbXBvc2UgdGhlIGtub3QgaW50
byAocG9zaXRpdmUgaW50ZWdlciwgZGVmYXVsdCAzMikKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXJz
IGBwYCBhbmQgYHFgIGFyZSB0aGUgbnVtYmVyIG9mIHdpbmRpbmdzIG9uIGVhY2ggYXhpcyAocG9z
aXRpdmUgaW50ZWdlcnMsIGRlZmF1bHQgMiBhbmQgMykKKyAgICAgKiAqIFlvdSBjYW4gYWxzbyBz
ZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9OLk1l
c2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJBQllMT04u
TWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVkIG1l
c2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8gY3Jv
cCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lkZXMg
d2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBE
ZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNjb3Zl
cl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUgbWVzaCBjYW4g
YmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxl
YCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRv
IGNoYW5nZSBvbmNlIGNyZWF0ZWQuCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFt
ZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMg
dXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUg
aG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSB0b3J1cyBrbm90IG1lc2gKKyAgICAg
KiBAc2VlICBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9zZXRfc2hhcGVzI3RvcnVz
LWtub3QKKyAgICAgKi8KKyAgICBNZXNoQnVpbGRlci5DcmVhdGVUb3J1c0tub3QgPSBmdW5jdGlv
biAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDAp
IHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfdG9ydXNLbm90QnVp
bGRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJUb3J1c0tub3RCdWlsZGVyIl0uQ3Jl
YXRlVG9ydXNLbm90KG5hbWUsIG9wdGlvbnMsIHNjZW5lKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBsaW5lIHN5c3RlbSBtZXNoLiBBIGxpbmUgc3lzdGVtIGlzIGEgcG9vbCBv
ZiBtYW55IGxpbmVzIGdhdGhlcmVkIGluIGEgc2luZ2xlIG1lc2gKKyAgICAgKiAqIEEgbGluZSBz
eXN0ZW0gbWVzaCBpcyBjb25zaWRlcmVkIGFzIGEgcGFyYW1ldHJpYyBzaGFwZSBzaW5jZSBpdCBo
YXMgbm8gcHJlZGVmaW5lZCBvcmlnaW5hbCBzaGFwZS4gSXRzIHNoYXBlIGlzIGRldGVybWluZWQg
YnkgdGhlIHBhc3NlZCBhcnJheSBvZiBsaW5lcyBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIKKyAgICAg
KiAqIExpa2UgZXZlcnkgb3RoZXIgcGFyYW1ldHJpYyBzaGFwZSwgaXQgaXMgZHluYW1pY2FsbHkg
dXBkYXRhYmxlIGJ5IHBhc3NpbmcgYW4gZXhpc3RpbmcgaW5zdGFuY2Ugb2YgTGluZVN5c3RlbSB0
byB0aGlzIHN0YXRpYyBmdW5jdGlvbgorICAgICAqICogVGhlIHBhcmFtZXRlciBgbGluZXNgIGlz
IGFuIGFycmF5IG9mIGxpbmVzLCBlYWNoIGxpbmUgYmVpbmcgYW4gYXJyYXkgb2Ygc3VjY2Vzc2l2
ZSBWZWN0b3IzCisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnN0YW5jZWAgaXMg
YW4gaW5zdGFuY2Ugb2YgYW4gZXhpc3RpbmcgTGluZVN5c3RlbSBvYmplY3QgdG8gYmUgdXBkYXRl
ZCB3aXRoIHRoZSBwYXNzZWQgYGxpbmVzYCBwYXJhbWV0ZXIKKyAgICAgKiAqIFRoZSBvcHRpb25h
bCBwYXJhbWV0ZXIgYGNvbG9yc2AgaXMgYW4gYXJyYXkgb2YgbGluZSBjb2xvcnMsIGVhY2ggbGlu
ZSBjb2xvcnMgYmVpbmcgYW4gYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBDb2xvcjQsIG9uZSBwZXIgbGlu
ZSBwb2ludAorICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgdXNlVmVydGV4QWxwaGFg
IGlzIHRvIGJlIHNldCB0byBgZmFsc2VgIChkZWZhdWx0IGB0cnVlYCkgd2hlbiB5b3UgZG9uJ3Qg
bmVlZCB0aGUgYWxwaGEgYmxlbmRpbmcgKGZhc3RlcikKKyAgICAgKiAqIFVwZGF0aW5nIGEgc2lt
cGxlIExpbmUgbWVzaCwgeW91IGp1c3QgbmVlZCB0byB1cGRhdGUgZXZlcnkgbGluZSBpbiB0aGUg
YGxpbmVzYCBhcnJheSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b19k
eW5hbWljYWxseV9tb3JwaF9hX21lc2gjbGluZXMtYW5kLWRhc2hlZGxpbmVzCisgICAgICogKiBX
aGVuIHVwZGF0aW5nIGFuIGluc3RhbmNlLCByZW1lbWJlciB0aGF0IG9ubHkgbGluZSBwb2ludCBw
b3NpdGlvbnMgY2FuIGNoYW5nZSwgbm90IHRoZSBudW1iZXIgb2YgcG9pbnRzLCBuZWl0aGVyIHRo
ZSBudW1iZXIgb2YgbGluZXMKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRh
YmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNl
KSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3Jl
YXRlZAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1l
dHJpY19zaGFwZXMjbGluZS1zeXN0ZW0KKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBu
YW1lIG9mIHRoZSBuZXcgbGluZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVz
IHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBsaW5lIHN5c3RlbQorICAgICAqIEBwYXJh
bSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgYSBuZXcg
bGluZSBzeXN0ZW0gbWVzaAorICAgICAqLworICAgIE1lc2hCdWlsZGVyLkNyZWF0ZUxpbmVTeXN0
ZW0gPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgcmV0dXJuIF9C
dWlsZGVyc19saW5lc0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTGluZXNC
dWlsZGVyIl0uQ3JlYXRlTGluZVN5c3RlbShuYW1lLCBvcHRpb25zLCBzY2VuZSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbGluZSBtZXNoCisgICAgICogQSBsaW5lIG1lc2gg
aXMgY29uc2lkZXJlZCBhcyBhIHBhcmFtZXRyaWMgc2hhcGUgc2luY2UgaXQgaGFzIG5vIHByZWRl
ZmluZWQgb3JpZ2luYWwgc2hhcGUuIEl0cyBzaGFwZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwYXNz
ZWQgYXJyYXkgb2YgcG9pbnRzIGFzIGFuIGlucHV0IHBhcmFtZXRlcgorICAgICAqICogTGlrZSBl
dmVyeSBvdGhlciBwYXJhbWV0cmljIHNoYXBlLCBpdCBpcyBkeW5hbWljYWxseSB1cGRhdGFibGUg
YnkgcGFzc2luZyBhbiBleGlzdGluZyBpbnN0YW5jZSBvZiBMaW5lTWVzaCB0byB0aGlzIHN0YXRp
YyBmdW5jdGlvbgorICAgICAqICogVGhlIHBhcmFtZXRlciBgcG9pbnRzYCBpcyBhbiBhcnJheSBz
dWNjZXNzaXZlIFZlY3RvcjMKKyAgICAgKiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYGluc3Rh
bmNlYCBpcyBhbiBpbnN0YW5jZSBvZiBhbiBleGlzdGluZyBMaW5lTWVzaCBvYmplY3QgdG8gYmUg
dXBkYXRlZCB3aXRoIHRoZSBwYXNzZWQgYHBvaW50c2AgcGFyYW1ldGVyIDogaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX2R5bmFtaWNhbGx5X21vcnBoX2FfbWVzaCNsaW5l
cy1hbmQtZGFzaGVkbGluZXMKKyAgICAgKiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgYGNvbG9y
c2AgaXMgYW4gYXJyYXkgb2Ygc3VjY2Vzc2l2ZSBDb2xvcjQsIG9uZSBwZXIgbGluZSBwb2ludAor
ICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgdXNlVmVydGV4QWxwaGFgIGlzIHRvIGJl
IHNldCB0byBgZmFsc2VgIChkZWZhdWx0IGB0cnVlYCkgd2hlbiB5b3UgZG9uJ3QgbmVlZCBhbHBo
YSBibGVuZGluZyAoZmFzdGVyKQorICAgICAqICogV2hlbiB1cGRhdGluZyBhbiBpbnN0YW5jZSwg
cmVtZW1iZXIgdGhhdCBvbmx5IHBvaW50IHBvc2l0aW9ucyBjYW4gY2hhbmdlLCBub3QgdGhlIG51
bWJlciBvZiBwb2ludHMKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxl
IHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBp
ZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRl
ZAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJp
Y19zaGFwZXMjbGluZXMKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRo
ZSBuZXcgbGluZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRp
b25zIHVzZWQgdG8gY3JlYXRlIHRoZSBsaW5lIHN5c3RlbQorICAgICAqIEBwYXJhbSBzY2VuZSBk
ZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgYSBuZXcgbGluZSBtZXNo
CisgICAgICovCisgICAgTWVzaEJ1aWxkZXIuQ3JlYXRlTGluZXMgPSBmdW5jdGlvbiAobmFtZSwg
b3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUg
PSBudWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfbGluZXNCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIkxpbmVzQnVpbGRlciJdLkNyZWF0ZUxpbmVzKG5hbWUsIG9w
dGlvbnMsIHNjZW5lKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBkYXNoZWQg
bGluZSBtZXNoCisgICAgICogKiBBIGRhc2hlZCBsaW5lIG1lc2ggaXMgY29uc2lkZXJlZCBhcyBh
IHBhcmFtZXRyaWMgc2hhcGUgc2luY2UgaXQgaGFzIG5vIHByZWRlZmluZWQgb3JpZ2luYWwgc2hh
cGUuIEl0cyBzaGFwZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwYXNzZWQgYXJyYXkgb2YgcG9pbnRz
IGFzIGFuIGlucHV0IHBhcmFtZXRlcgorICAgICAqICogTGlrZSBldmVyeSBvdGhlciBwYXJhbWV0
cmljIHNoYXBlLCBpdCBpcyBkeW5hbWljYWxseSB1cGRhdGFibGUgYnkgcGFzc2luZyBhbiBleGlz
dGluZyBpbnN0YW5jZSBvZiBMaW5lTWVzaCB0byB0aGlzIHN0YXRpYyBmdW5jdGlvbgorICAgICAq
ICogVGhlIHBhcmFtZXRlciBgcG9pbnRzYCBpcyBhbiBhcnJheSBzdWNjZXNzaXZlIFZlY3RvcjMK
KyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGRhc2hOYmAgaXMgdGhlIGludGVuZGVkIHRvdGFsIG51
bWJlciBvZiBkYXNoZXMgKHBvc2l0aXZlIGludGVnZXIsIGRlZmF1bHQgMjAwKQorICAgICAqICog
VGhlIHBhcmFtZXRlciBgZGFzaFNpemVgIGlzIHRoZSBzaXplIG9mIHRoZSBkYXNoZXMgcmVsYXRp
dmVseSB0aGUgZGFzaCBudW1iZXIgKHBvc2l0aXZlIGZsb2F0LCBkZWZhdWx0IDMpCisgICAgICog
KiBUaGUgcGFyYW1ldGVyIGBnYXBTaXplYCBpcyB0aGUgc2l6ZSBvZiB0aGUgZ2FwIGJldHdlZW4g
dHdvIHN1Y2Nlc3NpdmUgZGFzaGVzIHJlbGF0aXZlbHkgdGhlIGRhc2ggbnVtYmVyIChwb3NpdGl2
ZSBmbG9hdCwgZGVmYXVsdCAxKQorICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgaW5z
dGFuY2VgIGlzIGFuIGluc3RhbmNlIG9mIGFuIGV4aXN0aW5nIExpbmVNZXNoIG9iamVjdCB0byBi
ZSB1cGRhdGVkIHdpdGggdGhlIHBhc3NlZCBgcG9pbnRzYCBwYXJhbWV0ZXIgOiBodHRwczovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fZHluYW1pY2FsbHlfbW9ycGhfYV9tZXNoI2xp
bmVzLWFuZC1kYXNoZWRsaW5lcworICAgICAqICogV2hlbiB1cGRhdGluZyBhbiBpbnN0YW5jZSwg
cmVtZW1iZXIgdGhhdCBvbmx5IHBvaW50IHBvc2l0aW9ucyBjYW4gY2hhbmdlLCBub3QgdGhlIG51
bWJlciBvZiBwb2ludHMKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxl
IHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBp
ZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRl
ZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAg
KiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBt
ZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAg
KiBAcmV0dXJucyB0aGUgZGFzaGVkIGxpbmUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjZGFzaGVkLWxpbmVzCisgICAg
ICovCisgICAgTWVzaEJ1aWxkZXIuQ3JlYXRlRGFzaGVkTGluZXMgPSBmdW5jdGlvbiAobmFtZSwg
b3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUg
PSBudWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfbGluZXNCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIkxpbmVzQnVpbGRlciJdLkNyZWF0ZURhc2hlZExpbmVzKG5h
bWUsIG9wdGlvbnMsIHNjZW5lKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4g
ZXh0cnVkZWQgc2hhcGUgbWVzaC4gVGhlIGV4dHJ1c2lvbiBpcyBhIHBhcmFtZXRyaWMgc2hhcGUu
IEl0IGhhcyBubyBwcmVkZWZpbmVkIHNoYXBlLiBJdHMgZmluYWwgc2hhcGUgd2lsbCBkZXBlbmQg
b24gdGhlIGlucHV0IHBhcmFtZXRlcnMuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBzaGFwZWAg
aXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgYXJyYXkgZGVw
aWN0cyB0aGUgc2hhcGUgdG8gYmUgZXh0cnVkZWQgaW4gaXRzIGxvY2FsIHNwYWNlIDogdGhlIHNo
YXBlIG11c3QgYmUgZGVzaWduZWQgaW4gdGhlIHhPeSBwbGFuZSBhbmQgd2lsbCBiZSBleHRydWRl
ZCBhbG9uZyB0aGUgWiBheGlzLgorICAgICAqICogVGhlIHBhcmFtZXRlciBgcGF0aGAgaXMgYSBy
ZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgaXMgdGhlIGF4aXMgY3Vy
dmUgdGhlIHNoYXBlIGlzIGV4dHJ1ZGVkIGFsb25nLgorICAgICAqICogVGhlIHBhcmFtZXRlciBg
cm90YXRpb25gIChmbG9hdCwgZGVmYXVsdCAwIHJhZGlhbnMpIGlzIHRoZSBhbmdsZSB2YWx1ZSB0
byByb3RhdGUgdGhlIHNoYXBlIGVhY2ggc3RlcCAoZWFjaCBwYXRoIHBvaW50KSwgZnJvbSB0aGUg
Zm9ybWVyIHN0ZXAgKHNvIHJvdGF0aW9uIGFkZGVkIGVhY2ggc3RlcCkgYWxvbmcgdGhlIGN1cnZl
LgorICAgICAqICogVGhlIHBhcmFtZXRlciBgc2NhbGVgIChmbG9hdCwgZGVmYXVsdCAxKSBpcyB0
aGUgdmFsdWUgdG8gc2NhbGUgdGhlIHNoYXBlLgorICAgICAqICogVGhlIHBhcmFtZXRlciBgY2Fw
YCBzZXRzIHRoZSB3YXkgdGhlIGV4dHJ1ZGVkIHNoYXBlIGlzIGNhcHBlZC4gUG9zc2libGUgdmFs
dWVzIDogQkFCWUxPTi5NZXNoLk5PX0NBUCAoZGVmYXVsdCksIEJBQllMT04uTWVzaC5DQVBfU1RB
UlQsIEJBQllMT04uTWVzaC5DQVBfRU5ELCBCQUJZTE9OLk1lc2guQ0FQX0FMTAorICAgICAqICog
VGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgaW5zdGFuY2VgIGlzIGFuIGluc3RhbmNlIG9mIGFuIGV4
aXN0aW5nIEV4dHJ1ZGVkU2hhcGUgb2JqZWN0IHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGUgcGFzc2Vk
IGBzaGFwZWAsIGBwYXRoYCwgYHNjYWxlYCBvciBgcm90YXRpb25gIHBhcmFtZXRlcnMgOiBodHRw
czovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fZHluYW1pY2FsbHlfbW9ycGhfYV9t
ZXNoI2V4dHJ1ZGVkLXNoYXBlCisgICAgICogKiBSZW1lbWJlciB5b3UgY2FuIG9ubHkgY2hhbmdl
IHRoZSBzaGFwZSBvciBwYXRoIHBvaW50IHBvc2l0aW9ucywgbm90IHRoZWlyIG51bWJlciB3aGVu
IHVwZGF0aW5nIGFuIGV4dHJ1ZGVkIHNoYXBlLgorICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0
aGUgbWVzaCBzaWRlIG9yaWVudGF0aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5G
Uk9OVFNJREUgKGRlZmF1bHQpLCBCQUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNo
LkRPVUJMRVNJREUKKyAgICAgKiAqIElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwg
eW91IGNhbiBjaG9vc2Ugd2hhdCBwYXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFu
ZCBzdGljayByZXNwZWN0aXZlbHkgb24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRo
IHRoZSBwYXJhbWV0ZXJzIGBmcm9udFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFp
bCBoZXJlIDogaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jh
c2ljX2VsZW1lbnRzI3NpZGUtb3JpZW50YXRpb24KKyAgICAgKiAqIFRoZSBvcHRpb25hbCBwYXJh
bWV0ZXIgYGludmVydFVWYCAoYm9vbGVhbiwgZGVmYXVsdCBmYWxzZSkgc3dhcHMgaW4gdGhlIGdl
b21ldHJ5IHRoZSBVIGFuZCBWIGNvb3JkaW5hdGVzIHRvIGFwcGx5IGEgdGV4dHVyZS4KKyAgICAg
KiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFy
YW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0
cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZC4KKyAgICAgKiBAcGFyYW0gbmFt
ZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVm
aW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBz
Y2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdGhlIGV4dHJ1
ZGVkIHNoYXBlIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL3BhcmFtZXRyaWNfc2hhcGVzCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9wYXJhbWV0cmljX3NoYXBlcyNleHRydWRlZC1zaGFwZXMKKyAgICAgKi8KKyAg
ICBNZXNoQnVpbGRlci5FeHRydWRlU2hhcGUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2Nl
bmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9Cisg
ICAgICAgIHJldHVybiBfQnVpbGRlcnNfc2hhcGVCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xMF9fWyJTaGFwZUJ1aWxkZXIiXS5FeHRydWRlU2hhcGUobmFtZSwgb3B0aW9ucywgc2Nl
bmUpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBjdXN0b20gZXh0cnVkZWQg
c2hhcGUgbWVzaC4KKyAgICAgKiBUaGUgY3VzdG9tIGV4dHJ1c2lvbiBpcyBhIHBhcmFtZXRyaWMg
c2hhcGUuIEl0IGhhcyBubyBwcmVkZWZpbmVkIHNoYXBlLiBJdHMgZmluYWwgc2hhcGUgd2lsbCBk
ZXBlbmQgb24gdGhlIGlucHV0IHBhcmFtZXRlcnMuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBz
aGFwZWAgaXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgYXJy
YXkgZGVwaWN0cyB0aGUgc2hhcGUgdG8gYmUgZXh0cnVkZWQgaW4gaXRzIGxvY2FsIHNwYWNlIDog
dGhlIHNoYXBlIG11c3QgYmUgZGVzaWduZWQgaW4gdGhlIHhPeSBwbGFuZSBhbmQgd2lsbCBiZSBl
eHRydWRlZCBhbG9uZyB0aGUgWiBheGlzLgorICAgICAqICogVGhlIHBhcmFtZXRlciBgcGF0aGAg
aXMgYSByZXF1aXJlZCBhcnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgaXMgdGhlIGF4
aXMgY3VydmUgdGhlIHNoYXBlIGlzIGV4dHJ1ZGVkIGFsb25nLgorICAgICAqICogVGhlIHBhcmFt
ZXRlciBgcm90YXRpb25GdW5jdGlvbmAgKEpTIGZ1bmN0aW9uKSBpcyBhIGN1c3RvbSBKYXZhc2Ny
aXB0IGZ1bmN0aW9uIGNhbGxlZCBvbiBlYWNoIHBhdGggcG9pbnQuIFRoaXMgZnVuY3Rpb24gaXMg
cGFzc2VkIHRoZSBwb3NpdGlvbiBpIG9mIHRoZSBwb2ludCBpbiB0aGUgcGF0aCBhbmQgdGhlIGRp
c3RhbmNlIG9mIHRoaXMgcG9pbnQgZnJvbSB0aGUgYmVnaW5pbmcgb2YgdGhlIHBhdGgKKyAgICAg
KiAqIEl0IG11c3QgcmV0dXJucyBhIGZsb2F0IHZhbHVlIHRoYXQgd2lsbCBiZSB0aGUgcm90YXRp
b24gaW4gcmFkaWFucyBhcHBsaWVkIHRvIHRoZSBzaGFwZSBvbiBlYWNoIHBhdGggcG9pbnQuCisg
ICAgICogKiBUaGUgcGFyYW1ldGVyIGBzY2FsZUZ1bmN0aW9uYCAoSlMgZnVuY3Rpb24pIGlzIGEg
Y3VzdG9tIEphdmFzY3JpcHQgZnVuY3Rpb24gY2FsbGVkIG9uIGVhY2ggcGF0aCBwb2ludC4gVGhp
cyBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHBvc2l0aW9uIGkgb2YgdGhlIHBvaW50IGluIHRoZSBw
YXRoIGFuZCB0aGUgZGlzdGFuY2Ugb2YgdGhpcyBwb2ludCBmcm9tIHRoZSBiZWdpbmluZyBvZiB0
aGUgcGF0aAorICAgICAqICogSXQgbXVzdCByZXR1cm5zIGEgZmxvYXQgdmFsdWUgdGhhdCB3aWxs
IGJlIHRoZSBzY2FsZSB2YWx1ZSBhcHBsaWVkIHRvIHRoZSBzaGFwZSBvbiBlYWNoIHBhdGggcG9p
bnQKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHJpYmJvbkNsb3NlUGF0aGAgKGJvb2xlYW4sIGRl
ZmF1bHQgZmFsc2UpIGZvcmNlcyB0aGUgZXh0cnVzaW9uIHVuZGVybHlpbmcgcmliYm9uIHRvIGNs
b3NlIGFsbCB0aGUgcGF0aHMgaW4gaXRzIGBwYXRoQXJyYXlgCisgICAgICogKiBUaGUgcGFyYW1l
dGVyIGByaWJib25DbG9zZUFycmF5YCAoYm9vbGVhbiwgZGVmYXVsdCBmYWxzZSkgZm9yY2VzIHRo
ZSBleHRydXNpb24gdW5kZXJseWluZyByaWJib24gdG8gY2xvc2UgaXRzIGBwYXRoQXJyYXlgCisg
ICAgICogKiBUaGUgcGFyYW1ldGVyIGBjYXBgIHNldHMgdGhlIHdheSB0aGUgZXh0cnVkZWQgc2hh
cGUgaXMgY2FwcGVkLiBQb3NzaWJsZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guTk9fQ0FQIChkZWZh
dWx0KSwgQkFCWUxPTi5NZXNoLkNBUF9TVEFSVCwgQkFCWUxPTi5NZXNoLkNBUF9FTkQsIEJBQllM
T04uTWVzaC5DQVBfQUxMCisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnN0YW5j
ZWAgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gZXhpc3RpbmcgRXh0cnVkZWRTaGFwZSBvYmplY3QgdG8g
YmUgdXBkYXRlZCB3aXRoIHRoZSBwYXNzZWQgYHNoYXBlYCwgYHBhdGhgLCBgc2NhbGVgIG9yIGBy
b3RhdGlvbmAgcGFyYW1ldGVycyA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hv
d190b19keW5hbWljYWxseV9tb3JwaF9hX21lc2gjZXh0cnVkZWQtc2hhcGUKKyAgICAgKiAqIFJl
bWVtYmVyIHlvdSBjYW4gb25seSBjaGFuZ2UgdGhlIHNoYXBlIG9yIHBhdGggcG9pbnQgcG9zaXRp
b25zLCBub3QgdGhlaXIgbnVtYmVyIHdoZW4gdXBkYXRpbmcgYW4gZXh0cnVkZWQgc2hhcGUKKyAg
ICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRo
ZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNo
LkJBQ0tTSURFIG9yIEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3Jl
YXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhl
IHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9u
dCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBg
YmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5j
b20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisg
ICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnZlcnRVVmAgKGJvb2xlYW4sIGRlZmF1
bHQgZmFsc2UpIHN3YXBzIGluIHRoZSBnZW9tZXRyeSB0aGUgVSBhbmQgViBjb29yZGluYXRlcyB0
byBhcHBseSBhIHRleHR1cmUKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRh
YmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNl
KSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3Jl
YXRlZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAg
ICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRo
ZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VzdG9tIGV4dHJ1ZGVkIHNoYXBlIG1lc2gKKyAgICAgKiBAc2Vl
IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BhcmFtZXRyaWNfc2hhcGVzI2N1c3Rv
bS1leHRydWRlZC1zaGFwZXMKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20v
aG93X3RvL3BhcmFtZXRyaWNfc2hhcGVzCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9wYXJhbWV0cmljX3NoYXBlcyNleHRydWRlZC1zaGFwZXMKKyAgICAgKi8K
KyAgICBNZXNoQnVpbGRlci5FeHRydWRlU2hhcGVDdXN0b20gPSBmdW5jdGlvbiAobmFtZSwgb3B0
aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBu
dWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfc2hhcGVCdWlsZGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMF9fWyJTaGFwZUJ1aWxkZXIiXS5FeHRydWRlU2hhcGVDdXN0b20obmFt
ZSwgb3B0aW9ucywgc2NlbmUpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBsYXRo
ZSBtZXNoLgorICAgICAqIFRoZSBsYXRoZSBpcyBhIHNoYXBlIHdpdGggYSBzeW1ldHJ5IGF4aXMg
OiBhIDJEIG1vZGVsIHNoYXBlIGlzIHJvdGF0ZWQgYXJvdW5kIHRoaXMgYXhpcyB0byBkZXNpZ24g
dGhlIGxhdGhlCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBzaGFwZWAgaXMgYSByZXF1aXJlZCBh
cnJheSBvZiBzdWNjZXNzaXZlIFZlY3RvcjMuIFRoaXMgYXJyYXkgZGVwaWN0cyB0aGUgc2hhcGUg
dG8gYmUgcm90YXRlZCBpbiBpdHMgbG9jYWwgc3BhY2UgOiB0aGUgc2hhcGUgbXVzdCBiZSBkZXNp
Z25lZCBpbiB0aGUgeE95IHBsYW5lIGFuZCB3aWxsIGJlIHJvdGF0ZWQgYXJvdW5kIHRoZSBZIGF4
aXMuIEl0J3MgdXN1YWxseSBhIDJEIHNoYXBlLCBzbyB0aGUgVmVjdG9yMyB6IGNvb3JkaW5hdGVz
IGFyZSBvZnRlbiBzZXQgdG8gemVybworICAgICAqICogVGhlIHBhcmFtZXRlciBgcmFkaXVzYCAo
cG9zaXRpdmUgZmxvYXQsIGRlZmF1bHQgMSkgaXMgdGhlIHJhZGl1cyB2YWx1ZSBvZiB0aGUgbGF0
aGUKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHRlc3NlbGxhdGlvbmAgKHBvc2l0aXZlIGludGVn
ZXIsIGRlZmF1bHQgNjQpIGlzIHRoZSBzaWRlIG51bWJlciBvZiB0aGUgbGF0aGUKKyAgICAgKiAq
IFRoZSBwYXJhbWV0ZXIgYGNsaXBgIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDApIGlzIHRo
ZSBudW1iZXIgb2Ygc2lkZXMgdG8gbm90IGNyZWF0ZSB3aXRob3V0IGVmZmVjdGluZyB0aGUgZ2Vu
ZXJhbCBzaGFwZSBvZiB0aGUgc2lkZXMKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGFyY2AgKHBv
c2l0aXZlIGZsb2F0LCBkZWZhdWx0IDEpIGlzIHRoZSByYXRpbyBvZiB0aGUgbGF0aGUuIDAuNSBi
dWlsZHMgZm9yIGluc3RhbmNlIGhhbGYgYSBsYXRoZSwgc28gYW4gb3BlbmVkIHNoYXBlCisgICAg
ICogKiBUaGUgcGFyYW1ldGVyIGBjbG9zZWRgIChib29sZWFuLCBkZWZhdWx0IHRydWUpIG9wZW5z
L2Nsb3NlcyB0aGUgbGF0aGUgY2lyY3VtZmVyZW5jZS4gVGhpcyBzaG91bGQgYmUgc2V0IHRvIGZh
bHNlIHdoZW4gdXNlZCB3aXRoIHRoZSBwYXJhbWV0ZXIgImFyYyIKKyAgICAgKiAqIFRoZSBwYXJh
bWV0ZXIgYGNhcGAgc2V0cyB0aGUgd2F5IHRoZSBleHRydWRlZCBzaGFwZSBpcyBjYXBwZWQuIFBv
c3NpYmxlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5OT19DQVAgKGRlZmF1bHQpLCBCQUJZTE9OLk1l
c2guQ0FQX1NUQVJULCBCQUJZTE9OLk1lc2guQ0FQX0VORCwgQkFCWUxPTi5NZXNoLkNBUF9BTEwK
KyAgICAgKiAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRo
IHRoZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5N
ZXNoLkJBQ0tTSURFIG9yIEJBQllMT04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3Ug
Y3JlYXRlIGEgZG91YmxlLXNpZGVkIG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2Yg
dGhlIHRleHR1cmUgaW1hZ2UgdG8gY3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBm
cm9udCBhbmQgdGhlIGJhY2sgc2lkZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFu
ZCBgYmFja1VWc2AgKFZlY3RvcjQpLiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25q
cy5jb20vYmFieWxvbjEwMS9kaXNjb3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9u
CisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnZlcnRVVmAgKGJvb2xlYW4sIGRl
ZmF1bHQgZmFsc2UpIHN3YXBzIGluIHRoZSBnZW9tZXRyeSB0aGUgVSBhbmQgViBjb29yZGluYXRl
cyB0byBhcHBseSBhIHRleHR1cmUKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBk
YXRhYmxlIHdpdGggdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZh
bHNlKSBpZiBpdHMgaW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2Ug
Y3JlYXRlZAorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gK
KyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRl
IHRoZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUK
KyAgICAgKiBAcmV0dXJucyB0aGUgbGF0aGUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjbGF0aGUKKyAgICAgKi8KKyAg
ICBNZXNoQnVpbGRlci5DcmVhdGVMYXRoZSA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2Vu
ZSkgeworICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAg
ICAgICAgcmV0dXJuIF9CdWlsZGVyc19sYXRoZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzExX19bIkxhdGhlQnVpbGRlciJdLkNyZWF0ZUxhdGhlKG5hbWUsIG9wdGlvbnMsIHNjZW5l
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSB0aWxlZCBwbGFuZSBtZXNoCisg
ICAgICogKiBZb3UgY2FuIHNldCBhIGxpbWl0ZWQgcGF0dGVybiBhcnJhbmdlbWVudCB3aXRoIHRo
ZSB0aWxlcworICAgICAqICogWW91IGNhbiBhbHNvIHNldCB0aGUgbWVzaCBzaWRlIG9yaWVudGF0
aW9uIHdpdGggdGhlIHZhbHVlcyA6IEJBQllMT04uTWVzaC5GUk9OVFNJREUgKGRlZmF1bHQpLCBC
QUJZTE9OLk1lc2guQkFDS1NJREUgb3IgQkFCWUxPTi5NZXNoLkRPVUJMRVNJREUKKyAgICAgKiAq
IElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hhdCBw
YXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZlbHkg
b24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBmcm9u
dFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkuIERldGFpbCBoZXJlIDogaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Rpc2NvdmVyX2Jhc2ljX2VsZW1lbnRzI3NpZGUtb3Jp
ZW50YXRpb24KKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGgg
dGhlIGJvb2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMg
aW50ZXJuYWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAorICAg
ICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFy
YW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisg
ICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0
dXJucyB0aGUgcGxhbmUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNv
bS9ob3dfdG8vc2V0X3NoYXBlcyNwbGFuZQorICAgICAqLworICAgIE1lc2hCdWlsZGVyLkNyZWF0
ZVRpbGVkUGxhbmUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAg
aWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHJldHVybiBf
QnVpbGRlcnNfdGlsZWRQbGFuZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19b
IlRpbGVkUGxhbmVCdWlsZGVyIl0uQ3JlYXRlVGlsZWRQbGFuZShuYW1lLCBvcHRpb25zLCBzY2Vu
ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcGxhbmUgbWVzaAorICAgICAq
ICogVGhlIHBhcmFtZXRlciBgc2l6ZWAgc2V0cyB0aGUgc2l6ZSAoZmxvYXQpIG9mIGJvdGggc2lk
ZXMgb2YgdGhlIHBsYW5lIGF0IG9uY2UgKGRlZmF1bHQgMSkKKyAgICAgKiAqIFlvdSBjYW4gc2V0
IHNvbWUgZGlmZmVyZW50IHBsYW5lIGRpbWVuc2lvbnMgYnkgdXNpbmcgdGhlIHBhcmFtZXRlcnMg
YHdpZHRoYCBhbmQgYGhlaWdodGAgKGJvdGggYnkgZGVmYXVsdCBoYXZlIHRoZSBzYW1lIHZhbHVl
IG9mIGBzaXplYCkKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHNvdXJjZVBsYW5lYCBpcyBhIFBs
YW5lIGluc3RhbmNlLiBJdCBidWlsZHMgYSBtZXNoIHBsYW5lIGZyb20gYSBNYXRoIHBsYW5lCisg
ICAgICogKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtZXNoIHNpZGUgb3JpZW50YXRpb24gd2l0aCB0
aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLkZST05UU0lERSAoZGVmYXVsdCksIEJBQllMT04uTWVz
aC5CQUNLU0lERSBvciBCQUJZTE9OLk1lc2guRE9VQkxFU0lERQorICAgICAqICogSWYgeW91IGNy
ZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNob29zZSB3aGF0IHBhcnRzIG9mIHRo
ZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJlc3BlY3RpdmVseSBvbiB0aGUgZnJv
bnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGggdGhlIHBhcmFtZXRlcnMgYGZyb250VVZzYCBhbmQg
YGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBodHRwczovL2RvYy5iYWJ5bG9uanMu
Y29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRhdGlvbgor
ICAgICAqICogVGhlIG1lc2ggY2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0aCB0aGUgYm9vbGVh
biBwYXJhbWV0ZXIgYHVwZGF0YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBpbnRlcm5hbCBn
ZW9tZXRyeSBpcyBzdXBwb3NlZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkCisgICAgICogQHBhcmFt
IG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25z
IGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFy
YW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSBw
bGFuZSBtZXNoCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9z
ZXRfc2hhcGVzI3BsYW5lCisgICAgICovCisgICAgTWVzaEJ1aWxkZXIuQ3JlYXRlUGxhbmUgPSBm
dW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2
b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfcGxhbmVC
dWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJQbGFuZUJ1aWxkZXIiXS5DcmVh
dGVQbGFuZShuYW1lLCBvcHRpb25zLCBzY2VuZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgZ3JvdW5kIG1lc2gKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXJzIGB3aWR0aGAgYW5k
IGBoZWlnaHRgIChmbG9hdHMsIGRlZmF1bHQgMSkgc2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHNp
emVzIG9mIHRoZSBncm91bmQKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHN1YmRpdmlzaW9uc2Ag
KHBvc2l0aXZlIGludGVnZXIpIHNldHMgdGhlIG51bWJlciBvZiBzdWJkaXZpc2lvbnMgcGVyIHNp
ZGUKKyAgICAgKiAqIFRoZSBtZXNoIGNhbiBiZSBzZXQgdG8gdXBkYXRhYmxlIHdpdGggdGhlIGJv
b2xlYW4gcGFyYW1ldGVyIGB1cGRhdGFibGVgIChkZWZhdWx0IGZhbHNlKSBpZiBpdHMgaW50ZXJu
YWwgZ2VvbWV0cnkgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIG9uY2UgY3JlYXRlZAorICAgICAqIEBw
YXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gb3B0
aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNoCisgICAgICog
QHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJucyB0
aGUgZ3JvdW5kIG1lc2gKKyAgICAgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93
X3RvL3NldF9zaGFwZXMjZ3JvdW5kCisgICAgICovCisgICAgTWVzaEJ1aWxkZXIuQ3JlYXRlR3Jv
dW5kID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIHNjZW5lKSB7CisgICAgICAgIGlmIChzY2Vu
ZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICByZXR1cm4gX0J1aWxkZXJz
X2dyb3VuZEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkdyb3VuZEJ1aWxk
ZXIiXS5DcmVhdGVHcm91bmQobmFtZSwgb3B0aW9ucywgc2NlbmUpOworICAgIH07CisgICAgLyoq
CisgICAgICogQ3JlYXRlcyBhIHRpbGVkIGdyb3VuZCBtZXNoCisgICAgICogKiBUaGUgcGFyYW1l
dGVycyBgeG1pbmAgYW5kIGB4bWF4YCAoZmxvYXRzLCBkZWZhdWx0IC0xIGFuZCAxKSBzZXQgdGhl
IGdyb3VuZCBtaW5pbXVtIGFuZCBtYXhpbXVtIFggY29vcmRpbmF0ZXMKKyAgICAgKiAqIFRoZSBw
YXJhbWV0ZXJzIGB6bWluYCBhbmQgYHptYXhgIChmbG9hdHMsIGRlZmF1bHQgLTEgYW5kIDEpIHNl
dCB0aGUgZ3JvdW5kIG1pbmltdW0gYW5kIG1heGltdW0gWiBjb29yZGluYXRlcworICAgICAqICog
VGhlIHBhcmFtZXRlciBgc3ViZGl2aXNpb25zYCBpcyBhIGphdmFzY3JpcHQgb2JqZWN0IGB7dzog
cG9zaXRpdmUgaW50ZWdlciwgaDogcG9zaXRpdmUgaW50ZWdlcn1gIChkZWZhdWx0IGB7dzogNiwg
aDogNn1gKS4gYHdgIGFuZCBgaGAgYXJlIHRoZSBudW1iZXJzIG9mIHN1YmRpdmlzaW9ucyBvbiB0
aGUgZ3JvdW5kIHdpZHRoIGFuZCBoZWlnaHQuIEVhY2ggc3ViZGl2aXNpb24gaXMgY2FsbGVkIGEg
dGlsZQorICAgICAqICogVGhlIHBhcmFtZXRlciBgcHJlY2lzaW9uYCBpcyBhIGphdmFzY3JpcHQg
b2JqZWN0IGB7dzogcG9zaXRpdmUgaW50ZWdlciwgaDogcG9zaXRpdmUgaW50ZWdlcn1gIChkZWZh
dWx0IGB7dzogMiwgaDogMn1gKS4gYHdgIGFuZCBgaGAgYXJlIHRoZSBudW1iZXJzIG9mIHN1YmRp
dmlzaW9ucyBvbiB0aGUgZ3JvdW5kIHdpZHRoIGFuZCBoZWlnaHQgb2YgZWFjaCB0aWxlCisgICAg
ICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBh
cmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21l
dHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQuCisgICAgICogQHBhcmFtIG5h
bWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRl
ZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0g
c2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSB0aWxl
ZCBncm91bmQgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3df
dG8vc2V0X3NoYXBlcyN0aWxlZC1ncm91bmQKKyAgICAgKi8KKyAgICBNZXNoQnVpbGRlci5DcmVh
dGVUaWxlZEdyb3VuZCA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBzY2VuZSkgeworICAgICAg
ICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgcmV0dXJu
IF9CdWlsZGVyc19ncm91bmRCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJH
cm91bmRCdWlsZGVyIl0uQ3JlYXRlVGlsZWRHcm91bmQobmFtZSwgb3B0aW9ucywgc2NlbmUpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGdyb3VuZCBtZXNoIGZyb20gYSBoZWln
aHQgbWFwCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGB1cmxgIHNldHMgdGhlIFVSTCBvZiB0aGUg
aGVpZ2h0IG1hcCBpbWFnZSByZXNvdXJjZS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXJzIGB3aWR0
aGAgYW5kIGBoZWlnaHRgIChwb3NpdGl2ZSBmbG9hdHMsIGRlZmF1bHQgMTApIHNldCB0aGUgZ3Jv
dW5kIHdpZHRoIGFuZCBoZWlnaHQgc2l6ZXMuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBzdWJk
aXZpc2lvbnNgIChwb3NpdGl2ZSBpbnRlZ2VyLCBkZWZhdWx0IDEpIHNldHMgdGhlIG51bWJlciBv
ZiBzdWJkaXZpc2lvbiBwZXIgc2lkZS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYG1pbkhlaWdo
dGAgKGZsb2F0LCBkZWZhdWx0IDApIGlzIHRoZSBtaW5pbXVtIGFsdGl0dWRlIG9uIHRoZSBncm91
bmQuCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBtYXhIZWlnaHRgIChmbG9hdCwgZGVmYXVsdCAx
KSBpcyB0aGUgbWF4aW11bSBhbHRpdHVkZSBvbiB0aGUgZ3JvdW5kLgorICAgICAqICogVGhlIHBh
cmFtZXRlciBgY29sb3JGaWx0ZXJgIChvcHRpb25hbCBDb2xvcjMsIGRlZmF1bHQgKDAuMywgMC41
OSwgMC4xMSkgKSBpcyB0aGUgZmlsdGVyIHRvIGFwcGx5IHRvIHRoZSBpbWFnZSBwaXhlbCBjb2xv
cnMgdG8gY29tcHV0ZSB0aGUgaGVpZ2h0LgorICAgICAqICogVGhlIHBhcmFtZXRlciBgb25SZWFk
eWAgaXMgYSBqYXZhc2NyaXB0IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQg
IG9uY2UgdGhlIG1lc2ggaXMganVzdCBidWlsdCAodGhlIGhlaWdodCBtYXAgZG93bmxvYWQgY2Fu
IGxhc3Qgc29tZSB0aW1lKS4KKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYGFscGhhRmlsdGVyYCB3
aWxsIGZpbHRlciBhbnkgZGF0YSB3aGVyZSB0aGUgYWxwaGEgY2hhbm5lbCBpcyBiZWxvdyB0aGlz
IHZhbHVlLCBkZWZhdWx0cyAwIChhbGwgZGF0YSB2aXNpYmxlKQorICAgICAqICogVGhlIG1lc2gg
Y2FuIGJlIHNldCB0byB1cGRhdGFibGUgd2l0aCB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgYHVwZGF0
YWJsZWAgKGRlZmF1bHQgZmFsc2UpIGlmIGl0cyBpbnRlcm5hbCBnZW9tZXRyeSBpcyBzdXBwb3Nl
ZCB0byBjaGFuZ2Ugb25jZSBjcmVhdGVkLgorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhl
IG5hbWUgb2YgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gdXJsIGRlZmluZXMgdGhlIHVybCB0byB0
aGUgaGVpZ2h0IG1hcAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMg
dXNlZCB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUg
aG9zdGluZyBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSBncm91bmQgbWVzaAorICAgICAqIEBz
ZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2hlaWdodF9tYXAKKyAgICAg
KiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3NldF9zaGFwZXMjZ3JvdW5k
LWZyb20tYS1oZWlnaHQtbWFwCisgICAgICovCisgICAgTWVzaEJ1aWxkZXIuQ3JlYXRlR3JvdW5k
RnJvbUhlaWdodE1hcCA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIHNjZW5lKSB7Cisg
ICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICBy
ZXR1cm4gX0J1aWxkZXJzX2dyb3VuZEJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0
X19bIkdyb3VuZEJ1aWxkZXIiXS5DcmVhdGVHcm91bmRGcm9tSGVpZ2h0TWFwKG5hbWUsIHVybCwg
b3B0aW9ucywgc2NlbmUpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHBvbHln
b24gbWVzaAorICAgICAqIFRoZSBwb2x5Z29uJ3Mgc2hhcGUgd2lsbCBkZXBlbmQgb24gdGhlIGlu
cHV0IHBhcmFtZXRlcnMgYW5kIGlzIGNvbnN0cnVjdGVkIHBhcmFsbGVsIHRvIGEgZ3JvdW5kIG1l
c2gKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHNoYXBlYCBpcyBhIHJlcXVpcmVkIGFycmF5IG9m
IHN1Y2Nlc3NpdmUgVmVjdG9yMyByZXByZXNlbnRpbmcgdGhlIGNvcm5lcnMgb2YgdGhlIHBvbHln
b24gaW4gdGggWG9aIHBsYW5lLCB0aGF0IGlzIHkgPSAwIGZvciBhbGwgdmVjdG9ycworICAgICAq
ICogWW91IGNhbiBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMg
OiBNZXNoLkZST05UU0lERSAoZGVmYXVsdCksIE1lc2guQkFDS1NJREUgb3IgTWVzaC5ET1VCTEVT
SURFCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBi
b29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVy
bmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAgICAgKiAq
IElmIHlvdSBjcmVhdGUgYSBkb3VibGUtc2lkZWQgbWVzaCwgeW91IGNhbiBjaG9vc2Ugd2hhdCBw
YXJ0cyBvZiB0aGUgdGV4dHVyZSBpbWFnZSB0byBjcm9wIGFuZCBzdGljayByZXNwZWN0aXZlbHkg
b24gdGhlIGZyb250IGFuZCB0aGUgYmFjayBzaWRlcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGBmcm9u
dFVWc2AgYW5kIGBiYWNrVVZzYCAoVmVjdG9yNCkKKyAgICAgKiAqIFJlbWVtYmVyIHlvdSBjYW4g
b25seSBjaGFuZ2UgdGhlIHNoYXBlIHBvc2l0aW9ucywgbm90IHRoZWlyIG51bWJlciB3aGVuIHVw
ZGF0aW5nIGEgcG9seWdvbgorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2Yg
dGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHVzZWQg
dG8gY3JlYXRlIHRoZSBtZXNoCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rp
bmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gZWFyY3V0SW5qZWN0aW9uIGNhbiBiZSB1c2VkIHRvIGlu
amVjdCB5b3VyIG93biBlYXJjdXQgcmVmZXJlbmNlCisgICAgICogQHJldHVybnMgdGhlIHBvbHln
b24gbWVzaAorICAgICAqLworICAgIE1lc2hCdWlsZGVyLkNyZWF0ZVBvbHlnb24gPSBmdW5jdGlv
biAobmFtZSwgb3B0aW9ucywgc2NlbmUsIGVhcmN1dEluamVjdGlvbikgeworICAgICAgICBpZiAo
c2NlbmUgPT09IHZvaWQgMCkgeyBzY2VuZSA9IG51bGw7IH0KKyAgICAgICAgaWYgKGVhcmN1dElu
amVjdGlvbiA9PT0gdm9pZCAwKSB7IGVhcmN1dEluamVjdGlvbiA9IGVhcmN1dDsgfQorICAgICAg
ICByZXR1cm4gX0J1aWxkZXJzX3BvbHlnb25CdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIlBvbHlnb25CdWlsZGVyIl0uQ3JlYXRlUG9seWdvbihuYW1lLCBvcHRpb25zLCBzY2Vu
ZSwgZWFyY3V0SW5qZWN0aW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4g
ZXh0cnVkZWQgcG9seWdvbiBtZXNoLCB3aXRoIGRlcHRoIGluIHRoZSBZIGRpcmVjdGlvbi4KKyAg
ICAgKiAqIFlvdSBjYW4gc2V0IGRpZmZlcmVudCBjb2xvcnMgYW5kIGRpZmZlcmVudCBpbWFnZXMg
dG8gdGhlIHRvcCwgYm90dG9tIGFuZCBleHRydWRlZCBzaWRlIGJ5IHVzaW5nIHRoZSBwYXJhbWV0
ZXJzIGBmYWNlQ29sb3JzYCAoYW4gYXJyYXkgb2YgMyBDb2xvcjMgZWxlbWVudHMpIGFuZCBgZmFj
ZVVWYCAoYW4gYXJyYXkgb2YgMyBWZWN0b3I0IGVsZW1lbnRzKQorICAgICAqIEBzZWUgaHR0cHM6
Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vY3JlYXRlYm94X3Blcl9mYWNlX3RleHR1cmVzX2Fu
ZF9jb2xvcnMKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNo
CisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0
ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5l
CisgICAgICogQHBhcmFtIGVhcmN1dEluamVjdGlvbiBjYW4gYmUgdXNlZCB0byBpbmplY3QgeW91
ciBvd24gZWFyY3V0IHJlZmVyZW5jZQorICAgICAqIEByZXR1cm5zIHRoZSBwb2x5Z29uIG1lc2gK
KyAgICAgKi8KKyAgICBNZXNoQnVpbGRlci5FeHRydWRlUG9seWdvbiA9IGZ1bmN0aW9uIChuYW1l
LCBvcHRpb25zLCBzY2VuZSwgZWFyY3V0SW5qZWN0aW9uKSB7CisgICAgICAgIGlmIChzY2VuZSA9
PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICBpZiAoZWFyY3V0SW5qZWN0aW9u
ID09PSB2b2lkIDApIHsgZWFyY3V0SW5qZWN0aW9uID0gZWFyY3V0OyB9CisgICAgICAgIHJldHVy
biBfQnVpbGRlcnNfcG9seWdvbkJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1si
UG9seWdvbkJ1aWxkZXIiXS5FeHRydWRlUG9seWdvbihuYW1lLCBvcHRpb25zLCBzY2VuZSwgZWFy
Y3V0SW5qZWN0aW9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSB0dWJlIG1l
c2guCisgICAgICogVGhlIHR1YmUgaXMgYSBwYXJhbWV0cmljIHNoYXBlLiBJdCBoYXMgbm8gcHJl
ZGVmaW5lZCBzaGFwZS4gSXRzIGZpbmFsIHNoYXBlIHdpbGwgZGVwZW5kIG9uIHRoZSBpbnB1dCBw
YXJhbWV0ZXJzCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBwYXRoYCBpcyBhIHJlcXVpcmVkIGFy
cmF5IG9mIHN1Y2Nlc3NpdmUgVmVjdG9yMy4gSXQgaXMgdGhlIGN1cnZlIHVzZWQgYXMgdGhlIGF4
aXMgb2YgdGhlIHR1YmUKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHJhZGl1c2AgKHBvc2l0aXZl
IGZsb2F0LCBkZWZhdWx0IDEpIHNldHMgdGhlIHR1YmUgcmFkaXVzIHNpemUKKyAgICAgKiAqIFRo
ZSBwYXJhbWV0ZXIgYHRlc3NlbGxhdGlvbmAgKHBvc2l0aXZlIGZsb2F0LCBkZWZhdWx0IDY0KSBp
cyB0aGUgbnVtYmVyIG9mIHNpZGVzIG9uIHRoZSB0dWJ1bGFyIHN1cmZhY2UKKyAgICAgKiAqIFRo
ZSBwYXJhbWV0ZXIgYHJhZGl1c0Z1bmN0aW9uYCAoamF2YXNjcmlwdCBmdW5jdGlvbiwgZGVmYXVs
dCBudWxsKSBpcyBhIHZhbmlsbGEgamF2YXNjcmlwdCBmdW5jdGlvbi4gSWYgaXQgaXMgbm90IG51
bGwsIGl0IG92ZXJ3cml0dGVzIHRoZSBwYXJhbWV0ZXIgYHJhZGl1c2AKKyAgICAgKiAqIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGVhY2ggcG9pbnQgb2YgdGhlIHR1YmUgcGF0aCBhbmQgaXMg
cGFzc2VkIHRoZSBpbmRleCBgaWAgb2YgdGhlIGktdGggcG9pbnQgYW5kIHRoZSBkaXN0YW5jZSBv
ZiB0aGlzIHBvaW50IGZyb20gdGhlIGZpcnN0IHBvaW50IG9mIHRoZSBwYXRoLiBJdCBtdXN0IHJl
dHVybiBhIHJhZGl1cyB2YWx1ZSAocG9zaXRpdmUgZmxvYXQpCisgICAgICogKiBUaGUgcGFyYW1l
dGVyIGBhcmNgIChwb3NpdGl2ZSBmbG9hdCwgbWF4aW11bSAxLCBkZWZhdWx0IDEpIGlzIHRoZSBy
YXRpbyB0byBhcHBseSB0byB0aGUgdHViZSBjaXJjdW1mZXJlbmNlIDogMiB4IFBJIHggYXJjCisg
ICAgICogKiBUaGUgcGFyYW1ldGVyIGBjYXBgIHNldHMgdGhlIHdheSB0aGUgZXh0cnVkZWQgc2hh
cGUgaXMgY2FwcGVkLiBQb3NzaWJsZSB2YWx1ZXMgOiBCQUJZTE9OLk1lc2guTk9fQ0FQIChkZWZh
dWx0KSwgQkFCWUxPTi5NZXNoLkNBUF9TVEFSVCwgQkFCWUxPTi5NZXNoLkNBUF9FTkQsIEJBQllM
T04uTWVzaC5DQVBfQUxMCisgICAgICogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGBpbnN0YW5j
ZWAgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gZXhpc3RpbmcgVHViZSBvYmplY3QgdG8gYmUgdXBkYXRl
ZCB3aXRoIHRoZSBwYXNzZWQgYHBhdGhBcnJheWAgcGFyYW1ldGVyIDogaHR0cHM6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX2R5bmFtaWNhbGx5X21vcnBoX2FfbWVzaCN0dWJlCisg
ICAgICogKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtZXNoIHNpZGUgb3JpZW50YXRpb24gd2l0aCB0
aGUgdmFsdWVzIDogQkFCWUxPTi5NZXNoLkZST05UU0lERSAoZGVmYXVsdCksIEJBQllMT04uTWVz
aC5CQUNLU0lERSBvciBCQUJZTE9OLk1lc2guRE9VQkxFU0lERQorICAgICAqICogSWYgeW91IGNy
ZWF0ZSBhIGRvdWJsZS1zaWRlZCBtZXNoLCB5b3UgY2FuIGNob29zZSB3aGF0IHBhcnRzIG9mIHRo
ZSB0ZXh0dXJlIGltYWdlIHRvIGNyb3AgYW5kIHN0aWNrIHJlc3BlY3RpdmVseSBvbiB0aGUgZnJv
bnQgYW5kIHRoZSBiYWNrIHNpZGVzIHdpdGggdGhlIHBhcmFtZXRlcnMgYGZyb250VVZzYCBhbmQg
YGJhY2tVVnNgIChWZWN0b3I0KS4gRGV0YWlsIGhlcmUgOiBodHRwczovL2RvYy5iYWJ5bG9uanMu
Y29tL2JhYnlsb24xMDEvZGlzY292ZXJfYmFzaWNfZWxlbWVudHMjc2lkZS1vcmllbnRhdGlvbgor
ICAgICAqICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBgaW52ZXJ0VVZgIChib29sZWFuLCBkZWZh
dWx0IGZhbHNlKSBzd2FwcyBpbiB0aGUgZ2VvbWV0cnkgdGhlIFUgYW5kIFYgY29vcmRpbmF0ZXMg
dG8gYXBwbHkgYSB0ZXh0dXJlCisgICAgICogKiBUaGUgbWVzaCBjYW4gYmUgc2V0IHRvIHVwZGF0
YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRhYmxlYCAoZGVmYXVsdCBmYWxz
ZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2VkIHRvIGNoYW5nZSBvbmNlIGNy
ZWF0ZWQKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBtZXNoCisg
ICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0
aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisg
ICAgICogQHJldHVybnMgdGhlIHR1YmUgbWVzaAorICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMKKyAgICAgKiBAc2VlIGh0dHBzOi8v
ZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3NldF9zaGFwZXMjdHViZQorICAgICAqLworICAgIE1l
c2hCdWlsZGVyLkNyZWF0ZVR1YmUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgc2NlbmUpIHsK
KyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsgc2NlbmUgPSBudWxsOyB9CisgICAgICAg
IHJldHVybiBfQnVpbGRlcnNfdHViZUJ1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1
X19bIlR1YmVCdWlsZGVyIl0uQ3JlYXRlVHViZShuYW1lLCBvcHRpb25zLCBzY2VuZSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcG9seWhlZHJvbiBtZXNoCisgICAgICogKiBU
aGUgcGFyYW1ldGVyIGB0eXBlYCAocG9zaXRpdmUgaW50ZWdlciwgbWF4IDE0LCBkZWZhdWx0IDAp
IHNldHMgdGhlIHBvbHloZWRyb24gdHlwZSB0byBidWlsZCBhbW9uZyB0aGUgMTUgZW1iYmVkZWQg
dHlwZXMuIFBsZWFzZSByZWZlciB0byB0aGUgdHlwZSBzaGVldCBpbiB0aGUgdHV0b3JpYWwgdG8g
Y2hvb3NlIHRoZSB3YW50ZWQgdHlwZQorICAgICAqICogVGhlIHBhcmFtZXRlciBgc2l6ZWAgKHBv
c2l0aXZlIGZsb2F0LCBkZWZhdWx0IDEpIHNldHMgdGhlIHBvbHlnb24gc2l6ZQorICAgICAqICog
WW91IGNhbiBvdmVyd3JpdGUgdGhlIGBzaXplYCBvbiBlYWNoIGRpbWVuc2lvbiBidSB1c2luZyB0
aGUgcGFyYW1ldGVycyBgc2l6ZVhgLCBgc2l6ZVlgIG9yIGBzaXplWmAgKHBvc2l0aXZlIGZsb2F0
cywgZGVmYXVsdCB0byBgc2l6ZWAgdmFsdWUpCisgICAgICogKiBZb3UgY2FuIGJ1aWxkIG90aGVy
IHBvbHloZWRyb24gdHlwZXMgdGhhbiB0aGUgMTUgZW1iYmVkZWQgb25lcyBieSBzZXR0aW5nIHRo
ZSBwYXJhbWV0ZXIgYGN1c3RvbWAgKGBwb2x5aGVkcm9uT2JqZWN0YCwgZGVmYXVsdCBudWxsKS4g
SWYgeW91IHNldCB0aGUgcGFyYW1ldGVyIGBjdXN0b21gLCB0aGlzIG92ZXJ3cml0dGVzIHRoZSBw
YXJhbWV0ZXIgYHR5cGVgCisgICAgICogKiBBIGBwb2x5aGVkcm9uT2JqZWN0YCBpcyBhIGZvcm1h
dHRlZCBqYXZhc2NyaXB0IG9iamVjdC4gWW91J2xsIGZpbmQgYSBmdWxsIGZpbGUgd2l0aCBwcmUt
c2V0IHBvbHloZWRyYSBoZXJlIDogaHR0cHM6Ly9naXRodWIuY29tL0JhYnlsb25KUy9FeHRlbnNp
b25zL3RyZWUvbWFzdGVyL1BvbHloZWRyb24KKyAgICAgKiAqIFlvdSBjYW4gc2V0IHRoZSBjb2xv
ciBhbmQgdGhlIFVWIG9mIGVhY2ggc2lkZSBvZiB0aGUgcG9seWhlZHJvbiB3aXRoIHRoZSBwYXJh
bWV0ZXJzIGBmYWNlQ29sb3JzYCAoQ29sb3I0LCBkZWZhdWx0IGAoMSwgMSwgMSwgMSlgKSBhbmQg
ZmFjZVVWIChWZWN0b3I0LCBkZWZhdWx0IGAoMCwgMCwgMSwgMSlgKQorICAgICAqICogVG8gdW5k
ZXJzdGFuZCBob3cgdG8gc2V0IGBmYWNlVVZgIG9yIGBmYWNlQ29sb3JzYCwgcGxlYXNlIHJlYWQg
dGhpcyBieSBjb25zaWRlcmluZyB0aGUgcmlnaHQgbnVtYmVyIG9mIGZhY2VzIG9mIHlvdXIgcG9s
eWhlZHJvbiwgaW5zdGVhZCBvZiBvbmx5IDYgZm9yIHRoZSBib3ggOiBodHRwczovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9jcmVhdGVib3hfcGVyX2ZhY2VfdGV4dHVyZXNfYW5kX2NvbG9ycwor
ICAgICAqICogVGhlIHBhcmFtZXRlciBgZmxhdGAgKGJvb2xlYW4sIGRlZmF1bHQgdHJ1ZSkuIElm
IHNldCB0byBmYWxzZSwgaXQgZ2l2ZXMgdGhlIHBvbHloZWRyb24gYSBzaW5nbGUgZ2xvYmFsIGZh
Y2UsIHNvIGxlc3MgdmVydGljZXMgYW5kIHNoYXJlZCBub3JtYWxzLiBJbiB0aGlzIGNhc2UsIGBm
YWNlQ29sb3JzYCBhbmQgYGZhY2VVVmAgYXJlIGlnbm9yZWQKKyAgICAgKiAqIFlvdSBjYW4gYWxz
byBzZXQgdGhlIG1lc2ggc2lkZSBvcmllbnRhdGlvbiB3aXRoIHRoZSB2YWx1ZXMgOiBCQUJZTE9O
Lk1lc2guRlJPTlRTSURFIChkZWZhdWx0KSwgQkFCWUxPTi5NZXNoLkJBQ0tTSURFIG9yIEJBQllM
T04uTWVzaC5ET1VCTEVTSURFCisgICAgICogKiBJZiB5b3UgY3JlYXRlIGEgZG91YmxlLXNpZGVk
IG1lc2gsIHlvdSBjYW4gY2hvb3NlIHdoYXQgcGFydHMgb2YgdGhlIHRleHR1cmUgaW1hZ2UgdG8g
Y3JvcCBhbmQgc3RpY2sgcmVzcGVjdGl2ZWx5IG9uIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgc2lk
ZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBgZnJvbnRVVnNgIGFuZCBgYmFja1VWc2AgKFZlY3RvcjQp
LiBEZXRhaWwgaGVyZSA6IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9kaXNj
b3Zlcl9iYXNpY19lbGVtZW50cyNzaWRlLW9yaWVudGF0aW9uCisgICAgICogKiBUaGUgbWVzaCBj
YW4gYmUgc2V0IHRvIHVwZGF0YWJsZSB3aXRoIHRoZSBib29sZWFuIHBhcmFtZXRlciBgdXBkYXRh
YmxlYCAoZGVmYXVsdCBmYWxzZSkgaWYgaXRzIGludGVybmFsIGdlb21ldHJ5IGlzIHN1cHBvc2Vk
IHRvIGNoYW5nZSBvbmNlIGNyZWF0ZWQKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBu
YW1lIG9mIHRoZSBtZXNoCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9u
cyB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzaAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRo
ZSBob3N0aW5nIHNjZW5lCisgICAgICogQHJldHVybnMgdGhlIHBvbHloZWRyb24gbWVzaAorICAg
ICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcG9seWhlZHJhX3NoYXBl
cworICAgICAqLworICAgIE1lc2hCdWlsZGVyLkNyZWF0ZVBvbHloZWRyb24gPSBmdW5jdGlvbiAo
bmFtZSwgb3B0aW9ucywgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsg
c2NlbmUgPSBudWxsOyB9CisgICAgICAgIHJldHVybiBfQnVpbGRlcnNfcG9seWhlZHJvbkJ1aWxk
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIlBvbHloZWRyb25CdWlsZGVyIl0uQ3Jl
YXRlUG9seWhlZHJvbihuYW1lLCBvcHRpb25zLCBzY2VuZSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgZGVjYWwgbWVzaC4KKyAgICAgKiBBIGRlY2FsIGlzIGEgbWVzaCB1c3Vh
bGx5IGFwcGxpZWQgYXMgYSBtb2RlbCBvbnRvIHRoZSBzdXJmYWNlIG9mIGFub3RoZXIgbWVzaC4g
U28gZG9uJ3QgZm9yZ2V0IHRoZSBwYXJhbWV0ZXIgYHNvdXJjZU1lc2hgIGRlcGljdGluZyB0aGUg
ZGVjYWwKKyAgICAgKiAqIFRoZSBwYXJhbWV0ZXIgYHBvc2l0aW9uYCAoVmVjdG9yMywgZGVmYXVs
dCBgKDAsIDAsIDApYCkgc2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGRlY2FsIGluIFdvcmxkIGNv
b3JkaW5hdGVzCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBub3JtYWxgIChWZWN0b3IzLCBkZWZh
dWx0IGBWZWN0b3IzLlVwYCkgc2V0cyB0aGUgbm9ybWFsIG9mIHRoZSBtZXNoIHdoZXJlIHRoZSBk
ZWNhbCBpcyBhcHBsaWVkIG9udG8gaW4gV29ybGQgY29vcmRpbmF0ZXMKKyAgICAgKiAqIFRoZSBw
YXJhbWV0ZXIgYHNpemVgIChWZWN0b3IzLCBkZWZhdWx0IGAoMSwgMSwgMSlgKSBzZXRzIHRoZSBk
ZWNhbCBzY2FsaW5nCisgICAgICogKiBUaGUgcGFyYW1ldGVyIGBhbmdsZWAgKGZsb2F0IGluIHJh
ZGlhbiwgZGVmYXVsdCAwKSBzZXRzIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIGRlY2FsCisgICAg
ICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbWVzaAorICAgICAqIEBwYXJh
bSBzb3VyY2VNZXNoIGRlZmluZXMgdGhlIG1lc2ggd2hlcmUgdGhlIGRlY2FsIG11c3QgYmUgYXBw
bGllZAorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdXNlZCB0byBj
cmVhdGUgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBz
Y2VuZQorICAgICAqIEByZXR1cm5zIHRoZSBkZWNhbCBtZXNoCisgICAgICogQHNlZSBodHRwczov
L2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9kZWNhbHMKKyAgICAgKi8KKyAgICBNZXNoQnVpbGRl
ci5DcmVhdGVEZWNhbCA9IGZ1bmN0aW9uIChuYW1lLCBzb3VyY2VNZXNoLCBvcHRpb25zKSB7Cisg
ICAgICAgIHJldHVybiBfQnVpbGRlcnNfZGVjYWxCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xOF9fWyJEZWNhbEJ1aWxkZXIiXS5DcmVhdGVEZWNhbChuYW1lLCBzb3VyY2VNZXNoLCBv
cHRpb25zKTsKKyAgICB9OworICAgIHJldHVybiBNZXNoQnVpbGRlcjsKK30oKSk7CisKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL21lc2hMT0RMZXZlbC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWVzaGVzL21lc2hMT0RMZXZl
bC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBNZXNoTE9ETGV2ZWwgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiTWVzaExPRExldmVsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNZXNoTE9ETGV2ZWw7
IH0pOworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBhIHNwZWNpZmljIGxldmVsIG9m
IGRldGFpbCBvZiBhIG1lc2gKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9ob3dfdG9fdXNlX2xvZAorICovCit2YXIgTWVzaExPRExldmVsID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgTE9EIGxldmVsCisg
ICAgICogQHBhcmFtIGRpc3RhbmNlIGRlZmluZXMgdGhlIGRpc3RhbmNlIHdoZXJlIHRoaXMgbGV2
ZWwgc2hvdWxkIHN0YXIgYmVpbmcgZGlzcGxheWVkCisgICAgICogQHBhcmFtIG1lc2ggZGVmaW5l
cyB0aGUgbWVzaCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgbGV2ZWwKKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBNZXNoTE9ETGV2ZWwoCisgICAgLyoqIERlZmluZXMgdGhlIGRpc3RhbmNlIHdoZXJlIHRo
aXMgbGV2ZWwgc2hvdWxkIHN0YXJ0IGJlaW5nIGRpc3BsYXllZCAqLworICAgIGRpc3RhbmNlLCAK
KyAgICAvKiogRGVmaW5lcyB0aGUgbWVzaCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgbGV2ZWwgKi8K
KyAgICBtZXNoKSB7CisgICAgICAgIHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZTsKKyAgICAgICAg
dGhpcy5tZXNoID0gbWVzaDsKKyAgICB9CisgICAgcmV0dXJuIE1lc2hMT0RMZXZlbDsKK30oKSk7
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL21lc2hTaW1wbGlmaWNhdGlvbi50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTWVzaGVzL21lc2hTaW1wbGlmaWNhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTaW1wbGlmaWNh
dGlvblNldHRpbmdzLCBTaW1wbGlmaWNhdGlvblF1ZXVlLCBTaW1wbGlmaWNhdGlvblR5cGUgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2ltcGxpZmljYXRpb25TZXR0aW5n
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2ltcGxpZmljYXRpb25TZXR0aW5nczsgfSk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTaW1wbGlmaWNhdGlvblF1ZXVlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBT
aW1wbGlmaWNhdGlvblF1ZXVlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbXBsaWZpY2F0aW9u
VHlwZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2ltcGxpZmljYXRpb25UeXBlOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9y
ICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfc3ViTWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL3N1Yk1lc2gg
Ki8gIi4vTWVzaGVzL3N1Yk1lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVz
aGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01lc2hlcy9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
aHMvbWF0aC5jb25zdGFudHMgKi8gIi4vTWF0aHMvbWF0aC5jb25zdGFudHMudHMiKTsKKworCisK
KworCisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBzcGVjaWZ5IHNpbXBsaWZpY2F0aW9uIG9wdGlv
bnMKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9pbi1icm93c2VyX21l
c2hfc2ltcGxpZmljYXRpb24KKyAqLwordmFyIFNpbXBsaWZpY2F0aW9uU2V0dGluZ3MgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIFNpbXBs
aWZpY2F0aW9uU2V0dGluZ3MKKyAgICAgKiBAcGFyYW0gcXVhbGl0eSBleHBlY3RlZCBxdWFsaXR5
CisgICAgICogQHBhcmFtIGRpc3RhbmNlIGRpc3RhbmNlIHdoZW4gdGhpcyBvcHRpbWl6ZWQgdmVy
c2lvbiBzaG91bGQgYmUgdXNlZAorICAgICAqIEBwYXJhbSBvcHRpbWl6ZU1lc2ggYWxyZWFkeSBv
cHRpbWl6ZWQgbWVzaAorICAgICAqLworICAgIGZ1bmN0aW9uIFNpbXBsaWZpY2F0aW9uU2V0dGlu
Z3MoCisgICAgLyoqIGV4cGVjdGVkIHF1YWxpdHkgKi8KKyAgICBxdWFsaXR5LCAKKyAgICAvKiog
ZGlzdGFuY2Ugd2hlbiB0aGlzIG9wdGltaXplZCB2ZXJzaW9uIHNob3VsZCBiZSB1c2VkICovCisg
ICAgZGlzdGFuY2UsIAorICAgIC8qKiBhbHJlYWR5IG9wdGltaXplZCBtZXNoICAqLworICAgIG9w
dGltaXplTWVzaCkgeworICAgICAgICB0aGlzLnF1YWxpdHkgPSBxdWFsaXR5OworICAgICAgICB0
aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAgIHRoaXMub3B0aW1pemVNZXNoID0gb3B0
aW1pemVNZXNoOworICAgIH0KKyAgICByZXR1cm4gU2ltcGxpZmljYXRpb25TZXR0aW5nczsKK30o
KSk7CisKKy8qKgorICogUXVldWUgdXNlZCB0byBvcmRlciB0aGUgc2ltcGxpZmljYXRpb24gdGFz
a3MKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9pbi1icm93c2VyX21l
c2hfc2ltcGxpZmljYXRpb24KKyAqLwordmFyIFNpbXBsaWZpY2F0aW9uUXVldWUgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBxdWV1
ZQorICAgICAqLworICAgIGZ1bmN0aW9uIFNpbXBsaWZpY2F0aW9uUXVldWUoKSB7CisgICAgICAg
IHRoaXMucnVubmluZyA9IGZhbHNlOworICAgICAgICB0aGlzLl9zaW1wbGlmaWNhdGlvbkFycmF5
ID0gW107CisgICAgfQorICAgIC8qKgorICAgICAqIEFkZHMgYSBuZXcgc2ltcGxpZmljYXRpb24g
dGFzaworICAgICAqIEBwYXJhbSB0YXNrIGRlZmluZXMgYSB0YXNrIHRvIGFkZAorICAgICAqLwor
ICAgIFNpbXBsaWZpY2F0aW9uUXVldWUucHJvdG90eXBlLmFkZFRhc2sgPSBmdW5jdGlvbiAodGFz
aykgeworICAgICAgICB0aGlzLl9zaW1wbGlmaWNhdGlvbkFycmF5LnB1c2godGFzayk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIG5leHQgdGFzaworICAgICAqLworICAgIFNpbXBs
aWZpY2F0aW9uUXVldWUucHJvdG90eXBlLmV4ZWN1dGVOZXh0ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgdGFzayA9IHRoaXMuX3NpbXBsaWZpY2F0aW9uQXJyYXkucG9wKCk7CisgICAgICAg
IGlmICh0YXNrKSB7CisgICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlOworICAgICAgICAg
ICAgdGhpcy5ydW5TaW1wbGlmaWNhdGlvbih0YXNrKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlOworICAgICAgICB9CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBFeGVjdXRlIGEgc2ltcGxpZmljYXRpb24gdGFzaworICAgICAqIEBw
YXJhbSB0YXNrIGRlZmluZXMgdGhlIHRhc2sgdG8gcnVuCisgICAgICovCisgICAgU2ltcGxpZmlj
YXRpb25RdWV1ZS5wcm90b3R5cGUucnVuU2ltcGxpZmljYXRpb24gPSBmdW5jdGlvbiAodGFzaykg
eworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGFzay5wYXJhbGxlbFBy
b2Nlc3NpbmcpIHsKKyAgICAgICAgICAgIC8vcGFyYWxsZWwgc2ltcGxpZmllcgorICAgICAgICAg
ICAgdGFzay5zZXR0aW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChzZXR0aW5nKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHNpbXBsaWZpZXIgPSBfdGhpcy5nZXRTaW1wbGlmaWVyKHRhc2spOworICAgICAg
ICAgICAgICAgIHNpbXBsaWZpZXIuc2ltcGxpZnkoc2V0dGluZywgZnVuY3Rpb24gKG5ld01lc2gp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGFzay5tZXNoLmFkZExPRExldmVsKHNldHRpbmcuZGlz
dGFuY2UsIG5ld01lc2gpOworICAgICAgICAgICAgICAgICAgICBuZXdNZXNoLmlzVmlzaWJsZSA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIC8vY2hlY2sgaWYgaXQgaXMgdGhlIGxhc3QKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcucXVhbGl0eSA9PT0gdGFzay5zZXR0aW5nc1t0
YXNrLnNldHRpbmdzLmxlbmd0aCAtIDFdLnF1YWxpdHkgJiYgdGFzay5zdWNjZXNzQ2FsbGJhY2sp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vYWxsIGRvbmUsIHJ1biB0aGUgc3VjY2VzcyBj
YWxsYmFjay4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suc3VjY2Vzc0NhbGxiYWNrKCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuZXhlY3V0
ZU5leHQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy9zaW5nbGUgc2ltcGxpZmllci4KKyAgICAg
ICAgICAgIHZhciBzaW1wbGlmaWVyID0gdGhpcy5nZXRTaW1wbGlmaWVyKHRhc2spOworICAgICAg
ICAgICAgdmFyIHJ1bkRlY2ltYXRpb24gPSBmdW5jdGlvbiAoc2V0dGluZywgY2FsbGJhY2spIHsK
KyAgICAgICAgICAgICAgICBzaW1wbGlmaWVyLnNpbXBsaWZ5KHNldHRpbmcsIGZ1bmN0aW9uIChu
ZXdNZXNoKSB7CisgICAgICAgICAgICAgICAgICAgIHRhc2subWVzaC5hZGRMT0RMZXZlbChzZXR0
aW5nLmRpc3RhbmNlLCBuZXdNZXNoKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3TWVzaC5pc1Zp
c2libGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAvL3J1biB0aGUgbmV4dCBxdWFsaXR5
IGxldmVsCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siQXN5bmNMb29wIl0uUnVuKHRhc2suc2V0dGluZ3MubGVuZ3RoLCBm
dW5jdGlvbiAobG9vcCkgeworICAgICAgICAgICAgICAgIHJ1bkRlY2ltYXRpb24odGFzay5zZXR0
aW5nc1tsb29wLmluZGV4XSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBsb29w
LmV4ZWN1dGVOZXh0KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9LCBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy9leGVjdXRpb24gZW5kZWQsIHJ1biB0aGUgc3Vj
Y2VzcyBjYWxsYmFjay4KKyAgICAgICAgICAgICAgICBpZiAodGFzay5zdWNjZXNzQ2FsbGJhY2sp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGFzay5zdWNjZXNzQ2FsbGJhY2soKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgX3RoaXMuZXhlY3V0ZU5leHQoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgfTsKKyAgICBTaW1wbGlmaWNhdGlvblF1ZXVlLnByb3Rv
dHlwZS5nZXRTaW1wbGlmaWVyID0gZnVuY3Rpb24gKHRhc2spIHsKKyAgICAgICAgc3dpdGNoICh0
YXNrLnNpbXBsaWZpY2F0aW9uVHlwZSkgeworICAgICAgICAgICAgY2FzZSBTaW1wbGlmaWNhdGlv
blR5cGUuUVVBRFJBVElDOgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbmV3IFF1YWRyYXRpY0Vycm9yU2ltcGxpZmljYXRpb24odGFzay5tZXNoKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgcmV0dXJuIFNpbXBsaWZpY2F0aW9uUXVldWU7Cit9KCkpOworCisv
KioKKyAqIFRoZSBpbXBsZW1lbnRlZCB0eXBlcyBvZiBzaW1wbGlmaWNhdGlvbgorICogQXQgdGhl
IG1vbWVudCBvbmx5IFF1YWRyYXRpYyBFcnJvciBEZWNpbWF0aW9uIGlzIGltcGxlbWVudGVkCisg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaW4tYnJvd3Nlcl9tZXNoX3Np
bXBsaWZpY2F0aW9uCisgKi8KK3ZhciBTaW1wbGlmaWNhdGlvblR5cGU7CisoZnVuY3Rpb24gKFNp
bXBsaWZpY2F0aW9uVHlwZSkgeworICAgIC8qKiBRdWFkcmF0aWMgZXJyb3IgZGVjaW1hdGlvbiAq
LworICAgIFNpbXBsaWZpY2F0aW9uVHlwZVtTaW1wbGlmaWNhdGlvblR5cGVbIlFVQURSQVRJQyJd
ID0gMF0gPSAiUVVBRFJBVElDIjsKK30pKFNpbXBsaWZpY2F0aW9uVHlwZSB8fCAoU2ltcGxpZmlj
YXRpb25UeXBlID0ge30pKTsKK3ZhciBEZWNpbWF0aW9uVHJpYW5nbGUgPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRGVjaW1hdGlvblRyaWFuZ2xlKHZlcnRpY2Vz
KSB7CisgICAgICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlczsKKyAgICAgICAgdGhpcy5lcnJv
ciA9IG5ldyBBcnJheSg0KTsKKyAgICAgICAgdGhpcy5kZWxldGVkID0gZmFsc2U7CisgICAgICAg
IHRoaXMuaXNEaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLmRlbGV0ZVBlbmRpbmcgPSBmYWxz
ZTsKKyAgICAgICAgdGhpcy5ib3JkZXJGYWN0b3IgPSAwOworICAgIH0KKyAgICByZXR1cm4gRGVj
aW1hdGlvblRyaWFuZ2xlOworfSgpKTsKK3ZhciBEZWNpbWF0aW9uVmVydGV4ID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIERlY2ltYXRpb25WZXJ0ZXgocG9zaXRp
b24sIGlkKSB7CisgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgdGhp
cy5pZCA9IGlkOworICAgICAgICB0aGlzLmlzQm9yZGVyID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5x
ID0gbmV3IFF1YWRyYXRpY01hdHJpeCgpOworICAgICAgICB0aGlzLnRyaWFuZ2xlQ291bnQgPSAw
OworICAgICAgICB0aGlzLnRyaWFuZ2xlU3RhcnQgPSAwOworICAgICAgICB0aGlzLm9yaWdpbmFs
T2Zmc2V0cyA9IFtdOworICAgIH0KKyAgICBEZWNpbWF0aW9uVmVydGV4LnByb3RvdHlwZS51cGRh
dGVQb3NpdGlvbiA9IGZ1bmN0aW9uIChuZXdQb3NpdGlvbikgeworICAgICAgICB0aGlzLnBvc2l0
aW9uLmNvcHlGcm9tKG5ld1Bvc2l0aW9uKTsKKyAgICB9OworICAgIHJldHVybiBEZWNpbWF0aW9u
VmVydGV4OworfSgpKTsKK3ZhciBRdWFkcmF0aWNNYXRyaXggPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgZnVuY3Rpb24gUXVhZHJhdGljTWF0cml4KGRhdGEpIHsKKyAgICAgICAg
dGhpcy5kYXRhID0gbmV3IEFycmF5KDEwKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDsgKytpKSB7CisgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhW2ldKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5kYXRhW2ldID0gZGF0YVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IDA7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgUXVhZHJhdGljTWF0cml4LnByb3RvdHlwZS5kZXQgPSBm
dW5jdGlvbiAoYTExLCBhMTIsIGExMywgYTIxLCBhMjIsIGEyMywgYTMxLCBhMzIsIGEzMykgewor
ICAgICAgICB2YXIgZGV0ID0gdGhpcy5kYXRhW2ExMV0gKiB0aGlzLmRhdGFbYTIyXSAqIHRoaXMu
ZGF0YVthMzNdICsgdGhpcy5kYXRhW2ExM10gKiB0aGlzLmRhdGFbYTIxXSAqIHRoaXMuZGF0YVth
MzJdICsKKyAgICAgICAgICAgIHRoaXMuZGF0YVthMTJdICogdGhpcy5kYXRhW2EyM10gKiB0aGlz
LmRhdGFbYTMxXSAtIHRoaXMuZGF0YVthMTNdICogdGhpcy5kYXRhW2EyMl0gKiB0aGlzLmRhdGFb
YTMxXSAtCisgICAgICAgICAgICB0aGlzLmRhdGFbYTExXSAqIHRoaXMuZGF0YVthMjNdICogdGhp
cy5kYXRhW2EzMl0gLSB0aGlzLmRhdGFbYTEyXSAqIHRoaXMuZGF0YVthMjFdICogdGhpcy5kYXRh
W2EzM107CisgICAgICAgIHJldHVybiBkZXQ7CisgICAgfTsKKyAgICBRdWFkcmF0aWNNYXRyaXgu
cHJvdG90eXBlLmFkZEluUGxhY2UgPSBmdW5jdGlvbiAobWF0cml4KSB7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgICAgICAgICAgdGhpcy5kYXRhW2ldICs9IG1h
dHJpeC5kYXRhW2ldOworICAgICAgICB9CisgICAgfTsKKyAgICBRdWFkcmF0aWNNYXRyaXgucHJv
dG90eXBlLmFkZEFycmF5SW5QbGFjZSA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgICAgICAgICAgdGhpcy5kYXRhW2ldICs9IGRh
dGFbaV07CisgICAgICAgIH0KKyAgICB9OworICAgIFF1YWRyYXRpY01hdHJpeC5wcm90b3R5cGUu
YWRkID0gZnVuY3Rpb24gKG1hdHJpeCkgeworICAgICAgICB2YXIgbSA9IG5ldyBRdWFkcmF0aWNN
YXRyaXgoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAgICAg
ICAgICBtLmRhdGFbaV0gPSB0aGlzLmRhdGFbaV0gKyBtYXRyaXguZGF0YVtpXTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbTsKKyAgICB9OworICAgIFF1YWRyYXRpY01hdHJpeC5Gcm9tRGF0
YSA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7CisgICAgICAgIHJldHVybiBuZXcgUXVhZHJhdGlj
TWF0cml4KFF1YWRyYXRpY01hdHJpeC5EYXRhRnJvbU51bWJlcnMoYSwgYiwgYywgZCkpOworICAg
IH07CisgICAgLy9yZXR1cm5pbmcgYW4gYXJyYXkgdG8gYXZvaWQgZ2FyYmFnZSBjb2xsZWN0aW9u
CisgICAgUXVhZHJhdGljTWF0cml4LkRhdGFGcm9tTnVtYmVycyA9IGZ1bmN0aW9uIChhLCBiLCBj
LCBkKSB7CisgICAgICAgIHJldHVybiBbYSAqIGEsIGEgKiBiLCBhICogYywgYSAqIGQsIGIgKiBi
LCBiICogYywgYiAqIGQsIGMgKiBjLCBjICogZCwgZCAqIGRdOworICAgIH07CisgICAgcmV0dXJu
IFF1YWRyYXRpY01hdHJpeDsKK30oKSk7Cit2YXIgUmVmZXJlbmNlID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFJlZmVyZW5jZSh2ZXJ0ZXhJZCwgdHJpYW5nbGVJ
ZCkgeworICAgICAgICB0aGlzLnZlcnRleElkID0gdmVydGV4SWQ7CisgICAgICAgIHRoaXMudHJp
YW5nbGVJZCA9IHRyaWFuZ2xlSWQ7CisgICAgfQorICAgIHJldHVybiBSZWZlcmVuY2U7Cit9KCkp
OworLyoqCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUXVhZHJhdGljIEVycm9yIHNpbXBs
aWZpY2F0aW9uIGFsZ29yaXRobS4KKyAqIE9yaWdpbmFsIHBhcGVyIDogaHR0cDovL3d3dzEuY3Mu
Y29sdW1iaWEuZWR1L35jczQxNjIvaHRtbDA1cy9nYXJsYW5kOTcucGRmCisgKiBQb3J0ZWQgbW9z
dGx5IGZyb20gUVNsaW0gYW5kIGh0dHA6Ly92b3hlbHMuYmxvZ3Nwb3QuZGUvMjAxNC8wNS9xdWFk
cmljLW1lc2gtc2ltcGxpZmljYXRpb24td2l0aC1zb3VyY2UuaHRtbCB0byBiYWJ5bG9uIEpTCisg
KiBAYXV0aG9yIFJhYW5hblcKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9pbi1icm93c2VyX21lc2hfc2ltcGxpZmljYXRpb24KKyAqLwordmFyIFF1YWRyYXRpY0Vycm9y
U2ltcGxpZmljYXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rp
b24gUXVhZHJhdGljRXJyb3JTaW1wbGlmaWNhdGlvbihfbWVzaCkgeworICAgICAgICB0aGlzLl9t
ZXNoID0gX21lc2g7CisgICAgICAgIHRoaXMuc3luY0l0ZXJhdGlvbnMgPSA1MDAwOworICAgICAg
ICB0aGlzLmFnZ3Jlc3NpdmVuZXNzID0gNzsKKyAgICAgICAgdGhpcy5kZWNpbWF0aW9uSXRlcmF0
aW9ucyA9IDEwMDsKKyAgICAgICAgdGhpcy5ib3VuZGluZ0JveEVwc2lsb24gPSBfTWF0aHNfbWF0
aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRXBzaWxvbiJdOworICAg
IH0KKyAgICBRdWFkcmF0aWNFcnJvclNpbXBsaWZpY2F0aW9uLnByb3RvdHlwZS5zaW1wbGlmeSA9
IGZ1bmN0aW9uIChzZXR0aW5ncywgc3VjY2Vzc0NhbGxiYWNrKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIHRoaXMuaW5pdERlY2ltYXRlZE1lc2goKTsKKyAgICAgICAgLy9p
dGVyYXRpbmcgdGhyb3VnaCB0aGUgc3VibWVzaGVzIGFycmF5LCBvbmUgYWZ0ZXIgdGhlIG90aGVy
LgorICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBc3lu
Y0xvb3AiXS5SdW4odGhpcy5fbWVzaC5zdWJNZXNoZXMubGVuZ3RoLCBmdW5jdGlvbiAobG9vcCkg
eworICAgICAgICAgICAgX3RoaXMuaW5pdFdpdGhNZXNoKGxvb3AuaW5kZXgsIGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgICAgICBfdGhpcy5ydW5EZWNpbWF0aW9uKHNldHRpbmdzLCBsb29wLmlu
ZGV4LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIGxvb3AuZXhlY3V0ZU5leHQo
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0sIHNldHRpbmdzLm9wdGltaXpl
TWVzaCk7CisgICAgICAgIH0sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhfdGhpcy5fcmVj
b25zdHJ1Y3RlZE1lc2gpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0pOworICAgIH07
CisgICAgUXVhZHJhdGljRXJyb3JTaW1wbGlmaWNhdGlvbi5wcm90b3R5cGUucnVuRGVjaW1hdGlv
biA9IGZ1bmN0aW9uIChzZXR0aW5ncywgc3VibWVzaEluZGV4LCBzdWNjZXNzQ2FsbGJhY2spIHsK
KyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIHRhcmdldENvdW50ID0gfn4o
dGhpcy50cmlhbmdsZXMubGVuZ3RoICogc2V0dGluZ3MucXVhbGl0eSk7CisgICAgICAgIHZhciBk
ZWxldGVkVHJpYW5nbGVzID0gMDsKKyAgICAgICAgdmFyIHRyaWFuZ2xlQ291bnQgPSB0aGlzLnRy
aWFuZ2xlcy5sZW5ndGg7CisgICAgICAgIHZhciBpdGVyYXRpb25GdW5jdGlvbiA9IGZ1bmN0aW9u
IChpdGVyYXRpb24sIGNhbGxiYWNrKSB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmF0aW9uICUgNSA9PT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICBfdGhpcy51cGRhdGVNZXNoKGl0ZXJhdGlvbiA9PT0gMCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3RoaXMudHJp
YW5nbGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLnRyaWFuZ2xl
c1tpXS5pc0RpcnR5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHZhciB0aHJlc2hvbGQgPSAwLjAwMDAwMDAwMSAqIE1hdGgucG93KChpdGVyYXRpb24gKyAzKSwg
X3RoaXMuYWdncmVzc2l2ZW5lc3MpOworICAgICAgICAgICAgICAgIHZhciB0cmlhbmdsZXNJdGVy
YXRvciA9IGZ1bmN0aW9uIChpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB0SWR4ID0gfn4o
KChfdGhpcy50cmlhbmdsZXMubGVuZ3RoIC8gMikgKyBpKSAlIF90aGlzLnRyaWFuZ2xlcy5sZW5n
dGgpOworICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IF90aGlzLnRyaWFuZ2xlc1t0SWR4XTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCF0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHQu
ZXJyb3JbM10gPiB0aHJlc2hvbGQgfHwgdC5kZWxldGVkIHx8IHQuaXNEaXJ0eSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgKytqKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodC5lcnJvcltqXSA8IHRocmVzaG9sZCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBkZWxldGVkMCA9IFtdOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBkZWxldGVkMSA9IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2
MCA9IHQudmVydGljZXNbal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYxID0g
dC52ZXJ0aWNlc1soaiArIDEpICUgM107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHYwLmlzQm9yZGVyIHx8IHYxLmlzQm9yZGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHZhciBuID0gVmVjdG9yMy5aZXJvKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdmFyIHV2ID0gVmVjdG9yMi5aZXJvKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdmFyIGNvbG9yID0gbmV3IENvbG9yNCgwLCAwLCAwLCAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5jYWxjdWxhdGVFcnJvcih2MCwgdjEsIHApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWxUciA9IG5ldyBBcnJheSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5pc0ZsaXBwZWQodjAsIHYxLCBwLCBkZWxl
dGVkMCwgZGVsVHIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoX3RoaXMuaXNGbGlwcGVkKHYxLCB2MCwgcCwgZGVsZXRlZDEsIGRlbFRyKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbGV0ZWQw
LmluZGV4T2YodHJ1ZSkgPCAwIHx8IGRlbGV0ZWQxLmluZGV4T2YodHJ1ZSkgPCAwKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5pcXVlQXJyYXkg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxUci5mb3JFYWNo
KGZ1bmN0aW9uIChkZWxldGVkVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodW5pcXVlQXJyYXkuaW5kZXhPZihkZWxldGVkVCkgPT09IC0xKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkVC5kZWxldGVQZW5kaW5nID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUFycmF5LnB1c2goZGVsZXRl
ZFQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaXF1ZUFy
cmF5Lmxlbmd0aCAlIDIgIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHYwLnEgPSB2MS5xLmFkZCh2MC5xKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2MC51cGRhdGVQb3NpdGlvbihwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgdFN0YXJ0ID0gX3RoaXMucmVmZXJlbmNlcy5sZW5ndGg7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlZFRyaWFuZ2xlcyA9IF90aGlzLnVwZGF0ZVRyaWFuZ2xlcyh2MCwg
djAsIGRlbGV0ZWQwLCBkZWxldGVkVHJpYW5nbGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWxldGVkVHJpYW5nbGVzID0gX3RoaXMudXBkYXRlVHJpYW5nbGVzKHYwLCB2MSwgZGVs
ZXRlZDEsIGRlbGV0ZWRUcmlhbmdsZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB0Q291bnQgPSBfdGhpcy5yZWZlcmVuY2VzLmxlbmd0aCAtIHRTdGFydDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodENvdW50IDw9IHYwLnRyaWFuZ2xlQ291bnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRDb3VudCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCB0Q291bnQ7IGMrKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlZmVyZW5jZXNb
djAudHJpYW5nbGVTdGFydCArIGNdID0gX3RoaXMucmVmZXJlbmNlc1t0U3RhcnQgKyBjXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
djAudHJpYW5nbGVTdGFydCA9IHRTdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjAudHJpYW5nbGVDb3VudCA9IHRDb3VudDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQXN5bmNM
b29wIl0uU3luY0FzeW5jRm9yTG9vcChfdGhpcy50cmlhbmdsZXMubGVuZ3RoLCBfdGhpcy5zeW5j
SXRlcmF0aW9ucywgdHJpYW5nbGVzSXRlcmF0b3IsIGNhbGxiYWNrLCBmdW5jdGlvbiAoKSB7IHJl
dHVybiAodHJpYW5nbGVDb3VudCAtIGRlbGV0ZWRUcmlhbmdsZXMgPD0gdGFyZ2V0Q291bnQpOyB9
KTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9OworICAgICAgICBfTWlzY190b29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBc3luY0xvb3AiXS5SdW4odGhpcy5kZWNpbWF0
aW9uSXRlcmF0aW9ucywgZnVuY3Rpb24gKGxvb3ApIHsKKyAgICAgICAgICAgIGlmICh0cmlhbmds
ZUNvdW50IC0gZGVsZXRlZFRyaWFuZ2xlcyA8PSB0YXJnZXRDb3VudCkgeworICAgICAgICAgICAg
ICAgIGxvb3AuYnJlYWtMb29wKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpdGVyYXRpb25GdW5jdGlvbihsb29wLmluZGV4LCBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgICAgIGxvb3AuZXhlY3V0ZU5leHQoKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy9yZWNvbnN0
cnVjdCB0aGlzIHBhcnQgb2YgdGhlIG1lc2gKKyAgICAgICAgICAgICAgICBfdGhpcy5yZWNvbnN0
cnVjdE1lc2goc3VibWVzaEluZGV4KTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2so
KTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9KTsKKyAgICB9OworICAgIFF1YWRyYXRp
Y0Vycm9yU2ltcGxpZmljYXRpb24ucHJvdG90eXBlLmluaXRXaXRoTWVzaCA9IGZ1bmN0aW9uIChz
dWJtZXNoSW5kZXgsIGNhbGxiYWNrLCBvcHRpbWl6ZU1lc2gpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IFtdOworICAgICAgICB0aGlzLnRyaWFu
Z2xlcyA9IFtdOworICAgICAgICB2YXIgcG9zaXRpb25EYXRhID0gdGhpcy5fbWVzaC5nZXRWZXJ0
aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVy
dGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLl9t
ZXNoLmdldEluZGljZXMoKTsKKyAgICAgICAgdmFyIHN1Ym1lc2ggPSB0aGlzLl9tZXNoLnN1Yk1l
c2hlc1tzdWJtZXNoSW5kZXhdOworICAgICAgICB2YXIgZmluZEluVmVydGljZXMgPSBmdW5jdGlv
biAocG9zaXRpb25Ub1NlYXJjaCkgeworICAgICAgICAgICAgaWYgKG9wdGltaXplTWVzaCkgewor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBfdGhpcy52ZXJ0aWNlcy5sZW5n
dGg7ICsraWkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLnZlcnRpY2VzW2lpXS5w
b3NpdGlvbi5lcXVhbHMocG9zaXRpb25Ub1NlYXJjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBfdGhpcy52ZXJ0aWNlc1tpaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfTsKKyAgICAgICAgdmFyIHZlcnRleFJlZmVyZW5jZXMgPSBbXTsKKyAgICAgICAg
dmFyIHZlcnRleEluaXQgPSBmdW5jdGlvbiAoaSkgeworICAgICAgICAgICAgaWYgKCFwb3NpdGlv
bkRhdGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgb2Zmc2V0ID0gaSArIHN1Ym1lc2gudmVydGljZXNTdGFydDsKKyAgICAgICAgICAg
IHZhciBwb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5KHBvc2l0aW9uRGF0YSwgb2Zmc2V0ICogMyk7Cisg
ICAgICAgICAgICB2YXIgdmVydGV4ID0gZmluZEluVmVydGljZXMocG9zaXRpb24pIHx8IG5ldyBE
ZWNpbWF0aW9uVmVydGV4KHBvc2l0aW9uLCBfdGhpcy52ZXJ0aWNlcy5sZW5ndGgpOworICAgICAg
ICAgICAgdmVydGV4Lm9yaWdpbmFsT2Zmc2V0cy5wdXNoKG9mZnNldCk7CisgICAgICAgICAgICBp
ZiAodmVydGV4LmlkID09PSBfdGhpcy52ZXJ0aWNlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICBfdGhpcy52ZXJ0aWNlcy5wdXNoKHZlcnRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2ZXJ0ZXhSZWZlcmVuY2VzLnB1c2godmVydGV4LmlkKTsKKyAgICAgICAgfTsKKyAgICAgICAg
Ly92YXIgdG90YWxWZXJ0aWNlcyA9IG1lc2guZ2V0VG90YWxWZXJ0aWNlcygpOworICAgICAgICB2
YXIgdG90YWxWZXJ0aWNlcyA9IHN1Ym1lc2gudmVydGljZXNDb3VudDsKKyAgICAgICAgX01pc2Nf
dG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQXN5bmNMb29wIl0uU3luY0FzeW5j
Rm9yTG9vcCh0b3RhbFZlcnRpY2VzLCAodGhpcy5zeW5jSXRlcmF0aW9ucyAvIDQpID4+IDAsIHZl
cnRleEluaXQsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBpbmRpY2VzSW5pdCA9IGZ1
bmN0aW9uIChpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpbmRpY2VzKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFy
IG9mZnNldCA9IChzdWJtZXNoLmluZGV4U3RhcnQgLyAzKSArIGk7CisgICAgICAgICAgICAgICAg
dmFyIHBvcyA9IChvZmZzZXQgKiAzKTsKKyAgICAgICAgICAgICAgICB2YXIgaTAgPSBpbmRpY2Vz
W3BvcyArIDBdOworICAgICAgICAgICAgICAgIHZhciBpMSA9IGluZGljZXNbcG9zICsgMV07Cisg
ICAgICAgICAgICAgICAgdmFyIGkyID0gaW5kaWNlc1twb3MgKyAyXTsKKyAgICAgICAgICAgICAg
ICB2YXIgdjAgPSBfdGhpcy52ZXJ0aWNlc1t2ZXJ0ZXhSZWZlcmVuY2VzW2kwIC0gc3VibWVzaC52
ZXJ0aWNlc1N0YXJ0XV07CisgICAgICAgICAgICAgICAgdmFyIHYxID0gX3RoaXMudmVydGljZXNb
dmVydGV4UmVmZXJlbmNlc1tpMSAtIHN1Ym1lc2gudmVydGljZXNTdGFydF1dOworICAgICAgICAg
ICAgICAgIHZhciB2MiA9IF90aGlzLnZlcnRpY2VzW3ZlcnRleFJlZmVyZW5jZXNbaTIgLSBzdWJt
ZXNoLnZlcnRpY2VzU3RhcnRdXTsKKyAgICAgICAgICAgICAgICB2YXIgdHJpYW5nbGUgPSBuZXcg
RGVjaW1hdGlvblRyaWFuZ2xlKFt2MCwgdjEsIHYyXSk7CisgICAgICAgICAgICAgICAgdHJpYW5n
bGUub3JpZ2luYWxPZmZzZXQgPSBwb3M7CisgICAgICAgICAgICAgICAgX3RoaXMudHJpYW5nbGVz
LnB1c2godHJpYW5nbGUpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIF9NaXNjX3Rvb2xz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFzeW5jTG9vcCJdLlN5bmNBc3luY0Zvckxv
b3Aoc3VibWVzaC5pbmRleENvdW50IC8gMywgX3RoaXMuc3luY0l0ZXJhdGlvbnMsIGluZGljZXNJ
bml0LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuaW5pdChjYWxsYmFjayk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBRdWFkcmF0aWNFcnJv
clNpbXBsaWZpY2F0aW9uLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciB0cmlhbmdsZUluaXQxID0gZnVu
Y3Rpb24gKGkpIHsKKyAgICAgICAgICAgIHZhciB0ID0gX3RoaXMudHJpYW5nbGVzW2ldOworICAg
ICAgICAgICAgdC5ub3JtYWwgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdLkNyb3NzKHQudmVydGljZXNbMV0ucG9zaXRpb24uc3VidHJh
Y3QodC52ZXJ0aWNlc1swXS5wb3NpdGlvbiksIHQudmVydGljZXNbMl0ucG9zaXRpb24uc3VidHJh
Y3QodC52ZXJ0aWNlc1swXS5wb3NpdGlvbikpLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCAzOyBqKyspIHsKKyAgICAgICAgICAgICAgICB0LnZlcnRpY2VzW2pd
LnEuYWRkQXJyYXlJblBsYWNlKFF1YWRyYXRpY01hdHJpeC5EYXRhRnJvbU51bWJlcnModC5ub3Jt
YWwueCwgdC5ub3JtYWwueSwgdC5ub3JtYWwueiwgLShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLkRvdCh0Lm5vcm1hbCwgdC52ZXJ0aWNl
c1swXS5wb3NpdGlvbikpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIF9N
aXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFzeW5jTG9vcCJdLlN5bmNB
c3luY0Zvckxvb3AodGhpcy50cmlhbmdsZXMubGVuZ3RoLCB0aGlzLnN5bmNJdGVyYXRpb25zLCB0
cmlhbmdsZUluaXQxLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgdHJpYW5nbGVJbml0
MiA9IGZ1bmN0aW9uIChpKSB7CisgICAgICAgICAgICAgICAgdmFyIHQgPSBfdGhpcy50cmlhbmds
ZXNbaV07CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzOyArK2opIHsKKyAg
ICAgICAgICAgICAgICAgICAgdC5lcnJvcltqXSA9IF90aGlzLmNhbGN1bGF0ZUVycm9yKHQudmVy
dGljZXNbal0sIHQudmVydGljZXNbKGogKyAxKSAlIDNdKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdC5lcnJvclszXSA9IE1hdGgubWluKHQuZXJyb3JbMF0sIHQuZXJyb3Jb
MV0sIHQuZXJyb3JbMl0pOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIF9NaXNjX3Rvb2xz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkFzeW5jTG9vcCJdLlN5bmNBc3luY0Zvckxv
b3AoX3RoaXMudHJpYW5nbGVzLmxlbmd0aCwgX3RoaXMuc3luY0l0ZXJhdGlvbnMsIHRyaWFuZ2xl
SW5pdDIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgUXVhZHJhdGljRXJyb3JTaW1wbGlm
aWNhdGlvbi5wcm90b3R5cGUucmVjb25zdHJ1Y3RNZXNoID0gZnVuY3Rpb24gKHN1Ym1lc2hJbmRl
eCkgeworICAgICAgICB2YXIgbmV3VHJpYW5nbGVzID0gW107CisgICAgICAgIHZhciBpOworICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy52ZXJ0aWNlcy5sZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgdGhpcy52ZXJ0aWNlc1tpXS50cmlhbmdsZUNvdW50ID0gMDsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgdDsKKyAgICAgICAgdmFyIGo7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlz
LnRyaWFuZ2xlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLnRyaWFuZ2xl
c1tpXS5kZWxldGVkKSB7CisgICAgICAgICAgICAgICAgdCA9IHRoaXMudHJpYW5nbGVzW2ldOwor
ICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCAzOyArK2opIHsKKyAgICAgICAgICAgICAg
ICAgICAgdC52ZXJ0aWNlc1tqXS50cmlhbmdsZUNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbmV3VHJpYW5nbGVzLnB1c2godCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIG5ld1Bvc2l0aW9uRGF0YSA9ICh0aGlzLl9yZWNvbnN0cnVj
dGVkTWVzaC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSB8fCBbXSk7CisgICAgICAg
IHZhciBuZXdOb3JtYWxEYXRhID0gKHRoaXMuX3JlY29uc3RydWN0ZWRNZXNoLmdldFZlcnRpY2Vz
RGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhC
dWZmZXIiXS5Ob3JtYWxLaW5kKSB8fCBbXSk7CisgICAgICAgIHZhciBuZXdVVnNEYXRhID0gKHRo
aXMuX3JlY29uc3RydWN0ZWRNZXNoLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpIHx8IFtdKTsK
KyAgICAgICAgdmFyIG5ld0NvbG9yc0RhdGEgPSAodGhpcy5fcmVjb25zdHJ1Y3RlZE1lc2guZ2V0
VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCkgfHwgW10pOworICAgICAgICB2YXIgbm9ybWFsRGF0
YSA9IHRoaXMuX21lc2guZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQpOworICAgICAgICB2
YXIgdXZzID0gdGhpcy5fbWVzaC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kKTsKKyAgICAgICAg
dmFyIGNvbG9yc0RhdGEgPSB0aGlzLl9tZXNoLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktpbmQp
OworICAgICAgICB2YXIgdmVydGV4Q291bnQgPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
dGhpcy52ZXJ0aWNlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHZlcnRleCA9IHRo
aXMudmVydGljZXNbaV07CisgICAgICAgICAgICB2ZXJ0ZXguaWQgPSB2ZXJ0ZXhDb3VudDsKKyAg
ICAgICAgICAgIGlmICh2ZXJ0ZXgudHJpYW5nbGVDb3VudCkgeworICAgICAgICAgICAgICAgIHZl
cnRleC5vcmlnaW5hbE9mZnNldHMuZm9yRWFjaChmdW5jdGlvbiAob3JpZ2luYWxPZmZzZXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFub3JtYWxEYXRhKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgbmV3UG9zaXRpb25EYXRhLnB1c2godmVydGV4LnBvc2l0aW9uLngpOworICAgICAgICAgICAg
ICAgICAgICBuZXdQb3NpdGlvbkRhdGEucHVzaCh2ZXJ0ZXgucG9zaXRpb24ueSk7CisgICAgICAg
ICAgICAgICAgICAgIG5ld1Bvc2l0aW9uRGF0YS5wdXNoKHZlcnRleC5wb3NpdGlvbi56KTsKKyAg
ICAgICAgICAgICAgICAgICAgbmV3Tm9ybWFsRGF0YS5wdXNoKG5vcm1hbERhdGFbb3JpZ2luYWxP
ZmZzZXQgKiAzXSk7CisgICAgICAgICAgICAgICAgICAgIG5ld05vcm1hbERhdGEucHVzaChub3Jt
YWxEYXRhWyhvcmlnaW5hbE9mZnNldCAqIDMpICsgMV0pOworICAgICAgICAgICAgICAgICAgICBu
ZXdOb3JtYWxEYXRhLnB1c2gobm9ybWFsRGF0YVsob3JpZ2luYWxPZmZzZXQgKiAzKSArIDJdKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHV2cyAmJiB1dnMubGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdVVnNEYXRhLnB1c2godXZzWyhvcmlnaW5hbE9mZnNldCAqIDIpXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdVVnNEYXRhLnB1c2godXZzWyhvcmlnaW5hbE9m
ZnNldCAqIDIpICsgMV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjb2xvcnNEYXRhICYmIGNvbG9yc0RhdGEubGVuZ3RoKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdDb2xvcnNEYXRhLnB1c2goY29sb3JzRGF0YVsob3JpZ2luYWxPZmZzZXQg
KiA0KV0pOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sb3JzRGF0YS5wdXNoKGNvbG9y
c0RhdGFbKG9yaWdpbmFsT2Zmc2V0ICogNCkgKyAxXSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdDb2xvcnNEYXRhLnB1c2goY29sb3JzRGF0YVsob3JpZ2luYWxPZmZzZXQgKiA0KSArIDJd
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbG9yc0RhdGEucHVzaChjb2xvcnNEYXRh
WyhvcmlnaW5hbE9mZnNldCAqIDQpICsgM10pOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICsrdmVydGV4Q291bnQ7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHN0YXJ0aW5nSW5kZXggPSB0aGlzLl9y
ZWNvbnN0cnVjdGVkTWVzaC5nZXRUb3RhbEluZGljZXMoKTsKKyAgICAgICAgdmFyIHN0YXJ0aW5n
VmVydGV4ID0gdGhpcy5fcmVjb25zdHJ1Y3RlZE1lc2guZ2V0VG90YWxWZXJ0aWNlcygpOworICAg
ICAgICB2YXIgc3VibWVzaGVzQXJyYXkgPSB0aGlzLl9yZWNvbnN0cnVjdGVkTWVzaC5zdWJNZXNo
ZXM7CisgICAgICAgIHRoaXMuX3JlY29uc3RydWN0ZWRNZXNoLnN1Yk1lc2hlcyA9IFtdOworICAg
ICAgICB2YXIgbmV3SW5kaWNlc0FycmF5ID0gdGhpcy5fcmVjb25zdHJ1Y3RlZE1lc2guZ2V0SW5k
aWNlcygpOyAvL1tdOworICAgICAgICB2YXIgb3JpZ2luYWxJbmRpY2VzID0gdGhpcy5fbWVzaC5n
ZXRJbmRpY2VzKCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuZXdUcmlhbmdsZXMubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIHQgPSBuZXdUcmlhbmdsZXNbaV07IC8vbm93IGdldCB0aGUg
bmV3IHJlZmVyZW5jaW5nIHBvaW50IGZvciBlYWNoIHZlcnRleAorICAgICAgICAgICAgWzAsIDEs
IDJdLmZvckVhY2goZnVuY3Rpb24gKGlkeCkgeworICAgICAgICAgICAgICAgIHZhciBpZCA9IG9y
aWdpbmFsSW5kaWNlc1t0Lm9yaWdpbmFsT2Zmc2V0ICsgaWR4XTsKKyAgICAgICAgICAgICAgICB2
YXIgb2Zmc2V0ID0gdC52ZXJ0aWNlc1tpZHhdLm9yaWdpbmFsT2Zmc2V0cy5pbmRleE9mKGlkKTsK
KyAgICAgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBv
ZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdJbmRpY2Vz
QXJyYXkucHVzaCh0LnZlcnRpY2VzW2lkeF0uaWQgKyBvZmZzZXQgKyBzdGFydGluZ1ZlcnRleCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICAvL292ZXJ3cml0aW5nIHRoZSBv
bGQgdmVydGV4IGJ1ZmZlcnMgYW5kIGluZGljZXMuCisgICAgICAgIHRoaXMuX3JlY29uc3RydWN0
ZWRNZXNoLnNldEluZGljZXMobmV3SW5kaWNlc0FycmF5KTsKKyAgICAgICAgdGhpcy5fcmVjb25z
dHJ1Y3RlZE1lc2guc2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgbmV3UG9zaXRpb25E
YXRhKTsKKyAgICAgICAgdGhpcy5fcmVjb25zdHJ1Y3RlZE1lc2guc2V0VmVydGljZXNEYXRhKF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJd
Lk5vcm1hbEtpbmQsIG5ld05vcm1hbERhdGEpOworICAgICAgICBpZiAobmV3VVZzRGF0YS5sZW5n
dGggPiAwKSB7CisgICAgICAgICAgICB0aGlzLl9yZWNvbnN0cnVjdGVkTWVzaC5zZXRWZXJ0aWNl
c0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4
QnVmZmVyIl0uVVZLaW5kLCBuZXdVVnNEYXRhKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3
Q29sb3JzRGF0YS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB0aGlzLl9yZWNvbnN0cnVjdGVk
TWVzaC5zZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kLCBuZXdDb2xvcnNEYXRhKTsKKyAgICAg
ICAgfQorICAgICAgICAvL2NyZWF0ZSBzdWJtZXNoCisgICAgICAgIHZhciBvcmlnaW5hbFN1Ym1l
c2ggPSB0aGlzLl9tZXNoLnN1Yk1lc2hlc1tzdWJtZXNoSW5kZXhdOworICAgICAgICBpZiAoc3Vi
bWVzaEluZGV4ID4gMCkgeworICAgICAgICAgICAgdGhpcy5fcmVjb25zdHJ1Y3RlZE1lc2guc3Vi
TWVzaGVzID0gW107CisgICAgICAgICAgICBzdWJtZXNoZXNBcnJheS5mb3JFYWNoKGZ1bmN0aW9u
IChzdWJtZXNoKSB7CisgICAgICAgICAgICAgICAgX01lc2hlc19zdWJNZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlN1Yk1lc2giXS5BZGRUb01lc2goc3VibWVzaC5tYXRlcmlhbElu
ZGV4LCBzdWJtZXNoLnZlcnRpY2VzU3RhcnQsIHN1Ym1lc2gudmVydGljZXNDb3VudCwgLyogMCwg
bmV3UG9zaXRpb25EYXRhLmxlbmd0aC8zLCAqLyBzdWJtZXNoLmluZGV4U3RhcnQsIHN1Ym1lc2gu
aW5kZXhDb3VudCwgc3VibWVzaC5nZXRNZXNoKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBfTWVzaGVzX3N1Yk1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU3ViTWVz
aCJdLkFkZFRvTWVzaChvcmlnaW5hbFN1Ym1lc2gubWF0ZXJpYWxJbmRleCwgc3RhcnRpbmdWZXJ0
ZXgsIHZlcnRleENvdW50LCAvKiAwLCBuZXdQb3NpdGlvbkRhdGEubGVuZ3RoIC8gMywgKi8gc3Rh
cnRpbmdJbmRleCwgbmV3VHJpYW5nbGVzLmxlbmd0aCAqIDMsIHRoaXMuX3JlY29uc3RydWN0ZWRN
ZXNoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgUXVhZHJhdGljRXJyb3JTaW1wbGlmaWNhdGlv
bi5wcm90b3R5cGUuaW5pdERlY2ltYXRlZE1lc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMuX3JlY29uc3RydWN0ZWRNZXNoID0gbmV3IF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJNZXNoIl0odGhpcy5fbWVzaC5uYW1lICsgIkRlY2ltYXRlZCIsIHRoaXMu
X21lc2guZ2V0U2NlbmUoKSk7CisgICAgICAgIHRoaXMuX3JlY29uc3RydWN0ZWRNZXNoLm1hdGVy
aWFsID0gdGhpcy5fbWVzaC5tYXRlcmlhbDsKKyAgICAgICAgdGhpcy5fcmVjb25zdHJ1Y3RlZE1l
c2gucGFyZW50ID0gdGhpcy5fbWVzaC5wYXJlbnQ7CisgICAgICAgIHRoaXMuX3JlY29uc3RydWN0
ZWRNZXNoLmlzVmlzaWJsZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9yZWNvbnN0cnVjdGVkTWVz
aC5yZW5kZXJpbmdHcm91cElkID0gdGhpcy5fbWVzaC5yZW5kZXJpbmdHcm91cElkOworICAgIH07
CisgICAgUXVhZHJhdGljRXJyb3JTaW1wbGlmaWNhdGlvbi5wcm90b3R5cGUuaXNGbGlwcGVkID0g
ZnVuY3Rpb24gKHZlcnRleDEsIHZlcnRleDIsIHBvaW50LCBkZWxldGVkQXJyYXksIGRlbFRyKSB7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmVydGV4MS50cmlhbmdsZUNvdW50OyArK2kp
IHsKKyAgICAgICAgICAgIHZhciB0ID0gdGhpcy50cmlhbmdsZXNbdGhpcy5yZWZlcmVuY2VzW3Zl
cnRleDEudHJpYW5nbGVTdGFydCArIGldLnRyaWFuZ2xlSWRdOworICAgICAgICAgICAgaWYgKHQu
ZGVsZXRlZCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdmFyIHMgPSB0aGlzLnJlZmVyZW5jZXNbdmVydGV4MS50cmlhbmdsZVN0YXJ0ICsg
aV0udmVydGV4SWQ7CisgICAgICAgICAgICB2YXIgdjEgPSB0LnZlcnRpY2VzWyhzICsgMSkgJSAz
XTsKKyAgICAgICAgICAgIHZhciB2MiA9IHQudmVydGljZXNbKHMgKyAyKSAlIDNdOworICAgICAg
ICAgICAgaWYgKCh2MSA9PT0gdmVydGV4MiB8fCB2MiA9PT0gdmVydGV4MikpIHsKKyAgICAgICAg
ICAgICAgICBkZWxldGVkQXJyYXlbaV0gPSB0cnVlOworICAgICAgICAgICAgICAgIGRlbFRyLnB1
c2godCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgZDEgPSB2MS5wb3NpdGlvbi5zdWJ0cmFjdChwb2ludCk7CisgICAgICAgICAgICBk
MSA9IGQxLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgdmFyIGQyID0gdjIucG9zaXRpb24uc3Vi
dHJhY3QocG9pbnQpOworICAgICAgICAgICAgZDIgPSBkMi5ub3JtYWxpemUoKTsKKyAgICAgICAg
ICAgIGlmIChNYXRoLmFicyhfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVmVjdG9yMyJdLkRvdChkMSwgZDIpKSA+IDAuOTk5KSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbm9ybWFsID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMi
XS5Dcm9zcyhkMSwgZDIpLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgZGVsZXRlZEFycmF5W2ld
ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5Eb3Qobm9ybWFsLCB0Lm5vcm1hbCkgPCAwLjIp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICBRdWFkcmF0aWNFcnJvclNpbXBs
aWZpY2F0aW9uLnByb3RvdHlwZS51cGRhdGVUcmlhbmdsZXMgPSBmdW5jdGlvbiAob3JpZ1ZlcnRl
eCwgdmVydGV4LCBkZWxldGVkQXJyYXksIGRlbGV0ZWRUcmlhbmdsZXMpIHsKKyAgICAgICAgdmFy
IG5ld0RlbGV0ZWQgPSBkZWxldGVkVHJpYW5nbGVzOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHZlcnRleC50cmlhbmdsZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHZhciByZWYgPSB0
aGlzLnJlZmVyZW5jZXNbdmVydGV4LnRyaWFuZ2xlU3RhcnQgKyBpXTsKKyAgICAgICAgICAgIHZh
ciB0ID0gdGhpcy50cmlhbmdsZXNbcmVmLnRyaWFuZ2xlSWRdOworICAgICAgICAgICAgaWYgKHQu
ZGVsZXRlZCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGRlbGV0ZWRBcnJheVtpXSAmJiB0LmRlbGV0ZVBlbmRpbmcpIHsKKyAgICAg
ICAgICAgICAgICB0LmRlbGV0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIG5ld0RlbGV0ZWQr
KzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHQudmVydGljZXNbcmVmLnZlcnRleElkXSA9IG9yaWdWZXJ0ZXg7CisgICAgICAgICAgICB0Lmlz
RGlydHkgPSB0cnVlOworICAgICAgICAgICAgdC5lcnJvclswXSA9IHRoaXMuY2FsY3VsYXRlRXJy
b3IodC52ZXJ0aWNlc1swXSwgdC52ZXJ0aWNlc1sxXSkgKyAodC5ib3JkZXJGYWN0b3IgLyAyKTsK
KyAgICAgICAgICAgIHQuZXJyb3JbMV0gPSB0aGlzLmNhbGN1bGF0ZUVycm9yKHQudmVydGljZXNb
MV0sIHQudmVydGljZXNbMl0pICsgKHQuYm9yZGVyRmFjdG9yIC8gMik7CisgICAgICAgICAgICB0
LmVycm9yWzJdID0gdGhpcy5jYWxjdWxhdGVFcnJvcih0LnZlcnRpY2VzWzJdLCB0LnZlcnRpY2Vz
WzBdKSArICh0LmJvcmRlckZhY3RvciAvIDIpOworICAgICAgICAgICAgdC5lcnJvclszXSA9IE1h
dGgubWluKHQuZXJyb3JbMF0sIHQuZXJyb3JbMV0sIHQuZXJyb3JbMl0pOworICAgICAgICAgICAg
dGhpcy5yZWZlcmVuY2VzLnB1c2gocmVmKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3
RGVsZXRlZDsKKyAgICB9OworICAgIFF1YWRyYXRpY0Vycm9yU2ltcGxpZmljYXRpb24ucHJvdG90
eXBlLmlkZW50aWZ5Qm9yZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMudmVydGljZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciB2Q291
bnQgPSBbXTsKKyAgICAgICAgICAgIHZhciB2SWQgPSBbXTsKKyAgICAgICAgICAgIHZhciB2ID0g
dGhpcy52ZXJ0aWNlc1tpXTsKKyAgICAgICAgICAgIHZhciBqOworICAgICAgICAgICAgZm9yIChq
ID0gMDsgaiA8IHYudHJpYW5nbGVDb3VudDsgKytqKSB7CisgICAgICAgICAgICAgICAgdmFyIHRy
aWFuZ2xlID0gdGhpcy50cmlhbmdsZXNbdGhpcy5yZWZlcmVuY2VzW3YudHJpYW5nbGVTdGFydCAr
IGpdLnRyaWFuZ2xlSWRdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCAz
OyBpaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBvZnMgPSAwOworICAgICAgICAgICAg
ICAgICAgICB2YXIgdnYgPSB0cmlhbmdsZS52ZXJ0aWNlc1tpaV07CisgICAgICAgICAgICAgICAg
ICAgIHdoaWxlIChvZnMgPCB2Q291bnQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodklkW29mc10gPT09IHZ2LmlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICArK29mczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
b2ZzID09PSB2Q291bnQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2Q291bnQu
cHVzaCgxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZJZC5wdXNoKHZ2LmlkKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZDb3VudFtvZnNdKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwg
dkNvdW50Lmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKHZDb3VudFtqXSA9PT0g
MSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcnRpY2VzW3ZJZFtqXV0uaXNCb3JkZXIg
PSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc1t2SWRbal1dLmlzQm9yZGVyID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBR
dWFkcmF0aWNFcnJvclNpbXBsaWZpY2F0aW9uLnByb3RvdHlwZS51cGRhdGVNZXNoID0gZnVuY3Rp
b24gKGlkZW50aWZ5Qm9yZGVycykgeworICAgICAgICBpZiAoaWRlbnRpZnlCb3JkZXJzID09PSB2
b2lkIDApIHsgaWRlbnRpZnlCb3JkZXJzID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIGk7CisgICAg
ICAgIGlmICghaWRlbnRpZnlCb3JkZXJzKSB7CisgICAgICAgICAgICB2YXIgbmV3VHJpYW5nbGVz
VmVjdG9yID0gW107CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy50cmlhbmdsZXMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMudHJpYW5nbGVzW2ldLmRl
bGV0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3VHJpYW5nbGVzVmVjdG9yLnB1c2godGhp
cy50cmlhbmdsZXNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMudHJpYW5nbGVzID0gbmV3VHJpYW5nbGVzVmVjdG9yOworICAgICAgICB9Cisg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnZlcnRpY2VzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICB0aGlzLnZlcnRpY2VzW2ldLnRyaWFuZ2xlQ291bnQgPSAwOworICAgICAgICAgICAg
dGhpcy52ZXJ0aWNlc1tpXS50cmlhbmdsZVN0YXJ0ID0gMDsKKyAgICAgICAgfQorICAgICAgICB2
YXIgdDsKKyAgICAgICAgdmFyIGo7CisgICAgICAgIHZhciB2OworICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgdGhpcy50cmlhbmdsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHQgPSB0aGlz
LnRyaWFuZ2xlc1tpXTsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCAzOyArK2opIHsKKyAg
ICAgICAgICAgICAgICB2ID0gdC52ZXJ0aWNlc1tqXTsKKyAgICAgICAgICAgICAgICB2LnRyaWFu
Z2xlQ291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgdFN0YXJ0
ID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMudmVydGljZXMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIHRoaXMudmVydGljZXNbaV0udHJpYW5nbGVTdGFydCA9IHRTdGFydDsK
KyAgICAgICAgICAgIHRTdGFydCArPSB0aGlzLnZlcnRpY2VzW2ldLnRyaWFuZ2xlQ291bnQ7Cisg
ICAgICAgICAgICB0aGlzLnZlcnRpY2VzW2ldLnRyaWFuZ2xlQ291bnQgPSAwOworICAgICAgICB9
CisgICAgICAgIHZhciBuZXdSZWZlcmVuY2VzID0gbmV3IEFycmF5KHRoaXMudHJpYW5nbGVzLmxl
bmd0aCAqIDMpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy50cmlhbmdsZXMubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIHQgPSB0aGlzLnRyaWFuZ2xlc1tpXTsKKyAgICAgICAgICAg
IGZvciAoaiA9IDA7IGogPCAzOyArK2opIHsKKyAgICAgICAgICAgICAgICB2ID0gdC52ZXJ0aWNl
c1tqXTsKKyAgICAgICAgICAgICAgICBuZXdSZWZlcmVuY2VzW3YudHJpYW5nbGVTdGFydCArIHYu
dHJpYW5nbGVDb3VudF0gPSBuZXcgUmVmZXJlbmNlKGosIGkpOworICAgICAgICAgICAgICAgIHYu
dHJpYW5nbGVDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMu
cmVmZXJlbmNlcyA9IG5ld1JlZmVyZW5jZXM7CisgICAgICAgIGlmIChpZGVudGlmeUJvcmRlcnMp
IHsKKyAgICAgICAgICAgIHRoaXMuaWRlbnRpZnlCb3JkZXIoKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgUXVhZHJhdGljRXJyb3JTaW1wbGlmaWNhdGlvbi5wcm90b3R5cGUudmVydGV4RXJyb3Ig
PSBmdW5jdGlvbiAocSwgcG9pbnQpIHsKKyAgICAgICAgdmFyIHggPSBwb2ludC54OworICAgICAg
ICB2YXIgeSA9IHBvaW50Lnk7CisgICAgICAgIHZhciB6ID0gcG9pbnQuejsKKyAgICAgICAgcmV0
dXJuIHEuZGF0YVswXSAqIHggKiB4ICsgMiAqIHEuZGF0YVsxXSAqIHggKiB5ICsgMiAqIHEuZGF0
YVsyXSAqIHggKiB6ICsgMiAqIHEuZGF0YVszXSAqIHggKyBxLmRhdGFbNF0gKiB5ICogeQorICAg
ICAgICAgICAgKyAyICogcS5kYXRhWzVdICogeSAqIHogKyAyICogcS5kYXRhWzZdICogeSArIHEu
ZGF0YVs3XSAqIHogKiB6ICsgMiAqIHEuZGF0YVs4XSAqIHogKyBxLmRhdGFbOV07CisgICAgfTsK
KyAgICBRdWFkcmF0aWNFcnJvclNpbXBsaWZpY2F0aW9uLnByb3RvdHlwZS5jYWxjdWxhdGVFcnJv
ciA9IGZ1bmN0aW9uICh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2ludFJlc3VsdCkgeworICAgICAgICB2
YXIgcSA9IHZlcnRleDEucS5hZGQodmVydGV4Mi5xKTsKKyAgICAgICAgdmFyIGJvcmRlciA9IHZl
cnRleDEuaXNCb3JkZXIgJiYgdmVydGV4Mi5pc0JvcmRlcjsKKyAgICAgICAgdmFyIGVycm9yID0g
MDsKKyAgICAgICAgdmFyIHFEZXQgPSBxLmRldCgwLCAxLCAyLCAxLCA0LCA1LCAyLCA1LCA3KTsK
KyAgICAgICAgaWYgKHFEZXQgIT09IDAgJiYgIWJvcmRlcikgeworICAgICAgICAgICAgaWYgKCFw
b2ludFJlc3VsdCkgeworICAgICAgICAgICAgICAgIHBvaW50UmVzdWx0ID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBwb2ludFJlc3VsdC54ID0gLTEgLyBxRGV0ICogKHEu
ZGV0KDEsIDIsIDMsIDQsIDUsIDYsIDUsIDcsIDgpKTsKKyAgICAgICAgICAgIHBvaW50UmVzdWx0
LnkgPSAxIC8gcURldCAqIChxLmRldCgwLCAyLCAzLCAxLCA1LCA2LCAyLCA3LCA4KSk7CisgICAg
ICAgICAgICBwb2ludFJlc3VsdC56ID0gLTEgLyBxRGV0ICogKHEuZGV0KDAsIDEsIDMsIDEsIDQs
IDYsIDIsIDUsIDgpKTsKKyAgICAgICAgICAgIGVycm9yID0gdGhpcy52ZXJ0ZXhFcnJvcihxLCBw
b2ludFJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIg
cDMgPSAodmVydGV4MS5wb3NpdGlvbi5hZGQodmVydGV4Mi5wb3NpdGlvbikpLmRpdmlkZShuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMi
XSgyLCAyLCAyKSk7CisgICAgICAgICAgICAvL3ZhciBub3JtMyA9ICh2ZXJ0ZXgxLm5vcm1hbC5h
ZGQodmVydGV4Mi5ub3JtYWwpKS5kaXZpZGUobmV3IFZlY3RvcjMoMiwgMiwgMikpLm5vcm1hbGl6
ZSgpOworICAgICAgICAgICAgdmFyIGVycm9yMSA9IHRoaXMudmVydGV4RXJyb3IocSwgdmVydGV4
MS5wb3NpdGlvbik7CisgICAgICAgICAgICB2YXIgZXJyb3IyID0gdGhpcy52ZXJ0ZXhFcnJvcihx
LCB2ZXJ0ZXgyLnBvc2l0aW9uKTsKKyAgICAgICAgICAgIHZhciBlcnJvcjMgPSB0aGlzLnZlcnRl
eEVycm9yKHEsIHAzKTsKKyAgICAgICAgICAgIGVycm9yID0gTWF0aC5taW4oZXJyb3IxLCBlcnJv
cjIsIGVycm9yMyk7CisgICAgICAgICAgICBpZiAoZXJyb3IgPT09IGVycm9yMSkgeworICAgICAg
ICAgICAgICAgIGlmIChwb2ludFJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBwb2ludFJl
c3VsdC5jb3B5RnJvbSh2ZXJ0ZXgxLnBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChlcnJvciA9PT0gZXJyb3IyKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHBvaW50UmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHBvaW50
UmVzdWx0LmNvcHlGcm9tKHZlcnRleDIucG9zaXRpb24pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChwb2lu
dFJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBwb2ludFJlc3VsdC5jb3B5RnJvbShwMyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiBlcnJvcjsKKyAgICB9OworICAgIHJldHVybiBRdWFkcmF0aWNFcnJvclNpbXBsaWZpY2F0
aW9uOworfSgpKTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWVzaGVzL21lc2hTaW1wbGlm
aWNhdGlvblNjZW5lQ29tcG9uZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hlcy9tZXNoU2ltcGxp
ZmljYXRpb25TY2VuZUNvbXBvbmVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNp
bXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiU2ltcGxpY2F0aW9uUXVldWVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gU2ltcGxpY2F0aW9uUXVldWVTY2VuZUNvbXBvbmVudDsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfbWVzaFNpbXBsaWZpY2F0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21lc2hTaW1wbGlmaWNhdGlv
biAqLyAiLi9NZXNoZXMvbWVzaFNpbXBsaWZpY2F0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9zY2VuZUNvbXBvbmVudCAqLyAiLi9zY2VuZUNvbXBv
bmVudC50cyIpOworCisKKworCitPYmplY3QuZGVmaW5lUHJvcGVydHkoX3NjZW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lIl0ucHJvdG90eXBlLCAic2ltcGxpZmljYXRpb25R
dWV1ZSIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9zaW1w
bGlmaWNhdGlvblF1ZXVlKSB7CisgICAgICAgICAgICB0aGlzLl9zaW1wbGlmaWNhdGlvblF1ZXVl
ID0gbmV3IF9tZXNoU2ltcGxpZmljYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
U2ltcGxpZmljYXRpb25RdWV1ZSJdKCk7CisgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gdGhp
cy5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfU0lNUExJRklDQVRJT05RVUVVRSk7
CisgICAgICAgICAgICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICAgICAgICAgIGNvbXBvbmVu
dCA9IG5ldyBTaW1wbGljYXRpb25RdWV1ZVNjZW5lQ29tcG9uZW50KHRoaXMpOworICAgICAgICAg
ICAgICAgIHRoaXMuX2FkZENvbXBvbmVudChjb21wb25lbnQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9zaW1wbGlmaWNhdGlvblF1ZXVlOworICAgIH0s
CisgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgdGhpcy5fc2ltcGxpZmljYXRp
b25RdWV1ZSA9IHZhbHVlOworICAgIH0sCisgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBjb25m
aWd1cmFibGU6IHRydWUKK30pOworX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TWVzaCJdLnByb3RvdHlwZS5zaW1wbGlmeSA9IGZ1bmN0aW9uIChzZXR0aW5ncywgcGFyYWxsZWxQ
cm9jZXNzaW5nLCBzaW1wbGlmaWNhdGlvblR5cGUsIHN1Y2Nlc3NDYWxsYmFjaykgeworICAgIGlm
IChwYXJhbGxlbFByb2Nlc3NpbmcgPT09IHZvaWQgMCkgeyBwYXJhbGxlbFByb2Nlc3NpbmcgPSB0
cnVlOyB9CisgICAgaWYgKHNpbXBsaWZpY2F0aW9uVHlwZSA9PT0gdm9pZCAwKSB7IHNpbXBsaWZp
Y2F0aW9uVHlwZSA9IF9tZXNoU2ltcGxpZmljYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siU2ltcGxpZmljYXRpb25UeXBlIl0uUVVBRFJBVElDOyB9CisgICAgdGhpcy5nZXRTY2Vu
ZSgpLnNpbXBsaWZpY2F0aW9uUXVldWUuYWRkVGFzayh7CisgICAgICAgIHNldHRpbmdzOiBzZXR0
aW5ncywKKyAgICAgICAgcGFyYWxsZWxQcm9jZXNzaW5nOiBwYXJhbGxlbFByb2Nlc3NpbmcsCisg
ICAgICAgIG1lc2g6IHRoaXMsCisgICAgICAgIHNpbXBsaWZpY2F0aW9uVHlwZTogc2ltcGxpZmlj
YXRpb25UeXBlLAorICAgICAgICBzdWNjZXNzQ2FsbGJhY2s6IHN1Y2Nlc3NDYWxsYmFjaworICAg
IH0pOworICAgIHJldHVybiB0aGlzOworfTsKKy8qKgorICogRGVmaW5lcyB0aGUgc2ltcGxpZmlj
YXRpb24gcXVldWUgc2NlbmUgY29tcG9uZW50IHJlc3BvbnNpYmxlIHRvIGhlbHAgc2NoZWR1bGlu
ZyB0aGUgdmFyaW91cyBzaW1wbGlmaWNhdGlvbiB0YXNrCisgKiBjcmVhdGVkIGluIGEgc2NlbmUK
KyAqLwordmFyIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQgPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBv
ZiB0aGUgY29tcG9uZW50IGZvciB0aGUgZ2l2ZW4gc2NlbmUKKyAgICAgKiBAcGFyYW0gc2NlbmUg
RGVmaW5lcyB0aGUgc2NlbmUgdG8gcmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBpbgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQoc2NlbmUpIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjb21wb25lbnQgbmFtZSBoZWxwZnVsbCB0byBpZGVu
dGlmeSB0aGUgY29tcG9uZW50IGluIHRoZSBsaXN0IG9mIHNjZW5lIGNvbXBvbmVudHMuCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLm5hbWUgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX1NJTVBMSUZJ
Q0FUSU9OUVVFVUU7CisgICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTsKKyAgICB9CisgICAgLyoq
CisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25lbnQgaW4gYSBnaXZlbiBzY2VuZQorICAgICAq
LworICAgIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLnJlZ2lzdGVy
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLnNjZW5lLl9iZWZvcmVDYW1lcmFVcGRhdGVT
dGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9CRUZPUkVDQU1FUkFVUERBVEVf
U0lNUExJRklDQVRJT05RVUVVRSwgdGhpcywgdGhpcy5fYmVmb3JlQ2FtZXJhVXBkYXRlKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJlYnVpbGRzIHRoZSBlbGVtZW50cyByZWxhdGVkIHRvIHRo
aXMgY29tcG9uZW50IGluIGNhc2Ugb2YKKyAgICAgKiBjb250ZXh0IGxvc3QgZm9yIGluc3RhbmNl
LgorICAgICAqLworICAgIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQucHJvdG90eXBl
LnJlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gZm9yIHRo
aXMgY29tcG9uZW50CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgY29tcG9u
ZW50IGFuZCB0aGUgYXNzb2NpYXRlZCByZXNzb3VyY2VzCisgICAgICovCisgICAgU2ltcGxpY2F0
aW9uUXVldWVTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgLy8gTm90aGluZyB0byBkbyBmb3IgdGhpcyBjb21wb25lbnQKKyAgICB9OworICAg
IFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLl9iZWZvcmVDYW1lcmFV
cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnNjZW5lLl9zaW1wbGlmaWNh
dGlvblF1ZXVlICYmICF0aGlzLnNjZW5lLl9zaW1wbGlmaWNhdGlvblF1ZXVlLnJ1bm5pbmcpIHsK
KyAgICAgICAgICAgIHRoaXMuc2NlbmUuX3NpbXBsaWZpY2F0aW9uUXVldWUuZXhlY3V0ZU5leHQo
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVD
b21wb25lbnQ7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy9wb2x5
Z29uTWVzaC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9NZXNoZXMvcG9seWdvbk1lc2gudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQb2x5Z29uLCBQb2x5Z29uTWVzaEJ1
aWxkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWdvbiIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gUG9seWdvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2x5Z29u
TWVzaEJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvbHlnb25NZXNoQnVpbGRlcjsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9n
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0
aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWVzaGVzL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVz
aC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRh
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NZXNoZXMvbWVzaC52ZXJ0ZXhEYXRhICovICIuL01lc2hlcy9tZXNoLnZlcnRleERhdGEudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvZW5n
aW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGhzX21hdGhfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5wYXRoICovICIuL01hdGhzL21hdGgucGF0aC50
cyIpOworCisKKworCisKKworCisKKy8qKgorICogVmVjdG9yMiB3dGggaW5kZXggcHJvcGVydHkK
KyAqLwordmFyIEluZGV4ZWRWZWN0b3IyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBl
cikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJd
KEluZGV4ZWRWZWN0b3IyLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIEluZGV4ZWRWZWN0b3IyKG9y
aWdpbmFsLCAKKyAgICAvKiogSW5kZXggb2YgdGhlIHZlY3RvcjIgKi8KKyAgICBpbmRleCkgewor
ICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBvcmlnaW5hbC54LCBvcmlnaW5h
bC55KSB8fCB0aGlzOworICAgICAgICBfdGhpcy5pbmRleCA9IGluZGV4OworICAgICAgICByZXR1
cm4gX3RoaXM7CisgICAgfQorICAgIHJldHVybiBJbmRleGVkVmVjdG9yMjsKK30oX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjIiXSkpOworLyoq
CisgKiBEZWZpbmVzIHBvaW50cyB0byBjcmVhdGUgYSBwb2x5Z29uCisgKi8KK3ZhciBQb2x5Z29u
UG9pbnRzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFBvbHln
b25Qb2ludHMoKSB7CisgICAgICAgIHRoaXMuZWxlbWVudHMgPSBuZXcgQXJyYXkoKTsKKyAgICB9
CisgICAgUG9seWdvblBvaW50cy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG9yaWdpbmFsUG9p
bnRzKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciByZXN1bHQgPSBu
ZXcgQXJyYXkoKTsKKyAgICAgICAgb3JpZ2luYWxQb2ludHMuZm9yRWFjaChmdW5jdGlvbiAocG9p
bnQpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwIHx8ICFwb2ludC5lcXVh
bHNXaXRoRXBzaWxvbihyZXN1bHRbMF0pKSB7CisgICAgICAgICAgICAgICAgdmFyIG5ld1BvaW50
ID0gbmV3IEluZGV4ZWRWZWN0b3IyKHBvaW50LCBfdGhpcy5lbGVtZW50cy5sZW5ndGgpOworICAg
ICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld1BvaW50KTsKKyAgICAgICAgICAgICAgICBfdGhp
cy5lbGVtZW50cy5wdXNoKG5ld1BvaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICBQb2x5Z29uUG9pbnRzLnByb3RvdHlw
ZS5jb21wdXRlQm91bmRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbG1pbiA9IG5ldyBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMiJd
KHRoaXMuZWxlbWVudHNbMF0ueCwgdGhpcy5lbGVtZW50c1swXS55KTsKKyAgICAgICAgdmFyIGxt
YXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlY3RvcjIiXSh0aGlzLmVsZW1lbnRzWzBdLngsIHRoaXMuZWxlbWVudHNbMF0ueSk7CisgICAg
ICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAocG9pbnQpIHsKKyAgICAgICAgICAg
IC8vIHgKKyAgICAgICAgICAgIGlmIChwb2ludC54IDwgbG1pbi54KSB7CisgICAgICAgICAgICAg
ICAgbG1pbi54ID0gcG9pbnQueDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KHBvaW50LnggPiBsbWF4LngpIHsKKyAgICAgICAgICAgICAgICBsbWF4LnggPSBwb2ludC54Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8geQorICAgICAgICAgICAgaWYgKHBvaW50Lnkg
PCBsbWluLnkpIHsKKyAgICAgICAgICAgICAgICBsbWluLnkgPSBwb2ludC55OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocG9pbnQueSA+IGxtYXgueSkgeworICAgICAgICAg
ICAgICAgIGxtYXgueSA9IHBvaW50Lnk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgbWluOiBsbWluLAorICAgICAgICAgICAgbWF4OiBs
bWF4LAorICAgICAgICAgICAgd2lkdGg6IGxtYXgueCAtIGxtaW4ueCwKKyAgICAgICAgICAgIGhl
aWdodDogbG1heC55IC0gbG1pbi55CisgICAgICAgIH07CisgICAgfTsKKyAgICByZXR1cm4gUG9s
eWdvblBvaW50czsKK30oKSk7CisvKioKKyAqIFBvbHlnb24KKyAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vcGFyYW1ldHJpY19zaGFwZXMjbm9uLXJlZ3VsYXItcG9seWdv
bgorICovCit2YXIgUG9seWdvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBm
dW5jdGlvbiBQb2x5Z29uKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcmVj
dGFuZ2xlCisgICAgICogQHBhcmFtIHhtaW4gYm90dG9tIFggY29vcmQKKyAgICAgKiBAcGFyYW0g
eW1pbiBib3R0b20gWSBjb29yZAorICAgICAqIEBwYXJhbSB4bWF4IHRvcCBYIGNvb3JkCisgICAg
ICogQHBhcmFtIHltYXggdG9wIFkgY29vcmQKKyAgICAgKiBAcmV0dXJucyBwb2ludHMgdGhhdCBt
YWtlIHRoZSByZXN1bHRpbmcgcmVjdGF0aW9uCisgICAgICovCisgICAgUG9seWdvbi5SZWN0YW5n
bGUgPSBmdW5jdGlvbiAoeG1pbiwgeW1pbiwgeG1heCwgeW1heCkgeworICAgICAgICByZXR1cm4g
WworICAgICAgICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZWN0b3IyIl0oeG1pbiwgeW1pbiksCisgICAgICAgICAgICBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjIiXSh4bWF4
LCB5bWluKSwKKyAgICAgICAgICAgIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVmVjdG9yMiJdKHhtYXgsIHltYXgpLAorICAgICAgICAgICAgbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3Iy
Il0oeG1pbiwgeW1heCkKKyAgICAgICAgXTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0
ZXMgYSBjaXJjbGUKKyAgICAgKiBAcGFyYW0gcmFkaXVzIHJhZGl1cyBvZiBjaXJjbGUKKyAgICAg
KiBAcGFyYW0gY3ggc2NhbGUgaW4geAorICAgICAqIEBwYXJhbSBjeSBzY2FsZSBpbiB5CisgICAg
ICogQHBhcmFtIG51bWJlck9mU2lkZXMgbnVtYmVyIG9mIHNpZGVzIHRoYXQgbWFrZSB1cCB0aGUg
Y2lyY2xlCisgICAgICogQHJldHVybnMgcG9pbnRzIHRoYXQgbWFrZSB0aGUgcmVzdWx0aW5nIGNp
cmNsZQorICAgICAqLworICAgIFBvbHlnb24uQ2lyY2xlID0gZnVuY3Rpb24gKHJhZGl1cywgY3gs
IGN5LCBudW1iZXJPZlNpZGVzKSB7CisgICAgICAgIGlmIChjeCA9PT0gdm9pZCAwKSB7IGN4ID0g
MDsgfQorICAgICAgICBpZiAoY3kgPT09IHZvaWQgMCkgeyBjeSA9IDA7IH0KKyAgICAgICAgaWYg
KG51bWJlck9mU2lkZXMgPT09IHZvaWQgMCkgeyBudW1iZXJPZlNpZGVzID0gMzI7IH0KKyAgICAg
ICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheSgpOworICAgICAgICB2YXIgYW5nbGUgPSAwOworICAg
ICAgICB2YXIgaW5jcmVtZW50ID0gKE1hdGguUEkgKiAyKSAvIG51bWJlck9mU2lkZXM7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZTaWRlczsgaSsrKSB7CisgICAgICAgICAg
ICByZXN1bHQucHVzaChuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlY3RvcjIiXShjeCArIE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cywgY3kgKyBN
YXRoLnNpbihhbmdsZSkgKiByYWRpdXMpKTsKKyAgICAgICAgICAgIGFuZ2xlIC09IGluY3JlbWVu
dDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIHBvbHlnb24gZnJvbSBpbnB1dCBzdHJpbmcKKyAgICAgKiBAcGFyYW0g
aW5wdXQgSW5wdXQgcG9seWdvbiBkYXRhCisgICAgICogQHJldHVybnMgdGhlIHBhcnNlZCBwb2lu
dHMKKyAgICAgKi8KKyAgICBQb2x5Z29uLlBhcnNlID0gZnVuY3Rpb24gKGlucHV0KSB7CisgICAg
ICAgIHZhciBmbG9hdHMgPSBpbnB1dC5zcGxpdCgvW14tK2VFXC5cZF0rLykubWFwKHBhcnNlRmxv
YXQpLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7IHJldHVybiAoIWlzTmFOKHZhbCkpOyB9KTsKKyAg
ICAgICAgdmFyIGksIHJlc3VsdCA9IFtdOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGZsb2F0
cy5sZW5ndGggJiAweDdGRkZGRkZFKTsgaSArPSAyKSB7CisgICAgICAgICAgICByZXN1bHQucHVz
aChuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZl
Y3RvcjIiXShmbG9hdHNbaV0sIGZsb2F0c1tpICsgMV0pKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogU3RhcnRzIGJ1aWxkaW5nIGEg
cG9seWdvbiBmcm9tIHggYW5kIHkgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0geCB4IGNvb3Jk
aW5hdGUKKyAgICAgKiBAcGFyYW0geSB5IGNvb3JkaW5hdGUKKyAgICAgKiBAcmV0dXJucyB0aGUg
c3RhcnRlZCBwYXRoMgorICAgICAqLworICAgIFBvbHlnb24uU3RhcnRpbmdBdCA9IGZ1bmN0aW9u
ICh4LCB5KSB7CisgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF9wYXRoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIlBhdGgyIl0uU3RhcnRpbmdBdCh4LCB5KTsKKyAgICB9OworICAgIHJl
dHVybiBQb2x5Z29uOworfSgpKTsKKworLyoqCisgKiBCdWlsZHMgYSBwb2x5Z29uCisgKiBAc2Vl
IGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BvbHlnb25tZXNoYnVpbGRlcgorICov
Cit2YXIgUG9seWdvbk1lc2hCdWlsZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBQb2x5Z29uTWVzaEJ1aWxkZXIKKyAgICAgKiBAcGFy
YW0gbmFtZSBuYW1lIG9mIHRoZSBidWlsZGVyCisgICAgICogQHBhcmFtIGNvbnRvdXJzIFBhdGgg
b2YgdGhlIHBvbHlnb24KKyAgICAgKiBAcGFyYW0gc2NlbmUgc2NlbmUgdG8gYWRkIHRvIHdoZW4g
Y3JlYXRpbmcgdGhlIG1lc2gKKyAgICAgKiBAcGFyYW0gZWFyY3V0SW5qZWN0aW9uIGNhbiBiZSB1
c2VkIHRvIGluamVjdCB5b3VyIG93biBlYXJjdXQgcmVmZXJlbmNlCisgICAgICovCisgICAgZnVu
Y3Rpb24gUG9seWdvbk1lc2hCdWlsZGVyKG5hbWUsIGNvbnRvdXJzLCBzY2VuZSwgZWFyY3V0SW5q
ZWN0aW9uKSB7CisgICAgICAgIGlmIChlYXJjdXRJbmplY3Rpb24gPT09IHZvaWQgMCkgeyBlYXJj
dXRJbmplY3Rpb24gPSBlYXJjdXQ7IH0KKyAgICAgICAgdGhpcy5fcG9pbnRzID0gbmV3IFBvbHln
b25Qb2ludHMoKTsKKyAgICAgICAgdGhpcy5fb3V0bGluZXBvaW50cyA9IG5ldyBQb2x5Z29uUG9p
bnRzKCk7CisgICAgICAgIHRoaXMuX2hvbGVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMu
X2Vwb2ludHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fZWhvbGVzID0gbmV3IEFycmF5
KCk7CisgICAgICAgIHRoaXMuYmpzRWFyY3V0ID0gZWFyY3V0SW5qZWN0aW9uOworICAgICAgICB0
aGlzLl9uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8fCBfRW5naW5l
c19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siRW5naW5lIl0uTGFzdENyZWF0
ZWRTY2VuZTsKKyAgICAgICAgdmFyIHBvaW50czsKKyAgICAgICAgaWYgKGNvbnRvdXJzIGluc3Rh
bmNlb2YgX01hdGhzX21hdGhfcGF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJQYXRo
MiJdKSB7CisgICAgICAgICAgICBwb2ludHMgPSBjb250b3Vycy5nZXRQb2ludHMoKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBvaW50cyA9IGNvbnRvdXJzOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2FkZFRvZXBvaW50KHBvaW50cyk7CisgICAgICAgIHRoaXMu
X3BvaW50cy5hZGQocG9pbnRzKTsKKyAgICAgICAgdGhpcy5fb3V0bGluZXBvaW50cy5hZGQocG9p
bnRzKTsKKyAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJqc0VhcmN1dCA9PT0gJ3VuZGVmaW5lZCcp
IHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJMb2dnZXIiXS5XYXJuKCJFYXJjdXQgd2FzIG5vdCBmb3VuZCwgdGhlIHBvbHlnb24gd2lsbCBu
b3QgYmUgYnVpbHQuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgUG9seWdvbk1lc2hCdWlsZGVy
LnByb3RvdHlwZS5fYWRkVG9lcG9pbnQgPSBmdW5jdGlvbiAocG9pbnRzKSB7CisgICAgICAgIGZv
ciAodmFyIF9pID0gMCwgcG9pbnRzXzEgPSBwb2ludHM7IF9pIDwgcG9pbnRzXzEubGVuZ3RoOyBf
aSsrKSB7CisgICAgICAgICAgICB2YXIgcCA9IHBvaW50c18xW19pXTsKKyAgICAgICAgICAgIHRo
aXMuX2Vwb2ludHMucHVzaChwLngsIHAueSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFkZHMgYSB3aG9sZSB3aXRoaW4gdGhlIHBvbHlnb24KKyAgICAgKiBAcGFyYW0gaG9s
ZSBBcnJheSBvZiBwb2ludHMgZGVmaW5pbmcgdGhlIGhvbGUKKyAgICAgKiBAcmV0dXJucyB0aGlz
CisgICAgICovCisgICAgUG9seWdvbk1lc2hCdWlsZGVyLnByb3RvdHlwZS5hZGRIb2xlID0gZnVu
Y3Rpb24gKGhvbGUpIHsKKyAgICAgICAgdGhpcy5fcG9pbnRzLmFkZChob2xlKTsKKyAgICAgICAg
dmFyIGhvbGVwb2ludHMgPSBuZXcgUG9seWdvblBvaW50cygpOworICAgICAgICBob2xlcG9pbnRz
LmFkZChob2xlKTsKKyAgICAgICAgdGhpcy5faG9sZXMucHVzaChob2xlcG9pbnRzKTsKKyAgICAg
ICAgdGhpcy5fZWhvbGVzLnB1c2godGhpcy5fZXBvaW50cy5sZW5ndGggLyAyKTsKKyAgICAgICAg
dGhpcy5fYWRkVG9lcG9pbnQoaG9sZSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyB0aGUgcG9seWdvbgorICAgICAqIEBwYXJhbSB1cGRhdGFi
bGUgSWYgdGhlIG1lc2ggc2hvdWxkIGJlIHVwZGF0YWJsZQorICAgICAqIEBwYXJhbSBkZXB0aCBU
aGUgZGVwdGggb2YgdGhlIG1lc2ggY3JlYXRlZAorICAgICAqIEByZXR1cm5zIHRoZSBjcmVhdGVk
IG1lc2gKKyAgICAgKi8KKyAgICBQb2x5Z29uTWVzaEJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkID0g
ZnVuY3Rpb24gKHVwZGF0YWJsZSwgZGVwdGgpIHsKKyAgICAgICAgaWYgKHVwZGF0YWJsZSA9PT0g
dm9pZCAwKSB7IHVwZGF0YWJsZSA9IGZhbHNlOyB9CisgICAgICAgIGlmIChkZXB0aCA9PT0gdm9p
ZCAwKSB7IGRlcHRoID0gMDsgfQorICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IF9NZXNoZXNfbWVz
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0odGhpcy5fbmFtZSwgdGhpcy5f
c2NlbmUpOworICAgICAgICB2YXIgdmVydGV4RGF0YSA9IHRoaXMuYnVpbGRWZXJ0ZXhEYXRhKGRl
cHRoKTsKKyAgICAgICAgcmVzdWx0LnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHZl
cnRleERhdGEucG9zaXRpb25zLCB1cGRhdGFibGUpOworICAgICAgICByZXN1bHQuc2V0VmVydGlj
ZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRl
eEJ1ZmZlciJdLk5vcm1hbEtpbmQsIHZlcnRleERhdGEubm9ybWFscywgdXBkYXRhYmxlKTsKKyAg
ICAgICAgcmVzdWx0LnNldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQsIHZlcnRleERhdGEudXZzLCB1
cGRhdGFibGUpOworICAgICAgICByZXN1bHQuc2V0SW5kaWNlcyh2ZXJ0ZXhEYXRhLmluZGljZXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRl
cyB0aGUgcG9seWdvbgorICAgICAqIEBwYXJhbSBkZXB0aCBUaGUgZGVwdGggb2YgdGhlIG1lc2gg
Y3JlYXRlZAorICAgICAqIEByZXR1cm5zIHRoZSBjcmVhdGVkIFZlcnRleERhdGEKKyAgICAgKi8K
KyAgICBQb2x5Z29uTWVzaEJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkVmVydGV4RGF0YSA9IGZ1bmN0
aW9uIChkZXB0aCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoZGVw
dGggPT09IHZvaWQgMCkgeyBkZXB0aCA9IDA7IH0KKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBf
TWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0
ZXhEYXRhIl0oKTsKKyAgICAgICAgdmFyIG5vcm1hbHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAg
dmFyIHBvc2l0aW9ucyA9IG5ldyBBcnJheSgpOworICAgICAgICB2YXIgdXZzID0gbmV3IEFycmF5
KCk7CisgICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9wb2ludHMuY29tcHV0ZUJvdW5kcygpOwor
ICAgICAgICB0aGlzLl9wb2ludHMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAocCkgeworICAg
ICAgICAgICAgbm9ybWFscy5wdXNoKDAsIDEuMCwgMCk7CisgICAgICAgICAgICBwb3NpdGlvbnMu
cHVzaChwLngsIDAsIHAueSk7CisgICAgICAgICAgICB1dnMucHVzaCgocC54IC0gYm91bmRzLm1p
bi54KSAvIGJvdW5kcy53aWR0aCwgKHAueSAtIGJvdW5kcy5taW4ueSkgLyBib3VuZHMuaGVpZ2h0
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHZhciBpbmRpY2VzID0gbmV3IEFycmF5KCk7CisgICAg
ICAgIHZhciByZXMgPSB0aGlzLmJqc0VhcmN1dCh0aGlzLl9lcG9pbnRzLCB0aGlzLl9laG9sZXMs
IDIpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgaW5kaWNlcy5wdXNoKHJlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRl
cHRoID4gMCkgeworICAgICAgICAgICAgdmFyIHBvc2l0aW9uc2NvdW50ID0gKHBvc2l0aW9ucy5s
ZW5ndGggLyAzKTsgLy9nZXQgdGhlIGN1cnJlbnQgcG9pbnRjb3VudAorICAgICAgICAgICAgdGhp
cy5fcG9pbnRzLmVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKHApIHsKKyAgICAgICAgICAgICAg
ICBub3JtYWxzLnB1c2goMCwgLTEuMCwgMCk7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1
c2gocC54LCAtZGVwdGgsIHAueSk7CisgICAgICAgICAgICAgICAgdXZzLnB1c2goMSAtIChwLngg
LSBib3VuZHMubWluLngpIC8gYm91bmRzLndpZHRoLCAxIC0gKHAueSAtIGJvdW5kcy5taW4ueSkg
LyBib3VuZHMuaGVpZ2h0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdmFyIHRvdGFs
Q291bnQgPSBpbmRpY2VzLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dG90YWxDb3VudDsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgdmFyIGkwID0gaW5kaWNlc1tp
ICsgMF07CisgICAgICAgICAgICAgICAgdmFyIGkxID0gaW5kaWNlc1tpICsgMV07CisgICAgICAg
ICAgICAgICAgdmFyIGkyID0gaW5kaWNlc1tpICsgMl07CisgICAgICAgICAgICAgICAgaW5kaWNl
cy5wdXNoKGkyICsgcG9zaXRpb25zY291bnQpOworICAgICAgICAgICAgICAgIGluZGljZXMucHVz
aChpMSArIHBvc2l0aW9uc2NvdW50KTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goaTAg
KyBwb3NpdGlvbnNjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL0FkZCB0aGUg
c2lkZXMKKyAgICAgICAgICAgIHRoaXMuYWRkU2lkZShwb3NpdGlvbnMsIG5vcm1hbHMsIHV2cywg
aW5kaWNlcywgYm91bmRzLCB0aGlzLl9vdXRsaW5lcG9pbnRzLCBkZXB0aCwgZmFsc2UpOworICAg
ICAgICAgICAgdGhpcy5faG9sZXMuZm9yRWFjaChmdW5jdGlvbiAoaG9sZSkgeworICAgICAgICAg
ICAgICAgIF90aGlzLmFkZFNpZGUocG9zaXRpb25zLCBub3JtYWxzLCB1dnMsIGluZGljZXMsIGJv
dW5kcywgaG9sZSwgZGVwdGgsIHRydWUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmVzdWx0LmluZGljZXMgPSBpbmRpY2VzOworICAgICAgICByZXN1bHQucG9zaXRpb25z
ID0gcG9zaXRpb25zOworICAgICAgICByZXN1bHQubm9ybWFscyA9IG5vcm1hbHM7CisgICAgICAg
IHJlc3VsdC51dnMgPSB1dnM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBZGRzIGEgc2lkZSB0byB0aGUgcG9seWdvbgorICAgICAqIEBwYXJhbSBwb3Np
dGlvbnMgcG9pbnRzIHRoYXQgbWFrZSB0aGUgcG9seWdvbgorICAgICAqIEBwYXJhbSBub3JtYWxz
IG5vcm1hbHMgb2YgdGhlIHBvbHlnb24KKyAgICAgKiBAcGFyYW0gdXZzIHV2cyBvZiB0aGUgcG9s
eWdvbgorICAgICAqIEBwYXJhbSBpbmRpY2VzIGluZGljZXMgb2YgdGhlIHBvbHlnb24KKyAgICAg
KiBAcGFyYW0gYm91bmRzIGJvdW5kcyBvZiB0aGUgcG9seWdvbgorICAgICAqIEBwYXJhbSBwb2lu
dHMgcG9pbnRzIG9mIHRoZSBwb2x5Z29uCisgICAgICogQHBhcmFtIGRlcHRoIGRlcHRoIG9mIHRo
ZSBwb2x5Z29uCisgICAgICogQHBhcmFtIGZsaXAgZmxpcCBvZiB0aGUgcG9seWdvbgorICAgICAq
LworICAgIFBvbHlnb25NZXNoQnVpbGRlci5wcm90b3R5cGUuYWRkU2lkZSA9IGZ1bmN0aW9uIChw
b3NpdGlvbnMsIG5vcm1hbHMsIHV2cywgaW5kaWNlcywgYm91bmRzLCBwb2ludHMsIGRlcHRoLCBm
bGlwKSB7CisgICAgICAgIHZhciBTdGFydEluZGV4ID0gcG9zaXRpb25zLmxlbmd0aCAvIDM7Cisg
ICAgICAgIHZhciB1bGVuZ3RoID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2lu
dHMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBwID0gcG9pbnRzLmVs
ZW1lbnRzW2ldOworICAgICAgICAgICAgdmFyIHAxOworICAgICAgICAgICAgaWYgKChpICsgMSkg
PiBwb2ludHMuZWxlbWVudHMubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgIHAxID0gcG9p
bnRzLmVsZW1lbnRzWzBdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgcDEgPSBwb2ludHMuZWxlbWVudHNbaSArIDFdOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcG9zaXRpb25zLnB1c2gocC54LCAwLCBwLnkpOworICAgICAgICAgICAgcG9z
aXRpb25zLnB1c2gocC54LCAtZGVwdGgsIHAueSk7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVz
aChwMS54LCAwLCBwMS55KTsKKyAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHAxLngsIC1kZXB0
aCwgcDEueSk7CisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXShwLngsIDAsIHAueSk7CisgICAg
ICAgICAgICB2YXIgdjIgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlZlY3RvcjMiXShwMS54LCAwLCBwMS55KTsKKyAgICAgICAgICAgIHZhciB2
MyA9IHYyLnN1YnRyYWN0KHYxKTsKKyAgICAgICAgICAgIHZhciB2NCA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKDAsIDEsIDAp
OworICAgICAgICAgICAgdmFyIHZuID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5Dcm9zcyh2MywgdjQpOworICAgICAgICAgICAgdm4g
PSB2bi5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgIHV2cy5wdXNoKHVsZW5ndGggLyBib3VuZHMu
d2lkdGgsIDApOworICAgICAgICAgICAgdXZzLnB1c2godWxlbmd0aCAvIGJvdW5kcy53aWR0aCwg
MSk7CisgICAgICAgICAgICB1bGVuZ3RoICs9IHYzLmxlbmd0aCgpOworICAgICAgICAgICAgdXZz
LnB1c2goKHVsZW5ndGggLyBib3VuZHMud2lkdGgpLCAwKTsKKyAgICAgICAgICAgIHV2cy5wdXNo
KCh1bGVuZ3RoIC8gYm91bmRzLndpZHRoKSwgMSk7CisgICAgICAgICAgICBpZiAoIWZsaXApIHsK
KyAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goLXZuLngsIC12bi55LCAtdm4ueik7CisgICAg
ICAgICAgICAgICAgbm9ybWFscy5wdXNoKC12bi54LCAtdm4ueSwgLXZuLnopOworICAgICAgICAg
ICAgICAgIG5vcm1hbHMucHVzaCgtdm4ueCwgLXZuLnksIC12bi56KTsKKyAgICAgICAgICAgICAg
ICBub3JtYWxzLnB1c2goLXZuLngsIC12bi55LCAtdm4ueik7CisgICAgICAgICAgICAgICAgaW5k
aWNlcy5wdXNoKFN0YXJ0SW5kZXgpOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChTdGFy
dEluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKFN0YXJ0SW5kZXggKyAy
KTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goU3RhcnRJbmRleCArIDEpOworICAgICAg
ICAgICAgICAgIGluZGljZXMucHVzaChTdGFydEluZGV4ICsgMyk7CisgICAgICAgICAgICAgICAg
aW5kaWNlcy5wdXNoKFN0YXJ0SW5kZXggKyAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaCh2bi54LCB2bi55LCB2bi56KTsK
KyAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2godm4ueCwgdm4ueSwgdm4ueik7CisgICAgICAg
ICAgICAgICAgbm9ybWFscy5wdXNoKHZuLngsIHZuLnksIHZuLnopOworICAgICAgICAgICAgICAg
IG5vcm1hbHMucHVzaCh2bi54LCB2bi55LCB2bi56KTsKKyAgICAgICAgICAgICAgICBpbmRpY2Vz
LnB1c2goU3RhcnRJbmRleCk7CisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKFN0YXJ0SW5k
ZXggKyAyKTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goU3RhcnRJbmRleCArIDEpOwor
ICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChTdGFydEluZGV4ICsgMSk7CisgICAgICAgICAg
ICAgICAgaW5kaWNlcy5wdXNoKFN0YXJ0SW5kZXggKyAyKTsKKyAgICAgICAgICAgICAgICBpbmRp
Y2VzLnB1c2goU3RhcnRJbmRleCArIDMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3Rh
cnRJbmRleCArPSA0OworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gUG9seWdvbk1lc2hC
dWlsZGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NZXNoZXMvc3ViTWVz
aC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01lc2hl
cy9zdWJNZXNoLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBCYXNlU3ViTWVzaCwgU3ViTWVzaCAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJCYXNlU3ViTWVzaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQmFz
ZVN1Yk1lc2g7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3ViTWVzaCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gU3ViTWVzaDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9Db2xsaXNpb25zX2ludGVyc2VjdGlvbkluZm9fX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0NvbGxpc2lv
bnMvaW50ZXJzZWN0aW9uSW5mbyAqLyAiLi9Db2xsaXNpb25zL2ludGVyc2VjdGlvbkluZm8udHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0N1bGxp
bmcvYm91bmRpbmdJbmZvICovICIuL0N1bGxpbmcvYm91bmRpbmdJbmZvLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAq
LyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX2Z1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5mdW5jdGlvbnMgKi8gIi4vTWF0aHMvbWF0
aC5mdW5jdGlvbnMudHMiKTsKKworCisKKworCisKKy8qKgorICogQmFzZSBjbGFzcyBmb3Igc3Vi
bWVzaGVzCisgKi8KK3ZhciBCYXNlU3ViTWVzaCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgp
IHsKKyAgICBmdW5jdGlvbiBCYXNlU3ViTWVzaCgpIHsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICAgICAgdGhpcy5fbWF0ZXJpYWxEZWZpbmVzID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICAgICAgdGhpcy5fbWF0ZXJpYWxFZmZlY3QgPSBudWxsOworICAgIH0KKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZVN1Yk1lc2gucHJvdG90eXBlLCAiZWZmZWN0Iiwgewor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhc3NvY2lhdGVkIGVmZmVjdAorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
bWF0ZXJpYWxFZmZlY3Q7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFNldHMg
YXNzb2NpYXRlZCBlZmZlY3QgKGVmZmVjdCB1c2VkIHRvIHJlbmRlciB0aGlzIHN1Ym1lc2gpCisg
ICAgICogQHBhcmFtIGVmZmVjdCBkZWZpbmVzIHRoZSBlZmZlY3QgdG8gYXNzb2NpYXRlIHdpdGgK
KyAgICAgKiBAcGFyYW0gZGVmaW5lcyBkZWZpbmVzIHRoZSBzZXQgb2YgZGVmaW5lcyB1c2VkIHRv
IGNvbXBpbGUgdGhpcyBlZmZlY3QKKyAgICAgKi8KKyAgICBCYXNlU3ViTWVzaC5wcm90b3R5cGUu
c2V0RWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCwgZGVmaW5lcykgeworICAgICAgICBpZiAoZGVm
aW5lcyA9PT0gdm9pZCAwKSB7IGRlZmluZXMgPSBudWxsOyB9CisgICAgICAgIGlmICh0aGlzLl9t
YXRlcmlhbEVmZmVjdCA9PT0gZWZmZWN0KSB7CisgICAgICAgICAgICBpZiAoIWVmZmVjdCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX21hdGVyaWFsRGVmaW5lcyA9IG51bGw7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbWF0ZXJp
YWxEZWZpbmVzID0gZGVmaW5lczsKKyAgICAgICAgdGhpcy5fbWF0ZXJpYWxFZmZlY3QgPSBlZmZl
Y3Q7CisgICAgfTsKKyAgICByZXR1cm4gQmFzZVN1Yk1lc2g7Cit9KCkpOworCisvKioKKyAqIERl
ZmluZXMgYSBzdWJkaXZpc2lvbiBpbnNpZGUgYSBtZXNoCisgKi8KK3ZhciBTdWJNZXNoID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFN1Yk1lc2gsIF9zdXBlcik7CisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIG5ldyBzdWJtZXNoCisgICAgICogQHBhcmFtIG1hdGVyaWFsSW5kZXgg
ZGVmaW5lcyB0aGUgbWF0ZXJpYWwgaW5kZXggdG8gdXNlCisgICAgICogQHBhcmFtIHZlcnRpY2Vz
U3RhcnQgZGVmaW5lcyB2ZXJ0ZXggaW5kZXggc3RhcnQKKyAgICAgKiBAcGFyYW0gdmVydGljZXND
b3VudCBkZWZpbmVzIHZlcnRpY2VzIGNvdW50CisgICAgICogQHBhcmFtIGluZGV4U3RhcnQgZGVm
aW5lcyBpbmRleCBzdGFydAorICAgICAqIEBwYXJhbSBpbmRleENvdW50IGRlZmluZXMgaW5kaWNl
cyBjb3VudAorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIHBhcmVudCBtZXNoCisgICAg
ICogQHBhcmFtIHJlbmRlcmluZ01lc2ggZGVmaW5lcyBhbiBvcHRpb25hbCByZW5kZXJpbmcgbWVz
aAorICAgICAqIEBwYXJhbSBjcmVhdGVCb3VuZGluZ0JveCBkZWZpbmVzIGlmIGJvdW5kaW5nIGJv
eCBzaG91bGQgYmUgY3JlYXRlZCBmb3IgdGhpcyBzdWJtZXNoCisgICAgICovCisgICAgZnVuY3Rp
b24gU3ViTWVzaCgKKyAgICAvKiogdGhlIG1hdGVyaWFsIGluZGV4IHRvIHVzZSAqLworICAgIG1h
dGVyaWFsSW5kZXgsIAorICAgIC8qKiB2ZXJ0ZXggaW5kZXggc3RhcnQgKi8KKyAgICB2ZXJ0aWNl
c1N0YXJ0LCAKKyAgICAvKiogdmVydGljZXMgY291bnQgKi8KKyAgICB2ZXJ0aWNlc0NvdW50LCAK
KyAgICAvKiogaW5kZXggc3RhcnQgKi8KKyAgICBpbmRleFN0YXJ0LCAKKyAgICAvKiogaW5kaWNl
cyBjb3VudCAqLworICAgIGluZGV4Q291bnQsIG1lc2gsIHJlbmRlcmluZ01lc2gsIGNyZWF0ZUJv
dW5kaW5nQm94KSB7CisgICAgICAgIGlmIChjcmVhdGVCb3VuZGluZ0JveCA9PT0gdm9pZCAwKSB7
IGNyZWF0ZUJvdW5kaW5nQm94ID0gdHJ1ZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIu
Y2FsbCh0aGlzKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5tYXRlcmlhbEluZGV4ID0gbWF0ZXJp
YWxJbmRleDsKKyAgICAgICAgX3RoaXMudmVydGljZXNTdGFydCA9IHZlcnRpY2VzU3RhcnQ7Cisg
ICAgICAgIF90aGlzLnZlcnRpY2VzQ291bnQgPSB2ZXJ0aWNlc0NvdW50OworICAgICAgICBfdGhp
cy5pbmRleFN0YXJ0ID0gaW5kZXhTdGFydDsKKyAgICAgICAgX3RoaXMuaW5kZXhDb3VudCA9IGlu
ZGV4Q291bnQ7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9saW5lc0lu
ZGV4Q291bnQgPSAwOworICAgICAgICBfdGhpcy5fbGluZXNJbmRleEJ1ZmZlciA9IG51bGw7Cisg
ICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9sYXN0Q29sbGlkZXJXb3JsZFZl
cnRpY2VzID0gbnVsbDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2xh
c3RDb2xsaWRlclRyYW5zZm9ybU1hdHJpeCA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIF90aGlzLl9yZW5kZXJJZCA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisg
ICAgICAgIF90aGlzLl9hbHBoYUluZGV4ID0gMDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICAgICAgX3RoaXMuX2Rpc3RhbmNlVG9DYW1lcmEgPSAwOworICAgICAgICBfdGhpcy5fY3VycmVu
dE1hdGVyaWFsID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX21lc2ggPSBtZXNoOworICAgICAgICBf
dGhpcy5fcmVuZGVyaW5nTWVzaCA9IHJlbmRlcmluZ01lc2ggfHwgbWVzaDsKKyAgICAgICAgbWVz
aC5zdWJNZXNoZXMucHVzaChfdGhpcyk7CisgICAgICAgIF90aGlzLl90cmlhbmdsZVBsYW5lcyA9
IFtdOworICAgICAgICBfdGhpcy5faWQgPSBtZXNoLnN1Yk1lc2hlcy5sZW5ndGggLSAxOworICAg
ICAgICBpZiAoY3JlYXRlQm91bmRpbmdCb3gpIHsKKyAgICAgICAgICAgIF90aGlzLnJlZnJlc2hC
b3VuZGluZ0luZm8oKTsKKyAgICAgICAgICAgIG1lc2guY29tcHV0ZVdvcmxkTWF0cml4KHRydWUp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAg
ICogQWRkIGEgbmV3IHN1Ym1lc2ggdG8gYSBtZXNoCisgICAgICogQHBhcmFtIG1hdGVyaWFsSW5k
ZXggZGVmaW5lcyB0aGUgbWF0ZXJpYWwgaW5kZXggdG8gdXNlCisgICAgICogQHBhcmFtIHZlcnRp
Y2VzU3RhcnQgZGVmaW5lcyB2ZXJ0ZXggaW5kZXggc3RhcnQKKyAgICAgKiBAcGFyYW0gdmVydGlj
ZXNDb3VudCBkZWZpbmVzIHZlcnRpY2VzIGNvdW50CisgICAgICogQHBhcmFtIGluZGV4U3RhcnQg
ZGVmaW5lcyBpbmRleCBzdGFydAorICAgICAqIEBwYXJhbSBpbmRleENvdW50IGRlZmluZXMgaW5k
aWNlcyBjb3VudAorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIHBhcmVudCBtZXNoCisg
ICAgICogQHBhcmFtIHJlbmRlcmluZ01lc2ggZGVmaW5lcyBhbiBvcHRpb25hbCByZW5kZXJpbmcg
bWVzaAorICAgICAqIEBwYXJhbSBjcmVhdGVCb3VuZGluZ0JveCBkZWZpbmVzIGlmIGJvdW5kaW5n
IGJveCBzaG91bGQgYmUgY3JlYXRlZCBmb3IgdGhpcyBzdWJtZXNoCisgICAgICogQHJldHVybnMg
dGhlIG5ldyBzdWJtZXNoCisgICAgICovCisgICAgU3ViTWVzaC5BZGRUb01lc2ggPSBmdW5jdGlv
biAobWF0ZXJpYWxJbmRleCwgdmVydGljZXNTdGFydCwgdmVydGljZXNDb3VudCwgaW5kZXhTdGFy
dCwgaW5kZXhDb3VudCwgbWVzaCwgcmVuZGVyaW5nTWVzaCwgY3JlYXRlQm91bmRpbmdCb3gpIHsK
KyAgICAgICAgaWYgKGNyZWF0ZUJvdW5kaW5nQm94ID09PSB2b2lkIDApIHsgY3JlYXRlQm91bmRp
bmdCb3ggPSB0cnVlOyB9CisgICAgICAgIHJldHVybiBuZXcgU3ViTWVzaChtYXRlcmlhbEluZGV4
LCB2ZXJ0aWNlc1N0YXJ0LCB2ZXJ0aWNlc0NvdW50LCBpbmRleFN0YXJ0LCBpbmRleENvdW50LCBt
ZXNoLCByZW5kZXJpbmdNZXNoLCBjcmVhdGVCb3VuZGluZ0JveCk7CisgICAgfTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoU3ViTWVzaC5wcm90b3R5cGUsICJJc0dsb2JhbCIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN1Ym1lc2ggY292ZXJzIHRo
ZSBlbnRpcmUgcGFyZW50IG1lc2gKKyAgICAgICAgICogQGlnbm9yZW5hbWluZworICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gKHRoaXMu
dmVydGljZXNTdGFydCA9PT0gMCAmJiB0aGlzLnZlcnRpY2VzQ291bnQgPT09IHRoaXMuX21lc2gu
Z2V0VG90YWxWZXJ0aWNlcygpKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICog
UmV0dXJucyB0aGUgc3VibWVzaCBCb3VkaW5nSW5mbyBvYmplY3QKKyAgICAgKiBAcmV0dXJucyBj
dXJyZW50IGJvdW5kaW5nIGluZm8gKG9yIG1lc2gncyBvbmUgaWYgdGhlIHN1Ym1lc2ggaXMgZ2xv
YmFsKQorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmdldEJvdW5kaW5nSW5mbyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuSXNHbG9iYWwpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9tZXNoLmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLl9ib3VuZGluZ0luZm87CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRo
ZSBzdWJtZXNoIEJvdW5kaW5nSW5mbworICAgICAqIEBwYXJhbSBib3VuZGluZ0luZm8gZGVmaW5l
cyB0aGUgbmV3IGJvdW5kaW5nIGluZm8gdG8gdXNlCisgICAgICogQHJldHVybnMgdGhlIFN1Yk1l
c2gKKyAgICAgKi8KKyAgICBTdWJNZXNoLnByb3RvdHlwZS5zZXRCb3VuZGluZ0luZm8gPSBmdW5j
dGlvbiAoYm91bmRpbmdJbmZvKSB7CisgICAgICAgIHRoaXMuX2JvdW5kaW5nSW5mbyA9IGJvdW5k
aW5nSW5mbzsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIHRoZSBtZXNoIG9mIHRoZSBjdXJyZW50IHN1Ym1lc2gKKyAgICAgKiBAcmV0dXJuIHRo
ZSBwYXJlbnQgbWVzaAorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmdldE1lc2ggPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9tZXNoOworICAgIH07CisgICAgLyoq
CisgICAgICogUmV0dXJucyB0aGUgcmVuZGVyaW5nIG1lc2ggb2YgdGhlIHN1Ym1lc2gKKyAgICAg
KiBAcmV0dXJucyB0aGUgcmVuZGVyaW5nIG1lc2ggKGNvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHBh
cmVudCBtZXNoKQorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmdldFJlbmRlcmluZ01l
c2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJpbmdNZXNoOwor
ICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc3VibWVzaCBtYXRlcmlhbAorICAg
ICAqIEByZXR1cm5zIG51bGwgb3IgdGhlIGN1cnJlbnQgbWF0ZXJpYWwKKyAgICAgKi8KKyAgICBT
dWJNZXNoLnByb3RvdHlwZS5nZXRNYXRlcmlhbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IHJvb3RNYXRlcmlhbCA9IHRoaXMuX3JlbmRlcmluZ01lc2gubWF0ZXJpYWw7CisgICAgICAgIGlm
IChyb290TWF0ZXJpYWwgPT09IG51bGwgfHwgcm9vdE1hdGVyaWFsID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXNoLmdldFNjZW5lKCkuZGVmYXVsdE1hdGVyaWFs
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJvb3RNYXRlcmlhbC5nZXRTdWJNYXRlcmlh
bCkgeworICAgICAgICAgICAgdmFyIG11bHRpTWF0ZXJpYWwgPSByb290TWF0ZXJpYWw7CisgICAg
ICAgICAgICB2YXIgZWZmZWN0aXZlTWF0ZXJpYWwgPSBtdWx0aU1hdGVyaWFsLmdldFN1Yk1hdGVy
aWFsKHRoaXMubWF0ZXJpYWxJbmRleCk7CisgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudE1h
dGVyaWFsICE9PSBlZmZlY3RpdmVNYXRlcmlhbCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2N1
cnJlbnRNYXRlcmlhbCA9IGVmZmVjdGl2ZU1hdGVyaWFsOworICAgICAgICAgICAgICAgIHRoaXMu
X21hdGVyaWFsRGVmaW5lcyA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gZWZmZWN0aXZlTWF0ZXJpYWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJvb3RNYXRl
cmlhbDsKKyAgICB9OworICAgIC8vIE1ldGhvZHMKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgbmV3
IHVwZGF0ZWQgQm91bmRpbmdJbmZvIG9iamVjdCB0byB0aGUgc3VibWVzaAorICAgICAqIEBwYXJh
bSBkYXRhIGRlZmluZXMgYW4gb3B0aW9uYWwgcG9zaXRpb24gYXJyYXkgdG8gdXNlIHRvIGRldGVy
bWluZSB0aGUgYm91bmRpbmcgaW5mbworICAgICAqIEByZXR1cm5zIHRoZSBTdWJNZXNoCisgICAg
ICovCisgICAgU3ViTWVzaC5wcm90b3R5cGUucmVmcmVzaEJvdW5kaW5nSW5mbyA9IGZ1bmN0aW9u
IChkYXRhKSB7CisgICAgICAgIGlmIChkYXRhID09PSB2b2lkIDApIHsgZGF0YSA9IG51bGw7IH0K
KyAgICAgICAgdGhpcy5fbGFzdENvbGxpZGVyV29ybGRWZXJ0aWNlcyA9IG51bGw7CisgICAgICAg
IGlmICh0aGlzLklzR2xvYmFsIHx8ICF0aGlzLl9yZW5kZXJpbmdNZXNoIHx8ICF0aGlzLl9yZW5k
ZXJpbmdNZXNoLmdlb21ldHJ5KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9yZW5kZXJp
bmdNZXNoLmdldFZlcnRpY2VzRGF0YShfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFkYXRhKSB7CisgICAgICAgICAgICB0aGlzLl9ib3VuZGluZ0luZm8gPSB0aGlzLl9tZXNoLmdl
dEJvdW5kaW5nSW5mbygpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGluZGljZXMgPSB0aGlzLl9yZW5kZXJpbmdNZXNoLmdldEluZGljZXMoKTsKKyAg
ICAgICAgdmFyIGV4dGVuZDsKKyAgICAgICAgLy9pcyB0aGlzIHRoZSBvbmx5IHN1Ym1lc2g/Cisg
ICAgICAgIGlmICh0aGlzLmluZGV4U3RhcnQgPT09IDAgJiYgdGhpcy5pbmRleENvdW50ID09PSBp
bmRpY2VzLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9IHRoaXMuX3Jl
bmRlcmluZ01lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICAvL3RoZSByZW5kZXJp
bmcgbWVzaCdzIGJvdW5kaW5nIGluZm8gY2FuIGJlIHVzZWQsIGl0IGlzIHRoZSBzdGFuZGFyZCBz
dWJtZXNoIGZvciBhbGwgaW5kaWNlcy4KKyAgICAgICAgICAgIGV4dGVuZCA9IHsgbWluaW11bTog
Ym91bmRpbmdJbmZvLm1pbmltdW0uY2xvbmUoKSwgbWF4aW11bTogYm91bmRpbmdJbmZvLm1heGlt
dW0uY2xvbmUoKSB9OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZXh0
ZW5kID0gT2JqZWN0KF9NYXRoc19tYXRoX2Z1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJleHRyYWN0TWluQW5kTWF4SW5kZXhlZCJdKShkYXRhLCBpbmRpY2VzLCB0aGlzLmlu
ZGV4U3RhcnQsIHRoaXMuaW5kZXhDb3VudCwgdGhpcy5fcmVuZGVyaW5nTWVzaC5nZW9tZXRyeS5i
b3VuZGluZ0JpYXMpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9ib3VuZGluZ0luZm8p
IHsKKyAgICAgICAgICAgIHRoaXMuX2JvdW5kaW5nSW5mby5yZUNvbnN0cnVjdChleHRlbmQubWlu
aW11bSwgZXh0ZW5kLm1heGltdW0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdGhpcy5fYm91bmRpbmdJbmZvID0gbmV3IF9DdWxsaW5nX2JvdW5kaW5nSW5mb19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJCb3VuZGluZ0luZm8iXShleHRlbmQubWluaW11bSwg
ZXh0ZW5kLm1heGltdW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTdWJNZXNoLnByb3RvdHlwZS5fY2hlY2tDb2xsaXNp
b24gPSBmdW5jdGlvbiAoY29sbGlkZXIpIHsKKyAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9IHRo
aXMuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIHJldHVybiBib3VuZGluZ0luZm8uX2NoZWNr
Q29sbGlzaW9uKGNvbGxpZGVyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhl
IHN1Ym1lc2ggQm91bmRpbmdJbmZvCisgICAgICogQHBhcmFtIHdvcmxkIGRlZmluZXMgdGhlIHdv
cmxkIG1hdHJpeCB0byB1c2UgdG8gdXBkYXRlIHRoZSBib3VuZGluZyBpbmZvCisgICAgICogQHJl
dHVybnMgdGhlIHN1Ym1lc2gKKyAgICAgKi8KKyAgICBTdWJNZXNoLnByb3RvdHlwZS51cGRhdGVC
b3VuZGluZ0luZm8gPSBmdW5jdGlvbiAod29ybGQpIHsKKyAgICAgICAgdmFyIGJvdW5kaW5nSW5m
byA9IHRoaXMuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIGlmICghYm91bmRpbmdJbmZvKSB7
CisgICAgICAgICAgICB0aGlzLnJlZnJlc2hCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgICAgIGJv
dW5kaW5nSW5mbyA9IHRoaXMuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAg
Ym91bmRpbmdJbmZvLnVwZGF0ZSh3b3JsZCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogVHJ1ZSBpcyB0aGUgc3VibWVzaCBib3VuZGluZyBib3ggaW50ZXJz
ZWN0cyB0aGUgZnJ1c3R1bSBkZWZpbmVkIGJ5IHRoZSBwYXNzZWQgYXJyYXkgb2YgcGxhbmVzLgor
ICAgICAqIEBwYXJhbSBmcnVzdHVtUGxhbmVzIGRlZmluZXMgdGhlIGZydXN0dW0gcGxhbmVzCisg
ICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgc3VibWVzaCBpcyBpbnRlcnNlY3Rpbmcgd2l0aCB0
aGUgZnJ1c3R1bQorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmlzSW5GcnVzdHVtID0g
ZnVuY3Rpb24gKGZydXN0dW1QbGFuZXMpIHsKKyAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9IHRo
aXMuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIGlmICghYm91bmRpbmdJbmZvKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJvdW5kaW5n
SW5mby5pc0luRnJ1c3R1bShmcnVzdHVtUGxhbmVzLCB0aGlzLl9tZXNoLmN1bGxpbmdTdHJhdGVn
eSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUcnVlIGlzIHRoZSBzdWJtZXNoIGJvdW5kaW5n
IGJveCBpcyBjb21wbGV0ZWx5IGluc2lkZSB0aGUgZnJ1c3R1bSBkZWZpbmVkIGJ5IHRoZSBwYXNz
ZWQgYXJyYXkgb2YgcGxhbmVzCisgICAgICogQHBhcmFtIGZydXN0dW1QbGFuZXMgZGVmaW5lcyB0
aGUgZnJ1c3R1bSBwbGFuZXMKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzdWJtZXNoIGlz
IGluc2lkZSB0aGUgZnJ1c3R1bQorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmlzQ29t
cGxldGVseUluRnJ1c3R1bSA9IGZ1bmN0aW9uIChmcnVzdHVtUGxhbmVzKSB7CisgICAgICAgIHZh
ciBib3VuZGluZ0luZm8gPSB0aGlzLmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICBpZiAoIWJv
dW5kaW5nSW5mbykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBib3VuZGluZ0luZm8uaXNDb21wbGV0ZWx5SW5GcnVzdHVtKGZydXN0dW1QbGFu
ZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVuZGVycyB0aGUgc3VibWVzaAorICAgICAq
IEBwYXJhbSBlbmFibGVBbHBoYU1vZGUgZGVmaW5lcyBpZiBhbHBoYSBuZWVkcyB0byBiZSB1c2Vk
CisgICAgICogQHJldHVybnMgdGhlIHN1Ym1lc2gKKyAgICAgKi8KKyAgICBTdWJNZXNoLnByb3Rv
dHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZW5hYmxlQWxwaGFNb2RlKSB7CisgICAgICAgIHRoaXMu
X3JlbmRlcmluZ01lc2gucmVuZGVyKHRoaXMsIGVuYWJsZUFscGhhTW9kZSk7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAg
IFN1Yk1lc2gucHJvdG90eXBlLl9nZXRMaW5lc0luZGV4QnVmZmVyID0gZnVuY3Rpb24gKGluZGlj
ZXMsIGVuZ2luZSkgeworICAgICAgICBpZiAoIXRoaXMuX2xpbmVzSW5kZXhCdWZmZXIpIHsKKyAg
ICAgICAgICAgIHZhciBsaW5lc0luZGljZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGlu
ZGV4ID0gdGhpcy5pbmRleFN0YXJ0OyBpbmRleCA8IHRoaXMuaW5kZXhTdGFydCArIHRoaXMuaW5k
ZXhDb3VudDsgaW5kZXggKz0gMykgeworICAgICAgICAgICAgICAgIGxpbmVzSW5kaWNlcy5wdXNo
KGluZGljZXNbaW5kZXhdLCBpbmRpY2VzW2luZGV4ICsgMV0sIGluZGljZXNbaW5kZXggKyAxXSwg
aW5kaWNlc1tpbmRleCArIDJdLCBpbmRpY2VzW2luZGV4ICsgMl0sIGluZGljZXNbaW5kZXhdKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2xpbmVzSW5kZXhCdWZmZXIgPSBlbmdp
bmUuY3JlYXRlSW5kZXhCdWZmZXIobGluZXNJbmRpY2VzKTsKKyAgICAgICAgICAgIHRoaXMuX2xp
bmVzSW5kZXhDb3VudCA9IGxpbmVzSW5kaWNlcy5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRoaXMuX2xpbmVzSW5kZXhCdWZmZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
aGVja3MgaWYgdGhlIHN1Ym1lc2ggaW50ZXJzZWN0cyB3aXRoIGEgcmF5CisgICAgICogQHBhcmFt
IHJheSBkZWZpbmVzIHRoZSByYXkgdG8gdGVzdAorICAgICAqIEByZXR1cm5zIHRydWUgaXMgdGhl
IHBhc3NlZCByYXkgaW50ZXJzZWN0cyB0aGUgc3VibWVzaCBib3VuZGluZyBib3gKKyAgICAgKi8K
KyAgICBTdWJNZXNoLnByb3RvdHlwZS5jYW5JbnRlcnNlY3RzID0gZnVuY3Rpb24gKHJheSkgewor
ICAgICAgICB2YXIgYm91bmRpbmdJbmZvID0gdGhpcy5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAg
ICAgaWYgKCFib3VuZGluZ0luZm8pIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gcmF5LmludGVyc2VjdHNCb3goYm91bmRpbmdJbmZvLmJvdW5k
aW5nQm94KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEludGVyc2VjdHMgY3VycmVudCBzdWJt
ZXNoIHdpdGggYSByYXkKKyAgICAgKiBAcGFyYW0gcmF5IGRlZmluZXMgdGhlIHJheSB0byB0ZXN0
CisgICAgICogQHBhcmFtIHBvc2l0aW9ucyBkZWZpbmVzIG1lc2gncyBwb3NpdGlvbnMgYXJyYXkK
KyAgICAgKiBAcGFyYW0gaW5kaWNlcyBkZWZpbmVzIG1lc2gncyBpbmRpY2VzIGFycmF5CisgICAg
ICogQHBhcmFtIGZhc3RDaGVjayBkZWZpbmVzIGlmIG9ubHkgYm91bmRpbmcgaW5mbyBzaG91bGQg
YmUgdXNlZAorICAgICAqIEBwYXJhbSB0cmlhbmdsZVByZWRpY2F0ZSBkZWZpbmVzIGFuIG9wdGlv
bmFsIHByZWRpY2F0ZSB1c2VkIHRvIHNlbGVjdCBmYWNlcyB3aGVuIGEgbWVzaCBpbnRlcnNlY3Rp
b24gaXMgZGV0ZWN0ZWQKKyAgICAgKiBAcmV0dXJucyBpbnRlcnNlY3Rpb24gaW5mbyBvciBudWxs
IGlmIG5vIGludGVyc2VjdGlvbgorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmludGVy
c2VjdHMgPSBmdW5jdGlvbiAocmF5LCBwb3NpdGlvbnMsIGluZGljZXMsIGZhc3RDaGVjaywgdHJp
YW5nbGVQcmVkaWNhdGUpIHsKKyAgICAgICAgdmFyIG1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlh
bCgpOworICAgICAgICBpZiAoIW1hdGVyaWFsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG1hdGVyaWFsLmZpbGxNb2RlKSB7CisgICAgICAg
ICAgICBjYXNlIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJDb25zdGFudHMiXS5NQVRFUklBTF9Qb2ludExpc3REcmF3TW9kZToKKyAgICAgICAgICAgIGNh
c2UgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbnN0
YW50cyJdLk1BVEVSSUFMX0xpbmVMaXN0RHJhd01vZGU6CisgICAgICAgICAgICBjYXNlIF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb25zdGFudHMiXS5N
QVRFUklBTF9MaW5lTG9vcERyYXdNb2RlOgorICAgICAgICAgICAgY2FzZSBfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxf
TGluZVN0cmlwRHJhd01vZGU6CisgICAgICAgICAgICBjYXNlIF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9Ucmlhbmds
ZUZhbkRyYXdNb2RlOgorICAgICAgICAgICAgY2FzZSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVHJpYW5nbGVTdHJp
cERyYXdNb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAg
ICAgIC8vIExpbmVNZXNoIGZpcnN0IGFzIGl0J3MgYWxzbyBhIE1lc2guLi4KKyAgICAgICAgaWYg
KHRoaXMuX21lc2guZ2V0Q2xhc3NOYW1lKCkgPT09ICJJbnN0YW5jZWRMaW5lc01lc2giIHx8IHRo
aXMuX21lc2guZ2V0Q2xhc3NOYW1lKCkgPT09ICJMaW5lc01lc2giKSB7CisgICAgICAgICAgICAv
LyBDaGVjayBpZiBtZXNoIGlzIHVuaW5kZXhlZAorICAgICAgICAgICAgaWYgKCFpbmRpY2VzLmxl
bmd0aCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcnNlY3RVbkluZGV4ZWRM
aW5lcyhyYXksIHBvc2l0aW9ucywgaW5kaWNlcywgdGhpcy5fbWVzaC5pbnRlcnNlY3Rpb25UaHJl
c2hvbGQsIGZhc3RDaGVjayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5faW50ZXJzZWN0TGluZXMocmF5LCBwb3NpdGlvbnMsIGluZGljZXMsIHRoaXMuX21lc2guaW50
ZXJzZWN0aW9uVGhyZXNob2xkLCBmYXN0Q2hlY2spOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbWVzaCBpcyB1bmluZGV4ZWQKKyAgICAgICAgICAg
IGlmICghaW5kaWNlcy5sZW5ndGggJiYgdGhpcy5fbWVzaC5fdW5JbmRleGVkKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVyc2VjdFVuSW5kZXhlZFRyaWFuZ2xlcyhyYXksIHBv
c2l0aW9ucywgaW5kaWNlcywgZmFzdENoZWNrLCB0cmlhbmdsZVByZWRpY2F0ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJzZWN0VHJpYW5nbGVzKHJheSwg
cG9zaXRpb25zLCBpbmRpY2VzLCBmYXN0Q2hlY2ssIHRyaWFuZ2xlUHJlZGljYXRlKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTdWJNZXNoLnByb3RvdHlwZS5f
aW50ZXJzZWN0TGluZXMgPSBmdW5jdGlvbiAocmF5LCBwb3NpdGlvbnMsIGluZGljZXMsIGludGVy
c2VjdGlvblRocmVzaG9sZCwgZmFzdENoZWNrKSB7CisgICAgICAgIHZhciBpbnRlcnNlY3RJbmZv
ID0gbnVsbDsKKyAgICAgICAgLy8gTGluZSB0ZXN0CisgICAgICAgIGZvciAodmFyIGluZGV4ID0g
dGhpcy5pbmRleFN0YXJ0OyBpbmRleCA8IHRoaXMuaW5kZXhTdGFydCArIHRoaXMuaW5kZXhDb3Vu
dDsgaW5kZXggKz0gMikgeworICAgICAgICAgICAgdmFyIHAwID0gcG9zaXRpb25zW2luZGljZXNb
aW5kZXhdXTsKKyAgICAgICAgICAgIHZhciBwMSA9IHBvc2l0aW9uc1tpbmRpY2VzW2luZGV4ICsg
MV1dOworICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHJheS5pbnRlcnNlY3Rpb25TZWdtZW50KHAw
LCBwMSwgaW50ZXJzZWN0aW9uVGhyZXNob2xkKTsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPCAw
KSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZmFzdENoZWNrIHx8ICFpbnRlcnNlY3RJbmZvIHx8IGxlbmd0aCA8IGludGVyc2VjdElu
Zm8uZGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICBpbnRlcnNlY3RJbmZvID0gbmV3IF9Db2xs
aXNpb25zX2ludGVyc2VjdGlvbkluZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siSW50
ZXJzZWN0aW9uSW5mbyJdKG51bGwsIG51bGwsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgaW50
ZXJzZWN0SW5mby5mYWNlSWQgPSBpbmRleCAvIDI7CisgICAgICAgICAgICAgICAgaWYgKGZhc3RD
aGVjaykgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludGVyc2VjdEluZm87Cisg
ICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLl9pbnRlcnNl
Y3RVbkluZGV4ZWRMaW5lcyA9IGZ1bmN0aW9uIChyYXksIHBvc2l0aW9ucywgaW5kaWNlcywgaW50
ZXJzZWN0aW9uVGhyZXNob2xkLCBmYXN0Q2hlY2spIHsKKyAgICAgICAgdmFyIGludGVyc2VjdElu
Zm8gPSBudWxsOworICAgICAgICAvLyBMaW5lIHRlc3QKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSB0aGlzLnZlcnRpY2VzU3RhcnQ7IGluZGV4IDwgdGhpcy52ZXJ0aWNlc1N0YXJ0ICsgdGhpcy52
ZXJ0aWNlc0NvdW50OyBpbmRleCArPSAyKSB7CisgICAgICAgICAgICB2YXIgcDAgPSBwb3NpdGlv
bnNbaW5kZXhdOworICAgICAgICAgICAgdmFyIHAxID0gcG9zaXRpb25zW2luZGV4ICsgMV07Cisg
ICAgICAgICAgICB2YXIgbGVuZ3RoID0gcmF5LmludGVyc2VjdGlvblNlZ21lbnQocDAsIHAxLCBp
bnRlcnNlY3Rpb25UaHJlc2hvbGQpOworICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApIHsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChm
YXN0Q2hlY2sgfHwgIWludGVyc2VjdEluZm8gfHwgbGVuZ3RoIDwgaW50ZXJzZWN0SW5mby5kaXN0
YW5jZSkgeworICAgICAgICAgICAgICAgIGludGVyc2VjdEluZm8gPSBuZXcgX0NvbGxpc2lvbnNf
aW50ZXJzZWN0aW9uSW5mb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcnNlY3Rp
b25JbmZvIl0obnVsbCwgbnVsbCwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpbnRlcnNlY3RJ
bmZvLmZhY2VJZCA9IGluZGV4IC8gMjsKKyAgICAgICAgICAgICAgICBpZiAoZmFzdENoZWNrKSB7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW50ZXJzZWN0SW5mbzsKKyAgICB9Owor
ICAgIC8qKiBAaGlkZGVuICovCisgICAgU3ViTWVzaC5wcm90b3R5cGUuX2ludGVyc2VjdFRyaWFu
Z2xlcyA9IGZ1bmN0aW9uIChyYXksIHBvc2l0aW9ucywgaW5kaWNlcywgZmFzdENoZWNrLCB0cmlh
bmdsZVByZWRpY2F0ZSkgeworICAgICAgICB2YXIgaW50ZXJzZWN0SW5mbyA9IG51bGw7CisgICAg
ICAgIC8vIFRyaWFuZ2xlcyB0ZXN0CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gdGhpcy5pbmRl
eFN0YXJ0OyBpbmRleCA8IHRoaXMuaW5kZXhTdGFydCArIHRoaXMuaW5kZXhDb3VudDsgaW5kZXgg
Kz0gMykgeworICAgICAgICAgICAgdmFyIHAwID0gcG9zaXRpb25zW2luZGljZXNbaW5kZXhdXTsK
KyAgICAgICAgICAgIHZhciBwMSA9IHBvc2l0aW9uc1tpbmRpY2VzW2luZGV4ICsgMV1dOworICAg
ICAgICAgICAgdmFyIHAyID0gcG9zaXRpb25zW2luZGljZXNbaW5kZXggKyAyXV07CisgICAgICAg
ICAgICBpZiAodHJpYW5nbGVQcmVkaWNhdGUgJiYgIXRyaWFuZ2xlUHJlZGljYXRlKHAwLCBwMSwg
cDIsIHJheSkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBjdXJyZW50SW50ZXJzZWN0SW5mbyA9IHJheS5pbnRlcnNlY3RzVHJpYW5n
bGUocDAsIHAxLCBwMik7CisgICAgICAgICAgICBpZiAoY3VycmVudEludGVyc2VjdEluZm8pIHsK
KyAgICAgICAgICAgICAgICBpZiAoY3VycmVudEludGVyc2VjdEluZm8uZGlzdGFuY2UgPCAwKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoZmFzdENoZWNrIHx8ICFpbnRlcnNlY3RJbmZvIHx8IGN1cnJlbnRJbnRl
cnNlY3RJbmZvLmRpc3RhbmNlIDwgaW50ZXJzZWN0SW5mby5kaXN0YW5jZSkgeworICAgICAgICAg
ICAgICAgICAgICBpbnRlcnNlY3RJbmZvID0gY3VycmVudEludGVyc2VjdEluZm87CisgICAgICAg
ICAgICAgICAgICAgIGludGVyc2VjdEluZm8uZmFjZUlkID0gaW5kZXggLyAzOworICAgICAgICAg
ICAgICAgICAgICBpZiAoZmFzdENoZWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW50ZXJzZWN0SW5mbzsKKyAgICB9OworICAg
IC8qKiBAaGlkZGVuICovCisgICAgU3ViTWVzaC5wcm90b3R5cGUuX2ludGVyc2VjdFVuSW5kZXhl
ZFRyaWFuZ2xlcyA9IGZ1bmN0aW9uIChyYXksIHBvc2l0aW9ucywgaW5kaWNlcywgZmFzdENoZWNr
LCB0cmlhbmdsZVByZWRpY2F0ZSkgeworICAgICAgICB2YXIgaW50ZXJzZWN0SW5mbyA9IG51bGw7
CisgICAgICAgIC8vIFRyaWFuZ2xlcyB0ZXN0CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gdGhp
cy52ZXJ0aWNlc1N0YXJ0OyBpbmRleCA8IHRoaXMudmVydGljZXNTdGFydCArIHRoaXMudmVydGlj
ZXNDb3VudDsgaW5kZXggKz0gMykgeworICAgICAgICAgICAgdmFyIHAwID0gcG9zaXRpb25zW2lu
ZGV4XTsKKyAgICAgICAgICAgIHZhciBwMSA9IHBvc2l0aW9uc1tpbmRleCArIDFdOworICAgICAg
ICAgICAgdmFyIHAyID0gcG9zaXRpb25zW2luZGV4ICsgMl07CisgICAgICAgICAgICBpZiAodHJp
YW5nbGVQcmVkaWNhdGUgJiYgIXRyaWFuZ2xlUHJlZGljYXRlKHAwLCBwMSwgcDIsIHJheSkpIHsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
ciBjdXJyZW50SW50ZXJzZWN0SW5mbyA9IHJheS5pbnRlcnNlY3RzVHJpYW5nbGUocDAsIHAxLCBw
Mik7CisgICAgICAgICAgICBpZiAoY3VycmVudEludGVyc2VjdEluZm8pIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudEludGVyc2VjdEluZm8uZGlzdGFuY2UgPCAwKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoZmFzdENoZWNrIHx8ICFpbnRlcnNlY3RJbmZvIHx8IGN1cnJlbnRJbnRlcnNlY3RJbmZvLmRp
c3RhbmNlIDwgaW50ZXJzZWN0SW5mby5kaXN0YW5jZSkgeworICAgICAgICAgICAgICAgICAgICBp
bnRlcnNlY3RJbmZvID0gY3VycmVudEludGVyc2VjdEluZm87CisgICAgICAgICAgICAgICAgICAg
IGludGVyc2VjdEluZm8uZmFjZUlkID0gaW5kZXggLyAzOworICAgICAgICAgICAgICAgICAgICBp
ZiAoZmFzdENoZWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gaW50ZXJzZWN0SW5mbzsKKyAgICB9OworICAgIC8qKiBAaGlkZGVu
ICovCisgICAgU3ViTWVzaC5wcm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICh0aGlzLl9saW5lc0luZGV4QnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9saW5l
c0luZGV4QnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgIH07CisgICAgLy8gQ2xvbmUKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHN1Ym1lc2ggZnJvbSB0aGUgcGFzc2VkIG1lc2gK
KyAgICAgKiBAcGFyYW0gbmV3TWVzaCBkZWZpbmVzIHRoZSBuZXcgaG9zdGluZyBtZXNoCisgICAg
ICogQHBhcmFtIG5ld1JlbmRlcmluZ01lc2ggZGVmaW5lcyBhbiBvcHRpb25hbCByZW5kZXJpbmcg
bWVzaAorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgc3VibWVzaAorICAgICAqLworICAgIFN1Yk1l
c2gucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5ld01lc2gsIG5ld1JlbmRlcmluZ01lc2gp
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBTdWJNZXNoKHRoaXMubWF0ZXJpYWxJbmRleCwg
dGhpcy52ZXJ0aWNlc1N0YXJ0LCB0aGlzLnZlcnRpY2VzQ291bnQsIHRoaXMuaW5kZXhTdGFydCwg
dGhpcy5pbmRleENvdW50LCBuZXdNZXNoLCBuZXdSZW5kZXJpbmdNZXNoLCBmYWxzZSk7CisgICAg
ICAgIGlmICghdGhpcy5Jc0dsb2JhbCkgeworICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9
IHRoaXMuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICBpZiAoIWJvdW5kaW5nSW5mbykg
eworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXN1bHQuX2JvdW5kaW5nSW5mbyA9IG5ldyBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQm91bmRpbmdJbmZvIl0oYm91bmRpbmdJbmZvLm1p
bmltdW0sIGJvdW5kaW5nSW5mby5tYXhpbXVtKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH07CisgICAgLy8gRGlzcG9zZQorICAgIC8qKgorICAgICAqIFJlbGVhc2Ug
YXNzb2NpYXRlZCByZXNvdXJjZXMKKyAgICAgKi8KKyAgICBTdWJNZXNoLnByb3RvdHlwZS5kaXNw
b3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fbGluZXNJbmRleEJ1ZmZlcikg
eworICAgICAgICAgICAgdGhpcy5fbWVzaC5nZXRTY2VuZSgpLmdldEVuZ2luZSgpLl9yZWxlYXNl
QnVmZmVyKHRoaXMuX2xpbmVzSW5kZXhCdWZmZXIpOworICAgICAgICAgICAgdGhpcy5fbGluZXNJ
bmRleEJ1ZmZlciA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVtb3ZlIGZyb20gbWVz
aAorICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9tZXNoLnN1Yk1lc2hlcy5pbmRleE9mKHRoaXMp
OworICAgICAgICB0aGlzLl9tZXNoLnN1Yk1lc2hlcy5zcGxpY2UoaW5kZXgsIDEpOworICAgIH07
CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRo
ZSBzdHJpbmcgIlN1Yk1lc2giLgorICAgICAqLworICAgIFN1Yk1lc2gucHJvdG90eXBlLmdldENs
YXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJTdWJNZXNoIjsKKyAgICB9
OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHN1Ym1lc2gg
ZnJvbSBpbmRpY2VzIGRhdGEKKyAgICAgKiBAcGFyYW0gbWF0ZXJpYWxJbmRleCB0aGUgaW5kZXgg
b2YgdGhlIG1haW4gbWVzaCBtYXRlcmlhbAorICAgICAqIEBwYXJhbSBzdGFydEluZGV4IHRoZSBp
bmRleCB3aGVyZSB0byBzdGFydCB0aGUgY29weSBpbiB0aGUgbWVzaCBpbmRpY2VzIGFycmF5Cisg
ICAgICogQHBhcmFtIGluZGV4Q291bnQgdGhlIG51bWJlciBvZiBpbmRpY2VzIHRvIGNvcHkgdGhl
biBmcm9tIHRoZSBzdGFydEluZGV4CisgICAgICogQHBhcmFtIG1lc2ggdGhlIG1haW4gbWVzaCB0
byBjcmVhdGUgdGhlIHN1Ym1lc2ggZnJvbQorICAgICAqIEBwYXJhbSByZW5kZXJpbmdNZXNoIHRo
ZSBvcHRpb25hbCByZW5kZXJpbmcgbWVzaAorICAgICAqIEByZXR1cm5zIGEgbmV3IHN1Ym1lc2gK
KyAgICAgKi8KKyAgICBTdWJNZXNoLkNyZWF0ZUZyb21JbmRpY2VzID0gZnVuY3Rpb24gKG1hdGVy
aWFsSW5kZXgsIHN0YXJ0SW5kZXgsIGluZGV4Q291bnQsIG1lc2gsIHJlbmRlcmluZ01lc2gpIHsK
KyAgICAgICAgdmFyIG1pblZlcnRleEluZGV4ID0gTnVtYmVyLk1BWF9WQUxVRTsKKyAgICAgICAg
dmFyIG1heFZlcnRleEluZGV4ID0gLU51bWJlci5NQVhfVkFMVUU7CisgICAgICAgIHZhciB3aGF0
V2lsbFJlbmRlciA9IChyZW5kZXJpbmdNZXNoIHx8IG1lc2gpOworICAgICAgICB2YXIgaW5kaWNl
cyA9IHdoYXRXaWxsUmVuZGVyLmdldEluZGljZXMoKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSBzdGFydEluZGV4OyBpbmRleCA8IHN0YXJ0SW5kZXggKyBpbmRleENvdW50OyBpbmRleCsrKSB7
CisgICAgICAgICAgICB2YXIgdmVydGV4SW5kZXggPSBpbmRpY2VzW2luZGV4XTsKKyAgICAgICAg
ICAgIGlmICh2ZXJ0ZXhJbmRleCA8IG1pblZlcnRleEluZGV4KSB7CisgICAgICAgICAgICAgICAg
bWluVmVydGV4SW5kZXggPSB2ZXJ0ZXhJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh2ZXJ0ZXhJbmRleCA+IG1heFZlcnRleEluZGV4KSB7CisgICAgICAgICAgICAgICAgbWF4
VmVydGV4SW5kZXggPSB2ZXJ0ZXhJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbmV3IFN1Yk1lc2gobWF0ZXJpYWxJbmRleCwgbWluVmVydGV4SW5kZXgsIG1h
eFZlcnRleEluZGV4IC0gbWluVmVydGV4SW5kZXggKyAxLCBzdGFydEluZGV4LCBpbmRleENvdW50
LCBtZXNoLCByZW5kZXJpbmdNZXNoKTsKKyAgICB9OworICAgIHJldHVybiBTdWJNZXNoOworfShC
YXNlU3ViTWVzaCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01lc2hlcy90cmFpbE1l
c2gudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01l
c2hlcy90cmFpbE1lc2gudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogVHJhaWxNZXNoICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlRyYWlsTWVzaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVHJhaWxNZXNo
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9k
dWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVz
aGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01lc2hlcy9tZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAi
Li9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNo
ZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL21lc2gu
dmVydGV4RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0ZXhEYXRhLnRzIik7CisKKworCisKKwor
LyoqCisgKiBDbGFzcyB1c2VkIHRvIGNyZWF0ZSBhIHRyYWlsIGZvbGxvd2luZyBhIG1lc2gKKyAq
LwordmFyIFRyYWlsTWVzaCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShUcmFpbE1l
c2gsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFt
IG5hbWUgVGhlIHZhbHVlIHVzZWQgYnkgc2NlbmUuZ2V0TWVzaEJ5TmFtZSgpIHRvIGRvIGEgbG9v
a3VwLgorICAgICAqIEBwYXJhbSBnZW5lcmF0b3IgVGhlIG1lc2ggdG8gZ2VuZXJhdGUgYSB0cmFp
bC4KKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRvIGFkZCB0aGlzIG1lc2ggdG8uCisg
ICAgICogQHBhcmFtIGRpYW1ldGVyIERpYW1ldGVyIG9mIHRyYWlsaW5nIG1lc2guIERlZmF1bHQg
aXMgMS4KKyAgICAgKiBAcGFyYW0gbGVuZ3RoIExlbmd0aCBvZiB0cmFpbGluZyBtZXNoLiBEZWZh
dWx0IGlzIDYwLgorICAgICAqIEBwYXJhbSBhdXRvU3RhcnQgQXV0b21hdGljYWxseSBzdGFydCB0
cmFpbGluZyBtZXNoLiBEZWZhdWx0IHRydWUuCisgICAgICovCisgICAgZnVuY3Rpb24gVHJhaWxN
ZXNoKG5hbWUsIGdlbmVyYXRvciwgc2NlbmUsIGRpYW1ldGVyLCBsZW5ndGgsIGF1dG9TdGFydCkg
eworICAgICAgICBpZiAoZGlhbWV0ZXIgPT09IHZvaWQgMCkgeyBkaWFtZXRlciA9IDE7IH0KKyAg
ICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7IGxlbmd0aCA9IDYwOyB9CisgICAgICAgIGlm
IChhdXRvU3RhcnQgPT09IHZvaWQgMCkgeyBhdXRvU3RhcnQgPSB0cnVlOyB9CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIHNjZW5lKSB8fCB0aGlzOworICAgICAg
ICBfdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHNDb3VudCA9IDQ7CisgICAgICAgIF90aGlzLl9y
dW5uaW5nID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9hdXRvU3RhcnQgPSBhdXRvU3RhcnQ7Cisg
ICAgICAgIF90aGlzLl9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgICAgIF90aGlzLl9kaWFt
ZXRlciA9IGRpYW1ldGVyOworICAgICAgICBfdGhpcy5fbGVuZ3RoID0gbGVuZ3RoOworICAgICAg
ICBfdGhpcy5fc2VjdGlvblZlY3RvcnMgPSBbXTsKKyAgICAgICAgX3RoaXMuX3NlY3Rpb25Ob3Jt
YWxWZWN0b3JzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3RoaXMuX3NlY3Rp
b25Qb2x5Z29uUG9pbnRzQ291bnQ7IGkrKykgeworICAgICAgICAgICAgX3RoaXMuX3NlY3Rpb25W
ZWN0b3JzW2ldID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICBfdGhpcy5fc2VjdGlvbk5vcm1hbFZl
Y3RvcnNbaV0gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgfQorICAgICAgICBfdGhpcy5fY3JlYXRlTWVz
aCgpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqICJUcmFp
bE1lc2giCisgICAgICogQHJldHVybnMgIlRyYWlsTWVzaCIKKyAgICAgKi8KKyAgICBUcmFpbE1l
c2gucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
ICJUcmFpbE1lc2giOworICAgIH07CisgICAgVHJhaWxNZXNoLnByb3RvdHlwZS5fY3JlYXRlTWVz
aCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGRhdGEgPSBuZXcgX01lc2hlc19tZXNoX3Zl
cnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVydGV4RGF0YSJdKCk7Cisg
ICAgICAgIHZhciBwb3NpdGlvbnMgPSBbXTsKKyAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTsKKyAg
ICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAgICAgICAgdmFyIG1lc2hDZW50ZXIgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlplcm8o
KTsKKyAgICAgICAgaWYgKHRoaXMuX2dlbmVyYXRvci5fYm91bmRpbmdJbmZvKSB7CisgICAgICAg
ICAgICBtZXNoQ2VudGVyID0gdGhpcy5fZ2VuZXJhdG9yLl9ib3VuZGluZ0luZm8uYm91bmRpbmdC
b3guY2VudGVyV29ybGQ7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGFscGhhID0gMiAqIE1hdGgu
UEkgLyB0aGlzLl9zZWN0aW9uUG9seWdvblBvaW50c0NvdW50OworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25Qb2x5Z29uUG9pbnRzQ291bnQ7IGkrKykgeworICAgICAg
ICAgICAgcG9zaXRpb25zLnB1c2gobWVzaENlbnRlci54ICsgTWF0aC5jb3MoaSAqIGFscGhhKSAq
IHRoaXMuX2RpYW1ldGVyLCBtZXNoQ2VudGVyLnkgKyBNYXRoLnNpbihpICogYWxwaGEpICogdGhp
cy5fZGlhbWV0ZXIsIG1lc2hDZW50ZXIueik7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIg
aSA9IDE7IGkgPD0gdGhpcy5fbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIGog
PSAwOyBqIDwgdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHNDb3VudDsgaisrKSB7CisgICAgICAg
ICAgICAgICAgcG9zaXRpb25zLnB1c2gobWVzaENlbnRlci54ICsgTWF0aC5jb3MoaiAqIGFscGhh
KSAqIHRoaXMuX2RpYW1ldGVyLCBtZXNoQ2VudGVyLnkgKyBNYXRoLnNpbihqICogYWxwaGEpICog
dGhpcy5fZGlhbWV0ZXIsIG1lc2hDZW50ZXIueik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YXIgbCA9IHBvc2l0aW9ucy5sZW5ndGggLyAzIC0gMiAqIHRoaXMuX3NlY3Rpb25Qb2x5Z29u
UG9pbnRzQ291bnQ7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3NlY3Rp
b25Qb2x5Z29uUG9pbnRzQ291bnQgLSAxOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpbmRpY2Vz
LnB1c2gobCArIGosIGwgKyBqICsgdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHNDb3VudCwgbCAr
IGogKyB0aGlzLl9zZWN0aW9uUG9seWdvblBvaW50c0NvdW50ICsgMSk7CisgICAgICAgICAgICAg
ICAgaW5kaWNlcy5wdXNoKGwgKyBqLCBsICsgaiArIHRoaXMuX3NlY3Rpb25Qb2x5Z29uUG9pbnRz
Q291bnQgKyAxLCBsICsgaiArIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kaWNl
cy5wdXNoKGwgKyB0aGlzLl9zZWN0aW9uUG9seWdvblBvaW50c0NvdW50IC0gMSwgbCArIHRoaXMu
X3NlY3Rpb25Qb2x5Z29uUG9pbnRzQ291bnQgLSAxICsgdGhpcy5fc2VjdGlvblBvbHlnb25Qb2lu
dHNDb3VudCwgbCArIHRoaXMuX3NlY3Rpb25Qb2x5Z29uUG9pbnRzQ291bnQpOworICAgICAgICAg
ICAgaW5kaWNlcy5wdXNoKGwgKyB0aGlzLl9zZWN0aW9uUG9seWdvblBvaW50c0NvdW50IC0gMSwg
bCArIHRoaXMuX3NlY3Rpb25Qb2x5Z29uUG9pbnRzQ291bnQsIGwpOworICAgICAgICB9CisgICAg
ICAgIF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlZlcnRleERhdGEiXS5Db21wdXRlTm9ybWFscyhwb3NpdGlvbnMsIGluZGljZXMsIG5vcm1hbHMp
OworICAgICAgICBkYXRhLnBvc2l0aW9ucyA9IHBvc2l0aW9uczsKKyAgICAgICAgZGF0YS5ub3Jt
YWxzID0gbm9ybWFsczsKKyAgICAgICAgZGF0YS5pbmRpY2VzID0gaW5kaWNlczsKKyAgICAgICAg
ZGF0YS5hcHBseVRvTWVzaCh0aGlzLCB0cnVlKTsKKyAgICAgICAgaWYgKHRoaXMuX2F1dG9TdGFy
dCkgeworICAgICAgICAgICAgdGhpcy5zdGFydCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTdGFydCB0cmFpbGluZyBtZXNoLgorICAgICAqLworICAgIFRyYWlsTWVzaC5w
cm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGlmICghdGhpcy5fcnVubmluZykgeworICAgICAgICAgICAgdGhpcy5fcnVubmlu
ZyA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9iZWZvcmVSZW5kZXJPYnNlcnZlciA9IHRoaXMu
Z2V0U2NlbmUoKS5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgICAgICBfdGhpcy51cGRhdGUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTdG9wIHRyYWlsaW5nIG1lc2guCisgICAgICovCisg
ICAgVHJhaWxNZXNoLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
dGhpcy5fYmVmb3JlUmVuZGVyT2JzZXJ2ZXIgJiYgdGhpcy5fcnVubmluZykgeworICAgICAgICAg
ICAgdGhpcy5fcnVubmluZyA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5nZXRTY2VuZSgpLm9u
QmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fYmVmb3JlUmVuZGVyT2JzZXJ2ZXIp
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdHJhaWxpbmcgbWVz
aCBnZW9tZXRyeS4KKyAgICAgKi8KKyAgICBUcmFpbE1lc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMuZ2V0VmVydGljZXNEYXRh
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleEJ1ZmZl
ciJdLlBvc2l0aW9uS2luZCk7CisgICAgICAgIHZhciBub3JtYWxzID0gdGhpcy5nZXRWZXJ0aWNl
c0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
QnVmZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAgIHZhciB3bSA9IHRoaXMuX2dlbmVyYXRvci5n
ZXRXb3JsZE1hdHJpeCgpOworICAgICAgICBpZiAocG9zaXRpb25zICYmIG5vcm1hbHMpIHsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAzICogdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHNDb3Vu
dDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHBvc2l0aW9u
c1tpIC0gMyAqIHRoaXMuX3NlY3Rpb25Qb2x5Z29uUG9pbnRzQ291bnRdID0gcG9zaXRpb25zW2ld
IC0gbm9ybWFsc1tpXSAvIHRoaXMuX2xlbmd0aCAqIHRoaXMuX2RpYW1ldGVyOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDMgKiB0aGlzLl9zZWN0aW9uUG9seWdvblBv
aW50c0NvdW50OyBpIDwgbm9ybWFscy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIG5v
cm1hbHNbaSAtIDMgKiB0aGlzLl9zZWN0aW9uUG9seWdvblBvaW50c0NvdW50XSA9IG5vcm1hbHNb
aV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbCA9IHBvc2l0aW9ucy5sZW5ndGgg
LSAzICogdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHNDb3VudDsKKyAgICAgICAgICAgIHZhciBh
bHBoYSA9IDIgKiBNYXRoLlBJIC8gdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHNDb3VudDsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvblBvbHlnb25Qb2ludHND
b3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2VjdGlvblZlY3RvcnNbaV0uY29w
eUZyb21GbG9hdHMoTWF0aC5jb3MoaSAqIGFscGhhKSAqIHRoaXMuX2RpYW1ldGVyLCBNYXRoLnNp
bihpICogYWxwaGEpICogdGhpcy5fZGlhbWV0ZXIsIDApOworICAgICAgICAgICAgICAgIHRoaXMu
X3NlY3Rpb25Ob3JtYWxWZWN0b3JzW2ldLmNvcHlGcm9tRmxvYXRzKE1hdGguY29zKGkgKiBhbHBo
YSksIE1hdGguc2luKGkgKiBhbHBoYSksIDApOworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uVHJhbnNmb3Jt
Q29vcmRpbmF0ZXNUb1JlZih0aGlzLl9zZWN0aW9uVmVjdG9yc1tpXSwgd20sIHRoaXMuX3NlY3Rp
b25WZWN0b3JzW2ldKTsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKHRo
aXMuX3NlY3Rpb25Ob3JtYWxWZWN0b3JzW2ldLCB3bSwgdGhpcy5fc2VjdGlvbk5vcm1hbFZlY3Rv
cnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLl9zZWN0aW9uUG9seWdvblBvaW50c0NvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBw
b3NpdGlvbnNbbCArIDMgKiBpXSA9IHRoaXMuX3NlY3Rpb25WZWN0b3JzW2ldLng7CisgICAgICAg
ICAgICAgICAgcG9zaXRpb25zW2wgKyAzICogaSArIDFdID0gdGhpcy5fc2VjdGlvblZlY3RvcnNb
aV0ueTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbnNbbCArIDMgKiBpICsgMl0gPSB0aGlzLl9z
ZWN0aW9uVmVjdG9yc1tpXS56OworICAgICAgICAgICAgICAgIG5vcm1hbHNbbCArIDMgKiBpXSA9
IHRoaXMuX3NlY3Rpb25Ob3JtYWxWZWN0b3JzW2ldLng7CisgICAgICAgICAgICAgICAgbm9ybWFs
c1tsICsgMyAqIGkgKyAxXSA9IHRoaXMuX3NlY3Rpb25Ob3JtYWxWZWN0b3JzW2ldLnk7CisgICAg
ICAgICAgICAgICAgbm9ybWFsc1tsICsgMyAqIGkgKyAyXSA9IHRoaXMuX3NlY3Rpb25Ob3JtYWxW
ZWN0b3JzW2ldLno7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnVwZGF0ZVZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0
ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHBvc2l0aW9ucywgdHJ1ZSwgZmFsc2UpOworICAgICAg
ICAgICAgdGhpcy51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCwgbm9ybWFscywgdHJ1
ZSwgZmFsc2UpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEg
bmV3IFRyYWlsTWVzaCBvYmplY3QuCisgICAgICogQHBhcmFtIG5hbWUgaXMgYSBzdHJpbmcsIHRo
ZSBuYW1lIGdpdmVuIHRvIHRoZSBuZXcgbWVzaAorICAgICAqIEBwYXJhbSBuZXdHZW5lcmF0b3Ig
dXNlIG5ldyBnZW5lcmF0b3Igb2JqZWN0IGZvciBjbG9uZWQgdHJhaWwgbWVzaAorICAgICAqIEBy
ZXR1cm5zIGEgbmV3IG1lc2gKKyAgICAgKi8KKyAgICBUcmFpbE1lc2gucHJvdG90eXBlLmNsb25l
ID0gZnVuY3Rpb24gKG5hbWUsIG5ld0dlbmVyYXRvcikgeworICAgICAgICBpZiAobmFtZSA9PT0g
dm9pZCAwKSB7IG5hbWUgPSAiIjsgfQorICAgICAgICByZXR1cm4gbmV3IFRyYWlsTWVzaChuYW1l
LCAobmV3R2VuZXJhdG9yID09PSB1bmRlZmluZWQgPyB0aGlzLl9nZW5lcmF0b3IgOiBuZXdHZW5l
cmF0b3IpLCB0aGlzLmdldFNjZW5lKCksIHRoaXMuX2RpYW1ldGVyLCB0aGlzLl9sZW5ndGgsIHRo
aXMuX2F1dG9TdGFydCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoaXMg
dHJhaWwgbWVzaAorICAgICAqIEBwYXJhbSBzZXJpYWxpemF0aW9uT2JqZWN0IG9iamVjdCB0byB3
cml0ZSBzZXJpYWxpemF0aW9uIHRvCisgICAgICovCisgICAgVHJhaWxNZXNoLnByb3RvdHlwZS5z
ZXJpYWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlvbk9iamVjdCkgeworICAgICAgICBfc3Vw
ZXIucHJvdG90eXBlLnNlcmlhbGl6ZS5jYWxsKHRoaXMsIHNlcmlhbGl6YXRpb25PYmplY3QpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2VzIGEgc2VyaWFsaXplZCB0cmFpbCBtZXNoCisg
ICAgICogQHBhcmFtIHBhcnNlZE1lc2ggdGhlIHNlcmlhbGl6ZWQgbWVzaAorICAgICAqIEBwYXJh
bSBzY2VuZSB0aGUgc2NlbmUgdG8gY3JlYXRlIHRoZSB0cmFpbCBtZXNoIGluCisgICAgICogQHJl
dHVybnMgdGhlIGNyZWF0ZWQgdHJhaWwgbWVzaAorICAgICAqLworICAgIFRyYWlsTWVzaC5QYXJz
ZSA9IGZ1bmN0aW9uIChwYXJzZWRNZXNoLCBzY2VuZSkgeworICAgICAgICByZXR1cm4gbmV3IFRy
YWlsTWVzaChwYXJzZWRNZXNoLm5hbWUsIHBhcnNlZE1lc2guX2dlbmVyYXRvciwgc2NlbmUsIHBh
cnNlZE1lc2guX2RpYW1ldGVyLCBwYXJzZWRNZXNoLl9sZW5ndGgsIHBhcnNlZE1lc2guX2F1dG9T
dGFydCk7CisgICAgfTsKKyAgICByZXR1cm4gVHJhaWxNZXNoOworfShfTWVzaGVzX21lc2hfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWVzaCJdKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWVzaGVzL3RyYW5zZm9ybU5vZGUudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NZXNoZXMvdHJhbnNmb3JtTm9kZS50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogVHJhbnNmb3JtTm9kZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJUcmFuc2Zvcm1Ob2RlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUcmFuc2Zvcm1Ob2RlOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90
c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICov
ICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3Iu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9kZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZSAqLyAiLi9ub2RlLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0
aC5heGlzICovICIuL01hdGhzL21hdGguYXhpcy50cyIpOworCisKKworCisKKworLyoqCisgKiBB
IFRyYW5zZm9ybU5vZGUgaXMgYW4gb2JqZWN0IHRoYXQgaXMgbm90IHJlbmRlcmVkIGJ1dCBjYW4g
YmUgdXNlZCBhcyBhIGNlbnRlciBvZiB0cmFuc2Zvcm1hdGlvbi4gVGhpcyBjYW4gZGVjcmVhc2Ug
bWVtb3J5IHVzYWdlIGFuZCBpbmNyZWFzZSByZW5kZXJpbmcgc3BlZWQgY29tcGFyZWQgdG8gdXNp
bmcgYW4gZW1wdHkgbWVzaCBhcyBhIHBhcmVudCBhbmQgaXMgbGVzcyBjb21wbGljYXRlZCB0aGFu
IHVzaW5nIGEgcGl2b3QgbWF0cml4LgorICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by90cmFuc2Zvcm1ub2RlCisgKi8KK3ZhciBUcmFuc2Zvcm1Ob2RlID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZXh0ZW5kcyJdKFRyYW5zZm9ybU5vZGUsIF9zdXBlcik7CisgICAgZnVuY3Rp
b24gVHJhbnNmb3JtTm9kZShuYW1lLCBzY2VuZSwgaXNQdXJlKSB7CisgICAgICAgIGlmIChzY2Vu
ZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICBpZiAoaXNQdXJlID09PSB2
b2lkIDApIHsgaXNQdXJlID0gdHJ1ZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2Fs
bCh0aGlzLCBuYW1lLCBzY2VuZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuX2ZvcndhcmQgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXSgwLCAwLCAxKTsKKyAgICAgICAgX3RoaXMuX2ZvcndhcmRJbnZlcnRlZCA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAs
IDAsIC0xKTsKKyAgICAgICAgX3RoaXMuX3VwID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oMCwgMSwgMCk7CisgICAgICAgIF90
aGlzLl9yaWdodCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdKDEsIDAsIDApOworICAgICAgICBfdGhpcy5fcmlnaHRJbnZlcnRl
ZCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVjdG9yMyJdKC0xLCAwLCAwKTsKKyAgICAgICAgLy8gUHJvcGVydGllcworICAgICAgICBfdGhp
cy5fcG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgX3RoaXMuX3JvdGF0aW9uID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIF90aGlzLl9yb3RhdGlvblF1YXRlcm5pb24gPSBudWxsOworICAgICAgICBf
dGhpcy5fc2NhbGluZyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZWN0b3IzIl0uT25lKCk7CisgICAgICAgIF90aGlzLl9pc0RpcnR5ID0gZmFsc2U7
CisgICAgICAgIF90aGlzLl90cmFuc2Zvcm1Ub0JvbmVSZWZlcmFsID0gbnVsbDsKKyAgICAgICAg
X3RoaXMuX2lzQWJzb2x1dGVTeW5jZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2JpbGxib2Fy
ZE1vZGUgPSBUcmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1PREVfTk9ORTsKKyAgICAgICAgX3RoaXMu
X3ByZXNlcnZlUGFyZW50Um90YXRpb25Gb3JCaWxsYm9hcmQgPSBmYWxzZTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIE11bHRpcGxpY2F0aW9uIGZhY3RvciBvbiBzY2FsZSB4L3kveiB3aGVuIGNv
bXB1dGluZyB0aGUgd29ybGQgbWF0cml4LiBFZy4gZm9yIGEgMXgxeDEgY3ViZSBzZXR0aW5nIHRo
aXMgdG8gMiB3aWxsIG1ha2UgaXQgYSAyeDJ4MiBjdWJlCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5zY2FsaW5nRGV0ZXJtaW5hbnQgPSAxOworICAgICAgICBfdGhpcy5faW5maW5pdGVEaXN0
YW5jZSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9v
bGVhbiBpbmRpY2F0aW5nIHRoYXQgbm9uIHVuaWZvcm0gc2NhbGluZyAod2hlbiBhdCBsZWFzdCBv
bmUgY29tcG9uZW50IGlzIGRpZmZlcmVudCBmcm9tIG90aGVycykgc2hvdWxkIGJlIGlnbm9yZWQu
CisgICAgICAgICAqIEJ5IGRlZmF1bHQgdGhlIHN5c3RlbSB3aWxsIHVwZGF0ZSBub3JtYWxzIHRv
IGNvbXBlbnNhdGUKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmlnbm9yZU5vblVuaWZvcm1T
Y2FsaW5nID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBi
b29sZWFuIGluZGljYXRpbmcgdGhhdCBldmVuIGlmIHJvdGF0aW9uUXVhdGVybmlvbiBpcyBkZWZp
bmVkLCB5b3UgY2FuIGtlZXAgdXBkYXRpbmcgcm90YXRpb24gcHJvcGVydHkgYW5kIEJhYnlsb24u
anMgd2lsbCBqdXN0IG1peCBib3RoCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5yZUludGVn
cmF0ZVJvdGF0aW9uSW50b1JvdGF0aW9uUXVhdGVybmlvbiA9IGZhbHNlOworICAgICAgICAvLyBD
YWNoZQorICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhpcy5fcG9zZU1hdHJpeCA9
IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9sb2NhbE1hdHJp
eCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRy
aXgiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl91c2VQaXZvdE1hdHJpeCA9IGZhbHNlOworICAg
ICAgICBfdGhpcy5fYWJzb2x1dGVQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBfdGhpcy5f
YWJzb2x1dGVTY2FsaW5nID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9hYnNvbHV0ZVJvdGF0
aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJRdWF0ZXJuaW9uIl0uSWRlbnRpdHkoKTsKKyAgICAgICAgX3RoaXMuX3Bpdm90TWF0
cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1h
dHJpeCJdLklkZW50aXR5KCk7CisgICAgICAgIF90aGlzLl9wb3N0TXVsdGlwbHlQaXZvdE1hdHJp
eCA9IGZhbHNlOworICAgICAgICBfdGhpcy5faXNXb3JsZE1hdHJpeEZyb3plbiA9IGZhbHNlOwor
ICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhpcy5faW5kZXhJblNjZW5lVHJhbnNm
b3JtTm9kZXNBcnJheSA9IC0xOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0cmln
Z2VyZWQgYWZ0ZXIgdGhlIHdvcmxkIG1hdHJpeCBpcyB1cGRhdGVkCisgICAgICAgICovCisgICAg
ICAgIF90aGlzLm9uQWZ0ZXJXb3JsZE1hdHJpeFVwZGF0ZU9ic2VydmFibGUgPSBuZXcgX01pc2Nf
b2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsK
KyAgICAgICAgX3RoaXMuX25vblVuaWZvcm1TY2FsaW5nID0gZmFsc2U7CisgICAgICAgIGlmIChp
c1B1cmUpIHsKKyAgICAgICAgICAgIF90aGlzLmdldFNjZW5lKCkuYWRkVHJhbnNmb3JtTm9kZShf
dGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJiaWxsYm9hcmRNb2Rl
IiwgeworICAgICAgICAvKioKKyAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGJpbGxib2FyZCBt
b2RlLiBEZWZhdWx0IGlzIDAuCisgICAgICAgICoKKyAgICAgICAgKiB8IFZhbHVlIHwgVHlwZSB8
IERlc2NyaXB0aW9uIHwKKyAgICAgICAgKiB8IC0tLSB8IC0tLSB8IC0tLSB8CisgICAgICAgICog
fCAwIHwgQklMTEJPQVJETU9ERV9OT05FIHwgIHwKKyAgICAgICAgKiB8IDEgfCBCSUxMQk9BUkRN
T0RFX1ggfCAgfAorICAgICAgICAqIHwgMiB8IEJJTExCT0FSRE1PREVfWSB8ICB8CisgICAgICAg
ICogfCA0IHwgQklMTEJPQVJETU9ERV9aIHwgIHwKKyAgICAgICAgKiB8IDcgfCBCSUxMQk9BUkRN
T0RFX0FMTCB8ICB8CisgICAgICAgICoKKyAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmlsbGJvYXJkTW9kZTsKKyAgICAgICAg
fSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9iaWxsYm9hcmRNb2RlID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2JpbGxib2FyZE1vZGUgPSB2YWx1ZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybU5vZGUu
cHJvdG90eXBlLCAicHJlc2VydmVQYXJlbnRSb3RhdGlvbkZvckJpbGxib2FyZCIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0
IHBhcmVudCByb3RhdGlvbiBzaG91bGQgYmUgcHJlc2VydmVkIHdoZW4gdXNpbmcgYmlsbGJvYXJk
cy4KKyAgICAgICAgICogVGhpcyBjb3VsZCBiZSB1c2VmdWwgZm9yIGdsVEYgb2JqZWN0cyB3aGVy
ZSBwYXJlbnQgcm90YXRpb24gaGVscHMgY29udmVydGluZyBmcm9tIHJpZ2h0IGhhbmRlZCB0byBs
ZWZ0IGhhbmRlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fcHJlc2VydmVQYXJlbnRSb3RhdGlvbkZvckJpbGxib2FyZDsK
KyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IGlmICh2YWx1ZSA9PT0gdGhpcy5fcHJlc2VydmVQYXJlbnRSb3RhdGlvbkZvckJpbGxib2FyZCkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX3ByZXNlcnZlUGFyZW50Um90YXRpb25Gb3JCaWxsYm9hcmQgPSB2YWx1ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybU5vZGUucHJvdG90
eXBlLCAiaW5maW5pdGVEaXN0YW5jZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
b3Igc2V0cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIG9iamVjdCB0byBtYXgsIG9mdGVuIHVzZWQgYnkg
c2t5Ym94CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9pbmZpbml0ZURpc3RhbmNlOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2luZmluaXRlRGlz
dGFuY2UgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5faW5maW5pdGVEaXN0YW5jZSA9IHZhbHVlOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBu
YW1lIG9mIHRoZSBjbGFzcworICAgICAqIEByZXR1cm5zICJUcmFuc2Zvcm1Ob2RlIiBzdHJpbmcK
KyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiVHJhbnNmb3JtTm9kZSI7CisgICAgfTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJwb3NpdGlvbiIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAgKiBHZXRzIG9yIHNldCB0aGUgbm9kZSBwb3NpdGlv
biAoZGVmYXVsdCBpcyAoMC4wLCAwLjAsIDAuMCkpCisgICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247CisgICAg
ICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Bvc2l0aW9uKSB7CisgICAgICAgICAg
ICB0aGlzLl9wb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworICAgICAgICAgICAgdGhpcy5faXNEaXJ0
eSA9IHRydWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShU
cmFuc2Zvcm1Ob2RlLnByb3RvdHlwZSwgInJvdGF0aW9uIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcm90YXRpb24gcHJvcGVydHkgOiBhIFZlY3RvcjMgZGVm
aW5pbmcgdGhlIHJvdGF0aW9uIHZhbHVlIGluIHJhZGlhbnMgYXJvdW5kIGVhY2ggbG9jYWwgYXhp
cyBYLCBZLCBaICAoZGVmYXVsdCBpcyAoMC4wLCAwLjAsIDAuMCkpLgorICAgICAgICAgICogSWYg
cm90YXRpb24gcXVhdGVybmlvbiBpcyBzZXQsIHRoaXMgVmVjdG9yMyB3aWxsIGJlIGlnbm9yZWQg
YW5kIGNvcHkgZnJvbSB0aGUgcXVhdGVybmlvbgorICAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JvdGF0aW9uOworICAgICAg
ICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdSb3RhdGlvbikgeworICAgICAgICAgICAg
dGhpcy5fcm90YXRpb24gPSBuZXdSb3RhdGlvbjsKKyAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9u
UXVhdGVybmlvbiA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybU5vZGUu
cHJvdG90eXBlLCAic2NhbGluZyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Ig
c2V0cyB0aGUgc2NhbGluZyBwcm9wZXJ0eSA6IGEgVmVjdG9yMyBkZWZpbmluZyB0aGUgbm9kZSBz
Y2FsaW5nIGFsb25nIGVhY2ggbG9jYWwgYXhpcyBYLCBZLCBaIChkZWZhdWx0IGlzICgwLjAsIDAu
MCwgMC4wKSkuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zY2FsaW5nOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uIChuZXdTY2FsaW5nKSB7CisgICAgICAgICAgICB0aGlzLl9zY2FsaW5nID0gbmV3U2Nh
bGluZzsKKyAgICAgICAgICAgIHRoaXMuX2lzRGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJy
b3RhdGlvblF1YXRlcm5pb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNl
dHMgdGhlIHJvdGF0aW9uIFF1YXRlcm5pb24gcHJvcGVydHkgOiB0aGlzIGEgUXVhdGVybmlvbiBv
YmplY3QgZGVmaW5pbmcgdGhlIG5vZGUgcm90YXRpb24gYnkgdXNpbmcgYSB1bml0IHF1YXRlcm5p
b24gKHVuZGVmaW5lZCBieSBkZWZhdWx0LCBidXQgY2FuIGJlIG51bGwpLgorICAgICAgICAgKiBJ
ZiBzZXQsIG9ubHkgdGhlIHJvdGF0aW9uUXVhdGVybmlvbiBpcyB0aGVuIHVzZWQgdG8gY29tcHV0
ZSB0aGUgbm9kZSByb3RhdGlvbiAoaWUuIG5vZGUucm90YXRpb24gd2lsbCBiZSBpZ25vcmVkKQor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uIChxdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICB0aGlzLl9yb3RhdGlvblF1YXRlcm5p
b24gPSBxdWF0ZXJuaW9uOworICAgICAgICAgICAgLy9yZXNldCB0aGUgcm90YXRpb24gdmVjdG9y
LgorICAgICAgICAgICAgaWYgKHF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9y
b3RhdGlvbi5zZXRBbGwoMC4wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2lz
RGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJmb3J3YXJkIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogVGhlIGZvcndhcmQgZGlyZWN0aW9uIG9mIHRoYXQgdHJhbnNmb3JtIGluIHdvcmxk
IHNwYWNlLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlZlY3RvcjMiXS5Ob3JtYWxpemUoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwodGhpcy5nZXRTY2VuZSgp
LnVzZVJpZ2h0SGFuZGVkU3lzdGVtID8gdGhpcy5fZm9yd2FyZEludmVydGVkIDogdGhpcy5fZm9y
d2FyZCwgdGhpcy5nZXRXb3JsZE1hdHJpeCgpKSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZSwgInVwIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogVGhlIHVwIGRpcmVjdGlvbiBvZiB0aGF0IHRyYW5zZm9ybSBp
biB3b3JsZCBzcGFjZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZWN0b3IzIl0uTm9ybWFsaXplKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsKHRoaXMuX3Vw
LCB0aGlzLmdldFdvcmxkTWF0cml4KCkpKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLCAicmlnaHQiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBUaGUgcmlnaHQgZGlyZWN0aW9uIG9mIHRoYXQgdHJhbnNmb3Jt
IGluIHdvcmxkIHNwYWNlLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlY3RvcjMiXS5Ob3JtYWxpemUoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwodGhpcy5n
ZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVtID8gdGhpcy5fcmlnaHRJbnZlcnRlZCA6IHRo
aXMuX3JpZ2h0LCB0aGlzLmdldFdvcmxkTWF0cml4KCkpKTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgLyoqCisgICAgICogQ29waWVzIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIE1hdHJpeCBpbnRvIHRo
ZSBtZXNoIFBvc2UgbWF0cml4LgorICAgICAqIEBwYXJhbSBtYXRyaXggdGhlIG1hdHJpeCB0byBj
b3B5IHRoZSBwb3NlIGZyb20KKyAgICAgKiBAcmV0dXJucyB0aGlzIFRyYW5zZm9ybU5vZGUuCisg
ICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUudXBkYXRlUG9zZU1hdHJpeCA9IGZ1
bmN0aW9uIChtYXRyaXgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9wb3NlTWF0cml4KSB7CisgICAg
ICAgICAgICB0aGlzLl9wb3NlTWF0cml4ID0gbWF0cml4LmNsb25lKCk7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9wb3NlTWF0cml4LmNvcHlGcm9t
KG1hdHJpeCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICog
UmV0dXJucyB0aGUgbWVzaCBQb3NlIG1hdHJpeC4KKyAgICAgKiBAcmV0dXJucyB0aGUgcG9zZSBt
YXRyaXgKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5nZXRQb3NlTWF0cml4
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX3Bvc2VNYXRyaXgpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3Bvc2VNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdGhpcy5fcG9zZU1hdHJpeDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUuX2lzU3luY2hyb25pemVkID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTsKKyAgICAgICAgaWYgKHRoaXMuYmls
bGJvYXJkTW9kZSAhPT0gY2FjaGUuYmlsbGJvYXJkTW9kZSB8fCB0aGlzLmJpbGxib2FyZE1vZGUg
IT09IFRyYW5zZm9ybU5vZGUuQklMTEJPQVJETU9ERV9OT05FKSB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhY2hlLnBpdm90TWF0cml4VXBkYXRl
ZCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLmluZmluaXRlRGlzdGFuY2UpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWNhY2hlLnBvc2l0aW9uLmVxdWFscyh0aGlzLl9wb3NpdGlvbikp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy5fcm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICBpZiAoIWNhY2hlLnJvdGF0aW9u
UXVhdGVybmlvbi5lcXVhbHModGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uKSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmICghY2FjaGUucm90YXRpb24uZXF1YWxzKHRoaXMuX3JvdGF0aW9uKSkgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghY2FjaGUuc2NhbGlu
Zy5lcXVhbHModGhpcy5fc2NhbGluZykpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICov
CisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUuX2luaXRDYWNoZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5faW5pdENhY2hlLmNhbGwodGhpcyk7CisgICAgICAg
IHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlOworICAgICAgICBjYWNoZS5sb2NhbE1hdHJpeFVwZGF0
ZWQgPSBmYWxzZTsKKyAgICAgICAgY2FjaGUucG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAg
Y2FjaGUuc2NhbGluZyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBjYWNoZS5yb3RhdGlvbiA9IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVy
bygpOworICAgICAgICBjYWNoZS5yb3RhdGlvblF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXSgwLCAwLCAw
LCAwKTsKKyAgICAgICAgY2FjaGUuYmlsbGJvYXJkTW9kZSA9IC0xOworICAgICAgICBjYWNoZS5p
bmZpbml0ZURpc3RhbmNlID0gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAqIEZsYWcgdGhl
IHRyYW5zZm9ybSBub2RlIGFzIGRpcnR5IChGb3JjaW5nIGl0IHRvIHVwZGF0ZSBldmVyeXRoaW5n
KQorICAgICogQHBhcmFtIHByb3BlcnR5IGlmIHNldCB0byAicm90YXRpb24iIHRoZSBvYmplY3Rz
IHJvdGF0aW9uUXVhdGVybmlvbiB3aWxsIGJlIHNldCB0byBudWxsCisgICAgKiBAcmV0dXJucyB0
aGlzIHRyYW5zZm9ybSBub2RlCisgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5t
YXJrQXNEaXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkgeworICAgICAgICB0aGlzLl9jdXJyZW50
UmVuZGVySWQgPSBOdW1iZXIuTUFYX1ZBTFVFOworICAgICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJhYnNvbHV0ZVBvc2l0aW9uIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogUmV0dXJucyB0aGUgY3VycmVudCBtZXNoIGFic29sdXRlIHBvc2l0
aW9uLgorICAgICAgICAgKiBSZXR1cm5zIGEgVmVjdG9yMy4KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Fic29sdXRlUG9z
aXRpb247CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmFu
c2Zvcm1Ob2RlLnByb3RvdHlwZSwgImFic29sdXRlU2NhbGluZyIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbWVzaCBhYnNvbHV0ZSBzY2FsaW5nLgorICAg
ICAgICAgKiBSZXR1cm5zIGEgVmVjdG9yMy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5fc3luY0Fic29sdXRlU2NhbGluZ0FuZFJvdGF0
aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWJzb2x1dGVTY2FsaW5nOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtTm9kZS5wcm90
b3R5cGUsICJhYnNvbHV0ZVJvdGF0aW9uUXVhdGVybmlvbiIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbWVzaCBhYnNvbHV0ZSByb3RhdGlvbi4KKyAgICAg
ICAgICogUmV0dXJucyBhIFF1YXRlcm5pb24uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuX3N5bmNBYnNvbHV0ZVNjYWxpbmdBbmRSb3Rh
dGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Fic29sdXRlUm90YXRpb25RdWF0ZXJu
aW9uOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgbmV3IG1hdHJp
eCB0byBhcHBseSBiZWZvcmUgYWxsIG90aGVyIHRyYW5zZm9ybWF0aW9uCisgICAgICogQHBhcmFt
IG1hdHJpeCBkZWZpbmVzIHRoZSB0cmFuc2Zvcm0gbWF0cml4CisgICAgICogQHJldHVybnMgdGhl
IGN1cnJlbnQgVHJhbnNmb3JtTm9kZQorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90
eXBlLnNldFByZVRyYW5zZm9ybU1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuc2V0UGl2b3RNYXRyaXgobWF0cml4LCBmYWxzZSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBTZXRzIGEgbmV3IHBpdm90IG1hdHJpeCB0byB0aGUgY3VycmVudCBub2RlCisg
ICAgICogQHBhcmFtIG1hdHJpeCBkZWZpbmVzIHRoZSBuZXcgcGl2b3QgbWF0cml4IHRvIHVzZQor
ICAgICAqIEBwYXJhbSBwb3N0TXVsdGlwbHlQaXZvdE1hdHJpeCBkZWZpbmVzIGlmIHRoZSBwaXZv
dCBtYXRyaXggbXVzdCBiZSBjYW5jZWxsZWQgaW4gdGhlIHdvcmxkIG1hdHJpeC4gV2hlbiB0aGlz
IHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZSAoZGVmYXVsdCksIHRoZSBpbnZlcnNlIG9mIHRoZSBw
aXZvdCBtYXRyaXggaXMgYWxzbyBhcHBsaWVkIGF0IHRoZSBlbmQgdG8gY2FuY2VsIHRoZSB0cmFu
c2Zvcm1hdGlvbiBlZmZlY3QKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBUcmFuc2Zvcm1O
b2RlCisgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5zZXRQaXZvdE1hdHJpeCA9
IGZ1bmN0aW9uIChtYXRyaXgsIHBvc3RNdWx0aXBseVBpdm90TWF0cml4KSB7CisgICAgICAgIGlm
IChwb3N0TXVsdGlwbHlQaXZvdE1hdHJpeCA9PT0gdm9pZCAwKSB7IHBvc3RNdWx0aXBseVBpdm90
TWF0cml4ID0gdHJ1ZTsgfQorICAgICAgICB0aGlzLl9waXZvdE1hdHJpeC5jb3B5RnJvbShtYXRy
aXgpOworICAgICAgICB0aGlzLl91c2VQaXZvdE1hdHJpeCA9ICF0aGlzLl9waXZvdE1hdHJpeC5p
c0lkZW50aXR5KCk7CisgICAgICAgIHRoaXMuX2NhY2hlLnBpdm90TWF0cml4VXBkYXRlZCA9IHRy
dWU7CisgICAgICAgIHRoaXMuX3Bvc3RNdWx0aXBseVBpdm90TWF0cml4ID0gcG9zdE11bHRpcGx5
UGl2b3RNYXRyaXg7CisgICAgICAgIGlmICh0aGlzLl9wb3N0TXVsdGlwbHlQaXZvdE1hdHJpeCkg
eworICAgICAgICAgICAgaWYgKCF0aGlzLl9waXZvdE1hdHJpeEludmVyc2UpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9waXZvdE1hdHJpeEludmVyc2UgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uSW52ZXJ0KHRoaXMuX3Bpdm90TWF0
cml4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHRoaXMuX3Bpdm90TWF0cml4LmludmVydFRvUmVmKHRoaXMuX3Bpdm90TWF0cml4SW52ZXJzZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBtZXNoIHBpdm90IG1hdHJpeC4KKyAgICAgKiBE
ZWZhdWx0IDogSWRlbnRpdHkuCisgICAgICogQHJldHVybnMgdGhlIG1hdHJpeAorICAgICAqLwor
ICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLmdldFBpdm90TWF0cml4ID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5fcGl2b3RNYXRyaXg7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBJbnN0YW50aWF0ZSAod2hlbiBwb3NzaWJsZSkgb3IgY2xvbmUgdGhhdCBub2RlIHdpdGgg
aXRzIGhpZXJhcmNoeQorICAgICAqIEBwYXJhbSBuZXdQYXJlbnQgZGVmaW5lcyB0aGUgbmV3IHBh
cmVudCB0byB1c2UgZm9yIHRoZSBpbnN0YW5jZSAob3IgY2xvbmUpCisgICAgICogQHJldHVybnMg
YW4gaW5zdGFuY2UgKG9yIGEgY2xvbmUpIG9mIHRoZSBjdXJyZW50IG5vZGUgd2l0aCBpdHMgaGll
YXJjaHkKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5pbnN0YW50aWF0ZUhp
ZXJhcnljaHkgPSBmdW5jdGlvbiAobmV3UGFyZW50KSB7CisgICAgICAgIGlmIChuZXdQYXJlbnQg
PT09IHZvaWQgMCkgeyBuZXdQYXJlbnQgPSBudWxsOyB9CisgICAgICAgIHZhciBjbG9uZSA9IHRo
aXMuY2xvbmUoIkNsb25lIG9mICIgKyAodGhpcy5uYW1lIHx8IHRoaXMuaWQpLCBuZXdQYXJlbnQg
fHwgdGhpcy5wYXJlbnQsIHRydWUpOworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhp
cy5nZXRDaGlsZFRyYW5zZm9ybU5vZGVzKHRydWUpOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewor
ICAgICAgICAgICAgdmFyIGNoaWxkID0gX2FbX2ldOworICAgICAgICAgICAgY2hpbGQuaW5zdGFu
dGlhdGVIaWVyYXJ5Y2h5KGNsb25lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2xvbmU7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcmV2ZW50cyB0aGUgV29ybGQgbWF0cml4IHRvIGJl
IGNvbXB1dGVkIGFueSBsb25nZXIKKyAgICAgKiBAcGFyYW0gbmV3V29ybGRNYXRyaXggZGVmaW5l
cyBhbiBvcHRpb25hbCBtYXRyaXggdG8gdXNlIGFzIHdvcmxkIG1hdHJpeAorICAgICAqIEByZXR1
cm5zIHRoZSBUcmFuc2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90
eXBlLmZyZWV6ZVdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKG5ld1dvcmxkTWF0cml4KSB7CisgICAg
ICAgIGlmIChuZXdXb3JsZE1hdHJpeCA9PT0gdm9pZCAwKSB7IG5ld1dvcmxkTWF0cml4ID0gbnVs
bDsgfQorICAgICAgICBpZiAobmV3V29ybGRNYXRyaXgpIHsKKyAgICAgICAgICAgIHRoaXMuX3dv
cmxkTWF0cml4ID0gdGhpcy5fd29ybGRNYXRyaXg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB0aGlzLl9pc1dvcmxkTWF0cml4RnJvemVuID0gZmFsc2U7IC8vIG5vIGd1
YXJhbnRlZSB3b3JsZCBpcyBub3QgYWxyZWFkeSBmcm96ZW4sIHN3aXRjaCBvZmYgdGVtcG9yYXJp
bHkKKyAgICAgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX2lzV29ybGRNYXRyaXhGcm96ZW4gPSB0cnVlOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFsbG93cyBiYWNrIHRoZSBXb3JsZCBt
YXRyaXggY29tcHV0YXRpb24uCisgICAgICogQHJldHVybnMgdGhlIFRyYW5zZm9ybU5vZGUuCisg
ICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUudW5mcmVlemVXb3JsZE1hdHJpeCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faXNXb3JsZE1hdHJpeEZyb3plbiA9IGZhbHNl
OworICAgICAgICB0aGlzLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJhbnNmb3JtTm9kZS5w
cm90b3R5cGUsICJpc1dvcmxkTWF0cml4RnJvemVuIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogVHJ1ZSBpZiB0aGUgV29ybGQgbWF0cml4IGhhcyBiZWVuIGZyb3plbi4KKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lz
V29ybGRNYXRyaXhGcm96ZW47CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICogUmV0
dW5zIHRoZSBtZXNoIGFic29sdXRlIHBvc2l0aW9uIGluIHRoZSBXb3JsZC4KKyAgICAqIEByZXR1
cm5zIGEgVmVjdG9yMy4KKyAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLmdldEFi
c29sdXRlUG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxk
TWF0cml4KCk7CisgICAgICAgIHJldHVybiB0aGlzLl9hYnNvbHV0ZVBvc2l0aW9uOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgbWVzaCBhYnNvbHV0ZSBwb3NpdGlvbiBpbiB0aGUg
V29ybGQgZnJvbSBhIFZlY3RvcjMgb3IgYW4gQXJyYXkoMykuCisgICAgICogQHBhcmFtIGFic29s
dXRlUG9zaXRpb24gdGhlIGFic29sdXRlIHBvc2l0aW9uIHRvIHNldAorICAgICAqIEByZXR1cm5z
IHRoZSBUcmFuc2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBl
LnNldEFic29sdXRlUG9zaXRpb24gPSBmdW5jdGlvbiAoYWJzb2x1dGVQb3NpdGlvbikgeworICAg
ICAgICBpZiAoIWFic29sdXRlUG9zaXRpb24pIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICB9CisgICAgICAgIHZhciBhYnNvbHV0ZVBvc2l0aW9uWDsKKyAgICAgICAgdmFyIGFi
c29sdXRlUG9zaXRpb25ZOworICAgICAgICB2YXIgYWJzb2x1dGVQb3NpdGlvblo7CisgICAgICAg
IGlmIChhYnNvbHV0ZVBvc2l0aW9uLnggPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uWCA9IGFyZ3VtZW50c1sw
XTsKKyAgICAgICAgICAgIGFic29sdXRlUG9zaXRpb25ZID0gYXJndW1lbnRzWzFdOworICAgICAg
ICAgICAgYWJzb2x1dGVQb3NpdGlvblogPSBhcmd1bWVudHNbMl07CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uWCA9IGFic29sdXRlUG9zaXRp
b24ueDsKKyAgICAgICAgICAgIGFic29sdXRlUG9zaXRpb25ZID0gYWJzb2x1dGVQb3NpdGlvbi55
OworICAgICAgICAgICAgYWJzb2x1dGVQb3NpdGlvblogPSBhYnNvbHV0ZVBvc2l0aW9uLno7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7CisgICAgICAgICAgICB2YXIgaW52
ZXJ0UGFyZW50V29ybGRNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXTsKKyAgICAgICAgICAgIHRoaXMu
cGFyZW50LmdldFdvcmxkTWF0cml4KCkuaW52ZXJ0VG9SZWYoaW52ZXJ0UGFyZW50V29ybGRNYXRy
aXgpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc0Zyb21GbG9hdHNUb1JlZihh
YnNvbHV0ZVBvc2l0aW9uWCwgYWJzb2x1dGVQb3NpdGlvblksIGFic29sdXRlUG9zaXRpb25aLCBp
bnZlcnRQYXJlbnRXb3JsZE1hdHJpeCwgdGhpcy5wb3NpdGlvbik7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSBhYnNvbHV0ZVBvc2l0aW9u
WDsKKyAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IGFic29sdXRlUG9zaXRpb25ZOworICAg
ICAgICAgICAgdGhpcy5wb3NpdGlvbi56ID0gYWJzb2x1dGVQb3NpdGlvblo7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBt
ZXNoIHBvc2l0aW9uIGluIGl0cyBsb2NhbCBzcGFjZS4KKyAgICAgKiBAcGFyYW0gdmVjdG9yMyB0
aGUgcG9zaXRpb24gdG8gc2V0IGluIGxvY2Fsc3BhY2UKKyAgICAgKiBAcmV0dXJucyB0aGUgVHJh
bnNmb3JtTm9kZS4KKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5zZXRQb3Np
dGlvbldpdGhMb2NhbFZlY3RvciA9IGZ1bmN0aW9uICh2ZWN0b3IzKSB7CisgICAgICAgIHRoaXMu
Y29tcHV0ZVdvcmxkTWF0cml4KCk7CisgICAgICAgIHRoaXMucG9zaXRpb24gPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlRyYW5zZm9y
bU5vcm1hbCh2ZWN0b3IzLCB0aGlzLl9sb2NhbE1hdHJpeCk7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbWVzaCBwb3NpdGlvbiBpbiB0
aGUgbG9jYWwgc3BhY2UgZnJvbSB0aGUgY3VycmVudCBXb3JsZCBtYXRyaXggdmFsdWVzLgorICAg
ICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjMuCisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5w
cm90b3R5cGUuZ2V0UG9zaXRpb25FeHByZXNzZWRJbkxvY2FsU3BhY2UgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxkTWF0cml4KCk7CisgICAgICAgIHZhciBpbnZMb2Nh
bFdvcmxkTWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF07CisgICAgICAgIHRoaXMuX2xvY2FsTWF0cml4
LmludmVydFRvUmVmKGludkxvY2FsV29ybGRNYXRyaXgpOworICAgICAgICByZXR1cm4gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFu
c2Zvcm1Ob3JtYWwodGhpcy5wb3NpdGlvbiwgaW52TG9jYWxXb3JsZE1hdHJpeCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBUcmFuc2xhdGVzIHRoZSBtZXNoIGFsb25nIHRoZSBwYXNzZWQgVmVj
dG9yMyBpbiBpdHMgbG9jYWwgc3BhY2UuCisgICAgICogQHBhcmFtIHZlY3RvcjMgdGhlIGRpc3Rh
bmNlIHRvIHRyYW5zbGF0ZSBpbiBsb2NhbHNwYWNlCisgICAgICogQHJldHVybnMgdGhlIFRyYW5z
Zm9ybU5vZGUuCisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUubG9jYWxseVRy
YW5zbGF0ZSA9IGZ1bmN0aW9uICh2ZWN0b3IzKSB7CisgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxk
TWF0cml4KHRydWUpOworICAgICAgICB0aGlzLnBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGlu
YXRlcyh2ZWN0b3IzLCB0aGlzLl9sb2NhbE1hdHJpeCk7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogT3JpZW50cyBhIG1lc2ggdG93YXJkcyBhIHRhcmdldCBw
b2ludC4gTWVzaCBtdXN0IGJlIGRyYXduIGZhY2luZyB1c2VyLgorICAgICAqIEBwYXJhbSB0YXJn
ZXRQb2ludCB0aGUgcG9zaXRpb24gKG11c3QgYmUgaW4gc2FtZSBzcGFjZSBhcyBjdXJyZW50IG1l
c2gpIHRvIGxvb2sgYXQKKyAgICAgKiBAcGFyYW0geWF3Q29yIG9wdGlvbmFsIHlhdyAoeS1heGlz
KSBjb3JyZWN0aW9uIGluIHJhZGlhbnMKKyAgICAgKiBAcGFyYW0gcGl0Y2hDb3Igb3B0aW9uYWwg
cGl0Y2ggKHgtYXhpcykgY29ycmVjdGlvbiBpbiByYWRpYW5zCisgICAgICogQHBhcmFtIHJvbGxD
b3Igb3B0aW9uYWwgcm9sbCAoei1heGlzKSBjb3JyZWN0aW9uIGluIHJhZGlhbnMKKyAgICAgKiBA
cGFyYW0gc3BhY2UgdGhlIGNob29zZW4gc3BhY2Ugb2YgdGhlIHRhcmdldAorICAgICAqIEByZXR1
cm5zIHRoZSBUcmFuc2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90
eXBlLmxvb2tBdCA9IGZ1bmN0aW9uICh0YXJnZXRQb2ludCwgeWF3Q29yLCBwaXRjaENvciwgcm9s
bENvciwgc3BhY2UpIHsKKyAgICAgICAgaWYgKHlhd0NvciA9PT0gdm9pZCAwKSB7IHlhd0NvciA9
IDA7IH0KKyAgICAgICAgaWYgKHBpdGNoQ29yID09PSB2b2lkIDApIHsgcGl0Y2hDb3IgPSAwOyB9
CisgICAgICAgIGlmIChyb2xsQ29yID09PSB2b2lkIDApIHsgcm9sbENvciA9IDA7IH0KKyAgICAg
ICAgaWYgKHNwYWNlID09PSB2b2lkIDApIHsgc3BhY2UgPSBfTWF0aHNfbWF0aF9heGlzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNwYWNlIl0uTE9DQUw7IH0KKyAgICAgICAgdmFyIGR2
ID0gVHJhbnNmb3JtTm9kZS5fbG9va0F0VmVjdG9yQ2FjaGU7CisgICAgICAgIHZhciBwb3MgPSBz
cGFjZSA9PT0gX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJT
cGFjZSJdLkxPQ0FMID8gdGhpcy5wb3NpdGlvbiA6IHRoaXMuZ2V0QWJzb2x1dGVQb3NpdGlvbigp
OworICAgICAgICB0YXJnZXRQb2ludC5zdWJ0cmFjdFRvUmVmKHBvcywgZHYpOworICAgICAgICB0
aGlzLnNldERpcmVjdGlvbihkdiwgeWF3Q29yLCBwaXRjaENvciwgcm9sbENvcik7CisgICAgICAg
IC8vIENvcnJlY3QgZm9yIHBhcmVudCdzIHJvdGF0aW9uIG9mZnNldAorICAgICAgICBpZiAoc3Bh
Y2UgPT09IF9NYXRoc19tYXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU3Bh
Y2UiXS5XT1JMRCAmJiB0aGlzLnBhcmVudCkgeworICAgICAgICAgICAgaWYgKHRoaXMucm90YXRp
b25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgLy8gR2V0IGxvY2FsIHJvdGF0aW9uIG1h
dHJpeCBvZiB0aGUgbG9va2luZyBvYmplY3QKKyAgICAgICAgICAgICAgICB2YXIgcm90YXRpb25N
YXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VG1wVmVjdG9ycyJdLk1hdHJpeFswXTsKKyAgICAgICAgICAgICAgICB0aGlzLnJvdGF0aW9uUXVh
dGVybmlvbi50b1JvdGF0aW9uTWF0cml4KHJvdGF0aW9uTWF0cml4KTsKKyAgICAgICAgICAgICAg
ICAvLyBPZmZzZXQgcm90YXRpb24gYnkgcGFyZW50J3MgaW52ZXJ0ZWQgcm90YXRpb24gbWF0cml4
IHRvIGNvcnJlY3QgaW4gd29ybGQgc3BhY2UKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50Um90
YXRpb25NYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsxXTsKKyAgICAgICAgICAgICAgICB0aGlzLnBhcmVu
dC5nZXRXb3JsZE1hdHJpeCgpLmdldFJvdGF0aW9uTWF0cml4VG9SZWYocGFyZW50Um90YXRpb25N
YXRyaXgpOworICAgICAgICAgICAgICAgIHBhcmVudFJvdGF0aW9uTWF0cml4LmludmVydCgpOwor
ICAgICAgICAgICAgICAgIHJvdGF0aW9uTWF0cml4Lm11bHRpcGx5VG9SZWYocGFyZW50Um90YXRp
b25NYXRyaXgsIHJvdGF0aW9uTWF0cml4KTsKKyAgICAgICAgICAgICAgICB0aGlzLnJvdGF0aW9u
UXVhdGVybmlvbi5mcm9tUm90YXRpb25NYXRyaXgocm90YXRpb25NYXRyaXgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gR2V0IGxvY2FsIHJv
dGF0aW9uIG1hdHJpeCBvZiB0aGUgbG9va2luZyBvYmplY3QKKyAgICAgICAgICAgICAgICB2YXIg
cXVhdGVybmlvblJvdGF0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5RdWF0ZXJuaW9uWzBdOworICAgICAgICAgICAgICAg
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJu
aW9uIl0uRnJvbUV1bGVyVmVjdG9yVG9SZWYodGhpcy5yb3RhdGlvbiwgcXVhdGVybmlvblJvdGF0
aW9uKTsKKyAgICAgICAgICAgICAgICB2YXIgcm90YXRpb25NYXRyaXggPSBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsw
XTsKKyAgICAgICAgICAgICAgICBxdWF0ZXJuaW9uUm90YXRpb24udG9Sb3RhdGlvbk1hdHJpeChy
b3RhdGlvbk1hdHJpeCk7CisgICAgICAgICAgICAgICAgLy8gT2Zmc2V0IHJvdGF0aW9uIGJ5IHBh
cmVudCdzIGludmVydGVkIHJvdGF0aW9uIG1hdHJpeCB0byBjb3JyZWN0IGluIHdvcmxkIHNwYWNl
CisgICAgICAgICAgICAgICAgdmFyIHBhcmVudFJvdGF0aW9uTWF0cml4ID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhb
MV07CisgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuZ2V0V29ybGRNYXRyaXgoKS5nZXRSb3Rh
dGlvbk1hdHJpeFRvUmVmKHBhcmVudFJvdGF0aW9uTWF0cml4KTsKKyAgICAgICAgICAgICAgICBw
YXJlbnRSb3RhdGlvbk1hdHJpeC5pbnZlcnQoKTsKKyAgICAgICAgICAgICAgICByb3RhdGlvbk1h
dHJpeC5tdWx0aXBseVRvUmVmKHBhcmVudFJvdGF0aW9uTWF0cml4LCByb3RhdGlvbk1hdHJpeCk7
CisgICAgICAgICAgICAgICAgcXVhdGVybmlvblJvdGF0aW9uLmZyb21Sb3RhdGlvbk1hdHJpeChy
b3RhdGlvbk1hdHJpeCk7CisgICAgICAgICAgICAgICAgcXVhdGVybmlvblJvdGF0aW9uLnRvRXVs
ZXJBbmdsZXNUb1JlZih0aGlzLnJvdGF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAgKiBSZXR1cm5zIGEg
bmV3IFZlY3RvcjMgdGhhdCBpcyB0aGUgbG9jYWxBeGlzLCBleHByZXNzZWQgaW4gdGhlIG1lc2gg
bG9jYWwgc3BhY2UsIHJvdGF0ZWQgbGlrZSB0aGUgbWVzaC4KKyAgICAgICogVGhpcyBWZWN0b3Iz
IGlzIGV4cHJlc3NlZCBpbiB0aGUgV29ybGQgc3BhY2UuCisgICAgICAqIEBwYXJhbSBsb2NhbEF4
aXMgYXhpcyB0byByb3RhdGUKKyAgICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yMyB0aGF0IGlz
IHRoZSBsb2NhbEF4aXMsIGV4cHJlc3NlZCBpbiB0aGUgbWVzaCBsb2NhbCBzcGFjZSwgcm90YXRl
ZCBsaWtlIHRoZSBtZXNoLgorICAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5n
ZXREaXJlY3Rpb24gPSBmdW5jdGlvbiAobG9jYWxBeGlzKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9y
MyJdLlplcm8oKTsKKyAgICAgICAgdGhpcy5nZXREaXJlY3Rpb25Ub1JlZihsb2NhbEF4aXMsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBT
ZXRzIHRoZSBWZWN0b3IzICJyZXN1bHQiIGFzIHRoZSByb3RhdGVkIFZlY3RvcjMgImxvY2FsQXhp
cyIgaW4gdGhlIHNhbWUgcm90YXRpb24gdGhhbiB0aGUgbWVzaC4KKyAgICAgKiBsb2NhbEF4aXMg
aXMgZXhwcmVzc2VkIGluIHRoZSBtZXNoIGxvY2FsIHNwYWNlLgorICAgICAqIHJlc3VsdCBpcyBj
b21wdXRlZCBpbiB0aGUgV29yZGwgc3BhY2UgZnJvbSB0aGUgbWVzaCBXb3JsZCBtYXRyaXguCisg
ICAgICogQHBhcmFtIGxvY2FsQXhpcyBheGlzIHRvIHJvdGF0ZQorICAgICAqIEBwYXJhbSByZXN1
bHQgdGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1ub2RlCisgICAgICogQHJldHVybnMgdGhpcyBUcmFu
c2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLmdldERpcmVj
dGlvblRvUmVmID0gZnVuY3Rpb24gKGxvY2FsQXhpcywgcmVzdWx0KSB7CisgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJh
bnNmb3JtTm9ybWFsVG9SZWYobG9jYWxBeGlzLCB0aGlzLmdldFdvcmxkTWF0cml4KCksIHJlc3Vs
dCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0
aGlzIHRyYW5zZm9ybSBub2RlIHJvdGF0aW9uIHRvIHRoZSBnaXZlbiBsb2NhbCBheGlzLgorICAg
ICAqIEBwYXJhbSBsb2NhbEF4aXMgdGhlIGF4aXMgaW4gbG9jYWwgc3BhY2UKKyAgICAgKiBAcGFy
YW0geWF3Q29yIG9wdGlvbmFsIHlhdyAoeS1heGlzKSBjb3JyZWN0aW9uIGluIHJhZGlhbnMKKyAg
ICAgKiBAcGFyYW0gcGl0Y2hDb3Igb3B0aW9uYWwgcGl0Y2ggKHgtYXhpcykgY29ycmVjdGlvbiBp
biByYWRpYW5zCisgICAgICogQHBhcmFtIHJvbGxDb3Igb3B0aW9uYWwgcm9sbCAoei1heGlzKSBj
b3JyZWN0aW9uIGluIHJhZGlhbnMKKyAgICAgKiBAcmV0dXJucyB0aGlzIFRyYW5zZm9ybU5vZGUK
KyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5zZXREaXJlY3Rpb24gPSBmdW5j
dGlvbiAobG9jYWxBeGlzLCB5YXdDb3IsIHBpdGNoQ29yLCByb2xsQ29yKSB7CisgICAgICAgIGlm
ICh5YXdDb3IgPT09IHZvaWQgMCkgeyB5YXdDb3IgPSAwOyB9CisgICAgICAgIGlmIChwaXRjaENv
ciA9PT0gdm9pZCAwKSB7IHBpdGNoQ29yID0gMDsgfQorICAgICAgICBpZiAocm9sbENvciA9PT0g
dm9pZCAwKSB7IHJvbGxDb3IgPSAwOyB9CisgICAgICAgIHZhciB5YXcgPSAtTWF0aC5hdGFuMihs
b2NhbEF4aXMueiwgbG9jYWxBeGlzLngpICsgTWF0aC5QSSAvIDI7CisgICAgICAgIHZhciBsZW4g
PSBNYXRoLnNxcnQobG9jYWxBeGlzLnggKiBsb2NhbEF4aXMueCArIGxvY2FsQXhpcy56ICogbG9j
YWxBeGlzLnopOworICAgICAgICB2YXIgcGl0Y2ggPSAtTWF0aC5hdGFuMihsb2NhbEF4aXMueSwg
bGVuKTsKKyAgICAgICAgaWYgKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAg
ICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUXVhdGVy
bmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYoeWF3ICsgeWF3Q29yLCBwaXRjaCArIHBp
dGNoQ29yLCByb2xsQ29yLCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLnJvdGF0aW9uLnggPSBwaXRjaCArIHBpdGNo
Q29yOworICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi55ID0geWF3ICsgeWF3Q29yOworICAgICAg
ICAgICAgdGhpcy5yb3RhdGlvbi56ID0gcm9sbENvcjsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgYSBuZXcgcGl2b3QgcG9pbnQg
dG8gdGhlIGN1cnJlbnQgbm9kZQorICAgICAqIEBwYXJhbSBwb2ludCBkZWZpbmVzIHRoZSBuZXcg
cGl2b3QgcG9pbnQgdG8gdXNlCisgICAgICogQHBhcmFtIHNwYWNlIGRlZmluZXMgaWYgdGhlIHBv
aW50IGlzIGluIHdvcmxkIG9yIGxvY2FsIHNwYWNlIChsb2NhbCBieSBkZWZhdWx0KQorICAgICAq
IEByZXR1cm5zIHRoZSBjdXJyZW50IFRyYW5zZm9ybU5vZGUKKyAgICAqLworICAgIFRyYW5zZm9y
bU5vZGUucHJvdG90eXBlLnNldFBpdm90UG9pbnQgPSBmdW5jdGlvbiAocG9pbnQsIHNwYWNlKSB7
CisgICAgICAgIGlmIChzcGFjZSA9PT0gdm9pZCAwKSB7IHNwYWNlID0gX01hdGhzX21hdGhfYXhp
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTcGFjZSJdLkxPQ0FMOyB9CisgICAgICAg
IGlmICh0aGlzLmdldFNjZW5lKCkuZ2V0UmVuZGVySWQoKSA9PSAwKSB7CisgICAgICAgICAgICB0
aGlzLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgd20g
PSB0aGlzLmdldFdvcmxkTWF0cml4KCk7CisgICAgICAgIGlmIChzcGFjZSA9PSBfTWF0aHNfbWF0
aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNwYWNlIl0uV09STEQpIHsKKyAg
ICAgICAgICAgIHZhciB0bWF0ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF07CisgICAgICAgICAgICB3bS5pbnZl
cnRUb1JlZih0bWF0KTsKKyAgICAgICAgICAgIHBvaW50ID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRl
cyhwb2ludCwgdG1hdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuc2V0UGl2b3RN
YXRyaXgoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1h
dHJpeCJdLlRyYW5zbGF0aW9uKC1wb2ludC54LCAtcG9pbnQueSwgLXBvaW50LnopLCB0cnVlKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgd2l0aCB0
aGUgbWVzaCBwaXZvdCBwb2ludCBjb29yZGluYXRlcyBpbiB0aGUgbG9jYWwgc3BhY2UuCisgICAg
ICogQHJldHVybnMgdGhlIHBpdm90IHBvaW50CisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5w
cm90b3R5cGUuZ2V0UGl2b3RQb2ludCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHBvaW50
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuZ2V0UGl2b3RQb2ludFRvUmVmKHBvaW50KTsKKyAg
ICAgICAgcmV0dXJuIHBvaW50OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgcGFz
c2VkIFZlY3RvcjMgInJlc3VsdCIgd2l0aCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIG1lc2ggcGl2
b3QgcG9pbnQgaW4gdGhlIGxvY2FsIHNwYWNlLgorICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHZl
Y3RvcjMgdG8gc3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoaXMgVHJhbnNmb3Jt
Tm9kZS4KKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5nZXRQaXZvdFBvaW50
VG9SZWYgPSBmdW5jdGlvbiAocmVzdWx0KSB7CisgICAgICAgIHJlc3VsdC54ID0gLXRoaXMuX3Bp
dm90TWF0cml4Lm1bMTJdOworICAgICAgICByZXN1bHQueSA9IC10aGlzLl9waXZvdE1hdHJpeC5t
WzEzXTsKKyAgICAgICAgcmVzdWx0LnogPSAtdGhpcy5fcGl2b3RNYXRyaXgubVsxNF07CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIG5ldyBW
ZWN0b3IzIHNldCB3aXRoIHRoZSBtZXNoIHBpdm90IHBvaW50IFdvcmxkIGNvb3JkaW5hdGVzLgor
ICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIG1lc2ggcGl2b3QgcG9p
bnQgV29ybGQgY29vcmRpbmF0ZXMuCisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5
cGUuZ2V0QWJzb2x1dGVQaXZvdFBvaW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcG9p
bnQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMyJdLlplcm8oKTsKKyAgICAgICAgdGhpcy5nZXRBYnNvbHV0ZVBpdm90UG9pbnRUb1JlZihw
b2ludCk7CisgICAgICAgIHJldHVybiBwb2ludDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
dHMgdGhlIFZlY3RvcjMgInJlc3VsdCIgY29vcmRpbmF0ZXMgd2l0aCB0aGUgbWVzaCBwaXZvdCBw
b2ludCBXb3JsZCBjb29yZGluYXRlcy4KKyAgICAgKiBAcGFyYW0gcmVzdWx0IHZlY3RvcjMgdG8g
c3RvcmUgdGhlIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRoaXMgVHJhbnNmb3JtTm9kZS4KKyAg
ICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5nZXRBYnNvbHV0ZVBpdm90UG9pbnRU
b1JlZiA9IGZ1bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0LnggPSB0aGlzLl9waXZv
dE1hdHJpeC5tWzEyXTsKKyAgICAgICAgcmVzdWx0LnkgPSB0aGlzLl9waXZvdE1hdHJpeC5tWzEz
XTsKKyAgICAgICAgcmVzdWx0LnogPSB0aGlzLl9waXZvdE1hdHJpeC5tWzE0XTsKKyAgICAgICAg
dGhpcy5nZXRQaXZvdFBvaW50VG9SZWYocmVzdWx0KTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29y
ZGluYXRlc1RvUmVmKHJlc3VsdCwgdGhpcy5nZXRXb3JsZE1hdHJpeCgpLCByZXN1bHQpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIHBh
c3NlZCBub2RlIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgKiBUaGUg
bm9kZSB3aWxsIHJlbWFpbiBleGFjdGx5IHdoZXJlIGl0IGlzIGFuZCBpdHMgcG9zaXRpb24gLyBy
b3RhdGlvbiB3aWxsIGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkKKyAgICAgKiBAc2VlIGh0dHBzOi8v
ZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3BhcmVudGluZworICAgICAqIEBwYXJhbSBub2RlIHRo
ZSBub2RlIG90IHNldCBhcyB0aGUgcGFyZW50CisgICAgICogQHJldHVybnMgdGhpcyBUcmFuc2Zv
cm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLnNldFBhcmVudCA9
IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgIGlmICghbm9kZSAmJiAhdGhpcy5wYXJlbnQpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZhciBxdWF0Um90
YXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VG1wVmVjdG9ycyJdLlF1YXRlcm5pb25bMF07CisgICAgICAgIHZhciBwb3NpdGlvbiA9IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0u
VmVjdG9yM1swXTsKKyAgICAgICAgdmFyIHNjYWxlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzFdOworICAgICAg
ICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUp
OworICAgICAgICAgICAgdGhpcy5nZXRXb3JsZE1hdHJpeCgpLmRlY29tcG9zZShzY2FsZSwgcXVh
dFJvdGF0aW9uLCBwb3NpdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB2YXIgZGlmZk1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdOworICAgICAgICAgICAgdmFyIGlu
dlBhcmVudE1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzFdOworICAgICAgICAgICAgdGhpcy5jb21wdXRl
V29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgICAgICBub2RlLmNvbXB1dGVXb3JsZE1hdHJpeCh0
cnVlKTsKKyAgICAgICAgICAgIG5vZGUuZ2V0V29ybGRNYXRyaXgoKS5pbnZlcnRUb1JlZihpbnZQ
YXJlbnRNYXRyaXgpOworICAgICAgICAgICAgdGhpcy5nZXRXb3JsZE1hdHJpeCgpLm11bHRpcGx5
VG9SZWYoaW52UGFyZW50TWF0cml4LCBkaWZmTWF0cml4KTsKKyAgICAgICAgICAgIGRpZmZNYXRy
aXguZGVjb21wb3NlKHNjYWxlLCBxdWF0Um90YXRpb24sIHBvc2l0aW9uKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHRoaXMu
cm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHF1YXRSb3RhdGlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBxdWF0Um90YXRpb24udG9FdWxlckFuZ2xlc1RvUmVm
KHRoaXMucm90YXRpb24pOworICAgICAgICB9CisgICAgICAgIHRoaXMuc2NhbGluZy5jb3B5RnJv
bShzY2FsZSk7CisgICAgICAgIHRoaXMucG9zaXRpb24uY29weUZyb20ocG9zaXRpb24pOworICAg
ICAgICB0aGlzLnBhcmVudCA9IG5vZGU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLCAibm9uVW5p
Zm9ybVNjYWxpbmciLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUcnVlIGlmIHRoZSBzY2Fs
aW5nIHByb3BlcnR5IG9mIHRoaXMgb2JqZWN0IGlzIG5vbiB1bmlmb3JtIGVnLiAoMSwyLDEpCisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9ub25Vbmlmb3JtU2NhbGluZzsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5fdXBkYXRlTm9uVW5pZm9ybVNj
YWxpbmdTdGF0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAodGhpcy5fbm9uVW5p
Zm9ybVNjYWxpbmcgPT09IHZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fbm9uVW5pZm9ybVNjYWxpbmcgPSB2YWx1ZTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2ggdGhlIGN1cnJlbnQg
VHJhbnNmb3JtTm9kZSB0byBhbm90aGVyIFRyYW5zZm9ybU5vZGUgYXNzb2NpYXRlZCB3aXRoIGEg
Ym9uZQorICAgICAqIEBwYXJhbSBib25lIEJvbmUgYWZmZWN0aW5nIHRoZSBUcmFuc2Zvcm1Ob2Rl
CisgICAgICogQHBhcmFtIGFmZmVjdGVkVHJhbnNmb3JtTm9kZSBUcmFuc2Zvcm1Ob2RlIGFzc29j
aWF0ZWQgd2l0aCB0aGUgYm9uZQorICAgICAqIEByZXR1cm5zIHRoaXMgb2JqZWN0CisgICAgICov
CisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUuYXR0YWNoVG9Cb25lID0gZnVuY3Rpb24gKGJv
bmUsIGFmZmVjdGVkVHJhbnNmb3JtTm9kZSkgeworICAgICAgICB0aGlzLl90cmFuc2Zvcm1Ub0Jv
bmVSZWZlcmFsID0gYWZmZWN0ZWRUcmFuc2Zvcm1Ob2RlOworICAgICAgICB0aGlzLnBhcmVudCA9
IGJvbmU7CisgICAgICAgIGlmIChib25lLmdldFdvcmxkTWF0cml4KCkuZGV0ZXJtaW5hbnQoKSA8
IDApIHsKKyAgICAgICAgICAgIHRoaXMuc2NhbGluZ0RldGVybWluYW50ICo9IC0xOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0YWNo
IHRoZSB0cmFuc2Zvcm0gbm9kZSBpZiBpdHMgYXNzb2NpYXRlZCB3aXRoIGEgYm9uZQorICAgICAq
IEByZXR1cm5zIHRoaXMgb2JqZWN0CisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5
cGUuZGV0YWNoRnJvbUJvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5wYXJl
bnQpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLnBhcmVudC5nZXRXb3JsZE1hdHJpeCgpLmRldGVybWluYW50KCkgPCAwKSB7CisgICAgICAg
ICAgICB0aGlzLnNjYWxpbmdEZXRlcm1pbmFudCAqPSAtMTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl90cmFuc2Zvcm1Ub0JvbmVSZWZlcmFsID0gbnVsbDsKKyAgICAgICAgdGhpcy5wYXJlbnQg
PSBudWxsOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJv
dGF0ZXMgdGhlIG1lc2ggYXJvdW5kIHRoZSBheGlzIHZlY3RvciBmb3IgdGhlIHBhc3NlZCBhbmds
ZSAoYW1vdW50KSBleHByZXNzZWQgaW4gcmFkaWFucywgaW4gdGhlIGdpdmVuIHNwYWNlLgorICAg
ICAqIHNwYWNlIChkZWZhdWx0IExPQ0FMKSBjYW4gYmUgZWl0aGVyIFNwYWNlLkxPQ0FMLCBlaXRo
ZXIgU3BhY2UuV09STEQuCisgICAgICogTm90ZSB0aGF0IHRoZSBwcm9wZXJ0eSBgcm90YXRpb25R
dWF0ZXJuaW9uYCBpcyB0aGVuIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCBhbmQgdGhlIHByb3BlcnR5
IGByb3RhdGlvbmAgaXMgc2V0IHRvICgwLDAsMCkgYW5kIG5vIGxvbmdlciB1c2VkLgorICAgICAq
IFRoZSBwYXNzZWQgYXhpcyBpcyBhbHNvIG5vcm1hbGl6ZWQuCisgICAgICogQHBhcmFtIGF4aXMg
dGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZAorICAgICAqIEBwYXJhbSBhbW91bnQgdGhlIGFtb3Vu
dCB0byByb3RhdGUgaW4gcmFkaWFucworICAgICAqIEBwYXJhbSBzcGFjZSBTcGFjZSB0byByb3Rh
dGUgaW4gKERlZmF1bHQ6IGxvY2FsKQorICAgICAqIEByZXR1cm5zIHRoZSBUcmFuc2Zvcm1Ob2Rl
LgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLnJvdGF0ZSA9IGZ1bmN0aW9u
IChheGlzLCBhbW91bnQsIHNwYWNlKSB7CisgICAgICAgIGF4aXMubm9ybWFsaXplKCk7CisgICAg
ICAgIGlmICghdGhpcy5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHRoaXMucm90
YXRpb25RdWF0ZXJuaW9uID0gdGhpcy5yb3RhdGlvbi50b1F1YXRlcm5pb24oKTsKKyAgICAgICAg
ICAgIHRoaXMucm90YXRpb24uc2V0QWxsKDApOworICAgICAgICB9CisgICAgICAgIHZhciByb3Rh
dGlvblF1YXRlcm5pb247CisgICAgICAgIGlmICghc3BhY2UgfHwgc3BhY2UgPT09IF9NYXRoc19t
YXRoX2F4aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU3BhY2UiXS5MT0NBTCkgewor
ICAgICAgICAgICAgcm90YXRpb25RdWF0ZXJuaW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbkF4aXNUb1JlZihh
eGlzLCBhbW91bnQsIFRyYW5zZm9ybU5vZGUuX3JvdGF0aW9uQXhpc0NhY2hlKTsKKyAgICAgICAg
ICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYocm90YXRpb25RdWF0ZXJu
aW9uLCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgaW52
ZXJ0UGFyZW50V29ybGRNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXTsKKyAgICAgICAgICAgICAgICB0
aGlzLnBhcmVudC5nZXRXb3JsZE1hdHJpeCgpLmludmVydFRvUmVmKGludmVydFBhcmVudFdvcmxk
TWF0cml4KTsKKyAgICAgICAgICAgICAgICBheGlzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWwoYXhpcywg
aW52ZXJ0UGFyZW50V29ybGRNYXRyaXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcm90
YXRpb25RdWF0ZXJuaW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbkF4aXNUb1JlZihheGlzLCBhbW91bnQsIFRy
YW5zZm9ybU5vZGUuX3JvdGF0aW9uQXhpc0NhY2hlKTsKKyAgICAgICAgICAgIHJvdGF0aW9uUXVh
dGVybmlvbi5tdWx0aXBseVRvUmVmKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uLCB0aGlzLnJvdGF0
aW9uUXVhdGVybmlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSb3RhdGVzIHRoZSBtZXNoIGFyb3VuZCB0aGUgYXhpcyB2ZWN0b3Ig
Zm9yIHRoZSBwYXNzZWQgYW5nbGUgKGFtb3VudCkgZXhwcmVzc2VkIGluIHJhZGlhbnMsIGluIHdv
cmxkIHNwYWNlLgorICAgICAqIE5vdGUgdGhhdCB0aGUgcHJvcGVydHkgYHJvdGF0aW9uUXVhdGVy
bmlvbmAgaXMgdGhlbiBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgYW5kIHRoZSBwcm9wZXJ0eSBgcm90
YXRpb25gIGlzIHNldCB0byAoMCwwLDApIGFuZCBubyBsb25nZXIgdXNlZC4KKyAgICAgKiBUaGUg
cGFzc2VkIGF4aXMgaXMgYWxzbyBub3JtYWxpemVkLiAuCisgICAgICogTWV0aG9kIGlzIGJhc2Vk
IG9uIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2dlb21ldHJ5L2FmZmluZS9h
cm91bmRQb2ludC9pbmRleC5odG0KKyAgICAgKiBAcGFyYW0gcG9pbnQgdGhlIHBvaW50IHRvIHJv
dGF0ZSBhcm91bmQKKyAgICAgKiBAcGFyYW0gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5k
CisgICAgICogQHBhcmFtIGFtb3VudCB0aGUgYW1vdW50IHRvIHJvdGF0ZSBpbiByYWRpYW5zCisg
ICAgICogQHJldHVybnMgdGhlIFRyYW5zZm9ybU5vZGUKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1O
b2RlLnByb3RvdHlwZS5yb3RhdGVBcm91bmQgPSBmdW5jdGlvbiAocG9pbnQsIGF4aXMsIGFtb3Vu
dCkgeworICAgICAgICBheGlzLm5vcm1hbGl6ZSgpOworICAgICAgICBpZiAoIXRoaXMucm90YXRp
b25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbiA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9u
Il0uUm90YXRpb25ZYXdQaXRjaFJvbGwodGhpcy5yb3RhdGlvbi55LCB0aGlzLnJvdGF0aW9uLngs
IHRoaXMucm90YXRpb24ueik7CisgICAgICAgICAgICB0aGlzLnJvdGF0aW9uLnNldEFsbCgwKTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgdG1wVmVjdG9yID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdOworICAg
ICAgICB2YXIgZmluYWxTY2FsZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1sxXTsKKyAgICAgICAgdmFyIGZpbmFs
VHJhbnNsYXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMl07CisgICAgICAgIHZhciBmaW5hbFJvdGF0aW9u
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZl
Y3RvcnMiXS5RdWF0ZXJuaW9uWzBdOworICAgICAgICB2YXIgdHJhbnNsYXRpb25NYXRyaXggPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9y
cyJdLk1hdHJpeFswXTsgLy8gVAorICAgICAgICB2YXIgdHJhbnNsYXRpb25NYXRyaXhJbnYgPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9y
cyJdLk1hdHJpeFsxXTsgLy8gVCcKKyAgICAgICAgdmFyIHJvdGF0aW9uTWF0cml4ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5N
YXRyaXhbMl07IC8vIFIKKyAgICAgICAgdmFyIGZpbmFsTWF0cml4ID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbM107
IC8vIFQnIHggUiB4IFQKKyAgICAgICAgcG9pbnQuc3VidHJhY3RUb1JlZih0aGlzLnBvc2l0aW9u
LCB0bXBWZWN0b3IpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siTWF0cml4Il0uVHJhbnNsYXRpb25Ub1JlZih0bXBWZWN0b3IueCwgdG1w
VmVjdG9yLnksIHRtcFZlY3Rvci56LCB0cmFuc2xhdGlvbk1hdHJpeCk7IC8vIFQKKyAgICAgICAg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJd
LlRyYW5zbGF0aW9uVG9SZWYoLXRtcFZlY3Rvci54LCAtdG1wVmVjdG9yLnksIC10bXBWZWN0b3Iu
eiwgdHJhbnNsYXRpb25NYXRyaXhJbnYpOyAvLyBUJworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uUm90YXRpb25BeGlzVG9S
ZWYoYXhpcywgYW1vdW50LCByb3RhdGlvbk1hdHJpeCk7IC8vIFIKKyAgICAgICAgdHJhbnNsYXRp
b25NYXRyaXhJbnYubXVsdGlwbHlUb1JlZihyb3RhdGlvbk1hdHJpeCwgZmluYWxNYXRyaXgpOyAv
LyBUJyB4IFIKKyAgICAgICAgZmluYWxNYXRyaXgubXVsdGlwbHlUb1JlZih0cmFuc2xhdGlvbk1h
dHJpeCwgZmluYWxNYXRyaXgpOyAvLyBUJyB4IFIgeCBUCisgICAgICAgIGZpbmFsTWF0cml4LmRl
Y29tcG9zZShmaW5hbFNjYWxlLCBmaW5hbFJvdGF0aW9uLCBmaW5hbFRyYW5zbGF0aW9uKTsKKyAg
ICAgICAgdGhpcy5wb3NpdGlvbi5hZGRJblBsYWNlKGZpbmFsVHJhbnNsYXRpb24pOworICAgICAg
ICBmaW5hbFJvdGF0aW9uLm11bHRpcGx5VG9SZWYodGhpcy5yb3RhdGlvblF1YXRlcm5pb24sIHRo
aXMucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBUcmFuc2xhdGVzIHRoZSBtZXNoIGFsb25nIHRoZSBheGlzIHZlY3RvciBm
b3IgdGhlIHBhc3NlZCBkaXN0YW5jZSBpbiB0aGUgZ2l2ZW4gc3BhY2UuCisgICAgICogc3BhY2Ug
KGRlZmF1bHQgTE9DQUwpIGNhbiBiZSBlaXRoZXIgU3BhY2UuTE9DQUwsIGVpdGhlciBTcGFjZS5X
T1JMRC4KKyAgICAgKiBAcGFyYW0gYXhpcyB0aGUgYXhpcyB0byB0cmFuc2xhdGUgaW4KKyAgICAg
KiBAcGFyYW0gZGlzdGFuY2UgdGhlIGRpc3RhbmNlIHRvIHRyYW5zbGF0ZQorICAgICAqIEBwYXJh
bSBzcGFjZSBTcGFjZSB0byByb3RhdGUgaW4gKERlZmF1bHQ6IGxvY2FsKQorICAgICAqIEByZXR1
cm5zIHRoZSBUcmFuc2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90
eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChheGlzLCBkaXN0YW5jZSwgc3BhY2UpIHsKKyAgICAg
ICAgdmFyIGRpc3BsYWNlbWVudFZlY3RvciA9IGF4aXMuc2NhbGUoZGlzdGFuY2UpOworICAgICAg
ICBpZiAoIXNwYWNlIHx8IHNwYWNlID09PSBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIlNwYWNlIl0uTE9DQUwpIHsKKyAgICAgICAgICAgIHZhciB0ZW1wVjMg
PSB0aGlzLmdldFBvc2l0aW9uRXhwcmVzc2VkSW5Mb2NhbFNwYWNlKCkuYWRkKGRpc3BsYWNlbWVu
dFZlY3Rvcik7CisgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uV2l0aExvY2FsVmVjdG9yKHRl
bXBWMyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLnNldEFi
c29sdXRlUG9zaXRpb24odGhpcy5nZXRBYnNvbHV0ZVBvc2l0aW9uKCkuYWRkKGRpc3BsYWNlbWVu
dFZlY3RvcikpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
LyoqCisgICAgICogQWRkcyBhIHJvdGF0aW9uIHN0ZXAgdG8gdGhlIG1lc2ggY3VycmVudCByb3Rh
dGlvbi4KKyAgICAgKiB4LCB5LCB6IGFyZSBFdWxlciBhbmdsZXMgZXhwcmVzc2VkIGluIHJhZGlh
bnMuCisgICAgICogVGhpcyBtZXRob2RzIHVwZGF0ZXMgdGhlIGN1cnJlbnQgbWVzaCByb3RhdGlv
biwgZWl0aGVyIG1lc2gucm90YXRpb24sIGVpdGhlciBtZXNoLnJvdGF0aW9uUXVhdGVybmlvbiBp
ZiBpdCdzIHNldC4KKyAgICAgKiBUaGlzIG1lYW5zIHRoaXMgcm90YXRpb24gaXMgbWFkZSBpbiB0
aGUgbWVzaCBsb2NhbCBzcGFjZSBvbmx5LgorICAgICAqIEl0J3MgdXNlZnVsIHRvIHNldCBhIGN1
c3RvbSByb3RhdGlvbiBvcmRlciBkaWZmZXJlbnQgZnJvbSB0aGUgQkpTIHN0YW5kYXJkIG9uZSBZ
WFouCisgICAgICogRXhhbXBsZSA6IHRoaXMgcm90YXRlcyB0aGUgbWVzaCBmaXJzdCBhcm91bmQg
aXRzIGxvY2FsIFggYXhpcywgdGhlbiBhcm91bmQgaXRzIGxvY2FsIFogYXhpcywgZmluYWxseSBh
cm91bmQgaXRzIGxvY2FsIFkgYXhpcy4KKyAgICAgKiBgYGBqYXZhc2NyaXB0CisgICAgICogbWVz
aC5hZGRSb3RhdGlvbih4MSwgMCwgMCkuYWRkUm90YXRpb24oMCwgMCwgejIpLmFkZFJvdGF0aW9u
KDAsIDAsIHkzKTsKKyAgICAgKiBgYGAKKyAgICAgKiBOb3RlIHRoYXQgYGFkZFJvdGF0aW9uKClg
IGFjY3VtdWxhdGVzIHRoZSBwYXNzZWQgcm90YXRpb24gdmFsdWVzIHRvIHRoZSBjdXJyZW50IG9u
ZXMgYW5kIGNvbXB1dGVzIHRoZSAucm90YXRpb24gb3IgLnJvdGF0aW9uUXVhdGVybmlvbiB1cGRh
dGVkIHZhbHVlcy4KKyAgICAgKiBVbmRlciB0aGUgaG9vZCwgb25seSBxdWF0ZXJuaW9ucyBhcmUg
dXNlZC4gU28gaXQncyBhIGxpdHRsZSBmYXN0ZXIgaXMgeW91IHVzZSAucm90YXRpb25RdWF0ZXJu
aW9uIGJlY2F1c2UgaXQgZG9lc24ndCBuZWVkIHRvIHRyYW5zbGF0ZSB0aGVtIGJhY2sgdG8gRXVs
ZXIgYW5nbGVzLgorICAgICAqIEBwYXJhbSB4IFJvdGF0aW9uIHRvIGFkZAorICAgICAqIEBwYXJh
bSB5IFJvdGF0aW9uIHRvIGFkZAorICAgICAqIEBwYXJhbSB6IFJvdGF0aW9uIHRvIGFkZAorICAg
ICAqIEByZXR1cm5zIHRoZSBUcmFuc2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5v
ZGUucHJvdG90eXBlLmFkZFJvdGF0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHsKKyAgICAgICAg
dmFyIHJvdGF0aW9uUXVhdGVybmlvbjsKKyAgICAgICAgaWYgKHRoaXMucm90YXRpb25RdWF0ZXJu
aW9uKSB7CisgICAgICAgICAgICByb3RhdGlvblF1YXRlcm5pb24gPSB0aGlzLnJvdGF0aW9uUXVh
dGVybmlvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJvdGF0aW9u
UXVhdGVybmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJUbXBWZWN0b3JzIl0uUXVhdGVybmlvblsxXTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0uUm90YXRp
b25ZYXdQaXRjaFJvbGxUb1JlZih0aGlzLnJvdGF0aW9uLnksIHRoaXMucm90YXRpb24ueCwgdGhp
cy5yb3RhdGlvbi56LCByb3RhdGlvblF1YXRlcm5pb24pOworICAgICAgICB9CisgICAgICAgIHZh
ciBhY2N1bXVsYXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVG1wVmVjdG9ycyJdLlF1YXRlcm5pb25bMF07CisgICAgICAgIF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9uIl0uUm90YXRp
b25ZYXdQaXRjaFJvbGxUb1JlZih5LCB4LCB6LCBhY2N1bXVsYXRpb24pOworICAgICAgICByb3Rh
dGlvblF1YXRlcm5pb24ubXVsdGlwbHlJblBsYWNlKGFjY3VtdWxhdGlvbik7CisgICAgICAgIGlm
ICghdGhpcy5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHJvdGF0aW9uUXVhdGVy
bmlvbi50b0V1bGVyQW5nbGVzVG9SZWYodGhpcy5yb3RhdGlvbik7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICov
CisgICAgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUuX2dldEVmZmVjdGl2ZVBhcmVudCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50OworICAgIH07CisgICAgLyoqCisg
ICAgICogQ29tcHV0ZXMgdGhlIHdvcmxkIG1hdHJpeCBvZiB0aGUgbm9kZQorICAgICAqIEBwYXJh
bSBmb3JjZSBkZWZpbmVzIGlmIHRoZSBjYWNoZSB2ZXJzaW9uIHNob3VsZCBiZSBpbnZhbGlkYXRl
ZCBmb3JjaW5nIHRoZSB3b3JsZCBtYXRyaXggdG8gYmUgY3JlYXRlZCBmcm9tIHNjcmF0Y2gKKyAg
ICAgKiBAcmV0dXJucyB0aGUgd29ybGQgbWF0cml4CisgICAgICovCisgICAgVHJhbnNmb3JtTm9k
ZS5wcm90b3R5cGUuY29tcHV0ZVdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKGZvcmNlKSB7CisgICAg
ICAgIGlmICh0aGlzLl9pc1dvcmxkTWF0cml4RnJvemVuICYmICF0aGlzLl9pc0RpcnR5KSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRNYXRyaXg7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGN1cnJlbnRSZW5kZXJJZCA9IHRoaXMuZ2V0U2NlbmUoKS5nZXRSZW5kZXJJZCgpOworICAg
ICAgICBpZiAoIXRoaXMuX2lzRGlydHkgJiYgIWZvcmNlICYmIHRoaXMuaXNTeW5jaHJvbml6ZWQo
KSkgeworICAgICAgICAgICAgdGhpcy5fY3VycmVudFJlbmRlcklkID0gY3VycmVudFJlbmRlcklk
OworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dvcmxkTWF0cml4OworICAgICAgICB9CisgICAg
ICAgIHZhciBjYW1lcmEgPSB0aGlzLmdldFNjZW5lKCkuYWN0aXZlQ2FtZXJhOworICAgICAgICB2
YXIgdXNlQmlsbGJvYXJkUG9zaXRpb24gPSAodGhpcy5fYmlsbGJvYXJkTW9kZSAmIFRyYW5zZm9y
bU5vZGUuQklMTEJPQVJETU9ERV9VU0VfUE9TSVRJT04pICE9PSAwOworICAgICAgICB2YXIgdXNl
QmlsbGJvYXJkUGF0aCA9IHRoaXMuX2JpbGxib2FyZE1vZGUgIT09IFRyYW5zZm9ybU5vZGUuQklM
TEJPQVJETU9ERV9OT05FICYmICF0aGlzLnByZXNlcnZlUGFyZW50Um90YXRpb25Gb3JCaWxsYm9h
cmQ7CisgICAgICAgIC8vIEJpbGxib2FyZGluZyBiYXNlZCBvbiBjYW1lcmEgcG9zaXRpb24KKyAg
ICAgICAgaWYgKHVzZUJpbGxib2FyZFBhdGggJiYgY2FtZXJhICYmIHVzZUJpbGxib2FyZFBvc2l0
aW9uKSB7CisgICAgICAgICAgICB0aGlzLmxvb2tBdChjYW1lcmEucG9zaXRpb24pOworICAgICAg
ICAgICAgaWYgKCh0aGlzLmJpbGxib2FyZE1vZGUgJiBUcmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1P
REVfWCkgIT09IFRyYW5zZm9ybU5vZGUuQklMTEJPQVJETU9ERV9YKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5yb3RhdGlvbi54ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgo
dGhpcy5iaWxsYm9hcmRNb2RlICYgVHJhbnNmb3JtTm9kZS5CSUxMQk9BUkRNT0RFX1kpICE9PSBU
cmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1PREVfWSkgeworICAgICAgICAgICAgICAgIHRoaXMucm90
YXRpb24ueSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHRoaXMuYmlsbGJv
YXJkTW9kZSAmIFRyYW5zZm9ybU5vZGUuQklMTEJPQVJETU9ERV9aKSAhPT0gVHJhbnNmb3JtTm9k
ZS5CSUxMQk9BUkRNT0RFX1opIHsKKyAgICAgICAgICAgICAgICB0aGlzLnJvdGF0aW9uLnogPSAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZUNhY2hlKCk7
CisgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlOworICAgICAgICBjYWNoZS5waXZvdE1h
dHJpeFVwZGF0ZWQgPSBmYWxzZTsKKyAgICAgICAgY2FjaGUuYmlsbGJvYXJkTW9kZSA9IHRoaXMu
YmlsbGJvYXJkTW9kZTsKKyAgICAgICAgY2FjaGUuaW5maW5pdGVEaXN0YW5jZSA9IHRoaXMuaW5m
aW5pdGVEaXN0YW5jZTsKKyAgICAgICAgdGhpcy5fY3VycmVudFJlbmRlcklkID0gY3VycmVudFJl
bmRlcklkOworICAgICAgICB0aGlzLl9jaGlsZFVwZGF0ZUlkKys7CisgICAgICAgIHRoaXMuX2lz
RGlydHkgPSBmYWxzZTsKKyAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMuX2dldEVmZmVjdGl2ZVBh
cmVudCgpOworICAgICAgICAvLyBTY2FsaW5nCisgICAgICAgIHZhciBzY2FsaW5nID0gY2FjaGUu
c2NhbGluZzsKKyAgICAgICAgdmFyIHRyYW5zbGF0aW9uID0gY2FjaGUucG9zaXRpb247CisgICAg
ICAgIC8vIFRyYW5zbGF0aW9uCisgICAgICAgIGlmICh0aGlzLl9pbmZpbml0ZURpc3RhbmNlKSB7
CisgICAgICAgICAgICBpZiAoIXRoaXMucGFyZW50ICYmIGNhbWVyYSkgeworICAgICAgICAgICAg
ICAgIHZhciBjYW1lcmFXb3JsZE1hdHJpeCA9IGNhbWVyYS5nZXRXb3JsZE1hdHJpeCgpOworICAg
ICAgICAgICAgICAgIHZhciBjYW1lcmFHbG9iYWxQb3NpdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKGNhbWVyYVdvcmxk
TWF0cml4Lm1bMTJdLCBjYW1lcmFXb3JsZE1hdHJpeC5tWzEzXSwgY2FtZXJhV29ybGRNYXRyaXgu
bVsxNF0pOworICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uLmNvcHlGcm9tRmxvYXRzKHRoaXMu
X3Bvc2l0aW9uLnggKyBjYW1lcmFHbG9iYWxQb3NpdGlvbi54LCB0aGlzLl9wb3NpdGlvbi55ICsg
Y2FtZXJhR2xvYmFsUG9zaXRpb24ueSwgdGhpcy5fcG9zaXRpb24ueiArIGNhbWVyYUdsb2JhbFBv
c2l0aW9uLnopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgdHJhbnNsYXRpb24uY29weUZyb20odGhpcy5fcG9zaXRpb24pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdHJhbnNsYXRpb24uY29w
eUZyb20odGhpcy5fcG9zaXRpb24pOworICAgICAgICB9CisgICAgICAgIC8vIFNjYWxpbmcKKyAg
ICAgICAgc2NhbGluZy5jb3B5RnJvbUZsb2F0cyh0aGlzLl9zY2FsaW5nLnggKiB0aGlzLnNjYWxp
bmdEZXRlcm1pbmFudCwgdGhpcy5fc2NhbGluZy55ICogdGhpcy5zY2FsaW5nRGV0ZXJtaW5hbnQs
IHRoaXMuX3NjYWxpbmcueiAqIHRoaXMuc2NhbGluZ0RldGVybWluYW50KTsKKyAgICAgICAgLy8g
Um90YXRpb24KKyAgICAgICAgdmFyIHJvdGF0aW9uID0gY2FjaGUucm90YXRpb25RdWF0ZXJuaW9u
OworICAgICAgICBpZiAodGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5yZUludGVncmF0ZVJvdGF0aW9uSW50b1JvdGF0aW9uUXVhdGVybmlvbikgeworICAg
ICAgICAgICAgICAgIHZhciBsZW4gPSB0aGlzLnJvdGF0aW9uLmxlbmd0aFNxdWFyZWQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAobGVuKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0
aW9uUXVhdGVybmlvbi5tdWx0aXBseUluUGxhY2UoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlF1YXRlcm5pb24iXS5Sb3RhdGlvbllhd1BpdGNoUm9sbCh0
aGlzLl9yb3RhdGlvbi55LCB0aGlzLl9yb3RhdGlvbi54LCB0aGlzLl9yb3RhdGlvbi56KSk7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uLmNvcHlGcm9tRmxvYXRzKDAsIDAsIDAp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJvdGF0aW9u
LmNvcHlGcm9tKHRoaXMuX3JvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siUXVhdGVybmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYodGhpcy5f
cm90YXRpb24ueSwgdGhpcy5fcm90YXRpb24ueCwgdGhpcy5fcm90YXRpb24ueiwgcm90YXRpb24p
OworICAgICAgICAgICAgY2FjaGUucm90YXRpb24uY29weUZyb20odGhpcy5fcm90YXRpb24pOwor
ICAgICAgICB9CisgICAgICAgIC8vIENvbXBvc2UKKyAgICAgICAgaWYgKHRoaXMuX3VzZVBpdm90
TWF0cml4KSB7CisgICAgICAgICAgICB2YXIgc2NhbGVNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsxXTsK
KyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJNYXRyaXgiXS5TY2FsaW5nVG9SZWYoc2NhbGluZy54LCBzY2FsaW5nLnksIHNjYWxpbmcu
eiwgc2NhbGVNYXRyaXgpOworICAgICAgICAgICAgLy8gUm90YXRpb24KKyAgICAgICAgICAgIHZh
ciByb3RhdGlvbk1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdOworICAgICAgICAgICAgcm90YXRpb24u
dG9Sb3RhdGlvbk1hdHJpeChyb3RhdGlvbk1hdHJpeCk7CisgICAgICAgICAgICAvLyBDb21wb3Np
bmcgdHJhbnNmb3JtYXRpb25zCisgICAgICAgICAgICB0aGlzLl9waXZvdE1hdHJpeC5tdWx0aXBs
eVRvUmVmKHNjYWxlTWF0cml4LCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFs0XSk7CisgICAgICAgICAgICBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1h
dHJpeFs0XS5tdWx0aXBseVRvUmVmKHJvdGF0aW9uTWF0cml4LCB0aGlzLl9sb2NhbE1hdHJpeCk7
CisgICAgICAgICAgICAvLyBQb3N0IG11bHRpcGx5IGludmVyc2Ugb2YgcGl2b3RNYXRyaXgKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9wb3N0TXVsdGlwbHlQaXZvdE1hdHJpeCkgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2xvY2FsTWF0cml4Lm11bHRpcGx5VG9SZWYodGhpcy5fcGl2b3RNYXRyaXhJ
bnZlcnNlLCB0aGlzLl9sb2NhbE1hdHJpeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aGlzLl9sb2NhbE1hdHJpeC5hZGRUcmFuc2xhdGlvbkZyb21GbG9hdHModHJhbnNsYXRpb24ueCwg
dHJhbnNsYXRpb24ueSwgdHJhbnNsYXRpb24ueik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siTWF0cml4Il0uQ29tcG9zZVRvUmVmKHNjYWxpbmcsIHJvdGF0aW9uLCB0cmFuc2xhdGlv
biwgdGhpcy5fbG9jYWxNYXRyaXgpOworICAgICAgICB9CisgICAgICAgIC8vIFBhcmVudAorICAg
ICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5nZXRXb3JsZE1hdHJpeCkgeworICAgICAgICAgICAg
aWYgKGZvcmNlKSB7CisgICAgICAgICAgICAgICAgcGFyZW50LmNvbXB1dGVXb3JsZE1hdHJpeCgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHVzZUJpbGxib2FyZFBhdGgpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhbnNmb3JtVG9Cb25lUmVmZXJhbCkgeworICAgICAg
ICAgICAgICAgICAgICBwYXJlbnQuZ2V0V29ybGRNYXRyaXgoKS5tdWx0aXBseVRvUmVmKHRoaXMu
X3RyYW5zZm9ybVRvQm9uZVJlZmVyYWwuZ2V0V29ybGRNYXRyaXgoKSwgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbN10p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlRtcFZlY3RvcnMiXS5NYXRyaXhbN10uY29weUZyb20ocGFyZW50LmdldFdvcmxkTWF0cml4KCkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHNjYWxpbmcg
YW5kIHRyYW5zbGF0aW9uIGZyb20gcGFyZW50CisgICAgICAgICAgICAgICAgdmFyIHRyYW5zbGF0
aW9uXzEgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VG1wVmVjdG9ycyJdLlZlY3RvcjNbNV07CisgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMi
XS5WZWN0b3IzWzZdOworICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzddLmRlY29tcG9zZShz
Y2FsZSwgdW5kZWZpbmVkLCB0cmFuc2xhdGlvbl8xKTsKKyAgICAgICAgICAgICAgICBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uU2NhbGlu
Z1RvUmVmKHNjYWxlLngsIHNjYWxlLnksIHNjYWxlLnosIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzddKTsKKyAgICAg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVG1wVmVjdG9ycyJdLk1hdHJpeFs3XS5zZXRUcmFuc2xhdGlvbih0cmFuc2xhdGlvbl8xKTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9sb2NhbE1hdHJpeC5tdWx0aXBseVRvUmVmKF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0
cml4WzddLCB0aGlzLl93b3JsZE1hdHJpeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhbnNmb3JtVG9Cb25lUmVmZXJhbCkg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2NhbE1hdHJpeC5tdWx0aXBseVRvUmVmKHBh
cmVudC5nZXRXb3JsZE1hdHJpeCgpLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFs2XSk7CisgICAgICAgICAgICAgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBW
ZWN0b3JzIl0uTWF0cml4WzZdLm11bHRpcGx5VG9SZWYodGhpcy5fdHJhbnNmb3JtVG9Cb25lUmVm
ZXJhbC5nZXRXb3JsZE1hdHJpeCgpLCB0aGlzLl93b3JsZE1hdHJpeCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9s
b2NhbE1hdHJpeC5tdWx0aXBseVRvUmVmKHBhcmVudC5nZXRXb3JsZE1hdHJpeCgpLCB0aGlzLl93
b3JsZE1hdHJpeCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fbWFya1N5bmNlZFdpdGhQYXJlbnQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4LmNvcHlGcm9tKHRoaXMuX2xvY2FsTWF0
cml4KTsKKyAgICAgICAgfQorICAgICAgICAvLyBCaWxsYm9hcmRpbmcgYmFzZWQgb24gY2FtZXJh
IG9yaWVudGF0aW9uICh0ZXN0aW5nIFBHOmh0dHA6Ly93d3cuYmFieWxvbmpzLXBsYXlncm91bmQu
Y29tLyNVSkVJTCMxMykKKyAgICAgICAgaWYgKHVzZUJpbGxib2FyZFBhdGggJiYgY2FtZXJhICYm
IHRoaXMuYmlsbGJvYXJkTW9kZSAmJiAhdXNlQmlsbGJvYXJkUG9zaXRpb24pIHsKKyAgICAgICAg
ICAgIHZhciBzdG9yZWRUcmFuc2xhdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1swXTsKKyAgICAgICAgICAg
IHRoaXMuX3dvcmxkTWF0cml4LmdldFRyYW5zbGF0aW9uVG9SZWYoc3RvcmVkVHJhbnNsYXRpb24p
OyAvLyBTYXZlIHRyYW5zbGF0aW9uCisgICAgICAgICAgICAvLyBDYW5jZWwgY2FtZXJhIHJvdGF0
aW9uCisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFsxXS5jb3B5RnJvbShjYW1lcmEuZ2V0Vmlld01h
dHJpeCgpKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzFdLnNldFRyYW5zbGF0aW9uRnJvbUZs
b2F0cygwLCAwLCAwKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzFdLmludmVydFRvUmVmKF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3Jz
Il0uTWF0cml4WzBdKTsKKyAgICAgICAgICAgIGlmICgodGhpcy5iaWxsYm9hcmRNb2RlICYgVHJh
bnNmb3JtTm9kZS5CSUxMQk9BUkRNT0RFX0FMTCkgIT09IFRyYW5zZm9ybU5vZGUuQklMTEJPQVJE
TU9ERV9BTEwpIHsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVG1wVmVjdG9ycyJdLk1hdHJpeFswXS5kZWNvbXBvc2UodW5k
ZWZpbmVkLCBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VG1wVmVjdG9ycyJdLlF1YXRlcm5pb25bMF0sIHVuZGVmaW5lZCk7CisgICAgICAgICAgICAgICAg
dmFyIGV1bGVyQW5nbGVzID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzFdOworICAgICAgICAgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0u
UXVhdGVybmlvblswXS50b0V1bGVyQW5nbGVzVG9SZWYoZXVsZXJBbmdsZXMpOworICAgICAgICAg
ICAgICAgIGlmICgodGhpcy5iaWxsYm9hcmRNb2RlICYgVHJhbnNmb3JtTm9kZS5CSUxMQk9BUkRN
T0RFX1gpICE9PSBUcmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1PREVfWCkgeworICAgICAgICAgICAg
ICAgICAgICBldWxlckFuZ2xlcy54ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKCh0aGlzLmJpbGxib2FyZE1vZGUgJiBUcmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1P
REVfWSkgIT09IFRyYW5zZm9ybU5vZGUuQklMTEJPQVJETU9ERV9ZKSB7CisgICAgICAgICAgICAg
ICAgICAgIGV1bGVyQW5nbGVzLnkgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoKHRoaXMuYmlsbGJvYXJkTW9kZSAmIFRyYW5zZm9ybU5vZGUuQklMTEJPQVJETU9E
RV9aKSAhPT0gVHJhbnNmb3JtTm9kZS5CSUxMQk9BUkRNT0RFX1opIHsKKyAgICAgICAgICAgICAg
ICAgICAgZXVsZXJBbmdsZXMueiA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRy
aXgiXS5Sb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKGV1bGVyQW5nbGVzLnksIGV1bGVyQW5nbGVz
LngsIGV1bGVyQW5nbGVzLnosIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX3dvcmxkTWF0cml4LnNldFRyYW5zbGF0aW9uRnJvbUZsb2F0cygwLCAwLCAw
KTsKKyAgICAgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4Lm11bHRpcGx5VG9SZWYoX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRy
aXhbMF0sIHRoaXMuX3dvcmxkTWF0cml4KTsKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgdHJhbnNs
YXRpb24KKyAgICAgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4LnNldFRyYW5zbGF0aW9uKF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0u
VmVjdG9yM1swXSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTm9ybWFsIG1hdHJpeAorICAgICAg
ICBpZiAoIXRoaXMuaWdub3JlTm9uVW5pZm9ybVNjYWxpbmcpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9zY2FsaW5nLmlzTm9uVW5pZm9ybSkgeworICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0
ZU5vblVuaWZvcm1TY2FsaW5nU3RhdGUodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmIChwYXJlbnQgJiYgcGFyZW50Ll9ub25Vbmlmb3JtU2NhbGluZykgeworICAgICAg
ICAgICAgICAgIHRoaXMuX3VwZGF0ZU5vblVuaWZvcm1TY2FsaW5nU3RhdGUocGFyZW50Ll9ub25V
bmlmb3JtU2NhbGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl91cGRhdGVOb25Vbmlmb3JtU2NhbGluZ1N0YXRlKGZhbHNlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMu
X3VwZGF0ZU5vblVuaWZvcm1TY2FsaW5nU3RhdGUoZmFsc2UpOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX2FmdGVyQ29tcHV0ZVdvcmxkTWF0cml4KCk7CisgICAgICAgIC8vIEFic29sdXRlIHBv
c2l0aW9uCisgICAgICAgIHRoaXMuX2Fic29sdXRlUG9zaXRpb24uY29weUZyb21GbG9hdHModGhp
cy5fd29ybGRNYXRyaXgubVsxMl0sIHRoaXMuX3dvcmxkTWF0cml4Lm1bMTNdLCB0aGlzLl93b3Js
ZE1hdHJpeC5tWzE0XSk7CisgICAgICAgIHRoaXMuX2lzQWJzb2x1dGVTeW5jZWQgPSBmYWxzZTsK
KyAgICAgICAgLy8gQ2FsbGJhY2tzCisgICAgICAgIHRoaXMub25BZnRlcldvcmxkTWF0cml4VXBk
YXRlT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIGlmICghdGhpcy5f
cG9zZU1hdHJpeCkgeworICAgICAgICAgICAgdGhpcy5fcG9zZU1hdHJpeCA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRyaXgiXS5JbnZlcnQodGhp
cy5fd29ybGRNYXRyaXgpOworICAgICAgICB9CisgICAgICAgIC8vIENhY2hlIHRoZSBkZXRlcm1p
bmFudAorICAgICAgICB0aGlzLl93b3JsZE1hdHJpeERldGVybWluYW50SXNEaXJ0eSA9IHRydWU7
CisgICAgICAgIHJldHVybiB0aGlzLl93b3JsZE1hdHJpeDsKKyAgICB9OworICAgIFRyYW5zZm9y
bU5vZGUucHJvdG90eXBlLl9hZnRlckNvbXB1dGVXb3JsZE1hdHJpeCA9IGZ1bmN0aW9uICgpIHsK
KyAgICB9OworICAgIC8qKgorICAgICogSWYgeW91J2QgbGlrZSB0byBiZSBjYWxsZWQgYmFjayBh
ZnRlciB0aGUgbWVzaCBwb3NpdGlvbiwgcm90YXRpb24gb3Igc2NhbGluZyBoYXMgYmVlbiB1cGRh
dGVkLgorICAgICogQHBhcmFtIGZ1bmMgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYWRkCisgICAgKgor
ICAgICogQHJldHVybnMgdGhlIFRyYW5zZm9ybU5vZGUuCisgICAgKi8KKyAgICBUcmFuc2Zvcm1O
b2RlLnByb3RvdHlwZS5yZWdpc3RlckFmdGVyV29ybGRNYXRyaXhVcGRhdGUgPSBmdW5jdGlvbiAo
ZnVuYykgeworICAgICAgICB0aGlzLm9uQWZ0ZXJXb3JsZE1hdHJpeFVwZGF0ZU9ic2VydmFibGUu
YWRkKGZ1bmMpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJlbW92ZXMgYSByZWdpc3RlcmVkIGNhbGxiYWNrIGZ1bmN0aW9uLgorICAgICAqIEBwYXJhbSBm
dW5jIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5zIHRoZSBUcmFu
c2Zvcm1Ob2RlLgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLnVucmVnaXN0
ZXJBZnRlcldvcmxkTWF0cml4VXBkYXRlID0gZnVuY3Rpb24gKGZ1bmMpIHsKKyAgICAgICAgdGhp
cy5vbkFmdGVyV29ybGRNYXRyaXhVcGRhdGVPYnNlcnZhYmxlLnJlbW92ZUNhbGxiYWNrKGZ1bmMp
OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhl
IHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IG1lc2ggaW4gY2FtZXJhIHNwYWNlCisgICAgICogQHBh
cmFtIGNhbWVyYSBkZWZpbmVzIHRoZSBjYW1lcmEgdG8gdXNlCisgICAgICogQHJldHVybnMgYSBw
b3NpdGlvbgorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLmdldFBvc2l0aW9u
SW5DYW1lcmFTcGFjZSA9IGZ1bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgaWYgKGNhbWVyYSA9
PT0gdm9pZCAwKSB7IGNhbWVyYSA9IG51bGw7IH0KKyAgICAgICAgaWYgKCFjYW1lcmEpIHsKKyAg
ICAgICAgICAgIGNhbWVyYSA9IHRoaXMuZ2V0U2NlbmUoKS5hY3RpdmVDYW1lcmE7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXModGhpcy5hYnNvbHV0ZVBv
c2l0aW9uLCBjYW1lcmEuZ2V0Vmlld01hdHJpeCgpKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJldHVybnMgdGhlIGRpc3RhbmNlIGZyb20gdGhlIG1lc2ggdG8gdGhlIGFjdGl2ZSBjYW1lcmEK
KyAgICAgKiBAcGFyYW0gY2FtZXJhIGRlZmluZXMgdGhlIGNhbWVyYSB0byB1c2UKKyAgICAgKiBA
cmV0dXJucyB0aGUgZGlzdGFuY2UKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlw
ZS5nZXREaXN0YW5jZVRvQ2FtZXJhID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICBpZiAo
Y2FtZXJhID09PSB2b2lkIDApIHsgY2FtZXJhID0gbnVsbDsgfQorICAgICAgICBpZiAoIWNhbWVy
YSkgeworICAgICAgICAgICAgY2FtZXJhID0gdGhpcy5nZXRTY2VuZSgpLmFjdGl2ZUNhbWVyYTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5hYnNvbHV0ZVBvc2l0aW9uLnN1YnRyYWN0
KGNhbWVyYS5nbG9iYWxQb3NpdGlvbikubGVuZ3RoKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBDbG9uZSB0aGUgY3VycmVudCB0cmFuc2Zvcm0gbm9kZQorICAgICAqIEBwYXJhbSBuYW1lIE5h
bWUgb2YgdGhlIG5ldyBjbG9uZQorICAgICAqIEBwYXJhbSBuZXdQYXJlbnQgTmV3IHBhcmVudCBm
b3IgdGhlIGNsb25lCisgICAgICogQHBhcmFtIGRvTm90Q2xvbmVDaGlsZHJlbiBEbyBub3QgY2xv
bmUgY2hpbGRyZW4gaGllcmFyY2h5CisgICAgICogQHJldHVybnMgdGhlIG5ldyB0cmFuc2Zvcm0g
bm9kZQorICAgICAqLworICAgIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rp
b24gKG5hbWUsIG5ld1BhcmVudCwgZG9Ob3RDbG9uZUNoaWxkcmVuKSB7CisgICAgICAgIHZhciBf
dGhpcyA9IHRoaXM7CisgICAgICAgIHZhciByZXN1bHQgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5DbG9uZShmdW5j
dGlvbiAoKSB7IHJldHVybiBuZXcgVHJhbnNmb3JtTm9kZShuYW1lLCBfdGhpcy5nZXRTY2VuZSgp
KTsgfSwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5uYW1lID0gbmFtZTsKKyAgICAgICAgcmVzdWx0
LmlkID0gbmFtZTsKKyAgICAgICAgaWYgKG5ld1BhcmVudCkgeworICAgICAgICAgICAgcmVzdWx0
LnBhcmVudCA9IG5ld1BhcmVudDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWRvTm90Q2xvbmVD
aGlsZHJlbikgeworICAgICAgICAgICAgLy8gQ2hpbGRyZW4KKyAgICAgICAgICAgIHZhciBkaXJl
Y3REZXNjZW5kYW50cyA9IHRoaXMuZ2V0RGVzY2VuZGFudHModHJ1ZSk7CisgICAgICAgICAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZGlyZWN0RGVzY2VuZGFudHMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gZGlyZWN0RGVzY2VuZGFudHNbaW5k
ZXhdOworICAgICAgICAgICAgICAgIGlmIChjaGlsZC5jbG9uZSkgeworICAgICAgICAgICAgICAg
ICAgICBjaGlsZC5jbG9uZShuYW1lICsgIi4iICsgY2hpbGQubmFtZSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIG9iamVjdHMgaW5m
b3JtYXRpb24uCisgICAgICogQHBhcmFtIGN1cnJlbnRTZXJpYWxpemF0aW9uT2JqZWN0IGRlZmlu
ZXMgdGhlIG9iamVjdCB0byBzZXJpYWxpemUgaW4KKyAgICAgKiBAcmV0dXJucyB0aGUgc2VyaWFs
aXplZCBvYmplY3QKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5zZXJpYWxp
emUgPSBmdW5jdGlvbiAoY3VycmVudFNlcmlhbGl6YXRpb25PYmplY3QpIHsKKyAgICAgICAgdmFy
IHNlcmlhbGl6YXRpb25PYmplY3QgPSBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5TZXJpYWxpemUodGhpcywgY3VycmVu
dFNlcmlhbGl6YXRpb25PYmplY3QpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnR5cGUg
PSB0aGlzLmdldENsYXNzTmFtZSgpOworICAgICAgICAvLyBQYXJlbnQKKyAgICAgICAgaWYgKHRo
aXMucGFyZW50KSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnBhcmVudElkID0g
dGhpcy5wYXJlbnQuaWQ7CisgICAgICAgIH0KKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5s
b2NhbE1hdHJpeCA9IHRoaXMuZ2V0UGl2b3RNYXRyaXgoKS5hc0FycmF5KCk7CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QuaXNFbmFibGVkID0gdGhpcy5pc0VuYWJsZWQoKTsKKyAgICAgICAg
Ly8gUGFyZW50CisgICAgICAgIGlmICh0aGlzLnBhcmVudCkgeworICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5wYXJlbnRJZCA9IHRoaXMucGFyZW50LmlkOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLy8gU3RhdGljcwor
ICAgIC8qKgorICAgICAqIFJldHVybnMgYSBuZXcgVHJhbnNmb3JtTm9kZSBvYmplY3QgcGFyc2Vk
IGZyb20gdGhlIHNvdXJjZSBwcm92aWRlZC4KKyAgICAgKiBAcGFyYW0gcGFyc2VkVHJhbnNmb3Jt
Tm9kZSBpcyB0aGUgc291cmNlLgorICAgICAqIEBwYXJhbSBzY2VuZSB0aGUgc2NuZSB0aGUgb2Jq
ZWN0IGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gcm9vdFVybCBpcyBhIHN0cmluZywgaXQncyB0
aGUgcm9vdCBVUkwgdG8gcHJlZml4IHRoZSBgZGVsYXlMb2FkaW5nRmlsZWAgcHJvcGVydHkgd2l0
aAorICAgICAqIEByZXR1cm5zIGEgbmV3IFRyYW5zZm9ybU5vZGUgb2JqZWN0IHBhcnNlZCBmcm9t
IHRoZSBzb3VyY2UgcHJvdmlkZWQuCisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5QYXJzZSA9
IGZ1bmN0aW9uIChwYXJzZWRUcmFuc2Zvcm1Ob2RlLCBzY2VuZSwgcm9vdFVybCkgeworICAgICAg
ICB2YXIgdHJhbnNmb3JtTm9kZSA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlBhcnNlKGZ1bmN0aW9uICgpIHsgcmV0
dXJuIG5ldyBUcmFuc2Zvcm1Ob2RlKHBhcnNlZFRyYW5zZm9ybU5vZGUubmFtZSwgc2NlbmUpOyB9
LCBwYXJzZWRUcmFuc2Zvcm1Ob2RlLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIGlmIChwYXJz
ZWRUcmFuc2Zvcm1Ob2RlLmxvY2FsTWF0cml4KSB7CisgICAgICAgICAgICB0cmFuc2Zvcm1Ob2Rl
LnNldFByZVRyYW5zZm9ybU1hdHJpeChfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siTWF0cml4Il0uRnJvbUFycmF5KHBhcnNlZFRyYW5zZm9ybU5vZGUubG9j
YWxNYXRyaXgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwYXJzZWRUcmFuc2Zvcm1O
b2RlLnBpdm90TWF0cml4KSB7CisgICAgICAgICAgICB0cmFuc2Zvcm1Ob2RlLnNldFBpdm90TWF0
cml4KF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJNYXRy
aXgiXS5Gcm9tQXJyYXkocGFyc2VkVHJhbnNmb3JtTm9kZS5waXZvdE1hdHJpeCkpOworICAgICAg
ICB9CisgICAgICAgIHRyYW5zZm9ybU5vZGUuc2V0RW5hYmxlZChwYXJzZWRUcmFuc2Zvcm1Ob2Rl
LmlzRW5hYmxlZCk7CisgICAgICAgIC8vIFBhcmVudAorICAgICAgICBpZiAocGFyc2VkVHJhbnNm
b3JtTm9kZS5wYXJlbnRJZCkgeworICAgICAgICAgICAgdHJhbnNmb3JtTm9kZS5fd2FpdGluZ1Bh
cmVudElkID0gcGFyc2VkVHJhbnNmb3JtTm9kZS5wYXJlbnRJZDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJhbnNmb3JtTm9kZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCBhbGwg
Y2hpbGQtdHJhbnNmb3JtTm9kZXMgb2YgdGhpcyBub2RlCisgICAgICogQHBhcmFtIGRpcmVjdERl
c2NlbmRhbnRzT25seSBkZWZpbmVzIGlmIHRydWUgb25seSBkaXJlY3QgZGVzY2VuZGFudHMgb2Yg
J3RoaXMnIHdpbGwgYmUgY29uc2lkZXJlZCwgaWYgZmFsc2UgZGlyZWN0IGFuZCBhbHNvIGluZGly
ZWN0IChjaGlsZHJlbiBvZiBjaGlsZHJlbiwgYW4gc28gb24gaW4gYSByZWN1cnNpdmUgbWFubmVy
KSBkZXNjZW5kYW50cyBvZiAndGhpcycgd2lsbCBiZSBjb25zaWRlcmVkCisgICAgICogQHBhcmFt
IHByZWRpY2F0ZSBkZWZpbmVzIGFuIG9wdGlvbmFsIHByZWRpY2F0ZSB0aGF0IHdpbGwgYmUgY2Fs
bGVkIG9uIGV2ZXJ5IGV2YWx1YXRlZCBjaGlsZCwgdGhlIHByZWRpY2F0ZSBtdXN0IHJldHVybiB0
cnVlIGZvciBhIGdpdmVuIGNoaWxkIHRvIGJlIHBhcnQgb2YgdGhlIHJlc3VsdCwgb3RoZXJ3aXNl
IGl0IHdpbGwgYmUgaWdub3JlZAorICAgICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIFRyYW5zZm9y
bU5vZGUKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5nZXRDaGlsZFRyYW5z
Zm9ybU5vZGVzID0gZnVuY3Rpb24gKGRpcmVjdERlc2NlbmRhbnRzT25seSwgcHJlZGljYXRlKSB7
CisgICAgICAgIHZhciByZXN1bHRzID0gW107CisgICAgICAgIHRoaXMuX2dldERlc2NlbmRhbnRz
KHJlc3VsdHMsIGRpcmVjdERlc2NlbmRhbnRzT25seSwgZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAg
ICAgICAgIHJldHVybiAoKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKG5vZGUpKSAmJiAobm9kZSBp
bnN0YW5jZW9mIFRyYW5zZm9ybU5vZGUpKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHRzOworICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZXMgcmVzb3VyY2VzIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIHRyYW5zZm9ybSBub2RlLgorICAgICAqIEBwYXJhbSBkb05vdFJlY3Vy
c2UgU2V0IHRvIHRydWUgdG8gbm90IHJlY3Vyc2UgaW50byBlYWNoIGNoaWxkcmVuIChyZWN1cnNl
IGludG8gZWFjaCBjaGlsZHJlbiBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBkaXNwb3NlTWF0
ZXJpYWxBbmRUZXh0dXJlcyBTZXQgdG8gdHJ1ZSB0byBhbHNvIGRpc3Bvc2UgcmVmZXJlbmNlZCBt
YXRlcmlhbHMgYW5kIHRleHR1cmVzIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqLworICAgIFRy
YW5zZm9ybU5vZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZG9Ob3RSZWN1cnNlLCBk
aXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcykgeworICAgICAgICBpZiAoZGlzcG9zZU1hdGVyaWFs
QW5kVGV4dHVyZXMgPT09IHZvaWQgMCkgeyBkaXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcyA9IGZh
bHNlOyB9CisgICAgICAgIC8vIEFuaW1hdGlvbnMKKyAgICAgICAgdGhpcy5nZXRTY2VuZSgpLnN0
b3BBbmltYXRpb24odGhpcyk7CisgICAgICAgIC8vIFJlbW92ZSBmcm9tIHNjZW5lCisgICAgICAg
IHRoaXMuZ2V0U2NlbmUoKS5yZW1vdmVUcmFuc2Zvcm1Ob2RlKHRoaXMpOworICAgICAgICB0aGlz
Lm9uQWZ0ZXJXb3JsZE1hdHJpeFVwZGF0ZU9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgaWYg
KGRvTm90UmVjdXJzZSkgeworICAgICAgICAgICAgdmFyIHRyYW5zZm9ybU5vZGVzID0gdGhpcy5n
ZXRDaGlsZFRyYW5zZm9ybU5vZGVzKHRydWUpOworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAw
LCB0cmFuc2Zvcm1Ob2Rlc18xID0gdHJhbnNmb3JtTm9kZXM7IF9pIDwgdHJhbnNmb3JtTm9kZXNf
MS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtTm9kZSA9IHRy
YW5zZm9ybU5vZGVzXzFbX2ldOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybU5vZGUucGFyZW50
ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ob2RlLmNvbXB1dGVXb3JsZE1hdHJp
eCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBfc3VwZXIucHJvdG90
eXBlLmRpc3Bvc2UuY2FsbCh0aGlzLCBkb05vdFJlY3Vyc2UsIGRpc3Bvc2VNYXRlcmlhbEFuZFRl
eHR1cmVzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVuaWZvcm1seSBzY2FsZXMgdGhlIG1l
c2ggdG8gZml0IGluc2lkZSBvZiBhIHVuaXQgY3ViZSAoMSBYIDEgWCAxIHVuaXRzKQorICAgICAq
IEBwYXJhbSBpbmNsdWRlRGVzY2VuZGFudHMgVXNlIHRoZSBoaWVyYXJjaHkncyBib3VuZGluZyBi
b3ggaW5zdGVhZCBvZiB0aGUgbWVzaCdzIGJvdW5kaW5nIGJveC4gRGVmYXVsdCBpcyBmYWxzZQor
ICAgICAqIEBwYXJhbSBpZ25vcmVSb3RhdGlvbiBpZ25vcmUgcm90YXRpb24gd2hlbiBjb21wdXRp
bmcgdGhlIHNjYWxlIChpZS4gb2JqZWN0IHdpbGwgYmUgYXhpcyBhbGlnbmVkKS4gRGVmYXVsdCBp
cyBmYWxzZQorICAgICAqIEBwYXJhbSBwcmVkaWNhdGUgcHJlZGljYXRlIHRoYXQgaXMgcGFzc2Vk
IGluIHRvIGdldEhpZXJhcmNoeUJvdW5kaW5nVmVjdG9ycyB3aGVuIHNlbGVjdGluZyB3aGljaCBv
YmplY3Qgc2hvdWxkIGJlIGluY2x1ZGVkIHdoZW4gc2NhbGluZworICAgICAqIEByZXR1cm5zIHRo
ZSBjdXJyZW50IG1lc2gKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5ub3Jt
YWxpemVUb1VuaXRDdWJlID0gZnVuY3Rpb24gKGluY2x1ZGVEZXNjZW5kYW50cywgaWdub3JlUm90
YXRpb24sIHByZWRpY2F0ZSkgeworICAgICAgICBpZiAoaW5jbHVkZURlc2NlbmRhbnRzID09PSB2
b2lkIDApIHsgaW5jbHVkZURlc2NlbmRhbnRzID0gdHJ1ZTsgfQorICAgICAgICBpZiAoaWdub3Jl
Um90YXRpb24gPT09IHZvaWQgMCkgeyBpZ25vcmVSb3RhdGlvbiA9IGZhbHNlOyB9CisgICAgICAg
IHZhciBzdG9yZWRSb3RhdGlvbiA9IG51bGw7CisgICAgICAgIHZhciBzdG9yZWRSb3RhdGlvblF1
YXRlcm5pb24gPSBudWxsOworICAgICAgICBpZiAoaWdub3JlUm90YXRpb24pIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIHN0b3Jl
ZFJvdGF0aW9uUXVhdGVybmlvbiA9IHRoaXMucm90YXRpb25RdWF0ZXJuaW9uLmNsb25lKCk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb21GbG9hdHMoMCwg
MCwgMCwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnJvdGF0
aW9uKSB7CisgICAgICAgICAgICAgICAgc3RvcmVkUm90YXRpb24gPSB0aGlzLnJvdGF0aW9uLmNs
b25lKCk7CisgICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi5jb3B5RnJvbUZsb2F0cygwLCAw
LCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgYm91bmRpbmdWZWN0
b3JzID0gdGhpcy5nZXRIaWVyYXJjaHlCb3VuZGluZ1ZlY3RvcnMoaW5jbHVkZURlc2NlbmRhbnRz
LCBwcmVkaWNhdGUpOworICAgICAgICB2YXIgc2l6ZVZlYyA9IGJvdW5kaW5nVmVjdG9ycy5tYXgu
c3VidHJhY3QoYm91bmRpbmdWZWN0b3JzLm1pbik7CisgICAgICAgIHZhciBtYXhEaW1lbnNpb24g
PSBNYXRoLm1heChzaXplVmVjLngsIHNpemVWZWMueSwgc2l6ZVZlYy56KTsKKyAgICAgICAgaWYg
KG1heERpbWVuc2lvbiA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIHNjYWxlID0gMSAvIG1heERpbWVuc2lvbjsKKyAgICAgICAgdGhpcy5z
Y2FsaW5nLnNjYWxlSW5QbGFjZShzY2FsZSk7CisgICAgICAgIGlmIChpZ25vcmVSb3RhdGlvbikg
eworICAgICAgICAgICAgaWYgKHRoaXMucm90YXRpb25RdWF0ZXJuaW9uICYmIHN0b3JlZFJvdGF0
aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9u
LmNvcHlGcm9tKHN0b3JlZFJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmICh0aGlzLnJvdGF0aW9uICYmIHN0b3JlZFJvdGF0aW9uKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi5jb3B5RnJvbShzdG9yZWRSb3RhdGlvbik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBU
cmFuc2Zvcm1Ob2RlLnByb3RvdHlwZS5fc3luY0Fic29sdXRlU2NhbGluZ0FuZFJvdGF0aW9uID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX2lzQWJzb2x1dGVTeW5jZWQpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4LmRlY29tcG9zZSh0aGlzLl9hYnNvbHV0ZVNjYWxp
bmcsIHRoaXMuX2Fic29sdXRlUm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgIHRoaXMu
X2lzQWJzb2x1dGVTeW5jZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfTsKKyAgICAvLyBTdGF0
aWNzCisgICAgLyoqCisgICAgICogT2JqZWN0IHdpbGwgbm90IHJvdGF0ZSB0byBmYWNlIHRoZSBj
YW1lcmEKKyAgICAgKi8KKyAgICBUcmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1PREVfTk9ORSA9IDA7
CisgICAgLyoqCisgICAgICogT2JqZWN0IHdpbGwgcm90YXRlIHRvIGZhY2UgdGhlIGNhbWVyYSBi
dXQgb25seSBvbiB0aGUgeCBheGlzCisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5CSUxMQk9B
UkRNT0RFX1ggPSAxOworICAgIC8qKgorICAgICAqIE9iamVjdCB3aWxsIHJvdGF0ZSB0byBmYWNl
IHRoZSBjYW1lcmEgYnV0IG9ubHkgb24gdGhlIHkgYXhpcworICAgICAqLworICAgIFRyYW5zZm9y
bU5vZGUuQklMTEJPQVJETU9ERV9ZID0gMjsKKyAgICAvKioKKyAgICAgKiBPYmplY3Qgd2lsbCBy
b3RhdGUgdG8gZmFjZSB0aGUgY2FtZXJhIGJ1dCBvbmx5IG9uIHRoZSB6IGF4aXMKKyAgICAgKi8K
KyAgICBUcmFuc2Zvcm1Ob2RlLkJJTExCT0FSRE1PREVfWiA9IDQ7CisgICAgLyoqCisgICAgICog
T2JqZWN0IHdpbGwgcm90YXRlIHRvIGZhY2UgdGhlIGNhbWVyYQorICAgICAqLworICAgIFRyYW5z
Zm9ybU5vZGUuQklMTEJPQVJETU9ERV9BTEwgPSA3OworICAgIC8qKgorICAgICAqIE9iamVjdCB3
aWxsIHJvdGF0ZSB0byBmYWNlIHRoZSBjYW1lcmEncyBwb3NpdGlvbiBpbnN0ZWFkIG9mIG9yaWVu
dGF0aW9uCisgICAgICovCisgICAgVHJhbnNmb3JtTm9kZS5CSUxMQk9BUkRNT0RFX1VTRV9QT1NJ
VElPTiA9IDEyODsKKyAgICBUcmFuc2Zvcm1Ob2RlLl9sb29rQXRWZWN0b3JDYWNoZSA9IG5ldyBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJd
KDAsIDAsIDApOworICAgIFRyYW5zZm9ybU5vZGUuX3JvdGF0aW9uQXhpc0NhY2hlID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9u
Il0oKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRl
Il0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJzZXJpYWxpemVBc1ZlY3RvcjMiXSkoInBvc2l0aW9uIikKKyAgICBdLCBUcmFu
c2Zvcm1Ob2RlLnByb3RvdHlwZSwgIl9wb3NpdGlvbiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
QXNWZWN0b3IzIl0pKCJyb3RhdGlvbiIpCisgICAgXSwgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUs
ICJfcm90YXRpb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzUXVhdGVybmlvbiJdKSgicm90
YXRpb25RdWF0ZXJuaW9uIikKKyAgICBdLCBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZSwgIl9yb3Rh
dGlvblF1YXRlcm5pb24iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVmVjdG9yMyJdKSgic2Nh
bGluZyIpCisgICAgXSwgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJfc2NhbGluZyIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCJiaWxsYm9hcmRNb2RlIikKKyAgICBdLCBUcmFuc2Zvcm1O
b2RlLnByb3RvdHlwZSwgIl9iaWxsYm9hcmRNb2RlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLCAic2NhbGluZ0RldGVybWluYW50
Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoImluZmluaXRlRGlzdGFuY2UiKQorICAgIF0s
IFRyYW5zZm9ybU5vZGUucHJvdG90eXBlLCAiX2luZmluaXRlRGlzdGFuY2UiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVHJhbnNmb3JtTm9kZS5wcm90b3R5cGUsICJpZ25v
cmVOb25Vbmlmb3JtU2NhbGluZyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBd
LCBUcmFuc2Zvcm1Ob2RlLnByb3RvdHlwZSwgInJlSW50ZWdyYXRlUm90YXRpb25JbnRvUm90YXRp
b25RdWF0ZXJuaW9uIiwgdm9pZCAwKTsKKyAgICByZXR1cm4gVHJhbnNmb3JtTm9kZTsKK30oX25v
ZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTm9kZSJdKSk7CisKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vTWlzYy9IaWdoRHluYW1pY1JhbmdlL2N1YmVtYXBUb1NwaGVyaWNhbFBv
bHlub21pYWwudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL0hpZ2hEeW5hbWljUmFu
Z2UvY3ViZW1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbC50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbFRvb2xzICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN1YmVNYXBUb1NwaGVyaWNhbFBvbHlu
b21pYWxUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5v
bWlhbFRvb2xzOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRo
LnNjYWxhciAqLyAiLi9NYXRocy9tYXRoLnNjYWxhci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRoc19zcGhlcmljYWxQb2x5bm9taWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9zcGhlcmljYWxQb2x5
bm9taWFsICovICIuL01hdGhzL3NwaGVyaWNhbFBvbHlub21pYWwudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL0VuZ2luZXMvY29uc3RhbnRzICov
ICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGhzX21hdGhfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLmNvbnN0YW50cyAqLyAiLi9NYXRocy9t
YXRoLmNvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRo
X2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsK
KworCisKKworCisKK3ZhciBGaWxlRmFjZU9yaWVudGF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEZpbGVGYWNlT3JpZW50YXRpb24obmFtZSwgd29ybGRB
eGlzRm9yTm9ybWFsLCB3b3JsZEF4aXNGb3JGaWxlWCwgd29ybGRBeGlzRm9yRmlsZVkpIHsKKyAg
ICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy53b3JsZEF4aXNGb3JOb3JtYWwg
PSB3b3JsZEF4aXNGb3JOb3JtYWw7CisgICAgICAgIHRoaXMud29ybGRBeGlzRm9yRmlsZVggPSB3
b3JsZEF4aXNGb3JGaWxlWDsKKyAgICAgICAgdGhpcy53b3JsZEF4aXNGb3JGaWxlWSA9IHdvcmxk
QXhpc0ZvckZpbGVZOworICAgIH0KKyAgICByZXR1cm4gRmlsZUZhY2VPcmllbnRhdGlvbjsKK30o
KSk7CisvKioKKyAqIEhlbHBlciBjbGFzcyBkZWFsaW5nIHdpdGggdGhlIGV4dHJhY3Rpb24gb2Yg
c3BoZXJpY2FsIHBvbHlub21pYWwgZGF0YUFycmF5CisgKiBmcm9tIGEgY3ViZSBtYXAuCisgKi8K
K3ZhciBDdWJlTWFwVG9TcGhlcmljYWxQb2x5bm9taWFsVG9vbHMgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbFRv
b2xzKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBDb252ZXJ0cyBhIHRleHR1cmUgdG8gdGhl
IGFjY29yZGluZyBTcGhlcmljYWwgUG9seW5vbWlhbCBkYXRhLgorICAgICAqIFRoaXMgZXh0cmFj
dHMgdGhlIGZpcnN0IDMgb3JkZXJzIG9ubHkgYXMgdGhleSBhcmUgdGhlIG9ubHkgb25lIHVzZWQg
aW4gdGhlIGxpZ2h0aW5nLgorICAgICAqCisgICAgICogQHBhcmFtIHRleHR1cmUgVGhlIHRleHR1
cmUgdG8gZXh0cmFjdCB0aGUgaW5mb3JtYXRpb24gZnJvbS4KKyAgICAgKiBAcmV0dXJuIFRoZSBT
cGhlcmljYWwgUG9seW5vbWlhbCBkYXRhLgorICAgICAqLworICAgIEN1YmVNYXBUb1NwaGVyaWNh
bFBvbHlub21pYWxUb29scy5Db252ZXJ0Q3ViZU1hcFRleHR1cmVUb1NwaGVyaWNhbFBvbHlub21p
YWwgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgICAgICBpZiAoIXRleHR1cmUuaXNDdWJlKSB7
CisgICAgICAgICAgICAvLyBPbmx5IHN1cHBvcnRzIGN1YmUgVGV4dHVyZXMgY3VycmVudGx5Lgor
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNpemUgPSB0
ZXh0dXJlLmdldFNpemUoKS53aWR0aDsKKyAgICAgICAgdmFyIHJpZ2h0ID0gdGV4dHVyZS5yZWFk
UGl4ZWxzKDApOworICAgICAgICB2YXIgbGVmdCA9IHRleHR1cmUucmVhZFBpeGVscygxKTsKKyAg
ICAgICAgdmFyIHVwOworICAgICAgICB2YXIgZG93bjsKKyAgICAgICAgaWYgKHRleHR1cmUuaXNS
ZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHVwID0gdGV4dHVyZS5yZWFkUGl4ZWxzKDMpOwor
ICAgICAgICAgICAgZG93biA9IHRleHR1cmUucmVhZFBpeGVscygyKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVwID0gdGV4dHVyZS5yZWFkUGl4ZWxzKDIpOworICAg
ICAgICAgICAgZG93biA9IHRleHR1cmUucmVhZFBpeGVscygzKTsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgZnJvbnQgPSB0ZXh0dXJlLnJlYWRQaXhlbHMoNCk7CisgICAgICAgIHZhciBiYWNrID0g
dGV4dHVyZS5yZWFkUGl4ZWxzKDUpOworICAgICAgICB2YXIgZ2FtbWFTcGFjZSA9IHRleHR1cmUu
Z2FtbWFTcGFjZTsKKyAgICAgICAgLy8gQWx3YXlzIHJlYWQgYXMgUkdCQS4KKyAgICAgICAgdmFy
IGZvcm1hdCA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJDb25zdGFudHMiXS5URVhUVVJFRk9STUFUX1JHQkE7CisgICAgICAgIHZhciB0eXBlID0gX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJd
LlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsKKyAgICAgICAgaWYgKHRleHR1cmUudGV4dHVyZVR5
cGUgJiYgdGV4dHVyZS50ZXh0dXJlVHlwZSAhPT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lO
VCkgeworICAgICAgICAgICAgdHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9BVDsKKyAgICAgICAg
fQorICAgICAgICB2YXIgY3ViZUluZm8gPSB7CisgICAgICAgICAgICBzaXplOiBzaXplLAorICAg
ICAgICAgICAgcmlnaHQ6IHJpZ2h0LAorICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAgICAgICAg
ICAgIHVwOiB1cCwKKyAgICAgICAgICAgIGRvd246IGRvd24sCisgICAgICAgICAgICBmcm9udDog
ZnJvbnQsCisgICAgICAgICAgICBiYWNrOiBiYWNrLAorICAgICAgICAgICAgZm9ybWF0OiBmb3Jt
YXQsCisgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgZ2FtbWFTcGFjZTogZ2Ft
bWFTcGFjZSwKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIHRoaXMuQ29udmVydEN1YmVNYXBU
b1NwaGVyaWNhbFBvbHlub21pYWwoY3ViZUluZm8pOworICAgIH07CisgICAgLyoqCisgICAgICog
Q29udmVydHMgYSBjdWJlbWFwIHRvIHRoZSBhY2NvcmRpbmcgU3BoZXJpY2FsIFBvbHlub21pYWwg
ZGF0YS4KKyAgICAgKiBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCAzIG9yZGVycyBvbmx5IGFzIHRo
ZXkgYXJlIHRoZSBvbmx5IG9uZSB1c2VkIGluIHRoZSBsaWdodGluZy4KKyAgICAgKgorICAgICAq
IEBwYXJhbSBjdWJlSW5mbyBUaGUgQ3ViZSBtYXAgdG8gZXh0cmFjdCB0aGUgaW5mb3JtYXRpb24g
ZnJvbS4KKyAgICAgKiBAcmV0dXJuIFRoZSBTcGhlcmljYWwgUG9seW5vbWlhbCBkYXRhLgorICAg
ICAqLworICAgIEN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29scy5Db252ZXJ0Q3ViZU1h
cFRvU3BoZXJpY2FsUG9seW5vbWlhbCA9IGZ1bmN0aW9uIChjdWJlSW5mbykgeworICAgICAgICB2
YXIgc3BoZXJpY2FsSGFybW9uaWNzID0gbmV3IF9NYXRoc19zcGhlcmljYWxQb2x5bm9taWFsX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNwaGVyaWNhbEhhcm1vbmljcyJdKCk7CisgICAg
ICAgIHZhciB0b3RhbFNvbGlkQW5nbGUgPSAwLjA7CisgICAgICAgIC8vIFRoZSAodSx2KSByYW5n
ZSBpcyBbLTEsKzFdLCBzbyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIHRleGVsIGlzIDIvU2l6
ZS4KKyAgICAgICAgdmFyIGR1ID0gMi4wIC8gY3ViZUluZm8uc2l6ZTsKKyAgICAgICAgdmFyIGR2
ID0gZHU7CisgICAgICAgIC8vIFRoZSAodSx2KSBvZiB0aGUgZmlyc3QgdGV4ZWwgaXMgaGFsZiBh
IHRleGVsIGZyb20gdGhlIGNvcm5lciAoLTEsLTEpLgorICAgICAgICB2YXIgbWluVVYgPSBkdSAq
IDAuNSAtIDEuMDsKKyAgICAgICAgZm9yICh2YXIgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwg
NjsgZmFjZUluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBmaWxlRmFjZSA9IHRoaXMuRmlsZUZh
Y2VzW2ZhY2VJbmRleF07CisgICAgICAgICAgICB2YXIgZGF0YUFycmF5ID0gY3ViZUluZm9bZmls
ZUZhY2UubmFtZV07CisgICAgICAgICAgICB2YXIgdiA9IG1pblVWOworICAgICAgICAgICAgLy8g
VE9ETzogd2UgY291bGQgcGVyZm9ybSB0aGUgc3VtbWF0aW9uIGRpcmVjdGx5IGludG8gYSBTcGhl
cmljYWxQb2x5bm9taWFsIChTUCksIHdoaWNoIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gU3BoZXJp
Y2FsSGFybW9uaWMgKFNIKS4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgcG9zc2libGUgYmVjYXVz
ZSBkdXJpbmcgdGhlIHN1bW1hdGlvbiB3ZSBkbyBub3QgbmVlZCB0aGUgU0gtc3BlY2lmaWMgcHJv
cGVydGllcywgZS5nLiBvcnRob2dvbmFsaXR5LgorICAgICAgICAgICAgLy8gQmVjYXVzZSBTUCBp
cyBzdGlsbCBsaW5lYXIsIHNvIHN1bW1hdGlvbiBpcyBmaW5lIGluIHRoYXQgYmFzaXMuCisgICAg
ICAgICAgICB2YXIgc3RyaWRlID0gY3ViZUluZm8uZm9ybWF0ID09PSBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1B
VF9SR0JBID8gNCA6IDM7CisgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGN1YmVJbmZv
LnNpemU7IHkrKykgeworICAgICAgICAgICAgICAgIHZhciB1ID0gbWluVVY7CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBjdWJlSW5mby5zaXplOyB4KyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gV29ybGQgZGlyZWN0aW9uIChub3Qgbm9ybWFsaXNlZCkKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHdvcmxkRGlyZWN0aW9uID0gZmlsZUZhY2Uud29ybGRBeGlzRm9yRmls
ZVguc2NhbGUodSkuYWRkKGZpbGVGYWNlLndvcmxkQXhpc0ZvckZpbGVZLnNjYWxlKHYpKS5hZGQo
ZmlsZUZhY2Uud29ybGRBeGlzRm9yTm9ybWFsKTsKKyAgICAgICAgICAgICAgICAgICAgd29ybGRE
aXJlY3Rpb24ubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YVNvbGlk
QW5nbGUgPSBNYXRoLnBvdygxLjAgKyB1ICogdSArIHYgKiB2LCAtMy4wIC8gMi4wKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHIgPSBkYXRhQXJyYXlbKHkgKiBjdWJlSW5mby5zaXplICogc3Ry
aWRlKSArICh4ICogc3RyaWRlKSArIDBdOworICAgICAgICAgICAgICAgICAgICB2YXIgZyA9IGRh
dGFBcnJheVsoeSAqIGN1YmVJbmZvLnNpemUgKiBzdHJpZGUpICsgKHggKiBzdHJpZGUpICsgMV07
CisgICAgICAgICAgICAgICAgICAgIHZhciBiID0gZGF0YUFycmF5Wyh5ICogY3ViZUluZm8uc2l6
ZSAqIHN0cmlkZSkgKyAoeCAqIHN0cmlkZSkgKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
UHJldmVudCBOYU4gaGFybW9uaWNzIHdpdGggZXh0cmVtZSBIRFJJIGRhdGEuCisgICAgICAgICAg
ICAgICAgICAgIGlmIChpc05hTihyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgciA9IDA7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKGcp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oYikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGIgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIEhhbmRsZSBJbnRlZ2VyIHR5cGVzLgorICAgICAgICAgICAgICAgICAgICBpZiAoY3ViZUlu
Zm8udHlwZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgciAvPSAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICBnIC89IDI1NTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGIgLz0gMjU1OworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBHYW1tYSBzcGFjZSB0ZXh0dXJlcy4KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGN1YmVJbmZvLmdhbW1hU3BhY2UpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHIgPSBNYXRoLnBvdyhfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siU2NhbGFyIl0uQ2xhbXAociksIF9NYXRoc19tYXRoX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUb0xpbmVhclNwYWNlIl0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgZyA9IE1hdGgucG93KF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2FsYXIiXS5DbGFtcChnKSwgX01hdGhzX21hdGhfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRvTGluZWFyU3BhY2UiXSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBiID0gTWF0aC5wb3coX01hdGhzX21hdGhfc2NhbGFyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjYWxhciJdLkNsYW1wKGIpLCBfTWF0aHNfbWF0
aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVG9MaW5lYXJTcGFjZSJd
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50
IHRvIGV4cGxvZGUgaW4gY2FzZSBvZiByZWFsbHkgaGlnaCBkeW5hbWljIHJhbmdlcy4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gc2ggMyB3b3VsZCBub3QgYmUgZW5vdWdoIHRvIGFjY3VyYXRlbHkg
cmVwcmVzZW50IGl0LgorICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gNDA5NjsKKyAgICAg
ICAgICAgICAgICAgICAgciA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJTY2FsYXIiXS5DbGFtcChyLCAwLCBtYXgpOworICAgICAgICAgICAgICAgICAg
ICBnID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNj
YWxhciJdLkNsYW1wKGcsIDAsIG1heCk7CisgICAgICAgICAgICAgICAgICAgIGIgPSBfTWF0aHNf
bWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NhbGFyIl0uQ2xhbXAo
YiwgMCwgbWF4KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gbmV3IF9NYXRoc19t
YXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNvbG9yMyJdKHIsIGcsIGIp
OworICAgICAgICAgICAgICAgICAgICBzcGhlcmljYWxIYXJtb25pY3MuYWRkTGlnaHQod29ybGRE
aXJlY3Rpb24sIGNvbG9yLCBkZWx0YVNvbGlkQW5nbGUpOworICAgICAgICAgICAgICAgICAgICB0
b3RhbFNvbGlkQW5nbGUgKz0gZGVsdGFTb2xpZEFuZ2xlOworICAgICAgICAgICAgICAgICAgICB1
ICs9IGR1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2ICs9IGR2OworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFNvbGlkIGFuZ2xlIGZvciBlbnRpcmUg
c3BoZXJlIGlzIDQqcGkKKyAgICAgICAgdmFyIHNwaGVyZVNvbGlkQW5nbGUgPSA0LjAgKiBNYXRo
LlBJOworICAgICAgICAvLyBBZGp1c3QgdGhlIHNvbGlkIGFuZ2xlIHRvIGFsbG93IGZvciBob3cg
bWFueSBmYWNlcyB3ZSBwcm9jZXNzZWQuCisgICAgICAgIHZhciBmYWNlc1Byb2Nlc3NlZCA9IDYu
MDsKKyAgICAgICAgdmFyIGV4cGVjdGVkU29saWRBbmdsZSA9IHNwaGVyZVNvbGlkQW5nbGUgKiBm
YWNlc1Byb2Nlc3NlZCAvIDYuMDsKKyAgICAgICAgLy8gQWRqdXN0IHRoZSBoYXJtb25pY3Mgc28g
dGhhdCB0aGUgYWNjdW11bGF0ZWQgc29saWQgYW5nbGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgc29s
aWQgYW5nbGUuCisgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIG51bWVyaWNh
bCBpbnRlZ3JhdGlvbiBvdmVyIHRoZSBjdWJlIHVzZXMgYQorICAgICAgICAvLyBzbWFsbCBhbmds
ZSBhcHByb3hpbWF0aW9uIG9mIHNvbGlkIGFuZ2xlIGZvciBlYWNoIHRleGVsIChzZWUgZGVsdGFT
b2xpZEFuZ2xlKSwKKyAgICAgICAgLy8gYW5kIGFsc28gdG8gY29tcGVuc2F0ZSBmb3IgYWNjdW11
bGF0aXZlIGVycm9yIGR1ZSB0byBmbG9hdCBwcmVjaXNpb24gaW4gdGhlIHN1bW1hdGlvbi4KKyAg
ICAgICAgdmFyIGNvcnJlY3Rpb25GYWN0b3IgPSBleHBlY3RlZFNvbGlkQW5nbGUgLyB0b3RhbFNv
bGlkQW5nbGU7CisgICAgICAgIHNwaGVyaWNhbEhhcm1vbmljcy5zY2FsZUluUGxhY2UoY29ycmVj
dGlvbkZhY3Rvcik7CisgICAgICAgIHNwaGVyaWNhbEhhcm1vbmljcy5jb252ZXJ0SW5jaWRlbnRS
YWRpYW5jZVRvSXJyYWRpYW5jZSgpOworICAgICAgICBzcGhlcmljYWxIYXJtb25pY3MuY29udmVy
dElycmFkaWFuY2VUb0xhbWJlcnRpYW5SYWRpYW5jZSgpOworICAgICAgICByZXR1cm4gX01hdGhz
X3NwaGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU3BoZXJp
Y2FsUG9seW5vbWlhbCJdLkZyb21IYXJtb25pY3Moc3BoZXJpY2FsSGFybW9uaWNzKTsKKyAgICB9
OworICAgIEN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29scy5GaWxlRmFjZXMgPSBbCisg
ICAgICAgIG5ldyBGaWxlRmFjZU9yaWVudGF0aW9uKCJyaWdodCIsIG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDEsIDAsIDApLCBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3Rv
cjMiXSgwLCAwLCAtMSksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIC0xLCAwKSksCisgICAgICAgIG5ldyBGaWxlRmFjZU9y
aWVudGF0aW9uKCJsZWZ0IiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oLTEsIDAsIDApLCBuZXcgX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAwLCAxKSwgbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0o
MCwgLTEsIDApKSwKKyAgICAgICAgbmV3IEZpbGVGYWNlT3JpZW50YXRpb24oInVwIiwgbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0o
MCwgMSwgMCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVjdG9yMyJdKDEsIDAsIDApLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAwLCAxKSksCisgICAgICAgIG5ldyBG
aWxlRmFjZU9yaWVudGF0aW9uKCJkb3duIiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMCwgLTEsIDApLCBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgxLCAwLCAw
KSwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0oMCwgMCwgLTEpKSwKKyAgICAgICAgbmV3IEZpbGVGYWNlT3JpZW50YXRpb24oImZy
b250IiwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0oMCwgMCwgMSksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDEsIDAsIDApLCBuZXcgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAtMSwgMCkpLAor
ICAgICAgICBuZXcgRmlsZUZhY2VPcmllbnRhdGlvbigiYmFjayIsIG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIDAsIC0xKSwg
bmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0
b3IzIl0oLTEsIDAsIDApLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAtMSwgMCkpIC8vIC1aIGJvdHRvbQorICAgIF07Cisg
ICAgcmV0dXJuIEN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29sczsKK30oKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9IaWdoRHluYW1pY1JhbmdlL2hkci50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlz
Yy9IaWdoRHluYW1pY1JhbmdlL2hkci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBIRFJUb29scyAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJIRFJUb29scyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gSERSVG9vbHM7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5vcmFtYVRv
Q3ViZW1hcF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9wYW5vcmFtYVRvQ3ViZW1hcCAqLyAiLi9NaXNjL0hpZ2hEeW5hbWljUmFuZ2UvcGFu
b3JhbWFUb0N1YmVtYXAudHMiKTsKKworLyoqCisgKiBUaGlzIGdyb3VwcyB0b29scyB0byBjb252
ZXJ0IEhEUiB0ZXh0dXJlIHRvIG5hdGl2ZSBjb2xvcnMgYXJyYXkuCisgKi8KK3ZhciBIRFJUb29s
cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBIRFJUb29scygp
IHsKKyAgICB9CisgICAgSERSVG9vbHMuTGRleHAgPSBmdW5jdGlvbiAobWFudGlzc2EsIGV4cG9u
ZW50KSB7CisgICAgICAgIGlmIChleHBvbmVudCA+IDEwMjMpIHsKKyAgICAgICAgICAgIHJldHVy
biBtYW50aXNzYSAqIE1hdGgucG93KDIsIDEwMjMpICogTWF0aC5wb3coMiwgZXhwb25lbnQgLSAx
MDIzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXhwb25lbnQgPCAtMTA3NCkgeworICAgICAg
ICAgICAgcmV0dXJuIG1hbnRpc3NhICogTWF0aC5wb3coMiwgLTEwNzQpICogTWF0aC5wb3coMiwg
ZXhwb25lbnQgKyAxMDc0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWFudGlzc2EgKiBN
YXRoLnBvdygyLCBleHBvbmVudCk7CisgICAgfTsKKyAgICBIRFJUb29scy5SZ2JlMmZsb2F0ID0g
ZnVuY3Rpb24gKGZsb2F0MzJhcnJheSwgcmVkLCBncmVlbiwgYmx1ZSwgZXhwb25lbnQsIGluZGV4
KSB7CisgICAgICAgIGlmIChleHBvbmVudCA+IDApIHsgLypub256ZXJvIHBpeGVsKi8KKyAgICAg
ICAgICAgIGV4cG9uZW50ID0gdGhpcy5MZGV4cCgxLjAsIGV4cG9uZW50IC0gKDEyOCArIDgpKTsK
KyAgICAgICAgICAgIGZsb2F0MzJhcnJheVtpbmRleCArIDBdID0gcmVkICogZXhwb25lbnQ7Cisg
ICAgICAgICAgICBmbG9hdDMyYXJyYXlbaW5kZXggKyAxXSA9IGdyZWVuICogZXhwb25lbnQ7Cisg
ICAgICAgICAgICBmbG9hdDMyYXJyYXlbaW5kZXggKyAyXSA9IGJsdWUgKiBleHBvbmVudDsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZsb2F0MzJhcnJheVtpbmRleCAr
IDBdID0gMDsKKyAgICAgICAgICAgIGZsb2F0MzJhcnJheVtpbmRleCArIDFdID0gMDsKKyAgICAg
ICAgICAgIGZsb2F0MzJhcnJheVtpbmRleCArIDJdID0gMDsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgSERSVG9vbHMucmVhZFN0cmluZ0xpbmUgPSBmdW5jdGlvbiAodWludDhhcnJheSwgc3RhcnRJ
bmRleCkgeworICAgICAgICB2YXIgbGluZSA9ICIiOworICAgICAgICB2YXIgY2hhcmFjdGVyID0g
IiI7CisgICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgdWludDhhcnJheS5sZW5n
dGggLSBzdGFydEluZGV4OyBpKyspIHsKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IFN0cmluZy5m
cm9tQ2hhckNvZGUodWludDhhcnJheVtpXSk7CisgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09
ICJcbiIpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGxpbmUgKz0gY2hhcmFjdGVyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsaW5lOwor
ICAgIH07CisgICAgLyoqCisgICAgICogUmVhZHMgaGVhZGVyIGluZm9ybWF0aW9uIGZyb20gYW4g
UkdCRSB0ZXh0dXJlIHN0b3JlZCBpbiBhIG5hdGl2ZSBhcnJheS4KKyAgICAgKiBNb3JlIGluZm9y
bWF0aW9uIG9uIHRoaXMgZm9ybWF0IGFyZSBhdmFpbGFibGUgaGVyZToKKyAgICAgKiBodHRwczov
L2VuLndpa2lwZWRpYS5vcmcvd2lraS9SR0JFX2ltYWdlX2Zvcm1hdAorICAgICAqCisgICAgICog
QHBhcmFtIHVpbnQ4YXJyYXkgVGhlIGJpbmFyeSBmaWxlIHN0b3JlZCBpbiAgbmF0aXZlIGFycmF5
LgorICAgICAqIEByZXR1cm4gVGhlIGhlYWRlciBpbmZvcm1hdGlvbi4KKyAgICAgKi8KKyAgICBI
RFJUb29scy5SR0JFX1JlYWRIZWFkZXIgPSBmdW5jdGlvbiAodWludDhhcnJheSkgeworICAgICAg
ICB2YXIgaGVpZ2h0ID0gMDsKKyAgICAgICAgdmFyIHdpZHRoID0gMDsKKyAgICAgICAgdmFyIGxp
bmUgPSB0aGlzLnJlYWRTdHJpbmdMaW5lKHVpbnQ4YXJyYXksIDApOworICAgICAgICBpZiAobGlu
ZVswXSAhPSAnIycgfHwgbGluZVsxXSAhPSAnPycpIHsKKyAgICAgICAgICAgIHRocm93ICJCYWQg
SERSIEZvcm1hdC4iOworICAgICAgICB9CisgICAgICAgIHZhciBlbmRPZkhlYWRlciA9IGZhbHNl
OworICAgICAgICB2YXIgZmluZEZvcm1hdCA9IGZhbHNlOworICAgICAgICB2YXIgbGluZUluZGV4
ID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgbGluZUluZGV4ICs9IChsaW5lLmxlbmd0
aCArIDEpOworICAgICAgICAgICAgbGluZSA9IHRoaXMucmVhZFN0cmluZ0xpbmUodWludDhhcnJh
eSwgbGluZUluZGV4KTsKKyAgICAgICAgICAgIGlmIChsaW5lID09ICJGT1JNQVQ9MzItYml0X3Js
ZV9yZ2JlIikgeworICAgICAgICAgICAgICAgIGZpbmRGb3JtYXQgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobGluZS5sZW5ndGggPT0gMCkgeworICAgICAgICAg
ICAgICAgIGVuZE9mSGVhZGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGls
ZSAoIWVuZE9mSGVhZGVyKTsKKyAgICAgICAgaWYgKCFmaW5kRm9ybWF0KSB7CisgICAgICAgICAg
ICB0aHJvdyAiSERSIEJhZCBoZWFkZXIgZm9ybWF0LCB1bnN1cHBvcnRlZCBGT1JNQVQiOworICAg
ICAgICB9CisgICAgICAgIGxpbmVJbmRleCArPSAobGluZS5sZW5ndGggKyAxKTsKKyAgICAgICAg
bGluZSA9IHRoaXMucmVhZFN0cmluZ0xpbmUodWludDhhcnJheSwgbGluZUluZGV4KTsKKyAgICAg
ICAgdmFyIHNpemVSZWdleHAgPSAvXlwtWSAoLiopIFwrWCAoLiopJC9nOworICAgICAgICB2YXIg
bWF0Y2ggPSBzaXplUmVnZXhwLmV4ZWMobGluZSk7CisgICAgICAgIC8vIFRPRE8uIFN1cHBvcnQg
K1kgYW5kIC1YIGlmIG5lZWRlZC4KKyAgICAgICAgaWYgKCFtYXRjaCB8fCBtYXRjaC5sZW5ndGgg
PCAzKSB7CisgICAgICAgICAgICB0aHJvdyAiSERSIEJhZCBoZWFkZXIgZm9ybWF0LCBubyBzaXpl
IjsKKyAgICAgICAgfQorICAgICAgICB3aWR0aCA9IHBhcnNlSW50KG1hdGNoWzJdKTsKKyAgICAg
ICAgaGVpZ2h0ID0gcGFyc2VJbnQobWF0Y2hbMV0pOworICAgICAgICBpZiAod2lkdGggPCA4IHx8
IHdpZHRoID4gMHg3ZmZmKSB7CisgICAgICAgICAgICB0aHJvdyAiSERSIEJhZCBoZWFkZXIgZm9y
bWF0LCB1bnN1cHBvcnRlZCBzaXplIjsKKyAgICAgICAgfQorICAgICAgICBsaW5lSW5kZXggKz0g
KGxpbmUubGVuZ3RoICsgMSk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBoZWlnaHQ6
IGhlaWdodCwKKyAgICAgICAgICAgIHdpZHRoOiB3aWR0aCwKKyAgICAgICAgICAgIGRhdGFQb3Np
dGlvbjogbGluZUluZGV4CisgICAgICAgIH07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1
cm5zIHRoZSBjdWJlbWFwIGluZm9ybWF0aW9uIChlYWNoIGZhY2VzIHRleHR1cmUgZGF0YSkgZXh0
cmFjdGVkIGZyb20gYW4gUkdCRSB0ZXh0dXJlLgorICAgICAqIFRoaXMgUkdCRSB0ZXh0dXJlIG5l
ZWRzIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBhcyBhIHBhbm9yYW1hLgorICAgICAqCisgICAg
ICogTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGZvcm1hdCBhcmUgYXZhaWxhYmxlIGhlcmU6Cisg
ICAgICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUkdCRV9pbWFnZV9mb3JtYXQKKyAg
ICAgKgorICAgICAqIEBwYXJhbSBidWZmZXIgVGhlIGJpbmFyeSBmaWxlIHN0b3JlZCBpbiBhbiBh
cnJheSBidWZmZXIuCisgICAgICogQHBhcmFtIHNpemUgVGhlIGV4cGVjdGVkIHNpemUgb2YgdGhl
IGV4dHJhY3RlZCBjdWJlbWFwLgorICAgICAqIEByZXR1cm4gVGhlIEN1YmUgTWFwIGluZm9ybWF0
aW9uLgorICAgICAqLworICAgIEhEUlRvb2xzLkdldEN1YmVNYXBUZXh0dXJlRGF0YSA9IGZ1bmN0
aW9uIChidWZmZXIsIHNpemUpIHsKKyAgICAgICAgdmFyIHVpbnQ4YXJyYXkgPSBuZXcgVWludDhB
cnJheShidWZmZXIpOworICAgICAgICB2YXIgaGRySW5mbyA9IHRoaXMuUkdCRV9SZWFkSGVhZGVy
KHVpbnQ4YXJyYXkpOworICAgICAgICB2YXIgZGF0YSA9IHRoaXMuUkdCRV9SZWFkUGl4ZWxzX1JM
RSh1aW50OGFycmF5LCBoZHJJbmZvKTsKKyAgICAgICAgdmFyIGN1YmVNYXBEYXRhID0gX3Bhbm9y
YW1hVG9DdWJlbWFwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBhbm9yYW1hVG9DdWJl
TWFwVG9vbHMiXS5Db252ZXJ0UGFub3JhbWFUb0N1YmVtYXAoZGF0YSwgaGRySW5mby53aWR0aCwg
aGRySW5mby5oZWlnaHQsIHNpemUpOworICAgICAgICByZXR1cm4gY3ViZU1hcERhdGE7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBwaXhlbHMgZGF0YSBleHRyYWN0ZWQgZnJv
bSBhbiBSR0JFIHRleHR1cmUuCisgICAgICogVGhpcyBwaXhlbHMgd2lsbCBiZSBzdG9yZWQgbGVm
dCB0byByaWdodCB1cCB0byBkb3duIGluIHRoZSBSIEcgQiBvcmRlciBpbiBvbmUgYXJyYXkuCisg
ICAgICoKKyAgICAgKiBNb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZm9ybWF0IGFyZSBhdmFpbGFi
bGUgaGVyZToKKyAgICAgKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SR0JFX2ltYWdl
X2Zvcm1hdAorICAgICAqCisgICAgICogQHBhcmFtIHVpbnQ4YXJyYXkgVGhlIGJpbmFyeSBmaWxl
IHN0b3JlZCBpbiBhbiBhcnJheSBidWZmZXIuCisgICAgICogQHBhcmFtIGhkckluZm8gVGhlIGhl
YWRlciBpbmZvcm1hdGlvbiBvZiB0aGUgZmlsZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBwaXhlbHMg
ZGF0YSBpbiBSR0IgcmlnaHQgdG8gbGVmdCB1cCB0byBkb3duIG9yZGVyLgorICAgICAqLworICAg
IEhEUlRvb2xzLlJHQkVfUmVhZFBpeGVscyA9IGZ1bmN0aW9uICh1aW50OGFycmF5LCBoZHJJbmZv
KSB7CisgICAgICAgIC8vIEtlZXAgZm9yIG11bHRpIGZvcm1hdCBzdXBwb3J0cy4KKyAgICAgICAg
cmV0dXJuIHRoaXMuUkdCRV9SZWFkUGl4ZWxzX1JMRSh1aW50OGFycmF5LCBoZHJJbmZvKTsKKyAg
ICB9OworICAgIEhEUlRvb2xzLlJHQkVfUmVhZFBpeGVsc19STEUgPSBmdW5jdGlvbiAodWludDhh
cnJheSwgaGRySW5mbykgeworICAgICAgICB2YXIgbnVtX3NjYW5saW5lcyA9IGhkckluZm8uaGVp
Z2h0OworICAgICAgICB2YXIgc2NhbmxpbmVfd2lkdGggPSBoZHJJbmZvLndpZHRoOworICAgICAg
ICB2YXIgYSwgYiwgYywgZCwgY291bnQ7CisgICAgICAgIHZhciBkYXRhSW5kZXggPSBoZHJJbmZv
LmRhdGFQb3NpdGlvbjsKKyAgICAgICAgdmFyIGluZGV4ID0gMCwgZW5kSW5kZXggPSAwLCBpID0g
MDsKKyAgICAgICAgdmFyIHNjYW5MaW5lQXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc2Nh
bmxpbmVfd2lkdGggKiA0KTsgLy8gZm91ciBjaGFubmVsIFIgRyBCIEUKKyAgICAgICAgdmFyIHNj
YW5MaW5lQXJyYXkgPSBuZXcgVWludDhBcnJheShzY2FuTGluZUFycmF5QnVmZmVyKTsKKyAgICAg
ICAgLy8gMyBjaGFubmVscyBvZiA0IGJ5dGVzIHBlciBwaXhlbCBpbiBmbG9hdC4KKyAgICAgICAg
dmFyIHJlc3VsdEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihoZHJJbmZvLndpZHRoICogaGRySW5m
by5oZWlnaHQgKiA0ICogMyk7CisgICAgICAgIHZhciByZXN1bHRBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkocmVzdWx0QnVmZmVyKTsKKyAgICAgICAgLy8gcmVhZCBpbiBlYWNoIHN1Y2Nlc3NpdmUg
c2NhbmxpbmUKKyAgICAgICAgd2hpbGUgKG51bV9zY2FubGluZXMgPiAwKSB7CisgICAgICAgICAg
ICBhID0gdWludDhhcnJheVtkYXRhSW5kZXgrK107CisgICAgICAgICAgICBiID0gdWludDhhcnJh
eVtkYXRhSW5kZXgrK107CisgICAgICAgICAgICBjID0gdWludDhhcnJheVtkYXRhSW5kZXgrK107
CisgICAgICAgICAgICBkID0gdWludDhhcnJheVtkYXRhSW5kZXgrK107CisgICAgICAgICAgICBp
ZiAoYSAhPSAyIHx8IGIgIT0gMiB8fCAoYyAmIDB4ODApKSB7CisgICAgICAgICAgICAgICAgLy8g
dGhpcyBmaWxlIGlzIG5vdCBydW4gbGVuZ3RoIGVuY29kZWQKKyAgICAgICAgICAgICAgICB0aHJv
dyAiSERSIEJhZCBoZWFkZXIgZm9ybWF0LCBub3QgUkxFIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICgoKGMgPDwgOCkgfCBkKSAhPSBzY2FubGluZV93aWR0aCkgeworICAgICAgICAg
ICAgICAgIHRocm93ICJIRFIgQmFkIGhlYWRlciBmb3JtYXQsIHdyb25nIHNjYW4gbGluZSB3aWR0
aCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgICAgICAgICAv
LyByZWFkIGVhY2ggb2YgdGhlIGZvdXIgY2hhbm5lbHMgZm9yIHRoZSBzY2FubGluZSBpbnRvIHRo
ZSBidWZmZXIKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBlbmRJbmRleCA9IChpICsgMSkgKiBzY2FubGluZV93aWR0aDsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBlbmRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBhID0g
dWludDhhcnJheVtkYXRhSW5kZXgrK107CisgICAgICAgICAgICAgICAgICAgIGIgPSB1aW50OGFy
cmF5W2RhdGFJbmRleCsrXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGEgPiAxMjgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGEgcnVuIG9mIHRoZSBzYW1lIHZhbHVlCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudCA9IGEgLSAxMjg7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoKGNvdW50ID09IDApIHx8IChjb3VudCA+IGVuZEluZGV4IC0gaW5kZXgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkhEUiBCYWQgRm9ybWF0LCBiYWQgc2Nhbmxp
bmUgZGF0YSAocnVuKSI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoY291bnQtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY2FuTGluZUFycmF5W2luZGV4KytdID0gYjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGEgbm9uLXJ1bgorICAgICAgICAgICAgICAgICAgICAg
ICAgY291bnQgPSBhOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjb3VudCA9PSAwKSB8
fCAoY291bnQgPiBlbmRJbmRleCAtIGluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93ICJIRFIgQmFkIEZvcm1hdCwgYmFkIHNjYW5saW5lIGRhdGEgKG5vbi1ydW4pIjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5M
aW5lQXJyYXlbaW5kZXgrK10gPSBiOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0tY291
bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGog
PCBjb3VudDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5MaW5l
QXJyYXlbaW5kZXgrK10gPSB1aW50OGFycmF5W2RhdGFJbmRleCsrXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBub3cgY29udmVydCBkYXRhIGZyb20gYnVmZmVyIGludG8gZmxvYXRzCisgICAgICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgc2NhbmxpbmVfd2lkdGg7IGkrKykgeworICAgICAgICAgICAgICAgIGEg
PSBzY2FuTGluZUFycmF5W2ldOworICAgICAgICAgICAgICAgIGIgPSBzY2FuTGluZUFycmF5W2kg
KyBzY2FubGluZV93aWR0aF07CisgICAgICAgICAgICAgICAgYyA9IHNjYW5MaW5lQXJyYXlbaSAr
IDIgKiBzY2FubGluZV93aWR0aF07CisgICAgICAgICAgICAgICAgZCA9IHNjYW5MaW5lQXJyYXlb
aSArIDMgKiBzY2FubGluZV93aWR0aF07CisgICAgICAgICAgICAgICAgdGhpcy5SZ2JlMmZsb2F0
KHJlc3VsdEFycmF5LCBhLCBiLCBjLCBkLCAoaGRySW5mby5oZWlnaHQgLSBudW1fc2NhbmxpbmVz
KSAqIHNjYW5saW5lX3dpZHRoICogMyArIGkgKiAzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG51bV9zY2FubGluZXMtLTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0QXJy
YXk7CisgICAgfTsKKyAgICByZXR1cm4gSERSVG9vbHM7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL01pc2MvSGlnaER5bmFtaWNSYW5nZS9pbmRleC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL0hpZ2hE
eW5hbWljUmFuZ2UvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDdWJlTWFwVG9TcGhlcmljYWxQ
b2x5bm9taWFsVG9vbHMsIEhEUlRvb2xzLCBQYW5vcmFtYVRvQ3ViZU1hcFRvb2xzICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY3ViZW1hcFRvU3BoZXJpY2Fs
UG9seW5vbWlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9jdWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsICovICIuL01pc2MvSGlnaER5
bmFtaWNSYW5nZS9jdWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29scyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2N1YmVtYXBUb1NwaGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbFRvb2xzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2hkcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9oZHIgKi8gIi4vTWlzYy9IaWdoRHluYW1pY1Jhbmdl
L2hkci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJIRFJUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2hkcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJIRFJUb29scyJdOyB9KTsKKwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYW5vcmFtYVRvQ3ViZW1hcF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wYW5vcmFtYVRvQ3Vi
ZW1hcCAqLyAiLi9NaXNjL0hpZ2hEeW5hbWljUmFuZ2UvcGFub3JhbWFUb0N1YmVtYXAudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUGFub3JhbWFUb0N1YmVNYXBUb29scyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX3Bhbm9yYW1hVG9DdWJlbWFwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBh
bm9yYW1hVG9DdWJlTWFwVG9vbHMiXTsgfSk7CisKKworCisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWlzYy9IaWdoRHluYW1pY1JhbmdlL3Bhbm9yYW1hVG9DdWJlbWFwLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL01pc2MvSGlnaER5bmFtaWNSYW5nZS9wYW5vcmFtYVRvQ3ViZW1hcC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBhbm9yYW1hVG9DdWJlTWFwVG9vbHMgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFub3JhbWFUb0N1YmVNYXBUb29scyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gUGFub3JhbWFUb0N1YmVNYXBUb29sczsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAi
Li9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFu
dHMudHMiKTsKKworCisvKioKKyAqIEhlbHBlciBjbGFzcyB1c2VmdWwgdG8gY29udmVydCBwYW5v
cmFtYSBwaWN0dXJlIHRvIHRoZWlyIGN1YmVtYXAgcmVwcmVzZW50YXRpb24gaW4gNiBmYWNlcy4K
KyAqLwordmFyIFBhbm9yYW1hVG9DdWJlTWFwVG9vbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoKSB7CisgICAgZnVuY3Rpb24gUGFub3JhbWFUb0N1YmVNYXBUb29scygpIHsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogQ29udmVydHMgYSBwYW5vcm1hIHN0b3JlZCBpbiBSR0IgcmlnaHQgdG8g
bGVmdCB1cCB0byBkb3duIGZvcm1hdCBpbnRvIGEgY3ViZW1hcCAoNiBmYWNlcykuCisgICAgICoK
KyAgICAgKiBAcGFyYW0gZmxvYXQzMkFycmF5IFRoZSBzb3VyY2UgZGF0YS4KKyAgICAgKiBAcGFy
YW0gaW5wdXRXaWR0aCBUaGUgd2lkdGggb2YgdGhlIGlucHV0IHBhbm9yYW1hLgorICAgICAqIEBw
YXJhbSBpbnB1dEhlaWdodCBUaGUgaGVpZ2h0IG9mIHRoZSBpbnB1dCBwYW5vcmFtYS4KKyAgICAg
KiBAcGFyYW0gc2l6ZSBUaGUgd2lsbGluZyBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgY3ViZW1hcCAo
ZWFjaCBmYWNlcyB3aWxsIGJlIHNpemUgKiBzaXplIHBpeGVscykKKyAgICAgKiBAcmV0dXJuIFRo
ZSBjdWJlbWFwIGRhdGEKKyAgICAgKi8KKyAgICBQYW5vcmFtYVRvQ3ViZU1hcFRvb2xzLkNvbnZl
cnRQYW5vcmFtYVRvQ3ViZW1hcCA9IGZ1bmN0aW9uIChmbG9hdDMyQXJyYXksIGlucHV0V2lkdGgs
IGlucHV0SGVpZ2h0LCBzaXplKSB7CisgICAgICAgIGlmICghZmxvYXQzMkFycmF5KSB7CisgICAg
ICAgICAgICB0aHJvdyAiQ29udmVydFBhbm9yYW1hVG9DdWJlbWFwOiBpbnB1dCBjYW5ub3QgYmUg
bnVsbCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZsb2F0MzJBcnJheS5sZW5ndGggIT0gaW5w
dXRXaWR0aCAqIGlucHV0SGVpZ2h0ICogMykgeworICAgICAgICAgICAgdGhyb3cgIkNvbnZlcnRQ
YW5vcmFtYVRvQ3ViZW1hcDogaW5wdXQgc2l6ZSBpcyB3cm9uZyI7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHRleHR1cmVGcm9udCA9IHRoaXMuQ3JlYXRlQ3ViZW1hcFRleHR1cmUoc2l6ZSwgdGhp
cy5GQUNFX0ZST05ULCBmbG9hdDMyQXJyYXksIGlucHV0V2lkdGgsIGlucHV0SGVpZ2h0KTsKKyAg
ICAgICAgdmFyIHRleHR1cmVCYWNrID0gdGhpcy5DcmVhdGVDdWJlbWFwVGV4dHVyZShzaXplLCB0
aGlzLkZBQ0VfQkFDSywgZmxvYXQzMkFycmF5LCBpbnB1dFdpZHRoLCBpbnB1dEhlaWdodCk7Cisg
ICAgICAgIHZhciB0ZXh0dXJlTGVmdCA9IHRoaXMuQ3JlYXRlQ3ViZW1hcFRleHR1cmUoc2l6ZSwg
dGhpcy5GQUNFX0xFRlQsIGZsb2F0MzJBcnJheSwgaW5wdXRXaWR0aCwgaW5wdXRIZWlnaHQpOwor
ICAgICAgICB2YXIgdGV4dHVyZVJpZ2h0ID0gdGhpcy5DcmVhdGVDdWJlbWFwVGV4dHVyZShzaXpl
LCB0aGlzLkZBQ0VfUklHSFQsIGZsb2F0MzJBcnJheSwgaW5wdXRXaWR0aCwgaW5wdXRIZWlnaHQp
OworICAgICAgICB2YXIgdGV4dHVyZVVwID0gdGhpcy5DcmVhdGVDdWJlbWFwVGV4dHVyZShzaXpl
LCB0aGlzLkZBQ0VfVVAsIGZsb2F0MzJBcnJheSwgaW5wdXRXaWR0aCwgaW5wdXRIZWlnaHQpOwor
ICAgICAgICB2YXIgdGV4dHVyZURvd24gPSB0aGlzLkNyZWF0ZUN1YmVtYXBUZXh0dXJlKHNpemUs
IHRoaXMuRkFDRV9ET1dOLCBmbG9hdDMyQXJyYXksIGlucHV0V2lkdGgsIGlucHV0SGVpZ2h0KTsK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGZyb250OiB0ZXh0dXJlRnJvbnQsCisgICAg
ICAgICAgICBiYWNrOiB0ZXh0dXJlQmFjaywKKyAgICAgICAgICAgIGxlZnQ6IHRleHR1cmVMZWZ0
LAorICAgICAgICAgICAgcmlnaHQ6IHRleHR1cmVSaWdodCwKKyAgICAgICAgICAgIHVwOiB0ZXh0
dXJlVXAsCisgICAgICAgICAgICBkb3duOiB0ZXh0dXJlRG93biwKKyAgICAgICAgICAgIHNpemU6
IHNpemUsCisgICAgICAgICAgICB0eXBlOiBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfRkxPQVQsCisgICAgICAg
ICAgICBmb3JtYXQ6IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJDb25zdGFudHMiXS5URVhUVVJFRk9STUFUX1JHQiwKKyAgICAgICAgICAgIGdhbW1hU3Bh
Y2U6IGZhbHNlLAorICAgICAgICB9OworICAgIH07CisgICAgUGFub3JhbWFUb0N1YmVNYXBUb29s
cy5DcmVhdGVDdWJlbWFwVGV4dHVyZSA9IGZ1bmN0aW9uICh0ZXhTaXplLCBmYWNlRGF0YSwgZmxv
YXQzMkFycmF5LCBpbnB1dFdpZHRoLCBpbnB1dEhlaWdodCkgeworICAgICAgICB2YXIgYnVmZmVy
ID0gbmV3IEFycmF5QnVmZmVyKHRleFNpemUgKiB0ZXhTaXplICogNCAqIDMpOworICAgICAgICB2
YXIgdGV4dHVyZUFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIpOworICAgICAgICB2YXIg
cm90RFgxID0gZmFjZURhdGFbMV0uc3VidHJhY3QoZmFjZURhdGFbMF0pLnNjYWxlKDEgLyB0ZXhT
aXplKTsKKyAgICAgICAgdmFyIHJvdERYMiA9IGZhY2VEYXRhWzNdLnN1YnRyYWN0KGZhY2VEYXRh
WzJdKS5zY2FsZSgxIC8gdGV4U2l6ZSk7CisgICAgICAgIHZhciBkeSA9IDEgLyB0ZXhTaXplOwor
ICAgICAgICB2YXIgZnkgPSAwOworICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHRleFNpemU7
IHkrKykgeworICAgICAgICAgICAgdmFyIHh2MSA9IGZhY2VEYXRhWzBdOworICAgICAgICAgICAg
dmFyIHh2MiA9IGZhY2VEYXRhWzJdOworICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0
ZXhTaXplOyB4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgdiA9IHh2Mi5zdWJ0cmFjdCh4djEp
LnNjYWxlKGZ5KS5hZGQoeHYxKTsKKyAgICAgICAgICAgICAgICB2Lm5vcm1hbGl6ZSgpOworICAg
ICAgICAgICAgICAgIHZhciBjb2xvciA9IHRoaXMuQ2FsY1Byb2plY3Rpb25TcGhlcmljYWwodiwg
ZmxvYXQzMkFycmF5LCBpbnB1dFdpZHRoLCBpbnB1dEhlaWdodCk7CisgICAgICAgICAgICAgICAg
Ly8gMyBjaGFubmVscyBwZXIgcGl4ZWxzCisgICAgICAgICAgICAgICAgdGV4dHVyZUFycmF5W3kg
KiB0ZXhTaXplICogMyArICh4ICogMykgKyAwXSA9IGNvbG9yLnI7CisgICAgICAgICAgICAgICAg
dGV4dHVyZUFycmF5W3kgKiB0ZXhTaXplICogMyArICh4ICogMykgKyAxXSA9IGNvbG9yLmc7Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZUFycmF5W3kgKiB0ZXhTaXplICogMyArICh4ICogMykgKyAy
XSA9IGNvbG9yLmI7CisgICAgICAgICAgICAgICAgeHYxID0geHYxLmFkZChyb3REWDEpOworICAg
ICAgICAgICAgICAgIHh2MiA9IHh2Mi5hZGQocm90RFgyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZ5ICs9IGR5OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0ZXh0dXJlQXJyYXk7
CisgICAgfTsKKyAgICBQYW5vcmFtYVRvQ3ViZU1hcFRvb2xzLkNhbGNQcm9qZWN0aW9uU3BoZXJp
Y2FsID0gZnVuY3Rpb24gKHZEaXIsIGZsb2F0MzJBcnJheSwgaW5wdXRXaWR0aCwgaW5wdXRIZWln
aHQpIHsKKyAgICAgICAgdmFyIHRoZXRhID0gTWF0aC5hdGFuMih2RGlyLnosIHZEaXIueCk7Cisg
ICAgICAgIHZhciBwaGkgPSBNYXRoLmFjb3ModkRpci55KTsKKyAgICAgICAgd2hpbGUgKHRoZXRh
IDwgLU1hdGguUEkpIHsKKyAgICAgICAgICAgIHRoZXRhICs9IDIgKiBNYXRoLlBJOworICAgICAg
ICB9CisgICAgICAgIHdoaWxlICh0aGV0YSA+IE1hdGguUEkpIHsKKyAgICAgICAgICAgIHRoZXRh
IC09IDIgKiBNYXRoLlBJOworICAgICAgICB9CisgICAgICAgIHZhciBkeCA9IHRoZXRhIC8gTWF0
aC5QSTsKKyAgICAgICAgdmFyIGR5ID0gcGhpIC8gTWF0aC5QSTsKKyAgICAgICAgLy8gcmVjZW50
ZXIuCisgICAgICAgIGR4ID0gZHggKiAwLjUgKyAwLjU7CisgICAgICAgIHZhciBweCA9IE1hdGgu
cm91bmQoZHggKiBpbnB1dFdpZHRoKTsKKyAgICAgICAgaWYgKHB4IDwgMCkgeworICAgICAgICAg
ICAgcHggPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB4ID49IGlucHV0V2lkdGgp
IHsKKyAgICAgICAgICAgIHB4ID0gaW5wdXRXaWR0aCAtIDE7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIHB5ID0gTWF0aC5yb3VuZChkeSAqIGlucHV0SGVpZ2h0KTsKKyAgICAgICAgaWYgKHB5IDwg
MCkgeworICAgICAgICAgICAgcHkgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB5
ID49IGlucHV0SGVpZ2h0KSB7CisgICAgICAgICAgICBweSA9IGlucHV0SGVpZ2h0IC0gMTsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgaW5wdXRZID0gKGlucHV0SGVpZ2h0IC0gcHkgLSAxKTsKKyAg
ICAgICAgdmFyIHIgPSBmbG9hdDMyQXJyYXlbaW5wdXRZICogaW5wdXRXaWR0aCAqIDMgKyAocHgg
KiAzKSArIDBdOworICAgICAgICB2YXIgZyA9IGZsb2F0MzJBcnJheVtpbnB1dFkgKiBpbnB1dFdp
ZHRoICogMyArIChweCAqIDMpICsgMV07CisgICAgICAgIHZhciBiID0gZmxvYXQzMkFycmF5W2lu
cHV0WSAqIGlucHV0V2lkdGggKiAzICsgKHB4ICogMykgKyAyXTsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIHI6IHIsCisgICAgICAgICAgICBnOiBnLAorICAgICAgICAgICAgYjogYgor
ICAgICAgICB9OworICAgIH07CisgICAgUGFub3JhbWFUb0N1YmVNYXBUb29scy5GQUNFX0ZST05U
ID0gWworICAgICAgICBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXSgtMS4wLCAtMS4wLCAtMS4wKSwKKyAgICAgICAgbmV3IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMS4w
LCAtMS4wLCAtMS4wKSwKKyAgICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oLTEuMCwgMS4wLCAtMS4wKSwKKyAgICAgICAg
bmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0
b3IzIl0oMS4wLCAxLjAsIC0xLjApCisgICAgXTsKKyAgICBQYW5vcmFtYVRvQ3ViZU1hcFRvb2xz
LkZBQ0VfQkFDSyA9IFsKKyAgICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMS4wLCAtMS4wLCAxLjApLAorICAgICAgICBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3Rv
cjMiXSgtMS4wLCAtMS4wLCAxLjApLAorICAgICAgICBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgxLjAsIDEuMCwgMS4wKSwKKyAg
ICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJWZWN0b3IzIl0oLTEuMCwgMS4wLCAxLjApCisgICAgXTsKKyAgICBQYW5vcmFtYVRvQ3ViZU1h
cFRvb2xzLkZBQ0VfUklHSFQgPSBbCisgICAgICAgIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDEuMCwgLTEuMCwgLTEuMCksCisg
ICAgICAgIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdKDEuMCwgLTEuMCwgMS4wKSwKKyAgICAgICAgbmV3IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMS4wLCAxLjAsIC0x
LjApLAorICAgICAgICBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXSgxLjAsIDEuMCwgMS4wKQorICAgIF07CisgICAgUGFub3JhbWFU
b0N1YmVNYXBUb29scy5GQUNFX0xFRlQgPSBbCisgICAgICAgIG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKC0xLjAsIC0xLjAsIDEu
MCksCisgICAgICAgIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siVmVjdG9yMyJdKC0xLjAsIC0xLjAsIC0xLjApLAorICAgICAgICBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgtMS4w
LCAxLjAsIDEuMCksCisgICAgICAgIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKC0xLjAsIDEuMCwgLTEuMCkKKyAgICBdOworICAg
IFBhbm9yYW1hVG9DdWJlTWFwVG9vbHMuRkFDRV9ET1dOID0gWworICAgICAgICBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgtMS4w
LCAxLjAsIC0xLjApLAorICAgICAgICBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgxLjAsIDEuMCwgLTEuMCksCisgICAgICAgIG5l
dyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9y
MyJdKC0xLjAsIDEuMCwgMS4wKSwKKyAgICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMS4wLCAxLjAsIDEuMCkKKyAgICBd
OworICAgIFBhbm9yYW1hVG9DdWJlTWFwVG9vbHMuRkFDRV9VUCA9IFsKKyAgICAgICAgbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0o
LTEuMCwgLTEuMCwgMS4wKSwKKyAgICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMS4wLCAtMS4wLCAxLjApLAorICAgICAg
ICBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXSgtMS4wLCAtMS4wLCAtMS4wKSwKKyAgICAgICAgbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMS4wLCAtMS4wLCAtMS4w
KQorICAgIF07CisgICAgcmV0dXJuIFBhbm9yYW1hVG9DdWJlTWFwVG9vbHM7Cit9KCkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2MvYW5kT3JOb3RFdmFsdWF0b3IudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvYW5k
T3JOb3RFdmFsdWF0b3IudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQW5kT3JOb3RFdmFsdWF0b3IgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5kT3JOb3RFdmFsdWF0b3IiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEFuZE9yTm90RXZhbHVhdG9yOyB9KTsKKy8qKgorICogQ2xhc3MgdXNlZCB0
byBldmFsYXV0ZSBxdWVyaWVzIGNvbnRhaW5pbmcgYGFuZGAgYW5kIGBvcmAgb3BlcmF0b3JzCisg
Ki8KK3ZhciBBbmRPck5vdEV2YWx1YXRvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICBmdW5jdGlvbiBBbmRPck5vdEV2YWx1YXRvcigpIHsKKyAgICB9CisgICAgLyoqCisgICAg
ICogRXZhbHVhdGUgYSBxdWVyeQorICAgICAqIEBwYXJhbSBxdWVyeSBkZWZpbmVzIHRoZSBxdWVy
eSB0byBldmFsdWF0ZQorICAgICAqIEBwYXJhbSBldmFsdWF0ZUNhbGxiYWNrIGRlZmluZXMgdGhl
IGNhbGxiYWNrIHVzZWQgdG8gZmlsdGVyIHJlc3VsdAorICAgICAqIEByZXR1cm5zIHRydWUgaWYg
dGhlIHF1ZXJ5IG1hdGNoZXMKKyAgICAgKi8KKyAgICBBbmRPck5vdEV2YWx1YXRvci5FdmFsID0g
ZnVuY3Rpb24gKHF1ZXJ5LCBldmFsdWF0ZUNhbGxiYWNrKSB7CisgICAgICAgIGlmICghcXVlcnku
bWF0Y2goL1woW15cKFwpXSpcKS9nKSkgeworICAgICAgICAgICAgcXVlcnkgPSBBbmRPck5vdEV2
YWx1YXRvci5fSGFuZGxlUGFyZW50aGVzaXNDb250ZW50KHF1ZXJ5LCBldmFsdWF0ZUNhbGxiYWNr
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnku
cmVwbGFjZSgvXChbXlwoXCldKlwpL2csIGZ1bmN0aW9uIChyKSB7CisgICAgICAgICAgICAgICAg
Ly8gcmVtb3ZlIHBhcmVudGhlc2lzCisgICAgICAgICAgICAgICAgciA9IHIuc2xpY2UoMSwgci5s
ZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQW5kT3JOb3RFdmFsdWF0b3IuX0hh
bmRsZVBhcmVudGhlc2lzQ29udGVudChyLCBldmFsdWF0ZUNhbGxiYWNrKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIGlmIChxdWVyeSA9PT0gInRydWUiKSB7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocXVlcnkgPT09ICJmYWxz
ZSIpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gQW5kT3JOb3RFdmFsdWF0b3IuRXZhbChxdWVyeSwgZXZhbHVhdGVDYWxsYmFjayk7CisgICAg
fTsKKyAgICBBbmRPck5vdEV2YWx1YXRvci5fSGFuZGxlUGFyZW50aGVzaXNDb250ZW50ID0gZnVu
Y3Rpb24gKHBhcmVudGhlc2lzQ29udGVudCwgZXZhbHVhdGVDYWxsYmFjaykgeworICAgICAgICBl
dmFsdWF0ZUNhbGxiYWNrID0gZXZhbHVhdGVDYWxsYmFjayB8fCAoZnVuY3Rpb24gKHIpIHsKKyAg
ICAgICAgICAgIHJldHVybiByID09PSAidHJ1ZSIgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIH0p
OworICAgICAgICB2YXIgcmVzdWx0OworICAgICAgICB2YXIgb3IgPSBwYXJlbnRoZXNpc0NvbnRl
bnQuc3BsaXQoInx8Iik7CisgICAgICAgIGZvciAodmFyIGkgaW4gb3IpIHsKKyAgICAgICAgICAg
IGlmIChvci5oYXNPd25Qcm9wZXJ0eShpKSkgeworICAgICAgICAgICAgICAgIHZhciBvcmkgPSBB
bmRPck5vdEV2YWx1YXRvci5fU2ltcGxpZnlOZWdhdGlvbihvcltpXS50cmltKCkpOworICAgICAg
ICAgICAgICAgIHZhciBhbmQgPSBvcmkuc3BsaXQoIiYmIik7CisgICAgICAgICAgICAgICAgaWYg
KGFuZC5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgYW5kLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5kaiA9
IEFuZE9yTm90RXZhbHVhdG9yLl9TaW1wbGlmeU5lZ2F0aW9uKGFuZFtqXS50cmltKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFuZGogIT09ICJ0cnVlIiAmJiBhbmRqICE9PSAiZmFs
c2UiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuZGpbMF0gPT09ICIhIikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAhZXZhbHVhdGVDYWxs
YmFjayhhbmRqLnN1YnN0cmluZygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBldmFsdWF0ZUNhbGxiYWNrKGFuZGopOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGFuZGogPT09ICJ0cnVlIiA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7IC8vIG5vIG5lZWQgdG8g
Y29udGludWUgc2luY2UgJ2ZhbHNlICYmIC4uLiAmJiAuLi4nIHdpbGwgYWx3YXlzIHJldHVybiBm
YWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaSA9ICJmYWxzZSI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdCB8fCBvcmkgPT09ICJ0cnVlIikgeyAvLyBubyBuZWVkIHRvIGNvbnRpbnVlIHNp
bmNlICd0cnVlIHx8IC4uLiB8fCAuLi4nIHdpbGwgYWx3YXlzIHJldHVybiB0cnVlCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyByZXN1bHQgZXF1YWxzIGZhbHNl
IChvciB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAgaWYgKG9yaSAhPT0gInRydWUiICYmIG9y
aSAhPT0gImZhbHNlIikgeworICAgICAgICAgICAgICAgICAgICBpZiAob3JpWzBdID09PSAiISIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICFldmFsdWF0ZUNhbGxiYWNrKG9y
aS5zdWJzdHJpbmcoMSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZXZhbHVhdGVDYWxs
YmFjayhvcmkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBvcmkgPT09
ICJ0cnVlIiA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgLy8gdGhlIHdob2xlIHBhcmVudGhlc2lzIHNjb3BlIGlzIHJl
cGxhY2VkIGJ5ICd0cnVlJyBvciAnZmFsc2UnCisgICAgICAgIHJldHVybiByZXN1bHQgPyAidHJ1
ZSIgOiAiZmFsc2UiOworICAgIH07CisgICAgQW5kT3JOb3RFdmFsdWF0b3IuX1NpbXBsaWZ5TmVn
YXRpb24gPSBmdW5jdGlvbiAoYm9vbGVhblN0cmluZykgeworICAgICAgICBib29sZWFuU3RyaW5n
ID0gYm9vbGVhblN0cmluZy5yZXBsYWNlKC9eW1xzIV0rLywgZnVuY3Rpb24gKHIpIHsKKyAgICAg
ICAgICAgIC8vIHJlbW92ZSB3aGl0ZXNwYWNlcworICAgICAgICAgICAgciA9IHIucmVwbGFjZSgv
W1xzXS9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiAiIjsgfSk7CisgICAgICAgICAgICByZXR1cm4g
ci5sZW5ndGggJSAyID8gIiEiIDogIiI7CisgICAgICAgIH0pOworICAgICAgICBib29sZWFuU3Ry
aW5nID0gYm9vbGVhblN0cmluZy50cmltKCk7CisgICAgICAgIGlmIChib29sZWFuU3RyaW5nID09
PSAiIXRydWUiKSB7CisgICAgICAgICAgICBib29sZWFuU3RyaW5nID0gImZhbHNlIjsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChib29sZWFuU3RyaW5nID09PSAiIWZhbHNlIikgeworICAg
ICAgICAgICAgYm9vbGVhblN0cmluZyA9ICJ0cnVlIjsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gYm9vbGVhblN0cmluZzsKKyAgICB9OworICAgIHJldHVybiBBbmRPck5vdEV2YWx1YXRvcjsK
K30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9hcnJheVRvb2xzLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvYXJyYXlU
b29scy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IEFycmF5VG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiQXJyYXlUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXJyYXlUb29sczsgfSk7Cisv
KioKKyAqIENsYXNzIGNvbnRhaW5pbmcgYSBzZXQgb2Ygc3RhdGljIHV0aWxpdGllcyBmdW5jdGlv
bnMgZm9yIGFycmF5cy4KKyAqLwordmFyIEFycmF5VG9vbHMgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgZnVuY3Rpb24gQXJyYXlUb29scygpIHsKKyAgICB9CisgICAgLyoqCisg
ICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB0aGUgZ2l2ZW4gc2l6ZSBmaWxsZWQgd2l0aCBlbGVt
ZW50IGJ1aWx0IGZyb20gdGhlIGdpdmVuIGNvbnN0cnVjdG9yIGFuZCB0aGUgcGFyYW10ZXJzCisg
ICAgICogQHBhcmFtIHNpemUgdGhlIG51bWJlciBvZiBlbGVtZW50IHRvIGNvbnN0cnVjdCBhbmQg
cHV0IGluIHRoZSBhcnJheQorICAgICAqIEBwYXJhbSBpdGVtQnVpbGRlciBhIGNhbGxiYWNrIHJl
c3BvbnNpYmxlIGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2Ugb2YgaXRlbS4gQ2FsbGVkIG9uY2Ug
cGVyIGFycmF5IGVudHJ5LgorICAgICAqIEByZXR1cm5zIGEgbmV3IGFycmF5IGZpbGxlZCB3aXRo
IG5ldyBvYmplY3RzCisgICAgICovCisgICAgQXJyYXlUb29scy5CdWlsZEFycmF5ID0gZnVuY3Rp
b24gKHNpemUsIGl0ZW1CdWlsZGVyKSB7CisgICAgICAgIHZhciBhID0gW107CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBhLnB1c2goaXRlbUJ1
aWxkZXIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGE7CisgICAgfTsKKyAgICByZXR1
cm4gQXJyYXlUb29sczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9h
c3NldHNNYW5hZ2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL01pc2MvYXNzZXRzTWFuYWdlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFzc2V0VGFza1N0YXRlLCBB
YnN0cmFjdEFzc2V0VGFzaywgQXNzZXRzUHJvZ3Jlc3NFdmVudCwgTWVzaEFzc2V0VGFzaywgVGV4
dEZpbGVBc3NldFRhc2ssIEJpbmFyeUZpbGVBc3NldFRhc2ssIEltYWdlQXNzZXRUYXNrLCBUZXh0
dXJlQXNzZXRUYXNrLCBDdWJlVGV4dHVyZUFzc2V0VGFzaywgSERSQ3ViZVRleHR1cmVBc3NldFRh
c2ssIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNzZXRUYXNrLCBBc3NldHNNYW5hZ2VyICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFzc2V0VGFza1N0YXRlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBBc3NldFRhc2tTdGF0ZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJB
YnN0cmFjdEFzc2V0VGFzayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQWJzdHJhY3RBc3NldFRhc2s7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXNzZXRzUHJvZ3Jlc3NFdmVudCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gQXNzZXRzUHJvZ3Jlc3NFdmVudDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNZXNo
QXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNZXNoQXNzZXRUYXNrOyB9KTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlRleHRGaWxlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUZXh0
RmlsZUFzc2V0VGFzazsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCaW5hcnlGaWxlQXNzZXRUYXNr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBCaW5hcnlGaWxlQXNzZXRUYXNrOyB9KTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkltYWdlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJbWFnZUFzc2V0
VGFzazsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUZXh0dXJlQXNzZXRUYXNrIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBUZXh0dXJlQXNzZXRUYXNrOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN1YmVU
ZXh0dXJlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDdWJlVGV4dHVyZUFzc2V0VGFz
azsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJIRFJDdWJlVGV4dHVyZUFzc2V0VGFzayIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gSERSQ3ViZVRleHR1cmVBc3NldFRhc2s7IH0pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmVBc3NldFRhc2siLCBmdW5jdGlvbigpIHsg
cmV0dXJuIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNzZXRUYXNrOyB9KTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkFzc2V0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFzc2V0c01hbmFn
ZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9M
b2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9Mb2FkaW5nL3NjZW5lTG9hZGVyICovICIuL0xvYWRpbmcvc2Nl
bmVMb2FkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9vbHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdG9vbHMgKi8g
Ii4vTWlzYy90b29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9vYnNlcnZhYmxl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMv
dGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfY3ViZVRleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFs
cy9UZXh0dXJlcy9jdWJlVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvY3ViZVRleHR1
cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2hk
ckN1YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvaGRyQ3ViZVRleHR1cmUgKi8gIi4vTWF0
ZXJpYWxzL1RleHR1cmVzL2hkckN1YmVUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19lcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
ZXJpYWxzL1RleHR1cmVzL2VxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlICovICIuL01hdGVyaWFs
cy9UZXh0dXJlcy9lcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIu
dHMiKTsKKworCisKKworCisKKworCisKKy8qKgorICogRGVmaW5lcyB0aGUgbGlzdCBvZiBzdGF0
ZXMgYXZhaWxhYmxlIGZvciBhIHRhc2sgaW5zaWRlIGEgQXNzZXRzTWFuYWdlcgorICovCit2YXIg
QXNzZXRUYXNrU3RhdGU7CisoZnVuY3Rpb24gKEFzc2V0VGFza1N0YXRlKSB7CisgICAgLyoqCisg
ICAgICogSW5pdGlhbGl6YXRpb24KKyAgICAgKi8KKyAgICBBc3NldFRhc2tTdGF0ZVtBc3NldFRh
c2tTdGF0ZVsiSU5JVCJdID0gMF0gPSAiSU5JVCI7CisgICAgLyoqCisgICAgICogUnVubmluZwor
ICAgICAqLworICAgIEFzc2V0VGFza1N0YXRlW0Fzc2V0VGFza1N0YXRlWyJSVU5OSU5HIl0gPSAx
XSA9ICJSVU5OSU5HIjsKKyAgICAvKioKKyAgICAgKiBEb25lCisgICAgICovCisgICAgQXNzZXRU
YXNrU3RhdGVbQXNzZXRUYXNrU3RhdGVbIkRPTkUiXSA9IDJdID0gIkRPTkUiOworICAgIC8qKgor
ICAgICAqIEVycm9yCisgICAgICovCisgICAgQXNzZXRUYXNrU3RhdGVbQXNzZXRUYXNrU3RhdGVb
IkVSUk9SIl0gPSAzXSA9ICJFUlJPUiI7Cit9KShBc3NldFRhc2tTdGF0ZSB8fCAoQXNzZXRUYXNr
U3RhdGUgPSB7fSkpOworLyoqCisgKiBEZWZpbmUgYW4gYWJzdHJhY3QgYXNzZXQgdGFzayB1c2Vk
IHdpdGggYSBBc3NldHNNYW5hZ2VyIGNsYXNzIHRvIGxvYWQgYXNzZXRzIGludG8gYSBzY2VuZQor
ICovCit2YXIgQWJzdHJhY3RBc3NldFRhc2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBBc3NldHNNYW5hZ2VyCisgICAgICogQHBh
cmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgdGFzaworICAgICAqLworICAgIGZ1bmN0
aW9uIEFic3RyYWN0QXNzZXRUYXNrKAorICAgIC8qKgorICAgICAqIFRhc2sgbmFtZQorICAgICAq
LyBuYW1lKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMuX2lzQ29t
cGxldGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3Rhc2tTdGF0ZSA9IEFzc2V0VGFza1N0YXRl
LklOSVQ7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnN0cmFjdEFzc2V0VGFz
ay5wcm90b3R5cGUsICJpc0NvbXBsZXRlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dCBpZiB0aGUgdGFzayBpcyBjb21wbGV0ZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ29tcGxldGVkOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RBc3NldFRhc2su
cHJvdG90eXBlLCAidGFza1N0YXRlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0
aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdGFzaworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFza1N0YXRlOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWJzdHJhY3RBc3NldFRhc2su
cHJvdG90eXBlLCAiZXJyb3JPYmplY3QiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IHRoZSBjdXJyZW50IGVycm9yIG9iamVjdCAoaWYgdGFzayBpcyBpbiBlcnJvcikKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2Vycm9yT2JqZWN0OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBJbnRlcm5h
bCBvbmx5CisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIEFic3RyYWN0QXNzZXRUYXNrLnBy
b3RvdHlwZS5fc2V0RXJyb3JPYmplY3QgPSBmdW5jdGlvbiAobWVzc2FnZSwgZXhjZXB0aW9uKSB7
CisgICAgICAgIGlmICh0aGlzLl9lcnJvck9iamVjdCkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2Vycm9yT2JqZWN0ID0geworICAgICAgICAgICAgbWVz
c2FnZTogbWVzc2FnZSwKKyAgICAgICAgICAgIGV4Y2VwdGlvbjogZXhjZXB0aW9uCisgICAgICAg
IH07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBh
c3NldHMgdG8gYmUgbG9hZGVkCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNr
IGNhbGxlZCB3aGVuIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBw
YXJhbSBvbkVycm9yIGlzIGEgY2FsbGJhY2sgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAg
ICAqLworICAgIEFic3RyYWN0QXNzZXRUYXNrLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoc2Nl
bmUsIG9uU3VjY2Vzcywgb25FcnJvcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICB0aGlzLl90YXNrU3RhdGUgPSBBc3NldFRhc2tTdGF0ZS5SVU5OSU5HOworICAgICAgICB0
aGlzLnJ1blRhc2soc2NlbmUsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLm9uRG9u
ZUNhbGxiYWNrKG9uU3VjY2Vzcywgb25FcnJvcik7CisgICAgICAgIH0sIGZ1bmN0aW9uIChtc2cs
IGV4Y2VwdGlvbikgeworICAgICAgICAgICAgX3RoaXMub25FcnJvckNhbGxiYWNrKG9uRXJyb3Is
IG1zZywgZXhjZXB0aW9uKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBF
eGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUg
c2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBhc3NldHMgdG8gYmUgbG9hZGVkCisgICAgICogQHBh
cmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSB0YXNrIGlzIHN1Y2Nl
c3NmdWxseSBleGVjdXRlZAorICAgICAqIEBwYXJhbSBvbkVycm9yIGlzIGEgY2FsbGJhY2sgY2Fs
bGVkIGlmIGFuIGVycm9yIG9jY3VycworICAgICAqLworICAgIEFic3RyYWN0QXNzZXRUYXNrLnBy
b3RvdHlwZS5ydW5UYXNrID0gZnVuY3Rpb24gKHNjZW5lLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJydW5UYXNrIGlzIG5vdCBpbXBsZW1lbnRlZCIpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogUmVzZXQgd2lsbCBzZXQgdGhlIHRhc2sgc3RhdGUgYmFj
ayB0byBJTklULCBzbyB0aGUgbmV4dCBsb2FkIGNhbGwgb2YgdGhlIGFzc2V0cyBtYW5hZ2VyIHdp
bGwgZXhlY3V0ZSB0aGlzIHRhc2sgYWdhaW4uCisgICAgICogVGhpcyBjYW4gYmUgdXNlZCB3aXRo
IGZhaWxlZCB0YXNrcyB0aGF0IGhhdmUgdGhlIHJlYXNvbiBmb3IgZmFpbHVyZSBmaXhlZC4KKyAg
ICAgKi8KKyAgICBBYnN0cmFjdEFzc2V0VGFzay5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRoaXMuX3Rhc2tTdGF0ZSA9IEFzc2V0VGFza1N0YXRlLklOSVQ7CisgICAg
fTsKKyAgICBBYnN0cmFjdEFzc2V0VGFzay5wcm90b3R5cGUub25FcnJvckNhbGxiYWNrID0gZnVu
Y3Rpb24gKG9uRXJyb3IsIG1lc3NhZ2UsIGV4Y2VwdGlvbikgeworICAgICAgICB0aGlzLl90YXNr
U3RhdGUgPSBBc3NldFRhc2tTdGF0ZS5FUlJPUjsKKyAgICAgICAgdGhpcy5fZXJyb3JPYmplY3Qg
PSB7CisgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLAorICAgICAgICAgICAgZXhjZXB0aW9u
OiBleGNlcHRpb24KKyAgICAgICAgfTsKKyAgICAgICAgaWYgKHRoaXMub25FcnJvcikgeworICAg
ICAgICAgICAgdGhpcy5vbkVycm9yKHRoaXMsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7CisgICAgICAg
IH0KKyAgICAgICAgb25FcnJvcigpOworICAgIH07CisgICAgQWJzdHJhY3RBc3NldFRhc2sucHJv
dG90eXBlLm9uRG9uZUNhbGxiYWNrID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25FcnJvcikgewor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhpcy5fdGFza1N0YXRlID0gQXNzZXRUYXNrU3Rh
dGUuRE9ORTsKKyAgICAgICAgICAgIHRoaXMuX2lzQ29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGlmICh0aGlzLm9uU3VjY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMub25TdWNjZXNz
KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb25TdWNjZXNzKCk7CisgICAgICAg
IH0KKyAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHRoaXMub25FcnJvckNhbGxiYWNr
KG9uRXJyb3IsICJUYXNrIGlzIGRvbmUsIGVycm9yIGV4ZWN1dGluZyBzdWNjZXNzIGNhbGxiYWNr
KHMpIiwgZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBBYnN0cmFjdEFzc2V0VGFz
azsKK30oKSk7CisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBzaGFyZSBwcm9ncmVzcyBpbmZvcm1h
dGlvbiBhYm91dCBhc3NldHMgbG9hZGluZworICovCit2YXIgQXNzZXRzUHJvZ3Jlc3NFdmVudCA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEg
QXNzZXRzUHJvZ3Jlc3NFdmVudAorICAgICAqIEBwYXJhbSByZW1haW5pbmdDb3VudCBkZWZpbmVz
IHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHRhc2tzIHRvIHByb2Nlc3MKKyAgICAgKiBAcGFyYW0g
dG90YWxDb3VudCBkZWZpbmVzIHRoZSB0b3RhbCBudW1iZXIgb2YgdGFza3MKKyAgICAgKiBAcGFy
YW0gdGFzayBkZWZpbmVzIHRoZSB0YXNrIHRoYXQgd2FzIGp1c3QgcHJvY2Vzc2VkCisgICAgICov
CisgICAgZnVuY3Rpb24gQXNzZXRzUHJvZ3Jlc3NFdmVudChyZW1haW5pbmdDb3VudCwgdG90YWxD
b3VudCwgdGFzaykgeworICAgICAgICB0aGlzLnJlbWFpbmluZ0NvdW50ID0gcmVtYWluaW5nQ291
bnQ7CisgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHRvdGFsQ291bnQ7CisgICAgICAgIHRoaXMu
dGFzayA9IHRhc2s7CisgICAgfQorICAgIHJldHVybiBBc3NldHNQcm9ncmVzc0V2ZW50OworfSgp
KTsKKworLyoqCisgKiBEZWZpbmUgYSB0YXNrIHVzZWQgYnkgQXNzZXRzTWFuYWdlciB0byBsb2Fk
IG1lc2hlcworICovCit2YXIgTWVzaEFzc2V0VGFzayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShNZXNoQXNzZXRUYXNrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgTWVzaEFzc2V0VGFzaworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUg
b2YgdGhlIHRhc2sKKyAgICAgKiBAcGFyYW0gbWVzaGVzTmFtZXMgZGVmaW5lcyB0aGUgbGlzdCBv
ZiBtZXNoJ3MgbmFtZXMgeW91IHdhbnQgdG8gbG9hZAorICAgICAqIEBwYXJhbSByb290VXJsIGRl
ZmluZXMgdGhlIHJvb3QgdXJsIHRvIHVzZSBhcyBhIGJhc2UgdG8gbG9hZCB5b3VyIG1lc2hlcyBh
bmQgYXNzb2NpYXRlZCByZXNvdXJjZXMKKyAgICAgKiBAcGFyYW0gc2NlbmVGaWxlbmFtZSBkZWZp
bmVzIHRoZSBmaWxlbmFtZSBvZiB0aGUgc2NlbmUgdG8gbG9hZCBmcm9tCisgICAgICovCisgICAg
ZnVuY3Rpb24gTWVzaEFzc2V0VGFzaygKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBuYW1l
IG9mIHRoZSB0YXNrCisgICAgICovCisgICAgbmFtZSwgCisgICAgLyoqCisgICAgICogRGVmaW5l
cyB0aGUgbGlzdCBvZiBtZXNoJ3MgbmFtZXMgeW91IHdhbnQgdG8gbG9hZAorICAgICAqLworICAg
IG1lc2hlc05hbWVzLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSByb290IHVybCB0byB1
c2UgYXMgYSBiYXNlIHRvIGxvYWQgeW91ciBtZXNoZXMgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2Vz
CisgICAgICovCisgICAgcm9vdFVybCwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgZmls
ZW5hbWUgb2YgdGhlIHNjZW5lIHRvIGxvYWQgZnJvbQorICAgICAqLworICAgIHNjZW5lRmlsZW5h
bWUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhp
czsKKyAgICAgICAgX3RoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIF90aGlzLm1lc2hlc05hbWVz
ID0gbWVzaGVzTmFtZXM7CisgICAgICAgIF90aGlzLnJvb3RVcmwgPSByb290VXJsOworICAgICAg
ICBfdGhpcy5zY2VuZUZpbGVuYW1lID0gc2NlbmVGaWxlbmFtZTsKKyAgICAgICAgcmV0dXJuIF90
aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAg
ICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBh
c3NldHMgdG8gYmUgbG9hZGVkCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNr
IGNhbGxlZCB3aGVuIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBw
YXJhbSBvbkVycm9yIGlzIGEgY2FsbGJhY2sgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAg
ICAqLworICAgIE1lc2hBc3NldFRhc2sucHJvdG90eXBlLnJ1blRhc2sgPSBmdW5jdGlvbiAoc2Nl
bmUsIG9uU3VjY2Vzcywgb25FcnJvcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICBfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
Y2VuZUxvYWRlciJdLkltcG9ydE1lc2godGhpcy5tZXNoZXNOYW1lcywgdGhpcy5yb290VXJsLCB0
aGlzLnNjZW5lRmlsZW5hbWUsIHNjZW5lLCBmdW5jdGlvbiAobWVzaGVzLCBwYXJ0aWNsZVN5c3Rl
bXMsIHNrZWxldG9ucywgYW5pbWF0aW9uR3JvdXBzKSB7CisgICAgICAgICAgICBfdGhpcy5sb2Fk
ZWRNZXNoZXMgPSBtZXNoZXM7CisgICAgICAgICAgICBfdGhpcy5sb2FkZWRQYXJ0aWNsZVN5c3Rl
bXMgPSBwYXJ0aWNsZVN5c3RlbXM7CisgICAgICAgICAgICBfdGhpcy5sb2FkZWRTa2VsZXRvbnMg
PSBza2VsZXRvbnM7CisgICAgICAgICAgICBfdGhpcy5sb2FkZWRBbmltYXRpb25Hcm91cHMgPSBh
bmltYXRpb25Hcm91cHM7CisgICAgICAgICAgICBvblN1Y2Nlc3MoKTsKKyAgICAgICAgfSwgbnVs
bCwgZnVuY3Rpb24gKHNjZW5lLCBtZXNzYWdlLCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIG9u
RXJyb3IobWVzc2FnZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICByZXR1
cm4gTWVzaEFzc2V0VGFzazsKK30oQWJzdHJhY3RBc3NldFRhc2spKTsKKworLyoqCisgKiBEZWZp
bmUgYSB0YXNrIHVzZWQgYnkgQXNzZXRzTWFuYWdlciB0byBsb2FkIHRleHQgY29udGVudAorICov
Cit2YXIgVGV4dEZpbGVBc3NldFRhc2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVy
KSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0o
VGV4dEZpbGVBc3NldFRhc2ssIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5l
dyBUZXh0RmlsZUFzc2V0VGFzayBvYmplY3QKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRo
ZSBuYW1lIG9mIHRoZSB0YXNrCisgICAgICogQHBhcmFtIHVybCBkZWZpbmVzIHRoZSBsb2NhdGlv
biBvZiB0aGUgZmlsZSB0byBsb2FkCisgICAgICovCisgICAgZnVuY3Rpb24gVGV4dEZpbGVBc3Nl
dFRhc2soCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgdGFzaworICAg
ICAqLworICAgIG5hbWUsIAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGxvY2F0aW9uIG9m
IHRoZSBmaWxlIHRvIGxvYWQKKyAgICAgKi8KKyAgICB1cmwpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMubmFtZSA9
IG5hbWU7CisgICAgICAgIF90aGlzLnVybCA9IHVybDsKKyAgICAgICAgcmV0dXJuIF90aGlzOwor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAgICAgKiBA
cGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBhc3NldHMg
dG8gYmUgbG9hZGVkCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNrIGNhbGxl
ZCB3aGVuIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBwYXJhbSBv
bkVycm9yIGlzIGEgY2FsbGJhY2sgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAgICAqLwor
ICAgIFRleHRGaWxlQXNzZXRUYXNrLnByb3RvdHlwZS5ydW5UYXNrID0gZnVuY3Rpb24gKHNjZW5l
LCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgc2NlbmUuX2xvYWRGaWxlKHRoaXMudXJsLCBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAg
ICAgX3RoaXMudGV4dCA9IGRhdGE7CisgICAgICAgICAgICBvblN1Y2Nlc3MoKTsKKyAgICAgICAg
fSwgdW5kZWZpbmVkLCBmYWxzZSwgZmFsc2UsIGZ1bmN0aW9uIChyZXF1ZXN0LCBleGNlcHRpb24p
IHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0KSB7CisgICAgICAgICAgICAgICAgb25FcnJvcihy
ZXF1ZXN0LnN0YXR1cyArICIgIiArIHJlcXVlc3Quc3RhdHVzVGV4dCwgZXhjZXB0aW9uKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICByZXR1cm4gVGV4dEZpbGVBc3Nl
dFRhc2s7Cit9KEFic3RyYWN0QXNzZXRUYXNrKSk7CisKKy8qKgorICogRGVmaW5lIGEgdGFzayB1
c2VkIGJ5IEFzc2V0c01hbmFnZXIgdG8gbG9hZCBiaW5hcnkgZGF0YQorICovCit2YXIgQmluYXJ5
RmlsZUFzc2V0VGFzayA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShCaW5hcnlGaWxl
QXNzZXRUYXNrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgQmluYXJ5
RmlsZUFzc2V0VGFzayBvYmplY3QKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1l
IG9mIHRoZSBuZXcgdGFzaworICAgICAqIEBwYXJhbSB1cmwgZGVmaW5lcyB0aGUgbG9jYXRpb24g
b2YgdGhlIGZpbGUgdG8gbG9hZAorICAgICAqLworICAgIGZ1bmN0aW9uIEJpbmFyeUZpbGVBc3Nl
dFRhc2soCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgdGFzaworICAg
ICAqLworICAgIG5hbWUsIAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGxvY2F0aW9uIG9m
IHRoZSBmaWxlIHRvIGxvYWQKKyAgICAgKi8KKyAgICB1cmwpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMubmFtZSA9
IG5hbWU7CisgICAgICAgIF90aGlzLnVybCA9IHVybDsKKyAgICAgICAgcmV0dXJuIF90aGlzOwor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAgICAgKiBA
cGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBhc3NldHMg
dG8gYmUgbG9hZGVkCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNrIGNhbGxl
ZCB3aGVuIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBwYXJhbSBv
bkVycm9yIGlzIGEgY2FsbGJhY2sgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAgICAqLwor
ICAgIEJpbmFyeUZpbGVBc3NldFRhc2sucHJvdG90eXBlLnJ1blRhc2sgPSBmdW5jdGlvbiAoc2Nl
bmUsIG9uU3VjY2Vzcywgb25FcnJvcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICBzY2VuZS5fbG9hZEZpbGUodGhpcy51cmwsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAg
ICAgICBfdGhpcy5kYXRhID0gZGF0YTsKKyAgICAgICAgICAgIG9uU3VjY2VzcygpOworICAgICAg
ICB9LCB1bmRlZmluZWQsIHRydWUsIHRydWUsIGZ1bmN0aW9uIChyZXF1ZXN0LCBleGNlcHRpb24p
IHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0KSB7CisgICAgICAgICAgICAgICAgb25FcnJvcihy
ZXF1ZXN0LnN0YXR1cyArICIgIiArIHJlcXVlc3Quc3RhdHVzVGV4dCwgZXhjZXB0aW9uKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICByZXR1cm4gQmluYXJ5RmlsZUFz
c2V0VGFzazsKK30oQWJzdHJhY3RBc3NldFRhc2spKTsKKworLyoqCisgKiBEZWZpbmUgYSB0YXNr
IHVzZWQgYnkgQXNzZXRzTWFuYWdlciB0byBsb2FkIGltYWdlcworICovCit2YXIgSW1hZ2VBc3Nl
dFRhc2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oSW1hZ2VBc3NldFRhc2ssIF9z
dXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBJbWFnZUFzc2V0VGFzaworICAg
ICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHRhc2sKKyAgICAgKiBAcGFy
YW0gdXJsIGRlZmluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBpbWFnZSB0byBsb2FkCisgICAgICov
CisgICAgZnVuY3Rpb24gSW1hZ2VBc3NldFRhc2soCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0
aGUgbmFtZSBvZiB0aGUgdGFzaworICAgICAqLworICAgIG5hbWUsIAorICAgIC8qKgorICAgICAq
IERlZmluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBpbWFnZSB0byBsb2FkCisgICAgICovCisgICAg
dXJsKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRo
aXM7CisgICAgICAgIF90aGlzLm5hbWUgPSBuYW1lOworICAgICAgICBfdGhpcy51cmwgPSB1cmw7
CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogRXhlY3V0ZSB0
aGUgY3VycmVudCB0YXNrCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIHNjZW5lIHdo
ZXJlIHlvdSB3YW50IHlvdXIgYXNzZXRzIHRvIGJlIGxvYWRlZAorICAgICAqIEBwYXJhbSBvblN1
Y2Nlc3MgaXMgYSBjYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgdGFzayBpcyBzdWNjZXNzZnVsbHkg
ZXhlY3V0ZWQKKyAgICAgKiBAcGFyYW0gb25FcnJvciBpcyBhIGNhbGxiYWNrIGNhbGxlZCBpZiBh
biBlcnJvciBvY2N1cnMKKyAgICAgKi8KKyAgICBJbWFnZUFzc2V0VGFzay5wcm90b3R5cGUucnVu
VGFzayA9IGZ1bmN0aW9uIChzY2VuZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAg
X3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRvb2xzIl0uU2V0Q29yc0JlaGF2
aW9yKHRoaXMudXJsLCBpbWcpOworICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgX3RoaXMuaW1hZ2UgPSBpbWc7CisgICAgICAgICAgICBvblN1Y2Nlc3MoKTsK
KyAgICAgICAgfTsKKyAgICAgICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7CisgICAg
ICAgICAgICBvbkVycm9yKCJFcnJvciBsb2FkaW5nIGltYWdlIiwgZXJyKTsKKyAgICAgICAgfTsK
KyAgICAgICAgaW1nLnNyYyA9IHRoaXMudXJsOworICAgIH07CisgICAgcmV0dXJuIEltYWdlQXNz
ZXRUYXNrOworfShBYnN0cmFjdEFzc2V0VGFzaykpOworCisvKioKKyAqIERlZmluZSBhIHRhc2sg
dXNlZCBieSBBc3NldHNNYW5hZ2VyIHRvIGxvYWQgMkQgdGV4dHVyZXMKKyAqLwordmFyIFRleHR1
cmVBc3NldFRhc2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oVGV4dHVyZUFzc2V0
VGFzaywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFRleHR1cmVBc3Nl
dFRhc2sgb2JqZWN0CisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUg
dGFzaworICAgICAqIEBwYXJhbSB1cmwgZGVmaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUg
dG8gbG9hZAorICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlmIG1pcG1hcCBzaG91bGQg
bm90IGJlIGdlbmVyYXRlZCAoZGVmYXVsdCBpcyBmYWxzZSkKKyAgICAgKiBAcGFyYW0gaW52ZXJ0
WSBkZWZpbmVzIGlmIHRleHR1cmUgbXVzdCBiZSBpbnZlcnRlZCBvbiBZIGF4aXMgKGRlZmF1bHQg
aXMgZmFsc2UpCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBkZWZpbmVzIHRoZSBzYW1wbGlu
ZyBtb2RlIHRvIHVzZSAoZGVmYXVsdCBpcyBUZXh0dXJlLlRSSUxJTkVBUl9TQU1QTElOR01PREUp
CisgICAgICovCisgICAgZnVuY3Rpb24gVGV4dHVyZUFzc2V0VGFzaygKKyAgICAvKioKKyAgICAg
KiBEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSB0YXNrCisgICAgICovCisgICAgbmFtZSwgCisgICAg
LyoqCisgICAgICogRGVmaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gbG9hZAorICAg
ICAqLworICAgIHVybCwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyBpZiBtaXBtYXAgc2hvdWxk
IG5vdCBiZSBnZW5lcmF0ZWQgKGRlZmF1bHQgaXMgZmFsc2UpCisgICAgICovCisgICAgbm9NaXBt
YXAsIAorICAgIC8qKgorICAgICAqIERlZmluZXMgaWYgdGV4dHVyZSBtdXN0IGJlIGludmVydGVk
IG9uIFkgYXhpcyAoZGVmYXVsdCBpcyBmYWxzZSkKKyAgICAgKi8KKyAgICBpbnZlcnRZLCAKKyAg
ICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBzYW1wbGluZyBtb2RlIHRvIHVzZSAoZGVmYXVsdCBp
cyBUZXh0dXJlLlRSSUxJTkVBUl9TQU1QTElOR01PREUpCisgICAgICovCisgICAgc2FtcGxpbmdN
b2RlKSB7CisgICAgICAgIGlmIChzYW1wbGluZ01vZGUgPT09IHZvaWQgMCkgeyBzYW1wbGluZ01v
ZGUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siVGV4dHVyZSJdLlRSSUxJTkVBUl9TQU1QTElOR01PREU7IH0KKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMubmFt
ZSA9IG5hbWU7CisgICAgICAgIF90aGlzLnVybCA9IHVybDsKKyAgICAgICAgX3RoaXMubm9NaXBt
YXAgPSBub01pcG1hcDsKKyAgICAgICAgX3RoaXMuaW52ZXJ0WSA9IGludmVydFk7CisgICAgICAg
IF90aGlzLnNhbXBsaW5nTW9kZSA9IHNhbXBsaW5nTW9kZTsKKyAgICAgICAgcmV0dXJuIF90aGlz
OworICAgIH0KKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAgICAg
KiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBhc3Nl
dHMgdG8gYmUgbG9hZGVkCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNrIGNh
bGxlZCB3aGVuIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBwYXJh
bSBvbkVycm9yIGlzIGEgY2FsbGJhY2sgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAgICAq
LworICAgIFRleHR1cmVBc3NldFRhc2sucHJvdG90eXBlLnJ1blRhc2sgPSBmdW5jdGlvbiAoc2Nl
bmUsIG9uU3VjY2Vzcywgb25FcnJvcikgeworICAgICAgICB2YXIgb25sb2FkID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgb25TdWNjZXNzKCk7CisgICAgICAgIH07CisgICAgICAgIHZhciBv
bmVycm9yID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGV4Y2VwdGlvbikgeworICAgICAgICAgICAgb25F
cnJvcihtZXNzYWdlLCBleGNlcHRpb24pOworICAgICAgICB9OworICAgICAgICB0aGlzLnRleHR1
cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlRleHR1cmUiXSh0aGlzLnVybCwgc2NlbmUsIHRoaXMubm9NaXBtYXAsIHRoaXMu
aW52ZXJ0WSwgdGhpcy5zYW1wbGluZ01vZGUsIG9ubG9hZCwgb25lcnJvcik7CisgICAgfTsKKyAg
ICByZXR1cm4gVGV4dHVyZUFzc2V0VGFzazsKK30oQWJzdHJhY3RBc3NldFRhc2spKTsKKworLyoq
CisgKiBEZWZpbmUgYSB0YXNrIHVzZWQgYnkgQXNzZXRzTWFuYWdlciB0byBsb2FkIGN1YmUgdGV4
dHVyZXMKKyAqLwordmFyIEN1YmVUZXh0dXJlQXNzZXRUYXNrID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKEN1YmVUZXh0dXJlQXNzZXRUYXNrLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBuZXcgQ3ViZVRleHR1cmVBc3NldFRhc2sKKyAgICAgKiBAcGFyYW0gbmFt
ZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSB0YXNrCisgICAgICogQHBhcmFtIHVybCBkZWZpbmVz
IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZXMgdG8gbG9hZCAoWW91IGhhdmUgdG8gc3BlY2lmeSB0
aGUgZm9sZGVyIHdoZXJlIHRoZSBmaWxlcyBhcmUgKyBmaWxlbmFtZSB3aXRoIG5vIGV4dGVuc2lv
bikKKyAgICAgKiBAcGFyYW0gZXh0ZW5zaW9ucyBkZWZpbmVzIHRoZSBleHRlbnNpb25zIHRvIHVz
ZSB0byBsb2FkIGZpbGVzIChbIl9weCIsICJfcHkiLCAiX3B6IiwgIl9ueCIsICJfbnkiLCAiX256
Il0gYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gbm9NaXBtYXAgZGVmaW5lcyBpZiBtaXBtYXBz
IHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkIChkZWZhdWx0IGlzIGZhbHNlKQorICAgICAqIEBwYXJh
bSBmaWxlcyBkZWZpbmVzIHRoZSBleHBsaWNpdCBsaXN0IG9mIGZpbGVzICh1bmRlZmluZWQgYnkg
ZGVmYXVsdCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDdWJlVGV4dHVyZUFzc2V0VGFzaygKKyAg
ICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSB0YXNrCisgICAgICovCisgICAg
bmFtZSwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGVz
IHRvIGxvYWQgKFlvdSBoYXZlIHRvIHNwZWNpZnkgdGhlIGZvbGRlciB3aGVyZSB0aGUgZmlsZXMg
YXJlICsgZmlsZW5hbWUgd2l0aCBubyBleHRlbnNpb24pCisgICAgICovCisgICAgdXJsLCAKKyAg
ICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBleHRlbnNpb25zIHRvIHVzZSB0byBsb2FkIGZpbGVz
IChbIl9weCIsICJfcHkiLCAiX3B6IiwgIl9ueCIsICJfbnkiLCAiX256Il0gYnkgZGVmYXVsdCkK
KyAgICAgKi8KKyAgICBleHRlbnNpb25zLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIGlmIG1p
cG1hcHMgc2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQgKGRlZmF1bHQgaXMgZmFsc2UpCisgICAgICov
CisgICAgbm9NaXBtYXAsIAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGV4cGxpY2l0IGxp
c3Qgb2YgZmlsZXMgKHVuZGVmaW5lZCBieSBkZWZhdWx0KQorICAgICAqLworICAgIGZpbGVzKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7Cisg
ICAgICAgIF90aGlzLm5hbWUgPSBuYW1lOworICAgICAgICBfdGhpcy51cmwgPSB1cmw7CisgICAg
ICAgIF90aGlzLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zOworICAgICAgICBfdGhpcy5ub01pcG1h
cCA9IG5vTWlwbWFwOworICAgICAgICBfdGhpcy5maWxlcyA9IGZpbGVzOworICAgICAgICByZXR1
cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEV4ZWN1dGUgdGhlIGN1cnJlbnQgdGFz
aworICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB3aGVyZSB5b3Ugd2FudCB5
b3VyIGFzc2V0cyB0byBiZSBsb2FkZWQKKyAgICAgKiBAcGFyYW0gb25TdWNjZXNzIGlzIGEgY2Fs
bGJhY2sgY2FsbGVkIHdoZW4gdGhlIHRhc2sgaXMgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkCisgICAg
ICogQHBhcmFtIG9uRXJyb3IgaXMgYSBjYWxsYmFjayBjYWxsZWQgaWYgYW4gZXJyb3Igb2NjdXJz
CisgICAgICovCisgICAgQ3ViZVRleHR1cmVBc3NldFRhc2sucHJvdG90eXBlLnJ1blRhc2sgPSBm
dW5jdGlvbiAoc2NlbmUsIG9uU3VjY2Vzcywgb25FcnJvcikgeworICAgICAgICB2YXIgb25sb2Fk
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgb25TdWNjZXNzKCk7CisgICAgICAgIH07Cisg
ICAgICAgIHZhciBvbmVycm9yID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGV4Y2VwdGlvbikgeworICAg
ICAgICAgICAgb25FcnJvcihtZXNzYWdlLCBleGNlcHRpb24pOworICAgICAgICB9OworICAgICAg
ICB0aGlzLnRleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19jdWJlVGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDdWJlVGV4dHVyZSJdKHRoaXMudXJsLCBzY2VuZSwg
dGhpcy5leHRlbnNpb25zLCB0aGlzLm5vTWlwbWFwLCB0aGlzLmZpbGVzLCBvbmxvYWQsIG9uZXJy
b3IpOworICAgIH07CisgICAgcmV0dXJuIEN1YmVUZXh0dXJlQXNzZXRUYXNrOworfShBYnN0cmFj
dEFzc2V0VGFzaykpOworCisvKioKKyAqIERlZmluZSBhIHRhc2sgdXNlZCBieSBBc3NldHNNYW5h
Z2VyIHRvIGxvYWQgSERSIGN1YmUgdGV4dHVyZXMKKyAqLwordmFyIEhEUkN1YmVUZXh0dXJlQXNz
ZXRUYXNrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEhEUkN1YmVUZXh0dXJlQXNz
ZXRUYXNrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgSERSQ3ViZVRl
eHR1cmVBc3NldFRhc2sgb2JqZWN0CisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFt
ZSBvZiB0aGUgdGFzaworICAgICAqIEBwYXJhbSB1cmwgZGVmaW5lcyB0aGUgbG9jYXRpb24gb2Yg
dGhlIGZpbGUgdG8gbG9hZAorICAgICAqIEBwYXJhbSBzaXplIGRlZmluZXMgdGhlIGRlc2lyZWQg
c2l6ZSAodGhlIG1vcmUgaXQgaW5jcmVhc2VzIHRoZSBsb25nZXIgdGhlIGdlbmVyYXRpb24gd2ls
bCBiZSkgSWYgdGhlIHNpemUgaXMgb21pdHRlZCB0aGlzIGltcGxpZXMgeW91IGFyZSB1c2luZyBh
IHByZXByb2Nlc3NlZCBjdWJlbWFwLgorICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlm
IG1pcG1hcHMgc2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQgKGRlZmF1bHQgaXMgZmFsc2UpCisgICAg
ICogQHBhcmFtIGdlbmVyYXRlSGFybW9uaWNzIHNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRv
IGV4dHJhY3QgdGhlIHBvbHlub21pYWwgaGFybW9uaWNzIGR1cmluZyB0aGUgZ2VuZXJhdGlvbiBw
cm9jZXNzIChkZWZhdWx0IGlzIHRydWUpCisgICAgICogQHBhcmFtIGdhbW1hU3BhY2Ugc3BlY2lm
aWVzIGlmIHRoZSB0ZXh0dXJlIHdpbGwgYmUgdXNlIGluIGdhbW1hIG9yIGxpbmVhciBzcGFjZSAo
dGhlIFBCUiBtYXRlcmlhbCByZXF1aXJlcyB0aG9zZSB0ZXh0dXJlIGluIGxpbmVhciBzcGFjZSwg
YnV0IHRoZSBzdGFuZGFyZCBtYXRlcmlhbCB3b3VsZCByZXF1aXJlIHRoZW0gaW4gR2FtbWEgc3Bh
Y2UpIChkZWZhdWx0IGlzIGZhbHNlKQorICAgICAqIEBwYXJhbSByZXNlcnZlZCBJbnRlcm5hbCB1
c2Ugb25seQorICAgICAqLworICAgIGZ1bmN0aW9uIEhEUkN1YmVUZXh0dXJlQXNzZXRUYXNrKAor
ICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHRhc2sKKyAgICAgKi8KKyAg
ICBuYW1lLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmls
ZSB0byBsb2FkCisgICAgICovCisgICAgdXJsLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRo
ZSBkZXNpcmVkIHNpemUgKHRoZSBtb3JlIGl0IGluY3JlYXNlcyB0aGUgbG9uZ2VyIHRoZSBnZW5l
cmF0aW9uIHdpbGwgYmUpCisgICAgICovCisgICAgc2l6ZSwgCisgICAgLyoqCisgICAgICogRGVm
aW5lcyBpZiBtaXBtYXBzIHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkIChkZWZhdWx0IGlzIGZhbHNl
KQorICAgICAqLworICAgIG5vTWlwbWFwLCAKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgd2hl
dGhlciB5b3Ugd2FudCB0byBleHRyYWN0IHRoZSBwb2x5bm9taWFsIGhhcm1vbmljcyBkdXJpbmcg
dGhlIGdlbmVyYXRpb24gcHJvY2VzcyAoZGVmYXVsdCBpcyB0cnVlKQorICAgICAqLworICAgIGdl
bmVyYXRlSGFybW9uaWNzLCAKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIHRleHR1
cmUgd2lsbCBiZSB1c2UgaW4gZ2FtbWEgb3IgbGluZWFyIHNwYWNlICh0aGUgUEJSIG1hdGVyaWFs
IHJlcXVpcmVzIHRob3NlIHRleHR1cmUgaW4gbGluZWFyIHNwYWNlLCBidXQgdGhlIHN0YW5kYXJk
IG1hdGVyaWFsIHdvdWxkIHJlcXVpcmUgdGhlbSBpbiBHYW1tYSBzcGFjZSkgKGRlZmF1bHQgaXMg
ZmFsc2UpCisgICAgICovCisgICAgZ2FtbWFTcGFjZSwgCisgICAgLyoqCisgICAgICogSW50ZXJu
YWwgVXNlIE9ubHkKKyAgICAgKi8KKyAgICByZXNlcnZlZCkgeworICAgICAgICBpZiAobm9NaXBt
YXAgPT09IHZvaWQgMCkgeyBub01pcG1hcCA9IGZhbHNlOyB9CisgICAgICAgIGlmIChnZW5lcmF0
ZUhhcm1vbmljcyA9PT0gdm9pZCAwKSB7IGdlbmVyYXRlSGFybW9uaWNzID0gdHJ1ZTsgfQorICAg
ICAgICBpZiAoZ2FtbWFTcGFjZSA9PT0gdm9pZCAwKSB7IGdhbW1hU3BhY2UgPSBmYWxzZTsgfQor
ICAgICAgICBpZiAocmVzZXJ2ZWQgPT09IHZvaWQgMCkgeyByZXNlcnZlZCA9IGZhbHNlOyB9Cisg
ICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7CisgICAg
ICAgIF90aGlzLm5hbWUgPSBuYW1lOworICAgICAgICBfdGhpcy51cmwgPSB1cmw7CisgICAgICAg
IF90aGlzLnNpemUgPSBzaXplOworICAgICAgICBfdGhpcy5ub01pcG1hcCA9IG5vTWlwbWFwOwor
ICAgICAgICBfdGhpcy5nZW5lcmF0ZUhhcm1vbmljcyA9IGdlbmVyYXRlSGFybW9uaWNzOworICAg
ICAgICBfdGhpcy5nYW1tYVNwYWNlID0gZ2FtbWFTcGFjZTsKKyAgICAgICAgX3RoaXMucmVzZXJ2
ZWQgPSByZXNlcnZlZDsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5l
cyB0aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBhc3NldHMgdG8gYmUgbG9hZGVkCisgICAg
ICogQHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSB0YXNrIGlz
IHN1Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBwYXJhbSBvbkVycm9yIGlzIGEgY2FsbGJh
Y2sgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAgICAqLworICAgIEhEUkN1YmVUZXh0dXJl
QXNzZXRUYXNrLnByb3RvdHlwZS5ydW5UYXNrID0gZnVuY3Rpb24gKHNjZW5lLCBvblN1Y2Nlc3Ms
IG9uRXJyb3IpIHsKKyAgICAgICAgdmFyIG9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIG9uU3VjY2VzcygpOworICAgICAgICB9OworICAgICAgICB2YXIgb25lcnJvciA9IGZ1bmN0
aW9uIChtZXNzYWdlLCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIG9uRXJyb3IobWVzc2FnZSwg
ZXhjZXB0aW9uKTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy50ZXh0dXJlID0gbmV3IF9NYXRl
cmlhbHNfVGV4dHVyZXNfaGRyQ3ViZVRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siSERSQ3ViZVRleHR1cmUiXSh0aGlzLnVybCwgc2NlbmUsIHRoaXMuc2l6ZSwgdGhpcy5ub01p
cG1hcCwgdGhpcy5nZW5lcmF0ZUhhcm1vbmljcywgdGhpcy5nYW1tYVNwYWNlLCB0aGlzLnJlc2Vy
dmVkLCBvbmxvYWQsIG9uZXJyb3IpOworICAgIH07CisgICAgcmV0dXJuIEhEUkN1YmVUZXh0dXJl
QXNzZXRUYXNrOworfShBYnN0cmFjdEFzc2V0VGFzaykpOworCisvKioKKyAqIERlZmluZSBhIHRh
c2sgdXNlZCBieSBBc3NldHNNYW5hZ2VyIHRvIGxvYWQgRXF1aXJlY3Rhbmd1bGFyIGN1YmUgdGV4
dHVyZXMKKyAqLwordmFyIEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNzZXRUYXNrID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNz
ZXRUYXNrLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgRXF1aVJlY3Rh
bmd1bGFyQ3ViZVRleHR1cmVBc3NldFRhc2sgb2JqZWN0CisgICAgICogQHBhcmFtIG5hbWUgZGVm
aW5lcyB0aGUgbmFtZSBvZiB0aGUgdGFzaworICAgICAqIEBwYXJhbSB1cmwgZGVmaW5lcyB0aGUg
bG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gbG9hZAorICAgICAqIEBwYXJhbSBzaXplIGRlZmluZXMg
dGhlIGRlc2lyZWQgc2l6ZSAodGhlIG1vcmUgaXQgaW5jcmVhc2VzIHRoZSBsb25nZXIgdGhlIGdl
bmVyYXRpb24gd2lsbCBiZSkKKyAgICAgKiBJZiB0aGUgc2l6ZSBpcyBvbWl0dGVkIHRoaXMgaW1w
bGllcyB5b3UgYXJlIHVzaW5nIGEgcHJlcHJvY2Vzc2VkIGN1YmVtYXAuCisgICAgICogQHBhcmFt
IG5vTWlwbWFwIGRlZmluZXMgaWYgbWlwbWFwcyBzaG91bGQgbm90IGJlIGdlbmVyYXRlZCAoZGVm
YXVsdCBpcyBmYWxzZSkKKyAgICAgKiBAcGFyYW0gZ2FtbWFTcGFjZSBzcGVjaWZpZXMgaWYgdGhl
IHRleHR1cmUgd2lsbCBiZSB1c2VkIGluIGdhbW1hIG9yIGxpbmVhciBzcGFjZQorICAgICAqICh0
aGUgUEJSIG1hdGVyaWFsIHJlcXVpcmVzIHRob3NlIHRleHR1cmUgaW4gbGluZWFyIHNwYWNlLCBi
dXQgdGhlIHN0YW5kYXJkIG1hdGVyaWFsIHdvdWxkIHJlcXVpcmUgdGhlbSBpbiBHYW1tYSBzcGFj
ZSkKKyAgICAgKiAoZGVmYXVsdCBpcyB0cnVlKQorICAgICAqLworICAgIGZ1bmN0aW9uIEVxdWlS
ZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNzZXRUYXNrKAorICAgIC8qKgorICAgICAqIERlZmluZXMg
dGhlIG5hbWUgb2YgdGhlIHRhc2sKKyAgICAgKi8KKyAgICBuYW1lLCAKKyAgICAvKioKKyAgICAg
KiBEZWZpbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSB0byBsb2FkCisgICAgICovCisgICAg
dXJsLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBkZXNpcmVkIHNpemUgKHRoZSBtb3Jl
IGl0IGluY3JlYXNlcyB0aGUgbG9uZ2VyIHRoZSBnZW5lcmF0aW9uIHdpbGwgYmUpCisgICAgICov
CisgICAgc2l6ZSwgCisgICAgLyoqCisgICAgICogRGVmaW5lcyBpZiBtaXBtYXBzIHNob3VsZCBu
b3QgYmUgZ2VuZXJhdGVkIChkZWZhdWx0IGlzIGZhbHNlKQorICAgICAqLworICAgIG5vTWlwbWFw
LCAKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIHRleHR1cmUgd2lsbCBiZSB1c2Ug
aW4gZ2FtbWEgb3IgbGluZWFyIHNwYWNlICh0aGUgUEJSIG1hdGVyaWFsIHJlcXVpcmVzIHRob3Nl
IHRleHR1cmUgaW4gbGluZWFyIHNwYWNlLAorICAgICAqIGJ1dCB0aGUgc3RhbmRhcmQgbWF0ZXJp
YWwgd291bGQgcmVxdWlyZSB0aGVtIGluIEdhbW1hIHNwYWNlKSAoZGVmYXVsdCBpcyB0cnVlKQor
ICAgICAqLworICAgIGdhbW1hU3BhY2UpIHsKKyAgICAgICAgaWYgKG5vTWlwbWFwID09PSB2b2lk
IDApIHsgbm9NaXBtYXAgPSBmYWxzZTsgfQorICAgICAgICBpZiAoZ2FtbWFTcGFjZSA9PT0gdm9p
ZCAwKSB7IGdhbW1hU3BhY2UgPSB0cnVlOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5j
YWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLm5hbWUgPSBuYW1lOworICAg
ICAgICBfdGhpcy51cmwgPSB1cmw7CisgICAgICAgIF90aGlzLnNpemUgPSBzaXplOworICAgICAg
ICBfdGhpcy5ub01pcG1hcCA9IG5vTWlwbWFwOworICAgICAgICBfdGhpcy5nYW1tYVNwYWNlID0g
Z2FtbWFTcGFjZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAg
KiBFeGVjdXRlIHRoZSBjdXJyZW50IHRhc2sKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0
aGUgc2NlbmUgd2hlcmUgeW91IHdhbnQgeW91ciBhc3NldHMgdG8gYmUgbG9hZGVkCisgICAgICog
QHBhcmFtIG9uU3VjY2VzcyBpcyBhIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSB0YXNrIGlzIHN1
Y2Nlc3NmdWxseSBleGVjdXRlZAorICAgICAqIEBwYXJhbSBvbkVycm9yIGlzIGEgY2FsbGJhY2sg
Y2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycworICAgICAqLworICAgIEVxdWlSZWN0YW5ndWxhckN1
YmVUZXh0dXJlQXNzZXRUYXNrLnByb3RvdHlwZS5ydW5UYXNrID0gZnVuY3Rpb24gKHNjZW5lLCBv
blN1Y2Nlc3MsIG9uRXJyb3IpIHsKKyAgICAgICAgdmFyIG9ubG9hZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIG9uU3VjY2VzcygpOworICAgICAgICB9OworICAgICAgICB2YXIgb25lcnJv
ciA9IGZ1bmN0aW9uIChtZXNzYWdlLCBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIG9uRXJyb3Io
bWVzc2FnZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy50ZXh0dXJlID0g
bmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfZXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfX1siRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmUiXSh0aGlz
LnVybCwgc2NlbmUsIHRoaXMuc2l6ZSwgdGhpcy5ub01pcG1hcCwgdGhpcy5nYW1tYVNwYWNlLCBv
bmxvYWQsIG9uZXJyb3IpOworICAgIH07CisgICAgcmV0dXJuIEVxdWlSZWN0YW5ndWxhckN1YmVU
ZXh0dXJlQXNzZXRUYXNrOworfShBYnN0cmFjdEFzc2V0VGFzaykpOworCisvKioKKyAqIFRoaXMg
Y2xhc3MgY2FuIGJlIHVzZWQgdG8gZWFzaWx5IGltcG9ydCBhc3NldHMgaW50byBhIHNjZW5lCisg
KiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9hc3NldHNt
YW5hZ2VyCisgKi8KK3ZhciBBc3NldHNNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgQXNzZXRzTWFuYWdlcgorICAgICAq
IEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0byB3b3JrIG9uCisgICAgICovCisgICAg
ZnVuY3Rpb24gQXNzZXRzTWFuYWdlcihzY2VuZSkgeworICAgICAgICB0aGlzLl9pc0xvYWRpbmcg
PSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdGFza3MgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhp
cy5fd2FpdGluZ1Rhc2tzQ291bnQgPSAwOworICAgICAgICB0aGlzLl90b3RhbFRhc2tzQ291bnQg
PSAwOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSBjYWxsZWQgd2hlbiBhbGwg
dGFza3MgYXJlIHByb2Nlc3NlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vblRhc2tTdWNj
ZXNzT2JzZXJ2YWJsZSA9IG5ldyBfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUg
Y2FsbGVkIHdoZW4gYSB0YXNrIGhhZCBhbiBlcnJvcgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5vblRhc2tFcnJvck9ic2VydmFibGUgPSBuZXcgX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBP
YnNlcnZhYmxlIGNhbGxlZCB3aGVuIGFsbCB0YXNrcyB3ZXJlIGV4ZWN1dGVkCisgICAgICAgICAq
LworICAgICAgICB0aGlzLm9uVGFza3NEb25lT2JzZXJ2YWJsZSA9IG5ldyBfb2JzZXJ2YWJsZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIE9ic2VydmFibGUgY2FsbGVkIHdoZW4gYSB0YXNrIGlzIGRvbmUgKHdoYXRl
dmVyIHRoZSByZXN1bHQgaXMpCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uUHJvZ3Jlc3NP
YnNlcnZhYmxlID0gbmV3IF9vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
Ik9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEg
Ym9vbGVhbiBkZWZpbmluZyBpZiB0aGUgQXNzZXRzTWFuYWdlciBzaG91bGQgdXNlIHRoZSBkZWZh
dWx0IGxvYWRpbmcgc2NyZWVuCisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9jcmVhdGluZ19hX2N1c3RvbV9sb2FkaW5nX3NjcmVlbgorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy51c2VEZWZhdWx0TG9hZGluZ1NjcmVlbiA9IHRydWU7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGRlZmluaW5nIGlmIHRoZSBBc3Nl
dHNNYW5hZ2VyIHNob3VsZCBhdXRvbWF0aWNhbGx5IGhpZGUgdGhlIGxvYWRpbmcgc2NyZWVuCisg
ICAgICAgICAqIHdoZW4gYWxsIGFzc2V0cyBoYXZlIGJlZW4gZG93bmxvYWRlZC4KKyAgICAgICAg
ICogSWYgc2V0IHRvIGZhbHNlLCB5b3UgbmVlZCB0byBtYW51YWxseSBjYWxsIGluIGhpZGVMb2Fk
aW5nVUkoKSBvbmNlIHlvdXIgc2NlbmUgaXMgcmVhZHkuCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmF1dG9IaWRlTG9hZGluZ1VJID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2Vu
ZTsKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIGEgTWVzaEFzc2V0VGFzayB0byB0aGUgbGlz
dCBvZiBhY3RpdmUgdGFza3MKKyAgICAgKiBAcGFyYW0gdGFza05hbWUgZGVmaW5lcyB0aGUgbmFt
ZSBvZiB0aGUgbmV3IHRhc2sKKyAgICAgKiBAcGFyYW0gbWVzaGVzTmFtZXMgZGVmaW5lcyB0aGUg
bmFtZSBvZiBtZXNoZXMgdG8gbG9hZAorICAgICAqIEBwYXJhbSByb290VXJsIGRlZmluZXMgdGhl
IHJvb3QgdXJsIHRvIHVzZSB0byBsb2NhdGUgZmlsZXMKKyAgICAgKiBAcGFyYW0gc2NlbmVGaWxl
bmFtZSBkZWZpbmVzIHRoZSBmaWxlbmFtZSBvZiB0aGUgc2NlbmUgZmlsZQorICAgICAqIEByZXR1
cm5zIGEgbmV3IE1lc2hBc3NldFRhc2sgb2JqZWN0CisgICAgICovCisgICAgQXNzZXRzTWFuYWdl
ci5wcm90b3R5cGUuYWRkTWVzaFRhc2sgPSBmdW5jdGlvbiAodGFza05hbWUsIG1lc2hlc05hbWVz
LCByb290VXJsLCBzY2VuZUZpbGVuYW1lKSB7CisgICAgICAgIHZhciB0YXNrID0gbmV3IE1lc2hB
c3NldFRhc2sodGFza05hbWUsIG1lc2hlc05hbWVzLCByb290VXJsLCBzY2VuZUZpbGVuYW1lKTsK
KyAgICAgICAgdGhpcy5fdGFza3MucHVzaCh0YXNrKTsKKyAgICAgICAgcmV0dXJuIHRhc2s7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgYSBUZXh0RmlsZUFzc2V0VGFzayB0byB0aGUgbGlz
dCBvZiBhY3RpdmUgdGFza3MKKyAgICAgKiBAcGFyYW0gdGFza05hbWUgZGVmaW5lcyB0aGUgbmFt
ZSBvZiB0aGUgbmV3IHRhc2sKKyAgICAgKiBAcGFyYW0gdXJsIGRlZmluZXMgdGhlIHVybCBvZiB0
aGUgZmlsZSB0byBsb2FkCisgICAgICogQHJldHVybnMgYSBuZXcgVGV4dEZpbGVBc3NldFRhc2sg
b2JqZWN0CisgICAgICovCisgICAgQXNzZXRzTWFuYWdlci5wcm90b3R5cGUuYWRkVGV4dEZpbGVU
YXNrID0gZnVuY3Rpb24gKHRhc2tOYW1lLCB1cmwpIHsKKyAgICAgICAgdmFyIHRhc2sgPSBuZXcg
VGV4dEZpbGVBc3NldFRhc2sodGFza05hbWUsIHVybCk7CisgICAgICAgIHRoaXMuX3Rhc2tzLnB1
c2godGFzayk7CisgICAgICAgIHJldHVybiB0YXNrOworICAgIH07CisgICAgLyoqCisgICAgICog
QWRkIGEgQmluYXJ5RmlsZUFzc2V0VGFzayB0byB0aGUgbGlzdCBvZiBhY3RpdmUgdGFza3MKKyAg
ICAgKiBAcGFyYW0gdGFza05hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3IHRhc2sKKyAg
ICAgKiBAcGFyYW0gdXJsIGRlZmluZXMgdGhlIHVybCBvZiB0aGUgZmlsZSB0byBsb2FkCisgICAg
ICogQHJldHVybnMgYSBuZXcgQmluYXJ5RmlsZUFzc2V0VGFzayBvYmplY3QKKyAgICAgKi8KKyAg
ICBBc3NldHNNYW5hZ2VyLnByb3RvdHlwZS5hZGRCaW5hcnlGaWxlVGFzayA9IGZ1bmN0aW9uICh0
YXNrTmFtZSwgdXJsKSB7CisgICAgICAgIHZhciB0YXNrID0gbmV3IEJpbmFyeUZpbGVBc3NldFRh
c2sodGFza05hbWUsIHVybCk7CisgICAgICAgIHRoaXMuX3Rhc2tzLnB1c2godGFzayk7CisgICAg
ICAgIHJldHVybiB0YXNrOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGEgSW1hZ2VBc3Nl
dFRhc2sgdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIHRhc2tzCisgICAgICogQHBhcmFtIHRhc2tOYW1l
IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG5ldyB0YXNrCisgICAgICogQHBhcmFtIHVybCBkZWZp
bmVzIHRoZSB1cmwgb2YgdGhlIGZpbGUgdG8gbG9hZAorICAgICAqIEByZXR1cm5zIGEgbmV3IElt
YWdlQXNzZXRUYXNrIG9iamVjdAorICAgICAqLworICAgIEFzc2V0c01hbmFnZXIucHJvdG90eXBl
LmFkZEltYWdlVGFzayA9IGZ1bmN0aW9uICh0YXNrTmFtZSwgdXJsKSB7CisgICAgICAgIHZhciB0
YXNrID0gbmV3IEltYWdlQXNzZXRUYXNrKHRhc2tOYW1lLCB1cmwpOworICAgICAgICB0aGlzLl90
YXNrcy5wdXNoKHRhc2spOworICAgICAgICByZXR1cm4gdGFzazsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEFkZCBhIFRleHR1cmVBc3NldFRhc2sgdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIHRhc2tz
CisgICAgICogQHBhcmFtIHRhc2tOYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG5ldyB0YXNr
CisgICAgICogQHBhcmFtIHVybCBkZWZpbmVzIHRoZSB1cmwgb2YgdGhlIGZpbGUgdG8gbG9hZAor
ICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlmIHRoZSB0ZXh0dXJlIG11c3Qgbm90IHJl
Y2VpdmUgbWlwbWFwcyAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gaW52ZXJ0WSBk
ZWZpbmVzIGlmIHlvdSB3YW50IHRvIGludmVydCBZIGF4aXMgb2YgdGhlIGxvYWRlZCB0ZXh0dXJl
IChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgZGVmaW5lcyB0
aGUgc2FtcGxpbmcgbW9kZSB0byB1c2UgKFRleHR1cmUuVFJJTElORUFSX1NBTVBMSU5HTU9ERSBi
eSBkZWZhdWx0KQorICAgICAqIEByZXR1cm5zIGEgbmV3IFRleHR1cmVBc3NldFRhc2sgb2JqZWN0
CisgICAgICovCisgICAgQXNzZXRzTWFuYWdlci5wcm90b3R5cGUuYWRkVGV4dHVyZVRhc2sgPSBm
dW5jdGlvbiAodGFza05hbWUsIHVybCwgbm9NaXBtYXAsIGludmVydFksIHNhbXBsaW5nTW9kZSkg
eworICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0g
X01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIHZhciB0YXNrID0g
bmV3IFRleHR1cmVBc3NldFRhc2sodGFza05hbWUsIHVybCwgbm9NaXBtYXAsIGludmVydFksIHNh
bXBsaW5nTW9kZSk7CisgICAgICAgIHRoaXMuX3Rhc2tzLnB1c2godGFzayk7CisgICAgICAgIHJl
dHVybiB0YXNrOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGEgQ3ViZVRleHR1cmVBc3Nl
dFRhc2sgdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIHRhc2tzCisgICAgICogQHBhcmFtIHRhc2tOYW1l
IGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIG5ldyB0YXNrCisgICAgICogQHBhcmFtIHVybCBkZWZp
bmVzIHRoZSB1cmwgb2YgdGhlIGZpbGUgdG8gbG9hZAorICAgICAqIEBwYXJhbSBleHRlbnNpb25z
IGRlZmluZXMgdGhlIGV4dGVuc2lvbiB0byB1c2UgdG8gbG9hZCB0aGUgY3ViZSBtYXAgKGNhbiBi
ZSBudWxsKQorICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlmIHRoZSB0ZXh0dXJlIG11
c3Qgbm90IHJlY2VpdmUgbWlwbWFwcyAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0g
ZmlsZXMgZGVmaW5lcyB0aGUgbGlzdCBvZiBmaWxlcyB0byBsb2FkIChjYW4gYmUgbnVsbCkKKyAg
ICAgKiBAcmV0dXJucyBhIG5ldyBDdWJlVGV4dHVyZUFzc2V0VGFzayBvYmplY3QKKyAgICAgKi8K
KyAgICBBc3NldHNNYW5hZ2VyLnByb3RvdHlwZS5hZGRDdWJlVGV4dHVyZVRhc2sgPSBmdW5jdGlv
biAodGFza05hbWUsIHVybCwgZXh0ZW5zaW9ucywgbm9NaXBtYXAsIGZpbGVzKSB7CisgICAgICAg
IHZhciB0YXNrID0gbmV3IEN1YmVUZXh0dXJlQXNzZXRUYXNrKHRhc2tOYW1lLCB1cmwsIGV4dGVu
c2lvbnMsIG5vTWlwbWFwLCBmaWxlcyk7CisgICAgICAgIHRoaXMuX3Rhc2tzLnB1c2godGFzayk7
CisgICAgICAgIHJldHVybiB0YXNrOworICAgIH07CisgICAgLyoqCisgICAgICoKKyAgICAgKiBB
ZGQgYSBIRFJDdWJlVGV4dHVyZUFzc2V0VGFzayB0byB0aGUgbGlzdCBvZiBhY3RpdmUgdGFza3MK
KyAgICAgKiBAcGFyYW0gdGFza05hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3IHRhc2sK
KyAgICAgKiBAcGFyYW0gdXJsIGRlZmluZXMgdGhlIHVybCBvZiB0aGUgZmlsZSB0byBsb2FkCisg
ICAgICogQHBhcmFtIHNpemUgZGVmaW5lcyB0aGUgc2l6ZSB5b3Ugd2FudCBmb3IgdGhlIGN1YmVt
YXAgKGNhbiBiZSBudWxsKQorICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlmIHRoZSB0
ZXh0dXJlIG11c3Qgbm90IHJlY2VpdmUgbWlwbWFwcyAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAg
KiBAcGFyYW0gZ2VuZXJhdGVIYXJtb25pY3MgZGVmaW5lcyBpZiB5b3Ugd2FudCB0byBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlICh0cnVlIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGdhbW1hU3Bh
Y2Ugc3BlY2lmaWVzIGlmIHRoZSB0ZXh0dXJlIHdpbGwgYmUgdXNlIGluIGdhbW1hIG9yIGxpbmVh
ciBzcGFjZSAodGhlIFBCUiBtYXRlcmlhbCByZXF1aXJlcyB0aG9zZSB0ZXh0dXJlIGluIGxpbmVh
ciBzcGFjZSwgYnV0IHRoZSBzdGFuZGFyZCBtYXRlcmlhbCB3b3VsZCByZXF1aXJlIHRoZW0gaW4g
R2FtbWEgc3BhY2UpIChkZWZhdWx0IGlzIGZhbHNlKQorICAgICAqIEBwYXJhbSByZXNlcnZlZCBJ
bnRlcm5hbCB1c2Ugb25seQorICAgICAqIEByZXR1cm5zIGEgbmV3IEhEUkN1YmVUZXh0dXJlQXNz
ZXRUYXNrIG9iamVjdAorICAgICAqLworICAgIEFzc2V0c01hbmFnZXIucHJvdG90eXBlLmFkZEhE
UkN1YmVUZXh0dXJlVGFzayA9IGZ1bmN0aW9uICh0YXNrTmFtZSwgdXJsLCBzaXplLCBub01pcG1h
cCwgZ2VuZXJhdGVIYXJtb25pY3MsIGdhbW1hU3BhY2UsIHJlc2VydmVkKSB7CisgICAgICAgIGlm
IChub01pcG1hcCA9PT0gdm9pZCAwKSB7IG5vTWlwbWFwID0gZmFsc2U7IH0KKyAgICAgICAgaWYg
KGdlbmVyYXRlSGFybW9uaWNzID09PSB2b2lkIDApIHsgZ2VuZXJhdGVIYXJtb25pY3MgPSB0cnVl
OyB9CisgICAgICAgIGlmIChnYW1tYVNwYWNlID09PSB2b2lkIDApIHsgZ2FtbWFTcGFjZSA9IGZh
bHNlOyB9CisgICAgICAgIGlmIChyZXNlcnZlZCA9PT0gdm9pZCAwKSB7IHJlc2VydmVkID0gZmFs
c2U7IH0KKyAgICAgICAgdmFyIHRhc2sgPSBuZXcgSERSQ3ViZVRleHR1cmVBc3NldFRhc2sodGFz
a05hbWUsIHVybCwgc2l6ZSwgbm9NaXBtYXAsIGdlbmVyYXRlSGFybW9uaWNzLCBnYW1tYVNwYWNl
LCByZXNlcnZlZCk7CisgICAgICAgIHRoaXMuX3Rhc2tzLnB1c2godGFzayk7CisgICAgICAgIHJl
dHVybiB0YXNrOworICAgIH07CisgICAgLyoqCisgICAgICoKKyAgICAgKiBBZGQgYSBFcXVpUmVj
dGFuZ3VsYXJDdWJlVGV4dHVyZUFzc2V0VGFzayB0byB0aGUgbGlzdCBvZiBhY3RpdmUgdGFza3MK
KyAgICAgKiBAcGFyYW0gdGFza05hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgbmV3IHRhc2sK
KyAgICAgKiBAcGFyYW0gdXJsIGRlZmluZXMgdGhlIHVybCBvZiB0aGUgZmlsZSB0byBsb2FkCisg
ICAgICogQHBhcmFtIHNpemUgZGVmaW5lcyB0aGUgc2l6ZSB5b3Ugd2FudCBmb3IgdGhlIGN1YmVt
YXAgKGNhbiBiZSBudWxsKQorICAgICAqIEBwYXJhbSBub01pcG1hcCBkZWZpbmVzIGlmIHRoZSB0
ZXh0dXJlIG11c3Qgbm90IHJlY2VpdmUgbWlwbWFwcyAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAg
KiBAcGFyYW0gZ2FtbWFTcGFjZSBTcGVjaWZpZXMgaWYgdGhlIHRleHR1cmUgd2lsbCBiZSB1c2Vk
IGluIGdhbW1hIG9yIGxpbmVhciBzcGFjZQorICAgICAqICh0aGUgUEJSIG1hdGVyaWFsIHJlcXVp
cmVzIHRob3NlIHRleHR1cmVzIGluIGxpbmVhciBzcGFjZSwgYnV0IHRoZSBzdGFuZGFyZCBtYXRl
cmlhbCB3b3VsZCByZXF1aXJlIHRoZW0gaW4gR2FtbWEgc3BhY2UpCisgICAgICogQHJldHVybnMg
YSBuZXcgRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmVBc3NldFRhc2sgb2JqZWN0CisgICAgICov
CisgICAgQXNzZXRzTWFuYWdlci5wcm90b3R5cGUuYWRkRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1
cmVBc3NldFRhc2sgPSBmdW5jdGlvbiAodGFza05hbWUsIHVybCwgc2l6ZSwgbm9NaXBtYXAsIGdh
bW1hU3BhY2UpIHsKKyAgICAgICAgaWYgKG5vTWlwbWFwID09PSB2b2lkIDApIHsgbm9NaXBtYXAg
PSBmYWxzZTsgfQorICAgICAgICBpZiAoZ2FtbWFTcGFjZSA9PT0gdm9pZCAwKSB7IGdhbW1hU3Bh
Y2UgPSB0cnVlOyB9CisgICAgICAgIHZhciB0YXNrID0gbmV3IEVxdWlSZWN0YW5ndWxhckN1YmVU
ZXh0dXJlQXNzZXRUYXNrKHRhc2tOYW1lLCB1cmwsIHNpemUsIG5vTWlwbWFwLCBnYW1tYVNwYWNl
KTsKKyAgICAgICAgdGhpcy5fdGFza3MucHVzaCh0YXNrKTsKKyAgICAgICAgcmV0dXJuIHRhc2s7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSB0YXNrIGZyb20gdGhlIGFzc2V0cyBt
YW5hZ2VyLgorICAgICAqIEBwYXJhbSB0YXNrIHRoZSB0YXNrIHRvIHJlbW92ZQorICAgICAqLwor
ICAgIEFzc2V0c01hbmFnZXIucHJvdG90eXBlLnJlbW92ZVRhc2sgPSBmdW5jdGlvbiAodGFzaykg
eworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl90YXNrcy5pbmRleE9mKHRhc2spOworICAgICAg
ICBpZiAoaW5kZXggPiAtMSkgeworICAgICAgICAgICAgdGhpcy5fdGFza3Muc3BsaWNlKGluZGV4
LCAxKTsKKyAgICAgICAgfQorICAgIH07CisgICAgQXNzZXRzTWFuYWdlci5wcm90b3R5cGUuX2Rl
Y3JlYXNlV2FpdGluZ1Rhc2tzQ291bnQgPSBmdW5jdGlvbiAodGFzaykgeworICAgICAgICB0aGlz
Ll93YWl0aW5nVGFza3NDb3VudC0tOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHRo
aXMub25Qcm9ncmVzcykgeworICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh0aGlzLl93
YWl0aW5nVGFza3NDb3VudCwgdGhpcy5fdG90YWxUYXNrc0NvdW50LCB0YXNrKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzc09ic2VydmFibGUubm90aWZ5T2JzZXJ2
ZXJzKG5ldyBBc3NldHNQcm9ncmVzc0V2ZW50KHRoaXMuX3dhaXRpbmdUYXNrc0NvdW50LCB0aGlz
Ll90b3RhbFRhc2tzQ291bnQsIHRhc2spKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoZSkg
eworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IkxvZ2dlciJdLkVycm9yKCJFcnJvciBydW5uaW5nIHByb2dyZXNzIGNhbGxiYWNrcy4iKTsKKyAg
ICAgICAgICAgIGNvbnNvbGUubG9nKGUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl93
YWl0aW5nVGFza3NDb3VudCA9PT0gMCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICBpZiAodGhpcy5vbkZpbmlzaCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRmlu
aXNoKHRoaXMuX3Rhc2tzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
TGV0J3MgcmVtb3ZlIHN1Y2Nlc3NmdWxsIHRhc2tzCisgICAgICAgICAgICAgICAgdmFyIGN1cnJl
bnRUYXNrcyA9IHRoaXMuX3Rhc2tzLnNsaWNlKCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
X2kgPSAwLCBjdXJyZW50VGFza3NfMSA9IGN1cnJlbnRUYXNrczsgX2kgPCBjdXJyZW50VGFza3Nf
MS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBjdXJyZW50
VGFza3NfMVtfaV07CisgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLnRhc2tTdGF0ZSA9PT0g
QXNzZXRUYXNrU3RhdGUuRE9ORSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4
ID0gdGhpcy5fdGFza3MuaW5kZXhPZih0YXNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpbmRleCA+IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza3Mu
c3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLm9uVGFz
a3NEb25lT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcy5fdGFza3MpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTG9nZ2VyIl0uRXJyb3IoIkVycm9yIHJ1
bm5pbmcgdGFza3MtZG9uZSBjYWxsYmFja3MuIik7CisgICAgICAgICAgICAgICAgY29uc29sZS5s
b2coZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLmF1dG9IaWRlTG9hZGluZ1VJKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuaGlkZUxvYWRpbmdVSSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBBc3NldHNNYW5hZ2VyLnByb3RvdHlwZS5fcnVu
VGFzayA9IGZ1bmN0aW9uICh0YXNrKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIHZhciBkb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgICAgICBpZiAoX3RoaXMub25UYXNrU3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBf
dGhpcy5vblRhc2tTdWNjZXNzKHRhc2spOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBfdGhpcy5vblRhc2tTdWNjZXNzT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGFzayk7
CisgICAgICAgICAgICAgICAgX3RoaXMuX2RlY3JlYXNlV2FpdGluZ1Rhc2tzQ291bnQodGFzayk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAg
IGVycm9yKCJFcnJvciBleGVjdXRpbmcgdGFzayBzdWNjZXNzIGNhbGxiYWNrcyIsIGUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB2YXIgZXJyb3IgPSBmdW5jdGlvbiAobWVz
c2FnZSwgZXhjZXB0aW9uKSB7CisgICAgICAgICAgICB0YXNrLl9zZXRFcnJvck9iamVjdChtZXNz
YWdlLCBleGNlcHRpb24pOworICAgICAgICAgICAgaWYgKF90aGlzLm9uVGFza0Vycm9yKSB7Cisg
ICAgICAgICAgICAgICAgX3RoaXMub25UYXNrRXJyb3IodGFzayk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBfdGhpcy5vblRhc2tFcnJvck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRh
c2spOworICAgICAgICAgICAgX3RoaXMuX2RlY3JlYXNlV2FpdGluZ1Rhc2tzQ291bnQodGFzayk7
CisgICAgICAgIH07CisgICAgICAgIHRhc2sucnVuKHRoaXMuX3NjZW5lLCBkb25lLCBlcnJvcik7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXNldCB0aGUgQXNzZXRzTWFuYWdlciBhbmQgcmVt
b3ZlIGFsbCB0YXNrcworICAgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhl
IEFzc2V0c01hbmFnZXIKKyAgICAgKi8KKyAgICBBc3NldHNNYW5hZ2VyLnByb3RvdHlwZS5yZXNl
dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX3Rhc2tzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogU3RhcnQgdGhlIGxvYWRpbmcgcHJvY2VzcworICAgICAqIEBy
ZXR1cm4gdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIEFzc2V0c01hbmFnZXIKKyAgICAgKi8K
KyAgICBBc3NldHNNYW5hZ2VyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAodGhpcy5faXNMb2FkaW5nKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSB0cnVlOworICAgICAgICB0aGlzLl93YWl0
aW5nVGFza3NDb3VudCA9IHRoaXMuX3Rhc2tzLmxlbmd0aDsKKyAgICAgICAgdGhpcy5fdG90YWxU
YXNrc0NvdW50ID0gdGhpcy5fdGFza3MubGVuZ3RoOworICAgICAgICBpZiAodGhpcy5fd2FpdGlu
Z1Rhc2tzQ291bnQgPT09IDApIHsKKyAgICAgICAgICAgIHRoaXMuX2lzTG9hZGluZyA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKHRoaXMub25GaW5pc2gpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Lm9uRmluaXNoKHRoaXMuX3Rhc2tzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
b25UYXNrc0RvbmVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzLl90YXNrcyk7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy51c2VEZWZh
dWx0TG9hZGluZ1NjcmVlbikgeworICAgICAgICAgICAgdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCku
ZGlzcGxheUxvYWRpbmdVSSgpOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGluZGV4ID0g
MDsgaW5kZXggPCB0aGlzLl90YXNrcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZh
ciB0YXNrID0gdGhpcy5fdGFza3NbaW5kZXhdOworICAgICAgICAgICAgaWYgKHRhc2sudGFza1N0
YXRlID09PSBBc3NldFRhc2tTdGF0ZS5JTklUKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcnVu
VGFzayh0YXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIC8qKgorICAgICAqIFN0YXJ0IHRoZSBsb2FkaW5nIHByb2Nlc3MgYXMg
YW4gYXN5bmMgb3BlcmF0aW9uCisgICAgICogQHJldHVybiBhIHByb21pc2UgcmV0dXJuaW5nIHRo
ZSBsaXN0IG9mIGZhaWxlZCB0YXNrcworICAgICAqLworICAgIEFzc2V0c01hbmFnZXIucHJvdG90
eXBlLmxvYWRBc3luYyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsK
KyAgICAgICAgICAgIGlmIChfdGhpcy5faXNMb2FkaW5nKSB7CisgICAgICAgICAgICAgICAgcmVz
b2x2ZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIF90aGlzLm9uVGFza3NEb25lT2JzZXJ2YWJsZS5hZGRPbmNlKGZ1bmN0aW9uIChyZW1haW5p
bmdUYXNrcykgeworICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmdUYXNrcyAmJiByZW1haW5p
bmdUYXNrcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlbWFpbmluZ1Rh
c2tzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIF90aGlzLmxvYWQoKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBy
ZXR1cm4gQXNzZXRzTWFuYWdlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWlzYy9iYXNpcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWlzYy9iYXNpcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBCYXNpc1RyYW5zY29kZUNvbmZpZ3VyYXRpb24sIEJhc2lzVG9vbHMgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzaXNUcmFuc2NvZGVDb25maWd1
cmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCYXNpc1RyYW5zY29kZUNvbmZpZ3VyYXRpb247
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzaXNUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
QmFzaXNUb29sczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Rvb2xzICov
ICIuL01pc2MvdG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVy
aWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9pbnRl
cm5hbFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdp
bmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguc2NhbGFyICovICIuL01hdGhzL21hdGguc2Nh
bGFyLnRzIik7CisKKworCisKKworLyoqCisgKiBJbmZvIGFib3V0IHRoZSAuYmFzaXMgZmlsZXMK
KyAqLwordmFyIEJhc2lzRmlsZUluZm8gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgZnVuY3Rpb24gQmFzaXNGaWxlSW5mbygpIHsKKyAgICB9CisgICAgcmV0dXJuIEJhc2lzRmls
ZUluZm87Cit9KCkpOworLyoqCisgKiBSZXN1bHQgb2YgdHJhbnNjb2RpbmcgYSBiYXNpcyBmaWxl
CisgKi8KK3ZhciBUcmFuc2NvZGVSZXN1bHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgZnVuY3Rpb24gVHJhbnNjb2RlUmVzdWx0KCkgeworICAgIH0KKyAgICByZXR1cm4gVHJh
bnNjb2RlUmVzdWx0OworfSgpKTsKKy8qKgorICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0
aGUgQmFzaXMgdHJhbnNjb2RlcgorICovCit2YXIgQmFzaXNUcmFuc2NvZGVDb25maWd1cmF0aW9u
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEJhc2lzVHJhbnNj
b2RlQ29uZmlndXJhdGlvbigpIHsKKyAgICB9CisgICAgcmV0dXJuIEJhc2lzVHJhbnNjb2RlQ29u
ZmlndXJhdGlvbjsKK30oKSk7CisKKy8qKgorICogQGhpZGRlbgorICogRW51bSBvZiBiYXNpcyB0
cmFuc2NvZGVyIGZvcm1hdHMKKyAqLwordmFyIEJBU0lTX0ZPUk1BVFM7CisoZnVuY3Rpb24gKEJB
U0lTX0ZPUk1BVFMpIHsKKyAgICBCQVNJU19GT1JNQVRTW0JBU0lTX0ZPUk1BVFNbImNURkVUQzEi
XSA9IDBdID0gImNURkVUQzEiOworICAgIEJBU0lTX0ZPUk1BVFNbQkFTSVNfRk9STUFUU1siY1RG
QkMxIl0gPSAxXSA9ICJjVEZCQzEiOworICAgIEJBU0lTX0ZPUk1BVFNbQkFTSVNfRk9STUFUU1si
Y1RGQkM0Il0gPSAyXSA9ICJjVEZCQzQiOworICAgIEJBU0lTX0ZPUk1BVFNbQkFTSVNfRk9STUFU
U1siY1RGUFZSVEMxXzRfT1BBUVVFX09OTFkiXSA9IDNdID0gImNURlBWUlRDMV80X09QQVFVRV9P
TkxZIjsKKyAgICBCQVNJU19GT1JNQVRTW0JBU0lTX0ZPUk1BVFNbImNURkJDN19NNl9PUEFRVUVf
T05MWSJdID0gNF0gPSAiY1RGQkM3X002X09QQVFVRV9PTkxZIjsKKyAgICBCQVNJU19GT1JNQVRT
W0JBU0lTX0ZPUk1BVFNbImNURkVUQzIiXSA9IDVdID0gImNURkVUQzIiOworICAgIEJBU0lTX0ZP
Uk1BVFNbQkFTSVNfRk9STUFUU1siY1RGQkMzIl0gPSA2XSA9ICJjVEZCQzMiOworICAgIEJBU0lT
X0ZPUk1BVFNbQkFTSVNfRk9STUFUU1siY1RGQkM1Il0gPSA3XSA9ICJjVEZCQzUiOworfSkoQkFT
SVNfRk9STUFUUyB8fCAoQkFTSVNfRk9STUFUUyA9IHt9KSk7CisvKioKKyAqIFVzZWQgdG8gbG9h
ZCAuQmFzaXMgZmlsZXMKKyAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vQmlub21pYWxMTEMvYmFz
aXNfdW5pdmVyc2FsL3RyZWUvbWFzdGVyL3dlYmdsCisgKi8KK3ZhciBCYXNpc1Rvb2xzID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEJhc2lzVG9vbHMoKSB7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIEdldCB0aGUgaW50ZXJuYWwgZm9ybWF0IHRvIGJlIHBhc3Nl
ZCB0byB0ZXhJbWFnZTJEIGNvcnJlc3BvbmRpbmcgdG8gdGhlIC5iYXNpcyBmb3JtYXQgdmFsdWUK
KyAgICAgKiBAcGFyYW0gYmFzaXNGb3JtYXQgZm9ybWF0IGNob3NlbiBmcm9tIEdldFN1cHBvcnRl
ZFRyYW5zY29kZUZvcm1hdAorICAgICAqIEByZXR1cm5zIGludGVybmFsIGZvcm1hdCBjb3JyZXNw
b25kaW5nIHRvIHRoZSBCYXNpcyBmb3JtYXQKKyAgICAgKi8KKyAgICBCYXNpc1Rvb2xzLkdldElu
dGVybmFsRm9ybWF0RnJvbUJhc2lzRm9ybWF0ID0gZnVuY3Rpb24gKGJhc2lzRm9ybWF0KSB7Cisg
ICAgICAgIC8vIENvcnJpc3BvbmRpbmcgaW50ZXJuYWwgZm9ybWF0cworICAgICAgICB2YXIgQ09N
UFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCA9IDB4ODNGMDsKKyAgICAgICAgdmFyIENPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDVfRVhUID0gMHg4M0YzOworICAgICAgICB2YXIgUkdCX0VUQzFfRm9y
bWF0ID0gMzYxOTY7CisgICAgICAgIGlmIChiYXNpc0Zvcm1hdCA9PT0gQkFTSVNfRk9STUFUUy5j
VEZFVEMxKSB7CisgICAgICAgICAgICByZXR1cm4gUkdCX0VUQzFfRm9ybWF0OworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGJhc2lzRm9ybWF0ID09PSBCQVNJU19GT1JNQVRTLmNURkJDMSkg
eworICAgICAgICAgICAgcmV0dXJuIENPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYmFzaXNGb3JtYXQgPT09IEJBU0lTX0ZPUk1BVFMuY1RG
QkMzKSB7CisgICAgICAgICAgICByZXR1cm4gQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aHJvdyAiVGhlIGNob3Nl
biBCYXNpcyB0cmFuc2NvZGVyIGZvcm1hdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCI7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIEJhc2lzVG9vbHMuX0NyZWF0ZVdvcmtlckFzeW5jID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoIXRoaXMu
X1dvcmtlclByb21pc2UpIHsKKyAgICAgICAgICAgIHRoaXMuX1dvcmtlclByb21pc2UgPSBuZXcg
UHJvbWlzZShmdW5jdGlvbiAocmVzKSB7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9Xb3Jr
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzKF90aGlzLl9Xb3JrZXIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgX3Rv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRvb2xzIl0uTG9hZEZpbGVBc3luYyhC
YXNpc1Rvb2xzLldhc21Nb2R1bGVVUkwpLnRoZW4oZnVuY3Rpb24gKHdhc21CaW5hcnkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB3b3JrZXJCbG9iVXJsID0gVVJMLmNyZWF0ZU9iamVj
dFVSTChuZXcgQmxvYihbIigiICsgd29ya2VyRnVuYyArICIpKCkiXSwgeyB0eXBlOiAiYXBwbGlj
YXRpb24vamF2YXNjcmlwdCIgfSkpOworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX1dv
cmtlciA9IG5ldyBXb3JrZXIod29ya2VyQmxvYlVybCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgaW5pdEhhbmRsZXIgPSBmdW5jdGlvbiAobXNnKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1zZy5kYXRhLmFjdGlvbiA9PT0gImluaXQiKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl9Xb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVz
c2FnZSIsIGluaXRIYW5kbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
KF90aGlzLl9Xb3JrZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fV29ya2Vy
LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBpbml0SGFuZGxlcik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5fV29ya2VyLnBvc3RNZXNzYWdlKHsgYWN0aW9uOiAiaW5pdCIsIHVy
bDogQmFzaXNUb29scy5KU01vZHVsZVVSTCwgd2FzbUJpbmFyeTogd2FzbUJpbmFyeSB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX1dvcmtlclByb21pc2U7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBUcmFuc2NvZGVzIGEgbG9hZGVkIGltYWdlIGZpbGUgdG8gY29tcHJl
c3NlZCBwaXhlbCBkYXRhCisgICAgICogQHBhcmFtIGltYWdlRGF0YSBpbWFnZSBkYXRhIHRvIHRy
YW5zY29kZQorICAgICAqIEBwYXJhbSBjb25maWcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0
aGUgdHJhbnNjb2RpbmcKKyAgICAgKiBAcmV0dXJucyBhIHByb21pc2UgcmVzdWx0aW5nIGluIHRo
ZSB0cmFuc2NvZGVkIGltYWdlCisgICAgICovCisgICAgQmFzaXNUb29scy5UcmFuc2NvZGVBc3lu
YyA9IGZ1bmN0aW9uIChpbWFnZURhdGEsIGNvbmZpZykgeworICAgICAgICB2YXIgX3RoaXMgPSB0
aGlzOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7Cisg
ICAgICAgICAgICBfdGhpcy5fQ3JlYXRlV29ya2VyQXN5bmMoKS50aGVuKGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgICAgICB2YXIgYWN0aW9uSWQgPSBfdGhpcy5fYWN0aW9uSWQrKzsKKyAgICAg
ICAgICAgICAgICB2YXIgbWVzc2FnZUhhbmRsZXIgPSBmdW5jdGlvbiAobXNnKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtc2cuZGF0YS5hY3Rpb24gPT09ICJ0cmFuc2NvZGUiICYmIG1zZy5k
YXRhLmlkID09PSBhY3Rpb25JZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX1dv
cmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgbWVzc2FnZUhhbmRsZXIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFtc2cuZGF0YS5zdWNjZXNzKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVqKCJUcmFuc2NvZGUgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlz
IGRldmljZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzKG1zZy5kYXRhKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgX3RoaXMuX1dvcmtlci5hZGRFdmVudExpc3Rl
bmVyKCJtZXNzYWdlIiwgbWVzc2FnZUhhbmRsZXIpOworICAgICAgICAgICAgICAgIF90aGlzLl9X
b3JrZXIucG9zdE1lc3NhZ2UoeyBhY3Rpb246ICJ0cmFuc2NvZGUiLCBpZDogYWN0aW9uSWQsIGlt
YWdlRGF0YTogaW1hZ2VEYXRhLCBjb25maWc6IGNvbmZpZywgaWdub3JlU3VwcG9ydGVkRm9ybWF0
czogX3RoaXMuX0lnbm9yZVN1cHBvcnRlZEZvcm1hdHMgfSwgW2ltYWdlRGF0YV0pOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogTG9hZHMgYSB0
ZXh0dXJlIGZyb20gdGhlIHRyYW5zY29kZSByZXN1bHQKKyAgICAgKiBAcGFyYW0gdGV4dHVyZSB0
ZXh0dXJlIGxvYWQgdG8KKyAgICAgKiBAcGFyYW0gdHJhbnNjb2RlUmVzdWx0IHRoZSByZXN1bHQg
b2YgdHJhbnNjb2RpbmcgdGhlIGJhc2lzIGZpbGUgdG8gbG9hZCBmcm9tCisgICAgICovCisgICAg
QmFzaXNUb29scy5Mb2FkVGV4dHVyZUZyb21UcmFuc2NvZGVSZXN1bHQgPSBmdW5jdGlvbiAodGV4
dHVyZSwgdHJhbnNjb2RlUmVzdWx0KSB7CisgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcm9vdEltYWdlID0gdHJhbnNjb2RlUmVzdWx0LmZpbGVJbmZvLmlt
YWdlc1tpXS5sZXZlbHNbMF07CisgICAgICAgICAgICB0ZXh0dXJlLl9pbnZlcnRWU2NhbGUgPSB0
ZXh0dXJlLmludmVydFk7CisgICAgICAgICAgICBpZiAodHJhbnNjb2RlUmVzdWx0LmZvcm1hdCA9
PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvLyBObyBjb21wYXRhYmxlIGNvbXByZXNzZWQgZm9y
bWF0IGZvdW5kLCBmYWxsYmFjayB0byBSR0IKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLnR5cGUg
PSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfU0hPUlRfNV82XzU7CisgICAgICAgICAgICAgICAgdGV4dHVy
ZS5mb3JtYXQgPSBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
RW5naW5lIl0uVEVYVFVSRUZPUk1BVF9SR0I7CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUu
Z2V0RW5naW5lKCkud2ViR0xWZXJzaW9uIDwgMiAmJiAoX01hdGhzX21hdGhfc2NhbGFyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjYWxhciJdLkxvZzIocm9vdEltYWdlLndpZHRoKSAl
IDEgIT09IDAgfHwgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIlNjYWxhciJdLkxvZzIocm9vdEltYWdlLmhlaWdodCkgJSAxICE9PSAwKSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBDcmVhdGUgbm9uIHBvd2VyIG9mIHR3byB0ZXh0dXJlCisgICAgICAg
ICAgICAgICAgICAgIHZhciBzb3VyY2VfMSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVy
bmFsVGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5hbFRleHR1cmUi
XSh0ZXh0dXJlLmdldEVuZ2luZSgpLCBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJJbnRlcm5hbFRleHR1cmUiXS5EQVRBU09V
UkNFX1RFTVApOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLl9pbnZlcnRWU2NhbGUgPSB0
ZXh0dXJlLmludmVydFk7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZV8xLnR5cGUgPSBfRW5n
aW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uVEVYVFVS
RVRZUEVfVU5TSUdORURfU0hPUlRfNV82XzU7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZV8x
LmZvcm1hdCA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJF
bmdpbmUiXS5URVhUVVJFRk9STUFUX1JHQjsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmFsbGJh
Y2sgcmVxdWlyZXMgYWxpZ25lZCB3aWR0aC9oZWlnaHQKKyAgICAgICAgICAgICAgICAgICAgc291
cmNlXzEud2lkdGggPSAocm9vdEltYWdlLndpZHRoICsgMykgJiB+MzsKKyAgICAgICAgICAgICAg
ICAgICAgc291cmNlXzEuaGVpZ2h0ID0gKHJvb3RJbWFnZS5oZWlnaHQgKyAzKSAmIH4zOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLmdldEVuZ2luZSgpLl9iaW5kVGV4dHVyZURpcmVjdGx5
KHNvdXJjZV8xLmdldEVuZ2luZSgpLl9nbC5URVhUVVJFXzJELCBzb3VyY2VfMSwgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZ2V0RW5naW5lKCkuX3VwbG9hZERhdGFUb1RleHR1
cmVEaXJlY3RseShzb3VyY2VfMSwgcm9vdEltYWdlLnRyYW5zY29kZWRQaXhlbHMsIGksIDAsIF9F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5URVhU
VVJFRk9STUFUX1JHQiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlc2l6ZSB0byBw
b3dlciBvZiB0d28KKyAgICAgICAgICAgICAgICAgICAgc291cmNlXzEuZ2V0RW5naW5lKCkuX3Jl
c2NhbGVUZXh0dXJlKHNvdXJjZV8xLCB0ZXh0dXJlLCB0ZXh0dXJlLmdldEVuZ2luZSgpLnNjZW5l
c1swXSwgc291cmNlXzEuZ2V0RW5naW5lKCkuX2dldEludGVybmFsRm9ybWF0KF9FbmdpbmVzX2Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5URVhUVVJFRk9STUFU
X1JHQiksIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV8xLmdl
dEVuZ2luZSgpLl9yZWxlYXNlVGV4dHVyZShzb3VyY2VfMSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzb3VyY2VfMS5nZXRFbmdpbmUoKS5fYmluZFRleHR1cmVEaXJlY3RseShzb3VyY2VfMS5n
ZXRFbmdpbmUoKS5fZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSwgdHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgaXMgYWxyZWFkeSBpbnZlcnRlZAorICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlLl9pbnZlcnRWU2NhbGUgPSAhdGV4dHVyZS5pbnZlcnRZOwor
ICAgICAgICAgICAgICAgICAgICAvLyBVcGxvYWQgZGlyZWN0bHkKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS53aWR0aCA9IChyb290SW1hZ2Uud2lkdGggKyAzKSAmIH4zOworICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLmhlaWdodCA9IChyb290SW1hZ2UuaGVpZ2h0ICsgMykgJiB+MzsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5nZXRFbmdpbmUoKS5fdXBsb2FkRGF0YVRvVGV4
dHVyZURpcmVjdGx5KHRleHR1cmUsIHJvb3RJbWFnZS50cmFuc2NvZGVkUGl4ZWxzLCBpLCAwLCBf
RW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRW5naW5lIl0uVEVY
VFVSRUZPUk1BVF9SR0IsIHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRleHR1cmUud2lkdGggPSByb290
SW1hZ2Uud2lkdGg7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSByb290SW1hZ2Uu
aGVpZ2h0OworICAgICAgICAgICAgICAgIC8vIFVwbG9hZCBhbGwgbWlwIGxldmVscyBpbiB0aGUg
ZmlsZQorICAgICAgICAgICAgICAgIHRyYW5zY29kZVJlc3VsdC5maWxlSW5mby5pbWFnZXNbaV0u
bGV2ZWxzLmZvckVhY2goZnVuY3Rpb24gKGxldmVsLCBpbmRleCkgeworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLmdldEVuZ2luZSgpLl91cGxvYWRDb21wcmVzc2VkRGF0YVRvVGV4dHVyZURp
cmVjdGx5KHRleHR1cmUsIEJhc2lzVG9vbHMuR2V0SW50ZXJuYWxGb3JtYXRGcm9tQmFzaXNGb3Jt
YXQodHJhbnNjb2RlUmVzdWx0LmZvcm1hdCksIGxldmVsLndpZHRoLCBsZXZlbC5oZWlnaHQsIGxl
dmVsLnRyYW5zY29kZWRQaXhlbHMsIGksIGluZGV4KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICBpZiAodGV4dHVyZS5nZXRFbmdpbmUoKS53ZWJHTFZlcnNpb24gPCAyICYm
IChfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NhbGFy
Il0uTG9nMih0ZXh0dXJlLndpZHRoKSAlIDEgIT09IDAgfHwgX01hdGhzX21hdGhfc2NhbGFyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjYWxhciJdLkxvZzIodGV4dHVyZS5oZWlnaHQp
ICUgMSAhPT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIlRvb2xzIl0uV2FybigiTG9hZGVkIC5iYXNpcyB0ZXh0dXJlIHdpZHRo
IGFuZCBoZWlnaHQgYXJlIG5vdCBhIHBvd2VyIG9mIHR3by4gVGV4dHVyZSB3cmFwcGluZyB3aWxs
IGJlIHNldCB0byBUZXh0dXJlLkNMQU1QX0FERFJFU1NNT0RFIGFzIG90aGVyIG1vZGVzIGFyZSBu
b3Qgc3VwcG9ydGVkIHdpdGggbm9uIHBvd2VyIG9mIHR3byBkaW1lbnNpb25zIGluIHdlYkdMIDEu
Iik7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuX2NhY2hlZFdyYXBVID0gX01hdGVyaWFs
c19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRleHR1cmUi
XS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5fY2FjaGVk
V3JhcFYgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgdmFyIHJvb3RJbWFnZTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc2NvZGVSZXN1bHQuZmlsZUluZm8uaW1hZ2VzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICBfbG9vcF8xKCk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIEJhc2lzVG9vbHMuX0lnbm9yZVN1cHBvcnRlZEZvcm1hdHMgPSBmYWxzZTsKKyAgICAvKioK
KyAgICAgKiBVUkwgdG8gdXNlIHdoZW4gbG9hZGluZyB0aGUgYmFzaXMgdHJhbnNjb2RlcgorICAg
ICAqLworICAgIEJhc2lzVG9vbHMuSlNNb2R1bGVVUkwgPSAiaHR0cHM6Ly9wcmV2aWV3LmJhYnls
b25qcy5jb20vYmFzaXNUcmFuc2NvZGVyL2Jhc2lzX3RyYW5zY29kZXIuanMiOworICAgIC8qKgor
ICAgICAqIFVSTCB0byB1c2Ugd2hlbiBsb2FkaW5nIHRoZSB3YXNtIG1vZHVsZSBmb3IgdGhlIHRy
YW5zY29kZXIKKyAgICAgKi8KKyAgICBCYXNpc1Rvb2xzLldhc21Nb2R1bGVVUkwgPSAiaHR0cHM6
Ly9wcmV2aWV3LmJhYnlsb25qcy5jb20vYmFzaXNUcmFuc2NvZGVyL2Jhc2lzX3RyYW5zY29kZXIu
d2FzbSI7CisgICAgQmFzaXNUb29scy5fV29ya2VyUHJvbWlzZSA9IG51bGw7CisgICAgQmFzaXNU
b29scy5fV29ya2VyID0gbnVsbDsKKyAgICBCYXNpc1Rvb2xzLl9hY3Rpb25JZCA9IDA7CisgICAg
cmV0dXJuIEJhc2lzVG9vbHM7Cit9KCkpOworCitmdW5jdGlvbiB3b3JrZXJGdW5jKCkgeworICAg
IHZhciBfQkFTSVNfRk9STUFUID0geworICAgICAgICBjVEZFVEMxOiAwLAorICAgICAgICBjVEZC
QzE6IDEsCisgICAgICAgIGNURkJDNDogMiwKKyAgICAgICAgY1RGUFZSVEMxXzRfT1BBUVVFX09O
TFk6IDMsCisgICAgICAgIGNURkJDN19NNl9PUEFRVUVfT05MWTogNCwKKyAgICAgICAgY1RGRVRD
MjogNSwKKyAgICAgICAgY1RGQkMzOiA2LAorICAgICAgICBjVEZCQzU6IDcsCisgICAgfTsKKyAg
ICB2YXIgdHJhbnNjb2Rlck1vZHVsZVByb21pc2UgPSBudWxsOworICAgIG9ubWVzc2FnZSA9IGZ1
bmN0aW9uIChldmVudCkgeworICAgICAgICBpZiAoZXZlbnQuZGF0YS5hY3Rpb24gPT09ICJpbml0
IikgeworICAgICAgICAgICAgLy8gTG9hZCB0aGUgdHJhbnNjb2RlciBpZiBpdCBoYXNuJ3QgYmVl
biB5ZXQKKyAgICAgICAgICAgIGlmICghdHJhbnNjb2Rlck1vZHVsZVByb21pc2UpIHsKKyAgICAg
ICAgICAgICAgICAvLyBPdmVycmlkZSB3YXNtIGJpbmFyeQorICAgICAgICAgICAgICAgIE1vZHVs
ZSA9IHsgd2FzbUJpbmFyeTogKGV2ZW50LmRhdGEud2FzbUJpbmFyeSkgfTsKKyAgICAgICAgICAg
ICAgICBpbXBvcnRTY3JpcHRzKGV2ZW50LmRhdGEudXJsKTsKKyAgICAgICAgICAgICAgICB0cmFu
c2NvZGVyTW9kdWxlUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgTW9kdWxlLm9uUnVudGltZUluaXRpYWxpemVkID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlLmluaXRpYWxpemVCYXNpcygpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzKCk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cmFuc2NvZGVyTW9k
dWxlUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBwb3N0TWVzc2Fn
ZSh7IGFjdGlvbjogImluaXQiIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoZXZlbnQuZGF0YS5hY3Rpb24gPT09ICJ0cmFuc2NvZGUiKSB7CisgICAgICAg
ICAgICAvLyBUcmFuc2NvZGUgdGhlIGJhc2lzIGltYWdlIGFuZCByZXR1cm4gdGhlIHJlc3VsdGlu
ZyBwaXhlbHMKKyAgICAgICAgICAgIHZhciBjb25maWcgPSBldmVudC5kYXRhLmNvbmZpZzsKKyAg
ICAgICAgICAgIHZhciBpbWdEYXRhID0gZXZlbnQuZGF0YS5pbWFnZURhdGE7CisgICAgICAgICAg
ICB2YXIgbG9hZGVkRmlsZSA9IG5ldyBNb2R1bGUuQmFzaXNGaWxlKG5ldyBVaW50OEFycmF5KGlt
Z0RhdGEpKTsKKyAgICAgICAgICAgIHZhciBmaWxlSW5mbyA9IEdldEZpbGVJbmZvKGxvYWRlZEZp
bGUpOworICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGV2ZW50LmRhdGEuaWdub3JlU3VwcG9ydGVk
Rm9ybWF0cyA/IG51bGwgOiBHZXRTdXBwb3J0ZWRUcmFuc2NvZGVGb3JtYXQoZXZlbnQuZGF0YS5j
b25maWcsIGZpbGVJbmZvKTsKKyAgICAgICAgICAgIHZhciBuZWVkc0NvbnZlcnNpb24gPSBmYWxz
ZTsKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBu
ZWVkc0NvbnZlcnNpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZpbGVJbmZv
Lmhhc0FscGhhID8gX0JBU0lTX0ZPUk1BVC5jVEZCQzMgOiBfQkFTSVNfRk9STUFULmNURkJDMTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEJlZ2luIHRyYW5zY29kZQorICAgICAgICAg
ICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgaWYgKCFsb2FkZWRGaWxlLnN0YXJ0
VHJhbnNjb2RpbmcoKSkgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHZhciBidWZmZXJzID0gW107CisgICAgICAgICAgICBmb3Ig
KHZhciBpbWFnZUluZGV4ID0gMDsgaW1hZ2VJbmRleCA8IGZpbGVJbmZvLmltYWdlcy5sZW5ndGg7
IGltYWdlSW5kZXgrKykgeworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dmFyIGltYWdlID0gZmlsZUluZm8uaW1hZ2VzW2ltYWdlSW5kZXhdOworICAgICAgICAgICAgICAg
IGlmIChjb25maWcubG9hZFNpbmdsZUltYWdlID09PSB1bmRlZmluZWQgfHwgY29uZmlnLmxvYWRT
aW5nbGVJbWFnZSA9PT0gaW1hZ2VJbmRleCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbWlw
Q291bnQgPSBpbWFnZS5sZXZlbHMubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBpZiAoY29u
ZmlnLmxvYWRNaXBtYXBMZXZlbHMgPT09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtaXBDb3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgbGV2ZWxJbmRleCA9IDA7IGxldmVsSW5kZXggPCBtaXBDb3VudDsgbGV2ZWxJ
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWxJbmZvID0gaW1hZ2Uu
bGV2ZWxzW2xldmVsSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpeGVscyA9
IFRyYW5zY29kZUxldmVsKGxvYWRlZEZpbGUsIGltYWdlSW5kZXgsIGxldmVsSW5kZXgsIGZvcm1h
dCwgbmVlZHNDb252ZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGl4ZWxz
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxJbmZvLnRyYW5zY29kZWRQaXhlbHMgPSBwaXhl
bHM7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2gobGV2ZWxJbmZvLnRyYW5z
Y29kZWRQaXhlbHMuYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENsb3NlIGZpbGUKKyAgICAgICAg
ICAgIGxvYWRlZEZpbGUuY2xvc2UoKTsKKyAgICAgICAgICAgIGxvYWRlZEZpbGUuZGVsZXRlKCk7
CisgICAgICAgICAgICBpZiAobmVlZHNDb252ZXJzaW9uKSB7CisgICAgICAgICAgICAgICAgZm9y
bWF0ID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7IGFjdGlvbjogInRyYW5zY29kZSIsIHN1Y2Nlc3M6
IHN1Y2Nlc3MsIGlkOiBldmVudC5kYXRhLmlkIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoeyBhY3Rpb246ICJ0cmFuc2Nv
ZGUiLCBzdWNjZXNzOiBzdWNjZXNzLCBpZDogZXZlbnQuZGF0YS5pZCwgZmlsZUluZm86IGZpbGVJ
bmZvLCBmb3JtYXQ6IGZvcm1hdCB9LCBidWZmZXJzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogRGV0ZWN0cyB0aGUgc3VwcG9ydGVkIHRyYW5zY29k
ZSBmb3JtYXQgZm9yIHRoZSBmaWxlCisgICAgICogQHBhcmFtIGNvbmZpZyB0cmFuc2NvZGUgY29u
ZmlnCisgICAgICogQHBhcmFtIGZpbGVJbmZvIGluZm8gYWJvdXQgdGhlIGZpbGUKKyAgICAgKiBA
cmV0dXJucyB0aGUgY2hvc2VkIGZvcm1hdCBvciBudWxsIGlmIG5vbmUgYXJlIHN1cHBvcnRlZAor
ICAgICAqLworICAgIGZ1bmN0aW9uIEdldFN1cHBvcnRlZFRyYW5zY29kZUZvcm1hdChjb25maWcs
IGZpbGVJbmZvKSB7CisgICAgICAgIHZhciBmb3JtYXQgPSBudWxsOworICAgICAgICBpZiAoY29u
ZmlnLnN1cHBvcnRlZENvbXByZXNzaW9uRm9ybWF0cykgeworICAgICAgICAgICAgaWYgKGNvbmZp
Zy5zdXBwb3J0ZWRDb21wcmVzc2lvbkZvcm1hdHMuZXRjMSkgeworICAgICAgICAgICAgICAgIGZv
cm1hdCA9IF9CQVNJU19GT1JNQVQuY1RGRVRDMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKGNvbmZpZy5zdXBwb3J0ZWRDb21wcmVzc2lvbkZvcm1hdHMuczN0YykgeworICAg
ICAgICAgICAgICAgIGZvcm1hdCA9IGZpbGVJbmZvLmhhc0FscGhhID8gX0JBU0lTX0ZPUk1BVC5j
VEZCQzMgOiBfQkFTSVNfRk9STUFULmNURkJDMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKGNvbmZpZy5zdXBwb3J0ZWRDb21wcmVzc2lvbkZvcm1hdHMucHZydGMpIHsKKyAg
ICAgICAgICAgICAgICAvLyBUT0RPIHVuY29tbWVudCB0aGlzIGFmdGVyIHB2cnRjIGJ1ZyBpcyBm
aXhlZCBpcyBiYXNpcyB0cmFuc2NvZGVyCisgICAgICAgICAgICAgICAgLy8gU2VlIGRpc2N1c3Np
b24gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi90aHJlZS5qcy9pc3N1ZXMvMTY1MjQj
aXNzdWVjb21tZW50LTQ5ODkyOTkyNAorICAgICAgICAgICAgICAgIC8vIGZvcm1hdCA9IF9CQVNJ
U19GT1JNQVQuY1RGUFZSVEMxXzRfT1BBUVVFX09OTFk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChjb25maWcuc3VwcG9ydGVkQ29tcHJlc3Npb25Gb3JtYXRzLmV0YzIpIHsK
KyAgICAgICAgICAgICAgICBmb3JtYXQgPSBfQkFTSVNfRk9STUFULmNURkVUQzI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZvcm1hdDsKKyAgICB9CisgICAgLyoq
CisgICAgICogUmV0cmVpdmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBiYXNpcyBmaWxlIGVnLiBk
aW1lbnNpb25zCisgICAgICogQHBhcmFtIGJhc2lzRmlsZSB0aGUgYmFzaXMgZmlsZSB0byBnZXQg
dGhlIGluZm8gZnJvbQorICAgICAqIEByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBiYXNp
cyBmaWxlCisgICAgICovCisgICAgZnVuY3Rpb24gR2V0RmlsZUluZm8oYmFzaXNGaWxlKSB7Cisg
ICAgICAgIHZhciBoYXNBbHBoYSA9IGJhc2lzRmlsZS5nZXRIYXNBbHBoYSgpOworICAgICAgICB2
YXIgaW1hZ2VDb3VudCA9IGJhc2lzRmlsZS5nZXROdW1JbWFnZXMoKTsKKyAgICAgICAgdmFyIGlt
YWdlcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlQ291bnQ7IGkrKykg
eworICAgICAgICAgICAgdmFyIGltYWdlSW5mbyA9IHsKKyAgICAgICAgICAgICAgICBsZXZlbHM6
IFtdCisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIGxldmVsQ291bnQgPSBiYXNpc0Zp
bGUuZ2V0TnVtTGV2ZWxzKGkpOworICAgICAgICAgICAgZm9yICh2YXIgbGV2ZWwgPSAwOyBsZXZl
bCA8IGxldmVsQ291bnQ7IGxldmVsKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbGV2ZWxJbmZv
ID0geworICAgICAgICAgICAgICAgICAgICB3aWR0aDogYmFzaXNGaWxlLmdldEltYWdlV2lkdGgo
aSwgbGV2ZWwpLAorICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGJhc2lzRmlsZS5nZXRJbWFn
ZUhlaWdodChpLCBsZXZlbCkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlt
YWdlSW5mby5sZXZlbHMucHVzaChsZXZlbEluZm8pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaW1hZ2VzLnB1c2goaW1hZ2VJbmZvKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5mbyA9
IHsgaGFzQWxwaGE6IGhhc0FscGhhLCBpbWFnZXM6IGltYWdlcyB9OworICAgICAgICByZXR1cm4g
aW5mbzsKKyAgICB9CisgICAgZnVuY3Rpb24gVHJhbnNjb2RlTGV2ZWwobG9hZGVkRmlsZSwgaW1h
Z2VJbmRleCwgbGV2ZWxJbmRleCwgZm9ybWF0LCBjb252ZXJ0VG9SZ2I1NjUpIHsKKyAgICAgICAg
dmFyIGRzdFNpemUgPSBsb2FkZWRGaWxlLmdldEltYWdlVHJhbnNjb2RlZFNpemVJbkJ5dGVzKGlt
YWdlSW5kZXgsIGxldmVsSW5kZXgsIGZvcm1hdCk7CisgICAgICAgIHZhciBkc3QgPSBuZXcgVWlu
dDhBcnJheShkc3RTaXplKTsKKyAgICAgICAgaWYgKCFsb2FkZWRGaWxlLnRyYW5zY29kZUltYWdl
KGRzdCwgaW1hZ2VJbmRleCwgbGV2ZWxJbmRleCwgZm9ybWF0LCAxLCAwKSkgeworICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgbm8gc3VwcG9ydGVkIGZv
cm1hdCBpcyBmb3VuZCwgbG9hZCBhcyBkeHQgYW5kIGNvbnZlcnQgdG8gcmdiNTY1CisgICAgICAg
IGlmIChjb252ZXJ0VG9SZ2I1NjUpIHsKKyAgICAgICAgICAgIHZhciBhbGlnbmVkV2lkdGggPSAo
bG9hZGVkRmlsZS5nZXRJbWFnZVdpZHRoKGltYWdlSW5kZXgsIGxldmVsSW5kZXgpICsgMykgJiB+
MzsKKyAgICAgICAgICAgIHZhciBhbGlnbmVkSGVpZ2h0ID0gKGxvYWRlZEZpbGUuZ2V0SW1hZ2VI
ZWlnaHQoaW1hZ2VJbmRleCwgbGV2ZWxJbmRleCkgKyAzKSAmIH4zOworICAgICAgICAgICAgZHN0
ID0gQ29udmVydER4dFRvUmdiNTY1KGRzdCwgMCwgYWxpZ25lZFdpZHRoLCBhbGlnbmVkSGVpZ2h0
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZHN0OworICAgIH0KKyAgICAvKioKKyAgICAg
KiBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9CaW5vbWlhbExMQy9iYXNpc191bml2ZXJzYWwvYmxv
Yi9tYXN0ZXIvd2ViZ2wvdGV4dHVyZS9keHQtdG8tcmdiNTY1LmpzCisgICAgICogQW4gdW5vcHRp
bWl6ZWQgdmVyc2lvbiBvZiBkeHRUb1JnYjU2NS4gIEFsc28sIHRoZSBmbG9hdGluZworICAgICAq
IHBvaW50IG1hdGggdXNlZCB0byBjb21wdXRlIHRoZSBjb2xvcnMgYWN0dWFsbHkgcmVzdWx0cyBp
bgorICAgICAqIHNsaWdodGx5IGRpZmZlcmVudCBjb2xvcnMgY29tcGFyZWQgdG8gaGFyZHdhcmUg
RFhUIGRlY29kZXJzLgorICAgICAqIEBwYXJhbSBzcmMgZHh0IHNyYyBwaXhlbHMKKyAgICAgKiBA
cGFyYW0gc3JjQnl0ZU9mZnNldCBvZmZzZXQgZm9yIHRoZSBzdGFydCBvZiBzcmMKKyAgICAgKiBA
cGFyYW0gIHdpZHRoIGFsaWduZWQgd2lkdGggb2YgdGhlIGltYWdlCisgICAgICogQHBhcmFtICBo
ZWlnaHQgYWxpZ25lZCBoZWlnaHQgb2YgdGhlIGltYWdlCisgICAgICogQHJldHVybiB0aGUgY29u
dmVydGVkIHBpeGVscworICAgICAqLworICAgIGZ1bmN0aW9uIENvbnZlcnREeHRUb1JnYjU2NShz
cmMsIHNyY0J5dGVPZmZzZXQsIHdpZHRoLCBoZWlnaHQpIHsKKyAgICAgICAgdmFyIGMgPSBuZXcg
VWludDE2QXJyYXkoNCk7CisgICAgICAgIHZhciBkc3QgPSBuZXcgVWludDE2QXJyYXkod2lkdGgg
KiBoZWlnaHQpOworICAgICAgICB2YXIgYmxvY2tXaWR0aCA9IHdpZHRoIC8gNDsKKyAgICAgICAg
dmFyIGJsb2NrSGVpZ2h0ID0gaGVpZ2h0IC8gNDsKKyAgICAgICAgZm9yICh2YXIgYmxvY2tZID0g
MDsgYmxvY2tZIDwgYmxvY2tIZWlnaHQ7IGJsb2NrWSsrKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBibG9ja1ggPSAwOyBibG9ja1ggPCBibG9ja1dpZHRoOyBibG9ja1grKykgeworICAgICAgICAg
ICAgICAgIHZhciBpID0gc3JjQnl0ZU9mZnNldCArIDggKiAoYmxvY2tZICogYmxvY2tXaWR0aCAr
IGJsb2NrWCk7CisgICAgICAgICAgICAgICAgY1swXSA9IHNyY1tpXSB8IChzcmNbaSArIDFdIDw8
IDgpOworICAgICAgICAgICAgICAgIGNbMV0gPSBzcmNbaSArIDJdIHwgKHNyY1tpICsgM10gPDwg
OCk7CisgICAgICAgICAgICAgICAgY1syXSA9ICgyICogKGNbMF0gJiAweDFmKSArIDEgKiAoY1sx
XSAmIDB4MWYpKSAvIDMKKyAgICAgICAgICAgICAgICAgICAgfCAoKCgyICogKGNbMF0gJiAweDdl
MCkgKyAxICogKGNbMV0gJiAweDdlMCkpIC8gMykgJiAweDdlMCkKKyAgICAgICAgICAgICAgICAg
ICAgfCAoKCgyICogKGNbMF0gJiAweGY4MDApICsgMSAqIChjWzFdICYgMHhmODAwKSkgLyAzKSAm
IDB4ZjgwMCk7CisgICAgICAgICAgICAgICAgY1szXSA9ICgyICogKGNbMV0gJiAweDFmKSArIDEg
KiAoY1swXSAmIDB4MWYpKSAvIDMKKyAgICAgICAgICAgICAgICAgICAgfCAoKCgyICogKGNbMV0g
JiAweDdlMCkgKyAxICogKGNbMF0gJiAweDdlMCkpIC8gMykgJiAweDdlMCkKKyAgICAgICAgICAg
ICAgICAgICAgfCAoKCgyICogKGNbMV0gJiAweGY4MDApICsgMSAqIChjWzBdICYgMHhmODAwKSkg
LyAzKSAmIDB4ZjgwMCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwg
NDsgcm93KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBzcmNbaSArIDQgKyByb3dd
OworICAgICAgICAgICAgICAgICAgICB2YXIgZHN0SSA9IChibG9ja1kgKiA0ICsgcm93KSAqIHdp
ZHRoICsgYmxvY2tYICogNDsKKyAgICAgICAgICAgICAgICAgICAgZHN0W2RzdEkrK10gPSBjW20g
JiAweDNdOworICAgICAgICAgICAgICAgICAgICBkc3RbZHN0SSsrXSA9IGNbKG0gPj4gMikgJiAw
eDNdOworICAgICAgICAgICAgICAgICAgICBkc3RbZHN0SSsrXSA9IGNbKG0gPj4gNCkgJiAweDNd
OworICAgICAgICAgICAgICAgICAgICBkc3RbZHN0SSsrXSA9IGNbKG0gPj4gNikgJiAweDNdOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZHN0OworICAgIH0KK30KKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9icmRmVGV4
dHVyZVRvb2xzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL01pc2MvYnJkZlRleHR1cmVUb29scy50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJSREZUZXh0dXJl
VG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQlJERlRleHR1cmVU
b29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQlJERlRleHR1cmVUb29sczsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMv
VGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9yZ2JkVGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3JnYmRUZXh0dXJlVG9v
bHMgKi8gIi4vTWlzYy9yZ2JkVGV4dHVyZVRvb2xzLnRzIik7CisKKworLyoqCisgKiBDbGFzcyB1
c2VkIHRvIGhvc3QgdGV4dHVyZSBzcGVjaWZpYyB1dGlsaXRpZXMKKyAqLwordmFyIEJSREZUZXh0
dXJlVG9vbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gQlJE
RlRleHR1cmVUb29scygpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBhIGRlZmF1bHQg
ZW52aXJvbm1lbnQgQlJERiBmb3IgTVMtQlJERiBIZWlnaHQgQ29ycmVsYXRlZCBCUkRGCisgICAg
ICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0dXJu
cyB0aGUgZW52aXJvbm1lbnQgQlJERiB0ZXh0dXJlCisgICAgICovCisgICAgQlJERlRleHR1cmVU
b29scy5HZXRFbnZpcm9ubWVudEJSREZUZXh0dXJlID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAg
ICAgIGlmICghc2NlbmUuZW52aXJvbm1lbnRCUkRGVGV4dHVyZSkgeworICAgICAgICAgICAgLy8g
Rm9yY2VzIERlbGF5ZWQgVGV4dHVyZSBMb2FkaW5nIHRvIHByZXZlbnQgdW5kZWZpbmVkIGVycm9y
IHdoaWxzdCBzZXR0aW5nIFJHQkQgdmFsdWVzLgorICAgICAgICAgICAgdmFyIHVzZURlbGF5ZWRU
ZXh0dXJlTG9hZGluZyA9IHNjZW5lLnVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZzsKKyAgICAgICAg
ICAgIHNjZW5lLnVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZyA9IGZhbHNlOworICAgICAgICAgICAg
dmFyIHRleHR1cmUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVGV4dHVyZSJdLkNyZWF0ZUZyb21CYXNlNjRTdHJpbmcodGhpcy5fZW52
aXJvbm1lbnRCUkRGQmFzZTY0VGV4dHVyZSwgIkVudmlyb25tZW50QlJERlRleHR1cmUiLCBzY2Vu
ZSwgdHJ1ZSwgZmFsc2UsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFKTsKKyAgICAg
ICAgICAgIHRleHR1cmUuaXNSR0JEID0gdHJ1ZTsKKyAgICAgICAgICAgIHRleHR1cmUud3JhcFUg
PSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RFOworICAgICAgICAgICAgdGV4dHVyZS53cmFw
ViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgICAgICBzY2VuZS5lbnZp
cm9ubWVudEJSREZUZXh0dXJlID0gdGV4dHVyZTsKKyAgICAgICAgICAgIHNjZW5lLnVzZURlbGF5
ZWRUZXh0dXJlTG9hZGluZyA9IHVzZURlbGF5ZWRUZXh0dXJlTG9hZGluZzsKKyAgICAgICAgICAg
IF9yZ2JkVGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlJHQkRUZXh0
dXJlVG9vbHMiXS5FeHBhbmRSR0JEVGV4dHVyZSh0ZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gc2NlbmUuZW52aXJvbm1lbnRCUkRGVGV4dHVyZTsKKyAgICB9OworICAgIEJSREZU
ZXh0dXJlVG9vbHMuX2Vudmlyb25tZW50QlJERkJhc2U2NFRleHR1cmUgPSAiZGF0YTppbWFnZS9w
bmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUVBQ0FZQUFBQmNjcWhtQUFB
Z0FFbEVRVlI0MnUyOXlZNXRXWElsWm5idWlTYVRiWkZVa1pSS3JDS2hFbEFTUUEwRW9RQUJnbjZo
SnZvWHpmVVArZ1A5aFdiNkJnMDBJZ1JvUUphS3FVeG1abVRFZTgvdjB1QjJ1N0ZtMlQ3SEl5SXJu
ejg4dVB2dDNmMmEyV3JNYk92Zi91M1B2dnpQL3NVZi9ONi8vaTh2Zi9sdi8zdjVILy9kLy9TYi8v
VXEvNXU4eWY4aFYvbS81Q3AvTDFmNWhWemxHN25LSjdtS3lKdUlYTi9oUHdxWEkvZysrenE2clBJ
NXU4eitXcWZMcmUrenk3UHJWdjlMOGJyc01pR3ZrOFhMbU0vc2RmSFhhbDRlM2FkNkdYUGR5dTJp
ajh1Lyt1di81Y3VmL09TTGZkdEVmdlVyK2RuZi9kMFgvL3QzSC83YmYvaFAvL04vOTI4aC8wWWcv
NFZBL2tvZ2Z5R1FQNVdyL0lGQXZoYklsd0s1Q0dRVFBQKzl6NXVQZWVQSlNXK3lvMitzL0d0TjMw
Um52MUUrZjV6eG9mOVIvbFNYdi9uci8vbXJyMytpKzVkZnlYN1paUVAwN1RmZnlzLy84Ui9sLzlU
dFg3NzkwVC83ci84RzhwZHkrLzhYQXZubkF2a3pnZnd6Z2Z5eFFQNUFJTDh2a0o4SzVLc21NVnp1
MVU3cDVQQTVBWHhPQUo4VHdQZjdzWC81MVplWGZjZW1xbnA5dy9XNzcvUzdYLzZUL3Z6Zi83Mzgz
UldDWDMvejA1LzlpMy8xMy8wUFgvL2VYLzJGeVA4dEl2K1BpUHk5aVB5L0l2SXpFZm01aVB4Q1JI
NGxJdC9jLzM5My8vOUJSRDZLeUtmN2Y0ODhmUDc0L1BINTQ0ZEpBRjljTGw5OElaZkxCWnR1cXRl
clhyLzdEdDk5ODJ2OTVTOStMditnRi8zaTdTcHYvOGxmL3ZuZi92R2YvZEYvSmZLbkl2TG5Jdkx2
UmVRL05FbmduMFRrbHlMeTYvdi8zNGpJdDAwaUdKT0JseEFzZHZ2NTQvUEg1NDkzU1FDWHk5dDJ1
ZWgydWVpbUtvcnJGYmpxOWVOSCtmRHRiK1RYdi9vbC92SHloWDRGeGZieDdldVBmL0xuZi9QZmlQ
eWVpUHloaVB4eGt3QitmazhBdnh6UWdKY0lyR1R3RnNpQUVYSDQvUEg1NC9QSFVnTFk3d2hndTJD
N2JMcXBRZ0hCMnh2ZVBuNlNEeDgrNkc5Kzg0Mzg0dktGL0lQdThpVlU5WS8rN0MvK2pXeGZmaUh5
dFlqOFZFUitYMFQrb0VFQnZ4cVF3Q01KZUluZ281RUkzZ29Jd1ZNSVBuOTgvdmo4RVNhQWJidHUy
eWJidmw4dTJ5YmJkdGx1U0VDQTY1dThmZnFJRHg4KzZHKysvVlovZWZrVi9zTzI2MWRRWFA3d1Qv
N2tYOHZsOHFYSUZ5THlsYnlTd2UvZEUwQ0xBcjY1Qi85dkduMGdRd1JNTXFnbWhNL0o0ZlBINTQ4
ZUFlemJaZC9sc20zWXRzc05BWWlxaW9nQUFrQ3ZiNS9rNDZjUDh1MkhEL3JyYjcrUi8yL2I5V3U5
eUplLy84ZC85TmV5NlM1eUVaRmRSTDY4LzM4a2hHL3VLT0NuQXdvWWtjQ29FWHdrRWdHRERxN0Nl
UWZ5T1RsOC92aGQxUUN1bTI2eWJadHUyeWFiYnJLcFF2WHVlMXl2dUY2dit2YnBUVDUrL0NEZmZ2
aUFYMSsrMVY5c083N1dYYi82NlIvKzRWL2Rna2JsbFFpK2FCTEJWL2RFOExXUkFMd2tZQ1dDTnlN
WlhFbGt3TFRNZU1rZ2EvUDQvUEg1NDdjY0FWd3VjdGt2ZHhTdzZiYmR0WURiVGZTWkJON2U4UEhU
Ui8zdTR3ZjU1dktkL25MN0RYNm11Mzc5MVU5Ly81Ky9na05GWkd1U2daVVF2bktvd0tnTFdMVEFR
Z1J0RW5pVHVFZndhRUx3ME1KdmYzTFF6eW51ZCs1M3VHK1g2eTNnTjlrdWwrMnk2WFZUMVUyN0pD
REFGVmM4a3NBbi9lN2pSL25ONVlQK2F2dFdmcTZYeTlmN1Z6Lzl3MWRnUlluZ2l5WWhmTmtrZ3pZ
QldIVGc0NEFFTW1xUVVZUUtPbURhaUNJYThUbXNmbXpCK0RuWkRRamdjcEdMYnRpMnkzYlpIalJB
ZFJNVnZiL2RjWVU4a2NEYlBRbHNIL0NyYmRkZmJGOTgrUlBaZnZMRm5BUWVpZUNSREM1RE12anUv
dm1ENEprRXZqUlFnS1VMZUdnZ293ZEhrQUhUWXhpaGc4OXZ1ODhJNVVlR0FQU09BRlRscmdQb3Bp
cWJLUFNtQ0tyZVVvQUFrQ2NTZVB1a0h6NTkwbTh2SCtXYkQ5L0pQMzM1azYvK3RBODZLeEZjaHY4
ak12aGlvZ0U0SlFtOFhoZktxT0FxeDVxUlB5ZUd6eDgvY2dTd2JYY1VvTEp0aW0yN0M0T2k5Mys0
djZWeFF3S0F2bDJ2K0hqOXBCOCtmWkp2dDQveXpmYkY5bFBkdi93Sm5zRTJCb2dteWVDUkVENDB0
R0Z2a3NJWGlTYmdpWVNSUnBETkRaNkJESTZnaE0rSjRmUEhleUtBTyt6WDdjYjl0NHRlZE1NTkFR
anU1VitmMXVBdEJTaXUxenNkdU1ySHk1dDhlUHNrMzM3NktOOThzWC94RTVGUEFubTcvNzgybzBE
aVVJTlhNa0NYQ0I3L1A5NC9lODdBV1VtQVJRV1Z2Z011S2VqOXQxUkxCcCtUdytlUGd3bmdzdXRG
RmR1MjZXWGJibCtyU3ZkZmJucUFpdUEyM1FjQmdDdWdWMXpsN2UxTlBtNXYrTEM5NlhmYkovMVc5
eSsrZmdYakEzYkRZWFYrTXVoUndTUHdMM0pMTUZZQytIUy9MVThIWXJHd0lod3lOT0YxMlN2Z000
U2d6dGRpZlA4NU1YeitLR3NBMkM2WDdhSjZiWFNBT3dyWTVPWUlxR3kzZDV1cTRQNUdoQUJYdVY2
dmVMdlJBZjEwZlpNUGIyL3kzYjd2WDcrZys5djk4L1dPQnE3R0c3Uk5BbFl5K0Rna2hoYitYeHAw
c0U4SUFDNFNHQVAvVGJnVkpLL1BvSlBCbkFpd1BLeHNYZmJiblJnK2kzcy9KQUs0US80YjlOZkx0
b21CQXFDaWNrTUJqeTdCdXl3QVVWeXY4bmE5NHRNakNWemY5S05jTGwvMFNlQTZvQUVZYjFpOWcr
RnRTQUxiL2JLTDgvK3Qrd3hYRk15c3dxaUhvSzRUb0lnS3FzbGdwZzFxVUMwUW9ZYnZKWmcvQi9x
NXY0c3pIbVBYN1lFQXNEMENYMjVPd0VVVm05eGFnMSthZ0tnK254UUFybktqQXREcjlVMCtYZC9r
NC9VcUg3Ykw1WXNld3JjQkJpTUpaUFJBcDZUd1FnV2ZqTTl2Z1JiZ1VZR0w4QXZMV0gyZ3FoZXND
b2tlVW1DU3dQc25oczhmUDJZTllNTzJYZVNtQVd4eTJWUWFYZURtREloQXBmMzNyRDRQVFVDdVYr
RHRDbjI3WHVYVDVpcjhWbUNKMkc1QnBCTTgvci9kRWNKYjgvMGxFUU10SkhBNVRBbHFOdUxSaEpD
aGhFcFNxRmFiSDNkaStHMUFHaitXMS9keUFSNElZSk5ObnVMZjYrdFdDOUNISGlBdEZoQUlGTGpL
Mi9VcW42NVgrU1M2N2FLKzNRZVREb3kvSUcyb2dRN2ZiL2RBdHo1dkJncllHcXJ3TnRDSHNWZmdJ
dndLMDdPVFFCVVJWTkNCRnBLQ09qcUNIbjVMLzY3VGdUTitmcHlTQUM1Nm53U1VpMjU2a1hzU3VG
R0FWeUxvVUlEbzgvUHo3ZmRvRXJyL3YxN2xrMTYySGJnSHZGcElZRGZvQUpKZlc0c0dQamtVNFZO
QUY4WkVjTG1MaGRjN2tsamRZMXkxRHE5eUxpSTRJaVJxY0x1amIxMzhLSVBuODBlakFUd1J3SWJ0
QnZuMWNxdisySjc4LzVFSTVONGNKQThxSVBjbXdSc0tBSERGOVdZUDZtVjdWbXJnTHVUcHhZVGNN
RVcwTEFtb1F4RnN1dkFJOHR2L2EvQzVmVjJaTU1pS2crK0ZDTTdSRFBSdThlYldZN1ZHNlZKaStC
emszNU1JMkxzQWNrTUFnd3ZRMGdDNURRamQzQUJnMkhRTEFQcEVBbFoxQnU3VlY3TUdIREZSQWJv
M1ZLc1RiQVk5c1BXQy91dng4NmdCYkRLM0QxZUVRUzhwYkFlU2dTd21oZXBuSmI2dUJ2L28vUHpI
THp4V0EvWDdUSDc3RGU1ajZBR1FpNm8wQ1VHZkNPRDJYN2NYQWxDRlFBQnRFc0dMRHR4dU95UUIy
VVRRQktaZTVHVVBYZ2tVWUNVQWJaSlJoQkRldXE4eEJmK2Jnd2JlaERtK0JGUWkySUprc09vY3ZB
OHlzSU1meGx1VmNSc1kvZUIzSnpIOEdGREFYUU80OFgvZGNJZjlqeURIcHRJaWdEc0ZrRWUwNjZ0
QlNFVFFVWUY3RWxEZFlFQnl0TjQrcms5VWNCUGZyS2FacUZIV2N3M2k0SjgvWDRldjIvL2JTWHFB
aHdUYXk2T0VJUExEMklwdDhPdEFHenhrd0x3OVdWRlJqVGMvcUM2SDMrWUsvYjFvQUEwS3VPaXpI
ZmllQ0xhSEhpQWI1TllUSUM5RU1FYlpyVkVRdDF4d2hWeTFVZkJoOFBVT3F1TWl6d2FhcDN0UVhm
WTVCLy90ZWEvTlpkZmhzdmJ6K1BVUlFURFNHV0I4N1ZYLzdXU2Q0S3hqVXFySWdFMElVa29LR25o
SXZ3dmF3cEdmNmVFQ1hKN3R2NHFiQTdESmd3cHNLdGhFbW1ZZ2ZhQUFmZllGM0hMeG8wdndOakow
U3dSV01HNGRiNGVoMWdQTm0xOHZRK3VzLzBlR214RGVtdS9mbk0vWDRldnEvODM0MmtzR0hnTFk1
THlUL3pnMHdNOGxjTWpnR0ZYd3FJT1ZGSkJRdzk5ZUN2RjlvWkw5TWZsM1F3QXZJWERzQlJDOVIr
Zno4eDBGUEJMQjB4SkVwd1VvYnJmQWtBUmdJQUY0MWgzd1FnUDZRQW1YNUUvN2VJNDNJeEd3d2Yv
bW9Ja1J5V1JKUUlQZ3Q5Q0E5YjM5bnp0NGJZVVdqQWxDaldEUGd2OElFamdMSmZ6dWFBc3J2OVZk
Vkc0T3dPWFcvZmRvQTM1cUFkTDBCRHd2ZjZBQVVWSGQ4TElFdTk0QTNLK1ErMll4YUI4NE1PSDYy
UC8vcW9vMzhmQ1JERVJFMnpmMEpmbURhK01pZUVsQWpjRFBLeittUktDT3RkZ0d0WGFCamdOSjRI
Mm93U3BOZUFXL3JSSDRDYUhTcE13bkJZWXljamdTSndmaWU5Q1I2bVB1MjBVdjhrQUJGMjA2QXZY
bEJNaUlCUFNsQjl3akJXMWZ3RXVTYjk0Mjk2VkNxZ01hR0N0L0cxQmJFeGkzSUcrcjNhM0o2UDQ4
R3YvSjBZbUVZb2lHWTdWL1N4d0ZDd0dvRS94YTBBSjBDRWlWOVFQQ0piMU9KNUYxVlRqRVkyL01P
OUFFSnZqMUJKVFFwcUxmVGxHd2pBQnV6VDk2MmU0SW9LbnlyZGgzKy82bXpEVko0UEhPeGowSnFH
S295MjArd0JNTjZEMWdMV2k5TlFIZlZQNU1FRVB6akdZeThCTUFPblRBSmdFcjhIVUllalJvNXhy
QTV4a1I1QW5nbWlTSHMrekREQW1NZ1d6VGc1NUdTSkVtSEU4SXZXUEFvWVRmaFdhay9Xbi9iUTBD
R0xTQWp2ODNTVUVmS3A1cTI0TFh1UUlDcHpyanJnV296YTh4VkUwMENRQ09SZGhNSnVUVVQvcmp1
bHMwZ080SWJ5OEJJRWdLNmdTN0JzR3VUdERyU2NIL2ZSNjhiaVVITlZHQm54amVOeUhFdlFlL3Zl
M0xaUXFnRzNyb2Y2Y0VjbHNOZmxHOUo0S3RhUThXSGNWQkhTMUJ0SEU0UVA5T0JNUzk4bXBiS1Rl
RFc3ZEp3UnNuSHBNQlRGSnBWNEkrYjBrWS9OcUluVkZTeUJMQU5ibk1TZ0JNOEYrRnFmeHEvaDY1
Ny9VcCtHYUJud1Y5aFJxYzliWi92QTZ2dStUOUU4S1BKV25zOTRVZlRlQ2oyUVh3Q0hTOWROTDhY
ZjNIby9yZmV3U2VGT0RHRFY2OUFVMHk2TkZBRTFEUDNxSysrcmRCNy8xSFJ4Zjg2Z1QzNzZ6T3I5
OVQvaC9pb0JpWFdRa2dRZ1ZlSXJDQy9Xb21oRG1RSytoQVNJMkFSUVpLb29ITUxkQ0p3R0VCQlhD
Myt1RVJ3ZytWT0haOWlvQXQ5SDgwQUkwNndHZ0ozblFBM0JvQ3V0NkFoeFl3Z2NQT0ZueHVGbnJw
aGsrTklLSUdyV1BRdGd6M2IwaTdZNkQ1cnMxR0txVG9wMG5RWDUydm1RQzRCa2pBK3I0YTdLeDlX
TEVOR2VlZ2toU0VUQkNyTlhJTWRpLzQ0NFJ3MW42RTk2cnk3T1B1ajhVZkx4dFE3OE5BMmlTQmJn
N2dJaUliZERMc2I1YWdQaExDM1JrWUt2OE5EYlMyWUdzYXROUkFHMm9Rd2Y5WklPeWRneTFNQXpC
a0F3OFV3RUVJRHpTQXFkUFE2emEwUGtlSkFNSDNaMHdYbmlVU1pvSHZCWFUybWNqUWd2NTZUZWRJ
S2dsQ3BJb1FmZ3dDSWpPeXRkOFdnTjBiZnhvUjhGbjlHeDBBajVaZ3EwbElaYnNIL2liU0pvRm5T
K0M5OGc5b29IRUVMSTNnbGl5MjV5T05JaUU2cGIwTmZCbHlORVl5RU5vb2RrS3dnbDZJNnM4a0FS
Z0o0Wm9FZnVZV0hMRUphMExoU0JYbTdrSW1HZVNmVmRvSjFETzJHN1dYc2VoQXB0dXBTT295ckNT
RjkwNGsrNnZ0OThYL1pjTTk4SHNkNEpZSVhoUUFJZzMvZjlBQVVZaHNMUUtBdGtIVkJuempDS2hP
b1lsMnltK2lCdHZ6RHpRMkRMWEo0UFVtYkpIQVZuQlFYNGpreGZ2SGhORHFBZEhYR1FKZ3YwYVNE
R0l0Z09zZUhJVStLOWhYbklKemtvR2xFS3pOSGFnVGRKNlZXRVVINGlDS0g0ZmQyQXdEUGFZQm00
V2duZzRnUTlWL0NvR2l1Tm1EMDRBUXROR01HelNBQVEySTJwemZvZ1k5TFJoN0JyYk9oNCtEMzBz
QWVuY2xqRnUyQ1VGcndZOFVBV1JmV3dHdlZPVmZieDJ1SUlMTTBwd0R2MDgyZFVUdzhoWXM4TCt1
SVdpSEdwV2dDbG5BYTFsTVBKb2dvdnZ2YmVQUHMvcTNYcisra2dDc2ZnQjVvUUY5V1lLUEpxRW42
RytPRTNpNUFxb3VGNTlGUU9tYWhRQzhybFBMajM4a2cxYzJmMzB2dytYYW9JWDI0L3BNR0lnU0Jv
WnFvSDN3bzBzSUlHbEE5UFdjQ1ByQXRwUEI4ZUJmNngxbzZjSHJhKzIrdHBJRlA0UGdCZnhadFpV
SmZvNHF4RUxUOTQ4RDl1Y0s4TXQ5K2NjaklRdzZRSmNFYnJELzFnMzQwQVR1RGdEa0ZmeDZ0d1Nm
MWY5eHZ1QkVDWXhxLzd5dGhRUUdtKzVKRHg2QnJ3NENrTUdUM3dnc2NDVW9RNHNVMnQ2RFIyY2lC
alRndGNwZW5Rb1pWWDlOdUw0T3djK2RWYUR1cnNZVmtWQUxYK3NoalNCS0J1dkNZRFVaakU1QmRO
a3hkSEFVQmV4eUh3QjZOUDdJeXc3c3hVRFZpd2dlMXQrbXo4Qi9MQXZWeC9jM1BlQkJDVG9COElV
R09ncUEzaVY0eVVnNlVBT3hhVUZIRHg2Q1lTOFNvck1PdWUwQ0NKR0FmNVlmUmhvQUkrQTFDdnd4
cU5rQVk1eUFJeDJFUW1rRmZlV09YaStuRWRTUVFBMFpITUVJdGlhZ0pBclF4RFhJcmo4bkNmUWk0
SFpQQXR0cklhaHNvOW9QUS8yL0p3VjVKUVU4encrN0k0RDcvc0JuNEVPNnJqdzBGUitpM1o5Zkh0
YWh6c0Z2SmdNMFgrdG1WSDV2YVlpTkRHQWlnZXdBeitneU5MVGhuakNVUlFGUjFiOWQzbFp2blZx
bWo5bUVQREtJVUlDNEtDQ2pCWHl3UzROK290cC9IazNRVnRoT2t3RUtsVjlQUXdYalQ3cy96d0Y0
UWY5dG9BQXpGZGp1YUVCNlM3RDEvL1U1RklRdTJNZXZPMHJRUUg4Wm1vWEU2Qi9Ja2dFNjBYQ2pW
b3E4Z3QyaUNHMFM4TDVHZHhrTTFjR3Nmc0NNQXJTQ0FucnI3ZHpBWnhDRUVwZXB2Qjh0cUhKL3Er
Ym1KR0d0cy9BY0FYRk9NTWVUd0M3UHcwQjZDdEN0QTJ2V2dvbnFCUUpGU3dIMEpRSzI5T0Iya3Zn
ajJISFhBb3llQUlzQ1FPMGtNTkVDQWhGTXFDQmY4bUVsQWt5QmJYMXRKUVAyUkovaGEwZ3BBZlM5
bCsvNW4wMENrclFwcTBNWmJPZEF1eG1Ndkhzd29nNjJqWmo3Qm5ZUWUxOWIxNGt4TnEyRC9laFgv
cDY4SEVjRit4M3lQN3ovVi9BL3EvNURBM2k1QS9kekE1cGRnYktwM3YzL3dRRjRCYjcwV2tDVEhH
UkFBNitLTDBiRmw2RkphRncwSW1ad202aWdTd2Jid1BuOVJNQldmM3NOMkpnQS9CVmgvUmcwa1FC
Z2VQZjZIZ2xBSExGUXdxUVFPd0RqYmRWeE5aalI0aU02UWEzV3h3dk54aDBKRmIzZy9XekZRUVM4
Yi90dEtjRFdvQUJ0VU1BZDhqOWhmME1CMnVEWGh6WDRDSGowM0w5REJVM1FqejBDMGw0bUxTTFFQ
aWNPT3dab1ZDQjZQNmRBN25EYkdrVnV4Y05yOFBVMkpRTzR3WDV0ckVxbWNjWmFIVTRxOG9DREZP
cHpBbk93cXlNSU1rdE5OTkFIb3VER3hPMzdEZ0FyUVp6bG1wLzE0VzFRbHFIVE1hSUl4N1NDeDAr
NXl6YTdBS0ozSVhCck5BSFZEY01aQVUvQlQvdmd2L1VMUE9BK1hpTGdnQVJFREYyZzBjaTZ4TkRS
Z2xlZ2Q3UDdUV1dINW9KZmF5bGlFZzdiU2NRUkJWZ0k0T29rZy9GNnJ2cExXUDI5c3dSRXFBM0Nh
RzgvRnBLcVM4RFRBVjRUaUJxSXF0eGZ6YVFSTHlzNUkwWEVGSUZyUGJaUlFiKzE2RmdpMkx2SnY4
RUZVUFcxZ0dmUXYxVC9GL2QvSEJuY2NQN3JBd25JSXlISTRBcmdXZUdiVTRlSHk2VHgvRWVUWkli
NWJvL0JzTUJqbWpCRTA4Zi9SQjBQSFlCZDllVlJBR1k3Y0hSd2lCZjhXZUNQSFkxYmdCVGE5eEtU
RUx6RWtRWDlDUHRsMGdKaXFzQW1DVDdJOHhiaml2aDNKR0ZJK0QybkJjU0pRSjhhZ0RYK085aUJM
N1VmRzRiekFrY2FJQ3JidFlIejF5Y1NtR21BakpmTDNDTWdUM3RRcG1yZkI3Z3hTekMxRG52ZGhR
TWllRzQ3dTc1K2tUb3VLTmtNOGMvK3ZxL1E3WllqTy9oaFZ2UnE4Ri85Z0dmaFA4YXFFOUVJZFI2
TFR3SjFoMEJJdHlEcUI4aUZ3dU5xQVNzY1JuWWlveE9nOUFwdm5ZQTM1ZjhlOU9oYmZlOEo0cmtu
b0ZrTzBsbUEyZ21BRzBZSzBEa0I0aWVFamlMb01EOHdCem9tMjdBTlpreklvVThFTUhrL3VvMW16
ZVZvRW9SV0tuOEwvNjJFWUFYL2xzQjdEL0xYZzc0dUFNcjlvR2l2SjBDTkpDR0Q2aTlEaFpkUUYr
Z3RPcDRTK05PRFJ6c0RWYmhkZ3Y0QnFUTU55SUw5U0NLd0w5L0ZHUHA1b1FLeElmOEEvVVg2cjIz
MUg3WUlxTE1MMEFlMkd0ckFET3ZSUUg1Yi9NUEU5ZHQ5QkdMTkc4alZUQVF2SWFLNVR0dnZ2V1Fn
RHZ5WElDbFVBNzhTOU5mZzdWdElCbE83Y2JzRVlrUURNb3QreWdRN1F3bU9hd1RIbkFNMlhVU25K
dlBJWVJZTW1ZUFMrc3YzSitjZlAzZDA0SllJWHNGL0V3TWJCS0I5UTlBWStCaVN3Rmo5bXpyU1ht
Y0poRlBWSHlTVGJnSEpDUHZSUS96N0cvU1ZVRVRzZzBaRitpM0NSb0NqaGY3eTFBOW1PaUREN1R3
ZHdFb0VYakx3QXYrYXZMRTJCN0puYitPcURwQm9BY2hvUUpza3hLbnNzMHZ1N1EyWWhjRHY0eVNl
TE9nOUdzQ0tpVUlpaFA3eWZXN3piVHNCaDBUUWZOMGlBV245ZjcyWjU2L0F4OVA3ajVPQUgvUXZ2
My9ReEtmazBEZ0R1UCtSM1VTZzNiekJDN2JPL1FUOUVlaDlRdkRQRzdnbEJRekp3Szc0MGxBRkZn
Rms4UDg4Q3FER0FhMjIzWWNrV1locitjMEJQZHdldGwyb2Nuc2Z6ZVBBV2NWbm5BSXA2Z0RWaERM
eWZWNG5xRkVEUHhIc2JXRDNrNEJEa04rcEFScUtNTFlCUHpZRXZ4cDl4bUNIUVFkZ1dILzlFdEgy
VElGcHUzQUgvY2RHeWR2MWowVFFiUnJxK0QvbUxjWDNaQUNaMTViRjM3OENHME15NktxL3pvR09R
d2hBU0RGd0ZieHlOR0J1U3hiQ0VoUS91RVBlLzZnQUVSV1FPYkNWVmZqUHBRWCtyZXh4WWhZRnhJ
a2dwZ1g3WS92UHMrUHZ4Zjl2d3Q4a0FzN2kzMnQzUUNQKzNTUGFUd0l5dFFYUDM4dTBQRVNtK1lF
UitvOUIzdnI4bUVUQVVmRHJFa1BJODBjazBGWjBkWGg5VStIUmJoZXkwY0FjMkg3QTR5NGVnb0Q2
eThKZmtCaWlnTGRGUDh2MlcwMEU4ZGVUMkllQUt1alovUUFWS3BBdEtJMjBnTFdrc0hlZGZnUGNi
KzArTkVIZWZkOXZCOXJheWk4aDdKOTFnQmJhdzIwTXNuV0FGNXhIa3lEVUNPb1hwK3lyT3d3eGNL
ajBhTDZmRnBwYWFLRHY2T3BIUjVzZ3g1QkFsSy8rZllodVAxRDE5Nm84ZTdsRkJhS3F2NVlJTW5G
UXBkMEZHVlIzNVJKQ25DRGFBQmFYQnRnYmlTd3RJQ010YWxLQysxSlE2YngvUExjRFBRTDkxUUZv
ZFFOS3B3T2dGLzllcWNCeEJCcVJjS0FBVmsrQXJRT014MVJZR2dCNm5hRGhsSyt1UVF3Sll4NG1l
UWJ4dE5uWVF3TWp0L2Q0ZjNNOVpFNFVPbGQxTEFoOTlmYmZ6T3hpRWtLRkNrVEpJVUlNVWVWbkov
OXNEdDgvZTFORUpPaTlvVkhER1loZ25TTHNzOURYMklBcXcxekFMVW5jS2NEcjBGQjVOUCswY0JR
TnJFZXpEaXlpQURQa3Q5cUdwd29QZEwwQUdQeC9OT0tleWYzYjlXSk5kZmNGdjZiS2QyY0xNSlZm
SjZZM0I2d0I5V0ZVZldXRXdLTWZHaVFMKzNiejlYR1F6MkVIS2hGNDFHQ3RaeURpL2dVQ3NOaFlv
QXIzVU5KNThZaWRIS3FuTWIvNkFCNUo0TjczLzRMK3Q3bUFrZWVQM1ArMUxOU0IvbDBTa01FZDhE
Y0V1VWxndUV3NnQyQVUvUENFL3ErK0FrdzZRRmYxdTZTQnJqMVpubmhHNTBBZmtvR0lkZjdnSnYx
S2NTZmd6V1drUTlVMzNaM3RIWFlBU0tKOWUvWWhVOTBydkQrcTlFajY5L3d4WUpWczUwNkVnL3Iz
RGtNRHpFZERCUkdnY1pheTQ5WGloTEEzMFArbDhOK2hmMWY1Ny8wQW94YlFid1lhYW4vckJNaXJF
OURrK3NCelRrQzhKTkRFVWx2NU1jQjhQUDE5WTAxR2F5ZXAraEMvMnp2US8ySEdMQXVyb3dzTkds
QTFjbnFHR3plSDV3ZWlZTFptN2gzUVFDNE8ydFhkaHZNTWsxWlM1ZWJwZ0k4ZU1yUHZQR2t3YXhh
eWs4WWM2UE1PQlBFZEMxWForMlVmYmZPUHR4TE1RUUFHOUJjWkZvRjBncC9SS2p4ZTcrb0F3OVQ3
WlBXaGdlZG9kZ3owZ2Y1S0J0cnRJWmhRQVpwQVYxQmkzNnc2dDk4cVZmSDdocUdJMzE4bExDakxD
VUZseFJId3FZRUg5YTJxYjRYald2RFQ3a0J3ZmJaQTVQMCtQTnVSdVcxeWY0eU5RSDN6end2NmI3
MFFPSjBHOU9UL2Rob1lSVUdUMTV1UUgvNzFNalFMdFFseGZEdWlDWHJ0TStTa0EraWNRZEg2c1Uv
eHo3WmU3Rmx1YlY0VHBvVFEyb3NkcGFFanRxQURtRVU3T2tCRUZvTGVDM0lXRkZlc3dKWEtYemti
b05MK3d6Y0ZIVThoVEdLSWJvTzdDTGkxL1ArNUYrZ3lkUWh1dlJid0VneHZ0QUNtQU5pa2hMVGJq
MGdDWWs4S2RsWWdtais0WW1hb2Q3VHdhaHdhZElDdVgwQ20yZkU1aU5IUEsweC9DRFY2Nkt5ZzFN
bnFqTkZCbmhCb0xRQ2dVVUxmYVZlNW5xLzZFUVdZNjdiWENzelViKzcyMzJmVlB6NTFpR0IxMm93
SzlwZXlQMVQ0cmFNRkYvT0VZSlA3OTJtZ1hZZlowNEdITUFoQmtDU21TaitkS3FSUGdWRkdIYnBM
RUdNaUdGZVFXZlNnclk1MlZ4YWVEVVBTTkpJMFA3Tm9pc0c3MjlISGw3OHo2aHhmczlyVjNtNEpq
Z00vbHN1aTJxbVRoakNmREZTYitJOXZ3VXFHNXd3TDU1VTdDKzZvdDhCKzdOMm82cjNxMzdUOXRy
ZnBqZ21UdnY3UFNRQVRMTGVSQU9aaElKSEJRZkRRUUpQQmRVd0ViVlczK0wwOEVjRUUvOUc0QU5y
Q2VXY25QS1JIRHVwYk55bk14NUFBOUlSWUxtcmMvWUxTaUQ1RWFFQlMvcy9UZ25VOUlMY0gxOW4r
Q3BId2VnTGVqeDdNbi9kMjVmZE4rZTlVLzF2Z2I3YnFmMDhNT3RmOEVYeGFvaCtHWThMNmdEZmh2
czRpNkhRN3NlWUkyc3YxR2NoZE1zQklHM3hsdnhjQ1J6ZGdDUFRuKzZxL1RXMDBWRThROUZhRnYr
UjJWbE9NMXZtL2hoamhEQ2RnTmZsVktNRTVCNDdJOXhUOHowWWdQQUo4bXliL0xxSHkzNmovTXdx
dzlBQUx4dU8xSlZqaXVRQVlMY0Z6SWhpRVBlMDVmazh0UmpHdzd5V1Fic2Z1TEFUMlZxT0lkMW9z
bnIwRjQ5Vk04SU5BQ1BIRG9CejRCNW1xcVNuVWd5aDNBcmpYeGZRSDVCYmdVUzhnUDdhVSt3MHpI
RDlHR0QwQ0dIZitQMXAvRGVpdmxoVTRCYnhSOWEya1lGUjU4WWFEWkNVUjJQMERNbWdFRDJlZzc3
cHVlZ3k2UGdEcGhFQjBDd2xHL2k5ZCsvSHMzNHBCRVFyQm4wVzUxbXFHbkpBazNBQ0NIZWlxa1Ex
WEZRQTVBbEtIN0xrOHlKS1dZMy9ueW0xNGgyQzNKdnhlTXdEOVpWTXowQlBNaTFuMVJiS2wxY1lo
SVZibEYzRzBBVHNSaUNNVXZvSzkvL09nY3dZTW9lK1pLT0xsQzYvWGs1MGJyOU5GejlmYW5xQThV
SVlTcEN3bEJPNGtIYzRXTExCZkJIVmFLd0tnTFFqbVA0VW42MVZxKzNzN0JzeWkwV3p0bUxqSndK
d0ZlRTBJMnZELzFRNk1Wd2VmeGZVZjMyc2tDUGJDbnhRcWYrUU1QRVVESFo3dkdleWowMjBKZ2tQ
WFh3c2xkQTdTWVIxUkUzaDk0TnZOdHVnc3djZ3hYRWtJY0JQQ0daMXJtcmdEQzBBNEs4OG5tMmZu
L2VUbnBRdFd5WmZ5YlJvSzhEcm80ellESU1Hc2Y3c2FUQnp2WDBTTWJrQUQ2bzlDWWJzZk1LMzhj
SktEOWwyRkp0OS9WR3MwaDVHaWIzM3B4TUtXTnNpZ0ZVaDNHMnVuKy9OMVdVZ2xJL0VFeDhmcTI3
dlVObndzaU9vS2VjTDdrUVM4Vm5XQUdDRlVnbjZkQnRRaHY0MENtSVlnZ3dLMHV3REhSR0F1QlhW
ZGZ3ekhValp6QVRMTUFveUo0Rm1CaHphV0JsckhsZDlDQ1dwUEhScW9mQnFNUmVNR1RKNzhxOXJE
ZXMxVHY3LzBtMHYwQUZIWE5SNlA2ZzMwU0hpdmluN1YxQk9oaDNpV1B3dnBzL3lFODM2TDJYaXdu
VVQ4eDJpSGdmcWhud242NjdRSEVFOG9MUWpFdnRFVzdHWUJaRHJEVmt3TklPNEc1R2lCRGY5Zkdv
Rk02bit2YkV0elh3UDZ1OUFkdWFXbkdZU0xBbFZkbC9BVStpa3JTZUVJS2d3ZGFaNEFBQ0FBU1VS
QlZLajQvd3RnSGNIdGRPMm5XS2NCa1BmeGN2bk5RdnNqMk1lOWYwMnI3NlQ4cTBJQm45T0xLZnox
SFg4eVZYUVlHb0FCLzJVZUJRNS81a0NMNitIL09HR29SbkxTd2RkM29IOHI3S2tHVGJnSXhFd1ZX
dm5GOEtPcEhueXpmRjlKb2Q1UHgrSUYxaDhvd3lpdER3L1hFZ1JiNWJQcWJ0MXV2bjdxQklRMTZ2
dFMvdStEUDNjUjdDSDBXV0pnZDVtVEpLWWdOem9HalFyZnZ1OTlOREJDK2JueVcxeC9xaFRhdHYy
T2FNS2dKV1B2djVrd25NZ3hIWUdGUnRKVzhWTWwzdVArTWdvcVNaeVdGS3I3K0tJRHcxZDYrSWlP
Z1pJNCtkNWlZTDNpbXpiZ3lPK3RwaDl0Mm9TQnhPTTN1Z0h0UG9GWjFMTTBoRjRrWE5FQnNzdlZn
UGRqZFhaV0s3dUt2eVMzcTFYYjFXUXd0VkRxU1VnZ3ErVnczdDU2SkEyY3o3UFhPd0dOVzFlY3d4
UGhmZTNRRVVzRHNGYUF6OGpnMG5mK2laTUFITmcvWFNhekR1QzE4SXExSEJSck9zQVE4TkxCKzE2
ZzYxNGptdVNnczNiUk94RTU1RCtXRERRTkE0aXZkTUo5TTFiMzA5VXFrbmFEVThPYlY5L1B3bU1Q
QVR2VE1BeHBBQkxCenVnVXRWOWJMZGhORFFBKzdCOXRRSjA2LzdRTkRIR1N3dGdaT0NJQTQ3SW5J
b0RkUk9RR3R0MFUxSEkzR2FvVW5DbkMvcnpCTVFKdGVOMTcrVmFBellOQTdlK1BGcUhRVXlYUFVZ
QjdpUVlhNVpGanExWnFweDhVcXUvWFQ3KzZCV0MxWGFqMEdsQkl3TW9IdTdVemNJLzYvQWNiOEtJ
cStoem1HV21BWW5BRHJJcHZLUDdUWmVMYWYwTEFlUWtHZ2ViYnE5RlRvSTQ0cDY1NEY0N3Rla0tr
STBMNVBRTlpQc0R3UEJweS9uaSt3S01ONzZWYXY0KzJjRlpGZjgrSndBcmFNdDBERkI3YmVBL3U0
WnovYStSWHgwTS9jdDQvandhTkFTOEcxN2VTd210YTBGaHgwVlJ4SmtITWl2c28rb25NWHIrWXdk
V0tiZ2lveTFqcDR4NEF6SUtnNWxFQTd3dkhFWUNSbWR4MTFUQXVUNmxETFZsNEt2WGtBRVQ5UDRS
VDhIMnUrbGc5RVBRSXB3Ky9OcEo3UndFOEhhRHYvTXU0ZjNPZE5rcS9FZkFpRWlPQU5qRUFMdmNX
TDlnZkZWNE5aYmdiUWM2cVBreTRQbTM1UVp4dEgxZjRqK1Avalh1YVlQY1d3SUVIL2ZtRVBCb0FP
NG00TEd4VjN0eE9RcURVK2RYZ2V5K1V3U3p1cVArK3VJbU8vdS82b2dDYjd3VGMxbjYxc0wrdlpp
ODdyeG5yTmFzK2dpVGc2UUx6YVVDaklwNkpmaHd0R0k3QWpCQkI5SmpEWTRlUFlWUjZaUGdONG93
VnY2UTJONWhoVkh3TmVZck0rdzZkTjZLMXNNSFptL0NlN2JIZTNkektyMXh3MXc0SnJTUU1adGdu
b1FIbHIxOGZ6dW5Bc3pENHF1ck5VZy9URHF6eC9sZkNhTzZ0NHRBQ01VUTZQNmh0V2pEUEMxaENv
WjhrcE9Eeko3ME1VUjlBT0RjZ3d5cXlQaG1FK3dmSFlCL2h2U3F0NnFlWFVTaGhYSCtkOVNSOER6
ckRhWlpkcFNwL0h4cUxNUXVBVGdEVS9xRFBSZ09JZVQ4Y3Z6L2gvWEM2QnRFN0FDTE9XUEUwS0lT
NFVVam1aYUoyZ3JCcGhpV2dUNDFCVVZXWmZQM0FuRUlUNk9yZm9GMTIybDJyTXljQm9VNWkvT1hv
VVo0L2FnbHNYd0x6SE5VKytGVkYzcWlrT2o1SFhtMlBCaXRUMVd1dkpSQUIrNk8vL1cwL1BZOHZR
SDVJckFzTXMvV3VWbUFkSEJyUWdyYk94SlNoWHdSU3N1MDhoOEpNQnBvMCthRFRBTHdWNHRic3dn
ekhyZnRHL2RKS0lBUWI1aDlLQ3NzV0lNZXRvK0dZcUcxMi9IV0dqeDhrenFOSmFhMG5vTVdPcjJL
d1cwMUFNd0pvTnZoTVFkYTIvUktRUC8zZWNBQk0zZzl1RDZCWTY4TnR6OStuRE9NYjVpVitoSUUr
ZFAvWnMvd3dKaEo5bWdCbm9oQnVTdEFCVVhqdWdGM2hrWEY5WlpKQWplZktkSFpDYzM4OUxvU3RL
dklsN1FJRWIxZDlSeWNpUWdGREk5Q2p5Y2NjLzIzQWFtNy9QWkpCaGdEZ2luNUN0UXZiQ3pYOGlw
OVlnSUZ0T0F0K3cwb3dwL2hPaUNXZ0VHYlZIdVlqUmlnUEdSL1lPbkVvcVBEb1Y1ejVZcUIzbVJx
Mm94NUlDbVNTZ0FQMU5lK1hWMk5FKy92dUZiQ1RSQUR4dFM3MFZSQkNqZ0JrMk95RFVRaVVnZmw3
N2I3RHdhSG0yckFaN29zUlNPT1VvSGdLZk5CU0xJNzY3K29EWXJmd1p2cUNoU3BHZmozcEZ3WkZz
Q0pnMmplSVFRQlVpeUk0V2dENjh3dzRxTzhraHVXa2tJdURyeFd2Mm52K1VUQnBKWWlQZDBLZW1U
QThxcUZpdVVGMWpXUzNCb0c2cEFESnE3NTFKcUJJMHd2QVZQeU1RdmpjWDF6YkVMbHRLSyt6QmlY
UkZpUnhHK2I3cTNNOXh1TGR6UjhnMGdDR056U001Z05ZZnFHTzlDQlQ4T0hjdDZvQjNLc1NEQmlz
VW53c0Z1SVNRYVJIeERTdjB2cHR0Mm9lTEhNRVJmUm4vRkcvQ3gwMUVwZ0lRRzhMUCsvaTM3UEt3
NTN4bjZzWUNNNC9Kd1NSckNuSWVCMVprTHNhd0RoYVBLdi9ualUzd25aL2RCZEdFOCtZVEhTRzgr
b2ZHZ0lqc0MxOVlud2RNL0tBblRTc3FqNmlnN3VHZ0lQdzNuWUZ6aGhJSXZyaUF4RlA5Q1FkNEhT
bG56Z3hPTklkckU3QThaRFB4OWZqaWI4aWZnZWdOSWxpUmdkeDk1K0UxVDcrM25RVk5OaEV6RGdH
QTNUMnJFRExkdXd0UHB1dW91UGNzOHN3d1hGamRUYU1LdCtqQTVnVUFRUGNmOTVLSlF4WVUwY1l4
RUR2c0JTbVl1dWtwN0F3bnFuaUM5QWZhNXo4dmJvSTY4SW1UMHQyNkN2d0J6U2dna2o0NDdyOUlv
anZDbjdVOTJKL0h3MFFTZHdaS05OanhQQ2ZTeFJxbkFUa2R3cE93aDg4b2M0SjhLVFNtL3dkYlpq
cmMrNGlGUDhZTzAvNUpKRENmYWlqSzV4VlhldnFmZzZ6R1JyUWY4M2Nodlg0YVJmQUUvLzZ2djUr
NjQ5MFU0QURkTzdRZ00vNWJjSFAvbjRPdENRaEJFRmVEV1N2b3M4RFBxOC9Jd3pMempwYTgvVTZN
TVNrQmtsRG04ZTBtbjNRSVk3WEcxT204d3pONDh5N0h3aE9LM1AwL1p3VVFISHY0cHNiZG9WZWI5
VmxBakNoQkNkdEREcE9LVGg5WmZjYWdPWXEzMVJGak40L2d3Qll6cDhsQXdZTndCRUxoWm94RUNl
WnhNbEF6V0dkQ1JWMGZRV0dIbzgrOEt4K0FBeG5DSXpvd0F4eTlLdk5lcFdmc2ZwNFJSOWtVckQ4
OENQVlR1WFJ5YmhxcVRIY254RUduZHNndWIxR2R1Zzh5ejlmSHQzSHBsNTd4L21mQ09DMjlGT1NR
Ny9ub0FaUjVXM09iMjRVTXB1UFlBWWlRclFnazFnbkZvVUlLcjR2S0ZwVjE1cEhVSk8zWTVyZkgz
VUZIVTRiR2tVK05LSjlmMmhKeU9NeERCRHBqQWd3aVlxdms1VHFObDlFSDJBcmI2ZkEzeWFBNGNC
dFBXZXdoa0VjSVFKQmxHellwNnpSbXIxditlM0Z2Mjd4cHp2eUk0NE5HRGtDSWk3Q0dOVjlEdzBN
OE50SEMydlV3SElOdW1DR05HOGVyeE93dFFJTnNXODhUbHdkb2MrRjg1bkk1NTluZ0VEcHQyRi9V
dTNoaVhZcmtOL3BCRlMyNmhZREFrRmdFck1LNjd5OW1HQkEzTDVvcmU1aXpmOGIzbjgwNU1PcS90
N1hVNFdIdjFEVUYvNWd1Z0NTT0FJVy81OXVNd2w2Q0hXQWliOGJ2ZnhXbDkvckJHRU1UVHdEZkcr
ZXpFWUc0eWs2RnZSUHVQd0Urd3ZjMzlJUmpFTldNKy9jbTViMFc0UGY0V3VLVW53L3ZENmVEYkIx
RVRzNXZsNzdEaG5tLzUxZzZ3UFd3UUFxeG5pdmdRYWVTM2d5L3UvMUg0aHBUUHJJZ0hBTjBtU2dY
VVgxM1lQNVBNSXVRQWZCci9mNzBjZGVFK1FvQ1gzaThuRk1MY0FqSW5Cb0FJWXF0MUxoQzFXZHR2
bVNhYjI4QVlmZmFlaXZDQitvaGRZUWdmVWEvV1M0VG9Nc05MSExjOW5udlBaTHduMS9FZWZQVmYr
VS94dm5DVlNFUUVrRVFFbkVRSk83UzdSdllEeE5lTllLckc3REtNaHRzUThjTW1oZ1BLS0tqK0Y3
Q2lIWUZSNUtJSVB4T21nNUlWQXR1M0FDUVNQaDdDelVRT2dBZWo1Q1dFa0llM3ZneHowUk9HTy8v
cVlmei9kbkxUK1p4RHI0UVcwZU5DSkJvckNGT1ZDMzEyRWMyVGlZNUJrMGNBYVFtaUExVkgxTU93
REhRMGtIZEVERGYrMlVUV2hTNFo4ZGlRTWljTHg4TUxCZnZlckxjUC9qUXpGMFA4RUpqNStOR0s5
UkN6NzU1UzZGL2YxK1gvZ3hlUCtXc2Vkdit2RjgvNTRhU1BKWUZqSVFkNjI0TUR6L1VETFFucjhI
VTN6dEtIUmY4UWVubzF2eUFRSkJhTGNNdFRWM2N2Z1A1NkNPQ3FkL1FQOXhMZ0JrSDRCeE8xM240
aE5VRHRBQ0M2RzFTM3pxb29aNkJhNGxwL3pjQUZiN2lFUktRd1FjRjM5SUZKamRYRUNHQUR3MElF
NGdnNjc0cFlBbms0SG9IUHg1NHRENWRhTzV2eHJ1Z1NrTWpnaWlxYzdUVktBVDZBVDhSNGNrYkhF
UUNZUi9JWkJ4SmdBK1haanNSN3Zhb1JwSXhXcWVxZlh1R0MyQ3h3dWRpY3dlUEVCMWtOa2FaQ3V3
eUYwRHVLdi80c3o5bXpQL1F4ZGczQkRrQlRNQzhRK2xvRDZVR0J6eDBLejZlQVgvS0FyT1FUbFBI
Rm9JNHZWdGY0ck51THJjYTllZFJuNHhCUDdrOHcrOUFnWkNnQmZFVVpXZkVzOGlGTlozVU83VHFt
a2pDTy9yV2RnY28veUlxSGNRV2FDMkVHVHpnejV5L2lYUUF2eXgzcml5eHhWL0plQnJpYUdCOU9y
VEE1ZzkvZW9rTSszN0dzenFmQS9VWms5aVc1VW5DdEJxQmwzWG9OTjZBZy8renk2QTVldlBBcCtU
SUZEbjE1Z1F3OXJqck96RlgwczJKQlZBeGEvblAxYTZBc05XWUdqUE5HUExUUWdCc05VRnZPQTNI
dDlvL3JHRE4wdFdPQ2N4SkdwK2Y3Kytra1A3UHhjR3YxK0dqa2FMdC9mYXdwd3dlclF4QkpOVzRi
K1BKc1lFZ2lBWVlkRUFHSWxETmFBYlJrSWdLM3V0MGpLQnlwKzh5ejIzWDZHdHRtQm1qd0R2Q2hn
aVlMUDVWL3poSDYvMTEwc0djS281Q2tnZ0NuZ3huSVBvUGphMGoyQisxQlJraVlKaXZpYUxKcWdo
REk2M0cybkFnQXhNQ3VEZG5vRDB3SVFtK3VyTUIzVnVBd2JCckZHZ0dnbmhBRnFnOSt1aktzTHhC
M3FHQ1FORUV0UGluSVFsQWo0V2dJdzcvaVhjOVYveC95VVdGczJLSDUwNGJBaDRhWVdmNFRyVExH
VHk5WWJmdHlMZVZPV05mWU55dC9qaTI5bVFucU1BbHRVM2lvVHRiWDM0M3l2LzF1MFlQVUJ6NnpC
NzAydFF1Y25YMGdXYUZoNkRnUGRtaFhhYXBHb3R3MFNGejFxRGlUTWRkOGg0NUhmY3FDUFJVaEEz
K05tS3oxbDl0ZUNQYU1kNHVyR2Fld1JpdE5CRGRhaFI1YzNBZlFtRENGVDl2bXRRRXdxQVlYWDRY
STJuMjNaOUIvWWIxRkwrTFdveDZ3SEdiWlNvNkZSMUx6eUcrM2hyaVNadldUNmpmWGhsMmNtUVpK
RHJBYnVZQXFBSG8xR0EvRU9nRDhlR2NVN0E4ZUR2SDRmUUJ1QWhCTC9acC92YW1QVHJSRU5ER0xU
Vi83RTFXRVBMRGxQL1B3elU0WWh1c0lNVWdmSVBBcjZEaHY1UjR5MnI4bGRGd2lGb1lIbm1yOFRB
SGJoUlFTWk9jdEg1OThaWWhxdDZ3UDdxL291cWU3N1JKeHZ6RllhamkvejR2bmE0djVjVU1EWHFE
QUo1eXRrdHF0QkRja3lqdkpnMDRobDE2TEIweEZmeU1mRDc3UFpqRXJHUVJSallJZlN2b0FYbnRr
czBvazhNc1VDNEtBUlduWVBsSkJlSWdMZUZyVWdET0hZQ2FnMC9YTkFiV2dSd1F1TEFzYVF3SWhD
MWc3K2pDTkt1VDM4SmZuWVN5VGkrUVFFd3dIZVQ0L2RXSFl4SlB4Zk9qNW9BblJRcWdVM1lnR1pT
T2FEeUszbi9xa0RZQktwdHpSM29ENkI0ZnlSS2pwMkF6U2w4MFlSLzNQKy8xdkJqWDE4SmJ1K1lz
ck1SZ2JxUFA4enJETFRBYXVwcGhmZVp0eVBzOUJQenRwTFNCWmpvd0Yzd29ZUndCd09XYXFiZXYx
NWI3WDRSV3NpcVlpWTZaa0ZFSW9Vd1VBMk9ya2VFUUU4SFlOeUQvcmwzbTg4akNHZ08vblBXM3h5
OHg0US9IQmNNMWRZZzVxOE4rQi9TQlNZaHREMEVZMVBSR0xEb0tJQkhGM3lMejRIL2dTWVFKUkVU
Z3FlQjJkNHZDOEwyTlZuUW40UG9WSkpBY1AwaW5haEFmZFhWSThDRnN6alJhZ0NUdFJkVjdTcjg5
NU5CcFJLWElUNjRSTUZ3L2l3NWVDaGhFdm1teVVJSCtrK1F1M2NMek9BTjZJTGxGdmdXbngzWVdG
RHowZjM4emU5R2xmUDZVUTNvakVZMGd0cVJJRWJBNS9XZ1FGaHNFdUllTDc1dVR6dnFIa3RBV2Zq
L09ENnNRWHNzUk9jR2lSZ0ZuMFFWa2xkN096bk1EVDdDSkt6aE1JcXhXOUIrTENPUWRINHV5eElj
RTQ5VlRTZUxqMHdLanpjcDJvRFhRQThZb0RFR0JMTVcwQkp3K2VBeFhlalBWL0lYZDU5L3RwNXJW
eVlYRHc1QmxSZXRTcFFBY3ZnZk93Vk04T2J6QnEvQVEyd1g0bHdrUVYzdk5oWUZmbjJMRmdhb0RV
MW9ncXNmcUdrSlltcmo5VHIyMktRd0JMemJMdXpEZUE5eXp5SmpWUmZ3ZWdXcTBIK0ZUaERQQTZa
aFp3WDJNMktoNHdhb3ZDekFXSlR6RC9xWTAwYys2UE04Y296MDhWTnFnbHp4NTRMZkh1VEpLN3oy
cndYMzVBQkxnMUR6c1o3UXY3bC9mMnlYRGxiZjRDL2lyZzBNSjBhQ3VEMHdQNzRNcnhmZEZsWDd0
cSt2dFJkQ3B2dDU5OUVHOVl6M1YrUCtPai9uNHpMcnVaSGNKN29NdC9NTnA5ZUQ2SEVlRmI2L1RN
ZmJXbzg1UGI3OUhKbzh0MzM3MS9QdUlBWnFNdmpQQzM0blZWNlpCNGhFdUE3QXpBNWNmVTB5Mm42
dXg4OUQvMzUvbjIvdldZNUJmMHF3ZjN0UExJU08xVGFwOXF6RkI2ZWFwL2JlcUk5NE5DQ2JHd2dx
T0l0WTNDR2w0NDZDYVE4aTJROWcwQXZtZ0pPbkJvQUEwZ3UxN3RzS3RLUzdENHVkZ0NZRVJ5MlFJ
Y2VDWC9QN21CVytnLzdEOVM2TW41MENTMGVBb1FQRGNCam9wSUE1K0VjeEVqTHdlUmpYcTBVYkxJ
amNCeHNHeDJJWnZsZjBBVGp6LzZxeXBBbVk3YmhyazRhaHNJaXM2Y2NYS0hkdWVBZlVnaytSV1BD
TGg0MmM2ekVlS3lKcFJUZFJBT3FCYmwvV3EvdVQrcStGeDNGb1RJdUN6YzYraE44ajR2ZUdqdUFu
aFNFNWdLbmNvM0EzWHdZbHEyc3ErbG1QNHlFT3BxRW9HME0rbUdEWXVZVDBwS0NGSGdMSEt0M1Q3
VDlwOEdjV0grbjFVd0dhOFg2a1F0Mng0Q2VxUGV4ZWdUNm8vWjRDcjMxM1BIZGdyc1MyWlJlTGZw
S0lmK0lNRm5tVm13eFE5QWhpdGhZVDczK3AycytKSVZmcmp3aUhucEFaclNzcjlDTXN0UVhQMSsx
KzUxME4vcThFL1lvZWtNTjlPTUZ2aTVMdmtSRHN5OXJnRkNPb1BkcGdhUUlXQlpqZjVLQ1NRc3pa
SjFpdlR2TG9rcGVuNnRzSkFWTkQwTkZxYjZHVUdnMkltNER5eDlQbjcvMGRtNHBBREFzbEp6VHYr
ZEtOckFQUTB3eXlTbTdiajFSUWdiQVhzUmE0UittQkp6cGFRbUhMbXkwQkxvTCtOaDJaUmNhOHVV
YzZQMzdrOTduNDUxZnZUaWVBRThCZFoySXRxRkVLNm9PSklZUHNpVTR3b28xNDBPaCtIL1VDKytn
YXRIWWNPRlQrMnkzQVl2RDFyTS9mcHhkVWNzQWk3MGMwT3hBRVA0NVgvaHltRTlYZW9DMHpmWWhi
Y3FmYmhzMDlIcHduS01EUjZnMG1tWXlLdGgvVWNMbDlJVEdROE4xUzZzK2dBMUh2UUNjMnBsdVB2
TjJCcjhTeVp5Znl4UFAvVmhDaTFMMUhXWDJDUUN1QUU4VElxL3NCWWRBTlptVEl3cXEwc2IwSEl6
aGh1Z0JlVXBCWkxGeUE4eStFRXJzQlVZRFpIWU45UUFBb29Rd093cyt1UWxoZEVTU1NxazVRc2g4
TFNZSTZMRFMxQWJtT3ZMbFJCcVFJZUlUdk0zNitUUDYzVmZFNWhGQ2xDVHI5ekV5VkZ3UzNTVFFC
eTY2RE1IQitQSldJcmZnR25ZQngyZFRib1BhMlg0OUdhQlZsZVBBN0NGeDRpYUdpNG5zMGFMVmpN
R3Z0UFREdG1PNFhFRThFNUtiLzhxWWFpK05IbDYwTGdBSUNjVUNvSlBWZWlZRzZQeHcvWDlWRk5W
YkZuOUZOUHpYb0lSRFR5emNwUkVZQjVGbTFFUVFuM0tSaTl3S0FwUjhUejQ4U3d4blYzcU0wcTda
aHBkS3ZyMHpmWStnTzRvUWYrRUdQRllXL1hmNWh3V3NVZ3hpQmJTaEdvR0l4K0QyZUgxaDJFZVIz
VVFNSDR6TWFVS3I0MDMzbnprU2tmUUFEZWxGYkxPUUNhbHhkeHZOOG1JbmhQYXM5Ynh0R0p3MjlG
eDNZODQyOU1BUzBmTDMzT2VvN3FGWmVpVG9DQzNCL1ZTTll1VTBmZ0Rua2h4R2dNRmR4aVlFWTdN
WWVsK09IUEgzMElNZVZGSzFDNzlsK1FkWFZwRnFIbE1BWEVmM0VZRHlma2tHZE52SjhmM1JBWFUw
anBnTTdqTU5BNXlDcnRmek9pY0tHL005YmdFa0VqcXFQUERFY0RmcVZ3R1p2NnpjTzlhdkRmT2hm
NE9tTEZkOU9MQkhIZHhwNTFIdk9CbG5Bb1Frc1lqQVNBMXhuSWhQc2FwVENQamJzR0IyWWV2cFBw
Z003M0VZZVNZSWZ0Z1BndGU2Q1dlc1ZCQjlRRWdmbldZTWdvZUM4cWw2OWJXb1JJcVlIdlNJdi91
MjZiai9qZHFaOUtTR2s3NEpSbzZRUzlQdVRpU0htNlo2MmtMVUdIMFVPNHJ3V3JodFJFVGtSNGlL
UmRJOGdpSjJEMm5VQ01qc0EwVFhpVkRiOThOQWYvckNNbGFqQTl3ZXNXSFpyQWUxZGx3UnlWSTJq
eDRLa3lVSFN4N1lEZTZZRDR0T0M2WFcwMXB1RWRBSndhRUp6ZjF1QVRIaTZabFNDcEJRc2NzaDZD
MXhSY1dFRzRiQ0ZlS2NBVmhWbER1NTRKUUlrVFQyMWhwdElUL0FmazBrTWNTOUJLZmpCSm96Y0RY
Q3J0Z2JXWHhiTUF3M0lOUUl4dFFKUEFHd1htWWFCYlloNFNDc3VLd0xPQVE1YXdLc2tDTW1SZzhQ
M3h3bEJmYm9zUWFEcXlacUJreVFlMUNMUUFDb1RnTjRxYnlIc1B3a1RpRjJwWWFqNk1BWEJtVW9z
UUhuVUVZQ3NCTDNNVzM5U05LTUo1UGZvQnNUMzNEVkpDRWJGbkJDTU9rSGZ2ajZYcTh1dytkZ1JJ
aEdnQWlVcWY1UWdLREZ5aGU4bm5ZcmxxbjlzRzFHb0FmaXJ1YnlnWDRIKzhJTTFDbVFyTUZBSjVF
eHpLSXA1NG5Qb1ZVMkF1aDZlQlNoRGxUVjR1NWM0SEUvZlZ2akZyc0lJMElrNlFYK0lxNjhqQjE5
emlMb0tDMjdGWWUwZ0MrajFSU1MrQmdCN0F2QU0zbThITGR5NWZWNjBDOFJNVnVoRDFpZVFCMzJN
Q0NxMFFQSnV2dXc1SUhGL2dlTUt3T1BkcG1zeEJ3VkVmR0VPZ2VpbmNKcU5tdVNGSVBoUHEveE04
MUNXSUlpK2dDRkJxRFgzUVBZZDJPY0NSbzZHWkJvQTNBTSswMGFlc0FPUTcvMlBlL3ZCQ1hvZ3VE
NE9CRDFXZlB3Q2x6Y3VpMTJBdUgrZ0MwZ0V3VzcyS2ZqQkNRUkJyMDVEMElRYzdOOFB6T0NNZWhQ
V0szODRNUFZESlFpbTd5RGRvaVJUSXR6ekZWL1pPWDlzWUZldFAwZnNRemI2Tzd3T29GanhrODlZ
b1FYditCbVNOK3lZSFlPK0JzRFJBWEhodUpYc0VGYmRJRUdaUVdVa05WTnpHQTlOWlVWQklRTDdq
QVNSMEFjbEU0UGI3Sk4zQk83Mm1HOTIrbzhVRzNueWJqK21BU2gwRnNMS245R1B4RHJFY1MyQXUz
NUJ6SE8xQmtzcmlJSmRwcVdqS1Ixd2xwUjRmTjk3N3JacUkrWGJZallEZ1ZEcGNZUWFsT1lLTWl1
UWJCM0c2UHUvSGxNYmk5YTBFTWtrc1h0anZ2WFRmZ01LQUVaUk4vaS9PN3lEOERhMlMyQmRoM0lD
V2ZwOHl1TWtZbDVhNGRmNHZWV3Q0VUYweXlxRW5hVDZzd1l5V0I4L2oxMTFZMUVSUzlvQjBTTE10
QkdERUJEMVBFSHd0ZGpVRUFIbnFtb0hVNHdDREFvQVMrbEh3dHU5ZVFMVUFnbXhWdkF1TUI5Y0VM
TVYzbThFVXRjQllZSTlua05JRUVKWXJRZVVIZm56elJ5QzM5ajhDZ1NraXIvRTBQMm9kbkFtQXFE
bkRJaHFydFY5QkROUzJQT2p2LzBwd0tyNnoxaC9QTXozdWY5eWtGWXE5VHRvQVhTd3B6MEhsamR2
QkNWQVBZNnQ3b3N2NmdGaE1wa1gxM3JjZlhRTUlwdVRzZlRpYmtmT1BSQUMybWVMUmlwSTRtRFB3
TUQ1eCt2MytFeStxRWZBQ3dvVUVrS1FTTVp4WUpEejlSNjhQeVA0M3l2bzJhWWY4ODFyTlFiWmdS
VS9qcDgwUW5XL2hkWHFKeE12Q0Z4WFFTTkhwRThRaUY0WEkrd0ZmUWN3N1ZMMk1kN1JSYWpzS2do
MkQrNlNMQUtQRjM1NisvN3lYWUJUVWdGeS8zOFN0VWpGSHdlRCtpaUhoOC9MVi9pL1RTdkdrNEw1
eDdGNkFzSUtiZ2I0QzBZamdkR1JJVG9HVXg3Y2dTM0pLUDhwUmNnYWs5NUJKR1FiamFKZEJZUTFx
SFluWUhMOEY0NVFnSHgyZ0xNUTJjRHhCRC80U2VSMExTRGk1WHpQUU5qTTR5U0UvSEdHNmcrdWds
dExOU0FSbjI4MUJQdE5PNzJlSkxqZFg0SVRTRWdwUXZKWUZFVWcyNGYxcUFZUU5RZHh4NlEvUmNC
ODVqOWYrMDN6ZjJRVjMzSURQSGVnTmdQQUJUZnFGUjhjWks5VEE3L2xsMEVRYlVVSFc4R3IxZCtN
U2FkaWErTFJId2h1bnY4N3lXb0ozaC9wUkR3SkFiRE5RUUZkMlAybUg0a1Avd0RUL1plTjNDSzMr
Wmp2Z1ZwdzRyMjBBTWFmYjU4ajROMVVNa251ajZpQ3g4ODNQVTlnMlZIVkg1SlgyZUVjUGdoU2dS
QkNLUHpLMFEzZmtud1BOMEhrMEN5QzB6Qmt6Ly83ZHVFZXRnRmpWdHlwQVNESTRDc2tuWUpnWURo
cXNCeHh5MjkrZXl4ckFaWDc1RUVmOGYrQ2tPY2lqTURESHg0QVNZR0d1OFdIZ1B3cEhKYzBxT0c4
RmdGVHVWazBjUlpWZVBGd0hFSVVFdTh4U0hvTDVxV2c0STcvSGdPS1hlMmRjbnUyU1NkQ0dJRFRB
K0FjeFkxellMNlE2QUFGdSsvMUd2aktQU2VFb0pWM05pTTREejlDNm9Xa0VhditOV2pQV1hOT0lr
S2dOVGkySThMZUJnYVpISnhxckM0b05Yb0I5cHp6TXdzL09XM2doU3lRSmdqYnlnT1ZFRGhvajRu
SExsZDhIUEQ2VVVNRlZMSWdLclRMN2NGb0JSTFFnRWRYSXNlWjIvSGhGUEtiazRkNXRZV3d3UjBu
SUZRU0QyUDVnUWhzNm1lVmZCK0JreXoyZk9Jdlgvenhxc1NPRHVBR0lPTHRQTm5tSVBDcnY2S3F2
Z3ozcTR0Q3dObDlsV1lmbnNkSGoySFRnUXc1SUJId1VMbWZTdTFqRVYzZ0RGU3hUQm1xU0VWcWlZ
SzJJa1djUmlBa3dWL2N5VzlZaHFIWER3OWRrTlFBY082SEZOSlQ3b0NoZnJQVVljM0tZMTd6QWQr
ZXZBd0YydzVTQ0tMVjRFdUNFS3NLZmpCVldIdTlROUFyaDRDb0JxRU1XWUJzTlg3WWdLUC82OXVD
M003L21PT3oyMzJRVCtveDRpQ3lKR0VGUDRvQkhkK0dWdlhCd1gzNW5xcDdxZUliVjZMNnRkWnVi
M3VlSitnQklLZ0M2UzVnT1FGeERvR3IrQnYybnpxYmtuZDdwaC9FbVh6TzBvK2taZGMvd3F2UWtB
T1VmZlZNekt0WWd4NVZvYjEvK0hBZkNkekhTaVhIZW5YMzUvMkpUcjNLWjlSdWoybFlpTWhMSUZv
TnlNcTloRnJvZVlNVEUwYlNMYmhiNGwzWWxGUGE2aE1kMmprOGRtckRnZFFDbkM0LytBTkZsWVRC
NkFUbHgyR0RHWFAxcnZMK1NuV0h3K2NKZXM1L3JSV3Q0SDJwdzlHa2xENHVTTXB3YXNJUWlhWVI5
MmdJeUZYNVM4ZHRSWnQvbkNBSDQ4VlhXM2hSRS9IS09zR3F1ajhFTTg1UTljZmVBVjRYd05HQWxt
SUZJd1BZcmZMS3V4VjQ3NlJSZXR6Y2RlQXNSU1poaUhpekNLRUlPSG4zRU1PV3k1WDR1SUpuWFg2
c0ZpQkZMYUJtL1RIT1FBa1ZKSzlqNlRLd2lTRFRCV3B3SGtTUFFKWDdVOTU5dUFrb2FUVXV1ZzZv
UUNCejFabHhtME9KU0lvSXcwNE0rN3pDR3VZaXpuQ2ZId3c5QU42SXIrSFhBN2xmbjJvQlNKMkZP
T2g4U3pJTmZtY0F5SVRxOEpYL3NPTVB4NkE5TGVZdFZmd2dDQlpoZHUyNU9COS9YbVdXTlBVRVBE
NWRVdUo2OHdkMUFxRDIrdzFQSTlLeEU5Qlc1dDN6L2lnZFlHV2lMN0wrd1B2OWpnVlk4ZjBaY2JD
S0N1TEFITitjNXdhNjlacHIwSjl0MktucEFHenlpQUlQaUZhbEo4L3hYcnJBNlkrLzhOb0RuV0NQ
TndGSnpmNURwVmtIdGU4aHg3NlArSFUxK0hFeXRFZVNFSXpBc3U1cjZ3UEpHdTZvTHo4VnJLb2ZY
TGNlK3l3SUhoTmEvRG13OExycHRXWFo0TktabTRwci9RUTdRazhlaE1yUHRBRjdQUUNEMzA5UWdS
Z1JaTUtnQWJGUkVBZkJCWE5hbGJIQTljRUhNbzRJZ0lVdVBqakJXRVVGRVFwWVRraFZPNDNlUml5
bkp3OUpqajhUT1VJbEpFeEsrMHdBNGdXZ1F2Y0ZCSEFjN1A0L3U3OC9GZjRDQzVBVEIzUDNvVXdG
Q2xZZ2NBTGN4enAvQjlFejREVVY4UmpCYnNDQnJNSDRkTE53SURhQ0doQTZvM3BYa3NkQnZZQnNr
dHJYRGdOSktBRnkxWitaR0l5NU5YZ1hvQlQ4YTNaZ1ZTUElVQU1WNkRqTHhoc1Y4d1g0bjRpYmJP
Tk9iSE55Q3I4WjRGaW5ORmpnOHppaUY1elNWOEE5OXU3WmRmNU9pc3ZWYUFBQUczVkpSRUZVL2tJ
UEFKTFdYM2hVSUZENm83TUQ0V2tISU1YQms0SWZ0U3JQTkJKVmswT29DN2ljZThIR1M4WEJLRG96
L1lGQkxhUWkzOTJsR3BDTUpmaEQ5eFZreDVYYmo3M1A5VjRtMWowdjczeDlGakREUGxZdkFUa2dG
QVZXY2ROdkpCYW1saU9qQXdSVjBFcGVSeW1BZTcxN2tNWVJ5eS9qNUZ3RkJYMGZQN0R5eDhncTh3
bjJaWGk4R2ZHWVIrbEZjR0pTeGEzWTg0V2d6QkhldGxVNGN2S1k0NFBzNGlQOWZzZ3NQR0VoUVRB
Y0hxd3dHQ2o2MVNvUGV4S3dhc1hGcXR4cThxaEQ5U2l4b0JCWWNKRUROem1Jb2kzSjdRa29KQWN0
VkhvY1RWcFBCQ0RoRWxBdk1ESzFQVC9TcTNEd0IveWdteUI5R05oWURINHNvNEZveTQ4a2tQdFpm
WkV2MVBRVHhZcHlYMEVJM0J1Ky81a3JjTjhmZ3dWZHdXdTJKTlZOV0FrK1BjT09QTU5kR0Z5QVo1
QWo2Z2ljZ3pOZnd1SFpnMEhyTHhCV2ZqU1JsODhmVkNvL2FwWC9JQnJJdmY2NVp4dEVvSzlCZWM0
S1pJUExlNzZvc1FuczQ2TndXMHBVUENQQXlNYzRBL0tYT3daekZMR2JBcUQ1eGhoYmdCY1dmb0pC
QWxhcmNDU1FnZFFKK01vdm5paDRnalpRVHc1MXJ6NTg4eS9aZ3hWVUVBUThzb0NmWDhPUjI2Snd1
akNMR0ZBTXNPam53R3JsUHVRdzlEL1BQdjhCWVZSN3BHL2VlRnRRcHNMelIyS0ZJOFN3S2o5S2xY
KytIZUxPUHVTQktyS2VIQmk3TDRiK0t4MTg0K3B0QXA0VHJjc2N2NjlvQVJWWXpXZ2FLMDFIMVgw
SzN6TlNtQVJLdHhYWUh2d0p1VCs4Z0xHR1dncEhjV09tQmVsakZCMkNrZzZ3aUFZT3FmeEVLM0dN
Q0FqNmtJaVRXZENCQ1hoa2pVS01nSmNMazI3MU45dUxTYnR2dkswUzY5T1hBdm9BNXo5NFZzRnVi
Ym1adng0UUFuWGdCbkp4RU55UWp5Mzh3ZWY4MXVQaHhNcFBKSVF6cjVja3VVVEtlMHdaeU41N2lG
VFdnYThHdkN3bGg1VXF2WWdtYU5WOVhTeEVWV3M0MGtrb3NGd0E3MFJnTk91OG1MWmZSNndEaXdS
YTM1eTdqMDhOa3NxUFFoY2ZrUkJLL0o4Ujc1SXorOUM4Z0pwcXp3aUllWklJM1FuWU9rSldiVkVJ
NWpOdUErbzJCd0s4Mmlmd25wU2dId2FDK0dOQWRtVzJWWGZDK3ZQdTZ3UjZsQmo4NEM5V2Z2aXZa
eVVoWk1KbEpoalN1a0RsRkozZzRBdkdKZkMxaUVwUUovQ2FFZDdHOXdkczdwNzErb2RydUtySGlw
L0M3UmRzeGVWanpJeGhvTmtGR09XLytzay9ZVkFHdGx0ZnpaQUlmeml4OGdjSGhaQ1hwY0dOMnU2
OXFXcUQ5T2xSRkF5N3gyZlFCaEhVaUVUQitEb2NxdkFyWXQ5OGYrQUVBWEFwc0VtRWNOTEMwdDJ1
UEhDcVBRSVh3SFlEZkk0LzkrOExNcGNocXI1SEszOU1KU3JCWHdudXROcWpvdmpIRmRxK2ZjSExw
N1lMUjRtR2dkdVc1aEZwQVhVb0w0Y1RUdVc1SEpTa0I1UEMwUzdBKzhjKzgzN0R5b00xSjlpdi9w
by9vM0J1bmxEcVBqT1NPL1liTEZkK0ZHeTlzeEtGZVQ4YituTE5QcmtBeUQ1M0Z0VDI3eVVTMzJ5
cVVhRUdUTUJpQVNHY1owRm1LOG5XeGJ2akMxcTZXUUM0VmRXZEFjQlk4ZUZvQXpJckMwYjdXdDh3
bFBjSWRFMUZoVVdlS1UxSWd2OFEvMGRsNGsvTm5ZU3hkbERvbjhkaVVEZXVRQjRjOFhWemNhaFJn
eXlabU5DK0xBZ2VDZlNWQUxkZTgvdDFEQ1lhd05vZVBHVDgzd2xPcEZVZE9aS3d4bjg5T3NNRWYw
WDhDeEpDQk4vZHdLYkZ3a1NNZ3gwQUNKSkRKRDRpQzFKRVloNlhjRXFWSHB4NCtKNEk0VWlBbDI2
cjV4NjRzdHR2U2xBbjNMQnVRQ3o2ZWRVOEMrSjVlcEJyQzRZUDUyRUZEZ0hyQ3cxQjBlVTliT2FU
Z2gzd21ZdlFWM09xcWNmNTNYblZOWFVCRUxYMXh0U2dGcmlybElJNWQzSEZ1bHhCQ05FZlp4MGg3
SzJmMzRYd2RIcHVZUWNndU4xODlPdy9uUFhjbGFVY3FNSDVsZUNYaktPamJ2M0YwYTdpMlphUkht
QmU1enduaEE5UzczNlpDOEFIOExIa2cvVDV6bllnbUVTMWR0dXpHbzkycXdISXF1aVdYKzRLZ1ZM
ZDh1dHY5TWwxQlFOaEVKVy9GT2d3ZWlUZ3VDVW9RSGtFd1loamZRSWdtOGVBelBLekhxQUc1eEdp
aVB5eGVHUlJhWWV0VXBEVnBIVkMxVDliSEd5YWtuYi9UUVRudUc3ckRZd1lDVVQ3L2NNanRJTHpB
K0dvL0ZQdzU4MUYvbVdlVGtEdUJzQkNBSzhraStBMjluTXpQbjRSemp2NlFWN3hXVzRmelFGVXhi
OWpRUTFxYzI4a01pNG1EbDFOQnI0dXNJc3o1bHRacU5tN0FlSlhmdVRIZDduaW9MRXlQQklTVSs4
L3RQMUFDNElsL24rWUdtamcyTmlCUmRsNnlDdy8vekc1cGg3YnFhQnV6OEI0Vk1VL1RxU3NOUGJ3
Q2VaQTFjZHh5RzlTZ0t6UlpQTCtHWEZPaUgxL1NGWjl3WDhNM3pVZ3ZIOGE0ck1CalpqL2gxVzlN
cndUaU42TWxzQ0tpSTRneWNCemdWL3hVYVFHakdESHdIaVlpMFZJemVFQWFzQ3BOdUw3NkFDN0JJ
RWw3aTRBSXhuQWZvTXhrMzVlSmJaNjh3V0VVQ2hzOElQei9FRUU5QmtVb05BNFJDV1NMSmtZMWgw
WS9kRzliVkN0VVZQZTdRUmh0U3RYRzRuT0VDRGZVeGM0VXcvSWs4SmtBOW85K2E4M0lyZkhIMTFF
ZEZVV2M0cGhOZ1ZGV2tQc0lIQm5DdkNDWUJTZ3FFTjlxdG9YdXdIaEJ5WW9KSkE3QnhJa2tSd3BE
R2dBSG8rdlEzWkdPd0NGSkNKS1VBeDRNQnBGWld2UmVlTGd0QkJrRERRdTJPSnhYYTdTRS9QNFpp
VVBIQUJqWTFEc0ZJaFBBYXlnV2V3aVhLNzJoSGpvdy9rOGdDTDZnS0VTOHFjRFo3QStFaFlsV0NQ
R0NYMXdYSXd6a1FFS3Q4Y1A2aXFrQzBGRWhGai9aWXR2WEN0d3VCTGNEVDV3WE4rOUg2WkVJa1R3
Vi94L3M3OGZYRlgzc2lXSEVLckMzdHc3RUZaMzFMbDd0dGtuUXlFTUdnQXFDYVZlMWJHazhyOG5G
V0NRUVIwaDdDWTBkc1UvbUllSXVBMUFHQ28wMlEwWVZYeHViMzZzRzFRZ2ZvMENCQlVYeGFwK0VD
RkV5Y1FWeVZpQkVCRlB0MTRUSzlyWkhCOUV3TUc3RFBYT3YwT1ZIa2R0eDdPU0NYZmIzYXY0Q0Za
R1R3UUJ3VDcvaEtQSEU0UHpwSjRMNCtGTTlyMW44QitCKzlSOUk0RnU5YnJZVVpnQ3VuWldOeGRR
Z0lzOG1BU0JRNEY4aEpwRWlhZjRHUGloazhGZEF4aW4va3lialpqVGorbUFReTZpaFo5d2hEdkhB
V0I2QktyQlhRcis1U0JmcVBhSU53aXoxMlVJd29UbWJQQUNaWS9mc2hCQkJLTmxXOFpDSHdIL2NW
S1NPWk1tNE14azRPd0U5SmVCK0VGa24xSXpjUFFvaVNCNHZHZ05lSlNvaWsxQTdtMFRDbUUvSHJn
Z0IrLzFNMTJDMVoxOEFDR29JZUgxcEgySWhBcUZXZ0JxK2tERkVXQXZBM1g4dHBXMGNuU0Q1V0FP
cmlPSGhuWXJhRjFlTFRrUzhQL1FzSFVCZHRNUG5Pck1hQU5KRTlBWmlhS1dJSTVVZS84UFRIbi9V
Y0NTVGdJRjJ4TjR6ZG1BUVlJQUtlQkZsNkZpTzBhS2ZxNWpjSW1IZlB3VHhjRWRSbUQzTGNGb0F2
YTFIZGptOVVnR2dnSTlZT29Qa09CWUxzVDhIbEczbnVjTURHa09PSjhDa05PRUxkU083RDVxcUFl
SllCYjJHcEFCZ1JpMmd4TElUZ3JPUTlDOTM3SGdCKzBpN01lUngzZ2ZQV0NYTHRnYkxKQXUvZ0NG
QlB6Ulg4ZUFESnFDdkEzRlZpQy9CbE9RQzRMWnlyQnE4QmRRQU9VS29LanFSN3Y3RUZmVkZNb2pQ
Z0VvU2xKZXNOSWVQeUxId1c5TlJncTdFNkh2VU44QTB5ajB3eVdESFJaM0oyQTFqSGRNeXUzaENH
d1NEd2RSaXI3aDlWUDdBS0xnUG9NQ2dLemlPRkx0clVtOGFJRkhsZ3hZZno4V0JZVVU1NWlBWGF1
bytldkphSUsvTlRnUkpNOXNVY1pSemNDbk1kTktNSmM3dXNuQXlycHhIWWtUUkhLK24xSHhTMDFM
aGVBSHFSV3dLSURxTHZRQzArUHVwSFpnQmF3ZlZHc2luaVRWSHdaSFJxYlVJL0Q0Q2QrZnRneUxB
UjFlaGtJaXFhS0Z3N01KRXdVSXVLNXpzdTRzdm9GWUNGS2dCSlpBQ0J1cHBPSWQyUkRrUFphczhI
OWtVTGNBOWEwS1RDUURHdHBuelQrUk1KaU9Hc2VIbDRCUTFDMjlBV1VYSUlmL09Jd3dxb05FSzNT
Q3VBN0ZSaUJyRTlCNC9QY3JHSjFPUU5qODNGNFhib2wvVGdWSGZNaUlaTEFkY2FWa2doOHNMcmQr
bGlOUUgvRnFzTlRmajE1bTFKMFgrZmZadXEvZ1RZN1FudklmSno2VXpCSkxzODNJdFFwdDNSZlp6
NWl1R2ZOUGFqcG5nVW0wUjhEb0E1akRsenNPVEF3Wmp6c0MzSmp4ZzdIOTE0UGpsY3NrR2RnaGd4
OUhHNE9PUUgzNHV3UXl6ejYxLzBxaVlOUWpYeEVDdVdZYkdNL0RyanRQSC9Ndy9LK2dCTExTQStj
RWZQcjRNcm9BcnpjRHV5YmJyOFpjNzJpMlVuemVIblRnekQ0VWc3OFN6SXZDb0FSVk9ReGFGRlIz
VHpXbmtrSFVWRlNoRXVxS3habkt6NHA0WVljZjhaaFlodXU4d0ZnU0hjdXV3Q0phZ0k0YmdjaEpR
Sy9xZTljL1JUNm5HY2c2S0dSRUpwYitNSTBFWS9iMGpjc25pM0FKQmVDUU5zQk9GVllvQXBjTTJB
b200VkZnSVJkSHBlSUc4RDNZYXhCRCtxQ2lRK3JCT1NWbmNpOGh6a0FHMXQvcGdIQTR1d0R6bXU4
eEZLa2trSXFDZmtJUnMyMDRyL2hpRGd1dG9BQWNvd0JNWjkrS1MwQ2NYVkJPSEN2Sncyak1RU0p5
ZW9lRXhGMkR1VHVSY3VXQW85c2VmeVVRNi9vQmFJalB0aVJIMUt2UUt2eWdBSGIxNzFkK3ZjNEdS
TURQb3hOL2tMNXB3bFZoMW1CUTFxdVFKQUo1ajBUZ09BaXMraDhkM21uQzh4VEtFMzQrOHNETmp5
VlhFNm5GTU4rSDM5VFFEbW9jSFNjRU52Tjc0TG9HU2NHVTRmN2c2SUczbjNDM3FuRzZKQlMrWjV0
SE9PelJZUXgrdTdNWm1BbDBPU3NSTEFTL1ZJS2ZSQVdVOTIrMTJhYVZQa3NHREJXUXVDTXZnTnky
TTJNdDhFd3Fiam9zWkFlYzV4TEVBbVhtY0ZUSGlPV0FSV2dscE5wamRFdEJRUnhKSlU1Vkw1LzdG
MVg4NlhudFhnVUs0cStLZ2dzVW9JSUs4b0Era2d5NCt6TGFBQ3FRR1RWT1g2TUJXZGVoTDZCeEhu
K3RseUJNREdBcXVmZDdXT1g1V1RKd0tZRGZYSkpQMkdYRFBrN1RqNUVkN0JPRzdETUZhQlJBSmdJ
LytIMk5nZWIyU0tiMHprb0dsUUJIa2VmRHI3eE1BNUhaZUpQdEtJenlBcEk5Z21uUGdmMWMzbXVs
ZmhlMGdGZWtEQ2RORm5yT3dpNEdzNmVUQUNOakIrVWVnY2dvam9nNFYyNVA4YmN0UllZNlJMOEFK
a2xFOUFDRkFHWmRCRWFoZDRkNENtZ2hGaGJ6Y3dhWFlINXFUbFM2RFkrS2ZOSDVBdnpqbzJKSjBw
b0RrU0NNeExuNzNIL2VCK2lmdmd2eUlGQ1dBamk3QldDOGhkMHFqMEZ6aU1kclM3MEJsVmJnYW1J
Z2Ntb3RHWkROUHdtMEw5bDVpSHY3V1JvQUZ4NTdTY0ZTMnIyaXdvdDhvS3U4bCtUT0NPZzJtWjJu
RmRqVGdPRlFFTnpLa0o4T2pFbnNFOGY2QXp5WHdUNk1ORjNSRFJudWowTHdvNndUbEJNREl5cWF6
NkcrUmlMSk1nL0tVclFWL3JoOXVIMHRXZHV3b3hta3kwa1NNUStyblh4WnNHYWRnbnhmZ2sxcENu
c0lzR1lsdHZmZHpUT0JJY2xJc044TUxBR2N6NWdCd2o5NEFFOER1QzlNb2xpcC9KR3dCNTduUnlK
aXlEM3B5azZxNWlqKzNUelJMb2hjcXlxQ0VRQlRlcEYxNStXVm1XOFNFcjVqTVVVa3gzb01Jc3JI
M25kd0FRZ2FuS3p5TXBPSk54TVFvb0dCWXdjQnl3N2F4SWhnUFJHRXI2R1NHSmhrQUVMb1ExWVJn
K2RQZUQ1SUlSRElxcTVQQTJKaDBScTBZY1M4WEJpMGdoR1JGcEN0V1RkdW01K3lMT3NRZjJFdVlZ
OEFmbmJRWkRnQ2pIeEJTS3dUR3B0OFFDSURWSDMvNEg1T3dFdmxkaGxpSU53QUZMc0V5eUlmR0tW
K3ZtM2VFZWhWcUtUZE54dERpUG9MSENSaXV3VEp4Q0VDeE1EcURqVHZaNjNLYVBLdlJnVjJpL0Yz
b2htODhWOExOOGhnSmNYRDVwVkdJUFBObjlFQnFTUUMwSTRBTXhCVWNRTkNrYXJrRmdTbi9vQ3M5
R0NWZXA0ZVVHNUJSQU9jUU9DV2xHU2MzSWYwSUZxUmZVUlFHUnJLZXdQS0VKOXNMbklvd0tDY3cr
ZjQ4TjZVSGpxWXRnSW5hQ0NrQmJQU2o4VkVrQ3IyZzhVNDN3WTF4WC9CTmt3cmVRcnpnK29hSmdo
T0NHVFU4UkJ4dUlwNlZGT0dvRVhnRXNCTElnVjZnQmd4b0xTSTVDZ2lZTlQrR0JIc1UwMUd0aHJj
ZWlNVXR2OUtnQVlrdGdWTmVHckJidGlPUVZpOXg4V2ppQVc3VU5Vbm00VmV0N1d0c0ZnRENEWUV3
US9FVkwxUG5RZi94Q0RMVG93VGg0YzRIUFJEb1FhaXdoS0lBYWU0Qjd4Z0NCeWRJL0NEUE9yZXZL
MEZSNHA2dzNWZm9YZ1FpQjNUMU44WTFQQ0QwWDE5SnFjSEdmekI1V2tRRTRwL2tkZVhCY0VWVVhF
SUZxU2lqODJsTXlyV3EvN2MrTEZIQTd6NS9kd09ISGc4cy9ZOEMyQ21oYm1BTHRhcmUrNFVXTGZi
MjVCbVhBQktBQlRuaUM4Z1JBUDJ5dkRBaVVBc0VsbnJ4RnpJVFFhL3NBRmVjQU9ZN3pQVi84ak1R
SFNiV0FpVVBHa1FOQUJodzg1eHJTQ3YrbU1TekZSOCs3bWp3MDFBOGY0RjhTL3RkNGpuREhZeHBU
OC9PRXlWM2d6MitHVGZkQWVBc3pzd2ZKTkdsUWhFSWpCMEJsczBCS240SXc3V0t1OWYxZ21TYWdt
dnFsZUV3SnduWndqTzducHoxSGRDSjFoUy9tbEJjUlh5RjNpL003TnhxSkZvZUgyN3o3bm5KYUJt
cFVaS0hzVGJHVWMxQUxFb0lHc0dZbDlpeFM1MGdqQVQvVmhCOEl6dkdUckJWZldFejFNekFrUkZU
dGVjVzczMVZkak5RUHVrVmRoZG4wWThkL2E3V1lINmkvVEJQQnpVRndBbEh3dEdIT1FJU3JnYjFB
TVVnREVUVEEzK1RIQWRlUkpoZzU5Vi9Fa3RvZmE5STh3eFZJQ2tDN1FRU0FkMk8zY2Z0elB6ZE1L
NmFBNGlaSTRJTGZZUmJiOVJncUlDdDJBeFZuWVo0a2tCdkhPQnhUL3pOOXliSHgvZjVRbDJma0dD
WDZBTm02RjhXQ2ZxQVMrRXE1QUdjSEpkMklGSGFnVE1IQUFqK21XQm5EWHVjODFDamhzQWk1ZEwy
SzhRQ1lJMWFKL1BKdFNTeEVGWEFTdjdDMkkzWkI5L2Ewai83bkRuL2oxcEhzejlKcjhmTnB4UEJV
QVVVWUQ0d3o1R0JsbXlBaU9SanRBSUdERnd6U1V3cWlOWjFkMXRQaUI3L1E5VmVJOUtlSlUxNi9r
bmtFZVFKRUFMalk0cmtwNzRmQ1ppTURTQS9QZ3ZUL2FUMmdZZ3A1RS9QMjlBS0JRQW82VFJ0aDVU
NFZlc1FGYjBpNEs3UkEyTVpwZ3lGWENFUUhDT2l4dVlNUGd5Mkw3KzQ1ZXpTU0t0Mm9Va1VSbHBY
a0VNT0xTaVhQdURRWmprNjNONWJtek9TeFFkTEhYN0Fod1VFQTBCQWVRUEpJUXprQXVGbE9LL0d0
eUxkaUdES0VCZGxsUTdZb3V4VjJYZHd6YTlTbzRLcDVaMHlBZ1VoVGxKZ0Z6U0Zyem5JSFlJd0tj
Q3UyL0wzTHNDZzZVSTFiMS9DQStBcElWNS8zMkhxT0lqZFF1c0U0YXppcDVXYzFiMHEvUUdJQWxh
V0VKYlhQM3IvTCtBRWlwdy8rQnRrUVZZOWZJTTJpL1poZ1ZFZ0pPNkRaMWtzVnRsWWRvUUFQaFZP
MG9LbVlCbW5BWWNvNERSQ1JCM1R3Q3ppcHRhRTBhdUVSOS9WelJxS05PRVlJTk9RZzJtMWw5R3BH
TlFBaGgxdjZVbXhOUWgyTTQrTG1sVXpsbDBPVGpZUU9hR2xaQUVNQ3JkaG1CcGhhTUJ3QkFEclNR
UWMzLy9IZThLZ0ZFVFQ3cDZCSG5qajJYOUVYc0RqcmdCUzZpaG9BbWNTUVZZbUU0SmdZV0ZwcDF3
YUFRUm9xRHp4RGhVK0h4U25aSHovOUpFWTZZNU1KQStjd29XcnQ5OStVM01jLzlnL05RVEZhaWdB
RXR3QjF5Qnp3enVjWlNYN1JaRUlMaFIxZDVHRENzQkxWVWRJUXZzbGRaZkVKdDVpL01IeDJoR0pa
RmtWVnlLMjQyaUZlaDU4b0JVRnFJUWJrZnAyRFYyWDBDa0FZZ3Yxc1UrUCtJL0htQnU4bkVydWdk
Um5VV2hmcCtBL2RkbGJFSDN1UWxCc05vYlVFTUhhc0sxSE9ZbjhCRUV2Q1VhaXVpZ1hSSUtqK3NH
T1BBNEtBV3o5L3M3V3hjZ0I0K2E2L2ZJMm9zRXd2NHlPRU5BaVBmK3dRaGJjLzVmMGdHaXNXdVFh
UkZtR29JcWd1QVJXc0JRZ1RUb2NETE1UNU9KVVFuaHFkQ0VpZysvRVNoS1NFZ1RWVjBNQk1uejA0
QmNzaFBuTGsvK09hVjAvZHdLekI0UVV0MU5CNnVURGZHT1ArY05tOW1Fc0JBRmlNN0FRaDlBS1ZF
VTc1dnk2OGplT3hyVUM0bURFdVlPMG9McW9TZEhhRUYyZVhZWVNtMFYrb0VPd3BMbVlGT0YzWjRD
bUFlQlRJR3VlaUl3MnhvS1B6REJKVkJYUTVnNU84L3R3d0ErUWd1SWpKdDMrZzBOUUVjRGZVWGdP
NWdzcWxUQkxrUUxkbDg2SzNDV25laXRROHNnLzVvV0FVSlAyQzNWM1JvRXlqaTVuNGI5bEI0dDlw
ejJDQStjQUZuMVo5SS91ellzVS9FTHRFQk9DSFlRUXFHY0ZlalYreWV1UkpYMzF6c0tWNUlHandh
eTl6NlBMRHhLd05FUHNCdU9FaXF3NTdqR2dPdFoxWSsrVDUwQXVNRmw3aFBJYmhza2lPd3NBVHRS
b2M3clM3ZFhycGNnck1DR0pjYTZFTEpvK1kwYmUwQlc1WktHY0Z6NHk4VzlCZHV3Y0RuSzlpTzVm
YWdzS3BwOUFObnZEUHhlUDhUSE55SVZGbzFBTWFzOFFrNXYyWXRtMExDQ1lBWHFuK3dRc1BUQmgv
NUJjbm5lMTRPczN1Q1F0Mjh2c0sxV1VFU0pGdmlCZ0FXLy8zdTlQTHh1c1hjaGNDUjJXc056di9J
bXZnWnp6a1VCeURVQUlyalR2bVNIQW93cEpCUUU0U1VseE14bkFSbFFiSXFrQXJWQUo2cEJCdkVM
Q0NLbGt5Q0RBUDQ1QllmRVBmY1VwZk1jaDNWbjRiaGVZSzRFNjZCeEF4SFNWZDVJTmdFUGdVL05C
Q0RmTlE4SG8xQ29JTkFQUUFXL1FUOE9DSVpsTkZDQjg0WGhvRENoRkJ5SEdqeDM1djlCTGd5aG1v
anFIWWI1UVlYbnVBZWN2dWEwaFplNkJWOWY3djRpYnZndmFtcm1BYzFUbWFFaXIwTFE5aDk3ZVlB
WVZvTS9uV0E2MGk4UTNJZmV6aGE5QnFhYUwzenZxZDZJQXV3d0xTQ0N1Q0x1SldjaDRoMzBnaVB0
eWlBcGhLRUJjQ3U5QlY1d3d6a014SUQ4cmhNd2R3TWhjU0ZnckJUM1JVVFFib0FVZzMrcCtRZTFJ
R2FyT2lvVm5hem1lZlYzbEhwd0EwQWNMV0NhaFVpWHdlUEhXSnNQK0dIMWducC93ZTVLZk9oSkFi
c2owSC9CSUViMDRUYnJUUHNBeWIyTEx1OTNLd2ZDdm41UExBd3JPWEFhNzJlRVFSbzFDTmR3NUlw
cnNBWjNoQXB5OXpsY0lURzJ2cENpaHNSU1l4TlMrSjR2ZEJaNkI1MmVxUmNRL1FYbVNqQVdTZmEv
NUdBNXFFZzRpSkZ0bTYyNEFxWExyU0EyZ3g4cDFNZHFjZ2h2NDFTMGxTcC94QVlzOWdha1FjNEll
MlJUVVl3WWd0NzQ4bVYrRlUxWGdwMTRlVzNYWVo2Y2RxR1ROSHdISUNUd0VlVFBsMGpFWndJZ1A5
Z0RFYW9nZWc1SUhXQ0YrMWVvQWh2RUtQQi9FQWVUUnNNL3BTQVA1d2pXRVVNTTEvTkpSaHdKYnBK
U2dLN1M3ekYzRU9zSTVqQlFCSzlEVjgwWjhZMENPenZtV3pKWGdEbDQwS0VDNmNxdnFnaTRPQjVj
cGdMRllLLzFDdkRpSXRYcUM2L1M4N3dmQVVmUHR4cWZHTnpsWWFPamxmMUlzSFBQdmZmSGdEQW9F
ZUVTVDRaTFpVZC9SU285MS9CalhZNWdnV2dRNEluM2Z5ajRtVXFQckluSE9DTEtPM3dVd1JzZnlY
cHQxbkVJUkxycWNXZVR1azdiaWdzYmlkMXpENGlEUlF0bklkUXN5SVhuRkNuMUk5RDdBRGd4RWhP
dlI1QUpvc29VYnUxRmtKeVlDaTlPaFFFUm9JeCs0QVgvWXFVWFFodFlFd0tONEN5MUhudExNbXRh
QVFwcWZyVC9VQ29MU3hlc3dqQTVVV1BQaTBtamFqVVd4TVRkVnVzTnZ0L0NoTWRtSUxLNUlSTUZ1
OTBCTUV6RllIZGcyR0FnZVlWSE1NSklCVEE3RUZUeC81ZnBnVEZYejl3L2VuMFpqRDhrQ0RvS1BO
R3dsQjAxQm1vV1FiaCtBeFI2ODltQnBvbkdKT3I5T3dtTXUzZHRKL3lsVzFUaWs0RWxVUG1SOVJx
SUkrcFZoRDl5Y2hBQk1RNTFnT0laZysvRys1bUdJekxCMUpKQzVXaHpZamhKN0lXbUxEcEE4anpz
QWFmVVBrQjJXbkZCRjRpU3hrcTF0eTdmMjVydi8rRVFMT3hzMm9VZFRTQTlISVI5c3dkQmxDY0Zl
OW93UEMzWFdEREMwSVNWenNFVmJTQ0Yvc1dkQTVGdTRISnFhbmtwMlNlUUNZWXJJbU5hbGZtaHBW
eFlyR2tVUzRMZVNVamc4ZEQ3K0Q3dy95YklmeTd2bEI5L0hKOTc4enI3LzQ1UWdhanpqKzRFaklL
L1VMSFBSQU9sS3IvYUcwQUZjcUN5dTBHY1c0NUlnaDZKTUptaEE0OS9VK2NFc3NITkpodFhEQzFN
T3lhM2ovc0FpQUdjckV0cXRnakJENndFelNEYzdEOG82QzhySXFBWnlQaytOUW9OTEFaMWhSNjRZ
bDFGQlk2NDhzbVVZS25TZzFYd2svMER5UnlBckJ5TVVvYnlCeWhDY1BuT2FQeW9lZ1JFRlM0ak5m
WUF3K0lIQ2pkQzFKMldEWkJrZS9PeU44NUoyNFdpWHdEWVBvSnlZdUNEMjM4dWx2dXp3dDZLZ0hm
MHNoV0tzcUNGRkdqQi93OEhVOGVlVEVEOXdBQUFBQUJKUlU1RXJrSmdnZz09IjsKKyAgICByZXR1
cm4gQlJERlRleHR1cmVUb29sczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWlzYy9kZHMudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNj
L2Rkcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogRERTVG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRERT
VG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEREU1Rvb2xzOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguc2NhbGFyICovICIuL01h
dGhzL21hdGguc2NhbGFyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX3Nw
aGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGhzL3NwaGVyaWNhbFBvbHlub21pYWwgKi8gIi4vTWF0aHMv
c3BoZXJpY2FsUG9seW5vbWlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMv
ZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJl
cy9pbnRlcm5hbFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVy
ZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dn
ZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlz
Y19IaWdoRHluYW1pY1JhbmdlX2N1YmVtYXBUb1NwaGVyaWNhbFBvbHlub21pYWxfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvSGln
aER5bmFtaWNSYW5nZS9jdWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsICovICIuL01pc2MvSGln
aER5bmFtaWNSYW5nZS9jdWJlbWFwVG9TcGhlcmljYWxQb2x5bm9taWFsLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19iYXNlVGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL2Jhc2VUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9iYXNlVGV4
dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX0V4dGVuc2lvbnNf
ZW5naW5lX2N1YmVUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL0V4dGVuc2lvbnMvZW5naW5lLmN1YmVUZXh0dXJl
ICovICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUuY3ViZVRleHR1cmUudHMiKTsKKworCisK
KworCisKKworCisKKy8vIEJhc2VkIG9uIGRlbW8gZG9uZSBieSBCcmFuZG9uIEpvbmVzIC0gaHR0
cDovL21lZGlhLnRvamljb2RlLmNvbS93ZWJnbC1zYW1wbGVzL2Rkcy5odG1sCisvLyBBbGwgdmFs
dWVzIGFuZCBzdHJ1Y3R1cmVzIHJlZmVyZW5jZWQgZnJvbToKKy8vIGh0dHA6Ly9tc2RuLm1pY3Jv
c29mdC5jb20vZW4tdXMvbGlicmFyeS9iYjk0Mzk5MS5hc3B4LwordmFyIEREU19NQUdJQyA9IDB4
MjA1MzQ0NDQ7Cit2YXIgCisvL0REU0RfQ0FQUyA9IDB4MSwKKy8vRERTRF9IRUlHSFQgPSAweDIs
CisvL0REU0RfV0lEVEggPSAweDQsCisvL0REU0RfUElUQ0ggPSAweDgsCisvL0REU0RfUElYRUxG
T1JNQVQgPSAweDEwMDAsCitERFNEX01JUE1BUENPVU5UID0gMHgyMDAwMDsKKy8vRERTRF9MSU5F
QVJTSVpFID0gMHg4MDAwMCwKKy8vRERTRF9ERVBUSCA9IDB4ODAwMDAwOworLy8gdmFyIEREU0NB
UFNfQ09NUExFWCA9IDB4OCwKKy8vICAgICBERFNDQVBTX01JUE1BUCA9IDB4NDAwMDAwLAorLy8g
ICAgIEREU0NBUFNfVEVYVFVSRSA9IDB4MTAwMDsKK3ZhciBERFNDQVBTMl9DVUJFTUFQID0gMHgy
MDA7CisvLyBERFNDQVBTMl9DVUJFTUFQX1BPU0lUSVZFWCA9IDB4NDAwLAorLy8gRERTQ0FQUzJf
Q1VCRU1BUF9ORUdBVElWRVggPSAweDgwMCwKKy8vIEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVZ
ID0gMHgxMDAwLAorLy8gRERTQ0FQUzJfQ1VCRU1BUF9ORUdBVElWRVkgPSAweDIwMDAsCisvLyBE
RFNDQVBTMl9DVUJFTUFQX1BPU0lUSVZFWiA9IDB4NDAwMCwKKy8vIEREU0NBUFMyX0NVQkVNQVBf
TkVHQVRJVkVaID0gMHg4MDAwLAorLy8gRERTQ0FQUzJfVk9MVU1FID0gMHgyMDAwMDA7Cit2YXIg
CisvL0REUEZfQUxQSEFQSVhFTFMgPSAweDEsCisvL0REUEZfQUxQSEEgPSAweDIsCitERFBGX0ZP
VVJDQyA9IDB4NCwgRERQRl9SR0IgPSAweDQwLCAKKy8vRERQRl9ZVVYgPSAweDIwMCwKK0REUEZf
TFVNSU5BTkNFID0gMHgyMDAwMDsKK2Z1bmN0aW9uIEZvdXJDQ1RvSW50MzIodmFsdWUpIHsKKyAg
ICByZXR1cm4gdmFsdWUuY2hhckNvZGVBdCgwKSArCisgICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0
KDEpIDw8IDgpICsKKyAgICAgICAgKHZhbHVlLmNoYXJDb2RlQXQoMikgPDwgMTYpICsKKyAgICAg
ICAgKHZhbHVlLmNoYXJDb2RlQXQoMykgPDwgMjQpOworfQorZnVuY3Rpb24gSW50MzJUb0ZvdXJD
Qyh2YWx1ZSkgeworICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlICYgMHhmZiwg
KHZhbHVlID4+IDgpICYgMHhmZiwgKHZhbHVlID4+IDE2KSAmIDB4ZmYsICh2YWx1ZSA+PiAyNCkg
JiAweGZmKTsKK30KK3ZhciBGT1VSQ0NfRFhUMSA9IEZvdXJDQ1RvSW50MzIoIkRYVDEiKTsKK3Zh
ciBGT1VSQ0NfRFhUMyA9IEZvdXJDQ1RvSW50MzIoIkRYVDMiKTsKK3ZhciBGT1VSQ0NfRFhUNSA9
IEZvdXJDQ1RvSW50MzIoIkRYVDUiKTsKK3ZhciBGT1VSQ0NfRFgxMCA9IEZvdXJDQ1RvSW50MzIo
IkRYMTAiKTsKK3ZhciBGT1VSQ0NfRDNERk1UX1IxNkcxNkIxNkExNkYgPSAxMTM7Cit2YXIgRk9V
UkNDX0QzREZNVF9SMzJHMzJCMzJBMzJGID0gMTE2OwordmFyIERYR0lfRk9STUFUX1IzMkczMkIz
MkEzMl9GTE9BVCA9IDI7Cit2YXIgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUID0gMTA7
Cit2YXIgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk0gPSA4ODsKK3ZhciBoZWFkZXJMZW5ndGhJ
bnQgPSAzMTsgLy8gVGhlIGhlYWRlciBsZW5ndGggaW4gMzIgYml0IGludHMKKy8vIE9mZnNldHMg
aW50byB0aGUgaGVhZGVyIGFycmF5Cit2YXIgb2ZmX21hZ2ljID0gMDsKK3ZhciBvZmZfc2l6ZSA9
IDE7Cit2YXIgb2ZmX2ZsYWdzID0gMjsKK3ZhciBvZmZfaGVpZ2h0ID0gMzsKK3ZhciBvZmZfd2lk
dGggPSA0OwordmFyIG9mZl9taXBtYXBDb3VudCA9IDc7Cit2YXIgb2ZmX3BmRmxhZ3MgPSAyMDsK
K3ZhciBvZmZfcGZGb3VyQ0MgPSAyMTsKK3ZhciBvZmZfUkdCYnBwID0gMjI7Cit2YXIgb2ZmX1JN
YXNrID0gMjM7Cit2YXIgb2ZmX0dNYXNrID0gMjQ7Cit2YXIgb2ZmX0JNYXNrID0gMjU7Cit2YXIg
b2ZmX0FNYXNrID0gMjY7CisvLyB2YXIgb2ZmX2NhcHMxID0gMjc7Cit2YXIgb2ZmX2NhcHMyID0g
Mjg7CisvLyB2YXIgb2ZmX2NhcHMzID0gMjk7CisvLyB2YXIgb2ZmX2NhcHM0ID0gMzA7Cit2YXIg
b2ZmX2R4Z2lGb3JtYXQgPSAzMjsKKy8qKgorICogQ2xhc3MgdXNlZCB0byBwcm92aWRlIEREUyBk
ZWNvbXByZXNzaW9uIHRvb2xzCisgKi8KK3ZhciBERFNUb29scyA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBERFNUb29scygpIHsKKyAgICB9CisgICAgLyoqCisg
ICAgICogR2V0cyBERFMgaW5mb3JtYXRpb24gZnJvbSBhbiBhcnJheSBidWZmZXIKKyAgICAgKiBA
cGFyYW0gYXJyYXlCdWZmZXIgZGVmaW5lcyB0aGUgYXJyYXkgYnVmZmVyIHRvIHJlYWQgZGF0YSBm
cm9tCisgICAgICogQHJldHVybnMgdGhlIEREUyBpbmZvcm1hdGlvbgorICAgICAqLworICAgIERE
U1Rvb2xzLkdldEREU0luZm8gPSBmdW5jdGlvbiAoYXJyYXlCdWZmZXIpIHsKKyAgICAgICAgdmFy
IGhlYWRlciA9IG5ldyBJbnQzMkFycmF5KGFycmF5QnVmZmVyLCAwLCBoZWFkZXJMZW5ndGhJbnQp
OworICAgICAgICB2YXIgZXh0ZW5kZWRIZWFkZXIgPSBuZXcgSW50MzJBcnJheShhcnJheUJ1ZmZl
ciwgMCwgaGVhZGVyTGVuZ3RoSW50ICsgNCk7CisgICAgICAgIHZhciBtaXBtYXBDb3VudCA9IDE7
CisgICAgICAgIGlmIChoZWFkZXJbb2ZmX2ZsYWdzXSAmIEREU0RfTUlQTUFQQ09VTlQpIHsKKyAg
ICAgICAgICAgIG1pcG1hcENvdW50ID0gTWF0aC5tYXgoMSwgaGVhZGVyW29mZl9taXBtYXBDb3Vu
dF0pOworICAgICAgICB9CisgICAgICAgIHZhciBmb3VyQ0MgPSBoZWFkZXJbb2ZmX3BmRm91ckND
XTsKKyAgICAgICAgdmFyIGR4Z2lGb3JtYXQgPSAoZm91ckNDID09PSBGT1VSQ0NfRFgxMCkgPyBl
eHRlbmRlZEhlYWRlcltvZmZfZHhnaUZvcm1hdF0gOiAwOworICAgICAgICB2YXIgdGV4dHVyZVR5
cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICBzd2l0Y2ggKGZvdXJD
QykgeworICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRDNERk1UX1IxNkcxNkIxNkExNkY6CisgICAg
ICAgICAgICAgICAgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfSEFMRl9GTE9BVDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRk9VUkNDX0QzREZNVF9SMzJH
MzJCMzJBMzJGOgorICAgICAgICAgICAgICAgIHRleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBF
X0ZMT0FUOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGT1VSQ0Nf
RFgxMDoKKyAgICAgICAgICAgICAgICBpZiAoZHhnaUZvcm1hdCA9PT0gRFhHSV9GT1JNQVRfUjE2
RzE2QjE2QTE2X0ZMT0FUKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVUeXBlID0gX0Vu
Z2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJd
LlRFWFRVUkVUWVBFX0hBTEZfRkxPQVQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZHhnaUZvcm1hdCA9PT0gRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVU
eXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNv
bnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIHdpZHRoOiBoZWFkZXJbb2ZmX3dpZHRoXSwKKyAgICAgICAgICAgIGhlaWdodDogaGVhZGVy
W29mZl9oZWlnaHRdLAorICAgICAgICAgICAgbWlwbWFwQ291bnQ6IG1pcG1hcENvdW50LAorICAg
ICAgICAgICAgaXNGb3VyQ0M6IChoZWFkZXJbb2ZmX3BmRmxhZ3NdICYgRERQRl9GT1VSQ0MpID09
PSBERFBGX0ZPVVJDQywKKyAgICAgICAgICAgIGlzUkdCOiAoaGVhZGVyW29mZl9wZkZsYWdzXSAm
IEREUEZfUkdCKSA9PT0gRERQRl9SR0IsCisgICAgICAgICAgICBpc0x1bWluYW5jZTogKGhlYWRl
cltvZmZfcGZGbGFnc10gJiBERFBGX0xVTUlOQU5DRSkgPT09IEREUEZfTFVNSU5BTkNFLAorICAg
ICAgICAgICAgaXNDdWJlOiAoaGVhZGVyW29mZl9jYXBzMl0gJiBERFNDQVBTMl9DVUJFTUFQKSA9
PT0gRERTQ0FQUzJfQ1VCRU1BUCwKKyAgICAgICAgICAgIGlzQ29tcHJlc3NlZDogKGZvdXJDQyA9
PT0gRk9VUkNDX0RYVDEgfHwgZm91ckNDID09PSBGT1VSQ0NfRFhUMyB8fCBmb3VyQ0MgPT09IEZP
VVJDQ19EWFQ1KSwKKyAgICAgICAgICAgIGR4Z2lGb3JtYXQ6IGR4Z2lGb3JtYXQsCisgICAgICAg
ICAgICB0ZXh0dXJlVHlwZTogdGV4dHVyZVR5cGUKKyAgICAgICAgfTsKKyAgICB9OworICAgIERE
U1Rvb2xzLl9Ub0hhbGZGbG9hdCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAoIURE
U1Rvb2xzLl9GbG9hdFZpZXcpIHsKKyAgICAgICAgICAgIEREU1Rvb2xzLl9GbG9hdFZpZXcgPSBu
ZXcgRmxvYXQzMkFycmF5KDEpOworICAgICAgICAgICAgRERTVG9vbHMuX0ludDMyVmlldyA9IG5l
dyBJbnQzMkFycmF5KEREU1Rvb2xzLl9GbG9hdFZpZXcuYnVmZmVyKTsKKyAgICAgICAgfQorICAg
ICAgICBERFNUb29scy5fRmxvYXRWaWV3WzBdID0gdmFsdWU7CisgICAgICAgIHZhciB4ID0gRERT
VG9vbHMuX0ludDMyVmlld1swXTsKKyAgICAgICAgdmFyIGJpdHMgPSAoeCA+PiAxNikgJiAweDgw
MDA7IC8qIEdldCB0aGUgc2lnbiAqLworICAgICAgICB2YXIgbSA9ICh4ID4+IDEyKSAmIDB4MDdm
ZjsgLyogS2VlcCBvbmUgZXh0cmEgYml0IGZvciByb3VuZGluZyAqLworICAgICAgICB2YXIgZSA9
ICh4ID4+IDIzKSAmIDB4ZmY7IC8qIFVzaW5nIGludCBpcyBmYXN0ZXIgaGVyZSAqLworICAgICAg
ICAvKiBJZiB6ZXJvLCBvciBkZW5vcm1hbCwgb3IgZXhwb25lbnQgdW5kZXJmbG93cyB0b28gbXVj
aCBmb3IgYSBkZW5vcm1hbAorICAgICAgICAqIGhhbGYsIHJldHVybiBzaWduZWQgemVyby4gKi8K
KyAgICAgICAgaWYgKGUgPCAxMDMpIHsKKyAgICAgICAgICAgIHJldHVybiBiaXRzOworICAgICAg
ICB9CisgICAgICAgIC8qIElmIE5hTiwgcmV0dXJuIE5hTi4gSWYgSW5mIG9yIGV4cG9uZW50IG92
ZXJmbG93LCByZXR1cm4gSW5mLiAqLworICAgICAgICBpZiAoZSA+IDE0MikgeworICAgICAgICAg
ICAgYml0cyB8PSAweDdjMDA7CisgICAgICAgICAgICAvKiBJZiBleHBvbmVudCB3YXMgMHhmZiBh
bmQgb25lIG1hbnRpc3NhIGJpdCB3YXMgc2V0LCBpdCBtZWFucyBOYU4sCisgICAgICAgICAgICAq
IG5vdCBJbmYsIHNvIG1ha2Ugc3VyZSB3ZSBzZXQgb25lIG1hbnRpc3NhIGJpdCB0b28uICovCisg
ICAgICAgICAgICBiaXRzIHw9ICgoZSA9PSAyNTUpID8gMCA6IDEpICYmICh4ICYgMHgwMDdmZmZm
Zik7CisgICAgICAgICAgICByZXR1cm4gYml0czsKKyAgICAgICAgfQorICAgICAgICAvKiBJZiBl
eHBvbmVudCB1bmRlcmZsb3dzIGJ1dCBub3QgdG9vIG11Y2gsIHJldHVybiBhIGRlbm9ybWFsICov
CisgICAgICAgIGlmIChlIDwgMTEzKSB7CisgICAgICAgICAgICBtIHw9IDB4MDgwMDsKKyAgICAg
ICAgICAgIC8qIEV4dHJhIHJvdW5kaW5nIG1heSBvdmVyZmxvdyBhbmQgc2V0IG1hbnRpc3NhIHRv
IDAgYW5kIGV4cG9uZW50CisgICAgICAgICAgICAqIHRvIDEsIHdoaWNoIGlzIE9LLiAqLworICAg
ICAgICAgICAgYml0cyB8PSAobSA+PiAoMTE0IC0gZSkpICsgKChtID4+ICgxMTMgLSBlKSkgJiAx
KTsKKyAgICAgICAgICAgIHJldHVybiBiaXRzOworICAgICAgICB9CisgICAgICAgIGJpdHMgfD0g
KChlIC0gMTEyKSA8PCAxMCkgfCAobSA+PiAxKTsKKyAgICAgICAgYml0cyArPSBtICYgMTsKKyAg
ICAgICAgcmV0dXJuIGJpdHM7CisgICAgfTsKKyAgICBERFNUb29scy5fRnJvbUhhbGZGbG9hdCA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB2YXIgcyA9ICh2YWx1ZSAmIDB4ODAwMCkgPj4g
MTU7CisgICAgICAgIHZhciBlID0gKHZhbHVlICYgMHg3QzAwKSA+PiAxMDsKKyAgICAgICAgdmFy
IGYgPSB2YWx1ZSAmIDB4MDNGRjsKKyAgICAgICAgaWYgKGUgPT09IDApIHsKKyAgICAgICAgICAg
IHJldHVybiAocyA/IC0xIDogMSkgKiBNYXRoLnBvdygyLCAtMTQpICogKGYgLyBNYXRoLnBvdygy
LCAxMCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGUgPT0gMHgxRikgeworICAgICAg
ICAgICAgcmV0dXJuIGYgPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiAocyA/IC0xIDogMSkgKiBNYXRoLnBvdygyLCBlIC0gMTUpICog
KDEgKyAoZiAvIE1hdGgucG93KDIsIDEwKSkpOworICAgIH07CisgICAgRERTVG9vbHMuX0dldEhh
bGZGbG9hdEFzRmxvYXRSR0JBQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwg
ZGF0YU9mZnNldCwgZGF0YUxlbmd0aCwgYXJyYXlCdWZmZXIsIGxvZCkgeworICAgICAgICB2YXIg
ZGVzdEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShkYXRhTGVuZ3RoKTsKKyAgICAgICAgdmFyIHNy
Y0RhdGEgPSBuZXcgVWludDE2QXJyYXkoYXJyYXlCdWZmZXIsIGRhdGFPZmZzZXQpOworICAgICAg
ICB2YXIgaW5kZXggPSAwOworICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KSB7CisgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAg
ICAgICAgICAgICB2YXIgc3JjUG9zID0gKHggKyB5ICogd2lkdGgpICogNDsKKyAgICAgICAgICAg
ICAgICBkZXN0QXJyYXlbaW5kZXhdID0gRERTVG9vbHMuX0Zyb21IYWxmRmxvYXQoc3JjRGF0YVtz
cmNQb3NdKTsKKyAgICAgICAgICAgICAgICBkZXN0QXJyYXlbaW5kZXggKyAxXSA9IEREU1Rvb2xz
Ll9Gcm9tSGFsZkZsb2F0KHNyY0RhdGFbc3JjUG9zICsgMV0pOworICAgICAgICAgICAgICAgIGRl
c3RBcnJheVtpbmRleCArIDJdID0gRERTVG9vbHMuX0Zyb21IYWxmRmxvYXQoc3JjRGF0YVtzcmNQ
b3MgKyAyXSk7CisgICAgICAgICAgICAgICAgaWYgKEREU1Rvb2xzLlN0b3JlTE9ESW5BbHBoYUNo
YW5uZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdEFycmF5W2luZGV4ICsgM10gPSBsb2Q7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBkZXN0QXJyYXlbaW5kZXggKyAzXSA9IEREU1Rvb2xzLl9Gcm9tSGFsZkZsb2F0KHNy
Y0RhdGFbc3JjUG9zICsgM10pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
bmRleCArPSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBkZXN0
QXJyYXk7CisgICAgfTsKKyAgICBERFNUb29scy5fR2V0SGFsZkZsb2F0UkdCQUFycmF5QnVmZmVy
ID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgsIGFycmF5
QnVmZmVyLCBsb2QpIHsKKyAgICAgICAgaWYgKEREU1Rvb2xzLlN0b3JlTE9ESW5BbHBoYUNoYW5u
ZWwpIHsKKyAgICAgICAgICAgIHZhciBkZXN0QXJyYXkgPSBuZXcgVWludDE2QXJyYXkoZGF0YUxl
bmd0aCk7CisgICAgICAgICAgICB2YXIgc3JjRGF0YSA9IG5ldyBVaW50MTZBcnJheShhcnJheUJ1
ZmZlciwgZGF0YU9mZnNldCk7CisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICAg
ICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAgIGZv
ciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIg
c3JjUG9zID0gKHggKyB5ICogd2lkdGgpICogNDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdEFy
cmF5W2luZGV4XSA9IHNyY0RhdGFbc3JjUG9zXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdEFy
cmF5W2luZGV4ICsgMV0gPSBzcmNEYXRhW3NyY1BvcyArIDFdOworICAgICAgICAgICAgICAgICAg
ICBkZXN0QXJyYXlbaW5kZXggKyAyXSA9IHNyY0RhdGFbc3JjUG9zICsgMl07CisgICAgICAgICAg
ICAgICAgICAgIGRlc3RBcnJheVtpbmRleCArIDNdID0gRERTVG9vbHMuX1RvSGFsZkZsb2F0KGxv
ZCk7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGRlc3RBcnJheTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbmV3IFVpbnQxNkFycmF5KGFycmF5QnVmZmVyLCBkYXRhT2Zmc2V0LCBk
YXRhTGVuZ3RoKTsKKyAgICB9OworICAgIEREU1Rvb2xzLl9HZXRGbG9hdFJHQkFBcnJheUJ1ZmZl
ciA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoLCBhcnJh
eUJ1ZmZlciwgbG9kKSB7CisgICAgICAgIGlmIChERFNUb29scy5TdG9yZUxPREluQWxwaGFDaGFu
bmVsKSB7CisgICAgICAgICAgICB2YXIgZGVzdEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShkYXRh
TGVuZ3RoKTsKKyAgICAgICAgICAgIHZhciBzcmNEYXRhID0gbmV3IEZsb2F0MzJBcnJheShhcnJh
eUJ1ZmZlciwgZGF0YU9mZnNldCk7CisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAg
ICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAg
IGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgICAgICAgICB2
YXIgc3JjUG9zID0gKHggKyB5ICogd2lkdGgpICogNDsKKyAgICAgICAgICAgICAgICAgICAgZGVz
dEFycmF5W2luZGV4XSA9IHNyY0RhdGFbc3JjUG9zXTsKKyAgICAgICAgICAgICAgICAgICAgZGVz
dEFycmF5W2luZGV4ICsgMV0gPSBzcmNEYXRhW3NyY1BvcyArIDFdOworICAgICAgICAgICAgICAg
ICAgICBkZXN0QXJyYXlbaW5kZXggKyAyXSA9IHNyY0RhdGFbc3JjUG9zICsgMl07CisgICAgICAg
ICAgICAgICAgICAgIGRlc3RBcnJheVtpbmRleCArIDNdID0gbG9kOworICAgICAgICAgICAgICAg
ICAgICBpbmRleCArPSA0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBkZXN0QXJyYXk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBG
bG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgpOworICAgIH07
CisgICAgRERTVG9vbHMuX0dldEZsb2F0QXNVSW50UkdCQUFycmF5QnVmZmVyID0gZnVuY3Rpb24g
KHdpZHRoLCBoZWlnaHQsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgsIGFycmF5QnVmZmVyLCBsb2Qp
IHsKKyAgICAgICAgdmFyIGRlc3RBcnJheSA9IG5ldyBVaW50OEFycmF5KGRhdGFMZW5ndGgpOwor
ICAgICAgICB2YXIgc3JjRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIsIGRhdGFP
ZmZzZXQpOworICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICBmb3IgKHZhciB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgc3JjUG9zID0gKHggKyB5ICogd2lkdGgpICog
NDsKKyAgICAgICAgICAgICAgICBkZXN0QXJyYXlbaW5kZXhdID0gX01hdGhzX21hdGhfc2NhbGFy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjYWxhciJdLkNsYW1wKHNyY0RhdGFbc3Jj
UG9zXSkgKiAyNTU7CisgICAgICAgICAgICAgICAgZGVzdEFycmF5W2luZGV4ICsgMV0gPSBfTWF0
aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NhbGFyIl0uQ2xh
bXAoc3JjRGF0YVtzcmNQb3MgKyAxXSkgKiAyNTU7CisgICAgICAgICAgICAgICAgZGVzdEFycmF5
W2luZGV4ICsgMl0gPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siU2NhbGFyIl0uQ2xhbXAoc3JjRGF0YVtzcmNQb3MgKyAyXSkgKiAyNTU7CisgICAgICAg
ICAgICAgICAgaWYgKEREU1Rvb2xzLlN0b3JlTE9ESW5BbHBoYUNoYW5uZWwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGVzdEFycmF5W2luZGV4ICsgM10gPSBsb2Q7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZXN0QXJyYXlb
aW5kZXggKyAzXSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJTY2FsYXIiXS5DbGFtcChzcmNEYXRhW3NyY1BvcyArIDNdKSAqIDI1NTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggKz0gNDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZGVzdEFycmF5OworICAgIH07CisgICAgRERTVG9vbHMu
X0dldEhhbGZGbG9hdEFzVUludFJHQkFBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uICh3aWR0aCwgaGVp
Z2h0LCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoLCBhcnJheUJ1ZmZlciwgbG9kKSB7CisgICAgICAg
IHZhciBkZXN0QXJyYXkgPSBuZXcgVWludDhBcnJheShkYXRhTGVuZ3RoKTsKKyAgICAgICAgdmFy
IHNyY0RhdGEgPSBuZXcgVWludDE2QXJyYXkoYXJyYXlCdWZmZXIsIGRhdGFPZmZzZXQpOworICAg
ICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKSB7CisgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAg
ICAgICAgICAgICAgICB2YXIgc3JjUG9zID0gKHggKyB5ICogd2lkdGgpICogNDsKKyAgICAgICAg
ICAgICAgICBkZXN0QXJyYXlbaW5kZXhdID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlNjYWxhciJdLkNsYW1wKEREU1Rvb2xzLl9Gcm9tSGFsZkZsb2F0
KHNyY0RhdGFbc3JjUG9zXSkpICogMjU1OworICAgICAgICAgICAgICAgIGRlc3RBcnJheVtpbmRl
eCArIDFdID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlNjYWxhciJdLkNsYW1wKEREU1Rvb2xzLl9Gcm9tSGFsZkZsb2F0KHNyY0RhdGFbc3JjUG9zICsg
MV0pKSAqIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0QXJyYXlbaW5kZXggKyAyXSA9IF9NYXRo
c19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5DbGFt
cChERFNUb29scy5fRnJvbUhhbGZGbG9hdChzcmNEYXRhW3NyY1BvcyArIDJdKSkgKiAyNTU7Cisg
ICAgICAgICAgICAgICAgaWYgKEREU1Rvb2xzLlN0b3JlTE9ESW5BbHBoYUNoYW5uZWwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdEFycmF5W2luZGV4ICsgM10gPSBsb2Q7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZXN0
QXJyYXlbaW5kZXggKyAzXSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJTY2FsYXIiXS5DbGFtcChERFNUb29scy5fRnJvbUhhbGZGbG9hdChzcmNEYXRh
W3NyY1BvcyArIDNdKSkgKiAyNTU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGluZGV4ICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRl
c3RBcnJheTsKKyAgICB9OworICAgIEREU1Rvb2xzLl9HZXRSR0JBQXJyYXlCdWZmZXIgPSBmdW5j
dGlvbiAod2lkdGgsIGhlaWdodCwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCwgYXJyYXlCdWZmZXIs
IHJPZmZzZXQsIGdPZmZzZXQsIGJPZmZzZXQsIGFPZmZzZXQpIHsKKyAgICAgICAgdmFyIGJ5dGVB
cnJheSA9IG5ldyBVaW50OEFycmF5KGRhdGFMZW5ndGgpOworICAgICAgICB2YXIgc3JjRGF0YSA9
IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCBkYXRhT2Zmc2V0KTsKKyAgICAgICAgdmFyIGlu
ZGV4ID0gMDsKKyAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAg
ICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHNyY1BvcyA9ICh4ICsgeSAqIHdpZHRoKSAqIDQ7CisgICAgICAgICAgICAgICAgYnl0
ZUFycmF5W2luZGV4XSA9IHNyY0RhdGFbc3JjUG9zICsgck9mZnNldF07CisgICAgICAgICAgICAg
ICAgYnl0ZUFycmF5W2luZGV4ICsgMV0gPSBzcmNEYXRhW3NyY1BvcyArIGdPZmZzZXRdOworICAg
ICAgICAgICAgICAgIGJ5dGVBcnJheVtpbmRleCArIDJdID0gc3JjRGF0YVtzcmNQb3MgKyBiT2Zm
c2V0XTsKKyAgICAgICAgICAgICAgICBieXRlQXJyYXlbaW5kZXggKyAzXSA9IHNyY0RhdGFbc3Jj
UG9zICsgYU9mZnNldF07CisgICAgICAgICAgICAgICAgaW5kZXggKz0gNDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnl0ZUFycmF5OworICAgIH07CisgICAgRERT
VG9vbHMuX0V4dHJhY3RMb25nV29yZE9yZGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
IGlmICh2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gMjU1IHx8IHZhbHVlID09PSAtMTY3NzcyMTYp
IHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAxICsg
RERTVG9vbHMuX0V4dHJhY3RMb25nV29yZE9yZGVyKHZhbHVlID4+IDgpOworICAgIH07CisgICAg
RERTVG9vbHMuX0dldFJHQkFycmF5QnVmZmVyID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIGRh
dGFPZmZzZXQsIGRhdGFMZW5ndGgsIGFycmF5QnVmZmVyLCByT2Zmc2V0LCBnT2Zmc2V0LCBiT2Zm
c2V0KSB7CisgICAgICAgIHZhciBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShkYXRhTGVuZ3Ro
KTsKKyAgICAgICAgdmFyIHNyY0RhdGEgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlciwgZGF0
YU9mZnNldCk7CisgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgIGZvciAodmFyIHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lk
dGg7IHgrKykgeworICAgICAgICAgICAgICAgIHZhciBzcmNQb3MgPSAoeCArIHkgKiB3aWR0aCkg
KiAzOworICAgICAgICAgICAgICAgIGJ5dGVBcnJheVtpbmRleF0gPSBzcmNEYXRhW3NyY1BvcyAr
IHJPZmZzZXRdOworICAgICAgICAgICAgICAgIGJ5dGVBcnJheVtpbmRleCArIDFdID0gc3JjRGF0
YVtzcmNQb3MgKyBnT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICBieXRlQXJyYXlbaW5kZXggKyAy
XSA9IHNyY0RhdGFbc3JjUG9zICsgYk9mZnNldF07CisgICAgICAgICAgICAgICAgaW5kZXggKz0g
MzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnl0ZUFycmF5Owor
ICAgIH07CisgICAgRERTVG9vbHMuX0dldEx1bWluYW5jZUFycmF5QnVmZmVyID0gZnVuY3Rpb24g
KHdpZHRoLCBoZWlnaHQsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgsIGFycmF5QnVmZmVyKSB7Cisg
ICAgICAgIHZhciBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShkYXRhTGVuZ3RoKTsKKyAgICAg
ICAgdmFyIHNyY0RhdGEgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlciwgZGF0YU9mZnNldCk7
CisgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykg
eworICAgICAgICAgICAgICAgIHZhciBzcmNQb3MgPSAoeCArIHkgKiB3aWR0aCk7CisgICAgICAg
ICAgICAgICAgYnl0ZUFycmF5W2luZGV4XSA9IHNyY0RhdGFbc3JjUG9zXTsKKyAgICAgICAgICAg
ICAgICBpbmRleCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBi
eXRlQXJyYXk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGxvYWRzIEREUyBMZXZlbHMgdG8g
YSBCYWJ5bG9uIFRleHR1cmUKKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgRERTVG9vbHMu
VXBsb2FkRERTTGV2ZWxzID0gZnVuY3Rpb24gKGVuZ2luZSwgdGV4dHVyZSwgYXJyYXlCdWZmZXIs
IGluZm8sIGxvYWRNaXBtYXBzLCBmYWNlcywgbG9kSW5kZXgsIGN1cnJlbnRGYWNlKSB7CisgICAg
ICAgIGlmIChsb2RJbmRleCA9PT0gdm9pZCAwKSB7IGxvZEluZGV4ID0gLTE7IH0KKyAgICAgICAg
dmFyIHNwaGVyaWNhbFBvbHlub21pYWxGYWNlcyA9IG51bGw7CisgICAgICAgIGlmIChpbmZvLnNw
aGVyaWNhbFBvbHlub21pYWwpIHsKKyAgICAgICAgICAgIHNwaGVyaWNhbFBvbHlub21pYWxGYWNl
cyA9IG5ldyBBcnJheSgpOworICAgICAgICB9CisgICAgICAgIHZhciBleHQgPSBlbmdpbmUuZ2V0
Q2FwcygpLnMzdGM7CisgICAgICAgIHZhciBoZWFkZXIgPSBuZXcgSW50MzJBcnJheShhcnJheUJ1
ZmZlciwgMCwgaGVhZGVyTGVuZ3RoSW50KTsKKyAgICAgICAgdmFyIGZvdXJDQywgd2lkdGgsIGhl
aWdodCwgZGF0YUxlbmd0aCA9IDAsIGRhdGFPZmZzZXQ7CisgICAgICAgIHZhciBieXRlQXJyYXks
IG1pcG1hcENvdW50LCBtaXA7CisgICAgICAgIHZhciBpbnRlcm5hbENvbXByZXNzZWRGb3JtYXQg
PSAwOworICAgICAgICB2YXIgYmxvY2tCeXRlcyA9IDE7CisgICAgICAgIGlmIChoZWFkZXJbb2Zm
X21hZ2ljXSAhPT0gRERTX01BR0lDKSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfX1siTG9nZ2VyIl0uRXJyb3IoIkludmFsaWQgbWFnaWMgbnVt
YmVyIGluIEREUyBoZWFkZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIWluZm8uaXNGb3VyQ0MgJiYgIWluZm8uaXNSR0IgJiYgIWluZm8uaXNMdW1pbmFu
Y2UpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NV9fWyJMb2dnZXIiXS5FcnJvcigiVW5zdXBwb3J0ZWQgZm9ybWF0LCBtdXN0IGNvbnRhaW4gYSBG
b3VyQ0MsIFJHQiBvciBMVU1JTkFOQ0UgY29kZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmIChpbmZvLmlzQ29tcHJlc3NlZCAmJiAhZXh0KSB7CisgICAgICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTG9nZ2VyIl0u
RXJyb3IoIkNvbXByZXNzZWQgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0
Zm9ybS4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgYnBw
ID0gaGVhZGVyW29mZl9SR0JicHBdOworICAgICAgICBkYXRhT2Zmc2V0ID0gaGVhZGVyW29mZl9z
aXplXSArIDQ7CisgICAgICAgIHZhciBjb21wdXRlRm9ybWF0cyA9IGZhbHNlOworICAgICAgICBp
ZiAoaW5mby5pc0ZvdXJDQykgeworICAgICAgICAgICAgZm91ckNDID0gaGVhZGVyW29mZl9wZkZv
dXJDQ107CisgICAgICAgICAgICBzd2l0Y2ggKGZvdXJDQykgeworICAgICAgICAgICAgICAgIGNh
c2UgRk9VUkNDX0RYVDE6CisgICAgICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSA4OworICAg
ICAgICAgICAgICAgICAgICBpbnRlcm5hbENvbXByZXNzZWRGb3JtYXQgPSBleHQuQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUMV9FWFQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgRk9VUkNDX0RYVDM6CisgICAgICAgICAgICAgICAgICAgIGJsb2NrQnl0
ZXMgPSAxNjsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxDb21wcmVzc2VkRm9ybWF0ID0g
ZXh0LkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZPVVJDQ19EWFQ1OgorICAgICAgICAgICAgICAg
ICAgICBibG9ja0J5dGVzID0gMTY7CisgICAgICAgICAgICAgICAgICAgIGludGVybmFsQ29tcHJl
c3NlZEZvcm1hdCA9IGV4dC5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRDNERk1UX1Ix
NkcxNkIxNkExNkY6CisgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVGb3JtYXRzID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGT1VSQ0Nf
RDNERk1UX1IzMkczMkIzMkEzMkY6CisgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVGb3JtYXRz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBGT1VSQ0NfRFgxMDoKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYW4gYWRkaXRp
b25uYWwgaGVhZGVyIHNvIGRhdGFPZmZzZXQgbmVlZCB0byBiZSBjaGFuZ2VkCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFPZmZzZXQgKz0gNSAqIDQ7IC8vIDUgdWludHMKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHN1cHBvcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGluZm8uZHhnaUZvcm1hdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb21wdXRlRm9ybWF0cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vw
cG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk06CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5pc1JHQiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mby5pc0ZvdXJDQyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJwcCA9IDMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRlZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJVbnN1
cHBvcnRlZCBGb3VyQ0MgY29kZToiLCBJbnQzMlRvRm91ckNDKGZvdXJDQykpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHJPZmZzZXQgPSBERFNUb29scy5fRXh0cmFjdExvbmdXb3JkT3JkZXIoaGVhZGVyW29mZl9STWFz
a10pOworICAgICAgICB2YXIgZ09mZnNldCA9IEREU1Rvb2xzLl9FeHRyYWN0TG9uZ1dvcmRPcmRl
cihoZWFkZXJbb2ZmX0dNYXNrXSk7CisgICAgICAgIHZhciBiT2Zmc2V0ID0gRERTVG9vbHMuX0V4
dHJhY3RMb25nV29yZE9yZGVyKGhlYWRlcltvZmZfQk1hc2tdKTsKKyAgICAgICAgdmFyIGFPZmZz
ZXQgPSBERFNUb29scy5fRXh0cmFjdExvbmdXb3JkT3JkZXIoaGVhZGVyW29mZl9BTWFza10pOwor
ICAgICAgICBpZiAoY29tcHV0ZUZvcm1hdHMpIHsKKyAgICAgICAgICAgIGludGVybmFsQ29tcHJl
c3NlZEZvcm1hdCA9IGVuZ2luZS5fZ2V0UkdCQUJ1ZmZlckludGVybmFsU2l6ZWRGb3JtYXQoaW5m
by50ZXh0dXJlVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgbWlwbWFwQ291bnQgPSAxOworICAg
ICAgICBpZiAoaGVhZGVyW29mZl9mbGFnc10gJiBERFNEX01JUE1BUENPVU5UICYmIGxvYWRNaXBt
YXBzICE9PSBmYWxzZSkgeworICAgICAgICAgICAgbWlwbWFwQ291bnQgPSBNYXRoLm1heCgxLCBo
ZWFkZXJbb2ZmX21pcG1hcENvdW50XSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHN0YXJ0RmFj
ZSA9IGN1cnJlbnRGYWNlIHx8IDA7CisgICAgICAgIGZvciAodmFyIGZhY2UgPSBzdGFydEZhY2U7
IGZhY2UgPCBmYWNlczsgZmFjZSsrKSB7CisgICAgICAgICAgICB3aWR0aCA9IGhlYWRlcltvZmZf
d2lkdGhdOworICAgICAgICAgICAgaGVpZ2h0ID0gaGVhZGVyW29mZl9oZWlnaHRdOworICAgICAg
ICAgICAgZm9yIChtaXAgPSAwOyBtaXAgPCBtaXBtYXBDb3VudDsgKyttaXApIHsKKyAgICAgICAg
ICAgICAgICBpZiAobG9kSW5kZXggPT09IC0xIHx8IGxvZEluZGV4ID09PSBtaXApIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBmaXhlZCBMT0QsIGlmIHRoZSBsb2QgaGFzIGp1
c3QgYmVlbiB1cGxvYWRlZCwgZWFybHkgZXhpdC4KKyAgICAgICAgICAgICAgICAgICAgdmFyIGkg
PSAobG9kSW5kZXggPT09IC0xKSA/IG1pcCA6IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
aW5mby5pc0NvbXByZXNzZWQgJiYgaW5mby5pc0ZvdXJDQykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS5mb3JtYXQgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogNDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBmbG9hdEFycmF5ID0gbnVsbDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChlbmdpbmUuX2JhZE9TIHx8IGVuZ2luZS5fYmFkRGVza3RvcE9TIHx8ICghZW5n
aW5lLmdldENhcHMoKS50ZXh0dXJlSGFsZkZsb2F0ICYmICFlbmdpbmUuZ2V0Q2FwcygpLnRleHR1
cmVGbG9hdCkpIHsgLy8gUmVxdWlyZWQgYmVjYXVzZSBpT1MgaGFzIG1hbnkgaXNzdWVzIHdpdGgg
ZmxvYXQgYW5kIGhhbGYgZmxvYXQgZ2VuZXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChicHAgPT09IDEyOCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdEFycmF5ID0gRERTVG9vbHMuX0dldEZsb2F0QXNVSW50UkdCQUFycmF5QnVmZmVyKHdpZHRo
LCBoZWlnaHQsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgsIGFycmF5QnVmZmVyLCBpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwaGVyaWNhbFBvbHlub21pYWxGYWNlcyAm
JiBpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaGVyaWNh
bFBvbHlub21pYWxGYWNlcy5wdXNoKEREU1Rvb2xzLl9HZXRGbG9hdFJHQkFBcnJheUJ1ZmZlcih3
aWR0aCwgaGVpZ2h0LCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoLCBhcnJheUJ1ZmZlciwgaSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJwcCA9PT0gNjQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRBcnJheSA9IEREU1Rvb2xz
Ll9HZXRIYWxmRmxvYXRBc1VJbnRSR0JBQXJyYXlCdWZmZXIod2lkdGgsIGhlaWdodCwgZGF0YU9m
ZnNldCwgZGF0YUxlbmd0aCwgYXJyYXlCdWZmZXIsIGkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3BoZXJpY2FsUG9seW5vbWlhbEZhY2VzICYmIGkgPT0gMCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BoZXJpY2FsUG9seW5vbWlhbEZhY2Vz
LnB1c2goRERTVG9vbHMuX0dldEhhbGZGbG9hdEFzRmxvYXRSR0JBQXJyYXlCdWZmZXIod2lkdGgs
IGhlaWdodCwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCwgYXJyYXlCdWZmZXIsIGkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLnR5cGUgPSBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJw
cCA9PT0gMTI4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUudHlw
ZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9GTE9BVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXRBcnJheSA9IEREU1Rvb2xzLl9HZXRGbG9hdFJHQkFBcnJheUJ1ZmZlcih3aWR0aCwg
aGVpZ2h0LCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoLCBhcnJheUJ1ZmZlciwgaSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGhlcmljYWxQb2x5bm9taWFsRmFjZXMgJiYg
aSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGhlcmljYWxQ
b2x5bm9taWFsRmFjZXMucHVzaChmbG9hdEFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChicHAgPT09IDY0ICYmICFlbmdpbmUuZ2V0Q2FwcygpLnRl
eHR1cmVIYWxmRmxvYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS50eXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdEFycmF5ID0gRERTVG9vbHMuX0dldEhhbGZGbG9hdEFzRmxvYXRSR0JBQXJy
YXlCdWZmZXIod2lkdGgsIGhlaWdodCwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCwgYXJyYXlCdWZm
ZXIsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BoZXJpY2FsUG9s
eW5vbWlhbEZhY2VzICYmIGkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3BoZXJpY2FsUG9seW5vbWlhbEZhY2VzLnB1c2goZmxvYXRBcnJheSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8vIDY0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUudHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZM
T0FUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdEFycmF5ID0gRERTVG9v
bHMuX0dldEhhbGZGbG9hdFJHQkFBcnJheUJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBkYXRhT2Zmc2V0
LCBkYXRhTGVuZ3RoLCBhcnJheUJ1ZmZlciwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzcGhlcmljYWxQb2x5bm9taWFsRmFjZXMgJiYgaSA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGhlcmljYWxQb2x5bm9taWFsRmFjZXMucHVz
aChERFNUb29scy5fR2V0SGFsZkZsb2F0QXNGbG9hdFJHQkFBcnJheUJ1ZmZlcih3aWR0aCwgaGVp
Z2h0LCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoLCBhcnJheUJ1ZmZlciwgaSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZs
b2F0QXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmUuX3VwbG9hZERh
dGFUb1RleHR1cmVEaXJlY3RseSh0ZXh0dXJlLCBmbG9hdEFycmF5LCBmYWNlLCBpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChpbmZvLmlzUkdCKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLnR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGJwcCA9PT0gMjQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLmZvcm1hdCA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFRk9STUFUX1JHQjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gd2lkdGggKiBoZWlnaHQgKiAzOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJ5dGVBcnJheSA9IEREU1Rvb2xzLl9HZXRSR0JBcnJheUJ1ZmZl
cih3aWR0aCwgaGVpZ2h0LCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoLCBhcnJheUJ1ZmZlciwgck9m
ZnNldCwgZ09mZnNldCwgYk9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5n
aW5lLl91cGxvYWREYXRhVG9UZXh0dXJlRGlyZWN0bHkodGV4dHVyZSwgYnl0ZUFycmF5LCBmYWNl
LCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgeyAvLyAzMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZm9ybWF0
ID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0
YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCQTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTGVuZ3RoID0gd2lkdGggKiBoZWlnaHQgKiA0OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJ5dGVBcnJheSA9IEREU1Rvb2xzLl9HZXRSR0JBQXJyYXlCdWZmZXIod2lkdGgsIGhlaWdo
dCwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCwgYXJyYXlCdWZmZXIsIHJPZmZzZXQsIGdPZmZzZXQs
IGJPZmZzZXQsIGFPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS5f
dXBsb2FkRGF0YVRvVGV4dHVyZURpcmVjdGx5KHRleHR1cmUsIGJ5dGVBcnJheSwgZmFjZSwgaSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5mby5pc0x1bWluYW5jZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHVucGFja0FsaWdubWVudCA9IGVuZ2luZS5fZ2V0VW5wYWNrQWxpZ25l
bWVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVucGFkZGVkUm93U2l6ZSA9IHdp
ZHRoOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZGRlZFJvd1NpemUgPSBNYXRoLmZs
b29yKCh3aWR0aCArIHVucGFja0FsaWdubWVudCAtIDEpIC8gdW5wYWNrQWxpZ25tZW50KSAqIHVu
cGFja0FsaWdubWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBwYWRk
ZWRSb3dTaXplICogKGhlaWdodCAtIDEpICsgdW5wYWRkZWRSb3dTaXplOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnl0ZUFycmF5ID0gRERTVG9vbHMuX0dldEx1bWluYW5jZUFycmF5QnVmZmVy
KHdpZHRoLCBoZWlnaHQsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgsIGFycmF5QnVmZmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZm9ybWF0ID0gX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRf
TFVNSU5BTkNFOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS50eXBlID0gX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLlRF
WFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS5f
dXBsb2FkRGF0YVRvVGV4dHVyZURpcmVjdGx5KHRleHR1cmUsIGJ5dGVBcnJheSwgZmFjZSwgaSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gTWF0aC5tYXgoNCwgd2lkdGgpIC8gNCAq
IE1hdGgubWF4KDQsIGhlaWdodCkgLyA0ICogYmxvY2tCeXRlczsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCBkYXRhT2Zmc2V0
LCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUudHlwZSA9IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMi
XS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmdp
bmUuX3VwbG9hZENvbXByZXNzZWREYXRhVG9UZXh0dXJlRGlyZWN0bHkodGV4dHVyZSwgaW50ZXJu
YWxDb21wcmVzc2VkRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBieXRlQXJyYXksIGZhY2UsIGkpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGRhdGFPZmZzZXQgKz0gYnBwID8gKHdpZHRoICogaGVpZ2h0ICogKGJwcCAvIDgpKSA6IGRhdGFM
ZW5ndGg7CisgICAgICAgICAgICAgICAgd2lkdGggKj0gMC41OworICAgICAgICAgICAgICAgIGhl
aWdodCAqPSAwLjU7CisgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heCgxLjAsIHdpZHRo
KTsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1heCgxLjAsIGhlaWdodCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3VycmVudEZhY2UgIT09IHVuZGVmaW5lZCkgewor
ICAgICAgICAgICAgICAgIC8vIExvYWRpbmcgYSBzaW5nbGUgZmFjZQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzcGhlcmljYWxQ
b2x5bm9taWFsRmFjZXMgJiYgc3BoZXJpY2FsUG9seW5vbWlhbEZhY2VzLmxlbmd0aCA+IDApIHsK
KyAgICAgICAgICAgIGluZm8uc3BoZXJpY2FsUG9seW5vbWlhbCA9IF9NaXNjX0hpZ2hEeW5hbWlj
UmFuZ2VfY3ViZW1hcFRvU3BoZXJpY2FsUG9seW5vbWlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fWyJDdWJlTWFwVG9TcGhlcmljYWxQb2x5bm9taWFsVG9vbHMiXS5Db252ZXJ0Q3ViZU1h
cFRvU3BoZXJpY2FsUG9seW5vbWlhbCh7CisgICAgICAgICAgICAgICAgc2l6ZTogaGVhZGVyW29m
Zl93aWR0aF0sCisgICAgICAgICAgICAgICAgcmlnaHQ6IHNwaGVyaWNhbFBvbHlub21pYWxGYWNl
c1swXSwKKyAgICAgICAgICAgICAgICBsZWZ0OiBzcGhlcmljYWxQb2x5bm9taWFsRmFjZXNbMV0s
CisgICAgICAgICAgICAgICAgdXA6IHNwaGVyaWNhbFBvbHlub21pYWxGYWNlc1syXSwKKyAgICAg
ICAgICAgICAgICBkb3duOiBzcGhlcmljYWxQb2x5bm9taWFsRmFjZXNbM10sCisgICAgICAgICAg
ICAgICAgZnJvbnQ6IHNwaGVyaWNhbFBvbHlub21pYWxGYWNlc1s0XSwKKyAgICAgICAgICAgICAg
ICBiYWNrOiBzcGhlcmljYWxQb2x5bm9taWFsRmFjZXNbNV0sCisgICAgICAgICAgICAgICAgZm9y
bWF0OiBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBLAorICAgICAgICAgICAgICAgIHR5cGU6IF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMiXS5U
RVhUVVJFVFlQRV9GTE9BVCwKKyAgICAgICAgICAgICAgICBnYW1tYVNwYWNlOiBmYWxzZSwKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW5m
by5zcGhlcmljYWxQb2x5bm9taWFsID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCBMT0Qg
aW5mbyBpcyBzdG9yZWQgaW4gYWxwaGEgY2hhbm5lbCAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAg
Ki8KKyAgICBERFNUb29scy5TdG9yZUxPREluQWxwaGFDaGFubmVsID0gZmFsc2U7CisgICAgcmV0
dXJuIEREU1Rvb2xzOworfSgpKTsKKworLyoqCisgKiBDcmVhdGUgYSBjdWJlIHRleHR1cmUgZnJv
bSBwcmVmaWx0ZXJlZCBkYXRhIChpZS4gdGhlIG1pcG1hcHMgY29udGFpbiByZWFkeSB0byB1c2Ug
ZGF0YSBmb3IgUEJSIHJlZmxlY3Rpb24pCisgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSB1
cmwgd2hlcmUgdGhlIGZpbGUgdG8gbG9hZCBpcyBsb2NhdGVkCisgKiBAcGFyYW0gc2NlbmUgZGVm
aW5lcyB0aGUgY3VycmVudCBzY2VuZQorICogQHBhcmFtIGxvZFNjYWxlIGRlZmluZXMgc2NhbGUg
dG8gYXBwbHkgdG8gdGhlIG1pcCBtYXAgc2VsZWN0aW9uCisgKiBAcGFyYW0gbG9kT2Zmc2V0IGRl
ZmluZXMgb2Zmc2V0IHRvIGFwcGx5IHRvIHRoZSBtaXAgbWFwIHNlbGVjdGlvbgorICogQHBhcmFt
IG9uTG9hZCBkZWZpbmVzIGFuIG9wdGlvbmFsIGNhbGxiYWNrIHJhaXNlZCB3aGVuIHRoZSB0ZXh0
dXJlIGlzIGxvYWRlZAorICogQHBhcmFtIG9uRXJyb3IgZGVmaW5lcyBhbiBvcHRpb25hbCBjYWxs
YmFjayByYWlzZWQgaWYgdGhlcmUgaXMgYW4gaXNzdWUgdG8gbG9hZCB0aGUgdGV4dHVyZQorICog
QHBhcmFtIGZvcm1hdCBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEKKyAqIEBwYXJhbSBm
b3JjZWRFeHRlbnNpb24gZGVmaW5lcyB0aGUgZXh0ZW5zaW9uIHRvIHVzZSB0byBwaWNrIHRoZSBy
aWdodCBsb2FkZXIKKyAqIEBwYXJhbSBjcmVhdGVQb2x5bm9taWFscyBkZWZpbmVzIHdoZXRlciBv
ciBub3QgdG8gY3JlYXRlIHBvbHlub21haWxzIGhhcm1vbmljcyBmb3IgdGhlIHRleHR1cmUKKyAq
IEByZXR1cm5zIHRoZSBjdWJlIHRleHR1cmUgYXMgYW4gSW50ZXJuYWxUZXh0dXJlCisgKi8KK19F
bmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5wcm90
b3R5cGUuY3JlYXRlUHJlZmlsdGVyZWRDdWJlVGV4dHVyZSA9IGZ1bmN0aW9uIChyb290VXJsLCBz
Y2VuZSwgbG9kU2NhbGUsIGxvZE9mZnNldCwgb25Mb2FkLCBvbkVycm9yLCBmb3JtYXQsIGZvcmNl
ZEV4dGVuc2lvbiwgY3JlYXRlUG9seW5vbWlhbHMpIHsKKyAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgIGlmIChvbkxvYWQgPT09IHZvaWQgMCkgeyBvbkxvYWQgPSBudWxsOyB9CisgICAgaWYgKG9u
RXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbnVsbDsgfQorICAgIGlmIChmb3JjZWRFeHRl
bnNpb24gPT09IHZvaWQgMCkgeyBmb3JjZWRFeHRlbnNpb24gPSBudWxsOyB9CisgICAgaWYgKGNy
ZWF0ZVBvbHlub21pYWxzID09PSB2b2lkIDApIHsgY3JlYXRlUG9seW5vbWlhbHMgPSB0cnVlOyB9
CisgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gKGxvYWREYXRhKSB7CisgICAgICAgIGlmICgh
bG9hZERhdGEpIHsKKyAgICAgICAgICAgIGlmIChvbkxvYWQpIHsKKyAgICAgICAgICAgICAgICBv
bkxvYWQobnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgdmFyIHRleHR1cmUgPSBsb2FkRGF0YS50ZXh0dXJlOworICAgICAgICBpZiAo
IWNyZWF0ZVBvbHlub21pYWxzKSB7CisgICAgICAgICAgICB0ZXh0dXJlLl9zcGhlcmljYWxQb2x5
bm9taWFsID0gbmV3IF9NYXRoc19zcGhlcmljYWxQb2x5bm9taWFsX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlNwaGVyaWNhbFBvbHlub21pYWwiXSgpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGxvYWREYXRhLmluZm8uc3BoZXJpY2FsUG9seW5vbWlhbCkgeworICAgICAgICAg
ICAgdGV4dHVyZS5fc3BoZXJpY2FsUG9seW5vbWlhbCA9IGxvYWREYXRhLmluZm8uc3BoZXJpY2Fs
UG9seW5vbWlhbDsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlLl9kYXRhU291cmNlID0gX01h
dGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siSW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9DVUJFUFJFRklMVEVSRUQ7CisgICAg
ICAgIGlmIChfdGhpcy5nZXRDYXBzKCkudGV4dHVyZUxPRCkgeworICAgICAgICAgICAgLy8gRG8g
bm90IGFkZCBleHRyYSBwcm9jZXNzIGlmIHRleHR1cmUgbG9kIGlzIHN1cHBvcnRlZC4KKyAgICAg
ICAgICAgIGlmIChvbkxvYWQpIHsKKyAgICAgICAgICAgICAgICBvbkxvYWQodGV4dHVyZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFy
IG1pcFNsaWNlcyA9IDM7CisgICAgICAgIHZhciBnbCA9IF90aGlzLl9nbDsKKyAgICAgICAgdmFy
IHdpZHRoID0gbG9hZERhdGEud2lkdGg7CisgICAgICAgIGlmICghd2lkdGgpIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgdGV4dHVyZXMgPSBbXTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXBTbGljZXM7IGkrKykgeworICAgICAgICAgICAgLy9j
b21wdXRlIExPRCBmcm9tIGV2ZW4gc3BhY2luZyBpbiBzbW9vdGhuZXNzIChtYXRjaGluZyBzaGFk
ZXIgY2FsY3VsYXRpb24pCisgICAgICAgICAgICB2YXIgc21vb3RobmVzcyA9IGkgLyAobWlwU2xp
Y2VzIC0gMSk7CisgICAgICAgICAgICB2YXIgcm91Z2huZXNzID0gMSAtIHNtb290aG5lc3M7Cisg
ICAgICAgICAgICB2YXIgbWluTE9ESW5kZXggPSBsb2RPZmZzZXQ7IC8vIHJvdWdobmVzcyA9IDAK
KyAgICAgICAgICAgIHZhciBtYXhMT0RJbmRleCA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5Mb2cyKHdpZHRoKSAqIGxvZFNjYWxlICsg
bG9kT2Zmc2V0OyAvLyByb3VnaG5lc3MgPSAxCisgICAgICAgICAgICB2YXIgbG9kSW5kZXggPSBt
aW5MT0RJbmRleCArIChtYXhMT0RJbmRleCAtIG1pbkxPREluZGV4KSAqIHJvdWdobmVzczsKKyAg
ICAgICAgICAgIHZhciBtaXBtYXBJbmRleCA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgo
bG9kSW5kZXgsIDApLCBtYXhMT0RJbmRleCkpOworICAgICAgICAgICAgdmFyIGdsVGV4dHVyZUZy
b21Mb2QgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siSW50ZXJuYWxUZXh0dXJlIl0oX3RoaXMsIF9NYXRlcmlhbHNf
VGV4dHVyZXNfaW50ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIklu
dGVybmFsVGV4dHVyZSJdLkRBVEFTT1VSQ0VfVEVNUCk7CisgICAgICAgICAgICBnbFRleHR1cmVG
cm9tTG9kLnR5cGUgPSB0ZXh0dXJlLnR5cGU7CisgICAgICAgICAgICBnbFRleHR1cmVGcm9tTG9k
LmZvcm1hdCA9IHRleHR1cmUuZm9ybWF0OworICAgICAgICAgICAgZ2xUZXh0dXJlRnJvbUxvZC53
aWR0aCA9IE1hdGgucG93KDIsIE1hdGgubWF4KF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJTY2FsYXIiXS5Mb2cyKHdpZHRoKSAtIG1pcG1hcEluZGV4LCAw
KSk7CisgICAgICAgICAgICBnbFRleHR1cmVGcm9tTG9kLmhlaWdodCA9IGdsVGV4dHVyZUZyb21M
b2Qud2lkdGg7CisgICAgICAgICAgICBnbFRleHR1cmVGcm9tTG9kLmlzQ3ViZSA9IHRydWU7Cisg
ICAgICAgICAgICBfdGhpcy5fYmluZFRleHR1cmVEaXJlY3RseShnbC5URVhUVVJFX0NVQkVfTUFQ
LCBnbFRleHR1cmVGcm9tTG9kLCB0cnVlKTsKKyAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmko
Z2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpOwor
ICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFX0NVQkVfTUFQLCBnbC5URVhU
VVJFX01JTl9GSUxURVIsIGdsLkxJTkVBUik7CisgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJp
KGdsLlRFWFRVUkVfQ1VCRV9NQVAsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdF
KTsKKyAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wu
VEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpOworICAgICAgICAgICAgaWYgKGxvYWRE
YXRhLmlzRERTKSB7CisgICAgICAgICAgICAgICAgdmFyIGluZm8gPSBsb2FkRGF0YS5pbmZvOwor
ICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbG9hZERhdGEuZGF0YTsKKyAgICAgICAgICAgICAg
ICBfdGhpcy5fdW5wYWNrRmxpcFkoaW5mby5pc0NvbXByZXNzZWQpOworICAgICAgICAgICAgICAg
IEREU1Rvb2xzLlVwbG9hZEREU0xldmVscyhfdGhpcywgZ2xUZXh0dXJlRnJvbUxvZCwgZGF0YSwg
aW5mbywgdHJ1ZSwgNiwgbWlwbWFwSW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIkxvZ2dlciJdLldhcm4oIkREUyBpcyB0aGUgb25seSBwcmVmaWx0ZXJlZCBjdWJl
IG1hcCBzdXBwb3J0ZWQgc28gZmFyLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgX3Ro
aXMuX2JpbmRUZXh0dXJlRGlyZWN0bHkoZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7CisgICAg
ICAgICAgICAvLyBXcmFwIGluIGEgYmFzZSB0ZXh0dXJlIGZvciBlYXN5IGJpbmRpbmcuCisgICAg
ICAgICAgICB2YXIgbG9kVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2Jhc2VUZXh0
dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkJhc2VUZXh0dXJlIl0oc2NlbmUpOwor
ICAgICAgICAgICAgbG9kVGV4dHVyZS5pc0N1YmUgPSB0cnVlOworICAgICAgICAgICAgbG9kVGV4
dHVyZS5fdGV4dHVyZSA9IGdsVGV4dHVyZUZyb21Mb2Q7CisgICAgICAgICAgICBnbFRleHR1cmVG
cm9tTG9kLmlzUmVhZHkgPSB0cnVlOworICAgICAgICAgICAgdGV4dHVyZXMucHVzaChsb2RUZXh0
dXJlKTsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJlSGlnaCA9IHRleHR1
cmVzWzJdOworICAgICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJlTWlkID0gdGV4dHVyZXNbMV07Cisg
ICAgICAgIHRleHR1cmUuX2xvZFRleHR1cmVMb3cgPSB0ZXh0dXJlc1swXTsKKyAgICAgICAgaWYg
KG9uTG9hZCkgeworICAgICAgICAgICAgb25Mb2FkKHRleHR1cmUpOworICAgICAgICB9CisgICAg
fTsKKyAgICByZXR1cm4gdGhpcy5jcmVhdGVDdWJlVGV4dHVyZShyb290VXJsLCBzY2VuZSwgbnVs
bCwgZmFsc2UsIGNhbGxiYWNrLCBvbkVycm9yLCBmb3JtYXQsIGZvcmNlZEV4dGVuc2lvbiwgY3Jl
YXRlUG9seW5vbWlhbHMsIGxvZFNjYWxlLCBsb2RPZmZzZXQpOworfTsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vTWlzYy9kZWNvcmF0b3JzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvZGVjb3JhdG9ycy50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGV4cGFuZFRvUHJv
cGVydHksIHNlcmlhbGl6ZSwgc2VyaWFsaXplQXNUZXh0dXJlLCBzZXJpYWxpemVBc0NvbG9yMywg
c2VyaWFsaXplQXNGcmVzbmVsUGFyYW1ldGVycywgc2VyaWFsaXplQXNWZWN0b3IyLCBzZXJpYWxp
emVBc1ZlY3RvcjMsIHNlcmlhbGl6ZUFzTWVzaFJlZmVyZW5jZSwgc2VyaWFsaXplQXNDb2xvckN1
cnZlcywgc2VyaWFsaXplQXNDb2xvcjQsIHNlcmlhbGl6ZUFzSW1hZ2VQcm9jZXNzaW5nQ29uZmln
dXJhdGlvbiwgc2VyaWFsaXplQXNRdWF0ZXJuaW9uLCBzZXJpYWxpemVBc01hdHJpeCwgc2VyaWFs
aXplQXNDYW1lcmFSZWZlcmVuY2UsIFNlcmlhbGl6YXRpb25IZWxwZXIgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZXhwYW5kVG9Qcm9wZXJ0eSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gZXhwYW5kVG9Qcm9wZXJ0eTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemUi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJz
ZXJpYWxpemVBc1RleHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZUFzVGV4dHVy
ZTsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0NvbG9yMyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gc2VyaWFsaXplQXNDb2xvcjM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2VyaWFs
aXplQXNGcmVzbmVsUGFyYW1ldGVycyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2VyaWFsaXplQXNG
cmVzbmVsUGFyYW1ldGVyczsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1ZlY3Rv
cjIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZUFzVmVjdG9yMjsgfSk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJzZXJpYWxpemVBc1ZlY3RvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlh
bGl6ZUFzVmVjdG9yMzsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc01lc2hSZWZl
cmVuY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZUFzTWVzaFJlZmVyZW5jZTsgfSk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0NvbG9yQ3VydmVzIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBzZXJpYWxpemVBc0NvbG9yQ3VydmVzOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNl
cmlhbGl6ZUFzQ29sb3I0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXJpYWxpemVBc0NvbG9yNDsg
fSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZUFzSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1F1YXRlcm5pb24i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZUFzUXVhdGVybmlvbjsgfSk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJzZXJpYWxpemVBc01hdHJpeCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2VyaWFs
aXplQXNNYXRyaXg7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2VyaWFsaXplQXNDYW1lcmFSZWZl
cmVuY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcmlhbGl6ZUFzQ2FtZXJhUmVmZXJlbmNlOyB9
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlNlcmlhbGl6YXRpb25IZWxwZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFNlcmlhbGl6YXRpb25IZWxwZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01pc2MvdGFncyAqLyAiLi9NaXNjL3RhZ3MudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIu
L01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RldlRv
b2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL2RldlRvb2xzICovICIuL01pc2MvZGV2VG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9t
YXRoLmNvbG9yLnRzIik7CisKKworCisKK3ZhciBfX2RlY29yYXRvckluaXRpYWxTdG9yZSA9IHt9
OwordmFyIF9fbWVyZ2VkU3RvcmUgPSB7fTsKK3ZhciBfY29weVNvdXJjZSA9IGZ1bmN0aW9uIChj
cmVhdGlvbkZ1bmN0aW9uLCBzb3VyY2UsIGluc3RhbmNpYXRlKSB7CisgICAgdmFyIGRlc3RpbmF0
aW9uID0gY3JlYXRpb25GdW5jdGlvbigpOworICAgIC8vIFRhZ3MKKyAgICBpZiAoX01pc2NfdGFn
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUYWdzIl0pIHsKKyAgICAgICAgX01pc2Nf
dGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUYWdzIl0uQWRkVGFnc1RvKGRlc3Rp
bmF0aW9uLCBzb3VyY2UudGFncyk7CisgICAgfQorICAgIHZhciBjbGFzc1N0b3JlID0gZ2V0TWVy
Z2VkU3RvcmUoZGVzdGluYXRpb24pOworICAgIC8vIFByb3BlcnRpZXMKKyAgICBmb3IgKHZhciBw
cm9wZXJ0eSBpbiBjbGFzc1N0b3JlKSB7CisgICAgICAgIHZhciBwcm9wZXJ0eURlc2NyaXB0b3Ig
PSBjbGFzc1N0b3JlW3Byb3BlcnR5XTsKKyAgICAgICAgdmFyIHNvdXJjZVByb3BlcnR5ID0gc291
cmNlW3Byb3BlcnR5XTsKKyAgICAgICAgdmFyIHByb3BlcnR5VHlwZSA9IHByb3BlcnR5RGVzY3Jp
cHRvci50eXBlOworICAgICAgICBpZiAoc291cmNlUHJvcGVydHkgIT09IHVuZGVmaW5lZCAmJiBz
b3VyY2VQcm9wZXJ0eSAhPT0gbnVsbCAmJiBwcm9wZXJ0eSAhPT0gInVuaXF1ZUlkIikgeworICAg
ICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eVR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6
IC8vIFZhbHVlCisgICAgICAgICAgICAgICAgY2FzZSA2OiAvLyBNZXNoIHJlZmVyZW5jZQorICAg
ICAgICAgICAgICAgIGNhc2UgMTE6IC8vIENhbWVyYSByZWZlcmVuY2UKKyAgICAgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25bcHJvcGVydHldID0gc291cmNlUHJvcGVydHk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gVGV4dHVyZQorICAg
ICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSAoaW5zdGFuY2lhdGUgfHwg
c291cmNlUHJvcGVydHkuaXNSZW5kZXJUYXJnZXQpID8gc291cmNlUHJvcGVydHkgOiBzb3VyY2VQ
cm9wZXJ0eS5jbG9uZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIDI6IC8vIENvbG9yMworICAgICAgICAgICAgICAgIGNhc2UgMzogLy8gRnJlc25l
bFBhcmFtZXRlcnMKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IC8vIFZlY3RvcjIKKyAgICAgICAg
ICAgICAgICBjYXNlIDU6IC8vIFZlY3RvcjMKKyAgICAgICAgICAgICAgICBjYXNlIDc6IC8vIENv
bG9yIEN1cnZlcworICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIFF1YXRlcm5pb24KKyAgICAg
ICAgICAgICAgICBjYXNlIDEyOiAvLyBNYXRyaXgKKyAgICAgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25bcHJvcGVydHldID0gaW5zdGFuY2lhdGUgPyBzb3VyY2VQcm9wZXJ0eSA6IHNvdXJjZVBy
b3BlcnR5LmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBkZXN0aW5hdGlvbjsKK307CitmdW5jdGlv
biBnZXREaXJlY3RTdG9yZSh0YXJnZXQpIHsKKyAgICB2YXIgY2xhc3NLZXkgPSB0YXJnZXQuZ2V0
Q2xhc3NOYW1lKCk7CisgICAgaWYgKCFfX2RlY29yYXRvckluaXRpYWxTdG9yZVtjbGFzc0tleV0p
IHsKKyAgICAgICAgX19kZWNvcmF0b3JJbml0aWFsU3RvcmVbY2xhc3NLZXldID0ge307CisgICAg
fQorICAgIHJldHVybiBfX2RlY29yYXRvckluaXRpYWxTdG9yZVtjbGFzc0tleV07Cit9CisvKioK
KyAqIFJldHVybiB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIGZsYWdnZWQgYXMgc2VyaWFsaXphYmxl
CisgKiBAcGFyYW0gdGFyZ2V0OiBob3N0IG9iamVjdAorICovCitmdW5jdGlvbiBnZXRNZXJnZWRT
dG9yZSh0YXJnZXQpIHsKKyAgICB2YXIgY2xhc3NLZXkgPSB0YXJnZXQuZ2V0Q2xhc3NOYW1lKCk7
CisgICAgaWYgKF9fbWVyZ2VkU3RvcmVbY2xhc3NLZXldKSB7CisgICAgICAgIHJldHVybiBfX21l
cmdlZFN0b3JlW2NsYXNzS2V5XTsKKyAgICB9CisgICAgX19tZXJnZWRTdG9yZVtjbGFzc0tleV0g
PSB7fTsKKyAgICB2YXIgc3RvcmUgPSBfX21lcmdlZFN0b3JlW2NsYXNzS2V5XTsKKyAgICB2YXIg
Y3VycmVudFRhcmdldCA9IHRhcmdldDsKKyAgICB2YXIgY3VycmVudEtleSA9IGNsYXNzS2V5Owor
ICAgIHdoaWxlIChjdXJyZW50S2V5KSB7CisgICAgICAgIHZhciBpbml0aWFsU3RvcmUgPSBfX2Rl
Y29yYXRvckluaXRpYWxTdG9yZVtjdXJyZW50S2V5XTsKKyAgICAgICAgZm9yICh2YXIgcHJvcGVy
dHkgaW4gaW5pdGlhbFN0b3JlKSB7CisgICAgICAgICAgICBzdG9yZVtwcm9wZXJ0eV0gPSBpbml0
aWFsU3RvcmVbcHJvcGVydHldOworICAgICAgICB9CisgICAgICAgIHZhciBwYXJlbnRfMSA9IHZv
aWQgMDsKKyAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgcGFyZW50XzEgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3VycmVudFRhcmdldCk7CisgICAg
ICAgICAgICBpZiAoIXBhcmVudF8xLmdldENsYXNzTmFtZSkgeworICAgICAgICAgICAgICAgIGRv
bmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHBhcmVudF8xLmdldENsYXNzTmFtZSgpICE9PSBjdXJyZW50S2V5KSB7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50VGFy
Z2V0ID0gcGFyZW50XzE7CisgICAgICAgIH0gd2hpbGUgKHBhcmVudF8xKTsKKyAgICAgICAgaWYg
KGRvbmUpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRL
ZXkgPSBwYXJlbnRfMS5nZXRDbGFzc05hbWUoKTsKKyAgICAgICAgY3VycmVudFRhcmdldCA9IHBh
cmVudF8xOworICAgIH0KKyAgICByZXR1cm4gc3RvcmU7Cit9CitmdW5jdGlvbiBnZW5lcmF0ZVNl
cmlhbGl6YWJsZU1lbWJlcih0eXBlLCBzb3VyY2VOYW1lKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9u
ICh0YXJnZXQsIHByb3BlcnR5S2V5KSB7CisgICAgICAgIHZhciBjbGFzc1N0b3JlID0gZ2V0RGly
ZWN0U3RvcmUodGFyZ2V0KTsKKyAgICAgICAgaWYgKCFjbGFzc1N0b3JlW3Byb3BlcnR5S2V5XSkg
eworICAgICAgICAgICAgY2xhc3NTdG9yZVtwcm9wZXJ0eUtleV0gPSB7IHR5cGU6IHR5cGUsIHNv
dXJjZU5hbWU6IHNvdXJjZU5hbWUgfTsKKyAgICAgICAgfQorICAgIH07Cit9CitmdW5jdGlvbiBn
ZW5lcmF0ZUV4cGFuZE1lbWJlcihzZXRDYWxsYmFjaywgdGFyZ2V0S2V5KSB7CisgICAgaWYgKHRh
cmdldEtleSA9PT0gdm9pZCAwKSB7IHRhcmdldEtleSA9IG51bGw7IH0KKyAgICByZXR1cm4gZnVu
Y3Rpb24gKHRhcmdldCwgcHJvcGVydHlLZXkpIHsKKyAgICAgICAgdmFyIGtleSA9IHRhcmdldEtl
eSB8fCAoIl8iICsgcHJvcGVydHlLZXkpOworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
dGFyZ2V0LCBwcm9wZXJ0eUtleSwgeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNba2V5XTsKKyAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzW2tl
eV0gPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdGhpc1trZXldID0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgdGFyZ2V0W3NldENhbGxiYWNrXS5hcHBseSh0aGlzKTsKKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgICAgIH0pOworICAgIH07Cit9CitmdW5jdGlvbiBleHBhbmRUb1Byb3BlcnR5KGNhbGxi
YWNrLCB0YXJnZXRLZXkpIHsKKyAgICBpZiAodGFyZ2V0S2V5ID09PSB2b2lkIDApIHsgdGFyZ2V0
S2V5ID0gbnVsbDsgfQorICAgIHJldHVybiBnZW5lcmF0ZUV4cGFuZE1lbWJlcihjYWxsYmFjaywg
dGFyZ2V0S2V5KTsKK30KK2Z1bmN0aW9uIHNlcmlhbGl6ZShzb3VyY2VOYW1lKSB7CisgICAgcmV0
dXJuIGdlbmVyYXRlU2VyaWFsaXphYmxlTWVtYmVyKDAsIHNvdXJjZU5hbWUpOyAvLyB2YWx1ZSBt
ZW1iZXIKK30KK2Z1bmN0aW9uIHNlcmlhbGl6ZUFzVGV4dHVyZShzb3VyY2VOYW1lKSB7CisgICAg
cmV0dXJuIGdlbmVyYXRlU2VyaWFsaXphYmxlTWVtYmVyKDEsIHNvdXJjZU5hbWUpOyAvLyB0ZXh0
dXJlIG1lbWJlcgorfQorZnVuY3Rpb24gc2VyaWFsaXplQXNDb2xvcjMoc291cmNlTmFtZSkgewor
ICAgIHJldHVybiBnZW5lcmF0ZVNlcmlhbGl6YWJsZU1lbWJlcigyLCBzb3VyY2VOYW1lKTsgLy8g
Y29sb3IzIG1lbWJlcgorfQorZnVuY3Rpb24gc2VyaWFsaXplQXNGcmVzbmVsUGFyYW1ldGVycyhz
b3VyY2VOYW1lKSB7CisgICAgcmV0dXJuIGdlbmVyYXRlU2VyaWFsaXphYmxlTWVtYmVyKDMsIHNv
dXJjZU5hbWUpOyAvLyBmcmVzbmVsIHBhcmFtZXRlcnMgbWVtYmVyCit9CitmdW5jdGlvbiBzZXJp
YWxpemVBc1ZlY3RvcjIoc291cmNlTmFtZSkgeworICAgIHJldHVybiBnZW5lcmF0ZVNlcmlhbGl6
YWJsZU1lbWJlcig0LCBzb3VyY2VOYW1lKTsgLy8gdmVjdG9yMiBtZW1iZXIKK30KK2Z1bmN0aW9u
IHNlcmlhbGl6ZUFzVmVjdG9yMyhzb3VyY2VOYW1lKSB7CisgICAgcmV0dXJuIGdlbmVyYXRlU2Vy
aWFsaXphYmxlTWVtYmVyKDUsIHNvdXJjZU5hbWUpOyAvLyB2ZWN0b3IzIG1lbWJlcgorfQorZnVu
Y3Rpb24gc2VyaWFsaXplQXNNZXNoUmVmZXJlbmNlKHNvdXJjZU5hbWUpIHsKKyAgICByZXR1cm4g
Z2VuZXJhdGVTZXJpYWxpemFibGVNZW1iZXIoNiwgc291cmNlTmFtZSk7IC8vIG1lc2ggcmVmZXJl
bmNlIG1lbWJlcgorfQorZnVuY3Rpb24gc2VyaWFsaXplQXNDb2xvckN1cnZlcyhzb3VyY2VOYW1l
KSB7CisgICAgcmV0dXJuIGdlbmVyYXRlU2VyaWFsaXphYmxlTWVtYmVyKDcsIHNvdXJjZU5hbWUp
OyAvLyBjb2xvciBjdXJ2ZXMKK30KK2Z1bmN0aW9uIHNlcmlhbGl6ZUFzQ29sb3I0KHNvdXJjZU5h
bWUpIHsKKyAgICByZXR1cm4gZ2VuZXJhdGVTZXJpYWxpemFibGVNZW1iZXIoOCwgc291cmNlTmFt
ZSk7IC8vIGNvbG9yIDQKK30KK2Z1bmN0aW9uIHNlcmlhbGl6ZUFzSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbihzb3VyY2VOYW1lKSB7CisgICAgcmV0dXJuIGdlbmVyYXRlU2VyaWFsaXphYmxl
TWVtYmVyKDksIHNvdXJjZU5hbWUpOyAvLyBpbWFnZSBwcm9jZXNzaW5nCit9CitmdW5jdGlvbiBz
ZXJpYWxpemVBc1F1YXRlcm5pb24oc291cmNlTmFtZSkgeworICAgIHJldHVybiBnZW5lcmF0ZVNl
cmlhbGl6YWJsZU1lbWJlcigxMCwgc291cmNlTmFtZSk7IC8vIHF1YXRlcm5pb24gbWVtYmVyCit9
CitmdW5jdGlvbiBzZXJpYWxpemVBc01hdHJpeChzb3VyY2VOYW1lKSB7CisgICAgcmV0dXJuIGdl
bmVyYXRlU2VyaWFsaXphYmxlTWVtYmVyKDEyLCBzb3VyY2VOYW1lKTsgLy8gbWF0cml4IG1lbWJl
cgorfQorLyoqCisgKiBEZWNvcmF0b3IgdXNlZCB0byBkZWZpbmUgcHJvcGVydHkgdGhhdCBjYW4g
YmUgc2VyaWFsaXplZCBhcyByZWZlcmVuY2UgdG8gYSBjYW1lcmEKKyAqIEBwYXJhbSBzb3VyY2VO
YW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRlY29yYXRlCisgKi8KK2Z1
bmN0aW9uIHNlcmlhbGl6ZUFzQ2FtZXJhUmVmZXJlbmNlKHNvdXJjZU5hbWUpIHsKKyAgICByZXR1
cm4gZ2VuZXJhdGVTZXJpYWxpemFibGVNZW1iZXIoMTEsIHNvdXJjZU5hbWUpOyAvLyBjYW1lcmEg
cmVmZXJlbmNlIG1lbWJlcgorfQorLyoqCisgKiBDbGFzcyB1c2VkIHRvIGhlbHAgc2VyaWFsaXph
dGlvbiBvYmplY3RzCisgKi8KK3ZhciBTZXJpYWxpemF0aW9uSGVscGVyID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFNlcmlhbGl6YXRpb25IZWxwZXIoKSB7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIEFwcGVuZHMgdGhlIHNlcmlhbGl6ZWQgYW5pbWF0aW9ucyBm
cm9tIHRoZSBzb3VyY2UgYW5pbWF0aW9ucworICAgICAqIEBwYXJhbSBzb3VyY2UgU291cmNlIGNv
bnRhaW5pbmcgdGhlIGFuaW1hdGlvbnMKKyAgICAgKiBAcGFyYW0gZGVzdGluYXRpb24gVGFyZ2V0
IHRvIHN0b3JlIHRoZSBhbmltYXRpb25zCisgICAgICovCisgICAgU2VyaWFsaXphdGlvbkhlbHBl
ci5BcHBlbmRTZXJpYWxpemVkQW5pbWF0aW9ucyA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3RpbmF0
aW9uKSB7CisgICAgICAgIGlmIChzb3VyY2UuYW5pbWF0aW9ucykgeworICAgICAgICAgICAgZGVz
dGluYXRpb24uYW5pbWF0aW9ucyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgYW5pbWF0aW9u
SW5kZXggPSAwOyBhbmltYXRpb25JbmRleCA8IHNvdXJjZS5hbmltYXRpb25zLmxlbmd0aDsgYW5p
bWF0aW9uSW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSBzb3VyY2Uu
YW5pbWF0aW9uc1thbmltYXRpb25JbmRleF07CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb24u
YW5pbWF0aW9ucy5wdXNoKGFuaW1hdGlvbi5zZXJpYWxpemUoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFN0YXRpYyBmdW5jdGlvbiB1c2VkIHRv
IHNlcmlhbGl6ZWQgYSBzcGVjaWZpYyBlbnRpdHkKKyAgICAgKiBAcGFyYW0gZW50aXR5IGRlZmlu
ZXMgdGhlIGVudGl0eSB0byBzZXJpYWxpemUKKyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlvbk9i
amVjdCBkZWZpbmVzIHRoZSBvcHRpb25hbCB0YXJnZXQgb2JlY2p0IHdoZXJlIHNlcmlhbGl6YXRp
b24gZGF0YSB3aWxsIGJlIHN0b3JlZAorICAgICAqIEByZXR1cm5zIGEgSlNPTiBjb21wYXRpYmxl
IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIGVudGl0eQorICAg
ICAqLworICAgIFNlcmlhbGl6YXRpb25IZWxwZXIuU2VyaWFsaXplID0gZnVuY3Rpb24gKGVudGl0
eSwgc2VyaWFsaXphdGlvbk9iamVjdCkgeworICAgICAgICBpZiAoIXNlcmlhbGl6YXRpb25PYmpl
Y3QpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBUYWdzCisgICAgICAgIGlmIChfTWlzY190YWdzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlRhZ3MiXSkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50
YWdzID0gX01pc2NfdGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUYWdzIl0uR2V0
VGFncyhlbnRpdHkpOworICAgICAgICB9CisgICAgICAgIHZhciBzZXJpYWxpemVkUHJvcGVydGll
cyA9IGdldE1lcmdlZFN0b3JlKGVudGl0eSk7CisgICAgICAgIC8vIFByb3BlcnRpZXMKKyAgICAg
ICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc2VyaWFsaXplZFByb3BlcnRpZXMpIHsKKyAgICAgICAg
ICAgIHZhciBwcm9wZXJ0eURlc2NyaXB0b3IgPSBzZXJpYWxpemVkUHJvcGVydGllc1twcm9wZXJ0
eV07CisgICAgICAgICAgICB2YXIgdGFyZ2V0UHJvcGVydHlOYW1lID0gcHJvcGVydHlEZXNjcmlw
dG9yLnNvdXJjZU5hbWUgfHwgcHJvcGVydHk7CisgICAgICAgICAgICB2YXIgcHJvcGVydHlUeXBl
ID0gcHJvcGVydHlEZXNjcmlwdG9yLnR5cGU7CisgICAgICAgICAgICB2YXIgc291cmNlUHJvcGVy
dHkgPSBlbnRpdHlbcHJvcGVydHldOworICAgICAgICAgICAgaWYgKHNvdXJjZVByb3BlcnR5ICE9
PSB1bmRlZmluZWQgJiYgc291cmNlUHJvcGVydHkgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHByb3BlcnR5VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IC8v
IFZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0W3Rhcmdl
dFByb3BlcnR5TmFtZV0gPSBzb3VyY2VQcm9wZXJ0eTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIFRleHR1cmUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3RbdGFyZ2V0UHJvcGVydHlOYW1lXSA9
IHNvdXJjZVByb3BlcnR5LnNlcmlhbGl6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gQ29sb3IzCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0W3RhcmdldFByb3BlcnR5TmFtZV0gPSBzb3Vy
Y2VQcm9wZXJ0eS5hc0FycmF5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiAvLyBGcmVzbmVsUGFyYW1ldGVycworICAgICAgICAg
ICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdFt0YXJnZXRQcm9wZXJ0eU5hbWVdID0g
c291cmNlUHJvcGVydHkuc2VyaWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiAvLyBWZWN0b3IyCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0W3RhcmdldFByb3BlcnR5TmFtZV0gPSBzb3Vy
Y2VQcm9wZXJ0eS5hc0FycmF5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSA1OiAvLyBWZWN0b3IzCisgICAgICAgICAgICAgICAgICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0W3RhcmdldFByb3BlcnR5TmFtZV0gPSBzb3VyY2VQcm9w
ZXJ0eS5hc0FycmF5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSA2OiAvLyBNZXNoIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdFt0YXJnZXRQcm9wZXJ0eU5hbWVdID0gc291cmNlUHJv
cGVydHkuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSA3OiAvLyBDb2xvciBDdXJ2ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3RbdGFyZ2V0UHJvcGVydHlOYW1lXSA9IHNvdXJjZVByb3BlcnR5LnNl
cmlhbGl6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgODogLy8gQ29sb3IgNAorICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdFt0YXJnZXRQcm9wZXJ0eU5hbWVdID0gc291cmNlUHJvcGVydHkuYXNBcnJh
eSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgOTogLy8gSW1hZ2UgUHJvY2Vzc2luZworICAgICAgICAgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdFt0YXJnZXRQcm9wZXJ0eU5hbWVdID0gc291cmNlUHJvcGVydHkuc2Vy
aWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAxMDogLy8gUXVhdGVybmlvbgorICAgICAgICAgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdFt0YXJnZXRQcm9wZXJ0eU5hbWVdID0gc291cmNlUHJvcGVydHkuYXNB
cnJheSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMTE6IC8vIENhbWVyYSByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNlcmlhbGl6YXRpb25PYmplY3RbdGFyZ2V0UHJvcGVydHlOYW1lXSA9IHNvdXJjZVByb3BlcnR5
LmlkOworICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOiAvLyBNYXRyaXgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3RbdGFyZ2V0UHJvcGVydHlOYW1lXSA9IHNv
dXJjZVByb3BlcnR5LmFzQXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgZW50aXR5IGZyb20gYSBzZXJpYWxpemF0aW9uIGRhdGEgb2JqZWN0CisgICAgICogQHBh
cmFtIGNyZWF0aW9uRnVuY3Rpb24gZGVmaW5lcyBhIGZ1bmN0aW9uIHVzZWQgdG8gaW5zdGFuY2lh
dGVkIHRoZSBuZXcgZW50aXR5CisgICAgICogQHBhcmFtIHNvdXJjZSBkZWZpbmVzIHRoZSBzb3Vy
Y2Ugc2VyaWFsaXphdGlvbiBkYXRhCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhv
c3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSByb290IHVybCBm
b3IgcmVzb3VyY2VzCisgICAgICogQHJldHVybnMgYSBuZXcgZW50aXR5CisgICAgICovCisgICAg
U2VyaWFsaXphdGlvbkhlbHBlci5QYXJzZSA9IGZ1bmN0aW9uIChjcmVhdGlvbkZ1bmN0aW9uLCBz
b3VyY2UsIHNjZW5lLCByb290VXJsKSB7CisgICAgICAgIGlmIChyb290VXJsID09PSB2b2lkIDAp
IHsgcm9vdFVybCA9IG51bGw7IH0KKyAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gY3JlYXRpb25G
dW5jdGlvbigpOworICAgICAgICBpZiAoIXJvb3RVcmwpIHsKKyAgICAgICAgICAgIHJvb3RVcmwg
PSAiIjsKKyAgICAgICAgfQorICAgICAgICAvLyBUYWdzCisgICAgICAgIGlmIChfTWlzY190YWdz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRhZ3MiXSkgeworICAgICAgICAgICAgX01p
c2NfdGFnc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUYWdzIl0uQWRkVGFnc1RvKGRl
c3RpbmF0aW9uLCBzb3VyY2UudGFncyk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNsYXNzU3Rv
cmUgPSBnZXRNZXJnZWRTdG9yZShkZXN0aW5hdGlvbik7CisgICAgICAgIC8vIFByb3BlcnRpZXMK
KyAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gY2xhc3NTdG9yZSkgeworICAgICAgICAgICAg
dmFyIHByb3BlcnR5RGVzY3JpcHRvciA9IGNsYXNzU3RvcmVbcHJvcGVydHldOworICAgICAgICAg
ICAgdmFyIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW3Byb3BlcnR5RGVzY3JpcHRvci5zb3VyY2VO
YW1lIHx8IHByb3BlcnR5XTsKKyAgICAgICAgICAgIHZhciBwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0
eURlc2NyaXB0b3IudHlwZTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VQcm9wZXJ0eSAhPT0gdW5k
ZWZpbmVkICYmIHNvdXJjZVByb3BlcnR5ICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdmFy
IGRlc3QgPSBkZXN0aW5hdGlvbjsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5VHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IC8vIFZhbHVlCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0W3Byb3BlcnR5XSA9IHNvdXJjZVByb3BlcnR5OworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gVGV4dHVy
ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjZW5lKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFtwcm9wZXJ0eV0gPSBTZXJpYWxpemF0aW9uSGVscGVyLl9UZXh0dXJl
UGFyc2VyKHNvdXJjZVByb3BlcnR5LCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOiAvLyBDb2xvcjMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbcHJv
cGVydHldID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
Q29sb3IzIl0uRnJvbUFycmF5KHNvdXJjZVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IC8vIEZyZXNuZWxQYXJhbWV0
ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3Byb3BlcnR5XSA9IFNlcmlhbGl6YXRp
b25IZWxwZXIuX0ZyZXNuZWxQYXJhbWV0ZXJzUGFyc2VyKHNvdXJjZVByb3BlcnR5KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IC8v
IFZlY3RvcjIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbcHJvcGVydHldID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjIiXS5Gcm9t
QXJyYXkoc291cmNlUHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgNTogLy8gVmVjdG9yMworICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFtwcm9wZXJ0eV0gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJheShzb3VyY2VQcm9wZXJ0eSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiAv
LyBNZXNoIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjZW5lKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtwcm9wZXJ0eV0gPSBzY2VuZS5nZXRMYXN0
TWVzaEJ5SUQoc291cmNlUHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNzog
Ly8gQ29sb3IgQ3VydmVzCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3Byb3BlcnR5XSA9
IFNlcmlhbGl6YXRpb25IZWxwZXIuX0NvbG9yQ3VydmVzUGFyc2VyKHNvdXJjZVByb3BlcnR5KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDg6IC8vIENvbG9yIDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbcHJvcGVydHldID0g
X01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29sb3I0Il0u
RnJvbUFycmF5KHNvdXJjZVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEltYWdlIFByb2Nlc3NpbmcKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RbcHJvcGVydHldID0gU2VyaWFsaXphdGlvbkhlbHBlci5f
SW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvblBhcnNlcihzb3VyY2VQcm9wZXJ0eSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDog
Ly8gUXVhdGVybmlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtwcm9wZXJ0eV0gPSBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUXVhdGVybmlv
biJdLkZyb21BcnJheShzb3VyY2VQcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTogLy8gQ2FtZXJhIHJlZmVyZW5jZQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjZW5lKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFtwcm9wZXJ0eV0gPSBzY2VuZS5nZXRDYW1lcmFCeUlEKHNvdXJjZVByb3Bl
cnR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAxMjogLy8gTWF0cml4CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3Byb3BlcnR5XSA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgi
XS5Gcm9tQXJyYXkoc291cmNlUHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBkZXN0aW5hdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lcyBhbiBv
YmplY3QKKyAgICAgKiBAcGFyYW0gY3JlYXRpb25GdW5jdGlvbiBkZWZpbmVzIHRoZSBmdW5jdGlv
biB1c2VkIHRvIGluc3RhbmNpYXRlIHRoZSBuZXcgb2JqZWN0CisgICAgICogQHBhcmFtIHNvdXJj
ZSBkZWZpbmVzIHRoZSBzb3VyY2Ugb2JqZWN0CisgICAgICogQHJldHVybnMgdGhlIGNsb25lZCBv
YmplY3QKKyAgICAgKi8KKyAgICBTZXJpYWxpemF0aW9uSGVscGVyLkNsb25lID0gZnVuY3Rpb24g
KGNyZWF0aW9uRnVuY3Rpb24sIHNvdXJjZSkgeworICAgICAgICByZXR1cm4gX2NvcHlTb3VyY2Uo
Y3JlYXRpb25GdW5jdGlvbiwgc291cmNlLCBmYWxzZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBJbnN0YW5jaWF0ZXMgYSBuZXcgb2JqZWN0IGJhc2VkIG9uIGEgc291cmNlIG9uZSAoc29tZSBk
YXRhIHdpbGwgYmUgc2hhcmVkIGJldHdlZW4gYm90aCBvYmplY3QpCisgICAgICogQHBhcmFtIGNy
ZWF0aW9uRnVuY3Rpb24gZGVmaW5lcyB0aGUgZnVuY3Rpb24gdXNlZCB0byBpbnN0YW5jaWF0ZSB0
aGUgbmV3IG9iamVjdAorICAgICAqIEBwYXJhbSBzb3VyY2UgZGVmaW5lcyB0aGUgc291cmNlIG9i
amVjdAorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgb2JqZWN0CisgICAgICovCisgICAgU2VyaWFs
aXphdGlvbkhlbHBlci5JbnN0YW5jaWF0ZSA9IGZ1bmN0aW9uIChjcmVhdGlvbkZ1bmN0aW9uLCBz
b3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIF9jb3B5U291cmNlKGNyZWF0aW9uRnVuY3Rpb24sIHNv
dXJjZSwgdHJ1ZSk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFNlcmlhbGl6YXRp
b25IZWxwZXIuX0ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25QYXJzZXIgPSBmdW5jdGlvbiAo
c291cmNlUHJvcGVydHkpIHsKKyAgICAgICAgdGhyb3cgX2RldlRvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIkltYWdlUHJvY2Vzc2luZ0Nv
bmZpZ3VyYXRpb24iKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgU2VyaWFsaXph
dGlvbkhlbHBlci5fRnJlc25lbFBhcmFtZXRlcnNQYXJzZXIgPSBmdW5jdGlvbiAoc291cmNlUHJv
cGVydHkpIHsKKyAgICAgICAgdGhyb3cgX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIkZyZXNuZWxQYXJhbWV0ZXJzIik7CisgICAg
fTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFNlcmlhbGl6YXRpb25IZWxwZXIuX0NvbG9yQ3Vy
dmVzUGFyc2VyID0gZnVuY3Rpb24gKHNvdXJjZVByb3BlcnR5KSB7CisgICAgICAgIHRocm93IF9k
ZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJfRGV2VG9vbHMiXS5XYXJuSW1w
b3J0KCJDb2xvckN1cnZlcyIpOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTZXJp
YWxpemF0aW9uSGVscGVyLl9UZXh0dXJlUGFyc2VyID0gZnVuY3Rpb24gKHNvdXJjZVByb3BlcnR5
LCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICB0aHJvdyBfZGV2VG9vbHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiVGV4dHVyZSIpOworICAg
IH07CisgICAgcmV0dXJuIFNlcmlhbGl6YXRpb25IZWxwZXI7Cit9KCkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL01pc2MvZGVlcENvcGllci50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL2RlZXBDb3BpZXIudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBEZWVwQ29w
aWVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlZXBDb3BpZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIERlZXBDb3BpZXI7IH0pOwordmFyIGNsb25lVmFsdWUgPSBmdW5j
dGlvbiAoc291cmNlLCBkZXN0aW5hdGlvbk9iamVjdCkgeworICAgIGlmICghc291cmNlKSB7Cisg
ICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBpZiAoc291cmNlLmdldENsYXNzTmFtZSAm
JiBzb3VyY2UuZ2V0Q2xhc3NOYW1lKCkgPT09ICJNZXNoIikgeworICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9CisgICAgaWYgKHNvdXJjZS5nZXRDbGFzc05hbWUgJiYgc291cmNlLmdldENsYXNz
TmFtZSgpID09PSAiU3ViTWVzaCIpIHsKKyAgICAgICAgcmV0dXJuIHNvdXJjZS5jbG9uZShkZXN0
aW5hdGlvbk9iamVjdCk7CisgICAgfQorICAgIGVsc2UgaWYgKHNvdXJjZS5jbG9uZSkgeworICAg
ICAgICByZXR1cm4gc291cmNlLmNsb25lKCk7CisgICAgfQorICAgIHJldHVybiBudWxsOworfTsK
Ky8qKgorICogQ2xhc3MgY29udGFpbmluZyBhIHNldCBvZiBzdGF0aWMgdXRpbGl0aWVzIGZ1bmN0
aW9ucyBmb3IgZGVlcCBjb3B5LgorICovCit2YXIgRGVlcENvcGllciA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBEZWVwQ29waWVyKCkgeworICAgIH0KKyAgICAv
KioKKyAgICAgKiBUcmllcyB0byBjb3B5IGFuIG9iamVjdCBieSBkdXBsaWNhdGluZyBldmVyeSBw
cm9wZXJ0eQorICAgICAqIEBwYXJhbSBzb3VyY2UgZGVmaW5lcyB0aGUgc291cmNlIG9iamVjdAor
ICAgICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBkZWZpbmVzIHRoZSB0YXJnZXQgb2JqZWN0CisgICAg
ICogQHBhcmFtIGRvTm90Q29weUxpc3QgZGVmaW5lcyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0byBh
dm9pZAorICAgICAqIEBwYXJhbSBtdXN0Q29weUxpc3QgZGVmaW5lcyBhIGxpc3Qgb2YgcHJvcGVy
dGllcyB0byBjb3B5IChldmVuIGlmIHRoZXkgc3RhcnQgd2l0aCBfKQorICAgICAqLworICAgIERl
ZXBDb3BpZXIuRGVlcENvcHkgPSBmdW5jdGlvbiAoc291cmNlLCBkZXN0aW5hdGlvbiwgZG9Ob3RD
b3B5TGlzdCwgbXVzdENvcHlMaXN0KSB7CisgICAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNl
KSB7CisgICAgICAgICAgICBpZiAocHJvcFswXSA9PT0gIl8iICYmICghbXVzdENvcHlMaXN0IHx8
IG11c3RDb3B5TGlzdC5pbmRleE9mKHByb3ApID09PSAtMSkpIHsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkb05vdENvcHlMaXN0ICYm
IGRvTm90Q29weUxpc3QuaW5kZXhPZihwcm9wKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBzb3VyY2VWYWx1ZSA9IHNv
dXJjZVtwcm9wXTsKKyAgICAgICAgICAgIHZhciB0eXBlT2ZTb3VyY2VWYWx1ZSA9IHR5cGVvZiBz
b3VyY2VWYWx1ZTsKKyAgICAgICAgICAgIGlmICh0eXBlT2ZTb3VyY2VWYWx1ZSA9PT0gImZ1bmN0
aW9uIikgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZU9mU291cmNlVmFsdWUgPT09ICJv
YmplY3QiKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VWYWx1ZSBpbnN0YW5jZW9m
IEFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbltwcm9wXSA9IFtd
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVZhbHVlLmxlbmd0aCA+IDApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVZhbHVlWzBdID09
ICJvYmplY3QiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlu
ZGV4ID0gMDsgaW5kZXggPCBzb3VyY2VWYWx1ZS5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbG9uZWRWYWx1ZSA9IGNsb25lVmFsdWUo
c291cmNlVmFsdWVbaW5kZXhdLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZGVzdGluYXRpb25bcHJvcF0uaW5kZXhPZihjbG9uZWRWYWx1ZSkg
PT09IC0xKSB7IC8vIFRlc3QgaWYgYXV0byBpbmplY3Qgd2FzIG5vdCBkb25lCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bcHJvcF0ucHVzaChjbG9u
ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uW3Byb3BdID0gc291cmNlVmFsdWUuc2xpY2UoMCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bcHJvcF0gPSBjbG9uZVZhbHVlKHNvdXJjZVZh
bHVlLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uW3Byb3BdID0gc291cmNlVmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAvLyBKdXN0IGlnbm9y
ZSBlcnJvciAoaXQgY291bGQgYmUgYmVjYXVzZSBvZiBhIHJlYWQtb25seSBwcm9wZXJ0eSkKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIERlZXBDb3BpZXI7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2MvZGVmZXJyZWQudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvZGVmZXJyZWQudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogRGVmZXJyZWQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVmZXJy
ZWQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERlZmVycmVkOyB9KTsKKy8qKgorICogV3JhcHBlciBj
bGFzcyBmb3IgcHJvbWlzZSB3aXRoIGV4dGVybmFsIHJlc29sdmUgYW5kIHJlamVjdC4KKyAqLwor
dmFyIERlZmVycmVkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAg
ICAqIENvbnN0cnVjdG9yIGZvciB0aGlzIGRlZmVycmVkIG9iamVjdC4KKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBEZWZlcnJlZCgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
dGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewor
ICAgICAgICAgICAgX3RoaXMuX3Jlc29sdmUgPSByZXNvbHZlOworICAgICAgICAgICAgX3RoaXMu
X3JlamVjdCA9IHJlamVjdDsKKyAgICAgICAgfSk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShEZWZlcnJlZC5wcm90b3R5cGUsICJyZXNvbHZlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogVGhlIHJlc29sdmUgbWV0aG9kIG9mIHRoZSBwcm9taXNlIGFzc29jaWF0ZWQgd2l0
aCB0aGlzIGRlZmVycmVkIG9iamVjdC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmU7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZlcnJlZC5wcm90b3R5cGUsICJyZWpl
Y3QiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgcmVqZWN0IG1ldGhvZCBvZiB0aGUg
cHJvbWlzZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWZlcnJlZCBvYmplY3QuCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9y
ZWplY3Q7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIHJldHVybiBEZWZlcnJlZDsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9kZXZUb29scy50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlzYy9kZXZUb29scy50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBfRGV2
VG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0RldlRvb2xzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfRGV2VG9vbHM7IH0pOworLyoqIEBoaWRkZW4gKi8KK3ZhciBf
RGV2VG9vbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gX0Rl
dlRvb2xzKCkgeworICAgIH0KKyAgICBfRGV2VG9vbHMuV2FybkltcG9ydCA9IGZ1bmN0aW9uIChu
YW1lKSB7CisgICAgICAgIHJldHVybiBuYW1lICsgIiBuZWVkcyB0byBiZSBpbXBvcnRlZCBiZWZv
cmUgYXMgaXQgY29udGFpbnMgYSBzaWRlLWVmZmVjdCByZXF1aXJlZCBieSB5b3VyIGNvZGUuIjsK
KyAgICB9OworICAgIHJldHVybiBfRGV2VG9vbHM7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL01pc2MvZG9tTWFuYWdlbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL2RvbU1hbmFnZW1lbnQudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBE
b21NYW5hZ2VtZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRvbU1h
bmFnZW1lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERvbU1hbmFnZW1lbnQ7IH0pOworLyoqCisg
KiBTZXRzIG9mIGhlbHBlcnMgZGVhbGluZyB3aXRoIHRoZSBET00gYW5kIHNvbWUgb2YgdGhlIHJl
Y3VycmVudCBmdW5jdGlvbnMgbmVlZGVkIGluCisgKiBCYWJ5bG9uLmpzCisgKi8KK3ZhciBEb21N
YW5hZ2VtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIERv
bU1hbmFnZW1lbnQoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIENoZWNrcyBpZiB0aGUgd2lu
ZG93IG9iamVjdCBleGlzdHMKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB3aW5kb3cgb2Jq
ZWN0IGV4aXN0cworICAgICAqLworICAgIERvbU1hbmFnZW1lbnQuSXNXaW5kb3dPYmplY3RFeGlz
dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICh0eXBlb2Ygd2luZG93KSAhPT0gInVu
ZGVmaW5lZCI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIG5hdmlnYXRv
ciBvYmplY3QgZXhpc3RzCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgbmF2aWdhdG9yIG9i
amVjdCBleGlzdHMKKyAgICAgKi8KKyAgICBEb21NYW5hZ2VtZW50LklzTmF2aWdhdG9yQXZhaWxh
YmxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gKHR5cGVvZiBuYXZpZ2F0b3IpICE9
PSAidW5kZWZpbmVkIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEV4dHJhY3RzIHRleHQgY29u
dGVudCBmcm9tIGEgRE9NIGVsZW1lbnQgaGllcmFyY2h5CisgICAgICogQHBhcmFtIGVsZW1lbnQg
ZGVmaW5lcyB0aGUgcm9vdCBlbGVtZW50CisgICAgICogQHJldHVybnMgYSBzdHJpbmcKKyAgICAg
Ki8KKyAgICBEb21NYW5hZ2VtZW50LkdldERPTVRleHRDb250ZW50ID0gZnVuY3Rpb24gKGVsZW1l
bnQpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9ICIiOworICAgICAgICB2YXIgY2hpbGQgPSBlbGVt
ZW50LmZpcnN0Q2hpbGQ7CisgICAgICAgIHdoaWxlIChjaGlsZCkgeworICAgICAgICAgICAgaWYg
KGNoaWxkLm5vZGVUeXBlID09PSAzKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNoaWxk
LnRleHRDb250ZW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hpbGQgPSAoY2hpbGQu
bmV4dFNpYmxpbmcpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsK
KyAgICByZXR1cm4gRG9tTWFuYWdlbWVudDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWlzYy9lbnZpcm9ubWVudFRleHR1cmVUb29scy50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlzYy9lbnZpcm9ubWVu
dFRleHR1cmVUb29scy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBFbnZpcm9ubWVudFRleHR1cmVUb29s
cyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFbnZpcm9ubWVudFRleHR1
cmVUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRW52aXJvbm1lbnRUZXh0dXJlVG9vbHM7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90b29scyAqLyAiLi9NaXNjL3Rvb2xz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRo
cy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5zY2FsYXIgKi8gIi4v
TWF0aHMvbWF0aC5zY2FsYXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
c3BoZXJpY2FsUG9seW5vbWlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvc3BoZXJpY2FsUG9seW5vbWlhbCAqLyAiLi9NYXRo
cy9zcGhlcmljYWxQb2x5bm9taWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9pbnRl
cm5hbFRleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL2ludGVybmFsVGV4dHVyZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfYmFzZVRleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGVyaWFscy9UZXh0dXJlcy9iYXNlVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVy
ZXMvYmFzZVRleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9Q
b3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3Mu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2Vy
ICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2lu
ZXNfRXh0ZW5zaW9uc19lbmdpbmVfcmVuZGVyVGFyZ2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9FeHRlbnNpb25zL2Vu
Z2luZS5yZW5kZXJUYXJnZXQgKi8gIi4vRW5naW5lcy9FeHRlbnNpb25zL2VuZ2luZS5yZW5kZXJU
YXJnZXQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19yZ2JkRW5jb2Rl
X2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vU2hhZGVycy9yZ2JkRW5jb2RlLmZyYWdtZW50ICovICIuL1NoYWRlcnMvcmdi
ZEVuY29kZS5mcmFnbWVudC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJz
X3JnYmREZWNvZGVfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL3JnYmREZWNvZGUuZnJhZ21lbnQgKi8gIi4v
U2hhZGVycy9yZ2JkRGVjb2RlLmZyYWdtZW50LnRzIik7CisKKworCisKKworCisKKworCisKKwor
CisKKy8qKgorICogU2V0cyBvZiBoZWxwZXJzIGFkZHJlc3NpbmcgdGhlIHNlcmlhbGl6YXRpb24g
YW5kIGRlc2VyaWFsaXphdGlvbiBvZiBlbnZpcm9ubWVudCB0ZXh0dXJlCisgKiBzdG9yZWQgaW4g
YSBCYWJ5bG9uSlMgZW52IGZpbGUuCisgKiBUaG9zZSBmaWxlcyBhcmUgdXN1YWxseSBzdG9yZWQg
YXMgLmVudiBmaWxlcy4KKyAqLwordmFyIEVudmlyb25tZW50VGV4dHVyZVRvb2xzID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEVudmlyb25tZW50VGV4dHVyZVRv
b2xzKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBlbnZpcm9ubWVudCBpbmZv
IGZyb20gYW4gZW52IGZpbGUuCisgICAgICogQHBhcmFtIGRhdGEgVGhlIGFycmF5IGJ1ZmZlciBj
b250YWluaW5nIHRoZSAuZW52IGJ5dGVzLgorICAgICAqIEByZXR1cm5zIHRoZSBlbnZpcm9ubWVu
dCBmaWxlIGluZm8gKHRoZSBqc29uIGhlYWRlcikgaWYgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KKyAg
ICAgKi8KKyAgICBFbnZpcm9ubWVudFRleHR1cmVUb29scy5HZXRFbnZJbmZvID0gZnVuY3Rpb24g
KGRhdGEpIHsKKyAgICAgICAgdmFyIGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGRhdGEpOworICAg
ICAgICB2YXIgcG9zID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBFbnZpcm9ubWVu
dFRleHR1cmVUb29scy5fTWFnaWNCeXRlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYg
KGRhdGFWaWV3LmdldFVpbnQ4KHBvcysrKSAhPT0gRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMuX01h
Z2ljQnl0ZXNbaV0pIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siTG9nZ2VyIl0uRXJyb3IoJ05vdCBhIGJhYnlsb24gZW52aXJvbm1l
bnQgbWFwJyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gUmVhZCBqc29uIG1hbmlmZXN0IC0gY29sbGVjdCBjaGFyYWN0
ZXJzIHVwIHRvIG51bGwgdGVybWluYXRvcgorICAgICAgICB2YXIgbWFuaWZlc3RTdHJpbmcgPSAn
JzsKKyAgICAgICAgdmFyIGNoYXJDb2RlID0gMHgwMDsKKyAgICAgICAgd2hpbGUgKChjaGFyQ29k
ZSA9IGRhdGFWaWV3LmdldFVpbnQ4KHBvcysrKSkpIHsKKyAgICAgICAgICAgIG1hbmlmZXN0U3Ry
aW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpOworICAgICAgICB9CisgICAgICAg
IHZhciBtYW5pZmVzdCA9IEpTT04ucGFyc2UobWFuaWZlc3RTdHJpbmcpOworICAgICAgICBpZiAo
bWFuaWZlc3Quc3BlY3VsYXIpIHsKKyAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgaGVhZGVyIHdp
dGggdGhlIHBvc2l0aW9uIG9mIHRoZSBwYXlsb2FkLgorICAgICAgICAgICAgbWFuaWZlc3Quc3Bl
Y3VsYXIuc3BlY3VsYXJEYXRhUG9zaXRpb24gPSBwb3M7CisgICAgICAgICAgICAvLyBGYWxsYmFj
ayB0byAwLjggZXhhY3RseSBpZiBsb2RHZW5lcmF0aW9uU2NhbGUgaXMgbm90IGRlZmluZWQgZm9y
IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgICAgICAgICAgICBtYW5pZmVzdC5zcGVjdWxhci5s
b2RHZW5lcmF0aW9uU2NhbGUgPSBtYW5pZmVzdC5zcGVjdWxhci5sb2RHZW5lcmF0aW9uU2NhbGUg
fHwgMC44OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYW5pZmVzdDsKKyAgICB9OworICAg
IC8qKgorICAgICAqIENyZWF0ZXMgYW4gZW52aXJvbm1lbnQgdGV4dHVyZSBmcm9tIGEgbG9hZGVk
IGN1YmUgdGV4dHVyZS4KKyAgICAgKiBAcGFyYW0gdGV4dHVyZSBkZWZpbmVzIHRoZSBjdWJlIHRl
eHR1cmUgdG8gY29udmVydCBpbiBlbnYgZmlsZQorICAgICAqIEByZXR1cm4gYSBwcm9taXNlIGNv
bnRhaW5pbmcgdGhlIGVudmlyb25tZW50IGRhdGEgaWYgc3VjY2VzZnVsbC4KKyAgICAgKi8KKyAg
ICBFbnZpcm9ubWVudFRleHR1cmVUb29scy5DcmVhdGVFbnZUZXh0dXJlQXN5bmMgPSBmdW5jdGlv
biAodGV4dHVyZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgaW50
ZXJuYWxUZXh0dXJlID0gdGV4dHVyZS5nZXRJbnRlcm5hbFRleHR1cmUoKTsKKyAgICAgICAgaWYg
KCFpbnRlcm5hbFRleHR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgi
VGhlIGN1YmUgdGV4dHVyZSBpcyBpbnZhbGlkLiIpOworICAgICAgICB9CisgICAgICAgIGlmICgh
dGV4dHVyZS5fcHJlZmlsdGVyZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVj
dCgiVGhlIGN1YmUgdGV4dHVyZSBpcyBpbnZhbGlkIChub3QgcHJlZmlsdGVyZWQpLiIpOworICAg
ICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSBpbnRlcm5hbFRleHR1cmUuZ2V0RW5naW5lKCk7
CisgICAgICAgIGlmIChlbmdpbmUgJiYgZW5naW5lLnByZW11bHRpcGxpZWRBbHBoYSkgeworICAg
ICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJFbnYgdGV4dHVyZSBjYW4gb25seSBiZSBj
cmVhdGVkIHdoZW4gdGhlIGVuZ2luZSBpcyBjcmVhdGVkIHdpdGggdGhlIHByZW11bHRpcGxpZWRB
bHBoYSBvcHRpb24gc2V0IHRvIGZhbHNlLiIpOworICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0
dXJlLnRleHR1cmVUeXBlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKSB7CisgICAg
ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoIlRoZSBjdWJlIHRleHR1cmUgc2hvdWxkIGFs
bG93IEhEUiAoRnVsbCBGbG9hdCBvciBIYWxmIEZsb2F0KS4iKTsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgY2FudmFzID0gZW5naW5lLmdldFJlbmRlcmluZ0NhbnZhcygpOworICAgICAgICBpZiAo
IWNhbnZhcykgeworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJFbnYgdGV4dHVy
ZSBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGVuZ2luZSBpcyBhc3NvY2lhdGVkIHRvIGEg
Y2FudmFzLiIpOworICAgICAgICB9CisgICAgICAgIHZhciB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVz
X2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5URVhU
VVJFVFlQRV9GTE9BVDsKKyAgICAgICAgaWYgKCFlbmdpbmUuZ2V0Q2FwcygpLnRleHR1cmVGbG9h
dFJlbmRlcikgeworICAgICAgICAgICAgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfSEFM
Rl9GTE9BVDsKKyAgICAgICAgICAgIGlmICghZW5naW5lLmdldENhcHMoKS50ZXh0dXJlSGFsZkZs
b2F0UmVuZGVyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJFbnYg
dGV4dHVyZSBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgaGFs
ZiBmbG9hdCBvciBmdWxsIGZsb2F0IHJlbmRlcmluZy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB2YXIgY3ViZVdpZHRoID0gaW50ZXJuYWxUZXh0dXJlLndpZHRoOworICAg
ICAgICB2YXIgaG9zdGluZ1NjZW5lID0gbmV3IF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJTY2VuZSJdKGVuZ2luZSk7CisgICAgICAgIHZhciBzcGVjdWxhclRleHR1cmVzID0g
e307CisgICAgICAgIHZhciBwcm9taXNlcyA9IFtdOworICAgICAgICAvLyBSZWFkIGFuZCBjb2xs
ZWN0IGFsbCBtaXBtYXBzIGRhdGEgZnJvbSB0aGUgY3ViZS4KKyAgICAgICAgdmFyIG1pcG1hcHND
b3VudCA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJT
Y2FsYXIiXS5Mb2cyKGludGVybmFsVGV4dHVyZS53aWR0aCk7CisgICAgICAgIG1pcG1hcHNDb3Vu
dCA9IE1hdGgucm91bmQobWlwbWFwc0NvdW50KTsKKyAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5j
dGlvbiAoaSkgeworICAgICAgICAgICAgdmFyIGZhY2VXaWR0aCA9IE1hdGgucG93KDIsIG1pcG1h
cHNDb3VudCAtIGkpOworICAgICAgICAgICAgdmFyIF9sb29wXzIgPSBmdW5jdGlvbiAoZmFjZSkg
eworICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGV4dHVyZS5yZWFkUGl4ZWxzKGZhY2UsIGkp
OworICAgICAgICAgICAgICAgIC8vIENyZWF0ZXMgYSB0ZW1wIHRleHR1cmUgd2l0aCB0aGUgZmFj
ZSBkYXRhLgorICAgICAgICAgICAgICAgIHZhciB0ZW1wVGV4dHVyZSA9IGVuZ2luZS5jcmVhdGVS
YXdUZXh0dXJlKGRhdGEsIGZhY2VXaWR0aCwgZmFjZVdpZHRoLCBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9S
R0JBLCBmYWxzZSwgZmFsc2UsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1RfU0FNUExJTkdNT0RFLCBudWxs
LCB0ZXh0dXJlVHlwZSk7CisgICAgICAgICAgICAgICAgLy8gQW5kIHJnYmRFbmNvZGUgdGhlbS4K
KyAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNv
bHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJnYmRQb3N0UHJvY2VzcyA9
IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJQb3N0UHJvY2VzcyJdKCJyZ2JkRW5jb2RlIiwgInJnYmRFbmNvZGUiLCBudWxsLCBudWxs
LCAxLCBudWxsLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siQ29uc3RhbnRzIl0uVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5HTU9ERSwgZW5naW5lLCBmYWxz
ZSwgdW5kZWZpbmVkLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5ULCB1bmRlZmluZWQsIG51
bGwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmdiZFBvc3RQcm9jZXNzLmdldEVmZmVj
dCgpLmV4ZWN1dGVXaGVuQ29tcGlsZWQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmdiZFBvc3RQcm9jZXNzLm9uQXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0Ll9iaW5kVGV4dHVyZSgidGV4dHVyZVNhbXBs
ZXIiLCB0ZW1wVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQXMgdGhlIHByb2Nlc3MgbmVlZHMgdG8gaGFwcGVuIG9uIHRoZSBt
YWluIGNhbnZhcywga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBzaXplCisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgY3VycmVudFcgPSBlbmdpbmUuZ2V0UmVuZGVyV2lkdGgoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SCA9IGVuZ2luZS5nZXRSZW5kZXJIZWlnaHQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZGVzaXJlZCBzaXplIGZvciB0
aGUgdGV4dHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lLnNldFNpemUoZmFjZVdp
ZHRoLCBmYWNlV2lkdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgaG9zdGluZ1NjZW5lLnBv
c3RQcm9jZXNzTWFuYWdlci5kaXJlY3RSZW5kZXIoW3JnYmRQb3N0UHJvY2Vzc10sIG51bGwpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhZGluZyBkYXRhcyBmcm9tIFdlYkdMCisgICAg
ICAgICAgICAgICAgICAgICAgICBfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VG9vbHMiXS5Ub0Jsb2IoY2FudmFzLCBmdW5jdGlvbiAoYmxvYikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChldmVudCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJyYXlCdWZmZXIgPSBldmVu
dC50YXJnZXQucmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
clRleHR1cmVzW2kgKiA2ICsgZmFjZV0gPSBhcnJheUJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZl
cihibG9iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gUmVhcHBseSB0aGUgcHJldmlvdXMgY2FudmFzIHNpemUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZ2luZS5zZXRTaXplKGN1cnJlbnRXLCBjdXJyZW50SCk7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHByb21p
c2VzLnB1c2gocHJvbWlzZSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgLy8gQWxsIGZh
Y2VzIG9mIHRoZSBjdWJlLgorICAgICAgICAgICAgZm9yICh2YXIgZmFjZSA9IDA7IGZhY2UgPCA2
OyBmYWNlKyspIHsKKyAgICAgICAgICAgICAgICBfbG9vcF8yKGZhY2UpOworICAgICAgICAgICAg
fQorICAgICAgICB9OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBtaXBtYXBzQ291bnQ7
IGkrKykgeworICAgICAgICAgICAgX2xvb3BfMShpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBP
bmNlIGFsbCB0aGUgdGV4dHVyZXMgaGF2ZXMgYmVlbiBjb2xsZWN0ZWQgYXMgUkdCRCBzdG9yZWQg
aW4gUE5HcworICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgLy8gV2UgY2FuIGRlbGV0ZSB0aGUgaG9zdGluZyBzY2VuZSBr
ZWVwaW5nIHRyYWNrIG9mIGFsbCB0aGUgY3JlYXRpb24gb2JqZWN0cworICAgICAgICAgICAgaG9z
dGluZ1NjZW5lLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZXMgdGhlIGpzb24gaGVh
ZGVyIGZvciB0aGUgZW52IHRleHR1cmUKKyAgICAgICAgICAgIHZhciBpbmZvID0geworICAgICAg
ICAgICAgICAgIHZlcnNpb246IDEsCisgICAgICAgICAgICAgICAgd2lkdGg6IGN1YmVXaWR0aCwK
KyAgICAgICAgICAgICAgICBpcnJhZGlhbmNlOiBfdGhpcy5fQ3JlYXRlRW52VGV4dHVyZUlycmFk
aWFuY2UodGV4dHVyZSksCisgICAgICAgICAgICAgICAgc3BlY3VsYXI6IHsKKyAgICAgICAgICAg
ICAgICAgICAgbWlwbWFwczogW10sCisgICAgICAgICAgICAgICAgICAgIGxvZEdlbmVyYXRpb25T
Y2FsZTogdGV4dHVyZS5sb2RHZW5lcmF0aW9uU2NhbGUKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgLy8gU2V0cyB0aGUgc3BlY3VsYXIgaW1hZ2UgZGF0YSBp
bmZvcm1hdGlvbgorICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDw9IG1pcG1hcHNDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGJ5dGVMZW5ndGggPSBzcGVjdWxhclRleHR1cmVzW2kgKiA2ICsgZmFjZV0uYnl0ZUxl
bmd0aDsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5zcGVjdWxhci5taXBtYXBzLnB1c2goewor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBieXRlTGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBieXRlTGVuZ3RoOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEVuY29kZSB0aGUgSlNPTiBhcyBh
biBhcnJheSBidWZmZXIKKyAgICAgICAgICAgIHZhciBpbmZvU3RyaW5nID0gSlNPTi5zdHJpbmdp
ZnkoaW5mbyk7CisgICAgICAgICAgICB2YXIgaW5mb0J1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihp
bmZvU3RyaW5nLmxlbmd0aCArIDEpOworICAgICAgICAgICAgdmFyIGluZm9WaWV3ID0gbmV3IFVp
bnQ4QXJyYXkoaW5mb0J1ZmZlcik7IC8vIExpbWl0ZWQgdG8gYXNjaWkgc3Vic2V0IG1hdGNoaW5n
IHVuaWNvZGUuCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgc3RyTGVuID0gaW5mb1N0cmlu
Zy5sZW5ndGg7IGkgPCBzdHJMZW47IGkrKykgeworICAgICAgICAgICAgICAgIGluZm9WaWV3W2ld
ID0gaW5mb1N0cmluZy5jaGFyQ29kZUF0KGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Ly8gRW5kcyB1cCB3aXRoIGEgbnVsbCB0ZXJtaW5hdG9yIGZvciBlYXNpZXIgcGFyc2luZworICAg
ICAgICAgICAgaW5mb1ZpZXdbaW5mb1N0cmluZy5sZW5ndGhdID0gMHgwMDsKKyAgICAgICAgICAg
IC8vIENvbXB1dGVzIHRoZSBmaW5hbCByZXF1aXJlZCBzaXplIGFuZCBjcmVhdGVzIHRoZSBzdG9y
YWdlCisgICAgICAgICAgICB2YXIgdG90YWxTaXplID0gRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMu
X01hZ2ljQnl0ZXMubGVuZ3RoICsgcG9zaXRpb24gKyBpbmZvQnVmZmVyLmJ5dGVMZW5ndGg7Cisg
ICAgICAgICAgICB2YXIgZmluYWxCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodG90YWxTaXplKTsK
KyAgICAgICAgICAgIHZhciBmaW5hbEJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheShmaW5hbEJ1
ZmZlcik7CisgICAgICAgICAgICB2YXIgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoZmluYWxCdWZm
ZXIpOworICAgICAgICAgICAgLy8gQ29weSB0aGUgbWFnaWMgYnl0ZXMgaWRlbnRpZnlpbmcgdGhl
IGZpbGUgaW4KKyAgICAgICAgICAgIHZhciBwb3MgPSAwOworICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBFbnZpcm9ubWVudFRleHR1cmVUb29scy5fTWFnaWNCeXRlcy5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgIGRhdGFWaWV3LnNldFVpbnQ4KHBvcysrLCBFbnZpcm9ubWVu
dFRleHR1cmVUb29scy5fTWFnaWNCeXRlc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBBZGQgdGhlIGpzb24gaW5mbworICAgICAgICAgICAgZmluYWxCdWZmZXJWaWV3LnNldChu
ZXcgVWludDhBcnJheShpbmZvQnVmZmVyKSwgcG9zKTsKKyAgICAgICAgICAgIHBvcyArPSBpbmZv
QnVmZmVyLmJ5dGVMZW5ndGg7CisgICAgICAgICAgICAvLyBGaW5hbGx5IGluc2VydHMgdGhlIHRl
eHR1cmUgZGF0YQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbWlwbWFwc0NvdW50
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBmYWNlID0gMDsgZmFjZSA8IDY7IGZh
Y2UrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YUJ1ZmZlciA9IHNwZWN1bGFyVGV4
dHVyZXNbaSAqIDYgKyBmYWNlXTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWxCdWZmZXJWaWV3
LnNldChuZXcgVWludDhBcnJheShkYXRhQnVmZmVyKSwgcG9zKTsKKyAgICAgICAgICAgICAgICAg
ICAgcG9zICs9IGRhdGFCdWZmZXIuYnl0ZUxlbmd0aDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBWb2lsYQorICAgICAgICAgICAgcmV0dXJuIGZpbmFs
QnVmZmVyOworICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBK
U09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGhlcmljYWwgZGF0YS4KKyAgICAgKiBAcGFyYW0g
dGV4dHVyZSBkZWZpbmVzIHRoZSB0ZXh0dXJlIGNvbnRhaW5pbmcgdGhlIHBvbHlub21pYWxzCisg
ICAgICogQHJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BoZXJpY2FsIGlu
Zm8KKyAgICAgKi8KKyAgICBFbnZpcm9ubWVudFRleHR1cmVUb29scy5fQ3JlYXRlRW52VGV4dHVy
ZUlycmFkaWFuY2UgPSBmdW5jdGlvbiAodGV4dHVyZSkgeworICAgICAgICB2YXIgcG9seW5taWFs
cyA9IHRleHR1cmUuc3BoZXJpY2FsUG9seW5vbWlhbDsKKyAgICAgICAgaWYgKHBvbHlubWlhbHMg
PT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIHg6IFtwb2x5bm1pYWxzLngueCwgcG9seW5taWFscy54Lnks
IHBvbHlubWlhbHMueC56XSwKKyAgICAgICAgICAgIHk6IFtwb2x5bm1pYWxzLnkueCwgcG9seW5t
aWFscy55LnksIHBvbHlubWlhbHMueS56XSwKKyAgICAgICAgICAgIHo6IFtwb2x5bm1pYWxzLnou
eCwgcG9seW5taWFscy56LnksIHBvbHlubWlhbHMuei56XSwKKyAgICAgICAgICAgIHh4OiBbcG9s
eW5taWFscy54eC54LCBwb2x5bm1pYWxzLnh4LnksIHBvbHlubWlhbHMueHguel0sCisgICAgICAg
ICAgICB5eTogW3BvbHlubWlhbHMueXkueCwgcG9seW5taWFscy55eS55LCBwb2x5bm1pYWxzLnl5
LnpdLAorICAgICAgICAgICAgeno6IFtwb2x5bm1pYWxzLnp6LngsIHBvbHlubWlhbHMuenoueSwg
cG9seW5taWFscy56ei56XSwKKyAgICAgICAgICAgIHl6OiBbcG9seW5taWFscy55ei54LCBwb2x5
bm1pYWxzLnl6LnksIHBvbHlubWlhbHMueXouel0sCisgICAgICAgICAgICB6eDogW3BvbHlubWlh
bHMuengueCwgcG9seW5taWFscy56eC55LCBwb2x5bm1pYWxzLnp4LnpdLAorICAgICAgICAgICAg
eHk6IFtwb2x5bm1pYWxzLnh5LngsIHBvbHlubWlhbHMueHkueSwgcG9seW5taWFscy54eS56XQor
ICAgICAgICB9OworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0aGUgQXJyYXlCdWZm
ZXJWaWV3cyB1c2VkIGZvciBpbml0aWFsaXppbmcgZW52aXJvbm1lbnQgdGV4dHVyZSBpbWFnZSBk
YXRhLgorICAgICAqIEBwYXJhbSBhcnJheUJ1ZmZlciB0aGUgdW5kZXJseWluZyBBcnJheUJ1ZmZl
ciB0byB3aGljaCB0aGUgdmlld3MgcmVmZXIKKyAgICAgKiBAcGFyYW0gaW5mbyBwYXJhbWV0ZXJz
IHRoYXQgZGV0ZXJtaW5lIHdoYXQgdmlld3Mgd2lsbCBiZSBjcmVhdGVkIGZvciBhY2Nlc3Npbmcg
dGhlIHVuZGVybHlpbmcgYnVmZmVyCisgICAgICogQHJldHVybiB0aGUgdmlld3MgZGVzY3JpYmVk
IGJ5IGluZm8gcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBidWZmZXIKKyAgICAg
Ki8KKyAgICBFbnZpcm9ubWVudFRleHR1cmVUb29scy5DcmVhdGVJbWFnZURhdGFBcnJheUJ1ZmZl
clZpZXdzID0gZnVuY3Rpb24gKGFycmF5QnVmZmVyLCBpbmZvKSB7CisgICAgICAgIGlmIChpbmZv
LnZlcnNpb24gIT09IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0
ZWQgYmFieWxvbiBlbnZpcm9ubWVudCBtYXAgdmVyc2lvbiBcIiIgKyBpbmZvLnZlcnNpb24gKyAi
XCIiKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgc3BlY3VsYXJJbmZvID0gaW5mby5zcGVjdWxh
cjsKKyAgICAgICAgLy8gRG91YmxlIGNoZWNrcyB0aGUgZW5jbG9zZWQgaW5mbworICAgICAgICB2
YXIgbWlwbWFwc0NvdW50ID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlNjYWxhciJdLkxvZzIoaW5mby53aWR0aCk7CisgICAgICAgIG1pcG1hcHNDb3Vu
dCA9IE1hdGgucm91bmQobWlwbWFwc0NvdW50KSArIDE7CisgICAgICAgIGlmIChzcGVjdWxhcklu
Zm8ubWlwbWFwcy5sZW5ndGggIT09IDYgKiBtaXBtYXBzQ291bnQpIHsKKyAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3BlY3VsYXIgbWlwbWFwcyBudW1iZXIgXCIiICsg
c3BlY3VsYXJJbmZvLm1pcG1hcHMubGVuZ3RoICsgIlwiIik7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGltYWdlRGF0YSA9IG5ldyBBcnJheShtaXBtYXBzQ291bnQpOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1pcG1hcHNDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBpbWFnZURhdGFb
aV0gPSBuZXcgQXJyYXkoNik7CisgICAgICAgICAgICBmb3IgKHZhciBmYWNlID0gMDsgZmFjZSA8
IDY7IGZhY2UrKykgeworICAgICAgICAgICAgICAgIHZhciBpbWFnZUluZm8gPSBzcGVjdWxhcklu
Zm8ubWlwbWFwc1tpICogNiArIGZhY2VdOworICAgICAgICAgICAgICAgIGltYWdlRGF0YVtpXVtm
YWNlXSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCBzcGVjdWxhckluZm8uc3BlY3VsYXJE
YXRhUG9zaXRpb24gKyBpbWFnZUluZm8ucG9zaXRpb24sIGltYWdlSW5mby5sZW5ndGgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBpbWFnZURhdGE7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBVcGxvYWRzIHRoZSB0ZXh0dXJlIGluZm8gY29udGFpbmVkIGluIHRo
ZSBlbnYgZmlsZSB0byB0aGUgR1BVLgorICAgICAqIEBwYXJhbSB0ZXh0dXJlIGRlZmluZXMgdGhl
IGludGVybmFsIHRleHR1cmUgdG8gdXBsb2FkIHRvCisgICAgICogQHBhcmFtIGFycmF5QnVmZmVy
IGRlZmluZXMgdGhlIGJ1ZmZlciBjb3RhaW5pbmcgdGhlIGRhdGEgdG8gbG9hZAorICAgICAqIEBw
YXJhbSBpbmZvIGRlZmluZXMgdGhlIHRleHR1cmUgaW5mbyByZXRyaWV2ZWQgdGhyb3VnaCB0aGUg
R2V0RW52SW5mbyBtZXRob2QKKyAgICAgKiBAcmV0dXJucyBhIHByb21pc2UKKyAgICAgKi8KKyAg
ICBFbnZpcm9ubWVudFRleHR1cmVUb29scy5VcGxvYWRFbnZMZXZlbHNBc3luYyA9IGZ1bmN0aW9u
ICh0ZXh0dXJlLCBhcnJheUJ1ZmZlciwgaW5mbykgeworICAgICAgICBpZiAoaW5mby52ZXJzaW9u
ICE9PSAxKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGJhYnls
b24gZW52aXJvbm1lbnQgbWFwIHZlcnNpb24gXCIiICsgaW5mby52ZXJzaW9uICsgIlwiIik7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHNwZWN1bGFySW5mbyA9IGluZm8uc3BlY3VsYXI7CisgICAg
ICAgIGlmICghc3BlY3VsYXJJbmZvKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIGVsc2UgcGFy
c2VkIHNvIGZhcgorICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICAgICAg
ICB9CisgICAgICAgIHRleHR1cmUuX2xvZEdlbmVyYXRpb25TY2FsZSA9IHNwZWN1bGFySW5mby5s
b2RHZW5lcmF0aW9uU2NhbGU7CisgICAgICAgIHZhciBpbWFnZURhdGEgPSBFbnZpcm9ubWVudFRl
eHR1cmVUb29scy5DcmVhdGVJbWFnZURhdGFBcnJheUJ1ZmZlclZpZXdzKGFycmF5QnVmZmVyLCBp
bmZvKTsKKyAgICAgICAgcmV0dXJuIEVudmlyb25tZW50VGV4dHVyZVRvb2xzLlVwbG9hZExldmVs
c0FzeW5jKHRleHR1cmUsIGltYWdlRGF0YSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGxv
YWRzIHRoZSBsZXZlbHMgb2YgaW1hZ2UgZGF0YSB0byB0aGUgR1BVLgorICAgICAqIEBwYXJhbSB0
ZXh0dXJlIGRlZmluZXMgdGhlIGludGVybmFsIHRleHR1cmUgdG8gdXBsb2FkIHRvCisgICAgICog
QHBhcmFtIGltYWdlRGF0YSBkZWZpbmVzIHRoZSBhcnJheSBidWZmZXIgdmlld3Mgb2YgaW1hZ2Ug
ZGF0YSBbbWlwbWFwXVtmYWNlXQorICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZQorICAgICAqLwor
ICAgIEVudmlyb25tZW50VGV4dHVyZVRvb2xzLlVwbG9hZExldmVsc0FzeW5jID0gZnVuY3Rpb24g
KHRleHR1cmUsIGltYWdlRGF0YSkgeworICAgICAgICBpZiAoIV90b29sc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLklzRXhwb25lbnRPZlR3byh0ZXh0dXJlLndpZHRoKSkg
eworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUZXh0dXJlIHNpemUgbXVzdCBiZSBhIHBv
d2VyIG9mIHR3byIpOworICAgICAgICB9CisgICAgICAgIHZhciBtaXBtYXBzQ291bnQgPSBNYXRo
LnJvdW5kKF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJT
Y2FsYXIiXS5Mb2cyKHRleHR1cmUud2lkdGgpKSArIDE7CisgICAgICAgIC8vIEdldHMgZXZlcnl0
aGluZyByZWFkeS4KKyAgICAgICAgdmFyIGVuZ2luZSA9IHRleHR1cmUuZ2V0RW5naW5lKCk7Cisg
ICAgICAgIHZhciBleHBhbmRUZXh0dXJlID0gZmFsc2U7CisgICAgICAgIHZhciBnZW5lcmF0ZU5v
bkxPRFRleHR1cmVzID0gZmFsc2U7CisgICAgICAgIHZhciByZ2JkUG9zdFByb2Nlc3MgPSBudWxs
OworICAgICAgICB2YXIgY3ViZVJ0dCA9IG51bGw7CisgICAgICAgIHZhciBsb2RUZXh0dXJlcyA9
IG51bGw7CisgICAgICAgIHZhciBjYXBzID0gZW5naW5lLmdldENhcHMoKTsKKyAgICAgICAgdGV4
dHVyZS5mb3JtYXQgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRUZPUk1BVF9SR0JBOworICAgICAgICB0ZXh0dXJlLnR5
cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOworICAgICAgICB0ZXh0dXJlLmdlbmVy
YXRlTWlwTWFwcyA9IHRydWU7CisgICAgICAgIGVuZ2luZS51cGRhdGVUZXh0dXJlU2FtcGxpbmdN
b2RlKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25z
dGFudHMiXS5URVhUVVJFX1RSSUxJTkVBUl9TQU1QTElOR01PREUsIHRleHR1cmUpOworICAgICAg
ICAvLyBBZGQgZXh0cmEgcHJvY2VzcyBpZiB0ZXh0dXJlIGxvZCBpcyBub3Qgc3VwcG9ydGVkCisg
ICAgICAgIGlmICghY2Fwcy50ZXh0dXJlTE9EKSB7CisgICAgICAgICAgICBleHBhbmRUZXh0dXJl
ID0gZmFsc2U7CisgICAgICAgICAgICBnZW5lcmF0ZU5vbkxPRFRleHR1cmVzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGxvZFRleHR1cmVzID0ge307CisgICAgICAgIH0KKyAgICAgICAgLy8gaW4gd2Vi
Z2wgMSB0aGVyZSBhcmUgbm8gd2F5cyB0byBlaXRoZXIgcmVuZGVyIG9yIGNvcHkgbG9kIGxldmVs
IGluZm9ybWF0aW9uIGZvciBmbG9hdCB0ZXh0dXJlcy4KKyAgICAgICAgZWxzZSBpZiAoZW5naW5l
LndlYkdMVmVyc2lvbiA8IDIpIHsKKyAgICAgICAgICAgIGV4cGFuZFRleHR1cmUgPSBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICAvLyBJZiBoYWxmIGZsb2F0IGF2YWlsYWJsZSB3ZSBjYW4gdW5j
b21wcmVzcyB0aGUgdGV4dHVyZQorICAgICAgICBlbHNlIGlmIChjYXBzLnRleHR1cmVIYWxmRmxv
YXRSZW5kZXIgJiYgY2Fwcy50ZXh0dXJlSGFsZkZsb2F0TGluZWFyRmlsdGVyaW5nKSB7CisgICAg
ICAgICAgICBleHBhbmRUZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgICAgIHRleHR1cmUudHlwZSA9
IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFu
dHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUOworICAgICAgICB9CisgICAgICAgIC8vIElmIGZ1
bGwgZmxvYXQgYXZhaWxhYmxlIHdlIGNhbiB1bmNvbXByZXNzIHRoZSB0ZXh0dXJlCisgICAgICAg
IGVsc2UgaWYgKGNhcHMudGV4dHVyZUZsb2F0UmVuZGVyICYmIGNhcHMudGV4dHVyZUZsb2F0TGlu
ZWFyRmlsdGVyaW5nKSB7CisgICAgICAgICAgICBleHBhbmRUZXh0dXJlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHRleHR1cmUudHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9BVDsKKyAgICAgICAgfQor
ICAgICAgICAvLyBFeHBhbmQgdGhlIHRleHR1cmUgaWYgcG9zc2libGUKKyAgICAgICAgaWYgKGV4
cGFuZFRleHR1cmUpIHsKKyAgICAgICAgICAgIC8vIFNpbXBseSBydW4gdGhyb3VnaCB0aGUgZGVj
b2RlIFBQCisgICAgICAgICAgICByZ2JkUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNf
cG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3MiXSgi
cmdiZERlY29kZSIsICJyZ2JkRGVjb2RlIiwgbnVsbCwgbnVsbCwgMSwgbnVsbCwgX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlRFWFRV
UkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERSwgZW5naW5lLCBmYWxzZSwgdW5kZWZpbmVkLCB0ZXh0
dXJlLnR5cGUsIHVuZGVmaW5lZCwgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgdGV4dHVyZS5f
aXNSR0JEID0gZmFsc2U7CisgICAgICAgICAgICB0ZXh0dXJlLmludmVydFkgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGN1YmVSdHQgPSBlbmdpbmUuY3JlYXRlUmVuZGVyVGFyZ2V0Q3ViZVRleHR1cmUo
dGV4dHVyZS53aWR0aCwgeworICAgICAgICAgICAgICAgIGdlbmVyYXRlRGVwdGhCdWZmZXI6IGZh
bHNlLAorICAgICAgICAgICAgICAgIGdlbmVyYXRlTWlwTWFwczogdHJ1ZSwKKyAgICAgICAgICAg
ICAgICBnZW5lcmF0ZVN0ZW5jaWxCdWZmZXI6IGZhbHNlLAorICAgICAgICAgICAgICAgIHNhbXBs
aW5nTW9kZTogX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19b
IkNvbnN0YW50cyJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERSwKKyAgICAgICAgICAg
ICAgICB0eXBlOiB0ZXh0dXJlLnR5cGUsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVY
VFVSRUZPUk1BVF9SR0JBCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRleHR1cmUuX2lzUkdCRCA9IHRydWU7CisgICAgICAgICAgICB0ZXh0
dXJlLmludmVydFkgPSB0cnVlOworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBtaXNzaW5nIHN1
cHBvcnQsIGFwcGxpZXMgdGhlIHNhbWUgcGF0Y2ggdGhhbiBERFMgZmlsZXMuCisgICAgICAgICAg
ICBpZiAoZ2VuZXJhdGVOb25MT0RUZXh0dXJlcykgeworICAgICAgICAgICAgICAgIHZhciBtaXBT
bGljZXMgPSAzOworICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IHRleHR1cmUuX2xvZEdlbmVy
YXRpb25TY2FsZTsKKyAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGV4dHVyZS5fbG9kR2Vu
ZXJhdGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcFNs
aWNlczsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vY29tcHV0ZSBMT0QgZnJvbSBldmVu
IHNwYWNpbmcgaW4gc21vb3RobmVzcyAobWF0Y2hpbmcgc2hhZGVyIGNhbGN1bGF0aW9uKQorICAg
ICAgICAgICAgICAgICAgICB2YXIgc21vb3RobmVzcyA9IGkgLyAobWlwU2xpY2VzIC0gMSk7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciByb3VnaG5lc3MgPSAxIC0gc21vb3RobmVzczsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG1pbkxPREluZGV4ID0gb2Zmc2V0OyAvLyByb3VnaG5lc3MgPSAw
CisgICAgICAgICAgICAgICAgICAgIHZhciBtYXhMT0RJbmRleCA9IChtaXBtYXBzQ291bnQgLSAx
KSAqIHNjYWxlICsgb2Zmc2V0OyAvLyByb3VnaG5lc3MgPSAxIChtaXBtYXBzIHN0YXJ0IGZyb20g
MCkKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvZEluZGV4ID0gbWluTE9ESW5kZXggKyAobWF4
TE9ESW5kZXggLSBtaW5MT0RJbmRleCkgKiByb3VnaG5lc3M7CisgICAgICAgICAgICAgICAgICAg
IHZhciBtaXBtYXBJbmRleCA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgobG9kSW5kZXgs
IDApLCBtYXhMT0RJbmRleCkpOworICAgICAgICAgICAgICAgICAgICB2YXIgZ2xUZXh0dXJlRnJv
bUxvZCA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX2ludGVybmFsVGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJJbnRlcm5hbFRleHR1cmUiXShlbmdpbmUsIF9NYXRlcmlhbHNf
VGV4dHVyZXNfaW50ZXJuYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIklu
dGVybmFsVGV4dHVyZSJdLkRBVEFTT1VSQ0VfVEVNUCk7CisgICAgICAgICAgICAgICAgICAgIGds
VGV4dHVyZUZyb21Mb2QuaXNDdWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZ2xUZXh0
dXJlRnJvbUxvZC5pbnZlcnRZID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZ2xUZXh0dXJl
RnJvbUxvZC5nZW5lcmF0ZU1pcE1hcHMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZW5n
aW5lLnVwZGF0ZVRleHR1cmVTYW1wbGluZ01vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfTElORUFSX0xJTkVBUiwg
Z2xUZXh0dXJlRnJvbUxvZCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFdyYXAgaW4gYSBiYXNl
IHRleHR1cmUgZm9yIGVhc3kgYmluZGluZy4KKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvZFRl
eHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19iYXNlVGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJCYXNlVGV4dHVyZSJdKG51bGwpOworICAgICAgICAgICAgICAgICAg
ICBsb2RUZXh0dXJlLmlzQ3ViZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGxvZFRleHR1
cmUuX3RleHR1cmUgPSBnbFRleHR1cmVGcm9tTG9kOworICAgICAgICAgICAgICAgICAgICBsb2RU
ZXh0dXJlc1ttaXBtYXBJbmRleF0gPSBsb2RUZXh0dXJlOworICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJlTG93ID0gbG9kVGV4dHVyZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJl
TWlkID0gbG9kVGV4dHVyZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLl9sb2RUZXh0dXJlSGlnaCA9IGxvZFRleHR1cmU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHByb21pc2VzID0gW107
CisgICAgICAgIHZhciBfbG9vcF8zID0gZnVuY3Rpb24gKGkpIHsKKyAgICAgICAgICAgIHZhciBf
bG9vcF80ID0gZnVuY3Rpb24gKGZhY2UpIHsKKyAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3Rz
IGFuIGltYWdlIGVsZW1lbnQgZnJvbSBpbWFnZSBkYXRhCisgICAgICAgICAgICAgICAgdmFyIGJ5
dGVzID0gaW1hZ2VEYXRhW2ldW2ZhY2VdOworICAgICAgICAgICAgICAgIHZhciBibG9iID0gbmV3
IEJsb2IoW2J5dGVzXSwgeyB0eXBlOiAnaW1hZ2UvcG5nJyB9KTsKKyAgICAgICAgICAgICAgICB2
YXIgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKKyAgICAgICAgICAgICAgICB2YXIg
aW1hZ2UgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgICAgICAgICBpbWFnZS5zcmMgPSB1cmw7Cisg
ICAgICAgICAgICAgICAgLy8gRW5xdWV1ZSBwcm9taXNlIHRvIHVwbG9hZCB0byB0aGUgdGV4dHVy
ZS4KKyAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChy
ZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGFuZFRleHR1cmUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcFRleHR1cmVfMSA9IGVuZ2luZS5j
cmVhdGVUZXh0dXJlKG51bGwsIHRydWUsIHRydWUsIG51bGwsIF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1Rf
U0FNUExJTkdNT0RFLCBudWxsLCBmdW5jdGlvbiAobWVzc2FnZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWplY3QobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwgaW1hZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYmRQb3N0UHJv
Y2Vzcy5nZXRFZmZlY3QoKS5leGVjdXRlV2hlbkNvbXBpbGVkKGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5jb21wcmVzcyB0aGUgZGF0YSB0byBhIFJU
VAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JkUG9zdFByb2Nlc3Mub25BcHBs
eSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVmZmVjdC5fYmluZFRleHR1cmUoInRleHR1cmVTYW1wbGVyIiwgdGVtcFRleHR1cmVfMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCJz
Y2FsZSIsIDEsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmUuc2NlbmVzWzBdLnBvc3RQcm9jZXNzTWFu
YWdlci5kaXJlY3RSZW5kZXIoW3JnYmRQb3N0UHJvY2Vzc10sIGN1YmVSdHQsIHRydWUsIGZhY2Us
IGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhbnVwCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS5yZXN0b3JlRGVmYXVsdEZyYW1lYnVmZmVy
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUZXh0dXJlXzEuZGlzcG9z
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9i
amVjdFVSTCh1cmwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmdpbmUuX3VwbG9hZEltYWdlVG9UZXh0dXJlKHRleHR1cmUsIGltYWdlLCBmYWNl
LCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGxvYWQgdGhlIGZhY2UgdG8g
dGhlIG5vbiBsb2QgdGV4dHVyZSBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGdlbmVyYXRlTm9uTE9EVGV4dHVyZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGxvZFRleHR1cmUgPSBsb2RUZXh0dXJlc1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGxvZFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZ2luZS5fdXBsb2FkSW1hZ2VUb1RleHR1cmUobG9kVGV4dHVyZS5fdGV4
dHVyZSwgaW1hZ2UsIGZhY2UsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2Uub25lcnJvciA9IGZ1bmN0aW9uIChl
cnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKKyAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBwcm9t
aXNlcy5wdXNoKHByb21pc2UpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIC8vIEFsbCBm
YWNlcworICAgICAgICAgICAgZm9yICh2YXIgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspIHsK
KyAgICAgICAgICAgICAgICBfbG9vcF80KGZhY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgICAgICAvLyBBbGwgbWlwbWFwcyB1cCB0byBwcm92aWRlZCBudW1iZXIgb2YgaW1hZ2Vz
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VEYXRhLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICBfbG9vcF8zKGkpOworICAgICAgICB9CisgICAgICAgIC8vIEZpbGwgcmVtYWlu
aW5nIG1pcG1hcHMgd2l0aCBibGFjayB0ZXh0dXJlcy4KKyAgICAgICAgaWYgKGltYWdlRGF0YS5s
ZW5ndGggPCBtaXBtYXBzQ291bnQpIHsKKyAgICAgICAgICAgIHZhciBkYXRhID0gdm9pZCAwOwor
ICAgICAgICAgICAgdmFyIHNpemUgPSBNYXRoLnBvdygyLCBtaXBtYXBzQ291bnQgLSAxIC0gaW1h
Z2VEYXRhLmxlbmd0aCk7CisgICAgICAgICAgICB2YXIgZGF0YUxlbmd0aCA9IHNpemUgKiBzaXpl
ICogNDsKKyAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZS50eXBlKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
Q29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOiB7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlRF
WFRVUkVUWVBFX0hBTEZfRkxPQVQ6IHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG5ldyBV
aW50MTZBcnJheShkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FU
OiB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGFMZW5n
dGgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBpID0gaW1hZ2VEYXRhLmxlbmd0aDsgaSA8
IG1pcG1hcHNDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgZmFjZSA9IDA7
IGZhY2UgPCA2OyBmYWNlKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZW5naW5lLl91cGxvYWRB
cnJheUJ1ZmZlclZpZXdUb1RleHR1cmUodGV4dHVyZSwgZGF0YSwgZmFjZSwgaSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE9uY2UgYWxs
IGRvbmUsIGZpbmlzaGVzIHRoZSBjbGVhbnVwIGFuZCByZXR1cm4KKyAgICAgICAgcmV0dXJuIFBy
b21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIC8vIFJl
bGVhc2UgdGVtcCBSVFQuCisgICAgICAgICAgICBpZiAoY3ViZVJ0dCkgeworICAgICAgICAgICAg
ICAgIGVuZ2luZS5fcmVsZWFzZUZyYW1lYnVmZmVyT2JqZWN0cyhjdWJlUnR0KTsKKyAgICAgICAg
ICAgICAgICBlbmdpbmUuX3JlbGVhc2VUZXh0dXJlKHRleHR1cmUpOworICAgICAgICAgICAgICAg
IGN1YmVSdHQuX3N3YXBBbmREaWUodGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBSZWxlYXNlIHRlbXAgUG9zdCBQcm9jZXNzLgorICAgICAgICAgICAgaWYgKHJnYmRQb3N0
UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHJnYmRQb3N0UHJvY2Vzcy5kaXNwb3NlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGbGFnIGludGVybmFsIHRleHR1cmUgYXMgcmVh
ZHkgaW4gY2FzZSB0aGV5IGFyZSBpbiB1c2UuCisgICAgICAgICAgICBpZiAoZ2VuZXJhdGVOb25M
T0RUZXh0dXJlcykgeworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLl9sb2RUZXh0dXJlSGln
aCAmJiB0ZXh0dXJlLl9sb2RUZXh0dXJlSGlnaC5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJlSGlnaC5fdGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUuX2xvZFRleHR1cmVN
aWQgJiYgdGV4dHVyZS5fbG9kVGV4dHVyZU1pZC5fdGV4dHVyZSkgeworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLl9sb2RUZXh0dXJlTWlkLl90ZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5fbG9kVGV4dHVyZUxv
dyAmJiB0ZXh0dXJlLl9sb2RUZXh0dXJlTG93Ll90ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUuX2xvZFRleHR1cmVMb3cuX3RleHR1cmUuaXNSZWFkeSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFVwbG9hZHMgc3BoZXJpY2FsIHBvbHlub21pYWxzIGluZm9ybWF0aW9uIHRvIHRo
ZSB0ZXh0dXJlLgorICAgICAqIEBwYXJhbSB0ZXh0dXJlIGRlZmluZXMgdGhlIHRleHR1cmUgd2Ug
YXJlIHRyeWluZyB0byB1cGxvYWQgdGhlIGluZm9ybWF0aW9uIHRvCisgICAgICogQHBhcmFtIGlu
Zm8gZGVmaW5lcyB0aGUgZW52aXJvbm1lbnQgdGV4dHVyZSBpbmZvIHJldHJpZXZlZCB0aHJvdWdo
IHRoZSBHZXRFbnZJbmZvIG1ldGhvZAorICAgICAqLworICAgIEVudmlyb25tZW50VGV4dHVyZVRv
b2xzLlVwbG9hZEVudlNwaGVyaWNhbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBpbmZvKSB7CisgICAg
ICAgIGlmIChpbmZvLnZlcnNpb24gIT09IDEpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJMb2dnZXIiXS5XYXJuKCdVbnN1cHBvcnRlZCBi
YWJ5bG9uIGVudmlyb25tZW50IG1hcCB2ZXJzaW9uICInICsgaW5mby52ZXJzaW9uICsgJyInKTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgaXJyYWRpYW5jZUluZm8gPSBpbmZvLmlycmFkaWFuY2U7
CisgICAgICAgIGlmICghaXJyYWRpYW5jZUluZm8pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgc3AgPSBuZXcgX01hdGhzX3NwaGVyaWNhbFBvbHlub21pYWxf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU3BoZXJpY2FsUG9seW5vbWlhbCJdKCk7Cisg
ICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJW
ZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYoaXJyYWRpYW5jZUluZm8ueCwgMCwgc3AueCk7CisgICAg
ICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0
b3IzIl0uRnJvbUFycmF5VG9SZWYoaXJyYWRpYW5jZUluZm8ueSwgMCwgc3AueSk7CisgICAgICAg
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3Iz
Il0uRnJvbUFycmF5VG9SZWYoaXJyYWRpYW5jZUluZm8ueiwgMCwgc3Aueik7CisgICAgICAgIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0u
RnJvbUFycmF5VG9SZWYoaXJyYWRpYW5jZUluZm8ueHgsIDAsIHNwLnh4KTsKKyAgICAgICAgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5G
cm9tQXJyYXlUb1JlZihpcnJhZGlhbmNlSW5mby55eSwgMCwgc3AueXkpOworICAgICAgICBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZy
b21BcnJheVRvUmVmKGlycmFkaWFuY2VJbmZvLnp6LCAwLCBzcC56eik7CisgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uRnJv
bUFycmF5VG9SZWYoaXJyYWRpYW5jZUluZm8ueXosIDAsIHNwLnl6KTsKKyAgICAgICAgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Gcm9t
QXJyYXlUb1JlZihpcnJhZGlhbmNlSW5mby56eCwgMCwgc3AuengpOworICAgICAgICBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21B
cnJheVRvUmVmKGlycmFkaWFuY2VJbmZvLnh5LCAwLCBzcC54eSk7CisgICAgICAgIHRleHR1cmUu
X3NwaGVyaWNhbFBvbHlub21pYWwgPSBzcDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMuX1VwZGF0ZVJHQkRBc3luYyA9IGZ1bmN0aW9uIChp
bnRlcm5hbFRleHR1cmUsIGRhdGEsIHNwaGVyaWNhbFBvbHlub21pYWwsIGxvZFNjYWxlLCBsb2RP
ZmZzZXQpIHsKKyAgICAgICAgaW50ZXJuYWxUZXh0dXJlLl9kYXRhU291cmNlID0gX01hdGVyaWFs
c19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
SW50ZXJuYWxUZXh0dXJlIl0uREFUQVNPVVJDRV9DVUJFUkFXX1JHQkQ7CisgICAgICAgIGludGVy
bmFsVGV4dHVyZS5fYnVmZmVyVmlld0FycmF5QXJyYXkgPSBkYXRhOworICAgICAgICBpbnRlcm5h
bFRleHR1cmUuX2xvZEdlbmVyYXRpb25TY2FsZSA9IGxvZFNjYWxlOworICAgICAgICBpbnRlcm5h
bFRleHR1cmUuX2xvZEdlbmVyYXRpb25PZmZzZXQgPSBsb2RPZmZzZXQ7CisgICAgICAgIGludGVy
bmFsVGV4dHVyZS5fc3BoZXJpY2FsUG9seW5vbWlhbCA9IHNwaGVyaWNhbFBvbHlub21pYWw7Cisg
ICAgICAgIHJldHVybiBFbnZpcm9ubWVudFRleHR1cmVUb29scy5VcGxvYWRMZXZlbHNBc3luYyhp
bnRlcm5hbFRleHR1cmUsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaW50
ZXJuYWxUZXh0dXJlLmlzUmVhZHkgPSB0cnVlOworICAgICAgICB9KTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIE1hZ2ljIG51bWJlciBpZGVudGlmeWluZyB0aGUgZW52IGZpbGUuCisgICAgICov
CisgICAgRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMuX01hZ2ljQnl0ZXMgPSBbMHg4NiwgMHgxNiwg
MHg4NywgMHg5NiwgMHhmNiwgMHhkNiwgMHg5NiwgMHgzNl07CisgICAgcmV0dXJuIEVudmlyb25t
ZW50VGV4dHVyZVRvb2xzOworfSgpKTsKKworLy8gUmVmZXJlbmNlcyB0aGUgZGVwZW5kZW5jaWVz
LgorX01hdGVyaWFsc19UZXh0dXJlc19pbnRlcm5hbFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siSW50ZXJuYWxUZXh0dXJlIl0uX1VwZGF0ZVJHQkRBc3luYyA9IEVudmlyb25t
ZW50VGV4dHVyZVRvb2xzLl9VcGRhdGVSR0JEQXN5bmM7CisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL01pc2MvZmlsZVRvb2xzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vTWlzYy9maWxlVG9vbHMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZpbGVUb29scyAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJGaWxlVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEZpbGVUb29sczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlYlJlcXVlc3RfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2Vi
UmVxdWVzdCAqLyAiLi9NaXNjL3dlYlJlcXVlc3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfbG9hZEZpbGVFcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9sb2FkRmlsZUVycm9yICovICIuL01pc2MvbG9hZEZpbGVFcnJv
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kb21NYW5hZ2VtZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RvbU1hbmFn
ZW1lbnQgKi8gIi4vTWlzYy9kb21NYW5hZ2VtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmlsZXNJbnB1dFN0b3JlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ZpbGVzSW5wdXRTdG9y
ZSAqLyAiLi9NaXNjL2ZpbGVzSW5wdXRTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9yZXRyeVN0cmF0ZWd5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL3JldHJ5U3RyYXRlZ3kgKi8gIi4vTWlzYy9yZXRyeVN0cmF0ZWd5
LnRzIik7CisKKworCisKKworCisvKioKKyAqIEBoaWRkZW4KKyAqLwordmFyIEZpbGVUb29scyA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBGaWxlVG9vbHMoKSB7
CisgICAgfQorICAgIC8qKgorICAgICAqIFJlbW92ZXMgdW53YW50ZWQgY2hhcmFjdGVycyBmcm9t
IGFuIHVybAorICAgICAqIEBwYXJhbSB1cmwgZGVmaW5lcyB0aGUgdXJsIHRvIGNsZWFuCisgICAg
ICogQHJldHVybnMgdGhlIGNsZWFuZWQgdXJsCisgICAgICovCisgICAgRmlsZVRvb2xzLl9DbGVh
blVybCA9IGZ1bmN0aW9uICh1cmwpIHsKKyAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoLyMvbWcs
ICIlMjMiKTsKKyAgICAgICAgcmV0dXJuIHVybDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
dHMgdGhlIGNvcnMgYmVoYXZpb3Igb24gYSBkb20gZWxlbWVudC4gVGhpcyB3aWxsIGFkZCB0aGUg
cmVxdWlyZWQgVG9vbHMuQ29yc0JlaGF2aW9yIHRvIHRoZSBlbGVtZW50LgorICAgICAqIEBwYXJh
bSB1cmwgZGVmaW5lIHRoZSB1cmwgd2UgYXJlIHRyeWluZworICAgICAqIEBwYXJhbSBlbGVtZW50
IGRlZmluZSB0aGUgZG9tIGVsZW1lbnQgd2hlcmUgdG8gY29uZmlndXJlIHRoZSBjb3JzIHBvbGlj
eQorICAgICAqLworICAgIEZpbGVUb29scy5TZXRDb3JzQmVoYXZpb3IgPSBmdW5jdGlvbiAodXJs
LCBlbGVtZW50KSB7CisgICAgICAgIGlmICh1cmwgJiYgdXJsLmluZGV4T2YoImRhdGE6IikgPT09
IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5D
b3JzQmVoYXZpb3IpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoaXMuQ29yc0JlaGF2aW9y
KSA9PT0gJ3N0cmluZycgfHwgdGhpcy5Db3JzQmVoYXZpb3IgaW5zdGFuY2VvZiBTdHJpbmcpIHsK
KyAgICAgICAgICAgICAgICBlbGVtZW50LmNyb3NzT3JpZ2luID0gdGhpcy5Db3JzQmVoYXZpb3I7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIg
cmVzdWx0ID0gdGhpcy5Db3JzQmVoYXZpb3IodXJsKTsKKyAgICAgICAgICAgICAgICBpZiAocmVz
dWx0KSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY3Jvc3NPcmlnaW4gPSByZXN1bHQ7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBMb2FkcyBhbiBpbWFnZSBhcyBhbiBIVE1MSW1hZ2VFbGVtZW50LgorICAg
ICAqIEBwYXJhbSBpbnB1dCB1cmwgc3RyaW5nLCBBcnJheUJ1ZmZlciwgb3IgQmxvYiB0byBsb2Fk
CisgICAgICogQHBhcmFtIG9uTG9hZCBjYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgaW1hZ2Ugc3Vj
Y2Vzc2Z1bGx5IGxvYWRzCisgICAgICogQHBhcmFtIG9uRXJyb3IgY2FsbGJhY2sgY2FsbGVkIHdo
ZW4gdGhlIGltYWdlIGZhaWxzIHRvIGxvYWQKKyAgICAgKiBAcGFyYW0gb2ZmbGluZVByb3ZpZGVy
IG9mZmxpbmUgcHJvdmlkZXIgZm9yIGNhY2hpbmcKKyAgICAgKiBAcmV0dXJucyB0aGUgSFRNTElt
YWdlRWxlbWVudCBvZiB0aGUgbG9hZGVkIGltYWdlCisgICAgICovCisgICAgRmlsZVRvb2xzLkxv
YWRJbWFnZSA9IGZ1bmN0aW9uIChpbnB1dCwgb25Mb2FkLCBvbkVycm9yLCBvZmZsaW5lUHJvdmlk
ZXIpIHsKKyAgICAgICAgdmFyIHVybDsKKyAgICAgICAgdmFyIHVzaW5nT2JqZWN0VVJMID0gZmFs
c2U7CisgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVm
ZmVyLmlzVmlldyhpbnB1dCkpIHsKKyAgICAgICAgICAgIHVybCA9IFVSTC5jcmVhdGVPYmplY3RV
UkwobmV3IEJsb2IoW2lucHV0XSkpOworICAgICAgICAgICAgdXNpbmdPYmplY3RVUkwgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgQmxvYikgewor
ICAgICAgICAgICAgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChpbnB1dCk7CisgICAgICAgICAg
ICB1c2luZ09iamVjdFVSTCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICB1cmwgPSB0aGlzLl9DbGVhblVybChpbnB1dCk7CisgICAgICAgICAgICB1cmwgPSB0
aGlzLlByZXByb2Nlc3NVcmwoaW5wdXQpOworICAgICAgICB9CisgICAgICAgIHZhciBpbWcgPSBu
ZXcgSW1hZ2UoKTsKKyAgICAgICAgdGhpcy5TZXRDb3JzQmVoYXZpb3IodXJsLCBpbWcpOworICAg
ICAgICB2YXIgbG9hZEhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpbWcucmVt
b3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsIGxvYWRIYW5kbGVyKTsKKyAgICAgICAgICAgIGltZy5y
ZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsIGVycm9ySGFuZGxlcik7CisgICAgICAgICAgICBv
bkxvYWQoaW1nKTsKKyAgICAgICAgICAgIC8vIE11c3QgcmV2b2tlIHRoZSBVUkwgYWZ0ZXIgY2Fs
bGluZyBvbkxvYWQgdG8gYXZvaWQgc2VjdXJpdHkgZXhjZXB0aW9ucyBpbgorICAgICAgICAgICAg
Ly8gY2VydGFpbiBzY2VuYXJpb3MgKGUuZy4gd2hlbiBob3N0ZWQgaW4gdnNjb2RlKS4KKyAgICAg
ICAgICAgIGlmICh1c2luZ09iamVjdFVSTCAmJiBpbWcuc3JjKSB7CisgICAgICAgICAgICAgICAg
VVJMLnJldm9rZU9iamVjdFVSTChpbWcuc3JjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KyAgICAgICAgdmFyIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlcnIpIHsKKyAgICAgICAgICAg
IGltZy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIiwgbG9hZEhhbmRsZXIpOworICAgICAgICAg
ICAgaW1nLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIiwgZXJyb3JIYW5kbGVyKTsKKyAgICAg
ICAgICAgIGlmIChvbkVycm9yKSB7CisgICAgICAgICAgICAgICAgb25FcnJvcigiRXJyb3Igd2hp
bGUgdHJ5aW5nIHRvIGxvYWQgaW1hZ2U6ICIgKyBpbnB1dCwgZXJyKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh1c2luZ09iamVjdFVSTCAmJiBpbWcuc3JjKSB7CisgICAgICAgICAg
ICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWcuc3JjKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKyAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBsb2FkSGFuZGxlcik7
CisgICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIGVycm9ySGFuZGxlcik7Cisg
ICAgICAgIHZhciBub09mZmxpbmVTdXBwb3J0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
aW1nLnNyYyA9IHVybDsKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIGxvYWRGcm9tT2ZmbGluZVN1
cHBvcnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAob2ZmbGluZVByb3ZpZGVyKSB7
CisgICAgICAgICAgICAgICAgb2ZmbGluZVByb3ZpZGVyLmxvYWRJbWFnZSh1cmwsIGltZyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIGlmICh1cmwuc3Vic3RyKDAsIDUpICE9
PSAiZGF0YToiICYmIG9mZmxpbmVQcm92aWRlciAmJiBvZmZsaW5lUHJvdmlkZXIuZW5hYmxlVGV4
dHVyZXNPZmZsaW5lKSB7CisgICAgICAgICAgICBvZmZsaW5lUHJvdmlkZXIub3Blbihsb2FkRnJv
bU9mZmxpbmVTdXBwb3J0LCBub09mZmxpbmVTdXBwb3J0KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZigiZmlsZToiKSAhPT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgdGV4dHVyZU5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQodXJsLnN1
YnN0cmluZyg1KS50b0xvd2VyQ2FzZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoX2ZpbGVzSW5w
dXRTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJGaWxlc0lucHV0U3RvcmUiXS5G
aWxlc1RvTG9hZFt0ZXh0dXJlTmFtZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9iVVJMOworICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9iVVJMID0gVVJMLmNyZWF0
ZU9iamVjdFVSTChfZmlsZXNJbnB1dFN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkZpbGVzSW5wdXRTdG9yZSJdLkZpbGVzVG9Mb2FkW3RleHR1cmVOYW1lXSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaHJvbWUgZG9lc24ndCBzdXBwb3J0IG9uZVRp
bWVPbmx5IHBhcmFtZXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2JVUkwgPSBV
UkwuY3JlYXRlT2JqZWN0VVJMKF9maWxlc0lucHV0U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siRmlsZXNJbnB1dFN0b3JlIl0uRmlsZXNUb0xvYWRbdGV4dHVyZU5hbWVdKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMg
PSBibG9iVVJMOworICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdPYmplY3RVUkwgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gIiI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltZzsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub09mZmxpbmVTdXBwb3J0KCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGltZzsKKyAgICB9OworICAgIC8qKgorICAgICAqIExvYWRzIGEg
ZmlsZQorICAgICAqIEBwYXJhbSBmaWxlVG9Mb2FkIGRlZmluZXMgdGhlIGZpbGUgdG8gbG9hZAor
ICAgICAqIEBwYXJhbSBjYWxsYmFjayBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4g
ZGF0YSBpcyBsb2FkZWQKKyAgICAgKiBAcGFyYW0gcHJvZ3Jlc3NDYWxsQmFjayBkZWZpbmVzIHRo
ZSBjYWxsYmFjayB0byBjYWxsIGR1cmluZyBsb2FkaW5nIHByb2Nlc3MKKyAgICAgKiBAcGFyYW0g
dXNlQXJyYXlCdWZmZXIgZGVmaW5lcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGRhdGEgbXVz
dCBiZSByZXR1cm5lZCBhcyBhbiBBcnJheUJ1ZmZlcgorICAgICAqIEByZXR1cm5zIGEgZmlsZSBy
ZXF1ZXN0IG9iamVjdAorICAgICAqLworICAgIEZpbGVUb29scy5SZWFkRmlsZSA9IGZ1bmN0aW9u
IChmaWxlVG9Mb2FkLCBjYWxsYmFjaywgcHJvZ3Jlc3NDYWxsQmFjaywgdXNlQXJyYXlCdWZmZXIp
IHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CisgICAgICAgIHZhciBy
ZXF1ZXN0ID0geworICAgICAgICAgICAgb25Db21wbGV0ZU9ic2VydmFibGU6IG5ldyBfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKSwKKyAgICAg
ICAgICAgIGFib3J0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWFkZXIuYWJvcnQoKTsgfSwKKyAg
ICAgICAgfTsKKyAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uIChlKSB7IHJldHVy
biByZXF1ZXN0Lm9uQ29tcGxldGVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhyZXF1ZXN0KTsg
fTsKKyAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAg
Y2FsbGJhY2soSlNPTi5zdHJpbmdpZnkoeyBhdXRvQ2xlYXI6IHRydWUsIGNsZWFyQ29sb3I6IFsx
LCAwLCAwXSwgYW1iaWVudENvbG9yOiBbMCwgMCwgMF0sIGdyYXZpdHk6IFswLCAtOS44MDcsIDBd
LCBtZXNoZXM6IFtdLCBjYW1lcmFzOiBbXSwgbGlnaHRzOiBbXSB9KSk7CisgICAgICAgIH07Cisg
ICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgLy90YXJn
ZXQgZG9lc24ndCBoYXZlIHJlc3VsdCBmcm9tIHRzIDEuMworICAgICAgICAgICAgY2FsbGJhY2so
ZS50YXJnZXRbJ3Jlc3VsdCddKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKHByb2dyZXNzQ2Fs
bEJhY2spIHsKKyAgICAgICAgICAgIHJlYWRlci5vbnByb2dyZXNzID0gcHJvZ3Jlc3NDYWxsQmFj
azsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXVzZUFycmF5QnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBBc3luY2hyb25vdXMgcmVhZAorICAgICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmls
ZVRvTG9hZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZWFkZXIu
cmVhZEFzQXJyYXlCdWZmZXIoZmlsZVRvTG9hZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHJlcXVlc3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBMb2FkcyBhIGZpbGUKKyAgICAgKiBA
cGFyYW0gdXJsIHVybCBzdHJpbmcsIEFycmF5QnVmZmVyLCBvciBCbG9iIHRvIGxvYWQKKyAgICAg
KiBAcGFyYW0gb25TdWNjZXNzIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBmaWxlIHN1Y2Nlc3Nm
dWxseSBsb2FkcworICAgICAqIEBwYXJhbSBvblByb2dyZXNzIGNhbGxiYWNrIGNhbGxlZCB3aGls
ZSBmaWxlIGlzIGxvYWRpbmcgKGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgdGhpcyBtb2RlKQorICAg
ICAqIEBwYXJhbSBvZmZsaW5lUHJvdmlkZXIgZGVmaW5lcyB0aGUgb2ZmbGluZSBwcm92aWRlciBm
b3IgY2FjaGluZworICAgICAqIEBwYXJhbSB1c2VBcnJheUJ1ZmZlciBkZWZpbmVzIGEgYm9vbGVh
biBpbmRpY2F0aW5nIHRoYXQgZGF0ZSBtdXN0IGJlIHJldHVybmVkIGFzIEFycmF5QnVmZmVyCisg
ICAgICogQHBhcmFtIG9uRXJyb3IgY2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIGZpbGUgZmFpbHMg
dG8gbG9hZAorICAgICAqIEByZXR1cm5zIGEgZmlsZSByZXF1ZXN0IG9iamVjdAorICAgICAqLwor
ICAgIEZpbGVUb29scy5Mb2FkRmlsZSA9IGZ1bmN0aW9uICh1cmwsIG9uU3VjY2Vzcywgb25Qcm9n
cmVzcywgb2ZmbGluZVByb3ZpZGVyLCB1c2VBcnJheUJ1ZmZlciwgb25FcnJvcikgeworICAgICAg
ICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB1cmwgPSB0aGlzLl9DbGVhblVybCh1cmwpOwor
ICAgICAgICB1cmwgPSB0aGlzLlByZXByb2Nlc3NVcmwodXJsKTsKKyAgICAgICAgLy8gSWYgZmls
ZSBhbmQgZmlsZSBpbnB1dCBhcmUgc2V0CisgICAgICAgIGlmICh1cmwuaW5kZXhPZigiZmlsZToi
KSAhPT0gLTEpIHsKKyAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVu
dCh1cmwuc3Vic3RyaW5nKDUpLnRvTG93ZXJDYXNlKCkpOworICAgICAgICAgICAgaWYgKF9maWxl
c0lucHV0U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siRmlsZXNJbnB1dFN0b3Jl
Il0uRmlsZXNUb0xvYWRbZmlsZU5hbWVdKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
UmVhZEZpbGUoX2ZpbGVzSW5wdXRTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJG
aWxlc0lucHV0U3RvcmUiXS5GaWxlc1RvTG9hZFtmaWxlTmFtZV0sIG9uU3VjY2Vzcywgb25Qcm9n
cmVzcywgdXNlQXJyYXlCdWZmZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHZhciBsb2FkVXJsID0gdGhpcy5CYXNlVXJsICsgdXJsOworICAgICAgICB2YXIgYWJvcnRlZCA9
IGZhbHNlOworICAgICAgICB2YXIgZmlsZVJlcXVlc3QgPSB7CisgICAgICAgICAgICBvbkNvbXBs
ZXRlT2JzZXJ2YWJsZTogbmV3IF9vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIk9ic2VydmFibGUiXSgpLAorICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHsgcmV0
dXJuIGFib3J0ZWQgPSB0cnVlOyB9LAorICAgICAgICB9OworICAgICAgICB2YXIgcmVxdWVzdEZp
bGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBfd2ViUmVx
dWVzdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJXZWJSZXF1ZXN0Il0oKTsKKyAgICAg
ICAgICAgIHZhciByZXRyeUhhbmRsZSA9IG51bGw7CisgICAgICAgICAgICBmaWxlUmVxdWVzdC5h
Ym9ydCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSAoWE1MSHR0cFJlcXVlc3Qu
RE9ORSB8fCA0KSkgeworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChyZXRyeUhhbmRsZSAhPT0gbnVsbCkg
eworICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmV0cnlIYW5kbGUpOworICAgICAg
ICAgICAgICAgICAgICByZXRyeUhhbmRsZSA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIHZhciByZXRyeUxvb3AgPSBmdW5jdGlvbiAocmV0cnlJ
bmRleCkgeworICAgICAgICAgICAgICAgIHJlcXVlc3Qub3BlbignR0VUJywgbG9hZFVybCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHVzZUFycmF5QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3QucmVzcG9uc2VUeXBlID0gImFycmF5YnVmZmVyIjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsIG9uUHJvZ3Jlc3MpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgb25Mb2FkRW5kID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWRl
bmQiLCBvbkxvYWRFbmQpOworICAgICAgICAgICAgICAgICAgICBmaWxlUmVxdWVzdC5vbkNvbXBs
ZXRlT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoZmlsZVJlcXVlc3QpOworICAgICAgICAgICAg
ICAgICAgICBmaWxlUmVxdWVzdC5vbkNvbXBsZXRlT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJs
b2FkZW5kIiwgb25Mb2FkRW5kKTsKKyAgICAgICAgICAgICAgICB2YXIgb25SZWFkeVN0YXRlQ2hh
bmdlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYWJvcnRlZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgdW5kZWZpbmVkIHN0YXRlIGluIHNvbWUg
YnJvd3NlcnMuCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgPT09
IChYTUxIdHRwUmVxdWVzdC5ET05FIHx8IDQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBTb21lIGJyb3dzZXJzIGhhdmUgaXNzdWVzIHdoZXJlIG9ucmVhZHlzdGF0ZWNoYW5nZSBjYW4g
YmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlIHNhbWUgdmFsdWUuCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFu
Z2UiLCBvblJlYWR5U3RhdGVDaGFuZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChy
ZXF1ZXN0LnN0YXR1cyA+PSAyMDAgJiYgcmVxdWVzdC5zdGF0dXMgPCAzMDApIHx8IChyZXF1ZXN0
LnN0YXR1cyA9PT0gMCAmJiAoIV9kb21NYW5hZ2VtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkRvbU1hbmFnZW1lbnQiXS5Jc1dpbmRvd09iamVjdEV4aXN0KCkgfHwgX3RoaXMuSXNG
aWxlVVJMKCkpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VjY2VzcyghdXNl
QXJyYXlCdWZmZXIgPyByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2UsIHJl
cXVlc3QucmVzcG9uc2VVUkwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBy
ZXRyeVN0cmF0ZWd5ID0gX3RoaXMuRGVmYXVsdFJldHJ5U3RyYXRlZ3k7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmV0cnlTdHJhdGVneSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB3YWl0VGltZSA9IHJldHJ5U3RyYXRlZ3kobG9hZFVybCwgcmVxdWVzdCwgcmV0cnlJ
bmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRUaW1lICE9PSAtMSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHRoZSByZXF1ZXN0
IGZyb20gY29tcGxldGluZyBmb3IgcmV0cnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIsIG9uTG9hZEVuZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBuZXcgX3dlYlJlcXVlc3Rf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siV2ViUmVxdWVzdCJdKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHJ5SGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbiAo
KSB7IHJldHVybiByZXRyeUxvb3AocmV0cnlJbmRleCArIDEpOyB9LCB3YWl0VGltZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgZSA9IG5ldyBfbG9hZEZpbGVFcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJMb2FkRmlsZUVycm9yIl0oIkVycm9yIHN0YXR1czogIiArIHJlcXVlc3Quc3RhdHVzICsg
IiAiICsgcmVxdWVzdC5zdGF0dXNUZXh0ICsgIiAtIFVuYWJsZSB0byBsb2FkICIgKyBsb2FkVXJs
LCByZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvcihyZXF1ZXN0LCBlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
IHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsIG9uUmVhZHlTdGF0
ZUNoYW5nZSk7CisgICAgICAgICAgICAgICAgcmVxdWVzdC5zZW5kKCk7CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgcmV0cnlMb29wKDApOworICAgICAgICB9OworICAgICAgICAvLyBDYWNo
aW5nIGFsbCBmaWxlcworICAgICAgICBpZiAob2ZmbGluZVByb3ZpZGVyICYmIG9mZmxpbmVQcm92
aWRlci5lbmFibGVTY2VuZU9mZmxpbmUpIHsKKyAgICAgICAgICAgIHZhciBub09mZmxpbmVTdXBw
b3J0XzEgPSBmdW5jdGlvbiAocmVxdWVzdCkgeworICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0
ICYmIHJlcXVlc3Quc3RhdHVzID4gNDAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChvbkVy
cm9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHJlcXVlc3QpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWFib3J0ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3RGaWxlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIGxvYWRGcm9tT2ZmbGluZVN1
cHBvcnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETzogZGF0YWJhc2Ug
bmVlZHMgdG8gc3VwcG9ydCBhYm9ydGluZyBhbmQgc2hvdWxkIHJldHVybiBhIElGaWxlUmVxdWVz
dAorICAgICAgICAgICAgICAgIGlmIChhYm9ydGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG9mZmxpbmVQcm92
aWRlcikgeworICAgICAgICAgICAgICAgICAgICBvZmZsaW5lUHJvdmlkZXIubG9hZEZpbGUodXJs
LCBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhYm9ydGVk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TdWNjZXNzKGRhdGEpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVJlcXVlc3Qu
b25Db21wbGV0ZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGZpbGVSZXF1ZXN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgfSwgb25Qcm9ncmVzcyA/IGZ1bmN0aW9uIChldmVudCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhYm9ydGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb25Qcm9ncmVzcyhldmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsIG5vT2ZmbGluZVN1cHBvcnRfMSwgdXNlQXJy
YXlCdWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBvZmZsaW5lUHJvdmlkZXIub3Blbihsb2FkRnJvbU9mZmxpbmVTdXBwb3J0LCBub09mZmxpbmVT
dXBwb3J0XzEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVxdWVz
dEZpbGUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmlsZVJlcXVlc3Q7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIGxvYWRlZCBkb2N1bWVudCB3YXMgYWNjZXNz
ZWQgdmlhIGBmaWxlOmAtUHJvdG9jb2wuCisgICAgICogQHJldHVybnMgYm9vbGVhbgorICAgICAq
LworICAgIEZpbGVUb29scy5Jc0ZpbGVVUkwgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biBsb2NhdGlvbi5wcm90b2NvbCA9PT0gImZpbGU6IjsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEdldHMgb3Igc2V0cyB0aGUgcmV0cnkgc3RyYXRlZ3kgdG8gYXBwbHkgd2hlbiBhbiBlcnJvciBo
YXBwZW5zIHdoaWxlIGxvYWRpbmcgYW4gYXNzZXQKKyAgICAgKi8KKyAgICBGaWxlVG9vbHMuRGVm
YXVsdFJldHJ5U3RyYXRlZ3kgPSBfcmV0cnlTdHJhdGVneV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJSZXRyeVN0cmF0ZWd5Il0uRXhwb25lbnRpYWxCYWNrb2ZmKCk7CisgICAgLyoqCisg
ICAgICogR2V0cyBvciBzZXRzIHRoZSBiYXNlIFVSTCB0byB1c2UgdG8gbG9hZCBhc3NldHMKKyAg
ICAgKi8KKyAgICBGaWxlVG9vbHMuQmFzZVVybCA9ICIiOworICAgIC8qKgorICAgICAqIERlZmF1
bHQgYmVoYXZpb3VyIGZvciBjb3JzIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgKiBJdCBjYW4g
YmUgYSBzdHJpbmcgaWYgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzIGlkZW50aWNhbCBpbiB0aGUg
ZW50aXJlIGFwcC4KKyAgICAgKiBPciBhIGNhbGxiYWNrIHRvIGJlIGFibGUgdG8gc2V0IGl0IHBl
ciB1cmwgb3Igb24gYSBncm91cCBvZiB0aGVtIChpbiBjYXNlIG9mIFZpZGVvIHNvdXJjZSBmb3Ig
aW5zdGFuY2UpCisgICAgICovCisgICAgRmlsZVRvb2xzLkNvcnNCZWhhdmlvciA9ICJhbm9ueW1v
dXMiOworICAgIC8qKgorICAgICAqIEdldHMgb3Igc2V0cyBhIGZ1bmN0aW9uIHVzZWQgdG8gcHJl
LXByb2Nlc3MgdXJsIGJlZm9yZSB1c2luZyB0aGVtIHRvIGxvYWQgYXNzZXRzCisgICAgICovCisg
ICAgRmlsZVRvb2xzLlByZXByb2Nlc3NVcmwgPSBmdW5jdGlvbiAodXJsKSB7CisgICAgICAgIHJl
dHVybiB1cmw7CisgICAgfTsKKyAgICByZXR1cm4gRmlsZVRvb2xzOworfSgpKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9NaXNjL2ZpbGVzSW5wdXQudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlzYy9maWxlc0lucHV0LnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRmls
ZXNJbnB1dCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGaWxlc0lucHV0
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWxlc0lucHV0OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTG9hZGluZ19zY2VuZUxvYWRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTG9hZGluZy9zY2VuZUxvYWRlciAqLyAiLi9M
b2FkaW5nL3NjZW5lTG9hZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
bG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9maWxlc0lucHV0U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZmlsZXNJbnB1dFN0b3JlICovICIuL01pc2Mv
ZmlsZXNJbnB1dFN0b3JlLnRzIik7CisKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gaGVscCBt
YW5hZ2luZyBmaWxlIHBpY2tpbmcgYW5kIGRyYWcnbidkcm9wCisgKi8KK3ZhciBGaWxlc0lucHV0
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMg
YSBuZXcgRmlsZXNJbnB1dAorICAgICAqIEBwYXJhbSBlbmdpbmUgZGVmaW5lcyB0aGUgcmVuZGVy
aW5nIGVuZ2luZQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5l
CisgICAgICogQHBhcmFtIHNjZW5lTG9hZGVkQ2FsbGJhY2sgY2FsbGJhY2sgY2FsbGVkIHdoZW4g
c2NlbmUgaXMgbG9hZGVkCisgICAgICogQHBhcmFtIHByb2dyZXNzQ2FsbGJhY2sgY2FsbGJhY2sg
Y2FsbGVkIHRvIHRyYWNrIHByb2dyZXNzCisgICAgICogQHBhcmFtIGFkZGl0aW9uYWxSZW5kZXJM
b29wTG9naWNDYWxsYmFjayBjYWxsYmFjayBjYWxsZWQgdG8gYWRkIHVzZXIgbG9naWMgdG8gdGhl
IHJlbmRlcmluZyBsb29wCisgICAgICogQHBhcmFtIHRleHR1cmVMb2FkaW5nQ2FsbGJhY2sgY2Fs
bGJhY2sgY2FsbGVkIHdoZW4gYSB0ZXh0dXJlIGlzIGxvYWRpbmcKKyAgICAgKiBAcGFyYW0gc3Rh
cnRpbmdQcm9jZXNzaW5nRmlsZXNDYWxsYmFjayBjYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgc3lz
dGVtIGlzIGFib3V0IHRvIHByb2Nlc3MgYWxsIGZpbGVzCisgICAgICogQHBhcmFtIG9uUmVsb2Fk
Q2FsbGJhY2sgY2FsbGJhY2sgY2FsbGVkIHdoZW4gYSByZWxvYWQgaXMgcmVxdWVzdGVkCisgICAg
ICogQHBhcmFtIGVycm9yQ2FsbGJhY2sgY2FsbGJhY2sgY2FsbCBpZiBhbiBlcnJvciBvY2N1cnMK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBGaWxlc0lucHV0KGVuZ2luZSwgc2NlbmUsIHNjZW5lTG9h
ZGVkQ2FsbGJhY2ssIHByb2dyZXNzQ2FsbGJhY2ssIGFkZGl0aW9uYWxSZW5kZXJMb29wTG9naWND
YWxsYmFjaywgdGV4dHVyZUxvYWRpbmdDYWxsYmFjaywgc3RhcnRpbmdQcm9jZXNzaW5nRmlsZXND
YWxsYmFjaywgb25SZWxvYWRDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykgeworICAgICAgICAvKioK
KyAgICAgICAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gYSBmaWxlIGlzIHByb2Nlc3NlZAorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5vblByb2Nlc3NGaWxlQ2FsbGJhY2sgPSBmdW5jdGlvbiAo
KSB7IHJldHVybiB0cnVlOyB9OworICAgICAgICB0aGlzLl9lbmdpbmUgPSBlbmdpbmU7CisgICAg
ICAgIHRoaXMuX2N1cnJlbnRTY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9zY2VuZUxvYWRl
ZENhbGxiYWNrID0gc2NlbmVMb2FkZWRDYWxsYmFjazsKKyAgICAgICAgdGhpcy5fcHJvZ3Jlc3ND
YWxsYmFjayA9IHByb2dyZXNzQ2FsbGJhY2s7CisgICAgICAgIHRoaXMuX2FkZGl0aW9uYWxSZW5k
ZXJMb29wTG9naWNDYWxsYmFjayA9IGFkZGl0aW9uYWxSZW5kZXJMb29wTG9naWNDYWxsYmFjazsK
KyAgICAgICAgdGhpcy5fdGV4dHVyZUxvYWRpbmdDYWxsYmFjayA9IHRleHR1cmVMb2FkaW5nQ2Fs
bGJhY2s7CisgICAgICAgIHRoaXMuX3N0YXJ0aW5nUHJvY2Vzc2luZ0ZpbGVzQ2FsbGJhY2sgPSBz
dGFydGluZ1Byb2Nlc3NpbmdGaWxlc0NhbGxiYWNrOworICAgICAgICB0aGlzLl9vblJlbG9hZENh
bGxiYWNrID0gb25SZWxvYWRDYWxsYmFjazsKKyAgICAgICAgdGhpcy5fZXJyb3JDYWxsYmFjayA9
IGVycm9yQ2FsbGJhY2s7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlc0lu
cHV0LCAiRmlsZXNUb0xvYWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBMaXN0IG9mIGZp
bGVzIHJlYWR5IHRvIGJlIGxvYWRlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gX2ZpbGVzSW5wdXRTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJGaWxlc0lucHV0U3RvcmUiXS5GaWxlc1RvTG9hZDsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgLyoqCisgICAgICogQ2FsbHMgdGhpcyBmdW5jdGlvbiB0byBsaXN0ZW4g
dG8gZHJhZyduJ2Ryb3AgZXZlbnRzIG9uIGEgc3BlY2lmaWMgRE9NIGVsZW1lbnQKKyAgICAgKiBA
cGFyYW0gZWxlbWVudFRvTW9uaXRvciBkZWZpbmVzIHRoZSBET00gZWxlbWVudCB0byB0cmFjawor
ICAgICAqLworICAgIEZpbGVzSW5wdXQucHJvdG90eXBlLm1vbml0b3JFbGVtZW50Rm9yRHJhZ05E
cm9wID0gZnVuY3Rpb24gKGVsZW1lbnRUb01vbml0b3IpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgaWYgKGVsZW1lbnRUb01vbml0b3IpIHsKKyAgICAgICAgICAgIHRoaXMu
X2VsZW1lbnRUb01vbml0b3IgPSBlbGVtZW50VG9Nb25pdG9yOworICAgICAgICAgICAgdGhpcy5f
ZHJhZ0VudGVySGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7IF90aGlzLmRyYWcoZSk7IH07CisgICAg
ICAgICAgICB0aGlzLl9kcmFnT3ZlckhhbmRsZXIgPSBmdW5jdGlvbiAoZSkgeyBfdGhpcy5kcmFn
KGUpOyB9OworICAgICAgICAgICAgdGhpcy5fZHJvcEhhbmRsZXIgPSBmdW5jdGlvbiAoZSkgeyBf
dGhpcy5kcm9wKGUpOyB9OworICAgICAgICAgICAgdGhpcy5fZWxlbWVudFRvTW9uaXRvci5hZGRF
dmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCB0aGlzLl9kcmFnRW50ZXJIYW5kbGVyLCBmYWxzZSk7
CisgICAgICAgICAgICB0aGlzLl9lbGVtZW50VG9Nb25pdG9yLmFkZEV2ZW50TGlzdGVuZXIoImRy
YWdvdmVyIiwgdGhpcy5fZHJhZ092ZXJIYW5kbGVyLCBmYWxzZSk7CisgICAgICAgICAgICB0aGlz
Ll9lbGVtZW50VG9Nb25pdG9yLmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCB0aGlzLl9kcm9wSGFu
ZGxlciwgZmFsc2UpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNl
IGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcworICAgICAqLworICAgIEZpbGVzSW5wdXQucHJvdG90
eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fZWxlbWVudFRv
TW9uaXRvcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMu
X2VsZW1lbnRUb01vbml0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwgdGhpcy5f
ZHJhZ0VudGVySGFuZGxlcik7CisgICAgICAgIHRoaXMuX2VsZW1lbnRUb01vbml0b3IucmVtb3Zl
RXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCB0aGlzLl9kcmFnT3ZlckhhbmRsZXIpOworICAgICAg
ICB0aGlzLl9lbGVtZW50VG9Nb25pdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyb3AiLCB0aGlz
Ll9kcm9wSGFuZGxlcik7CisgICAgfTsKKyAgICBGaWxlc0lucHV0LnByb3RvdHlwZS5yZW5kZXJG
dW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2FkZGl0aW9uYWxSZW5k
ZXJMb29wTG9naWNDYWxsYmFjaykgeworICAgICAgICAgICAgdGhpcy5fYWRkaXRpb25hbFJlbmRl
ckxvb3BMb2dpY0NhbGxiYWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2N1cnJl
bnRTY2VuZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHR1cmVMb2FkaW5nQ2FsbGJhY2sp
IHsKKyAgICAgICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gdGhpcy5fY3VycmVudFNjZW5lLmdl
dFdhaXRpbmdJdGVtc0NvdW50KCk7CisgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA+IDAp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZUxvYWRpbmdDYWxsYmFjayhyZW1h
aW5pbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX2N1cnJlbnRTY2VuZS5yZW5kZXIoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgRmlsZXNJ
bnB1dC5wcm90b3R5cGUuZHJhZyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIGUuc3RvcFByb3Bh
Z2F0aW9uKCk7CisgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICB9OworICAgIEZpbGVz
SW5wdXQucHJvdG90eXBlLmRyb3AgPSBmdW5jdGlvbiAoZXZlbnREcm9wKSB7CisgICAgICAgIGV2
ZW50RHJvcC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgZXZlbnREcm9wLnByZXZlbnREZWZh
dWx0KCk7CisgICAgICAgIHRoaXMubG9hZEZpbGVzKGV2ZW50RHJvcCk7CisgICAgfTsKKyAgICBG
aWxlc0lucHV0LnByb3RvdHlwZS5fdHJhdmVyc2VGb2xkZXIgPSBmdW5jdGlvbiAoZm9sZGVyLCBm
aWxlcywgcmVtYWluaW5nLCBjYWxsYmFjaykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICB2YXIgcmVhZGVyID0gZm9sZGVyLmNyZWF0ZVJlYWRlcigpOworICAgICAgICB2YXIg
cmVsYXRpdmVQYXRoID0gZm9sZGVyLmZ1bGxQYXRoLnJlcGxhY2UoL15cLy8sICIiKS5yZXBsYWNl
KC8oLis/KVwvPyQvLCAiJDEvIik7CisgICAgICAgIHJlYWRlci5yZWFkRW50cmllcyhmdW5jdGlv
biAoZW50cmllcykgeworICAgICAgICAgICAgcmVtYWluaW5nLmNvdW50ICs9IGVudHJpZXMubGVu
Z3RoOworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBlbnRyaWVzXzEgPSBlbnRyaWVzOyBf
aSA8IGVudHJpZXNfMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgZW50cnkg
PSBlbnRyaWVzXzFbX2ldOworICAgICAgICAgICAgICAgIGlmIChlbnRyeS5pc0ZpbGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZW50cnkuZmlsZShmdW5jdGlvbiAoZmlsZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsZS5jb3JyZWN0TmFtZSA9IHJlbGF0aXZlUGF0aCArIGZpbGUubmFt
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoLS1yZW1haW5pbmcuY291bnQgPT09IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoZW50cnkuaXNEaXJlY3RvcnkpIHsKKyAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuX3RyYXZlcnNlRm9sZGVyKGVudHJ5LCBmaWxlcywgcmVtYWluaW5nLCBjYWxsYmFjayk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKC0tcmVtYWlu
aW5nLmNvdW50KSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSk7CisgICAgfTsKKyAgICBGaWxlc0lucHV0LnByb3RvdHlwZS5fcHJvY2Vzc0Zp
bGVzID0gZnVuY3Rpb24gKGZpbGVzKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmls
ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBuYW1lID0gZmlsZXNbaV0uY29ycmVj
dE5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIHZhciBleHRlbnNpb24gPSBuYW1lLnNw
bGl0KCcuJykucG9wKCk7CisgICAgICAgICAgICBpZiAoIXRoaXMub25Qcm9jZXNzRmlsZUNhbGxi
YWNrKGZpbGVzW2ldLCBuYW1lLCBleHRlbnNpb24pKSB7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGV4dGVuc2lvbiA9PT0gImJhYnls
b24iIHx8IGV4dGVuc2lvbiA9PT0gInN0bCIgfHwgZXh0ZW5zaW9uID09PSAib2JqIiB8fCBleHRl
bnNpb24gPT09ICJnbHRmIiB8fCBleHRlbnNpb24gPT09ICJnbGIiKQorICAgICAgICAgICAgICAg
ICYmIG5hbWUuaW5kZXhPZigiLmJpbmFyeS5iYWJ5bG9uIikgPT09IC0xICYmIG5hbWUuaW5kZXhP
ZigiLmluY3JlbWVudGFsLmJhYnlsb24iKSA9PT0gLTEpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9zY2VuZUZpbGVUb0xvYWQgPSBmaWxlc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEZpbGVzSW5wdXQuRmlsZXNUb0xvYWRbbmFtZV0gPSBmaWxlc1tpXTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogTG9hZCBmaWxlcyBmcm9tIGEgZHJvcCBldmVudAorICAgICAq
IEBwYXJhbSBldmVudCBkZWZpbmVzIHRoZSBkcm9wIGV2ZW50IHRvIHVzZSBhcyBzb3VyY2UKKyAg
ICAgKi8KKyAgICBGaWxlc0lucHV0LnByb3RvdHlwZS5sb2FkRmlsZXMgPSBmdW5jdGlvbiAoZXZl
bnQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgLy8gSGFuZGxpbmcgZGF0
YSB0cmFuc2ZlciB2aWEgZHJhZyduJ2Ryb3AKKyAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmRh
dGFUcmFuc2ZlciAmJiBldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMpIHsKKyAgICAgICAgICAgIHRo
aXMuX2ZpbGVzVG9Mb2FkID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzOworICAgICAgICB9Cisg
ICAgICAgIC8vIEhhbmRsaW5nIGZpbGVzIGZyb20gaW5wdXQgZmlsZXMKKyAgICAgICAgaWYgKGV2
ZW50ICYmIGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuZmlsZXMpIHsKKyAgICAgICAgICAg
IHRoaXMuX2ZpbGVzVG9Mb2FkID0gZXZlbnQudGFyZ2V0LmZpbGVzOworICAgICAgICB9CisgICAg
ICAgIGlmICghdGhpcy5fZmlsZXNUb0xvYWQgfHwgdGhpcy5fZmlsZXNUb0xvYWQubGVuZ3RoID09
PSAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X3N0YXJ0aW5nUHJvY2Vzc2luZ0ZpbGVzQ2FsbGJhY2spIHsKKyAgICAgICAgICAgIHRoaXMuX3N0
YXJ0aW5nUHJvY2Vzc2luZ0ZpbGVzQ2FsbGJhY2sodGhpcy5fZmlsZXNUb0xvYWQpOworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl9maWxlc1RvTG9hZCAmJiB0aGlzLl9maWxlc1RvTG9hZC5s
ZW5ndGggPiAwKSB7CisgICAgICAgICAgICB2YXIgZmlsZXNfMSA9IG5ldyBBcnJheSgpOworICAg
ICAgICAgICAgdmFyIGZvbGRlcnMgPSBbXTsKKyAgICAgICAgICAgIHZhciBpdGVtcyA9IGV2ZW50
LmRhdGFUcmFuc2ZlciA/IGV2ZW50LmRhdGFUcmFuc2Zlci5pdGVtcyA6IG51bGw7CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbGVzVG9Mb2FkLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgdmFyIGZpbGVUb0xvYWQgPSB0aGlzLl9maWxlc1RvTG9hZFtpXTsK
KyAgICAgICAgICAgICAgICB2YXIgbmFtZV8xID0gZmlsZVRvTG9hZC5uYW1lLnRvTG93ZXJDYXNl
KCk7CisgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gdm9pZCAwOworICAgICAgICAgICAgICAg
IGZpbGVUb0xvYWQuY29ycmVjdE5hbWUgPSBuYW1lXzE7CisgICAgICAgICAgICAgICAgaWYgKGl0
ZW1zKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVtLmdldEFzRW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVudHJ5ID0gaXRlbS5nZXRBc0VudHJ5KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS53ZWJraXRHZXRBc0VudHJ5KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IGl0ZW0ud2Via2l0R2V0QXNFbnRyeSgpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICghZW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNfMS5wdXNoKGZpbGVUb0xvYWQp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmb2xkZXJzLnB1c2goZW50cnkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNfMS5wdXNoKGZp
bGVUb0xvYWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZvbGRlcnMubGVuZ3RoID09PSAwKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0ZpbGVzKGZpbGVzXzEpOworICAgICAgICAgICAgICAg
IHRoaXMuX3Byb2Nlc3NSZWxvYWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSB7IGNvdW50OiBmb2xkZXJzLmxlbmd0
aCB9OworICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgZm9sZGVyc18xID0gZm9sZGVy
czsgX2kgPCBmb2xkZXJzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBmb2xkZXIgPSBmb2xkZXJzXzFbX2ldOworICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmF2
ZXJzZUZvbGRlcihmb2xkZXIsIGZpbGVzXzEsIHJlbWFpbmluZywgZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NGaWxlcyhmaWxlc18xKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcuY291bnQgPT09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcHJvY2Vzc1JlbG9hZCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIEZpbGVzSW5wdXQucHJvdG90
eXBlLl9wcm9jZXNzUmVsb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fb25S
ZWxvYWRDYWxsYmFjaykgeworICAgICAgICAgICAgdGhpcy5fb25SZWxvYWRDYWxsYmFjayh0aGlz
Ll9zY2VuZUZpbGVUb0xvYWQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5yZWxvYWQoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVs
b2FkIHRoZSBjdXJyZW50IHNjZW5lIGZyb20gdGhlIGxvYWRlZCBmaWxlcworICAgICAqLworICAg
IEZpbGVzSW5wdXQucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IF90aGlzID0gdGhpczsKKyAgICAgICAgLy8gSWYgYSBzY2VuZSBmaWxlIGhhcyBiZWVuIHByb3Zp
ZGVkCisgICAgICAgIGlmICh0aGlzLl9zY2VuZUZpbGVUb0xvYWQpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9jdXJyZW50U2NlbmUpIHsKKyAgICAgICAgICAgICAgICBpZiAoX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLmVycm9yc0NvdW50ID4gMCkg
eworICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siTG9nZ2VyIl0uQ2xlYXJMb2dDYWNoZSgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc3RvcFJlbmRlckxvb3AoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIF9Mb2FkaW5nX3NjZW5lTG9hZGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlNjZW5lTG9hZGVyIl0uTG9hZEFzeW5jKCJmaWxlOiIsIHRoaXMuX3NjZW5lRmls
ZVRvTG9hZCwgdGhpcy5fZW5naW5lLCBmdW5jdGlvbiAocHJvZ3Jlc3MpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoX3RoaXMuX3Byb2dyZXNzQ2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAg
X3RoaXMuX3Byb2dyZXNzQ2FsbGJhY2socHJvZ3Jlc3MpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHNjZW5lKSB7CisgICAgICAgICAgICAgICAgaWYg
KF90aGlzLl9jdXJyZW50U2NlbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2N1cnJl
bnRTY2VuZS5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF90
aGlzLl9jdXJyZW50U2NlbmUgPSBzY2VuZTsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX3Nj
ZW5lTG9hZGVkQ2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NjZW5lTG9h
ZGVkQ2FsbGJhY2soX3RoaXMuX3NjZW5lRmlsZVRvTG9hZCwgX3RoaXMuX2N1cnJlbnRTY2VuZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRleHR1cmVz
IGFuZCBzaGFkZXJzIHRvIGJlIHJlYWR5CisgICAgICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnRT
Y2VuZS5leGVjdXRlV2hlblJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAg
X3RoaXMuX2VuZ2luZS5ydW5SZW5kZXJMb29wKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLnJlbmRlckZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVy
cm9yKSB7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9lcnJvckNhbGxiYWNrKSB7CisgICAg
ICAgICAgICAgICAgICAgIF90aGlzLl9lcnJvckNhbGxiYWNrKF90aGlzLl9zY2VuZUZpbGVUb0xv
YWQsIF90aGlzLl9jdXJyZW50U2NlbmUsIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVy
cm9yKCJQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIC5iYWJ5bG9uIGZpbGUuIik7CisgICAgICAgIH0K
KyAgICB9OworICAgIHJldHVybiBGaWxlc0lucHV0OworfSgpKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NaXNjL2ZpbGVzSW5wdXRTdG9yZS50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvZmlsZXNJbnB1dFN0b3JlLnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBGaWxlc0lucHV0U3RvcmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRmlsZXNJbnB1dFN0b3JlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWxlc0lucHV0U3Rv
cmU7IH0pOworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGhlbHAgbWFuYWdpbmcgZmlsZSBwaWNraW5n
IGFuZCBkcmFnJ24nZHJvcAorICogRmlsZSBTdG9yYWdlCisgKi8KK3ZhciBGaWxlc0lucHV0U3Rv
cmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRmlsZXNJbnB1
dFN0b3JlKCkgeworICAgIH0KKyAgICAvKioKKyAgICAgKiBMaXN0IG9mIGZpbGVzIHJlYWR5IHRv
IGJlIGxvYWRlZAorICAgICAqLworICAgIEZpbGVzSW5wdXRTdG9yZS5GaWxlc1RvTG9hZCA9IHt9
OworICAgIHJldHVybiBGaWxlc0lucHV0U3RvcmU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL01pc2MvZ3JhZGllbnRzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vTWlzYy9ncmFkaWVudHMudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbG9yR3JhZGllbnQsIENv
bG9yM0dyYWRpZW50LCBGYWN0b3JHcmFkaWVudCwgR3JhZGllbnRIZWxwZXIgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3JHcmFkaWVudCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gQ29sb3JHcmFkaWVudDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvcjNHcmFkaWVu
dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29sb3IzR3JhZGllbnQ7IH0pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRmFjdG9yR3JhZGllbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZhY3RvckdyYWRpZW50
OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdyYWRpZW50SGVscGVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBHcmFkaWVudEhlbHBlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIp
OworCisvKiogQ2xhc3MgdXNlZCB0byBzdG9yZSBjb2xvcjQgZ3JhZGllbnQgKi8KK3ZhciBDb2xv
ckdyYWRpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIENv
bG9yR3JhZGllbnQoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIFdpbGwgZ2V0IGEgY29sb3Ig
cGlja2VkIHJhbmRvbWx5IGJldHdlZW4gY29sb3IxIGFuZCBjb2xvcjIuCisgICAgICogSWYgY29s
b3IyIGlzIHVuZGVmaW5lZCB0aGVuIGNvbG9yMSB3aWxsIGJlIHVzZWQKKyAgICAgKiBAcGFyYW0g
cmVzdWx0IGRlZmluZXMgdGhlIHRhcmdldCBDb2xvcjQgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbgor
ICAgICAqLworICAgIENvbG9yR3JhZGllbnQucHJvdG90eXBlLmdldENvbG9yVG9SZWYgPSBmdW5j
dGlvbiAocmVzdWx0KSB7CisgICAgICAgIGlmICghdGhpcy5jb2xvcjIpIHsKKyAgICAgICAgICAg
IHJlc3VsdC5jb3B5RnJvbSh0aGlzLmNvbG9yMSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siQ29sb3I0Il0uTGVycFRvUmVmKHRoaXMuY29sb3IxLCB0aGlzLmNvbG9yMiwgTWF0aC5y
YW5kb20oKSwgcmVzdWx0KTsKKyAgICB9OworICAgIHJldHVybiBDb2xvckdyYWRpZW50OworfSgp
KTsKKworLyoqIENsYXNzIHVzZWQgdG8gc3RvcmUgY29sb3IgMyBncmFkaWVudCAqLwordmFyIENv
bG9yM0dyYWRpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9u
IENvbG9yM0dyYWRpZW50KCkgeworICAgIH0KKyAgICByZXR1cm4gQ29sb3IzR3JhZGllbnQ7Cit9
KCkpOworCisvKiogQ2xhc3MgdXNlZCB0byBzdG9yZSBmYWN0b3IgZ3JhZGllbnQgKi8KK3ZhciBG
YWN0b3JHcmFkaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlv
biBGYWN0b3JHcmFkaWVudCgpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogV2lsbCBnZXQgYSBu
dW1iZXIgcGlja2VkIHJhbmRvbWx5IGJldHdlZW4gZmFjdG9yMSBhbmQgZmFjdG9yMi4KKyAgICAg
KiBJZiBmYWN0b3IyIGlzIHVuZGVmaW5lZCB0aGVuIGZhY3RvcjEgd2lsbCBiZSB1c2VkCisgICAg
ICogQHJldHVybnMgdGhlIHBpY2tlZCBudW1iZXIKKyAgICAgKi8KKyAgICBGYWN0b3JHcmFkaWVu
dC5wcm90b3R5cGUuZ2V0RmFjdG9yID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5m
YWN0b3IyID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZhY3RvcjE7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZmFjdG9yMSArICgodGhpcy5mYWN0b3Iy
IC0gdGhpcy5mYWN0b3IxKSAqIE1hdGgucmFuZG9tKCkpOworICAgIH07CisgICAgcmV0dXJuIEZh
Y3RvckdyYWRpZW50OworfSgpKTsKKworLyoqCisgKiBIZWxwZXIgdXNlZCB0byBzaW1wbGlmeSBz
b21lIGdlbmVyaWMgZ3JhZGllbnQgdGFza3MKKyAqLwordmFyIEdyYWRpZW50SGVscGVyID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIEdyYWRpZW50SGVscGVyKCkg
eworICAgIH0KKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGdyYWRpZW50IGZyb20g
YW4gYXJyYXkgb2YgSVZhbHVlR3JhZGllbnQKKyAgICAgKiBAcGFyYW0gcmF0aW8gZGVmaW5lcyB0
aGUgY3VycmVudCByYXRpbyB0byBnZXQKKyAgICAgKiBAcGFyYW0gZ3JhZGllbnRzIGRlZmluZXMg
dGhlIGFycmF5IG9mIElWYWx1ZUdyYWRpZW50CisgICAgICogQHBhcmFtIHVwZGF0ZUZ1bmMgZGVm
aW5lcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBnZXQgdGhlIGZpbmFsIHZhbHVlIGZy
b20gdGhlIHNlbGVjdGVkIGdyYWRpZW50cworICAgICAqLworICAgIEdyYWRpZW50SGVscGVyLkdl
dEN1cnJlbnRHcmFkaWVudCA9IGZ1bmN0aW9uIChyYXRpbywgZ3JhZGllbnRzLCB1cGRhdGVGdW5j
KSB7CisgICAgICAgIGZvciAodmFyIGdyYWRpZW50SW5kZXggPSAwOyBncmFkaWVudEluZGV4IDwg
Z3JhZGllbnRzLmxlbmd0aCAtIDE7IGdyYWRpZW50SW5kZXgrKykgeworICAgICAgICAgICAgdmFy
IGN1cnJlbnRHcmFkaWVudCA9IGdyYWRpZW50c1tncmFkaWVudEluZGV4XTsKKyAgICAgICAgICAg
IHZhciBuZXh0R3JhZGllbnQgPSBncmFkaWVudHNbZ3JhZGllbnRJbmRleCArIDFdOworICAgICAg
ICAgICAgaWYgKHJhdGlvID49IGN1cnJlbnRHcmFkaWVudC5ncmFkaWVudCAmJiByYXRpbyA8PSBu
ZXh0R3JhZGllbnQuZ3JhZGllbnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAocmF0
aW8gLSBjdXJyZW50R3JhZGllbnQuZ3JhZGllbnQpIC8gKG5leHRHcmFkaWVudC5ncmFkaWVudCAt
IGN1cnJlbnRHcmFkaWVudC5ncmFkaWVudCk7CisgICAgICAgICAgICAgICAgdXBkYXRlRnVuYyhj
dXJyZW50R3JhZGllbnQsIG5leHRHcmFkaWVudCwgc2NhbGUpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBVc2UgbGFzdCBpbmRl
eCBpZiBvdmVyCisgICAgICAgIHZhciBsYXN0SW5kZXggPSBncmFkaWVudHMubGVuZ3RoIC0gMTsK
KyAgICAgICAgdXBkYXRlRnVuYyhncmFkaWVudHNbbGFzdEluZGV4XSwgZ3JhZGllbnRzW2xhc3RJ
bmRleF0sIDEuMCk7CisgICAgfTsKKyAgICByZXR1cm4gR3JhZGllbnRIZWxwZXI7Cit9KCkpOwor
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2MvZ3VpZC50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL2d1aWQudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBHVUlEICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdVSUQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEdVSUQ7
IH0pOworLyoqCisgKiBDbGFzcyB1c2VkIHRvIG1hbmlwdWxhdGUgR1VJRHMKKyAqLwordmFyIEdV
SUQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gR1VJRCgpIHsK
KyAgICB9CisgICAgLyoqCisgICAgICogSW1wbGVtZW50YXRpb24gZnJvbSBodHRwOi8vc3RhY2tv
dmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWlu
LWphdmFzY3JpcHQvMjExNzUyMyNhbnN3ZXItMjExNzUyMworICAgICAqIEJlIGF3YXJlIE1hdGgu
cmFuZG9tKCkgY291bGQgY2F1c2UgY29sbGlzaW9ucywgYnV0OgorICAgICAqICJBbGwgYnV0IDYg
b2YgdGhlIDEyOCBiaXRzIG9mIHRoZSBJRCBhcmUgcmFuZG9tbHkgZ2VuZXJhdGVkLCB3aGljaCBt
ZWFucyB0aGF0IGZvciBhbnkgdHdvIGlkcywgdGhlcmUncyBhIDEgaW4gMl5eMTIyIChvciA1LjN4
MTBeXjM2KSBjaGFuY2UgdGhleSdsbCBjb2xsaWRlIgorICAgICAqIEByZXR1cm5zIGEgcHNldWRv
IHJhbmRvbSBpZAorICAgICAqLworICAgIEdVSUQuUmFuZG9tSWQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBs
YWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7CisgICAgICAgICAgICB2YXIgciA9IE1hdGgucmFu
ZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpOworICAg
ICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpOworICAgICAgICB9KTsKKyAgICB9OworICAg
IHJldHVybiBHVUlEOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NaXNjL2lJ
bnNwZWN0YWJsZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL01pc2MvaUluc3BlY3RhYmxlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBJbnNwZWN0YWJsZVR5cGUgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zcGVjdGFibGVUeXBlIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBJbnNwZWN0YWJsZVR5cGU7IH0pOworLyoqCisgKiBFbnVtIHRoYXQgZGV0
ZXJtaW5lcyB0aGUgdGV4dC13cmFwcGluZyBtb2RlIHRvIHVzZS4KKyAqLwordmFyIEluc3BlY3Rh
YmxlVHlwZTsKKyhmdW5jdGlvbiAoSW5zcGVjdGFibGVUeXBlKSB7CisgICAgLyoqCisgICAgICog
Q2hlY2tib3ggZm9yIGJvb2xlYW5zCisgICAgICovCisgICAgSW5zcGVjdGFibGVUeXBlW0luc3Bl
Y3RhYmxlVHlwZVsiQ2hlY2tib3giXSA9IDBdID0gIkNoZWNrYm94IjsKKyAgICAvKioKKyAgICAg
KiBTbGlkZXJzIGZvciBudW1iZXJzCisgICAgICovCisgICAgSW5zcGVjdGFibGVUeXBlW0luc3Bl
Y3RhYmxlVHlwZVsiU2xpZGVyIl0gPSAxXSA9ICJTbGlkZXIiOworICAgIC8qKgorICAgICAqIFZl
Y3RvcjMKKyAgICAgKi8KKyAgICBJbnNwZWN0YWJsZVR5cGVbSW5zcGVjdGFibGVUeXBlWyJWZWN0
b3IzIl0gPSAyXSA9ICJWZWN0b3IzIjsKKyAgICAvKioKKyAgICAgKiBRdWF0ZXJuaW9ucworICAg
ICAqLworICAgIEluc3BlY3RhYmxlVHlwZVtJbnNwZWN0YWJsZVR5cGVbIlF1YXRlcm5pb24iXSA9
IDNdID0gIlF1YXRlcm5pb24iOworICAgIC8qKgorICAgICAqIENvbG9yMworICAgICAqLworICAg
IEluc3BlY3RhYmxlVHlwZVtJbnNwZWN0YWJsZVR5cGVbIkNvbG9yMyJdID0gNF0gPSAiQ29sb3Iz
IjsKKyAgICAvKioKKyAgICAgKiBTdHJpbmcKKyAgICAgKi8KKyAgICBJbnNwZWN0YWJsZVR5cGVb
SW5zcGVjdGFibGVUeXBlWyJTdHJpbmciXSA9IDVdID0gIlN0cmluZyI7Cit9KShJbnNwZWN0YWJs
ZVR5cGUgfHwgKEluc3BlY3RhYmxlVHlwZSA9IHt9KSk7CisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL01pc2MvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL01pc2MvaW5kZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogQW5kT3JOb3RFdmFsdWF0b3IsIEFzc2V0VGFza1N0YXRlLCBBYnN0
cmFjdEFzc2V0VGFzaywgQXNzZXRzUHJvZ3Jlc3NFdmVudCwgTWVzaEFzc2V0VGFzaywgVGV4dEZp
bGVBc3NldFRhc2ssIEJpbmFyeUZpbGVBc3NldFRhc2ssIEltYWdlQXNzZXRUYXNrLCBUZXh0dXJl
QXNzZXRUYXNrLCBDdWJlVGV4dHVyZUFzc2V0VGFzaywgSERSQ3ViZVRleHR1cmVBc3NldFRhc2ss
IEVxdWlSZWN0YW5ndWxhckN1YmVUZXh0dXJlQXNzZXRUYXNrLCBBc3NldHNNYW5hZ2VyLCBERFNU
b29scywgZXhwYW5kVG9Qcm9wZXJ0eSwgc2VyaWFsaXplLCBzZXJpYWxpemVBc1RleHR1cmUsIHNl
cmlhbGl6ZUFzQ29sb3IzLCBzZXJpYWxpemVBc0ZyZXNuZWxQYXJhbWV0ZXJzLCBzZXJpYWxpemVB
c1ZlY3RvcjIsIHNlcmlhbGl6ZUFzVmVjdG9yMywgc2VyaWFsaXplQXNNZXNoUmVmZXJlbmNlLCBz
ZXJpYWxpemVBc0NvbG9yQ3VydmVzLCBzZXJpYWxpemVBc0NvbG9yNCwgc2VyaWFsaXplQXNJbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLCBzZXJpYWxpemVBc1F1YXRlcm5pb24sIHNlcmlhbGl6
ZUFzTWF0cml4LCBzZXJpYWxpemVBc0NhbWVyYVJlZmVyZW5jZSwgU2VyaWFsaXphdGlvbkhlbHBl
ciwgRGVmZXJyZWQsIEVudmlyb25tZW50VGV4dHVyZVRvb2xzLCBNZXNoRXhwbG9kZXIsIEZpbGVz
SW5wdXQsIEN1YmVNYXBUb1NwaGVyaWNhbFBvbHlub21pYWxUb29scywgS2hyb25vc1RleHR1cmVD
b250YWluZXIsIEV2ZW50U3RhdGUsIE9ic2VydmVyLCBNdWx0aU9ic2VydmVyLCBPYnNlcnZhYmxl
LCBQZXJmb3JtYW5jZU1vbml0b3IsIFJvbGxpbmdBdmVyYWdlLCBQcm9taXNlUG9seWZpbGwsIFNj
ZW5lT3B0aW1pemF0aW9uLCBUZXh0dXJlT3B0aW1pemF0aW9uLCBIYXJkd2FyZVNjYWxpbmdPcHRp
bWl6YXRpb24sIFNoYWRvd3NPcHRpbWl6YXRpb24sIFBvc3RQcm9jZXNzZXNPcHRpbWl6YXRpb24s
IExlbnNGbGFyZXNPcHRpbWl6YXRpb24sIEN1c3RvbU9wdGltaXphdGlvbiwgUGFydGljbGVzT3B0
aW1pemF0aW9uLCBSZW5kZXJUYXJnZXRzT3B0aW1pemF0aW9uLCBNZXJnZU1lc2hlc09wdGltaXph
dGlvbiwgU2NlbmVPcHRpbWl6ZXJPcHRpb25zLCBTY2VuZU9wdGltaXplciwgU2NlbmVTZXJpYWxp
emVyLCBTbWFydEFycmF5LCBTbWFydEFycmF5Tm9EdXBsaWNhdGUsIFN0cmluZ0RpY3Rpb25hcnks
IFRhZ3MsIFRleHR1cmVUb29scywgVEdBVG9vbHMsIFRvb2xzLCBjbGFzc05hbWUsIEFzeW5jTG9v
cCwgVmlkZW9SZWNvcmRlciwgSm95c3RpY2tBeGlzLCBWaXJ0dWFsSm95c3RpY2ssIFdvcmtlclBv
b2wsIExvZ2dlciwgX1R5cGVTdG9yZSwgRmlsZXNJbnB1dFN0b3JlLCBEZWVwQ29waWVyLCBQaXZv
dFRvb2xzLCBQcmVjaXNpb25EYXRlLCBTY3JlZW5zaG90VG9vbHMsIFdlYlJlcXVlc3QsIEluc3Bl
Y3RhYmxlVHlwZSwgQlJERlRleHR1cmVUb29scywgUkdCRFRleHR1cmVUb29scywgQ29sb3JHcmFk
aWVudCwgQ29sb3IzR3JhZGllbnQsIEZhY3RvckdyYWRpZW50LCBHcmFkaWVudEhlbHBlciwgUGVy
ZkNvdW50ZXIsIFJldHJ5U3RyYXRlZ3ksIExvYWRGaWxlRXJyb3IsIEhEUlRvb2xzLCBQYW5vcmFt
YVRvQ3ViZU1hcFRvb2xzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfYW5kT3JOb3RFdmFsdWF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vYW5kT3JOb3RFdmFsdWF0b3IgKi8gIi4vTWlzYy9hbmRP
ck5vdEV2YWx1YXRvci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmRPck5vdEV2YWx1YXRvciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FuZE9yTm90RXZhbHVhdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkFuZE9yTm90RXZhbHVhdG9yIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2Fzc2V0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vYXNzZXRzTWFuYWdlciAqLyAiLi9NaXNjL2Fzc2V0c01h
bmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXNzZXRUYXNrU3RhdGUiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9hc3NldHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFz
c2V0VGFza1N0YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFic3RyYWN0QXNzZXRUYXNr
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYXNzZXRzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJBYnN0cmFjdEFzc2V0VGFzayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJB
c3NldHNQcm9ncmVzc0V2ZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYXNzZXRzTWFuYWdlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBc3NldHNQcm9ncmVzc0V2ZW50Il07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIk1lc2hBc3NldFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9h
c3NldHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1lc2hBc3NldFRhc2si
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVGV4dEZpbGVBc3NldFRhc2siLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9hc3NldHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRl
eHRGaWxlQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJpbmFyeUZpbGVBc3Nl
dFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hc3NldHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIkJpbmFyeUZpbGVBc3NldFRhc2siXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiSW1hZ2VBc3NldFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9hc3NldHNNYW5hZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkltYWdlQXNzZXRUYXNrIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlRleHR1cmVBc3NldFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9h
c3NldHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRleHR1cmVBc3NldFRh
c2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3ViZVRleHR1cmVBc3NldFRhc2siLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9hc3NldHNNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkN1YmVUZXh0dXJlQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhEUkN1
YmVUZXh0dXJlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYXNzZXRzTWFuYWdlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJIRFJDdWJlVGV4dHVyZUFzc2V0VGFzayJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZUFzc2V0VGFz
ayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Fzc2V0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siRXF1aVJlY3Rhbmd1bGFyQ3ViZVRleHR1cmVBc3NldFRhc2siXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQXNzZXRzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Fz
c2V0c01hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQXNzZXRzTWFuYWdlciJd
OyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGRzICovICIuL01pc2MvZGRz
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkREU1Rvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
ZGRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkREU1Rvb2xzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2Rl
Y29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZXhwYW5kVG9Qcm9wZXJ0eSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
ZXhwYW5kVG9Qcm9wZXJ0eSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bInNlcmlhbGl6ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1RleHR1
cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJz
ZXJpYWxpemVBc0NvbG9yMyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1sic2VyaWFsaXplQXNDb2xvcjMiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAic2VyaWFsaXplQXNGcmVzbmVsUGFyYW1ldGVycyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1sic2VyaWFsaXpl
QXNGcmVzbmVsUGFyYW1ldGVycyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVB
c1ZlY3RvcjIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bInNlcmlhbGl6ZUFzVmVjdG9yMiJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJzZXJpYWxpemVBc1ZlY3RvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInNlcmlhbGl6ZUFzVmVjdG9yMyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc01lc2hSZWZlcmVuY2UiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInNlcmlh
bGl6ZUFzTWVzaFJlZmVyZW5jZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVB
c0NvbG9yQ3VydmVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJzZXJpYWxpemVBc0NvbG9yQ3VydmVzIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgInNlcmlhbGl6ZUFzQ29sb3I0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJzZXJpYWxpemVBc0NvbG9yNCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0ltYWdlUHJvY2Vzc2luZ0NvbmZp
Z3VyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bInNlcmlhbGl6ZUFzSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1F1YXRlcm5pb24iLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInNl
cmlhbGl6ZUFzUXVhdGVybmlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVB
c01hdHJpeCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1sic2VyaWFsaXplQXNNYXRyaXgiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAic2VyaWFsaXplQXNDYW1lcmFSZWZlcmVuY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInNlcmlhbGl6ZUFzQ2FtZXJhUmVm
ZXJlbmNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNlcmlhbGl6YXRpb25IZWxwZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfZGVmZXJyZWRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vZGVmZXJyZWQgKi8gIi4vTWlzYy9kZWZlcnJlZC50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJEZWZlcnJlZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2RlZmVycmVkX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIkRlZmVycmVkIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2Vudmlyb25tZW50VGV4dHVyZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Vudmlyb25tZW50VGV4dHVyZVRvb2xz
ICovICIuL01pc2MvZW52aXJvbm1lbnRUZXh0dXJlVG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiRW52aXJvbm1lbnRUZXh0dXJlVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lbnZpcm9u
bWVudFRleHR1cmVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFbnZpcm9ubWVu
dFRleHR1cmVUb29scyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9tZXNoRXhw
bG9kZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vbWVzaEV4cGxvZGVyICovICIuL01pc2MvbWVzaEV4cGxvZGVyLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIk1lc2hFeHBsb2RlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21lc2hFeHBsb2Rl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJNZXNoRXhwbG9kZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmlsZXNJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9maWxlc0lucHV0ICovICIuL01pc2Mv
ZmlsZXNJbnB1dC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGaWxlc0lucHV0IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfZmlsZXNJbnB1dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJGaWxl
c0lucHV0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0hpZ2hEeW5hbWljUmFu
Z2VfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vSGlnaER5bmFtaWNSYW5nZS9pbmRleCAqLyAiLi9NaXNjL0hpZ2hEeW5hbWljUmFu
Z2UvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3ViZU1hcFRvU3BoZXJpY2FsUG9seW5v
bWlhbFRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSGlnaER5bmFtaWNSYW5nZV9pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDdWJlTWFwVG9TcGhlcmljYWxQb2x5bm9taWFs
VG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSERSVG9vbHMiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9IaWdoRHluYW1pY1JhbmdlX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIkhEUlRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhbm9yYW1hVG9DdWJlTWFw
VG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9IaWdoRHluYW1pY1JhbmdlX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBhbm9yYW1hVG9DdWJlTWFwVG9vbHMiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfa2hyb25vc1RleHR1cmVDb250YWluZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4va2hyb25v
c1RleHR1cmVDb250YWluZXIgKi8gIi4vTWlzYy9raHJvbm9zVGV4dHVyZUNvbnRhaW5lci50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJLaHJvbm9zVGV4dHVyZUNvbnRhaW5lciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX2tocm9ub3NUZXh0dXJlQ29udGFpbmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIktocm9ub3NUZXh0dXJlQ29udGFpbmVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkV2ZW50U3RhdGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJFdmVudFN0YXRlIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk9ic2VydmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siT2JzZXJ2ZXIiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTXVsdGlPYnNlcnZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX29i
c2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIk11bHRpT2JzZXJ2ZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT2JzZXJ2YWJsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIk9ic2VydmFibGUiXTsg
fSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGVyZm9ybWFuY2VNb25pdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wZXJm
b3JtYW5jZU1vbml0b3IgKi8gIi4vTWlzYy9wZXJmb3JtYW5jZU1vbml0b3IudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiUGVyZm9ybWFuY2VNb25pdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGVy
Zm9ybWFuY2VNb25pdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJQZXJmb3JtYW5j
ZU1vbml0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUm9sbGluZ0F2ZXJhZ2UiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9wZXJmb3JtYW5jZU1vbml0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzExX19bIlJvbGxpbmdBdmVyYWdlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3Byb21pc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3Byb21pc2UgKi8gIi4vTWlzYy9wcm9taXNlLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlByb21pc2VQb2x5ZmlsbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Byb21pc2VfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlByb21pc2VQb2x5ZmlsbCJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZU9wdGltaXplcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc2NlbmVPcHRpbWl6ZXIgKi8g
Ii4vTWlzYy9zY2VuZU9wdGltaXplci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY2VuZU9wdGlt
aXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lT3B0aW1pemVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xM19fWyJTY2VuZU9wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJUZXh0dXJlT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2NlbmVP
cHRpbWl6ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlRleHR1cmVPcHRpbWl6YXRp
b24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSGFyZHdhcmVTY2FsaW5nT3B0aW1pemF0aW9u
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2NlbmVPcHRpbWl6ZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEzX19bIkhhcmR3YXJlU2NhbGluZ09wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTaGFkb3dzT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2Nl
bmVPcHRpbWl6ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIlNoYWRvd3NPcHRpbWl6
YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3Nlc09wdGltaXphdGlv
biIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lT3B0aW1pemVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xM19fWyJQb3N0UHJvY2Vzc2VzT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkxlbnNGbGFyZXNPcHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9z
Y2VuZU9wdGltaXplcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siTGVuc0ZsYXJlc09w
dGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDdXN0b21PcHRpbWl6YXRpb24i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zY2VuZU9wdGltaXplcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTNfX1siQ3VzdG9tT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBhcnRpY2xlc09wdGltaXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lT3B0aW1p
emVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJQYXJ0aWNsZXNPcHRpbWl6YXRpb24i
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVuZGVyVGFyZ2V0c09wdGltaXphdGlvbiIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lT3B0aW1pemVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xM19fWyJSZW5kZXJUYXJnZXRzT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk1lcmdlTWVzaGVzT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2NlbmVP
cHRpbWl6ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIk1lcmdlTWVzaGVzT3B0aW1p
emF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lT3B0aW1pemVyT3B0aW9ucyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lT3B0aW1pemVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xM19fWyJTY2VuZU9wdGltaXplck9wdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiU2NlbmVPcHRpbWl6ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zY2VuZU9wdGltaXplcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siU2NlbmVPcHRpbWl6ZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVTZXJpYWxpemVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zY2VuZVNlcmlhbGl6ZXIg
Ki8gIi4vTWlzYy9zY2VuZVNlcmlhbGl6ZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVT
ZXJpYWxpemVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc2NlbmVTZXJpYWxpemVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xNF9fWyJTY2VuZVNlcmlhbGl6ZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfc21hcnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc21hcnRBcnJheSAqLyAiLi9NaXNjL3NtYXJ0
QXJyYXkudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU21hcnRBcnJheSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIlNtYXJ0QXJy
YXkiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU21hcnRBcnJheU5vRHVwbGljYXRlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfc21hcnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVf
X1siU21hcnRBcnJheU5vRHVwbGljYXRlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3N0cmluZ0RpY3Rpb25hcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3N0cmluZ0RpY3Rpb25hcnkgKi8gIi4vTWlzYy9zdHJpbmdE
aWN0aW9uYXJ5LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0cmluZ0RpY3Rpb25hcnkiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9zdHJpbmdEaWN0aW9uYXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xNl9fWyJTdHJpbmdEaWN0aW9uYXJ5Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL3RhZ3MgKi8gIi4vTWlzYy90YWdzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRh
Z3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
N19fWyJUYWdzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RleHR1cmVUb29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vdGV4dHVyZVRvb2xzICovICIuL01pc2MvdGV4dHVyZVRvb2xzLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlRleHR1cmVUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3RleHR1cmVUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siVGV4dHVyZVRvb2xzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3RnYV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGdhICovICIuL01pc2MvdGdhLnRzIik7CisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlRHQVRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdGdhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xOV9fWyJUR0FUb29scyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF90b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Rvb2xzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMF9fWyJUb29scyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjbGFzc05h
bWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MjBfX1siY2xhc3NOYW1lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFzeW5jTG9vcCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJB
c3luY0xvb3AiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdmlkZW9SZWNvcmRl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vdmlkZW9SZWNvcmRlciAqLyAiLi9NaXNjL3ZpZGVvUmVjb3JkZXIudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVmlkZW9SZWNvcmRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3ZpZGVvUmVjb3Jk
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIlZpZGVvUmVjb3JkZXIiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdmlydHVhbEpveXN0aWNrX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi92aXJ0dWFsSm95c3Rp
Y2sgKi8gIi4vTWlzYy92aXJ0dWFsSm95c3RpY2sudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSm95
c3RpY2tBeGlzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdmlydHVhbEpveXN0aWNrX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yMl9fWyJKb3lzdGlja0F4aXMiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiVmlydHVhbEpveXN0aWNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdmlydHVhbEpveXN0
aWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJWaXJ0dWFsSm95c3RpY2siXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfd29ya2VyUG9vbF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd29ya2VyUG9vbCAqLyAi
Li9NaXNjL3dvcmtlclBvb2wudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV29ya2VyUG9vbCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3dvcmtlclBvb2xfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIz
X19bIldvcmtlclBvb2wiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTG9nZ2Vy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
NF9fWyJMb2dnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdHlwZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
X1R5cGVTdG9yZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjVfX1siX1R5cGVTdG9yZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9maWxlc0lucHV0U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2ZpbGVzSW5wdXRTdG9yZSAqLyAiLi9NaXNjL2ZpbGVz
SW5wdXRTdG9yZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGaWxlc0lucHV0U3RvcmUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9maWxlc0lucHV0U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI2X19bIkZpbGVzSW5wdXRTdG9yZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9kZWVwQ29waWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yN19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9kZWVwQ29waWVyICovICIuL01pc2MvZGVlcENvcGllci50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJEZWVwQ29waWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVlcENvcGll
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjdfX1siRGVlcENvcGllciJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9waXZvdFRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9waXZvdFRvb2xzICovICIuL01pc2Mv
cGl2b3RUb29scy50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaXZvdFRvb2xzIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfcGl2b3RUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjhfX1siUGl2
b3RUb29scyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcmVjaXNpb25EYXRl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9wcmVjaXNpb25EYXRlICovICIuL01pc2MvcHJlY2lzaW9uRGF0ZS50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQcmVjaXNpb25EYXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcHJlY2lzaW9uRGF0
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjlfX1siUHJlY2lzaW9uRGF0ZSJdOyB9KTsKKwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY3JlZW5zaG90VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzMwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NjcmVlbnNob3RUb29s
cyAqLyAiLi9NaXNjL3NjcmVlbnNob3RUb29scy50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY3Jl
ZW5zaG90VG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zY3JlZW5zaG90VG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzMwX19bIlNjcmVlbnNob3RUb29scyJdOyB9KTsKKworLyogZW1w
dHkvdW51c2VkIGhhcm1vbnkgc3RhciByZWV4cG9ydCAqLy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfd2ViUmVxdWVzdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vd2ViUmVxdWVzdCAqLyAiLi9NaXNjL3dlYlJlcXVlc3QudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiV2ViUmVxdWVzdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3dlYlJlcXVl
c3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMxX19bIldlYlJlcXVlc3QiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaUluc3BlY3RhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pSW5zcGVjdGFibGUgKi8gIi4v
TWlzYy9pSW5zcGVjdGFibGUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5zcGVjdGFibGVUeXBl
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfaUluc3BlY3RhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zMl9fWyJJbnNwZWN0YWJsZVR5cGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfYnJkZlRleHR1cmVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzNfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vYnJkZlRleHR1cmVUb29scyAqLyAiLi9NaXNjL2JyZGZU
ZXh0dXJlVG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQlJERlRleHR1cmVUb29scyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2JyZGZUZXh0dXJlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzMzX19bIkJSREZUZXh0dXJlVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcmdiZFRleHR1cmVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vcmdiZFRleHR1cmVUb29scyAqLyAiLi9NaXNjL3JnYmRU
ZXh0dXJlVG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUkdCRFRleHR1cmVUb29scyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3JnYmRUZXh0dXJlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzM0X19bIlJHQkRUZXh0dXJlVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfZ3JhZGllbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9ncmFkaWVudHMgKi8gIi4vTWlzYy9ncmFkaWVudHMudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ29sb3JHcmFkaWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2dyYWRp
ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfX1siQ29sb3JHcmFkaWVudCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJDb2xvcjNHcmFkaWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2dyYWRpZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfX1siQ29sb3IzR3JhZGllbnQi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmFjdG9yR3JhZGllbnQiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM1X19bIkZhY3Rvckdy
YWRpZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdyYWRpZW50SGVscGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfZ3JhZGllbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNV9fWyJH
cmFkaWVudEhlbHBlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wZXJmQ291
bnRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vcGVyZkNvdW50ZXIgKi8gIi4vTWlzYy9wZXJmQ291bnRlci50cyIpOworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQZXJmQ291bnRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BlcmZDb3VudGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNl9fWyJQZXJmQ291bnRlciJdOyB9KTsKKworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9yZXRyeVN0cmF0ZWd5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yZXRyeVN0cmF0ZWd5ICovICIuL01p
c2MvcmV0cnlTdHJhdGVneS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZXRyeVN0cmF0ZWd5Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfcmV0cnlTdHJhdGVneV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMzdfX1siUmV0cnlTdHJhdGVneSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9sb2FkRmlsZUVycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zOF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9sb2FkRmlsZUVycm9yICovICIuL01pc2MvbG9hZEZpbGVFcnJvci50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJMb2FkRmlsZUVycm9yIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfbG9hZEZpbGVFcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzhfX1siTG9hZEZpbGVF
cnJvciJdOyB9KTsKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8q
KiovICIuL01pc2MvaW5zdGFudGlhdGlvblRvb2xzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlzYy9pbnN0YW50aWF0aW9uVG9vbHMu
dHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IEluc3RhbnRpYXRpb25Ub29scyAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJJbnN0YW50aWF0aW9uVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEluc3RhbnRpYXRpb25Ub29sczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3R5cGVTdG9yZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworCisKKy8q
KgorICogQ2xhc3MgdXNlZCB0byBlbmFibGUgaW5zdGF0aXRpb24gb2Ygb2JqZWN0cyBieSBjbGFz
cyBuYW1lCisgKi8KK3ZhciBJbnN0YW50aWF0aW9uVG9vbHMgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgZnVuY3Rpb24gSW5zdGFudGlhdGlvblRvb2xzKCkgeworICAgIH0KKyAg
ICAvKioKKyAgICAgKiBUcmllcyB0byBpbnN0YW50aWF0ZSBhIG5ldyBvYmplY3QgZnJvbSBhIGdp
dmVuIGNsYXNzIG5hbWUKKyAgICAgKiBAcGFyYW0gY2xhc3NOYW1lIGRlZmluZXMgdGhlIGNsYXNz
IG5hbWUgdG8gaW5zdGFudGlhdGUKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IG9iamVjdCBvciBu
dWxsIGlmIHRoZSBzeXN0ZW0gd2FzIG5vdCBhYmxlIHRvIGRvIHRoZSBpbnN0YW50aWF0aW9uCisg
ICAgICovCisgICAgSW5zdGFudGlhdGlvblRvb2xzLkluc3RhbnRpYXRlID0gZnVuY3Rpb24gKGNs
YXNzTmFtZSkgeworICAgICAgICBpZiAodGhpcy5SZWdpc3RlcmVkRXh0ZXJuYWxDbGFzc2VzICYm
IHRoaXMuUmVnaXN0ZXJlZEV4dGVybmFsQ2xhc3Nlc1tjbGFzc05hbWVdKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5SZWdpc3RlcmVkRXh0ZXJuYWxDbGFzc2VzW2NsYXNzTmFtZV07CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGludGVybmFsQ2xhc3MgPSBfdHlwZVN0b3JlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIl9UeXBlU3RvcmUiXS5HZXRDbGFzcyhjbGFzc05hbWUpOworICAg
ICAgICBpZiAoaW50ZXJuYWxDbGFzcykgeworICAgICAgICAgICAgcmV0dXJuIGludGVybmFsQ2xh
c3M7CisgICAgICAgIH0KKyAgICAgICAgX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJMb2dnZXIiXS5XYXJuKGNsYXNzTmFtZSArICIgbm90IGZvdW5kLCB5b3UgbWF5IGhhdmUg
bWlzc2VkIGFuIGltcG9ydC4iKTsKKyAgICAgICAgdmFyIGFyciA9IGNsYXNzTmFtZS5zcGxpdCgi
LiIpOworICAgICAgICB2YXIgZm4gPSAod2luZG93IHx8IHRoaXMpOworICAgICAgICBmb3IgKHZh
ciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBm
biA9IGZuW2FycltpXV07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gImZ1
bmN0aW9uIikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZuOworICAgIH07CisgICAgLyoqCisgICAgICogVXNlIHRoaXMgb2JqZWN0IHRvIHJl
Z2lzdGVyIGV4dGVybmFsIGNsYXNzZXMgbGlrZSBjdXN0b20gdGV4dHVyZXMgb3IgbWF0ZXJpYWwK
KyAgICAgKiB0byBhbGxvdyB0aGUgbGFvZGVycyB0byBpbnN0YW50aWF0ZSB0aGVtCisgICAgICov
CisgICAgSW5zdGFudGlhdGlvblRvb2xzLlJlZ2lzdGVyZWRFeHRlcm5hbENsYXNzZXMgPSB7fTsK
KyAgICByZXR1cm4gSW5zdGFudGlhdGlvblRvb2xzOworfSgpKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9NaXNjL2tocm9ub3NUZXh0dXJlQ29udGFpbmVyLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL2tocm9u
b3NUZXh0dXJlQ29udGFpbmVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEtocm9ub3NUZXh0dXJlQ29u
dGFpbmVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktocm9ub3NUZXh0
dXJlQ29udGFpbmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBLaHJvbm9zVGV4dHVyZUNvbnRhaW5l
cjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2xvZ2dl
ciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworCisvKioKKyAqIGZvciBkZXNjcmlwdGlvbiBzZWUg
aHR0cHM6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL3Rvb2xzL0tUWC8KKyAqIGZvciBm
aWxlIGxheW91dCBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL3Rvb2xz
L0tUWC9maWxlX2Zvcm1hdF9zcGVjLworICovCit2YXIgS2hyb25vc1RleHR1cmVDb250YWluZXIg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBh
IG5ldyBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lcgorICAgICAqIEBwYXJhbSBhcnJheUJ1ZmZlciBj
b250ZW50cyBvZiB0aGUgS1RYIGNvbnRhaW5lciBmaWxlCisgICAgICogQHBhcmFtIGZhY2VzRXhw
ZWN0ZWQgc2hvdWxkIGJlIGVpdGhlciAxIG9yIDYsIGJhc2VkIHdoZXRoZXIgYSBjdWJlIHRleHR1
cmUgb3Igb3IKKyAgICAgKiBAcGFyYW0gdGhyZWVERXhwZWN0ZWQgcHJvdmlzaW9uIGZvciBpbmRp
Y2F0aW5nIHRoYXQgZGF0YSBzaG91bGQgYmUgYSAzRCB0ZXh0dXJlLCBub3QgaW1wbGVtZW50ZWQK
KyAgICAgKiBAcGFyYW0gdGV4dHVyZUFycmF5RXhwZWN0ZWQgcHJvdmlzaW9uIGZvciBpbmRpY2F0
aW5nIHRoYXQgZGF0YSBzaG91bGQgYmUgYSB0ZXh0dXJlIGFycmF5LCBub3QgaW1wbGVtZW50ZWQK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lcigKKyAgICAvKiog
Y29udGVudHMgb2YgdGhlIEtUWCBjb250YWluZXIgZmlsZSAqLworICAgIGFycmF5QnVmZmVyLCBm
YWNlc0V4cGVjdGVkLCB0aHJlZURFeHBlY3RlZCwgdGV4dHVyZUFycmF5RXhwZWN0ZWQpIHsKKyAg
ICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGFycmF5QnVmZmVyOworICAgICAgICAvKioKKyAgICAg
ICAgICogSWYgdGhlIGNvbnRhaW5lciBoYXMgYmVlbiBtYWRlIGludmFsaWQgKGVnLiBjb25zdHJ1
Y3RvciBmYWlsZWQgdG8gY29ycmVjdGx5IGxvYWQgYXJyYXkgYnVmZmVyKQorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5pc0ludmFsaWQgPSBmYWxzZTsKKyAgICAgICAgLy8gVGVzdCB0aGF0IGl0
IGlzIGEga3R4IGZvcm1hdHRlZCBmaWxlLCBiYXNlZCBvbiB0aGUgZmlyc3QgMTIgYnl0ZXMsIGNo
YXJhY3RlciByZXByZXNlbnRhdGlvbiBpczoKKyAgICAgICAgLy8gJ++/vScsICdLJywgJ1QnLCAn
WCcsICcgJywgJzEnLCAnMScsICfvv70nLCAnXHInLCAnXG4nLCAnXHgxQScsICdcbicKKyAgICAg
ICAgLy8gMHhBQiwgMHg0QiwgMHg1NCwgMHg1OCwgMHgyMCwgMHgzMSwgMHgzMSwgMHhCQiwgMHgw
RCwgMHgwQSwgMHgxQSwgMHgwQQorICAgICAgICB2YXIgaWRlbnRpZmllciA9IG5ldyBVaW50OEFy
cmF5KHRoaXMuYXJyYXlCdWZmZXIsIDAsIDEyKTsKKyAgICAgICAgaWYgKGlkZW50aWZpZXJbMF0g
IT09IDB4QUIgfHwgaWRlbnRpZmllclsxXSAhPT0gMHg0QiB8fCBpZGVudGlmaWVyWzJdICE9PSAw
eDU0IHx8IGlkZW50aWZpZXJbM10gIT09IDB4NTggfHwgaWRlbnRpZmllcls0XSAhPT0gMHgyMCB8
fCBpZGVudGlmaWVyWzVdICE9PSAweDMxIHx8CisgICAgICAgICAgICBpZGVudGlmaWVyWzZdICE9
PSAweDMxIHx8IGlkZW50aWZpZXJbN10gIT09IDB4QkIgfHwgaWRlbnRpZmllcls4XSAhPT0gMHgw
RCB8fCBpZGVudGlmaWVyWzldICE9PSAweDBBIHx8IGlkZW50aWZpZXJbMTBdICE9PSAweDFBIHx8
IGlkZW50aWZpZXJbMTFdICE9PSAweDBBKSB7CisgICAgICAgICAgICB0aGlzLmlzSW52YWxpZCA9
IHRydWU7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siTG9nZ2VyIl0uRXJyb3IoInRleHR1cmUgbWlzc2luZyBLVFggaWRlbnRpZmllciIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIGxvYWQgdGhlIHJlc2V0
IG9mIHRoZSBoZWFkZXIgaW4gbmF0aXZlIDMyIGJpdCB1aW50CisgICAgICAgIHZhciBkYXRhU2l6
ZSA9IFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UOworICAgICAgICB2YXIgaGVhZGVyRGF0
YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5hcnJheUJ1ZmZlciwgMTIsIDEzICogZGF0YVNpemUp
OworICAgICAgICB2YXIgZW5kaWFubmVzcyA9IGhlYWRlckRhdGFWaWV3LmdldFVpbnQzMigwLCB0
cnVlKTsKKyAgICAgICAgdmFyIGxpdHRsZUVuZGlhbiA9IGVuZGlhbm5lc3MgPT09IDB4MDQwMzAy
MDE7CisgICAgICAgIHRoaXMuZ2xUeXBlID0gaGVhZGVyRGF0YVZpZXcuZ2V0VWludDMyKDEgKiBk
YXRhU2l6ZSwgbGl0dGxlRW5kaWFuKTsgLy8gbXVzdCBiZSAwIGZvciBjb21wcmVzc2VkIHRleHR1
cmVzCisgICAgICAgIHRoaXMuZ2xUeXBlU2l6ZSA9IGhlYWRlckRhdGFWaWV3LmdldFVpbnQzMigy
ICogZGF0YVNpemUsIGxpdHRsZUVuZGlhbik7IC8vIG11c3QgYmUgMSBmb3IgY29tcHJlc3NlZCB0
ZXh0dXJlcworICAgICAgICB0aGlzLmdsRm9ybWF0ID0gaGVhZGVyRGF0YVZpZXcuZ2V0VWludDMy
KDMgKiBkYXRhU2l6ZSwgbGl0dGxlRW5kaWFuKTsgLy8gbXVzdCBiZSAwIGZvciBjb21wcmVzc2Vk
IHRleHR1cmVzCisgICAgICAgIHRoaXMuZ2xJbnRlcm5hbEZvcm1hdCA9IGhlYWRlckRhdGFWaWV3
LmdldFVpbnQzMig0ICogZGF0YVNpemUsIGxpdHRsZUVuZGlhbik7IC8vIHRoZSB2YWx1ZSBvZiBh
cmcgcGFzc2VkIHRvIGdsLmNvbXByZXNzZWRUZXhJbWFnZTJEKCwseCwsLCwpCisgICAgICAgIHRo
aXMuZ2xCYXNlSW50ZXJuYWxGb3JtYXQgPSBoZWFkZXJEYXRhVmlldy5nZXRVaW50MzIoNSAqIGRh
dGFTaXplLCBsaXR0bGVFbmRpYW4pOyAvLyBzcGVjaWZ5IEdMX1JHQiwgR0xfUkdCQSwgR0xfQUxQ
SEEsIGV0YyAodW4tY29tcHJlc3NlZCBvbmx5KQorICAgICAgICB0aGlzLnBpeGVsV2lkdGggPSBo
ZWFkZXJEYXRhVmlldy5nZXRVaW50MzIoNiAqIGRhdGFTaXplLCBsaXR0bGVFbmRpYW4pOyAvLyBs
ZXZlbCAwIHZhbHVlIG9mIGFyZyBwYXNzZWQgdG8gZ2wuY29tcHJlc3NlZFRleEltYWdlMkQoLCws
eCwsLCkKKyAgICAgICAgdGhpcy5waXhlbEhlaWdodCA9IGhlYWRlckRhdGFWaWV3LmdldFVpbnQz
Mig3ICogZGF0YVNpemUsIGxpdHRsZUVuZGlhbik7IC8vIGxldmVsIDAgdmFsdWUgb2YgYXJnIHBh
c3NlZCB0byBnbC5jb21wcmVzc2VkVGV4SW1hZ2UyRCgsLCwseCwsKQorICAgICAgICB0aGlzLnBp
eGVsRGVwdGggPSBoZWFkZXJEYXRhVmlldy5nZXRVaW50MzIoOCAqIGRhdGFTaXplLCBsaXR0bGVF
bmRpYW4pOyAvLyBsZXZlbCAwIHZhbHVlIG9mIGFyZyBwYXNzZWQgdG8gZ2wuY29tcHJlc3NlZFRl
eEltYWdlM0QoLCwsLCx4LCwpCisgICAgICAgIHRoaXMubnVtYmVyT2ZBcnJheUVsZW1lbnRzID0g
aGVhZGVyRGF0YVZpZXcuZ2V0VWludDMyKDkgKiBkYXRhU2l6ZSwgbGl0dGxlRW5kaWFuKTsgLy8g
dXNlZCBmb3IgdGV4dHVyZSBhcnJheXMKKyAgICAgICAgdGhpcy5udW1iZXJPZkZhY2VzID0gaGVh
ZGVyRGF0YVZpZXcuZ2V0VWludDMyKDEwICogZGF0YVNpemUsIGxpdHRsZUVuZGlhbik7IC8vIHVz
ZWQgZm9yIGN1YmVtYXAgdGV4dHVyZXMsIHNob3VsZCBlaXRoZXIgYmUgMSBvciA2CisgICAgICAg
IHRoaXMubnVtYmVyT2ZNaXBtYXBMZXZlbHMgPSBoZWFkZXJEYXRhVmlldy5nZXRVaW50MzIoMTEg
KiBkYXRhU2l6ZSwgbGl0dGxlRW5kaWFuKTsgLy8gbnVtYmVyIG9mIGxldmVsczsgZGlzcmVnYXJk
IHBvc3NpYmlsaXR5IG9mIDAgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKKyAgICAgICAgdGhpcy5i
eXRlc09mS2V5VmFsdWVEYXRhID0gaGVhZGVyRGF0YVZpZXcuZ2V0VWludDMyKDEyICogZGF0YVNp
emUsIGxpdHRsZUVuZGlhbik7IC8vIHRoZSBhbW91bnQgb2Ygc3BhY2UgYWZ0ZXIgdGhlIGhlYWRl
ciBmb3IgbWV0YS1kYXRhCisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgY29tcHJlc3Nl
ZCB0eXBlLiAgTm90IG9ubHkgcmVkdWNlcyB3b3JrLCBidXQgcHJvYmFibHkgYmV0dGVyIHRvIGxl
dCBkZXYga25vdyB0aGV5IGFyZSBub3QgY29tcHJlc3NpbmcuCisgICAgICAgIGlmICh0aGlzLmds
VHlwZSAhPT0gMCkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkxvZ2dlciJdLkVycm9yKCJvbmx5IGNvbXByZXNzZWQgZm9ybWF0cyBjdXJy
ZW50bHkgc3VwcG9ydGVkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAvLyB2YWx1ZSBvZiB6ZXJvIGlzIGFuIGluZGljYXRpb24g
dG8gZ2VuZXJhdGUgbWlwbWFwcyBAIHJ1bnRpbWUuICBOb3QgdXN1YWxseSBhbGxvd2VkIGZvciBj
b21wcmVzc2VkLCBzbyBkaXNyZWdhcmQuCisgICAgICAgICAgICB0aGlzLm51bWJlck9mTWlwbWFw
TGV2ZWxzID0gTWF0aC5tYXgoMSwgdGhpcy5udW1iZXJPZk1pcG1hcExldmVscyk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRoaXMucGl4ZWxIZWlnaHQgPT09IDAgfHwgdGhpcy5waXhlbERlcHRo
ICE9PSAwKSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siTG9nZ2VyIl0uRXJyb3IoIm9ubHkgMkQgdGV4dHVyZXMgY3VycmVudGx5IHN1cHBv
cnRlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
Lm51bWJlck9mQXJyYXlFbGVtZW50cyAhPT0gMCkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLkVycm9yKCJ0ZXh0dXJlIGFy
cmF5cyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLm51bWJlck9mRmFjZXMgIT09IGZhY2VzRXhwZWN0ZWQp
IHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJMb2dnZXIiXS5FcnJvcigibnVtYmVyIG9mIGZhY2VzIGV4cGVjdGVkIiArIGZhY2VzRXhwZWN0
ZWQgKyAiLCBidXQgZm91bmQgIiArIHRoaXMubnVtYmVyT2ZGYWNlcyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gd2Ugbm93IGhhdmUgYSBjb21wbGV0ZWx5IHZh
bGlkYXRlZCBmaWxlLCBzbyBjb3VsZCB1c2UgZXhpc3RlbmNlIG9mIGxvYWRUeXBlIGFzIHN1Y2Nl
c3MKKyAgICAgICAgLy8gd291bGQgbmVlZCB0byBtYWtlIHRoaXMgbW9yZSBlbGFib3JhdGUgJiBh
ZGp1c3QgY2hlY2tzIGFib3ZlIHRvIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBsb2FkIHR5cGUKKyAg
ICAgICAgdGhpcy5sb2FkVHlwZSA9IEtocm9ub3NUZXh0dXJlQ29udGFpbmVyLkNPTVBSRVNTRURf
MkQ7CisgICAgfQorICAgIC8qKgorICAgICAqIFVwbG9hZHMgS1RYIGNvbnRlbnQgdG8gYSBCYWJ5
bG9uIFRleHR1cmUuCisgICAgICogSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB0ZXh0dXJlIGhhcyBh
bHJlYWR5IGJlZW4gY3JlYXRlZCAmIGlzIGN1cnJlbnRseSBib3VuZAorICAgICAqIEBoaWRkZW4K
KyAgICAgKi8KKyAgICBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lci5wcm90b3R5cGUudXBsb2FkTGV2
ZWxzID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvYWRNaXBtYXBzKSB7CisgICAgICAgIHN3aXRjaCAo
dGhpcy5sb2FkVHlwZSkgeworICAgICAgICAgICAgY2FzZSBLaHJvbm9zVGV4dHVyZUNvbnRhaW5l
ci5DT01QUkVTU0VEXzJEOgorICAgICAgICAgICAgICAgIHRoaXMuX3VwbG9hZDJEQ29tcHJlc3Nl
ZExldmVscyh0ZXh0dXJlLCBsb2FkTWlwbWFwcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEtocm9ub3NUZXh0dXJlQ29udGFpbmVyLlRFWF8yRDoKKyAgICAgICAg
ICAgIGNhc2UgS2hyb25vc1RleHR1cmVDb250YWluZXIuQ09NUFJFU1NFRF8zRDoKKyAgICAgICAg
ICAgIGNhc2UgS2hyb25vc1RleHR1cmVDb250YWluZXIuVEVYXzNEOgorICAgICAgICB9CisgICAg
fTsKKyAgICBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lci5wcm90b3R5cGUuX3VwbG9hZDJEQ29tcHJl
c3NlZExldmVscyA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBsb2FkTWlwbWFwcykgeworICAgICAgICAv
LyBpbml0aWFsaXplIHdpZHRoICYgaGVpZ2h0IGZvciBsZXZlbCAxCisgICAgICAgIHZhciBkYXRh
T2Zmc2V0ID0gS2hyb25vc1RleHR1cmVDb250YWluZXIuSEVBREVSX0xFTiArIHRoaXMuYnl0ZXNP
ZktleVZhbHVlRGF0YTsKKyAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5waXhlbFdpZHRoOworICAg
ICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5waXhlbEhlaWdodDsKKyAgICAgICAgdmFyIG1pcG1hcENv
dW50ID0gbG9hZE1pcG1hcHMgPyB0aGlzLm51bWJlck9mTWlwbWFwTGV2ZWxzIDogMTsKKyAgICAg
ICAgZm9yICh2YXIgbGV2ZWwgPSAwOyBsZXZlbCA8IG1pcG1hcENvdW50OyBsZXZlbCsrKSB7Cisg
ICAgICAgICAgICB2YXIgaW1hZ2VTaXplID0gbmV3IEludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZl
ciwgZGF0YU9mZnNldCwgMSlbMF07IC8vIHNpemUgcGVyIGZhY2UsIHNpbmNlIG5vdCBzdXBwb3J0
aW5nIGFycmF5IGN1YmVtYXBzCisgICAgICAgICAgICBkYXRhT2Zmc2V0ICs9IDQ7IC8vaW1hZ2Ug
ZGF0YSBzdGFydHMgZnJvbSBuZXh0IG11bHRpcGxlIG9mIDQgb2Zmc2V0LiBFYWNoIGZhY2UgcmVm
ZXJzIHRvIHNhbWUgaW1hZ2VzaXplIGZpZWxkIGFib3ZlLgorICAgICAgICAgICAgZm9yICh2YXIg
ZmFjZSA9IDA7IGZhY2UgPCB0aGlzLm51bWJlck9mRmFjZXM7IGZhY2UrKykgeworICAgICAgICAg
ICAgICAgIHZhciBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyLCBk
YXRhT2Zmc2V0LCBpbWFnZVNpemUpOworICAgICAgICAgICAgICAgIHZhciBlbmdpbmUgPSB0ZXh0
dXJlLmdldEVuZ2luZSgpOworICAgICAgICAgICAgICAgIGVuZ2luZS5fdXBsb2FkQ29tcHJlc3Nl
ZERhdGFUb1RleHR1cmVEaXJlY3RseSh0ZXh0dXJlLCB0aGlzLmdsSW50ZXJuYWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGJ5dGVBcnJheSwgZmFjZSwgbGV2ZWwpOworICAgICAgICAgICAgICAgIGRh
dGFPZmZzZXQgKz0gaW1hZ2VTaXplOyAvLyBhZGQgc2l6ZSBvZiB0aGUgaW1hZ2UgZm9yIHRoZSBu
ZXh0IGZhY2UvbWlwbWFwCisgICAgICAgICAgICAgICAgZGF0YU9mZnNldCArPSAzIC0gKChpbWFn
ZVNpemUgKyAzKSAlIDQpOyAvLyBhZGQgcGFkZGluZyBmb3Igb2RkIHNpemVkIGltYWdlCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KDEuMCwgd2lkdGggKiAwLjUp
OworICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoMS4wLCBoZWlnaHQgKiAwLjUpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lci5IRUFERVJfTEVOID0g
MTIgKyAoMTMgKiA0KTsgLy8gaWRlbnRpZmllciArIGhlYWRlciBlbGVtZW50cyAobm90IGluY2x1
ZGluZyBrZXkgdmFsdWUgbWV0YS1kYXRhIHBhaXJzKQorICAgIC8vIGxvYWQgdHlwZXMKKyAgICBL
aHJvbm9zVGV4dHVyZUNvbnRhaW5lci5DT01QUkVTU0VEXzJEID0gMDsgLy8gdXNlcyBhIGdsLmNv
bXByZXNzZWRUZXhJbWFnZTJEKCkKKyAgICBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lci5DT01QUkVT
U0VEXzNEID0gMTsgLy8gdXNlcyBhIGdsLmNvbXByZXNzZWRUZXhJbWFnZTNEKCkKKyAgICBLaHJv
bm9zVGV4dHVyZUNvbnRhaW5lci5URVhfMkQgPSAyOyAvLyB1c2VzIGEgZ2wudGV4SW1hZ2UyRCgp
CisgICAgS2hyb25vc1RleHR1cmVDb250YWluZXIuVEVYXzNEID0gMzsgLy8gdXNlcyBhIGdsLnRl
eEltYWdlM0QoKQorICAgIHJldHVybiBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lcjsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9sb2FkRmlsZUVycm9yLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvbG9hZEZpbGVF
cnJvci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IExvYWRGaWxlRXJyb3IgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTG9hZEZpbGVFcnJvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTG9hZEZpbGVF
cnJvcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2Rl
X21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisKKy8qKgorICogQGlnbm9yZQorICogQXBw
bGljYXRpb24gZXJyb3IgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHdoZW4gbG9h
ZGluZyBhIGZpbGUKKyAqLwordmFyIExvYWRGaWxlRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oTG9hZEZpbGVFcnJvciwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IExvYWRGaWxlRXJyb3IKKyAgICAgKiBAcGFyYW0gbWVzc2FnZSBkZWZpbmVzIHRo
ZSBtZXNzYWdlIG9mIHRoZSBlcnJvcgorICAgICAqIEBwYXJhbSByZXF1ZXN0IGRlZmluZXMgdGhl
IG9wdGlvbmFsIHdlYiByZXF1ZXN0CisgICAgICovCisgICAgZnVuY3Rpb24gTG9hZEZpbGVFcnJv
cihtZXNzYWdlLCAKKyAgICAvKiogZGVmaW5lcyB0aGUgb3B0aW9uYWwgd2ViIHJlcXVlc3QgKi8K
KyAgICByZXF1ZXN0KSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1l
c3NhZ2UpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnJlcXVlc3QgPSByZXF1ZXN0OworICAgICAg
ICBfdGhpcy5uYW1lID0gIkxvYWRGaWxlRXJyb3IiOworICAgICAgICBMb2FkRmlsZUVycm9yLl9z
ZXRQcm90b3R5cGVPZihfdGhpcywgTG9hZEZpbGVFcnJvci5wcm90b3R5cGUpOworICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8vIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29t
L3F1ZXN0aW9ucy8xMjkxNTQxMi9ob3ctZG8taS1leHRlbmQtYS1ob3N0LW9iamVjdC1lLWctZXJy
b3ItaW4tdHlwZXNjcmlwdAorICAgIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0
L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlr
ZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29yaworICAgIC8vIFBvbHlmaWxs
IGZvciBPYmplY3Quc2V0UHJvdG90eXBlT2YgaWYgbmVjZXNzYXJ5LgorICAgIExvYWRGaWxlRXJy
b3IuX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IChmdW5jdGlvbiAo
bywgcHJvdG8pIHsgby5fX3Byb3RvX18gPSBwcm90bzsgcmV0dXJuIG87IH0pOworICAgIHJldHVy
biBMb2FkRmlsZUVycm9yOworfShFcnJvcikpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L01pc2MvbG9nZ2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTWlzYy9sb2dnZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IExvZ2dlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJMb2dnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIExvZ2dlcjsgfSk7CisvKioKKyAq
IExvZ2dlciB1c2VkIHRocm91Z291aHQgdGhlIGFwcGxpY2F0aW9uIHRvIGFsbG93IGNvbmZpZ3Vy
YXRpb24gb2YKKyAqIHRoZSBsb2cgbGV2ZWwgcmVxdWlyZWQgZm9yIHRoZSBtZXNzYWdlcy4KKyAq
LwordmFyIExvZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlv
biBMb2dnZXIoKSB7CisgICAgfQorICAgIExvZ2dlci5fQWRkTG9nRW50cnkgPSBmdW5jdGlvbiAo
ZW50cnkpIHsKKyAgICAgICAgTG9nZ2VyLl9Mb2dDYWNoZSA9IGVudHJ5ICsgTG9nZ2VyLl9Mb2dD
YWNoZTsKKyAgICAgICAgaWYgKExvZ2dlci5Pbk5ld0NhY2hlRW50cnkpIHsKKyAgICAgICAgICAg
IExvZ2dlci5Pbk5ld0NhY2hlRW50cnkoZW50cnkpOworICAgICAgICB9CisgICAgfTsKKyAgICBM
b2dnZXIuX0Zvcm1hdE1lc3NhZ2UgPSBmdW5jdGlvbiAobWVzc2FnZSkgeworICAgICAgICB2YXIg
cGFkU3RyID0gZnVuY3Rpb24gKGkpIHsgcmV0dXJuIChpIDwgMTApID8gIjAiICsgaSA6ICIiICsg
aTsgfTsKKyAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOworICAgICAgICByZXR1cm4gIlsi
ICsgcGFkU3RyKGRhdGUuZ2V0SG91cnMoKSkgKyAiOiIgKyBwYWRTdHIoZGF0ZS5nZXRNaW51dGVz
KCkpICsgIjoiICsgcGFkU3RyKGRhdGUuZ2V0U2Vjb25kcygpKSArICJdOiAiICsgbWVzc2FnZTsK
KyAgICB9OworICAgIExvZ2dlci5fTG9nRGlzYWJsZWQgPSBmdW5jdGlvbiAobWVzc2FnZSkgewor
ICAgICAgICAvLyBub3RoaW5nIHRvIGRvCisgICAgfTsKKyAgICBMb2dnZXIuX0xvZ0VuYWJsZWQg
PSBmdW5jdGlvbiAobWVzc2FnZSkgeworICAgICAgICB2YXIgZm9ybWF0dGVkTWVzc2FnZSA9IExv
Z2dlci5fRm9ybWF0TWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgY29uc29sZS5sb2coIkJKUyAt
ICIgKyBmb3JtYXR0ZWRNZXNzYWdlKTsKKyAgICAgICAgdmFyIGVudHJ5ID0gIjxkaXYgc3R5bGU9
J2NvbG9yOndoaXRlJz4iICsgZm9ybWF0dGVkTWVzc2FnZSArICI8L2Rpdj48YnI+IjsKKyAgICAg
ICAgTG9nZ2VyLl9BZGRMb2dFbnRyeShlbnRyeSk7CisgICAgfTsKKyAgICBMb2dnZXIuX1dhcm5E
aXNhYmxlZCA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7CisgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8K
KyAgICB9OworICAgIExvZ2dlci5fV2FybkVuYWJsZWQgPSBmdW5jdGlvbiAobWVzc2FnZSkgewor
ICAgICAgICB2YXIgZm9ybWF0dGVkTWVzc2FnZSA9IExvZ2dlci5fRm9ybWF0TWVzc2FnZShtZXNz
YWdlKTsKKyAgICAgICAgY29uc29sZS53YXJuKCJCSlMgLSAiICsgZm9ybWF0dGVkTWVzc2FnZSk7
CisgICAgICAgIHZhciBlbnRyeSA9ICI8ZGl2IHN0eWxlPSdjb2xvcjpvcmFuZ2UnPiIgKyBmb3Jt
YXR0ZWRNZXNzYWdlICsgIjwvZGl2Pjxicj4iOworICAgICAgICBMb2dnZXIuX0FkZExvZ0VudHJ5
KGVudHJ5KTsKKyAgICB9OworICAgIExvZ2dlci5fRXJyb3JEaXNhYmxlZCA9IGZ1bmN0aW9uICht
ZXNzYWdlKSB7CisgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8KKyAgICB9OworICAgIExvZ2dlci5f
RXJyb3JFbmFibGVkID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHsKKyAgICAgICAgTG9nZ2VyLmVycm9y
c0NvdW50Kys7CisgICAgICAgIHZhciBmb3JtYXR0ZWRNZXNzYWdlID0gTG9nZ2VyLl9Gb3JtYXRN
ZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICBjb25zb2xlLmVycm9yKCJCSlMgLSAiICsgZm9ybWF0
dGVkTWVzc2FnZSk7CisgICAgICAgIHZhciBlbnRyeSA9ICI8ZGl2IHN0eWxlPSdjb2xvcjpyZWQn
PiIgKyBmb3JtYXR0ZWRNZXNzYWdlICsgIjwvZGl2Pjxicj4iOworICAgICAgICBMb2dnZXIuX0Fk
ZExvZ0VudHJ5KGVudHJ5KTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2dn
ZXIsICJMb2dDYWNoZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgY3VycmVudCBs
b2cgY2FjaGUgKGxpc3Qgb2YgbG9ncykKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIExvZ2dlci5fTG9nQ2FjaGU7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIC8qKgorICAgICAqIENsZWFycyB0aGUgbG9nIGNhY2hlCisgICAgICovCisg
ICAgTG9nZ2VyLkNsZWFyTG9nQ2FjaGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIExvZ2dlci5f
TG9nQ2FjaGUgPSAiIjsKKyAgICAgICAgTG9nZ2VyLmVycm9yc0NvdW50ID0gMDsKKyAgICB9Owor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2dnZXIsICJMb2dMZXZlbHMiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGxvZyBsZXZlbCAoTWVzc2FnZUxvZ0xl
dmVsIC8gV2FybmluZ0xvZ0xldmVsIC8gRXJyb3JMb2dMZXZlbCkKKyAgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKGxldmVsKSB7CisgICAgICAgICAgICBpZiAoKGxldmVsICYgTG9n
Z2VyLk1lc3NhZ2VMb2dMZXZlbCkgPT09IExvZ2dlci5NZXNzYWdlTG9nTGV2ZWwpIHsKKyAgICAg
ICAgICAgICAgICBMb2dnZXIuTG9nID0gTG9nZ2VyLl9Mb2dFbmFibGVkOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgTG9nZ2VyLkxvZyA9IExvZ2dl
ci5fTG9nRGlzYWJsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGxldmVsICYg
TG9nZ2VyLldhcm5pbmdMb2dMZXZlbCkgPT09IExvZ2dlci5XYXJuaW5nTG9nTGV2ZWwpIHsKKyAg
ICAgICAgICAgICAgICBMb2dnZXIuV2FybiA9IExvZ2dlci5fV2FybkVuYWJsZWQ7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBMb2dnZXIuV2FybiA9
IExvZ2dlci5fV2FybkRpc2FibGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChs
ZXZlbCAmIExvZ2dlci5FcnJvckxvZ0xldmVsKSA9PT0gTG9nZ2VyLkVycm9yTG9nTGV2ZWwpIHsK
KyAgICAgICAgICAgICAgICBMb2dnZXIuRXJyb3IgPSBMb2dnZXIuX0Vycm9yRW5hYmxlZDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIExvZ2dlci5F
cnJvciA9IExvZ2dlci5fRXJyb3JEaXNhYmxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLyoqCisgICAgICogTm8gbG9nCisgICAgICovCisgICAgTG9nZ2VyLk5vbmVM
b2dMZXZlbCA9IDA7CisgICAgLyoqCisgICAgICogT25seSBtZXNzYWdlIGxvZ3MKKyAgICAgKi8K
KyAgICBMb2dnZXIuTWVzc2FnZUxvZ0xldmVsID0gMTsKKyAgICAvKioKKyAgICAgKiBPbmx5IHdh
cm5pbmcgbG9ncworICAgICAqLworICAgIExvZ2dlci5XYXJuaW5nTG9nTGV2ZWwgPSAyOworICAg
IC8qKgorICAgICAqIE9ubHkgZXJyb3IgbG9ncworICAgICAqLworICAgIExvZ2dlci5FcnJvckxv
Z0xldmVsID0gNDsKKyAgICAvKioKKyAgICAgKiBBbGwgbG9ncworICAgICAqLworICAgIExvZ2dl
ci5BbGxMb2dMZXZlbCA9IDc7CisgICAgTG9nZ2VyLl9Mb2dDYWNoZSA9ICIiOworICAgIC8qKgor
ICAgICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgbG9hZGluZyBlcnJv
cnMKKyAgICAgKiBAaWdub3JlbmFtaW5nCisgICAgICovCisgICAgTG9nZ2VyLmVycm9yc0NvdW50
ID0gMDsKKyAgICAvKioKKyAgICAgKiBMb2cgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlCisgICAg
ICovCisgICAgTG9nZ2VyLkxvZyA9IExvZ2dlci5fTG9nRW5hYmxlZDsKKyAgICAvKioKKyAgICAg
KiBXcml0ZSBhIHdhcm5pbmcgbWVzc2FnZSB0byB0aGUgY29uc29sZQorICAgICAqLworICAgIExv
Z2dlci5XYXJuID0gTG9nZ2VyLl9XYXJuRW5hYmxlZDsKKyAgICAvKioKKyAgICAgKiBXcml0ZSBh
biBlcnJvciBtZXNzYWdlIHRvIHRoZSBjb25zb2xlCisgICAgICovCisgICAgTG9nZ2VyLkVycm9y
ID0gTG9nZ2VyLl9FcnJvckVuYWJsZWQ7CisgICAgcmV0dXJuIExvZ2dlcjsKK30oKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9tZXNoRXhwbG9kZXIudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL21lc2hFeHBsb2Rlci50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogTWVzaEV4cGxvZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk1lc2hFeHBsb2RlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWVzaEV4cGxvZGVyOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgu
dmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisKKy8qKgorICogQ2xhc3MgdXNl
ZCB0byBleHBsb2RlIG1lc2hlcyAoaWUuIHRvIGhhdmUgYSBjZW50ZXIgYW5kIG1vdmUgdGhlbSBh
d2F5IGZyb20gdGhhdCBjZW50ZXIgdG8gYmV0dGVyIHNlZSB0aGUgb3ZlcmFsbCBvcmdhbml6YXRp
b24pCisgKi8KK3ZhciBNZXNoRXhwbG9kZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgLyoqCisgICAgICogRXhwbG9kZXMgbWVzaGVzIGZyb20gYSBjZW50ZXIgbWVzaC4KKyAg
ICAgKiBAcGFyYW0gbWVzaGVzIFRoZSBtZXNoZXMgdG8gZXhwbG9kZS4KKyAgICAgKiBAcGFyYW0g
Y2VudGVyTWVzaCBUaGUgbWVzaCB0byBiZSBjZW50ZXIgb2YgZXhwbG9zaW9uLgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIE1lc2hFeHBsb2RlcihtZXNoZXMsIGNlbnRlck1lc2gpIHsKKyAgICAgICAg
dGhpcy5fbWVzaGVzT3JpZ2lucyA9IFtdOworICAgICAgICB0aGlzLl90b0NlbnRlclZlY3RvcnMg
PSBbXTsKKyAgICAgICAgdGhpcy5fc2NhbGVkRGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAg
IHRoaXMuX25ld1Bvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2NlbnRlclBvc2l0
aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX21lc2hlcyA9IG1lc2hlcy5zbGljZSgpOwor
ICAgICAgICBpZiAoY2VudGVyTWVzaCkgeworICAgICAgICAgICAgdGhpcy5fY2VudGVyTWVzaCA9
IGNlbnRlck1lc2g7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlz
Ll9zZXRDZW50ZXJNZXNoKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNlbnRlck1lc2hJbmRl
eCA9IHRoaXMuX21lc2hlcy5pbmRleE9mKHRoaXMuX2NlbnRlck1lc2gpOworICAgICAgICBpZiAo
Y2VudGVyTWVzaEluZGV4ID49IDApIHsKKyAgICAgICAgICAgIHRoaXMuX21lc2hlcy5zcGxpY2Uo
Y2VudGVyTWVzaEluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jZW50ZXJQb3Np
dGlvbiA9IHRoaXMuX2NlbnRlck1lc2guZ2V0QWJzb2x1dGVQb3NpdGlvbigpLmNsb25lKCk7Cisg
ICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9tZXNoZXMubGVuZ3RoOyBp
bmRleCsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fbWVzaGVzW2luZGV4XSkgeworICAgICAg
ICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fbWVzaGVzW2luZGV4XTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9tZXNoZXNPcmlnaW5zW2luZGV4XSA9IG1lc2guZ2V0QWJzb2x1dGVQb3NpdGlvbigp
LmNsb25lKCk7CisgICAgICAgICAgICAgICAgdGhpcy5fdG9DZW50ZXJWZWN0b3JzW2luZGV4XSA9
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0uWmVybygpOworICAgICAgICAgICAgICAgIGlmIChtZXNoLl9ib3VuZGluZ0luZm8gJiYgdGhp
cy5fY2VudGVyTWVzaC5fYm91bmRpbmdJbmZvKSB7CisgICAgICAgICAgICAgICAgICAgIG1lc2gu
X2JvdW5kaW5nSW5mby5ib3VuZGluZ0JveC5jZW50ZXJXb3JsZC5zdWJ0cmFjdFRvUmVmKHRoaXMu
X2NlbnRlck1lc2guX2JvdW5kaW5nSW5mby5ib3VuZGluZ0JveC5jZW50ZXJXb3JsZCwgdGhpcy5f
dG9DZW50ZXJWZWN0b3JzW2luZGV4XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIE1lc2hFeHBsb2Rlci5wcm90b3R5cGUuX3NldENlbnRl
ck1lc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBhdmVyYWdlQ2VudGVyID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIHZhciB0b3RhbENlbnRlcnMgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgdmFyIHNo
b3J0ZXN0VG9DZW50ZXIgPSBOdW1iZXIuTUFYX1ZBTFVFOworICAgICAgICBmb3IgKHZhciBpbmRl
eCA9IDA7IGluZGV4IDwgdGhpcy5fbWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX21lc2hlc1tpbmRleF0pIHsKKyAgICAgICAgICAgICAgICB2YXIgbWVzaCA9
IHRoaXMuX21lc2hlc1tpbmRleF07CisgICAgICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9
IG1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICAgICAgaWYgKGJvdW5kaW5nSW5m
bykgeworICAgICAgICAgICAgICAgICAgICB0b3RhbENlbnRlcnMuYWRkSW5QbGFjZShib3VuZGlu
Z0luZm8uYm91bmRpbmdCb3guY2VudGVyV29ybGQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhdmVyYWdlQ2VudGVyID0gdG90YWxDZW50ZXJz
LnNjYWxlKDEgLyB0aGlzLl9tZXNoZXMubGVuZ3RoKTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IHRoaXMuX21lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9tZXNoZXNbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSB0
aGlzLl9tZXNoZXNbaW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBib3VuZGluZ0luZm8gPSBt
ZXNoLmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICAgICAgICAgIGlmIChib3VuZGluZ0luZm8p
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlVG9DZW50ZXIgPSBib3VuZGluZ0lu
Zm8uYm91bmRpbmdCb3guY2VudGVyV29ybGQuc3VidHJhY3QoYXZlcmFnZUNlbnRlcikubGVuZ3Ro
U3F1YXJlZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2VUb0NlbnRlciA8IHNo
b3J0ZXN0VG9DZW50ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NlbnRlck1l
c2ggPSBtZXNoOworICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRlc3RUb0NlbnRlciA9IGRp
c3RhbmNlVG9DZW50ZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCBj
bGFzcyBuYW1lCisgICAgICogQHJldHVybnMgIk1lc2hFeHBsb2RlciIKKyAgICAgKi8KKyAgICBN
ZXNoRXhwbG9kZXIucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICJNZXNoRXhwbG9kZXIiOworICAgIH07CisgICAgLyoqCisgICAgICogIkV4cGxv
ZGVkIG1lc2hlcyIKKyAgICAgKiBAcmV0dXJucyBBcnJheSBvZiBtZXNoZXMgd2l0aCB0aGUgY2Vu
dGVyTWVzaCBhdCBpbmRleCAwLgorICAgICAqLworICAgIE1lc2hFeHBsb2Rlci5wcm90b3R5cGUu
Z2V0TWVzaGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbWVzaEFycmF5ID0gdGhpcy5f
bWVzaGVzLnNsaWNlKCk7CisgICAgICAgIG1lc2hBcnJheS51bnNoaWZ0KHRoaXMuX2NlbnRlck1l
c2gpOworICAgICAgICByZXR1cm4gbWVzaEFycmF5OworICAgIH07CisgICAgLyoqCisgICAgICog
RXhwbG9kZXMgbWVzaGVzIGdpdmluZyBhIHNwZWNpZmljIGRpcmVjdGlvbgorICAgICAqIEBwYXJh
bSBkaXJlY3Rpb24gTnVtYmVyIHRvIG11bHRpcGx5IGRpc3RhbmNlIG9mIGVhY2ggbWVzaCdzIG9y
aWdpbiBmcm9tIGNlbnRlci4gVXNlIGEgbmVnYXRpdmUgbnVtYmVyIHRvIGltcGxvZGUsIG9yIHpl
cm8gdG8gcmVzZXQuCisgICAgICovCisgICAgTWVzaEV4cGxvZGVyLnByb3RvdHlwZS5leHBsb2Rl
ID0gZnVuY3Rpb24gKGRpcmVjdGlvbikgeworICAgICAgICBpZiAoZGlyZWN0aW9uID09PSB2b2lk
IDApIHsgZGlyZWN0aW9uID0gMS4wOyB9CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCB0aGlzLl9tZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBpZiAodGhp
cy5fbWVzaGVzW2luZGV4XSAmJiB0aGlzLl9tZXNoZXNPcmlnaW5zW2luZGV4XSAmJiB0aGlzLl90
b0NlbnRlclZlY3RvcnNbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdG9DZW50ZXJW
ZWN0b3JzW2luZGV4XS5zY2FsZVRvUmVmKGRpcmVjdGlvbiwgdGhpcy5fc2NhbGVkRGlyZWN0aW9u
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9tZXNoZXNPcmlnaW5zW2luZGV4XS5hZGRUb1JlZih0
aGlzLl9zY2FsZWREaXJlY3Rpb24sIHRoaXMuX25ld1Bvc2l0aW9uKTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9tZXNoZXNbaW5kZXhdLnNldEFic29sdXRlUG9zaXRpb24odGhpcy5fbmV3UG9zaXRp
b24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2NlbnRlck1lc2gu
c2V0QWJzb2x1dGVQb3NpdGlvbih0aGlzLl9jZW50ZXJQb3NpdGlvbik7CisgICAgfTsKKyAgICBy
ZXR1cm4gTWVzaEV4cGxvZGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9N
aXNjL29ic2VydmFibGUudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vTWlzYy9vYnNlcnZhYmxlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRXZlbnRTdGF0ZSwgT2JzZXJ2ZXIsIE11
bHRpT2JzZXJ2ZXIsIE9ic2VydmFibGUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRXZlbnRTdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRXZlbnRTdGF0ZTsgfSk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJPYnNlcnZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gT2JzZXJ2ZXI7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTXVsdGlPYnNlcnZlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gTXVsdGlPYnNlcnZlcjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPYnNlcnZhYmxlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBPYnNlcnZhYmxlOyB9KTsKKy8qKgorICogQSBjbGFzcyBzZXJ2ZXMg
YXMgYSBtZWRpdW0gYmV0d2VlbiB0aGUgb2JzZXJ2YWJsZSBhbmQgaXRzIG9ic2VydmVycworICov
Cit2YXIgRXZlbnRTdGF0ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioK
KyAgICAgKiBDcmVhdGUgYSBuZXcgRXZlbnRTdGF0ZQorICAgICAqIEBwYXJhbSBtYXNrIGRlZmlu
ZXMgdGhlIG1hc2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3RhdGUKKyAgICAgKiBAcGFyYW0gc2tp
cE5leHRPYnNlcnZlcnMgZGVmaW5lcyBhIGZsYWcgd2hpY2ggd2lsbCBpbnN0cnVjdCB0aGUgb2Jz
ZXJ2YWJsZSB0byBza2lwIGZvbGxvd2luZyBvYnNlcnZlcnMgd2hlbiBzZXQgdG8gdHJ1ZQorICAg
ICAqIEBwYXJhbSB0YXJnZXQgZGVmaW5lcyB0aGUgb3JpZ2luYWwgdGFyZ2V0IG9mIHRoZSBzdGF0
ZQorICAgICAqIEBwYXJhbSBjdXJyZW50VGFyZ2V0IGRlZmluZXMgdGhlIGN1cnJlbnQgdGFyZ2V0
IG9mIHRoZSBzdGF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIEV2ZW50U3RhdGUobWFzaywgc2tp
cE5leHRPYnNlcnZlcnMsIHRhcmdldCwgY3VycmVudFRhcmdldCkgeworICAgICAgICBpZiAoc2tp
cE5leHRPYnNlcnZlcnMgPT09IHZvaWQgMCkgeyBza2lwTmV4dE9ic2VydmVycyA9IGZhbHNlOyB9
CisgICAgICAgIHRoaXMuaW5pdGFsaXplKG1hc2ssIHNraXBOZXh0T2JzZXJ2ZXJzLCB0YXJnZXQs
IGN1cnJlbnRUYXJnZXQpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplIHRoZSBj
dXJyZW50IGV2ZW50IHN0YXRlCisgICAgICogQHBhcmFtIG1hc2sgZGVmaW5lcyB0aGUgbWFzayBh
c3NvY2lhdGVkIHdpdGggdGhpcyBzdGF0ZQorICAgICAqIEBwYXJhbSBza2lwTmV4dE9ic2VydmVy
cyBkZWZpbmVzIGEgZmxhZyB3aGljaCB3aWxsIGluc3RydWN0IHRoZSBvYnNlcnZhYmxlIHRvIHNr
aXAgZm9sbG93aW5nIG9ic2VydmVycyB3aGVuIHNldCB0byB0cnVlCisgICAgICogQHBhcmFtIHRh
cmdldCBkZWZpbmVzIHRoZSBvcmlnaW5hbCB0YXJnZXQgb2YgdGhlIHN0YXRlCisgICAgICogQHBh
cmFtIGN1cnJlbnRUYXJnZXQgZGVmaW5lcyB0aGUgY3VycmVudCB0YXJnZXQgb2YgdGhlIHN0YXRl
CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgZXZlbnQgc3RhdGUKKyAgICAgKi8KKyAgICBF
dmVudFN0YXRlLnByb3RvdHlwZS5pbml0YWxpemUgPSBmdW5jdGlvbiAobWFzaywgc2tpcE5leHRP
YnNlcnZlcnMsIHRhcmdldCwgY3VycmVudFRhcmdldCkgeworICAgICAgICBpZiAoc2tpcE5leHRP
YnNlcnZlcnMgPT09IHZvaWQgMCkgeyBza2lwTmV4dE9ic2VydmVycyA9IGZhbHNlOyB9CisgICAg
ICAgIHRoaXMubWFzayA9IG1hc2s7CisgICAgICAgIHRoaXMuc2tpcE5leHRPYnNlcnZlcnMgPSBz
a2lwTmV4dE9ic2VydmVyczsKKyAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7CisgICAgICAg
IHRoaXMuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgcmV0dXJuIEV2ZW50U3RhdGU7Cit9KCkpOworCisvKioKKyAqIFJlcHJl
c2VudCBhbiBPYnNlcnZlciByZWdpc3RlcmVkIHRvIGEgZ2l2ZW4gT2JzZXJ2YWJsZSBvYmplY3Qu
CisgKi8KK3ZhciBPYnNlcnZlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IG9ic2VydmVyCisgICAgICogQHBhcmFtIGNhbGxiYWNr
IGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgb2JzZXJ2ZXIgaXMgbm90aWZp
ZWQKKyAgICAgKiBAcGFyYW0gbWFzayBkZWZpbmVzIHRoZSBtYXNrIG9mIHRoZSBvYnNlcnZlciAo
dXNlZCB0byBmaWx0ZXIgbm90aWZpY2F0aW9ucykKKyAgICAgKiBAcGFyYW0gc2NvcGUgZGVmaW5l
cyB0aGUgY3VycmVudCBzY29wZSB1c2VkIHRvIHJlc3RvcmUgdGhlIEpTIGNvbnRleHQKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBPYnNlcnZlcigKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBj
YWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIG9ic2VydmVyIGlzIG5vdGlmaWVkCisgICAgICovCisg
ICAgY2FsbGJhY2ssIAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIG1hc2sgb2YgdGhlIG9i
c2VydmVyICh1c2VkIHRvIGZpbHRlciBub3RpZmljYXRpb25zKQorICAgICAqLworICAgIG1hc2ss
IAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGN1cnJlbnQgc2NvcGUgdXNlZCB0byByZXN0
b3JlIHRoZSBKUyBjb250ZXh0CisgICAgICovCisgICAgc2NvcGUpIHsKKyAgICAgICAgaWYgKHNj
b3BlID09PSB2b2lkIDApIHsgc2NvcGUgPSBudWxsOyB9CisgICAgICAgIHRoaXMuY2FsbGJhY2sg
PSBjYWxsYmFjazsKKyAgICAgICAgdGhpcy5tYXNrID0gbWFzazsKKyAgICAgICAgdGhpcy5zY29w
ZSA9IHNjb3BlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl93aWxsQmVV
bnJlZ2lzdGVyZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0
cyBhIHByb3BlcnR5IGRlZmluaW5nIHRoYXQgdGhlIG9ic2VydmVyIGFzIHRvIGJlIHVucmVnaXN0
ZXJlZCBhZnRlciB0aGUgbmV4dCBub3RpZmljYXRpb24KKyAgICAgICAgICovCisgICAgICAgIHRo
aXMudW5yZWdpc3Rlck9uTmV4dENhbGwgPSBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIE9ic2Vy
dmVyOworfSgpKTsKKworLyoqCisgKiBSZXByZXNlbnQgYSBsaXN0IG9mIG9ic2VydmVycyByZWdp
c3RlcmVkIHRvIG11bHRpcGxlIE9ic2VydmFibGVzIG9iamVjdC4KKyAqLwordmFyIE11bHRpT2Jz
ZXJ2ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gTXVsdGlP
YnNlcnZlcigpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogUmVsZWFzZSBhc3NvY2lhdGVkIHJl
c291cmNlcworICAgICAqLworICAgIE11bHRpT2JzZXJ2ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9vYnNlcnZlcnMgJiYgdGhpcy5fb2JzZXJ2
YWJsZXMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9v
YnNlcnZlcnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fb2JzZXJ2
YWJsZXNbaW5kZXhdLnJlbW92ZSh0aGlzLl9vYnNlcnZlcnNbaW5kZXhdKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLl9vYnNlcnZlcnMgPSBudWxsOworICAgICAgICB0
aGlzLl9vYnNlcnZhYmxlcyA9IG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSYWlzZSBh
IGNhbGxiYWNrIHdoZW4gb25lIG9mIHRoZSBvYnNlcnZhYmxlIHdpbGwgbm90aWZ5CisgICAgICog
QHBhcmFtIG9ic2VydmFibGVzIGRlZmluZXMgYSBsaXN0IG9mIG9ic2VydmFibGVzIHRvIHdhdGNo
CisgICAgICogQHBhcmFtIGNhbGxiYWNrIGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIGNhbGwgb24g
bm90aWZpY2F0aW9uCisgICAgICogQHBhcmFtIG1hc2sgZGVmaW5lcyB0aGUgbWFzayB1c2VkIHRv
IGZpbHRlciBub3RpZmljYXRpb25zCisgICAgICogQHBhcmFtIHNjb3BlIGRlZmluZXMgdGhlIGN1
cnJlbnQgc2NvcGUgdXNlZCB0byByZXN0b3JlIHRoZSBKUyBjb250ZXh0CisgICAgICogQHJldHVy
bnMgdGhlIG5ldyBNdWx0aU9ic2VydmVyCisgICAgICovCisgICAgTXVsdGlPYnNlcnZlci5XYXRj
aCA9IGZ1bmN0aW9uIChvYnNlcnZhYmxlcywgY2FsbGJhY2ssIG1hc2ssIHNjb3BlKSB7CisgICAg
ICAgIGlmIChtYXNrID09PSB2b2lkIDApIHsgbWFzayA9IC0xOyB9CisgICAgICAgIGlmIChzY29w
ZSA9PT0gdm9pZCAwKSB7IHNjb3BlID0gbnVsbDsgfQorICAgICAgICB2YXIgcmVzdWx0ID0gbmV3
IE11bHRpT2JzZXJ2ZXIoKTsKKyAgICAgICAgcmVzdWx0Ll9vYnNlcnZlcnMgPSBuZXcgQXJyYXko
KTsKKyAgICAgICAgcmVzdWx0Ll9vYnNlcnZhYmxlcyA9IG9ic2VydmFibGVzOworICAgICAgICBm
b3IgKHZhciBfaSA9IDAsIG9ic2VydmFibGVzXzEgPSBvYnNlcnZhYmxlczsgX2kgPCBvYnNlcnZh
Ymxlc18xLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIG9ic2VydmFibGUgPSBvYnNl
cnZhYmxlc18xW19pXTsKKyAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IG9ic2VydmFibGUuYWRk
KGNhbGxiYWNrLCBtYXNrLCBmYWxzZSwgc2NvcGUpOworICAgICAgICAgICAgaWYgKG9ic2VydmVy
KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0Ll9vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Owor
ICAgIHJldHVybiBNdWx0aU9ic2VydmVyOworfSgpKTsKKworLyoqCisgKiBUaGUgT2JzZXJ2YWJs
ZSBjbGFzcyBpcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgT2JzZXJ2YWJsZSBwYXR0
ZXJuLgorICoKKyAqIFRoZXJlJ3Mgb25lIHNsaWdodCBwYXJ0aWN1bGFyaXR5IHRob3VnaDogYSBn
aXZlbiBPYnNlcnZhYmxlIGNhbiBub3RpZnkgaXRzIG9ic2VydmVyIHVzaW5nIGEgcGFydGljdWxh
ciBtYXNrIHZhbHVlLCBvbmx5IHRoZSBPYnNlcnZlcnMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbWFz
ayB2YWx1ZSB3aWxsIGJlIG5vdGlmaWVkLgorICogVGhpcyBlbmFibGUgYSBtb3JlIGZpbmUgZ3Jh
aW5lZCBleGVjdXRpb24gd2l0aG91dCBoYXZpbmcgdG8gcmVseSBvbiBtdWx0aXBsZSBkaWZmZXJl
bnQgT2JzZXJ2YWJsZSBvYmplY3RzLgorICogRm9yIGluc3RhbmNlIHlvdSBtYXkgaGF2ZSBhIGdp
dmVuIE9ic2VydmFibGUgdGhhdCBoYXZlIGZvdXIgZGlmZmVyZW50IHR5cGVzIG9mIG5vdGlmaWNh
dGlvbnM6IE1vdmUgKG1hc2sgPSAweDAxKSwgU3RvcCAobWFzayA9IDB4MDIpLCBUdXJuIFJpZ2h0
IChtYXNrID0gMFgwNCksIFR1cm4gTGVmdCAobWFzayA9IDBYMDgpLgorICogQSBnaXZlbiBvYnNl
cnZlciBjYW4gcmVnaXN0ZXIgaXRzZWxmIHdpdGggb25seSBNb3ZlIGFuZCBTdG9wIChtYXNrID0g
MHgwMyksIHRoZW4gaXQgd2lsbCBvbmx5IGJlIG5vdGlmaWVkIHdoZW4gb25lIG9mIHRoZXNlIHR3
byBvY2N1cnMgYW5kIHdpbGwgbmV2ZXIgYmUgZm9yIFR1cm4gTGVmdC9SaWdodC4KKyAqLwordmFy
IE9ic2VydmFibGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIG5ldyBvYnNlcnZhYmxlCisgICAgICogQHBhcmFtIG9uT2JzZXJ2ZXJBZGRl
ZCBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIGEgbmV3IG9ic2VydmVyIGlzIGFkZGVk
CisgICAgICovCisgICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShvbk9ic2VydmVyQWRkZWQpIHsKKyAg
ICAgICAgdGhpcy5fb2JzZXJ2ZXJzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX2V2ZW50
U3RhdGUgPSBuZXcgRXZlbnRTdGF0ZSgwKTsKKyAgICAgICAgaWYgKG9uT2JzZXJ2ZXJBZGRlZCkg
eworICAgICAgICAgICAgdGhpcy5fb25PYnNlcnZlckFkZGVkID0gb25PYnNlcnZlckFkZGVkOwor
ICAgICAgICB9CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYnNlcnZhYmxlLnBy
b3RvdHlwZSwgIm9ic2VydmVycyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhl
IGxpc3Qgb2Ygb2JzZXJ2ZXJzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9vYnNlcnZlcnM7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBPYnNlcnZlciB3aXRoIHRoZSBzcGVjaWZp
ZWQgY2FsbGJhY2sKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGNhbGxiYWNrIHRoYXQgd2ls
bCBiZSBleGVjdXRlZCBmb3IgdGhhdCBPYnNlcnZlcgorICAgICAqIEBwYXJhbSBtYXNrIHRoZSBt
YXNrIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycworICAgICAqIEBwYXJhbSBpbnNlcnRGaXJzdCBp
ZiB0cnVlIHRoZSBjYWxsYmFjayB3aWxsIGJlIGluc2VydGVkIGF0IHRoZSBmaXJzdCBwb3NpdGlv
biwgaGVuY2UgZXhlY3V0ZWQgYmVmb3JlIHRoZSBvdGhlcnMgb25lcy4gSWYgZmFsc2UgKGRlZmF1
bHQgYmVoYXZpb3IpIHRoZSBjYWxsYmFjayB3aWxsIGJlIGluc2VydGVkIGF0IHRoZSBsYXN0IHBv
c2l0aW9uLCBleGVjdXRlZCBhZnRlciBhbGwgdGhlIG90aGVycyBhbHJlYWR5IHByZXNlbnQuCisg
ICAgICogQHBhcmFtIHNjb3BlIG9wdGlvbmFsIHNjb3BlIGZvciB0aGUgY2FsbGJhY2sgdG8gYmUg
Y2FsbGVkIGZyb20KKyAgICAgKiBAcGFyYW0gdW5yZWdpc3Rlck9uRmlyc3RDYWxsIGRlZmluZXMg
aWYgdGhlIG9ic2VydmVyIGFzIHRvIGJlIHVucmVnaXN0ZXJlZCBhZnRlciB0aGUgbmV4dCBub3Rp
ZmljYXRpb24KKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IG9ic2VydmVyIGNyZWF0ZWQgZm9yIHRo
ZSBjYWxsYmFjaworICAgICAqLworICAgIE9ic2VydmFibGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0
aW9uIChjYWxsYmFjaywgbWFzaywgaW5zZXJ0Rmlyc3QsIHNjb3BlLCB1bnJlZ2lzdGVyT25GaXJz
dENhbGwpIHsKKyAgICAgICAgaWYgKG1hc2sgPT09IHZvaWQgMCkgeyBtYXNrID0gLTE7IH0KKyAg
ICAgICAgaWYgKGluc2VydEZpcnN0ID09PSB2b2lkIDApIHsgaW5zZXJ0Rmlyc3QgPSBmYWxzZTsg
fQorICAgICAgICBpZiAoc2NvcGUgPT09IHZvaWQgMCkgeyBzY29wZSA9IG51bGw7IH0KKyAgICAg
ICAgaWYgKHVucmVnaXN0ZXJPbkZpcnN0Q2FsbCA9PT0gdm9pZCAwKSB7IHVucmVnaXN0ZXJPbkZp
cnN0Q2FsbCA9IGZhbHNlOyB9CisgICAgICAgIGlmICghY2FsbGJhY2spIHsKKyAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBvYnNlcnZlciA9IG5ldyBPYnNl
cnZlcihjYWxsYmFjaywgbWFzaywgc2NvcGUpOworICAgICAgICBvYnNlcnZlci51bnJlZ2lzdGVy
T25OZXh0Q2FsbCA9IHVucmVnaXN0ZXJPbkZpcnN0Q2FsbDsKKyAgICAgICAgaWYgKGluc2VydEZp
cnN0KSB7CisgICAgICAgICAgICB0aGlzLl9vYnNlcnZlcnMudW5zaGlmdChvYnNlcnZlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9vYnNlcnZlcnMucHVz
aChvYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29uT2JzZXJ2ZXJBZGRl
ZCkgeworICAgICAgICAgICAgdGhpcy5fb25PYnNlcnZlckFkZGVkKG9ic2VydmVyKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gb2JzZXJ2ZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGUgYSBuZXcgT2JzZXJ2ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGFuZCB1bnJl
Z2lzdGVycyBhZnRlciB0aGUgbmV4dCBub3RpZmljYXRpb24KKyAgICAgKiBAcGFyYW0gY2FsbGJh
Y2sgdGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBmb3IgdGhhdCBPYnNlcnZlcgor
ICAgICAqIEByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgY3JlYXRlZCBmb3IgdGhlIGNhbGxiYWNr
CisgICAgICovCisgICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIChj
YWxsYmFjaykgeworICAgICAgICByZXR1cm4gdGhpcy5hZGQoY2FsbGJhY2ssIHVuZGVmaW5lZCwg
dW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVt
b3ZlIGFuIE9ic2VydmVyIGZyb20gdGhlIE9ic2VydmFibGUgb2JqZWN0CisgICAgICogQHBhcmFt
IG9ic2VydmVyIHRoZSBpbnN0YW5jZSBvZiB0aGUgT2JzZXJ2ZXIgdG8gcmVtb3ZlCisgICAgICog
QHJldHVybnMgZmFsc2UgaWYgaXQgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyBPYnNlcnZhYmxlCisg
ICAgICovCisgICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG9ic2Vy
dmVyKSB7CisgICAgICAgIGlmICghb2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9vYnNlcnZlcnMuaW5kZXhP
ZihvYnNlcnZlcik7CisgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgIHRo
aXMuX2RlZmVyVW5yZWdpc3RlcihvYnNlcnZlcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBPYnNlcnZhYmxlIG9iamVjdAorICAgICAqIEBw
YXJhbSBjYWxsYmFjayB0aGUgY2FsbGJhY2sgdG8gcmVtb3ZlCisgICAgICogQHBhcmFtIHNjb3Bl
IG9wdGlvbmFsIHNjb3BlLiBJZiB1c2VkIG9ubHkgdGhlIGNhbGxiYWNrcyB3aXRoIHRoaXMgc2Nv
cGUgd2lsbCBiZSByZW1vdmVkCisgICAgICogQHJldHVybnMgZmFsc2UgaWYgaXQgZG9lc24ndCBi
ZWxvbmcgdG8gdGhpcyBPYnNlcnZhYmxlCisgICAgKi8KKyAgICBPYnNlcnZhYmxlLnByb3RvdHlw
ZS5yZW1vdmVDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaywgc2NvcGUpIHsKKyAgICAgICAg
Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX29ic2VydmVycy5sZW5ndGg7IGluZGV4
KyspIHsKKyAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IHRoaXMuX29ic2VydmVyc1tpbmRleF07
CisgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuX3dpbGxCZVVucmVnaXN0ZXJlZCkgeworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9ic2Vy
dmVyLmNhbGxiYWNrID09PSBjYWxsYmFjayAmJiAoIXNjb3BlIHx8IHNjb3BlID09PSBvYnNlcnZl
ci5zY29wZSkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWZlclVucmVnaXN0ZXIob2JzZXJ2
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIE9ic2VydmFibGUucHJvdG90
eXBlLl9kZWZlclVucmVnaXN0ZXIgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHsKKyAgICAgICAgdmFy
IF90aGlzID0gdGhpczsKKyAgICAgICAgb2JzZXJ2ZXIudW5yZWdpc3Rlck9uTmV4dENhbGwgPSBm
YWxzZTsKKyAgICAgICAgb2JzZXJ2ZXIuX3dpbGxCZVVucmVnaXN0ZXJlZCA9IHRydWU7CisgICAg
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMuX3JlbW92ZShv
YnNlcnZlcik7CisgICAgICAgIH0sIDApOworICAgIH07CisgICAgLy8gVGhpcyBzaG91bGQgb25s
eSBiZSBjYWxsZWQgd2hlbiBub3QgaXRlcmF0aW5nIG92ZXIgX29ic2VydmVycyB0byBhdm9pZCBj
YWxsYmFjayBza2lwcGluZy4KKyAgICAvLyBSZW1vdmVzIGFuIG9ic2VydmVyIGZyb20gdGhlIF9v
YnNlcnZlciBBcnJheS4KKyAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fcmVtb3ZlID0gZnVuY3Rp
b24gKG9ic2VydmVyKSB7CisgICAgICAgIGlmICghb2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9vYnNlcnZl
cnMuaW5kZXhPZihvYnNlcnZlcik7CisgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAg
ICAgICAgIHRoaXMuX29ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAg
LyoqCisgICAgICogTW92ZXMgdGhlIG9ic2VydmFibGUgdG8gdGhlIHRvcCBvZiB0aGUgb2JzZXJ2
ZXIgbGlzdCBtYWtpbmcgaXQgZ2V0IGNhbGxlZCBmaXJzdCB3aGVuIG5vdGlmaWVkCisgICAgICog
QHBhcmFtIG9ic2VydmVyIHRoZSBvYnNlcnZlciB0byBtb3ZlCisgICAgICovCisgICAgT2JzZXJ2
YWJsZS5wcm90b3R5cGUubWFrZU9ic2VydmVyVG9wUHJpb3JpdHkgPSBmdW5jdGlvbiAob2JzZXJ2
ZXIpIHsKKyAgICAgICAgdGhpcy5fcmVtb3ZlKG9ic2VydmVyKTsKKyAgICAgICAgdGhpcy5fb2Jz
ZXJ2ZXJzLnVuc2hpZnQob2JzZXJ2ZXIpOworICAgIH07CisgICAgLyoqCisgICAgICogTW92ZXMg
dGhlIG9ic2VydmFibGUgdG8gdGhlIGJvdHRvbSBvZiB0aGUgb2JzZXJ2ZXIgbGlzdCBtYWtpbmcg
aXQgZ2V0IGNhbGxlZCBsYXN0IHdoZW4gbm90aWZpZWQKKyAgICAgKiBAcGFyYW0gb2JzZXJ2ZXIg
dGhlIG9ic2VydmVyIHRvIG1vdmUKKyAgICAgKi8KKyAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5t
YWtlT2JzZXJ2ZXJCb3R0b21Qcmlvcml0eSA9IGZ1bmN0aW9uIChvYnNlcnZlcikgeworICAgICAg
ICB0aGlzLl9yZW1vdmUob2JzZXJ2ZXIpOworICAgICAgICB0aGlzLl9vYnNlcnZlcnMucHVzaChv
YnNlcnZlcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBOb3RpZnkgYWxsIE9ic2VydmVycyBi
eSBjYWxsaW5nIHRoZWlyIHJlc3BlY3RpdmUgY2FsbGJhY2sgd2l0aCB0aGUgZ2l2ZW4gZGF0YQor
ICAgICAqIFdpbGwgcmV0dXJuIHRydWUgaWYgYWxsIG9ic2VydmVycyB3ZXJlIGV4ZWN1dGVkLCBm
YWxzZSBpZiBhbiBvYnNlcnZlciBzZXQgc2tpcE5leHRPYnNlcnZlcnMgdG8gdHJ1ZSwgdGhlbiBw
cmV2ZW50IHRoZSBzdWJzZXF1ZW50IG9uZXMgdG8gZXhlY3V0ZQorICAgICAqIEBwYXJhbSBldmVu
dERhdGEgZGVmaW5lcyB0aGUgZGF0YSB0byBzZW5kIHRvIGFsbCBvYnNlcnZlcnMKKyAgICAgKiBA
cGFyYW0gbWFzayBkZWZpbmVzIHRoZSBtYXNrIG9mIHRoZSBjdXJyZW50IG5vdGlmaWNhdGlvbiAo
b2JzZXJ2ZXJzIHdpdGggaW5jb21wYXRpYmxlIG1hc2sgKGllIG1hc2sgJiBvYnNlcnZlci5tYXNr
ID09PSAwKSB3aWxsIG5vdCBiZSBub3RpZmllZCkKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmlu
ZXMgdGhlIG9yaWdpbmFsIHRhcmdldCBvZiB0aGUgc3RhdGUKKyAgICAgKiBAcGFyYW0gY3VycmVu
dFRhcmdldCBkZWZpbmVzIHRoZSBjdXJyZW50IHRhcmdldCBvZiB0aGUgc3RhdGUKKyAgICAgKiBA
cmV0dXJucyBmYWxzZSBpZiB0aGUgY29tcGxldGUgb2JzZXJ2ZXIgY2hhaW4gd2FzIG5vdCBwcm9j
ZXNzZWQgKGJlY2F1c2Ugb25lIG9ic2VydmVyIHNldCB0aGUgc2tpcE5leHRPYnNlcnZlcnMgdG8g
dHJ1ZSkKKyAgICAgKi8KKyAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5ub3RpZnlPYnNlcnZlcnMg
PSBmdW5jdGlvbiAoZXZlbnREYXRhLCBtYXNrLCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQpIHsKKyAg
ICAgICAgaWYgKG1hc2sgPT09IHZvaWQgMCkgeyBtYXNrID0gLTE7IH0KKyAgICAgICAgaWYgKCF0
aGlzLl9vYnNlcnZlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9ldmVudFN0YXRlOworICAgICAgICBzdGF0
ZS5tYXNrID0gbWFzazsKKyAgICAgICAgc3RhdGUudGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICBz
dGF0ZS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDsKKyAgICAgICAgc3RhdGUuc2tpcE5l
eHRPYnNlcnZlcnMgPSBmYWxzZTsKKyAgICAgICAgc3RhdGUubGFzdFJldHVyblZhbHVlID0gZXZl
bnREYXRhOworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fb2JzZXJ2ZXJzOyBf
aSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIG9icyA9IF9hW19pXTsKKyAg
ICAgICAgICAgIGlmIChvYnMuX3dpbGxCZVVucmVnaXN0ZXJlZCkgeworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9icy5tYXNrICYgbWFz
aykgeworICAgICAgICAgICAgICAgIGlmIChvYnMuc2NvcGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUubGFzdFJldHVyblZhbHVlID0gb2JzLmNhbGxiYWNrLmFwcGx5KG9icy5zY29wZSwg
W2V2ZW50RGF0YSwgc3RhdGVdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IG9icy5j
YWxsYmFjayhldmVudERhdGEsIHN0YXRlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKG9icy51bnJlZ2lzdGVyT25OZXh0Q2FsbCkgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9kZWZlclVucmVnaXN0ZXIob2JzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsaW5nIHRoaXMgd2ls
bCBleGVjdXRlIGVhY2ggY2FsbGJhY2ssIGV4cGVjdGluZyBpdCB0byBiZSBhIHByb21pc2Ugb3Ig
cmV0dXJuIGEgdmFsdWUuCisgICAgICogSWYgYXQgYW55IHBvaW50IGluIHRoZSBjaGFpbiBvbmUg
ZnVuY3Rpb24gZmFpbHMsIHRoZSBwcm9taXNlIHdpbGwgZmFpbCBhbmQgdGhlIGV4ZWN1dGlvbiB3
aWxsIG5vdCBjb250aW51ZS4KKyAgICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgY2hhaW4gb2Yg
ZXZlbnRzIChzb21ldGltZXMgYXN5bmMgZXZlbnRzKSBpcyBuZWVkZWQgdG8gaW5pdGlhbGl6ZSBh
IGNlcnRhaW4gb2JqZWN0CisgICAgICogYW5kIGl0IGlzIGNydWNpYWwgdGhhdCBhbGwgY2FsbGJh
Y2tzIHdpbGwgYmUgZXhlY3V0ZWQuCisgICAgICogVGhlIG9yZGVyIG9mIHRoZSBjYWxsYmFja3Mg
aXMga2VwdCwgY2FsbGJhY2tzIGFyZSBub3QgZXhlY3V0ZWQgcGFyYWxsZWwuCisgICAgICoKKyAg
ICAgKiBAcGFyYW0gZXZlbnREYXRhIFRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gZWFjaCBjYWxsYmFj
aworICAgICAqIEBwYXJhbSBtYXNrIGlzIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycyBkZWZhdWx0
cyB0byAtMQorICAgICAqIEBwYXJhbSB0YXJnZXQgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdGFyZ2V0
IChzZWUgRXZlbnRTdGF0ZSkKKyAgICAgKiBAcGFyYW0gY3VycmVudFRhcmdldCBkZWZpbmVzIGhl
IGN1cnJlbnQgb2JqZWN0IGluIHRoZSBidWJibGluZyBwaGFzZQorICAgICAqIEByZXR1cm5zIHtQ
cm9taXNlPFQ+fSB3aWxsIHJldHVybiBhIFByb21pc2UgdGhhbiByZXNvbHZlcyB3aGVuIGFsbCBj
YWxsYmFja3MgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAqLworICAgIE9ic2VydmFibGUu
cHJvdG90eXBlLm5vdGlmeU9ic2VydmVyc1dpdGhQcm9taXNlID0gZnVuY3Rpb24gKGV2ZW50RGF0
YSwgbWFzaywgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRo
aXM7CisgICAgICAgIGlmIChtYXNrID09PSB2b2lkIDApIHsgbWFzayA9IC0xOyB9CisgICAgICAg
IC8vIGNyZWF0ZSBhbiBlbXB0eSBwcm9taXNlCisgICAgICAgIHZhciBwID0gUHJvbWlzZS5yZXNv
bHZlKGV2ZW50RGF0YSk7CisgICAgICAgIC8vIG5vIG9ic2VydmVycz8gcmV0dXJuIHRoaXMgcHJv
bWlzZS4KKyAgICAgICAgaWYgKCF0aGlzLl9vYnNlcnZlcnMubGVuZ3RoKSB7CisgICAgICAgICAg
ICByZXR1cm4gcDsKKyAgICAgICAgfQorICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9ldmVudFN0
YXRlOworICAgICAgICBzdGF0ZS5tYXNrID0gbWFzazsKKyAgICAgICAgc3RhdGUudGFyZ2V0ID0g
dGFyZ2V0OworICAgICAgICBzdGF0ZS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDsKKyAg
ICAgICAgc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMgPSBmYWxzZTsKKyAgICAgICAgLy8gZXhlY3V0
ZSBvbmUgY2FsbGJhY2sgYWZ0ZXIgYW5vdGhlciAobm90IHVzaW5nIFByb21pc2UuYWxsLCB0aGUg
b3JkZXIgaXMgaW1wb3J0YW50KQorICAgICAgICB0aGlzLl9vYnNlcnZlcnMuZm9yRWFjaChmdW5j
dGlvbiAob2JzKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
b2JzLl93aWxsQmVVbnJlZ2lzdGVyZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAob2JzLm1hc2sgJiBtYXNrKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG9icy5zY29wZSkgeworICAgICAgICAgICAgICAgICAgICBwID0gcC50aGVuKGZ1
bmN0aW9uIChsYXN0UmV0dXJuZWRWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUubGFzdFJldHVyblZhbHVlID0gbGFzdFJldHVybmVkVmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gb2JzLmNhbGxiYWNrLmFwcGx5KG9icy5zY29wZSwgW2V2ZW50RGF0YSwg
c3RhdGVdKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwID0gcC50aGVuKGZ1bmN0
aW9uIChsYXN0UmV0dXJuZWRWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUu
bGFzdFJldHVyblZhbHVlID0gbGFzdFJldHVybmVkVmFsdWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gb2JzLmNhbGxiYWNrKGV2ZW50RGF0YSwgc3RhdGUpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG9icy51
bnJlZ2lzdGVyT25OZXh0Q2FsbCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZGVmZXJV
bnJlZ2lzdGVyKG9icyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9KTsKKyAgICAgICAgLy8gcmV0dXJuIHRoZSBldmVudERhdGEKKyAgICAgICAgcmV0dXJuIHAu
dGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBldmVudERhdGE7IH0pOworICAgIH07CisgICAgLyoq
CisgICAgICogTm90aWZ5IGEgc3BlY2lmaWMgb2JzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gb2JzZXJ2
ZXIgZGVmaW5lcyB0aGUgb2JzZXJ2ZXIgdG8gbm90aWZ5CisgICAgICogQHBhcmFtIGV2ZW50RGF0
YSBkZWZpbmVzIHRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gZWFjaCBjYWxsYmFjaworICAgICAqIEBw
YXJhbSBtYXNrIGlzIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycyBkZWZhdWx0cyB0byAtMQorICAg
ICAqLworICAgIE9ic2VydmFibGUucHJvdG90eXBlLm5vdGlmeU9ic2VydmVyID0gZnVuY3Rpb24g
KG9ic2VydmVyLCBldmVudERhdGEsIG1hc2spIHsKKyAgICAgICAgaWYgKG1hc2sgPT09IHZvaWQg
MCkgeyBtYXNrID0gLTE7IH0KKyAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fZXZlbnRTdGF0ZTsK
KyAgICAgICAgc3RhdGUubWFzayA9IG1hc2s7CisgICAgICAgIHN0YXRlLnNraXBOZXh0T2JzZXJ2
ZXJzID0gZmFsc2U7CisgICAgICAgIG9ic2VydmVyLmNhbGxiYWNrKGV2ZW50RGF0YSwgc3RhdGUp
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0
aGUgb2JzZXJ2YWJsZSBoYXMgYXQgbGVhc3Qgb25lIG9ic2VydmVyCisgICAgICogQHJldHVybnMg
dHJ1ZSBpcyB0aGUgT2JzZXJ2YWJsZSBoYXMgYXQgbGVhc3Qgb25lIE9ic2VydmVyIHJlZ2lzdGVy
ZWQKKyAgICAgKi8KKyAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5oYXNPYnNlcnZlcnMgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9vYnNlcnZlcnMubGVuZ3RoID4gMDsKKyAg
ICB9OworICAgIC8qKgorICAgICogQ2xlYXIgdGhlIGxpc3Qgb2Ygb2JzZXJ2ZXJzCisgICAgKi8K
KyAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dGhpcy5fb2JzZXJ2ZXJzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX29uT2JzZXJ2ZXJB
ZGRlZCA9IG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZSB0aGUgY3VycmVudCBv
YnNlcnZhYmxlCisgICAgICogQHJldHVybnMgYSBuZXcgb2JzZXJ2YWJsZQorICAgICAqLworICAg
IE9ic2VydmFibGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIg
cmVzdWx0ID0gbmV3IE9ic2VydmFibGUoKTsKKyAgICAgICAgcmVzdWx0Ll9vYnNlcnZlcnMgPSB0
aGlzLl9vYnNlcnZlcnMuc2xpY2UoMCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBEb2VzIHRoaXMgb2JzZXJ2YWJsZSBoYW5kbGVzIG9ic2VydmVyIHJl
Z2lzdGVyZWQgd2l0aCBhIGdpdmVuIG1hc2sKKyAgICAgKiBAcGFyYW0gbWFzayBkZWZpbmVzIHRo
ZSBtYXNrIHRvIGJlIHRlc3RlZAorICAgICAqIEByZXR1cm4gd2hldGhlciBvciBub3Qgb25lIG9i
c2VydmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZ2l2ZW4gbWFzayBpcyBoYW5kZWxlZAorICAgICoq
LworICAgIE9ic2VydmFibGUucHJvdG90eXBlLmhhc1NwZWNpZmljTWFzayA9IGZ1bmN0aW9uICht
YXNrKSB7CisgICAgICAgIGlmIChtYXNrID09PSB2b2lkIDApIHsgbWFzayA9IC0xOyB9CisgICAg
ICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9vYnNlcnZlcnM7IF9pIDwgX2EubGVuZ3Ro
OyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgb2JzID0gX2FbX2ldOworICAgICAgICAgICAgaWYg
KG9icy5tYXNrICYgbWFzayB8fCBvYnMubWFzayA9PT0gbWFzaykgeworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9OworICAgIHJldHVybiBPYnNlcnZhYmxlOworfSgpKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9NaXNjL3BlcmZDb3VudGVyLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL3BlcmZDb3VudGVyLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBl
cmZDb3VudGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBlcmZDb3Vu
dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQZXJmQ291bnRlcjsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX3ByZWNpc2lvbkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcHJlY2lzaW9uRGF0ZSAqLyAiLi9NaXNjL3ByZWNp
c2lvbkRhdGUudHMiKTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gdHJhY2sgYSBw
ZXJmb3JtYW5jZSBjb3VudGVyIHdoaWNoIGlzIG51bWJlciBiYXNlZC4KKyAqIFRoZSB1c2VyIGhh
cyBhY2Nlc3MgdG8gbWFueSBwcm9wZXJ0aWVzIHdoaWNoIGdpdmUgc3RhdGlzdGljcyBvZiBkaWZm
ZXJlbnQgbmF0dXJlLgorICoKKyAqIFRoZSBpbXBsZW1lbnRlciBjYW4gdHJhY2sgdHdvIGtpbmRz
IG9mIFBlcmZvcm1hbmNlIENvdW50ZXI6IHRpbWUgYW5kIGNvdW50LgorICogRm9yIHRpbWUgeW91
IGNhbiBvcHRpb25hbGx5IGNhbGwgZmV0Y2hOZXdGcmFtZSgpIHRvIG5vdGlmeSB0aGUgc3RhcnQg
b2YgYSBuZXcgZnJhbWUgdG8gbW9uaXRvciwgdGhlbiBjYWxsIGJlZ2luTW9uaXRvcmluZygpIHRv
IHN0YXJ0IGFuZCBlbmRNb25pdG9yaW5nKCkgdG8gcmVjb3JkIHRoZSBsYXBzZWQgdGltZS4gZW5k
TW9uaXRvcmluZyB0YWtlcyBhIG5ld0ZyYW1lIHBhcmFtZXRlciBmb3IgeW91IHRvIHNwZWNpZnkg
aWYgdGhlIG1vbml0b3JlZCB0aW1lIHNob3VsZCBiZSBzZXQgZm9yIGEgbmV3IGZyYW1lIG9yIGFj
Y3VtdWxhdGVkIHRvIHRoZSBjdXJyZW50IGZyYW1lIGJlaW5nIG1vbml0b3JlZC4KKyAqIEZvciBj
b3VudCB5b3UgZmlyc3QgaGF2ZSB0byBjYWxsIGZldGNoTmV3RnJhbWUoKSB0byBub3RpZnkgdGhl
IHN0YXJ0IG9mIGEgbmV3IGZyYW1lIHRvIG1vbml0b3IsIHRoZW4gY2FsbCBhZGRDb3VudCgpIGhv
dyBtYW55IHRpbWUgcmVxdWlyZWQgdG8gaW5jcmVtZW50IHRoZSBjb3VudCB2YWx1ZSB5b3UgbW9u
aXRvci4KKyAqLwordmFyIFBlcmZDb3VudGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgY291bnRlcgorICAgICAqLworICAgIGZ1
bmN0aW9uIFBlcmZDb3VudGVyKCkgeworICAgICAgICB0aGlzLl9zdGFydE1vbml0b3JpbmdUaW1l
ID0gMDsKKyAgICAgICAgdGhpcy5fbWluID0gMDsKKyAgICAgICAgdGhpcy5fbWF4ID0gMDsKKyAg
ICAgICAgdGhpcy5fYXZlcmFnZSA9IDA7CisgICAgICAgIHRoaXMuX2xhc3RTZWNBdmVyYWdlID0g
MDsKKyAgICAgICAgdGhpcy5fY3VycmVudCA9IDA7CisgICAgICAgIHRoaXMuX3RvdGFsVmFsdWVD
b3VudCA9IDA7CisgICAgICAgIHRoaXMuX3RvdGFsQWNjdW11bGF0ZWQgPSAwOworICAgICAgICB0
aGlzLl9sYXN0U2VjQWNjdW11bGF0ZWQgPSAwOworICAgICAgICB0aGlzLl9sYXN0U2VjVGltZSA9
IDA7CisgICAgICAgIHRoaXMuX2xhc3RTZWNWYWx1ZUNvdW50ID0gMDsKKyAgICB9CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFBlcmZDb3VudGVyLnByb3RvdHlwZSwgIm1pbiIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIHNtYWxsZXN0IHZhbHVlIGV2ZXIKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX21pbjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBl
cmZDb3VudGVyLnByb3RvdHlwZSwgIm1heCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJl
dHVybnMgdGhlIGJpZ2dlc3QgdmFsdWUgZXZlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4OworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGVyZkNvdW50ZXIucHJvdG90eXBlLCAi
YXZlcmFnZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIGF2ZXJhZ2Ug
dmFsdWUgc2luY2UgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgaXMgcnVubmluZworICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
YXZlcmFnZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBl
cmZDb3VudGVyLnByb3RvdHlwZSwgImxhc3RTZWNBdmVyYWdlIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogUmV0dXJucyB0aGUgYXZlcmFnZSB2YWx1ZSBvZiB0aGUgbGFzdCBzZWNvbmQgdGhl
IGNvdW50ZXIgd2FzIG1vbml0b3JlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFNlY0F2ZXJhZ2U7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQZXJmQ291bnRlci5wcm90b3R5
cGUsICJjdXJyZW50IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB0aGUgY3Vy
cmVudCB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFBlcmZDb3VudGVyLnByb3RvdHlwZSwgInRvdGFsIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgYWNjdW11bGF0ZWQgdG90YWwKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3RvdGFsQWNjdW11bGF0ZWQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShQZXJmQ291bnRlci5wcm90b3R5cGUsICJjb3VudCIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIHRvdGFsIHZhbHVlIGNvdW50CisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90b3RhbFZhbHVl
Q291bnQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIENhbGwgdGhpcyBtZXRo
b2QgdG8gc3RhcnQgbW9uaXRvcmluZyBhIG5ldyBmcmFtZS4KKyAgICAgKiBUaGlzIHNjZW5hcmlv
IGlzIHR5cGljYWxseSB1c2VkIHdoZW4geW91IGFjY3VtdWxhdGUgbW9uaXRvcmluZyB0aW1lIG1h
bnkgdGltZXMgZm9yIGEgc2luZ2xlIGZyYW1lLCB5b3UgY2FsbCB0aGlzIG1ldGhvZCBhdCB0aGUg
c3RhcnQgb2YgdGhlIGZyYW1lLCB0aGVuIGJlZ2luTW9uaXRvcmluZyB0byBzdGFydCByZWNvcmRp
bmcgYW5kIGVuZE1vbml0b3JpbmcoZmFsc2UpIHRvIGFjY3VtdWxhdGVkIHRoZSByZWNvcmRlZCB0
aW1lIHRvIHRoZSBQZXJmQ291bnRlciBvciBhZGRDb3VudCgpIHRvIGFjY3VtdWxhdGUgYSBtb25p
dG9yZWQgY291bnQuCisgICAgICovCisgICAgUGVyZkNvdW50ZXIucHJvdG90eXBlLmZldGNoTmV3
RnJhbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3RvdGFsVmFsdWVDb3VudCsrOwor
ICAgICAgICB0aGlzLl9jdXJyZW50ID0gMDsKKyAgICAgICAgdGhpcy5fbGFzdFNlY1ZhbHVlQ291
bnQrKzsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGwgdGhpcyBtZXRob2QgdG8gbW9uaXRv
ciBhIGNvdW50IG9mIHNvbWV0aGluZyAoZS5nLiBtZXNoIGRyYXduIGluIHZpZXdwb3J0IGNvdW50
KQorICAgICAqIEBwYXJhbSBuZXdDb3VudCB0aGUgY291bnQgdmFsdWUgdG8gYWRkIHRvIHRoZSBt
b25pdG9yZWQgY291bnQKKyAgICAgKiBAcGFyYW0gZmV0Y2hSZXN1bHQgdHJ1ZSB3aGVuIGl0J3Mg
dGhlIGxhc3QgdGltZSBpbiB0aGUgZnJhbWUgeW91IGFkZCB0byB0aGUgY291bnRlciBhbmQgeW91
IHdpc2ggdG8gdXBkYXRlIHRoZSBzdGF0aXN0aWNzIHByb3BlcnRpZXMgKG1pbi9tYXgvYXZlcmFn
ZSksIGZhbHNlIGlmIHlvdSBvbmx5IHdhbnQgdG8gdXBkYXRlIHN0YXRpc3RpY3MuCisgICAgICov
CisgICAgUGVyZkNvdW50ZXIucHJvdG90eXBlLmFkZENvdW50ID0gZnVuY3Rpb24gKG5ld0NvdW50
LCBmZXRjaFJlc3VsdCkgeworICAgICAgICBpZiAoIVBlcmZDb3VudGVyLkVuYWJsZWQpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50ICs9IG5l
d0NvdW50OworICAgICAgICBpZiAoZmV0Y2hSZXN1bHQpIHsKKyAgICAgICAgICAgIHRoaXMuX2Zl
dGNoUmVzdWx0KCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFN0YXJ0IG1v
bml0b3JpbmcgdGhpcyBwZXJmb3JtYW5jZSBjb3VudGVyCisgICAgICovCisgICAgUGVyZkNvdW50
ZXIucHJvdG90eXBlLmJlZ2luTW9uaXRvcmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KCFQZXJmQ291bnRlci5FbmFibGVkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fc3RhcnRNb25pdG9yaW5nVGltZSA9IF9wcmVjaXNpb25EYXRlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlByZWNpc2lvbkRhdGUiXS5Ob3c7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDb21wdXRlIHRoZSB0aW1lIGxhcHNlZCBzaW5jZSB0aGUgcHJldmlvdXMg
YmVnaW5Nb25pdG9yaW5nKCkgY2FsbC4KKyAgICAgKiBAcGFyYW0gbmV3RnJhbWUgdHJ1ZSBieSBk
ZWZhdWx0IHRvIGZldGNoIHRoZSByZXN1bHQgYW5kIG1vbml0b3IgYSBuZXcgZnJhbWUsIGlmIGZh
bHNlIHRoZSB0aW1lIG1vbml0b3JlZCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IGZyYW1l
IGNvdW50ZXIKKyAgICAgKi8KKyAgICBQZXJmQ291bnRlci5wcm90b3R5cGUuZW5kTW9uaXRvcmlu
ZyA9IGZ1bmN0aW9uIChuZXdGcmFtZSkgeworICAgICAgICBpZiAobmV3RnJhbWUgPT09IHZvaWQg
MCkgeyBuZXdGcmFtZSA9IHRydWU7IH0KKyAgICAgICAgaWYgKCFQZXJmQ291bnRlci5FbmFibGVk
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5ld0ZyYW1l
KSB7CisgICAgICAgICAgICB0aGlzLmZldGNoTmV3RnJhbWUoKTsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgY3VycmVudFRpbWUgPSBfcHJlY2lzaW9uRGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJQcmVjaXNpb25EYXRlIl0uTm93OworICAgICAgICB0aGlzLl9jdXJyZW50ID0gY3Vy
cmVudFRpbWUgLSB0aGlzLl9zdGFydE1vbml0b3JpbmdUaW1lOworICAgICAgICBpZiAobmV3RnJh
bWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2ZldGNoUmVzdWx0KCk7CisgICAgICAgIH0KKyAgICB9
OworICAgIFBlcmZDb3VudGVyLnByb3RvdHlwZS5fZmV0Y2hSZXN1bHQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMuX3RvdGFsQWNjdW11bGF0ZWQgKz0gdGhpcy5fY3VycmVudDsKKyAgICAg
ICAgdGhpcy5fbGFzdFNlY0FjY3VtdWxhdGVkICs9IHRoaXMuX2N1cnJlbnQ7CisgICAgICAgIC8v
IE1pbi9NYXggdXBkYXRlCisgICAgICAgIHRoaXMuX21pbiA9IE1hdGgubWluKHRoaXMuX21pbiwg
dGhpcy5fY3VycmVudCk7CisgICAgICAgIHRoaXMuX21heCA9IE1hdGgubWF4KHRoaXMuX21heCwg
dGhpcy5fY3VycmVudCk7CisgICAgICAgIHRoaXMuX2F2ZXJhZ2UgPSB0aGlzLl90b3RhbEFjY3Vt
dWxhdGVkIC8gdGhpcy5fdG90YWxWYWx1ZUNvdW50OworICAgICAgICAvLyBSZXNldCBsYXN0IHNl
Yz8KKyAgICAgICAgdmFyIG5vdyA9IF9wcmVjaXNpb25EYXRlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlByZWNpc2lvbkRhdGUiXS5Ob3c7CisgICAgICAgIGlmICgobm93IC0gdGhpcy5f
bGFzdFNlY1RpbWUpID4gMTAwMCkgeworICAgICAgICAgICAgdGhpcy5fbGFzdFNlY0F2ZXJhZ2Ug
PSB0aGlzLl9sYXN0U2VjQWNjdW11bGF0ZWQgLyB0aGlzLl9sYXN0U2VjVmFsdWVDb3VudDsKKyAg
ICAgICAgICAgIHRoaXMuX2xhc3RTZWNUaW1lID0gbm93OworICAgICAgICAgICAgdGhpcy5fbGFz
dFNlY0FjY3VtdWxhdGVkID0gMDsKKyAgICAgICAgICAgIHRoaXMuX2xhc3RTZWNWYWx1ZUNvdW50
ID0gMDsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBvciBzZXRzIGEg
Z2xvYmFsIGJvb2xlYW4gdG8gdHVybiBvbiBhbmQgb2ZmIGFsbCB0aGUgY291bnRlcnMKKyAgICAg
Ki8KKyAgICBQZXJmQ291bnRlci5FbmFibGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gUGVyZkNvdW50
ZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2MvcGVyZm9ybWFuY2VN
b25pdG9yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vTWlzYy9wZXJmb3JtYW5jZU1vbml0b3IudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBlcmZvcm1h
bmNlTW9uaXRvciwgUm9sbGluZ0F2ZXJhZ2UgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiUGVyZm9ybWFuY2VNb25pdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQZXJmb3Jt
YW5jZU1vbml0b3I7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUm9sbGluZ0F2ZXJhZ2UiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFJvbGxpbmdBdmVyYWdlOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcHJlY2lzaW9uRGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9wcmVjaXNpb25EYXRlICovICIuL01pc2MvcHJlY2lzaW9uRGF0
ZS50cyIpOworCisvKioKKyAqIFBlcmZvcm1hbmNlIG1vbml0b3IgdHJhY2tzIHJvbGxpbmcgYXZl
cmFnZSBmcmFtZS10aW1lIGFuZCBmcmFtZS10aW1lIHZhcmlhbmNlIG92ZXIgYSB1c2VyIGRlZmlu
ZWQgc2xpZGluZy13aW5kb3cKKyAqLwordmFyIFBlcmZvcm1hbmNlTW9uaXRvciA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBjb25zdHJ1Y3RvcgorICAgICAq
IEBwYXJhbSBmcmFtZVNhbXBsZVNpemUgVGhlIG51bWJlciBvZiBzYW1wbGVzIHJlcXVpcmVkIHRv
IHNhdHVyYXRlIHRoZSBzbGlkaW5nIHdpbmRvdworICAgICAqLworICAgIGZ1bmN0aW9uIFBlcmZv
cm1hbmNlTW9uaXRvcihmcmFtZVNhbXBsZVNpemUpIHsKKyAgICAgICAgaWYgKGZyYW1lU2FtcGxl
U2l6ZSA9PT0gdm9pZCAwKSB7IGZyYW1lU2FtcGxlU2l6ZSA9IDMwOyB9CisgICAgICAgIHRoaXMu
X2VuYWJsZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9yb2xsaW5nRnJhbWVUaW1lID0gbmV3IFJv
bGxpbmdBdmVyYWdlKGZyYW1lU2FtcGxlU2l6ZSk7CisgICAgfQorICAgIC8qKgorICAgICAqIFNh
bXBsZXMgY3VycmVudCBmcmFtZQorICAgICAqIEBwYXJhbSB0aW1lTXMgQSB0aW1lc3RhbXAgaW4g
bWlsbGlzZWNvbmRzIG9mIHRoZSBjdXJyZW50IGZyYW1lIHRvIGNvbXBhcmUgd2l0aCBvdGhlciBm
cmFtZXMKKyAgICAgKi8KKyAgICBQZXJmb3JtYW5jZU1vbml0b3IucHJvdG90eXBlLnNhbXBsZUZy
YW1lID0gZnVuY3Rpb24gKHRpbWVNcykgeworICAgICAgICBpZiAodGltZU1zID09PSB2b2lkIDAp
IHsgdGltZU1zID0gX3ByZWNpc2lvbkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
UHJlY2lzaW9uRGF0ZSJdLk5vdzsgfQorICAgICAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fbGFzdEZyYW1l
VGltZU1zICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBkdCA9IHRpbWVNcyAtIHRoaXMuX2xh
c3RGcmFtZVRpbWVNczsKKyAgICAgICAgICAgIHRoaXMuX3JvbGxpbmdGcmFtZVRpbWUuYWRkKGR0
KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9sYXN0RnJhbWVUaW1lTXMgPSB0aW1lTXM7Cisg
ICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGVyZm9ybWFuY2VNb25pdG9yLnByb3Rv
dHlwZSwgImF2ZXJhZ2VGcmFtZVRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1
cm5zIHRoZSBhdmVyYWdlIGZyYW1lIHRpbWUgaW4gbWlsbGlzZWNvbmRzIG92ZXIgdGhlIHNsaWRp
bmcgd2luZG93IChvciB0aGUgc3Vic2V0IG9mIGZyYW1lcyBzYW1wbGVkIHNvIGZhcikKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3JvbGxpbmdGcmFtZVRpbWUuYXZlcmFnZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFBlcmZvcm1hbmNlTW9uaXRvci5wcm90b3R5cGUsICJhdmVyYWdl
RnJhbWVUaW1lVmFyaWFuY2UiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRo
ZSB2YXJpYW5jZSBmcmFtZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBvdmVyIHRoZSBzbGlkaW5nIHdp
bmRvdyAob3IgdGhlIHN1YnNldCBvZiBmcmFtZXMgc2FtcGxlZCBzbyBmYXIpCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9y
b2xsaW5nRnJhbWVUaW1lLnZhcmlhbmNlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoUGVyZm9ybWFuY2VNb25pdG9yLnByb3RvdHlwZSwgImluc3RhbnRhbmVv
dXNGcmFtZVRpbWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBmcmFt
ZSB0aW1lIG9mIHRoZSBtb3N0IHJlY2VudCBmcmFtZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9sbGluZ0ZyYW1lVGlt
ZS5oaXN0b3J5KDApOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoUGVyZm9ybWFuY2VNb25pdG9yLnByb3RvdHlwZSwgImF2ZXJhZ2VGUFMiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSBhdmVyYWdlIGZyYW1lcmF0ZSBpbiBmcmFtZXMg
cGVyIHNlY29uZCBvdmVyIHRoZSBzbGlkaW5nIHdpbmRvdyAob3IgdGhlIHN1YnNldCBvZiBmcmFt
ZXMgc2FtcGxlZCBzbyBmYXIpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiAxMDAwLjAgLyB0aGlzLl9yb2xsaW5nRnJhbWVUaW1lLmF2
ZXJhZ2U7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQZXJm
b3JtYW5jZU1vbml0b3IucHJvdG90eXBlLCAiaW5zdGFudGFuZW91c0ZQUyIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIGF2ZXJhZ2UgZnJhbWVyYXRlIGluIGZyYW1lcyBw
ZXIgc2Vjb25kIHVzaW5nIHRoZSBtb3N0IHJlY2VudCBmcmFtZSB0aW1lCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBoaXN0b3J5ID0gdGhp
cy5fcm9sbGluZ0ZyYW1lVGltZS5oaXN0b3J5KDApOworICAgICAgICAgICAgaWYgKGhpc3Rvcnkg
PT09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiAxMDAwLjAgLyBoaXN0b3J5OworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoUGVyZm9ybWFuY2VNb25pdG9yLnByb3RvdHlwZSwgImlzU2F0
dXJhdGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB0cnVlIGlmIGVub3Vn
aCBzYW1wbGVzIGhhdmUgYmVlbiB0YWtlbiB0byBjb21wbGV0ZWx5IGZpbGwgdGhlIHNsaWRpbmcg
d2luZG93CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9yb2xsaW5nRnJhbWVUaW1lLmlzU2F0dXJhdGVkKCk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEVuYWJsZXMgY29udHJpYnV0aW9ucyB0byB0aGUg
c2xpZGluZyB3aW5kb3cgc2FtcGxlIHNldAorICAgICAqLworICAgIFBlcmZvcm1hbmNlTW9uaXRv
ci5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9lbmFibGVk
ID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc2FibGVzIGNvbnRyaWJ1dGlvbnMg
dG8gdGhlIHNsaWRpbmcgd2luZG93IHNhbXBsZSBzZXQKKyAgICAgKiBTYW1wbGVzIHdpbGwgbm90
IGJlIGludGVycG9sYXRlZCBvdmVyIHRoZSBkaXNhYmxlZCBwZXJpb2QKKyAgICAgKi8KKyAgICBQ
ZXJmb3JtYW5jZU1vbml0b3IucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgLy9jbGVhciBsYXN0IHNhbXBsZSB0
byBhdm9pZCBpbnRlcnBvbGF0aW5nIG92ZXIgdGhlIGRpc2FibGVkIHBlcmlvZCB3aGVuIG5leHQg
ZW5hYmxlZAorICAgICAgICB0aGlzLl9sYXN0RnJhbWVUaW1lTXMgPSBudWxsOworICAgIH07Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBlcmZvcm1hbmNlTW9uaXRvci5wcm90b3R5cGUsICJp
c0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgc2Ft
cGxpbmcgaXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgLyoqCisgICAgICogUmVzZXRzIHBlcmZvcm1hbmNlIG1vbml0b3IKKyAgICAgKi8KKyAgICBQ
ZXJmb3JtYW5jZU1vbml0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAvL2NsZWFyIGxhc3Qgc2FtcGxlIHRvIGF2b2lkIGludGVycG9sYXRpbmcgb3ZlciB0aGUgZGlz
YWJsZWQgcGVyaW9kIHdoZW4gbmV4dCBlbmFibGVkCisgICAgICAgIHRoaXMuX2xhc3RGcmFtZVRp
bWVNcyA9IG51bGw7CisgICAgICAgIC8vd2lwZSByZWNvcmQKKyAgICAgICAgdGhpcy5fcm9sbGlu
Z0ZyYW1lVGltZS5yZXNldCgpOworICAgIH07CisgICAgcmV0dXJuIFBlcmZvcm1hbmNlTW9uaXRv
cjsKK30oKSk7CisKKy8qKgorICogUm9sbGluZ0F2ZXJhZ2UKKyAqCisgKiBVdGlsaXR5IHRvIGVm
ZmljaWVudGx5IGNvbXB1dGUgdGhlIHJvbGxpbmcgYXZlcmFnZSBhbmQgdmFyaWFuY2Ugb3ZlciBh
IHNsaWRpbmcgd2luZG93IG9mIHNhbXBsZXMKKyAqLwordmFyIFJvbGxpbmdBdmVyYWdlID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIGNvbnN0cnVjdG9yCisg
ICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVxdWlyZWQgdG8gc2F0
dXJhdGUgdGhlIHNsaWRpbmcgd2luZG93CisgICAgICovCisgICAgZnVuY3Rpb24gUm9sbGluZ0F2
ZXJhZ2UobGVuZ3RoKSB7CisgICAgICAgIHRoaXMuX3NhbXBsZXMgPSBuZXcgQXJyYXkobGVuZ3Ro
KTsKKyAgICAgICAgdGhpcy5yZXNldCgpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGRzIGEg
c2FtcGxlIHRvIHRoZSBzYW1wbGUgc2V0CisgICAgICogQHBhcmFtIHYgVGhlIHNhbXBsZSB2YWx1
ZQorICAgICAqLworICAgIFJvbGxpbmdBdmVyYWdlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAo
dikgeworICAgICAgICAvL2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWxnb3JpdGhtc19m
b3JfY2FsY3VsYXRpbmdfdmFyaWFuY2UKKyAgICAgICAgdmFyIGRlbHRhOworICAgICAgICAvL3dl
IG5lZWQgdG8gY2hlY2sgaWYgd2UndmUgYWxyZWFkeSB3cmFwcGVkIHJvdW5kCisgICAgICAgIGlm
ICh0aGlzLmlzU2F0dXJhdGVkKCkpIHsKKyAgICAgICAgICAgIC8vcmVtb3ZlIGJvdHRvbSBvZiBz
dGFjayBmcm9tIG1lYW4KKyAgICAgICAgICAgIHZhciBib3R0b21WYWx1ZSA9IHRoaXMuX3NhbXBs
ZXNbdGhpcy5fcG9zXTsKKyAgICAgICAgICAgIGRlbHRhID0gYm90dG9tVmFsdWUgLSB0aGlzLmF2
ZXJhZ2U7CisgICAgICAgICAgICB0aGlzLmF2ZXJhZ2UgLT0gZGVsdGEgLyAodGhpcy5fc2FtcGxl
Q291bnQgLSAxKTsKKyAgICAgICAgICAgIHRoaXMuX20yIC09IGRlbHRhICogKGJvdHRvbVZhbHVl
IC0gdGhpcy5hdmVyYWdlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHRoaXMuX3NhbXBsZUNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgLy9hZGQgbmV3IHZhbHVl
IHRvIG1lYW4KKyAgICAgICAgZGVsdGEgPSB2IC0gdGhpcy5hdmVyYWdlOworICAgICAgICB0aGlz
LmF2ZXJhZ2UgKz0gZGVsdGEgLyAodGhpcy5fc2FtcGxlQ291bnQpOworICAgICAgICB0aGlzLl9t
MiArPSBkZWx0YSAqICh2IC0gdGhpcy5hdmVyYWdlKTsKKyAgICAgICAgLy9zZXQgdGhlIG5ldyB2
YXJpYW5jZQorICAgICAgICB0aGlzLnZhcmlhbmNlID0gdGhpcy5fbTIgLyAodGhpcy5fc2FtcGxl
Q291bnQgLSAxKTsKKyAgICAgICAgdGhpcy5fc2FtcGxlc1t0aGlzLl9wb3NdID0gdjsKKyAgICAg
ICAgdGhpcy5fcG9zKys7CisgICAgICAgIHRoaXMuX3BvcyAlPSB0aGlzLl9zYW1wbGVzLmxlbmd0
aDsgLy9wb3NpdGl2ZSB3cmFwIGFyb3VuZAorICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJu
cyBwcmV2aW91c2x5IGFkZGVkIHZhbHVlcyBvciBudWxsIGlmIG91dHNpZGUgb2YgaGlzdG9yeSBv
ciBvdXRzaWRlIHRoZSBzbGlkaW5nIHdpbmRvdyBkb21haW4KKyAgICAgKiBAcGFyYW0gaSBJbmRl
eCBpbiBoaXN0b3J5LiBGb3IgZXhhbXBsZSwgcGFzcyAwIGZvciB0aGUgbW9zdCByZWNlbnQgdmFs
dWUgYW5kIDEgZm9yIHRoZSB2YWx1ZSBiZWZvcmUgdGhhdAorICAgICAqIEByZXR1cm4gVmFsdWUg
cHJldmlvdXNseSByZWNvcmRlZCB3aXRoIGFkZCgpIG9yIG51bGwgaWYgb3V0c2lkZSBvZiByYW5n
ZQorICAgICAqLworICAgIFJvbGxpbmdBdmVyYWdlLnByb3RvdHlwZS5oaXN0b3J5ID0gZnVuY3Rp
b24gKGkpIHsKKyAgICAgICAgaWYgKChpID49IHRoaXMuX3NhbXBsZUNvdW50KSB8fCAoaSA+PSB0
aGlzLl9zYW1wbGVzLmxlbmd0aCkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9
CisgICAgICAgIHZhciBpMCA9IHRoaXMuX3dyYXBQb3NpdGlvbih0aGlzLl9wb3MgLSAxLjApOwor
ICAgICAgICByZXR1cm4gdGhpcy5fc2FtcGxlc1t0aGlzLl93cmFwUG9zaXRpb24oaTAgLSBpKV07
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgZW5vdWdoIHNhbXBsZXMg
aGF2ZSBiZWVuIHRha2VuIHRvIGNvbXBsZXRlbHkgZmlsbCB0aGUgc2xpZGluZyB3aW5kb3cKKyAg
ICAgKiBAcmV0dXJuIHRydWUgaWYgc2FtcGxlLXNldCBzYXR1cmF0ZWQKKyAgICAgKi8KKyAgICBS
b2xsaW5nQXZlcmFnZS5wcm90b3R5cGUuaXNTYXR1cmF0ZWQgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9zYW1wbGVDb3VudCA+PSB0aGlzLl9zYW1wbGVzLmxlbmd0aDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJlc2V0cyB0aGUgcm9sbGluZyBhdmVyYWdlIChlcXVpdmFs
ZW50IHRvIDAgc2FtcGxlcyB0YWtlbiBzbyBmYXIpCisgICAgICovCisgICAgUm9sbGluZ0F2ZXJh
Z2UucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmF2ZXJhZ2Ug
PSAwOworICAgICAgICB0aGlzLnZhcmlhbmNlID0gMDsKKyAgICAgICAgdGhpcy5fc2FtcGxlQ291
bnQgPSAwOworICAgICAgICB0aGlzLl9wb3MgPSAwOworICAgICAgICB0aGlzLl9tMiA9IDA7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBXcmFwcyBhIHZhbHVlIGFyb3VuZCB0aGUgc2FtcGxlIHJh
bmdlIGJvdW5kYXJpZXMKKyAgICAgKiBAcGFyYW0gaSBQb3NpdGlvbiBpbiBzYW1wbGUgcmFuZ2Us
IGZvciBleGFtcGxlIGlmIHRoZSBzYW1wbGUgbGVuZ3RoIGlzIDUsIGFuZCBpIGlzIC0zLCB0aGVu
IDIgd2lsbCBiZSByZXR1cm5lZC4KKyAgICAgKiBAcmV0dXJuIFdyYXBwZWQgcG9zaXRpb24gaW4g
c2FtcGxlIHJhbmdlCisgICAgICovCisgICAgUm9sbGluZ0F2ZXJhZ2UucHJvdG90eXBlLl93cmFw
UG9zaXRpb24gPSBmdW5jdGlvbiAoaSkgeworICAgICAgICB2YXIgbWF4ID0gdGhpcy5fc2FtcGxl
cy5sZW5ndGg7CisgICAgICAgIHJldHVybiAoKGkgJSBtYXgpICsgbWF4KSAlIG1heDsKKyAgICB9
OworICAgIHJldHVybiBSb2xsaW5nQXZlcmFnZTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vTWlzYy9waXZvdFRvb2xzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL01pc2MvcGl2b3RUb29scy50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBpdm90VG9vbHMgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGl2b3RUb29scyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gUGl2b3RUb29sczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rv
ci50cyIpOworCisvKioKKyAqIENsYXNzIGNvbnRhaW5pbmcgYSBzZXQgb2Ygc3RhdGljIHV0aWxp
dGllcyBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIFBpdm90cworICogQGhpZGRlbgorICovCit2YXIg
UGl2b3RUb29scyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQ
aXZvdFRvb2xzKCkgeworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBpdm90VG9vbHMu
X1JlbW92ZUFuZFN0b3JlUGl2b3RQb2ludCA9IGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgIGlm
IChtZXNoICYmIFBpdm90VG9vbHMuX1Bpdm90Q2FjaGVkID09PSAwKSB7CisgICAgICAgICAgICAv
LyBTYXZlIG9sZCBwaXZvdCBhbmQgc2V0IHBpdm90IHRvIDAsMCwwCisgICAgICAgICAgICBtZXNo
LmdldFBpdm90UG9pbnRUb1JlZihQaXZvdFRvb2xzLl9PbGRQaXZvdFBvaW50KTsKKyAgICAgICAg
ICAgIGlmICghUGl2b3RUb29scy5fT2xkUGl2b3RQb2ludC5lcXVhbHNUb0Zsb2F0cygwLCAwLCAw
KSkgeworICAgICAgICAgICAgICAgIG1lc2guc2V0UGl2b3RNYXRyaXgoX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdHJpeCJdLklkZW50aXR5UmVhZE9u
bHkpOworICAgICAgICAgICAgICAgIFBpdm90VG9vbHMuX09sZFBpdm90UG9pbnQuc3VidHJhY3RU
b1JlZihtZXNoLmdldFBpdm90UG9pbnQoKSwgUGl2b3RUb29scy5fUGl2b3RUcmFuc2xhdGlvbik7
CisgICAgICAgICAgICAgICAgUGl2b3RUb29scy5fUGl2b3RUbXBWZWN0b3IuY29weUZyb21GbG9h
dHMoMSwgMSwgMSk7CisgICAgICAgICAgICAgICAgUGl2b3RUb29scy5fUGl2b3RUbXBWZWN0b3Iu
c3VidHJhY3RJblBsYWNlKG1lc2guc2NhbGluZyk7CisgICAgICAgICAgICAgICAgUGl2b3RUb29s
cy5fUGl2b3RUbXBWZWN0b3IubXVsdGlwbHlJblBsYWNlKFBpdm90VG9vbHMuX1Bpdm90VHJhbnNs
YXRpb24pOworICAgICAgICAgICAgICAgIG1lc2gucG9zaXRpb24uYWRkSW5QbGFjZShQaXZvdFRv
b2xzLl9QaXZvdFRtcFZlY3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
UGl2b3RUb29scy5fUGl2b3RDYWNoZWQrKzsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgUGl2b3RUb29scy5fUmVzdG9yZVBpdm90UG9pbnQgPSBmdW5jdGlvbiAobWVzaCkgeworICAg
ICAgICBpZiAobWVzaCAmJiAhUGl2b3RUb29scy5fT2xkUGl2b3RQb2ludC5lcXVhbHNUb0Zsb2F0
cygwLCAwLCAwKSAmJiBQaXZvdFRvb2xzLl9QaXZvdENhY2hlZCA9PT0gMSkgeworICAgICAgICAg
ICAgbWVzaC5zZXRQaXZvdFBvaW50KFBpdm90VG9vbHMuX09sZFBpdm90UG9pbnQpOworICAgICAg
ICAgICAgUGl2b3RUb29scy5fUGl2b3RUbXBWZWN0b3IuY29weUZyb21GbG9hdHMoMSwgMSwgMSk7
CisgICAgICAgICAgICBQaXZvdFRvb2xzLl9QaXZvdFRtcFZlY3Rvci5zdWJ0cmFjdEluUGxhY2Uo
bWVzaC5zY2FsaW5nKTsKKyAgICAgICAgICAgIFBpdm90VG9vbHMuX1Bpdm90VG1wVmVjdG9yLm11
bHRpcGx5SW5QbGFjZShQaXZvdFRvb2xzLl9QaXZvdFRyYW5zbGF0aW9uKTsKKyAgICAgICAgICAg
IG1lc2gucG9zaXRpb24uc3VidHJhY3RJblBsYWNlKFBpdm90VG9vbHMuX1Bpdm90VG1wVmVjdG9y
KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9QaXZvdENhY2hlZC0tOworICAgIH07CisgICAg
Ly8gU3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgcGl2b3QgY2FjaGUgKF9vbGRQaXZvdFBvaW50LCBf
cGl2b3RUcmFuc2xhdGlvbikKKyAgICAvLyBzdG9yZS9yZW1vdmUgcGl2b3QgcG9pbnQgc2hvdWxk
IG9ubHkgYmUgYXBwbGllZCBkdXJpbmcgdGhlaXIgb3V0ZXJtb3N0IGNhbGxzCisgICAgUGl2b3RU
b29scy5fUGl2b3RDYWNoZWQgPSAwOworICAgIFBpdm90VG9vbHMuX09sZFBpdm90UG9pbnQgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3Rv
cjMiXSgpOworICAgIFBpdm90VG9vbHMuX1Bpdm90VHJhbnNsYXRpb24gPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgpOworICAg
IFBpdm90VG9vbHMuX1Bpdm90VG1wVmVjdG9yID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oKTsKKyAgICByZXR1cm4gUGl2b3RU
b29sczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy9wcmVjaXNpb25E
YXRlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L01pc2MvcHJlY2lzaW9uRGF0ZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFByZWNpc2lvbkRhdGUgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUHJlY2lzaW9uRGF0ZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gUHJlY2lzaW9uRGF0ZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RvbU1h
bmFnZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vZG9tTWFuYWdlbWVudCAqLyAiLi9NaXNjL2RvbU1hbmFnZW1lbnQudHMiKTsKKwor
LyoqCisgKiBDbGFzcyBjb250YWluaW5nIGEgc2V0IG9mIHN0YXRpYyB1dGlsaXRpZXMgZnVuY3Rp
b25zIGZvciBwcmVjaXNpb24gZGF0ZQorICovCit2YXIgUHJlY2lzaW9uRGF0ZSA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQcmVjaXNpb25EYXRlKCkgeworICAg
IH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUHJlY2lzaW9uRGF0ZSwgIk5vdyIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgZWl0aGVyIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3co
KSBpZiBzdXBwb3J0ZWQgb3IgRGF0ZS5ub3coKSBlbHNlCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChfZG9tTWFuYWdlbWVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEb21NYW5hZ2VtZW50Il0uSXNXaW5kb3dPYmplY3RFeGlz
dCgpICYmIHdpbmRvdy5wZXJmb3JtYW5jZSAmJiB3aW5kb3cucGVyZm9ybWFuY2Uubm93KSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICByZXR1cm4gUHJlY2lzaW9uRGF0ZTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWlzYy9wcm9taXNlLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL01pc2MvcHJvbWlzZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFByb21pc2VQb2x5ZmlsbCAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJQcm9taXNlUG9seWZpbGwiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFByb21pc2VQb2x5ZmlsbDsgfSk7Cit2YXIgUHJvbWlzZVN0YXRlczsKKyhmdW5jdGlv
biAoUHJvbWlzZVN0YXRlcykgeworICAgIFByb21pc2VTdGF0ZXNbUHJvbWlzZVN0YXRlc1siUGVu
ZGluZyJdID0gMF0gPSAiUGVuZGluZyI7CisgICAgUHJvbWlzZVN0YXRlc1tQcm9taXNlU3RhdGVz
WyJGdWxmaWxsZWQiXSA9IDFdID0gIkZ1bGZpbGxlZCI7CisgICAgUHJvbWlzZVN0YXRlc1tQcm9t
aXNlU3RhdGVzWyJSZWplY3RlZCJdID0gMl0gPSAiUmVqZWN0ZWQiOworfSkoUHJvbWlzZVN0YXRl
cyB8fCAoUHJvbWlzZVN0YXRlcyA9IHt9KSk7Cit2YXIgRnVsRmlsbG1lbnRBZ3JlZ2F0b3IgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRnVsRmlsbG1lbnRBZ3Jl
Z2F0b3IoKSB7CisgICAgICAgIHRoaXMuY291bnQgPSAwOworICAgICAgICB0aGlzLnRhcmdldCA9
IDA7CisgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdOworICAgIH0KKyAgICByZXR1cm4gRnVsRmls
bG1lbnRBZ3JlZ2F0b3I7Cit9KCkpOwordmFyIEludGVybmFsUHJvbWlzZSA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBJbnRlcm5hbFByb21pc2UocmVzb2x2ZXIp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5fc3RhdGUgPSBQcm9t
aXNlU3RhdGVzLlBlbmRpbmc7CisgICAgICAgIHRoaXMuX2NoaWxkcmVuID0gbmV3IEFycmF5KCk7
CisgICAgICAgIHRoaXMuX3JlamVjdFdhc0NvbnN1bWVkID0gZmFsc2U7CisgICAgICAgIGlmICgh
cmVzb2x2ZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkg
eworICAgICAgICAgICAgcmVzb2x2ZXIoZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgX3RoaXMuX3Jlc29sdmUodmFsdWUpOworICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNv
bikgeworICAgICAgICAgICAgICAgIF90aGlzLl9yZWplY3QocmVhc29uKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChlKSB7CisgICAgICAgICAgICB0aGlzLl9y
ZWplY3QoZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KElu
dGVybmFsUHJvbWlzZS5wcm90b3R5cGUsICJfcmVzdWx0IiwgeworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHRWYWx1ZTsKKyAgICAgICAg
fSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3Jl
c3VsdFZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50ICYmIHRoaXMu
X3BhcmVudC5fcmVzdWx0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9w
YXJlbnQuX3Jlc3VsdCA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBJbnRlcm5hbFByb21pc2UucHJvdG90eXBlLmNhdGNoID0gZnVuY3Rpb24gKG9uUmVqZWN0
ZWQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpOwor
ICAgIH07CisgICAgSW50ZXJuYWxQcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKG9u
RnVsZmlsbGVkLCBvblJlamVjdGVkKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAg
ICAgIHZhciBuZXdQcm9taXNlID0gbmV3IEludGVybmFsUHJvbWlzZSgpOworICAgICAgICBuZXdQ
cm9taXNlLl9vbkZ1bGZpbGxlZCA9IG9uRnVsZmlsbGVkOworICAgICAgICBuZXdQcm9taXNlLl9v
blJlamVjdGVkID0gb25SZWplY3RlZDsKKyAgICAgICAgLy8gQ29tcG9zaXRpb24KKyAgICAgICAg
dGhpcy5fY2hpbGRyZW4ucHVzaChuZXdQcm9taXNlKTsKKyAgICAgICAgbmV3UHJvbWlzZS5fcGFy
ZW50ID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMuX3N0YXRlICE9PSBQcm9taXNlU3RhdGVzLlBl
bmRpbmcpIHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgICAgIGlmIChfdGhpcy5fc3RhdGUgPT09IFByb21pc2VTdGF0ZXMuRnVsZmlsbGVkIHx8IF90
aGlzLl9yZWplY3RXYXNDb25zdW1lZCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcmV0dXJu
ZWRWYWx1ZSA9IG5ld1Byb21pc2UuX3Jlc29sdmUoX3RoaXMuX3Jlc3VsdCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChyZXR1cm5lZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgcmV0dXJuZWRWYWx1
ZSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHVybmVkVmFsdWUu
X3N0YXRlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
cmV0dXJuZWRQcm9taXNlID0gcmV0dXJuZWRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdQcm9taXNlLl9jaGlsZHJlbi5wdXNoKHJldHVybmVkUHJvbWlzZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWRQcm9taXNlLl9wYXJlbnQgPSBuZXdQcm9taXNl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Byb21pc2UgPSByZXR1cm5lZFByb21p
c2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQcm9taXNlLl9yZXN1bHQgPSBy
ZXR1cm5lZFZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBuZXdQcm9taXNlLl9yZWplY3QoX3RoaXMuX3JlYXNvbik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5l
d1Byb21pc2U7CisgICAgfTsKKyAgICBJbnRlcm5hbFByb21pc2UucHJvdG90eXBlLl9tb3ZlQ2hp
bGRyZW4gPSBmdW5jdGlvbiAoY2hpbGRyZW4pIHsKKyAgICAgICAgdmFyIF9hOworICAgICAgICB2
YXIgX3RoaXMgPSB0aGlzOworICAgICAgICAoX2EgPSB0aGlzLl9jaGlsZHJlbikucHVzaC5hcHBs
eShfYSwgY2hpbGRyZW4uc3BsaWNlKDAsIGNoaWxkcmVuLmxlbmd0aCkpOworICAgICAgICB0aGlz
Ll9jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkgeworICAgICAgICAgICAgY2hpbGQu
X3BhcmVudCA9IF90aGlzOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09
PSBQcm9taXNlU3RhdGVzLkZ1bGZpbGxlZCkgeworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAw
LCBfYiA9IHRoaXMuX2NoaWxkcmVuOyBfaSA8IF9iLmxlbmd0aDsgX2krKykgeworICAgICAgICAg
ICAgICAgIHZhciBjaGlsZCA9IF9iW19pXTsKKyAgICAgICAgICAgICAgICBjaGlsZC5fcmVzb2x2
ZSh0aGlzLl9yZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKHRoaXMuX3N0YXRlID09PSBQcm9taXNlU3RhdGVzLlJlamVjdGVkKSB7CisgICAgICAgICAg
ICBmb3IgKHZhciBfYyA9IDAsIF9kID0gdGhpcy5fY2hpbGRyZW47IF9jIDwgX2QubGVuZ3RoOyBf
YysrKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gX2RbX2NdOworICAgICAgICAgICAg
ICAgIGNoaWxkLl9yZWplY3QodGhpcy5fcmVhc29uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgSW50ZXJuYWxQcm9taXNlLnByb3RvdHlwZS5fcmVzb2x2ZSA9IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSBQ
cm9taXNlU3RhdGVzLkZ1bGZpbGxlZDsKKyAgICAgICAgICAgIHZhciByZXR1cm5lZFZhbHVlID0g
bnVsbDsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbkZ1bGZpbGxlZCkgeworICAgICAgICAgICAg
ICAgIHJldHVybmVkVmFsdWUgPSB0aGlzLl9vbkZ1bGZpbGxlZCh2YWx1ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAocmV0dXJuZWRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHJldHVy
bmVkVmFsdWUgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV0dXJuZWRWYWx1ZS5f
c3RhdGUgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUcmFuc21pdCBj
aGlsZHJlbgorICAgICAgICAgICAgICAgICAgICB2YXIgcmV0dXJuZWRQcm9taXNlID0gcmV0dXJu
ZWRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWRQcm9taXNlLl9wYXJlbnQgPSB0
aGlzOworICAgICAgICAgICAgICAgICAgICByZXR1cm5lZFByb21pc2UuX21vdmVDaGlsZHJlbih0
aGlzLl9jaGlsZHJlbik7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcmV0dXJuZWRQcm9t
aXNlLl9yZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJldHVybmVkVmFsdWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fcmVzdWx0ID0gdmFsdWU7Cisg
ICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fY2hpbGRyZW47IF9pIDwgX2Eu
bGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gX2FbX2ldOworICAg
ICAgICAgICAgICAgIGNoaWxkLl9yZXNvbHZlKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA9IDA7CisgICAgICAgICAgICBkZWxldGUgdGhp
cy5fb25GdWxmaWxsZWQ7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fb25SZWplY3RlZDsKKyAg
ICAgICAgfQorICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgdGhpcy5fcmVqZWN0KGUs
IHRydWUpOworICAgICAgICB9CisgICAgfTsKKyAgICBJbnRlcm5hbFByb21pc2UucHJvdG90eXBl
Ll9yZWplY3QgPSBmdW5jdGlvbiAocmVhc29uLCBvbkxvY2FsVGhyb3cpIHsKKyAgICAgICAgaWYg
KG9uTG9jYWxUaHJvdyA9PT0gdm9pZCAwKSB7IG9uTG9jYWxUaHJvdyA9IGZhbHNlOyB9CisgICAg
ICAgIHRoaXMuX3N0YXRlID0gUHJvbWlzZVN0YXRlcy5SZWplY3RlZDsKKyAgICAgICAgdGhpcy5f
cmVhc29uID0gcmVhc29uOworICAgICAgICBpZiAodGhpcy5fb25SZWplY3RlZCAmJiAhb25Mb2Nh
bFRocm93KSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHRoaXMuX29uUmVq
ZWN0ZWQocmVhc29uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZWplY3RXYXNDb25zdW1lZCA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgICAgIHJlYXNvbiA9IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX2NoaWxkcmVuOyBfaSA8IF9hLmxlbmd0aDsgX2krKykg
eworICAgICAgICAgICAgdmFyIGNoaWxkID0gX2FbX2ldOworICAgICAgICAgICAgaWYgKHRoaXMu
X3JlamVjdFdhc0NvbnN1bWVkKSB7CisgICAgICAgICAgICAgICAgY2hpbGQuX3Jlc29sdmUobnVs
bCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBj
aGlsZC5fcmVqZWN0KHJlYXNvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5fY2hpbGRyZW4ubGVuZ3RoID0gMDsKKyAgICAgICAgZGVsZXRlIHRoaXMuX29uRnVsZmls
bGVkOworICAgICAgICBkZWxldGUgdGhpcy5fb25SZWplY3RlZDsKKyAgICB9OworICAgIEludGVy
bmFsUHJvbWlzZS5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHZhciBuZXdQ
cm9taXNlID0gbmV3IEludGVybmFsUHJvbWlzZSgpOworICAgICAgICBuZXdQcm9taXNlLl9yZXNv
bHZlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG5ld1Byb21pc2U7CisgICAgfTsKKyAgICBJbnRl
cm5hbFByb21pc2UuX1JlZ2lzdGVyRm9yRnVsZmlsbG1lbnQgPSBmdW5jdGlvbiAocHJvbWlzZSwg
YWdyZWdhdG9yLCBpbmRleCkgeworICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICBhZ3JlZ2F0b3IucmVzdWx0c1tpbmRleF0gPSB2YWx1ZTsKKyAgICAg
ICAgICAgIGFncmVnYXRvci5jb3VudCsrOworICAgICAgICAgICAgaWYgKGFncmVnYXRvci5jb3Vu
dCA9PT0gYWdyZWdhdG9yLnRhcmdldCkgeworICAgICAgICAgICAgICAgIGFncmVnYXRvci5yb290
UHJvbWlzZS5fcmVzb2x2ZShhZ3JlZ2F0b3IucmVzdWx0cyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgeworICAg
ICAgICAgICAgaWYgKGFncmVnYXRvci5yb290UHJvbWlzZS5fc3RhdGUgIT09IFByb21pc2VTdGF0
ZXMuUmVqZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICBhZ3JlZ2F0b3Iucm9vdFByb21pc2UuX3Jl
amVjdChyZWFzb24pOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9OworICAgIElu
dGVybmFsUHJvbWlzZS5hbGwgPSBmdW5jdGlvbiAocHJvbWlzZXMpIHsKKyAgICAgICAgdmFyIG5l
d1Byb21pc2UgPSBuZXcgSW50ZXJuYWxQcm9taXNlKCk7CisgICAgICAgIHZhciBhZ3JlZ2F0b3Ig
PSBuZXcgRnVsRmlsbG1lbnRBZ3JlZ2F0b3IoKTsKKyAgICAgICAgYWdyZWdhdG9yLnRhcmdldCA9
IHByb21pc2VzLmxlbmd0aDsKKyAgICAgICAgYWdyZWdhdG9yLnJvb3RQcm9taXNlID0gbmV3UHJv
bWlzZTsKKyAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCkgeworICAgICAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IHByb21pc2VzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgICAgIEludGVybmFsUHJvbWlzZS5fUmVnaXN0ZXJGb3JGdWxmaWxsbWVudChwcm9taXNl
c1tpbmRleF0sIGFncmVnYXRvciwgaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbmV3UHJvbWlzZS5fcmVzb2x2ZShbXSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG5ld1Byb21pc2U7CisgICAgfTsKKyAgICBJbnRlcm5hbFBy
b21pc2UucmFjZSA9IGZ1bmN0aW9uIChwcm9taXNlcykgeworICAgICAgICB2YXIgbmV3UHJvbWlz
ZSA9IG5ldyBJbnRlcm5hbFByb21pc2UoKTsKKyAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCkg
eworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBwcm9taXNlc18xID0gcHJvbWlzZXM7IF9p
IDwgcHJvbWlzZXNfMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcHJvbWlz
ZSA9IHByb21pc2VzXzFbX2ldOworICAgICAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1Byb21pc2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld1Byb21pc2UuX3Jlc29sdmUodmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3UHJvbWlzZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfSwgZnVu
Y3Rpb24gKHJlYXNvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAobmV3UHJvbWlzZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3UHJvbWlzZS5fcmVqZWN0KHJlYXNvbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdQcm9taXNlID0gbnVsbDsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBuZXdQcm9taXNlOworICAgIH07CisgICAgcmV0dXJuIEludGVybmFsUHJvbWlz
ZTsKK30oKSk7CisvKioKKyAqIEhlbHBlciBjbGFzcyB0aGF0IHByb3ZpZGVzIGEgc21hbGwgcHJv
bWlzZSBwb2x5ZmlsbAorICovCit2YXIgUHJvbWlzZVBvbHlmaWxsID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFByb21pc2VQb2x5ZmlsbCgpIHsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogU3RhdGljIGZ1bmN0aW9uIHVzZWQgdG8gY2hlY2sgaWYgdGhlIHBvbHlm
aWxsIGlzIHJlcXVpcmVkCisgICAgICogSWYgdGhpcyBpcyB0aGUgY2FzZSB0aGVuIHRoZSBmdW5j
dGlvbiB3aWxsIGluamVjdCB0aGUgcG9seWZpbGwgdG8gd2luZG93LlByb21pc2UKKyAgICAgKiBA
cGFyYW0gZm9yY2UgZGVmaW5lcyBhIGJvb2xlYW4gdXNlZCB0byBmb3JjZSB0aGUgaW5qZWN0aW9u
IChtb3N0bHkgZm9yIHRlc3RpbmcgcHVycG9zZXMpCisgICAgICovCisgICAgUHJvbWlzZVBvbHlm
aWxsLkFwcGx5ID0gZnVuY3Rpb24gKGZvcmNlKSB7CisgICAgICAgIGlmIChmb3JjZSA9PT0gdm9p
ZCAwKSB7IGZvcmNlID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKGZvcmNlIHx8IHR5cGVvZiBQcm9t
aXNlID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgdmFyIHJvb3QgPSB3aW5kb3c7Cisg
ICAgICAgICAgICByb290LlByb21pc2UgPSBJbnRlcm5hbFByb21pc2U7CisgICAgICAgIH0KKyAg
ICB9OworICAgIHJldHVybiBQcm9taXNlUG9seWZpbGw7Cit9KCkpOworCisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL01pc2MvcmV0cnlTdHJhdGVneS50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL3JldHJ5U3RyYXRlZ3kudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBSZXRyeVN0cmF0ZWd5ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJl
dHJ5U3RyYXRlZ3kiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJldHJ5U3RyYXRlZ3k7IH0pOworLyoq
CisgKiBDbGFzcyB1c2VkIHRvIGRlZmluZSBhIHJldHJ5IHN0cmF0ZWd5IHdoZW4gZXJyb3IgaGFw
cGVucyB3aGlsZSBsb2FkaW5nIGFzc2V0cworICovCit2YXIgUmV0cnlTdHJhdGVneSA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBSZXRyeVN0cmF0ZWd5KCkgewor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRlZmluZXMgYW4gZXhwb25l
bnRpYWwgYmFjayBvZmYgc3RyYXRlZ3kKKyAgICAgKiBAcGFyYW0gbWF4UmV0cmllcyBkZWZpbmVz
IHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzICgzIGJ5IGRlZmF1bHQpCisgICAgICogQHBh
cmFtIGJhc2VJbnRlcnZhbCBkZWZpbmVzIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHJldHJpZXMKKyAg
ICAgKiBAcmV0dXJucyB0aGUgc3RyYXRlZ3kgZnVuY3Rpb24gdG8gdXNlCisgICAgICovCisgICAg
UmV0cnlTdHJhdGVneS5FeHBvbmVudGlhbEJhY2tvZmYgPSBmdW5jdGlvbiAobWF4UmV0cmllcywg
YmFzZUludGVydmFsKSB7CisgICAgICAgIGlmIChtYXhSZXRyaWVzID09PSB2b2lkIDApIHsgbWF4
UmV0cmllcyA9IDM7IH0KKyAgICAgICAgaWYgKGJhc2VJbnRlcnZhbCA9PT0gdm9pZCAwKSB7IGJh
c2VJbnRlcnZhbCA9IDUwMDsgfQorICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHVybCwgcmVxdWVz
dCwgcmV0cnlJbmRleCkgeworICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzICE9PSAwIHx8
IHJldHJ5SW5kZXggPj0gbWF4UmV0cmllcyB8fCB1cmwuaW5kZXhPZigiZmlsZToiKSAhPT0gLTEp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gTWF0aC5wb3coMiwgcmV0cnlJbmRleCkgKiBiYXNlSW50ZXJ2YWw7CisgICAgICAg
IH07CisgICAgfTsKKyAgICByZXR1cm4gUmV0cnlTdHJhdGVneTsKK30oKSk7CisKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vTWlzYy9yZ2JkVGV4dHVyZVRvb2xzLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvcmdiZFRleHR1cmVU
b29scy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFJHQkRUZXh0dXJlVG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUkdCRFRleHR1cmVUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
UkdCRFRleHR1cmVUb29sczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9Q
b3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3Mu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19yZ2JkRGVjb2RlX2ZyYWdt
ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9TaGFkZXJzL3JnYmREZWNvZGUuZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9yZ2JkRGVjb2Rl
LmZyYWdtZW50LnRzIik7CisKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gaG9zdCBSR0JEIHRl
eHR1cmUgc3BlY2lmaWMgdXRpbGl0aWVzCisgKi8KK3ZhciBSR0JEVGV4dHVyZVRvb2xzID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFJHQkRUZXh0dXJlVG9vbHMo
KSB7CisgICAgfQorICAgIC8qKgorICAgICAqIEV4cGFuZCB0aGUgUkdCRCBUZXh0dXJlIGZyb20g
UkdCRCB0byBIYWxmIEZsb2F0IGlmIHBvc3NpYmxlLgorICAgICAqIEBwYXJhbSB0ZXh0dXJlIHRo
ZSB0ZXh0dXJlIHRvIGV4cGFuZC4KKyAgICAgKi8KKyAgICBSR0JEVGV4dHVyZVRvb2xzLkV4cGFu
ZFJHQkRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAgICAgICAgdmFyIGludGVybmFs
VGV4dHVyZSA9IHRleHR1cmUuX3RleHR1cmU7CisgICAgICAgIGlmICghaW50ZXJuYWxUZXh0dXJl
IHx8ICF0ZXh0dXJlLmlzUkdCRCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHRleHR1cmUub25Mb2FkT2JzZXJ2YWJsZS5hZGRPbmNlKGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIC8vIEdldHMgZXZlcnl0aGluZyByZWFkeS4KKyAgICAgICAgICAgIHZhciBlbmdp
bmUgPSBpbnRlcm5hbFRleHR1cmUuZ2V0RW5naW5lKCk7CisgICAgICAgICAgICB2YXIgY2FwcyA9
IGVuZ2luZS5nZXRDYXBzKCk7CisgICAgICAgICAgICB2YXIgZXhwYW5kVGV4dHVyZSA9IGZhbHNl
OworICAgICAgICAgICAgLy8gSWYgaGFsZiBmbG9hdCBhdmFpbGFibGUgd2UgY2FuIHVuY29tcHJl
c3MgdGhlIHRleHR1cmUKKyAgICAgICAgICAgIGlmIChjYXBzLnRleHR1cmVIYWxmRmxvYXRSZW5k
ZXIgJiYgY2Fwcy50ZXh0dXJlSGFsZkZsb2F0TGluZWFyRmlsdGVyaW5nKSB7CisgICAgICAgICAg
ICAgICAgZXhwYW5kVGV4dHVyZSA9IHRydWU7CisgICAgICAgICAgICAgICAgaW50ZXJuYWxUZXh0
dXJlLnR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfSEFMRl9GTE9BVDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIElmIGZ1bGwgZmxvYXQgYXZhaWxhYmxlIHdlIGNhbiB1bmNvbXByZXNzIHRo
ZSB0ZXh0dXJlCisgICAgICAgICAgICBlbHNlIGlmIChjYXBzLnRleHR1cmVGbG9hdFJlbmRlciAm
JiBjYXBzLnRleHR1cmVGbG9hdExpbmVhckZpbHRlcmluZykgeworICAgICAgICAgICAgICAgIGV4
cGFuZFRleHR1cmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGludGVybmFsVGV4dHVyZS50eXBl
ID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbnN0
YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
RXhwYW5kIHRoZSB0ZXh0dXJlIGlmIHBvc3NpYmxlCisgICAgICAgICAgICBpZiAoZXhwYW5kVGV4
dHVyZSkgeworICAgICAgICAgICAgICAgIC8vIERvIG5vdCB1c2UgZHVyaW5nIGRlY29kZS4KKyAg
ICAgICAgICAgICAgICBpbnRlcm5hbFRleHR1cmUuaXNSZWFkeSA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIC8vIFNpbXBseSBydW4gdGhyb3VnaCB0aGUgZGVjb2RlIFBQLgorICAgICAgICAgICAg
ICAgIHZhciByZ2JkUG9zdFByb2Nlc3NfMSA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vz
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb3N0UHJvY2VzcyJdKCJyZ2JkRGVjb2Rl
IiwgInJnYmREZWNvZGUiLCBudWxsLCBudWxsLCAxLCBudWxsLCBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29uc3RhbnRzIl0uVEVYVFVSRV9UUklMSU5F
QVJfU0FNUExJTkdNT0RFLCBlbmdpbmUsIGZhbHNlLCB1bmRlZmluZWQsIGludGVybmFsVGV4dHVy
ZS50eXBlLCB1bmRlZmluZWQsIG51bGwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpbnRlcm5h
bFRleHR1cmUuX2lzUkdCRCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGludGVybmFsVGV4dHVy
ZS5pbnZlcnRZID0gZmFsc2U7CisgICAgICAgICAgICAgICAgLy8gSG9sZCB0aGUgb3V0cHV0IG9m
IHRoZSBkZWNvZGluZy4KKyAgICAgICAgICAgICAgICB2YXIgZXhwYW5kZWRUZXh0dXJlXzEgPSBl
bmdpbmUuY3JlYXRlUmVuZGVyVGFyZ2V0VGV4dHVyZShpbnRlcm5hbFRleHR1cmUud2lkdGgsIHsK
KyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVEZXB0aEJ1ZmZlcjogZmFsc2UsCisgICAgICAg
ICAgICAgICAgICAgIGdlbmVyYXRlTWlwTWFwczogZmFsc2UsCisgICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRlU3RlbmNpbEJ1ZmZlcjogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIHNhbXBs
aW5nTW9kZTogaW50ZXJuYWxUZXh0dXJlLnNhbXBsaW5nTW9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgdHlwZTogaW50ZXJuYWxUZXh0dXJlLnR5cGUsCisgICAgICAgICAgICAgICAgICAgIGZvcm1h
dDogX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbnN0
YW50cyJdLlRFWFRVUkVGT1JNQVRfUkdCQQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIHJnYmRQb3N0UHJvY2Vzc18xLmdldEVmZmVjdCgpLmV4ZWN1dGVXaGVuQ29tcGlsZWQo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAvLyBQUCBSZW5kZXIgUGFzcworICAg
ICAgICAgICAgICAgICAgICByZ2JkUG9zdFByb2Nlc3NfMS5vbkFwcGx5ID0gZnVuY3Rpb24gKGVm
ZmVjdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0Ll9iaW5kVGV4dHVyZSgidGV4
dHVyZVNhbXBsZXIiLCBpbnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZWZmZWN0LnNldEZsb2F0Migic2NhbGUiLCAxLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAgICAgZW5naW5lLnNjZW5lc1swXS5wb3N0UHJvY2Vzc01hbmFnZXIu
ZGlyZWN0UmVuZGVyKFtyZ2JkUG9zdFByb2Nlc3NfMV0sIGV4cGFuZGVkVGV4dHVyZV8xLCB0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYW51cAorICAgICAgICAgICAgICAgICAgICBl
bmdpbmUucmVzdG9yZURlZmF1bHRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBl
bmdpbmUuX3JlbGVhc2VUZXh0dXJlKGludGVybmFsVGV4dHVyZSk7CisgICAgICAgICAgICAgICAg
ICAgIGVuZ2luZS5fcmVsZWFzZUZyYW1lYnVmZmVyT2JqZWN0cyhleHBhbmRlZFRleHR1cmVfMSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChyZ2JkUG9zdFByb2Nlc3NfMSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmdiZFBvc3RQcm9jZXNzXzEuZGlzcG9zZSgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIEludGVybmFsIFN3YXAKKyAgICAgICAg
ICAgICAgICAgICAgZXhwYW5kZWRUZXh0dXJlXzEuX3N3YXBBbmREaWUoaW50ZXJuYWxUZXh0dXJl
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVhZHkgdG8gZ2V0IHJvbGxpbmcgYWdhaW4uCisg
ICAgICAgICAgICAgICAgICAgIGludGVybmFsVGV4dHVyZS5pc1JlYWR5ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBy
ZXR1cm4gUkdCRFRleHR1cmVUb29sczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vTWlzYy9zY2VuZU9wdGltaXplci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vTWlzYy9zY2VuZU9wdGltaXplci50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTY2Vu
ZU9wdGltaXphdGlvbiwgVGV4dHVyZU9wdGltaXphdGlvbiwgSGFyZHdhcmVTY2FsaW5nT3B0aW1p
emF0aW9uLCBTaGFkb3dzT3B0aW1pemF0aW9uLCBQb3N0UHJvY2Vzc2VzT3B0aW1pemF0aW9uLCBM
ZW5zRmxhcmVzT3B0aW1pemF0aW9uLCBDdXN0b21PcHRpbWl6YXRpb24sIFBhcnRpY2xlc09wdGlt
aXphdGlvbiwgUmVuZGVyVGFyZ2V0c09wdGltaXphdGlvbiwgTWVyZ2VNZXNoZXNPcHRpbWl6YXRp
b24sIFNjZW5lT3B0aW1pemVyT3B0aW9ucywgU2NlbmVPcHRpbWl6ZXIgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVPcHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFNjZW5lT3B0aW1pemF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRleHR1cmVP
cHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRleHR1cmVPcHRpbWl6YXRpb247IH0p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiSGFyZHdhcmVTY2FsaW5nT3B0aW1pemF0aW9uIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBIYXJkd2FyZVNjYWxpbmdPcHRpbWl6YXRpb247IH0pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU2hhZG93c09wdGltaXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2hhZG93
c09wdGltaXphdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3N0UHJvY2Vzc2VzT3B0aW1p
emF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQb3N0UHJvY2Vzc2VzT3B0aW1pemF0aW9uOyB9
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkxlbnNGbGFyZXNPcHRpbWl6YXRpb24iLCBmdW5jdGlvbigp
IHsgcmV0dXJuIExlbnNGbGFyZXNPcHRpbWl6YXRpb247IH0pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Q3VzdG9tT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDdXN0b21PcHRpbWl6YXRp
b247IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFydGljbGVzT3B0aW1pemF0aW9uIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBQYXJ0aWNsZXNPcHRpbWl6YXRpb247IH0pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUmVuZGVyVGFyZ2V0c09wdGltaXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmVuZGVy
VGFyZ2V0c09wdGltaXphdGlvbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNZXJnZU1lc2hlc09w
dGltaXphdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTWVyZ2VNZXNoZXNPcHRpbWl6YXRpb247
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVPcHRpbWl6ZXJPcHRpb25zIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBTY2VuZU9wdGltaXplck9wdGlvbnM7IH0pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U2NlbmVPcHRpbWl6ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNjZW5lT3B0aW1pemVyOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90
c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19l
bmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3Jl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvbWVz
aCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9vYnNl
cnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisKKworCisKKy8q
KgorICogRGVmaW5lcyB0aGUgcm9vdCBjbGFzcyB1c2VkIHRvIGNyZWF0ZSBzY2VuZSBvcHRpbWl6
YXRpb24gdG8gdXNlIHdpdGggU2NlbmVPcHRpbWl6ZXIKKyAqIEBkZXNjcmlwdGlvbiBNb3JlIGRl
dGFpbHMgYXQgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3NjZW5l
b3B0aW1pemVyCisgKi8KK3ZhciBTY2VuZU9wdGltaXphdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBTY2VuZU9wdGltaXphdGlv
biBvYmplY3QKKyAgICAgKiBAcGFyYW0gcHJpb3JpdHkgZGVmaW5lcyB0aGUgcHJpb3JpdHkgb2Yg
dGhpcyBvcHRpbWl6YXRpb24gKDAgYnkgZGVmYXVsdCB3aGljaCBtZWFucyBmaXJzdCBpbiB0aGUg
bGlzdCkKKyAgICAgKiBAcGFyYW0gZGVzYyBkZWZpbmVzIHRoZSBkZXNjcmlwdGlvbiBhc3NvY2lh
dGVkIHdpdGggdGhlIG9wdGltaXphdGlvbgorICAgICAqLworICAgIGZ1bmN0aW9uIFNjZW5lT3B0
aW1pemF0aW9uKAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIHByaW9yaXR5IG9mIHRoaXMg
b3B0aW1pemF0aW9uICgwIGJ5IGRlZmF1bHQgd2hpY2ggbWVhbnMgZmlyc3QgaW4gdGhlIGxpc3Qp
CisgICAgICovCisgICAgcHJpb3JpdHkpIHsKKyAgICAgICAgaWYgKHByaW9yaXR5ID09PSB2b2lk
IDApIHsgcHJpb3JpdHkgPSAwOyB9CisgICAgICAgIHRoaXMucHJpb3JpdHkgPSBwcmlvcml0eTsK
KyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBhY3Rp
b24gZXhlY3V0ZWQgYnkgdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uCisgICAgICogQHJldHVybnMg
ZGVzY3JpcHRpb24gc3RyaW5nCisgICAgICovCisgICAgU2NlbmVPcHRpbWl6YXRpb24ucHJvdG90
eXBlLmdldERlc2NyaXB0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIiI7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRo
ZSBTY2VuZU9wdGltaXplciB3aGVuIGl0cyBwcmlvcml0eSBpcyByZWFjaGVkIGluIG9yZGVyIHRv
IGFwcGx5IHRoZSBjaGFuZ2UgcmVxdWlyZWQgYnkgdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uCisg
ICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGN1cnJlbnQgc2NlbmUgd2hlcmUgdG8gYXBw
bHkgdGhpcyBvcHRpbWl6YXRpb24KKyAgICAgKiBAcGFyYW0gb3B0aW1pemVyIGRlZmluZXMgdGhl
IGN1cnJlbnQgb3B0aW1pemVyCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBldmVyeXRoaW5nIHRo
YXQgY2FuIGJlIGRvbmUgd2FzIGFwcGxpZWQKKyAgICAgKi8KKyAgICBTY2VuZU9wdGltaXphdGlv
bi5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAoc2NlbmUsIG9wdGltaXplcikgeworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIHJldHVybiBTY2VuZU9wdGltaXphdGlvbjsKK30o
KSk7CisKKy8qKgorICogRGVmaW5lcyBhbiBvcHRpbWl6YXRpb24gdXNlZCB0byByZWR1Y2UgdGhl
IHNpemUgb2YgcmVuZGVyIHRhcmdldCB0ZXh0dXJlcworICogQGRlc2NyaXB0aW9uIE1vcmUgZGV0
YWlscyBhdCBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vfc2NlbmVv
cHRpbWl6ZXIKKyAqLwordmFyIFRleHR1cmVPcHRpbWl6YXRpb24gPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19leHRlbmRzIl0oVGV4dHVyZU9wdGltaXphdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIHRoZSBUZXh0dXJlT3B0aW1pemF0aW9uIG9iamVjdAorICAgICAqIEBwYXJh
bSBwcmlvcml0eSBkZWZpbmVzIHRoZSBwcmlvcml0eSBvZiB0aGlzIG9wdGltaXphdGlvbiAoMCBi
eSBkZWZhdWx0IHdoaWNoIG1lYW5zIGZpcnN0IGluIHRoZSBsaXN0KQorICAgICAqIEBwYXJhbSBt
YXhpbXVtU2l6ZSBkZWZpbmVzIHRoZSBtYXhpbXVtIHNpemVkIGFsbG93ZWQgZm9yIHRleHR1cmVz
ICgxMDI0IGlzIHRoZSBkZWZhdWx0IHZhbHVlKS4gSWYgYSB0ZXh0dXJlIGlzIGJpZ2dlciwgaXQg
d2lsbCBiZSBzY2FsZWQgZG93biB1c2luZyBhIGZhY3RvciBkZWZpbmVkIGJ5IHRoZSBzdGVwIHBh
cmFtZXRlcgorICAgICAqIEBwYXJhbSBzdGVwIGRlZmluZXMgdGhlIGZhY3RvciAoMC41IGJ5IGRl
ZmF1bHQpIHVzZWQgdG8gc2NhbGUgZG93biB0ZXh0dXJlcyBiaWdnZXIgdGhhbiBtYXhpbXVtIHNp
emVkIGFsbG93ZWQuCisgICAgICovCisgICAgZnVuY3Rpb24gVGV4dHVyZU9wdGltaXphdGlvbigK
KyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBwcmlvcml0eSBvZiB0aGlzIG9wdGltaXphdGlv
biAoMCBieSBkZWZhdWx0IHdoaWNoIG1lYW5zIGZpcnN0IGluIHRoZSBsaXN0KQorICAgICAqLwor
ICAgIHByaW9yaXR5LCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBtYXhpbXVtIHNpemVk
IGFsbG93ZWQgZm9yIHRleHR1cmVzICgxMDI0IGlzIHRoZSBkZWZhdWx0IHZhbHVlKS4gSWYgYSB0
ZXh0dXJlIGlzIGJpZ2dlciwgaXQgd2lsbCBiZSBzY2FsZWQgZG93biB1c2luZyBhIGZhY3RvciBk
ZWZpbmVkIGJ5IHRoZSBzdGVwIHBhcmFtZXRlcgorICAgICAqLworICAgIG1heGltdW1TaXplLCAK
KyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBmYWN0b3IgKDAuNSBieSBkZWZhdWx0KSB1c2Vk
IHRvIHNjYWxlIGRvd24gdGV4dHVyZXMgYmlnZ2VyIHRoYW4gbWF4aW11bSBzaXplZCBhbGxvd2Vk
LgorICAgICAqLworICAgIHN0ZXApIHsKKyAgICAgICAgaWYgKHByaW9yaXR5ID09PSB2b2lkIDAp
IHsgcHJpb3JpdHkgPSAwOyB9CisgICAgICAgIGlmIChtYXhpbXVtU2l6ZSA9PT0gdm9pZCAwKSB7
IG1heGltdW1TaXplID0gMTAyNDsgfQorICAgICAgICBpZiAoc3RlcCA9PT0gdm9pZCAwKSB7IHN0
ZXAgPSAwLjU7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJpb3Jp
dHkpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLnByaW9yaXR5ID0gcHJpb3JpdHk7CisgICAgICAg
IF90aGlzLm1heGltdW1TaXplID0gbWF4aW11bVNpemU7CisgICAgICAgIF90aGlzLnN0ZXAgPSBz
dGVwOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMg
YSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgYWN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSBjdXJyZW50IG9w
dGltaXphdGlvbgorICAgICAqIEByZXR1cm5zIGRlc2NyaXB0aW9uIHN0cmluZworICAgICAqLwor
ICAgIFRleHR1cmVPcHRpbWl6YXRpb24ucHJvdG90eXBlLmdldERlc2NyaXB0aW9uID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gIlJlZHVjaW5nIHJlbmRlciB0YXJnZXQgdGV4dHVyZSBz
aXplIHRvICIgKyB0aGlzLm1heGltdW1TaXplOworICAgIH07CisgICAgLyoqCisgICAgICogVGhp
cyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSB0aGUgU2NlbmVPcHRpbWl6ZXIgd2hlbiBpdHMg
cHJpb3JpdHkgaXMgcmVhY2hlZCBpbiBvcmRlciB0byBhcHBseSB0aGUgY2hhbmdlIHJlcXVpcmVk
IGJ5IHRoZSBjdXJyZW50IG9wdGltaXphdGlvbgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVz
IHRoZSBjdXJyZW50IHNjZW5lIHdoZXJlIHRvIGFwcGx5IHRoaXMgb3B0aW1pemF0aW9uCisgICAg
ICogQHBhcmFtIG9wdGltaXplciBkZWZpbmVzIHRoZSBjdXJyZW50IG9wdGltaXplcgorICAgICAq
IEByZXR1cm5zIHRydWUgaWYgZXZlcnl0aGluZyB0aGF0IGNhbiBiZSBkb25lIHdhcyBhcHBsaWVk
CisgICAgICovCisgICAgVGV4dHVyZU9wdGltaXphdGlvbi5wcm90b3R5cGUuYXBwbHkgPSBmdW5j
dGlvbiAoc2NlbmUsIG9wdGltaXplcikgeworICAgICAgICB2YXIgYWxsRG9uZSA9IHRydWU7Cisg
ICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzY2VuZS50ZXh0dXJlcy5sZW5ndGg7
IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gc2NlbmUudGV4dHVyZXNbaW5k
ZXhdOworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLmNhblJlc2NhbGUgfHwgdGV4dHVyZS5nZXRD
b250ZXh0KSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB2YXIgY3VycmVudFNpemUgPSB0ZXh0dXJlLmdldFNpemUoKTsKKyAgICAgICAgICAg
IHZhciBtYXhEaW1lbnNpb24gPSBNYXRoLm1heChjdXJyZW50U2l6ZS53aWR0aCwgY3VycmVudFNp
emUuaGVpZ2h0KTsKKyAgICAgICAgICAgIGlmIChtYXhEaW1lbnNpb24gPiB0aGlzLm1heGltdW1T
aXplKSB7CisgICAgICAgICAgICAgICAgdGV4dHVyZS5zY2FsZSh0aGlzLnN0ZXApOworICAgICAg
ICAgICAgICAgIGFsbERvbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gYWxsRG9uZTsKKyAgICB9OworICAgIHJldHVybiBUZXh0dXJlT3B0aW1pemF0
aW9uOworfShTY2VuZU9wdGltaXphdGlvbikpOworCisvKioKKyAqIERlZmluZXMgYW4gb3B0aW1p
emF0aW9uIHVzZWQgdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIHJlbmRlcmluZyByZXNvbHV0
aW9uCisgKiBAZGVzY3JpcHRpb24gTW9yZSBkZXRhaWxzIGF0IGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9zY2VuZW9wdGltaXplcgorICovCit2YXIgSGFyZHdhcmVT
Y2FsaW5nT3B0aW1pemF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgewor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEhhcmR3
YXJlU2NhbGluZ09wdGltaXphdGlvbiwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IHRoZSBIYXJkd2FyZVNjYWxpbmdPcHRpbWl6YXRpb24gb2JqZWN0CisgICAgICogQHBhcmFtIHBy
aW9yaXR5IGRlZmluZXMgdGhlIHByaW9yaXR5IG9mIHRoaXMgb3B0aW1pemF0aW9uICgwIGJ5IGRl
ZmF1bHQgd2hpY2ggbWVhbnMgZmlyc3QgaW4gdGhlIGxpc3QpCisgICAgICogQHBhcmFtIG1heGlt
dW1TY2FsZSBkZWZpbmVzIHRoZSBtYXhpbXVtIHNjYWxlIHRvIHVzZSAoMiBieSBkZWZhdWx0KQor
ICAgICAqIEBwYXJhbSBzdGVwIGRlZmluZXMgdGhlIHN0ZXAgdG8gdXNlIGJldHdlZW4gdHdvIHBh
c3NlcyAoMC41IGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgZnVuY3Rpb24gSGFyZHdhcmVTY2Fs
aW5nT3B0aW1pemF0aW9uKAorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIHByaW9yaXR5IG9m
IHRoaXMgb3B0aW1pemF0aW9uICgwIGJ5IGRlZmF1bHQgd2hpY2ggbWVhbnMgZmlyc3QgaW4gdGhl
IGxpc3QpCisgICAgICovCisgICAgcHJpb3JpdHksIAorICAgIC8qKgorICAgICAqIERlZmluZXMg
dGhlIG1heGltdW0gc2NhbGUgdG8gdXNlICgyIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgbWF4
aW11bVNjYWxlLCAKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoZSBzdGVwIHRvIHVzZSBiZXR3
ZWVuIHR3byBwYXNzZXMgKDAuNSBieSBkZWZhdWx0KQorICAgICAqLworICAgIHN0ZXApIHsKKyAg
ICAgICAgaWYgKHByaW9yaXR5ID09PSB2b2lkIDApIHsgcHJpb3JpdHkgPSAwOyB9CisgICAgICAg
IGlmIChtYXhpbXVtU2NhbGUgPT09IHZvaWQgMCkgeyBtYXhpbXVtU2NhbGUgPSAyOyB9CisgICAg
ICAgIGlmIChzdGVwID09PSB2b2lkIDApIHsgc3RlcCA9IDAuMjU7IH0KKyAgICAgICAgdmFyIF90
aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJpb3JpdHkpIHx8IHRoaXM7CisgICAgICAgIF90aGlz
LnByaW9yaXR5ID0gcHJpb3JpdHk7CisgICAgICAgIF90aGlzLm1heGltdW1TY2FsZSA9IG1heGlt
dW1TY2FsZTsKKyAgICAgICAgX3RoaXMuc3RlcCA9IHN0ZXA7CisgICAgICAgIF90aGlzLl9jdXJy
ZW50U2NhbGUgPSAtMTsKKyAgICAgICAgX3RoaXMuX2RpcmVjdGlvbk9mZnNldCA9IDE7CisgICAg
ICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyBk
ZXNjcmliaW5nIHRoZSBhY3Rpb24gZXhlY3V0ZWQgYnkgdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9u
CisgICAgICogQHJldHVybiBkZXNjcmlwdGlvbiBzdHJpbmcKKyAgICAgKi8KKyAgICBIYXJkd2Fy
ZVNjYWxpbmdPcHRpbWl6YXRpb24ucHJvdG90eXBlLmdldERlc2NyaXB0aW9uID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gIlNldHRpbmcgaGFyZHdhcmUgc2NhbGluZyBsZXZlbCB0byAi
ICsgdGhpcy5fY3VycmVudFNjYWxlOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5j
dGlvbiB3aWxsIGJlIGNhbGxlZCBieSB0aGUgU2NlbmVPcHRpbWl6ZXIgd2hlbiBpdHMgcHJpb3Jp
dHkgaXMgcmVhY2hlZCBpbiBvcmRlciB0byBhcHBseSB0aGUgY2hhbmdlIHJlcXVpcmVkIGJ5IHRo
ZSBjdXJyZW50IG9wdGltaXphdGlvbgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBj
dXJyZW50IHNjZW5lIHdoZXJlIHRvIGFwcGx5IHRoaXMgb3B0aW1pemF0aW9uCisgICAgICogQHBh
cmFtIG9wdGltaXplciBkZWZpbmVzIHRoZSBjdXJyZW50IG9wdGltaXplcgorICAgICAqIEByZXR1
cm5zIHRydWUgaWYgZXZlcnl0aGluZyB0aGF0IGNhbiBiZSBkb25lIHdhcyBhcHBsaWVkCisgICAg
ICovCisgICAgSGFyZHdhcmVTY2FsaW5nT3B0aW1pemF0aW9uLnByb3RvdHlwZS5hcHBseSA9IGZ1
bmN0aW9uIChzY2VuZSwgb3B0aW1pemVyKSB7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2Nh
bGUgPT09IC0xKSB7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50U2NhbGUgPSBzY2VuZS5nZXRF
bmdpbmUoKS5nZXRIYXJkd2FyZVNjYWxpbmdMZXZlbCgpOworICAgICAgICAgICAgaWYgKHRoaXMu
X2N1cnJlbnRTY2FsZSA+IHRoaXMubWF4aW11bVNjYWxlKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fZGlyZWN0aW9uT2Zmc2V0ID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fY3VycmVudFNjYWxlICs9IHRoaXMuX2RpcmVjdGlvbk9mZnNldCAqIHRoaXMuc3Rl
cDsKKyAgICAgICAgc2NlbmUuZ2V0RW5naW5lKCkuc2V0SGFyZHdhcmVTY2FsaW5nTGV2ZWwodGhp
cy5fY3VycmVudFNjYWxlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RpcmVjdGlvbk9mZnNldCA9
PT0gMSA/IHRoaXMuX2N1cnJlbnRTY2FsZSA+PSB0aGlzLm1heGltdW1TY2FsZSA6IHRoaXMuX2N1
cnJlbnRTY2FsZSA8PSB0aGlzLm1heGltdW1TY2FsZTsKKyAgICB9OworICAgIHJldHVybiBIYXJk
d2FyZVNjYWxpbmdPcHRpbWl6YXRpb247Cit9KFNjZW5lT3B0aW1pemF0aW9uKSk7CisKKy8qKgor
ICogRGVmaW5lcyBhbiBvcHRpbWl6YXRpb24gdXNlZCB0byByZW1vdmUgc2hhZG93cworICogQGRl
c2NyaXB0aW9uIE1vcmUgZGV0YWlscyBhdCBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3Rv
L2hvd190b191c2Vfc2NlbmVvcHRpbWl6ZXIKKyAqLwordmFyIFNoYWRvd3NPcHRpbWl6YXRpb24g
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU2hhZG93c09wdGltaXphdGlvbiwgX3N1
cGVyKTsKKyAgICBmdW5jdGlvbiBTaGFkb3dzT3B0aW1pemF0aW9uKCkgeworICAgICAgICByZXR1
cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRo
aXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUg
YWN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSBjdXJyZW50IG9wdGltaXphdGlvbgorICAgICAqIEByZXR1
cm4gZGVzY3JpcHRpb24gc3RyaW5nCisgICAgICovCisgICAgU2hhZG93c09wdGltaXphdGlvbi5w
cm90b3R5cGUuZ2V0RGVzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAi
VHVybmluZyBzaGFkb3dzIG9uL29mZiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1
bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBTY2VuZU9wdGltaXplciB3aGVuIGl0cyBwcmlv
cml0eSBpcyByZWFjaGVkIGluIG9yZGVyIHRvIGFwcGx5IHRoZSBjaGFuZ2UgcmVxdWlyZWQgYnkg
dGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhl
IGN1cnJlbnQgc2NlbmUgd2hlcmUgdG8gYXBwbHkgdGhpcyBvcHRpbWl6YXRpb24KKyAgICAgKiBA
cGFyYW0gb3B0aW1pemVyIGRlZmluZXMgdGhlIGN1cnJlbnQgb3B0aW1pemVyCisgICAgICogQHJl
dHVybnMgdHJ1ZSBpZiBldmVyeXRoaW5nIHRoYXQgY2FuIGJlIGRvbmUgd2FzIGFwcGxpZWQKKyAg
ICAgKi8KKyAgICBTaGFkb3dzT3B0aW1pemF0aW9uLnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9u
IChzY2VuZSwgb3B0aW1pemVyKSB7CisgICAgICAgIHNjZW5lLnNoYWRvd3NFbmFibGVkID0gb3B0
aW1pemVyLmlzSW5JbXByb3ZlbWVudE1vZGU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07
CisgICAgcmV0dXJuIFNoYWRvd3NPcHRpbWl6YXRpb247Cit9KFNjZW5lT3B0aW1pemF0aW9uKSk7
CisKKy8qKgorICogRGVmaW5lcyBhbiBvcHRpbWl6YXRpb24gdXNlZCB0byB0dXJuIHBvc3QtcHJv
Y2Vzc2VzIG9mZgorICogQGRlc2NyaXB0aW9uIE1vcmUgZGV0YWlscyBhdCBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vfc2NlbmVvcHRpbWl6ZXIKKyAqLwordmFyIFBv
c3RQcm9jZXNzZXNPcHRpbWl6YXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVy
KSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0o
UG9zdFByb2Nlc3Nlc09wdGltaXphdGlvbiwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBQb3N0UHJv
Y2Vzc2VzT3B0aW1pemF0aW9uKCkgeworICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYm
IF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CisgICAgfQorICAgIC8qKgor
ICAgICAqIEdldHMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgYWN0aW9uIGV4ZWN1dGVkIGJ5IHRo
ZSBjdXJyZW50IG9wdGltaXphdGlvbgorICAgICAqIEByZXR1cm4gZGVzY3JpcHRpb24gc3RyaW5n
CisgICAgICovCisgICAgUG9zdFByb2Nlc3Nlc09wdGltaXphdGlvbi5wcm90b3R5cGUuZ2V0RGVz
Y3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiVHVybmluZyBwb3N0LXBy
b2Nlc3NlcyBvbi9vZmYiOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiB3
aWxsIGJlIGNhbGxlZCBieSB0aGUgU2NlbmVPcHRpbWl6ZXIgd2hlbiBpdHMgcHJpb3JpdHkgaXMg
cmVhY2hlZCBpbiBvcmRlciB0byBhcHBseSB0aGUgY2hhbmdlIHJlcXVpcmVkIGJ5IHRoZSBjdXJy
ZW50IG9wdGltaXphdGlvbgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBjdXJyZW50
IHNjZW5lIHdoZXJlIHRvIGFwcGx5IHRoaXMgb3B0aW1pemF0aW9uCisgICAgICogQHBhcmFtIG9w
dGltaXplciBkZWZpbmVzIHRoZSBjdXJyZW50IG9wdGltaXplcgorICAgICAqIEByZXR1cm5zIHRy
dWUgaWYgZXZlcnl0aGluZyB0aGF0IGNhbiBiZSBkb25lIHdhcyBhcHBsaWVkCisgICAgICovCisg
ICAgUG9zdFByb2Nlc3Nlc09wdGltaXphdGlvbi5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAo
c2NlbmUsIG9wdGltaXplcikgeworICAgICAgICBzY2VuZS5wb3N0UHJvY2Vzc2VzRW5hYmxlZCA9
IG9wdGltaXplci5pc0luSW1wcm92ZW1lbnRNb2RlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9OworICAgIHJldHVybiBQb3N0UHJvY2Vzc2VzT3B0aW1pemF0aW9uOworfShTY2VuZU9wdGlt
aXphdGlvbikpOworCisvKioKKyAqIERlZmluZXMgYW4gb3B0aW1pemF0aW9uIHVzZWQgdG8gdHVy
biBsZW5zIGZsYXJlcyBvZmYKKyAqIEBkZXNjcmlwdGlvbiBNb3JlIGRldGFpbHMgYXQgaHR0cDov
L2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3NjZW5lb3B0aW1pemVyCisgKi8K
K3ZhciBMZW5zRmxhcmVzT3B0aW1pemF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9z
dXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5k
cyJdKExlbnNGbGFyZXNPcHRpbWl6YXRpb24sIF9zdXBlcik7CisgICAgZnVuY3Rpb24gTGVuc0Zs
YXJlc09wdGltaXphdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBf
c3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBHZXRzIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGFjdGlvbiBleGVjdXRlZCBieSB0aGUg
Y3VycmVudCBvcHRpbWl6YXRpb24KKyAgICAgKiBAcmV0dXJuIGRlc2NyaXB0aW9uIHN0cmluZwor
ICAgICAqLworICAgIExlbnNGbGFyZXNPcHRpbWl6YXRpb24ucHJvdG90eXBlLmdldERlc2NyaXB0
aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlR1cm5pbmcgbGVucyBmbGFyZXMg
b24vb2ZmIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBj
YWxsZWQgYnkgdGhlIFNjZW5lT3B0aW1pemVyIHdoZW4gaXRzIHByaW9yaXR5IGlzIHJlYWNoZWQg
aW4gb3JkZXIgdG8gYXBwbHkgdGhlIGNoYW5nZSByZXF1aXJlZCBieSB0aGUgY3VycmVudCBvcHRp
bWl6YXRpb24KKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgY3VycmVudCBzY2VuZSB3
aGVyZSB0byBhcHBseSB0aGlzIG9wdGltaXphdGlvbgorICAgICAqIEBwYXJhbSBvcHRpbWl6ZXIg
ZGVmaW5lcyB0aGUgY3VycmVudCBvcHRpbWl6ZXIKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGV2
ZXJ5dGhpbmcgdGhhdCBjYW4gYmUgZG9uZSB3YXMgYXBwbGllZAorICAgICAqLworICAgIExlbnNG
bGFyZXNPcHRpbWl6YXRpb24ucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHNjZW5lLCBvcHRp
bWl6ZXIpIHsKKyAgICAgICAgc2NlbmUubGVuc0ZsYXJlc0VuYWJsZWQgPSBvcHRpbWl6ZXIuaXNJ
bkltcHJvdmVtZW50TW9kZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICByZXR1
cm4gTGVuc0ZsYXJlc09wdGltaXphdGlvbjsKK30oU2NlbmVPcHRpbWl6YXRpb24pKTsKKworLyoq
CisgKiBEZWZpbmVzIGFuIG9wdGltaXphdGlvbiBiYXNlZCBvbiB1c2VyIGRlZmluZWQgY2FsbGJh
Y2suCisgKiBAZGVzY3JpcHRpb24gTW9yZSBkZXRhaWxzIGF0IGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9zY2VuZW9wdGltaXplcgorICovCit2YXIgQ3VzdG9tT3B0
aW1pemF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEN1c3RvbU9wdGltaXph
dGlvbiwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBDdXN0b21PcHRpbWl6YXRpb24oKSB7CisgICAg
ICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cykgfHwgdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyBkZXNjcmli
aW5nIHRoZSBhY3Rpb24gZXhlY3V0ZWQgYnkgdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uCisgICAg
ICogQHJldHVybnMgZGVzY3JpcHRpb24gc3RyaW5nCisgICAgICovCisgICAgQ3VzdG9tT3B0aW1p
emF0aW9uLnByb3RvdHlwZS5nZXREZXNjcmlwdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKHRoaXMub25HZXREZXNjcmlwdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMub25H
ZXREZXNjcmlwdGlvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiUnVubmluZyB1c2Vy
IGRlZmluZWQgY2FsbGJhY2siOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlv
biB3aWxsIGJlIGNhbGxlZCBieSB0aGUgU2NlbmVPcHRpbWl6ZXIgd2hlbiBpdHMgcHJpb3JpdHkg
aXMgcmVhY2hlZCBpbiBvcmRlciB0byBhcHBseSB0aGUgY2hhbmdlIHJlcXVpcmVkIGJ5IHRoZSBj
dXJyZW50IG9wdGltaXphdGlvbgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBjdXJy
ZW50IHNjZW5lIHdoZXJlIHRvIGFwcGx5IHRoaXMgb3B0aW1pemF0aW9uCisgICAgICogQHBhcmFt
IG9wdGltaXplciBkZWZpbmVzIHRoZSBjdXJyZW50IG9wdGltaXplcgorICAgICAqIEByZXR1cm5z
IHRydWUgaWYgZXZlcnl0aGluZyB0aGF0IGNhbiBiZSBkb25lIHdhcyBhcHBsaWVkCisgICAgICov
CisgICAgQ3VzdG9tT3B0aW1pemF0aW9uLnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChzY2Vu
ZSwgb3B0aW1pemVyKSB7CisgICAgICAgIGlmICh0aGlzLm9uQXBwbHkpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLm9uQXBwbHkoc2NlbmUsIG9wdGltaXplcik7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICByZXR1cm4gQ3VzdG9tT3B0aW1pemF0aW9uOwor
fShTY2VuZU9wdGltaXphdGlvbikpOworCisvKioKKyAqIERlZmluZXMgYW4gb3B0aW1pemF0aW9u
IHVzZWQgdG8gdHVybiBwYXJ0aWNsZXMgb2ZmCisgKiBAZGVzY3JpcHRpb24gTW9yZSBkZXRhaWxz
IGF0IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9zY2VuZW9wdGlt
aXplcgorICovCit2YXIgUGFydGljbGVzT3B0aW1pemF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZXh0ZW5kcyJdKFBhcnRpY2xlc09wdGltaXphdGlvbiwgX3N1cGVyKTsKKyAgICBmdW5jdGlv
biBQYXJ0aWNsZXNPcHRpbWl6YXRpb24oKSB7CisgICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51
bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpczsKKyAgICB9CisgICAg
LyoqCisgICAgICogR2V0cyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBhY3Rpb24gZXhlY3V0ZWQg
YnkgdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uCisgICAgICogQHJldHVybiBkZXNjcmlwdGlvbiBz
dHJpbmcKKyAgICAgKi8KKyAgICBQYXJ0aWNsZXNPcHRpbWl6YXRpb24ucHJvdG90eXBlLmdldERl
c2NyaXB0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlR1cm5pbmcgcGFydGlj
bGVzIG9uL29mZiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwg
YmUgY2FsbGVkIGJ5IHRoZSBTY2VuZU9wdGltaXplciB3aGVuIGl0cyBwcmlvcml0eSBpcyByZWFj
aGVkIGluIG9yZGVyIHRvIGFwcGx5IHRoZSBjaGFuZ2UgcmVxdWlyZWQgYnkgdGhlIGN1cnJlbnQg
b3B0aW1pemF0aW9uCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGN1cnJlbnQgc2Nl
bmUgd2hlcmUgdG8gYXBwbHkgdGhpcyBvcHRpbWl6YXRpb24KKyAgICAgKiBAcGFyYW0gb3B0aW1p
emVyIGRlZmluZXMgdGhlIGN1cnJlbnQgb3B0aW1pemVyCisgICAgICogQHJldHVybnMgdHJ1ZSBp
ZiBldmVyeXRoaW5nIHRoYXQgY2FuIGJlIGRvbmUgd2FzIGFwcGxpZWQKKyAgICAgKi8KKyAgICBQ
YXJ0aWNsZXNPcHRpbWl6YXRpb24ucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHNjZW5lLCBv
cHRpbWl6ZXIpIHsKKyAgICAgICAgc2NlbmUucGFydGljbGVzRW5hYmxlZCA9IG9wdGltaXplci5p
c0luSW1wcm92ZW1lbnRNb2RlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIHJl
dHVybiBQYXJ0aWNsZXNPcHRpbWl6YXRpb247Cit9KFNjZW5lT3B0aW1pemF0aW9uKSk7CisKKy8q
KgorICogRGVmaW5lcyBhbiBvcHRpbWl6YXRpb24gdXNlZCB0byB0dXJuIHJlbmRlciB0YXJnZXRz
IG9mZgorICogQGRlc2NyaXB0aW9uIE1vcmUgZGV0YWlscyBhdCBodHRwOi8vZG9jLmJhYnlsb25q
cy5jb20vaG93X3RvL2hvd190b191c2Vfc2NlbmVvcHRpbWl6ZXIKKyAqLwordmFyIFJlbmRlclRh
cmdldHNPcHRpbWl6YXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oUmVuZGVy
VGFyZ2V0c09wdGltaXphdGlvbiwgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBSZW5kZXJUYXJnZXRz
T3B0aW1pemF0aW9uKCkgeworICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBl
ci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CisgICAgfQorICAgIC8qKgorICAgICAq
IEdldHMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgYWN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSBjdXJy
ZW50IG9wdGltaXphdGlvbgorICAgICAqIEByZXR1cm4gZGVzY3JpcHRpb24gc3RyaW5nCisgICAg
ICovCisgICAgUmVuZGVyVGFyZ2V0c09wdGltaXphdGlvbi5wcm90b3R5cGUuZ2V0RGVzY3JpcHRp
b24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiVHVybmluZyByZW5kZXIgdGFyZ2V0
cyBvZmYiOworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNh
bGxlZCBieSB0aGUgU2NlbmVPcHRpbWl6ZXIgd2hlbiBpdHMgcHJpb3JpdHkgaXMgcmVhY2hlZCBp
biBvcmRlciB0byBhcHBseSB0aGUgY2hhbmdlIHJlcXVpcmVkIGJ5IHRoZSBjdXJyZW50IG9wdGlt
aXphdGlvbgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBjdXJyZW50IHNjZW5lIHdo
ZXJlIHRvIGFwcGx5IHRoaXMgb3B0aW1pemF0aW9uCisgICAgICogQHBhcmFtIG9wdGltaXplciBk
ZWZpbmVzIHRoZSBjdXJyZW50IG9wdGltaXplcgorICAgICAqIEByZXR1cm5zIHRydWUgaWYgZXZl
cnl0aGluZyB0aGF0IGNhbiBiZSBkb25lIHdhcyBhcHBsaWVkCisgICAgICovCisgICAgUmVuZGVy
VGFyZ2V0c09wdGltaXphdGlvbi5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAoc2NlbmUsIG9w
dGltaXplcikgeworICAgICAgICBzY2VuZS5yZW5kZXJUYXJnZXRzRW5hYmxlZCA9IG9wdGltaXpl
ci5pc0luSW1wcm92ZW1lbnRNb2RlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAg
IHJldHVybiBSZW5kZXJUYXJnZXRzT3B0aW1pemF0aW9uOworfShTY2VuZU9wdGltaXphdGlvbikp
OworCisvKioKKyAqIERlZmluZXMgYW4gb3B0aW1pemF0aW9uIHVzZWQgdG8gbWVyZ2UgbWVzaGVz
IHdpdGggY29tcGF0aWJsZSBtYXRlcmlhbHMKKyAqIEBkZXNjcmlwdGlvbiBNb3JlIGRldGFpbHMg
YXQgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3NjZW5lb3B0aW1p
emVyCisgKi8KK3ZhciBNZXJnZU1lc2hlc09wdGltaXphdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2V4dGVuZHMiXShNZXJnZU1lc2hlc09wdGltaXphdGlvbiwgX3N1cGVyKTsKKyAgICBmdW5j
dGlvbiBNZXJnZU1lc2hlc09wdGltaXphdGlvbigpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1
cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7Cisg
ICAgICAgIF90aGlzLl9jYW5CZU1lcmdlZCA9IGZ1bmN0aW9uIChhYnN0cmFjdE1lc2gpIHsKKyAg
ICAgICAgICAgIGlmICghKGFic3RyYWN0TWVzaCBpbnN0YW5jZW9mIF9NZXNoZXNfbWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJNZXNoIl0pKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1lc2ggPSBhYnN0cmFj
dE1lc2g7CisgICAgICAgICAgICBpZiAobWVzaC5pc0Rpc3Bvc2VkKCkpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1lc2gu
aXNWaXNpYmxlIHx8ICFtZXNoLmlzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1lc2guaW5zdGFuY2VzLmxl
bmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAobWVzaC5za2VsZXRvbiB8fCBtZXNoLmhhc0xPRExldmVscykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXJnZU1lc2hlc09wdGltaXphdGlvbiwgIlVwZGF0
ZVNlbGVjdGlvblRyZWUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMg
YSBib29sZWFuIHdoaWNoIGRlZmluZXMgaWYgb3B0aW1pemF0aW9uIG9jdHJlZSBoYXMgdG8gYmUg
dXBkYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gTWVyZ2VNZXNoZXNPcHRpbWl6YXRpb24uX1VwZGF0ZVNlbGVjdGlvblRyZWU7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29s
ZWFuIHdoaWNoIGRlZmluZXMgaWYgb3B0aW1pemF0aW9uIG9jdHJlZSBoYXMgdG8gYmUgdXBkYXRl
ZAorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIE1lcmdlTWVzaGVzT3B0aW1pemF0aW9uLl9VcGRhdGVTZWxlY3Rpb25UcmVlID0gdmFsdWU7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldHMgYSBzdHJpbmcgZGVzY3Jp
YmluZyB0aGUgYWN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSBjdXJyZW50IG9wdGltaXphdGlvbgorICAg
ICAqIEByZXR1cm4gZGVzY3JpcHRpb24gc3RyaW5nCisgICAgICovCisgICAgTWVyZ2VNZXNoZXNP
cHRpbWl6YXRpb24ucHJvdG90eXBlLmdldERlc2NyaXB0aW9uID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIk1lcmdpbmcgc2ltaWxhciBtZXNoZXMgdG9nZXRoZXIiOworICAgIH07Cisg
ICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSB0aGUgU2NlbmVP
cHRpbWl6ZXIgd2hlbiBpdHMgcHJpb3JpdHkgaXMgcmVhY2hlZCBpbiBvcmRlciB0byBhcHBseSB0
aGUgY2hhbmdlIHJlcXVpcmVkIGJ5IHRoZSBjdXJyZW50IG9wdGltaXphdGlvbgorICAgICAqIEBw
YXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBjdXJyZW50IHNjZW5lIHdoZXJlIHRvIGFwcGx5IHRoaXMg
b3B0aW1pemF0aW9uCisgICAgICogQHBhcmFtIG9wdGltaXplciBkZWZpbmVzIHRoZSBjdXJyZW50
IG9wdGltaXplcgorICAgICAqIEBwYXJhbSB1cGRhdGVTZWxlY3Rpb25UcmVlIGRlZmluZXMgdGhh
dCB0aGUgc2VsZWN0aW9uIG9jdHJlZSBoYXMgdG8gYmUgdXBkYXRlZCAoZmFsc2UgYnkgZGVmYXVs
dCkKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGV2ZXJ5dGhpbmcgdGhhdCBjYW4gYmUgZG9uZSB3
YXMgYXBwbGllZAorICAgICAqLworICAgIE1lcmdlTWVzaGVzT3B0aW1pemF0aW9uLnByb3RvdHlw
ZS5hcHBseSA9IGZ1bmN0aW9uIChzY2VuZSwgb3B0aW1pemVyLCB1cGRhdGVTZWxlY3Rpb25UcmVl
KSB7CisgICAgICAgIHZhciBnbG9iYWxQb29sID0gc2NlbmUubWVzaGVzLnNsaWNlKDApOworICAg
ICAgICB2YXIgZ2xvYmFsTGVuZ3RoID0gZ2xvYmFsUG9vbC5sZW5ndGg7CisgICAgICAgIGZvciAo
dmFyIGluZGV4ID0gMDsgaW5kZXggPCBnbG9iYWxMZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgIHZhciBjdXJyZW50UG9vbCA9IG5ldyBBcnJheSgpOworICAgICAgICAgICAgdmFyIGN1cnJl
bnQgPSBnbG9iYWxQb29sW2luZGV4XTsKKyAgICAgICAgICAgIC8vIENoZWNrcworICAgICAgICAg
ICAgaWYgKCF0aGlzLl9jYW5CZU1lcmdlZChjdXJyZW50KSkgeworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VycmVudFBvb2wucHVzaChjdXJy
ZW50KTsKKyAgICAgICAgICAgIC8vIEZpbmQgY29tcGF0aWJsZSBtZXNoZXMKKyAgICAgICAgICAg
IGZvciAodmFyIHN1YkluZGV4ID0gaW5kZXggKyAxOyBzdWJJbmRleCA8IGdsb2JhbExlbmd0aDsg
c3ViSW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBvdGhlck1lc2ggPSBnbG9iYWxQb29s
W3N1YkluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NhbkJlTWVyZ2VkKG90aGVy
TWVzaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChvdGhlck1lc2gubWF0ZXJpYWwgIT09IGN1cnJlbnQubWF0
ZXJpYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChvdGhlck1lc2guY2hlY2tDb2xsaXNpb25zICE9PSBjdXJy
ZW50LmNoZWNrQ29sbGlzaW9ucykgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VycmVudFBvb2wucHVzaChvdGhlck1l
c2gpOworICAgICAgICAgICAgICAgIGdsb2JhbExlbmd0aC0tOworICAgICAgICAgICAgICAgIGds
b2JhbFBvb2wuc3BsaWNlKHN1YkluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICBzdWJJbmRleC0t
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN1cnJlbnRQb29sLmxlbmd0aCA8IDIp
IHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC8vIE1lcmdlIG1lc2hlcworICAgICAgICAgICAgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIk1lc2giXS5NZXJnZU1lc2hlcyhjdXJyZW50UG9vbCwgdW5kZWZpbmVk
LCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDYWxsIHRoZSBvY3RyZWUgc3lzdGVtIG9w
dGltaXphdGlvbiBpZiBpdCBpcyBkZWZpbmVkLgorICAgICAgICB2YXIgc2NlbmVBc0FueSA9IHNj
ZW5lOworICAgICAgICBpZiAoc2NlbmVBc0FueS5jcmVhdGVPclVwZGF0ZVNlbGVjdGlvbk9jdHJl
ZSkgeworICAgICAgICAgICAgaWYgKHVwZGF0ZVNlbGVjdGlvblRyZWUgIT0gdW5kZWZpbmVkKSB7
CisgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZVNlbGVjdGlvblRyZWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2NlbmVBc0FueS5jcmVhdGVPclVwZGF0ZVNlbGVjdGlvbk9jdHJlZSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKE1lcmdl
TWVzaGVzT3B0aW1pemF0aW9uLlVwZGF0ZVNlbGVjdGlvblRyZWUpIHsKKyAgICAgICAgICAgICAg
ICBzY2VuZUFzQW55LmNyZWF0ZU9yVXBkYXRlU2VsZWN0aW9uT2N0cmVlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICBNZXJnZU1l
c2hlc09wdGltaXphdGlvbi5fVXBkYXRlU2VsZWN0aW9uVHJlZSA9IGZhbHNlOworICAgIHJldHVy
biBNZXJnZU1lc2hlc09wdGltaXphdGlvbjsKK30oU2NlbmVPcHRpbWl6YXRpb24pKTsKKworLyoq
CisgKiBEZWZpbmVzIGEgbGlzdCBvZiBvcHRpb25zIHVzZWQgYnkgU2NlbmVPcHRpbWl6ZXIKKyAq
IEBkZXNjcmlwdGlvbiBNb3JlIGRldGFpbHMgYXQgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hv
d190by9ob3dfdG9fdXNlX3NjZW5lb3B0aW1pemVyCisgKi8KK3ZhciBTY2VuZU9wdGltaXplck9w
dGlvbnMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyBhIG5ldyBsaXN0IG9mIG9wdGlvbnMgdXNlZCBieSBTY2VuZU9wdGltaXplcgorICAgICAq
IEBwYXJhbSB0YXJnZXRGcmFtZVJhdGUgZGVmaW5lcyB0aGUgdGFyZ2V0IGZyYW1lIHJhdGUgdG8g
cmVhY2ggKDYwIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIHRyYWNrZXJEdXJhdGlvbiBkZWZp
bmVzIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHR3byBjaGVja2VzICgyMDAwbXMgYnkgZGVmYXVsdCkK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBTY2VuZU9wdGltaXplck9wdGlvbnMoCisgICAgLyoqCisg
ICAgICogRGVmaW5lcyB0aGUgdGFyZ2V0IGZyYW1lIHJhdGUgdG8gcmVhY2ggKDYwIGJ5IGRlZmF1
bHQpCisgICAgICovCisgICAgdGFyZ2V0RnJhbWVSYXRlLCAKKyAgICAvKioKKyAgICAgKiBEZWZp
bmVzIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHR3byBjaGVja2VzICgyMDAwbXMgYnkgZGVmYXVsdCkK
KyAgICAgKi8KKyAgICB0cmFja2VyRHVyYXRpb24pIHsKKyAgICAgICAgaWYgKHRhcmdldEZyYW1l
UmF0ZSA9PT0gdm9pZCAwKSB7IHRhcmdldEZyYW1lUmF0ZSA9IDYwOyB9CisgICAgICAgIGlmICh0
cmFja2VyRHVyYXRpb24gPT09IHZvaWQgMCkgeyB0cmFja2VyRHVyYXRpb24gPSAyMDAwOyB9Cisg
ICAgICAgIHRoaXMudGFyZ2V0RnJhbWVSYXRlID0gdGFyZ2V0RnJhbWVSYXRlOworICAgICAgICB0
aGlzLnRyYWNrZXJEdXJhdGlvbiA9IHRyYWNrZXJEdXJhdGlvbjsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgdGhlIGxpc3Qgb2Ygb3B0aW1pemF0aW9ucyB0byBhcHBseQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5vcHRpbWl6YXRpb25zID0gbmV3IEFycmF5KCk7CisgICAgfQorICAg
IC8qKgorICAgICAqIEFkZCBhIG5ldyBvcHRpbWl6YXRpb24KKyAgICAgKiBAcGFyYW0gb3B0aW1p
emF0aW9uIGRlZmluZXMgdGhlIFNjZW5lT3B0aW1pemF0aW9uIHRvIGFkZCB0byB0aGUgbGlzdCBv
ZiBhY3RpdmUgb3B0aW1pemF0aW9ucworICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IFNjZW5l
T3B0aW1pemVyT3B0aW9ucworICAgICAqLworICAgIFNjZW5lT3B0aW1pemVyT3B0aW9ucy5wcm90
b3R5cGUuYWRkT3B0aW1pemF0aW9uID0gZnVuY3Rpb24gKG9wdGltaXphdGlvbikgeworICAgICAg
ICB0aGlzLm9wdGltaXphdGlvbnMucHVzaChvcHRpbWl6YXRpb24pOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBhIG5ldyBjdXN0b20gb3B0aW1pemF0
aW9uCisgICAgICogQHBhcmFtIG9uQXBwbHkgZGVmaW5lcyB0aGUgY2FsbGJhY2sgY2FsbGVkIHRv
IGFwcGx5IHRoZSBjdXN0b20gb3B0aW1pemF0aW9uICh0cnVlIGlmIGV2ZXJ5dGhpbmcgdGhhdCBj
YW4gYmUgZG9uZSB3YXMgYXBwbGllZCkKKyAgICAgKiBAcGFyYW0gb25HZXREZXNjcmlwdGlvbiBk
ZWZpbmVzIHRoZSBjYWxsYmFjayBjYWxsZWQgdG8gZ2V0IHRoZSBkZXNjcmlwdGlvbiBhdHRhY2hl
ZCB3aXRoIHRoZSBvcHRpbWl6YXRpb24uCisgICAgICogQHBhcmFtIHByaW9yaXR5IGRlZmluZXMg
dGhlIHByaW9yaXR5IG9mIHRoaXMgb3B0aW1pemF0aW9uICgwIGJ5IGRlZmF1bHQgd2hpY2ggbWVh
bnMgZmlyc3QgaW4gdGhlIGxpc3QpCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgU2NlbmVP
cHRpbWl6ZXJPcHRpb25zCisgICAgICovCisgICAgU2NlbmVPcHRpbWl6ZXJPcHRpb25zLnByb3Rv
dHlwZS5hZGRDdXN0b21PcHRpbWl6YXRpb24gPSBmdW5jdGlvbiAob25BcHBseSwgb25HZXREZXNj
cmlwdGlvbiwgcHJpb3JpdHkpIHsKKyAgICAgICAgaWYgKHByaW9yaXR5ID09PSB2b2lkIDApIHsg
cHJpb3JpdHkgPSAwOyB9CisgICAgICAgIHZhciBvcHRpbWl6YXRpb24gPSBuZXcgQ3VzdG9tT3B0
aW1pemF0aW9uKHByaW9yaXR5KTsKKyAgICAgICAgb3B0aW1pemF0aW9uLm9uQXBwbHkgPSBvbkFw
cGx5OworICAgICAgICBvcHRpbWl6YXRpb24ub25HZXREZXNjcmlwdGlvbiA9IG9uR2V0RGVzY3Jp
cHRpb247CisgICAgICAgIHRoaXMub3B0aW1pemF0aW9ucy5wdXNoKG9wdGltaXphdGlvbik7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGxp
c3Qgb2YgcHJlLWRlZmluZWQgb3B0aW1pemF0aW9ucyBhaW1lZCB0byByZWR1Y2UgdGhlIHZpc3Vh
bCBpbXBhY3Qgb24gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIHRhcmdldEZyYW1lUmF0ZSBkZWZp
bmVzIHRoZSB0YXJnZXQgZnJhbWUgcmF0ZSAoNjAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcmV0dXJu
cyBhIFNjZW5lT3B0aW1pemVyT3B0aW9ucyBvYmplY3QKKyAgICAgKi8KKyAgICBTY2VuZU9wdGlt
aXplck9wdGlvbnMuTG93RGVncmFkYXRpb25BbGxvd2VkID0gZnVuY3Rpb24gKHRhcmdldEZyYW1l
UmF0ZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFNjZW5lT3B0aW1pemVyT3B0aW9ucyh0
YXJnZXRGcmFtZVJhdGUpOworICAgICAgICB2YXIgcHJpb3JpdHkgPSAwOworICAgICAgICByZXN1
bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBNZXJnZU1lc2hlc09wdGltaXphdGlvbihwcmlvcml0eSkp
OworICAgICAgICByZXN1bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBTaGFkb3dzT3B0aW1pemF0aW9u
KHByaW9yaXR5KSk7CisgICAgICAgIHJlc3VsdC5hZGRPcHRpbWl6YXRpb24obmV3IExlbnNGbGFy
ZXNPcHRpbWl6YXRpb24ocHJpb3JpdHkpKTsKKyAgICAgICAgLy8gTmV4dCBwcmlvcml0eQorICAg
ICAgICBwcmlvcml0eSsrOworICAgICAgICByZXN1bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBQb3N0
UHJvY2Vzc2VzT3B0aW1pemF0aW9uKHByaW9yaXR5KSk7CisgICAgICAgIHJlc3VsdC5hZGRPcHRp
bWl6YXRpb24obmV3IFBhcnRpY2xlc09wdGltaXphdGlvbihwcmlvcml0eSkpOworICAgICAgICAv
LyBOZXh0IHByaW9yaXR5CisgICAgICAgIHByaW9yaXR5Kys7CisgICAgICAgIHJlc3VsdC5hZGRP
cHRpbWl6YXRpb24obmV3IFRleHR1cmVPcHRpbWl6YXRpb24ocHJpb3JpdHksIDEwMjQpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBs
aXN0IG9mIHByZS1kZWZpbmVkIG9wdGltaXphdGlvbnMgYWltZWQgdG8gaGF2ZSBhIG1vZGVyYXRl
IGltcGFjdCBvbiB0aGUgc2NlbmUgdmlzdWFsCisgICAgICogQHBhcmFtIHRhcmdldEZyYW1lUmF0
ZSBkZWZpbmVzIHRoZSB0YXJnZXQgZnJhbWUgcmF0ZSAoNjAgYnkgZGVmYXVsdCkKKyAgICAgKiBA
cmV0dXJucyBhIFNjZW5lT3B0aW1pemVyT3B0aW9ucyBvYmplY3QKKyAgICAgKi8KKyAgICBTY2Vu
ZU9wdGltaXplck9wdGlvbnMuTW9kZXJhdGVEZWdyYWRhdGlvbkFsbG93ZWQgPSBmdW5jdGlvbiAo
dGFyZ2V0RnJhbWVSYXRlKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgU2NlbmVPcHRpbWl6
ZXJPcHRpb25zKHRhcmdldEZyYW1lUmF0ZSk7CisgICAgICAgIHZhciBwcmlvcml0eSA9IDA7Cisg
ICAgICAgIHJlc3VsdC5hZGRPcHRpbWl6YXRpb24obmV3IE1lcmdlTWVzaGVzT3B0aW1pemF0aW9u
KHByaW9yaXR5KSk7CisgICAgICAgIHJlc3VsdC5hZGRPcHRpbWl6YXRpb24obmV3IFNoYWRvd3NP
cHRpbWl6YXRpb24ocHJpb3JpdHkpKTsKKyAgICAgICAgcmVzdWx0LmFkZE9wdGltaXphdGlvbihu
ZXcgTGVuc0ZsYXJlc09wdGltaXphdGlvbihwcmlvcml0eSkpOworICAgICAgICAvLyBOZXh0IHBy
aW9yaXR5CisgICAgICAgIHByaW9yaXR5Kys7CisgICAgICAgIHJlc3VsdC5hZGRPcHRpbWl6YXRp
b24obmV3IFBvc3RQcm9jZXNzZXNPcHRpbWl6YXRpb24ocHJpb3JpdHkpKTsKKyAgICAgICAgcmVz
dWx0LmFkZE9wdGltaXphdGlvbihuZXcgUGFydGljbGVzT3B0aW1pemF0aW9uKHByaW9yaXR5KSk7
CisgICAgICAgIC8vIE5leHQgcHJpb3JpdHkKKyAgICAgICAgcHJpb3JpdHkrKzsKKyAgICAgICAg
cmVzdWx0LmFkZE9wdGltaXphdGlvbihuZXcgVGV4dHVyZU9wdGltaXphdGlvbihwcmlvcml0eSwg
NTEyKSk7CisgICAgICAgIC8vIE5leHQgcHJpb3JpdHkKKyAgICAgICAgcHJpb3JpdHkrKzsKKyAg
ICAgICAgcmVzdWx0LmFkZE9wdGltaXphdGlvbihuZXcgUmVuZGVyVGFyZ2V0c09wdGltaXphdGlv
bihwcmlvcml0eSkpOworICAgICAgICAvLyBOZXh0IHByaW9yaXR5CisgICAgICAgIHByaW9yaXR5
Kys7CisgICAgICAgIHJlc3VsdC5hZGRPcHRpbWl6YXRpb24obmV3IEhhcmR3YXJlU2NhbGluZ09w
dGltaXphdGlvbihwcmlvcml0eSwgMikpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGxpc3Qgb2YgcHJlLWRlZmluZWQgb3B0aW1pemF0
aW9ucyBhaW1lZCB0byBoYXZlIGEgYmlnIGltcGFjdCBvbiB0aGUgc2NlbmUgdmlzdWFsCisgICAg
ICogQHBhcmFtIHRhcmdldEZyYW1lUmF0ZSBkZWZpbmVzIHRoZSB0YXJnZXQgZnJhbWUgcmF0ZSAo
NjAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcmV0dXJucyBhIFNjZW5lT3B0aW1pemVyT3B0aW9ucyBv
YmplY3QKKyAgICAgKi8KKyAgICBTY2VuZU9wdGltaXplck9wdGlvbnMuSGlnaERlZ3JhZGF0aW9u
QWxsb3dlZCA9IGZ1bmN0aW9uICh0YXJnZXRGcmFtZVJhdGUpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IG5ldyBTY2VuZU9wdGltaXplck9wdGlvbnModGFyZ2V0RnJhbWVSYXRlKTsKKyAgICAgICAg
dmFyIHByaW9yaXR5ID0gMDsKKyAgICAgICAgcmVzdWx0LmFkZE9wdGltaXphdGlvbihuZXcgTWVy
Z2VNZXNoZXNPcHRpbWl6YXRpb24ocHJpb3JpdHkpKTsKKyAgICAgICAgcmVzdWx0LmFkZE9wdGlt
aXphdGlvbihuZXcgU2hhZG93c09wdGltaXphdGlvbihwcmlvcml0eSkpOworICAgICAgICByZXN1
bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBMZW5zRmxhcmVzT3B0aW1pemF0aW9uKHByaW9yaXR5KSk7
CisgICAgICAgIC8vIE5leHQgcHJpb3JpdHkKKyAgICAgICAgcHJpb3JpdHkrKzsKKyAgICAgICAg
cmVzdWx0LmFkZE9wdGltaXphdGlvbihuZXcgUG9zdFByb2Nlc3Nlc09wdGltaXphdGlvbihwcmlv
cml0eSkpOworICAgICAgICByZXN1bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBQYXJ0aWNsZXNPcHRp
bWl6YXRpb24ocHJpb3JpdHkpKTsKKyAgICAgICAgLy8gTmV4dCBwcmlvcml0eQorICAgICAgICBw
cmlvcml0eSsrOworICAgICAgICByZXN1bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBUZXh0dXJlT3B0
aW1pemF0aW9uKHByaW9yaXR5LCAyNTYpKTsKKyAgICAgICAgLy8gTmV4dCBwcmlvcml0eQorICAg
ICAgICBwcmlvcml0eSsrOworICAgICAgICByZXN1bHQuYWRkT3B0aW1pemF0aW9uKG5ldyBSZW5k
ZXJUYXJnZXRzT3B0aW1pemF0aW9uKHByaW9yaXR5KSk7CisgICAgICAgIC8vIE5leHQgcHJpb3Jp
dHkKKyAgICAgICAgcHJpb3JpdHkrKzsKKyAgICAgICAgcmVzdWx0LmFkZE9wdGltaXphdGlvbihu
ZXcgSGFyZHdhcmVTY2FsaW5nT3B0aW1pemF0aW9uKHByaW9yaXR5LCA0KSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfTsKKyAgICByZXR1cm4gU2NlbmVPcHRpbWl6ZXJPcHRpb25zOwor
fSgpKTsKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHJ1biBvcHRpbWl6YXRpb25zIGluIG9yZGVy
IHRvIHJlYWNoIGEgdGFyZ2V0IGZyYW1lIHJhdGUKKyAqIEBkZXNjcmlwdGlvbiBNb3JlIGRldGFp
bHMgYXQgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3NjZW5lb3B0
aW1pemVyCisgKi8KK3ZhciBTY2VuZU9wdGltaXplciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFNjZW5lT3B0aW1pemVyCisgICAg
ICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIHNjZW5lIHRvIHdvcmsgb24KKyAgICAgKiBAcGFy
YW0gb3B0aW9ucyBkZWZpbmVzIHRoZSBvcHRpb25zIHRvIHVzZSB3aXRoIHRoZSBTY2VuZU9wdGlt
aXplcgorICAgICAqIEBwYXJhbSBhdXRvR2VuZXJhdGVQcmlvcml0aWVzIGRlZmluZXMgaWYgcHJp
b3JpdGllcyBtdXN0IGJlIGdlbmVyYXRlZCBhbmQgbm90IHJlYWQgZnJvbSBTY2VuZU9wdGltaXph
dGlvbiBwcm9wZXJ0eSAodHJ1ZSBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBpbXByb3ZlbWVu
dE1vZGUgZGVmaW5lcyBpZiB0aGUgc2NlbmUgb3B0aW1pemVyIG11c3QgcnVuIHRoZSBtYXhpbXVt
IG9wdGltaXphdGlvbiB3aGlsZSBzdGF5aW5nIG92ZXIgYSB0YXJnZXQgZnJhbWUgaW5zdGVhZCBv
ZiB0cnlpbmcgdG8gcmVhY2ggdGhlIHRhcmdldCBmcmFtZXJhdGUgKGZhbHNlIGJ5IGRlZmF1bHQp
CisgICAgICovCisgICAgZnVuY3Rpb24gU2NlbmVPcHRpbWl6ZXIoc2NlbmUsIG9wdGlvbnMsIGF1
dG9HZW5lcmF0ZVByaW9yaXRpZXMsIGltcHJvdmVtZW50TW9kZSkgeworICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICBpZiAoYXV0b0dlbmVyYXRlUHJpb3JpdGllcyA9PT0gdm9pZCAw
KSB7IGF1dG9HZW5lcmF0ZVByaW9yaXRpZXMgPSB0cnVlOyB9CisgICAgICAgIGlmIChpbXByb3Zl
bWVudE1vZGUgPT09IHZvaWQgMCkgeyBpbXByb3ZlbWVudE1vZGUgPSBmYWxzZTsgfQorICAgICAg
ICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY3VycmVudFByaW9yaXR5
TGV2ZWwgPSAwOworICAgICAgICB0aGlzLl90YXJnZXRGcmFtZVJhdGUgPSA2MDsKKyAgICAgICAg
dGhpcy5fdHJhY2tlckR1cmF0aW9uID0gMjAwMDsKKyAgICAgICAgdGhpcy5fY3VycmVudEZyYW1l
UmF0ZSA9IDA7CisgICAgICAgIHRoaXMuX2ltcHJvdmVtZW50TW9kZSA9IGZhbHNlOworICAgICAg
ICAvKioKKyAgICAgICAgICogRGVmaW5lcyBhbiBvYnNlcnZhYmxlIGNhbGxlZCB3aGVuIHRoZSBv
cHRpbWl6ZXIgcmVhY2hlcyB0aGUgdGFyZ2V0IGZyYW1lIHJhdGUKKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMub25TdWNjZXNzT2JzZXJ2YWJsZSA9IG5ldyBfb2JzZXJ2YWJsZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIERlZmluZXMgYW4gb2JzZXJ2YWJsZSBjYWxsZWQgd2hlbiB0aGUgb3B0aW1pemVyIGVuYWJs
ZXMgYW4gb3B0aW1pemF0aW9uCisgICAgICAgICAqLworICAgICAgICB0aGlzLm9uTmV3T3B0aW1p
emF0aW9uQXBwbGllZE9ic2VydmFibGUgPSBuZXcgX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
ZWZpbmVzIGFuIG9ic2VydmFibGUgY2FsbGVkIHdoZW4gdGhlIG9wdGltaXplciBpcyBub3QgYWJs
ZSB0byByZWFjaCB0aGUgdGFyZ2V0IGZyYW1lIHJhdGUKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMub25GYWlsdXJlT2JzZXJ2YWJsZSA9IG5ldyBfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgaWYgKCFvcHRpb25zKSB7Cisg
ICAgICAgICAgICB0aGlzLl9vcHRpb25zID0gbmV3IFNjZW5lT3B0aW1pemVyT3B0aW9ucygpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9w
dGlvbnM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMudGFyZ2V0RnJhbWVS
YXRlKSB7CisgICAgICAgICAgICB0aGlzLl90YXJnZXRGcmFtZVJhdGUgPSB0aGlzLl9vcHRpb25z
LnRhcmdldEZyYW1lUmF0ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy50
cmFja2VyRHVyYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMuX3RyYWNrZXJEdXJhdGlvbiA9IHRo
aXMuX29wdGlvbnMudHJhY2tlckR1cmF0aW9uOworICAgICAgICB9CisgICAgICAgIGlmIChhdXRv
R2VuZXJhdGVQcmlvcml0aWVzKSB7CisgICAgICAgICAgICB2YXIgcHJpb3JpdHkgPSAwOworICAg
ICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX29wdGlvbnMub3B0aW1pemF0aW9u
czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgb3B0aW0gPSBf
YVtfaV07CisgICAgICAgICAgICAgICAgb3B0aW0ucHJpb3JpdHkgPSBwcmlvcml0eSsrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2ltcHJvdmVtZW50TW9kZSA9IGlt
cHJvdmVtZW50TW9kZTsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8fCBfRW5naW5lc19l
bmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFbmdpbmVTdG9yZSJdLkxh
c3RDcmVhdGVkU2NlbmU7CisgICAgICAgIHRoaXMuX3NjZW5lRGlzcG9zZU9ic2VydmVyID0gdGhp
cy5fc2NlbmUub25EaXNwb3NlT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgX3RoaXMuX3NjZW5lRGlzcG9zZU9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgICAgIF90aGlz
LmRpc3Bvc2UoKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTY2VuZU9wdGltaXplci5wcm90b3R5cGUsICJpc0luSW1wcm92ZW1lbnRNb2RlIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb3B0
aW1pemVyIGlzIGluIGltcHJvdmVtZW50IG1vZGUKKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ltcHJvdmVtZW50TW9kZTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lT3B0aW1p
emVyLnByb3RvdHlwZSwgImN1cnJlbnRQcmlvcml0eUxldmVsIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgY3VycmVudCBwcmlvcml0eSBsZXZlbCAoMCBhdCBzdGFydCkKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2N1cnJlbnRQcmlvcml0eUxldmVsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoU2NlbmVPcHRpbWl6ZXIucHJvdG90eXBlLCAiY3VycmVudEZyYW1l
UmF0ZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGN1cnJlbnQgZnJhbWUg
cmF0ZSBjaGVja2VkIGJ5IHRoZSBTY2VuZU9wdGltaXplcgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudEZyYW1l
UmF0ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5l
T3B0aW1pemVyLnByb3RvdHlwZSwgInRhcmdldEZyYW1lUmF0ZSIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCB0YXJnZXQgZnJhbWUgcmF0ZSAoNjAg
YnkgZGVmYXVsdCkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldEZyYW1lUmF0ZTsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCB0YXJnZXQgZnJhbWUg
cmF0ZSAoNjAgYnkgZGVmYXVsdCkKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl90YXJnZXRGcmFtZVJhdGUgPSB2YWx1ZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lT3B0aW1pemVy
LnByb3RvdHlwZSwgInRyYWNrZXJEdXJhdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCBpbnRlcnZhbCBiZXR3ZWVuIHR3byBjaGVja3MgKGV2
ZXJ5IDIwMDBtcyBieSBkZWZhdWx0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2tlckR1cmF0aW9uOworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBjdXJyZW50IGlu
dGVydmFsIGJldHdlZW4gdHdvIGNoZWNrcyAoZXZlcnkgMjAwMG1zIGJ5IGRlZmF1bHQpCisgICAg
ICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhp
cy5fdHJhY2tlckR1cmF0aW9uID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShTY2VuZU9wdGltaXplci5wcm90b3R5cGUsICJvcHRpbWl6YXRpb25z
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBhY3RpdmUgb3B0
aW1pemF0aW9ucworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucy5vcHRpbWl6YXRpb25zOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICAvKioKKyAgICAgKiBTdG9wcyB0aGUgY3VycmVudCBvcHRpbWl6ZXIKKyAgICAg
Ki8KKyAgICBTY2VuZU9wdGltaXplci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXNldCB0aGUgb3B0aW1pemVyIHRvIGluaXRpYWwgc3RlcCAoY3VycmVudCBwcmlvcml0eSBsZXZl
bCA9IDApCisgICAgICovCisgICAgU2NlbmVPcHRpbWl6ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jdXJyZW50UHJpb3JpdHlMZXZlbCA9IDA7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTdGFydCB0aGUgb3B0aW1pemVyLiBCeSBkZWZhdWx0IGl0IHdp
bGwgdHJ5IHRvIHJlYWNoIGEgc3BlY2lmaWMgZnJhbWVyYXRlCisgICAgICogYnV0IGlmIHRoZSBv
cHRpbWl6ZXIgaXMgc2V0IHdpdGggaW1wcm92ZW1lbnRNb2RlID09PSB0cnVlIHRoZW4gaXQgd2ls
bCBydW4gYWxsIG9wdGltaWF0aWF0aW9uIHdoaWxlIGZyYW1lIHJhdGUgaXMgYWJvdmUgdGhlIHRh
cmdldCBmcmFtZSByYXRlCisgICAgICovCisgICAgU2NlbmVPcHRpbWl6ZXIucHJvdG90eXBlLnN0
YXJ0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBp
ZiAodGhpcy5faXNSdW5uaW5nKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5faXNSdW5uaW5nID0gdHJ1ZTsKKyAgICAgICAgLy8gTGV0J3Mgd2FpdCBmb3Ig
dGhlIHNjZW5lIHRvIGJlIHJlYWR5IGJlZm9yZSBydW5uaW5nIG91ciBjaGVjaworICAgICAgICB0
aGlzLl9zY2VuZS5leGVjdXRlV2hlblJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNl
dFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9jaGVja0N1cnJl
bnRTdGF0ZSgpOworICAgICAgICAgICAgfSwgX3RoaXMuX3RyYWNrZXJEdXJhdGlvbik7CisgICAg
ICAgIH0pOworICAgIH07CisgICAgU2NlbmVPcHRpbWl6ZXIucHJvdG90eXBlLl9jaGVja0N1cnJl
bnRTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgaWYgKCF0aGlzLl9pc1J1bm5pbmcpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTsKKyAgICAgICAgdmFyIG9wdGlvbnMg
PSB0aGlzLl9vcHRpb25zOworICAgICAgICB0aGlzLl9jdXJyZW50RnJhbWVSYXRlID0gTWF0aC5y
b3VuZChzY2VuZS5nZXRFbmdpbmUoKS5nZXRGcHMoKSk7CisgICAgICAgIGlmICh0aGlzLl9pbXBy
b3ZlbWVudE1vZGUgJiYgdGhpcy5fY3VycmVudEZyYW1lUmF0ZSA8PSB0aGlzLl90YXJnZXRGcmFt
ZVJhdGUgfHwKKyAgICAgICAgICAgICF0aGlzLl9pbXByb3ZlbWVudE1vZGUgJiYgdGhpcy5fY3Vy
cmVudEZyYW1lUmF0ZSA+PSB0aGlzLl90YXJnZXRGcmFtZVJhdGUpIHsKKyAgICAgICAgICAgIHRo
aXMuX2lzUnVubmluZyA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5vblN1Y2Nlc3NPYnNlcnZh
YmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAvLyBBcHBseSBjdXJyZW50IGxldmVsIG9mIG9wdGltaXphdGlvbnMKKyAgICAg
ICAgdmFyIGFsbERvbmUgPSB0cnVlOworICAgICAgICB2YXIgbm9PcHRpbWl6YXRpb25BcHBsaWVk
ID0gdHJ1ZTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvbnMub3B0
aW1pemF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBvcHRpbWl6YXRp
b24gPSBvcHRpb25zLm9wdGltaXphdGlvbnNbaW5kZXhdOworICAgICAgICAgICAgaWYgKG9wdGlt
aXphdGlvbi5wcmlvcml0eSA9PT0gdGhpcy5fY3VycmVudFByaW9yaXR5TGV2ZWwpIHsKKyAgICAg
ICAgICAgICAgICBub09wdGltaXphdGlvbkFwcGxpZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBhbGxEb25lID0gYWxsRG9uZSAmJiBvcHRpbWl6YXRpb24uYXBwbHkoc2NlbmUsIHRoaXMpOwor
ICAgICAgICAgICAgICAgIHRoaXMub25OZXdPcHRpbWl6YXRpb25BcHBsaWVkT2JzZXJ2YWJsZS5u
b3RpZnlPYnNlcnZlcnMob3B0aW1pemF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAvLyBJZiBubyBvcHRpbWl6YXRpb24gd2FzIGFwcGxpZWQsIHRoaXMgaXMgYSBmYWls
dXJlIDooCisgICAgICAgIGlmIChub09wdGltaXphdGlvbkFwcGxpZWQpIHsKKyAgICAgICAgICAg
IHRoaXMuX2lzUnVubmluZyA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5vbkZhaWx1cmVPYnNl
cnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAvLyBJZiBhbGwgb3B0aW1pemF0aW9ucyB3ZXJlIGRvbmUsIG1vdmUgdG8g
bmV4dCBsZXZlbAorICAgICAgICBpZiAoYWxsRG9uZSkgeworICAgICAgICAgICAgdGhpcy5fY3Vy
cmVudFByaW9yaXR5TGV2ZWwrKzsKKyAgICAgICAgfQorICAgICAgICAvLyBMZXQncyB0aGUgc3lz
dGVtIHJ1bm5pbmcgZm9yIGEgc3BlY2lmaWMgYW1vdW50IG9mIHRpbWUgYmVmb3JlIGNoZWNraW5n
IEZQUworICAgICAgICBzY2VuZS5leGVjdXRlV2hlblJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLl9j
aGVja0N1cnJlbnRTdGF0ZSgpOworICAgICAgICAgICAgfSwgX3RoaXMuX3RyYWNrZXJEdXJhdGlv
bik7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZSBhbGwgcmVz
b3VyY2VzCisgICAgICovCisgICAgU2NlbmVPcHRpbWl6ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuc3RvcCgpOworICAgICAgICB0aGlzLm9uU3VjY2Vz
c09ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkZhaWx1cmVPYnNlcnZhYmxlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMub25OZXdPcHRpbWl6YXRpb25BcHBsaWVkT2JzZXJ2YWJsZS5j
bGVhcigpOworICAgICAgICBpZiAodGhpcy5fc2NlbmVEaXNwb3NlT2JzZXJ2ZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3NjZW5lLm9uRGlzcG9zZU9ic2VydmFibGUucmVtb3ZlKHRoaXMuX3NjZW5l
RGlzcG9zZU9ic2VydmVyKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogSGVs
cGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIFNjZW5lT3B0aW1pemVyIHdpdGggb25lIHNpbmdsZSBs
aW5lIG9mIGNvZGUKKyAgICAgKiBAcGFyYW0gc2NlbmUgZGVmaW5lcyB0aGUgc2NlbmUgdG8gd29y
ayBvbgorICAgICAqIEBwYXJhbSBvcHRpb25zIGRlZmluZXMgdGhlIG9wdGlvbnMgdG8gdXNlIHdp
dGggdGhlIFNjZW5lT3B0aW1pemVyCisgICAgICogQHBhcmFtIG9uU3VjY2VzcyBkZWZpbmVzIGEg
Y2FsbGJhY2sgdG8gY2FsbCBvbiBzdWNjZXNzCisgICAgICogQHBhcmFtIG9uRmFpbHVyZSBkZWZp
bmVzIGEgY2FsbGJhY2sgdG8gY2FsbCBvbiBmYWlsdXJlCisgICAgICogQHJldHVybnMgdGhlIG5l
dyBTY2VuZU9wdGltaXplciBvYmplY3QKKyAgICAgKi8KKyAgICBTY2VuZU9wdGltaXplci5PcHRp
bWl6ZUFzeW5jID0gZnVuY3Rpb24gKHNjZW5lLCBvcHRpb25zLCBvblN1Y2Nlc3MsIG9uRmFpbHVy
ZSkgeworICAgICAgICB2YXIgb3B0aW1pemVyID0gbmV3IFNjZW5lT3B0aW1pemVyKHNjZW5lLCBv
cHRpb25zIHx8IFNjZW5lT3B0aW1pemVyT3B0aW9ucy5Nb2RlcmF0ZURlZ3JhZGF0aW9uQWxsb3dl
ZCgpLCBmYWxzZSk7CisgICAgICAgIGlmIChvblN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIG9wdGlt
aXplci5vblN1Y2Nlc3NPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAg
ICAgb25TdWNjZXNzKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
b25GYWlsdXJlKSB7CisgICAgICAgICAgICBvcHRpbWl6ZXIub25GYWlsdXJlT2JzZXJ2YWJsZS5h
ZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIG9uRmFpbHVyZSgpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgb3B0aW1pemVyLnN0YXJ0KCk7CisgICAgICAgIHJl
dHVybiBvcHRpbWl6ZXI7CisgICAgfTsKKyAgICByZXR1cm4gU2NlbmVPcHRpbWl6ZXI7Cit9KCkp
OworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2Mvc2NlbmVTZXJpYWxpemVyLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlzYy9z
Y2VuZVNlcmlhbGl6ZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNjZW5lU2VyaWFsaXplciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY2VuZVNlcmlhbGl6ZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFNjZW5lU2VyaWFsaXplcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01l
c2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8g
Ii4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX211bHRpTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tdWx0aU1hdGVyaWFsICovICIuL01hdGVy
aWFscy9tdWx0aU1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKworCisKKwordmFy
IHNlcmlhbGl6ZWRHZW9tZXRyaWVzID0gW107Cit2YXIgc2VyaWFsaXplR2VvbWV0cnkgPSBmdW5j
dGlvbiAoZ2VvbWV0cnksIHNlcmlhbGl6YXRpb25HZW9tZXRyaWVzKSB7CisgICAgaWYgKHNlcmlh
bGl6ZWRHZW9tZXRyaWVzW2dlb21ldHJ5LmlkXSkgeworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChnZW9tZXRyeS5kb05vdFNlcmlhbGl6ZSkgeworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIHNlcmlhbGl6YXRpb25HZW9tZXRyaWVzLnZlcnRleERhdGEucHVzaChnZW9tZXRyeS5z
ZXJpYWxpemVWZXJ0aWNlRGF0YSgpKTsKKyAgICBzZXJpYWxpemVkR2VvbWV0cmllc1tnZW9tZXRy
eS5pZF0gPSB0cnVlOworfTsKK3ZhciBzZXJpYWxpemVNZXNoID0gZnVuY3Rpb24gKG1lc2gsIHNl
cmlhbGl6YXRpb25TY2VuZSkgeworICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307Cisg
ICAgLy8gR2VvbWV0cnkKKyAgICB2YXIgZ2VvbWV0cnkgPSBtZXNoLl9nZW9tZXRyeTsKKyAgICBp
ZiAoZ2VvbWV0cnkpIHsKKyAgICAgICAgaWYgKCFtZXNoLmdldFNjZW5lKCkuZ2V0R2VvbWV0cnlC
eUlEKGdlb21ldHJ5LmlkKSkgeworICAgICAgICAgICAgLy8gR2VvbWV0cnkgd2FzIGluIHRoZSBt
ZW1vcnkgYnV0IG5vdCBhZGRlZCB0byB0aGUgc2NlbmUsIG5ldmVydGhlbGVzcyBpdCdzIGJldHRl
ciB0byBzZXJpYWxpemUgdG8gYmUgYWJsZSB0byByZWxvYWQgdGhlIG1lc2ggd2l0aCBpdHMgZ2Vv
bWV0cnkKKyAgICAgICAgICAgIHNlcmlhbGl6ZUdlb21ldHJ5KGdlb21ldHJ5LCBzZXJpYWxpemF0
aW9uU2NlbmUuZ2VvbWV0cmllcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gQ3VzdG9tCisg
ICAgaWYgKG1lc2guc2VyaWFsaXplKSB7CisgICAgICAgIG1lc2guc2VyaWFsaXplKHNlcmlhbGl6
YXRpb25PYmplY3QpOworICAgIH0KKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKK307
Cit2YXIgZmluYWxpemVTaW5nbGVNZXNoID0gZnVuY3Rpb24gKG1lc2gsIHNlcmlhbGl6YXRpb25P
YmplY3QpIHsKKyAgICAvL29ubHkgd29ya3MgaWYgdGhlIG1lc2ggaXMgYWxyZWFkeSBsb2FkZWQK
KyAgICBpZiAobWVzaC5kZWxheUxvYWRTdGF0ZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNUQVRFX0xPQURF
RCB8fCBtZXNoLmRlbGF5TG9hZFN0YXRlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siQ29uc3RhbnRzIl0uREVMQVlMT0FEU1RBVEVfTk9ORSkgewor
ICAgICAgICAvL3NlcmlhbGl6ZSBtYXRlcmlhbAorICAgICAgICBpZiAobWVzaC5tYXRlcmlhbCAm
JiAhbWVzaC5tYXRlcmlhbC5kb05vdFNlcmlhbGl6ZSkgeworICAgICAgICAgICAgaWYgKG1lc2gu
bWF0ZXJpYWwgaW5zdGFuY2VvZiBfTWF0ZXJpYWxzX211bHRpTWF0ZXJpYWxfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siTXVsdGlNYXRlcmlhbCJdKSB7CisgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5tdWx0aU1hdGVyaWFscyA9IHNlcmlhbGl6YXRpb25PYmplY3QubXVs
dGlNYXRlcmlhbHMgfHwgW107CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5t
YXRlcmlhbHMgPSBzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdGVyaWFscyB8fCBbXTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXNlcmlhbGl6YXRpb25PYmplY3QubXVsdGlNYXRlcmlhbHMuc29tZShmdW5j
dGlvbiAobWF0KSB7IHJldHVybiAobWF0LmlkID09PSBtZXNoLm1hdGVyaWFsLmlkKTsgfSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tdWx0aU1hdGVyaWFscy5w
dXNoKG1lc2gubWF0ZXJpYWwuc2VyaWFsaXplKCkpOworICAgICAgICAgICAgICAgICAgICB2YXIg
X2xvb3BfMSA9IGZ1bmN0aW9uIChzdWJtYXRlcmlhbCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN1Ym1hdGVyaWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
ZXJpYWxpemF0aW9uT2JqZWN0Lm1hdGVyaWFscy5zb21lKGZ1bmN0aW9uIChtYXQpIHsgcmV0dXJu
IChtYXQuaWQgPT09IHN1Ym1hdGVyaWFsLmlkKTsgfSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5tYXRlcmlhbHMucHVzaChzdWJtYXRlcmlh
bC5zZXJpYWxpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gbWVzaC5tYXRlcmlhbC5zdWJNYXRlcmlhbHM7IF9p
IDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VibWF0
ZXJpYWwgPSBfYVtfaV07CisgICAgICAgICAgICAgICAgICAgICAgICBfbG9vcF8xKHN1Ym1hdGVy
aWFsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QubWF0ZXJpYWxzID0gc2VyaWFsaXphdGlvbk9iamVjdC5tYXRlcmlhbHMgfHwgW107Cisg
ICAgICAgICAgICAgICAgaWYgKCFzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdGVyaWFscy5zb21lKGZ1
bmN0aW9uIChtYXQpIHsgcmV0dXJuIChtYXQuaWQgPT09IG1lc2gubWF0ZXJpYWwuaWQpOyB9KSkg
eworICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1hdGVyaWFscy5wdXNo
KG1lc2gubWF0ZXJpYWwuc2VyaWFsaXplKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAvL3NlcmlhbGl6ZSBnZW9tZXRyeQorICAgICAgICB2
YXIgZ2VvbWV0cnkgPSBtZXNoLl9nZW9tZXRyeTsKKyAgICAgICAgaWYgKGdlb21ldHJ5KSB7Cisg
ICAgICAgICAgICBpZiAoIXNlcmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcykgeworICAgICAg
ICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcyA9IHt9OworICAgICAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcy5ib3hlcyA9IFtdOworICAgICAg
ICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcy5zcGhlcmVzID0gW107Cisg
ICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5nZW9tZXRyaWVzLmN5bGluZGVycyA9
IFtdOworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcy50b3J1
c2VzID0gW107CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5nZW9tZXRyaWVz
Lmdyb3VuZHMgPSBbXTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lmdlb21l
dHJpZXMucGxhbmVzID0gW107CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5n
ZW9tZXRyaWVzLnRvcnVzS25vdHMgPSBbXTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9u
T2JqZWN0Lmdlb21ldHJpZXMudmVydGV4RGF0YSA9IFtdOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2VyaWFsaXplR2VvbWV0cnkoZ2VvbWV0cnksIHNlcmlhbGl6YXRpb25PYmplY3QuZ2Vv
bWV0cmllcyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2tlbGV0b25zCisgICAgICAgIGlmICht
ZXNoLnNrZWxldG9uICYmICFtZXNoLnNrZWxldG9uLmRvTm90U2VyaWFsaXplKSB7CisgICAgICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNrZWxldG9ucyA9IHNlcmlhbGl6YXRpb25PYmplY3Qu
c2tlbGV0b25zIHx8IFtdOworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5za2VsZXRv
bnMucHVzaChtZXNoLnNrZWxldG9uLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAv
L3NlcmlhbGl6ZSB0aGUgYWN0dWFsIG1lc2gKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5t
ZXNoZXMgPSBzZXJpYWxpemF0aW9uT2JqZWN0Lm1lc2hlcyB8fCBbXTsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5tZXNoZXMucHVzaChzZXJpYWxpemVNZXNoKG1lc2gsIHNlcmlhbGl6YXRp
b25PYmplY3QpKTsKKyAgICB9Cit9OworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHNlcmlhbGl6ZSBh
IHNjZW5lIGludG8gYSBzdHJpbmcKKyAqLwordmFyIFNjZW5lU2VyaWFsaXplciA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBTY2VuZVNlcmlhbGl6ZXIoKSB7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIENsZWFyIGNhY2hlIHVzZWQgYnkgYSBwcmV2aW91cyBzZXJp
YWxpemF0aW9uCisgICAgICovCisgICAgU2NlbmVTZXJpYWxpemVyLkNsZWFyQ2FjaGUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHNlcmlhbGl6ZWRHZW9tZXRyaWVzID0gW107CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBTZXJpYWxpemUgYSBzY2VuZSBpbnRvIGEgSlNPTiBjb21wYXRpYmxlIG9i
amVjdAorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZpbmVzIHRoZSBzY2VuZSB0byBzZXJpYWxpemUK
KyAgICAgKiBAcmV0dXJucyBhIEpTT04gY29tcGF0aWJsZSBvYmplY3QKKyAgICAgKi8KKyAgICBT
Y2VuZVNlcmlhbGl6ZXIuU2VyaWFsaXplID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAgICAgIHZh
ciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIFNjZW5lU2VyaWFsaXplci5DbGVh
ckNhY2hlKCk7CisgICAgICAgIC8vIFNjZW5lCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
dXNlRGVsYXllZFRleHR1cmVMb2FkaW5nID0gc2NlbmUudXNlRGVsYXllZFRleHR1cmVMb2FkaW5n
OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmF1dG9DbGVhciA9IHNjZW5lLmF1dG9DbGVh
cjsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jbGVhckNvbG9yID0gc2NlbmUuY2xlYXJD
b2xvci5hc0FycmF5KCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYW1iaWVudENvbG9y
ID0gc2NlbmUuYW1iaWVudENvbG9yLmFzQXJyYXkoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5ncmF2aXR5ID0gc2NlbmUuZ3Jhdml0eS5hc0FycmF5KCk7CisgICAgICAgIHNlcmlhbGl6
YXRpb25PYmplY3QuY29sbGlzaW9uc0VuYWJsZWQgPSBzY2VuZS5jb2xsaXNpb25zRW5hYmxlZDsK
KyAgICAgICAgLy8gRm9nCisgICAgICAgIGlmIChzY2VuZS5mb2dNb2RlICYmIHNjZW5lLmZvZ01v
ZGUgIT09IDApIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZm9nTW9kZSA9IHNj
ZW5lLmZvZ01vZGU7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmZvZ0NvbG9yID0g
c2NlbmUuZm9nQ29sb3IuYXNBcnJheSgpOworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC5mb2dTdGFydCA9IHNjZW5lLmZvZ1N0YXJ0OworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5mb2dFbmQgPSBzY2VuZS5mb2dFbmQ7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LmZvZ0RlbnNpdHkgPSBzY2VuZS5mb2dEZW5zaXR5OworICAgICAgICB9CisgICAgICAgIC8v
UGh5c2ljcworICAgICAgICBpZiAoc2NlbmUuaXNQaHlzaWNzRW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICB2YXIgcGh5c2ljRW5naW5lID0gc2NlbmUuZ2V0UGh5c2ljc0VuZ2luZSgpOworICAgICAg
ICAgICAgaWYgKHBoeXNpY0VuZ2luZSkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QucGh5c2ljc0VuYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QucGh5c2ljc0dyYXZpdHkgPSBwaHlzaWNFbmdpbmUuZ3Jhdml0eS5hc0FycmF5KCk7
CisgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5waHlzaWNzRW5naW5lID0gcGh5
c2ljRW5naW5lLmdldFBoeXNpY3NQbHVnaW5OYW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgLy8gTWV0YWRhdGEKKyAgICAgICAgaWYgKHNjZW5lLm1ldGFkYXRhKSB7Cisg
ICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1ldGFkYXRhID0gc2NlbmUubWV0YWRhdGE7
CisgICAgICAgIH0KKyAgICAgICAgLy8gTW9ycGggdGFyZ2V0cworICAgICAgICBzZXJpYWxpemF0
aW9uT2JqZWN0Lm1vcnBoVGFyZ2V0TWFuYWdlcnMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgX2kg
PSAwLCBfYSA9IHNjZW5lLm1lc2hlczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAg
ICAgIHZhciBhYnN0cmFjdE1lc2ggPSBfYVtfaV07CisgICAgICAgICAgICB2YXIgbWFuYWdlciA9
IGFic3RyYWN0TWVzaC5tb3JwaFRhcmdldE1hbmFnZXI7CisgICAgICAgICAgICBpZiAobWFuYWdl
cikgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubW9ycGhUYXJnZXRNYW5h
Z2Vycy5wdXNoKG1hbmFnZXIuc2VyaWFsaXplKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIC8vIExpZ2h0cworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmxpZ2h0cyA9
IFtdOworICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIHZhciBsaWdodDsKKyAgICAgICAgZm9y
IChpbmRleCA9IDA7IGluZGV4IDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaW5kZXgrKykgeworICAg
ICAgICAgICAgbGlnaHQgPSBzY2VuZS5saWdodHNbaW5kZXhdOworICAgICAgICAgICAgaWYgKCFs
aWdodC5kb05vdFNlcmlhbGl6ZSkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QubGlnaHRzLnB1c2gobGlnaHQuc2VyaWFsaXplKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIC8vIENhbWVyYXMKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jYW1l
cmFzID0gW107CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNjZW5lLmNhbWVyYXMu
bGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgY2FtZXJhID0gc2NlbmUuY2FtZXJh
c1tpbmRleF07CisgICAgICAgICAgICBpZiAoIWNhbWVyYS5kb05vdFNlcmlhbGl6ZSkgeworICAg
ICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY2FtZXJhcy5wdXNoKGNhbWVyYS5zZXJp
YWxpemUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjZW5lLmFj
dGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hY3RpdmVDYW1l
cmFJRCA9IHNjZW5lLmFjdGl2ZUNhbWVyYS5pZDsKKyAgICAgICAgfQorICAgICAgICAvLyBBbmlt
YXRpb25zCisgICAgICAgIF9kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IlNlcmlhbGl6YXRpb25IZWxwZXIiXS5BcHBlbmRTZXJpYWxpemVkQW5pbWF0aW9ucyhzY2VuZSwg
c2VyaWFsaXphdGlvbk9iamVjdCk7CisgICAgICAgIC8vIEFuaW1hdGlvbiBHcm91cHMKKyAgICAg
ICAgaWYgKHNjZW5lLmFuaW1hdGlvbkdyb3VwcyAmJiBzY2VuZS5hbmltYXRpb25Hcm91cHMubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hbmltYXRpb25Hcm91
cHMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGFuaW1hdGlvbkdyb3VwSW5kZXggPSAwOyBh
bmltYXRpb25Hcm91cEluZGV4IDwgc2NlbmUuYW5pbWF0aW9uR3JvdXBzLmxlbmd0aDsgYW5pbWF0
aW9uR3JvdXBJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGFuaW1hdGlvbkdyb3VwID0g
c2NlbmUuYW5pbWF0aW9uR3JvdXBzW2FuaW1hdGlvbkdyb3VwSW5kZXhdOworICAgICAgICAgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYW5pbWF0aW9uR3JvdXBzLnB1c2goYW5pbWF0aW9uR3Jv
dXAuc2VyaWFsaXplKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFJl
ZmxlY3Rpb24gcHJvYmVzCisgICAgICAgIGlmIChzY2VuZS5yZWZsZWN0aW9uUHJvYmVzICYmIHNj
ZW5lLnJlZmxlY3Rpb25Qcm9iZXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgc2VyaWFsaXph
dGlvbk9iamVjdC5yZWZsZWN0aW9uUHJvYmVzID0gW107CisgICAgICAgICAgICBmb3IgKGluZGV4
ID0gMDsgaW5kZXggPCBzY2VuZS5yZWZsZWN0aW9uUHJvYmVzLmxlbmd0aDsgaW5kZXgrKykgewor
ICAgICAgICAgICAgICAgIHZhciByZWZsZWN0aW9uUHJvYmUgPSBzY2VuZS5yZWZsZWN0aW9uUHJv
YmVzW2luZGV4XTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJlZmxlY3Rp
b25Qcm9iZXMucHVzaChyZWZsZWN0aW9uUHJvYmUuc2VyaWFsaXplKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIC8vIE1hdGVyaWFscworICAgICAgICBzZXJpYWxpemF0aW9u
T2JqZWN0Lm1hdGVyaWFscyA9IFtdOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm11bHRp
TWF0ZXJpYWxzID0gW107CisgICAgICAgIHZhciBtYXRlcmlhbDsKKyAgICAgICAgZm9yIChpbmRl
eCA9IDA7IGluZGV4IDwgc2NlbmUubWF0ZXJpYWxzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgbWF0ZXJpYWwgPSBzY2VuZS5tYXRlcmlhbHNbaW5kZXhdOworICAgICAgICAgICAgaWYg
KCFtYXRlcmlhbC5kb05vdFNlcmlhbGl6ZSkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QubWF0ZXJpYWxzLnB1c2gobWF0ZXJpYWwuc2VyaWFsaXplKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE11bHRpTWF0ZXJpYWxzCisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3QubXVsdGlNYXRlcmlhbHMgPSBbXTsKKyAgICAgICAgZm9yIChpbmRleCA9
IDA7IGluZGV4IDwgc2NlbmUubXVsdGlNYXRlcmlhbHMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAg
ICAgICAgICB2YXIgbXVsdGlNYXRlcmlhbCA9IHNjZW5lLm11bHRpTWF0ZXJpYWxzW2luZGV4XTsK
KyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubXVsdGlNYXRlcmlhbHMucHVzaChtdWx0
aU1hdGVyaWFsLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBFbnZpcm9ubWVu
dCB0ZXh0dXJlCisgICAgICAgIGlmIChzY2VuZS5lbnZpcm9ubWVudFRleHR1cmUpIHsKKyAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZW52aXJvbm1lbnRUZXh0dXJlID0gc2NlbmUuZW52
aXJvbm1lbnRUZXh0dXJlLm5hbWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gRW52aXJvbm1lbnQg
SW50ZW5zaXR5CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZW52aXJvbm1lbnRJbnRlbnNp
dHkgPSBzY2VuZS5lbnZpcm9ubWVudEludGVuc2l0eTsKKyAgICAgICAgLy8gU2tlbGV0b25zCisg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc2tlbGV0b25zID0gW107CisgICAgICAgIGZvciAo
aW5kZXggPSAwOyBpbmRleCA8IHNjZW5lLnNrZWxldG9ucy5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgIHZhciBza2VsZXRvbiA9IHNjZW5lLnNrZWxldG9uc1tpbmRleF07CisgICAgICAg
ICAgICBpZiAoIXNrZWxldG9uLmRvTm90U2VyaWFsaXplKSB7CisgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5za2VsZXRvbnMucHVzaChza2VsZXRvbi5zZXJpYWxpemUoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVHJhbnNmb3JtIG5vZGVzCisgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QudHJhbnNmb3JtTm9kZXMgPSBbXTsKKyAgICAgICAgZm9y
IChpbmRleCA9IDA7IGluZGV4IDwgc2NlbmUudHJhbnNmb3JtTm9kZXMubGVuZ3RoOyBpbmRleCsr
KSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRyYW5zZm9ybU5vZGVzLnB1c2go
c2NlbmUudHJhbnNmb3JtTm9kZXNbaW5kZXhdLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBHZW9tZXRyaWVzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmll
cyA9IHt9OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lmdlb21ldHJpZXMuYm94ZXMgPSBb
XTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5nZW9tZXRyaWVzLnNwaGVyZXMgPSBbXTsK
KyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5nZW9tZXRyaWVzLmN5bGluZGVycyA9IFtdOwor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lmdlb21ldHJpZXMudG9ydXNlcyA9IFtdOworICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lmdlb21ldHJpZXMuZ3JvdW5kcyA9IFtdOworICAgICAg
ICBzZXJpYWxpemF0aW9uT2JqZWN0Lmdlb21ldHJpZXMucGxhbmVzID0gW107CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcy50b3J1c0tub3RzID0gW107CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QuZ2VvbWV0cmllcy52ZXJ0ZXhEYXRhID0gW107CisgICAgICAgIHNl
cmlhbGl6ZWRHZW9tZXRyaWVzID0gW107CisgICAgICAgIHZhciBnZW9tZXRyaWVzID0gc2NlbmUu
Z2V0R2VvbWV0cmllcygpOworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBnZW9tZXRy
aWVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gZ2VvbWV0
cmllc1tpbmRleF07CisgICAgICAgICAgICBpZiAoZ2VvbWV0cnkuaXNSZWFkeSgpKSB7CisgICAg
ICAgICAgICAgICAgc2VyaWFsaXplR2VvbWV0cnkoZ2VvbWV0cnksIHNlcmlhbGl6YXRpb25PYmpl
Y3QuZ2VvbWV0cmllcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gTWVz
aGVzCisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWVzaGVzID0gW107CisgICAgICAgIGZv
ciAoaW5kZXggPSAwOyBpbmRleCA8IHNjZW5lLm1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgIHZhciBhYnN0cmFjdE1lc2ggPSBzY2VuZS5tZXNoZXNbaW5kZXhdOworICAgICAg
ICAgICAgaWYgKGFic3RyYWN0TWVzaCBpbnN0YW5jZW9mIF9NZXNoZXNfbWVzaF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJNZXNoIl0pIHsKKyAgICAgICAgICAgICAgICB2YXIgbWVzaCA9
IGFic3RyYWN0TWVzaDsKKyAgICAgICAgICAgICAgICBpZiAoIW1lc2guZG9Ob3RTZXJpYWxpemUp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2guZGVsYXlMb2FkU3RhdGUgPT09IF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb25zdGFudHMiXS5E
RUxBWUxPQURTVEFURV9MT0FERUQgfHwgbWVzaC5kZWxheUxvYWRTdGF0ZSA9PT0gX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbnN0YW50cyJdLkRFTEFZ
TE9BRFNUQVRFX05PTkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QubWVzaGVzLnB1c2goc2VyaWFsaXplTWVzaChtZXNoLCBzZXJpYWxpemF0aW9uT2JqZWN0
KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gUGFydGljbGVzIFN5c3RlbXMKKyAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5wYXJ0aWNsZVN5c3RlbXMgPSBbXTsKKyAgICAgICAgZm9yIChpbmRl
eCA9IDA7IGluZGV4IDwgc2NlbmUucGFydGljbGVTeXN0ZW1zLmxlbmd0aDsgaW5kZXgrKykgewor
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5wYXJ0aWNsZVN5c3RlbXMucHVzaChzY2Vu
ZS5wYXJ0aWNsZVN5c3RlbXNbaW5kZXhdLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBBY3Rpb24gTWFuYWdlcgorICAgICAgICBpZiAoc2NlbmUuYWN0aW9uTWFuYWdlcikgewor
ICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hY3Rpb25zID0gc2NlbmUuYWN0aW9uTWFu
YWdlci5zZXJpYWxpemUoInNjZW5lIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29tcG9uZW50
cworICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gc2NlbmUuX3NlcmlhbGl6YWJsZUNvbXBv
bmVudHM7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7CisgICAgICAgICAgICB2YXIgY29tcG9uZW50
ID0gX2NbX2JdOworICAgICAgICAgICAgY29tcG9uZW50LnNlcmlhbGl6ZShzZXJpYWxpemF0aW9u
T2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSBhIG1lc2ggaW50byBhIEpTT04gY29t
cGF0aWJsZSBvYmplY3QKKyAgICAgKiBAcGFyYW0gdG9TZXJpYWxpemUgZGVmaW5lcyB0aGUgbWVz
aCB0byBzZXJpYWxpemUKKyAgICAgKiBAcGFyYW0gd2l0aFBhcmVudHMgZGVmaW5lcyBpZiBwYXJl
bnRzIG11c3QgYmUgc2VyaWFsaXplZCBhcyB3ZWxsCisgICAgICogQHBhcmFtIHdpdGhDaGlsZHJl
biBkZWZpbmVzIGlmIGNoaWxkcmVuIG11c3QgYmUgc2VyaWFsaXplZCBhcyB3ZWxsCisgICAgICog
QHJldHVybnMgYSBKU09OIGNvbXBhdGlibGUgb2JqZWN0CisgICAgICovCisgICAgU2NlbmVTZXJp
YWxpemVyLlNlcmlhbGl6ZU1lc2ggPSBmdW5jdGlvbiAodG9TZXJpYWxpemUgLyogTWVzaCB8fCBN
ZXNoW10gKi8sIHdpdGhQYXJlbnRzLCB3aXRoQ2hpbGRyZW4pIHsKKyAgICAgICAgaWYgKHdpdGhQ
YXJlbnRzID09PSB2b2lkIDApIHsgd2l0aFBhcmVudHMgPSBmYWxzZTsgfQorICAgICAgICBpZiAo
d2l0aENoaWxkcmVuID09PSB2b2lkIDApIHsgd2l0aENoaWxkcmVuID0gZmFsc2U7IH0KKyAgICAg
ICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAgICAgICAgU2NlbmVTZXJpYWxpemVy
LkNsZWFyQ2FjaGUoKTsKKyAgICAgICAgdG9TZXJpYWxpemUgPSAodG9TZXJpYWxpemUgaW5zdGFu
Y2VvZiBBcnJheSkgPyB0b1NlcmlhbGl6ZSA6IFt0b1NlcmlhbGl6ZV07CisgICAgICAgIGlmICh3
aXRoUGFyZW50cyB8fCB3aXRoQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIC8vZGVsaWJlcmF0ZSBm
b3IgbG9vcCEgbm90IGZvciBlYWNoLCBhcHBlbmRlZCBzaG91bGQgYmUgcHJvY2Vzc2VkIGFzIHdl
bGwuCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvU2VyaWFsaXplLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHdpdGhDaGlsZHJlbikgeworICAgICAgICAgICAg
ICAgICAgICB0b1NlcmlhbGl6ZVtpXS5nZXREZXNjZW5kYW50cygpLmZvckVhY2goZnVuY3Rpb24g
KG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgX01l
c2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1lc2giXSAmJiAodG9TZXJp
YWxpemUuaW5kZXhPZihub2RlKSA8IDApICYmICFub2RlLmRvTm90U2VyaWFsaXplKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9TZXJpYWxpemUucHVzaChub2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vbWFrZSBzdXJlIHRoZSBhcnJheSBkb2Vzbid0IGNvbnRh
aW4gdGhlIG9iamVjdCBhbHJlYWR5CisgICAgICAgICAgICAgICAgaWYgKHdpdGhQYXJlbnRzICYm
IHRvU2VyaWFsaXplW2ldLnBhcmVudCAmJiAodG9TZXJpYWxpemUuaW5kZXhPZih0b1NlcmlhbGl6
ZVtpXS5wYXJlbnQpIDwgMCkgJiYgIXRvU2VyaWFsaXplW2ldLnBhcmVudC5kb05vdFNlcmlhbGl6
ZSkgeworICAgICAgICAgICAgICAgICAgICB0b1NlcmlhbGl6ZS5wdXNoKHRvU2VyaWFsaXplW2ld
LnBhcmVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHRvU2VyaWFsaXplLmZvckVhY2goZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgICAg
IGZpbmFsaXplU2luZ2xlTWVzaChtZXNoLCBzZXJpYWxpemF0aW9uT2JqZWN0KTsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgcmV0
dXJuIFNjZW5lU2VyaWFsaXplcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWlzYy9zY3JlZW5zaG90VG9vbHMudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9NaXNjL3NjcmVlbnNob3RUb29scy50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2Ny
ZWVuc2hvdFRvb2xzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjcmVl
bnNob3RUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2NyZWVuc2hvdFRvb2xzOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVy
aWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJU
YXJnZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZSAqLyAi
Li9NYXRlcmlhbHMvVGV4dHVyZXMvcmVuZGVyVGFyZ2V0VGV4dHVyZS50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX2Z4YWFQb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUG9zdFByb2Nl
c3Nlcy9meGFhUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9meGFhUG9zdFByb2Nlc3Mu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2lu
ZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIpOwor
CisKKworCisKKworLyoqCisgKiBDbGFzcyBjb250YWluaW5nIGEgc2V0IG9mIHN0YXRpYyB1dGls
aXRpZXMgZnVuY3Rpb25zIGZvciBzY3JlZW5zaG90cworICovCit2YXIgU2NyZWVuc2hvdFRvb2xz
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFNjcmVlbnNob3RU
b29scygpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogQ2FwdHVyZXMgYSBzY3JlZW5zaG90IG9m
IHRoZSBjdXJyZW50IHJlbmRlcmluZworICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by9yZW5kZXJfc2NlbmVfb25fYV9wbmcKKyAgICAgKiBAcGFyYW0gZW5naW5lIGRl
ZmluZXMgdGhlIHJlbmRlcmluZyBlbmdpbmUKKyAgICAgKiBAcGFyYW0gY2FtZXJhIGRlZmluZXMg
dGhlIHNvdXJjZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gc2l6ZSBUaGlzIHBhcmFtZXRlciBjYW4g
YmUgc2V0IHRvIGEgc2luZ2xlIG51bWJlciBvciB0byBhbiBvYmplY3Qgd2l0aCB0aGUKKyAgICAg
KiBmb2xsb3dpbmcgKG9wdGlvbmFsKSBwcm9wZXJ0aWVzOiBwcmVjaXNpb24sIHdpZHRoLCBoZWln
aHQuIElmIGEgc2luZ2xlIG51bWJlciBpcyBwYXNzZWQsCisgICAgICogaXQgd2lsbCBiZSB1c2Vk
IGZvciBib3RoIHdpZHRoIGFuZCBoZWlnaHQuIElmIGFuIG9iamVjdCBpcyBwYXNzZWQsIHRoZSBz
Y3JlZW5zaG90IHNpemUKKyAgICAgKiB3aWxsIGJlIGRlcml2ZWQgZnJvbSB0aGUgcGFyYW1ldGVy
cy4gVGhlIHByZWNpc2lvbiBwcm9wZXJ0eSBpcyBhIG11bHRpcGxpZXIgYWxsb3dpbmcKKyAgICAg
KiByZW5kZXJpbmcgYXQgYSBoaWdoZXIgb3IgbG93ZXIgcmVzb2x1dGlvbgorICAgICAqIEBwYXJh
bSBzdWNjZXNzQ2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sgcmVjZWl2ZXMgYSBzaW5nbGUg
cGFyYW1ldGVyIHdoaWNoIGNvbnRhaW5zIHRoZQorICAgICAqIHNjcmVlbnNob3QgYXMgYSBzdHJp
bmcgb2YgYmFzZTY0LWVuY29kZWQgY2hhcmFjdGVycy4gVGhpcyBzdHJpbmcgY2FuIGJlIGFzc2ln
bmVkIHRvIHRoZQorICAgICAqIHNyYyBwYXJhbWV0ZXIgb2YgYW4gPGltZz4gdG8gZGlzcGxheSBp
dAorICAgICAqIEBwYXJhbSBtaW1lVHlwZSBkZWZpbmVzIHRoZSBNSU1FIHR5cGUgb2YgdGhlIHNj
cmVlbnNob3QgaW1hZ2UgKGRlZmF1bHQ6IGltYWdlL3BuZykuCisgICAgICogQ2hlY2sgeW91ciBi
cm93c2VyIGZvciBzdXBwb3J0ZWQgTUlNRSB0eXBlcworICAgICAqLworICAgIFNjcmVlbnNob3RU
b29scy5DcmVhdGVTY3JlZW5zaG90ID0gZnVuY3Rpb24gKGVuZ2luZSwgY2FtZXJhLCBzaXplLCBz
dWNjZXNzQ2FsbGJhY2ssIG1pbWVUeXBlKSB7CisgICAgICAgIGlmIChtaW1lVHlwZSA9PT0gdm9p
ZCAwKSB7IG1pbWVUeXBlID0gImltYWdlL3BuZyI7IH0KKyAgICAgICAgdmFyIF9hID0gU2NyZWVu
c2hvdFRvb2xzLl9nZXRTY3JlZW5zaG90U2l6ZShlbmdpbmUsIGNhbWVyYSwgc2l6ZSksIGhlaWdo
dCA9IF9hLmhlaWdodCwgd2lkdGggPSBfYS53aWR0aDsKKyAgICAgICAgaWYgKCEoaGVpZ2h0ICYm
IHdpZHRoKSkgeworICAgICAgICAgICAgX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJMb2dnZXIiXS5FcnJvcigiSW52YWxpZCAnc2l6ZScgcGFyYW1ldGVyICEiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIV90b29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLl9TY3JlZW5zaG90Q2FudmFzKSB7CisgICAgICAg
ICAgICBfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVG9vbHMiXS5fU2NyZWVu
c2hvdENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOworICAgICAgICB9
CisgICAgICAgIF90b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLl9T
Y3JlZW5zaG90Q2FudmFzLndpZHRoID0gd2lkdGg7CisgICAgICAgIF90b29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLl9TY3JlZW5zaG90Q2FudmFzLmhlaWdodCA9IGhl
aWdodDsKKyAgICAgICAgdmFyIHJlbmRlckNvbnRleHQgPSBfdG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siVG9vbHMiXS5fU2NyZWVuc2hvdENhbnZhcy5nZXRDb250ZXh0KCIyZCIp
OworICAgICAgICB2YXIgcmF0aW8gPSBlbmdpbmUuZ2V0UmVuZGVyV2lkdGgoKSAvIGVuZ2luZS5n
ZXRSZW5kZXJIZWlnaHQoKTsKKyAgICAgICAgdmFyIG5ld1dpZHRoID0gd2lkdGg7CisgICAgICAg
IHZhciBuZXdIZWlnaHQgPSBuZXdXaWR0aCAvIHJhdGlvOworICAgICAgICBpZiAobmV3SGVpZ2h0
ID4gaGVpZ2h0KSB7CisgICAgICAgICAgICBuZXdIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAg
ICBuZXdXaWR0aCA9IG5ld0hlaWdodCAqIHJhdGlvOworICAgICAgICB9CisgICAgICAgIHZhciBv
ZmZzZXRYID0gTWF0aC5tYXgoMCwgd2lkdGggLSBuZXdXaWR0aCkgLyAyOworICAgICAgICB2YXIg
b2Zmc2V0WSA9IE1hdGgubWF4KDAsIGhlaWdodCAtIG5ld0hlaWdodCkgLyAyOworICAgICAgICB2
YXIgcmVuZGVyaW5nQ2FudmFzID0gZW5naW5lLmdldFJlbmRlcmluZ0NhbnZhcygpOworICAgICAg
ICBpZiAocmVuZGVyQ29udGV4dCAmJiByZW5kZXJpbmdDYW52YXMpIHsKKyAgICAgICAgICAgIHJl
bmRlckNvbnRleHQuZHJhd0ltYWdlKHJlbmRlcmluZ0NhbnZhcywgb2Zmc2V0WCwgb2Zmc2V0WSwg
bmV3V2lkdGgsIG5ld0hlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgX3Rvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlRvb2xzIl0uRW5jb2RlU2NyZWVuc2hvdENhbnZhc0RhdGEo
c3VjY2Vzc0NhbGxiYWNrLCBtaW1lVHlwZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYXB0
dXJlcyBhIHNjcmVlbnNob3Qgb2YgdGhlIGN1cnJlbnQgcmVuZGVyaW5nCisgICAgICogQHNlZSBo
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3JlbmRlcl9zY2VuZV9vbl9hX3BuZworICAg
ICAqIEBwYXJhbSBlbmdpbmUgZGVmaW5lcyB0aGUgcmVuZGVyaW5nIGVuZ2luZQorICAgICAqIEBw
YXJhbSBjYW1lcmEgZGVmaW5lcyB0aGUgc291cmNlIGNhbWVyYQorICAgICAqIEBwYXJhbSBzaXpl
IFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gYSBzaW5nbGUgbnVtYmVyIG9yIHRvIGFuIG9i
amVjdCB3aXRoIHRoZQorICAgICAqIGZvbGxvd2luZyAob3B0aW9uYWwpIHByb3BlcnRpZXM6IHBy
ZWNpc2lvbiwgd2lkdGgsIGhlaWdodC4gSWYgYSBzaW5nbGUgbnVtYmVyIGlzIHBhc3NlZCwKKyAg
ICAgKiBpdCB3aWxsIGJlIHVzZWQgZm9yIGJvdGggd2lkdGggYW5kIGhlaWdodC4gSWYgYW4gb2Jq
ZWN0IGlzIHBhc3NlZCwgdGhlIHNjcmVlbnNob3Qgc2l6ZQorICAgICAqIHdpbGwgYmUgZGVyaXZl
ZCBmcm9tIHRoZSBwYXJhbWV0ZXJzLiBUaGUgcHJlY2lzaW9uIHByb3BlcnR5IGlzIGEgbXVsdGlw
bGllciBhbGxvd2luZworICAgICAqIHJlbmRlcmluZyBhdCBhIGhpZ2hlciBvciBsb3dlciByZXNv
bHV0aW9uCisgICAgICogQHBhcmFtIG1pbWVUeXBlIGRlZmluZXMgdGhlIE1JTUUgdHlwZSBvZiB0
aGUgc2NyZWVuc2hvdCBpbWFnZSAoZGVmYXVsdDogaW1hZ2UvcG5nKS4KKyAgICAgKiBDaGVjayB5
b3VyIGJyb3dzZXIgZm9yIHN1cHBvcnRlZCBNSU1FIHR5cGVzCisgICAgICogQHJldHVybnMgc2Ny
ZWVuc2hvdCBhcyBhIHN0cmluZyBvZiBiYXNlNjQtZW5jb2RlZCBjaGFyYWN0ZXJzLiBUaGlzIHN0
cmluZyBjYW4gYmUgYXNzaWduZWQKKyAgICAgKiB0byB0aGUgc3JjIHBhcmFtZXRlciBvZiBhbiA8
aW1nPiB0byBkaXNwbGF5IGl0CisgICAgICovCisgICAgU2NyZWVuc2hvdFRvb2xzLkNyZWF0ZVNj
cmVlbnNob3RBc3luYyA9IGZ1bmN0aW9uIChlbmdpbmUsIGNhbWVyYSwgc2l6ZSwgbWltZVR5cGUp
IHsKKyAgICAgICAgaWYgKG1pbWVUeXBlID09PSB2b2lkIDApIHsgbWltZVR5cGUgPSAiaW1hZ2Uv
cG5nIjsgfQorICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJl
amVjdCkgeworICAgICAgICAgICAgU2NyZWVuc2hvdFRvb2xzLkNyZWF0ZVNjcmVlbnNob3QoZW5n
aW5lLCBjYW1lcmEsIHNpemUsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgICAgICAgaWYg
KHR5cGVvZiAoZGF0YSkgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
c29sdmUoZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJEYXRhIGlzIHVuZGVmaW5lZCIp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCBtaW1lVHlwZSk7CisgICAgICAg
IH0pOworICAgIH07CisgICAgLyoqCisgICAgICogR2VuZXJhdGVzIGFuIGltYWdlIHNjcmVlbnNo
b3QgZnJvbSB0aGUgc3BlY2lmaWVkIGNhbWVyYS4KKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vcmVuZGVyX3NjZW5lX29uX2FfcG5nCisgICAgICogQHBhcmFtIGVu
Z2luZSBUaGUgZW5naW5lIHRvIHVzZSBmb3IgcmVuZGVyaW5nCisgICAgICogQHBhcmFtIGNhbWVy
YSBUaGUgY2FtZXJhIHRvIHVzZSBmb3IgcmVuZGVyaW5nCisgICAgICogQHBhcmFtIHNpemUgVGhp
cyBwYXJhbWV0ZXIgY2FuIGJlIHNldCB0byBhIHNpbmdsZSBudW1iZXIgb3IgdG8gYW4gb2JqZWN0
IHdpdGggdGhlCisgICAgICogZm9sbG93aW5nIChvcHRpb25hbCkgcHJvcGVydGllczogcHJlY2lz
aW9uLCB3aWR0aCwgaGVpZ2h0LiBJZiBhIHNpbmdsZSBudW1iZXIgaXMgcGFzc2VkLAorICAgICAq
IGl0IHdpbGwgYmUgdXNlZCBmb3IgYm90aCB3aWR0aCBhbmQgaGVpZ2h0LiBJZiBhbiBvYmplY3Qg
aXMgcGFzc2VkLCB0aGUgc2NyZWVuc2hvdCBzaXplCisgICAgICogd2lsbCBiZSBkZXJpdmVkIGZy
b20gdGhlIHBhcmFtZXRlcnMuIFRoZSBwcmVjaXNpb24gcHJvcGVydHkgaXMgYSBtdWx0aXBsaWVy
IGFsbG93aW5nCisgICAgICogcmVuZGVyaW5nIGF0IGEgaGlnaGVyIG9yIGxvd2VyIHJlc29sdXRp
b24KKyAgICAgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIFRoZSBjYWxsYmFjayByZWNlaXZlcyBh
IHNpbmdsZSBwYXJhbWV0ZXIgd2hpY2ggY29udGFpbnMgdGhlCisgICAgICogc2NyZWVuc2hvdCBh
cyBhIHN0cmluZyBvZiBiYXNlNjQtZW5jb2RlZCBjaGFyYWN0ZXJzLiBUaGlzIHN0cmluZyBjYW4g
YmUgYXNzaWduZWQgdG8gdGhlCisgICAgICogc3JjIHBhcmFtZXRlciBvZiBhbiA8aW1nPiB0byBk
aXNwbGF5IGl0CisgICAgICogQHBhcmFtIG1pbWVUeXBlIFRoZSBNSU1FIHR5cGUgb2YgdGhlIHNj
cmVlbnNob3QgaW1hZ2UgKGRlZmF1bHQ6IGltYWdlL3BuZykuCisgICAgICogQ2hlY2sgeW91ciBi
cm93c2VyIGZvciBzdXBwb3J0ZWQgTUlNRSB0eXBlcworICAgICAqIEBwYXJhbSBzYW1wbGVzIFRl
eHR1cmUgc2FtcGxlcyAoZGVmYXVsdDogMSkKKyAgICAgKiBAcGFyYW0gYW50aWFsaWFzaW5nIFdo
ZXRoZXIgYW50aWFsaWFzaW5nIHNob3VsZCBiZSB0dXJuZWQgb24gb3Igbm90IChkZWZhdWx0OiBm
YWxzZSkKKyAgICAgKiBAcGFyYW0gZmlsZU5hbWUgQSBuYW1lIGZvciBmb3IgdGhlIGRvd25sb2Fk
ZWQgZmlsZS4KKyAgICAgKi8KKyAgICBTY3JlZW5zaG90VG9vbHMuQ3JlYXRlU2NyZWVuc2hvdFVz
aW5nUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKGVuZ2luZSwgY2FtZXJhLCBzaXplLCBzdWNjZXNz
Q2FsbGJhY2ssIG1pbWVUeXBlLCBzYW1wbGVzLCBhbnRpYWxpYXNpbmcsIGZpbGVOYW1lKSB7Cisg
ICAgICAgIGlmIChtaW1lVHlwZSA9PT0gdm9pZCAwKSB7IG1pbWVUeXBlID0gImltYWdlL3BuZyI7
IH0KKyAgICAgICAgaWYgKHNhbXBsZXMgPT09IHZvaWQgMCkgeyBzYW1wbGVzID0gMTsgfQorICAg
ICAgICBpZiAoYW50aWFsaWFzaW5nID09PSB2b2lkIDApIHsgYW50aWFsaWFzaW5nID0gZmFsc2U7
IH0KKyAgICAgICAgdmFyIF9hID0gU2NyZWVuc2hvdFRvb2xzLl9nZXRTY3JlZW5zaG90U2l6ZShl
bmdpbmUsIGNhbWVyYSwgc2l6ZSksIGhlaWdodCA9IF9hLmhlaWdodCwgd2lkdGggPSBfYS53aWR0
aDsKKyAgICAgICAgdmFyIHRhcmdldFRleHR1cmVTaXplID0geyB3aWR0aDogd2lkdGgsIGhlaWdo
dDogaGVpZ2h0IH07CisgICAgICAgIGlmICghKGhlaWdodCAmJiB3aWR0aCkpIHsKKyAgICAgICAg
ICAgIF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTG9nZ2VyIl0uRXJyb3Io
IkludmFsaWQgJ3NpemUnIHBhcmFtZXRlciAhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIHNjZW5lID0gY2FtZXJhLmdldFNjZW5lKCk7CisgICAgICAgIHZh
ciBwcmV2aW91c0NhbWVyYSA9IG51bGw7CisgICAgICAgIGlmIChzY2VuZS5hY3RpdmVDYW1lcmEg
IT09IGNhbWVyYSkgeworICAgICAgICAgICAgcHJldmlvdXNDYW1lcmEgPSBzY2VuZS5hY3RpdmVD
YW1lcmE7CisgICAgICAgICAgICBzY2VuZS5hY3RpdmVDYW1lcmEgPSBjYW1lcmE7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIHJlbmRlckNhbnZhcyA9IGVuZ2luZS5nZXRSZW5kZXJpbmdDYW52YXMo
KTsKKyAgICAgICAgaWYgKCFyZW5kZXJDYW52YXMpIHsKKyAgICAgICAgICAgIF9sb2dnZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTG9nZ2VyIl0uRXJyb3IoIk5vIHJlbmRlcmluZyBj
YW52YXMgZm91bmQgISIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHZhciBvcmlnaW5hbFNpemUgPSB7IHdpZHRoOiByZW5kZXJDYW52YXMud2lkdGgsIGhlaWdodDog
cmVuZGVyQ2FudmFzLmhlaWdodCB9OworICAgICAgICBlbmdpbmUuc2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgc2NlbmUucmVuZGVyKCk7CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQg
c2l6ZSBjYW4gYmUgYSBudW1iZXIsIG9yIGFuIG9iamVjdCAoYWNjb3JkaW5nIHRvIGVuZ2luZS5w
cm90b3R5cGUuY3JlYXRlUmVuZGVyVGFyZ2V0VGV4dHVyZSBtZXRob2QpCisgICAgICAgIHZhciB0
ZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJSZW5kZXJUYXJnZXRUZXh0dXJlIl0oInNjcmVlblNo
b3QiLCB0YXJnZXRUZXh0dXJlU2l6ZSwgc2NlbmUsIGZhbHNlLCBmYWxzZSwgX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVU
WVBFX1VOU0lHTkVEX0lOVCwgZmFsc2UsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUZXh0dXJlIl0uTkVBUkVTVF9TQU1QTElOR01PREUp
OworICAgICAgICB0ZXh0dXJlLnJlbmRlckxpc3QgPSBudWxsOworICAgICAgICB0ZXh0dXJlLnNh
bXBsZXMgPSBzYW1wbGVzOworICAgICAgICBpZiAoYW50aWFsaWFzaW5nKSB7CisgICAgICAgICAg
ICB0ZXh0dXJlLmFkZFBvc3RQcm9jZXNzKG5ldyBfUG9zdFByb2Nlc3Nlc19meGFhUG9zdFByb2Nl
c3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRnhhYVBvc3RQcm9jZXNzIl0oJ2FudGlh
bGlhc2luZycsIDEuMCwgc2NlbmUuYWN0aXZlQ2FtZXJhKSk7CisgICAgICAgIH0KKyAgICAgICAg
dGV4dHVyZS5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRvb2xzIl0uRHVtcEZy
YW1lYnVmZmVyKHdpZHRoLCBoZWlnaHQsIGVuZ2luZSwgc3VjY2Vzc0NhbGxiYWNrLCBtaW1lVHlw
ZSwgZmlsZU5hbWUpOworICAgICAgICB9KTsKKyAgICAgICAgc2NlbmUuaW5jcmVtZW50UmVuZGVy
SWQoKTsKKyAgICAgICAgc2NlbmUucmVzZXRDYWNoZWRNYXRlcmlhbCgpOworICAgICAgICB0ZXh0
dXJlLnJlbmRlcih0cnVlKTsKKyAgICAgICAgdGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgIGlm
IChwcmV2aW91c0NhbWVyYSkgeworICAgICAgICAgICAgc2NlbmUuYWN0aXZlQ2FtZXJhID0gcHJl
dmlvdXNDYW1lcmE7CisgICAgICAgIH0KKyAgICAgICAgZW5naW5lLnNldFNpemUob3JpZ2luYWxT
aXplLndpZHRoLCBvcmlnaW5hbFNpemUuaGVpZ2h0KTsKKyAgICAgICAgY2FtZXJhLmdldFByb2pl
Y3Rpb25NYXRyaXgodHJ1ZSk7IC8vIEZvcmNlIGNhY2hlIHJlZnJlc2g7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZW5lcmF0ZXMgYW4gaW1hZ2Ugc2NyZWVuc2hvdCBmcm9tIHRoZSBzcGVjaWZp
ZWQgY2FtZXJhLgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9y
ZW5kZXJfc2NlbmVfb25fYV9wbmcKKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgdG8g
dXNlIGZvciByZW5kZXJpbmcKKyAgICAgKiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gdXNl
IGZvciByZW5kZXJpbmcKKyAgICAgKiBAcGFyYW0gc2l6ZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUg
c2V0IHRvIGEgc2luZ2xlIG51bWJlciBvciB0byBhbiBvYmplY3Qgd2l0aCB0aGUKKyAgICAgKiBm
b2xsb3dpbmcgKG9wdGlvbmFsKSBwcm9wZXJ0aWVzOiBwcmVjaXNpb24sIHdpZHRoLCBoZWlnaHQu
IElmIGEgc2luZ2xlIG51bWJlciBpcyBwYXNzZWQsCisgICAgICogaXQgd2lsbCBiZSB1c2VkIGZv
ciBib3RoIHdpZHRoIGFuZCBoZWlnaHQuIElmIGFuIG9iamVjdCBpcyBwYXNzZWQsIHRoZSBzY3Jl
ZW5zaG90IHNpemUKKyAgICAgKiB3aWxsIGJlIGRlcml2ZWQgZnJvbSB0aGUgcGFyYW1ldGVycy4g
VGhlIHByZWNpc2lvbiBwcm9wZXJ0eSBpcyBhIG11bHRpcGxpZXIgYWxsb3dpbmcKKyAgICAgKiBy
ZW5kZXJpbmcgYXQgYSBoaWdoZXIgb3IgbG93ZXIgcmVzb2x1dGlvbgorICAgICAqIEBwYXJhbSBt
aW1lVHlwZSBUaGUgTUlNRSB0eXBlIG9mIHRoZSBzY3JlZW5zaG90IGltYWdlIChkZWZhdWx0OiBp
bWFnZS9wbmcpLgorICAgICAqIENoZWNrIHlvdXIgYnJvd3NlciBmb3Igc3VwcG9ydGVkIE1JTUUg
dHlwZXMKKyAgICAgKiBAcGFyYW0gc2FtcGxlcyBUZXh0dXJlIHNhbXBsZXMgKGRlZmF1bHQ6IDEp
CisgICAgICogQHBhcmFtIGFudGlhbGlhc2luZyBXaGV0aGVyIGFudGlhbGlhc2luZyBzaG91bGQg
YmUgdHVybmVkIG9uIG9yIG5vdCAoZGVmYXVsdDogZmFsc2UpCisgICAgICogQHBhcmFtIGZpbGVO
YW1lIEEgbmFtZSBmb3IgZm9yIHRoZSBkb3dubG9hZGVkIGZpbGUuCisgICAgICogQHJldHVybnMg
c2NyZWVuc2hvdCBhcyBhIHN0cmluZyBvZiBiYXNlNjQtZW5jb2RlZCBjaGFyYWN0ZXJzLiBUaGlz
IHN0cmluZyBjYW4gYmUgYXNzaWduZWQKKyAgICAgKiB0byB0aGUgc3JjIHBhcmFtZXRlciBvZiBh
biA8aW1nPiB0byBkaXNwbGF5IGl0CisgICAgICovCisgICAgU2NyZWVuc2hvdFRvb2xzLkNyZWF0
ZVNjcmVlbnNob3RVc2luZ1JlbmRlclRhcmdldEFzeW5jID0gZnVuY3Rpb24gKGVuZ2luZSwgY2Ft
ZXJhLCBzaXplLCBtaW1lVHlwZSwgc2FtcGxlcywgYW50aWFsaWFzaW5nLCBmaWxlTmFtZSkgewor
ICAgICAgICBpZiAobWltZVR5cGUgPT09IHZvaWQgMCkgeyBtaW1lVHlwZSA9ICJpbWFnZS9wbmci
OyB9CisgICAgICAgIGlmIChzYW1wbGVzID09PSB2b2lkIDApIHsgc2FtcGxlcyA9IDE7IH0KKyAg
ICAgICAgaWYgKGFudGlhbGlhc2luZyA9PT0gdm9pZCAwKSB7IGFudGlhbGlhc2luZyA9IGZhbHNl
OyB9CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0
KSB7CisgICAgICAgICAgICBTY3JlZW5zaG90VG9vbHMuQ3JlYXRlU2NyZWVuc2hvdFVzaW5nUmVu
ZGVyVGFyZ2V0KGVuZ2luZSwgY2FtZXJhLCBzaXplLCBmdW5jdGlvbiAoZGF0YSkgeworICAgICAg
ICAgICAgICAgIGlmICh0eXBlb2YgKGRhdGEpICE9PSAidW5kZWZpbmVkIikgeworICAgICAgICAg
ICAgICAgICAgICByZXNvbHZlKGRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcigiRGF0YSBp
cyB1bmRlZmluZWQiKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgbWltZVR5
cGUsIHNhbXBsZXMsIGFudGlhbGlhc2luZywgZmlsZU5hbWUpOworICAgICAgICB9KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgaGVpZ2h0IGFuZCB3aWR0aCBmb3Igc2NyZWVuc2hvdCBz
aXplCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBTY3JlZW5zaG90VG9vbHMuX2dldFNj
cmVlbnNob3RTaXplID0gZnVuY3Rpb24gKGVuZ2luZSwgY2FtZXJhLCBzaXplKSB7CisgICAgICAg
IHZhciBoZWlnaHQgPSAwOworICAgICAgICB2YXIgd2lkdGggPSAwOworICAgICAgICAvL0lmIGEg
c2l6ZSB2YWx1ZSBkZWZpbmVkIGFzIG9iamVjdAorICAgICAgICBpZiAodHlwZW9mIChzaXplKSA9
PT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgIHZhciBwcmVjaXNpb24gPSBzaXplLnByZWNpc2lv
bgorICAgICAgICAgICAgICAgID8gTWF0aC5hYnMoc2l6ZS5wcmVjaXNpb24pIC8vIHByZXZlbnQg
R0xfSU5WQUxJRF9WQUxVRSA6IGdsVmlld3BvcnQ6IG5lZ2F0aXZlIHdpZHRoL2hlaWdodAorICAg
ICAgICAgICAgICAgIDogMTsKKyAgICAgICAgICAgIC8vSWYgYSB3aWR0aCBhbmQgaGVpZ2h0IHZh
bHVlcyBpcyBzcGVjaWZpZWQKKyAgICAgICAgICAgIGlmIChzaXplLndpZHRoICYmIHNpemUuaGVp
Z2h0KSB7CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQgKiBwcmVjaXNpb247
CisgICAgICAgICAgICAgICAgd2lkdGggPSBzaXplLndpZHRoICogcHJlY2lzaW9uOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy9JZiBwYXNzaW5nIG9ubHkgd2lkdGgsIGNvbXB1dGluZyBo
ZWlnaHQgdG8ga2VlcCBkaXNwbGF5IGNhbnZhcyByYXRpby4KKyAgICAgICAgICAgIGVsc2UgaWYg
KHNpemUud2lkdGggJiYgIXNpemUuaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgd2lkdGggPSBz
aXplLndpZHRoICogcHJlY2lzaW9uOworICAgICAgICAgICAgICAgIGhlaWdodCA9IE1hdGgucm91
bmQod2lkdGggLyBlbmdpbmUuZ2V0QXNwZWN0UmF0aW8oY2FtZXJhKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAvL0lmIHBhc3Npbmcgb25seSBoZWlnaHQsIGNvbXB1dGluZyB3aWR0aCB0
byBrZWVwIGRpc3BsYXkgY2FudmFzIHJhdGlvLgorICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZS5o
ZWlnaHQgJiYgIXNpemUud2lkdGgpIHsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBzaXplLmhl
aWdodCAqIHByZWNpc2lvbjsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IE1hdGgucm91bmQoaGVp
Z2h0ICogZW5naW5lLmdldEFzcGVjdFJhdGlvKGNhbWVyYSkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKGVuZ2lu
ZS5nZXRSZW5kZXJXaWR0aCgpICogcHJlY2lzaW9uKTsKKyAgICAgICAgICAgICAgICBoZWlnaHQg
PSBNYXRoLnJvdW5kKHdpZHRoIC8gZW5naW5lLmdldEFzcGVjdFJhdGlvKGNhbWVyYSkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vQXNzdW1pbmcgaGVyZSB0aGF0ICJzaXpl
IiBwYXJhbWV0ZXIgaXMgYSBudW1iZXIKKyAgICAgICAgZWxzZSBpZiAoIWlzTmFOKHNpemUpKSB7
CisgICAgICAgICAgICBoZWlnaHQgPSBzaXplOworICAgICAgICAgICAgd2lkdGggPSBzaXplOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB7IGhlaWdodDogaGVpZ2h0LCB3aWR0aDogd2lkdGgg
fTsKKyAgICB9OworICAgIHJldHVybiBTY3JlZW5zaG90VG9vbHM7Cit9KCkpOworCitfdG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVG9vbHMiXS5DcmVhdGVTY3JlZW5zaG90ID0g
U2NyZWVuc2hvdFRvb2xzLkNyZWF0ZVNjcmVlbnNob3Q7CitfdG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1siVG9vbHMiXS5DcmVhdGVTY3JlZW5zaG90QXN5bmMgPSBTY3JlZW5zaG90
VG9vbHMuQ3JlYXRlU2NyZWVuc2hvdEFzeW5jOworX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlRvb2xzIl0uQ3JlYXRlU2NyZWVuc2hvdFVzaW5nUmVuZGVyVGFyZ2V0ID0gU2Ny
ZWVuc2hvdFRvb2xzLkNyZWF0ZVNjcmVlbnNob3RVc2luZ1JlbmRlclRhcmdldDsKK190b29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb29scyJdLkNyZWF0ZVNjcmVlbnNob3RVc2lu
Z1JlbmRlclRhcmdldEFzeW5jID0gU2NyZWVuc2hvdFRvb2xzLkNyZWF0ZVNjcmVlbnNob3RVc2lu
Z1JlbmRlclRhcmdldEFzeW5jOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NaXNjL3NtYXJ0
QXJyYXkudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
TWlzYy9zbWFydEFycmF5LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogU21hcnRBcnJheSwgU21hcnRBcnJheU5vRHVwbGljYXRl
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNtYXJ0QXJyYXkiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFNtYXJ0QXJyYXk7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU21hcnRB
cnJheU5vRHVwbGljYXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTbWFydEFycmF5Tm9EdXBsaWNh
dGU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworCisvKioKKyAqIERlZmluZXMgYW4gR0MgRnJp
ZW5kbHkgYXJyYXkgd2hlcmUgdGhlIGJhY2tmaWVsZCBhcnJheSBkbyBub3Qgc2hyaW5rIHRvIHBy
ZXZlbnQgb3ZlciBhbGxvY2F0aW9ucy4KKyAqLwordmFyIFNtYXJ0QXJyYXkgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgU21hcnQg
QXJyYXkuCisgICAgICogQHBhcmFtIGNhcGFjaXR5IGRlZmluZXMgdGhlIGRlZmF1bHQgY2FwYWNp
dHkgb2YgdGhlIGFycmF5LgorICAgICAqLworICAgIGZ1bmN0aW9uIFNtYXJ0QXJyYXkoY2FwYWNp
dHkpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBhY3RpdmUgbGVuZ3RoIG9mIHRoZSBh
cnJheS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubGVuZ3RoID0gMDsKKyAgICAgICAgdGhp
cy5kYXRhID0gbmV3IEFycmF5KGNhcGFjaXR5KTsKKyAgICAgICAgdGhpcy5faWQgPSBTbWFydEFy
cmF5Ll9HbG9iYWxJZCsrOworICAgIH0KKyAgICAvKioKKyAgICAgKiBQdXNoZXMgYSB2YWx1ZSBh
dCB0aGUgZW5kIG9mIHRoZSBhY3RpdmUgZGF0YS4KKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5l
cyB0aGUgb2JqZWN0IHRvIHB1c2ggaW4gdGhlIGFycmF5LgorICAgICAqLworICAgIFNtYXJ0QXJy
YXkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgdGhpcy5kYXRh
W3RoaXMubGVuZ3RoKytdID0gdmFsdWU7CisgICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IHRoaXMu
ZGF0YS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuZGF0YS5sZW5ndGggKj0gMjsKKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogSXRlcmF0ZXMgb3ZlciB0aGUgYWN0aXZlIGRh
dGEgYW5kIGFwcGx5IHRoZSBsYW1iZGEgdG8gdGhlbS4KKyAgICAgKiBAcGFyYW0gZnVuYyBkZWZp
bmVzIHRoZSBhY3Rpb24gdG8gYXBwbHkgb24gZWFjaCB2YWx1ZS4KKyAgICAgKi8KKyAgICBTbWFy
dEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGZ1bmMpIHsKKyAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICBmdW5jKHRoaXMuZGF0YVtpbmRleF0pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTb3J0cyB0aGUgZnVsbCBzZXRzIG9mIGRhdGEuCisgICAgICogQHBhcmFtIGNvbXBh
cmVGbiBkZWZpbmVzIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIGFwcGx5LgorICAgICAqLwor
ICAgIFNtYXJ0QXJyYXkucHJvdG90eXBlLnNvcnQgPSBmdW5jdGlvbiAoY29tcGFyZUZuKSB7Cisg
ICAgICAgIHRoaXMuZGF0YS5zb3J0KGNvbXBhcmVGbik7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZXNldHMgdGhlIGFjdGl2ZSBkYXRhIHRvIGFuIGVtcHR5IGFycmF5LgorICAgICAqLworICAg
IFNtYXJ0QXJyYXkucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlz
Lmxlbmd0aCA9IDA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlcyBhbGwgdGhlIGRh
dGEgZnJvbSB0aGUgYXJyYXkgYXMgd2VsbCBhcyB0aGUgYXJyYXkuCisgICAgICovCisgICAgU21h
cnRBcnJheS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5y
ZXNldCgpOworICAgICAgICBpZiAodGhpcy5kYXRhKSB7CisgICAgICAgICAgICB0aGlzLmRhdGEu
bGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBDb25jYXRzIHRoZSBhY3RpdmUgZGF0YSB3aXRoIGEgZ2l2ZW4g
YXJyYXkuCisgICAgICogQHBhcmFtIGFycmF5IGRlZmluZXMgdGhlIGRhdGEgdG8gY29uY2F0ZW5h
dGUgd2l0aC4KKyAgICAgKi8KKyAgICBTbWFydEFycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5j
dGlvbiAoYXJyYXkpIHsKKyAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmxlbmd0aCArIGFycmF5
Lmxlbmd0aCA+IHRoaXMuZGF0YS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuZGF0YS5sZW5n
dGggPSAodGhpcy5sZW5ndGggKyBhcnJheS5sZW5ndGgpICogMjsKKyAgICAgICAgfQorICAgICAg
ICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7Cisg
ICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5sZW5ndGgrK10gPSAoYXJyYXkuZGF0YSB8fCBhcnJh
eSlbaW5kZXhdOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRo
ZSBwb3NpdGlvbiBvZiBhIHZhbHVlIGluIHRoZSBhY3RpdmUgZGF0YS4KKyAgICAgKiBAcGFyYW0g
dmFsdWUgZGVmaW5lcyB0aGUgdmFsdWUgdG8gZmluZCB0aGUgaW5kZXggZm9yCisgICAgICogQHJl
dHVybnMgdGhlIGluZGV4IGlmIGZvdW5kIGluIHRoZSBhY3RpdmUgZGF0YSBvdGhlcndpc2UgLTEK
KyAgICAgKi8KKyAgICBTbWFydEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuZGF0YS5pbmRleE9mKHZhbHVlKTsK
KyAgICAgICAgaWYgKHBvc2l0aW9uID49IHRoaXMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgIH07CisgICAg
LyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIGFuIGVsZW1lbnQgaXMgcGFydCBvZiB0aGUgYWN0
aXZlIGRhdGEuCisgICAgICogQHBhcmFtIHZhbHVlIGRlZmluZXMgdGhlIHZhbHVlIHRvIGxvb2sg
Zm9yCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBmb3VuZCBpbiB0aGUgYWN0aXZlIGRhdGEgb3Ro
ZXJ3aXNlIGZhbHNlCisgICAgICovCisgICAgU21hcnRBcnJheS5wcm90b3R5cGUuY29udGFpbnMg
PSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWx1ZSkg
IT09IC0xOworICAgIH07CisgICAgLy8gU3RhdGljcworICAgIFNtYXJ0QXJyYXkuX0dsb2JhbElk
ID0gMDsKKyAgICByZXR1cm4gU21hcnRBcnJheTsKK30oKSk7CisKKy8qKgorICogRGVmaW5lcyBh
biBHQyBGcmllbmRseSBhcnJheSB3aGVyZSB0aGUgYmFja2ZpZWxkIGFycmF5IGRvIG5vdCBzaHJp
bmsgdG8gcHJldmVudCBvdmVyIGFsbG9jYXRpb25zLgorICogVGhlIGRhdGEgaW4gdGhpcyBhcnJh
eSBjYW4gb25seSBiZSBwcmVzZW50IG9uY2UKKyAqLwordmFyIFNtYXJ0QXJyYXlOb0R1cGxpY2F0
ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShTbWFydEFycmF5Tm9EdXBsaWNhdGUs
IF9zdXBlcik7CisgICAgZnVuY3Rpb24gU21hcnRBcnJheU5vRHVwbGljYXRlKCkgeworICAgICAg
ICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cykgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuX2R1cGxpY2F0ZUlkID0gMDsKKyAgICAgICAg
cmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBQdXNoZXMgYSB2YWx1ZSBhdCB0
aGUgZW5kIG9mIHRoZSBhY3RpdmUgZGF0YS4KKyAgICAgKiBUSElTIERPRVMgTk9UIFBSRVZFTlQg
RFVQUExJQ0FURSBEQVRBCisgICAgICogQHBhcmFtIHZhbHVlIGRlZmluZXMgdGhlIG9iamVjdCB0
byBwdXNoIGluIHRoZSBhcnJheS4KKyAgICAgKi8KKyAgICBTbWFydEFycmF5Tm9EdXBsaWNhdGUu
cHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgX3N1cGVyLnByb3Rv
dHlwZS5wdXNoLmNhbGwodGhpcywgdmFsdWUpOworICAgICAgICBpZiAoIXZhbHVlLl9fc21hcnRB
cnJheUZsYWdzKSB7CisgICAgICAgICAgICB2YWx1ZS5fX3NtYXJ0QXJyYXlGbGFncyA9IHt9Owor
ICAgICAgICB9CisgICAgICAgIHZhbHVlLl9fc21hcnRBcnJheUZsYWdzW3RoaXMuX2lkXSA9IHRo
aXMuX2R1cGxpY2F0ZUlkOworICAgIH07CisgICAgLyoqCisgICAgICogUHVzaGVzIGEgdmFsdWUg
YXQgdGhlIGVuZCBvZiB0aGUgYWN0aXZlIGRhdGEuCisgICAgICogSWYgdGhlIGRhdGEgaXMgYWxy
ZWFkeSBwcmVzZW50LCBpdCB3b24gdCBiZSBhZGRlZCBhZ2FpbgorICAgICAqIEBwYXJhbSB2YWx1
ZSBkZWZpbmVzIHRoZSBvYmplY3QgdG8gcHVzaCBpbiB0aGUgYXJyYXkuCisgICAgICogQHJldHVy
bnMgdHJ1ZSBpZiBhZGRlZCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBwcmVzZW50CisgICAgICov
CisgICAgU21hcnRBcnJheU5vRHVwbGljYXRlLnByb3RvdHlwZS5wdXNoTm9EdXBsaWNhdGUgPSBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgaWYgKHZhbHVlLl9fc21hcnRBcnJheUZsYWdzICYm
IHZhbHVlLl9fc21hcnRBcnJheUZsYWdzW3RoaXMuX2lkXSA9PT0gdGhpcy5fZHVwbGljYXRlSWQp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnB1
c2godmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJlc2V0cyB0aGUgYWN0aXZlIGRhdGEgdG8gYW4gZW1wdHkgYXJyYXkuCisgICAgICovCisgICAg
U21hcnRBcnJheU5vRHVwbGljYXRlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgX3N1cGVyLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl9k
dXBsaWNhdGVJZCsrOworICAgIH07CisgICAgLyoqCisgICAgICogQ29uY2F0cyB0aGUgYWN0aXZl
IGRhdGEgd2l0aCBhIGdpdmVuIGFycmF5LgorICAgICAqIFRoaXMgZW5zdXJlcyBubyBkdXBwbGlj
YXRlIHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgcmVzdWx0LgorICAgICAqIEBwYXJhbSBhcnJheSBk
ZWZpbmVzIHRoZSBkYXRhIHRvIGNvbmNhdGVuYXRlIHdpdGguCisgICAgICovCisgICAgU21hcnRB
cnJheU5vRHVwbGljYXRlLnByb3RvdHlwZS5jb25jYXRXaXRoTm9EdXBsaWNhdGUgPSBmdW5jdGlv
biAoYXJyYXkpIHsKKyAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmxlbmd0aCArIGFycmF5Lmxl
bmd0aCA+IHRoaXMuZGF0YS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuZGF0YS5sZW5ndGgg
PSAodGhpcy5sZW5ndGggKyBhcnJheS5sZW5ndGgpICogMjsKKyAgICAgICAgfQorICAgICAgICBm
b3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7CisgICAg
ICAgICAgICB2YXIgaXRlbSA9IChhcnJheS5kYXRhIHx8IGFycmF5KVtpbmRleF07CisgICAgICAg
ICAgICB0aGlzLnB1c2hOb0R1cGxpY2F0ZShpdGVtKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
cmV0dXJuIFNtYXJ0QXJyYXlOb0R1cGxpY2F0ZTsKK30oU21hcnRBcnJheSkpOworCisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL01pc2Mvc3RyaW5nRGljdGlvbmFyeS50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL3N0cmluZ0RpY3Rp
b25hcnkudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBTdHJpbmdEaWN0aW9uYXJ5ICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlN0cmluZ0RpY3Rpb25hcnkiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFN0cmluZ0RpY3Rpb25hcnk7IH0pOworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudCBhIHR5
cGljYWwgZGljdGlvbmFyeSB1c2luZyBhIHN0cmluZyBhcyBrZXkgYW5kIHRoZSBnZW5lcmljIHR5
cGUgVCBhcyB2YWx1ZS4KKyAqIFRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIHJlbGllcyBv
biBhbiBhc3NvY2lhdGl2ZSBhcnJheSB0byBlbnN1cmUgdGhlIGJlc3QgcGVyZm9ybWFuY2VzLgor
ICogVGhlIHZhbHVlIGNhbiBiZSBhbnl0aGluZyBpbmNsdWRpbmcgJ251bGwnIGJ1dCBleGNlcHQg
J3VuZGVmaW5lZCcKKyAqLwordmFyIFN0cmluZ0RpY3Rpb25hcnkgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gU3RyaW5nRGljdGlvbmFyeSgpIHsKKyAgICAgICAg
dGhpcy5fY291bnQgPSAwOworICAgICAgICB0aGlzLl9kYXRhID0ge307CisgICAgfQorICAgIC8q
KgorICAgICAqIFRoaXMgd2lsbCBjbGVhciB0aGlzIGRpY3Rpb25hcnkgYW5kIGNvcHkgdGhlIGNv
bnRlbnQgZnJvbSB0aGUgJ3NvdXJjZScgb25lLgorICAgICAqIElmIHRoZSBUIHZhbHVlIGlzIGEg
Y3VzdG9tIG9iamVjdCwgaXQgd29uJ3QgYmUgY29waWVkL2Nsb25lZCwgdGhlIHNhbWUgb2JqZWN0
IHdpbGwgYmUgdXNlZAorICAgICAqIEBwYXJhbSBzb3VyY2UgdGhlIGRpY3Rpb25hcnkgdG8gdGFr
ZSB0aGUgY29udGVudCBmcm9tIGFuZCBjb3B5IHRvIHRoaXMgZGljdGlvbmFyeQorICAgICAqLwor
ICAgIFN0cmluZ0RpY3Rpb25hcnkucHJvdG90eXBlLmNvcHlGcm9tID0gZnVuY3Rpb24gKHNvdXJj
ZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLmNsZWFyKCk7Cisg
ICAgICAgIHNvdXJjZS5mb3JFYWNoKGZ1bmN0aW9uICh0LCB2KSB7IHJldHVybiBfdGhpcy5hZGQo
dCwgdik7IH0pOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGEgdmFsdWUgYmFzZWQgZnJv
bSBpdHMga2V5CisgICAgICogQHBhcmFtIGtleSB0aGUgZ2l2ZW4ga2V5IHRvIGdldCB0aGUgbWF0
Y2hpbmcgdmFsdWUgZnJvbQorICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIGlmIGZvdW5kLCBvdGhl
cndpc2UgdW5kZWZpbmVkIGlzIHJldHVybmVkCisgICAgICovCisgICAgU3RyaW5nRGljdGlvbmFy
eS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgICB2YXIgdmFsID0gdGhp
cy5fZGF0YVtrZXldOworICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgIHJldHVybiB2YWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldCBhIHZhbHVlIGZyb20gaXRzIGtleSBvciBhZGQgaXQg
aWYgaXQgZG9lc24ndCBleGlzdC4KKyAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGVuc3VyZSB5b3Ug
dGhhdCBhIGdpdmVuIGtleS9kYXRhIHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgZGljdGlvbmFyeS4K
KyAgICAgKiBAcGFyYW0ga2V5IHRoZSBnaXZlbiBrZXkgdG8gZ2V0IHRoZSBtYXRjaGluZyB2YWx1
ZSBmcm9tCisgICAgICogQHBhcmFtIGZhY3RvcnkgdGhlIGZhY3RvcnkgdGhhdCB3aWxsIGNyZWF0
ZSB0aGUgdmFsdWUgaWYgdGhlIGtleSBpcyBub3QgcHJlc2VudCBpbiB0aGUgZGljdGlvbmFyeS4K
KyAgICAgKiBUaGUgZmFjdG9yeSB3aWxsIG9ubHkgYmUgaW52b2tlZCBpZiB0aGVyZSdzIG5vIGRh
dGEgZm9yIHRoZSBnaXZlbiBrZXkuCisgICAgICogQHJldHVybiB0aGUgdmFsdWUgY29ycmVzcG9u
ZGluZyB0byB0aGUga2V5LgorICAgICAqLworICAgIFN0cmluZ0RpY3Rpb25hcnkucHJvdG90eXBl
LmdldE9yQWRkV2l0aEZhY3RvcnkgPSBmdW5jdGlvbiAoa2V5LCBmYWN0b3J5KSB7CisgICAgICAg
IHZhciB2YWwgPSB0aGlzLmdldChrZXkpOworICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgIHJldHVybiB2YWw7CisgICAgICAgIH0KKyAgICAgICAgdmFsID0gZmFj
dG9yeShrZXkpOworICAgICAgICBpZiAodmFsKSB7CisgICAgICAgICAgICB0aGlzLmFkZChrZXks
IHZhbCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEdldCBhIHZhbHVlIGZyb20gaXRzIGtleSBpZiBwcmVzZW50IGluIHRoZSBkaWN0aW9u
YXJ5IG90aGVyd2lzZSBhZGQgaXQKKyAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgdG8gZ2V0IHRo
ZSB2YWx1ZSBmcm9tCisgICAgICogQHBhcmFtIHZhbCBpZiB0aGVyZSdzIG5vIHN1Y2gga2V5L3Zh
bHVlIHBhaXIgaW4gdGhlIGRpY3Rpb25hcnkgYWRkIGl0IHdpdGggdGhpcyB2YWx1ZQorICAgICAq
IEByZXR1cm4gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtleQorICAgICAqLworICAg
IFN0cmluZ0RpY3Rpb25hcnkucHJvdG90eXBlLmdldE9yQWRkID0gZnVuY3Rpb24gKGtleSwgdmFs
KSB7CisgICAgICAgIHZhciBjdXJWYWwgPSB0aGlzLmdldChrZXkpOworICAgICAgICBpZiAoY3Vy
VmFsICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJWYWw7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5hZGQoa2V5LCB2YWwpOworICAgICAgICByZXR1cm4gdmFsOworICAg
IH07CisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgdGhlcmUncyBhIGdpdmVuIGtleSBpbiB0aGUg
ZGljdGlvbmFyeQorICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byBjaGVjayBmb3IKKyAgICAg
KiBAcmV0dXJuIHRydWUgaWYgdGhlIGtleSBpcyBwcmVzZW50LCBmYWxzZSBvdGhlcndpc2UKKyAg
ICAgKi8KKyAgICBTdHJpbmdEaWN0aW9uYXJ5LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9u
IChrZXkpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFba2V5XSAhPT0gdW5kZWZpbmVkOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGEgbmV3IGtleSBhbmQgaXRzIGNvcnJlc3BvbmRp
bmcgdmFsdWUKKyAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgdG8gYWRkCisgICAgICogQHBhcmFt
IHZhbHVlIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBrZXkKKyAgICAgKiBAcmV0dXJu
IHRydWUgaWYgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBpZiB3
ZSBjb3VsZG4ndCBpbnNlcnQgdGhlIGtleS92YWx1ZSBiZWNhdXNlIHRoZXJlIHdhcyBhbHJlYWR5
IHRoaXMga2V5IGluIHRoZSBkaWN0aW9uYXJ5CisgICAgICovCisgICAgU3RyaW5nRGljdGlvbmFy
eS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAgICAgICAgaWYgKHRo
aXMuX2RhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGF0YVtrZXldID0gdmFsdWU7CisgICAgICAgICsr
dGhpcy5fY291bnQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoqCisgICAg
ICogVXBkYXRlIGEgc3BlY2lmaWMgdmFsdWUgYXNzb2NpYXRlZCB0byBhIGtleQorICAgICAqIEBw
YXJhbSBrZXkgZGVmaW5lcyB0aGUga2V5IHRvIHVzZQorICAgICAqIEBwYXJhbSB2YWx1ZSBkZWZp
bmVzIHRoZSB2YWx1ZSB0byBzdG9yZQorICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVl
IHdhcyB1cGRhdGVkIChvciBmYWxzZSBpZiB0aGUga2V5IHdhcyBub3QgZm91bmQpCisgICAgICov
CisgICAgU3RyaW5nRGljdGlvbmFyeS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFs
dWUpIHsKKyAgICAgICAgaWYgKHRoaXMuX2RhdGFba2V5XSA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGF0YVtrZXld
ID0gdmFsdWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0IHRoZSBlbGVtZW50IG9mIHRoZSBnaXZlbiBrZXkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBk
aWN0aW9uYXJ5CisgICAgICogQHBhcmFtIGtleSBkZWZpbmVzIHRoZSBrZXkgdG8gc2VhcmNoCisg
ICAgICogQHJldHVybnMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5IG9yIG51bGwg
aWYgbm90IGZvdW5kCisgICAgICovCisgICAgU3RyaW5nRGljdGlvbmFyeS5wcm90b3R5cGUuZ2V0
QW5kUmVtb3ZlID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXQo
a2V5KTsKKyAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBkZWxl
dGUgdGhpcy5fZGF0YVtrZXldOworICAgICAgICAgICAgLS10aGlzLl9jb3VudDsKKyAgICAgICAg
ICAgIHJldHVybiB2YWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBrZXkvdmFsdWUgZnJvbSB0aGUgZGljdGlvbmFyeS4K
KyAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgdG8gcmVtb3ZlCisgICAgICogQHJldHVybiB0cnVl
IGlmIHRoZSBpdGVtIHdhcyBzdWNjZXNzZnVsbHkgZGVsZXRlZCwgZmFsc2UgaWYgbm8gaXRlbSB3
aXRoIHN1Y2gga2V5IGV4aXN0IGluIHRoZSBkaWN0aW9uYXJ5CisgICAgICovCisgICAgU3RyaW5n
RGljdGlvbmFyeS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgICBp
ZiAodGhpcy5jb250YWlucyhrZXkpKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fZGF0YVtr
ZXldOworICAgICAgICAgICAgLS10aGlzLl9jb3VudDsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENsZWFyIHRoZSB3aG9sZSBjb250ZW50IG9mIHRoZSBkaWN0aW9uYXJ5CisgICAgICovCisg
ICAgU3RyaW5nRGljdGlvbmFyeS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX2RhdGEgPSB7fTsKKyAgICAgICAgdGhpcy5fY291bnQgPSAwOworICAgIH07Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0cmluZ0RpY3Rpb25hcnkucHJvdG90eXBlLCAiY291
bnQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNvdW50Cisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9jb3VudDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogRXhlY3V0
ZSBhIGNhbGxiYWNrIG9uIGVhY2gga2V5L3ZhbCBvZiB0aGUgZGljdGlvbmFyeS4KKyAgICAgKiBO
b3RlIHRoYXQgeW91IGNhbiByZW1vdmUgYW55IGVsZW1lbnQgaW4gdGhpcyBkaWN0aW9uYXJ5IGlu
IHRoZSBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICAgICAqIEBwYXJhbSBjYWxsYmFjayB0aGUg
Y2FsbGJhY2sgdG8gZXhlY3V0ZSBvbiBhIGdpdmVuIGtleS92YWx1ZSBwYWlyCisgICAgICovCisg
ICAgU3RyaW5nRGljdGlvbmFyeS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFj
aykgeworICAgICAgICBmb3IgKHZhciBjdXIgaW4gdGhpcy5fZGF0YSkgeworICAgICAgICAgICAg
dmFyIHZhbCA9IHRoaXMuX2RhdGFbY3VyXTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGN1ciwgdmFs
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRXhlY3V0ZSBhIGNhbGxiYWNr
IG9uIGV2ZXJ5IG9jY3VycmVuY2Ugb2YgdGhlIGRpY3Rpb25hcnkgdW50aWwgaXQgcmV0dXJucyBh
IHZhbGlkIFRSZXMgb2JqZWN0LgorICAgICAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIG51bGwg
b3IgdW5kZWZpbmVkIHRoZSBtZXRob2Qgd2lsbCBpdGVyYXRlIHRvIHRoZSBuZXh0IGtleS92YWx1
ZSBwYWlyCisgICAgICogTm90ZSB0aGF0IHlvdSBjYW4gcmVtb3ZlIGFueSBlbGVtZW50IGluIHRo
aXMgZGljdGlvbmFyeSBpbiB0aGUgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAgICAgKiBAcGFy
YW0gY2FsbGJhY2sgdGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUsIGlmIGl0IHJldHVybiBhIHZhbGlk
IFQgaW5zdGFuY2VkIG9iamVjdCB0aGUgZW51bWVyYXRpb24gd2lsbCBzdG9wIGFuZCB0aGUgb2Jq
ZWN0IHdpbGwgYmUgcmV0dXJuZWQKKyAgICAgKiBAcmV0dXJucyB0aGUgZmlyc3QgaXRlbQorICAg
ICAqLworICAgIFN0cmluZ0RpY3Rpb25hcnkucHJvdG90eXBlLmZpcnN0ID0gZnVuY3Rpb24gKGNh
bGxiYWNrKSB7CisgICAgICAgIGZvciAodmFyIGN1ciBpbiB0aGlzLl9kYXRhKSB7CisgICAgICAg
ICAgICB2YXIgdmFsID0gdGhpcy5fZGF0YVtjdXJdOworICAgICAgICAgICAgdmFyIHJlcyA9IGNh
bGxiYWNrKGN1ciwgdmFsKTsKKyAgICAgICAgICAgIGlmIChyZXMpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dWxsOworICAgIH07CisgICAgcmV0dXJuIFN0cmluZ0RpY3Rpb25hcnk7Cit9KCkpOworCisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL01pc2Mvc3RyaW5nVG9vbHMudHMiOgorLyohKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2Mvc3RyaW5nVG9vbHMudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogU3RyaW5nVG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3Ry
aW5nVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN0cmluZ1Rvb2xzOyB9KTsKKy8qKgorICog
SGVscGVyIHRvIG1hbmlwdWxhdGUgc3RyaW5ncworICovCit2YXIgU3RyaW5nVG9vbHMgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gU3RyaW5nVG9vbHMoKSB7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIENoZWNrcyBmb3IgYSBtYXRjaGluZyBzdWZmaXggYXQgdGhl
IGVuZCBvZiBhIHN0cmluZyAoZm9yIEVTNSBhbmQgbG93ZXIpCisgICAgICogQHBhcmFtIHN0ciBT
b3VyY2Ugc3RyaW5nCisgICAgICogQHBhcmFtIHN1ZmZpeCBTdWZmaXggdG8gc2VhcmNoIGZvciBp
biB0aGUgc291cmNlIHN0cmluZworICAgICAqIEByZXR1cm5zIEJvb2xlYW4gaW5kaWNhdGluZyB3
aGV0aGVyIHRoZSBzdWZmaXggd2FzIGZvdW5kICh0cnVlKSBvciBub3QgKGZhbHNlKQorICAgICAq
LworICAgIFN0cmluZ1Rvb2xzLkVuZHNXaXRoID0gZnVuY3Rpb24gKHN0ciwgc3VmZml4KSB7Cisg
ICAgICAgIHJldHVybiBzdHIuaW5kZXhPZihzdWZmaXgsIHN0ci5sZW5ndGggLSBzdWZmaXgubGVu
Z3RoKSAhPT0gLTE7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDaGVja3MgZm9yIGEgbWF0Y2hp
bmcgc3VmZml4IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcgKGZvciBFUzUgYW5kIGxvd2Vy
KQorICAgICAqIEBwYXJhbSBzdHIgU291cmNlIHN0cmluZworICAgICAqIEBwYXJhbSBzdWZmaXgg
U3VmZml4IHRvIHNlYXJjaCBmb3IgaW4gdGhlIHNvdXJjZSBzdHJpbmcKKyAgICAgKiBAcmV0dXJu
cyBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgc3VmZml4IHdhcyBmb3VuZCAodHJ1ZSkg
b3Igbm90IChmYWxzZSkKKyAgICAgKi8KKyAgICBTdHJpbmdUb29scy5TdGFydHNXaXRoID0gZnVu
Y3Rpb24gKHN0ciwgc3VmZml4KSB7CisgICAgICAgIHJldHVybiBzdHIuaW5kZXhPZihzdWZmaXgp
ID09PSAwOworICAgIH07CisgICAgcmV0dXJuIFN0cmluZ1Rvb2xzOworfSgpKTsKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9NaXNjL3RhZ3MudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vTWlzYy90YWdzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogVGFncyAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJUYWdzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUYWdzOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW5kT3JOb3RFdmFsdWF0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYW5kT3JOb3RFdmFsdWF0
b3IgKi8gIi4vTWlzYy9hbmRPck5vdEV2YWx1YXRvci50cyIpOworCisvKioKKyAqIENsYXNzIHVz
ZWQgdG8gc3RvcmUgY3VzdG9tIHRhZ3MKKyAqLwordmFyIFRhZ3MgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gVGFncygpIHsKKyAgICB9CisgICAgLyoqCisgICAg
ICogQWRkcyBzdXBwb3J0IGZvciB0YWdzIG9uIHRoZSBnaXZlbiBvYmplY3QKKyAgICAgKiBAcGFy
YW0gb2JqIGRlZmluZXMgdGhlIG9iamVjdCB0byB1c2UKKyAgICAgKi8KKyAgICBUYWdzLkVuYWJs
ZUZvciA9IGZ1bmN0aW9uIChvYmopIHsKKyAgICAgICAgb2JqLl90YWdzID0gb2JqLl90YWdzIHx8
IHt9OworICAgICAgICBvYmouaGFzVGFncyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiBUYWdzLkhhc1RhZ3Mob2JqKTsKKyAgICAgICAgfTsKKyAgICAgICAgb2JqLmFkZFRhZ3Mg
PSBmdW5jdGlvbiAodGFnc1N0cmluZykgeworICAgICAgICAgICAgcmV0dXJuIFRhZ3MuQWRkVGFn
c1RvKG9iaiwgdGFnc1N0cmluZyk7CisgICAgICAgIH07CisgICAgICAgIG9iai5yZW1vdmVUYWdz
ID0gZnVuY3Rpb24gKHRhZ3NTdHJpbmcpIHsKKyAgICAgICAgICAgIHJldHVybiBUYWdzLlJlbW92
ZVRhZ3NGcm9tKG9iaiwgdGFnc1N0cmluZyk7CisgICAgICAgIH07CisgICAgICAgIG9iai5tYXRj
aGVzVGFnc1F1ZXJ5ID0gZnVuY3Rpb24gKHRhZ3NRdWVyeSkgeworICAgICAgICAgICAgcmV0dXJu
IFRhZ3MuTWF0Y2hlc1F1ZXJ5KG9iaiwgdGFnc1F1ZXJ5KTsKKyAgICAgICAgfTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGFncyBzdXBwb3J0CisgICAgICogQHBhcmFtIG9iaiBk
ZWZpbmVzIHRoZSBvYmplY3QgdG8gdXNlCisgICAgICovCisgICAgVGFncy5EaXNhYmxlRm9yID0g
ZnVuY3Rpb24gKG9iaikgeworICAgICAgICBkZWxldGUgb2JqLl90YWdzOworICAgICAgICBkZWxl
dGUgb2JqLmhhc1RhZ3M7CisgICAgICAgIGRlbGV0ZSBvYmouYWRkVGFnczsKKyAgICAgICAgZGVs
ZXRlIG9iai5yZW1vdmVUYWdzOworICAgICAgICBkZWxldGUgb2JqLm1hdGNoZXNUYWdzUXVlcnk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRo
ZSBnaXZlbiBvYmplY3QgaGFzIHRhZ3MKKyAgICAgKiBAcGFyYW0gb2JqIGRlZmluZXMgdGhlIG9i
amVjdCB0byB1c2UKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4KKyAgICAgKi8KKyAgICBUYWdz
Lkhhc1RhZ3MgPSBmdW5jdGlvbiAob2JqKSB7CisgICAgICAgIGlmICghb2JqLl90YWdzKSB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRhZ3MgPSBv
YmouX3RhZ3M7CisgICAgICAgIGZvciAodmFyIGkgaW4gdGFncykgeworICAgICAgICAgICAgaWYg
KHRhZ3MuaGFzT3duUHJvcGVydHkoaSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0YWdzIGF2YWlsYWJsZSBvbiBhIGdpdmVuIG9iamVj
dAorICAgICAqIEBwYXJhbSBvYmogZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHVzZQorICAgICAqIEBw
YXJhbSBhc1N0cmluZyBkZWZpbmVzIGlmIHRoZSB0YWdzIG11c3QgYmUgcmV0dXJuZWQgYXMgYSBz
dHJpbmcgaW5zdGVhZCBvZiBhbiBhcnJheSBvZiBzdHJpbmdzCisgICAgICogQHJldHVybnMgdGhl
IHRhZ3MKKyAgICAgKi8KKyAgICBUYWdzLkdldFRhZ3MgPSBmdW5jdGlvbiAob2JqLCBhc1N0cmlu
ZykgeworICAgICAgICBpZiAoYXNTdHJpbmcgPT09IHZvaWQgMCkgeyBhc1N0cmluZyA9IHRydWU7
IH0KKyAgICAgICAgaWYgKCFvYmouX3RhZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIGlmIChhc1N0cmluZykgeworICAgICAgICAgICAgdmFyIHRhZ3NB
cnJheSA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgdGFnIGluIG9iai5fdGFncykgeworICAg
ICAgICAgICAgICAgIGlmIChvYmouX3RhZ3MuaGFzT3duUHJvcGVydHkodGFnKSAmJiBvYmouX3Rh
Z3NbdGFnXSA9PT0gdHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICB0YWdzQXJyYXkucHVzaCh0
YWcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0YWdzQXJyYXkuam9pbigiICIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgcmV0dXJuIG9iai5fdGFnczsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogQWRkcyB0YWdzIHRvIGFuIG9iamVjdAorICAgICAqIEBwYXJhbSBvYmogZGVmaW5lcyB0aGUg
b2JqZWN0IHRvIHVzZQorICAgICAqIEBwYXJhbSB0YWdzU3RyaW5nIGRlZmluZXMgdGhlIHRhZyBz
dHJpbmcuIFRoZSB0YWdzICd0cnVlJyBhbmQgJ2ZhbHNlJyBhcmUgcmVzZXJ2ZWQgYW5kIGNhbm5v
dCBiZSB1c2VkIGFzIHRhZ3MuCisgICAgICogQSB0YWcgY2Fubm90IHN0YXJ0IHdpdGggJ3x8Jywg
JyYmJywgYW5kICchJy4gSXQgY2Fubm90IGNvbnRhaW4gd2hpdGVzcGFjZXMKKyAgICAgKi8KKyAg
ICBUYWdzLkFkZFRhZ3NUbyA9IGZ1bmN0aW9uIChvYmosIHRhZ3NTdHJpbmcpIHsKKyAgICAgICAg
aWYgKCF0YWdzU3RyaW5nKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHR5cGVvZiB0YWdzU3RyaW5nICE9PSAic3RyaW5nIikgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHZhciB0YWdzID0gdGFnc1N0cmluZy5zcGxpdCgiICIp
OworICAgICAgICB0YWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZywgaW5kZXgsIGFycmF5KSB7Cisg
ICAgICAgICAgICBUYWdzLl9BZGRUYWdUbyhvYmosIHRhZyk7CisgICAgICAgIH0pOworICAgIH07
CisgICAgLyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIFRhZ3MuX0FkZFRhZ1RvID0g
ZnVuY3Rpb24gKG9iaiwgdGFnKSB7CisgICAgICAgIHRhZyA9IHRhZy50cmltKCk7CisgICAgICAg
IGlmICh0YWcgPT09ICIiIHx8IHRhZyA9PT0gInRydWUiIHx8IHRhZyA9PT0gImZhbHNlIikgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0YWcubWF0Y2goL1tc
c10vKSB8fCB0YWcubWF0Y2goL14oWyFdfChbfF18WyZdKXsyfSkvKSkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIFRhZ3MuRW5hYmxlRm9yKG9iaik7CisgICAgICAg
IG9iai5fdGFnc1t0YWddID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMg
c3BlY2lmaWMgdGFncyBmcm9tIGEgc3BlY2lmaWMgb2JqZWN0CisgICAgICogQHBhcmFtIG9iaiBk
ZWZpbmVzIHRoZSBvYmplY3QgdG8gdXNlCisgICAgICogQHBhcmFtIHRhZ3NTdHJpbmcgZGVmaW5l
cyB0aGUgdGFncyB0byByZW1vdmUKKyAgICAgKi8KKyAgICBUYWdzLlJlbW92ZVRhZ3NGcm9tID0g
ZnVuY3Rpb24gKG9iaiwgdGFnc1N0cmluZykgeworICAgICAgICBpZiAoIVRhZ3MuSGFzVGFncyhv
YmopKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRhZ3Mg
PSB0YWdzU3RyaW5nLnNwbGl0KCIgIik7CisgICAgICAgIGZvciAodmFyIHQgaW4gdGFncykgewor
ICAgICAgICAgICAgVGFncy5fUmVtb3ZlVGFnRnJvbShvYmosIHRhZ3NbdF0pOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgVGFncy5fUmVt
b3ZlVGFnRnJvbSA9IGZ1bmN0aW9uIChvYmosIHRhZykgeworICAgICAgICBkZWxldGUgb2JqLl90
YWdzW3RhZ107CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIGlmIHRhZ3MgaG9zdGVk
IG9uIGFuIG9iamVjdCBtYXRjaCBhIGdpdmVuIHF1ZXJ5CisgICAgICogQHBhcmFtIG9iaiBkZWZp
bmVzIHRoZSBvYmplY3QgdG8gdXNlCisgICAgICogQHBhcmFtIHRhZ3NRdWVyeSBkZWZpbmVzIHRo
ZSB0YWcgcXVlcnkKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4KKyAgICAgKi8KKyAgICBUYWdz
Lk1hdGNoZXNRdWVyeSA9IGZ1bmN0aW9uIChvYmosIHRhZ3NRdWVyeSkgeworICAgICAgICBpZiAo
dGFnc1F1ZXJ5ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGlmICh0YWdzUXVlcnkgPT09ICIiKSB7CisgICAgICAgICAgICByZXR1
cm4gVGFncy5IYXNUYWdzKG9iaik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF9hbmRPck5v
dEV2YWx1YXRvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBbmRPck5vdEV2YWx1YXRv
ciJdLkV2YWwodGFnc1F1ZXJ5LCBmdW5jdGlvbiAocikgeyByZXR1cm4gVGFncy5IYXNUYWdzKG9i
aikgJiYgb2JqLl90YWdzW3JdOyB9KTsKKyAgICB9OworICAgIHJldHVybiBUYWdzOworfSgpKTsK
KworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NaXNjL3RleHR1cmVUb29scy50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvdGV4dHVyZVRv
b2xzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBUZXh0dXJlVG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVGV4dHVyZVRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUZXh0dXJlVG9vbHM7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3Rl
eHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVz
X3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0
dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJlLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfcGFzc1Bvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9Q
b3N0UHJvY2Vzc2VzL3Bhc3NQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bhc3NQb3N0
UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKworCisK
KworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGhvc3QgdGV4dHVyZSBzcGVjaWZpYyB1dGlsaXRpZXMK
KyAqLwordmFyIFRleHR1cmVUb29scyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICBmdW5jdGlvbiBUZXh0dXJlVG9vbHMoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIFVzZXMg
dGhlIEdQVSB0byBjcmVhdGUgYSBjb3B5IHRleHR1cmUgcmVzY2FsZWQgYXQgYSBnaXZlbiBzaXpl
CisgICAgICogQHBhcmFtIHRleHR1cmUgVGV4dHVyZSB0byBjb3B5IGZyb20KKyAgICAgKiBAcGFy
YW0gd2lkdGggZGVmaW5lcyB0aGUgZGVzaXJlZCB3aWR0aAorICAgICAqIEBwYXJhbSBoZWlnaHQg
ZGVmaW5lcyB0aGUgZGVzaXJlZCBoZWlnaHQKKyAgICAgKiBAcGFyYW0gdXNlQmlsaW5lYXJNb2Rl
IGRlZmluZXMgaWYgYmlsaW5lYXIgbW9kZSBoYXMgdG8gYmUgdXNlZAorICAgICAqIEByZXR1cm4g
dGhlIGdlbmVyYXRlZCB0ZXh0dXJlCisgICAgICovCisgICAgVGV4dHVyZVRvb2xzLkNyZWF0ZVJl
c2l6ZWRDb3B5ID0gZnVuY3Rpb24gKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQsIHVzZUJpbGluZWFy
TW9kZSkgeworICAgICAgICBpZiAodXNlQmlsaW5lYXJNb2RlID09PSB2b2lkIDApIHsgdXNlQmls
aW5lYXJNb2RlID0gdHJ1ZTsgfQorICAgICAgICB2YXIgc2NlbmUgPSB0ZXh0dXJlLmdldFNjZW5l
KCk7CisgICAgICAgIHZhciBlbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgdmFy
IHJ0dCA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdKCdyZXNpemVkJyAr
IHRleHR1cmUubmFtZSwgeyB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0IH0sIHNjZW5lLCAh
dGV4dHVyZS5ub01pcG1hcCwgdHJ1ZSwgdGV4dHVyZS5fdGV4dHVyZS50eXBlLCBmYWxzZSwgdGV4
dHVyZS5zYW1wbGluZ01vZGUsIGZhbHNlKTsKKyAgICAgICAgcnR0LndyYXBVID0gdGV4dHVyZS53
cmFwVTsKKyAgICAgICAgcnR0LndyYXBWID0gdGV4dHVyZS53cmFwVjsKKyAgICAgICAgcnR0LnVP
ZmZzZXQgPSB0ZXh0dXJlLnVPZmZzZXQ7CisgICAgICAgIHJ0dC52T2Zmc2V0ID0gdGV4dHVyZS52
T2Zmc2V0OworICAgICAgICBydHQudVNjYWxlID0gdGV4dHVyZS51U2NhbGU7CisgICAgICAgIHJ0
dC52U2NhbGUgPSB0ZXh0dXJlLnZTY2FsZTsKKyAgICAgICAgcnR0LnVBbmcgPSB0ZXh0dXJlLnVB
bmc7CisgICAgICAgIHJ0dC52QW5nID0gdGV4dHVyZS52QW5nOworICAgICAgICBydHQud0FuZyA9
IHRleHR1cmUud0FuZzsKKyAgICAgICAgcnR0LmNvb3JkaW5hdGVzSW5kZXggPSB0ZXh0dXJlLmNv
b3JkaW5hdGVzSW5kZXg7CisgICAgICAgIHJ0dC5sZXZlbCA9IHRleHR1cmUubGV2ZWw7CisgICAg
ICAgIHJ0dC5hbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsID0gdGV4dHVyZS5hbmlzb3Ryb3BpY0Zp
bHRlcmluZ0xldmVsOworICAgICAgICBydHQuX3RleHR1cmUuaXNSZWFkeSA9IGZhbHNlOworICAg
ICAgICB0ZXh0dXJlLndyYXBVID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAg
ICAgdGV4dHVyZS53cmFwViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAg
IHZhciBwYXNzUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcGFzc1Bvc3RQcm9jZXNz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBhc3NQb3N0UHJvY2VzcyJdKCJwYXNzIiwg
MSwgbnVsbCwgdXNlQmlsaW5lYXJNb2RlID8gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01P
REUgOiBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVGV4dHVyZSJdLk5FQVJFU1RfU0FNUExJTkdNT0RFLCBlbmdpbmUsIGZhbHNlLCBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAgICAgcGFzc1Bvc3RQcm9jZXNzLmdldEVm
ZmVjdCgpLmV4ZWN1dGVXaGVuQ29tcGlsZWQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcGFz
c1Bvc3RQcm9jZXNzLm9uQXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICAg
ICAgZWZmZWN0LnNldFRleHR1cmUoInRleHR1cmVTYW1wbGVyIiwgdGV4dHVyZSk7CisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgdmFyIGludGVybmFsVGV4dHVyZSA9IHJ0dC5nZXRJbnRlcm5h
bFRleHR1cmUoKTsKKyAgICAgICAgICAgIGlmIChpbnRlcm5hbFRleHR1cmUpIHsKKyAgICAgICAg
ICAgICAgICBzY2VuZS5wb3N0UHJvY2Vzc01hbmFnZXIuZGlyZWN0UmVuZGVyKFtwYXNzUG9zdFBy
b2Nlc3NdLCBpbnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgICAgIGVuZ2luZS51bkJpbmRG
cmFtZWJ1ZmZlcihpbnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgICAgIHJ0dC5kaXNwb3Nl
RnJhbWVidWZmZXJPYmplY3RzKCk7CisgICAgICAgICAgICAgICAgcGFzc1Bvc3RQcm9jZXNzLmRp
c3Bvc2UoKTsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbFRleHR1cmUuaXNSZWFkeSA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcnR0OworICAgIH07
CisgICAgcmV0dXJuIFRleHR1cmVUb29sczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vTWlzYy90Z2EudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9NaXNjL3RnYS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogVEdBVG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiVEdBVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRHQVRvb2xzOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9n
Z2VyLnRzIik7CisKKy8qKgorICogQmFzZWQgb24ganNUR0FMb2FkZXIgLSBKYXZhc2NyaXB0IGxv
YWRlciBmb3IgVEdBIGZpbGUKKyAqIEJ5IFZpbmNlbnQgVGhpYmF1bHQKKyAqIEBzZWUgaHR0cDov
L2Jsb2cucm9icm93c2VyLmNvbS9qYXZhc2NyaXB0LXRnYS1sb2FkZXIuaHRtbAorICovCit2YXIg
VEdBVG9vbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gVEdB
VG9vbHMoKSB7CisgICAgfQorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGhlYWRlciBvZiBhIFRH
QSBmaWxlCisgICAgICogQHBhcmFtIGRhdGEgZGVmaW5lcyB0aGUgVEdBIGRhdGEKKyAgICAgKiBA
cmV0dXJucyB0aGUgaGVhZGVyCisgICAgICovCisgICAgVEdBVG9vbHMuR2V0VEdBSGVhZGVyID0g
ZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdmFyIG9mZnNldCA9IDA7CisgICAgICAgIHZhciBo
ZWFkZXIgPSB7CisgICAgICAgICAgICBpZF9sZW5ndGg6IGRhdGFbb2Zmc2V0KytdLAorICAgICAg
ICAgICAgY29sb3JtYXBfdHlwZTogZGF0YVtvZmZzZXQrK10sCisgICAgICAgICAgICBpbWFnZV90
eXBlOiBkYXRhW29mZnNldCsrXSwKKyAgICAgICAgICAgIGNvbG9ybWFwX2luZGV4OiBkYXRhW29m
ZnNldCsrXSB8IGRhdGFbb2Zmc2V0KytdIDw8IDgsCisgICAgICAgICAgICBjb2xvcm1hcF9sZW5n
dGg6IGRhdGFbb2Zmc2V0KytdIHwgZGF0YVtvZmZzZXQrK10gPDwgOCwKKyAgICAgICAgICAgIGNv
bG9ybWFwX3NpemU6IGRhdGFbb2Zmc2V0KytdLAorICAgICAgICAgICAgb3JpZ2luOiBbCisgICAg
ICAgICAgICAgICAgZGF0YVtvZmZzZXQrK10gfCBkYXRhW29mZnNldCsrXSA8PCA4LAorICAgICAg
ICAgICAgICAgIGRhdGFbb2Zmc2V0KytdIHwgZGF0YVtvZmZzZXQrK10gPDwgOAorICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgIHdpZHRoOiBkYXRhW29mZnNldCsrXSB8IGRhdGFbb2Zmc2V0Kytd
IDw8IDgsCisgICAgICAgICAgICBoZWlnaHQ6IGRhdGFbb2Zmc2V0KytdIHwgZGF0YVtvZmZzZXQr
K10gPDwgOCwKKyAgICAgICAgICAgIHBpeGVsX3NpemU6IGRhdGFbb2Zmc2V0KytdLAorICAgICAg
ICAgICAgZmxhZ3M6IGRhdGFbb2Zmc2V0KytdCisgICAgICAgIH07CisgICAgICAgIHJldHVybiBo
ZWFkZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGxvYWRzIFRHQSBjb250ZW50IHRvIGEg
QmFieWxvbiBUZXh0dXJlCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIFRHQVRvb2xzLlVw
bG9hZENvbnRlbnQgPSBmdW5jdGlvbiAodGV4dHVyZSwgZGF0YSkgeworICAgICAgICAvLyBOb3Qg
ZW5vdWdoIGRhdGEgdG8gY29udGFpbiBoZWFkZXIgPworICAgICAgICBpZiAoZGF0YS5sZW5ndGgg
PCAxOSkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkxvZ2dlciJdLkVycm9yKCJVbmFibGUgdG8gbG9hZCBUR0EgZmlsZSAtIE5vdCBlbm91
Z2ggZGF0YSB0byBjb250YWluIGhlYWRlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIC8vIFJlYWQgSGVhZGVyCisgICAgICAgIHZhciBvZmZzZXQgPSAxODsKKyAg
ICAgICAgdmFyIGhlYWRlciA9IFRHQVRvb2xzLkdldFRHQUhlYWRlcihkYXRhKTsKKyAgICAgICAg
Ly8gQXNzdW1lIGl0J3MgYSB2YWxpZCBUYXJnYSBmaWxlLgorICAgICAgICBpZiAoaGVhZGVyLmlk
X2xlbmd0aCArIG9mZnNldCA+IGRhdGEubGVuZ3RoKSB7CisgICAgICAgICAgICBfTWlzY19sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTG9nZ2VyIl0uRXJyb3IoIlVuYWJsZSB0
byBsb2FkIFRHQSBmaWxlIC0gTm90IGVub3VnaCBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgLy8gU2tpcCBub3QgbmVlZGVkIGRhdGEKKyAgICAgICAgb2Zm
c2V0ICs9IGhlYWRlci5pZF9sZW5ndGg7CisgICAgICAgIHZhciB1c2VfcmxlID0gZmFsc2U7Cisg
ICAgICAgIHZhciB1c2VfcGFsID0gZmFsc2U7CisgICAgICAgIHZhciB1c2VfZ3JleSA9IGZhbHNl
OworICAgICAgICAvLyBHZXQgc29tZSBpbmZvcm1hdGlvbnMuCisgICAgICAgIHN3aXRjaCAoaGVh
ZGVyLmltYWdlX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVEdBVG9vbHMuX1RZUEVfUkxFX0lO
REVYRUQ6CisgICAgICAgICAgICAgICAgdXNlX3JsZSA9IHRydWU7CisgICAgICAgICAgICBjYXNl
IFRHQVRvb2xzLl9UWVBFX0lOREVYRUQ6CisgICAgICAgICAgICAgICAgdXNlX3BhbCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRHQVRvb2xzLl9UWVBF
X1JMRV9SR0I6CisgICAgICAgICAgICAgICAgdXNlX3JsZSA9IHRydWU7CisgICAgICAgICAgICBj
YXNlIFRHQVRvb2xzLl9UWVBFX1JHQjoKKyAgICAgICAgICAgICAgICAvLyB1c2VfcmdiID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVEdBVG9vbHMuX1RZ
UEVfUkxFX0dSRVk6CisgICAgICAgICAgICAgICAgdXNlX3JsZSA9IHRydWU7CisgICAgICAgICAg
ICBjYXNlIFRHQVRvb2xzLl9UWVBFX0dSRVk6CisgICAgICAgICAgICAgICAgdXNlX2dyZXkgPSB0
cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHZhciBwaXhl
bF9kYXRhOworICAgICAgICAvLyB2YXIgbnVtQWxwaGFCaXRzID0gaGVhZGVyLmZsYWdzICYgMHhm
OworICAgICAgICB2YXIgcGl4ZWxfc2l6ZSA9IGhlYWRlci5waXhlbF9zaXplID4+IDM7CisgICAg
ICAgIHZhciBwaXhlbF90b3RhbCA9IGhlYWRlci53aWR0aCAqIGhlYWRlci5oZWlnaHQgKiBwaXhl
bF9zaXplOworICAgICAgICAvLyBSZWFkIHBhbGV0dGVzCisgICAgICAgIHZhciBwYWxldHRlczsK
KyAgICAgICAgaWYgKHVzZV9wYWwpIHsKKyAgICAgICAgICAgIHBhbGV0dGVzID0gZGF0YS5zdWJh
cnJheShvZmZzZXQsIG9mZnNldCArPSBoZWFkZXIuY29sb3JtYXBfbGVuZ3RoICogKGhlYWRlci5j
b2xvcm1hcF9zaXplID4+IDMpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZWFkIExSRQorICAg
ICAgICBpZiAodXNlX3JsZSkgeworICAgICAgICAgICAgcGl4ZWxfZGF0YSA9IG5ldyBVaW50OEFy
cmF5KHBpeGVsX3RvdGFsKTsKKyAgICAgICAgICAgIHZhciBjLCBjb3VudCwgaTsKKyAgICAgICAg
ICAgIHZhciBsb2NhbE9mZnNldCA9IDA7CisgICAgICAgICAgICB2YXIgcGl4ZWxzID0gbmV3IFVp
bnQ4QXJyYXkocGl4ZWxfc2l6ZSk7CisgICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgcGl4ZWxf
dG90YWwgJiYgbG9jYWxPZmZzZXQgPCBwaXhlbF90b3RhbCkgeworICAgICAgICAgICAgICAgIGMg
PSBkYXRhW29mZnNldCsrXTsKKyAgICAgICAgICAgICAgICBjb3VudCA9IChjICYgMHg3ZikgKyAx
OworICAgICAgICAgICAgICAgIC8vIFJMRSBwaXhlbHMKKyAgICAgICAgICAgICAgICBpZiAoYyAm
IDB4ODApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQmluZCBwaXhlbCB0bXAgYXJyYXkKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpeGVsX3NpemU7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzW2ldID0gZGF0YVtvZmZzZXQrK107CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gQ29weSBwaXhlbCBhcnJheQor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxfZGF0YS5zZXQocGl4ZWxzLCBsb2NhbE9mZnNldCArIGkg
KiBwaXhlbF9zaXplKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBsb2NhbE9mZnNldCArPSBwaXhlbF9zaXplICogY291bnQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIC8vIFJhdyBwaXhlbHMKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgY291bnQgKj0gcGl4ZWxfc2l6ZTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBpeGVsX2RhdGFbbG9jYWxPZmZzZXQgKyBpXSA9IGRhdGFbb2Zmc2V0KytdOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxvY2FsT2Zmc2V0ICs9IGNvdW50Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBS
QVcgUGl4ZWxzCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGl4ZWxfZGF0YSA9IGRhdGEu
c3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKz0gKHVzZV9wYWwgPyBoZWFkZXIud2lkdGggKiBoZWFk
ZXIuaGVpZ2h0IDogcGl4ZWxfdG90YWwpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBMb2FkIHRv
IHRleHR1cmUKKyAgICAgICAgdmFyIHhfc3RhcnQsIHlfc3RhcnQsIHhfc3RlcCwgeV9zdGVwLCB5
X2VuZCwgeF9lbmQ7CisgICAgICAgIHN3aXRjaCAoKGhlYWRlci5mbGFncyAmIFRHQVRvb2xzLl9P
UklHSU5fTUFTSykgPj4gVEdBVG9vbHMuX09SSUdJTl9TSElGVCkgeworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGNhc2UgVEdBVG9vbHMuX09SSUdJTl9VTDoKKyAgICAgICAgICAg
ICAgICB4X3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICB4X3N0ZXAgPSAxOworICAgICAgICAg
ICAgICAgIHhfZW5kID0gaGVhZGVyLndpZHRoOworICAgICAgICAgICAgICAgIHlfc3RhcnQgPSAw
OworICAgICAgICAgICAgICAgIHlfc3RlcCA9IDE7CisgICAgICAgICAgICAgICAgeV9lbmQgPSBo
ZWFkZXIuaGVpZ2h0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBU
R0FUb29scy5fT1JJR0lOX0JMOgorICAgICAgICAgICAgICAgIHhfc3RhcnQgPSAwOworICAgICAg
ICAgICAgICAgIHhfc3RlcCA9IDE7CisgICAgICAgICAgICAgICAgeF9lbmQgPSBoZWFkZXIud2lk
dGg7CisgICAgICAgICAgICAgICAgeV9zdGFydCA9IGhlYWRlci5oZWlnaHQgLSAxOworICAgICAg
ICAgICAgICAgIHlfc3RlcCA9IC0xOworICAgICAgICAgICAgICAgIHlfZW5kID0gLTE7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRHQVRvb2xzLl9PUklHSU5fVVI6
CisgICAgICAgICAgICAgICAgeF9zdGFydCA9IGhlYWRlci53aWR0aCAtIDE7CisgICAgICAgICAg
ICAgICAgeF9zdGVwID0gLTE7CisgICAgICAgICAgICAgICAgeF9lbmQgPSAtMTsKKyAgICAgICAg
ICAgICAgICB5X3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICB5X3N0ZXAgPSAxOworICAgICAg
ICAgICAgICAgIHlfZW5kID0gaGVhZGVyLmhlaWdodDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgVEdBVG9vbHMuX09SSUdJTl9CUjoKKyAgICAgICAgICAgICAgICB4
X3N0YXJ0ID0gaGVhZGVyLndpZHRoIC0gMTsKKyAgICAgICAgICAgICAgICB4X3N0ZXAgPSAtMTsK
KyAgICAgICAgICAgICAgICB4X2VuZCA9IC0xOworICAgICAgICAgICAgICAgIHlfc3RhcnQgPSBo
ZWFkZXIuaGVpZ2h0IC0gMTsKKyAgICAgICAgICAgICAgICB5X3N0ZXAgPSAtMTsKKyAgICAgICAg
ICAgICAgICB5X2VuZCA9IC0xOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIC8vIExvYWQgdGhlIHNwZWNpZnkgbWV0aG9kCisgICAgICAgIHZhciBmdW5jID0gJ19n
ZXRJbWFnZURhdGEnICsgKHVzZV9ncmV5ID8gJ0dyZXknIDogJycpICsgKGhlYWRlci5waXhlbF9z
aXplKSArICdiaXRzJzsKKyAgICAgICAgdmFyIGltYWdlRGF0YSA9IFRHQVRvb2xzW2Z1bmNdKGhl
YWRlciwgcGFsZXR0ZXMsIHBpeGVsX2RhdGEsIHlfc3RhcnQsIHlfc3RlcCwgeV9lbmQsIHhfc3Rh
cnQsIHhfc3RlcCwgeF9lbmQpOworICAgICAgICB2YXIgZW5naW5lID0gdGV4dHVyZS5nZXRFbmdp
bmUoKTsKKyAgICAgICAgZW5naW5lLl91cGxvYWREYXRhVG9UZXh0dXJlRGlyZWN0bHkodGV4dHVy
ZSwgaW1hZ2VEYXRhKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgVEdBVG9vbHMu
X2dldEltYWdlRGF0YThiaXRzID0gZnVuY3Rpb24gKGhlYWRlciwgcGFsZXR0ZXMsIHBpeGVsX2Rh
dGEsIHlfc3RhcnQsIHlfc3RlcCwgeV9lbmQsIHhfc3RhcnQsIHhfc3RlcCwgeF9lbmQpIHsKKyAg
ICAgICAgdmFyIGltYWdlID0gcGl4ZWxfZGF0YSwgY29sb3JtYXAgPSBwYWxldHRlczsKKyAgICAg
ICAgdmFyIHdpZHRoID0gaGVhZGVyLndpZHRoLCBoZWlnaHQgPSBoZWFkZXIuaGVpZ2h0OworICAg
ICAgICB2YXIgY29sb3IsIGkgPSAwLCB4LCB5OworICAgICAgICB2YXIgaW1hZ2VEYXRhID0gbmV3
IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICAgICAgZm9yICh5ID0geV9zdGFy
dDsgeSAhPT0geV9lbmQ7IHkgKz0geV9zdGVwKSB7CisgICAgICAgICAgICBmb3IgKHggPSB4X3N0
YXJ0OyB4ICE9PSB4X2VuZDsgeCArPSB4X3N0ZXAsIGkrKykgeworICAgICAgICAgICAgICAgIGNv
bG9yID0gaW1hZ2VbaV07CisgICAgICAgICAgICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5
KSAqIDQgKyAzXSA9IDI1NTsKKyAgICAgICAgICAgICAgICBpbWFnZURhdGFbKHggKyB3aWR0aCAq
IHkpICogNCArIDJdID0gY29sb3JtYXBbKGNvbG9yICogMykgKyAwXTsKKyAgICAgICAgICAgICAg
ICBpbWFnZURhdGFbKHggKyB3aWR0aCAqIHkpICogNCArIDFdID0gY29sb3JtYXBbKGNvbG9yICog
MykgKyAxXTsKKyAgICAgICAgICAgICAgICBpbWFnZURhdGFbKHggKyB3aWR0aCAqIHkpICogNCAr
IDBdID0gY29sb3JtYXBbKGNvbG9yICogMykgKyAyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBUR0FUb29scy5fZ2V0SW1hZ2VEYXRhMTZiaXRzID0gZnVuY3Rpb24gKGhlYWRlciwgcGFs
ZXR0ZXMsIHBpeGVsX2RhdGEsIHlfc3RhcnQsIHlfc3RlcCwgeV9lbmQsIHhfc3RhcnQsIHhfc3Rl
cCwgeF9lbmQpIHsKKyAgICAgICAgdmFyIGltYWdlID0gcGl4ZWxfZGF0YTsKKyAgICAgICAgdmFy
IHdpZHRoID0gaGVhZGVyLndpZHRoLCBoZWlnaHQgPSBoZWFkZXIuaGVpZ2h0OworICAgICAgICB2
YXIgY29sb3IsIGkgPSAwLCB4LCB5OworICAgICAgICB2YXIgaW1hZ2VEYXRhID0gbmV3IFVpbnQ4
QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICAgICAgZm9yICh5ID0geV9zdGFydDsgeSAh
PT0geV9lbmQ7IHkgKz0geV9zdGVwKSB7CisgICAgICAgICAgICBmb3IgKHggPSB4X3N0YXJ0OyB4
ICE9PSB4X2VuZDsgeCArPSB4X3N0ZXAsIGkgKz0gMikgeworICAgICAgICAgICAgICAgIGNvbG9y
ID0gaW1hZ2VbaSArIDBdICsgKGltYWdlW2kgKyAxXSA8PCA4KTsgLy8gSW52ZXJzZWQgPworICAg
ICAgICAgICAgICAgIHZhciByID0gKCgoY29sb3IgJiAweDdDMDApID4+IDEwKSAqIDI1NSkgLyAw
eDFGIHwgMDsKKyAgICAgICAgICAgICAgICB2YXIgZyA9ICgoKGNvbG9yICYgMHgwM0UwKSA+PiA1
KSAqIDI1NSkgLyAweDFGIHwgMDsKKyAgICAgICAgICAgICAgICB2YXIgYiA9ICgoY29sb3IgJiAw
eDAwMUYpICogMjU1KSAvIDB4MUYgfCAwOworICAgICAgICAgICAgICAgIGltYWdlRGF0YVsoeCAr
IHdpZHRoICogeSkgKiA0ICsgMF0gPSByOworICAgICAgICAgICAgICAgIGltYWdlRGF0YVsoeCAr
IHdpZHRoICogeSkgKiA0ICsgMV0gPSBnOworICAgICAgICAgICAgICAgIGltYWdlRGF0YVsoeCAr
IHdpZHRoICogeSkgKiA0ICsgMl0gPSBiOworICAgICAgICAgICAgICAgIGltYWdlRGF0YVsoeCAr
IHdpZHRoICogeSkgKiA0ICsgM10gPSAoY29sb3IgJiAweDgwMDApID8gMCA6IDI1NTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIH07Cisg
ICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUR0FUb29scy5fZ2V0SW1hZ2VEYXRhMjRiaXRzID0gZnVu
Y3Rpb24gKGhlYWRlciwgcGFsZXR0ZXMsIHBpeGVsX2RhdGEsIHlfc3RhcnQsIHlfc3RlcCwgeV9l
bmQsIHhfc3RhcnQsIHhfc3RlcCwgeF9lbmQpIHsKKyAgICAgICAgdmFyIGltYWdlID0gcGl4ZWxf
ZGF0YTsKKyAgICAgICAgdmFyIHdpZHRoID0gaGVhZGVyLndpZHRoLCBoZWlnaHQgPSBoZWFkZXIu
aGVpZ2h0OworICAgICAgICB2YXIgaSA9IDAsIHgsIHk7CisgICAgICAgIHZhciBpbWFnZURhdGEg
PSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgICAgICBmb3IgKHkgPSB5
X3N0YXJ0OyB5ICE9PSB5X2VuZDsgeSArPSB5X3N0ZXApIHsKKyAgICAgICAgICAgIGZvciAoeCA9
IHhfc3RhcnQ7IHggIT09IHhfZW5kOyB4ICs9IHhfc3RlcCwgaSArPSAzKSB7CisgICAgICAgICAg
ICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5KSAqIDQgKyAzXSA9IDI1NTsKKyAgICAgICAg
ICAgICAgICBpbWFnZURhdGFbKHggKyB3aWR0aCAqIHkpICogNCArIDJdID0gaW1hZ2VbaSArIDBd
OworICAgICAgICAgICAgICAgIGltYWdlRGF0YVsoeCArIHdpZHRoICogeSkgKiA0ICsgMV0gPSBp
bWFnZVtpICsgMV07CisgICAgICAgICAgICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5KSAq
IDQgKyAwXSA9IGltYWdlW2kgKyAyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gaW1hZ2VEYXRhOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUR0FU
b29scy5fZ2V0SW1hZ2VEYXRhMzJiaXRzID0gZnVuY3Rpb24gKGhlYWRlciwgcGFsZXR0ZXMsIHBp
eGVsX2RhdGEsIHlfc3RhcnQsIHlfc3RlcCwgeV9lbmQsIHhfc3RhcnQsIHhfc3RlcCwgeF9lbmQp
IHsKKyAgICAgICAgdmFyIGltYWdlID0gcGl4ZWxfZGF0YTsKKyAgICAgICAgdmFyIHdpZHRoID0g
aGVhZGVyLndpZHRoLCBoZWlnaHQgPSBoZWFkZXIuaGVpZ2h0OworICAgICAgICB2YXIgaSA9IDAs
IHgsIHk7CisgICAgICAgIHZhciBpbWFnZURhdGEgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhl
aWdodCAqIDQpOworICAgICAgICBmb3IgKHkgPSB5X3N0YXJ0OyB5ICE9PSB5X2VuZDsgeSArPSB5
X3N0ZXApIHsKKyAgICAgICAgICAgIGZvciAoeCA9IHhfc3RhcnQ7IHggIT09IHhfZW5kOyB4ICs9
IHhfc3RlcCwgaSArPSA0KSB7CisgICAgICAgICAgICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGgg
KiB5KSAqIDQgKyAyXSA9IGltYWdlW2kgKyAwXTsKKyAgICAgICAgICAgICAgICBpbWFnZURhdGFb
KHggKyB3aWR0aCAqIHkpICogNCArIDFdID0gaW1hZ2VbaSArIDFdOworICAgICAgICAgICAgICAg
IGltYWdlRGF0YVsoeCArIHdpZHRoICogeSkgKiA0ICsgMF0gPSBpbWFnZVtpICsgMl07CisgICAg
ICAgICAgICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5KSAqIDQgKyAzXSA9IGltYWdlW2kg
KyAzXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRh
OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUR0FUb29scy5fZ2V0SW1hZ2VEYXRh
R3JleThiaXRzID0gZnVuY3Rpb24gKGhlYWRlciwgcGFsZXR0ZXMsIHBpeGVsX2RhdGEsIHlfc3Rh
cnQsIHlfc3RlcCwgeV9lbmQsIHhfc3RhcnQsIHhfc3RlcCwgeF9lbmQpIHsKKyAgICAgICAgdmFy
IGltYWdlID0gcGl4ZWxfZGF0YTsKKyAgICAgICAgdmFyIHdpZHRoID0gaGVhZGVyLndpZHRoLCBo
ZWlnaHQgPSBoZWFkZXIuaGVpZ2h0OworICAgICAgICB2YXIgY29sb3IsIGkgPSAwLCB4LCB5Owor
ICAgICAgICB2YXIgaW1hZ2VEYXRhID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0
KTsKKyAgICAgICAgZm9yICh5ID0geV9zdGFydDsgeSAhPT0geV9lbmQ7IHkgKz0geV9zdGVwKSB7
CisgICAgICAgICAgICBmb3IgKHggPSB4X3N0YXJ0OyB4ICE9PSB4X2VuZDsgeCArPSB4X3N0ZXAs
IGkrKykgeworICAgICAgICAgICAgICAgIGNvbG9yID0gaW1hZ2VbaV07CisgICAgICAgICAgICAg
ICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5KSAqIDQgKyAwXSA9IGNvbG9yOworICAgICAgICAg
ICAgICAgIGltYWdlRGF0YVsoeCArIHdpZHRoICogeSkgKiA0ICsgMV0gPSBjb2xvcjsKKyAgICAg
ICAgICAgICAgICBpbWFnZURhdGFbKHggKyB3aWR0aCAqIHkpICogNCArIDJdID0gY29sb3I7Cisg
ICAgICAgICAgICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5KSAqIDQgKyAzXSA9IDI1NTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAg
IH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBUR0FUb29scy5fZ2V0SW1hZ2VEYXRhR3JleTE2
Yml0cyA9IGZ1bmN0aW9uIChoZWFkZXIsIHBhbGV0dGVzLCBwaXhlbF9kYXRhLCB5X3N0YXJ0LCB5
X3N0ZXAsIHlfZW5kLCB4X3N0YXJ0LCB4X3N0ZXAsIHhfZW5kKSB7CisgICAgICAgIHZhciBpbWFn
ZSA9IHBpeGVsX2RhdGE7CisgICAgICAgIHZhciB3aWR0aCA9IGhlYWRlci53aWR0aCwgaGVpZ2h0
ID0gaGVhZGVyLmhlaWdodDsKKyAgICAgICAgdmFyIGkgPSAwLCB4LCB5OworICAgICAgICB2YXIg
aW1hZ2VEYXRhID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICAgICAg
Zm9yICh5ID0geV9zdGFydDsgeSAhPT0geV9lbmQ7IHkgKz0geV9zdGVwKSB7CisgICAgICAgICAg
ICBmb3IgKHggPSB4X3N0YXJ0OyB4ICE9PSB4X2VuZDsgeCArPSB4X3N0ZXAsIGkgKz0gMikgewor
ICAgICAgICAgICAgICAgIGltYWdlRGF0YVsoeCArIHdpZHRoICogeSkgKiA0ICsgMF0gPSBpbWFn
ZVtpICsgMF07CisgICAgICAgICAgICAgICAgaW1hZ2VEYXRhWyh4ICsgd2lkdGggKiB5KSAqIDQg
KyAxXSA9IGltYWdlW2kgKyAwXTsKKyAgICAgICAgICAgICAgICBpbWFnZURhdGFbKHggKyB3aWR0
aCAqIHkpICogNCArIDJdID0gaW1hZ2VbaSArIDBdOworICAgICAgICAgICAgICAgIGltYWdlRGF0
YVsoeCArIHdpZHRoICogeSkgKiA0ICsgM10gPSBpbWFnZVtpICsgMV07CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKKyAgICB9OworICAgIC8vcHJp
dmF0ZSBzdGF0aWMgX1RZUEVfTk9fREFUQSA9IDA7CisgICAgVEdBVG9vbHMuX1RZUEVfSU5ERVhF
RCA9IDE7CisgICAgVEdBVG9vbHMuX1RZUEVfUkdCID0gMjsKKyAgICBUR0FUb29scy5fVFlQRV9H
UkVZID0gMzsKKyAgICBUR0FUb29scy5fVFlQRV9STEVfSU5ERVhFRCA9IDk7CisgICAgVEdBVG9v
bHMuX1RZUEVfUkxFX1JHQiA9IDEwOworICAgIFRHQVRvb2xzLl9UWVBFX1JMRV9HUkVZID0gMTE7
CisgICAgVEdBVG9vbHMuX09SSUdJTl9NQVNLID0gMHgzMDsKKyAgICBUR0FUb29scy5fT1JJR0lO
X1NISUZUID0gMHgwNDsKKyAgICBUR0FUb29scy5fT1JJR0lOX0JMID0gMHgwMDsKKyAgICBUR0FU
b29scy5fT1JJR0lOX0JSID0gMHgwMTsKKyAgICBUR0FUb29scy5fT1JJR0lOX1VMID0gMHgwMjsK
KyAgICBUR0FUb29scy5fT1JJR0lOX1VSID0gMHgwMzsKKyAgICByZXR1cm4gVEdBVG9vbHM7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2MvdGltaW5nVG9vbHMudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvdGltaW5n
VG9vbHMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogVGltaW5nVG9vbHMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVGltaW5nVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRpbWluZ1Rvb2xzOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZG9tTWFuYWdlbWVudF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kb21NYW5hZ2VtZW50
ICovICIuL01pc2MvZG9tTWFuYWdlbWVudC50cyIpOworCisvKioKKyAqIENsYXNzIHVzZWQgdG8g
cHJvdmlkZSBoZWxwZXIgZm9yIHRpbWluZworICovCit2YXIgVGltaW5nVG9vbHMgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gVGltaW5nVG9vbHMoKSB7CisgICAg
fQorICAgIC8qKgorICAgICAqIFBvbHlmaWxsIGZvciBzZXRJbW1lZGlhdGUKKyAgICAgKiBAcGFy
YW0gYWN0aW9uIGRlZmluZXMgdGhlIGFjdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBjdXJyZW50
IGV4ZWN1dGlvbiBibG9jaworICAgICAqLworICAgIFRpbWluZ1Rvb2xzLlNldEltbWVkaWF0ZSA9
IGZ1bmN0aW9uIChhY3Rpb24pIHsKKyAgICAgICAgaWYgKF9kb21NYW5hZ2VtZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkRvbU1hbmFnZW1lbnQiXS5Jc1dpbmRvd09iamVjdEV4aXN0
KCkgJiYgd2luZG93LnNldEltbWVkaWF0ZSkgeworICAgICAgICAgICAgd2luZG93LnNldEltbWVk
aWF0ZShhY3Rpb24pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2V0
VGltZW91dChhY3Rpb24sIDEpOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gVGltaW5n
VG9vbHM7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01pc2MvdG9vbHMudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL01pc2MvdG9vbHMudHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
VG9vbHMsIGNsYXNzTmFtZSwgQXN5bmNMb29wICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlRvb2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUb29sczsgfSk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJjbGFzc05hbWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsYXNzTmFtZTsgfSk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJBc3luY0xvb3AiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFzeW5j
TG9vcDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX29ic2VydmFibGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vb2JzZXJ2YWJs
ZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
ZG9tTWFuYWdlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9kb21NYW5hZ2VtZW50ICovICIuL01pc2MvZG9tTWFuYWdlbWVudC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbG9nZ2VyICovICIuL01pc2MvbG9n
Z2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlZXBDb3BpZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVlcENvcGll
ciAqLyAiLi9NaXNjL2RlZXBDb3BpZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cHJlY2lzaW9uRGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9wcmVjaXNpb25EYXRlICovICIuL01pc2MvcHJlY2lzaW9uRGF0ZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZXZUb29scyAqLyAiLi9NaXNj
L2RldlRvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3dlYlJlcXVlc3RfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vd2Vi
UmVxdWVzdCAqLyAiLi9NaXNjL3dlYlJlcXVlc3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9Fbmdp
bmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZpbGVUb29s
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9maWxlVG9vbHMgKi8gIi4vTWlzYy9maWxlVG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfcHJvbWlzZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9wcm9taXNlICovICIuL01pc2MvcHJvbWlzZS50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF90aW1pbmdUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGltaW5nVG9vbHMgKi8gIi4vTWlzYy90
aW1pbmdUb29scy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pbnN0YW50aWF0aW9u
VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL2luc3RhbnRpYXRpb25Ub29scyAqLyAiLi9NaXNjL2luc3RhbnRpYXRpb25Ub29scy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ndWlkX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ndWlkICovICIuL01pc2MvZ3Vp
ZC50cyIpOworCisKKworCisKKworCisKKworCisKKworCisvKioKKyAqIENsYXNzIGNvbnRhaW5p
bmcgYSBzZXQgb2Ygc3RhdGljIHV0aWxpdGllcyBmdW5jdGlvbnMKKyAqLwordmFyIFRvb2xzID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIFRvb2xzKCkgeworICAg
IH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9vbHMsICJCYXNlVXJsIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBiYXNlIFVSTCB0byB1c2UgdG8gbG9h
ZCBhc3NldHMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIF9maWxlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siRmls
ZVRvb2xzIl0uQmFzZVVybDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIF9maWxlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
X1siRmlsZVRvb2xzIl0uQmFzZVVybCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoVG9vbHMsICJEZWZhdWx0UmV0cnlTdHJhdGVneSIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcmV0cnkgc3RyYXRlZ3kgdG8g
YXBwbHkgd2hlbiBhbiBlcnJvciBoYXBwZW5zIHdoaWxlIGxvYWRpbmcgYW4gYXNzZXQKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9m
aWxlVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siRmlsZVRvb2xzIl0uRGVmYXVs
dFJldHJ5U3RyYXRlZ3k7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHN0cmF0
ZWd5KSB7CisgICAgICAgICAgICBfZmlsZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIkZpbGVUb29scyJdLkRlZmF1bHRSZXRyeVN0cmF0ZWd5ID0gc3RyYXRlZ3k7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb29scywgIlVzZUZhbGxiYWNr
VGV4dHVyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGdsb2Jh
bCB2YXJpYWJsZSBpbmRpY2F0aW5nIGlmIGZhbGxiYWNrIHRleHR1cmUgbXVzdCBiZSB1c2VkIHdo
ZW4gYSB0ZXh0dXJlIGNhbm5vdCBiZSBsb2FkZWQKKyAgICAgICAgICogQGlnbm9yZW5hbWluZwor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRW5n
aW5lU3RvcmUiXS5Vc2VGYWxsYmFja1RleHR1cmU7CisgICAgICAgIH0sCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJFbmdpbmVTdG9yZSJdLlVzZUZhbGxiYWNrVGV4dHVy
ZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
VG9vbHMsICJSZWdpc3RlcmVkRXh0ZXJuYWxDbGFzc2VzIiwgeworICAgICAgICAvKioKKyAgICAg
ICAgICogVXNlIHRoaXMgb2JqZWN0IHRvIHJlZ2lzdGVyIGV4dGVybmFsIGNsYXNzZXMgbGlrZSBj
dXN0b20gdGV4dHVyZXMgb3IgbWF0ZXJpYWwKKyAgICAgICAgICogdG8gYWxsb3cgdGhlIGxhb2Rl
cnMgdG8gaW5zdGFudGlhdGUgdGhlbQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gX2luc3RhbnRpYXRpb25Ub29sc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTFfX1siSW5zdGFudGlhdGlvblRvb2xzIl0uUmVnaXN0ZXJlZEV4dGVy
bmFsQ2xhc3NlczsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2xhc3Nlcykg
eworICAgICAgICAgICAgX2luc3RhbnRpYXRpb25Ub29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfX1siSW5zdGFudGlhdGlvblRvb2xzIl0uUmVnaXN0ZXJlZEV4dGVybmFsQ2xhc3NlcyA9
IGNsYXNzZXM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShU
b29scywgImZhbGxiYWNrVGV4dHVyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRleHR1
cmUgY29udGVudCB1c2VkIGlmIGEgdGV4dHVyZSBjYW5ub3QgbG9hZGVkCisgICAgICAgICAqIEBp
Z25vcmVuYW1pbmcKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIkVuZ2luZVN0b3JlIl0uRmFsbGJhY2tUZXh0dXJlOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgX0VuZ2luZXNfZW5naW5l
U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRW5naW5lU3RvcmUiXS5GYWxsYmFj
a1RleHR1cmUgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmVh
ZCB0aGUgY29udGVudCBvZiBhIGJ5dGUgYXJyYXkgYXQgYSBzcGVjaWZpZWQgY29vcmRpbmF0ZXMg
KHRha2luZyBpbiBhY2NvdW50IHdyYXBwaW5nKQorICAgICAqIEBwYXJhbSB1IGRlZmluZXMgdGhl
IGNvb3JkaW5hdGUgb24gWCBheGlzCisgICAgICogQHBhcmFtIHYgZGVmaW5lcyB0aGUgY29vcmRp
bmF0ZSBvbiBZIGF4aXMKKyAgICAgKiBAcGFyYW0gd2lkdGggZGVmaW5lcyB0aGUgd2lkdGggb2Yg
dGhlIHNvdXJjZSBkYXRhCisgICAgICogQHBhcmFtIGhlaWdodCBkZWZpbmVzIHRoZSBoZWlnaHQg
b2YgdGhlIHNvdXJjZSBkYXRhCisgICAgICogQHBhcmFtIHBpeGVscyBkZWZpbmVzIHRoZSBzb3Vy
Y2UgYnl0ZSBhcnJheQorICAgICAqIEBwYXJhbSBjb2xvciBkZWZpbmVzIHRoZSBvdXRwdXQgY29s
b3IKKyAgICAgKi8KKyAgICBUb29scy5GZXRjaFRvUmVmID0gZnVuY3Rpb24gKHUsIHYsIHdpZHRo
LCBoZWlnaHQsIHBpeGVscywgY29sb3IpIHsKKyAgICAgICAgdmFyIHdyYXBwZWRVID0gKChNYXRo
LmFicyh1KSAqIHdpZHRoKSAlIHdpZHRoKSB8IDA7CisgICAgICAgIHZhciB3cmFwcGVkViA9ICgo
TWF0aC5hYnModikgKiBoZWlnaHQpICUgaGVpZ2h0KSB8IDA7CisgICAgICAgIHZhciBwb3NpdGlv
biA9ICh3cmFwcGVkVSArIHdyYXBwZWRWICogd2lkdGgpICogNDsKKyAgICAgICAgY29sb3IuciA9
IHBpeGVsc1twb3NpdGlvbl0gLyAyNTU7CisgICAgICAgIGNvbG9yLmcgPSBwaXhlbHNbcG9zaXRp
b24gKyAxXSAvIDI1NTsKKyAgICAgICAgY29sb3IuYiA9IHBpeGVsc1twb3NpdGlvbiArIDJdIC8g
MjU1OworICAgICAgICBjb2xvci5hID0gcGl4ZWxzW3Bvc2l0aW9uICsgM10gLyAyNTU7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBJbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIGFuZCBiIHZpYSBhbHBo
YQorICAgICAqIEBwYXJhbSBhIFRoZSBsb3dlciB2YWx1ZSAocmV0dXJuZWQgd2hlbiBhbHBoYSA9
IDApCisgICAgICogQHBhcmFtIGIgVGhlIHVwcGVyIHZhbHVlIChyZXR1cm5lZCB3aGVuIGFscGhh
ID0gMSkKKyAgICAgKiBAcGFyYW0gYWxwaGEgVGhlIGludGVycG9sYXRpb24tZmFjdG9yCisgICAg
ICogQHJldHVybiBUaGUgbWl4ZWQgdmFsdWUKKyAgICAgKi8KKyAgICBUb29scy5NaXggPSBmdW5j
dGlvbiAoYSwgYiwgYWxwaGEpIHsKKyAgICAgICAgcmV0dXJuIGEgKiAoMSAtIGFscGhhKSArIGIg
KiBhbHBoYTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFRyaWVzIHRvIGluc3RhbnRpYXRlIGEg
bmV3IG9iamVjdCBmcm9tIGEgZ2l2ZW4gY2xhc3MgbmFtZQorICAgICAqIEBwYXJhbSBjbGFzc05h
bWUgZGVmaW5lcyB0aGUgY2xhc3MgbmFtZSB0byBpbnN0YW50aWF0ZQorICAgICAqIEByZXR1cm5z
IHRoZSBuZXcgb2JqZWN0IG9yIG51bGwgaWYgdGhlIHN5c3RlbSB3YXMgbm90IGFibGUgdG8gZG8g
dGhlIGluc3RhbnRpYXRpb24KKyAgICAgKi8KKyAgICBUb29scy5JbnN0YW50aWF0ZSA9IGZ1bmN0
aW9uIChjbGFzc05hbWUpIHsKKyAgICAgICAgcmV0dXJuIF9pbnN0YW50aWF0aW9uVG9vbHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkluc3RhbnRpYXRpb25Ub29scyJdLkluc3RhbnRp
YXRlKGNsYXNzTmFtZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQcm92aWRlcyBhIHNsaWNl
IGZ1bmN0aW9uIHRoYXQgd2lsbCB3b3JrIGV2ZW4gb24gSUUKKyAgICAgKiBAcGFyYW0gZGF0YSBk
ZWZpbmVzIHRoZSBhcnJheSB0byBzbGljZQorICAgICAqIEBwYXJhbSBzdGFydCBkZWZpbmVzIHRo
ZSBzdGFydCBvZiB0aGUgZGF0YSAob3B0aW9uYWwpCisgICAgICogQHBhcmFtIGVuZCBkZWZpbmVz
IHRoZSBlbmQgb2YgdGhlIGRhdGEgKG9wdGlvbmFsKQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcg
c2xpY2VkIGFycmF5CisgICAgICovCisgICAgVG9vbHMuU2xpY2UgPSBmdW5jdGlvbiAoZGF0YSwg
c3RhcnQsIGVuZCkgeworICAgICAgICBpZiAoZGF0YS5zbGljZSkgeworICAgICAgICAgICAgcmV0
dXJuIGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEFy
cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRhdGEsIHN0YXJ0LCBlbmQpOworICAgIH07CisgICAg
LyoqCisgICAgICogUG9seWZpbGwgZm9yIHNldEltbWVkaWF0ZQorICAgICAqIEBwYXJhbSBhY3Rp
b24gZGVmaW5lcyB0aGUgYWN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgdGhlIGN1cnJlbnQgZXhlY3V0
aW9uIGJsb2NrCisgICAgICovCisgICAgVG9vbHMuU2V0SW1tZWRpYXRlID0gZnVuY3Rpb24gKGFj
dGlvbikgeworICAgICAgICBfdGltaW5nVG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEw
X19bIlRpbWluZ1Rvb2xzIl0uU2V0SW1tZWRpYXRlKGFjdGlvbik7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBGdW5jdGlvbiBpbmRpY2F0aW5nIGlmIGEgbnVtYmVyIGlzIGFuIGV4cG9uZW50IG9m
IDIKKyAgICAgKiBAcGFyYW0gdmFsdWUgZGVmaW5lcyB0aGUgdmFsdWUgdG8gdGVzdAorICAgICAq
IEByZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIGV4cG9uZW50IG9mIDIKKyAgICAgKi8K
KyAgICBUb29scy5Jc0V4cG9uZW50T2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
dmFyIGNvdW50ID0gMTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY291bnQgKj0gMjsKKyAg
ICAgICAgfSB3aGlsZSAoY291bnQgPCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjb3VudCA9PT0g
dmFsdWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBuZWFyZXN0IDMyLWJp
dCBzaW5nbGUgcHJlY2lzaW9uIGZsb2F0IHJlcHJlc2VudGF0aW9uIG9mIGEgTnVtYmVyCisgICAg
ICogQHBhcmFtIHZhbHVlIEEgTnVtYmVyLiAgSWYgdGhlIHBhcmFtZXRlciBpcyBvZiBhIGRpZmZl
cmVudCB0eXBlLCBpdCB3aWxsIGdldCBjb252ZXJ0ZWQKKyAgICAgKiB0byBhIG51bWJlciBvciB0
byBOYU4gaWYgaXQgY2Fubm90IGJlIGNvbnZlcnRlZAorICAgICAqIEByZXR1cm5zIG51bWJlcgor
ICAgICAqLworICAgIFRvb2xzLkZsb2F0Um91bmQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg
ICAgaWYgKE1hdGguZnJvdW5kKSB7CisgICAgICAgICAgICByZXR1cm4gTWF0aC5mcm91bmQodmFs
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAoVG9vbHMuX3RtcEZsb2F0QXJyYXlbMF0g
PSB2YWx1ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeHRyYWN0cyB0aGUgZmlsZW5hbWUg
ZnJvbSBhIHBhdGgKKyAgICAgKiBAcGFyYW0gcGF0aCBkZWZpbmVzIHRoZSBwYXRoIHRvIHVzZQor
ICAgICAqIEByZXR1cm5zIHRoZSBmaWxlbmFtZQorICAgICAqLworICAgIFRvb2xzLkdldEZpbGVu
YW1lID0gZnVuY3Rpb24gKHBhdGgpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gcGF0aC5sYXN0SW5k
ZXhPZigiLyIpOworICAgICAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgICAgICByZXR1cm4g
cGF0aDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoaW5kZXggKyAx
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEV4dHJhY3RzIHRoZSAiZm9sZGVyIiBwYXJ0IG9m
IGEgcGF0aCAoZXZlcnl0aGluZyBiZWZvcmUgdGhlIGZpbGVuYW1lKS4KKyAgICAgKiBAcGFyYW0g
dXJpIFRoZSBVUkkgdG8gZXh0cmFjdCB0aGUgaW5mbyBmcm9tCisgICAgICogQHBhcmFtIHJldHVy
blVuY2hhbmdlZElmTm9TbGFzaCBEbyBub3QgdG91Y2ggdGhlIFVSSSBpZiBubyBzbGFzaGVzIGFy
ZSBwcmVzZW50CisgICAgICogQHJldHVybnMgVGhlICJmb2xkZXIiIHBhcnQgb2YgdGhlIHBhdGgK
KyAgICAgKi8KKyAgICBUb29scy5HZXRGb2xkZXJQYXRoID0gZnVuY3Rpb24gKHVyaSwgcmV0dXJu
VW5jaGFuZ2VkSWZOb1NsYXNoKSB7CisgICAgICAgIGlmIChyZXR1cm5VbmNoYW5nZWRJZk5vU2xh
c2ggPT09IHZvaWQgMCkgeyByZXR1cm5VbmNoYW5nZWRJZk5vU2xhc2ggPSBmYWxzZTsgfQorICAg
ICAgICB2YXIgaW5kZXggPSB1cmkubGFzdEluZGV4T2YoIi8iKTsKKyAgICAgICAgaWYgKGluZGV4
IDwgMCkgeworICAgICAgICAgICAgaWYgKHJldHVyblVuY2hhbmdlZElmTm9TbGFzaCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiB1cmk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gIiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVyaS5zdWJzdHJpbmcoMCwgaW5kZXgg
KyAxKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbnZlcnQgYW4gYW5nbGUgaW4gcmFkaWFu
cyB0byBkZWdyZWVzCisgICAgICogQHBhcmFtIGFuZ2xlIGRlZmluZXMgdGhlIGFuZ2xlIHRvIGNv
bnZlcnQKKyAgICAgKiBAcmV0dXJucyB0aGUgYW5nbGUgaW4gZGVncmVlcworICAgICAqLworICAg
IFRvb2xzLlRvRGVncmVlcyA9IGZ1bmN0aW9uIChhbmdsZSkgeworICAgICAgICByZXR1cm4gYW5n
bGUgKiAxODAgLyBNYXRoLlBJOworICAgIH07CisgICAgLyoqCisgICAgICogQ29udmVydCBhbiBh
bmdsZSBpbiBkZWdyZWVzIHRvIHJhZGlhbnMKKyAgICAgKiBAcGFyYW0gYW5nbGUgZGVmaW5lcyB0
aGUgYW5nbGUgdG8gY29udmVydAorICAgICAqIEByZXR1cm5zIHRoZSBhbmdsZSBpbiByYWRpYW5z
CisgICAgICovCisgICAgVG9vbHMuVG9SYWRpYW5zID0gZnVuY3Rpb24gKGFuZ2xlKSB7CisgICAg
ICAgIHJldHVybiBhbmdsZSAqIE1hdGguUEkgLyAxODA7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBFbmNvZGUgYSBidWZmZXIgdG8gYSBiYXNlNjQgc3RyaW5nCisgICAgICogQHBhcmFtIGJ1ZmZl
ciBkZWZpbmVzIHRoZSBidWZmZXIgdG8gZW5jb2RlCisgICAgICogQHJldHVybnMgdGhlIGVuY29k
ZWQgc3RyaW5nCisgICAgICovCisgICAgVG9vbHMuRW5jb2RlQXJyYXlCdWZmZXJUb2Jhc2U2NCA9
IGZ1bmN0aW9uIChidWZmZXIpIHsKKyAgICAgICAgdmFyIGtleVN0ciA9ICJBQkNERUZHSElKS0xN
Tk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7Cisg
ICAgICAgIHZhciBvdXRwdXQgPSAiIjsKKyAgICAgICAgdmFyIGNocjEsIGNocjIsIGNocjMsIGVu
YzEsIGVuYzIsIGVuYzMsIGVuYzQ7CisgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgdmFyIGJ5
dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTsKKyAgICAgICAgd2hpbGUgKGkgPCBieXRlcy5s
ZW5ndGgpIHsKKyAgICAgICAgICAgIGNocjEgPSBieXRlc1tpKytdOworICAgICAgICAgICAgY2hy
MiA9IGkgPCBieXRlcy5sZW5ndGggPyBieXRlc1tpKytdIDogTnVtYmVyLk5hTjsgLy8gTm90IHN1
cmUgaWYgdGhlIGluZGV4CisgICAgICAgICAgICBjaHIzID0gaSA8IGJ5dGVzLmxlbmd0aCA/IGJ5
dGVzW2krK10gOiBOdW1iZXIuTmFOOyAvLyBjaGVja3MgYXJlIG5lZWRlZCBoZXJlCisgICAgICAg
ICAgICBlbmMxID0gY2hyMSA+PiAyOworICAgICAgICAgICAgZW5jMiA9ICgoY2hyMSAmIDMpIDw8
IDQpIHwgKGNocjIgPj4gNCk7CisgICAgICAgICAgICBlbmMzID0gKChjaHIyICYgMTUpIDw8IDIp
IHwgKGNocjMgPj4gNik7CisgICAgICAgICAgICBlbmM0ID0gY2hyMyAmIDYzOworICAgICAgICAg
ICAgaWYgKGlzTmFOKGNocjIpKSB7CisgICAgICAgICAgICAgICAgZW5jMyA9IGVuYzQgPSA2NDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGlzTmFOKGNocjMpKSB7CisgICAg
ICAgICAgICAgICAgZW5jNCA9IDY0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cHV0
ICs9IGtleVN0ci5jaGFyQXQoZW5jMSkgKyBrZXlTdHIuY2hhckF0KGVuYzIpICsKKyAgICAgICAg
ICAgICAgICBrZXlTdHIuY2hhckF0KGVuYzMpICsga2V5U3RyLmNoYXJBdChlbmM0KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwiICsgb3V0cHV0Owor
ICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBhcnJheSBpZiBvYmogaXMgbm90IGFu
IGFycmF5CisgICAgICogQHBhcmFtIG9iaiBkZWZpbmVzIHRoZSBvYmplY3QgdG8gZXZhbHVhdGUg
YXMgYW4gYXJyYXkKKyAgICAgKiBAcGFyYW0gYWxsb3dzTnVsbFVuZGVmaW5lZCBkZWZpbmVzIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIGlmIG9iaiBpcyBhbGxvd2VkIHRvIGJlIG51bGwgb3IgdW5kZWZp
bmVkCisgICAgICogQHJldHVybnMgZWl0aGVyIG9iaiBkaXJlY3RseSBpZiBvYmogaXMgYW4gYXJy
YXkgb3IgYSBuZXcgYXJyYXkgY29udGFpbmluZyBvYmoKKyAgICAgKi8KKyAgICBUb29scy5NYWtl
QXJyYXkgPSBmdW5jdGlvbiAob2JqLCBhbGxvd3NOdWxsVW5kZWZpbmVkKSB7CisgICAgICAgIGlm
IChhbGxvd3NOdWxsVW5kZWZpbmVkICE9PSB0cnVlICYmIChvYmogPT09IHVuZGVmaW5lZCB8fCBv
YmogPT0gbnVsbCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iaikgPyBvYmogOiBbb2JqXTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldHMgdGhlIHBvaW50ZXIgcHJlZml4IHRvIHVzZQorICAgICAqIEByZXR1
cm5zICJwb2ludGVyIiBpZiB0b3VjaCBpcyBlbmFibGVkLiBFbHNlIHJldHVybnMgIm1vdXNlIgor
ICAgICAqLworICAgIFRvb2xzLkdldFBvaW50ZXJQcmVmaXggPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBldmVudFByZWZpeCA9ICJwb2ludGVyIjsKKyAgICAgICAgLy8gQ2hlY2sgaWYgcG9p
bnRlciBldmVudHMgYXJlIHN1cHBvcnRlZAorICAgICAgICBpZiAoX2RvbU1hbmFnZW1lbnRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRG9tTWFuYWdlbWVudCJdLklzV2luZG93T2JqZWN0
RXhpc3QoKSAmJiAhd2luZG93LlBvaW50ZXJFdmVudCAmJiBfZG9tTWFuYWdlbWVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJEb21NYW5hZ2VtZW50Il0uSXNOYXZpZ2F0b3JBdmFpbGFi
bGUoKSAmJiAhbmF2aWdhdG9yLnBvaW50ZXJFbmFibGVkKSB7CisgICAgICAgICAgICBldmVudFBy
ZWZpeCA9ICJtb3VzZSI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGV2ZW50UHJlZml4Owor
ICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY29ycyBiZWhhdmlvciBvbiBhIGRvbSBl
bGVtZW50LiBUaGlzIHdpbGwgYWRkIHRoZSByZXF1aXJlZCBUb29scy5Db3JzQmVoYXZpb3IgdG8g
dGhlIGVsZW1lbnQuCisgICAgICogQHBhcmFtIHVybCBkZWZpbmUgdGhlIHVybCB3ZSBhcmUgdHJ5
aW5nCisgICAgICogQHBhcmFtIGVsZW1lbnQgZGVmaW5lIHRoZSBkb20gZWxlbWVudCB3aGVyZSB0
byBjb25maWd1cmUgdGhlIGNvcnMgcG9saWN5CisgICAgICovCisgICAgVG9vbHMuU2V0Q29yc0Jl
aGF2aW9yID0gZnVuY3Rpb24gKHVybCwgZWxlbWVudCkgeworICAgICAgICBfZmlsZVRvb2xzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkZpbGVUb29scyJdLlNldENvcnNCZWhhdmlvcih1
cmwsIGVsZW1lbnQpOworICAgIH07CisgICAgLy8gRXh0ZXJuYWwgZmlsZXMKKyAgICAvKioKKyAg
ICAgKiBSZW1vdmVzIHVud2FudGVkIGNoYXJhY3RlcnMgZnJvbSBhbiB1cmwKKyAgICAgKiBAcGFy
YW0gdXJsIGRlZmluZXMgdGhlIHVybCB0byBjbGVhbgorICAgICAqIEByZXR1cm5zIHRoZSBjbGVh
bmVkIHVybAorICAgICAqLworICAgIFRvb2xzLkNsZWFuVXJsID0gZnVuY3Rpb24gKHVybCkgewor
ICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgvIy9tZywgIiUyMyIpOworICAgICAgICByZXR1cm4g
dXJsOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvb2xzLCAiUHJlcHJvY2Vz
c1VybCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGZ1bmN0aW9u
IHVzZWQgdG8gcHJlLXByb2Nlc3MgdXJsIGJlZm9yZSB1c2luZyB0aGVtIHRvIGxvYWQgYXNzZXRz
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiBfZmlsZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkZpbGVUb29scyJd
LlByZXByb2Nlc3NVcmw7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2Nl
c3NvcikgeworICAgICAgICAgICAgX2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJGaWxlVG9vbHMiXS5QcmVwcm9jZXNzVXJsID0gcHJvY2Vzc29yOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICAvKioKKyAgICAqIExvYWRzIGFuIGltYWdlIGFzIGFuIEhUTUxJbWFnZUVsZW1l
bnQuCisgICAgKiBAcGFyYW0gaW5wdXQgdXJsIHN0cmluZywgQXJyYXlCdWZmZXIsIG9yIEJsb2Ig
dG8gbG9hZAorICAgICogQHBhcmFtIG9uTG9hZCBjYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgaW1h
Z2Ugc3VjY2Vzc2Z1bGx5IGxvYWRzCisgICAgKiBAcGFyYW0gb25FcnJvciBjYWxsYmFjayBjYWxs
ZWQgd2hlbiB0aGUgaW1hZ2UgZmFpbHMgdG8gbG9hZAorICAgICogQHBhcmFtIG9mZmxpbmVQcm92
aWRlciBvZmZsaW5lIHByb3ZpZGVyIGZvciBjYWNoaW5nCisgICAgKiBAcmV0dXJucyB0aGUgSFRN
TEltYWdlRWxlbWVudCBvZiB0aGUgbG9hZGVkIGltYWdlCisgICAgKi8KKyAgICBUb29scy5Mb2Fk
SW1hZ2UgPSBmdW5jdGlvbiAoaW5wdXQsIG9uTG9hZCwgb25FcnJvciwgb2ZmbGluZVByb3ZpZGVy
KSB7CisgICAgICAgIHJldHVybiBfZmlsZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIkZpbGVUb29scyJdLkxvYWRJbWFnZShpbnB1dCwgb25Mb2FkLCBvbkVycm9yLCBvZmZsaW5l
UHJvdmlkZXIpOworICAgIH07CisgICAgLyoqCisgICAgICogTG9hZHMgYSBmaWxlCisgICAgICog
QHBhcmFtIHVybCB1cmwgc3RyaW5nLCBBcnJheUJ1ZmZlciwgb3IgQmxvYiB0byBsb2FkCisgICAg
ICogQHBhcmFtIG9uU3VjY2VzcyBjYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgZmlsZSBzdWNjZXNz
ZnVsbHkgbG9hZHMKKyAgICAgKiBAcGFyYW0gb25Qcm9ncmVzcyBjYWxsYmFjayBjYWxsZWQgd2hp
bGUgZmlsZSBpcyBsb2FkaW5nIChpZiB0aGUgc2VydmVyIHN1cHBvcnRzIHRoaXMgbW9kZSkKKyAg
ICAgKiBAcGFyYW0gb2ZmbGluZVByb3ZpZGVyIGRlZmluZXMgdGhlIG9mZmxpbmUgcHJvdmlkZXIg
Zm9yIGNhY2hpbmcKKyAgICAgKiBAcGFyYW0gdXNlQXJyYXlCdWZmZXIgZGVmaW5lcyBhIGJvb2xl
YW4gaW5kaWNhdGluZyB0aGF0IGRhdGUgbXVzdCBiZSByZXR1cm5lZCBhcyBBcnJheUJ1ZmZlcgor
ICAgICAqIEBwYXJhbSBvbkVycm9yIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBmaWxlIGZhaWxz
IHRvIGxvYWQKKyAgICAgKiBAcmV0dXJucyBhIGZpbGUgcmVxdWVzdCBvYmplY3QKKyAgICAgKi8K
KyAgICBUb29scy5Mb2FkRmlsZSA9IGZ1bmN0aW9uICh1cmwsIG9uU3VjY2Vzcywgb25Qcm9ncmVz
cywgb2ZmbGluZVByb3ZpZGVyLCB1c2VBcnJheUJ1ZmZlciwgb25FcnJvcikgeworICAgICAgICBy
ZXR1cm4gX2ZpbGVUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJGaWxlVG9vbHMi
XS5Mb2FkRmlsZSh1cmwsIG9uU3VjY2Vzcywgb25Qcm9ncmVzcywgb2ZmbGluZVByb3ZpZGVyLCB1
c2VBcnJheUJ1ZmZlciwgb25FcnJvcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBMb2FkcyBh
IGZpbGUgZnJvbSBhIHVybAorICAgICAqIEBwYXJhbSB1cmwgdGhlIGZpbGUgdXJsIHRvIGxvYWQK
KyAgICAgKiBAcmV0dXJucyBhIHByb21pc2UgY29udGFpbmluZyBhbiBBcnJheUJ1ZmZlciBjb3Jy
aXNwb25kaW5nIHRvIHRoZSBsb2FkZWQgZmlsZQorICAgICAqLworICAgIFRvb2xzLkxvYWRGaWxl
QXN5bmMgPSBmdW5jdGlvbiAodXJsKSB7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5j
dGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBfZmlsZVRvb2xzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIkZpbGVUb29scyJdLkxvYWRGaWxlKHVybCwgZnVuY3Rpb24g
KGRhdGEpIHsKKyAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpOworICAgICAgICAgICAgfSwg
dW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUsIGZ1bmN0aW9uIChyZXF1ZXN0LCBleGNlcHRpb24p
IHsKKyAgICAgICAgICAgICAgICByZWplY3QoZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIExvYWQgYSBzY3JpcHQgKGlkZW50
aWZpZWQgYnkgYW4gdXJsKS4gV2hlbiB0aGUgdXJsIHJldHVybnMsIHRoZQorICAgICAqIGNvbnRl
bnQgb2YgdGhpcyBmaWxlIGlzIGFkZGVkIGludG8gYSBuZXcgc2NyaXB0IGVsZW1lbnQsIGF0dGFj
aGVkIHRvIHRoZSBET00gKGJvZHkgZWxlbWVudCkKKyAgICAgKiBAcGFyYW0gc2NyaXB0VXJsIGRl
ZmluZXMgdGhlIHVybCBvZiB0aGUgc2NyaXB0IHRvIGxhb2QKKyAgICAgKiBAcGFyYW0gb25TdWNj
ZXNzIGRlZmluZXMgdGhlIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgaXMgbG9hZGVk
CisgICAgICogQHBhcmFtIG9uRXJyb3IgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gY2FsbCBpZiBh
biBlcnJvciBvY2N1cnMKKyAgICAgKiBAcGFyYW0gc2NyaXB0SWQgZGVmaW5lcyB0aGUgaWQgb2Yg
dGhlIHNjcmlwdCBlbGVtZW50CisgICAgICovCisgICAgVG9vbHMuTG9hZFNjcmlwdCA9IGZ1bmN0
aW9uIChzY3JpcHRVcmwsIG9uU3VjY2Vzcywgb25FcnJvciwgc2NyaXB0SWQpIHsKKyAgICAgICAg
aWYgKCFfZG9tTWFuYWdlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJEb21NYW5h
Z2VtZW50Il0uSXNXaW5kb3dPYmplY3RFeGlzdCgpKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgnaGVhZCcpWzBdOworICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnc2NyaXB0Jyk7CisgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9q
YXZhc2NyaXB0Jyk7CisgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsIHNjcmlwdFVy
bCk7CisgICAgICAgIGlmIChzY3JpcHRJZCkgeworICAgICAgICAgICAgc2NyaXB0LmlkID0gc2Ny
aXB0SWQ7CisgICAgICAgIH0KKyAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICBvblN1Y2Nlc3Mo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBm
dW5jdGlvbiAoZSkgeworICAgICAgICAgICAgaWYgKG9uRXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICBvbkVycm9yKCJVbmFibGUgdG8gbG9hZCBzY3JpcHQgJyIgKyBzY3JpcHRVcmwgKyAiJyIsIGUp
OworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNj
cmlwdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBMb2FkIGFuIGFzeW5jaHJvbm91cyBzY3Jp
cHQgKGlkZW50aWZpZWQgYnkgYW4gdXJsKS4gV2hlbiB0aGUgdXJsIHJldHVybnMsIHRoZQorICAg
ICAqIGNvbnRlbnQgb2YgdGhpcyBmaWxlIGlzIGFkZGVkIGludG8gYSBuZXcgc2NyaXB0IGVsZW1l
bnQsIGF0dGFjaGVkIHRvIHRoZSBET00gKGJvZHkgZWxlbWVudCkKKyAgICAgKiBAcGFyYW0gc2Ny
aXB0VXJsIGRlZmluZXMgdGhlIHVybCBvZiB0aGUgc2NyaXB0IHRvIGxhb2QKKyAgICAgKiBAcGFy
YW0gc2NyaXB0SWQgZGVmaW5lcyB0aGUgaWQgb2YgdGhlIHNjcmlwdCBlbGVtZW50CisgICAgICog
QHJldHVybnMgYSBwcm9taXNlIHJlcXVlc3Qgb2JqZWN0CisgICAgICovCisgICAgVG9vbHMuTG9h
ZFNjcmlwdEFzeW5jID0gZnVuY3Rpb24gKHNjcmlwdFVybCwgc2NyaXB0SWQpIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAg
ICAgIGlmICghX2RvbU1hbmFnZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRG9t
TWFuYWdlbWVudCJdLklzV2luZG93T2JqZWN0RXhpc3QoKSkgeworICAgICAgICAgICAgICAgIHJl
c29sdmUoZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQn
KVswXTsKKyAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz
Y3JpcHQnKTsKKyAgICAgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9q
YXZhc2NyaXB0Jyk7CisgICAgICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLCBzY3Jp
cHRVcmwpOworICAgICAgICAgICAgaWYgKHNjcmlwdElkKSB7CisgICAgICAgICAgICAgICAgc2Ny
aXB0LmlkID0gc2NyaXB0SWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzY3JpcHQub25s
b2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7CisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkgewor
ICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpOworICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBMb2FkcyBhIGZpbGUgZnJvbSBhIGJsb2IKKyAgICAgKiBAcGFyYW0gZmlsZVRv
TG9hZCBkZWZpbmVzIHRoZSBibG9iIHRvIHVzZQorICAgICAqIEBwYXJhbSBjYWxsYmFjayBkZWZp
bmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gZGF0YSBpcyBsb2FkZWQKKyAgICAgKiBAcGFy
YW0gcHJvZ3Jlc3NDYWxsYmFjayBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIGR1cmluZyBs
b2FkaW5nIHByb2Nlc3MKKyAgICAgKiBAcmV0dXJucyBhIGZpbGUgcmVxdWVzdCBvYmplY3QKKyAg
ICAgKi8KKyAgICBUb29scy5SZWFkRmlsZUFzRGF0YVVSTCA9IGZ1bmN0aW9uIChmaWxlVG9Mb2Fk
LCBjYWxsYmFjaywgcHJvZ3Jlc3NDYWxsYmFjaykgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3
IEZpbGVSZWFkZXIoKTsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSB7CisgICAgICAgICAgICBvbkNv
bXBsZXRlT2JzZXJ2YWJsZTogbmV3IF9vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIk9ic2VydmFibGUiXSgpLAorICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHsg
cmV0dXJuIHJlYWRlci5hYm9ydCgpOyB9LAorICAgICAgICB9OworICAgICAgICByZWFkZXIub25s
b2FkZW5kID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHJlcXVlc3Qub25Db21wbGV0ZU9i
c2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHJlcXVlc3QpOworICAgICAgICB9OworICAgICAgICBy
ZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIC8vdGFyZ2V0IGRvZXNu
J3QgaGF2ZSByZXN1bHQgZnJvbSB0cyAxLjMKKyAgICAgICAgICAgIGNhbGxiYWNrKGUudGFyZ2V0
WydyZXN1bHQnXSk7CisgICAgICAgIH07CisgICAgICAgIHJlYWRlci5vbnByb2dyZXNzID0gcHJv
Z3Jlc3NDYWxsYmFjazsKKyAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZVRvTG9hZCk7
CisgICAgICAgIHJldHVybiByZXF1ZXN0OworICAgIH07CisgICAgLyoqCisgICAgICogTG9hZHMg
YSBmaWxlCisgICAgICogQHBhcmFtIGZpbGVUb0xvYWQgZGVmaW5lcyB0aGUgZmlsZSB0byBsb2Fk
CisgICAgICogQHBhcmFtIGNhbGxiYWNrIGRlZmluZXMgdGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hl
biBkYXRhIGlzIGxvYWRlZAorICAgICAqIEBwYXJhbSBwcm9ncmVzc0NhbGxCYWNrIGRlZmluZXMg
dGhlIGNhbGxiYWNrIHRvIGNhbGwgZHVyaW5nIGxvYWRpbmcgcHJvY2VzcworICAgICAqIEBwYXJh
bSB1c2VBcnJheUJ1ZmZlciBkZWZpbmVzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgZGF0YSBt
dXN0IGJlIHJldHVybmVkIGFzIGFuIEFycmF5QnVmZmVyCisgICAgICogQHJldHVybnMgYSBmaWxl
IHJlcXVlc3Qgb2JqZWN0CisgICAgICovCisgICAgVG9vbHMuUmVhZEZpbGUgPSBmdW5jdGlvbiAo
ZmlsZVRvTG9hZCwgY2FsbGJhY2ssIHByb2dyZXNzQ2FsbEJhY2ssIHVzZUFycmF5QnVmZmVyKSB7
CisgICAgICAgIHJldHVybiBfZmlsZVRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19b
IkZpbGVUb29scyJdLlJlYWRGaWxlKGZpbGVUb0xvYWQsIGNhbGxiYWNrLCBwcm9ncmVzc0NhbGxC
YWNrLCB1c2VBcnJheUJ1ZmZlcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEg
ZGF0YSB1cmwgZnJvbSBhIGdpdmVuIHN0cmluZyBjb250ZW50CisgICAgICogQHBhcmFtIGNvbnRl
bnQgZGVmaW5lcyB0aGUgY29udGVudCB0byBjb252ZXJ0CisgICAgICogQHJldHVybnMgdGhlIG5l
dyBkYXRhIHVybCBsaW5rCisgICAgICovCisgICAgVG9vbHMuRmlsZUFzVVJMID0gZnVuY3Rpb24g
KGNvbnRlbnQpIHsKKyAgICAgICAgdmFyIGZpbGVCbG9iID0gbmV3IEJsb2IoW2NvbnRlbnRdKTsK
KyAgICAgICAgdmFyIHVybCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDsKKyAgICAg
ICAgdmFyIGxpbmsgPSB1cmwuY3JlYXRlT2JqZWN0VVJMKGZpbGVCbG9iKTsKKyAgICAgICAgcmV0
dXJuIGxpbms7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JtYXQgdGhlIGdpdmVuIG51bWJl
ciB0byBhIHNwZWNpZmljIGRlY2ltYWwgZm9ybWF0CisgICAgICogQHBhcmFtIHZhbHVlIGRlZmlu
ZXMgdGhlIG51bWJlciB0byBmb3JtYXQKKyAgICAgKiBAcGFyYW0gZGVjaW1hbHMgZGVmaW5lcyB0
aGUgbnVtYmVyIG9mIGRlY2ltYWxzIHRvIHVzZQorICAgICAqIEByZXR1cm5zIHRoZSBmb3JtYXR0
ZWQgc3RyaW5nCisgICAgICovCisgICAgVG9vbHMuRm9ybWF0ID0gZnVuY3Rpb24gKHZhbHVlLCBk
ZWNpbWFscykgeworICAgICAgICBpZiAoZGVjaW1hbHMgPT09IHZvaWQgMCkgeyBkZWNpbWFscyA9
IDI7IH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoZGVjaW1hbHMpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogVHJpZXMgdG8gY29weSBhbiBvYmplY3QgYnkgZHVwbGljYXRpbmcgZXZl
cnkgcHJvcGVydHkKKyAgICAgKiBAcGFyYW0gc291cmNlIGRlZmluZXMgdGhlIHNvdXJjZSBvYmpl
Y3QKKyAgICAgKiBAcGFyYW0gZGVzdGluYXRpb24gZGVmaW5lcyB0aGUgdGFyZ2V0IG9iamVjdAor
ICAgICAqIEBwYXJhbSBkb05vdENvcHlMaXN0IGRlZmluZXMgYSBsaXN0IG9mIHByb3BlcnRpZXMg
dG8gYXZvaWQKKyAgICAgKiBAcGFyYW0gbXVzdENvcHlMaXN0IGRlZmluZXMgYSBsaXN0IG9mIHBy
b3BlcnRpZXMgdG8gY29weSAoZXZlbiBpZiB0aGV5IHN0YXJ0IHdpdGggXykKKyAgICAgKi8KKyAg
ICBUb29scy5EZWVwQ29weSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlc3RpbmF0aW9uLCBkb05vdENv
cHlMaXN0LCBtdXN0Q29weUxpc3QpIHsKKyAgICAgICAgX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHNvdXJjZSwgZGVzdGluYXRp
b24sIGRvTm90Q29weUxpc3QsIG11c3RDb3B5TGlzdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIG5vIG93
biBwcm9wZXJ0eQorICAgICAqIEBwYXJhbSBvYmogZGVmaW5lcyB0aGUgb2JqZWN0IHRvIHRlc3QK
KyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIG9iamVjdCBoYXMgbm8gb3duIHByb3BlcnR5CisgICAg
ICovCisgICAgVG9vbHMuSXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHsKKyAgICAgICAgZm9yICh2
YXIgaSBpbiBvYmopIHsKKyAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaSkpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB1
c2VkIHRvIHJlZ2lzdGVyIGV2ZW50cyBhdCB3aW5kb3cgbGV2ZWwKKyAgICAgKiBAcGFyYW0gd2lu
ZG93RWxlbWVudCBkZWZpbmVzIHRoZSBXaW5kb3cgb2JqZWN0IHRvIHVzZQorICAgICAqIEBwYXJh
bSBldmVudHMgZGVmaW5lcyB0aGUgZXZlbnRzIHRvIHJlZ2lzdGVyCisgICAgICovCisgICAgVG9v
bHMuUmVnaXN0ZXJUb3BSb290RXZlbnRzID0gZnVuY3Rpb24gKHdpbmRvd0VsZW1lbnQsIGV2ZW50
cykgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZXZlbnRzLmxlbmd0aDsg
aW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2luZGV4XTsKKyAgICAg
ICAgICAgIHdpbmRvd0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudC5uYW1lLCBldmVudC5o
YW5kbGVyLCBmYWxzZSk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGlmICh3
aW5kb3cucGFyZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQuYWRkRXZl
bnRMaXN0ZW5lcihldmVudC5uYW1lLCBldmVudC5oYW5kbGVyLCBmYWxzZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgICAgICAvLyBTaWxlbnRseSBmYWlscy4uLgorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIHVucmVnaXN0ZXIgZXZlbnRz
IGZyb20gd2luZG93IGxldmVsCisgICAgICogQHBhcmFtIHdpbmRvd0VsZW1lbnQgZGVmaW5lcyB0
aGUgV2luZG93IG9iamVjdCB0byB1c2UKKyAgICAgKiBAcGFyYW0gZXZlbnRzIGRlZmluZXMgdGhl
IGV2ZW50cyB0byB1bnJlZ2lzdGVyCisgICAgICovCisgICAgVG9vbHMuVW5yZWdpc3RlclRvcFJv
b3RFdmVudHMgPSBmdW5jdGlvbiAod2luZG93RWxlbWVudCwgZXZlbnRzKSB7CisgICAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBldmVudHMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAg
ICAgICAgICB2YXIgZXZlbnQgPSBldmVudHNbaW5kZXhdOworICAgICAgICAgICAgd2luZG93RWxl
bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50Lm5hbWUsIGV2ZW50LmhhbmRsZXIpOworICAg
ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93RWxlbWVudC5wYXJlbnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgd2luZG93RWxlbWVudC5wYXJlbnQucmVtb3ZlRXZlbnRM
aXN0ZW5lcihldmVudC5uYW1lLCBldmVudC5oYW5kbGVyKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIC8v
IFNpbGVudGx5IGZhaWxzLi4uCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIER1bXBzIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1lYnVmZmVyCisgICAgICog
QHBhcmFtIHdpZHRoIGRlZmluZXMgdGhlIHJlbmRlcmluZyB3aWR0aAorICAgICAqIEBwYXJhbSBo
ZWlnaHQgZGVmaW5lcyB0aGUgcmVuZGVyaW5nIGhlaWdodAorICAgICAqIEBwYXJhbSBlbmdpbmUg
ZGVmaW5lcyB0aGUgaG9zdGluZyBlbmdpbmUKKyAgICAgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNr
IGRlZmluZXMgdGhlIGNhbGxiYWNrIHRyaWdnZXJlZCBvbmNlIHRoZSBkYXRhIGFyZSBhdmFpbGFi
bGUKKyAgICAgKiBAcGFyYW0gbWltZVR5cGUgZGVmaW5lcyB0aGUgbWltZSB0eXBlIG9mIHRoZSBy
ZXN1bHQKKyAgICAgKiBAcGFyYW0gZmlsZU5hbWUgZGVmaW5lcyB0aGUgZmlsZW5hbWUgdG8gZG93
bmxvYWQuIElmIHByZXNlbnQsIHRoZSByZXN1bHQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGRvd25s
b2FkZWQKKyAgICAgKi8KKyAgICBUb29scy5EdW1wRnJhbWVidWZmZXIgPSBmdW5jdGlvbiAod2lk
dGgsIGhlaWdodCwgZW5naW5lLCBzdWNjZXNzQ2FsbGJhY2ssIG1pbWVUeXBlLCBmaWxlTmFtZSkg
eworICAgICAgICBpZiAobWltZVR5cGUgPT09IHZvaWQgMCkgeyBtaW1lVHlwZSA9ICJpbWFnZS9w
bmciOyB9CisgICAgICAgIC8vIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmcmFtZWJ1ZmZlcgor
ICAgICAgICB2YXIgbnVtYmVyT2ZDaGFubmVsc0J5TGluZSA9IHdpZHRoICogNDsKKyAgICAgICAg
dmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyOworICAgICAgICAvL1JlYWRpbmcgZGF0YXMgZnJv
bSBXZWJHTAorICAgICAgICB2YXIgZGF0YSA9IGVuZ2luZS5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICAvL1RvIGZsaXAgaW1hZ2Ugb24gWSBheGlzLgorICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGhhbGZIZWlnaHQ7IGkrKykgeworICAgICAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCBudW1iZXJPZkNoYW5uZWxzQnlMaW5lOyBqKyspIHsKKyAgICAgICAgICAg
ICAgICB2YXIgY3VycmVudENlbGwgPSBqICsgaSAqIG51bWJlck9mQ2hhbm5lbHNCeUxpbmU7Cisg
ICAgICAgICAgICAgICAgdmFyIHRhcmdldExpbmUgPSBoZWlnaHQgLSBpIC0gMTsKKyAgICAgICAg
ICAgICAgICB2YXIgdGFyZ2V0Q2VsbCA9IGogKyB0YXJnZXRMaW5lICogbnVtYmVyT2ZDaGFubmVs
c0J5TGluZTsKKyAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IGRhdGFbY3VycmVudENlbGxdOwor
ICAgICAgICAgICAgICAgIGRhdGFbY3VycmVudENlbGxdID0gZGF0YVt0YXJnZXRDZWxsXTsKKyAg
ICAgICAgICAgICAgICBkYXRhW3RhcmdldENlbGxdID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAvLyBDcmVhdGUgYSAyRCBjYW52YXMgdG8gc3RvcmUgdGhlIHJlc3Vs
dAorICAgICAgICBpZiAoIVRvb2xzLl9TY3JlZW5zaG90Q2FudmFzKSB7CisgICAgICAgICAgICBU
b29scy5fU2NyZWVuc2hvdENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycp
OworICAgICAgICB9CisgICAgICAgIFRvb2xzLl9TY3JlZW5zaG90Q2FudmFzLndpZHRoID0gd2lk
dGg7CisgICAgICAgIFRvb2xzLl9TY3JlZW5zaG90Q2FudmFzLmhlaWdodCA9IGhlaWdodDsKKyAg
ICAgICAgdmFyIGNvbnRleHQgPSBUb29scy5fU2NyZWVuc2hvdENhbnZhcy5nZXRDb250ZXh0KCcy
ZCcpOworICAgICAgICBpZiAoY29udGV4dCkgeworICAgICAgICAgICAgLy8gQ29weSB0aGUgcGl4
ZWxzIHRvIGEgMkQgY2FudmFzCisgICAgICAgICAgICB2YXIgaW1hZ2VEYXRhID0gY29udGV4dC5j
cmVhdGVJbWFnZURhdGEod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICB2YXIgY2FzdERhdGEg
PSAoaW1hZ2VEYXRhLmRhdGEpOworICAgICAgICAgICAgY2FzdERhdGEuc2V0KGRhdGEpOworICAg
ICAgICAgICAgY29udGV4dC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTsKKyAgICAgICAg
ICAgIFRvb2xzLkVuY29kZVNjcmVlbnNob3RDYW52YXNEYXRhKHN1Y2Nlc3NDYWxsYmFjaywgbWlt
ZVR5cGUsIGZpbGVOYW1lKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ29u
dmVydHMgdGhlIGNhbnZhcyBkYXRhIHRvIGJsb2IuCisgICAgICogVGhpcyBhY3RzIGFzIGEgcG9s
eWZpbGwgZm9yIGJyb3dzZXJzIG5vdCBzdXBwb3J0aW5nIHRoZSB0byBibG9iIGZ1bmN0aW9uLgor
ICAgICAqIEBwYXJhbSBjYW52YXMgRGVmaW5lcyB0aGUgY2FudmFzIHRvIGV4dHJhY3QgdGhlIGRh
dGEgZnJvbQorICAgICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgRGVmaW5lcyB0aGUgY2FsbGJh
Y2sgdHJpZ2dlcmVkIG9uY2UgdGhlIGRhdGEgYXJlIGF2YWlsYWJsZQorICAgICAqIEBwYXJhbSBt
aW1lVHlwZSBEZWZpbmVzIHRoZSBtaW1lIHR5cGUgb2YgdGhlIHJlc3VsdAorICAgICAqLworICAg
IFRvb2xzLlRvQmxvYiA9IGZ1bmN0aW9uIChjYW52YXMsIHN1Y2Nlc3NDYWxsYmFjaywgbWltZVR5
cGUpIHsKKyAgICAgICAgaWYgKG1pbWVUeXBlID09PSB2b2lkIDApIHsgbWltZVR5cGUgPSAiaW1h
Z2UvcG5nIjsgfQorICAgICAgICAvLyBXZSBuZWVkIEhUTUxDYW52YXNFbGVtZW50LnRvQmxvYiBm
b3IgSEQgc2NyZWVuc2hvdHMKKyAgICAgICAgaWYgKCFjYW52YXMudG9CbG9iKSB7CisgICAgICAg
ICAgICAvLyAgbG93IHBlcmZvcm1hbmNlIHBvbHlmaWxsIGJhc2VkIG9uIHRvRGF0YVVSTCAoaHR0
cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxDYW52YXNF
bGVtZW50L3RvQmxvYikKKyAgICAgICAgICAgIGNhbnZhcy50b0Jsb2IgPSBmdW5jdGlvbiAoY2Fs
bGJhY2ssIHR5cGUsIHF1YWxpdHkpIHsKKyAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlz
OworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgYmluU3RyID0gYXRvYihfdGhpcy50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSku
c3BsaXQoJywnKVsxXSksIGxlbiA9IGJpblN0ci5sZW5ndGgsIGFyciA9IG5ldyBVaW50OEFycmF5
KGxlbik7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycltpXSA9IGJpblN0ci5jaGFyQ29kZUF0KGkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5l
dyBCbG9iKFthcnJdKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9OworICAg
ICAgICB9CisgICAgICAgIGNhbnZhcy50b0Jsb2IoZnVuY3Rpb24gKGJsb2IpIHsKKyAgICAgICAg
ICAgIHN1Y2Nlc3NDYWxsYmFjayhibG9iKTsKKyAgICAgICAgfSwgbWltZVR5cGUpOworICAgIH07
CisgICAgLyoqCisgICAgICogRW5jb2RlcyB0aGUgY2FudmFzIGRhdGEgdG8gYmFzZSA2NCBvciBh
dXRvbWF0aWNhbGx5IGRvd25sb2FkIHRoZSByZXN1bHQgaWYgZmlsZW5hbWUgaXMgZGVmaW5lZAor
ICAgICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdHJpZ2dl
cmVkIG9uY2UgdGhlIGRhdGEgYXJlIGF2YWlsYWJsZQorICAgICAqIEBwYXJhbSBtaW1lVHlwZSBk
ZWZpbmVzIHRoZSBtaW1lIHR5cGUgb2YgdGhlIHJlc3VsdAorICAgICAqIEBwYXJhbSBmaWxlTmFt
ZSBkZWZpbmVzIGhlIGZpbGVuYW1lIHRvIGRvd25sb2FkLiBJZiBwcmVzZW50LCB0aGUgcmVzdWx0
IHdpbGwgYXV0b21hdGljYWxseSBiZSBkb3dubG9hZGVkCisgICAgICovCisgICAgVG9vbHMuRW5j
b2RlU2NyZWVuc2hvdENhbnZhc0RhdGEgPSBmdW5jdGlvbiAoc3VjY2Vzc0NhbGxiYWNrLCBtaW1l
VHlwZSwgZmlsZU5hbWUpIHsKKyAgICAgICAgaWYgKG1pbWVUeXBlID09PSB2b2lkIDApIHsgbWlt
ZVR5cGUgPSAiaW1hZ2UvcG5nIjsgfQorICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7Cisg
ICAgICAgICAgICB2YXIgYmFzZTY0SW1hZ2UgPSBUb29scy5fU2NyZWVuc2hvdENhbnZhcy50b0Rh
dGFVUkwobWltZVR5cGUpOworICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGJhc2U2NEltYWdl
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuVG9CbG9iKFRv
b2xzLl9TY3JlZW5zaG90Q2FudmFzLCBmdW5jdGlvbiAoYmxvYikgeworICAgICAgICAgICAgICAg
IC8vQ3JlYXRpbmcgYSBsaW5rIGlmIHRoZSBicm93c2VyIGhhdmUgdGhlIGRvd25sb2FkIGF0dHJp
YnV0ZSBvbiB0aGUgYSB0YWcsIHRvIGF1dG9tYXRpY2FsbHkgc3RhcnQgZG93bmxvYWQgZ2VuZXJh
dGVkIGltYWdlLgorICAgICAgICAgICAgICAgIGlmICgoImRvd25sb2FkIiBpbiBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJhIikpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBzdHJpbmdEYXRlID0gKGRhdGUuZ2V0RnVsbFllYXIoKSAr
ICItIiArIChkYXRlLmdldE1vbnRoKCkgKyAxKSkuc2xpY2UoMikgKyAiLSIgKyBkYXRlLmdldERh
dGUoKSArICJfIiArIGRhdGUuZ2V0SG91cnMoKSArICItIiArICgnMCcgKyBkYXRlLmdldE1pbnV0
ZXMoKSkuc2xpY2UoLTIpOworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSAic2Ny
ZWVuc2hvdF8iICsgc3RyaW5nRGF0ZSArICIucG5nIjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBUb29scy5Eb3dubG9hZChibG9iLCBmaWxlTmFtZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIG5ld1dpbmRvdyA9IHdpbmRvdy5vcGVuKCIiKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFuZXdXaW5kb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YXIgaW1nID0gbmV3V2luZG93
LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOworICAgICAgICAgICAgICAgICAgICBpbWcu
b25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gbG9u
Z2VyIG5lZWQgdG8gcmVhZCB0aGUgYmxvYiBzbyBpdCdzIHJldm9rZWQKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKKyAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IHVybDsKKyAgICAgICAgICAgICAgICAg
ICAgbmV3V2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9LCBtaW1lVHlwZSk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIERvd25sb2FkcyBhIGJsb2IgaW4gdGhlIGJyb3dzZXIKKyAgICAgKiBAcGFy
YW0gYmxvYiBkZWZpbmVzIHRoZSBibG9iIHRvIGRvd25sb2FkCisgICAgICogQHBhcmFtIGZpbGVO
YW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGRvd25sb2FkZWQgZmlsZQorICAgICAqLworICAg
IFRvb2xzLkRvd25sb2FkID0gZnVuY3Rpb24gKGJsb2IsIGZpbGVOYW1lKSB7CisgICAgICAgIGlm
IChuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLm1zU2F2ZUJsb2IpIHsKKyAgICAgICAgICAgIG5hdmln
YXRvci5tc1NhdmVCbG9iKGJsb2IsIGZpbGVOYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxv
Yik7CisgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICAgICAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOworICAgICAgICBhLnN0eWxlLmRpc3BsYXkg
PSAibm9uZSI7CisgICAgICAgIGEuaHJlZiA9IHVybDsKKyAgICAgICAgYS5kb3dubG9hZCA9IGZp
bGVOYW1lOworICAgICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgaWYgKGEucGFyZW50RWxlbWVudCkgeworICAgICAgICAgICAgICAgIGEu
cGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisgICAgICAgIGEuY2xpY2soKTsKKyAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwo
dXJsKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhcHR1cmVzIGEgc2NyZWVuc2hvdCBvZiB0
aGUgY3VycmVudCByZW5kZXJpbmcKKyAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNv
bS9ob3dfdG8vcmVuZGVyX3NjZW5lX29uX2FfcG5nCisgICAgICogQHBhcmFtIGVuZ2luZSBkZWZp
bmVzIHRoZSByZW5kZXJpbmcgZW5naW5lCisgICAgICogQHBhcmFtIGNhbWVyYSBkZWZpbmVzIHRo
ZSBzb3VyY2UgY2FtZXJhCisgICAgICogQHBhcmFtIHNpemUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJl
IHNldCB0byBhIHNpbmdsZSBudW1iZXIgb3IgdG8gYW4gb2JqZWN0IHdpdGggdGhlCisgICAgICog
Zm9sbG93aW5nIChvcHRpb25hbCkgcHJvcGVydGllczogcHJlY2lzaW9uLCB3aWR0aCwgaGVpZ2h0
LiBJZiBhIHNpbmdsZSBudW1iZXIgaXMgcGFzc2VkLAorICAgICAqIGl0IHdpbGwgYmUgdXNlZCBm
b3IgYm90aCB3aWR0aCBhbmQgaGVpZ2h0LiBJZiBhbiBvYmplY3QgaXMgcGFzc2VkLCB0aGUgc2Ny
ZWVuc2hvdCBzaXplCisgICAgICogd2lsbCBiZSBkZXJpdmVkIGZyb20gdGhlIHBhcmFtZXRlcnMu
IFRoZSBwcmVjaXNpb24gcHJvcGVydHkgaXMgYSBtdWx0aXBsaWVyIGFsbG93aW5nCisgICAgICog
cmVuZGVyaW5nIGF0IGEgaGlnaGVyIG9yIGxvd2VyIHJlc29sdXRpb24KKyAgICAgKiBAcGFyYW0g
c3VjY2Vzc0NhbGxiYWNrIGRlZmluZXMgdGhlIGNhbGxiYWNrIHJlY2VpdmVzIGEgc2luZ2xlIHBh
cmFtZXRlciB3aGljaCBjb250YWlucyB0aGUKKyAgICAgKiBzY3JlZW5zaG90IGFzIGEgc3RyaW5n
IG9mIGJhc2U2NC1lbmNvZGVkIGNoYXJhY3RlcnMuIFRoaXMgc3RyaW5nIGNhbiBiZSBhc3NpZ25l
ZCB0byB0aGUKKyAgICAgKiBzcmMgcGFyYW1ldGVyIG9mIGFuIDxpbWc+IHRvIGRpc3BsYXkgaXQK
KyAgICAgKiBAcGFyYW0gbWltZVR5cGUgZGVmaW5lcyB0aGUgTUlNRSB0eXBlIG9mIHRoZSBzY3Jl
ZW5zaG90IGltYWdlIChkZWZhdWx0OiBpbWFnZS9wbmcpLgorICAgICAqIENoZWNrIHlvdXIgYnJv
d3NlciBmb3Igc3VwcG9ydGVkIE1JTUUgdHlwZXMKKyAgICAgKi8KKyAgICBUb29scy5DcmVhdGVT
Y3JlZW5zaG90ID0gZnVuY3Rpb24gKGVuZ2luZSwgY2FtZXJhLCBzaXplLCBzdWNjZXNzQ2FsbGJh
Y2ssIG1pbWVUeXBlKSB7CisgICAgICAgIGlmIChtaW1lVHlwZSA9PT0gdm9pZCAwKSB7IG1pbWVU
eXBlID0gImltYWdlL3BuZyI7IH0KKyAgICAgICAgdGhyb3cgX2RldlRvb2xzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIlNjcmVlbnNob3RUb29s
cyIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ2FwdHVyZXMgYSBzY3JlZW5zaG90IG9mIHRo
ZSBjdXJyZW50IHJlbmRlcmluZworICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9yZW5kZXJfc2NlbmVfb25fYV9wbmcKKyAgICAgKiBAcGFyYW0gZW5naW5lIGRlZmlu
ZXMgdGhlIHJlbmRlcmluZyBlbmdpbmUKKyAgICAgKiBAcGFyYW0gY2FtZXJhIGRlZmluZXMgdGhl
IHNvdXJjZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gc2l6ZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUg
c2V0IHRvIGEgc2luZ2xlIG51bWJlciBvciB0byBhbiBvYmplY3Qgd2l0aCB0aGUKKyAgICAgKiBm
b2xsb3dpbmcgKG9wdGlvbmFsKSBwcm9wZXJ0aWVzOiBwcmVjaXNpb24sIHdpZHRoLCBoZWlnaHQu
IElmIGEgc2luZ2xlIG51bWJlciBpcyBwYXNzZWQsCisgICAgICogaXQgd2lsbCBiZSB1c2VkIGZv
ciBib3RoIHdpZHRoIGFuZCBoZWlnaHQuIElmIGFuIG9iamVjdCBpcyBwYXNzZWQsIHRoZSBzY3Jl
ZW5zaG90IHNpemUKKyAgICAgKiB3aWxsIGJlIGRlcml2ZWQgZnJvbSB0aGUgcGFyYW1ldGVycy4g
VGhlIHByZWNpc2lvbiBwcm9wZXJ0eSBpcyBhIG11bHRpcGxpZXIgYWxsb3dpbmcKKyAgICAgKiBy
ZW5kZXJpbmcgYXQgYSBoaWdoZXIgb3IgbG93ZXIgcmVzb2x1dGlvbgorICAgICAqIEBwYXJhbSBt
aW1lVHlwZSBkZWZpbmVzIHRoZSBNSU1FIHR5cGUgb2YgdGhlIHNjcmVlbnNob3QgaW1hZ2UgKGRl
ZmF1bHQ6IGltYWdlL3BuZykuCisgICAgICogQ2hlY2sgeW91ciBicm93c2VyIGZvciBzdXBwb3J0
ZWQgTUlNRSB0eXBlcworICAgICAqIEByZXR1cm5zIHNjcmVlbnNob3QgYXMgYSBzdHJpbmcgb2Yg
YmFzZTY0LWVuY29kZWQgY2hhcmFjdGVycy4gVGhpcyBzdHJpbmcgY2FuIGJlIGFzc2lnbmVkCisg
ICAgICogdG8gdGhlIHNyYyBwYXJhbWV0ZXIgb2YgYW4gPGltZz4gdG8gZGlzcGxheSBpdAorICAg
ICAqLworICAgIFRvb2xzLkNyZWF0ZVNjcmVlbnNob3RBc3luYyA9IGZ1bmN0aW9uIChlbmdpbmUs
IGNhbWVyYSwgc2l6ZSwgbWltZVR5cGUpIHsKKyAgICAgICAgaWYgKG1pbWVUeXBlID09PSB2b2lk
IDApIHsgbWltZVR5cGUgPSAiaW1hZ2UvcG5nIjsgfQorICAgICAgICB0aHJvdyBfZGV2VG9vbHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiU2Ny
ZWVuc2hvdFRvb2xzIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZXMgYW4gaW1h
Z2Ugc2NyZWVuc2hvdCBmcm9tIHRoZSBzcGVjaWZpZWQgY2FtZXJhLgorICAgICAqIEBzZWUgaHR0
cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9yZW5kZXJfc2NlbmVfb25fYV9wbmcKKyAgICAg
KiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgdG8gdXNlIGZvciByZW5kZXJpbmcKKyAgICAgKiBA
cGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gdXNlIGZvciByZW5kZXJpbmcKKyAgICAgKiBAcGFy
YW0gc2l6ZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRvIGEgc2luZ2xlIG51bWJlciBvciB0
byBhbiBvYmplY3Qgd2l0aCB0aGUKKyAgICAgKiBmb2xsb3dpbmcgKG9wdGlvbmFsKSBwcm9wZXJ0
aWVzOiBwcmVjaXNpb24sIHdpZHRoLCBoZWlnaHQuIElmIGEgc2luZ2xlIG51bWJlciBpcyBwYXNz
ZWQsCisgICAgICogaXQgd2lsbCBiZSB1c2VkIGZvciBib3RoIHdpZHRoIGFuZCBoZWlnaHQuIElm
IGFuIG9iamVjdCBpcyBwYXNzZWQsIHRoZSBzY3JlZW5zaG90IHNpemUKKyAgICAgKiB3aWxsIGJl
IGRlcml2ZWQgZnJvbSB0aGUgcGFyYW1ldGVycy4gVGhlIHByZWNpc2lvbiBwcm9wZXJ0eSBpcyBh
IG11bHRpcGxpZXIgYWxsb3dpbmcKKyAgICAgKiByZW5kZXJpbmcgYXQgYSBoaWdoZXIgb3IgbG93
ZXIgcmVzb2x1dGlvbgorICAgICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgVGhlIGNhbGxiYWNr
IHJlY2VpdmVzIGEgc2luZ2xlIHBhcmFtZXRlciB3aGljaCBjb250YWlucyB0aGUKKyAgICAgKiBz
Y3JlZW5zaG90IGFzIGEgc3RyaW5nIG9mIGJhc2U2NC1lbmNvZGVkIGNoYXJhY3RlcnMuIFRoaXMg
c3RyaW5nIGNhbiBiZSBhc3NpZ25lZCB0byB0aGUKKyAgICAgKiBzcmMgcGFyYW1ldGVyIG9mIGFu
IDxpbWc+IHRvIGRpc3BsYXkgaXQKKyAgICAgKiBAcGFyYW0gbWltZVR5cGUgVGhlIE1JTUUgdHlw
ZSBvZiB0aGUgc2NyZWVuc2hvdCBpbWFnZSAoZGVmYXVsdDogaW1hZ2UvcG5nKS4KKyAgICAgKiBD
aGVjayB5b3VyIGJyb3dzZXIgZm9yIHN1cHBvcnRlZCBNSU1FIHR5cGVzCisgICAgICogQHBhcmFt
IHNhbXBsZXMgVGV4dHVyZSBzYW1wbGVzIChkZWZhdWx0OiAxKQorICAgICAqIEBwYXJhbSBhbnRp
YWxpYXNpbmcgV2hldGhlciBhbnRpYWxpYXNpbmcgc2hvdWxkIGJlIHR1cm5lZCBvbiBvciBub3Qg
KGRlZmF1bHQ6IGZhbHNlKQorICAgICAqIEBwYXJhbSBmaWxlTmFtZSBBIG5hbWUgZm9yIGZvciB0
aGUgZG93bmxvYWRlZCBmaWxlLgorICAgICAqLworICAgIFRvb2xzLkNyZWF0ZVNjcmVlbnNob3RV
c2luZ1JlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChlbmdpbmUsIGNhbWVyYSwgc2l6ZSwgc3VjY2Vz
c0NhbGxiYWNrLCBtaW1lVHlwZSwgc2FtcGxlcywgYW50aWFsaWFzaW5nLCBmaWxlTmFtZSkgewor
ICAgICAgICBpZiAobWltZVR5cGUgPT09IHZvaWQgMCkgeyBtaW1lVHlwZSA9ICJpbWFnZS9wbmci
OyB9CisgICAgICAgIGlmIChzYW1wbGVzID09PSB2b2lkIDApIHsgc2FtcGxlcyA9IDE7IH0KKyAg
ICAgICAgaWYgKGFudGlhbGlhc2luZyA9PT0gdm9pZCAwKSB7IGFudGlhbGlhc2luZyA9IGZhbHNl
OyB9CisgICAgICAgIHRocm93IF9kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJTY3JlZW5zaG90VG9vbHMiKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdlbmVyYXRlcyBhbiBpbWFnZSBzY3JlZW5zaG90IGZyb20gdGhlIHNwZWNp
ZmllZCBjYW1lcmEuCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3Rv
L3JlbmRlcl9zY2VuZV9vbl9hX3BuZworICAgICAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB0
byB1c2UgZm9yIHJlbmRlcmluZworICAgICAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0byB1
c2UgZm9yIHJlbmRlcmluZworICAgICAqIEBwYXJhbSBzaXplIFRoaXMgcGFyYW1ldGVyIGNhbiBi
ZSBzZXQgdG8gYSBzaW5nbGUgbnVtYmVyIG9yIHRvIGFuIG9iamVjdCB3aXRoIHRoZQorICAgICAq
IGZvbGxvd2luZyAob3B0aW9uYWwpIHByb3BlcnRpZXM6IHByZWNpc2lvbiwgd2lkdGgsIGhlaWdo
dC4gSWYgYSBzaW5nbGUgbnVtYmVyIGlzIHBhc3NlZCwKKyAgICAgKiBpdCB3aWxsIGJlIHVzZWQg
Zm9yIGJvdGggd2lkdGggYW5kIGhlaWdodC4gSWYgYW4gb2JqZWN0IGlzIHBhc3NlZCwgdGhlIHNj
cmVlbnNob3Qgc2l6ZQorICAgICAqIHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBwYXJhbWV0ZXJz
LiBUaGUgcHJlY2lzaW9uIHByb3BlcnR5IGlzIGEgbXVsdGlwbGllciBhbGxvd2luZworICAgICAq
IHJlbmRlcmluZyBhdCBhIGhpZ2hlciBvciBsb3dlciByZXNvbHV0aW9uCisgICAgICogQHBhcmFt
IG1pbWVUeXBlIFRoZSBNSU1FIHR5cGUgb2YgdGhlIHNjcmVlbnNob3QgaW1hZ2UgKGRlZmF1bHQ6
IGltYWdlL3BuZykuCisgICAgICogQ2hlY2sgeW91ciBicm93c2VyIGZvciBzdXBwb3J0ZWQgTUlN
RSB0eXBlcworICAgICAqIEBwYXJhbSBzYW1wbGVzIFRleHR1cmUgc2FtcGxlcyAoZGVmYXVsdDog
MSkKKyAgICAgKiBAcGFyYW0gYW50aWFsaWFzaW5nIFdoZXRoZXIgYW50aWFsaWFzaW5nIHNob3Vs
ZCBiZSB0dXJuZWQgb24gb3Igbm90IChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKiBAcGFyYW0gZmls
ZU5hbWUgQSBuYW1lIGZvciBmb3IgdGhlIGRvd25sb2FkZWQgZmlsZS4KKyAgICAgKiBAcmV0dXJu
cyBzY3JlZW5zaG90IGFzIGEgc3RyaW5nIG9mIGJhc2U2NC1lbmNvZGVkIGNoYXJhY3RlcnMuIFRo
aXMgc3RyaW5nIGNhbiBiZSBhc3NpZ25lZAorICAgICAqIHRvIHRoZSBzcmMgcGFyYW1ldGVyIG9m
IGFuIDxpbWc+IHRvIGRpc3BsYXkgaXQKKyAgICAgKi8KKyAgICBUb29scy5DcmVhdGVTY3JlZW5z
aG90VXNpbmdSZW5kZXJUYXJnZXRBc3luYyA9IGZ1bmN0aW9uIChlbmdpbmUsIGNhbWVyYSwgc2l6
ZSwgbWltZVR5cGUsIHNhbXBsZXMsIGFudGlhbGlhc2luZywgZmlsZU5hbWUpIHsKKyAgICAgICAg
aWYgKG1pbWVUeXBlID09PSB2b2lkIDApIHsgbWltZVR5cGUgPSAiaW1hZ2UvcG5nIjsgfQorICAg
ICAgICBpZiAoc2FtcGxlcyA9PT0gdm9pZCAwKSB7IHNhbXBsZXMgPSAxOyB9CisgICAgICAgIGlm
IChhbnRpYWxpYXNpbmcgPT09IHZvaWQgMCkgeyBhbnRpYWxpYXNpbmcgPSBmYWxzZTsgfQorICAg
ICAgICB0aHJvdyBfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siX0RldlRv
b2xzIl0uV2FybkltcG9ydCgiU2NyZWVuc2hvdFRvb2xzIik7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBJbXBsZW1lbnRhdGlvbiBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlv
bnMvMTA1MDM0L2hvdy10by1jcmVhdGUtYS1ndWlkLXV1aWQtaW4tamF2YXNjcmlwdC8yMTE3NTIz
I2Fuc3dlci0yMTE3NTIzCisgICAgICogQmUgYXdhcmUgTWF0aC5yYW5kb20oKSBjb3VsZCBjYXVz
ZSBjb2xsaXNpb25zLCBidXQ6CisgICAgICogIkFsbCBidXQgNiBvZiB0aGUgMTI4IGJpdHMgb2Yg
dGhlIElEIGFyZSByYW5kb21seSBnZW5lcmF0ZWQsIHdoaWNoIG1lYW5zIHRoYXQgZm9yIGFueSB0
d28gaWRzLCB0aGVyZSdzIGEgMSBpbiAyXl4xMjIgKG9yIDUuM3gxMF5eMzYpIGNoYW5jZSB0aGV5
J2xsIGNvbGxpZGUiCisgICAgICogQHJldHVybnMgYSBwc2V1ZG8gcmFuZG9tIGlkCisgICAgICov
CisgICAgVG9vbHMuUmFuZG9tSWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBfZ3Vp
ZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siR1VJRCJdLlJhbmRvbUlkKCk7CisgICAg
fTsKKyAgICAvKioKKyAgICAqIFRlc3QgaWYgdGhlIGdpdmVuIHVyaSBpcyBhIGJhc2U2NCBzdHJp
bmcKKyAgICAqIEBwYXJhbSB1cmkgVGhlIHVyaSB0byB0ZXN0CisgICAgKiBAcmV0dXJuIFRydWUg
aWYgdGhlIHVyaSBpcyBhIGJhc2U2NCBzdHJpbmcgb3IgZmFsc2Ugb3RoZXJ3aXNlCisgICAgKi8K
KyAgICBUb29scy5Jc0Jhc2U2NCA9IGZ1bmN0aW9uICh1cmkpIHsKKyAgICAgICAgcmV0dXJuIHVy
aS5sZW5ndGggPCA1ID8gZmFsc2UgOiB1cmkuc3Vic3RyKDAsIDUpID09PSAiZGF0YToiOworICAg
IH07CisgICAgLyoqCisgICAgKiBEZWNvZGUgdGhlIGdpdmVuIGJhc2U2NCB1cmkuCisgICAgKiBA
cGFyYW0gdXJpIFRoZSB1cmkgdG8gZGVjb2RlCisgICAgKiBAcmV0dXJuIFRoZSBkZWNvZGVkIGJh
c2U2NCBkYXRhLgorICAgICovCisgICAgVG9vbHMuRGVjb2RlQmFzZTY0ID0gZnVuY3Rpb24gKHVy
aSkgeworICAgICAgICB2YXIgZGVjb2RlZFN0cmluZyA9IGF0b2IodXJpLnNwbGl0KCIsIilbMV0p
OworICAgICAgICB2YXIgYnVmZmVyTGVuZ3RoID0gZGVjb2RlZFN0cmluZy5sZW5ndGg7CisgICAg
ICAgIHZhciBidWZmZXJWaWV3ID0gbmV3IFVpbnQ4QXJyYXkobmV3IEFycmF5QnVmZmVyKGJ1ZmZl
ckxlbmd0aCkpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICBidWZmZXJWaWV3W2ldID0gZGVjb2RlZFN0cmluZy5jaGFyQ29kZUF0
KGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidWZmZXJWaWV3LmJ1ZmZlcjsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGFic29sdXRlIHVybC4KKyAgICAgKiBAcGFyYW0g
dXJsIHRoZSBpbnB1dCB1cmwKKyAgICAgKiBAcmV0dXJuIHRoZSBhYnNvbHV0ZSB1cmwKKyAgICAg
Ki8KKyAgICBUb29scy5HZXRBYnNvbHV0ZVVybCA9IGZ1bmN0aW9uICh1cmwpIHsKKyAgICAgICAg
dmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CisgICAgICAgIGEuaHJlZiA9IHVy
bDsKKyAgICAgICAgcmV0dXJuIGEuaHJlZjsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShUb29scywgImVycm9yc0NvdW50IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBhIHZhbHVlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBsb2FkaW5nIGVycm9ycworICAgICAg
ICAgKiBAaWdub3JlbmFtaW5nCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiBfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkxvZ2dlciJdLmVycm9yc0NvdW50OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAg
ICAgKiBMb2cgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlCisgICAgICogQHBhcmFtIG1lc3NhZ2Ug
ZGVmaW5lcyB0aGUgbWVzc2FnZSB0byBsb2cKKyAgICAgKi8KKyAgICBUb29scy5Mb2cgPSBmdW5j
dGlvbiAobWVzc2FnZSkgeworICAgICAgICBfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkxvZ2dlciJdLkxvZyhtZXNzYWdlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFdy
aXRlIGEgd2FybmluZyBtZXNzYWdlIHRvIHRoZSBjb25zb2xlCisgICAgICogQHBhcmFtIG1lc3Nh
Z2UgZGVmaW5lcyB0aGUgbWVzc2FnZSB0byBsb2cKKyAgICAgKi8KKyAgICBUb29scy5XYXJuID0g
ZnVuY3Rpb24gKG1lc3NhZ2UpIHsKKyAgICAgICAgX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJMb2dnZXIiXS5XYXJuKG1lc3NhZ2UpOworICAgIH07CisgICAgLyoqCisgICAg
ICogV3JpdGUgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgY29uc29sZQorICAgICAqIEBwYXJhbSBt
ZXNzYWdlIGRlZmluZXMgdGhlIG1lc3NhZ2UgdG8gbG9nCisgICAgICovCisgICAgVG9vbHMuRXJy
b3IgPSBmdW5jdGlvbiAobWVzc2FnZSkgeworICAgICAgICBfbG9nZ2VyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkxvZ2dlciJdLkVycm9yKG1lc3NhZ2UpOworICAgIH07CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFRvb2xzLCAiTG9nQ2FjaGUiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIGN1cnJlbnQgbG9nIGNhY2hlIChsaXN0IG9mIGxvZ3MpCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkxvZ2dlciJdLkxvZ0NhY2hlOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBDbGVhcnMgdGhlIGxvZyBjYWNoZQorICAgICAq
LworICAgIFRvb2xzLkNsZWFyTG9nQ2FjaGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9sb2dn
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siTG9nZ2VyIl0uQ2xlYXJMb2dDYWNoZSgp
OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvb2xzLCAiTG9nTGV2ZWxzIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgY3VycmVudCBsb2cgbGV2ZWwgKE1l
c3NhZ2VMb2dMZXZlbCAvIFdhcm5pbmdMb2dMZXZlbCAvIEVycm9yTG9nTGV2ZWwpCisgICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsZXZlbCkgeworICAgICAgICAgICAgX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5Mb2dMZXZlbHMgPSBsZXZl
bDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvb2xzLCAi
UGVyZm9ybWFuY2VMb2dMZXZlbCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhl
IGN1cnJlbnQgcGVyZm9ybWFuY2UgbG9nIGxldmVsCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uIChsZXZlbCkgeworICAgICAgICAgICAgaWYgKChsZXZlbCAmIFRvb2xzLlBlcmZv
cm1hbmNlVXNlck1hcmtMb2dMZXZlbCkgPT09IFRvb2xzLlBlcmZvcm1hbmNlVXNlck1hcmtMb2dM
ZXZlbCkgeworICAgICAgICAgICAgICAgIFRvb2xzLlN0YXJ0UGVyZm9ybWFuY2VDb3VudGVyID0g
VG9vbHMuX1N0YXJ0VXNlck1hcms7CisgICAgICAgICAgICAgICAgVG9vbHMuRW5kUGVyZm9ybWFu
Y2VDb3VudGVyID0gVG9vbHMuX0VuZFVzZXJNYXJrOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgobGV2ZWwgJiBUb29scy5QZXJmb3JtYW5j
ZUNvbnNvbGVMb2dMZXZlbCkgPT09IFRvb2xzLlBlcmZvcm1hbmNlQ29uc29sZUxvZ0xldmVsKSB7
CisgICAgICAgICAgICAgICAgVG9vbHMuU3RhcnRQZXJmb3JtYW5jZUNvdW50ZXIgPSBUb29scy5f
U3RhcnRQZXJmb3JtYW5jZUNvbnNvbGU7CisgICAgICAgICAgICAgICAgVG9vbHMuRW5kUGVyZm9y
bWFuY2VDb3VudGVyID0gVG9vbHMuX0VuZFBlcmZvcm1hbmNlQ29uc29sZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUb29scy5TdGFydFBlcmZv
cm1hbmNlQ291bnRlciA9IFRvb2xzLl9TdGFydFBlcmZvcm1hbmNlQ291bnRlckRpc2FibGVkOwor
ICAgICAgICAgICAgVG9vbHMuRW5kUGVyZm9ybWFuY2VDb3VudGVyID0gVG9vbHMuX0VuZFBlcmZv
cm1hbmNlQ291bnRlckRpc2FibGVkOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBUb29scy5fU3Rh
cnRQZXJmb3JtYW5jZUNvdW50ZXJEaXNhYmxlZCA9IGZ1bmN0aW9uIChjb3VudGVyTmFtZSwgY29u
ZGl0aW9uKSB7CisgICAgfTsKKyAgICBUb29scy5fRW5kUGVyZm9ybWFuY2VDb3VudGVyRGlzYWJs
ZWQgPSBmdW5jdGlvbiAoY291bnRlck5hbWUsIGNvbmRpdGlvbikgeworICAgIH07CisgICAgVG9v
bHMuX1N0YXJ0VXNlck1hcmsgPSBmdW5jdGlvbiAoY291bnRlck5hbWUsIGNvbmRpdGlvbikgewor
ICAgICAgICBpZiAoY29uZGl0aW9uID09PSB2b2lkIDApIHsgY29uZGl0aW9uID0gdHJ1ZTsgfQor
ICAgICAgICBpZiAoIVRvb2xzLl9wZXJmb3JtYW5jZSkgeworICAgICAgICAgICAgaWYgKCFfZG9t
TWFuYWdlbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJEb21NYW5hZ2VtZW50Il0u
SXNXaW5kb3dPYmplY3RFeGlzdCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgVG9vbHMuX3BlcmZvcm1hbmNlID0gd2luZG93LnBlcmZvcm1h
bmNlOworICAgICAgICB9CisgICAgICAgIGlmICghY29uZGl0aW9uIHx8ICFUb29scy5fcGVyZm9y
bWFuY2UubWFyaykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFRv
b2xzLl9wZXJmb3JtYW5jZS5tYXJrKGNvdW50ZXJOYW1lICsgIi1CZWdpbiIpOworICAgIH07Cisg
ICAgVG9vbHMuX0VuZFVzZXJNYXJrID0gZnVuY3Rpb24gKGNvdW50ZXJOYW1lLCBjb25kaXRpb24p
IHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdm9pZCAwKSB7IGNvbmRpdGlvbiA9IHRydWU7
IH0KKyAgICAgICAgaWYgKCFjb25kaXRpb24gfHwgIVRvb2xzLl9wZXJmb3JtYW5jZS5tYXJrKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgVG9vbHMuX3BlcmZvcm1h
bmNlLm1hcmsoY291bnRlck5hbWUgKyAiLUVuZCIpOworICAgICAgICBUb29scy5fcGVyZm9ybWFu
Y2UubWVhc3VyZShjb3VudGVyTmFtZSwgY291bnRlck5hbWUgKyAiLUJlZ2luIiwgY291bnRlck5h
bWUgKyAiLUVuZCIpOworICAgIH07CisgICAgVG9vbHMuX1N0YXJ0UGVyZm9ybWFuY2VDb25zb2xl
ID0gZnVuY3Rpb24gKGNvdW50ZXJOYW1lLCBjb25kaXRpb24pIHsKKyAgICAgICAgaWYgKGNvbmRp
dGlvbiA9PT0gdm9pZCAwKSB7IGNvbmRpdGlvbiA9IHRydWU7IH0KKyAgICAgICAgaWYgKCFjb25k
aXRpb24pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBUb29scy5f
U3RhcnRVc2VyTWFyayhjb3VudGVyTmFtZSwgY29uZGl0aW9uKTsKKyAgICAgICAgaWYgKGNvbnNv
bGUudGltZSkgeworICAgICAgICAgICAgY29uc29sZS50aW1lKGNvdW50ZXJOYW1lKTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgVG9vbHMuX0VuZFBlcmZvcm1hbmNlQ29uc29sZSA9IGZ1bmN0aW9u
IChjb3VudGVyTmFtZSwgY29uZGl0aW9uKSB7CisgICAgICAgIGlmIChjb25kaXRpb24gPT09IHZv
aWQgMCkgeyBjb25kaXRpb24gPSB0cnVlOyB9CisgICAgICAgIGlmICghY29uZGl0aW9uKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgVG9vbHMuX0VuZFVzZXJNYXJr
KGNvdW50ZXJOYW1lLCBjb25kaXRpb24pOworICAgICAgICBpZiAoY29uc29sZS50aW1lKSB7Cisg
ICAgICAgICAgICBjb25zb2xlLnRpbWVFbmQoY291bnRlck5hbWUpOworICAgICAgICB9CisgICAg
fTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9vbHMsICJOb3ciLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIGVpdGhlciB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkgaWYgc3Vw
cG9ydGVkIG9yIERhdGUubm93KCkgZWxzZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX3ByZWNpc2lvbkRhdGVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1siUHJlY2lzaW9uRGF0ZSJdLk5vdzsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIG5hbWUgb2YgdGhl
IGNsYXNzIHVzZWQgdG8gY3JlYXRlIHRoZSBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0Lgor
ICAgICAqIEl0IHdpbGwgd29ya3Mgb25seSBvbiBKYXZhc2NyaXB0IGJhc2ljIGRhdGEgdHlwZXMg
KG51bWJlciwgc3RyaW5nLCAuLi4pIGFuZCBpbnN0YW5jZSBvZiBjbGFzcyBkZWNsYXJlZCB3aXRo
IHRoZSBAY2xhc3NOYW1lIGRlY29yYXRvci4KKyAgICAgKiBAcGFyYW0gb2JqZWN0IHRoZSBvYmpl
Y3QgdG8gZ2V0IHRoZSBjbGFzcyBuYW1lIGZyb20KKyAgICAgKiBAcGFyYW0gaXNUeXBlIGRlZmlu
ZXMgaWYgdGhlIG9iamVjdCBpcyBhY3R1YWxseSBhIHR5cGUKKyAgICAgKiBAcmV0dXJucyB0aGUg
bmFtZSBvZiB0aGUgY2xhc3MsIHdpbGwgYmUgIm9iamVjdCIgZm9yIGEgY3VzdG9tIGRhdGEgdHlw
ZSBub3QgdXNpbmcgdGhlIEBjbGFzc05hbWUgZGVjb3JhdG9yCisgICAgICovCisgICAgVG9vbHMu
R2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKG9iamVjdCwgaXNUeXBlKSB7CisgICAgICAgIGlmIChp
c1R5cGUgPT09IHZvaWQgMCkgeyBpc1R5cGUgPSBmYWxzZTsgfQorICAgICAgICB2YXIgbmFtZSA9
IG51bGw7CisgICAgICAgIGlmICghaXNUeXBlICYmIG9iamVjdC5nZXRDbGFzc05hbWUpIHsKKyAg
ICAgICAgICAgIG5hbWUgPSBvYmplY3QuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgT2JqZWN0KSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGNsYXNzT2JqID0gaXNUeXBlID8gb2JqZWN0IDogT2JqZWN0Lmdl
dFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgICAgICAgICAgICAgbmFtZSA9IGNsYXNzT2JqLmNv
bnN0cnVjdG9yWyJfX2Jqc2NsYXNzTmFtZV9fIl07CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICBuYW1lID0gdHlwZW9mIG9iamVjdDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldHMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkgc2F0aXNmeWlu
ZyBhIGdpdmVuIHByZWRpY2F0ZQorICAgICAqIEBwYXJhbSBhcnJheSBkZWZpbmVzIHRoZSBhcnJh
eSB0byBicm93c2UKKyAgICAgKiBAcGFyYW0gcHJlZGljYXRlIGRlZmluZXMgdGhlIHByZWRpY2F0
ZSB0byB1c2UKKyAgICAgKiBAcmV0dXJucyBudWxsIGlmIG5vdCBmb3VuZCBvciB0aGUgZWxlbWVu
dAorICAgICAqLworICAgIFRvb2xzLkZpcnN0ID0gZnVuY3Rpb24gKGFycmF5LCBwcmVkaWNhdGUp
IHsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBhcnJheV8xID0gYXJyYXk7IF9pIDwgYXJyYXlf
MS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBlbCA9IGFycmF5XzFbX2ldOworICAg
ICAgICAgICAgaWYgKHByZWRpY2F0ZShlbCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWw7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgbmFtZSBvZiB0aGUg
ZnVsbCBuYW1lIG9mIHRoZSBjbGFzcywgaW5jbHVkaW5nIGl0cyBvd25pbmcgbW9kdWxlIChpZiBh
bnkpLgorICAgICAqIEl0IHdpbGwgd29ya3Mgb25seSBvbiBKYXZhc2NyaXB0IGJhc2ljIGRhdGEg
dHlwZXMgKG51bWJlciwgc3RyaW5nLCAuLi4pIGFuZCBpbnN0YW5jZSBvZiBjbGFzcyBkZWNsYXJl
ZCB3aXRoIHRoZSBAY2xhc3NOYW1lIGRlY29yYXRvciBvciBpbXBsZW1lbnRpbmcgYSBtZXRob2Qg
Z2V0Q2xhc3NOYW1lKCk6c3RyaW5nIChpbiB3aGljaCBjYXNlIHRoZSBtb2R1bGUgd29uJ3QgYmUg
c3BlY2lmaWVkKS4KKyAgICAgKiBAcGFyYW0gb2JqZWN0IHRoZSBvYmplY3QgdG8gZ2V0IHRoZSBj
bGFzcyBuYW1lIGZyb20KKyAgICAgKiBAcGFyYW0gaXNUeXBlIGRlZmluZXMgaWYgdGhlIG9iamVj
dCBpcyBhY3R1YWxseSBhIHR5cGUKKyAgICAgKiBAcmV0dXJuIGEgc3RyaW5nIHRoYXQgY2FuIGhh
dmUgdHdvIGZvcm1zOiAibW9kdWxlTmFtZS5jbGFzc05hbWUiIGlmIG1vZHVsZSB3YXMgc3BlY2lm
aWVkIHdoZW4gdGhlIGNsYXNzJyBOYW1lIHdhcyByZWdpc3RlcmVkIG9yICJjbGFzc05hbWUiIGlm
IHRoZXJlIHdhcyBub3QgbW9kdWxlIHNwZWNpZmllZC4KKyAgICAgKiBAaWdub3JlbmFtaW5nCisg
ICAgICovCisgICAgVG9vbHMuZ2V0RnVsbENsYXNzTmFtZSA9IGZ1bmN0aW9uIChvYmplY3QsIGlz
VHlwZSkgeworICAgICAgICBpZiAoaXNUeXBlID09PSB2b2lkIDApIHsgaXNUeXBlID0gZmFsc2U7
IH0KKyAgICAgICAgdmFyIGNsYXNzTmFtZSA9IG51bGw7CisgICAgICAgIHZhciBtb2R1bGVOYW1l
ID0gbnVsbDsKKyAgICAgICAgaWYgKCFpc1R5cGUgJiYgb2JqZWN0LmdldENsYXNzTmFtZSkgewor
ICAgICAgICAgICAgY2xhc3NOYW1lID0gb2JqZWN0LmdldENsYXNzTmFtZSgpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE9iamVj
dCkgeworICAgICAgICAgICAgICAgIHZhciBjbGFzc09iaiA9IGlzVHlwZSA/IG9iamVjdCA6IE9i
amVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9
IGNsYXNzT2JqLmNvbnN0cnVjdG9yWyJfX2Jqc2NsYXNzTmFtZV9fIl07CisgICAgICAgICAgICAg
ICAgbW9kdWxlTmFtZSA9IGNsYXNzT2JqLmNvbnN0cnVjdG9yWyJfX2Jqc21vZHVsZU5hbWVfXyJd
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjbGFzc05hbWUpIHsKKyAgICAgICAg
ICAgICAgICBjbGFzc05hbWUgPSB0eXBlb2Ygb2JqZWN0OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmICghY2xhc3NOYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gKChtb2R1bGVOYW1lICE9IG51bGwpID8gKG1vZHVs
ZU5hbWUgKyAiLiIpIDogIiIpICsgY2xhc3NOYW1lOworICAgIH07CisgICAgLyoqCisgICAgICog
UmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZ2l2ZW4gYW1vdW50IG9m
IHRpbWUuCisgICAgICogQHBhcmFtIGRlbGF5IE51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVs
YXkKKyAgICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGdpdmVu
IGFtb3VudCBvZiB0aW1lCisgICAgICovCisgICAgVG9vbHMuRGVsYXlBc3luYyA9IGZ1bmN0aW9u
IChkZWxheSkgeworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUp
IHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg
IHJlc29sdmUoKTsKKyAgICAgICAgICAgIH0sIGRlbGF5KTsKKyAgICAgICAgfSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBFbmFibGUvRGlzYWJsZSBDdXN0b20gSFRUUCBSZXF1ZXN0IEhlYWRl
cnMgZ2xvYmFsbHkuCisgICAgICogZGVmYXVsdCA9IGZhbHNlCisgICAgICogQHNlZSBDdXN0b21S
ZXF1ZXN0SGVhZGVycworICAgICAqLworICAgIFRvb2xzLlVzZUN1c3RvbVJlcXVlc3RIZWFkZXJz
ID0gZmFsc2U7CisgICAgLyoqCisgICAgICogQ3VzdG9tIEhUVFAgUmVxdWVzdCBIZWFkZXJzIHRv
IGJlIHNlbnQgd2l0aCBYTUxIdHRwUmVxdWVzdHMKKyAgICAgKiBpLmUuIHdoZW4gbG9hZGluZyBm
aWxlcywgd2hlcmUgdGhlIHNlcnZlci9zZXJ2aWNlIGV4cGVjdHMgYW4gQXV0aG9yaXphdGlvbiBo
ZWFkZXIKKyAgICAgKi8KKyAgICBUb29scy5DdXN0b21SZXF1ZXN0SGVhZGVycyA9IF93ZWJSZXF1
ZXN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIldlYlJlcXVlc3QiXS5DdXN0b21SZXF1
ZXN0SGVhZGVyczsKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGJlaGF2aW91ciBmb3IgY29ycyBp
biB0aGUgYXBwbGljYXRpb24uCisgICAgICogSXQgY2FuIGJlIGEgc3RyaW5nIGlmIHRoZSBleHBl
Y3RlZCBiZWhhdmlvciBpcyBpZGVudGljYWwgaW4gdGhlIGVudGlyZSBhcHAuCisgICAgICogT3Ig
YSBjYWxsYmFjayB0byBiZSBhYmxlIHRvIHNldCBpdCBwZXIgdXJsIG9yIG9uIGEgZ3JvdXAgb2Yg
dGhlbSAoaW4gY2FzZSBvZiBWaWRlbyBzb3VyY2UgZm9yIGluc3RhbmNlKQorICAgICAqLworICAg
IFRvb2xzLkNvcnNCZWhhdmlvciA9ICJhbm9ueW1vdXMiOworICAgIFRvb2xzLl90bXBGbG9hdEFy
cmF5ID0gbmV3IEZsb2F0MzJBcnJheSgxKTsKKyAgICAvKioKKyAgICAgKiBFeHRyYWN0cyB0ZXh0
IGNvbnRlbnQgZnJvbSBhIERPTSBlbGVtZW50IGhpZXJhcmNoeQorICAgICAqIEJhY2sgQ29tcGF0
IG9ubHksIHBsZWFzZSB1c2UgRG9tTWFuYWdlbWVudC5HZXRET01UZXh0Q29udGVudCBpbnN0ZWFk
LgorICAgICAqLworICAgIFRvb2xzLkdldERPTVRleHRDb250ZW50ID0gX2RvbU1hbmFnZW1lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRG9tTWFuYWdlbWVudCJdLkdldERPTVRleHRD
b250ZW50OworICAgIC8vIExvZ3MKKyAgICAvKioKKyAgICAgKiBObyBsb2cKKyAgICAgKi8KKyAg
ICBUb29scy5Ob25lTG9nTGV2ZWwgPSBfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkxvZ2dlciJdLk5vbmVMb2dMZXZlbDsKKyAgICAvKioKKyAgICAgKiBPbmx5IG1lc3NhZ2Ug
bG9ncworICAgICAqLworICAgIFRvb2xzLk1lc3NhZ2VMb2dMZXZlbCA9IF9sb2dnZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siTG9nZ2VyIl0uTWVzc2FnZUxvZ0xldmVsOworICAgIC8q
KgorICAgICAqIE9ubHkgd2FybmluZyBsb2dzCisgICAgICovCisgICAgVG9vbHMuV2FybmluZ0xv
Z0xldmVsID0gX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5X
YXJuaW5nTG9nTGV2ZWw7CisgICAgLyoqCisgICAgICogT25seSBlcnJvciBsb2dzCisgICAgICov
CisgICAgVG9vbHMuRXJyb3JMb2dMZXZlbCA9IF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siTG9nZ2VyIl0uRXJyb3JMb2dMZXZlbDsKKyAgICAvKioKKyAgICAgKiBBbGwgbG9n
cworICAgICAqLworICAgIFRvb2xzLkFsbExvZ0xldmVsID0gX2xvZ2dlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5BbGxMb2dMZXZlbDsKKyAgICAvKioKKyAgICAgKiBD
aGVja3MgaWYgdGhlIHdpbmRvdyBvYmplY3QgZXhpc3RzCisgICAgICogQmFjayBDb21wYXQgb25s
eSwgcGxlYXNlIHVzZSBEb21NYW5hZ2VtZW50LklzV2luZG93T2JqZWN0RXhpc3QgaW5zdGVhZC4K
KyAgICAgKi8KKyAgICBUb29scy5Jc1dpbmRvd09iamVjdEV4aXN0ID0gX2RvbU1hbmFnZW1lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRG9tTWFuYWdlbWVudCJdLklzV2luZG93T2Jq
ZWN0RXhpc3Q7CisgICAgLy8gUGVyZm9ybWFuY2VzCisgICAgLyoqCisgICAgICogTm8gcGVyZm9y
bWFuY2UgbG9nCisgICAgICovCisgICAgVG9vbHMuUGVyZm9ybWFuY2VOb25lTG9nTGV2ZWwgPSAw
OworICAgIC8qKgorICAgICAqIFVzZSB1c2VyIG1hcmtzIHRvIGxvZyBwZXJmb3JtYW5jZQorICAg
ICAqLworICAgIFRvb2xzLlBlcmZvcm1hbmNlVXNlck1hcmtMb2dMZXZlbCA9IDE7CisgICAgLyoq
CisgICAgICogTG9nIHBlcmZvcm1hbmNlIHRvIHRoZSBjb25zb2xlCisgICAgICovCisgICAgVG9v
bHMuUGVyZm9ybWFuY2VDb25zb2xlTG9nTGV2ZWwgPSAyOworICAgIC8qKgorICAgICAqIFN0YXJ0
cyBhIHBlcmZvcm1hbmNlIGNvdW50ZXIKKyAgICAgKi8KKyAgICBUb29scy5TdGFydFBlcmZvcm1h
bmNlQ291bnRlciA9IFRvb2xzLl9TdGFydFBlcmZvcm1hbmNlQ291bnRlckRpc2FibGVkOworICAg
IC8qKgorICAgICAqIEVuZHMgYSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBjb3V0bmVyCisgICAgICov
CisgICAgVG9vbHMuRW5kUGVyZm9ybWFuY2VDb3VudGVyID0gVG9vbHMuX0VuZFBlcmZvcm1hbmNl
Q291bnRlckRpc2FibGVkOworICAgIHJldHVybiBUb29sczsKK30oKSk7CisKKy8qKgorICogVXNl
IHRoaXMgY2xhc3NOYW1lIGFzIGEgZGVjb3JhdG9yIG9uIGEgZ2l2ZW4gY2xhc3MgZGVmaW5pdGlv
biB0byBhZGQgaXQgYSBuYW1lIGFuZCBvcHRpb25hbGx5IGl0cyBtb2R1bGUuCisgKiBZb3UgY2Fu
IHRoZW4gdXNlIHRoZSBUb29scy5nZXRDbGFzc05hbWUob2JqKSBvbiBhbiBpbnN0YW5jZSB0byBy
ZXRyaWV2ZSBpdHMgY2xhc3MgbmFtZS4KKyAqIFRoaXMgbWV0aG9kIGlzIHRoZSBvbmx5IHdheSB0
byBnZXQgaXQgZG9uZSBpbiBhbGwgY2FzZXMsIGV2ZW4gaWYgdGhlIC5qcyBmaWxlIGRlY2xhcmlu
ZyB0aGUgY2xhc3MgaXMgbWluaWZpZWQKKyAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBj
bGFzcywgY2FzZSBzaG91bGQgYmUgcHJlc2VydmVkCisgKiBAcGFyYW0gbW9kdWxlIFRoZSBuYW1l
IG9mIHRoZSBNb2R1bGUgaG9zdGluZyB0aGUgY2xhc3MsIG9wdGlvbmFsLCBidXQgc3Ryb25nbHkg
cmVjb21tZW5kZWQgdG8gc3BlY2lmeSBpZiBwb3NzaWJsZS4gQ2FzZSBzaG91bGQgYmUgcHJlc2Vy
dmVkLgorICovCitmdW5jdGlvbiBjbGFzc05hbWUobmFtZSwgbW9kdWxlKSB7CisgICAgcmV0dXJu
IGZ1bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAgdGFyZ2V0WyJfX2Jqc2NsYXNzTmFtZV9fIl0g
PSBuYW1lOworICAgICAgICB0YXJnZXRbIl9fYmpzbW9kdWxlTmFtZV9fIl0gPSAobW9kdWxlICE9
IG51bGwpID8gbW9kdWxlIDogbnVsbDsKKyAgICB9OworfQorLyoqCisgKiBBbiBpbXBsZW1lbnRh
dGlvbiBvZiBhIGxvb3AgZm9yIGFzeW5jaHJvbm91cyBmdW5jdGlvbnMuCisgKi8KK3ZhciBBc3lu
Y0xvb3AgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ29u
c3RydWN0b3IuCisgICAgICogQHBhcmFtIGl0ZXJhdGlvbnMgdGhlIG51bWJlciBvZiBpdGVyYXRp
b25zLgorICAgICAqIEBwYXJhbSBmdW5jIHRoZSBmdW5jdGlvbiB0byBydW4gZWFjaCBpdGVyYXRp
b24KKyAgICAgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIHRoZSBjYWxsYmFjayB0aGF0IHdpbGwg
YmUgY2FsbGVkIHVwb24gc3VjY2VzZnVsIGV4ZWN1dGlvbgorICAgICAqIEBwYXJhbSBvZmZzZXQg
c3RhcnRpbmcgb2Zmc2V0LgorICAgICAqLworICAgIGZ1bmN0aW9uIEFzeW5jTG9vcCgKKyAgICAv
KioKKyAgICAgKiBEZWZpbmVzIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgdGhlIGxvb3AK
KyAgICAgKi8KKyAgICBpdGVyYXRpb25zLCBmdW5jLCBzdWNjZXNzQ2FsbGJhY2ssIG9mZnNldCkg
eworICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsgb2Zmc2V0ID0gMDsgfQorICAgICAg
ICB0aGlzLml0ZXJhdGlvbnMgPSBpdGVyYXRpb25zOworICAgICAgICB0aGlzLmluZGV4ID0gb2Zm
c2V0IC0gMTsKKyAgICAgICAgdGhpcy5fZG9uZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9mbiA9
IGZ1bmM7CisgICAgICAgIHRoaXMuX3N1Y2Nlc3NDYWxsYmFjayA9IHN1Y2Nlc3NDYWxsYmFjazsK
KyAgICB9CisgICAgLyoqCisgICAgICogRXhlY3V0ZSB0aGUgbmV4dCBpdGVyYXRpb24uIE11c3Qg
YmUgY2FsbGVkIGFmdGVyIHRoZSBsYXN0IGl0ZXJhdGlvbiB3YXMgZmluaXNoZWQuCisgICAgICov
CisgICAgQXN5bmNMb29wLnByb3RvdHlwZS5leGVjdXRlTmV4dCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9kb25lKSB7CisgICAgICAgICAgICBpZiAodGhpcy5pbmRleCArIDEg
PCB0aGlzLml0ZXJhdGlvbnMpIHsKKyAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAg
ICAgICAgICAgICAgdGhpcy5fZm4odGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmJyZWFrTG9vcCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBCcmVhayB0aGUgbG9vcCBhbmQgcnVu
IHRoZSBzdWNjZXNzIGNhbGxiYWNrLgorICAgICAqLworICAgIEFzeW5jTG9vcC5wcm90b3R5cGUu
YnJlYWtMb29wID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9kb25lID0gdHJ1ZTsKKyAg
ICAgICAgdGhpcy5fc3VjY2Vzc0NhbGxiYWNrKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGUgYW5kIHJ1biBhbiBhc3luYyBsb29wLgorICAgICAqIEBwYXJhbSBpdGVyYXRpb25zIHRo
ZSBudW1iZXIgb2YgaXRlcmF0aW9ucy4KKyAgICAgKiBAcGFyYW0gZm4gdGhlIGZ1bmN0aW9uIHRv
IHJ1biBlYWNoIGl0ZXJhdGlvbgorICAgICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgdGhlIGNh
bGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgdXBvbiBzdWNjZXNmdWwgZXhlY3V0aW9uCisgICAg
ICogQHBhcmFtIG9mZnNldCBzdGFydGluZyBvZmZzZXQuCisgICAgICogQHJldHVybnMgdGhlIGNy
ZWF0ZWQgYXN5bmMgbG9vcCBvYmplY3QKKyAgICAgKi8KKyAgICBBc3luY0xvb3AuUnVuID0gZnVu
Y3Rpb24gKGl0ZXJhdGlvbnMsIGZuLCBzdWNjZXNzQ2FsbGJhY2ssIG9mZnNldCkgeworICAgICAg
ICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsgb2Zmc2V0ID0gMDsgfQorICAgICAgICB2YXIgbG9v
cCA9IG5ldyBBc3luY0xvb3AoaXRlcmF0aW9ucywgZm4sIHN1Y2Nlc3NDYWxsYmFjaywgb2Zmc2V0
KTsKKyAgICAgICAgbG9vcC5leGVjdXRlTmV4dCgpOworICAgICAgICByZXR1cm4gbG9vcDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEEgZm9yLWxvb3AgdGhhdCB3aWxsIHJ1biBhIGdpdmVuIG51
bWJlciBvZiBpdGVyYXRpb25zIHN5bmNocm9ub3VzIGFuZCB0aGUgcmVzdCBhc3luYy4KKyAgICAg
KiBAcGFyYW0gaXRlcmF0aW9ucyB0b3RhbCBudW1iZXIgb2YgaXRlcmF0aW9ucworICAgICAqIEBw
YXJhbSBzeW5jZWRJdGVyYXRpb25zIG51bWJlciBvZiBzeW5jaHJvbm91cyBpdGVyYXRpb25zIGlu
IGVhY2ggYXN5bmMgaXRlcmF0aW9uLgorICAgICAqIEBwYXJhbSBmbiB0aGUgZnVuY3Rpb24gdG8g
Y2FsbCBlYWNoIGl0ZXJhdGlvbi4KKyAgICAgKiBAcGFyYW0gY2FsbGJhY2sgYSBzdWNjZXNzIGNh
bGwgYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gaXRlcmF0aW5nIHN0b3BzLgorICAgICAq
IEBwYXJhbSBicmVha0Z1bmN0aW9uIGEgYnJlYWsgY29uZGl0aW9uIChvcHRpb25hbCkKKyAgICAg
KiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IHNldHRpbmdzIGZvciB0aGUgc2V0VGltZW91dCBmdW5j
dGlvbi4gZGVmYXVsdCAtIDAuCisgICAgICogQHJldHVybnMgdGhlIGNyZWF0ZWQgYXN5bmMgbG9v
cCBvYmplY3QKKyAgICAgKi8KKyAgICBBc3luY0xvb3AuU3luY0FzeW5jRm9yTG9vcCA9IGZ1bmN0
aW9uIChpdGVyYXRpb25zLCBzeW5jZWRJdGVyYXRpb25zLCBmbiwgY2FsbGJhY2ssIGJyZWFrRnVu
Y3Rpb24sIHRpbWVvdXQpIHsKKyAgICAgICAgaWYgKHRpbWVvdXQgPT09IHZvaWQgMCkgeyB0aW1l
b3V0ID0gMDsgfQorICAgICAgICByZXR1cm4gQXN5bmNMb29wLlJ1bihNYXRoLmNlaWwoaXRlcmF0
aW9ucyAvIHN5bmNlZEl0ZXJhdGlvbnMpLCBmdW5jdGlvbiAobG9vcCkgeworICAgICAgICAgICAg
aWYgKGJyZWFrRnVuY3Rpb24gJiYgYnJlYWtGdW5jdGlvbigpKSB7CisgICAgICAgICAgICAgICAg
bG9vcC5icmVha0xvb3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bmNlZEl0ZXJhdGlvbnM7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbiA9IChsb29wLmluZGV4ICogc3luY2VkSXRlcmF0
aW9ucykgKyBpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbiA+PSBpdGVy
YXRpb25zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmbihpdGVyYXRpb24pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrRnVuY3Rpb24gJiYgYnJlYWtGdW5jdGlv
bigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcC5icmVha0xvb3AoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsb29wLmV4ZWN1
dGVOZXh0KCk7CisgICAgICAgICAgICAgICAgfSwgdGltZW91dCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sIGNhbGxiYWNrKTsKKyAgICB9OworICAgIHJldHVybiBBc3luY0xvb3A7Cit9KCkp
OworCisvLyBXaWxsIG9ubHkgYmUgZGVmaW5lIGlmIFRvb2xzIGlzIGltcG9ydGVkIGZyZWVpbmcg
dXAgc29tZSBzcGFjZSB3aGVuIG9ubHkgZW5naW5lIGlzIHJlcXVpcmVkCitfRW5naW5lc19lbmdp
bmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJFbmdpbmVTdG9yZSJdLkZhbGxi
YWNrVGV4dHVyZSA9ICJkYXRhOmltYWdlL2pwZztiYXNlNjQsLzlqLzRBQVFTa1pKUmdBQkFRRUFZ
QUJnQUFELzRRQm1SWGhwWmdBQVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFB
QUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFBRXhBQUlBQUFBUUFBQUFUZ0FBQUFBQUFBQmdBQUFBQVFB
QUFHQUFBQUFCY0dGcGJuUXVibVYwSURRdU1DNDFBUC9iQUVNQUJBSURBd01DQkFNREF3UUVCQVFG
Q1FZRkJRVUZDd2dJQmdrTkN3ME5EUXNNREE0UUZCRU9EeE1QREF3U0dCSVRGUllYRnhjT0VSa2JH
UllhRkJZWEZ2L2JBRU1CQkFRRUJRVUZDZ1lHQ2hZUERBOFdGaFlXRmhZV0ZoWVdGaFlXRmhZV0Zo
WVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRnYvQUFCRUlBUUFCQUFN
QklnQUNFUUVERVFIL3hBQWZBQUFCQlFFQkFRRUJBUUFBQUFBQUFBQUFBUUlEQkFVR0J3Z0pDZ3Yv
eEFDMUVBQUNBUU1EQWdRREJRVUVCQUFBQVgwQkFnTUFCQkVGRWlFeFFRWVRVV0VISW5FVU1vR1Jv
UWdqUXJIQkZWTFI4Q1F6WW5LQ0NRb1dGeGdaR2lVbUp5Z3BLalExTmpjNE9UcERSRVZHUjBoSlNs
TlVWVlpYV0ZsYVkyUmxabWRvYVdwemRIVjJkM2g1ZW9PRWhZYUhpSW1La3BPVWxaYVhtSm1hb3FP
a3BhYW5xS21xc3JPMHRiYTN1TG02d3NQRXhjYkh5TW5LMHRQVTFkYlgyTm5hNGVMajVPWG01K2pw
NnZIeTgvVDE5dmY0K2ZyL3hBQWZBUUFEQVFFQkFRRUJBUUVCQUFBQUFBQUFBUUlEQkFVR0J3Z0pD
Z3YveEFDMUVRQUNBUUlFQkFNRUJ3VUVCQUFCQW5jQUFRSURFUVFGSVRFR0VrRlJCMkZ4RXlJeWdR
Z1VRcEdoc2NFSkl6TlM4QlZpY3RFS0ZpUTA0U1h4RnhnWkdpWW5LQ2txTlRZM09EazZRMFJGUmtk
SVNVcFRWRlZXVjFoWldtTmtaV1puYUdscWMzUjFkbmQ0ZVhxQ2c0U0Zob2VJaVlxU2s1U1ZscGVZ
bVpxaW82U2xwcWVvcWFxeXM3UzF0cmU0dWJyQ3c4VEZ4c2ZJeWNyUzA5VFYxdGZZMmRyaTQrVGw1
dWZvNmVyeTgvVDE5dmY0K2ZyLzJnQU1Bd0VBQWhFREVRQS9BUEg2S0tLK0ZQNzZQbCtpaWl2dWor
QlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3
NlBsK2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9n
VStvS0tLSytGUDc2UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZLS0srNlA0RkNpaWlnRDZnb29v
cjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlp
dnVqK0JUNmdvb29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tL
K0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytnb29vb0Er
WDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2
Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBs
K2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVUtL
S0tBUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBsK2lpaXZ1aitCVDZnb29vcjRV
L3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVq
K0JUNmdvb29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQ
NzZDaWlpZ0Q1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZL
S0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29v
b3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBsK2lp
aXZ1aitCUW9vb29BK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRG
UHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBsK2lpaXZ1aitCVDZnb29vcjRVL3Zv
K1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVqK0JU
Nmdvb29yNFUvdm9LS0tLQVBsK2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2
aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZLS0sr
NlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0
VS92bytYNktLSys2UDRGQ2lpaWdENmdvb29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVm
b29vcjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFD
aWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBsK2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2
S0tLKzZQNEZQcUNpaWl2aFQrK2dvb29vQStYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28v
Z1Urb0tLS0srRlA3NlBsK2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQr
K2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZLS0srNlA0
RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVS0tLS0FQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tL
SytGUDc2UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29v
cjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlp
dmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NkNpaWlnRDVmb29vcjdvL2dVK29LS0tLK0ZQNzZQ
bCtpaWl2dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Ur
b0tLS0srRlA3NlBsK2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1
Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVqK0JRb29vb0Erb0tLS0srRlA3NlBsK2lpaXZ1
aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytG
UDc2UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdv
L2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0VS92b0tLS0tBUGwraWlpdnVqK0JUNmdv
b29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQNzZQbCtp
aWl2dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tL
S0srRlA3NlBsK2lpaXZ1aitCVDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZDaWlpZ0Q2Z29vb3I0VS92
bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBsK2lpaXZ1aitC
VDZnb29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2
UGwraWlpdnVqK0JUNmdvb29yNFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrZ29vb29BK1g2S0tL
KzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UGwraWlpdnVqK0JUNmdvb29y
NFUvdm8rWDZLS0srNlA0RlBxQ2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2
dWorQlQ2Z29vb3I0VS92bytYNktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1VLS0tLQVBx
Q2lpaXZoVCsrajVmb29vcjdvL2dVK29LS0tLK0ZQNzZQbCtpaWl2dWorQlQ2Z29vb3I0VS92bytY
NktLSys2UDRGUHFDaWlpdmhUKytqNWZvb29yN28vZ1Urb0tLS0srRlA3NlBsK2lpaXZ1aitCVDZn
b29vcjRVL3ZvK1g2S0tLKzZQNEZQcUNpaWl2aFQrK2o1Zm9vb3I3by9nVStvS0tLSytGUDc2UC8v
WiI7CisvLyBSZWdpc3RlciBwcm9taXNlIGZhbGxiYWNrIGZvciBJRQorX3Byb21pc2VfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzlfX1siUHJvbWlzZVBvbHlmaWxsIl0uQXBwbHkoKTsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9NaXNjL3R5cGVTdG9yZS50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogX1R5cGVT
dG9yZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfVHlwZVN0b3JlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfVHlwZVN0b3JlOyB9KTsKKy8qKiBAaGlkZGVuICovCit2YXIg
X1R5cGVTdG9yZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBf
VHlwZVN0b3JlKCkgeworICAgIH0KKyAgICAvKiogQGhpZGRlbiAqLworICAgIF9UeXBlU3RvcmUu
R2V0Q2xhc3MgPSBmdW5jdGlvbiAoZnFkbikgeworICAgICAgICBpZiAodGhpcy5SZWdpc3RlcmVk
VHlwZXMgJiYgdGhpcy5SZWdpc3RlcmVkVHlwZXNbZnFkbl0pIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLlJlZ2lzdGVyZWRUeXBlc1tmcWRuXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgX1R5cGVTdG9yZS5SZWdpc3Rl
cmVkVHlwZXMgPSB7fTsKKyAgICByZXR1cm4gX1R5cGVTdG9yZTsKK30oKSk7CisKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vTWlzYy91bmlxdWVJZEdlbmVyYXRvci50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTWlzYy91bmlxdWVJZEdl
bmVyYXRvci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBVbmlxdWVJZEdlbmVyYXRvciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJVbmlxdWVJZEdlbmVyYXRvciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gVW5pcXVlSWRHZW5lcmF0b3I7IH0pOworLyoqCisgKiBIZWxwZXIgY2xhc3MgdXNlZCB0
byBnZW5lcmF0ZSBzZXNzaW9uIHVuaXF1ZSBJRAorICovCit2YXIgVW5pcXVlSWRHZW5lcmF0b3Ig
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gVW5pcXVlSWRHZW5l
cmF0b3IoKSB7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbmlxdWVJZEdlbmVy
YXRvciwgIlVuaXF1ZUlkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhbiB1bmlx
dWUgKHJlbGF0aXZlbHkgdG8gdGhlIGN1cnJlbnQgc2NlbmUpIElkCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9V
bmlxdWVJZENvdW50ZXI7CisgICAgICAgICAgICB0aGlzLl9VbmlxdWVJZENvdW50ZXIrKzsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8vIFN0YXRp
Y3MKKyAgICBVbmlxdWVJZEdlbmVyYXRvci5fVW5pcXVlSWRDb3VudGVyID0gMDsKKyAgICByZXR1
cm4gVW5pcXVlSWRHZW5lcmF0b3I7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L01pc2MvdmlkZW9SZWNvcmRlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9NaXNjL3ZpZGVvUmVjb3JkZXIudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBWaWRlb1JlY29y
ZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpZGVvUmVjb3JkZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFZpZGVvUmVjb3JkZXI7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5q
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b29sc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90b29scyAqLyAiLi9NaXNjL3Rv
b2xzLnRzIik7CisKKworLyoqCisgKiBUaGlzIGNhbiBoZWxwIHdpdGggcmVjb3JkaW5nIHZpZGVv
cyBmcm9tIEJhYnlsb25KUy4KKyAqIFRoaXMgaXMgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBXZWJS
VEMgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBicm93c2VyLgorICoKKyAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by9yZW5kZXJfc2NlbmVfb25fYV92aWRlbworICovCit2YXIg
VmlkZW9SZWNvcmRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGUgYSBuZXcgVmlkZW9DYXB0dXJlIG9iamVjdCB3aGljaCBjYW4gaGVscCBjb252
ZXJ0aW5nIHdoYXQgeW91IHNlZSBpbiBCYWJ5bG9uIHRvIGEgdmlkZW8gZmlsZS4KKyAgICAgKiBA
cGFyYW0gZW5naW5lIERlZmluZXMgdGhlIEJhYnlsb25KUyBFbmdpbmUgeW91IHdpc2ggdG8gcmVj
b3JkLgorICAgICAqIEBwYXJhbSBvcHRpb25zIERlZmluZXMgb3B0aW9ucyB0aGF0IGNhbiBiZSB1
c2VkIHRvIGN1c3RvbWl6ZSB0aGUgY2FwdHVyZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBWaWRl
b1JlY29yZGVyKGVuZ2luZSwgb3B0aW9ucykgeworICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9p
ZCAwKSB7IG9wdGlvbnMgPSBudWxsOyB9CisgICAgICAgIGlmICghVmlkZW9SZWNvcmRlci5Jc1N1
cHBvcnRlZChlbmdpbmUpKSB7CisgICAgICAgICAgICB0aHJvdyAiWW91ciBicm93c2VyIGRvZXMg
bm90IHN1cHBvcnQgcmVjb3JkaW5nIHNvIGZhci4iOworICAgICAgICB9CisgICAgICAgIHZhciBj
YW52YXMgPSBlbmdpbmUuZ2V0UmVuZGVyaW5nQ2FudmFzKCk7CisgICAgICAgIGlmICghY2FudmFz
KSB7CisgICAgICAgICAgICB0aHJvdyAiVGhlIGJhYnlsb24gZW5naW5lIG11c3QgaGF2ZSBhIGNh
bnZhcyB0byBiZSByZWNvcmRlZCI7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2FudmFzID0g
Y2FudmFzOworICAgICAgICB0aGlzLl9jYW52YXMuaXNSZWNvcmRpbmcgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5fb3B0aW9ucyA9IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
YXNzaWduIl0oe30sIFZpZGVvUmVjb3JkZXIuX2RlZmF1bHRPcHRpb25zLCBvcHRpb25zKTsKKyAg
ICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuX2NhbnZhcy5jYXB0dXJlU3RyZWFtKHRoaXMuX29wdGlv
bnMuZnBzKTsKKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuYXVkaW9UcmFja3MpIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9vcHRpb25zLmF1ZGlvVHJhY2tzOyBf
aSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IF9hW19p
XTsKKyAgICAgICAgICAgICAgICBzdHJlYW0uYWRkVHJhY2sodHJhY2spOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHRoaXMuX21lZGlhUmVjb3JkZXIgPSBuZXcgTWVkaWFSZWNv
cmRlcihzdHJlYW0sIHsgbWltZVR5cGU6IHRoaXMuX29wdGlvbnMubWltZVR5cGUgfSk7CisgICAg
ICAgIHRoaXMuX21lZGlhUmVjb3JkZXIub25kYXRhYXZhaWxhYmxlID0gdGhpcy5faGFuZGxlRGF0
YUF2YWlsYWJsZS5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLl9tZWRpYVJlY29yZGVyLm9uZXJy
b3IgPSB0aGlzLl9oYW5kbGVFcnJvci5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLl9tZWRpYVJl
Y29yZGVyLm9uc3RvcCA9IHRoaXMuX2hhbmRsZVN0b3AuYmluZCh0aGlzKTsKKyAgICB9CisgICAg
LyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgVmlkZW9SZWNvcmRlciBpcyBh
dmFpbGFibGUgaW4geW91ciBicm93c2VyLgorICAgICAqIEBwYXJhbSBlbmdpbmUgRGVmaW5lcyB0
aGUgQmFieWxvbiBFbmdpbmUuCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBzdXBwb3J0ZWQgb3Ro
ZXJ3aXNlIGZhbHNlLgorICAgICAqLworICAgIFZpZGVvUmVjb3JkZXIuSXNTdXBwb3J0ZWQgPSBm
dW5jdGlvbiAoZW5naW5lKSB7CisgICAgICAgIHZhciBjYW52YXMgPSBlbmdpbmUuZ2V0UmVuZGVy
aW5nQ2FudmFzKCk7CisgICAgICAgIHJldHVybiAoISFjYW52YXMgJiYgdHlwZW9mIGNhbnZhcy5j
YXB0dXJlU3RyZWFtID09PSAiZnVuY3Rpb24iKTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShWaWRlb1JlY29yZGVyLnByb3RvdHlwZSwgImlzUmVjb3JkaW5nIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogVHJ1ZSB3aGVuIGEgcmVjb3JkaW5nIGlzIGFscmVhZHkgaW4gcHJv
Z3Jlc3MuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiAhIXRoaXMuX2NhbnZhcyAmJiB0aGlzLl9jYW52YXMuaXNSZWNvcmRpbmc7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFN0b3BzIHRoZSBjdXJyZW50IHJlY29y
ZGluZyBiZWZvcmUgdGhlIGRlZmF1bHQgY2FwdHVyZSB0aW1lb3V0IHBhc3NlZCBpbiB0aGUgc3Rh
cnRSZWNvcmRpbmcgZnVuY3Rpb24uCisgICAgICovCisgICAgVmlkZW9SZWNvcmRlci5wcm90b3R5
cGUuc3RvcFJlY29yZGluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYW52
YXMgfHwgIXRoaXMuX21lZGlhUmVjb3JkZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXRoaXMuaXNSZWNvcmRpbmcpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYW52YXMuaXNSZWNvcmRpbmcgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fbWVkaWFSZWNvcmRlci5zdG9wKCk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTdGFydHMgcmVjb3JkaW5nIHRoZSBjYW52YXMgZm9yIGEgbWF4IGR1cmF0aW9uIHNwZWNp
ZmllZCBpbiBwYXJhbWV0ZXJzLgorICAgICAqIEBwYXJhbSBmaWxlTmFtZSBEZWZpbmVzIHRoZSBu
YW1lIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQgd2hlbiB0aGUgcmVjb3JkaW5nIHN0b3Au
CisgICAgICogSWYgbnVsbCBubyBhdXRvbWF0aWMgZG93bmxvYWQgd2lsbCBzdGFydCBhbmQgeW91
IGNhbiByZWx5IG9uIHRoZSBwcm9taXNlIHRvIGdldCB0aGUgZGF0YSBiYWNrLgorICAgICAqIEBw
YXJhbSBtYXhEdXJhdGlvbiBEZWZpbmVzIHRoZSBtYXhpbXVtIHJlY29yZGluZyB0aW1lIGluIHNl
Y29uZHMuCisgICAgICogSXQgZGVmYXVsdHMgdG8gNyBzZWNvbmRzLiBBIHZhbHVlIG9mIHplcm8g
d2lsbCBub3Qgc3RvcCBhdXRvbWF0aWNhbGx5LCB5b3Ugd291bGQgbmVlZCB0byBjYWxsIHN0b3BS
ZWNvcmRpbmcgbWFudWFsbHkuCisgICAgICogQHJldHVybiBBIHByb21pc2UgY2FsbGJhY2sgYXQg
dGhlIGVuZCBvZiB0aGUgcmVjb3JkaW5nIHdpdGggdGhlIHZpZGVvIGRhdGEgaW4gQmxvYi4KKyAg
ICAgKi8KKyAgICBWaWRlb1JlY29yZGVyLnByb3RvdHlwZS5zdGFydFJlY29yZGluZyA9IGZ1bmN0
aW9uIChmaWxlTmFtZSwgbWF4RHVyYXRpb24pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgaWYgKGZpbGVOYW1lID09PSB2b2lkIDApIHsgZmlsZU5hbWUgPSAiYmFieWxvbmpz
LndlYm0iOyB9CisgICAgICAgIGlmIChtYXhEdXJhdGlvbiA9PT0gdm9pZCAwKSB7IG1heER1cmF0
aW9uID0gNzsgfQorICAgICAgICBpZiAoIXRoaXMuX2NhbnZhcyB8fCAhdGhpcy5fbWVkaWFSZWNv
cmRlcikgeworICAgICAgICAgICAgdGhyb3cgIlJlY29yZGVyIGhhcyBhbHJlYWR5IGJlZW4gZGlz
cG9zZWQiOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7CisgICAg
ICAgICAgICB0aHJvdyAiUmVjb3JkaW5nIGFscmVhZHkgaW4gcHJvZ3Jlc3MiOworICAgICAgICB9
CisgICAgICAgIGlmIChtYXhEdXJhdGlvbiA+IDApIHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlzLnN0b3BSZWNvcmRpbmcoKTsKKyAg
ICAgICAgICAgIH0sIG1heER1cmF0aW9uICogMTAwMCk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZmlsZU5hbWUgPSBmaWxlTmFtZTsKKyAgICAgICAgdGhpcy5fcmVjb3JkZWRDaHVua3MgPSBb
XTsKKyAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IG51bGw7CisgICAgICAgIHRoaXMuX3JlamVjdCA9
IG51bGw7CisgICAgICAgIHRoaXMuX2NhbnZhcy5pc1JlY29yZGluZyA9IHRydWU7CisgICAgICAg
IHRoaXMuX21lZGlhUmVjb3JkZXIuc3RhcnQodGhpcy5fb3B0aW9ucy5yZWNvcmRDaHVuY2tTaXpl
KTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3Qp
IHsKKyAgICAgICAgICAgIF90aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTsKKyAgICAgICAgICAgIF90
aGlzLl9yZWplY3QgPSByZWplY3Q7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmVsZWFzZXMgaW50ZXJuYWwgcmVzb3VyY2VzIHVzZWQgZHVyaW5nIHRoZSByZWNvcmRpbmcu
CisgICAgICovCisgICAgVmlkZW9SZWNvcmRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5fY2FudmFzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fbWVkaWFS
ZWNvcmRlciA9IG51bGw7CisgICAgICAgIHRoaXMuX3JlY29yZGVkQ2h1bmtzID0gW107CisgICAg
ICAgIHRoaXMuX2ZpbGVOYW1lID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IG51bGw7
CisgICAgICAgIHRoaXMuX3JlamVjdCA9IG51bGw7CisgICAgfTsKKyAgICBWaWRlb1JlY29yZGVy
LnByb3RvdHlwZS5faGFuZGxlRGF0YUF2YWlsYWJsZSA9IGZ1bmN0aW9uIChldmVudCkgeworICAg
ICAgICBpZiAoZXZlbnQuZGF0YS5zaXplID4gMCkgeworICAgICAgICAgICAgdGhpcy5fcmVjb3Jk
ZWRDaHVua3MucHVzaChldmVudC5kYXRhKTsKKyAgICAgICAgfQorICAgIH07CisgICAgVmlkZW9S
ZWNvcmRlci5wcm90b3R5cGUuX2hhbmRsZUVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAg
ICAgIHRoaXMuc3RvcFJlY29yZGluZygpOworICAgICAgICBpZiAodGhpcy5fcmVqZWN0KSB7Cisg
ICAgICAgICAgICB0aGlzLl9yZWplY3QoZXZlbnQuZXJyb3IpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IGV2ZW50LmVycm9yKCk7CisgICAgICAgIH0K
KyAgICB9OworICAgIFZpZGVvUmVjb3JkZXIucHJvdG90eXBlLl9oYW5kbGVTdG9wID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTsKKyAgICAgICAgdmFyIHN1cGVy
QnVmZmVyID0gbmV3IEJsb2IodGhpcy5fcmVjb3JkZWRDaHVua3MpOworICAgICAgICBpZiAodGhp
cy5fcmVzb2x2ZSkgeworICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZShzdXBlckJ1ZmZlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoc3VwZXJCdWZmZXIp
OworICAgICAgICBpZiAodGhpcy5fZmlsZU5hbWUpIHsKKyAgICAgICAgICAgIF90b29sc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb29scyJdLkRvd25sb2FkKHN1cGVyQnVmZmVyLCB0
aGlzLl9maWxlTmFtZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIFZpZGVvUmVjb3JkZXIuX2Rl
ZmF1bHRPcHRpb25zID0geworICAgICAgICBtaW1lVHlwZTogInZpZGVvL3dlYm0iLAorICAgICAg
ICBmcHM6IDI1LAorICAgICAgICByZWNvcmRDaHVuY2tTaXplOiAzMDAwCisgICAgfTsKKyAgICBy
ZXR1cm4gVmlkZW9SZWNvcmRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
TWlzYy92aXJ0dWFsSm95c3RpY2sudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9NaXNjL3ZpcnR1YWxKb3lzdGljay50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogSm95
c3RpY2tBeGlzLCBWaXJ0dWFsSm95c3RpY2sgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiSm95c3RpY2tBeGlzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBKb3lzdGlja0F4aXM7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlydHVhbEpveXN0aWNrIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBWaXJ0dWFsSm95c3RpY2s7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3Iu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3RyaW5nRGljdGlvbmFyeV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdHJpbmdE
aWN0aW9uYXJ5ICovICIuL01pc2Mvc3RyaW5nRGljdGlvbmFyeS50cyIpOworCisKKy8vIE1haW5s
eSBiYXNlZCBvbiB0aGVzZSAyIGFydGljbGVzIDoKKy8vIENyZWF0aW5nIGFuIHVuaXZlcnNhbCB2
aXJ0dWFsIHRvdWNoIGpveXN0aWNrIHdvcmtpbmcgZm9yIGFsbCBUb3VjaCBtb2RlbHMgdGhhbmtz
IHRvIEhhbmQuSlMgOiBodHRwOi8vYmxvZ3MubXNkbi5jb20vYi9kYXZyb3VzL2FyY2hpdmUvMjAx
My8wMi8yMi9jcmVhdGluZy1hbi11bml2ZXJzYWwtdmlydHVhbC10b3VjaC1qb3lzdGljay13b3Jr
aW5nLWZvci1hbGwtdG91Y2gtbW9kZWxzLXRoYW5rcy10by1oYW5kLWpzLmFzcHgKKy8vICYgb24g
U2ViIExlZS1EZWxpc2xlIG9yaWdpbmFsIHdvcms6IGh0dHA6Ly9zZWIubHkvMjAxMS8wNC9tdWx0
aS10b3VjaC1nYW1lLWNvbnRyb2xsZXItaW4tamF2YXNjcmlwdGh0bWw1LWZvci1pcGFkLworLyoq
CisgKiBEZWZpbmVzIHRoZSBwb3RlbnRpYWwgYXhpcyBvZiBhIEpveXN0aWNrCisgKi8KK3ZhciBK
b3lzdGlja0F4aXM7CisoZnVuY3Rpb24gKEpveXN0aWNrQXhpcykgeworICAgIC8qKiBYIGF4aXMg
Ki8KKyAgICBKb3lzdGlja0F4aXNbSm95c3RpY2tBeGlzWyJYIl0gPSAwXSA9ICJYIjsKKyAgICAv
KiogWSBheGlzICovCisgICAgSm95c3RpY2tBeGlzW0pveXN0aWNrQXhpc1siWSJdID0gMV0gPSAi
WSI7CisgICAgLyoqIFogYXhpcyAqLworICAgIEpveXN0aWNrQXhpc1tKb3lzdGlja0F4aXNbIloi
XSA9IDJdID0gIloiOworfSkoSm95c3RpY2tBeGlzIHx8IChKb3lzdGlja0F4aXMgPSB7fSkpOwor
LyoqCisgKiBDbGFzcyB1c2VkIHRvIGRlZmluZSB2aXJ0dWFsIGpveXN0aWNrICh1c2VkIGluIHRv
dWNoIG1vZGUpCisgKi8KK3ZhciBWaXJ0dWFsSm95c3RpY2sgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyB2aXJ0dWFsIGpveXN0aWNr
CisgICAgICogQHBhcmFtIGxlZnRKb3lzdGljayBkZWZpbmVzIHRoYXQgdGhlIGpveXN0aWNrIGlz
IGZvciBsZWZ0IGhhbmQgKGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgZnVuY3Rpb24g
VmlydHVhbEpveXN0aWNrKGxlZnRKb3lzdGljaykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlz
OworICAgICAgICBpZiAobGVmdEpveXN0aWNrKSB7CisgICAgICAgICAgICB0aGlzLl9sZWZ0Sm95
c3RpY2sgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhp
cy5fbGVmdEpveXN0aWNrID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgVmlydHVhbEpveXN0
aWNrLl9nbG9iYWxKb3lzdGlja0luZGV4Kys7CisgICAgICAgIC8vIEJ5IGRlZmF1bHQgbGVmdCAm
IHJpZ2h0IGFycm93IGtleXMgYXJlIG1vdmluZyB0aGUgWAorICAgICAgICAvLyBhbmQgdXAgJiBk
b3duIGtleXMgYXJlIG1vdmluZyB0aGUgWQorICAgICAgICB0aGlzLl9heGlzVGFyZ2V0ZWRCeUxl
ZnRBbmRSaWdodCA9IEpveXN0aWNrQXhpcy5YOworICAgICAgICB0aGlzLl9heGlzVGFyZ2V0ZWRC
eVVwQW5kRG93biA9IEpveXN0aWNrQXhpcy5ZOworICAgICAgICB0aGlzLnJldmVyc2VMZWZ0Umln
aHQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5yZXZlcnNlVXBEb3duID0gZmFsc2U7CisgICAgICAg
IC8vIGNvbGxlY3Rpb25zIG9mIHBvaW50ZXJzCisgICAgICAgIHRoaXMuX3RvdWNoZXMgPSBuZXcg
X3N0cmluZ0RpY3Rpb25hcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU3RyaW5nRGlj
dGlvbmFyeSJdKCk7CisgICAgICAgIHRoaXMuZGVsdGFQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAg
ICAgICB0aGlzLl9qb3lzdGlja1NlbnNpYmlsaXR5ID0gMjU7CisgICAgICAgIHRoaXMuX2ludmVy
c2VkU2Vuc2liaWxpdHkgPSAxIC8gKHRoaXMuX2pveXN0aWNrU2Vuc2liaWxpdHkgLyAxMDAwKTsK
KyAgICAgICAgdGhpcy5fb25SZXNpemUgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICBW
aXJ0dWFsSm95c3RpY2sudmpDYW52YXNXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOworICAgICAg
ICAgICAgVmlydHVhbEpveXN0aWNrLnZqQ2FudmFzSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0
OworICAgICAgICAgICAgaWYgKFZpcnR1YWxKb3lzdGljay5DYW52YXMpIHsKKyAgICAgICAgICAg
ICAgICBWaXJ0dWFsSm95c3RpY2suQ2FudmFzLndpZHRoID0gVmlydHVhbEpveXN0aWNrLnZqQ2Fu
dmFzV2lkdGg7CisgICAgICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLkNhbnZhcy5oZWlnaHQg
PSBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNIZWlnaHQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBWaXJ0dWFsSm95c3RpY2suaGFsZldpZHRoID0gVmlydHVhbEpveXN0aWNrLnZqQ2FudmFz
V2lkdGggLyAyOworICAgICAgICB9OworICAgICAgICAvLyBpbmplY3RpbmcgYSBjYW52YXMgZWxl
bWVudCBvbiB0b3Agb2YgdGhlIGNhbnZhcyAzRCBnYW1lCisgICAgICAgIGlmICghVmlydHVhbEpv
eXN0aWNrLkNhbnZhcykgeworICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJl
c2l6ZSIsIHRoaXMuX29uUmVzaXplLCBmYWxzZSk7CisgICAgICAgICAgICBWaXJ0dWFsSm95c3Rp
Y2suQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgICAgICAg
ICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOworICAg
ICAgICAgICAgVmlydHVhbEpveXN0aWNrLnZqQ2FudmFzSGVpZ2h0ID0gd2luZG93LmlubmVySGVp
Z2h0OworICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLkNhbnZhcy53aWR0aCA9IHdpbmRvdy5p
bm5lcldpZHRoOworICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLkNhbnZhcy5oZWlnaHQgPSB3
aW5kb3cuaW5uZXJIZWlnaHQ7CisgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2suQ2FudmFzLnN0
eWxlLndpZHRoID0gIjEwMCUiOworICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLkNhbnZhcy5z
dHlsZS5oZWlnaHQgPSAiMTAwJSI7CisgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2suQ2FudmFz
LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKKyAgICAgICAgICAgIFZpcnR1YWxKb3lzdGlj
ay5DYW52YXMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gInRyYW5zcGFyZW50IjsKKyAgICAgICAg
ICAgIFZpcnR1YWxKb3lzdGljay5DYW52YXMuc3R5bGUudG9wID0gIjBweCI7CisgICAgICAgICAg
ICBWaXJ0dWFsSm95c3RpY2suQ2FudmFzLnN0eWxlLmxlZnQgPSAiMHB4IjsKKyAgICAgICAgICAg
IFZpcnR1YWxKb3lzdGljay5DYW52YXMuc3R5bGUuekluZGV4ID0gIjUiOworICAgICAgICAgICAg
VmlydHVhbEpveXN0aWNrLkNhbnZhcy5zdHlsZS5tc1RvdWNoQWN0aW9uID0gIm5vbmUiOworICAg
ICAgICAgICAgLy8gU3VwcG9ydCBmb3IgalF1ZXJ5IFBFUCBwb2x5ZmlsbAorICAgICAgICAgICAg
VmlydHVhbEpveXN0aWNrLkNhbnZhcy5zZXRBdHRyaWJ1dGUoInRvdWNoLWFjdGlvbiIsICJub25l
Iik7CisgICAgICAgICAgICB2YXIgY29udGV4dCA9IFZpcnR1YWxKb3lzdGljay5DYW52YXMuZ2V0
Q29udGV4dCgnMmQnKTsKKyAgICAgICAgICAgIGlmICghY29udGV4dCkgeworICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBjYW52YXMgZm9yIHZpcnR1YWwg
am95c3RpY2siKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay52
akNhbnZhc0NvbnRleHQgPSBjb250ZXh0OworICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLnZq
Q2FudmFzQ29udGV4dC5zdHJva2VTdHlsZSA9ICIjZmZmZmZmIjsKKyAgICAgICAgICAgIFZpcnR1
YWxKb3lzdGljay52akNhbnZhc0NvbnRleHQubGluZVdpZHRoID0gMjsKKyAgICAgICAgICAgIGRv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoVmlydHVhbEpveXN0aWNrLkNhbnZhcyk7CisgICAgICAg
IH0KKyAgICAgICAgVmlydHVhbEpveXN0aWNrLmhhbGZXaWR0aCA9IFZpcnR1YWxKb3lzdGljay5D
YW52YXMud2lkdGggLyAyOworICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTsKKyAgICAgICAg
Ly8gZGVmYXVsdCBqb3lzdGljayBjb2xvcgorICAgICAgICB0aGlzLl9qb3lzdGlja0NvbG9yID0g
ImN5YW4iOworICAgICAgICB0aGlzLl9qb3lzdGlja1BvaW50ZXJJRCA9IC0xOworICAgICAgICAv
LyBjdXJyZW50IGpveXN0aWNrIHBvc2l0aW9uCisgICAgICAgIHRoaXMuX2pveXN0aWNrUG9pbnRl
clBvcyA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMiJdKDAsIDApOworICAgICAgICB0aGlzLl9qb3lzdGlja1ByZXZpb3VzUG9pbnRl
clBvcyA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMiJdKDAsIDApOworICAgICAgICAvLyBvcmlnaW4gam95c3RpY2sgcG9zaXRpb24K
KyAgICAgICAgdGhpcy5fam95c3RpY2tQb2ludGVyU3RhcnRQb3MgPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjIiXSgwLCAwKTsKKyAg
ICAgICAgdGhpcy5fZGVsdGFKb3lzdGlja1ZlY3RvciA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMiJdKDAsIDApOworICAgICAgICB0
aGlzLl9vblBvaW50ZXJEb3duSGFuZGxlclJlZiA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAg
ICAgIF90aGlzLl9vblBvaW50ZXJEb3duKGV2dCk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMu
X29uUG9pbnRlck1vdmVIYW5kbGVyUmVmID0gZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAg
X3RoaXMuX29uUG9pbnRlck1vdmUoZXZ0KTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fb25Q
b2ludGVyVXBIYW5kbGVyUmVmID0gZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgX3RoaXMu
X29uUG9pbnRlclVwKGV2dCk7CisgICAgICAgIH07CisgICAgICAgIFZpcnR1YWxKb3lzdGljay5D
YW52YXMuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLl9vblBvaW50ZXJEb3du
SGFuZGxlclJlZiwgZmFsc2UpOworICAgICAgICBWaXJ0dWFsSm95c3RpY2suQ2FudmFzLmFkZEV2
ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgdGhpcy5fb25Qb2ludGVyTW92ZUhhbmRsZXJSZWYs
IGZhbHNlKTsKKyAgICAgICAgVmlydHVhbEpveXN0aWNrLkNhbnZhcy5hZGRFdmVudExpc3RlbmVy
KCdwb2ludGVydXAnLCB0aGlzLl9vblBvaW50ZXJVcEhhbmRsZXJSZWYsIGZhbHNlKTsKKyAgICAg
ICAgVmlydHVhbEpveXN0aWNrLkNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyb3V0Jywg
dGhpcy5fb25Qb2ludGVyVXBIYW5kbGVyUmVmLCBmYWxzZSk7CisgICAgICAgIFZpcnR1YWxKb3lz
dGljay5DYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCBmdW5jdGlvbiAoZXZ0
KSB7CisgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsgLy8gRGlzYWJsZXMgc3lzdGVt
IG1lbnUKKyAgICAgICAgfSwgZmFsc2UpOworICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
ZnVuY3Rpb24gKCkgeyBfdGhpcy5fZHJhd1ZpcnR1YWxKb3lzdGljaygpOyB9KTsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogRGVmaW5lcyBqb3lzdGljayBzZW5zaWJpbGl0eSAoaWUuIHRoZSByYXRp
byBiZXRlZW4gYSBwaHlzaWNhbCBtb3ZlIGFuZCB2aXJ0dWFsIGpveXN0aWNrIHBvc2l0aW9uIGNo
YW5nZSkKKyAgICAgKiBAcGFyYW0gbmV3Sm95c3RpY2tTZW5zaWJpbGl0eSBkZWZpbmVzIHRoZSBu
ZXcgc2Vuc2liaWxpdHkKKyAgICAgKi8KKyAgICBWaXJ0dWFsSm95c3RpY2sucHJvdG90eXBlLnNl
dEpveXN0aWNrU2Vuc2liaWxpdHkgPSBmdW5jdGlvbiAobmV3Sm95c3RpY2tTZW5zaWJpbGl0eSkg
eworICAgICAgICB0aGlzLl9qb3lzdGlja1NlbnNpYmlsaXR5ID0gbmV3Sm95c3RpY2tTZW5zaWJp
bGl0eTsKKyAgICAgICAgdGhpcy5faW52ZXJzZWRTZW5zaWJpbGl0eSA9IDEgLyAodGhpcy5fam95
c3RpY2tTZW5zaWJpbGl0eSAvIDEwMDApOworICAgIH07CisgICAgVmlydHVhbEpveXN0aWNrLnBy
b3RvdHlwZS5fb25Qb2ludGVyRG93biA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHZhciBwb3Np
dGlvbk9uU2NyZWVuQ29uZGl0aW9uOworICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAg
ICAgIGlmICh0aGlzLl9sZWZ0Sm95c3RpY2sgPT09IHRydWUpIHsKKyAgICAgICAgICAgIHBvc2l0
aW9uT25TY3JlZW5Db25kaXRpb24gPSAoZS5jbGllbnRYIDwgVmlydHVhbEpveXN0aWNrLmhhbGZX
aWR0aCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwb3NpdGlvbk9u
U2NyZWVuQ29uZGl0aW9uID0gKGUuY2xpZW50WCA+IFZpcnR1YWxKb3lzdGljay5oYWxmV2lkdGgp
OworICAgICAgICB9CisgICAgICAgIGlmIChwb3NpdGlvbk9uU2NyZWVuQ29uZGl0aW9uICYmIHRo
aXMuX2pveXN0aWNrUG9pbnRlcklEIDwgMCkgeworICAgICAgICAgICAgLy8gRmlyc3QgY29udGFj
dCB3aWxsIGJlIGRlZGljYXRlZCB0byB0aGUgdmlydHVhbCBqb3lzdGljaworICAgICAgICAgICAg
dGhpcy5fam95c3RpY2tQb2ludGVySUQgPSBlLnBvaW50ZXJJZDsKKyAgICAgICAgICAgIHRoaXMu
X2pveXN0aWNrUG9pbnRlclN0YXJ0UG9zLnggPSBlLmNsaWVudFg7CisgICAgICAgICAgICB0aGlz
Ll9qb3lzdGlja1BvaW50ZXJTdGFydFBvcy55ID0gZS5jbGllbnRZOworICAgICAgICAgICAgdGhp
cy5fam95c3RpY2tQb2ludGVyUG9zID0gdGhpcy5fam95c3RpY2tQb2ludGVyU3RhcnRQb3MuY2xv
bmUoKTsKKyAgICAgICAgICAgIHRoaXMuX2pveXN0aWNrUHJldmlvdXNQb2ludGVyUG9zID0gdGhp
cy5fam95c3RpY2tQb2ludGVyU3RhcnRQb3MuY2xvbmUoKTsKKyAgICAgICAgICAgIHRoaXMuX2Rl
bHRhSm95c3RpY2tWZWN0b3IueCA9IDA7CisgICAgICAgICAgICB0aGlzLl9kZWx0YUpveXN0aWNr
VmVjdG9yLnkgPSAwOworICAgICAgICAgICAgdGhpcy5wcmVzc2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHRoaXMuX3RvdWNoZXMuYWRkKGUucG9pbnRlcklkLnRvU3RyaW5nKCksIGUpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gWW91IGNhbiBvbmx5IHRyaWdnZXIg
dGhlIGFjdGlvbiBidXR0b25zIHdpdGggYSBqb3lzdGljayBkZWNsYXJlZAorICAgICAgICAgICAg
aWYgKFZpcnR1YWxKb3lzdGljay5fZ2xvYmFsSm95c3RpY2tJbmRleCA8IDIgJiYgdGhpcy5fYWN0
aW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYWN0aW9uKCk7CisgICAgICAgICAgICAgICAg
dGhpcy5fdG91Y2hlcy5hZGQoZS5wb2ludGVySWQudG9TdHJpbmcoKSwgeyB4OiBlLmNsaWVudFgs
IHk6IGUuY2xpZW50WSwgcHJldlg6IGUuY2xpZW50WCwgcHJldlk6IGUuY2xpZW50WSB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgVmlydHVhbEpveXN0aWNrLnByb3Rv
dHlwZS5fb25Qb2ludGVyTW92ZSA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIC8vIElmIHRoZSBj
dXJyZW50IHBvaW50ZXIgaXMgdGhlIG9uZSBhc3NvY2lhdGVkIHRvIHRoZSBqb3lzdGljayAoZmly
c3QgdG91Y2ggY29udGFjdCkKKyAgICAgICAgaWYgKHRoaXMuX2pveXN0aWNrUG9pbnRlcklEID09
IGUucG9pbnRlcklkKSB7CisgICAgICAgICAgICB0aGlzLl9qb3lzdGlja1BvaW50ZXJQb3MueCA9
IGUuY2xpZW50WDsKKyAgICAgICAgICAgIHRoaXMuX2pveXN0aWNrUG9pbnRlclBvcy55ID0gZS5j
bGllbnRZOworICAgICAgICAgICAgdGhpcy5fZGVsdGFKb3lzdGlja1ZlY3RvciA9IHRoaXMuX2pv
eXN0aWNrUG9pbnRlclBvcy5jbG9uZSgpOworICAgICAgICAgICAgdGhpcy5fZGVsdGFKb3lzdGlj
a1ZlY3RvciA9IHRoaXMuX2RlbHRhSm95c3RpY2tWZWN0b3Iuc3VidHJhY3QodGhpcy5fam95c3Rp
Y2tQb2ludGVyU3RhcnRQb3MpOworICAgICAgICAgICAgdmFyIGRpcmVjdGlvbkxlZnRSaWdodCA9
IHRoaXMucmV2ZXJzZUxlZnRSaWdodCA/IC0xIDogMTsKKyAgICAgICAgICAgIHZhciBkZWx0YUpv
eXN0aWNrWCA9IGRpcmVjdGlvbkxlZnRSaWdodCAqIHRoaXMuX2RlbHRhSm95c3RpY2tWZWN0b3Iu
eCAvIHRoaXMuX2ludmVyc2VkU2Vuc2liaWxpdHk7CisgICAgICAgICAgICBzd2l0Y2ggKHRoaXMu
X2F4aXNUYXJnZXRlZEJ5TGVmdEFuZFJpZ2h0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBKb3lz
dGlja0F4aXMuWDoKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWx0YVBvc2l0aW9uLnggPSBN
YXRoLm1pbigxLCBNYXRoLm1heCgtMSwgZGVsdGFKb3lzdGlja1gpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBKb3lzdGlja0F4aXMuWToKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5kZWx0YVBvc2l0aW9uLnkgPSBNYXRoLm1pbigxLCBNYXRoLm1h
eCgtMSwgZGVsdGFKb3lzdGlja1gpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBKb3lzdGlja0F4aXMuWjoKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5kZWx0YVBvc2l0aW9uLnogPSBNYXRoLm1pbigxLCBNYXRoLm1heCgtMSwgZGVsdGFKb3lzdGlj
a1gpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgZGlyZWN0aW9uVXBEb3duID0gdGhpcy5yZXZlcnNlVXBEb3duID8gMSA6IC0xOwor
ICAgICAgICAgICAgdmFyIGRlbHRhSm95c3RpY2tZID0gZGlyZWN0aW9uVXBEb3duICogdGhpcy5f
ZGVsdGFKb3lzdGlja1ZlY3Rvci55IC8gdGhpcy5faW52ZXJzZWRTZW5zaWJpbGl0eTsKKyAgICAg
ICAgICAgIHN3aXRjaCAodGhpcy5fYXhpc1RhcmdldGVkQnlVcEFuZERvd24pIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIEpveXN0aWNrQXhpcy5YOgorICAgICAgICAgICAgICAgICAgICB0aGlzLmRl
bHRhUG9zaXRpb24ueCA9IE1hdGgubWluKDEsIE1hdGgubWF4KC0xLCBkZWx0YUpveXN0aWNrWSkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEpveXN0
aWNrQXhpcy5ZOgorICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbHRhUG9zaXRpb24ueSA9IE1h
dGgubWluKDEsIE1hdGgubWF4KC0xLCBkZWx0YUpveXN0aWNrWSkpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEpveXN0aWNrQXhpcy5aOgorICAgICAg
ICAgICAgICAgICAgICB0aGlzLmRlbHRhUG9zaXRpb24ueiA9IE1hdGgubWluKDEsIE1hdGgubWF4
KC0xLCBkZWx0YUpveXN0aWNrWSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBkYXRh
ID0gdGhpcy5fdG91Y2hlcy5nZXQoZS5wb2ludGVySWQudG9TdHJpbmcoKSk7CisgICAgICAgICAg
ICBpZiAoZGF0YSkgeworICAgICAgICAgICAgICAgIGRhdGEueCA9IGUuY2xpZW50WDsKKyAgICAg
ICAgICAgICAgICBkYXRhLnkgPSBlLmNsaWVudFk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworICAgIFZpcnR1YWxKb3lzdGljay5wcm90b3R5cGUuX29uUG9pbnRlclVwID0gZnVu
Y3Rpb24gKGUpIHsKKyAgICAgICAgaWYgKHRoaXMuX2pveXN0aWNrUG9pbnRlcklEID09IGUucG9p
bnRlcklkKSB7CisgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmNs
ZWFyUmVjdCh0aGlzLl9qb3lzdGlja1BvaW50ZXJTdGFydFBvcy54IC0gNjQsIHRoaXMuX2pveXN0
aWNrUG9pbnRlclN0YXJ0UG9zLnkgLSA2NCwgMTI4LCAxMjgpOworICAgICAgICAgICAgVmlydHVh
bEpveXN0aWNrLnZqQ2FudmFzQ29udGV4dC5jbGVhclJlY3QodGhpcy5fam95c3RpY2tQcmV2aW91
c1BvaW50ZXJQb3MueCAtIDQyLCB0aGlzLl9qb3lzdGlja1ByZXZpb3VzUG9pbnRlclBvcy55IC0g
NDIsIDg0LCA4NCk7CisgICAgICAgICAgICB0aGlzLl9qb3lzdGlja1BvaW50ZXJJRCA9IC0xOwor
ICAgICAgICAgICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICB2YXIgdG91Y2ggPSB0aGlzLl90b3VjaGVzLmdldChlLnBvaW50ZXJJ
ZC50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGlmICh0b3VjaCkgeworICAgICAgICAgICAgICAg
IFZpcnR1YWxKb3lzdGljay52akNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KHRvdWNoLnByZXZYIC0g
NDQsIHRvdWNoLnByZXZZIC0gNDQsIDg4LCA4OCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fZGVsdGFKb3lzdGlja1ZlY3Rvci54ID0gMDsKKyAgICAgICAgdGhpcy5f
ZGVsdGFKb3lzdGlja1ZlY3Rvci55ID0gMDsKKyAgICAgICAgdGhpcy5fdG91Y2hlcy5yZW1vdmUo
ZS5wb2ludGVySWQudG9TdHJpbmcoKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAqIENoYW5nZSB0
aGUgY29sb3Igb2YgdGhlIHZpcnR1YWwgam95c3RpY2sKKyAgICAqIEBwYXJhbSBuZXdDb2xvciBh
IHN0cmluZyB0aGF0IG11c3QgYmUgYSBDU1MgY29sb3IgdmFsdWUgKGxpa2UgInJlZCIpIG9yIHRo
ZSBoZXhhIHZhbHVlIChsaWtlICIjRkYwMDAwIikKKyAgICAqLworICAgIFZpcnR1YWxKb3lzdGlj
ay5wcm90b3R5cGUuc2V0Sm95c3RpY2tDb2xvciA9IGZ1bmN0aW9uIChuZXdDb2xvcikgeworICAg
ICAgICB0aGlzLl9qb3lzdGlja0NvbG9yID0gbmV3Q29sb3I7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBEZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBqb3lzdGljayBpcyB0b3Vj
aGVkCisgICAgICogQHBhcmFtIGFjdGlvbiBkZWZpbmVzIHRoZSBjYWxsYmFjaworICAgICAqLwor
ICAgIFZpcnR1YWxKb3lzdGljay5wcm90b3R5cGUuc2V0QWN0aW9uT25Ub3VjaCA9IGZ1bmN0aW9u
IChhY3Rpb24pIHsKKyAgICAgICAgdGhpcy5fYWN0aW9uID0gYWN0aW9uOworICAgIH07CisgICAg
LyoqCisgICAgICogRGVmaW5lcyB3aGljaCBheGlzIHlvdSdkIGxpa2UgdG8gY29udHJvbCBmb3Ig
bGVmdCAmIHJpZ2h0CisgICAgICogQHBhcmFtIGF4aXMgZGVmaW5lcyB0aGUgYXhpcyB0byB1c2UK
KyAgICAgKi8KKyAgICBWaXJ0dWFsSm95c3RpY2sucHJvdG90eXBlLnNldEF4aXNGb3JMZWZ0Umln
aHQgPSBmdW5jdGlvbiAoYXhpcykgeworICAgICAgICBzd2l0Y2ggKGF4aXMpIHsKKyAgICAgICAg
ICAgIGNhc2UgSm95c3RpY2tBeGlzLlg6CisgICAgICAgICAgICBjYXNlIEpveXN0aWNrQXhpcy5Z
OgorICAgICAgICAgICAgY2FzZSBKb3lzdGlja0F4aXMuWjoKKyAgICAgICAgICAgICAgICB0aGlz
Ll9heGlzVGFyZ2V0ZWRCeUxlZnRBbmRSaWdodCA9IGF4aXM7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRoaXMuX2F4aXNUYXJn
ZXRlZEJ5TGVmdEFuZFJpZ2h0ID0gSm95c3RpY2tBeGlzLlg7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERlZmluZXMgd2hpY2ggYXhp
cyB5b3UnZCBsaWtlIHRvIGNvbnRyb2wgZm9yIHVwICYgZG93bgorICAgICAqIEBwYXJhbSBheGlz
IGRlZmluZXMgdGhlIGF4aXMgdG8gdXNlCisgICAgICovCisgICAgVmlydHVhbEpveXN0aWNrLnBy
b3RvdHlwZS5zZXRBeGlzRm9yVXBEb3duID0gZnVuY3Rpb24gKGF4aXMpIHsKKyAgICAgICAgc3dp
dGNoIChheGlzKSB7CisgICAgICAgICAgICBjYXNlIEpveXN0aWNrQXhpcy5YOgorICAgICAgICAg
ICAgY2FzZSBKb3lzdGlja0F4aXMuWToKKyAgICAgICAgICAgIGNhc2UgSm95c3RpY2tBeGlzLlo6
CisgICAgICAgICAgICAgICAgdGhpcy5fYXhpc1RhcmdldGVkQnlVcEFuZERvd24gPSBheGlzOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICB0aGlzLl9heGlzVGFyZ2V0ZWRCeVVwQW5kRG93biA9IEpveXN0aWNrQXhpcy5ZOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfTsKKyAgICBWaXJ0dWFsSm95c3Rp
Y2sucHJvdG90eXBlLl9kcmF3VmlydHVhbEpveXN0aWNrID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy5wcmVzc2VkKSB7CisgICAgICAg
ICAgICB0aGlzLl90b3VjaGVzLmZvckVhY2goZnVuY3Rpb24gKGtleSwgdG91Y2gpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodG91Y2gucG9pbnRlcklkID09PSBfdGhpcy5fam95c3RpY2tQb2ludGVy
SUQpIHsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLnZqQ2FudmFzQ29udGV4
dC5jbGVhclJlY3QoX3RoaXMuX2pveXN0aWNrUG9pbnRlclN0YXJ0UG9zLnggLSA2NCwgX3RoaXMu
X2pveXN0aWNrUG9pbnRlclN0YXJ0UG9zLnkgLSA2NCwgMTI4LCAxMjgpOworICAgICAgICAgICAg
ICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmNsZWFyUmVjdChfdGhpcy5f
am95c3RpY2tQcmV2aW91c1BvaW50ZXJQb3MueCAtIDQyLCBfdGhpcy5fam95c3RpY2tQcmV2aW91
c1BvaW50ZXJQb3MueSAtIDQyLCA4NCwgODQpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
Sm95c3RpY2sudmpDYW52YXNDb250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmxpbmVXaWR0aCA9IDY7CisgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay52akNhbnZhc0NvbnRleHQuc3Ryb2tlU3R5bGUg
PSBfdGhpcy5fam95c3RpY2tDb2xvcjsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbEpveXN0
aWNrLnZqQ2FudmFzQ29udGV4dC5hcmMoX3RoaXMuX2pveXN0aWNrUG9pbnRlclN0YXJ0UG9zLngs
IF90aGlzLl9qb3lzdGlja1BvaW50ZXJTdGFydFBvcy55LCA0MCwgMCwgTWF0aC5QSSAqIDIsIHRy
dWUpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0
LnN0cm9rZSgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXND
b250ZXh0LmNsb3NlUGF0aCgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2su
dmpDYW52YXNDb250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
Sm95c3RpY2sudmpDYW52YXNDb250ZXh0LnN0cm9rZVN0eWxlID0gX3RoaXMuX2pveXN0aWNrQ29s
b3I7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay52akNhbnZhc0NvbnRleHQu
bGluZVdpZHRoID0gMjsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLnZqQ2Fu
dmFzQ29udGV4dC5hcmMoX3RoaXMuX2pveXN0aWNrUG9pbnRlclN0YXJ0UG9zLngsIF90aGlzLl9q
b3lzdGlja1BvaW50ZXJTdGFydFBvcy55LCA2MCwgMCwgTWF0aC5QSSAqIDIsIHRydWUpOworICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LnN0cm9rZSgp
OworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmNs
b3NlUGF0aCgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXND
b250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2su
dmpDYW52YXNDb250ZXh0LnN0cm9rZVN0eWxlID0gX3RoaXMuX2pveXN0aWNrQ29sb3I7CisgICAg
ICAgICAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay52akNhbnZhc0NvbnRleHQuYXJjKF90aGlz
Ll9qb3lzdGlja1BvaW50ZXJQb3MueCwgX3RoaXMuX2pveXN0aWNrUG9pbnRlclBvcy55LCA0MCwg
MCwgTWF0aC5QSSAqIDIsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3Rp
Y2sudmpDYW52YXNDb250ZXh0LnN0cm9rZSgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
Sm95c3RpY2sudmpDYW52YXNDb250ZXh0LmNsb3NlUGF0aCgpOworICAgICAgICAgICAgICAgICAg
ICBfdGhpcy5fam95c3RpY2tQcmV2aW91c1BvaW50ZXJQb3MgPSBfdGhpcy5fam95c3RpY2tQb2lu
dGVyUG9zLmNsb25lKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmNs
ZWFyUmVjdCh0b3VjaC5wcmV2WCAtIDQ0LCB0b3VjaC5wcmV2WSAtIDQ0LCA4OCwgODgpOworICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmJlZ2luUGF0
aCgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0
LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxKb3lzdGlj
ay52akNhbnZhc0NvbnRleHQuYmVnaW5QYXRoKCk7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxKb3lzdGljay52akNhbnZhc0NvbnRleHQuc3Ryb2tlU3R5bGUgPSAicmVkIjsKKyAgICAgICAg
ICAgICAgICAgICAgVmlydHVhbEpveXN0aWNrLnZqQ2FudmFzQ29udGV4dC5saW5lV2lkdGggPSA2
OworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmFy
Yyh0b3VjaC54LCB0b3VjaC55LCA0MCwgMCwgTWF0aC5QSSAqIDIsIHRydWUpOworICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LnN0cm9rZSgpOworICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsSm95c3RpY2sudmpDYW52YXNDb250ZXh0LmNsb3NlUGF0
aCgpOworICAgICAgICAgICAgICAgICAgICB0b3VjaC5wcmV2WCA9IHRvdWNoLng7CisgICAgICAg
ICAgICAgICAgICAgIHRvdWNoLnByZXZZID0gdG91Y2gueTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
ZnVuY3Rpb24gKCkgeyBfdGhpcy5fZHJhd1ZpcnR1YWxKb3lzdGljaygpOyB9KTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJlbGVhc2UgaW50ZXJuYWwgSFRNTCBjYW52YXMKKyAgICAgKi8KKyAg
ICBWaXJ0dWFsSm95c3RpY2sucHJvdG90eXBlLnJlbGVhc2VDYW52YXMgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGlmIChWaXJ0dWFsSm95c3RpY2suQ2FudmFzKSB7CisgICAgICAgICAgICBWaXJ0
dWFsSm95c3RpY2suQ2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhp
cy5fb25Qb2ludGVyRG93bkhhbmRsZXJSZWYpOworICAgICAgICAgICAgVmlydHVhbEpveXN0aWNr
LkNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMuX29uUG9pbnRl
ck1vdmVIYW5kbGVyUmVmKTsKKyAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay5DYW52YXMucmVt
b3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5fb25Qb2ludGVyVXBIYW5kbGVyUmVm
KTsKKyAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay5DYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5l
cigncG9pbnRlcm91dCcsIHRoaXMuX29uUG9pbnRlclVwSGFuZGxlclJlZik7CisgICAgICAgICAg
ICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5fb25SZXNpemUpOwor
ICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChWaXJ0dWFsSm95c3RpY2suQ2Fu
dmFzKTsKKyAgICAgICAgICAgIFZpcnR1YWxKb3lzdGljay5DYW52YXMgPSBudWxsOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvLyBVc2VkIHRvIGRyYXcgdGhlIHZpcnR1YWwgam95c3RpY2sgaW5z
aWRlIGEgMkQgY2FudmFzIG9uIHRvcCBvZiB0aGUgV2ViR0wgcmVuZGVyaW5nIGNhbnZhcworICAg
IFZpcnR1YWxKb3lzdGljay5fZ2xvYmFsSm95c3RpY2tJbmRleCA9IDA7CisgICAgcmV0dXJuIFZp
cnR1YWxKb3lzdGljazsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTWlzYy93
ZWJSZXF1ZXN0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL01pc2Mvd2ViUmVxdWVzdC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFdlYlJlcXVlc3QgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViUmVxdWVzdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2Vi
UmVxdWVzdDsgfSk7CisvKioKKyAqIEV4dGVuZGVkIHZlcnNpb24gb2YgWE1MSHR0cFJlcXVlc3Qg
d2l0aCBzdXBwb3J0IGZvciBjdXN0b21pemF0aW9ucyAoaGVhZGVycywgLi4uKQorICovCit2YXIg
V2ViUmVxdWVzdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBX
ZWJSZXF1ZXN0KCkgeworICAgICAgICB0aGlzLl94aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
KyAgICB9CisgICAgV2ViUmVxdWVzdC5wcm90b3R5cGUuX2luamVjdEN1c3RvbVJlcXVlc3RIZWFk
ZXJzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBrZXkgaW4gV2ViUmVxdWVzdC5D
dXN0b21SZXF1ZXN0SGVhZGVycykgeworICAgICAgICAgICAgdmFyIHZhbCA9IFdlYlJlcXVlc3Qu
Q3VzdG9tUmVxdWVzdEhlYWRlcnNba2V5XTsKKyAgICAgICAgICAgIGlmICh2YWwpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl94aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJS
ZXF1ZXN0LnByb3RvdHlwZSwgIm9ucHJvZ3Jlc3MiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIG9yIHNldHMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBsb2FkaW5nIHByb2dy
ZXNzIGNoYW5nZXMKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3hoci5vbnByb2dyZXNzOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5feGhyLm9ucHJvZ3Jl
c3MgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFdlYlJlcXVlc3QucHJvdG90eXBlLCAicmVhZHlTdGF0ZSIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFJldHVybnMgY2xpZW50J3Mgc3RhdGUKKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3hoci5yZWFkeVN0YXRlOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViUmVxdWVzdC5w
cm90b3R5cGUsICJzdGF0dXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIGNs
aWVudCdzIHN0YXR1cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5feGhyLnN0YXR1czsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYlJlcXVlc3QucHJvdG90eXBlLCAic3RhdHVzVGV4
dCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgY2xpZW50J3Mgc3RhdHVzIGFz
IGEgdGV4dAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5feGhyLnN0YXR1c1RleHQ7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJSZXF1ZXN0LnByb3RvdHlwZSwgInJlc3BvbnNlIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyBjbGllbnQncyByZXNwb25zZQorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5feGhyLnJlc3BvbnNlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoV2ViUmVxdWVzdC5wcm90b3R5cGUsICJyZXNwb25zZVVSTCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFJldHVybnMgY2xpZW50J3MgcmVzcG9uc2UgdXJsCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl94
aHIucmVzcG9uc2VVUkw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShXZWJSZXF1ZXN0LnByb3RvdHlwZSwgInJlc3BvbnNlVGV4dCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFJldHVybnMgY2xpZW50J3MgcmVzcG9uc2UgYXMgdGV4dAorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
eGhyLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFdlYlJlcXVlc3QucHJvdG90eXBlLCAicmVzcG9uc2VUeXBlIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBleHBlY3RlZCByZXNwb25zZSB0eXBlCisg
ICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl94aHIucmVzcG9uc2VUeXBlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5feGhyLnJlc3BvbnNlVHlwZSA9IHZhbHVl
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBXZWJSZXF1ZXN0LnByb3RvdHlwZS5hZGRFdmVudExp
c3RlbmVyID0gZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7CisgICAgICAgIHRo
aXMuX3hoci5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTsKKyAgICB9
OworICAgIFdlYlJlcXVlc3QucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlv
biAodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHsKKyAgICAgICAgdGhpcy5feGhyLnJlbW92ZUV2
ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpOworICAgIH07CisgICAgLyoqCisg
ICAgICogQ2FuY2VscyBhbnkgbmV0d29yayBhY3Rpdml0eQorICAgICAqLworICAgIFdlYlJlcXVl
c3QucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl94aHIuYWJv
cnQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEluaXRpYXRlcyB0aGUgcmVxdWVzdC4gVGhl
IG9wdGlvbmFsIGFyZ3VtZW50IHByb3ZpZGVzIHRoZSByZXF1ZXN0IGJvZHkuIFRoZSBhcmd1bWVu
dCBpcyBpZ25vcmVkIGlmIHJlcXVlc3QgbWV0aG9kIGlzIEdFVCBvciBIRUFECisgICAgICogQHBh
cmFtIGJvZHkgZGVmaW5lcyBhbiBvcHRpb25hbCByZXF1ZXN0IGJvZHkKKyAgICAgKi8KKyAgICBX
ZWJSZXF1ZXN0LnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKGJvZHkpIHsKKyAgICAgICAgaWYg
KFdlYlJlcXVlc3QuQ3VzdG9tUmVxdWVzdEhlYWRlcnMpIHsKKyAgICAgICAgICAgIHRoaXMuX2lu
amVjdEN1c3RvbVJlcXVlc3RIZWFkZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5feGhy
LnNlbmQoYm9keSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSByZXF1ZXN0IG1l
dGhvZCwgcmVxdWVzdCBVUkwKKyAgICAgKiBAcGFyYW0gbWV0aG9kIGRlZmluZXMgdGhlIG1ldGhv
ZCB0byB1c2UgKEdFVCwgUE9TVCwgZXRjLi4pCisgICAgICogQHBhcmFtIHVybCBkZWZpbmVzIHRo
ZSB1cmwgdG8gY29ubmVjdCB3aXRoCisgICAgICovCisgICAgV2ViUmVxdWVzdC5wcm90b3R5cGUu
b3BlbiA9IGZ1bmN0aW9uIChtZXRob2QsIHVybCkgeworICAgICAgICBmb3IgKHZhciBfaSA9IDAs
IF9hID0gV2ViUmVxdWVzdC5DdXN0b21SZXF1ZXN0TW9kaWZpZXJzOyBfaSA8IF9hLmxlbmd0aDsg
X2krKykgeworICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IF9hW19pXTsKKyAgICAgICAgICAgIHVw
ZGF0ZSh0aGlzLl94aHIsIHVybCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2xlYW4gdXJsCisg
ICAgICAgIHVybCA9IHVybC5yZXBsYWNlKCJmaWxlOmh0dHA6IiwgImh0dHA6Iik7CisgICAgICAg
IHVybCA9IHVybC5yZXBsYWNlKCJmaWxlOmh0dHBzOiIsICJodHRwczoiKTsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3hoci5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEN1c3RvbSBIVFRQIFJlcXVlc3QgSGVhZGVycyB0byBiZSBzZW50IHdpdGggWE1MSHR0
cFJlcXVlc3RzCisgICAgICogaS5lLiB3aGVuIGxvYWRpbmcgZmlsZXMsIHdoZXJlIHRoZSBzZXJ2
ZXIvc2VydmljZSBleHBlY3RzIGFuIEF1dGhvcml6YXRpb24gaGVhZGVyCisgICAgICovCisgICAg
V2ViUmVxdWVzdC5DdXN0b21SZXF1ZXN0SGVhZGVycyA9IHt9OworICAgIC8qKgorICAgICAqIEFk
ZCBjYWxsYmFjayBmdW5jdGlvbnMgaW4gdGhpcyBhcnJheSB0byB1cGRhdGUgYWxsIHRoZSByZXF1
ZXN0cyBiZWZvcmUgdGhleSBnZXQgc2VudCB0byB0aGUgbmV0d29yaworICAgICAqLworICAgIFdl
YlJlcXVlc3QuQ3VzdG9tUmVxdWVzdE1vZGlmaWVycyA9IG5ldyBBcnJheSgpOworICAgIHJldHVy
biBXZWJSZXF1ZXN0OworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9NaXNjL3dv
cmtlclBvb2wudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vTWlzYy93b3JrZXJQb29sLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogV29ya2VyUG9vbCAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJXb3JrZXJQb29sIiwgZnVuY3Rpb24oKSB7IHJldHVybiBXb3Jr
ZXJQb29sOyB9KTsKKy8qKgorICogSGVscGVyIGNsYXNzIHRvIHB1c2ggYWN0aW9ucyB0byBhIHBv
b2wgb2Ygd29ya2Vycy4KKyAqLwordmFyIFdvcmtlclBvb2wgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IKKyAgICAgKiBAcGFyYW0gd29y
a2VycyBBcnJheSBvZiB3b3JrZXJzIHRvIHVzZSBmb3IgYWN0aW9ucworICAgICAqLworICAgIGZ1
bmN0aW9uIFdvcmtlclBvb2wod29ya2VycykgeworICAgICAgICB0aGlzLl9wZW5kaW5nQWN0aW9u
cyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLl93b3JrZXJJbmZvcyA9IHdvcmtlcnMubWFw
KGZ1bmN0aW9uICh3b3JrZXIpIHsgcmV0dXJuICh7CisgICAgICAgICAgICB3b3JrZXI6IHdvcmtl
ciwKKyAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UKKyAgICAgICAgfSk7IH0pOworICAgIH0KKyAg
ICAvKioKKyAgICAgKiBUZXJtaW5hdGVzIGFsbCB3b3JrZXJzIGFuZCBjbGVhcnMgYW55IHBlbmRp
bmcgYWN0aW9ucy4KKyAgICAgKi8KKyAgICBXb3JrZXJQb29sLnByb3RvdHlwZS5kaXNwb3NlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fd29ya2Vy
SW5mb3M7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgd29ya2VySW5m
byA9IF9hW19pXTsKKyAgICAgICAgICAgIHdvcmtlckluZm8ud29ya2VyLnRlcm1pbmF0ZSgpOwor
ICAgICAgICB9CisgICAgICAgIGRlbGV0ZSB0aGlzLl93b3JrZXJJbmZvczsKKyAgICAgICAgZGVs
ZXRlIHRoaXMuX3BlbmRpbmdBY3Rpb25zOworICAgIH07CisgICAgLyoqCisgICAgICogUHVzaGVz
IGFuIGFjdGlvbiB0byB0aGUgd29ya2VyIHBvb2wuIElmIGFsbCB0aGUgd29ya2VycyBhcmUgYWN0
aXZlLCB0aGUgYWN0aW9uIHdpbGwgYmUKKyAgICAgKiBwZW5kZWQgdW50aWwgYSB3b3JrZXIgaGFz
IGNvbXBsZXRlZCBpdHMgYWN0aW9uLgorICAgICAqIEBwYXJhbSBhY3Rpb24gVGhlIGFjdGlvbiB0
byBwZXJmb3JtLiBDYWxsIG9uQ29tcGxldGUgd2hlbiB0aGUgYWN0aW9uIGlzIGNvbXBsZXRlLgor
ICAgICAqLworICAgIFdvcmtlclBvb2wucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoYWN0aW9u
KSB7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl93b3JrZXJJbmZvczsgX2kg
PCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciB3b3JrZXJJbmZvID0gX2FbX2ld
OworICAgICAgICAgICAgaWYgKCF3b3JrZXJJbmZvLmFjdGl2ZSkgeworICAgICAgICAgICAgICAg
IHRoaXMuX2V4ZWN1dGUod29ya2VySW5mbywgYWN0aW9uKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcGVuZGluZ0FjdGlv
bnMucHVzaChhY3Rpb24pOworICAgIH07CisgICAgV29ya2VyUG9vbC5wcm90b3R5cGUuX2V4ZWN1
dGUgPSBmdW5jdGlvbiAod29ya2VySW5mbywgYWN0aW9uKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIHdvcmtlckluZm8uYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgYWN0aW9u
KHdvcmtlckluZm8ud29ya2VyLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB3b3JrZXJJbmZv
LmFjdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAgdmFyIG5leHRBY3Rpb24gPSBfdGhpcy5fcGVu
ZGluZ0FjdGlvbnMuc2hpZnQoKTsKKyAgICAgICAgICAgIGlmIChuZXh0QWN0aW9uKSB7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX2V4ZWN1dGUod29ya2VySW5mbywgbmV4dEFjdGlvbik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgcmV0dXJuIFdvcmtlclBvb2w7Cit9
KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL01vcnBoL2luZGV4LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTW9ycGgvaW5kZXgudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE1vcnBo
VGFyZ2V0LCBNb3JwaFRhcmdldE1hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9tb3JwaFRhcmdldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tb3JwaFRhcmdldCAqLyAiLi9Nb3JwaC9tb3Jw
aFRhcmdldC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNb3JwaFRhcmdldCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX21vcnBoVGFyZ2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1vcnBo
VGFyZ2V0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX21vcnBoVGFyZ2V0TWFu
YWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9tb3JwaFRhcmdldE1hbmFnZXIgKi8gIi4vTW9ycGgvbW9ycGhUYXJnZXRNYW5hZ2VyLnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk1vcnBoVGFyZ2V0TWFuYWdlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX21vcnBoVGFyZ2V0TWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJN
b3JwaFRhcmdldE1hbmFnZXIiXTsgfSk7CisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L01vcnBoL21vcnBoVGFyZ2V0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vTW9ycGgvbW9ycGhUYXJnZXQudHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IE1vcnBoVGFyZ2V0ICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1vcnBoVGFyZ2V0IiwgZnVuY3Rp
b24oKSB7IHJldHVybiBNb3JwaFRhcmdldDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICov
ICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5l
U3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVz
aGVzL2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3Jh
dG9ycy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlz
Yy90eXBlU3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKworCisKKworCisKKy8qKgor
ICogRGVmaW5lcyBhIHRhcmdldCB0byB1c2Ugd2l0aCBNb3JwaFRhcmdldE1hbmFnZXIKKyAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX21vcnBodGFyZ2V0
cworICovCit2YXIgTW9ycGhUYXJnZXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBNb3JwaFRhcmdldAorICAgICAqIEBwYXJhbSBu
YW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHRhcmdldAorICAgICAqIEBwYXJhbSBpbmZsdWVu
Y2UgZGVmaW5lcyB0aGUgaW5mbHVlbmNlIHRvIHVzZQorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZp
bmVzIHRoZSBzY2VuZSB0aGUgbW9ycGh0YXJnZXQgYmVsb25ncyB0bworICAgICAqLworICAgIGZ1
bmN0aW9uIE1vcnBoVGFyZ2V0KAorICAgIC8qKiBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSB0YXJn
ZXQgKi8KKyAgICBuYW1lLCBpbmZsdWVuY2UsIHNjZW5lKSB7CisgICAgICAgIGlmIChpbmZsdWVu
Y2UgPT09IHZvaWQgMCkgeyBpbmZsdWVuY2UgPSAwOyB9CisgICAgICAgIGlmIChzY2VuZSA9PT0g
dm9pZCAwKSB7IHNjZW5lID0gbnVsbDsgfQorICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBsaXN0IG9mIGFuaW1hdGlvbnMK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuYW5pbWF0aW9ucyA9IG5ldyBBcnJheSgpOworICAg
ICAgICB0aGlzLl9wb3NpdGlvbnMgPSBudWxsOworICAgICAgICB0aGlzLl9ub3JtYWxzID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fdGFuZ2VudHMgPSBudWxsOworICAgICAgICB0aGlzLl91dnMgPSBu
dWxsOworICAgICAgICAvKioKKyAgICAgICAgICogT2JzZXJ2YWJsZSByYWlzZWQgd2hlbiB0aGUg
aW5mbHVlbmNlIGNoYW5nZXMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25JbmZsdWVuY2VD
aGFuZ2VkID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMu
X29uRGF0YUxheW91dENoYW5nZWQgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgdGhpcy5fYW5pbWF0aW9u
UHJvcGVydGllc092ZXJyaWRlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZSB8
fCBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbmdp
bmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7CisgICAgICAgIHRoaXMuaW5mbHVlbmNlID0gaW5m
bHVlbmNlOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXQucHJv
dG90eXBlLCAiaW5mbHVlbmNlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBz
ZXRzIHRoZSBpbmZsdWVuY2Ugb2YgdGhpcyB0YXJnZXQgKGllLiBpdHMgd2VpZ2h0IGluIHRoZSBv
dmVyYWxsIG1vcnBoaW5nKQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5mbHVlbmNlOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uIChpbmZsdWVuY2UpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pbmZs
dWVuY2UgPT09IGluZmx1ZW5jZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMuX2luZmx1ZW5jZTsKKyAgICAg
ICAgICAgIHRoaXMuX2luZmx1ZW5jZSA9IGluZmx1ZW5jZTsKKyAgICAgICAgICAgIGlmICh0aGlz
Lm9uSW5mbHVlbmNlQ2hhbmdlZC5oYXNPYnNlcnZlcnMpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Lm9uSW5mbHVlbmNlQ2hhbmdlZC5ub3RpZnlPYnNlcnZlcnMocHJldmlvdXMgPT09IDAgfHwgaW5m
bHVlbmNlID09PSAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KE1vcnBoVGFyZ2V0LnByb3RvdHlwZSwgImFuaW1hdGlvblByb3Bl
cnRpZXNPdmVycmlkZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyB0
aGUgYW5pbWF0aW9uIHByb3BlcnRpZXMgb3ZlcnJpZGUKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9hbmltYXRpb25Qcm9wZXJ0
aWVzT3ZlcnJpZGUgJiYgdGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fc2NlbmUuYW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2FuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZTsKKyAgICAg
ICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMu
X2FuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXQucHJvdG90eXBlLCAiaGFzUG9z
aXRpb25zIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gZGVmaW5p
bmcgaWYgdGhlIHRhcmdldCBjb250YWlucyBwb3NpdGlvbiBkYXRhCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX3Bvc2l0
aW9uczsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vcnBo
VGFyZ2V0LnByb3RvdHlwZSwgImhhc05vcm1hbHMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIGEgYm9vbGVhbiBkZWZpbmluZyBpZiB0aGUgdGFyZ2V0IGNvbnRhaW5zIG5vcm1hbCBk
YXRhCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiAhIXRoaXMuX25vcm1hbHM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShNb3JwaFRhcmdldC5wcm90b3R5cGUsICJoYXNUYW5nZW50cyIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFuIGRlZmluaW5nIGlmIHRoZSB0YXJn
ZXQgY29udGFpbnMgdGFuZ2VudCBkYXRhCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX3RhbmdlbnRzOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXQucHJvdG90eXBl
LCAiaGFzVVZzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gZGVm
aW5pbmcgaWYgdGhlIHRhcmdldCBjb250YWlucyB0ZXh0dXJlIGNvb3JkaW5hdGVzIGRhdGEKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
ICEhdGhpcy5fdXZzOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBBZmZlY3Rz
IHBvc2l0aW9uIGRhdGEgdG8gdGhpcyB0YXJnZXQKKyAgICAgKiBAcGFyYW0gZGF0YSBkZWZpbmVz
IHRoZSBwb3NpdGlvbiBkYXRhIHRvIHVzZQorICAgICAqLworICAgIE1vcnBoVGFyZ2V0LnByb3Rv
dHlwZS5zZXRQb3NpdGlvbnMgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB2YXIgaGFkUG9z
aXRpb25zID0gdGhpcy5oYXNQb3NpdGlvbnM7CisgICAgICAgIHRoaXMuX3Bvc2l0aW9ucyA9IGRh
dGE7CisgICAgICAgIGlmIChoYWRQb3NpdGlvbnMgIT09IHRoaXMuaGFzUG9zaXRpb25zKSB7Cisg
ICAgICAgICAgICB0aGlzLl9vbkRhdGFMYXlvdXRDaGFuZ2VkLm5vdGlmeU9ic2VydmVycyh1bmRl
ZmluZWQpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBwb3Np
dGlvbiBkYXRhIHN0b3JlZCBpbiB0aGlzIHRhcmdldAorICAgICAqIEByZXR1cm5zIGEgRmxvYXRB
cnJheSBjb250YWluaW5nIHRoZSBwb3NpdGlvbiBkYXRhIChvciBudWxsIGlmIG5vdCBwcmVzZW50
KQorICAgICAqLworICAgIE1vcnBoVGFyZ2V0LnByb3RvdHlwZS5nZXRQb3NpdGlvbnMgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbnM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBZmZlY3RzIG5vcm1hbCBkYXRhIHRvIHRoaXMgdGFyZ2V0CisgICAgICogQHBh
cmFtIGRhdGEgZGVmaW5lcyB0aGUgbm9ybWFsIGRhdGEgdG8gdXNlCisgICAgICovCisgICAgTW9y
cGhUYXJnZXQucHJvdG90eXBlLnNldE5vcm1hbHMgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAg
ICB2YXIgaGFkTm9ybWFscyA9IHRoaXMuaGFzTm9ybWFsczsKKyAgICAgICAgdGhpcy5fbm9ybWFs
cyA9IGRhdGE7CisgICAgICAgIGlmIChoYWROb3JtYWxzICE9PSB0aGlzLmhhc05vcm1hbHMpIHsK
KyAgICAgICAgICAgIHRoaXMuX29uRGF0YUxheW91dENoYW5nZWQubm90aWZ5T2JzZXJ2ZXJzKHVu
ZGVmaW5lZCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIG5v
cm1hbCBkYXRhIHN0b3JlZCBpbiB0aGlzIHRhcmdldAorICAgICAqIEByZXR1cm5zIGEgRmxvYXRB
cnJheSBjb250YWluaW5nIHRoZSBub3JtYWwgZGF0YSAob3IgbnVsbCBpZiBub3QgcHJlc2VudCkK
KyAgICAgKi8KKyAgICBNb3JwaFRhcmdldC5wcm90b3R5cGUuZ2V0Tm9ybWFscyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vcm1hbHM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZmZlY3RzIHRhbmdlbnQgZGF0YSB0byB0aGlzIHRhcmdldAorICAgICAqIEBwYXJhbSBk
YXRhIGRlZmluZXMgdGhlIHRhbmdlbnQgZGF0YSB0byB1c2UKKyAgICAgKi8KKyAgICBNb3JwaFRh
cmdldC5wcm90b3R5cGUuc2V0VGFuZ2VudHMgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB2
YXIgaGFkVGFuZ2VudHMgPSB0aGlzLmhhc1RhbmdlbnRzOworICAgICAgICB0aGlzLl90YW5nZW50
cyA9IGRhdGE7CisgICAgICAgIGlmIChoYWRUYW5nZW50cyAhPT0gdGhpcy5oYXNUYW5nZW50cykg
eworICAgICAgICAgICAgdGhpcy5fb25EYXRhTGF5b3V0Q2hhbmdlZC5ub3RpZnlPYnNlcnZlcnMo
dW5kZWZpbmVkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
dGFuZ2VudCBkYXRhIHN0b3JlZCBpbiB0aGlzIHRhcmdldAorICAgICAqIEByZXR1cm5zIGEgRmxv
YXRBcnJheSBjb250YWluaW5nIHRoZSB0YW5nZW50IGRhdGEgKG9yIG51bGwgaWYgbm90IHByZXNl
bnQpCisgICAgICovCisgICAgTW9ycGhUYXJnZXQucHJvdG90eXBlLmdldFRhbmdlbnRzID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdGFuZ2VudHM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBZmZlY3RzIHRleHR1cmUgY29vcmRpbmF0ZXMgZGF0YSB0byB0aGlzIHRhcmdl
dAorICAgICAqIEBwYXJhbSBkYXRhIGRlZmluZXMgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgZGF0
YSB0byB1c2UKKyAgICAgKi8KKyAgICBNb3JwaFRhcmdldC5wcm90b3R5cGUuc2V0VVZzID0gZnVu
Y3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdmFyIGhhZFVWcyA9IHRoaXMuaGFzVVZzOworICAgICAg
ICB0aGlzLl91dnMgPSBkYXRhOworICAgICAgICBpZiAoaGFkVVZzICE9PSB0aGlzLmhhc1VWcykg
eworICAgICAgICAgICAgdGhpcy5fb25EYXRhTGF5b3V0Q2hhbmdlZC5ub3RpZnlPYnNlcnZlcnMo
dW5kZWZpbmVkKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
dGV4dHVyZSBjb29yZGluYXRlcyBkYXRhIHN0b3JlZCBpbiB0aGlzIHRhcmdldAorICAgICAqIEBy
ZXR1cm5zIGEgRmxvYXRBcnJheSBjb250YWluaW5nIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGRh
dGEgKG9yIG51bGwgaWYgbm90IHByZXNlbnQpCisgICAgICovCisgICAgTW9ycGhUYXJnZXQucHJv
dG90eXBlLmdldFVWcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3V2czsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIGN1cnJlbnQgdGFyZ2V0IGlu
dG8gYSBTZXJpYWxpemF0aW9uIG9iamVjdAorICAgICAqIEByZXR1cm5zIHRoZSBzZXJpYWxpemVk
IG9iamVjdAorICAgICAqLworICAgIE1vcnBoVGFyZ2V0LnByb3RvdHlwZS5zZXJpYWxpemUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QubmFtZSA9IHRoaXMubmFtZTsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5pbmZsdWVuY2UgPSB0aGlzLmluZmx1ZW5jZTsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5wb3NpdGlvbnMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlz
LmdldFBvc2l0aW9ucygpKTsKKyAgICAgICAgaWYgKHRoaXMuaWQgIT0gbnVsbCkgeworICAgICAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5pZCA9IHRoaXMuaWQ7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuaGFzTm9ybWFscykgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC5ub3JtYWxzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5nZXROb3JtYWxzKCkp
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmhhc1RhbmdlbnRzKSB7CisgICAgICAgICAg
ICBzZXJpYWxpemF0aW9uT2JqZWN0LnRhbmdlbnRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNh
bGwodGhpcy5nZXRUYW5nZW50cygpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5oYXNV
VnMpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudXZzID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlLmNhbGwodGhpcy5nZXRVVnMoKSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQW5p
bWF0aW9ucworICAgICAgICBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5BcHBlbmRTZXJpYWxpemVkQW5pbWF0aW9ucyh0
aGlzLCBzZXJpYWxpemF0aW9uT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25P
YmplY3Q7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgIk1vcnBo
VGFyZ2V0IgorICAgICAqIEByZXR1cm5zICJNb3JwaFRhcmdldCIKKyAgICAgKi8KKyAgICBNb3Jw
aFRhcmdldC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gIk1vcnBoVGFyZ2V0IjsKKyAgICB9OworICAgIC8vIFN0YXRpY3MKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgbmV3IHRhcmdldCBmcm9tIHNlcmlhbGl6ZWQgZGF0YQorICAgICAqIEBw
YXJhbSBzZXJpYWxpemF0aW9uT2JqZWN0IGRlZmluZXMgdGhlIHNlcmlhbGl6ZWQgZGF0YSB0byB1
c2UKKyAgICAgKiBAcmV0dXJucyBhIG5ldyBNb3JwaFRhcmdldAorICAgICAqLworICAgIE1vcnBo
VGFyZ2V0LlBhcnNlID0gZnVuY3Rpb24gKHNlcmlhbGl6YXRpb25PYmplY3QpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IG5ldyBNb3JwaFRhcmdldChzZXJpYWxpemF0aW9uT2JqZWN0Lm5hbWUsIHNl
cmlhbGl6YXRpb25PYmplY3QuaW5mbHVlbmNlKTsKKyAgICAgICAgcmVzdWx0LnNldFBvc2l0aW9u
cyhzZXJpYWxpemF0aW9uT2JqZWN0LnBvc2l0aW9ucyk7CisgICAgICAgIGlmIChzZXJpYWxpemF0
aW9uT2JqZWN0LmlkICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJlc3VsdC5pZCA9IHNlcmlhbGl6
YXRpb25PYmplY3QuaWQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlcmlhbGl6YXRpb25PYmpl
Y3Qubm9ybWFscykgeworICAgICAgICAgICAgcmVzdWx0LnNldE5vcm1hbHMoc2VyaWFsaXphdGlv
bk9iamVjdC5ub3JtYWxzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2VyaWFsaXphdGlvbk9i
amVjdC50YW5nZW50cykgeworICAgICAgICAgICAgcmVzdWx0LnNldFRhbmdlbnRzKHNlcmlhbGl6
YXRpb25PYmplY3QudGFuZ2VudHMpOworICAgICAgICB9CisgICAgICAgIGlmIChzZXJpYWxpemF0
aW9uT2JqZWN0LnV2cykgeworICAgICAgICAgICAgcmVzdWx0LnNldFVWcyhzZXJpYWxpemF0aW9u
T2JqZWN0LnV2cyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQW5pbWF0aW9ucworICAgICAgICBp
ZiAoc2VyaWFsaXphdGlvbk9iamVjdC5hbmltYXRpb25zKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBhbmltYXRpb25JbmRleCA9IDA7IGFuaW1hdGlvbkluZGV4IDwgc2VyaWFsaXphdGlvbk9iamVj
dC5hbmltYXRpb25zLmxlbmd0aDsgYW5pbWF0aW9uSW5kZXgrKykgeworICAgICAgICAgICAgICAg
IHZhciBwYXJzZWRBbmltYXRpb24gPSBzZXJpYWxpemF0aW9uT2JqZWN0LmFuaW1hdGlvbnNbYW5p
bWF0aW9uSW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbENsYXNzID0gX01pc2Nf
dHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIl9UeXBlU3RvcmUiXS5HZXRD
bGFzcygiQkFCWUxPTi5BbmltYXRpb24iKTsKKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxD
bGFzcykgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYW5pbWF0aW9ucy5wdXNoKGludGVy
bmFsQ2xhc3MuUGFyc2UocGFyc2VkQW5pbWF0aW9uKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgTW9ycGhUYXJnZXQgZnJvbSBtZXNoIGRhdGEKKyAgICAg
KiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBzb3VyY2UgbWVzaAorICAgICAqIEBwYXJhbSBuYW1l
IGRlZmluZXMgdGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgbmV3IHRhcmdldAorICAgICAqIEBwYXJh
bSBpbmZsdWVuY2UgZGVmaW5lcyB0aGUgaW5mbHVlbmNlIHRvIGF0dGFjaCB0byB0aGUgdGFyZ2V0
CisgICAgICogQHJldHVybnMgYSBuZXcgTW9ycGhUYXJnZXQKKyAgICAgKi8KKyAgICBNb3JwaFRh
cmdldC5Gcm9tTWVzaCA9IGZ1bmN0aW9uIChtZXNoLCBuYW1lLCBpbmZsdWVuY2UpIHsKKyAgICAg
ICAgaWYgKCFuYW1lKSB7CisgICAgICAgICAgICBuYW1lID0gbWVzaC5uYW1lOworICAgICAgICB9
CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgTW9ycGhUYXJnZXQobmFtZSwgaW5mbHVlbmNlLCBt
ZXNoLmdldFNjZW5lKCkpOworICAgICAgICByZXN1bHQuc2V0UG9zaXRpb25zKG1lc2guZ2V0VmVy
dGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
cnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCkpOworICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2Vz
RGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
VmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXROb3Jt
YWxzKG1lc2guZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmQpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVGFuZ2VudEtpbmQpKSB7Cisg
ICAgICAgICAgICByZXN1bHQuc2V0VGFuZ2VudHMobWVzaC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4QnVmZmVyIl0uVGFu
Z2VudEtpbmQpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0YVBy
ZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4
QnVmZmVyIl0uVVZLaW5kKSkgeworICAgICAgICAgICAgcmVzdWx0LnNldFVWcyhtZXNoLmdldFZl
cnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZXJ0ZXhCdWZmZXIiXS5VVktpbmQpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBNb3JwaFRhcmdldC5wcm90b3R5
cGUsICJpZCIsIHZvaWQgMCk7CisgICAgcmV0dXJuIE1vcnBoVGFyZ2V0OworfSgpKTsKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9Nb3JwaC9tb3JwaFRhcmdldE1hbmFnZXIudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTW9ycGgv
bW9ycGhUYXJnZXRNYW5hZ2VyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogTW9ycGhUYXJnZXRNYW5hZ2VyICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1vcnBoVGFyZ2V0TWFuYWdlciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gTW9ycGhUYXJnZXRNYW5hZ2VyOyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3NtYXJ0QXJyYXkgKi8gIi4vTWlz
Yy9zbWFydEFycmF5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0Vu
Z2luZXMvZW5naW5lU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbW9ycGhU
YXJnZXRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vbW9ycGhUYXJnZXQgKi8gIi4vTW9ycGgvbW9ycGhUYXJnZXQudHMiKTsKKworCisKKwor
LyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZGVmb3JtIG1lc2hlcyB1c2luZyBtb3JwaGlu
ZyBiZXR3ZWVuIGRpZmZlcmVudCB0YXJnZXRzCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9tb3JwaHRhcmdldHMKKyAqLwordmFyIE1vcnBoVGFyZ2V0
TWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgbmV3IE1vcnBoVGFyZ2V0TWFuYWdlcgorICAgICAqIEBwYXJhbSBzY2VuZSBkZWZp
bmVzIHRoZSBjdXJyZW50IHNjZW5lCisgICAgICovCisgICAgZnVuY3Rpb24gTW9ycGhUYXJnZXRN
YW5hZ2VyKHNjZW5lKSB7CisgICAgICAgIGlmIChzY2VuZSA9PT0gdm9pZCAwKSB7IHNjZW5lID0g
bnVsbDsgfQorICAgICAgICB0aGlzLl90YXJnZXRzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRo
aXMuX3RhcmdldEluZmx1ZW5jZUNoYW5nZWRPYnNlcnZlcnMgPSBuZXcgQXJyYXkoKTsKKyAgICAg
ICAgdGhpcy5fdGFyZ2V0RGF0YUxheW91dENoYW5nZWRPYnNlcnZlcnMgPSBuZXcgQXJyYXkoKTsK
KyAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0cyA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNtYXJ0QXJyYXkiXSgxNik7CisgICAgICAgIHRoaXMu
X3N1cHBvcnRzTm9ybWFscyA9IGZhbHNlOworICAgICAgICB0aGlzLl9zdXBwb3J0c1RhbmdlbnRz
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3N1cHBvcnRzVVZzID0gZmFsc2U7CisgICAgICAgIHRo
aXMuX3ZlcnRleENvdW50ID0gMDsKKyAgICAgICAgdGhpcy5fdW5pcXVlSWQgPSAwOworICAgICAg
ICB0aGlzLl90ZW1wSW5mbHVlbmNlcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAg
ICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIG5vcm1hbHMgbXVzdCBi
ZSBtb3JwaGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLmVuYWJsZU5vcm1hbE1vcnBoaW5n
ID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4g
aW5kaWNhdGluZyBpZiB0YW5nZW50cyBtdXN0IGJlIG1vcnBoZWQKKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMuZW5hYmxlVGFuZ2VudE1vcnBoaW5nID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBVViBtdXN0IGJlIG1v
cnBoZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZW5hYmxlVVZNb3JwaGluZyA9IHRydWU7
CisgICAgICAgIGlmICghc2NlbmUpIHsKKyAgICAgICAgICAgIHNjZW5lID0gX0VuZ2luZXNfZW5n
aW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRW5naW5lU3RvcmUiXS5MYXN0
Q3JlYXRlZFNjZW5lOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7Cisg
ICAgICAgIGlmICh0aGlzLl9zY2VuZSkgeworICAgICAgICAgICAgdGhpcy5fc2NlbmUubW9ycGhU
YXJnZXRNYW5hZ2Vycy5wdXNoKHRoaXMpOworICAgICAgICAgICAgdGhpcy5fdW5pcXVlSWQgPSB0
aGlzLl9zY2VuZS5nZXRVbmlxdWVJZCgpOworICAgICAgICB9CisgICAgfQorICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShNb3JwaFRhcmdldE1hbmFnZXIucHJvdG90eXBlLCAidW5pcXVlSWQiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB1bmlxdWUgSUQgb2YgdGhpcyBtYW5h
Z2VyCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl91bmlxdWVJZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KE1vcnBoVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUsICJ2ZXJ0ZXhDb3VudCIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBo
YW5kbGVkIGJ5IHRoaXMgbWFuYWdlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmVydGV4Q291bnQ7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3JwaFRhcmdldE1hbmFnZXIucHJv
dG90eXBlLCAic3VwcG9ydHNOb3JtYWxzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIG1hbmFnZXIgc3VwcG9ydHMgbW9ycGhpbmcg
b2Ygbm9ybWFscworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fc3VwcG9ydHNOb3JtYWxzICYmIHRoaXMuZW5hYmxlTm9ybWFs
TW9ycGhpbmc7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShN
b3JwaFRhcmdldE1hbmFnZXIucHJvdG90eXBlLCAic3VwcG9ydHNUYW5nZW50cyIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhpcyBtYW5h
Z2VyIHN1cHBvcnRzIG1vcnBoaW5nIG9mIHRhbmdlbnRzCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXBwb3J0c1Rhbmdl
bnRzICYmIHRoaXMuZW5hYmxlVGFuZ2VudE1vcnBoaW5nOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRNYW5hZ2VyLnByb3RvdHlwZSwgInN1
cHBvcnRzVVZzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5k
aWNhdGluZyBpZiB0aGlzIG1hbmFnZXIgc3VwcG9ydHMgbW9ycGhpbmcgb2YgdGV4dHVyZSBjb29y
ZGluYXRlcworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fc3VwcG9ydHNVVnMgJiYgdGhpcy5lbmFibGVVVk1vcnBoaW5nOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9ycGhUYXJnZXRN
YW5hZ2VyLnByb3RvdHlwZSwgIm51bVRhcmdldHMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIHRoZSBudW1iZXIgb2YgdGFyZ2V0cyBzdG9yZWQgaW4gdGhpcyBtYW5hZ2VyCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl90YXJnZXRzLmxlbmd0aDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KE1vcnBoVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUsICJudW1JbmZsdWVuY2VycyIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIG51bWJlciBvZiBpbmZsdWVuY2Vy
cyAoaWUuIHRoZSBudW1iZXIgb2YgdGFyZ2V0cyB3aXRoIGluZmx1ZW5jZXMgPiAwKQorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fYWN0aXZlVGFyZ2V0cy5sZW5ndGg7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShNb3JwaFRhcmdldE1hbmFnZXIucHJvdG90eXBlLCAiaW5mbHVlbmNlcyIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgaW5mbHVlbmNlcyAo
b25lIHBlciB0YXJnZXQpCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbmZsdWVuY2VzOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBhY3RpdmUgdGFyZ2V0IGF0IHNwZWNpZmllZCBpbmRl
eC4gQW4gYWN0aXZlIHRhcmdldCBpcyBhIHRhcmdldCB3aXRoIGFuIGluZmx1ZW5jZSA+IDAKKyAg
ICAgKiBAcGFyYW0gaW5kZXggZGVmaW5lcyB0aGUgaW5kZXggdG8gY2hlY2sKKyAgICAgKiBAcmV0
dXJucyB0aGUgcmVxdWVzdGVkIHRhcmdldAorICAgICAqLworICAgIE1vcnBoVGFyZ2V0TWFuYWdl
ci5wcm90b3R5cGUuZ2V0QWN0aXZlVGFyZ2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7CisgICAgICAg
IHJldHVybiB0aGlzLl9hY3RpdmVUYXJnZXRzLmRhdGFbaW5kZXhdOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgdGFyZ2V0IGF0IHNwZWNpZmllZCBpbmRleAorICAgICAqIEBwYXJh
bSBpbmRleCBkZWZpbmVzIHRoZSBpbmRleCB0byBjaGVjaworICAgICAqIEByZXR1cm5zIHRoZSBy
ZXF1ZXN0ZWQgdGFyZ2V0CisgICAgICovCisgICAgTW9ycGhUYXJnZXRNYW5hZ2VyLnByb3RvdHlw
ZS5nZXRUYXJnZXQgPSBmdW5jdGlvbiAoaW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Rh
cmdldHNbaW5kZXhdOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGEgbmV3IHRhcmdldCB0
byB0aGlzIG1hbmFnZXIKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgdGhlIHRhcmdldCB0
byBhZGQKKyAgICAgKi8KKyAgICBNb3JwaFRhcmdldE1hbmFnZXIucHJvdG90eXBlLmFkZFRhcmdl
dCA9IGZ1bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgdGhpcy5fdGFyZ2V0cy5wdXNoKHRhcmdldCk7CisgICAgICAgIHRoaXMuX3RhcmdldEluZmx1
ZW5jZUNoYW5nZWRPYnNlcnZlcnMucHVzaCh0YXJnZXQub25JbmZsdWVuY2VDaGFuZ2VkLmFkZChm
dW5jdGlvbiAobmVlZFVwZGF0ZSkgeworICAgICAgICAgICAgX3RoaXMuX3N5bmNBY3RpdmVUYXJn
ZXRzKG5lZWRVcGRhdGUpOworICAgICAgICB9KSk7CisgICAgICAgIHRoaXMuX3RhcmdldERhdGFM
YXlvdXRDaGFuZ2VkT2JzZXJ2ZXJzLnB1c2godGFyZ2V0Ll9vbkRhdGFMYXlvdXRDaGFuZ2VkLmFk
ZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5fc3luY0FjdGl2ZVRhcmdldHModHJ1
ZSk7CisgICAgICAgIH0pKTsKKyAgICAgICAgdGhpcy5fc3luY0FjdGl2ZVRhcmdldHModHJ1ZSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGEgdGFyZ2V0IGZyb20gdGhlIG1hbmFn
ZXIKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IGRlZmluZXMgdGhlIHRhcmdldCB0byByZW1vdmUKKyAg
ICAgKi8KKyAgICBNb3JwaFRhcmdldE1hbmFnZXIucHJvdG90eXBlLnJlbW92ZVRhcmdldCA9IGZ1
bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fdGFyZ2V0cy5pbmRl
eE9mKHRhcmdldCk7CisgICAgICAgIGlmIChpbmRleCA+PSAwKSB7CisgICAgICAgICAgICB0aGlz
Ll90YXJnZXRzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgICAgICB0YXJnZXQub25JbmZsdWVu
Y2VDaGFuZ2VkLnJlbW92ZSh0aGlzLl90YXJnZXRJbmZsdWVuY2VDaGFuZ2VkT2JzZXJ2ZXJzLnNw
bGljZShpbmRleCwgMSlbMF0pOworICAgICAgICAgICAgdGFyZ2V0Ll9vbkRhdGFMYXlvdXRDaGFu
Z2VkLnJlbW92ZSh0aGlzLl90YXJnZXREYXRhTGF5b3V0Q2hhbmdlZE9ic2VydmVycy5zcGxpY2Uo
aW5kZXgsIDEpWzBdKTsKKyAgICAgICAgICAgIHRoaXMuX3N5bmNBY3RpdmVUYXJnZXRzKHRydWUp
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBjdXJy
ZW50IG1hbmFnZXIgaW50byBhIFNlcmlhbGl6YXRpb24gb2JqZWN0CisgICAgICogQHJldHVybnMg
dGhlIHNlcmlhbGl6ZWQgb2JqZWN0CisgICAgICovCisgICAgTW9ycGhUYXJnZXRNYW5hZ2VyLnBy
b3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0
aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaWQgPSB0aGlzLnVu
aXF1ZUlkOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnRhcmdldHMgPSBbXTsKKyAgICAg
ICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX3RhcmdldHM7IF9pIDwgX2EubGVuZ3RoOyBf
aSsrKSB7CisgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gX2FbX2ldOworICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC50YXJnZXRzLnB1c2godGFyZ2V0LnNlcmlhbGl6ZSgpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIE1v
cnBoVGFyZ2V0TWFuYWdlci5wcm90b3R5cGUuX3N5bmNBY3RpdmVUYXJnZXRzID0gZnVuY3Rpb24g
KG5lZWRVcGRhdGUpIHsKKyAgICAgICAgdmFyIGluZmx1ZW5jZUNvdW50ID0gMDsKKyAgICAgICAg
dGhpcy5fYWN0aXZlVGFyZ2V0cy5yZXNldCgpOworICAgICAgICB0aGlzLl9zdXBwb3J0c05vcm1h
bHMgPSB0cnVlOworICAgICAgICB0aGlzLl9zdXBwb3J0c1RhbmdlbnRzID0gdHJ1ZTsKKyAgICAg
ICAgdGhpcy5fc3VwcG9ydHNVVnMgPSB0cnVlOworICAgICAgICB0aGlzLl92ZXJ0ZXhDb3VudCA9
IDA7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl90YXJnZXRzOyBfaSA8IF9h
Lmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIHRhcmdldCA9IF9hW19pXTsKKyAgICAg
ICAgICAgIGlmICh0YXJnZXQuaW5mbHVlbmNlID09PSAwKSB7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9hY3RpdmVUYXJnZXRzLnB1
c2godGFyZ2V0KTsKKyAgICAgICAgICAgIHRoaXMuX3RlbXBJbmZsdWVuY2VzW2luZmx1ZW5jZUNv
dW50KytdID0gdGFyZ2V0LmluZmx1ZW5jZTsKKyAgICAgICAgICAgIHRoaXMuX3N1cHBvcnRzTm9y
bWFscyA9IHRoaXMuX3N1cHBvcnRzTm9ybWFscyAmJiB0YXJnZXQuaGFzTm9ybWFsczsKKyAgICAg
ICAgICAgIHRoaXMuX3N1cHBvcnRzVGFuZ2VudHMgPSB0aGlzLl9zdXBwb3J0c1RhbmdlbnRzICYm
IHRhcmdldC5oYXNUYW5nZW50czsKKyAgICAgICAgICAgIHRoaXMuX3N1cHBvcnRzVVZzID0gdGhp
cy5fc3VwcG9ydHNVVnMgJiYgdGFyZ2V0Lmhhc1VWczsKKyAgICAgICAgICAgIHZhciBwb3NpdGlv
bnMgPSB0YXJnZXQuZ2V0UG9zaXRpb25zKCk7CisgICAgICAgICAgICBpZiAocG9zaXRpb25zKSB7
CisgICAgICAgICAgICAgICAgdmFyIHZlcnRleENvdW50ID0gcG9zaXRpb25zLmxlbmd0aCAvIDM7
CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZlcnRleENvdW50ID09PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX3ZlcnRleENvdW50ID0gdmVydGV4Q291bnQ7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3ZlcnRleENvdW50ICE9PSB2
ZXJ0ZXhDb3VudCkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uRXJyb3IoIkluY29tcGF0aWJsZSB0YXJnZXQu
IFRhcmdldHMgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSB2ZXJ0aWNlcyBjb3VudC4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2luZmx1ZW5jZXMgfHwgdGhpcy5faW5mbHVl
bmNlcy5sZW5ndGggIT09IGluZmx1ZW5jZUNvdW50KSB7CisgICAgICAgICAgICB0aGlzLl9pbmZs
dWVuY2VzID0gbmV3IEZsb2F0MzJBcnJheShpbmZsdWVuY2VDb3VudCk7CisgICAgICAgIH0KKyAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGluZmx1ZW5jZUNvdW50OyBpbmRleCsr
KSB7CisgICAgICAgICAgICB0aGlzLl9pbmZsdWVuY2VzW2luZGV4XSA9IHRoaXMuX3RlbXBJbmZs
dWVuY2VzW2luZGV4XTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmVlZFVwZGF0ZSkgeworICAg
ICAgICAgICAgdGhpcy5zeW5jaHJvbml6ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBTeW5jcmhvbml6ZSB0aGUgdGFyZ2V0cyB3aXRoIGFsbCB0aGUgbWVzaGVzIHVzaW5n
IHRoaXMgbW9ycGggdGFyZ2V0IG1hbmFnZXIKKyAgICAgKi8KKyAgICBNb3JwaFRhcmdldE1hbmFn
ZXIucHJvdG90eXBlLnN5bmNocm9uaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRo
aXMuX3NjZW5lKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8g
RmxhZyBtZXNoZXMgYXMgZGlydHkgdG8gcmVzeW5jIHdpdGggdGhlIGFjdGl2ZSB0YXJnZXRzCisg
ICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9zY2VuZS5tZXNoZXM7IF9pIDwgX2Eu
bGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IF9hW19pXTsKKyAgICAgICAg
ICAgIGlmIChtZXNoLm1vcnBoVGFyZ2V0TWFuYWdlciA9PT0gdGhpcykgeworICAgICAgICAgICAg
ICAgIG1lc2guX3N5bmNHZW9tZXRyeVdpdGhNb3JwaFRhcmdldE1hbmFnZXIoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLy8gU3RhdGljcworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgTW9ycGhUYXJnZXRNYW5hZ2VyIGZyb20gc2VyaWFsaXplZCBkYXRhCisg
ICAgICogQHBhcmFtIHNlcmlhbGl6YXRpb25PYmplY3QgZGVmaW5lcyB0aGUgc2VyaWFsaXplZCBk
YXRhCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAg
KiBAcmV0dXJucyB0aGUgbmV3IE1vcnBoVGFyZ2V0TWFuYWdlcgorICAgICAqLworICAgIE1vcnBo
VGFyZ2V0TWFuYWdlci5QYXJzZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0LCBzY2Vu
ZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IE1vcnBoVGFyZ2V0TWFuYWdlcihzY2VuZSk7
CisgICAgICAgIHJlc3VsdC5fdW5pcXVlSWQgPSBzZXJpYWxpemF0aW9uT2JqZWN0LmlkOworICAg
ICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gc2VyaWFsaXphdGlvbk9iamVjdC50YXJnZXRzOyBf
aSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIHRhcmdldERhdGEgPSBfYVtf
aV07CisgICAgICAgICAgICByZXN1bHQuYWRkVGFyZ2V0KF9tb3JwaFRhcmdldF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJNb3JwaFRhcmdldCJdLlBhcnNlKHRhcmdldERhdGEpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgcmV0dXJuIE1vcnBo
VGFyZ2V0TWFuYWdlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTmF2aWdh
dGlvbi9QbHVnaW5zL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL05hdmlnYXRpb24vUGx1Z2lucy9pbmRleC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IFJlY2FzdEpTUGx1Z2luLCBSZWNhc3RKU0Nyb3dkICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmVjYXN0SlNQbHVnaW5fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmVjYXN0SlNQbHVnaW4g
Ki8gIi4vTmF2aWdhdGlvbi9QbHVnaW5zL3JlY2FzdEpTUGx1Z2luLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlJlY2FzdEpTUGx1Z2luIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcmVjYXN0SlNQbHVn
aW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUmVjYXN0SlNQbHVnaW4iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUmVjYXN0SlNDcm93ZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Jl
Y2FzdEpTUGx1Z2luX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJlY2FzdEpTQ3Jvd2Qi
XTsgfSk7CisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9OYXZpZ2F0aW9uL1BsdWdpbnMv
cmVjYXN0SlNQbHVnaW4udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vTmF2aWdhdGlvbi9QbHVnaW5zL3JlY2FzdEpTUGx1
Z2luLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUmVjYXN0SlNQbHVnaW4sIFJlY2FzdEpTQ3Jv
d2QgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVjYXN0SlNQbHVnaW4i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFJlY2FzdEpTUGx1Z2luOyB9KTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlJlY2FzdEpTQ3Jvd2QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJlY2FzdEpTQ3Jvd2Q7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9sb2dnZXIg
Ki8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVz
X21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVzL21lc2gudmVydGV4RGF0YSAqLyAiLi9NZXNoZXMv
bWVzaC52ZXJ0ZXhEYXRhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19t
ZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoICovICIuL01hdGhzL21hdGgu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVz
L2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisKKworCisKKworLyoqCisgKiBSZWNh
c3RKUyBuYXZpZ2F0aW9uIHBsdWdpbgorICovCit2YXIgUmVjYXN0SlNQbHVnaW4gPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIHJl
Y2FzdEpTIHBsdWdpbgorICAgICAqIEBwYXJhbSByZWNhc3RJbmplY3Rpb24gY2FuIGJlIHVzZWQg
dG8gaW5qZWN0IHlvdXIgb3duIHJlY2FzdCByZWZlcmVuY2UKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBSZWNhc3RKU1BsdWdpbihyZWNhc3RJbmplY3Rpb24pIHsKKyAgICAgICAgaWYgKHJlY2FzdElu
amVjdGlvbiA9PT0gdm9pZCAwKSB7IHJlY2FzdEluamVjdGlvbiA9IFJlY2FzdDsgfQorICAgICAg
ICAvKioKKyAgICAgICAgICogUmVmZXJlbmNlIHRvIHRoZSBSZWNhc3QgbGlicmFyeQorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5ianNSRUNBU1QgPSB7fTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIHBsdWdpbiBuYW1lCisgICAgICAgICAqLworICAgICAgICB0aGlzLm5hbWUgPSAiUmVjYXN0
SlNQbHVnaW4iOworICAgICAgICBpZiAodHlwZW9mIHJlY2FzdEluamVjdGlvbiA9PT0gImZ1bmN0
aW9uIikgeworICAgICAgICAgICAgcmVjYXN0SW5qZWN0aW9uKHRoaXMuYmpzUkVDQVNUKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuYmpzUkVDQVNUID0gcmVj
YXN0SW5qZWN0aW9uOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCgp
KSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siTG9nZ2VyIl0uRXJyb3IoIlJlY2FzdEpTIGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBtYWtl
IHN1cmUgeW91IGluY2x1ZGVkIHRoZSBqcyBmaWxlLiIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuYXZpZ2F0aW9uIG1l
c2gKKyAgICAgKiBAcGFyYW0gbWVzaGVzIGFycmF5IG9mIGFsbCB0aGUgZ2VvbWV0cnkgdXNlZCB0
byBjb21wdXRlIHRoZSBuYXZpZ2F0aW8gbWVzaAorICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIGJ1
bmNoIG9mIHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgZ2VvbWV0cnkKKyAgICAgKi8KKyAgICBS
ZWNhc3RKU1BsdWdpbi5wcm90b3R5cGUuY3JlYXRlTWF2TWVzaCA9IGZ1bmN0aW9uIChtZXNoZXMs
IHBhcmFtZXRlcnMpIHsKKyAgICAgICAgdmFyIHJjID0gbmV3IHRoaXMuYmpzUkVDQVNULnJjQ29u
ZmlnKCk7CisgICAgICAgIHJjLmNzID0gcGFyYW1ldGVycy5jczsKKyAgICAgICAgcmMuY2ggPSBw
YXJhbWV0ZXJzLmNoOworICAgICAgICByYy5ib3JkZXJTaXplID0gMDsKKyAgICAgICAgcmMudGls
ZVNpemUgPSAwOworICAgICAgICByYy53YWxrYWJsZVNsb3BlQW5nbGUgPSBwYXJhbWV0ZXJzLndh
bGthYmxlU2xvcGVBbmdsZTsKKyAgICAgICAgcmMud2Fsa2FibGVIZWlnaHQgPSBwYXJhbWV0ZXJz
LndhbGthYmxlSGVpZ2h0OworICAgICAgICByYy53YWxrYWJsZUNsaW1iID0gcGFyYW1ldGVycy53
YWxrYWJsZUNsaW1iOworICAgICAgICByYy53YWxrYWJsZVJhZGl1cyA9IHBhcmFtZXRlcnMud2Fs
a2FibGVSYWRpdXM7CisgICAgICAgIHJjLm1heEVkZ2VMZW4gPSBwYXJhbWV0ZXJzLm1heEVkZ2VM
ZW47CisgICAgICAgIHJjLm1heFNpbXBsaWZpY2F0aW9uRXJyb3IgPSBwYXJhbWV0ZXJzLm1heFNp
bXBsaWZpY2F0aW9uRXJyb3I7CisgICAgICAgIHJjLm1pblJlZ2lvbkFyZWEgPSBwYXJhbWV0ZXJz
Lm1pblJlZ2lvbkFyZWE7CisgICAgICAgIHJjLm1lcmdlUmVnaW9uQXJlYSA9IHBhcmFtZXRlcnMu
bWVyZ2VSZWdpb25BcmVhOworICAgICAgICByYy5tYXhWZXJ0c1BlclBvbHkgPSBwYXJhbWV0ZXJz
Lm1heFZlcnRzUGVyUG9seTsKKyAgICAgICAgcmMuZGV0YWlsU2FtcGxlRGlzdCA9IHBhcmFtZXRl
cnMuZGV0YWlsU2FtcGxlRGlzdDsKKyAgICAgICAgcmMuZGV0YWlsU2FtcGxlTWF4RXJyb3IgPSBw
YXJhbWV0ZXJzLmRldGFpbFNhbXBsZU1heEVycm9yOworICAgICAgICB0aGlzLm5hdk1lc2ggPSBu
ZXcgdGhpcy5ianNSRUNBU1QuTmF2TWVzaCgpOworICAgICAgICB2YXIgaW5kZXg7CisgICAgICAg
IHZhciB0cmk7CisgICAgICAgIHZhciBwdDsKKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAg
ICAgICAgdmFyIHBvc2l0aW9ucyA9IFtdOworICAgICAgICB2YXIgb2Zmc2V0ID0gMDsKKyAgICAg
ICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAg
ICAgICAgICAgaWYgKG1lc2hlc1tpbmRleF0pIHsKKyAgICAgICAgICAgICAgICB2YXIgbWVzaCA9
IG1lc2hlc1tpbmRleF07CisgICAgICAgICAgICAgICAgdmFyIG1lc2hJbmRpY2VzID0gbWVzaC5n
ZXRJbmRpY2VzKCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXNoSW5kaWNlcykgeworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdmFyIG1lc2hQb3NpdGlvbnMgPSBtZXNoLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktp
bmQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXNoUG9zaXRpb25zKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB2YXIgd20gPSBtZXNoLmNvbXB1dGVXb3JsZE1hdHJpeChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgZm9yICh0cmkgPSAwOyB0cmkgPCBtZXNoSW5kaWNlcy5sZW5ndGg7IHRyaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChtZXNoSW5kaWNlc1t0cmldICsg
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9y
bWVkID0gX01hdGhzX21hdGhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJd
Llplcm8oKTsKKyAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBfTWF0aHNfbWF0aF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAgICAg
ICAgIGZvciAocHQgPSAwOyBwdCA8IG1lc2hQb3NpdGlvbnMubGVuZ3RoOyBwdCArPSAzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlUb1JlZihtZXNoUG9zaXRpb25zLCBwdCwgcG9zaXRpb24p
OworICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXNUb1JlZihwb3NpdGlvbiwgd20s
IHRyYW5zZm9ybWVkKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godHJhbnNm
b3JtZWQueCwgdHJhbnNmb3JtZWQueSwgdHJhbnNmb3JtZWQueik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIG9mZnNldCArPSBtZXNoUG9zaXRpb25zLmxlbmd0aCAvIDM7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5uYXZNZXNoLmJ1aWxkKHBvc2l0
aW9ucywgb2Zmc2V0LCBpbmRpY2VzLCBpbmRpY2VzLmxlbmd0aCwgcmMpOworICAgIH07CisgICAg
LyoqCisgICAgICogQ3JlYXRlIGEgbmF2aWdhdGlvbiBtZXNoIGRlYnVnIG1lc2gKKyAgICAgKiBA
cGFyYW0gc2NlbmUgaXMgd2hlcmUgdGhlIG1lc2ggd2lsbCBiZSBhZGRlZAorICAgICAqIEByZXR1
cm5zIGRlYnVnIGRpc3BsYXkgbWVzaAorICAgICAqLworICAgIFJlY2FzdEpTUGx1Z2luLnByb3Rv
dHlwZS5jcmVhdGVEZWJ1Z05hdk1lc2ggPSBmdW5jdGlvbiAoc2NlbmUpIHsKKyAgICAgICAgdmFy
IHRyaTsKKyAgICAgICAgdmFyIHB0OworICAgICAgICB2YXIgZGVidWdOYXZNZXNoID0gdGhpcy5u
YXZNZXNoLmdldERlYnVnTmF2TWVzaCgpOworICAgICAgICB2YXIgdHJpYW5nbGVDb3VudCA9IGRl
YnVnTmF2TWVzaC5nZXRUcmlhbmdsZUNvdW50KCk7CisgICAgICAgIHZhciBpbmRpY2VzID0gW107
CisgICAgICAgIHZhciBwb3NpdGlvbnMgPSBbXTsKKyAgICAgICAgZm9yICh0cmkgPSAwOyB0cmkg
PCB0cmlhbmdsZUNvdW50ICogMzsgdHJpKyspIHsKKyAgICAgICAgICAgIGluZGljZXMucHVzaCh0
cmkpOworICAgICAgICB9CisgICAgICAgIGZvciAodHJpID0gMDsgdHJpIDwgdHJpYW5nbGVDb3Vu
dDsgdHJpKyspIHsKKyAgICAgICAgICAgIGZvciAocHQgPSAwOyBwdCA8IDM7IHB0KyspIHsKKyAg
ICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBkZWJ1Z05hdk1lc2guZ2V0VHJpYW5nbGUodHJpKS5n
ZXRQb2ludChwdCk7CisgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2gocG9pbnQueCwgcG9p
bnQueSwgcG9pbnQueik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIG1l
c2ggPSBuZXcgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIk1lc2gi
XSgiTmF2TWVzaERlYnVnIiwgc2NlbmUpOworICAgICAgICB2YXIgdmVydGV4RGF0YSA9IG5ldyBf
TWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0
ZXhEYXRhIl0oKTsKKyAgICAgICAgdmVydGV4RGF0YS5pbmRpY2VzID0gaW5kaWNlczsKKyAgICAg
ICAgdmVydGV4RGF0YS5wb3NpdGlvbnMgPSBwb3NpdGlvbnM7CisgICAgICAgIHZlcnRleERhdGEu
YXBwbHlUb01lc2gobWVzaCwgZmFsc2UpOworICAgICAgICByZXR1cm4gbWVzaDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIEdldCBhIG5hdmlnYXRpb24gbWVzaCBjb25zdHJhaW5lZCBwb3NpdGlv
biwgY2xvc2VzdCB0byB0aGUgcGFyYW1ldGVyIHBvc2l0aW9uCisgICAgICogQHBhcmFtIHBvc2l0
aW9uIHdvcmxkIHBvc2l0aW9uCisgICAgICogQHJldHVybnMgdGhlIGNsb3Nlc3QgcG9pbnQgdG8g
cG9zaXRpb24gY29uc3RyYWluZWQgYnkgdGhlIG5hdmlnYXRpb24gbWVzaAorICAgICAqLworICAg
IFJlY2FzdEpTUGx1Z2luLnByb3RvdHlwZS5nZXRDbG9zZXN0UG9pbnQgPSBmdW5jdGlvbiAocG9z
aXRpb24pIHsKKyAgICAgICAgdmFyIHAgPSBuZXcgdGhpcy5ianNSRUNBU1QuVmVjMyhwb3NpdGlv
bi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KTsKKyAgICAgICAgdmFyIHJldCA9IHRoaXMubmF2
TWVzaC5nZXRDbG9zZXN0UG9pbnQocCk7CisgICAgICAgIHZhciBwciA9IG5ldyBfTWF0aHNfbWF0
aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0ocmV0LngsIHJldC55LCBy
ZXQueik7CisgICAgICAgIHJldHVybiBwcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCBh
IG5hdmlnYXRpb24gbWVzaCBjb25zdHJhaW5lZCBwb3NpdGlvbiwgd2l0aGluIGEgcGFydGljdWxh
ciByYWRpdXMKKyAgICAgKiBAcGFyYW0gcG9zaXRpb24gd29ybGQgcG9zaXRpb24KKyAgICAgKiBA
cGFyYW0gbWF4UmFkaXVzIHRoZSBtYXhpbXVtIGRpc3RhbmNlIHRvIHRoZSBjb25zdHJhaW5lZCB3
b3JsZCBwb3NpdGlvbgorICAgICAqIEByZXR1cm5zIHRoZSBjbG9zZXN0IHBvaW50IHRvIHBvc2l0
aW9uIGNvbnN0cmFpbmVkIGJ5IHRoZSBuYXZpZ2F0aW9uIG1lc2gKKyAgICAgKi8KKyAgICBSZWNh
c3RKU1BsdWdpbi5wcm90b3R5cGUuZ2V0UmFuZG9tUG9pbnRBcm91bmQgPSBmdW5jdGlvbiAocG9z
aXRpb24sIG1heFJhZGl1cykgeworICAgICAgICB2YXIgcCA9IG5ldyB0aGlzLmJqc1JFQ0FTVC5W
ZWMzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopOworICAgICAgICB2YXIgcmV0
ID0gdGhpcy5uYXZNZXNoLmdldFJhbmRvbVBvaW50QXJvdW5kKHAsIG1heFJhZGl1cyk7CisgICAg
ICAgIHZhciBwciA9IG5ldyBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJWZWN0b3IzIl0ocmV0LngsIHJldC55LCByZXQueik7CisgICAgICAgIHJldHVybiBwcjsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIENvbXB1dGUgdGhlIGZpbmFsIHBvc2l0aW9uIGZyb20gYSBz
ZWdtZW50IG1hZGUgb2YgZGVzdGluYXRpb24tcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gcG9zaXRp
b24gd29ybGQgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gZGVzdGluYXRpb24gd29ybGQgcG9zaXRp
b24KKyAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHBvaW50IGFsb25nIHRoZSBuYXZtZXNo
CisgICAgICovCisgICAgUmVjYXN0SlNQbHVnaW4ucHJvdG90eXBlLm1vdmVBbG9uZyA9IGZ1bmN0
aW9uIChwb3NpdGlvbiwgZGVzdGluYXRpb24pIHsKKyAgICAgICAgdmFyIHAgPSBuZXcgdGhpcy5i
anNSRUNBU1QuVmVjMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KTsKKyAgICAg
ICAgdmFyIGQgPSBuZXcgdGhpcy5ianNSRUNBU1QuVmVjMyhkZXN0aW5hdGlvbi54LCBkZXN0aW5h
dGlvbi55LCBkZXN0aW5hdGlvbi56KTsKKyAgICAgICAgdmFyIHJldCA9IHRoaXMubmF2TWVzaC5t
b3ZlQWxvbmcocCwgZCk7CisgICAgICAgIHZhciBwciA9IG5ldyBfTWF0aHNfbWF0aF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0ocmV0LngsIHJldC55LCByZXQueik7Cisg
ICAgICAgIHJldHVybiBwcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvbXB1dGUgYSBuYXZp
Z2F0aW9uIHBhdGggZnJvbSBzdGFydCB0byBlbmQuIFJldHVybnMgYW4gZW1wdHkgYXJyYXkgaWYg
bm8gcGF0aCBjYW4gYmUgY29tcHV0ZWQKKyAgICAgKiBAcGFyYW0gc3RhcnQgd29ybGQgcG9zaXRp
b24KKyAgICAgKiBAcGFyYW0gZW5kIHdvcmxkIHBvc2l0aW9uCisgICAgICogQHJldHVybnMgYXJy
YXkgY29udGFpbmluZyB3b3JsZCBwb3NpdGlvbiBjb21wb3NpbmcgdGhlIHBhdGgKKyAgICAgKi8K
KyAgICBSZWNhc3RKU1BsdWdpbi5wcm90b3R5cGUuY29tcHV0ZVBhdGggPSBmdW5jdGlvbiAoc3Rh
cnQsIGVuZCkgeworICAgICAgICB2YXIgcHQ7CisgICAgICAgIHZhciBzdGFydFBvcyA9IG5ldyB0
aGlzLmJqc1JFQ0FTVC5WZWMzKHN0YXJ0LngsIHN0YXJ0LnksIHN0YXJ0LnopOworICAgICAgICB2
YXIgZW5kUG9zID0gbmV3IHRoaXMuYmpzUkVDQVNULlZlYzMoZW5kLngsIGVuZC55LCBlbmQueik7
CisgICAgICAgIHZhciBuYXZQYXRoID0gdGhpcy5uYXZNZXNoLmNvbXB1dGVQYXRoKHN0YXJ0UG9z
LCBlbmRQb3MpOworICAgICAgICB2YXIgcG9pbnRDb3VudCA9IG5hdlBhdGguZ2V0UG9pbnRDb3Vu
dCgpOworICAgICAgICB2YXIgcG9zaXRpb25zID0gW107CisgICAgICAgIGZvciAocHQgPSAwOyBw
dCA8IHBvaW50Q291bnQ7IHB0KyspIHsKKyAgICAgICAgICAgIHZhciBwID0gbmF2UGF0aC5nZXRQ
b2ludChwdCk7CisgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChuZXcgX01hdGhzX21hdGhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKHAueCwgcC55LCBwLnopKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcG9zaXRpb25zOworICAgIH07CisgICAgLyoqCisgICAg
ICogQ3JlYXRlIGEgbmV3IENyb3dkIHNvIHlvdSBjYW4gYWRkIGFnZW50cworICAgICAqIEBwYXJh
bSBtYXhBZ2VudHMgdGhlIG1heGltdW0gYWdlbnQgY291bnQgaW4gdGhlIGNyb3dkCisgICAgICog
QHBhcmFtIG1heEFnZW50UmFkaXVzIHRoZSBtYXhpbXVtIHJhZGl1cyBhbiBhZ2VudCBjYW4gaGF2
ZQorICAgICAqIEBwYXJhbSBzY2VuZSB0byBhdHRhY2ggdGhlIGNyb3dkIHRvCisgICAgICogQHJl
dHVybnMgdGhlIGNyb3dkIHlvdSBjYW4gYWRkIGFnZW50cyB0bworICAgICAqLworICAgIFJlY2Fz
dEpTUGx1Z2luLnByb3RvdHlwZS5jcmVhdGVDcm93ZCA9IGZ1bmN0aW9uIChtYXhBZ2VudHMsIG1h
eEFnZW50UmFkaXVzLCBzY2VuZSkgeworICAgICAgICB2YXIgY3Jvd2QgPSBuZXcgUmVjYXN0SlND
cm93ZCh0aGlzLCBtYXhBZ2VudHMsIG1heEFnZW50UmFkaXVzLCBzY2VuZSk7CisgICAgICAgIHJl
dHVybiBjcm93ZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNldCB0aGUgQm91bmRpbmcgYm94
IGV4dGVudCBmb3IgZG9pbmcgc3BhdGlhbCBxdWVyaWVzIChnZXRDbG9zZXN0UG9pbnQsIGdldFJh
bmRvbVBvaW50QXJvdW5kLCAuLi4pCisgICAgICogVGhlIHF1ZXJpZXMgd2lsbCB0cnkgdG8gZmlu
ZCBhIHNvbHV0aW9uIHdpdGhpbiB0aG9zZSBib3VuZHMKKyAgICAgKiBkZWZhdWx0IGlzICgxLDEs
MSkKKyAgICAgKiBAcGFyYW0gZXh0ZW50IHgseSx6IHZhbHVlIHRoYXQgZGVmaW5lIHRoZSBleHRl
bnQgYXJvdW5kIHRoZSBxdWVyaWVzIHBvaW50IG9mIHJlZmVyZW5jZQorICAgICAqLworICAgIFJl
Y2FzdEpTUGx1Z2luLnByb3RvdHlwZS5zZXREZWZhdWx0UXVlcnlFeHRlbnQgPSBmdW5jdGlvbiAo
ZXh0ZW50KSB7CisgICAgICAgIHZhciBleHQgPSBuZXcgdGhpcy5ianNSRUNBU1QuVmVjMyhleHRl
bnQueCwgZXh0ZW50LnksIGV4dGVudC56KTsKKyAgICAgICAgdGhpcy5uYXZNZXNoLnNldERlZmF1
bHRRdWVyeUV4dGVudChleHQpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBCb3Vu
ZGluZyBib3ggZXh0ZW50IHNwZWNpZmllZCBieSBzZXREZWZhdWx0UXVlcnlFeHRlbnQKKyAgICAg
KiBAcmV0dXJucyB0aGUgYm94IGV4dGVudCB2YWx1ZXMKKyAgICAgKi8KKyAgICBSZWNhc3RKU1Bs
dWdpbi5wcm90b3R5cGUuZ2V0RGVmYXVsdFF1ZXJ5RXh0ZW50ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgcCA9IHRoaXMubmF2TWVzaC5nZXREZWZhdWx0UXVlcnlFeHRlbnQoKTsKKyAgICAg
ICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZWN0b3IzIl0ocC54LCBwLnksIHAueik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3Nl
cworICAgICAqLworICAgIFJlY2FzdEpTUGx1Z2luLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rp
b24gKCkgeworICAgIH07CisgICAgLyoqCisgICAgICogSWYgdGhpcyBwbHVnaW4gaXMgc3VwcG9y
dGVkCisgICAgICogQHJldHVybnMgdHJ1ZSBpZiBwbHVnaW4gaXMgc3VwcG9ydGVkCisgICAgICov
CisgICAgUmVjYXN0SlNQbHVnaW4ucHJvdG90eXBlLmlzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5ianNSRUNBU1QgIT09IHVuZGVmaW5lZDsKKyAgICB9Owor
ICAgIHJldHVybiBSZWNhc3RKU1BsdWdpbjsKK30oKSk7CisKKy8qKgorICogUmVjYXN0IGRldG91
ciBjcm93ZCBpbXBsZW1lbnRhdGlvbgorICovCit2YXIgUmVjYXN0SlNDcm93ZCA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvcgorICAgICAq
IEBwYXJhbSBwbHVnaW4gcmVjYXN0SlMgcGx1Z2luCisgICAgICogQHBhcmFtIG1heEFnZW50cyB0
aGUgbWF4aW11bSBhZ2VudCBjb3VudCBpbiB0aGUgY3Jvd2QKKyAgICAgKiBAcGFyYW0gbWF4QWdl
bnRSYWRpdXMgdGhlIG1heGltdW0gcmFkaXVzIGFuIGFnZW50IGNhbiBoYXZlCisgICAgICogQHBh
cmFtIHNjZW5lIHRvIGF0dGFjaCB0aGUgY3Jvd2QgdG8KKyAgICAgKiBAcmV0dXJucyB0aGUgY3Jv
d2QgeW91IGNhbiBhZGQgYWdlbnRzIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gUmVjYXN0SlND
cm93ZChwbHVnaW4sIG1heEFnZW50cywgbWF4QWdlbnRSYWRpdXMsIHNjZW5lKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBMaW5rIHRvIHRoZSBk
ZXRvdXIgY3Jvd2QKKyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVjYXN0Q3Jvd2QgPSB7fTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIE9uZSB0cmFuc2Zvcm0gcGVyIGFnZW50CisgICAgICAg
ICAqLworICAgICAgICB0aGlzLnRyYW5zZm9ybXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEFsbCBhZ2VudHMgY3JlYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5hZ2VudHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmVy
IGZvciBjcm93ZCB1cGRhdGVzCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9vbkJlZm9yZUFu
aW1hdGlvbnNPYnNlcnZlciA9IG51bGw7CisgICAgICAgIHRoaXMuYmpzUkVDQVNUUGx1Z2luID0g
cGx1Z2luOworICAgICAgICB0aGlzLnJlY2FzdENyb3dkID0gbmV3IHRoaXMuYmpzUkVDQVNUUGx1
Z2luLmJqc1JFQ0FTVC5Dcm93ZChtYXhBZ2VudHMsIG1heEFnZW50UmFkaXVzLCB0aGlzLmJqc1JF
Q0FTVFBsdWdpbi5uYXZNZXNoLmdldE5hdk1lc2goKSk7CisgICAgICAgIHRoaXMuX3NjZW5lID0g
c2NlbmU7CisgICAgICAgIHRoaXMuX29uQmVmb3JlQW5pbWF0aW9uc09ic2VydmVyID0gc2NlbmUu
b25CZWZvcmVBbmltYXRpb25zT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgX3RoaXMudXBkYXRlKHNjZW5lLmdldEVuZ2luZSgpLmdldERlbHRhVGltZSgpICogMC4wMDEp
OworICAgICAgICB9KTsKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIGEgbmV3IGFnZW50IHRv
IHRoZSBjcm93ZCB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVyIGEgY29ycmVzcG9uZGluZyB0
cmFuc2Zvcm1Ob2RlLgorICAgICAqIFlvdSBjYW4gYXR0YWNoIGFueXRoaW5nIHRvIHRoYXQgbm9k
ZS4gVGhlIG5vZGUgcG9zaXRpb24gaXMgdXBkYXRlZCBpbiB0aGUgc2NlbmUgdXBkYXRlIHRpY2su
CisgICAgICogQHBhcmFtIHBvcyB3b3JsZCBwb3NpdGlvbiB0aGF0IHdpbGwgYmUgY29uc3RyYWlu
ZWQgYnkgdGhlIG5hdmlnYXRpb24gbWVzaAorICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIGFnZW50
IHBhcmFtZXRlcnMKKyAgICAgKiBAcGFyYW0gdHJhbnNmb3JtIGhvb2tlZCB0byB0aGUgYWdlbnQg
dGhhdCB3aWxsIGJlIHVwZGF0ZSBieSB0aGUgc2NlbmUKKyAgICAgKiBAcmV0dXJucyBhZ2VudCBp
bmRleAorICAgICAqLworICAgIFJlY2FzdEpTQ3Jvd2QucHJvdG90eXBlLmFkZEFnZW50ID0gZnVu
Y3Rpb24gKHBvcywgcGFyYW1ldGVycywgdHJhbnNmb3JtKSB7CisgICAgICAgIHZhciBhZ2VudFBh
cmFtcyA9IG5ldyB0aGlzLmJqc1JFQ0FTVFBsdWdpbi5ianNSRUNBU1QuZHRDcm93ZEFnZW50UGFy
YW1zKCk7CisgICAgICAgIGFnZW50UGFyYW1zLnJhZGl1cyA9IHBhcmFtZXRlcnMucmFkaXVzOwor
ICAgICAgICBhZ2VudFBhcmFtcy5oZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodDsKKyAgICAgICAg
YWdlbnRQYXJhbXMubWF4QWNjZWxlcmF0aW9uID0gcGFyYW1ldGVycy5tYXhBY2NlbGVyYXRpb247
CisgICAgICAgIGFnZW50UGFyYW1zLm1heFNwZWVkID0gcGFyYW1ldGVycy5tYXhTcGVlZDsKKyAg
ICAgICAgYWdlbnRQYXJhbXMuY29sbGlzaW9uUXVlcnlSYW5nZSA9IHBhcmFtZXRlcnMuY29sbGlz
aW9uUXVlcnlSYW5nZTsKKyAgICAgICAgYWdlbnRQYXJhbXMucGF0aE9wdGltaXphdGlvblJhbmdl
ID0gcGFyYW1ldGVycy5wYXRoT3B0aW1pemF0aW9uUmFuZ2U7CisgICAgICAgIGFnZW50UGFyYW1z
LnNlcGFyYXRpb25XZWlnaHQgPSBwYXJhbWV0ZXJzLnNlcGFyYXRpb25XZWlnaHQ7CisgICAgICAg
IGFnZW50UGFyYW1zLnVwZGF0ZUZsYWdzID0gNzsKKyAgICAgICAgYWdlbnRQYXJhbXMub2JzdGFj
bGVBdm9pZGFuY2VUeXBlID0gMDsKKyAgICAgICAgYWdlbnRQYXJhbXMucXVlcnlGaWx0ZXJUeXBl
ID0gMDsKKyAgICAgICAgYWdlbnRQYXJhbXMudXNlckRhdGEgPSAwOworICAgICAgICB2YXIgYWdl
bnRJbmRleCA9IHRoaXMucmVjYXN0Q3Jvd2QuYWRkQWdlbnQobmV3IHRoaXMuYmpzUkVDQVNUUGx1
Z2luLmJqc1JFQ0FTVC5WZWMzKHBvcy54LCBwb3MueSwgcG9zLnopLCBhZ2VudFBhcmFtcyk7Cisg
ICAgICAgIHRoaXMudHJhbnNmb3Jtcy5wdXNoKHRyYW5zZm9ybSk7CisgICAgICAgIHRoaXMuYWdl
bnRzLnB1c2goYWdlbnRJbmRleCk7CisgICAgICAgIHJldHVybiBhZ2VudEluZGV4OworICAgIH07
CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYWdlbnQgcG9zaXRpb24gaW4gd29ybGQgc3Bh
Y2UKKyAgICAgKiBAcGFyYW0gaW5kZXggYWdlbnQgaW5kZXggcmV0dXJuZWQgYnkgYWRkQWdlbnQK
KyAgICAgKiBAcmV0dXJucyB3b3JsZCBzcGFjZSBwb3NpdGlvbgorICAgICAqLworICAgIFJlY2Fz
dEpTQ3Jvd2QucHJvdG90eXBlLmdldEFnZW50UG9zaXRpb24gPSBmdW5jdGlvbiAoaW5kZXgpIHsK
KyAgICAgICAgdmFyIGFnZW50UG9zID0gdGhpcy5yZWNhc3RDcm93ZC5nZXRBZ2VudFBvc2l0aW9u
KGluZGV4KTsKKyAgICAgICAgcmV0dXJuIG5ldyBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0oYWdlbnRQb3MueCwgYWdlbnRQb3MueSwgYWdlbnRQb3Mu
eik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhZ2VudCB2ZWxvY2l0eSBp
biB3b3JsZCBzcGFjZQorICAgICAqIEBwYXJhbSBpbmRleCBhZ2VudCBpbmRleCByZXR1cm5lZCBi
eSBhZGRBZ2VudAorICAgICAqIEByZXR1cm5zIHdvcmxkIHNwYWNlIHZlbG9jaXR5CisgICAgICov
CisgICAgUmVjYXN0SlNDcm93ZC5wcm90b3R5cGUuZ2V0QWdlbnRWZWxvY2l0eSA9IGZ1bmN0aW9u
IChpbmRleCkgeworICAgICAgICB2YXIgYWdlbnRWZWwgPSB0aGlzLnJlY2FzdENyb3dkLmdldEFn
ZW50VmVsb2NpdHkoaW5kZXgpOworICAgICAgICByZXR1cm4gbmV3IF9NYXRoc19tYXRoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXShhZ2VudFZlbC54LCBhZ2VudFZlbC55
LCBhZ2VudFZlbC56KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFza3MgYSBwYXJ0aWN1bGFy
IGFnZW50IHRvIGdvIHRvIGEgZGVzdGluYXRpb24uIFRoYXQgZGVzdGluYXRpb24gaXMgY29uc3Ry
YWluZWQgYnkgdGhlIG5hdmlnYXRpb24gbWVzaAorICAgICAqIEBwYXJhbSBpbmRleCBhZ2VudCBp
bmRleCByZXR1cm5lZCBieSBhZGRBZ2VudAorICAgICAqIEBwYXJhbSBkZXN0aW5hdGlvbiB0YXJn
ZXRlZCB3b3JsZCBwb3NpdGlvbgorICAgICAqLworICAgIFJlY2FzdEpTQ3Jvd2QucHJvdG90eXBl
LmFnZW50R290byA9IGZ1bmN0aW9uIChpbmRleCwgZGVzdGluYXRpb24pIHsKKyAgICAgICAgdGhp
cy5yZWNhc3RDcm93ZC5hZ2VudEdvdG8oaW5kZXgsIG5ldyB0aGlzLmJqc1JFQ0FTVFBsdWdpbi5i
anNSRUNBU1QuVmVjMyhkZXN0aW5hdGlvbi54LCBkZXN0aW5hdGlvbi55LCBkZXN0aW5hdGlvbi56
KSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiByZW1vdmUgYSBwYXJ0aWN1bGFyIGFnZW50IHBy
ZXZpb3VzbHkgY3JlYXRlZAorICAgICAqIEBwYXJhbSBpbmRleCBhZ2VudCBpbmRleCByZXR1cm5l
ZCBieSBhZGRBZ2VudAorICAgICAqLworICAgIFJlY2FzdEpTQ3Jvd2QucHJvdG90eXBlLnJlbW92
ZUFnZW50ID0gZnVuY3Rpb24gKGluZGV4KSB7CisgICAgICAgIHRoaXMucmVjYXN0Q3Jvd2QucmVt
b3ZlQWdlbnQoaW5kZXgpOworICAgICAgICB2YXIgaXRlbSA9IHRoaXMuYWdlbnRzLmluZGV4T2Yo
aW5kZXgpOworICAgICAgICBpZiAoaXRlbSA+IC0xKSB7CisgICAgICAgICAgICB0aGlzLmFnZW50
cy5zcGxpY2UoaXRlbSwgMSk7CisgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybXMuc3BsaWNlKGl0
ZW0sIDEpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBnZXQgdGhlIGxpc3Qg
b2YgYWxsIGFnZW50cyBhdHRhY2hlZCB0byB0aGlzIGNyb3dkCisgICAgICogQHJldHVybnMgbGlz
dCBvZiBhZ2VudCBpbmRpY2VzCisgICAgICovCisgICAgUmVjYXN0SlNDcm93ZC5wcm90b3R5cGUu
Z2V0QWdlbnRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5hZ2VudHM7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBUaWNrIHVwZGF0ZSBkb25lIGJ5IHRoZSBTY2VuZS4gQWdl
bnQgcG9zaXRpb24vdmVsb2NpdHkvYWNjZWxlcmF0aW9uIGlzIHVwZGF0ZWQgYnkgdGhpcyBmdW5j
dGlvbgorICAgICAqIEBwYXJhbSBkZWx0YVRpbWUgaW4gc2Vjb25kcworICAgICAqLworICAgIFJl
Y2FzdEpTQ3Jvd2QucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHsKKyAg
ICAgICAgLy8gdXBkYXRlIGNyb3dkCisgICAgICAgIHRoaXMucmVjYXN0Q3Jvd2QudXBkYXRlKGRl
bHRhVGltZSk7CisgICAgICAgIC8vIHVwZGF0ZSB0cmFuc2Zvcm1zCisgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmFnZW50cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAg
ICAgICAgIHRoaXMudHJhbnNmb3Jtc1tpbmRleF0ucG9zaXRpb24gPSB0aGlzLmdldEFnZW50UG9z
aXRpb24odGhpcy5hZ2VudHNbaW5kZXhdKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0IHRoZSBCb3VuZGluZyBib3ggZXh0ZW50IGZvciBkb2luZyBzcGF0aWFsIHF1ZXJp
ZXMgKGdldENsb3Nlc3RQb2ludCwgZ2V0UmFuZG9tUG9pbnRBcm91bmQsIC4uLikKKyAgICAgKiBU
aGUgcXVlcmllcyB3aWxsIHRyeSB0byBmaW5kIGEgc29sdXRpb24gd2l0aGluIHRob3NlIGJvdW5k
cworICAgICAqIGRlZmF1bHQgaXMgKDEsMSwxKQorICAgICAqIEBwYXJhbSBleHRlbnQgeCx5LHog
dmFsdWUgdGhhdCBkZWZpbmUgdGhlIGV4dGVudCBhcm91bmQgdGhlIHF1ZXJpZXMgcG9pbnQgb2Yg
cmVmZXJlbmNlCisgICAgICovCisgICAgUmVjYXN0SlNDcm93ZC5wcm90b3R5cGUuc2V0RGVmYXVs
dFF1ZXJ5RXh0ZW50ID0gZnVuY3Rpb24gKGV4dGVudCkgeworICAgICAgICB2YXIgZXh0ID0gbmV3
IHRoaXMuYmpzUkVDQVNUUGx1Z2luLmJqc1JFQ0FTVC5WZWMzKGV4dGVudC54LCBleHRlbnQueSwg
ZXh0ZW50LnopOworICAgICAgICB0aGlzLnJlY2FzdENyb3dkLnNldERlZmF1bHRRdWVyeUV4dGVu
dChleHQpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IHRoZSBCb3VuZGluZyBib3ggZXh0
ZW50IHNwZWNpZmllZCBieSBzZXREZWZhdWx0UXVlcnlFeHRlbnQKKyAgICAgKiBAcmV0dXJucyB0
aGUgYm94IGV4dGVudCB2YWx1ZXMKKyAgICAgKi8KKyAgICBSZWNhc3RKU0Nyb3dkLnByb3RvdHlw
ZS5nZXREZWZhdWx0UXVlcnlFeHRlbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBwID0g
dGhpcy5yZWNhc3RDcm93ZC5nZXREZWZhdWx0UXVlcnlFeHRlbnQoKTsKKyAgICAgICAgcmV0dXJu
IG5ldyBfTWF0aHNfbWF0aF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0o
cC54LCBwLnksIHAueik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlIGFsbCByZXNv
dXJjZXMKKyAgICAgKi8KKyAgICBSZWNhc3RKU0Nyb3dkLnByb3RvdHlwZS5kaXNwb3NlID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB0aGlzLnJlY2FzdENyb3dkLmRlc3Ryb3koKTsKKyAgICAgICAg
dGhpcy5fc2NlbmUub25CZWZvcmVBbmltYXRpb25zT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25C
ZWZvcmVBbmltYXRpb25zT2JzZXJ2ZXIpOworICAgICAgICB0aGlzLl9vbkJlZm9yZUFuaW1hdGlv
bnNPYnNlcnZlciA9IG51bGw7CisgICAgfTsKKyAgICByZXR1cm4gUmVjYXN0SlNDcm93ZDsKK30o
KSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vTmF2aWdhdGlvbi9pbmRleC50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vTmF2aWdhdGlvbi9p
bmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBSZWNhc3RKU1BsdWdpbiwgUmVjYXN0SlNDcm93ZCAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BsdWdpbnNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vUGx1Z2lucy9p
bmRleCAqLyAiLi9OYXZpZ2F0aW9uL1BsdWdpbnMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUmVjYXN0SlNQbHVnaW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QbHVnaW5zX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJlY2FzdEpTUGx1Z2luIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlJlY2FzdEpTQ3Jvd2QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QbHVnaW5z
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlJlY2FzdEpTQ3Jvd2QiXTsgfSk7
CisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9PZmZsaW5lL2RhdGFiYXNlLnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9PZmZsaW5lL2RhdGFi
YXNlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IERhdGFiYXNlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkRhdGFiYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBEYXRhYmFzZTsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29s
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dn
ZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlz
Y190Z2FfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01pc2MvdGdhICovICIuL01pc2MvdGdhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2lu
ZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3dlYlJlcXVlc3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mv
d2ViUmVxdWVzdCAqLyAiLi9NaXNjL3dlYlJlcXVlc3QudHMiKTsKKworCisKKworCisvLyBTZXRz
IHRoZSBkZWZhdWx0IG9mZmxpbmUgcHJvdmlkZXIgdG8gQmFieWxvbi5qcworX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLk9mZmxpbmVQcm92aWRl
ckZhY3RvcnkgPSBmdW5jdGlvbiAodXJsVG9TY2VuZSwgY2FsbGJhY2tNYW5pZmVzdENoZWNrZWQs
IGRpc2FibGVNYW5pZmVzdENoZWNrKSB7CisgICAgaWYgKGRpc2FibGVNYW5pZmVzdENoZWNrID09
PSB2b2lkIDApIHsgZGlzYWJsZU1hbmlmZXN0Q2hlY2sgPSBmYWxzZTsgfQorICAgIHJldHVybiBu
ZXcgRGF0YWJhc2UodXJsVG9TY2VuZSwgY2FsbGJhY2tNYW5pZmVzdENoZWNrZWQsIGRpc2FibGVN
YW5pZmVzdENoZWNrKTsKK307CisvKioKKyAqIENsYXNzIHVzZWQgdG8gZW5hYmxlIGFjY2VzcyB0
byBJbmRleGVkREIKKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9jYWNo
aW5nX3Jlc291cmNlc19pbl9pbmRleGVkZGIKKyAqLwordmFyIERhdGFiYXNlID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgRGF0YWJh
c2UKKyAgICAgKiBAcGFyYW0gdXJsVG9TY2VuZSBkZWZpbmVzIHRoZSB1cmwgdG8gbG9hZCB0aGUg
c2NlbmUKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tNYW5pZmVzdENoZWNrZWQgZGVmaW5lcyB0aGUg
Y2FsbGJhY2sgdG8gdXNlIHdoZW4gbWFuaWZlc3QgaXMgY2hlY2tlZAorICAgICAqIEBwYXJhbSBk
aXNhYmxlTWFuaWZlc3RDaGVjayBkZWZpbmVzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgd2Ug
d2FudCB0byBza2lwIHRoZSBtYW5pZmVzdCB2YWxpZGF0aW9uIChpdCB3aWxsIGJlIGNvbnNpZGVy
ZWQgdmFsaWRhdGVkIGFuZCB1cCB0byBkYXRlKQorICAgICAqLworICAgIGZ1bmN0aW9uIERhdGFi
YXNlKHVybFRvU2NlbmUsIGNhbGxiYWNrTWFuaWZlc3RDaGVja2VkLCBkaXNhYmxlTWFuaWZlc3RD
aGVjaykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoZGlzYWJsZU1h
bmlmZXN0Q2hlY2sgPT09IHZvaWQgMCkgeyBkaXNhYmxlTWFuaWZlc3RDaGVjayA9IGZhbHNlOyB9
CisgICAgICAgIC8vIEhhbmRsaW5nIHZhcmlvdXMgZmxhdm9ycyBvZiBwcmVmaXhlZCB2ZXJzaW9u
IG9mIEluZGV4ZWREQgorICAgICAgICB0aGlzLl9pZGJGYWN0b3J5ID0gKHdpbmRvdy5pbmRleGVk
REIgfHwgd2luZG93Lm1vekluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdp
bmRvdy5tc0luZGV4ZWREQik7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrTWFuaWZlc3RDaGVja2Vk
ID0gY2FsbGJhY2tNYW5pZmVzdENoZWNrZWQ7CisgICAgICAgIHRoaXMuX2N1cnJlbnRTY2VuZVVy
bCA9IERhdGFiYXNlLl9SZXR1cm5GdWxsVXJsTG9jYXRpb24odXJsVG9TY2VuZSk7CisgICAgICAg
IHRoaXMuX2RiID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZW5hYmxlU2NlbmVPZmZsaW5lID0gZmFs
c2U7CisgICAgICAgIHRoaXMuX2VuYWJsZVRleHR1cmVzT2ZmbGluZSA9IGZhbHNlOworICAgICAg
ICB0aGlzLl9tYW5pZmVzdFZlcnNpb25Gb3VuZCA9IDA7CisgICAgICAgIHRoaXMuX211c3RVcGRh
dGVSZXNzb3VyY2VzID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2hhc1JlYWNoZWRRdW90YSA9IGZh
bHNlOworICAgICAgICBpZiAoIURhdGFiYXNlLklEQlN0b3JhZ2VFbmFibGVkKSB7CisgICAgICAg
ICAgICB0aGlzLl9jYWxsYmFja01hbmlmZXN0Q2hlY2tlZCh0cnVlKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChkaXNhYmxlTWFuaWZlc3RDaGVjaykgeworICAg
ICAgICAgICAgICAgIHRoaXMuX2VuYWJsZVNjZW5lT2ZmbGluZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgdGhpcy5fZW5hYmxlVGV4dHVyZXNPZmZsaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9tYW5pZmVzdFZlcnNpb25Gb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgX01pc2Nf
dG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG9vbHMiXS5TZXRJbW1lZGlhdGUo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY2FsbGJhY2tNYW5pZmVz
dENoZWNrZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jaGVja01hbmlmZXN0RmlsZSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShEYXRhYmFzZS5wcm90b3R5cGUsICJlbmFibGVTY2VuZU9mZmxpbmUiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHNjZW5lIG11c3Qg
YmUgc2F2ZWQgaW4gdGhlIGRhdGFiYXNlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVTY2VuZU9mZmxpbmU7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhYmFzZS5wcm90
b3R5cGUsICJlbmFibGVUZXh0dXJlc09mZmxpbmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRleHR1cmVzIG11c3QgYmUgc2F2ZWQgaW4g
dGhlIGRhdGFiYXNlCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVUZXh0dXJlc09mZmxpbmU7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIERhdGFiYXNlLnByb3RvdHlwZS5fY2hlY2tNYW5pZmVzdEZpbGUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBub01hbmlm
ZXN0RmlsZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF90aGlzLl9lbmFibGVTY2VuZU9m
ZmxpbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIF90aGlzLl9lbmFibGVUZXh0dXJlc09mZmxpbmUg
PSBmYWxzZTsKKyAgICAgICAgICAgIF90aGlzLl9jYWxsYmFja01hbmlmZXN0Q2hlY2tlZChmYWxz
ZSk7CisgICAgICAgIH07CisgICAgICAgIHZhciB0aW1lU3RhbXBVc2VkID0gZmFsc2U7CisgICAg
ICAgIHZhciBtYW5pZmVzdFVSTCA9IHRoaXMuX2N1cnJlbnRTY2VuZVVybCArICIubWFuaWZlc3Qi
OworICAgICAgICB2YXIgeGhyID0gbmV3IF9NaXNjX3dlYlJlcXVlc3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siV2ViUmVxdWVzdCJdKCk7CisgICAgICAgIGlmIChuYXZpZ2F0b3Iub25M
aW5lKSB7CisgICAgICAgICAgICAvLyBBZGRpbmcgYSB0aW1lc3RhbXAgdG8gYnktcGFzcyBicm93
c2VycycgY2FjaGUKKyAgICAgICAgICAgIHRpbWVTdGFtcFVzZWQgPSB0cnVlOworICAgICAgICAg
ICAgbWFuaWZlc3RVUkwgPSBtYW5pZmVzdFVSTCArIChtYW5pZmVzdFVSTC5tYXRjaCgvXD8vKSA9
PSBudWxsID8gIj8iIDogIiYiKSArIERhdGUubm93KCk7CisgICAgICAgIH0KKyAgICAgICAgeGhy
Lm9wZW4oIkdFVCIsIG1hbmlmZXN0VVJMKTsKKyAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIo
ImxvYWQiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAw
IHx8IERhdGFiYXNlLl9WYWxpZGF0ZVhIUkRhdGEoeGhyLCAxKSkgeworICAgICAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtYW5pZmVzdEZpbGUgPSBKU09OLnBhcnNl
KHhoci5yZXNwb25zZSk7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9lbmFibGVTY2VuZU9m
ZmxpbmUgPSBtYW5pZmVzdEZpbGUuZW5hYmxlU2NlbmVPZmZsaW5lOworICAgICAgICAgICAgICAg
ICAgICBfdGhpcy5fZW5hYmxlVGV4dHVyZXNPZmZsaW5lID0gbWFuaWZlc3RGaWxlLmVuYWJsZVRl
eHR1cmVzT2ZmbGluZSAmJiBEYXRhYmFzZS5Jc1VBU3VwcG9ydGluZ0Jsb2JTdG9yYWdlOworICAg
ICAgICAgICAgICAgICAgICBpZiAobWFuaWZlc3RGaWxlLnZlcnNpb24gJiYgIWlzTmFOKHBhcnNl
SW50KG1hbmlmZXN0RmlsZS52ZXJzaW9uKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90
aGlzLl9tYW5pZmVzdFZlcnNpb25Gb3VuZCA9IG1hbmlmZXN0RmlsZS52ZXJzaW9uOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fY2FsbGJhY2tN
YW5pZmVzdENoZWNrZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9jYWxsYmFj
a01hbmlmZXN0Q2hlY2tlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbm9NYW5pZmVzdEZpbGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBub01hbmlmZXN0RmlsZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9LCBmYWxzZSk7CisgICAgICAgIHhoci5hZGRFdmVudExpc3Rl
bmVyKCJlcnJvciIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0aW1lU3RhbXBVc2Vk
KSB7CisgICAgICAgICAgICAgICAgdGltZVN0YW1wVXNlZCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIC8vIExldCdzIHJldHJ5IHdpdGhvdXQgdGhlIHRpbWVTdGFtcAorICAgICAgICAgICAgICAg
IC8vIEl0IGNvdWxkIGZhaWwgd2hlbiBjb3VwbGVkIHdpdGggSFRNTDUgT2ZmbGluZSBBUEkKKyAg
ICAgICAgICAgICAgICB2YXIgcmV0cnlNYW5pZmVzdFVSTCA9IF90aGlzLl9jdXJyZW50U2NlbmVV
cmwgKyAiLm1hbmlmZXN0IjsKKyAgICAgICAgICAgICAgICB4aHIub3BlbigiR0VUIiwgcmV0cnlN
YW5pZmVzdFVSTCk7CisgICAgICAgICAgICAgICAgeGhyLnNlbmQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG5vTWFuaWZlc3RGaWxlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0sIGZhbHNlKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgIHhoci5zZW5kKCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKGV4KSB7CisgICAgICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0u
RXJyb3IoIkVycm9yIG9uIFhIUiBzZW5kIHJlcXVlc3QuIik7CisgICAgICAgICAgICB0aGlzLl9j
YWxsYmFja01hbmlmZXN0Q2hlY2tlZChmYWxzZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIE9wZW4gdGhlIGRhdGFiYXNlIGFuZCBtYWtlIGl0IGF2YWlsYWJsZQorICAgICAq
IEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gY2FsbCBvbiBz
dWNjZXNzCisgICAgICogQHBhcmFtIGVycm9yQ2FsbGJhY2sgZGVmaW5lcyB0aGUgY2FsbGJhY2sg
dG8gY2FsbCBvbiBlcnJvcgorICAgICAqLworICAgIERhdGFiYXNlLnByb3RvdHlwZS5vcGVuID0g
ZnVuY3Rpb24gKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgaGFuZGxlRXJyb3IgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBfdGhpcy5faXNTdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChl
cnJvckNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjaygpOworICAgICAg
ICAgICAgfQorICAgICAgICB9OworICAgICAgICBpZiAoIXRoaXMuX2lkYkZhY3RvcnkgfHwgISh0
aGlzLl9lbmFibGVTY2VuZU9mZmxpbmUgfHwgdGhpcy5fZW5hYmxlVGV4dHVyZXNPZmZsaW5lKSkg
eworICAgICAgICAgICAgLy8gWW91ciBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBJbmRleGVkREIK
KyAgICAgICAgICAgIHRoaXMuX2lzU3VwcG9ydGVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAo
ZXJyb3JDYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHRo
ZSBEQiBoYXNuJ3QgYmVlbiBvcGVuZWQgb3IgY3JlYXRlZCB5ZXQKKyAgICAgICAgICAgIGlmICgh
dGhpcy5fZGIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9oYXNSZWFjaGVkUXVvdGEgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9pc1N1cHBvcnRlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgdmFyIHJlcXVlc3QgPSB0aGlzLl9pZGJGYWN0b3J5Lm9wZW4oImJhYnlsb25qcyIsIDEp
OworICAgICAgICAgICAgICAgIC8vIENvdWxkIG9jY3VyIGlmIHVzZXIgaXMgYmxvY2tpbmcgdGhl
IHF1b3RhIGZvciB0aGUgREIgYW5kL29yIGRvZXNuJ3QgZ3JhbnQgYWNjZXNzIHRvIEluZGV4ZWRE
QgorICAgICAgICAgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIC8vIGV4ZWN1dGVzIHdoZW4gYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiBj
YW5ub3QgY29tcGxldGUgZHVlIHRvIG90aGVyIGFjdGl2ZSB0cmFuc2FjdGlvbnMKKyAgICAgICAg
ICAgICAgICByZXF1ZXN0Lm9uYmxvY2tlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJd
LkVycm9yKCJJREIgcmVxdWVzdCBibG9ja2VkLiBQbGVhc2UgcmVsb2FkIHRoZSBwYWdlLiIpOwor
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcigpOworICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgLy8gREIgaGFzIGJlZW4gb3BlbmVkIHN1Y2Nlc3NmdWxseQorICAgICAg
ICAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5fZGIgPSByZXF1ZXN0LnJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAg
c3VjY2Vzc0NhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAv
LyBJbml0aWFsaXphdGlvbiBvZiB0aGUgREIuIENyZWF0aW5nIFNjZW5lcyAmIFRleHR1cmVzIHN0
b3JlcworICAgICAgICAgICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24g
KGV2ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9kYiA9IChldmVudC50YXJnZXQp
LnJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9kYikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5f
ZGIuY3JlYXRlT2JqZWN0U3RvcmUoInNjZW5lcyIsIHsga2V5UGF0aDogInNjZW5lVXJsIiB9KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZGIuY3JlYXRlT2JqZWN0U3RvcmUo
InZlcnNpb25zIiwgeyBrZXlQYXRoOiAic2NlbmVVcmwiIH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl9kYi5jcmVhdGVPYmplY3RTdG9yZSgidGV4dHVyZXMiLCB7IGtleVBh
dGg6ICJ0ZXh0dXJlVXJsIiB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhdGNoIChleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJv
cigiRXJyb3Igd2hpbGUgY3JlYXRpbmcgb2JqZWN0IHN0b3Jlcy4gRXhjZXB0aW9uOiAiICsgZXgu
bWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBEQiBoYXMgYWxyZWFkeSBi
ZWVuIGNyZWF0ZWQgYW5kIG9wZW5lZAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzQ2Fs
bGJhY2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworICAgIC8qKgorICAgICAqIExvYWRzIGFuIGltYWdlIGZyb20gdGhlIGRhdGFiYXNlCisg
ICAgICogQHBhcmFtIHVybCBkZWZpbmVzIHRoZSB1cmwgdG8gbG9hZCBmcm9tCisgICAgICogQHBh
cmFtIGltYWdlIGRlZmluZXMgdGhlIHRhcmdldCBET00gaW1hZ2UKKyAgICAgKi8KKyAgICBEYXRh
YmFzZS5wcm90b3R5cGUubG9hZEltYWdlID0gZnVuY3Rpb24gKHVybCwgaW1hZ2UpIHsKKyAgICAg
ICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIGNvbXBsZXRlVVJMID0gRGF0YWJhc2Uu
X1JldHVybkZ1bGxVcmxMb2NhdGlvbih1cmwpOworICAgICAgICB2YXIgc2F2ZUFuZExvYWRJbWFn
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghX3RoaXMuX2hhc1JlYWNoZWRRdW90
YSAmJiBfdGhpcy5fZGIgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyB0aGUgdGV4dHVy
ZSBpcyBub3QgeWV0IGluIHRoZSBEQiwgbGV0J3MgdHJ5IHRvIHNhdmUgaXQKKyAgICAgICAgICAg
ICAgICBfdGhpcy5fc2F2ZUltYWdlSW50b0RCQXN5bmMoY29tcGxldGVVUkwsIGltYWdlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIG5vdCBpbiB0aGUg
REIgYW5kIHdlJ3ZlIHJlYWNoZWQgdGhlIERCIHF1b3RhIGxpbWl0CisgICAgICAgICAgICAvLyBs
ZXQncyBsb2FkIGl0IGRpcmVjdGx5IGZyb20gdGhlIHdlYgorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaW1hZ2Uuc3JjID0gdXJsOworICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgICAgICBpZiAoIXRoaXMuX211c3RVcGRhdGVSZXNzb3VyY2VzKSB7CisgICAgICAgICAg
ICB0aGlzLl9sb2FkSW1hZ2VGcm9tREJBc3luYyhjb21wbGV0ZVVSTCwgaW1hZ2UsIHNhdmVBbmRM
b2FkSW1hZ2UpOworICAgICAgICB9CisgICAgICAgIC8vIEZpcnN0IHRpbWUgd2UncmUgZG93bmxv
YWQgdGhlIGltYWdlcyBvciB1cGRhdGUgcmVxdWVzdGVkIGluIHRoZSBtYW5pZmVzdCBmaWxlIGJ5
IGEgdmVyc2lvbiBjaGFuZ2UKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzYXZlQW5kTG9h
ZEltYWdlKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIERhdGFiYXNlLnByb3RvdHlwZS5fbG9h
ZEltYWdlRnJvbURCQXN5bmMgPSBmdW5jdGlvbiAodXJsLCBpbWFnZSwgbm90SW5EQkNhbGxiYWNr
KSB7CisgICAgICAgIGlmICh0aGlzLl9pc1N1cHBvcnRlZCAmJiB0aGlzLl9kYiAhPT0gbnVsbCkg
eworICAgICAgICAgICAgdmFyIHRleHR1cmU7CisgICAgICAgICAgICB2YXIgdHJhbnNhY3Rpb24g
PSB0aGlzLl9kYi50cmFuc2FjdGlvbihbInRleHR1cmVzIl0pOworICAgICAgICAgICAgdHJhbnNh
Y3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpbWFnZS5zcmMg
PSB1cmw7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgYmxvYlRleHR1cmVVUkw7Cisg
ICAgICAgICAgICAgICAgaWYgKHRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIFVS
TCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDsKKyAgICAgICAgICAgICAgICAgICAg
YmxvYlRleHR1cmVVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHRleHR1cmUuZGF0YSk7CisgICAg
ICAgICAgICAgICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TG9nZ2VyIl0uRXJyb3IoIkVycm9yIGxvYWRpbmcgaW1hZ2UgZnJvbSBibG9iIFVSTDogIiArIGJs
b2JUZXh0dXJlVVJMICsgIiBzd2l0Y2hpbmcgYmFjayB0byB3ZWIgdXJsOiAiICsgdXJsKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGltYWdlLnNyYyA9IHVybDsKKyAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2Uuc3JjID0gYmxvYlRleHR1cmVVUkw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBub3RJbkRCQ2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgdmFyIGdldFJlcXVlc3QgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgi
dGV4dHVyZXMiKS5nZXQodXJsKTsKKyAgICAgICAgICAgIGdldFJlcXVlc3Qub25zdWNjZXNzID0g
ZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IChldmVudC50YXJn
ZXQpLnJlc3VsdDsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBnZXRSZXF1ZXN0Lm9uZXJy
b3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVycm9yKCJFcnJvciBsb2FkaW5nIHRleHR1
cmUgIiArIHVybCArICIgZnJvbSBEQi4iKTsKKyAgICAgICAgICAgICAgICBpbWFnZS5zcmMgPSB1
cmw7CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVy
cm9yKCJFcnJvcjogSW5kZXhlZERCIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyIG9yIEJh
Ynlsb25KUyBEYXRhYmFzZSBpcyBub3Qgb3Blbi4iKTsKKyAgICAgICAgICAgIGltYWdlLnNyYyA9
IHVybDsKKyAgICAgICAgfQorICAgIH07CisgICAgRGF0YWJhc2UucHJvdG90eXBlLl9zYXZlSW1h
Z2VJbnRvREJBc3luYyA9IGZ1bmN0aW9uICh1cmwsIGltYWdlKSB7CisgICAgICAgIHZhciBfdGhp
cyA9IHRoaXM7CisgICAgICAgIGlmICh0aGlzLl9pc1N1cHBvcnRlZCkgeworICAgICAgICAgICAg
Ly8gSW4gY2FzZSBvZiBlcnJvciAodHlwZSBub3Qgc3VwcG9ydGVkIG9yIHF1b3RhIGV4Y2VlZGVk
KSwgd2UncmUgYXQgbGVhc3Qgc2VuZGluZyBiYWNrIFhIUiBkYXRhIHRvIGFsbG93IHRleHR1cmUg
bG9hZGluZyBsYXRlciBvbgorICAgICAgICAgICAgdmFyIGdlbmVyYXRlQmxvYlVybCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgYmxvYlRleHR1cmVVUkw7CisgICAgICAgICAg
ICAgICAgaWYgKGJsb2IpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIFVSTCA9IHdpbmRvdy5V
UkwgfHwgd2luZG93LndlYmtpdFVSTDsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2JUZXh0dXJlVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChi
bG9iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBDaHJv
bWUgaXMgcmFpc2luZyBhIHR5cGUgZXJyb3IgaWYgd2UncmUgc2V0dGluZyB0aGUgb25lVGltZU9u
bHkgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgICAgIGNhdGNoIChleCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvYlRleHR1cmVVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2Ip
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChibG9iVGV4dHVyZVVSTCkgeworICAgICAgICAgICAgICAgICAgICBpbWFnZS5zcmMg
PSBibG9iVGV4dHVyZVVSTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgaWYgKERhdGFiYXNlLklzVUFTdXBwb3J0aW5nQmxvYlN0b3JhZ2UpIHsgLy8gQ3Jl
YXRlIFhIUgorICAgICAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgX01pc2Nfd2ViUmVxdWVzdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJXZWJSZXF1ZXN0Il0oKSwgYmxvYjsKKyAgICAg
ICAgICAgICAgICB4aHIub3BlbigiR0VUIiwgdXJsKTsKKyAgICAgICAgICAgICAgICB4aHIucmVz
cG9uc2VUeXBlID0gImJsb2IiOworICAgICAgICAgICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVy
KCJsb2FkIiwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1
cyA9PT0gMjAwICYmIF90aGlzLl9kYikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmxv
YiBhcyByZXNwb25zZSAoWEhSMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2IgPSB4aHIu
cmVzcG9uc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNhY3Rpb24gPSBfdGhp
cy5fZGIudHJhbnNhY3Rpb24oWyJ0ZXh0dXJlcyJdLCAicmVhZHdyaXRlIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgdHJhbnNhY3Rpb24gY291bGQgYWJvcnQgYmVjYXVzZSBvZiBh
IFF1b3RhRXhjZWVkZWRFcnJvciBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNh
Y3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmFja3dhcmRz
IGNvbXBhdGliaWxpdHkgd2l0aCB0cyAxLjAsIHNyY0VsZW1lbnQgZG9lc24ndCBoYXZlIGFuICJl
cnJvciIgYWNjb3JkaW5nIHRvIHRzIDEuMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgc3JjRWxlbWVudCA9IChldmVudC5zcmNFbGVtZW50IHx8IGV2ZW50LnRhcmdldCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHNyY0VsZW1lbnQuZXJy
b3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5u
YW1lID09PSAiUXVvdGFFeGNlZWRlZEVycm9yIikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX3RoaXMuX2hhc1JlYWNoZWRRdW90YSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7IH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZW5lcmF0ZUJsb2JVcmwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQmxvYlVybCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBu
ZXdUZXh0dXJlID0geyB0ZXh0dXJlVXJsOiB1cmwsIGRhdGE6IGJsb2IgfTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHV0IHRo
ZSBibG9iIGludG8gdGhlIGRhYmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBh
ZGRSZXF1ZXN0ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoInRleHR1cmVzIikucHV0KG5ld1Rl
eHR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJlcXVlc3Qub25zdWNjZXNz
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkUmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUJsb2JVcmwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gIkRhdGFDbG9uZUVycm9yIiBnZW5lcmF0ZWQgYnkgQ2hyb21lIHdoZW4geW91IHRy
eSB0byBpbmplY3QgYmxvYiBpbnRvIEluZGV4ZWREQgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChleC5jb2RlID09PSAyNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEYXRhYmFzZS5Jc1VBU3VwcG9ydGluZ0Jsb2JTdG9yYWdlID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9lbmFibGVUZXh0dXJlc09mZmxpbmUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW1hZ2Uuc3JjID0gdXJsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaW1hZ2Uuc3JjID0gdXJsOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHhoci5hZGRFdmVudExpc3Rl
bmVyKCJlcnJvciIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9n
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVycm9yKCJFcnJvciBp
biBYSFIgcmVxdWVzdCBpbiBCQUJZTE9OLkRhdGFiYXNlLiIpOworICAgICAgICAgICAgICAgICAg
ICBpbWFnZS5zcmMgPSB1cmw7CisgICAgICAgICAgICAgICAgfSwgZmFsc2UpOworICAgICAgICAg
ICAgICAgIHhoci5zZW5kKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpbWFnZS5zcmMgPSB1cmw7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uRXJyb3IoIkVycm9yOiBJbmRleGVkREIgbm90IHN1cHBv
cnRlZCBieSB5b3VyIGJyb3dzZXIgb3IgQmFieWxvbkpTIERhdGFiYXNlIGlzIG5vdCBvcGVuLiIp
OworICAgICAgICAgICAgaW1hZ2Uuc3JjID0gdXJsOworICAgICAgICB9CisgICAgfTsKKyAgICBE
YXRhYmFzZS5wcm90b3R5cGUuX2NoZWNrVmVyc2lvbkZyb21EQiA9IGZ1bmN0aW9uICh1cmwsIHZl
cnNpb25Mb2FkZWQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIHVw
ZGF0ZVZlcnNpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyB0aGUgdmVyc2lvbiBp
cyBub3QgeWV0IGluIHRoZSBEQiBvciB3ZSBuZWVkIHRvIHVwZGF0ZSBpdAorICAgICAgICAgICAg
X3RoaXMuX3NhdmVWZXJzaW9uSW50b0RCQXN5bmModXJsLCB2ZXJzaW9uTG9hZGVkKTsKKyAgICAg
ICAgfTsKKyAgICAgICAgdGhpcy5fbG9hZFZlcnNpb25Gcm9tREJBc3luYyh1cmwsIHZlcnNpb25M
b2FkZWQsIHVwZGF0ZVZlcnNpb24pOworICAgIH07CisgICAgRGF0YWJhc2UucHJvdG90eXBlLl9s
b2FkVmVyc2lvbkZyb21EQkFzeW5jID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2ssIHVwZGF0ZUlu
REJDYWxsYmFjaykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhp
cy5faXNTdXBwb3J0ZWQgJiYgdGhpcy5fZGIpIHsKKyAgICAgICAgICAgIHZhciB2ZXJzaW9uOwor
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgdHJhbnNhY3Rpb24gPSB0aGlz
Ll9kYi50cmFuc2FjdGlvbihbInZlcnNpb25zIl0pOworICAgICAgICAgICAgICAgIHRyYW5zYWN0
aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpbiB0
aGUgSlNPTiBmaWxlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSB2ZXJzaW9uIGluIERCCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX21hbmlmZXN0VmVyc2lvbkZvdW5kICE9PSB2ZXJz
aW9uLmRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbXVzdFVwZGF0
ZVJlc3NvdXJjZXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUlu
REJDYWxsYmFjaygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodmVy
c2lvbi5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAvLyB2ZXJzaW9uIHdhcyBub3QgZm91bmQgaW4gREIK
KyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5fbXVzdFVwZGF0ZVJlc3NvdXJjZXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
dXBkYXRlSW5EQkNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKC0xKTsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgIHZhciBnZXRSZXF1ZXN0ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3Rv
cmUoInZlcnNpb25zIikuZ2V0KHVybCk7CisgICAgICAgICAgICAgICAgZ2V0UmVxdWVzdC5vbnN1
Y2Nlc3MgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9
IChldmVudC50YXJnZXQpLnJlc3VsdDsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIGdldFJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVy
cm9yKCJFcnJvciBsb2FkaW5nIHZlcnNpb24gZm9yIHNjZW5lICIgKyB1cmwgKyAiIGZyb20gREIu
Iik7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKC0xKTsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVy
cm9yKCJFcnJvciB3aGlsZSBhY2Nlc3NpbmcgJ3ZlcnNpb25zJyBvYmplY3Qgc3RvcmUgKFJFQUQg
T1ApLiBFeGNlcHRpb246ICIgKyBleC5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFj
aygtMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0u
RXJyb3IoIkVycm9yOiBJbmRleGVkREIgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIgb3Ig
QmFieWxvbkpTIERhdGFiYXNlIGlzIG5vdCBvcGVuLiIpOworICAgICAgICAgICAgY2FsbGJhY2so
LTEpOworICAgICAgICB9CisgICAgfTsKKyAgICBEYXRhYmFzZS5wcm90b3R5cGUuX3NhdmVWZXJz
aW9uSW50b0RCQXN5bmMgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy5faXNTdXBwb3J0ZWQgJiYgIXRoaXMuX2hh
c1JlYWNoZWRRdW90YSAmJiB0aGlzLl9kYikgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgICAgICAvLyBPcGVuIGEgdHJhbnNhY3Rpb24gdG8gdGhlIGRhdGFiYXNlCisgICAgICAgICAg
ICAgICAgdmFyIHRyYW5zYWN0aW9uID0gdGhpcy5fZGIudHJhbnNhY3Rpb24oWyJ2ZXJzaW9ucyJd
LCAicmVhZHdyaXRlIik7CisgICAgICAgICAgICAgICAgLy8gdGhlIHRyYW5zYWN0aW9uIGNvdWxk
IGFib3J0IGJlY2F1c2Ugb2YgYSBRdW90YUV4Y2VlZGVkRXJyb3IgZXJyb3IKKyAgICAgICAgICAg
ICAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAg
ICAgICAgICAgIHRyeSB7IC8vYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB0cyAxLjAsIHNy
Y0VsZW1lbnQgZG9lc24ndCBoYXZlIGFuICJlcnJvciIgYWNjb3JkaW5nIHRvIHRzIDEuMworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gZXZlbnQuc3JjRWxlbWVudFsnZXJyb3In
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5uYW1lID09PSAi
UXVvdGFFeGNlZWRlZEVycm9yIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlz
Ll9oYXNSZWFjaGVkUXVvdGEgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhdGNoIChleCkgeyB9Cisg
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKC0xKTsKKyAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKF90aGlzLl9tYW5pZmVzdFZlcnNpb25Gb3VuZCk7Cisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB2YXIgbmV3VmVyc2lvbiA9IHsgc2Nl
bmVVcmw6IHVybCwgZGF0YTogdGhpcy5fbWFuaWZlc3RWZXJzaW9uRm91bmQgfTsKKyAgICAgICAg
ICAgICAgICAvLyBQdXQgdGhlIHNjZW5lIGludG8gdGhlIGRhdGFiYXNlCisgICAgICAgICAgICAg
ICAgdmFyIGFkZFJlcXVlc3QgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgidmVyc2lvbnMiKS5w
dXQobmV3VmVyc2lvbik7CisgICAgICAgICAgICAgICAgYWRkUmVxdWVzdC5vbnN1Y2Nlc3MgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBhZGRSZXF1
ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIF9NaXNjX2xv
Z2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJvcigiRXJyb3Ig
aW4gREIgYWRkIHZlcnNpb24gcmVxdWVzdCBpbiBCQUJZTE9OLkRhdGFiYXNlLiIpOworICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoZXgpIHsKKyAg
ICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TG9nZ2VyIl0uRXJyb3IoIkVycm9yIHdoaWxlIGFjY2Vzc2luZyAndmVyc2lvbnMnIG9iamVjdCBz
dG9yZSAoV1JJVEUgT1ApLiBFeGNlcHRpb246ICIgKyBleC5tZXNzYWdlKTsKKyAgICAgICAgICAg
ICAgICBjYWxsYmFjaygtMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBjYWxsYmFjaygtMSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIExvYWRzIGEgZmlsZSBmcm9tIGRhdGFiYXNlCisgICAgICogQHBhcmFtIHVybCBk
ZWZpbmVzIHRoZSBVUkwgdG8gbG9hZCBmcm9tCisgICAgICogQHBhcmFtIHNjZW5lTG9hZGVkIGRl
ZmluZXMgYSBjYWxsYmFjayB0byBjYWxsIG9uIHN1Y2Nlc3MKKyAgICAgKiBAcGFyYW0gcHJvZ3Jl
c3NDYWxsQmFjayBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHByb2dyZXNzIGNoYW5n
ZWQKKyAgICAgKiBAcGFyYW0gZXJyb3JDYWxsYmFjayBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2Fs
bCBvbiBlcnJvcgorICAgICAqIEBwYXJhbSB1c2VBcnJheUJ1ZmZlciBkZWZpbmVzIGEgYm9vbGVh
biB0byB1c2UgYXJyYXkgYnVmZmVyIGluc3RlYWQgb2YgdGV4dCBzdHJpbmcKKyAgICAgKi8KKyAg
ICBEYXRhYmFzZS5wcm90b3R5cGUubG9hZEZpbGUgPSBmdW5jdGlvbiAodXJsLCBzY2VuZUxvYWRl
ZCwgcHJvZ3Jlc3NDYWxsQmFjaywgZXJyb3JDYWxsYmFjaywgdXNlQXJyYXlCdWZmZXIpIHsKKyAg
ICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIGNvbXBsZXRlVXJsID0gRGF0YWJh
c2UuX1JldHVybkZ1bGxVcmxMb2NhdGlvbih1cmwpOworICAgICAgICB2YXIgc2F2ZUFuZExvYWRG
aWxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgLy8gdGhlIHNjZW5lIGlzIG5vdCB5ZXQg
aW4gdGhlIERCLCBsZXQncyB0cnkgdG8gc2F2ZSBpdAorICAgICAgICAgICAgX3RoaXMuX3NhdmVG
aWxlQXN5bmMoY29tcGxldGVVcmwsIHNjZW5lTG9hZGVkLCBwcm9ncmVzc0NhbGxCYWNrLCB1c2VB
cnJheUJ1ZmZlciwgZXJyb3JDYWxsYmFjayk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMuX2No
ZWNrVmVyc2lvbkZyb21EQihjb21wbGV0ZVVybCwgZnVuY3Rpb24gKHZlcnNpb24pIHsKKyAgICAg
ICAgICAgIGlmICh2ZXJzaW9uICE9PSAtMSkgeworICAgICAgICAgICAgICAgIGlmICghX3RoaXMu
X211c3RVcGRhdGVSZXNzb3VyY2VzKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9sb2Fk
RmlsZUFzeW5jKGNvbXBsZXRlVXJsLCBzY2VuZUxvYWRlZCwgc2F2ZUFuZExvYWRGaWxlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIF90aGlzLl9zYXZlRmlsZUFzeW5jKGNvbXBsZXRlVXJsLCBzY2VuZUxvYWRlZCwgcHJvZ3Jl
c3NDYWxsQmFjaywgdXNlQXJyYXlCdWZmZXIsIGVycm9yQ2FsbGJhY2spOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGlmIChlcnJvckNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2so
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07
CisgICAgRGF0YWJhc2UucHJvdG90eXBlLl9sb2FkRmlsZUFzeW5jID0gZnVuY3Rpb24gKHVybCwg
Y2FsbGJhY2ssIG5vdEluREJDYWxsYmFjaykgeworICAgICAgICBpZiAodGhpcy5faXNTdXBwb3J0
ZWQgJiYgdGhpcy5fZGIpIHsKKyAgICAgICAgICAgIHZhciB0YXJnZXRTdG9yZTsKKyAgICAgICAg
ICAgIGlmICh1cmwuaW5kZXhPZigiLmJhYnlsb24iKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAg
ICB0YXJnZXRTdG9yZSA9ICJzY2VuZXMiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0U3RvcmUgPSAidGV4dHVyZXMiOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIGZpbGU7CisgICAgICAgICAgICB2YXIgdHJhbnNhY3Rpb24g
PSB0aGlzLl9kYi50cmFuc2FjdGlvbihbdGFyZ2V0U3RvcmVdKTsKKyAgICAgICAgICAgIHRyYW5z
YWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaWYgKGZp
bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZmlsZS5kYXRhKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gZmlsZSB3YXMgbm90IGZvdW5kIGluIERCCisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5vdEluREJDYWxsYmFj
aygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB0cmFu
c2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIG5vdEluREJD
YWxsYmFjaygpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHZhciBnZXRSZXF1ZXN0ID0g
dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGFyZ2V0U3RvcmUpLmdldCh1cmwpOworICAgICAgICAg
ICAgZ2V0UmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAg
ICAgICBmaWxlID0gKGV2ZW50LnRhcmdldCkucmVzdWx0OworICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIGdldFJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uRXJy
b3IoIkVycm9yIGxvYWRpbmcgZmlsZSAiICsgdXJsICsgIiBmcm9tIERCLiIpOworICAgICAgICAg
ICAgICAgIG5vdEluREJDYWxsYmFjaygpOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJvcigiRXJyb3I6IEluZGV4ZWREQiBub3Qgc3VwcG9ydGVk
IGJ5IHlvdXIgYnJvd3NlciBvciBCYWJ5bG9uSlMgRGF0YWJhc2UgaXMgbm90IG9wZW4uIik7Cisg
ICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9CisgICAgfTsKKyAgICBEYXRhYmFzZS5w
cm90b3R5cGUuX3NhdmVGaWxlQXN5bmMgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaywgcHJvZ3Jl
c3NDYWxsYmFjaywgdXNlQXJyYXlCdWZmZXIsIGVycm9yQ2FsbGJhY2spIHsKKyAgICAgICAgdmFy
IF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMuX2lzU3VwcG9ydGVkKSB7CisgICAgICAg
ICAgICB2YXIgdGFyZ2V0U3RvcmU7CisgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoIi5iYWJ5
bG9uIikgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0U3RvcmUgPSAic2NlbmVzIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRhcmdl
dFN0b3JlID0gInRleHR1cmVzIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENyZWF0
ZSBYSFIKKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgX01pc2Nfd2ViUmVxdWVzdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJXZWJSZXF1ZXN0Il0oKTsKKyAgICAgICAgICAgIHZhciBm
aWxlRGF0YTsKKyAgICAgICAgICAgIHhoci5vcGVuKCJHRVQiLCB1cmwgKyAiPyIgKyBEYXRlLm5v
dygpKTsKKyAgICAgICAgICAgIGlmICh1c2VBcnJheUJ1ZmZlcikgeworICAgICAgICAgICAgICAg
IHhoci5yZXNwb25zZVR5cGUgPSAiYXJyYXlidWZmZXIiOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHByb2dyZXNzQ2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICB4aHIub25wcm9n
cmVzcyA9IHByb2dyZXNzQ2FsbGJhY2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4aHIu
YWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoeGhyLnN0YXR1cyA9PT0gMjAwIHx8ICh4aHIuc3RhdHVzIDwgNDAwICYmIERhdGFiYXNlLl9W
YWxpZGF0ZVhIUkRhdGEoeGhyLCAhdXNlQXJyYXlCdWZmZXIgPyAxIDogNikpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEJsb2IgYXMgcmVzcG9uc2UgKFhIUjIpCisgICAgICAgICAgICAgICAg
ICAgIGZpbGVEYXRhID0gIXVzZUFycmF5QnVmZmVyID8geGhyLnJlc3BvbnNlVGV4dCA6IHhoci5y
ZXNwb25zZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5faGFzUmVhY2hlZFF1b3Rh
ICYmIF90aGlzLl9kYikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlbiBhIHRyYW5z
YWN0aW9uIHRvIHRoZSBkYXRhYmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5z
YWN0aW9uID0gX3RoaXMuX2RiLnRyYW5zYWN0aW9uKFt0YXJnZXRTdG9yZV0sICJyZWFkd3JpdGUi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb3VsZCBhYm9y
dCBiZWNhdXNlIG9mIGEgUXVvdGFFeGNlZWRlZEVycm9yIGVycm9yCisgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy9iYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHRzIDEuMCwgc3JjRWxlbWVudCBkb2Vz
bid0IGhhdmUgYW4gImVycm9yIiBhY2NvcmRpbmcgdG8gdHMgMS4zCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGV2ZW50LnNyY0VsZW1lbnRbJ2Vycm9yJ107Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5uYW1lID09
PSAiUXVvdGFFeGNlZWRlZEVycm9yIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3RoaXMuX2hhc1JlYWNoZWRRdW90YSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7IH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayhmaWxlRGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhmaWxlRGF0YSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0Zp
bGU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0U3RvcmUgPT09ICJzY2VuZXMi
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZSA9IHsgc2NlbmVVcmw6IHVy
bCwgZGF0YTogZmlsZURhdGEsIHZlcnNpb246IF90aGlzLl9tYW5pZmVzdFZlcnNpb25Gb3VuZCB9
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZSA9IHsgdGV4dHVyZVVybDog
dXJsLCBkYXRhOiBmaWxlRGF0YSB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQ
dXQgdGhlIHNjZW5lIGludG8gdGhlIGRhdGFiYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGFkZFJlcXVlc3QgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSh0YXJnZXRTdG9yZSku
cHV0KG5ld0ZpbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJlcXVlc3Qub25z
dWNjZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uRXJyb3IoIkVycm9yIGluIERCIGFkZCBm
aWxlIHJlcXVlc3QgaW4gQkFCWUxPTi5EYXRhYmFzZS4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2so
ZmlsZURhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2soZmlsZURhdGEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoeGhy
LnN0YXR1cyA+PSA0MDAgJiYgZXJyb3JDYWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JDYWxsYmFjayh4aHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIGZh
bHNlKTsKKyAgICAgICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siTG9nZ2VyIl0uRXJyb3IoImVycm9yIG9uIFhIUiByZXF1ZXN0LiIpOworICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICB9LCBmYWxzZSk7CisgICAgICAgICAg
ICB4aHIuc2VuZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX01p
c2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLkVycm9yKCJF
cnJvcjogSW5kZXhlZERCIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyIG9yIEJhYnlsb24u
anMgRGF0YWJhc2UgaXMgbm90IG9wZW4uIik7CisgICAgICAgICAgICBjYWxsYmFjaygpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBWYWxpZGF0ZXMgaWYgeGhyIGRhdGEgaXMg
Y29ycmVjdAorICAgICAqIEBwYXJhbSB4aHIgZGVmaW5lcyB0aGUgcmVxdWVzdCB0byB2YWxpZGF0
ZQorICAgICAqIEBwYXJhbSBkYXRhVHlwZSBkZWZpbmVzIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUK
KyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGRhdGEgaXMgY29ycmVjdAorICAgICAqLworICAgIERh
dGFiYXNlLl9WYWxpZGF0ZVhIUkRhdGEgPSBmdW5jdGlvbiAoeGhyLCBkYXRhVHlwZSkgeworICAg
ICAgICAvLyAxIGZvciB0ZXh0ICguYmFieWxvbiwgbWFuaWZlc3QgYW5kIHNoYWRlcnMpLCAyIGZv
ciBUR0EsIDQgZm9yIEREUywgNyBmb3IgYWxsCisgICAgICAgIGlmIChkYXRhVHlwZSA9PT0gdm9p
ZCAwKSB7IGRhdGFUeXBlID0gNzsgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKGRh
dGFUeXBlICYgMSkgeworICAgICAgICAgICAgICAgIGlmICh4aHIucmVzcG9uc2VUZXh0ICYmIHho
ci5yZXNwb25zZVRleHQubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0YVR5
cGUgPT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkYXRhVHlwZSAmIDIpIHsK
KyAgICAgICAgICAgICAgICAvLyBDaGVjayBoZWFkZXIgd2lkdGggYW5kIGhlaWdodCBzaW5jZSB0
aGVyZSBpcyBubyAiVEdBIiBtYWdpYyBudW1iZXIKKyAgICAgICAgICAgICAgICB2YXIgdGdhSGVh
ZGVyID0gX01pc2NfdGdhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRHQVRvb2xzIl0u
R2V0VEdBSGVhZGVyKHhoci5yZXNwb25zZSk7CisgICAgICAgICAgICAgICAgaWYgKHRnYUhlYWRl
ci53aWR0aCAmJiB0Z2FIZWFkZXIuaGVpZ2h0ICYmIHRnYUhlYWRlci53aWR0aCA+IDAgJiYgdGdh
SGVhZGVyLmhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFUeXBlID09PSAy
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGF0YVR5cGUgJiA0KSB7CisgICAgICAg
ICAgICAgICAgLy8gQ2hlY2sgZm9yIHRoZSAiRERTIiBtYWdpYyBudW1iZXIKKyAgICAgICAgICAg
ICAgICB2YXIgZGRzSGVhZGVyID0gbmV3IFVpbnQ4QXJyYXkoeGhyLnJlc3BvbnNlLCAwLCAzKTsK
KyAgICAgICAgICAgICAgICBpZiAoZGRzSGVhZGVyWzBdID09PSA2OCAmJiBkZHNIZWFkZXJbMV0g
PT09IDY4ICYmIGRkc0hlYWRlclsyXSA9PT0gODMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhdGNoIChlKSB7CisgICAgICAgICAgICAvLyBH
bG9iYWwgcHJvdGVjdGlvbgorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
OworICAgIC8qKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB1c2VyIGFnZW50IHN1
cHBvcnRzIGJsb2Igc3RvcmFnZSAodGhpcyB2YWx1ZSB3aWxsIGJlIHVwZGF0ZWQgYWZ0ZXIgY3Jl
YXRpbmcgdGhlIGZpcnN0IERhdGFiYXNlIG9iamVjdCkgKi8KKyAgICBEYXRhYmFzZS5Jc1VBU3Vw
cG9ydGluZ0Jsb2JTdG9yYWdlID0gdHJ1ZTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVh
biBpbmRpY2F0aW5nIGlmIERhdGFiYXNlIHN0b3JhdGUgaXMgZW5hYmxlZCAob2ZmIGJ5IGRlZmF1
bHQpCisgICAgICovCisgICAgRGF0YWJhc2UuSURCU3RvcmFnZUVuYWJsZWQgPSBmYWxzZTsKKyAg
ICBEYXRhYmFzZS5fUGFyc2VVUkwgPSBmdW5jdGlvbiAodXJsKSB7CisgICAgICAgIHZhciBhID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOworICAgICAgICBhLmhyZWYgPSB1cmw7CisgICAg
ICAgIHZhciB1cmxXaXRob3V0SGFzaCA9IHVybC5zdWJzdHJpbmcoMCwgdXJsLmxhc3RJbmRleE9m
KCIjIikpOworICAgICAgICB2YXIgZmlsZU5hbWUgPSB1cmwuc3Vic3RyaW5nKHVybFdpdGhvdXRI
YXNoLmxhc3RJbmRleE9mKCIvIikgKyAxLCB1cmwubGVuZ3RoKTsKKyAgICAgICAgdmFyIGFic0xv
Y2F0aW9uID0gdXJsLnN1YnN0cmluZygwLCB1cmwuaW5kZXhPZihmaWxlTmFtZSwgMCkpOworICAg
ICAgICByZXR1cm4gYWJzTG9jYXRpb247CisgICAgfTsKKyAgICBEYXRhYmFzZS5fUmV0dXJuRnVs
bFVybExvY2F0aW9uID0gZnVuY3Rpb24gKHVybCkgeworICAgICAgICBpZiAodXJsLmluZGV4T2Yo
Imh0dHA6LyIpID09PSAtMSAmJiB1cmwuaW5kZXhPZigiaHR0cHM6LyIpID09PSAtMSkgeworICAg
ICAgICAgICAgcmV0dXJuIChEYXRhYmFzZS5fUGFyc2VVUkwod2luZG93LmxvY2F0aW9uLmhyZWYp
ICsgdXJsKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB1
cmw7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBEYXRhYmFzZTsKK30oKSk7CisKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vT2ZmbGluZS9pbmRleC50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vT2ZmbGluZS9pbmRleC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBEYXRhYmFz
ZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RhdGFiYXNl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L2RhdGFiYXNlICovICIuL09mZmxpbmUvZGF0YWJhc2UudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
RGF0YWJhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kYXRhYmFzZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJEYXRhYmFzZSJdOyB9KTsKKworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL1BhcnRpY2xlcy9FbWl0dGVyVHlwZXMvYm94UGFydGljbGVFbWl0dGVyLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vUGFydGljbGVzL0VtaXR0ZXJUeXBlcy9ib3hQYXJ0aWNsZUVtaXR0ZXIudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJveFBhcnRpY2xlRW1pdHRlciAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb3hQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEJveFBhcnRpY2xlRW1pdHRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfZGVlcENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy9kZWVwQ29waWVyICovICIuL01pc2MvZGVl
cENvcGllci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgu
c2NhbGFyICovICIuL01hdGhzL21hdGguc2NhbGFyLnRzIik7CisKKworCisvKioKKyAqIFBhcnRp
Y2xlIGVtaXR0ZXIgZW1pdHRpbmcgcGFydGljbGVzIGZyb20gdGhlIGluc2lkZSBvZiBhIGJveC4K
KyAqIEl0IGVtaXRzIHRoZSBwYXJ0aWNsZXMgcmFuZG9tbHkgYmV0d2VlbiAyIGdpdmVuIGRpcmVj
dGlvbnMuCisgKi8KK3ZhciBCb3hQYXJ0aWNsZUVtaXR0ZXIgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBCb3hQYXJ0
aWNsZUVtaXR0ZXIKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBCb3hQYXJ0aWNsZUVtaXR0ZXIoKSB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBSYW5kb20gZGlyZWN0aW9uIG9mIGVhY2ggcGFydGlj
bGUgYWZ0ZXIgaXQgaGFzIGJlZW4gZW1pdHRlZCwgYmV0d2VlbiBkaXJlY3Rpb24xIGFuZCBkaXJl
Y3Rpb24yIHZlY3RvcnMuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmRpcmVjdGlvbjEgPSBu
ZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3Rv
cjMiXSgwLCAxLjAsIDApOworICAgICAgICAvKioKKyAgICAgICAgICogUmFuZG9tIGRpcmVjdGlv
biBvZiBlYWNoIHBhcnRpY2xlIGFmdGVyIGl0IGhhcyBiZWVuIGVtaXR0ZWQsIGJldHdlZW4gZGly
ZWN0aW9uMSBhbmQgZGlyZWN0aW9uMiB2ZWN0b3JzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5kaXJlY3Rpb24yID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0oMCwgMS4wLCAwKTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IE1pbmltdW0gYm94IHBvaW50IGFyb3VuZCBvdXIgZW1pdHRlci4gT3VyIGVtaXR0ZXIgaXMgdGhl
IGNlbnRlciBvZiBwYXJ0aWNsZXMgc291cmNlLCBidXQgaWYgeW91IHdhbnQgeW91ciBwYXJ0aWNs
ZXMgdG8gZW1pdCBmcm9tIG1vcmUgdGhhbiBvbmUgcG9pbnQsIHRoZW4geW91IGNhbiB0ZWxsIGl0
IHRvIGRvIHNvLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5taW5FbWl0Qm94ID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0o
LTAuNSwgLTAuNSwgLTAuNSk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNYXhpbXVtIGJveCBw
b2ludCBhcm91bmQgb3VyIGVtaXR0ZXIuIE91ciBlbWl0dGVyIGlzIHRoZSBjZW50ZXIgb2YgcGFy
dGljbGVzIHNvdXJjZSwgYnV0IGlmIHlvdSB3YW50IHlvdXIgcGFydGljbGVzIHRvIGVtaXQgZnJv
bSBtb3JlIHRoYW4gb25lIHBvaW50LCB0aGVuIHlvdSBjYW4gdGVsbCBpdCB0byBkbyBzby4KKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMubWF4RW1pdEJveCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKDAuNSwgMC41LCAwLjUp
OworICAgIH0KKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBhcnRpY2xlIFN5c3RlbSB3
aGVuIHRoZSBkaXJlY3Rpb24gaXMgY29tcHV0ZWQgZm9yIHRoZSBjcmVhdGVkIHBhcnRpY2xlLgor
ICAgICAqIEBwYXJhbSB3b3JsZE1hdHJpeCBpcyB0aGUgd29ybGQgbWF0cml4IG9mIHRoZSBwYXJ0
aWNsZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uVG9VcGRhdGUgaXMgdGhlIGRpcmVj
dGlvbiB2ZWN0b3IgdG8gdXBkYXRlIHdpdGggdGhlIHJlc3VsdAorICAgICAqIEBwYXJhbSBwYXJ0
aWNsZSBpcyB0aGUgcGFydGljbGUgd2UgYXJlIGNvbXB1dGVkIHRoZSBkaXJlY3Rpb24gZm9yCisg
ICAgICovCisgICAgQm94UGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5zdGFydERpcmVjdGlvbkZ1
bmN0aW9uID0gZnVuY3Rpb24gKHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1VwZGF0ZSwgcGFydGlj
bGUpIHsKKyAgICAgICAgdmFyIHJhbmRYID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKHRoaXMuZGlyZWN0aW9uMS54
LCB0aGlzLmRpcmVjdGlvbjIueCk7CisgICAgICAgIHZhciByYW5kWSA9IF9NYXRoc19tYXRoX3Nj
YWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSh0
aGlzLmRpcmVjdGlvbjEueSwgdGhpcy5kaXJlY3Rpb24yLnkpOworICAgICAgICB2YXIgcmFuZFog
PSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFy
Il0uUmFuZG9tUmFuZ2UodGhpcy5kaXJlY3Rpb24xLnosIHRoaXMuZGlyZWN0aW9uMi56KTsKKyAg
ICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZl
Y3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWxGcm9tRmxvYXRzVG9SZWYocmFuZFgsIHJhbmRZLCByYW5k
Wiwgd29ybGRNYXRyaXgsIGRpcmVjdGlvblRvVXBkYXRlKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIENhbGxlZCBieSB0aGUgcGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIHBvc2l0aW9uIGlzIGNv
bXB1dGVkIGZvciB0aGUgY3JlYXRlZCBwYXJ0aWNsZS4KKyAgICAgKiBAcGFyYW0gd29ybGRNYXRy
aXggaXMgdGhlIHdvcmxkIG1hdHJpeCBvZiB0aGUgcGFydGljbGUgc3lzdGVtCisgICAgICogQHBh
cmFtIHBvc2l0aW9uVG9VcGRhdGUgaXMgdGhlIHBvc2l0aW9uIHZlY3RvciB0byB1cGRhdGUgd2l0
aCB0aGUgcmVzdWx0CisgICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBwYXJ0aWNsZSB3ZSBh
cmUgY29tcHV0ZWQgdGhlIHBvc2l0aW9uIGZvcgorICAgICAqLworICAgIEJveFBhcnRpY2xlRW1p
dHRlci5wcm90b3R5cGUuc3RhcnRQb3NpdGlvbkZ1bmN0aW9uID0gZnVuY3Rpb24gKHdvcmxkTWF0
cml4LCBwb3NpdGlvblRvVXBkYXRlLCBwYXJ0aWNsZSkgeworICAgICAgICB2YXIgcmFuZFggPSBf
TWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0u
UmFuZG9tUmFuZ2UodGhpcy5taW5FbWl0Qm94LngsIHRoaXMubWF4RW1pdEJveC54KTsKKyAgICAg
ICAgdmFyIHJhbmRZID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKHRoaXMubWluRW1pdEJveC55LCB0aGlzLm1heEVt
aXRCb3gueSk7CisgICAgICAgIHZhciByYW5kWiA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSh0aGlzLm1pbkVtaXRC
b3gueiwgdGhpcy5tYXhFbWl0Qm94LnopOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVz
RnJvbUZsb2F0c1RvUmVmKHJhbmRYLCByYW5kWSwgcmFuZFosIHdvcmxkTWF0cml4LCBwb3NpdGlv
blRvVXBkYXRlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lcyB0aGUgY3VycmVudCBl
bWl0dGVyIGFuZCByZXR1cm5zIGEgY29weSBvZiBpdAorICAgICAqIEByZXR1cm5zIHRoZSBuZXcg
ZW1pdHRlcgorICAgICAqLworICAgIEJveFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuY2xvbmUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBuZXdPbmUgPSBuZXcgQm94UGFydGljbGVFbWl0
dGVyKCk7CisgICAgICAgIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHRoaXMsIG5ld09uZSk7CisgICAgICAgIHJldHVy
biBuZXdPbmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIEdQVVBhcnRp
Y2xlU3lzdGVtIHRvIHNldHVwIHRoZSB1cGRhdGUgc2hhZGVyCisgICAgICogQHBhcmFtIGVmZmVj
dCBkZWZpbmVzIHRoZSB1cGRhdGUgc2hhZGVyCisgICAgICovCisgICAgQm94UGFydGljbGVFbWl0
dGVyLnByb3RvdHlwZS5hcHBseVRvU2hhZGVyID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAg
ICBlZmZlY3Quc2V0VmVjdG9yMygiZGlyZWN0aW9uMSIsIHRoaXMuZGlyZWN0aW9uMSk7CisgICAg
ICAgIGVmZmVjdC5zZXRWZWN0b3IzKCJkaXJlY3Rpb24yIiwgdGhpcy5kaXJlY3Rpb24yKTsKKyAg
ICAgICAgZWZmZWN0LnNldFZlY3RvcjMoIm1pbkVtaXRCb3giLCB0aGlzLm1pbkVtaXRCb3gpOwor
ICAgICAgICBlZmZlY3Quc2V0VmVjdG9yMygibWF4RW1pdEJveCIsIHRoaXMubWF4RW1pdEJveCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHRvIHVzZSB0byB1cGRh
dGUgdGhlIEdQVSBwYXJ0aWNsZXMgdXBkYXRlIHNoYWRlcgorICAgICAqIEByZXR1cm5zIGEgc3Ry
aW5nIGNvbnRhaW5uZyB0aGUgZGVmaW5lcyBzdHJpbmcKKyAgICAgKi8KKyAgICBCb3hQYXJ0aWNs
ZUVtaXR0ZXIucHJvdG90eXBlLmdldEVmZmVjdERlZmluZXMgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiAiI2RlZmluZSBCT1hFTUlUVEVSIjsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJldHVybnMgdGhlIHN0cmluZyAiQm94UGFydGljbGVFbWl0dGVyIgorICAgICAqIEByZXR1cm5z
IGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBCb3hQYXJ0
aWNsZUVtaXR0ZXIucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICJCb3hQYXJ0aWNsZUVtaXR0ZXIiOworICAgIH07CisgICAgLyoqCisgICAgICog
U2VyaWFsaXplcyB0aGUgcGFydGljbGUgc3lzdGVtIHRvIGEgSlNPTiBvYmplY3QuCisgICAgICog
QHJldHVybnMgdGhlIEpTT04gb2JqZWN0CisgICAgICovCisgICAgQm94UGFydGljbGVFbWl0dGVy
LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZXJpYWxp
emF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudHlwZSA9IHRo
aXMuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZGlyZWN0aW9u
MSA9IHRoaXMuZGlyZWN0aW9uMS5hc0FycmF5KCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QuZGlyZWN0aW9uMiA9IHRoaXMuZGlyZWN0aW9uMi5hc0FycmF5KCk7CisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3QubWluRW1pdEJveCA9IHRoaXMubWluRW1pdEJveC5hc0FycmF5KCk7Cisg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF4RW1pdEJveCA9IHRoaXMubWF4RW1pdEJveC5h
c0FycmF5KCk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07Cisg
ICAgLyoqCisgICAgICogUGFyc2UgcHJvcGVydGllcyBmcm9tIGEgSlNPTiBvYmplY3QKKyAgICAg
KiBAcGFyYW0gc2VyaWFsaXphdGlvbk9iamVjdCBkZWZpbmVzIHRoZSBKU09OIG9iamVjdAorICAg
ICAqLworICAgIEJveFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAo
c2VyaWFsaXphdGlvbk9iamVjdCkgeworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKHNlcmlhbGl6
YXRpb25PYmplY3QuZGlyZWN0aW9uMSwgMCwgdGhpcy5kaXJlY3Rpb24xKTsKKyAgICAgICAgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5G
cm9tQXJyYXlUb1JlZihzZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvbjIsIDAsIHRoaXMuZGly
ZWN0aW9uMik7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYoc2VyaWFsaXphdGlvbk9iamVjdC5t
aW5FbWl0Qm94LCAwLCB0aGlzLm1pbkVtaXRCb3gpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVm
KHNlcmlhbGl6YXRpb25PYmplY3QubWF4RW1pdEJveCwgMCwgdGhpcy5tYXhFbWl0Qm94KTsKKyAg
ICB9OworICAgIHJldHVybiBCb3hQYXJ0aWNsZUVtaXR0ZXI7Cit9KCkpOworCisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL1BhcnRpY2xlcy9FbWl0dGVyVHlwZXMvY29uZVBhcnRpY2xlRW1pdHRl
ci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9QYXJ0aWNsZXMvRW1pdHRlclR5cGVzL2NvbmVQYXJ0aWNs
ZUVtaXR0ZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDb25lUGFydGljbGVF
bWl0dGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbmVQYXJ0aWNs
ZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENvbmVQYXJ0aWNsZUVtaXR0ZXI7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVlcENv
cGllciAqLyAiLi9NaXNjL2RlZXBDb3BpZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21h
dGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2Nh
bGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NYXRocy9tYXRoLnNjYWxhciAqLyAiLi9NYXRocy9tYXRoLnNjYWxhci50cyIpOwor
CisKKworLyoqCisgKiBQYXJ0aWNsZSBlbWl0dGVyIGVtaXR0aW5nIHBhcnRpY2xlcyBmcm9tIHRo
ZSBpbnNpZGUgb2YgYSBjb25lLgorICogSXQgZW1pdHMgdGhlIHBhcnRpY2xlcyBhbG9uZ3NpZGUg
dGhlIGNvbmUgdm9sdW1lIGZyb20gdGhlIGJhc2UgdG8gdGhlIHBhcnRpY2xlLgorICogVGhlIGVt
aXNzaW9uIGRpcmVjdGlvbiBtaWdodCBiZSByYW5kb21pemVkLgorICovCit2YXIgQ29uZVBhcnRp
Y2xlRW1pdHRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAg
KiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIENvbmVQYXJ0aWNsZUVtaXR0ZXIKKyAgICAgKiBAcGFy
YW0gcmFkaXVzIHRoZSByYWRpdXMgb2YgdGhlIGVtaXNzaW9uIGNvbmUgKDEgYnkgZGVmYXVsdCkK
KyAgICAgKiBAcGFyYW0gYW5nbGUgdGhlIGNvbmUgYmFzZSBhbmdsZSAoUEkgYnkgZGVmYXVsdCkK
KyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uUmFuZG9taXplciBkZWZpbmVzIGhvdyBtdWNoIHRvIHJh
bmRvbWl6ZSB0aGUgcGFydGljbGUgZGlyZWN0aW9uIFswLTFdIChkZWZhdWx0IGlzIDApCisgICAg
ICovCisgICAgZnVuY3Rpb24gQ29uZVBhcnRpY2xlRW1pdHRlcihyYWRpdXMsIGFuZ2xlLCAKKyAg
ICAvKiogZGVmaW5lcyBob3cgbXVjaCB0byByYW5kb21pemUgdGhlIHBhcnRpY2xlIGRpcmVjdGlv
biBbMC0xXSAoZGVmYXVsdCBpcyAwKSAqLworICAgIGRpcmVjdGlvblJhbmRvbWl6ZXIpIHsKKyAg
ICAgICAgaWYgKHJhZGl1cyA9PT0gdm9pZCAwKSB7IHJhZGl1cyA9IDE7IH0KKyAgICAgICAgaWYg
KGFuZ2xlID09PSB2b2lkIDApIHsgYW5nbGUgPSBNYXRoLlBJOyB9CisgICAgICAgIGlmIChkaXJl
Y3Rpb25SYW5kb21pemVyID09PSB2b2lkIDApIHsgZGlyZWN0aW9uUmFuZG9taXplciA9IDA7IH0K
KyAgICAgICAgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyID0gZGlyZWN0aW9uUmFuZG9taXplcjsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIGluZGljYXRpbmcg
d2hlcmUgb24gdGhlIHJhZGl1cyB0aGUgc3RhcnQgcG9zaXRpb24gc2hvdWxkIGJlIHBpY2tlZCAo
MSA9IGV2ZXJ5d2hlcmUsIDAgPSBvbmx5IHN1cmZhY2UpCisgICAgICAgICAqLworICAgICAgICB0
aGlzLnJhZGl1c1JhbmdlID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0
cyBhIHZhbHVlIGluZGljYXRpbmcgd2hlcmUgb24gdGhlIGhlaWdodCB0aGUgc3RhcnQgcG9zaXRp
b24gc2hvdWxkIGJlIHBpY2tlZCAoMSA9IGV2ZXJ5d2hlcmUsIDAgPSBvbmx5IHN1cmZhY2UpCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmhlaWdodFJhbmdlID0gMTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIGluZGljYXRpbmcgaWYgYWxsIHRoZSBwYXJ0
aWNsZXMgc2hvdWxkIGJlIGVtaXR0ZWQgZnJvbSB0aGUgc3Bhd24gcG9pbnQgb25seSAodGhlIGJh
c2Ugb2YgdGhlIGNvbmUpCisgICAgICAgICAqLworICAgICAgICB0aGlzLmVtaXRGcm9tU3Bhd25Q
b2ludE9ubHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5hbmdsZSA9IGFuZ2xlOworICAgICAgICB0
aGlzLnJhZGl1cyA9IHJhZGl1czsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENv
bmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLCAicmFkaXVzIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBvciBzZXRzIHRoZSByYWRpdXMgb2YgdGhlIGVtaXNzaW9uIGNvbmUKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3JhZGl1czsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICAgICAgICAgIHRoaXMuX3JhZGl1cyA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5f
YnVpbGRIZWlnaHQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KENvbmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLCAiYW5nbGUiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGFuZ2xlIG9mIHRoZSBlbWlzc2lvbiBjb25l
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9hbmdsZTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gdmFsdWU7CisgICAgICAgICAgICB0aGlz
Ll9idWlsZEhlaWdodCgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBDb25lUGFydGljbGVFbWl0
dGVyLnByb3RvdHlwZS5fYnVpbGRIZWlnaHQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0
aGlzLl9hbmdsZSAhPT0gMCkgeworICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5fcmFk
aXVzIC8gTWF0aC50YW4odGhpcy5fYW5nbGUgLyAyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IDE7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgcGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIGRpcmVj
dGlvbiBpcyBjb21wdXRlZCBmb3IgdGhlIGNyZWF0ZWQgcGFydGljbGUuCisgICAgICogQHBhcmFt
IHdvcmxkTWF0cml4IGlzIHRoZSB3b3JsZCBtYXRyaXggb2YgdGhlIHBhcnRpY2xlIHN5c3RlbQor
ICAgICAqIEBwYXJhbSBkaXJlY3Rpb25Ub1VwZGF0ZSBpcyB0aGUgZGlyZWN0aW9uIHZlY3RvciB0
byB1cGRhdGUgd2l0aCB0aGUgcmVzdWx0CisgICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBw
YXJ0aWNsZSB3ZSBhcmUgY29tcHV0ZWQgdGhlIGRpcmVjdGlvbiBmb3IKKyAgICAgKi8KKyAgICBD
b25lUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5zdGFydERpcmVjdGlvbkZ1bmN0aW9uID0gZnVu
Y3Rpb24gKHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1VwZGF0ZSwgcGFydGljbGUpIHsKKyAgICAg
ICAgaWYgKE1hdGguYWJzKE1hdGguY29zKHRoaXMuX2FuZ2xlKSkgPT09IDEuMCkgeworICAgICAg
ICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZl
Y3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWxGcm9tRmxvYXRzVG9SZWYoMCwgMS4wLCAwLCB3b3JsZE1h
dHJpeCwgZGlyZWN0aW9uVG9VcGRhdGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgLy8gbWVhc3VyZSB0aGUgZGlyZWN0aW9uIFZlY3RvciBmcm9tIHRoZSBlbWl0dGVy
IHRvIHRoZSBwYXJ0aWNsZS4KKyAgICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSBwYXJ0aWNsZS5w
b3NpdGlvbi5zdWJ0cmFjdCh3b3JsZE1hdHJpeC5nZXRUcmFuc2xhdGlvbigpKS5ub3JtYWxpemUo
KTsKKyAgICAgICAgICAgIHZhciByYW5kWCA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSgwLCB0aGlzLmRpcmVjdGlv
blJhbmRvbWl6ZXIpOworICAgICAgICAgICAgdmFyIHJhbmRZID0gX01hdGhzX21hdGhfc2NhbGFy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKDAsIHRo
aXMuZGlyZWN0aW9uUmFuZG9taXplcik7CisgICAgICAgICAgICB2YXIgcmFuZFogPSBfTWF0aHNf
bWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0uUmFuZG9t
UmFuZ2UoMCwgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyKTsKKyAgICAgICAgICAgIGRpcmVjdGlv
bi54ICs9IHJhbmRYOworICAgICAgICAgICAgZGlyZWN0aW9uLnkgKz0gcmFuZFk7CisgICAgICAg
ICAgICBkaXJlY3Rpb24ueiArPSByYW5kWjsKKyAgICAgICAgICAgIGRpcmVjdGlvbi5ub3JtYWxp
emUoKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsRnJvbUZsb2F0c1RvUmVmKGRpcmVj
dGlvbi54LCBkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLnosIHdvcmxkTWF0cml4LCBkaXJlY3Rpb25U
b1VwZGF0ZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0
aGUgcGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIHBvc2l0aW9uIGlzIGNvbXB1dGVkIGZvciB0aGUg
Y3JlYXRlZCBwYXJ0aWNsZS4KKyAgICAgKiBAcGFyYW0gd29ybGRNYXRyaXggaXMgdGhlIHdvcmxk
IG1hdHJpeCBvZiB0aGUgcGFydGljbGUgc3lzdGVtCisgICAgICogQHBhcmFtIHBvc2l0aW9uVG9V
cGRhdGUgaXMgdGhlIHBvc2l0aW9uIHZlY3RvciB0byB1cGRhdGUgd2l0aCB0aGUgcmVzdWx0Cisg
ICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBwYXJ0aWNsZSB3ZSBhcmUgY29tcHV0ZWQgdGhl
IHBvc2l0aW9uIGZvcgorICAgICAqLworICAgIENvbmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBl
LnN0YXJ0UG9zaXRpb25GdW5jdGlvbiA9IGZ1bmN0aW9uICh3b3JsZE1hdHJpeCwgcG9zaXRpb25U
b1VwZGF0ZSwgcGFydGljbGUpIHsKKyAgICAgICAgdmFyIHMgPSBfTWF0aHNfbWF0aF9zY2FsYXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0uUmFuZG9tUmFuZ2UoMCwgTWF0
aC5QSSAqIDIpOworICAgICAgICB2YXIgaDsKKyAgICAgICAgaWYgKCF0aGlzLmVtaXRGcm9tU3Bh
d25Qb2ludE9ubHkpIHsKKyAgICAgICAgICAgIGggPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0uUmFuZG9tUmFuZ2UoMCwgdGhpcy5oZWln
aHRSYW5nZSk7CisgICAgICAgICAgICAvLyBCZXR0ZXIgZGlzdHJpYnV0aW9uIGluIGEgY29uZSBh
dCBub3JtYWwgYW5nbGVzLgorICAgICAgICAgICAgaCA9IDEgLSBoICogaDsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGggPSAwLjAwMDE7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHJhZGl1cyA9IHRoaXMuX3JhZGl1cyAtIF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSgwLCB0aGlzLl9yYWRp
dXMgKiB0aGlzLnJhZGl1c1JhbmdlKTsKKyAgICAgICAgcmFkaXVzID0gcmFkaXVzICogaDsKKyAg
ICAgICAgdmFyIHJhbmRYID0gcmFkaXVzICogTWF0aC5zaW4ocyk7CisgICAgICAgIHZhciByYW5k
WiA9IHJhZGl1cyAqIE1hdGguY29zKHMpOworICAgICAgICB2YXIgcmFuZFkgPSBoICogdGhpcy5f
aGVpZ2h0OworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzRnJvbUZsb2F0c1RvUmVmKHJh
bmRYLCByYW5kWSwgcmFuZFosIHdvcmxkTWF0cml4LCBwb3NpdGlvblRvVXBkYXRlKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENsb25lcyB0aGUgY3VycmVudCBlbWl0dGVyIGFuZCByZXR1cm5z
IGEgY29weSBvZiBpdAorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgZW1pdHRlcgorICAgICAqLwor
ICAgIENvbmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgbmV3T25lID0gbmV3IENvbmVQYXJ0aWNsZUVtaXR0ZXIodGhpcy5fcmFkaXVz
LCB0aGlzLl9hbmdsZSwgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyKTsKKyAgICAgICAgX01pc2Nf
ZGVlcENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJEZWVwQ29waWVyIl0uRGVl
cENvcHkodGhpcywgbmV3T25lKTsKKyAgICAgICAgcmV0dXJuIG5ld09uZTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgR1BVUGFydGljbGVTeXN0ZW0gdG8gc2V0dXAgdGhl
IHVwZGF0ZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0gZWZmZWN0IGRlZmluZXMgdGhlIHVwZGF0ZSBz
aGFkZXIKKyAgICAgKi8KKyAgICBDb25lUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5hcHBseVRv
U2hhZGVyID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCJy
YWRpdXMiLCB0aGlzLl9yYWRpdXMsIHRoaXMucmFkaXVzUmFuZ2UpOworICAgICAgICBlZmZlY3Qu
c2V0RmxvYXQoImNvbmVBbmdsZSIsIHRoaXMuX2FuZ2xlKTsKKyAgICAgICAgZWZmZWN0LnNldEZs
b2F0MigiaGVpZ2h0IiwgdGhpcy5faGVpZ2h0LCB0aGlzLmhlaWdodFJhbmdlKTsKKyAgICAgICAg
ZWZmZWN0LnNldEZsb2F0KCJkaXJlY3Rpb25SYW5kb21pemVyIiwgdGhpcy5kaXJlY3Rpb25SYW5k
b21pemVyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgdG8gdXNl
IHRvIHVwZGF0ZSB0aGUgR1BVIHBhcnRpY2xlcyB1cGRhdGUgc2hhZGVyCisgICAgICogQHJldHVy
bnMgYSBzdHJpbmcgY29udGFpbm5nIHRoZSBkZWZpbmVzIHN0cmluZworICAgICAqLworICAgIENv
bmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmdldEVmZmVjdERlZmluZXMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBkZWZpbmVzID0gIiNkZWZpbmUgQ09ORUVNSVRURVIiOworICAgICAg
ICBpZiAodGhpcy5lbWl0RnJvbVNwYXduUG9pbnRPbmx5KSB7CisgICAgICAgICAgICBkZWZpbmVz
ICs9ICJcbiNkZWZpbmUgQ09ORUVNSVRURVJTUEFXTlBPSU5UIjsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZGVmaW5lczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0
cmluZyAiQ29uZVBhcnRpY2xlRW1pdHRlciIKKyAgICAgKiBAcmV0dXJucyBhIHN0cmluZyBjb250
YWluaW5nIHRoZSBjbGFzcyBuYW1lCisgICAgICovCisgICAgQ29uZVBhcnRpY2xlRW1pdHRlci5w
cm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkNv
bmVQYXJ0aWNsZUVtaXR0ZXIiOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0
aGUgcGFydGljbGUgc3lzdGVtIHRvIGEgSlNPTiBvYmplY3QuCisgICAgICogQHJldHVybnMgdGhl
IEpTT04gb2JqZWN0CisgICAgICovCisgICAgQ29uZVBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUu
c2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVj
dCA9IHt9OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnR5cGUgPSB0aGlzLmdldENsYXNz
TmFtZSgpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnJhZGl1cyA9IHRoaXMuX3JhZGl1
czsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hbmdsZSA9IHRoaXMuX2FuZ2xlOworICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvblJhbmRvbWl6ZXIgPSB0aGlzLmRpcmVj
dGlvblJhbmRvbWl6ZXI7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAg
IH07CisgICAgLyoqCisgICAgICogUGFyc2UgcHJvcGVydGllcyBmcm9tIGEgSlNPTiBvYmplY3QK
KyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlvbk9iamVjdCBkZWZpbmVzIHRoZSBKU09OIG9iamVj
dAorICAgICAqLworICAgIENvbmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnBhcnNlID0gZnVu
Y3Rpb24gKHNlcmlhbGl6YXRpb25PYmplY3QpIHsKKyAgICAgICAgdGhpcy5yYWRpdXMgPSBzZXJp
YWxpemF0aW9uT2JqZWN0LnJhZGl1czsKKyAgICAgICAgdGhpcy5hbmdsZSA9IHNlcmlhbGl6YXRp
b25PYmplY3QuYW5nbGU7CisgICAgICAgIHRoaXMuZGlyZWN0aW9uUmFuZG9taXplciA9IHNlcmlh
bGl6YXRpb25PYmplY3QuZGlyZWN0aW9uUmFuZG9taXplcjsKKyAgICB9OworICAgIHJldHVybiBD
b25lUGFydGljbGVFbWl0dGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Q
YXJ0aWNsZXMvRW1pdHRlclR5cGVzL2N5bGluZGVyUGFydGljbGVFbWl0dGVyLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9QYXJ0aWNsZXMvRW1pdHRlclR5cGVzL2N5bGluZGVyUGFydGljbGVFbWl0
dGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEN5bGluZGVyUGFydGlj
bGVFbWl0dGVyLCBDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkN5bGluZGVyUGFydGljbGVFbWl0dGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBDeWxpbmRlclBhcnRpY2xlRW1pdHRlcjsgfSk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGhz
L21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnNjYWxhciAqLyAi
Li9NYXRocy9tYXRoLnNjYWxhci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNj
X2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01pc2MvZGVlcENvcGllciAqLyAiLi9NaXNjL2RlZXBDb3BpZXIudHMi
KTsKKworCisKKworLyoqCisgKiBQYXJ0aWNsZSBlbWl0dGVyIGVtaXR0aW5nIHBhcnRpY2xlcyBm
cm9tIHRoZSBpbnNpZGUgb2YgYSBjeWxpbmRlci4KKyAqIEl0IGVtaXRzIHRoZSBwYXJ0aWNsZXMg
YWxvbmdzaWRlIHRoZSBjeWxpbmRlciByYWRpdXMuIFRoZSBlbWlzc2lvbiBkaXJlY3Rpb24gbWln
aHQgYmUgcmFuZG9taXplZC4KKyAqLwordmFyIEN5bGluZGVyUGFydGljbGVFbWl0dGVyID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICogQ3JlYXRlcyBhIG5ldyBp
bnN0YW5jZSBDeWxpbmRlclBhcnRpY2xlRW1pdHRlcgorICAgICogQHBhcmFtIHJhZGl1cyB0aGUg
cmFkaXVzIG9mIHRoZSBlbWlzc2lvbiBjeWxpbmRlciAoMSBieSBkZWZhdWx0KQorICAgICogQHBh
cmFtIGhlaWdodCB0aGUgaGVpZ2h0IG9mIHRoZSBlbWlzc2lvbiBjeWxpbmRlciAoMSBieSBkZWZh
dWx0KQorICAgICogQHBhcmFtIHJhZGl1c1JhbmdlIHRoZSByYW5nZSBvZiB0aGUgZW1pc3Npb24g
Y3lsaW5kZXIgWzAtMV0gMCBTdXJmYWNlIG9ubHksIDEgRW50aXJlIFJhZGl1cyAoMSBieSBkZWZh
dWx0KQorICAgICogQHBhcmFtIGRpcmVjdGlvblJhbmRvbWl6ZXIgZGVmaW5lcyBob3cgbXVjaCB0
byByYW5kb21pemUgdGhlIHBhcnRpY2xlIGRpcmVjdGlvbiBbMC0xXQorICAgICovCisgICAgZnVu
Y3Rpb24gQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIoCisgICAgLyoqCisgICAgICogVGhlIHJhZGl1
cyBvZiB0aGUgZW1pc3Npb24gY3lsaW5kZXIuCisgICAgICovCisgICAgcmFkaXVzLCAKKyAgICAv
KioKKyAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBlbWlzc2lvbiBjeWxpbmRlci4KKyAgICAgKi8K
KyAgICBoZWlnaHQsIAorICAgIC8qKgorICAgICAqIFRoZSByYW5nZSBvZiBlbWlzc2lvbiBbMC0x
XSAwIFN1cmZhY2Ugb25seSwgMSBFbnRpcmUgUmFkaXVzLgorICAgICAqLworICAgIHJhZGl1c1Jh
bmdlLCAKKyAgICAvKioKKyAgICAgKiBIb3cgbXVjaCB0byByYW5kb21pemUgdGhlIHBhcnRpY2xl
IGRpcmVjdGlvbiBbMC0xXS4KKyAgICAgKi8KKyAgICBkaXJlY3Rpb25SYW5kb21pemVyKSB7Cisg
ICAgICAgIGlmIChyYWRpdXMgPT09IHZvaWQgMCkgeyByYWRpdXMgPSAxOyB9CisgICAgICAgIGlm
IChoZWlnaHQgPT09IHZvaWQgMCkgeyBoZWlnaHQgPSAxOyB9CisgICAgICAgIGlmIChyYWRpdXNS
YW5nZSA9PT0gdm9pZCAwKSB7IHJhZGl1c1JhbmdlID0gMTsgfQorICAgICAgICBpZiAoZGlyZWN0
aW9uUmFuZG9taXplciA9PT0gdm9pZCAwKSB7IGRpcmVjdGlvblJhbmRvbWl6ZXIgPSAwOyB9Cisg
ICAgICAgIHRoaXMucmFkaXVzID0gcmFkaXVzOworICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdo
dDsKKyAgICAgICAgdGhpcy5yYWRpdXNSYW5nZSA9IHJhZGl1c1JhbmdlOworICAgICAgICB0aGlz
LmRpcmVjdGlvblJhbmRvbWl6ZXIgPSBkaXJlY3Rpb25SYW5kb21pemVyOworICAgIH0KKyAgICAv
KioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBhcnRpY2xlIFN5c3RlbSB3aGVuIHRoZSBkaXJlY3Rp
b24gaXMgY29tcHV0ZWQgZm9yIHRoZSBjcmVhdGVkIHBhcnRpY2xlLgorICAgICAqIEBwYXJhbSB3
b3JsZE1hdHJpeCBpcyB0aGUgd29ybGQgbWF0cml4IG9mIHRoZSBwYXJ0aWNsZSBzeXN0ZW0KKyAg
ICAgKiBAcGFyYW0gZGlyZWN0aW9uVG9VcGRhdGUgaXMgdGhlIGRpcmVjdGlvbiB2ZWN0b3IgdG8g
dXBkYXRlIHdpdGggdGhlIHJlc3VsdAorICAgICAqIEBwYXJhbSBwYXJ0aWNsZSBpcyB0aGUgcGFy
dGljbGUgd2UgYXJlIGNvbXB1dGVkIHRoZSBkaXJlY3Rpb24gZm9yCisgICAgICovCisgICAgQ3ls
aW5kZXJQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnN0YXJ0RGlyZWN0aW9uRnVuY3Rpb24gPSBm
dW5jdGlvbiAod29ybGRNYXRyaXgsIGRpcmVjdGlvblRvVXBkYXRlLCBwYXJ0aWNsZSkgeworICAg
ICAgICB2YXIgZGlyZWN0aW9uID0gcGFydGljbGUucG9zaXRpb24uc3VidHJhY3Qod29ybGRNYXRy
aXguZ2V0VHJhbnNsYXRpb24oKSkubm9ybWFsaXplKCk7CisgICAgICAgIHZhciByYW5kWSA9IF9N
YXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5S
YW5kb21SYW5nZSgtdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyIC8gMiwgdGhpcy5kaXJlY3Rpb25S
YW5kb21pemVyIC8gMik7CisgICAgICAgIHZhciBhbmdsZSA9IE1hdGguYXRhbjIoZGlyZWN0aW9u
LngsIGRpcmVjdGlvbi56KTsKKyAgICAgICAgYW5nbGUgKz0gX01hdGhzX21hdGhfc2NhbGFyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKC1NYXRoLlBJ
IC8gMiwgTWF0aC5QSSAvIDIpICogdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyOworICAgICAgICBk
aXJlY3Rpb24ueSA9IHJhbmRZOyAvLyBzZXQgZGlyZWN0aW9uIHkgdG8gcmFuZCB5IHRvIG1pcnJv
ciBub3JtYWwgb2YgY3lsaW5kZXIgc3VyZmFjZQorICAgICAgICBkaXJlY3Rpb24ueCA9IE1hdGgu
c2luKGFuZ2xlKTsKKyAgICAgICAgZGlyZWN0aW9uLnogPSBNYXRoLmNvcyhhbmdsZSk7CisgICAg
ICAgIGRpcmVjdGlvbi5ub3JtYWxpemUoKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWxGcm9t
RmxvYXRzVG9SZWYoZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueiwgd29ybGRN
YXRyaXgsIGRpcmVjdGlvblRvVXBkYXRlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxl
ZCBieSB0aGUgcGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIHBvc2l0aW9uIGlzIGNvbXB1dGVkIGZv
ciB0aGUgY3JlYXRlZCBwYXJ0aWNsZS4KKyAgICAgKiBAcGFyYW0gd29ybGRNYXRyaXggaXMgdGhl
IHdvcmxkIG1hdHJpeCBvZiB0aGUgcGFydGljbGUgc3lzdGVtCisgICAgICogQHBhcmFtIHBvc2l0
aW9uVG9VcGRhdGUgaXMgdGhlIHBvc2l0aW9uIHZlY3RvciB0byB1cGRhdGUgd2l0aCB0aGUgcmVz
dWx0CisgICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBwYXJ0aWNsZSB3ZSBhcmUgY29tcHV0
ZWQgdGhlIHBvc2l0aW9uIGZvcgorICAgICAqLworICAgIEN5bGluZGVyUGFydGljbGVFbWl0dGVy
LnByb3RvdHlwZS5zdGFydFBvc2l0aW9uRnVuY3Rpb24gPSBmdW5jdGlvbiAod29ybGRNYXRyaXgs
IHBvc2l0aW9uVG9VcGRhdGUsIHBhcnRpY2xlKSB7CisgICAgICAgIHZhciB5UG9zID0gX01hdGhz
X21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRv
bVJhbmdlKC10aGlzLmhlaWdodCAvIDIsIHRoaXMuaGVpZ2h0IC8gMik7CisgICAgICAgIHZhciBh
bmdsZSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJT
Y2FsYXIiXS5SYW5kb21SYW5nZSgwLCAyICogTWF0aC5QSSk7CisgICAgICAgIC8vIFBpY2sgYSBw
cm9wZXJseSBkaXN0cmlidXRlZCBwb2ludCB3aXRoaW4gdGhlIGNpcmNsZSBodHRwczovL3Byb2dy
YW1taW5nLmd1aWRlL3JhbmRvbS1wb2ludC13aXRoaW4tY2lyY2xlLmh0bWwKKyAgICAgICAgdmFy
IHJhZGl1c0Rpc3RyaWJ1dGlvbiA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSgoMSAtIHRoaXMucmFkaXVzUmFuZ2Up
ICogKDEgLSB0aGlzLnJhZGl1c1JhbmdlKSwgMSk7CisgICAgICAgIHZhciBwb3NpdGlvblJhZGl1
cyA9IE1hdGguc3FydChyYWRpdXNEaXN0cmlidXRpb24pICogdGhpcy5yYWRpdXM7CisgICAgICAg
IHZhciB4UG9zID0gcG9zaXRpb25SYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSk7CisgICAgICAgIHZh
ciB6UG9zID0gcG9zaXRpb25SYWRpdXMgKiBNYXRoLnNpbihhbmdsZSk7CisgICAgICAgIF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJh
bnNmb3JtQ29vcmRpbmF0ZXNGcm9tRmxvYXRzVG9SZWYoeFBvcywgeVBvcywgelBvcywgd29ybGRN
YXRyaXgsIHBvc2l0aW9uVG9VcGRhdGUpOworICAgIH07CisgICAgLyoqCisgICAgICogQ2xvbmVz
IHRoZSBjdXJyZW50IGVtaXR0ZXIgYW5kIHJldHVybnMgYSBjb3B5IG9mIGl0CisgICAgICogQHJl
dHVybnMgdGhlIG5ldyBlbWl0dGVyCisgICAgICovCisgICAgQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0
ZXIucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbmV3T25lID0g
bmV3IEN5bGluZGVyUGFydGljbGVFbWl0dGVyKHRoaXMucmFkaXVzLCB0aGlzLmRpcmVjdGlvblJh
bmRvbWl6ZXIpOworICAgICAgICBfTWlzY19kZWVwQ29waWVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIkRlZXBDb3BpZXIiXS5EZWVwQ29weSh0aGlzLCBuZXdPbmUpOworICAgICAgICBy
ZXR1cm4gbmV3T25lOworICAgIH07CisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBHUFVQ
YXJ0aWNsZVN5c3RlbSB0byBzZXR1cCB0aGUgdXBkYXRlIHNoYWRlcgorICAgICAqIEBwYXJhbSBl
ZmZlY3QgZGVmaW5lcyB0aGUgdXBkYXRlIHNoYWRlcgorICAgICAqLworICAgIEN5bGluZGVyUGFy
dGljbGVFbWl0dGVyLnByb3RvdHlwZS5hcHBseVRvU2hhZGVyID0gZnVuY3Rpb24gKGVmZmVjdCkg
eworICAgICAgICBlZmZlY3Quc2V0RmxvYXQoInJhZGl1cyIsIHRoaXMucmFkaXVzKTsKKyAgICAg
ICAgZWZmZWN0LnNldEZsb2F0KCJoZWlnaHQiLCB0aGlzLmhlaWdodCk7CisgICAgICAgIGVmZmVj
dC5zZXRGbG9hdCgicmFkaXVzUmFuZ2UiLCB0aGlzLnJhZGl1c1JhbmdlKTsKKyAgICAgICAgZWZm
ZWN0LnNldEZsb2F0KCJkaXJlY3Rpb25SYW5kb21pemVyIiwgdGhpcy5kaXJlY3Rpb25SYW5kb21p
emVyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgdG8gdXNlIHRv
IHVwZGF0ZSB0aGUgR1BVIHBhcnRpY2xlcyB1cGRhdGUgc2hhZGVyCisgICAgICogQHJldHVybnMg
YSBzdHJpbmcgY29udGFpbm5nIHRoZSBkZWZpbmVzIHN0cmluZworICAgICAqLworICAgIEN5bGlu
ZGVyUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5nZXRFZmZlY3REZWZpbmVzID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gIiNkZWZpbmUgQ1lMSU5ERVJFTUlUVEVSIjsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyAiQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0
ZXIiCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2xhc3MgbmFtZQor
ICAgICAqLworICAgIEN5bGluZGVyUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5nZXRDbGFzc05h
bWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0
ZXIiOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgcGFydGljbGUgc3lz
dGVtIHRvIGEgSlNPTiBvYmplY3QuCisgICAgICogQHJldHVybnMgdGhlIEpTT04gb2JqZWN0Cisg
ICAgICovCisgICAgQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnNlcmlhbGl6ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50eXBlID0gdGhpcy5nZXRDbGFzc05hbWUoKTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5yYWRpdXMgPSB0aGlzLnJhZGl1czsKKyAgICAgICAg
c2VyaWFsaXphdGlvbk9iamVjdC5oZWlnaHQgPSB0aGlzLmhlaWdodDsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5yYWRpdXNSYW5nZSA9IHRoaXMucmFkaXVzUmFuZ2U7CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QuZGlyZWN0aW9uUmFuZG9taXplciA9IHRoaXMuZGlyZWN0aW9uUmFu
ZG9taXplcjsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBQYXJzZSBwcm9wZXJ0aWVzIGZyb20gYSBKU09OIG9iamVjdAorICAgICAq
IEBwYXJhbSBzZXJpYWxpemF0aW9uT2JqZWN0IGRlZmluZXMgdGhlIEpTT04gb2JqZWN0CisgICAg
ICovCisgICAgQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rp
b24gKHNlcmlhbGl6YXRpb25PYmplY3QpIHsKKyAgICAgICAgdGhpcy5yYWRpdXMgPSBzZXJpYWxp
emF0aW9uT2JqZWN0LnJhZGl1czsKKyAgICAgICAgdGhpcy5oZWlnaHQgPSBzZXJpYWxpemF0aW9u
T2JqZWN0LmhlaWdodDsKKyAgICAgICAgdGhpcy5yYWRpdXNSYW5nZSA9IHNlcmlhbGl6YXRpb25P
YmplY3QucmFkaXVzUmFuZ2U7CisgICAgICAgIHRoaXMuZGlyZWN0aW9uUmFuZG9taXplciA9IHNl
cmlhbGl6YXRpb25PYmplY3QuZGlyZWN0aW9uUmFuZG9taXplcjsKKyAgICB9OworICAgIHJldHVy
biBDeWxpbmRlclBhcnRpY2xlRW1pdHRlcjsKK30oKSk7CisKKy8qKgorICogUGFydGljbGUgZW1p
dHRlciBlbWl0dGluZyBwYXJ0aWNsZXMgZnJvbSB0aGUgaW5zaWRlIG9mIGEgY3lsaW5kZXIuCisg
KiBJdCBlbWl0cyB0aGUgcGFydGljbGVzIHJhbmRvbWx5IGJldHdlZW4gdHdvIHZlY3RvcnMuCisg
Ki8KK3ZhciBDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZXh0ZW5kcyJdKEN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIsIF9zdXBlcik7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBDeWxpbmRlckRpcmVjdGVk
UGFydGljbGVFbWl0dGVyCisgICAgICogQHBhcmFtIHJhZGl1cyB0aGUgcmFkaXVzIG9mIHRoZSBl
bWlzc2lvbiBjeWxpbmRlciAoMSBieSBkZWZhdWx0KQorICAgICAqIEBwYXJhbSBoZWlnaHQgdGhl
IGhlaWdodCBvZiB0aGUgZW1pc3Npb24gY3lsaW5kZXIgKDEgYnkgZGVmYXVsdCkKKyAgICAgKiBA
cGFyYW0gcmFkaXVzUmFuZ2UgdGhlIHJhbmdlIG9mIHRoZSBlbWlzc2lvbiBjeWxpbmRlciBbMC0x
XSAwIFN1cmZhY2Ugb25seSwgMSBFbnRpcmUgUmFkaXVzICgxIGJ5IGRlZmF1bHQpCisgICAgICog
QHBhcmFtIGRpcmVjdGlvbjEgdGhlIG1pbiBsaW1pdCBvZiB0aGUgZW1pc3Npb24gZGlyZWN0aW9u
ICh1cCB2ZWN0b3IgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uMiB0aGUgbWF4
IGxpbWl0IG9mIHRoZSBlbWlzc2lvbiBkaXJlY3Rpb24gKHVwIHZlY3RvciBieSBkZWZhdWx0KQor
ICAgICAqLworICAgIGZ1bmN0aW9uIEN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIocmFk
aXVzLCBoZWlnaHQsIHJhZGl1c1JhbmdlLCAKKyAgICAvKioKKyAgICAgKiBUaGUgbWluIGxpbWl0
IG9mIHRoZSBlbWlzc2lvbiBkaXJlY3Rpb24uCisgICAgICovCisgICAgZGlyZWN0aW9uMSwgCisg
ICAgLyoqCisgICAgICogVGhlIG1heCBsaW1pdCBvZiB0aGUgZW1pc3Npb24gZGlyZWN0aW9uLgor
ICAgICAqLworICAgIGRpcmVjdGlvbjIpIHsKKyAgICAgICAgaWYgKHJhZGl1cyA9PT0gdm9pZCAw
KSB7IHJhZGl1cyA9IDE7IH0KKyAgICAgICAgaWYgKGhlaWdodCA9PT0gdm9pZCAwKSB7IGhlaWdo
dCA9IDE7IH0KKyAgICAgICAgaWYgKHJhZGl1c1JhbmdlID09PSB2b2lkIDApIHsgcmFkaXVzUmFu
Z2UgPSAxOyB9CisgICAgICAgIGlmIChkaXJlY3Rpb24xID09PSB2b2lkIDApIHsgZGlyZWN0aW9u
MSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVjdG9yMyJdKDAsIDEsIDApOyB9CisgICAgICAgIGlmIChkaXJlY3Rpb24yID09PSB2b2lkIDAp
IHsgZGlyZWN0aW9uMiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siVmVjdG9yMyJdKDAsIDEsIDApOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9z
dXBlci5jYWxsKHRoaXMsIHJhZGl1cywgaGVpZ2h0LCByYWRpdXNSYW5nZSkgfHwgdGhpczsKKyAg
ICAgICAgX3RoaXMuZGlyZWN0aW9uMSA9IGRpcmVjdGlvbjE7CisgICAgICAgIF90aGlzLmRpcmVj
dGlvbjIgPSBkaXJlY3Rpb24yOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8q
KgorICAgICAqIENhbGxlZCBieSB0aGUgcGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIGRpcmVjdGlv
biBpcyBjb21wdXRlZCBmb3IgdGhlIGNyZWF0ZWQgcGFydGljbGUuCisgICAgICogQHBhcmFtIHdv
cmxkTWF0cml4IGlzIHRoZSB3b3JsZCBtYXRyaXggb2YgdGhlIHBhcnRpY2xlIHN5c3RlbQorICAg
ICAqIEBwYXJhbSBkaXJlY3Rpb25Ub1VwZGF0ZSBpcyB0aGUgZGlyZWN0aW9uIHZlY3RvciB0byB1
cGRhdGUgd2l0aCB0aGUgcmVzdWx0CisgICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBwYXJ0
aWNsZSB3ZSBhcmUgY29tcHV0ZWQgdGhlIGRpcmVjdGlvbiBmb3IKKyAgICAgKi8KKyAgICBDeWxp
bmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5zdGFydERpcmVjdGlvbkZ1bmN0
aW9uID0gZnVuY3Rpb24gKHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1VwZGF0ZSwgcGFydGljbGUp
IHsKKyAgICAgICAgdmFyIHJhbmRYID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKHRoaXMuZGlyZWN0aW9uMS54LCB0
aGlzLmRpcmVjdGlvbjIueCk7CisgICAgICAgIHZhciByYW5kWSA9IF9NYXRoc19tYXRoX3NjYWxh
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSh0aGlz
LmRpcmVjdGlvbjEueSwgdGhpcy5kaXJlY3Rpb24yLnkpOworICAgICAgICB2YXIgcmFuZFogPSBf
TWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0u
UmFuZG9tUmFuZ2UodGhpcy5kaXJlY3Rpb24xLnosIHRoaXMuZGlyZWN0aW9uMi56KTsKKyAgICAg
ICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3Rv
cjMiXS5UcmFuc2Zvcm1Ob3JtYWxGcm9tRmxvYXRzVG9SZWYocmFuZFgsIHJhbmRZLCByYW5kWiwg
d29ybGRNYXRyaXgsIGRpcmVjdGlvblRvVXBkYXRlKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENsb25lcyB0aGUgY3VycmVudCBlbWl0dGVyIGFuZCByZXR1cm5zIGEgY29weSBvZiBpdAorICAg
ICAqIEByZXR1cm5zIHRoZSBuZXcgZW1pdHRlcgorICAgICAqLworICAgIEN5bGluZGVyRGlyZWN0
ZWRQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgbmV3T25lID0gbmV3IEN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIodGhpcy5y
YWRpdXMsIHRoaXMuaGVpZ2h0LCB0aGlzLnJhZGl1c1JhbmdlLCB0aGlzLmRpcmVjdGlvbjEsIHRo
aXMuZGlyZWN0aW9uMik7CisgICAgICAgIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHRoaXMsIG5ld09uZSk7CisgICAg
ICAgIHJldHVybiBuZXdPbmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhl
IEdQVVBhcnRpY2xlU3lzdGVtIHRvIHNldHVwIHRoZSB1cGRhdGUgc2hhZGVyCisgICAgICogQHBh
cmFtIGVmZmVjdCBkZWZpbmVzIHRoZSB1cGRhdGUgc2hhZGVyCisgICAgICovCisgICAgQ3lsaW5k
ZXJEaXJlY3RlZFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuYXBwbHlUb1NoYWRlciA9IGZ1bmN0
aW9uIChlZmZlY3QpIHsKKyAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJyYWRpdXMiLCB0aGlzLnJh
ZGl1cyk7CisgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiaGVpZ2h0IiwgdGhpcy5oZWlnaHQpOwor
ICAgICAgICBlZmZlY3Quc2V0RmxvYXQoInJhZGl1c1JhbmdlIiwgdGhpcy5yYWRpdXNSYW5nZSk7
CisgICAgICAgIGVmZmVjdC5zZXRWZWN0b3IzKCJkaXJlY3Rpb24xIiwgdGhpcy5kaXJlY3Rpb24x
KTsKKyAgICAgICAgZWZmZWN0LnNldFZlY3RvcjMoImRpcmVjdGlvbjIiLCB0aGlzLmRpcmVjdGlv
bjIpOworICAgIH07CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHN0cmluZyB0byB1c2UgdG8g
dXBkYXRlIHRoZSBHUFUgcGFydGljbGVzIHVwZGF0ZSBzaGFkZXIKKyAgICAgKiBAcmV0dXJucyBh
IHN0cmluZyBjb250YWlubmcgdGhlIGRlZmluZXMgc3RyaW5nCisgICAgICovCisgICAgQ3lsaW5k
ZXJEaXJlY3RlZFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuZ2V0RWZmZWN0RGVmaW5lcyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICIjZGVmaW5lIENZTElOREVSRU1JVFRFUlxuI2Rl
ZmluZSBESVJFQ1RFRENZTElOREVSRU1JVFRFUiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIHRoZSBzdHJpbmcgIkN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiCisgICAg
ICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2xhc3MgbmFtZQorICAgICAqLwor
ICAgIEN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmdldENsYXNzTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJDeWxpbmRlckRpcmVjdGVkUGFydGlj
bGVFbWl0dGVyIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIHBhcnRp
Y2xlIHN5c3RlbSB0byBhIEpTT04gb2JqZWN0LgorICAgICAqIEByZXR1cm5zIHRoZSBKU09OIG9i
amVjdAorICAgICAqLworICAgIEN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIucHJvdG90
eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25P
YmplY3QgPSBfc3VwZXIucHJvdG90eXBlLnNlcmlhbGl6ZS5jYWxsKHRoaXMpOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvbjEgPSB0aGlzLmRpcmVjdGlvbjEuYXNBcnJheSgp
OworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvbjIgPSB0aGlzLmRpcmVjdGlv
bjIuYXNBcnJheSgpOworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFBhcnNlIHByb3BlcnRpZXMgZnJvbSBhIEpTT04gb2JqZWN0Cisg
ICAgICogQHBhcmFtIHNlcmlhbGl6YXRpb25PYmplY3QgZGVmaW5lcyB0aGUgSlNPTiBvYmplY3QK
KyAgICAgKi8KKyAgICBDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5w
YXJzZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0KSB7CisgICAgICAgIF9zdXBlci5w
cm90b3R5cGUucGFyc2UuY2FsbCh0aGlzLCBzZXJpYWxpemF0aW9uT2JqZWN0KTsKKyAgICAgICAg
dGhpcy5kaXJlY3Rpb24xLmNvcHlGcm9tKHNlcmlhbGl6YXRpb25PYmplY3QuZGlyZWN0aW9uMSk7
CisgICAgICAgIHRoaXMuZGlyZWN0aW9uMi5jb3B5RnJvbShzZXJpYWxpemF0aW9uT2JqZWN0LmRp
cmVjdGlvbjIpOworICAgIH07CisgICAgcmV0dXJuIEN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVt
aXR0ZXI7Cit9KEN5bGluZGVyUGFydGljbGVFbWl0dGVyKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vUGFydGljbGVzL0VtaXR0ZXJUeXBlcy9oZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRl
ci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGFydGljbGVzL0VtaXR0ZXJUeXBlcy9oZW1p
c3BoZXJpY1BhcnRpY2xlRW1pdHRlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gSGVtaXNwaGVyaWNQYXJ0aWNsZUVtaXR0ZXI7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVlcENvcGllciAqLyAiLi9NaXNj
L2RlZXBDb3BpZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9t
YXRoLnNjYWxhciAqLyAiLi9NYXRocy9tYXRoLnNjYWxhci50cyIpOworCisKKworLyoqCisgKiBQ
YXJ0aWNsZSBlbWl0dGVyIGVtaXR0aW5nIHBhcnRpY2xlcyBmcm9tIHRoZSBpbnNpZGUgb2YgYSBo
ZW1pc3BoZXJlLgorICogSXQgZW1pdHMgdGhlIHBhcnRpY2xlcyBhbG9uZ3NpZGUgdGhlIGhlbWlz
cGhlcmUgcmFkaXVzLiBUaGUgZW1pc3Npb24gZGlyZWN0aW9uIG1pZ2h0IGJlIHJhbmRvbWl6ZWQu
CisgKi8KK3ZhciBIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgSGVtaXNw
aGVyaWNQYXJ0aWNsZUVtaXR0ZXIKKyAgICAqIEBwYXJhbSByYWRpdXMgdGhlIHJhZGl1cyBvZiB0
aGUgZW1pc3Npb24gaGVtaXNwaGVyZSAoMSBieSBkZWZhdWx0KQorICAgICogQHBhcmFtIHJhZGl1
c1JhbmdlIHRoZSByYW5nZSBvZiB0aGUgZW1pc3Npb24gaGVtaXNwaGVyZSBbMC0xXSAwIFN1cmZh
Y2Ugb25seSwgMSBFbnRpcmUgUmFkaXVzICgxIGJ5IGRlZmF1bHQpCisgICAgKiBAcGFyYW0gZGly
ZWN0aW9uUmFuZG9taXplciBkZWZpbmVzIGhvdyBtdWNoIHRvIHJhbmRvbWl6ZSB0aGUgcGFydGlj
bGUgZGlyZWN0aW9uIFswLTFdCisgICAgKi8KKyAgICBmdW5jdGlvbiBIZW1pc3BoZXJpY1BhcnRp
Y2xlRW1pdHRlcigKKyAgICAvKioKKyAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlbWlzc2lvbiBo
ZW1pc3BoZXJlLgorICAgICAqLworICAgIHJhZGl1cywgCisgICAgLyoqCisgICAgICogVGhlIHJh
bmdlIG9mIGVtaXNzaW9uIFswLTFdIDAgU3VyZmFjZSBvbmx5LCAxIEVudGlyZSBSYWRpdXMuCisg
ICAgICovCisgICAgcmFkaXVzUmFuZ2UsIAorICAgIC8qKgorICAgICAqIEhvdyBtdWNoIHRvIHJh
bmRvbWl6ZSB0aGUgcGFydGljbGUgZGlyZWN0aW9uIFswLTFdLgorICAgICAqLworICAgIGRpcmVj
dGlvblJhbmRvbWl6ZXIpIHsKKyAgICAgICAgaWYgKHJhZGl1cyA9PT0gdm9pZCAwKSB7IHJhZGl1
cyA9IDE7IH0KKyAgICAgICAgaWYgKHJhZGl1c1JhbmdlID09PSB2b2lkIDApIHsgcmFkaXVzUmFu
Z2UgPSAxOyB9CisgICAgICAgIGlmIChkaXJlY3Rpb25SYW5kb21pemVyID09PSB2b2lkIDApIHsg
ZGlyZWN0aW9uUmFuZG9taXplciA9IDA7IH0KKyAgICAgICAgdGhpcy5yYWRpdXMgPSByYWRpdXM7
CisgICAgICAgIHRoaXMucmFkaXVzUmFuZ2UgPSByYWRpdXNSYW5nZTsKKyAgICAgICAgdGhpcy5k
aXJlY3Rpb25SYW5kb21pemVyID0gZGlyZWN0aW9uUmFuZG9taXplcjsKKyAgICB9CisgICAgLyoq
CisgICAgICogQ2FsbGVkIGJ5IHRoZSBwYXJ0aWNsZSBTeXN0ZW0gd2hlbiB0aGUgZGlyZWN0aW9u
IGlzIGNvbXB1dGVkIGZvciB0aGUgY3JlYXRlZCBwYXJ0aWNsZS4KKyAgICAgKiBAcGFyYW0gd29y
bGRNYXRyaXggaXMgdGhlIHdvcmxkIG1hdHJpeCBvZiB0aGUgcGFydGljbGUgc3lzdGVtCisgICAg
ICogQHBhcmFtIGRpcmVjdGlvblRvVXBkYXRlIGlzIHRoZSBkaXJlY3Rpb24gdmVjdG9yIHRvIHVw
ZGF0ZSB3aXRoIHRoZSByZXN1bHQKKyAgICAgKiBAcGFyYW0gcGFydGljbGUgaXMgdGhlIHBhcnRp
Y2xlIHdlIGFyZSBjb21wdXRlZCB0aGUgZGlyZWN0aW9uIGZvcgorICAgICAqLworICAgIEhlbWlz
cGhlcmljUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5zdGFydERpcmVjdGlvbkZ1bmN0aW9uID0g
ZnVuY3Rpb24gKHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1VwZGF0ZSwgcGFydGljbGUpIHsKKyAg
ICAgICAgdmFyIGRpcmVjdGlvbiA9IHBhcnRpY2xlLnBvc2l0aW9uLnN1YnRyYWN0KHdvcmxkTWF0
cml4LmdldFRyYW5zbGF0aW9uKCkpLm5vcm1hbGl6ZSgpOworICAgICAgICB2YXIgcmFuZFggPSBf
TWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0u
UmFuZG9tUmFuZ2UoMCwgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyKTsKKyAgICAgICAgdmFyIHJh
bmRZID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNj
YWxhciJdLlJhbmRvbVJhbmdlKDAsIHRoaXMuZGlyZWN0aW9uUmFuZG9taXplcik7CisgICAgICAg
IHZhciByYW5kWiA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSgwLCB0aGlzLmRpcmVjdGlvblJhbmRvbWl6ZXIpOwor
ICAgICAgICBkaXJlY3Rpb24ueCArPSByYW5kWDsKKyAgICAgICAgZGlyZWN0aW9uLnkgKz0gcmFu
ZFk7CisgICAgICAgIGRpcmVjdGlvbi56ICs9IHJhbmRaOworICAgICAgICBkaXJlY3Rpb24ubm9y
bWFsaXplKCk7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsRnJvbUZsb2F0c1RvUmVmKGRpcmVj
dGlvbi54LCBkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLnosIHdvcmxkTWF0cml4LCBkaXJlY3Rpb25U
b1VwZGF0ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBhcnRpY2xl
IFN5c3RlbSB3aGVuIHRoZSBwb3NpdGlvbiBpcyBjb21wdXRlZCBmb3IgdGhlIGNyZWF0ZWQgcGFy
dGljbGUuCisgICAgICogQHBhcmFtIHdvcmxkTWF0cml4IGlzIHRoZSB3b3JsZCBtYXRyaXggb2Yg
dGhlIHBhcnRpY2xlIHN5c3RlbQorICAgICAqIEBwYXJhbSBwb3NpdGlvblRvVXBkYXRlIGlzIHRo
ZSBwb3NpdGlvbiB2ZWN0b3IgdG8gdXBkYXRlIHdpdGggdGhlIHJlc3VsdAorICAgICAqIEBwYXJh
bSBwYXJ0aWNsZSBpcyB0aGUgcGFydGljbGUgd2UgYXJlIGNvbXB1dGVkIHRoZSBwb3NpdGlvbiBm
b3IKKyAgICAgKi8KKyAgICBIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuc3Rh
cnRQb3NpdGlvbkZ1bmN0aW9uID0gZnVuY3Rpb24gKHdvcmxkTWF0cml4LCBwb3NpdGlvblRvVXBk
YXRlLCBwYXJ0aWNsZSkgeworICAgICAgICB2YXIgcmFuZFJhZGl1cyA9IHRoaXMucmFkaXVzIC0g
X01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJd
LlJhbmRvbVJhbmdlKDAsIHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXNSYW5nZSk7CisgICAgICAg
IHZhciB2ID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlNjYWxhciJdLlJhbmRvbVJhbmdlKDAsIDEuMCk7CisgICAgICAgIHZhciBwaGkgPSBfTWF0aHNf
bWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2NhbGFyIl0uUmFuZG9t
UmFuZ2UoMCwgMiAqIE1hdGguUEkpOworICAgICAgICB2YXIgdGhldGEgPSBNYXRoLmFjb3MoMiAq
IHYgLSAxKTsKKyAgICAgICAgdmFyIHJhbmRYID0gcmFuZFJhZGl1cyAqIE1hdGguY29zKHBoaSkg
KiBNYXRoLnNpbih0aGV0YSk7CisgICAgICAgIHZhciByYW5kWSA9IHJhbmRSYWRpdXMgKiBNYXRo
LmNvcyh0aGV0YSk7CisgICAgICAgIHZhciByYW5kWiA9IHJhbmRSYWRpdXMgKiBNYXRoLnNpbihw
aGkpICogTWF0aC5zaW4odGhldGEpOworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzRnJv
bUZsb2F0c1RvUmVmKHJhbmRYLCBNYXRoLmFicyhyYW5kWSksIHJhbmRaLCB3b3JsZE1hdHJpeCwg
cG9zaXRpb25Ub1VwZGF0ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhlIGN1
cnJlbnQgZW1pdHRlciBhbmQgcmV0dXJucyBhIGNvcHkgb2YgaXQKKyAgICAgKiBAcmV0dXJucyB0
aGUgbmV3IGVtaXR0ZXIKKyAgICAgKi8KKyAgICBIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlci5w
cm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBuZXdPbmUgPSBuZXcg
SGVtaXNwaGVyaWNQYXJ0aWNsZUVtaXR0ZXIodGhpcy5yYWRpdXMsIHRoaXMuZGlyZWN0aW9uUmFu
ZG9taXplcik7CisgICAgICAgIF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHRoaXMsIG5ld09uZSk7CisgICAgICAgIHJl
dHVybiBuZXdPbmU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIEdQVVBh
cnRpY2xlU3lzdGVtIHRvIHNldHVwIHRoZSB1cGRhdGUgc2hhZGVyCisgICAgICogQHBhcmFtIGVm
ZmVjdCBkZWZpbmVzIHRoZSB1cGRhdGUgc2hhZGVyCisgICAgICovCisgICAgSGVtaXNwaGVyaWNQ
YXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmFwcGx5VG9TaGFkZXIgPSBmdW5jdGlvbiAoZWZmZWN0
KSB7CisgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgicmFkaXVzIiwgdGhpcy5yYWRpdXMpOworICAg
ICAgICBlZmZlY3Quc2V0RmxvYXQoInJhZGl1c1JhbmdlIiwgdGhpcy5yYWRpdXNSYW5nZSk7Cisg
ICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiZGlyZWN0aW9uUmFuZG9taXplciIsIHRoaXMuZGlyZWN0
aW9uUmFuZG9taXplcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5n
IHRvIHVzZSB0byB1cGRhdGUgdGhlIEdQVSBwYXJ0aWNsZXMgdXBkYXRlIHNoYWRlcgorICAgICAq
IEByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5uZyB0aGUgZGVmaW5lcyBzdHJpbmcKKyAgICAgKi8K
KyAgICBIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuZ2V0RWZmZWN0RGVmaW5l
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICIjZGVmaW5lIEhFTUlTUEhFUklDRU1J
VFRFUiI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgIkhlbWlz
cGhlcmljUGFydGljbGVFbWl0dGVyIgorICAgICAqIEByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRl
ci5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
IkhlbWlzcGhlcmljUGFydGljbGVFbWl0dGVyIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNl
cmlhbGl6ZXMgdGhlIHBhcnRpY2xlIHN5c3RlbSB0byBhIEpTT04gb2JqZWN0LgorICAgICAqIEBy
ZXR1cm5zIHRoZSBKU09OIG9iamVjdAorICAgICAqLworICAgIEhlbWlzcGhlcmljUGFydGljbGVF
bWl0dGVyLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBz
ZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudHlw
ZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmFk
aXVzID0gdGhpcy5yYWRpdXM7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmFkaXVzUmFu
Z2UgPSB0aGlzLnJhZGl1c1JhbmdlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVj
dGlvblJhbmRvbWl6ZXIgPSB0aGlzLmRpcmVjdGlvblJhbmRvbWl6ZXI7CisgICAgICAgIHJldHVy
biBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2UgcHJv
cGVydGllcyBmcm9tIGEgSlNPTiBvYmplY3QKKyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlvbk9i
amVjdCBkZWZpbmVzIHRoZSBKU09OIG9iamVjdAorICAgICAqLworICAgIEhlbWlzcGhlcmljUGFy
dGljbGVFbWl0dGVyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2Jq
ZWN0KSB7CisgICAgICAgIHRoaXMucmFkaXVzID0gc2VyaWFsaXphdGlvbk9iamVjdC5yYWRpdXM7
CisgICAgICAgIHRoaXMucmFkaXVzUmFuZ2UgPSBzZXJpYWxpemF0aW9uT2JqZWN0LnJhZGl1c1Jh
bmdlOworICAgICAgICB0aGlzLmRpcmVjdGlvblJhbmRvbWl6ZXIgPSBzZXJpYWxpemF0aW9uT2Jq
ZWN0LmRpcmVjdGlvblJhbmRvbWl6ZXI7CisgICAgfTsKKyAgICByZXR1cm4gSGVtaXNwaGVyaWNQ
YXJ0aWNsZUVtaXR0ZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1BhcnRp
Y2xlcy9FbWl0dGVyVHlwZXMvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1BhcnRpY2xlcy9FbWl0dGVyVHlwZXMvaW5k
ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogQm94UGFydGljbGVFbWl0dGVyLCBDb25lUGFydGljbGVF
bWl0dGVyLCBDeWxpbmRlclBhcnRpY2xlRW1pdHRlciwgQ3lsaW5kZXJEaXJlY3RlZFBhcnRpY2xl
RW1pdHRlciwgSGVtaXNwaGVyaWNQYXJ0aWNsZUVtaXR0ZXIsIFBvaW50UGFydGljbGVFbWl0dGVy
LCBTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIsIFNwaGVyZURpcmVjdGVkUGFydGljbGVFbWl0dGVyICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm94UGFydGljbGVF
bWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL2JveFBhcnRpY2xlRW1pdHRlciAqLyAiLi9QYXJ0aWNsZXMvRW1pdHRlclR5cGVzL2Jv
eFBhcnRpY2xlRW1pdHRlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb3hQYXJ0aWNsZUVtaXR0
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ib3hQYXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siQm94UGFydGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2NvbmVQYXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29uZVBhcnRpY2xlRW1pdHRlciAq
LyAiLi9QYXJ0aWNsZXMvRW1pdHRlclR5cGVzL2NvbmVQYXJ0aWNsZUVtaXR0ZXIudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ29uZVBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2NvbmVQYXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29uZVBh
cnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jeWxpbmRl
clBhcnRpY2xlRW1pdHRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9jeWxpbmRlclBhcnRpY2xlRW1pdHRlciAqLyAiLi9QYXJ0aWNsZXMv
RW1pdHRlclR5cGVzL2N5bGluZGVyUGFydGljbGVFbWl0dGVyLnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkN5bGluZGVyUGFydGljbGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY3lsaW5k
ZXJQYXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ3lsaW5kZXJQ
YXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJEaXJlY3Rl
ZFBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2N5bGluZGVyUGFydGljbGVF
bWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkN5bGluZGVyRGlyZWN0ZWRQYXJ0
aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVtaXNwaGVy
aWNQYXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vaGVtaXNwaGVyaWNQYXJ0aWNsZUVtaXR0ZXIgKi8gIi4vUGFydGlj
bGVzL0VtaXR0ZXJUeXBlcy9oZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlci50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX2hlbWlzcGhlcmljUGFydGljbGVFbWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIkhlbWlzcGhlcmljUGFydGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3BvaW50UGFydGljbGVFbWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvaW50UGFydGljbGVFbWl0dGVyICovICIu
L1BhcnRpY2xlcy9FbWl0dGVyVHlwZXMvcG9pbnRQYXJ0aWNsZUVtaXR0ZXIudHMiKTsKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiUG9pbnRQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9w
b2ludFBhcnRpY2xlRW1pdHRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQb2ludFBh
cnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGhlcmVQ
YXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vc3BoZXJlUGFydGljbGVFbWl0dGVyICovICIuL1BhcnRpY2xlcy9FbWl0
dGVyVHlwZXMvc3BoZXJlUGFydGljbGVFbWl0dGVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNw
aGVyZVBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NwaGVyZVBhcnRpY2xl
RW1pdHRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJTcGhlcmVQYXJ0aWNsZUVtaXR0
ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zcGhlcmVQYXJ0aWNsZUVtaXR0ZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7
CisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGFydGljbGVzL0VtaXR0
ZXJUeXBlcy9wb2ludFBhcnRpY2xlRW1pdHRlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGFydGlj
bGVzL0VtaXR0ZXJUeXBlcy9wb2ludFBhcnRpY2xlRW1pdHRlci50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBQb2ludFBhcnRpY2xlRW1pdHRlciAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQb2ludFBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gUG9pbnRQYXJ0aWNsZUVtaXR0ZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NaXNjX2RlZXBDb3BpZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVlcENvcGllciAqLyAiLi9NaXNjL2RlZXBDb3Bp
ZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnNjYWxh
ciAqLyAiLi9NYXRocy9tYXRoLnNjYWxhci50cyIpOworCisKKworLyoqCisgKiBQYXJ0aWNsZSBl
bWl0dGVyIGVtaXR0aW5nIHBhcnRpY2xlcyBmcm9tIGEgcG9pbnQuCisgKiBJdCBlbWl0cyB0aGUg
cGFydGljbGVzIHJhbmRvbWx5IGJldHdlZW4gMiBnaXZlbiBkaXJlY3Rpb25zLgorICovCit2YXIg
UG9pbnRQYXJ0aWNsZUVtaXR0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBQb2ludFBhcnRpY2xlRW1pdHRlcgor
ICAgICAqLworICAgIGZ1bmN0aW9uIFBvaW50UGFydGljbGVFbWl0dGVyKCkgeworICAgICAgICAv
KioKKyAgICAgICAgICogUmFuZG9tIGRpcmVjdGlvbiBvZiBlYWNoIHBhcnRpY2xlIGFmdGVyIGl0
IGhhcyBiZWVuIGVtaXR0ZWQsIGJldHdlZW4gZGlyZWN0aW9uMSBhbmQgZGlyZWN0aW9uMiB2ZWN0
b3JzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaXJlY3Rpb24xID0gbmV3IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0oMCwgMS4w
LCAwKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJhbmRvbSBkaXJlY3Rpb24gb2YgZWFjaCBw
YXJ0aWNsZSBhZnRlciBpdCBoYXMgYmVlbiBlbWl0dGVkLCBiZXR3ZWVuIGRpcmVjdGlvbjEgYW5k
IGRpcmVjdGlvbjIgdmVjdG9ycy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGlyZWN0aW9u
MiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVjdG9yMyJdKDAsIDEuMCwgMCk7CisgICAgfQorICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0
aGUgcGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIGRpcmVjdGlvbiBpcyBjb21wdXRlZCBmb3IgdGhl
IGNyZWF0ZWQgcGFydGljbGUuCisgICAgICogQHBhcmFtIHdvcmxkTWF0cml4IGlzIHRoZSB3b3Js
ZCBtYXRyaXggb2YgdGhlIHBhcnRpY2xlIHN5c3RlbQorICAgICAqIEBwYXJhbSBkaXJlY3Rpb25U
b1VwZGF0ZSBpcyB0aGUgZGlyZWN0aW9uIHZlY3RvciB0byB1cGRhdGUgd2l0aCB0aGUgcmVzdWx0
CisgICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBwYXJ0aWNsZSB3ZSBhcmUgY29tcHV0ZWQg
dGhlIGRpcmVjdGlvbiBmb3IKKyAgICAgKi8KKyAgICBQb2ludFBhcnRpY2xlRW1pdHRlci5wcm90
b3R5cGUuc3RhcnREaXJlY3Rpb25GdW5jdGlvbiA9IGZ1bmN0aW9uICh3b3JsZE1hdHJpeCwgZGly
ZWN0aW9uVG9VcGRhdGUsIHBhcnRpY2xlKSB7CisgICAgICAgIHZhciByYW5kWCA9IF9NYXRoc19t
YXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21S
YW5nZSh0aGlzLmRpcmVjdGlvbjEueCwgdGhpcy5kaXJlY3Rpb24yLngpOworICAgICAgICB2YXIg
cmFuZFkgPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
U2NhbGFyIl0uUmFuZG9tUmFuZ2UodGhpcy5kaXJlY3Rpb24xLnksIHRoaXMuZGlyZWN0aW9uMi55
KTsKKyAgICAgICAgdmFyIHJhbmRaID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKHRoaXMuZGlyZWN0aW9uMS56LCB0
aGlzLmRpcmVjdGlvbjIueik7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsRnJvbUZsb2F0c1Rv
UmVmKHJhbmRYLCByYW5kWSwgcmFuZFosIHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1VwZGF0ZSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBhcnRpY2xlIFN5c3RlbSB3
aGVuIHRoZSBwb3NpdGlvbiBpcyBjb21wdXRlZCBmb3IgdGhlIGNyZWF0ZWQgcGFydGljbGUuCisg
ICAgICogQHBhcmFtIHdvcmxkTWF0cml4IGlzIHRoZSB3b3JsZCBtYXRyaXggb2YgdGhlIHBhcnRp
Y2xlIHN5c3RlbQorICAgICAqIEBwYXJhbSBwb3NpdGlvblRvVXBkYXRlIGlzIHRoZSBwb3NpdGlv
biB2ZWN0b3IgdG8gdXBkYXRlIHdpdGggdGhlIHJlc3VsdAorICAgICAqIEBwYXJhbSBwYXJ0aWNs
ZSBpcyB0aGUgcGFydGljbGUgd2UgYXJlIGNvbXB1dGVkIHRoZSBwb3NpdGlvbiBmb3IKKyAgICAg
Ki8KKyAgICBQb2ludFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuc3RhcnRQb3NpdGlvbkZ1bmN0
aW9uID0gZnVuY3Rpb24gKHdvcmxkTWF0cml4LCBwb3NpdGlvblRvVXBkYXRlLCBwYXJ0aWNsZSkg
eworICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzRnJvbUZsb2F0c1RvUmVmKDAsIDAsIDAs
IHdvcmxkTWF0cml4LCBwb3NpdGlvblRvVXBkYXRlKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IENsb25lcyB0aGUgY3VycmVudCBlbWl0dGVyIGFuZCByZXR1cm5zIGEgY29weSBvZiBpdAorICAg
ICAqIEByZXR1cm5zIHRoZSBuZXcgZW1pdHRlcgorICAgICAqLworICAgIFBvaW50UGFydGljbGVF
bWl0dGVyLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIG5ld09u
ZSA9IG5ldyBQb2ludFBhcnRpY2xlRW1pdHRlcigpOworICAgICAgICBfTWlzY19kZWVwQ29waWVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkRlZXBDb3BpZXIiXS5EZWVwQ29weSh0aGlz
LCBuZXdPbmUpOworICAgICAgICByZXR1cm4gbmV3T25lOworICAgIH07CisgICAgLyoqCisgICAg
ICogQ2FsbGVkIGJ5IHRoZSBHUFVQYXJ0aWNsZVN5c3RlbSB0byBzZXR1cCB0aGUgdXBkYXRlIHNo
YWRlcgorICAgICAqIEBwYXJhbSBlZmZlY3QgZGVmaW5lcyB0aGUgdXBkYXRlIHNoYWRlcgorICAg
ICAqLworICAgIFBvaW50UGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5hcHBseVRvU2hhZGVyID0g
ZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICBlZmZlY3Quc2V0VmVjdG9yMygiZGlyZWN0aW9u
MSIsIHRoaXMuZGlyZWN0aW9uMSk7CisgICAgICAgIGVmZmVjdC5zZXRWZWN0b3IzKCJkaXJlY3Rp
b24yIiwgdGhpcy5kaXJlY3Rpb24yKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMg
YSBzdHJpbmcgdG8gdXNlIHRvIHVwZGF0ZSB0aGUgR1BVIHBhcnRpY2xlcyB1cGRhdGUgc2hhZGVy
CisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbm5nIHRoZSBkZWZpbmVzIHN0cmluZwor
ICAgICAqLworICAgIFBvaW50UGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5nZXRFZmZlY3REZWZp
bmVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIiNkZWZpbmUgUE9JTlRFTUlUVEVS
IjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmluZyAiUG9pbnRQYXJ0
aWNsZUVtaXR0ZXIiCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2xh
c3MgbmFtZQorICAgICAqLworICAgIFBvaW50UGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5nZXRD
bGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiUG9pbnRQYXJ0aWNsZUVt
aXR0ZXIiOworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgcGFydGljbGUg
c3lzdGVtIHRvIGEgSlNPTiBvYmplY3QuCisgICAgICogQHJldHVybnMgdGhlIEpTT04gb2JqZWN0
CisgICAgICovCisgICAgUG9pbnRQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnNlcmlhbGl6ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSB7fTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50eXBlID0gdGhpcy5nZXRDbGFzc05hbWUoKTsKKyAg
ICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5kaXJlY3Rpb24xID0gdGhpcy5kaXJlY3Rpb24xLmFz
QXJyYXkoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5kaXJlY3Rpb24yID0gdGhpcy5k
aXJlY3Rpb24yLmFzQXJyYXkoKTsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBQYXJzZSBwcm9wZXJ0aWVzIGZyb20gYSBKU09OIG9i
amVjdAorICAgICAqIEBwYXJhbSBzZXJpYWxpemF0aW9uT2JqZWN0IGRlZmluZXMgdGhlIEpTT04g
b2JqZWN0CisgICAgICovCisgICAgUG9pbnRQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnBhcnNl
ID0gZnVuY3Rpb24gKHNlcmlhbGl6YXRpb25PYmplY3QpIHsKKyAgICAgICAgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXlU
b1JlZihzZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvbjEsIDAsIHRoaXMuZGlyZWN0aW9uMSk7
CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJWZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYoc2VyaWFsaXphdGlvbk9iamVjdC5kaXJlY3Rpb24y
LCAwLCB0aGlzLmRpcmVjdGlvbjIpOworICAgIH07CisgICAgcmV0dXJuIFBvaW50UGFydGljbGVF
bWl0dGVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QYXJ0aWNsZXMvRW1p
dHRlclR5cGVzL3NwaGVyZVBhcnRpY2xlRW1pdHRlci50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bh
cnRpY2xlcy9FbWl0dGVyVHlwZXMvc3BoZXJlUGFydGljbGVFbWl0dGVyLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIsIFNwaGVyZURpcmVj
dGVkUGFydGljbGVFbWl0dGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlNwaGVyZVBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3BoZXJlUGFydGlj
bGVFbWl0dGVyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNwaGVyZURpcmVjdGVkUGFydGljbGVF
bWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRl
cjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21v
ZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZl
Y3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3NjYWxhcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWF0aHMvbWF0aC5zY2FsYXIgKi8gIi4vTWF0aHMvbWF0aC5zY2FsYXIudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZWVwQ29waWVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NaXNjL2RlZXBDb3BpZXIg
Ki8gIi4vTWlzYy9kZWVwQ29waWVyLnRzIik7CisKKworCisKKy8qKgorICogUGFydGljbGUgZW1p
dHRlciBlbWl0dGluZyBwYXJ0aWNsZXMgZnJvbSB0aGUgaW5zaWRlIG9mIGEgc3BoZXJlLgorICog
SXQgZW1pdHMgdGhlIHBhcnRpY2xlcyBhbG9uZ3NpZGUgdGhlIHNwaGVyZSByYWRpdXMuIFRoZSBl
bWlzc2lvbiBkaXJlY3Rpb24gbWlnaHQgYmUgcmFuZG9taXplZC4KKyAqLwordmFyIFNwaGVyZVBh
cnRpY2xlRW1pdHRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAg
ICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgU3BoZXJlUGFydGljbGVFbWl0dGVyCisgICAgKiBA
cGFyYW0gcmFkaXVzIHRoZSByYWRpdXMgb2YgdGhlIGVtaXNzaW9uIHNwaGVyZSAoMSBieSBkZWZh
dWx0KQorICAgICogQHBhcmFtIHJhZGl1c1JhbmdlIHRoZSByYW5nZSBvZiB0aGUgZW1pc3Npb24g
c3BoZXJlIFswLTFdIDAgU3VyZmFjZSBvbmx5LCAxIEVudGlyZSBSYWRpdXMgKDEgYnkgZGVmYXVs
dCkKKyAgICAqIEBwYXJhbSBkaXJlY3Rpb25SYW5kb21pemVyIGRlZmluZXMgaG93IG11Y2ggdG8g
cmFuZG9taXplIHRoZSBwYXJ0aWNsZSBkaXJlY3Rpb24gWzAtMV0KKyAgICAqLworICAgIGZ1bmN0
aW9uIFNwaGVyZVBhcnRpY2xlRW1pdHRlcigKKyAgICAvKioKKyAgICAgKiBUaGUgcmFkaXVzIG9m
IHRoZSBlbWlzc2lvbiBzcGhlcmUuCisgICAgICovCisgICAgcmFkaXVzLCAKKyAgICAvKioKKyAg
ICAgKiBUaGUgcmFuZ2Ugb2YgZW1pc3Npb24gWzAtMV0gMCBTdXJmYWNlIG9ubHksIDEgRW50aXJl
IFJhZGl1cy4KKyAgICAgKi8KKyAgICByYWRpdXNSYW5nZSwgCisgICAgLyoqCisgICAgICogSG93
IG11Y2ggdG8gcmFuZG9taXplIHRoZSBwYXJ0aWNsZSBkaXJlY3Rpb24gWzAtMV0uCisgICAgICov
CisgICAgZGlyZWN0aW9uUmFuZG9taXplcikgeworICAgICAgICBpZiAocmFkaXVzID09PSB2b2lk
IDApIHsgcmFkaXVzID0gMTsgfQorICAgICAgICBpZiAocmFkaXVzUmFuZ2UgPT09IHZvaWQgMCkg
eyByYWRpdXNSYW5nZSA9IDE7IH0KKyAgICAgICAgaWYgKGRpcmVjdGlvblJhbmRvbWl6ZXIgPT09
IHZvaWQgMCkgeyBkaXJlY3Rpb25SYW5kb21pemVyID0gMDsgfQorICAgICAgICB0aGlzLnJhZGl1
cyA9IHJhZGl1czsKKyAgICAgICAgdGhpcy5yYWRpdXNSYW5nZSA9IHJhZGl1c1JhbmdlOworICAg
ICAgICB0aGlzLmRpcmVjdGlvblJhbmRvbWl6ZXIgPSBkaXJlY3Rpb25SYW5kb21pemVyOworICAg
IH0KKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBhcnRpY2xlIFN5c3RlbSB3aGVuIHRo
ZSBkaXJlY3Rpb24gaXMgY29tcHV0ZWQgZm9yIHRoZSBjcmVhdGVkIHBhcnRpY2xlLgorICAgICAq
IEBwYXJhbSB3b3JsZE1hdHJpeCBpcyB0aGUgd29ybGQgbWF0cml4IG9mIHRoZSBwYXJ0aWNsZSBz
eXN0ZW0KKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uVG9VcGRhdGUgaXMgdGhlIGRpcmVjdGlvbiB2
ZWN0b3IgdG8gdXBkYXRlIHdpdGggdGhlIHJlc3VsdAorICAgICAqIEBwYXJhbSBwYXJ0aWNsZSBp
cyB0aGUgcGFydGljbGUgd2UgYXJlIGNvbXB1dGVkIHRoZSBkaXJlY3Rpb24gZm9yCisgICAgICov
CisgICAgU3BoZXJlUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5zdGFydERpcmVjdGlvbkZ1bmN0
aW9uID0gZnVuY3Rpb24gKHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1VwZGF0ZSwgcGFydGljbGUp
IHsKKyAgICAgICAgdmFyIGRpcmVjdGlvbiA9IHBhcnRpY2xlLnBvc2l0aW9uLnN1YnRyYWN0KHdv
cmxkTWF0cml4LmdldFRyYW5zbGF0aW9uKCkpLm5vcm1hbGl6ZSgpOworICAgICAgICB2YXIgcmFu
ZFggPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2Nh
bGFyIl0uUmFuZG9tUmFuZ2UoMCwgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyKTsKKyAgICAgICAg
dmFyIHJhbmRZID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKDAsIHRoaXMuZGlyZWN0aW9uUmFuZG9taXplcik7Cisg
ICAgICAgIHZhciByYW5kWiA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSgwLCB0aGlzLmRpcmVjdGlvblJhbmRvbWl6
ZXIpOworICAgICAgICBkaXJlY3Rpb24ueCArPSByYW5kWDsKKyAgICAgICAgZGlyZWN0aW9uLnkg
Kz0gcmFuZFk7CisgICAgICAgIGRpcmVjdGlvbi56ICs9IHJhbmRaOworICAgICAgICBkaXJlY3Rp
b24ubm9ybWFsaXplKCk7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsRnJvbUZsb2F0c1RvUmVm
KGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLnosIHdvcmxkTWF0cml4LCBkaXJl
Y3Rpb25Ub1VwZGF0ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBh
cnRpY2xlIFN5c3RlbSB3aGVuIHRoZSBwb3NpdGlvbiBpcyBjb21wdXRlZCBmb3IgdGhlIGNyZWF0
ZWQgcGFydGljbGUuCisgICAgICogQHBhcmFtIHdvcmxkTWF0cml4IGlzIHRoZSB3b3JsZCBtYXRy
aXggb2YgdGhlIHBhcnRpY2xlIHN5c3RlbQorICAgICAqIEBwYXJhbSBwb3NpdGlvblRvVXBkYXRl
IGlzIHRoZSBwb3NpdGlvbiB2ZWN0b3IgdG8gdXBkYXRlIHdpdGggdGhlIHJlc3VsdAorICAgICAq
IEBwYXJhbSBwYXJ0aWNsZSBpcyB0aGUgcGFydGljbGUgd2UgYXJlIGNvbXB1dGVkIHRoZSBwb3Np
dGlvbiBmb3IKKyAgICAgKi8KKyAgICBTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnN0
YXJ0UG9zaXRpb25GdW5jdGlvbiA9IGZ1bmN0aW9uICh3b3JsZE1hdHJpeCwgcG9zaXRpb25Ub1Vw
ZGF0ZSwgcGFydGljbGUpIHsKKyAgICAgICAgdmFyIHJhbmRSYWRpdXMgPSB0aGlzLnJhZGl1cyAt
IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIi
XS5SYW5kb21SYW5nZSgwLCB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzUmFuZ2UpOworICAgICAg
ICB2YXIgdiA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJTY2FsYXIiXS5SYW5kb21SYW5nZSgwLCAxLjApOworICAgICAgICB2YXIgcGhpID0gX01hdGhz
X21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRv
bVJhbmdlKDAsIDIgKiBNYXRoLlBJKTsKKyAgICAgICAgdmFyIHRoZXRhID0gTWF0aC5hY29zKDIg
KiB2IC0gMSk7CisgICAgICAgIHZhciByYW5kWCA9IHJhbmRSYWRpdXMgKiBNYXRoLmNvcyhwaGkp
ICogTWF0aC5zaW4odGhldGEpOworICAgICAgICB2YXIgcmFuZFkgPSByYW5kUmFkaXVzICogTWF0
aC5jb3ModGhldGEpOworICAgICAgICB2YXIgcmFuZFogPSByYW5kUmFkaXVzICogTWF0aC5zaW4o
cGhpKSAqIE1hdGguc2luKHRoZXRhKTsKKyAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc0Zy
b21GbG9hdHNUb1JlZihyYW5kWCwgcmFuZFksIHJhbmRaLCB3b3JsZE1hdHJpeCwgcG9zaXRpb25U
b1VwZGF0ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhlIGN1cnJlbnQgZW1p
dHRlciBhbmQgcmV0dXJucyBhIGNvcHkgb2YgaXQKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGVt
aXR0ZXIKKyAgICAgKi8KKyAgICBTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmNsb25l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbmV3T25lID0gbmV3IFNwaGVyZVBhcnRpY2xl
RW1pdHRlcih0aGlzLnJhZGl1cywgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyKTsKKyAgICAgICAg
X01pc2NfZGVlcENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJEZWVwQ29waWVy
Il0uRGVlcENvcHkodGhpcywgbmV3T25lKTsKKyAgICAgICAgcmV0dXJuIG5ld09uZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgR1BVUGFydGljbGVTeXN0ZW0gdG8gc2V0
dXAgdGhlIHVwZGF0ZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0gZWZmZWN0IGRlZmluZXMgdGhlIHVw
ZGF0ZSBzaGFkZXIKKyAgICAgKi8KKyAgICBTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBl
LmFwcGx5VG9TaGFkZXIgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgIGVmZmVjdC5zZXRG
bG9hdCgicmFkaXVzIiwgdGhpcy5yYWRpdXMpOworICAgICAgICBlZmZlY3Quc2V0RmxvYXQoInJh
ZGl1c1JhbmdlIiwgdGhpcy5yYWRpdXNSYW5nZSk7CisgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgi
ZGlyZWN0aW9uUmFuZG9taXplciIsIHRoaXMuZGlyZWN0aW9uUmFuZG9taXplcik7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHRvIHVzZSB0byB1cGRhdGUgdGhlIEdQ
VSBwYXJ0aWNsZXMgdXBkYXRlIHNoYWRlcgorICAgICAqIEByZXR1cm5zIGEgc3RyaW5nIGNvbnRh
aW5uZyB0aGUgZGVmaW5lcyBzdHJpbmcKKyAgICAgKi8KKyAgICBTcGhlcmVQYXJ0aWNsZUVtaXR0
ZXIucHJvdG90eXBlLmdldEVmZmVjdERlZmluZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiAiI2RlZmluZSBTUEhFUkVFTUlUVEVSIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
dHVybnMgdGhlIHN0cmluZyAiU3BoZXJlUGFydGljbGVFbWl0dGVyIgorICAgICAqIEByZXR1cm5z
IGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNsYXNzIG5hbWUKKyAgICAgKi8KKyAgICBTcGhlcmVQ
YXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuICJTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIiOworICAgIH07CisgICAgLyoqCisg
ICAgICogU2VyaWFsaXplcyB0aGUgcGFydGljbGUgc3lzdGVtIHRvIGEgSlNPTiBvYmplY3QuCisg
ICAgICogQHJldHVybnMgdGhlIEpTT04gb2JqZWN0CisgICAgICovCisgICAgU3BoZXJlUGFydGlj
bGVFbWl0dGVyLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh
ciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
dHlwZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lKCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
cmFkaXVzID0gdGhpcy5yYWRpdXM7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmFkaXVz
UmFuZ2UgPSB0aGlzLnJhZGl1c1JhbmdlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmRp
cmVjdGlvblJhbmRvbWl6ZXIgPSB0aGlzLmRpcmVjdGlvblJhbmRvbWl6ZXI7CisgICAgICAgIHJl
dHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2Ug
cHJvcGVydGllcyBmcm9tIGEgSlNPTiBvYmplY3QKKyAgICAgKiBAcGFyYW0gc2VyaWFsaXphdGlv
bk9iamVjdCBkZWZpbmVzIHRoZSBKU09OIG9iamVjdAorICAgICAqLworICAgIFNwaGVyZVBhcnRp
Y2xlRW1pdHRlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlvbk9iamVj
dCkgeworICAgICAgICB0aGlzLnJhZGl1cyA9IHNlcmlhbGl6YXRpb25PYmplY3QucmFkaXVzOwor
ICAgICAgICB0aGlzLnJhZGl1c1JhbmdlID0gc2VyaWFsaXphdGlvbk9iamVjdC5yYWRpdXNSYW5n
ZTsKKyAgICAgICAgdGhpcy5kaXJlY3Rpb25SYW5kb21pemVyID0gc2VyaWFsaXphdGlvbk9iamVj
dC5kaXJlY3Rpb25SYW5kb21pemVyOworICAgIH07CisgICAgcmV0dXJuIFNwaGVyZVBhcnRpY2xl
RW1pdHRlcjsKK30oKSk7CisKKy8qKgorICogUGFydGljbGUgZW1pdHRlciBlbWl0dGluZyBwYXJ0
aWNsZXMgZnJvbSB0aGUgaW5zaWRlIG9mIGEgc3BoZXJlLgorICogSXQgZW1pdHMgdGhlIHBhcnRp
Y2xlcyByYW5kb21seSBiZXR3ZWVuIHR3byB2ZWN0b3JzLgorICovCit2YXIgU3BoZXJlRGlyZWN0
ZWRQYXJ0aWNsZUVtaXR0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU3BoZXJl
RGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRl
cyBhIG5ldyBpbnN0YW5jZSBTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlcgorICAgICAqIEBw
YXJhbSByYWRpdXMgdGhlIHJhZGl1cyBvZiB0aGUgZW1pc3Npb24gc3BoZXJlICgxIGJ5IGRlZmF1
bHQpCisgICAgICogQHBhcmFtIGRpcmVjdGlvbjEgdGhlIG1pbiBsaW1pdCBvZiB0aGUgZW1pc3Np
b24gZGlyZWN0aW9uICh1cCB2ZWN0b3IgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gZGlyZWN0
aW9uMiB0aGUgbWF4IGxpbWl0IG9mIHRoZSBlbWlzc2lvbiBkaXJlY3Rpb24gKHVwIHZlY3RvciBi
eSBkZWZhdWx0KQorICAgICAqLworICAgIGZ1bmN0aW9uIFNwaGVyZURpcmVjdGVkUGFydGljbGVF
bWl0dGVyKHJhZGl1cywgCisgICAgLyoqCisgICAgICogVGhlIG1pbiBsaW1pdCBvZiB0aGUgZW1p
c3Npb24gZGlyZWN0aW9uLgorICAgICAqLworICAgIGRpcmVjdGlvbjEsIAorICAgIC8qKgorICAg
ICAqIFRoZSBtYXggbGltaXQgb2YgdGhlIGVtaXNzaW9uIGRpcmVjdGlvbi4KKyAgICAgKi8KKyAg
ICBkaXJlY3Rpb24yKSB7CisgICAgICAgIGlmIChyYWRpdXMgPT09IHZvaWQgMCkgeyByYWRpdXMg
PSAxOyB9CisgICAgICAgIGlmIChkaXJlY3Rpb24xID09PSB2b2lkIDApIHsgZGlyZWN0aW9uMSA9
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVj
dG9yMyJdKDAsIDEsIDApOyB9CisgICAgICAgIGlmIChkaXJlY3Rpb24yID09PSB2b2lkIDApIHsg
ZGlyZWN0aW9uMiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVjdG9yMyJdKDAsIDEsIDApOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIHJhZGl1cykgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuZGlyZWN0aW9uMSA9
IGRpcmVjdGlvbjE7CisgICAgICAgIF90aGlzLmRpcmVjdGlvbjIgPSBkaXJlY3Rpb24yOworICAg
ICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUg
cGFydGljbGUgU3lzdGVtIHdoZW4gdGhlIGRpcmVjdGlvbiBpcyBjb21wdXRlZCBmb3IgdGhlIGNy
ZWF0ZWQgcGFydGljbGUuCisgICAgICogQHBhcmFtIHdvcmxkTWF0cml4IGlzIHRoZSB3b3JsZCBt
YXRyaXggb2YgdGhlIHBhcnRpY2xlIHN5c3RlbQorICAgICAqIEBwYXJhbSBkaXJlY3Rpb25Ub1Vw
ZGF0ZSBpcyB0aGUgZGlyZWN0aW9uIHZlY3RvciB0byB1cGRhdGUgd2l0aCB0aGUgcmVzdWx0Cisg
ICAgICogQHBhcmFtIHBhcnRpY2xlIGlzIHRoZSBwYXJ0aWNsZSB3ZSBhcmUgY29tcHV0ZWQgdGhl
IGRpcmVjdGlvbiBmb3IKKyAgICAgKi8KKyAgICBTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRl
ci5wcm90b3R5cGUuc3RhcnREaXJlY3Rpb25GdW5jdGlvbiA9IGZ1bmN0aW9uICh3b3JsZE1hdHJp
eCwgZGlyZWN0aW9uVG9VcGRhdGUsIHBhcnRpY2xlKSB7CisgICAgICAgIHZhciByYW5kWCA9IF9N
YXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIiXS5S
YW5kb21SYW5nZSh0aGlzLmRpcmVjdGlvbjEueCwgdGhpcy5kaXJlY3Rpb24yLngpOworICAgICAg
ICB2YXIgcmFuZFkgPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfX1siU2NhbGFyIl0uUmFuZG9tUmFuZ2UodGhpcy5kaXJlY3Rpb24xLnksIHRoaXMuZGlyZWN0
aW9uMi55KTsKKyAgICAgICAgdmFyIHJhbmRaID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKHRoaXMuZGlyZWN0aW9u
MS56LCB0aGlzLmRpcmVjdGlvbjIueik7CisgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtTm9ybWFsRnJvbUZs
b2F0c1RvUmVmKHJhbmRYLCByYW5kWSwgcmFuZFosIHdvcmxkTWF0cml4LCBkaXJlY3Rpb25Ub1Vw
ZGF0ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbG9uZXMgdGhlIGN1cnJlbnQgZW1pdHRl
ciBhbmQgcmV0dXJucyBhIGNvcHkgb2YgaXQKKyAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGVtaXR0
ZXIKKyAgICAgKi8KKyAgICBTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUu
Y2xvbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBuZXdPbmUgPSBuZXcgU3BoZXJlRGly
ZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIodGhpcy5yYWRpdXMsIHRoaXMuZGlyZWN0aW9uMSwgdGhpcy5k
aXJlY3Rpb24yKTsKKyAgICAgICAgX01pc2NfZGVlcENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJEZWVwQ29waWVyIl0uRGVlcENvcHkodGhpcywgbmV3T25lKTsKKyAgICAgICAg
cmV0dXJuIG5ld09uZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgR1BV
UGFydGljbGVTeXN0ZW0gdG8gc2V0dXAgdGhlIHVwZGF0ZSBzaGFkZXIKKyAgICAgKiBAcGFyYW0g
ZWZmZWN0IGRlZmluZXMgdGhlIHVwZGF0ZSBzaGFkZXIKKyAgICAgKi8KKyAgICBTcGhlcmVEaXJl
Y3RlZFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuYXBwbHlUb1NoYWRlciA9IGZ1bmN0aW9uIChl
ZmZlY3QpIHsKKyAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJyYWRpdXMiLCB0aGlzLnJhZGl1cyk7
CisgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgicmFkaXVzUmFuZ2UiLCB0aGlzLnJhZGl1c1Jhbmdl
KTsKKyAgICAgICAgZWZmZWN0LnNldFZlY3RvcjMoImRpcmVjdGlvbjEiLCB0aGlzLmRpcmVjdGlv
bjEpOworICAgICAgICBlZmZlY3Quc2V0VmVjdG9yMygiZGlyZWN0aW9uMiIsIHRoaXMuZGlyZWN0
aW9uMik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHRvIHVzZSB0
byB1cGRhdGUgdGhlIEdQVSBwYXJ0aWNsZXMgdXBkYXRlIHNoYWRlcgorICAgICAqIEByZXR1cm5z
IGEgc3RyaW5nIGNvbnRhaW5uZyB0aGUgZGVmaW5lcyBzdHJpbmcKKyAgICAgKi8KKyAgICBTcGhl
cmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUuZ2V0RWZmZWN0RGVmaW5lcyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICIjZGVmaW5lIFNQSEVSRUVNSVRURVJcbiNkZWZp
bmUgRElSRUNURURTUEhFUkVFTUlUVEVSIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVy
bnMgdGhlIHN0cmluZyAiU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiCisgICAgICogQHJl
dHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFNw
aGVyZURpcmVjdGVkUGFydGljbGVFbWl0dGVyLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIi
OworICAgIH07CisgICAgLyoqCisgICAgICogU2VyaWFsaXplcyB0aGUgcGFydGljbGUgc3lzdGVt
IHRvIGEgSlNPTiBvYmplY3QuCisgICAgICogQHJldHVybnMgdGhlIEpTT04gb2JqZWN0CisgICAg
ICovCisgICAgU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIucHJvdG90eXBlLnNlcmlhbGl6
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25PYmplY3QgPSBfc3Vw
ZXIucHJvdG90eXBlLnNlcmlhbGl6ZS5jYWxsKHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9u
T2JqZWN0LmRpcmVjdGlvbjEgPSB0aGlzLmRpcmVjdGlvbjEuYXNBcnJheSgpOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvbjIgPSB0aGlzLmRpcmVjdGlvbjIuYXNBcnJheSgp
OworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFBhcnNlIHByb3BlcnRpZXMgZnJvbSBhIEpTT04gb2JqZWN0CisgICAgICogQHBhcmFt
IHNlcmlhbGl6YXRpb25PYmplY3QgZGVmaW5lcyB0aGUgSlNPTiBvYmplY3QKKyAgICAgKi8KKyAg
ICBTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlv
biAoc2VyaWFsaXphdGlvbk9iamVjdCkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLnBhcnNl
LmNhbGwodGhpcywgc2VyaWFsaXphdGlvbk9iamVjdCk7CisgICAgICAgIHRoaXMuZGlyZWN0aW9u
MS5jb3B5RnJvbShzZXJpYWxpemF0aW9uT2JqZWN0LmRpcmVjdGlvbjEpOworICAgICAgICB0aGlz
LmRpcmVjdGlvbjIuY29weUZyb20oc2VyaWFsaXphdGlvbk9iamVjdC5kaXJlY3Rpb24yKTsKKyAg
ICB9OworICAgIHJldHVybiBTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlcjsKK30oU3BoZXJl
UGFydGljbGVFbWl0dGVyKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGFydGljbGVz
L2Jhc2VQYXJ0aWNsZVN5c3RlbS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGFydGljbGVzL2Jhc2VQYXJ0aWNsZVN5c3RlbS50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBCYXNlUGFydGljbGVTeXN0ZW0gKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzZVBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBCYXNlUGFydGljbGVTeXN0ZW07IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9u
ICovICIuL01hdGVyaWFscy9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX1BhcnRpY2xlc19FbWl0dGVyVHlwZXNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1BhcnRp
Y2xlcy9FbWl0dGVyVHlwZXMvaW5kZXggKi8gIi4vUGFydGljbGVzL0VtaXR0ZXJUeXBlcy9pbmRl
eC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5n
aW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9N
YXRocy9tYXRoLmNvbG9yLnRzIik7CisKKworCisKKworLyoqCisgKiBUaGlzIHJlcHJlc2VudHMg
dGhlIGJhc2UgY2xhc3MgZm9yIHBhcnRpY2xlIHN5c3RlbSBpbiBCYWJ5bG9uLgorICogUGFydGlj
bGVzIGFyZSBvZnRlbiBzbWFsbCBzcHJpdGVzIHVzZWQgdG8gc2ltdWxhdGUgaGFyZC10by1yZXBy
b2R1Y2UgcGhlbm9tZW5hIGxpa2UgZmlyZSwgc21va2UsIHdhdGVyLCBvciBhYnN0cmFjdCB2aXN1
YWwgZWZmZWN0cyBsaWtlIG1hZ2ljIGdsaXR0ZXIgYW5kIGZhZXJ5IGR1c3QuCisgKiBQYXJ0aWNs
ZXMgY2FuIHRha2UgZGlmZmVyZW50IHNoYXBlcyB3aGlsZSBlbWl0dGVkIGxpa2UgYm94LCBzcGhl
cmUsIGNvbmUgb3IgeW91IGNhbiB3cml0ZSB5b3VyIGN1c3RvbSBmdW5jdGlvbi4KKyAqIEBleGFt
cGxlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9wYXJ0aWNsZXMKKyAqLwor
dmFyIEJhc2VQYXJ0aWNsZVN5c3RlbSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBwYXJ0aWNsZSBzeXN0ZW0uCisgICAgICogUGFy
dGljbGVzIGFyZSBvZnRlbiBzbWFsbCBzcHJpdGVzIHVzZWQgdG8gc2ltdWxhdGUgaGFyZC10by1y
ZXByb2R1Y2UgcGhlbm9tZW5hIGxpa2UgZmlyZSwgc21va2UsIHdhdGVyLCBvciBhYnN0cmFjdCB2
aXN1YWwgZWZmZWN0cyBsaWtlIG1hZ2ljIGdsaXR0ZXIgYW5kIGZhZXJ5IGR1c3QuCisgICAgICog
QHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcnRpY2xlIHN5c3RlbQorICAgICAqLworICAg
IGZ1bmN0aW9uIEJhc2VQYXJ0aWNsZVN5c3RlbShuYW1lKSB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBMaXN0IG9mIGFuaW1hdGlvbnMgdXNlZCBieSB0aGUgcGFydGljbGUgc3lzdGVtLgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5hbmltYXRpb25zID0gW107CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBUaGUgcmVuZGVyaW5nIGdyb3VwIHVzZWQgYnkgdGhlIFBhcnRpY2xlIHN5c3RlbSB0
byBjaG9zZSB3aGVuIHRvIHJlbmRlci4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVuZGVy
aW5nR3JvdXBJZCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZW1pdHRlciByZXBy
ZXNlbnRzIHRoZSBNZXNoIG9yIHBvc2l0aW9uIHdlIGFyZSBhdHRhY2hpbmcgdGhlIHBhcnRpY2xl
IHN5c3RlbSB0by4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZW1pdHRlciA9IG51bGw7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIHRv
IGVtaXQgcGVyIGZyYW1lCisgICAgICAgICAqLworICAgICAgICB0aGlzLmVtaXRSYXRlID0gMTA7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB5b3Ugd2FudCB0byBsYXVuY2ggb25seSBhIGZl
dyBwYXJ0aWNsZXMgYXQgb25jZSwgdGhhdCBjYW4gYmUgZG9uZSwgYXMgd2VsbC4KKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMubWFudWFsRW1pdENvdW50ID0gLTE7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBUaGUgb3ZlcmFsbCBtb3Rpb24gc3BlZWQgKDAuMDEgaXMgZGVmYXVsdCB1cGRhdGUg
c3BlZWQsIGZhc3RlciB1cGRhdGVzID0gZmFzdGVyIGFuaW1hdGlvbikKKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMudXBkYXRlU3BlZWQgPSAwLjAxOworICAgICAgICAvKioKKyAgICAgICAgICog
VGhlIGFtb3VudCBvZiB0aW1lIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gaXMgcnVubmluZyAoZGVwZW5k
cyBvZiB0aGUgb3ZlcmFsbCB1cGRhdGUgc3BlZWQpLgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy50YXJnZXRTdG9wRHVyYXRpb24gPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lm
aWVzIHdoZXRoZXIgdGhlIHBhcnRpY2xlIHN5c3RlbSB3aWxsIGJlIGRpc3Bvc2VkIG9uY2UgaXQg
cmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24uCisgICAgICAgICAqLworICAgICAgICB0
aGlzLmRpc3Bvc2VPblN0b3AgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1pbmlt
dW0gcG93ZXIgb2YgZW1pdHRpbmcgcGFydGljbGVzLgorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5taW5FbWl0UG93ZXIgPSAxOworICAgICAgICAvKioKKyAgICAgICAgICogTWF4aW11bSBwb3dl
ciBvZiBlbWl0dGluZyBwYXJ0aWNsZXMuCisgICAgICAgICAqLworICAgICAgICB0aGlzLm1heEVt
aXRQb3dlciA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNaW5pbXVtIGxpZmUgdGltZSBv
ZiBlbWl0dGluZyBwYXJ0aWNsZXMuCisgICAgICAgICAqLworICAgICAgICB0aGlzLm1pbkxpZmVU
aW1lID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1heGltdW0gbGlmZSB0aW1lIG9mIGVt
aXR0aW5nIHBhcnRpY2xlcy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubWF4TGlmZVRpbWUg
PSAxOworICAgICAgICAvKioKKyAgICAgICAgICogTWluaW11bSBTaXplIG9mIGVtaXR0aW5nIHBh
cnRpY2xlcy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubWluU2l6ZSA9IDE7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBNYXhpbXVtIFNpemUgb2YgZW1pdHRpbmcgcGFydGljbGVzLgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5tYXhTaXplID0gMTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIE1pbmltdW0gc2NhbGUgb2YgZW1pdHRpbmcgcGFydGljbGVzIG9uIFggYXhpcy4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMubWluU2NhbGVYID0gMTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIE1heGltdW0gc2NhbGUgb2YgZW1pdHRpbmcgcGFydGljbGVzIG9uIFggYXhpcy4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMubWF4U2NhbGVYID0gMTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIE1pbmltdW0gc2NhbGUgb2YgZW1pdHRpbmcgcGFydGljbGVzIG9uIFkgYXhpcy4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMubWluU2NhbGVZID0gMTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIE1heGltdW0gc2NhbGUgb2YgZW1pdHRpbmcgcGFydGljbGVzIG9uIFkgYXhpcy4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMubWF4U2NhbGVZID0gMTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3Igc2V0cyB0aGUgbWluaW1hbCBpbml0aWFsIHJvdGF0aW9uIGluIHJhZGlhbnMu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLm1pbkluaXRpYWxSb3RhdGlvbiA9IDA7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIG1heGltYWwgaW5pdGlhbCByb3Rh
dGlvbiBpbiByYWRpYW5zLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tYXhJbml0aWFsUm90
YXRpb24gPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogTWluaW11bSBhbmd1bGFyIHNwZWVk
IG9mIGVtaXR0aW5nIHBhcnRpY2xlcyAoWi1heGlzIHJvdGF0aW9uIGZvciBlYWNoIHBhcnRpY2xl
KS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubWluQW5ndWxhclNwZWVkID0gMDsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIE1heGltdW0gYW5ndWxhciBzcGVlZCBvZiBlbWl0dGluZyBwYXJ0
aWNsZXMgKFotYXhpcyByb3RhdGlvbiBmb3IgZWFjaCBwYXJ0aWNsZSkuCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLm1heEFuZ3VsYXJTcGVlZCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBUaGUgbGF5ZXIgbWFzayB3ZSBhcmUgcmVuZGVyaW5nIHRoZSBwYXJ0aWNsZXMgdGhyb3VnaC4K
KyAgICAgICAgICovCisgICAgICAgIHRoaXMubGF5ZXJNYXNrID0gMHgwRkZGRkZGRjsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFRoaXMgY2FuIGhlbHAgdXNpbmcgeW91ciBvd24gc2hhZGVyIHRv
IHJlbmRlciB0aGUgcGFydGljbGUgc3lzdGVtLgorICAgICAgICAgKiBUaGUgYWNjb3JkaW5nIGVm
ZmVjdCB3aWxsIGJlIGNyZWF0ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuY3VzdG9tU2hh
ZGVyID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEJ5IGRlZmF1bHQgcGFydGljbGUg
c3lzdGVtIHN0YXJ0cyBhcyBzb29uIGFzIHRoZXkgYXJlIGNyZWF0ZWQuIFRoaXMgcHJldmVudHMg
dGhlCisgICAgICAgICAqIGF1dG9tYXRpYyBzdGFydCB0byBoYXBwZW4gYW5kIGxldCB5b3UgZGVj
aWRlIHdoZW4gdG8gc3RhcnQgZW1pdHRpbmcgcGFydGljbGVzLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5wcmV2ZW50QXV0b1N0YXJ0ID0gZmFsc2U7CisgICAgICAgIC8qKiBHZXRzIG9yIHNl
dHMgdGhlIHN0cmVuZ3RoIHRvIGFwcGx5IHRvIHRoZSBub2lzZSB2YWx1ZSAoZGVmYXVsdCBpcyAo
MTAsIDEwLCAxMCkpICovCisgICAgICAgIHRoaXMubm9pc2VTdHJlbmd0aCA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDEwLCAx
MCwgMTApOworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4g
dGhlIHBhcnRpY2xlIGFuaW1hdGlvbiBpcyBlbmRpbmcuCisgICAgICAgICAqLworICAgICAgICB0
aGlzLm9uQW5pbWF0aW9uRW5kID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEJsZW5k
IG1vZGUgdXNlIHRvIHJlbmRlciB0aGUgcGFydGljbGUsIGl0IGNhbiBiZSBlaXRoZXIgUGFydGlj
bGVTeXN0ZW0uQkxFTkRNT0RFX09ORU9ORSBvciBQYXJ0aWNsZVN5c3RlbS5CTEVORE1PREVfU1RB
TkRBUkQuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmJsZW5kTW9kZSA9IEJhc2VQYXJ0aWNs
ZVN5c3RlbS5CTEVORE1PREVfT05FT05FOworICAgICAgICAvKioKKyAgICAgICAgICogRm9yY2Vz
IHRoZSBwYXJ0aWNsZSB0byB3cml0ZSB0aGVpciBkZXB0aCBpbmZvcm1hdGlvbiB0byB0aGUgZGVw
dGggYnVmZmVyLiBUaGlzIGNhbiBoZWxwIHByZXZlbnRpbmcgb3RoZXIgZHJhdyBjYWxscworICAg
ICAgICAgKiB0byBvdmVycmlkZSB0aGUgcGFydGljbGVzLgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5mb3JjZURlcHRoV3JpdGUgPSBmYWxzZTsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyBh
IHZhbHVlIGluZGljYXRpbmcgaG93IG1hbnkgY3ljbGVzIChvciBmcmFtZXMpIG11c3QgYmUgZXhl
Y3V0ZWQgYmVmb3JlIGZpcnN0IHJlbmRlcmluZyAodGhpcyB2YWx1ZSBoYXMgdG8gYmUgc2V0IGJl
Zm9yZSBzdGFydGluZyB0aGUgc3lzdGVtKS4gRGVmYXVsdCBpcyAwICovCisgICAgICAgIHRoaXMu
cHJlV2FybUN5Y2xlcyA9IDA7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSBpbmRp
Y2F0aW5nIHRoZSB0aW1lIHN0ZXAgbXVsdGlwbGllciB0byB1c2UgaW4gcHJlLXdhcm0gbW9kZSAo
ZGVmYXVsdCBpcyAxKSAqLworICAgICAgICB0aGlzLnByZVdhcm1TdGVwT2Zmc2V0ID0gMTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIElmIHVzaW5nIGEgc3ByaXRlc2hlZXQgKGlzQW5pbWF0aW9u
U2hlZXRFbmFibGVkKSBkZWZpbmVzIHRoZSBzcGVlZCBvZiB0aGUgc3ByaXRlIGxvb3AgKGRlZmF1
bHQgaXMgMSBtZWFuaW5nIHRoZSBhbmltYXRpb24gd2lsbCBwbGF5IG9uY2UgZHVyaW5nIHRoZSBl
bnRpcmUgcGFydGljbGUgbGlmZXRpbWUpCisgICAgICAgICAqLworICAgICAgICB0aGlzLnNwcml0
ZUNlbGxDaGFuZ2VTcGVlZCA9IDE7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB1c2luZyBh
IHNwcml0ZXNoZWV0IChpc0FuaW1hdGlvblNoZWV0RW5hYmxlZCkgZGVmaW5lcyB0aGUgZmlyc3Qg
c3ByaXRlIGNlbGwgdG8gZGlzcGxheQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zdGFydFNw
cml0ZUNlbGxJRCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB1c2luZyBhIHNwcml0
ZXNoZWV0IChpc0FuaW1hdGlvblNoZWV0RW5hYmxlZCkgZGVmaW5lcyB0aGUgbGFzdCBzcHJpdGUg
Y2VsbCB0byBkaXNwbGF5CisgICAgICAgICAqLworICAgICAgICB0aGlzLmVuZFNwcml0ZUNlbGxJ
RCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB1c2luZyBhIHNwcml0ZXNoZWV0IChp
c0FuaW1hdGlvblNoZWV0RW5hYmxlZCksIGRlZmluZXMgdGhlIHNwcml0ZSBjZWxsIHdpZHRoIHRv
IHVzZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zcHJpdGVDZWxsV2lkdGggPSAwOworICAg
ICAgICAvKioKKyAgICAgICAgICogSWYgdXNpbmcgYSBzcHJpdGVzaGVldCAoaXNBbmltYXRpb25T
aGVldEVuYWJsZWQpLCBkZWZpbmVzIHRoZSBzcHJpdGUgY2VsbCBoZWlnaHQgdG8gdXNlCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnNwcml0ZUNlbGxIZWlnaHQgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogVGhpcyBhbGxvd3MgdGhlIHN5c3RlbSB0byByYW5kb20gcGljayB0aGUgc3Rh
cnQgY2VsbCBJRCBiZXR3ZWVuIHN0YXJ0U3ByaXRlQ2VsbElEIGFuZCBlbmRTcHJpdGVDZWxsSUQK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuc3ByaXRlUmFuZG9tU3RhcnRDZWxsID0gZmFsc2U7
CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBWZWN0b3IyIHVzZWQgdG8gbW92ZSB0aGUgcGl2
b3QgKGJ5IGRlZmF1bHQgKDAsMCkpICovCisgICAgICAgIHRoaXMudHJhbnNsYXRpb25QaXZvdCA9
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVj
dG9yMiJdKDAsIDApOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9v
bGVhbiBpbmRpY2F0aW5nIHRoYXQgaG9zdGVkIGFuaW1hdGlvbnMgKGluIHRoZSBzeXN0ZW0uYW5p
bWF0aW9ucyBhcnJheSkgbXVzdCBiZSBzdGFydGVkIHdoZW4gc3lzdGVtLnN0YXJ0KCkgaXMgY2Fs
bGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLmJlZ2luQW5pbWF0aW9uT25TdGFydCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBmcmFtZSB0byBz
dGFydCB0aGUgYW5pbWF0aW9uIGZyb20gd2hlbiBiZWdpbkFuaW1hdGlvbk9uU3RhcnQgaXMgdHJ1
ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5iZWdpbkFuaW1hdGlvbkZyb20gPSAwOworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBmcmFtZSB0byBlbmQgdGhlIGFu
aW1hdGlvbiBvbiB3aGVuIGJlZ2luQW5pbWF0aW9uT25TdGFydCBpcyB0cnVlCisgICAgICAgICAq
LworICAgICAgICB0aGlzLmJlZ2luQW5pbWF0aW9uVG8gPSA2MDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhbmltYXRpb25zIG11
c3QgbG9vcCB3aGVuIGJlZ2luQW5pbWF0aW9uT25TdGFydCBpcyB0cnVlCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLmJlZ2luQW5pbWF0aW9uTG9vcCA9IGZhbHNlOworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBvciBzZXRzIGEgd29ybGQgb2Zmc2V0IGFwcGxpZWQgdG8gYWxsIHBhcnRp
Y2xlcworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy53b3JsZE9mZnNldCA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIDAs
IDApOworICAgICAgICAvKioKKyAgICAgICAgICogWW91IGNhbiB1c2UgZ3Jhdml0eSBpZiB5b3Ug
d2FudCB0byBnaXZlIGFuIG9yaWVudGF0aW9uIHRvIHlvdXIgcGFydGljbGVzLgorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5ncmF2aXR5ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2NvbG9y
R3JhZGllbnRzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2l6ZUdyYWRpZW50cyA9IG51bGw7Cisg
ICAgICAgIHRoaXMuX2xpZmVUaW1lR3JhZGllbnRzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fYW5n
dWxhclNwZWVkR3JhZGllbnRzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdmVsb2NpdHlHcmFkaWVu
dHMgPSBudWxsOworICAgICAgICB0aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fZHJhZ0dyYWRpZW50cyA9IG51bGw7CisgICAgICAgIHRoaXMuX2VtaXRS
YXRlR3JhZGllbnRzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc3RhcnRTaXplR3JhZGllbnRzID0g
bnVsbDsKKyAgICAgICAgdGhpcy5fcmFtcEdyYWRpZW50cyA9IG51bGw7CisgICAgICAgIHRoaXMu
X2NvbG9yUmVtYXBHcmFkaWVudHMgPSBudWxsOworICAgICAgICB0aGlzLl9hbHBoYVJlbWFwR3Jh
ZGllbnRzID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgdGhlIGRlbGF5
IGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgc3RhcnRpbmcgdGhlIHN5c3RlbSAoMCBieSBkZWZhdWx0
KQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zdGFydERlbGF5ID0gMDsKKyAgICAgICAgLyoq
IEdldHMgb3Igc2V0cyBhIHZhbHVlIGluZGljYXRpbmcgdGhlIGRhbXBpbmcgdG8gYXBwbHkgaWYg
dGhlIGxpbWl0IHZlbG9jaXR5IGZhY3RvciBpcyByZWFjaGVkICovCisgICAgICAgIHRoaXMubGlt
aXRWZWxvY2l0eURhbXBpbmcgPSAwLjQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSYW5kb20g
Y29sb3Igb2YgZWFjaCBwYXJ0aWNsZSBhZnRlciBpdCBoYXMgYmVlbiBlbWl0dGVkLCBiZXR3ZWVu
IGNvbG9yMSBhbmQgY29sb3IyIHZlY3RvcnMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuY29s
b3IxID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkNvbG9yNCJdKDEuMCwgMS4wLCAxLjAsIDEuMCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBS
YW5kb20gY29sb3Igb2YgZWFjaCBwYXJ0aWNsZSBhZnRlciBpdCBoYXMgYmVlbiBlbWl0dGVkLCBi
ZXR3ZWVuIGNvbG9yMSBhbmQgY29sb3IyIHZlY3RvcnMKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMuY29sb3IyID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkNvbG9yNCJdKDEuMCwgMS4wLCAxLjAsIDEuMCk7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBDb2xvciB0aGUgcGFydGljbGUgd2lsbCBoYXZlIGF0IHRoZSBlbmQgb2YgaXRzIGxpZmV0
aW1lCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNvbG9yRGVhZCA9IG5ldyBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb2xvcjQiXSgwLCAwLCAwLCAx
LjApOworICAgICAgICAvKioKKyAgICAgICAgICogQW4gb3B0aW9uYWwgbWFzayB0byBmaWx0ZXIg
c29tZSBjb2xvcnMgb3V0IG9mIHRoZSB0ZXh0dXJlLCBvciBmaWx0ZXIgYSBwYXJ0IG9mIHRoZSBh
bHBoYSBjaGFubmVsCisgICAgICAgICAqLworICAgICAgICB0aGlzLnRleHR1cmVNYXNrID0gbmV3
IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbG9yNCJd
KDEuMCwgMS4wLCAxLjAsIDEuMCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRo
aXMuX2lzU3ViRW1pdHRlciA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBv
ciBzZXRzIHRoZSBiaWxsYm9hcmQgbW9kZSB0byB1c2Ugd2hlbiBpc0JpbGxib2FyZEJhc2VkID0g
dHJ1ZS4KKyAgICAgICAgICogVmFsdWUgY2FuIGJlOiBQYXJ0aWNsZVN5c3RlbS5CSUxMQk9BUkRN
T0RFX0FMTCwgUGFydGljbGVTeXN0ZW0uQklMTEJPQVJETU9ERV9ZLCBQYXJ0aWNsZVN5c3RlbS5C
SUxMQk9BUkRNT0RFX1NUUkVUQ0hFRAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5iaWxsYm9h
cmRNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkNvbnN0YW50cyJdLlBBUlRJQ0xFU19CSUxMQk9BUkRNT0RFX0FMTDsKKyAgICAgICAgdGhpcy5f
aXNCaWxsYm9hcmRCYXNlZCA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBMb2NhbCBj
YWNoZSBvZiBkZWZpbmVzIGZvciBpbWFnZSBwcm9jZXNzaW5nLgorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMgPSBuZXcgX01hdGVy
aWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25EZWZpbmVzIl0oKTsKKyAgICAgICAg
dGhpcy5pZCA9IG5hbWU7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgfQorICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLCAibm9pc2VU
ZXh0dXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgdGV4dHVy
ZSB1c2VkIHRvIGFkZCByYW5kb20gbm9pc2UgdG8gcGFydGljbGUgcG9zaXRpb25zCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9ub2lzZVRleHR1cmU7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fbm9pc2VUZXh0dXJlID09PSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX25v
aXNlVGV4dHVyZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fcmVzZXQoKTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VQYXJ0aWNsZVN5c3RlbS5w
cm90b3R5cGUsICJpc0FuaW1hdGlvblNoZWV0RW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIGFuIGFuaW1hdGlvbiBzcHJpdGUgc2hlZXQgaXMg
ZW5hYmxlZCBvciBub3Qgb24gdGhlIHBhcnRpY2xlIHN5c3RlbQorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNBbmltYXRp
b25TaGVldEVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpb25TaGVldEVuYWJsZWQgPT0gdmFs
dWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0aGlzLl9pc0FuaW1hdGlvblNoZWV0RW5hYmxlZCA9IHZhbHVlOworICAgICAgICAgICAgdGhp
cy5fcmVzZXQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0IGhvc3Rp
bmcgc2NlbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgc2NlbmUKKyAgICAgKi8KKyAgICBCYXNlUGFy
dGljbGVTeXN0ZW0ucHJvdG90eXBlLmdldFNjZW5lID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fc2NlbmU7CisgICAgfTsKKyAgICBCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90
eXBlLl9oYXNUYXJnZXRTdG9wRHVyYXRpb25EZXBlbmRhbnRHcmFkaWVudCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICh0aGlzLl9zdGFydFNpemVHcmFkaWVudHMgJiYgdGhpcy5fc3Rh
cnRTaXplR3JhZGllbnRzLmxlbmd0aCA+IDApCisgICAgICAgICAgICB8fCAodGhpcy5fZW1pdFJh
dGVHcmFkaWVudHMgJiYgdGhpcy5fZW1pdFJhdGVHcmFkaWVudHMubGVuZ3RoID4gMCkKKyAgICAg
ICAgICAgIHx8ICh0aGlzLl9saWZlVGltZUdyYWRpZW50cyAmJiB0aGlzLl9saWZlVGltZUdyYWRp
ZW50cy5sZW5ndGggPiAwKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJl
bnQgbGlzdCBvZiBkcmFnIGdyYWRpZW50cy4KKyAgICAgKiBZb3UgbXVzdCB1c2UgYWRkRHJhZ0dy
YWRpZW50IGFuZCByZW1vdmVEcmFnR3JhZGllbnQgdG8gdWRwYXRlIHRoaXMgbGlzdAorICAgICAq
IEByZXR1cm5zIHRoZSBsaXN0IG9mIGRyYWcgZ3JhZGllbnRzCisgICAgICovCisgICAgQmFzZVBh
cnRpY2xlU3lzdGVtLnByb3RvdHlwZS5nZXREcmFnR3JhZGllbnRzID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ0dyYWRpZW50czsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIGN1cnJlbnQgbGlzdCBvZiBsaW1pdCB2ZWxvY2l0eSBncmFkaWVudHMuCisg
ICAgICogWW91IG11c3QgdXNlIGFkZExpbWl0VmVsb2NpdHlHcmFkaWVudCBhbmQgcmVtb3ZlTGlt
aXRWZWxvY2l0eUdyYWRpZW50IHRvIHVkcGF0ZSB0aGlzIGxpc3QKKyAgICAgKiBAcmV0dXJucyB0
aGUgbGlzdCBvZiBsaW1pdCB2ZWxvY2l0eSBncmFkaWVudHMKKyAgICAgKi8KKyAgICBCYXNlUGFy
dGljbGVTeXN0ZW0ucHJvdG90eXBlLmdldExpbWl0VmVsb2NpdHlHcmFkaWVudHMgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBsaXN0IG9mIGNvbG9yIGdyYWRp
ZW50cy4KKyAgICAgKiBZb3UgbXVzdCB1c2UgYWRkQ29sb3JHcmFkaWVudCBhbmQgcmVtb3ZlQ29s
b3JHcmFkaWVudCB0byB1ZHBhdGUgdGhpcyBsaXN0CisgICAgICogQHJldHVybnMgdGhlIGxpc3Qg
b2YgY29sb3IgZ3JhZGllbnRzCisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3Rv
dHlwZS5nZXRDb2xvckdyYWRpZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2NvbG9yR3JhZGllbnRzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3Vy
cmVudCBsaXN0IG9mIHNpemUgZ3JhZGllbnRzLgorICAgICAqIFlvdSBtdXN0IHVzZSBhZGRTaXpl
R3JhZGllbnQgYW5kIHJlbW92ZVNpemVHcmFkaWVudCB0byB1ZHBhdGUgdGhpcyBsaXN0CisgICAg
ICogQHJldHVybnMgdGhlIGxpc3Qgb2Ygc2l6ZSBncmFkaWVudHMKKyAgICAgKi8KKyAgICBCYXNl
UGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmdldFNpemVHcmFkaWVudHMgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLl9zaXplR3JhZGllbnRzOworICAgIH07CisgICAgLyoqCisg
ICAgICogR2V0cyB0aGUgY3VycmVudCBsaXN0IG9mIGNvbG9yIHJlbWFwIGdyYWRpZW50cy4KKyAg
ICAgKiBZb3UgbXVzdCB1c2UgYWRkQ29sb3JSZW1hcEdyYWRpZW50IGFuZCByZW1vdmVDb2xvclJl
bWFwR3JhZGllbnQgdG8gdWRwYXRlIHRoaXMgbGlzdAorICAgICAqIEByZXR1cm5zIHRoZSBsaXN0
IG9mIGNvbG9yIHJlbWFwIGdyYWRpZW50cworICAgICAqLworICAgIEJhc2VQYXJ0aWNsZVN5c3Rl
bS5wcm90b3R5cGUuZ2V0Q29sb3JSZW1hcEdyYWRpZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2NvbG9yUmVtYXBHcmFkaWVudHM7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXRzIHRoZSBjdXJyZW50IGxpc3Qgb2YgYWxwaGEgcmVtYXAgZ3JhZGllbnRzLgorICAg
ICAqIFlvdSBtdXN0IHVzZSBhZGRBbHBoYVJlbWFwR3JhZGllbnQgYW5kIHJlbW92ZUFscGhhUmVt
YXBHcmFkaWVudCB0byB1ZHBhdGUgdGhpcyBsaXN0CisgICAgICogQHJldHVybnMgdGhlIGxpc3Qg
b2YgYWxwaGEgcmVtYXAgZ3JhZGllbnRzCisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVt
LnByb3RvdHlwZS5nZXRBbHBoYVJlbWFwR3JhZGllbnRzID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5fYWxwaGFSZW1hcEdyYWRpZW50czsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEdldHMgdGhlIGN1cnJlbnQgbGlzdCBvZiBsaWZlIHRpbWUgZ3JhZGllbnRzLgorICAgICAq
IFlvdSBtdXN0IHVzZSBhZGRMaWZlVGltZUdyYWRpZW50IGFuZCByZW1vdmVMaWZlVGltZUdyYWRp
ZW50IHRvIHVkcGF0ZSB0aGlzIGxpc3QKKyAgICAgKiBAcmV0dXJucyB0aGUgbGlzdCBvZiBsaWZl
IHRpbWUgZ3JhZGllbnRzCisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlw
ZS5nZXRMaWZlVGltZUdyYWRpZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2xpZmVUaW1lR3JhZGllbnRzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
Y3VycmVudCBsaXN0IG9mIGFuZ3VsYXIgc3BlZWQgZ3JhZGllbnRzLgorICAgICAqIFlvdSBtdXN0
IHVzZSBhZGRBbmd1bGFyU3BlZWRHcmFkaWVudCBhbmQgcmVtb3ZlQW5ndWxhclNwZWVkR3JhZGll
bnQgdG8gdWRwYXRlIHRoaXMgbGlzdAorICAgICAqIEByZXR1cm5zIHRoZSBsaXN0IG9mIGFuZ3Vs
YXIgc3BlZWQgZ3JhZGllbnRzCisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3Rv
dHlwZS5nZXRBbmd1bGFyU3BlZWRHcmFkaWVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHM7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBHZXRzIHRoZSBjdXJyZW50IGxpc3Qgb2YgdmVsb2NpdHkgZ3JhZGllbnRzLgorICAgICAqIFlv
dSBtdXN0IHVzZSBhZGRWZWxvY2l0eUdyYWRpZW50IGFuZCByZW1vdmVWZWxvY2l0eUdyYWRpZW50
IHRvIHVkcGF0ZSB0aGlzIGxpc3QKKyAgICAgKiBAcmV0dXJucyB0aGUgbGlzdCBvZiB2ZWxvY2l0
eSBncmFkaWVudHMKKyAgICAgKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmdl
dFZlbG9jaXR5R3JhZGllbnRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5f
dmVsb2NpdHlHcmFkaWVudHM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJy
ZW50IGxpc3Qgb2Ygc3RhcnQgc2l6ZSBncmFkaWVudHMuCisgICAgICogWW91IG11c3QgdXNlIGFk
ZFN0YXJ0U2l6ZUdyYWRpZW50IGFuZCByZW1vdmVTdGFydFNpemVHcmFkaWVudCB0byB1ZHBhdGUg
dGhpcyBsaXN0CisgICAgICogQHJldHVybnMgdGhlIGxpc3Qgb2Ygc3RhcnQgc2l6ZSBncmFkaWVu
dHMKKyAgICAgKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmdldFN0YXJ0U2l6
ZUdyYWRpZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2l6
ZUdyYWRpZW50czsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgbGlz
dCBvZiBlbWl0IHJhdGUgZ3JhZGllbnRzLgorICAgICAqIFlvdSBtdXN0IHVzZSBhZGRFbWl0UmF0
ZUdyYWRpZW50IGFuZCByZW1vdmVFbWl0UmF0ZUdyYWRpZW50IHRvIHVkcGF0ZSB0aGlzIGxpc3QK
KyAgICAgKiBAcmV0dXJucyB0aGUgbGlzdCBvZiBlbWl0IHJhdGUgZ3JhZGllbnRzCisgICAgICov
CisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5nZXRFbWl0UmF0ZUdyYWRpZW50cyA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VtaXRSYXRlR3JhZGllbnRzOwor
ICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2VQYXJ0aWNsZVN5c3RlbS5wcm90
b3R5cGUsICJkaXJlY3Rpb24xIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogUmFuZG9tIGRp
cmVjdGlvbiBvZiBlYWNoIHBhcnRpY2xlIGFmdGVyIGl0IGhhcyBiZWVuIGVtaXR0ZWQsIGJldHdl
ZW4gZGlyZWN0aW9uMSBhbmQgZGlyZWN0aW9uMiB2ZWN0b3JzLgorICAgICAgICAgKiBUaGlzIG9u
bHkgd29ya3Mgd2hlbiBwYXJ0aWNsZUVtaXR0ZXJUeXBzIGlzIGEgQm94UGFydGljbGVFbWl0dGVy
CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLnBhcnRpY2xlRW1pdHRlclR5cGUuZGlyZWN0aW9uMSkgeworICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLnBhcnRpY2xlRW1pdHRlclR5cGUuZGlyZWN0aW9uMTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnBhcnRpY2xlRW1pdHRl
clR5cGUuZGlyZWN0aW9uMSkgeworICAgICAgICAgICAgICAgIHRoaXMucGFydGljbGVFbWl0dGVy
VHlwZS5kaXJlY3Rpb24xID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBl
LCAiZGlyZWN0aW9uMiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJhbmRvbSBkaXJlY3Rp
b24gb2YgZWFjaCBwYXJ0aWNsZSBhZnRlciBpdCBoYXMgYmVlbiBlbWl0dGVkLCBiZXR3ZWVuIGRp
cmVjdGlvbjEgYW5kIGRpcmVjdGlvbjIgdmVjdG9ycy4KKyAgICAgICAgICogVGhpcyBvbmx5IHdv
cmtzIHdoZW4gcGFydGljbGVFbWl0dGVyVHlwcyBpcyBhIEJveFBhcnRpY2xlRW1pdHRlcgorICAg
ICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhp
cy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLmRpcmVjdGlvbjIpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLmRpcmVjdGlvbjI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBl
LmRpcmVjdGlvbjIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2xlRW1pdHRlclR5cGUu
ZGlyZWN0aW9uMiA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZSwgIm1p
bkVtaXRCb3giLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNaW5pbXVtIGJveCBwb2ludCBh
cm91bmQgb3VyIGVtaXR0ZXIuIE91ciBlbWl0dGVyIGlzIHRoZSBjZW50ZXIgb2YgcGFydGljbGVz
IHNvdXJjZSwgYnV0IGlmIHlvdSB3YW50IHlvdXIgcGFydGljbGVzIHRvIGVtaXQgZnJvbSBtb3Jl
IHRoYW4gb25lIHBvaW50LCB0aGVuIHlvdSBjYW4gdGVsbCBpdCB0byBkbyBzby4KKyAgICAgICAg
ICogVGhpcyBvbmx5IHdvcmtzIHdoZW4gcGFydGljbGVFbWl0dGVyVHlwcyBpcyBhIEJveFBhcnRp
Y2xlRW1pdHRlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLm1pbkVtaXRCb3gpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLm1pbkVtaXRCb3g7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIH0sCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5wYXJ0
aWNsZUVtaXR0ZXJUeXBlLm1pbkVtaXRCb3gpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnBhcnRp
Y2xlRW1pdHRlclR5cGUubWluRW1pdEJveCA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzZVBhcnRpY2xlU3lzdGVt
LnByb3RvdHlwZSwgIm1heEVtaXRCb3giLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNYXhp
bXVtIGJveCBwb2ludCBhcm91bmQgb3VyIGVtaXR0ZXIuIE91ciBlbWl0dGVyIGlzIHRoZSBjZW50
ZXIgb2YgcGFydGljbGVzIHNvdXJjZSwgYnV0IGlmIHlvdSB3YW50IHlvdXIgcGFydGljbGVzIHRv
IGVtaXQgZnJvbSBtb3JlIHRoYW4gb25lIHBvaW50LCB0aGVuIHlvdSBjYW4gdGVsbCBpdCB0byBk
byBzby4KKyAgICAgICAgICogVGhpcyBvbmx5IHdvcmtzIHdoZW4gcGFydGljbGVFbWl0dGVyVHlw
cyBpcyBhIEJveFBhcnRpY2xlRW1pdHRlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLm1heEVt
aXRCb3gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBl
Lm1heEVtaXRCb3g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLm1heEVtaXRCb3gpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLnBhcnRpY2xlRW1pdHRlclR5cGUubWF4RW1pdEJveCA9IHZhbHVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmFz
ZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZSwgImlzQmlsbGJvYXJkQmFzZWQiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhl
IHBhcnRpY2xlcyBtdXN0IGJlIHJlbmRlcmVkIGFzIGJpbGxib2FyZCBvciBhbGlnbmVkIHdpdGgg
dGhlIGRpcmVjdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5faXNCaWxsYm9hcmRCYXNlZDsKKyAgICAgICAgfSwKKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc0Jp
bGxib2FyZEJhc2VkID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2lzQmlsbGJvYXJkQmFzZWQgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHRoaXMuX3Jlc2V0KCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLCAiaW1hZ2VQcm9jZXNz
aW5nQ29uZmlndXJhdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGlt
YWdlIHByb2Nlc3NpbmcgY29uZmlndXJhdGlvbiB1c2VkIGVpdGhlciBpbiB0aGlzIG1hdGVyaWFs
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbjsKKyAgICAgICAgfSwKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIERlZmF1bHQgaW1hZ2UgcHJvY2Vzc2luZyBj
b25maWd1cmF0aW9uIHVzZWQgZWl0aGVyIGluIHRoZSB0aGlzIG1hdGVyaWFsLgorICAgICAgICAg
KgorICAgICAgICAgKiBJZiBzZXRzIHRvIG51bGwsIHRoZSBzY2VuZSBvbmUgaXMgaW4gdXNlLgor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
IHRoaXMuX2F0dGFjaEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24odmFsdWUpOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyBhIG5ldyBpbWFnZSBwcm9jZXNz
aW5nIGNvbmZpZ3VyYXRpb24gdG8gdGhlIFN0YW5kYXJkIE1hdGVyaWFsLgorICAgICAqIEBwYXJh
bSBjb25maWd1cmF0aW9uCisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlw
ZS5fYXR0YWNoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uIChjb25maWd1
cmF0aW9uKSB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09PSB0aGlzLl9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgLy8gUGljayB0aGUgc2NlbmUgY29uZmlndXJhdGlvbiBpZiBuZWVkZWQuCisgICAgICAg
IGlmICghY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbiA9IHRoaXMuX3NjZW5lLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb247
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqIEBoaWRkZW4gKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9yZXNl
dCA9IGZ1bmN0aW9uICgpIHsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgQmFzZVBh
cnRpY2xlU3lzdGVtLnByb3RvdHlwZS5fcmVtb3ZlR3JhZGllbnRBbmRUZXh0dXJlID0gZnVuY3Rp
b24gKGdyYWRpZW50LCBncmFkaWVudHMsIHRleHR1cmUpIHsKKyAgICAgICAgaWYgKCFncmFkaWVu
dHMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHZhciBp
bmRleCA9IDA7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgZ3JhZGllbnRzXzEgPSBncmFkaWVu
dHM7IF9pIDwgZ3JhZGllbnRzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgdmFs
dWVHcmFkaWVudCA9IGdyYWRpZW50c18xW19pXTsKKyAgICAgICAgICAgIGlmICh2YWx1ZUdyYWRp
ZW50LmdyYWRpZW50ID09PSBncmFkaWVudCkgeworICAgICAgICAgICAgICAgIGdyYWRpZW50cy5z
cGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZSkgewor
ICAgICAgICAgICAgdGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgUG9pbnQgRW1pdHRlciBm
b3IgdGhlIHBhcnRpY2xlIHN5c3RlbSAoZW1pdHMgZGlyZWN0bHkgZnJvbSB0aGUgZW1pdHRlciBw
b3NpdGlvbikKKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uMSBQYXJ0aWNsZXMgYXJlIGVtaXR0ZWQg
YmV0d2VlbiB0aGUgZGlyZWN0aW9uMSBhbmQgZGlyZWN0aW9uMiBmcm9tIHdpdGhpbiB0aGUgYm94
CisgICAgICogQHBhcmFtIGRpcmVjdGlvbjIgUGFydGljbGVzIGFyZSBlbWl0dGVkIGJldHdlZW4g
dGhlIGRpcmVjdGlvbjEgYW5kIGRpcmVjdGlvbjIgZnJvbSB3aXRoaW4gdGhlIGJveAorICAgICAq
IEByZXR1cm5zIHRoZSBlbWl0dGVyCisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnBy
b3RvdHlwZS5jcmVhdGVQb2ludEVtaXR0ZXIgPSBmdW5jdGlvbiAoZGlyZWN0aW9uMSwgZGlyZWN0
aW9uMikgeworICAgICAgICB2YXIgcGFydGljbGVFbWl0dGVyID0gbmV3IF9QYXJ0aWNsZXNfRW1p
dHRlclR5cGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBvaW50UGFydGlj
bGVFbWl0dGVyIl0oKTsKKyAgICAgICAgcGFydGljbGVFbWl0dGVyLmRpcmVjdGlvbjEgPSBkaXJl
Y3Rpb24xOworICAgICAgICBwYXJ0aWNsZUVtaXR0ZXIuZGlyZWN0aW9uMiA9IGRpcmVjdGlvbjI7
CisgICAgICAgIHRoaXMucGFydGljbGVFbWl0dGVyVHlwZSA9IHBhcnRpY2xlRW1pdHRlcjsKKyAg
ICAgICAgcmV0dXJuIHBhcnRpY2xlRW1pdHRlcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBIZW1pc3BoZXJlIEVtaXR0ZXIgZm9yIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gKGVtaXRz
IGFsb25nIHRoZSBoZW1pc3BoZXJlIHJhZGl1cykKKyAgICAgKiBAcGFyYW0gcmFkaXVzIFRoZSBy
YWRpdXMgb2YgdGhlIGhlbWlzcGhlcmUgdG8gZW1pdCBmcm9tCisgICAgICogQHBhcmFtIHJhZGl1
c1JhbmdlIFRoZSByYW5nZSBvZiB0aGUgaGVtaXNwaGVyZSB0byBlbWl0IGZyb20gWzAtMV0gMCBT
dXJmYWNlIE9ubHksIDEgRW50aXJlIFJhZGl1cworICAgICAqIEByZXR1cm5zIHRoZSBlbWl0dGVy
CisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5jcmVhdGVIZW1pc3Bo
ZXJpY0VtaXR0ZXIgPSBmdW5jdGlvbiAocmFkaXVzLCByYWRpdXNSYW5nZSkgeworICAgICAgICBp
ZiAocmFkaXVzID09PSB2b2lkIDApIHsgcmFkaXVzID0gMTsgfQorICAgICAgICBpZiAocmFkaXVz
UmFuZ2UgPT09IHZvaWQgMCkgeyByYWRpdXNSYW5nZSA9IDE7IH0KKyAgICAgICAgdmFyIHBhcnRp
Y2xlRW1pdHRlciA9IG5ldyBfUGFydGljbGVzX0VtaXR0ZXJUeXBlc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJIZW1pc3BoZXJpY1BhcnRpY2xlRW1pdHRlciJdKHJhZGl1cywg
cmFkaXVzUmFuZ2UpOworICAgICAgICB0aGlzLnBhcnRpY2xlRW1pdHRlclR5cGUgPSBwYXJ0aWNs
ZUVtaXR0ZXI7CisgICAgICAgIHJldHVybiBwYXJ0aWNsZUVtaXR0ZXI7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgU3BoZXJlIEVtaXR0ZXIgZm9yIHRoZSBwYXJ0aWNsZSBzeXN0
ZW0gKGVtaXRzIGFsb25nIHRoZSBzcGhlcmUgcmFkaXVzKQorICAgICAqIEBwYXJhbSByYWRpdXMg
VGhlIHJhZGl1cyBvZiB0aGUgc3BoZXJlIHRvIGVtaXQgZnJvbQorICAgICAqIEBwYXJhbSByYWRp
dXNSYW5nZSBUaGUgcmFuZ2Ugb2YgdGhlIHNwaGVyZSB0byBlbWl0IGZyb20gWzAtMV0gMCBTdXJm
YWNlIE9ubHksIDEgRW50aXJlIFJhZGl1cworICAgICAqIEByZXR1cm5zIHRoZSBlbWl0dGVyCisg
ICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5jcmVhdGVTcGhlcmVFbWl0
dGVyID0gZnVuY3Rpb24gKHJhZGl1cywgcmFkaXVzUmFuZ2UpIHsKKyAgICAgICAgaWYgKHJhZGl1
cyA9PT0gdm9pZCAwKSB7IHJhZGl1cyA9IDE7IH0KKyAgICAgICAgaWYgKHJhZGl1c1JhbmdlID09
PSB2b2lkIDApIHsgcmFkaXVzUmFuZ2UgPSAxOyB9CisgICAgICAgIHZhciBwYXJ0aWNsZUVtaXR0
ZXIgPSBuZXcgX1BhcnRpY2xlc19FbWl0dGVyVHlwZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siU3BoZXJlUGFydGljbGVFbWl0dGVyIl0ocmFkaXVzLCByYWRpdXNSYW5nZSk7
CisgICAgICAgIHRoaXMucGFydGljbGVFbWl0dGVyVHlwZSA9IHBhcnRpY2xlRW1pdHRlcjsKKyAg
ICAgICAgcmV0dXJuIHBhcnRpY2xlRW1pdHRlcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBEaXJlY3RlZCBTcGhlcmUgRW1pdHRlciBmb3IgdGhlIHBhcnRpY2xlIHN5c3RlbSAo
ZW1pdHMgYmV0d2VlbiBkaXJlY3Rpb24xIGFuZCBkaXJlY3Rpb24yKQorICAgICAqIEBwYXJhbSBy
YWRpdXMgVGhlIHJhZGl1cyBvZiB0aGUgc3BoZXJlIHRvIGVtaXQgZnJvbQorICAgICAqIEBwYXJh
bSBkaXJlY3Rpb24xIFBhcnRpY2xlcyBhcmUgZW1pdHRlZCBiZXR3ZWVuIHRoZSBkaXJlY3Rpb24x
IGFuZCBkaXJlY3Rpb24yIGZyb20gd2l0aGluIHRoZSBzcGhlcmUKKyAgICAgKiBAcGFyYW0gZGly
ZWN0aW9uMiBQYXJ0aWNsZXMgYXJlIGVtaXR0ZWQgYmV0d2VlbiB0aGUgZGlyZWN0aW9uMSBhbmQg
ZGlyZWN0aW9uMiBmcm9tIHdpdGhpbiB0aGUgc3BoZXJlCisgICAgICogQHJldHVybnMgdGhlIGVt
aXR0ZXIKKyAgICAgKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmNyZWF0ZURp
cmVjdGVkU3BoZXJlRW1pdHRlciA9IGZ1bmN0aW9uIChyYWRpdXMsIGRpcmVjdGlvbjEsIGRpcmVj
dGlvbjIpIHsKKyAgICAgICAgaWYgKHJhZGl1cyA9PT0gdm9pZCAwKSB7IHJhZGl1cyA9IDE7IH0K
KyAgICAgICAgaWYgKGRpcmVjdGlvbjEgPT09IHZvaWQgMCkgeyBkaXJlY3Rpb24xID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0o
MCwgMS4wLCAwKTsgfQorICAgICAgICBpZiAoZGlyZWN0aW9uMiA9PT0gdm9pZCAwKSB7IGRpcmVj
dGlvbjIgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlZlY3RvcjMiXSgwLCAxLjAsIDApOyB9CisgICAgICAgIHZhciBwYXJ0aWNsZUVtaXR0ZXIg
PSBuZXcgX1BhcnRpY2xlc19FbWl0dGVyVHlwZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiXShyYWRpdXMsIGRpcmVjdGlv
bjEsIGRpcmVjdGlvbjIpOworICAgICAgICB0aGlzLnBhcnRpY2xlRW1pdHRlclR5cGUgPSBwYXJ0
aWNsZUVtaXR0ZXI7CisgICAgICAgIHJldHVybiBwYXJ0aWNsZUVtaXR0ZXI7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgQ3lsaW5kZXIgRW1pdHRlciBmb3IgdGhlIHBhcnRpY2xl
IHN5c3RlbSAoZW1pdHMgZnJvbSB0aGUgY3lsaW5kZXIgdG8gdGhlIHBhcnRpY2xlIHBvc2l0aW9u
KQorICAgICAqIEBwYXJhbSByYWRpdXMgVGhlIHJhZGl1cyBvZiB0aGUgZW1pc3Npb24gY3lsaW5k
ZXIKKyAgICAgKiBAcGFyYW0gaGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIGVtaXNzaW9uIGN5bGlu
ZGVyCisgICAgICogQHBhcmFtIHJhZGl1c1JhbmdlIFRoZSByYW5nZSBvZiBlbWlzc2lvbiBbMC0x
XSAwIFN1cmZhY2Ugb25seSwgMSBFbnRpcmUgUmFkaXVzCisgICAgICogQHBhcmFtIGRpcmVjdGlv
blJhbmRvbWl6ZXIgSG93IG11Y2ggdG8gcmFuZG9taXplIHRoZSBwYXJ0aWNsZSBkaXJlY3Rpb24g
WzAtMV0KKyAgICAgKiBAcmV0dXJucyB0aGUgZW1pdHRlcgorICAgICAqLworICAgIEJhc2VQYXJ0
aWNsZVN5c3RlbS5wcm90b3R5cGUuY3JlYXRlQ3lsaW5kZXJFbWl0dGVyID0gZnVuY3Rpb24gKHJh
ZGl1cywgaGVpZ2h0LCByYWRpdXNSYW5nZSwgZGlyZWN0aW9uUmFuZG9taXplcikgeworICAgICAg
ICBpZiAocmFkaXVzID09PSB2b2lkIDApIHsgcmFkaXVzID0gMTsgfQorICAgICAgICBpZiAoaGVp
Z2h0ID09PSB2b2lkIDApIHsgaGVpZ2h0ID0gMTsgfQorICAgICAgICBpZiAocmFkaXVzUmFuZ2Ug
PT09IHZvaWQgMCkgeyByYWRpdXNSYW5nZSA9IDE7IH0KKyAgICAgICAgaWYgKGRpcmVjdGlvblJh
bmRvbWl6ZXIgPT09IHZvaWQgMCkgeyBkaXJlY3Rpb25SYW5kb21pemVyID0gMDsgfQorICAgICAg
ICB2YXIgcGFydGljbGVFbWl0dGVyID0gbmV3IF9QYXJ0aWNsZXNfRW1pdHRlclR5cGVzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkN5bGluZGVyUGFydGljbGVFbWl0dGVyIl0o
cmFkaXVzLCBoZWlnaHQsIHJhZGl1c1JhbmdlLCBkaXJlY3Rpb25SYW5kb21pemVyKTsKKyAgICAg
ICAgdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlID0gcGFydGljbGVFbWl0dGVyOworICAgICAgICBy
ZXR1cm4gcGFydGljbGVFbWl0dGVyOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBh
IERpcmVjdGVkIEN5bGluZGVyIEVtaXR0ZXIgZm9yIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gKGVtaXRz
IGJldHdlZW4gZGlyZWN0aW9uMSBhbmQgZGlyZWN0aW9uMikKKyAgICAgKiBAcGFyYW0gcmFkaXVz
IFRoZSByYWRpdXMgb2YgdGhlIGN5bGluZGVyIHRvIGVtaXQgZnJvbQorICAgICAqIEBwYXJhbSBo
ZWlnaHQgVGhlIGhlaWdodCBvZiB0aGUgZW1pc3Npb24gY3lsaW5kZXIKKyAgICAgKiBAcGFyYW0g
cmFkaXVzUmFuZ2UgdGhlIHJhbmdlIG9mIHRoZSBlbWlzc2lvbiBjeWxpbmRlciBbMC0xXSAwIFN1
cmZhY2Ugb25seSwgMSBFbnRpcmUgUmFkaXVzICgxIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFt
IGRpcmVjdGlvbjEgUGFydGljbGVzIGFyZSBlbWl0dGVkIGJldHdlZW4gdGhlIGRpcmVjdGlvbjEg
YW5kIGRpcmVjdGlvbjIgZnJvbSB3aXRoaW4gdGhlIGN5bGluZGVyCisgICAgICogQHBhcmFtIGRp
cmVjdGlvbjIgUGFydGljbGVzIGFyZSBlbWl0dGVkIGJldHdlZW4gdGhlIGRpcmVjdGlvbjEgYW5k
IGRpcmVjdGlvbjIgZnJvbSB3aXRoaW4gdGhlIGN5bGluZGVyCisgICAgICogQHJldHVybnMgdGhl
IGVtaXR0ZXIKKyAgICAgKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmNyZWF0
ZURpcmVjdGVkQ3lsaW5kZXJFbWl0dGVyID0gZnVuY3Rpb24gKHJhZGl1cywgaGVpZ2h0LCByYWRp
dXNSYW5nZSwgZGlyZWN0aW9uMSwgZGlyZWN0aW9uMikgeworICAgICAgICBpZiAocmFkaXVzID09
PSB2b2lkIDApIHsgcmFkaXVzID0gMTsgfQorICAgICAgICBpZiAoaGVpZ2h0ID09PSB2b2lkIDAp
IHsgaGVpZ2h0ID0gMTsgfQorICAgICAgICBpZiAocmFkaXVzUmFuZ2UgPT09IHZvaWQgMCkgeyBy
YWRpdXNSYW5nZSA9IDE7IH0KKyAgICAgICAgaWYgKGRpcmVjdGlvbjEgPT09IHZvaWQgMCkgeyBk
aXJlY3Rpb24xID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJWZWN0b3IzIl0oMCwgMS4wLCAwKTsgfQorICAgICAgICBpZiAoZGlyZWN0aW9uMiA9
PT0gdm9pZCAwKSB7IGRpcmVjdGlvbjIgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAxLjAsIDApOyB9CisgICAgICAgIHZh
ciBwYXJ0aWNsZUVtaXR0ZXIgPSBuZXcgX1BhcnRpY2xlc19FbWl0dGVyVHlwZXNfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ3lsaW5kZXJEaXJlY3RlZFBhcnRpY2xlRW1pdHRl
ciJdKHJhZGl1cywgaGVpZ2h0LCByYWRpdXNSYW5nZSwgZGlyZWN0aW9uMSwgZGlyZWN0aW9uMik7
CisgICAgICAgIHRoaXMucGFydGljbGVFbWl0dGVyVHlwZSA9IHBhcnRpY2xlRW1pdHRlcjsKKyAg
ICAgICAgcmV0dXJuIHBhcnRpY2xlRW1pdHRlcjsKKyAgICB9OworICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBDb25lIEVtaXR0ZXIgZm9yIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gKGVtaXRzIGZyb20g
dGhlIGNvbmUgdG8gdGhlIHBhcnRpY2xlIHBvc2l0aW9uKQorICAgICAqIEBwYXJhbSByYWRpdXMg
VGhlIHJhZGl1cyBvZiB0aGUgY29uZSB0byBlbWl0IGZyb20KKyAgICAgKiBAcGFyYW0gYW5nbGUg
VGhlIGJhc2UgYW5nbGUgb2YgdGhlIGNvbmUKKyAgICAgKiBAcmV0dXJucyB0aGUgZW1pdHRlcgor
ICAgICAqLworICAgIEJhc2VQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuY3JlYXRlQ29uZUVtaXR0
ZXIgPSBmdW5jdGlvbiAocmFkaXVzLCBhbmdsZSkgeworICAgICAgICBpZiAocmFkaXVzID09PSB2
b2lkIDApIHsgcmFkaXVzID0gMTsgfQorICAgICAgICBpZiAoYW5nbGUgPT09IHZvaWQgMCkgeyBh
bmdsZSA9IE1hdGguUEkgLyA0OyB9CisgICAgICAgIHZhciBwYXJ0aWNsZUVtaXR0ZXIgPSBuZXcg
X1BhcnRpY2xlc19FbWl0dGVyVHlwZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQ29uZVBhcnRpY2xlRW1pdHRlciJdKHJhZGl1cywgYW5nbGUpOworICAgICAgICB0aGlzLnBh
cnRpY2xlRW1pdHRlclR5cGUgPSBwYXJ0aWNsZUVtaXR0ZXI7CisgICAgICAgIHJldHVybiBwYXJ0
aWNsZUVtaXR0ZXI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgQm94IEVtaXR0
ZXIgZm9yIHRoZSBwYXJ0aWNsZSBzeXN0ZW0uIChlbWl0cyBiZXR3ZWVuIGRpcmVjdGlvbjEgYW5k
IGRpcmVjdGlvbjIgZnJvbSB3aXRoaW5nIHRoZSBib3ggZGVmaW5lZCBieSBtaW5FbWl0Qm94IGFu
ZCBtYXhFbWl0Qm94KQorICAgICAqIEBwYXJhbSBkaXJlY3Rpb24xIFBhcnRpY2xlcyBhcmUgZW1p
dHRlZCBiZXR3ZWVuIHRoZSBkaXJlY3Rpb24xIGFuZCBkaXJlY3Rpb24yIGZyb20gd2l0aGluIHRo
ZSBib3gKKyAgICAgKiBAcGFyYW0gZGlyZWN0aW9uMiBQYXJ0aWNsZXMgYXJlIGVtaXR0ZWQgYmV0
d2VlbiB0aGUgZGlyZWN0aW9uMSBhbmQgZGlyZWN0aW9uMiBmcm9tIHdpdGhpbiB0aGUgYm94Cisg
ICAgICogQHBhcmFtIG1pbkVtaXRCb3ggUGFydGljbGVzIGFyZSBlbWl0dGVkIGZyb20gdGhlIGJv
eCBiZXR3ZWVuIG1pbkVtaXRCb3ggYW5kIG1heEVtaXRCb3gKKyAgICAgKiBAcGFyYW0gbWF4RW1p
dEJveCAgUGFydGljbGVzIGFyZSBlbWl0dGVkIGZyb20gdGhlIGJveCBiZXR3ZWVuIG1pbkVtaXRC
b3ggYW5kIG1heEVtaXRCb3gKKyAgICAgKiBAcmV0dXJucyB0aGUgZW1pdHRlcgorICAgICAqLwor
ICAgIEJhc2VQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuY3JlYXRlQm94RW1pdHRlciA9IGZ1bmN0
aW9uIChkaXJlY3Rpb24xLCBkaXJlY3Rpb24yLCBtaW5FbWl0Qm94LCBtYXhFbWl0Qm94KSB7Cisg
ICAgICAgIHZhciBwYXJ0aWNsZUVtaXR0ZXIgPSBuZXcgX1BhcnRpY2xlc19FbWl0dGVyVHlwZXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQm94UGFydGljbGVFbWl0dGVyIl0o
KTsKKyAgICAgICAgdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlID0gcGFydGljbGVFbWl0dGVyOwor
ICAgICAgICB0aGlzLmRpcmVjdGlvbjEgPSBkaXJlY3Rpb24xOworICAgICAgICB0aGlzLmRpcmVj
dGlvbjIgPSBkaXJlY3Rpb24yOworICAgICAgICB0aGlzLm1pbkVtaXRCb3ggPSBtaW5FbWl0Qm94
OworICAgICAgICB0aGlzLm1heEVtaXRCb3ggPSBtYXhFbWl0Qm94OworICAgICAgICByZXR1cm4g
cGFydGljbGVFbWl0dGVyOworICAgIH07CisgICAgLyoqCisgICAgICogU291cmNlIGNvbG9yIGlz
IGFkZGVkIHRvIHRoZSBkZXN0aW5hdGlvbiBjb2xvciB3aXRob3V0IGFscGhhIGFmZmVjdGluZyB0
aGUgcmVzdWx0CisgICAgICovCisgICAgQmFzZVBhcnRpY2xlU3lzdGVtLkJMRU5ETU9ERV9PTkVP
TkUgPSAwOworICAgIC8qKgorICAgICAqIEJsZW5kIGN1cnJlbnQgY29sb3IgYW5kIHBhcnRpY2xl
IGNvbG9yIHVzaW5nIHBhcnRpY2xl4oCZcyBhbHBoYQorICAgICAqLworICAgIEJhc2VQYXJ0aWNs
ZVN5c3RlbS5CTEVORE1PREVfU1RBTkRBUkQgPSAxOworICAgIC8qKgorICAgICAqIEFkZCBjdXJy
ZW50IGNvbG9yIGFuZCBwYXJ0aWNsZSBjb2xvciBtdWx0aXBsaWVkIGJ5IHBhcnRpY2xl4oCZcyBh
bHBoYQorICAgICAqLworICAgIEJhc2VQYXJ0aWNsZVN5c3RlbS5CTEVORE1PREVfQUREID0gMjsK
KyAgICAvKioKKyAgICAgKiBNdWx0aXBseSBjdXJyZW50IGNvbG9yIHdpdGggcGFydGljbGUgY29s
b3IKKyAgICAgKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX01VTFRJUExZID0g
MzsKKyAgICAvKioKKyAgICAgKiBNdWx0aXBseSBjdXJyZW50IGNvbG9yIHdpdGggcGFydGljbGUg
Y29sb3IgdGhlbiBhZGQgY3VycmVudCBjb2xvciBhbmQgcGFydGljbGUgY29sb3IgbXVsdGlwbGll
ZCBieSBwYXJ0aWNsZeKAmXMgYWxwaGEKKyAgICAgKi8KKyAgICBCYXNlUGFydGljbGVTeXN0ZW0u
QkxFTkRNT0RFX01VTFRJUExZQUREID0gNDsKKyAgICByZXR1cm4gQmFzZVBhcnRpY2xlU3lzdGVt
OworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QYXJ0aWNsZXMvZ3B1UGFydGlj
bGVTeXN0ZW0udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vUGFydGljbGVzL2dwdVBhcnRpY2xlU3lzdGVtLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogR1BVUGFydGljbGVTeXN0ZW0gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiR1BVUGFydGljbGVTeXN0ZW0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIEdQVVBhcnRpY2xl
U3lzdGVtOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25v
ZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01pc2MvZ3JhZGllbnRzICovICIuL01pc2MvZ3JhZGllbnRzLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNl
cnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0
aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnNjYWxhciAq
LyAiLi9NYXRocy9tYXRoLnNjYWxhci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZVBhcnRpY2xlU3lzdGVtX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jhc2VQYXJ0aWNsZVN5
c3RlbSAqLyAiLi9QYXJ0aWNsZXMvYmFzZVBhcnRpY2xlU3lzdGVtLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3BhcnRpY2xlU3lzdGVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhcnRpY2xlU3lzdGVtICovICIuL1BhcnRp
Y2xlcy9wYXJ0aWNsZVN5c3RlbS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9QYXJ0
aWNsZXNfRW1pdHRlclR5cGVzX2JveFBhcnRpY2xlRW1pdHRlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUGFydGljbGVzL0VtaXR0ZXJU
eXBlcy9ib3hQYXJ0aWNsZUVtaXR0ZXIgKi8gIi4vUGFydGljbGVzL0VtaXR0ZXJUeXBlcy9ib3hQ
YXJ0aWNsZUVtaXR0ZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMv
bWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbEhl
bHBlciAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWxIZWxwZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25fX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRl
cmlhbHMvaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAqLyAiLi9NYXRlcmlhbHMvaW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICov
ICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yYXdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVz
L3Jhd1RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3Jhd1RleHR1cmUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0
YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9Fbmdp
bmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVl
cENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01pc2MvZGVlcENvcGllciAqLyAiLi9NaXNjL2RlZXBDb3BpZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19ncHVVcGRhdGVQYXJ0aWNsZXNfZnJhZ21l
bnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9TaGFkZXJzL2dwdVVwZGF0ZVBhcnRpY2xlcy5mcmFnbWVudCAqLyAiLi9TaGFkZXJzL2dw
dVVwZGF0ZVBhcnRpY2xlcy5mcmFnbWVudC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9TaGFkZXJzX2dwdVVwZGF0ZVBhcnRpY2xlc192ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2dwdVVwZGF0ZVBh
cnRpY2xlcy52ZXJ0ZXggKi8gIi4vU2hhZGVycy9ncHVVcGRhdGVQYXJ0aWNsZXMudmVydGV4LnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfZ3B1UmVuZGVyUGFydGljbGVz
X2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vU2hhZGVycy9ncHVSZW5kZXJQYXJ0aWNsZXMuZnJhZ21lbnQgKi8gIi4vU2hh
ZGVycy9ncHVSZW5kZXJQYXJ0aWNsZXMuZnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfU2hhZGVyc19ncHVSZW5kZXJQYXJ0aWNsZXNfdmVydGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9ncHVS
ZW5kZXJQYXJ0aWNsZXMudmVydGV4ICovICIuL1NoYWRlcnMvZ3B1UmVuZGVyUGFydGljbGVzLnZl
cnRleC50cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
Ky8qKgorICogVGhpcyByZXByZXNlbnRzIGEgR1BVIHBhcnRpY2xlIHN5c3RlbSBpbiBCYWJ5bG9u
CisgKiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHBhcnRpY2xlIHN5c3RlbSBpbiBCYWJ5bG9uIGFzIGl0
IHVzZXMgdGhlIEdQVSB0byB1cGRhdGUgdGhlIGluZGl2aWR1YWwgcGFydGljbGUgZGF0YQorICog
QHNlZSBodHRwczovL3d3dy5iYWJ5bG9uanMtcGxheWdyb3VuZC5jb20vI1BVNFdZSSM0CisgKi8K
K3ZhciBHUFVQYXJ0aWNsZVN5c3RlbSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIp
IHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShH
UFVQYXJ0aWNsZVN5c3RlbSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMg
YSBHUFUgcGFydGljbGUgc3lzdGVtLgorICAgICAqIFBhcnRpY2xlcyBhcmUgb2Z0ZW4gc21hbGwg
c3ByaXRlcyB1c2VkIHRvIHNpbXVsYXRlIGhhcmQtdG8tcmVwcm9kdWNlIHBoZW5vbWVuYSBsaWtl
IGZpcmUsIHNtb2tlLCB3YXRlciwgb3IgYWJzdHJhY3QgdmlzdWFsIGVmZmVjdHMgbGlrZSBtYWdp
YyBnbGl0dGVyIGFuZCBmYWVyeSBkdXN0LgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9m
IHRoZSBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyB1
c2VkIHRvIGNyZWF0ZSB0aGUgc3lzdGVtCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0
aGUgcGFydGljbGUgc3lzdGVtIGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gaXNBbmltYXRpb25T
aGVldEVuYWJsZWQgTXVzdCBiZSB0cnVlIGlmIHVzaW5nIGEgc3ByaXRlc2hlZXQgdG8gYW5pbWF0
ZSB0aGUgcGFydGljbGVzIHRleHR1cmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBHUFVQYXJ0aWNs
ZVN5c3RlbShuYW1lLCBvcHRpb25zLCBzY2VuZSwgaXNBbmltYXRpb25TaGVldEVuYWJsZWQpIHsK
KyAgICAgICAgaWYgKGlzQW5pbWF0aW9uU2hlZXRFbmFibGVkID09PSB2b2lkIDApIHsgaXNBbmlt
YXRpb25TaGVldEVuYWJsZWQgPSBmYWxzZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIu
Y2FsbCh0aGlzLCBuYW1lKSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGxh
eWVyIG1hc2sgd2UgYXJlIHJlbmRlcmluZyB0aGUgcGFydGljbGVzIHRocm91Z2guCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5sYXllck1hc2sgPSAweDBGRkZGRkZGOworICAgICAgICBfdGhp
cy5fYWNjdW11bGF0ZWRDb3VudCA9IDA7CisgICAgICAgIF90aGlzLl90YXJnZXRJbmRleCA9IDA7
CisgICAgICAgIF90aGlzLl9jdXJyZW50UmVuZGVySWQgPSAtMTsKKyAgICAgICAgX3RoaXMuX3N0
YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX3N0b3BwZWQgPSBmYWxzZTsKKyAgICAgICAg
X3RoaXMuX3RpbWVEZWx0YSA9IDA7CisgICAgICAgIF90aGlzLl9hY3R1YWxGcmFtZSA9IDA7Cisg
ICAgICAgIF90aGlzLl9yYXdUZXh0dXJlV2lkdGggPSAyNTY7CisgICAgICAgIC8qKgorICAgICAg
ICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgZGlzcG9zZWQuCisgICAg
ICAgICovCisgICAgICAgIF90aGlzLm9uRGlzcG9zZU9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEZvcmNlcyB0aGUgcGFydGljbGUgdG8gd3JpdGUgdGhlaXIg
ZGVwdGggaW5mb3JtYXRpb24gdG8gdGhlIGRlcHRoIGJ1ZmZlci4gVGhpcyBjYW4gaGVscCBwcmV2
ZW50aW5nIG90aGVyIGRyYXcgY2FsbHMKKyAgICAgICAgICogdG8gb3ZlcnJpZGUgdGhlIHBhcnRp
Y2xlcy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmZvcmNlRGVwdGhXcml0ZSA9IGZhbHNl
OworICAgICAgICBfdGhpcy5fcHJlV2FybURvbmUgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX3Nj
ZW5lID0gc2NlbmUgfHwgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE3X19bIkVuZ2luZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZTsKKyAgICAgICAgLy8gU2V0
dXAgdGhlIGRlZmF1bHQgcHJvY2Vzc2luZyBjb25maWd1cmF0aW9uIHRvIHRoZSBzY2VuZS4KKyAg
ICAgICAgX3RoaXMuX2F0dGFjaEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24obnVsbCk7Cisg
ICAgICAgIF90aGlzLl9lbmdpbmUgPSBfdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAg
IGlmICghb3B0aW9ucy5yYW5kb21UZXh0dXJlU2l6ZSkgeworICAgICAgICAgICAgZGVsZXRlIG9w
dGlvbnMucmFuZG9tVGV4dHVyZVNpemU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGZ1bGxPcHRp
b25zID0gdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19hc3NpZ24iXSh7IGNh
cGFjaXR5OiA1MDAwMCwgcmFuZG9tVGV4dHVyZVNpemU6IF90aGlzLl9lbmdpbmUuZ2V0Q2Fwcygp
Lm1heFRleHR1cmVTaXplIH0sIG9wdGlvbnMpOworICAgICAgICB2YXIgb3B0aW9uc0FzTnVtYmVy
ID0gb3B0aW9uczsKKyAgICAgICAgaWYgKGlzRmluaXRlKG9wdGlvbnNBc051bWJlcikpIHsKKyAg
ICAgICAgICAgIGZ1bGxPcHRpb25zLmNhcGFjaXR5ID0gb3B0aW9uc0FzTnVtYmVyOworICAgICAg
ICB9CisgICAgICAgIF90aGlzLl9jYXBhY2l0eSA9IGZ1bGxPcHRpb25zLmNhcGFjaXR5OworICAg
ICAgICBfdGhpcy5fYWN0aXZlQ291bnQgPSBmdWxsT3B0aW9ucy5jYXBhY2l0eTsKKyAgICAgICAg
X3RoaXMuX2N1cnJlbnRBY3RpdmVDb3VudCA9IDA7CisgICAgICAgIF90aGlzLl9pc0FuaW1hdGlv
blNoZWV0RW5hYmxlZCA9IGlzQW5pbWF0aW9uU2hlZXRFbmFibGVkOworICAgICAgICBfdGhpcy5f
c2NlbmUucGFydGljbGVTeXN0ZW1zLnB1c2goX3RoaXMpOworICAgICAgICBfdGhpcy5fdXBkYXRl
RWZmZWN0T3B0aW9ucyA9IHsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFsicG9zaXRpb24iLCAi
YWdlIiwgImxpZmUiLCAic2VlZCIsICJzaXplIiwgImNvbG9yIiwgImRpcmVjdGlvbiIsICJpbml0
aWFsRGlyZWN0aW9uIiwgImFuZ2xlIiwgImNlbGxJbmRleCIsICJjZWxsU3RhcnRPZmZzZXQiLCAi
bm9pc2VDb29yZGluYXRlczEiLCAibm9pc2VDb29yZGluYXRlczIiXSwKKyAgICAgICAgICAgIHVu
aWZvcm1zTmFtZXM6IFsiY3VycmVudENvdW50IiwgInRpbWVEZWx0YSIsICJlbWl0dGVyV00iLCAi
bGlmZVRpbWUiLCAiY29sb3IxIiwgImNvbG9yMiIsICJzaXplUmFuZ2UiLCAic2NhbGVSYW5nZSIs
ICJncmF2aXR5IiwgImVtaXRQb3dlciIsCisgICAgICAgICAgICAgICAgImRpcmVjdGlvbjEiLCAi
ZGlyZWN0aW9uMiIsICJtaW5FbWl0Qm94IiwgIm1heEVtaXRCb3giLCAicmFkaXVzIiwgImRpcmVj
dGlvblJhbmRvbWl6ZXIiLCAiaGVpZ2h0IiwgImNvbmVBbmdsZSIsICJzdG9wRmFjdG9yIiwKKyAg
ICAgICAgICAgICAgICAiYW5nbGVSYW5nZSIsICJyYWRpdXNSYW5nZSIsICJjZWxsSW5mb3MiLCAi
bm9pc2VTdHJlbmd0aCIsICJsaW1pdFZlbG9jaXR5RGFtcGluZyJdLAorICAgICAgICAgICAgdW5p
Zm9ybUJ1ZmZlcnNOYW1lczogW10sCisgICAgICAgICAgICBzYW1wbGVyczogWyJyYW5kb21TYW1w
bGVyIiwgInJhbmRvbVNhbXBsZXIyIiwgInNpemVHcmFkaWVudFNhbXBsZXIiLCAiYW5ndWxhclNw
ZWVkR3JhZGllbnRTYW1wbGVyIiwgInZlbG9jaXR5R3JhZGllbnRTYW1wbGVyIiwgImxpbWl0VmVs
b2NpdHlHcmFkaWVudFNhbXBsZXIiLCAibm9pc2VTYW1wbGVyIiwgImRyYWdHcmFkaWVudFNhbXBs
ZXIiXSwKKyAgICAgICAgICAgIGRlZmluZXM6ICIiLAorICAgICAgICAgICAgZmFsbGJhY2tzOiBu
dWxsLAorICAgICAgICAgICAgb25Db21waWxlZDogbnVsbCwKKyAgICAgICAgICAgIG9uRXJyb3I6
IG51bGwsCisgICAgICAgICAgICBpbmRleFBhcmFtZXRlcnM6IG51bGwsCisgICAgICAgICAgICBt
YXhTaW11bHRhbmVvdXNMaWdodHM6IDAsCisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzOiBbXQorICAgICAgICB9OworICAgICAgICBfdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBl
ID0gbmV3IF9QYXJ0aWNsZXNfRW1pdHRlclR5cGVzX2JveFBhcnRpY2xlRW1pdHRlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJCb3hQYXJ0aWNsZUVtaXR0ZXIiXSgpOworICAgICAgICAv
LyBSYW5kb20gZGF0YQorICAgICAgICB2YXIgbWF4VGV4dHVyZVNpemUgPSBNYXRoLm1pbihfdGhp
cy5fZW5naW5lLmdldENhcHMoKS5tYXhUZXh0dXJlU2l6ZSwgZnVsbE9wdGlvbnMucmFuZG9tVGV4
dHVyZVNpemUpOworICAgICAgICB2YXIgZCA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG1heFRleHR1cmVTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGQucHVzaChNYXRoLnJhbmRv
bSgpKTsKKyAgICAgICAgICAgIGQucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIGQu
cHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIGQucHVzaChNYXRoLnJhbmRvbSgpKTsK
KyAgICAgICAgfQorICAgICAgICBfdGhpcy5fcmFuZG9tVGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxz
X1RleHR1cmVzX3Jhd1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIlJhd1Rl
eHR1cmUiXShuZXcgRmxvYXQzMkFycmF5KGQpLCBtYXhUZXh0dXJlU2l6ZSwgMSwgX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJDb25zdGFudHMiXS5URVhU
VVJFRk9STUFUX1JHQkEsIF90aGlzLl9zY2VuZSwgZmFsc2UsIGZhbHNlLCBfRW5naW5lc19jb25z
dGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkNvbnN0YW50cyJdLlRFWFRVUkVf
TkVBUkVTVF9TQU1QTElOR01PREUsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfRkxPQVQpOworICAgICAgICBf
dGhpcy5fcmFuZG9tVGV4dHVyZS53cmFwVSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siVGV4dHVyZSJdLldSQVBfQUREUkVTU01PREU7
CisgICAgICAgIF90aGlzLl9yYW5kb21UZXh0dXJlLndyYXBWID0gX01hdGVyaWFsc19UZXh0dXJl
c190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJUZXh0dXJlIl0uV1JBUF9B
RERSRVNTTU9ERTsKKyAgICAgICAgZCA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG1heFRleHR1cmVTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGQucHVzaChNYXRoLnJhbmRvbSgp
KTsKKyAgICAgICAgICAgIGQucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIGQucHVz
aChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIGQucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAg
ICAgICAgfQorICAgICAgICBfdGhpcy5fcmFuZG9tVGV4dHVyZTIgPSBuZXcgX01hdGVyaWFsc19U
ZXh0dXJlc19yYXdUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fWyJSYXdUZXh0
dXJlIl0obmV3IEZsb2F0MzJBcnJheShkKSwgbWF4VGV4dHVyZVNpemUsIDEsIF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RUZPUk1BVF9SR0JBLCBfdGhpcy5fc2NlbmUsIGZhbHNlLCBmYWxzZSwgX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJDb25zdGFudHMiXS5URVhUVVJFX05F
QVJFU1RfU0FNUExJTkdNT0RFLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE2X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FUKTsKKyAgICAgICAgX3Ro
aXMuX3JhbmRvbVRleHR1cmUyLndyYXBVID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJUZXh0dXJlIl0uV1JBUF9BRERSRVNTTU9ERTsK
KyAgICAgICAgX3RoaXMuX3JhbmRvbVRleHR1cmUyLndyYXBWID0gX01hdGVyaWFsc19UZXh0dXJl
c190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJUZXh0dXJlIl0uV1JBUF9B
RERSRVNTTU9ERTsKKyAgICAgICAgX3RoaXMuX3JhbmRvbVRleHR1cmVTaXplID0gbWF4VGV4dHVy
ZVNpemU7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEdQVVBhcnRpY2xlU3lzdGVtLCAiSXNTdXBwb3J0ZWQiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBHUFUgcGFydGljbGVz
IGNhbiBiZSByZW5kZXJlZCBvbiBjdXJyZW50IGJyb3dzZXIKKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCFfRW5naW5lc19lbmdpbmVTdG9y
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRl
ZEVuZ2luZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTdfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZEVuZ2luZS53ZWJHTFZlcnNp
b24gPiAxOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBtYXhp
bXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgYWN0aXZlIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICog
QHJldHVybnMgVGhlIG1heCBudW1iZXIgb2YgYWN0aXZlIHBhcnRpY2xlcy4KKyAgICAgKi8KKyAg
ICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuZ2V0Q2FwYWNpdHkgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLl9jYXBhY2l0eTsKKyAgICB9OworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJhY3RpdmVQYXJ0aWNsZUNv
dW50IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXQgdGhlIG51bWJlciBv
ZiBhY3RpdmUgcGFydGljbGVzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVDb3VudDsKKyAgICAgICAgfSwKKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUNv
dW50ID0gTWF0aC5taW4odmFsdWUsIHRoaXMuX2NhcGFjaXR5KTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgLyoqCisgICAgICogSXMgdGhpcyBzeXN0ZW0gcmVhZHkgdG8gYmUgdXNlZC9yZW5kZXJl
ZAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3lzdGVtIGlzIHJlYWR5CisgICAgICovCisg
ICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmlzUmVhZHkgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGlmICghdGhpcy5fdXBkYXRlRWZmZWN0KSB7CisgICAgICAgICAgICB0aGlzLl9yZWNy
ZWF0ZVVwZGF0ZUVmZmVjdCgpOworICAgICAgICAgICAgdGhpcy5fcmVjcmVhdGVSZW5kZXJFZmZl
Y3QoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IXRoaXMuZW1pdHRlciB8fCAhdGhpcy5fdXBkYXRlRWZmZWN0LmlzUmVhZHkoKSB8fCAhdGhpcy5f
aW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5pc1JlYWR5KCkgfHwgIXRoaXMuX3JlbmRlckVm
ZmVjdC5pc1JlYWR5KCkgfHwgIXRoaXMucGFydGljbGVUZXh0dXJlIHx8ICF0aGlzLnBhcnRpY2xl
VGV4dHVyZS5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgaWYg
dGhlIHN5c3RlbSBoYXMgYmVlbiBzdGFydGVkLiAoTm90ZTogdGhpcyB3aWxsIHN0aWxsIGJlIHRy
dWUgYWZ0ZXIgc3RvcCBpcyBjYWxsZWQpCisgICAgICogQHJldHVybnMgVHJ1ZSBpZiBpdCBoYXMg
YmVlbiBzdGFydGVkLCBvdGhlcndpc2UgZmFsc2UuCisgICAgICovCisgICAgR1BVUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLmlzU3RhcnRlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3N0YXJ0ZWQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTdGFydHMgdGhlIHBhcnRp
Y2xlIHN5c3RlbSBhbmQgYmVnaW5zIHRvIGVtaXQKKyAgICAgKiBAcGFyYW0gZGVsYXkgZGVmaW5l
cyB0aGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSBzdGFydGluZyB0aGUgc3lzdGVtICh0
aGlzLnN0YXJ0RGVsYXkgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3Rl
bS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoZGVsYXkpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSB0aGlzLnN0
YXJ0RGVsYXk7IH0KKyAgICAgICAgaWYgKCF0aGlzLnRhcmdldFN0b3BEdXJhdGlvbiAmJiB0aGlz
Ll9oYXNUYXJnZXRTdG9wRHVyYXRpb25EZXBlbmRhbnRHcmFkaWVudCgpKSB7CisgICAgICAgICAg
ICB0aHJvdyAiUGFydGljbGUgc3lzdGVtIHN0YXJ0ZWQgd2l0aCBhIHRhcmdldFN0b3BEdXJhdGlv
biBkZXBlbmRhbnQgZ3JhZGllbnQgKGVnLiBzdGFydFNpemVHcmFkaWVudHMpIGJ1dCBubyB0YXJn
ZXRTdG9wRHVyYXRpb24gc2V0IjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVsYXkpIHsKKyAg
ICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIF90aGlz
LnN0YXJ0KDApOworICAgICAgICAgICAgfSwgZGVsYXkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9z
dG9wcGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3ByZVdhcm1Eb25lID0gZmFsc2U7CisgICAg
ICAgIC8vIEFuaW1hdGlvbnMKKyAgICAgICAgaWYgKHRoaXMuYmVnaW5BbmltYXRpb25PblN0YXJ0
ICYmIHRoaXMuYW5pbWF0aW9ucyAmJiB0aGlzLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAg
ICAgICAgICAgdGhpcy5nZXRTY2VuZSgpLmJlZ2luQW5pbWF0aW9uKHRoaXMsIHRoaXMuYmVnaW5B
bmltYXRpb25Gcm9tLCB0aGlzLmJlZ2luQW5pbWF0aW9uVG8sIHRoaXMuYmVnaW5BbmltYXRpb25M
b29wKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU3RvcHMgdGhlIHBhcnRp
Y2xlIHN5c3RlbS4KKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuc3Rv
cCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fc3RvcHBlZCA9IHRydWU7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIGFjdGl2ZSBwYXJ0aWNsZXMKKyAgICAgKi8KKyAg
ICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX3JlbGVhc2VCdWZmZXJzKCk7CisgICAgICAgIHRoaXMuX3JlbGVhc2VWQU9zKCk7
CisgICAgICAgIHRoaXMuX2N1cnJlbnRBY3RpdmVDb3VudCA9IDA7CisgICAgICAgIHRoaXMuX3Rh
cmdldEluZGV4ID0gMDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmlu
ZyAiR1BVUGFydGljbGVTeXN0ZW0iCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbmlu
ZyB0aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlw
ZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiR1BVUGFydGlj
bGVTeXN0ZW0iOworICAgIH07CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9yZW1v
dmVHcmFkaWVudEFuZFRleHR1cmUgPSBmdW5jdGlvbiAoZ3JhZGllbnQsIGdyYWRpZW50cywgdGV4
dHVyZSkgeworICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9yZW1vdmVHcmFkaWVudEFuZFRleHR1
cmUuY2FsbCh0aGlzLCBncmFkaWVudCwgZ3JhZGllbnRzLCB0ZXh0dXJlKTsKKyAgICAgICAgdGhp
cy5fcmVsZWFzZUJ1ZmZlcnMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBBZGRzIGEgbmV3IGNvbG9yIGdyYWRpZW50CisgICAgICogQHBhcmFtIGdyYWRp
ZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0d2VlbiAwIGFuZCAxKQorICAgICAq
IEBwYXJhbSBjb2xvcjEgZGVmaW5lcyB0aGUgY29sb3IgdG8gYWZmZWN0IHRvIHRoZSBzcGVjaWZp
ZWQgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gY29sb3IyIGRlZmluZXMgYW4gYWRkaXRpb25hbCBj
b2xvciB1c2VkIHRvIGRlZmluZSBhIHJhbmdlIChbY29sb3IsIGNvbG9yMl0pIHdpdGggbWFpbiBj
b2xvciB0byBwaWNrIHRoZSBmaW5hbCBjb2xvciBmcm9tCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJv
dG90eXBlLmFkZENvbG9yR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQsIGNvbG9yMSwgY29s
b3IyKSB7CisgICAgICAgIGlmICghdGhpcy5fY29sb3JHcmFkaWVudHMpIHsKKyAgICAgICAgICAg
IHRoaXMuX2NvbG9yR3JhZGllbnRzID0gW107CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNvbG9y
R3JhZGllbnQgPSBuZXcgX01pc2NfZ3JhZGllbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkNvbG9yR3JhZGllbnQiXSgpOworICAgICAgICBjb2xvckdyYWRpZW50LmdyYWRpZW50ID0g
Z3JhZGllbnQ7CisgICAgICAgIGNvbG9yR3JhZGllbnQuY29sb3IxID0gY29sb3IxOworICAgICAg
ICB0aGlzLl9jb2xvckdyYWRpZW50cy5wdXNoKGNvbG9yR3JhZGllbnQpOworICAgICAgICB0aGlz
Ll9jb2xvckdyYWRpZW50cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICBpZiAo
YS5ncmFkaWVudCA8IGIuZ3JhZGllbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChhLmdyYWRpZW50ID4gYi5ncmFkaWVu
dCkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0pOworICAgICAgICBpZiAodGhpcy5fY29sb3JHcmFkaWVu
dHNUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9jb2xvckdyYWRpZW50c1RleHR1cmUuZGlz
cG9zZSgpOworICAgICAgICAgICAgdGhpcy5fY29sb3JHcmFkaWVudHNUZXh0dXJlID0gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9yZWxlYXNlQnVmZmVycygpOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHNwZWNpZmljIGNvbG9y
IGdyYWRpZW50CisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRv
IHJlbW92ZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAg
ICAqLworICAgIEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5yZW1vdmVDb2xvckdyYWRpZW50
ID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIHRoaXMuX3JlbW92ZUdyYWRpZW50QW5k
VGV4dHVyZShncmFkaWVudCwgdGhpcy5fY29sb3JHcmFkaWVudHMsIHRoaXMuX2NvbG9yR3JhZGll
bnRzVGV4dHVyZSk7CisgICAgICAgIHRoaXMuX2NvbG9yR3JhZGllbnRzVGV4dHVyZSA9IG51bGw7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJv
dG90eXBlLl9hZGRGYWN0b3JHcmFkaWVudCA9IGZ1bmN0aW9uIChmYWN0b3JHcmFkaWVudHMsIGdy
YWRpZW50LCBmYWN0b3IpIHsKKyAgICAgICAgdmFyIHZhbHVlR3JhZGllbnQgPSBuZXcgX01pc2Nf
Z3JhZGllbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkZhY3RvckdyYWRpZW50Il0o
KTsKKyAgICAgICAgdmFsdWVHcmFkaWVudC5ncmFkaWVudCA9IGdyYWRpZW50OworICAgICAgICB2
YWx1ZUdyYWRpZW50LmZhY3RvcjEgPSBmYWN0b3I7CisgICAgICAgIGZhY3RvckdyYWRpZW50cy5w
dXNoKHZhbHVlR3JhZGllbnQpOworICAgICAgICBmYWN0b3JHcmFkaWVudHMuc29ydChmdW5jdGlv
biAoYSwgYikgeworICAgICAgICAgICAgaWYgKGEuZ3JhZGllbnQgPCBiLmdyYWRpZW50KSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoYS5ncmFkaWVudCA+IGIuZ3JhZGllbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy5fcmVsZWFzZUJ1ZmZlcnMoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFk
ZHMgYSBuZXcgc2l6ZSBncmFkaWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRo
ZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0gZmFjdG9y
IGRlZmluZXMgdGhlIHNpemUgZmFjdG9yIHRvIGFmZmVjdCB0byB0aGUgc3BlY2lmaWVkIGdyYWRp
ZW50CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICov
CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFkZFNpemVHcmFkaWVudCA9IGZ1bmN0
aW9uIChncmFkaWVudCwgZmFjdG9yKSB7CisgICAgICAgIGlmICghdGhpcy5fc2l6ZUdyYWRpZW50
cykgeworICAgICAgICAgICAgdGhpcy5fc2l6ZUdyYWRpZW50cyA9IFtdOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2FkZEZhY3RvckdyYWRpZW50KHRoaXMuX3NpemVHcmFkaWVudHMsIGdyYWRp
ZW50LCBmYWN0b3IpOworICAgICAgICBpZiAodGhpcy5fc2l6ZUdyYWRpZW50c1RleHR1cmUpIHsK
KyAgICAgICAgICAgIHRoaXMuX3NpemVHcmFkaWVudHNUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAg
ICAgICAgIHRoaXMuX3NpemVHcmFkaWVudHNUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9yZWxlYXNlQnVmZmVycygpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHNwZWNpZmljIHNpemUgZ3JhZGllbnQKKyAgICAg
KiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAgICog
QHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFy
dGljbGVTeXN0ZW0ucHJvdG90eXBlLnJlbW92ZVNpemVHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFk
aWVudCkgeworICAgICAgICB0aGlzLl9yZW1vdmVHcmFkaWVudEFuZFRleHR1cmUoZ3JhZGllbnQs
IHRoaXMuX3NpemVHcmFkaWVudHMsIHRoaXMuX3NpemVHcmFkaWVudHNUZXh0dXJlKTsKKyAgICAg
ICAgdGhpcy5fc2l6ZUdyYWRpZW50c1RleHR1cmUgPSBudWxsOworICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgYSBuZXcgYW5ndWxhciBzcGVlZCBncmFk
aWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2Ug
KGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0gZmFjdG9yIGRlZmluZXMgdGhlIGFuZ3Vs
YXIgc3BlZWQgdG8gYWZmZWN0IHRvIHRoZSBzcGVjaWZpZWQgZ3JhZGllbnQKKyAgICAgKiBAcmV0
dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNs
ZVN5c3RlbS5wcm90b3R5cGUuYWRkQW5ndWxhclNwZWVkR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3Jh
ZGllbnQsIGZhY3RvcikgeworICAgICAgICBpZiAoIXRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50
cykgeworICAgICAgICAgICAgdGhpcy5fYW5ndWxhclNwZWVkR3JhZGllbnRzID0gW107CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fYW5ndWxhclNwZWVk
R3JhZGllbnRzLCBncmFkaWVudCwgZmFjdG9yKTsKKyAgICAgICAgaWYgKHRoaXMuX2FuZ3VsYXJT
cGVlZEdyYWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2FuZ3VsYXJTcGVlZEdy
YWRpZW50c1RleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fYW5ndWxhclNwZWVk
R3JhZGllbnRzVGV4dHVyZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVsZWFz
ZUJ1ZmZlcnMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZW1vdmUgYSBzcGVjaWZpYyBhbmd1bGFyIHNwZWVkIGdyYWRpZW50CisgICAgICogQHBhcmFt
IGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5z
IHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLworICAgIEdQVVBhcnRpY2xlU3lz
dGVtLnByb3RvdHlwZS5yZW1vdmVBbmd1bGFyU3BlZWRHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFk
aWVudCkgeworICAgICAgICB0aGlzLl9yZW1vdmVHcmFkaWVudEFuZFRleHR1cmUoZ3JhZGllbnQs
IHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50cywgdGhpcy5fYW5ndWxhclNwZWVkR3JhZGllbnRz
VGV4dHVyZSk7CisgICAgICAgIHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50c1RleHR1cmUgPSBu
dWxsOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMg
YSBuZXcgdmVsb2NpdHkgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0
aGUgZ3JhZGllbnQgdG8gdXNlIChiZXR3ZWVuIDAgYW5kIDEpCisgICAgICogQHBhcmFtIGZhY3Rv
ciBkZWZpbmVzIHRoZSB2ZWxvY2l0eSB0byBhZmZlY3QgdG8gdGhlIHNwZWNpZmllZCBncmFkaWVu
dAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLwor
ICAgIEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5hZGRWZWxvY2l0eUdyYWRpZW50ID0gZnVu
Y3Rpb24gKGdyYWRpZW50LCBmYWN0b3IpIHsKKyAgICAgICAgaWYgKCF0aGlzLl92ZWxvY2l0eUdy
YWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fdmVsb2NpdHlHcmFkaWVudHMgPSBbXTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9hZGRGYWN0b3JHcmFkaWVudCh0aGlzLl92ZWxvY2l0eUdy
YWRpZW50cywgZ3JhZGllbnQsIGZhY3Rvcik7CisgICAgICAgIGlmICh0aGlzLl92ZWxvY2l0eUdy
YWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3ZlbG9jaXR5R3JhZGllbnRzVGV4
dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl92ZWxvY2l0eUdyYWRpZW50c1RleHR1
cmUgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3JlbGVhc2VCdWZmZXJzKCk7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlIGEgc3Bl
Y2lmaWMgdmVsb2NpdHkgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0
aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGlj
bGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLnJlbW92
ZVZlbG9jaXR5R3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQpIHsKKyAgICAgICAgdGhpcy5f
cmVtb3ZlR3JhZGllbnRBbmRUZXh0dXJlKGdyYWRpZW50LCB0aGlzLl92ZWxvY2l0eUdyYWRpZW50
cywgdGhpcy5fdmVsb2NpdHlHcmFkaWVudHNUZXh0dXJlKTsKKyAgICAgICAgdGhpcy5fdmVsb2Np
dHlHcmFkaWVudHNUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBZGRzIGEgbmV3IGxpbWl0IHZlbG9jaXR5IGdyYWRpZW50CisgICAg
ICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0d2VlbiAw
IGFuZCAxKQorICAgICAqIEBwYXJhbSBmYWN0b3IgZGVmaW5lcyB0aGUgbGltaXQgdmVsb2NpdHkg
dmFsdWUgdG8gYWZmZWN0IHRvIHRoZSBzcGVjaWZpZWQgZ3JhZGllbnQKKyAgICAgKiBAcmV0dXJu
cyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5
c3RlbS5wcm90b3R5cGUuYWRkTGltaXRWZWxvY2l0eUdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRp
ZW50LCBmYWN0b3IpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRz
KSB7CisgICAgICAgICAgICB0aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzID0gW107CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fbGltaXRWZWxvY2l0
eUdyYWRpZW50cywgZ3JhZGllbnQsIGZhY3Rvcik7CisgICAgICAgIGlmICh0aGlzLl9saW1pdFZl
bG9jaXR5R3JhZGllbnRzVGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5fbGltaXRWZWxvY2l0
eUdyYWRpZW50c1RleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fbGltaXRWZWxv
Y2l0eUdyYWRpZW50c1RleHR1cmUgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Jl
bGVhc2VCdWZmZXJzKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmVtb3ZlIGEgc3BlY2lmaWMgbGltaXQgdmVsb2NpdHkgZ3JhZGllbnQKKyAgICAgKiBA
cGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFydGlj
bGVTeXN0ZW0ucHJvdG90eXBlLnJlbW92ZUxpbWl0VmVsb2NpdHlHcmFkaWVudCA9IGZ1bmN0aW9u
IChncmFkaWVudCkgeworICAgICAgICB0aGlzLl9yZW1vdmVHcmFkaWVudEFuZFRleHR1cmUoZ3Jh
ZGllbnQsIHRoaXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHMsIHRoaXMuX2xpbWl0VmVsb2NpdHlH
cmFkaWVudHNUZXh0dXJlKTsKKyAgICAgICAgdGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50c1Rl
eHR1cmUgPSBudWxsOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEFkZHMgYSBuZXcgZHJhZyBncmFkaWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZp
bmVzIHRoZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0g
ZmFjdG9yIGRlZmluZXMgdGhlIGRyYWcgdmFsdWUgdG8gYWZmZWN0IHRvIHRoZSBzcGVjaWZpZWQg
Z3JhZGllbnQKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAg
ICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuYWRkRHJhZ0dyYWRpZW50ID0g
ZnVuY3Rpb24gKGdyYWRpZW50LCBmYWN0b3IpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9kcmFnR3Jh
ZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl9kcmFnR3JhZGllbnRzID0gW107CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fZHJhZ0dyYWRpZW50cywg
Z3JhZGllbnQsIGZhY3Rvcik7CisgICAgICAgIGlmICh0aGlzLl9kcmFnR3JhZGllbnRzVGV4dHVy
ZSkgeworICAgICAgICAgICAgdGhpcy5fZHJhZ0dyYWRpZW50c1RleHR1cmUuZGlzcG9zZSgpOwor
ICAgICAgICAgICAgdGhpcy5fZHJhZ0dyYWRpZW50c1RleHR1cmUgPSBudWxsOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX3JlbGVhc2VCdWZmZXJzKCk7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlIGEgc3BlY2lmaWMgZHJhZyBncmFkaWVudAor
ICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBH
UFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVtb3ZlRHJhZ0dyYWRpZW50ID0gZnVuY3Rpb24g
KGdyYWRpZW50KSB7CisgICAgICAgIHRoaXMuX3JlbW92ZUdyYWRpZW50QW5kVGV4dHVyZShncmFk
aWVudCwgdGhpcy5fZHJhZ0dyYWRpZW50cywgdGhpcy5fZHJhZ0dyYWRpZW50c1RleHR1cmUpOwor
ICAgICAgICB0aGlzLl9kcmFnR3JhZGllbnRzVGV4dHVyZSA9IG51bGw7CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogTm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0
aWNsZVN5c3RlbQorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0
byB1c2UgKGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0gZmFjdG9yIGRlZmluZXMgdGhl
IGVtaXQgcmF0ZSB2YWx1ZSB0byBhZmZlY3QgdG8gdGhlIHNwZWNpZmllZCBncmFkaWVudAorICAg
ICAqIEBwYXJhbSBmYWN0b3IyIGRlZmluZXMgYW4gYWRkaXRpb25hbCBmYWN0b3IgdXNlZCB0byBk
ZWZpbmUgYSByYW5nZSAoW2ZhY3RvciwgZmFjdG9yMl0pIHdpdGggbWFpbiB2YWx1ZSB0byBwaWNr
IHRoZSBmaW5hbCB2YWx1ZSBmcm9tCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGlj
bGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFkZEVt
aXRSYXRlR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQsIGZhY3RvciwgZmFjdG9yMikgewor
ICAgICAgICAvLyBEbyBub3RoaW5nIGFzIGVtaXQgcmF0ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdQ
VVBhcnRpY2xlU3lzdGVtCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogTm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAqIEBwYXJhbSBn
cmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0
aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3Rl
bS5wcm90b3R5cGUucmVtb3ZlRW1pdFJhdGVHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCkg
eworICAgICAgICAvLyBEbyBub3RoaW5nIGFzIGVtaXQgcmF0ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5
IEdQVVBhcnRpY2xlU3lzdGVtCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoq
CisgICAgICogTm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAqIEBwYXJh
bSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQgMSkK
KyAgICAgKiBAcGFyYW0gZmFjdG9yIGRlZmluZXMgdGhlIHN0YXJ0IHNpemUgdmFsdWUgdG8gYWZm
ZWN0IHRvIHRoZSBzcGVjaWZpZWQgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gZmFjdG9yMiBkZWZp
bmVzIGFuIGFkZGl0aW9uYWwgZmFjdG9yIHVzZWQgdG8gZGVmaW5lIGEgcmFuZ2UgKFtmYWN0b3Is
IGZhY3RvcjJdKSB3aXRoIG1haW4gdmFsdWUgdG8gcGljayB0aGUgZmluYWwgdmFsdWUgZnJvbQor
ICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLworICAg
IEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5hZGRTdGFydFNpemVHcmFkaWVudCA9IGZ1bmN0
aW9uIChncmFkaWVudCwgZmFjdG9yLCBmYWN0b3IyKSB7CisgICAgICAgIC8vIERvIG5vdGhpbmcg
YXMgc3RhcnQgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdQVVBhcnRpY2xlU3lzdGVtCisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogTm90IHN1cHBvcnRlZCBi
eSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBn
cmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBz
eXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVtb3ZlU3Rh
cnRTaXplR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQpIHsKKyAgICAgICAgLy8gRG8gbm90
aGluZyBhcyBzdGFydCBzaXplIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR1BVUGFydGljbGVTeXN0ZW0K
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBOb3Qgc3VwcG9y
dGVkIGJ5IEdQVVBhcnRpY2xlU3lzdGVtCisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMg
dGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0d2VlbiAwIGFuZCAxKQorICAgICAqIEBwYXJhbSBtaW4g
ZGVmaW5lcyB0aGUgY29sb3IgcmVtYXAgbWluaW1hbCByYW5nZQorICAgICAqIEBwYXJhbSBtYXgg
ZGVmaW5lcyB0aGUgY29sb3IgcmVtYXAgbWF4aW1hbCByYW5nZQorICAgICAqIEByZXR1cm5zIHRo
ZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLworICAgIEdQVVBhcnRpY2xlU3lzdGVt
LnByb3RvdHlwZS5hZGRDb2xvclJlbWFwR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQsIG1p
biwgbWF4KSB7CisgICAgICAgIC8vIERvIG5vdGhpbmcgYXMgc3RhcnQgc2l6ZSBpcyBub3Qgc3Vw
cG9ydGVkIGJ5IEdQVVBhcnRpY2xlU3lzdGVtCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogTm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAg
ICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQ
YXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVtb3ZlQ29sb3JSZW1hcEdyYWRpZW50ID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAvLyBEbyBub3RoaW5nIGFzIHN0YXJ0IHNpemUgaXMgbm90IHN1cHBv
cnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIE5vdCBzdXBwb3J0ZWQgYnkgR1BVUGFydGljbGVTeXN0ZW0KKyAgICAg
KiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNlIChiZXR3ZWVuIDAg
YW5kIDEpCisgICAgICogQHBhcmFtIG1pbiBkZWZpbmVzIHRoZSBhbHBoYSByZW1hcCBtaW5pbWFs
IHJhbmdlCisgICAgICogQHBhcmFtIG1heCBkZWZpbmVzIHRoZSBhbHBoYSByZW1hcCBtYXhpbWFs
IHJhbmdlCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAg
ICovCisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFkZEFscGhhUmVtYXBHcmFkaWVu
dCA9IGZ1bmN0aW9uIChncmFkaWVudCwgbWluLCBtYXgpIHsKKyAgICAgICAgLy8gRG8gbm90aGlu
ZyBhcyBzdGFydCBzaXplIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR1BVUGFydGljbGVTeXN0ZW0KKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBOb3Qgc3VwcG9ydGVk
IGJ5IEdQVVBhcnRpY2xlU3lzdGVtCisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhl
IGdyYWRpZW50IHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xl
IHN5c3RlbQorICAgICAqLworICAgIEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5yZW1vdmVB
bHBoYVJlbWFwR3JhZGllbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIERvIG5vdGhpbmcg
YXMgc3RhcnQgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdQVVBhcnRpY2xlU3lzdGVtCisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogTm90IHN1cHBvcnRlZCBi
eSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBn
cmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0gY29sb3IgZGVm
aW5lcyB0aGUgY29sb3IgdG8gYWZmZWN0IHRvIHRoZSBzcGVjaWZpZWQgZ3JhZGllbnQKKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQ
YXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuYWRkUmFtcEdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRp
ZW50LCBjb2xvcikgeworICAgICAgICAvL05vdCBzdXBwb3J0ZWQgYnkgR1BVUGFydGljbGVTeXN0
ZW0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBOb3Qgc3Vw
cG9ydGVkIGJ5IEdQVVBhcnRpY2xlU3lzdGVtCisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmlu
ZXMgdGhlIGdyYWRpZW50IHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBh
cnRpY2xlIHN5c3RlbQorICAgICAqLworICAgIEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5y
ZW1vdmVSYW1wR3JhZGllbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vTm90IHN1cHBvcnRl
ZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAg
IC8qKgorICAgICAqIE5vdCBzdXBwb3J0ZWQgYnkgR1BVUGFydGljbGVTeXN0ZW0KKyAgICAgKiBA
cmV0dXJucyB0aGUgbGlzdCBvZiByYW1wIGdyYWRpZW50cworICAgICAqLworICAgIEdQVVBhcnRp
Y2xlU3lzdGVtLnByb3RvdHlwZS5nZXRSYW1wR3JhZGllbnRzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHUFVQ
YXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJ1c2VSYW1wR3JhZGllbnRzIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogTm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAg
ICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgdGhhdCByYW1wIGdyYWRpZW50
cyBtdXN0IGJlIHVzZWQKKyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
YmFieWxvbjEwMS9wYXJ0aWNsZXMjcmFtcC1ncmFkaWVudHMKKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgLy9Ob3Qgc3VwcG9ydGVkIGJ5IEdQVVBh
cnRpY2xlU3lzdGVtCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICAvL05vdCBzdXBwb3J0ZWQg
YnkgR1BVUGFydGljbGVTeXN0ZW0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICog
Tm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAqIEBwYXJhbSBncmFkaWVu
dCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBA
cGFyYW0gZmFjdG9yIGRlZmluZXMgdGhlIGxpZmUgdGltZSBmYWN0b3IgdG8gYWZmZWN0IHRvIHRo
ZSBzcGVjaWZpZWQgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gZmFjdG9yMiBkZWZpbmVzIGFuIGFk
ZGl0aW9uYWwgZmFjdG9yIHVzZWQgdG8gZGVmaW5lIGEgcmFuZ2UgKFtmYWN0b3IsIGZhY3RvcjJd
KSB3aXRoIG1haW4gdmFsdWUgdG8gcGljayB0aGUgZmluYWwgdmFsdWUgZnJvbQorICAgICAqIEBy
ZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLworICAgIEdQVVBhcnRp
Y2xlU3lzdGVtLnByb3RvdHlwZS5hZGRMaWZlVGltZUdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRp
ZW50LCBmYWN0b3IsIGZhY3RvcjIpIHsKKyAgICAgICAgLy9Ob3Qgc3VwcG9ydGVkIGJ5IEdQVVBh
cnRpY2xlU3lzdGVtCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAg
ICogTm90IHN1cHBvcnRlZCBieSBHUFVQYXJ0aWNsZVN5c3RlbQorICAgICAqIEBwYXJhbSBncmFk
aWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5w
cm90b3R5cGUucmVtb3ZlTGlmZVRpbWVHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCkgewor
ICAgICAgICAvL05vdCBzdXBwb3J0ZWQgYnkgR1BVUGFydGljbGVTeXN0ZW0KKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfTsKKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX3Jlc2V0
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9yZWxlYXNlQnVmZmVycygpOworICAgIH07
CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9jcmVhdGVVcGRhdGVWQU8gPSBmdW5j
dGlvbiAoc291cmNlKSB7CisgICAgICAgIHZhciB1cGRhdGVWZXJ0ZXhCdWZmZXJzID0ge307Cisg
ICAgICAgIHVwZGF0ZVZlcnRleEJ1ZmZlcnNbInBvc2l0aW9uIl0gPSBzb3VyY2UuY3JlYXRlVmVy
dGV4QnVmZmVyKCJwb3NpdGlvbiIsIDAsIDMpOworICAgICAgICB1cGRhdGVWZXJ0ZXhCdWZmZXJz
WyJhZ2UiXSA9IHNvdXJjZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoImFnZSIsIDMsIDEpOworICAgICAg
ICB1cGRhdGVWZXJ0ZXhCdWZmZXJzWyJsaWZlIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVy
KCJsaWZlIiwgNCwgMSk7CisgICAgICAgIHVwZGF0ZVZlcnRleEJ1ZmZlcnNbInNlZWQiXSA9IHNv
dXJjZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoInNlZWQiLCA1LCA0KTsKKyAgICAgICAgdXBkYXRlVmVy
dGV4QnVmZmVyc1sic2l6ZSJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1ZmZlcigic2l6ZSIsIDks
IDMpOworICAgICAgICB2YXIgb2Zmc2V0ID0gMTI7CisgICAgICAgIGlmICghdGhpcy5fY29sb3JH
cmFkaWVudHNUZXh0dXJlKSB7CisgICAgICAgICAgICB1cGRhdGVWZXJ0ZXhCdWZmZXJzWyJjb2xv
ciJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1ZmZlcigiY29sb3IiLCBvZmZzZXQsIDQpOworICAg
ICAgICAgICAgb2Zmc2V0ICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlVmVydGV4QnVm
ZmVyc1siZGlyZWN0aW9uIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJkaXJlY3Rpb24i
LCBvZmZzZXQsIDMpOworICAgICAgICBvZmZzZXQgKz0gMzsKKyAgICAgICAgaWYgKCF0aGlzLl9p
c0JpbGxib2FyZEJhc2VkKSB7CisgICAgICAgICAgICB1cGRhdGVWZXJ0ZXhCdWZmZXJzWyJpbml0
aWFsRGlyZWN0aW9uIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJpbml0aWFsRGlyZWN0
aW9uIiwgb2Zmc2V0LCAzKTsKKyAgICAgICAgICAgIG9mZnNldCArPSAzOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHNUZXh0dXJlKSB7CisgICAgICAg
ICAgICB1cGRhdGVWZXJ0ZXhCdWZmZXJzWyJhbmdsZSJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1
ZmZlcigiYW5nbGUiLCBvZmZzZXQsIDEpOworICAgICAgICAgICAgb2Zmc2V0ICs9IDE7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1cGRhdGVWZXJ0ZXhCdWZmZXJzWyJh
bmdsZSJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1ZmZlcigiYW5nbGUiLCBvZmZzZXQsIDIpOwor
ICAgICAgICAgICAgb2Zmc2V0ICs9IDI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2lz
QW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICB1cGRhdGVWZXJ0ZXhCdWZmZXJz
WyJjZWxsSW5kZXgiXSA9IHNvdXJjZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoImNlbGxJbmRleCIsIG9m
ZnNldCwgMSk7CisgICAgICAgICAgICBvZmZzZXQgKz0gMTsKKyAgICAgICAgICAgIGlmICh0aGlz
LnNwcml0ZVJhbmRvbVN0YXJ0Q2VsbCkgeworICAgICAgICAgICAgICAgIHVwZGF0ZVZlcnRleEJ1
ZmZlcnNbImNlbGxTdGFydE9mZnNldCJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1ZmZlcigiY2Vs
bFN0YXJ0T2Zmc2V0Iiwgb2Zmc2V0LCAxKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5ub2lzZVRleHR1cmUp
IHsKKyAgICAgICAgICAgIHVwZGF0ZVZlcnRleEJ1ZmZlcnNbIm5vaXNlQ29vcmRpbmF0ZXMxIl0g
PSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJub2lzZUNvb3JkaW5hdGVzMSIsIG9mZnNldCwg
Myk7CisgICAgICAgICAgICBvZmZzZXQgKz0gMzsKKyAgICAgICAgICAgIHVwZGF0ZVZlcnRleEJ1
ZmZlcnNbIm5vaXNlQ29vcmRpbmF0ZXMyIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJu
b2lzZUNvb3JkaW5hdGVzMiIsIG9mZnNldCwgMyk7CisgICAgICAgICAgICBvZmZzZXQgKz0gMzsK
KyAgICAgICAgfQorICAgICAgICB2YXIgdmFvID0gdGhpcy5fZW5naW5lLnJlY29yZFZlcnRleEFy
cmF5T2JqZWN0KHVwZGF0ZVZlcnRleEJ1ZmZlcnMsIG51bGwsIHRoaXMuX3VwZGF0ZUVmZmVjdCk7
CisgICAgICAgIHRoaXMuX2VuZ2luZS5iaW5kQXJyYXlCdWZmZXIobnVsbCk7CisgICAgICAgIHJl
dHVybiB2YW87CisgICAgfTsKKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX2NyZWF0
ZVJlbmRlclZBTyA9IGZ1bmN0aW9uIChzb3VyY2UsIHNwcml0ZVNvdXJjZSkgeworICAgICAgICB2
YXIgcmVuZGVyVmVydGV4QnVmZmVycyA9IHt9OworICAgICAgICByZW5kZXJWZXJ0ZXhCdWZmZXJz
WyJwb3NpdGlvbiJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1ZmZlcigicG9zaXRpb24iLCAwLCAz
LCB0aGlzLl9hdHRyaWJ1dGVzU3RyaWRlU2l6ZSwgdHJ1ZSk7CisgICAgICAgIHJlbmRlclZlcnRl
eEJ1ZmZlcnNbImFnZSJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1ZmZlcigiYWdlIiwgMywgMSwg
dGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUsIHRydWUpOworICAgICAgICByZW5kZXJWZXJ0ZXhC
dWZmZXJzWyJsaWZlIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJsaWZlIiwgNCwgMSwg
dGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUsIHRydWUpOworICAgICAgICByZW5kZXJWZXJ0ZXhC
dWZmZXJzWyJzaXplIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJzaXplIiwgOSwgMywg
dGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUsIHRydWUpOworICAgICAgICB2YXIgb2Zmc2V0ID0g
MTI7CisgICAgICAgIGlmICghdGhpcy5fY29sb3JHcmFkaWVudHNUZXh0dXJlKSB7CisgICAgICAg
ICAgICByZW5kZXJWZXJ0ZXhCdWZmZXJzWyJjb2xvciJdID0gc291cmNlLmNyZWF0ZVZlcnRleEJ1
ZmZlcigiY29sb3IiLCBvZmZzZXQsIDQsIHRoaXMuX2F0dHJpYnV0ZXNTdHJpZGVTaXplLCB0cnVl
KTsKKyAgICAgICAgICAgIG9mZnNldCArPSA0OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
LmJpbGxib2FyZE1vZGUgPT09IF9wYXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJQYXJ0aWNsZVN5c3RlbSJdLkJJTExCT0FSRE1PREVfU1RSRVRDSEVEKSB7CisgICAg
ICAgICAgICByZW5kZXJWZXJ0ZXhCdWZmZXJzWyJkaXJlY3Rpb24iXSA9IHNvdXJjZS5jcmVhdGVW
ZXJ0ZXhCdWZmZXIoImRpcmVjdGlvbiIsIG9mZnNldCwgMywgdGhpcy5fYXR0cmlidXRlc1N0cmlk
ZVNpemUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIG9mZnNldCArPSAzOyAvLyBEaXJlY3Rp
b24KKyAgICAgICAgaWYgKCF0aGlzLl9pc0JpbGxib2FyZEJhc2VkKSB7CisgICAgICAgICAgICBy
ZW5kZXJWZXJ0ZXhCdWZmZXJzWyJpbml0aWFsRGlyZWN0aW9uIl0gPSBzb3VyY2UuY3JlYXRlVmVy
dGV4QnVmZmVyKCJpbml0aWFsRGlyZWN0aW9uIiwgb2Zmc2V0LCAzLCB0aGlzLl9hdHRyaWJ1dGVz
U3RyaWRlU2l6ZSwgdHJ1ZSk7CisgICAgICAgICAgICBvZmZzZXQgKz0gMzsKKyAgICAgICAgfQor
ICAgICAgICByZW5kZXJWZXJ0ZXhCdWZmZXJzWyJhbmdsZSJdID0gc291cmNlLmNyZWF0ZVZlcnRl
eEJ1ZmZlcigiYW5nbGUiLCBvZmZzZXQsIDEsIHRoaXMuX2F0dHJpYnV0ZXNTdHJpZGVTaXplLCB0
cnVlKTsKKyAgICAgICAgaWYgKHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50c1RleHR1cmUpIHsK
KyAgICAgICAgICAgIG9mZnNldCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgb2Zmc2V0ICs9IDI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0
aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICByZW5kZXJWZXJ0ZXhCdWZmZXJzWyJjZWxs
SW5kZXgiXSA9IHNvdXJjZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoImNlbGxJbmRleCIsIG9mZnNldCwg
MSwgdGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUsIHRydWUpOworICAgICAgICAgICAgb2Zmc2V0
ICs9IDE7CisgICAgICAgICAgICBpZiAodGhpcy5zcHJpdGVSYW5kb21TdGFydENlbGwpIHsKKyAg
ICAgICAgICAgICAgICByZW5kZXJWZXJ0ZXhCdWZmZXJzWyJjZWxsU3RhcnRPZmZzZXQiXSA9IHNv
dXJjZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoImNlbGxTdGFydE9mZnNldCIsIG9mZnNldCwgMSwgdGhp
cy5fYXR0cmlidXRlc1N0cmlkZVNpemUsIHRydWUpOworICAgICAgICAgICAgICAgIG9mZnNldCAr
PSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLm5vaXNlVGV4
dHVyZSkgeworICAgICAgICAgICAgcmVuZGVyVmVydGV4QnVmZmVyc1sibm9pc2VDb29yZGluYXRl
czEiXSA9IHNvdXJjZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoIm5vaXNlQ29vcmRpbmF0ZXMxIiwgb2Zm
c2V0LCAzLCB0aGlzLl9hdHRyaWJ1dGVzU3RyaWRlU2l6ZSwgdHJ1ZSk7CisgICAgICAgICAgICBv
ZmZzZXQgKz0gMzsKKyAgICAgICAgICAgIHJlbmRlclZlcnRleEJ1ZmZlcnNbIm5vaXNlQ29vcmRp
bmF0ZXMyIl0gPSBzb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJub2lzZUNvb3JkaW5hdGVzMiIs
IG9mZnNldCwgMywgdGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUsIHRydWUpOworICAgICAgICAg
ICAgb2Zmc2V0ICs9IDM7CisgICAgICAgIH0KKyAgICAgICAgcmVuZGVyVmVydGV4QnVmZmVyc1si
b2Zmc2V0Il0gPSBzcHJpdGVTb3VyY2UuY3JlYXRlVmVydGV4QnVmZmVyKCJvZmZzZXQiLCAwLCAy
KTsKKyAgICAgICAgcmVuZGVyVmVydGV4QnVmZmVyc1sidXYiXSA9IHNwcml0ZVNvdXJjZS5jcmVh
dGVWZXJ0ZXhCdWZmZXIoInV2IiwgMiwgMik7CisgICAgICAgIHZhciB2YW8gPSB0aGlzLl9lbmdp
bmUucmVjb3JkVmVydGV4QXJyYXlPYmplY3QocmVuZGVyVmVydGV4QnVmZmVycywgbnVsbCwgdGhp
cy5fcmVuZGVyRWZmZWN0KTsKKyAgICAgICAgdGhpcy5fZW5naW5lLmJpbmRBcnJheUJ1ZmZlcihu
dWxsKTsKKyAgICAgICAgcmV0dXJuIHZhbzsKKyAgICB9OworICAgIEdQVVBhcnRpY2xlU3lzdGVt
LnByb3RvdHlwZS5faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIChmb3JjZSkgeworICAgICAgICBpZiAo
Zm9yY2UgPT09IHZvaWQgMCkgeyBmb3JjZSA9IGZhbHNlOyB9CisgICAgICAgIGlmICh0aGlzLl9i
dWZmZXIwICYmICFmb3JjZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgdmFyIGRh
dGEgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUgPSAy
MTsKKyAgICAgICAgdGhpcy5fdGFyZ2V0SW5kZXggPSAwOworICAgICAgICBpZiAoIXRoaXMuaXNC
aWxsYm9hcmRCYXNlZCkgeworICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUg
Kz0gMzsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY29sb3JHcmFkaWVudHNUZXh0dXJl
KSB7CisgICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzU3RyaWRlU2l6ZSAtPSA0OworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHNUZXh0dXJlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzU3RyaWRlU2l6ZSAtPSAxOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGlvblNoZWV0RW5hYmxlZCkgeworICAgICAgICAgICAg
dGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUgKz0gMTsKKyAgICAgICAgICAgIGlmICh0aGlzLnNw
cml0ZVJhbmRvbVN0YXJ0Q2VsbCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXNT
dHJpZGVTaXplICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRo
aXMubm9pc2VUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzU3RyaWRlU2l6
ZSArPSA2OworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIHBhcnRpY2xlSW5kZXggPSAwOyBw
YXJ0aWNsZUluZGV4IDwgdGhpcy5fY2FwYWNpdHk7IHBhcnRpY2xlSW5kZXgrKykgeworICAgICAg
ICAgICAgLy8gcG9zaXRpb24KKyAgICAgICAgICAgIGRhdGEucHVzaCgwLjApOworICAgICAgICAg
ICAgZGF0YS5wdXNoKDAuMCk7CisgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAgICAg
ICAgIC8vIEFnZSBhbmQgbGlmZQorICAgICAgICAgICAgZGF0YS5wdXNoKDAuMCk7IC8vIGNyZWF0
ZSB0aGUgcGFydGljbGUgYXMgYSBkZWFkIG9uZSB0byBjcmVhdGUgYSBuZXcgb25lIGF0IHN0YXJ0
CisgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAgICAgICAgIC8vIFNlZWQKKyAgICAg
ICAgICAgIGRhdGEucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIGRhdGEucHVzaChN
YXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIGRhdGEucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAg
ICAgICAgICAgIGRhdGEucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgIC8vIFNpemUK
KyAgICAgICAgICAgIGRhdGEucHVzaCgwLjApOworICAgICAgICAgICAgZGF0YS5wdXNoKDAuMCk7
CisgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5fY29s
b3JHcmFkaWVudHNUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgLy8gY29sb3IKKyAgICAgICAg
ICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsK
KyAgICAgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAgICAgICAgICAgICBkYXRhLnB1
c2goMC4wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGRpcmVjdGlvbgorICAgICAg
ICAgICAgZGF0YS5wdXNoKDAuMCk7CisgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAg
ICAgICAgIGRhdGEucHVzaCgwLjApOworICAgICAgICAgICAgaWYgKCF0aGlzLmlzQmlsbGJvYXJk
QmFzZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBpbml0aWFsRGlyZWN0aW9uCisgICAgICAgICAg
ICAgICAgZGF0YS5wdXNoKDAuMCk7CisgICAgICAgICAgICAgICAgZGF0YS5wdXNoKDAuMCk7Cisg
ICAgICAgICAgICAgICAgZGF0YS5wdXNoKDAuMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBhbmdsZQorICAgICAgICAgICAgZGF0YS5wdXNoKDAuMCk7CisgICAgICAgICAgICBpZiAo
IXRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBk
YXRhLnB1c2goMC4wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9pc0Fu
aW1hdGlvblNoZWV0RW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGRhdGEucHVzaCgwLjApOwor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLnNwcml0ZVJhbmRvbVN0YXJ0Q2VsbCkgeworICAgICAg
ICAgICAgICAgICAgICBkYXRhLnB1c2goMC4wKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5ub2lzZVRleHR1cmUpIHsgLy8gUmFuZG9tIGNv
b3JkaW5hdGVzIGZvciByZWFkaW5nIGludG8gbm9pc2UgdGV4dHVyZQorICAgICAgICAgICAgICAg
IGRhdGEucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgICAgICBkYXRhLnB1c2goTWF0
aC5yYW5kb20oKSk7CisgICAgICAgICAgICAgICAgZGF0YS5wdXNoKE1hdGgucmFuZG9tKCkpOwor
ICAgICAgICAgICAgICAgIGRhdGEucHVzaChNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgICAg
ICBkYXRhLnB1c2goTWF0aC5yYW5kb20oKSk7CisgICAgICAgICAgICAgICAgZGF0YS5wdXNoKE1h
dGgucmFuZG9tKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFNwcml0
ZSBkYXRhCisgICAgICAgIHZhciBzcHJpdGVEYXRhID0gbmV3IEZsb2F0MzJBcnJheShbMC41LCAw
LjUsIDEsIDEsCisgICAgICAgICAgICAtMC41LCAwLjUsIDAsIDEsCisgICAgICAgICAgICAtMC41
LCAtMC41LCAwLCAwLAorICAgICAgICAgICAgMC41LCAtMC41LCAxLCAwXSk7CisgICAgICAgIC8v
IEJ1ZmZlcnMKKyAgICAgICAgdGhpcy5fYnVmZmVyMCA9IG5ldyBfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJCdWZmZXIiXShlbmdpbmUsIGRhdGEsIGZhbHNlLCB0
aGlzLl9hdHRyaWJ1dGVzU3RyaWRlU2l6ZSk7CisgICAgICAgIHRoaXMuX2J1ZmZlcjEgPSBuZXcg
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQnVmZmVyIl0oZW5n
aW5lLCBkYXRhLCBmYWxzZSwgdGhpcy5fYXR0cmlidXRlc1N0cmlkZVNpemUpOworICAgICAgICB0
aGlzLl9zcHJpdGVCdWZmZXIgPSBuZXcgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siQnVmZmVyIl0oZW5naW5lLCBzcHJpdGVEYXRhLCBmYWxzZSwgNCk7CisgICAg
ICAgIC8vIFVwZGF0ZSBWQU8KKyAgICAgICAgdGhpcy5fdXBkYXRlVkFPID0gW107CisgICAgICAg
IHRoaXMuX3VwZGF0ZVZBTy5wdXNoKHRoaXMuX2NyZWF0ZVVwZGF0ZVZBTyh0aGlzLl9idWZmZXIw
KSk7CisgICAgICAgIHRoaXMuX3VwZGF0ZVZBTy5wdXNoKHRoaXMuX2NyZWF0ZVVwZGF0ZVZBTyh0
aGlzLl9idWZmZXIxKSk7CisgICAgICAgIC8vIFJlbmRlciBWQU8KKyAgICAgICAgdGhpcy5fcmVu
ZGVyVkFPID0gW107CisgICAgICAgIHRoaXMuX3JlbmRlclZBTy5wdXNoKHRoaXMuX2NyZWF0ZVJl
bmRlclZBTyh0aGlzLl9idWZmZXIxLCB0aGlzLl9zcHJpdGVCdWZmZXIpKTsKKyAgICAgICAgdGhp
cy5fcmVuZGVyVkFPLnB1c2godGhpcy5fY3JlYXRlUmVuZGVyVkFPKHRoaXMuX2J1ZmZlcjAsIHRo
aXMuX3Nwcml0ZUJ1ZmZlcikpOworICAgICAgICAvLyBMaW5rcworICAgICAgICB0aGlzLl9zb3Vy
Y2VCdWZmZXIgPSB0aGlzLl9idWZmZXIwOworICAgICAgICB0aGlzLl90YXJnZXRCdWZmZXIgPSB0
aGlzLl9idWZmZXIxOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBHUFVQYXJ0aWNs
ZVN5c3RlbS5wcm90b3R5cGUuX3JlY3JlYXRlVXBkYXRlRWZmZWN0ID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgZGVmaW5lcyA9IHRoaXMucGFydGljbGVFbWl0dGVyVHlwZSA/IHRoaXMucGFy
dGljbGVFbWl0dGVyVHlwZS5nZXRFZmZlY3REZWZpbmVzKCkgOiAiIjsKKyAgICAgICAgaWYgKHRo
aXMuX2lzQmlsbGJvYXJkQmFzZWQpIHsKKyAgICAgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmlu
ZSBCSUxMQk9BUkQiOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9jb2xvckdyYWRpZW50
c1RleHR1cmUpIHsKKyAgICAgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmluZSBDT0xPUkdSQURJ
RU5UUyI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3NpemVHcmFkaWVudHNUZXh0dXJl
KSB7CisgICAgICAgICAgICBkZWZpbmVzICs9ICJcbiNkZWZpbmUgU0laRUdSQURJRU5UUyI7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50c1RleHR1cmUp
IHsKKyAgICAgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmluZSBBTkdVTEFSU1BFRURHUkFESUVO
VFMiOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl92ZWxvY2l0eUdyYWRpZW50c1RleHR1
cmUpIHsKKyAgICAgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmluZSBWRUxPQ0lUWUdSQURJRU5U
UyI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHNU
ZXh0dXJlKSB7CisgICAgICAgICAgICBkZWZpbmVzICs9ICJcbiNkZWZpbmUgTElNSVRWRUxPQ0lU
WUdSQURJRU5UUyI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2RyYWdHcmFkaWVudHNU
ZXh0dXJlKSB7CisgICAgICAgICAgICBkZWZpbmVzICs9ICJcbiNkZWZpbmUgRFJBR0dSQURJRU5U
UyI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuaXNBbmltYXRpb25TaGVldEVuYWJsZWQp
IHsKKyAgICAgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmluZSBBTklNQVRFU0hFRVQiOworICAg
ICAgICAgICAgaWYgKHRoaXMuc3ByaXRlUmFuZG9tU3RhcnRDZWxsKSB7CisgICAgICAgICAgICAg
ICAgZGVmaW5lcyArPSAiXG4jZGVmaW5lIEFOSU1BVEVTSEVFVFJBTkRPTVNUQVJUIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5ub2lzZVRleHR1cmUpIHsKKyAg
ICAgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmluZSBOT0lTRSI7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuX3VwZGF0ZUVmZmVjdCAmJiB0aGlzLl91cGRhdGVFZmZlY3RPcHRpb25zLmRl
ZmluZXMgPT09IGRlZmluZXMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl91cGRhdGVFZmZlY3RPcHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3Mg
PSBbIm91dFBvc2l0aW9uIiwgIm91dEFnZSIsICJvdXRMaWZlIiwgIm91dFNlZWQiLCAib3V0U2l6
ZSJdOworICAgICAgICBpZiAoIXRoaXMuX2NvbG9yR3JhZGllbnRzVGV4dHVyZSkgeworICAgICAg
ICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0T3B0aW9ucy50cmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmdz
LnB1c2goIm91dENvbG9yIik7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0
T3B0aW9ucy50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnB1c2goIm91dERpcmVjdGlvbiIpOwor
ICAgICAgICBpZiAoIXRoaXMuX2lzQmlsbGJvYXJkQmFzZWQpIHsKKyAgICAgICAgICAgIHRoaXMu
X3VwZGF0ZUVmZmVjdE9wdGlvbnMudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5wdXNoKCJvdXRJ
bml0aWFsRGlyZWN0aW9uIik7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0
T3B0aW9ucy50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnB1c2goIm91dEFuZ2xlIik7CisgICAg
ICAgIGlmICh0aGlzLmlzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICB0aGlz
Ll91cGRhdGVFZmZlY3RPcHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MucHVzaCgib3V0
Q2VsbEluZGV4Iik7CisgICAgICAgICAgICBpZiAodGhpcy5zcHJpdGVSYW5kb21TdGFydENlbGwp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFZmZlY3RPcHRpb25zLnRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ3MucHVzaCgib3V0Q2VsbFN0YXJ0T2Zmc2V0Iik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMubm9pc2VUZXh0dXJlKSB7CisgICAgICAgICAg
ICB0aGlzLl91cGRhdGVFZmZlY3RPcHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MucHVz
aCgib3V0Tm9pc2VDb29yZGluYXRlczEiKTsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVj
dE9wdGlvbnMudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5wdXNoKCJvdXROb2lzZUNvb3JkaW5h
dGVzMiIpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVjdE9wdGlvbnMuZGVm
aW5lcyA9IGRlZmluZXM7CisgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVjdCA9IG5ldyBfTWF0ZXJp
YWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siRWZmZWN0Il0oImdwdVVw
ZGF0ZVBhcnRpY2xlcyIsIHRoaXMuX3VwZGF0ZUVmZmVjdE9wdGlvbnMsIHRoaXMuX3NjZW5lLmdl
dEVuZ2luZSgpKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgR1BVUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLl9yZWNyZWF0ZVJlbmRlckVmZmVjdCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIGRlZmluZXMgPSAiIjsKKyAgICAgICAgaWYgKHRoaXMuX3NjZW5lLmNsaXBQbGFu
ZSkgeworICAgICAgICAgICAgZGVmaW5lcyA9ICJcbiNkZWZpbmUgQ0xJUFBMQU5FIjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5fc2NlbmUuY2xpcFBsYW5lMikgeworICAgICAgICAgICAg
ZGVmaW5lcyA9ICJcbiNkZWZpbmUgQ0xJUFBMQU5FMiI7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX3NjZW5lLmNsaXBQbGFuZTMpIHsKKyAgICAgICAgICAgIGRlZmluZXMgPSAiXG4jZGVm
aW5lIENMSVBQTEFORTMiOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9zY2VuZS5jbGlw
UGxhbmU0KSB7CisgICAgICAgICAgICBkZWZpbmVzID0gIlxuI2RlZmluZSBDTElQUExBTkU0IjsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5ibGVuZE1vZGUgPT09IF9wYXJ0aWNsZVN5c3Rl
bV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQYXJ0aWNsZVN5c3RlbSJdLkJMRU5ETU9E
RV9NVUxUSVBMWSkgeworICAgICAgICAgICAgZGVmaW5lcyA9ICJcbiNkZWZpbmUgQkxFTkRNVUxU
SVBMWU1PREUiOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pc0JpbGxib2FyZEJhc2Vk
KSB7CisgICAgICAgICAgICBkZWZpbmVzICs9ICJcbiNkZWZpbmUgQklMTEJPQVJEIjsKKyAgICAg
ICAgICAgIHN3aXRjaCAodGhpcy5iaWxsYm9hcmRNb2RlKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUGFydGljbGVT
eXN0ZW0iXS5CSUxMQk9BUkRNT0RFX1k6CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgKz0g
IlxuI2RlZmluZSBCSUxMQk9BUkRZIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siUGFydGljbGVTeXN0ZW0iXS5CSUxMQk9BUkRNT0RFX1NUUkVUQ0hFRDoKKyAgICAgICAg
ICAgICAgICAgICAgZGVmaW5lcyArPSAiXG4jZGVmaW5lIEJJTExCT0FSRFNUUkVUQ0hFRCI7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgX3BhcnRpY2xl
U3lzdGVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBhcnRpY2xlU3lzdGVtIl0uQklM
TEJPQVJETU9ERV9BTEw6CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X2NvbG9yR3JhZGllbnRzVGV4dHVyZSkgeworICAgICAgICAgICAgZGVmaW5lcyArPSAiXG4jZGVm
aW5lIENPTE9SR1JBRElFTlRTIjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5pc0FuaW1h
dGlvblNoZWV0RW5hYmxlZCkgeworICAgICAgICAgICAgZGVmaW5lcyArPSAiXG4jZGVmaW5lIEFO
SU1BVEVTSEVFVCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2ltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZp
Z3VyYXRpb24ucHJlcGFyZURlZmluZXModGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bkRlZmluZXMpOworICAgICAgICAgICAgZGVmaW5lcyArPSAiXG4iICsgdGhpcy5faW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAodGhpcy5fcmVuZGVyRWZmZWN0ICYmIHRoaXMuX3JlbmRlckVmZmVjdC5kZWZpbmVzID09
PSBkZWZpbmVzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHVuaWZvcm1zID0gWyJ3b3JsZE9mZnNldCIsICJ2aWV3IiwgInByb2plY3Rpb24iLCAiY29sb3JE
ZWFkIiwgImludlZpZXciLCAidkNsaXBQbGFuZSIsICJ2Q2xpcFBsYW5lMiIsICJ2Q2xpcFBsYW5l
MyIsICJ2Q2xpcFBsYW5lNCIsICJzaGVldEluZm9zIiwgInRyYW5zbGF0aW9uUGl2b3QiLCAiZXll
UG9zaXRpb24iXTsKKyAgICAgICAgdmFyIHNhbXBsZXJzID0gWyJ0ZXh0dXJlU2FtcGxlciIsICJj
b2xvckdyYWRpZW50U2FtcGxlciJdOworICAgICAgICBpZiAoX01hdGVyaWFsc19pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJJbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uIl0pIHsKKyAgICAgICAgICAgIF9NYXRlcmlhbHNfaW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siSW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiJdLlByZXBhcmVVbmlmb3Jtcyh1bmlmb3JtcywgdGhp
cy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbkRlZmluZXMpOworICAgICAgICAgICAgX01h
dGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xM19fWyJJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIl0uUHJlcGFyZVNhbXBsZXJz
KHNhbXBsZXJzLCB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uRGVmaW5lcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVuZGVyRWZmZWN0ID0gbmV3IF9NYXRlcmlhbHNfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJFZmZlY3QiXSgiZ3B1UmVuZGVyUGFy
dGljbGVzIiwgWyJwb3NpdGlvbiIsICJhZ2UiLCAibGlmZSIsICJzaXplIiwgImNvbG9yIiwgIm9m
ZnNldCIsICJ1diIsICJkaXJlY3Rpb24iLCAiaW5pdGlhbERpcmVjdGlvbiIsICJhbmdsZSIsICJj
ZWxsSW5kZXgiXSwgdW5pZm9ybXMsIHNhbXBsZXJzLCB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwg
ZGVmaW5lcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBbmltYXRlcyB0aGUgcGFydGljbGUg
c3lzdGVtIGZvciB0aGUgY3VycmVudCBmcmFtZSBieSBlbWl0dGluZyBuZXcgcGFydGljbGVzIGFu
ZCBvciBhbmltYXRpbmcgdGhlIGxpdmluZyBvbmVzLgorICAgICAqIEBwYXJhbSBwcmVXYXJtIGRl
ZmluZXMgaWYgd2UgYXJlIGluIHRoZSBwcmUtd2FybWltZyBwaGFzZQorICAgICAqLworICAgIEdQ
VVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5hbmltYXRlID0gZnVuY3Rpb24gKHByZVdhcm0pIHsK
KyAgICAgICAgaWYgKHByZVdhcm0gPT09IHZvaWQgMCkgeyBwcmVXYXJtID0gZmFsc2U7IH0KKyAg
ICAgICAgdGhpcy5fdGltZURlbHRhID0gdGhpcy51cGRhdGVTcGVlZCAqIChwcmVXYXJtID8gdGhp
cy5wcmVXYXJtU3RlcE9mZnNldCA6IHRoaXMuX3NjZW5lLmdldEFuaW1hdGlvblJhdGlvKCkpOwor
ICAgICAgICB0aGlzLl9hY3R1YWxGcmFtZSArPSB0aGlzLl90aW1lRGVsdGE7CisgICAgICAgIGlm
ICghdGhpcy5fc3RvcHBlZCkgeworICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0U3RvcER1cmF0
aW9uICYmIHRoaXMuX2FjdHVhbEZyYW1lID49IHRoaXMudGFyZ2V0U3RvcER1cmF0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworICAgIEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5fY3JlYXRlRmFjdG9yR3JhZGll
bnRUZXh0dXJlID0gZnVuY3Rpb24gKGZhY3RvckdyYWRpZW50cywgdGV4dHVyZU5hbWUpIHsKKyAg
ICAgICAgdmFyIHRleHR1cmUgPSB0aGlzW3RleHR1cmVOYW1lXTsKKyAgICAgICAgaWYgKCFmYWN0
b3JHcmFkaWVudHMgfHwgIWZhY3RvckdyYWRpZW50cy5sZW5ndGggfHwgdGV4dHVyZSkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBkYXRhID0gbmV3IEZsb2F0
MzJBcnJheSh0aGlzLl9yYXdUZXh0dXJlV2lkdGgpOworICAgICAgICBmb3IgKHZhciB4ID0gMDsg
eCA8IHRoaXMuX3Jhd1RleHR1cmVXaWR0aDsgeCsrKSB7CisgICAgICAgICAgICB2YXIgcmF0aW8g
PSB4IC8gdGhpcy5fcmF3VGV4dHVyZVdpZHRoOworICAgICAgICAgICAgX01pc2NfZ3JhZGllbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkdyYWRpZW50SGVscGVyIl0uR2V0Q3VycmVu
dEdyYWRpZW50KHJhdGlvLCBmYWN0b3JHcmFkaWVudHMsIGZ1bmN0aW9uIChjdXJyZW50R3JhZGll
bnQsIG5leHRHcmFkaWVudCwgc2NhbGUpIHsKKyAgICAgICAgICAgICAgICBkYXRhW3hdID0gX01h
dGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNjYWxhciJdLkxl
cnAoY3VycmVudEdyYWRpZW50LmZhY3RvcjEsIG5leHRHcmFkaWVudC5mYWN0b3IxLCBzY2FsZSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzW3RleHR1cmVOYW1lXSA9
IF9NYXRlcmlhbHNfVGV4dHVyZXNfcmF3VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTVfX1siUmF3VGV4dHVyZSJdLkNyZWF0ZVJUZXh0dXJlKGRhdGEsIHRoaXMuX3Jhd1RleHR1cmVX
aWR0aCwgMSwgdGhpcy5fc2NlbmUsIGZhbHNlLCBmYWxzZSwgX01hdGVyaWFsc19UZXh0dXJlc190
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJUZXh0dXJlIl0uTkVBUkVTVF9T
QU1QTElOR01PREUpOworICAgIH07CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9j
cmVhdGVTaXplR3JhZGllbnRUZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9j
cmVhdGVGYWN0b3JHcmFkaWVudFRleHR1cmUodGhpcy5fc2l6ZUdyYWRpZW50cywgIl9zaXplR3Jh
ZGllbnRzVGV4dHVyZSIpOworICAgIH07CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBl
Ll9jcmVhdGVBbmd1bGFyU3BlZWRHcmFkaWVudFRleHR1cmUgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHRoaXMuX2NyZWF0ZUZhY3RvckdyYWRpZW50VGV4dHVyZSh0aGlzLl9hbmd1bGFyU3BlZWRH
cmFkaWVudHMsICJfYW5ndWxhclNwZWVkR3JhZGllbnRzVGV4dHVyZSIpOworICAgIH07CisgICAg
R1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9jcmVhdGVWZWxvY2l0eUdyYWRpZW50VGV4dHVy
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fY3JlYXRlRmFjdG9yR3JhZGllbnRUZXh0
dXJlKHRoaXMuX3ZlbG9jaXR5R3JhZGllbnRzLCAiX3ZlbG9jaXR5R3JhZGllbnRzVGV4dHVyZSIp
OworICAgIH07CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9jcmVhdGVMaW1pdFZl
bG9jaXR5R3JhZGllbnRUZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jcmVh
dGVGYWN0b3JHcmFkaWVudFRleHR1cmUodGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50cywgIl9s
aW1pdFZlbG9jaXR5R3JhZGllbnRzVGV4dHVyZSIpOworICAgIH07CisgICAgR1BVUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLl9jcmVhdGVEcmFnR3JhZGllbnRUZXh0dXJlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB0aGlzLl9jcmVhdGVGYWN0b3JHcmFkaWVudFRleHR1cmUodGhpcy5fZHJhZ0dy
YWRpZW50cywgIl9kcmFnR3JhZGllbnRzVGV4dHVyZSIpOworICAgIH07CisgICAgR1BVUGFydGlj
bGVTeXN0ZW0ucHJvdG90eXBlLl9jcmVhdGVDb2xvckdyYWRpZW50VGV4dHVyZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jb2xvckdyYWRpZW50cyB8fCAhdGhpcy5fY29sb3JH
cmFkaWVudHMubGVuZ3RoIHx8IHRoaXMuX2NvbG9yR3JhZGllbnRzVGV4dHVyZSkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBkYXRhID0gbmV3IFVpbnQ4QXJy
YXkodGhpcy5fcmF3VGV4dHVyZVdpZHRoICogNCk7CisgICAgICAgIHZhciB0bXBDb2xvciA9IF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRtcENvbG9ycyJd
LkNvbG9yNFswXTsKKyAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0aGlzLl9yYXdUZXh0dXJl
V2lkdGg7IHgrKykgeworICAgICAgICAgICAgdmFyIHJhdGlvID0geCAvIHRoaXMuX3Jhd1RleHR1
cmVXaWR0aDsKKyAgICAgICAgICAgIF9NaXNjX2dyYWRpZW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJHcmFkaWVudEhlbHBlciJdLkdldEN1cnJlbnRHcmFkaWVudChyYXRpbywgdGhp
cy5fY29sb3JHcmFkaWVudHMsIGZ1bmN0aW9uIChjdXJyZW50R3JhZGllbnQsIG5leHRHcmFkaWVu
dCwgc2NhbGUpIHsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJDb2xvcjQiXS5MZXJwVG9SZWYoY3VycmVudEdyYWRpZW50LmNv
bG9yMSwgbmV4dEdyYWRpZW50LmNvbG9yMSwgc2NhbGUsIHRtcENvbG9yKTsKKyAgICAgICAgICAg
ICAgICBkYXRhW3ggKiA0XSA9IHRtcENvbG9yLnIgKiAyNTU7CisgICAgICAgICAgICAgICAgZGF0
YVt4ICogNCArIDFdID0gdG1wQ29sb3IuZyAqIDI1NTsKKyAgICAgICAgICAgICAgICBkYXRhW3gg
KiA0ICsgMl0gPSB0bXBDb2xvci5iICogMjU1OworICAgICAgICAgICAgICAgIGRhdGFbeCAqIDQg
KyAzXSA9IHRtcENvbG9yLmEgKiAyNTU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9jb2xvckdyYWRpZW50c1RleHR1cmUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3Jh
d1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIlJhd1RleHR1cmUiXS5DcmVh
dGVSR0JBVGV4dHVyZShkYXRhLCB0aGlzLl9yYXdUZXh0dXJlV2lkdGgsIDEsIHRoaXMuX3NjZW5l
LCBmYWxzZSwgZmFsc2UsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfX1siVGV4dHVyZSJdLk5FQVJFU1RfU0FNUExJTkdNT0RFKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFJlbmRlcnMgdGhlIHBhcnRpY2xlIHN5c3RlbSBpbiBpdHMgY3Vy
cmVudCBzdGF0ZQorICAgICAqIEBwYXJhbSBwcmVXYXJtIGRlZmluZXMgaWYgdGhlIHN5c3RlbSBz
aG91bGQgb25seSB1cGRhdGUgdGhlIHBhcnRpY2xlcyBidXQgbm90IHJlbmRlciB0aGVtCisgICAg
ICogQHJldHVybnMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHBhcnRpY2xlcworICAgICAqLworICAg
IEdQVVBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAocHJlV2FybSkg
eworICAgICAgICBpZiAocHJlV2FybSA9PT0gdm9pZCAwKSB7IHByZVdhcm0gPSBmYWxzZTsgfQor
ICAgICAgICBpZiAoIXRoaXMuX3N0YXJ0ZWQpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuX2NyZWF0ZUNvbG9yR3JhZGllbnRUZXh0dXJlKCk7CisgICAg
ICAgIHRoaXMuX2NyZWF0ZVNpemVHcmFkaWVudFRleHR1cmUoKTsKKyAgICAgICAgdGhpcy5fY3Jl
YXRlQW5ndWxhclNwZWVkR3JhZGllbnRUZXh0dXJlKCk7CisgICAgICAgIHRoaXMuX2NyZWF0ZVZl
bG9jaXR5R3JhZGllbnRUZXh0dXJlKCk7CisgICAgICAgIHRoaXMuX2NyZWF0ZUxpbWl0VmVsb2Np
dHlHcmFkaWVudFRleHR1cmUoKTsKKyAgICAgICAgdGhpcy5fY3JlYXRlRHJhZ0dyYWRpZW50VGV4
dHVyZSgpOworICAgICAgICB0aGlzLl9yZWNyZWF0ZVVwZGF0ZUVmZmVjdCgpOworICAgICAgICB0
aGlzLl9yZWNyZWF0ZVJlbmRlckVmZmVjdCgpOworICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSgp
KSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXByZVdh
cm0pIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fcHJlV2FybURvbmUgJiYgdGhpcy5wcmVXYXJt
Q3ljbGVzKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRo
aXMucHJlV2FybUN5Y2xlczsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmFu
aW1hdGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl9wcmVXYXJtRG9uZSA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFJlbmRlcklkID09
PSB0aGlzLl9zY2VuZS5nZXRGcmFtZUlkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRSZW5kZXJJZCA9IHRoaXMu
X3NjZW5lLmdldEZyYW1lSWQoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBHZXQgZXZlcnl0aGlu
ZyByZWFkeSB0byByZW5kZXIKKyAgICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpOworICAgICAgICB0
aGlzLl9hY2N1bXVsYXRlZENvdW50ICs9IHRoaXMuZW1pdFJhdGUgKiB0aGlzLl90aW1lRGVsdGE7
CisgICAgICAgIGlmICh0aGlzLl9hY2N1bXVsYXRlZENvdW50ID4gMSkgeworICAgICAgICAgICAg
dmFyIGludFBhcnQgPSB0aGlzLl9hY2N1bXVsYXRlZENvdW50IHwgMDsKKyAgICAgICAgICAgIHRo
aXMuX2FjY3VtdWxhdGVkQ291bnQgLT0gaW50UGFydDsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJl
bnRBY3RpdmVDb3VudCA9IE1hdGgubWluKHRoaXMuX2FjdGl2ZUNvdW50LCB0aGlzLl9jdXJyZW50
QWN0aXZlQ291bnQgKyBpbnRQYXJ0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2N1
cnJlbnRBY3RpdmVDb3VudCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gRW5hYmxlIHVwZGF0ZSBlZmZlY3QKKyAgICAgICAgdGhpcy5fZW5naW5lLmVuYWJs
ZUVmZmVjdCh0aGlzLl91cGRhdGVFZmZlY3QpOworICAgICAgICB0aGlzLl9lbmdpbmUuc2V0U3Rh
dGUoZmFsc2UpOworICAgICAgICB0aGlzLl91cGRhdGVFZmZlY3Quc2V0RmxvYXQoImN1cnJlbnRD
b3VudCIsIHRoaXMuX2N1cnJlbnRBY3RpdmVDb3VudCk7CisgICAgICAgIHRoaXMuX3VwZGF0ZUVm
ZmVjdC5zZXRGbG9hdCgidGltZURlbHRhIiwgdGhpcy5fdGltZURlbHRhKTsKKyAgICAgICAgdGhp
cy5fdXBkYXRlRWZmZWN0LnNldEZsb2F0KCJzdG9wRmFjdG9yIiwgdGhpcy5fc3RvcHBlZCA/IDAg
OiAxKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldFRleHR1cmUoInJhbmRvbVNhbXBs
ZXIiLCB0aGlzLl9yYW5kb21UZXh0dXJlKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNl
dFRleHR1cmUoInJhbmRvbVNhbXBsZXIyIiwgdGhpcy5fcmFuZG9tVGV4dHVyZTIpOworICAgICAg
ICB0aGlzLl91cGRhdGVFZmZlY3Quc2V0RmxvYXQyKCJsaWZlVGltZSIsIHRoaXMubWluTGlmZVRp
bWUsIHRoaXMubWF4TGlmZVRpbWUpOworICAgICAgICB0aGlzLl91cGRhdGVFZmZlY3Quc2V0Rmxv
YXQyKCJlbWl0UG93ZXIiLCB0aGlzLm1pbkVtaXRQb3dlciwgdGhpcy5tYXhFbWl0UG93ZXIpOwor
ICAgICAgICBpZiAoIXRoaXMuX2NvbG9yR3JhZGllbnRzVGV4dHVyZSkgeworICAgICAgICAgICAg
dGhpcy5fdXBkYXRlRWZmZWN0LnNldERpcmVjdENvbG9yNCgiY29sb3IxIiwgdGhpcy5jb2xvcjEp
OworICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldERpcmVjdENvbG9yNCgiY29sb3Iy
IiwgdGhpcy5jb2xvcjIpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVjdC5z
ZXRGbG9hdDIoInNpemVSYW5nZSIsIHRoaXMubWluU2l6ZSwgdGhpcy5tYXhTaXplKTsKKyAgICAg
ICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldEZsb2F0NCgic2NhbGVSYW5nZSIsIHRoaXMubWluU2Nh
bGVYLCB0aGlzLm1heFNjYWxlWCwgdGhpcy5taW5TY2FsZVksIHRoaXMubWF4U2NhbGVZKTsKKyAg
ICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldEZsb2F0NCgiYW5nbGVSYW5nZSIsIHRoaXMubWlu
QW5ndWxhclNwZWVkLCB0aGlzLm1heEFuZ3VsYXJTcGVlZCwgdGhpcy5taW5Jbml0aWFsUm90YXRp
b24sIHRoaXMubWF4SW5pdGlhbFJvdGF0aW9uKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0
LnNldFZlY3RvcjMoImdyYXZpdHkiLCB0aGlzLmdyYXZpdHkpOworICAgICAgICBpZiAodGhpcy5f
c2l6ZUdyYWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVjdC5z
ZXRUZXh0dXJlKCJzaXplR3JhZGllbnRTYW1wbGVyIiwgdGhpcy5fc2l6ZUdyYWRpZW50c1RleHR1
cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHNU
ZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVFZmZlY3Quc2V0VGV4dHVyZSgiYW5n
dWxhclNwZWVkR3JhZGllbnRTYW1wbGVyIiwgdGhpcy5fYW5ndWxhclNwZWVkR3JhZGllbnRzVGV4
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3ZlbG9jaXR5R3JhZGllbnRzVGV4
dHVyZSkgeworICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldFRleHR1cmUoInZlbG9j
aXR5R3JhZGllbnRTYW1wbGVyIiwgdGhpcy5fdmVsb2NpdHlHcmFkaWVudHNUZXh0dXJlKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50c1RleHR1cmUp
IHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVjdC5zZXRUZXh0dXJlKCJsaW1pdFZlbG9j
aXR5R3JhZGllbnRTYW1wbGVyIiwgdGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50c1RleHR1cmUp
OworICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldEZsb2F0KCJsaW1pdFZlbG9jaXR5
RGFtcGluZyIsIHRoaXMubGltaXRWZWxvY2l0eURhbXBpbmcpOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9kcmFnR3JhZGllbnRzVGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5fdXBk
YXRlRWZmZWN0LnNldFRleHR1cmUoImRyYWdHcmFkaWVudFNhbXBsZXIiLCB0aGlzLl9kcmFnR3Jh
ZGllbnRzVGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucGFydGljbGVFbWl0
dGVyVHlwZSkgeworICAgICAgICAgICAgdGhpcy5wYXJ0aWNsZUVtaXR0ZXJUeXBlLmFwcGx5VG9T
aGFkZXIodGhpcy5fdXBkYXRlRWZmZWN0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5f
aXNBbmltYXRpb25TaGVldEVuYWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVmZmVj
dC5zZXRGbG9hdDMoImNlbGxJbmZvcyIsIHRoaXMuc3RhcnRTcHJpdGVDZWxsSUQsIHRoaXMuZW5k
U3ByaXRlQ2VsbElELCB0aGlzLnNwcml0ZUNlbGxDaGFuZ2VTcGVlZCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMubm9pc2VUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVF
ZmZlY3Quc2V0VGV4dHVyZSgibm9pc2VTYW1wbGVyIiwgdGhpcy5ub2lzZVRleHR1cmUpOworICAg
ICAgICAgICAgdGhpcy5fdXBkYXRlRWZmZWN0LnNldFZlY3RvcjMoIm5vaXNlU3RyZW5ndGgiLCB0
aGlzLm5vaXNlU3RyZW5ndGgpOworICAgICAgICB9CisgICAgICAgIHZhciBlbWl0dGVyV007Cisg
ICAgICAgIGlmICh0aGlzLmVtaXR0ZXIucG9zaXRpb24pIHsKKyAgICAgICAgICAgIHZhciBlbWl0
dGVyTWVzaCA9IHRoaXMuZW1pdHRlcjsKKyAgICAgICAgICAgIGVtaXR0ZXJXTSA9IGVtaXR0ZXJN
ZXNoLmdldFdvcmxkTWF0cml4KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB2YXIgZW1pdHRlclBvc2l0aW9uID0gdGhpcy5lbWl0dGVyOworICAgICAgICAgICAgZW1p
dHRlcldNID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
Ik1hdHJpeCJdLlRyYW5zbGF0aW9uKGVtaXR0ZXJQb3NpdGlvbi54LCBlbWl0dGVyUG9zaXRpb24u
eSwgZW1pdHRlclBvc2l0aW9uLnopOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZUVm
ZmVjdC5zZXRNYXRyaXgoImVtaXR0ZXJXTSIsIGVtaXR0ZXJXTSk7CisgICAgICAgIC8vIEJpbmQg
c291cmNlIFZBTworICAgICAgICB0aGlzLl9lbmdpbmUuYmluZFZlcnRleEFycmF5T2JqZWN0KHRo
aXMuX3VwZGF0ZVZBT1t0aGlzLl90YXJnZXRJbmRleF0sIG51bGwpOworICAgICAgICAvLyBVcGRh
dGUKKyAgICAgICAgdGhpcy5fZW5naW5lLmJpbmRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcih0aGlz
Ll90YXJnZXRCdWZmZXIuZ2V0QnVmZmVyKCkpOworICAgICAgICB0aGlzLl9lbmdpbmUuc2V0UmFz
dGVyaXplclN0YXRlKGZhbHNlKTsKKyAgICAgICAgdGhpcy5fZW5naW5lLmJlZ2luVHJhbnNmb3Jt
RmVlZGJhY2sodHJ1ZSk7CisgICAgICAgIHRoaXMuX2VuZ2luZS5kcmF3QXJyYXlzVHlwZShfTWF0
ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJNYXRlcmlhbCJd
LlBvaW50TGlzdERyYXdNb2RlLCAwLCB0aGlzLl9jdXJyZW50QWN0aXZlQ291bnQpOworICAgICAg
ICB0aGlzLl9lbmdpbmUuZW5kVHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgdGhpcy5fZW5n
aW5lLnNldFJhc3Rlcml6ZXJTdGF0ZSh0cnVlKTsKKyAgICAgICAgdGhpcy5fZW5naW5lLmJpbmRU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihudWxsKTsKKyAgICAgICAgaWYgKCFwcmVXYXJtKSB7Cisg
ICAgICAgICAgICAvLyBFbmFibGUgcmVuZGVyIGVmZmVjdAorICAgICAgICAgICAgdGhpcy5fZW5n
aW5lLmVuYWJsZUVmZmVjdCh0aGlzLl9yZW5kZXJFZmZlY3QpOworICAgICAgICAgICAgdmFyIHZp
ZXdNYXRyaXggPSB0aGlzLl9zY2VuZS5nZXRWaWV3TWF0cml4KCk7CisgICAgICAgICAgICB0aGlz
Ll9yZW5kZXJFZmZlY3Quc2V0TWF0cml4KCJ2aWV3Iiwgdmlld01hdHJpeCk7CisgICAgICAgICAg
ICB0aGlzLl9yZW5kZXJFZmZlY3Quc2V0TWF0cml4KCJwcm9qZWN0aW9uIiwgdGhpcy5fc2NlbmUu
Z2V0UHJvamVjdGlvbk1hdHJpeCgpKTsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdC5z
ZXRUZXh0dXJlKCJ0ZXh0dXJlU2FtcGxlciIsIHRoaXMucGFydGljbGVUZXh0dXJlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdC5zZXRWZWN0b3IyKCJ0cmFuc2xhdGlvblBpdm90Iiwg
dGhpcy50cmFuc2xhdGlvblBpdm90KTsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdC5z
ZXRWZWN0b3IzKCJ3b3JsZE9mZnNldCIsIHRoaXMud29ybGRPZmZzZXQpOworICAgICAgICAgICAg
aWYgKHRoaXMuX2NvbG9yR3JhZGllbnRzVGV4dHVyZSkgeworICAgICAgICAgICAgICAgIHRoaXMu
X3JlbmRlckVmZmVjdC5zZXRUZXh0dXJlKCJjb2xvckdyYWRpZW50U2FtcGxlciIsIHRoaXMuX2Nv
bG9yR3JhZGllbnRzVGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJFZmZlY3Quc2V0RGlyZWN0Q29sb3I0KCJjb2xv
ckRlYWQiLCB0aGlzLmNvbG9yRGVhZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dGhpcy5faXNBbmltYXRpb25TaGVldEVuYWJsZWQgJiYgdGhpcy5wYXJ0aWNsZVRleHR1cmUpIHsK
KyAgICAgICAgICAgICAgICB2YXIgYmFzZVNpemUgPSB0aGlzLnBhcnRpY2xlVGV4dHVyZS5nZXRC
YXNlU2l6ZSgpOworICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdC5zZXRGbG9hdDMo
InNoZWV0SW5mb3MiLCB0aGlzLnNwcml0ZUNlbGxXaWR0aCAvIGJhc2VTaXplLndpZHRoLCB0aGlz
LnNwcml0ZUNlbGxIZWlnaHQgLyBiYXNlU2l6ZS5oZWlnaHQsIGJhc2VTaXplLndpZHRoIC8gdGhp
cy5zcHJpdGVDZWxsV2lkdGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMu
X2lzQmlsbGJvYXJkQmFzZWQpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5f
c2NlbmUuYWN0aXZlQ2FtZXJhOworICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdC5z
ZXRWZWN0b3IzKCJleWVQb3NpdGlvbiIsIGNhbWVyYS5nbG9iYWxQb3NpdGlvbik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUuY2xpcFBsYW5lIHx8IHRoaXMuX3Nj
ZW5lLmNsaXBQbGFuZTIgfHwgdGhpcy5fc2NlbmUuY2xpcFBsYW5lMyB8fCB0aGlzLl9zY2VuZS5j
bGlwUGxhbmU0KSB7CisgICAgICAgICAgICAgICAgdmFyIGludlZpZXcgPSB2aWV3TWF0cml4LmNs
b25lKCk7CisgICAgICAgICAgICAgICAgaW52Vmlldy5pbnZlcnQoKTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9yZW5kZXJFZmZlY3Quc2V0TWF0cml4KCJpbnZWaWV3IiwgaW52Vmlldyk7CisgICAg
ICAgICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTJfX1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kQ2xpcFBsYW5lKHRoaXMuX3JlbmRlckVm
ZmVjdCwgdGhpcy5fc2NlbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gaW1hZ2Ug
cHJvY2Vzc2luZworICAgICAgICAgICAgaWYgKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24gJiYgIXRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uYXBwbHlCeVBvc3RQ
cm9jZXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbi5iaW5kKHRoaXMuX3JlbmRlckVmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBEcmF3IG9yZGVyCisgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuYmxlbmRNb2RlKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfX1siUGFydGljbGVTeXN0ZW0iXS5CTEVORE1PREVfQUREOgorICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9lbmdpbmUuc2V0QWxwaGFNb2RlKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTZfX1siQ29uc3RhbnRzIl0uQUxQSEFfQUREKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfcGFydGljbGVTeXN0ZW1f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUGFydGljbGVTeXN0ZW0iXS5CTEVORE1PREVf
T05FT05FOgorICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0QWxwaGFNb2RlKF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siQ29uc3RhbnRz
Il0uQUxQSEFfT05FT05FKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
UGFydGljbGVTeXN0ZW0iXS5CTEVORE1PREVfU1RBTkRBUkQ6CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX2VuZ2luZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xNl9fWyJDb25zdGFudHMiXS5BTFBIQV9DT01CSU5FKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfcGFydGljbGVTeXN0ZW1f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUGFydGljbGVTeXN0ZW0iXS5CTEVORE1PREVf
TVVMVElQTFk6CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5zZXRBbHBoYU1vZGUo
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fWyJDb25zdGFu
dHMiXS5BTFBIQV9NVUxUSVBMWSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuZm9yY2VEZXB0aFdyaXRlKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5fZW5naW5lLnNldERlcHRoV3JpdGUodHJ1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAvLyBCaW5kIHNvdXJjZSBWQU8KKyAgICAgICAgICAgIHRoaXMuX2VuZ2lu
ZS5iaW5kVmVydGV4QXJyYXlPYmplY3QodGhpcy5fcmVuZGVyVkFPW3RoaXMuX3RhcmdldEluZGV4
XSwgbnVsbCk7CisgICAgICAgICAgICAvLyBSZW5kZXIKKyAgICAgICAgICAgIHRoaXMuX2VuZ2lu
ZS5kcmF3QXJyYXlzVHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xMV9fWyJNYXRlcmlhbCJdLlRyaWFuZ2xlRmFuRHJhd01vZGUsIDAsIDQsIHRoaXMuX2N1
cnJlbnRBY3RpdmVDb3VudCk7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0QWxwaGFNb2Rl
KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siQ29uc3Rh
bnRzIl0uQUxQSEFfRElTQUJMRSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU3dpdGNoIFZBT3MK
KyAgICAgICAgdGhpcy5fdGFyZ2V0SW5kZXgrKzsKKyAgICAgICAgaWYgKHRoaXMuX3RhcmdldElu
ZGV4ID09PSAyKSB7CisgICAgICAgICAgICB0aGlzLl90YXJnZXRJbmRleCA9IDA7CisgICAgICAg
IH0KKyAgICAgICAgLy8gU3dpdGNoIGJ1ZmZlcnMKKyAgICAgICAgdmFyIHRtcEJ1ZmZlciA9IHRo
aXMuX3NvdXJjZUJ1ZmZlcjsKKyAgICAgICAgdGhpcy5fc291cmNlQnVmZmVyID0gdGhpcy5fdGFy
Z2V0QnVmZmVyOworICAgICAgICB0aGlzLl90YXJnZXRCdWZmZXIgPSB0bXBCdWZmZXI7CisgICAg
ICAgIHJldHVybiB0aGlzLl9jdXJyZW50QWN0aXZlQ291bnQ7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBSZWJ1aWxkcyB0aGUgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFydGlj
bGVTeXN0ZW0ucHJvdG90eXBlLnJlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMu
X2luaXRpYWxpemUodHJ1ZSk7CisgICAgfTsKKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5
cGUuX3JlbGVhc2VCdWZmZXJzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fYnVm
ZmVyMCkgeworICAgICAgICAgICAgdGhpcy5fYnVmZmVyMC5kaXNwb3NlKCk7CisgICAgICAgICAg
ICB0aGlzLl9idWZmZXIwID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYnVm
ZmVyMSkgeworICAgICAgICAgICAgdGhpcy5fYnVmZmVyMS5kaXNwb3NlKCk7CisgICAgICAgICAg
ICB0aGlzLl9idWZmZXIxID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc3By
aXRlQnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9zcHJpdGVCdWZmZXIuZGlzcG9zZSgpOwor
ICAgICAgICAgICAgdGhpcy5fc3ByaXRlQnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgIH07
CisgICAgR1BVUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9yZWxlYXNlVkFPcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl91cGRhdGVWQU8pIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5f
dXBkYXRlVkFPLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdGhpcy5fZW5naW5lLnJl
bGVhc2VWZXJ0ZXhBcnJheU9iamVjdCh0aGlzLl91cGRhdGVWQU9baW5kZXhdKTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLl91cGRhdGVWQU8gPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IHRoaXMuX3JlbmRlclZBTy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgIHRoaXMuX2VuZ2luZS5yZWxlYXNlVmVydGV4QXJyYXlPYmplY3QodGhpcy5fcmVuZGVyVkFP
W2luZGV4XSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVuZGVyVkFPID0gW107CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgcGFydGljbGUgc3lzdGVtIGFuZCBmcmVl
IHRoZSBhc3NvY2lhdGVkIHJlc291cmNlcworICAgICAqIEBwYXJhbSBkaXNwb3NlVGV4dHVyZSBk
ZWZpbmVzIGlmIHRoZSBwYXJ0aWN1bGUgdGV4dHVyZSBtdXN0IGJlIGRpc3Bvc2VkIGFzIHdlbGwg
KHRydWUgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3RlbS5wcm90b3R5
cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChkaXNwb3NlVGV4dHVyZSkgeworICAgICAgICBpZiAoZGlz
cG9zZVRleHR1cmUgPT09IHZvaWQgMCkgeyBkaXNwb3NlVGV4dHVyZSA9IHRydWU7IH0KKyAgICAg
ICAgdmFyIGluZGV4ID0gdGhpcy5fc2NlbmUucGFydGljbGVTeXN0ZW1zLmluZGV4T2YodGhpcyk7
CisgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5wYXJ0
aWNsZVN5c3RlbXMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9y
ZWxlYXNlQnVmZmVycygpOworICAgICAgICB0aGlzLl9yZWxlYXNlVkFPcygpOworICAgICAgICBp
ZiAodGhpcy5fY29sb3JHcmFkaWVudHNUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9jb2xv
ckdyYWRpZW50c1RleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fY29sb3JHcmFk
aWVudHNUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc2l6ZUdy
YWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3NpemVHcmFkaWVudHNUZXh0dXJl
LmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX3NpemVHcmFkaWVudHNUZXh0dXJlID0gbnVs
bDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYW5ndWxhclNwZWVkR3JhZGllbnRzVGV4
dHVyZSkgeworICAgICAgICAgICAgdGhpcy5fYW5ndWxhclNwZWVkR3JhZGllbnRzVGV4dHVyZS5k
aXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHNUZXh0dXJl
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fdmVsb2NpdHlHcmFkaWVudHNU
ZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl92ZWxvY2l0eUdyYWRpZW50c1RleHR1cmUuZGlz
cG9zZSgpOworICAgICAgICAgICAgdGhpcy5fdmVsb2NpdHlHcmFkaWVudHNUZXh0dXJlID0gbnVs
bDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50c1Rl
eHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHNUZXh0dXJl
LmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHNUZXh0
dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZHJhZ0dyYWRpZW50c1Rl
eHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2RyYWdHcmFkaWVudHNUZXh0dXJlLmRpc3Bvc2Uo
KTsKKyAgICAgICAgICAgIHRoaXMuX2RyYWdHcmFkaWVudHNUZXh0dXJlID0gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5fcmFuZG9tVGV4dHVyZSkgeworICAgICAgICAgICAgdGhp
cy5fcmFuZG9tVGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9yYW5kb21UZXh0
dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmFuZG9tVGV4dHVyZTIp
IHsKKyAgICAgICAgICAgIHRoaXMuX3JhbmRvbVRleHR1cmUyLmRpc3Bvc2UoKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JhbmRvbVRleHR1cmUyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ZGlzcG9zZVRleHR1cmUgJiYgdGhpcy5wYXJ0aWNsZVRleHR1cmUpIHsKKyAgICAgICAgICAgIHRo
aXMucGFydGljbGVUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMucGFydGljbGVU
ZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGlzcG9zZVRleHR1cmUgJiYg
dGhpcy5ub2lzZVRleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMubm9pc2VUZXh0dXJlLmRpc3Bv
c2UoKTsKKyAgICAgICAgICAgIHRoaXMubm9pc2VUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQor
ICAgICAgICAvLyBDYWxsYmFjaworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUubm90
aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUuY2xl
YXIoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsb25lcyB0aGUgcGFydGljbGUgc3lzdGVt
LgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjbG9uZWQgb2JqZWN0CisgICAg
ICogQHBhcmFtIG5ld0VtaXR0ZXIgVGhlIG5ldyBlbWl0dGVyIHRvIHVzZQorICAgICAqIEByZXR1
cm5zIHRoZSBjbG9uZWQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgR1BVUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKG5hbWUsIG5ld0VtaXR0ZXIpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IG5ldyBHUFVQYXJ0aWNsZVN5c3RlbShuYW1lLCB7IGNhcGFjaXR5
OiB0aGlzLl9jYXBhY2l0eSwgcmFuZG9tVGV4dHVyZVNpemU6IHRoaXMuX3JhbmRvbVRleHR1cmVT
aXplIH0sIHRoaXMuX3NjZW5lKTsKKyAgICAgICAgX01pc2NfZGVlcENvcGllcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMThfX1siRGVlcENvcGllciJdLkRlZXBDb3B5KHRoaXMsIHJlc3VsdCwg
WyJwYXJ0aWNsZXMiLCAiY3VzdG9tU2hhZGVyIiwgIm5vaXNlVGV4dHVyZSIsICJwYXJ0aWNsZVRl
eHR1cmUiLCAib25EaXNwb3NlT2JzZXJ2YWJsZSJdKTsKKyAgICAgICAgaWYgKG5ld0VtaXR0ZXIg
PT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgbmV3RW1pdHRlciA9IHRoaXMuZW1pdHRlcjsK
KyAgICAgICAgfQorICAgICAgICByZXN1bHQuZW1pdHRlciA9IG5ld0VtaXR0ZXI7CisgICAgICAg
IGlmICh0aGlzLnBhcnRpY2xlVGV4dHVyZSkgeworICAgICAgICAgICAgcmVzdWx0LnBhcnRpY2xl
VGV4dHVyZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE0X19bIlRleHR1cmUiXSh0aGlzLnBhcnRpY2xlVGV4dHVyZS51cmwsIHRoaXMu
X3NjZW5lKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQubm9pc2VUZXh0dXJlID0gdGhpcy5u
b2lzZVRleHR1cmU7CisgICAgICAgIHJlc3VsdC5lbWl0dGVyID0gbmV3RW1pdHRlcjsKKyAgICAg
ICAgaWYgKHRoaXMucGFydGljbGVUZXh0dXJlKSB7CisgICAgICAgICAgICByZXN1bHQucGFydGlj
bGVUZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTRfX1siVGV4dHVyZSJdKHRoaXMucGFydGljbGVUZXh0dXJlLnVybCwgdGhp
cy5fc2NlbmUpOworICAgICAgICB9CisgICAgICAgIC8vIENsb25lIGdyYWRpZW50cworICAgICAg
ICBpZiAodGhpcy5fY29sb3JHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2NvbG9yR3Jh
ZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRk
Q29sb3JHcmFkaWVudCh2LmdyYWRpZW50LCB2LmNvbG9yMSwgdi5jb2xvcjIpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2RyYWdHcmFkaWVudHMpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2RyYWdHcmFkaWVudHMuZm9yRWFjaChmdW5jdGlvbiAodikgeworICAg
ICAgICAgICAgICAgIHJlc3VsdC5hZGREcmFnR3JhZGllbnQodi5ncmFkaWVudCwgdi5mYWN0b3Ix
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9hbmd1bGFy
U3BlZWRHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50
cy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEFuZ3Vs
YXJTcGVlZEdyYWRpZW50KHYuZ3JhZGllbnQsIHYuZmFjdG9yMSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZW1pdFJhdGVHcmFkaWVudHMpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2VtaXRSYXRlR3JhZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYWRkRW1pdFJhdGVHcmFkaWVudCh2LmdyYWRpZW50LCB2LmZh
Y3RvcjEsIHYuZmFjdG9yMik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5fbGlmZVRpbWVHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2xpZmVUaW1l
R3JhZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YWRkTGlmZVRpbWVHcmFkaWVudCh2LmdyYWRpZW50LCB2LmZhY3RvcjEsIHYuZmFjdG9yMik7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fbGltaXRWZWxvY2l0
eUdyYWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50cy5m
b3JFYWNoKGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZExpbWl0VmVs
b2NpdHlHcmFkaWVudCh2LmdyYWRpZW50LCB2LmZhY3RvcjEpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3NpemVHcmFkaWVudHMpIHsKKyAgICAgICAgICAg
IHRoaXMuX3NpemVHcmFkaWVudHMuZm9yRWFjaChmdW5jdGlvbiAodikgeworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hZGRTaXplR3JhZGllbnQodi5ncmFkaWVudCwgdi5mYWN0b3IxKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9zdGFydFNpemVHcmFkaWVu
dHMpIHsKKyAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2l6ZUdyYWRpZW50cy5mb3JFYWNoKGZ1bmN0
aW9uICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN0YXJ0U2l6ZUdyYWRpZW50KHYu
Z3JhZGllbnQsIHYuZmFjdG9yMSwgdi5mYWN0b3IyKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl92ZWxvY2l0eUdyYWRpZW50cykgeworICAgICAgICAgICAg
dGhpcy5fdmVsb2NpdHlHcmFkaWVudHMuZm9yRWFjaChmdW5jdGlvbiAodikgeworICAgICAgICAg
ICAgICAgIHJlc3VsdC5hZGRWZWxvY2l0eUdyYWRpZW50KHYuZ3JhZGllbnQsIHYuZmFjdG9yMSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmFtcEdyYWRp
ZW50cykgeworICAgICAgICAgICAgdGhpcy5fcmFtcEdyYWRpZW50cy5mb3JFYWNoKGZ1bmN0aW9u
ICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFJhbXBHcmFkaWVudCh2LmdyYWRpZW50
LCB2LmNvbG9yKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
Ll9jb2xvclJlbWFwR3JhZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl9jb2xvclJlbWFwR3Jh
ZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRk
Q29sb3JSZW1hcEdyYWRpZW50KHYuZ3JhZGllbnQsIHYuZmFjdG9yMSwgdi5mYWN0b3IyKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9hbHBoYVJlbWFwR3Jh
ZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl9hbHBoYVJlbWFwR3JhZGllbnRzLmZvckVhY2go
ZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkQWxwaGFSZW1hcEdyYWRp
ZW50KHYuZ3JhZGllbnQsIHYuZmFjdG9yMSwgdi5mYWN0b3IyKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXJpYWxpemVzIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gdG8gYSBKU09OIG9iamVjdC4KKyAgICAg
KiBAcmV0dXJucyB0aGUgSlNPTiBvYmplY3QKKyAgICAgKi8KKyAgICBHUFVQYXJ0aWNsZVN5c3Rl
bS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFs
aXphdGlvbk9iamVjdCA9IHt9OworICAgICAgICBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzhfX1siUGFydGljbGVTeXN0ZW0iXS5fU2VyaWFsaXplKHNlcmlhbGl6YXRp
b25PYmplY3QsIHRoaXMpOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmFjdGl2ZVBhcnRp
Y2xlQ291bnQgPSB0aGlzLmFjdGl2ZVBhcnRpY2xlQ291bnQ7CisgICAgICAgIHJldHVybiBzZXJp
YWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2VzIGEgSlNPTiBv
YmplY3QgdG8gY3JlYXRlIGEgR1BVIHBhcnRpY2xlIHN5c3RlbS4KKyAgICAgKiBAcGFyYW0gcGFy
c2VkUGFydGljbGVTeXN0ZW0gVGhlIEpTT04gb2JqZWN0IHRvIHBhcnNlCisgICAgICogQHBhcmFt
IHNjZW5lIFRoZSBzY2VuZSB0byBjcmVhdGUgdGhlIHBhcnRpY2xlIHN5c3RlbSBpbgorICAgICAq
IEBwYXJhbSByb290VXJsIFRoZSByb290IHVybCB0byB1c2UgdG8gbG9hZCBleHRlcm5hbCBkZXBl
bmRlbmNpZXMgbGlrZSB0ZXh0dXJlCisgICAgICogQHBhcmFtIGRvTm90U3RhcnQgSWdub3JlIHRo
ZSBwcmV2ZW50QXV0b1N0YXJ0IGF0dHJpYnV0ZSBhbmQgZG9lcyBub3Qgc3RhcnQKKyAgICAgKiBA
cmV0dXJucyB0aGUgcGFyc2VkIEdQVSBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBHUFVQ
YXJ0aWNsZVN5c3RlbS5QYXJzZSA9IGZ1bmN0aW9uIChwYXJzZWRQYXJ0aWNsZVN5c3RlbSwgc2Nl
bmUsIHJvb3RVcmwsIGRvTm90U3RhcnQpIHsKKyAgICAgICAgaWYgKGRvTm90U3RhcnQgPT09IHZv
aWQgMCkgeyBkb05vdFN0YXJ0ID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIG5hbWUgPSBwYXJzZWRQ
YXJ0aWNsZVN5c3RlbS5uYW1lOworICAgICAgICB2YXIgcGFydGljbGVTeXN0ZW0gPSBuZXcgR1BV
UGFydGljbGVTeXN0ZW0obmFtZSwgeyBjYXBhY2l0eTogcGFyc2VkUGFydGljbGVTeXN0ZW0uY2Fw
YWNpdHksIHJhbmRvbVRleHR1cmVTaXplOiBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5yYW5kb21UZXh0
dXJlU2l6ZSB9LCBzY2VuZSk7CisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5hY3Rp
dmVQYXJ0aWNsZUNvdW50KSB7CisgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5hY3RpdmVQYXJ0
aWNsZUNvdW50ID0gcGFyc2VkUGFydGljbGVTeXN0ZW0uYWN0aXZlUGFydGljbGVDb3VudDsKKyAg
ICAgICAgfQorICAgICAgICBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siUGFydGljbGVTeXN0ZW0iXS5fUGFyc2UocGFyc2VkUGFydGljbGVTeXN0ZW0sIHBhcnRp
Y2xlU3lzdGVtLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIC8vIEF1dG8gc3RhcnQKKyAgICAg
ICAgaWYgKHBhcnNlZFBhcnRpY2xlU3lzdGVtLnByZXZlbnRBdXRvU3RhcnQpIHsKKyAgICAgICAg
ICAgIHBhcnRpY2xlU3lzdGVtLnByZXZlbnRBdXRvU3RhcnQgPSBwYXJzZWRQYXJ0aWNsZVN5c3Rl
bS5wcmV2ZW50QXV0b1N0YXJ0OworICAgICAgICB9CisgICAgICAgIGlmICghZG9Ob3RTdGFydCAm
JiAhcGFydGljbGVTeXN0ZW0ucHJldmVudEF1dG9TdGFydCkgeworICAgICAgICAgICAgcGFydGlj
bGVTeXN0ZW0uc3RhcnQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFydGljbGVTeXN0
ZW07CisgICAgfTsKKyAgICByZXR1cm4gR1BVUGFydGljbGVTeXN0ZW07Cit9KF9iYXNlUGFydGlj
bGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQmFzZVBhcnRpY2xlU3lzdGVt
Il0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QYXJ0aWNsZXMvaW5kZXgudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGFydGljbGVzL2lu
ZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogQmFzZVBhcnRpY2xlU3lzdGVtLCBHUFVQYXJ0aWNsZVN5c3RlbSwgUGFydGlj
bGUsIFBhcnRpY2xlSGVscGVyLCBQYXJ0aWNsZVN5c3RlbSwgX0lEb05lZWRUb0JlSW5UaGVCdWls
ZCwgUGFydGljbGVTeXN0ZW1TZXQsIFNvbGlkUGFydGljbGUsIE1vZGVsU2hhcGUsIERlcHRoU29y
dGVkUGFydGljbGUsIFNvbGlkUGFydGljbGVTeXN0ZW0sIFN1YkVtaXR0ZXJUeXBlLCBTdWJFbWl0
dGVyLCBCb3hQYXJ0aWNsZUVtaXR0ZXIsIENvbmVQYXJ0aWNsZUVtaXR0ZXIsIEN5bGluZGVyUGFy
dGljbGVFbWl0dGVyLCBDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyLCBIZW1pc3BoZXJp
Y1BhcnRpY2xlRW1pdHRlciwgUG9pbnRQYXJ0aWNsZUVtaXR0ZXIsIFNwaGVyZVBhcnRpY2xlRW1p
dHRlciwgU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlUGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmFzZVBhcnRpY2xl
U3lzdGVtICovICIuL1BhcnRpY2xlcy9iYXNlUGFydGljbGVTeXN0ZW0udHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQmFzZVBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYmFzZVBh
cnRpY2xlU3lzdGVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2VQYXJ0aWNsZVN5
c3RlbSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbWl0dGVyVHlwZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vRW1pdHRlclR5cGVzL2luZGV4ICovICIuL1BhcnRpY2xlcy9FbWl0dGVyVHlwZXMvaW5kZXgu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm94UGFydGljbGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfRW1pdHRlclR5cGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkJveFBhcnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb25lUGFydGlj
bGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRW1pdHRlclR5cGVzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbmVQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9FbWl0dGVyVHlwZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ3ls
aW5kZXJQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJE
aXJlY3RlZFBhcnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0VtaXR0ZXJUeXBl
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDeWxpbmRlckRpcmVjdGVkUGFy
dGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhlbWlzcGhlcmljUGFydGlj
bGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRW1pdHRlclR5cGVzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkhlbWlzcGhlcmljUGFydGljbGVFbWl0dGVyIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlBvaW50UGFydGljbGVFbWl0dGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfRW1pdHRlclR5cGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlBvaW50UGFydGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNwaGVyZVBh
cnRpY2xlRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0VtaXR0ZXJUeXBlc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9FbWl0dGVyVHlwZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfZ3B1UGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZ3B1UGFydGljbGVTeXN0ZW0gKi8g
Ii4vUGFydGljbGVzL2dwdVBhcnRpY2xlU3lzdGVtLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdQ
VVBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZ3B1UGFydGljbGVTeXN0ZW1f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR1BVUGFydGljbGVTeXN0ZW0iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFydGljbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFydGljbGUgKi8gIi4vUGFydGlj
bGVzL3BhcnRpY2xlLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhcnRpY2xlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfcGFydGljbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUGFydGlj
bGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFydGljbGVIZWxwZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFy
dGljbGVIZWxwZXIgKi8gIi4vUGFydGljbGVzL3BhcnRpY2xlSGVscGVyLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlBhcnRpY2xlSGVscGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGFydGljbGVI
ZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUGFydGljbGVIZWxwZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFydGljbGVTeXN0
ZW0gKi8gIi4vUGFydGljbGVzL3BhcnRpY2xlU3lzdGVtLnRzIik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGFydGljbGVTeXN0ZW1fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUGFydGljbGVTeXN0ZW0iXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfcGFydGljbGVTeXN0ZW1Db21wb25lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGFydGljbGVTeXN0
ZW1Db21wb25lbnQgKi8gIi4vUGFydGljbGVzL3BhcnRpY2xlU3lzdGVtQ29tcG9uZW50LnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIl9JRG9OZWVkVG9CZUluVGhlQnVpbGQiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9wYXJ0aWNsZVN5c3RlbUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fWyJfSURvTmVlZFRvQmVJblRoZUJ1aWxkIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX3BhcnRpY2xlU3lzdGVtU2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BhcnRpY2xlU3lzdGVtU2V0ICovICIuL1BhcnRpY2xl
cy9wYXJ0aWNsZVN5c3RlbVNldC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQYXJ0aWNsZVN5c3Rl
bVNldCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3BhcnRpY2xlU3lzdGVtU2V0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIlBhcnRpY2xlU3lzdGVtU2V0Il07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3NvbGlkUGFydGljbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc29saWRQYXJ0aWNsZSAqLyAiLi9QYXJ0aWNs
ZXMvc29saWRQYXJ0aWNsZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTb2xpZFBhcnRpY2xlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfc29saWRQYXJ0aWNsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJTb2xpZFBhcnRpY2xlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1vZGVsU2hh
cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zb2xpZFBhcnRpY2xlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV84X19bIk1vZGVsU2hhcGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhT
b3J0ZWRQYXJ0aWNsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NvbGlkUGFydGljbGVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siRGVwdGhTb3J0ZWRQYXJ0aWNsZSJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zb2xpZFBhcnRpY2xlU3lzdGVtX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NvbGlkUGFydGljbGVT
eXN0ZW0gKi8gIi4vUGFydGljbGVzL3NvbGlkUGFydGljbGVTeXN0ZW0udHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU29saWRQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NvbGlk
UGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siU29saWRQYXJ0aWNs
ZVN5c3RlbSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdWJFbWl0dGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9z
dWJFbWl0dGVyICovICIuL1BhcnRpY2xlcy9zdWJFbWl0dGVyLnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlN1YkVtaXR0ZXJUeXBlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3ViRW1pdHRlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siU3ViRW1pdHRlclR5cGUiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiU3ViRW1pdHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3N1YkVtaXR0ZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlN1YkVtaXR0ZXIiXTsgfSk7CisKKworCisK
KworCisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1BhcnRpY2xlcy9wYXJ0
aWNsZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9QYXJ0aWNsZXMvcGFydGljbGUudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQYXJ0aWNsZSAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJQYXJ0aWNsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGFy
dGljbGU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAi
Li9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnNjYWxhciAqLyAiLi9NYXRocy9tYXRoLnNjYWxhci50
cyIpOworCisKKworLyoqCisgKiBBIHBhcnRpY2xlIHJlcHJlc2VudHMgb25lIG9mIHRoZSBlbGVt
ZW50IGVtaXR0ZWQgYnkgYSBwYXJ0aWNsZSBzeXN0ZW0uCisgKiBUaGlzIGlzIG1haW5seSBkZWZp
bmUgYnkgaXRzIGNvb3JkaW5hdGVzLCBkaXJlY3Rpb24sIHZlbG9jaXR5IGFuZCBhZ2UuCisgKi8K
K3ZhciBQYXJ0aWNsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIFBhcnRpY2xlCisgICAgICogQHBhcmFtIHBhcnRp
Y2xlU3lzdGVtIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gdGhlIHBhcnRpY2xlIGJlbG9uZ3MgdG8KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBQYXJ0aWNsZSgKKyAgICAvKioKKyAgICAgKiBUaGUgcGFydGlj
bGUgc3lzdGVtIHRoZSBwYXJ0aWNsZSBiZWxvbmdzIHRvLgorICAgICAqLworICAgIHBhcnRpY2xl
U3lzdGVtKSB7CisgICAgICAgIHRoaXMucGFydGljbGVTeXN0ZW0gPSBwYXJ0aWNsZVN5c3RlbTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB3b3JsZCBwb3NpdGlvbiBvZiB0aGUgcGFydGlj
bGUgaW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5wb3NpdGlvbiA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0u
WmVybygpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHdvcmxkIGRpcmVjdGlvbiBvZiB0
aGUgcGFydGljbGUgaW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5kaXJl
Y3Rpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjb2xvciBvZiB0
aGUgcGFydGljbGUuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNvbG9yID0gbmV3IF9NYXRo
c19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9yNCJdKDAsIDAs
IDAsIDApOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGNvbG9yIGNoYW5nZSBvZiB0aGUg
cGFydGljbGUgcGVyIHN0ZXAuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNvbG9yU3RlcCA9
IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xv
cjQiXSgwLCAwLCAwLCAwKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaG93IGxv
bmcgd2lsbCB0aGUgbGlmZSBvZiB0aGUgcGFydGljbGUgYmUuCisgICAgICAgICAqLworICAgICAg
ICB0aGlzLmxpZmVUaW1lID0gMS4wOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGN1cnJl
bnQgYWdlIG9mIHRoZSBwYXJ0aWNsZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYWdlID0g
MDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjdXJyZW50IHNpemUgb2YgdGhlIHBhcnRp
Y2xlLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zaXplID0gMDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFRoZSBjdXJyZW50IHNjYWxlIG9mIHRoZSBwYXJ0aWNsZS4KKyAgICAgICAgICov
CisgICAgICAgIHRoaXMuc2NhbGUgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjIiXSgxLCAxKTsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFRoZSBjdXJyZW50IGFuZ2xlIG9mIHRoZSBwYXJ0aWNsZS4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMuYW5nbGUgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBob3cg
ZmFzdCBpcyB0aGUgYW5nbGUgY2hhbmdpbmcuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmFu
Z3VsYXJTcGVlZCA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBjZWxs
IGluZGV4IHVzZWQgYnkgdGhlIHBhcnRpY2xlIHRvIGJlIHJlbmRlcmVkIGZyb20gYSBzcHJpdGUu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmNlbGxJbmRleCA9IDA7CisgICAgICAgIC8qKiBA
aGlkZGVuICovCisgICAgICAgIHRoaXMuX2F0dGFjaGVkU3ViRW1pdHRlcnMgPSBudWxsOworICAg
ICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jdXJyZW50Q29sb3IxID0gbmV3IF9N
YXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9yNCJdKDAs
IDAsIDAsIDApOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jdXJyZW50
Q29sb3IyID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkNvbG9yNCJdKDAsIDAsIDAsIDApOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAg
ICB0aGlzLl9jdXJyZW50U2l6ZTEgPSAwOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAg
ICB0aGlzLl9jdXJyZW50U2l6ZTIgPSAwOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAg
ICB0aGlzLl9jdXJyZW50QW5ndWxhclNwZWVkMSA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIHRoaXMuX2N1cnJlbnRBbmd1bGFyU3BlZWQyID0gMDsKKyAgICAgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICAgICAgdGhpcy5fY3VycmVudFZlbG9jaXR5MSA9IDA7CisgICAgICAgIC8q
KiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2N1cnJlbnRWZWxvY2l0eTIgPSAwOworICAgICAg
ICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jdXJyZW50TGltaXRWZWxvY2l0eTEgPSAw
OworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jdXJyZW50TGltaXRWZWxv
Y2l0eTIgPSAwOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jdXJyZW50
RHJhZzEgPSAwOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9jdXJyZW50
RHJhZzIgPSAwOworICAgICAgICB0aGlzLmlkID0gUGFydGljbGUuX0NvdW50Kys7CisgICAgICAg
IGlmICghdGhpcy5wYXJ0aWNsZVN5c3RlbS5pc0FuaW1hdGlvblNoZWV0RW5hYmxlZCkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMudXBkYXRlQ2VsbEluZm9G
cm9tU3lzdGVtKCk7CisgICAgfQorICAgIFBhcnRpY2xlLnByb3RvdHlwZS51cGRhdGVDZWxsSW5m
b0Zyb21TeXN0ZW0gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuY2VsbEluZGV4ID0gdGhp
cy5wYXJ0aWNsZVN5c3RlbS5zdGFydFNwcml0ZUNlbGxJRDsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIERlZmluZXMgaG93IHRoZSBzcHJpdGUgY2VsbCBpbmRleCBpcyB1cGRhdGVkIGZvciB0aGUg
cGFydGljbGUKKyAgICAgKi8KKyAgICBQYXJ0aWNsZS5wcm90b3R5cGUudXBkYXRlQ2VsbEluZGV4
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgb2Zmc2V0QWdlID0gdGhpcy5hZ2U7CisgICAg
ICAgIHZhciBjaGFuZ2VTcGVlZCA9IHRoaXMucGFydGljbGVTeXN0ZW0uc3ByaXRlQ2VsbENoYW5n
ZVNwZWVkOworICAgICAgICBpZiAodGhpcy5wYXJ0aWNsZVN5c3RlbS5zcHJpdGVSYW5kb21TdGFy
dENlbGwpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yYW5kb21DZWxsT2Zmc2V0ID09PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yYW5kb21DZWxsT2Zmc2V0ID0gTWF0aC5y
YW5kb20oKSAqIHRoaXMubGlmZVRpbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
Y2hhbmdlU3BlZWQgPT09IDApIHsgLy8gU3BlY2lhbCBjYXNlIHdoZW4gc3BlZWQgPSAwIG1lYW5p
bmcgd2Ugd2FudCB0byBzdGF5IG9uIGluaXRpYWwgY2VsbAorICAgICAgICAgICAgICAgIGNoYW5n
ZVNwZWVkID0gMTsKKyAgICAgICAgICAgICAgICBvZmZzZXRBZ2UgPSB0aGlzLl9yYW5kb21DZWxs
T2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0QWdlICs9IHRoaXMuX3JhbmRvbUNlbGxPZmZzZXQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGRpc3QgPSAodGhpcy5faW5pdGlhbEVuZFNwcml0ZUNlbGxJ
RCAtIHRoaXMuX2luaXRpYWxTdGFydFNwcml0ZUNlbGxJRCk7CisgICAgICAgIHZhciByYXRpbyA9
IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJTY2FsYXIi
XS5DbGFtcCgoKG9mZnNldEFnZSAqIGNoYW5nZVNwZWVkKSAlIHRoaXMubGlmZVRpbWUpIC8gdGhp
cy5saWZlVGltZSk7CisgICAgICAgIHRoaXMuY2VsbEluZGV4ID0gdGhpcy5faW5pdGlhbFN0YXJ0
U3ByaXRlQ2VsbElEICsgKHJhdGlvICogZGlzdCkgfCAwOworICAgIH07CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBQYXJ0aWNsZS5wcm90b3R5cGUuX2luaGVyaXRQYXJ0aWNsZUluZm9Ub1N1YkVt
aXR0ZXIgPSBmdW5jdGlvbiAoc3ViRW1pdHRlcikgeworICAgICAgICBpZiAoc3ViRW1pdHRlci5w
YXJ0aWNsZVN5c3RlbS5lbWl0dGVyLnBvc2l0aW9uKSB7CisgICAgICAgICAgICB2YXIgZW1pdHRl
ck1lc2ggPSBzdWJFbWl0dGVyLnBhcnRpY2xlU3lzdGVtLmVtaXR0ZXI7CisgICAgICAgICAgICBl
bWl0dGVyTWVzaC5wb3NpdGlvbi5jb3B5RnJvbSh0aGlzLnBvc2l0aW9uKTsKKyAgICAgICAgICAg
IGlmIChzdWJFbWl0dGVyLmluaGVyaXREaXJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBlbWl0
dGVyTWVzaC5wb3NpdGlvbi5zdWJ0cmFjdFRvUmVmKHRoaXMuZGlyZWN0aW9uLCBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLlZlY3Rv
cjNbMF0pOworICAgICAgICAgICAgICAgIC8vIExvb2sgYXQgdXNpbmcgWSBhcyBmb3J3YXJkCisg
ICAgICAgICAgICAgICAgZW1pdHRlck1lc2gubG9va0F0KF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1swXSwgMCwgTWF0
aC5QSSAvIDIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgdmFyIGVtaXR0ZXJQb3NpdGlvbiA9IHN1YkVtaXR0ZXIucGFydGljbGVTeXN0ZW0u
ZW1pdHRlcjsKKyAgICAgICAgICAgIGVtaXR0ZXJQb3NpdGlvbi5jb3B5RnJvbSh0aGlzLnBvc2l0
aW9uKTsKKyAgICAgICAgfQorICAgICAgICAvLyBTZXQgaW5oZXJpdGVkVmVsb2NpdHlPZmZzZXQg
dG8gYmUgdXNlZCB3aGVuIG5ldyBwYXJ0aWNsZXMgYXJlIGNyZWF0ZWQKKyAgICAgICAgdGhpcy5k
aXJlY3Rpb24uc2NhbGVUb1JlZihzdWJFbWl0dGVyLmluaGVyaXRlZFZlbG9jaXR5QW1vdW50IC8g
MiwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRtcFZl
Y3RvcnMiXS5WZWN0b3IzWzBdKTsKKyAgICAgICAgc3ViRW1pdHRlci5wYXJ0aWNsZVN5c3RlbS5f
aW5oZXJpdGVkVmVsb2NpdHlPZmZzZXQuY29weUZyb20oX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdKTsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgUGFydGljbGUucHJvdG90eXBlLl9pbmhlcml0UGFy
dGljbGVJbmZvVG9TdWJFbWl0dGVycyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkU3ViRW1pdHRlcnMgJiYgdGhpcy5f
YXR0YWNoZWRTdWJFbWl0dGVycy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB0aGlzLl9hdHRh
Y2hlZFN1YkVtaXR0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YkVtaXR0ZXIpIHsKKyAgICAgICAg
ICAgICAgICBfdGhpcy5faW5oZXJpdFBhcnRpY2xlSW5mb1RvU3ViRW1pdHRlcihzdWJFbWl0dGVy
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAq
LworICAgIFBhcnRpY2xlLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuYWdlID0gMDsKKyAgICAgICAgdGhpcy5fY3VycmVudENvbG9yR3JhZGllbnQgPSBudWxs
OworICAgICAgICB0aGlzLl9jdXJyZW50U2l6ZUdyYWRpZW50ID0gbnVsbDsKKyAgICAgICAgdGhp
cy5fY3VycmVudEFuZ3VsYXJTcGVlZEdyYWRpZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY3Vy
cmVudFZlbG9jaXR5R3JhZGllbnQgPSBudWxsOworICAgICAgICB0aGlzLl9jdXJyZW50TGltaXRW
ZWxvY2l0eUdyYWRpZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY3VycmVudERyYWdHcmFkaWVu
dCA9IG51bGw7CisgICAgICAgIHRoaXMuY2VsbEluZGV4ID0gdGhpcy5wYXJ0aWNsZVN5c3RlbS5z
dGFydFNwcml0ZUNlbGxJRDsKKyAgICAgICAgdGhpcy5fcmFuZG9tQ2VsbE9mZnNldCA9IHVuZGVm
aW5lZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENvcHkgdGhlIHByb3BlcnRpZXMgb2YgcGFy
dGljbGUgdG8gYW5vdGhlciBvbmUuCisgICAgICogQHBhcmFtIG90aGVyIHRoZSBwYXJ0aWNsZSB0
byBjb3B5IHRoZSBpbmZvcm1hdGlvbiB0by4KKyAgICAgKi8KKyAgICBQYXJ0aWNsZS5wcm90b3R5
cGUuY29weVRvID0gZnVuY3Rpb24gKG90aGVyKSB7CisgICAgICAgIG90aGVyLnBvc2l0aW9uLmNv
cHlGcm9tKHRoaXMucG9zaXRpb24pOworICAgICAgICBpZiAodGhpcy5faW5pdGlhbERpcmVjdGlv
bikgeworICAgICAgICAgICAgaWYgKG90aGVyLl9pbml0aWFsRGlyZWN0aW9uKSB7CisgICAgICAg
ICAgICAgICAgb3RoZXIuX2luaXRpYWxEaXJlY3Rpb24uY29weUZyb20odGhpcy5faW5pdGlhbERp
cmVjdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBvdGhlci5faW5pdGlhbERpcmVjdGlvbiA9IHRoaXMuX2luaXRpYWxEaXJlY3Rpb24uY2xv
bmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIG90aGVyLl9pbml0aWFsRGlyZWN0aW9uID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBv
dGhlci5kaXJlY3Rpb24uY29weUZyb20odGhpcy5kaXJlY3Rpb24pOworICAgICAgICBvdGhlci5j
b2xvci5jb3B5RnJvbSh0aGlzLmNvbG9yKTsKKyAgICAgICAgb3RoZXIuY29sb3JTdGVwLmNvcHlG
cm9tKHRoaXMuY29sb3JTdGVwKTsKKyAgICAgICAgb3RoZXIubGlmZVRpbWUgPSB0aGlzLmxpZmVU
aW1lOworICAgICAgICBvdGhlci5hZ2UgPSB0aGlzLmFnZTsKKyAgICAgICAgb3RoZXIuX3JhbmRv
bUNlbGxPZmZzZXQgPSB0aGlzLl9yYW5kb21DZWxsT2Zmc2V0OworICAgICAgICBvdGhlci5zaXpl
ID0gdGhpcy5zaXplOworICAgICAgICBvdGhlci5zY2FsZS5jb3B5RnJvbSh0aGlzLnNjYWxlKTsK
KyAgICAgICAgb3RoZXIuYW5nbGUgPSB0aGlzLmFuZ2xlOworICAgICAgICBvdGhlci5hbmd1bGFy
U3BlZWQgPSB0aGlzLmFuZ3VsYXJTcGVlZDsKKyAgICAgICAgb3RoZXIucGFydGljbGVTeXN0ZW0g
PSB0aGlzLnBhcnRpY2xlU3lzdGVtOworICAgICAgICBvdGhlci5jZWxsSW5kZXggPSB0aGlzLmNl
bGxJbmRleDsKKyAgICAgICAgb3RoZXIuaWQgPSB0aGlzLmlkOworICAgICAgICBvdGhlci5fYXR0
YWNoZWRTdWJFbWl0dGVycyA9IHRoaXMuX2F0dGFjaGVkU3ViRW1pdHRlcnM7CisgICAgICAgIGlm
ICh0aGlzLl9jdXJyZW50Q29sb3JHcmFkaWVudCkgeworICAgICAgICAgICAgb3RoZXIuX2N1cnJl
bnRDb2xvckdyYWRpZW50ID0gdGhpcy5fY3VycmVudENvbG9yR3JhZGllbnQ7CisgICAgICAgICAg
ICBvdGhlci5fY3VycmVudENvbG9yMS5jb3B5RnJvbSh0aGlzLl9jdXJyZW50Q29sb3IxKTsKKyAg
ICAgICAgICAgIG90aGVyLl9jdXJyZW50Q29sb3IyLmNvcHlGcm9tKHRoaXMuX2N1cnJlbnRDb2xv
cjIpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2l6ZUdyYWRpZW50KSB7
CisgICAgICAgICAgICBvdGhlci5fY3VycmVudFNpemVHcmFkaWVudCA9IHRoaXMuX2N1cnJlbnRT
aXplR3JhZGllbnQ7CisgICAgICAgICAgICBvdGhlci5fY3VycmVudFNpemUxID0gdGhpcy5fY3Vy
cmVudFNpemUxOworICAgICAgICAgICAgb3RoZXIuX2N1cnJlbnRTaXplMiA9IHRoaXMuX2N1cnJl
bnRTaXplMjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY3VycmVudEFuZ3VsYXJTcGVl
ZEdyYWRpZW50KSB7CisgICAgICAgICAgICBvdGhlci5fY3VycmVudEFuZ3VsYXJTcGVlZEdyYWRp
ZW50ID0gdGhpcy5fY3VycmVudEFuZ3VsYXJTcGVlZEdyYWRpZW50OworICAgICAgICAgICAgb3Ro
ZXIuX2N1cnJlbnRBbmd1bGFyU3BlZWQxID0gdGhpcy5fY3VycmVudEFuZ3VsYXJTcGVlZDE7Cisg
ICAgICAgICAgICBvdGhlci5fY3VycmVudEFuZ3VsYXJTcGVlZDIgPSB0aGlzLl9jdXJyZW50QW5n
dWxhclNwZWVkMjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY3VycmVudFZlbG9jaXR5
R3JhZGllbnQpIHsKKyAgICAgICAgICAgIG90aGVyLl9jdXJyZW50VmVsb2NpdHlHcmFkaWVudCA9
IHRoaXMuX2N1cnJlbnRWZWxvY2l0eUdyYWRpZW50OworICAgICAgICAgICAgb3RoZXIuX2N1cnJl
bnRWZWxvY2l0eTEgPSB0aGlzLl9jdXJyZW50VmVsb2NpdHkxOworICAgICAgICAgICAgb3RoZXIu
X2N1cnJlbnRWZWxvY2l0eTIgPSB0aGlzLl9jdXJyZW50VmVsb2NpdHkyOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9jdXJyZW50TGltaXRWZWxvY2l0eUdyYWRpZW50KSB7CisgICAgICAg
ICAgICBvdGhlci5fY3VycmVudExpbWl0VmVsb2NpdHlHcmFkaWVudCA9IHRoaXMuX2N1cnJlbnRM
aW1pdFZlbG9jaXR5R3JhZGllbnQ7CisgICAgICAgICAgICBvdGhlci5fY3VycmVudExpbWl0VmVs
b2NpdHkxID0gdGhpcy5fY3VycmVudExpbWl0VmVsb2NpdHkxOworICAgICAgICAgICAgb3RoZXIu
X2N1cnJlbnRMaW1pdFZlbG9jaXR5MiA9IHRoaXMuX2N1cnJlbnRMaW1pdFZlbG9jaXR5MjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodGhpcy5fY3VycmVudERyYWdHcmFkaWVudCkgeworICAgICAg
ICAgICAgb3RoZXIuX2N1cnJlbnREcmFnR3JhZGllbnQgPSB0aGlzLl9jdXJyZW50RHJhZ0dyYWRp
ZW50OworICAgICAgICAgICAgb3RoZXIuX2N1cnJlbnREcmFnMSA9IHRoaXMuX2N1cnJlbnREcmFn
MTsKKyAgICAgICAgICAgIG90aGVyLl9jdXJyZW50RHJhZzIgPSB0aGlzLl9jdXJyZW50RHJhZzI7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucGFydGljbGVTeXN0ZW0uaXNBbmltYXRpb25T
aGVldEVuYWJsZWQpIHsKKyAgICAgICAgICAgIG90aGVyLl9pbml0aWFsU3RhcnRTcHJpdGVDZWxs
SUQgPSB0aGlzLl9pbml0aWFsU3RhcnRTcHJpdGVDZWxsSUQ7CisgICAgICAgICAgICBvdGhlci5f
aW5pdGlhbEVuZFNwcml0ZUNlbGxJRCA9IHRoaXMuX2luaXRpYWxFbmRTcHJpdGVDZWxsSUQ7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucGFydGljbGVTeXN0ZW0udXNlUmFtcEdyYWRpZW50
cykgeworICAgICAgICAgICAgb3RoZXIucmVtYXBEYXRhLmNvcHlGcm9tKHRoaXMucmVtYXBEYXRh
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmFuZG9tTm9pc2VDb29yZGluYXRlczEp
IHsKKyAgICAgICAgICAgIGlmIChvdGhlci5fcmFuZG9tTm9pc2VDb29yZGluYXRlczEpIHsKKyAg
ICAgICAgICAgICAgICBvdGhlci5fcmFuZG9tTm9pc2VDb29yZGluYXRlczEuY29weUZyb20odGhp
cy5fcmFuZG9tTm9pc2VDb29yZGluYXRlczEpOworICAgICAgICAgICAgICAgIG90aGVyLl9yYW5k
b21Ob2lzZUNvb3JkaW5hdGVzMi5jb3B5RnJvbSh0aGlzLl9yYW5kb21Ob2lzZUNvb3JkaW5hdGVz
Mik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBv
dGhlci5fcmFuZG9tTm9pc2VDb29yZGluYXRlczEgPSB0aGlzLl9yYW5kb21Ob2lzZUNvb3JkaW5h
dGVzMS5jbG9uZSgpOworICAgICAgICAgICAgICAgIG90aGVyLl9yYW5kb21Ob2lzZUNvb3JkaW5h
dGVzMiA9IHRoaXMuX3JhbmRvbU5vaXNlQ29vcmRpbmF0ZXMyLmNsb25lKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworICAgIFBhcnRpY2xlLl9Db3VudCA9IDA7CisgICAgcmV0
dXJuIFBhcnRpY2xlOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QYXJ0aWNs
ZXMvcGFydGljbGVIZWxwZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vUGFydGljbGVzL3BhcnRpY2xlSGVscGVyLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogUGFydGljbGVIZWxwZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUGFydGljbGVIZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBhcnRpY2xlSGVscGVyOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy90b29scyAqLyAi
Li9NaXNjL3Rvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhf
Y29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5l
cy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2dwdVBhcnRpY2xlU3lzdGVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2dwdVBhcnRpY2xlU3lzdGVtICovICIu
L1BhcnRpY2xlcy9ncHVQYXJ0aWNsZVN5c3RlbS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9wYXJ0aWNsZVN5c3RlbVNldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wYXJ0aWNsZVN5c3RlbVNldCAqLyAiLi9QYXJ0aWNsZXMv
cGFydGljbGVTeXN0ZW1TZXQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGFydGlj
bGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vcGFydGljbGVTeXN0ZW0gKi8gIi4vUGFydGljbGVzL3BhcnRpY2xlU3lzdGVtLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVz
L2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworCisKKworCisKKworCisK
Ky8qKgorICogVGhpcyBjbGFzcyBpcyBtYWRlIGZvciBvbiBvbmUtbGluZXIgc3RhdGljIG1ldGhv
ZCB0byBoZWxwIGNyZWF0aW5nIHBhcnRpY2xlIHN5c3RlbSBzZXQuCisgKi8KK3ZhciBQYXJ0aWNs
ZUhlbHBlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQYXJ0
aWNsZUhlbHBlcigpIHsKKyAgICB9CisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgZGVmYXVsdCBw
YXJ0aWNsZSBzeXN0ZW0gdGhhdCB5b3UgY2FuIHR3ZWFrCisgICAgICogQHBhcmFtIGVtaXR0ZXIg
ZGVmaW5lcyB0aGUgZW1pdHRlciB0byB1c2UKKyAgICAgKiBAcGFyYW0gY2FwYWNpdHkgZGVmaW5l
cyB0aGUgc3lzdGVtIGNhcGFjaXR5IChkZWZhdWx0IGlzIDUwMCBwYXJ0aWNsZXMpCisgICAgICog
QHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gdXNl
R1BVIGRlZmluZXMgaWYgYSBHUFVQYXJ0aWNsZVN5c3RlbSBtdXN0IGJlIGNyZWF0ZWQgKGRlZmF1
bHQgaXMgZmFsc2UpCisgICAgICogQHJldHVybnMgdGhlIG5ldyBQYXJ0aWNsZSBzeXN0ZW0KKyAg
ICAgKi8KKyAgICBQYXJ0aWNsZUhlbHBlci5DcmVhdGVEZWZhdWx0ID0gZnVuY3Rpb24gKGVtaXR0
ZXIsIGNhcGFjaXR5LCBzY2VuZSwgdXNlR1BVKSB7CisgICAgICAgIGlmIChjYXBhY2l0eSA9PT0g
dm9pZCAwKSB7IGNhcGFjaXR5ID0gNTAwOyB9CisgICAgICAgIGlmICh1c2VHUFUgPT09IHZvaWQg
MCkgeyB1c2VHUFUgPSBmYWxzZTsgfQorICAgICAgICB2YXIgc3lzdGVtOworICAgICAgICBpZiAo
dXNlR1BVKSB7CisgICAgICAgICAgICBzeXN0ZW0gPSBuZXcgX2dwdVBhcnRpY2xlU3lzdGVtX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkdQVVBhcnRpY2xlU3lzdGVtIl0oImRlZmF1bHQg
c3lzdGVtIiwgeyBjYXBhY2l0eTogY2FwYWNpdHkgfSwgc2NlbmUpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgc3lzdGVtID0gbmV3IF9wYXJ0aWNsZVN5c3RlbV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQYXJ0aWNsZVN5c3RlbSJdKCJkZWZhdWx0IHN5c3Rl
bSIsIGNhcGFjaXR5LCBzY2VuZSk7CisgICAgICAgIH0KKyAgICAgICAgc3lzdGVtLmVtaXR0ZXIg
PSBlbWl0dGVyOworICAgICAgICBzeXN0ZW0ucGFydGljbGVUZXh0dXJlID0gbmV3IF9NYXRlcmlh
bHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0dXJl
Il0oImh0dHBzOi8vd3d3LmJhYnlsb25qcy5jb20vYXNzZXRzL0ZsYXJlLnBuZyIsIHN5c3RlbS5n
ZXRTY2VuZSgpKTsKKyAgICAgICAgc3lzdGVtLmNyZWF0ZUNvbmVFbWl0dGVyKDAuMSwgTWF0aC5Q
SSAvIDQpOworICAgICAgICAvLyBQYXJ0aWNsZSBjb2xvcgorICAgICAgICBzeXN0ZW0uY29sb3Ix
ID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNv
bG9yNCJdKDEuMCwgMS4wLCAxLjAsIDEuMCk7CisgICAgICAgIHN5c3RlbS5jb2xvcjIgPSBuZXcg
X01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQ29sb3I0Il0o
MS4wLCAxLjAsIDEuMCwgMS4wKTsKKyAgICAgICAgc3lzdGVtLmNvbG9yRGVhZCA9IG5ldyBfTWF0
aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjQiXSgxLjAs
IDEuMCwgMS4wLCAwLjApOworICAgICAgICAvLyBQYXJ0aWNsZSBTaXplCisgICAgICAgIHN5c3Rl
bS5taW5TaXplID0gMC4xOworICAgICAgICBzeXN0ZW0ubWF4U2l6ZSA9IDAuMTsKKyAgICAgICAg
Ly8gRW1pc3Npb24gc3BlZWQKKyAgICAgICAgc3lzdGVtLm1pbkVtaXRQb3dlciA9IDI7CisgICAg
ICAgIHN5c3RlbS5tYXhFbWl0UG93ZXIgPSAyOworICAgICAgICAvLyBVcGRhdGUgc3BlZWQKKyAg
ICAgICAgc3lzdGVtLnVwZGF0ZVNwZWVkID0gMSAvIDYwOworICAgICAgICBzeXN0ZW0uZW1pdFJh
dGUgPSAzMDsKKyAgICAgICAgcmV0dXJuIHN5c3RlbTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFRoaXMgaXMgdGhlIG1haW4gc3RhdGljIG1ldGhvZCAob25lLWxpbmVyKSBvZiB0aGlzIGhlbHBl
ciB0byBjcmVhdGUgZGlmZmVyZW50IHBhcnRpY2xlIHN5c3RlbXMKKyAgICAgKiBAcGFyYW0gdHlw
ZSBUaGlzIHN0cmluZyByZXByZXNlbnRzIHRoZSB0eXBlIHRvIHRoZSBwYXJ0aWNsZSBzeXN0ZW0g
dG8gY3JlYXRlCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB3aGVyZSB0aGUgcGFydGlj
bGUgc3lzdGVtIHNob3VsZCBsaXZlCisgICAgICogQHBhcmFtIGdwdSBJZiB0aGUgc3lzdGVtIHdp
bGwgdXNlIGdwdQorICAgICAqIEByZXR1cm5zIHRoZSBQYXJ0aWNsZVN5c3RlbVNldCBjcmVhdGVk
CisgICAgICovCisgICAgUGFydGljbGVIZWxwZXIuQ3JlYXRlQXN5bmMgPSBmdW5jdGlvbiAodHlw
ZSwgc2NlbmUsIGdwdSkgeworICAgICAgICBpZiAoZ3B1ID09PSB2b2lkIDApIHsgZ3B1ID0gZmFs
c2U7IH0KKyAgICAgICAgaWYgKCFzY2VuZSkgeworICAgICAgICAgICAgc2NlbmUgPSBfRW5naW5l
c19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmVTdG9yZSJd
Lkxhc3RDcmVhdGVkU2NlbmU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRva2VuID0ge307Cisg
ICAgICAgIHNjZW5lLl9hZGRQZW5kaW5nRGF0YSh0b2tlbik7CisgICAgICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBpZiAoZ3B1
ICYmICFfZ3B1UGFydGljbGVTeXN0ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siR1BV
UGFydGljbGVTeXN0ZW0iXS5Jc1N1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgIHNjZW5lLl9y
ZW1vdmVQZW5kaW5nRGF0YSh0b2tlbik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCgi
UGFydGljbGUgc3lzdGVtIHdpdGggR1BVIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJUb29scyJdLkxvYWRGaWxlKFBhcnRpY2xlSGVscGVyLkJhc2VBc3NldHNVcmwgKyAiL3N5c3Rl
bXMvIiArIHR5cGUgKyAiLmpzb24iLCBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgICAg
IHNjZW5lLl9yZW1vdmVQZW5kaW5nRGF0YSh0b2tlbik7CisgICAgICAgICAgICAgICAgdmFyIG5l
d0RhdGEgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc29sdmUoX3BhcnRpY2xlU3lzdGVtU2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIlBhcnRpY2xlU3lzdGVtU2V0Il0uUGFyc2UobmV3RGF0YSwgc2NlbmUsIGdwdSkpOworICAg
ICAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgIHNjZW5lLl9yZW1vdmVQZW5kaW5nRGF0YSh0b2tlbik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdCgiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0aGUgY3Jl
YXRpb24gb2YgeW91ciBwYXJ0aWNsZSBzeXN0ZW0uIENoZWNrIGlmIHlvdXIgdHlwZSAnIiArIHR5
cGUgKyAiJyBleGlzdHMuIik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBTdGF0aWMgZnVuY3Rpb24gdXNlZCB0byBleHBvcnQgYSBwYXJ0aWNs
ZSBzeXN0ZW0gdG8gYSBQYXJ0aWNsZVN5c3RlbVNldCB2YXJpYWJsZS4KKyAgICAgKiBQbGVhc2Ug
bm90ZSB0aGF0IHRoZSBlbWl0dGVyIHNoYXBlIGlzIG5vdCBleHBvcnRlZAorICAgICAqIEBwYXJh
bSBzeXN0ZW1zIGRlZmluZXMgdGhlIHBhcnRpY2xlIHN5c3RlbXMgdG8gZXhwb3J0CisgICAgICog
QHJldHVybnMgdGhlIGNyZWF0ZWQgcGFydGljbGUgc3lzdGVtIHNldAorICAgICAqLworICAgIFBh
cnRpY2xlSGVscGVyLkV4cG9ydFNldCA9IGZ1bmN0aW9uIChzeXN0ZW1zKSB7CisgICAgICAgIHZh
ciBzZXQgPSBuZXcgX3BhcnRpY2xlU3lzdGVtU2V0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bIlBhcnRpY2xlU3lzdGVtU2V0Il0oKTsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBzeXN0
ZW1zXzEgPSBzeXN0ZW1zOyBfaSA8IHN5c3RlbXNfMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAg
ICAgIHZhciBzeXN0ZW0gPSBzeXN0ZW1zXzFbX2ldOworICAgICAgICAgICAgc2V0LnN5c3RlbXMu
cHVzaChzeXN0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXQ7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXRzIG9yIHNldHMgYmFzZSBBc3NldHMgVVJMCisgICAgICovCisgICAg
UGFydGljbGVIZWxwZXIuQmFzZUFzc2V0c1VybCA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJDb25zdGFudHMiXS5QQVJUSUNMRVNfQmFzZUFzc2V0c1Vy
bDsKKyAgICByZXR1cm4gUGFydGljbGVIZWxwZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1BhcnRpY2xlcy9wYXJ0aWNsZVN5c3RlbS50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9QYXJ0aWNsZXMvcGFydGljbGVT
eXN0ZW0udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBQYXJ0aWNsZVN5c3RlbSAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
UGFydGljbGVTeXN0ZW07IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2dyYWRpZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9ncmFkaWVudHMgKi8gIi4vTWlzYy9ncmFk
aWVudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
aXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9N
YXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0aHMvbWF0aC5zY2FsYXIgKi8gIi4vTWF0aHMvbWF0aC5zY2FsYXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2J1ZmZl
ciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01l
c2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9hYnN0cmFjdE1lc2ggKi8gIi4vTWVzaGVzL2Fic3Ry
YWN0TWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGVyaWFscy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlh
bHMvbWF0ZXJpYWxIZWxwZXIgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1
cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NYXRlcmlhbHMvaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAqLyAiLi9NYXRl
cmlhbHMvaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJl
cy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yYXdUZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL3Jhd1RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3Jhd1RleHR1
cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX1By
b2NlZHVyYWxzX3Byb2NlZHVyYWxUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL1Byb2NlZHVy
YWxzL3Byb2NlZHVyYWxUZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9Qcm9jZWR1cmFs
cy9wcm9jZWR1cmFsVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Fbmdp
bmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2lu
ZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BhcnRpY2xlc19FbWl0dGVy
VHlwZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9QYXJ0aWNsZXMvRW1pdHRlclR5cGVzL2luZGV4ICovICIuL1BhcnRpY2xl
cy9FbWl0dGVyVHlwZXMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFz
ZVBhcnRpY2xlU3lzdGVtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9iYXNlUGFydGljbGVTeXN0ZW0gKi8gIi4vUGFydGljbGVzL2Jhc2VQ
YXJ0aWNsZVN5c3RlbS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wYXJ0aWNsZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
cGFydGljbGUgKi8gIi4vUGFydGljbGVzL3BhcnRpY2xlLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3N1YkVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL3N1YkVtaXR0ZXIgKi8gIi4vUGFydGljbGVzL3N1YkVtaXR0
ZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9F
bmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4v
TWlzYy9kZWNvcmF0b3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVl
cENvcGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01pc2MvZGVlcENvcGllciAqLyAiLi9NaXNjL2RlZXBDb3BpZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3R5cGVTdG9yZSAq
LyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzX3BhcnRpY2xlc19mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvcGFydGljbGVzLmZyYWdtZW50ICovICIu
L1NoYWRlcnMvcGFydGljbGVzLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNfcGFydGljbGVzX3ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvcGFydGljbGVzLnZlcnRleCAq
LyAiLi9TaGFkZXJzL3BhcnRpY2xlcy52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0
aC5jb2xvci50cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIGEgcGFydGljbGUgc3lzdGVtIGluIEJh
Ynlsb24uCisgKiBQYXJ0aWNsZXMgYXJlIG9mdGVuIHNtYWxsIHNwcml0ZXMgdXNlZCB0byBzaW11
bGF0ZSBoYXJkLXRvLXJlcHJvZHVjZSBwaGVub21lbmEgbGlrZSBmaXJlLCBzbW9rZSwgd2F0ZXIs
IG9yIGFic3RyYWN0IHZpc3VhbCBlZmZlY3RzIGxpa2UgbWFnaWMgZ2xpdHRlciBhbmQgZmFlcnkg
ZHVzdC4KKyAqIFBhcnRpY2xlcyBjYW4gdGFrZSBkaWZmZXJlbnQgc2hhcGVzIHdoaWxlIGVtaXR0
ZWQgbGlrZSBib3gsIHNwaGVyZSwgY29uZSBvciB5b3UgY2FuIHdyaXRlIHlvdXIgY3VzdG9tIGZ1
bmN0aW9uLgorICogQGV4YW1wbGUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAx
L3BhcnRpY2xlcworICovCit2YXIgUGFydGljbGVTeXN0ZW0gPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oUGFydGljbGVTeXN0ZW0sIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5z
dGFudGlhdGVzIGEgcGFydGljbGUgc3lzdGVtLgorICAgICAqIFBhcnRpY2xlcyBhcmUgb2Z0ZW4g
c21hbGwgc3ByaXRlcyB1c2VkIHRvIHNpbXVsYXRlIGhhcmQtdG8tcmVwcm9kdWNlIHBoZW5vbWVu
YSBsaWtlIGZpcmUsIHNtb2tlLCB3YXRlciwgb3IgYWJzdHJhY3QgdmlzdWFsIGVmZmVjdHMgbGlr
ZSBtYWdpYyBnbGl0dGVyIGFuZCBmYWVyeSBkdXN0LgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBu
YW1lIG9mIHRoZSBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKiBAcGFyYW0gY2FwYWNpdHkgVGhlIG1h
eCBudW1iZXIgb2YgcGFydGljbGVzIGFsaXZlIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAgKiBAcGFy
YW0gc2NlbmUgVGhlIHNjZW5lIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gYmVsb25ncyB0bworICAgICAq
IEBwYXJhbSBjdXN0b21FZmZlY3QgYSBjdXN0b20gZWZmZWN0IHVzZWQgdG8gY2hhbmdlIHRoZSB3
YXkgcGFydGljbGVzIGFyZSByZW5kZXJlZCBieSBkZWZhdWx0CisgICAgICogQHBhcmFtIGlzQW5p
bWF0aW9uU2hlZXRFbmFibGVkIE11c3QgYmUgdHJ1ZSBpZiB1c2luZyBhIHNwcml0ZXNoZWV0IHRv
IGFuaW1hdGUgdGhlIHBhcnRpY2xlcyB0ZXh0dXJlCisgICAgICogQHBhcmFtIGVwc2lsb24gT2Zm
c2V0IHVzZWQgdG8gcmVuZGVyIHRoZSBwYXJ0aWNsZXMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQ
YXJ0aWNsZVN5c3RlbShuYW1lLCBjYXBhY2l0eSwgc2NlbmUsIGN1c3RvbUVmZmVjdCwgaXNBbmlt
YXRpb25TaGVldEVuYWJsZWQsIGVwc2lsb24pIHsKKyAgICAgICAgaWYgKGN1c3RvbUVmZmVjdCA9
PT0gdm9pZCAwKSB7IGN1c3RvbUVmZmVjdCA9IG51bGw7IH0KKyAgICAgICAgaWYgKGlzQW5pbWF0
aW9uU2hlZXRFbmFibGVkID09PSB2b2lkIDApIHsgaXNBbmltYXRpb25TaGVldEVuYWJsZWQgPSBm
YWxzZTsgfQorICAgICAgICBpZiAoZXBzaWxvbiA9PT0gdm9pZCAwKSB7IGVwc2lsb24gPSAwLjAx
OyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUpIHx8IHRoaXM7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqLworICAgICAgICBf
dGhpcy5faW5oZXJpdGVkVmVsb2NpdHlPZmZzZXQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXSgpOworICAgICAgICAvKioKKyAg
ICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGRpc3Bvc2VkCisg
ICAgICAgICovCisgICAgICAgIF90aGlzLm9uRGlzcG9zZU9ic2VydmFibGUgPSBuZXcgX01pc2Nf
b2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJPYnNlcnZhYmxlIl0oKTsK
KyAgICAgICAgX3RoaXMuX3BhcnRpY2xlcyA9IG5ldyBBcnJheSgpOworICAgICAgICBfdGhpcy5f
c3RvY2tQYXJ0aWNsZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgX3RoaXMuX25ld1BhcnRzRXhj
ZXNzID0gMDsKKyAgICAgICAgX3RoaXMuX3ZlcnRleEJ1ZmZlcnMgPSB7fTsKKyAgICAgICAgX3Ro
aXMuX3NjYWxlZENvbG9yU3RlcCA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjRfX1siQ29sb3I0Il0oMCwgMCwgMCwgMCk7CisgICAgICAgIF90aGlzLl9j
b2xvckRpZmYgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI0X19bIkNvbG9yNCJdKDAsIDAsIDAsIDApOworICAgICAgICBfdGhpcy5fc2NhbGVkRGlyZWN0
aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZl
Y3RvcjMiXS5aZXJvKCk7CisgICAgICAgIF90aGlzLl9zY2FsZWRHcmF2aXR5ID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7
CisgICAgICAgIF90aGlzLl9jdXJyZW50UmVuZGVySWQgPSAtMTsKKyAgICAgICAgX3RoaXMuX3Vz
ZUluc3RhbmNpbmcgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX3N0YXJ0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgX3RoaXMuX3N0b3BwZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2FjdHVhbEZyYW1l
ID0gMDsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2N1cnJlbnRFbWl0
UmF0ZTEgPSAwOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhpcy5fY3VycmVu
dEVtaXRSYXRlMiA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9j
dXJyZW50U3RhcnRTaXplMSA9IDA7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90
aGlzLl9jdXJyZW50U3RhcnRTaXplMiA9IDA7CisgICAgICAgIF90aGlzLl9yYXdUZXh0dXJlV2lk
dGggPSAyNTY7CisgICAgICAgIF90aGlzLl91c2VSYW1wR3JhZGllbnRzID0gZmFsc2U7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIElmIHRoZSBwYXJ0aWNsZSBz
eXN0ZW1zIGVtaXR0ZXIgc2hvdWxkIGJlIGRpc3Bvc2VkIHdoZW4gdGhlIHBhcnRpY2xlIHN5c3Rl
bSBpcyBkaXNwb3NlZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2Rpc3Bvc2VFbWl0dGVy
T25EaXNwb3NlID0gZmFsc2U7CisgICAgICAgIC8vIHN0YXJ0IG9mIHN1YiBzeXN0ZW0gbWV0aG9k
cworICAgICAgICAvKioKKyAgICAgICAgICogIlJlY3ljbGVzIiBvbmUgb2YgdGhlIHBhcnRpY2xl
IGJ5IGNvcHlpbmcgaXQgYmFjayB0byB0aGUgInN0b2NrIiBvZiBwYXJ0aWNsZXMgYW5kIHJlbW92
aW5nIGl0IGZyb20gdGhlIGFjdGl2ZSBsaXN0LgorICAgICAgICAgKiBJdHMgbGlmZXRpbWUgd2ls
bCBzdGFydCBiYWNrIGF0IDAuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5yZWN5Y2xlUGFy
dGljbGUgPSBmdW5jdGlvbiAocGFydGljbGUpIHsKKyAgICAgICAgICAgIC8vIG1vdmUgcGFydGlj
bGUgZnJvbSBhY3RpdmVQYXJ0aWNsZSBsaXN0IHRvIHN0b2NrIHBhcnRpY2xlcworICAgICAgICAg
ICAgdmFyIGxhc3RQYXJ0aWNsZSA9IF90aGlzLl9wYXJ0aWNsZXMucG9wKCk7CisgICAgICAgICAg
ICBpZiAobGFzdFBhcnRpY2xlICE9PSBwYXJ0aWNsZSkgeworICAgICAgICAgICAgICAgIGxhc3RQ
YXJ0aWNsZS5jb3B5VG8ocGFydGljbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgX3Ro
aXMuX3N0b2NrUGFydGljbGVzLnB1c2gobGFzdFBhcnRpY2xlKTsKKyAgICAgICAgfTsKKyAgICAg
ICAgX3RoaXMuX2NyZWF0ZVBhcnRpY2xlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFy
IHBhcnRpY2xlOworICAgICAgICAgICAgaWYgKF90aGlzLl9zdG9ja1BhcnRpY2xlcy5sZW5ndGgg
IT09IDApIHsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZSA9IF90aGlzLl9zdG9ja1BhcnRpY2xl
cy5wb3AoKTsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fcmVzZXQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBhcnRpY2xlID0gbmV3IF9w
YXJ0aWNsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siUGFydGljbGUiXShfdGhpcyk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBBdHRhY2ggZW1pdHRlcnMKKyAgICAgICAg
ICAgIGlmIChfdGhpcy5fc3ViRW1pdHRlcnMgJiYgX3RoaXMuX3N1YkVtaXR0ZXJzLmxlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgc3ViRW1pdHRlcnMgPSBfdGhpcy5fc3ViRW1pdHRl
cnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogX3RoaXMuX3N1YkVtaXR0ZXJzLmxlbmd0aCld
OworICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9hdHRhY2hlZFN1YkVtaXR0ZXJzID0gW107Cisg
ICAgICAgICAgICAgICAgc3ViRW1pdHRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3ViRW1pdHRlcikg
eworICAgICAgICAgICAgICAgICAgICBpZiAoc3ViRW1pdHRlci50eXBlID09PSBfc3ViRW1pdHRl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siU3ViRW1pdHRlclR5cGUiXS5BVFRBQ0hF
RCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0VtaXR0ZXIgPSBzdWJFbWl0dGVy
LmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fYXR0YWNoZWRTdWJF
bWl0dGVycy5wdXNoKG5ld0VtaXR0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3RW1p
dHRlci5wYXJ0aWNsZVN5c3RlbS5zdGFydCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcGFydGlj
bGU7CisgICAgICAgIH07CisgICAgICAgIF90aGlzLl9lbWl0RnJvbVBhcnRpY2xlID0gZnVuY3Rp
b24gKHBhcnRpY2xlKSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLl9zdWJFbWl0dGVycyB8fCBf
dGhpcy5fc3ViRW1pdHRlcnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHRlbXBsYXRlSW5kZXggPSBNYXRoLmZs
b29yKE1hdGgucmFuZG9tKCkgKiBfdGhpcy5fc3ViRW1pdHRlcnMubGVuZ3RoKTsKKyAgICAgICAg
ICAgIF90aGlzLl9zdWJFbWl0dGVyc1t0ZW1wbGF0ZUluZGV4XS5mb3JFYWNoKGZ1bmN0aW9uIChz
dWJFbWl0dGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKHN1YkVtaXR0ZXIudHlwZSA9PT0gX3N1
YkVtaXR0ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bIlN1YkVtaXR0ZXJUeXBlIl0u
RU5EKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzdWJTeXN0ZW0gPSBzdWJFbWl0dGVyLmNs
b25lKCk7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9pbmhlcml0UGFydGljbGVJbmZv
VG9TdWJFbWl0dGVyKHN1YlN5c3RlbSk7CisgICAgICAgICAgICAgICAgICAgIHN1YlN5c3RlbS5w
YXJ0aWNsZVN5c3RlbS5fcm9vdFBhcnRpY2xlU3lzdGVtID0gX3RoaXM7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLmFjdGl2ZVN1YlN5c3RlbXMucHVzaChzdWJTeXN0ZW0ucGFydGljbGVTeXN0
ZW0pOworICAgICAgICAgICAgICAgICAgICBzdWJTeXN0ZW0ucGFydGljbGVTeXN0ZW0uc3RhcnQo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAgICAg
ICAgX3RoaXMuX2NhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgICAgIF90aGlzLl9lcHNpbG9uID0g
ZXBzaWxvbjsKKyAgICAgICAgX3RoaXMuX2lzQW5pbWF0aW9uU2hlZXRFbmFibGVkID0gaXNBbmlt
YXRpb25TaGVldEVuYWJsZWQ7CisgICAgICAgIF90aGlzLl9zY2VuZSA9IHNjZW5lIHx8IF9Fbmdp
bmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJFbmdpbmVTdG9y
ZSJdLkxhc3RDcmVhdGVkU2NlbmU7CisgICAgICAgIC8vIFNldHVwIHRoZSBkZWZhdWx0IHByb2Nl
c3NpbmcgY29uZmlndXJhdGlvbiB0byB0aGUgc2NlbmUuCisgICAgICAgIF90aGlzLl9hdHRhY2hJ
bWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKG51bGwpOworICAgICAgICBfdGhpcy5fY3VzdG9t
RWZmZWN0ID0gY3VzdG9tRWZmZWN0OworICAgICAgICBfdGhpcy5fc2NlbmUucGFydGljbGVTeXN0
ZW1zLnB1c2goX3RoaXMpOworICAgICAgICBfdGhpcy5fdXNlSW5zdGFuY2luZyA9IF90aGlzLl9z
Y2VuZS5nZXRFbmdpbmUoKS5nZXRDYXBzKCkuaW5zdGFuY2VkQXJyYXlzOworICAgICAgICBfdGhp
cy5fY3JlYXRlSW5kZXhCdWZmZXIoKTsKKyAgICAgICAgX3RoaXMuX2NyZWF0ZVZlcnRleEJ1ZmZl
cnMoKTsKKyAgICAgICAgLy8gRGVmYXVsdCBlbWl0dGVyIHR5cGUKKyAgICAgICAgX3RoaXMucGFy
dGljbGVFbWl0dGVyVHlwZSA9IG5ldyBfUGFydGljbGVzX0VtaXR0ZXJUeXBlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siQm94UGFydGljbGVFbWl0dGVyIl0oKTsKKyAgICAg
ICAgLy8gVXBkYXRlCisgICAgICAgIF90aGlzLnVwZGF0ZUZ1bmN0aW9uID0gZnVuY3Rpb24gKHBh
cnRpY2xlcykgeworICAgICAgICAgICAgdmFyIG5vaXNlVGV4dHVyZVNpemUgPSBudWxsOworICAg
ICAgICAgICAgdmFyIG5vaXNlVGV4dHVyZURhdGEgPSBudWxsOworICAgICAgICAgICAgaWYgKF90
aGlzLm5vaXNlVGV4dHVyZSkgeyAvLyBXZSBuZWVkIHRvIGdldCB0ZXh0dXJlIGRhdGEgYmFjayB0
byBDUFUKKyAgICAgICAgICAgICAgICBub2lzZVRleHR1cmVTaXplID0gX3RoaXMubm9pc2VUZXh0
dXJlLmdldFNpemUoKTsKKyAgICAgICAgICAgICAgICBub2lzZVRleHR1cmVEYXRhID0gKF90aGlz
Lm5vaXNlVGV4dHVyZS5nZXRDb250ZW50KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcGFydGljbGUgPSBw
YXJ0aWNsZXNbaW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBzY2FsZWRVcGRhdGVTcGVlZCA9
IF90aGlzLl9zY2FsZWRVcGRhdGVTcGVlZDsKKyAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNB
Z2UgPSBwYXJ0aWNsZS5hZ2U7CisgICAgICAgICAgICAgICAgcGFydGljbGUuYWdlICs9IHNjYWxl
ZFVwZGF0ZVNwZWVkOworICAgICAgICAgICAgICAgIC8vIEV2YWx1YXRlIHN0ZXAgdG8gZGVhdGgK
KyAgICAgICAgICAgICAgICBpZiAocGFydGljbGUuYWdlID4gcGFydGljbGUubGlmZVRpbWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBwYXJ0aWNsZS5hZ2UgLSBwcmV2aW91c0Fn
ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9sZERpZmYgPSBwYXJ0aWNsZS5saWZlVGltZSAt
IHByZXZpb3VzQWdlOworICAgICAgICAgICAgICAgICAgICBzY2FsZWRVcGRhdGVTcGVlZCA9IChv
bGREaWZmICogc2NhbGVkVXBkYXRlU3BlZWQpIC8gZGlmZjsKKyAgICAgICAgICAgICAgICAgICAg
cGFydGljbGUuYWdlID0gcGFydGljbGUubGlmZVRpbWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHZhciByYXRpbyA9IHBhcnRpY2xlLmFnZSAvIHBhcnRpY2xlLmxpZmVUaW1l
OworICAgICAgICAgICAgICAgIC8vIENvbG9yCisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9j
b2xvckdyYWRpZW50cyAmJiBfdGhpcy5fY29sb3JHcmFkaWVudHMubGVuZ3RoID4gMCkgeworICAg
ICAgICAgICAgICAgICAgICBfTWlzY19ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRDdXJyZW50R3JhZGllbnQocmF0aW8sIF90aGlzLl9j
b2xvckdyYWRpZW50cywgZnVuY3Rpb24gKGN1cnJlbnRHcmFkaWVudCwgbmV4dEdyYWRpZW50LCBz
Y2FsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRHcmFkaWVudCAhPT0g
cGFydGljbGUuX2N1cnJlbnRDb2xvckdyYWRpZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFydGljbGUuX2N1cnJlbnRDb2xvcjEuY29weUZyb20ocGFydGljbGUuX2N1cnJlbnRD
b2xvcjIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRHcmFkaWVudC5nZXRDb2xv
clRvUmVmKHBhcnRpY2xlLl9jdXJyZW50Q29sb3IyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJ0aWNsZS5fY3VycmVudENvbG9yR3JhZGllbnQgPSBjdXJyZW50R3JhZGllbnQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBfTWF0aHNf
bWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX1siQ29sb3I0Il0uTGVycFRv
UmVmKHBhcnRpY2xlLl9jdXJyZW50Q29sb3IxLCBwYXJ0aWNsZS5fY3VycmVudENvbG9yMiwgc2Nh
bGUsIHBhcnRpY2xlLmNvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXJ0
aWNsZS5jb2xvclN0ZXAuc2NhbGVUb1JlZihzY2FsZWRVcGRhdGVTcGVlZCwgX3RoaXMuX3NjYWxl
ZENvbG9yU3RlcCk7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLmNvbG9yLmFkZEluUGxh
Y2UoX3RoaXMuX3NjYWxlZENvbG9yU3RlcCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0
aWNsZS5jb2xvci5hIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuY29s
b3IuYSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgLy8gQW5ndWxhciBzcGVlZAorICAgICAgICAgICAgICAgIGlmIChfdGhpcy5f
YW5ndWxhclNwZWVkR3JhZGllbnRzICYmIF90aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHMubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19ncmFkaWVudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRDdXJyZW50R3JhZGllbnQo
cmF0aW8sIF90aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHMsIGZ1bmN0aW9uIChjdXJyZW50R3Jh
ZGllbnQsIG5leHRHcmFkaWVudCwgc2NhbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50R3JhZGllbnQgIT09IHBhcnRpY2xlLl9jdXJyZW50QW5ndWxhclNwZWVkR3JhZGll
bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3VycmVudEFuZ3Vs
YXJTcGVlZDEgPSBwYXJ0aWNsZS5fY3VycmVudEFuZ3VsYXJTcGVlZDI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRBbmd1bGFyU3BlZWQyID0gbmV4dEdyYWRp
ZW50LmdldEZhY3RvcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9j
dXJyZW50QW5ndWxhclNwZWVkR3JhZGllbnQgPSBjdXJyZW50R3JhZGllbnQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5hbmd1bGFy
U3BlZWQgPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
U2NhbGFyIl0uTGVycChwYXJ0aWNsZS5fY3VycmVudEFuZ3VsYXJTcGVlZDEsIHBhcnRpY2xlLl9j
dXJyZW50QW5ndWxhclNwZWVkMiwgc2NhbGUpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGFydGljbGUuYW5nbGUgKz0gcGFydGlj
bGUuYW5ndWxhclNwZWVkICogc2NhbGVkVXBkYXRlU3BlZWQ7CisgICAgICAgICAgICAgICAgLy8g
RGlyZWN0aW9uCisgICAgICAgICAgICAgICAgdmFyIGRpcmVjdGlvblNjYWxlID0gc2NhbGVkVXBk
YXRlU3BlZWQ7CisgICAgICAgICAgICAgICAgLy8vIFZlbG9jaXR5CisgICAgICAgICAgICAgICAg
aWYgKF90aGlzLl92ZWxvY2l0eUdyYWRpZW50cyAmJiBfdGhpcy5fdmVsb2NpdHlHcmFkaWVudHMu
bGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19ncmFkaWVudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRDdXJyZW50R3JhZGll
bnQocmF0aW8sIF90aGlzLl92ZWxvY2l0eUdyYWRpZW50cywgZnVuY3Rpb24gKGN1cnJlbnRHcmFk
aWVudCwgbmV4dEdyYWRpZW50LCBzY2FsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnRHcmFkaWVudCAhPT0gcGFydGljbGUuX2N1cnJlbnRWZWxvY2l0eUdyYWRpZW50KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRWZWxvY2l0eTEg
PSBwYXJ0aWNsZS5fY3VycmVudFZlbG9jaXR5MjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJ0aWNsZS5fY3VycmVudFZlbG9jaXR5MiA9IG5leHRHcmFkaWVudC5nZXRGYWN0b3IoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3VycmVudFZlbG9jaXR5R3Jh
ZGllbnQgPSBjdXJyZW50R3JhZGllbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb25TY2FsZSAqPSBfTWF0aHNfbWF0aF9zY2FsYXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NhbGFyIl0uTGVycChwYXJ0aWNsZS5fY3Vy
cmVudFZlbG9jaXR5MSwgcGFydGljbGUuX2N1cnJlbnRWZWxvY2l0eTIsIHNjYWxlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBh
cnRpY2xlLmRpcmVjdGlvbi5zY2FsZVRvUmVmKGRpcmVjdGlvblNjYWxlLCBfdGhpcy5fc2NhbGVk
RGlyZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAvLy8gTGltaXQgdmVsb2NpdHkKKyAgICAgICAg
ICAgICAgICBpZiAoX3RoaXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHMgJiYgX3RoaXMuX2xpbWl0
VmVsb2NpdHlHcmFkaWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICBfTWlz
Y19ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIi
XS5HZXRDdXJyZW50R3JhZGllbnQocmF0aW8sIF90aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRz
LCBmdW5jdGlvbiAoY3VycmVudEdyYWRpZW50LCBuZXh0R3JhZGllbnQsIHNjYWxlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEdyYWRpZW50ICE9PSBwYXJ0aWNsZS5fY3Vy
cmVudExpbWl0VmVsb2NpdHlHcmFkaWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcnRpY2xlLl9jdXJyZW50TGltaXRWZWxvY2l0eTEgPSBwYXJ0aWNsZS5fY3VycmVudExpbWl0
VmVsb2NpdHkyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9jdXJyZW50
TGltaXRWZWxvY2l0eTIgPSBuZXh0R3JhZGllbnQuZ2V0RmFjdG9yKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRMaW1pdFZlbG9jaXR5R3JhZGllbnQgPSBj
dXJyZW50R3JhZGllbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbGltaXRWZWxvY2l0eSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5MZXJwKHBhcnRpY2xlLl9jdXJyZW50TGlt
aXRWZWxvY2l0eTEsIHBhcnRpY2xlLl9jdXJyZW50TGltaXRWZWxvY2l0eTIsIHNjYWxlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VmVsb2NpdHkgPSBwYXJ0aWNsZS5kaXJl
Y3Rpb24ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZlbG9j
aXR5ID4gbGltaXRWZWxvY2l0eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRp
Y2xlLmRpcmVjdGlvbi5zY2FsZUluUGxhY2UoX3RoaXMubGltaXRWZWxvY2l0eURhbXBpbmcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8vIERyYWcKKyAgICAgICAgICAgICAgICBp
ZiAoX3RoaXMuX2RyYWdHcmFkaWVudHMgJiYgX3RoaXMuX2RyYWdHcmFkaWVudHMubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgICAgICAgICBfTWlzY19ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRDdXJyZW50R3JhZGllbnQocmF0aW8s
IF90aGlzLl9kcmFnR3JhZGllbnRzLCBmdW5jdGlvbiAoY3VycmVudEdyYWRpZW50LCBuZXh0R3Jh
ZGllbnQsIHNjYWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEdyYWRp
ZW50ICE9PSBwYXJ0aWNsZS5fY3VycmVudERyYWdHcmFkaWVudCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcnRpY2xlLl9jdXJyZW50RHJhZzEgPSBwYXJ0aWNsZS5fY3VycmVudERy
YWcyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9jdXJyZW50RHJhZzIg
PSBuZXh0R3JhZGllbnQuZ2V0RmFjdG9yKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFydGljbGUuX2N1cnJlbnREcmFnR3JhZGllbnQgPSBjdXJyZW50R3JhZGllbnQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHJhZyA9IF9N
YXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5M
ZXJwKHBhcnRpY2xlLl9jdXJyZW50RHJhZzEsIHBhcnRpY2xlLl9jdXJyZW50RHJhZzIsIHNjYWxl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zY2FsZWREaXJlY3Rpb24uc2NhbGVJ
blBsYWNlKDEuMCAtIGRyYWcpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcGFydGljbGUucG9zaXRpb24uYWRkSW5QbGFjZShfdGhp
cy5fc2NhbGVkRGlyZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAvLyBOb2lzZQorICAgICAgICAg
ICAgICAgIGlmIChub2lzZVRleHR1cmVEYXRhICYmIG5vaXNlVGV4dHVyZVNpemUgJiYgcGFydGlj
bGUuX3JhbmRvbU5vaXNlQ29vcmRpbmF0ZXMxKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBm
ZXRjaGVkQ29sb3JSID0gX3RoaXMuX2ZldGNoUihwYXJ0aWNsZS5fcmFuZG9tTm9pc2VDb29yZGlu
YXRlczEueCwgcGFydGljbGUuX3JhbmRvbU5vaXNlQ29vcmRpbmF0ZXMxLnksIG5vaXNlVGV4dHVy
ZVNpemUud2lkdGgsIG5vaXNlVGV4dHVyZVNpemUuaGVpZ2h0LCBub2lzZVRleHR1cmVEYXRhKTsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGZldGNoZWRDb2xvckcgPSBfdGhpcy5fZmV0Y2hSKHBh
cnRpY2xlLl9yYW5kb21Ob2lzZUNvb3JkaW5hdGVzMS56LCBwYXJ0aWNsZS5fcmFuZG9tTm9pc2VD
b29yZGluYXRlczIueCwgbm9pc2VUZXh0dXJlU2l6ZS53aWR0aCwgbm9pc2VUZXh0dXJlU2l6ZS5o
ZWlnaHQsIG5vaXNlVGV4dHVyZURhdGEpOworICAgICAgICAgICAgICAgICAgICB2YXIgZmV0Y2hl
ZENvbG9yQiA9IF90aGlzLl9mZXRjaFIocGFydGljbGUuX3JhbmRvbU5vaXNlQ29vcmRpbmF0ZXMy
LnksIHBhcnRpY2xlLl9yYW5kb21Ob2lzZUNvb3JkaW5hdGVzMi56LCBub2lzZVRleHR1cmVTaXpl
LndpZHRoLCBub2lzZVRleHR1cmVTaXplLmhlaWdodCwgbm9pc2VUZXh0dXJlRGF0YSk7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBmb3JjZSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1swXTsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHNjYWxlZEZvcmNlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzFdOworICAgICAgICAgICAg
ICAgICAgICBmb3JjZS5jb3B5RnJvbUZsb2F0cygoMiAqIGZldGNoZWRDb2xvclIgLSAxKSAqIF90
aGlzLm5vaXNlU3RyZW5ndGgueCwgKDIgKiBmZXRjaGVkQ29sb3JHIC0gMSkgKiBfdGhpcy5ub2lz
ZVN0cmVuZ3RoLnksICgyICogZmV0Y2hlZENvbG9yQiAtIDEpICogX3RoaXMubm9pc2VTdHJlbmd0
aC56KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yY2Uuc2NhbGVUb1JlZihzY2FsZWRVcGRhdGVT
cGVlZCwgc2NhbGVkRm9yY2UpOworICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5kaXJlY3Rp
b24uYWRkSW5QbGFjZShzY2FsZWRGb3JjZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIEdyYXZpdHkKKyAgICAgICAgICAgICAgICBfdGhpcy5ncmF2aXR5LnNjYWxlVG9S
ZWYoc2NhbGVkVXBkYXRlU3BlZWQsIF90aGlzLl9zY2FsZWRHcmF2aXR5KTsKKyAgICAgICAgICAg
ICAgICBwYXJ0aWNsZS5kaXJlY3Rpb24uYWRkSW5QbGFjZShfdGhpcy5fc2NhbGVkR3Jhdml0eSk7
CisgICAgICAgICAgICAgICAgLy8gU2l6ZQorICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fc2l6
ZUdyYWRpZW50cyAmJiBfdGhpcy5fc2l6ZUdyYWRpZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIF9NaXNjX2dyYWRpZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJHcmFkaWVudEhlbHBlciJdLkdldEN1cnJlbnRHcmFkaWVudChyYXRpbywgX3RoaXMuX3NpemVH
cmFkaWVudHMsIGZ1bmN0aW9uIChjdXJyZW50R3JhZGllbnQsIG5leHRHcmFkaWVudCwgc2NhbGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50R3JhZGllbnQgIT09IHBhcnRp
Y2xlLl9jdXJyZW50U2l6ZUdyYWRpZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFydGljbGUuX2N1cnJlbnRTaXplMSA9IHBhcnRpY2xlLl9jdXJyZW50U2l6ZTI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRTaXplMiA9IG5leHRHcmFkaWVu
dC5nZXRGYWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3Vy
cmVudFNpemVHcmFkaWVudCA9IGN1cnJlbnRHcmFkaWVudDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLnNpemUgPSBfTWF0aHNfbWF0
aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NhbGFyIl0uTGVycChwYXJ0
aWNsZS5fY3VycmVudFNpemUxLCBwYXJ0aWNsZS5fY3VycmVudFNpemUyLCBzY2FsZSk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
LyBSZW1hcCBkYXRhCisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl91c2VSYW1wR3JhZGllbnRz
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fY29sb3JSZW1hcEdyYWRpZW50cyAm
JiBfdGhpcy5fY29sb3JSZW1hcEdyYWRpZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBfTWlzY19ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
R3JhZGllbnRIZWxwZXIiXS5HZXRDdXJyZW50R3JhZGllbnQocmF0aW8sIF90aGlzLl9jb2xvclJl
bWFwR3JhZGllbnRzLCBmdW5jdGlvbiAoY3VycmVudEdyYWRpZW50LCBuZXh0R3JhZGllbnQsIHNj
YWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IF9NYXRoc19tYXRo
X3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5MZXJwKGN1cnJl
bnRHcmFkaWVudC5mYWN0b3IxLCBuZXh0R3JhZGllbnQuZmFjdG9yMSwgc2NhbGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NhbGFyIl0uTGVycChjdXJyZW50R3JhZGllbnQuZmFj
dG9yMiwgbmV4dEdyYWRpZW50LmZhY3RvcjIsIHNjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJ0aWNsZS5yZW1hcERhdGEueCA9IG1pbjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJ0aWNsZS5yZW1hcERhdGEueSA9IG1heCAtIG1pbjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmIChfdGhpcy5fYWxwaGFSZW1hcEdyYWRpZW50cyAmJiBfdGhpcy5fYWxwaGFSZW1hcEdyYWRp
ZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfTWlzY19ncmFkaWVu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRDdXJy
ZW50R3JhZGllbnQocmF0aW8sIF90aGlzLl9hbHBoYVJlbWFwR3JhZGllbnRzLCBmdW5jdGlvbiAo
Y3VycmVudEdyYWRpZW50LCBuZXh0R3JhZGllbnQsIHNjYWxlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIG1pbiA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5MZXJwKGN1cnJlbnRHcmFkaWVudC5mYWN0b3IxLCBuZXh0
R3JhZGllbnQuZmFjdG9yMSwgc2NhbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBtYXggPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
U2NhbGFyIl0uTGVycChjdXJyZW50R3JhZGllbnQuZmFjdG9yMiwgbmV4dEdyYWRpZW50LmZhY3Rv
cjIsIHNjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5yZW1hcERh
dGEueiA9IG1pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5yZW1hcERh
dGEudyA9IG1heCAtIG1pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChfdGhp
cy5faXNBbmltYXRpb25TaGVldEVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFydGlj
bGUudXBkYXRlQ2VsbEluZGV4KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vIFVwZGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGF0dGFjaGVkIHN1Yi1lbWl0dGVycyB0byBt
YXRjaCB0aGVpciBhdHRhY2hlZCBwYXJ0aWNsZQorICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9p
bmhlcml0UGFydGljbGVJbmZvVG9TdWJFbWl0dGVycygpOworICAgICAgICAgICAgICAgIGlmIChw
YXJ0aWNsZS5hZ2UgPj0gcGFydGljbGUubGlmZVRpbWUpIHsgLy8gUmVjeWNsZSBieSBzd2FwcGlu
ZyB3aXRoIGxhc3QgcGFydGljbGUKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2VtaXRGcm9t
UGFydGljbGUocGFydGljbGUpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFydGljbGUuX2F0
dGFjaGVkU3ViRW1pdHRlcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9h
dHRhY2hlZFN1YkVtaXR0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YkVtaXR0ZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdWJFbWl0dGVyLnBhcnRpY2xlU3lzdGVtLmRpc3Bvc2VP
blN0b3AgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkVtaXR0ZXIucGFy
dGljbGVTeXN0ZW0uc3RvcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fYXR0YWNoZWRTdWJFbWl0dGVycyA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVjeWNsZVBh
cnRpY2xlKHBhcnRpY2xlKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgtLTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJjb250aW51ZSI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIHZhciBwYXJ0aWNsZTsKKyAgICAgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0aWNsZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgX2xvb3BfMSgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYXJ0aWNsZVN5
c3RlbS5wcm90b3R5cGUsICJvbkRpc3Bvc2UiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBT
ZXRzIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBzeXN0ZW0gaXMg
ZGlzcG9zZWQKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uRGlzcG9zZU9ic2Vy
dmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX29uRGlzcG9zZU9ic2VydmVy
ID0gdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUs
ICJ1c2VSYW1wR3JhZGllbnRzIiwgeworICAgICAgICAvKiogR2V0cyBvciBzZXRzIGEgYm9vbGVh
biBpbmRpY2F0aW5nIHRoYXQgcmFtcCBncmFkaWVudHMgbXVzdCBiZSB1c2VkCisgICAgICAgICAq
IEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvcGFydGljbGVzI3JhbXAt
Z3JhZGllbnRzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl91c2VSYW1wR3JhZGllbnRzOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3VzZVJhbXBH
cmFkaWVudHMgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fdXNlUmFtcEdyYWRpZW50cyA9IHZhbHVlOworICAgICAg
ICAgICAgdGhpcy5fcmVzZXRFZmZlY3QoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZSwgInBhcnRpY2xlcyIsIHsK
KyAgICAgICAgLy9lbmQgb2YgU3ViLWVtaXR0ZXIKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIGN1cnJlbnQgbGlzdCBvZiBhY3RpdmUgcGFydGljbGVzCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJ0aWNs
ZXM7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHN0cmlu
ZyAiUGFydGljbGVTeXN0ZW0iCisgICAgICogQHJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0
aGUgY2xhc3MgbmFtZQorICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5nZXRD
bGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiUGFydGljbGVTeXN0ZW0i
OworICAgIH07CisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9hZGRGYWN0b3JHcmFkaWVu
dCA9IGZ1bmN0aW9uIChmYWN0b3JHcmFkaWVudHMsIGdyYWRpZW50LCBmYWN0b3IsIGZhY3RvcjIp
IHsKKyAgICAgICAgdmFyIG5ld0dyYWRpZW50ID0gbmV3IF9NaXNjX2dyYWRpZW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJGYWN0b3JHcmFkaWVudCJdKCk7CisgICAgICAgIG5ld0dy
YWRpZW50LmdyYWRpZW50ID0gZ3JhZGllbnQ7CisgICAgICAgIG5ld0dyYWRpZW50LmZhY3RvcjEg
PSBmYWN0b3I7CisgICAgICAgIG5ld0dyYWRpZW50LmZhY3RvcjIgPSBmYWN0b3IyOworICAgICAg
ICBmYWN0b3JHcmFkaWVudHMucHVzaChuZXdHcmFkaWVudCk7CisgICAgICAgIGZhY3RvckdyYWRp
ZW50cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICBpZiAoYS5ncmFkaWVudCA8
IGIuZ3JhZGllbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChhLmdyYWRpZW50ID4gYi5ncmFkaWVudCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0pOworICAgIH07CisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9yZW1v
dmVGYWN0b3JHcmFkaWVudCA9IGZ1bmN0aW9uIChmYWN0b3JHcmFkaWVudHMsIGdyYWRpZW50KSB7
CisgICAgICAgIGlmICghZmFjdG9yR3JhZGllbnRzKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGluZGV4ID0gMDsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAw
LCBmYWN0b3JHcmFkaWVudHNfMSA9IGZhY3RvckdyYWRpZW50czsgX2kgPCBmYWN0b3JHcmFkaWVu
dHNfMS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBmYWN0b3JHcmFkaWVudCA9IGZh
Y3RvckdyYWRpZW50c18xW19pXTsKKyAgICAgICAgICAgIGlmIChmYWN0b3JHcmFkaWVudC5ncmFk
aWVudCA9PT0gZ3JhZGllbnQpIHsKKyAgICAgICAgICAgICAgICBmYWN0b3JHcmFkaWVudHMuc3Bs
aWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEFk
ZHMgYSBuZXcgbGlmZSB0aW1lIGdyYWRpZW50CisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmlu
ZXMgdGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0d2VlbiAwIGFuZCAxKQorICAgICAqIEBwYXJhbSBm
YWN0b3IgZGVmaW5lcyB0aGUgbGlmZSB0aW1lIGZhY3RvciB0byBhZmZlY3QgdG8gdGhlIHNwZWNp
ZmllZCBncmFkaWVudAorICAgICAqIEBwYXJhbSBmYWN0b3IyIGRlZmluZXMgYW4gYWRkaXRpb25h
bCBmYWN0b3IgdXNlZCB0byBkZWZpbmUgYSByYW5nZSAoW2ZhY3RvciwgZmFjdG9yMl0pIHdpdGgg
bWFpbiB2YWx1ZSB0byBwaWNrIHRoZSBmaW5hbCB2YWx1ZSBmcm9tCisgICAgICogQHJldHVybnMg
dGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0u
cHJvdG90eXBlLmFkZExpZmVUaW1lR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQsIGZhY3Rv
ciwgZmFjdG9yMikgeworICAgICAgICBpZiAoIXRoaXMuX2xpZmVUaW1lR3JhZGllbnRzKSB7Cisg
ICAgICAgICAgICB0aGlzLl9saWZlVGltZUdyYWRpZW50cyA9IFtdOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2FkZEZhY3RvckdyYWRpZW50KHRoaXMuX2xpZmVUaW1lR3JhZGllbnRzLCBncmFk
aWVudCwgZmFjdG9yLCBmYWN0b3IyKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZW1vdmUgYSBzcGVjaWZpYyBsaWZlIHRpbWUgZ3JhZGllbnQKKyAgICAg
KiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAgICog
QHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGlj
bGVTeXN0ZW0ucHJvdG90eXBlLnJlbW92ZUxpZmVUaW1lR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3Jh
ZGllbnQpIHsKKyAgICAgICAgdGhpcy5fcmVtb3ZlRmFjdG9yR3JhZGllbnQodGhpcy5fbGlmZVRp
bWVHcmFkaWVudHMsIGdyYWRpZW50KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBBZGRzIGEgbmV3IHNpemUgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gZ3Jh
ZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNlIChiZXR3ZWVuIDAgYW5kIDEpCisgICAg
ICogQHBhcmFtIGZhY3RvciBkZWZpbmVzIHRoZSBzaXplIGZhY3RvciB0byBhZmZlY3QgdG8gdGhl
IHNwZWNpZmllZCBncmFkaWVudAorICAgICAqIEBwYXJhbSBmYWN0b3IyIGRlZmluZXMgYW4gYWRk
aXRpb25hbCBmYWN0b3IgdXNlZCB0byBkZWZpbmUgYSByYW5nZSAoW2ZhY3RvciwgZmFjdG9yMl0p
IHdpdGggbWFpbiB2YWx1ZSB0byBwaWNrIHRoZSBmaW5hbCB2YWx1ZSBmcm9tCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLmFkZFNpemVHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCwgZmFj
dG9yLCBmYWN0b3IyKSB7CisgICAgICAgIGlmICghdGhpcy5fc2l6ZUdyYWRpZW50cykgeworICAg
ICAgICAgICAgdGhpcy5fc2l6ZUdyYWRpZW50cyA9IFtdOworICAgICAgICB9CisgICAgICAgIHRo
aXMuX2FkZEZhY3RvckdyYWRpZW50KHRoaXMuX3NpemVHcmFkaWVudHMsIGdyYWRpZW50LCBmYWN0
b3IsIGZhY3RvcjIpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlbW92ZSBhIHNwZWNpZmljIHNpemUgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0gZ3JhZGll
bnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAgICogQHJldHVybnMgdGhlIGN1
cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90
eXBlLnJlbW92ZVNpemVHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCkgeworICAgICAgICB0
aGlzLl9yZW1vdmVGYWN0b3JHcmFkaWVudCh0aGlzLl9zaXplR3JhZGllbnRzLCBncmFkaWVudCk7
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIG5l
dyBjb2xvciByZW1hcCBncmFkaWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRo
ZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0gbWluIGRl
ZmluZXMgdGhlIGNvbG9yIHJlbWFwIG1pbmltYWwgcmFuZ2UKKyAgICAgKiBAcGFyYW0gbWF4IGRl
ZmluZXMgdGhlIGNvbG9yIHJlbWFwIG1heGltYWwgcmFuZ2UKKyAgICAgKiBAcmV0dXJucyB0aGUg
Y3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90
b3R5cGUuYWRkQ29sb3JSZW1hcEdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRpZW50LCBtaW4sIG1h
eCkgeworICAgICAgICBpZiAoIXRoaXMuX2NvbG9yUmVtYXBHcmFkaWVudHMpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2NvbG9yUmVtYXBHcmFkaWVudHMgPSBbXTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9hZGRGYWN0b3JHcmFkaWVudCh0aGlzLl9jb2xvclJlbWFwR3JhZGllbnRzLCBncmFkaWVu
dCwgbWluLCBtYXgpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlbW92ZSBhIHNwZWNpZmljIGNvbG9yIHJlbWFwIGdyYWRpZW50CisgICAgICogQHBhcmFt
IGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5z
IHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVt
LnByb3RvdHlwZS5yZW1vdmVDb2xvclJlbWFwR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQp
IHsKKyAgICAgICAgdGhpcy5fcmVtb3ZlRmFjdG9yR3JhZGllbnQodGhpcy5fY29sb3JSZW1hcEdy
YWRpZW50cywgZ3JhZGllbnQpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEFkZHMgYSBuZXcgYWxwaGEgcmVtYXAgZ3JhZGllbnQKKyAgICAgKiBAcGFyYW0g
Z3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNlIChiZXR3ZWVuIDAgYW5kIDEpCisg
ICAgICogQHBhcmFtIG1pbiBkZWZpbmVzIHRoZSBhbHBoYSByZW1hcCBtaW5pbWFsIHJhbmdlCisg
ICAgICogQHBhcmFtIG1heCBkZWZpbmVzIHRoZSBhbHBoYSByZW1hcCBtYXhpbWFsIHJhbmdlCisg
ICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAg
UGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFkZEFscGhhUmVtYXBHcmFkaWVudCA9IGZ1bmN0aW9u
IChncmFkaWVudCwgbWluLCBtYXgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9hbHBoYVJlbWFwR3Jh
ZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl9hbHBoYVJlbWFwR3JhZGllbnRzID0gW107Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fYWxwaGFSZW1h
cEdyYWRpZW50cywgZ3JhZGllbnQsIG1pbiwgbWF4KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBzcGVjaWZpYyBhbHBoYSByZW1hcCBncmFk
aWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1v
dmUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8K
KyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVtb3ZlQWxwaGFSZW1hcEdyYWRpZW50ID0g
ZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIHRoaXMuX3JlbW92ZUZhY3RvckdyYWRpZW50
KHRoaXMuX2FscGhhUmVtYXBHcmFkaWVudHMsIGdyYWRpZW50KTsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgbmV3IGFuZ3VsYXIgc3BlZWQgZ3Jh
ZGllbnQKKyAgICAgKiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNl
IChiZXR3ZWVuIDAgYW5kIDEpCisgICAgICogQHBhcmFtIGZhY3RvciBkZWZpbmVzIHRoZSBhbmd1
bGFyIHNwZWVkICB0byBhZmZlY3QgdG8gdGhlIHNwZWNpZmllZCBncmFkaWVudAorICAgICAqIEBw
YXJhbSBmYWN0b3IyIGRlZmluZXMgYW4gYWRkaXRpb25hbCBmYWN0b3IgdXNlZCB0byBkZWZpbmUg
YSByYW5nZSAoW2ZhY3RvciwgZmFjdG9yMl0pIHdpdGggbWFpbiB2YWx1ZSB0byBwaWNrIHRoZSBm
aW5hbCB2YWx1ZSBmcm9tCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lz
dGVtCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFkZEFuZ3VsYXJTcGVl
ZEdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRpZW50LCBmYWN0b3IsIGZhY3RvcjIpIHsKKyAgICAg
ICAgaWYgKCF0aGlzLl9hbmd1bGFyU3BlZWRHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMu
X2FuZ3VsYXJTcGVlZEdyYWRpZW50cyA9IFtdOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Fk
ZEZhY3RvckdyYWRpZW50KHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50cywgZ3JhZGllbnQsIGZh
Y3RvciwgZmFjdG9yMik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmVtb3ZlIGEgc3BlY2lmaWMgYW5ndWxhciBzcGVlZCBncmFkaWVudAorICAgICAqIEBw
YXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0
dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5
c3RlbS5wcm90b3R5cGUucmVtb3ZlQW5ndWxhclNwZWVkR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3Jh
ZGllbnQpIHsKKyAgICAgICAgdGhpcy5fcmVtb3ZlRmFjdG9yR3JhZGllbnQodGhpcy5fYW5ndWxh
clNwZWVkR3JhZGllbnRzLCBncmFkaWVudCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogQWRkcyBhIG5ldyB2ZWxvY2l0eSBncmFkaWVudAorICAgICAqIEBw
YXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQg
MSkKKyAgICAgKiBAcGFyYW0gZmFjdG9yIGRlZmluZXMgdGhlIHZlbG9jaXR5IHRvIGFmZmVjdCB0
byB0aGUgc3BlY2lmaWVkIGdyYWRpZW50CisgICAgICogQHBhcmFtIGZhY3RvcjIgZGVmaW5lcyBh
biBhZGRpdGlvbmFsIGZhY3RvciB1c2VkIHRvIGRlZmluZSBhIHJhbmdlIChbZmFjdG9yLCBmYWN0
b3IyXSkgd2l0aCBtYWluIHZhbHVlIHRvIHBpY2sgdGhlIGZpbmFsIHZhbHVlIGZyb20KKyAgICAg
KiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0
aWNsZVN5c3RlbS5wcm90b3R5cGUuYWRkVmVsb2NpdHlHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFk
aWVudCwgZmFjdG9yLCBmYWN0b3IyKSB7CisgICAgICAgIGlmICghdGhpcy5fdmVsb2NpdHlHcmFk
aWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX3ZlbG9jaXR5R3JhZGllbnRzID0gW107CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fdmVsb2NpdHlHcmFk
aWVudHMsIGdyYWRpZW50LCBmYWN0b3IsIGZhY3RvcjIpOworICAgICAgICByZXR1cm4gdGhpczsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHNwZWNpZmljIHZlbG9jaXR5IGdyYWRp
ZW50CisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHJlbW92
ZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQorICAgICAqLwor
ICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5yZW1vdmVWZWxvY2l0eUdyYWRpZW50ID0gZnVu
Y3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIHRoaXMuX3JlbW92ZUZhY3RvckdyYWRpZW50KHRo
aXMuX3ZlbG9jaXR5R3JhZGllbnRzLCBncmFkaWVudCk7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIG5ldyBsaW1pdCB2ZWxvY2l0eSBncmFkaWVu
dAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2UgKGJl
dHdlZW4gMCBhbmQgMSkKKyAgICAgKiBAcGFyYW0gZmFjdG9yIGRlZmluZXMgdGhlIGxpbWl0IHZl
bG9jaXR5IHZhbHVlIHRvIGFmZmVjdCB0byB0aGUgc3BlY2lmaWVkIGdyYWRpZW50CisgICAgICog
QHBhcmFtIGZhY3RvcjIgZGVmaW5lcyBhbiBhZGRpdGlvbmFsIGZhY3RvciB1c2VkIHRvIGRlZmlu
ZSBhIHJhbmdlIChbZmFjdG9yLCBmYWN0b3IyXSkgd2l0aCBtYWluIHZhbHVlIHRvIHBpY2sgdGhl
IGZpbmFsIHZhbHVlIGZyb20KKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBz
eXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuYWRkTGltaXRWZWxv
Y2l0eUdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRpZW50LCBmYWN0b3IsIGZhY3RvcjIpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzKSB7CisgICAgICAgICAgICB0
aGlzLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzID0gW107CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fbGltaXRWZWxvY2l0eUdyYWRpZW50cywgZ3JhZGll
bnQsIGZhY3RvciwgZmFjdG9yMik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg
LyoqCisgICAgICogUmVtb3ZlIGEgc3BlY2lmaWMgbGltaXQgdmVsb2NpdHkgZ3JhZGllbnQKKyAg
ICAgKiBAcGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAg
ICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFy
dGljbGVTeXN0ZW0ucHJvdG90eXBlLnJlbW92ZUxpbWl0VmVsb2NpdHlHcmFkaWVudCA9IGZ1bmN0
aW9uIChncmFkaWVudCkgeworICAgICAgICB0aGlzLl9yZW1vdmVGYWN0b3JHcmFkaWVudCh0aGlz
Ll9saW1pdFZlbG9jaXR5R3JhZGllbnRzLCBncmFkaWVudCk7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIG5ldyBkcmFnIGdyYWRpZW50CisgICAg
ICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0d2VlbiAw
IGFuZCAxKQorICAgICAqIEBwYXJhbSBmYWN0b3IgZGVmaW5lcyB0aGUgZHJhZyB2YWx1ZSB0byBh
ZmZlY3QgdG8gdGhlIHNwZWNpZmllZCBncmFkaWVudAorICAgICAqIEBwYXJhbSBmYWN0b3IyIGRl
ZmluZXMgYW4gYWRkaXRpb25hbCBmYWN0b3IgdXNlZCB0byBkZWZpbmUgYSByYW5nZSAoW2ZhY3Rv
ciwgZmFjdG9yMl0pIHdpdGggbWFpbiB2YWx1ZSB0byBwaWNrIHRoZSBmaW5hbCB2YWx1ZSBmcm9t
CisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisg
ICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFkZERyYWdHcmFkaWVudCA9IGZ1bmN0aW9uIChn
cmFkaWVudCwgZmFjdG9yLCBmYWN0b3IyKSB7CisgICAgICAgIGlmICghdGhpcy5fZHJhZ0dyYWRp
ZW50cykgeworICAgICAgICAgICAgdGhpcy5fZHJhZ0dyYWRpZW50cyA9IFtdOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX2FkZEZhY3RvckdyYWRpZW50KHRoaXMuX2RyYWdHcmFkaWVudHMsIGdy
YWRpZW50LCBmYWN0b3IsIGZhY3RvcjIpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHNwZWNpZmljIGRyYWcgZ3JhZGllbnQKKyAgICAgKiBA
cGFyYW0gZ3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gcmVtb3ZlCisgICAgICogQHJl
dHVybnMgdGhlIGN1cnJlbnQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLnJlbW92ZURyYWdHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCkg
eworICAgICAgICB0aGlzLl9yZW1vdmVGYWN0b3JHcmFkaWVudCh0aGlzLl9kcmFnR3JhZGllbnRz
LCBncmFkaWVudCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAg
ICogQWRkcyBhIG5ldyBlbWl0IHJhdGUgZ3JhZGllbnQgKHBsZWFzZSBub3RlIHRoYXQgdGhpcyB3
aWxsIG9ubHkgd29yayBpZiB5b3Ugc2V0IHRoZSB0YXJnZXRTdG9wRHVyYXRpb24gcHJvcGVydHkp
CisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0
d2VlbiAwIGFuZCAxKQorICAgICAqIEBwYXJhbSBmYWN0b3IgZGVmaW5lcyB0aGUgZW1pdCByYXRl
IHZhbHVlIHRvIGFmZmVjdCB0byB0aGUgc3BlY2lmaWVkIGdyYWRpZW50CisgICAgICogQHBhcmFt
IGZhY3RvcjIgZGVmaW5lcyBhbiBhZGRpdGlvbmFsIGZhY3RvciB1c2VkIHRvIGRlZmluZSBhIHJh
bmdlIChbZmFjdG9yLCBmYWN0b3IyXSkgd2l0aCBtYWluIHZhbHVlIHRvIHBpY2sgdGhlIGZpbmFs
IHZhbHVlIGZyb20KKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0K
KyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuYWRkRW1pdFJhdGVHcmFkaWVu
dCA9IGZ1bmN0aW9uIChncmFkaWVudCwgZmFjdG9yLCBmYWN0b3IyKSB7CisgICAgICAgIGlmICgh
dGhpcy5fZW1pdFJhdGVHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2VtaXRSYXRlR3Jh
ZGllbnRzID0gW107CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQo
dGhpcy5fZW1pdFJhdGVHcmFkaWVudHMsIGdyYWRpZW50LCBmYWN0b3IsIGZhY3RvcjIpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHNwZWNp
ZmljIGVtaXQgcmF0ZSBncmFkaWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBkZWZpbmVzIHRo
ZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNs
ZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVtb3ZlRW1p
dFJhdGVHcmFkaWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCkgeworICAgICAgICB0aGlzLl9yZW1v
dmVGYWN0b3JHcmFkaWVudCh0aGlzLl9lbWl0UmF0ZUdyYWRpZW50cywgZ3JhZGllbnQpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgYSBuZXcgc3Rh
cnQgc2l6ZSBncmFkaWVudCAocGxlYXNlIG5vdGUgdGhhdCB0aGlzIHdpbGwgb25seSB3b3JrIGlm
IHlvdSBzZXQgdGhlIHRhcmdldFN0b3BEdXJhdGlvbiBwcm9wZXJ0eSkKKyAgICAgKiBAcGFyYW0g
Z3JhZGllbnQgZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNlIChiZXR3ZWVuIDAgYW5kIDEpCisg
ICAgICogQHBhcmFtIGZhY3RvciBkZWZpbmVzIHRoZSBzdGFydCBzaXplIHZhbHVlIHRvIGFmZmVj
dCB0byB0aGUgc3BlY2lmaWVkIGdyYWRpZW50CisgICAgICogQHBhcmFtIGZhY3RvcjIgZGVmaW5l
cyBhbiBhZGRpdGlvbmFsIGZhY3RvciB1c2VkIHRvIGRlZmluZSBhIHJhbmdlIChbZmFjdG9yLCBm
YWN0b3IyXSkgd2l0aCBtYWluIHZhbHVlIHRvIHBpY2sgdGhlIGZpbmFsIHZhbHVlIGZyb20KKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQ
YXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuYWRkU3RhcnRTaXplR3JhZGllbnQgPSBmdW5jdGlvbiAo
Z3JhZGllbnQsIGZhY3RvciwgZmFjdG9yMikgeworICAgICAgICBpZiAoIXRoaXMuX3N0YXJ0U2l6
ZUdyYWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fc3RhcnRTaXplR3JhZGllbnRzID0gW107
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRmFjdG9yR3JhZGllbnQodGhpcy5fc3RhcnRT
aXplR3JhZGllbnRzLCBncmFkaWVudCwgZmFjdG9yLCBmYWN0b3IyKTsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBzcGVjaWZpYyBzdGFydCBz
aXplIGdyYWRpZW50CisgICAgICogQHBhcmFtIGdyYWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50
IHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3RlbQor
ICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5yZW1vdmVTdGFydFNpemVHcmFk
aWVudCA9IGZ1bmN0aW9uIChncmFkaWVudCkgeworICAgICAgICB0aGlzLl9yZW1vdmVGYWN0b3JH
cmFkaWVudCh0aGlzLl9lbWl0UmF0ZUdyYWRpZW50cywgZ3JhZGllbnQpOworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9OworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5fY3JlYXRlUmFt
cEdyYWRpZW50VGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9yYW1w
R3JhZGllbnRzIHx8ICF0aGlzLl9yYW1wR3JhZGllbnRzLmxlbmd0aCB8fCB0aGlzLl9yYW1wR3Jh
ZGllbnRzVGV4dHVyZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5fcmF3VGV4dHVyZVdpZHRoICogNCk7Cisg
ICAgICAgIHZhciB0bXBDb2xvciA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yNF9fWyJUbXBDb2xvcnMiXS5Db2xvcjNbMF07CisgICAgICAgIGZvciAodmFyIHgg
PSAwOyB4IDwgdGhpcy5fcmF3VGV4dHVyZVdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgIHZhciBy
YXRpbyA9IHggLyB0aGlzLl9yYXdUZXh0dXJlV2lkdGg7CisgICAgICAgICAgICBfTWlzY19ncmFk
aWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRD
dXJyZW50R3JhZGllbnQocmF0aW8sIHRoaXMuX3JhbXBHcmFkaWVudHMsIGZ1bmN0aW9uIChjdXJy
ZW50R3JhZGllbnQsIG5leHRHcmFkaWVudCwgc2NhbGUpIHsKKyAgICAgICAgICAgICAgICBfTWF0
aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX1siQ29sb3IzIl0uTGVy
cFRvUmVmKGN1cnJlbnRHcmFkaWVudC5jb2xvciwgbmV4dEdyYWRpZW50LmNvbG9yLCBzY2FsZSwg
dG1wQ29sb3IpOworICAgICAgICAgICAgICAgIGRhdGFbeCAqIDRdID0gdG1wQ29sb3IuciAqIDI1
NTsKKyAgICAgICAgICAgICAgICBkYXRhW3ggKiA0ICsgMV0gPSB0bXBDb2xvci5nICogMjU1Owor
ICAgICAgICAgICAgICAgIGRhdGFbeCAqIDQgKyAyXSA9IHRtcENvbG9yLmIgKiAyNTU7CisgICAg
ICAgICAgICAgICAgZGF0YVt4ICogNCArIDNdID0gMjU1OworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fcmFtcEdyYWRpZW50c1RleHR1cmUgPSBfTWF0ZXJpYWxzX1Rl
eHR1cmVzX3Jhd1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIlJhd1RleHR1
cmUiXS5DcmVhdGVSR0JBVGV4dHVyZShkYXRhLCB0aGlzLl9yYXdUZXh0dXJlV2lkdGgsIDEsIHRo
aXMuX3NjZW5lLCBmYWxzZSwgZmFsc2UsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siVGV4dHVyZSJdLk5FQVJFU1RfU0FNUExJTkdNT0RF
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgbGlzdCBvZiByYW1w
IGdyYWRpZW50cy4KKyAgICAgKiBZb3UgbXVzdCB1c2UgYWRkUmFtcEdyYWRpZW50IGFuZCByZW1v
dmVSYW1wR3JhZGllbnQgdG8gdWRwYXRlIHRoaXMgbGlzdAorICAgICAqIEByZXR1cm5zIHRoZSBs
aXN0IG9mIHJhbXAgZ3JhZGllbnRzCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90
eXBlLmdldFJhbXBHcmFkaWVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9yYW1wR3JhZGllbnRzOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhIG5ldyByYW1w
IGdyYWRpZW50IHVzZWQgdG8gcmVtYXAgcGFydGljbGUgY29sb3JzCisgICAgICogQHBhcmFtIGdy
YWRpZW50IGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZSAoYmV0d2VlbiAwIGFuZCAxKQorICAg
ICAqIEBwYXJhbSBjb2xvciBkZWZpbmVzIHRoZSBjb2xvciB0byBhZmZlY3QgdG8gdGhlIHNwZWNp
ZmllZCBncmFkaWVudAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHBhcnRpY2xlIHN5c3Rl
bQorICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5hZGRSYW1wR3JhZGllbnQg
PSBmdW5jdGlvbiAoZ3JhZGllbnQsIGNvbG9yKSB7CisgICAgICAgIGlmICghdGhpcy5fcmFtcEdy
YWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fcmFtcEdyYWRpZW50cyA9IFtdOworICAgICAg
ICB9CisgICAgICAgIHZhciByYW1wR3JhZGllbnQgPSBuZXcgX01pc2NfZ3JhZGllbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9yM0dyYWRpZW50Il0oKTsKKyAgICAgICAgcmFt
cEdyYWRpZW50LmdyYWRpZW50ID0gZ3JhZGllbnQ7CisgICAgICAgIHJhbXBHcmFkaWVudC5jb2xv
ciA9IGNvbG9yOworICAgICAgICB0aGlzLl9yYW1wR3JhZGllbnRzLnB1c2gocmFtcEdyYWRpZW50
KTsKKyAgICAgICAgdGhpcy5fcmFtcEdyYWRpZW50cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7Cisg
ICAgICAgICAgICBpZiAoYS5ncmFkaWVudCA8IGIuZ3JhZGllbnQpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChhLmdyYWRp
ZW50ID4gYi5ncmFkaWVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0pOworICAgICAgICBpZiAodGhp
cy5fcmFtcEdyYWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3JhbXBHcmFkaWVu
dHNUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX3JhbXBHcmFkaWVudHNUZXh0
dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jcmVhdGVSYW1wR3JhZGllbnRU
ZXh0dXJlKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICog
UmVtb3ZlIGEgc3BlY2lmaWMgcmFtcCBncmFkaWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBk
ZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVu
dCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUu
cmVtb3ZlUmFtcEdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIHRoaXMu
X3JlbW92ZUdyYWRpZW50QW5kVGV4dHVyZShncmFkaWVudCwgdGhpcy5fcmFtcEdyYWRpZW50cywg
dGhpcy5fcmFtcEdyYWRpZW50c1RleHR1cmUpOworICAgICAgICB0aGlzLl9yYW1wR3JhZGllbnRz
VGV4dHVyZSA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLl9yYW1wR3JhZGllbnRzICYmIHRoaXMu
X3JhbXBHcmFkaWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdGhpcy5fY3JlYXRlUmFt
cEdyYWRpZW50VGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogQWRkcyBhIG5ldyBjb2xvciBncmFkaWVudAorICAgICAqIEBw
YXJhbSBncmFkaWVudCBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2UgKGJldHdlZW4gMCBhbmQg
MSkKKyAgICAgKiBAcGFyYW0gY29sb3IxIGRlZmluZXMgdGhlIGNvbG9yIHRvIGFmZmVjdCB0byB0
aGUgc3BlY2lmaWVkIGdyYWRpZW50CisgICAgICogQHBhcmFtIGNvbG9yMiBkZWZpbmVzIGFuIGFk
ZGl0aW9uYWwgY29sb3IgdXNlZCB0byBkZWZpbmUgYSByYW5nZSAoW2NvbG9yLCBjb2xvcjJdKSB3
aXRoIG1haW4gY29sb3IgdG8gcGljayB0aGUgZmluYWwgY29sb3IgZnJvbQorICAgICAqIEByZXR1
cm5zIHRoaXMgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJv
dG90eXBlLmFkZENvbG9yR3JhZGllbnQgPSBmdW5jdGlvbiAoZ3JhZGllbnQsIGNvbG9yMSwgY29s
b3IyKSB7CisgICAgICAgIGlmICghdGhpcy5fY29sb3JHcmFkaWVudHMpIHsKKyAgICAgICAgICAg
IHRoaXMuX2NvbG9yR3JhZGllbnRzID0gW107CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNvbG9y
R3JhZGllbnQgPSBuZXcgX01pc2NfZ3JhZGllbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkNvbG9yR3JhZGllbnQiXSgpOworICAgICAgICBjb2xvckdyYWRpZW50LmdyYWRpZW50ID0g
Z3JhZGllbnQ7CisgICAgICAgIGNvbG9yR3JhZGllbnQuY29sb3IxID0gY29sb3IxOworICAgICAg
ICBjb2xvckdyYWRpZW50LmNvbG9yMiA9IGNvbG9yMjsKKyAgICAgICAgdGhpcy5fY29sb3JHcmFk
aWVudHMucHVzaChjb2xvckdyYWRpZW50KTsKKyAgICAgICAgdGhpcy5fY29sb3JHcmFkaWVudHMu
c29ydChmdW5jdGlvbiAoYSwgYikgeworICAgICAgICAgICAgaWYgKGEuZ3JhZGllbnQgPCBiLmdy
YWRpZW50KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBpZiAoYS5ncmFkaWVudCA+IGIuZ3JhZGllbnQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZW1vdmUgYSBzcGVjaWZpYyBjb2xvciBncmFkaWVudAorICAgICAqIEBwYXJhbSBncmFkaWVudCBk
ZWZpbmVzIHRoZSBncmFkaWVudCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGlzIHBhcnRp
Y2xlIHN5c3RlbQorICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5yZW1vdmVD
b2xvckdyYWRpZW50ID0gZnVuY3Rpb24gKGdyYWRpZW50KSB7CisgICAgICAgIGlmICghdGhpcy5f
Y29sb3JHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9Cisg
ICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlz
Ll9jb2xvckdyYWRpZW50czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZh
ciBjb2xvckdyYWRpZW50ID0gX2FbX2ldOworICAgICAgICAgICAgaWYgKGNvbG9yR3JhZGllbnQu
Z3JhZGllbnQgPT09IGdyYWRpZW50KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY29sb3JHcmFk
aWVudHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfTsKKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX2ZldGNoUiA9IGZ1bmN0
aW9uICh1LCB2LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpIHsKKyAgICAgICAgdSA9IE1hdGguYWJz
KHUpICogMC41ICsgMC41OworICAgICAgICB2ID0gTWF0aC5hYnModikgKiAwLjUgKyAwLjU7Cisg
ICAgICAgIHZhciB3cmFwcGVkVSA9ICgodSAqIHdpZHRoKSAlIHdpZHRoKSB8IDA7CisgICAgICAg
IHZhciB3cmFwcGVkViA9ICgodiAqIGhlaWdodCkgJSBoZWlnaHQpIHwgMDsKKyAgICAgICAgdmFy
IHBvc2l0aW9uID0gKHdyYXBwZWRVICsgd3JhcHBlZFYgKiB3aWR0aCkgKiA0OworICAgICAgICBy
ZXR1cm4gcGl4ZWxzW3Bvc2l0aW9uXSAvIDI1NTsKKyAgICB9OworICAgIFBhcnRpY2xlU3lzdGVt
LnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX3Jlc2V0RWZm
ZWN0KCk7CisgICAgfTsKKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX3Jlc2V0RWZmZWN0
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fdmVydGV4QnVmZmVyKSB7CisgICAg
ICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5f
dmVydGV4QnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc3ByaXRl
QnVmZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9zcHJpdGVCdWZmZXIuZGlzcG9zZSgpOworICAg
ICAgICAgICAgdGhpcy5fc3ByaXRlQnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9jcmVhdGVWZXJ0ZXhCdWZmZXJzKCk7CisgICAgfTsKKyAgICBQYXJ0aWNsZVN5c3RlbS5w
cm90b3R5cGUuX2NyZWF0ZVZlcnRleEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMuX3ZlcnRleEJ1ZmZlclNpemUgPSB0aGlzLl91c2VJbnN0YW5jaW5nID8gMTAgOiAxMjsKKyAg
ICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICB0
aGlzLl92ZXJ0ZXhCdWZmZXJTaXplICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlz
Ll9pc0JpbGxib2FyZEJhc2VkIHx8IHRoaXMuYmlsbGJvYXJkTW9kZSA9PT0gUGFydGljbGVTeXN0
ZW0uQklMTEJPQVJETU9ERV9TVFJFVENIRUQpIHsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleEJ1
ZmZlclNpemUgKz0gMzsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fdXNlUmFtcEdyYWRp
ZW50cykgeworICAgICAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyU2l6ZSArPSA0OworICAgICAg
ICB9CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAg
ICAgdGhpcy5fdmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5fY2FwYWNpdHkgKiB0
aGlzLl92ZXJ0ZXhCdWZmZXJTaXplICogKHRoaXMuX3VzZUluc3RhbmNpbmcgPyAxIDogNCkpOwor
ICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXIgPSBuZXcgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siQnVmZmVyIl0oZW5naW5lLCB0aGlzLl92ZXJ0ZXhEYXRhLCB0
cnVlLCB0aGlzLl92ZXJ0ZXhCdWZmZXJTaXplKTsKKyAgICAgICAgdmFyIGRhdGFPZmZzZXQgPSAw
OworICAgICAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5fdmVydGV4QnVmZmVyLmNyZWF0ZVZlcnRl
eEJ1ZmZlcihfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0
ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIGRhdGFPZmZzZXQsIDMsIHRoaXMuX3ZlcnRleEJ1ZmZl
clNpemUsIHRoaXMuX3VzZUluc3RhbmNpbmcpOworICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJz
W19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlcnRleEJ1ZmZl
ciJdLlBvc2l0aW9uS2luZF0gPSBwb3NpdGlvbnM7CisgICAgICAgIGRhdGFPZmZzZXQgKz0gMzsK
KyAgICAgICAgdmFyIGNvbG9ycyA9IHRoaXMuX3ZlcnRleEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZm
ZXIoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVmVydGV4QnVm
ZmVyIl0uQ29sb3JLaW5kLCBkYXRhT2Zmc2V0LCA0LCB0aGlzLl92ZXJ0ZXhCdWZmZXJTaXplLCB0
aGlzLl91c2VJbnN0YW5jaW5nKTsKKyAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xv
cktpbmRdID0gY29sb3JzOworICAgICAgICBkYXRhT2Zmc2V0ICs9IDQ7CisgICAgICAgIHZhciBv
cHRpb25zID0gdGhpcy5fdmVydGV4QnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcigiYW5nbGUiLCBk
YXRhT2Zmc2V0LCAxLCB0aGlzLl92ZXJ0ZXhCdWZmZXJTaXplLCB0aGlzLl91c2VJbnN0YW5jaW5n
KTsKKyAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1siYW5nbGUiXSA9IG9wdGlvbnM7CisgICAg
ICAgIGRhdGFPZmZzZXQgKz0gMTsKKyAgICAgICAgdmFyIHNpemUgPSB0aGlzLl92ZXJ0ZXhCdWZm
ZXIuY3JlYXRlVmVydGV4QnVmZmVyKCJzaXplIiwgZGF0YU9mZnNldCwgMiwgdGhpcy5fdmVydGV4
QnVmZmVyU2l6ZSwgdGhpcy5fdXNlSW5zdGFuY2luZyk7CisgICAgICAgIHRoaXMuX3ZlcnRleEJ1
ZmZlcnNbInNpemUiXSA9IHNpemU7CisgICAgICAgIGRhdGFPZmZzZXQgKz0gMjsKKyAgICAgICAg
aWYgKHRoaXMuX2lzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICB2YXIgY2Vs
bEluZGV4QnVmZmVyID0gdGhpcy5fdmVydGV4QnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcigiY2Vs
bEluZGV4IiwgZGF0YU9mZnNldCwgMSwgdGhpcy5fdmVydGV4QnVmZmVyU2l6ZSwgdGhpcy5fdXNl
SW5zdGFuY2luZyk7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzWyJjZWxsSW5kZXgi
XSA9IGNlbGxJbmRleEJ1ZmZlcjsKKyAgICAgICAgICAgIGRhdGFPZmZzZXQgKz0gMTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXRoaXMuX2lzQmlsbGJvYXJkQmFzZWQgfHwgdGhpcy5iaWxsYm9h
cmRNb2RlID09PSBQYXJ0aWNsZVN5c3RlbS5CSUxMQk9BUkRNT0RFX1NUUkVUQ0hFRCkgeworICAg
ICAgICAgICAgdmFyIGRpcmVjdGlvbkJ1ZmZlciA9IHRoaXMuX3ZlcnRleEJ1ZmZlci5jcmVhdGVW
ZXJ0ZXhCdWZmZXIoImRpcmVjdGlvbiIsIGRhdGFPZmZzZXQsIDMsIHRoaXMuX3ZlcnRleEJ1ZmZl
clNpemUsIHRoaXMuX3VzZUluc3RhbmNpbmcpOworICAgICAgICAgICAgdGhpcy5fdmVydGV4QnVm
ZmVyc1siZGlyZWN0aW9uIl0gPSBkaXJlY3Rpb25CdWZmZXI7CisgICAgICAgICAgICBkYXRhT2Zm
c2V0ICs9IDM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3VzZVJhbXBHcmFkaWVudHMp
IHsKKyAgICAgICAgICAgIHZhciByYW1wRGF0YUJ1ZmZlciA9IHRoaXMuX3ZlcnRleEJ1ZmZlci5j
cmVhdGVWZXJ0ZXhCdWZmZXIoInJlbWFwRGF0YSIsIGRhdGFPZmZzZXQsIDQsIHRoaXMuX3ZlcnRl
eEJ1ZmZlclNpemUsIHRoaXMuX3VzZUluc3RhbmNpbmcpOworICAgICAgICAgICAgdGhpcy5fdmVy
dGV4QnVmZmVyc1sicmVtYXBEYXRhIl0gPSByYW1wRGF0YUJ1ZmZlcjsKKyAgICAgICAgICAgIGRh
dGFPZmZzZXQgKz0gNDsKKyAgICAgICAgfQorICAgICAgICB2YXIgb2Zmc2V0czsKKyAgICAgICAg
aWYgKHRoaXMuX3VzZUluc3RhbmNpbmcpIHsKKyAgICAgICAgICAgIHZhciBzcHJpdGVEYXRhID0g
bmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMSwgMCwgMSwgMSwgMCwgMV0pOworICAgICAgICAgICAg
dGhpcy5fc3ByaXRlQnVmZmVyID0gbmV3IF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIkJ1ZmZlciJdKGVuZ2luZSwgc3ByaXRlRGF0YSwgZmFsc2UsIDIpOworICAg
ICAgICAgICAgb2Zmc2V0cyA9IHRoaXMuX3Nwcml0ZUJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIo
Im9mZnNldCIsIDAsIDIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
b2Zmc2V0cyA9IHRoaXMuX3ZlcnRleEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoIm9mZnNldCIs
IGRhdGFPZmZzZXQsIDIsIHRoaXMuX3ZlcnRleEJ1ZmZlclNpemUsIHRoaXMuX3VzZUluc3RhbmNp
bmcpOworICAgICAgICAgICAgZGF0YU9mZnNldCArPSAyOworICAgICAgICB9CisgICAgICAgIHRo
aXMuX3ZlcnRleEJ1ZmZlcnNbIm9mZnNldCJdID0gb2Zmc2V0czsKKyAgICB9OworICAgIFBhcnRp
Y2xlU3lzdGVtLnByb3RvdHlwZS5fY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGlmICh0aGlzLl91c2VJbnN0YW5jaW5nKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAgICAgICAgdmFyIGluZGV4ID0g
MDsKKyAgICAgICAgZm9yICh2YXIgY291bnQgPSAwOyBjb3VudCA8IHRoaXMuX2NhcGFjaXR5OyBj
b3VudCsrKSB7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXgpOworICAgICAgICAgICAg
aW5kaWNlcy5wdXNoKGluZGV4ICsgMSk7CisgICAgICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXgg
KyAyKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRleCk7CisgICAgICAgICAgICBpbmRp
Y2VzLnB1c2goaW5kZXggKyAyKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRleCArIDMp
OworICAgICAgICAgICAgaW5kZXggKz0gNDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pbmRl
eEJ1ZmZlciA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZUluZGV4QnVmZmVyKGluZGlj
ZXMpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Yg
cGFydGljbGVzIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAqIEByZXR1cm5zIFRoZSBt
YXggbnVtYmVyIG9mIGFjdGl2ZSBwYXJ0aWNsZXMuCisgICAgICovCisgICAgUGFydGljbGVTeXN0
ZW0ucHJvdG90eXBlLmdldENhcGFjaXR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5fY2FwYWNpdHk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHdoZXRoZXIgdGhl
cmUgYXJlIHN0aWxsIGFjdGl2ZSBwYXJ0aWNsZXMgaW4gdGhlIHN5c3RlbS4KKyAgICAgKiBAcmV0
dXJucyBUcnVlIGlmIGl0IGlzIGFsaXZlLCBvdGhlcndpc2UgZmFsc2UuCisgICAgICovCisgICAg
UGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmlzQWxpdmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLl9hbGl2ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgaWYgdGhl
IHN5c3RlbSBoYXMgYmVlbiBzdGFydGVkLiAoTm90ZTogdGhpcyB3aWxsIHN0aWxsIGJlIHRydWUg
YWZ0ZXIgc3RvcCBpcyBjYWxsZWQpCisgICAgICogQHJldHVybnMgVHJ1ZSBpZiBpdCBoYXMgYmVl
biBzdGFydGVkLCBvdGhlcndpc2UgZmFsc2UuCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0u
cHJvdG90eXBlLmlzU3RhcnRlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3N0YXJ0ZWQ7CisgICAgfTsKKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX3ByZXBhcmVT
dWJFbWl0dGVySW50ZXJuYWxBcnJheSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlz
ID0gdGhpczsKKyAgICAgICAgdGhpcy5fc3ViRW1pdHRlcnMgPSBuZXcgQXJyYXkoKTsKKyAgICAg
ICAgaWYgKHRoaXMuc3ViRW1pdHRlcnMpIHsKKyAgICAgICAgICAgIHRoaXMuc3ViRW1pdHRlcnMu
Zm9yRWFjaChmdW5jdGlvbiAoc3ViRW1pdHRlcikgeworICAgICAgICAgICAgICAgIGlmIChzdWJF
bWl0dGVyIGluc3RhbmNlb2YgUGFydGljbGVTeXN0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
X3RoaXMuX3N1YkVtaXR0ZXJzLnB1c2goW25ldyBfc3ViRW1pdHRlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTdfX1siU3ViRW1pdHRlciJdKHN1YkVtaXR0ZXIpXSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN1YkVtaXR0ZXIgaW5zdGFuY2VvZiBfc3Vi
RW1pdHRlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siU3ViRW1pdHRlciJdKSB7Cisg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdWJFbWl0dGVycy5wdXNoKFtzdWJFbWl0dGVyXSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN1YkVtaXR0ZXIg
aW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3ViRW1pdHRl
cnMucHVzaChzdWJFbWl0dGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU3RhcnRzIHRoZSBwYXJ0aWNsZSBz
eXN0ZW0gYW5kIGJlZ2lucyB0byBlbWl0CisgICAgICogQHBhcmFtIGRlbGF5IGRlZmluZXMgdGhl
IGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgc3RhcnRpbmcgdGhlIHN5c3RlbSAodGhpcy5z
dGFydERlbGF5IGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90
eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKGRlbGF5KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisgICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gdGhpcy5zdGFydERlbGF5
OyB9CisgICAgICAgIGlmICghdGhpcy50YXJnZXRTdG9wRHVyYXRpb24gJiYgdGhpcy5faGFzVGFy
Z2V0U3RvcER1cmF0aW9uRGVwZW5kYW50R3JhZGllbnQoKSkgeworICAgICAgICAgICAgdGhyb3cg
IlBhcnRpY2xlIHN5c3RlbSBzdGFydGVkIHdpdGggYSB0YXJnZXRTdG9wRHVyYXRpb24gZGVwZW5k
YW50IGdyYWRpZW50IChlZy4gc3RhcnRTaXplR3JhZGllbnRzKSBidXQgbm8gdGFyZ2V0U3RvcER1
cmF0aW9uIHNldCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlbGF5KSB7CisgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5zdGFydCgw
KTsKKyAgICAgICAgICAgIH0sIGRlbGF5KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAvLyBDb252ZXJ0IHRoZSBzdWJFbWl0dGVycyBmaWVsZCB0byB0aGUgY29uc3Rh
bnQgdHlwZSBmaWVsZCBfc3ViRW1pdHRlcnMKKyAgICAgICAgdGhpcy5fcHJlcGFyZVN1YkVtaXR0
ZXJJbnRlcm5hbEFycmF5KCk7CisgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSB0cnVlOworICAgICAg
ICB0aGlzLl9zdG9wcGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2FjdHVhbEZyYW1lID0gMDsK
KyAgICAgICAgaWYgKHRoaXMuX3N1YkVtaXR0ZXJzICYmIHRoaXMuX3N1YkVtaXR0ZXJzLmxlbmd0
aCAhPSAwKSB7CisgICAgICAgICAgICB0aGlzLmFjdGl2ZVN1YlN5c3RlbXMgPSBuZXcgQXJyYXko
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXNldCBlbWl0IGdyYWRpZW50IHNvIGl0IGFjdHMg
dGhlIHNhbWUgb24gZXZlcnkgc3RhcnQKKyAgICAgICAgaWYgKHRoaXMuX2VtaXRSYXRlR3JhZGll
bnRzKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fZW1pdFJhdGVHcmFkaWVudHMubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRFbWl0UmF0ZUdyYWRpZW50ID0gdGhp
cy5fZW1pdFJhdGVHcmFkaWVudHNbMF07CisgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEVt
aXRSYXRlMSA9IHRoaXMuX2N1cnJlbnRFbWl0UmF0ZUdyYWRpZW50LmdldEZhY3RvcigpOworICAg
ICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRFbWl0UmF0ZTIgPSB0aGlzLl9jdXJyZW50RW1pdFJh
dGUxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX2VtaXRSYXRlR3JhZGll
bnRzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50RW1pdFJhdGUy
ID0gdGhpcy5fZW1pdFJhdGVHcmFkaWVudHNbMV0uZ2V0RmFjdG9yKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVzZXQgc3RhcnQgc2l6ZSBncmFkaWVudCBzbyBpdCBh
Y3RzIHRoZSBzYW1lIG9uIGV2ZXJ5IHN0YXJ0CisgICAgICAgIGlmICh0aGlzLl9zdGFydFNpemVH
cmFkaWVudHMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zdGFydFNpemVHcmFkaWVudHMubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGFydFNpemVHcmFkaWVu
dCA9IHRoaXMuX3N0YXJ0U2l6ZUdyYWRpZW50c1swXTsKKyAgICAgICAgICAgICAgICB0aGlzLl9j
dXJyZW50U3RhcnRTaXplMSA9IHRoaXMuX2N1cnJlbnRTdGFydFNpemVHcmFkaWVudC5nZXRGYWN0
b3IoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhcnRTaXplMiA9IHRoaXMuX2N1
cnJlbnRTdGFydFNpemUxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX3N0
YXJ0U2l6ZUdyYWRpZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY3Vy
cmVudFN0YXJ0U2l6ZTIgPSB0aGlzLl9zdGFydFNpemVHcmFkaWVudHNbMV0uZ2V0RmFjdG9yKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucHJlV2FybUN5Y2xl
cykgeworICAgICAgICAgICAgaWYgKHRoaXMuZW1pdHRlciBpbnN0YW5jZW9mIF9NZXNoZXNfYWJz
dHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkFic3RyYWN0TWVzaCJdKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBub2lzZVRleHR1cmVBc1Byb2NlZHVyYWxf
MSA9IHRoaXMubm9pc2VUZXh0dXJlOworICAgICAgICAgICAgaWYgKG5vaXNlVGV4dHVyZUFzUHJv
Y2VkdXJhbF8xICYmIG5vaXNlVGV4dHVyZUFzUHJvY2VkdXJhbF8xLm9uR2VuZXJhdGVkT2JzZXJ2
YWJsZSkgeworICAgICAgICAgICAgICAgIG5vaXNlVGV4dHVyZUFzUHJvY2VkdXJhbF8xLm9uR2Vu
ZXJhdGVkT2JzZXJ2YWJsZS5hZGRPbmNlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgX3RoaXMucHJlV2FybUN5Y2xlczsgaW5kZXgrKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmFuaW1hdGUodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9pc2VUZXh0dXJlQXNQcm9jZWR1cmFsXzEucmVuZGVyKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMucHJlV2FybUN5Y2xl
czsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGUodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEFu
aW1hdGlvbnMKKyAgICAgICAgaWYgKHRoaXMuYmVnaW5BbmltYXRpb25PblN0YXJ0ICYmIHRoaXMu
YW5pbWF0aW9ucyAmJiB0aGlzLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAg
dGhpcy5nZXRTY2VuZSgpLmJlZ2luQW5pbWF0aW9uKHRoaXMsIHRoaXMuYmVnaW5BbmltYXRpb25G
cm9tLCB0aGlzLmJlZ2luQW5pbWF0aW9uVG8sIHRoaXMuYmVnaW5BbmltYXRpb25Mb29wKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogU3RvcHMgdGhlIHBhcnRpY2xlIHN5c3Rl
bS4KKyAgICAgKiBAcGFyYW0gc3RvcFN1YkVtaXR0ZXJzIGlmIHRydWUgaXQgd2lsbCBzdG9wIHRo
ZSBjdXJyZW50IHN5c3RlbSBhbmQgYWxsIGNyZWF0ZWQgc3ViLVN5c3RlbXMgaWYgZmFsc2UgaXQg
d2lsbCBzdG9wIHRoZSBjdXJyZW50IHJvb3Qgc3lzdGVtIG9ubHksIHRoaXMgcGFyYW0gaXMgdXNl
ZCBieSB0aGUgcm9vdCBwYXJ0aWNsZSBzeXN0ZW0gb25seS4gdGhlIGRlZmF1bHQgdmFsdWUgaXMg
dHJ1ZS4KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0
aW9uIChzdG9wU3ViRW1pdHRlcnMpIHsKKyAgICAgICAgaWYgKHN0b3BTdWJFbWl0dGVycyA9PT0g
dm9pZCAwKSB7IHN0b3BTdWJFbWl0dGVycyA9IHRydWU7IH0KKyAgICAgICAgdGhpcy5fc3RvcHBl
ZCA9IHRydWU7CisgICAgICAgIGlmIChzdG9wU3ViRW1pdHRlcnMpIHsKKyAgICAgICAgICAgIHRo
aXMuX3N0b3BTdWJFbWl0dGVycygpOworICAgICAgICB9CisgICAgfTsKKyAgICAvLyBhbmltYXRp
b24gc2hlZXQKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIGFjdGl2ZSBwYXJ0aWNsZXMKKyAg
ICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMuX3N0b2NrUGFydGljbGVzID0gW107CisgICAgICAgIHRoaXMuX3BhcnRp
Y2xlcyA9IFtdOworICAgIH07CisgICAgLyoqCisgICAgICogQGhpZGRlbiAoZm9yIGludGVybmFs
IHVzZSBvbmx5KQorICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5fYXBwZW5k
UGFydGljbGVWZXJ0ZXggPSBmdW5jdGlvbiAoaW5kZXgsIHBhcnRpY2xlLCBvZmZzZXRYLCBvZmZz
ZXRZKSB7CisgICAgICAgIHZhciBvZmZzZXQgPSBpbmRleCAqIHRoaXMuX3ZlcnRleEJ1ZmZlclNp
emU7CisgICAgICAgIHRoaXMuX3ZlcnRleERhdGFbb2Zmc2V0KytdID0gcGFydGljbGUucG9zaXRp
b24ueCArIHRoaXMud29ybGRPZmZzZXQueDsKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZz
ZXQrK10gPSBwYXJ0aWNsZS5wb3NpdGlvbi55ICsgdGhpcy53b3JsZE9mZnNldC55OworICAgICAg
ICB0aGlzLl92ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRpY2xlLnBvc2l0aW9uLnogKyB0aGlz
LndvcmxkT2Zmc2V0Lno7CisgICAgICAgIHRoaXMuX3ZlcnRleERhdGFbb2Zmc2V0KytdID0gcGFy
dGljbGUuY29sb3IucjsKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZzZXQrK10gPSBwYXJ0
aWNsZS5jb2xvci5nOworICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRp
Y2xlLmNvbG9yLmI7CisgICAgICAgIHRoaXMuX3ZlcnRleERhdGFbb2Zmc2V0KytdID0gcGFydGlj
bGUuY29sb3IuYTsKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZzZXQrK10gPSBwYXJ0aWNs
ZS5hbmdsZTsKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZzZXQrK10gPSBwYXJ0aWNsZS5z
Y2FsZS54ICogcGFydGljbGUuc2l6ZTsKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZzZXQr
K10gPSBwYXJ0aWNsZS5zY2FsZS55ICogcGFydGljbGUuc2l6ZTsKKyAgICAgICAgaWYgKHRoaXMu
X2lzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRh
W29mZnNldCsrXSA9IHBhcnRpY2xlLmNlbGxJbmRleDsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IXRoaXMuX2lzQmlsbGJvYXJkQmFzZWQpIHsKKyAgICAgICAgICAgIGlmIChwYXJ0aWNsZS5faW5p
dGlhbERpcmVjdGlvbikgeworICAgICAgICAgICAgICAgIHRoaXMuX3ZlcnRleERhdGFbb2Zmc2V0
KytdID0gcGFydGljbGUuX2luaXRpYWxEaXJlY3Rpb24ueDsKKyAgICAgICAgICAgICAgICB0aGlz
Ll92ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRpY2xlLl9pbml0aWFsRGlyZWN0aW9uLnk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZzZXQrK10gPSBwYXJ0aWNsZS5faW5p
dGlhbERpcmVjdGlvbi56OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZzZXQrK10gPSBwYXJ0aWNsZS5kaXJlY3Rp
b24ueDsKKyAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRp
Y2xlLmRpcmVjdGlvbi55OworICAgICAgICAgICAgICAgIHRoaXMuX3ZlcnRleERhdGFbb2Zmc2V0
KytdID0gcGFydGljbGUuZGlyZWN0aW9uLno7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAodGhpcy5iaWxsYm9hcmRNb2RlID09PSBQYXJ0aWNsZVN5c3RlbS5CSUxM
Qk9BUkRNT0RFX1NUUkVUQ0hFRCkgeworICAgICAgICAgICAgdGhpcy5fdmVydGV4RGF0YVtvZmZz
ZXQrK10gPSBwYXJ0aWNsZS5kaXJlY3Rpb24ueDsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleERh
dGFbb2Zmc2V0KytdID0gcGFydGljbGUuZGlyZWN0aW9uLnk7CisgICAgICAgICAgICB0aGlzLl92
ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRpY2xlLmRpcmVjdGlvbi56OworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl91c2VSYW1wR3JhZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl92
ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRpY2xlLnJlbWFwRGF0YS54OworICAgICAgICAgICAg
dGhpcy5fdmVydGV4RGF0YVtvZmZzZXQrK10gPSBwYXJ0aWNsZS5yZW1hcERhdGEueTsKKyAgICAg
ICAgICAgIHRoaXMuX3ZlcnRleERhdGFbb2Zmc2V0KytdID0gcGFydGljbGUucmVtYXBEYXRhLno7
CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRhW29mZnNldCsrXSA9IHBhcnRpY2xlLnJlbWFw
RGF0YS53OworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fdXNlSW5zdGFuY2luZykgewor
ICAgICAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG9mZnNldFggPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
WCA9IHRoaXMuX2Vwc2lsb247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG9mZnNldFggPT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WCA9IDEg
LSB0aGlzLl9lcHNpbG9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
b2Zmc2V0WSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXRZID0gdGhpcy5fZXBz
aWxvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2Zmc2V0
WSA9PT0gMSkgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXRZID0gMSAtIHRoaXMuX2Vwc2ls
b247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
dmVydGV4RGF0YVtvZmZzZXQrK10gPSBvZmZzZXRYOworICAgICAgICAgICAgdGhpcy5fdmVydGV4
RGF0YVtvZmZzZXQrK10gPSBvZmZzZXRZOworICAgICAgICB9CisgICAgfTsKKyAgICBQYXJ0aWNs
ZVN5c3RlbS5wcm90b3R5cGUuX3N0b3BTdWJFbWl0dGVycyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgaWYgKCF0aGlzLmFjdGl2ZVN1YlN5c3RlbXMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLmFjdGl2ZVN1YlN5c3RlbXMuZm9yRWFjaChmdW5jdGlvbiAo
c3ViU3lzdGVtKSB7CisgICAgICAgICAgICBzdWJTeXN0ZW0uc3RvcCh0cnVlKTsKKyAgICAgICAg
fSk7CisgICAgICAgIHRoaXMuYWN0aXZlU3ViU3lzdGVtcyA9IG5ldyBBcnJheSgpOworICAgIH07
CisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9yZW1vdmVGcm9tUm9vdCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9yb290UGFydGljbGVTeXN0ZW0pIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9yb290UGFy
dGljbGVTeXN0ZW0uYWN0aXZlU3ViU3lzdGVtcy5pbmRleE9mKHRoaXMpOworICAgICAgICBpZiAo
aW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICB0aGlzLl9yb290UGFydGljbGVTeXN0ZW0uYWN0
aXZlU3ViU3lzdGVtcy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9CisgICAgICAgIHRoaXMu
X3Jvb3RQYXJ0aWNsZVN5c3RlbSA9IG51bGw7CisgICAgfTsKKyAgICAvLyBFbmQgb2Ygc3ViIHN5
c3RlbSBtZXRob2RzCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl91cGRhdGUgPSBmdW5j
dGlvbiAobmV3UGFydGljbGVzKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAg
IC8vIFVwZGF0ZSBjdXJyZW50CisgICAgICAgIHRoaXMuX2FsaXZlID0gdGhpcy5fcGFydGljbGVz
Lmxlbmd0aCA+IDA7CisgICAgICAgIGlmICh0aGlzLmVtaXR0ZXIucG9zaXRpb24pIHsKKyAgICAg
ICAgICAgIHZhciBlbWl0dGVyTWVzaCA9IHRoaXMuZW1pdHRlcjsKKyAgICAgICAgICAgIHRoaXMu
X2VtaXR0ZXJXb3JsZE1hdHJpeCA9IGVtaXR0ZXJNZXNoLmdldFdvcmxkTWF0cml4KCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgZW1pdHRlclBvc2l0aW9uID0g
dGhpcy5lbWl0dGVyOworICAgICAgICAgICAgdGhpcy5fZW1pdHRlcldvcmxkTWF0cml4ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLlRy
YW5zbGF0aW9uKGVtaXR0ZXJQb3NpdGlvbi54LCBlbWl0dGVyUG9zaXRpb24ueSwgZW1pdHRlclBv
c2l0aW9uLnopOworICAgICAgICB9CisgICAgICAgIHRoaXMudXBkYXRlRnVuY3Rpb24odGhpcy5f
cGFydGljbGVzKTsKKyAgICAgICAgLy8gQWRkIG5ldyBvbmVzCisgICAgICAgIHZhciBwYXJ0aWNs
ZTsKKyAgICAgICAgdmFyIF9sb29wXzIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAo
dGhpc18xLl9wYXJ0aWNsZXMubGVuZ3RoID09PSB0aGlzXzEuX2NhcGFjaXR5KSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJicmVhayI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJ0
aWNsZSA9IHRoaXNfMS5fY3JlYXRlUGFydGljbGUoKTsKKyAgICAgICAgICAgIHRoaXNfMS5fcGFy
dGljbGVzLnB1c2gocGFydGljbGUpOworICAgICAgICAgICAgLy8gRW1pdHRlcgorICAgICAgICAg
ICAgdmFyIGVtaXRQb3dlciA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSh0aGlzXzEubWluRW1pdFBvd2VyLCB0aGlz
XzEubWF4RW1pdFBvd2VyKTsKKyAgICAgICAgICAgIGlmICh0aGlzXzEuc3RhcnRQb3NpdGlvbkZ1
bmN0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhpc18xLnN0YXJ0UG9zaXRpb25GdW5jdGlvbih0
aGlzXzEuX2VtaXR0ZXJXb3JsZE1hdHJpeCwgcGFydGljbGUucG9zaXRpb24sIHBhcnRpY2xlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXNf
MS5wYXJ0aWNsZUVtaXR0ZXJUeXBlLnN0YXJ0UG9zaXRpb25GdW5jdGlvbih0aGlzXzEuX2VtaXR0
ZXJXb3JsZE1hdHJpeCwgcGFydGljbGUucG9zaXRpb24sIHBhcnRpY2xlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh0aGlzXzEuc3RhcnREaXJlY3Rpb25GdW5jdGlvbikgeworICAg
ICAgICAgICAgICAgIHRoaXNfMS5zdGFydERpcmVjdGlvbkZ1bmN0aW9uKHRoaXNfMS5fZW1pdHRl
cldvcmxkTWF0cml4LCBwYXJ0aWNsZS5kaXJlY3Rpb24sIHBhcnRpY2xlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXNfMS5wYXJ0aWNsZUVt
aXR0ZXJUeXBlLnN0YXJ0RGlyZWN0aW9uRnVuY3Rpb24odGhpc18xLl9lbWl0dGVyV29ybGRNYXRy
aXgsIHBhcnRpY2xlLmRpcmVjdGlvbiwgcGFydGljbGUpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGVtaXRQb3dlciA9PT0gMCkgeworICAgICAgICAgICAgICAgIGlmICghcGFydGlj
bGUuX2luaXRpYWxEaXJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuX2lu
aXRpYWxEaXJlY3Rpb24gPSBwYXJ0aWNsZS5kaXJlY3Rpb24uY2xvbmUoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnRp
Y2xlLl9pbml0aWFsRGlyZWN0aW9uLmNvcHlGcm9tKHBhcnRpY2xlLmRpcmVjdGlvbik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgcGFydGljbGUuX2luaXRpYWxEaXJlY3Rpb24gPSBudWxsOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcGFydGljbGUuZGlyZWN0aW9uLnNjYWxlSW5QbGFjZShlbWl0UG93ZXIp
OworICAgICAgICAgICAgLy8gTGlmZSB0aW1lCisgICAgICAgICAgICBpZiAodGhpc18xLnRhcmdl
dFN0b3BEdXJhdGlvbiAmJiB0aGlzXzEuX2xpZmVUaW1lR3JhZGllbnRzICYmIHRoaXNfMS5fbGlm
ZVRpbWVHcmFkaWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHZhciByYXRpb18x
ID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjYWxh
ciJdLkNsYW1wKHRoaXNfMS5fYWN0dWFsRnJhbWUgLyB0aGlzXzEudGFyZ2V0U3RvcER1cmF0aW9u
KTsKKyAgICAgICAgICAgICAgICBfTWlzY19ncmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5HZXRDdXJyZW50R3JhZGllbnQocmF0aW9fMSwgdGhp
c18xLl9saWZlVGltZUdyYWRpZW50cywgZnVuY3Rpb24gKGN1cnJlbnRHcmFkaWVudCwgbmV4dEdy
YWRpZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmYWN0b3JHcmFkaWVudDEgPSBjdXJy
ZW50R3JhZGllbnQ7CisgICAgICAgICAgICAgICAgICAgIHZhciBmYWN0b3JHcmFkaWVudDIgPSBu
ZXh0R3JhZGllbnQ7CisgICAgICAgICAgICAgICAgICAgIHZhciBsaWZlVGltZTEgPSBmYWN0b3JH
cmFkaWVudDEuZ2V0RmFjdG9yKCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBsaWZlVGltZTIg
PSBmYWN0b3JHcmFkaWVudDIuZ2V0RmFjdG9yKCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBn
cmFkaWVudCA9IChyYXRpb18xIC0gZmFjdG9yR3JhZGllbnQxLmdyYWRpZW50KSAvIChmYWN0b3JH
cmFkaWVudDIuZ3JhZGllbnQgLSBmYWN0b3JHcmFkaWVudDEuZ3JhZGllbnQpOworICAgICAgICAg
ICAgICAgICAgICBwYXJ0aWNsZS5saWZlVGltZSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5MZXJwKGxpZmVUaW1lMSwgbGlmZVRpbWUy
LCBncmFkaWVudCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZS5saWZlVGltZSA9IF9NYXRoc19t
YXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5SYW5kb21S
YW5nZSh0aGlzXzEubWluTGlmZVRpbWUsIHRoaXNfMS5tYXhMaWZlVGltZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBTaXplCisgICAgICAgICAgICBpZiAoIXRoaXNfMS5fc2l6ZUdy
YWRpZW50cyB8fCB0aGlzXzEuX3NpemVHcmFkaWVudHMubGVuZ3RoID09PSAwKSB7CisgICAgICAg
ICAgICAgICAgcGFydGljbGUuc2l6ZSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIiXS5SYW5kb21SYW5nZSh0aGlzXzEubWluU2l6ZSwgdGhp
c18xLm1heFNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRTaXplR3JhZGllbnQgPSB0aGlzXzEuX3NpemVHcmFk
aWVudHNbMF07CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRTaXplMSA9IHBhcnRp
Y2xlLl9jdXJyZW50U2l6ZUdyYWRpZW50LmdldEZhY3RvcigpOworICAgICAgICAgICAgICAgIHBh
cnRpY2xlLnNpemUgPSBwYXJ0aWNsZS5fY3VycmVudFNpemUxOworICAgICAgICAgICAgICAgIGlm
ICh0aGlzXzEuX3NpemVHcmFkaWVudHMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgICAg
ICBwYXJ0aWNsZS5fY3VycmVudFNpemUyID0gdGhpc18xLl9zaXplR3JhZGllbnRzWzFdLmdldEZh
Y3RvcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRTaXplMiA9IHBhcnRpY2xlLl9jdXJyZW50
U2l6ZTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
U2l6ZSBhbmQgc2NhbGUKKyAgICAgICAgICAgIHBhcnRpY2xlLnNjYWxlLmNvcHlGcm9tRmxvYXRz
KF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2FsYXIi
XS5SYW5kb21SYW5nZSh0aGlzXzEubWluU2NhbGVYLCB0aGlzXzEubWF4U2NhbGVYKSwgX01hdGhz
X21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjYWxhciJdLlJhbmRv
bVJhbmdlKHRoaXNfMS5taW5TY2FsZVksIHRoaXNfMS5tYXhTY2FsZVkpKTsKKyAgICAgICAgICAg
IC8vIEFkanVzdCBzY2FsZSBieSBzdGFydCBzaXplCisgICAgICAgICAgICBpZiAodGhpc18xLl9z
dGFydFNpemVHcmFkaWVudHMgJiYgdGhpc18xLl9zdGFydFNpemVHcmFkaWVudHNbMF0gJiYgdGhp
c18xLnRhcmdldFN0b3BEdXJhdGlvbikgeworICAgICAgICAgICAgICAgIHZhciByYXRpbyA9IHRo
aXNfMS5fYWN0dWFsRnJhbWUgLyB0aGlzXzEudGFyZ2V0U3RvcER1cmF0aW9uOworICAgICAgICAg
ICAgICAgIF9NaXNjX2dyYWRpZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJHcmFk
aWVudEhlbHBlciJdLkdldEN1cnJlbnRHcmFkaWVudChyYXRpbywgdGhpc18xLl9zdGFydFNpemVH
cmFkaWVudHMsIGZ1bmN0aW9uIChjdXJyZW50R3JhZGllbnQsIG5leHRHcmFkaWVudCwgc2NhbGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRHcmFkaWVudCAhPT0gX3RoaXMuX2N1
cnJlbnRTdGFydFNpemVHcmFkaWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMu
X2N1cnJlbnRTdGFydFNpemUxID0gX3RoaXMuX2N1cnJlbnRTdGFydFNpemUyOworICAgICAgICAg
ICAgICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnRTdGFydFNpemUyID0gbmV4dEdyYWRpZW50Lmdl
dEZhY3RvcigpOworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnRTdGFydFNp
emVHcmFkaWVudCA9IGN1cnJlbnRHcmFkaWVudDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfX1siU2NhbGFyIl0uTGVycChfdGhpcy5fY3VycmVudFN0YXJ0U2l6
ZTEsIF90aGlzLl9jdXJyZW50U3RhcnRTaXplMiwgc2NhbGUpOworICAgICAgICAgICAgICAgICAg
ICBwYXJ0aWNsZS5zY2FsZS5zY2FsZUluUGxhY2UodmFsdWUpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQW5nbGUKKyAgICAgICAgICAgIGlmICgh
dGhpc18xLl9hbmd1bGFyU3BlZWRHcmFkaWVudHMgfHwgdGhpc18xLl9hbmd1bGFyU3BlZWRHcmFk
aWVudHMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgcGFydGljbGUuYW5ndWxhclNw
ZWVkID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNj
YWxhciJdLlJhbmRvbVJhbmdlKHRoaXNfMS5taW5Bbmd1bGFyU3BlZWQsIHRoaXNfMS5tYXhBbmd1
bGFyU3BlZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgcGFydGljbGUuX2N1cnJlbnRBbmd1bGFyU3BlZWRHcmFkaWVudCA9IHRoaXNfMS5fYW5n
dWxhclNwZWVkR3JhZGllbnRzWzBdOworICAgICAgICAgICAgICAgIHBhcnRpY2xlLmFuZ3VsYXJT
cGVlZCA9IHBhcnRpY2xlLl9jdXJyZW50QW5ndWxhclNwZWVkR3JhZGllbnQuZ2V0RmFjdG9yKCk7
CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRBbmd1bGFyU3BlZWQxID0gcGFydGlj
bGUuYW5ndWxhclNwZWVkOworICAgICAgICAgICAgICAgIGlmICh0aGlzXzEuX2FuZ3VsYXJTcGVl
ZEdyYWRpZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9j
dXJyZW50QW5ndWxhclNwZWVkMiA9IHRoaXNfMS5fYW5ndWxhclNwZWVkR3JhZGllbnRzWzFdLmdl
dEZhY3RvcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRBbmd1bGFyU3BlZWQyID0gcGFydGlj
bGUuX2N1cnJlbnRBbmd1bGFyU3BlZWQxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHBhcnRpY2xlLmFuZ2xlID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKHRoaXNfMS5taW5J
bml0aWFsUm90YXRpb24sIHRoaXNfMS5tYXhJbml0aWFsUm90YXRpb24pOworICAgICAgICAgICAg
Ly8gVmVsb2NpdHkKKyAgICAgICAgICAgIGlmICh0aGlzXzEuX3ZlbG9jaXR5R3JhZGllbnRzICYm
IHRoaXNfMS5fdmVsb2NpdHlHcmFkaWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAg
IHBhcnRpY2xlLl9jdXJyZW50VmVsb2NpdHlHcmFkaWVudCA9IHRoaXNfMS5fdmVsb2NpdHlHcmFk
aWVudHNbMF07CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRWZWxvY2l0eTEgPSBw
YXJ0aWNsZS5fY3VycmVudFZlbG9jaXR5R3JhZGllbnQuZ2V0RmFjdG9yKCk7CisgICAgICAgICAg
ICAgICAgaWYgKHRoaXNfMS5fdmVsb2NpdHlHcmFkaWVudHMubGVuZ3RoID4gMSkgeworICAgICAg
ICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3VycmVudFZlbG9jaXR5MiA9IHRoaXNfMS5fdmVsb2Np
dHlHcmFkaWVudHNbMV0uZ2V0RmFjdG9yKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3VycmVudFZlbG9j
aXR5MiA9IHBhcnRpY2xlLl9jdXJyZW50VmVsb2NpdHkxOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIExpbWl0IHZlbG9jaXR5CisgICAgICAgICAgICBp
ZiAodGhpc18xLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzICYmIHRoaXNfMS5fbGltaXRWZWxvY2l0
eUdyYWRpZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJl
bnRMaW1pdFZlbG9jaXR5R3JhZGllbnQgPSB0aGlzXzEuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHNb
MF07CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnRMaW1pdFZlbG9jaXR5MSA9IHBh
cnRpY2xlLl9jdXJyZW50TGltaXRWZWxvY2l0eUdyYWRpZW50LmdldEZhY3RvcigpOworICAgICAg
ICAgICAgICAgIGlmICh0aGlzXzEuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHMubGVuZ3RoID4gMSkg
eworICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3VycmVudExpbWl0VmVsb2NpdHkyID0g
dGhpc18xLl9saW1pdFZlbG9jaXR5R3JhZGllbnRzWzFdLmdldEZhY3RvcigpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcGFy
dGljbGUuX2N1cnJlbnRMaW1pdFZlbG9jaXR5MiA9IHBhcnRpY2xlLl9jdXJyZW50TGltaXRWZWxv
Y2l0eTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
RHJhZworICAgICAgICAgICAgaWYgKHRoaXNfMS5fZHJhZ0dyYWRpZW50cyAmJiB0aGlzXzEuX2Ry
YWdHcmFkaWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9jdXJy
ZW50RHJhZ0dyYWRpZW50ID0gdGhpc18xLl9kcmFnR3JhZGllbnRzWzBdOworICAgICAgICAgICAg
ICAgIHBhcnRpY2xlLl9jdXJyZW50RHJhZzEgPSBwYXJ0aWNsZS5fY3VycmVudERyYWdHcmFkaWVu
dC5nZXRGYWN0b3IoKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpc18xLl9kcmFnR3JhZGllbnRz
Lmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJlbnREcmFn
MiA9IHRoaXNfMS5fZHJhZ0dyYWRpZW50c1sxXS5nZXRGYWN0b3IoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xl
Ll9jdXJyZW50RHJhZzIgPSBwYXJ0aWNsZS5fY3VycmVudERyYWcxOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENvbG9yCisgICAgICAgICAgICBpZiAo
IXRoaXNfMS5fY29sb3JHcmFkaWVudHMgfHwgdGhpc18xLl9jb2xvckdyYWRpZW50cy5sZW5ndGgg
PT09IDApIHsKKyAgICAgICAgICAgICAgICBzdGVwID0gX01hdGhzX21hdGhfc2NhbGFyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjYWxhciJdLlJhbmRvbVJhbmdlKDAsIDEuMCk7Cisg
ICAgICAgICAgICAgICAgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI0X19bIkNvbG9yNCJdLkxlcnBUb1JlZih0aGlzXzEuY29sb3IxLCB0aGlzXzEuY29sb3IyLCBz
dGVwLCBwYXJ0aWNsZS5jb2xvcik7CisgICAgICAgICAgICAgICAgdGhpc18xLmNvbG9yRGVhZC5z
dWJ0cmFjdFRvUmVmKHBhcnRpY2xlLmNvbG9yLCB0aGlzXzEuX2NvbG9yRGlmZik7CisgICAgICAg
ICAgICAgICAgdGhpc18xLl9jb2xvckRpZmYuc2NhbGVUb1JlZigxLjAgLyBwYXJ0aWNsZS5saWZl
VGltZSwgcGFydGljbGUuY29sb3JTdGVwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9jdXJyZW50Q29sb3JHcmFkaWVudCA9IHRo
aXNfMS5fY29sb3JHcmFkaWVudHNbMF07CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2N1cnJl
bnRDb2xvckdyYWRpZW50LmdldENvbG9yVG9SZWYocGFydGljbGUuY29sb3IpOworICAgICAgICAg
ICAgICAgIHBhcnRpY2xlLl9jdXJyZW50Q29sb3IxLmNvcHlGcm9tKHBhcnRpY2xlLmNvbG9yKTsK
KyAgICAgICAgICAgICAgICBpZiAodGhpc18xLl9jb2xvckdyYWRpZW50cy5sZW5ndGggPiAxKSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXNfMS5fY29sb3JHcmFkaWVudHNbMV0uZ2V0Q29sb3JU
b1JlZihwYXJ0aWNsZS5fY3VycmVudENvbG9yMik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fY3VycmVudENv
bG9yMi5jb3B5RnJvbShwYXJ0aWNsZS5jb2xvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gU2hlZXQKKyAgICAgICAgICAgIGlmICh0aGlzXzEuX2lz
QW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgcGFydGljbGUuX2luaXRp
YWxTdGFydFNwcml0ZUNlbGxJRCA9IHRoaXNfMS5zdGFydFNwcml0ZUNlbGxJRDsKKyAgICAgICAg
ICAgICAgICBwYXJ0aWNsZS5faW5pdGlhbEVuZFNwcml0ZUNlbGxJRCA9IHRoaXNfMS5lbmRTcHJp
dGVDZWxsSUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJbmhlcml0ZWQgVmVsb2Np
dHkKKyAgICAgICAgICAgIHBhcnRpY2xlLmRpcmVjdGlvbi5hZGRJblBsYWNlKHRoaXNfMS5faW5o
ZXJpdGVkVmVsb2NpdHlPZmZzZXQpOworICAgICAgICAgICAgLy8gUmFtcAorICAgICAgICAgICAg
aWYgKHRoaXNfMS5fdXNlUmFtcEdyYWRpZW50cykgeworICAgICAgICAgICAgICAgIHBhcnRpY2xl
LnJlbWFwRGF0YSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yNCJdKDAsIDEsIDAsIDEpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gTm9pc2UgdGV4dHVyZSBjb29yZGluYXRlcworICAgICAgICAgICAgaWYgKHRoaXNfMS5u
b2lzZVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFydGljbGUuX3JhbmRvbU5vaXNl
Q29vcmRpbmF0ZXMxKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9yYW5kb21Ob2lz
ZUNvb3JkaW5hdGVzMS5jb3B5RnJvbUZsb2F0cyhNYXRoLnJhbmRvbSgpLCBNYXRoLnJhbmRvbSgp
LCBNYXRoLnJhbmRvbSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuX3JhbmRvbU5v
aXNlQ29vcmRpbmF0ZXMyLmNvcHlGcm9tRmxvYXRzKE1hdGgucmFuZG9tKCksIE1hdGgucmFuZG9t
KCksIE1hdGgucmFuZG9tKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGUuX3JhbmRvbU5vaXNlQ29vcmRpbmF0
ZXMxID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJWZWN0b3IzIl0oTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20oKSk7
CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLl9yYW5kb21Ob2lzZUNvb3JkaW5hdGVzMiA9
IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMyJdKE1hdGgucmFuZG9tKCksIE1hdGgucmFuZG9tKCksIE1hdGgucmFuZG9tKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUg
cG9zaXRpb24gb2YgdGhlIGF0dGFjaGVkIHN1Yi1lbWl0dGVycyB0byBtYXRjaCB0aGVpciBhdHRh
Y2hlZCBwYXJ0aWNsZQorICAgICAgICAgICAgcGFydGljbGUuX2luaGVyaXRQYXJ0aWNsZUluZm9U
b1N1YkVtaXR0ZXJzKCk7CisgICAgICAgIH07CisgICAgICAgIHZhciB0aGlzXzEgPSB0aGlzLCBz
dGVwOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbmV3UGFydGljbGVzOyBp
bmRleCsrKSB7CisgICAgICAgICAgICB2YXIgc3RhdGVfMSA9IF9sb29wXzIoKTsKKyAgICAgICAg
ICAgIGlmIChzdGF0ZV8xID09PSAiYnJlYWsiKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBhcnRpY2xlU3lzdGVtLl9H
ZXRBdHRyaWJ1dGVOYW1lc09yT3B0aW9ucyA9IGZ1bmN0aW9uIChpc0FuaW1hdGlvblNoZWV0RW5h
YmxlZCwgaXNCaWxsYm9hcmRCYXNlZCwgdXNlUmFtcEdyYWRpZW50cykgeworICAgICAgICBpZiAo
aXNBbmltYXRpb25TaGVldEVuYWJsZWQgPT09IHZvaWQgMCkgeyBpc0FuaW1hdGlvblNoZWV0RW5h
YmxlZCA9IGZhbHNlOyB9CisgICAgICAgIGlmIChpc0JpbGxib2FyZEJhc2VkID09PSB2b2lkIDAp
IHsgaXNCaWxsYm9hcmRCYXNlZCA9IGZhbHNlOyB9CisgICAgICAgIGlmICh1c2VSYW1wR3JhZGll
bnRzID09PSB2b2lkIDApIHsgdXNlUmFtcEdyYWRpZW50cyA9IGZhbHNlOyB9CisgICAgICAgIHZh
ciBhdHRyaWJ1dGVOYW1lc09yT3B0aW9ucyA9IFtfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2lu
ZCwgImFuZ2xlIiwgIm9mZnNldCIsICJzaXplIl07CisgICAgICAgIGlmIChpc0FuaW1hdGlvblNo
ZWV0RW5hYmxlZCkgeworICAgICAgICAgICAgYXR0cmlidXRlTmFtZXNPck9wdGlvbnMucHVzaCgi
Y2VsbEluZGV4Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0JpbGxib2FyZEJhc2VkKSB7
CisgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lc09yT3B0aW9ucy5wdXNoKCJkaXJlY3Rpb24iKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodXNlUmFtcEdyYWRpZW50cykgeworICAgICAgICAgICAg
YXR0cmlidXRlTmFtZXNPck9wdGlvbnMucHVzaCgicmVtYXBEYXRhIik7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWVzT3JPcHRpb25zOworICAgIH07CisgICAgLyoqIEBo
aWRkZW4gKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5fR2V0RWZmZWN0Q3JlYXRpb25PcHRpb25zID0g
ZnVuY3Rpb24gKGlzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7CisgICAgICAgIGlmIChpc0FuaW1h
dGlvblNoZWV0RW5hYmxlZCA9PT0gdm9pZCAwKSB7IGlzQW5pbWF0aW9uU2hlZXRFbmFibGVkID0g
ZmFsc2U7IH0KKyAgICAgICAgdmFyIGVmZmVjdENyZWF0aW9uT3B0aW9uID0gWyJpbnZWaWV3Iiwg
InZpZXciLCAicHJvamVjdGlvbiIsICJ2Q2xpcFBsYW5lIiwgInZDbGlwUGxhbmUyIiwgInZDbGlw
UGxhbmUzIiwgInZDbGlwUGxhbmU0IiwgInRleHR1cmVNYXNrIiwgInRyYW5zbGF0aW9uUGl2b3Qi
LCAiZXllUG9zaXRpb24iXTsKKyAgICAgICAgaWYgKGlzQW5pbWF0aW9uU2hlZXRFbmFibGVkKSB7
CisgICAgICAgICAgICBlZmZlY3RDcmVhdGlvbk9wdGlvbi5wdXNoKCJwYXJ0aWNsZXNJbmZvcyIp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBlZmZlY3RDcmVhdGlvbk9wdGlvbjsKKyAgICB9
OworICAgIC8qKiBAaGlkZGVuICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9nZXRF
ZmZlY3QgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKSB7CisgICAgICAgIGlmICh0aGlzLl9jdXN0b21F
ZmZlY3QpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21FZmZlY3Q7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGRlZmluZXMgPSBbXTsKKyAgICAgICAgaWYgKHRoaXMuX3NjZW5lLmNs
aXBQbGFuZSkgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIENMSVBQTEFORSIp
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9zY2VuZS5jbGlwUGxhbmUyKSB7CisgICAg
ICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgQ0xJUFBMQU5FMiIpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9zY2VuZS5jbGlwUGxhbmUzKSB7CisgICAgICAgICAgICBkZWZpbmVz
LnB1c2goIiNkZWZpbmUgQ0xJUFBMQU5FMyIpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
Ll9zY2VuZS5jbGlwUGxhbmU0KSB7CisgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUg
Q0xJUFBMQU5FNCIpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGlvblNo
ZWV0RW5hYmxlZCkgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEFOSU1BVEVT
SEVFVCIpOworICAgICAgICB9CisgICAgICAgIGlmIChibGVuZE1vZGUgPT09IFBhcnRpY2xlU3lz
dGVtLkJMRU5ETU9ERV9NVUxUSVBMWSkgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVm
aW5lIEJMRU5ETVVMVElQTFlNT0RFIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Vz
ZVJhbXBHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBSQU1Q
R1JBRElFTlQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5faXNCaWxsYm9hcmRCYXNl
ZCkgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEJJTExCT0FSRCIpOworICAg
ICAgICAgICAgc3dpdGNoICh0aGlzLmJpbGxib2FyZE1vZGUpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFBhcnRpY2xlU3lzdGVtLkJJTExCT0FSRE1PREVfWToKKyAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEJJTExCT0FSRFkiKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBQYXJ0aWNsZVN5c3RlbS5CSUxMQk9BUkRNT0RF
X1NUUkVUQ0hFRDoKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEJJ
TExCT0FSRFNUUkVUQ0hFRCIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIFBhcnRpY2xlU3lzdGVtLkJJTExCT0FSRE1PREVfQUxMOgorICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0
aW9uKSB7CisgICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnBy
ZXBhcmVEZWZpbmVzKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25EZWZpbmVzKTsK
KyAgICAgICAgICAgIGRlZmluZXMucHVzaCh0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0
aW9uRGVmaW5lcy50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBFZmZlY3QKKyAg
ICAgICAgdmFyIGpvaW4gPSBkZWZpbmVzLmpvaW4oIlxuIik7CisgICAgICAgIGlmICh0aGlzLl9j
YWNoZWREZWZpbmVzICE9PSBqb2luKSB7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWREZWZpbmVz
ID0gam9pbjsKKyAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzTmFtZXNPck9wdGlvbnMgPSBQYXJ0
aWNsZVN5c3RlbS5fR2V0QXR0cmlidXRlTmFtZXNPck9wdGlvbnModGhpcy5faXNBbmltYXRpb25T
aGVldEVuYWJsZWQsIHRoaXMuX2lzQmlsbGJvYXJkQmFzZWQgJiYgdGhpcy5iaWxsYm9hcmRNb2Rl
ICE9PSBQYXJ0aWNsZVN5c3RlbS5CSUxMQk9BUkRNT0RFX1NUUkVUQ0hFRCwgdGhpcy5fdXNlUmFt
cEdyYWRpZW50cyk7CisgICAgICAgICAgICB2YXIgZWZmZWN0Q3JlYXRpb25PcHRpb24gPSBQYXJ0
aWNsZVN5c3RlbS5fR2V0RWZmZWN0Q3JlYXRpb25PcHRpb25zKHRoaXMuX2lzQW5pbWF0aW9uU2hl
ZXRFbmFibGVkKTsKKyAgICAgICAgICAgIHZhciBzYW1wbGVycyA9IFsiZGlmZnVzZVNhbXBsZXIi
LCAicmFtcFNhbXBsZXIiXTsKKyAgICAgICAgICAgIGlmIChfTWF0ZXJpYWxzX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siSW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbiJdKSB7CisgICAgICAgICAgICAgICAgX01hdGVyaWFsc19pbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIklt
YWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iXS5QcmVwYXJlVW5pZm9ybXMoZWZmZWN0Q3JlYXRp
b25PcHRpb24sIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25EZWZpbmVzKTsKKyAg
ICAgICAgICAgICAgICBfTWF0ZXJpYWxzX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiJd
LlByZXBhcmVTYW1wbGVycyhzYW1wbGVycywgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbkRlZmluZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZWZmZWN0ID0g
dGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlRWZmZWN0KCJwYXJ0aWNsZXMiLCBhdHRyaWJ1
dGVzTmFtZXNPck9wdGlvbnMsIGVmZmVjdENyZWF0aW9uT3B0aW9uLCBzYW1wbGVycywgam9pbik7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2VmZmVjdDsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEFuaW1hdGVzIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gZm9yIHRoZSBjdXJyZW50IGZy
YW1lIGJ5IGVtaXR0aW5nIG5ldyBwYXJ0aWNsZXMgYW5kIG9yIGFuaW1hdGluZyB0aGUgbGl2aW5n
IG9uZXMuCisgICAgICogQHBhcmFtIHByZVdhcm1Pbmx5IHdpbGwgcHJldmVudCB0aGUgc3lzdGVt
IGZyb20gdXBkYXRpbmcgdGhlIHZlcnRleCBidWZmZXIgKGRlZmF1bHQgaXMgZmFsc2UpCisgICAg
ICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmFuaW1hdGUgPSBmdW5jdGlvbiAocHJl
V2FybU9ubHkpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKHByZVdh
cm1Pbmx5ID09PSB2b2lkIDApIHsgcHJlV2FybU9ubHkgPSBmYWxzZTsgfQorICAgICAgICBpZiAo
IXRoaXMuX3N0YXJ0ZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIXByZVdhcm1Pbmx5KSB7CisgICAgICAgICAgICAvLyBDaGVjaworICAgICAgICAgICAg
aWYgKCF0aGlzLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50UmVuZGVySWQgPT09IHRoaXMuX3Nj
ZW5lLmdldEZyYW1lSWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRSZW5kZXJJZCA9IHRoaXMuX3NjZW5lLmdldEZy
YW1lSWQoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zY2FsZWRVcGRhdGVTcGVlZCA9IHRo
aXMudXBkYXRlU3BlZWQgKiAocHJlV2FybU9ubHkgPyB0aGlzLnByZVdhcm1TdGVwT2Zmc2V0IDog
dGhpcy5fc2NlbmUuZ2V0QW5pbWF0aW9uUmF0aW8oKSk7CisgICAgICAgIC8vIERldGVybWluZSB0
aGUgbnVtYmVyIG9mIHBhcnRpY2xlcyB3ZSBuZWVkIHRvIGNyZWF0ZQorICAgICAgICB2YXIgbmV3
UGFydGljbGVzOworICAgICAgICBpZiAodGhpcy5tYW51YWxFbWl0Q291bnQgPiAtMSkgeworICAg
ICAgICAgICAgbmV3UGFydGljbGVzID0gdGhpcy5tYW51YWxFbWl0Q291bnQ7CisgICAgICAgICAg
ICB0aGlzLl9uZXdQYXJ0c0V4Y2VzcyA9IDA7CisgICAgICAgICAgICB0aGlzLm1hbnVhbEVtaXRD
b3VudCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgcmF0
ZV8xID0gdGhpcy5lbWl0UmF0ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9lbWl0UmF0ZUdyYWRp
ZW50cyAmJiB0aGlzLl9lbWl0UmF0ZUdyYWRpZW50cy5sZW5ndGggPiAwICYmIHRoaXMudGFyZ2V0
U3RvcER1cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdmFyIHJhdGlvID0gdGhpcy5fYWN0dWFs
RnJhbWUgLyB0aGlzLnRhcmdldFN0b3BEdXJhdGlvbjsKKyAgICAgICAgICAgICAgICBfTWlzY19n
cmFkaWVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siR3JhZGllbnRIZWxwZXIiXS5H
ZXRDdXJyZW50R3JhZGllbnQocmF0aW8sIHRoaXMuX2VtaXRSYXRlR3JhZGllbnRzLCBmdW5jdGlv
biAoY3VycmVudEdyYWRpZW50LCBuZXh0R3JhZGllbnQsIHNjYWxlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjdXJyZW50R3JhZGllbnQgIT09IF90aGlzLl9jdXJyZW50RW1pdFJhdGVHcmFk
aWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnRFbWl0UmF0ZTEg
PSBfdGhpcy5fY3VycmVudEVtaXRSYXRlMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlz
Ll9jdXJyZW50RW1pdFJhdGUyID0gbmV4dEdyYWRpZW50LmdldEZhY3RvcigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnRFbWl0UmF0ZUdyYWRpZW50ID0gY3VycmVudEdy
YWRpZW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJhdGVf
MSA9IF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2Fs
YXIiXS5MZXJwKF90aGlzLl9jdXJyZW50RW1pdFJhdGUxLCBfdGhpcy5fY3VycmVudEVtaXRSYXRl
Miwgc2NhbGUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbmV3UGFydGljbGVzID0gKChyYXRlXzEgKiB0aGlzLl9zY2FsZWRVcGRhdGVTcGVlZCkgPj4g
MCk7CisgICAgICAgICAgICB0aGlzLl9uZXdQYXJ0c0V4Y2VzcyArPSByYXRlXzEgKiB0aGlzLl9z
Y2FsZWRVcGRhdGVTcGVlZCAtIG5ld1BhcnRpY2xlczsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fbmV3UGFydHNFeGNlc3MgPiAxLjApIHsKKyAgICAgICAgICAgIG5ld1BhcnRpY2xlcyAr
PSB0aGlzLl9uZXdQYXJ0c0V4Y2VzcyA+PiAwOworICAgICAgICAgICAgdGhpcy5fbmV3UGFydHNF
eGNlc3MgLT0gdGhpcy5fbmV3UGFydHNFeGNlc3MgPj4gMDsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9hbGl2ZSA9IGZhbHNlOworICAgICAgICBpZiAoIXRoaXMuX3N0b3BwZWQpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2FjdHVhbEZyYW1lICs9IHRoaXMuX3NjYWxlZFVwZGF0ZVNwZWVkOworICAg
ICAgICAgICAgaWYgKHRoaXMudGFyZ2V0U3RvcER1cmF0aW9uICYmIHRoaXMuX2FjdHVhbEZyYW1l
ID49IHRoaXMudGFyZ2V0U3RvcER1cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zdG9w
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBuZXdQYXJ0aWNsZXMgPSAwOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZShuZXdQ
YXJ0aWNsZXMpOworICAgICAgICAvLyBTdG9wcGVkPworICAgICAgICBpZiAodGhpcy5fc3RvcHBl
ZCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9hbGl2ZSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX3N0YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5vbkFuaW1hdGlv
bkVuZCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQW5pbWF0aW9uRW5kKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpc3Bvc2VPblN0b3ApIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuX3RvQmVEaXNwb3NlZC5wdXNoKHRoaXMp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXByZVdhcm1Pbmx5KSB7CisgICAgICAgICAgICAvLyBVcGRhdGUgVkJPCisgICAgICAgICAg
ICB2YXIgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFy
IHBhcnRpY2xlID0gdGhpcy5fcGFydGljbGVzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9hcHBlbmRQYXJ0aWNsZVZlcnRpY2VzKG9mZnNldCwgcGFydGljbGUpOworICAgICAgICAgICAg
ICAgIG9mZnNldCArPSB0aGlzLl91c2VJbnN0YW5jaW5nID8gMSA6IDQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodGhpcy5fdmVydGV4QnVmZmVyKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fdmVydGV4QnVmZmVyLnVwZGF0ZSh0aGlzLl92ZXJ0ZXhEYXRhKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5tYW51YWxFbWl0Q291bnQgPT09IDAgJiYg
dGhpcy5kaXNwb3NlT25TdG9wKSB7CisgICAgICAgICAgICB0aGlzLnN0b3AoKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9hcHBlbmRQYXJ0aWNsZVZl
cnRpY2VzID0gZnVuY3Rpb24gKG9mZnNldCwgcGFydGljbGUpIHsKKyAgICAgICAgdGhpcy5fYXBw
ZW5kUGFydGljbGVWZXJ0ZXgob2Zmc2V0KyssIHBhcnRpY2xlLCAwLCAwKTsKKyAgICAgICAgaWYg
KCF0aGlzLl91c2VJbnN0YW5jaW5nKSB7CisgICAgICAgICAgICB0aGlzLl9hcHBlbmRQYXJ0aWNs
ZVZlcnRleChvZmZzZXQrKywgcGFydGljbGUsIDEsIDApOworICAgICAgICAgICAgdGhpcy5fYXBw
ZW5kUGFydGljbGVWZXJ0ZXgob2Zmc2V0KyssIHBhcnRpY2xlLCAxLCAxKTsKKyAgICAgICAgICAg
IHRoaXMuX2FwcGVuZFBhcnRpY2xlVmVydGV4KG9mZnNldCsrLCBwYXJ0aWNsZSwgMCwgMSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlYnVpbGRzIHRoZSBwYXJ0aWNsZSBz
eXN0ZW0uCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLnJlYnVpbGQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2NyZWF0ZUluZGV4QnVmZmVyKCk7CisgICAgICAg
IGlmICh0aGlzLl92ZXJ0ZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZl
ci5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl92
ZXJ0ZXhCdWZmZXJzKSB7CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzW2tleV0uX3Jl
YnVpbGQoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogSXMgdGhpcyBzeXN0
ZW0gcmVhZHkgdG8gYmUgdXNlZC9yZW5kZXJlZAorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUg
c3lzdGVtIGlzIHJlYWR5CisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLmlz
UmVhZHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5lbWl0dGVyIHx8ICF0aGlz
Ll9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmlzUmVhZHkoKSB8fCAhdGhpcy5wYXJ0aWNs
ZVRleHR1cmUgfHwgIXRoaXMucGFydGljbGVUZXh0dXJlLmlzUmVhZHkoKSkgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmJsZW5kTW9kZSAh
PT0gUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX01VTFRJUExZQUREKSB7CisgICAgICAgICAgICBp
ZiAoIXRoaXMuX2dldEVmZmVjdCh0aGlzLmJsZW5kTW9kZSkuaXNSZWFkeSgpKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9nZXRFZmZlY3QoUGFydGljbGVTeXN0ZW0u
QkxFTkRNT0RFX01VTFRJUExZKS5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXRoaXMuX2dldEVmZmVjdChQ
YXJ0aWNsZVN5c3RlbS5CTEVORE1PREVfQUREKS5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfTsKKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX3JlbmRlciA9IGZ1
bmN0aW9uIChibGVuZE1vZGUpIHsKKyAgICAgICAgdmFyIGVmZmVjdCA9IHRoaXMuX2dldEVmZmVj
dChibGVuZE1vZGUpOworICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5l
KCk7CisgICAgICAgIC8vIFJlbmRlcgorICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KGVmZmVj
dCk7CisgICAgICAgIHZhciB2aWV3TWF0cml4ID0gdGhpcy5fc2NlbmUuZ2V0Vmlld01hdHJpeCgp
OworICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgiZGlmZnVzZVNhbXBsZXIiLCB0aGlzLnBhcnRp
Y2xlVGV4dHVyZSk7CisgICAgICAgIGVmZmVjdC5zZXRNYXRyaXgoInZpZXciLCB2aWV3TWF0cml4
KTsKKyAgICAgICAgZWZmZWN0LnNldE1hdHJpeCgicHJvamVjdGlvbiIsIHRoaXMuX3NjZW5lLmdl
dFByb2plY3Rpb25NYXRyaXgoKSk7CisgICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGlvblNoZWV0
RW5hYmxlZCAmJiB0aGlzLnBhcnRpY2xlVGV4dHVyZSkgeworICAgICAgICAgICAgdmFyIGJhc2VT
aXplID0gdGhpcy5wYXJ0aWNsZVRleHR1cmUuZ2V0QmFzZVNpemUoKTsKKyAgICAgICAgICAgIGVm
ZmVjdC5zZXRGbG9hdDMoInBhcnRpY2xlc0luZm9zIiwgdGhpcy5zcHJpdGVDZWxsV2lkdGggLyBi
YXNlU2l6ZS53aWR0aCwgdGhpcy5zcHJpdGVDZWxsSGVpZ2h0IC8gYmFzZVNpemUuaGVpZ2h0LCBi
YXNlU2l6ZS53aWR0aCAvIHRoaXMuc3ByaXRlQ2VsbFdpZHRoKTsKKyAgICAgICAgfQorICAgICAg
ICBlZmZlY3Quc2V0VmVjdG9yMigidHJhbnNsYXRpb25QaXZvdCIsIHRoaXMudHJhbnNsYXRpb25Q
aXZvdCk7CisgICAgICAgIGVmZmVjdC5zZXRGbG9hdDQoInRleHR1cmVNYXNrIiwgdGhpcy50ZXh0
dXJlTWFzay5yLCB0aGlzLnRleHR1cmVNYXNrLmcsIHRoaXMudGV4dHVyZU1hc2suYiwgdGhpcy50
ZXh0dXJlTWFzay5hKTsKKyAgICAgICAgaWYgKHRoaXMuX2lzQmlsbGJvYXJkQmFzZWQpIHsKKyAg
ICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmE7CisgICAgICAg
ICAgICBlZmZlY3Quc2V0VmVjdG9yMygiZXllUG9zaXRpb24iLCBjYW1lcmEuZ2xvYmFsUG9zaXRp
b24pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9yYW1wR3JhZGllbnRzVGV4dHVyZSkg
eworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInJhbXBTYW1wbGVyIiwgdGhpcy5fcmFt
cEdyYWRpZW50c1RleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9zY2VuZS5j
bGlwUGxhbmUgfHwgdGhpcy5fc2NlbmUuY2xpcFBsYW5lMiB8fCB0aGlzLl9zY2VuZS5jbGlwUGxh
bmUzIHx8IHRoaXMuX3NjZW5lLmNsaXBQbGFuZTQpIHsKKyAgICAgICAgICAgIHZhciBpbnZWaWV3
ID0gdmlld01hdHJpeC5jbG9uZSgpOworICAgICAgICAgICAgaW52Vmlldy5pbnZlcnQoKTsKKyAg
ICAgICAgICAgIGVmZmVjdC5zZXRNYXRyaXgoImludlZpZXciLCBpbnZWaWV3KTsKKyAgICAgICAg
ICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
X1siTWF0ZXJpYWxIZWxwZXIiXS5CaW5kQ2xpcFBsYW5lKGVmZmVjdCwgdGhpcy5fc2NlbmUpOwor
ICAgICAgICB9CisgICAgICAgIGVuZ2luZS5iaW5kQnVmZmVycyh0aGlzLl92ZXJ0ZXhCdWZmZXJz
LCB0aGlzLl9pbmRleEJ1ZmZlciwgZWZmZWN0KTsKKyAgICAgICAgLy8gaW1hZ2UgcHJvY2Vzc2lu
ZworICAgICAgICBpZiAodGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiAmJiAhdGhp
cy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5hcHBseUJ5UG9zdFByb2Nlc3MpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uYmluZChlZmZlY3Qp
OworICAgICAgICB9CisgICAgICAgIC8vIERyYXcgb3JkZXIKKyAgICAgICAgc3dpdGNoIChibGVu
ZE1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX0FERDoK
KyAgICAgICAgICAgICAgICBlbmdpbmUuc2V0QWxwaGFNb2RlKF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siQ29uc3RhbnRzIl0uQUxQSEFfQUREKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUGFydGljbGVTeXN0ZW0uQkxF
TkRNT0RFX09ORU9ORToKKyAgICAgICAgICAgICAgICBlbmdpbmUuc2V0QWxwaGFNb2RlKF9Fbmdp
bmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siQ29uc3RhbnRzIl0u
QUxQSEFfT05FT05FKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
UGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX1NUQU5EQVJEOgorICAgICAgICAgICAgICAgIGVuZ2lu
ZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xOF9fWyJDb25zdGFudHMiXS5BTFBIQV9DT01CSU5FKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX01VTFRJUExZOgor
ICAgICAgICAgICAgICAgIGVuZ2luZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJDb25zdGFudHMiXS5BTFBIQV9NVUxUSVBMWSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Vz
ZUluc3RhbmNpbmcpIHsKKyAgICAgICAgICAgIGVuZ2luZS5kcmF3QXJyYXlzVHlwZShfTWF0ZXJp
YWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsIl0uVHJp
YW5nbGVGYW5EcmF3TW9kZSwgMCwgNCwgdGhpcy5fcGFydGljbGVzLmxlbmd0aCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbmdpbmUuZHJhd0VsZW1lbnRzVHlwZShf
TWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFs
Il0uVHJpYW5nbGVGaWxsTW9kZSwgMCwgdGhpcy5fcGFydGljbGVzLmxlbmd0aCAqIDYpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmVuZGVycyB0aGUgcGFydGljbGUgc3lzdGVtIGluIGl0cyBjdXJyZW50
IHN0YXRlLgorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG51bWJlciBvZiBwYXJ0aWNsZXMK
KyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAvLyBDaGVjaworICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSgpIHx8ICF0
aGlzLl9wYXJ0aWNsZXMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAg
IGVuZ2luZS5zZXRTdGF0ZShmYWxzZSk7CisgICAgICAgIGlmICh0aGlzLmZvcmNlRGVwdGhXcml0
ZSkgeworICAgICAgICAgICAgZW5naW5lLnNldERlcHRoV3JpdGUodHJ1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIG91dHBhcnRpY2xlcyA9IDA7CisgICAgICAgIGlmICh0aGlzLmJsZW5kTW9k
ZSA9PT0gUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX01VTFRJUExZQUREKSB7CisgICAgICAgICAg
ICBvdXRwYXJ0aWNsZXMgPSB0aGlzLl9yZW5kZXIoUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX01V
TFRJUExZKSArIHRoaXMuX3JlbmRlcihQYXJ0aWNsZVN5c3RlbS5CTEVORE1PREVfQUREKTsKKyAg
ICAgICAgfQorICAgICAgICBvdXRwYXJ0aWNsZXMgPSB0aGlzLl9yZW5kZXIodGhpcy5ibGVuZE1v
ZGUpOworICAgICAgICBlbmdpbmUudW5iaW5kSW5zdGFuY2VBdHRyaWJ1dGVzKCk7CisgICAgICAg
IGVuZ2luZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xOF9fWyJDb25zdGFudHMiXS5BTFBIQV9ESVNBQkxFKTsKKyAgICAgICAgcmV0dXJu
IG91dHBhcnRpY2xlczsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBwYXJ0
aWNsZSBzeXN0ZW0gYW5kIGZyZWUgdGhlIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgICAgICogQHBh
cmFtIGRpc3Bvc2VUZXh0dXJlIGRlZmluZXMgaWYgdGhlIHBhcnRpY3VsZSB0ZXh0dXJlIG11c3Qg
YmUgZGlzcG9zZWQgYXMgd2VsbCAodHJ1ZSBieSBkZWZhdWx0KQorICAgICAqLworICAgIFBhcnRp
Y2xlU3lzdGVtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGRpc3Bvc2VUZXh0dXJlKSB7
CisgICAgICAgIGlmIChkaXNwb3NlVGV4dHVyZSA9PT0gdm9pZCAwKSB7IGRpc3Bvc2VUZXh0dXJl
ID0gdHJ1ZTsgfQorICAgICAgICBpZiAodGhpcy5fdmVydGV4QnVmZmVyKSB7CisgICAgICAgICAg
ICB0aGlzLl92ZXJ0ZXhCdWZmZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fdmVydGV4
QnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fc3ByaXRlQnVmZmVy
KSB7CisgICAgICAgICAgICB0aGlzLl9zcHJpdGVCdWZmZXIuZGlzcG9zZSgpOworICAgICAgICAg
ICAgdGhpcy5fc3ByaXRlQnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy5faW5kZXhCdWZmZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLl9y
ZWxlYXNlQnVmZmVyKHRoaXMuX2luZGV4QnVmZmVyKTsKKyAgICAgICAgICAgIHRoaXMuX2luZGV4
QnVmZmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGlzcG9zZVRleHR1cmUgJiYg
dGhpcy5wYXJ0aWNsZVRleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMucGFydGljbGVUZXh0dXJl
LmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMucGFydGljbGVUZXh0dXJlID0gbnVsbDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZGlzcG9zZVRleHR1cmUgJiYgdGhpcy5ub2lzZVRleHR1cmUp
IHsKKyAgICAgICAgICAgIHRoaXMubm9pc2VUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAg
IHRoaXMubm9pc2VUZXh0dXJlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5f
cmFtcEdyYWRpZW50c1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3JhbXBHcmFkaWVudHNU
ZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX3JhbXBHcmFkaWVudHNUZXh0dXJl
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9yZW1vdmVGcm9tUm9vdCgpOworICAg
ICAgICBpZiAodGhpcy5fc3ViRW1pdHRlcnMgJiYgdGhpcy5fc3ViRW1pdHRlcnMubGVuZ3RoKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fc3ViRW1pdHRl
cnMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBf
YSA9IHRoaXMuX3N1YkVtaXR0ZXJzW2luZGV4XTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHN1YkVtaXR0ZXIgPSBfYVtfaV07CisgICAgICAgICAgICAg
ICAgICAgIHN1YkVtaXR0ZXIuZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3N1YkVtaXR0ZXJzID0gW107CisgICAgICAgICAgICB0
aGlzLnN1YkVtaXR0ZXJzID0gW107CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2Rpc3Bv
c2VFbWl0dGVyT25EaXNwb3NlICYmIHRoaXMuZW1pdHRlciAmJiB0aGlzLmVtaXR0ZXIuZGlzcG9z
ZSkgeworICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmRpc3Bvc2UodHJ1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgLy8gUmVtb3ZlIGZyb20gc2NlbmUKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5f
c2NlbmUucGFydGljbGVTeXN0ZW1zLmluZGV4T2YodGhpcyk7CisgICAgICAgIGlmIChpbmRleCA+
IC0xKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5wYXJ0aWNsZVN5c3RlbXMuc3BsaWNlKGlu
ZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zY2VuZS5fYWN0aXZlUGFydGljbGVT
eXN0ZW1zLmRpc3Bvc2UoKTsKKyAgICAgICAgLy8gQ2FsbGJhY2sKKyAgICAgICAgdGhpcy5vbkRp
c3Bvc2VPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgdGhpcy5vbkRp
c3Bvc2VPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICB9Owor
ICAgIC8vIENsb25lCisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBwYXJ0aWNsZSBzeXN0ZW0u
CisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsb25lZCBvYmplY3QKKyAgICAg
KiBAcGFyYW0gbmV3RW1pdHRlciBUaGUgbmV3IGVtaXR0ZXIgdG8gdXNlCisgICAgICogQHJldHVy
bnMgdGhlIGNsb25lZCBwYXJ0aWNsZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3Rl
bS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAobmFtZSwgbmV3RW1pdHRlcikgeworICAgICAg
ICB2YXIgY3VzdG9tID0gbnVsbDsKKyAgICAgICAgdmFyIHByb2dyYW0gPSBudWxsOworICAgICAg
ICBpZiAodGhpcy5jdXN0b21TaGFkZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgcHJvZ3JhbSA9
IHRoaXMuY3VzdG9tU2hhZGVyOworICAgICAgICAgICAgdmFyIGRlZmluZXMgPSAocHJvZ3JhbS5z
aGFkZXJPcHRpb25zLmRlZmluZXMubGVuZ3RoID4gMCkgPyBwcm9ncmFtLnNoYWRlck9wdGlvbnMu
ZGVmaW5lcy5qb2luKCJcbiIpIDogIiI7CisgICAgICAgICAgICBjdXN0b20gPSB0aGlzLl9zY2Vu
ZS5nZXRFbmdpbmUoKS5jcmVhdGVFZmZlY3RGb3JQYXJ0aWNsZXMocHJvZ3JhbS5zaGFkZXJQYXRo
LmZyYWdtZW50RWxlbWVudCwgcHJvZ3JhbS5zaGFkZXJPcHRpb25zLnVuaWZvcm1zLCBwcm9ncmFt
LnNoYWRlck9wdGlvbnMuc2FtcGxlcnMsIGRlZmluZXMpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKHRoaXMuX2N1c3RvbUVmZmVjdCkgeworICAgICAgICAgICAgY3VzdG9tID0gdGhpcy5f
Y3VzdG9tRWZmZWN0OworICAgICAgICB9CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgUGFydGlj
bGVTeXN0ZW0obmFtZSwgdGhpcy5fY2FwYWNpdHksIHRoaXMuX3NjZW5lLCBjdXN0b20pOworICAg
ICAgICByZXN1bHQuY3VzdG9tU2hhZGVyID0gcHJvZ3JhbTsKKyAgICAgICAgX01pc2NfZGVlcENv
cGllcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siRGVlcENvcGllciJdLkRlZXBDb3B5
KHRoaXMsIHJlc3VsdCwgWyJwYXJ0aWNsZXMiLCAiY3VzdG9tU2hhZGVyIiwgIm5vaXNlVGV4dHVy
ZSIsICJwYXJ0aWNsZVRleHR1cmUiLCAib25EaXNwb3NlT2JzZXJ2YWJsZSJdKTsKKyAgICAgICAg
aWYgKG5ld0VtaXR0ZXIgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgbmV3RW1pdHRlciA9
IHRoaXMuZW1pdHRlcjsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQubm9pc2VUZXh0dXJlID0g
dGhpcy5ub2lzZVRleHR1cmU7CisgICAgICAgIHJlc3VsdC5lbWl0dGVyID0gbmV3RW1pdHRlcjsK
KyAgICAgICAgaWYgKHRoaXMucGFydGljbGVUZXh0dXJlKSB7CisgICAgICAgICAgICByZXN1bHQu
cGFydGljbGVUZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTBfX1siVGV4dHVyZSJdKHRoaXMucGFydGljbGVUZXh0dXJlLnVy
bCwgdGhpcy5fc2NlbmUpOworICAgICAgICB9CisgICAgICAgIC8vIENsb25lIGdyYWRpZW50cwor
ICAgICAgICBpZiAodGhpcy5fY29sb3JHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2Nv
bG9yR3JhZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICByZXN1
bHQuYWRkQ29sb3JHcmFkaWVudCh2LmdyYWRpZW50LCB2LmNvbG9yMSwgdi5jb2xvcjIpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2RyYWdHcmFkaWVudHMp
IHsKKyAgICAgICAgICAgIHRoaXMuX2RyYWdHcmFkaWVudHMuZm9yRWFjaChmdW5jdGlvbiAodikg
eworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGREcmFnR3JhZGllbnQodi5ncmFkaWVudCwgdi5m
YWN0b3IxLCB2LmZhY3RvcjIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX2FuZ3VsYXJTcGVlZEdyYWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fYW5n
dWxhclNwZWVkR3JhZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYWRkQW5ndWxhclNwZWVkR3JhZGllbnQodi5ncmFkaWVudCwgdi5mYWN0b3IxLCB2
LmZhY3RvcjIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X2VtaXRSYXRlR3JhZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl9lbWl0UmF0ZUdyYWRpZW50
cy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVtaXRS
YXRlR3JhZGllbnQodi5ncmFkaWVudCwgdi5mYWN0b3IxLCB2LmZhY3RvcjIpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xpZmVUaW1lR3JhZGllbnRzKSB7
CisgICAgICAgICAgICB0aGlzLl9saWZlVGltZUdyYWRpZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh2
KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZExpZmVUaW1lR3JhZGllbnQodi5ncmFkaWVu
dCwgdi5mYWN0b3IxLCB2LmZhY3RvcjIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRo
aXMuX2xpbWl0VmVsb2NpdHlHcmFkaWVudHMuZm9yRWFjaChmdW5jdGlvbiAodikgeworICAgICAg
ICAgICAgICAgIHJlc3VsdC5hZGRMaW1pdFZlbG9jaXR5R3JhZGllbnQodi5ncmFkaWVudCwgdi5m
YWN0b3IxLCB2LmZhY3RvcjIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX3NpemVHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX3NpemVHcmFkaWVu
dHMuZm9yRWFjaChmdW5jdGlvbiAodikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTaXpl
R3JhZGllbnQodi5ncmFkaWVudCwgdi5mYWN0b3IxLCB2LmZhY3RvcjIpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3N0YXJ0U2l6ZUdyYWRpZW50cykgewor
ICAgICAgICAgICAgdGhpcy5fc3RhcnRTaXplR3JhZGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHYp
IHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3RhcnRTaXplR3JhZGllbnQodi5ncmFkaWVu
dCwgdi5mYWN0b3IxLCB2LmZhY3RvcjIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuX3ZlbG9jaXR5R3JhZGllbnRzKSB7CisgICAgICAgICAgICB0aGlzLl92
ZWxvY2l0eUdyYWRpZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAgICAgICAg
cmVzdWx0LmFkZFZlbG9jaXR5R3JhZGllbnQodi5ncmFkaWVudCwgdi5mYWN0b3IxLCB2LmZhY3Rv
cjIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3JhbXBH
cmFkaWVudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX3JhbXBHcmFkaWVudHMuZm9yRWFjaChmdW5j
dGlvbiAodikgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRSYW1wR3JhZGllbnQodi5ncmFk
aWVudCwgdi5jb2xvcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fY29sb3JSZW1hcEdyYWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fY29sb3JSZW1h
cEdyYWRpZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0
LmFkZENvbG9yUmVtYXBHcmFkaWVudCh2LmdyYWRpZW50LCB2LmZhY3RvcjEsIHYuZmFjdG9yMik7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fYWxwaGFSZW1h
cEdyYWRpZW50cykgeworICAgICAgICAgICAgdGhpcy5fYWxwaGFSZW1hcEdyYWRpZW50cy5mb3JF
YWNoKGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEFscGhhUmVtYXBH
cmFkaWVudCh2LmdyYWRpZW50LCB2LmZhY3RvcjEsIHYuZmFjdG9yMik7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMucHJldmVudEF1dG9TdGFydCkgeworICAg
ICAgICAgICAgcmVzdWx0LnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXMgdGhlIHBhcnRpY2xlIHN5c3Rl
bSB0byBhIEpTT04gb2JqZWN0LgorICAgICAqIEByZXR1cm5zIHRoZSBKU09OIG9iamVjdAorICAg
ICAqLworICAgIFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uT2JqZWN0ID0ge307CisgICAgICAgIFBhcnRp
Y2xlU3lzdGVtLl9TZXJpYWxpemUoc2VyaWFsaXphdGlvbk9iamVjdCwgdGhpcyk7CisgICAgICAg
IHNlcmlhbGl6YXRpb25PYmplY3QudGV4dHVyZU1hc2sgPSB0aGlzLnRleHR1cmVNYXNrLmFzQXJy
YXkoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21TaGFkZXIgPSB0aGlzLmN1
c3RvbVNoYWRlcjsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5wcmV2ZW50QXV0b1N0YXJ0
ID0gdGhpcy5wcmV2ZW50QXV0b1N0YXJ0OworICAgICAgICAvLyBTdWJFbWl0dGVycworICAgICAg
ICBpZiAodGhpcy5zdWJFbWl0dGVycykgeworICAgICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVj
dC5zdWJFbWl0dGVycyA9IFtdOworICAgICAgICAgICAgaWYgKCF0aGlzLl9zdWJFbWl0dGVycykg
eworICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTdWJFbWl0dGVySW50ZXJuYWxBcnJheSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMu
X3N1YkVtaXR0ZXJzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZh
ciBzdWJzID0gX2FbX2ldOworICAgICAgICAgICAgICAgIHZhciBjZWxsID0gW107CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBzdWJzXzEgPSBzdWJzOyBfYiA8IHN1YnNfMS5sZW5n
dGg7IF9iKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN1YiA9IHN1YnNfMVtfYl07Cisg
ICAgICAgICAgICAgICAgICAgIGNlbGwucHVzaChzdWIuc2VyaWFsaXplKCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnN1YkVtaXR0ZXJz
LnB1c2goY2VsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBhcnRp
Y2xlU3lzdGVtLl9TZXJpYWxpemUgPSBmdW5jdGlvbiAoc2VyaWFsaXphdGlvbk9iamVjdCwgcGFy
dGljbGVTeXN0ZW0pIHsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5uYW1lID0gcGFydGlj
bGVTeXN0ZW0ubmFtZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5pZCA9IHBhcnRpY2xl
U3lzdGVtLmlkOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNhcGFjaXR5ID0gcGFydGlj
bGVTeXN0ZW0uZ2V0Q2FwYWNpdHkoKTsKKyAgICAgICAgLy8gRW1pdHRlcgorICAgICAgICBpZiAo
cGFydGljbGVTeXN0ZW0uZW1pdHRlci5wb3NpdGlvbikgeworICAgICAgICAgICAgdmFyIGVtaXR0
ZXJNZXNoID0gcGFydGljbGVTeXN0ZW0uZW1pdHRlcjsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRp
b25PYmplY3QuZW1pdHRlcklkID0gZW1pdHRlck1lc2guaWQ7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICB2YXIgZW1pdHRlclBvc2l0aW9uID0gcGFydGljbGVTeXN0ZW0u
ZW1pdHRlcjsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuZW1pdHRlciA9IGVtaXR0
ZXJQb3NpdGlvbi5hc0FycmF5KCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRW1pdHRlcgorICAg
ICAgICBpZiAocGFydGljbGVTeXN0ZW0ucGFydGljbGVFbWl0dGVyVHlwZSkgeworICAgICAgICAg
ICAgc2VyaWFsaXphdGlvbk9iamVjdC5wYXJ0aWNsZUVtaXR0ZXJUeXBlID0gcGFydGljbGVTeXN0
ZW0ucGFydGljbGVFbWl0dGVyVHlwZS5zZXJpYWxpemUoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocGFydGljbGVTeXN0ZW0ucGFydGljbGVUZXh0dXJlKSB7CisgICAgICAgICAgICBzZXJpYWxp
emF0aW9uT2JqZWN0LnRleHR1cmVOYW1lID0gcGFydGljbGVTeXN0ZW0ucGFydGljbGVUZXh0dXJl
Lm5hbWU7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmludmVydFkgPSBwYXJ0aWNs
ZVN5c3RlbS5wYXJ0aWNsZVRleHR1cmUuX2ludmVydFk7CisgICAgICAgIH0KKyAgICAgICAgLy8g
QW5pbWF0aW9ucworICAgICAgICBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xOV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uQXBwZW5kU2VyaWFsaXplZEFuaW1hdGlv
bnMocGFydGljbGVTeXN0ZW0sIHNlcmlhbGl6YXRpb25PYmplY3QpOworICAgICAgICBzZXJpYWxp
emF0aW9uT2JqZWN0LmJlZ2luQW5pbWF0aW9uT25TdGFydCA9IHBhcnRpY2xlU3lzdGVtLmJlZ2lu
QW5pbWF0aW9uT25TdGFydDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5iZWdpbkFuaW1h
dGlvbkZyb20gPSBwYXJ0aWNsZVN5c3RlbS5iZWdpbkFuaW1hdGlvbkZyb207CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QuYmVnaW5BbmltYXRpb25UbyA9IHBhcnRpY2xlU3lzdGVtLmJlZ2lu
QW5pbWF0aW9uVG87CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuYmVnaW5BbmltYXRpb25M
b29wID0gcGFydGljbGVTeXN0ZW0uYmVnaW5BbmltYXRpb25Mb29wOworICAgICAgICAvLyBQYXJ0
aWNsZSBzeXN0ZW0KKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5zdGFydERlbGF5ID0gcGFy
dGljbGVTeXN0ZW0uc3RhcnREZWxheTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5yZW5k
ZXJpbmdHcm91cElkID0gcGFydGljbGVTeXN0ZW0ucmVuZGVyaW5nR3JvdXBJZDsKKyAgICAgICAg
c2VyaWFsaXphdGlvbk9iamVjdC5pc0JpbGxib2FyZEJhc2VkID0gcGFydGljbGVTeXN0ZW0uaXNC
aWxsYm9hcmRCYXNlZDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5iaWxsYm9hcmRNb2Rl
ID0gcGFydGljbGVTeXN0ZW0uYmlsbGJvYXJkTW9kZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5taW5Bbmd1bGFyU3BlZWQgPSBwYXJ0aWNsZVN5c3RlbS5taW5Bbmd1bGFyU3BlZWQ7Cisg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF4QW5ndWxhclNwZWVkID0gcGFydGljbGVTeXN0
ZW0ubWF4QW5ndWxhclNwZWVkOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1pblNpemUg
PSBwYXJ0aWNsZVN5c3RlbS5taW5TaXplOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1h
eFNpemUgPSBwYXJ0aWNsZVN5c3RlbS5tYXhTaXplOworICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0Lm1pblNjYWxlWCA9IHBhcnRpY2xlU3lzdGVtLm1pblNjYWxlWDsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5tYXhTY2FsZVggPSBwYXJ0aWNsZVN5c3RlbS5tYXhTY2FsZVg7CisgICAg
ICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWluU2NhbGVZID0gcGFydGljbGVTeXN0ZW0ubWluU2Nh
bGVZOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1heFNjYWxlWSA9IHBhcnRpY2xlU3lz
dGVtLm1heFNjYWxlWTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5taW5FbWl0UG93ZXIg
PSBwYXJ0aWNsZVN5c3RlbS5taW5FbWl0UG93ZXI7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmpl
Y3QubWF4RW1pdFBvd2VyID0gcGFydGljbGVTeXN0ZW0ubWF4RW1pdFBvd2VyOworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0Lm1pbkxpZmVUaW1lID0gcGFydGljbGVTeXN0ZW0ubWluTGlmZVRp
bWU7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QubWF4TGlmZVRpbWUgPSBwYXJ0aWNsZVN5
c3RlbS5tYXhMaWZlVGltZTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5lbWl0UmF0ZSA9
IHBhcnRpY2xlU3lzdGVtLmVtaXRSYXRlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lmdy
YXZpdHkgPSBwYXJ0aWNsZVN5c3RlbS5ncmF2aXR5LmFzQXJyYXkoKTsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5ub2lzZVN0cmVuZ3RoID0gcGFydGljbGVTeXN0ZW0ubm9pc2VTdHJlbmd0
aC5hc0FycmF5KCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29sb3IxID0gcGFydGlj
bGVTeXN0ZW0uY29sb3IxLmFzQXJyYXkoKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5j
b2xvcjIgPSBwYXJ0aWNsZVN5c3RlbS5jb2xvcjIuYXNBcnJheSgpOworICAgICAgICBzZXJpYWxp
emF0aW9uT2JqZWN0LmNvbG9yRGVhZCA9IHBhcnRpY2xlU3lzdGVtLmNvbG9yRGVhZC5hc0FycmF5
KCk7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudXBkYXRlU3BlZWQgPSBwYXJ0aWNsZVN5
c3RlbS51cGRhdGVTcGVlZDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50YXJnZXRTdG9w
RHVyYXRpb24gPSBwYXJ0aWNsZVN5c3RlbS50YXJnZXRTdG9wRHVyYXRpb247CisgICAgICAgIHNl
cmlhbGl6YXRpb25PYmplY3QuYmxlbmRNb2RlID0gcGFydGljbGVTeXN0ZW0uYmxlbmRNb2RlOwor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnByZVdhcm1DeWNsZXMgPSBwYXJ0aWNsZVN5c3Rl
bS5wcmVXYXJtQ3ljbGVzOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnByZVdhcm1TdGVw
T2Zmc2V0ID0gcGFydGljbGVTeXN0ZW0ucHJlV2FybVN0ZXBPZmZzZXQ7CisgICAgICAgIHNlcmlh
bGl6YXRpb25PYmplY3QubWluSW5pdGlhbFJvdGF0aW9uID0gcGFydGljbGVTeXN0ZW0ubWluSW5p
dGlhbFJvdGF0aW9uOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm1heEluaXRpYWxSb3Rh
dGlvbiA9IHBhcnRpY2xlU3lzdGVtLm1heEluaXRpYWxSb3RhdGlvbjsKKyAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC5zdGFydFNwcml0ZUNlbGxJRCA9IHBhcnRpY2xlU3lzdGVtLnN0YXJ0U3By
aXRlQ2VsbElEOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmVuZFNwcml0ZUNlbGxJRCA9
IHBhcnRpY2xlU3lzdGVtLmVuZFNwcml0ZUNlbGxJRDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5zcHJpdGVDZWxsQ2hhbmdlU3BlZWQgPSBwYXJ0aWNsZVN5c3RlbS5zcHJpdGVDZWxsQ2hh
bmdlU3BlZWQ7CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc3ByaXRlQ2VsbFdpZHRoID0g
cGFydGljbGVTeXN0ZW0uc3ByaXRlQ2VsbFdpZHRoOworICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LnNwcml0ZUNlbGxIZWlnaHQgPSBwYXJ0aWNsZVN5c3RlbS5zcHJpdGVDZWxsSGVpZ2h0Owor
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNwcml0ZVJhbmRvbVN0YXJ0Q2VsbCA9IHBhcnRp
Y2xlU3lzdGVtLnNwcml0ZVJhbmRvbVN0YXJ0Q2VsbDsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9i
amVjdC5pc0FuaW1hdGlvblNoZWV0RW5hYmxlZCA9IHBhcnRpY2xlU3lzdGVtLmlzQW5pbWF0aW9u
U2hlZXRFbmFibGVkOworICAgICAgICB2YXIgY29sb3JHcmFkaWVudHMgPSBwYXJ0aWNsZVN5c3Rl
bS5nZXRDb2xvckdyYWRpZW50cygpOworICAgICAgICBpZiAoY29sb3JHcmFkaWVudHMpIHsKKyAg
ICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29sb3JHcmFkaWVudHMgPSBbXTsKKyAgICAg
ICAgICAgIGZvciAodmFyIF9pID0gMCwgY29sb3JHcmFkaWVudHNfMSA9IGNvbG9yR3JhZGllbnRz
OyBfaSA8IGNvbG9yR3JhZGllbnRzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICAgICAg
dmFyIGNvbG9yR3JhZGllbnQgPSBjb2xvckdyYWRpZW50c18xW19pXTsKKyAgICAgICAgICAgICAg
ICB2YXIgc2VyaWFsaXplZEdyYWRpZW50ID0geworICAgICAgICAgICAgICAgICAgICBncmFkaWVu
dDogY29sb3JHcmFkaWVudC5ncmFkaWVudCwKKyAgICAgICAgICAgICAgICAgICAgY29sb3IxOiBj
b2xvckdyYWRpZW50LmNvbG9yMS5hc0FycmF5KCkKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIGlmIChjb2xvckdyYWRpZW50LmNvbG9yMikgeworICAgICAgICAgICAgICAgICAg
ICBzZXJpYWxpemVkR3JhZGllbnQuY29sb3IyID0gY29sb3JHcmFkaWVudC5jb2xvcjIuYXNBcnJh
eSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2Jq
ZWN0LmNvbG9yR3JhZGllbnRzLnB1c2goc2VyaWFsaXplZEdyYWRpZW50KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICB2YXIgcmFtcEdyYWRpZW50cyA9IHBhcnRpY2xlU3lzdGVt
LmdldFJhbXBHcmFkaWVudHMoKTsKKyAgICAgICAgaWYgKHJhbXBHcmFkaWVudHMpIHsKKyAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QucmFtcEdyYWRpZW50cyA9IFtdOworICAgICAgICAg
ICAgZm9yICh2YXIgX2EgPSAwLCByYW1wR3JhZGllbnRzXzEgPSByYW1wR3JhZGllbnRzOyBfYSA8
IHJhbXBHcmFkaWVudHNfMS5sZW5ndGg7IF9hKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcmFt
cEdyYWRpZW50ID0gcmFtcEdyYWRpZW50c18xW19hXTsKKyAgICAgICAgICAgICAgICB2YXIgc2Vy
aWFsaXplZEdyYWRpZW50ID0geworICAgICAgICAgICAgICAgICAgICBncmFkaWVudDogcmFtcEdy
YWRpZW50LmdyYWRpZW50LAorICAgICAgICAgICAgICAgICAgICBjb2xvcjogcmFtcEdyYWRpZW50
LmNvbG9yLmFzQXJyYXkoKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5yYW1wR3JhZGllbnRzLnB1c2goc2VyaWFsaXplZEdyYWRpZW50KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QudXNlUmFtcEdy
YWRpZW50cyA9IHBhcnRpY2xlU3lzdGVtLnVzZVJhbXBHcmFkaWVudHM7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGNvbG9yUmVtYXBHcmFkaWVudHMgPSBwYXJ0aWNsZVN5c3RlbS5nZXRDb2xvclJl
bWFwR3JhZGllbnRzKCk7CisgICAgICAgIGlmIChjb2xvclJlbWFwR3JhZGllbnRzKSB7CisgICAg
ICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmNvbG9yUmVtYXBHcmFkaWVudHMgPSBbXTsKKyAg
ICAgICAgICAgIGZvciAodmFyIF9iID0gMCwgY29sb3JSZW1hcEdyYWRpZW50c18xID0gY29sb3JS
ZW1hcEdyYWRpZW50czsgX2IgPCBjb2xvclJlbWFwR3JhZGllbnRzXzEubGVuZ3RoOyBfYisrKSB7
CisgICAgICAgICAgICAgICAgdmFyIGNvbG9yUmVtYXBHcmFkaWVudCA9IGNvbG9yUmVtYXBHcmFk
aWVudHNfMVtfYl07CisgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRHcmFkaWVudCA9IHsK
KyAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQ6IGNvbG9yUmVtYXBHcmFkaWVudC5ncmFkaWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgZmFjdG9yMTogY29sb3JSZW1hcEdyYWRpZW50LmZhY3Rv
cjEKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlmIChjb2xvclJlbWFwR3Jh
ZGllbnQuZmFjdG9yMiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgIHNlcmlh
bGl6ZWRHcmFkaWVudC5mYWN0b3IyID0gY29sb3JSZW1hcEdyYWRpZW50LmZhY3RvcjI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuY29sb3JS
ZW1hcEdyYWRpZW50cy5wdXNoKHNlcmlhbGl6ZWRHcmFkaWVudCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGFscGhhUmVtYXBHcmFkaWVudHMgPSBwYXJ0aWNsZVN5c3Rl
bS5nZXRBbHBoYVJlbWFwR3JhZGllbnRzKCk7CisgICAgICAgIGlmIChhbHBoYVJlbWFwR3JhZGll
bnRzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmFscGhhUmVtYXBHcmFkaWVu
dHMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIF9jID0gMCwgYWxwaGFSZW1hcEdyYWRpZW50
c18xID0gYWxwaGFSZW1hcEdyYWRpZW50czsgX2MgPCBhbHBoYVJlbWFwR3JhZGllbnRzXzEubGVu
Z3RoOyBfYysrKSB7CisgICAgICAgICAgICAgICAgdmFyIGFscGhhUmVtYXBHcmFkaWVudCA9IGFs
cGhhUmVtYXBHcmFkaWVudHNfMVtfY107CisgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRH
cmFkaWVudCA9IHsKKyAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQ6IGFscGhhUmVtYXBHcmFk
aWVudC5ncmFkaWVudCwKKyAgICAgICAgICAgICAgICAgICAgZmFjdG9yMTogYWxwaGFSZW1hcEdy
YWRpZW50LmZhY3RvcjEKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlmIChh
bHBoYVJlbWFwR3JhZGllbnQuZmFjdG9yMiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIHNlcmlhbGl6ZWRHcmFkaWVudC5mYWN0b3IyID0gYWxwaGFSZW1hcEdyYWRpZW50LmZh
Y3RvcjI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QuYWxwaGFSZW1hcEdyYWRpZW50cy5wdXNoKHNlcmlhbGl6ZWRHcmFkaWVudCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNpemVHcmFkaWVudHMgPSBwYXJ0aWNs
ZVN5c3RlbS5nZXRTaXplR3JhZGllbnRzKCk7CisgICAgICAgIGlmIChzaXplR3JhZGllbnRzKSB7
CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnNpemVHcmFkaWVudHMgPSBbXTsKKyAg
ICAgICAgICAgIGZvciAodmFyIF9kID0gMCwgc2l6ZUdyYWRpZW50c18xID0gc2l6ZUdyYWRpZW50
czsgX2QgPCBzaXplR3JhZGllbnRzXzEubGVuZ3RoOyBfZCsrKSB7CisgICAgICAgICAgICAgICAg
dmFyIHNpemVHcmFkaWVudCA9IHNpemVHcmFkaWVudHNfMVtfZF07CisgICAgICAgICAgICAgICAg
dmFyIHNlcmlhbGl6ZWRHcmFkaWVudCA9IHsKKyAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQ6
IHNpemVHcmFkaWVudC5ncmFkaWVudCwKKyAgICAgICAgICAgICAgICAgICAgZmFjdG9yMTogc2l6
ZUdyYWRpZW50LmZhY3RvcjEKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlm
IChzaXplR3JhZGllbnQuZmFjdG9yMiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNlcmlhbGl6ZWRHcmFkaWVudC5mYWN0b3IyID0gc2l6ZUdyYWRpZW50LmZhY3RvcjI7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc2l6
ZUdyYWRpZW50cy5wdXNoKHNlcmlhbGl6ZWRHcmFkaWVudCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGFuZ3VsYXJTcGVlZEdyYWRpZW50cyA9IHBhcnRpY2xlU3lzdGVt
LmdldEFuZ3VsYXJTcGVlZEdyYWRpZW50cygpOworICAgICAgICBpZiAoYW5ndWxhclNwZWVkR3Jh
ZGllbnRzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmFuZ3VsYXJTcGVlZEdy
YWRpZW50cyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgX2UgPSAwLCBhbmd1bGFyU3BlZWRH
cmFkaWVudHNfMSA9IGFuZ3VsYXJTcGVlZEdyYWRpZW50czsgX2UgPCBhbmd1bGFyU3BlZWRHcmFk
aWVudHNfMS5sZW5ndGg7IF9lKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgYW5ndWxhclNwZWVk
R3JhZGllbnQgPSBhbmd1bGFyU3BlZWRHcmFkaWVudHNfMVtfZV07CisgICAgICAgICAgICAgICAg
dmFyIHNlcmlhbGl6ZWRHcmFkaWVudCA9IHsKKyAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQ6
IGFuZ3VsYXJTcGVlZEdyYWRpZW50LmdyYWRpZW50LAorICAgICAgICAgICAgICAgICAgICBmYWN0
b3IxOiBhbmd1bGFyU3BlZWRHcmFkaWVudC5mYWN0b3IxCisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICBpZiAoYW5ndWxhclNwZWVkR3JhZGllbnQuZmFjdG9yMiAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRHcmFkaWVudC5mYWN0b3IyID0g
YW5ndWxhclNwZWVkR3JhZGllbnQuZmFjdG9yMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5hbmd1bGFyU3BlZWRHcmFkaWVudHMucHVzaChz
ZXJpYWxpemVkR3JhZGllbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZh
ciB2ZWxvY2l0eUdyYWRpZW50cyA9IHBhcnRpY2xlU3lzdGVtLmdldFZlbG9jaXR5R3JhZGllbnRz
KCk7CisgICAgICAgIGlmICh2ZWxvY2l0eUdyYWRpZW50cykgeworICAgICAgICAgICAgc2VyaWFs
aXphdGlvbk9iamVjdC52ZWxvY2l0eUdyYWRpZW50cyA9IFtdOworICAgICAgICAgICAgZm9yICh2
YXIgX2YgPSAwLCB2ZWxvY2l0eUdyYWRpZW50c18xID0gdmVsb2NpdHlHcmFkaWVudHM7IF9mIDwg
dmVsb2NpdHlHcmFkaWVudHNfMS5sZW5ndGg7IF9mKyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
dmVsb2NpdHlHcmFkaWVudCA9IHZlbG9jaXR5R3JhZGllbnRzXzFbX2ZdOworICAgICAgICAgICAg
ICAgIHZhciBzZXJpYWxpemVkR3JhZGllbnQgPSB7CisgICAgICAgICAgICAgICAgICAgIGdyYWRp
ZW50OiB2ZWxvY2l0eUdyYWRpZW50LmdyYWRpZW50LAorICAgICAgICAgICAgICAgICAgICBmYWN0
b3IxOiB2ZWxvY2l0eUdyYWRpZW50LmZhY3RvcjEKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIGlmICh2ZWxvY2l0eUdyYWRpZW50LmZhY3RvcjIgIT09IHVuZGVmaW5lZCkgewor
ICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkR3JhZGllbnQuZmFjdG9yMiA9IHZlbG9jaXR5
R3JhZGllbnQuZmFjdG9yMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC52ZWxvY2l0eUdyYWRpZW50cy5wdXNoKHNlcmlhbGl6ZWRHcmFkaWVu
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRyYWdHcmFkaWVudHMg
PSBwYXJ0aWNsZVN5c3RlbS5nZXREcmFnR3JhZGllbnRzKCk7CisgICAgICAgIGlmIChkcmFnR3Jh
ZGllbnRzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmRyYWdHcmFkaWVudHMg
PSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIF9nID0gMCwgZHJhZ0dyYWRpZW50c18xID0gZHJh
Z0dyYWRpZW50czsgX2cgPCBkcmFnR3JhZGllbnRzXzEubGVuZ3RoOyBfZysrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGRyYWdHcmFkaWVudCA9IGRyYWdHcmFkaWVudHNfMVtfZ107CisgICAgICAg
ICAgICAgICAgdmFyIHNlcmlhbGl6ZWRHcmFkaWVudCA9IHsKKyAgICAgICAgICAgICAgICAgICAg
Z3JhZGllbnQ6IGRyYWdHcmFkaWVudC5ncmFkaWVudCwKKyAgICAgICAgICAgICAgICAgICAgZmFj
dG9yMTogZHJhZ0dyYWRpZW50LmZhY3RvcjEKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgIGlmIChkcmFnR3JhZGllbnQuZmFjdG9yMiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIHNlcmlhbGl6ZWRHcmFkaWVudC5mYWN0b3IyID0gZHJhZ0dyYWRpZW50LmZh
Y3RvcjI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb25P
YmplY3QuZHJhZ0dyYWRpZW50cy5wdXNoKHNlcmlhbGl6ZWRHcmFkaWVudCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVtaXRSYXRlR3JhZGllbnRzID0gcGFydGljbGVT
eXN0ZW0uZ2V0RW1pdFJhdGVHcmFkaWVudHMoKTsKKyAgICAgICAgaWYgKGVtaXRSYXRlR3JhZGll
bnRzKSB7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmVtaXRSYXRlR3JhZGllbnRz
ID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBfaCA9IDAsIGVtaXRSYXRlR3JhZGllbnRzXzEg
PSBlbWl0UmF0ZUdyYWRpZW50czsgX2ggPCBlbWl0UmF0ZUdyYWRpZW50c18xLmxlbmd0aDsgX2gr
KykgeworICAgICAgICAgICAgICAgIHZhciBlbWl0UmF0ZUdyYWRpZW50ID0gZW1pdFJhdGVHcmFk
aWVudHNfMVtfaF07CisgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRHcmFkaWVudCA9IHsK
KyAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQ6IGVtaXRSYXRlR3JhZGllbnQuZ3JhZGllbnQs
CisgICAgICAgICAgICAgICAgICAgIGZhY3RvcjE6IGVtaXRSYXRlR3JhZGllbnQuZmFjdG9yMQor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgaWYgKGVtaXRSYXRlR3JhZGllbnQu
ZmFjdG9yMiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRH
cmFkaWVudC5mYWN0b3IyID0gZW1pdFJhdGVHcmFkaWVudC5mYWN0b3IyOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmVtaXRSYXRlR3JhZGll
bnRzLnB1c2goc2VyaWFsaXplZEdyYWRpZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICB2YXIgc3RhcnRTaXplR3JhZGllbnRzID0gcGFydGljbGVTeXN0ZW0uZ2V0U3RhcnRT
aXplR3JhZGllbnRzKCk7CisgICAgICAgIGlmIChzdGFydFNpemVHcmFkaWVudHMpIHsKKyAgICAg
ICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Quc3RhcnRTaXplR3JhZGllbnRzID0gW107CisgICAg
ICAgICAgICBmb3IgKHZhciBfaiA9IDAsIHN0YXJ0U2l6ZUdyYWRpZW50c18xID0gc3RhcnRTaXpl
R3JhZGllbnRzOyBfaiA8IHN0YXJ0U2l6ZUdyYWRpZW50c18xLmxlbmd0aDsgX2orKykgeworICAg
ICAgICAgICAgICAgIHZhciBzdGFydFNpemVHcmFkaWVudCA9IHN0YXJ0U2l6ZUdyYWRpZW50c18x
W19qXTsKKyAgICAgICAgICAgICAgICB2YXIgc2VyaWFsaXplZEdyYWRpZW50ID0geworICAgICAg
ICAgICAgICAgICAgICBncmFkaWVudDogc3RhcnRTaXplR3JhZGllbnQuZ3JhZGllbnQsCisgICAg
ICAgICAgICAgICAgICAgIGZhY3RvcjE6IHN0YXJ0U2l6ZUdyYWRpZW50LmZhY3RvcjEKKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlmIChzdGFydFNpemVHcmFkaWVudC5mYWN0
b3IyICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZEdyYWRp
ZW50LmZhY3RvcjIgPSBzdGFydFNpemVHcmFkaWVudC5mYWN0b3IyOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LnN0YXJ0U2l6ZUdyYWRpZW50
cy5wdXNoKHNlcmlhbGl6ZWRHcmFkaWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGxpZmVUaW1lR3JhZGllbnRzID0gcGFydGljbGVTeXN0ZW0uZ2V0TGlmZVRpbWVH
cmFkaWVudHMoKTsKKyAgICAgICAgaWYgKGxpZmVUaW1lR3JhZGllbnRzKSB7CisgICAgICAgICAg
ICBzZXJpYWxpemF0aW9uT2JqZWN0LmxpZmVUaW1lR3JhZGllbnRzID0gW107CisgICAgICAgICAg
ICBmb3IgKHZhciBfayA9IDAsIGxpZmVUaW1lR3JhZGllbnRzXzEgPSBsaWZlVGltZUdyYWRpZW50
czsgX2sgPCBsaWZlVGltZUdyYWRpZW50c18xLmxlbmd0aDsgX2srKykgeworICAgICAgICAgICAg
ICAgIHZhciBsaWZlVGltZUdyYWRpZW50ID0gbGlmZVRpbWVHcmFkaWVudHNfMVtfa107CisgICAg
ICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRHcmFkaWVudCA9IHsKKyAgICAgICAgICAgICAgICAg
ICAgZ3JhZGllbnQ6IGxpZmVUaW1lR3JhZGllbnQuZ3JhZGllbnQsCisgICAgICAgICAgICAgICAg
ICAgIGZhY3RvcjE6IGxpZmVUaW1lR3JhZGllbnQuZmFjdG9yMQorICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgaWYgKGxpZmVUaW1lR3JhZGllbnQuZmFjdG9yMiAhPT0gdW5kZWZp
bmVkKSB7CisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRHcmFkaWVudC5mYWN0b3IyID0g
bGlmZVRpbWVHcmFkaWVudC5mYWN0b3IyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmxpZmVUaW1lR3JhZGllbnRzLnB1c2goc2VyaWFsaXpl
ZEdyYWRpZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgbGltaXRW
ZWxvY2l0eUdyYWRpZW50cyA9IHBhcnRpY2xlU3lzdGVtLmdldExpbWl0VmVsb2NpdHlHcmFkaWVu
dHMoKTsKKyAgICAgICAgaWYgKGxpbWl0VmVsb2NpdHlHcmFkaWVudHMpIHsKKyAgICAgICAgICAg
IHNlcmlhbGl6YXRpb25PYmplY3QubGltaXRWZWxvY2l0eUdyYWRpZW50cyA9IFtdOworICAgICAg
ICAgICAgZm9yICh2YXIgX2wgPSAwLCBsaW1pdFZlbG9jaXR5R3JhZGllbnRzXzEgPSBsaW1pdFZl
bG9jaXR5R3JhZGllbnRzOyBfbCA8IGxpbWl0VmVsb2NpdHlHcmFkaWVudHNfMS5sZW5ndGg7IF9s
KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbGltaXRWZWxvY2l0eUdyYWRpZW50ID0gbGltaXRW
ZWxvY2l0eUdyYWRpZW50c18xW19sXTsKKyAgICAgICAgICAgICAgICB2YXIgc2VyaWFsaXplZEdy
YWRpZW50ID0geworICAgICAgICAgICAgICAgICAgICBncmFkaWVudDogbGltaXRWZWxvY2l0eUdy
YWRpZW50LmdyYWRpZW50LAorICAgICAgICAgICAgICAgICAgICBmYWN0b3IxOiBsaW1pdFZlbG9j
aXR5R3JhZGllbnQuZmFjdG9yMQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
aWYgKGxpbWl0VmVsb2NpdHlHcmFkaWVudC5mYWN0b3IyICE9PSB1bmRlZmluZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2VyaWFsaXplZEdyYWRpZW50LmZhY3RvcjIgPSBsaW1pdFZlbG9jaXR5
R3JhZGllbnQuZmFjdG9yMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2Vy
aWFsaXphdGlvbk9iamVjdC5saW1pdFZlbG9jaXR5R3JhZGllbnRzLnB1c2goc2VyaWFsaXplZEdy
YWRpZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3Qu
bGltaXRWZWxvY2l0eURhbXBpbmcgPSBwYXJ0aWNsZVN5c3RlbS5saW1pdFZlbG9jaXR5RGFtcGlu
ZzsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFydGljbGVTeXN0ZW0ubm9pc2VUZXh0dXJlKSB7
CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0Lm5vaXNlVGV4dHVyZSA9IHBhcnRpY2xl
U3lzdGVtLm5vaXNlVGV4dHVyZS5zZXJpYWxpemUoKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBQYXJ0aWNsZVN5c3RlbS5fUGFyc2UgPSBmdW5jdGlvbiAocGFy
c2VkUGFydGljbGVTeXN0ZW0sIHBhcnRpY2xlU3lzdGVtLCBzY2VuZSwgcm9vdFVybCkgeworICAg
ICAgICAvLyBUZXh0dXJlCisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS50ZXh0dXJl
TmFtZSkgeworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0ucGFydGljbGVUZXh0dXJlID0gbmV3
IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBf
X1siVGV4dHVyZSJdKHJvb3RVcmwgKyBwYXJzZWRQYXJ0aWNsZVN5c3RlbS50ZXh0dXJlTmFtZSwg
c2NlbmUsIGZhbHNlLCBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5pbnZlcnRZICE9PSB1bmRlZmluZWQg
PyBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5pbnZlcnRZIDogdHJ1ZSk7CisgICAgICAgICAgICBwYXJ0
aWNsZVN5c3RlbS5wYXJ0aWNsZVRleHR1cmUubmFtZSA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnRl
eHR1cmVOYW1lOworICAgICAgICB9CisgICAgICAgIC8vIEVtaXR0ZXIKKyAgICAgICAgaWYgKCFw
YXJzZWRQYXJ0aWNsZVN5c3RlbS5lbWl0dGVySWQgJiYgcGFyc2VkUGFydGljbGVTeXN0ZW0uZW1p
dHRlcklkICE9PSAwICYmIHBhcnNlZFBhcnRpY2xlU3lzdGVtLmVtaXR0ZXIgPT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0uZW1pdHRlciA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcnNlZFBhcnRpY2xlU3lzdGVtLmVtaXR0ZXJJZCkg
eworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0uZW1pdHRlciA9IHNjZW5lLmdldExhc3RNZXNo
QnlJRChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5lbWl0dGVySWQpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0uZW1pdHRlciA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uRnJvbUFycmF5
KHBhcnNlZFBhcnRpY2xlU3lzdGVtLmVtaXR0ZXIpOworICAgICAgICB9CisgICAgICAgIC8vIE1p
c2MuCisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5yZW5kZXJpbmdHcm91cElkICE9
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLnJlbmRlcmluZ0dyb3Vw
SWQgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5yZW5kZXJpbmdHcm91cElkOworICAgICAgICB9Cisg
ICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5pc0JpbGxib2FyZEJhc2VkICE9PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmlzQmlsbGJvYXJkQmFzZWQgPSBw
YXJzZWRQYXJ0aWNsZVN5c3RlbS5pc0JpbGxib2FyZEJhc2VkOworICAgICAgICB9CisgICAgICAg
IGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5iaWxsYm9hcmRNb2RlICE9PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmJpbGxib2FyZE1vZGUgPSBwYXJzZWRQYXJ0aWNs
ZVN5c3RlbS5iaWxsYm9hcmRNb2RlOworICAgICAgICB9CisgICAgICAgIC8vIEFuaW1hdGlvbnMK
KyAgICAgICAgaWYgKHBhcnNlZFBhcnRpY2xlU3lzdGVtLmFuaW1hdGlvbnMpIHsKKyAgICAgICAg
ICAgIGZvciAodmFyIGFuaW1hdGlvbkluZGV4ID0gMDsgYW5pbWF0aW9uSW5kZXggPCBwYXJzZWRQ
YXJ0aWNsZVN5c3RlbS5hbmltYXRpb25zLmxlbmd0aDsgYW5pbWF0aW9uSW5kZXgrKykgeworICAg
ICAgICAgICAgICAgIHZhciBwYXJzZWRBbmltYXRpb24gPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5h
bmltYXRpb25zW2FuaW1hdGlvbkluZGV4XTsKKyAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxD
bGFzcyA9IF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX1R5
cGVTdG9yZSJdLkdldENsYXNzKCJCQUJZTE9OLkFuaW1hdGlvbiIpOworICAgICAgICAgICAgICAg
IGlmIChpbnRlcm5hbENsYXNzKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVt
LmFuaW1hdGlvbnMucHVzaChpbnRlcm5hbENsYXNzLlBhcnNlKHBhcnNlZEFuaW1hdGlvbikpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcnRpY2xlU3lz
dGVtLmJlZ2luQW5pbWF0aW9uT25TdGFydCA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLmJlZ2luQW5p
bWF0aW9uT25TdGFydDsKKyAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmJlZ2luQW5pbWF0aW9u
RnJvbSA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLmJlZ2luQW5pbWF0aW9uRnJvbTsKKyAgICAgICAg
ICAgIHBhcnRpY2xlU3lzdGVtLmJlZ2luQW5pbWF0aW9uVG8gPSBwYXJzZWRQYXJ0aWNsZVN5c3Rl
bS5iZWdpbkFuaW1hdGlvblRvOworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0uYmVnaW5Bbmlt
YXRpb25Mb29wID0gcGFyc2VkUGFydGljbGVTeXN0ZW0uYmVnaW5BbmltYXRpb25Mb29wOworICAg
ICAgICB9CisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5hdXRvQW5pbWF0ZSkgewor
ICAgICAgICAgICAgc2NlbmUuYmVnaW5BbmltYXRpb24ocGFydGljbGVTeXN0ZW0sIHBhcnNlZFBh
cnRpY2xlU3lzdGVtLmF1dG9BbmltYXRlRnJvbSwgcGFyc2VkUGFydGljbGVTeXN0ZW0uYXV0b0Fu
aW1hdGVUbywgcGFyc2VkUGFydGljbGVTeXN0ZW0uYXV0b0FuaW1hdGVMb29wLCBwYXJzZWRQYXJ0
aWNsZVN5c3RlbS5hdXRvQW5pbWF0ZVNwZWVkIHx8IDEuMCk7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gUGFydGljbGUgc3lzdGVtCisgICAgICAgIHBhcnRpY2xlU3lzdGVtLnN0YXJ0RGVsYXkgPSBw
YXJzZWRQYXJ0aWNsZVN5c3RlbS5zdGFydERlbGF5IHwgMDsKKyAgICAgICAgcGFydGljbGVTeXN0
ZW0ubWluQW5ndWxhclNwZWVkID0gcGFyc2VkUGFydGljbGVTeXN0ZW0ubWluQW5ndWxhclNwZWVk
OworICAgICAgICBwYXJ0aWNsZVN5c3RlbS5tYXhBbmd1bGFyU3BlZWQgPSBwYXJzZWRQYXJ0aWNs
ZVN5c3RlbS5tYXhBbmd1bGFyU3BlZWQ7CisgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1pblNpemUg
PSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5taW5TaXplOworICAgICAgICBwYXJ0aWNsZVN5c3RlbS5t
YXhTaXplID0gcGFyc2VkUGFydGljbGVTeXN0ZW0ubWF4U2l6ZTsKKyAgICAgICAgaWYgKHBhcnNl
ZFBhcnRpY2xlU3lzdGVtLm1pblNjYWxlWCkgeworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0u
bWluU2NhbGVYID0gcGFyc2VkUGFydGljbGVTeXN0ZW0ubWluU2NhbGVYOworICAgICAgICAgICAg
cGFydGljbGVTeXN0ZW0ubWF4U2NhbGVYID0gcGFyc2VkUGFydGljbGVTeXN0ZW0ubWF4U2NhbGVY
OworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0ubWluU2NhbGVZID0gcGFyc2VkUGFydGljbGVT
eXN0ZW0ubWluU2NhbGVZOworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0ubWF4U2NhbGVZID0g
cGFyc2VkUGFydGljbGVTeXN0ZW0ubWF4U2NhbGVZOworICAgICAgICB9CisgICAgICAgIGlmIChw
YXJzZWRQYXJ0aWNsZVN5c3RlbS5wcmVXYXJtQ3ljbGVzICE9PSB1bmRlZmluZWQpIHsKKyAgICAg
ICAgICAgIHBhcnRpY2xlU3lzdGVtLnByZVdhcm1DeWNsZXMgPSBwYXJzZWRQYXJ0aWNsZVN5c3Rl
bS5wcmVXYXJtQ3ljbGVzOworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0ucHJlV2FybVN0ZXBP
ZmZzZXQgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5wcmVXYXJtU3RlcE9mZnNldDsKKyAgICAgICAg
fQorICAgICAgICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0ubWluSW5pdGlhbFJvdGF0aW9uICE9
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1pbkluaXRpYWxSb3Rh
dGlvbiA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLm1pbkluaXRpYWxSb3RhdGlvbjsKKyAgICAgICAg
ICAgIHBhcnRpY2xlU3lzdGVtLm1heEluaXRpYWxSb3RhdGlvbiA9IHBhcnNlZFBhcnRpY2xlU3lz
dGVtLm1heEluaXRpYWxSb3RhdGlvbjsKKyAgICAgICAgfQorICAgICAgICBwYXJ0aWNsZVN5c3Rl
bS5taW5MaWZlVGltZSA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLm1pbkxpZmVUaW1lOworICAgICAg
ICBwYXJ0aWNsZVN5c3RlbS5tYXhMaWZlVGltZSA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLm1heExp
ZmVUaW1lOworICAgICAgICBwYXJ0aWNsZVN5c3RlbS5taW5FbWl0UG93ZXIgPSBwYXJzZWRQYXJ0
aWNsZVN5c3RlbS5taW5FbWl0UG93ZXI7CisgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1heEVtaXRQ
b3dlciA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLm1heEVtaXRQb3dlcjsKKyAgICAgICAgcGFydGlj
bGVTeXN0ZW0uZW1pdFJhdGUgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5lbWl0UmF0ZTsKKyAgICAg
ICAgcGFydGljbGVTeXN0ZW0uZ3Jhdml0eSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uRnJvbUFycmF5KHBhcnNlZFBhcnRpY2xlU3lz
dGVtLmdyYXZpdHkpOworICAgICAgICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0ubm9pc2VTdHJl
bmd0aCkgeworICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0ubm9pc2VTdHJlbmd0aCA9IF9NYXRo
c19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uRnJv
bUFycmF5KHBhcnNlZFBhcnRpY2xlU3lzdGVtLm5vaXNlU3RyZW5ndGgpOworICAgICAgICB9Cisg
ICAgICAgIHBhcnRpY2xlU3lzdGVtLmNvbG9yMSA9IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yNF9fWyJDb2xvcjQiXS5Gcm9tQXJyYXkocGFyc2VkUGFydGljbGVT
eXN0ZW0uY29sb3IxKTsKKyAgICAgICAgcGFydGljbGVTeXN0ZW0uY29sb3IyID0gX01hdGhzX21h
dGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X19bIkNvbG9yNCJdLkZyb21BcnJh
eShwYXJzZWRQYXJ0aWNsZVN5c3RlbS5jb2xvcjIpOworICAgICAgICBwYXJ0aWNsZVN5c3RlbS5j
b2xvckRlYWQgPSBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRf
X1siQ29sb3I0Il0uRnJvbUFycmF5KHBhcnNlZFBhcnRpY2xlU3lzdGVtLmNvbG9yRGVhZCk7Cisg
ICAgICAgIHBhcnRpY2xlU3lzdGVtLnVwZGF0ZVNwZWVkID0gcGFyc2VkUGFydGljbGVTeXN0ZW0u
dXBkYXRlU3BlZWQ7CisgICAgICAgIHBhcnRpY2xlU3lzdGVtLnRhcmdldFN0b3BEdXJhdGlvbiA9
IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnRhcmdldFN0b3BEdXJhdGlvbjsKKyAgICAgICAgcGFydGlj
bGVTeXN0ZW0uYmxlbmRNb2RlID0gcGFyc2VkUGFydGljbGVTeXN0ZW0uYmxlbmRNb2RlOworICAg
ICAgICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0uY29sb3JHcmFkaWVudHMpIHsKKyAgICAgICAg
ICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5jb2xvckdyYWRp
ZW50czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY29sb3JH
cmFkaWVudCA9IF9hW19pXTsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5hZGRDb2xv
ckdyYWRpZW50KGNvbG9yR3JhZGllbnQuZ3JhZGllbnQsIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJDb2xvcjQiXS5Gcm9tQXJyYXkoY29sb3JHcmFkaWVu
dC5jb2xvcjEpLCBjb2xvckdyYWRpZW50LmNvbG9yMiA/IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJDb2xvcjQiXS5Gcm9tQXJyYXkoY29sb3JHcmFkaWVu
dC5jb2xvcjIpIDogdW5kZWZpbmVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0ucmFtcEdyYWRpZW50cykgeworICAgICAgICAgICAg
Zm9yICh2YXIgX2IgPSAwLCBfYyA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnJhbXBHcmFkaWVudHM7
IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7CisgICAgICAgICAgICAgICAgdmFyIHJhbXBHcmFkaWVu
dCA9IF9jW19iXTsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5hZGRSYW1wR3JhZGll
bnQocmFtcEdyYWRpZW50LmdyYWRpZW50LCBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjRfX1siQ29sb3IzIl0uRnJvbUFycmF5KHJhbXBHcmFkaWVudC5jb2xvcikp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0udXNlUmFtcEdyYWRp
ZW50cyA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnVzZVJhbXBHcmFkaWVudHM7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHBhcnNlZFBhcnRpY2xlU3lzdGVtLmNvbG9yUmVtYXBHcmFkaWVudHMpIHsK
KyAgICAgICAgICAgIGZvciAodmFyIF9kID0gMCwgX2UgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5j
b2xvclJlbWFwR3JhZGllbnRzOyBfZCA8IF9lLmxlbmd0aDsgX2QrKykgeworICAgICAgICAgICAg
ICAgIHZhciBjb2xvclJlbWFwR3JhZGllbnQgPSBfZVtfZF07CisgICAgICAgICAgICAgICAgcGFy
dGljbGVTeXN0ZW0uYWRkQ29sb3JSZW1hcEdyYWRpZW50KGNvbG9yUmVtYXBHcmFkaWVudC5ncmFk
aWVudCwgY29sb3JSZW1hcEdyYWRpZW50LmZhY3RvcjEgIT09IHVuZGVmaW5lZCA/IGNvbG9yUmVt
YXBHcmFkaWVudC5mYWN0b3IxIDogY29sb3JSZW1hcEdyYWRpZW50LmZhY3RvciwgY29sb3JSZW1h
cEdyYWRpZW50LmZhY3RvcjIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
IChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5hbHBoYVJlbWFwR3JhZGllbnRzKSB7CisgICAgICAgICAg
ICBmb3IgKHZhciBfZiA9IDAsIF9nID0gcGFyc2VkUGFydGljbGVTeXN0ZW0uYWxwaGFSZW1hcEdy
YWRpZW50czsgX2YgPCBfZy5sZW5ndGg7IF9mKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgYWxw
aGFSZW1hcEdyYWRpZW50ID0gX2dbX2ZdOworICAgICAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVt
LmFkZEFscGhhUmVtYXBHcmFkaWVudChhbHBoYVJlbWFwR3JhZGllbnQuZ3JhZGllbnQsIGFscGhh
UmVtYXBHcmFkaWVudC5mYWN0b3IxICE9PSB1bmRlZmluZWQgPyBhbHBoYVJlbWFwR3JhZGllbnQu
ZmFjdG9yMSA6IGFscGhhUmVtYXBHcmFkaWVudC5mYWN0b3IsIGFscGhhUmVtYXBHcmFkaWVudC5m
YWN0b3IyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkUGFy
dGljbGVTeXN0ZW0uc2l6ZUdyYWRpZW50cykgeworICAgICAgICAgICAgZm9yICh2YXIgX2ggPSAw
LCBfaiA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnNpemVHcmFkaWVudHM7IF9oIDwgX2oubGVuZ3Ro
OyBfaCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHNpemVHcmFkaWVudCA9IF9qW19oXTsKKyAg
ICAgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5hZGRTaXplR3JhZGllbnQoc2l6ZUdyYWRpZW50
LmdyYWRpZW50LCBzaXplR3JhZGllbnQuZmFjdG9yMSAhPT0gdW5kZWZpbmVkID8gc2l6ZUdyYWRp
ZW50LmZhY3RvcjEgOiBzaXplR3JhZGllbnQuZmFjdG9yLCBzaXplR3JhZGllbnQuZmFjdG9yMik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZFBhcnRpY2xlU3lz
dGVtLmFuZ3VsYXJTcGVlZEdyYWRpZW50cykgeworICAgICAgICAgICAgZm9yICh2YXIgX2sgPSAw
LCBfbCA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLmFuZ3VsYXJTcGVlZEdyYWRpZW50czsgX2sgPCBf
bC5sZW5ndGg7IF9rKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgYW5ndWxhclNwZWVkR3JhZGll
bnQgPSBfbFtfa107CisgICAgICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0uYWRkQW5ndWxhclNw
ZWVkR3JhZGllbnQoYW5ndWxhclNwZWVkR3JhZGllbnQuZ3JhZGllbnQsIGFuZ3VsYXJTcGVlZEdy
YWRpZW50LmZhY3RvcjEgIT09IHVuZGVmaW5lZCA/IGFuZ3VsYXJTcGVlZEdyYWRpZW50LmZhY3Rv
cjEgOiBhbmd1bGFyU3BlZWRHcmFkaWVudC5mYWN0b3IsIGFuZ3VsYXJTcGVlZEdyYWRpZW50LmZh
Y3RvcjIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwYXJzZWRQYXJ0
aWNsZVN5c3RlbS52ZWxvY2l0eUdyYWRpZW50cykgeworICAgICAgICAgICAgZm9yICh2YXIgX20g
PSAwLCBfbyA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnZlbG9jaXR5R3JhZGllbnRzOyBfbSA8IF9v
Lmxlbmd0aDsgX20rKykgeworICAgICAgICAgICAgICAgIHZhciB2ZWxvY2l0eUdyYWRpZW50ID0g
X29bX21dOworICAgICAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmFkZFZlbG9jaXR5R3JhZGll
bnQodmVsb2NpdHlHcmFkaWVudC5ncmFkaWVudCwgdmVsb2NpdHlHcmFkaWVudC5mYWN0b3IxICE9
PSB1bmRlZmluZWQgPyB2ZWxvY2l0eUdyYWRpZW50LmZhY3RvcjEgOiB2ZWxvY2l0eUdyYWRpZW50
LmZhY3RvciwgdmVsb2NpdHlHcmFkaWVudC5mYWN0b3IyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0uZHJhZ0dyYWRpZW50cykgewor
ICAgICAgICAgICAgZm9yICh2YXIgX3AgPSAwLCBfcSA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLmRy
YWdHcmFkaWVudHM7IF9wIDwgX3EubGVuZ3RoOyBfcCsrKSB7CisgICAgICAgICAgICAgICAgdmFy
IGRyYWdHcmFkaWVudCA9IF9xW19wXTsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5h
ZGREcmFnR3JhZGllbnQoZHJhZ0dyYWRpZW50LmdyYWRpZW50LCBkcmFnR3JhZGllbnQuZmFjdG9y
MSAhPT0gdW5kZWZpbmVkID8gZHJhZ0dyYWRpZW50LmZhY3RvcjEgOiBkcmFnR3JhZGllbnQuZmFj
dG9yLCBkcmFnR3JhZGllbnQuZmFjdG9yMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHBhcnNlZFBhcnRpY2xlU3lzdGVtLmVtaXRSYXRlR3JhZGllbnRzKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBfciA9IDAsIF9zID0gcGFyc2VkUGFydGljbGVTeXN0ZW0uZW1pdFJh
dGVHcmFkaWVudHM7IF9yIDwgX3MubGVuZ3RoOyBfcisrKSB7CisgICAgICAgICAgICAgICAgdmFy
IGVtaXRSYXRlR3JhZGllbnQgPSBfc1tfcl07CisgICAgICAgICAgICAgICAgcGFydGljbGVTeXN0
ZW0uYWRkRW1pdFJhdGVHcmFkaWVudChlbWl0UmF0ZUdyYWRpZW50LmdyYWRpZW50LCBlbWl0UmF0
ZUdyYWRpZW50LmZhY3RvcjEgIT09IHVuZGVmaW5lZCA/IGVtaXRSYXRlR3JhZGllbnQuZmFjdG9y
MSA6IGVtaXRSYXRlR3JhZGllbnQuZmFjdG9yLCBlbWl0UmF0ZUdyYWRpZW50LmZhY3RvcjIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3Rl
bS5zdGFydFNpemVHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIF90ID0gMCwgX3Ug
PSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5zdGFydFNpemVHcmFkaWVudHM7IF90IDwgX3UubGVuZ3Ro
OyBfdCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0U2l6ZUdyYWRpZW50ID0gX3VbX3Rd
OworICAgICAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmFkZFN0YXJ0U2l6ZUdyYWRpZW50KHN0
YXJ0U2l6ZUdyYWRpZW50LmdyYWRpZW50LCBzdGFydFNpemVHcmFkaWVudC5mYWN0b3IxICE9PSB1
bmRlZmluZWQgPyBzdGFydFNpemVHcmFkaWVudC5mYWN0b3IxIDogc3RhcnRTaXplR3JhZGllbnQu
ZmFjdG9yLCBzdGFydFNpemVHcmFkaWVudC5mYWN0b3IyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0ubGlmZVRpbWVHcmFkaWVudHMp
IHsKKyAgICAgICAgICAgIGZvciAodmFyIF92ID0gMCwgX3cgPSBwYXJzZWRQYXJ0aWNsZVN5c3Rl
bS5saWZlVGltZUdyYWRpZW50czsgX3YgPCBfdy5sZW5ndGg7IF92KyspIHsKKyAgICAgICAgICAg
ICAgICB2YXIgbGlmZVRpbWVHcmFkaWVudCA9IF93W192XTsKKyAgICAgICAgICAgICAgICBwYXJ0
aWNsZVN5c3RlbS5hZGRMaWZlVGltZUdyYWRpZW50KGxpZmVUaW1lR3JhZGllbnQuZ3JhZGllbnQs
IGxpZmVUaW1lR3JhZGllbnQuZmFjdG9yMSAhPT0gdW5kZWZpbmVkID8gbGlmZVRpbWVHcmFkaWVu
dC5mYWN0b3IxIDogbGlmZVRpbWVHcmFkaWVudC5mYWN0b3IsIGxpZmVUaW1lR3JhZGllbnQuZmFj
dG9yMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlZFBhcnRp
Y2xlU3lzdGVtLmxpbWl0VmVsb2NpdHlHcmFkaWVudHMpIHsKKyAgICAgICAgICAgIGZvciAodmFy
IF94ID0gMCwgX3kgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5saW1pdFZlbG9jaXR5R3JhZGllbnRz
OyBfeCA8IF95Lmxlbmd0aDsgX3grKykgeworICAgICAgICAgICAgICAgIHZhciBsaW1pdFZlbG9j
aXR5R3JhZGllbnQgPSBfeVtfeF07CisgICAgICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0uYWRk
TGltaXRWZWxvY2l0eUdyYWRpZW50KGxpbWl0VmVsb2NpdHlHcmFkaWVudC5ncmFkaWVudCwgbGlt
aXRWZWxvY2l0eUdyYWRpZW50LmZhY3RvcjEgIT09IHVuZGVmaW5lZCA/IGxpbWl0VmVsb2NpdHlH
cmFkaWVudC5mYWN0b3IxIDogbGltaXRWZWxvY2l0eUdyYWRpZW50LmZhY3RvciwgbGltaXRWZWxv
Y2l0eUdyYWRpZW50LmZhY3RvcjIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFydGlj
bGVTeXN0ZW0ubGltaXRWZWxvY2l0eURhbXBpbmcgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5saW1p
dFZlbG9jaXR5RGFtcGluZzsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VkUGFydGljbGVT
eXN0ZW0ubm9pc2VUZXh0dXJlKSB7CisgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5ub2lzZVRl
eHR1cmUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX1Byb2NlZHVyYWxzX3Byb2NlZHVyYWxUZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJQcm9jZWR1cmFsVGV4dHVyZSJdLlBhcnNl
KHBhcnNlZFBhcnRpY2xlU3lzdGVtLm5vaXNlVGV4dHVyZSwgc2NlbmUsIHJvb3RVcmwpOworICAg
ICAgICB9CisgICAgICAgIC8vIEVtaXR0ZXIKKyAgICAgICAgdmFyIGVtaXR0ZXJUeXBlOworICAg
ICAgICBpZiAocGFyc2VkUGFydGljbGVTeXN0ZW0ucGFydGljbGVFbWl0dGVyVHlwZSkgeworICAg
ICAgICAgICAgc3dpdGNoIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5wYXJ0aWNsZUVtaXR0ZXJUeXBl
LnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlICJTcGhlcmVQYXJ0aWNsZUVtaXR0ZXIiOgor
ICAgICAgICAgICAgICAgICAgICBlbWl0dGVyVHlwZSA9IG5ldyBfUGFydGljbGVzX0VtaXR0ZXJU
eXBlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siU3BoZXJlUGFydGljbGVF
bWl0dGVyIl0oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSAiU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiOgorICAgICAgICAgICAgICAgICAg
ICBlbWl0dGVyVHlwZSA9IG5ldyBfUGFydGljbGVzX0VtaXR0ZXJUeXBlc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTRfX1siU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiXSgp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJDb25l
RW1pdHRlciI6CisgICAgICAgICAgICAgICAgY2FzZSAiQ29uZVBhcnRpY2xlRW1pdHRlciI6Cisg
ICAgICAgICAgICAgICAgICAgIGVtaXR0ZXJUeXBlID0gbmV3IF9QYXJ0aWNsZXNfRW1pdHRlclR5
cGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJDb25lUGFydGljbGVFbWl0
dGVyIl0oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSAiQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIiOgorICAgICAgICAgICAgICAgICAgICBlbWl0dGVy
VHlwZSA9IG5ldyBfUGFydGljbGVzX0VtaXR0ZXJUeXBlc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTRfX1siQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIiXSgpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJIZW1pc3BoZXJpY1BhcnRpY2xl
RW1pdHRlciI6CisgICAgICAgICAgICAgICAgICAgIGVtaXR0ZXJUeXBlID0gbmV3IF9QYXJ0aWNs
ZXNfRW1pdHRlclR5cGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJIZW1p
c3BoZXJpY1BhcnRpY2xlRW1pdHRlciJdKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgIkJveEVtaXR0ZXIiOgorICAgICAgICAgICAgICAgIGNhc2Ug
IkJveFBhcnRpY2xlRW1pdHRlciI6CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdHRlclR5cGUgPSBuZXcgX1BhcnRpY2xlc19FbWl0dGVyVHlwZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19bIkJveFBhcnRpY2xlRW1pdHRlciJdKCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZW1pdHRlclR5cGUucGFyc2UocGFyc2VkUGFydGljbGVTeXN0ZW0ucGFydGljbGVFbWl0dGVyVHlw
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbWl0dGVyVHlwZSA9
IG5ldyBfUGFydGljbGVzX0VtaXR0ZXJUeXBlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTRfX1siQm94UGFydGljbGVFbWl0dGVyIl0oKTsKKyAgICAgICAgICAgIGVtaXR0ZXJUeXBl
LnBhcnNlKHBhcnNlZFBhcnRpY2xlU3lzdGVtKTsKKyAgICAgICAgfQorICAgICAgICBwYXJ0aWNs
ZVN5c3RlbS5wYXJ0aWNsZUVtaXR0ZXJUeXBlID0gZW1pdHRlclR5cGU7CisgICAgICAgIC8vIEFu
aW1hdGlvbiBzaGVldAorICAgICAgICBwYXJ0aWNsZVN5c3RlbS5zdGFydFNwcml0ZUNlbGxJRCA9
IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnN0YXJ0U3ByaXRlQ2VsbElEOworICAgICAgICBwYXJ0aWNs
ZVN5c3RlbS5lbmRTcHJpdGVDZWxsSUQgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5lbmRTcHJpdGVD
ZWxsSUQ7CisgICAgICAgIHBhcnRpY2xlU3lzdGVtLnNwcml0ZUNlbGxXaWR0aCA9IHBhcnNlZFBh
cnRpY2xlU3lzdGVtLnNwcml0ZUNlbGxXaWR0aDsKKyAgICAgICAgcGFydGljbGVTeXN0ZW0uc3By
aXRlQ2VsbEhlaWdodCA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLnNwcml0ZUNlbGxIZWlnaHQ7Cisg
ICAgICAgIHBhcnRpY2xlU3lzdGVtLnNwcml0ZUNlbGxDaGFuZ2VTcGVlZCA9IHBhcnNlZFBhcnRp
Y2xlU3lzdGVtLnNwcml0ZUNlbGxDaGFuZ2VTcGVlZDsKKyAgICAgICAgcGFydGljbGVTeXN0ZW0u
c3ByaXRlUmFuZG9tU3RhcnRDZWxsID0gcGFyc2VkUGFydGljbGVTeXN0ZW0uc3ByaXRlUmFuZG9t
U3RhcnRDZWxsOworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2VzIGEgSlNPTiBvYmplY3Qg
dG8gY3JlYXRlIGEgcGFydGljbGUgc3lzdGVtLgorICAgICAqIEBwYXJhbSBwYXJzZWRQYXJ0aWNs
ZVN5c3RlbSBUaGUgSlNPTiBvYmplY3QgdG8gcGFyc2UKKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhl
IHNjZW5lIHRvIGNyZWF0ZSB0aGUgcGFydGljbGUgc3lzdGVtIGluCisgICAgICogQHBhcmFtIHJv
b3RVcmwgVGhlIHJvb3QgdXJsIHRvIHVzZSB0byBsb2FkIGV4dGVybmFsIGRlcGVuZGVuY2llcyBs
aWtlIHRleHR1cmUKKyAgICAgKiBAcGFyYW0gZG9Ob3RTdGFydCBJZ25vcmUgdGhlIHByZXZlbnRB
dXRvU3RhcnQgYXR0cmlidXRlIGFuZCBkb2VzIG5vdCBzdGFydAorICAgICAqIEByZXR1cm5zIHRo
ZSBQYXJzZWQgcGFydGljbGUgc3lzdGVtCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0uUGFy
c2UgPSBmdW5jdGlvbiAocGFyc2VkUGFydGljbGVTeXN0ZW0sIHNjZW5lLCByb290VXJsLCBkb05v
dFN0YXJ0KSB7CisgICAgICAgIGlmIChkb05vdFN0YXJ0ID09PSB2b2lkIDApIHsgZG9Ob3RTdGFy
dCA9IGZhbHNlOyB9CisgICAgICAgIHZhciBuYW1lID0gcGFyc2VkUGFydGljbGVTeXN0ZW0ubmFt
ZTsKKyAgICAgICAgdmFyIGN1c3RvbSA9IG51bGw7CisgICAgICAgIHZhciBwcm9ncmFtID0gbnVs
bDsKKyAgICAgICAgaWYgKHBhcnNlZFBhcnRpY2xlU3lzdGVtLmN1c3RvbVNoYWRlcikgeworICAg
ICAgICAgICAgcHJvZ3JhbSA9IHBhcnNlZFBhcnRpY2xlU3lzdGVtLmN1c3RvbVNoYWRlcjsKKyAg
ICAgICAgICAgIHZhciBkZWZpbmVzID0gKHByb2dyYW0uc2hhZGVyT3B0aW9ucy5kZWZpbmVzLmxl
bmd0aCA+IDApID8gcHJvZ3JhbS5zaGFkZXJPcHRpb25zLmRlZmluZXMuam9pbigiXG4iKSA6ICIi
OworICAgICAgICAgICAgY3VzdG9tID0gc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlRWZmZWN0Rm9y
UGFydGljbGVzKHByb2dyYW0uc2hhZGVyUGF0aC5mcmFnbWVudEVsZW1lbnQsIHByb2dyYW0uc2hh
ZGVyT3B0aW9ucy51bmlmb3JtcywgcHJvZ3JhbS5zaGFkZXJPcHRpb25zLnNhbXBsZXJzLCBkZWZp
bmVzKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcGFydGljbGVTeXN0ZW0gPSBuZXcgUGFydGlj
bGVTeXN0ZW0obmFtZSwgcGFyc2VkUGFydGljbGVTeXN0ZW0uY2FwYWNpdHksIHNjZW5lLCBjdXN0
b20sIHBhcnNlZFBhcnRpY2xlU3lzdGVtLmlzQW5pbWF0aW9uU2hlZXRFbmFibGVkKTsKKyAgICAg
ICAgcGFydGljbGVTeXN0ZW0uY3VzdG9tU2hhZGVyID0gcHJvZ3JhbTsKKyAgICAgICAgaWYgKHBh
cnNlZFBhcnRpY2xlU3lzdGVtLmlkKSB7CisgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5pZCA9
IHBhcnNlZFBhcnRpY2xlU3lzdGVtLmlkOworICAgICAgICB9CisgICAgICAgIC8vIFN1YkVtaXR0
ZXJzCisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5zdWJFbWl0dGVycykgeworICAg
ICAgICAgICAgcGFydGljbGVTeXN0ZW0uc3ViRW1pdHRlcnMgPSBbXTsKKyAgICAgICAgICAgIGZv
ciAodmFyIF9pID0gMCwgX2EgPSBwYXJzZWRQYXJ0aWNsZVN5c3RlbS5zdWJFbWl0dGVyczsgX2kg
PCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IF9hW19pXTsK
KyAgICAgICAgICAgICAgICB2YXIgY2VsbEFycmF5ID0gW107CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgX2IgPSAwLCBjZWxsXzEgPSBjZWxsOyBfYiA8IGNlbGxfMS5sZW5ndGg7IF9iKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHN1YiA9IGNlbGxfMVtfYl07CisgICAgICAgICAgICAg
ICAgICAgIGNlbGxBcnJheS5wdXNoKF9zdWJFbWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xN19fWyJTdWJFbWl0dGVyIl0uUGFyc2Uoc3ViLCBzY2VuZSwgcm9vdFVybCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5zdWJFbWl0dGVycy5w
dXNoKGNlbGxBcnJheSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUGFydGlj
bGVTeXN0ZW0uX1BhcnNlKHBhcnNlZFBhcnRpY2xlU3lzdGVtLCBwYXJ0aWNsZVN5c3RlbSwgc2Nl
bmUsIHJvb3RVcmwpOworICAgICAgICBwYXJ0aWNsZVN5c3RlbS50ZXh0dXJlTWFzayA9IF9NYXRo
c19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJDb2xvcjQiXS5Gcm9t
QXJyYXkocGFyc2VkUGFydGljbGVTeXN0ZW0udGV4dHVyZU1hc2spOworICAgICAgICAvLyBBdXRv
IHN0YXJ0CisgICAgICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5wcmV2ZW50QXV0b1N0YXJ0
KSB7CisgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5wcmV2ZW50QXV0b1N0YXJ0ID0gcGFyc2Vk
UGFydGljbGVTeXN0ZW0ucHJldmVudEF1dG9TdGFydDsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IWRvTm90U3RhcnQgJiYgIXBhcnRpY2xlU3lzdGVtLnByZXZlbnRBdXRvU3RhcnQpIHsKKyAgICAg
ICAgICAgIHBhcnRpY2xlU3lzdGVtLnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHBhcnRpY2xlU3lzdGVtOworICAgIH07CisgICAgLyoqCisgICAgICogQmlsbGJvYXJkIG1vZGUg
d2lsbCBvbmx5IGFwcGx5IHRvIFkgYXhpcworICAgICAqLworICAgIFBhcnRpY2xlU3lzdGVtLkJJ
TExCT0FSRE1PREVfWSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMThfX1siQ29uc3RhbnRzIl0uUEFSVElDTEVTX0JJTExCT0FSRE1PREVfWTsKKyAgICAvKioK
KyAgICAgKiBCaWxsYm9hcmQgbW9kZSB3aWxsIGFwcGx5IHRvIGFsbCBheGVzCisgICAgICovCisg
ICAgUGFydGljbGVTeXN0ZW0uQklMTEJPQVJETU9ERV9BTEwgPSBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19bIkNvbnN0YW50cyJdLlBBUlRJQ0xFU19CSUxM
Qk9BUkRNT0RFX0FMTDsKKyAgICAvKioKKyAgICAgKiBTcGVjaWFsIGJpbGxib2FyZCBtb2RlIHdo
ZXJlIHRoZSBwYXJ0aWNsZSB3aWxsIGJlIGJpaWxib2FyZCB0byB0aGUgY2FtZXJhIGJ1dCByb3Rh
dGVkIHRvIGFsaWduIHdpdGggZGlyZWN0aW9uCisgICAgICovCisgICAgUGFydGljbGVTeXN0ZW0u
QklMTEJPQVJETU9ERV9TVFJFVENIRUQgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE4X19bIkNvbnN0YW50cyJdLlBBUlRJQ0xFU19CSUxMQk9BUkRNT0RFX1NU
UkVUQ0hFRDsKKyAgICByZXR1cm4gUGFydGljbGVTeXN0ZW07Cit9KF9iYXNlUGFydGljbGVTeXN0
ZW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIkJhc2VQYXJ0aWNsZVN5c3RlbSJdKSk7
CisKK19zdWJFbWl0dGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJTdWJFbWl0dGVy
Il0uX1BhcnNlUGFydGljbGVTeXN0ZW0gPSBQYXJ0aWNsZVN5c3RlbS5QYXJzZTsKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vUGFydGljbGVzL3BhcnRpY2xlU3lzdGVtQ29tcG9uZW50LnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1BhcnRpY2xlcy9wYXJ0aWNsZVN5c3RlbUNvbXBvbmVudC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IF9JRG9OZWVkVG9CZUluVGhlQnVpbGQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiX0lEb05lZWRUb0JlSW5UaGVCdWlsZCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0lEb05lZWRUb0JlSW5UaGVCdWlsZDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9ncHVQYXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ncHVQYXJ0aWNsZVN5c3RlbSAq
LyAiLi9QYXJ0aWNsZXMvZ3B1UGFydGljbGVTeXN0ZW0udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfYWJzdHJhY3RTY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vYWJzdHJhY3RTY2VuZSAqLyAiLi9hYnN0cmFjdFNjZW5l
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVz
L2VuZ2luZSAqLyAiLi9FbmdpbmVzL2VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9wYXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9wYXJ0aWNsZVN5c3RlbSAqLyAiLi9QYXJ0aWNsZXMvcGFydGlj
bGVTeXN0ZW0udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1NoYWRlcnNfcGFydGljbGVzX3ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9wYXJ0aWNsZXMu
dmVydGV4ICovICIuL1NoYWRlcnMvcGFydGljbGVzLnZlcnRleC50cyIpOworCisKKworCisKKwor
CisvLyBBZGRzIHRoZSBwYXJzZXJzIHRvIHRoZSBzY2VuZSBwYXJzZXJzLgorX2Fic3RyYWN0U2Nl
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQWJzdHJhY3RTY2VuZSJdLkFkZFBhcnNl
cihfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siU2NlbmVDb21w
b25lbnRDb25zdGFudHMiXS5OQU1FX1BBUlRJQ0xFU1lTVEVNLCBmdW5jdGlvbiAocGFyc2VkRGF0
YSwgc2NlbmUsIGNvbnRhaW5lciwgcm9vdFVybCkgeworICAgIHZhciBpbmRpdmlkdWFsUGFyc2Vy
ID0gX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQWJzdHJhY3RT
Y2VuZSJdLkdldEluZGl2aWR1YWxQYXJzZXIoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uTkFNRV9QQVJUSUNMRVNZ
U1RFTSk7CisgICAgaWYgKCFpbmRpdmlkdWFsUGFyc2VyKSB7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgLy8gUGFydGljbGVzIFN5c3RlbXMKKyAgICBpZiAocGFyc2VkRGF0YS5wYXJ0aWNs
ZVN5c3RlbXMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLnBhcnRpY2xlU3lzdGVtcyAhPT0g
bnVsbCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGNhY2hlID0gcGFyc2VkRGF0YS5w
YXJ0aWNsZVN5c3RlbXMubGVuZ3RoOyBpbmRleCA8IGNhY2hlOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICB2YXIgcGFyc2VkUGFydGljbGVTeXN0ZW0gPSBwYXJzZWREYXRhLnBhcnRpY2xlU3lzdGVt
c1tpbmRleF07CisgICAgICAgICAgICBjb250YWluZXIucGFydGljbGVTeXN0ZW1zLnB1c2goaW5k
aXZpZHVhbFBhcnNlcihwYXJzZWRQYXJ0aWNsZVN5c3RlbSwgc2NlbmUsIHJvb3RVcmwpKTsKKyAg
ICAgICAgfQorICAgIH0KK30pOworX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siQWJzdHJhY3RTY2VuZSJdLkFkZEluZGl2aWR1YWxQYXJzZXIoX3NjZW5lQ29tcG9u
ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRz
Il0uTkFNRV9QQVJUSUNMRVNZU1RFTSwgZnVuY3Rpb24gKHBhcnNlZFBhcnRpY2xlU3lzdGVtLCBz
Y2VuZSwgcm9vdFVybCkgeworICAgIGlmIChwYXJzZWRQYXJ0aWNsZVN5c3RlbS5hY3RpdmVQYXJ0
aWNsZUNvdW50KSB7CisgICAgICAgIHZhciBwcyA9IF9ncHVQYXJ0aWNsZVN5c3RlbV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJHUFVQYXJ0aWNsZVN5c3RlbSJdLlBhcnNlKHBhcnNlZFBh
cnRpY2xlU3lzdGVtLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIHJldHVybiBwczsKKyAgICB9
CisgICAgZWxzZSB7CisgICAgICAgIHZhciBwcyA9IF9wYXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJQYXJ0aWNsZVN5c3RlbSJdLlBhcnNlKHBhcnNlZFBhcnRpY2xl
U3lzdGVtLCBzY2VuZSwgcm9vdFVybCk7CisgICAgICAgIHJldHVybiBwczsKKyAgICB9Cit9KTsK
K19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5w
cm90b3R5cGUuY3JlYXRlRWZmZWN0Rm9yUGFydGljbGVzID0gZnVuY3Rpb24gKGZyYWdtZW50TmFt
ZSwgdW5pZm9ybXNOYW1lcywgc2FtcGxlcnMsIGRlZmluZXMsIGZhbGxiYWNrcywgb25Db21waWxl
ZCwgb25FcnJvcikgeworICAgIGlmICh1bmlmb3Jtc05hbWVzID09PSB2b2lkIDApIHsgdW5pZm9y
bXNOYW1lcyA9IFtdOyB9CisgICAgaWYgKHNhbXBsZXJzID09PSB2b2lkIDApIHsgc2FtcGxlcnMg
PSBbXTsgfQorICAgIGlmIChkZWZpbmVzID09PSB2b2lkIDApIHsgZGVmaW5lcyA9ICIiOyB9Cisg
ICAgdmFyIGF0dHJpYnV0ZXNOYW1lc09yT3B0aW9ucyA9IF9wYXJ0aWNsZVN5c3RlbV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQYXJ0aWNsZVN5c3RlbSJdLl9HZXRBdHRyaWJ1dGVOYW1l
c09yT3B0aW9ucygpOworICAgIHZhciBlZmZlY3RDcmVhdGlvbk9wdGlvbiA9IF9wYXJ0aWNsZVN5
c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQYXJ0aWNsZVN5c3RlbSJdLl9HZXRF
ZmZlY3RDcmVhdGlvbk9wdGlvbnMoKTsKKyAgICBpZiAoZGVmaW5lcy5pbmRleE9mKCIgQklMTEJP
QVJEIikgPT09IC0xKSB7CisgICAgICAgIGRlZmluZXMgKz0gIlxuI2RlZmluZSBCSUxMQk9BUkRc
biI7CisgICAgfQorICAgIGlmIChzYW1wbGVycy5pbmRleE9mKCJkaWZmdXNlU2FtcGxlciIpID09
PSAtMSkgeworICAgICAgICBzYW1wbGVycy5wdXNoKCJkaWZmdXNlU2FtcGxlciIpOworICAgIH0K
KyAgICByZXR1cm4gdGhpcy5jcmVhdGVFZmZlY3QoeworICAgICAgICB2ZXJ0ZXg6ICJwYXJ0aWNs
ZXMiLAorICAgICAgICBmcmFnbWVudEVsZW1lbnQ6IGZyYWdtZW50TmFtZQorICAgIH0sIGF0dHJp
YnV0ZXNOYW1lc09yT3B0aW9ucywgZWZmZWN0Q3JlYXRpb25PcHRpb24uY29uY2F0KHVuaWZvcm1z
TmFtZXMpLCBzYW1wbGVycywgZGVmaW5lcywgZmFsbGJhY2tzLCBvbkNvbXBpbGVkLCBvbkVycm9y
KTsKK307CitfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWVzaCJd
LnByb3RvdHlwZS5nZXRFbWl0dGVkUGFydGljbGVTeXN0ZW1zID0gZnVuY3Rpb24gKCkgeworICAg
IHZhciByZXN1bHRzID0gbmV3IEFycmF5KCk7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IHRoaXMuZ2V0U2NlbmUoKS5wYXJ0aWNsZVN5c3RlbXMubGVuZ3RoOyBpbmRleCsrKSB7Cisg
ICAgICAgIHZhciBwYXJ0aWNsZVN5c3RlbSA9IHRoaXMuZ2V0U2NlbmUoKS5wYXJ0aWNsZVN5c3Rl
bXNbaW5kZXhdOworICAgICAgICBpZiAocGFydGljbGVTeXN0ZW0uZW1pdHRlciA9PT0gdGhpcykg
eworICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHBhcnRpY2xlU3lzdGVtKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0czsKK307CitfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siTWVzaCJdLnByb3RvdHlwZS5nZXRIaWVyYXJjaHlFbWl0dGVkUGFy
dGljbGVTeXN0ZW1zID0gZnVuY3Rpb24gKCkgeworICAgIHZhciByZXN1bHRzID0gbmV3IEFycmF5
KCk7CisgICAgdmFyIGRlc2NlbmRhbnRzID0gdGhpcy5nZXREZXNjZW5kYW50cygpOworICAgIGRl
c2NlbmRhbnRzLnB1c2godGhpcyk7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRo
aXMuZ2V0U2NlbmUoKS5wYXJ0aWNsZVN5c3RlbXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
IHZhciBwYXJ0aWNsZVN5c3RlbSA9IHRoaXMuZ2V0U2NlbmUoKS5wYXJ0aWNsZVN5c3RlbXNbaW5k
ZXhdOworICAgICAgICB2YXIgZW1pdHRlciA9IHBhcnRpY2xlU3lzdGVtLmVtaXR0ZXI7CisgICAg
ICAgIGlmIChlbWl0dGVyLnBvc2l0aW9uICYmIGRlc2NlbmRhbnRzLmluZGV4T2YoZW1pdHRlcikg
IT09IC0xKSB7CisgICAgICAgICAgICByZXN1bHRzLnB1c2gocGFydGljbGVTeXN0ZW0pOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHRzOworfTsKKy8qKgorICogQGhpZGRlbgor
ICovCit2YXIgX0lEb05lZWRUb0JlSW5UaGVCdWlsZCA9IDQyOworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9QYXJ0aWNsZXMvcGFydGljbGVTeXN0ZW1TZXQudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGFydGljbGVzL3BhcnRp
Y2xlU3lzdGVtU2V0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUGFydGljbGVTeXN0ZW1TZXQgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFydGljbGVTeXN0ZW1TZXQiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIFBhcnRpY2xlU3lzdGVtU2V0OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9t
YXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWlsZGVy
c19zcGhlcmVCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlciAqLyAiLi9NZXNo
ZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9ncHVQYXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9ncHVQYXJ0aWNsZVN5c3RlbSAqLyAiLi9QYXJ0aWNsZXMvZ3B1
UGFydGljbGVTeXN0ZW0udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19l
bmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3Jl
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BhcnRpY2xlc19wYXJ0aWNsZVN5c3Rl
bV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vUGFydGljbGVzL3BhcnRpY2xlU3lzdGVtICovICIuL1BhcnRpY2xlcy9wYXJ0aWNsZVN5c3Rl
bS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfc3RhbmRhcmRNYXRl
cmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWF0ZXJpYWxzL3N0YW5kYXJkTWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL3N0YW5kYXJk
TWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisKKwor
CisKKworCisKKy8qKiBJbnRlcm5hbCBjbGFzcyB1c2VkIHRvIHN0b3JlIHNoYXBlcyBmb3IgZW1p
dHRlcnMgKi8KK3ZhciBQYXJ0aWNsZVN5c3RlbVNldEVtaXR0ZXJDcmVhdGlvbk9wdGlvbnMgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gUGFydGljbGVTeXN0ZW1T
ZXRFbWl0dGVyQ3JlYXRpb25PcHRpb25zKCkgeworICAgIH0KKyAgICByZXR1cm4gUGFydGljbGVT
eXN0ZW1TZXRFbWl0dGVyQ3JlYXRpb25PcHRpb25zOworfSgpKTsKKy8qKgorICogUmVwcmVzZW50
cyBhIHNldCBvZiBwYXJ0aWNsZSBzeXN0ZW1zIHdvcmtpbmcgdG9nZXRoZXIgdG8gY3JlYXRlIGEg
c3BlY2lmaWMgZWZmZWN0CisgKi8KK3ZhciBQYXJ0aWNsZVN5c3RlbVNldCA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQYXJ0aWNsZVN5c3RlbVNldCgpIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBhcnRpY2xlIHN5c3RlbSBsaXN0CisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnN5c3RlbXMgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFBhcnRpY2xlU3lzdGVtU2V0LnByb3RvdHlwZSwgImVtaXR0
ZXJOb2RlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgZW1pdHRlciBub2Rl
IHVzZWQgd2l0aCB0aGlzIHNldAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZW1pdHRlck5vZGU7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgZW1pdHRlciBtZXNoIGFzIGEgc3Bo
ZXJlCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyB1c2VkIHRvIGNy
ZWF0ZSB0aGUgc3BoZXJlCisgICAgICogQHBhcmFtIHJlbmRlcmluZ0dyb3VwSWQgZGVmaW5lcyB0
aGUgcmVuZGVyaW5nR3JvdXBJZCB0byB1c2UgZm9yIHRoZSBzcGhlcmUKKyAgICAgKiBAcGFyYW0g
c2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqLworICAgIFBhcnRpY2xlU3lz
dGVtU2V0LnByb3RvdHlwZS5zZXRFbWl0dGVyQXNTcGhlcmUgPSBmdW5jdGlvbiAob3B0aW9ucywg
cmVuZGVyaW5nR3JvdXBJZCwgc2NlbmUpIHsKKyAgICAgICAgaWYgKHRoaXMuX2VtaXR0ZXJOb2Rl
KSB7CisgICAgICAgICAgICB0aGlzLl9lbWl0dGVyTm9kZS5kaXNwb3NlKCk7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fZW1pdHRlckNyZWF0aW9uT3B0aW9ucyA9IHsKKyAgICAgICAgICAgIGtp
bmQ6ICJTcGhlcmUiLAorICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucywKKyAgICAgICAgICAg
IHJlbmRlcmluZ0dyb3VwSWQ6IHJlbmRlcmluZ0dyb3VwSWQKKyAgICAgICAgfTsKKyAgICAgICAg
dmFyIGVtaXR0ZXJNZXNoID0gX01lc2hlc19CdWlsZGVyc19zcGhlcmVCdWlsZGVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlNwaGVyZUJ1aWxkZXIiXS5DcmVhdGVTcGhlcmUoImVtaXR0
ZXJTcGhlcmUiLCB7IGRpYW1ldGVyOiBvcHRpb25zLmRpYW1ldGVyLCBzZWdtZW50czogb3B0aW9u
cy5zZWdtZW50cyB9LCBzY2VuZSk7CisgICAgICAgIGVtaXR0ZXJNZXNoLnJlbmRlcmluZ0dyb3Vw
SWQgPSByZW5kZXJpbmdHcm91cElkOworICAgICAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgX01hdGVy
aWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlN0YW5k
YXJkTWF0ZXJpYWwiXSgiZW1pdHRlclNwaGVyZU1hdGVyaWFsIiwgc2NlbmUpOworICAgICAgICBt
YXRlcmlhbC5lbWlzc2l2ZUNvbG9yID0gb3B0aW9ucy5jb2xvcjsKKyAgICAgICAgZW1pdHRlck1l
c2gubWF0ZXJpYWwgPSBtYXRlcmlhbDsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRo
aXMuc3lzdGVtczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBzeXN0
ZW0gPSBfYVtfaV07CisgICAgICAgICAgICBzeXN0ZW0uZW1pdHRlciA9IGVtaXR0ZXJNZXNoOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX2VtaXR0ZXJOb2RlID0gZW1pdHRlck1lc2g7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTdGFydHMgYWxsIHBhcnRpY2xlIHN5c3RlbXMgb2YgdGhlIHNl
dAorICAgICAqIEBwYXJhbSBlbWl0dGVyIGRlZmluZXMgYW4gb3B0aW9uYWwgbWVzaCB0byB1c2Ug
YXMgZW1pdHRlciBmb3IgdGhlIHBhcnRpY2xlIHN5c3RlbXMKKyAgICAgKi8KKyAgICBQYXJ0aWNs
ZVN5c3RlbVNldC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoZW1pdHRlcikgeworICAgICAg
ICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5zeXN0ZW1zOyBfaSA8IF9hLmxlbmd0aDsgX2kr
KykgeworICAgICAgICAgICAgdmFyIHN5c3RlbSA9IF9hW19pXTsKKyAgICAgICAgICAgIGlmIChl
bWl0dGVyKSB7CisgICAgICAgICAgICAgICAgc3lzdGVtLmVtaXR0ZXIgPSBlbWl0dGVyOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc3lzdGVtLnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIFJlbGVhc2UgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgICAg
ICovCisgICAgUGFydGljbGVTeXN0ZW1TZXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLnN5c3RlbXM7IF9pIDwgX2Eu
bGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgc3lzdGVtID0gX2FbX2ldOworICAgICAg
ICAgICAgc3lzdGVtLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnN5c3RlbXMg
PSBbXTsKKyAgICAgICAgaWYgKHRoaXMuX2VtaXR0ZXJOb2RlKSB7CisgICAgICAgICAgICB0aGlz
Ll9lbWl0dGVyTm9kZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9lbWl0dGVyTm9kZSA9
IG51bGw7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUg
c2V0IGludG8gYSBKU09OIGNvbXBhdGlibGUgb2JqZWN0CisgICAgICogQHJldHVybnMgYSBKU09O
IGNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNldAorICAgICAqLworICAgIFBhcnRp
Y2xlU3lzdGVtU2V0LnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSB7fTsKKyAgICAgICAgcmVzdWx0LnN5c3RlbXMgPSBbXTsKKyAgICAgICAg
Zm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuc3lzdGVtczsgX2kgPCBfYS5sZW5ndGg7IF9pKysp
IHsKKyAgICAgICAgICAgIHZhciBzeXN0ZW0gPSBfYVtfaV07CisgICAgICAgICAgICByZXN1bHQu
c3lzdGVtcy5wdXNoKHN5c3RlbS5zZXJpYWxpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRoaXMuX2VtaXR0ZXJOb2RlKSB7CisgICAgICAgICAgICByZXN1bHQuZW1pdHRlciA9IHRoaXMu
X2VtaXR0ZXJDcmVhdGlvbk9wdGlvbnM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlIGEgbmV3IFBhcnRpY2xlU3lzdGVtU2V0
IGZyb20gYSBzZXJpYWxpemVkIHNvdXJjZQorICAgICAqIEBwYXJhbSBkYXRhIGRlZmluZXMgYSBK
U09OIGNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNldAorICAgICAqIEBwYXJhbSBz
Y2VuZSBkZWZpbmVzIHRoZSBob3N0aW5nIHNjZW5lCisgICAgICogQHBhcmFtIGdwdSBkZWZpbmVz
IGlmIHdlIHdhbnQgR1BVIHBhcnRpY2xlcyBvciBDUFUgcGFydGljbGVzCisgICAgICogQHJldHVy
bnMgYSBuZXcgUGFydGljbGVTeXN0ZW1TZXQKKyAgICAgKi8KKyAgICBQYXJ0aWNsZVN5c3RlbVNl
dC5QYXJzZSA9IGZ1bmN0aW9uIChkYXRhLCBzY2VuZSwgZ3B1KSB7CisgICAgICAgIGlmIChncHUg
PT09IHZvaWQgMCkgeyBncHUgPSBmYWxzZTsgfQorICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFBh
cnRpY2xlU3lzdGVtU2V0KCk7CisgICAgICAgIHZhciByb290VXJsID0gX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLlBBUlRJQ0xFU19C
YXNlQXNzZXRzVXJsICsgIi90ZXh0dXJlcy8iOworICAgICAgICBzY2VuZSA9IHNjZW5lIHx8IF9F
bmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZVN0
b3JlIl0uTGFzdENyZWF0ZWRTY2VuZTsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IGRh
dGEuc3lzdGVtczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBzeXN0
ZW0gPSBfYVtfaV07CisgICAgICAgICAgICByZXN1bHQuc3lzdGVtcy5wdXNoKGdwdSA/IF9ncHVQ
YXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHUFVQYXJ0aWNsZVN5
c3RlbSJdLlBhcnNlKHN5c3RlbSwgc2NlbmUsIHJvb3RVcmwsIHRydWUpIDogX1BhcnRpY2xlc19w
YXJ0aWNsZVN5c3RlbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQYXJ0aWNsZVN5c3Rl
bSJdLlBhcnNlKHN5c3RlbSwgc2NlbmUsIHJvb3RVcmwsIHRydWUpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoZGF0YS5lbWl0dGVyKSB7CisgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IGRhdGEu
ZW1pdHRlci5vcHRpb25zOworICAgICAgICAgICAgc3dpdGNoIChkYXRhLmVtaXR0ZXIua2luZCkg
eworICAgICAgICAgICAgICAgIGNhc2UgIlNwaGVyZSI6CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5zZXRFbWl0dGVyQXNTcGhlcmUoeworICAgICAgICAgICAgICAgICAgICAgICAgZGlhbWV0
ZXI6IG9wdGlvbnMuZGlhbWV0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50czog
b3B0aW9ucy5zZWdtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBfTWF0aHNf
bWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb2xvcjMiXS5Gcm9tQXJy
YXkob3B0aW9ucy5jb2xvcikKKyAgICAgICAgICAgICAgICAgICAgfSwgZGF0YS5lbWl0dGVyLnJl
bmRlcmluZ0dyb3VwSWQsIHNjZW5lKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAg
IHJldHVybiBQYXJ0aWNsZVN5c3RlbVNldDsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vUGFydGljbGVzL3NvbGlkUGFydGljbGUudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9QYXJ0aWNsZXMvc29saWRQYXJ0aWNsZS50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogU29saWRQYXJ0aWNsZSwgTW9kZWxTaGFwZSwgRGVwdGhTb3J0ZWRQYXJ0
aWNsZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTb2xpZFBhcnRpY2xl
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBTb2xpZFBhcnRpY2xlOyB9KTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk1vZGVsU2hhcGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1vZGVsU2hhcGU7IH0pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRGVwdGhTb3J0ZWRQYXJ0aWNsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
RGVwdGhTb3J0ZWRQYXJ0aWNsZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9t
YXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0N1bGxpbmcvYm91bmRpbmdJbmZvICovICIu
L0N1bGxpbmcvYm91bmRpbmdJbmZvLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0N1
bGxpbmdfYm91bmRpbmdTcGhlcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL0N1bGxpbmcvYm91bmRpbmdTcGhlcmUgKi8gIi4vQ3VsbGlu
Zy9ib3VuZGluZ1NwaGVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNf
YWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1l
c2gudHMiKTsKKworCisKKworCisvKioKKyAqIFJlcHJlc2VudHMgb25lIHBhcnRpY2xlIG9mIGEg
c29saWQgcGFydGljbGUgc3lzdGVtLgorICovCit2YXIgU29saWRQYXJ0aWNsZSA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgU29saWQgUGFy
dGljbGUgb2JqZWN0LgorICAgICAqIERvbid0IGNyZWF0ZSBwYXJ0aWNsZXMgbWFudWFsbHksIHVz
ZSBpbnN0ZWFkIHRoZSBTb2xpZCBQYXJ0aWNsZSBTeXN0ZW0gaW50ZXJuYWwgdG9vbHMgbGlrZSBf
YWRkUGFydGljbGUoKQorICAgICAqIEBwYXJhbSBwYXJ0aWNsZUluZGV4IChpbnRlZ2VyKSBpcyB0
aGUgcGFydGljbGUgaW5kZXggaW4gdGhlIFNvbGlkIFBhcnRpY2xlIFN5c3RlbSBwb29sLiBJdCdz
IGFsc28gdGhlIHBhcnRpY2xlIGlkZW50aWZpZXIuCisgICAgICogQHBhcmFtIHBvc2l0aW9uSW5k
ZXggKGludGVnZXIpIGlzIHRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgcGFydGljbGUgdmVydGlj
ZXMgaW4gdGhlIFNQUyAicG9zaXRpb25zIiBhcnJheS4KKyAgICAgKiBAcGFyYW0gaW5kaWNlSW5k
ZXggKGludGVnZXIpIGlzIHRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgcGFydGljbGUgaW5kaWNl
cyBpbiB0aGUgU1BTICJpbmRpY2VzIiBhcnJheS4KKyAgICAgKiBAcGFyYW0gbW9kZWwgKE1vZGVs
U2hhcGUpIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2RlbCBzaGFwZSBvbiB3aGF0IHRoZSBwYXJ0
aWNsZSBpcyBkZXNpZ25lZC4KKyAgICAgKiBAcGFyYW0gc2hhcGVJZCAoaW50ZWdlcikgaXMgdGhl
IG1vZGVsIHNoYXBlIGlkZW50aWZpZXIgaW4gdGhlIFNQUy4KKyAgICAgKiBAcGFyYW0gaWR4SW5T
aGFwZSAoaW50ZWdlcikgaXMgdGhlIGluZGV4IG9mIHRoZSBwYXJ0aWNsZSBpbiB0aGUgY3VycmVu
dCBtb2RlbCAoZXg6IHRoZSAxMHRoIGJveCBvZiBhZGRTaGFwZShib3gsIDMwKSkKKyAgICAgKiBA
cGFyYW0gc3BzIGRlZmluZXMgdGhlIHNwcyBpdCBpcyBhc3NvY2lhdGVkIHRvCisgICAgICogQHBh
cmFtIG1vZGVsQm91bmRpbmdJbmZvIGlzIHRoZSByZWZlcmVuY2UgdG8gdGhlIG1vZGVsIEJvdW5k
aW5nSW5mbyB1c2VkIGZvciBpbnRlcnNlY3Rpb24gY29tcHV0YXRpb25zLgorICAgICAqLworICAg
IGZ1bmN0aW9uIFNvbGlkUGFydGljbGUocGFydGljbGVJbmRleCwgcG9zaXRpb25JbmRleCwgaW5k
aWNlSW5kZXgsIG1vZGVsLCBzaGFwZUlkLCBpZHhJblNoYXBlLCBzcHMsIG1vZGVsQm91bmRpbmdJ
bmZvKSB7CisgICAgICAgIGlmIChtb2RlbEJvdW5kaW5nSW5mbyA9PT0gdm9pZCAwKSB7IG1vZGVs
Qm91bmRpbmdJbmZvID0gbnVsbDsgfQorICAgICAgICAvKioKKyAgICAgICAgICogcGFydGljbGUg
Z2xvYmFsIGluZGV4CisgICAgICAgICAqLworICAgICAgICB0aGlzLmlkeCA9IDA7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBUaGUgY29sb3Igb2YgdGhlIHBhcnRpY2xlCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLmNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIkNvbG9yNCJdKDEuMCwgMS4wLCAxLjAsIDEuMCk7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBUaGUgd29ybGQgc3BhY2UgcG9zaXRpb24gb2YgdGhlIHBhcnRpY2xlLgor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5wb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICAv
KioKKyAgICAgICAgICogVGhlIHdvcmxkIHNwYWNlIHJvdGF0aW9uIG9mIHRoZSBwYXJ0aWNsZS4g
KE5vdCB1c2UgaWYgcm90YXRpb25RdWF0ZXJuaW9uIGlzIHNldCkKKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMucm90YXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRo
ZSBzY2FsaW5nIG9mIHRoZSBwYXJ0aWNsZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc2Nh
bGluZyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0uT25lKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgdXZzIG9mIHRoZSBw
YXJ0aWNsZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMudXZzID0gbmV3IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3I0Il0oMC4wLCAwLjAs
IDEuMCwgMS4wKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjdXJyZW50IHNwZWVkIG9m
IHRoZSBwYXJ0aWNsZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMudmVsb2NpdHkgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlpl
cm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBwaXZvdCBwb2ludCBpbiB0aGUgcGFy
dGljbGUgbG9jYWwgc3BhY2UuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnBpdm90ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNdXN0IHRoZSBwYXJ0aWNsZSBiZSB0cmFu
c2xhdGVkIGZyb20gaXRzIHBpdm90IHBvaW50IGluIGl0cyBsb2NhbCBzcGFjZSA/CisgICAgICAg
ICAqIEluIHRoaXMgY2FzZSwgdGhlIHBpdm90IHBvaW50IGlzIHNldCBhdCB0aGUgb3JpZ2luIG9m
IHRoZSBwYXJ0aWNsZSBsb2NhbCBzcGFjZSBhbmQgdGhlIHBhcnRpY2xlIGlzIHRyYW5zbGF0ZWQu
CisgICAgICAgICAqIERlZmF1bHQgOiBmYWxzZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy50
cmFuc2xhdGVGcm9tUGl2b3QgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElzIHRo
ZSBwYXJ0aWNsZSBhY3RpdmUgb3Igbm90ID8KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYWxp
dmUgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgICogSXMgdGhlIHBhcnRpY2xlIHZpc2li
bGUgb3Igbm90ID8KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEluZGV4IG9mIHRoaXMgcGFydGljbGUgaW4gdGhlIGds
b2JhbCAicG9zaXRpb25zIiBhcnJheSAoSW50ZXJuYWwgdXNlKQorICAgICAgICAgKiBAaGlkZGVu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLl9wb3MgPSAwOworICAgICAgICAvKioKKyAgICAg
ICAgICogQGhpZGRlbiBJbmRleCBvZiB0aGlzIHBhcnRpY2xlIGluIHRoZSBnbG9iYWwgImluZGlj
ZXMiIGFycmF5IChJbnRlcm5hbCB1c2UpCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9pbmQg
PSAwOworICAgICAgICAvKioKKyAgICAgICAgICogTW9kZWxTaGFwZSBpZCBvZiB0aGlzIHBhcnRp
Y2xlCisgICAgICAgICAqLworICAgICAgICB0aGlzLnNoYXBlSWQgPSAwOworICAgICAgICAvKioK
KyAgICAgICAgICogSW5kZXggb2YgdGhlIHBhcnRpY2xlIGluIGl0cyBzaGFwZSBpZAorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5pZHhJblNoYXBlID0gMDsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEBoaWRkZW4gU3RpbGwgc2V0IGFzIGludmlzaWJsZSBpbiBvcmRlciB0byBza2lwIHVzZWxl
c3MgY29tcHV0YXRpb25zIChJbnRlcm5hbCB1c2UpCisgICAgICAgICAqLworICAgICAgICB0aGlz
Ll9zdGlsbEludmlzaWJsZSA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRl
biBMYXN0IGNvbXB1dGVkIHBhcnRpY2xlIHJvdGF0aW9uIG1hdHJpeAorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5fcm90YXRpb25NYXRyaXggPSBbMS4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIDAu
MCwgMC4wLCAwLjAsIDEuMF07CisgICAgICAgIC8qKgorICAgICAgICAgKiBQYXJlbnQgcGFydGlj
bGUgSWQsIGlmIGFueS4KKyAgICAgICAgICogRGVmYXVsdCBudWxsLgorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5wYXJlbnRJZCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
Y3VsbGluZyBzdHJhdGVneSB0byB1c2UgdG8gY2hlY2sgd2hldGhlciB0aGUgc29saWQgcGFydGlj
bGUgbXVzdCBiZSBjdWxsZWQgb3Igbm90IHdoZW4gdXNpbmcgaXNJbkZydXN0dW0oKS4KKyAgICAg
ICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUgOgorICAgICAgICAgKiAtIEFic3RyYWN0TWVz
aC5DVUxMSU5HU1RSQVRFR1lfU1RBTkRBUkQKKyAgICAgICAgICogLSBBYnN0cmFjdE1lc2guQ1VM
TElOR1NUUkFURUdZX0JPVU5ESU5HU1BIRVJFX09OTFkKKyAgICAgICAgICogLSBBYnN0cmFjdE1l
c2guQ1VMTElOR1NUUkFURUdZX09QVElNSVNUSUNfSU5DTFVTSU9OCisgICAgICAgICAqIC0gQWJz
dHJhY3RNZXNoLkNVTExJTkdTVFJBVEVHWV9PUFRJTUlTVElDX0lOQ0xVU0lPTl9USEVOX0JTUEhF
UkVfT05MWQorICAgICAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3Igc29saWQgcGFydGljbGVz
IGlzIEFic3RyYWN0TWVzaC5DVUxMSU5HU1RSQVRFR1lfQk9VTkRJTkdTUEhFUkVfT05MWQorICAg
ICAgICAgKiBQbGVhc2UgcmVhZCBlYWNoIHN0YXRpYyB2YXJpYWJsZSBkb2N1bWVudGF0aW9uIGlu
IHRoZSBjbGFzcyBBYnN0cmFjdE1lc2ggdG8gZ2V0IGRldGFpbHMgYWJvdXQgdGhlIGN1bGxpbmcg
cHJvY2Vzcy4KKyAgICAgICAgICogKi8KKyAgICAgICAgdGhpcy5jdWxsaW5nU3RyYXRlZ3kgPSBf
TWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBYnN0cmFj
dE1lc2giXS5DVUxMSU5HU1RSQVRFR1lfQk9VTkRJTkdTUEhFUkVfT05MWTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEBoaWRkZW4gSW50ZXJuYWwgZ2xvYmFsIHBvc2l0aW9uIGluIHRoZSBTUFMu
CisgICAgICAgICAqLworICAgICAgICB0aGlzLl9nbG9iYWxQb3NpdGlvbiA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uWmVybygpOwor
ICAgICAgICB0aGlzLmlkeCA9IHBhcnRpY2xlSW5kZXg7CisgICAgICAgIHRoaXMuX3BvcyA9IHBv
c2l0aW9uSW5kZXg7CisgICAgICAgIHRoaXMuX2luZCA9IGluZGljZUluZGV4OworICAgICAgICB0
aGlzLl9tb2RlbCA9IG1vZGVsOworICAgICAgICB0aGlzLnNoYXBlSWQgPSBzaGFwZUlkOworICAg
ICAgICB0aGlzLmlkeEluU2hhcGUgPSBpZHhJblNoYXBlOworICAgICAgICB0aGlzLl9zcHMgPSBz
cHM7CisgICAgICAgIGlmIChtb2RlbEJvdW5kaW5nSW5mbykgeworICAgICAgICAgICAgdGhpcy5f
bW9kZWxCb3VuZGluZ0luZm8gPSBtb2RlbEJvdW5kaW5nSW5mbzsKKyAgICAgICAgICAgIHRoaXMu
X2JvdW5kaW5nSW5mbyA9IG5ldyBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siQm91bmRpbmdJbmZvIl0obW9kZWxCb3VuZGluZ0luZm8ubWluaW11bSwg
bW9kZWxCb3VuZGluZ0luZm8ubWF4aW11bSk7CisgICAgICAgIH0KKyAgICB9CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFNvbGlkUGFydGljbGUucHJvdG90eXBlLCAic2NhbGUiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBMZWdhY3kgc3VwcG9ydCwgY2hhbmdlZCBzY2FsZSB0byBzY2Fs
aW5nCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLnNjYWxpbmc7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAg
KiBMZWdhY3kgc3VwcG9ydCwgY2hhbmdlZCBzY2FsZSB0byBzY2FsaW5nCisgICAgICAgICAqLwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzY2FsZSkgeworICAgICAgICAgICAgdGhpcy5zY2FsaW5n
ID0gc2NhbGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShT
b2xpZFBhcnRpY2xlLnByb3RvdHlwZSwgInF1YXRlcm5pb24iLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBMZWdhY3kgc3VwcG9ydCwgY2hhbmdlZCBxdWF0ZXJuaW9uIHRvIHJvdGF0aW9uUXVh
dGVybmlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5yb3RhdGlvblF1YXRlcm5pb247CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBMZWdhY3kgc3VwcG9ydCwgY2hhbmdlZCBxdWF0ZXJuaW9uIHRvIHJv
dGF0aW9uUXVhdGVybmlvbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAocSkg
eworICAgICAgICAgICAgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24gPSBxOworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbi4gVHJ1ZSBpZiB0aGUgcGFy
dGljbGUgaW50ZXJzZWN0cyBhbm90aGVyIHBhcnRpY2xlIG9yIGFub3RoZXIgbWVzaCwgZWxzZSBm
YWxzZS4KKyAgICAgKiBUaGUgaW50ZXJzZWN0aW9uIGlzIGNvbXB1dGVkIG9uIHRoZSBwYXJ0aWNs
ZSBib3VuZGluZyBzcGhlcmUgYW5kIEF4aXMgQWxpZ25lZCBCb3VuZGluZyBCb3ggKEFBQkIpCisg
ICAgICogQHBhcmFtIHRhcmdldCBpcyB0aGUgb2JqZWN0IChzb2xpZCBwYXJ0aWNsZSBvciBtZXNo
KSB3aGF0IHRoZSBpbnRlcnNlY3Rpb24gaXMgY29tcHV0ZWQgYWdhaW5zdC4KKyAgICAgKiBAcmV0
dXJucyB0cnVlIGlmIGl0IGludGVyc2VjdHMKKyAgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlLnBy
b3RvdHlwZS5pbnRlcnNlY3RzTWVzaCA9IGZ1bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9ib3VuZGluZ0luZm8gfHwgIXRhcmdldC5fYm91bmRpbmdJbmZvKSB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Nwcy5fYlNw
aGVyZU9ubHkpIHsKKyAgICAgICAgICAgIHJldHVybiBfQ3VsbGluZ19ib3VuZGluZ1NwaGVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJCb3VuZGluZ1NwaGVyZSJdLkludGVyc2VjdHMo
dGhpcy5fYm91bmRpbmdJbmZvLmJvdW5kaW5nU3BoZXJlLCB0YXJnZXQuX2JvdW5kaW5nSW5mby5i
b3VuZGluZ1NwaGVyZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kaW5n
SW5mby5pbnRlcnNlY3RzKHRhcmdldC5fYm91bmRpbmdJbmZvLCBmYWxzZSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc29saWQgcGFydGljbGUgaXMgd2l0
aGluIHRoZSBmcnVzdHVtIGRlZmluZWQgYnkgdGhlIHBhc3NlZCBhcnJheSBvZiBwbGFuZXMuCisg
ICAgICogQSBwYXJ0aWNsZSBpcyBpbiB0aGUgZnJ1c3R1bSBpZiBpdHMgYm91bmRpbmcgYm94IGlu
dGVyc2VjdHMgdGhlIGZydXN0dW0KKyAgICAgKiBAcGFyYW0gZnJ1c3R1bVBsYW5lcyBkZWZpbmVz
IHRoZSBmcnVzdHVtIHRvIHRlc3QKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBwYXJ0aWNs
ZSBpcyBpbiB0aGUgZnJ1c3R1bSBwbGFuZXMKKyAgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlLnBy
b3RvdHlwZS5pc0luRnJ1c3R1bSA9IGZ1bmN0aW9uIChmcnVzdHVtUGxhbmVzKSB7CisgICAgICAg
IHJldHVybiB0aGlzLl9ib3VuZGluZ0luZm8gIT09IG51bGwgJiYgdGhpcy5fYm91bmRpbmdJbmZv
LmlzSW5GcnVzdHVtKGZydXN0dW1QbGFuZXMsIHRoaXMuY3VsbGluZ1N0cmF0ZWd5KTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIGdldCB0aGUgcm90YXRpb24gbWF0cml4IG9mIHRoZSBwYXJ0aWNs
ZQorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlLnByb3RvdHlwZS5n
ZXRSb3RhdGlvbk1hdHJpeCA9IGZ1bmN0aW9uIChtKSB7CisgICAgICAgIHZhciBxdWF0ZXJuaW9u
OworICAgICAgICBpZiAodGhpcy5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIHF1
YXRlcm5pb24gPSB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbjsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHF1YXRlcm5pb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLlF1YXRlcm5pb25bMF07CisgICAg
ICAgICAgICB2YXIgcm90YXRpb24gPSB0aGlzLnJvdGF0aW9uOworICAgICAgICAgICAgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlF1YXRlcm5pb24iXS5S
b3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKHJvdGF0aW9uLnksIHJvdGF0aW9uLngsIHJvdGF0aW9u
LnosIHF1YXRlcm5pb24pOworICAgICAgICB9CisgICAgICAgIHF1YXRlcm5pb24udG9Sb3RhdGlv
bk1hdHJpeChtKTsKKyAgICB9OworICAgIHJldHVybiBTb2xpZFBhcnRpY2xlOworfSgpKTsKKwor
LyoqCisgKiBSZXByZXNlbnRzIHRoZSBzaGFwZSBvZiB0aGUgbW9kZWwgdXNlZCBieSBvbmUgcGFy
dGljbGUgb2YgYSBzb2xpZCBwYXJ0aWNsZSBzeXN0ZW0uCisgKiBTUFMgaW50ZXJuYWwgdG9vbCwg
ZG9uJ3QgdXNlIGl0IG1hbnVhbGx5LgorICovCit2YXIgTW9kZWxTaGFwZSA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgTW9kZWxTaGFwZSBv
YmplY3QuIFRoaXMgaXMgYW4gaW50ZXJuYWwgc2ltcGxpZmllZCByZWZlcmVuY2UgdG8gYSBtZXNo
IHVzZWQgYXMgZm9yIGEgbW9kZWwgdG8gcmVwbGljYXRlIHBhcnRpY2xlcyBmcm9tIGJ5IHRoZSBT
UFMuCisgICAgICogU1BTIGludGVybmFsIHRvb2wsIGRvbid0IHVzZSBpdCBtYW51YWxseS4KKyAg
ICAgKiBAaGlkZGVuCisgICAgICovCisgICAgZnVuY3Rpb24gTW9kZWxTaGFwZShpZCwgc2hhcGUs
IGluZGljZXNMZW5ndGgsIHNoYXBlVVYsIHBvc0Z1bmN0aW9uLCB2dHhGdW5jdGlvbikgeworICAg
ICAgICAvKioKKyAgICAgICAgICogbGVuZ3RoIG9mIHRoZSBzaGFwZSBpbiB0aGUgbW9kZWwgaW5k
aWNlcyBhcnJheSAoaW50ZXJuYWwgdXNlKQorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAq
LworICAgICAgICB0aGlzLl9pbmRpY2VzTGVuZ3RoID0gMDsKKyAgICAgICAgdGhpcy5zaGFwZUlE
ID0gaWQ7CisgICAgICAgIHRoaXMuX3NoYXBlID0gc2hhcGU7CisgICAgICAgIHRoaXMuX2luZGlj
ZXNMZW5ndGggPSBpbmRpY2VzTGVuZ3RoOworICAgICAgICB0aGlzLl9zaGFwZVVWID0gc2hhcGVV
VjsKKyAgICAgICAgdGhpcy5fcG9zaXRpb25GdW5jdGlvbiA9IHBvc0Z1bmN0aW9uOworICAgICAg
ICB0aGlzLl92ZXJ0ZXhGdW5jdGlvbiA9IHZ0eEZ1bmN0aW9uOworICAgIH0KKyAgICByZXR1cm4g
TW9kZWxTaGFwZTsKK30oKSk7CisKKy8qKgorICogUmVwcmVzZW50cyBhIERlcHRoIFNvcnRlZCBQ
YXJ0aWNsZSBpbiB0aGUgc29saWQgcGFydGljbGUgc3lzdGVtLgorICovCit2YXIgRGVwdGhTb3J0
ZWRQYXJ0aWNsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBE
ZXB0aFNvcnRlZFBhcnRpY2xlKCkgeworICAgICAgICAvKioKKyAgICAgICAgICogSW5kZXggb2Yg
dGhlIHBhcnRpY2xlIGluIHRoZSAiaW5kaWNlcyIgYXJyYXkKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuaW5kID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExlbmd0aCBvZiB0aGUgcGFy
dGljbGUgc2hhcGUgaW4gdGhlICJpbmRpY2VzIiBhcnJheQorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5pbmRpY2VzTGVuZ3RoID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNxdWFyZWQg
ZGlzdGFuY2UgZnJvbSB0aGUgcGFydGljbGUgdG8gdGhlIGNhbWVyYQorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5zcURpc3RhbmNlID0gMC4wOworICAgIH0KKyAgICByZXR1cm4gRGVwdGhTb3J0
ZWRQYXJ0aWNsZTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGFydGljbGVz
L3NvbGlkUGFydGljbGVTeXN0ZW0udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9QYXJ0aWNsZXMvc29saWRQYXJ0aWNsZVN5c3Rl
bS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogU29saWRQYXJ0aWNsZVN5c3RlbSAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTb2xpZFBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBTb2xpZFBhcnRpY2xlU3lzdGVtOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21h
dGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfY29s
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01l
c2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWVzaGVzL21lc2gudmVydGV4RGF0YSAqLyAiLi9NZXNoZXMvbWVzaC52ZXJ0
ZXhEYXRhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNo
ZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NZXNoZXNfQnVpbGRlcnNfZGlzY0J1aWxkZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9CdWlsZGVycy9kaXNjQnVpbGRl
ciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvZGlzY0J1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9lbmdpbmVTdG9yZSAqLyAi
Li9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Nv
bGlkUGFydGljbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vc29saWRQYXJ0aWNsZSAqLyAiLi9QYXJ0aWNsZXMvc29saWRQYXJ0aWNsZS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DdWxsaW5nX2JvdW5kaW5nSW5mb19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ3Vs
bGluZy9ib3VuZGluZ0luZm8gKi8gIi4vQ3VsbGluZy9ib3VuZGluZ0luZm8udHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmF4aXMgKi8g
Ii4vTWF0aHMvbWF0aC5heGlzLnRzIik7CisKKworCisKKworCisKKworCisKK3ZhciBkZXB0aFNv
cnRGdW5jdGlvbiA9IGZ1bmN0aW9uIChwMSwgcDIpIHsgcmV0dXJuIHAyLnNxRGlzdGFuY2UgLSBw
MS5zcURpc3RhbmNlOyB9OworLyoqCisgKiBUaGUgU1BTIGlzIGEgc2luZ2xlIHVwZGF0YWJsZSBt
ZXNoLiBUaGUgc29saWQgcGFydGljbGVzIGFyZSBzaW1wbHkgc2VwYXJhdGUgcGFydHMgb3IgZmFj
ZXMgZm8gdGhpcyBiaWcgbWVzaC4KKyAqQXMgaXQgaXMganVzdCBhIG1lc2gsIHRoZSBTUFMgaGFz
IGFsbCB0aGUgc2FtZSBwcm9wZXJ0aWVzIHRoYW4gYW55IG90aGVyIEJKUyBtZXNoIDogbm90IG1v
cmUsIG5vdCBsZXNzLiBJdCBjYW4gYmUgc2NhbGVkLCByb3RhdGVkLCB0cmFuc2xhdGVkLCBlbmxp
Z2h0ZWQsIHRleHR1cmVkLCBtb3ZlZCwgZXRjLgorCisgKiBUaGUgU1BTIGlzIGFsc28gYSBwYXJ0
aWNsZSBzeXN0ZW0uIEl0IHByb3ZpZGVzIHNvbWUgbWV0aG9kcyB0byBtYW5hZ2UgdGhlIHBhcnRp
Y2xlcy4KKyAqIEhvd2V2ZXIgaXQgaXMgYmVoYXZpb3IgYWdub3N0aWMuIFRoaXMgbWVhbnMgaXQg
aGFzIG5vIGVtaXR0ZXIsIG5vIHBhcnRpY2xlIHBoeXNpY3MsIG5vIHBhcnRpY2xlIHJlY3ljbGVy
LiBZb3UgaGF2ZSB0byBpbXBsZW1lbnQgeW91ciBvd24gYmVoYXZpb3IuCisgKgorICogRnVsbCBk
b2N1bWVudGF0aW9uIGhlcmUgOiBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL1NvbGlk
X1BhcnRpY2xlX1N5c3RlbQorICovCit2YXIgU29saWRQYXJ0aWNsZVN5c3RlbSA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgU1BTIChTb2xp
ZCBQYXJ0aWNsZSBTeXN0ZW0pIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gbmFtZSAoU3RyaW5nKSBp
cyB0aGUgU1BTIG5hbWUsIHRoaXMgd2lsbCBiZSB0aGUgdW5kZXJseWluZyBtZXNoIG5hbWUuCisg
ICAgICogQHBhcmFtIHNjZW5lIChTY2VuZSkgaXMgdGhlIHNjZW5lIGluIHdoaWNoIHRoZSBTUFMg
aXMgYWRkZWQuCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0aGUgb3B0aW9ucyBvZiB0
aGUgc3BzIGUuZy4KKyAgICAgKiAqIHVwZGF0YWJsZSAob3B0aW9uYWwgYm9vbGVhbiwgZGVmYXVs
dCB0cnVlKSA6IGlmIHRoZSBTUFMgbXVzdCBiZSB1cGRhdGFibGUgb3IgaW1tdXRhYmxlLgorICAg
ICAqICogaXNQaWNrYWJsZSAob3B0aW9uYWwgYm9vbGVhbiwgZGVmYXVsdCBmYWxzZSkgOiBpZiB0
aGUgc29saWQgcGFydGljbGVzIG11c3QgYmUgcGlja2FibGUuCisgICAgICogKiBlbmFibGVEZXB0
aFNvcnQgKG9wdGlvbmFsIGJvb2xlYW4sIGRlZmF1bHQgZmFsc2UpIDogaWYgdGhlIHNvbGlkIHBh
cnRpY2xlcyBtdXN0IGJlIHNvcnRlZCBpbiB0aGUgZ2VvbWV0cnkgYWNjb3JkaW5nIHRvIHRoZWly
IGRpc3RhbmNlIHRvIHRoZSBjYW1lcmEuCisgICAgICogKiBwYXJ0aWNsZUludGVyc2VjdGlvbiAo
b3B0aW9uYWwgYm9vbGVhbiwgZGVmYXVsdCBmYWxzZSkgOiBpZiB0aGUgc29saWQgcGFydGljbGUg
aW50ZXJzZWN0aW9ucyBtdXN0IGJlIGNvbXB1dGVkLgorICAgICAqICogYm91bmRpbmdTcGhlcmVP
bmx5IChvcHRpb25hbCBib29sZWFuLCBkZWZhdWx0IGZhbHNlKSA6IGlmIHRoZSBwYXJ0aWNsZSBp
bnRlcnNlY3Rpb24gbXVzdCBiZSBjb21wdXRlZCBvbmx5IHdpdGggdGhlIGJvdW5kaW5nIHNwaGVy
ZSAobm8gYm91bmRpbmcgYm94IGNvbXB1dGF0aW9uLCBzbyBmYXN0ZXIpLgorICAgICAqICogYlNw
aGVyZVJhZGl1c0ZhY3RvciAob3B0aW9uYWwgZmxvYXQsIGRlZmF1bHQgMS4wKSA6IGEgbnVtYmVy
IHRvIG11bHRpcGx5IHRoZSBib3VuZGluZCBzcGhlcmUgcmFkaXVzIGJ5IGluIG9yZGVyIHRvIHJl
ZHVjZSBpdCBmb3IgaW5zdGFuY2UuCisgICAgICogQGV4YW1wbGUgYlNwaGVyZVJhZGl1c0ZhY3Rv
ciA9IDEuMCAvIE1hdGguc3FydCgzLjApID0+IHRoZSBib3VuZGluZyBzcGhlcmUgZXhhY3RseSBt
YXRjaGVzIGEgc3BoZXJpY2FsIG1lc2guCisgICAgICovCisgICAgZnVuY3Rpb24gU29saWRQYXJ0
aWNsZVN5c3RlbShuYW1lLCBzY2VuZSwgb3B0aW9ucykgeworICAgICAgICAvKioKKyAgICAgICAg
ICogIFRoZSBTUFMgYXJyYXkgb2YgU29saWQgUGFydGljbGUgb2JqZWN0cy4gSnVzdCBhY2Nlc3Mg
ZWFjaCBwYXJ0aWNsZSBhcyB3aXRoIGFueSBjbGFzc2ljIGFycmF5LgorICAgICAgICAgKiAgRXhh
bXBsZSA6IHZhciBwID0gU1BTLnBhcnRpY2xlc1tpXTsKKyAgICAgICAgICovCisgICAgICAgIHRo
aXMucGFydGljbGVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
U1BTIHRvdGFsIG51bWJlciBvZiBwYXJ0aWNsZXMuIFJlYWQgb25seS4gVXNlIFNQUy5jb3VudGVy
IGluc3RlYWQgaWYgeW91IG5lZWQgdG8gc2V0IHlvdXIgb3duIHZhbHVlLgorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5uYlBhcnRpY2xlcyA9IDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJ
ZiB0aGUgcGFydGljbGVzIG11c3QgZXZlciBmYWNlIHRoZSBjYW1lcmEgKGRlZmF1bHQgZmFsc2Up
LiBVc2VmdWwgZm9yIHBsYW5hciBwYXJ0aWNsZXMuCisgICAgICAgICAqLworICAgICAgICB0aGlz
LmJpbGxib2FyZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogUmVjb21wdXRlIG5v
cm1hbHMgd2hlbiBhZGRpbmcgYSBzaGFwZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZWNv
bXB1dGVOb3JtYWxzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgYSBjb3Vu
dGVyIG9mciB5b3VyIG93biB1c2FnZS4gSXQncyBub3Qgc2V0IGJ5IGFueSBTUFMgZnVuY3Rpb25z
LgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5jb3VudGVyID0gMDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFRoaXMgZW1wdHkgb2JqZWN0IGlzIGludGVuZGVkIHRvIHN0b3JlIHNvbWUgU1BT
IHNwZWNpZmljIG9yIHRlbXBvcmFyeSB2YWx1ZXMgaW4gb3JkZXIgdG8gbG93ZXIgdGhlIEdhcmJh
Z2UgQ29sbGVjdG9yIGFjdGl2aXR5LgorICAgICAgICAgKiBQbGVhc2UgcmVhZCA6IGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI2dhcmJhZ2UtY29s
bGVjdG9yLWNvbmNlcm5zCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZhcnMgPSB7fTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBwYXJ0aWNsZSBpbnRlcnNlY3Rpb24gbXVzdCBi
ZSBjb21wdXRlZCBvbmx5IHdpdGggdGhlIGJvdW5kaW5nIHNwaGVyZSAobm8gYm91bmRpbmcgYm94
IGNvbXB1dGF0aW9uLCBzbyBmYXN0ZXIpLiAoSW50ZXJuYWwgdXNlIG9ubHkpCisgICAgICAgICAq
IEBoaWRkZW4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX2JTcGhlcmVPbmx5ID0gZmFsc2U7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBBIG51bWJlciB0byBtdWx0aXBseSB0aGUgYm91bmRp
bmQgc3BoZXJlIHJhZGl1cyBieSBpbiBvcmRlciB0byByZWR1Y2UgaXQgZm9yIGluc3RhbmNlLiAo
SW50ZXJuYWwgdXNlIG9ubHkpCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMuX2JTcGhlcmVSYWRpdXNGYWN0b3IgPSAxLjA7CisgICAgICAgIHRoaXMuX3Bvc2l0
aW9ucyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLl9pbmRpY2VzID0gbmV3IEFycmF5KCk7
CisgICAgICAgIHRoaXMuX25vcm1hbHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fY29s
b3JzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX3V2cyA9IG5ldyBBcnJheSgpOworICAg
ICAgICB0aGlzLl9pbmRleCA9IDA7IC8vIGluZGljZXMgaW5kZXgKKyAgICAgICAgdGhpcy5fdXBk
YXRhYmxlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fcGlja2FibGUgPSBmYWxzZTsKKyAgICAgICAg
dGhpcy5faXNWaXNpYmlsaXR5Qm94TG9ja2VkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2Fsd2F5
c1Zpc2libGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZGVwdGhTb3J0ID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX3NoYXBlQ291bnRlciA9IDA7CisgICAgICAgIHRoaXMuX2NvcHkgPSBuZXcgX3Nv
bGlkUGFydGljbGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siU29saWRQYXJ0aWNsZSJd
KDAsIDAsIDAsIG51bGwsIDAsIDAsIHRoaXMpOworICAgICAgICB0aGlzLl9jb2xvciA9IG5ldyBf
TWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb2xvcjQiXSgw
LCAwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fY29tcHV0ZVBhcnRpY2xlQ29sb3IgPSB0cnVlOwor
ICAgICAgICB0aGlzLl9jb21wdXRlUGFydGljbGVUZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgdGhp
cy5fY29tcHV0ZVBhcnRpY2xlUm90YXRpb24gPSB0cnVlOworICAgICAgICB0aGlzLl9jb21wdXRl
UGFydGljbGVWZXJ0ZXggPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY29tcHV0ZUJvdW5kaW5nQm94
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2RlcHRoU29ydFBhcnRpY2xlcyA9IHRydWU7CisgICAg
ICAgIHRoaXMuX211c3RVbnJvdGF0ZUZpeGVkTm9ybWFscyA9IGZhbHNlOworICAgICAgICB0aGlz
Ll9wYXJ0aWNsZXNJbnRlcnNlY3QgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbmVlZHMzMkJpdHMg
PSBmYWxzZTsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5fc2NlbmUg
PSBzY2VuZSB8fCBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fWyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7CisgICAgICAgIHRoaXMuX2NhbWVy
YSA9IHNjZW5lLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAgdGhpcy5fcGlja2FibGUgPSBvcHRpb25z
ID8gb3B0aW9ucy5pc1BpY2thYmxlIDogZmFsc2U7CisgICAgICAgIHRoaXMuX2RlcHRoU29ydCA9
IG9wdGlvbnMgPyBvcHRpb25zLmVuYWJsZURlcHRoU29ydCA6IGZhbHNlOworICAgICAgICB0aGlz
Ll9wYXJ0aWNsZXNJbnRlcnNlY3QgPSBvcHRpb25zID8gb3B0aW9ucy5wYXJ0aWNsZUludGVyc2Vj
dGlvbiA6IGZhbHNlOworICAgICAgICB0aGlzLl9iU3BoZXJlT25seSA9IG9wdGlvbnMgPyBvcHRp
b25zLmJvdW5kaW5nU3BoZXJlT25seSA6IGZhbHNlOworICAgICAgICB0aGlzLl9iU3BoZXJlUmFk
aXVzRmFjdG9yID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5iU3BoZXJlUmFkaXVzRmFjdG9yKSA/IG9w
dGlvbnMuYlNwaGVyZVJhZGl1c0ZhY3RvciA6IDEuMDsKKyAgICAgICAgaWYgKG9wdGlvbnMgJiYg
b3B0aW9ucy51cGRhdGFibGUgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdGhpcy5fdXBk
YXRhYmxlID0gb3B0aW9ucy51cGRhdGFibGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICB0aGlzLl91cGRhdGFibGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLl9waWNrYWJsZSkgeworICAgICAgICAgICAgdGhpcy5waWNrZWRQYXJ0aWNsZXMgPSBb
XTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fZGVwdGhTb3J0KSB7CisgICAgICAgICAg
ICB0aGlzLmRlcHRoU29ydGVkUGFydGljbGVzID0gW107CisgICAgICAgIH0KKyAgICB9CisgICAg
LyoqCisgICAgICogQnVpbGRzIHRoZSBTUFMgdW5kZXJseWluZyBtZXNoLiBSZXR1cm5zIGEgc3Rh
bmRhcmQgTWVzaC4KKyAgICAgKiBJZiBubyBtb2RlbCBzaGFwZSB3YXMgYWRkZWQgdG8gdGhlIFNQ
UywgdGhlIHJldHVybmVkIG1lc2ggaXMganVzdCBhIHNpbmdsZSB0cmlhbmd1bGFyIHBsYW5lLgor
ICAgICAqIEByZXR1cm5zIHRoZSBjcmVhdGVkIG1lc2gKKyAgICAgKi8KKyAgICBTb2xpZFBhcnRp
Y2xlU3lzdGVtLnByb3RvdHlwZS5idWlsZE1lc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlm
ICh0aGlzLm5iUGFydGljbGVzID09PSAwKSB7CisgICAgICAgICAgICB2YXIgdHJpYW5nbGUgPSBf
TWVzaGVzX0J1aWxkZXJzX2Rpc2NCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19b
IkRpc2NCdWlsZGVyIl0uQ3JlYXRlRGlzYygiIiwgeyByYWRpdXM6IDEsIHRlc3NlbGxhdGlvbjog
MyB9LCB0aGlzLl9zY2VuZSk7CisgICAgICAgICAgICB0aGlzLmFkZFNoYXBlKHRyaWFuZ2xlLCAx
KTsKKyAgICAgICAgICAgIHRyaWFuZ2xlLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9pbmRpY2VzMzIgPSAodGhpcy5fbmVlZHMzMkJpdHMpID8gbmV3IFVpbnQzMkFycmF5KHRo
aXMuX2luZGljZXMpIDogbmV3IFVpbnQxNkFycmF5KHRoaXMuX2luZGljZXMpOworICAgICAgICB0
aGlzLl9wb3NpdGlvbnMzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5fcG9zaXRpb25zKTsKKyAg
ICAgICAgdGhpcy5fdXZzMzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuX3V2cyk7CisgICAgICAg
IHRoaXMuX2NvbG9yczMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLl9jb2xvcnMpOworICAgICAg
ICBpZiAodGhpcy5yZWNvbXB1dGVOb3JtYWxzKSB7CisgICAgICAgICAgICBfTWVzaGVzX21lc2hf
dmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0uQ29t
cHV0ZU5vcm1hbHModGhpcy5fcG9zaXRpb25zMzIsIHRoaXMuX2luZGljZXMzMiwgdGhpcy5fbm9y
bWFscyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbm9ybWFsczMyID0gbmV3IEZsb2F0MzJB
cnJheSh0aGlzLl9ub3JtYWxzKTsKKyAgICAgICAgdGhpcy5fZml4ZWROb3JtYWwzMiA9IG5ldyBG
bG9hdDMyQXJyYXkodGhpcy5fbm9ybWFscyk7CisgICAgICAgIGlmICh0aGlzLl9tdXN0VW5yb3Rh
dGVGaXhlZE5vcm1hbHMpIHsgLy8gdGhlIHBhcnRpY2xlcyBjb3VsZCBiZSBjcmVhdGVkIGFscmVh
ZHkgcm90YXRlZCBpbiB0aGUgbWVzaCB3aXRoIGEgcG9zaXRpb25GdW5jdGlvbgorICAgICAgICAg
ICAgdGhpcy5fdW5yb3RhdGVGaXhlZE5vcm1hbHMoKTsKKyAgICAgICAgfQorICAgICAgICB2YXIg
dmVydGV4RGF0YSA9IG5ldyBfTWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAgICAgICAgdmVydGV4RGF0YS5pbmRpY2Vz
ID0gKHRoaXMuX2RlcHRoU29ydCkgPyB0aGlzLl9pbmRpY2VzIDogdGhpcy5faW5kaWNlczMyOwor
ICAgICAgICB2ZXJ0ZXhEYXRhLnNldCh0aGlzLl9wb3NpdGlvbnMzMiwgX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5k
KTsKKyAgICAgICAgdmVydGV4RGF0YS5zZXQodGhpcy5fbm9ybWFsczMyLCBfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5k
KTsKKyAgICAgICAgaWYgKHRoaXMuX3V2czMyLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHZl
cnRleERhdGEuc2V0KHRoaXMuX3V2czMyLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9jb2xvcnMzMi5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB2ZXJ0ZXhEYXRh
LnNldCh0aGlzLl9jb2xvcnMzMiwgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAgICAgfQorICAgICAgICB2
YXIgbWVzaCA9IG5ldyBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1si
TWVzaCJdKHRoaXMubmFtZSwgdGhpcy5fc2NlbmUpOworICAgICAgICB2ZXJ0ZXhEYXRhLmFwcGx5
VG9NZXNoKG1lc2gsIHRoaXMuX3VwZGF0YWJsZSk7CisgICAgICAgIHRoaXMubWVzaCA9IG1lc2g7
CisgICAgICAgIHRoaXMubWVzaC5pc1BpY2thYmxlID0gdGhpcy5fcGlja2FibGU7CisgICAgICAg
IC8vIGZyZWUgbWVtb3J5CisgICAgICAgIGlmICghdGhpcy5fZGVwdGhTb3J0KSB7CisgICAgICAg
ICAgICB0aGlzLl9pbmRpY2VzID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9wb3Np
dGlvbnMgPSBudWxsOworICAgICAgICB0aGlzLl9ub3JtYWxzID0gbnVsbDsKKyAgICAgICAgdGhp
cy5fdXZzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY29sb3JzID0gbnVsbDsKKyAgICAgICAgaWYg
KCF0aGlzLl91cGRhdGFibGUpIHsKKyAgICAgICAgICAgIHRoaXMucGFydGljbGVzLmxlbmd0aCA9
IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1lc2g7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBEaWdlc3RzIHRoZSBtZXNoIGFuZCBnZW5lcmF0ZXMgYXMgbWFueSBzb2xpZCBwYXJ0aWNs
ZXMgaW4gdGhlIHN5c3RlbSBhcyB3YW50ZWQuIFJldHVybnMgdGhlIFNQUy4KKyAgICAgKiBUaGVz
ZSBwYXJ0aWNsZXMgd2lsbCBoYXZlIHRoZSBzYW1lIGdlb21ldHJ5IHRoYW4gdGhlIG1lc2ggcGFy
dHMgYW5kIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgc2FtZSBsb2NhbGlzYXRpb24gdGhhbiB0
aGUgbWVzaCBvcmlnaW5hbCBwbGFjZXMuCisgICAgICogVGh1cyB0aGUgcGFydGljbGVzIGdlbmVy
YXRlZCBmcm9tIGBkaWdlc3QoKWAgaGF2ZSB0aGVpciBwcm9wZXJ0eSBgcG9zaXRpb25gIHNldCB5
ZXQuCisgICAgICogQHBhcmFtIG1lc2ggKCBNZXNoICkgaXMgdGhlIG1lc2ggdG8gYmUgZGlnZXN0
ZWQKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyB7ZmFjZXROYn0gKG9wdGlvbmFsIGludGVnZXIsIGRl
ZmF1bHQgMSkgaXMgdGhlIG51bWJlciBvZiBtZXNoIGZhY2V0cyBwZXIgcGFydGljbGUsIHRoaXMg
cGFyYW1ldGVyIGlzIG92ZXJyaWRlbiBieSB0aGUgcGFyYW1ldGVyIGBudW1iZXJgIGlmIGFueQor
ICAgICAqIHtkZWx0YX0gKG9wdGlvbmFsIGludGVnZXIsIGRlZmF1bHQgMCkgaXMgdGhlIHJhbmRv
bSBleHRyYSBudW1iZXIgb2YgZmFjZXRzIHBlciBwYXJ0aWNsZSAsIGVhY2ggcGFydGljbGUgd2ls
bCBoYXZlIGJldHdlZW4gYGZhY2V0TmJgIGFuZCBgZmFjZXROYiArIGRlbHRhYCBmYWNldHMKKyAg
ICAgKiB7bnVtYmVyfSAob3B0aW9uYWwgcG9zaXRpdmUgaW50ZWdlcikgaXMgdGhlIHdhbnRlZCBu
dW1iZXIgb2YgcGFydGljbGVzIDogZWFjaCBwYXJ0aWNsZSBpcyBidWlsdCB3aXRoIGBtZXNoX3Rv
dGFsX2ZhY2V0cyAvIG51bWJlcmAgZmFjZXRzCisgICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQg
U1BTCisgICAgICovCisgICAgU29saWRQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuZGlnZXN0ID0g
ZnVuY3Rpb24gKG1lc2gsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIHNpemUgPSAob3B0aW9ucyAm
JiBvcHRpb25zLmZhY2V0TmIpIHx8IDE7CisgICAgICAgIHZhciBudW1iZXIgPSAob3B0aW9ucyAm
JiBvcHRpb25zLm51bWJlcikgfHwgMDsKKyAgICAgICAgdmFyIGRlbHRhID0gKG9wdGlvbnMgJiYg
b3B0aW9ucy5kZWx0YSkgfHwgMDsKKyAgICAgICAgdmFyIG1lc2hQb3MgPSBtZXNoLmdldFZlcnRp
Y2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0
ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpOworICAgICAgICB2YXIgbWVzaEluZCA9IG1lc2guZ2V0
SW5kaWNlcygpOworICAgICAgICB2YXIgbWVzaFVWID0gbWVzaC5nZXRWZXJ0aWNlc0RhdGEoX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0u
VVZLaW5kKTsKKyAgICAgICAgdmFyIG1lc2hDb2wgPSBtZXNoLmdldFZlcnRpY2VzRGF0YShfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5D
b2xvcktpbmQpOworICAgICAgICB2YXIgbWVzaE5vciA9IG1lc2guZ2V0VmVydGljZXNEYXRhKF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJd
Lk5vcm1hbEtpbmQpOworICAgICAgICB2YXIgZiA9IDA7IC8vIGZhY2V0IGNvdW50ZXIKKyAgICAg
ICAgdmFyIHRvdGFsRmFjZXRzID0gbWVzaEluZC5sZW5ndGggLyAzOyAvLyBhIGZhY2V0IGlzIGEg
dHJpYW5nbGUsIHNvIDMgaW5kaWNlcworICAgICAgICAvLyBjb21wdXRlIHNpemUgZnJvbSBudW1i
ZXIKKyAgICAgICAgaWYgKG51bWJlcikgeworICAgICAgICAgICAgbnVtYmVyID0gKG51bWJlciA+
IHRvdGFsRmFjZXRzKSA/IHRvdGFsRmFjZXRzIDogbnVtYmVyOworICAgICAgICAgICAgc2l6ZSA9
IE1hdGgucm91bmQodG90YWxGYWNldHMgLyBudW1iZXIpOworICAgICAgICAgICAgZGVsdGEgPSAw
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2l6ZSA9IChzaXplID4g
dG90YWxGYWNldHMpID8gdG90YWxGYWNldHMgOiBzaXplOworICAgICAgICB9CisgICAgICAgIHZh
ciBmYWNldFBvcyA9IFtdOyAvLyBzdWJtZXNoIHBvc2l0aW9ucworICAgICAgICB2YXIgZmFjZXRJ
bmQgPSBbXTsgLy8gc3VibWVzaCBpbmRpY2VzCisgICAgICAgIHZhciBmYWNldFVWID0gW107IC8v
IHN1Ym1lc2ggVVYKKyAgICAgICAgdmFyIGZhY2V0Q29sID0gW107IC8vIHN1Ym1lc2ggY29sb3Jz
CisgICAgICAgIHZhciBiYXJ5Y2VudGVyID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHZhciBzaXplTyA9
IHNpemU7CisgICAgICAgIHdoaWxlIChmIDwgdG90YWxGYWNldHMpIHsKKyAgICAgICAgICAgIHNp
emUgPSBzaXplTyArIE1hdGguZmxvb3IoKDEgKyBkZWx0YSkgKiBNYXRoLnJhbmRvbSgpKTsKKyAg
ICAgICAgICAgIGlmIChmID4gdG90YWxGYWNldHMgLSBzaXplKSB7CisgICAgICAgICAgICAgICAg
c2l6ZSA9IHRvdGFsRmFjZXRzIC0gZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHJl
c2V0IHRlbXAgYXJyYXlzCisgICAgICAgICAgICBmYWNldFBvcy5sZW5ndGggPSAwOworICAgICAg
ICAgICAgZmFjZXRJbmQubGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGZhY2V0VVYubGVuZ3RoID0g
MDsKKyAgICAgICAgICAgIGZhY2V0Q29sLmxlbmd0aCA9IDA7CisgICAgICAgICAgICAvLyBpdGVy
YXRlIG92ZXIgInNpemUiIGZhY2V0cworICAgICAgICAgICAgdmFyIGZpID0gMDsKKyAgICAgICAg
ICAgIGZvciAodmFyIGogPSBmICogMzsgaiA8IChmICsgc2l6ZSkgKiAzOyBqKyspIHsKKyAgICAg
ICAgICAgICAgICBmYWNldEluZC5wdXNoKGZpKTsKKyAgICAgICAgICAgICAgICB2YXIgaSA9IG1l
c2hJbmRbal07CisgICAgICAgICAgICAgICAgZmFjZXRQb3MucHVzaChtZXNoUG9zW2kgKiAzXSwg
bWVzaFBvc1tpICogMyArIDFdLCBtZXNoUG9zW2kgKiAzICsgMl0pOworICAgICAgICAgICAgICAg
IGlmIChtZXNoVVYpIHsKKyAgICAgICAgICAgICAgICAgICAgZmFjZXRVVi5wdXNoKG1lc2hVVltp
ICogMl0sIG1lc2hVVltpICogMiArIDFdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKG1lc2hDb2wpIHsKKyAgICAgICAgICAgICAgICAgICAgZmFjZXRDb2wucHVzaCht
ZXNoQ29sW2kgKiA0XSwgbWVzaENvbFtpICogNCArIDFdLCBtZXNoQ29sW2kgKiA0ICsgMl0sIG1l
c2hDb2xbaSAqIDQgKyAzXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZp
Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBjcmVhdGUgYSBtb2RlbCBzaGFwZSBm
b3IgZWFjaCBzaW5nbGUgcGFydGljbGUKKyAgICAgICAgICAgIHZhciBpZHggPSB0aGlzLm5iUGFy
dGljbGVzOworICAgICAgICAgICAgdmFyIHNoYXBlID0gdGhpcy5fcG9zVG9TaGFwZShmYWNldFBv
cyk7CisgICAgICAgICAgICB2YXIgc2hhcGVVViA9IHRoaXMuX3V2c1RvU2hhcGVVVihmYWNldFVW
KTsKKyAgICAgICAgICAgIC8vIGNvbXB1dGUgdGhlIGJhcnljZW50ZXIgb2YgdGhlIHNoYXBlCisg
ICAgICAgICAgICBiYXJ5Y2VudGVyLmNvcHlGcm9tRmxvYXRzKDAsIDAsIDApOworICAgICAgICAg
ICAgdmFyIHY7CisgICAgICAgICAgICBmb3IgKHYgPSAwOyB2IDwgc2hhcGUubGVuZ3RoOyB2Kysp
IHsKKyAgICAgICAgICAgICAgICBiYXJ5Y2VudGVyLmFkZEluUGxhY2Uoc2hhcGVbdl0pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYmFyeWNlbnRlci5zY2FsZUluUGxhY2UoMSAvIHNoYXBl
Lmxlbmd0aCk7CisgICAgICAgICAgICAvLyBzaGlmdCB0aGUgc2hhcGUgZnJvbSBpdHMgYmFyeWNl
bnRlciB0byB0aGUgb3JpZ2luCisgICAgICAgICAgICAvLyBhbmQgY29tcHV0ZSB0aGUgQkJveCBy
ZXF1aXJlZCBmb3IgaW50ZXJzZWN0aW9uLgorICAgICAgICAgICAgdmFyIG1pbmltdW0gPSBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMi
XShJbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5KTsKKyAgICAgICAgICAgIHZhciBtYXhpbXVt
ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0oLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7CisgICAgICAgICAgICBm
b3IgKHYgPSAwOyB2IDwgc2hhcGUubGVuZ3RoOyB2KyspIHsKKyAgICAgICAgICAgICAgICBzaGFw
ZVt2XS5zdWJ0cmFjdEluUGxhY2UoYmFyeWNlbnRlcik7CisgICAgICAgICAgICAgICAgbWluaW11
bS5taW5pbWl6ZUluUGxhY2VGcm9tRmxvYXRzKHNoYXBlW3ZdLngsIHNoYXBlW3ZdLnksIHNoYXBl
W3ZdLnopOworICAgICAgICAgICAgICAgIG1heGltdW0ubWF4aW1pemVJblBsYWNlRnJvbUZsb2F0
cyhzaGFwZVt2XS54LCBzaGFwZVt2XS55LCBzaGFwZVt2XS56KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBiSW5mbzsKKyAgICAgICAgICAgIGlmICh0aGlzLl9wYXJ0aWNsZXNJbnRl
cnNlY3QpIHsKKyAgICAgICAgICAgICAgICBiSW5mbyA9IG5ldyBfQ3VsbGluZ19ib3VuZGluZ0lu
Zm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQm91bmRpbmdJbmZvIl0obWluaW11bSwg
bWF4aW11bSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbW9kZWxTaGFwZSA9IG5l
dyBfc29saWRQYXJ0aWNsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJNb2RlbFNoYXBl
Il0odGhpcy5fc2hhcGVDb3VudGVyLCBzaGFwZSwgc2l6ZSAqIDMsIHNoYXBlVVYsIG51bGwsIG51
bGwpOworICAgICAgICAgICAgLy8gYWRkIHRoZSBwYXJ0aWNsZSBpbiB0aGUgU1BTCisgICAgICAg
ICAgICB2YXIgY3VycmVudFBvcyA9IHRoaXMuX3Bvc2l0aW9ucy5sZW5ndGg7CisgICAgICAgICAg
ICB2YXIgY3VycmVudEluZCA9IHRoaXMuX2luZGljZXMubGVuZ3RoOworICAgICAgICAgICAgdGhp
cy5fbWVzaEJ1aWxkZXIodGhpcy5faW5kZXgsIHNoYXBlLCB0aGlzLl9wb3NpdGlvbnMsIGZhY2V0
SW5kLCB0aGlzLl9pbmRpY2VzLCBmYWNldFVWLCB0aGlzLl91dnMsIGZhY2V0Q29sLCB0aGlzLl9j
b2xvcnMsIG1lc2hOb3IsIHRoaXMuX25vcm1hbHMsIGlkeCwgMCwgbnVsbCk7CisgICAgICAgICAg
ICB0aGlzLl9hZGRQYXJ0aWNsZShpZHgsIGN1cnJlbnRQb3MsIGN1cnJlbnRJbmQsIG1vZGVsU2hh
cGUsIHRoaXMuX3NoYXBlQ291bnRlciwgMCwgYkluZm8pOworICAgICAgICAgICAgLy8gaW5pdGlh
bGl6ZSB0aGUgcGFydGljbGUgcG9zaXRpb24KKyAgICAgICAgICAgIHRoaXMucGFydGljbGVzW3Ro
aXMubmJQYXJ0aWNsZXNdLnBvc2l0aW9uLmFkZEluUGxhY2UoYmFyeWNlbnRlcik7CisgICAgICAg
ICAgICB0aGlzLl9pbmRleCArPSBzaGFwZS5sZW5ndGg7CisgICAgICAgICAgICBpZHgrKzsKKyAg
ICAgICAgICAgIHRoaXMubmJQYXJ0aWNsZXMrKzsKKyAgICAgICAgICAgIHRoaXMuX3NoYXBlQ291
bnRlcisrOworICAgICAgICAgICAgZiArPSBzaXplOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH07CisgICAgLy8gdW5yb3RhdGUgdGhlIGZpeGVkIG5vcm1hbHMgaW4gY2Fz
ZSB0aGUgbWVzaCB3YXMgYnVpbHQgd2l0aCBwcmUtcm90YXRlZCBwYXJ0aWNsZXMsIGV4IDogdXNl
IG9mIHBvc2l0aW9uRnVuY3Rpb24gaW4gYWRkU2hhcGUoKQorICAgIFNvbGlkUGFydGljbGVTeXN0
ZW0ucHJvdG90eXBlLl91bnJvdGF0ZUZpeGVkTm9ybWFscyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdmFyIGluZGV4ID0gMDsKKyAgICAgICAgdmFyIGlkeCA9IDA7CisgICAgICAgIHZhciB0bXBO
b3JtYWwgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VG1wVmVjdG9ycyJdLlZlY3RvcjNbMF07CisgICAgICAgIHZhciBxdWF0ZXJuaW9uID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRtcFZlY3RvcnMiXS5R
dWF0ZXJuaW9uWzBdOworICAgICAgICB2YXIgaW52ZXJ0ZWRSb3RNYXRyaXggPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLk1hdHJp
eFswXTsKKyAgICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCB0aGlzLnBhcnRpY2xlcy5sZW5ndGg7
IHArKykgeworICAgICAgICAgICAgdmFyIHBhcnRpY2xlID0gdGhpcy5wYXJ0aWNsZXNbcF07Cisg
ICAgICAgICAgICB2YXIgc2hhcGUgPSBwYXJ0aWNsZS5fbW9kZWwuX3NoYXBlOworICAgICAgICAg
ICAgLy8gY29tcHV0aW5nIHRoZSBpbnZlcnNlIG9mIHRoZSByb3RhdGlvbiBtYXRyaXggZnJvbSB0
aGUgcXVhdGVybmlvbgorICAgICAgICAgICAgLy8gaXMgZXF1aXZhbGVudCB0byBjb21wdXRpbmcg
dGhlIG1hdHJpeCBvZiB0aGUgaW52ZXJzZSBxdWF0ZXJuaW9uLCBpLmUgb2YgdGhlIGNvbmp1Z2F0
ZSBxdWF0ZXJuaW9uCisgICAgICAgICAgICBpZiAocGFydGljbGUucm90YXRpb25RdWF0ZXJuaW9u
KSB7CisgICAgICAgICAgICAgICAgcGFydGljbGUucm90YXRpb25RdWF0ZXJuaW9uLmNvbmp1Z2F0
ZVRvUmVmKHF1YXRlcm5pb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHJvdGF0aW9uID0gcGFydGljbGUucm90YXRpb247CisgICAgICAg
ICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlF1YXRlcm5pb24iXS5Sb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKHJvdGF0aW9uLnksIHJvdGF0
aW9uLngsIHJvdGF0aW9uLnosIHF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgIHF1YXRlcm5p
b24uY29uanVnYXRlSW5QbGFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcXVhdGVy
bmlvbi50b1JvdGF0aW9uTWF0cml4KGludmVydGVkUm90TWF0cml4KTsKKyAgICAgICAgICAgIGZv
ciAodmFyIHB0ID0gMDsgcHQgPCBzaGFwZS5sZW5ndGg7IHB0KyspIHsKKyAgICAgICAgICAgICAg
ICBpZHggPSBpbmRleCArIHB0ICogMzsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1h
bEZyb21GbG9hdHNUb1JlZih0aGlzLl9ub3JtYWxzMzJbaWR4XSwgdGhpcy5fbm9ybWFsczMyW2lk
eCArIDFdLCB0aGlzLl9ub3JtYWxzMzJbaWR4ICsgMl0sIGludmVydGVkUm90TWF0cml4LCB0bXBO
b3JtYWwpOworICAgICAgICAgICAgICAgIHRtcE5vcm1hbC50b0FycmF5KHRoaXMuX2ZpeGVkTm9y
bWFsMzIsIGlkeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IGlkeCArIDM7
CisgICAgICAgIH0KKyAgICB9OworICAgIC8vcmVzZXQgY29weQorICAgIFNvbGlkUGFydGljbGVT
eXN0ZW0ucHJvdG90eXBlLl9yZXNldENvcHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBj
b3B5ID0gdGhpcy5fY29weTsKKyAgICAgICAgY29weS5wb3NpdGlvbi5zZXRBbGwoMCk7CisgICAg
ICAgIGNvcHkucm90YXRpb24uc2V0QWxsKDApOworICAgICAgICBjb3B5LnJvdGF0aW9uUXVhdGVy
bmlvbiA9IG51bGw7CisgICAgICAgIGNvcHkuc2NhbGluZy5zZXRBbGwoMSk7CisgICAgICAgIGNv
cHkudXZzLmNvcHlGcm9tRmxvYXRzKDAuMCwgMC4wLCAxLjAsIDEuMCk7CisgICAgICAgIGNvcHku
Y29sb3IgPSBudWxsOworICAgICAgICBjb3B5LnRyYW5zbGF0ZUZyb21QaXZvdCA9IGZhbHNlOwor
ICAgIH07CisgICAgLy8gX21lc2hCdWlsZGVyIDogaW5zZXJ0cyB0aGUgc2hhcGUgbW9kZWwgaW4g
dGhlIGdsb2JhbCBTUFMgbWVzaAorICAgIFNvbGlkUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl9t
ZXNoQnVpbGRlciA9IGZ1bmN0aW9uIChwLCBzaGFwZSwgcG9zaXRpb25zLCBtZXNoSW5kLCBpbmRp
Y2VzLCBtZXNoVVYsIHV2cywgbWVzaENvbCwgY29sb3JzLCBtZXNoTm9yLCBub3JtYWxzLCBpZHgs
IGlkeEluU2hhcGUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIHZhciB1ID0g
MDsKKyAgICAgICAgdmFyIGMgPSAwOworICAgICAgICB2YXIgbiA9IDA7CisgICAgICAgIHRoaXMu
X3Jlc2V0Q29weSgpOworICAgICAgICB2YXIgY29weSA9IHRoaXMuX2NvcHk7CisgICAgICAgIGNv
cHkuaWR4ID0gaWR4OworICAgICAgICBjb3B5LmlkeEluU2hhcGUgPSBpZHhJblNoYXBlOworICAg
ICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBvc2l0aW9uRnVuY3Rpb24pIHsgLy8gY2FsbCB0
byBjdXN0b20gcG9zaXRpb25GdW5jdGlvbgorICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvbkZ1
bmN0aW9uKGNvcHksIGlkeCwgaWR4SW5TaGFwZSk7CisgICAgICAgICAgICB0aGlzLl9tdXN0VW5y
b3RhdGVGaXhlZE5vcm1hbHMgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHZhciByb3RNYXRy
aXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1w
VmVjdG9ycyJdLk1hdHJpeFswXTsKKyAgICAgICAgdmFyIHRtcFZlcnRleCA9IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uVmVjdG9y
M1swXTsKKyAgICAgICAgdmFyIHRtcFJvdGF0ZWQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMV07CisgICAgICAg
IHZhciBwaXZvdEJhY2tUcmFuc2xhdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1syXTsKKyAgICAgICAgdmFy
IHNjYWxlZFBpdm90ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzNdOworICAgICAgICBjb3B5LmdldFJvdGF0aW9u
TWF0cml4KHJvdE1hdHJpeCk7CisgICAgICAgIGNvcHkucGl2b3QubXVsdGlwbHlUb1JlZihjb3B5
LnNjYWxpbmcsIHNjYWxlZFBpdm90KTsKKyAgICAgICAgaWYgKGNvcHkudHJhbnNsYXRlRnJvbVBp
dm90KSB7CisgICAgICAgICAgICBwaXZvdEJhY2tUcmFuc2xhdGlvbi5zZXRBbGwoMC4wKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBpdm90QmFja1RyYW5zbGF0aW9u
LmNvcHlGcm9tKHNjYWxlZFBpdm90KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgc2hhcGUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRtcFZlcnRleC5jb3B5RnJvbShz
aGFwZVtpXSk7CisgICAgICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnZlcnRleEZ1bmN0
aW9uKSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy52ZXJ0ZXhGdW5jdGlvbihjb3B5LCB0bXBW
ZXJ0ZXgsIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG1wVmVydGV4Lm11bHRpcGx5
SW5QbGFjZShjb3B5LnNjYWxpbmcpLnN1YnRyYWN0SW5QbGFjZShzY2FsZWRQaXZvdCk7CisgICAg
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYodG1wVmVydGV4LCByb3RNYXRyaXgs
IHRtcFJvdGF0ZWQpOworICAgICAgICAgICAgdG1wUm90YXRlZC5hZGRJblBsYWNlKHBpdm90QmFj
a1RyYW5zbGF0aW9uKS5hZGRJblBsYWNlKGNvcHkucG9zaXRpb24pOworICAgICAgICAgICAgcG9z
aXRpb25zLnB1c2godG1wUm90YXRlZC54LCB0bXBSb3RhdGVkLnksIHRtcFJvdGF0ZWQueik7Cisg
ICAgICAgICAgICBpZiAobWVzaFVWKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvcHlVdnMgPSBj
b3B5LnV2czsKKyAgICAgICAgICAgICAgICB1dnMucHVzaCgoY29weVV2cy56IC0gY29weVV2cy54
KSAqIG1lc2hVVlt1XSArIGNvcHlVdnMueCwgKGNvcHlVdnMudyAtIGNvcHlVdnMueSkgKiBtZXNo
VVZbdSArIDFdICsgY29weVV2cy55KTsKKyAgICAgICAgICAgICAgICB1ICs9IDI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoY29weS5jb2xvcikgeworICAgICAgICAgICAgICAgIHRo
aXMuX2NvbG9yID0gY29weS5jb2xvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHRoaXMuX2NvbG9yOworICAgICAgICAgICAg
ICAgIGlmIChtZXNoQ29sICYmIG1lc2hDb2xbY10gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgICAgICAgICBjb2xvci5yID0gbWVzaENvbFtjXTsKKyAgICAgICAgICAgICAgICAgICAgY29s
b3IuZyA9IG1lc2hDb2xbYyArIDFdOworICAgICAgICAgICAgICAgICAgICBjb2xvci5iID0gbWVz
aENvbFtjICsgMl07CisgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEgPSBtZXNoQ29sW2MgKyAz
XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbG9yLnIgPSAxLjA7CisgICAgICAgICAgICAgICAgICAgIGNvbG9yLmcgPSAx
LjA7CisgICAgICAgICAgICAgICAgICAgIGNvbG9yLmIgPSAxLjA7CisgICAgICAgICAgICAgICAg
ICAgIGNvbG9yLmEgPSAxLjA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY29sb3JzLnB1c2godGhpcy5fY29sb3IuciwgdGhpcy5fY29sb3IuZywgdGhpcy5f
Y29sb3IuYiwgdGhpcy5fY29sb3IuYSk7CisgICAgICAgICAgICBjICs9IDQ7CisgICAgICAgICAg
ICBpZiAoIXRoaXMucmVjb21wdXRlTm9ybWFscyAmJiBtZXNoTm9yKSB7CisgICAgICAgICAgICAg
ICAgdG1wVmVydGV4LnggPSBtZXNoTm9yW25dOworICAgICAgICAgICAgICAgIHRtcFZlcnRleC55
ID0gbWVzaE5vcltuICsgMV07CisgICAgICAgICAgICAgICAgdG1wVmVydGV4LnogPSBtZXNoTm9y
W24gKyAyXTsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKHRtcFZlcnRl
eCwgcm90TWF0cml4LCB0bXBWZXJ0ZXgpOworICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaCh0
bXBWZXJ0ZXgueCwgdG1wVmVydGV4LnksIHRtcFZlcnRleC56KTsKKyAgICAgICAgICAgICAgICBu
ICs9IDM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8
IG1lc2hJbmQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjdXJyZW50X2luZCA9IHAg
KyBtZXNoSW5kW2ldOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGN1cnJlbnRfaW5kKTsKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50X2luZCA+IDY1NTM1KSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fbmVlZHMzMkJpdHMgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGlmICh0aGlzLl9waWNrYWJsZSkgeworICAgICAgICAgICAgdmFyIG5iZmFjZXMgPSBtZXNoSW5k
Lmxlbmd0aCAvIDM7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmJmYWNlczsgaSsrKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5waWNrZWRQYXJ0aWNsZXMucHVzaCh7IGlkeDogaWR4LCBm
YWNlSWQ6IGkgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X2RlcHRoU29ydCkgeworICAgICAgICAgICAgdGhpcy5kZXB0aFNvcnRlZFBhcnRpY2xlcy5wdXNo
KG5ldyBfc29saWRQYXJ0aWNsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJEZXB0aFNv
cnRlZFBhcnRpY2xlIl0oKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAg
fTsKKyAgICAvLyByZXR1cm5zIGEgc2hhcGUgYXJyYXkgZnJvbSBwb3NpdGlvbnMgYXJyYXkKKyAg
ICBTb2xpZFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5fcG9zVG9TaGFwZSA9IGZ1bmN0aW9uIChw
b3NpdGlvbnMpIHsKKyAgICAgICAgdmFyIHNoYXBlID0gW107CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSArPSAzKSB7CisgICAgICAgICAgICBzaGFwZS5w
dXNoKF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0
b3IzIl0uRnJvbUFycmF5KHBvc2l0aW9ucywgaSkpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBzaGFwZTsKKyAgICB9OworICAgIC8vIHJldHVybnMgYSBzaGFwZVVWIGFycmF5IGZyb20gYSBW
ZWN0b3I0IHV2cworICAgIFNvbGlkUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLl91dnNUb1NoYXBl
VVYgPSBmdW5jdGlvbiAodXZzKSB7CisgICAgICAgIHZhciBzaGFwZVVWID0gW107CisgICAgICAg
IGlmICh1dnMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXZzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgc2hhcGVVVi5wdXNoKHV2c1tpXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNoYXBlVVY7CisgICAgfTsKKyAgICAvLyBh
ZGRzIGEgbmV3IHBhcnRpY2xlIG9iamVjdCBpbiB0aGUgcGFydGljbGVzIGFycmF5CisgICAgU29s
aWRQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuX2FkZFBhcnRpY2xlID0gZnVuY3Rpb24gKGlkeCwg
aWR4cG9zLCBpZHhpbmQsIG1vZGVsLCBzaGFwZUlkLCBpZHhJblNoYXBlLCBiSW5mbykgeworICAg
ICAgICBpZiAoYkluZm8gPT09IHZvaWQgMCkgeyBiSW5mbyA9IG51bGw7IH0KKyAgICAgICAgdmFy
IHNwID0gbmV3IF9zb2xpZFBhcnRpY2xlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlNv
bGlkUGFydGljbGUiXShpZHgsIGlkeHBvcywgaWR4aW5kLCBtb2RlbCwgc2hhcGVJZCwgaWR4SW5T
aGFwZSwgdGhpcywgYkluZm8pOworICAgICAgICB0aGlzLnBhcnRpY2xlcy5wdXNoKHNwKTsKKyAg
ICAgICAgcmV0dXJuIHNwOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBzb21lIHBhcnRp
Y2xlcyB0byB0aGUgU1BTIGZyb20gdGhlIG1vZGVsIHNoYXBlLiBSZXR1cm5zIHRoZSBzaGFwZSBp
ZC4KKyAgICAgKiBQbGVhc2UgcmVhZCB0aGUgZG9jIDogaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2hvd190by9Tb2xpZF9QYXJ0aWNsZV9TeXN0ZW0jY3JlYXRlLWFuLWltbXV0YWJsZS1zcHMKKyAg
ICAgKiBAcGFyYW0gbWVzaCBpcyBhbnkgTWVzaCBvYmplY3QgdGhhdCB3aWxsIGJlIHVzZWQgYXMg
YSBtb2RlbCBmb3IgdGhlIHNvbGlkIHBhcnRpY2xlcy4KKyAgICAgKiBAcGFyYW0gbmIgKHBvc2l0
aXZlIGludGVnZXIpIHRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRvIGJlIGNyZWF0ZWQgZnJvbSB0
aGlzIG1vZGVsCisgICAgICogQHBhcmFtIG9wdGlvbnMge3Bvc2l0aW9uRnVuY3Rpb259IGlzIGFu
IG9wdGlvbmFsIGphdmFzY3JpcHQgZnVuY3Rpb24gdG8gY2FsbGVkIGZvciBlYWNoIHBhcnRpY2xl
IG9uIFNQUyBjcmVhdGlvbi4KKyAgICAgKiB7dmVydGV4RnVuY3Rpb259IGlzIGFuIG9wdGlvbmFs
IGphdmFzY3JpcHQgZnVuY3Rpb24gdG8gY2FsbGVkIGZvciBlYWNoIHZlcnRleCBvZiBlYWNoIHBh
cnRpY2xlIG9uIFNQUyBjcmVhdGlvbgorICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2hh
cGVzIGluIHRoZSBzeXN0ZW0KKyAgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlU3lzdGVtLnByb3Rv
dHlwZS5hZGRTaGFwZSA9IGZ1bmN0aW9uIChtZXNoLCBuYiwgb3B0aW9ucykgeworICAgICAgICB2
YXIgbWVzaFBvcyA9IG1lc2guZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7CisgICAg
ICAgIHZhciBtZXNoSW5kID0gbWVzaC5nZXRJbmRpY2VzKCk7CisgICAgICAgIHZhciBtZXNoVVYg
PSBtZXNoLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICB2YXIgbWVzaENvbCA9
IG1lc2guZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCk7CisgICAgICAgIHZhciBtZXNoTm9y
ID0gbWVzaC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCk7CisgICAgICAgIHZhciBiYklu
Zm87CisgICAgICAgIGlmICh0aGlzLl9wYXJ0aWNsZXNJbnRlcnNlY3QpIHsKKyAgICAgICAgICAg
IGJiSW5mbyA9IG1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHNoYXBlID0gdGhpcy5fcG9zVG9TaGFwZShtZXNoUG9zKTsKKyAgICAgICAgdmFyIHNoYXBlVVYg
PSB0aGlzLl91dnNUb1NoYXBlVVYobWVzaFVWKTsKKyAgICAgICAgdmFyIHBvc2Z1bmMgPSBvcHRp
b25zID8gb3B0aW9ucy5wb3NpdGlvbkZ1bmN0aW9uIDogbnVsbDsKKyAgICAgICAgdmFyIHZ0eGZ1
bmMgPSBvcHRpb25zID8gb3B0aW9ucy52ZXJ0ZXhGdW5jdGlvbiA6IG51bGw7CisgICAgICAgIHZh
ciBtb2RlbFNoYXBlID0gbmV3IF9zb2xpZFBhcnRpY2xlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIk1vZGVsU2hhcGUiXSh0aGlzLl9zaGFwZUNvdW50ZXIsIHNoYXBlLCBtZXNoSW5kLmxl
bmd0aCwgc2hhcGVVViwgcG9zZnVuYywgdnR4ZnVuYyk7CisgICAgICAgIC8vIHBhcnRpY2xlcwor
ICAgICAgICB2YXIgc3A7CisgICAgICAgIHZhciBjdXJyZW50Q29weTsKKyAgICAgICAgdmFyIGlk
eCA9IHRoaXMubmJQYXJ0aWNsZXM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmI7IGkr
KykgeworICAgICAgICAgICAgdmFyIGN1cnJlbnRQb3MgPSB0aGlzLl9wb3NpdGlvbnMubGVuZ3Ro
OworICAgICAgICAgICAgdmFyIGN1cnJlbnRJbmQgPSB0aGlzLl9pbmRpY2VzLmxlbmd0aDsKKyAg
ICAgICAgICAgIGN1cnJlbnRDb3B5ID0gdGhpcy5fbWVzaEJ1aWxkZXIodGhpcy5faW5kZXgsIHNo
YXBlLCB0aGlzLl9wb3NpdGlvbnMsIG1lc2hJbmQsIHRoaXMuX2luZGljZXMsIG1lc2hVViwgdGhp
cy5fdXZzLCBtZXNoQ29sLCB0aGlzLl9jb2xvcnMsIG1lc2hOb3IsIHRoaXMuX25vcm1hbHMsIGlk
eCwgaSwgb3B0aW9ucyk7CisgICAgICAgICAgICBpZiAodGhpcy5fdXBkYXRhYmxlKSB7CisgICAg
ICAgICAgICAgICAgc3AgPSB0aGlzLl9hZGRQYXJ0aWNsZShpZHgsIGN1cnJlbnRQb3MsIGN1cnJl
bnRJbmQsIG1vZGVsU2hhcGUsIHRoaXMuX3NoYXBlQ291bnRlciwgaSwgYmJJbmZvKTsKKyAgICAg
ICAgICAgICAgICBzcC5wb3NpdGlvbi5jb3B5RnJvbShjdXJyZW50Q29weS5wb3NpdGlvbik7Cisg
ICAgICAgICAgICAgICAgc3Aucm90YXRpb24uY29weUZyb20oY3VycmVudENvcHkucm90YXRpb24p
OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29weS5yb3RhdGlvblF1YXRlcm5pb24gJiYg
c3Aucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHNwLnJvdGF0aW9u
UXVhdGVybmlvbi5jb3B5RnJvbShjdXJyZW50Q29weS5yb3RhdGlvblF1YXRlcm5pb24pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvcHkuY29sb3IgJiYg
c3AuY29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgc3AuY29sb3IuY29weUZyb20oY3VycmVu
dENvcHkuY29sb3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcC5zY2Fs
aW5nLmNvcHlGcm9tKGN1cnJlbnRDb3B5LnNjYWxpbmcpOworICAgICAgICAgICAgICAgIHNwLnV2
cy5jb3B5RnJvbShjdXJyZW50Q29weS51dnMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5faW5kZXggKz0gc2hhcGUubGVuZ3RoOworICAgICAgICAgICAgaWR4Kys7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5uYlBhcnRpY2xlcyArPSBuYjsKKyAgICAgICAgdGhpcy5fc2hhcGVD
b3VudGVyKys7CisgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZUNvdW50ZXIgLSAxOworICAgIH07
CisgICAgLy8gcmVidWlsZHMgYSBwYXJ0aWNsZSBiYWNrIHRvIGl0cyBqdXN0IGJ1aWx0IHN0YXR1
cyA6IGlmIG5lZWRlZCwgcmVjb21wdXRlcyB0aGUgY3VzdG9tIHBvc2l0aW9ucyBhbmQgdmVydGlj
ZXMKKyAgICBTb2xpZFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5fcmVidWlsZFBhcnRpY2xlID0g
ZnVuY3Rpb24gKHBhcnRpY2xlKSB7CisgICAgICAgIHRoaXMuX3Jlc2V0Q29weSgpOworICAgICAg
ICB2YXIgY29weSA9IHRoaXMuX2NvcHk7CisgICAgICAgIGlmIChwYXJ0aWNsZS5fbW9kZWwuX3Bv
c2l0aW9uRnVuY3Rpb24pIHsgLy8gcmVjYWxsIHRvIHN0b3JlZCBjdXN0b20gcG9zaXRpb25GdW5j
dGlvbgorICAgICAgICAgICAgcGFydGljbGUuX21vZGVsLl9wb3NpdGlvbkZ1bmN0aW9uKGNvcHks
IHBhcnRpY2xlLmlkeCwgcGFydGljbGUuaWR4SW5TaGFwZSk7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIHJvdE1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdOworICAgICAgICB2YXIgdG1wVmVydGV4ID0g
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRtcFZlY3Rv
cnMiXS5WZWN0b3IzWzBdOworICAgICAgICB2YXIgdG1wUm90YXRlZCA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1sx
XTsKKyAgICAgICAgdmFyIHBpdm90QmFja1RyYW5zbGF0aW9uID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzJdOwor
ICAgICAgICB2YXIgc2NhbGVkUGl2b3QgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbM107CisgICAgICAgIGNvcHku
Z2V0Um90YXRpb25NYXRyaXgocm90TWF0cml4KTsKKyAgICAgICAgcGFydGljbGUucGl2b3QubXVs
dGlwbHlUb1JlZihwYXJ0aWNsZS5zY2FsaW5nLCBzY2FsZWRQaXZvdCk7CisgICAgICAgIGlmIChj
b3B5LnRyYW5zbGF0ZUZyb21QaXZvdCkgeworICAgICAgICAgICAgcGl2b3RCYWNrVHJhbnNsYXRp
b24uY29weUZyb21GbG9hdHMoMC4wLCAwLjAsIDAuMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBwaXZvdEJhY2tUcmFuc2xhdGlvbi5jb3B5RnJvbShzY2FsZWRQaXZv
dCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNoYXBlID0gcGFydGljbGUuX21vZGVsLl9zaGFw
ZTsKKyAgICAgICAgZm9yICh2YXIgcHQgPSAwOyBwdCA8IHNoYXBlLmxlbmd0aDsgcHQrKykgewor
ICAgICAgICAgICAgdG1wVmVydGV4LmNvcHlGcm9tKHNoYXBlW3B0XSk7CisgICAgICAgICAgICBp
ZiAocGFydGljbGUuX21vZGVsLl92ZXJ0ZXhGdW5jdGlvbikgeworICAgICAgICAgICAgICAgIHBh
cnRpY2xlLl9tb2RlbC5fdmVydGV4RnVuY3Rpb24oY29weSwgdG1wVmVydGV4LCBwdCk7IC8vIHJl
Y2FsbCB0byBzdG9yZWQgdmVydGV4RnVuY3Rpb24KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRtcFZlcnRleC5tdWx0aXBseUluUGxhY2UoY29weS5zY2FsaW5nKS5zdWJ0cmFjdEluUGxhY2Uo
c2NhbGVkUGl2b3QpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVmKHRt
cFZlcnRleCwgcm90TWF0cml4LCB0bXBSb3RhdGVkKTsKKyAgICAgICAgICAgIHRtcFJvdGF0ZWQu
YWRkSW5QbGFjZShwaXZvdEJhY2tUcmFuc2xhdGlvbikuYWRkSW5QbGFjZShjb3B5LnBvc2l0aW9u
KS50b0FycmF5KHRoaXMuX3Bvc2l0aW9uczMyLCBwYXJ0aWNsZS5fcG9zICsgcHQgKiAzKTsKKyAg
ICAgICAgfQorICAgICAgICBwYXJ0aWNsZS5wb3NpdGlvbi5zZXRBbGwoMC4wKTsKKyAgICAgICAg
cGFydGljbGUucm90YXRpb24uc2V0QWxsKDAuMCk7CisgICAgICAgIHBhcnRpY2xlLnJvdGF0aW9u
UXVhdGVybmlvbiA9IG51bGw7CisgICAgICAgIHBhcnRpY2xlLnNjYWxpbmcuc2V0QWxsKDEuMCk7
CisgICAgICAgIHBhcnRpY2xlLnV2cy5zZXRBbGwoMC4wKTsKKyAgICAgICAgcGFydGljbGUucGl2
b3Quc2V0QWxsKDAuMCk7CisgICAgICAgIHBhcnRpY2xlLnRyYW5zbGF0ZUZyb21QaXZvdCA9IGZh
bHNlOworICAgICAgICBwYXJ0aWNsZS5wYXJlbnRJZCA9IG51bGw7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZWJ1aWxkcyB0aGUgd2hvbGUgbWVzaCBhbmQgdXBkYXRlcyB0aGUgVkJPIDogY3Vz
dG9tIHBvc2l0aW9ucyBhbmQgdmVydGljZXMgYXJlIHJlY29tcHV0ZWQgaWYgbmVlZGVkLgorICAg
ICAqIEByZXR1cm5zIHRoZSBTUFMuCisgICAgICovCisgICAgU29saWRQYXJ0aWNsZVN5c3RlbS5w
cm90b3R5cGUucmVidWlsZE1lc2ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFyIHAg
PSAwOyBwIDwgdGhpcy5wYXJ0aWNsZXMubGVuZ3RoOyBwKyspIHsKKyAgICAgICAgICAgIHRoaXMu
X3JlYnVpbGRQYXJ0aWNsZSh0aGlzLnBhcnRpY2xlc1twXSk7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5tZXNoLnVwZGF0ZVZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIHRoaXMuX3Bvc2l0
aW9uczMyLCBmYWxzZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAg
IC8qKgorICAgICAqICBTZXRzIGFsbCB0aGUgcGFydGljbGVzIDogdGhpcyBtZXRob2QgYWN0dWFs
bHkgcmVhbGx5IHVwZGF0ZXMgdGhlIG1lc2ggYWNjb3JkaW5nIHRvIHRoZSBwYXJ0aWNsZSBwb3Np
dGlvbnMsIHJvdGF0aW9ucywgY29sb3JzLCB0ZXh0dXJlcywgZXRjLgorICAgICAqICBUaGlzIG1l
dGhvZCBjYWxscyBgdXBkYXRlUGFydGljbGUoKWAgZm9yIGVhY2ggcGFydGljbGUgb2YgdGhlIFNQ
Uy4KKyAgICAgKiAgRm9yIGFuIGFuaW1hdGVkIFNQUywgaXQgaXMgdXN1YWxseSBjYWxsZWQgd2l0
aGluIHRoZSByZW5kZXIgbG9vcC4KKyAgICAgKiBAcGFyYW0gc3RhcnQgVGhlIHBhcnRpY2xlIGlu
ZGV4IGluIHRoZSBwYXJ0aWNsZSBhcnJheSB3aGVyZSB0byBzdGFydCB0byBjb21wdXRlIHRoZSBw
YXJ0aWNsZSBwcm9wZXJ0eSB2YWx1ZXMgXyhkZWZhdWx0IDApXworICAgICAqIEBwYXJhbSBlbmQg
VGhlIHBhcnRpY2xlIGluZGV4IGluIHRoZSBwYXJ0aWNsZSBhcnJheSB3aGVyZSB0byBzdG9wIHRv
IGNvbXB1dGUgdGhlIHBhcnRpY2xlIHByb3BlcnR5IHZhbHVlcyBfKGRlZmF1bHQgbmJQYXJ0aWNs
ZSAtIDEpXworICAgICAqIEBwYXJhbSB1cGRhdGUgSWYgdGhlIG1lc2ggbXVzdCBiZSBmaW5hbGx5
IHVwZGF0ZWQgb24gdGhpcyBjYWxsIGFmdGVyIGFsbCB0aGUgcGFydGljbGUgY29tcHV0YXRpb25z
IF8oZGVmYXVsdCB0cnVlKV8KKyAgICAgKiBAcmV0dXJucyB0aGUgU1BTLgorICAgICAqLworICAg
IFNvbGlkUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLnNldFBhcnRpY2xlcyA9IGZ1bmN0aW9uIChz
dGFydCwgZW5kLCB1cGRhdGUpIHsKKyAgICAgICAgaWYgKHN0YXJ0ID09PSB2b2lkIDApIHsgc3Rh
cnQgPSAwOyB9CisgICAgICAgIGlmIChlbmQgPT09IHZvaWQgMCkgeyBlbmQgPSB0aGlzLm5iUGFy
dGljbGVzIC0gMTsgfQorICAgICAgICBpZiAodXBkYXRlID09PSB2b2lkIDApIHsgdXBkYXRlID0g
dHJ1ZTsgfQorICAgICAgICBpZiAoIXRoaXMuX3VwZGF0YWJsZSkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgLy8gY3VzdG9tIGJlZm9yZVVwZGF0ZQorICAg
ICAgICB0aGlzLmJlZm9yZVVwZGF0ZVBhcnRpY2xlcyhzdGFydCwgZW5kLCB1cGRhdGUpOworICAg
ICAgICB2YXIgcm90TWF0cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF07CisgICAgICAgIHZhciBpbnZlcnRl
ZE1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJUbXBWZWN0b3JzIl0uTWF0cml4WzFdOworICAgICAgICB2YXIgbWVzaCA9IHRoaXMubWVzaDsK
KyAgICAgICAgdmFyIGNvbG9yczMyID0gdGhpcy5fY29sb3JzMzI7CisgICAgICAgIHZhciBwb3Np
dGlvbnMzMiA9IHRoaXMuX3Bvc2l0aW9uczMyOworICAgICAgICB2YXIgbm9ybWFsczMyID0gdGhp
cy5fbm9ybWFsczMyOworICAgICAgICB2YXIgdXZzMzIgPSB0aGlzLl91dnMzMjsKKyAgICAgICAg
dmFyIGluZGljZXMzMiA9IHRoaXMuX2luZGljZXMzMjsKKyAgICAgICAgdmFyIGluZGljZXMgPSB0
aGlzLl9pbmRpY2VzOworICAgICAgICB2YXIgZml4ZWROb3JtYWwzMiA9IHRoaXMuX2ZpeGVkTm9y
bWFsMzI7CisgICAgICAgIHZhciB0ZW1wVmVjdG9ycyA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yMzsKKyAgICAgICAg
dmFyIGNhbUF4aXNYID0gdGVtcFZlY3RvcnNbNV0uY29weUZyb21GbG9hdHMoMS4wLCAwLjAsIDAu
MCk7CisgICAgICAgIHZhciBjYW1BeGlzWSA9IHRlbXBWZWN0b3JzWzZdLmNvcHlGcm9tRmxvYXRz
KDAuMCwgMS4wLCAwLjApOworICAgICAgICB2YXIgY2FtQXhpc1ogPSB0ZW1wVmVjdG9yc1s3XS5j
b3B5RnJvbUZsb2F0cygwLjAsIDAuMCwgMS4wKTsKKyAgICAgICAgdmFyIG1pbmltdW0gPSB0ZW1w
VmVjdG9yc1s4XS5zZXRBbGwoTnVtYmVyLk1BWF9WQUxVRSk7CisgICAgICAgIHZhciBtYXhpbXVt
ID0gdGVtcFZlY3RvcnNbOV0uc2V0QWxsKC1OdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICAgICAgdmFy
IGNhbUludmVydGVkUG9zaXRpb24gPSB0ZW1wVmVjdG9yc1sxMF0uc2V0QWxsKDApOworICAgICAg
ICAvLyBjYXNlcyB3aGVuIHRoZSBXb3JsZCBNYXRyaXggaXMgdG8gYmUgY29tcHV0ZWQgZmlyc3QK
KyAgICAgICAgaWYgKHRoaXMuYmlsbGJvYXJkIHx8IHRoaXMuX2RlcHRoU29ydCkgeworICAgICAg
ICAgICAgdGhpcy5tZXNoLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAgICAgICAgICAgIHRo
aXMubWVzaC5fd29ybGRNYXRyaXguaW52ZXJ0VG9SZWYoaW52ZXJ0ZWRNYXRyaXgpOworICAgICAg
ICB9CisgICAgICAgIC8vIGlmIHRoZSBwYXJ0aWNsZXMgd2lsbCBhbHdheXMgZmFjZSB0aGUgY2Ft
ZXJhCisgICAgICAgIGlmICh0aGlzLmJpbGxib2FyZCkgeworICAgICAgICAgICAgLy8gY29tcHV0
ZSB0aGUgY2FtZXJhIHBvc2l0aW9uIGFuZCB1bi1yb3RhdGUgaXQgYnkgdGhlIGN1cnJlbnQgbWVz
aCByb3RhdGlvbgorICAgICAgICAgICAgdmFyIHRtcFZlcnRleCA9IHRlbXBWZWN0b3JzWzBdOwor
ICAgICAgICAgICAgdGhpcy5fY2FtZXJhLmdldERpcmVjdGlvblRvUmVmKF9NYXRoc19tYXRoX2F4
aXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQXhpcyJdLlosIHRtcFZlcnRleCk7Cisg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbFRvUmVmKHRtcFZlcnRleCwgaW52ZXJ0ZWRNYXRy
aXgsIGNhbUF4aXNaKTsKKyAgICAgICAgICAgIGNhbUF4aXNaLm5vcm1hbGl6ZSgpOworICAgICAg
ICAgICAgLy8gc2FtZSBmb3IgY2FtZXJhIHVwIHZlY3RvciBleHRyYWN0ZWQgZnJvbSB0aGUgY2Ft
IHZpZXcgbWF0cml4CisgICAgICAgICAgICB2YXIgdmlldyA9IHRoaXMuX2NhbWVyYS5nZXRWaWV3
TWF0cml4KHRydWUpOworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Ob3JtYWxGcm9tRmxvYXRzVG9S
ZWYodmlldy5tWzFdLCB2aWV3Lm1bNV0sIHZpZXcubVs5XSwgaW52ZXJ0ZWRNYXRyaXgsIGNhbUF4
aXNZKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJWZWN0b3IzIl0uQ3Jvc3NUb1JlZihjYW1BeGlzWSwgY2FtQXhpc1osIGNhbUF4
aXNYKTsKKyAgICAgICAgICAgIGNhbUF4aXNZLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgY2Ft
QXhpc1gubm9ybWFsaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gaWYgZGVwdGhTb3J0LCBj
b21wdXRlIHRoZSBjYW1lcmEgZ2xvYmFsIHBvc2l0aW9uIGluIHRoZSBtZXNoIGxvY2FsIHN5c3Rl
bQorICAgICAgICBpZiAodGhpcy5fZGVwdGhTb3J0KSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9y
bUNvb3JkaW5hdGVzVG9SZWYodGhpcy5fY2FtZXJhLmdsb2JhbFBvc2l0aW9uLCBpbnZlcnRlZE1h
dHJpeCwgY2FtSW52ZXJ0ZWRQb3NpdGlvbik7IC8vIHRoZW4gdW4tcm90YXRlIHRoZSBjYW1lcmEK
KyAgICAgICAgfQorICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siTWF0cml4Il0uSWRlbnRpdHlUb1JlZihyb3RNYXRyaXgpOworICAgICAgICB2
YXIgaWR4ID0gMDsgLy8gY3VycmVudCBwb3NpdGlvbiBpbmRleCBpbiB0aGUgZ2xvYmFsIGFycmF5
IHBvc2l0aW9uczMyCisgICAgICAgIHZhciBpbmRleCA9IDA7IC8vIHBvc2l0aW9uIHN0YXJ0IGlu
ZGV4IGluIHRoZSBnbG9iYWwgYXJyYXkgcG9zaXRpb25zMzIgb2YgdGhlIGN1cnJlbnQgcGFydGlj
bGUKKyAgICAgICAgdmFyIGNvbGlkeCA9IDA7IC8vIGN1cnJlbnQgY29sb3IgaW5kZXggaW4gdGhl
IGdsb2JhbCBhcnJheSBjb2xvcnMzMgorICAgICAgICB2YXIgY29sb3JJbmRleCA9IDA7IC8vIGNv
bG9yIHN0YXJ0IGluZGV4IGluIHRoZSBnbG9iYWwgYXJyYXkgY29sb3JzMzIgb2YgdGhlIGN1cnJl
bnQgcGFydGljbGUKKyAgICAgICAgdmFyIHV2aWR4ID0gMDsgLy8gY3VycmVudCB1diBpbmRleCBp
biB0aGUgZ2xvYmFsIGFycmF5IHV2czMyCisgICAgICAgIHZhciB1dkluZGV4ID0gMDsgLy8gdXYg
c3RhcnQgaW5kZXggaW4gdGhlIGdsb2JhbCBhcnJheSB1dnMzMiBvZiB0aGUgY3VycmVudCBwYXJ0
aWNsZQorICAgICAgICB2YXIgcHQgPSAwOyAvLyBjdXJyZW50IGluZGV4IGluIHRoZSBwYXJ0aWNs
ZSBtb2RlbCBzaGFwZQorICAgICAgICBpZiAodGhpcy5tZXNoLmlzRmFjZXREYXRhRW5hYmxlZCkg
eworICAgICAgICAgICAgdGhpcy5fY29tcHV0ZUJvdW5kaW5nQm94ID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBlbmQgPSAoZW5kID49IHRoaXMubmJQYXJ0aWNsZXMpID8gdGhpcy5uYlBhcnRp
Y2xlcyAtIDEgOiBlbmQ7CisgICAgICAgIGlmICh0aGlzLl9jb21wdXRlQm91bmRpbmdCb3gpIHsK
KyAgICAgICAgICAgIGlmIChzdGFydCAhPSAwIHx8IGVuZCAhPSB0aGlzLm5iUGFydGljbGVzIC0g
MSkgeyAvLyBvbmx5IHNvbWUgcGFydGljbGVzIGFyZSB1cGRhdGVkLCB0aGVuIHVzZSB0aGUgY3Vy
cmVudCBleGlzdGluZyBCQm94IGJhc2lzLiBOb3RlIDogaXQgY2FuIG9ubHkgaW5jcmVhc2UuCisg
ICAgICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9IHRoaXMubWVzaC5fYm91bmRpbmdJbmZv
OworICAgICAgICAgICAgICAgIGlmIChib3VuZGluZ0luZm8pIHsKKyAgICAgICAgICAgICAgICAg
ICAgbWluaW11bS5jb3B5RnJvbShib3VuZGluZ0luZm8ubWluaW11bSk7CisgICAgICAgICAgICAg
ICAgICAgIG1heGltdW0uY29weUZyb20oYm91bmRpbmdJbmZvLm1heGltdW0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBwYXJ0aWNsZSBs
b29wCisgICAgICAgIGluZGV4ID0gdGhpcy5wYXJ0aWNsZXNbc3RhcnRdLl9wb3M7CisgICAgICAg
IHZhciB2cG9zID0gKGluZGV4IC8gMykgfCAwOworICAgICAgICBjb2xvckluZGV4ID0gdnBvcyAq
IDQ7CisgICAgICAgIHV2SW5kZXggPSB2cG9zICogMjsKKyAgICAgICAgZm9yICh2YXIgcCA9IHN0
YXJ0OyBwIDw9IGVuZDsgcCsrKSB7CisgICAgICAgICAgICB2YXIgcGFydGljbGUgPSB0aGlzLnBh
cnRpY2xlc1twXTsKKyAgICAgICAgICAgIC8vIGNhbGwgdG8gY3VzdG9tIHVzZXIgZnVuY3Rpb24g
dG8gdXBkYXRlIHRoZSBwYXJ0aWNsZSBwcm9wZXJ0aWVzCisgICAgICAgICAgICB0aGlzLnVwZGF0
ZVBhcnRpY2xlKHBhcnRpY2xlKTsKKyAgICAgICAgICAgIHZhciBzaGFwZSA9IHBhcnRpY2xlLl9t
b2RlbC5fc2hhcGU7CisgICAgICAgICAgICB2YXIgc2hhcGVVViA9IHBhcnRpY2xlLl9tb2RlbC5f
c2hhcGVVVjsKKyAgICAgICAgICAgIHZhciBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4ID0gcGFydGlj
bGUuX3JvdGF0aW9uTWF0cml4OworICAgICAgICAgICAgdmFyIHBhcnRpY2xlUG9zaXRpb24gPSBw
YXJ0aWNsZS5wb3NpdGlvbjsKKyAgICAgICAgICAgIHZhciBwYXJ0aWNsZVJvdGF0aW9uID0gcGFy
dGljbGUucm90YXRpb247CisgICAgICAgICAgICB2YXIgcGFydGljbGVTY2FsaW5nID0gcGFydGlj
bGUuc2NhbGluZzsKKyAgICAgICAgICAgIHZhciBwYXJ0aWNsZUdsb2JhbFBvc2l0aW9uID0gcGFy
dGljbGUuX2dsb2JhbFBvc2l0aW9uOworICAgICAgICAgICAgLy8gY2FtZXJhLXBhcnRpY2xlIGRp
c3RhbmNlIGZvciBkZXB0aCBzb3J0aW5nCisgICAgICAgICAgICBpZiAodGhpcy5fZGVwdGhTb3J0
ICYmIHRoaXMuX2RlcHRoU29ydFBhcnRpY2xlcykgeworICAgICAgICAgICAgICAgIHZhciBkc3Ag
PSB0aGlzLmRlcHRoU29ydGVkUGFydGljbGVzW3BdOworICAgICAgICAgICAgICAgIGRzcC5pbmQg
PSBwYXJ0aWNsZS5faW5kOworICAgICAgICAgICAgICAgIGRzcC5pbmRpY2VzTGVuZ3RoID0gcGFy
dGljbGUuX21vZGVsLl9pbmRpY2VzTGVuZ3RoOworICAgICAgICAgICAgICAgIGRzcC5zcURpc3Rh
bmNlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
Y3RvcjMiXS5EaXN0YW5jZVNxdWFyZWQocGFydGljbGUucG9zaXRpb24sIGNhbUludmVydGVkUG9z
aXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gc2tpcCB0aGUgY29tcHV0YXRp
b25zIGZvciBpbmFjdGl2ZSBvciBhbHJlYWR5IGludmlzaWJsZSBwYXJ0aWNsZXMKKyAgICAgICAg
ICAgIGlmICghcGFydGljbGUuYWxpdmUgfHwgKHBhcnRpY2xlLl9zdGlsbEludmlzaWJsZSAmJiAh
cGFydGljbGUuaXNWaXNpYmxlKSkgeworICAgICAgICAgICAgICAgIC8vIGluY3JlbWVudCBpbmRl
eGVzIGZvciB0aGUgbmV4dCBwYXJ0aWNsZQorICAgICAgICAgICAgICAgIHB0ID0gc2hhcGUubGVu
Z3RoOworICAgICAgICAgICAgICAgIGluZGV4ICs9IHB0ICogMzsKKyAgICAgICAgICAgICAgICBj
b2xvckluZGV4ICs9IHB0ICogNDsKKyAgICAgICAgICAgICAgICB1dkluZGV4ICs9IHB0ICogMjsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChwYXJ0aWNsZS5pc1Zpc2libGUpIHsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fc3RpbGxJ
bnZpc2libGUgPSBmYWxzZTsgLy8gdW4tbWFyayBwZXJtYW5lbnQgaW52aXNpYmlsaXR5CisgICAg
ICAgICAgICAgICAgdmFyIHNjYWxlZFBpdm90ID0gdGVtcFZlY3RvcnNbMTJdOworICAgICAgICAg
ICAgICAgIHBhcnRpY2xlLnBpdm90Lm11bHRpcGx5VG9SZWYocGFydGljbGVTY2FsaW5nLCBzY2Fs
ZWRQaXZvdCk7CisgICAgICAgICAgICAgICAgLy8gcGFydGljbGUgcm90YXRpb24gbWF0cml4Cisg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuYmlsbGJvYXJkKSB7CisgICAgICAgICAgICAgICAgICAg
IHBhcnRpY2xlUm90YXRpb24ueCA9IDAuMDsKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGVS
b3RhdGlvbi55ID0gMC4wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fY29tcHV0ZVBhcnRpY2xlUm90YXRpb24gfHwgdGhpcy5iaWxsYm9hcmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcGFydGljbGUuZ2V0Um90YXRpb25NYXRyaXgocm90TWF0cml4KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHBhcnRpY2xlSGFzUGFyZW50ID0g
KHBhcnRpY2xlLnBhcmVudElkICE9PSBudWxsKTsKKyAgICAgICAgICAgICAgICBpZiAocGFydGlj
bGVIYXNQYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gdGhpcy5w
YXJ0aWNsZXNbcGFydGljbGUucGFyZW50SWRdOworICAgICAgICAgICAgICAgICAgICB2YXIgcGFy
ZW50Um90YXRpb25NYXRyaXggPSBwYXJlbnRfMS5fcm90YXRpb25NYXRyaXg7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBwYXJlbnRHbG9iYWxQb3NpdGlvbiA9IHBhcmVudF8xLl9nbG9iYWxQb3Np
dGlvbjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJvdGF0ZWRZID0gcGFydGljbGVQb3NpdGlv
bi54ICogcGFyZW50Um90YXRpb25NYXRyaXhbMV0gKyBwYXJ0aWNsZVBvc2l0aW9uLnkgKiBwYXJl
bnRSb3RhdGlvbk1hdHJpeFs0XSArIHBhcnRpY2xlUG9zaXRpb24ueiAqIHBhcmVudFJvdGF0aW9u
TWF0cml4WzddOworICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRlZFggPSBwYXJ0aWNsZVBv
c2l0aW9uLnggKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFswXSArIHBhcnRpY2xlUG9zaXRpb24ueSAq
IHBhcmVudFJvdGF0aW9uTWF0cml4WzNdICsgcGFydGljbGVQb3NpdGlvbi56ICogcGFyZW50Um90
YXRpb25NYXRyaXhbNl07CisgICAgICAgICAgICAgICAgICAgIHZhciByb3RhdGVkWiA9IHBhcnRp
Y2xlUG9zaXRpb24ueCAqIHBhcmVudFJvdGF0aW9uTWF0cml4WzJdICsgcGFydGljbGVQb3NpdGlv
bi55ICogcGFyZW50Um90YXRpb25NYXRyaXhbNV0gKyBwYXJ0aWNsZVBvc2l0aW9uLnogKiBwYXJl
bnRSb3RhdGlvbk1hdHJpeFs4XTsKKyAgICAgICAgICAgICAgICAgICAgcGFydGljbGVHbG9iYWxQ
b3NpdGlvbi54ID0gcGFyZW50R2xvYmFsUG9zaXRpb24ueCArIHJvdGF0ZWRYOworICAgICAgICAg
ICAgICAgICAgICBwYXJ0aWNsZUdsb2JhbFBvc2l0aW9uLnkgPSBwYXJlbnRHbG9iYWxQb3NpdGlv
bi55ICsgcm90YXRlZFk7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlR2xvYmFsUG9zaXRp
b24ueiA9IHBhcmVudEdsb2JhbFBvc2l0aW9uLnogKyByb3RhdGVkWjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX2NvbXB1dGVQYXJ0aWNsZVJvdGF0aW9uIHx8IHRoaXMuYmlsbGJvYXJk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90TWF0cml4VmFsdWVzID0gcm90TWF0
cml4Lm07CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4WzBd
ID0gcm90TWF0cml4VmFsdWVzWzBdICogcGFyZW50Um90YXRpb25NYXRyaXhbMF0gKyByb3RNYXRy
aXhWYWx1ZXNbMV0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFszXSArIHJvdE1hdHJpeFZhbHVlc1sy
XSAqIHBhcmVudFJvdGF0aW9uTWF0cml4WzZdOworICAgICAgICAgICAgICAgICAgICAgICAgcGFy
dGljbGVSb3RhdGlvbk1hdHJpeFsxXSA9IHJvdE1hdHJpeFZhbHVlc1swXSAqIHBhcmVudFJvdGF0
aW9uTWF0cml4WzFdICsgcm90TWF0cml4VmFsdWVzWzFdICogcGFyZW50Um90YXRpb25NYXRyaXhb
NF0gKyByb3RNYXRyaXhWYWx1ZXNbMl0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFs3XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbMl0gPSByb3RNYXRyaXhW
YWx1ZXNbMF0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFsyXSArIHJvdE1hdHJpeFZhbHVlc1sxXSAq
IHBhcmVudFJvdGF0aW9uTWF0cml4WzVdICsgcm90TWF0cml4VmFsdWVzWzJdICogcGFyZW50Um90
YXRpb25NYXRyaXhbOF07CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVJvdGF0aW9u
TWF0cml4WzNdID0gcm90TWF0cml4VmFsdWVzWzRdICogcGFyZW50Um90YXRpb25NYXRyaXhbMF0g
KyByb3RNYXRyaXhWYWx1ZXNbNV0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFszXSArIHJvdE1hdHJp
eFZhbHVlc1s2XSAqIHBhcmVudFJvdGF0aW9uTWF0cml4WzZdOworICAgICAgICAgICAgICAgICAg
ICAgICAgcGFydGljbGVSb3RhdGlvbk1hdHJpeFs0XSA9IHJvdE1hdHJpeFZhbHVlc1s0XSAqIHBh
cmVudFJvdGF0aW9uTWF0cml4WzFdICsgcm90TWF0cml4VmFsdWVzWzVdICogcGFyZW50Um90YXRp
b25NYXRyaXhbNF0gKyByb3RNYXRyaXhWYWx1ZXNbNl0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFs3
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbNV0gPSBy
b3RNYXRyaXhWYWx1ZXNbNF0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFsyXSArIHJvdE1hdHJpeFZh
bHVlc1s1XSAqIHBhcmVudFJvdGF0aW9uTWF0cml4WzVdICsgcm90TWF0cml4VmFsdWVzWzZdICog
cGFyZW50Um90YXRpb25NYXRyaXhbOF07CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNs
ZVJvdGF0aW9uTWF0cml4WzZdID0gcm90TWF0cml4VmFsdWVzWzhdICogcGFyZW50Um90YXRpb25N
YXRyaXhbMF0gKyByb3RNYXRyaXhWYWx1ZXNbOV0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFszXSAr
IHJvdE1hdHJpeFZhbHVlc1sxMF0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFs2XTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbN10gPSByb3RNYXRyaXhWYWx1
ZXNbOF0gKiBwYXJlbnRSb3RhdGlvbk1hdHJpeFsxXSArIHJvdE1hdHJpeFZhbHVlc1s5XSAqIHBh
cmVudFJvdGF0aW9uTWF0cml4WzRdICsgcm90TWF0cml4VmFsdWVzWzEwXSAqIHBhcmVudFJvdGF0
aW9uTWF0cml4WzddOworICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljbGVSb3RhdGlvbk1h
dHJpeFs4XSA9IHJvdE1hdHJpeFZhbHVlc1s4XSAqIHBhcmVudFJvdGF0aW9uTWF0cml4WzJdICsg
cm90TWF0cml4VmFsdWVzWzldICogcGFyZW50Um90YXRpb25NYXRyaXhbNV0gKyByb3RNYXRyaXhW
YWx1ZXNbMTBdICogcGFyZW50Um90YXRpb25NYXRyaXhbOF07CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHBhcnRpY2xlR2xvYmFsUG9zaXRpb24ueCA9IHBhcnRpY2xlUG9zaXRpb24ueDsK
KyAgICAgICAgICAgICAgICAgICAgcGFydGljbGVHbG9iYWxQb3NpdGlvbi55ID0gcGFydGljbGVQ
b3NpdGlvbi55OworICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZUdsb2JhbFBvc2l0aW9uLnog
PSBwYXJ0aWNsZVBvc2l0aW9uLno7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21w
dXRlUGFydGljbGVSb3RhdGlvbiB8fCB0aGlzLmJpbGxib2FyZCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHJvdE1hdHJpeFZhbHVlcyA9IHJvdE1hdHJpeC5tOworICAgICAgICAgICAg
ICAgICAgICAgICAgcGFydGljbGVSb3RhdGlvbk1hdHJpeFswXSA9IHJvdE1hdHJpeFZhbHVlc1sw
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbMV0gPSBy
b3RNYXRyaXhWYWx1ZXNbMV07CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVJvdGF0
aW9uTWF0cml4WzJdID0gcm90TWF0cml4VmFsdWVzWzJdOworICAgICAgICAgICAgICAgICAgICAg
ICAgcGFydGljbGVSb3RhdGlvbk1hdHJpeFszXSA9IHJvdE1hdHJpeFZhbHVlc1s0XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbNF0gPSByb3RNYXRyaXhW
YWx1ZXNbNV07CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4
WzVdID0gcm90TWF0cml4VmFsdWVzWzZdOworICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlj
bGVSb3RhdGlvbk1hdHJpeFs2XSA9IHJvdE1hdHJpeFZhbHVlc1s4XTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbN10gPSByb3RNYXRyaXhWYWx1ZXNbOV07
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4WzhdID0gcm90
TWF0cml4VmFsdWVzWzEwXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB2YXIgcGl2b3RCYWNrVHJhbnNsYXRpb24gPSB0ZW1wVmVjdG9y
c1sxMV07CisgICAgICAgICAgICAgICAgaWYgKHBhcnRpY2xlLnRyYW5zbGF0ZUZyb21QaXZvdCkg
eworICAgICAgICAgICAgICAgICAgICBwaXZvdEJhY2tUcmFuc2xhdGlvbi5zZXRBbGwoMC4wKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHBpdm90QmFja1RyYW5zbGF0aW9uLmNvcHlGcm9tKHNjYWxlZFBpdm90KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gcGFydGljbGUgdmVydGV4IGxvb3AKKyAg
ICAgICAgICAgICAgICBmb3IgKHB0ID0gMDsgcHQgPCBzaGFwZS5sZW5ndGg7IHB0KyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWR4ID0gaW5kZXggKyBwdCAqIDM7CisgICAgICAgICAgICAgICAg
ICAgIGNvbGlkeCA9IGNvbG9ySW5kZXggKyBwdCAqIDQ7CisgICAgICAgICAgICAgICAgICAgIHV2
aWR4ID0gdXZJbmRleCArIHB0ICogMjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRtcFZlcnRl
eCA9IHRlbXBWZWN0b3JzWzBdOworICAgICAgICAgICAgICAgICAgICB0bXBWZXJ0ZXguY29weUZy
b20oc2hhcGVbcHRdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbXB1dGVQYXJ0
aWNsZVZlcnRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJ0aWNs
ZVZlcnRleChwYXJ0aWNsZSwgdG1wVmVydGV4LCBwdCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb25zCisgICAgICAgICAgICAgICAgICAgIHZh
ciB2ZXJ0ZXhYID0gdG1wVmVydGV4LnggKiBwYXJ0aWNsZVNjYWxpbmcueCAtIHNjYWxlZFBpdm90
Lng7CisgICAgICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXhZID0gdG1wVmVydGV4LnkgKiBwYXJ0
aWNsZVNjYWxpbmcueSAtIHNjYWxlZFBpdm90Lnk7CisgICAgICAgICAgICAgICAgICAgIHZhciB2
ZXJ0ZXhaID0gdG1wVmVydGV4LnogKiBwYXJ0aWNsZVNjYWxpbmcueiAtIHNjYWxlZFBpdm90Lno7
CisgICAgICAgICAgICAgICAgICAgIHZhciByb3RhdGVkWCA9IHZlcnRleFggKiBwYXJ0aWNsZVJv
dGF0aW9uTWF0cml4WzBdICsgdmVydGV4WSAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbM10gKyB2
ZXJ0ZXhaICogcGFydGljbGVSb3RhdGlvbk1hdHJpeFs2XTsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHJvdGF0ZWRZID0gdmVydGV4WCAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbMV0gKyB2ZXJ0
ZXhZICogcGFydGljbGVSb3RhdGlvbk1hdHJpeFs0XSArIHZlcnRleFogKiBwYXJ0aWNsZVJvdGF0
aW9uTWF0cml4WzddOworICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRlZFogPSB2ZXJ0ZXhY
ICogcGFydGljbGVSb3RhdGlvbk1hdHJpeFsyXSArIHZlcnRleFkgKiBwYXJ0aWNsZVJvdGF0aW9u
TWF0cml4WzVdICsgdmVydGV4WiAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbOF07CisgICAgICAg
ICAgICAgICAgICAgIHJvdGF0ZWRYICs9IHBpdm90QmFja1RyYW5zbGF0aW9uLng7CisgICAgICAg
ICAgICAgICAgICAgIHJvdGF0ZWRZICs9IHBpdm90QmFja1RyYW5zbGF0aW9uLnk7CisgICAgICAg
ICAgICAgICAgICAgIHJvdGF0ZWRaICs9IHBpdm90QmFja1RyYW5zbGF0aW9uLno7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBweCA9IHBvc2l0aW9uczMyW2lkeF0gPSBwYXJ0aWNsZUdsb2JhbFBv
c2l0aW9uLnggKyBjYW1BeGlzWC54ICogcm90YXRlZFggKyBjYW1BeGlzWS54ICogcm90YXRlZFkg
KyBjYW1BeGlzWi54ICogcm90YXRlZFo7CisgICAgICAgICAgICAgICAgICAgIHZhciBweSA9IHBv
c2l0aW9uczMyW2lkeCArIDFdID0gcGFydGljbGVHbG9iYWxQb3NpdGlvbi55ICsgY2FtQXhpc1gu
eSAqIHJvdGF0ZWRYICsgY2FtQXhpc1kueSAqIHJvdGF0ZWRZICsgY2FtQXhpc1oueSAqIHJvdGF0
ZWRaOworICAgICAgICAgICAgICAgICAgICB2YXIgcHogPSBwb3NpdGlvbnMzMltpZHggKyAyXSA9
IHBhcnRpY2xlR2xvYmFsUG9zaXRpb24ueiArIGNhbUF4aXNYLnogKiByb3RhdGVkWCArIGNhbUF4
aXNZLnogKiByb3RhdGVkWSArIGNhbUF4aXNaLnogKiByb3RhdGVkWjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX2NvbXB1dGVCb3VuZGluZ0JveCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbWluaW11bS5taW5pbWl6ZUluUGxhY2VGcm9tRmxvYXRzKHB4LCBweSwgcHopOworICAg
ICAgICAgICAgICAgICAgICAgICAgbWF4aW11bS5tYXhpbWl6ZUluUGxhY2VGcm9tRmxvYXRzKHB4
LCBweSwgcHopOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8v
IG5vcm1hbHMgOiBpZiB0aGUgcGFydGljbGVzIGNhbid0IGJlIG1vcnBoZWQgdGhlbiBqdXN0IHJv
dGF0ZSB0aGUgbm9ybWFscywgd2hhdCBpcyBtdWNoIG1vcmUgZmFzdGVyIHRoYW4gQ29tcHV0ZU5v
cm1hbHMoKQorICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NvbXB1dGVQYXJ0aWNsZVZl
cnRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vcm1hbHggPSBmaXhlZE5vcm1h
bDMyW2lkeF07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFseSA9IGZpeGVkTm9y
bWFsMzJbaWR4ICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFseiA9IGZp
eGVkTm9ybWFsMzJbaWR4ICsgMl07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRl
ZHggPSBub3JtYWx4ICogcGFydGljbGVSb3RhdGlvbk1hdHJpeFswXSArIG5vcm1hbHkgKiBwYXJ0
aWNsZVJvdGF0aW9uTWF0cml4WzNdICsgbm9ybWFseiAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhb
Nl07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRlZHkgPSBub3JtYWx4ICogcGFy
dGljbGVSb3RhdGlvbk1hdHJpeFsxXSArIG5vcm1hbHkgKiBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4
WzRdICsgbm9ybWFseiAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbN107CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcm90YXRlZHogPSBub3JtYWx4ICogcGFydGljbGVSb3RhdGlvbk1hdHJp
eFsyXSArIG5vcm1hbHkgKiBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4WzVdICsgbm9ybWFseiAqIHBh
cnRpY2xlUm90YXRpb25NYXRyaXhbOF07CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxz
MzJbaWR4XSA9IGNhbUF4aXNYLnggKiByb3RhdGVkeCArIGNhbUF4aXNZLnggKiByb3RhdGVkeSAr
IGNhbUF4aXNaLnggKiByb3RhdGVkejsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHMz
MltpZHggKyAxXSA9IGNhbUF4aXNYLnkgKiByb3RhdGVkeCArIGNhbUF4aXNZLnkgKiByb3RhdGVk
eSArIGNhbUF4aXNaLnkgKiByb3RhdGVkejsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1h
bHMzMltpZHggKyAyXSA9IGNhbUF4aXNYLnogKiByb3RhdGVkeCArIGNhbUF4aXNZLnogKiByb3Rh
dGVkeSArIGNhbUF4aXNaLnogKiByb3RhdGVkejsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcHV0ZVBhcnRpY2xlQ29sb3IgJiYgcGFydGlj
bGUuY29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHBhcnRpY2xl
LmNvbG9yOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yczMyXzEgPSB0aGlzLl9j
b2xvcnMzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yczMyXzFbY29saWR4XSA9IGNv
bG9yLnI7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMzMl8xW2NvbGlkeCArIDFdID0g
Y29sb3IuZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yczMyXzFbY29saWR4ICsgMl0g
PSBjb2xvci5iOworICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzMzJfMVtjb2xpZHggKyAz
XSA9IGNvbG9yLmE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX2NvbXB1dGVQYXJ0aWNsZVRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB1dnMgPSBwYXJ0aWNsZS51dnM7CisgICAgICAgICAgICAgICAgICAgICAgICB1dnMz
Mlt1dmlkeF0gPSBzaGFwZVVWW3B0ICogMl0gKiAodXZzLnogLSB1dnMueCkgKyB1dnMueDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHV2czMyW3V2aWR4ICsgMV0gPSBzaGFwZVVWW3B0ICogMiAr
IDFdICogKHV2cy53IC0gdXZzLnkpICsgdXZzLnk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBwYXJ0aWNsZSBq
dXN0IHNldCBpbnZpc2libGUgOiBzY2FsZWQgdG8gemVybyBhbmQgcG9zaXRpb25lZCBhdCB0aGUg
b3JpZ2luCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJ0aWNsZS5fc3Rp
bGxJbnZpc2libGUgPSB0cnVlOyAvLyBtYXJrIHRoZSBwYXJ0aWNsZSBhcyBpbnZpc2libGUKKyAg
ICAgICAgICAgICAgICBmb3IgKHB0ID0gMDsgcHQgPCBzaGFwZS5sZW5ndGg7IHB0KyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWR4ID0gaW5kZXggKyBwdCAqIDM7CisgICAgICAgICAgICAgICAg
ICAgIGNvbGlkeCA9IGNvbG9ySW5kZXggKyBwdCAqIDQ7CisgICAgICAgICAgICAgICAgICAgIHV2
aWR4ID0gdXZJbmRleCArIHB0ICogMjsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zMzJb
aWR4XSA9IHBvc2l0aW9uczMyW2lkeCArIDFdID0gcG9zaXRpb25zMzJbaWR4ICsgMl0gPSAwOwor
ICAgICAgICAgICAgICAgICAgICBub3JtYWxzMzJbaWR4XSA9IG5vcm1hbHMzMltpZHggKyAxXSA9
IG5vcm1hbHMzMltpZHggKyAyXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9j
b21wdXRlUGFydGljbGVDb2xvciAmJiBwYXJ0aWNsZS5jb2xvcikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGNvbG9yID0gcGFydGljbGUuY29sb3I7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb2xvcnMzMltjb2xpZHhdID0gY29sb3IucjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yczMyW2NvbGlkeCArIDFdID0gY29sb3IuZzsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yczMyW2NvbGlkeCArIDJdID0gY29sb3IuYjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yczMyW2NvbGlkeCArIDNdID0gY29sb3IuYTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcHV0ZVBhcnRpY2xlVGV4dHVyZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHV2cyA9IHBhcnRpY2xlLnV2czsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHV2czMyW3V2aWR4XSA9IHNoYXBlVVZbcHQgKiAyXSAqICh1dnMueiAt
IHV2cy54KSArIHV2cy54OworICAgICAgICAgICAgICAgICAgICAgICAgdXZzMzJbdXZpZHggKyAx
XSA9IHNoYXBlVVZbcHQgKiAyICsgMV0gKiAodXZzLncgLSB1dnMueSkgKyB1dnMueTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIGlmIHRoZSBwYXJ0aWNsZSBpbnRlcnNlY3Rpb25zIG11c3QgYmUgY29tcHV0ZWQg
OiB1cGRhdGUgdGhlIGJiSW5mbworICAgICAgICAgICAgaWYgKHRoaXMuX3BhcnRpY2xlc0ludGVy
c2VjdCkgeworICAgICAgICAgICAgICAgIHZhciBiSW5mbyA9IHBhcnRpY2xlLl9ib3VuZGluZ0lu
Zm87CisgICAgICAgICAgICAgICAgdmFyIGJCb3ggPSBiSW5mby5ib3VuZGluZ0JveDsKKyAgICAg
ICAgICAgICAgICB2YXIgYlNwaGVyZSA9IGJJbmZvLmJvdW5kaW5nU3BoZXJlOworICAgICAgICAg
ICAgICAgIHZhciBtb2RlbEJvdW5kaW5nSW5mbyA9IHBhcnRpY2xlLl9tb2RlbEJvdW5kaW5nSW5m
bzsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2JTcGhlcmVPbmx5KSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIHBsYWNlLCBzY2FsZSBhbmQgcm90YXRlIHRoZSBwYXJ0aWNsZSBiYm94IHdp
dGhpbiB0aGUgU1BTIGxvY2FsIHN5c3RlbSwgdGhlbiB1cGRhdGUgaXQKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIG1vZGVsQm91bmRpbmdJbmZvVmVjdG9ycyA9IG1vZGVsQm91bmRpbmdJbmZvLmJv
dW5kaW5nQm94LnZlY3RvcnM7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wTWluID0gdGVt
cFZlY3RvcnNbMV07CisgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wTWF4ID0gdGVtcFZlY3Rv
cnNbMl07CisgICAgICAgICAgICAgICAgICAgIHRlbXBNaW4uc2V0QWxsKE51bWJlci5NQVhfVkFM
VUUpOworICAgICAgICAgICAgICAgICAgICB0ZW1wTWF4LnNldEFsbCgtTnVtYmVyLk1BWF9WQUxV
RSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDwgODsgYisrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGVkWCA9IG1vZGVsQm91bmRpbmdJbmZvVmVj
dG9yc1tiXS54ICogcGFydGljbGVTY2FsaW5nLng7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgc2NhbGVkWSA9IG1vZGVsQm91bmRpbmdJbmZvVmVjdG9yc1tiXS55ICogcGFydGljbGVTY2Fs
aW5nLnk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGVkWiA9IG1vZGVsQm91bmRp
bmdJbmZvVmVjdG9yc1tiXS56ICogcGFydGljbGVTY2FsaW5nLno7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcm90YXRlZFggPSBzY2FsZWRYICogcGFydGljbGVSb3RhdGlvbk1hdHJpeFsw
XSArIHNjYWxlZFkgKiBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4WzNdICsgc2NhbGVkWiAqIHBhcnRp
Y2xlUm90YXRpb25NYXRyaXhbNl07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRl
ZFkgPSBzY2FsZWRYICogcGFydGljbGVSb3RhdGlvbk1hdHJpeFsxXSArIHNjYWxlZFkgKiBwYXJ0
aWNsZVJvdGF0aW9uTWF0cml4WzRdICsgc2NhbGVkWiAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhb
N107CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRlZFogPSBzY2FsZWRYICogcGFy
dGljbGVSb3RhdGlvbk1hdHJpeFsyXSArIHNjYWxlZFkgKiBwYXJ0aWNsZVJvdGF0aW9uTWF0cml4
WzVdICsgc2NhbGVkWiAqIHBhcnRpY2xlUm90YXRpb25NYXRyaXhbOF07CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgeCA9IHBhcnRpY2xlUG9zaXRpb24ueCArIGNhbUF4aXNYLnggKiByb3Rh
dGVkWCArIGNhbUF4aXNZLnggKiByb3RhdGVkWSArIGNhbUF4aXNaLnggKiByb3RhdGVkWjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB5ID0gcGFydGljbGVQb3NpdGlvbi55ICsgY2FtQXhp
c1gueSAqIHJvdGF0ZWRYICsgY2FtQXhpc1kueSAqIHJvdGF0ZWRZICsgY2FtQXhpc1oueSAqIHJv
dGF0ZWRaOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHogPSBwYXJ0aWNsZVBvc2l0aW9u
LnogKyBjYW1BeGlzWC56ICogcm90YXRlZFggKyBjYW1BeGlzWS56ICogcm90YXRlZFkgKyBjYW1B
eGlzWi56ICogcm90YXRlZFo7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTWluLm1pbmlt
aXplSW5QbGFjZUZyb21GbG9hdHMoeCwgeSwgeik7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZW1wTWF4Lm1heGltaXplSW5QbGFjZUZyb21GbG9hdHMoeCwgeSwgeik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYkJveC5yZUNvbnN0cnVjdCh0ZW1wTWluLCB0
ZW1wTWF4LCBtZXNoLl93b3JsZE1hdHJpeCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIHBsYWNlIGFuZCBzY2FsZSB0aGUgcGFydGljbGUgYm91ZGluZyBzcGhlcmUgaW4g
dGhlIFNQUyBsb2NhbCBzeXN0ZW0sIHRoZW4gdXBkYXRlIGl0CisgICAgICAgICAgICAgICAgdmFy
IG1pbkJib3ggPSBtb2RlbEJvdW5kaW5nSW5mby5taW5pbXVtLm11bHRpcGx5VG9SZWYocGFydGlj
bGVTY2FsaW5nLCB0ZW1wVmVjdG9yc1sxXSk7CisgICAgICAgICAgICAgICAgdmFyIG1heEJib3gg
PSBtb2RlbEJvdW5kaW5nSW5mby5tYXhpbXVtLm11bHRpcGx5VG9SZWYocGFydGljbGVTY2FsaW5n
LCB0ZW1wVmVjdG9yc1syXSk7CisgICAgICAgICAgICAgICAgdmFyIGJTcGhlcmVDZW50ZXIgPSBt
YXhCYm94LmFkZFRvUmVmKG1pbkJib3gsIHRlbXBWZWN0b3JzWzNdKS5zY2FsZUluUGxhY2UoMC41
KS5hZGRJblBsYWNlKHBhcnRpY2xlR2xvYmFsUG9zaXRpb24pOworICAgICAgICAgICAgICAgIHZh
ciBoYWxmRGlhZyA9IG1heEJib3guc3VidHJhY3RUb1JlZihtaW5CYm94LCB0ZW1wVmVjdG9yc1s0
XSkuc2NhbGVJblBsYWNlKDAuNSAqIHRoaXMuX2JTcGhlcmVSYWRpdXNGYWN0b3IpOworICAgICAg
ICAgICAgICAgIHZhciBiU3BoZXJlTWluQmJveCA9IGJTcGhlcmVDZW50ZXIuc3VidHJhY3RUb1Jl
ZihoYWxmRGlhZywgdGVtcFZlY3RvcnNbMV0pOworICAgICAgICAgICAgICAgIHZhciBiU3BoZXJl
TWF4QmJveCA9IGJTcGhlcmVDZW50ZXIuYWRkVG9SZWYoaGFsZkRpYWcsIHRlbXBWZWN0b3JzWzJd
KTsKKyAgICAgICAgICAgICAgICBiU3BoZXJlLnJlQ29uc3RydWN0KGJTcGhlcmVNaW5CYm94LCBi
U3BoZXJlTWF4QmJveCwgbWVzaC5fd29ybGRNYXRyaXgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gaW5jcmVtZW50IGluZGV4ZXMgZm9yIHRoZSBuZXh0IHBhcnRpY2xlCisgICAgICAg
ICAgICBpbmRleCA9IGlkeCArIDM7CisgICAgICAgICAgICBjb2xvckluZGV4ID0gY29saWR4ICsg
NDsKKyAgICAgICAgICAgIHV2SW5kZXggPSB1dmlkeCArIDI7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gaWYgdGhlIFZCTyBtdXN0IGJlIHVwZGF0ZWQKKyAgICAgICAgaWYgKHVwZGF0ZSkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX2NvbXB1dGVQYXJ0aWNsZUNvbG9yKSB7CisgICAgICAgICAgICAg
ICAgbWVzaC51cGRhdGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kLCBjb2xvcnMzMiwgZmFsc2Us
IGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9jb21wdXRlUGFy
dGljbGVUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgbWVzaC51cGRhdGVWZXJ0aWNlc0RhdGEo
X01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVy
Il0uVVZLaW5kLCB1dnMzMiwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1lc2gudXBkYXRlVmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgcG9zaXRpb25zMzIs
IGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBpZiAoIW1lc2guYXJlTm9ybWFsc0Zyb3plbiB8
fCBtZXNoLmlzRmFjZXREYXRhRW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9j
b21wdXRlUGFydGljbGVWZXJ0ZXggfHwgbWVzaC5pc0ZhY2V0RGF0YUVuYWJsZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gcmVjb21wdXRlIHRoZSBub3JtYWxzIG9ubHkgaWYgdGhlIHBhcnRp
Y2xlcyBjYW4gYmUgbW9ycGhlZCwgdXBkYXRlIHRoZW4gYWxzbyB0aGUgbm9ybWFsIHJlZmVyZW5j
ZSBhcnJheSBfZml4ZWROb3JtYWwzMltdCisgICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbXMg
PSBtZXNoLmlzRmFjZXREYXRhRW5hYmxlZCA/IG1lc2guZ2V0RmFjZXREYXRhUGFyYW1ldGVycygp
IDogbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgX01lc2hlc19tZXNoX3ZlcnRleERhdGFfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVydGV4RGF0YSJdLkNvbXB1dGVOb3JtYWxzKHBv
c2l0aW9uczMyLCBpbmRpY2VzMzIsIG5vcm1hbHMzMiwgcGFyYW1zKTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3JtYWxzMzIubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZpeGVkTm9ybWFsMzJbaV0gPSBub3JtYWxzMzJbaV07CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KCFtZXNoLmFyZU5vcm1hbHNGcm96ZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzaC51cGRh
dGVWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZCwgbm9ybWFsczMyLCBmYWxzZSwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLl9k
ZXB0aFNvcnQgJiYgdGhpcy5fZGVwdGhTb3J0UGFydGljbGVzKSB7CisgICAgICAgICAgICAgICAg
dmFyIGRlcHRoU29ydGVkUGFydGljbGVzID0gdGhpcy5kZXB0aFNvcnRlZFBhcnRpY2xlczsKKyAg
ICAgICAgICAgICAgICBkZXB0aFNvcnRlZFBhcnRpY2xlcy5zb3J0KGRlcHRoU29ydEZ1bmN0aW9u
KTsKKyAgICAgICAgICAgICAgICB2YXIgZHNwbCA9IGRlcHRoU29ydGVkUGFydGljbGVzLmxlbmd0
aDsKKyAgICAgICAgICAgICAgICB2YXIgc2lkID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBzb3J0ZWQgPSAwOyBzb3J0ZWQgPCBkc3BsOyBzb3J0ZWQrKykgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgbGluZCA9IGRlcHRoU29ydGVkUGFydGljbGVzW3NvcnRlZF0uaW5kaWNlc0xlbmd0
aDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNpbmQgPSBkZXB0aFNvcnRlZFBhcnRpY2xlc1tz
b3J0ZWRdLmluZDsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5k
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMzMltzaWRdID0gaW5kaWNl
c1tzaW5kICsgaV07CisgICAgICAgICAgICAgICAgICAgICAgICBzaWQrKzsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtZXNoLnVwZGF0
ZUluZGljZXMoaW5kaWNlczMyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5fY29tcHV0ZUJvdW5kaW5nQm94KSB7CisgICAgICAgICAgICBpZiAobWVzaC5fYm91
bmRpbmdJbmZvKSB7CisgICAgICAgICAgICAgICAgbWVzaC5fYm91bmRpbmdJbmZvLnJlQ29uc3Ry
dWN0KG1pbmltdW0sIG1heGltdW0sIG1lc2guX3dvcmxkTWF0cml4KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1lc2guX2JvdW5kaW5nSW5mbyA9
IG5ldyBfQ3VsbGluZ19ib3VuZGluZ0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
Qm91bmRpbmdJbmZvIl0obWluaW11bSwgbWF4aW11bSwgbWVzaC5fd29ybGRNYXRyaXgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuYWZ0ZXJVcGRhdGVQYXJ0aWNsZXMo
c3RhcnQsIGVuZCwgdXBkYXRlKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv
KioKKyAgICAqIERpc3Bvc2VzIHRoZSBTUFMuCisgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlU3lz
dGVtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLm1lc2gu
ZGlzcG9zZSgpOworICAgICAgICB0aGlzLnZhcnMgPSBudWxsOworICAgICAgICAvLyBkcm9wIHJl
ZmVyZW5jZXMgdG8gaW50ZXJuYWwgYmlnIGFycmF5cyBmb3IgdGhlIEdDCisgICAgICAgIHRoaXMu
X3Bvc2l0aW9ucyA9IG51bGw7CisgICAgICAgIHRoaXMuX2luZGljZXMgPSBudWxsOworICAgICAg
ICB0aGlzLl9ub3JtYWxzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdXZzID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fY29sb3JzID0gbnVsbDsKKyAgICAgICAgdGhpcy5faW5kaWNlczMyID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fcG9zaXRpb25zMzIgPSBudWxsOworICAgICAgICB0aGlzLl9ub3JtYWxz
MzIgPSBudWxsOworICAgICAgICB0aGlzLl9maXhlZE5vcm1hbDMyID0gbnVsbDsKKyAgICAgICAg
dGhpcy5fdXZzMzIgPSBudWxsOworICAgICAgICB0aGlzLl9jb2xvcnMzMiA9IG51bGw7CisgICAg
ICAgIHRoaXMucGlja2VkUGFydGljbGVzID0gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFZpc2liaWx0eSBoZWxwZXIgOiBSZWNvbXB1dGVzIHRoZSB2aXNpYmxlIHNpemUgYWNjb3JkaW5n
IHRvIHRoZSBtZXNoIGJvdW5kaW5nIGJveAorICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFieWxv
bmpzLmNvbS9ob3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI3Nwcy12aXNpYmlsaXR5CisgICAg
ICogQHJldHVybnMgdGhlIFNQUy4KKyAgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlU3lzdGVtLnBy
b3RvdHlwZS5yZWZyZXNoVmlzaWJsZVNpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICgh
dGhpcy5faXNWaXNpYmlsaXR5Qm94TG9ja2VkKSB7CisgICAgICAgICAgICB0aGlzLm1lc2gucmVm
cmVzaEJvdW5kaW5nSW5mbygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH07CisgICAgLyoqCisgICAgICogVmlzaWJpbGl0eSBoZWxwZXIgOiBTZXRzIHRoZSBzaXplIG9m
IGEgdmlzaWJpbGl0eSBib3gsIHRoaXMgc2V0cyB0aGUgdW5kZXJseWluZyBtZXNoIGJvdW5kaW5n
IGJveC4KKyAgICAgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSAoZmxvYXQpIG9mIHRoZSB2aXNpYmls
aXR5IGJveAorICAgICAqIG5vdGUgOiB0aGlzIGRvZXNuJ3QgbG9jayB0aGUgU1BTIG1lc2ggYm91
bmRpbmcgYm94LgorICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
U29saWRfUGFydGljbGVfU3lzdGVtI3Nwcy12aXNpYmlsaXR5CisgICAgICovCisgICAgU29saWRQ
YXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUuc2V0VmlzaWJpbGl0eUJveCA9IGZ1bmN0aW9uIChzaXpl
KSB7CisgICAgICAgIHZhciB2aXMgPSBzaXplIC8gMjsKKyAgICAgICAgdGhpcy5tZXNoLl9ib3Vu
ZGluZ0luZm8gPSBuZXcgX0N1bGxpbmdfYm91bmRpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIkJvdW5kaW5nSW5mbyJdKG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKC12aXMsIC12aXMsIC12aXMpLCBuZXcgX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSh2
aXMsIHZpcywgdmlzKSk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU29saWRQ
YXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJpc0Fsd2F5c1Zpc2libGUiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIFNQUyBhcyBhbHdheXMgdmlzaWJsZSBvciBu
b3QKKyAgICAgICAgICogZG9jIDogaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9Tb2xp
ZF9QYXJ0aWNsZV9TeXN0ZW0jc3BzLXZpc2liaWxpdHkKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Fsd2F5c1Zpc2libGU7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBTUFMgYXMgYWx3
YXlzIHZpc2libGUgb3Igbm90CisgICAgICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI3Nwcy12aXNpYmlsaXR5CisgICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAgICAgIHRoaXMuX2Fs
d2F5c1Zpc2libGUgPSB2YWw7CisgICAgICAgICAgICB0aGlzLm1lc2guYWx3YXlzU2VsZWN0QXNB
Y3RpdmVNZXNoID0gdmFsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoU29saWRQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJpc1Zpc2liaWxpdHlCb3hMb2Nr
ZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGlmIHRoZSBTUFMgdmlzaWJpbGl0
eSBib3ggYXMgbG9ja2VkIG9yIG5vdC4gVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSB1bmRlcmx5
aW5nIG1lc2ggYm91bmRpbmcgYm94IHVwZGF0ZXMuCisgICAgICAgICAqIGRvYyA6IGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI3Nwcy12aXNpYmls
aXR5CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9pc1Zpc2liaWxpdHlCb3hMb2NrZWQ7CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBTUFMgdmlzaWJpbGl0eSBib3ggYXMgbG9ja2VkIG9y
IG5vdC4gVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSB1bmRlcmx5aW5nIG1lc2ggYm91bmRpbmcg
Ym94IHVwZGF0ZXMuCisgICAgICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9o
b3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI3Nwcy12aXNpYmlsaXR5CisgICAgICAgICAqLwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAgICAgIHRoaXMuX2lzVmlzaWJp
bGl0eUJveExvY2tlZCA9IHZhbDsKKyAgICAgICAgICAgIHZhciBib3VuZGluZ0luZm8gPSB0aGlz
Lm1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICBib3VuZGluZ0luZm8uaXNMb2Nr
ZWQgPSB2YWw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShT
b2xpZFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZSwgImNvbXB1dGVQYXJ0aWNsZVJvdGF0aW9uIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBpZiBgc2V0UGFydGljbGVzKClgIGNvbXB1
dGVzIHRoZSBwYXJ0aWNsZSByb3RhdGlvbnMgb3Igbm90LgorICAgICAgICAgKiBEZWZhdWx0IHZh
bHVlIDogdHJ1ZS4gVGhlIFNQUyBpcyBmYXN0ZXIgd2hlbiBpdCdzIHNldCB0byBmYWxzZS4KKyAg
ICAgICAgICogTm90ZSA6IHRoZSBwYXJ0aWNsZSByb3RhdGlvbnMgYXJlbid0IHN0b3JlZCB2YWx1
ZXMsIHNvIHNldHRpbmcgYGNvbXB1dGVQYXJ0aWNsZVJvdGF0aW9uYCB0byBmYWxzZSB3aWxsIHBy
ZXZlbnRzIHRoZSBwYXJ0aWNsZSB0byByb3RhdGUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb21wdXRlUGFydGljbGVS
b3RhdGlvbjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRlbGxzIHRvIGBz
ZXRQYXJ0aWNsZXMoKWAgdG8gY29tcHV0ZSB0aGUgcGFydGljbGUgcm90YXRpb25zIG9yIG5vdC4K
KyAgICAgICAgICogRGVmYXVsdCB2YWx1ZSA6IHRydWUuIFRoZSBTUFMgaXMgZmFzdGVyIHdoZW4g
aXQncyBzZXQgdG8gZmFsc2UuCisgICAgICAgICAqIE5vdGUgOiB0aGUgcGFydGljbGUgcm90YXRp
b25zIGFyZW4ndCBzdG9yZWQgdmFsdWVzLCBzbyBzZXR0aW5nIGBjb21wdXRlUGFydGljbGVSb3Rh
dGlvbmAgdG8gZmFsc2Ugd2lsbCBwcmV2ZW50cyB0aGUgcGFydGljbGUgdG8gcm90YXRlLgorICAg
ICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7CisgICAgICAgICAgICB0aGlz
Ll9jb21wdXRlUGFydGljbGVSb3RhdGlvbiA9IHZhbDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFNvbGlkUGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLCAiY29t
cHV0ZVBhcnRpY2xlQ29sb3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGlmIGBz
ZXRQYXJ0aWNsZXMoKWAgY29tcHV0ZXMgdGhlIHBhcnRpY2xlIGNvbG9ycyBvciBub3QuCisgICAg
ICAgICAqIERlZmF1bHQgdmFsdWUgOiB0cnVlLiBUaGUgU1BTIGlzIGZhc3RlciB3aGVuIGl0J3Mg
c2V0IHRvIGZhbHNlLgorICAgICAgICAgKiBOb3RlIDogdGhlIHBhcnRpY2xlIGNvbG9ycyBhcmUg
c3RvcmVkIHZhbHVlcywgc28gc2V0dGluZyBgY29tcHV0ZVBhcnRpY2xlQ29sb3JgIHRvIGZhbHNl
IHdpbGwga2VlcCB5ZXQgdGhlIGxhc3QgY29sb3JzIHNldC4KKyAgICAgICAgICovCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVQYXJ0
aWNsZUNvbG9yOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGVsbHMgdG8g
YHNldFBhcnRpY2xlcygpYCB0byBjb21wdXRlIHRoZSBwYXJ0aWNsZSBjb2xvcnMgb3Igbm90Lgor
ICAgICAgICAgKiBEZWZhdWx0IHZhbHVlIDogdHJ1ZS4gVGhlIFNQUyBpcyBmYXN0ZXIgd2hlbiBp
dCdzIHNldCB0byBmYWxzZS4KKyAgICAgICAgICogTm90ZSA6IHRoZSBwYXJ0aWNsZSBjb2xvcnMg
YXJlIHN0b3JlZCB2YWx1ZXMsIHNvIHNldHRpbmcgYGNvbXB1dGVQYXJ0aWNsZUNvbG9yYCB0byBm
YWxzZSB3aWxsIGtlZXAgeWV0IHRoZSBsYXN0IGNvbG9ycyBzZXQuCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVQYXJ0
aWNsZUNvbG9yID0gdmFsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoU29saWRQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJjb21wdXRlUGFydGljbGVUZXh0
dXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBpZiBgc2V0UGFydGljbGVzKClg
IGNvbXB1dGVzIHRoZSBwYXJ0aWNsZSB0ZXh0dXJlcyBvciBub3QuCisgICAgICAgICAqIERlZmF1
bHQgdmFsdWUgOiB0cnVlLiBUaGUgU1BTIGlzIGZhc3RlciB3aGVuIGl0J3Mgc2V0IHRvIGZhbHNl
LgorICAgICAgICAgKiBOb3RlIDogdGhlIHBhcnRpY2xlIHRleHR1cmVzIGFyZSBzdG9yZWQgdmFs
dWVzLCBzbyBzZXR0aW5nIGBjb21wdXRlUGFydGljbGVUZXh0dXJlYCB0byBmYWxzZSB3aWxsIGtl
ZXAgeWV0IHRoZSBsYXN0IGNvbG9ycyBzZXQuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb21wdXRlUGFydGljbGVUZXh0
dXJlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2NvbXB1dGVQYXJ0aWNsZVRleHR1cmUgPSB2YWw7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb2xpZFBhcnRpY2xlU3lzdGVtLnByb3RvdHlw
ZSwgImNvbXB1dGVQYXJ0aWNsZVZlcnRleCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgaWYgYHNldFBhcnRpY2xlcygpYCBjYWxscyB0aGUgdmVydGV4IGZ1bmN0aW9uIGZvciBlYWNo
IHZlcnRleCBvZiBlYWNoIHBhcnRpY2xlLCBvciBub3QuCisgICAgICAgICAqIERlZmF1bHQgdmFs
dWUgOiBmYWxzZS4gVGhlIFNQUyBpcyBmYXN0ZXIgd2hlbiBpdCdzIHNldCB0byBmYWxzZS4KKyAg
ICAgICAgICogTm90ZSA6IHRoZSBwYXJ0aWNsZSBjdXN0b20gdmVydGV4IHBvc2l0aW9ucyBhcmVu
J3Qgc3RvcmVkIHZhbHVlcy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVQYXJ0aWNsZVZlcnRleDsKKyAgICAg
ICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRlbGxzIHRvIGBzZXRQYXJ0aWNsZXMoKWAg
dG8gY2FsbCB0aGUgdmVydGV4IGZ1bmN0aW9uIGZvciBlYWNoIHZlcnRleCBvZiBlYWNoIHBhcnRp
Y2xlLCBvciBub3QuCisgICAgICAgICAqIERlZmF1bHQgdmFsdWUgOiBmYWxzZS4gVGhlIFNQUyBp
cyBmYXN0ZXIgd2hlbiBpdCdzIHNldCB0byBmYWxzZS4KKyAgICAgICAgICogTm90ZSA6IHRoZSBw
YXJ0aWNsZSBjdXN0b20gdmVydGV4IHBvc2l0aW9ucyBhcmVuJ3Qgc3RvcmVkIHZhbHVlcy4KKyAg
ICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkgeworICAgICAgICAgICAgdGhp
cy5fY29tcHV0ZVBhcnRpY2xlVmVydGV4ID0gdmFsOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoU29saWRQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJjb21w
dXRlQm91bmRpbmdCb3giLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGlmIGBzZXRQ
YXJ0aWNsZXMoKWAgY29tcHV0ZXMgb3Igbm90IHRoZSBtZXNoIGJvdW5kaW5nIGJveCB3aGVuIGNv
bXB1dGluZyB0aGUgcGFydGljbGUgcG9zaXRpb25zLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUJvdW5kaW5n
Qm94OworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGVsbHMgdG8gYHNldFBh
cnRpY2xlcygpYCB0byBjb21wdXRlIG9yIG5vdCB0aGUgbWVzaCBib3VuZGluZyBib3ggd2hlbiBj
b21wdXRpbmcgdGhlIHBhcnRpY2xlIHBvc2l0aW9ucy4KKyAgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbCkgeworICAgICAgICAgICAgdGhpcy5fY29tcHV0ZUJvdW5kaW5nQm94
ID0gdmFsOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU29s
aWRQYXJ0aWNsZVN5c3RlbS5wcm90b3R5cGUsICJkZXB0aFNvcnRQYXJ0aWNsZXMiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIGlmIGBzZXRQYXJ0aWNsZXMoKWAgc29ydHMgb3Igbm90
IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcGFydGljbGUgYW5kIHRoZSBjYW1lcmEuCisgICAg
ICAgICAqIFNraXBwZWQgd2hlbiBgZW5hYmxlRGVwdGhTb3J0YCBpcyBzZXQgdG8gYGZhbHNlYCAo
ZGVmYXVsdCkgYXQgY29uc3RydWN0aW9uIHRpbWUuCisgICAgICAgICAqIERlZmF1bHQgOiBgdHJ1
ZWAKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2RlcHRoU29ydFBhcnRpY2xlczsKKyAgICAgICAgfSwKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFRlbGxzIHRvIGBzZXRQYXJ0aWNsZXMoKWAgdG8gc29ydCBvciBub3QgdGhl
IGRpc3RhbmNlIGJldHdlZW4gZWFjaCBwYXJ0aWNsZSBhbmQgdGhlIGNhbWVyYS4KKyAgICAgICAg
ICogU2tpcHBlZCB3aGVuIGBlbmFibGVEZXB0aFNvcnRgIGlzIHNldCB0byBgZmFsc2VgIChkZWZh
dWx0KSBhdCBjb25zdHJ1Y3Rpb24gdGltZS4KKyAgICAgICAgICogRGVmYXVsdCA6IGB0cnVlYAor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7CisgICAgICAgICAgICB0
aGlzLl9kZXB0aFNvcnRQYXJ0aWNsZXMgPSB2YWw7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisgICAgLy8gUGFydGljbGUgYmVoYXZpb3IgbG9naWMKKyAgICAvLyB0
aGVzZSBmb2xsb3dpbmcgbWV0aG9kcyBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIHVzZXIgdG8g
Zml0IGhpcyBuZWVkcworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5n
LiBJdCBtYXkgYmUgb3ZlcndyaXR0ZW4gdG8gc2V0IGFsbCB0aGUgcGFydGljbGUgZmlyc3QgdmFs
dWVzLgorICAgICAqIFRoZSBTUFMgZG9lc24ndCBjYWxsIHRoaXMgZnVuY3Rpb24sIHlvdSBtYXkg
aGF2ZSB0byBjYWxsIGl0IGJ5IHlvdXIgb3duLgorICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI3BhcnRpY2xlLW1hbmFnZW1l
bnQKKyAgICAgKi8KKyAgICBTb2xpZFBhcnRpY2xlU3lzdGVtLnByb3RvdHlwZS5pbml0UGFydGlj
bGVzID0gZnVuY3Rpb24gKCkgeworICAgIH07CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlv
biBkb2VzIG5vdGhpbmcuIEl0IG1heSBiZSBvdmVyd3JpdHRlbiB0byByZWN5Y2xlIGEgcGFydGlj
bGUuCisgICAgICogVGhlIFNQUyBkb2Vzbid0IGNhbGwgdGhpcyBmdW5jdGlvbiwgeW91IG1heSBo
YXZlIHRvIGNhbGwgaXQgYnkgeW91ciBvd24uCisgICAgICogZG9jIDogaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2hvd190by9Tb2xpZF9QYXJ0aWNsZV9TeXN0ZW0jcGFydGljbGUtbWFuYWdlbWVu
dAorICAgICAqIEBwYXJhbSBwYXJ0aWNsZSBUaGUgcGFydGljbGUgdG8gcmVjeWNsZQorICAgICAq
IEByZXR1cm5zIHRoZSByZWN5Y2xlZCBwYXJ0aWNsZQorICAgICAqLworICAgIFNvbGlkUGFydGlj
bGVTeXN0ZW0ucHJvdG90eXBlLnJlY3ljbGVQYXJ0aWNsZSA9IGZ1bmN0aW9uIChwYXJ0aWNsZSkg
eworICAgICAgICByZXR1cm4gcGFydGljbGU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRh
dGVzIGEgcGFydGljbGUgOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCAgYmUgb3ZlcndyaXR0ZW4gYnkg
dGhlIHVzZXIuCisgICAgICogSXQgaXMgY2FsbGVkIG9uIGVhY2ggcGFydGljbGUgYnkgYHNldFBh
cnRpY2xlcygpYC4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gY29kZSBlYWNoIHBhcnRpY2xlIGJlaGF2
aW9yLgorICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vU29saWRf
UGFydGljbGVfU3lzdGVtI3BhcnRpY2xlLW1hbmFnZW1lbnQKKyAgICAgKiBAZXhhbXBsZSA6IGp1
c3Qgc2V0IGEgcGFydGljbGUgcG9zaXRpb24gb3IgdmVsb2NpdHkgYW5kIHJlY3ljbGUgY29uZGl0
aW9ucworICAgICAqIEBwYXJhbSBwYXJ0aWNsZSBUaGUgcGFydGljbGUgdG8gdXBkYXRlCisgICAg
ICogQHJldHVybnMgdGhlIHVwZGF0ZWQgcGFydGljbGUKKyAgICAgKi8KKyAgICBTb2xpZFBhcnRp
Y2xlU3lzdGVtLnByb3RvdHlwZS51cGRhdGVQYXJ0aWNsZSA9IGZ1bmN0aW9uIChwYXJ0aWNsZSkg
eworICAgICAgICByZXR1cm4gcGFydGljbGU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRh
dGVzIGEgdmVydGV4IG9mIGEgcGFydGljbGUgOiBpdCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhl
IHVzZXIuCisgICAgICogVGhpcyB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIHZlcnRleCBwYXJ0aWNs
ZSBieSBgc2V0UGFydGljbGVzKClgIGlmIGBjb21wdXRlUGFydGljbGVWZXJ0ZXhgIGlzIHNldCB0
byB0cnVlIG9ubHkuCisgICAgICogQHBhcmFtIHBhcnRpY2xlIHRoZSBjdXJyZW50IHBhcnRpY2xl
CisgICAgICogQHBhcmFtIHZlcnRleCB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgY3VycmVudCBw
YXJ0aWNsZQorICAgICAqIEBwYXJhbSBwdCB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgdmVydGV4
IGluIHRoZSBwYXJ0aWNsZSBzaGFwZQorICAgICAqIGRvYyA6IGh0dHA6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vU29saWRfUGFydGljbGVfU3lzdGVtI3VwZGF0ZS1lYWNoLXBhcnRpY2xlLXNo
YXBlCisgICAgICogQGV4YW1wbGUgOiBqdXN0IHNldCBhIHZlcnRleCBwYXJ0aWNsZSBwb3NpdGlv
bgorICAgICAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIHZlcnRleAorICAgICAqLworICAgIFNvbGlk
UGFydGljbGVTeXN0ZW0ucHJvdG90eXBlLnVwZGF0ZVBhcnRpY2xlVmVydGV4ID0gZnVuY3Rpb24g
KHBhcnRpY2xlLCB2ZXJ0ZXgsIHB0KSB7CisgICAgICAgIHJldHVybiB2ZXJ0ZXg7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgdHJl
YXRtZW50IGJ5IGBzZXRQYXJ0aWNsZXMoKWAgYW5kIHdpbGwgYmUgcGFzc2VkIHRocmVlIHBhcmFt
ZXRlcnMuCisgICAgICogVGhpcyBkb2VzIG5vdGhpbmcgYW5kIG1heSBiZSBvdmVyd3JpdHRlbiBi
eSB0aGUgdXNlci4KKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIHBhcnRpY2xlIGluZGV4IGluIHRo
ZSBwYXJ0aWNsZSBhcnJheSB3aGVyZSB0byBzdG9wIHRvIGl0ZXJhdGUsIHNhbWUgdGhhbiB0aGUg
dmFsdWUgcGFzc2VkIHRvIHNldFBhcnRpY2xlKCkKKyAgICAgKiBAcGFyYW0gc3RvcCB0aGUgcGFy
dGljbGUgaW5kZXggaW4gdGhlIHBhcnRpY2xlIGFycmF5IHdoZXJlIHRvIHN0b3AgdG8gaXRlcmF0
ZSwgc2FtZSB0aGFuIHRoZSB2YWx1ZSBwYXNzZWQgdG8gc2V0UGFydGljbGUoKQorICAgICAqIEBw
YXJhbSB1cGRhdGUgdGhlIGJvb2xlYW4gdXBkYXRlIHZhbHVlIGFjdHVhbGx5IHBhc3NlZCB0byBz
ZXRQYXJ0aWNsZXMoKQorICAgICAqLworICAgIFNvbGlkUGFydGljbGVTeXN0ZW0ucHJvdG90eXBl
LmJlZm9yZVVwZGF0ZVBhcnRpY2xlcyA9IGZ1bmN0aW9uIChzdGFydCwgc3RvcCwgdXBkYXRlKSB7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBUaGlzIHdpbGwgYmUgY2FsbGVkICBieSBgc2V0UGFy
dGljbGVzKClgIGFmdGVyIGFsbCB0aGUgb3RoZXIgdHJlYXRtZW50cyBhbmQganVzdCBiZWZvcmUg
dGhlIGFjdHVhbCBtZXNoIHVwZGF0ZS4KKyAgICAgKiBUaGlzIHdpbGwgYmUgcGFzc2VkIHRocmVl
IHBhcmFtZXRlcnMuCisgICAgICogVGhpcyBkb2VzIG5vdGhpbmcgYW5kIG1heSBiZSBvdmVyd3Jp
dHRlbiBieSB0aGUgdXNlci4KKyAgICAgKiBAcGFyYW0gc3RhcnQgdGhlIHBhcnRpY2xlIGluZGV4
IGluIHRoZSBwYXJ0aWNsZSBhcnJheSB3aGVyZSB0byBzdG9wIHRvIGl0ZXJhdGUsIHNhbWUgdGhh
biB0aGUgdmFsdWUgcGFzc2VkIHRvIHNldFBhcnRpY2xlKCkKKyAgICAgKiBAcGFyYW0gc3RvcCB0
aGUgcGFydGljbGUgaW5kZXggaW4gdGhlIHBhcnRpY2xlIGFycmF5IHdoZXJlIHRvIHN0b3AgdG8g
aXRlcmF0ZSwgc2FtZSB0aGFuIHRoZSB2YWx1ZSBwYXNzZWQgdG8gc2V0UGFydGljbGUoKQorICAg
ICAqIEBwYXJhbSB1cGRhdGUgdGhlIGJvb2xlYW4gdXBkYXRlIHZhbHVlIGFjdHVhbGx5IHBhc3Nl
ZCB0byBzZXRQYXJ0aWNsZXMoKQorICAgICAqLworICAgIFNvbGlkUGFydGljbGVTeXN0ZW0ucHJv
dG90eXBlLmFmdGVyVXBkYXRlUGFydGljbGVzID0gZnVuY3Rpb24gKHN0YXJ0LCBzdG9wLCB1cGRh
dGUpIHsKKyAgICB9OworICAgIHJldHVybiBTb2xpZFBhcnRpY2xlU3lzdGVtOworfSgpKTsKKwor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QYXJ0aWNsZXMvc3ViRW1pdHRlci50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1BhcnRpY2xlcy9z
dWJFbWl0dGVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBTdWJFbWl0dGVyVHlwZSwgU3ViRW1pdHRlciAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdWJFbWl0dGVyVHlwZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gU3ViRW1pdHRlclR5cGU7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3ViRW1p
dHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3ViRW1pdHRlcjsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9N
YXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNf
YWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1l
c2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9t
ZXNoICovICIuL01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01p
c2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01pc2MvZGV2VG9vbHMgKi8gIi4vTWlzYy9kZXZUb29scy50cyIpOworCisK
KworCisvKioKKyAgICAgKiBUeXBlIG9mIHN1YiBlbWl0dGVyCisgICAgICovCit2YXIgU3ViRW1p
dHRlclR5cGU7CisoZnVuY3Rpb24gKFN1YkVtaXR0ZXJUeXBlKSB7CisgICAgLyoqCisgICAgICog
QXR0YWNoZWQgdG8gdGhlIHBhcnRpY2xlIG92ZXIgaXQncyBsaWZldGltZQorICAgICAqLworICAg
IFN1YkVtaXR0ZXJUeXBlW1N1YkVtaXR0ZXJUeXBlWyJBVFRBQ0hFRCJdID0gMF0gPSAiQVRUQUNI
RUQiOworICAgIC8qKgorICAgICAqIENyZWF0ZWQgd2hlbiB0aGUgcGFydGljbGUgZGllcworICAg
ICAqLworICAgIFN1YkVtaXR0ZXJUeXBlW1N1YkVtaXR0ZXJUeXBlWyJFTkQiXSA9IDFdID0gIkVO
RCI7Cit9KShTdWJFbWl0dGVyVHlwZSB8fCAoU3ViRW1pdHRlclR5cGUgPSB7fSkpOworLyoqCisg
KiBTdWIgZW1pdHRlciBjbGFzcyB1c2VkIHRvIGVtaXQgcGFydGljbGVzIGZyb20gYW4gZXhpc3Rp
bmcgcGFydGljbGUKKyAqLwordmFyIFN1YkVtaXR0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoKSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHN1YiBlbWl0dGVyCisgICAgICogQHBh
cmFtIHBhcnRpY2xlU3lzdGVtIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gdG8gYmUgdXNlZCBieSB0aGUg
c3ViIGVtaXR0ZXIKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdWJFbWl0dGVyKAorICAgIC8qKgor
ICAgICAqIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gdG8gYmUgdXNlZCBieSB0aGUgc3ViIGVtaXR0ZXIK
KyAgICAgKi8KKyAgICBwYXJ0aWNsZVN5c3RlbSkgeworICAgICAgICB0aGlzLnBhcnRpY2xlU3lz
dGVtID0gcGFydGljbGVTeXN0ZW07CisgICAgICAgIC8qKgorICAgICAgICAgKiBUeXBlIG9mIHRo
ZSBzdWJtaXR0ZXIgKERlZmF1bHQ6IEVORCkKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudHlw
ZSA9IFN1YkVtaXR0ZXJUeXBlLkVORDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBw
YXJ0aWNsZSBzaG91bGQgaW5oZXJpdCB0aGUgZGlyZWN0aW9uIGZyb20gdGhlIHBhcnRpY2xlIGl0
J3MgYXR0YWNoZWQgdG8uICgrWSB3aWxsIGZhY2UgdGhlIGRpcmVjdGlvbiB0aGUgcGFydGljbGUg
aXMgbW92aW5nKSAoRGVmYXVsdDogZmFsc2UpCisgICAgICAgICAqIE5vdGU6IFRoaXMgb25seSBp
cyBzdXBwb3J0ZWQgd2hlbiB1c2luZyBhbiBlbWl0dGVyIG9mIHR5cGUgTWVzaAorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5pbmhlcml0RGlyZWN0aW9uID0gZmFsc2U7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBIb3cgbXVjaCBvZiB0aGUgYXR0YWNoZWQgcGFydGljbGVzIHNwZWVkIHNob3Vs
ZCBiZSBhZGRlZCB0byB0aGUgc3ViIGVtaXR0ZWQgcGFydGljbGUgKGRlZmF1bHQ6IDApCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLmluaGVyaXRlZFZlbG9jaXR5QW1vdW50ID0gMDsKKyAgICAg
ICAgLy8gQ3JlYXRlIG1lc2ggYXMgZW1pdHRlciB0byBzdXBwb3J0IHJvdGF0aW9uCisgICAgICAg
IGlmICghcGFydGljbGVTeXN0ZW0uZW1pdHRlciB8fCAhcGFydGljbGVTeXN0ZW0uZW1pdHRlci5k
aXNwb3NlKSB7CisgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5lbWl0dGVyID0gbmV3IF9NZXNo
ZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFic3RyYWN0TWVz
aCJdKCJTdWJlbWl0dGVyU3lzdGVtRW1pdHRlciIsIHBhcnRpY2xlU3lzdGVtLmdldFNjZW5lKCkp
OworICAgICAgICB9CisgICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgZGlzcG9zZSBvZiBzdWJlbWl0
dGVyIHdoZW4gc3lzdGVtIGlzIGRpc3Bvc2VkCisgICAgICAgIHBhcnRpY2xlU3lzdGVtLm9uRGlz
cG9zZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChwYXJ0aWNs
ZVN5c3RlbS5lbWl0dGVyICYmIHBhcnRpY2xlU3lzdGVtLmVtaXR0ZXIuZGlzcG9zZSkgeworICAg
ICAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmVtaXR0ZXIuZGlzcG9zZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICB9CisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBzdWIg
ZW1pdHRlcgorICAgICAqIEByZXR1cm5zIHRoZSBjbG9uZWQgc3ViIGVtaXR0ZXIKKyAgICAgKi8K
KyAgICBTdWJFbWl0dGVyLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
Ly8gQ2xvbmUgcGFydGljbGUgc3lzdGVtCisgICAgICAgIHZhciBlbWl0dGVyID0gdGhpcy5wYXJ0
aWNsZVN5c3RlbS5lbWl0dGVyOworICAgICAgICBpZiAoIWVtaXR0ZXIpIHsKKyAgICAgICAgICAg
IGVtaXR0ZXIgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlZlY3RvcjMiXSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVtaXR0ZXIg
aW5zdGFuY2VvZiBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdKSB7CisgICAgICAgICAgICBlbWl0dGVyID0gZW1pdHRlci5jbG9uZSgpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVtaXR0ZXIgaW5zdGFuY2VvZiBfTWVzaGVzX2Fi
c3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdE1lc2giXSkg
eworICAgICAgICAgICAgZW1pdHRlciA9IG5ldyBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siTWVzaCJdKCIiLCBlbWl0dGVyLmdldFNjZW5lKCkpOworICAgICAgICAg
ICAgZW1pdHRlci5pc1Zpc2libGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgY2xv
bmUgPSBuZXcgU3ViRW1pdHRlcih0aGlzLnBhcnRpY2xlU3lzdGVtLmNsb25lKCIiLCBlbWl0dGVy
KSk7CisgICAgICAgIC8vIENsb25lIHByb3BlcnRpZXMKKyAgICAgICAgY2xvbmUucGFydGljbGVT
eXN0ZW0ubmFtZSArPSAiQ2xvbmUiOworICAgICAgICBjbG9uZS50eXBlID0gdGhpcy50eXBlOwor
ICAgICAgICBjbG9uZS5pbmhlcml0RGlyZWN0aW9uID0gdGhpcy5pbmhlcml0RGlyZWN0aW9uOwor
ICAgICAgICBjbG9uZS5pbmhlcml0ZWRWZWxvY2l0eUFtb3VudCA9IHRoaXMuaW5oZXJpdGVkVmVs
b2NpdHlBbW91bnQ7CisgICAgICAgIGNsb25lLnBhcnRpY2xlU3lzdGVtLl9kaXNwb3NlRW1pdHRl
ck9uRGlzcG9zZSA9IHRydWU7CisgICAgICAgIGNsb25lLnBhcnRpY2xlU3lzdGVtLmRpc3Bvc2VP
blN0b3AgPSB0cnVlOworICAgICAgICByZXR1cm4gY2xvbmU7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBTZXJpYWxpemUgY3VycmVudCBvYmplY3QgdG8gYSBKU09OIG9iamVjdAorICAgICAqIEBy
ZXR1cm5zIHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIFN1YkVtaXR0ZXIucHJv
dG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6YXRp
b25PYmplY3QgPSB7fTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC50eXBlID0gdGhpcy50
eXBlOworICAgICAgICBzZXJpYWxpemF0aW9uT2JqZWN0LmluaGVyaXREaXJlY3Rpb24gPSB0aGlz
LmluaGVyaXREaXJlY3Rpb247CisgICAgICAgIHNlcmlhbGl6YXRpb25PYmplY3QuaW5oZXJpdGVk
VmVsb2NpdHlBbW91bnQgPSB0aGlzLmluaGVyaXRlZFZlbG9jaXR5QW1vdW50OworICAgICAgICBz
ZXJpYWxpemF0aW9uT2JqZWN0LnBhcnRpY2xlU3lzdGVtID0gdGhpcy5wYXJ0aWNsZVN5c3RlbS5z
ZXJpYWxpemUoKTsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25PYmplY3Q7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIFN1YkVtaXR0ZXIuX1BhcnNlUGFydGljbGVTeXN0ZW0g
PSBmdW5jdGlvbiAoc3lzdGVtLCBzY2VuZSwgcm9vdFVybCkgeworICAgICAgICB0aHJvdyBfTWlz
Y19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJfRGV2VG9vbHMiXS5XYXJu
SW1wb3J0KCJQYXJzZVBhcnRpY2xlIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgbmV3IFN1YkVtaXR0ZXIgZnJvbSBhIHNlcmlhbGl6ZWQgSlNPTiB2ZXJzaW9uCisgICAgICog
QHBhcmFtIHNlcmlhbGl6YXRpb25PYmplY3QgZGVmaW5lcyB0aGUgSlNPTiBvYmplY3QgdG8gcmVh
ZCBmcm9tCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAg
ICAgKiBAcGFyYW0gcm9vdFVybCBkZWZpbmVzIHRoZSByb290VXJsIGZvciBkYXRhIGxvYWRpbmcK
KyAgICAgKiBAcmV0dXJucyBhIG5ldyBTdWJFbWl0dGVyCisgICAgICovCisgICAgU3ViRW1pdHRl
ci5QYXJzZSA9IGZ1bmN0aW9uIChzZXJpYWxpemF0aW9uT2JqZWN0LCBzY2VuZSwgcm9vdFVybCkg
eworICAgICAgICB2YXIgc3lzdGVtID0gc2VyaWFsaXphdGlvbk9iamVjdC5wYXJ0aWNsZVN5c3Rl
bTsKKyAgICAgICAgdmFyIHN1YkVtaXR0ZXIgPSBuZXcgU3ViRW1pdHRlcihTdWJFbWl0dGVyLl9Q
YXJzZVBhcnRpY2xlU3lzdGVtKHN5c3RlbSwgc2NlbmUsIHJvb3RVcmwpKTsKKyAgICAgICAgc3Vi
RW1pdHRlci50eXBlID0gc2VyaWFsaXphdGlvbk9iamVjdC50eXBlOworICAgICAgICBzdWJFbWl0
dGVyLmluaGVyaXREaXJlY3Rpb24gPSBzZXJpYWxpemF0aW9uT2JqZWN0LmluaGVyaXREaXJlY3Rp
b247CisgICAgICAgIHN1YkVtaXR0ZXIuaW5oZXJpdGVkVmVsb2NpdHlBbW91bnQgPSBzZXJpYWxp
emF0aW9uT2JqZWN0LmluaGVyaXRlZFZlbG9jaXR5QW1vdW50OworICAgICAgICBzdWJFbWl0dGVy
LnBhcnRpY2xlU3lzdGVtLl9pc1N1YkVtaXR0ZXIgPSB0cnVlOworICAgICAgICByZXR1cm4gc3Vi
RW1pdHRlcjsKKyAgICB9OworICAgIC8qKiBSZWxlYXNlIGFzc29jaWF0ZWQgcmVzb3VyY2VzICov
CisgICAgU3ViRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdGhpcy5wYXJ0aWNsZVN5c3RlbS5kaXNwb3NlKCk7CisgICAgfTsKKyAgICByZXR1cm4gU3Vi
RW1pdHRlcjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGh5c2ljcy9QbHVn
aW5zL2FtbW9KU1BsdWdpbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vUGh5c2ljcy9QbHVnaW5zL2FtbW9KU1BsdWdpbi50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBBbW1vSlNQbHVnaW4gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQW1tb0pTUGx1Z2luIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBbW1vSlNQbHVn
aW47IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvbG9nZ2VyICovICIuL01pc2Mv
bG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BoeXNpY3NfcGh5c2ljc0lt
cG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi9QaHlzaWNzL3BoeXNpY3NJbXBvc3RvciAqLyAiLi9QaHlzaWNzL3BoeXNpY3NJ
bXBvc3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9QaHlzaWNzX3BoeXNpY3NK
b2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vUGh5c2ljcy9waHlzaWNzSm9pbnQgKi8gIi4vUGh5c2ljcy9waHlzaWNzSm9pbnQu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVz
L2J1ZmZlciAqLyAiLi9NZXNoZXMvYnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01lc2hlc19tZXNoX3ZlcnRleERhdGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01lc2hlcy9tZXNoLnZlcnRleERhdGEgKi8g
Ii4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NZXNoZXNfQnVpbGRlcnNfc2hhcGVCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NZXNoZXMvQnVpbGRlcnMvc2hhcGVC
dWlsZGVyICovICIuL01lc2hlcy9CdWlsZGVycy9zaGFwZUJ1aWxkZXIudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX0J1aWxkZXJzX2xpbmVzQnVpbGRlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWVzaGVz
L0J1aWxkZXJzL2xpbmVzQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvbGluZXNCdWlsZGVy
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BoeXNpY3NSYXljYXN0UmVzdWx0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9w
aHlzaWNzUmF5Y2FzdFJlc3VsdCAqLyAiLi9QaHlzaWNzL3BoeXNpY3NSYXljYXN0UmVzdWx0LnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfc2NhbGFyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRo
cy9tYXRoLnNjYWxhciAqLyAiLi9NYXRocy9tYXRoLnNjYWxhci50cyIpOworCisKKworCisKKwor
CisKKworCisvKioKKyAqIEFtbW9KUyBQaHlzaWNzIHBsdWdpbgorICogQHNlZSBodHRwczovL2Rv
Yy5iYWJ5bG9uanMuY29tL2hvd190by91c2luZ190aGVfcGh5c2ljc19lbmdpbmUKKyAqIEBzZWUg
aHR0cHM6Ly9naXRodWIuY29tL2tyaXBrZW4vYW1tby5qcy8KKyAqLwordmFyIEFtbW9KU1BsdWdp
biA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBJbml0aWFs
aXplcyB0aGUgYW1tb0pTIHBsdWdpbgorICAgICAqIEBwYXJhbSBfdXNlRGVsdGFGb3JXb3JsZFN0
ZXAgaWYgdGhlIHRpbWUgYmV0d2VlbiBmcmFtZXMgc2hvdWxkIGJlIHVzZWQgd2hlbiBjYWxjdWxh
dGluZyBwaHlzaWNzIHN0ZXBzIChEZWZhdWx0OiB0cnVlKQorICAgICAqIEBwYXJhbSBhbW1vSW5q
ZWN0aW9uIGNhbiBiZSB1c2VkIHRvIGluamVjdCB5b3VyIG93biBhbW1vIHJlZmVyZW5jZQorICAg
ICAqIEBwYXJhbSBvdmVybGFwcGluZ1BhaXJDYWNoZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHlv
dXIgb3duIG92ZXJsYXBwaW5nIHBhaXIgY2FjaGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBBbW1v
SlNQbHVnaW4oX3VzZURlbHRhRm9yV29ybGRTdGVwLCBhbW1vSW5qZWN0aW9uLCBvdmVybGFwcGlu
Z1BhaXJDYWNoZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoX3Vz
ZURlbHRhRm9yV29ybGRTdGVwID09PSB2b2lkIDApIHsgX3VzZURlbHRhRm9yV29ybGRTdGVwID0g
dHJ1ZTsgfQorICAgICAgICBpZiAoYW1tb0luamVjdGlvbiA9PT0gdm9pZCAwKSB7IGFtbW9Jbmpl
Y3Rpb24gPSBBbW1vOyB9CisgICAgICAgIGlmIChvdmVybGFwcGluZ1BhaXJDYWNoZSA9PT0gdm9p
ZCAwKSB7IG92ZXJsYXBwaW5nUGFpckNhY2hlID0gbnVsbDsgfQorICAgICAgICB0aGlzLl91c2VE
ZWx0YUZvcldvcmxkU3RlcCA9IF91c2VEZWx0YUZvcldvcmxkU3RlcDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgQW1tbyBsaWJyYXJ5CisgICAgICAgICAqLworICAg
ICAgICB0aGlzLmJqc0FNTU8gPSB7fTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE5hbWUgb2Yg
dGhlIHBsdWdpbgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5uYW1lID0gIkFtbW9KU1BsdWdp
biI7CisgICAgICAgIHRoaXMuX3RpbWVTdGVwID0gMSAvIDYwOworICAgICAgICB0aGlzLl9maXhl
ZFRpbWVTdGVwID0gMSAvIDYwOworICAgICAgICB0aGlzLl9tYXhTdGVwcyA9IDU7CisgICAgICAg
IHRoaXMuX3RtcFF1YXRlcm5pb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIlF1YXRlcm5pb24iXSgpOworICAgICAgICB0aGlzLl90bXBDb250
YWN0Q2FsbGJhY2tSZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdG1wVmVjdG9yID0gbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0oKTsKKyAgICAgICAgdGhpcy5fdG1wTWF0cml4ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRyaXgiXSgpOworICAgICAgICBpZiAodHlw
ZW9mIGFtbW9JbmplY3Rpb24gPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgIGFtbW9Jbmpl
Y3Rpb24odGhpcy5ianNBTU1PKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHRoaXMuYmpzQU1NTyA9IGFtbW9JbmplY3Rpb247CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCF0aGlzLmlzU3VwcG9ydGVkKCkpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJvcigiQW1tb0pTIGlzIG5vdCBhdmFp
bGFibGUuIFBsZWFzZSBtYWtlIHN1cmUgeW91IGluY2x1ZGVkIHRoZSBqcyBmaWxlLiIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHBo
eXNpY3Mgd29ybGQKKyAgICAgICAgdGhpcy5fY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IG5ldyB0
aGlzLmJqc0FNTU8uYnRTb2Z0Qm9keVJpZ2lkQm9keUNvbGxpc2lvbkNvbmZpZ3VyYXRpb24oKTsK
KyAgICAgICAgdGhpcy5fZGlzcGF0Y2hlciA9IG5ldyB0aGlzLmJqc0FNTU8uYnRDb2xsaXNpb25E
aXNwYXRjaGVyKHRoaXMuX2NvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOworICAgICAgICB0aGlzLl9v
dmVybGFwcGluZ1BhaXJDYWNoZSA9IG92ZXJsYXBwaW5nUGFpckNhY2hlIHx8IG5ldyB0aGlzLmJq
c0FNTU8uYnREYnZ0QnJvYWRwaGFzZSgpOworICAgICAgICB0aGlzLl9zb2x2ZXIgPSBuZXcgdGhp
cy5ianNBTU1PLmJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyKCk7CisgICAgICAg
IHRoaXMuX3NvZnRCb2R5U29sdmVyID0gbmV3IHRoaXMuYmpzQU1NTy5idERlZmF1bHRTb2Z0Qm9k
eVNvbHZlcigpOworICAgICAgICB0aGlzLndvcmxkID0gbmV3IHRoaXMuYmpzQU1NTy5idFNvZnRS
aWdpZER5bmFtaWNzV29ybGQodGhpcy5fZGlzcGF0Y2hlciwgdGhpcy5fb3ZlcmxhcHBpbmdQYWly
Q2FjaGUsIHRoaXMuX3NvbHZlciwgdGhpcy5fY29sbGlzaW9uQ29uZmlndXJhdGlvbiwgdGhpcy5f
c29mdEJvZHlTb2x2ZXIpOworICAgICAgICB0aGlzLl90bXBBbW1vQ29uY3JldGVDb250YWN0UmVz
dWx0Q2FsbGJhY2sgPSBuZXcgdGhpcy5ianNBTU1PLkNvbmNyZXRlQ29udGFjdFJlc3VsdENhbGxi
YWNrKCk7CisgICAgICAgIHRoaXMuX3RtcEFtbW9Db25jcmV0ZUNvbnRhY3RSZXN1bHRDYWxsYmFj
ay5hZGRTaW5nbGVSZXN1bHQgPSBmdW5jdGlvbiAoKSB7IF90aGlzLl90bXBDb250YWN0Q2FsbGJh
Y2tSZXN1bHQgPSB0cnVlOyB9OworICAgICAgICB0aGlzLl9yYXljYXN0UmVzdWx0ID0gbmV3IF9w
aHlzaWNzUmF5Y2FzdFJlc3VsdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQaHlzaWNz
UmF5Y2FzdFJlc3VsdCJdKCk7CisgICAgICAgIC8vIENyZWF0ZSB0ZW1wIGFtbW8gdmFyaWFibGVz
CisgICAgICAgIHRoaXMuX3RtcEFtbW9UcmFuc2Zvcm0gPSBuZXcgdGhpcy5ianNBTU1PLmJ0VHJh
bnNmb3JtKCk7CisgICAgICAgIHRoaXMuX3RtcEFtbW9UcmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsK
KyAgICAgICAgdGhpcy5fdG1wQW1tb1F1YXRlcm5pb24gPSBuZXcgdGhpcy5ianNBTU1PLmJ0UXVh
dGVybmlvbigwLCAwLCAwLCAxKTsKKyAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckEgPSBuZXcg
dGhpcy5ianNBTU1PLmJ0VmVjdG9yMygwLCAwLCAwKTsKKyAgICAgICAgdGhpcy5fdG1wQW1tb1Zl
Y3RvckIgPSBuZXcgdGhpcy5ianNBTU1PLmJ0VmVjdG9yMygwLCAwLCAwKTsKKyAgICAgICAgdGhp
cy5fdG1wQW1tb1ZlY3RvckMgPSBuZXcgdGhpcy5ianNBTU1PLmJ0VmVjdG9yMygwLCAwLCAwKTsK
KyAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckQgPSBuZXcgdGhpcy5ianNBTU1PLmJ0VmVjdG9y
MygwLCAwLCAwKTsKKyAgICB9CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZ3Jhdml0eSBvZiB0
aGUgcGh5c2ljcyB3b3JsZCAobS8oc14yKSkKKyAgICAgKiBAcGFyYW0gZ3Jhdml0eSBHcmF2aXR5
IHRvIHNldAorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuc2V0R3Jhdml0eSA9
IGZ1bmN0aW9uIChncmF2aXR5KSB7CisgICAgICAgIHRoaXMuX3RtcEFtbW9WZWN0b3JBLnNldFZh
bHVlKGdyYXZpdHkueCwgZ3Jhdml0eS55LCBncmF2aXR5LnopOworICAgICAgICB0aGlzLndvcmxk
LnNldEdyYXZpdHkodGhpcy5fdG1wQW1tb1ZlY3RvckEpOworICAgICAgICB0aGlzLndvcmxkLmdl
dFdvcmxkSW5mbygpLnNldF9tX2dyYXZpdHkodGhpcy5fdG1wQW1tb1ZlY3RvckEpOworICAgIH07
CisgICAgLyoqCisgICAgICogQW1vdW50IG9mIHRpbWUgdG8gc3RlcCBmb3J3YXJkIG9uIGVhY2gg
ZnJhbWUgKG9ubHkgdXNlZCBpZiB1c2VEZWx0YUZvcldvcmxkU3RlcCBpcyBmYWxzZSBpbiB0aGUg
Y29uc3RydWN0b3IpCisgICAgICogQHBhcmFtIHRpbWVTdGVwIHRpbWVzdGVwIHRvIHVzZSBpbiBz
ZWNvbmRzCisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5zZXRUaW1lU3RlcCA9
IGZ1bmN0aW9uICh0aW1lU3RlcCkgeworICAgICAgICB0aGlzLl90aW1lU3RlcCA9IHRpbWVTdGVw
OworICAgIH07CisgICAgLyoqCisgICAgICogSW5jcmVtZW50IHRvIHN0ZXAgZm9yd2FyZCBpbiB0
aGUgcGh5c2ljcyBlbmdpbmUgKElmIHRpbWVTdGVwIGlzIHNldCB0byAxLzYwIGFuZCBmaXhlZFRp
bWVTdGVwIGlzIHNldCB0byAxLzEyMCB0aGUgcGh5c2ljcyBlbmdpbmUgc2hvdWxkIHJ1biAyIHN0
ZXBzIHBlciBmcmFtZSkgKERlZmF1bHQ6IDEvNjApCisgICAgICogQHBhcmFtIGZpeGVkVGltZVN0
ZXAgZml4ZWRUaW1lU3RlcCB0byB1c2UgaW4gc2Vjb25kcworICAgICAqLworICAgIEFtbW9KU1Bs
dWdpbi5wcm90b3R5cGUuc2V0Rml4ZWRUaW1lU3RlcCA9IGZ1bmN0aW9uIChmaXhlZFRpbWVTdGVw
KSB7CisgICAgICAgIHRoaXMuX2ZpeGVkVGltZVN0ZXAgPSBmaXhlZFRpbWVTdGVwOworICAgIH07
CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3RlcHMgYnkgdGhl
IHBoeXNpY3MgZW5naW5lIHBlciBmcmFtZSAoRGVmYXVsdDogNSkKKyAgICAgKiBAcGFyYW0gbWF4
U3RlcHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN0ZXBzIGJ5IHRoZSBwaHlzaWNzIGVuZ2luZSBw
ZXIgZnJhbWUKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLnNldE1heFN0ZXBz
ID0gZnVuY3Rpb24gKG1heFN0ZXBzKSB7CisgICAgICAgIHRoaXMuX21heFN0ZXBzID0gbWF4U3Rl
cHM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHRpbWVzdGVwIChv
bmx5IHVzZWQgaWYgdXNlRGVsdGFGb3JXb3JsZFN0ZXAgaXMgZmFsc2UgaW4gdGhlIGNvbnN0cnVj
dG9yKQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHRpbWVzdGVwIGluIHNlY29uZHMKKyAg
ICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLmdldFRpbWVTdGVwID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdGltZVN0ZXA7CisgICAgfTsKKyAgICAvLyBBbW1v
J3MgY29udGFjdFRlc3QgYW5kIGNvbnRhY3RQYWlyVGVzdCB0YWtlIGEgY2FsbGJhY2sgdGhhdCBy
dW5zIHN5bmNocm9ub3VzbHksIHdyYXAgdGhlbSBzbyB0aGF0IHRoZXkgYXJlIGVhc2llciB0byBj
b25zdW1lCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5faXNJbXBvc3RvckluQ29udGFjdCA9
IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICB0aGlzLl90bXBDb250YWN0Q2FsbGJhY2tS
ZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy53b3JsZC5jb250YWN0VGVzdChpbXBvc3Rvci5w
aHlzaWNzQm9keSwgdGhpcy5fdG1wQW1tb0NvbmNyZXRlQ29udGFjdFJlc3VsdENhbGxiYWNrKTsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3RtcENvbnRhY3RDYWxsYmFja1Jlc3VsdDsKKyAgICB9Owor
ICAgIC8vIEFtbW8ncyBjb2xsaXNpb24gZXZlbnRzIGhhdmUgc29tZSB3ZWlyZCBxdWlya3MKKyAg
ICAvLyBjb250YWN0UGFpclRlc3QgZmlyZXMgdG9vIG1hbnkgZXZlbnRzIGFzIGl0IGZpcmVzIGV2
ZW50cyBldmVuIHdoZW4gb2JqZWN0cyBhcmUgY2xvc2UgdG9nZXRoZXIgYnV0IGNvbnRhY3RUZXN0
IGRvZXMgbm90CisgICAgLy8gc28gb25seSBmaXJlIGV2ZW50IGlmIGJvdGggY29udGFjdFRlc3Qg
YW5kIGNvbnRhY3RQYWlyVGVzdCBoYXZlIGEgaGl0CisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlw
ZS5faXNJbXBvc3RvclBhaXJJbkNvbnRhY3QgPSBmdW5jdGlvbiAoaW1wb3N0b3JBLCBpbXBvc3Rv
ckIpIHsKKyAgICAgICAgdGhpcy5fdG1wQ29udGFjdENhbGxiYWNrUmVzdWx0ID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMud29ybGQuY29udGFjdFBhaXJUZXN0KGltcG9zdG9yQS5waHlzaWNzQm9keSwg
aW1wb3N0b3JCLnBoeXNpY3NCb2R5LCB0aGlzLl90bXBBbW1vQ29uY3JldGVDb250YWN0UmVzdWx0
Q2FsbGJhY2spOworICAgICAgICByZXR1cm4gdGhpcy5fdG1wQ29udGFjdENhbGxiYWNrUmVzdWx0
OworICAgIH07CisgICAgLy8gQW1tbydzIGJlaGF2aW9yIHdoZW4gbWF4U3RlcHMgPiAwIGRvZXMg
bm90IGJlaGF2ZSBhcyBkZXNjcmliZWQgaW4gZG9jcworICAgIC8vIEBzZWUgaHR0cDovL3d3dy5i
dWxsZXRwaHlzaWNzLm9yZy9tZWRpYXdpa2ktMS41LjgvaW5kZXgucGhwL1N0ZXBwaW5nX1RoZV9X
b3JsZAorICAgIC8vCisgICAgLy8gV2hlbiBtYXhTdGVwcyBpcyAwIGRvIHRoZSBlbnRpcmUgc2lt
dWxhdGlvbiBpbiBvbmUgc3RlcAorICAgIC8vIFdoZW4gbWF4U3RlcHMgaXMgPiAwLCBydW4gdXAg
dG8gbWF4U3RlcCB0aW1lcywgaWYgb24gdGhlIGxhc3Qgc3RlcCB0aGUgKHJlbWFpbmluZyBzdGVw
IC0gZml4ZWRUaW1lU3RlcCkgaXMgPCBmaXhlZFRpbWVTdGVwLCB0aGUgcmVtYWluZGVyIHdpbGwg
YmUgdXNlZCBmb3IgdGhlIHN0ZXAuIChlZy4gaWYgcmVtYWluZGVyIGlzIDEuMDAxIGFuZCBmaXhl
ZFRpbWVTdGVwIGlzIDEgdGhlIGxhc3Qgc3RlcCB3aWxsIGJlIDEuMDAxLCBpZiBpbnN0ZWFkIGl0
IGRpZCAyIHN0ZXBzICgxLCAwLjAwMSkgaXNzdWVzIG9jY3VlcmVkIHdoZW4gaGF2aW5nIGEgdGlu
eSBzdGVwIGluIGFtbW8pCisgICAgLy8gTm90ZTogVG8gZ2V0IGRldGVybWluaXN0aWMgcGh5c2lj
cywgdGltZVN0ZXAgd291bGQgYWx3YXlzIG5lZWQgdG8gYmUgZGl2aXNpYmxlIGJ5IGZpeGVkVGlt
ZVN0ZXAKKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLl9zdGVwU2ltdWxhdGlvbiA9IGZ1bmN0
aW9uICh0aW1lU3RlcCwgbWF4U3RlcHMsIGZpeGVkVGltZVN0ZXApIHsKKyAgICAgICAgaWYgKHRp
bWVTdGVwID09PSB2b2lkIDApIHsgdGltZVN0ZXAgPSAxIC8gNjA7IH0KKyAgICAgICAgaWYgKG1h
eFN0ZXBzID09PSB2b2lkIDApIHsgbWF4U3RlcHMgPSAxMDsgfQorICAgICAgICBpZiAoZml4ZWRU
aW1lU3RlcCA9PT0gdm9pZCAwKSB7IGZpeGVkVGltZVN0ZXAgPSAxIC8gNjA7IH0KKyAgICAgICAg
aWYgKG1heFN0ZXBzID09IDApIHsKKyAgICAgICAgICAgIHRoaXMud29ybGQuc3RlcFNpbXVsYXRp
b24odGltZVN0ZXAsIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
d2hpbGUgKG1heFN0ZXBzID4gMCAmJiB0aW1lU3RlcCA+IDApIHsKKyAgICAgICAgICAgICAgICBp
ZiAodGltZVN0ZXAgLSBmaXhlZFRpbWVTdGVwIDwgZml4ZWRUaW1lU3RlcCkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLndvcmxkLnN0ZXBTaW11bGF0aW9uKHRpbWVTdGVwLCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGltZVN0ZXAgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGltZVN0ZXAgLT0gZml4ZWRUaW1l
U3RlcDsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JsZC5zdGVwU2ltdWxhdGlvbihmaXhl
ZFRpbWVTdGVwLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWF4U3Rl
cHMtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
TW92ZXMgdGhlIHBoeXNpY3Mgc2ltdWxhdGlvbiBmb3J3YXJkIGRlbHRhIHNlY29uZHMgYW5kIHVw
ZGF0ZXMgdGhlIGdpdmVuIHBoeXNpY3MgaW1wb3N0ZXJzCisgICAgICogUHJpb3IgdG8gdGhlIHN0
ZXAgdGhlIGltcG9zdGVycyBwaHlzaWNzIGxvY2F0aW9uIGlzIHNldCB0byB0aGUgcG9zaXRpb24g
b2YgdGhlIGJhYnlsb24gbWVzaGVzCisgICAgICogQWZ0ZXIgdGhlIHN0ZXAgdGhlIGJhYnlsb24g
bWVzaGVzIGFyZSBzZXQgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBwaHlzaWNzIGltcG9zdGVycwor
ICAgICAqIEBwYXJhbSBkZWx0YSBhbW91bnQgb2YgdGltZSB0byBzdGVwIGZvcndhcmQKKyAgICAg
KiBAcGFyYW0gaW1wb3N0b3JzIGFycmF5IG9mIGltcG9zdGVycyB0byB1cGRhdGUgYmVmb3JlL2Fm
dGVyIHRoZSBzdGVwCisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5leGVjdXRl
U3RlcCA9IGZ1bmN0aW9uIChkZWx0YSwgaW1wb3N0b3JzKSB7CisgICAgICAgIGZvciAodmFyIF9p
ID0gMCwgaW1wb3N0b3JzXzEgPSBpbXBvc3RvcnM7IF9pIDwgaW1wb3N0b3JzXzEubGVuZ3RoOyBf
aSsrKSB7CisgICAgICAgICAgICB2YXIgaW1wb3N0b3IgPSBpbXBvc3RvcnNfMVtfaV07CisgICAg
ICAgICAgICAvLyBVcGRhdGUgcGh5c2ljcyB3b3JsZCBvYmplY3RzIHRvIG1hdGNoIGJhYnlsb24g
d29ybGQKKyAgICAgICAgICAgIGlmICghaW1wb3N0b3Iuc29mdCkgeworICAgICAgICAgICAgICAg
IGltcG9zdG9yLmJlZm9yZVN0ZXAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9zdGVwU2ltdWxhdGlvbih0aGlzLl91c2VEZWx0YUZvcldvcmxkU3RlcCA/IGRlbHRh
IDogdGhpcy5fdGltZVN0ZXAsIHRoaXMuX21heFN0ZXBzLCB0aGlzLl9maXhlZFRpbWVTdGVwKTsK
KyAgICAgICAgZm9yICh2YXIgX2EgPSAwLCBpbXBvc3RvcnNfMiA9IGltcG9zdG9yczsgX2EgPCBp
bXBvc3RvcnNfMi5sZW5ndGg7IF9hKyspIHsKKyAgICAgICAgICAgIHZhciBtYWluSW1wb3N0b3Ig
PSBpbXBvc3RvcnNfMltfYV07CisgICAgICAgICAgICAvLyBBZnRlciBwaHlzaWNzIHVwZGF0ZSBt
YWtlIGJhYnlsb24gd29ybGQgb2JqZWN0cyBtYXRjaCBwaHlzaWNzIHdvcmxkIG9iamVjdHMKKyAg
ICAgICAgICAgIGlmIChtYWluSW1wb3N0b3Iuc29mdCkgeworICAgICAgICAgICAgICAgIHRoaXMu
X2FmdGVyU29mdFN0ZXAobWFpbkltcG9zdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIG1haW5JbXBvc3Rvci5hZnRlclN0ZXAoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIC8vIEhhbmRsZSBjb2xsaXNpb24gZXZlbnQKKyAgICAgICAg
ICAgIGlmIChtYWluSW1wb3N0b3IuX29uUGh5c2ljc0NvbGxpZGVDYWxsYmFja3MubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ltcG9zdG9ySW5Db250YWN0KG1haW5J
bXBvc3RvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBfYyA9IG1h
aW5JbXBvc3Rvci5fb25QaHlzaWNzQ29sbGlkZUNhbGxiYWNrczsgX2IgPCBfYy5sZW5ndGg7IF9i
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xsaWRlQ2FsbGJhY2sgPSBfY1tf
Yl07CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IDAsIF9lID0gY29sbGlk
ZUNhbGxiYWNrLm90aGVySW1wb3N0b3JzOyBfZCA8IF9lLmxlbmd0aDsgX2QrKykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBvdGhlckltcG9zdG9yID0gX2VbX2RdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWluSW1wb3N0b3IucGh5c2ljc0JvZHkuaXNBY3Rp
dmUoKSB8fCBvdGhlckltcG9zdG9yLnBoeXNpY3NCb2R5LmlzQWN0aXZlKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW1wb3N0b3JQYWlySW5Db250YWN0
KG1haW5JbXBvc3Rvciwgb3RoZXJJbXBvc3RvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1haW5JbXBvc3Rvci5vbkNvbGxpZGUoeyBib2R5OiBvdGhlckltcG9zdG9y
LnBoeXNpY3NCb2R5IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ro
ZXJJbXBvc3Rvci5vbkNvbGxpZGUoeyBib2R5OiBtYWluSW1wb3N0b3IucGh5c2ljc0JvZHkgfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFVwZGF0ZSBiYWJ5bG9uIG1lc2ggdG8gbWF0Y2ggcGh5c2ljcyB3b3Js
ZCBvYmplY3QKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0ZXIgdG8gbWF0Y2gKKyAgICAg
Ki8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLl9hZnRlclNvZnRTdGVwID0gZnVuY3Rpb24g
KGltcG9zdG9yKSB7CisgICAgICAgIGlmIChpbXBvc3Rvci50eXBlID09PSBfUGh5c2ljc19waHlz
aWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUGh5c2ljc0ltcG9zdG9y
Il0uUm9wZUltcG9zdG9yKSB7CisgICAgICAgICAgICB0aGlzLl9yb3BlU3RlcChpbXBvc3Rvcik7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9zb2Z0Ym9keU9y
Q2xvdGhTdGVwKGltcG9zdG9yKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
VXBkYXRlIGJhYnlsb24gbWVzaCB2ZXJ0aWNlcyB2ZXJ0aWNlcyB0byBtYXRjaCBwaHlzaWNzIHdv
cmxkIHNvZnRib2R5IG9yIGNsb3RoCisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdGVyIHRv
IG1hdGNoCisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5fcm9wZVN0ZXAgPSBm
dW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgdmFyIGJvZHlWZXJ0aWNlcyA9IGltcG9zdG9y
LnBoeXNpY3NCb2R5LmdldF9tX25vZGVzKCk7CisgICAgICAgIHZhciBuYlZlcnRpY2VzID0gYm9k
eVZlcnRpY2VzLnNpemUoKTsKKyAgICAgICAgdmFyIG5vZGU7CisgICAgICAgIHZhciBub2RlUG9z
aXRpb25zOworICAgICAgICB2YXIgeCwgeSwgejsKKyAgICAgICAgdmFyIHBhdGggPSBuZXcgQXJy
YXkoKTsKKyAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBuYlZlcnRpY2VzOyBuKyspIHsKKyAg
ICAgICAgICAgIG5vZGUgPSBib2R5VmVydGljZXMuYXQobik7CisgICAgICAgICAgICBub2RlUG9z
aXRpb25zID0gbm9kZS5nZXRfbV94KCk7CisgICAgICAgICAgICB4ID0gbm9kZVBvc2l0aW9ucy54
KCk7CisgICAgICAgICAgICB5ID0gbm9kZVBvc2l0aW9ucy55KCk7CisgICAgICAgICAgICB6ID0g
bm9kZVBvc2l0aW9ucy56KCk7CisgICAgICAgICAgICBwYXRoLnB1c2gobmV3IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oeCwgeSwgeikp
OworICAgICAgICB9CisgICAgICAgIHZhciBvYmplY3QgPSBpbXBvc3Rvci5vYmplY3Q7CisgICAg
ICAgIHZhciBzaGFwZSA9IGltcG9zdG9yLmdldFBhcmFtKCJzaGFwZSIpOworICAgICAgICBpZiAo
aW1wb3N0b3IuX2lzRnJvbUxpbmUpIHsKKyAgICAgICAgICAgIGltcG9zdG9yLm9iamVjdCA9IF9N
ZXNoZXNfQnVpbGRlcnNfbGluZXNCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19b
IkxpbmVzQnVpbGRlciJdLkNyZWF0ZUxpbmVzKCJsaW5lcyIsIHsgcG9pbnRzOiBwYXRoLCBpbnN0
YW5jZTogb2JqZWN0IH0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aW1wb3N0b3Iub2JqZWN0ID0gX01lc2hlc19CdWlsZGVyc19zaGFwZUJ1aWxkZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siU2hhcGVCdWlsZGVyIl0uRXh0cnVkZVNoYXBlKCJleHQiLCB7
IHNoYXBlOiBzaGFwZSwgcGF0aDogcGF0aCwgaW5zdGFuY2U6IG9iamVjdCB9KTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlIGJhYnlsb24gbWVzaCB2ZXJ0aWNlcyB2
ZXJ0aWNlcyB0byBtYXRjaCBwaHlzaWNzIHdvcmxkIHNvZnRib2R5IG9yIGNsb3RoCisgICAgICog
QHBhcmFtIGltcG9zdG9yIGltcG9zdGVyIHRvIG1hdGNoCisgICAgICovCisgICAgQW1tb0pTUGx1
Z2luLnByb3RvdHlwZS5fc29mdGJvZHlPckNsb3RoU3RlcCA9IGZ1bmN0aW9uIChpbXBvc3Rvcikg
eworICAgICAgICB2YXIgbm9ybWFsRGlyZWN0aW9uID0gKGltcG9zdG9yLnR5cGUgPT09IF9QaHlz
aWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQaHlzaWNz
SW1wb3N0b3IiXS5DbG90aEltcG9zdG9yKSA/IDEgOiAtMTsKKyAgICAgICAgdmFyIG9iamVjdCA9
IGltcG9zdG9yLm9iamVjdDsKKyAgICAgICAgdmFyIHZlcnRleFBvc2l0aW9ucyA9IG9iamVjdC5n
ZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKTsKKyAgICAgICAgaWYgKCF2ZXJ0ZXhQb3Np
dGlvbnMpIHsKKyAgICAgICAgICAgIHZlcnRleFBvc2l0aW9ucyA9IFtdOworICAgICAgICB9Cisg
ICAgICAgIHZhciB2ZXJ0ZXhOb3JtYWxzID0gb2JqZWN0LmdldFZlcnRpY2VzRGF0YShfTWVzaGVz
X2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3Jt
YWxLaW5kKTsKKyAgICAgICAgaWYgKCF2ZXJ0ZXhOb3JtYWxzKSB7CisgICAgICAgICAgICB2ZXJ0
ZXhOb3JtYWxzID0gW107CisgICAgICAgIH0KKyAgICAgICAgdmFyIG5iVmVydGljZXMgPSB2ZXJ0
ZXhQb3NpdGlvbnMubGVuZ3RoIC8gMzsKKyAgICAgICAgdmFyIGJvZHlWZXJ0aWNlcyA9IGltcG9z
dG9yLnBoeXNpY3NCb2R5LmdldF9tX25vZGVzKCk7CisgICAgICAgIHZhciBub2RlOworICAgICAg
ICB2YXIgbm9kZVBvc2l0aW9uczsKKyAgICAgICAgdmFyIG5vZGVOb3JtYWxzOworICAgICAgICB2
YXIgeCwgeSwgejsKKyAgICAgICAgdmFyIG54LCBueSwgbno7CisgICAgICAgIGZvciAodmFyIG4g
PSAwOyBuIDwgbmJWZXJ0aWNlczsgbisrKSB7CisgICAgICAgICAgICBub2RlID0gYm9keVZlcnRp
Y2VzLmF0KG4pOworICAgICAgICAgICAgbm9kZVBvc2l0aW9ucyA9IG5vZGUuZ2V0X21feCgpOwor
ICAgICAgICAgICAgeCA9IG5vZGVQb3NpdGlvbnMueCgpOworICAgICAgICAgICAgeSA9IG5vZGVQ
b3NpdGlvbnMueSgpOworICAgICAgICAgICAgeiA9IG5vZGVQb3NpdGlvbnMueigpICogbm9ybWFs
RGlyZWN0aW9uOworICAgICAgICAgICAgdmFyIG5vZGVOb3JtYWxzID0gbm9kZS5nZXRfbV9uKCk7
CisgICAgICAgICAgICBueCA9IG5vZGVOb3JtYWxzLngoKTsKKyAgICAgICAgICAgIG55ID0gbm9k
ZU5vcm1hbHMueSgpOworICAgICAgICAgICAgbnogPSBub2RlTm9ybWFscy56KCkgKiBub3JtYWxE
aXJlY3Rpb247CisgICAgICAgICAgICB2ZXJ0ZXhQb3NpdGlvbnNbMyAqIG5dID0geDsKKyAgICAg
ICAgICAgIHZlcnRleFBvc2l0aW9uc1szICogbiArIDFdID0geTsKKyAgICAgICAgICAgIHZlcnRl
eFBvc2l0aW9uc1szICogbiArIDJdID0gejsKKyAgICAgICAgICAgIHZlcnRleE5vcm1hbHNbMyAq
IG5dID0gbng7CisgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxzWzMgKiBuICsgMV0gPSBueTsKKyAg
ICAgICAgICAgIHZlcnRleE5vcm1hbHNbMyAqIG4gKyAyXSA9IG56OworICAgICAgICB9CisgICAg
ICAgIHZhciB2ZXJ0ZXhfZGF0YSA9IG5ldyBfTWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhEYXRhIl0oKTsKKyAgICAgICAgdmVydGV4X2Rh
dGEucG9zaXRpb25zID0gdmVydGV4UG9zaXRpb25zOworICAgICAgICB2ZXJ0ZXhfZGF0YS5ub3Jt
YWxzID0gdmVydGV4Tm9ybWFsczsKKyAgICAgICAgdmVydGV4X2RhdGEudXZzID0gb2JqZWN0Lmdl
dFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJWZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICB2ZXJ0ZXhfZGF0YS5jb2xvcnMgPSBv
YmplY3QuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2luZCk7CisgICAgICAgIGlmIChvYmplY3Qg
JiYgb2JqZWN0LmdldEluZGljZXMpIHsKKyAgICAgICAgICAgIHZlcnRleF9kYXRhLmluZGljZXMg
PSBvYmplY3QuZ2V0SW5kaWNlcygpOworICAgICAgICB9CisgICAgICAgIHZlcnRleF9kYXRhLmFw
cGx5VG9NZXNoKG9iamVjdCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBcHBsaWVzIGFuIGlt
cHVsc2Ugb24gdGhlIGltcG9zdGVyCisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdGVyIHRv
IGFwcGx5IGltcHVsc2UgdG8KKyAgICAgKiBAcGFyYW0gZm9yY2UgYW1vdW50IG9mIGZvcmNlIHRv
IGJlIGFwcGxpZWQgdG8gdGhlIGltcG9zdGVyCisgICAgICogQHBhcmFtIGNvbnRhY3RQb2ludCB0
aGUgbG9jYXRpb24gdG8gYXBwbHkgdGhlIGltcHVsc2Ugb24gdGhlIGltcG9zdGVyCisgICAgICov
CisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5hcHBseUltcHVsc2UgPSBmdW5jdGlvbiAoaW1w
b3N0b3IsIGZvcmNlLCBjb250YWN0UG9pbnQpIHsKKyAgICAgICAgaWYgKCFpbXBvc3Rvci5zb2Z0
KSB7CisgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5hY3RpdmF0ZSgpOworICAgICAg
ICAgICAgdmFyIHdvcmxkUG9pbnQgPSB0aGlzLl90bXBBbW1vVmVjdG9yQTsKKyAgICAgICAgICAg
IHZhciBpbXB1bHNlID0gdGhpcy5fdG1wQW1tb1ZlY3RvckI7CisgICAgICAgICAgICAvLyBDb252
ZXJ0IGNvbnRhY3RQb2ludCBpbnRvIHdvcmxkIHNwYWNlCisgICAgICAgICAgICBpZiAoaW1wb3N0
b3Iub2JqZWN0ICYmIGltcG9zdG9yLm9iamVjdC5nZXRXb3JsZE1hdHJpeCkgeworICAgICAgICAg
ICAgICAgIGltcG9zdG9yLm9iamVjdC5nZXRXb3JsZE1hdHJpeCgpLmludmVydFRvUmVmKHRoaXMu
X3RtcE1hdHJpeCk7CisgICAgICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVm
KGNvbnRhY3RQb2ludCwgdGhpcy5fdG1wTWF0cml4LCB0aGlzLl90bXBWZWN0b3IpOworICAgICAg
ICAgICAgICAgIGNvbnRhY3RQb2ludCA9IHRoaXMuX3RtcFZlY3RvcjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHdvcmxkUG9pbnQuc2V0VmFsdWUoY29udGFjdFBvaW50LngsIGNvbnRhY3RQ
b2ludC55LCBjb250YWN0UG9pbnQueik7CisgICAgICAgICAgICBpbXB1bHNlLnNldFZhbHVlKGZv
cmNlLngsIGZvcmNlLnksIGZvcmNlLnopOworICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0Jv
ZHkuYXBwbHlJbXB1bHNlKGltcHVsc2UsIHdvcmxkUG9pbnQpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkxvZ2dlciJdLldhcm4oIkNhbm5vdCBiZSBhcHBsaWVkIHRvIGEgc29mdCBib2R5Iik7
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEFwcGxpZXMgYSBmb3JjZSBvbiB0
aGUgaW1wb3N0ZXIKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0ZXIgdG8gYXBwbHkgZm9y
Y2UKKyAgICAgKiBAcGFyYW0gZm9yY2UgYW1vdW50IG9mIGZvcmNlIHRvIGJlIGFwcGxpZWQgdG8g
dGhlIGltcG9zdGVyCisgICAgICogQHBhcmFtIGNvbnRhY3RQb2ludCB0aGUgbG9jYXRpb24gdG8g
YXBwbHkgdGhlIGZvcmNlIG9uIHRoZSBpbXBvc3RlcgorICAgICAqLworICAgIEFtbW9KU1BsdWdp
bi5wcm90b3R5cGUuYXBwbHlGb3JjZSA9IGZ1bmN0aW9uIChpbXBvc3RvciwgZm9yY2UsIGNvbnRh
Y3RQb2ludCkgeworICAgICAgICBpZiAoIWltcG9zdG9yLnNvZnQpIHsKKyAgICAgICAgICAgIGlt
cG9zdG9yLnBoeXNpY3NCb2R5LmFjdGl2YXRlKCk7CisgICAgICAgICAgICB2YXIgd29ybGRQb2lu
dCA9IHRoaXMuX3RtcEFtbW9WZWN0b3JBOworICAgICAgICAgICAgdmFyIGltcHVsc2UgPSB0aGlz
Ll90bXBBbW1vVmVjdG9yQjsKKyAgICAgICAgICAgIC8vIENvbnZlcnQgY29udGFjdFBvaW50IGlu
dG8gd29ybGQgc3BhY2UKKyAgICAgICAgICAgIGlmIChpbXBvc3Rvci5vYmplY3QgJiYgaW1wb3N0
b3Iub2JqZWN0LmdldFdvcmxkTWF0cml4KSB7CisgICAgICAgICAgICAgICAgaW1wb3N0b3Iub2Jq
ZWN0LmdldFdvcmxkTWF0cml4KCkuaW52ZXJ0VG9SZWYodGhpcy5fdG1wTWF0cml4KTsKKyAgICAg
ICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9SZWYoY29udGFjdFBvaW50LCB0aGlz
Ll90bXBNYXRyaXgsIHRoaXMuX3RtcFZlY3Rvcik7CisgICAgICAgICAgICAgICAgY29udGFjdFBv
aW50ID0gdGhpcy5fdG1wVmVjdG9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd29ybGRQ
b2ludC5zZXRWYWx1ZShjb250YWN0UG9pbnQueCwgY29udGFjdFBvaW50LnksIGNvbnRhY3RQb2lu
dC56KTsKKyAgICAgICAgICAgIGltcHVsc2Uuc2V0VmFsdWUoZm9yY2UueCwgZm9yY2UueSwgZm9y
Y2Uueik7CisgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5hcHBseUZvcmNlKGltcHVs
c2UsIHdvcmxkUG9pbnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
X01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4o
IkNhbm5vdCBiZSBhcHBsaWVkIHRvIGEgc29mdCBib2R5Iik7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBwaHlzaWNzIGJvZHkgdXNpbmcgdGhlIHBsdWdpbgor
ICAgICAqIEBwYXJhbSBpbXBvc3RvciB0aGUgaW1wb3N0ZXIgdG8gY3JlYXRlIHRoZSBwaHlzaWNz
IGJvZHkgb24KKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLmdlbmVyYXRlUGh5
c2ljc0JvZHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgLy8gTm90ZTogdGhpcyBt
ZXRob2Qgd2lsbCBub3QgYmUgY2FsbGVkIG9uIGNoaWxkIGltcG9zb3RycyBmb3IgY29tcG91bmQg
aW1wb3N0b3JzCisgICAgICAgIGltcG9zdG9yLl9wbHVnaW5EYXRhLnRvRGlzcG9zZSA9IFtdOwor
ICAgICAgICAvL3BhcmVudC1jaGlsZCByZWxhdGlvbnNoaXAKKyAgICAgICAgaWYgKGltcG9zdG9y
LnBhcmVudCkgeworICAgICAgICAgICAgaWYgKGltcG9zdG9yLnBoeXNpY3NCb2R5KSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5yZW1vdmVQaHlzaWNzQm9keShpbXBvc3Rvcik7CisgICAgICAgICAg
ICAgICAgaW1wb3N0b3IuZm9yY2VVcGRhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW1wb3N0b3IuaXNCb2R5SW5pdFJlcXVp
cmVkKCkpIHsKKyAgICAgICAgICAgIHZhciBjb2xTaGFwZSA9IHRoaXMuX2NyZWF0ZVNoYXBlKGlt
cG9zdG9yKTsKKyAgICAgICAgICAgIHZhciBtYXNzID0gaW1wb3N0b3IuZ2V0UGFyYW0oIm1hc3Mi
KTsKKyAgICAgICAgICAgIGltcG9zdG9yLl9wbHVnaW5EYXRhLm1hc3MgPSBtYXNzOworICAgICAg
ICAgICAgaWYgKGltcG9zdG9yLnNvZnQpIHsKKyAgICAgICAgICAgICAgICBjb2xTaGFwZS5nZXRf
bV9jZmcoKS5zZXRfY29sbGlzaW9ucygweDExKTsKKyAgICAgICAgICAgICAgICBjb2xTaGFwZS5n
ZXRfbV9jZmcoKS5zZXRfa0RQKGltcG9zdG9yLmdldFBhcmFtKCJkYW1waW5nIikpOworICAgICAg
ICAgICAgICAgIEFtbW8uY2FzdE9iamVjdChjb2xTaGFwZSwgQW1tby5idENvbGxpc2lvbk9iamVj
dCkuZ2V0Q29sbGlzaW9uU2hhcGUoKS5zZXRNYXJnaW4oaW1wb3N0b3IuZ2V0UGFyYW0oIm1hcmdp
biIpKTsKKyAgICAgICAgICAgICAgICBjb2xTaGFwZS5zZXRBY3RpdmF0aW9uU3RhdGUoQW1tb0pT
UGx1Z2luLkRJU0FCTEVfREVBQ1RJVkFUSU9OX0ZMQUcpOworICAgICAgICAgICAgICAgIHRoaXMu
d29ybGQuYWRkU29mdEJvZHkoY29sU2hhcGUsIDEsIC0xKTsKKyAgICAgICAgICAgICAgICBpbXBv
c3Rvci5waHlzaWNzQm9keSA9IGNvbFNoYXBlOworICAgICAgICAgICAgICAgIGltcG9zdG9yLl9w
bHVnaW5EYXRhLnRvRGlzcG9zZS5wdXNoKGNvbFNoYXBlKTsKKyAgICAgICAgICAgICAgICB0aGlz
LnNldEJvZHlQcmVzc3VyZShpbXBvc3RvciwgMCk7CisgICAgICAgICAgICAgICAgaWYgKGltcG9z
dG9yLnR5cGUgPT09IF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJQaHlzaWNzSW1wb3N0b3IiXS5Tb2Z0Ym9keUltcG9zdG9yKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2V0Qm9keVByZXNzdXJlKGltcG9zdG9yLCBpbXBvc3Rvci5nZXRQ
YXJhbSgicHJlc3N1cmUiKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRo
aXMuc2V0Qm9keVN0aWZmbmVzcyhpbXBvc3RvciwgaW1wb3N0b3IuZ2V0UGFyYW0oInN0aWZmbmVz
cyIpKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNldEJvZHlWZWxvY2l0eUl0ZXJhdGlvbnMoaW1w
b3N0b3IsIGltcG9zdG9yLmdldFBhcmFtKCJ2ZWxvY2l0eUl0ZXJhdGlvbnMiKSk7CisgICAgICAg
ICAgICAgICAgdGhpcy5zZXRCb2R5UG9zaXRpb25JdGVyYXRpb25zKGltcG9zdG9yLCBpbXBvc3Rv
ci5nZXRQYXJhbSgicG9zaXRpb25JdGVyYXRpb25zIikpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1v
LmJ0VmVjdG9yMygwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICB2YXIgc3RhcnRUcmFuc2Zvcm0g
PSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOworICAgICAgICAgICAgICAgIHN0YXJ0VHJhbnNmb3Jt
LnNldElkZW50aXR5KCk7CisgICAgICAgICAgICAgICAgaWYgKG1hc3MgIT09IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29sU2hhcGUuY2FsY3VsYXRlTG9jYWxJbmVydGlhKG1hc3MsIGxvY2Fs
SW5lcnRpYSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX3RtcEFt
bW9WZWN0b3JBLnNldFZhbHVlKGltcG9zdG9yLm9iamVjdC5wb3NpdGlvbi54LCBpbXBvc3Rvci5v
YmplY3QucG9zaXRpb24ueSwgaW1wb3N0b3Iub2JqZWN0LnBvc2l0aW9uLnopOworICAgICAgICAg
ICAgICAgIHRoaXMuX3RtcEFtbW9RdWF0ZXJuaW9uLnNldFZhbHVlKGltcG9zdG9yLm9iamVjdC5y
b3RhdGlvblF1YXRlcm5pb24ueCwgaW1wb3N0b3Iub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbi55
LCBpbXBvc3Rvci5vYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uLnosIGltcG9zdG9yLm9iamVjdC5y
b3RhdGlvblF1YXRlcm5pb24udyk7CisgICAgICAgICAgICAgICAgc3RhcnRUcmFuc2Zvcm0uc2V0
T3JpZ2luKHRoaXMuX3RtcEFtbW9WZWN0b3JBKTsKKyAgICAgICAgICAgICAgICBzdGFydFRyYW5z
Zm9ybS5zZXRSb3RhdGlvbih0aGlzLl90bXBBbW1vUXVhdGVybmlvbik7CisgICAgICAgICAgICAg
ICAgdmFyIG15TW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZShzdGFy
dFRyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgdmFyIHJiSW5mbyA9IG5ldyBBbW1vLmJ0Umln
aWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBteU1vdGlvblN0YXRlLCBjb2xTaGFwZSwgbG9j
YWxJbmVydGlhKTsKKyAgICAgICAgICAgICAgICB2YXIgYm9keSA9IG5ldyBBbW1vLmJ0UmlnaWRC
b2R5KHJiSW5mbyk7CisgICAgICAgICAgICAgICAgLy8gTWFrZSBvYmplY3RzIGtpbmVtYXRpYyBp
ZiBpdCdzIG1hc3MgaXMgMAorICAgICAgICAgICAgICAgIGlmIChtYXNzID09PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIGJvZHkuc2V0Q29sbGlzaW9uRmxhZ3MoYm9keS5nZXRDb2xsaXNpb25G
bGFncygpIHwgQW1tb0pTUGx1Z2luLktJTkVNQVRJQ19GTEFHKTsKKyAgICAgICAgICAgICAgICAg
ICAgYm9keS5zZXRBY3RpdmF0aW9uU3RhdGUoQW1tb0pTUGx1Z2luLkRJU0FCTEVfREVBQ1RJVkFU
SU9OX0ZMQUcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBEaXNhYmxl
IGNvbGxpc2lvbiBpZiBOb0ltcG9zdG9yLCBidXQga2VlcCBjb2xsaXNpb24gaWYgc2hhcGUgaXMg
YnRDb21wb3VuZFNoYXBlCisgICAgICAgICAgICAgICAgaWYgKGltcG9zdG9yLnR5cGUgPT0gX1Bo
eXNpY3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNp
Y3NJbXBvc3RvciJdLk5vSW1wb3N0b3IgJiYgIWNvbFNoYXBlLmdldENoaWxkU2hhcGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYm9keS5zZXRDb2xsaXNpb25GbGFncyhib2R5LmdldENvbGxpc2lv
bkZsYWdzKCkgfCBBbW1vSlNQbHVnaW4uRElTQUJMRV9DT0xMSVNJT05fRkxBRyk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMud29ybGQuYWRkUmlnaWRCb2R5KGJvZHkp
OworICAgICAgICAgICAgICAgIGltcG9zdG9yLnBoeXNpY3NCb2R5ID0gYm9keTsKKyAgICAgICAg
ICAgICAgICBpbXBvc3Rvci5fcGx1Z2luRGF0YS50b0Rpc3Bvc2UgPSBpbXBvc3Rvci5fcGx1Z2lu
RGF0YS50b0Rpc3Bvc2UuY29uY2F0KFtib2R5LCByYkluZm8sIG15TW90aW9uU3RhdGUsIHN0YXJ0
VHJhbnNmb3JtLCBsb2NhbEluZXJ0aWEsIGNvbFNoYXBlXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLnNldEJvZHlSZXN0aXR1dGlvbihpbXBvc3RvciwgaW1wb3N0b3IuZ2V0UGFy
YW0oInJlc3RpdHV0aW9uIikpOworICAgICAgICAgICAgdGhpcy5zZXRCb2R5RnJpY3Rpb24oaW1w
b3N0b3IsIGltcG9zdG9yLmdldFBhcmFtKCJmcmljdGlvbiIpKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgcGh5c2ljcyBib2R5IGZyb20gdGhlIGltcG9z
dGVyIGFuZCBkaXNwb3NlcyBvZiB0aGUgYm9keSdzIG1lbW9yeQorICAgICAqIEBwYXJhbSBpbXBv
c3RvciBpbXBvc3RlciB0byByZW1vdmUgdGhlIHBoeXNpY3MgYm9keSBmcm9tCisgICAgICovCisg
ICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5yZW1vdmVQaHlzaWNzQm9keSA9IGZ1bmN0aW9uIChp
bXBvc3RvcikgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy53
b3JsZCkgeworICAgICAgICAgICAgaWYgKGltcG9zdG9yLnNvZnQpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLndvcmxkLnJlbW92ZVNvZnRCb2R5KGltcG9zdG9yLnBoeXNpY3NCb2R5KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMud29ybGQu
cmVtb3ZlUmlnaWRCb2R5KGltcG9zdG9yLnBoeXNpY3NCb2R5KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChpbXBvc3Rvci5fcGx1Z2luRGF0YSkgeworICAgICAgICAgICAgICAgIGlt
cG9zdG9yLl9wbHVnaW5EYXRhLnRvRGlzcG9zZS5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7CisgICAg
ICAgICAgICAgICAgICAgIF90aGlzLmJqc0FNTU8uZGVzdHJveShkKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICBpbXBvc3Rvci5fcGx1Z2luRGF0YS50b0Rpc3Bvc2UgPSBb
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2Vu
ZXJhdGVzIGEgam9pbnQKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3JKb2ludCB0aGUgaW1wb3N0ZXIg
am9pbnQgdG8gY3JlYXRlIHRoZSBqb2ludCB3aXRoCisgICAgICovCisgICAgQW1tb0pTUGx1Z2lu
LnByb3RvdHlwZS5nZW5lcmF0ZUpvaW50ID0gZnVuY3Rpb24gKGltcG9zdG9ySm9pbnQpIHsKKyAg
ICAgICAgdmFyIG1haW5Cb2R5ID0gaW1wb3N0b3JKb2ludC5tYWluSW1wb3N0b3IucGh5c2ljc0Jv
ZHk7CisgICAgICAgIHZhciBjb25uZWN0ZWRCb2R5ID0gaW1wb3N0b3JKb2ludC5jb25uZWN0ZWRJ
bXBvc3Rvci5waHlzaWNzQm9keTsKKyAgICAgICAgaWYgKCFtYWluQm9keSB8fCAhY29ubmVjdGVk
Qm9keSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBqb2lu
dERhdGEgPSBpbXBvc3RvckpvaW50LmpvaW50LmpvaW50RGF0YTsKKyAgICAgICAgaWYgKCFqb2lu
dERhdGEubWFpblBpdm90KSB7CisgICAgICAgICAgICBqb2ludERhdGEubWFpblBpdm90ID0gbmV3
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3Iz
Il0oMCwgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFqb2ludERhdGEuY29ubmVjdGVk
UGl2b3QpIHsKKyAgICAgICAgICAgIGpvaW50RGF0YS5jb25uZWN0ZWRQaXZvdCA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAs
IDAsIDApOworICAgICAgICB9CisgICAgICAgIHZhciBqb2ludDsKKyAgICAgICAgc3dpdGNoIChp
bXBvc3RvckpvaW50LmpvaW50LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5
c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBoeXNpY3NKb2ludCJdLkRp
c3RhbmNlSm9pbnQ6CisgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gam9pbnREYXRhLm1h
eERpc3RhbmNlOworICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSkgeworICAgICAgICAgICAg
ICAgICAgICBqb2ludERhdGEubWFpblBpdm90ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0oMCwgLWRpc3RhbmNlIC8gMiwgMCk7
CisgICAgICAgICAgICAgICAgICAgIGpvaW50RGF0YS5jb25uZWN0ZWRQaXZvdCA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAs
IGRpc3RhbmNlIC8gMiwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGpv
aW50ID0gbmV3IEFtbW8uYnRQb2ludDJQb2ludENvbnN0cmFpbnQobWFpbkJvZHksIGNvbm5lY3Rl
ZEJvZHksIG5ldyBBbW1vLmJ0VmVjdG9yMyhqb2ludERhdGEubWFpblBpdm90LngsIGpvaW50RGF0
YS5tYWluUGl2b3QueSwgam9pbnREYXRhLm1haW5QaXZvdC56KSwgbmV3IEFtbW8uYnRWZWN0b3Iz
KGpvaW50RGF0YS5jb25uZWN0ZWRQaXZvdC54LCBqb2ludERhdGEuY29ubmVjdGVkUGl2b3QueSwg
am9pbnREYXRhLmNvbm5lY3RlZFBpdm90LnopKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlBoeXNpY3NKb2ludCJdLkhpbmdlSm9pbnQ6CisgICAgICAgICAgICAgICAgaWYg
KCFqb2ludERhdGEubWFpbkF4aXMpIHsKKyAgICAgICAgICAgICAgICAgICAgam9pbnREYXRhLm1h
aW5BeGlzID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJWZWN0b3IzIl0oMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICgham9pbnREYXRhLmNvbm5lY3RlZEF4aXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
am9pbnREYXRhLmNvbm5lY3RlZEF4aXMgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgwLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdmFyIG1haW5BeGlzID0gbmV3IEFtbW8uYnRWZWN0b3IzKGpv
aW50RGF0YS5tYWluQXhpcy54LCBqb2ludERhdGEubWFpbkF4aXMueSwgam9pbnREYXRhLm1haW5B
eGlzLnopOworICAgICAgICAgICAgICAgIHZhciBjb25uZWN0ZWRBeGlzID0gbmV3IEFtbW8uYnRW
ZWN0b3IzKGpvaW50RGF0YS5jb25uZWN0ZWRBeGlzLngsIGpvaW50RGF0YS5jb25uZWN0ZWRBeGlz
LnksIGpvaW50RGF0YS5jb25uZWN0ZWRBeGlzLnopOworICAgICAgICAgICAgICAgIGpvaW50ID0g
bmV3IEFtbW8uYnRIaW5nZUNvbnN0cmFpbnQobWFpbkJvZHksIGNvbm5lY3RlZEJvZHksIG5ldyBB
bW1vLmJ0VmVjdG9yMyhqb2ludERhdGEubWFpblBpdm90LngsIGpvaW50RGF0YS5tYWluUGl2b3Qu
eSwgam9pbnREYXRhLm1haW5QaXZvdC56KSwgbmV3IEFtbW8uYnRWZWN0b3IzKGpvaW50RGF0YS5j
b25uZWN0ZWRQaXZvdC54LCBqb2ludERhdGEuY29ubmVjdGVkUGl2b3QueSwgam9pbnREYXRhLmNv
bm5lY3RlZFBpdm90LnopLCBtYWluQXhpcywgY29ubmVjdGVkQXhpcyk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NKb2ludF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaHlzaWNzSm9pbnQiXS5CYWxsQW5kU29ja2V0Sm9pbnQ6
CisgICAgICAgICAgICAgICAgam9pbnQgPSBuZXcgQW1tby5idFBvaW50MlBvaW50Q29uc3RyYWlu
dChtYWluQm9keSwgY29ubmVjdGVkQm9keSwgbmV3IEFtbW8uYnRWZWN0b3IzKGpvaW50RGF0YS5t
YWluUGl2b3QueCwgam9pbnREYXRhLm1haW5QaXZvdC55LCBqb2ludERhdGEubWFpblBpdm90Lnop
LCBuZXcgQW1tby5idFZlY3RvcjMoam9pbnREYXRhLmNvbm5lY3RlZFBpdm90LngsIGpvaW50RGF0
YS5jb25uZWN0ZWRQaXZvdC55LCBqb2ludERhdGEuY29ubmVjdGVkUGl2b3QueikpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBf
TWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uV2Fybigi
Sm9pbnRUeXBlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSBBbW1vIHBsdWdpbiwgZmFs
bGluZyBiYWNrIHRvIFBoeXNpY3NKb2ludC5CYWxsQW5kU29ja2V0Sm9pbnQiKTsKKyAgICAgICAg
ICAgICAgICBqb2ludCA9IG5ldyBBbW1vLmJ0UG9pbnQyUG9pbnRDb25zdHJhaW50KG1haW5Cb2R5
LCBjb25uZWN0ZWRCb2R5LCBuZXcgQW1tby5idFZlY3RvcjMoam9pbnREYXRhLm1haW5QaXZvdC54
LCBqb2ludERhdGEubWFpblBpdm90LnksIGpvaW50RGF0YS5tYWluUGl2b3QueiksIG5ldyBBbW1v
LmJ0VmVjdG9yMyhqb2ludERhdGEuY29ubmVjdGVkUGl2b3QueCwgam9pbnREYXRhLmNvbm5lY3Rl
ZFBpdm90LnksIGpvaW50RGF0YS5jb25uZWN0ZWRQaXZvdC56KSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy53b3JsZC5hZGRDb25zdHJhaW50KGpvaW50
LCAhaW1wb3N0b3JKb2ludC5qb2ludC5qb2ludERhdGEuY29sbGlzaW9uKTsKKyAgICAgICAgaW1w
b3N0b3JKb2ludC5qb2ludC5waHlzaWNzSm9pbnQgPSBqb2ludDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJlbW92ZXMgYSBqb2ludAorICAgICAqIEBwYXJhbSBpbXBvc3RvckpvaW50IHRoZSBp
bXBvc3RlciBqb2ludCB0byByZW1vdmUgdGhlIGpvaW50IGZyb20KKyAgICAgKi8KKyAgICBBbW1v
SlNQbHVnaW4ucHJvdG90eXBlLnJlbW92ZUpvaW50ID0gZnVuY3Rpb24gKGltcG9zdG9ySm9pbnQp
IHsKKyAgICAgICAgaWYgKHRoaXMud29ybGQpIHsKKyAgICAgICAgICAgIHRoaXMud29ybGQucmVt
b3ZlQ29uc3RyYWludChpbXBvc3RvckpvaW50LmpvaW50LnBoeXNpY3NKb2ludCk7CisgICAgICAg
IH0KKyAgICB9OworICAgIC8vIGFkZHMgYWxsIHZlcnRpY2llcyAoaW5jbHVkaW5nIGNoaWxkIHZl
cnRpY2llcykgdG8gdGhlIHRyaWFuZ2xlIG1lc2gKKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBl
Ll9hZGRNZXNoVmVydHMgPSBmdW5jdGlvbiAoYnRUcmlhbmdsZU1lc2gsIHRvcExldmVsT2JqZWN0
LCBvYmplY3QpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIHRyaWFu
Z2xlQ291bnQgPSAwOworICAgICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC5nZXRJbmRpY2VzICYm
IG9iamVjdC5nZXRXb3JsZE1hdHJpeCAmJiBvYmplY3QuZ2V0Q2hpbGRNZXNoZXMpIHsKKyAgICAg
ICAgICAgIHZhciBpbmRpY2VzID0gb2JqZWN0LmdldEluZGljZXMoKTsKKyAgICAgICAgICAgIGlm
ICghaW5kaWNlcykgeworICAgICAgICAgICAgICAgIGluZGljZXMgPSBbXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciB2ZXJ0ZXhQb3NpdGlvbnMgPSBvYmplY3QuZ2V0VmVydGljZXNE
YXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1
ZmZlciJdLlBvc2l0aW9uS2luZCk7CisgICAgICAgICAgICBpZiAoIXZlcnRleFBvc2l0aW9ucykg
eworICAgICAgICAgICAgICAgIHZlcnRleFBvc2l0aW9ucyA9IFtdOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgb2JqZWN0LmNvbXB1dGVXb3JsZE1hdHJpeChmYWxzZSk7CisgICAgICAgICAg
ICB2YXIgZmFjZUNvdW50ID0gaW5kaWNlcy5sZW5ndGggLyAzOworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBmYWNlQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciB0cmlQ
b2ludHMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBwb2ludCA9IDA7IHBvaW50IDwg
MzsgcG9pbnQrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IG5ldyBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKHZlcnRleFBv
c2l0aW9uc1soaW5kaWNlc1soaSAqIDMpICsgcG9pbnRdICogMykgKyAwXSwgdmVydGV4UG9zaXRp
b25zWyhpbmRpY2VzWyhpICogMykgKyBwb2ludF0gKiAzKSArIDFdLCB2ZXJ0ZXhQb3NpdGlvbnNb
KGluZGljZXNbKGkgKiAzKSArIHBvaW50XSAqIDMpICsgMl0pOworICAgICAgICAgICAgICAgICAg
ICAvLyBBZGp1c3QgZm9yIGluaXRpYWwgc2NhbGluZworICAgICAgICAgICAgICAgICAgICBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTWF0cml4Il0uU2Nh
bGluZ1RvUmVmKG9iamVjdC5zY2FsaW5nLngsIG9iamVjdC5zY2FsaW5nLnksIG9iamVjdC5zY2Fs
aW5nLnosIHRoaXMuX3RtcE1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgIHYgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5z
Zm9ybUNvb3JkaW5hdGVzKHYsIHRoaXMuX3RtcE1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAg
IHZhciB2ZWM7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludCA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2ZWMgPSB0aGlzLl90bXBBbW1vVmVjdG9yQTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwb2ludCA9PSAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2ZWMgPSB0aGlzLl90bXBBbW1vVmVjdG9yQjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZlYyA9IHRoaXMuX3RtcEFtbW9WZWN0b3JDOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZlYy5zZXRWYWx1ZSh2LngsIHYueSwgdi56KTsK
KyAgICAgICAgICAgICAgICAgICAgdHJpUG9pbnRzLnB1c2godmVjKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnRUcmlhbmdsZU1lc2guYWRkVHJpYW5nbGUodHJpUG9pbnRz
WzBdLCB0cmlQb2ludHNbMV0sIHRyaVBvaW50c1syXSk7CisgICAgICAgICAgICAgICAgdHJpYW5n
bGVDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2JqZWN0LmdldENoaWxkTWVz
aGVzKCkuZm9yRWFjaChmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgICAgIHRyaWFuZ2xlQ291
bnQgKz0gX3RoaXMuX2FkZE1lc2hWZXJ0cyhidFRyaWFuZ2xlTWVzaCwgdG9wTGV2ZWxPYmplY3Qs
IG0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRyaWFuZ2xl
Q291bnQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXNlIHRoZSBzb2Z0IGJvZHkg
dmVydGljZXMgdG8gbWF0Y2ggaXRzIG9iamVjdCdzIChtZXNoKSB2ZXJ0aWNlcworICAgICAqIFNv
ZnRib2R5IHZlcnRpY2VzIChub2RlcykgYXJlIGluIHdvcmxkIHNwYWNlIGFuZCB0byBtYXRjaCB0
aGlzCisgICAgICogVGhlIG9iamVjdCdzIHBvc2l0aW9uIGFuZCByb3RhdGlvbiBpcyBzZXQgdG8g
emVybyBhbmQgc28gaXRzIHZlcnRpY2VzIGFyZSBhbHNvIHRoZW4gc2V0IGluIHdvcmxkIHNwYWNl
CisgICAgICogQHBhcmFtIGltcG9zdG9yIHRvIGNyZWF0ZSB0aGUgc29mdGJvZHkgZm9yCisgICAg
ICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5fc29mdFZlcnRleERhdGEgPSBmdW5jdGlv
biAoaW1wb3N0b3IpIHsKKyAgICAgICAgdmFyIG9iamVjdCA9IGltcG9zdG9yLm9iamVjdDsKKyAg
ICAgICAgaWYgKG9iamVjdCAmJiBvYmplY3QuZ2V0SW5kaWNlcyAmJiBvYmplY3QuZ2V0V29ybGRN
YXRyaXggJiYgb2JqZWN0LmdldENoaWxkTWVzaGVzKSB7CisgICAgICAgICAgICB2YXIgaW5kaWNl
cyA9IG9iamVjdC5nZXRJbmRpY2VzKCk7CisgICAgICAgICAgICBpZiAoIWluZGljZXMpIHsKKyAg
ICAgICAgICAgICAgICBpbmRpY2VzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2
YXIgdmVydGV4UG9zaXRpb25zID0gb2JqZWN0LmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktp
bmQpOworICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhQb3NpdGlvbnMpIHsKKyAgICAgICAgICAgICAg
ICB2ZXJ0ZXhQb3NpdGlvbnMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB2
ZXJ0ZXhOb3JtYWxzID0gb2JqZWN0LmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kKTsKKyAg
ICAgICAgICAgIGlmICghdmVydGV4Tm9ybWFscykgeworICAgICAgICAgICAgICAgIHZlcnRleE5v
cm1hbHMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9iamVjdC5jb21wdXRlV29y
bGRNYXRyaXgoZmFsc2UpOworICAgICAgICAgICAgdmFyIG5ld1BvaW50cyA9IFtdOworICAgICAg
ICAgICAgdmFyIG5ld05vcm1zID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHZlcnRleFBvc2l0aW9ucy5sZW5ndGg7IGkgKz0gMykgeworICAgICAgICAgICAgICAgIHZhciB2
ID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJW
ZWN0b3IzIl0odmVydGV4UG9zaXRpb25zW2ldLCB2ZXJ0ZXhQb3NpdGlvbnNbaSArIDFdLCB2ZXJ0
ZXhQb3NpdGlvbnNbaSArIDJdKTsKKyAgICAgICAgICAgICAgICB2YXIgbiA9IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKHZlcnRl
eE5vcm1hbHNbaV0sIHZlcnRleE5vcm1hbHNbaSArIDFdLCB2ZXJ0ZXhOb3JtYWxzW2kgKyAyXSk7
CisgICAgICAgICAgICAgICAgdiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXModiwgb2JqZWN0Lmdl
dFdvcmxkTWF0cml4KCkpOworICAgICAgICAgICAgICAgIG4gPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9ybU5vcm1hbChu
LCBvYmplY3QuZ2V0V29ybGRNYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgbmV3UG9pbnRzLnB1
c2godi54LCB2LnksIHYueik7CisgICAgICAgICAgICAgICAgbmV3Tm9ybXMucHVzaChuLngsIG4u
eSwgbi56KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB2ZXJ0ZXhfZGF0YSA9IG5l
dyBfTWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJW
ZXJ0ZXhEYXRhIl0oKTsKKyAgICAgICAgICAgIHZlcnRleF9kYXRhLnBvc2l0aW9ucyA9IG5ld1Bv
aW50czsKKyAgICAgICAgICAgIHZlcnRleF9kYXRhLm5vcm1hbHMgPSBuZXdOb3JtczsKKyAgICAg
ICAgICAgIHZlcnRleF9kYXRhLnV2cyA9IG9iamVjdC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5k
KTsKKyAgICAgICAgICAgIHZlcnRleF9kYXRhLmNvbG9ycyA9IG9iamVjdC5nZXRWZXJ0aWNlc0Rh
dGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVydGV4QnVm
ZmVyIl0uQ29sb3JLaW5kKTsKKyAgICAgICAgICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LmdldElu
ZGljZXMpIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhfZGF0YS5pbmRpY2VzID0gb2JqZWN0Lmdl
dEluZGljZXMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZlcnRleF9kYXRhLmFwcGx5
VG9NZXNoKG9iamVjdCk7CisgICAgICAgICAgICBvYmplY3QucG9zaXRpb24gPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsK
KyAgICAgICAgICAgIG9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24gPSBudWxsOworICAgICAgICAg
ICAgb2JqZWN0LnJvdGF0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgICAgICBvYmplY3QuY29tcHV0
ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHZlcnRleF9kYXRhOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBfTWVzaGVzX21lc2hfdmVydGV4RGF0YV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJWZXJ0ZXhEYXRhIl0uRXh0cmFjdEZyb21NZXNoKG9iamVjdCk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYW4gaW1wb3N0b3IncyBzb2Z0IGJvZHkK
KyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgdG8gY3JlYXRlIHRoZSBzb2Z0Ym9keSBmb3IKKyAgICAg
Ki8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLl9jcmVhdGVTb2Z0Ym9keSA9IGZ1bmN0aW9u
IChpbXBvc3RvcikgeworICAgICAgICB2YXIgb2JqZWN0ID0gaW1wb3N0b3Iub2JqZWN0OworICAg
ICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC5nZXRJbmRpY2VzKSB7CisgICAgICAgICAgICB2YXIg
aW5kaWNlcyA9IG9iamVjdC5nZXRJbmRpY2VzKCk7CisgICAgICAgICAgICBpZiAoIWluZGljZXMp
IHsKKyAgICAgICAgICAgICAgICBpbmRpY2VzID0gW107CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgdmVydGV4X2RhdGEgPSB0aGlzLl9zb2Z0VmVydGV4RGF0YShpbXBvc3Rvcik7Cisg
ICAgICAgICAgICB2YXIgdmVydGV4UG9zaXRpb25zID0gdmVydGV4X2RhdGEucG9zaXRpb25zOwor
ICAgICAgICAgICAgdmFyIHZlcnRleE5vcm1hbHMgPSB2ZXJ0ZXhfZGF0YS5ub3JtYWxzOworICAg
ICAgICAgICAgaWYgKHZlcnRleFBvc2l0aW9ucyA9PT0gbnVsbCB8fCB2ZXJ0ZXhOb3JtYWxzID09
PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBbW1vLmJ0Q29tcG91bmRTaGFw
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
dmFyIHRyaVBvaW50cyA9IFtdOworICAgICAgICAgICAgICAgIHZhciB0cmlOb3JtcyA9IFtdOwor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmVydGV4UG9zaXRpb25zLmxlbmd0
aDsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB2ID0gbmV3IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZWN0b3IzIl0odmVydGV4UG9z
aXRpb25zW2ldLCB2ZXJ0ZXhQb3NpdGlvbnNbaSArIDFdLCB2ZXJ0ZXhQb3NpdGlvbnNbaSArIDJd
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSh2ZXJ0ZXhOb3JtYWxzW2ldLCB2
ZXJ0ZXhOb3JtYWxzW2kgKyAxXSwgdmVydGV4Tm9ybWFsc1tpICsgMl0pOworICAgICAgICAgICAg
ICAgICAgICB0cmlQb2ludHMucHVzaCh2LngsIHYueSwgLXYueik7CisgICAgICAgICAgICAgICAg
ICAgIHRyaU5vcm1zLnB1c2gobi54LCBuLnksIC1uLnopOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB2YXIgc29mdEJvZHkgPSBuZXcgQW1tby5idFNvZnRCb2R5SGVscGVycygp
LkNyZWF0ZUZyb21UcmlNZXNoKHRoaXMud29ybGQuZ2V0V29ybGRJbmZvKCksIHRyaVBvaW50cywg
b2JqZWN0LmdldEluZGljZXMoKSwgaW5kaWNlcy5sZW5ndGggLyAzLCB0cnVlKTsKKyAgICAgICAg
ICAgICAgICB2YXIgbmJWZXJ0aWNlcyA9IHZlcnRleFBvc2l0aW9ucy5sZW5ndGggLyAzOworICAg
ICAgICAgICAgICAgIHZhciBib2R5VmVydGljZXMgPSBzb2Z0Qm9keS5nZXRfbV9ub2RlcygpOwor
ICAgICAgICAgICAgICAgIHZhciBub2RlOworICAgICAgICAgICAgICAgIHZhciBub2RlTm9ybWFs
czsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5iVmVydGljZXM7IGkrKykg
eworICAgICAgICAgICAgICAgICAgICBub2RlID0gYm9keVZlcnRpY2VzLmF0KGkpOworICAgICAg
ICAgICAgICAgICAgICB2YXIgbm9kZU5vcm1hbHMgPSBub2RlLmdldF9tX24oKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZU5vcm1hbHMuc2V0WCh0cmlOb3Jtc1szICogaV0pOworICAgICAgICAg
ICAgICAgICAgICBub2RlTm9ybWFscy5zZXRZKHRyaU5vcm1zWzMgKiBpICsgMV0pOworICAgICAg
ICAgICAgICAgICAgICBub2RlTm9ybWFscy5zZXRaKHRyaU5vcm1zWzMgKiBpICsgMl0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gc29mdEJvZHk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZSBjbG90aCBm
b3IgYW4gaW1wb3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgdG8gY3JlYXRlIHRoZSBzb2Z0
Ym9keSBmb3IKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLl9jcmVhdGVDbG90
aCA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICB2YXIgb2JqZWN0ID0gaW1wb3N0b3Iu
b2JqZWN0OworICAgICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC5nZXRJbmRpY2VzKSB7CisgICAg
ICAgICAgICB2YXIgaW5kaWNlcyA9IG9iamVjdC5nZXRJbmRpY2VzKCk7CisgICAgICAgICAgICBp
ZiAoIWluZGljZXMpIHsKKyAgICAgICAgICAgICAgICBpbmRpY2VzID0gW107CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YXIgdmVydGV4X2RhdGEgPSB0aGlzLl9zb2Z0VmVydGV4RGF0YShp
bXBvc3Rvcik7CisgICAgICAgICAgICB2YXIgdmVydGV4UG9zaXRpb25zID0gdmVydGV4X2RhdGEu
cG9zaXRpb25zOworICAgICAgICAgICAgdmFyIHZlcnRleE5vcm1hbHMgPSB2ZXJ0ZXhfZGF0YS5u
b3JtYWxzOworICAgICAgICAgICAgaWYgKHZlcnRleFBvc2l0aW9ucyA9PT0gbnVsbCB8fCB2ZXJ0
ZXhOb3JtYWxzID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBbW1vLmJ0
Q29tcG91bmRTaGFwZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgdmFyIGxlbiA9IHZlcnRleFBvc2l0aW9ucy5sZW5ndGg7CisgICAgICAgICAg
ICAgICAgdmFyIHNlZ21lbnRzID0gTWF0aC5zcXJ0KGxlbiAvIDMpOworICAgICAgICAgICAgICAg
IGltcG9zdG9yLnNlZ21lbnRzID0gc2VnbWVudHM7CisgICAgICAgICAgICAgICAgdmFyIHNlZ3Mg
PSBzZWdtZW50cyAtIDE7CisgICAgICAgICAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckEuc2V0
VmFsdWUodmVydGV4UG9zaXRpb25zWzBdLCB2ZXJ0ZXhQb3NpdGlvbnNbMV0sIHZlcnRleFBvc2l0
aW9uc1syXSk7CisgICAgICAgICAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckIuc2V0VmFsdWUo
dmVydGV4UG9zaXRpb25zWzMgKiBzZWdzXSwgdmVydGV4UG9zaXRpb25zWzMgKiBzZWdzICsgMV0s
IHZlcnRleFBvc2l0aW9uc1szICogc2VncyArIDJdKTsKKyAgICAgICAgICAgICAgICB0aGlzLl90
bXBBbW1vVmVjdG9yRC5zZXRWYWx1ZSh2ZXJ0ZXhQb3NpdGlvbnNbbGVuIC0gM10sIHZlcnRleFBv
c2l0aW9uc1tsZW4gLSAyXSwgdmVydGV4UG9zaXRpb25zW2xlbiAtIDFdKTsKKyAgICAgICAgICAg
ICAgICB0aGlzLl90bXBBbW1vVmVjdG9yQy5zZXRWYWx1ZSh2ZXJ0ZXhQb3NpdGlvbnNbbGVuIC0g
MyAtIDMgKiBzZWdzXSwgdmVydGV4UG9zaXRpb25zW2xlbiAtIDIgLSAzICogc2Vnc10sIHZlcnRl
eFBvc2l0aW9uc1tsZW4gLSAxIC0gMyAqIHNlZ3NdKTsKKyAgICAgICAgICAgICAgICB2YXIgY2xv
dGhCb2R5ID0gbmV3IEFtbW8uYnRTb2Z0Qm9keUhlbHBlcnMoKS5DcmVhdGVQYXRjaCh0aGlzLndv
cmxkLmdldFdvcmxkSW5mbygpLCB0aGlzLl90bXBBbW1vVmVjdG9yQSwgdGhpcy5fdG1wQW1tb1Zl
Y3RvckIsIHRoaXMuX3RtcEFtbW9WZWN0b3JDLCB0aGlzLl90bXBBbW1vVmVjdG9yRCwgc2VnbWVu
dHMsIHNlZ21lbnRzLCBpbXBvc3Rvci5nZXRQYXJhbSgiZml4ZWRQb2ludHMiKSwgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNsb3RoQm9keTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlIHJvcGUgZm9yIGFuIGltcG9zdG9yCisg
ICAgICogQHBhcmFtIGltcG9zdG9yIHRvIGNyZWF0ZSB0aGUgc29mdGJvZHkgZm9yCisgICAgICov
CisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5fY3JlYXRlUm9wZSA9IGZ1bmN0aW9uIChpbXBv
c3RvcikgeworICAgICAgICB2YXIgbGVuOworICAgICAgICB2YXIgc2VnbWVudHM7CisgICAgICAg
IHZhciB2ZXJ0ZXhfZGF0YSA9IHRoaXMuX3NvZnRWZXJ0ZXhEYXRhKGltcG9zdG9yKTsKKyAgICAg
ICAgdmFyIHZlcnRleFBvc2l0aW9ucyA9IHZlcnRleF9kYXRhLnBvc2l0aW9uczsKKyAgICAgICAg
dmFyIHZlcnRleE5vcm1hbHMgPSB2ZXJ0ZXhfZGF0YS5ub3JtYWxzOworICAgICAgICBpZiAodmVy
dGV4UG9zaXRpb25zID09PSBudWxsIHx8IHZlcnRleE5vcm1hbHMgPT09IG51bGwpIHsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgQW1tby5idENvbXBvdW5kU2hhcGUoKTsKKyAgICAgICAgfQorICAg
ICAgICAvL2ZvcmNlIHRoZSBtZXNoIHRvIGJlIHVwZGF0YWJsZQorICAgICAgICB2ZXJ0ZXhfZGF0
YS5hcHBseVRvTWVzaChpbXBvc3Rvci5vYmplY3QsIHRydWUpOworICAgICAgICBpbXBvc3Rvci5f
aXNGcm9tTGluZSA9IHRydWU7CisgICAgICAgIC8vIElmIGluIGxpbmVzIG1lc2ggYWxsIG5vcm1h
bHMgd2lsbCBiZSB6ZXJvCisgICAgICAgIHZhciB2ZXJ0ZXhTcXVhcmVkID0gdmVydGV4Tm9ybWFs
cy5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggKiB4OyB9KTsKKyAgICAgICAgdmFyIHJlZHVj
ZXIgPSBmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgeyByZXR1cm4gYWNjdW11
bGF0b3IgKyBjdXJyZW50VmFsdWU7IH07CisgICAgICAgIHZhciByZWR1Y2VkID0gdmVydGV4U3F1
YXJlZC5yZWR1Y2UocmVkdWNlcik7CisgICAgICAgIGlmIChyZWR1Y2VkID09PSAwKSB7IC8vIGxp
bmUgbWVzaAorICAgICAgICAgICAgbGVuID0gdmVydGV4UG9zaXRpb25zLmxlbmd0aDsKKyAgICAg
ICAgICAgIHNlZ21lbnRzID0gbGVuIC8gMyAtIDE7CisgICAgICAgICAgICB0aGlzLl90bXBBbW1v
VmVjdG9yQS5zZXRWYWx1ZSh2ZXJ0ZXhQb3NpdGlvbnNbMF0sIHZlcnRleFBvc2l0aW9uc1sxXSwg
dmVydGV4UG9zaXRpb25zWzJdKTsKKyAgICAgICAgICAgIHRoaXMuX3RtcEFtbW9WZWN0b3JCLnNl
dFZhbHVlKHZlcnRleFBvc2l0aW9uc1tsZW4gLSAzXSwgdmVydGV4UG9zaXRpb25zW2xlbiAtIDJd
LCB2ZXJ0ZXhQb3NpdGlvbnNbbGVuIC0gMV0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAv
L2V4dHJ1ZGVkIG1lc2gKKyAgICAgICAgICAgIGltcG9zdG9yLl9pc0Zyb21MaW5lID0gZmFsc2U7
CisgICAgICAgICAgICB2YXIgcGF0aFZlY3RvcnMgPSBpbXBvc3Rvci5nZXRQYXJhbSgicGF0aCIp
OworICAgICAgICAgICAgdmFyIHNoYXBlID0gaW1wb3N0b3IuZ2V0UGFyYW0oInNoYXBlIik7Cisg
ICAgICAgICAgICBpZiAoc2hhcGUgPT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBfTWlzY19s
b2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uV2FybigiTm8gc2hh
cGUgYXZhaWxhYmxlIGZvciBleHRydWRlZCBtZXNoIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG5ldyBBbW1vLmJ0Q29tcG91bmRTaGFwZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKCh2ZXJ0ZXhQb3NpdGlvbnMubGVuZ3RoICUgKDMgKiBwYXRoVmVjdG9ycy5sZW5ndGgpKSAh
PT0gMCkgeworICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCJQYXRoIGRvZXMgbm90IG1hdGNoIGV4dHJ1c2lvbiIp
OworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQW1tby5idENvbXBvdW5kU2hhcGUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbiA9IHBhdGhWZWN0b3JzLmxlbmd0aDsKKyAgICAg
ICAgICAgIHNlZ21lbnRzID0gbGVuIC0gMTsKKyAgICAgICAgICAgIHRoaXMuX3RtcEFtbW9WZWN0
b3JBLnNldFZhbHVlKHBhdGhWZWN0b3JzWzBdLngsIHBhdGhWZWN0b3JzWzBdLnksIHBhdGhWZWN0
b3JzWzBdLnopOworICAgICAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckIuc2V0VmFsdWUocGF0
aFZlY3RvcnNbbGVuIC0gMV0ueCwgcGF0aFZlY3RvcnNbbGVuIC0gMV0ueSwgcGF0aFZlY3RvcnNb
bGVuIC0gMV0ueik7CisgICAgICAgIH0KKyAgICAgICAgaW1wb3N0b3Iuc2VnbWVudHMgPSBzZWdt
ZW50czsKKyAgICAgICAgdmFyIGZpeGVkUG9pbnRzID0gaW1wb3N0b3IuZ2V0UGFyYW0oImZpeGVk
UG9pbnRzIik7CisgICAgICAgIGZpeGVkUG9pbnRzID0gKGZpeGVkUG9pbnRzID4gMykgPyAzIDog
Zml4ZWRQb2ludHM7CisgICAgICAgIHZhciByb3BlQm9keSA9IG5ldyBBbW1vLmJ0U29mdEJvZHlI
ZWxwZXJzKCkuQ3JlYXRlUm9wZSh0aGlzLndvcmxkLmdldFdvcmxkSW5mbygpLCB0aGlzLl90bXBB
bW1vVmVjdG9yQSwgdGhpcy5fdG1wQW1tb1ZlY3RvckIsIHNlZ21lbnRzIC0gMSwgZml4ZWRQb2lu
dHMpOworICAgICAgICByb3BlQm9keS5nZXRfbV9jZmcoKS5zZXRfY29sbGlzaW9ucygweDExKTsK
KyAgICAgICAgcmV0dXJuIHJvcGVCb2R5OworICAgIH07CisgICAgLy8gYWRkcyBhbGwgdmVydGlj
aWVzIChpbmNsdWRpbmcgY2hpbGQgdmVydGljaWVzKSB0byB0aGUgY29udmV4IGh1bGwgc2hhcGUK
KyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLl9hZGRIdWxsVmVydHMgPSBmdW5jdGlvbiAoYnRD
b252ZXhIdWxsU2hhcGUsIHRvcExldmVsT2JqZWN0LCBvYmplY3QpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gdGhpczsKKyAgICAgICAgdmFyIHRyaWFuZ2xlQ291bnQgPSAwOworICAgICAgICBpZiAo
b2JqZWN0ICYmIG9iamVjdC5nZXRJbmRpY2VzICYmIG9iamVjdC5nZXRXb3JsZE1hdHJpeCAmJiBv
YmplY3QuZ2V0Q2hpbGRNZXNoZXMpIHsKKyAgICAgICAgICAgIHZhciBpbmRpY2VzID0gb2JqZWN0
LmdldEluZGljZXMoKTsKKyAgICAgICAgICAgIGlmICghaW5kaWNlcykgeworICAgICAgICAgICAg
ICAgIGluZGljZXMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB2ZXJ0ZXhQ
b3NpdGlvbnMgPSBvYmplY3QuZ2V0VmVydGljZXNEYXRhKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCk7CisgICAg
ICAgICAgICBpZiAoIXZlcnRleFBvc2l0aW9ucykgeworICAgICAgICAgICAgICAgIHZlcnRleFBv
c2l0aW9ucyA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2JqZWN0LmNvbXB1dGVX
b3JsZE1hdHJpeChmYWxzZSk7CisgICAgICAgICAgICB2YXIgZmFjZUNvdW50ID0gaW5kaWNlcy5s
ZW5ndGggLyAzOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWNlQ291bnQ7IGkr
KykgeworICAgICAgICAgICAgICAgIHZhciB0cmlQb2ludHMgPSBbXTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHZhciBwb2ludCA9IDA7IHBvaW50IDwgMzsgcG9pbnQrKykgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgdiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siVmVjdG9yMyJdKHZlcnRleFBvc2l0aW9uc1soaW5kaWNlc1soaSAqIDMpICsg
cG9pbnRdICogMykgKyAwXSwgdmVydGV4UG9zaXRpb25zWyhpbmRpY2VzWyhpICogMykgKyBwb2lu
dF0gKiAzKSArIDFdLCB2ZXJ0ZXhQb3NpdGlvbnNbKGluZGljZXNbKGkgKiAzKSArIHBvaW50XSAq
IDMpICsgMl0pOworICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgZm9yIGluaXRpYWwgc2Nh
bGluZworICAgICAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siTWF0cml4Il0uU2NhbGluZ1RvUmVmKG9iamVjdC5zY2FsaW5nLngs
IG9iamVjdC5zY2FsaW5nLnksIG9iamVjdC5zY2FsaW5nLnosIHRoaXMuX3RtcE1hdHJpeCk7Cisg
ICAgICAgICAgICAgICAgICAgIHYgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzKHYsIHRoaXMuX3Rt
cE1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgIHZhciB2ZWM7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChwb2ludCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZWMgPSB0aGlz
Ll90bXBBbW1vVmVjdG9yQTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChwb2ludCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZWMg
PSB0aGlzLl90bXBBbW1vVmVjdG9yQjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlYyA9IHRoaXMuX3Rt
cEFtbW9WZWN0b3JDOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHZlYy5zZXRWYWx1ZSh2LngsIHYueSwgdi56KTsKKyAgICAgICAgICAgICAgICAgICAgdHJpUG9p
bnRzLnB1c2godmVjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnRDb252
ZXhIdWxsU2hhcGUuYWRkUG9pbnQodHJpUG9pbnRzWzBdLCB0cnVlKTsKKyAgICAgICAgICAgICAg
ICBidENvbnZleEh1bGxTaGFwZS5hZGRQb2ludCh0cmlQb2ludHNbMV0sIHRydWUpOworICAgICAg
ICAgICAgICAgIGJ0Q29udmV4SHVsbFNoYXBlLmFkZFBvaW50KHRyaVBvaW50c1syXSwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgdHJpYW5nbGVDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgb2JqZWN0LmdldENoaWxkTWVzaGVzKCkuZm9yRWFjaChmdW5jdGlvbiAobSkgeworICAg
ICAgICAgICAgICAgIHRyaWFuZ2xlQ291bnQgKz0gX3RoaXMuX2FkZEh1bGxWZXJ0cyhidENvbnZl
eEh1bGxTaGFwZSwgdG9wTGV2ZWxPYmplY3QsIG0pOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRyaWFuZ2xlQ291bnQ7CisgICAgfTsKKyAgICBBbW1vSlNQbHVn
aW4ucHJvdG90eXBlLl9jcmVhdGVTaGFwZSA9IGZ1bmN0aW9uIChpbXBvc3RvciwgaWdub3JlQ2hp
bGRyZW4pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKGlnbm9yZUNo
aWxkcmVuID09PSB2b2lkIDApIHsgaWdub3JlQ2hpbGRyZW4gPSBmYWxzZTsgfQorICAgICAgICB2
YXIgb2JqZWN0ID0gaW1wb3N0b3Iub2JqZWN0OworICAgICAgICB2YXIgcmV0dXJuVmFsdWU7Cisg
ICAgICAgIHZhciBleHRlbmRTaXplID0gaW1wb3N0b3IuZ2V0T2JqZWN0RXh0ZW5kU2l6ZSgpOwor
ICAgICAgICBpZiAoIWlnbm9yZUNoaWxkcmVuKSB7CisgICAgICAgICAgICB2YXIgbWVzaENoaWxk
cmVuID0gaW1wb3N0b3Iub2JqZWN0LmdldENoaWxkTWVzaGVzID8gaW1wb3N0b3Iub2JqZWN0Lmdl
dENoaWxkTWVzaGVzKHRydWUpIDogW107CisgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyBB
bW1vLmJ0Q29tcG91bmRTaGFwZSgpOworICAgICAgICAgICAgLy8gQWRkIHNoYXBlIG9mIGFsbCBj
aGlsZHJlbiB0byB0aGUgY29tcG91bmQgc2hhcGUKKyAgICAgICAgICAgIHZhciBjaGlsZHJlbkFk
ZGVkID0gMDsKKyAgICAgICAgICAgIG1lc2hDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGls
ZE1lc2gpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGRJbXBvc3RvciA9IGNoaWxkTWVzaC5n
ZXRQaHlzaWNzSW1wb3N0b3IoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbXBvc3Rvcikg
eworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbXBvc3Rvci50eXBlID09IF9QaHlzaWNz
X3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQaHlzaWNzSW1w
b3N0b3IiXS5NZXNoSW1wb3N0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93ICJB
IGNoaWxkIE1lc2hJbXBvc3RvciBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5IHByaW1pdGl2ZSBpbXBv
c3RvcnMgYXJlIHN1cHBvcnRlZCBhcyBjaGlsZHJlbiAoZWcuIGJveCBvciBzcGhlcmUpIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YXIgc2hhcGUgPSBfdGhp
cy5fY3JlYXRlU2hhcGUoY2hpbGRJbXBvc3Rvcik7CisgICAgICAgICAgICAgICAgICAgIC8vIFBv
c2l0aW9uIG5lZWRzIHRvIGJlIHNjYWxlZCBiYXNlZCBvbiBwYXJlbnQncyBzY2FsaW5nCisgICAg
ICAgICAgICAgICAgICAgIHZhciBwYXJlbnRNYXQgPSBjaGlsZE1lc2gucGFyZW50LmdldFdvcmxk
TWF0cml4KCkuY2xvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXSgpOwor
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRNYXQuZGVjb21wb3NlKHMpOworICAgICAgICAgICAg
ICAgICAgICBfdGhpcy5fdG1wQW1tb1RyYW5zZm9ybS5nZXRPcmlnaW4oKS5zZXRWYWx1ZShjaGls
ZE1lc2gucG9zaXRpb24ueCAqIHMueCwgY2hpbGRNZXNoLnBvc2l0aW9uLnkgKiBzLnksIGNoaWxk
TWVzaC5wb3NpdGlvbi56ICogcy56KTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RtcEFt
bW9RdWF0ZXJuaW9uLnNldFZhbHVlKGNoaWxkTWVzaC5yb3RhdGlvblF1YXRlcm5pb24ueCwgY2hp
bGRNZXNoLnJvdGF0aW9uUXVhdGVybmlvbi55LCBjaGlsZE1lc2gucm90YXRpb25RdWF0ZXJuaW9u
LnosIGNoaWxkTWVzaC5yb3RhdGlvblF1YXRlcm5pb24udyk7CisgICAgICAgICAgICAgICAgICAg
IF90aGlzLl90bXBBbW1vVHJhbnNmb3JtLnNldFJvdGF0aW9uKF90aGlzLl90bXBBbW1vUXVhdGVy
bmlvbik7CisgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLmFkZENoaWxkU2hhcGUoX3Ro
aXMuX3RtcEFtbW9UcmFuc2Zvcm0sIHNoYXBlKTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRJ
bXBvc3Rvci5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQWRkZWQrKzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChjaGls
ZHJlbkFkZGVkID4gMCkgeworICAgICAgICAgICAgICAgIC8vIEFkZCBwYXJlbnRzIHNoYXBlIGFz
IGEgY2hpbGQgaWYgcHJlc2VudAorICAgICAgICAgICAgICAgIGlmIChpbXBvc3Rvci50eXBlICE9
IF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQ
aHlzaWNzSW1wb3N0b3IiXS5Ob0ltcG9zdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBz
aGFwZSA9IHRoaXMuX2NyZWF0ZVNoYXBlKGltcG9zdG9yLCB0cnVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNoYXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90bXBBbW1v
VHJhbnNmb3JtLmdldE9yaWdpbigpLnNldFZhbHVlKDAsIDAsIDApOworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fdG1wQW1tb1F1YXRlcm5pb24uc2V0VmFsdWUoMCwgMCwgMCwgMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90bXBBbW1vVHJhbnNmb3JtLnNldFJvdGF0aW9u
KHRoaXMuX3RtcEFtbW9RdWF0ZXJuaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlLmFkZENoaWxkU2hhcGUodGhpcy5fdG1wQW1tb1RyYW5zZm9ybSwgc2hhcGUpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIElmIG5vIGNoaWxkcmVuIHdpdGggaW1wb3N0b3JzIGNyZWF0ZSB0aGUg
YWN0dWFsIHNoYXBlIGJlbG93IGluc3RlYWQKKyAgICAgICAgICAgICAgICBBbW1vLmRlc3Ryb3ko
cmV0dXJuVmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gbnVsbDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKGltcG9zdG9yLnR5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlBoeXNpY3NJbXBvc3RvciJdLlNwaGVyZUltcG9zdG9yOgorICAgICAgICAg
ICAgICAgIC8vIElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBjb21wYXJlIGZsb2F0cyBudW1iZXI/
IFdpdGggYW4gZXBzeWxvbiBvciB3aXRoIGEgTWF0aCBmdW5jdGlvbgorICAgICAgICAgICAgICAg
IGlmIChfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siU2Nh
bGFyIl0uV2l0aGluRXBzaWxvbihleHRlbmRTaXplLngsIGV4dGVuZFNpemUueSwgMC4wMDAxKSAm
JiBfTWF0aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siU2NhbGFy
Il0uV2l0aGluRXBzaWxvbihleHRlbmRTaXplLngsIGV4dGVuZFNpemUueiwgMC4wMDAxKSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUo
ZXh0ZW5kU2l6ZS54IC8gMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYSBidE11bHRpU3BoZXJlU2hhcGUg
YmVjYXVzZSBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZXQgYSBsb2NhbCBzY2FsaW5nIG9uIGEgYnRT
cGhlcmVTaGFwZQorICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gW25ldyBBbW1v
LmJ0VmVjdG9yMygwLCAwLCAwKV07CisgICAgICAgICAgICAgICAgICAgIHZhciByYWRpaSA9IFsx
XTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBuZXcgQW1tby5idE11bHRpU3Bo
ZXJlU2hhcGUocG9zaXRpb25zLCByYWRpaSwgMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlLnNldExvY2FsU2NhbGluZyhuZXcgQW1tby5idFZlY3RvcjMoZXh0ZW5kU2l6ZS54IC8g
MiwgZXh0ZW5kU2l6ZS55IC8gMiwgZXh0ZW5kU2l6ZS56IC8gMikpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5
c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNpY3NJbXBvc3Rv
ciJdLkNhcHN1bGVJbXBvc3RvcjoKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyBB
bW1vLmJ0Q2Fwc3VsZVNoYXBlKGV4dGVuZFNpemUueCAvIDIsIGV4dGVuZFNpemUueSAvIDIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNz
SW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUGh5c2ljc0ltcG9zdG9yIl0u
Q3lsaW5kZXJJbXBvc3RvcjoKKyAgICAgICAgICAgICAgICB0aGlzLl90bXBBbW1vVmVjdG9yQS5z
ZXRWYWx1ZShleHRlbmRTaXplLnggLyAyLCBleHRlbmRTaXplLnkgLyAyLCBleHRlbmRTaXplLnog
LyAyKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyBBbW1vLmJ0Q3lsaW5kZXJT
aGFwZSh0aGlzLl90bXBBbW1vVmVjdG9yQSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJQaHlzaWNzSW1wb3N0b3IiXS5QbGFuZUltcG9zdG9yOgorICAgICAgICAgICAg
Y2FzZSBfUGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siUGh5c2ljc0ltcG9zdG9yIl0uQm94SW1wb3N0b3I6CisgICAgICAgICAgICAgICAgdGhpcy5f
dG1wQW1tb1ZlY3RvckEuc2V0VmFsdWUoZXh0ZW5kU2l6ZS54IC8gMiwgZXh0ZW5kU2l6ZS55IC8g
MiwgZXh0ZW5kU2l6ZS56IC8gMik7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBuZXcg
QW1tby5idEJveFNoYXBlKHRoaXMuX3RtcEFtbW9WZWN0b3JBKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNpY3NJbXBvc3RvciJdLk1lc2hJbXBvc3RvcjoKKyAg
ICAgICAgICAgICAgICBpZiAoaW1wb3N0b3IuZ2V0UGFyYW0oIm1hc3MiKSA9PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIE9ubHkgY3JlYXRlIGJ0QnZoVHJpYW5nbGVNZXNoU2hhcGUgaW1w
b3N0b3IgaXMgc3RhdGljCisgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL3B5YnVs
bGV0Lm9yZy9CdWxsZXQvcGhwQkIzL3ZpZXd0b3BpYy5waHA/dD03MjgzCisgICAgICAgICAgICAg
ICAgICAgIHZhciB0ZXRyYU1lc2ggPSBuZXcgQW1tby5idFRyaWFuZ2xlTWVzaCgpOworICAgICAg
ICAgICAgICAgICAgICBpbXBvc3Rvci5fcGx1Z2luRGF0YS50b0Rpc3Bvc2UucHVzaCh0ZXRyYU1l
c2gpOworICAgICAgICAgICAgICAgICAgICB2YXIgdHJpYW5nZUNvdW50ID0gdGhpcy5fYWRkTWVz
aFZlcnRzKHRldHJhTWVzaCwgb2JqZWN0LCBvYmplY3QpOworICAgICAgICAgICAgICAgICAgICBp
ZiAodHJpYW5nZUNvdW50ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZh
bHVlID0gbmV3IEFtbW8uYnRDb21wb3VuZFNoYXBlKCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm5WYWx1ZSA9IG5ldyBBbW1vLmJ0QnZoVHJpYW5nbGVNZXNoU2hhcGUodGV0cmFNZXNoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBPdGhlcndpc2UgY3JlYXRlIGNvbnZleEh1bGxJbXBv
c3RvcgorICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siUGh5c2ljc0ltcG9zdG9yIl0uQ29udmV4SHVsbEltcG9zdG9y
OgorICAgICAgICAgICAgICAgIHZhciBjb252ZXhNZXNoID0gbmV3IEFtbW8uYnRDb252ZXhIdWxs
U2hhcGUoKTsKKyAgICAgICAgICAgICAgICB2YXIgdHJpYW5nZUNvdW50ID0gdGhpcy5fYWRkSHVs
bFZlcnRzKGNvbnZleE1lc2gsIG9iamVjdCwgb2JqZWN0KTsKKyAgICAgICAgICAgICAgICBpZiAo
dHJpYW5nZUNvdW50ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYW51cCBVbnVz
ZWQgQ29udmV4IEh1bGwgU2hhcGUKKyAgICAgICAgICAgICAgICAgICAgaW1wb3N0b3IuX3BsdWdp
bkRhdGEudG9EaXNwb3NlLnB1c2goY29udmV4TWVzaCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVyblZhbHVlID0gbmV3IEFtbW8uYnRDb21wb3VuZFNoYXBlKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1
ZSA9IGNvbnZleE1lc2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siUGh5c2ljc0ltcG9zdG9yIl0uTm9JbXBvc3RvcjoKKyAgICAgICAg
ICAgICAgICAvLyBGaWxsIHdpdGggc3BoZXJlIGJ1dCBjb2xsaXNpb24gaXMgZGlzYWJsZWQgb24g
dGhlIHJpZ2lkIGJvZHkgaW4gZ2VuZXJhdGVQaHlzaWNzQm9keSwgdXNpbmcgYW4gZW1wdHkgc2hh
cGUgY2F1c2VkIHVuZXhwZWN0ZWQgbW92ZW1lbnQgd2l0aCBqb2ludHMKKyAgICAgICAgICAgICAg
ICByZXR1cm5WYWx1ZSA9IG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUoZXh0ZW5kU2l6ZS54IC8gMik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNp
Y3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQaHlzaWNzSW1wb3N0b3Ii
XS5Tb2Z0Ym9keUltcG9zdG9yOgorICAgICAgICAgICAgICAgIC8vIE9ubHkgdXNhYmxlIHdpdGgg
YSBtZXNoIHRoYXQgaGFzIHN1ZmZpY2llbnQgYW5kIHNoYXJlZCB2ZXJ0aWNlcworICAgICAgICAg
ICAgICAgIHJldHVyblZhbHVlID0gdGhpcy5fY3JlYXRlU29mdGJvZHkoaW1wb3N0b3IpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSW1w
b3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUGh5c2ljc0ltcG9zdG9yIl0uQ2xv
dGhJbXBvc3RvcjoKKyAgICAgICAgICAgICAgICAvLyBPbmx5IHVzYWJsZSB3aXRoIGEgZ3JvdW5k
IG1lc2ggdGhhdCBoYXMgc3VmZmljaWVudCBhbmQgc2hhcmVkIHZlcnRpY2VzCisgICAgICAgICAg
ICAgICAgcmV0dXJuVmFsdWUgPSB0aGlzLl9jcmVhdGVDbG90aChpbXBvc3Rvcik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQaHlzaWNzSW1wb3N0b3IiXS5Sb3BlSW1w
b3N0b3I6CisgICAgICAgICAgICAgICAgLy8gT25seSB1c2FibGUgd2l0aCBhIGxpbmUgbWVzaCBv
ciBhbiBleHRydWRlZCBtZXNoIHRoYXQgaXMgdXBkYXRhYmxlCisgICAgICAgICAgICAgICAgcmV0
dXJuVmFsdWUgPSB0aGlzLl9jcmVhdGVSb3BlKGltcG9zdG9yKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4oIlRoZSBpbXBvc3Rv
ciB0eXBlIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSBhbW1vIHBsdWdpbi4iKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBwaHlzaWNzIGJvZHkgcG9z
aXRpb24vcm90YXRpb24gZnJvbSB0aGUgYmFieWxvbiBtZXNoJ3MgcG9zaXRpb24vcm90YXRpb24K
KyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0ZXIgY29udGFpbmluZyB0aGUgcGh5c2ljcyBi
b2R5IGFuZCBiYWJ5bG9uIG9iamVjdAorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5
cGUuc2V0VHJhbnNmb3JtYXRpb25Gcm9tUGh5c2ljc0JvZHkgPSBmdW5jdGlvbiAoaW1wb3N0b3Ip
IHsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuZ2V0TW90aW9uU3RhdGUoKS5nZXRXb3Js
ZFRyYW5zZm9ybSh0aGlzLl90bXBBbW1vVHJhbnNmb3JtKTsKKyAgICAgICAgaW1wb3N0b3Iub2Jq
ZWN0LnBvc2l0aW9uLnNldCh0aGlzLl90bXBBbW1vVHJhbnNmb3JtLmdldE9yaWdpbigpLngoKSwg
dGhpcy5fdG1wQW1tb1RyYW5zZm9ybS5nZXRPcmlnaW4oKS55KCksIHRoaXMuX3RtcEFtbW9UcmFu
c2Zvcm0uZ2V0T3JpZ2luKCkueigpKTsKKyAgICAgICAgaWYgKCFpbXBvc3Rvci5vYmplY3Qucm90
YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICBpZiAoaW1wb3N0b3Iub2JqZWN0LnJvdGF0
aW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdG1wUXVhdGVybmlvbi5zZXQodGhpcy5fdG1w
QW1tb1RyYW5zZm9ybS5nZXRSb3RhdGlvbigpLngoKSwgdGhpcy5fdG1wQW1tb1RyYW5zZm9ybS5n
ZXRSb3RhdGlvbigpLnkoKSwgdGhpcy5fdG1wQW1tb1RyYW5zZm9ybS5nZXRSb3RhdGlvbigpLnoo
KSwgdGhpcy5fdG1wQW1tb1RyYW5zZm9ybS5nZXRSb3RhdGlvbigpLncoKSk7CisgICAgICAgICAg
ICAgICAgdGhpcy5fdG1wUXVhdGVybmlvbi50b0V1bGVyQW5nbGVzVG9SZWYoaW1wb3N0b3Iub2Jq
ZWN0LnJvdGF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGltcG9zdG9yLm9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24uc2V0KHRoaXMu
X3RtcEFtbW9UcmFuc2Zvcm0uZ2V0Um90YXRpb24oKS54KCksIHRoaXMuX3RtcEFtbW9UcmFuc2Zv
cm0uZ2V0Um90YXRpb24oKS55KCksIHRoaXMuX3RtcEFtbW9UcmFuc2Zvcm0uZ2V0Um90YXRpb24o
KS56KCksIHRoaXMuX3RtcEFtbW9UcmFuc2Zvcm0uZ2V0Um90YXRpb24oKS53KCkpOworICAgICAg
ICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBiYWJ5bG9uIG9iamVjdCdzIHBv
c2l0aW9uL3JvdGF0aW9uIGZyb20gdGhlIHBoeXNpY3MgYm9keSdzIHBvc2l0aW9uL3JvdGF0aW9u
CisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdGVyIGNvbnRhaW5pbmcgdGhlIHBoeXNpY3Mg
Ym9keSBhbmQgYmFieWxvbiBvYmplY3QKKyAgICAgKiBAcGFyYW0gbmV3UG9zaXRpb24gbmV3IHBv
c2l0aW9uCisgICAgICogQHBhcmFtIG5ld1JvdGF0aW9uIG5ldyByb3RhdGlvbgorICAgICAqLwor
ICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuc2V0UGh5c2ljc0JvZHlUcmFuc2Zvcm1hdGlvbiA9
IGZ1bmN0aW9uIChpbXBvc3RvciwgbmV3UG9zaXRpb24sIG5ld1JvdGF0aW9uKSB7CisgICAgICAg
IHZhciB0cmFucyA9IGltcG9zdG9yLnBoeXNpY3NCb2R5LmdldFdvcmxkVHJhbnNmb3JtKCk7Cisg
ICAgICAgIC8vIElmIHJvdGF0aW9uL3Bvc2l0aW9uIGhhcyBjaGFuZ2VkIHVwZGF0ZSBhbmQgYWN0
aXZhdGUgcmlnZWQgYm9keQorICAgICAgICBpZiAodHJhbnMuZ2V0T3JpZ2luKCkueCgpICE9IG5l
d1Bvc2l0aW9uLnggfHwKKyAgICAgICAgICAgIHRyYW5zLmdldE9yaWdpbigpLnkoKSAhPSBuZXdQ
b3NpdGlvbi55IHx8CisgICAgICAgICAgICB0cmFucy5nZXRPcmlnaW4oKS56KCkgIT0gbmV3UG9z
aXRpb24ueiB8fAorICAgICAgICAgICAgdHJhbnMuZ2V0Um90YXRpb24oKS54KCkgIT0gbmV3Um90
YXRpb24ueCB8fAorICAgICAgICAgICAgdHJhbnMuZ2V0Um90YXRpb24oKS55KCkgIT0gbmV3Um90
YXRpb24ueSB8fAorICAgICAgICAgICAgdHJhbnMuZ2V0Um90YXRpb24oKS56KCkgIT0gbmV3Um90
YXRpb24ueiB8fAorICAgICAgICAgICAgdHJhbnMuZ2V0Um90YXRpb24oKS53KCkgIT0gbmV3Um90
YXRpb24udykgeworICAgICAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckEuc2V0VmFsdWUobmV3
UG9zaXRpb24ueCwgbmV3UG9zaXRpb24ueSwgbmV3UG9zaXRpb24ueik7CisgICAgICAgICAgICB0
cmFucy5zZXRPcmlnaW4odGhpcy5fdG1wQW1tb1ZlY3RvckEpOworICAgICAgICAgICAgdGhpcy5f
dG1wQW1tb1F1YXRlcm5pb24uc2V0VmFsdWUobmV3Um90YXRpb24ueCwgbmV3Um90YXRpb24ueSwg
bmV3Um90YXRpb24ueiwgbmV3Um90YXRpb24udyk7CisgICAgICAgICAgICB0cmFucy5zZXRSb3Rh
dGlvbih0aGlzLl90bXBBbW1vUXVhdGVybmlvbik7CisgICAgICAgICAgICBpbXBvc3Rvci5waHlz
aWNzQm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFucyk7CisgICAgICAgICAgICBpZiAoaW1wb3N0
b3IubWFzcyA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gS2luZW1hdGljIG9iamVjdHMgbXVz
dCBiZSB1cGRhdGVkIHVzaW5nIG1vdGlvbiBzdGF0ZQorICAgICAgICAgICAgICAgIHZhciBtb3Rp
b25TdGF0ZSA9IGltcG9zdG9yLnBoeXNpY3NCb2R5LmdldE1vdGlvblN0YXRlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CisgICAgICAgICAgICAgICAgICAgIG1vdGlvblN0
YXRlLnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbXBvc3Rvci5waHlz
aWNzQm9keS5hY3RpdmF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBJZiB0aGlzIHBsdWdpbiBpcyBzdXBwb3J0ZWQKKyAgICAgKiBAcmV0dXJu
cyB0cnVlIGlmIGl0cyBzdXBwb3J0ZWQKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90
eXBlLmlzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5ianNB
TU1PICE9PSB1bmRlZmluZWQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBsaW5l
YXIgdmVsb2NpdHkgb2YgdGhlIHBoeXNpY3MgYm9keQorICAgICAqIEBwYXJhbSBpbXBvc3RvciBp
bXBvc3RlciB0byBzZXQgdGhlIHZlbG9jaXR5IG9uCisgICAgICogQHBhcmFtIHZlbG9jaXR5IHZl
bG9jaXR5IHRvIHNldAorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuc2V0TGlu
ZWFyVmVsb2NpdHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIHZlbG9jaXR5KSB7CisgICAgICAgIHRo
aXMuX3RtcEFtbW9WZWN0b3JBLnNldFZhbHVlKHZlbG9jaXR5LngsIHZlbG9jaXR5LnksIHZlbG9j
aXR5LnopOworICAgICAgICBpZiAoaW1wb3N0b3Iuc29mdCkgeworICAgICAgICAgICAgaW1wb3N0
b3IucGh5c2ljc0JvZHkubGluZWFyVmVsb2NpdHkodGhpcy5fdG1wQW1tb1ZlY3RvckEpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHku
c2V0TGluZWFyVmVsb2NpdHkodGhpcy5fdG1wQW1tb1ZlY3RvckEpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBhbmd1bGFyIHZlbG9jaXR5IG9mIHRoZSBwaHlz
aWNzIGJvZHkKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0ZXIgdG8gc2V0IHRoZSB2ZWxv
Y2l0eSBvbgorICAgICAqIEBwYXJhbSB2ZWxvY2l0eSB2ZWxvY2l0eSB0byBzZXQKKyAgICAgKi8K
KyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLnNldEFuZ3VsYXJWZWxvY2l0eSA9IGZ1bmN0aW9u
IChpbXBvc3RvciwgdmVsb2NpdHkpIHsKKyAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvckEuc2V0
VmFsdWUodmVsb2NpdHkueCwgdmVsb2NpdHkueSwgdmVsb2NpdHkueik7CisgICAgICAgIGlmIChp
bXBvc3Rvci5zb2Z0KSB7CisgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5hbmd1bGFy
VmVsb2NpdHkodGhpcy5fdG1wQW1tb1ZlY3RvckEpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuc2V0QW5ndWxhclZlbG9jaXR5KHRo
aXMuX3RtcEFtbW9WZWN0b3JBKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
Z2V0cyB0aGUgbGluZWFyIHZlbG9jaXR5CisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdGVy
IHRvIGdldCBsaW5lYXIgdmVsb2NpdHkgZnJvbQorICAgICAqIEByZXR1cm5zIGxpbmVhciB2ZWxv
Y2l0eQorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2V0TGluZWFyVmVsb2Np
dHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgaWYgKGltcG9zdG9yLnNvZnQpIHsK
KyAgICAgICAgICAgIHZhciB2ID0gaW1wb3N0b3IucGh5c2ljc0JvZHkubGluZWFyVmVsb2NpdHko
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciB2ID0gaW1wb3N0
b3IucGh5c2ljc0JvZHkuZ2V0TGluZWFyVmVsb2NpdHkoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXYpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZh
ciByZXN1bHQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlZlY3RvcjMiXSh2LngoKSwgdi55KCksIHYueigpKTsKKyAgICAgICAgQW1tby5kZXN0
cm95KHYpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisgICAgICog
Z2V0cyB0aGUgYW5ndWxhciB2ZWxvY2l0eQorICAgICAqIEBwYXJhbSBpbXBvc3RvciBpbXBvc3Rl
ciB0byBnZXQgYW5ndWxhciB2ZWxvY2l0eSBmcm9tCisgICAgICogQHJldHVybnMgYW5ndWxhciB2
ZWxvY2l0eQorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2V0QW5ndWxhclZl
bG9jaXR5ID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIGlmIChpbXBvc3Rvci5zb2Z0
KSB7CisgICAgICAgICAgICB2YXIgdiA9IGltcG9zdG9yLnBoeXNpY3NCb2R5LmFuZ3VsYXJWZWxv
Y2l0eSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIHYgPSBp
bXBvc3Rvci5waHlzaWNzQm9keS5nZXRBbmd1bGFyVmVsb2NpdHkoKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIXYpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAg
ICAgIHZhciByZXN1bHQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXSh2LngoKSwgdi55KCksIHYueigpKTsKKyAgICAgICAgQW1t
by5kZXN0cm95KHYpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgLyoqCisg
ICAgICogU2V0cyB0aGUgbWFzcyBvZiBwaHlzaWNzIGJvZHkKKyAgICAgKiBAcGFyYW0gaW1wb3N0
b3IgaW1wb3N0ZXIgdG8gc2V0IHRoZSBtYXNzIG9uCisgICAgICogQHBhcmFtIG1hc3MgbWFzcyB0
byBzZXQKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLnNldEJvZHlNYXNzID0g
ZnVuY3Rpb24gKGltcG9zdG9yLCBtYXNzKSB7CisgICAgICAgIGlmIChpbXBvc3Rvci5zb2Z0KSB7
CisgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5zZXRUb3RhbE1hc3MobWFzcywgZmFs
c2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW1wb3N0b3IucGh5
c2ljc0JvZHkuc2V0TWFzc1Byb3BzKG1hc3MpOworICAgICAgICB9CisgICAgICAgIGltcG9zdG9y
Ll9wbHVnaW5EYXRhLm1hc3MgPSBtYXNzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0
aGUgbWFzcyBvZiB0aGUgcGh5c2ljcyBib2R5CisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9z
dGVyIHRvIGdldCB0aGUgbWFzcyBmcm9tCisgICAgICogQHJldHVybnMgbWFzcworICAgICAqLwor
ICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2V0Qm9keU1hc3MgPSBmdW5jdGlvbiAoaW1wb3N0
b3IpIHsKKyAgICAgICAgcmV0dXJuIGltcG9zdG9yLl9wbHVnaW5EYXRhLm1hc3MgfHwgMDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgZnJpY3Rpb24gb2YgdGhlIGltcG9zdG9yCisgICAg
ICogQHBhcmFtIGltcG9zdG9yIGltcG9zdG9yIHRvIGdldCBmcmljdGlvbiBmcm9tCisgICAgICog
QHJldHVybnMgZnJpY3Rpb24gdmFsdWUKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90
eXBlLmdldEJvZHlGcmljdGlvbiA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICByZXR1
cm4gaW1wb3N0b3IuX3BsdWdpbkRhdGEuZnJpY3Rpb24gfHwgMDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNldHMgZnJpY3Rpb24gb2YgdGhlIGltcG9zdG9yCisgICAgICogQHBhcmFtIGltcG9z
dG9yIGltcG9zdG9yIHRvIHNldCBmcmljdGlvbiBvbgorICAgICAqIEBwYXJhbSBmcmljdGlvbiBm
cmljdGlvbiB2YWx1ZQorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuc2V0Qm9k
eUZyaWN0aW9uID0gZnVuY3Rpb24gKGltcG9zdG9yLCBmcmljdGlvbikgeworICAgICAgICBpZiAo
aW1wb3N0b3Iuc29mdCkgeworICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuZ2V0X21f
Y2ZnKCkuc2V0X2tERihmcmljdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5zZXRGcmljdGlvbihmcmljdGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgaW1wb3N0b3IuX3BsdWdpbkRhdGEuZnJpY3Rpb24gPSBmcmljdGlvbjsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgcmVzdGl0dXRpb24gb2YgdGhlIGltcG9zdG9y
CisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdG9yIHRvIGdldCByZXN0aXR1dGlvbiBmcm9t
CisgICAgICogQHJldHVybnMgcmVzdGl0dXRpb24gdmFsdWUKKyAgICAgKi8KKyAgICBBbW1vSlNQ
bHVnaW4ucHJvdG90eXBlLmdldEJvZHlSZXN0aXR1dGlvbiA9IGZ1bmN0aW9uIChpbXBvc3Rvcikg
eworICAgICAgICByZXR1cm4gaW1wb3N0b3IuX3BsdWdpbkRhdGEucmVzdGl0dXRpb24gfHwgMDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgcmVzaXR1dGlvbiBvZiB0aGUgaW1wb3N0b3IK
KyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3IgdG8gc2V0IHJlc2l0dXRpb24gb24KKyAg
ICAgKiBAcGFyYW0gcmVzdGl0dXRpb24gcmVzaXR1dGlvbiB2YWx1ZQorICAgICAqLworICAgIEFt
bW9KU1BsdWdpbi5wcm90b3R5cGUuc2V0Qm9keVJlc3RpdHV0aW9uID0gZnVuY3Rpb24gKGltcG9z
dG9yLCByZXN0aXR1dGlvbikgeworICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5zZXRSZXN0
aXR1dGlvbihyZXN0aXR1dGlvbik7CisgICAgICAgIGltcG9zdG9yLl9wbHVnaW5EYXRhLnJlc3Rp
dHV0aW9uID0gcmVzdGl0dXRpb247CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHByZXNz
dXJlIGluc2lkZSB0aGUgaW1wb3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3Ig
dG8gZ2V0IHByZXNzdXJlIGZyb20KKyAgICAgKiBAcmV0dXJucyBwcmVzc3VyZSB2YWx1ZQorICAg
ICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2V0Qm9keVByZXNzdXJlID0gZnVuY3Rp
b24gKGltcG9zdG9yKSB7CisgICAgICAgIGlmICghaW1wb3N0b3Iuc29mdCkgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldh
cm4oIlByZXNzdXJlIGlzIG5vdCBhIHByb3BlcnR5IG9mIGEgcmlnaWQgYm9keSIpOworICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGltcG9zdG9yLl9wbHVn
aW5EYXRhLnByZXNzdXJlIHx8IDA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHByZXNz
dXJlIGluc2lkZSBhIHNvZnQgYm9keSBpbXBvc3RvcgorICAgICAqIENsb3RoIGFuZCByb3BlIG11
c3QgcmVtYWluIDAgcHJlc3N1cmUKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3IgdG8g
c2V0IHByZXNzdXJlIG9uCisgICAgICogQHBhcmFtIHByZXNzdXJlIHByZXNzdXJlIHZhbHVlCisg
ICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5zZXRCb2R5UHJlc3N1cmUgPSBmdW5j
dGlvbiAoaW1wb3N0b3IsIHByZXNzdXJlKSB7CisgICAgICAgIGlmIChpbXBvc3Rvci5zb2Z0KSB7
CisgICAgICAgICAgICBpZiAoaW1wb3N0b3IudHlwZSA9PT0gX1BoeXNpY3NfcGh5c2ljc0ltcG9z
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNpY3NJbXBvc3RvciJdLlNvZnRi
b2R5SW1wb3N0b3IpIHsKKyAgICAgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5nZXRf
bV9jZmcoKS5zZXRfa1BSKHByZXNzdXJlKTsKKyAgICAgICAgICAgICAgICBpbXBvc3Rvci5fcGx1
Z2luRGF0YS5wcmVzc3VyZSA9IHByZXNzdXJlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuZ2V0X21fY2ZnKCku
c2V0X2tQUigwKTsKKyAgICAgICAgICAgICAgICBpbXBvc3Rvci5fcGx1Z2luRGF0YS5wcmVzc3Vy
ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2VyIl0u
V2FybigiUHJlc3N1cmUgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhIHNvZnRib2R5Iik7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgc3RpZmZuZXNzIG9mIHRoZSBpbXBv
c3RvcgorICAgICAqIEBwYXJhbSBpbXBvc3RvciBpbXBvc3RvciB0byBnZXQgc3RpZmZuZXNzIGZy
b20KKyAgICAgKiBAcmV0dXJucyBwcmVzc3VyZSB2YWx1ZQorICAgICAqLworICAgIEFtbW9KU1Bs
dWdpbi5wcm90b3R5cGUuZ2V0Qm9keVN0aWZmbmVzcyA9IGZ1bmN0aW9uIChpbXBvc3Rvcikgewor
ICAgICAgICBpZiAoIWltcG9zdG9yLnNvZnQpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCJTdGlmZm5lc3MgaXMg
bm90IGEgcHJvcGVydHkgb2YgYSByaWdpZCBib2R5Iik7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW1wb3N0b3IuX3BsdWdpbkRhdGEuc3RpZmZuZXNz
IHx8IDA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHN0aWZmbmVzcyBvZiB0aGUgaW1w
b3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3IgdG8gc2V0IHN0aWZmbmVzcyBv
bgorICAgICAqIEBwYXJhbSBzdGlmZm5lc3Mgc3RpZmZuZXNzIHZhbHVlIGZyb20gMCB0byAxCisg
ICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5zZXRCb2R5U3RpZmZuZXNzID0gZnVu
Y3Rpb24gKGltcG9zdG9yLCBzdGlmZm5lc3MpIHsKKyAgICAgICAgaWYgKGltcG9zdG9yLnNvZnQp
IHsKKyAgICAgICAgICAgIHN0aWZmbmVzcyA9IHN0aWZmbmVzcyA8IDAgPyAwIDogc3RpZmZuZXNz
OworICAgICAgICAgICAgc3RpZmZuZXNzID0gc3RpZmZuZXNzID4gMSA/IDEgOiBzdGlmZm5lc3M7
CisgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5nZXRfbV9tYXRlcmlhbHMoKS5hdCgw
KS5zZXRfbV9rTFNUKHN0aWZmbmVzcyk7CisgICAgICAgICAgICBpbXBvc3Rvci5fcGx1Z2luRGF0
YS5zdGlmZm5lc3MgPSBzdGlmZm5lc3M7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTG9nZ2Vy
Il0uV2FybigiU3RpZmZuZXNzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIGEgcmlnaWQgYm9keSIpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHZlbG9jaXR5SXRlcmF0aW9u
cyBvZiB0aGUgaW1wb3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3IgdG8gZ2V0
IHZlbG9jaXR5IGl0ZXJhdGlvbnMgZnJvbQorICAgICAqIEByZXR1cm5zIHZlbG9jaXR5SXRlcmF0
aW9ucyB2YWx1ZQorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2V0Qm9keVZl
bG9jaXR5SXRlcmF0aW9ucyA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBpZiAoIWlt
cG9zdG9yLnNvZnQpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCJWZWxvY2l0eSBpdGVyYXRpb25zIGlzIG5vdCBh
IHByb3BlcnR5IG9mIGEgcmlnaWQgYm9keSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGltcG9zdG9yLl9wbHVnaW5EYXRhLnZlbG9jaXR5SXRlcmF0
aW9ucyB8fCAwOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB2ZWxvY2l0eUl0ZXJhdGlv
bnMgb2YgdGhlIGltcG9zdG9yCisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdG9yIHRvIHNl
dCB2ZWxvY2l0eSBpdGVyYXRpb25zIG9uCisgICAgICogQHBhcmFtIHZlbG9jaXR5SXRlcmF0aW9u
cyB2ZWxvY2l0eUl0ZXJhdGlvbnMgdmFsdWUKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJv
dG90eXBlLnNldEJvZHlWZWxvY2l0eUl0ZXJhdGlvbnMgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIHZl
bG9jaXR5SXRlcmF0aW9ucykgeworICAgICAgICBpZiAoaW1wb3N0b3Iuc29mdCkgeworICAgICAg
ICAgICAgdmVsb2NpdHlJdGVyYXRpb25zID0gdmVsb2NpdHlJdGVyYXRpb25zIDwgMCA/IDAgOiB2
ZWxvY2l0eUl0ZXJhdGlvbnM7CisgICAgICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5nZXRf
bV9jZmcoKS5zZXRfdml0ZXJhdGlvbnModmVsb2NpdHlJdGVyYXRpb25zKTsKKyAgICAgICAgICAg
IGltcG9zdG9yLl9wbHVnaW5EYXRhLnZlbG9jaXR5SXRlcmF0aW9ucyA9IHZlbG9jaXR5SXRlcmF0
aW9uczsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCJWZWxvY2l0eSBp
dGVyYXRpb25zIGNhbm5vdCBiZSBhcHBsaWVkIHRvIGEgcmlnaWQgYm9keSIpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHBvc2l0aW9uSXRlcmF0aW9ucyBvZiB0aGUg
aW1wb3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3IgdG8gZ2V0IHBvc2l0aW9u
IGl0ZXJhdGlvbnMgZnJvbQorICAgICAqIEByZXR1cm5zIHBvc2l0aW9uSXRlcmF0aW9ucyB2YWx1
ZQorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2V0Qm9keVBvc2l0aW9uSXRl
cmF0aW9ucyA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBpZiAoIWltcG9zdG9yLnNv
ZnQpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJMb2dnZXIiXS5XYXJuKCJQb3NpdGlvbiBpdGVyYXRpb25zIGlzIG5vdCBhIHByb3BlcnR5
IG9mIGEgcmlnaWQgYm9keSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGltcG9zdG9yLl9wbHVnaW5EYXRhLnBvc2l0aW9uSXRlcmF0aW9ucyB8fCAw
OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyBwb3NpdGlvbkl0ZXJhdGlvbnMgb2YgdGhl
IGltcG9zdG9yCisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdG9yIHRvIHNldCBwb3NpdGlv
biBvbgorICAgICAqIEBwYXJhbSBwb3NpdGlvbkl0ZXJhdGlvbnMgcG9zaXRpb25JdGVyYXRpb25z
IHZhbHVlCisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5zZXRCb2R5UG9zaXRp
b25JdGVyYXRpb25zID0gZnVuY3Rpb24gKGltcG9zdG9yLCBwb3NpdGlvbkl0ZXJhdGlvbnMpIHsK
KyAgICAgICAgaWYgKGltcG9zdG9yLnNvZnQpIHsKKyAgICAgICAgICAgIHBvc2l0aW9uSXRlcmF0
aW9ucyA9IHBvc2l0aW9uSXRlcmF0aW9ucyA8IDAgPyAwIDogcG9zaXRpb25JdGVyYXRpb25zOwor
ICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuZ2V0X21fY2ZnKCkuc2V0X3BpdGVyYXRp
b25zKHBvc2l0aW9uSXRlcmF0aW9ucyk7CisgICAgICAgICAgICBpbXBvc3Rvci5fcGx1Z2luRGF0
YS5wb3NpdGlvbkl0ZXJhdGlvbnMgPSBwb3NpdGlvbkl0ZXJhdGlvbnM7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siTG9nZ2VyIl0uV2FybigiUG9zaXRpb24gaXRlcmF0aW9ucyBjYW5ub3QgYmUg
YXBwbGllZCB0byBhIHJpZ2lkIGJvZHkiKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisg
ICAgKiBBcHBlbmQgYW4gYW5jaG9yIHRvIGEgY2xvdGggb2JqZWN0CisgICAgKiBAcGFyYW0gaW1w
b3N0b3IgaXMgdGhlIGNsb3RoIGltcG9zdG9yIHRvIGFkZCBhbmNob3IgdG8KKyAgICAqIEBwYXJh
bSBvdGhlckltcG9zdG9yIGlzIHRoZSByaWdpZCBpbXBvc3RvciB0byBhbmNob3IgdG8KKyAgICAq
IEBwYXJhbSB3aWR0aCByYXRpbyBhY3Jvc3Mgd2lkdGggZnJvbSAwIHRvIDEKKyAgICAqIEBwYXJh
bSBoZWlnaHQgcmF0aW8gdXAgaGVpZ2h0IGZyb20gMCB0byAxCisgICAgKiBAcGFyYW0gaW5mbHVl
bmNlIHRoZSBlbGFzdGljaXR5IGJldHdlZW4gY2xvdGggaW1wb3N0b3IgYW5kIGFuY2hvciBmcm9t
IDAsIHZlcnkgc3RyZXRjaHkgdG8gMSwgbGl0dGxlIHN0cmVjaAorICAgICogQHBhcmFtIG5vQ29s
bGlzaW9uQmV0d2VlbkxpbmtlZEJvZGllcyB3aGVuIHRydWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNv
ZnQgaW1wb3N0b3IgYW5kIGFuY2hvciBhcmUgaWdub3JlZDsgZGVmYXVsdCBmYWxzZQorICAgICov
CisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5hcHBlbmRBbmNob3IgPSBmdW5jdGlvbiAoaW1w
b3N0b3IsIG90aGVySW1wb3N0b3IsIHdpZHRoLCBoZWlnaHQsIGluZmx1ZW5jZSwgbm9Db2xsaXNp
b25CZXR3ZWVuTGlua2VkQm9kaWVzKSB7CisgICAgICAgIGlmIChpbmZsdWVuY2UgPT09IHZvaWQg
MCkgeyBpbmZsdWVuY2UgPSAxOyB9CisgICAgICAgIGlmIChub0NvbGxpc2lvbkJldHdlZW5MaW5r
ZWRCb2RpZXMgPT09IHZvaWQgMCkgeyBub0NvbGxpc2lvbkJldHdlZW5MaW5rZWRCb2RpZXMgPSBm
YWxzZTsgfQorICAgICAgICB2YXIgc2VncyA9IGltcG9zdG9yLnNlZ21lbnRzOworICAgICAgICB2
YXIgbmJBY3Jvc3MgPSBNYXRoLnJvdW5kKChzZWdzIC0gMSkgKiB3aWR0aCk7CisgICAgICAgIHZh
ciBuYlVwID0gTWF0aC5yb3VuZCgoc2VncyAtIDEpICogaGVpZ2h0KTsKKyAgICAgICAgdmFyIG5i
RG93biA9IHNlZ3MgLSAxIC0gbmJVcDsKKyAgICAgICAgdmFyIG5vZGUgPSBuYkFjcm9zcyArIHNl
Z3MgKiBuYkRvd247CisgICAgICAgIGltcG9zdG9yLnBoeXNpY3NCb2R5LmFwcGVuZEFuY2hvcihu
b2RlLCBvdGhlckltcG9zdG9yLnBoeXNpY3NCb2R5LCBub0NvbGxpc2lvbkJldHdlZW5MaW5rZWRC
b2RpZXMsIGluZmx1ZW5jZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBcHBlbmQgYW4gaG9v
ayB0byBhIHJvcGUgb2JqZWN0CisgICAgICogQHBhcmFtIGltcG9zdG9yIGlzIHRoZSByb3BlIGlt
cG9zdG9yIHRvIGFkZCBob29rIHRvCisgICAgICogQHBhcmFtIG90aGVySW1wb3N0b3IgaXMgdGhl
IHJpZ2lkIGltcG9zdG9yIHRvIGhvb2sgdG8KKyAgICAgKiBAcGFyYW0gbGVuZ3RoIHJhdGlvIGFs
b25nIHRoZSByb3BlIGZyb20gMCB0byAxCisgICAgICogQHBhcmFtIGluZmx1ZW5jZSB0aGUgZWxh
c3RpY2l0eSBiZXR3ZWVuIHNvZnQgaW1wb3N0b3IgYW5kIGFuY2hvciBmcm9tIDAsIHZlcnkgc3Ry
ZXRjaHkgdG8gMSwgbGl0dGxlIHN0cmVjaAorICAgICAqIEBwYXJhbSBub0NvbGxpc2lvbkJldHdl
ZW5MaW5rZWRCb2RpZXMgd2hlbiB0cnVlIGNvbGxpc2lvbnMgYmV0d2VlbiBzb2Z0IGltcG9zdG9y
IGFuZCBhbmNob3IgYXJlIGlnbm9yZWQ7IGRlZmF1bHQgZmFsc2UKKyAgICAgKi8KKyAgICBBbW1v
SlNQbHVnaW4ucHJvdG90eXBlLmFwcGVuZEhvb2sgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIG90aGVy
SW1wb3N0b3IsIGxlbmd0aCwgaW5mbHVlbmNlLCBub0NvbGxpc2lvbkJldHdlZW5MaW5rZWRCb2Rp
ZXMpIHsKKyAgICAgICAgaWYgKGluZmx1ZW5jZSA9PT0gdm9pZCAwKSB7IGluZmx1ZW5jZSA9IDE7
IH0KKyAgICAgICAgaWYgKG5vQ29sbGlzaW9uQmV0d2VlbkxpbmtlZEJvZGllcyA9PT0gdm9pZCAw
KSB7IG5vQ29sbGlzaW9uQmV0d2VlbkxpbmtlZEJvZGllcyA9IGZhbHNlOyB9CisgICAgICAgIHZh
ciBub2RlID0gTWF0aC5yb3VuZChpbXBvc3Rvci5zZWdtZW50cyAqIGxlbmd0aCk7CisgICAgICAg
IGltcG9zdG9yLnBoeXNpY3NCb2R5LmFwcGVuZEFuY2hvcihub2RlLCBvdGhlckltcG9zdG9yLnBo
eXNpY3NCb2R5LCBub0NvbGxpc2lvbkJldHdlZW5MaW5rZWRCb2RpZXMsIGluZmx1ZW5jZSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTbGVlcHMgdGhlIHBoeXNpY3MgYm9keSBhbmQgc3RvcHMg
aXQgZnJvbSBiZWluZyBhY3RpdmUKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1wb3N0b3IgdG8g
c2xlZXAKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLnNsZWVwQm9keSA9IGZ1
bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siTG9nZ2VyIl0uV2Fybigic2xlZXBCb2R5IGlzIG5vdCBjdXJyZW50bHkg
c3VwcG9ydGVkIGJ5IHRoZSBBbW1vIHBoeXNpY3MgcGx1Z2luIik7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBBY3RpdmF0ZXMgdGhlIHBoeXNpY3MgYm9keQorICAgICAqIEBwYXJhbSBpbXBvc3Rv
ciBpbXBvc3RvciB0byBhY3RpdmF0ZQorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5wcm90b3R5
cGUud2FrZVVwQm9keSA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBpbXBvc3Rvci5w
aHlzaWNzQm9keS5hY3RpdmF0ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0
aGUgZGlzdGFuY2UgcGFyYW1ldGVycyBvZiB0aGUgam9pbnQKKyAgICAgKiBAcGFyYW0gam9pbnQg
am9pbnQgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIG1heERpc3RhbmNlIG1heGltdW0gZGlzdGFu
Y2Ugb2YgdGhlIGpvaW50CisgICAgICogQHBhcmFtIG1pbkRpc3RhbmNlIG1pbmltdW0gZGlzdGFu
Y2Ugb2YgdGhlIGpvaW50CisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS51cGRh
dGVEaXN0YW5jZUpvaW50ID0gZnVuY3Rpb24gKGpvaW50LCBtYXhEaXN0YW5jZSwgbWluRGlzdGFu
Y2UpIHsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkxvZ2dlciJdLldhcm4oInVwZGF0ZURpc3RhbmNlSm9pbnQgaXMgbm90IGN1cnJlbnRseSBzdXBw
b3J0ZWQgYnkgdGhlIEFtbW8gcGh5c2ljcyBwbHVnaW4iKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFNldHMgYSBtb3RvciBvbiB0aGUgam9pbnQKKyAgICAgKiBAcGFyYW0gam9pbnQgam9pbnQg
dG8gc2V0IG1vdG9yIG9uCisgICAgICogQHBhcmFtIHNwZWVkIHNwZWVkIG9mIHRoZSBtb3Rvcgor
ICAgICAqIEBwYXJhbSBtYXhGb3JjZSBtYXhpbXVtIGZvcmNlIG9mIHRoZSBtb3RvcgorICAgICAq
IEBwYXJhbSBtb3RvckluZGV4IGluZGV4IG9mIHRoZSBtb3RvcgorICAgICAqLworICAgIEFtbW9K
U1BsdWdpbi5wcm90b3R5cGUuc2V0TW90b3IgPSBmdW5jdGlvbiAoam9pbnQsIHNwZWVkLCBtYXhG
b3JjZSwgbW90b3JJbmRleCkgeworICAgICAgICBqb2ludC5waHlzaWNzSm9pbnQuZW5hYmxlQW5n
dWxhck1vdG9yKHRydWUsIHNwZWVkLCBtYXhGb3JjZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBTZXRzIHRoZSBtb3RvcnMgbGltaXQKKyAgICAgKiBAcGFyYW0gam9pbnQgam9pbnQgdG8gc2V0
IGxpbWl0IG9uCisgICAgICogQHBhcmFtIHVwcGVyTGltaXQgdXBwZXIgbGltaXQKKyAgICAgKiBA
cGFyYW0gbG93ZXJMaW1pdCBsb3dlciBsaW1pdAorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5w
cm90b3R5cGUuc2V0TGltaXQgPSBmdW5jdGlvbiAoam9pbnQsIHVwcGVyTGltaXQsIGxvd2VyTGlt
aXQpIHsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IkxvZ2dlciJdLldhcm4oInNldExpbWl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRo
ZSBBbW1vIHBoeXNpY3MgcGx1Z2luIik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTeW5jcyB0
aGUgcG9zaXRpb24gYW5kIHJvdGF0aW9uIG9mIGEgbWVzaCB3aXRoIHRoZSBpbXBvc3RvcgorICAg
ICAqIEBwYXJhbSBtZXNoIG1lc2ggdG8gc3luYworICAgICAqIEBwYXJhbSBpbXBvc3RvciBpbXBv
c3RvciB0byB1cGRhdGUgdGhlIG1lc2ggd2l0aAorICAgICAqLworICAgIEFtbW9KU1BsdWdpbi5w
cm90b3R5cGUuc3luY01lc2hXaXRoSW1wb3N0b3IgPSBmdW5jdGlvbiAobWVzaCwgaW1wb3N0b3Ip
IHsKKyAgICAgICAgdmFyIGJvZHkgPSBpbXBvc3Rvci5waHlzaWNzQm9keTsKKyAgICAgICAgYm9k
eS5nZXRNb3Rpb25TdGF0ZSgpLmdldFdvcmxkVHJhbnNmb3JtKHRoaXMuX3RtcEFtbW9UcmFuc2Zv
cm0pOworICAgICAgICBtZXNoLnBvc2l0aW9uLnggPSB0aGlzLl90bXBBbW1vVHJhbnNmb3JtLmdl
dE9yaWdpbigpLngoKTsKKyAgICAgICAgbWVzaC5wb3NpdGlvbi55ID0gdGhpcy5fdG1wQW1tb1Ry
YW5zZm9ybS5nZXRPcmlnaW4oKS55KCk7CisgICAgICAgIG1lc2gucG9zaXRpb24ueiA9IHRoaXMu
X3RtcEFtbW9UcmFuc2Zvcm0uZ2V0T3JpZ2luKCkueigpOworICAgICAgICBpZiAobWVzaC5yb3Rh
dGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJuaW9uLngg
PSB0aGlzLl90bXBBbW1vVHJhbnNmb3JtLmdldFJvdGF0aW9uKCkueCgpOworICAgICAgICAgICAg
bWVzaC5yb3RhdGlvblF1YXRlcm5pb24ueSA9IHRoaXMuX3RtcEFtbW9UcmFuc2Zvcm0uZ2V0Um90
YXRpb24oKS55KCk7CisgICAgICAgICAgICBtZXNoLnJvdGF0aW9uUXVhdGVybmlvbi56ID0gdGhp
cy5fdG1wQW1tb1RyYW5zZm9ybS5nZXRSb3RhdGlvbigpLnooKTsKKyAgICAgICAgICAgIG1lc2gu
cm90YXRpb25RdWF0ZXJuaW9uLncgPSB0aGlzLl90bXBBbW1vVHJhbnNmb3JtLmdldFJvdGF0aW9u
KCkudygpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByYWRp
dXMgb2YgdGhlIGltcG9zdG9yCisgICAgICogQHBhcmFtIGltcG9zdG9yIGltcG9zdG9yIHRvIGdl
dCByYWRpdXMgZnJvbQorICAgICAqIEByZXR1cm5zIHRoZSByYWRpdXMKKyAgICAgKi8KKyAgICBB
bW1vSlNQbHVnaW4ucHJvdG90eXBlLmdldFJhZGl1cyA9IGZ1bmN0aW9uIChpbXBvc3Rvcikgewor
ICAgICAgICB2YXIgZXhudGVuZCA9IGltcG9zdG9yLmdldE9iamVjdEV4dGVuZFNpemUoKTsKKyAg
ICAgICAgcmV0dXJuIGV4bnRlbmQueCAvIDI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRz
IHRoZSBib3ggc2l6ZSBvZiB0aGUgaW1wb3N0b3IKKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgaW1w
b3N0b3IgdG8gZ2V0IGJveCBzaXplIGZyb20KKyAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1
bHRpbmcgYm94IHNpemUKKyAgICAgKi8KKyAgICBBbW1vSlNQbHVnaW4ucHJvdG90eXBlLmdldEJv
eFNpemVUb1JlZiA9IGZ1bmN0aW9uIChpbXBvc3RvciwgcmVzdWx0KSB7CisgICAgICAgIHZhciBl
eG50ZW5kID0gaW1wb3N0b3IuZ2V0T2JqZWN0RXh0ZW5kU2l6ZSgpOworICAgICAgICByZXN1bHQu
eCA9IGV4bnRlbmQueDsKKyAgICAgICAgcmVzdWx0LnkgPSBleG50ZW5kLnk7CisgICAgICAgIHJl
c3VsdC56ID0gZXhudGVuZC56OworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2Yg
dGhlIGltcG9zdG9yCisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5kaXNwb3Nl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBEaXNwb3NlIG9mIHdvcmxkCisgICAgICAgIEFt
bW8uZGVzdHJveSh0aGlzLndvcmxkKTsKKyAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuX3NvbHZl
cik7CisgICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLl9vdmVybGFwcGluZ1BhaXJDYWNoZSk7Cisg
ICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLl9kaXNwYXRjaGVyKTsKKyAgICAgICAgQW1tby5kZXN0
cm95KHRoaXMuX2NvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOworICAgICAgICAvLyBEaXNwb3NlIG9m
IHRtcCB2YXJpYWJsZXMKKyAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuX3RtcEFtbW9WZWN0b3JB
KTsKKyAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuX3RtcEFtbW9WZWN0b3JCKTsKKyAgICAgICAg
QW1tby5kZXN0cm95KHRoaXMuX3RtcEFtbW9WZWN0b3JDKTsKKyAgICAgICAgQW1tby5kZXN0cm95
KHRoaXMuX3RtcEFtbW9UcmFuc2Zvcm0pOworICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5fdG1w
QW1tb1F1YXRlcm5pb24pOworICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5fdG1wQW1tb0NvbmNy
ZXRlQ29udGFjdFJlc3VsdENhbGxiYWNrKTsKKyAgICAgICAgdGhpcy53b3JsZCA9IG51bGw7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBEb2VzIGEgcmF5Y2FzdCBpbiB0aGUgcGh5c2ljcyB3b3Js
ZAorICAgICAqIEBwYXJhbSBmcm9tIHdoZW4gc2hvdWxkIHRoZSByYXkgc3RhcnQ/CisgICAgICog
QHBhcmFtIHRvIHdoZW4gc2hvdWxkIHRoZSByYXkgZW5kPworICAgICAqIEByZXR1cm5zIFBoeXNp
Y3NSYXljYXN0UmVzdWx0CisgICAgICovCisgICAgQW1tb0pTUGx1Z2luLnByb3RvdHlwZS5yYXlj
YXN0ID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7CisgICAgICAgIHRoaXMuX3RtcEFtbW9WZWN0b3JS
Q0EgPSBuZXcgdGhpcy5ianNBTU1PLmJ0VmVjdG9yMyhmcm9tLngsIGZyb20ueSwgZnJvbS56KTsK
KyAgICAgICAgdGhpcy5fdG1wQW1tb1ZlY3RvclJDQiA9IG5ldyB0aGlzLmJqc0FNTU8uYnRWZWN0
b3IzKHRvLngsIHRvLnksIHRvLnopOworICAgICAgICB2YXIgcmF5Q2FsbGJhY2sgPSBuZXcgdGhp
cy5ianNBTU1PLkNsb3Nlc3RSYXlSZXN1bHRDYWxsYmFjayh0aGlzLl90bXBBbW1vVmVjdG9yUkNB
LCB0aGlzLl90bXBBbW1vVmVjdG9yUkNCKTsKKyAgICAgICAgdGhpcy53b3JsZC5yYXlUZXN0KHRo
aXMuX3RtcEFtbW9WZWN0b3JSQ0EsIHRoaXMuX3RtcEFtbW9WZWN0b3JSQ0IsIHJheUNhbGxiYWNr
KTsKKyAgICAgICAgdGhpcy5fcmF5Y2FzdFJlc3VsdC5yZXNldChmcm9tLCB0byk7CisgICAgICAg
IGlmIChyYXlDYWxsYmFjay5oYXNIaXQoKSkgeworICAgICAgICAgICAgLy8gVE9ETzogZG8gd2Ug
d2FudC9uZWVkIHRoZSBib2R5PyBJZiBzbywgc2V0IGFsbCB0aGUgZGF0YQorICAgICAgICAgICAg
LyoKKyAgICAgICAgICAgIHZhciByaWdpZEJvZHkgPSB0aGlzLmJqc0FNTU8uYnRSaWdpZEJvZHku
cHJvdG90eXBlLnVwY2FzdCgKKyAgICAgICAgICAgICAgICByYXlDYWxsYmFjay5nZXRfbV9jb2xs
aXNpb25PYmplY3QoKQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHZhciBib2R5ID0ge307
CisgICAgICAgICAgICAqLworICAgICAgICAgICAgdGhpcy5fcmF5Y2FzdFJlc3VsdC5zZXRIaXRE
YXRhKHsKKyAgICAgICAgICAgICAgICB4OiByYXlDYWxsYmFjay5nZXRfbV9oaXROb3JtYWxXb3Js
ZCgpLngoKSwKKyAgICAgICAgICAgICAgICB5OiByYXlDYWxsYmFjay5nZXRfbV9oaXROb3JtYWxX
b3JsZCgpLnkoKSwKKyAgICAgICAgICAgICAgICB6OiByYXlDYWxsYmFjay5nZXRfbV9oaXROb3Jt
YWxXb3JsZCgpLnooKSwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICB4OiByYXlD
YWxsYmFjay5nZXRfbV9oaXRQb2ludFdvcmxkKCkueCgpLAorICAgICAgICAgICAgICAgIHk6IHJh
eUNhbGxiYWNrLmdldF9tX2hpdFBvaW50V29ybGQoKS55KCksCisgICAgICAgICAgICAgICAgejog
cmF5Q2FsbGJhY2suZ2V0X21faGl0UG9pbnRXb3JsZCgpLnooKSwKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgdGhpcy5fcmF5Y2FzdFJlc3VsdC5jYWxjdWxhdGVIaXREaXN0YW5jZSgpOwor
ICAgICAgICB9CisgICAgICAgIEFtbW8uZGVzdHJveShyYXlDYWxsYmFjayk7CisgICAgICAgIEFt
bW8uZGVzdHJveSh0aGlzLl90bXBBbW1vVmVjdG9yUkNBKTsKKyAgICAgICAgQW1tby5kZXN0cm95
KHRoaXMuX3RtcEFtbW9WZWN0b3JSQ0IpOworICAgICAgICByZXR1cm4gdGhpcy5fcmF5Y2FzdFJl
c3VsdDsKKyAgICB9OworICAgIEFtbW9KU1BsdWdpbi5ESVNBQkxFX0NPTExJU0lPTl9GTEFHID0g
NDsKKyAgICBBbW1vSlNQbHVnaW4uS0lORU1BVElDX0ZMQUcgPSAyOworICAgIEFtbW9KU1BsdWdp
bi5ESVNBQkxFX0RFQUNUSVZBVElPTl9GTEFHID0gNDsKKyAgICByZXR1cm4gQW1tb0pTUGx1Z2lu
OworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QaHlzaWNzL1BsdWdpbnMvY2Fu
bm9uSlNQbHVnaW4udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vUGh5c2ljcy9QbHVnaW5zL2Nhbm5vbkpTUGx1Z2luLnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogQ2Fubm9uSlNQbHVnaW4gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ2Fubm9uSlNQbHVnaW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIENhbm5v
bkpTUGx1Z2luOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4u
L01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfUGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL1BoeXNpY3MvcGh5
c2ljc0ltcG9zdG9yICovICIuL1BoeXNpY3MvcGh5c2ljc0ltcG9zdG9yLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1BoeXNpY3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9QaHlzaWNzL3BoeXNp
Y3NKb2ludCAqLyAiLi9QaHlzaWNzL3BoeXNpY3NKb2ludC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9QaHlzaWNzX3BoeXNpY3NFbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL1BoeXNpY3MvcGh5c2ljc0VuZ2lu
ZSAqLyAiLi9QaHlzaWNzL3BoeXNpY3NFbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcGh5c2ljc1JheWNhc3RSZXN1bHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3BoeXNpY3NSYXljYXN0UmVzdWx0ICovICIuL1Bo
eXNpY3MvcGh5c2ljc1JheWNhc3RSZXN1bHQudHMiKTsKKworCisKKworCisKKworLyoqIEBoaWRk
ZW4gKi8KK3ZhciBDYW5ub25KU1BsdWdpbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICBmdW5jdGlvbiBDYW5ub25KU1BsdWdpbihfdXNlRGVsdGFGb3JXb3JsZFN0ZXAsIGl0ZXJh
dGlvbnMsIGNhbm5vbkluamVjdGlvbikgeworICAgICAgICBpZiAoX3VzZURlbHRhRm9yV29ybGRT
dGVwID09PSB2b2lkIDApIHsgX3VzZURlbHRhRm9yV29ybGRTdGVwID0gdHJ1ZTsgfQorICAgICAg
ICBpZiAoaXRlcmF0aW9ucyA9PT0gdm9pZCAwKSB7IGl0ZXJhdGlvbnMgPSAxMDsgfQorICAgICAg
ICBpZiAoY2Fubm9uSW5qZWN0aW9uID09PSB2b2lkIDApIHsgY2Fubm9uSW5qZWN0aW9uID0gQ0FO
Tk9OOyB9CisgICAgICAgIHRoaXMuX3VzZURlbHRhRm9yV29ybGRTdGVwID0gX3VzZURlbHRhRm9y
V29ybGRTdGVwOworICAgICAgICB0aGlzLm5hbWUgPSAiQ2Fubm9uSlNQbHVnaW4iOworICAgICAg
ICB0aGlzLl9waHlzaWNzTWF0ZXJpYWxzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX2Zp
eGVkVGltZVN0ZXAgPSAxIC8gNjA7CisgICAgICAgIHRoaXMuX3BoeXNpY3NCb2R5c1RvUmVtb3Zl
QWZ0ZXJTdGVwID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuX21pbnVzOTBYID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9u
Il0oLTAuNzA3MTA2NzgxMTg2NTQ3NSwgMCwgMCwgMC43MDcxMDY3ODExODY1NDc1KTsKKyAgICAg
ICAgdGhpcy5fcGx1czkwWCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdKDAuNzA3MTA2NzgxMTg2NTQ3NSwgMCwgMCwgMC43
MDcxMDY3ODExODY1NDc1KTsKKyAgICAgICAgdGhpcy5fdG1wUG9zaXRpb24gPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsK
KyAgICAgICAgdGhpcy5fdG1wRGVsdGFQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlz
Ll90bXBVbml0eVJvdGF0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJRdWF0ZXJuaW9uIl0oKTsKKyAgICAgICAgdGhpcy5CSlNDQU5OT04g
PSBjYW5ub25JbmplY3Rpb247CisgICAgICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCgpKSB7Cisg
ICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTG9n
Z2VyIl0uRXJyb3IoIkNhbm5vbkpTIGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBtYWtlIHN1cmUg
eW91IGluY2x1ZGVkIHRoZSBqcyBmaWxlLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX2V4dGVuZE5hbWVzcGFjZSgpOworICAgICAgICB0aGlzLndvcmxk
ID0gbmV3IHRoaXMuQkpTQ0FOTk9OLldvcmxkKCk7CisgICAgICAgIHRoaXMud29ybGQuYnJvYWRw
aGFzZSA9IG5ldyB0aGlzLkJKU0NBTk5PTi5OYWl2ZUJyb2FkcGhhc2UoKTsKKyAgICAgICAgdGhp
cy53b3JsZC5zb2x2ZXIuaXRlcmF0aW9ucyA9IGl0ZXJhdGlvbnM7CisgICAgICAgIHRoaXMuX2Nh
bm5vblJheWNhc3RSZXN1bHQgPSBuZXcgdGhpcy5CSlNDQU5OT04uUmF5Y2FzdFJlc3VsdCgpOwor
ICAgICAgICB0aGlzLl9yYXljYXN0UmVzdWx0ID0gbmV3IF9waHlzaWNzUmF5Y2FzdFJlc3VsdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQaHlzaWNzUmF5Y2FzdFJlc3VsdCJdKCk7Cisg
ICAgfQorICAgIENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5zZXRHcmF2aXR5ID0gZnVuY3Rpb24g
KGdyYXZpdHkpIHsKKyAgICAgICAgdGhpcy53b3JsZC5ncmF2aXR5LmNvcHkoZ3Jhdml0eSk7Cisg
ICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5cGUuc2V0VGltZVN0ZXAgPSBmdW5jdGlv
biAodGltZVN0ZXApIHsKKyAgICAgICAgdGhpcy5fZml4ZWRUaW1lU3RlcCA9IHRpbWVTdGVwOwor
ICAgIH07CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLmdldFRpbWVTdGVwID0gZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fZml4ZWRUaW1lU3RlcDsKKyAgICB9OworICAg
IENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5leGVjdXRlU3RlcCA9IGZ1bmN0aW9uIChkZWx0YSkg
eworICAgICAgICB0aGlzLndvcmxkLnN0ZXAodGhpcy5fZml4ZWRUaW1lU3RlcCwgdGhpcy5fdXNl
RGVsdGFGb3JXb3JsZFN0ZXAgPyBkZWx0YSA6IDAsIDMpOworICAgICAgICB0aGlzLl9yZW1vdmVN
YXJrZWRQaHlzaWNzQm9kaWVzRnJvbVdvcmxkKCk7CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdp
bi5wcm90b3R5cGUuX3JlbW92ZU1hcmtlZFBoeXNpY3NCb2RpZXNGcm9tV29ybGQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmICh0aGlzLl9waHlz
aWNzQm9keXNUb1JlbW92ZUFmdGVyU3RlcC5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB0aGlz
Ll9waHlzaWNzQm9keXNUb1JlbW92ZUFmdGVyU3RlcC5mb3JFYWNoKGZ1bmN0aW9uIChwaHlzaWNz
Qm9keSkgeworICAgICAgICAgICAgICAgIF90aGlzLndvcmxkLnJlbW92ZShwaHlzaWNzQm9keSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMuX3BoeXNpY3NCb2R5c1RvUmVtb3Zl
QWZ0ZXJTdGVwID0gW107CisgICAgICAgIH0KKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnBy
b3RvdHlwZS5hcHBseUltcHVsc2UgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIGZvcmNlLCBjb250YWN0
UG9pbnQpIHsKKyAgICAgICAgdmFyIHdvcmxkUG9pbnQgPSBuZXcgdGhpcy5CSlNDQU5OT04uVmVj
Myhjb250YWN0UG9pbnQueCwgY29udGFjdFBvaW50LnksIGNvbnRhY3RQb2ludC56KTsKKyAgICAg
ICAgdmFyIGltcHVsc2UgPSBuZXcgdGhpcy5CSlNDQU5OT04uVmVjMyhmb3JjZS54LCBmb3JjZS55
LCBmb3JjZS56KTsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuYXBwbHlJbXB1bHNlKGlt
cHVsc2UsIHdvcmxkUG9pbnQpOworICAgIH07CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBl
LmFwcGx5Rm9yY2UgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIGZvcmNlLCBjb250YWN0UG9pbnQpIHsK
KyAgICAgICAgdmFyIHdvcmxkUG9pbnQgPSBuZXcgdGhpcy5CSlNDQU5OT04uVmVjMyhjb250YWN0
UG9pbnQueCwgY29udGFjdFBvaW50LnksIGNvbnRhY3RQb2ludC56KTsKKyAgICAgICAgdmFyIGlt
cHVsc2UgPSBuZXcgdGhpcy5CSlNDQU5OT04uVmVjMyhmb3JjZS54LCBmb3JjZS55LCBmb3JjZS56
KTsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuYXBwbHlGb3JjZShpbXB1bHNlLCB3b3Js
ZFBvaW50KTsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5nZW5lcmF0ZVBo
eXNpY3NCb2R5ID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIC8vIFdoZW4gY2FsbGlu
ZyBmb3JjZVVwZGF0ZSBnZW5lcmF0ZVBoeXNpY3NCb2R5IGlzIGNhbGxlZCBhZ2FpbiwgZW5zdXJl
IHRoYXQgdGhlIHVwZGF0ZWQgYm9keSBkb2VzIG5vdCBpbnN0YW50bHkgY29sbGlkZSB3aXRoIHJl
bW92ZWQgYm9keQorICAgICAgICB0aGlzLl9yZW1vdmVNYXJrZWRQaHlzaWNzQm9kaWVzRnJvbVdv
cmxkKCk7CisgICAgICAgIC8vcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcC4gRG9lcyB0aGlzIGlt
cG9zdG9yIGhhcyBhIHBhcmVudCBpbXBvc3Rvcj8KKyAgICAgICAgaWYgKGltcG9zdG9yLnBhcmVu
dCkgeworICAgICAgICAgICAgaWYgKGltcG9zdG9yLnBoeXNpY3NCb2R5KSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5yZW1vdmVQaHlzaWNzQm9keShpbXBvc3Rvcik7CisgICAgICAgICAgICAgICAg
Ly9UT0RPIGlzIHRoYXQgbmVlZGVkPworICAgICAgICAgICAgICAgIGltcG9zdG9yLmZvcmNlVXBk
YXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgLy9zaG91bGQgYSBuZXcgYm9keSBiZSBjcmVhdGVkIGZvciB0aGlzIGltcG9zdG9yPwor
ICAgICAgICBpZiAoaW1wb3N0b3IuaXNCb2R5SW5pdFJlcXVpcmVkKCkpIHsKKyAgICAgICAgICAg
IHZhciBzaGFwZSA9IHRoaXMuX2NyZWF0ZVNoYXBlKGltcG9zdG9yKTsKKyAgICAgICAgICAgIC8v
dW5yZWdpc3RlciBldmVudHMsIGlmIGJvZHkgaXMgYmVpbmcgY2hhbmdlZAorICAgICAgICAgICAg
dmFyIG9sZEJvZHkgPSBpbXBvc3Rvci5waHlzaWNzQm9keTsKKyAgICAgICAgICAgIGlmIChvbGRC
b2R5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQaHlzaWNzQm9keShpbXBvc3Rvcik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL2NyZWF0ZSB0aGUgYm9keSBhbmQgbWF0ZXJp
YWwKKyAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHRoaXMuX2FkZE1hdGVyaWFsKCJtYXQtIiAr
IGltcG9zdG9yLnVuaXF1ZUlkLCBpbXBvc3Rvci5nZXRQYXJhbSgiZnJpY3Rpb24iKSwgaW1wb3N0
b3IuZ2V0UGFyYW0oInJlc3RpdHV0aW9uIikpOworICAgICAgICAgICAgdmFyIGJvZHlDcmVhdGlv
bk9iamVjdCA9IHsKKyAgICAgICAgICAgICAgICBtYXNzOiBpbXBvc3Rvci5nZXRQYXJhbSgibWFz
cyIpLAorICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbAorICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIC8vIEEgc2ltcGxlIGV4dGVuZCwgaW4gY2FzZSBuYXRpdmUgb3B0aW9ucyB3
ZXJlIHVzZWQuCisgICAgICAgICAgICB2YXIgbmF0aXZlT3B0aW9ucyA9IGltcG9zdG9yLmdldFBh
cmFtKCJuYXRpdmVPcHRpb25zIik7CisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbmF0aXZl
T3B0aW9ucykgeworICAgICAgICAgICAgICAgIGlmIChuYXRpdmVPcHRpb25zLmhhc093blByb3Bl
cnR5KGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9keUNyZWF0aW9uT2JqZWN0W2tleV0g
PSBuYXRpdmVPcHRpb25zW2tleV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkgPSBuZXcgdGhpcy5CSlNDQU5OT04uQm9k
eShib2R5Q3JlYXRpb25PYmplY3QpOworICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHku
YWRkRXZlbnRMaXN0ZW5lcigiY29sbGlkZSIsIGltcG9zdG9yLm9uQ29sbGlkZSk7CisgICAgICAg
ICAgICB0aGlzLndvcmxkLmFkZEV2ZW50TGlzdGVuZXIoInByZVN0ZXAiLCBpbXBvc3Rvci5iZWZv
cmVTdGVwKTsKKyAgICAgICAgICAgIHRoaXMud29ybGQuYWRkRXZlbnRMaXN0ZW5lcigicG9zdFN0
ZXAiLCBpbXBvc3Rvci5hZnRlclN0ZXApOworICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0Jv
ZHkuYWRkU2hhcGUoc2hhcGUpOworICAgICAgICAgICAgdGhpcy53b3JsZC5hZGQoaW1wb3N0b3Iu
cGh5c2ljc0JvZHkpOworICAgICAgICAgICAgLy90cnkgdG8ga2VlcCB0aGUgYm9keSBtb3Zpbmcg
aW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiBieSB0YWtpbmcgb2xkIHByb3BlcnRpZXMuCisgICAgICAg
ICAgICAvL1Nob3VsZCBiZSB0ZXN0ZWQhCisgICAgICAgICAgICBpZiAob2xkQm9keSkgeworICAg
ICAgICAgICAgICAgIFsnZm9yY2UnLCAndG9ycXVlJywgJ3ZlbG9jaXR5JywgJ2FuZ3VsYXJWZWxv
Y2l0eSddLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7CisgICAgICAgICAgICAgICAgICAgIGlt
cG9zdG9yLnBoeXNpY3NCb2R5W3BhcmFtXS5jb3B5KG9sZEJvZHlbcGFyYW1dKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NDaGls
ZE1lc2hlcyhpbXBvc3Rvcik7CisgICAgICAgIH0KKyAgICAgICAgLy9ub3cgdXBkYXRlIHRoZSBi
b2R5J3MgdHJhbnNmb3JtYXRpb24KKyAgICAgICAgdGhpcy5fdXBkYXRlUGh5c2ljc0JvZHlUcmFu
c2Zvcm1hdGlvbihpbXBvc3Rvcik7CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5
cGUuX3Byb2Nlc3NDaGlsZE1lc2hlcyA9IGZ1bmN0aW9uIChtYWluSW1wb3N0b3IpIHsKKyAgICAg
ICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIG1lc2hDaGlsZHJlbiA9IG1haW5JbXBv
c3Rvci5vYmplY3QuZ2V0Q2hpbGRNZXNoZXMgPyBtYWluSW1wb3N0b3Iub2JqZWN0LmdldENoaWxk
TWVzaGVzKHRydWUpIDogW107CisgICAgICAgIHZhciBjdXJyZW50Um90YXRpb24gPSBtYWluSW1w
b3N0b3Iub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbjsKKyAgICAgICAgaWYgKG1lc2hDaGlsZHJl
bi5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciBwcm9jZXNzTWVzaCA9IGZ1bmN0aW9uIChsb2Nh
bFBvc2l0aW9uLCBtZXNoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Um90YXRpb24g
fHwgIW1lc2gucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkSW1wb3N0b3Ig
PSBtZXNoLmdldFBoeXNpY3NJbXBvc3RvcigpOworICAgICAgICAgICAgICAgIGlmIChjaGlsZElt
cG9zdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjaGlsZEltcG9zdG9y
LnBhcmVudDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPT0gbWFpbkltcG9zdG9y
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcFBvc2l0aW9uID0gbWVzaC5nZXRBYnNv
bHV0ZVBvc2l0aW9uKCkuc3VidHJhY3QobWFpbkltcG9zdG9yLm9iamVjdC5nZXRBYnNvbHV0ZVBv
c2l0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2FsUm90YXRpb24gPSBt
ZXNoLnJvdGF0aW9uUXVhdGVybmlvbi5tdWx0aXBseShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siUXVhdGVybmlvbiJdLkludmVyc2UoY3VycmVudFJvdGF0
aW9uKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbXBvc3Rvci5waHlzaWNz
Qm9keSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZVBoeXNpY3NC
b2R5KGNoaWxkSW1wb3N0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW1w
b3N0b3IucGh5c2ljc0JvZHkgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGRJbXBvc3Rvci5wYXJlbnQgPSBtYWluSW1wb3N0b3I7
CisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEltcG9zdG9yLnJlc2V0VXBkYXRlRmxhZ3Mo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1haW5JbXBvc3Rvci5waHlzaWNzQm9keS5hZGRT
aGFwZShfdGhpcy5fY3JlYXRlU2hhcGUoY2hpbGRJbXBvc3RvciksIG5ldyBfdGhpcy5CSlNDQU5O
T04uVmVjMyhwUG9zaXRpb24ueCwgcFBvc2l0aW9uLnksIHBQb3NpdGlvbi56KSwgbmV3IF90aGlz
LkJKU0NBTk5PTi5RdWF0ZXJuaW9uKGxvY2FsUm90YXRpb24ueCwgbG9jYWxSb3RhdGlvbi55LCBs
b2NhbFJvdGF0aW9uLnosIGxvY2FsUm90YXRpb24udykpOworICAgICAgICAgICAgICAgICAgICAg
ICAgLy9BZGQgdGhlIG1hc3Mgb2YgdGhlIGNoaWxkcmVuLgorICAgICAgICAgICAgICAgICAgICAg
ICAgbWFpbkltcG9zdG9yLnBoeXNpY3NCb2R5Lm1hc3MgKz0gY2hpbGRJbXBvc3Rvci5nZXRQYXJh
bSgibWFzcyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGN1cnJlbnRSb3RhdGlvbi5tdWx0aXBseUluUGxhY2UobWVzaC5yb3RhdGlv
blF1YXRlcm5pb24pOworICAgICAgICAgICAgICAgIG1lc2guZ2V0Q2hpbGRNZXNoZXModHJ1ZSku
ZmlsdGVyKGZ1bmN0aW9uIChtKSB7IHJldHVybiAhIW0ucGh5c2ljc0ltcG9zdG9yOyB9KS5mb3JF
YWNoKHByb2Nlc3NNZXNoLmJpbmQoX3RoaXMsIG1lc2guZ2V0QWJzb2x1dGVQb3NpdGlvbigpKSk7
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgbWVzaENoaWxkcmVuLmZpbHRlcihmdW5jdGlv
biAobSkgeyByZXR1cm4gISFtLnBoeXNpY3NJbXBvc3RvcjsgfSkuZm9yRWFjaChwcm9jZXNzTWVz
aC5iaW5kKHRoaXMsIG1haW5JbXBvc3Rvci5vYmplY3QuZ2V0QWJzb2x1dGVQb3NpdGlvbigpKSk7
CisgICAgICAgIH0KKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5yZW1vdmVQ
aHlzaWNzQm9keSA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBpbXBvc3Rvci5waHlz
aWNzQm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJjb2xsaWRlIiwgaW1wb3N0b3Iub25Db2xsaWRl
KTsKKyAgICAgICAgdGhpcy53b3JsZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcmVTdGVwIiwgaW1w
b3N0b3IuYmVmb3JlU3RlcCk7CisgICAgICAgIHRoaXMud29ybGQucmVtb3ZlRXZlbnRMaXN0ZW5l
cigicG9zdFN0ZXAiLCBpbXBvc3Rvci5hZnRlclN0ZXApOworICAgICAgICAvLyBPbmx5IHJlbW92
ZSB0aGUgcGh5c2ljcyBib2R5IGFmdGVyIHRoZSBwaHlzaWNzIHN0ZXAgdG8gYXZvaWQgZGlzcnVw
dGluZyBjYW5ub24ncyBpbnRlcm5hbCBzdGF0ZQorICAgICAgICBpZiAodGhpcy5fcGh5c2ljc0Jv
ZHlzVG9SZW1vdmVBZnRlclN0ZXAuaW5kZXhPZihpbXBvc3Rvci5waHlzaWNzQm9keSkgPT09IC0x
KSB7CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzQm9keXNUb1JlbW92ZUFmdGVyU3RlcC5wdXNo
KGltcG9zdG9yLnBoeXNpY3NCb2R5KTsKKyAgICAgICAgfQorICAgIH07CisgICAgQ2Fubm9uSlNQ
bHVnaW4ucHJvdG90eXBlLmdlbmVyYXRlSm9pbnQgPSBmdW5jdGlvbiAoaW1wb3N0b3JKb2ludCkg
eworICAgICAgICB2YXIgbWFpbkJvZHkgPSBpbXBvc3RvckpvaW50Lm1haW5JbXBvc3Rvci5waHlz
aWNzQm9keTsKKyAgICAgICAgdmFyIGNvbm5lY3RlZEJvZHkgPSBpbXBvc3RvckpvaW50LmNvbm5l
Y3RlZEltcG9zdG9yLnBoeXNpY3NCb2R5OworICAgICAgICBpZiAoIW1haW5Cb2R5IHx8ICFjb25u
ZWN0ZWRCb2R5KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFy
IGNvbnN0cmFpbnQ7CisgICAgICAgIHZhciBqb2ludERhdGEgPSBpbXBvc3RvckpvaW50LmpvaW50
LmpvaW50RGF0YTsKKyAgICAgICAgLy9UT0RPIC0gaHR0cHM6Ly9naXRodWIuY29tL3NjaHRlcHBl
L3RoaXMuQkpTQ0FOTk9OLmpzL2Jsb2IvZ2gtcGFnZXMvZGVtb3MvY29sbGlzaW9uRmlsdGVyLmh0
bWwKKyAgICAgICAgdmFyIGNvbnN0cmFpbnREYXRhID0geworICAgICAgICAgICAgcGl2b3RBOiBq
b2ludERhdGEubWFpblBpdm90ID8gbmV3IHRoaXMuQkpTQ0FOTk9OLlZlYzMoKS5jb3B5KGpvaW50
RGF0YS5tYWluUGl2b3QpIDogbnVsbCwKKyAgICAgICAgICAgIHBpdm90Qjogam9pbnREYXRhLmNv
bm5lY3RlZFBpdm90ID8gbmV3IHRoaXMuQkpTQ0FOTk9OLlZlYzMoKS5jb3B5KGpvaW50RGF0YS5j
b25uZWN0ZWRQaXZvdCkgOiBudWxsLAorICAgICAgICAgICAgYXhpc0E6IGpvaW50RGF0YS5tYWlu
QXhpcyA/IG5ldyB0aGlzLkJKU0NBTk5PTi5WZWMzKCkuY29weShqb2ludERhdGEubWFpbkF4aXMp
IDogbnVsbCwKKyAgICAgICAgICAgIGF4aXNCOiBqb2ludERhdGEuY29ubmVjdGVkQXhpcyA/IG5l
dyB0aGlzLkJKU0NBTk5PTi5WZWMzKCkuY29weShqb2ludERhdGEuY29ubmVjdGVkQXhpcykgOiBu
dWxsLAorICAgICAgICAgICAgbWF4Rm9yY2U6IGpvaW50RGF0YS5uYXRpdmVQYXJhbXMubWF4Rm9y
Y2UsCisgICAgICAgICAgICBjb2xsaWRlQ29ubmVjdGVkOiAhIWpvaW50RGF0YS5jb2xsaXNpb24K
KyAgICAgICAgfTsKKyAgICAgICAgc3dpdGNoIChpbXBvc3RvckpvaW50LmpvaW50LnR5cGUpIHsK
KyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X19bIlBoeXNpY3NKb2ludCJdLkhpbmdlSm9pbnQ6CisgICAgICAgICAgICBjYXNl
IF9QaHlzaWNzX3BoeXNpY3NKb2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQaHlz
aWNzSm9pbnQiXS5IaW5nZTJKb2ludDoKKyAgICAgICAgICAgICAgICBjb25zdHJhaW50ID0gbmV3
IHRoaXMuQkpTQ0FOTk9OLkhpbmdlQ29uc3RyYWludChtYWluQm9keSwgY29ubmVjdGVkQm9keSwg
Y29uc3RyYWludERhdGEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBfUGh5c2ljc19waHlzaWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUGh5
c2ljc0pvaW50Il0uRGlzdGFuY2VKb2ludDoKKyAgICAgICAgICAgICAgICBjb25zdHJhaW50ID0g
bmV3IHRoaXMuQkpTQ0FOTk9OLkRpc3RhbmNlQ29uc3RyYWludChtYWluQm9keSwgY29ubmVjdGVk
Qm9keSwgam9pbnREYXRhLm1heERpc3RhbmNlIHx8IDIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzRfX1siUGh5c2ljc0pvaW50Il0uU3ByaW5nSm9pbnQ6CisgICAgICAgICAgICAg
ICAgdmFyIHNwcmluZ0RhdGEgPSBqb2ludERhdGE7CisgICAgICAgICAgICAgICAgY29uc3RyYWlu
dCA9IG5ldyB0aGlzLkJKU0NBTk5PTi5TcHJpbmcobWFpbkJvZHksIGNvbm5lY3RlZEJvZHksIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdExlbmd0aDogc3ByaW5nRGF0YS5sZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgIHN0aWZmbmVzczogc3ByaW5nRGF0YS5zdGlmZm5lc3MsCisgICAgICAg
ICAgICAgICAgICAgIGRhbXBpbmc6IHNwcmluZ0RhdGEuZGFtcGluZywKKyAgICAgICAgICAgICAg
ICAgICAgbG9jYWxBbmNob3JBOiBjb25zdHJhaW50RGF0YS5waXZvdEEsCisgICAgICAgICAgICAg
ICAgICAgIGxvY2FsQW5jaG9yQjogY29uc3RyYWludERhdGEucGl2b3RCCisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNz
X3BoeXNpY3NKb2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQaHlzaWNzSm9pbnQi
XS5Mb2NrSm9pbnQ6CisgICAgICAgICAgICAgICAgY29uc3RyYWludCA9IG5ldyB0aGlzLkJKU0NB
Tk5PTi5Mb2NrQ29uc3RyYWludChtYWluQm9keSwgY29ubmVjdGVkQm9keSwgY29uc3RyYWludERh
dGEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19w
aHlzaWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUGh5c2ljc0pvaW50Il0u
UG9pbnRUb1BvaW50Sm9pbnQ6CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NKb2lu
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQaHlzaWNzSm9pbnQiXS5CYWxsQW5kU29j
a2V0Sm9pbnQ6CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGNvbnN0cmFp
bnQgPSBuZXcgdGhpcy5CSlNDQU5OT04uUG9pbnRUb1BvaW50Q29uc3RyYWludChtYWluQm9keSwg
Y29uc3RyYWludERhdGEucGl2b3RBLCBjb25uZWN0ZWRCb2R5LCBjb25zdHJhaW50RGF0YS5waXZv
dEIsIGNvbnN0cmFpbnREYXRhLm1heEZvcmNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAvL3NldCB0aGUgY29sbGlkZUNvbm5lY3RlZCBmbGFnIGFmdGVyIHRo
ZSBjcmVhdGlvbiwgc2luY2UgRGlzdGFuY2VKb2ludCBpZ25vcmVzIGl0LgorICAgICAgICBjb25z
dHJhaW50LmNvbGxpZGVDb25uZWN0ZWQgPSAhIWpvaW50RGF0YS5jb2xsaXNpb247CisgICAgICAg
IGltcG9zdG9ySm9pbnQuam9pbnQucGh5c2ljc0pvaW50ID0gY29uc3RyYWludDsKKyAgICAgICAg
Ly9kb24ndCBhZGQgc3ByaW5nIGFzIGNvbnN0cmFpbnQsIGFzIGl0IGlzIG5vdCBvbmUuCisgICAg
ICAgIGlmIChpbXBvc3RvckpvaW50LmpvaW50LnR5cGUgIT09IF9QaHlzaWNzX3BoeXNpY3NKb2lu
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQaHlzaWNzSm9pbnQiXS5TcHJpbmdKb2lu
dCkgeworICAgICAgICAgICAgdGhpcy53b3JsZC5hZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW1wb3N0b3JKb2ludC5qb2lu
dC5qb2ludERhdGEuZm9yY2VBcHBsaWNhdGlvbkNhbGxiYWNrID0gaW1wb3N0b3JKb2ludC5qb2lu
dC5qb2ludERhdGEuZm9yY2VBcHBsaWNhdGlvbkNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdHJhaW50LmFwcGx5Rm9yY2UoKTsKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBpbXBvc3RvckpvaW50Lm1haW5JbXBvc3Rvci5yZWdpc3RlckFmdGVyUGh5c2lj
c1N0ZXAoaW1wb3N0b3JKb2ludC5qb2ludC5qb2ludERhdGEuZm9yY2VBcHBsaWNhdGlvbkNhbGxi
YWNrKTsKKyAgICAgICAgfQorICAgIH07CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLnJl
bW92ZUpvaW50ID0gZnVuY3Rpb24gKGltcG9zdG9ySm9pbnQpIHsKKyAgICAgICAgaWYgKGltcG9z
dG9ySm9pbnQuam9pbnQudHlwZSAhPT0gX1BoeXNpY3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlBoeXNpY3NKb2ludCJdLlNwcmluZ0pvaW50KSB7CisgICAgICAg
ICAgICB0aGlzLndvcmxkLnJlbW92ZUNvbnN0cmFpbnQoaW1wb3N0b3JKb2ludC5qb2ludC5waHlz
aWNzSm9pbnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW1wb3N0
b3JKb2ludC5tYWluSW1wb3N0b3IudW5yZWdpc3RlckFmdGVyUGh5c2ljc1N0ZXAoaW1wb3N0b3JK
b2ludC5qb2ludC5qb2ludERhdGEuZm9yY2VBcHBsaWNhdGlvbkNhbGxiYWNrKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLl9hZGRNYXRlcmlhbCA9IGZ1
bmN0aW9uIChuYW1lLCBmcmljdGlvbiwgcmVzdGl0dXRpb24pIHsKKyAgICAgICAgdmFyIGluZGV4
OworICAgICAgICB2YXIgbWF0OworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0aGlz
Ll9waHlzaWNzTWF0ZXJpYWxzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgbWF0ID0g
dGhpcy5fcGh5c2ljc01hdGVyaWFsc1tpbmRleF07CisgICAgICAgICAgICBpZiAobWF0LmZyaWN0
aW9uID09PSBmcmljdGlvbiAmJiBtYXQucmVzdGl0dXRpb24gPT09IHJlc3RpdHV0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB2YXIgY3VycmVudE1hdCA9IG5ldyB0aGlzLkJKU0NBTk5PTi5NYXRlcmlhbChuYW1lKTsK
KyAgICAgICAgY3VycmVudE1hdC5mcmljdGlvbiA9IGZyaWN0aW9uOworICAgICAgICBjdXJyZW50
TWF0LnJlc3RpdHV0aW9uID0gcmVzdGl0dXRpb247CisgICAgICAgIHRoaXMuX3BoeXNpY3NNYXRl
cmlhbHMucHVzaChjdXJyZW50TWF0KTsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRNYXQ7CisgICAg
fTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5cGUuX2NoZWNrV2l0aEVwc2lsb24gPSBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgX1BoeXNpY3NfcGh5c2ljc0Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJQaHlzaWNzRW5naW5lIl0uRXBzaWxv
biA/IF9QaHlzaWNzX3BoeXNpY3NFbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
UGh5c2ljc0VuZ2luZSJdLkVwc2lsb24gOiB2YWx1ZTsKKyAgICB9OworICAgIENhbm5vbkpTUGx1
Z2luLnByb3RvdHlwZS5fY3JlYXRlU2hhcGUgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAg
ICAgdmFyIG9iamVjdCA9IGltcG9zdG9yLm9iamVjdDsKKyAgICAgICAgdmFyIHJldHVyblZhbHVl
OworICAgICAgICB2YXIgZXh0ZW5kU2l6ZSA9IGltcG9zdG9yLmdldE9iamVjdEV4dGVuZFNpemUo
KTsKKyAgICAgICAgc3dpdGNoIChpbXBvc3Rvci50eXBlKSB7CisgICAgICAgICAgICBjYXNlIF9Q
aHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaHlz
aWNzSW1wb3N0b3IiXS5TcGhlcmVJbXBvc3RvcjoKKyAgICAgICAgICAgICAgICB2YXIgcmFkaXVz
WCA9IGV4dGVuZFNpemUueDsKKyAgICAgICAgICAgICAgICB2YXIgcmFkaXVzWSA9IGV4dGVuZFNp
emUueTsKKyAgICAgICAgICAgICAgICB2YXIgcmFkaXVzWiA9IGV4dGVuZFNpemUuejsKKyAgICAg
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyB0aGlzLkJKU0NBTk5PTi5TcGhlcmUoTWF0aC5t
YXgodGhpcy5fY2hlY2tXaXRoRXBzaWxvbihyYWRpdXNYKSwgdGhpcy5fY2hlY2tXaXRoRXBzaWxv
bihyYWRpdXNZKSwgdGhpcy5fY2hlY2tXaXRoRXBzaWxvbihyYWRpdXNaKSkgLyAyKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vVE1QIGFsc28gZm9yIGN5bGluZGVyIC0g
VE9ETyBDYW5ub24gc3VwcG9ydHMgY3lsaW5kZXIgbmF0aXZlbHkuCisgICAgICAgICAgICBjYXNl
IF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQ
aHlzaWNzSW1wb3N0b3IiXS5DeWxpbmRlckltcG9zdG9yOgorICAgICAgICAgICAgICAgIHZhciBu
YXRpdmVQYXJhbXMgPSBpbXBvc3Rvci5nZXRQYXJhbSgibmF0aXZlT3B0aW9ucyIpOworICAgICAg
ICAgICAgICAgIGlmICghbmF0aXZlUGFyYW1zKSB7CisgICAgICAgICAgICAgICAgICAgIG5hdGl2
ZVBhcmFtcyA9IHt9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgcmFk
aXVzVG9wID0gbmF0aXZlUGFyYW1zLnJhZGl1c1RvcCAhPT0gdW5kZWZpbmVkID8gbmF0aXZlUGFy
YW1zLnJhZGl1c1RvcCA6IHRoaXMuX2NoZWNrV2l0aEVwc2lsb24oZXh0ZW5kU2l6ZS54KSAvIDI7
CisgICAgICAgICAgICAgICAgdmFyIHJhZGl1c0JvdHRvbSA9IG5hdGl2ZVBhcmFtcy5yYWRpdXNC
b3R0b20gIT09IHVuZGVmaW5lZCA/IG5hdGl2ZVBhcmFtcy5yYWRpdXNCb3R0b20gOiB0aGlzLl9j
aGVja1dpdGhFcHNpbG9uKGV4dGVuZFNpemUueCkgLyAyOworICAgICAgICAgICAgICAgIHZhciBo
ZWlnaHQgPSBuYXRpdmVQYXJhbXMuaGVpZ2h0ICE9PSB1bmRlZmluZWQgPyBuYXRpdmVQYXJhbXMu
aGVpZ2h0IDogdGhpcy5fY2hlY2tXaXRoRXBzaWxvbihleHRlbmRTaXplLnkpOworICAgICAgICAg
ICAgICAgIHZhciBudW1TZWdtZW50cyA9IG5hdGl2ZVBhcmFtcy5udW1TZWdtZW50cyAhPT0gdW5k
ZWZpbmVkID8gbmF0aXZlUGFyYW1zLm51bVNlZ21lbnRzIDogMTY7CisgICAgICAgICAgICAgICAg
cmV0dXJuVmFsdWUgPSBuZXcgdGhpcy5CSlNDQU5OT04uQ3lsaW5kZXIocmFkaXVzVG9wLCByYWRp
dXNCb3R0b20sIGhlaWdodCwgbnVtU2VnbWVudHMpOworICAgICAgICAgICAgICAgIC8vIFJvdGF0
ZSA5MCBkZWdyZWVzIGFzIHRoaXMgc2hhcGUgaXMgaG9yaXpvbnRhbCBpbiBjYW5ub24KKyAgICAg
ICAgICAgICAgICB2YXIgcXVhdCA9IG5ldyB0aGlzLkJKU0NBTk5PTi5RdWF0ZXJuaW9uKCk7Cisg
ICAgICAgICAgICAgICAgcXVhdC5zZXRGcm9tQXhpc0FuZ2xlKG5ldyB0aGlzLkJKU0NBTk5PTi5W
ZWMzKDEsIDAsIDApLCAtTWF0aC5QSSAvIDIpOworICAgICAgICAgICAgICAgIHZhciB0cmFuc2xh
dGlvbiA9IG5ldyB0aGlzLkJKU0NBTk5PTi5WZWMzKDAsIDAsIDApOworICAgICAgICAgICAgICAg
IHJldHVyblZhbHVlLnRyYW5zZm9ybUFsbFBvaW50cyh0cmFuc2xhdGlvbiwgcXVhdCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NJbXBv
c3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaHlzaWNzSW1wb3N0b3IiXS5Cb3hJ
bXBvc3RvcjoKKyAgICAgICAgICAgICAgICB2YXIgYm94ID0gZXh0ZW5kU2l6ZS5zY2FsZSgwLjUp
OworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gbmV3IHRoaXMuQkpTQ0FOTk9OLkJveChu
ZXcgdGhpcy5CSlNDQU5OT04uVmVjMyh0aGlzLl9jaGVja1dpdGhFcHNpbG9uKGJveC54KSwgdGhp
cy5fY2hlY2tXaXRoRXBzaWxvbihib3gueSksIHRoaXMuX2NoZWNrV2l0aEVwc2lsb24oYm94Lnop
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3Bo
eXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaHlzaWNzSW1wb3N0
b3IiXS5QbGFuZUltcG9zdG9yOgorICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMb2dnZXIiXS5XYXJuKCJBdHRlbnRpb24sIFBsYW5lSW1w
b3N0ZXIgbWlnaHQgbm90IGJlaGF2ZSBhcyB5b3UgZXhwZWN0LiBDb25zaWRlciB1c2luZyBCb3hJ
bXBvc3RlciBpbnN0ZWFkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBuZXcgdGhp
cy5CSlNDQU5OT04uUGxhbmUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlBoeXNpY3NJbXBvc3RvciJdLk1lc2hJbXBvc3RvcjoKKyAgICAgICAgICAgICAgICAvLyBz
aG91bGQgdHJhbnNmb3JtIHRoZSB2ZXJ0ZXggZGF0YSB0byB3b3JsZCBjb29yZGluYXRlcyEhCisg
ICAgICAgICAgICAgICAgdmFyIHJhd1ZlcnRzID0gb2JqZWN0LmdldFZlcnRpY2VzRGF0YSA/IG9i
amVjdC5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKSA6IFtdOworICAgICAgICAgICAg
ICAgIHZhciByYXdGYWNlcyA9IG9iamVjdC5nZXRJbmRpY2VzID8gb2JqZWN0LmdldEluZGljZXMo
KSA6IFtdOworICAgICAgICAgICAgICAgIGlmICghcmF3VmVydHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBnZXQg
b25seSBzY2FsZSEgc28gdGhlIG9iamVjdCBjb3VsZCB0cmFuc2Zvcm0gY29ycmVjdGx5LgorICAg
ICAgICAgICAgICAgIHZhciBvbGRQb3NpdGlvbiA9IG9iamVjdC5wb3NpdGlvbi5jbG9uZSgpOwor
ICAgICAgICAgICAgICAgIHZhciBvbGRSb3RhdGlvbiA9IG9iamVjdC5yb3RhdGlvbiAmJiBvYmpl
Y3Qucm90YXRpb24uY2xvbmUoKTsKKyAgICAgICAgICAgICAgICB2YXIgb2xkUXVhdGVybmlvbiA9
IG9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24gJiYgb2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbi5j
bG9uZSgpOworICAgICAgICAgICAgICAgIG9iamVjdC5wb3NpdGlvbi5jb3B5RnJvbUZsb2F0cygw
LCAwLCAwKTsKKyAgICAgICAgICAgICAgICBvYmplY3Qucm90YXRpb24gJiYgb2JqZWN0LnJvdGF0
aW9uLmNvcHlGcm9tRmxvYXRzKDAsIDAsIDApOworICAgICAgICAgICAgICAgIG9iamVjdC5yb3Rh
dGlvblF1YXRlcm5pb24gJiYgb2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbShpbXBv
c3Rvci5nZXRQYXJlbnRzUm90YXRpb24oKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LnJvdGF0
aW9uUXVhdGVybmlvbiAmJiBvYmplY3QucGFyZW50ICYmIG9iamVjdC5yb3RhdGlvblF1YXRlcm5p
b24uY29uanVnYXRlSW5QbGFjZSgpOworICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm0gPSBv
YmplY3QuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAgICAgICAgICAgIC8vIGNvbnZl
cnQgcmF3VmVydHMgdG8gb2JqZWN0IHNwYWNlCisgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBu
ZXcgQXJyYXkoKTsKKyAgICAgICAgICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgICAgICAgICAg
Zm9yIChpbmRleCA9IDA7IGluZGV4IDwgcmF3VmVydHMubGVuZ3RoOyBpbmRleCArPSAzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0ZXMoX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5Gcm9tQXJyYXkocmF3
VmVydHMsIGluZGV4KSwgdHJhbnNmb3JtKS50b0FycmF5KHRlbXAsIGluZGV4KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkxvZ2dlciJdLldhcm4oIk1lc2hJbXBvc3RvciBvbmx5IGNvbGxpZGVzIGFn
YWluc3Qgc3BoZXJlcy4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyB0aGlz
LkJKU0NBTk5PTi5UcmltZXNoKHRlbXAsIHJhd0ZhY2VzKTsKKyAgICAgICAgICAgICAgICAvL25v
dyBzZXQgYmFjayB0aGUgdHJhbnNmb3JtYXRpb24hCisgICAgICAgICAgICAgICAgb2JqZWN0LnBv
c2l0aW9uLmNvcHlGcm9tKG9sZFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBvbGRSb3RhdGlv
biAmJiBvYmplY3Qucm90YXRpb24gJiYgb2JqZWN0LnJvdGF0aW9uLmNvcHlGcm9tKG9sZFJvdGF0
aW9uKTsKKyAgICAgICAgICAgICAgICBvbGRRdWF0ZXJuaW9uICYmIG9iamVjdC5yb3RhdGlvblF1
YXRlcm5pb24gJiYgb2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbShvbGRRdWF0ZXJu
aW9uKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3Nf
cGh5c2ljc0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBoeXNpY3NJbXBv
c3RvciJdLkhlaWdodG1hcEltcG9zdG9yOgorICAgICAgICAgICAgICAgIHZhciBvbGRQb3NpdGlv
bjIgPSBvYmplY3QucG9zaXRpb24uY2xvbmUoKTsKKyAgICAgICAgICAgICAgICB2YXIgb2xkUm90
YXRpb24yID0gb2JqZWN0LnJvdGF0aW9uICYmIG9iamVjdC5yb3RhdGlvbi5jbG9uZSgpOworICAg
ICAgICAgICAgICAgIHZhciBvbGRRdWF0ZXJuaW9uMiA9IG9iamVjdC5yb3RhdGlvblF1YXRlcm5p
b24gJiYgb2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbi5jbG9uZSgpOworICAgICAgICAgICAgICAg
IG9iamVjdC5wb3NpdGlvbi5jb3B5RnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICBvYmplY3Qucm90YXRpb24gJiYgb2JqZWN0LnJvdGF0aW9uLmNvcHlGcm9tRmxvYXRzKDAsIDAs
IDApOworICAgICAgICAgICAgICAgIG9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24gJiYgb2JqZWN0
LnJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbShpbXBvc3Rvci5nZXRQYXJlbnRzUm90YXRpb24o
KSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbiAmJiBvYmplY3Qu
cGFyZW50ICYmIG9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24uY29uanVnYXRlSW5QbGFjZSgpOwor
ICAgICAgICAgICAgICAgIG9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24gJiYgb2JqZWN0LnJvdGF0
aW9uUXVhdGVybmlvbi5tdWx0aXBseUluUGxhY2UodGhpcy5fbWludXM5MFgpOworICAgICAgICAg
ICAgICAgIHJldHVyblZhbHVlID0gdGhpcy5fY3JlYXRlSGVpZ2h0bWFwKG9iamVjdCk7CisgICAg
ICAgICAgICAgICAgb2JqZWN0LnBvc2l0aW9uLmNvcHlGcm9tKG9sZFBvc2l0aW9uMik7CisgICAg
ICAgICAgICAgICAgb2xkUm90YXRpb24yICYmIG9iamVjdC5yb3RhdGlvbiAmJiBvYmplY3Qucm90
YXRpb24uY29weUZyb20ob2xkUm90YXRpb24yKTsKKyAgICAgICAgICAgICAgICBvbGRRdWF0ZXJu
aW9uMiAmJiBvYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uICYmIG9iamVjdC5yb3RhdGlvblF1YXRl
cm5pb24uY29weUZyb20ob2xkUXVhdGVybmlvbjIpOworICAgICAgICAgICAgICAgIG9iamVjdC5j
b21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJQaHlzaWNzSW1wb3N0b3IiXS5QYXJ0aWNsZUltcG9zdG9yOgorICAgICAgICAgICAg
ICAgIHJldHVyblZhbHVlID0gbmV3IHRoaXMuQkpTQ0FOTk9OLlBhcnRpY2xlKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NJbXBvc3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaHlzaWNzSW1wb3N0b3IiXS5Ob0ltcG9z
dG9yOgorICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gbmV3IHRoaXMuQkpTQ0FOTk9OLkJv
eChuZXcgdGhpcy5CSlNDQU5OT04uVmVjMygwLCAwLCAwKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH07CisgICAg
Q2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLl9jcmVhdGVIZWlnaHRtYXAgPSBmdW5jdGlvbiAob2Jq
ZWN0LCBwb2ludERlcHRoKSB7CisgICAgICAgIHZhciBwb3MgPSAob2JqZWN0LmdldFZlcnRpY2Vz
RGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhC
dWZmZXIiXS5Qb3NpdGlvbktpbmQpKTsKKyAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG9iamVjdC5j
b21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgIC8vIGNvbnZlcnQgcmF3VmVydHMgdG8g
b2JqZWN0IHNwYWNlCisgICAgICAgIHZhciB0ZW1wID0gbmV3IEFycmF5KCk7CisgICAgICAgIHZh
ciBpbmRleDsKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcG9zLmxlbmd0aDsgaW5k
ZXggKz0gMykgeworICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlcyhfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLkZyb21BcnJh
eShwb3MsIGluZGV4KSwgdHJhbnNmb3JtKS50b0FycmF5KHRlbXAsIGluZGV4KTsKKyAgICAgICAg
fQorICAgICAgICBwb3MgPSB0ZW1wOworICAgICAgICB2YXIgbWF0cml4ID0gbmV3IEFycmF5KCk7
CisgICAgICAgIC8vRm9yIG5vdyBwb2ludERlcHRoIHdpbGwgbm90IGJlIHVzZWQgYW5kIHdpbGwg
YmUgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorICAgICAgICAvL0Z1dHVyZSByZWZlcmVuY2Ug
LSB0cnkgYW5kIGZpbmQgdGhlIGJlc3QgcGxhY2UgdG8gYWRkIGEgcmVmZXJlbmNlIHRvIHRoZSBw
b2ludERlcHRoIHZhcmlhYmxlLgorICAgICAgICB2YXIgYXJyYXlTaXplID0gcG9pbnREZXB0aCB8
fCB+fihNYXRoLnNxcnQocG9zLmxlbmd0aCAvIDMpIC0gMSk7CisgICAgICAgIHZhciBib3VuZGlu
Z0luZm8gPSBvYmplY3QuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgIHZhciBkaW0gPSBNYXRo
Lm1pbihib3VuZGluZ0luZm8uYm91bmRpbmdCb3guZXh0ZW5kU2l6ZVdvcmxkLngsIGJvdW5kaW5n
SW5mby5ib3VuZGluZ0JveC5leHRlbmRTaXplV29ybGQueSk7CisgICAgICAgIHZhciBtaW5ZID0g
Ym91bmRpbmdJbmZvLmJvdW5kaW5nQm94LmV4dGVuZFNpemVXb3JsZC56OworICAgICAgICB2YXIg
ZWxlbWVudFNpemUgPSBkaW0gKiAyIC8gYXJyYXlTaXplOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHBvcy5sZW5ndGg7IGkgPSBpICsgMykgeworICAgICAgICAgICAgdmFyIHggPSBNYXRo
LnJvdW5kKChwb3NbaSArIDBdKSAvIGVsZW1lbnRTaXplICsgYXJyYXlTaXplIC8gMik7CisgICAg
ICAgICAgICB2YXIgeiA9IE1hdGgucm91bmQoKChwb3NbaSArIDFdKSAvIGVsZW1lbnRTaXplIC0g
YXJyYXlTaXplIC8gMikgKiAtMSk7CisgICAgICAgICAgICB2YXIgeSA9IC1wb3NbaSArIDJdICsg
bWluWTsKKyAgICAgICAgICAgIGlmICghbWF0cml4W3hdKSB7CisgICAgICAgICAgICAgICAgbWF0
cml4W3hdID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1hdHJpeFt4XVt6
XSkgeworICAgICAgICAgICAgICAgIG1hdHJpeFt4XVt6XSA9IHk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtYXRyaXhbeF1bel0gPSBNYXRoLm1heCh5LCBtYXRyaXhbeF1bel0pOworICAg
ICAgICB9CisgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDw9IGFycmF5U2l6ZTsgKyt4KSB7Cisg
ICAgICAgICAgICBpZiAoIW1hdHJpeFt4XSkgeworICAgICAgICAgICAgICAgIHZhciBsb2MgPSAx
OworICAgICAgICAgICAgICAgIHdoaWxlICghbWF0cml4Wyh4ICsgbG9jKSAlIGFycmF5U2l6ZV0p
IHsKKyAgICAgICAgICAgICAgICAgICAgbG9jKys7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG1hdHJpeFt4XSA9IG1hdHJpeFsoeCArIGxvYykgJSBhcnJheVNpemVdLnNsaWNl
KCk7CisgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygibWlzc2luZyB4IiwgeCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciB6ID0gMDsgeiA8PSBhcnJheVNpemU7ICsr
eikgeworICAgICAgICAgICAgICAgIGlmICghbWF0cml4W3hdW3pdKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBsb2MgPSAxOworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3VmFsdWU7Cisg
ICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IG1hdHJpeFt4XVsoeiArIGxvYysrKSAlIGFy
cmF5U2l6ZV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbWF0
cml4W3hdW3pdID0gbmV3VmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHZhciBzaGFwZSA9IG5ldyB0aGlzLkJKU0NBTk5PTi5IZWlnaHRm
aWVsZChtYXRyaXgsIHsKKyAgICAgICAgICAgIGVsZW1lbnRTaXplOiBlbGVtZW50U2l6ZQorICAg
ICAgICB9KTsKKyAgICAgICAgLy9Gb3IgZnV0dXJlIHJlZmVyZW5jZSwgbmVlZGVkIGZvciBib2R5
IHRyYW5zZm9ybWF0aW9uCisgICAgICAgIHNoYXBlLm1pblkgPSBtaW5ZOworICAgICAgICByZXR1
cm4gc2hhcGU7CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5cGUuX3VwZGF0ZVBo
eXNpY3NCb2R5VHJhbnNmb3JtYXRpb24gPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAg
dmFyIG9iamVjdCA9IGltcG9zdG9yLm9iamVjdDsKKyAgICAgICAgLy9tYWtlIHN1cmUgaXQgaXMg
dXBkYXRlZC4uLgorICAgICAgICBvYmplY3QuY29tcHV0ZVdvcmxkTWF0cml4ICYmIG9iamVjdC5j
b21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgIC8vIFRoZSBkZWx0YSBiZXR3ZWVuIHRo
ZSBtZXNoIHBvc2l0aW9uIGFuZCB0aGUgbWVzaCBib3VuZGluZyBib3ggY2VudGVyCisgICAgICAg
IHZhciBiSW5mbyA9IG9iamVjdC5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgaWYgKCFiSW5m
bykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBjZW50ZXIg
PSBpbXBvc3Rvci5nZXRPYmplY3RDZW50ZXIoKTsKKyAgICAgICAgLy9tLmdldEFic29sdXRlUG9z
aXRpb24oKS5zdWJ0cmFjdChtLmdldEJvdW5kaW5nSW5mbygpLmJvdW5kaW5nQm94LmNlbnRlcldv
cmxkKQorICAgICAgICB0aGlzLl90bXBEZWx0YVBvc2l0aW9uLmNvcHlGcm9tKG9iamVjdC5nZXRB
YnNvbHV0ZVBpdm90UG9pbnQoKS5zdWJ0cmFjdChjZW50ZXIpKTsKKyAgICAgICAgdGhpcy5fdG1w
RGVsdGFQb3NpdGlvbi5kaXZpZGVJblBsYWNlKGltcG9zdG9yLm9iamVjdC5zY2FsaW5nKTsKKyAg
ICAgICAgdGhpcy5fdG1wUG9zaXRpb24uY29weUZyb20oY2VudGVyKTsKKyAgICAgICAgdmFyIHF1
YXRlcm5pb24gPSBvYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uOworICAgICAgICBpZiAoIXF1YXRl
cm5pb24pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvL2lzIHNo
YXBlIGlzIGEgcGxhbmUgb3IgYSBoZWlnaHRtYXAsIGl0IG11c3QgYmUgcm90YXRlZCA5MCBkZWdz
IGluIHRoZSBYIGF4aXMuCisgICAgICAgIC8vaWRlYWxseSB0aGVzZSB3b3VsZCBiZSByb3RhdGVk
IGF0IHRpbWUgb2YgY3JlYXRpb24gbGlrZSBjeWxpbmRlciBidXQgdGhleSBkb250IGV4dGVuZCBD
b252ZXhQb2x5aGVkcm9uCisgICAgICAgIGlmIChpbXBvc3Rvci50eXBlID09PSBfUGh5c2ljc19w
aHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUGh5c2ljc0ltcG9z
dG9yIl0uUGxhbmVJbXBvc3RvciB8fCBpbXBvc3Rvci50eXBlID09PSBfUGh5c2ljc19waHlzaWNz
SW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUGh5c2ljc0ltcG9zdG9yIl0u
SGVpZ2h0bWFwSW1wb3N0b3IpIHsKKyAgICAgICAgICAgIC8vLTkwIERFRyBpbiBYLCBwcmVjYWxj
dWxhdGVkCisgICAgICAgICAgICBxdWF0ZXJuaW9uID0gcXVhdGVybmlvbi5tdWx0aXBseSh0aGlz
Ll9taW51czkwWCk7CisgICAgICAgICAgICAvL0ludmVydCEgKFByZWNhbGN1bGF0ZWQsIDkwIGRl
ZyBpbiBYKQorICAgICAgICAgICAgLy9ObyBuZWVkIHRvIGNsb25lLiB0aGlzIHdpbGwgbmV2ZXIg
Y2hhbmdlLgorICAgICAgICAgICAgaW1wb3N0b3Iuc2V0RGVsdGFSb3RhdGlvbih0aGlzLl9wbHVz
OTBYKTsKKyAgICAgICAgfQorICAgICAgICAvL0lmIGl0IGlzIGEgaGVpZ2h0ZmllbGQsIGlmIHNo
b3VsZCBiZSBjZW50ZXJlZC4KKyAgICAgICAgaWYgKGltcG9zdG9yLnR5cGUgPT09IF9QaHlzaWNz
X3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaHlzaWNzSW1w
b3N0b3IiXS5IZWlnaHRtYXBJbXBvc3RvcikgeworICAgICAgICAgICAgdmFyIG1lc2ggPSBvYmpl
Y3Q7CisgICAgICAgICAgICB2YXIgYm91bmRpbmdJbmZvID0gbWVzaC5nZXRCb3VuZGluZ0luZm8o
KTsKKyAgICAgICAgICAgIC8vY2FsY3VsYXRlIHRoZSBjb3JyZWN0IGJvZHkgcG9zaXRpb246Cisg
ICAgICAgICAgICB2YXIgcm90YXRpb25RdWF0ZXJuaW9uID0gbWVzaC5yb3RhdGlvblF1YXRlcm5p
b247CisgICAgICAgICAgICBtZXNoLnJvdGF0aW9uUXVhdGVybmlvbiA9IHRoaXMuX3RtcFVuaXR5
Um90YXRpb247CisgICAgICAgICAgICBtZXNoLmNvbXB1dGVXb3JsZE1hdHJpeCh0cnVlKTsKKyAg
ICAgICAgICAgIC8vZ2V0IG9yaWdpbmFsIGNlbnRlciB3aXRoIG5vIHJvdGF0aW9uCisgICAgICAg
ICAgICB2YXIgYyA9IGNlbnRlci5jbG9uZSgpOworICAgICAgICAgICAgdmFyIG9sZFBpdm90ID0g
bWVzaC5nZXRQaXZvdE1hdHJpeCgpOworICAgICAgICAgICAgaWYgKG9sZFBpdm90KSB7CisgICAg
ICAgICAgICAgICAgLy8gY3JlYXRlIGEgY29weSB0aGUgcGl2b3QgTWF0cml4IGFzIGl0IGlzIG1v
ZGlmaWVkIGluIHBsYWNlCisgICAgICAgICAgICAgICAgb2xkUGl2b3QgPSBvbGRQaXZvdC5jbG9u
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
b2xkUGl2b3QgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vY2Fs
Y3VsYXRlIHRoZSBuZXcgY2VudGVyIHVzaW5nIGEgcGl2b3QgKHNpbmNlIHRoaXMuQkpTQ0FOTk9O
LmpzIGRvZXNuJ3QgY2VudGVyIGhlaWdodCBtYXBzKQorICAgICAgICAgICAgdmFyIHAgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siTWF0cml4Il0uVHJh
bnNsYXRpb24oYm91bmRpbmdJbmZvLmJvdW5kaW5nQm94LmV4dGVuZFNpemVXb3JsZC54LCAwLCAt
Ym91bmRpbmdJbmZvLmJvdW5kaW5nQm94LmV4dGVuZFNpemVXb3JsZC56KTsKKyAgICAgICAgICAg
IG1lc2guc2V0UHJlVHJhbnNmb3JtTWF0cml4KHApOworICAgICAgICAgICAgbWVzaC5jb21wdXRl
V29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgICAgICAvL2NhbGN1bGF0ZSB0aGUgdHJhbnNsYXRp
b24KKyAgICAgICAgICAgIHZhciB0cmFuc2xhdGlvbiA9IGJvdW5kaW5nSW5mby5ib3VuZGluZ0Jv
eC5jZW50ZXJXb3JsZC5zdWJ0cmFjdChjZW50ZXIpLnN1YnRyYWN0KG1lc2gucG9zaXRpb24pLm5l
Z2F0ZSgpOworICAgICAgICAgICAgdGhpcy5fdG1wUG9zaXRpb24uY29weUZyb21GbG9hdHModHJh
bnNsYXRpb24ueCwgdHJhbnNsYXRpb24ueSAtIGJvdW5kaW5nSW5mby5ib3VuZGluZ0JveC5leHRl
bmRTaXplV29ybGQueSwgdHJhbnNsYXRpb24ueik7CisgICAgICAgICAgICAvL2FkZCBpdCBpbnZl
cnRlZCB0byB0aGUgZGVsdGEKKyAgICAgICAgICAgIHRoaXMuX3RtcERlbHRhUG9zaXRpb24uY29w
eUZyb20oYm91bmRpbmdJbmZvLmJvdW5kaW5nQm94LmNlbnRlcldvcmxkLnN1YnRyYWN0KGMpKTsK
KyAgICAgICAgICAgIHRoaXMuX3RtcERlbHRhUG9zaXRpb24ueSArPSBib3VuZGluZ0luZm8uYm91
bmRpbmdCb3guZXh0ZW5kU2l6ZVdvcmxkLnk7CisgICAgICAgICAgICAvL3JvdGF0aW9uIGlzIGJh
Y2sKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJuaW9uID0gcm90YXRpb25RdWF0ZXJu
aW9uOworICAgICAgICAgICAgbWVzaC5zZXRQcmVUcmFuc2Zvcm1NYXRyaXgob2xkUGl2b3QpOwor
ICAgICAgICAgICAgbWVzaC5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoaW1wb3N0b3IudHlwZSA9PT0gX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBoeXNpY3NJbXBvc3RvciJdLk1lc2hJbXBv
c3RvcikgeworICAgICAgICAgICAgdGhpcy5fdG1wRGVsdGFQb3NpdGlvbi5jb3B5RnJvbUZsb2F0
cygwLCAwLCAwKTsKKyAgICAgICAgICAgIC8vdGhpcy5fdG1wUG9zaXRpb24uY29weUZyb20ob2Jq
ZWN0LnBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBpbXBvc3Rvci5zZXREZWx0YVBvc2l0
aW9uKHRoaXMuX3RtcERlbHRhUG9zaXRpb24pOworICAgICAgICAvL05vdyB1cGRhdGUgdGhlIGlt
cG9zdG9yIG9iamVjdAorICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5wb3NpdGlvbi5jb3B5
KHRoaXMuX3RtcFBvc2l0aW9uKTsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkucXVhdGVy
bmlvbi5jb3B5KHF1YXRlcm5pb24pOworICAgIH07CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90
eXBlLnNldFRyYW5zZm9ybWF0aW9uRnJvbVBoeXNpY3NCb2R5ID0gZnVuY3Rpb24gKGltcG9zdG9y
KSB7CisgICAgICAgIGltcG9zdG9yLm9iamVjdC5wb3NpdGlvbi5jb3B5RnJvbShpbXBvc3Rvci5w
aHlzaWNzQm9keS5wb3NpdGlvbik7CisgICAgICAgIGlmIChpbXBvc3Rvci5vYmplY3Qucm90YXRp
b25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICBpbXBvc3Rvci5vYmplY3Qucm90YXRpb25RdWF0
ZXJuaW9uLmNvcHlGcm9tKGltcG9zdG9yLnBoeXNpY3NCb2R5LnF1YXRlcm5pb24pOworICAgICAg
ICB9CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5cGUuc2V0UGh5c2ljc0JvZHlU
cmFuc2Zvcm1hdGlvbiA9IGZ1bmN0aW9uIChpbXBvc3RvciwgbmV3UG9zaXRpb24sIG5ld1JvdGF0
aW9uKSB7CisgICAgICAgIGltcG9zdG9yLnBoeXNpY3NCb2R5LnBvc2l0aW9uLmNvcHkobmV3UG9z
aXRpb24pOworICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5xdWF0ZXJuaW9uLmNvcHkobmV3
Um90YXRpb24pOworICAgIH07CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLmlzU3VwcG9y
dGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5CSlNDQU5OT04gIT09IHVu
ZGVmaW5lZDsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5zZXRMaW5lYXJW
ZWxvY2l0eSA9IGZ1bmN0aW9uIChpbXBvc3RvciwgdmVsb2NpdHkpIHsKKyAgICAgICAgaW1wb3N0
b3IucGh5c2ljc0JvZHkudmVsb2NpdHkuY29weSh2ZWxvY2l0eSk7CisgICAgfTsKKyAgICBDYW5u
b25KU1BsdWdpbi5wcm90b3R5cGUuc2V0QW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24gKGltcG9z
dG9yLCB2ZWxvY2l0eSkgeworICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5hbmd1bGFyVmVs
b2NpdHkuY29weSh2ZWxvY2l0eSk7CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5
cGUuZ2V0TGluZWFyVmVsb2NpdHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgdmFy
IHYgPSBpbXBvc3Rvci5waHlzaWNzQm9keS52ZWxvY2l0eTsKKyAgICAgICAgaWYgKCF2KSB7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IzIl0o
di54LCB2LnksIHYueik7CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5cGUuZ2V0
QW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIHZhciB2ID0g
aW1wb3N0b3IucGh5c2ljc0JvZHkuYW5ndWxhclZlbG9jaXR5OworICAgICAgICBpZiAoIXYpIHsK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcg
X01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMi
XSh2LngsIHYueSwgdi56KTsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5z
ZXRCb2R5TWFzcyA9IGZ1bmN0aW9uIChpbXBvc3RvciwgbWFzcykgeworICAgICAgICBpbXBvc3Rv
ci5waHlzaWNzQm9keS5tYXNzID0gbWFzczsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHku
dXBkYXRlTWFzc1Byb3BlcnRpZXMoKTsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3Rv
dHlwZS5nZXRCb2R5TWFzcyA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICByZXR1cm4g
aW1wb3N0b3IucGh5c2ljc0JvZHkubWFzczsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnBy
b3RvdHlwZS5nZXRCb2R5RnJpY3Rpb24gPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAg
cmV0dXJuIGltcG9zdG9yLnBoeXNpY3NCb2R5Lm1hdGVyaWFsLmZyaWN0aW9uOworICAgIH07Cisg
ICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLnNldEJvZHlGcmljdGlvbiA9IGZ1bmN0aW9uIChp
bXBvc3RvciwgZnJpY3Rpb24pIHsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkubWF0ZXJp
YWwuZnJpY3Rpb24gPSBmcmljdGlvbjsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3Rv
dHlwZS5nZXRCb2R5UmVzdGl0dXRpb24gPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAg
cmV0dXJuIGltcG9zdG9yLnBoeXNpY3NCb2R5Lm1hdGVyaWFsLnJlc3RpdHV0aW9uOworICAgIH07
CisgICAgQ2Fubm9uSlNQbHVnaW4ucHJvdG90eXBlLnNldEJvZHlSZXN0aXR1dGlvbiA9IGZ1bmN0
aW9uIChpbXBvc3RvciwgcmVzdGl0dXRpb24pIHsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0Jv
ZHkubWF0ZXJpYWwucmVzdGl0dXRpb24gPSByZXN0aXR1dGlvbjsKKyAgICB9OworICAgIENhbm5v
bkpTUGx1Z2luLnByb3RvdHlwZS5zbGVlcEJvZHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAg
ICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuc2xlZXAoKTsKKyAgICB9OworICAgIENhbm5vbkpT
UGx1Z2luLnByb3RvdHlwZS53YWtlVXBCb2R5ID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAg
ICAgIGltcG9zdG9yLnBoeXNpY3NCb2R5Lndha2VVcCgpOworICAgIH07CisgICAgQ2Fubm9uSlNQ
bHVnaW4ucHJvdG90eXBlLnVwZGF0ZURpc3RhbmNlSm9pbnQgPSBmdW5jdGlvbiAoam9pbnQsIG1h
eERpc3RhbmNlKSB7CisgICAgICAgIGpvaW50LnBoeXNpY3NKb2ludC5kaXN0YW5jZSA9IG1heERp
c3RhbmNlOworICAgIH07CisgICAgLy8gcHJpdmF0ZSBlbmFibGVNb3Rvcihqb2ludDogSU1vdG9y
RW5hYmxlZEpvaW50LCBtb3RvckluZGV4PzogbnVtYmVyKSB7CisgICAgLy8gICAgIGlmICghbW90
b3JJbmRleCkgeworICAgIC8vICAgICAgICAgam9pbnQucGh5c2ljc0pvaW50LmVuYWJsZU1vdG9y
KCk7CisgICAgLy8gICAgIH0KKyAgICAvLyB9CisgICAgLy8gcHJpdmF0ZSBkaXNhYmxlTW90b3Io
am9pbnQ6IElNb3RvckVuYWJsZWRKb2ludCwgbW90b3JJbmRleD86IG51bWJlcikgeworICAgIC8v
ICAgICBpZiAoIW1vdG9ySW5kZXgpIHsKKyAgICAvLyAgICAgICAgIGpvaW50LnBoeXNpY3NKb2lu
dC5kaXNhYmxlTW90b3IoKTsKKyAgICAvLyAgICAgfQorICAgIC8vIH0KKyAgICBDYW5ub25KU1Bs
dWdpbi5wcm90b3R5cGUuc2V0TW90b3IgPSBmdW5jdGlvbiAoam9pbnQsIHNwZWVkLCBtYXhGb3Jj
ZSwgbW90b3JJbmRleCkgeworICAgICAgICBpZiAoIW1vdG9ySW5kZXgpIHsKKyAgICAgICAgICAg
IGpvaW50LnBoeXNpY3NKb2ludC5lbmFibGVNb3RvcigpOworICAgICAgICAgICAgam9pbnQucGh5
c2ljc0pvaW50LnNldE1vdG9yU3BlZWQoc3BlZWQpOworICAgICAgICAgICAgaWYgKG1heEZvcmNl
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5zZXRMaW1pdChqb2ludCwgbWF4Rm9yY2UpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90b3R5
cGUuc2V0TGltaXQgPSBmdW5jdGlvbiAoam9pbnQsIHVwcGVyTGltaXQsIGxvd2VyTGltaXQpIHsK
KyAgICAgICAgam9pbnQucGh5c2ljc0pvaW50Lm1vdG9yRXF1YXRpb24ubWF4Rm9yY2UgPSB1cHBl
ckxpbWl0OworICAgICAgICBqb2ludC5waHlzaWNzSm9pbnQubW90b3JFcXVhdGlvbi5taW5Gb3Jj
ZSA9IGxvd2VyTGltaXQgPT09IHZvaWQgMCA/IC11cHBlckxpbWl0IDogbG93ZXJMaW1pdDsKKyAg
ICB9OworICAgIENhbm5vbkpTUGx1Z2luLnByb3RvdHlwZS5zeW5jTWVzaFdpdGhJbXBvc3RvciA9
IGZ1bmN0aW9uIChtZXNoLCBpbXBvc3RvcikgeworICAgICAgICB2YXIgYm9keSA9IGltcG9zdG9y
LnBoeXNpY3NCb2R5OworICAgICAgICBtZXNoLnBvc2l0aW9uLnggPSBib2R5LnBvc2l0aW9uLng7
CisgICAgICAgIG1lc2gucG9zaXRpb24ueSA9IGJvZHkucG9zaXRpb24ueTsKKyAgICAgICAgbWVz
aC5wb3NpdGlvbi56ID0gYm9keS5wb3NpdGlvbi56OworICAgICAgICBpZiAobWVzaC5yb3RhdGlv
blF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJuaW9uLnggPSBi
b2R5LnF1YXRlcm5pb24ueDsKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJuaW9uLnkg
PSBib2R5LnF1YXRlcm5pb24ueTsKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJuaW9u
LnogPSBib2R5LnF1YXRlcm5pb24uejsKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJu
aW9uLncgPSBib2R5LnF1YXRlcm5pb24udzsKKyAgICAgICAgfQorICAgIH07CisgICAgQ2Fubm9u
SlNQbHVnaW4ucHJvdG90eXBlLmdldFJhZGl1cyA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAg
ICAgICB2YXIgc2hhcGUgPSBpbXBvc3Rvci5waHlzaWNzQm9keS5zaGFwZXNbMF07CisgICAgICAg
IHJldHVybiBzaGFwZS5ib3VuZGluZ1NwaGVyZVJhZGl1czsKKyAgICB9OworICAgIENhbm5vbkpT
UGx1Z2luLnByb3RvdHlwZS5nZXRCb3hTaXplVG9SZWYgPSBmdW5jdGlvbiAoaW1wb3N0b3IsIHJl
c3VsdCkgeworICAgICAgICB2YXIgc2hhcGUgPSBpbXBvc3Rvci5waHlzaWNzQm9keS5zaGFwZXNb
MF07CisgICAgICAgIHJlc3VsdC54ID0gc2hhcGUuaGFsZkV4dGVudHMueCAqIDI7CisgICAgICAg
IHJlc3VsdC55ID0gc2hhcGUuaGFsZkV4dGVudHMueSAqIDI7CisgICAgICAgIHJlc3VsdC56ID0g
c2hhcGUuaGFsZkV4dGVudHMueiAqIDI7CisgICAgfTsKKyAgICBDYW5ub25KU1BsdWdpbi5wcm90
b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICB9OworICAgIENhbm5vbkpTUGx1Z2lu
LnByb3RvdHlwZS5fZXh0ZW5kTmFtZXNwYWNlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvL3Ro
aXMgd2lsbCBmb3JjZSBjYW5ub24gdG8gZXhlY3V0ZSBhdCBsZWFzdCBvbmUgc3RlcCB3aGVuIHVz
aW5nIGludGVycG9sYXRpb24KKyAgICAgICAgdmFyIHN0ZXBfdG1wMSA9IG5ldyB0aGlzLkJKU0NB
Tk5PTi5WZWMzKCk7CisgICAgICAgIHZhciBFbmdpbmUgPSB0aGlzLkJKU0NBTk5PTjsKKyAgICAg
ICAgdGhpcy5CSlNDQU5OT04uV29ybGQucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAoZHQsIHRp
bWVTaW5jZUxhc3RDYWxsZWQsIG1heFN1YlN0ZXBzKSB7CisgICAgICAgICAgICBtYXhTdWJTdGVw
cyA9IG1heFN1YlN0ZXBzIHx8IDEwOworICAgICAgICAgICAgdGltZVNpbmNlTGFzdENhbGxlZCA9
IHRpbWVTaW5jZUxhc3RDYWxsZWQgfHwgMDsKKyAgICAgICAgICAgIGlmICh0aW1lU2luY2VMYXN0
Q2FsbGVkID09PSAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFN0ZXAoZHQpOwor
ICAgICAgICAgICAgICAgIHRoaXMudGltZSArPSBkdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbFN0ZXBzID0gTWF0aC5mbG9v
cigodGhpcy50aW1lICsgdGltZVNpbmNlTGFzdENhbGxlZCkgLyBkdCkgLSBNYXRoLmZsb29yKHRo
aXMudGltZSAvIGR0KTsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbFN0ZXBzID0gTWF0aC5taW4o
aW50ZXJuYWxTdGVwcywgbWF4U3ViU3RlcHMpIHx8IDE7CisgICAgICAgICAgICAgICAgdmFyIHQw
ID0gcGVyZm9ybWFuY2Uubm93KCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
IT09IGludGVybmFsU3RlcHM7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVy
bmFsU3RlcChkdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwZXJmb3JtYW5jZS5ub3coKSAt
IHQwID4gZHQgKiAxMDAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlz
LnRpbWUgKz0gdGltZVNpbmNlTGFzdENhbGxlZDsKKyAgICAgICAgICAgICAgICB2YXIgaCA9IHRo
aXMudGltZSAlIGR0OworICAgICAgICAgICAgICAgIHZhciBoX2Rpdl9kdCA9IGggLyBkdDsKKyAg
ICAgICAgICAgICAgICB2YXIgaW50ZXJwdmVsbyA9IHN0ZXBfdG1wMTsKKyAgICAgICAgICAgICAg
ICB2YXIgYm9kaWVzID0gdGhpcy5ib2RpZXM7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogIT09IGJvZGllcy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICB2YXIg
YiA9IGJvZGllc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGIudHlwZSAhPT0gRW5naW5l
LkJvZHkuU1RBVElDICYmIGIuc2xlZXBTdGF0ZSAhPT0gRW5naW5lLkJvZHkuU0xFRVBJTkcpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGIucG9zaXRpb24udnN1YihiLnByZXZpb3VzUG9zaXRp
b24sIGludGVycHZlbG8pOworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwdmVsby5zY2Fs
ZShoX2Rpdl9kdCwgaW50ZXJwdmVsbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBiLnBvc2l0
aW9uLnZhZGQoaW50ZXJwdmVsbywgYi5pbnRlcnBvbGF0ZWRQb3NpdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBiLmludGVycG9sYXRlZFBvc2l0aW9uLmNvcHkoYi5wb3NpdGlvbik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBiLmludGVycG9sYXRlZFF1YXRlcm5pb24uY29weShiLnF1YXRlcm5p
b24pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9OworICAgIH07CisgICAgLyoqCisgICAgICogRG9lcyBhIHJheWNhc3Qg
aW4gdGhlIHBoeXNpY3Mgd29ybGQKKyAgICAgKiBAcGFyYW0gZnJvbSB3aGVuIHNob3VsZCB0aGUg
cmF5IHN0YXJ0PworICAgICAqIEBwYXJhbSB0byB3aGVuIHNob3VsZCB0aGUgcmF5IGVuZD8KKyAg
ICAgKiBAcmV0dXJucyBQaHlzaWNzUmF5Y2FzdFJlc3VsdAorICAgICAqLworICAgIENhbm5vbkpT
UGx1Z2luLnByb3RvdHlwZS5yYXljYXN0ID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7CisgICAgICAg
IHRoaXMuX2Nhbm5vblJheWNhc3RSZXN1bHQucmVzZXQoKTsKKyAgICAgICAgdGhpcy53b3JsZC5y
YXljYXN0Q2xvc2VzdChmcm9tLCB0bywge30sIHRoaXMuX2Nhbm5vblJheWNhc3RSZXN1bHQpOwor
ICAgICAgICB0aGlzLl9yYXljYXN0UmVzdWx0LnJlc2V0KGZyb20sIHRvKTsKKyAgICAgICAgaWYg
KHRoaXMuX2Nhbm5vblJheWNhc3RSZXN1bHQuaGFzSGl0KSB7CisgICAgICAgICAgICAvLyBUT0RP
OiBkbyB3ZSBhbHNvIHdhbnQgdG8gZ2V0IHRoZSBib2R5IGl0IGhpdD8KKyAgICAgICAgICAgIHRo
aXMuX3JheWNhc3RSZXN1bHQuc2V0SGl0RGF0YSh7CisgICAgICAgICAgICAgICAgeDogdGhpcy5f
Y2Fubm9uUmF5Y2FzdFJlc3VsdC5oaXROb3JtYWxXb3JsZC54LAorICAgICAgICAgICAgICAgIHk6
IHRoaXMuX2Nhbm5vblJheWNhc3RSZXN1bHQuaGl0Tm9ybWFsV29ybGQueSwKKyAgICAgICAgICAg
ICAgICB6OiB0aGlzLl9jYW5ub25SYXljYXN0UmVzdWx0LmhpdE5vcm1hbFdvcmxkLnosCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgeDogdGhpcy5fY2Fubm9uUmF5Y2FzdFJlc3Vs
dC5oaXRQb2ludFdvcmxkLngsCisgICAgICAgICAgICAgICAgeTogdGhpcy5fY2Fubm9uUmF5Y2Fz
dFJlc3VsdC5oaXRQb2ludFdvcmxkLnksCisgICAgICAgICAgICAgICAgejogdGhpcy5fY2Fubm9u
UmF5Y2FzdFJlc3VsdC5oaXRQb2ludFdvcmxkLnosCisgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIHRoaXMuX3JheWNhc3RSZXN1bHQuc2V0SGl0RGlzdGFuY2UodGhpcy5fY2Fubm9uUmF5Y2Fz
dFJlc3VsdC5kaXN0YW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3JheWNh
c3RSZXN1bHQ7CisgICAgfTsKKyAgICByZXR1cm4gQ2Fubm9uSlNQbHVnaW47Cit9KCkpOworCitf
UGh5c2ljc19waHlzaWNzRW5naW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlBoeXNp
Y3NFbmdpbmUiXS5EZWZhdWx0UGx1Z2luRmFjdG9yeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5l
dyBDYW5ub25KU1BsdWdpbigpOyB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QaHlzaWNz
L1BsdWdpbnMvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vUGh5c2ljcy9QbHVnaW5zL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQ2Fubm9u
SlNQbHVnaW4sIEFtbW9KU1BsdWdpbiwgT2ltb0pTUGx1Z2luICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2Fubm9uSlNQbHVnaW5fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2Fubm9uSlNQbHVnaW4g
Ki8gIi4vUGh5c2ljcy9QbHVnaW5zL2Nhbm5vbkpTUGx1Z2luLnRzIik7CisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkNhbm5vbkpTUGx1Z2luIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY2Fubm9uSlNQbHVnaW5f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ2Fubm9uSlNQbHVnaW4iXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYW1tb0pTUGx1Z2luX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FtbW9KU1BsdWdpbiAqLyAiLi9Q
aHlzaWNzL1BsdWdpbnMvYW1tb0pTUGx1Z2luLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFtbW9K
U1BsdWdpbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FtbW9KU1BsdWdpbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJBbW1vSlNQbHVnaW4iXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfb2ltb0pTUGx1Z2luX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL29pbW9KU1BsdWdpbiAqLyAiLi9QaHlzaWNzL1BsdWdpbnMv
b2ltb0pTUGx1Z2luLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9pbW9KU1BsdWdpbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX29pbW9KU1BsdWdpbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJPaW1vSlNQbHVnaW4iXTsgfSk7CisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
UGh5c2ljcy9QbHVnaW5zL29pbW9KU1BsdWdpbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGh5c2ljcy9QbHVnaW5zL29pbW9K
U1BsdWdpbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBPaW1vSlNQbHVnaW4gKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT2ltb0pTUGx1Z2luIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBPaW1vSlNQbHVnaW47IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9QaHlzaWNzX3Bo
eXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vUGh5c2ljcy9waHlzaWNzSW1wb3N0b3IgKi8gIi4vUGh5c2ljcy9w
aHlzaWNzSW1wb3N0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUGh5c2ljc19w
aHlzaWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL1BoeXNpY3MvcGh5c2ljc0pvaW50ICovICIuL1BoeXNpY3MvcGh5c2lj
c0pvaW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BoeXNpY3NfcGh5c2ljc0Vu
Z2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vUGh5c2ljcy9waHlzaWNzRW5naW5lICovICIuL1BoeXNpY3MvcGh5c2ljc0VuZ2lu
ZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
TWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvbG9nZ2VyICovICIuL01pc2Mv
bG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BoeXNpY3NSYXljYXN0UmVz
dWx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9waHlzaWNzUmF5Y2FzdFJlc3VsdCAqLyAiLi9QaHlzaWNzL3BoeXNpY3NSYXljYXN0UmVz
dWx0LnRzIik7CisKKworCisKKworCisvKiogQGhpZGRlbiAqLwordmFyIE9pbW9KU1BsdWdpbiA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBPaW1vSlNQbHVnaW4o
aXRlcmF0aW9ucywgb2ltb0luamVjdGlvbikgeworICAgICAgICBpZiAob2ltb0luamVjdGlvbiA9
PT0gdm9pZCAwKSB7IG9pbW9JbmplY3Rpb24gPSBPSU1POyB9CisgICAgICAgIHRoaXMubmFtZSA9
ICJPaW1vSlNQbHVnaW4iOworICAgICAgICB0aGlzLl90bXBJbXBvc3RvcnNBcnJheSA9IFtdOwor
ICAgICAgICB0aGlzLl90bXBQb3NpdGlvblZlY3RvciA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlz
LkJKU09JTU8gPSBvaW1vSW5qZWN0aW9uOworICAgICAgICB0aGlzLndvcmxkID0gbmV3IHRoaXMu
QkpTT0lNTy5Xb3JsZCh7CisgICAgICAgICAgICBpdGVyYXRpb25zOiBpdGVyYXRpb25zCisgICAg
ICAgIH0pOworICAgICAgICB0aGlzLndvcmxkLmNsZWFyKCk7CisgICAgICAgIHRoaXMuX3JheWNh
c3RSZXN1bHQgPSBuZXcgX3BoeXNpY3NSYXljYXN0UmVzdWx0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlBoeXNpY3NSYXljYXN0UmVzdWx0Il0oKTsKKyAgICB9CisgICAgT2ltb0pTUGx1
Z2luLnByb3RvdHlwZS5zZXRHcmF2aXR5ID0gZnVuY3Rpb24gKGdyYXZpdHkpIHsKKyAgICAgICAg
dGhpcy53b3JsZC5ncmF2aXR5LmNvcHkoZ3Jhdml0eSk7CisgICAgfTsKKyAgICBPaW1vSlNQbHVn
aW4ucHJvdG90eXBlLnNldFRpbWVTdGVwID0gZnVuY3Rpb24gKHRpbWVTdGVwKSB7CisgICAgICAg
IHRoaXMud29ybGQudGltZVN0ZXAgPSB0aW1lU3RlcDsKKyAgICB9OworICAgIE9pbW9KU1BsdWdp
bi5wcm90b3R5cGUuZ2V0VGltZVN0ZXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0
aGlzLndvcmxkLnRpbWVTdGVwOworICAgIH07CisgICAgT2ltb0pTUGx1Z2luLnByb3RvdHlwZS5l
eGVjdXRlU3RlcCA9IGZ1bmN0aW9uIChkZWx0YSwgaW1wb3N0b3JzKSB7CisgICAgICAgIHZhciBf
dGhpcyA9IHRoaXM7CisgICAgICAgIGltcG9zdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChpbXBvc3Rv
cikgeworICAgICAgICAgICAgaW1wb3N0b3IuYmVmb3JlU3RlcCgpOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy53b3JsZC5zdGVwKCk7CisgICAgICAgIGltcG9zdG9ycy5mb3JFYWNoKGZ1bmN0
aW9uIChpbXBvc3RvcikgeworICAgICAgICAgICAgaW1wb3N0b3IuYWZ0ZXJTdGVwKCk7CisgICAg
ICAgICAgICAvL3VwZGF0ZSB0aGUgb3JkZXJlZCBpbXBvc3RvcnMgYXJyYXkKKyAgICAgICAgICAg
IF90aGlzLl90bXBJbXBvc3RvcnNBcnJheVtpbXBvc3Rvci51bmlxdWVJZF0gPSBpbXBvc3RvcjsK
KyAgICAgICAgfSk7CisgICAgICAgIC8vY2hlY2sgZm9yIGNvbGxpc2lvbnMKKyAgICAgICAgdmFy
IGNvbnRhY3QgPSB0aGlzLndvcmxkLmNvbnRhY3RzOworICAgICAgICB3aGlsZSAoY29udGFjdCAh
PT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKGNvbnRhY3QudG91Y2hpbmcgJiYgIWNvbnRhY3Qu
Ym9keTEuc2xlZXBpbmcgJiYgIWNvbnRhY3QuYm9keTIuc2xlZXBpbmcpIHsKKyAgICAgICAgICAg
ICAgICBjb250YWN0ID0gY29udGFjdC5uZXh0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy9pcyB0aGlzIGJvZHkgY29sbGlkaW5nIHdpdGgg
YW55IG90aGVyPyBnZXQgdGhlIGltcG9zdG9yCisgICAgICAgICAgICB2YXIgbWFpbkltcG9zdG9y
ID0gdGhpcy5fdG1wSW1wb3N0b3JzQXJyYXlbK2NvbnRhY3QuYm9keTEubmFtZV07CisgICAgICAg
ICAgICB2YXIgY29sbGlkaW5nSW1wb3N0b3IgPSB0aGlzLl90bXBJbXBvc3RvcnNBcnJheVsrY29u
dGFjdC5ib2R5Mi5uYW1lXTsKKyAgICAgICAgICAgIGlmICghbWFpbkltcG9zdG9yIHx8ICFjb2xs
aWRpbmdJbXBvc3RvcikgeworICAgICAgICAgICAgICAgIGNvbnRhY3QgPSBjb250YWN0Lm5leHQ7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
YWluSW1wb3N0b3Iub25Db2xsaWRlKHsgYm9keTogY29sbGlkaW5nSW1wb3N0b3IucGh5c2ljc0Jv
ZHkgfSk7CisgICAgICAgICAgICBjb2xsaWRpbmdJbXBvc3Rvci5vbkNvbGxpZGUoeyBib2R5OiBt
YWluSW1wb3N0b3IucGh5c2ljc0JvZHkgfSk7CisgICAgICAgICAgICBjb250YWN0ID0gY29udGFj
dC5uZXh0OworICAgICAgICB9CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLmFw
cGx5SW1wdWxzZSA9IGZ1bmN0aW9uIChpbXBvc3RvciwgZm9yY2UsIGNvbnRhY3RQb2ludCkgewor
ICAgICAgICB2YXIgbWFzcyA9IGltcG9zdG9yLnBoeXNpY3NCb2R5Lm1hc3M7CisgICAgICAgIGlt
cG9zdG9yLnBoeXNpY3NCb2R5LmFwcGx5SW1wdWxzZShjb250YWN0UG9pbnQuc2NhbGUodGhpcy53
b3JsZC5pbnZTY2FsZSksIGZvcmNlLnNjYWxlKHRoaXMud29ybGQuaW52U2NhbGUgKiBtYXNzKSk7
CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLmFwcGx5Rm9yY2UgPSBmdW5jdGlv
biAoaW1wb3N0b3IsIGZvcmNlLCBjb250YWN0UG9pbnQpIHsKKyAgICAgICAgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkxvZ2dlciJdLldhcm4oIk9pbW8gZG9lc24n
dCBzdXBwb3J0IGFwcGx5aW5nIGZvcmNlLiBVc2luZyBpbXB1bGUgaW5zdGVhZC4iKTsKKyAgICAg
ICAgdGhpcy5hcHBseUltcHVsc2UoaW1wb3N0b3IsIGZvcmNlLCBjb250YWN0UG9pbnQpOworICAg
IH07CisgICAgT2ltb0pTUGx1Z2luLnByb3RvdHlwZS5nZW5lcmF0ZVBoeXNpY3NCb2R5ID0gZnVu
Y3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIC8v
cGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcC4gRG9lcyB0aGlzIGltcG9zdG9yIGhhcyBhIHBhcmVu
dCBpbXBvc3Rvcj8KKyAgICAgICAgaWYgKGltcG9zdG9yLnBhcmVudCkgeworICAgICAgICAgICAg
aWYgKGltcG9zdG9yLnBoeXNpY3NCb2R5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQ
aHlzaWNzQm9keShpbXBvc3Rvcik7CisgICAgICAgICAgICAgICAgLy9UT0RPIGlzIHRoYXQgbmVl
ZGVkPworICAgICAgICAgICAgICAgIGltcG9zdG9yLmZvcmNlVXBkYXRlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGltcG9zdG9y
LmlzQm9keUluaXRSZXF1aXJlZCgpKSB7CisgICAgICAgICAgICB2YXIgYm9keUNvbmZpZyA9IHsK
KyAgICAgICAgICAgICAgICBuYW1lOiBpbXBvc3Rvci51bmlxdWVJZCwKKyAgICAgICAgICAgICAg
ICAvL09pbW8gbXVzdCBoYXZlIG1hc3MsIGFsc28gZm9yIHN0YXRpYyBvYmplY3RzLgorICAgICAg
ICAgICAgICAgIGNvbmZpZzogW2ltcG9zdG9yLmdldFBhcmFtKCJtYXNzIikgfHwgMSwgaW1wb3N0
b3IuZ2V0UGFyYW0oImZyaWN0aW9uIiksIGltcG9zdG9yLmdldFBhcmFtKCJyZXN0aXR1dGlvbiIp
XSwKKyAgICAgICAgICAgICAgICBzaXplOiBbXSwKKyAgICAgICAgICAgICAgICB0eXBlOiBbXSwK
KyAgICAgICAgICAgICAgICBwb3M6IFtdLAorICAgICAgICAgICAgICAgIHBvc1NoYXBlOiBbXSwK
KyAgICAgICAgICAgICAgICByb3Q6IFtdLAorICAgICAgICAgICAgICAgIHJvdFNoYXBlOiBbXSwK
KyAgICAgICAgICAgICAgICBtb3ZlOiBpbXBvc3Rvci5nZXRQYXJhbSgibWFzcyIpICE9PSAwLAor
ICAgICAgICAgICAgICAgIGRlbnNpdHk6IGltcG9zdG9yLmdldFBhcmFtKCJtYXNzIiksCisgICAg
ICAgICAgICAgICAgZnJpY3Rpb246IGltcG9zdG9yLmdldFBhcmFtKCJmcmljdGlvbiIpLAorICAg
ICAgICAgICAgICAgIHJlc3RpdHV0aW9uOiBpbXBvc3Rvci5nZXRQYXJhbSgicmVzdGl0dXRpb24i
KSwKKyAgICAgICAgICAgICAgICAvL1N1cHBvcnRpbmcgb2xkZXIgdmVyc2lvbnMgb2YgT2ltbwor
ICAgICAgICAgICAgICAgIHdvcmxkOiB0aGlzLndvcmxkCisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgdmFyIGltcG9zdG9ycyA9IFtpbXBvc3Rvcl07CisgICAgICAgICAgICB2YXIgYWRkVG9B
cnJheSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcmVudC5n
ZXRDaGlsZE1lc2hlcykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHBhcmVudC5nZXRDaGlsZE1lc2hlcygpLmZvckVhY2go
ZnVuY3Rpb24gKG0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG0ucGh5c2ljc0ltcG9zdG9y
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbXBvc3RvcnMucHVzaChtLnBoeXNpY3NJbXBv
c3Rvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAvL20ucGh5c2ljc0ltcG9zdG9yLl9pbml0
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBhZGRUb0FycmF5KGltcG9zdG9yLm9iamVjdCk7CisgICAgICAg
ICAgICB2YXIgY2hlY2tXaXRoRXBzaWxvbl8xID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHZhbHVlLCBfUGh5c2ljc19waHlzaWNzRW5naW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNpY3NFbmdpbmUiXS5FcHNpbG9uKTsKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICB2YXIgZ2xvYmFsUXVhdGVybmlvbl8xID0gbmV3IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJRdWF0ZXJuaW9u
Il0oKTsKKyAgICAgICAgICAgIGltcG9zdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFpLm9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
L2dldCB0aGUgY29ycmVjdCBib3VuZGluZyBib3gKKyAgICAgICAgICAgICAgICB2YXIgb2xkUXVh
dGVybmlvbiA9IGkub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbjsKKyAgICAgICAgICAgICAgICBn
bG9iYWxRdWF0ZXJuaW9uXzEgPSBvbGRRdWF0ZXJuaW9uLmNsb25lKCk7CisgICAgICAgICAgICAg
ICAgdmFyIHJvdCA9IG9sZFF1YXRlcm5pb24udG9FdWxlckFuZ2xlcygpOworICAgICAgICAgICAg
ICAgIHZhciBleHRlbmRTaXplID0gaS5nZXRPYmplY3RFeHRlbmRTaXplKCk7CisgICAgICAgICAg
ICAgICAgdmFyIHJhZFRvRGVnID0gNTcuMjk1Nzc5NTEzMDgyMzIwODc2OworICAgICAgICAgICAg
ICAgIGlmIChpID09PSBpbXBvc3RvcikgeworICAgICAgICAgICAgICAgICAgICB2YXIgY2VudGVy
ID0gaW1wb3N0b3IuZ2V0T2JqZWN0Q2VudGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGltcG9z
dG9yLm9iamVjdC5nZXRBYnNvbHV0ZVBpdm90UG9pbnQoKS5zdWJ0cmFjdFRvUmVmKGNlbnRlciwg
X3RoaXMuX3RtcFBvc2l0aW9uVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Rt
cFBvc2l0aW9uVmVjdG9yLmRpdmlkZUluUGxhY2UoaW1wb3N0b3Iub2JqZWN0LnNjYWxpbmcpOwor
ICAgICAgICAgICAgICAgICAgICAvL0NhbiBhbHNvIHVzZSBBcnJheS5wcm90b3R5cGUucHVzaC5h
cHBseQorICAgICAgICAgICAgICAgICAgICBib2R5Q29uZmlnLnBvcy5wdXNoKGNlbnRlci54KTsK
KyAgICAgICAgICAgICAgICAgICAgYm9keUNvbmZpZy5wb3MucHVzaChjZW50ZXIueSk7CisgICAg
ICAgICAgICAgICAgICAgIGJvZHlDb25maWcucG9zLnB1c2goY2VudGVyLnopOworICAgICAgICAg
ICAgICAgICAgICBib2R5Q29uZmlnLnBvc1NoYXBlLnB1c2goMCwgMCwgMCk7CisgICAgICAgICAg
ICAgICAgICAgIGJvZHlDb25maWcucm90U2hhcGUucHVzaCgwLCAwLCAwKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBs
b2NhbFBvc2l0aW9uID0gaS5vYmplY3QuZ2V0QWJzb2x1dGVQb3NpdGlvbigpLnN1YnRyYWN0KGlt
cG9zdG9yLm9iamVjdC5nZXRBYnNvbHV0ZVBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgICAg
ICBib2R5Q29uZmlnLnBvc1NoYXBlLnB1c2gobG9jYWxQb3NpdGlvbi54KTsKKyAgICAgICAgICAg
ICAgICAgICAgYm9keUNvbmZpZy5wb3NTaGFwZS5wdXNoKGxvY2FsUG9zaXRpb24ueSk7CisgICAg
ICAgICAgICAgICAgICAgIGJvZHlDb25maWcucG9zU2hhcGUucHVzaChsb2NhbFBvc2l0aW9uLnop
OworICAgICAgICAgICAgICAgICAgICBib2R5Q29uZmlnLnBvcy5wdXNoKDAsIDAsIDApOworICAg
ICAgICAgICAgICAgICAgICBib2R5Q29uZmlnLnJvdFNoYXBlLnB1c2gocm90LnggKiByYWRUb0Rl
Zyk7CisgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcucm90U2hhcGUucHVzaChyb3QueSAq
IHJhZFRvRGVnKTsKKyAgICAgICAgICAgICAgICAgICAgYm9keUNvbmZpZy5yb3RTaGFwZS5wdXNo
KHJvdC56ICogcmFkVG9EZWcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
LyByZWdpc3RlciBtZXNoCisgICAgICAgICAgICAgICAgc3dpdGNoIChpLnR5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siUGh5c2ljc0ltcG9zdG9yIl0uUGFydGljbGVJbXBvc3RvcjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fWyJMb2dnZXIiXS5XYXJuKCJObyBQYXJ0aWNsZSBzdXBwb3J0IGluIE9JTU8uanMuIHVz
aW5nIFNwaGVyZUltcG9zdG9yIGluc3RlYWQiKTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBf
UGh5c2ljc19waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siUGh5
c2ljc0ltcG9zdG9yIl0uU3BoZXJlSW1wb3N0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcmFkaXVzWCA9IGV4dGVuZFNpemUueDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBy
YWRpdXNZID0gZXh0ZW5kU2l6ZS55OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGl1
c1ogPSBleHRlbmRTaXplLno7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IE1h
dGgubWF4KGNoZWNrV2l0aEVwc2lsb25fMShyYWRpdXNYKSwgY2hlY2tXaXRoRXBzaWxvbl8xKHJh
ZGl1c1kpLCBjaGVja1dpdGhFcHNpbG9uXzEocmFkaXVzWikpIC8gMjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJvZHlDb25maWcudHlwZS5wdXNoKCdzcGhlcmUnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vZHVlIHRvIHRoZSB3YXkgb2ltbyB3b3JrcyB3aXRoIGNvbXBvdW5kcywgYWRk
IDMgdGltZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKHNp
emUpOworICAgICAgICAgICAgICAgICAgICAgICAgYm9keUNvbmZpZy5zaXplLnB1c2goc2l6ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBib2R5Q29uZmlnLnNpemUucHVzaChzaXplKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIF9Q
aHlzaWNzX3BoeXNpY3NJbXBvc3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQaHlz
aWNzSW1wb3N0b3IiXS5DeWxpbmRlckltcG9zdG9yOgorICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHNpemVYID0gY2hlY2tXaXRoRXBzaWxvbl8xKGV4dGVuZFNpemUueCkgLyAyOworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHNpemVZID0gY2hlY2tXaXRoRXBzaWxvbl8xKGV4dGVuZFNp
emUueSk7CisgICAgICAgICAgICAgICAgICAgICAgICBib2R5Q29uZmlnLnR5cGUucHVzaCgnY3ls
aW5kZXInKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKHNp
emVYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKHNpemVZ
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZHVlIHRvIHRoZSB3YXkgb2ltbyB3b3JrcyB3
aXRoIGNvbXBvdW5kcywgYWRkIG9uZSBtb3JlIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAg
ICAgYm9keUNvbmZpZy5zaXplLnB1c2goc2l6ZVkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBoeXNpY3NJbXBvc3RvciJdLlBsYW5lSW1w
b3N0b3I6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0ltcG9zdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlBoeXNpY3NJbXBvc3RvciJdLkJveEltcG9z
dG9yOgorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHNpemVYID0gY2hlY2tXaXRoRXBzaWxvbl8xKGV4dGVuZFNpemUueCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgc2l6ZVkgPSBjaGVja1dpdGhFcHNpbG9uXzEoZXh0ZW5kU2l6
ZS55KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplWiA9IGNoZWNrV2l0aEVwc2ls
b25fMShleHRlbmRTaXplLnopOworICAgICAgICAgICAgICAgICAgICAgICAgYm9keUNvbmZpZy50
eXBlLnB1c2goJ2JveCcpOworICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAoaSA9PT0gaW1w
b3N0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKHNp
emVYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKHNpemVZ
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKHNpemVaKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgIGJvZHlDb25maWcuc2l6ZS5wdXNoKDAsMCwwKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vYWN0dWFsbHkgbm90IG5lZWRlZCwgYnV0IGhleS4uLgor
ICAgICAgICAgICAgICAgIGkub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbiA9IG9sZFF1YXRlcm5p
b247CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGltcG9zdG9yLnBoeXNpY3NCb2R5ID0g
dGhpcy53b3JsZC5hZGQoYm9keUNvbmZpZyk7CisgICAgICAgICAgICAvLyBzZXQgdGhlIHF1YXRl
cm5pb24sIGlnbm9yaW5nIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgKGV1bGVyKSByb3RhdGlvbgor
ICAgICAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkucmVzZXRRdWF0ZXJuaW9uKGdsb2JhbFF1
YXRlcm5pb25fMSk7CisgICAgICAgICAgICAvLyB1cGRhdGUgd2l0aCBkZWx0YSAwLCBzbyB0aGUg
Ym9keSB3aWxsIHJldmVpdmUgdGhlIG5ldyByb3RhdGlvbi4KKyAgICAgICAgICAgIGltcG9zdG9y
LnBoeXNpY3NCb2R5LnVwZGF0ZVBvc2l0aW9uKDApOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgdGhpcy5fdG1wUG9zaXRpb25WZWN0b3IuY29weUZyb21GbG9hdHMoMCwg
MCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgaW1wb3N0b3Iuc2V0RGVsdGFQb3NpdGlvbih0aGlz
Ll90bXBQb3NpdGlvblZlY3Rvcik7CisgICAgICAgIC8vdGhpcy5fdG1wUG9zaXRpb25WZWN0b3Iu
YWRkSW5QbGFjZShpbXBvc3Rvci5tZXNoLmdldEJvdW5kaW5nSW5mbygpLmJvdW5kaW5nQm94LmNl
bnRlcik7CisgICAgICAgIC8vdGhpcy5zZXRQaHlzaWNzQm9keVRyYW5zZm9ybWF0aW9uKGltcG9z
dG9yLCB0aGlzLl90bXBQb3NpdGlvblZlY3RvciwgaW1wb3N0b3IubWVzaC5yb3RhdGlvblF1YXRl
cm5pb24pOworICAgIH07CisgICAgT2ltb0pTUGx1Z2luLnByb3RvdHlwZS5yZW1vdmVQaHlzaWNz
Qm9keSA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICAvL2ltcG9zdG9yLnBoeXNpY3NC
b2R5LmRpc3Bvc2UoKTsKKyAgICAgICAgLy9TYW1lIGFzIDogKG9sZGVyIG9pbW8gdmVyc2lvbnMp
CisgICAgICAgIHRoaXMud29ybGQucmVtb3ZlUmlnaWRCb2R5KGltcG9zdG9yLnBoeXNpY3NCb2R5
KTsKKyAgICB9OworICAgIE9pbW9KU1BsdWdpbi5wcm90b3R5cGUuZ2VuZXJhdGVKb2ludCA9IGZ1
bmN0aW9uIChpbXBvc3RvckpvaW50KSB7CisgICAgICAgIHZhciBtYWluQm9keSA9IGltcG9zdG9y
Sm9pbnQubWFpbkltcG9zdG9yLnBoeXNpY3NCb2R5OworICAgICAgICB2YXIgY29ubmVjdGVkQm9k
eSA9IGltcG9zdG9ySm9pbnQuY29ubmVjdGVkSW1wb3N0b3IucGh5c2ljc0JvZHk7CisgICAgICAg
IGlmICghbWFpbkJvZHkgfHwgIWNvbm5lY3RlZEJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB2YXIgam9pbnREYXRhID0gaW1wb3N0b3JKb2ludC5qb2ludC5q
b2ludERhdGE7CisgICAgICAgIHZhciBvcHRpb25zID0gam9pbnREYXRhLm5hdGl2ZVBhcmFtcyB8
fCB7fTsKKyAgICAgICAgdmFyIHR5cGU7CisgICAgICAgIHZhciBuYXRpdmVKb2ludERhdGEgPSB7
CisgICAgICAgICAgICBib2R5MTogbWFpbkJvZHksCisgICAgICAgICAgICBib2R5MjogY29ubmVj
dGVkQm9keSwKKyAgICAgICAgICAgIGF4ZTE6IG9wdGlvbnMuYXhlMSB8fCAoam9pbnREYXRhLm1h
aW5BeGlzID8gam9pbnREYXRhLm1haW5BeGlzLmFzQXJyYXkoKSA6IG51bGwpLAorICAgICAgICAg
ICAgYXhlMjogb3B0aW9ucy5heGUyIHx8IChqb2ludERhdGEuY29ubmVjdGVkQXhpcyA/IGpvaW50
RGF0YS5jb25uZWN0ZWRBeGlzLmFzQXJyYXkoKSA6IG51bGwpLAorICAgICAgICAgICAgcG9zMTog
b3B0aW9ucy5wb3MxIHx8IChqb2ludERhdGEubWFpblBpdm90ID8gam9pbnREYXRhLm1haW5QaXZv
dC5hc0FycmF5KCkgOiBudWxsKSwKKyAgICAgICAgICAgIHBvczI6IG9wdGlvbnMucG9zMiB8fCAo
am9pbnREYXRhLmNvbm5lY3RlZFBpdm90ID8gam9pbnREYXRhLmNvbm5lY3RlZFBpdm90LmFzQXJy
YXkoKSA6IG51bGwpLAorICAgICAgICAgICAgbWluOiBvcHRpb25zLm1pbiwKKyAgICAgICAgICAg
IG1heDogb3B0aW9ucy5tYXgsCisgICAgICAgICAgICBjb2xsaXNpb246IG9wdGlvbnMuY29sbGlz
aW9uIHx8IGpvaW50RGF0YS5jb2xsaXNpb24sCisgICAgICAgICAgICBzcHJpbmc6IG9wdGlvbnMu
c3ByaW5nLAorICAgICAgICAgICAgLy9zdXBwb3J0aW5nIG9sZGVyIHZlcnNpb24gb2YgT2ltbwor
ICAgICAgICAgICAgd29ybGQ6IHRoaXMud29ybGQKKyAgICAgICAgfTsKKyAgICAgICAgc3dpdGNo
IChpbXBvc3RvckpvaW50LmpvaW50LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3Nf
cGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBoeXNpY3NKb2ludCJd
LkJhbGxBbmRTb2NrZXRKb2ludDoKKyAgICAgICAgICAgICAgICB0eXBlID0gImpvaW50QmFsbCI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNp
Y3NKb2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQaHlzaWNzSm9pbnQiXS5TcHJp
bmdKb2ludDoKKyAgICAgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siTG9nZ2VyIl0uV2FybigiT0lNTy5qcyBkb2Vzbid0IHN1cHBvcnQgU3ByaW5n
IENvbnN0cmFpbnQuIFNpbXVsYXRpbmcgdXNpbmcgRGlzdGFuY2VKb2ludCBpbnN0ZWFkIik7Cisg
ICAgICAgICAgICAgICAgdmFyIHNwcmluZ0RhdGEgPSBqb2ludERhdGE7CisgICAgICAgICAgICAg
ICAgbmF0aXZlSm9pbnREYXRhLm1pbiA9IHNwcmluZ0RhdGEubGVuZ3RoIHx8IG5hdGl2ZUpvaW50
RGF0YS5taW47CisgICAgICAgICAgICAgICAgLy9NYXggc2hvdWxkIGFsc28gYmUgc2V0LCBqdXN0
IG1ha2Ugc3VyZSBpdCBpcyBhdCBsZWFzdCBtaW4KKyAgICAgICAgICAgICAgICBuYXRpdmVKb2lu
dERhdGEubWF4ID0gTWF0aC5tYXgobmF0aXZlSm9pbnREYXRhLm1pbiwgbmF0aXZlSm9pbnREYXRh
Lm1heCk7CisgICAgICAgICAgICBjYXNlIF9QaHlzaWNzX3BoeXNpY3NKb2ludF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJQaHlzaWNzSm9pbnQiXS5EaXN0YW5jZUpvaW50OgorICAgICAg
ICAgICAgICAgIHR5cGUgPSAiam9pbnREaXN0YW5jZSI7CisgICAgICAgICAgICAgICAgbmF0aXZl
Sm9pbnREYXRhLm1heCA9IGpvaW50RGF0YS5tYXhEaXN0YW5jZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNpY3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlBoeXNpY3NKb2ludCJdLlByaXNtYXRpY0pvaW50OgorICAgICAg
ICAgICAgICAgIHR5cGUgPSAiam9pbnRQcmlzbWUiOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBfUGh5c2ljc19waHlzaWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siUGh5c2ljc0pvaW50Il0uU2xpZGVySm9pbnQ6CisgICAgICAgICAgICAgICAg
dHlwZSA9ICJqb2ludFNsaWRlIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgX1BoeXNpY3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlBoeXNpY3NKb2ludCJdLldoZWVsSm9pbnQ6CisgICAgICAgICAgICAgICAgdHlwZSA9ICJqb2lu
dFdoZWVsIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgX1BoeXNp
Y3NfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBoeXNpY3NKb2lu
dCJdLkhpbmdlSm9pbnQ6CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHR5
cGUgPSAiam9pbnRIaW5nZSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgbmF0aXZlSm9pbnREYXRhLnR5cGUgPSB0eXBlOworICAgICAgICBpbXBvc3RvckpvaW50
LmpvaW50LnBoeXNpY3NKb2ludCA9IHRoaXMud29ybGQuYWRkKG5hdGl2ZUpvaW50RGF0YSk7Cisg
ICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLnJlbW92ZUpvaW50ID0gZnVuY3Rpb24g
KGltcG9zdG9ySm9pbnQpIHsKKyAgICAgICAgLy9CdWcgaW4gT2ltbyBwcmV2ZW50cyB1cyBmcm9t
IGRpc3Bvc2luZyBhIGpvaW50IGluIHRoZSBwbGF5Z3JvdW5kCisgICAgICAgIC8vam9pbnQuam9p
bnQucGh5c2ljc0pvaW50LmRpc3Bvc2UoKTsKKyAgICAgICAgLy9TbyB3ZSB3aWxsIGJydXRlZm9y
Y2UgaXQhCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aGlzLndvcmxkLnJlbW92ZUpvaW50
KGltcG9zdG9ySm9pbnQuam9pbnQucGh5c2ljc0pvaW50KTsKKyAgICAgICAgfQorICAgICAgICBj
YXRjaCAoZSkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIkxvZ2dlciJdLldhcm4oZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIE9pbW9K
U1BsdWdpbi5wcm90b3R5cGUuaXNTdXBwb3J0ZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLkJKU09JTU8gIT09IHVuZGVmaW5lZDsKKyAgICB9OworICAgIE9pbW9KU1BsdWdp
bi5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Gcm9tUGh5c2ljc0JvZHkgPSBmdW5jdGlvbiAo
aW1wb3N0b3IpIHsKKyAgICAgICAgaWYgKCFpbXBvc3Rvci5waHlzaWNzQm9keS5zbGVlcGluZykg
eworICAgICAgICAgICAgLy9UT0RPIGNoZWNrIHRoYXQKKyAgICAgICAgICAgIC8qaWYgKGltcG9z
dG9yLnBoeXNpY3NCb2R5LnNoYXBlcy5uZXh0KSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmVu
dFNoYXBlID0gdGhpcy5fZ2V0TGFzdFNoYXBlKGltcG9zdG9yLnBoeXNpY3NCb2R5KTsKKyAgICAg
ICAgICAgICAgICBpbXBvc3Rvci5vYmplY3QucG9zaXRpb24uY29weUZyb20ocGFyZW50U2hhcGUu
cG9zaXRpb24pOworICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHBhcmVudFNoYXBlLnBvc2l0
aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Ki8KKyAgICAgICAgICAgIGltcG9zdG9yLm9iamVj
dC5wb3NpdGlvbi5jb3B5RnJvbShpbXBvc3Rvci5waHlzaWNzQm9keS5nZXRQb3NpdGlvbigpKTsK
KyAgICAgICAgICAgIC8vfQorICAgICAgICAgICAgaWYgKGltcG9zdG9yLm9iamVjdC5yb3RhdGlv
blF1YXRlcm5pb24pIHsKKyAgICAgICAgICAgICAgICBpbXBvc3Rvci5vYmplY3Qucm90YXRpb25R
dWF0ZXJuaW9uLmNvcHlGcm9tKGltcG9zdG9yLnBoeXNpY3NCb2R5LmdldFF1YXRlcm5pb24oKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIE9pbW9KU1BsdWdpbi5wcm90
b3R5cGUuc2V0UGh5c2ljc0JvZHlUcmFuc2Zvcm1hdGlvbiA9IGZ1bmN0aW9uIChpbXBvc3Rvciwg
bmV3UG9zaXRpb24sIG5ld1JvdGF0aW9uKSB7CisgICAgICAgIHZhciBib2R5ID0gaW1wb3N0b3Iu
cGh5c2ljc0JvZHk7CisgICAgICAgIGJvZHkucG9zaXRpb24uY29weShuZXdQb3NpdGlvbik7Cisg
ICAgICAgIGJvZHkub3JpZW50YXRpb24uY29weShuZXdSb3RhdGlvbik7CisgICAgICAgIGJvZHku
c3luY1NoYXBlcygpOworICAgICAgICBib2R5LmF3YWtlKCk7CisgICAgfTsKKyAgICAvKnByaXZh
dGUgX2dldExhc3RTaGFwZShib2R5OiBhbnkpOiBhbnkgeworICAgICAgICB2YXIgbGFzdFNoYXBl
ID0gYm9keS5zaGFwZXM7CisgICAgICAgIHdoaWxlIChsYXN0U2hhcGUubmV4dCkgeworICAgICAg
ICAgICAgbGFzdFNoYXBlID0gbGFzdFNoYXBlLm5leHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGxhc3RTaGFwZTsKKyAgICB9Ki8KKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLnNldExp
bmVhclZlbG9jaXR5ID0gZnVuY3Rpb24gKGltcG9zdG9yLCB2ZWxvY2l0eSkgeworICAgICAgICBp
bXBvc3Rvci5waHlzaWNzQm9keS5saW5lYXJWZWxvY2l0eS5jb3B5KHZlbG9jaXR5KTsKKyAgICB9
OworICAgIE9pbW9KU1BsdWdpbi5wcm90b3R5cGUuc2V0QW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rp
b24gKGltcG9zdG9yLCB2ZWxvY2l0eSkgeworICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5h
bmd1bGFyVmVsb2NpdHkuY29weSh2ZWxvY2l0eSk7CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4u
cHJvdG90eXBlLmdldExpbmVhclZlbG9jaXR5ID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAg
ICAgIHZhciB2ID0gaW1wb3N0b3IucGh5c2ljc0JvZHkubGluZWFyVmVsb2NpdHk7CisgICAgICAg
IGlmICghdikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVjdG9yMyJdKHYueCwgdi55LCB2LnopOworICAgIH07CisgICAgT2ltb0pTUGx1Z2luLnBy
b3RvdHlwZS5nZXRBbmd1bGFyVmVsb2NpdHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAg
ICAgdmFyIHYgPSBpbXBvc3Rvci5waHlzaWNzQm9keS5hbmd1bGFyVmVsb2NpdHk7CisgICAgICAg
IGlmICghdikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siVmVjdG9yMyJdKHYueCwgdi55LCB2LnopOworICAgIH07CisgICAgT2ltb0pTUGx1Z2luLnBy
b3RvdHlwZS5zZXRCb2R5TWFzcyA9IGZ1bmN0aW9uIChpbXBvc3RvciwgbWFzcykgeworICAgICAg
ICB2YXIgc3RhdGljQm9keSA9IG1hc3MgPT09IDA7CisgICAgICAgIC8vdGhpcyB3aWxsIGFjdHVh
bGx5IHNldCB0aGUgYm9keSdzIGRlbnNpdHkgYW5kIG5vdCBpdHMgbWFzcy4KKyAgICAgICAgLy9C
dXQgdGhpcyBpcyBob3cgb2ltbyB0cmVhdHMgdGhlIG1hc3MgdmFyaWFibGUuCisgICAgICAgIGlt
cG9zdG9yLnBoeXNpY3NCb2R5LnNoYXBlcy5kZW5zaXR5ID0gc3RhdGljQm9keSA/IDEgOiBtYXNz
OworICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5zZXR1cE1hc3Moc3RhdGljQm9keSA/IDB4
MiA6IDB4MSk7CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLmdldEJvZHlNYXNz
ID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIHJldHVybiBpbXBvc3Rvci5waHlzaWNz
Qm9keS5zaGFwZXMuZGVuc2l0eTsKKyAgICB9OworICAgIE9pbW9KU1BsdWdpbi5wcm90b3R5cGUu
Z2V0Qm9keUZyaWN0aW9uID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIHJldHVybiBp
bXBvc3Rvci5waHlzaWNzQm9keS5zaGFwZXMuZnJpY3Rpb247CisgICAgfTsKKyAgICBPaW1vSlNQ
bHVnaW4ucHJvdG90eXBlLnNldEJvZHlGcmljdGlvbiA9IGZ1bmN0aW9uIChpbXBvc3RvciwgZnJp
Y3Rpb24pIHsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0JvZHkuc2hhcGVzLmZyaWN0aW9uID0g
ZnJpY3Rpb247CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLmdldEJvZHlSZXN0
aXR1dGlvbiA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICByZXR1cm4gaW1wb3N0b3Iu
cGh5c2ljc0JvZHkuc2hhcGVzLnJlc3RpdHV0aW9uOworICAgIH07CisgICAgT2ltb0pTUGx1Z2lu
LnByb3RvdHlwZS5zZXRCb2R5UmVzdGl0dXRpb24gPSBmdW5jdGlvbiAoaW1wb3N0b3IsIHJlc3Rp
dHV0aW9uKSB7CisgICAgICAgIGltcG9zdG9yLnBoeXNpY3NCb2R5LnNoYXBlcy5yZXN0aXR1dGlv
biA9IHJlc3RpdHV0aW9uOworICAgIH07CisgICAgT2ltb0pTUGx1Z2luLnByb3RvdHlwZS5zbGVl
cEJvZHkgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgaW1wb3N0b3IucGh5c2ljc0Jv
ZHkuc2xlZXAoKTsKKyAgICB9OworICAgIE9pbW9KU1BsdWdpbi5wcm90b3R5cGUud2FrZVVwQm9k
eSA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBpbXBvc3Rvci5waHlzaWNzQm9keS5h
d2FrZSgpOworICAgIH07CisgICAgT2ltb0pTUGx1Z2luLnByb3RvdHlwZS51cGRhdGVEaXN0YW5j
ZUpvaW50ID0gZnVuY3Rpb24gKGpvaW50LCBtYXhEaXN0YW5jZSwgbWluRGlzdGFuY2UpIHsKKyAg
ICAgICAgam9pbnQucGh5c2ljc0pvaW50LmxpbWl0TW90b3IudXBwZXJMaW1pdCA9IG1heERpc3Rh
bmNlOworICAgICAgICBpZiAobWluRGlzdGFuY2UgIT09IHZvaWQgMCkgeworICAgICAgICAgICAg
am9pbnQucGh5c2ljc0pvaW50LmxpbWl0TW90b3IubG93ZXJMaW1pdCA9IG1pbkRpc3RhbmNlOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLnNldE1vdG9yID0g
ZnVuY3Rpb24gKGpvaW50LCBzcGVlZCwgZm9yY2UsIG1vdG9ySW5kZXgpIHsKKyAgICAgICAgaWYg
KGZvcmNlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJMb2dnZXIiXS5XYXJuKCJPaW1vSlMgcGx1Z2luIGN1cnJl
bnRseSBoYXMgdW5leHBlY3RlZCBiZWhhdmlvciB3aGVuIHVzaW5nIHNldE1vdG9yIHdpdGggZm9y
Y2UgcGFyYW1ldGVyIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBm
b3JjZSA9IDFlNjsKKyAgICAgICAgfQorICAgICAgICBzcGVlZCAqPSAtMTsKKyAgICAgICAgLy9U
T0RPIHNlcGFyYXRlIHJvdGF0aW9uYWwgYW5kIHRyYW5zYXRpb25hbCBtb3RvcnMuCisgICAgICAg
IHZhciBtb3RvciA9IG1vdG9ySW5kZXggPyBqb2ludC5waHlzaWNzSm9pbnQucm90YXRpb25hbExp
bWl0TW90b3IyIDogam9pbnQucGh5c2ljc0pvaW50LnJvdGF0aW9uYWxMaW1pdE1vdG9yMSB8fCBq
b2ludC5waHlzaWNzSm9pbnQucm90YXRpb25hbExpbWl0TW90b3IgfHwgam9pbnQucGh5c2ljc0pv
aW50LmxpbWl0TW90b3I7CisgICAgICAgIGlmIChtb3RvcikgeworICAgICAgICAgICAgbW90b3Iu
c2V0TW90b3Ioc3BlZWQsIGZvcmNlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgT2ltb0pTUGx1
Z2luLnByb3RvdHlwZS5zZXRMaW1pdCA9IGZ1bmN0aW9uIChqb2ludCwgdXBwZXJMaW1pdCwgbG93
ZXJMaW1pdCwgbW90b3JJbmRleCkgeworICAgICAgICAvL1RPRE8gc2VwYXJhdGUgcm90YXRpb25h
bCBhbmQgdHJhbnNhdGlvbmFsIG1vdG9ycy4KKyAgICAgICAgdmFyIG1vdG9yID0gbW90b3JJbmRl
eCA/IGpvaW50LnBoeXNpY3NKb2ludC5yb3RhdGlvbmFsTGltaXRNb3RvcjIgOiBqb2ludC5waHlz
aWNzSm9pbnQucm90YXRpb25hbExpbWl0TW90b3IxIHx8IGpvaW50LnBoeXNpY3NKb2ludC5yb3Rh
dGlvbmFsTGltaXRNb3RvciB8fCBqb2ludC5waHlzaWNzSm9pbnQubGltaXRNb3RvcjsKKyAgICAg
ICAgaWYgKG1vdG9yKSB7CisgICAgICAgICAgICBtb3Rvci5zZXRMaW1pdCh1cHBlckxpbWl0LCBs
b3dlckxpbWl0ID09PSB2b2lkIDAgPyAtdXBwZXJMaW1pdCA6IGxvd2VyTGltaXQpOworICAgICAg
ICB9CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLnN5bmNNZXNoV2l0aEltcG9z
dG9yID0gZnVuY3Rpb24gKG1lc2gsIGltcG9zdG9yKSB7CisgICAgICAgIHZhciBib2R5ID0gaW1w
b3N0b3IucGh5c2ljc0JvZHk7CisgICAgICAgIG1lc2gucG9zaXRpb24ueCA9IGJvZHkucG9zaXRp
b24ueDsKKyAgICAgICAgbWVzaC5wb3NpdGlvbi55ID0gYm9keS5wb3NpdGlvbi55OworICAgICAg
ICBtZXNoLnBvc2l0aW9uLnogPSBib2R5LnBvc2l0aW9uLno7CisgICAgICAgIGlmIChtZXNoLnJv
dGF0aW9uUXVhdGVybmlvbikgeworICAgICAgICAgICAgbWVzaC5yb3RhdGlvblF1YXRlcm5pb24u
eCA9IGJvZHkub3JpZW50YXRpb24ueDsKKyAgICAgICAgICAgIG1lc2gucm90YXRpb25RdWF0ZXJu
aW9uLnkgPSBib2R5Lm9yaWVudGF0aW9uLnk7CisgICAgICAgICAgICBtZXNoLnJvdGF0aW9uUXVh
dGVybmlvbi56ID0gYm9keS5vcmllbnRhdGlvbi56OworICAgICAgICAgICAgbWVzaC5yb3RhdGlv
blF1YXRlcm5pb24udyA9IGJvZHkub3JpZW50YXRpb24uczsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgT2ltb0pTUGx1Z2luLnByb3RvdHlwZS5nZXRSYWRpdXMgPSBmdW5jdGlvbiAoaW1wb3N0b3Ip
IHsKKyAgICAgICAgcmV0dXJuIGltcG9zdG9yLnBoeXNpY3NCb2R5LnNoYXBlcy5yYWRpdXM7Cisg
ICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBlLmdldEJveFNpemVUb1JlZiA9IGZ1bmN0
aW9uIChpbXBvc3RvciwgcmVzdWx0KSB7CisgICAgICAgIHZhciBzaGFwZSA9IGltcG9zdG9yLnBo
eXNpY3NCb2R5LnNoYXBlczsKKyAgICAgICAgcmVzdWx0LnggPSBzaGFwZS5oYWxmV2lkdGggKiAy
OworICAgICAgICByZXN1bHQueSA9IHNoYXBlLmhhbGZIZWlnaHQgKiAyOworICAgICAgICByZXN1
bHQueiA9IHNoYXBlLmhhbGZEZXB0aCAqIDI7CisgICAgfTsKKyAgICBPaW1vSlNQbHVnaW4ucHJv
dG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMud29ybGQuY2xlYXIo
KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERvZXMgYSByYXljYXN0IGluIHRoZSBwaHlzaWNz
IHdvcmxkCisgICAgICogQHBhcmFtIGZyb20gd2hlbiBzaG91bGQgdGhlIHJheSBzdGFydD8KKyAg
ICAgKiBAcGFyYW0gdG8gd2hlbiBzaG91bGQgdGhlIHJheSBlbmQ/CisgICAgICogQHJldHVybnMg
UGh5c2ljc1JheWNhc3RSZXN1bHQKKyAgICAgKi8KKyAgICBPaW1vSlNQbHVnaW4ucHJvdG90eXBl
LnJheWNhc3QgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHsKKyAgICAgICAgX01pc2NfbG9nZ2VyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkxvZ2dlciJdLldhcm4oInJheWNhc3QgaXMgbm90
IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhlIE9pbW8gcGh5c2ljcyBwbHVnaW4iKTsKKyAgICAg
ICAgdGhpcy5fcmF5Y2FzdFJlc3VsdC5yZXNldChmcm9tLCB0byk7CisgICAgICAgIHJldHVybiB0
aGlzLl9yYXljYXN0UmVzdWx0OworICAgIH07CisgICAgcmV0dXJuIE9pbW9KU1BsdWdpbjsKK30o
KSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGh5c2ljcy9pbmRleC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUGh5c2ljcy9pbmRleC50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBQaHlzaWNzRW5naW5lLCBQaHlzaWNzRW5naW5lU2NlbmVDb21wb25lbnQsIFBoeXNpY3NIZWxw
ZXIsIFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnMsIFBoeXNpY3NVcGRyYWZ0RXZl
bnRPcHRpb25zLCBQaHlzaWNzVm9ydGV4RXZlbnRPcHRpb25zLCBQaHlzaWNzUmFkaWFsSW1wdWxz
ZUZhbGxvZmYsIFBoeXNpY3NVcGRyYWZ0TW9kZSwgUGh5c2ljc0ltcG9zdG9yLCBQaHlzaWNzSm9p
bnQsIERpc3RhbmNlSm9pbnQsIE1vdG9yRW5hYmxlZEpvaW50LCBIaW5nZUpvaW50LCBIaW5nZTJK
b2ludCwgQ2Fubm9uSlNQbHVnaW4sIEFtbW9KU1BsdWdpbiwgT2ltb0pTUGx1Z2luICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGh5c2ljc0VuZ2luZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9waHlz
aWNzRW5naW5lICovICIuL1BoeXNpY3MvcGh5c2ljc0VuZ2luZS50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJQaHlzaWNzRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGh5c2ljc0VuZ2luZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJQaHlzaWNzRW5naW5lIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3BoeXNpY3NFbmdpbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcGh5c2ljc0VuZ2lu
ZUNvbXBvbmVudCAqLyAiLi9QaHlzaWNzL3BoeXNpY3NFbmdpbmVDb21wb25lbnQudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiUGh5c2ljc0VuZ2luZVNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfcGh5c2ljc0VuZ2luZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJQaHlzaWNzRW5naW5lU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfcGh5c2ljc0hlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9waHlzaWNzSGVscGVyICovICIuL1BoeXNpY3MvcGh5
c2ljc0hlbHBlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzSGVscGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfcGh5c2ljc0hlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJQaHlzaWNzSGVscGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NSYWRpYWxF
eHBsb3Npb25FdmVudE9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9waHlzaWNzSGVscGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVu
dE9wdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1VwZHJhZnRFdmVudE9w
dGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9waHlzaWNzSGVscGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlBoeXNpY3NVcGRyYWZ0RXZlbnRPcHRpb25zIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlBoeXNpY3NWb3J0ZXhFdmVudE9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9waHlzaWNzSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBoeXNpY3NW
b3J0ZXhFdmVudE9wdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1JhZGlh
bEltcHVsc2VGYWxsb2ZmIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGh5c2ljc0hlbHBlcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQaHlzaWNzUmFkaWFsSW1wdWxzZUZhbGxvZmYiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1VwZHJhZnRNb2RlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfcGh5c2ljc0hlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQaHlz
aWNzVXBkcmFmdE1vZGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcGh5c2lj
c0ltcG9zdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL3BoeXNpY3NJbXBvc3RvciAqLyAiLi9QaHlzaWNzL3BoeXNpY3NJbXBvc3Rvci50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzSW1wb3N0b3IiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9waHlzaWNzSW1wb3N0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUGh5c2lj
c0ltcG9zdG9yIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BoeXNpY3NKb2lu
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9waHlzaWNzSm9pbnQgKi8gIi4vUGh5c2ljcy9waHlzaWNzSm9pbnQudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiUGh5c2ljc0pvaW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGh5c2ljc0pvaW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBoeXNpY3NKb2ludCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJEaXN0YW5jZUpvaW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcGh5c2lj
c0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkRpc3RhbmNlSm9pbnQiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiTW90b3JFbmFibGVkSm9pbnQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9waHlzaWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTW90b3JFbmFi
bGVkSm9pbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSGluZ2VKb2ludCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX3BoeXNpY3NKb2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJI
aW5nZUpvaW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhpbmdlMkpvaW50IiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfcGh5c2ljc0pvaW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
IkhpbmdlMkpvaW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BsdWdpbnNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vUGx1Z2lucy9pbmRleCAqLyAiLi9QaHlzaWNzL1BsdWdpbnMvaW5kZXgudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ2Fubm9uSlNQbHVnaW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QbHVn
aW5zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkNhbm5vbkpTUGx1Z2luIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFtbW9KU1BsdWdpbiIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX1BsdWdpbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQW1tb0pTUGx1
Z2luIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9pbW9KU1BsdWdpbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX1BsdWdpbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siT2lt
b0pTUGx1Z2luIl07IH0pOworCisKKworCisKKworCisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L1BoeXNpY3MvcGh5c2ljc0VuZ2luZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9QaHlzaWNzL3BoeXNpY3NFbmdpbmUudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBQaHlzaWNzRW5naW5lICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBo
eXNpY3NFbmdpbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBoeXNpY3NFbmdpbmU7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0
b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZXZUb29scyAqLyAiLi9NaXNjL2RldlRvb2xzLnRzIik7
CisKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGNvbnRyb2wgcGh5c2ljcyBlbmdpbmUKKyAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by91c2luZ190aGVfcGh5c2ljc19lbmdp
bmUKKyAqLwordmFyIFBoeXNpY3NFbmdpbmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBQaHlzaWNzIEVuZ2luZQorICAgICAqIEBw
YXJhbSBncmF2aXR5IGRlZmluZXMgdGhlIGdyYXZpdHkgdmVjdG9yIHVzZWQgYnkgdGhlIHNpbXVs
YXRpb24KKyAgICAgKiBAcGFyYW0gX3BoeXNpY3NQbHVnaW4gZGVmaW5lcyB0aGUgcGx1Z2luIHRv
IHVzZSAoQ2Fubm9uSlMgYnkgZGVmYXVsdCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQaHlzaWNz
RW5naW5lKGdyYXZpdHksIF9waHlzaWNzUGx1Z2luKSB7CisgICAgICAgIGlmIChfcGh5c2ljc1Bs
dWdpbiA9PT0gdm9pZCAwKSB7IF9waHlzaWNzUGx1Z2luID0gUGh5c2ljc0VuZ2luZS5EZWZhdWx0
UGx1Z2luRmFjdG9yeSgpOyB9CisgICAgICAgIHRoaXMuX3BoeXNpY3NQbHVnaW4gPSBfcGh5c2lj
c1BsdWdpbjsKKyAgICAgICAgdGhpcy5faW1wb3N0b3JzID0gW107CisgICAgICAgIHRoaXMuX2pv
aW50cyA9IFtdOworICAgICAgICBpZiAoIXRoaXMuX3BoeXNpY3NQbHVnaW4uaXNTdXBwb3J0ZWQo
KSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJQaHlzaWNzIEVuZ2luZSAiICsgdGhp
cy5fcGh5c2ljc1BsdWdpbi5uYW1lICsgIiBjYW5ub3QgYmUgZm91bmQuICIKKyAgICAgICAgICAg
ICAgICArICJQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGluY2x1ZGVkLiIpOworICAgICAgICB9Cisg
ICAgICAgIGdyYXZpdHkgPSBncmF2aXR5IHx8IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKDAsIC05LjgwNywgMCk7CisgICAgICAg
IHRoaXMuc2V0R3Jhdml0eShncmF2aXR5KTsKKyAgICAgICAgdGhpcy5zZXRUaW1lU3RlcCgpOwor
ICAgIH0KKyAgICAvKioKKyAgICAgKiBGYWN0b3J5IHVzZWQgdG8gY3JlYXRlIHRoZSBkZWZhdWx0
IHBoeXNpY3MgcGx1Z2luLgorICAgICAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHBoeXNpY3MgcGx1
Z2luCisgICAgICovCisgICAgUGh5c2ljc0VuZ2luZS5EZWZhdWx0UGx1Z2luRmFjdG9yeSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiQ2Fubm9uSlNQbHVnaW4iKTsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGdyYXZpdHkgdmVjdG9yIHVzZWQgYnkg
dGhlIHNpbXVsYXRpb24KKyAgICAgKiBAcGFyYW0gZ3Jhdml0eSBkZWZpbmVzIHRoZSBncmF2aXR5
IHZlY3RvciB0byB1c2UKKyAgICAgKi8KKyAgICBQaHlzaWNzRW5naW5lLnByb3RvdHlwZS5zZXRH
cmF2aXR5ID0gZnVuY3Rpb24gKGdyYXZpdHkpIHsKKyAgICAgICAgdGhpcy5ncmF2aXR5ID0gZ3Jh
dml0eTsKKyAgICAgICAgdGhpcy5fcGh5c2ljc1BsdWdpbi5zZXRHcmF2aXR5KHRoaXMuZ3Jhdml0
eSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHRpbWUgc3RlcCBvZiB0aGUgcGh5
c2ljcyBlbmdpbmUuCisgICAgICogRGVmYXVsdCBpcyAxLzYwLgorICAgICAqIFRvIHNsb3cgaXQg
ZG93biwgZW50ZXIgMS82MDAgZm9yIGV4YW1wbGUuCisgICAgICogVG8gc3BlZWQgaXQgdXAsIDEv
MzAKKyAgICAgKiBAcGFyYW0gbmV3VGltZVN0ZXAgZGVmaW5lcyB0aGUgbmV3IHRpbWVzdGVwIHRv
IGFwcGx5IHRvIHRoaXMgd29ybGQuCisgICAgICovCisgICAgUGh5c2ljc0VuZ2luZS5wcm90b3R5
cGUuc2V0VGltZVN0ZXAgPSBmdW5jdGlvbiAobmV3VGltZVN0ZXApIHsKKyAgICAgICAgaWYgKG5l
d1RpbWVTdGVwID09PSB2b2lkIDApIHsgbmV3VGltZVN0ZXAgPSAxIC8gNjA7IH0KKyAgICAgICAg
dGhpcy5fcGh5c2ljc1BsdWdpbi5zZXRUaW1lU3RlcChuZXdUaW1lU3RlcCk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXQgdGhlIHRpbWUgc3RlcCBvZiB0aGUgcGh5c2ljcyBlbmdpbmUuCisg
ICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdGltZSBzdGVwCisgICAgICovCisgICAgUGh5c2lj
c0VuZ2luZS5wcm90b3R5cGUuZ2V0VGltZVN0ZXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9waHlzaWNzUGx1Z2luLmdldFRpbWVTdGVwKCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZWxlYXNlIGFsbCByZXNvdXJjZXMKKyAgICAgKi8KKyAgICBQaHlzaWNzRW5naW5l
LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9pbXBvc3Rv
cnMuZm9yRWFjaChmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgICAgIGltcG9zdG9yLmRp
c3Bvc2UoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3BoeXNpY3NQbHVnaW4uZGlzcG9z
ZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgY3VycmVu
dCBwaHlzaWNzIHBsdWdpbgorICAgICAqIEByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4K
KyAgICAgKi8KKyAgICBQaHlzaWNzRW5naW5lLnByb3RvdHlwZS5nZXRQaHlzaWNzUGx1Z2luTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BoeXNpY3NQbHVnaW4ubmFt
ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZGluZyBhIG5ldyBpbXBvc3RvciBmb3IgdGhl
IGltcG9zdG9yIHRyYWNraW5nLgorICAgICAqIFRoaXMgd2lsbCBiZSBkb25lIGJ5IHRoZSBpbXBv
c3RvciBpdHNlbGYuCisgICAgICogQHBhcmFtIGltcG9zdG9yIHRoZSBpbXBvc3RvciB0byBhZGQK
KyAgICAgKi8KKyAgICBQaHlzaWNzRW5naW5lLnByb3RvdHlwZS5hZGRJbXBvc3RvciA9IGZ1bmN0
aW9uIChpbXBvc3RvcikgeworICAgICAgICBpbXBvc3Rvci51bmlxdWVJZCA9IHRoaXMuX2ltcG9z
dG9ycy5wdXNoKGltcG9zdG9yKTsKKyAgICAgICAgLy9pZiBubyBwYXJlbnQsIGdlbmVyYXRlIHRo
ZSBib2R5CisgICAgICAgIGlmICghaW1wb3N0b3IucGFyZW50KSB7CisgICAgICAgICAgICB0aGlz
Ll9waHlzaWNzUGx1Z2luLmdlbmVyYXRlUGh5c2ljc0JvZHkoaW1wb3N0b3IpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYW4gaW1wb3N0b3IgZnJvbSB0aGUgZW5n
aW5lLgorICAgICAqIFRoaXMgaW1wb3N0b3IgYW5kIGl0cyBtZXNoIHdpbGwgbm90IGxvbmdlciBi
ZSB1cGRhdGVkIGJ5IHRoZSBwaHlzaWNzIGVuZ2luZS4KKyAgICAgKiBAcGFyYW0gaW1wb3N0b3Ig
dGhlIGltcG9zdG9yIHRvIHJlbW92ZQorICAgICAqLworICAgIFBoeXNpY3NFbmdpbmUucHJvdG90
eXBlLnJlbW92ZUltcG9zdG9yID0gZnVuY3Rpb24gKGltcG9zdG9yKSB7CisgICAgICAgIHZhciBp
bmRleCA9IHRoaXMuX2ltcG9zdG9ycy5pbmRleE9mKGltcG9zdG9yKTsKKyAgICAgICAgaWYgKGlu
ZGV4ID4gLTEpIHsKKyAgICAgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5faW1wb3N0b3JzLnNw
bGljZShpbmRleCwgMSk7CisgICAgICAgICAgICAvL0lzIGl0IG5lZWRlZD8KKyAgICAgICAgICAg
IGlmIChyZW1vdmVkLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGh5c2ljc1Bs
dWdpbigpLnJlbW92ZVBoeXNpY3NCb2R5KGltcG9zdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQWRkIGEgam9pbnQgdG8gdGhlIHBoeXNpY3Mg
ZW5naW5lCisgICAgICogQHBhcmFtIG1haW5JbXBvc3RvciBkZWZpbmVzIHRoZSBtYWluIGltcG9z
dG9yIHRvIHdoaWNoIHRoZSBqb2ludCBpcyBhZGRlZC4KKyAgICAgKiBAcGFyYW0gY29ubmVjdGVk
SW1wb3N0b3IgZGVmaW5lcyB0aGUgaW1wb3N0b3IgdGhhdCBpcyBjb25uZWN0ZWQgdG8gdGhlIG1h
aW4gaW1wb3N0b3IgdXNpbmcgdGhpcyBqb2ludAorICAgICAqIEBwYXJhbSBqb2ludCBkZWZpbmVz
IHRoZSBqb2ludCB0aGF0IHdpbGwgY29ubmVjdCBib3RoIGltcG9zdG9ycy4KKyAgICAgKi8KKyAg
ICBQaHlzaWNzRW5naW5lLnByb3RvdHlwZS5hZGRKb2ludCA9IGZ1bmN0aW9uIChtYWluSW1wb3N0
b3IsIGNvbm5lY3RlZEltcG9zdG9yLCBqb2ludCkgeworICAgICAgICB2YXIgaW1wb3N0b3JKb2lu
dCA9IHsKKyAgICAgICAgICAgIG1haW5JbXBvc3RvcjogbWFpbkltcG9zdG9yLAorICAgICAgICAg
ICAgY29ubmVjdGVkSW1wb3N0b3I6IGNvbm5lY3RlZEltcG9zdG9yLAorICAgICAgICAgICAgam9p
bnQ6IGpvaW50CisgICAgICAgIH07CisgICAgICAgIGpvaW50LnBoeXNpY3NQbHVnaW4gPSB0aGlz
Ll9waHlzaWNzUGx1Z2luOworICAgICAgICB0aGlzLl9qb2ludHMucHVzaChpbXBvc3RvckpvaW50
KTsKKyAgICAgICAgdGhpcy5fcGh5c2ljc1BsdWdpbi5nZW5lcmF0ZUpvaW50KGltcG9zdG9ySm9p
bnQpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhIGpvaW50IGZyb20gdGhlIHNp
bXVsYXRpb24KKyAgICAgKiBAcGFyYW0gbWFpbkltcG9zdG9yIGRlZmluZXMgdGhlIGltcG9zdG9y
IHVzZWQgd2l0aCB0aGUgam9pbnQKKyAgICAgKiBAcGFyYW0gY29ubmVjdGVkSW1wb3N0b3IgZGVm
aW5lcyB0aGUgb3RoZXIgaW1wb3N0b3IgY29ubmVjdGVkIHRvIHRoZSBtYWluIG9uZSBieSB0aGUg
am9pbnQKKyAgICAgKiBAcGFyYW0gam9pbnQgZGVmaW5lcyB0aGUgam9pbnQgdG8gcmVtb3ZlCisg
ICAgICovCisgICAgUGh5c2ljc0VuZ2luZS5wcm90b3R5cGUucmVtb3ZlSm9pbnQgPSBmdW5jdGlv
biAobWFpbkltcG9zdG9yLCBjb25uZWN0ZWRJbXBvc3Rvciwgam9pbnQpIHsKKyAgICAgICAgdmFy
IG1hdGNoaW5nSm9pbnRzID0gdGhpcy5fam9pbnRzLmZpbHRlcihmdW5jdGlvbiAoaW1wb3N0b3JK
b2ludCkgeworICAgICAgICAgICAgcmV0dXJuIChpbXBvc3RvckpvaW50LmNvbm5lY3RlZEltcG9z
dG9yID09PSBjb25uZWN0ZWRJbXBvc3RvcgorICAgICAgICAgICAgICAgICYmIGltcG9zdG9ySm9p
bnQuam9pbnQgPT09IGpvaW50CisgICAgICAgICAgICAgICAgJiYgaW1wb3N0b3JKb2ludC5tYWlu
SW1wb3N0b3IgPT09IG1haW5JbXBvc3Rvcik7CisgICAgICAgIH0pOworICAgICAgICBpZiAobWF0
Y2hpbmdKb2ludHMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzUGx1Z2luLnJl
bW92ZUpvaW50KG1hdGNoaW5nSm9pbnRzWzBdKTsKKyAgICAgICAgICAgIC8vVE9ETyByZW1vdmUg
aXQgZnJvbSB0aGUgbGlzdCBhcyB3ZWxsCisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIENhbGxlZCBieSB0aGUgc2NlbmUuIE5vIG5lZWQgdG8gY2FsbCBpdC4KKyAgICAgKiBAcGFy
YW0gZGVsdGEgZGVmaW5lcyB0aGUgdGltZXNwYW0gYmV0d2VlbiBmcmFtZXMKKyAgICAgKi8KKyAg
ICBQaHlzaWNzRW5naW5lLnByb3RvdHlwZS5fc3RlcCA9IGZ1bmN0aW9uIChkZWx0YSkgeworICAg
ICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICAvL2NoZWNrIGlmIGFueSBtZXNoIGhhcyBu
byBib2R5IC8gcmVxdWlyZXMgYW4gdXBkYXRlCisgICAgICAgIHRoaXMuX2ltcG9zdG9ycy5mb3JF
YWNoKGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICAgICAgaWYgKGltcG9zdG9yLmlzQm9k
eUluaXRSZXF1aXJlZCgpKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3BoeXNpY3NQbHVnaW4u
Z2VuZXJhdGVQaHlzaWNzQm9keShpbXBvc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgICAgICBpZiAoZGVsdGEgPiAwLjEpIHsKKyAgICAgICAgICAgIGRlbHRhID0gMC4xOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRlbHRhIDw9IDApIHsKKyAgICAgICAgICAgIGRl
bHRhID0gMS4wIC8gNjAuMDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9waHlzaWNzUGx1Z2lu
LmV4ZWN1dGVTdGVwKGRlbHRhLCB0aGlzLl9pbXBvc3RvcnMpOworICAgIH07CisgICAgLyoqCisg
ICAgICogR2V0cyB0aGUgY3VycmVudCBwbHVnaW4gdXNlZCB0byBydW4gdGhlIHNpbXVsYXRpb24K
KyAgICAgKiBAcmV0dXJucyBjdXJyZW50IHBsdWdpbgorICAgICAqLworICAgIFBoeXNpY3NFbmdp
bmUucHJvdG90eXBlLmdldFBoeXNpY3NQbHVnaW4gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9waHlzaWNzUGx1Z2luOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0
aGUgbGlzdCBvZiBwaHlzaWMgaW1wb3N0b3JzCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgb2Yg
UGh5c2ljc0ltcG9zdG9yCisgICAgICovCisgICAgUGh5c2ljc0VuZ2luZS5wcm90b3R5cGUuZ2V0
SW1wb3N0b3JzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5faW1wb3N0b3Jz
OworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgaW1wb3N0b3IgZm9yIGEgcGh5c2lj
cyBlbmFibGVkIG9iamVjdAorICAgICAqIEBwYXJhbSBvYmplY3QgZGVmaW5lcyB0aGUgb2JqZWN0
IGltcGVyc29uYXRlZCBieSB0aGUgaW1wb3N0b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgUGh5c2lj
c0ltcG9zdG9yIG9yIG51bGwgaWYgbm90IGZvdW5kCisgICAgICovCisgICAgUGh5c2ljc0VuZ2lu
ZS5wcm90b3R5cGUuZ2V0SW1wb3N0b3JGb3JQaHlzaWNzT2JqZWN0ID0gZnVuY3Rpb24gKG9iamVj
dCkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ltcG9zdG9ycy5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2ltcG9zdG9yc1tpXS5vYmplY3QgPT09IG9i
amVjdCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbXBvc3RvcnNbaV07CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXRzIHRoZSBpbXBvc3RvciBmb3IgYSBwaHlzaWNzIGJvZHkgb2JqZWN0Cisg
ICAgICogQHBhcmFtIGJvZHkgZGVmaW5lcyBwaHlzaWNzIGJvZHkgdXNlZCBieSB0aGUgaW1wb3N0
b3IKKyAgICAgKiBAcmV0dXJucyB0aGUgUGh5c2ljc0ltcG9zdG9yIG9yIG51bGwgaWYgbm90IGZv
dW5kCisgICAgICovCisgICAgUGh5c2ljc0VuZ2luZS5wcm90b3R5cGUuZ2V0SW1wb3N0b3JXaXRo
UGh5c2ljc0JvZHkgPSBmdW5jdGlvbiAoYm9keSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMuX2ltcG9zdG9ycy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHRoaXMu
X2ltcG9zdG9yc1tpXS5waHlzaWNzQm9keSA9PT0gYm9keSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9pbXBvc3RvcnNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEb2VzIGEgcmF5Y2FzdCBp
biB0aGUgcGh5c2ljcyB3b3JsZAorICAgICAqIEBwYXJhbSBmcm9tIHdoZW4gc2hvdWxkIHRoZSBy
YXkgc3RhcnQ/CisgICAgICogQHBhcmFtIHRvIHdoZW4gc2hvdWxkIHRoZSByYXkgZW5kPworICAg
ICAqIEByZXR1cm5zIFBoeXNpY3NSYXljYXN0UmVzdWx0CisgICAgICovCisgICAgUGh5c2ljc0Vu
Z2luZS5wcm90b3R5cGUucmF5Y2FzdCA9IGZ1bmN0aW9uIChmcm9tLCB0bykgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fcGh5c2ljc1BsdWdpbi5yYXljYXN0KGZyb20sIHRvKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdsb2JhbCB2YWx1ZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHNtYWxsZXN0IG51
bWJlciBzdXBwb3J0ZWQgYnkgdGhlIHNpbXVsYXRpb24KKyAgICAgKi8KKyAgICBQaHlzaWNzRW5n
aW5lLkVwc2lsb24gPSAwLjAwMTsKKyAgICByZXR1cm4gUGh5c2ljc0VuZ2luZTsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGh5c2ljcy9waHlzaWNzRW5naW5lQ29tcG9uZW50
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL1BoeXNpY3MvcGh5c2ljc0VuZ2luZUNvbXBvbmVudC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IFBoeXNpY3NFbmdpbmVTY2VuZUNvbXBvbmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQaHlzaWNzRW5naW5lU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFBoeXNpY3NFbmdpbmVTY2VuZUNvbXBvbmVudDsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2Jz
ZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2Fic3RyYWN0TWVzaCAqLyAiLi9NZXNo
ZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lQ29t
cG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9zY2VuZUNvbXBvbmVudCAqLyAiLi9zY2VuZUNvbXBvbmVudC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vc2NlbmUgKi8gIi4vc2NlbmUudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfcGh5c2ljc0VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9waHlzaWNzRW5naW5lICovICIuL1Bo
eXNpY3MvcGh5c2ljc0VuZ2luZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9waHlz
aWNzSm9pbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vcGh5c2ljc0pvaW50ICovICIuL1BoeXNpY3MvcGh5c2ljc0pvaW50LnRzIik7CisK
KworCisKKworCisKKy8qKgorICogR2V0cyB0aGUgY3VycmVudCBwaHlzaWNzIGVuZ2luZQorICog
QHJldHVybnMgYSBJUGh5c2ljc0VuZ2luZSBvciBudWxsIGlmIG5vbmUgYXR0YWNoZWQKKyAqLwor
X3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjZW5lIl0ucHJvdG90eXBlLmdl
dFBoeXNpY3NFbmdpbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMuX3BoeXNpY3NF
bmdpbmU7Cit9OworLyoqCisgKiBFbmFibGVzIHBoeXNpY3MgdG8gdGhlIGN1cnJlbnQgc2NlbmUK
KyAqIEBwYXJhbSBncmF2aXR5IGRlZmluZXMgdGhlIHNjZW5lJ3MgZ3Jhdml0eSBmb3IgdGhlIHBo
eXNpY3MgZW5naW5lCisgKiBAcGFyYW0gcGx1Z2luIGRlZmluZXMgdGhlIHBoeXNpY3MgZW5naW5l
IHRvIGJlIHVzZWQuIGRlZmF1bHRzIHRvIE9pbW9KUy4KKyAqIEByZXR1cm4gYSBib29sZWFuIGlu
ZGljYXRpbmcgaWYgdGhlIHBoeXNpY3MgZW5naW5lIHdhcyBpbml0aWFsaXplZAorICovCitfc2Nl
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NlbmUiXS5wcm90b3R5cGUuZW5hYmxl
UGh5c2ljcyA9IGZ1bmN0aW9uIChncmF2aXR5LCBwbHVnaW4pIHsKKyAgICBpZiAoZ3Jhdml0eSA9
PT0gdm9pZCAwKSB7IGdyYXZpdHkgPSBudWxsOyB9CisgICAgaWYgKHRoaXMuX3BoeXNpY3NFbmdp
bmUpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIC8vIFJlZ2lzdGVyIHRoZSBj
b21wb25lbnQgdG8gdGhlIHNjZW5lCisgICAgdmFyIGNvbXBvbmVudCA9IHRoaXMuX2dldENvbXBv
bmVudChfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmVD
b21wb25lbnRDb25zdGFudHMiXS5OQU1FX1BIWVNJQ1NFTkdJTkUpOworICAgIGlmICghY29tcG9u
ZW50KSB7CisgICAgICAgIGNvbXBvbmVudCA9IG5ldyBQaHlzaWNzRW5naW5lU2NlbmVDb21wb25l
bnQodGhpcyk7CisgICAgICAgIHRoaXMuX2FkZENvbXBvbmVudChjb21wb25lbnQpOworICAgIH0K
KyAgICB0cnkgeworICAgICAgICB0aGlzLl9waHlzaWNzRW5naW5lID0gbmV3IF9waHlzaWNzRW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlBoeXNpY3NFbmdpbmUiXShncmF2aXR5
LCBwbHVnaW4pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2F0Y2ggKGUpIHsK
KyAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dl
ciJdLkVycm9yKGUubWVzc2FnZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9Owor
LyoqCisgKiBEaXNhYmxlcyBhbmQgZGlzcG9zZXMgdGhlIHBoeXNpY3MgZW5naW5lIGFzc29jaWF0
ZWQgd2l0aCB0aGUgc2NlbmUKKyAqLworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X19bIlNjZW5lIl0ucHJvdG90eXBlLmRpc2FibGVQaHlzaWNzRW5naW5lID0gZnVuY3Rpb24gKCkg
eworICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZGlzcG9zZSgpOworICAgIHRoaXMuX3BoeXNpY3NF
bmdpbmUgPSBudWxsOworfTsKKy8qKgorICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0
aGVyZSBpcyBhbiBhY3RpdmUgcGh5c2ljcyBlbmdpbmUKKyAqIEByZXR1cm5zIGEgYm9vbGVhbiBp
bmRpY2F0aW5nIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBwaHlzaWNzIGVuZ2luZQorICovCitfc2Nl
bmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NlbmUiXS5wcm90b3R5cGUuaXNQaHlz
aWNzRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gdGhpcy5fcGh5c2ljc0VuZ2lu
ZSAhPT0gdW5kZWZpbmVkOworfTsKKy8qKgorICogRGVsZXRlcyBhIHBoeXNpY3MgY29tcG91bmQg
aW1wb3N0b3IKKyAqIEBwYXJhbSBjb21wb3VuZCBkZWZpbmVzIHRoZSBjb21wb3VuZCB0byBkZWxl
dGUKKyAqLworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjZW5lIl0ucHJv
dG90eXBlLmRlbGV0ZUNvbXBvdW5kSW1wb3N0b3IgPSBmdW5jdGlvbiAoY29tcG91bmQpIHsKKyAg
ICB2YXIgbWVzaCA9IGNvbXBvdW5kLnBhcnRzWzBdLm1lc2g7CisgICAgaWYgKG1lc2gucGh5c2lj
c0ltcG9zdG9yKSB7CisgICAgICAgIG1lc2gucGh5c2ljc0ltcG9zdG9yLmRpc3Bvc2UoIC8qdHJ1
ZSovKTsKKyAgICAgICAgbWVzaC5waHlzaWNzSW1wb3N0b3IgPSBudWxsOworICAgIH0KK307Cisv
KiogQGhpZGRlbiAqLworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjZW5l
Il0ucHJvdG90eXBlLl9hZHZhbmNlUGh5c2ljc0VuZ2luZVN0ZXAgPSBmdW5jdGlvbiAoc3RlcCkg
eworICAgIGlmICh0aGlzLl9waHlzaWNzRW5naW5lKSB7CisgICAgICAgIHRoaXMub25CZWZvcmVQ
aHlzaWNzT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIHRoaXMuX3Bo
eXNpY3NFbmdpbmUuX3N0ZXAoc3RlcCAvIDEwMDApOworICAgICAgICB0aGlzLm9uQWZ0ZXJQaHlz
aWNzT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgfQorfTsKK09iamVjdC5k
ZWZpbmVQcm9wZXJ0eShfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJBYnN0cmFjdE1lc2giXS5wcm90b3R5cGUsICJwaHlzaWNzSW1wb3N0b3IiLCB7Cisg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9waHlzaWNzSW1wb3N0
b3I7CisgICAgfSwKKyAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy5fcGh5c2ljc0ltcG9zdG9yID09PSB2YWx1ZSkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9kaXNw
b3NlUGh5c2ljc09ic2VydmVyKSB7CisgICAgICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFi
bGUucmVtb3ZlKHRoaXMuX2Rpc3Bvc2VQaHlzaWNzT2JzZXJ2ZXIpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX3BoeXNpY3NJbXBvc3RvciA9IHZhbHVlOworICAgICAgICBpZiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2VQaHlzaWNzT2JzZXJ2ZXIgPSB0aGlzLm9uRGlzcG9z
ZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAvLyBQaHlzaWNz
CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLnBoeXNpY3NJbXBvc3RvcikgeworICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5waHlzaWNzSW1wb3N0b3IuZGlzcG9zZSggLyohZG9Ob3RSZWN1cnNl
Ki8pOworICAgICAgICAgICAgICAgICAgICBfdGhpcy5waHlzaWNzSW1wb3N0b3IgPSBudWxsOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfSwKKyAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorfSk7CisvKioKKyAq
IEdldHMgdGhlIGN1cnJlbnQgcGh5c2ljcyBpbXBvc3RvcgorICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vZmVhdHVyZXMvcGh5c2ljc19lbmdpbmUKKyAqIEByZXR1cm5zIGEgcGh5c2lj
cyBpbXBvc3RvciBvciBudWxsCisgKi8KK19NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIkFic3RyYWN0TWVzaCJdLnByb3RvdHlwZS5nZXRQaHlzaWNzSW1w
b3N0b3IgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMucGh5c2ljc0ltcG9zdG9yOwor
fTsKKy8qKgorICogQXBwbHkgYSBwaHlzaWMgaW1wdWxzZSB0byB0aGUgbWVzaAorICogQHBhcmFt
IGZvcmNlIGRlZmluZXMgdGhlIGZvcmNlIHRvIGFwcGx5CisgKiBAcGFyYW0gY29udGFjdFBvaW50
IGRlZmluZXMgd2hlcmUgdG8gYXBwbHkgdGhlIGZvcmNlCisgKiBAcmV0dXJucyB0aGUgY3VycmVu
dCBtZXNoCisgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vdXNpbmdfdGhl
X3BoeXNpY3NfZW5naW5lCisgKi8KK19NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkFic3RyYWN0TWVzaCJdLnByb3RvdHlwZS5hcHBseUltcHVsc2UgPSBm
dW5jdGlvbiAoZm9yY2UsIGNvbnRhY3RQb2ludCkgeworICAgIGlmICghdGhpcy5waHlzaWNzSW1w
b3N0b3IpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICAgIHRoaXMucGh5c2ljc0lt
cG9zdG9yLmFwcGx5SW1wdWxzZShmb3JjZSwgY29udGFjdFBvaW50KTsKKyAgICByZXR1cm4gdGhp
czsKK307CisvKioKKyAqIENyZWF0ZXMgYSBwaHlzaWMgam9pbnQgYmV0d2VlbiB0d28gbWVzaGVz
CisgKiBAcGFyYW0gb3RoZXJNZXNoIGRlZmluZXMgdGhlIG90aGVyIG1lc2ggdG8gdXNlCisgKiBA
cGFyYW0gcGl2b3QxIGRlZmluZXMgdGhlIHBpdm90IHRvIHVzZSBvbiB0aGlzIG1lc2gKKyAqIEBw
YXJhbSBwaXZvdDIgZGVmaW5lcyB0aGUgcGl2b3QgdG8gdXNlIG9uIHRoZSBvdGhlciBtZXNoCisg
KiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIGFkZGl0aW9uYWwgb3B0aW9ucyAoY2FuIGJlIHBsdWdp
biBkZXBlbmRlbnQpCisgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtZXNoCisgKiBAc2VlIGh0dHBz
Oi8vd3d3LmJhYnlsb25qcy1wbGF5Z3JvdW5kLmNvbS8jMEJTNVUwIzAKKyAqLworX01lc2hlc19h
YnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQWJzdHJhY3RNZXNoIl0u
cHJvdG90eXBlLnNldFBoeXNpY3NMaW5rV2l0aCA9IGZ1bmN0aW9uIChvdGhlck1lc2gsIHBpdm90
MSwgcGl2b3QyLCBvcHRpb25zKSB7CisgICAgaWYgKCF0aGlzLnBoeXNpY3NJbXBvc3RvciB8fCAh
b3RoZXJNZXNoLnBoeXNpY3NJbXBvc3RvcikgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
CisgICAgdGhpcy5waHlzaWNzSW1wb3N0b3IuY3JlYXRlSm9pbnQob3RoZXJNZXNoLnBoeXNpY3NJ
bXBvc3RvciwgX3BoeXNpY3NKb2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQaHlz
aWNzSm9pbnQiXS5IaW5nZUpvaW50LCB7CisgICAgICAgIG1haW5QaXZvdDogcGl2b3QxLAorICAg
ICAgICBjb25uZWN0ZWRQaXZvdDogcGl2b3QyLAorICAgICAgICBuYXRpdmVQYXJhbXM6IG9wdGlv
bnMKKyAgICB9KTsKKyAgICByZXR1cm4gdGhpczsKK307CisvKioKKyAqIERlZmluZXMgdGhlIHBo
eXNpY3MgZW5naW5lIHNjZW5lIGNvbXBvbmVudCByZXNwb25zaWJsZSB0byBtYW5hZ2UgYSBwaHlz
aWNzIGVuZ2luZQorICovCit2YXIgUGh5c2ljc0VuZ2luZVNjZW5lQ29tcG9uZW50ID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaW5z
dGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBmb3IgdGhlIGdpdmVuIHNjZW5lCisgICAgICogQHBhcmFt
IHNjZW5lIERlZmluZXMgdGhlIHNjZW5lIHRvIHJlZ2lzdGVyIHRoZSBjb21wb25lbnQgaW4KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBQaHlzaWNzRW5naW5lU2NlbmVDb21wb25lbnQoc2NlbmUpIHsK
KyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBj
b21wb25lbnQgbmFtZSBoZWxwZnVsIHRvIGlkZW50aWZ5IHRoZSBjb21wb25lbnQgaW4gdGhlIGxp
c3Qgb2Ygc2NlbmUgY29tcG9uZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubmFtZSA9
IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZUNvbXBv
bmVudENvbnN0YW50cyJdLk5BTUVfUEhZU0lDU0VOR0lORTsKKyAgICAgICAgdGhpcy5zY2VuZSA9
IHNjZW5lOworICAgICAgICB0aGlzLnNjZW5lLm9uQmVmb3JlUGh5c2ljc09ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgdGhpcy5zY2VuZS5vbkFmdGVyUGh5c2ljc09ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUgZnVuY3Rpb24gdXNlZCB0byBnZXQgdGhl
IGRldGVybWluaXN0aWMgZnJhbWUgdGltZQorICAgICAgICB0aGlzLnNjZW5lLmdldERldGVybWlu
aXN0aWNGcmFtZVRpbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuc2Nl
bmUuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuc2NlbmUu
X3BoeXNpY3NFbmdpbmUuZ2V0VGltZVN0ZXAoKSAqIDEwMDA7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gMTAwMC4wIC8gNjAuMDsKKyAgICAgICAgfTsKKyAgICB9CisgICAgLyoq
CisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25lbnQgaW4gYSBnaXZlbiBzY2VuZQorICAgICAq
LworICAgIFBoeXNpY3NFbmdpbmVTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVnaXN0ZXIgPSBm
dW5jdGlvbiAoKSB7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWJ1aWxkcyB0aGUgZWxlbWVu
dHMgcmVsYXRlZCB0byB0aGlzIGNvbXBvbmVudCBpbiBjYXNlIG9mCisgICAgICogY29udGV4dCBs
b3N0IGZvciBpbnN0YW5jZS4KKyAgICAgKi8KKyAgICBQaHlzaWNzRW5naW5lU2NlbmVDb21wb25l
bnQucHJvdG90eXBlLnJlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE5vdGhpbmcg
dG8gZG8gZm9yIHRoaXMgY29tcG9uZW50CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3Nl
cyB0aGUgY29tcG9uZW50IGFuZCB0aGUgYXNzb2NpYXRlZCByZXNzb3VyY2VzCisgICAgICovCisg
ICAgUGh5c2ljc0VuZ2luZVNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB0aGlzLnNjZW5lLm9uQmVmb3JlUGh5c2ljc09ic2VydmFibGUuY2xl
YXIoKTsKKyAgICAgICAgdGhpcy5zY2VuZS5vbkFmdGVyUGh5c2ljc09ic2VydmFibGUuY2xlYXIo
KTsKKyAgICAgICAgaWYgKHRoaXMuc2NlbmUuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAg
IHRoaXMuc2NlbmUuZGlzYWJsZVBoeXNpY3NFbmdpbmUoKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgcmV0dXJuIFBoeXNpY3NFbmdpbmVTY2VuZUNvbXBvbmVudDsKK30oKSk7CisKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vUGh5c2ljcy9waHlzaWNzSGVscGVyLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1BoeXNpY3MvcGh5c2ljc0hl
bHBlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFBoeXNpY3NIZWxwZXIsIFBoeXNpY3NSYWRpYWxFeHBsb3Npb25F
dmVudE9wdGlvbnMsIFBoeXNpY3NVcGRyYWZ0RXZlbnRPcHRpb25zLCBQaHlzaWNzVm9ydGV4RXZl
bnRPcHRpb25zLCBQaHlzaWNzUmFkaWFsSW1wdWxzZUZhbGxvZmYsIFBoeXNpY3NVcGRyYWZ0TW9k
ZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzSGVscGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBQaHlzaWNzSGVscGVyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnM7IH0pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUGh5c2ljc1VwZHJhZnRFdmVudE9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBoeXNp
Y3NVcGRyYWZ0RXZlbnRPcHRpb25zOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NWb3J0
ZXhFdmVudE9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBoeXNpY3NWb3J0ZXhFdmVudE9w
dGlvbnM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1JhZGlhbEltcHVsc2VGYWxsb2Zm
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBQaHlzaWNzUmFkaWFsSW1wdWxzZUZhbGxvZmY7IH0pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1VwZHJhZnRNb2RlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBQaHlzaWNzVXBkcmFmdE1vZGU7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0
c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlzYy9sb2dn
ZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01lc2hlc19CdWlsZGVyc19zcGhlcmVCdWlsZGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVp
bGRlcnMvc3BoZXJlQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvc3BoZXJlQnVpbGRlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfY3lsaW5kZXJC
dWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvY3lsaW5kZXJCdWlsZGVyICovICIuL01lc2hlcy9CdWls
ZGVycy9jeWxpbmRlckJ1aWxkZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ3Vs
bGluZ19yYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL0N1bGxpbmcvcmF5ICovICIuL0N1bGxpbmcvcmF5LnRzIik7CisKKworCisKKwor
CisvKioKKyAqIEEgaGVscGVyIGZvciBwaHlzaWNzIHNpbXVsYXRpb25zCisgKiBAc2VlIGh0dHBz
Oi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3VzaW5nX3RoZV9waHlzaWNzX2VuZ2luZSNmdXJ0
aGVyLWZ1bmN0aW9uYWxpdHktb2YtdGhlLWltcG9zdG9yLWNsYXNzCisgKi8KK3ZhciBQaHlzaWNz
SGVscGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIElu
aXRpYWxpemVzIHRoZSBQaHlzaWNzIGhlbHBlcgorICAgICAqIEBwYXJhbSBzY2VuZSBCYWJ5bG9u
LmpzIHNjZW5lCisgICAgICovCisgICAgZnVuY3Rpb24gUGh5c2ljc0hlbHBlcihzY2VuZSkgewor
ICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9waHlzaWNzRW5naW5l
ID0gdGhpcy5fc2NlbmUuZ2V0UGh5c2ljc0VuZ2luZSgpOworICAgICAgICBpZiAoIXRoaXMuX3Bo
eXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCdQaHlzaWNzIGVuZ2luZSBub3QgZW5hYmxlZC4g
UGxlYXNlIGVuYWJsZSB0aGUgcGh5c2ljcyBiZWZvcmUgeW91IGNhbiB1c2UgdGhlIG1ldGhvZHMu
Jyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgLyoqCisgICAg
ICogQXBwbGllcyBhIHJhZGlhbCBleHBsb3Npb24gaW1wdWxzZQorICAgICAqIEBwYXJhbSBvcmln
aW4gdGhlIG9yaWdpbiBvZiB0aGUgZXhwbG9zaW9uCisgICAgICogQHBhcmFtIHJhZGl1c09yRXZl
bnRPcHRpb25zIHRoZSByYWRpdXMgb3IgdGhlIG9wdGlvbnMgb2YgcmFkaWFsIGV4cGxvc2lvbgor
ICAgICAqIEBwYXJhbSBzdHJlbmd0aCB0aGUgZXhwbG9zaW9uIHN0cmVuZ3RoCisgICAgICogQHBh
cmFtIGZhbGxvZmYgcG9zc2libGUgb3B0aW9uczogQ29uc3RhbnQgJiBMaW5lYXIuIERlZmF1bHRz
IHRvIENvbnN0YW50CisgICAgICogQHJldHVybnMgQSBwaHlzaWNzIHJhZGlhbCBleHBsb3Npb24g
ZXZlbnQsIG9yIG51bGwKKyAgICAgKi8KKyAgICBQaHlzaWNzSGVscGVyLnByb3RvdHlwZS5hcHBs
eVJhZGlhbEV4cGxvc2lvbkltcHVsc2UgPSBmdW5jdGlvbiAob3JpZ2luLCByYWRpdXNPckV2ZW50
T3B0aW9ucywgc3RyZW5ndGgsIGZhbGxvZmYpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9waHlzaWNz
RW5naW5lKSB7CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siTG9nZ2VyIl0uV2FybignUGh5c2ljcyBlbmdpbmUgbm90IGVuYWJsZWQuIFBsZWFz
ZSBlbmFibGUgdGhlIHBoeXNpY3MgYmVmb3JlIHlvdSBjYWxsIHRoaXMgbWV0aG9kLicpOworICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGltcG9zdG9ycyA9
IHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0SW1wb3N0b3JzKCk7CisgICAgICAgIGlmIChpbXBvc3Rv
cnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodHlwZW9mIHJhZGl1c09yRXZlbnRPcHRpb25zID09PSAnbnVtYmVyJykgewor
ICAgICAgICAgICAgcmFkaXVzT3JFdmVudE9wdGlvbnMgPSBuZXcgUGh5c2ljc1JhZGlhbEV4cGxv
c2lvbkV2ZW50T3B0aW9ucygpOworICAgICAgICAgICAgcmFkaXVzT3JFdmVudE9wdGlvbnMucmFk
aXVzID0gcmFkaXVzT3JFdmVudE9wdGlvbnM7CisgICAgICAgICAgICByYWRpdXNPckV2ZW50T3B0
aW9ucy5zdHJlbmd0aCA9IHN0cmVuZ3RoIHx8IHJhZGl1c09yRXZlbnRPcHRpb25zLnN0cmVuZ3Ro
OworICAgICAgICAgICAgcmFkaXVzT3JFdmVudE9wdGlvbnMuZmFsbG9mZiA9IGZhbGxvZmYgfHwg
cmFkaXVzT3JFdmVudE9wdGlvbnMuZmFsbG9mZjsKKyAgICAgICAgfQorICAgICAgICB2YXIgZXZl
bnQgPSBuZXcgUGh5c2ljc1JhZGlhbEV4cGxvc2lvbkV2ZW50KHRoaXMuX3NjZW5lLCByYWRpdXNP
ckV2ZW50T3B0aW9ucyk7CisgICAgICAgIHZhciBhZmZlY3RlZEltcG9zdG9yc1dpdGhEYXRhID0g
QXJyYXkoKTsKKyAgICAgICAgaW1wb3N0b3JzLmZvckVhY2goZnVuY3Rpb24gKGltcG9zdG9yKSB7
CisgICAgICAgICAgICB2YXIgaW1wb3N0b3JIaXREYXRhID0gZXZlbnQuZ2V0SW1wb3N0b3JIaXRE
YXRhKGltcG9zdG9yLCBvcmlnaW4pOworICAgICAgICAgICAgaWYgKCFpbXBvc3RvckhpdERhdGEp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
bXBvc3Rvci5hcHBseUltcHVsc2UoaW1wb3N0b3JIaXREYXRhLmZvcmNlLCBpbXBvc3RvckhpdERh
dGEuY29udGFjdFBvaW50KTsKKyAgICAgICAgICAgIGFmZmVjdGVkSW1wb3N0b3JzV2l0aERhdGEu
cHVzaCh7CisgICAgICAgICAgICAgICAgaW1wb3N0b3I6IGltcG9zdG9yLAorICAgICAgICAgICAg
ICAgIGhpdERhdGE6IGltcG9zdG9ySGl0RGF0YSwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKyAgICAgICAgZXZlbnQudHJpZ2dlckFmZmVjdGVkSW1wb3N0b3JzQ2FsbGJhY2soYWZmZWN0
ZWRJbXBvc3RvcnNXaXRoRGF0YSk7CisgICAgICAgIGV2ZW50LmRpc3Bvc2UoZmFsc2UpOworICAg
ICAgICByZXR1cm4gZXZlbnQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBcHBsaWVzIGEgcmFk
aWFsIGV4cGxvc2lvbiBmb3JjZQorICAgICAqIEBwYXJhbSBvcmlnaW4gdGhlIG9yaWdpbiBvZiB0
aGUgZXhwbG9zaW9uCisgICAgICogQHBhcmFtIHJhZGl1c09yRXZlbnRPcHRpb25zIHRoZSByYWRp
dXMgb3IgdGhlIG9wdGlvbnMgb2YgcmFkaWFsIGV4cGxvc2lvbgorICAgICAqIEBwYXJhbSBzdHJl
bmd0aCB0aGUgZXhwbG9zaW9uIHN0cmVuZ3RoCisgICAgICogQHBhcmFtIGZhbGxvZmYgcG9zc2li
bGUgb3B0aW9uczogQ29uc3RhbnQgJiBMaW5lYXIuIERlZmF1bHRzIHRvIENvbnN0YW50CisgICAg
ICogQHJldHVybnMgQSBwaHlzaWNzIHJhZGlhbCBleHBsb3Npb24gZXZlbnQsIG9yIG51bGwKKyAg
ICAgKi8KKyAgICBQaHlzaWNzSGVscGVyLnByb3RvdHlwZS5hcHBseVJhZGlhbEV4cGxvc2lvbkZv
cmNlID0gZnVuY3Rpb24gKG9yaWdpbiwgcmFkaXVzT3JFdmVudE9wdGlvbnMsIHN0cmVuZ3RoLCBm
YWxsb2ZmKSB7CisgICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldh
cm4oJ1BoeXNpY3MgZW5naW5lIG5vdCBlbmFibGVkLiBQbGVhc2UgZW5hYmxlIHRoZSBwaHlzaWNz
IGJlZm9yZSB5b3UgY2FsbCB0aGUgUGh5c2ljc0hlbHBlci4nKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBpbXBvc3RvcnMgPSB0aGlzLl9waHlzaWNz
RW5naW5lLmdldEltcG9zdG9ycygpOworICAgICAgICBpZiAoaW1wb3N0b3JzLmxlbmd0aCA9PT0g
MCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5
cGVvZiByYWRpdXNPckV2ZW50T3B0aW9ucyA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgIHJh
ZGl1c09yRXZlbnRPcHRpb25zID0gbmV3IFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlv
bnMoKTsKKyAgICAgICAgICAgIHJhZGl1c09yRXZlbnRPcHRpb25zLnJhZGl1cyA9IHJhZGl1c09y
RXZlbnRPcHRpb25zOworICAgICAgICAgICAgcmFkaXVzT3JFdmVudE9wdGlvbnMuc3RyZW5ndGgg
PSBzdHJlbmd0aCB8fCByYWRpdXNPckV2ZW50T3B0aW9ucy5zdHJlbmd0aDsKKyAgICAgICAgICAg
IHJhZGl1c09yRXZlbnRPcHRpb25zLmZhbGxvZmYgPSBmYWxsb2ZmIHx8IHJhZGl1c09yRXZlbnRP
cHRpb25zLmZhbGxvZmY7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFBoeXNp
Y3NSYWRpYWxFeHBsb3Npb25FdmVudCh0aGlzLl9zY2VuZSwgcmFkaXVzT3JFdmVudE9wdGlvbnMp
OworICAgICAgICB2YXIgYWZmZWN0ZWRJbXBvc3RvcnNXaXRoRGF0YSA9IEFycmF5KCk7CisgICAg
ICAgIGltcG9zdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICAgICAg
dmFyIGltcG9zdG9ySGl0RGF0YSA9IGV2ZW50LmdldEltcG9zdG9ySGl0RGF0YShpbXBvc3Rvciwg
b3JpZ2luKTsKKyAgICAgICAgICAgIGlmICghaW1wb3N0b3JIaXREYXRhKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW1wb3N0b3IuYXBwbHlG
b3JjZShpbXBvc3RvckhpdERhdGEuZm9yY2UsIGltcG9zdG9ySGl0RGF0YS5jb250YWN0UG9pbnQp
OworICAgICAgICAgICAgYWZmZWN0ZWRJbXBvc3RvcnNXaXRoRGF0YS5wdXNoKHsKKyAgICAgICAg
ICAgICAgICBpbXBvc3RvcjogaW1wb3N0b3IsCisgICAgICAgICAgICAgICAgaGl0RGF0YTogaW1w
b3N0b3JIaXREYXRhLAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBldmVu
dC50cmlnZ2VyQWZmZWN0ZWRJbXBvc3RvcnNDYWxsYmFjayhhZmZlY3RlZEltcG9zdG9yc1dpdGhE
YXRhKTsKKyAgICAgICAgZXZlbnQuZGlzcG9zZShmYWxzZSk7CisgICAgICAgIHJldHVybiBldmVu
dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBncmF2aXRhdGlvbmFsIGZpZWxk
CisgICAgICogQHBhcmFtIG9yaWdpbiB0aGUgb3JpZ2luIG9mIHRoZSBleHBsb3Npb24KKyAgICAg
KiBAcGFyYW0gcmFkaXVzT3JFdmVudE9wdGlvbnMgdGhlIHJhZGl1cyBvciB0aGUgb3B0aW9ucyBv
ZiByYWRpYWwgZXhwbG9zaW9uCisgICAgICogQHBhcmFtIHN0cmVuZ3RoIHRoZSBleHBsb3Npb24g
c3RyZW5ndGgKKyAgICAgKiBAcGFyYW0gZmFsbG9mZiBwb3NzaWJsZSBvcHRpb25zOiBDb25zdGFu
dCAmIExpbmVhci4gRGVmYXVsdHMgdG8gQ29uc3RhbnQKKyAgICAgKiBAcmV0dXJucyBBIHBoeXNp
Y3MgZ3Jhdml0YXRpb25hbCBmaWVsZCBldmVudCwgb3IgbnVsbAorICAgICAqLworICAgIFBoeXNp
Y3NIZWxwZXIucHJvdG90eXBlLmdyYXZpdGF0aW9uYWxGaWVsZCA9IGZ1bmN0aW9uIChvcmlnaW4s
IHJhZGl1c09yRXZlbnRPcHRpb25zLCBzdHJlbmd0aCwgZmFsbG9mZikgeworICAgICAgICBpZiAo
IXRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5XYXJuKCdQaHlzaWNzIGVuZ2luZSBub3Qg
ZW5hYmxlZC4gUGxlYXNlIGVuYWJsZSB0aGUgcGh5c2ljcyBiZWZvcmUgeW91IGNhbGwgdGhlIFBo
eXNpY3NIZWxwZXIuJyk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgaW1wb3N0b3JzID0gdGhpcy5fcGh5c2ljc0VuZ2luZS5nZXRJbXBvc3RvcnMoKTsK
KyAgICAgICAgaWYgKGltcG9zdG9ycy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2YgcmFkaXVzT3JFdmVudE9wdGlv
bnMgPT09ICdudW1iZXInKSB7CisgICAgICAgICAgICByYWRpdXNPckV2ZW50T3B0aW9ucyA9IG5l
dyBQaHlzaWNzUmFkaWFsRXhwbG9zaW9uRXZlbnRPcHRpb25zKCk7CisgICAgICAgICAgICByYWRp
dXNPckV2ZW50T3B0aW9ucy5yYWRpdXMgPSByYWRpdXNPckV2ZW50T3B0aW9uczsKKyAgICAgICAg
ICAgIHJhZGl1c09yRXZlbnRPcHRpb25zLnN0cmVuZ3RoID0gc3RyZW5ndGggfHwgcmFkaXVzT3JF
dmVudE9wdGlvbnMuc3RyZW5ndGg7CisgICAgICAgICAgICByYWRpdXNPckV2ZW50T3B0aW9ucy5m
YWxsb2ZmID0gZmFsbG9mZiB8fCByYWRpdXNPckV2ZW50T3B0aW9ucy5mYWxsb2ZmOworICAgICAg
ICB9CisgICAgICAgIHZhciBldmVudCA9IG5ldyBQaHlzaWNzR3Jhdml0YXRpb25hbEZpZWxkRXZl
bnQodGhpcywgdGhpcy5fc2NlbmUsIG9yaWdpbiwgcmFkaXVzT3JFdmVudE9wdGlvbnMpOworICAg
ICAgICBldmVudC5kaXNwb3NlKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgIH07
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHBoeXNpY3MgdXBkcmFmdCBldmVudAorICAgICAq
IEBwYXJhbSBvcmlnaW4gdGhlIG9yaWdpbiBvZiB0aGUgdXBkcmFmdAorICAgICAqIEBwYXJhbSBy
YWRpdXNPckV2ZW50T3B0aW9ucyB0aGUgcmFkaXVzIG9yIHRoZSBvcHRpb25zIG9mIHRoZSB1cGRy
YWZ0CisgICAgICogQHBhcmFtIHN0cmVuZ3RoIHRoZSBzdHJlbmd0aCBvZiB0aGUgdXBkcmFmdAor
ICAgICAqIEBwYXJhbSBoZWlnaHQgdGhlIGhlaWdodCBvZiB0aGUgdXBkcmFmdAorICAgICAqIEBw
YXJhbSB1cGRyYWZ0TW9kZSBwb3NzaWJsZSBvcHRpb25zOiBDZW50ZXIgJiBQZXJwZW5kaWN1bGFy
LiBEZWZhdWx0cyB0byBDZW50ZXIKKyAgICAgKiBAcmV0dXJucyBBIHBoeXNpY3MgdXBkcmFmdCBl
dmVudCwgb3IgbnVsbAorICAgICAqLworICAgIFBoeXNpY3NIZWxwZXIucHJvdG90eXBlLnVwZHJh
ZnQgPSBmdW5jdGlvbiAob3JpZ2luLCByYWRpdXNPckV2ZW50T3B0aW9ucywgc3RyZW5ndGgsIGhl
aWdodCwgdXBkcmFmdE1vZGUpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9waHlzaWNzRW5naW5lKSB7
CisgICAgICAgICAgICBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
TG9nZ2VyIl0uV2FybignUGh5c2ljcyBlbmdpbmUgbm90IGVuYWJsZWQuIFBsZWFzZSBlbmFibGUg
dGhlIHBoeXNpY3MgYmVmb3JlIHlvdSBjYWxsIHRoZSBQaHlzaWNzSGVscGVyLicpOworICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3BoeXNpY3NF
bmdpbmUuZ2V0SW1wb3N0b3JzKCkubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZW9mIHJhZGl1c09yRXZlbnRPcHRpb25z
ID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgcmFkaXVzT3JFdmVudE9wdGlvbnMgPSBuZXcg
UGh5c2ljc1VwZHJhZnRFdmVudE9wdGlvbnMoKTsKKyAgICAgICAgICAgIHJhZGl1c09yRXZlbnRP
cHRpb25zLnJhZGl1cyA9IHJhZGl1c09yRXZlbnRPcHRpb25zOworICAgICAgICAgICAgcmFkaXVz
T3JFdmVudE9wdGlvbnMuc3RyZW5ndGggPSBzdHJlbmd0aCB8fCByYWRpdXNPckV2ZW50T3B0aW9u
cy5zdHJlbmd0aDsKKyAgICAgICAgICAgIHJhZGl1c09yRXZlbnRPcHRpb25zLmhlaWdodCA9IGhl
aWdodCB8fCByYWRpdXNPckV2ZW50T3B0aW9ucy5oZWlnaHQ7CisgICAgICAgICAgICByYWRpdXNP
ckV2ZW50T3B0aW9ucy51cGRyYWZ0TW9kZSA9IHVwZHJhZnRNb2RlIHx8IHJhZGl1c09yRXZlbnRP
cHRpb25zLnVwZHJhZnRNb2RlOworICAgICAgICB9CisgICAgICAgIHZhciBldmVudCA9IG5ldyBQ
aHlzaWNzVXBkcmFmdEV2ZW50KHRoaXMuX3NjZW5lLCBvcmlnaW4sIHJhZGl1c09yRXZlbnRPcHRp
b25zKTsKKyAgICAgICAgZXZlbnQuZGlzcG9zZShmYWxzZSk7CisgICAgICAgIHJldHVybiBldmVu
dDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBwaHlzaWNzIHZvcnRleCBldmVu
dAorICAgICAqIEBwYXJhbSBvcmlnaW4gdGhlIG9mIHRoZSB2b3J0ZXgKKyAgICAgKiBAcGFyYW0g
cmFkaXVzT3JFdmVudE9wdGlvbnMgdGhlIHJhZGl1cyBvciB0aGUgb3B0aW9ucyBvZiB0aGUgdm9y
dGV4CisgICAgICogQHBhcmFtIHN0cmVuZ3RoIHRoZSBzdHJlbmd0aCBvZiB0aGUgdm9ydGV4Cisg
ICAgICogQHBhcmFtIGhlaWdodCAgIHRoZSBoZWlnaHQgb2YgdGhlIHZvcnRleAorICAgICAqIEBy
ZXR1cm5zIGEgUGh5c2ljcyB2b3J0ZXggZXZlbnQsIG9yIG51bGwKKyAgICAgKiBBIHBoeXNpY3Mg
dm9ydGV4IGV2ZW50IG9yIG51bGwKKyAgICAgKi8KKyAgICBQaHlzaWNzSGVscGVyLnByb3RvdHlw
ZS52b3J0ZXggPSBmdW5jdGlvbiAob3JpZ2luLCByYWRpdXNPckV2ZW50T3B0aW9ucywgc3RyZW5n
dGgsIGhlaWdodCkgeworICAgICAgICBpZiAoIXRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAg
ICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIi
XS5XYXJuKCdQaHlzaWNzIGVuZ2luZSBub3QgZW5hYmxlZC4gUGxlYXNlIGVuYWJsZSB0aGUgcGh5
c2ljcyBiZWZvcmUgeW91IGNhbGwgdGhlIFBoeXNpY3NIZWxwZXIuJyk7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcGh5c2ljc0VuZ2luZS5n
ZXRJbXBvc3RvcnMoKS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2YgcmFkaXVzT3JFdmVudE9wdGlvbnMgPT09ICdu
dW1iZXInKSB7CisgICAgICAgICAgICByYWRpdXNPckV2ZW50T3B0aW9ucyA9IG5ldyBQaHlzaWNz
Vm9ydGV4RXZlbnRPcHRpb25zKCk7CisgICAgICAgICAgICByYWRpdXNPckV2ZW50T3B0aW9ucy5y
YWRpdXMgPSByYWRpdXNPckV2ZW50T3B0aW9uczsKKyAgICAgICAgICAgIHJhZGl1c09yRXZlbnRP
cHRpb25zLnN0cmVuZ3RoID0gc3RyZW5ndGggfHwgcmFkaXVzT3JFdmVudE9wdGlvbnMuc3RyZW5n
dGg7CisgICAgICAgICAgICByYWRpdXNPckV2ZW50T3B0aW9ucy5oZWlnaHQgPSBoZWlnaHQgfHwg
cmFkaXVzT3JFdmVudE9wdGlvbnMuaGVpZ2h0OworICAgICAgICB9CisgICAgICAgIHZhciBldmVu
dCA9IG5ldyBQaHlzaWNzVm9ydGV4RXZlbnQodGhpcy5fc2NlbmUsIG9yaWdpbiwgcmFkaXVzT3JF
dmVudE9wdGlvbnMpOworICAgICAgICBldmVudC5kaXNwb3NlKGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIGV2ZW50OworICAgIH07CisgICAgcmV0dXJuIFBoeXNpY3NIZWxwZXI7Cit9KCkpOworCisv
KioKKyAqIFJlcHJlc2VudHMgYSBwaHlzaWNzIHJhZGlhbCBleHBsb3Npb24gZXZlbnQKKyAqLwor
dmFyIFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyBhIHJhZGlhbCBleHBsb3Npb2luIGV2
ZW50CisgICAgICogQHBhcmFtIF9zY2VuZSBCYWJ5bG9uSlMgc2NlbmUKKyAgICAgKiBAcGFyYW0g
X29wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSB2b3J0ZXggZXZlbnQKKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBQaHlzaWNzUmFkaWFsRXhwbG9zaW9uRXZlbnQoX3NjZW5lLCBfb3B0aW9ucykgewor
ICAgICAgICB0aGlzLl9zY2VuZSA9IF9zY2VuZTsKKyAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9v
cHRpb25zOworICAgICAgICB0aGlzLl9kYXRhRmV0Y2hlZCA9IGZhbHNlOyAvLyBjaGVjayBpZiB0
aGUgZGF0YSBoYXMgYmVlbiBmZXRjaGVkLiBJZiBub3QsIGRvIGNsZWFudXAKKyAgICAgICAgdGhp
cy5fb3B0aW9ucyA9IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXNzaWdu
Il0oe30sIChuZXcgUGh5c2ljc1JhZGlhbEV4cGxvc2lvbkV2ZW50T3B0aW9ucygpKSwgdGhpcy5f
b3B0aW9ucyk7CisgICAgfQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGRhdGEgcmVsYXRl
ZCB0byB0aGUgcmFkaWFsIGV4cGxvc2lvbiBldmVudCAoc3BoZXJlKS4KKyAgICAgKiBAcmV0dXJu
cyBUaGUgcmFkaWFsIGV4cGxvc2lvbiBldmVudCBkYXRhCisgICAgICovCisgICAgUGh5c2ljc1Jh
ZGlhbEV4cGxvc2lvbkV2ZW50LnByb3RvdHlwZS5nZXREYXRhID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB0aGlzLl9kYXRhRmV0Y2hlZCA9IHRydWU7CisgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICBzcGhlcmU6IHRoaXMuX3NwaGVyZSwKKyAgICAgICAgfTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJldHVybnMgdGhlIGZvcmNlIGFuZCBjb250YWN0IHBvaW50IG9mIHRoZSBpbXBvc3Rv
ciBvciBmYWxzZSwgaWYgdGhlIGltcG9zdG9yIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgZm9yY2Uv
aW1wdWxzZS4KKyAgICAgKiBAcGFyYW0gaW1wb3N0b3IgQSBwaHlzaWNzIGltcG9zdGVyCisgICAg
ICogQHBhcmFtIG9yaWdpbiB0aGUgb3JpZ2luIG9mIHRoZSBleHBsb3Npb24KKyAgICAgKiBAcmV0
dXJucyB7TnVsbGFibGU8UGh5c2ljc0hpdERhdGE+fSBBIHBoeXNpY3MgZm9yY2UgYW5kIGNvbnRh
Y3QgcG9pbnQsIG9yIG51bGwKKyAgICAgKi8KKyAgICBQaHlzaWNzUmFkaWFsRXhwbG9zaW9uRXZl
bnQucHJvdG90eXBlLmdldEltcG9zdG9ySGl0RGF0YSA9IGZ1bmN0aW9uIChpbXBvc3Rvciwgb3Jp
Z2luKSB7CisgICAgICAgIGlmIChpbXBvc3Rvci5tYXNzID09PSAwKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2ludGVyc2VjdHNXaXRo
U3BoZXJlKGltcG9zdG9yLCBvcmlnaW4sIHRoaXMuX29wdGlvbnMucmFkaXVzKSkgeworICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGltcG9zdG9yLm9iamVj
dC5nZXRDbGFzc05hbWUoKSAhPT0gJ01lc2gnICYmIGltcG9zdG9yLm9iamVjdC5nZXRDbGFzc05h
bWUoKSAhPT0gJ0luc3RhbmNlZE1lc2gnKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgaW1wb3N0b3JPYmplY3RDZW50ZXIgPSBpbXBvc3Rvci5nZXRP
YmplY3RDZW50ZXIoKTsKKyAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGltcG9zdG9yT2JqZWN0Q2Vu
dGVyLnN1YnRyYWN0KG9yaWdpbik7CisgICAgICAgIHZhciByYXkgPSBuZXcgX0N1bGxpbmdfcmF5
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlJheSJdKG9yaWdpbiwgZGlyZWN0aW9uLCB0
aGlzLl9vcHRpb25zLnJhZGl1cyk7CisgICAgICAgIHZhciBoaXQgPSByYXkuaW50ZXJzZWN0c01l
c2goaW1wb3N0b3Iub2JqZWN0KTsKKyAgICAgICAgdmFyIGNvbnRhY3RQb2ludCA9IGhpdC5waWNr
ZWRQb2ludDsKKyAgICAgICAgaWYgKCFjb250YWN0UG9pbnQpIHsKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBkaXN0YW5jZUZyb21PcmlnaW4gPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdLkRp
c3RhbmNlKG9yaWdpbiwgY29udGFjdFBvaW50KTsKKyAgICAgICAgaWYgKGRpc3RhbmNlRnJvbU9y
aWdpbiA+IHRoaXMuX29wdGlvbnMucmFkaXVzKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICB2YXIgbXVsdGlwbGllciA9IHRoaXMuX29wdGlvbnMuZmFsbG9m
ZiA9PT0gUGh5c2ljc1JhZGlhbEltcHVsc2VGYWxsb2ZmLkNvbnN0YW50CisgICAgICAgICAgICA/
IHRoaXMuX29wdGlvbnMuc3RyZW5ndGgKKyAgICAgICAgICAgIDogdGhpcy5fb3B0aW9ucy5zdHJl
bmd0aCAqICgxIC0gKGRpc3RhbmNlRnJvbU9yaWdpbiAvIHRoaXMuX29wdGlvbnMucmFkaXVzKSk7
CisgICAgICAgIHZhciBmb3JjZSA9IGRpcmVjdGlvbi5tdWx0aXBseUJ5RmxvYXRzKG11bHRpcGxp
ZXIsIG11bHRpcGxpZXIsIG11bHRpcGxpZXIpOworICAgICAgICByZXR1cm4geyBmb3JjZTogZm9y
Y2UsIGNvbnRhY3RQb2ludDogY29udGFjdFBvaW50LCBkaXN0YW5jZUZyb21PcmlnaW46IGRpc3Rh
bmNlRnJvbU9yaWdpbiB9OworICAgIH07CisgICAgLyoqCisgICAgICogVHJpZ2dlcnMgYWZmZWN0
ZXJkIGltcG9zdG9ycyBjYWxsYmFja3MKKyAgICAgKiBAcGFyYW0gYWZmZWN0ZWRJbXBvc3RvcnNX
aXRoRGF0YSBkZWZpbmVzIHRoZSBsaXN0IG9mIGFmZmVjdGVkIGltcG9zdG9ycyAoaW5jbHVkaW5n
IGFzc29jaWF0ZWQgZGF0YSkKKyAgICAgKi8KKyAgICBQaHlzaWNzUmFkaWFsRXhwbG9zaW9uRXZl
bnQucHJvdG90eXBlLnRyaWdnZXJBZmZlY3RlZEltcG9zdG9yc0NhbGxiYWNrID0gZnVuY3Rpb24g
KGFmZmVjdGVkSW1wb3N0b3JzV2l0aERhdGEpIHsKKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMu
YWZmZWN0ZWRJbXBvc3RvcnNDYWxsYmFjaykgeworICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5h
ZmZlY3RlZEltcG9zdG9yc0NhbGxiYWNrKGFmZmVjdGVkSW1wb3N0b3JzV2l0aERhdGEpOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgc3BoZXJlLgorICAg
ICAqIEBwYXJhbSBmb3JjZSBTcGVjaWZpZXMgaWYgdGhlIHNwaGVyZSBzaG91bGQgYmUgZGlzcG9z
ZWQgYnkgZm9yY2UKKyAgICAgKi8KKyAgICBQaHlzaWNzUmFkaWFsRXhwbG9zaW9uRXZlbnQucHJv
dG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZm9yY2UpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgaWYgKGZvcmNlID09PSB2b2lkIDApIHsgZm9yY2UgPSB0cnVlOyB9Cisg
ICAgICAgIGlmIChmb3JjZSkgeworICAgICAgICAgICAgdGhpcy5fc3BoZXJlLmRpc3Bvc2UoKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIGlmICghX3RoaXMuX2RhdGFGZXRjaGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgIF90aGlzLl9zcGhlcmUuZGlzcG9zZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioqIEhlbHBl
cnMgKioqLworICAgIFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudC5wcm90b3R5cGUuX3ByZXBh
cmVTcGhlcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fc3BoZXJlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9zcGhlcmUgPSBfTWVzaGVzX0J1aWxkZXJzX3NwaGVyZUJ1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU3BoZXJlQnVpbGRlciJdLkNyZWF0ZVNwaGVy
ZSgicmFkaWFsRXhwbG9zaW9uRXZlbnRTcGhlcmUiLCB0aGlzLl9vcHRpb25zLnNwaGVyZSwgdGhp
cy5fc2NlbmUpOworICAgICAgICAgICAgdGhpcy5fc3BoZXJlLmlzVmlzaWJsZSA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBQaHlzaWNzUmFkaWFsRXhwbG9zaW9uRXZlbnQucHJvdG90
eXBlLl9pbnRlcnNlY3RzV2l0aFNwaGVyZSA9IGZ1bmN0aW9uIChpbXBvc3Rvciwgb3JpZ2luLCBy
YWRpdXMpIHsKKyAgICAgICAgdmFyIGltcG9zdG9yT2JqZWN0ID0gaW1wb3N0b3Iub2JqZWN0Owor
ICAgICAgICB0aGlzLl9wcmVwYXJlU3BoZXJlKCk7CisgICAgICAgIHRoaXMuX3NwaGVyZS5wb3Np
dGlvbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5fc3BoZXJlLnNjYWxpbmcgPSBuZXcgX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXShyYWRp
dXMgKiAyLCByYWRpdXMgKiAyLCByYWRpdXMgKiAyKTsKKyAgICAgICAgdGhpcy5fc3BoZXJlLl91
cGRhdGVCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgdGhpcy5fc3BoZXJlLmNvbXB1dGVXb3JsZE1h
dHJpeCh0cnVlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NwaGVyZS5pbnRlcnNlY3RzTWVzaChp
bXBvc3Rvck9iamVjdCwgdHJ1ZSk7CisgICAgfTsKKyAgICByZXR1cm4gUGh5c2ljc1JhZGlhbEV4
cGxvc2lvbkV2ZW50OworfSgpKTsKKy8qKgorICogUmVwcmVzZW50cyBhIGdyYXZpdGF0aW9uYWwg
ZmllbGQgZXZlbnQKKyAqLwordmFyIFBoeXNpY3NHcmF2aXRhdGlvbmFsRmllbGRFdmVudCA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0
aGUgcGh5c2ljcyBncmF2aXRhdGlvbmFsIGZpZWxkIGV2ZW50CisgICAgICogQHBhcmFtIF9waHlz
aWNzSGVscGVyIEEgcGh5c2ljcyBoZWxwZXIKKyAgICAgKiBAcGFyYW0gX3NjZW5lIEJhYnlsb25K
UyBzY2VuZQorICAgICAqIEBwYXJhbSBfb3JpZ2luIFRoZSBvcmlnaW4gcG9zaXRpb24gb2YgdGhl
IGdyYXZpdGF0aW9uYWwgZmllbGQgZXZlbnQKKyAgICAgKiBAcGFyYW0gX29wdGlvbnMgVGhlIG9w
dGlvbnMgZm9yIHRoZSB2b3J0ZXggZXZlbnQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQaHlzaWNz
R3Jhdml0YXRpb25hbEZpZWxkRXZlbnQoX3BoeXNpY3NIZWxwZXIsIF9zY2VuZSwgX29yaWdpbiwg
X29wdGlvbnMpIHsKKyAgICAgICAgdGhpcy5fcGh5c2ljc0hlbHBlciA9IF9waHlzaWNzSGVscGVy
OworICAgICAgICB0aGlzLl9zY2VuZSA9IF9zY2VuZTsKKyAgICAgICAgdGhpcy5fb3JpZ2luID0g
X29yaWdpbjsKKyAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zOworICAgICAgICB0aGlz
Ll9kYXRhRmV0Y2hlZCA9IGZhbHNlOyAvLyBjaGVjayBpZiB0aGUgaGFzIGJlZW4gZmV0Y2hlZCB0
aGUgZGF0YS4gSWYgbm90LCBkbyBjbGVhbnVwCisgICAgICAgIHRoaXMuX29wdGlvbnMgPSB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Fzc2lnbiJdKHt9LCAobmV3IFBoeXNp
Y3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnMoKSksIHRoaXMuX29wdGlvbnMpOworICAgICAg
ICB0aGlzLl90aWNrQ2FsbGJhY2sgPSB0aGlzLl90aWNrLmJpbmQodGhpcyk7CisgICAgICAgIHRo
aXMuX29wdGlvbnMuc3RyZW5ndGggPSB0aGlzLl9vcHRpb25zLnN0cmVuZ3RoICogLTE7CisgICAg
fQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGRhdGEgcmVsYXRlZCB0byB0aGUgZ3Jhdml0
YXRpb25hbCBmaWVsZCBldmVudCAoc3BoZXJlKS4KKyAgICAgKiBAcmV0dXJucyBBIGdyYXZpdGF0
aW9uYWwgZmllbGQgZXZlbnQKKyAgICAgKi8KKyAgICBQaHlzaWNzR3Jhdml0YXRpb25hbEZpZWxk
RXZlbnQucHJvdG90eXBlLmdldERhdGEgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2Rh
dGFGZXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHNwaGVyZTog
dGhpcy5fc3BoZXJlLAorICAgICAgICB9OworICAgIH07CisgICAgLyoqCisgICAgICogRW5hYmxl
cyB0aGUgZ3Jhdml0YXRpb25hbCBmaWVsZC4KKyAgICAgKi8KKyAgICBQaHlzaWNzR3Jhdml0YXRp
b25hbEZpZWxkRXZlbnQucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dGhpcy5fdGlja0NhbGxiYWNrLmNhbGwodGhpcyk7CisgICAgICAgIHRoaXMuX3NjZW5lLnJlZ2lz
dGVyQmVmb3JlUmVuZGVyKHRoaXMuX3RpY2tDYWxsYmFjayk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBEaXNhYmxlcyB0aGUgZ3Jhdml0YXRpb25hbCBmaWVsZC4KKyAgICAgKi8KKyAgICBQaHlz
aWNzR3Jhdml0YXRpb25hbEZpZWxkRXZlbnQucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRoaXMuX3NjZW5lLnVucmVnaXN0ZXJCZWZvcmVSZW5kZXIodGhpcy5fdGlj
a0NhbGxiYWNrKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBzcGhlcmUu
CisgICAgICogQHBhcmFtIGZvcmNlIFRoZSBmb3JjZSB0byBkaXNwb3NlIGZyb20gdGhlIGdyYXZp
dGF0aW9uYWwgZmllbGQgZXZlbnQKKyAgICAgKi8KKyAgICBQaHlzaWNzR3Jhdml0YXRpb25hbEZp
ZWxkRXZlbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoZm9yY2UpIHsKKyAgICAgICAg
dmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKGZvcmNlID09PSB2b2lkIDApIHsgZm9yY2Ug
PSB0cnVlOyB9CisgICAgICAgIGlmIChmb3JjZSkgeworICAgICAgICAgICAgdGhpcy5fc3BoZXJl
LmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGlmICghX3RoaXMuX2RhdGFGZXRj
aGVkKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zcGhlcmUuZGlzcG9zZSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgfTsKKyAg
ICBQaHlzaWNzR3Jhdml0YXRpb25hbEZpZWxkRXZlbnQucHJvdG90eXBlLl90aWNrID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAvLyBTaW5jZSB0aGUgcGFyYW1zIHdvbid0IGNoYW5nZSwgd2UgZmV0
Y2ggdGhlIGV2ZW50IG9ubHkgb25jZQorICAgICAgICBpZiAodGhpcy5fc3BoZXJlKSB7CisgICAg
ICAgICAgICB0aGlzLl9waHlzaWNzSGVscGVyLmFwcGx5UmFkaWFsRXhwbG9zaW9uRm9yY2UodGhp
cy5fb3JpZ2luLCB0aGlzLl9vcHRpb25zKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHZhciByYWRpYWxFeHBsb3Npb25FdmVudCA9IHRoaXMuX3BoeXNpY3NIZWxwZXIu
YXBwbHlSYWRpYWxFeHBsb3Npb25Gb3JjZSh0aGlzLl9vcmlnaW4sIHRoaXMuX29wdGlvbnMpOwor
ICAgICAgICAgICAgaWYgKHJhZGlhbEV4cGxvc2lvbkV2ZW50KSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fc3BoZXJlID0gcmFkaWFsRXhwbG9zaW9uRXZlbnQuZ2V0RGF0YSgpLnNwaGVyZS5jbG9u
ZSgncmFkaWFsRXhwbG9zaW9uRXZlbnRTcGhlcmVDbG9uZScpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gUGh5c2ljc0dyYXZpdGF0aW9uYWxGaWVsZEV2ZW50
OworfSgpKTsKKy8qKgorICogUmVwcmVzZW50cyBhIHBoeXNpY3MgdXBkcmFmdCBldmVudAorICov
Cit2YXIgUGh5c2ljc1VwZHJhZnRFdmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
KyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUgcGh5c2ljcyB1cGRyYWZ0IGV2ZW50Cisg
ICAgICogQHBhcmFtIF9zY2VuZSBCYWJ5bG9uSlMgc2NlbmUKKyAgICAgKiBAcGFyYW0gX29yaWdp
biBUaGUgb3JpZ2luIHBvc2l0aW9uIG9mIHRoZSB1cGRyYWZ0CisgICAgICogQHBhcmFtIF9vcHRp
b25zIFRoZSBvcHRpb25zIGZvciB0aGUgdXBkcmFmdCBldmVudAorICAgICAqLworICAgIGZ1bmN0
aW9uIFBoeXNpY3NVcGRyYWZ0RXZlbnQoX3NjZW5lLCBfb3JpZ2luLCBfb3B0aW9ucykgeworICAg
ICAgICB0aGlzLl9zY2VuZSA9IF9zY2VuZTsKKyAgICAgICAgdGhpcy5fb3JpZ2luID0gX29yaWdp
bjsKKyAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zOworICAgICAgICB0aGlzLl9vcmln
aW5Ub3AgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
VmVjdG9yMyJdLlplcm8oKTsgLy8gdGhlIG1vc3QgdXBwZXIgcGFydCBvZiB0aGUgY3lsaW5kZXIK
KyAgICAgICAgdGhpcy5fb3JpZ2luRGlyZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7IC8vIHVzZWQgaWYgdGhl
IHVwZHJhZnRNb2RlIGlzIHBlcnBlbmRpY3VsYXIKKyAgICAgICAgdGhpcy5fY3lsaW5kZXJQb3Np
dGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJW
ZWN0b3IzIl0uWmVybygpOyAvLyB0byBrZWVwIHRoZSBjeWxpbmRlcnMgcG9zaXRpb24sIGJlY2F1
c2Ugbm9ybWFsbHkgdGhlIG9yaWdpbiBpcyBpbiB0aGUgY2VudGVyIGFuZCBub3Qgb24gdGhlIGJv
dHRvbQorICAgICAgICB0aGlzLl9kYXRhRmV0Y2hlZCA9IGZhbHNlOyAvLyBjaGVjayBpZiB0aGUg
aGFzIGJlZW4gZmV0Y2hlZCB0aGUgZGF0YS4gSWYgbm90LCBkbyBjbGVhbnVwCisgICAgICAgIHRo
aXMuX3BoeXNpY3NFbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRQaHlzaWNzRW5naW5lKCk7CisgICAg
ICAgIHRoaXMuX29wdGlvbnMgPSB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2Fzc2lnbiJdKHt9LCAobmV3IFBoeXNpY3NVcGRyYWZ0RXZlbnRPcHRpb25zKCkpLCB0aGlzLl9v
cHRpb25zKTsKKyAgICAgICAgdGhpcy5fb3JpZ2luLmFkZFRvUmVmKG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKDAsIHRoaXMuX29w
dGlvbnMuaGVpZ2h0IC8gMiwgMCksIHRoaXMuX2N5bGluZGVyUG9zaXRpb24pOworICAgICAgICB0
aGlzLl9vcmlnaW4uYWRkVG9SZWYobmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0oMCwgdGhpcy5fb3B0aW9ucy5oZWlnaHQsIDApLCB0
aGlzLl9vcmlnaW5Ub3ApOworICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy51cGRyYWZ0TW9kZSA9
PT0gUGh5c2ljc1VwZHJhZnRNb2RlLlBlcnBlbmRpY3VsYXIpIHsKKyAgICAgICAgICAgIHRoaXMu
X29yaWdpbkRpcmVjdGlvbiA9IHRoaXMuX29yaWdpbi5zdWJ0cmFjdCh0aGlzLl9vcmlnaW5Ub3Ap
Lm5vcm1hbGl6ZSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3RpY2tDYWxsYmFjayA9IHRo
aXMuX3RpY2suYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5fcHJlcGFyZUN5bGluZGVyKCk7Cisg
ICAgfQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGRhdGEgcmVsYXRlZCB0byB0aGUgdXBk
cmFmdCBldmVudCAoY3lsaW5kZXIpLgorICAgICAqIEByZXR1cm5zIEEgcGh5c2ljcyB1cGRyYWZ0
IGV2ZW50CisgICAgICovCisgICAgUGh5c2ljc1VwZHJhZnRFdmVudC5wcm90b3R5cGUuZ2V0RGF0
YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fZGF0YUZldGNoZWQgPSB0cnVlOworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgY3lsaW5kZXI6IHRoaXMuX2N5bGluZGVyLAorICAg
ICAgICB9OworICAgIH07CisgICAgLyoqCisgICAgICogRW5hYmxlcyB0aGUgdXBkcmFmdC4KKyAg
ICAgKi8KKyAgICBQaHlzaWNzVXBkcmFmdEV2ZW50LnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRoaXMuX3RpY2tDYWxsYmFjay5jYWxsKHRoaXMpOworICAgICAgICB0
aGlzLl9zY2VuZS5yZWdpc3RlckJlZm9yZVJlbmRlcih0aGlzLl90aWNrQ2FsbGJhY2spOworICAg
IH07CisgICAgLyoqCisgICAgICogRGlzYWJsZXMgdGhlIHVwZHJhZnQuCisgICAgICovCisgICAg
UGh5c2ljc1VwZHJhZnRFdmVudC5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5fc2NlbmUudW5yZWdpc3RlckJlZm9yZVJlbmRlcih0aGlzLl90aWNrQ2FsbGJh
Y2spOworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhlIGN5bGluZGVyLgorICAg
ICAqIEBwYXJhbSBmb3JjZSBTcGVjaWZpZXMgaWYgdGhlIHVwZHJhZnQgc2hvdWxkIGJlIGRpc3Bv
c2VkIGJ5IGZvcmNlCisgICAgICovCisgICAgUGh5c2ljc1VwZHJhZnRFdmVudC5wcm90b3R5cGUu
ZGlzcG9zZSA9IGZ1bmN0aW9uIChmb3JjZSkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICBpZiAoZm9yY2UgPT09IHZvaWQgMCkgeyBmb3JjZSA9IHRydWU7IH0KKyAgICAgICAg
aWYgKCF0aGlzLl9jeWxpbmRlcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmb3JjZSkgeworICAgICAgICAgICAgdGhpcy5fY3lsaW5kZXIuZGlzcG9zZSgp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2V0VGltZW91dChmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5fZGF0YUZldGNoZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgX3RoaXMuX2N5bGluZGVyLmRpc3Bvc2UoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAgIH07CisgICAgUGh5c2lj
c1VwZHJhZnRFdmVudC5wcm90b3R5cGUuZ2V0SW1wb3N0b3JIaXREYXRhID0gZnVuY3Rpb24gKGlt
cG9zdG9yKSB7CisgICAgICAgIGlmIChpbXBvc3Rvci5tYXNzID09PSAwKSB7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2ludGVyc2VjdHNX
aXRoQ3lsaW5kZXIoaW1wb3N0b3IpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgaW1wb3N0b3JPYmplY3RDZW50ZXIgPSBpbXBvc3Rvci5nZXRPYmpl
Y3RDZW50ZXIoKTsKKyAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMudXBkcmFmdE1vZGUgPT09IFBo
eXNpY3NVcGRyYWZ0TW9kZS5QZXJwZW5kaWN1bGFyKSB7CisgICAgICAgICAgICB2YXIgZGlyZWN0
aW9uID0gdGhpcy5fb3JpZ2luRGlyZWN0aW9uOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGltcG9zdG9yT2JqZWN0Q2VudGVyLnN1YnRyYWN0
KHRoaXMuX29yaWdpblRvcCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRpc3RhbmNlRnJvbU9y
aWdpbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJW
ZWN0b3IzIl0uRGlzdGFuY2UodGhpcy5fb3JpZ2luLCBpbXBvc3Rvck9iamVjdENlbnRlcik7Cisg
ICAgICAgIHZhciBtdWx0aXBsaWVyID0gdGhpcy5fb3B0aW9ucy5zdHJlbmd0aCAqIC0xOworICAg
ICAgICB2YXIgZm9yY2UgPSBkaXJlY3Rpb24ubXVsdGlwbHlCeUZsb2F0cyhtdWx0aXBsaWVyLCBt
dWx0aXBsaWVyLCBtdWx0aXBsaWVyKTsKKyAgICAgICAgcmV0dXJuIHsgZm9yY2U6IGZvcmNlLCBj
b250YWN0UG9pbnQ6IGltcG9zdG9yT2JqZWN0Q2VudGVyLCBkaXN0YW5jZUZyb21PcmlnaW46IGRp
c3RhbmNlRnJvbU9yaWdpbiB9OworICAgIH07CisgICAgUGh5c2ljc1VwZHJhZnRFdmVudC5wcm90
b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0SW1wb3N0b3JzKCkuZm9yRWFjaChmdW5jdGlv
biAoaW1wb3N0b3IpIHsKKyAgICAgICAgICAgIHZhciBpbXBvc3RvckhpdERhdGEgPSBfdGhpcy5n
ZXRJbXBvc3RvckhpdERhdGEoaW1wb3N0b3IpOworICAgICAgICAgICAgaWYgKCFpbXBvc3Rvckhp
dERhdGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpbXBvc3Rvci5hcHBseUZvcmNlKGltcG9zdG9ySGl0RGF0YS5mb3JjZSwgaW1wb3N0b3JI
aXREYXRhLmNvbnRhY3RQb2ludCk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqKiBIZWxw
ZXJzICoqKi8KKyAgICBQaHlzaWNzVXBkcmFmdEV2ZW50LnByb3RvdHlwZS5fcHJlcGFyZUN5bGlu
ZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMuX2N5bGluZGVyKSB7CisgICAg
ICAgICAgICB0aGlzLl9jeWxpbmRlciA9IF9NZXNoZXNfQnVpbGRlcnNfY3lsaW5kZXJCdWlsZGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkN5bGluZGVyQnVpbGRlciJdLkNyZWF0ZUN5
bGluZGVyKCJ1cGRyYWZ0RXZlbnRDeWxpbmRlciIsIHsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6
IHRoaXMuX29wdGlvbnMuaGVpZ2h0LAorICAgICAgICAgICAgICAgIGRpYW1ldGVyOiB0aGlzLl9v
cHRpb25zLnJhZGl1cyAqIDIsCisgICAgICAgICAgICB9LCB0aGlzLl9zY2VuZSk7CisgICAgICAg
ICAgICB0aGlzLl9jeWxpbmRlci5pc1Zpc2libGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07
CisgICAgUGh5c2ljc1VwZHJhZnRFdmVudC5wcm90b3R5cGUuX2ludGVyc2VjdHNXaXRoQ3lsaW5k
ZXIgPSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgdmFyIGltcG9zdG9yT2JqZWN0ID0g
aW1wb3N0b3Iub2JqZWN0OworICAgICAgICB0aGlzLl9jeWxpbmRlci5wb3NpdGlvbiA9IHRoaXMu
X2N5bGluZGVyUG9zaXRpb247CisgICAgICAgIHJldHVybiB0aGlzLl9jeWxpbmRlci5pbnRlcnNl
Y3RzTWVzaChpbXBvc3Rvck9iamVjdCwgdHJ1ZSk7CisgICAgfTsKKyAgICByZXR1cm4gUGh5c2lj
c1VwZHJhZnRFdmVudDsKK30oKSk7CisvKioKKyAqIFJlcHJlc2VudHMgYSBwaHlzaWNzIHZvcnRl
eCBldmVudAorICovCit2YXIgUGh5c2ljc1ZvcnRleEV2ZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVu
Y3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIHRoZSBwaHlzaWNzIHZvcnRl
eCBldmVudAorICAgICAqIEBwYXJhbSBfc2NlbmUgVGhlIEJhYnlsb25KUyBzY2VuZQorICAgICAq
IEBwYXJhbSBfb3JpZ2luIFRoZSBvcmlnaW4gcG9zaXRpb24gb2YgdGhlIHZvcnRleAorICAgICAq
IEBwYXJhbSBfb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIHZvcnRleCBldmVudAorICAgICAq
LworICAgIGZ1bmN0aW9uIFBoeXNpY3NWb3J0ZXhFdmVudChfc2NlbmUsIF9vcmlnaW4sIF9vcHRp
b25zKSB7CisgICAgICAgIHRoaXMuX3NjZW5lID0gX3NjZW5lOworICAgICAgICB0aGlzLl9vcmln
aW4gPSBfb3JpZ2luOworICAgICAgICB0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7CisgICAgICAg
IHRoaXMuX29yaWdpblRvcCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpOyAvLyB0aGUgbW9zdCB1cHBlciBwYXJ0IG9mIHRo
ZSBjeWxpbmRlcgorICAgICAgICB0aGlzLl9jeWxpbmRlclBvc2l0aW9uID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5aZXJvKCk7IC8v
IHRvIGtlZXAgdGhlIGN5bGluZGVycyBwb3NpdGlvbiwgYmVjYXVzZSBub3JtYWxseSB0aGUgb3Jp
Z2luIGlzIGluIHRoZSBjZW50ZXIgYW5kIG5vdCBvbiB0aGUgYm90dG9tCisgICAgICAgIHRoaXMu
X2RhdGFGZXRjaGVkID0gZmFsc2U7IC8vIGNoZWNrIGlmIHRoZSBoYXMgYmVlbiBmZXRjaGVkIHRo
ZSBkYXRhLiBJZiBub3QsIGRvIGNsZWFudXAKKyAgICAgICAgdGhpcy5fcGh5c2ljc0VuZ2luZSA9
IHRoaXMuX3NjZW5lLmdldFBoeXNpY3NFbmdpbmUoKTsKKyAgICAgICAgdGhpcy5fb3B0aW9ucyA9
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fYXNzaWduIl0oe30sIChuZXcg
UGh5c2ljc1ZvcnRleEV2ZW50T3B0aW9ucygpKSwgdGhpcy5fb3B0aW9ucyk7CisgICAgICAgIHRo
aXMuX29yaWdpbi5hZGRUb1JlZihuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSgwLCB0aGlzLl9vcHRpb25zLmhlaWdodCAvIDIsIDAp
LCB0aGlzLl9jeWxpbmRlclBvc2l0aW9uKTsKKyAgICAgICAgdGhpcy5fb3JpZ2luLmFkZFRvUmVm
KG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVj
dG9yMyJdKDAsIHRoaXMuX29wdGlvbnMuaGVpZ2h0LCAwKSwgdGhpcy5fb3JpZ2luVG9wKTsKKyAg
ICAgICAgdGhpcy5fdGlja0NhbGxiYWNrID0gdGhpcy5fdGljay5iaW5kKHRoaXMpOworICAgICAg
ICB0aGlzLl9wcmVwYXJlQ3lsaW5kZXIoKTsKKyAgICB9CisgICAgLyoqCisgICAgICogUmV0dXJu
cyB0aGUgZGF0YSByZWxhdGVkIHRvIHRoZSB2b3J0ZXggZXZlbnQgKGN5bGluZGVyKS4KKyAgICAg
KiBAcmV0dXJucyBUaGUgcGh5c2ljcyB2b3J0ZXggZXZlbnQgZGF0YQorICAgICAqLworICAgIFBo
eXNpY3NWb3J0ZXhFdmVudC5wcm90b3R5cGUuZ2V0RGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdGhpcy5fZGF0YUZldGNoZWQgPSB0cnVlOworICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgY3lsaW5kZXI6IHRoaXMuX2N5bGluZGVyLAorICAgICAgICB9OworICAgIH07CisgICAgLyoq
CisgICAgICogRW5hYmxlcyB0aGUgdm9ydGV4LgorICAgICAqLworICAgIFBoeXNpY3NWb3J0ZXhF
dmVudC5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl90aWNr
Q2FsbGJhY2suY2FsbCh0aGlzKTsKKyAgICAgICAgdGhpcy5fc2NlbmUucmVnaXN0ZXJCZWZvcmVS
ZW5kZXIodGhpcy5fdGlja0NhbGxiYWNrKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc2Fi
bGVzIHRoZSBjb3J0ZXguCisgICAgICovCisgICAgUGh5c2ljc1ZvcnRleEV2ZW50LnByb3RvdHlw
ZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9zY2VuZS51bnJlZ2lzdGVy
QmVmb3JlUmVuZGVyKHRoaXMuX3RpY2tDYWxsYmFjayk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBEaXNwb3NlcyB0aGUgc3BoZXJlLgorICAgICAqIEBwYXJhbSBmb3JjZQorICAgICAqLworICAg
IFBoeXNpY3NWb3J0ZXhFdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChmb3JjZSkg
eworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoZm9yY2UgPT09IHZvaWQg
MCkgeyBmb3JjZSA9IHRydWU7IH0KKyAgICAgICAgaWYgKGZvcmNlKSB7CisgICAgICAgICAgICB0
aGlzLl9jeWxpbmRlci5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIV90
aGlzLl9kYXRhRmV0Y2hlZCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY3lsaW5kZXIu
ZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIDApOworICAgICAg
ICB9CisgICAgfTsKKyAgICBQaHlzaWNzVm9ydGV4RXZlbnQucHJvdG90eXBlLmdldEltcG9zdG9y
SGl0RGF0YSA9IGZ1bmN0aW9uIChpbXBvc3RvcikgeworICAgICAgICBpZiAoaW1wb3N0b3IubWFz
cyA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCF0aGlzLl9pbnRlcnNlY3RzV2l0aEN5bGluZGVyKGltcG9zdG9yKSkgeworICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGltcG9zdG9yLm9iamVjdC5n
ZXRDbGFzc05hbWUoKSAhPT0gJ01lc2gnICYmIGltcG9zdG9yLm9iamVjdC5nZXRDbGFzc05hbWUo
KSAhPT0gJ0luc3RhbmNlZE1lc2gnKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgaW1wb3N0b3JPYmplY3RDZW50ZXIgPSBpbXBvc3Rvci5nZXRPYmpl
Y3RDZW50ZXIoKTsKKyAgICAgICAgdmFyIG9yaWdpbk9uUGxhbmUgPSBuZXcgX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXSh0aGlzLl9vcmln
aW4ueCwgaW1wb3N0b3JPYmplY3RDZW50ZXIueSwgdGhpcy5fb3JpZ2luLnopOyAvLyB0aGUgZGlz
dGFuY2UgdG8gdGhlIG9yaWdpbiBhcyBpZiBib3RoIG9iamVjdHMgd2VyZSBvbiBhIHBsYW5lIChZ
LWF4aXMpCisgICAgICAgIHZhciBvcmlnaW5Ub0ltcG9zdG9yRGlyZWN0aW9uID0gaW1wb3N0b3JP
YmplY3RDZW50ZXIuc3VidHJhY3Qob3JpZ2luT25QbGFuZSk7CisgICAgICAgIHZhciByYXkgPSBu
ZXcgX0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlJheSJdKG9yaWdp
bk9uUGxhbmUsIG9yaWdpblRvSW1wb3N0b3JEaXJlY3Rpb24sIHRoaXMuX29wdGlvbnMucmFkaXVz
KTsKKyAgICAgICAgdmFyIGhpdCA9IHJheS5pbnRlcnNlY3RzTWVzaChpbXBvc3Rvci5vYmplY3Qp
OworICAgICAgICB2YXIgY29udGFjdFBvaW50ID0gaGl0LnBpY2tlZFBvaW50OworICAgICAgICBp
ZiAoIWNvbnRhY3RQb2ludCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIGFic29sdXRlRGlzdGFuY2VGcm9tT3JpZ2luID0gaGl0LmRpc3RhbmNlIC8g
dGhpcy5fb3B0aW9ucy5yYWRpdXM7CisgICAgICAgIHZhciBkaXJlY3Rpb25Ub09yaWdpbiA9IGNv
bnRhY3RQb2ludC5ub3JtYWxpemUoKTsKKyAgICAgICAgaWYgKGFic29sdXRlRGlzdGFuY2VGcm9t
T3JpZ2luID4gdGhpcy5fb3B0aW9ucy5jZW50cmlwZXRhbEZvcmNlVGhyZXNob2xkKSB7CisgICAg
ICAgICAgICBkaXJlY3Rpb25Ub09yaWdpbiA9IGRpcmVjdGlvblRvT3JpZ2luLm5lZ2F0ZSgpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChhYnNvbHV0ZURpc3RhbmNlRnJvbU9yaWdpbiA+IHRoaXMu
X29wdGlvbnMuY2VudHJpcGV0YWxGb3JjZVRocmVzaG9sZCkgeworICAgICAgICAgICAgdmFyIGZv
cmNlWCA9IGRpcmVjdGlvblRvT3JpZ2luLnggKiB0aGlzLl9vcHRpb25zLmNlbnRyaXBldGFsRm9y
Y2VNdWx0aXBsaWVyOworICAgICAgICAgICAgdmFyIGZvcmNlWSA9IGRpcmVjdGlvblRvT3JpZ2lu
LnkgKiB0aGlzLl9vcHRpb25zLnVwZHJhZnRGb3JjZU11bHRpcGxpZXI7CisgICAgICAgICAgICB2
YXIgZm9yY2VaID0gZGlyZWN0aW9uVG9PcmlnaW4ueiAqIHRoaXMuX29wdGlvbnMuY2VudHJpcGV0
YWxGb3JjZU11bHRpcGxpZXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICB2YXIgcGVycGVuZGljdWxhckRpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uQ3Jvc3Mob3JpZ2luT25QbGFuZSwgaW1w
b3N0b3JPYmplY3RDZW50ZXIpLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgdmFyIGZvcmNlWCA9
IChwZXJwZW5kaWN1bGFyRGlyZWN0aW9uLnggKyBkaXJlY3Rpb25Ub09yaWdpbi54KSAqIHRoaXMu
X29wdGlvbnMuY2VudHJpZnVnYWxGb3JjZU11bHRpcGxpZXI7CisgICAgICAgICAgICB2YXIgZm9y
Y2VZID0gdGhpcy5fb3JpZ2luVG9wLnkgKiB0aGlzLl9vcHRpb25zLnVwZHJhZnRGb3JjZU11bHRp
cGxpZXI7CisgICAgICAgICAgICB2YXIgZm9yY2VaID0gKHBlcnBlbmRpY3VsYXJEaXJlY3Rpb24u
eiArIGRpcmVjdGlvblRvT3JpZ2luLnopICogdGhpcy5fb3B0aW9ucy5jZW50cmlmdWdhbEZvcmNl
TXVsdGlwbGllcjsKKyAgICAgICAgfQorICAgICAgICB2YXIgZm9yY2UgPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXShmb3JjZVgs
IGZvcmNlWSwgZm9yY2VaKTsKKyAgICAgICAgZm9yY2UgPSBmb3JjZS5tdWx0aXBseUJ5RmxvYXRz
KHRoaXMuX29wdGlvbnMuc3RyZW5ndGgsIHRoaXMuX29wdGlvbnMuc3RyZW5ndGgsIHRoaXMuX29w
dGlvbnMuc3RyZW5ndGgpOworICAgICAgICByZXR1cm4geyBmb3JjZTogZm9yY2UsIGNvbnRhY3RQ
b2ludDogaW1wb3N0b3JPYmplY3RDZW50ZXIsIGRpc3RhbmNlRnJvbU9yaWdpbjogYWJzb2x1dGVE
aXN0YW5jZUZyb21PcmlnaW4gfTsKKyAgICB9OworICAgIFBoeXNpY3NWb3J0ZXhFdmVudC5wcm90
b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7Cisg
ICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0SW1wb3N0b3JzKCkuZm9yRWFjaChmdW5jdGlv
biAoaW1wb3N0b3IpIHsKKyAgICAgICAgICAgIHZhciBpbXBvc3RvckhpdERhdGEgPSBfdGhpcy5n
ZXRJbXBvc3RvckhpdERhdGEoaW1wb3N0b3IpOworICAgICAgICAgICAgaWYgKCFpbXBvc3Rvckhp
dERhdGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpbXBvc3Rvci5hcHBseUZvcmNlKGltcG9zdG9ySGl0RGF0YS5mb3JjZSwgaW1wb3N0b3JI
aXREYXRhLmNvbnRhY3RQb2ludCk7CisgICAgICAgIH0pOworICAgIH07CisgICAgLyoqKiBIZWxw
ZXJzICoqKi8KKyAgICBQaHlzaWNzVm9ydGV4RXZlbnQucHJvdG90eXBlLl9wcmVwYXJlQ3lsaW5k
ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fY3lsaW5kZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2N5bGluZGVyID0gX01lc2hlc19CdWlsZGVyc19jeWxpbmRlckJ1aWxkZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ3lsaW5kZXJCdWlsZGVyIl0uQ3JlYXRlQ3ls
aW5kZXIoInZvcnRleEV2ZW50Q3lsaW5kZXIiLCB7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiB0
aGlzLl9vcHRpb25zLmhlaWdodCwKKyAgICAgICAgICAgICAgICBkaWFtZXRlcjogdGhpcy5fb3B0
aW9ucy5yYWRpdXMgKiAyLAorICAgICAgICAgICAgfSwgdGhpcy5fc2NlbmUpOworICAgICAgICAg
ICAgdGhpcy5fY3lsaW5kZXIuaXNWaXNpYmxlID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIFBoeXNpY3NWb3J0ZXhFdmVudC5wcm90b3R5cGUuX2ludGVyc2VjdHNXaXRoQ3lsaW5kZXIg
PSBmdW5jdGlvbiAoaW1wb3N0b3IpIHsKKyAgICAgICAgdmFyIGltcG9zdG9yT2JqZWN0ID0gaW1w
b3N0b3Iub2JqZWN0OworICAgICAgICB0aGlzLl9jeWxpbmRlci5wb3NpdGlvbiA9IHRoaXMuX2N5
bGluZGVyUG9zaXRpb247CisgICAgICAgIHJldHVybiB0aGlzLl9jeWxpbmRlci5pbnRlcnNlY3Rz
TWVzaChpbXBvc3Rvck9iamVjdCwgdHJ1ZSk7CisgICAgfTsKKyAgICByZXR1cm4gUGh5c2ljc1Zv
cnRleEV2ZW50OworfSgpKTsKKy8qKgorICogT3B0aW9ucyBmb3QgdGhlIHJhZGlhbCBleHBsb3Np
b24gZXZlbnQKKyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vdXNpbmdf
dGhlX3BoeXNpY3NfZW5naW5lI2Z1cnRoZXItZnVuY3Rpb25hbGl0eS1vZi10aGUtaW1wb3N0b3It
Y2xhc3MKKyAqLwordmFyIFBoeXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnMgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gUGh5c2ljc1JhZGlhbEV4cGxv
c2lvbkV2ZW50T3B0aW9ucygpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSByYWRpdXMg
b2YgdGhlIHNwaGVyZSBmb3IgdGhlIHJhZGlhbCBleHBsb3Npb24uCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLnJhZGl1cyA9IDU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc3RyZW50
aCBvZiB0aGUgZXhwbG9zaW9uLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zdHJlbmd0aCA9
IDEwOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHN0cmVuZ2h0IG9mIHRoZSBmb3JjZSBp
biBjb3JyZXNwb25kZW5jZSB0byB0aGUgZGlzdGFuY2Ugb2YgdGhlIGFmZmVjdGVkIG9iamVjdAor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5mYWxsb2ZmID0gUGh5c2ljc1JhZGlhbEltcHVsc2VG
YWxsb2ZmLkNvbnN0YW50OworICAgICAgICAvKioKKyAgICAgICAgICogU3BoZXJlIG9wdGlvbnMg
Zm9yIHRoZSByYWRpYWwgZXhwbG9zaW9uLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zcGhl
cmUgPSB7IHNlZ21lbnRzOiAzMiwgZGlhbWV0ZXI6IDEgfTsKKyAgICB9CisgICAgcmV0dXJuIFBo
eXNpY3NSYWRpYWxFeHBsb3Npb25FdmVudE9wdGlvbnM7Cit9KCkpOworCisvKioKKyAqIE9wdGlv
bnMgZm90IHRoZSB1cGRyYWZ0IGV2ZW50CisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5j
b20vaG93X3RvL3VzaW5nX3RoZV9waHlzaWNzX2VuZ2luZSNmdXJ0aGVyLWZ1bmN0aW9uYWxpdHkt
b2YtdGhlLWltcG9zdG9yLWNsYXNzCisgKi8KK3ZhciBQaHlzaWNzVXBkcmFmdEV2ZW50T3B0aW9u
cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQaHlzaWNzVXBk
cmFmdEV2ZW50T3B0aW9ucygpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSByYWRpdXMg
b2YgdGhlIGN5bGluZGVyIGZvciB0aGUgdm9ydGV4CisgICAgICAgICAqLworICAgICAgICB0aGlz
LnJhZGl1cyA9IDU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc3RyZW50aCBvZiB0aGUg
dXBkcmFmdC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc3RyZW5ndGggPSAxMDsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGN5bGluZGVyIGZvciB0aGUgdXBk
cmFmdC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaGVpZ2h0ID0gMTA7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBUaGUgbW9kZSBmb3IgdGhlIHRoZSB1cGRyYWZ0LgorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy51cGRyYWZ0TW9kZSA9IFBoeXNpY3NVcGRyYWZ0TW9kZS5DZW50ZXI7Cisg
ICAgfQorICAgIHJldHVybiBQaHlzaWNzVXBkcmFmdEV2ZW50T3B0aW9uczsKK30oKSk7CisKKy8q
KgorICogT3B0aW9ucyBmb3QgdGhlIHZvcnRleCBldmVudAorICogQHNlZSBodHRwczovL2RvYy5i
YWJ5bG9uanMuY29tL2hvd190by91c2luZ190aGVfcGh5c2ljc19lbmdpbmUjZnVydGhlci1mdW5j
dGlvbmFsaXR5LW9mLXRoZS1pbXBvc3Rvci1jbGFzcworICovCit2YXIgUGh5c2ljc1ZvcnRleEV2
ZW50T3B0aW9ucyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBQ
aHlzaWNzVm9ydGV4RXZlbnRPcHRpb25zKCkgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhl
IHJhZGl1cyBvZiB0aGUgY3lsaW5kZXIgZm9yIHRoZSB2b3J0ZXgKKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMucmFkaXVzID0gNTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBzdHJlbnRo
IG9mIHRoZSB2b3J0ZXguCisgICAgICAgICAqLworICAgICAgICB0aGlzLnN0cmVuZ3RoID0gMTA7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjeWxpbmRlciBmb3Ig
dGhlIHZvcnRleC4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaGVpZ2h0ID0gMTA7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBBdCB3aGljaCBkaXN0YW5jZSwgcmVsYXRpdmUgdG8gdGhlIHJh
ZGl1cyB0aGUgY2VudHJpcGV0YWwgZm9yY2VzIHNob3VsZCBraWNrIGluPyBSYW5nZTogMC0xCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmNlbnRyaXBldGFsRm9yY2VUaHJlc2hvbGQgPSAwLjc7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIG11bHRpcGxpZXIgZGV0ZXJtaW5lcyB3aXRo
IGhvdyBtdWNoIGZvcmNlIHRoZSBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIHNpZGV3YXlzL2Fyb3Vu
ZCB0aGUgdm9ydGV4LCB3aGVuIGJlbG93IHRoZSB0cmVzaG9sZC4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMuY2VudHJpcGV0YWxGb3JjZU11bHRpcGxpZXIgPSA1OworICAgICAgICAvKioKKyAg
ICAgICAgICogVGhpcyBtdWx0aXBsaWVyIGRldGVybWluZXMgd2l0aCBob3cgbXVjaCBmb3JjZSB0
aGUgb2JqZWN0cyB3aWxsIGJlIHB1c2hlZCBzaWRld2F5cy9hcm91bmQgdGhlIHZvcnRleCwgd2hl
biBhYm92ZSB0aGUgdHJlc2hvbGQuCisgICAgICAgICAqLworICAgICAgICB0aGlzLmNlbnRyaWZ1
Z2FsRm9yY2VNdWx0aXBsaWVyID0gMC41OworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBt
dWx0aXBsaWVyIGRldGVybWluZXMgd2l0aCBob3cgbXVjaCBmb3JjZSB0aGUgb2JqZWN0cyB3aWxs
IGJlIHB1c2hlZCB1cHdhcmRzLCB3aGVuIGluIHRoZSB2b3J0ZXguCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLnVwZHJhZnRGb3JjZU11bHRpcGxpZXIgPSAwLjAyOworICAgIH0KKyAgICByZXR1
cm4gUGh5c2ljc1ZvcnRleEV2ZW50T3B0aW9uczsKK30oKSk7CisKKy8qKgorKiBUaGUgc3RyZW5n
aHQgb2YgdGhlIGZvcmNlIGluIGNvcnJlc3BvbmRlbmNlIHRvIHRoZSBkaXN0YW5jZSBvZiB0aGUg
YWZmZWN0ZWQgb2JqZWN0CisqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8v
dXNpbmdfdGhlX3BoeXNpY3NfZW5naW5lI2Z1cnRoZXItZnVuY3Rpb25hbGl0eS1vZi10aGUtaW1w
b3N0b3ItY2xhc3MKKyovCit2YXIgUGh5c2ljc1JhZGlhbEltcHVsc2VGYWxsb2ZmOworKGZ1bmN0
aW9uIChQaHlzaWNzUmFkaWFsSW1wdWxzZUZhbGxvZmYpIHsKKyAgICAvKiogRGVmaW5lcyB0aGF0
IGltcHVsc2UgaXMgY29uc3RhbnQgaW4gc3RyZW5ndGggYWNyb3NzIGl0J3Mgd2hvbGUgcmFkaXVz
ICovCisgICAgUGh5c2ljc1JhZGlhbEltcHVsc2VGYWxsb2ZmW1BoeXNpY3NSYWRpYWxJbXB1bHNl
RmFsbG9mZlsiQ29uc3RhbnQiXSA9IDBdID0gIkNvbnN0YW50IjsKKyAgICAvKiogRGVmaW5lcyB0
aGF0IGltcHVsc2UgZ2V0cyB3ZWFrZXIgaWYgaXQncyBmdXJ0aGVyIGZyb20gdGhlIG9yaWdpbiAq
LworICAgIFBoeXNpY3NSYWRpYWxJbXB1bHNlRmFsbG9mZltQaHlzaWNzUmFkaWFsSW1wdWxzZUZh
bGxvZmZbIkxpbmVhciJdID0gMV0gPSAiTGluZWFyIjsKK30pKFBoeXNpY3NSYWRpYWxJbXB1bHNl
RmFsbG9mZiB8fCAoUGh5c2ljc1JhZGlhbEltcHVsc2VGYWxsb2ZmID0ge30pKTsKKy8qKgorICog
VGhlIHN0cmVuZ3RoIG9mIHRoZSBmb3JjZSBpbiBjb3JyZXNwb25kZW5jZSB0byB0aGUgZGlzdGFu
Y2Ugb2YgdGhlIGFmZmVjdGVkIG9iamVjdAorICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMu
Y29tL2hvd190by91c2luZ190aGVfcGh5c2ljc19lbmdpbmUjZnVydGhlci1mdW5jdGlvbmFsaXR5
LW9mLXRoZS1pbXBvc3Rvci1jbGFzcworICovCit2YXIgUGh5c2ljc1VwZHJhZnRNb2RlOworKGZ1
bmN0aW9uIChQaHlzaWNzVXBkcmFmdE1vZGUpIHsKKyAgICAvKiogRGVmaW5lcyB0aGF0IHRoZSB1
cHN0cmVhbSBmb3JjZXMgd2lsbCBwdWxsIHRvd2FyZHMgdGhlIHRvcCBjZW50ZXIgb2YgdGhlIGN5
bGluZGVyICovCisgICAgUGh5c2ljc1VwZHJhZnRNb2RlW1BoeXNpY3NVcGRyYWZ0TW9kZVsiQ2Vu
dGVyIl0gPSAwXSA9ICJDZW50ZXIiOworICAgIC8qKiBEZWZpbmVzIHRoYXQgb25jZSBhIGltcG9z
dG9yIGlzIGluc2lkZSB0aGUgY3lsaW5kZXIsIGl0IHdpbGwgc2hvb3Qgb3V0IHBlcnBlbmRpY3Vs
YXIgZnJvbSB0aGUgZ3JvdW5kIG9mIHRoZSBjeWxpbmRlciAqLworICAgIFBoeXNpY3NVcGRyYWZ0
TW9kZVtQaHlzaWNzVXBkcmFmdE1vZGVbIlBlcnBlbmRpY3VsYXIiXSA9IDFdID0gIlBlcnBlbmRp
Y3VsYXIiOworfSkoUGh5c2ljc1VwZHJhZnRNb2RlIHx8IChQaHlzaWNzVXBkcmFmdE1vZGUgPSB7
fSkpOworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9QaHlzaWNzL3BoeXNpY3NJbXBvc3Rvci50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L1BoeXNpY3MvcGh5c2ljc0ltcG9zdG9yLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQaHlzaWNzSW1wb3N0b3Ig
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc0ltcG9zdG9yIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBQaHlzaWNzSW1wb3N0b3I7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlzYy9sb2dnZXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19hcnJheVRvb2xzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL2FycmF5
VG9vbHMgKi8gIi4vTWlzYy9hcnJheVRvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRo
LnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYWJzdHJhY3RN
ZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NZXNoZXMvYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1lc2gudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9tZXNoICovICIu
L01lc2hlcy9tZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3BoeXNpY3NKb2lu
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9waHlzaWNzSm9pbnQgKi8gIi4vUGh5c2ljcy9waHlzaWNzSm9pbnQudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLmF4aXMgKi8gIi4v
TWF0aHMvbWF0aC5heGlzLnRzIik7CisKKworCisKKworCisKK19NZXNoZXNfbWVzaF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNZXNoIl0uX1BoeXNpY3NJbXBvc3RvclBhcnNlciA9IGZ1
bmN0aW9uIChzY2VuZSwgcGh5c2ljT2JqZWN0LCBqc29uT2JqZWN0KSB7CisgICAgcmV0dXJuIG5l
dyBQaHlzaWNzSW1wb3N0b3IocGh5c2ljT2JqZWN0LCBqc29uT2JqZWN0LnBoeXNpY3NJbXBvc3Rv
ciwgeworICAgICAgICBtYXNzOiBqc29uT2JqZWN0LnBoeXNpY3NNYXNzLAorICAgICAgICBmcmlj
dGlvbjoganNvbk9iamVjdC5waHlzaWNzRnJpY3Rpb24sCisgICAgICAgIHJlc3RpdHV0aW9uOiBq
c29uT2JqZWN0LnBoeXNpY3NSZXN0aXR1dGlvbgorICAgIH0sIHNjZW5lKTsKK307CisvKioKKyAq
IFJlcHJlc2VudHMgYSBwaHlzaWNzIGltcG9zdGVyCisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnls
b25qcy5jb20vaG93X3RvL3VzaW5nX3RoZV9waHlzaWNzX2VuZ2luZQorICovCit2YXIgUGh5c2lj
c0ltcG9zdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAq
IEluaXRpYWxpemVzIHRoZSBwaHlzaWNzIGltcG9zdGVyCisgICAgICogQHBhcmFtIG9iamVjdCBU
aGUgcGh5c2ljcy1lbmFibGVkIG9iamVjdCB1c2VkIGFzIHRoZSBwaHlzaWNzIGltcG9zdGVyCisg
ICAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIHBoeXNpY3MgaW1wb3N0ZXIKKyAgICAg
KiBAcGFyYW0gX29wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSBwaHlzaWNzIGltcG9zdGVyCisg
ICAgICogQHBhcmFtIF9zY2VuZSBUaGUgQmFieWxvbiBzY2VuZQorICAgICAqLworICAgIGZ1bmN0
aW9uIFBoeXNpY3NJbXBvc3RvcigKKyAgICAvKioKKyAgICAgKiBUaGUgcGh5c2ljcy1lbmFibGVk
IG9iamVjdCB1c2VkIGFzIHRoZSBwaHlzaWNzIGltcG9zdGVyCisgICAgICovCisgICAgb2JqZWN0
LCAKKyAgICAvKioKKyAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcGh5c2ljcyBpbXBvc3RlcgorICAg
ICAqLworICAgIHR5cGUsIF9vcHRpb25zLCBfc2NlbmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgaWYgKF9vcHRpb25zID09PSB2b2lkIDApIHsgX29wdGlvbnMgPSB7IG1h
c3M6IDAgfTsgfQorICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDsKKyAgICAgICAgdGhpcy50
eXBlID0gdHlwZTsKKyAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zOworICAgICAgICB0
aGlzLl9zY2VuZSA9IF9zY2VuZTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhp
cy5fcGx1Z2luRGF0YSA9IHt9OworICAgICAgICB0aGlzLl9ib2R5VXBkYXRlUmVxdWlyZWQgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5fb25CZWZvcmVQaHlzaWNzU3RlcENhbGxiYWNrcyA9IG5ldyBB
cnJheSgpOworICAgICAgICB0aGlzLl9vbkFmdGVyUGh5c2ljc1N0ZXBDYWxsYmFja3MgPSBuZXcg
QXJyYXkoKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fb25QaHlzaWNz
Q29sbGlkZUNhbGxiYWNrcyA9IFtdOworICAgICAgICB0aGlzLl9kZWx0YVBvc2l0aW9uID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIHRoaXMuX2lzRGlzcG9zZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc29mdCA9IGZhbHNl
OworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5zZWdtZW50cyA9IDA7CisgICAgICAgIC8vdGVtcCB2YXJpYWJsZXMgZm9yIHBhcmVudCBy
b3RhdGlvbiBjYWxjdWxhdGlvbnMKKyAgICAgICAgLy9wcml2YXRlIF9tYXRzOiBBcnJheTxNYXRy
aXg+ID0gW25ldyBNYXRyaXgoKSwgbmV3IE1hdHJpeCgpXTsKKyAgICAgICAgdGhpcy5fdG1wUXVh
dCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
UXVhdGVybmlvbiJdKCk7CisgICAgICAgIHRoaXMuX3RtcFF1YXQyID0gbmV3IF9NYXRoc19tYXRo
X3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJRdWF0ZXJuaW9uIl0oKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYnkgdGhlIHBo
eXNpY3MgZW5naW5lLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5iZWZvcmVTdGVwID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCFfdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLm9i
amVjdC50cmFuc2xhdGUoX3RoaXMuX2RlbHRhUG9zaXRpb24sIC0xKTsKKyAgICAgICAgICAgIF90
aGlzLl9kZWx0YVJvdGF0aW9uQ29uanVnYXRlZCAmJiBfdGhpcy5vYmplY3Qucm90YXRpb25RdWF0
ZXJuaW9uICYmIF90aGlzLm9iamVjdC5yb3RhdGlvblF1YXRlcm5pb24ubXVsdGlwbHlUb1JlZihf
dGhpcy5fZGVsdGFSb3RhdGlvbkNvbmp1Z2F0ZWQsIF90aGlzLm9iamVjdC5yb3RhdGlvblF1YXRl
cm5pb24pOworICAgICAgICAgICAgX3RoaXMub2JqZWN0LmNvbXB1dGVXb3JsZE1hdHJpeChmYWxz
ZSk7CisgICAgICAgICAgICBpZiAoX3RoaXMub2JqZWN0LnBhcmVudCAmJiBfdGhpcy5vYmplY3Qu
cm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuZ2V0UGFyZW50c1Jv
dGF0aW9uKCk7CisgICAgICAgICAgICAgICAgX3RoaXMuX3RtcFF1YXQubXVsdGlwbHlUb1JlZihf
dGhpcy5vYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uLCBfdGhpcy5fdG1wUXVhdCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fdG1wUXVh
dC5jb3B5RnJvbShfdGhpcy5vYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uIHx8IG5ldyBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJdKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFfdGhpcy5fb3B0aW9ucy5kaXNhYmxl
QmlkaXJlY3Rpb25hbFRyYW5zZm9ybWF0aW9uKSB7CisgICAgICAgICAgICAgICAgX3RoaXMub2Jq
ZWN0LnJvdGF0aW9uUXVhdGVybmlvbiAmJiBfdGhpcy5fcGh5c2ljc0VuZ2luZS5nZXRQaHlzaWNz
UGx1Z2luKCkuc2V0UGh5c2ljc0JvZHlUcmFuc2Zvcm1hdGlvbihfdGhpcywgLypiSW5mby5ib3Vu
ZGluZ0JveC5jZW50ZXJXb3JsZCovIF90aGlzLm9iamVjdC5nZXRBYnNvbHV0ZVBvc2l0aW9uKCks
IF90aGlzLl90bXBRdWF0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl9vbkJl
Zm9yZVBoeXNpY3NTdGVwQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGZ1bmMpIHsKKyAgICAg
ICAgICAgICAgICBmdW5jKF90aGlzKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9OworICAg
ICAgICAvKioKKyAgICAgICAgICogdGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBieSB0aGUgcGh5
c2ljcyBlbmdpbmUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYWZ0ZXJTdGVwID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgaWYgKCFfdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLl9vbkFm
dGVyUGh5c2ljc1N0ZXBDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbiAoZnVuYykgeworICAgICAg
ICAgICAgICAgIGZ1bmMoX3RoaXMpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBfdGhp
cy5fcGh5c2ljc0VuZ2luZS5nZXRQaHlzaWNzUGx1Z2luKCkuc2V0VHJhbnNmb3JtYXRpb25Gcm9t
UGh5c2ljc0JvZHkoX3RoaXMpOworICAgICAgICAgICAgLy8gb2JqZWN0IGhhcyBub3cgaXRzIHdv
cmxkIHJvdGF0aW9uLiBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gbG9jYWwuCisgICAgICAgICAg
ICBpZiAoX3RoaXMub2JqZWN0LnBhcmVudCAmJiBfdGhpcy5vYmplY3Qucm90YXRpb25RdWF0ZXJu
aW9uKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuZ2V0UGFyZW50c1JvdGF0aW9uKCk7CisgICAg
ICAgICAgICAgICAgX3RoaXMuX3RtcFF1YXQuY29uanVnYXRlSW5QbGFjZSgpOworICAgICAgICAg
ICAgICAgIF90aGlzLl90bXBRdWF0Lm11bHRpcGx5VG9SZWYoX3RoaXMub2JqZWN0LnJvdGF0aW9u
UXVhdGVybmlvbiwgX3RoaXMub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyB0YWtlIHRoZSBwb3NpdGlvbiBzZXQgYW5kIG1ha2UgaXQgdGhl
IGFic29sdXRlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0LgorICAgICAgICAgICAgX3RoaXMub2Jq
ZWN0LnNldEFic29sdXRlUG9zaXRpb24oX3RoaXMub2JqZWN0LnBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIF90aGlzLl9kZWx0YVJvdGF0aW9uICYmIF90aGlzLm9iamVjdC5yb3RhdGlvblF1YXRlcm5p
b24gJiYgX3RoaXMub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbi5tdWx0aXBseVRvUmVmKF90aGlz
Ll9kZWx0YVJvdGF0aW9uLCBfdGhpcy5vYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uKTsKKyAgICAg
ICAgICAgIF90aGlzLm9iamVjdC50cmFuc2xhdGUoX3RoaXMuX2RlbHRhUG9zaXRpb24sIDEpOwor
ICAgICAgICB9OworICAgICAgICAvKioKKyAgICAgICAgICogTGVnYWN5IGNvbGxpc2lvbiBkZXRl
Y3Rpb24gZXZlbnQgc3VwcG9ydAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkNvbGxpZGVF
dmVudCA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBldmVudCBhbmQgYm9keSBvYmpl
Y3QgZHVlIHRvIGNhbm5vbidzIGV2ZW50LWJhc2VkIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICov
CisgICAgICAgIHRoaXMub25Db2xsaWRlID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGlm
ICghX3RoaXMuX29uUGh5c2ljc0NvbGxpZGVDYWxsYmFja3MubGVuZ3RoICYmICFfdGhpcy5vbkNv
bGxpZGVFdmVudCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghX3RoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgb3RoZXJJbXBvc3RvciA9IF90
aGlzLl9waHlzaWNzRW5naW5lLmdldEltcG9zdG9yV2l0aFBoeXNpY3NCb2R5KGUuYm9keSk7Cisg
ICAgICAgICAgICBpZiAob3RoZXJJbXBvc3RvcikgeworICAgICAgICAgICAgICAgIC8vIExlZ2Fj
eSBjb2xsaXNpb24gZGV0ZWN0aW9uIGV2ZW50IHN1cHBvcnQKKyAgICAgICAgICAgICAgICBpZiAo
X3RoaXMub25Db2xsaWRlRXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMub25Db2xs
aWRlRXZlbnQoX3RoaXMsIG90aGVySW1wb3N0b3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBfdGhpcy5fb25QaHlzaWNzQ29sbGlkZUNhbGxiYWNrcy5maWx0ZXIoZnVuY3Rp
b24gKG9iaikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLm90aGVySW1wb3N0b3Jz
LmluZGV4T2Yob3RoZXJJbXBvc3RvcikgIT09IC0xOworICAgICAgICAgICAgICAgIH0pLmZvckVh
Y2goZnVuY3Rpb24gKG9iaikgeworICAgICAgICAgICAgICAgICAgICBvYmouY2FsbGJhY2soX3Ro
aXMsIG90aGVySW1wb3N0b3IpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9OworICAgICAgICAvL3Nhbml0eSBjaGVjayEKKyAgICAgICAgaWYgKCF0aGlzLm9i
amVjdCkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkxvZ2dlciJdLkVycm9yKCJObyBvYmplY3Qgd2FzIHByb3ZpZGVkLiBBIHBoeXNpY3Mg
b2JqZWN0IGlzIG9ibGlnYXRvcnkiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodGhpcy5vYmplY3QucGFyZW50ICYmIF9vcHRpb25zLm1hc3MgIT09IDApIHsK
KyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJM
b2dnZXIiXS5XYXJuKCJBIHBoeXNpY3MgaW1wb3N0b3IgaGFzIGJlZW4gY3JlYXRlZCBmb3IgYW4g
b2JqZWN0IHdoaWNoIGhhcyBhIHBhcmVudC4gQmFieWxvbiBwaHlzaWNzIGN1cnJlbnRseSB3b3Jr
cyBpbiBsb2NhbCBzcGFjZSBzbyB1bmV4cGVjdGVkIGlzc3VlcyBtYXkgb2NjdXIuIik7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gTGVnYWN5IHN1cHBvcnQgZm9yIG9sZCBzeW50YXguCisgICAgICAg
IGlmICghdGhpcy5fc2NlbmUgJiYgb2JqZWN0LmdldFNjZW5lKSB7CisgICAgICAgICAgICB0aGlz
Ll9zY2VuZSA9IG9iamVjdC5nZXRTY2VuZSgpOworICAgICAgICB9CisgICAgICAgIGlmICghdGhp
cy5fc2NlbmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy50eXBlID4gMTAwKSB7CisgICAgICAgICAgICB0aGlzLnNvZnQgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRQaHlzaWNz
RW5naW5lKCk7CisgICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLkVy
cm9yKCJQaHlzaWNzIG5vdCBlbmFibGVkLiBQbGVhc2UgdXNlIHNjZW5lLmVuYWJsZVBoeXNpY3Mo
Li4uKSBiZWZvcmUgY3JlYXRpbmcgaW1wb3N0b3JzLiIpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgLy9zZXQgdGhlIG9iamVjdCdzIHF1YXRlcm5pb24sIGlmIG5vdCBz
ZXQKKyAgICAgICAgICAgIGlmICghdGhpcy5vYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHRoaXMub2JqZWN0LnJvdGF0aW9uKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMub2JqZWN0LnJvdGF0aW9uUXVhdGVybmlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJRdWF0ZXJuaW9uIl0uUm90YXRpb25ZYXdQ
aXRjaFJvbGwodGhpcy5vYmplY3Qucm90YXRpb24ueSwgdGhpcy5vYmplY3Qucm90YXRpb24ueCwg
dGhpcy5vYmplY3Qucm90YXRpb24ueik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9iamVjdC5yb3RhdGlvblF1YXRl
cm5pb24gPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlF1YXRlcm5pb24iXSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vZGVmYXVsdCBvcHRpb25zIHBhcmFtcworICAgICAgICAgICAgdGhpcy5fb3B0
aW9ucy5tYXNzID0gKF9vcHRpb25zLm1hc3MgPT09IHZvaWQgMCkgPyAwIDogX29wdGlvbnMubWFz
czsKKyAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuZnJpY3Rpb24gPSAoX29wdGlvbnMuZnJpY3Rp
b24gPT09IHZvaWQgMCkgPyAwLjIgOiBfb3B0aW9ucy5mcmljdGlvbjsKKyAgICAgICAgICAgIHRo
aXMuX29wdGlvbnMucmVzdGl0dXRpb24gPSAoX29wdGlvbnMucmVzdGl0dXRpb24gPT09IHZvaWQg
MCkgPyAwLjIgOiBfb3B0aW9ucy5yZXN0aXR1dGlvbjsKKyAgICAgICAgICAgIGlmICh0aGlzLnNv
ZnQpIHsKKyAgICAgICAgICAgICAgICAvL3NvZnRib2R5IG1hc3MgbXVzdCBiZSBhYm92ZSAwOwor
ICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMubWFzcyA9IHRoaXMuX29wdGlvbnMubWFzcyA+
IDAgPyB0aGlzLl9vcHRpb25zLm1hc3MgOiAxOworICAgICAgICAgICAgICAgIHRoaXMuX29wdGlv
bnMucHJlc3N1cmUgPSAoX29wdGlvbnMucHJlc3N1cmUgPT09IHZvaWQgMCkgPyAyMDAgOiBfb3B0
aW9ucy5wcmVzc3VyZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zLnN0aWZmbmVzcyA9
IChfb3B0aW9ucy5zdGlmZm5lc3MgPT09IHZvaWQgMCkgPyAxIDogX29wdGlvbnMuc3RpZmZuZXNz
OworICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMudmVsb2NpdHlJdGVyYXRpb25zID0gKF9v
cHRpb25zLnZlbG9jaXR5SXRlcmF0aW9ucyA9PT0gdm9pZCAwKSA/IDIwIDogX29wdGlvbnMudmVs
b2NpdHlJdGVyYXRpb25zOworICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMucG9zaXRpb25J
dGVyYXRpb25zID0gKF9vcHRpb25zLnBvc2l0aW9uSXRlcmF0aW9ucyA9PT0gdm9pZCAwKSA/IDIw
IDogX29wdGlvbnMucG9zaXRpb25JdGVyYXRpb25zOworICAgICAgICAgICAgICAgIHRoaXMuX29w
dGlvbnMuZml4ZWRQb2ludHMgPSAoX29wdGlvbnMuZml4ZWRQb2ludHMgPT09IHZvaWQgMCkgPyAw
IDogX29wdGlvbnMuZml4ZWRQb2ludHM7CisgICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5t
YXJnaW4gPSAoX29wdGlvbnMubWFyZ2luID09PSB2b2lkIDApID8gMCA6IF9vcHRpb25zLm1hcmdp
bjsKKyAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zLmRhbXBpbmcgPSAoX29wdGlvbnMuZGFt
cGluZyA9PT0gdm9pZCAwKSA/IDAgOiBfb3B0aW9ucy5kYW1waW5nOworICAgICAgICAgICAgICAg
IHRoaXMuX29wdGlvbnMucGF0aCA9IChfb3B0aW9ucy5wYXRoID09PSB2b2lkIDApID8gbnVsbCA6
IF9vcHRpb25zLnBhdGg7CisgICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5zaGFwZSA9IChf
b3B0aW9ucy5zaGFwZSA9PT0gdm9pZCAwKSA/IG51bGwgOiBfb3B0aW9ucy5zaGFwZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2pvaW50cyA9IFtdOworICAgICAgICAgICAgLy9J
ZiB0aGUgbWVzaCBoYXMgYSBwYXJlbnQsIGRvbid0IGluaXRpYWxpemUgdGhlIHBoeXNpY3NCb2R5
LiBJbnN0ZWFkIHdhaXQgZm9yIHRoZSBwYXJlbnQgdG8gZG8gdGhhdC4KKyAgICAgICAgICAgIGlm
ICghdGhpcy5vYmplY3QucGFyZW50IHx8IHRoaXMuX29wdGlvbnMuaWdub3JlUGFyZW50KSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5faW5pdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAodGhpcy5vYmplY3QucGFyZW50LnBoeXNpY3NJbXBvc3RvcikgeworICAgICAgICAg
ICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJMb2dnZXIi
XS5XYXJuKCJZb3UgbXVzdCBhZmZlY3QgaW1wb3N0b3JzIHRvIGNoaWxkcmVuIGJlZm9yZSBhZmZl
Y3RpbmcgaW1wb3N0b3IgdG8gcGFyZW50LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQaHlzaWNzSW1wb3N0b3IucHJvdG90eXBl
LCAiaXNEaXNwb3NlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0
aGUgcGh5c2ljcyBpbXBvc3RlciBpcyBkaXNwb3NlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEaXNwb3NlZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBoeXNpY3NJbXBvc3Rv
ci5wcm90b3R5cGUsICJtYXNzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUg
bWFzcyBvZiB0aGUgcGh5c2ljcyBpbXBvc3RlcgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGh5c2ljc0VuZ2luZSA/IHRo
aXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1BsdWdpbigpLmdldEJvZHlNYXNzKHRoaXMpIDog
MDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg
ICAgIHRoaXMuc2V0TWFzcyh2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShQaHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLCAiZnJpY3Rpb24iLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjb2VmZmljaWVudCBvZiBmcmljdGlvbgor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fcGh5c2ljc0VuZ2luZSA/IHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1Bs
dWdpbigpLmdldEJvZHlGcmljdGlvbih0aGlzKSA6IDA7CisgICAgICAgIH0sCisgICAgICAgIC8q
KgorICAgICAgICAgKiBTZXRzIHRoZSBjb2VmZmljaWVudCBvZiBmcmljdGlvbgorICAgICAgICAg
Ki8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghdGhp
cy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1BsdWdpbigpLnNl
dEJvZHlGcmljdGlvbih0aGlzLCB2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShQaHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLCAicmVzdGl0dXRpb24i
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBjb2VmZmljaWVudCBvZiByZXN0
aXR1dGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fcGh5c2ljc0VuZ2luZSA/IHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0
UGh5c2ljc1BsdWdpbigpLmdldEJvZHlSZXN0aXR1dGlvbih0aGlzKSA6IDA7CisgICAgICAgIH0s
CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBjb2VmZmljaWVudCBvZiByZXN0aXR1
dGlvbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAg
ICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5
c2ljc1BsdWdpbigpLnNldEJvZHlSZXN0aXR1dGlvbih0aGlzLCB2YWx1ZSk7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQaHlzaWNzSW1wb3N0b3IucHJvdG90
eXBlLCAicHJlc3N1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBwcmVz
c3VyZSBvZiBhIHNvZnQgYm9keTsgb25seSBzdXBwb3J0ZWQgYnkgdGhlIEFtbW9KU1BsdWdpbgor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAo
IXRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHZhciBwbHVnaW4gPSB0aGlzLl9waHlzaWNzRW5naW5lLmdl
dFBoeXNpY3NQbHVnaW4oKTsKKyAgICAgICAgICAgIGlmICghcGx1Z2luLnNldEJvZHlQcmVzc3Vy
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHBsdWdpbi5nZXRCb2R5UHJlc3N1cmUodGhpcyk7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBwcmVzc3VyZSBvZiBhIHNvZnQgYm9keTsgb25s
eSBzdXBwb3J0ZWQgYnkgdGhlIEFtbW9KU1BsdWdpbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2lu
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciBwbHVnaW4gPSB0aGlzLl9waHlzaWNzRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKTsKKyAg
ICAgICAgICAgIGlmICghcGx1Z2luLnNldEJvZHlQcmVzc3VyZSkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBsdWdpbi5zZXRCb2R5UHJlc3N1
cmUodGhpcywgdmFsdWUpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZSwgInN0aWZmbmVzcyIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIHN0aWZmbmVzcyBvZiBhIHNvZnQgYm9keTsgb25seSBz
dXBwb3J0ZWQgYnkgdGhlIEFtbW9KU1BsdWdpbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBw
bHVnaW4gPSB0aGlzLl9waHlzaWNzRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKTsKKyAgICAgICAg
ICAgIGlmICghcGx1Z2luLmdldEJvZHlTdGlmZm5lc3MpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwbHVnaW4uZ2V0Qm9keVN0
aWZmbmVzcyh0aGlzKTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMg
dGhlIHN0aWZmbmVzcyBvZiBhIHNvZnQgYm9keTsgb25seSBzdXBwb3J0ZWQgYnkgdGhlIEFtbW9K
U1BsdWdpbgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBwbHVnaW4gPSB0aGlzLl9waHlz
aWNzRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKTsKKyAgICAgICAgICAgIGlmICghcGx1Z2luLnNl
dEJvZHlTdGlmZm5lc3MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBwbHVnaW4uc2V0Qm9keVN0aWZmbmVzcyh0aGlzLCB2YWx1ZSk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQaHlzaWNzSW1wb3N0b3Iu
cHJvdG90eXBlLCAidmVsb2NpdHlJdGVyYXRpb25zIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgdmVsb2NpdHlJdGVyYXRpb25zIG9mIGEgc29mdCBib2R5OyBvbmx5IHN1cHBv
cnRlZCBieSB0aGUgQW1tb0pTUGx1Z2luCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHBsdWdp
biA9IHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1BsdWdpbigpOworICAgICAgICAgICAg
aWYgKCFwbHVnaW4uZ2V0Qm9keVZlbG9jaXR5SXRlcmF0aW9ucykgeworICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi5nZXRC
b2R5VmVsb2NpdHlJdGVyYXRpb25zKHRoaXMpOworICAgICAgICB9LAorICAgICAgICAvKioKKyAg
ICAgICAgICogU2V0cyB0aGUgdmVsb2NpdHlJdGVyYXRpb25zIG9mIGEgc29mdCBib2R5OyBvbmx5
IHN1cHBvcnRlZCBieSB0aGUgQW1tb0pTUGx1Z2luCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9waHlzaWNzRW5naW5l
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIHBsdWdpbiA9IHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1BsdWdpbigpOworICAg
ICAgICAgICAgaWYgKCFwbHVnaW4uc2V0Qm9keVZlbG9jaXR5SXRlcmF0aW9ucykgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBsdWdpbi5zZXRC
b2R5VmVsb2NpdHlJdGVyYXRpb25zKHRoaXMsIHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUsICJwb3Np
dGlvbkl0ZXJhdGlvbnMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBwb3Np
dGlvbkl0ZXJhdGlvbnMgb2YgYSBzb2Z0IGJvZHk7IG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBBbW1v
SlNQbHVnaW4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgaWYgKCF0aGlzLl9waHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcGx1Z2luID0gdGhpcy5fcGh5c2lj
c0VuZ2luZS5nZXRQaHlzaWNzUGx1Z2luKCk7CisgICAgICAgICAgICBpZiAoIXBsdWdpbi5nZXRC
b2R5UG9zaXRpb25JdGVyYXRpb25zKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcGx1Z2luLmdldEJvZHlQb3NpdGlvbkl0ZXJh
dGlvbnModGhpcyk7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRo
ZSBwb3NpdGlvbkl0ZXJhdGlvbnMgb2YgYSBzb2Z0IGJvZHk7IG9ubHkgc3VwcG9ydGVkIGJ5IHRo
ZSBBbW1vSlNQbHVnaW4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcGx1Z2luID0gdGhp
cy5fcGh5c2ljc0VuZ2luZS5nZXRQaHlzaWNzUGx1Z2luKCk7CisgICAgICAgICAgICBpZiAoIXBs
dWdpbi5zZXRCb2R5UG9zaXRpb25JdGVyYXRpb25zKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGx1Z2luLnNldEJvZHlQb3NpdGlvbkl0ZXJh
dGlvbnModGhpcywgdmFsdWUpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBU
aGlzIGZ1bmN0aW9uIHdpbGwgY29tcGxldGx5IGluaXRpYWxpemUgdGhpcyBpbXBvc3Rvci4KKyAg
ICAgKiBJdCB3aWxsIGNyZWF0ZSBhIG5ldyBib2R5IC0gYnV0IG9ubHkgaWYgdGhpcyBtZXNoIGhh
cyBubyBwYXJlbnQuCisgICAgICogSWYgaXQgaGFzLCB0aGlzIGltcG9zdG9yIHdpbGwgbm90IGJl
IHVzZWQgb3RoZXIgdGhhbiB0byBkZWZpbmUgdGhlIGltcG9zdG9yCisgICAgICogb2YgdGhlIGNo
aWxkIG1lc2guCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5w
cm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fcGh5c2lj
c0VuZ2luZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMu
X3BoeXNpY3NFbmdpbmUucmVtb3ZlSW1wb3N0b3IodGhpcyk7CisgICAgICAgIHRoaXMucGh5c2lj
c0JvZHkgPSBudWxsOworICAgICAgICB0aGlzLl9wYXJlbnQgPSB0aGlzLl9wYXJlbnQgfHwgdGhp
cy5fZ2V0UGh5c2ljc1BhcmVudCgpOworICAgICAgICBpZiAoIXRoaXMuX2lzRGlzcG9zZWQgJiYg
KCF0aGlzLnBhcmVudCB8fCB0aGlzLl9vcHRpb25zLmlnbm9yZVBhcmVudCkpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuYWRkSW1wb3N0b3IodGhpcyk7CisgICAgICAgIH0KKyAg
ICB9OworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuX2dldFBoeXNpY3NQYXJlbnQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLm9iamVjdC5wYXJlbnQgaW5zdGFuY2VvZiBf
TWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJBYnN0cmFj
dE1lc2giXSkgeworICAgICAgICAgICAgdmFyIHBhcmVudE1lc2ggPSB0aGlzLm9iamVjdC5wYXJl
bnQ7CisgICAgICAgICAgICByZXR1cm4gcGFyZW50TWVzaC5waHlzaWNzSW1wb3N0b3I7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTaG91
bGQgYSBuZXcgYm9keSBiZSBnZW5lcmF0ZWQuCisgICAgICogQHJldHVybnMgYm9vbGVhbiBzcGVj
aWZ5aW5nIGlmIGJvZHkgaW5pdGlhbGl6YXRpb24gaXMgcmVxdWlyZWQKKyAgICAgKi8KKyAgICBQ
aHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLmlzQm9keUluaXRSZXF1aXJlZCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2JvZHlVcGRhdGVSZXF1aXJlZCB8fCAoIXRoaXMuX3Bo
eXNpY3NCb2R5ICYmICF0aGlzLl9wYXJlbnQpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0
cyB0aGUgdXBkYXRlZCBzY2FsaW5nCisgICAgICogQHBhcmFtIHVwZGF0ZWQgU3BlY2lmaWVzIGlm
IHRoZSBzY2FsaW5nIGlzIHVwZGF0ZWQKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IucHJv
dG90eXBlLnNldFNjYWxpbmdVcGRhdGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmZv
cmNlVXBkYXRlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBGb3JjZSBhIHJlZ2VuZXJhdGlv
biBvZiB0aGlzIG9yIHRoZSBwYXJlbnQncyBpbXBvc3RvcidzIGJvZHkuCisgICAgICogVXNlIHVu
ZGVyIGNhdXRpb3VzIC0gVGhpcyB3aWxsIHJlbW92ZSBhbGwgam9pbnRzIGFscmVhZHkgaW1wbGVt
ZW50ZWQuCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5mb3JjZVVwZGF0
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faW5pdCgpOworICAgICAgICBpZiAodGhp
cy5wYXJlbnQgJiYgIXRoaXMuX29wdGlvbnMuaWdub3JlUGFyZW50KSB7CisgICAgICAgICAgICB0
aGlzLnBhcmVudC5mb3JjZVVwZGF0ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZSwgInBoeXNpY3NCb2R5Iiwg
eworICAgICAgICAvKnB1YmxpYyBnZXQgbWVzaCgpOiBBYnN0cmFjdE1lc2ggeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX21lc2g7CisgICAgICAgIH0qLworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyB0aGUgYm9keSB0aGF0IGhvbGRzIHRoaXMgaW1wb3N0b3IuIEVpdGhlciBpdHMgb3du
LCBvciBpdHMgcGFyZW50LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gKHRoaXMuX3BhcmVudCAmJiAhdGhpcy5fb3B0aW9ucy5pZ25v
cmVQYXJlbnQpID8gdGhpcy5fcGFyZW50LnBoeXNpY3NCb2R5IDogdGhpcy5fcGh5c2ljc0JvZHk7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIHBoeXNpY3MgYm9k
eS4gVXNlZCBtYWlubHkgYnkgdGhlIHBoeXNpY3MgZW5naW5lL3BsdWdpbgorICAgICAgICAgKi8K
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAocGh5c2ljc0JvZHkpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9waHlzaWNzQm9keSAmJiB0aGlzLl9waHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fcGh5c2ljc0VuZ2luZS5nZXRQaHlzaWNzUGx1Z2luKCkucmVtb3ZlUGh5c2ljc0Jv
ZHkodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzQm9keSA9
IHBoeXNpY3NCb2R5OworICAgICAgICAgICAgdGhpcy5yZXNldFVwZGF0ZUZsYWdzKCk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQaHlzaWNzSW1wb3N0b3Iu
cHJvdG90eXBlLCAicGFyZW50IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0IHRoZSBw
YXJlbnQgb2YgdGhlIHBoeXNpY3MgaW1wb3N0ZXIKKyAgICAgICAgICogQHJldHVybnMgUGh5c2lj
cyBpbXBvc3RlciBvciBudWxsCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiAhdGhpcy5fb3B0aW9ucy5pZ25vcmVQYXJlbnQgJiYgdGhp
cy5fcGFyZW50ID8gdGhpcy5fcGFyZW50IDogbnVsbDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFNldHMgdGhlIHBhcmVudCBvZiB0aGUgcGh5c2ljcyBpbXBvc3RlcgorICAg
ICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRo
aXMuX3BhcmVudCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBS
ZXNldHMgdGhlIHVwZGF0ZSBmbGFncworICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90
b3R5cGUucmVzZXRVcGRhdGVGbGFncyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fYm9k
eVVwZGF0ZVJlcXVpcmVkID0gZmFsc2U7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRo
ZSBvYmplY3QgZXh0ZW5kIHNpemUKKyAgICAgKiBAcmV0dXJucyB0aGUgb2JqZWN0IGV4dGVuZCBz
aXplCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5nZXRPYmplY3RFeHRl
bmRTaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5vYmplY3QuZ2V0Qm91bmRp
bmdJbmZvKSB7CisgICAgICAgICAgICB2YXIgcSA9IHRoaXMub2JqZWN0LnJvdGF0aW9uUXVhdGVy
bmlvbjsKKyAgICAgICAgICAgIC8vcmVzZXQgcm90YXRpb24KKyAgICAgICAgICAgIHRoaXMub2Jq
ZWN0LnJvdGF0aW9uUXVhdGVybmlvbiA9IFBoeXNpY3NJbXBvc3Rvci5JREVOVElUWV9RVUFURVJO
SU9OOworICAgICAgICAgICAgLy9jYWxjdWxhdGUgdGhlIHdvcmxkIG1hdHJpeCB3aXRoIG5vIHJv
dGF0aW9uCisgICAgICAgICAgICB0aGlzLm9iamVjdC5jb21wdXRlV29ybGRNYXRyaXggJiYgdGhp
cy5vYmplY3QuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAgICAgICAgdmFyIGJvdW5k
aW5nSW5mbyA9IHRoaXMub2JqZWN0LmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICAgICAgdmFy
IHNpemUgPSBib3VuZGluZ0luZm8uYm91bmRpbmdCb3guZXh0ZW5kU2l6ZVdvcmxkLnNjYWxlKDIp
OworICAgICAgICAgICAgLy9icmluZyBiYWNrIHRoZSByb3RhdGlvbgorICAgICAgICAgICAgdGhp
cy5vYmplY3Qucm90YXRpb25RdWF0ZXJuaW9uID0gcTsKKyAgICAgICAgICAgIC8vY2FsY3VsYXRl
IHRoZSB3b3JsZCBtYXRyaXggd2l0aCB0aGUgbmV3IHJvdGF0aW9uCisgICAgICAgICAgICB0aGlz
Lm9iamVjdC5jb21wdXRlV29ybGRNYXRyaXggJiYgdGhpcy5vYmplY3QuY29tcHV0ZVdvcmxkTWF0
cml4KHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHNpemU7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gUGh5c2ljc0ltcG9zdG9yLkRFRkFVTFRfT0JKRUNU
X1NJWkU7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIG9iamVj
dCBjZW50ZXIKKyAgICAgKiBAcmV0dXJucyBUaGUgb2JqZWN0IGNlbnRlcgorICAgICAqLworICAg
IFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuZ2V0T2JqZWN0Q2VudGVyID0gZnVuY3Rpb24gKCkg
eworICAgICAgICBpZiAodGhpcy5vYmplY3QuZ2V0Qm91bmRpbmdJbmZvKSB7CisgICAgICAgICAg
ICB2YXIgYm91bmRpbmdJbmZvID0gdGhpcy5vYmplY3QuZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAg
ICAgICAgICByZXR1cm4gYm91bmRpbmdJbmZvLmJvdW5kaW5nQm94LmNlbnRlcldvcmxkOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0LnBv
c2l0aW9uOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgYSBzcGVjaWZp
YyBwYXJhbWV0ZXMgZnJvbSB0aGUgb3B0aW9ucyBwYXJhbWV0ZXIKKyAgICAgKiBAcGFyYW0gcGFy
YW1OYW1lIFRoZSBvYmplY3QgcGFyYW1ldGVyIG5hbWUKKyAgICAgKiBAcmV0dXJucyBUaGUgb2Jq
ZWN0IHBhcmFtZXRlcgorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuZ2V0
UGFyYW0gPSBmdW5jdGlvbiAocGFyYW1OYW1lKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9vcHRp
b25zW3BhcmFtTmFtZV07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgc3BlY2lmaWMg
cGFyYW1ldGVyIGluIHRoZSBvcHRpb25zIGdpdmVuIHRvIHRoZSBwaHlzaWNzIHBsdWdpbgorICAg
ICAqIEBwYXJhbSBwYXJhbU5hbWUgVGhlIHBhcmFtZXRlciBuYW1lCisgICAgICogQHBhcmFtIHZh
bHVlIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyCisgICAgICovCisgICAgUGh5c2ljc0ltcG9z
dG9yLnByb3RvdHlwZS5zZXRQYXJhbSA9IGZ1bmN0aW9uIChwYXJhbU5hbWUsIHZhbHVlKSB7Cisg
ICAgICAgIHRoaXMuX29wdGlvbnNbcGFyYW1OYW1lXSA9IHZhbHVlOworICAgICAgICB0aGlzLl9i
b2R5VXBkYXRlUmVxdWlyZWQgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogU3BlY2lm
aWNhbGx5IGNoYW5nZSB0aGUgYm9keSdzIG1hc3Mgb3B0aW9uLiBXb24ndCByZWNyZWF0ZSB0aGUg
cGh5c2ljcyBib2R5IG9iamVjdAorICAgICAqIEBwYXJhbSBtYXNzIFRoZSBtYXNzIG9mIHRoZSBw
aHlzaWNzIGltcG9zdGVyCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5z
ZXRNYXNzID0gZnVuY3Rpb24gKG1hc3MpIHsKKyAgICAgICAgaWYgKHRoaXMuZ2V0UGFyYW0oIm1h
c3MiKSAhPT0gbWFzcykgeworICAgICAgICAgICAgdGhpcy5zZXRQYXJhbSgibWFzcyIsIG1hc3Mp
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9waHlzaWNzRW5naW5lKSB7CisgICAgICAg
ICAgICB0aGlzLl9waHlzaWNzRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKS5zZXRCb2R5TWFzcyh0
aGlzLCBtYXNzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
bGluZWFyIHZlbG9jaXR5CisgICAgICogQHJldHVybnMgIGxpbmVhciB2ZWxvY2l0eSBvciBudWxs
CisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5nZXRMaW5lYXJWZWxvY2l0
eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BoeXNpY3NFbmdpbmUgPyB0
aGlzLl9waHlzaWNzRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKS5nZXRMaW5lYXJWZWxvY2l0eSh0
aGlzKSA6IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJW
ZWN0b3IzIl0uWmVybygpOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0aGUgbGluZWFy
IHZlbG9jaXR5CisgICAgICogQHBhcmFtIHZlbG9jaXR5ICBsaW5lYXIgdmVsb2NpdHkgb3IgbnVs
bAorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuc2V0TGluZWFyVmVsb2Np
dHkgPSBmdW5jdGlvbiAodmVsb2NpdHkpIHsKKyAgICAgICAgaWYgKHRoaXMuX3BoeXNpY3NFbmdp
bmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1BsdWdpbigp
LnNldExpbmVhclZlbG9jaXR5KHRoaXMsIHZlbG9jaXR5KTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgYW5ndWxhciB2ZWxvY2l0eQorICAgICAqIEByZXR1cm5z
IGFuZ3VsYXIgdmVsb2NpdHkgb3IgbnVsbAorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5w
cm90b3R5cGUuZ2V0QW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fcGh5c2ljc0VuZ2luZSA/IHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1Bs
dWdpbigpLmdldEFuZ3VsYXJWZWxvY2l0eSh0aGlzKSA6IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZWN0b3IzIl0uWmVybygpOworICAgIH07CisgICAg
LyoqCisgICAgICogU2V0cyB0aGUgYW5ndWxhciB2ZWxvY2l0eQorICAgICAqIEBwYXJhbSB2ZWxv
Y2l0eSBUaGUgdmVsb2NpdHkgb3IgbnVsbAorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5w
cm90b3R5cGUuc2V0QW5ndWxhclZlbG9jaXR5ID0gZnVuY3Rpb24gKHZlbG9jaXR5KSB7CisgICAg
ICAgIGlmICh0aGlzLl9waHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICB0aGlzLl9waHlzaWNz
RW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKS5zZXRBbmd1bGFyVmVsb2NpdHkodGhpcywgdmVsb2Np
dHkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIGEgZnVuY3Rp
b24gd2l0aCB0aGUgcGh5c2ljcyBwbHVnaW4gbmF0aXZlIGNvZGUKKyAgICAgKiBQcm92aWRlIGEg
ZnVuY3Rpb24gdGhlIHdpbGwgaGF2ZSB0d28gdmFyaWFibGVzIC0gdGhlIHdvcmxkIG9iamVjdCBh
bmQgdGhlIHBoeXNpY3MgYm9keSBvYmplY3QKKyAgICAgKiBAcGFyYW0gZnVuYyBUaGUgZnVuY3Rp
b24gdG8gZXhlY3V0ZSB3aXRoIHRoZSBwaHlzaWNzIHBsdWdpbiBuYXRpdmUgY29kZQorICAgICAq
LworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuZXhlY3V0ZU5hdGl2ZUZ1bmN0aW9uID0g
ZnVuY3Rpb24gKGZ1bmMpIHsKKyAgICAgICAgaWYgKHRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAg
ICAgICAgICAgIGZ1bmModGhpcy5fcGh5c2ljc0VuZ2luZS5nZXRQaHlzaWNzUGx1Z2luKCkud29y
bGQsIHRoaXMucGh5c2ljc0JvZHkpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHBo
eXNpY3Mgd29ybGQgaXMgc3RlcHBpbmcgZm9yd2FyZAorICAgICAqIEBwYXJhbSBmdW5jIFRoZSBm
dW5jdGlvbiB0byBleGVjdXRlIGJlZm9yZSB0aGUgcGh5c2ljcyB3b3JsZCBpcyBzdGVwcGVkIGZv
cndhcmQKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLnJlZ2lzdGVyQmVm
b3JlUGh5c2ljc1N0ZXAgPSBmdW5jdGlvbiAoZnVuYykgeworICAgICAgICB0aGlzLl9vbkJlZm9y
ZVBoeXNpY3NTdGVwQ2FsbGJhY2tzLnB1c2goZnVuYyk7CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBVbnJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUg
cGh5c2ljcyB3b3JsZCBpcyBzdGVwcGluZyBmb3J3YXJkCisgICAgICogQHBhcmFtIGZ1bmMgVGhl
IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYmVmb3JlIHRoZSBwaHlzaWNzIHdvcmxkIGlzIHN0ZXBwZWQg
Zm9yd2FyZAorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUudW5yZWdpc3Rl
ckJlZm9yZVBoeXNpY3NTdGVwID0gZnVuY3Rpb24gKGZ1bmMpIHsKKyAgICAgICAgdmFyIGluZGV4
ID0gdGhpcy5fb25CZWZvcmVQaHlzaWNzU3RlcENhbGxiYWNrcy5pbmRleE9mKGZ1bmMpOworICAg
ICAgICBpZiAoaW5kZXggPiAtMSkgeworICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVQaHlzaWNz
U3RlcENhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkxvZ2dlciJdLldhcm4oIkZ1bmN0aW9uIHRvIHJlbW92ZSB3YXMgbm90IGZvdW5kIik7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCB3
aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBwaHlzaWNzIHN0ZXAKKyAgICAgKiBAcGFyYW0gZnVu
YyBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciBwaHlzaWNzIHN0ZXAKKyAgICAgKi8KKyAg
ICBQaHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLnJlZ2lzdGVyQWZ0ZXJQaHlzaWNzU3RlcCA9IGZ1
bmN0aW9uIChmdW5jKSB7CisgICAgICAgIHRoaXMuX29uQWZ0ZXJQaHlzaWNzU3RlcENhbGxiYWNr
cy5wdXNoKGZ1bmMpOworICAgIH07CisgICAgLyoqCisgICAgICogVW5yZWdpc3RlcnMgYSBmdW5j
dGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHBoeXNpY3Mgc3RlcAorICAgICAq
IEBwYXJhbSBmdW5jIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHBoeXNpY3Mgc3RlcAor
ICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUudW5yZWdpc3RlckFmdGVyUGh5
c2ljc1N0ZXAgPSBmdW5jdGlvbiAoZnVuYykgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9v
bkFmdGVyUGh5c2ljc1N0ZXBDYWxsYmFja3MuaW5kZXhPZihmdW5jKTsKKyAgICAgICAgaWYgKGlu
ZGV4ID4gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuX29uQWZ0ZXJQaHlzaWNzU3RlcENhbGxiYWNr
cy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkxvZ2dlciJdLldh
cm4oIkZ1bmN0aW9uIHRvIHJlbW92ZSB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIH0KKyAgICB9
OworICAgIC8qKgorICAgICAqIHJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1
dGVkIHdoZW4gdGhpcyBpbXBvc3RvciBjb2xsaWRlcyBhZ2FpbnN0IGEgZGlmZmVyZW50IGJvZHkK
KyAgICAgKiBAcGFyYW0gY29sbGlkZUFnYWluc3QgUGh5c2ljcyBpbXBvc3Rlciwgb3IgYXJyYXkg
b2YgcGh5c2ljcyBpbXBvc3RlcnMgdG8gY29sbGlkZSBhZ2FpbnN0CisgICAgICogQHBhcmFtIGZ1
bmMgQ2FsbGJhY2sgdGhhdCBpcyBleGVjdXRlZCBvbiBjb2xsaXNpb24KKyAgICAgKi8KKyAgICBQ
aHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLnJlZ2lzdGVyT25QaHlzaWNzQ29sbGlkZSA9IGZ1bmN0
aW9uIChjb2xsaWRlQWdhaW5zdCwgZnVuYykgeworICAgICAgICB2YXIgY29sbGlkZWRBZ2FpbnN0
TGlzdCA9IGNvbGxpZGVBZ2FpbnN0IGluc3RhbmNlb2YgQXJyYXkgPyBjb2xsaWRlQWdhaW5zdCA6
IFtjb2xsaWRlQWdhaW5zdF07CisgICAgICAgIHRoaXMuX29uUGh5c2ljc0NvbGxpZGVDYWxsYmFj
a3MucHVzaCh7IGNhbGxiYWNrOiBmdW5jLCBvdGhlckltcG9zdG9yczogY29sbGlkZWRBZ2FpbnN0
TGlzdCB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVucmVnaXN0ZXJzIHRoZSBwaHlzaWNz
IGltcG9zdGVyIG9uIGNvbnRhY3QKKyAgICAgKiBAcGFyYW0gY29sbGlkZUFnYWluc3QgVGhlIHBo
eXNpY3Mgb2JqZWN0IHRvIGNvbGxpZGUgYWdhaW5zdAorICAgICAqIEBwYXJhbSBmdW5jIENhbGxi
YWNrIHRvIGV4ZWN1dGUgb24gY29sbGlzaW9uCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9y
LnByb3RvdHlwZS51bnJlZ2lzdGVyT25QaHlzaWNzQ29sbGlkZSA9IGZ1bmN0aW9uIChjb2xsaWRl
QWdhaW5zdCwgZnVuYykgeworICAgICAgICB2YXIgY29sbGlkZWRBZ2FpbnN0TGlzdCA9IGNvbGxp
ZGVBZ2FpbnN0IGluc3RhbmNlb2YgQXJyYXkgPyBjb2xsaWRlQWdhaW5zdCA6IFtjb2xsaWRlQWdh
aW5zdF07CisgICAgICAgIHZhciBpbmRleCA9IC0xOworICAgICAgICB2YXIgZm91bmQgPSB0aGlz
Ll9vblBoeXNpY3NDb2xsaWRlQ2FsbGJhY2tzLnNvbWUoZnVuY3Rpb24gKGNiRGVmLCBpZHgpIHsK
KyAgICAgICAgICAgIGlmIChjYkRlZi5jYWxsYmFjayA9PT0gZnVuYyAmJiBjYkRlZi5vdGhlcklt
cG9zdG9ycy5sZW5ndGggPT09IGNvbGxpZGVkQWdhaW5zdExpc3QubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgLy8gY2hjZWsgdGhlIGFycmF5cyBtYXRjaAorICAgICAgICAgICAgICAgIHZhciBz
YW1lTGlzdCA9IGNiRGVmLm90aGVySW1wb3N0b3JzLmV2ZXJ5KGZ1bmN0aW9uIChpbXBvc3Rvcikg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGlkZWRBZ2FpbnN0TGlzdC5pbmRleE9m
KGltcG9zdG9yKSA+IC0xOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlm
IChzYW1lTGlzdCkgeworICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGlkeDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHNhbWVMaXN0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGZv
dW5kKSB7CisgICAgICAgICAgICB0aGlzLl9vblBoeXNpY3NDb2xsaWRlQ2FsbGJhY2tzLnNwbGlj
ZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfTWlz
Y19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTG9nZ2VyIl0uV2FybigiRnVu
Y3Rpb24gdG8gcmVtb3ZlIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
LyoqCisgICAgICogR2V0IHRoZSBwYXJlbnQgcm90YXRpb24KKyAgICAgKiBAcmV0dXJucyBUaGUg
cGFyZW50IHJvdGF0aW9uCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5n
ZXRQYXJlbnRzUm90YXRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBwYXJlbnQgPSB0
aGlzLm9iamVjdC5wYXJlbnQ7CisgICAgICAgIHRoaXMuX3RtcFF1YXQuY29weUZyb21GbG9hdHMo
MCwgMCwgMCwgMSk7CisgICAgICAgIHdoaWxlIChwYXJlbnQpIHsKKyAgICAgICAgICAgIGlmIChw
YXJlbnQucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdG1wUXVh
dDIuY29weUZyb20ocGFyZW50LnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJdLlJvdGF0aW9uWWF3UGl0Y2hS
b2xsVG9SZWYocGFyZW50LnJvdGF0aW9uLnksIHBhcmVudC5yb3RhdGlvbi54LCBwYXJlbnQucm90
YXRpb24ueiwgdGhpcy5fdG1wUXVhdDIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5fdG1wUXVhdC5tdWx0aXBseVRvUmVmKHRoaXMuX3RtcFF1YXQyLCB0aGlzLl90bXBRdWF0KTsK
KyAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRoaXMuX3RtcFF1YXQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBcHBseSBhIGZv
cmNlCisgICAgICogQHBhcmFtIGZvcmNlIFRoZSBmb3JjZSB0byBhcHBseQorICAgICAqIEBwYXJh
bSBjb250YWN0UG9pbnQgVGhlIGNvbnRhY3QgcG9pbnQgZm9yIHRoZSBmb3JjZQorICAgICAqIEBy
ZXR1cm5zIFRoZSBwaHlzaWNzIGltcG9zdGVyCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9y
LnByb3RvdHlwZS5hcHBseUZvcmNlID0gZnVuY3Rpb24gKGZvcmNlLCBjb250YWN0UG9pbnQpIHsK
KyAgICAgICAgaWYgKHRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3Bo
eXNpY3NFbmdpbmUuZ2V0UGh5c2ljc1BsdWdpbigpLmFwcGx5Rm9yY2UodGhpcywgZm9yY2UsIGNv
bnRhY3RQb2ludCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBBcHBseSBhbiBpbXB1bHNlCisgICAgICogQHBhcmFtIGZvcmNlIFRoZSBp
bXB1bHNlIGZvcmNlCisgICAgICogQHBhcmFtIGNvbnRhY3RQb2ludCBUaGUgY29udGFjdCBwb2lu
dCBmb3IgdGhlIGltcHVsc2UgZm9yY2UKKyAgICAgKiBAcmV0dXJucyBUaGUgcGh5c2ljcyBpbXBv
c3RlcgorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuYXBwbHlJbXB1bHNl
ID0gZnVuY3Rpb24gKGZvcmNlLCBjb250YWN0UG9pbnQpIHsKKyAgICAgICAgaWYgKHRoaXMuX3Bo
eXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuZ2V0UGh5c2lj
c1BsdWdpbigpLmFwcGx5SW1wdWxzZSh0aGlzLCBmb3JjZSwgY29udGFjdFBvaW50KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qKgorICAgICAqIEEgaGVs
cCBmdW5jdGlvbiB0byBjcmVhdGUgYSBqb2ludAorICAgICAqIEBwYXJhbSBvdGhlckltcG9zdG9y
IEEgcGh5c2ljcyBpbXBvc3RlciB1c2VkIHRvIGNyZWF0ZSBhIGpvaW50CisgICAgICogQHBhcmFt
IGpvaW50VHlwZSBUaGUgdHlwZSBvZiBqb2ludAorICAgICAqIEBwYXJhbSBqb2ludERhdGEgVGhl
IGRhdGEgZm9yIHRoZSBqb2ludAorICAgICAqIEByZXR1cm5zIFRoZSBwaHlzaWNzIGltcG9zdGVy
CisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5jcmVhdGVKb2ludCA9IGZ1
bmN0aW9uIChvdGhlckltcG9zdG9yLCBqb2ludFR5cGUsIGpvaW50RGF0YSkgeworICAgICAgICB2
YXIgam9pbnQgPSBuZXcgX3BoeXNpY3NKb2ludF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJQaHlzaWNzSm9pbnQiXShqb2ludFR5cGUsIGpvaW50RGF0YSk7CisgICAgICAgIHRoaXMuYWRk
Sm9pbnQob3RoZXJJbXBvc3Rvciwgam9pbnQpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEFkZCBhIGpvaW50IHRvIHRoaXMgaW1wb3N0b3Igd2l0aCBhIGRp
ZmZlcmVudCBpbXBvc3RvcgorICAgICAqIEBwYXJhbSBvdGhlckltcG9zdG9yIEEgcGh5c2ljcyBp
bXBvc3RlciB1c2VkIHRvIGFkZCBhIGpvaW50CisgICAgICogQHBhcmFtIGpvaW50IFRoZSBqb2lu
dCB0byBhZGQKKyAgICAgKiBAcmV0dXJucyBUaGUgcGh5c2ljcyBpbXBvc3RlcgorICAgICAqLwor
ICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuYWRkSm9pbnQgPSBmdW5jdGlvbiAob3RoZXJJ
bXBvc3Rvciwgam9pbnQpIHsKKyAgICAgICAgdGhpcy5fam9pbnRzLnB1c2goeworICAgICAgICAg
ICAgb3RoZXJJbXBvc3Rvcjogb3RoZXJJbXBvc3RvciwKKyAgICAgICAgICAgIGpvaW50OiBqb2lu
dAorICAgICAgICB9KTsKKyAgICAgICAgaWYgKHRoaXMuX3BoeXNpY3NFbmdpbmUpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3BoeXNpY3NFbmdpbmUuYWRkSm9pbnQodGhpcywgb3RoZXJJbXBvc3Rvciwg
am9pbnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoq
CisgICAgICogQWRkIGFuIGFuY2hvciB0byBhIGNsb3RoIGltcG9zdG9yCisgICAgICogQHBhcmFt
IG90aGVySW1wb3N0b3IgcmlnaWQgaW1wb3N0b3IgdG8gYW5jaG9yIHRvCisgICAgICogQHBhcmFt
IHdpZHRoIHJhdGlvIGFjcm9zcyB3aWR0aCBmcm9tIDAgdG8gMQorICAgICAqIEBwYXJhbSBoZWln
aHQgcmF0aW8gdXAgaGVpZ2h0IGZyb20gMCB0byAxCisgICAgICogQHBhcmFtIGluZmx1ZW5jZSB0
aGUgZWxhc3RpY2l0eSBiZXR3ZWVuIGNsb3RoIGltcG9zdG9yIGFuZCBhbmNob3IgZnJvbSAwLCB2
ZXJ5IHN0cmV0Y2h5IHRvIDEsIGxpdHRsZSBzdHJlY2gKKyAgICAgKiBAcGFyYW0gbm9Db2xsaXNp
b25CZXR3ZWVuTGlua2VkQm9kaWVzIHdoZW4gdHJ1ZSBjb2xsaXNpb25zIGJldHdlZW4gY2xvdGgg
aW1wb3N0b3IgYW5kIGFuY2hvciBhcmUgaWdub3JlZDsgZGVmYXVsdCBmYWxzZQorICAgICAqIEBy
ZXR1cm5zIGltcG9zdG9yIHRoZSBzb2Z0IGltcG9zdGVyCisgICAgICovCisgICAgUGh5c2ljc0lt
cG9zdG9yLnByb3RvdHlwZS5hZGRBbmNob3IgPSBmdW5jdGlvbiAob3RoZXJJbXBvc3Rvciwgd2lk
dGgsIGhlaWdodCwgaW5mbHVlbmNlLCBub0NvbGxpc2lvbkJldHdlZW5MaW5rZWRCb2RpZXMpIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9waHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgfQorICAgICAgICB2YXIgcGx1Z2luID0gdGhpcy5fcGh5c2ljc0VuZ2lu
ZS5nZXRQaHlzaWNzUGx1Z2luKCk7CisgICAgICAgIGlmICghcGx1Z2luLmFwcGVuZEFuY2hvcikg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X3BoeXNpY3NFbmdpbmUpIHsKKyAgICAgICAgICAgIHBsdWdpbi5hcHBlbmRBbmNob3IodGhpcywg
b3RoZXJJbXBvc3Rvciwgd2lkdGgsIGhlaWdodCwgaW5mbHVlbmNlLCBub0NvbGxpc2lvbkJldHdl
ZW5MaW5rZWRCb2RpZXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07
CisgICAgLyoqCisgICAgICogQWRkIGEgaG9vayB0byBhIHJvcGUgaW1wb3N0b3IKKyAgICAgKiBA
cGFyYW0gb3RoZXJJbXBvc3RvciByaWdpZCBpbXBvc3RvciB0byBhbmNob3IgdG8KKyAgICAgKiBA
cGFyYW0gbGVuZ3RoIHJhdGlvIGFjcm9zcyByb3BlIGZyb20gMCB0byAxCisgICAgICogQHBhcmFt
IGluZmx1ZW5jZSB0aGUgZWxhc3RpY2l0eSBiZXR3ZWVuIHJvcGUgaW1wb3N0b3IgYW5kIGFuY2hv
ciBmcm9tIDAsIHZlcnkgc3RyZXRjaHkgdG8gMSwgbGl0dGxlIHN0cmVjaAorICAgICAqIEBwYXJh
bSBub0NvbGxpc2lvbkJldHdlZW5MaW5rZWRCb2RpZXMgd2hlbiB0cnVlIGNvbGxpc2lvbnMgYmV0
d2VlbiBzb2Z0IGltcG9zdG9yIGFuZCBhbmNob3IgYXJlIGlnbm9yZWQ7IGRlZmF1bHQgZmFsc2UK
KyAgICAgKiBAcmV0dXJucyBpbXBvc3RvciB0aGUgcm9wZSBpbXBvc3RlcgorICAgICAqLworICAg
IFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuYWRkSG9vayA9IGZ1bmN0aW9uIChvdGhlckltcG9z
dG9yLCBsZW5ndGgsIGluZmx1ZW5jZSwgbm9Db2xsaXNpb25CZXR3ZWVuTGlua2VkQm9kaWVzKSB7
CisgICAgICAgIGlmICghdGhpcy5fcGh5c2ljc0VuZ2luZSkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHBsdWdpbiA9IHRoaXMuX3BoeXNpY3NFbmdp
bmUuZ2V0UGh5c2ljc1BsdWdpbigpOworICAgICAgICBpZiAoIXBsdWdpbi5hcHBlbmRBbmNob3Ip
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlz
Ll9waHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICBwbHVnaW4uYXBwZW5kSG9vayh0aGlzLCBv
dGhlckltcG9zdG9yLCBsZW5ndGgsIGluZmx1ZW5jZSwgbm9Db2xsaXNpb25CZXR3ZWVuTGlua2Vk
Qm9kaWVzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFdpbGwga2VlcCB0aGlzIGJvZHkgc3RpbGwsIGluIGEgc2xlZXAgbW9kZS4KKyAg
ICAgKiBAcmV0dXJucyB0aGUgcGh5c2ljcyBpbXBvc3RlcgorICAgICAqLworICAgIFBoeXNpY3NJ
bXBvc3Rvci5wcm90b3R5cGUuc2xlZXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
Ll9waHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzRW5naW5lLmdldFBo
eXNpY3NQbHVnaW4oKS5zbGVlcEJvZHkodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBXYWtlIHRoZSBib2R5IHVwLgorICAgICAq
IEByZXR1cm5zIFRoZSBwaHlzaWNzIGltcG9zdGVyCisgICAgICovCisgICAgUGh5c2ljc0ltcG9z
dG9yLnByb3RvdHlwZS53YWtlVXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9w
aHlzaWNzRW5naW5lKSB7CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzRW5naW5lLmdldFBoeXNp
Y3NQbHVnaW4oKS53YWtlVXBCb2R5KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogQ2xvbmVzIHRoZSBwaHlzaWNzIGltcG9zdGVy
CisgICAgICogQHBhcmFtIG5ld09iamVjdCBUaGUgcGh5c2ljcyBpbXBvc3RlciBjbG9uZXMgdG8g
dGhpcyBwaHlzaWNzLWVuYWJsZWQgb2JqZWN0CisgICAgICogQHJldHVybnMgQSBudWxsYWJsZSBw
aHlzaWNzIGltcG9zdGVyCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLnByb3RvdHlwZS5j
bG9uZSA9IGZ1bmN0aW9uIChuZXdPYmplY3QpIHsKKyAgICAgICAgaWYgKCFuZXdPYmplY3QpIHsK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcg
UGh5c2ljc0ltcG9zdG9yKG5ld09iamVjdCwgdGhpcy50eXBlLCB0aGlzLl9vcHRpb25zLCB0aGlz
Ll9zY2VuZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgcGh5c2ljcyBp
bXBvc3RlcgorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuZGlzcG9zZSA9
IGZ1bmN0aW9uICggLypkaXNwb3NlQ2hpbGRyZW46IGJvb2xlYW4gPSB0cnVlKi8pIHsKKyAgICAg
ICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgLy9ubyBkaXNwb3NlIGlmIG5vIHBoeXNpY3Mg
ZW5naW5lIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgKCF0aGlzLl9waHlzaWNzRW5naW5lKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fam9pbnRzLmZv
ckVhY2goZnVuY3Rpb24gKGopIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fcGh5c2ljc0VuZ2lu
ZSkgeworICAgICAgICAgICAgICAgIF90aGlzLl9waHlzaWNzRW5naW5lLnJlbW92ZUpvaW50KF90
aGlzLCBqLm90aGVySW1wb3N0b3IsIGouam9pbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICAgICAgLy9kaXNwb3NlIHRoZSBwaHlzaWNzIGJvZHkKKyAgICAgICAgdGhpcy5fcGh5
c2ljc0VuZ2luZS5yZW1vdmVJbXBvc3Rvcih0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMucGFyZW50
KSB7CisgICAgICAgICAgICB0aGlzLnBhcmVudC5mb3JjZVVwZGF0ZSgpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyp0aGlzLl9vYmplY3QuZ2V0Q2hpbGRNZXNoZXMo
KS5mb3JFYWNoKGZ1bmN0aW9uKG1lc2gpIHsKKyAgICAgICAgICAgICAgICBpZiAobWVzaC5waHlz
aWNzSW1wb3N0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3Bvc2VDaGlsZHJlbikg
eworICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5waHlzaWNzSW1wb3N0b3IuZGlzcG9zZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5waHlzaWNzSW1wb3N0b3IgPSBudWxsOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkq
LworICAgICAgICB9CisgICAgICAgIHRoaXMuX2lzRGlzcG9zZWQgPSB0cnVlOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU2V0cyB0aGUgZGVsdGEgcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gcG9z
aXRpb24gVGhlIGRlbHRhIHBvc2l0aW9uIGFtb3VudAorICAgICAqLworICAgIFBoeXNpY3NJbXBv
c3Rvci5wcm90b3R5cGUuc2V0RGVsdGFQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb3NpdGlvbikgewor
ICAgICAgICB0aGlzLl9kZWx0YVBvc2l0aW9uLmNvcHlGcm9tKHBvc2l0aW9uKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNldHMgdGhlIGRlbHRhIHJvdGF0aW9uCisgICAgICogQHBhcmFtIHJv
dGF0aW9uIFRoZSBkZWx0YSByb3RhdGlvbiBhbW91bnQKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1w
b3N0b3IucHJvdG90eXBlLnNldERlbHRhUm90YXRpb24gPSBmdW5jdGlvbiAocm90YXRpb24pIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9kZWx0YVJvdGF0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl9k
ZWx0YVJvdGF0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJRdWF0ZXJuaW9uIl0oKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9kZWx0
YVJvdGF0aW9uLmNvcHlGcm9tKHJvdGF0aW9uKTsKKyAgICAgICAgdGhpcy5fZGVsdGFSb3RhdGlv
bkNvbmp1Z2F0ZWQgPSB0aGlzLl9kZWx0YVJvdGF0aW9uLmNvbmp1Z2F0ZSgpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyB0aGUgYm94IHNpemUgb2YgdGhlIHBoeXNpY3MgaW1wb3N0ZXIg
YW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBpbnB1dCBwYXJhbWV0ZXIKKyAgICAgKiBAcGFy
YW0gcmVzdWx0IFN0b3JlcyB0aGUgYm94IHNpemUKKyAgICAgKiBAcmV0dXJucyBUaGUgcGh5c2lj
cyBpbXBvc3RlcgorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuZ2V0Qm94
U2l6ZVRvUmVmID0gZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICBpZiAodGhpcy5fcGh5c2lj
c0VuZ2luZSkgeworICAgICAgICAgICAgdGhpcy5fcGh5c2ljc0VuZ2luZS5nZXRQaHlzaWNzUGx1
Z2luKCkuZ2V0Qm94U2l6ZVRvUmVmKHRoaXMsIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSByYWRpdXMgb2Yg
dGhlIHBoeXNpY3MgaW1wb3N0ZXIKKyAgICAgKiBAcmV0dXJucyBSYWRpdXMgb2YgdGhlIHBoeXNp
Y3MgaW1wb3N0ZXIKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IucHJvdG90eXBlLmdldFJh
ZGl1cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3BoeXNpY3NFbmdpbmUg
PyB0aGlzLl9waHlzaWNzRW5naW5lLmdldFBoeXNpY3NQbHVnaW4oKS5nZXRSYWRpdXModGhpcykg
OiAwOworICAgIH07CisgICAgLyoqCisgICAgICogU3luYyBhIGJvbmUgd2l0aCB0aGlzIGltcG9z
dG9yCisgICAgICogQHBhcmFtIGJvbmUgVGhlIGJvbmUgdG8gc3luYyB0byB0aGUgaW1wb3N0b3Iu
CisgICAgICogQHBhcmFtIGJvbmVNZXNoIFRoZSBtZXNoIHRoYXQgdGhlIGJvbmUgaXMgaW5mbHVl
bmNpbmcuCisgICAgICogQHBhcmFtIGpvaW50UGl2b3QgVGhlIHBpdm90IG9mIHRoZSBqb2ludCAv
IGJvbmUgaW4gbG9jYWwgc3BhY2UuCisgICAgICogQHBhcmFtIGRpc3RUb0pvaW50IE9wdGlvbmFs
IGRpc3RhbmNlIGZyb20gdGhlIGltcG9zdG9yIHRvIHRoZSBqb2ludC4KKyAgICAgKiBAcGFyYW0g
YWRqdXN0Um90YXRpb24gT3B0aW9uYWwgcXVhdGVybmlvbiBmb3IgYWRqdXN0aW5nIHRoZSBsb2Nh
bCByb3RhdGlvbiBvZiB0aGUgYm9uZS4KKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IucHJv
dG90eXBlLnN5bmNCb25lV2l0aEltcG9zdG9yID0gZnVuY3Rpb24gKGJvbmUsIGJvbmVNZXNoLCBq
b2ludFBpdm90LCBkaXN0VG9Kb2ludCwgYWRqdXN0Um90YXRpb24pIHsKKyAgICAgICAgdmFyIHRl
bXBWZWMgPSBQaHlzaWNzSW1wb3N0b3IuX3RtcFZlY3NbMF07CisgICAgICAgIHZhciBtZXNoID0g
dGhpcy5vYmplY3Q7CisgICAgICAgIGlmIChtZXNoLnJvdGF0aW9uUXVhdGVybmlvbikgeworICAg
ICAgICAgICAgaWYgKGFkanVzdFJvdGF0aW9uKSB7CisgICAgICAgICAgICAgICAgdmFyIHRlbXBR
dWF0ID0gUGh5c2ljc0ltcG9zdG9yLl90bXBRdWF0OworICAgICAgICAgICAgICAgIG1lc2gucm90
YXRpb25RdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYoYWRqdXN0Um90YXRpb24sIHRlbXBRdWF0KTsK
KyAgICAgICAgICAgICAgICBib25lLnNldFJvdGF0aW9uUXVhdGVybmlvbih0ZW1wUXVhdCwgX01h
dGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTcGFjZSJdLldPUkxE
LCBib25lTWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBib25lLnNldFJvdGF0aW9uUXVhdGVybmlvbihtZXNoLnJvdGF0aW9uUXVhdGVybmlv
biwgX01hdGhzX21hdGhfYXhpc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTcGFjZSJd
LldPUkxELCBib25lTWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGVt
cFZlYy54ID0gMDsKKyAgICAgICAgdGVtcFZlYy55ID0gMDsKKyAgICAgICAgdGVtcFZlYy56ID0g
MDsKKyAgICAgICAgaWYgKGpvaW50UGl2b3QpIHsKKyAgICAgICAgICAgIHRlbXBWZWMueCA9IGpv
aW50UGl2b3QueDsKKyAgICAgICAgICAgIHRlbXBWZWMueSA9IGpvaW50UGl2b3QueTsKKyAgICAg
ICAgICAgIHRlbXBWZWMueiA9IGpvaW50UGl2b3QuejsKKyAgICAgICAgICAgIGJvbmUuZ2V0RGly
ZWN0aW9uVG9SZWYodGVtcFZlYywgYm9uZU1lc2gsIHRlbXBWZWMpOworICAgICAgICAgICAgaWYg
KGRpc3RUb0pvaW50ID09PSB1bmRlZmluZWQgfHwgZGlzdFRvSm9pbnQgPT09IG51bGwpIHsKKyAg
ICAgICAgICAgICAgICBkaXN0VG9Kb2ludCA9IGpvaW50UGl2b3QubGVuZ3RoKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0ZW1wVmVjLnggKj0gZGlzdFRvSm9pbnQ7CisgICAgICAgICAg
ICB0ZW1wVmVjLnkgKj0gZGlzdFRvSm9pbnQ7CisgICAgICAgICAgICB0ZW1wVmVjLnogKj0gZGlz
dFRvSm9pbnQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJvbmUuZ2V0UGFyZW50KCkpIHsKKyAg
ICAgICAgICAgIHRlbXBWZWMuYWRkSW5QbGFjZShtZXNoLmdldEFic29sdXRlUG9zaXRpb24oKSk7
CisgICAgICAgICAgICBib25lLnNldEFic29sdXRlUG9zaXRpb24odGVtcFZlYywgYm9uZU1lc2gp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYm9uZU1lc2guc2V0QWJz
b2x1dGVQb3NpdGlvbihtZXNoLmdldEFic29sdXRlUG9zaXRpb24oKSk7CisgICAgICAgICAgICBi
b25lTWVzaC5wb3NpdGlvbi54IC09IHRlbXBWZWMueDsKKyAgICAgICAgICAgIGJvbmVNZXNoLnBv
c2l0aW9uLnkgLT0gdGVtcFZlYy55OworICAgICAgICAgICAgYm9uZU1lc2gucG9zaXRpb24ueiAt
PSB0ZW1wVmVjLno7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFN5bmMgaW1w
b3N0b3IgdG8gYSBib25lCisgICAgICogQHBhcmFtIGJvbmUgVGhlIGJvbmUgdGhhdCB0aGUgaW1w
b3N0b3Igd2lsbCBiZSBzeW5jZWQgdG8uCisgICAgICogQHBhcmFtIGJvbmVNZXNoIFRoZSBtZXNo
IHRoYXQgdGhlIGJvbmUgaXMgaW5mbHVlbmNpbmcuCisgICAgICogQHBhcmFtIGpvaW50UGl2b3Qg
VGhlIHBpdm90IG9mIHRoZSBqb2ludCAvIGJvbmUgaW4gbG9jYWwgc3BhY2UuCisgICAgICogQHBh
cmFtIGRpc3RUb0pvaW50IE9wdGlvbmFsIGRpc3RhbmNlIGZyb20gdGhlIGltcG9zdG9yIHRvIHRo
ZSBqb2ludC4KKyAgICAgKiBAcGFyYW0gYWRqdXN0Um90YXRpb24gT3B0aW9uYWwgcXVhdGVybmlv
biBmb3IgYWRqdXN0aW5nIHRoZSBsb2NhbCByb3RhdGlvbiBvZiB0aGUgYm9uZS4KKyAgICAgKiBA
cGFyYW0gYm9uZUF4aXMgT3B0aW9uYWwgdmVjdG9yMyBheGlzIHRoZSBib25lIGlzIGFsaWduZWQg
d2l0aAorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5wcm90b3R5cGUuc3luY0ltcG9zdG9y
V2l0aEJvbmUgPSBmdW5jdGlvbiAoYm9uZSwgYm9uZU1lc2gsIGpvaW50UGl2b3QsIGRpc3RUb0pv
aW50LCBhZGp1c3RSb3RhdGlvbiwgYm9uZUF4aXMpIHsKKyAgICAgICAgdmFyIG1lc2ggPSB0aGlz
Lm9iamVjdDsKKyAgICAgICAgaWYgKG1lc2gucm90YXRpb25RdWF0ZXJuaW9uKSB7CisgICAgICAg
ICAgICBpZiAoYWRqdXN0Um90YXRpb24pIHsKKyAgICAgICAgICAgICAgICB2YXIgdGVtcFF1YXQg
PSBQaHlzaWNzSW1wb3N0b3IuX3RtcFF1YXQ7CisgICAgICAgICAgICAgICAgYm9uZS5nZXRSb3Rh
dGlvblF1YXRlcm5pb25Ub1JlZihfTWF0aHNfbWF0aF9heGlzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV82X19bIlNwYWNlIl0uV09STEQsIGJvbmVNZXNoLCB0ZW1wUXVhdCk7CisgICAgICAgICAg
ICAgICAgdGVtcFF1YXQubXVsdGlwbHlUb1JlZihhZGp1c3RSb3RhdGlvbiwgbWVzaC5yb3RhdGlv
blF1YXRlcm5pb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgYm9uZS5nZXRSb3RhdGlvblF1YXRlcm5pb25Ub1JlZihfTWF0aHNfbWF0aF9heGlz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNwYWNlIl0uV09STEQsIGJvbmVNZXNoLCBt
ZXNoLnJvdGF0aW9uUXVhdGVybmlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIHBvcyA9IFBoeXNpY3NJbXBvc3Rvci5fdG1wVmVjc1swXTsKKyAgICAgICAgdmFyIGJv
bmVEaXIgPSBQaHlzaWNzSW1wb3N0b3IuX3RtcFZlY3NbMV07CisgICAgICAgIGlmICghYm9uZUF4
aXMpIHsKKyAgICAgICAgICAgIGJvbmVBeGlzID0gUGh5c2ljc0ltcG9zdG9yLl90bXBWZWNzWzJd
OworICAgICAgICAgICAgYm9uZUF4aXMueCA9IDA7CisgICAgICAgICAgICBib25lQXhpcy55ID0g
MTsKKyAgICAgICAgICAgIGJvbmVBeGlzLnogPSAwOworICAgICAgICB9CisgICAgICAgIGJvbmUu
Z2V0RGlyZWN0aW9uVG9SZWYoYm9uZUF4aXMsIGJvbmVNZXNoLCBib25lRGlyKTsKKyAgICAgICAg
Ym9uZS5nZXRBYnNvbHV0ZVBvc2l0aW9uVG9SZWYoYm9uZU1lc2gsIHBvcyk7CisgICAgICAgIGlm
ICgoZGlzdFRvSm9pbnQgPT09IHVuZGVmaW5lZCB8fCBkaXN0VG9Kb2ludCA9PT0gbnVsbCkgJiYg
am9pbnRQaXZvdCkgeworICAgICAgICAgICAgZGlzdFRvSm9pbnQgPSBqb2ludFBpdm90Lmxlbmd0
aCgpOworICAgICAgICB9CisgICAgICAgIGlmIChkaXN0VG9Kb2ludCAhPT0gdW5kZWZpbmVkICYm
IGRpc3RUb0pvaW50ICE9PSBudWxsKSB7CisgICAgICAgICAgICBwb3MueCArPSBib25lRGlyLngg
KiBkaXN0VG9Kb2ludDsKKyAgICAgICAgICAgIHBvcy55ICs9IGJvbmVEaXIueSAqIGRpc3RUb0pv
aW50OworICAgICAgICAgICAgcG9zLnogKz0gYm9uZURpci56ICogZGlzdFRvSm9pbnQ7CisgICAg
ICAgIH0KKyAgICAgICAgbWVzaC5zZXRBYnNvbHV0ZVBvc2l0aW9uKHBvcyk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBUaGUgZGVmYXVsdCBvYmplY3Qgc2l6ZSBvZiB0aGUgaW1wb3N0ZXIKKyAg
ICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IuREVGQVVMVF9PQkpFQ1RfU0laRSA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMyJdKDEs
IDEsIDEpOworICAgIC8qKgorICAgICAqIFRoZSBpZGVudGl0eSBxdWF0ZXJuaW9uIG9mIHRoZSBp
bXBvc3RlcgorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5JREVOVElUWV9RVUFURVJOSU9O
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlF1YXRl
cm5pb24iXS5JZGVudGl0eSgpOworICAgIFBoeXNpY3NJbXBvc3Rvci5fdG1wVmVjcyA9IF9NaXNj
X2FycmF5VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQXJyYXlUb29scyJdLkJ1
aWxkQXJyYXkoMywgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlZlY3RvcjMiXS5aZXJvKTsKKyAgICBQaHlzaWNzSW1wb3N0b3IuX3RtcFF1YXQgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVhdGVybmlvbiJd
LklkZW50aXR5KCk7CisgICAgLy9JbXBvc3RvciB0eXBlcworICAgIC8qKgorICAgICAqIE5vLUlt
cG9zdGVyIHR5cGUKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IuTm9JbXBvc3RvciA9IDA7
CisgICAgLyoqCisgICAgICogU3BoZXJlLUltcG9zdGVyIHR5cGUKKyAgICAgKi8KKyAgICBQaHlz
aWNzSW1wb3N0b3IuU3BoZXJlSW1wb3N0b3IgPSAxOworICAgIC8qKgorICAgICAqIEJveC1JbXBv
c3RlciB0eXBlCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLkJveEltcG9zdG9yID0gMjsK
KyAgICAvKioKKyAgICAgKiBQbGFuZS1JbXBvc3RlciB0eXBlCisgICAgICovCisgICAgUGh5c2lj
c0ltcG9zdG9yLlBsYW5lSW1wb3N0b3IgPSAzOworICAgIC8qKgorICAgICAqIE1lc2gtaW1wb3N0
ZXIgdHlwZQorICAgICAqLworICAgIFBoeXNpY3NJbXBvc3Rvci5NZXNoSW1wb3N0b3IgPSA0Owor
ICAgIC8qKgorICAgICAqIENhcHN1bGUtSW1wb3N0b3IgdHlwZSAoQW1tby5qcyBwbHVnaW4gb25s
eSkKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IuQ2Fwc3VsZUltcG9zdG9yID0gNjsKKyAg
ICAvKioKKyAgICAgKiBDeWxpbmRlci1JbXBvc3RlciB0eXBlCisgICAgICovCisgICAgUGh5c2lj
c0ltcG9zdG9yLkN5bGluZGVySW1wb3N0b3IgPSA3OworICAgIC8qKgorICAgICAqIFBhcnRpY2xl
LUltcG9zdGVyIHR5cGUKKyAgICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IuUGFydGljbGVJbXBv
c3RvciA9IDg7CisgICAgLyoqCisgICAgICogSGVpZ2h0bWFwLUltcG9zdGVyIHR5cGUKKyAgICAg
Ki8KKyAgICBQaHlzaWNzSW1wb3N0b3IuSGVpZ2h0bWFwSW1wb3N0b3IgPSA5OworICAgIC8qKgor
ICAgICAqIENvbnZleEh1bGwtSW1wb3N0b3IgdHlwZSAoQW1tby5qcyBwbHVnaW4gb25seSkKKyAg
ICAgKi8KKyAgICBQaHlzaWNzSW1wb3N0b3IuQ29udmV4SHVsbEltcG9zdG9yID0gMTA7CisgICAg
LyoqCisgICAgICogUm9wZS1JbXBvc3RlciB0eXBlCisgICAgICovCisgICAgUGh5c2ljc0ltcG9z
dG9yLlJvcGVJbXBvc3RvciA9IDEwMTsKKyAgICAvKioKKyAgICAgKiBDbG90aC1JbXBvc3RlciB0
eXBlCisgICAgICovCisgICAgUGh5c2ljc0ltcG9zdG9yLkNsb3RoSW1wb3N0b3IgPSAxMDI7Cisg
ICAgLyoqCisgICAgICogU29mdGJvZHktSW1wb3N0ZXIgdHlwZQorICAgICAqLworICAgIFBoeXNp
Y3NJbXBvc3Rvci5Tb2Z0Ym9keUltcG9zdG9yID0gMTAzOworICAgIHJldHVybiBQaHlzaWNzSW1w
b3N0b3I7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1BoeXNpY3MvcGh5c2lj
c0pvaW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vUGh5c2ljcy9waHlzaWNzSm9pbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBoeXNpY3NKb2ludCwgRGlz
dGFuY2VKb2ludCwgTW90b3JFbmFibGVkSm9pbnQsIEhpbmdlSm9pbnQsIEhpbmdlMkpvaW50ICov
CisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NKb2ludCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gUGh5c2ljc0pvaW50OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRpc3Rh
bmNlSm9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERpc3RhbmNlSm9pbnQ7IH0pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTW90b3JFbmFibGVkSm9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1vdG9y
RW5hYmxlZEpvaW50OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhpbmdlSm9pbnQiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIEhpbmdlSm9pbnQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSGluZ2UySm9p
bnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEhpbmdlMkpvaW50OyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYu
anMiKTsKKworLyoqCisgKiBUaGlzIGlzIGEgaG9sZGVyIGNsYXNzIGZvciB0aGUgcGh5c2ljcyBq
b2ludCBjcmVhdGVkIGJ5IHRoZSBwaHlzaWNzIHBsdWdpbgorICogSXQgaG9sZHMgYSBzZXQgb2Yg
ZnVuY3Rpb25zIHRvIGNvbnRyb2wgdGhlIHVuZGVybHlpbmcgam9pbnQKKyAqIEBzZWUgaHR0cHM6
Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vdXNpbmdfdGhlX3BoeXNpY3NfZW5naW5lCisgKi8K
K3ZhciBQaHlzaWNzSm9pbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoq
CisgICAgICogSW5pdGlhbGl6ZXMgdGhlIHBoeXNpY3Mgam9pbnQKKyAgICAgKiBAcGFyYW0gdHlw
ZSBUaGUgdHlwZSBvZiB0aGUgcGh5c2ljcyBqb2ludAorICAgICAqIEBwYXJhbSBqb2ludERhdGEg
VGhlIGRhdGEgZm9yIHRoZSBwaHlzaWNzIGpvaW50CisgICAgICovCisgICAgZnVuY3Rpb24gUGh5
c2ljc0pvaW50KAorICAgIC8qKgorICAgICAqIFRoZSB0eXBlIG9mIHRoZSBwaHlzaWNzIGpvaW50
CisgICAgICovCisgICAgdHlwZSwgCisgICAgLyoqCisgICAgICogVGhlIGRhdGEgZm9yIHRoZSBw
aHlzaWNzIGpvaW50CisgICAgICovCisgICAgam9pbnREYXRhKSB7CisgICAgICAgIHRoaXMudHlw
ZSA9IHR5cGU7CisgICAgICAgIHRoaXMuam9pbnREYXRhID0gam9pbnREYXRhOworICAgICAgICBq
b2ludERhdGEubmF0aXZlUGFyYW1zID0gam9pbnREYXRhLm5hdGl2ZVBhcmFtcyB8fCB7fTsKKyAg
ICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBoeXNpY3NKb2ludC5wcm90b3R5cGUsICJw
aHlzaWNzSm9pbnQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBwaHlzaWNz
IGpvaW50CisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9waHlzaWNzSm9pbnQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgor
ICAgICAgICAgKiBTZXRzIHRoZSBwaHlzaWNzIGpvaW50CisgICAgICAgICAqLworICAgICAgICBz
ZXQ6IGZ1bmN0aW9uIChuZXdKb2ludCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3BoeXNpY3NK
b2ludCkgeworICAgICAgICAgICAgICAgIC8vcmVtb3ZlIGZyb20gdGhlIHdvbHJkCisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl9waHlzaWNzSm9pbnQgPSBuZXdKb2ludDsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBoeXNpY3NKb2ludC5wcm90
b3R5cGUsICJwaHlzaWNzUGx1Z2luIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0
aGUgcGh5c2ljcyBwbHVnaW4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHBo
eXNpY3NQbHVnaW4pIHsKKyAgICAgICAgICAgIHRoaXMuX3BoeXNpY3NQbHVnaW4gPSBwaHlzaWNz
UGx1Z2luOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIGEgZnVu
Y3Rpb24gdGhhdCBpcyBwaHlzaWNzLXBsdWdpbiBzcGVjaWZpYy4KKyAgICAgKiBAcGFyYW0ge0Z1
bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuCisgICAgICog
ICAgICAgICAgICAgICAgICAgICAgICBJdCBhY2NlcHRzIHR3byBwYXJhbWV0ZXJzOiB0aGUgcGh5
c2ljcyB3b3JsZCBhbmQgdGhlIHBoeXNpY3Mgam9pbnQKKyAgICAgKi8KKyAgICBQaHlzaWNzSm9p
bnQucHJvdG90eXBlLmV4ZWN1dGVOYXRpdmVGdW5jdGlvbiA9IGZ1bmN0aW9uIChmdW5jKSB7Cisg
ICAgICAgIGZ1bmModGhpcy5fcGh5c2ljc1BsdWdpbi53b3JsZCwgdGhpcy5fcGh5c2ljc0pvaW50
KTsKKyAgICB9OworICAgIC8vVE9ETyBjaGVjayBpZiB0aGUgbmF0aXZlIGpvaW50cyBhcmUgdGhl
IHNhbWUKKyAgICAvL0pvaW50IFR5cGVzCisgICAgLyoqCisgICAgICogRGlzdGFuY2UtSm9pbnQg
dHlwZQorICAgICAqLworICAgIFBoeXNpY3NKb2ludC5EaXN0YW5jZUpvaW50ID0gMDsKKyAgICAv
KioKKyAgICAgKiBIaW5nZS1Kb2ludCB0eXBlCisgICAgICovCisgICAgUGh5c2ljc0pvaW50Lkhp
bmdlSm9pbnQgPSAxOworICAgIC8qKgorICAgICAqIEJhbGwtYW5kLVNvY2tldCBqb2ludCB0eXBl
CisgICAgICovCisgICAgUGh5c2ljc0pvaW50LkJhbGxBbmRTb2NrZXRKb2ludCA9IDI7CisgICAg
LyoqCisgICAgICogV2hlZWwtSm9pbnQgdHlwZQorICAgICAqLworICAgIFBoeXNpY3NKb2ludC5X
aGVlbEpvaW50ID0gMzsKKyAgICAvKioKKyAgICAgKiBTbGlkZXItSm9pbnQgdHlwZQorICAgICAq
LworICAgIFBoeXNpY3NKb2ludC5TbGlkZXJKb2ludCA9IDQ7CisgICAgLy9PSU1PCisgICAgLyoq
CisgICAgICogUHJpc21hdGljLUpvaW50IHR5cGUKKyAgICAgKi8KKyAgICBQaHlzaWNzSm9pbnQu
UHJpc21hdGljSm9pbnQgPSA1OworICAgIC8vCisgICAgLyoqCisgICAgICogVW5pdmVyc2FsLUpv
aW50IHR5cGUKKyAgICAgKiBFTkVSR1kgRlRXISAoY29tcGFyZSB3aXRoIHRoaXMgLSBAc2VlIGh0
dHA6Ly9vZGUtd2lraS5vcmcvd2lraS9pbmRleC5waHA/dGl0bGU9TWFudWFsOl9Kb2ludF9UeXBl
c19hbmRfRnVuY3Rpb25zKQorICAgICAqLworICAgIFBoeXNpY3NKb2ludC5Vbml2ZXJzYWxKb2lu
dCA9IDY7CisgICAgLyoqCisgICAgICogSGluZ2UtSm9pbnQgMiB0eXBlCisgICAgICovCisgICAg
UGh5c2ljc0pvaW50LkhpbmdlMkpvaW50ID0gUGh5c2ljc0pvaW50LldoZWVsSm9pbnQ7CisgICAg
Ly9DYW5ub24KKyAgICAvKioKKyAgICAgKiBQb2ludCB0byBQb2ludCBKb2ludCB0eXBlLiAgU2lt
aWxhciB0byBhIEJhbGwtSm9pbnQuICBEaWZmZXJlbnQgaW4gcGFyYW1ldGVycworICAgICAqLwor
ICAgIFBoeXNpY3NKb2ludC5Qb2ludFRvUG9pbnRKb2ludCA9IDg7CisgICAgLy9DYW5ub24gb25s
eSBhdCB0aGUgbW9tZW50CisgICAgLyoqCisgICAgICogU3ByaW5nLUpvaW50IHR5cGUKKyAgICAg
Ki8KKyAgICBQaHlzaWNzSm9pbnQuU3ByaW5nSm9pbnQgPSA5OworICAgIC8qKgorICAgICAqIExv
Y2stSm9pbnQgdHlwZQorICAgICAqLworICAgIFBoeXNpY3NKb2ludC5Mb2NrSm9pbnQgPSAxMDsK
KyAgICByZXR1cm4gUGh5c2ljc0pvaW50OworfSgpKTsKKworLyoqCisgKiBBIGNsYXNzIHJlcHJl
c2VudGluZyBhIHBoeXNpY3MgZGlzdGFuY2Ugam9pbnQKKyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFi
eWxvbmpzLmNvbS9ob3dfdG8vdXNpbmdfdGhlX3BoeXNpY3NfZW5naW5lCisgKi8KK3ZhciBEaXN0
YW5jZUpvaW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKERpc3RhbmNlSm9pbnQs
IF9zdXBlcik7CisgICAgLyoqCisgICAgICoKKyAgICAgKiBAcGFyYW0gam9pbnREYXRhIFRoZSBk
YXRhIGZvciB0aGUgRGlzdGFuY2UtSm9pbnQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBEaXN0YW5j
ZUpvaW50KGpvaW50RGF0YSkgeworICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgUGh5
c2ljc0pvaW50LkRpc3RhbmNlSm9pbnQsIGpvaW50RGF0YSkgfHwgdGhpczsKKyAgICB9CisgICAg
LyoqCisgICAgICogVXBkYXRlIHRoZSBwcmVkZWZpbmVkIGRpc3RhbmNlLgorICAgICAqIEBwYXJh
bSBtYXhEaXN0YW5jZSBUaGUgbWF4aW11bSBwcmVmZXJyZWQgZGlzdGFuY2UKKyAgICAgKiBAcGFy
YW0gbWluRGlzdGFuY2UgVGhlIG1pbmltdW0gcHJlZmVycmVkIGRpc3RhbmNlCisgICAgICovCisg
ICAgRGlzdGFuY2VKb2ludC5wcm90b3R5cGUudXBkYXRlRGlzdGFuY2UgPSBmdW5jdGlvbiAobWF4
RGlzdGFuY2UsIG1pbkRpc3RhbmNlKSB7CisgICAgICAgIHRoaXMuX3BoeXNpY3NQbHVnaW4udXBk
YXRlRGlzdGFuY2VKb2ludCh0aGlzLCBtYXhEaXN0YW5jZSwgbWluRGlzdGFuY2UpOworICAgIH07
CisgICAgcmV0dXJuIERpc3RhbmNlSm9pbnQ7Cit9KFBoeXNpY3NKb2ludCkpOworCisvKioKKyAq
IFJlcHJlc2VudHMgYSBNb3Rvci1FbmFibGVkIEpvaW50CisgKiBAc2VlIGh0dHBzOi8vZG9jLmJh
Ynlsb25qcy5jb20vaG93X3RvL3VzaW5nX3RoZV9waHlzaWNzX2VuZ2luZQorICovCit2YXIgTW90
b3JFbmFibGVkSm9pbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oTW90b3JFbmFi
bGVkSm9pbnQsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIE1vdG9y
LUVuYWJsZWQgSm9pbnQKKyAgICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgam9pbnQK
KyAgICAgKiBAcGFyYW0gam9pbnREYXRhIFRoZSBwaHlzaWNhIGpvaW50IGRhdGEgZm9yIHRoZSBq
b2ludAorICAgICAqLworICAgIGZ1bmN0aW9uIE1vdG9yRW5hYmxlZEpvaW50KHR5cGUsIGpvaW50
RGF0YSkgeworICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgdHlwZSwgam9pbnREYXRh
KSB8fCB0aGlzOworICAgIH0KKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIG1vdG9yIHZhbHVlcy4K
KyAgICAgKiBBdHRlbnRpb24sIHRoaXMgZnVuY3Rpb24gaXMgcGx1Z2luIHNwZWNpZmljLiBFbmdp
bmVzIHdvbid0IHJlYWN0IDEwMCUgdGhlIHNhbWUuCisgICAgICogQHBhcmFtIGZvcmNlIHRoZSBm
b3JjZSB0byBhcHBseQorICAgICAqIEBwYXJhbSBtYXhGb3JjZSBtYXggZm9yY2UgZm9yIHRoaXMg
bW90b3IuCisgICAgICovCisgICAgTW90b3JFbmFibGVkSm9pbnQucHJvdG90eXBlLnNldE1vdG9y
ID0gZnVuY3Rpb24gKGZvcmNlLCBtYXhGb3JjZSkgeworICAgICAgICB0aGlzLl9waHlzaWNzUGx1
Z2luLnNldE1vdG9yKHRoaXMsIGZvcmNlIHx8IDAsIG1heEZvcmNlKTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIFNldCB0aGUgbW90b3IncyBsaW1pdHMuCisgICAgICogQXR0ZW50aW9uLCB0aGlz
IGZ1bmN0aW9uIGlzIHBsdWdpbiBzcGVjaWZpYy4gRW5naW5lcyB3b24ndCByZWFjdCAxMDAlIHRo
ZSBzYW1lLgorICAgICAqIEBwYXJhbSB1cHBlckxpbWl0IFRoZSB1cHBlciBsaW1pdCBvZiB0aGUg
bW90b3IKKyAgICAgKiBAcGFyYW0gbG93ZXJMaW1pdCBUaGUgbG93ZXIgbGltaXQgb2YgdGhlIG1v
dG9yCisgICAgICovCisgICAgTW90b3JFbmFibGVkSm9pbnQucHJvdG90eXBlLnNldExpbWl0ID0g
ZnVuY3Rpb24gKHVwcGVyTGltaXQsIGxvd2VyTGltaXQpIHsKKyAgICAgICAgdGhpcy5fcGh5c2lj
c1BsdWdpbi5zZXRMaW1pdCh0aGlzLCB1cHBlckxpbWl0LCBsb3dlckxpbWl0KTsKKyAgICB9Owor
ICAgIHJldHVybiBNb3RvckVuYWJsZWRKb2ludDsKK30oUGh5c2ljc0pvaW50KSk7CisKKy8qKgor
ICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc2luZ2xlIHBoeXNpY3MgSGluZ2UtSm9pbnQKKyAq
IEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vdXNpbmdfdGhlX3BoeXNpY3Nf
ZW5naW5lCisgKi8KK3ZhciBIaW5nZUpvaW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9z
dXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5k
cyJdKEhpbmdlSm9pbnQsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhl
IEhpbmdlLUpvaW50CisgICAgICogQHBhcmFtIGpvaW50RGF0YSBUaGUgam9pbnQgZGF0YSBmb3Ig
dGhlIEhpbmdlLUpvaW50CisgICAgICovCisgICAgZnVuY3Rpb24gSGluZ2VKb2ludChqb2ludERh
dGEpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIFBoeXNpY3NKb2ludC5IaW5n
ZUpvaW50LCBqb2ludERhdGEpIHx8IHRoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIFNldCB0
aGUgbW90b3IgdmFsdWVzLgorICAgICAqIEF0dGVudGlvbiwgdGhpcyBmdW5jdGlvbiBpcyBwbHVn
aW4gc3BlY2lmaWMuIEVuZ2luZXMgd29uJ3QgcmVhY3QgMTAwJSB0aGUgc2FtZS4KKyAgICAgKiBA
cGFyYW0ge251bWJlcn0gZm9yY2UgdGhlIGZvcmNlIHRvIGFwcGx5CisgICAgICogQHBhcmFtIHtu
dW1iZXJ9IG1heEZvcmNlIG1heCBmb3JjZSBmb3IgdGhpcyBtb3Rvci4KKyAgICAgKi8KKyAgICBI
aW5nZUpvaW50LnByb3RvdHlwZS5zZXRNb3RvciA9IGZ1bmN0aW9uIChmb3JjZSwgbWF4Rm9yY2Up
IHsKKyAgICAgICAgdGhpcy5fcGh5c2ljc1BsdWdpbi5zZXRNb3Rvcih0aGlzLCBmb3JjZSB8fCAw
LCBtYXhGb3JjZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIG1vdG9yJ3MgbGlt
aXRzLgorICAgICAqIEF0dGVudGlvbiwgdGhpcyBmdW5jdGlvbiBpcyBwbHVnaW4gc3BlY2lmaWMu
IEVuZ2luZXMgd29uJ3QgcmVhY3QgMTAwJSB0aGUgc2FtZS4KKyAgICAgKiBAcGFyYW0gdXBwZXJM
aW1pdCBUaGUgdXBwZXIgbGltaXQgb2YgdGhlIG1vdG9yCisgICAgICogQHBhcmFtIGxvd2VyTGlt
aXQgVGhlIGxvd2VyIGxpbWl0IG9mIHRoZSBtb3RvcgorICAgICAqLworICAgIEhpbmdlSm9pbnQu
cHJvdG90eXBlLnNldExpbWl0ID0gZnVuY3Rpb24gKHVwcGVyTGltaXQsIGxvd2VyTGltaXQpIHsK
KyAgICAgICAgdGhpcy5fcGh5c2ljc1BsdWdpbi5zZXRMaW1pdCh0aGlzLCB1cHBlckxpbWl0LCBs
b3dlckxpbWl0KTsKKyAgICB9OworICAgIHJldHVybiBIaW5nZUpvaW50OworfShNb3RvckVuYWJs
ZWRKb2ludCkpOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIGR1YWwgaGluZ2Ug
cGh5c2ljcyBqb2ludCAoc2FtZSBhcyB3aGVlbCBqb2ludCkKKyAqIEBzZWUgaHR0cHM6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9ob3dfdG8vdXNpbmdfdGhlX3BoeXNpY3NfZW5naW5lCisgKi8KK3ZhciBI
aW5nZTJKb2ludCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShIaW5nZTJKb2ludCwg
X3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUgSGluZ2UyLUpvaW50Cisg
ICAgICogQHBhcmFtIGpvaW50RGF0YSBUaGUgam9pbnQgZGF0YSBmb3IgdGhlIEhpbmdlMi1Kb2lu
dAorICAgICAqLworICAgIGZ1bmN0aW9uIEhpbmdlMkpvaW50KGpvaW50RGF0YSkgeworICAgICAg
ICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgUGh5c2ljc0pvaW50LkhpbmdlMkpvaW50LCBqb2lu
dERhdGEpIHx8IHRoaXM7CisgICAgfQorICAgIC8qKgorICAgICogU2V0IHRoZSBtb3RvciB2YWx1
ZXMuCisgICAgKiBBdHRlbnRpb24sIHRoaXMgZnVuY3Rpb24gaXMgcGx1Z2luIHNwZWNpZmljLiBF
bmdpbmVzIHdvbid0IHJlYWN0IDEwMCUgdGhlIHNhbWUuCisgICAgKiBAcGFyYW0ge251bWJlcn0g
dGFyZ2V0U3BlZWQgdGhlIHNwZWVkIHRoZSBtb3RvciBpcyB0byByZWFjaAorICAgICogQHBhcmFt
IHtudW1iZXJ9IG1heEZvcmNlIG1heCBmb3JjZSBmb3IgdGhpcyBtb3Rvci4KKyAgICAqIEBwYXJh
bSB7bW90b3JJbmRleH0gdGhlIG1vdG9yJ3MgaW5kZXgsIDAgb3IgMS4KKyAgICAqLworICAgIEhp
bmdlMkpvaW50LnByb3RvdHlwZS5zZXRNb3RvciA9IGZ1bmN0aW9uICh0YXJnZXRTcGVlZCwgbWF4
Rm9yY2UsIG1vdG9ySW5kZXgpIHsKKyAgICAgICAgaWYgKG1vdG9ySW5kZXggPT09IHZvaWQgMCkg
eyBtb3RvckluZGV4ID0gMDsgfQorICAgICAgICB0aGlzLl9waHlzaWNzUGx1Z2luLnNldE1vdG9y
KHRoaXMsIHRhcmdldFNwZWVkIHx8IDAsIG1heEZvcmNlLCBtb3RvckluZGV4KTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNldCB0aGUgbW90b3IgbGltaXRzLgorICAgICAqIEF0dGVudGlvbiwg
dGhpcyBmdW5jdGlvbiBpcyBwbHVnaW4gc3BlY2lmaWMuIEVuZ2luZXMgd29uJ3QgcmVhY3QgMTAw
JSB0aGUgc2FtZS4KKyAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXJMaW1pdCB0aGUgdXBwZXIg
bGltaXQKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbG93ZXJMaW1pdCBsb3dlciBsaW1pdAorICAg
ICAqIEBwYXJhbSB7bW90b3JJbmRleH0gdGhlIG1vdG9yJ3MgaW5kZXgsIDAgb3IgMS4KKyAgICAg
Ki8KKyAgICBIaW5nZTJKb2ludC5wcm90b3R5cGUuc2V0TGltaXQgPSBmdW5jdGlvbiAodXBwZXJM
aW1pdCwgbG93ZXJMaW1pdCwgbW90b3JJbmRleCkgeworICAgICAgICBpZiAobW90b3JJbmRleCA9
PT0gdm9pZCAwKSB7IG1vdG9ySW5kZXggPSAwOyB9CisgICAgICAgIHRoaXMuX3BoeXNpY3NQbHVn
aW4uc2V0TGltaXQodGhpcywgdXBwZXJMaW1pdCwgbG93ZXJMaW1pdCwgbW90b3JJbmRleCk7Cisg
ICAgfTsKKyAgICByZXR1cm4gSGluZ2UySm9pbnQ7Cit9KE1vdG9yRW5hYmxlZEpvaW50KSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUGh5c2ljcy9waHlzaWNzUmF5Y2FzdFJlc3VsdC50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vUGh5c2ljcy9waHlzaWNzUmF5Y2FzdFJlc3VsdC50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQ
aHlzaWNzUmF5Y2FzdFJlc3VsdCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJQaHlzaWNzUmF5Y2FzdFJlc3VsdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGh5c2ljc1JheWNh
c3RSZXN1bHQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKworLyoq
CisgKiBIb2xkcyB0aGUgZGF0YSBmb3IgdGhlIHJheWNhc3QgcmVzdWx0CisgKiBAc2VlIGh0dHBz
Oi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL3VzaW5nX3RoZV9waHlzaWNzX2VuZ2luZQorICov
Cit2YXIgUGh5c2ljc1JheWNhc3RSZXN1bHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisgICAgZnVuY3Rpb24gUGh5c2ljc1JheWNhc3RSZXN1bHQoKSB7CisgICAgICAgIHRoaXMuX2hh
c0hpdCA9IGZhbHNlOworICAgICAgICB0aGlzLl9oaXREaXN0YW5jZSA9IDA7CisgICAgICAgIHRo
aXMuX2hpdE5vcm1hbFdvcmxkID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2hpdFBvaW50V29y
bGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVj
dG9yMyJdLlplcm8oKTsKKyAgICAgICAgdGhpcy5fcmF5RnJvbVdvcmxkID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7Cisg
ICAgICAgIHRoaXMuX3JheVRvV29ybGQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICB9CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFBoeXNpY3NSYXljYXN0UmVzdWx0LnByb3RvdHlwZSwgImhhc0hpdCIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgaWYgdGhlcmUgd2FzIGEgaGl0CisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9oYXNIaXQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQ
aHlzaWNzUmF5Y2FzdFJlc3VsdC5wcm90b3R5cGUsICJoaXREaXN0YW5jZSIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEdldHMgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGhpdAorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
aGl0RGlzdGFuY2U7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShQaHlzaWNzUmF5Y2FzdFJlc3VsdC5wcm90b3R5cGUsICJoaXROb3JtYWxXb3JsZCIsIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIGhpdCBub3JtYWwvZGlyZWN0aW9uIGluIHRo
ZSB3b3JsZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5faGl0Tm9ybWFsV29ybGQ7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQaHlzaWNzUmF5Y2FzdFJlc3VsdC5wcm90b3R5cGUsICJo
aXRQb2ludFdvcmxkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgaGl0IHBv
aW50IGluIHRoZSB3b3JsZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faGl0UG9pbnRXb3JsZDsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBoeXNpY3NSYXljYXN0UmVzdWx0LnByb3Rv
dHlwZSwgInJheUZyb21Xb3JsZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhl
IHJheSAic3RhcnQgcG9pbnQiIG9mIHRoZSByYXkgaW4gdGhlIHdvcmxkCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yYXlG
cm9tV29ybGQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQ
aHlzaWNzUmF5Y2FzdFJlc3VsdC5wcm90b3R5cGUsICJyYXlUb1dvcmxkIiwgeworICAgICAgICAv
KioKKyAgICAgICAgICogR2V0cyB0aGUgcmF5ICJlbmQgcG9pbnQiIG9mIHRoZSByYXkgaW4gdGhl
IHdvcmxkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9yYXlUb1dvcmxkOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioK
KyAgICAgKiBTZXRzIHRoZSBoaXQgZGF0YSAobm9ybWFsICYgcG9pbnQgaW4gd29ybGQgc3BhY2Up
CisgICAgICogQHBhcmFtIGhpdE5vcm1hbFdvcmxkIGRlZmluZXMgdGhlIG5vcm1hbCBpbiB3b3Js
ZCBzcGFjZQorICAgICAqIEBwYXJhbSBoaXRQb2ludFdvcmxkIGRlZmluZXMgdGhlIHBvaW50IGlu
IHdvcmxkIHNwYWNlCisgICAgICovCisgICAgUGh5c2ljc1JheWNhc3RSZXN1bHQucHJvdG90eXBl
LnNldEhpdERhdGEgPSBmdW5jdGlvbiAoaGl0Tm9ybWFsV29ybGQsIGhpdFBvaW50V29ybGQpIHsK
KyAgICAgICAgdGhpcy5faGFzSGl0ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5faGl0Tm9ybWFsV29y
bGQgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlZlY3RvcjMiXShoaXROb3JtYWxXb3JsZC54LCBoaXROb3JtYWxXb3JsZC55LCBoaXROb3JtYWxX
b3JsZC56KTsKKyAgICAgICAgdGhpcy5faGl0UG9pbnRXb3JsZCA9IG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdKGhpdFBvaW50V29y
bGQueCwgaGl0UG9pbnRXb3JsZC55LCBoaXRQb2ludFdvcmxkLnopOworICAgIH07CisgICAgLyoq
CisgICAgICogU2V0cyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgc3RhcnQgcG9pbnQgdG8gdGhlIGhp
dCBwb2ludAorICAgICAqIEBwYXJhbSBkaXN0YW5jZQorICAgICAqLworICAgIFBoeXNpY3NSYXlj
YXN0UmVzdWx0LnByb3RvdHlwZS5zZXRIaXREaXN0YW5jZSA9IGZ1bmN0aW9uIChkaXN0YW5jZSkg
eworICAgICAgICB0aGlzLl9oaXREaXN0YW5jZSA9IGRpc3RhbmNlOworICAgIH07CisgICAgLyoq
CisgICAgICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2UgbWFudWFsbHkKKyAgICAgKi8KKyAgICBQ
aHlzaWNzUmF5Y2FzdFJlc3VsdC5wcm90b3R5cGUuY2FsY3VsYXRlSGl0RGlzdGFuY2UgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2hpdERpc3RhbmNlID0gX01hdGhzX21hdGhfdmVjdG9y
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlY3RvcjMiXS5EaXN0YW5jZSh0aGlzLl9y
YXlGcm9tV29ybGQsIHRoaXMuX2hpdFBvaW50V29ybGQpOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmVzZXRzIGFsbCB0aGUgdmFsdWVzIHRvIGRlZmF1bHQKKyAgICAgKiBAcGFyYW0gZnJvbSBU
aGUgZnJvbSBwb2ludCBvbiB3b3JsZCBzcGFjZQorICAgICAqIEBwYXJhbSB0byBUaGUgdG8gcG9p
bnQgb24gd29ybGQgc3BhY2UKKyAgICAgKi8KKyAgICBQaHlzaWNzUmF5Y2FzdFJlc3VsdC5wcm90
b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHsKKyAgICAgICAgaWYgKGZyb20gPT09
IHZvaWQgMCkgeyBmcm9tID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlY3RvcjMiXS5aZXJvKCk7IH0KKyAgICAgICAgaWYgKHRvID09PSB2b2lkIDAp
IHsgdG8gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLlplcm8oKTsgfQorICAgICAgICB0aGlzLl9yYXlGcm9tV29ybGQgPSBmcm9tOwor
ICAgICAgICB0aGlzLl9yYXlUb1dvcmxkID0gdG87CisgICAgICAgIHRoaXMuX2hhc0hpdCA9IGZh
bHNlOworICAgICAgICB0aGlzLl9oaXREaXN0YW5jZSA9IDA7CisgICAgICAgIHRoaXMuX2hpdE5v
cm1hbFdvcmxkID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlZlY3RvcjMiXS5aZXJvKCk7CisgICAgICAgIHRoaXMuX2hpdFBvaW50V29ybGQgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVjdG9yMyJdLlpl
cm8oKTsKKyAgICB9OworICAgIHJldHVybiBQaHlzaWNzUmF5Y2FzdFJlc3VsdDsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9Q
aXBlbGluZXMvZGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvUGlwZWxpbmVz
L2RlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZSAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZTsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIv
dHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy9sb2dnZXIgKi8g
Ii4vTWlzYy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIu
L01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9Fbmdp
bmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9MYXllcnNfZ2xv
d0xheWVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9MYXllcnMvZ2xvd0xheWVyICovICIuL0xheWVycy9nbG93TGF5ZXIudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19zaGFycGVuUG9zdFBy
b2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uLy4uL1Bvc3RQcm9jZXNzZXMvc2hhcnBlblBvc3RQcm9jZXNzICovICIuL1Bvc3RQ
cm9jZXNzZXMvc2hhcnBlblBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1Bvc3RQcm9jZXNzZXNfaW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQ
cm9jZXNzZXMvaW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9p
bWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9Qb3N0UHJvY2Vzc2VzX2Nocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vUG9z
dFByb2Nlc3Nlcy9jaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nl
c3Nlcy9jaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19ncmFpblBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9Qb3N0UHJv
Y2Vzc2VzL2dyYWluUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9ncmFpblBvc3RQcm9j
ZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfZnhhYVBv
c3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9meGFhUG9zdFByb2Nlc3MgKi8gIi4vUG9z
dFByb2Nlc3Nlcy9meGFhUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlclBp
cGVsaW5lICovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5k
ZXJQaXBlbGluZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2Vz
X1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vUG9zdFByb2Nl
c3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCAqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0LnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfZGVwdGhPZkZpZWxkRWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vLi4vUG9zdFByb2Nlc3Nlcy9kZXB0aE9mRmllbGRFZmZlY3QgKi8gIi4vUG9zdFByb2Nlc3Nl
cy9kZXB0aE9mRmllbGRFZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9z
dFByb2Nlc3Nlc19ibG9vbUVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQcm9jZXNzZXMvYmxvb21FZmZlY3Qg
Ki8gIi4vUG9zdFByb2Nlc3Nlcy9ibG9vbUVmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvdHlwZVN0b3JlICovICIuL01pc2Mv
dHlwZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5l
U3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5lU3Rv
cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQ
aXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vLi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlclBpcGVs
aW5lTWFuYWdlclNjZW5lQ29tcG9uZW50ICovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxp
bmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVudC50cyIpOwor
CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworLyoqCisgKiBUaGUgZGVmYXVsdCBy
ZW5kZXJpbmcgcGlwZWxpbmUgY2FuIGJlIGFkZGVkIHRvIGEgc2NlbmUgdG8gYXBwbHkgY29tbW9u
IHBvc3QgcHJvY2Vzc2luZyBlZmZlY3RzIHN1Y2ggYXMgYW50aS1hbGlhc2luZyBvciBkZXB0aCBv
ZiBmaWVsZC4KKyAqIFNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by91c2luZ19k
ZWZhdWx0X3JlbmRlcmluZ19waXBlbGluZQorICovCit2YXIgRGVmYXVsdFJlbmRlcmluZ1BpcGVs
aW5lID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKERlZmF1bHRSZW5kZXJpbmdQaXBl
bGluZSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBAY29uc3RydWN0b3IKKyAgICAgKiBAcGFy
YW0gbmFtZSAtIFRoZSByZW5kZXJpbmcgcGlwZWxpbmUgbmFtZSAoZGVmYXVsdDogIiIpCisgICAg
ICogQHBhcmFtIGhkciAtIElmIGhpZ2ggZHluYW1pYyByYW5nZSB0ZXh0dXJlcyBzaG91bGQgYmUg
dXNlZCAoZGVmYXVsdDogdHJ1ZSkKKyAgICAgKiBAcGFyYW0gc2NlbmUgLSBUaGUgc2NlbmUgbGlu
a2VkIHRvIHRoaXMgcGlwZWxpbmUgKGRlZmF1bHQ6IHRoZSBsYXN0IGNyZWF0ZWQgc2NlbmUpCisg
ICAgICogQHBhcmFtIGNhbWVyYXMgLSBUaGUgYXJyYXkgb2YgY2FtZXJhcyB0aGF0IHRoZSByZW5k
ZXJpbmcgcGlwZWxpbmUgd2lsbCBiZSBhdHRhY2hlZCB0byAoZGVmYXVsdDogc2NlbmUuY2FtZXJh
cykKKyAgICAgKiBAcGFyYW0gYXV0b21hdGljQnVpbGQgLSBpZiBmYWxzZSwgeW91IHdpbGwgaGF2
ZSB0byBtYW51YWxseSBjYWxsIHByZXBhcmUoKSB0byB1cGRhdGUgdGhlIHBpcGVsaW5lIChkZWZh
dWx0OiB0cnVlKQorICAgICAqLworICAgIGZ1bmN0aW9uIERlZmF1bHRSZW5kZXJpbmdQaXBlbGlu
ZShuYW1lLCBoZHIsIHNjZW5lLCBjYW1lcmFzLCBhdXRvbWF0aWNCdWlsZCkgeworICAgICAgICBp
ZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSAiIjsgfQorICAgICAgICBpZiAoaGRyID09PSB2
b2lkIDApIHsgaGRyID0gdHJ1ZTsgfQorICAgICAgICBpZiAoc2NlbmUgPT09IHZvaWQgMCkgeyBz
Y2VuZSA9IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9f
WyJFbmdpbmVTdG9yZSJdLkxhc3RDcmVhdGVkU2NlbmU7IH0KKyAgICAgICAgaWYgKGF1dG9tYXRp
Y0J1aWxkID09PSB2b2lkIDApIHsgYXV0b21hdGljQnVpbGQgPSB0cnVlOyB9CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjZW5lLmdldEVuZ2luZSgpLCBuYW1lKSB8fCB0
aGlzOworICAgICAgICBfdGhpcy5fY2FtZXJhc1RvQmVBdHRhY2hlZCA9IFtdOworICAgICAgICAv
KioKKyAgICAgICAgICogSUQgb2YgdGhlIHNoYXJwZW4gcG9zdCBwcm9jZXNzLAorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuU2hhcnBlblBvc3RQcm9jZXNzSWQgPSAiU2hhcnBlblBvc3RQcm9j
ZXNzRWZmZWN0IjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgICog
SUQgb2YgdGhlIGltYWdlIHByb2Nlc3NpbmcgcG9zdCBwcm9jZXNzOworICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMuSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3NJZCA9ICJJbWFnZVByb2Nlc3Np
bmdQb3N0UHJvY2Vzc0VmZmVjdCI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaWdub3JlCisg
ICAgICAgICAqIElEIG9mIHRoZSBGYXN0IEFwcHJveGltYXRlIEFudGktQWxpYXNpbmcgcG9zdCBw
cm9jZXNzOworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuRnhhYVBvc3RQcm9jZXNzSWQgPSAi
RnhhYVBvc3RQcm9jZXNzRWZmZWN0IjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElEIG9mIHRo
ZSBjaHJvbWF0aWMgYWJlcnJhdGlvbiBwb3N0IHByb2Nlc3MsCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5DaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3NJZCA9ICJDaHJvbWF0aWNBYmVy
cmF0aW9uUG9zdFByb2Nlc3NFZmZlY3QiOworICAgICAgICAvKioKKyAgICAgICAgICogSUQgb2Yg
dGhlIGdyYWluIHBvc3QgcHJvY2VzcworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuR3JhaW5Q
b3N0UHJvY2Vzc0lkID0gIkdyYWluUG9zdFByb2Nlc3NFZmZlY3QiOworICAgICAgICAvKioKKyAg
ICAgICAgICogR2xvdyBwb3N0IHByb2Nlc3Mgd2hpY2ggYWRkcyBhIGdsb3cgdG8gZW1pc3NpdmUg
YXJlYXMgb2YgdGhlIGltYWdlCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fZ2xvd0xheWVy
ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFuaW1hdGlvbnMgd2hpY2ggY2FuIGJl
IHVzZWQgdG8gdHdlYWsgc2V0dGluZ3Mgb3ZlciBhIHBlcmlvZCBvZiB0aW1lCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5hbmltYXRpb25zID0gW107CisgICAgICAgIF90aGlzLl9pbWFnZVBy
b2Nlc3NpbmdDb25maWd1cmF0aW9uT2JzZXJ2ZXIgPSBudWxsOworICAgICAgICAvLyBWYWx1ZXMK
KyAgICAgICAgX3RoaXMuX3NoYXJwZW5FbmFibGVkID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9i
bG9vbUVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2RlcHRoT2ZGaWVsZEVuYWJsZWQg
PSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2RlcHRoT2ZGaWVsZEJsdXJMZXZlbCA9IF9Qb3N0UHJv
Y2Vzc2VzX2RlcHRoT2ZGaWVsZEVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1si
RGVwdGhPZkZpZWxkRWZmZWN0Qmx1ckxldmVsIl0uTG93OworICAgICAgICBfdGhpcy5fZnhhYUVu
YWJsZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2ltYWdlUHJvY2Vzc2luZ0VuYWJsZWQgPSB0
cnVlOworICAgICAgICBfdGhpcy5fYmxvb21TY2FsZSA9IDAuNTsKKyAgICAgICAgX3RoaXMuX2No
cm9tYXRpY0FiZXJyYXRpb25FbmFibGVkID0gZmFsc2U7CisgICAgICAgIF90aGlzLl9ncmFpbkVu
YWJsZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2J1aWxkQWxsb3dlZCA9IHRydWU7CisgICAg
ICAgIF90aGlzLl9yZXNpemVPYnNlcnZlciA9IG51bGw7CisgICAgICAgIF90aGlzLl9oYXJkd2Fy
ZVNjYWxlTGV2ZWwgPSAxLjA7CisgICAgICAgIF90aGlzLl9ibG9vbUtlcm5lbCA9IDY0OworICAg
ICAgICAvKioKKyAgICAgICAgICogU3BlY2lmaWVzIHRoZSB3ZWlnaHQgb2YgdGhlIGJsb29tIGlu
IHRoZSBmaW5hbCByZW5kZXJpbmcKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9ibG9vbVdl
aWdodCA9IDAuMTU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGx1bWEg
dGhyZXNob2xkIGZvciB0aGUgYXJlYSB0aGF0IHdpbGwgYmUgYmx1cnJlZCBieSB0aGUgYmxvb20K
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9ibG9vbVRocmVzaG9sZCA9IDAuOTsKKyAgICAg
ICAgX3RoaXMuX3NhbXBsZXMgPSAxOworICAgICAgICBfdGhpcy5faGFzQ2xlYXJlZCA9IGZhbHNl
OworICAgICAgICBfdGhpcy5fcHJldlBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgX3RoaXMu
X3ByZXZQcmV2UG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICBfdGhpcy5fZGVwdGhPZkZpZWxk
U2NlbmVPYnNlcnZlciA9IG51bGw7CisgICAgICAgIF90aGlzLl9jYW1lcmFzID0gY2FtZXJhcyB8
fCBzY2VuZS5jYW1lcmFzOworICAgICAgICBfdGhpcy5fY2FtZXJhcyA9IF90aGlzLl9jYW1lcmFz
LnNsaWNlKCk7CisgICAgICAgIF90aGlzLl9jYW1lcmFzVG9CZUF0dGFjaGVkID0gX3RoaXMuX2Nh
bWVyYXMuc2xpY2UoKTsKKyAgICAgICAgX3RoaXMuX2J1aWxkQWxsb3dlZCA9IGF1dG9tYXRpY0J1
aWxkOworICAgICAgICAvLyBJbml0aWFsaXplCisgICAgICAgIF90aGlzLl9zY2VuZSA9IHNjZW5l
OworICAgICAgICB2YXIgY2FwcyA9IF90aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5nZXRDYXBzKCk7
CisgICAgICAgIF90aGlzLl9oZHIgPSBoZHIgJiYgKGNhcHMudGV4dHVyZUhhbGZGbG9hdFJlbmRl
ciB8fCBjYXBzLnRleHR1cmVGbG9hdFJlbmRlcik7CisgICAgICAgIC8vIE1pc2MKKyAgICAgICAg
aWYgKF90aGlzLl9oZHIpIHsKKyAgICAgICAgICAgIGlmIChjYXBzLnRleHR1cmVIYWxmRmxvYXRS
ZW5kZXIpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fZGVmYXVsdFBpcGVsaW5lVGV4dHVyZVR5
cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfSEFMRl9GTE9BVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKGNhcHMudGV4dHVyZUZsb2F0UmVuZGVyKSB7CisgICAgICAgICAgICAgICAg
X3RoaXMuX2RlZmF1bHRQaXBlbGluZVRleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX0ZMT0FU
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
X3RoaXMuX2RlZmF1bHRQaXBlbGluZVRleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lH
TkVEX0lOVDsKKyAgICAgICAgfQorICAgICAgICAvLyBBdHRhY2gKKyAgICAgICAgc2NlbmUucG9z
dFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIuYWRkUGlwZWxpbmUoX3RoaXMpOworICAgICAg
ICB2YXIgZW5naW5lID0gX3RoaXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICAvLyBDcmVh
dGUgcG9zdCBwcm9jZXNzZXMgYmVmb3JlIGhhbmQgc28gdGhleSBjYW4gYmUgbW9kaWZpZWQgYmVm
b3JlIGVuYWJsZWQuCisgICAgICAgIC8vIEJsb2NrIGNvbXBpbGF0aW9uIGZsYWcgaXMgc2V0IHRv
IHRydWUgdG8gYXZvaWQgY29tcGlsYXRpb24gcHJpb3IgdG8gdXNlLCB0aGVzZSB3aWxsIGJlIHVw
ZGF0ZWQgb24gZmlyc3QgdXNlIGluIGJ1aWxkIHBpcGVsaW5lLgorICAgICAgICBfdGhpcy5zaGFy
cGVuID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3NoYXJwZW5Qb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fWyJTaGFycGVuUG9zdFByb2Nlc3MiXSgic2hhcnBlbiIsIDEuMCwgbnVs
bCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIGVuZ2luZSwgZmFsc2UsIF90aGlz
Ll9kZWZhdWx0UGlwZWxpbmVUZXh0dXJlVHlwZSwgdHJ1ZSk7CisgICAgICAgIF90aGlzLl9zaGFy
cGVuRWZmZWN0ID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNz
UmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJQb3N0UHJvY2Vzc1Jl
bmRlckVmZmVjdCJdKGVuZ2luZSwgX3RoaXMuU2hhcnBlblBvc3RQcm9jZXNzSWQsIGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIF90aGlzLnNoYXJwZW47IH0sIHRydWUpOworICAgICAgICBfdGhpcy5kZXB0
aE9mRmllbGQgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfZGVwdGhPZkZpZWxkRWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xM19fWyJEZXB0aE9mRmllbGRFZmZlY3QiXShfdGhpcy5fc2NlbmUs
IG51bGwsIF90aGlzLl9kZXB0aE9mRmllbGRCbHVyTGV2ZWwsIF90aGlzLl9kZWZhdWx0UGlwZWxp
bmVUZXh0dXJlVHlwZSwgdHJ1ZSk7CisgICAgICAgIF90aGlzLmJsb29tID0gbmV3IF9Qb3N0UHJv
Y2Vzc2VzX2Jsb29tRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJCbG9vbUVm
ZmVjdCJdKF90aGlzLl9zY2VuZSwgX3RoaXMuX2Jsb29tU2NhbGUsIF90aGlzLl9ibG9vbVdlaWdo
dCwgX3RoaXMuYmxvb21LZXJuZWwsIF90aGlzLl9kZWZhdWx0UGlwZWxpbmVUZXh0dXJlVHlwZSwg
dHJ1ZSk7CisgICAgICAgIF90aGlzLmNocm9tYXRpY0FiZXJyYXRpb24gPSBuZXcgX1Bvc3RQcm9j
ZXNzZXNfY2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIkNocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2VzcyJdKCJDaHJvbWF0aWNBYmVy
cmF0aW9uIiwgZW5naW5lLmdldFJlbmRlcldpZHRoKCksIGVuZ2luZS5nZXRSZW5kZXJIZWlnaHQo
KSwgMS4wLCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgZW5naW5lLCBm
YWxzZSwgX3RoaXMuX2RlZmF1bHRQaXBlbGluZVRleHR1cmVUeXBlLCB0cnVlKTsKKyAgICAgICAg
X3RoaXMuX2Nocm9tYXRpY0FiZXJyYXRpb25FZmZlY3QgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfUmVu
ZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEyX19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oZW5naW5lLCBfdGhpcy5DaHJvbWF0
aWNBYmVycmF0aW9uUG9zdFByb2Nlc3NJZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuY2hy
b21hdGljQWJlcnJhdGlvbjsgfSwgdHJ1ZSk7CisgICAgICAgIF90aGlzLmdyYWluID0gbmV3IF9Q
b3N0UHJvY2Vzc2VzX2dyYWluUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siR3JhaW5Qb3N0UHJvY2VzcyJdKCJHcmFpbiIsIDEuMCwgbnVsbCwgX01hdGVyaWFsc19UZXh0
dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlRleHR1cmUiXS5CSUxJ
TkVBUl9TQU1QTElOR01PREUsIGVuZ2luZSwgZmFsc2UsIF90aGlzLl9kZWZhdWx0UGlwZWxpbmVU
ZXh0dXJlVHlwZSwgdHJ1ZSk7CisgICAgICAgIF90aGlzLl9ncmFpbkVmZmVjdCA9IG5ldyBfUG9z
dFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTJfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShlbmdpbmUs
IF90aGlzLkdyYWluUG9zdFByb2Nlc3NJZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuZ3Jh
aW47IH0sIHRydWUpOworICAgICAgICBfdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBlbmdpbmUub25S
ZXNpemVPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5faGFy
ZHdhcmVTY2FsZUxldmVsID0gZW5naW5lLmdldEhhcmR3YXJlU2NhbGluZ0xldmVsKCk7CisgICAg
ICAgICAgICBfdGhpcy5ibG9vbUtlcm5lbCA9IF90aGlzLmJsb29tS2VybmVsOworICAgICAgICB9
KTsKKyAgICAgICAgX3RoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb25PYnNlcnZlciA9
IF90aGlzLl9zY2VuZS5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLm9uVXBkYXRlUGFyYW1l
dGVycy5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMuYmxvb20uX2Rvd25zY2Fs
ZS5fZXhwb3N1cmUgPSBfdGhpcy5fc2NlbmUuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5l
eHBvc3VyZTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLl9idWlsZFBpcGVsaW5lKCk7Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERl
ZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJzY2VuZSIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgYWN0aXZlIHNjZW5lCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERlZmF1bHRSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUsICJzaGFycGVuRW5hYmxlZCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcnBlbkVuYWJsZWQ7CisgICAgICAg
IH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgc2hhcnBl
biBwcm9jZXNzIGZyb20gdGhlIHBpcGVsaW5lCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uIChlbmFibGVkKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fc2hhcnBlbkVuYWJsZWQg
PT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl9zaGFycGVuRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgICAgICAgICB0
aGlzLl9idWlsZFBpcGVsaW5lKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiYmxvb21LZXJu
ZWwiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhl
IGJsb29tIGJsdXIga2VybmVsLCByZWxhdGl2ZSB0byB0aGUgZmluYWwgb3V0cHV0IHNpemUKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2Jsb29tS2VybmVsOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYmxvb21LZXJuZWwgPSB2YWx1ZTsKKyAgICAgICAg
ICAgIHRoaXMuYmxvb20ua2VybmVsID0gdmFsdWUgLyB0aGlzLl9oYXJkd2FyZVNjYWxlTGV2ZWw7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVu
ZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiYmxvb21XZWlnaHQiLCB7CisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Jsb29tV2VpZ2h0OworICAg
ICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibG9v
bS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fYmxvb21XZWlnaHQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5ibG9vbS53ZWlnaHQgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2Jsb29tV2VpZ2h0ID0gdmFsdWU7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlwZWxp
bmUucHJvdG90eXBlLCAiYmxvb21UaHJlc2hvbGQiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Jsb29tVGhyZXNob2xkOworICAgICAgICB9
LAorICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibG9vbS4KKyAg
ICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fYmxvb21UaHJlc2hvbGQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5ibG9vbS50aHJlc2hvbGQgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2Jsb29tVGhyZXNob2xkID0gdmFsdWU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlw
ZWxpbmUucHJvdG90eXBlLCAiYmxvb21TY2FsZSIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmxvb21TY2FsZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFRoZSBzY2FsZSBvZiB0aGUgYmxvb20sIGxvd2VyIHZhbHVl
IHdpbGwgcHJvdmlkZSBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgICAgICAqLworICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2Jsb29tU2NhbGUg
PT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhpcy5fYmxvb21TY2FsZSA9IHZhbHVlOworICAgICAgICAgICAgLy8gcmVjcmVh
dGUgYmxvb20gYW5kIGRpc3Bvc2Ugb2xkIGFzIHRoaXMgc2V0dGluZyBpcyBub3QgZHluYW1pYwor
ICAgICAgICAgICAgdGhpcy5fcmVidWlsZEJsb29tKCk7CisgICAgICAgICAgICB0aGlzLl9idWls
ZFBpcGVsaW5lKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiYmxvb21FbmFibGVkIiwgewor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9ibG9v
bUVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3Ig
ZGlzYWJsZSB0aGUgYmxvb20gZnJvbSB0aGUgcGlwZWxpbmUKKyAgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKGVuYWJsZWQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9ibG9vbUVu
YWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9ibG9vbUVuYWJsZWQgPSBlbmFibGVkOworICAgICAgICAg
ICAgdGhpcy5fYnVpbGRQaXBlbGluZSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBEZWZhdWx0
UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLl9yZWJ1aWxkQmxvb20gPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIC8vIHJlY3JlYXRlIGJsb29tIGFuZCBkaXNwb3NlIG9sZCBhcyB0aGlzIHNldHRp
bmcgaXMgbm90IGR5bmFtaWMKKyAgICAgICAgdmFyIG9sZEJsb29tID0gdGhpcy5ibG9vbTsKKyAg
ICAgICAgdGhpcy5ibG9vbSA9IG5ldyBfUG9zdFByb2Nlc3Nlc19ibG9vbUVmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTRfX1siQmxvb21FZmZlY3QiXSh0aGlzLl9zY2VuZSwgdGhpcy5i
bG9vbVNjYWxlLCB0aGlzLl9ibG9vbVdlaWdodCwgdGhpcy5ibG9vbUtlcm5lbCwgdGhpcy5fZGVm
YXVsdFBpcGVsaW5lVGV4dHVyZVR5cGUsIGZhbHNlKTsKKyAgICAgICAgdGhpcy5ibG9vbS50aHJl
c2hvbGQgPSBvbGRCbG9vbS50aHJlc2hvbGQ7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5fY2FtZXJhcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgb2xkQmxvb20uZGlzcG9z
ZUVmZmVjdHModGhpcy5fY2FtZXJhc1tpXSk7CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiZGVw
dGhPZkZpZWxkRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBkZXB0
aCBvZiBmaWVsZCBpcyBlbmFibGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGhPZkZpZWxkRW5hYmxlZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5hYmxlZCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX2RlcHRoT2ZGaWVsZEVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9kZXB0aE9mRmll
bGRFbmFibGVkID0gZW5hYmxlZDsKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkUGlwZWxpbmUoKTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERlZmF1bHRSZW5k
ZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJkZXB0aE9mRmllbGRCbHVyTGV2ZWwiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBCbHVyIGxldmVsIG9mIHRoZSBkZXB0aCBvZiBmaWVsZCBlZmZl
Y3QuIChIaWdoZXIgYmx1ciB3aWxsIGVmZmVjdCBwZXJmb3JtYW5jZSkKKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlcHRo
T2ZGaWVsZEJsdXJMZXZlbDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9kZXB0aE9mRmllbGRCbHVyTGV2ZWwgPT09IHZh
bHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fZGVwdGhPZkZpZWxkQmx1ckxldmVsID0gdmFsdWU7CisgICAgICAgICAgICAvLyBy
ZWNyZWF0ZSBkb2YgYW5kIGRpc3Bvc2Ugb2xkIGFzIHRoaXMgc2V0dGluZyBpcyBub3QgZHluYW1p
YworICAgICAgICAgICAgdmFyIG9sZERvZiA9IHRoaXMuZGVwdGhPZkZpZWxkOworICAgICAgICAg
ICAgdGhpcy5kZXB0aE9mRmllbGQgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfZGVwdGhPZkZpZWxkRWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJEZXB0aE9mRmllbGRFZmZlY3QiXSh0
aGlzLl9zY2VuZSwgbnVsbCwgdGhpcy5fZGVwdGhPZkZpZWxkQmx1ckxldmVsLCB0aGlzLl9kZWZh
dWx0UGlwZWxpbmVUZXh0dXJlVHlwZSwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5kZXB0aE9m
RmllbGQuZm9jYWxMZW5ndGggPSBvbGREb2YuZm9jYWxMZW5ndGg7CisgICAgICAgICAgICB0aGlz
LmRlcHRoT2ZGaWVsZC5mb2N1c0Rpc3RhbmNlID0gb2xkRG9mLmZvY3VzRGlzdGFuY2U7CisgICAg
ICAgICAgICB0aGlzLmRlcHRoT2ZGaWVsZC5mU3RvcCA9IG9sZERvZi5mU3RvcDsKKyAgICAgICAg
ICAgIHRoaXMuZGVwdGhPZkZpZWxkLmxlbnNTaXplID0gb2xkRG9mLmxlbnNTaXplOworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jYW1lcmFzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgb2xkRG9mLmRpc3Bvc2VFZmZlY3RzKHRoaXMuX2NhbWVyYXNbaV0pOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fYnVpbGRQaXBlbGluZSgpOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGVmYXVsdFJlbmRlcmluZ1Bp
cGVsaW5lLnByb3RvdHlwZSwgImZ4YWFFbmFibGVkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9meGFhRW5hYmxlZDsKKyAgICAgICAgfSwK
KyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBhbnRpIGFsaWFzaW5nIGlzIGVuYWJsZWQu
CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmFibGVkKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fZnhhYUVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9meGFhRW5hYmxlZCA9
IGVuYWJsZWQ7CisgICAgICAgICAgICB0aGlzLl9idWlsZFBpcGVsaW5lKCk7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlwZWxp
bmUucHJvdG90eXBlLCAic2FtcGxlcyIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fc2FtcGxlczsKKyAgICAgICAgfSwKKyAgICAgICAgLyoq
CisgICAgICAgICAqIE1TQUEgc2FtcGxlIGNvdW50LCBzZXR0aW5nIHRoaXMgdG8gNCB3aWxsIHBy
b3ZpZGUgNHggYW50aSBhbGlhc2luZy4gKGRlZmF1bHQ6IDEpCisgICAgICAgICAqLworICAgICAg
ICBzZXQ6IGZ1bmN0aW9uIChzYW1wbGVDb3VudCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3Nh
bXBsZXMgPT09IHNhbXBsZUNvdW50KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2FtcGxlcyA9IHNhbXBsZUNvdW50OworICAgICAg
ICAgICAgdGhpcy5fYnVpbGRQaXBlbGluZSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImlt
YWdlUHJvY2Vzc2luZ0VuYWJsZWQiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0VuYWJsZWQ7CisgICAgICAgIH0s
CisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiBpbWFnZSBwcm9jZXNzaW5nIGlzIGVuYWJsZWQu
CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmFibGVkKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5faW1hZ2VQcm9jZXNzaW5nRW5hYmxlZCA9PT0gZW5hYmxlZCkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2lt
YWdlUHJvY2Vzc2luZ0VuYWJsZWQgPSBlbmFibGVkOworICAgICAgICAgICAgdGhpcy5fYnVpbGRQ
aXBlbGluZSgpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
RGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImdsb3dMYXllckVuYWJsZWQiLCB7
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ds
b3dMYXllciAhPSBudWxsOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogSWYg
Z2xvdyBsYXllciBpcyBlbmFibGVkLiAoQWRkcyBhIGdsb3cgZWZmZWN0IHRvIGVtbWlzc2l2ZSBt
YXRlcmlhbHMpCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmFibGVkKSB7
CisgICAgICAgICAgICBpZiAoZW5hYmxlZCAmJiAhdGhpcy5fZ2xvd0xheWVyKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5fZ2xvd0xheWVyID0gbmV3IF9MYXllcnNfZ2xvd0xheWVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIkdsb3dMYXllciJdKCIiLCB0aGlzLl9zY2VuZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghZW5hYmxlZCAmJiB0aGlzLl9nbG93TGF5
ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9nbG93TGF5ZXIuZGlzcG9zZSgpOworICAgICAg
ICAgICAgICAgIHRoaXMuX2dsb3dMYXllciA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlw
ZWxpbmUucHJvdG90eXBlLCAiZ2xvd0xheWVyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB0aGUgZ2xvdyBsYXllciAob3IgbnVsbCBpZiBub3QgZGVmaW5lZCkKKyAgICAgICAgICov
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ds
b3dMYXllcjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERl
ZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJjaHJvbWF0aWNBYmVycmF0aW9uRW5h
YmxlZCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fY2hyb21hdGljQWJlcnJhdGlvbkVuYWJsZWQ7CisgICAgICAgIH0sCisgICAgICAgIC8q
KgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgY2hyb21hdGljQWJlcnJhdGlvbiBw
cm9jZXNzIGZyb20gdGhlIHBpcGVsaW5lCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uIChlbmFibGVkKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fY2hyb21hdGljQWJlcnJhdGlv
bkVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl9jaHJvbWF0aWNBYmVycmF0aW9uRW5hYmxlZCA9IGVu
YWJsZWQ7CisgICAgICAgICAgICB0aGlzLl9idWlsZFBpcGVsaW5lKCk7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLCAiZ3JhaW5FbmFibGVkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLl9ncmFpbkVuYWJsZWQ7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgZ3JhaW4gcHJvY2VzcyBm
cm9tIHRoZSBwaXBlbGluZQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5h
YmxlZCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2dyYWluRW5hYmxlZCA9PT0gZW5hYmxlZCkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX2dyYWluRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgICAgICAgICB0aGlzLl9idWlsZFBpcGVs
aW5lKCk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEdldCB0aGUgY2xhc3Mg
bmFtZQorICAgICAqIEByZXR1cm5zICJEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUiCisgICAgICov
CisgICAgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lIjsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEZvcmNlIHRoZSBjb21waWxhdGlvbiBvZiB0aGUgZW50
aXJlIHBpcGVsaW5lLgorICAgICAqLworICAgIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90
b3R5cGUucHJlcGFyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzU3RhdGUg
PSB0aGlzLl9idWlsZEFsbG93ZWQ7CisgICAgICAgIHRoaXMuX2J1aWxkQWxsb3dlZCA9IHRydWU7
CisgICAgICAgIHRoaXMuX2J1aWxkUGlwZWxpbmUoKTsKKyAgICAgICAgdGhpcy5fYnVpbGRBbGxv
d2VkID0gcHJldmlvdXNTdGF0ZTsKKyAgICB9OworICAgIERlZmF1bHRSZW5kZXJpbmdQaXBlbGlu
ZS5wcm90b3R5cGUuX3NldEF1dG9DbGVhckFuZFRleHR1cmVTaGFyaW5nID0gZnVuY3Rpb24gKHBv
c3RQcm9jZXNzLCBza2lwVGV4dHVyZVNoYXJpbmcpIHsKKyAgICAgICAgaWYgKHNraXBUZXh0dXJl
U2hhcmluZyA9PT0gdm9pZCAwKSB7IHNraXBUZXh0dXJlU2hhcmluZyA9IGZhbHNlOyB9CisgICAg
ICAgIGlmICh0aGlzLl9oYXNDbGVhcmVkKSB7CisgICAgICAgICAgICBwb3N0UHJvY2Vzcy5hdXRv
Q2xlYXIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBv
c3RQcm9jZXNzLmF1dG9DbGVhciA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5hdXRv
Q2xlYXIgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2hhc0NsZWFyZWQgPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGlmICghc2tpcFRleHR1cmVTaGFyaW5nKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fcHJldlByZXZQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHBvc3RQcm9j
ZXNzLnNoYXJlT3V0cHV0V2l0aCh0aGlzLl9wcmV2UHJldlBvc3RQcm9jZXNzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBvc3RQcm9jZXNzLnVz
ZU93bk91dHB1dCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZQ
b3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZQcmV2UG9zdFByb2Nlc3Mg
PSB0aGlzLl9wcmV2UG9zdFByb2Nlc3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9wcmV2UG9zdFByb2Nlc3MgPSBwb3N0UHJvY2VzczsKKyAgICAgICAgfQorICAgIH07CisgICAg
RGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fYnVpbGRQaXBlbGluZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgaWYgKCF0aGlzLl9i
dWlsZEFsbG93ZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9zY2VuZS5hdXRvQ2xlYXIgPSB0cnVlOworICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5f
c2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3N0UHJvY2Vzc2VzKCk7
CisgICAgICAgIGlmICh0aGlzLl9jYW1lcmFzICE9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlz
Ll9zY2VuZS5wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5kZXRhY2hDYW1lcmFzRnJv
bVJlbmRlclBpcGVsaW5lKHRoaXMuX25hbWUsIHRoaXMuX2NhbWVyYXMpOworICAgICAgICAgICAg
Ly8gZ2V0IGJhY2sgY2FtZXJhcyB0byBiZSB1c2VkIHRvIHJlYXR0YWNoIHBpcGVsaW5lCisgICAg
ICAgICAgICB0aGlzLl9jYW1lcmFzID0gdGhpcy5fY2FtZXJhc1RvQmVBdHRhY2hlZC5zbGljZSgp
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Jlc2V0KCk7CisgICAgICAgIHRoaXMuX3ByZXZQ
b3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIHRoaXMuX3ByZXZQcmV2UG9zdFByb2Nlc3MgPSBu
dWxsOworICAgICAgICB0aGlzLl9oYXNDbGVhcmVkID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlz
LmRlcHRoT2ZGaWVsZEVuYWJsZWQpIHsKKyAgICAgICAgICAgIC8vIE11bHRpIGNhbWVyYSBzdXBv
cnQKKyAgICAgICAgICAgIGlmICh0aGlzLl9jYW1lcmFzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fY2FtZXJhczsgX2kgPCBfYS5sZW5n
dGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNhbWVyYSA9IF9hW19pXTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGRlcHRoUmVuZGVyZXIgPSB0aGlzLl9zY2VuZS5lbmFibGVE
ZXB0aFJlbmRlcmVyKGNhbWVyYSk7CisgICAgICAgICAgICAgICAgICAgIGRlcHRoUmVuZGVyZXIu
dXNlT25seUluQWN0aXZlQ2FtZXJhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdGhpcy5fZGVwdGhPZkZpZWxkU2NlbmVPYnNlcnZlciA9IHRoaXMuX3NjZW5lLm9u
QWZ0ZXJSZW5kZXJUYXJnZXRzUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKHNjZW5lKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fY2FtZXJhcy5pbmRleE9mKHNjZW5lLmFj
dGl2ZUNhbWVyYSkgPiAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZGVwdGhP
ZkZpZWxkLmRlcHRoVGV4dHVyZSA9IHNjZW5lLmVuYWJsZURlcHRoUmVuZGVyZXIoc2NlbmUuYWN0
aXZlQ2FtZXJhKS5nZXREZXB0aE1hcCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9zY2VuZS5vbkFmdGVyUmVuZGVyVGFyZ2V0c1JlbmRlck9ic2VydmFibGUu
cmVtb3ZlKHRoaXMuX2RlcHRoT2ZGaWVsZFNjZW5lT2JzZXJ2ZXIpOworICAgICAgICAgICAgICAg
IHZhciBkZXB0aFJlbmRlcmVyID0gdGhpcy5fc2NlbmUuZW5hYmxlRGVwdGhSZW5kZXJlcih0aGlz
Ll9jYW1lcmFzWzBdKTsKKyAgICAgICAgICAgICAgICB0aGlzLmRlcHRoT2ZGaWVsZC5kZXB0aFRl
eHR1cmUgPSBkZXB0aFJlbmRlcmVyLmdldERlcHRoTWFwKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoIXRoaXMuZGVwdGhPZkZpZWxkLl9pc1JlYWR5KCkpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLmRlcHRoT2ZGaWVsZC5fdXBkYXRlRWZmZWN0cygpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5hZGRFZmZlY3QodGhpcy5kZXB0aE9mRmllbGQpOworICAgICAgICAg
ICAgdGhpcy5fc2V0QXV0b0NsZWFyQW5kVGV4dHVyZVNoYXJpbmcodGhpcy5kZXB0aE9mRmllbGQu
X2VmZmVjdHNbMF0sIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5fc2NlbmUub25BZnRlclJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZhYmxlLnJlbW92
ZSh0aGlzLl9kZXB0aE9mRmllbGRTY2VuZU9ic2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5ibG9vbUVuYWJsZWQpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5ibG9vbS5faXNS
ZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5ibG9vbS5fdXBkYXRlRWZmZWN0cygpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5hZGRFZmZlY3QodGhpcy5ibG9vbSk7Cisg
ICAgICAgICAgICB0aGlzLl9zZXRBdXRvQ2xlYXJBbmRUZXh0dXJlU2hhcmluZyh0aGlzLmJsb29t
Ll9lZmZlY3RzWzBdLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5faW1hZ2VQ
cm9jZXNzaW5nRW5hYmxlZCkgeworICAgICAgICAgICAgdGhpcy5pbWFnZVByb2Nlc3NpbmcgPSBu
ZXcgX1Bvc3RQcm9jZXNzZXNfaW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MiXSgiaW1hZ2VQcm9j
ZXNzaW5nIiwgMS4wLCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgZW5n
aW5lLCBmYWxzZSwgdGhpcy5fZGVmYXVsdFBpcGVsaW5lVGV4dHVyZVR5cGUpOworICAgICAgICAg
ICAgaWYgKHRoaXMuX2hkcikgeworICAgICAgICAgICAgICAgIHRoaXMuYWRkRWZmZWN0KG5ldyBf
UG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShlbmdp
bmUsIHRoaXMuSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3NJZCwgZnVuY3Rpb24gKCkgeyByZXR1
cm4gX3RoaXMuaW1hZ2VQcm9jZXNzaW5nOyB9LCB0cnVlKSk7CisgICAgICAgICAgICAgICAgdGhp
cy5fc2V0QXV0b0NsZWFyQW5kVGV4dHVyZVNoYXJpbmcodGhpcy5pbWFnZVByb2Nlc3NpbmcpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
c2NlbmUuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5hcHBseUJ5UG9zdFByb2Nlc3MgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5zaGFycGVu
RW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJwZW4uaXNSZWFkeSgpKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5zaGFycGVuLnVwZGF0ZUVmZmVjdCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5hZGRFZmZlY3QodGhpcy5fc2hhcnBlbkVmZmVjdCk7CisgICAg
ICAgICAgICB0aGlzLl9zZXRBdXRvQ2xlYXJBbmRUZXh0dXJlU2hhcmluZyh0aGlzLnNoYXJwZW4p
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmdyYWluRW5hYmxlZCkgeworICAgICAgICAg
ICAgaWYgKCF0aGlzLmdyYWluLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHRoaXMuZ3Jh
aW4udXBkYXRlRWZmZWN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmFkZEVm
ZmVjdCh0aGlzLl9ncmFpbkVmZmVjdCk7CisgICAgICAgICAgICB0aGlzLl9zZXRBdXRvQ2xlYXJB
bmRUZXh0dXJlU2hhcmluZyh0aGlzLmdyYWluKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhp
cy5jaHJvbWF0aWNBYmVycmF0aW9uRW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLmNo
cm9tYXRpY0FiZXJyYXRpb24uaXNSZWFkeSgpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5jaHJv
bWF0aWNBYmVycmF0aW9uLnVwZGF0ZUVmZmVjdCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5hZGRFZmZlY3QodGhpcy5fY2hyb21hdGljQWJlcnJhdGlvbkVmZmVjdCk7CisgICAg
ICAgICAgICB0aGlzLl9zZXRBdXRvQ2xlYXJBbmRUZXh0dXJlU2hhcmluZyh0aGlzLmNocm9tYXRp
Y0FiZXJyYXRpb24pOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLmZ4YWFFbmFibGVkKSB7
CisgICAgICAgICAgICB0aGlzLmZ4YWEgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfZnhhYVBvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJGeGFhUG9zdFByb2Nlc3MiXSgiZnhh
YSIsIDEuMCwgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIGVuZ2luZSwg
ZmFsc2UsIHRoaXMuX2RlZmF1bHRQaXBlbGluZVRleHR1cmVUeXBlKTsKKyAgICAgICAgICAgIHRo
aXMuYWRkRWZmZWN0KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vz
c1JlbmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siUG9zdFByb2Nlc3NS
ZW5kZXJFZmZlY3QiXShlbmdpbmUsIHRoaXMuRnhhYVBvc3RQcm9jZXNzSWQsIGZ1bmN0aW9uICgp
IHsgcmV0dXJuIF90aGlzLmZ4YWE7IH0sIHRydWUpKTsKKyAgICAgICAgICAgIHRoaXMuX3NldEF1
dG9DbGVhckFuZFRleHR1cmVTaGFyaW5nKHRoaXMuZnhhYSwgdHJ1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuX2NhbWVyYXMgIT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuX3Nj
ZW5lLnBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyLmF0dGFjaENhbWVyYXNUb1JlbmRl
clBpcGVsaW5lKHRoaXMuX25hbWUsIHRoaXMuX2NhbWVyYXMpOworICAgICAgICB9CisgICAgICAg
IC8vIEluIG11bHRpY2FtZXJhIG1vZGUsIHRoZSBzY2VuZSBuZWVkcyB0byBhdXRvY2xlYXIgaW4g
YmV0d2VlbiBjYW1lcmFzLgorICAgICAgICBpZiAodGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhcyAm
JiB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmFzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIHRo
aXMuX3NjZW5lLmF1dG9DbGVhciA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlz
Ll9lbmFibGVNU0FBT25GaXJzdFBvc3RQcm9jZXNzKHRoaXMuc2FtcGxlcykgJiYgdGhpcy5zYW1w
bGVzID4gMSkgeworICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIkxvZ2dlciJdLldhcm4oIk1TQUEgZmFpbGVkIHRvIGVuYWJsZSwgTVNBQSBpcyBv
bmx5IHN1cHBvcnRlZCBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wgPj0gMi4wIik7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUu
X2Rpc3Bvc2VQb3N0UHJvY2Vzc2VzID0gZnVuY3Rpb24gKGRpc3Bvc2VOb25SZWNyZWF0ZWQpIHsK
KyAgICAgICAgaWYgKGRpc3Bvc2VOb25SZWNyZWF0ZWQgPT09IHZvaWQgMCkgeyBkaXNwb3NlTm9u
UmVjcmVhdGVkID0gZmFsc2U7IH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9j
YW1lcmFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fY2Ft
ZXJhc1tpXTsKKyAgICAgICAgICAgIGlmICh0aGlzLmltYWdlUHJvY2Vzc2luZykgeworICAgICAg
ICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLmZ4YWEpIHsKKyAgICAgICAgICAgICAgICB0aGlz
LmZ4YWEuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVGhl
c2UgYXJlIGNyZWF0ZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGFuZCBzaG91bGQgbm90IGJlIGRpc3Bv
c2VkIG9uIGV2ZXJ5IHBpcGVsaW5lIGNoYW5nZQorICAgICAgICAgICAgaWYgKGRpc3Bvc2VOb25S
ZWNyZWF0ZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFycGVuKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2hhcnBlbi5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlcHRoT2ZGaWVsZCkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9zY2VuZS5vbkFmdGVyUmVuZGVyVGFyZ2V0c1JlbmRlck9ic2VydmFi
bGUucmVtb3ZlKHRoaXMuX2RlcHRoT2ZGaWVsZFNjZW5lT2JzZXJ2ZXIpOworICAgICAgICAgICAg
ICAgICAgICB0aGlzLmRlcHRoT2ZGaWVsZC5kaXNwb3NlRWZmZWN0cyhjYW1lcmEpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5ibG9vbSkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLmJsb29tLmRpc3Bvc2VFZmZlY3RzKGNhbWVyYSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLmNocm9tYXRpY0FiZXJyYXRpb24pIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5jaHJvbWF0aWNBYmVycmF0aW9uLmRpc3Bvc2UoY2Ft
ZXJhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JhaW4p
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFpbi5kaXNwb3NlKGNhbWVyYSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aGlzLl9nbG93TGF5ZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fZ2xvd0xheWVyLmRpc3Bvc2UoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5pbWFnZVByb2Nl
c3NpbmcgPSBudWxsOworICAgICAgICB0aGlzLmZ4YWEgPSBudWxsOworICAgICAgICBpZiAoZGlz
cG9zZU5vblJlY3JlYXRlZCkgeworICAgICAgICAgICAgdGhpcy5zaGFycGVuID0gbnVsbDsKKyAg
ICAgICAgICAgIHRoaXMuX3NoYXJwZW5FZmZlY3QgPSBudWxsOworICAgICAgICAgICAgdGhpcy5k
ZXB0aE9mRmllbGQgPSBudWxsOworICAgICAgICAgICAgdGhpcy5ibG9vbSA9IG51bGw7CisgICAg
ICAgICAgICB0aGlzLmNocm9tYXRpY0FiZXJyYXRpb24gPSBudWxsOworICAgICAgICAgICAgdGhp
cy5fY2hyb21hdGljQWJlcnJhdGlvbkVmZmVjdCA9IG51bGw7CisgICAgICAgICAgICB0aGlzLmdy
YWluID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX2dyYWluRWZmZWN0ID0gbnVsbDsKKyAgICAg
ICAgICAgIHRoaXMuX2dsb3dMYXllciA9IG51bGw7CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIEFkZHMgYSBjYW1lcmEgdG8gdGhlIHBpcGVsaW5lCisgICAgICogQHBhcmFtIGNh
bWVyYSB0aGUgY2FtZXJhIHRvIGJlIGFkZGVkCisgICAgICovCisgICAgRGVmYXVsdFJlbmRlcmlu
Z1BpcGVsaW5lLnByb3RvdHlwZS5hZGRDYW1lcmEgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAg
ICAgIHRoaXMuX2NhbWVyYXNUb0JlQXR0YWNoZWQucHVzaChjYW1lcmEpOworICAgICAgICB0aGlz
Ll9idWlsZFBpcGVsaW5lKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGEgY2Ft
ZXJhIGZyb20gdGhlIHBpcGVsaW5lCisgICAgICogQHBhcmFtIGNhbWVyYSB0aGUgY2FtZXJhIHRv
IHJlbW92ZQorICAgICAqLworICAgIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUu
cmVtb3ZlQ2FtZXJhID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICB2YXIgaW5kZXggPSB0
aGlzLl9jYW1lcmFzVG9CZUF0dGFjaGVkLmluZGV4T2YoY2FtZXJhKTsKKyAgICAgICAgdGhpcy5f
Y2FtZXJhc1RvQmVBdHRhY2hlZC5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB0aGlzLl9idWls
ZFBpcGVsaW5lKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlIG9mIHRoZSBwaXBl
bGluZSBhbmQgc3RvcCBhbGwgcG9zdCBwcm9jZXNzZXMKKyAgICAgKi8KKyAgICBEZWZhdWx0UmVu
ZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX2Rpc3Bvc2VQb3N0UHJvY2Vzc2VzKHRydWUpOworICAgICAgICB0aGlzLl9zY2VuZS5w
b3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5kZXRhY2hDYW1lcmFzRnJvbVJlbmRlclBp
cGVsaW5lKHRoaXMuX25hbWUsIHRoaXMuX2NhbWVyYXMpOworICAgICAgICB0aGlzLl9zY2VuZS5h
dXRvQ2xlYXIgPSB0cnVlOworICAgICAgICBpZiAodGhpcy5fcmVzaXplT2JzZXJ2ZXIpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLm9uUmVzaXplT2JzZXJ2YWJsZS5yZW1v
dmUodGhpcy5fcmVzaXplT2JzZXJ2ZXIpOworICAgICAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2
ZXIgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5lLmltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24ub25VcGRhdGVQYXJhbWV0ZXJzLnJlbW92ZSh0aGlzLl9pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uT2JzZXJ2ZXIpOworICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRp
c3Bvc2UuY2FsbCh0aGlzKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZSB0aGUg
cmVuZGVyaW5nIHBpcGVsaW5lIChVc2VkIHdoZW4gZXhwb3J0aW5nKQorICAgICAqIEByZXR1cm5z
IHRoZSBzZXJpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIERlZmF1bHRSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2Vy
aWFsaXphdGlvbk9iamVjdCA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlNlcmlhbGl6ZSh0aGlzKTsKKyAgICAgICAg
c2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21UeXBlID0gIkRlZmF1bHRSZW5kZXJpbmdQaXBlbGlu
ZSI7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0OworICAgIH07CisgICAgLyoq
CisgICAgICogUGFyc2UgdGhlIHNlcmlhbGl6ZWQgcGlwZWxpbmUKKyAgICAgKiBAcGFyYW0gc291
cmNlIFNvdXJjZSBwaXBlbGluZS4KKyAgICAgKiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRvIGxv
YWQgdGhlIHBpcGVsaW5lIHRvLgorICAgICAqIEBwYXJhbSByb290VXJsIFRoZSBVUkwgb2YgdGhl
IHNlcmlhbGl6ZWQgcGlwZWxpbmUuCisgICAgICogQHJldHVybnMgQW4gaW5zdGFudGlhdGVkIHBp
cGVsaW5lIGZyb20gdGhlIHNlcmlhbGl6ZWQgb2JqZWN0LgorICAgICAqLworICAgIERlZmF1bHRS
ZW5kZXJpbmdQaXBlbGluZS5QYXJzZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHNjZW5lLCByb290VXJs
KSB7CisgICAgICAgIHJldHVybiBfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5QYXJzZShmdW5jdGlvbiAoKSB7IHJldHVy
biBuZXcgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lKHNvdXJjZS5fbmFtZSwgc291cmNlLl9uYW1l
Ll9oZHIsIHNjZW5lKTsgfSwgc291cmNlLCBzY2VuZSwgcm9vdFVybCk7CisgICAgfTsKKyAgICB0
c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAg
ICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJz
ZXJpYWxpemUiXSkoKQorICAgIF0sIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUs
ICJzaGFycGVuRW5hYmxlZCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRGVm
YXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImJsb29tS2VybmVsIiwgbnVsbCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90
eXBlLCAiX2Jsb29tV2VpZ2h0Iiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJfYmxvb21UaHJlc2hvbGQiLCB2
b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRGVmYXVsdFJlbmRlcmluZ1BpcGVs
aW5lLnByb3RvdHlwZSwgIl9oZHIiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImJsb29tV2VpZ2h0IiwgbnVs
bCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLCAiYmxvb21UaHJlc2hvbGQiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJibG9vbVNjYWxlIiwg
bnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBEZWZhdWx0UmVuZGVyaW5nUGlwZWxp
bmUucHJvdG90eXBlLCAiYmxvb21FbmFibGVkIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkK
KyAgICBdLCBEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiZGVwdGhPZkZpZWxk
RW5hYmxlZCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
Il9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRGVmYXVsdFJlbmRl
cmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImRlcHRoT2ZGaWVsZEJsdXJMZXZlbCIsIG51bGwpOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3Rv
dHlwZSwgImZ4YWFFbmFibGVkIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBE
ZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAic2FtcGxlcyIsIG51bGwpOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlw
ZSwgImltYWdlUHJvY2Vzc2luZ0VuYWJsZWQiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJnbG93TGF5ZXJFbmFi
bGVkIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19k
ZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBEZWZhdWx0UmVuZGVyaW5n
UGlwZWxpbmUucHJvdG90eXBlLCAiY2hyb21hdGljQWJlcnJhdGlvbkVuYWJsZWQiLCBudWxsKTsK
KyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWwor
ICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIERlZmF1bHRSZW5kZXJpbmdQaXBlbGluZS5wcm90
b3R5cGUsICJncmFpbkVuYWJsZWQiLCBudWxsKTsKKyAgICByZXR1cm4gRGVmYXVsdFJlbmRlcmlu
Z1BpcGVsaW5lOworfShfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJQb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lIl0pKTsKKworX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xNV9fWyJfVHlwZVN0b3JlIl0uUmVnaXN0ZXJlZFR5cGVzWyJCQUJZTE9OLkRlZmF1bHRS
ZW5kZXJpbmdQaXBlbGluZSJdID0gRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lOworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL1BpcGVsaW5lcy9p
bmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUv
UGlwZWxpbmVzL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBEZWZh
dWx0UmVuZGVyaW5nUGlwZWxpbmUsIExlbnNSZW5kZXJpbmdQaXBlbGluZSwgU1NBTzJSZW5kZXJp
bmdQaXBlbGluZSwgU1NBT1JlbmRlcmluZ1BpcGVsaW5lLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVs
aW5lICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVmYXVs
dFJlbmRlcmluZ1BpcGVsaW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL2RlZmF1bHRSZW5kZXJpbmdQaXBlbGluZSAqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL1JlbmRlclBpcGVsaW5lL1BpcGVsaW5lcy9kZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUu
dHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfZGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkRlZmF1bHRSZW5kZXJpbmdQaXBlbGluZSJdOyB9KTsKKworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9sZW5zUmVuZGVyaW5nUGlwZWxpbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbGVuc1JlbmRlcmluZ1BpcGVs
aW5lICovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvUGlwZWxpbmVzL2xlbnNSZW5k
ZXJpbmdQaXBlbGluZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zUmVuZGVyaW5nUGlwZWxp
bmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9sZW5zUmVuZGVyaW5nUGlwZWxpbmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siTGVuc1JlbmRlcmluZ1BpcGVsaW5lIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3NzYW8yUmVuZGVyaW5nUGlwZWxpbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3NhbzJSZW5kZXJp
bmdQaXBlbGluZSAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL1BpcGVsaW5lcy9z
c2FvMlJlbmRlcmluZ1BpcGVsaW5lLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNTQU8yUmVuZGVy
aW5nUGlwZWxpbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9zc2FvMlJlbmRlcmluZ1BpcGVsaW5l
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNTQU8yUmVuZGVyaW5nUGlwZWxpbmUiXTsg
fSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3Nhb1JlbmRlcmluZ1BpcGVsaW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Nz
YW9SZW5kZXJpbmdQaXBlbGluZSAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL1Bp
cGVsaW5lcy9zc2FvUmVuZGVyaW5nUGlwZWxpbmUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU1NB
T1JlbmRlcmluZ1BpcGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3Nhb1JlbmRlcmluZ1Bp
cGVsaW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlNTQU9SZW5kZXJpbmdQaXBlbGlu
ZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdGFuZGFyZFJlbmRlcmluZ1Bp
cGVsaW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL3N0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUgKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5k
ZXJQaXBlbGluZS9QaXBlbGluZXMvc3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS50cyIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfc3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lIl07IH0pOworCisKKworCisKKworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL1BpcGVsaW5l
cy9sZW5zUmVuZGVyaW5nUGlwZWxpbmUudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9QaXBlbGluZXMvbGVuc1JlbmRlcmlu
Z1BpcGVsaW5lLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogTGVuc1JlbmRlcmluZ1BpcGVsaW5lICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkxlbnNSZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTGVu
c1JlbmRlcmluZ1BpcGVsaW5lOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNs
aWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGVyaWFs
cy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19keW5hbWljVGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vLi4vTWF0ZXJpYWxzL1RleHR1cmVzL2R5bmFtaWNUZXh0dXJlICovICIuL01hdGVy
aWFscy9UZXh0dXJlcy9keW5hbWljVGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQ
cm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi8uLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQcm9j
ZXNzUmVuZGVyUGlwZWxpbmUgKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0
UHJvY2Vzc1JlbmRlclBpcGVsaW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bv
c3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4u
L1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QgKi8g
Ii4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVs
aW5lX3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4u
L1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1h
bmFnZXJTY2VuZUNvbXBvbmVudCAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bv
c3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19jaHJvbWF0aWNBYmVycmF0aW9uX2ZyYWdtZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi8uLi9TaGFkZXJzL2Nocm9tYXRpY0FiZXJyYXRpb24uZnJhZ21lbnQgKi8gIi4vU2hhZGVy
cy9jaHJvbWF0aWNBYmVycmF0aW9uLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1NoYWRlcnNfbGVuc0hpZ2hsaWdodHNfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1NoYWRlcnMvbGVu
c0hpZ2hsaWdodHMuZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9sZW5zSGlnaGxpZ2h0cy5mcmFnbWVu
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2RlcHRoT2ZGaWVsZF9m
cmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vLi4vU2hhZGVycy9kZXB0aE9mRmllbGQuZnJhZ21lbnQgKi8gIi4vU2hhZGVy
cy9kZXB0aE9mRmllbGQuZnJhZ21lbnQudHMiKTsKKworCisKKworCisKKworCisKKworLyoqCisg
KiBCQUJZTE9OLkpTIENocm9tYXRpYyBBYmVycmF0aW9uIEdMU0wgU2hhZGVyCisgKiBBdXRob3I6
IE9saXZpZXIgR3V5b3QKKyAqIFNlcGFyYXRlcyB2ZXJ5IHNsaWdodGx5IFIsIEcgYW5kIEIgY29s
b3JzIG9uIHRoZSBlZGdlcyBvZiB0aGUgc2NyZWVuCisgKiBJbnNwaXJlZCBieSBGcmFuY29pcyBU
YXJsaWVyICYgTWFydGlucyBVcGl0aXMKKyAqLwordmFyIExlbnNSZW5kZXJpbmdQaXBlbGluZSA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShMZW5zUmVuZGVyaW5nUGlwZWxpbmUsIF9z
dXBlcik7CisgICAgLyoqCisgICAgICogQGNvbnN0cnVjdG9yCisgICAgICoKKyAgICAgKiBFZmZl
Y3QgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93OgorICAgICAqIHsKKyAgICAgKiAgICAgIGNocm9t
YXRpY19hYmVycmF0aW9uOiBudW1iZXI7ICAgICAgIC8vIGZyb20gMCB0byB4ICgxIGZvciByZWFs
aXNtKQorICAgICAqICAgICAgZWRnZV9ibHVyOiBudW1iZXI7ICAgICAgICAgICAgICAgICAgLy8g
ZnJvbSAwIHRvIHggKDEgZm9yIHJlYWxpc20pCisgICAgICogICAgICBkaXN0b3J0aW9uOiBudW1i
ZXI7ICAgICAgICAgICAgICAgICAvLyBmcm9tIDAgdG8geCAoMSBmb3IgcmVhbGlzbSkKKyAgICAg
KiAgICAgIGdyYWluX2Ftb3VudDogbnVtYmVyOyAgICAgICAgICAgICAgIC8vIGZyb20gMCB0byAx
CisgICAgICogICAgICBncmFpbl90ZXh0dXJlOiBCQUJZTE9OLlRleHR1cmU7ICAgICAvLyB0ZXh0
dXJlIHRvIHVzZSBmb3IgZ3JhaW4gZWZmZWN0OyBpZiB1bnNldCwgdXNlIHJhbmRvbSBCJlcgbm9p
c2UKKyAgICAgKiAgICAgIGRvZl9mb2N1c19kaXN0YW5jZTogbnVtYmVyOyAgICAgICAgIC8vIGRl
cHRoLW9mLWZpZWxkOiBmb2N1cyBkaXN0YW5jZTsgdW5zZXQgdG8gZGlzYWJsZSAoZGlzYWJsZWQg
YnkgZGVmYXVsdCkKKyAgICAgKiAgICAgIGRvZl9hcGVydHVyZTogbnVtYmVyOyAgICAgICAgICAg
ICAgIC8vIGRlcHRoLW9mLWZpZWxkOiBmb2N1cyBibHVyIGJpYXMgKGRlZmF1bHQ6IDEpCisgICAg
ICogICAgICBkb2ZfZGFya2VuOiBudW1iZXI7ICAgICAgICAgICAgICAgICAvLyBkZXB0aC1vZi1m
aWVsZDogZGFya2VuIHRoYXQgd2hpY2ggaXMgb3V0IG9mIGZvY3VzIChmcm9tIDAgdG8gMSwgZGlz
YWJsZWQgYnkgZGVmYXVsdCkKKyAgICAgKiAgICAgIGRvZl9wZW50YWdvbjogYm9vbGVhbjsgICAg
ICAgICAgICAgIC8vIGRlcHRoLW9mLWZpZWxkOiBtYWtlcyBhIHBlbnRhZ29uLWxpa2UgImJva2Vo
IiBlZmZlY3QKKyAgICAgKiAgICAgIGRvZl9nYWluOiBudW1iZXI7ICAgICAgICAgICAgICAgICAg
IC8vIGRlcHRoLW9mLWZpZWxkOiBoaWdobGlnaHRzIGdhaW47IHVuc2V0IHRvIGRpc2FibGUgKGRp
c2FibGVkIGJ5IGRlZmF1bHQpCisgICAgICogICAgICBkb2ZfdGhyZXNob2xkOiBudW1iZXI7ICAg
ICAgICAgICAgICAvLyBkZXB0aC1vZi1maWVsZDogaGlnaGxpZ2h0cyB0aHJlc2hvbGQgKGRlZmF1
bHQ6IDEpCisgICAgICogICAgICBibHVyX25vaXNlOiBib29sZWFuOyAgICAgICAgICAgICAgICAv
LyBhZGQgYSBsaXR0bGUgYml0IG9mIG5vaXNlIHRvIHRoZSBibHVyIChkZWZhdWx0OiB0cnVlKQor
ICAgICAqIH0KKyAgICAgKiBOb3RlOiBpZiBhbiBlZmZlY3QgcGFyYW1ldGVyIGlzIHVuc2V0LCBl
ZmZlY3QgaXMgZGlzYWJsZWQKKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSByZW5kZXJp
bmcgcGlwZWxpbmUgbmFtZQorICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIC0gQW4gb2JqZWN0IGNv
bnRhaW5pbmcgYWxsIHBhcmFtZXRlcnMgKHNlZSBhYm92ZSkKKyAgICAgKiBAcGFyYW0gc2NlbmUg
VGhlIHNjZW5lIGxpbmtlZCB0byB0aGlzIHBpcGVsaW5lCisgICAgICogQHBhcmFtIHJhdGlvIFRo
ZSBzaXplIG9mIHRoZSBwb3N0cHJvY2Vzc2VzICgwLjUgbWVhbnMgdGhhdCB5b3VyIHBvc3Rwcm9j
ZXNzIHdpbGwgaGF2ZSBhIHdpZHRoID0gY2FudmFzLndpZHRoIDAuNSBhbmQgYSBoZWlnaHQgPSBj
YW52YXMuaGVpZ2h0IDAuNSkKKyAgICAgKiBAcGFyYW0gY2FtZXJhcyBUaGUgYXJyYXkgb2YgY2Ft
ZXJhcyB0aGF0IHRoZSByZW5kZXJpbmcgcGlwZWxpbmUgd2lsbCBiZSBhdHRhY2hlZCB0bworICAg
ICAqLworICAgIGZ1bmN0aW9uIExlbnNSZW5kZXJpbmdQaXBlbGluZShuYW1lLCBwYXJhbWV0ZXJz
LCBzY2VuZSwgcmF0aW8sIGNhbWVyYXMpIHsKKyAgICAgICAgaWYgKHJhdGlvID09PSB2b2lkIDAp
IHsgcmF0aW8gPSAxLjA7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywg
c2NlbmUuZ2V0RW5naW5lKCksIG5hbWUpIHx8IHRoaXM7CisgICAgICAgIC8vIExlbnMgZWZmZWN0
cyBjYW4gYmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgLy8gLSBjaHJvbWF0aWMgYWJlcnJh
dGlvbiAoc2xpZ2h0IHNoaWZ0IG9mIFJHQiBjb2xvcnMpCisgICAgICAgIC8vIC0gYmx1ciBvbiB0
aGUgZWRnZSBvZiB0aGUgbGVucworICAgICAgICAvLyAtIGxlbnMgZGlzdG9ydGlvbgorICAgICAg
ICAvLyAtIGRlcHRoLW9mLWZpZWxkIGJsdXIgJiBoaWdobGlnaHRzIGVuaGFuY2luZworICAgICAg
ICAvLyAtIGRlcHRoLW9mLWZpZWxkICdib2tlaCcgZWZmZWN0IChzaGFwZXMgYXBwZWFyaW5nIGlu
IGJsdXJyZWQgYXJlYXMpCisgICAgICAgIC8vIC0gZ3JhaW4gZWZmZWN0IChub2lzZSBvciBjdXN0
b20gdGV4dHVyZSkKKyAgICAgICAgLy8gVHdvIGFkZGl0aW9uYWwgdGV4dHVyZSBzYW1wbGVycyBh
cmUgbmVlZGVkOgorICAgICAgICAvLyAtIGRlcHRoIG1hcCAoZm9yIGRlcHRoLW9mLWZpZWxkKQor
ICAgICAgICAvLyAtIGdyYWluIHRleHR1cmUKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBpZ25v
cmUKKyAgICAgICAgICogVGhlIGNocm9tYXRpYyBhYmVycmF0aW9uIFBvc3RQcm9jZXNzIGlkIGlu
IHRoZSBwaXBlbGluZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuTGVuc0Nocm9tYXRpY0Fi
ZXJyYXRpb25FZmZlY3QgPSAiTGVuc0Nocm9tYXRpY0FiZXJyYXRpb25FZmZlY3QiOworICAgICAg
ICAvKioKKyAgICAgICAgICogQGlnbm9yZQorICAgICAgICAgKiBUaGUgaGlnaGxpZ2h0cyBlbmhh
bmNpbmcgUG9zdFByb2Nlc3MgaWQgaW4gdGhlIHBpcGVsaW5lCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5IaWdobGlnaHRzRW5oYW5jaW5nRWZmZWN0ID0gIkhpZ2hsaWdodHNFbmhhbmNpbmdF
ZmZlY3QiOworICAgICAgICAvKioKKyAgICAgICAgICogQGlnbm9yZQorICAgICAgICAqIFRoZSBk
ZXB0aC1vZi1maWVsZCBQb3N0UHJvY2VzcyBpZCBpbiB0aGUgcGlwZWxpbmUKKyAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMuTGVuc0RlcHRoT2ZGaWVsZEVmZmVjdCA9ICJMZW5zRGVwdGhPZkZpZWxk
RWZmZWN0IjsKKyAgICAgICAgX3RoaXMuX3BlbnRhZ29uQm9rZWhJc0VuYWJsZWQgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuX3NjZW5lID0gc2NlbmU7CisgICAgICAgIC8vIEZldGNoIHRleHR1cmUg
c2FtcGxlcnMKKyAgICAgICAgX3RoaXMuX2RlcHRoVGV4dHVyZSA9IHNjZW5lLmVuYWJsZURlcHRo
UmVuZGVyZXIoKS5nZXREZXB0aE1hcCgpOyAvLyBGb3JjZSBkZXB0aCByZW5kZXJlciAib24iCisg
ICAgICAgIGlmIChwYXJhbWV0ZXJzLmdyYWluX3RleHR1cmUpIHsKKyAgICAgICAgICAgIF90aGlz
Ll9ncmFpblRleHR1cmUgPSBwYXJhbWV0ZXJzLmdyYWluX3RleHR1cmU7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBfdGhpcy5fY3JlYXRlR3JhaW5UZXh0dXJlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gc2F2ZSBwYXJhbWV0ZXJzCisgICAgICAgIF90aGlzLl9lZGdl
Qmx1ciA9IHBhcmFtZXRlcnMuZWRnZV9ibHVyID8gcGFyYW1ldGVycy5lZGdlX2JsdXIgOiAwOwor
ICAgICAgICBfdGhpcy5fZ3JhaW5BbW91bnQgPSBwYXJhbWV0ZXJzLmdyYWluX2Ftb3VudCA/IHBh
cmFtZXRlcnMuZ3JhaW5fYW1vdW50IDogMDsKKyAgICAgICAgX3RoaXMuX2Nocm9tYXRpY0FiZXJy
YXRpb24gPSBwYXJhbWV0ZXJzLmNocm9tYXRpY19hYmVycmF0aW9uID8gcGFyYW1ldGVycy5jaHJv
bWF0aWNfYWJlcnJhdGlvbiA6IDA7CisgICAgICAgIF90aGlzLl9kaXN0b3J0aW9uID0gcGFyYW1l
dGVycy5kaXN0b3J0aW9uID8gcGFyYW1ldGVycy5kaXN0b3J0aW9uIDogMDsKKyAgICAgICAgX3Ro
aXMuX2hpZ2hsaWdodHNHYWluID0gcGFyYW1ldGVycy5kb2ZfZ2FpbiAhPT0gdW5kZWZpbmVkID8g
cGFyYW1ldGVycy5kb2ZfZ2FpbiA6IC0xOworICAgICAgICBfdGhpcy5faGlnaGxpZ2h0c1RocmVz
aG9sZCA9IHBhcmFtZXRlcnMuZG9mX3RocmVzaG9sZCA/IHBhcmFtZXRlcnMuZG9mX3RocmVzaG9s
ZCA6IDE7CisgICAgICAgIF90aGlzLl9kb2ZEaXN0YW5jZSA9IHBhcmFtZXRlcnMuZG9mX2ZvY3Vz
X2Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmRvZl9mb2N1c19kaXN0YW5jZSA6
IC0xOworICAgICAgICBfdGhpcy5fZG9mQXBlcnR1cmUgPSBwYXJhbWV0ZXJzLmRvZl9hcGVydHVy
ZSA/IHBhcmFtZXRlcnMuZG9mX2FwZXJ0dXJlIDogMTsKKyAgICAgICAgX3RoaXMuX2RvZkRhcmtl
biA9IHBhcmFtZXRlcnMuZG9mX2RhcmtlbiA/IHBhcmFtZXRlcnMuZG9mX2RhcmtlbiA6IDA7Cisg
ICAgICAgIF90aGlzLl9kb2ZQZW50YWdvbiA9IHBhcmFtZXRlcnMuZG9mX3BlbnRhZ29uICE9PSB1
bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmRvZl9wZW50YWdvbiA6IHRydWU7CisgICAgICAgIF90aGlz
Ll9ibHVyTm9pc2UgPSBwYXJhbWV0ZXJzLmJsdXJfbm9pc2UgIT09IHVuZGVmaW5lZCA/IHBhcmFt
ZXRlcnMuYmx1cl9ub2lzZSA6IHRydWU7CisgICAgICAgIC8vIENyZWF0ZSBlZmZlY3RzCisgICAg
ICAgIF90aGlzLl9jcmVhdGVDaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MocmF0aW8pOwor
ICAgICAgICBfdGhpcy5fY3JlYXRlSGlnaGxpZ2h0c1Bvc3RQcm9jZXNzKHJhdGlvKTsKKyAgICAg
ICAgX3RoaXMuX2NyZWF0ZURlcHRoT2ZGaWVsZFBvc3RQcm9jZXNzKHJhdGlvIC8gNCk7CisgICAg
ICAgIC8vIFNldCB1cCBwaXBlbGluZQorICAgICAgICBfdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0
UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0
RW5naW5lKCksIF90aGlzLkxlbnNDaHJvbWF0aWNBYmVycmF0aW9uRWZmZWN0LCBmdW5jdGlvbiAo
KSB7IHJldHVybiBfdGhpcy5fY2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzOyB9LCB0cnVl
KSk7CisgICAgICAgIF90aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlw
ZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgX3RoaXMuSGln
aGxpZ2h0c0VuaGFuY2luZ0VmZmVjdCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX2hpZ2hs
aWdodHNQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICBfdGhpcy5hZGRFZmZlY3QobmV3
IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2Nl
bmUuZ2V0RW5naW5lKCksIF90aGlzLkxlbnNEZXB0aE9mRmllbGRFZmZlY3QsIGZ1bmN0aW9uICgp
IHsgcmV0dXJuIF90aGlzLl9kZXB0aE9mRmllbGRQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAg
ICAgICBpZiAoX3RoaXMuX2hpZ2hsaWdodHNHYWluID09PSAtMSkgeworICAgICAgICAgICAgX3Ro
aXMuX2Rpc2FibGVFZmZlY3QoX3RoaXMuSGlnaGxpZ2h0c0VuaGFuY2luZ0VmZmVjdCwgbnVsbCk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gRmluaXNoCisgICAgICAgIHNjZW5lLnBvc3RQcm9jZXNz
UmVuZGVyUGlwZWxpbmVNYW5hZ2VyLmFkZFBpcGVsaW5lKF90aGlzKTsKKyAgICAgICAgaWYgKGNh
bWVyYXMpIHsKKyAgICAgICAgICAgIHNjZW5lLnBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5h
Z2VyLmF0dGFjaENhbWVyYXNUb1JlbmRlclBpcGVsaW5lKG5hbWUsIGNhbWVyYXMpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0IHRo
ZSBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgIkxlbnNSZW5kZXJpbmdQaXBlbGluZSIKKyAg
ICAgKi8KKyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmdldENsYXNzTmFtZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJMZW5zUmVuZGVyaW5nUGlwZWxpbmUiOwor
ICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlbnNSZW5kZXJpbmdQaXBlbGluZS5w
cm90b3R5cGUsICJzY2VuZSIsIHsKKyAgICAgICAgLy8gUHJvcGVydGllcworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBhc3NvY2lhdGVkIHNjZW5lCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2VuZTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlbnNSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUsICJlZGdlQmx1ciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgb3Igc2V0cyB0aGUgZWRnZSBibHVyCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9lZGdlQmx1cjsKKyAgICAgICAgfSwK
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0RWRn
ZUJsdXIodmFsdWUpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoTGVuc1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImdyYWluQW1vdW50IiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBncmFpbiBhbW91bnQKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2dyYWluQW1vdW50OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdGhpcy5zZXRHcmFpbkFtb3VudCh2YWx1ZSk7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZW5zUmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLCAiY2hyb21hdGljQWJlcnJhdGlvbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEdldHMgb3Igc2V0cyB0aGUgY2hyb21hdGljIGFiZXJyYXRpb24gYW1vdW50CisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9jaHJvbWF0aWNBYmVycmF0aW9uOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5zZXRDaHJvbWF0aWNBYmVycmF0aW9uKHZhbHVl
KTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlbnNSZW5k
ZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJkb2ZBcGVydHVyZSIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgb3Igc2V0cyB0aGUgZGVwdGggb2YgZmllbGQgYXBlcnR1cmUKKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2RvZkFwZXJ0dXJlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgdGhpcy5zZXRBcGVydHVyZSh2YWx1ZSk7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJv
dG90eXBlLCAiZWRnZURpc3RvcnRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRz
IG9yIHNldHMgdGhlIGVkZ2UgZGlzdG9ydGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzdG9ydGlvbjsKKyAgICAg
ICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMu
c2V0RWRnZURpc3RvcnRpb24odmFsdWUpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoTGVuc1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImRvZkRpc3Rv
cnRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGRlcHRo
IG9mIGZpZWxkIGRpc3RvcnRpb24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RvZkRpc3RhbmNlOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5zZXRGb2N1
c0Rpc3RhbmNlKHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJkYXJrZW5PdXRPZkZvY3Vz
IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBkYXJrZW4gb3V0
IG9mIGZvY3VzIGFtb3VudAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZG9mRGFya2VuOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5zZXREYXJrZW5PdXRP
ZkZvY3VzKHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJibHVyTm9pc2UiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYg
Ymx1ciBub2lzZSBpcyBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9ibHVyTm9pc2U7CisgICAgICAgIH0sCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9ibHVyTm9p
c2UgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJwZW50YWdvbkJva2VoIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlm
IHBlbnRhZ29uIGJva2VoIGlzIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BlbnRhZ29uQm9rZWhJc0VuYWJs
ZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVBlbnRhZ29uQm9r
ZWgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHRoaXMuZGlzYWJsZVBlbnRhZ29uQm9rZWgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlbnNSZW5kZXJpbmdQaXBlbGluZS5w
cm90b3R5cGUsICJoaWdobGlnaHRzR2FpbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgb3Igc2V0cyB0aGUgaGlnaGxpZ2h0IGdyYWluIGFtb3VudAorICAgICAgICAgKi8KKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0
c0dhaW47CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICB0aGlzLnNldEhpZ2hsaWdodHNHYWluKHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5
cGUsICJoaWdobGlnaHRzVGhyZXNob2xkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyBvciBzZXRzIHRoZSBoaWdobGlnaHQgdGhyZXNob2xkCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHRzVGhy
ZXNob2xkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgdGhpcy5zZXRIaWdobGlnaHRzVGhyZXNob2xkKHZhbHVlKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLy8gcHVibGljIG1ldGhvZHMgKHNlbGYgZXhwbGFuYXRvcnkpCisgICAgLyoq
CisgICAgICogU2V0cyB0aGUgYW1vdW50IG9mIGJsdXIgYXQgdGhlIGVkZ2VzCisgICAgICogQHBh
cmFtIGFtb3VudCBibHVyIGFtb3VudAorICAgICAqLworICAgIExlbnNSZW5kZXJpbmdQaXBlbGlu
ZS5wcm90b3R5cGUuc2V0RWRnZUJsdXIgPSBmdW5jdGlvbiAoYW1vdW50KSB7IHRoaXMuX2VkZ2VC
bHVyID0gYW1vdW50OyB9OworICAgIC8qKgorICAgICAqIFNldHMgZWRnZSBibHVyIHRvIDAKKyAg
ICAgKi8KKyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc2FibGVFZGdlQmx1
ciA9IGZ1bmN0aW9uICgpIHsgdGhpcy5fZWRnZUJsdXIgPSAwOyB9OworICAgIC8qKgorICAgICAq
IFNldHMgdGhlIGFtb3V0IG9mIGdyYWluCisgICAgICogQHBhcmFtIGFtb3VudCBBbW91bnQgb2Yg
Z3JhaW4KKyAgICAgKi8KKyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLnNldEdy
YWluQW1vdW50ID0gZnVuY3Rpb24gKGFtb3VudCkgeyB0aGlzLl9ncmFpbkFtb3VudCA9IGFtb3Vu
dDsgfTsKKyAgICAvKioKKyAgICAgKiBTZXQgZ3JhaW4gYW1vdW50IHRvIDAKKyAgICAgKi8KKyAg
ICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc2FibGVHcmFpbiA9IGZ1bmN0aW9u
ICgpIHsgdGhpcy5fZ3JhaW5BbW91bnQgPSAwOyB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhl
IGNocm9tYXRpYyBhYmVycmF0aW9uIGFtb3VudAorICAgICAqIEBwYXJhbSBhbW91bnQgYW1vdW50
IG9mIGNocm9tYXRpYyBhYmVycmF0aW9uCisgICAgICovCisgICAgTGVuc1JlbmRlcmluZ1BpcGVs
aW5lLnByb3RvdHlwZS5zZXRDaHJvbWF0aWNBYmVycmF0aW9uID0gZnVuY3Rpb24gKGFtb3VudCkg
eyB0aGlzLl9jaHJvbWF0aWNBYmVycmF0aW9uID0gYW1vdW50OyB9OworICAgIC8qKgorICAgICAq
IFNldHMgY2hyb21hdGljIGFiZXJyYXRpb24gYW1vdW50IHRvIDAKKyAgICAgKi8KKyAgICBMZW5z
UmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc2FibGVDaHJvbWF0aWNBYmVycmF0aW9uID0g
ZnVuY3Rpb24gKCkgeyB0aGlzLl9jaHJvbWF0aWNBYmVycmF0aW9uID0gMDsgfTsKKyAgICAvKioK
KyAgICAgKiBTZXRzIHRoZSBFZGdlRGlzdG9ydGlvbiBhbW91bnQKKyAgICAgKiBAcGFyYW0gYW1v
dW50IGFtb3VudCBvZiBFZGdlRGlzdG9ydGlvbgorICAgICAqLworICAgIExlbnNSZW5kZXJpbmdQ
aXBlbGluZS5wcm90b3R5cGUuc2V0RWRnZURpc3RvcnRpb24gPSBmdW5jdGlvbiAoYW1vdW50KSB7
IHRoaXMuX2Rpc3RvcnRpb24gPSBhbW91bnQ7IH07CisgICAgLyoqCisgICAgICogU2V0cyBlZGdl
IGRpc3RvcnRpb24gdG8gMAorICAgICAqLworICAgIExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90
b3R5cGUuZGlzYWJsZUVkZ2VEaXN0b3J0aW9uID0gZnVuY3Rpb24gKCkgeyB0aGlzLl9kaXN0b3J0
aW9uID0gMDsgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBGb2N1c0Rpc3RhbmNlIGFtb3Vu
dAorICAgICAqIEBwYXJhbSBhbW91bnQgYW1vdW50IG9mIEZvY3VzRGlzdGFuY2UKKyAgICAgKi8K
KyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLnNldEZvY3VzRGlzdGFuY2UgPSBm
dW5jdGlvbiAoYW1vdW50KSB7IHRoaXMuX2RvZkRpc3RhbmNlID0gYW1vdW50OyB9OworICAgIC8q
KgorICAgICogRGlzYWJsZXMgZGVwdGggb2YgZmllbGQKKyAgICAqLworICAgIExlbnNSZW5kZXJp
bmdQaXBlbGluZS5wcm90b3R5cGUuZGlzYWJsZURlcHRoT2ZGaWVsZCA9IGZ1bmN0aW9uICgpIHsg
dGhpcy5fZG9mRGlzdGFuY2UgPSAtMTsgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBBcGVy
dHVyZSBhbW91bnQKKyAgICAgKiBAcGFyYW0gYW1vdW50IGFtb3VudCBvZiBBcGVydHVyZQorICAg
ICAqLworICAgIExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuc2V0QXBlcnR1cmUgPSBm
dW5jdGlvbiAoYW1vdW50KSB7IHRoaXMuX2RvZkFwZXJ0dXJlID0gYW1vdW50OyB9OworICAgIC8q
KgorICAgICAqIFNldHMgdGhlIERhcmtlbk91dE9mRm9jdXMgYW1vdW50CisgICAgICogQHBhcmFt
IGFtb3VudCBhbW91bnQgb2YgRGFya2VuT3V0T2ZGb2N1cworICAgICAqLworICAgIExlbnNSZW5k
ZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuc2V0RGFya2VuT3V0T2ZGb2N1cyA9IGZ1bmN0aW9uIChh
bW91bnQpIHsgdGhpcy5fZG9mRGFya2VuID0gYW1vdW50OyB9OworICAgIC8qKgorICAgICAqIENy
ZWF0ZXMgYSBwZW50YWdvbiBib2tlaCBlZmZlY3QKKyAgICAgKi8KKyAgICBMZW5zUmVuZGVyaW5n
UGlwZWxpbmUucHJvdG90eXBlLmVuYWJsZVBlbnRhZ29uQm9rZWggPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRoaXMuX2hpZ2hsaWdodHNQb3N0UHJvY2Vzcy51cGRhdGVFZmZlY3QoIiNkZWZpbmUg
UEVOVEFHT05cbiIpOworICAgICAgICB0aGlzLl9wZW50YWdvbkJva2VoSXNFbmFibGVkID0gdHJ1
ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc2FibGVzIHRoZSBwZW50YWdvbiBib2tlaCBl
ZmZlY3QKKyAgICAgKi8KKyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc2Fi
bGVQZW50YWdvbkJva2VoID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9wZW50YWdvbkJv
a2VoSXNFbmFibGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodHNQb3N0UHJvY2Vz
cy51cGRhdGVFZmZlY3QoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEVuYWJsZXMgbm9pc2Ug
Ymx1cgorICAgICAqLworICAgIExlbnNSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuZW5hYmxl
Tm9pc2VCbHVyID0gZnVuY3Rpb24gKCkgeyB0aGlzLl9ibHVyTm9pc2UgPSB0cnVlOyB9OworICAg
IC8qKgorICAgICAqIERpc2FibGVzIG5vaXNlIGJsdXIKKyAgICAgKi8KKyAgICBMZW5zUmVuZGVy
aW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc2FibGVOb2lzZUJsdXIgPSBmdW5jdGlvbiAoKSB7IHRo
aXMuX2JsdXJOb2lzZSA9IGZhbHNlOyB9OworICAgIC8qKgorICAgICAqIFNldHMgdGhlIEhpZ2hs
aWdodHNHYWluIGFtb3VudAorICAgICAqIEBwYXJhbSBhbW91bnQgYW1vdW50IG9mIEhpZ2hsaWdo
dHNHYWluCisgICAgICovCisgICAgTGVuc1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5zZXRI
aWdobGlnaHRzR2FpbiA9IGZ1bmN0aW9uIChhbW91bnQpIHsKKyAgICAgICAgdGhpcy5faGlnaGxp
Z2h0c0dhaW4gPSBhbW91bnQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBIaWdo
bGlnaHRzVGhyZXNob2xkIGFtb3VudAorICAgICAqIEBwYXJhbSBhbW91bnQgYW1vdW50IG9mIEhp
Z2hsaWdodHNUaHJlc2hvbGQKKyAgICAgKi8KKyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJv
dG90eXBlLnNldEhpZ2hsaWdodHNUaHJlc2hvbGQgPSBmdW5jdGlvbiAoYW1vdW50KSB7CisgICAg
ICAgIGlmICh0aGlzLl9oaWdobGlnaHRzR2FpbiA9PT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMu
X2hpZ2hsaWdodHNHYWluID0gMS4wOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2hpZ2hsaWdo
dHNUaHJlc2hvbGQgPSBhbW91bnQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBEaXNhYmxlcyBo
aWdobGlnaHRzCisgICAgICovCisgICAgTGVuc1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5k
aXNhYmxlSGlnaGxpZ2h0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0
c0dhaW4gPSAtMTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGhlIGludGVybmFs
IHBpcGVsaW5lIGFzc2V0cyBhbmQgZGV0YWNoZXMgdGhlIHBpcGVsaW5lIGZyb20gdGhlIHNjZW5l
IGNhbWVyYXMKKyAgICAgKiBAcGFyYW0gZGlzYWJsZURlcHRoUmVuZGVyIElmIHRoZSBzY2VucyBk
ZXB0aCByZW5kZXJpbmcgc2hvdWxkIGJlIGRpc2FibGVkIChkZWZhdWx0OiBmYWxzZSkKKyAgICAg
Ki8KKyAgICBMZW5zUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlv
biAoZGlzYWJsZURlcHRoUmVuZGVyKSB7CisgICAgICAgIGlmIChkaXNhYmxlRGVwdGhSZW5kZXIg
PT09IHZvaWQgMCkgeyBkaXNhYmxlRGVwdGhSZW5kZXIgPSBmYWxzZTsgfQorICAgICAgICB0aGlz
Ll9zY2VuZS5wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5kZXRhY2hDYW1lcmFzRnJv
bVJlbmRlclBpcGVsaW5lKHRoaXMuX25hbWUsIHRoaXMuX3NjZW5lLmNhbWVyYXMpOworICAgICAg
ICB0aGlzLl9jaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICB0
aGlzLl9oaWdobGlnaHRzUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICB0aGlzLl9kZXB0aE9m
RmllbGRQb3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIHRoaXMuX2dyYWluVGV4dHVyZS5kaXNw
b3NlKCk7CisgICAgICAgIGlmIChkaXNhYmxlRGVwdGhSZW5kZXIpIHsKKyAgICAgICAgICAgIHRo
aXMuX3NjZW5lLmRpc2FibGVEZXB0aFJlbmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9OworICAg
IC8vIGNvbG9ycyBzaGlmdGluZyBhbmQgZGlzdG9ydGlvbgorICAgIExlbnNSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUuX2NyZWF0ZUNocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2VzcyA9IGZ1
bmN0aW9uIChyYXRpbykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlz
Ll9jaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9z
dFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9zdFByb2Nlc3MiXSgiTGVu
c0Nocm9tYXRpY0FiZXJyYXRpb24iLCAiY2hyb21hdGljQWJlcnJhdGlvbiIsIFsiY2hyb21hdGlj
X2FiZXJyYXRpb24iLCAic2NyZWVuX3dpZHRoIiwgInNjcmVlbl9oZWlnaHQiLCAiZGlyZWN0aW9u
IiwgInJhZGlhbEludGVuc2l0eSIsICJjZW50ZXJQb3NpdGlvbiJdLCAvLyB1bmlmb3JtcworICAg
ICAgICBbXSwgLy8gc2FtcGxlcnMKKyAgICAgICAgcmF0aW8sIG51bGwsIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0uVFJJ
TElORUFSX1NBTVBMSU5HTU9ERSwgdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCksIGZhbHNlKTsKKyAg
ICAgICAgdGhpcy5fY2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzLm9uQXBwbHkgPSBmdW5j
dGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoJ2Nocm9tYXRpY19h
YmVycmF0aW9uJywgX3RoaXMuX2Nocm9tYXRpY0FiZXJyYXRpb24pOworICAgICAgICAgICAgZWZm
ZWN0LnNldEZsb2F0KCdzY3JlZW5fd2lkdGgnLCBfdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZ2V0
UmVuZGVyV2lkdGgoKSk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoJ3NjcmVlbl9oZWln
aHQnLCBfdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZ2V0UmVuZGVySGVpZ2h0KCkpOworICAgICAg
ICAgICAgZWZmZWN0LnNldEZsb2F0KCdyYWRpYWxJbnRlbnNpdHknLCAxKTsKKyAgICAgICAgICAg
IGVmZmVjdC5zZXRGbG9hdDIoJ2RpcmVjdGlvbicsIDE3LCAxNyk7CisgICAgICAgICAgICBlZmZl
Y3Quc2V0RmxvYXQyKCdjZW50ZXJQb3NpdGlvbicsIDAuNSwgMC41KTsKKyAgICAgICAgfTsKKyAg
ICB9OworICAgIC8vIGhpZ2hsaWdodHMgZW5oYW5jaW5nCisgICAgTGVuc1JlbmRlcmluZ1BpcGVs
aW5lLnByb3RvdHlwZS5fY3JlYXRlSGlnaGxpZ2h0c1Bvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHJh
dGlvKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdo
dHNQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJQb3N0UHJvY2VzcyJdKCJMZW5zSGlnaGxpZ2h0cyIsICJsZW5z
SGlnaGxpZ2h0cyIsIFsiZ2FpbiIsICJ0aHJlc2hvbGQiLCAic2NyZWVuX3dpZHRoIiwgInNjcmVl
bl9oZWlnaHQiXSwgLy8gdW5pZm9ybXMKKyAgICAgICAgW10sIC8vIHNhbXBsZXJzCisgICAgICAg
IHJhdGlvLCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVGV4dHVyZSJdLlRSSUxJTkVBUl9TQU1QTElOR01PREUsIHRoaXMuX3Nj
ZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgdGhpcy5fZG9mUGVudGFnb24gPyAiI2RlZmluZSBQRU5U
QUdPTlxuIiA6ICIiKTsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0c1Bvc3RQcm9jZXNzLm9uQXBw
bHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoJ2dh
aW4nLCBfdGhpcy5faGlnaGxpZ2h0c0dhaW4pOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0
KCd0aHJlc2hvbGQnLCBfdGhpcy5faGlnaGxpZ2h0c1RocmVzaG9sZCk7CisgICAgICAgICAgICBl
ZmZlY3Quc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2VzcygidGV4dHVyZVNhbXBsZXIiLCBfdGhpcy5f
Y2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRG
bG9hdCgnc2NyZWVuX3dpZHRoJywgX3RoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldFJlbmRlcldp
ZHRoKCkpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdzY3JlZW5faGVpZ2h0JywgX3Ro
aXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldFJlbmRlckhlaWdodCgpKTsKKyAgICAgICAgfTsKKyAg
ICB9OworICAgIC8vIGNvbG9ycyBzaGlmdGluZyBhbmQgZGlzdG9ydGlvbgorICAgIExlbnNSZW5k
ZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2NyZWF0ZURlcHRoT2ZGaWVsZFBvc3RQcm9jZXNzID0g
ZnVuY3Rpb24gKHJhdGlvKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRo
aXMuX2RlcHRoT2ZGaWVsZFBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlBvc3RQcm9jZXNzIl0oIkxlbnNEZXB0
aE9mRmllbGQiLCAiZGVwdGhPZkZpZWxkIiwgWworICAgICAgICAgICAgImdyYWluX2Ftb3VudCIs
ICJibHVyX25vaXNlIiwgInNjcmVlbl93aWR0aCIsICJzY3JlZW5faGVpZ2h0IiwgImRpc3RvcnRp
b24iLCAiZG9mX2VuYWJsZWQiLAorICAgICAgICAgICAgInNjcmVlbl9kaXN0YW5jZSIsICJhcGVy
dHVyZSIsICJkYXJrZW4iLCAiZWRnZV9ibHVyIiwgImhpZ2hsaWdodHMiLCAibmVhciIsICJmYXIi
CisgICAgICAgIF0sIFsiZGVwdGhTYW1wbGVyIiwgImdyYWluU2FtcGxlciIsICJoaWdobGlnaHRz
U2FtcGxlciJdLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RF
LCB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UpOworICAgICAgICB0aGlzLl9kZXB0aE9m
RmllbGRQb3N0UHJvY2Vzcy5vbkFwcGx5ID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAg
ICAgZWZmZWN0LnNldFRleHR1cmUoImRlcHRoU2FtcGxlciIsIF90aGlzLl9kZXB0aFRleHR1cmUp
OworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoImdyYWluU2FtcGxlciIsIF90aGlzLl9n
cmFpblRleHR1cmUpOworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nl
c3MoInRleHR1cmVTYW1wbGVyIiwgX3RoaXMuX2hpZ2hsaWdodHNQb3N0UHJvY2Vzcyk7CisgICAg
ICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2VzcygiaGlnaGxpZ2h0c1NhbXBs
ZXIiLCBfdGhpcy5fZGVwdGhPZkZpZWxkUG9zdFByb2Nlc3MpOworICAgICAgICAgICAgZWZmZWN0
LnNldEZsb2F0KCdncmFpbl9hbW91bnQnLCBfdGhpcy5fZ3JhaW5BbW91bnQpOworICAgICAgICAg
ICAgZWZmZWN0LnNldEJvb2woJ2JsdXJfbm9pc2UnLCBfdGhpcy5fYmx1ck5vaXNlKTsKKyAgICAg
ICAgICAgIGVmZmVjdC5zZXRGbG9hdCgnc2NyZWVuX3dpZHRoJywgX3RoaXMuX3NjZW5lLmdldEVu
Z2luZSgpLmdldFJlbmRlcldpZHRoKCkpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdz
Y3JlZW5faGVpZ2h0JywgX3RoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldFJlbmRlckhlaWdodCgp
KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgnZGlzdG9ydGlvbicsIF90aGlzLl9kaXN0
b3J0aW9uKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRCb29sKCdkb2ZfZW5hYmxlZCcsIChfdGhp
cy5fZG9mRGlzdGFuY2UgIT09IC0xKSk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoJ3Nj
cmVlbl9kaXN0YW5jZScsIDEuMCAvICgwLjEgLSAxLjAgLyBfdGhpcy5fZG9mRGlzdGFuY2UpKTsK
KyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgnYXBlcnR1cmUnLCBfdGhpcy5fZG9mQXBlcnR1
cmUpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdkYXJrZW4nLCBfdGhpcy5fZG9mRGFy
a2VuKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgnZWRnZV9ibHVyJywgX3RoaXMuX2Vk
Z2VCbHVyKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRCb29sKCdoaWdobGlnaHRzJywgKF90aGlz
Ll9oaWdobGlnaHRzR2FpbiAhPT0gLTEpKTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fc2NlbmUu
YWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCduZWFyJywg
X3RoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYS5taW5aKTsKKyAgICAgICAgICAgICAgICBlZmZlY3Qu
c2V0RmxvYXQoJ2ZhcicsIF90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEubWF4Wik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisgICAgfTsKKyAgICAvLyBjcmVhdGVzIGEgYmxhY2sgYW5kIHdo
aXRlIHJhbmRvbSBub2lzZSB0ZXh0dXJlLCA1MTJ4NTEyCisgICAgTGVuc1JlbmRlcmluZ1BpcGVs
aW5lLnByb3RvdHlwZS5fY3JlYXRlR3JhaW5UZXh0dXJlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgc2l6ZSA9IDUxMjsKKyAgICAgICAgdGhpcy5fZ3JhaW5UZXh0dXJlID0gbmV3IF9NYXRl
cmlhbHNfVGV4dHVyZXNfZHluYW1pY1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siRHluYW1pY1RleHR1cmUiXSgiTGVuc05vaXNlVGV4dHVyZSIsIHNpemUsIHRoaXMuX3NjZW5l
LCBmYWxzZSwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUpOworICAgICAgICB0aGlz
Ll9ncmFpblRleHR1cmUud3JhcFUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVGV4dHVyZSJdLldSQVBfQUREUkVTU01PREU7CisgICAg
ICAgIHRoaXMuX2dyYWluVGV4dHVyZS53cmFwViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVy
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0uV1JBUF9BRERSRVNTTU9E
RTsKKyAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLl9ncmFpblRleHR1cmUuZ2V0Q29udGV4dCgp
OworICAgICAgICB2YXIgcmFuZCA9IGZ1bmN0aW9uIChtaW4sIG1heCkgeworICAgICAgICAgICAg
cmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjsKKyAgICAgICAgfTsKKyAg
ICAgICAgdmFyIHZhbHVlOworICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHNpemU7IHgrKykg
eworICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBzaXplOyB5KyspIHsKKyAgICAgICAg
ICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IocmFuZCgwLjQyLCAwLjU4KSAqIDI1NSk7CisgICAg
ICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAncmdiKCcgKyB2YWx1ZSArICcsICcgKyB2
YWx1ZSArICcsICcgKyB2YWx1ZSArICcpJzsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxS
ZWN0KHgsIHksIDEsIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMu
X2dyYWluVGV4dHVyZS51cGRhdGUoZmFsc2UpOworICAgIH07CisgICAgcmV0dXJuIExlbnNSZW5k
ZXJpbmdQaXBlbGluZTsKK30oX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nl
c3NSZW5kZXJQaXBlbGluZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJQb3N0UHJvY2Vz
c1JlbmRlclBpcGVsaW5lIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL1JlbmRlclBpcGVsaW5lL1BpcGVsaW5lcy9zc2FvMlJlbmRlcmluZ1BpcGVsaW5lLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2VzL1JlbmRl
clBpcGVsaW5lL1BpcGVsaW5lcy9zc2FvMlJlbmRlcmluZ1BpcGVsaW5lLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNTQU8yUmVuZGVyaW5nUGlw
ZWxpbmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU1NBTzJSZW5kZXJp
bmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1NBTzJSZW5kZXJpbmdQaXBlbGluZTsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVs
ZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nf
bG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9NaXNjL2xvZ2dlciAqLyAiLi9NaXNjL2xvZ2dlci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvZGVjb3JhdG9y
cyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21h
dGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0
dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRl
cmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRlcmlhbHNfVGV4dHVyZXNfZHluYW1pY1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGVyaWFscy9UZXh0dXJl
cy9keW5hbWljVGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvZHluYW1pY1RleHR1cmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vz
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bv
c3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNf
UmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vUG9zdFByb2Nl
c3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lICovICIuL1Bvc3RQ
cm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bv
c3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5l
L3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0ICovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxp
bmUvcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfUG9zdFByb2Nlc3Nlc19wYXNzUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQcm9jZXNzZXMvcGFz
c1Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcGFzc1Bvc3RQcm9jZXNzLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfdHlwZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWlzYy90eXBl
U3RvcmUgKi8gIi4vTWlzYy90eXBlU3RvcmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL0VuZ2luZXMvZW5naW5lU3RvcmUgKi8gIi4v
RW5naW5lcy9lbmdpbmVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0
UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2Vy
U2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi8uLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQ
cm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQgKi8gIi4vUG9zdFByb2Nl
c3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5l
Q29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfc3NhbzJf
ZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi8uLi8uLi9TaGFkZXJzL3NzYW8yLmZyYWdtZW50ICovICIuL1NoYWRlcnMvc3Nh
bzIuZnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19zc2Fv
Q29tYmluZV9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1NoYWRlcnMvc3Nhb0NvbWJpbmUuZnJhZ21lbnQgKi8g
Ii4vU2hhZGVycy9zc2FvQ29tYmluZS5mcmFnbWVudC50cyIpOworCisKKworCisKKworCisKKwor
CisKKworCisKKworLyoqCisgKiBSZW5kZXIgcGlwZWxpbmUgdG8gcHJvZHVjZSBzc2FvIGVmZmVj
dAorICovCit2YXIgU1NBTzJSZW5kZXJpbmdQaXBlbGluZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLCBfc3VwZXIpOworICAgIC8qKgorICAg
ICAqIEBjb25zdHJ1Y3RvcgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSByZW5kZXJpbmcgcGlwZWxp
bmUgbmFtZQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgbGlua2VkIHRvIHRoaXMgcGlw
ZWxpbmUKKyAgICAgKiBAcGFyYW0gcmF0aW8gVGhlIHNpemUgb2YgdGhlIHBvc3Rwcm9jZXNzZXMu
IENhbiBiZSBhIG51bWJlciBzaGFyZWQgYmV0d2VlbiBwYXNzZXMgb3IgYW4gb2JqZWN0IGZvciBt
b3JlIHByZWNpc2lvbjogeyBzc2FvUmF0aW86IDAuNSwgYmx1clJhdGlvOiAxLjAgfQorICAgICAq
IEBwYXJhbSBjYW1lcmFzIFRoZSBhcnJheSBvZiBjYW1lcmFzIHRoYXQgdGhlIHJlbmRlcmluZyBw
aXBlbGluZSB3aWxsIGJlIGF0dGFjaGVkIHRvCisgICAgICovCisgICAgZnVuY3Rpb24gU1NBTzJS
ZW5kZXJpbmdQaXBlbGluZShuYW1lLCBzY2VuZSwgcmF0aW8sIGNhbWVyYXMpIHsKKyAgICAgICAg
dmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NlbmUuZ2V0RW5naW5lKCksIG5hbWUpIHx8
IHRoaXM7CisgICAgICAgIC8vIE1lbWJlcnMKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBpZ25v
cmUKKyAgICAgICAgKiBUaGUgUGFzc1Bvc3RQcm9jZXNzIGlkIGluIHRoZSBwaXBlbGluZSB0aGF0
IGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBzY2VuZSBjb2xvcgorICAgICAgICAqLworICAgICAgICBf
dGhpcy5TU0FPT3JpZ2luYWxTY2VuZUNvbG9yRWZmZWN0ID0gIlNTQU9PcmlnaW5hbFNjZW5lQ29s
b3JFZmZlY3QiOworICAgICAgICAvKioKKyAgICAgICAgICogQGlnbm9yZQorICAgICAgICAqIFRo
ZSBTU0FPIFBvc3RQcm9jZXNzIGlkIGluIHRoZSBwaXBlbGluZQorICAgICAgICAqLworICAgICAg
ICBfdGhpcy5TU0FPUmVuZGVyRWZmZWN0ID0gIlNTQU9SZW5kZXJFZmZlY3QiOworICAgICAgICAv
KioKKyAgICAgICAgICogQGlnbm9yZQorICAgICAgICAqIFRoZSBob3Jpem9udGFsIGJsdXIgUG9z
dFByb2Nlc3MgaWQgaW4gdGhlIHBpcGVsaW5lCisgICAgICAgICovCisgICAgICAgIF90aGlzLlNT
QU9CbHVySFJlbmRlckVmZmVjdCA9ICJTU0FPQmx1ckhSZW5kZXJFZmZlY3QiOworICAgICAgICAv
KioKKyAgICAgICAgICogQGlnbm9yZQorICAgICAgICAqIFRoZSB2ZXJ0aWNhbCBibHVyIFBvc3RQ
cm9jZXNzIGlkIGluIHRoZSBwaXBlbGluZQorICAgICAgICAqLworICAgICAgICBfdGhpcy5TU0FP
Qmx1clZSZW5kZXJFZmZlY3QgPSAiU1NBT0JsdXJWUmVuZGVyRWZmZWN0IjsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgKiBUaGUgUG9zdFByb2Nlc3MgaWQgaW4gdGhl
IHBpcGVsaW5lIHRoYXQgY29tYmluZXMgdGhlIFNTQU8tQmx1ciBvdXRwdXQgd2l0aCB0aGUgb3Jp
Z2luYWwgc2NlbmUgY29sb3IgKFNTQU9PcmlnaW5hbFNjZW5lQ29sb3JFZmZlY3QpCisgICAgICAg
ICovCisgICAgICAgIF90aGlzLlNTQU9Db21iaW5lUmVuZGVyRWZmZWN0ID0gIlNTQU9Db21iaW5l
UmVuZGVyRWZmZWN0IjsKKyAgICAgICAgLyoqCisgICAgICAgICogVGhlIG91dHB1dCBzdHJlbmd0
aCBvZiB0aGUgU1NBTyBwb3N0LXByb2Nlc3MuIERlZmF1bHQgdmFsdWUgaXMgMS4wLgorICAgICAg
ICAqLworICAgICAgICBfdGhpcy50b3RhbFN0cmVuZ3RoID0gMS4wOworICAgICAgICAvKioKKyAg
ICAgICAgKiBNYXhpbXVtIGRlcHRoIHZhbHVlIHRvIHN0aWxsIHJlbmRlciBBTy4gQSBzbW9vdGgg
ZmFsbG9mZiBtYWtlcyB0aGUgZGltbWluZyBtb3JlIG5hdHVyYWwsIHNvIHRoZXJlIHdpbGwgYmUg
bm8gYWJydXB0IHNoYWRpbmcgY2hhbmdlLgorICAgICAgICAqLworICAgICAgICBfdGhpcy5tYXha
ID0gMTAwLjA7CisgICAgICAgIC8qKgorICAgICAgICAqIEluIG9yZGVyIHRvIHNhdmUgcGVyZm9y
bWFuY2VzLCBTU0FPIHJhZGl1cyBpcyBjbGFtcGVkIG9uIGNsb3NlIGdlb21ldHJ5LiBUaGlzIHJh
dGlvIGNoYW5nZXMgYnkgaG93IG11Y2gKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubWluWkFz
cGVjdCA9IDAuMjsKKyAgICAgICAgX3RoaXMuX3NhbXBsZXMgPSA4OworICAgICAgICBfdGhpcy5f
dGV4dHVyZVNhbXBsZXMgPSAxOworICAgICAgICBfdGhpcy5fZXhwZW5zaXZlQmx1ciA9IHRydWU7
CisgICAgICAgIC8qKgorICAgICAgICAqIFRoZSByYWRpdXMgYXJvdW5kIHRoZSBhbmFseXplZCBw
aXhlbCB1c2VkIGJ5IHRoZSBTU0FPIHBvc3QtcHJvY2Vzcy4gRGVmYXVsdCB2YWx1ZSBpcyAyLjAK
KyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucmFkaXVzID0gMi4wOworICAgICAgICAvKioKKyAg
ICAgICAgKiBUaGUgYmFzZSBjb2xvciBvZiB0aGUgU1NBTyBwb3N0LXByb2Nlc3MKKyAgICAgICAg
KiBUaGUgZmluYWwgcmVzdWx0IGlzICJiYXNlICsgc3NhbyIgYmV0d2VlbiBbMCwgMV0KKyAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMuYmFzZSA9IDA7CisgICAgICAgIF90aGlzLl9maXJzdFVwZGF0
ZSA9IHRydWU7CisgICAgICAgIF90aGlzLl9iaXRzID0gbmV3IFVpbnQzMkFycmF5KDEpOworICAg
ICAgICBfdGhpcy5fc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgX3RoaXMuX3JhdGlvID0gcmF0aW87
CisgICAgICAgIGlmICghX3RoaXMuaXNTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgIF9NaXNjX2xv
Z2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJMb2dnZXIiXS5FcnJvcigiU1NBTyAy
IG5lZWRzIFdlYkdMIDIgc3VwcG9ydC4iKTsKKyAgICAgICAgICAgIHJldHVybiBfdGhpczsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgc3Nhb1JhdGlvID0gX3RoaXMuX3JhdGlvLnNzYW9SYXRpbyB8
fCByYXRpbzsKKyAgICAgICAgdmFyIGJsdXJSYXRpbyA9IF90aGlzLl9yYXRpby5ibHVyUmF0aW8g
fHwgcmF0aW87CisgICAgICAgIC8vIFNldCB1cCBhc3NldHMKKyAgICAgICAgdmFyIGdlb21ldHJ5
QnVmZmVyUmVuZGVyZXIgPSBzY2VuZS5lbmFibGVHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyKCk7Cisg
ICAgICAgIF90aGlzLl9jcmVhdGVSYW5kb21UZXh0dXJlKCk7CisgICAgICAgIF90aGlzLl9kZXB0
aFRleHR1cmUgPSBnZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLmdldEdCdWZmZXIoKS50ZXh0dXJlc1sw
XTsKKyAgICAgICAgX3RoaXMuX25vcm1hbFRleHR1cmUgPSBnZW9tZXRyeUJ1ZmZlclJlbmRlcmVy
LmdldEdCdWZmZXIoKS50ZXh0dXJlc1sxXTsKKyAgICAgICAgX3RoaXMuX29yaWdpbmFsQ29sb3JQ
b3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wYXNzUG9zdFByb2Nlc3NfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzlfX1siUGFzc1Bvc3RQcm9jZXNzIl0oIlNTQU9PcmlnaW5hbFNjZW5l
Q29sb3IiLCAxLjAsIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2Vu
ZS5nZXRFbmdpbmUoKSwgZmFsc2UpOworICAgICAgICBfdGhpcy5fb3JpZ2luYWxDb2xvclBvc3RQ
cm9jZXNzLnNhbXBsZXMgPSBfdGhpcy50ZXh0dXJlU2FtcGxlczsKKyAgICAgICAgX3RoaXMuX2Ny
ZWF0ZVNTQU9Qb3N0UHJvY2VzcygxLjApOworICAgICAgICBfdGhpcy5fY3JlYXRlQmx1clBvc3RQ
cm9jZXNzKHNzYW9SYXRpbywgYmx1clJhdGlvKTsKKyAgICAgICAgX3RoaXMuX2NyZWF0ZVNTQU9D
b21iaW5lUG9zdFByb2Nlc3MoYmx1clJhdGlvKTsKKyAgICAgICAgLy8gU2V0IHVwIHBpcGVsaW5l
CisgICAgICAgIF90aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxp
bmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
UG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgX3RoaXMuU1NBT09y
aWdpbmFsU2NlbmVDb2xvckVmZmVjdCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX29yaWdp
bmFsQ29sb3JQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICBfdGhpcy5hZGRFZmZlY3Qo
bmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0o
c2NlbmUuZ2V0RW5naW5lKCksIF90aGlzLlNTQU9SZW5kZXJFZmZlY3QsIGZ1bmN0aW9uICgpIHsg
cmV0dXJuIF90aGlzLl9zc2FvUG9zdFByb2Nlc3M7IH0sIHRydWUpKTsKKyAgICAgICAgX3RoaXMu
YWRkRWZmZWN0KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1Jl
bmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQb3N0UHJvY2Vzc1JlbmRl
ckVmZmVjdCJdKHNjZW5lLmdldEVuZ2luZSgpLCBfdGhpcy5TU0FPQmx1ckhSZW5kZXJFZmZlY3Qs
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9ibHVySFBvc3RQcm9jZXNzOyB9LCB0cnVlKSk7
CisgICAgICAgIF90aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxp
bmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1si
UG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgX3RoaXMuU1NBT0Js
dXJWUmVuZGVyRWZmZWN0LCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fYmx1clZQb3N0UHJv
Y2VzczsgfSwgdHJ1ZSkpOworICAgICAgICBfdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vz
c2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV84X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5l
KCksIF90aGlzLlNTQU9Db21iaW5lUmVuZGVyRWZmZWN0LCBmdW5jdGlvbiAoKSB7IHJldHVybiBf
dGhpcy5fc3Nhb0NvbWJpbmVQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICAvLyBGaW5p
c2gKKyAgICAgICAgc2NlbmUucG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIuYWRkUGlw
ZWxpbmUoX3RoaXMpOworICAgICAgICBpZiAoY2FtZXJhcykgeworICAgICAgICAgICAgc2NlbmUu
cG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIuYXR0YWNoQ2FtZXJhc1RvUmVuZGVyUGlw
ZWxpbmUobmFtZSwgY2FtZXJhcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF90aGlzOwor
ICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5w
cm90b3R5cGUsICJzYW1wbGVzIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zYW1wbGVzOworICAgICAgICB9LAorICAgICAgICAvKioKKyAg
ICAgICAgKiBOdW1iZXIgb2Ygc2FtcGxlcyB1c2VkIGZvciB0aGUgU1NBTyBjYWxjdWxhdGlvbnMu
IERlZmF1bHQgdmFsdWUgaXMgOAorICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChu
KSB7CisgICAgICAgICAgICB0aGlzLl9zc2FvUG9zdFByb2Nlc3MudXBkYXRlRWZmZWN0KCIjZGVm
aW5lIFNBTVBMRVMgIiArIG4gKyAiXG4jZGVmaW5lIFNTQU8iKTsKKyAgICAgICAgICAgIHRoaXMu
X3NhbXBsZXMgPSBuOworICAgICAgICAgICAgdGhpcy5fc2FtcGxlU3BoZXJlID0gdGhpcy5fZ2Vu
ZXJhdGVIZW1pc3BoZXJlKCk7CisgICAgICAgICAgICB0aGlzLl9maXJzdFVwZGF0ZSA9IHRydWU7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTU0FPMlJlbmRl
cmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgInRleHR1cmVTYW1wbGVzIiwgeworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlU2FtcGxlczsK
KyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICogTnVtYmVyIG9mIHNhbXBsZXMgdG8g
dXNlIGZvciBhbnRpYWxpYXNpbmcKKyAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
bikgeworICAgICAgICAgICAgdGhpcy5fdGV4dHVyZVNhbXBsZXMgPSBuOworICAgICAgICAgICAg
dGhpcy5fb3JpZ2luYWxDb2xvclBvc3RQcm9jZXNzLnNhbXBsZXMgPSBuOworICAgICAgICAgICAg
dGhpcy5fYmx1ckhQb3N0UHJvY2Vzcy5zYW1wbGVzID0gbjsKKyAgICAgICAgICAgIHRoaXMuX2Js
dXJWUG9zdFByb2Nlc3Muc2FtcGxlcyA9IG47CisgICAgICAgICAgICB0aGlzLl9zc2FvUG9zdFBy
b2Nlc3Muc2FtcGxlcyA9IG47CisgICAgICAgICAgICB0aGlzLl9zc2FvQ29tYmluZVBvc3RQcm9j
ZXNzLnNhbXBsZXMgPSBuOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJleHBlbnNpdmVCbHVyIiwg
eworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9l
eHBlbnNpdmVCbHVyOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgKiBJZiBiaWxh
dGVyYWwgYmx1ciBzaG91bGQgYmUgdXNlZAorICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uIChiKSB7CisgICAgICAgICAgICB0aGlzLl9ibHVySFBvc3RQcm9jZXNzLnVwZGF0ZUVmZmVj
dCgiI2RlZmluZSBCSUxBVEVSQUxfQkxVUlxuI2RlZmluZSBCSUxBVEVSQUxfQkxVUl9IXG4jZGVm
aW5lIFNBTVBMRVMgMTZcbiNkZWZpbmUgRVhQRU5TSVZFICIgKyAoYiA/ICIxIiA6ICIwIikgKyAi
XG4iLCBudWxsLCBbInRleHR1cmVTYW1wbGVyIiwgImRlcHRoU2FtcGxlciJdKTsKKyAgICAgICAg
ICAgIHRoaXMuX2JsdXJWUG9zdFByb2Nlc3MudXBkYXRlRWZmZWN0KCIjZGVmaW5lIEJJTEFURVJB
TF9CTFVSXG4jZGVmaW5lIFNBTVBMRVMgMTZcbiNkZWZpbmUgRVhQRU5TSVZFICIgKyAoYiA/ICIx
IiA6ICIwIikgKyAiXG4iLCBudWxsLCBbInRleHR1cmVTYW1wbGVyIiwgImRlcHRoU2FtcGxlciJd
KTsKKyAgICAgICAgICAgIHRoaXMuX2V4cGVuc2l2ZUJsdXIgPSBiOworICAgICAgICAgICAgdGhp
cy5fZmlyc3RVcGRhdGUgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoU1NBTzJSZW5kZXJpbmdQaXBlbGluZSwgIklzU3VwcG9ydGVkIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgKiAgU3VwcG9ydCB0ZXN0LgorICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBlbmdpbmUgPSBfRW5naW5lc19lbmdp
bmVTdG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siRW5naW5lU3RvcmUiXS5MYXN0
Q3JlYXRlZEVuZ2luZTsKKyAgICAgICAgICAgIGlmICghZW5naW5lKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGVuZ2lu
ZS5nZXRDYXBzKCkuZHJhd0J1ZmZlcnNFeHRlbnNpb247CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwg
InNjZW5lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhY3RpdmUgc2NlbmUKKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3NjZW5lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvLyBQdWJsaWMgTWV0aG9kcwor
ICAgIC8qKgorICAgICAqIEdldCB0aGUgY2xhc3MgbmFtZQorICAgICAqIEByZXR1cm5zICJTU0FP
MlJlbmRlcmluZ1BpcGVsaW5lIgorICAgICAqLworICAgIFNTQU8yUmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJT
U0FPMlJlbmRlcmluZ1BpcGVsaW5lIjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMg
dGhlIGludGVybmFsIHBpcGVsaW5lIGFzc2V0cyBhbmQgZGV0YXRjaGVzIHRoZSBwaXBlbGluZSBm
cm9tIHRoZSBzY2VuZSBjYW1lcmFzCisgICAgICovCisgICAgU1NBTzJSZW5kZXJpbmdQaXBlbGlu
ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChkaXNhYmxlR2VvbWV0cnlCdWZmZXJSZW5k
ZXJlcikgeworICAgICAgICBpZiAoZGlzYWJsZUdlb21ldHJ5QnVmZmVyUmVuZGVyZXIgPT09IHZv
aWQgMCkgeyBkaXNhYmxlR2VvbWV0cnlCdWZmZXJSZW5kZXJlciA9IGZhbHNlOyB9CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2NlbmUuY2FtZXJhcy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX3NjZW5lLmNhbWVyYXNbaV07CisgICAgICAg
ICAgICB0aGlzLl9vcmlnaW5hbENvbG9yUG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAg
ICAgICAgICAgdGhpcy5fc3Nhb1Bvc3RQcm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAg
ICAgIHRoaXMuX2JsdXJIUG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAg
dGhpcy5fYmx1clZQb3N0UHJvY2Vzcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB0aGlz
Ll9zc2FvQ29tYmluZVBvc3RQcm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9yYW5kb21UZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgaWYgKGRpc2FibGVH
ZW9tZXRyeUJ1ZmZlclJlbmRlcmVyKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5kaXNhYmxl
R2VvbWV0cnlCdWZmZXJSZW5kZXJlcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5l
LnBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyLmRldGFjaENhbWVyYXNGcm9tUmVuZGVy
UGlwZWxpbmUodGhpcy5fbmFtZSwgdGhpcy5fc2NlbmUuY2FtZXJhcyk7CisgICAgICAgIF9zdXBl
ci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOworICAgIH07CisgICAgLy8gUHJpdmF0ZSBN
ZXRob2RzCisgICAgU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2NyZWF0ZUJsdXJQ
b3N0UHJvY2VzcyA9IGZ1bmN0aW9uIChzc2FvUmF0aW8sIGJsdXJSYXRpbykgeworICAgICAgICB2
YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB0aGlzLl9zYW1wbGVyT2Zmc2V0cyA9IFtdOworICAg
ICAgICB2YXIgZXhwZW5zaXZlID0gdGhpcy5leHBlbnNpdmVCbHVyOworICAgICAgICBmb3IgKHZh
ciBpID0gLTg7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMuX3NhbXBsZXJPZmZzZXRz
LnB1c2goaSAqIDIgKyAwLjUpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2JsdXJIUG9zdFBy
b2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siUG9zdFByb2Nlc3MiXSgiQmx1ckgiLCAic3NhbzIiLCBbIm91dFNpemUiLCAi
c2FtcGxlck9mZnNldHMiLCAibmVhciIsICJmYXIiLCAicmFkaXVzIl0sIFsiZGVwdGhTYW1wbGVy
Il0sIHNzYW9SYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXS5UUklMSU5FQVJfU0FNUExJTkdNT0RFLCB0
aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsICIjZGVmaW5lIEJJTEFURVJBTF9CTFVSXG4j
ZGVmaW5lIEJJTEFURVJBTF9CTFVSX0hcbiNkZWZpbmUgU0FNUExFUyAxNlxuI2RlZmluZSBFWFBF
TlNJVkUgIiArIChleHBlbnNpdmUgPyAiMSIgOiAiMCIpICsgIlxuIik7CisgICAgICAgIHRoaXMu
X2JsdXJIUG9zdFByb2Nlc3Mub25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAg
ICAgIGlmICghX3RoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgib3V0U2l6
ZSIsIF90aGlzLl9zc2FvQ29tYmluZVBvc3RQcm9jZXNzLndpZHRoID4gMCA/IF90aGlzLl9zc2Fv
Q29tYmluZVBvc3RQcm9jZXNzLndpZHRoIDogX3RoaXMuX29yaWdpbmFsQ29sb3JQb3N0UHJvY2Vz
cy53aWR0aCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoIm5lYXIiLCBfdGhpcy5fc2Nl
bmUuYWN0aXZlQ2FtZXJhLm1pblopOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJmYXIi
LCBfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLm1heFopOworICAgICAgICAgICAgZWZmZWN0LnNl
dEZsb2F0KCJyYWRpdXMiLCBfdGhpcy5yYWRpdXMpOworICAgICAgICAgICAgZWZmZWN0LnNldFRl
eHR1cmUoImRlcHRoU2FtcGxlciIsIF90aGlzLl9kZXB0aFRleHR1cmUpOworICAgICAgICAgICAg
aWYgKF90aGlzLl9maXJzdFVwZGF0ZSkgeworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRBcnJh
eSgic2FtcGxlck9mZnNldHMiLCBfdGhpcy5fc2FtcGxlck9mZnNldHMpOworICAgICAgICAgICAg
fQorICAgICAgICB9OworICAgICAgICB0aGlzLl9ibHVyVlBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0
UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQ
cm9jZXNzIl0oIkJsdXJWIiwgInNzYW8yIiwgWyJvdXRTaXplIiwgInNhbXBsZXJPZmZzZXRzIiwg
Im5lYXIiLCAiZmFyIiwgInJhZGl1cyJdLCBbImRlcHRoU2FtcGxlciJdLCBibHVyUmF0aW8sIG51
bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJUZXh0dXJlIl0uVFJJTElORUFSX1NBTVBMSU5HTU9ERSwgdGhpcy5fc2NlbmUuZ2V0RW5n
aW5lKCksIGZhbHNlLCAiI2RlZmluZSBCSUxBVEVSQUxfQkxVUlxuI2RlZmluZSBCSUxBVEVSQUxf
QkxVUl9WXG4jZGVmaW5lIFNBTVBMRVMgMTZcbiNkZWZpbmUgRVhQRU5TSVZFICIgKyAoZXhwZW5z
aXZlID8gIjEiIDogIjAiKSArICJcbiIpOworICAgICAgICB0aGlzLl9ibHVyVlBvc3RQcm9jZXNz
Lm9uQXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLl9z
Y2VuZS5hY3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoIm91dFNpemUiLCBfdGhpcy5fc3Nhb0Nv
bWJpbmVQb3N0UHJvY2Vzcy5oZWlnaHQgPiAwID8gX3RoaXMuX3NzYW9Db21iaW5lUG9zdFByb2Nl
c3MuaGVpZ2h0IDogX3RoaXMuX29yaWdpbmFsQ29sb3JQb3N0UHJvY2Vzcy5oZWlnaHQpOworICAg
ICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJuZWFyIiwgX3RoaXMuX3NjZW5lLmFjdGl2ZUNhbWVy
YS5taW5aKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiZmFyIiwgX3RoaXMuX3NjZW5l
LmFjdGl2ZUNhbWVyYS5tYXhaKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgicmFkaXVz
IiwgX3RoaXMucmFkaXVzKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJkZXB0aFNh
bXBsZXIiLCBfdGhpcy5fZGVwdGhUZXh0dXJlKTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fZmly
c3RVcGRhdGUpIHsKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0QXJyYXkoInNhbXBsZXJPZmZz
ZXRzIiwgX3RoaXMuX3NhbXBsZXJPZmZzZXRzKTsKKyAgICAgICAgICAgICAgICBfdGhpcy5fZmly
c3RVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgdGhp
cy5fYmx1ckhQb3N0UHJvY2Vzcy5zYW1wbGVzID0gdGhpcy50ZXh0dXJlU2FtcGxlczsKKyAgICAg
ICAgdGhpcy5fYmx1clZQb3N0UHJvY2Vzcy5zYW1wbGVzID0gdGhpcy50ZXh0dXJlU2FtcGxlczsK
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5w
cm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2ZpcnN0VXBk
YXRlID0gdHJ1ZTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fcmVidWlsZC5jYWxsKHRoaXMp
OworICAgIH07CisgICAgLy9WYW4gZGVyIENvcnB1dCByYWRpY2FsIGludmVyc2UKKyAgICBTU0FP
MlJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fcmFkaWNhbEludmVyc2VfVmRDID0gZnVuY3Rp
b24gKGkpIHsKKyAgICAgICAgdGhpcy5fYml0c1swXSA9IGk7CisgICAgICAgIHRoaXMuX2JpdHNb
MF0gPSAoKHRoaXMuX2JpdHNbMF0gPDwgMTYpIHwgKHRoaXMuX2JpdHNbMF0gPj4gMTYpKSA+Pj4g
MDsKKyAgICAgICAgdGhpcy5fYml0c1swXSA9ICgodGhpcy5fYml0c1swXSAmIDB4NTU1NTU1NTUp
IDw8IDEpIHwgKCh0aGlzLl9iaXRzWzBdICYgMHhBQUFBQUFBQSkgPj4+IDEpID4+PiAwOworICAg
ICAgICB0aGlzLl9iaXRzWzBdID0gKCh0aGlzLl9iaXRzWzBdICYgMHgzMzMzMzMzMykgPDwgMikg
fCAoKHRoaXMuX2JpdHNbMF0gJiAweENDQ0NDQ0NDKSA+Pj4gMikgPj4+IDA7CisgICAgICAgIHRo
aXMuX2JpdHNbMF0gPSAoKHRoaXMuX2JpdHNbMF0gJiAweDBGMEYwRjBGKSA8PCA0KSB8ICgodGhp
cy5fYml0c1swXSAmIDB4RjBGMEYwRjApID4+PiA0KSA+Pj4gMDsKKyAgICAgICAgdGhpcy5fYml0
c1swXSA9ICgodGhpcy5fYml0c1swXSAmIDB4MDBGRjAwRkYpIDw8IDgpIHwgKCh0aGlzLl9iaXRz
WzBdICYgMHhGRjAwRkYwMCkgPj4+IDgpID4+PiAwOworICAgICAgICByZXR1cm4gdGhpcy5fYml0
c1swXSAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIC8gMHgxMDAwMDAwMDAgb3IgLyA0Mjk0
OTY3Mjk2CisgICAgfTsKKyAgICBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5faGFt
bWVyc2xleSA9IGZ1bmN0aW9uIChpLCBuKSB7CisgICAgICAgIHJldHVybiBbaSAvIG4sIHRoaXMu
X3JhZGljYWxJbnZlcnNlX1ZkQyhpKV07CisgICAgfTsKKyAgICBTU0FPMlJlbmRlcmluZ1BpcGVs
aW5lLnByb3RvdHlwZS5faGVtaXNwaGVyZVNhbXBsZV91bmlmb3JtID0gZnVuY3Rpb24gKHUsIHYp
IHsKKyAgICAgICAgdmFyIHBoaSA9IHYgKiAyLjAgKiBNYXRoLlBJOworICAgICAgICAvLyByZWpl
Y3Rpbmcgc2FtcGxlcyB0aGF0IGFyZSBjbG9zZSB0byB0YW5nZW50IHBsYW5lIHRvIGF2b2lkIHot
ZmlnaHRpbmcgYXJ0aWZhY3RzCisgICAgICAgIHZhciBjb3NUaGV0YSA9IDEuMCAtICh1ICogMC44
NSArIDAuMTUpOworICAgICAgICB2YXIgc2luVGhldGEgPSBNYXRoLnNxcnQoMS4wIC0gY29zVGhl
dGEgKiBjb3NUaGV0YSk7CisgICAgICAgIHJldHVybiBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXShNYXRoLmNvcyhwaGkpICogc2lu
VGhldGEsIE1hdGguc2luKHBoaSkgKiBzaW5UaGV0YSwgY29zVGhldGEpOworICAgIH07CisgICAg
U1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2dlbmVyYXRlSGVtaXNwaGVyZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIG51bVNhbXBsZXMgPSB0aGlzLnNhbXBsZXM7CisgICAg
ICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICAgICAgdmFyIHZlY3RvcjsKKyAgICAgICAgdmFyIGkg
PSAwOworICAgICAgICB3aGlsZSAoaSA8IG51bVNhbXBsZXMpIHsKKyAgICAgICAgICAgIGlmIChu
dW1TYW1wbGVzIDwgMTYpIHsKKyAgICAgICAgICAgICAgICB2ZWN0b3IgPSB0aGlzLl9oZW1pc3Bo
ZXJlU2FtcGxlX3VuaWZvcm0oTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20oKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZCA9IHRo
aXMuX2hhbW1lcnNsZXkoaSwgbnVtU2FtcGxlcyk7CisgICAgICAgICAgICAgICAgdmVjdG9yID0g
dGhpcy5faGVtaXNwaGVyZVNhbXBsZV91bmlmb3JtKHJhbmRbMF0sIHJhbmRbMV0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmVzdWx0LnB1c2godmVjdG9yLngsIHZlY3Rvci55LCB2ZWN0
b3Iueik7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9OworICAgIFNTQU8yUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLl9jcmVhdGVT
U0FPUG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAocmF0aW8pIHsKKyAgICAgICAgdmFyIF90aGlzID0g
dGhpczsKKyAgICAgICAgdmFyIG51bVNhbXBsZXMgPSB0aGlzLnNhbXBsZXM7CisgICAgICAgIHRo
aXMuX3NhbXBsZVNwaGVyZSA9IHRoaXMuX2dlbmVyYXRlSGVtaXNwaGVyZSgpOworICAgICAgICB0
aGlzLl9zc2FvUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUG9zdFByb2Nlc3MiXSgic3NhbzIiLCAic3NhbzIi
LCBbCisgICAgICAgICAgICAic2FtcGxlU3BoZXJlIiwgInNhbXBsZXNGYWN0b3IiLCAicmFuZFRl
eHR1cmVUaWxlcyIsICJ0b3RhbFN0cmVuZ3RoIiwgInJhZGl1cyIsCisgICAgICAgICAgICAiYmFz
ZSIsICJyYW5nZSIsICJwcm9qZWN0aW9uIiwgIm5lYXIiLCAiZmFyIiwgInRleGVsU2l6ZSIsCisg
ICAgICAgICAgICAieFZpZXdwb3J0IiwgInlWaWV3cG9ydCIsICJtYXhaIiwgIm1pblpBc3BlY3Qi
CisgICAgICAgIF0sIFsicmFuZG9tU2FtcGxlciIsICJub3JtYWxTYW1wbGVyIl0sIHJhdGlvLCBu
dWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgdGhpcy5fc2NlbmUuZ2V0RW5n
aW5lKCksIGZhbHNlLCAiI2RlZmluZSBTQU1QTEVTICIgKyBudW1TYW1wbGVzICsgIlxuI2RlZmlu
ZSBTU0FPIik7CisgICAgICAgIHRoaXMuX3NzYW9Qb3N0UHJvY2Vzcy5vbkFwcGx5ID0gZnVuY3Rp
b24gKGVmZmVjdCkgeworICAgICAgICAgICAgaWYgKF90aGlzLl9maXJzdFVwZGF0ZSkgeworICAg
ICAgICAgICAgICAgIGVmZmVjdC5zZXRBcnJheTMoInNhbXBsZVNwaGVyZSIsIF90aGlzLl9zYW1w
bGVTcGhlcmUpOworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgicmFuZFRleHR1cmVU
aWxlcyIsIDMyLjApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFfdGhpcy5fc2Nl
bmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJzYW1wbGVzRmFjdG9yIiwgMSAvIF90aGlz
LnNhbXBsZXMpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJ0b3RhbFN0cmVuZ3RoIiwg
X3RoaXMudG90YWxTdHJlbmd0aCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCJ0ZXhl
bFNpemUiLCAxIC8gX3RoaXMuX3NzYW9Qb3N0UHJvY2Vzcy53aWR0aCwgMSAvIF90aGlzLl9zc2Fv
UG9zdFByb2Nlc3MuaGVpZ2h0KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgicmFkaXVz
IiwgX3RoaXMucmFkaXVzKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgibWF4WiIsIF90
aGlzLm1heFopOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJtaW5aQXNwZWN0IiwgX3Ro
aXMubWluWkFzcGVjdCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImJhc2UiLCBfdGhp
cy5iYXNlKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgibmVhciIsIF90aGlzLl9zY2Vu
ZS5hY3RpdmVDYW1lcmEubWluWik7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImZhciIs
IF90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEubWF4Wik7CisgICAgICAgICAgICBlZmZlY3Quc2V0
RmxvYXQoInhWaWV3cG9ydCIsIE1hdGgudGFuKF90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEuZm92
IC8gMikgKiBfdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZ2V0QXNwZWN0UmF0aW8oX3RoaXMuX3Nj
ZW5lLmFjdGl2ZUNhbWVyYSwgdHJ1ZSkpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJ5
Vmlld3BvcnQiLCBNYXRoLnRhbihfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLmZvdiAvIDIpKTsK
KyAgICAgICAgICAgIGVmZmVjdC5zZXRNYXRyaXgoInByb2plY3Rpb24iLCBfdGhpcy5fc2NlbmUu
Z2V0UHJvamVjdGlvbk1hdHJpeCgpKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJ0
ZXh0dXJlU2FtcGxlciIsIF90aGlzLl9kZXB0aFRleHR1cmUpOworICAgICAgICAgICAgZWZmZWN0
LnNldFRleHR1cmUoIm5vcm1hbFNhbXBsZXIiLCBfdGhpcy5fbm9ybWFsVGV4dHVyZSk7CisgICAg
ICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgicmFuZG9tU2FtcGxlciIsIF90aGlzLl9yYW5kb21U
ZXh0dXJlKTsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5fc3Nhb1Bvc3RQcm9jZXNzLnNhbXBs
ZXMgPSB0aGlzLnRleHR1cmVTYW1wbGVzOworICAgIH07CisgICAgU1NBTzJSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUuX2NyZWF0ZVNTQU9Db21iaW5lUG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAo
cmF0aW8pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5fc3Nhb0Nv
bWJpbmVQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQb3N0UHJvY2VzcyJdKCJzc2FvQ29tYmluZSIsICJzc2Fv
Q29tYmluZSIsIFtdLCBbIm9yaWdpbmFsQ29sb3IiLCAidmlld3BvcnQiXSwgcmF0aW8sIG51bGws
IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCB0aGlzLl9zY2VuZS5nZXRFbmdpbmUo
KSwgZmFsc2UpOworICAgICAgICB0aGlzLl9zc2FvQ29tYmluZVBvc3RQcm9jZXNzLm9uQXBwbHkg
PSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICB2YXIgdmlld3BvcnQgPSBfdGhpcy5f
c2NlbmUuYWN0aXZlQ2FtZXJhLnZpZXdwb3J0OworICAgICAgICAgICAgZWZmZWN0LnNldFZlY3Rv
cjQoInZpZXdwb3J0IiwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3I0WzBdLmNvcHlGcm9tRmxvYXRzKHZpZXdwb3J0Lngs
IHZpZXdwb3J0LnksIHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQpKTsKKyAgICAgICAg
ICAgIGVmZmVjdC5zZXRUZXh0dXJlRnJvbVBvc3RQcm9jZXNzKCJvcmlnaW5hbENvbG9yIiwgX3Ro
aXMuX29yaWdpbmFsQ29sb3JQb3N0UHJvY2Vzcyk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMu
X3NzYW9Db21iaW5lUG9zdFByb2Nlc3Muc2FtcGxlcyA9IHRoaXMudGV4dHVyZVNhbXBsZXM7Cisg
ICAgfTsKKyAgICBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fY3JlYXRlUmFuZG9t
VGV4dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNpemUgPSAxMjg7CisgICAgICAg
IHRoaXMuX3JhbmRvbVRleHR1cmUgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19keW5hbWljVGV4
dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJEeW5hbWljVGV4dHVyZSJdKCJTU0FP
UmFuZG9tVGV4dHVyZSIsIHNpemUsIHRoaXMuX3NjZW5lLCBmYWxzZSwgX01hdGVyaWFsc19UZXh0
dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRleHR1cmUiXS5UUklM
SU5FQVJfU0FNUExJTkdNT0RFKTsKKyAgICAgICAgdGhpcy5fcmFuZG9tVGV4dHVyZS53cmFwVSA9
IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJUZXh0dXJlIl0uV1JBUF9BRERSRVNTTU9ERTsKKyAgICAgICAgdGhpcy5fcmFuZG9tVGV4dHVy
ZS53cmFwViA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJUZXh0dXJlIl0uV1JBUF9BRERSRVNTTU9ERTsKKyAgICAgICAgdmFyIGNvbnRl
eHQgPSB0aGlzLl9yYW5kb21UZXh0dXJlLmdldENvbnRleHQoKTsKKyAgICAgICAgdmFyIHJhbmQg
PSBmdW5jdGlvbiAobWluLCBtYXgpIHsKKyAgICAgICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgp
ICogKG1heCAtIG1pbikgKyBtaW47CisgICAgICAgIH07CisgICAgICAgIHZhciByYW5kVmVjdG9y
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3Rv
cjMiXS5aZXJvKCk7CisgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgc2l6ZTsgeCsrKSB7Cisg
ICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHNpemU7IHkrKykgeworICAgICAgICAgICAg
ICAgIHJhbmRWZWN0b3IueCA9IHJhbmQoMC4wLCAxLjApOworICAgICAgICAgICAgICAgIHJhbmRW
ZWN0b3IueSA9IHJhbmQoMC4wLCAxLjApOworICAgICAgICAgICAgICAgIHJhbmRWZWN0b3IueiA9
IDAuMDsKKyAgICAgICAgICAgICAgICByYW5kVmVjdG9yLm5vcm1hbGl6ZSgpOworICAgICAgICAg
ICAgICAgIHJhbmRWZWN0b3Iuc2NhbGVJblBsYWNlKDI1NSk7CisgICAgICAgICAgICAgICAgcmFu
ZFZlY3Rvci54ID0gTWF0aC5mbG9vcihyYW5kVmVjdG9yLngpOworICAgICAgICAgICAgICAgIHJh
bmRWZWN0b3IueSA9IE1hdGguZmxvb3IocmFuZFZlY3Rvci55KTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LmZpbGxTdHlsZSA9ICdyZ2IoJyArIHJhbmRWZWN0b3IueCArICcsICcgKyByYW5kVmVj
dG9yLnkgKyAnLCAnICsgcmFuZFZlY3Rvci56ICsgJyknOworICAgICAgICAgICAgICAgIGNvbnRl
eHQuZmlsbFJlY3QoeCwgeSwgMSwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fcmFuZG9tVGV4dHVyZS51cGRhdGUoZmFsc2UpOworICAgIH07CisgICAgLyoqCisg
ICAgICogU2VyaWFsaXplIHRoZSByZW5kZXJpbmcgcGlwZWxpbmUgKFVzZWQgd2hlbiBleHBvcnRp
bmcpCisgICAgICogQHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgb2JqZWN0CisgICAgICovCisgICAg
U1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9NaXNjX2RlY29yYXRvcnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlNlcmlhbGl6
ZSh0aGlzKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21UeXBlID0gIlNTQU8y
UmVuZGVyaW5nUGlwZWxpbmUiOworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9iamVjdDsK
KyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlIHRoZSBzZXJpYWxpemVkIHBpcGVsaW5lCisg
ICAgICogQHBhcmFtIHNvdXJjZSBTb3VyY2UgcGlwZWxpbmUuCisgICAgICogQHBhcmFtIHNjZW5l
IFRoZSBzY2VuZSB0byBsb2FkIHRoZSBwaXBlbGluZSB0by4KKyAgICAgKiBAcGFyYW0gcm9vdFVy
bCBUaGUgVVJMIG9mIHRoZSBzZXJpYWxpemVkIHBpcGVsaW5lLgorICAgICAqIEByZXR1cm5zIEFu
IGluc3RhbnRpYXRlZCBwaXBlbGluZSBmcm9tIHRoZSBzZXJpYWxpemVkIG9iamVjdC4KKyAgICAg
Ki8KKyAgICBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLlBhcnNlID0gZnVuY3Rpb24gKHNvdXJjZSwg
c2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgcmV0dXJuIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlBhcnNlKGZ1bmN0
aW9uICgpIHsgcmV0dXJuIG5ldyBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lKHNvdXJjZS5fbmFtZSwg
c2NlbmUsIHNvdXJjZS5fcmF0aW8pOyB9LCBzb3VyY2UsIHNjZW5lLCByb290VXJsKTsKKyAgICB9
OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShb
CisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90
b3R5cGUsICJ0b3RhbFN0cmVuZ3RoIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIFNTQU8yUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAibWF4WiIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlw
ZSwgIm1pblpBc3BlY3QiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3Jz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInNlcmlhbGl6ZSJdKSgic2FtcGxlcyIpCisg
ICAgXSwgU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJfc2FtcGxlcyIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1sic2VyaWFsaXplIl0pKCJ0ZXh0dXJlU2FtcGxlcyIpCisgICAgXSwgU1NBTzJSZW5k
ZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJfdGV4dHVyZVNhbXBsZXMiLCB2b2lkIDApOworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAg
ICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
InNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUs
ICJfcmF0aW8iLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInNlcmlhbGl6ZSJdKSgiZXhwZW5zaXZlQmx1ciIpCisg
ICAgXSwgU1NBTzJSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJfZXhwZW5zaXZlQmx1ciIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTU0FPMlJlbmRlcmluZ1BpcGVs
aW5lLnByb3RvdHlwZSwgInJhZGl1cyIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2Rl
Y29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0pKCkKKyAg
ICBdLCBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImJhc2UiLCB2b2lkIDApOwor
ICAgIHJldHVybiBTU0FPMlJlbmRlcmluZ1BpcGVsaW5lOworfShfUG9zdFByb2Nlc3Nlc19SZW5k
ZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUiXSkpOworCitfTWlzY190eXBlU3Rv
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIl9UeXBlU3RvcmUiXS5SZWdpc3RlcmVk
VHlwZXNbIkJBQllMT04uU1NBTzJSZW5kZXJpbmdQaXBlbGluZSJdID0gU1NBTzJSZW5kZXJpbmdQ
aXBlbGluZTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQ
aXBlbGluZS9QaXBlbGluZXMvc3Nhb1JlbmRlcmluZ1BpcGVsaW5lLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvUGlwZWxp
bmVzL3NzYW9SZW5kZXJpbmdQaXBlbGluZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNTQU9SZW5kZXJpbmdQaXBlbGluZSAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTU0FPUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFNTQU9SZW5kZXJpbmdQaXBlbGluZTsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lmpz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9N
YXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWF0ZXJp
YWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX2R5bmFtaWNU
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9NYXRlcmlhbHMvVGV4dHVyZXMvZHluYW1pY1RleHR1cmUgKi8gIi4vTWF0
ZXJpYWxzL1RleHR1cmVzL2R5bmFtaWNUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQcm9jZXNzZXMvcG9z
dFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNz
UmVuZGVyUGlwZWxpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFBy
b2Nlc3NSZW5kZXJQaXBlbGluZSAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bv
c3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
UG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
Li4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCAq
LyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfcGFzc1Bvc3RQ
cm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9Qb3N0UHJvY2Vzc2VzL3Bhc3NQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL3Bhc3NQb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Q
b3N0UHJvY2Vzc2VzX2JsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9ibHVyUG9z
dFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9ibHVyUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL0VuZ2luZXMvY29u
c3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNj
L2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUG9zdFByb2Nlc3Nl
c19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29t
cG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50ICovICIuL1Bvc3RQcm9jZXNzZXMvUmVu
ZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVu
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX3NzYW9fZnJhZ21lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi8uLi9TaGFkZXJzL3NzYW8uZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9zc2FvLmZyYWdtZW50
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfc3Nhb0NvbWJpbmVfZnJh
Z21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi8uLi8uLi9TaGFkZXJzL3NzYW9Db21iaW5lLmZyYWdtZW50ICovICIuL1NoYWRlcnMv
c3Nhb0NvbWJpbmUuZnJhZ21lbnQudHMiKTsKKworCisKKworCisKKworCisKKworCisKKworCisv
KioKKyAqIFJlbmRlciBwaXBlbGluZSB0byBwcm9kdWNlIHNzYW8gZWZmZWN0CisgKi8KK3ZhciBT
U0FPUmVuZGVyaW5nUGlwZWxpbmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU1NB
T1JlbmRlcmluZ1BpcGVsaW5lLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEBjb25zdHJ1Y3Rv
cgorICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIHJlbmRlcmluZyBwaXBlbGluZSBuYW1lCisgICAg
ICogQHBhcmFtIHNjZW5lIC0gVGhlIHNjZW5lIGxpbmtlZCB0byB0aGlzIHBpcGVsaW5lCisgICAg
ICogQHBhcmFtIHJhdGlvIC0gVGhlIHNpemUgb2YgdGhlIHBvc3Rwcm9jZXNzZXMuIENhbiBiZSBh
IG51bWJlciBzaGFyZWQgYmV0d2VlbiBwYXNzZXMgb3IgYW4gb2JqZWN0IGZvciBtb3JlIHByZWNp
c2lvbjogeyBzc2FvUmF0aW86IDAuNSwgY29tYmluZVJhdGlvOiAxLjAgfQorICAgICAqIEBwYXJh
bSBjYW1lcmFzIC0gVGhlIGFycmF5IG9mIGNhbWVyYXMgdGhhdCB0aGUgcmVuZGVyaW5nIHBpcGVs
aW5lIHdpbGwgYmUgYXR0YWNoZWQgdG8KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTU0FPUmVuZGVy
aW5nUGlwZWxpbmUobmFtZSwgc2NlbmUsIHJhdGlvLCBjYW1lcmFzKSB7CisgICAgICAgIHZhciBf
dGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjZW5lLmdldEVuZ2luZSgpLCBuYW1lKSB8fCB0aGlz
OworICAgICAgICAvLyBNZW1iZXJzCisgICAgICAgIC8qKgorICAgICAgICAgKiBAaWdub3JlCisg
ICAgICAgICogVGhlIFBhc3NQb3N0UHJvY2VzcyBpZCBpbiB0aGUgcGlwZWxpbmUgdGhhdCBjb250
YWlucyB0aGUgb3JpZ2luYWwgc2NlbmUgY29sb3IKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMu
U1NBT09yaWdpbmFsU2NlbmVDb2xvckVmZmVjdCA9ICJTU0FPT3JpZ2luYWxTY2VuZUNvbG9yRWZm
ZWN0IjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgKiBUaGUgU1NB
TyBQb3N0UHJvY2VzcyBpZCBpbiB0aGUgcGlwZWxpbmUKKyAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMuU1NBT1JlbmRlckVmZmVjdCA9ICJTU0FPUmVuZGVyRWZmZWN0IjsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgKiBUaGUgaG9yaXpvbnRhbCBibHVyIFBvc3RQcm9j
ZXNzIGlkIGluIHRoZSBwaXBlbGluZQorICAgICAgICAqLworICAgICAgICBfdGhpcy5TU0FPQmx1
ckhSZW5kZXJFZmZlY3QgPSAiU1NBT0JsdXJIUmVuZGVyRWZmZWN0IjsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgKiBUaGUgdmVydGljYWwgYmx1ciBQb3N0UHJvY2Vz
cyBpZCBpbiB0aGUgcGlwZWxpbmUKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuU1NBT0JsdXJW
UmVuZGVyRWZmZWN0ID0gIlNTQU9CbHVyVlJlbmRlckVmZmVjdCI7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBAaWdub3JlCisgICAgICAgICogVGhlIFBvc3RQcm9jZXNzIGlkIGluIHRoZSBwaXBl
bGluZSB0aGF0IGNvbWJpbmVzIHRoZSBTU0FPLUJsdXIgb3V0cHV0IHdpdGggdGhlIG9yaWdpbmFs
IHNjZW5lIGNvbG9yIChTU0FPT3JpZ2luYWxTY2VuZUNvbG9yRWZmZWN0KQorICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5TU0FPQ29tYmluZVJlbmRlckVmZmVjdCA9ICJTU0FPQ29tYmluZVJlbmRl
ckVmZmVjdCI7CisgICAgICAgIC8qKgorICAgICAgICAqIFRoZSBvdXRwdXQgc3RyZW5ndGggb2Yg
dGhlIFNTQU8gcG9zdC1wcm9jZXNzLiBEZWZhdWx0IHZhbHVlIGlzIDEuMC4KKyAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMudG90YWxTdHJlbmd0aCA9IDEuMDsKKyAgICAgICAgLyoqCisgICAgICAg
ICogVGhlIHJhZGl1cyBhcm91bmQgdGhlIGFuYWx5emVkIHBpeGVsIHVzZWQgYnkgdGhlIFNTQU8g
cG9zdC1wcm9jZXNzLiBEZWZhdWx0IHZhbHVlIGlzIDAuMDAwNgorICAgICAgICAqLworICAgICAg
ICBfdGhpcy5yYWRpdXMgPSAwLjAwMDE7CisgICAgICAgIC8qKgorICAgICAgICAqIFJlbGF0ZWQg
dG8gZmFsbE9mZiwgdXNlZCB0byBpbnRlcnBvbGF0ZSBTU0FPIHNhbXBsZXMgKGZpcnN0IGludGVy
cG9sYXRlIGZ1bmN0aW9uIGlucHV0KSBiYXNlZCBvbiB0aGUgb2NjbHVzaW9uIGRpZmZlcmVuY2Ug
b2YgZWFjaCBwaXhlbAorICAgICAgICAqIE11c3Qgbm90IGJlIGVxdWFsIHRvIGZhbGxPZmYgYW5k
IHN1cGVyaW9yIHRvIGZhbGxPZmYuCisgICAgICAgICogRGVmYXVsdCB2YWx1ZSBpcyAwLjAwNzUK
KyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXJlYSA9IDAuMDA3NTsKKyAgICAgICAgLyoqCisg
ICAgICAgICogUmVsYXRlZCB0byBhcmVhLCB1c2VkIHRvIGludGVycG9sYXRlIFNTQU8gc2FtcGxl
cyAoc2Vjb25kIGludGVycG9sYXRlIGZ1bmN0aW9uIGlucHV0KSBiYXNlZCBvbiB0aGUgb2NjbHVz
aW9uIGRpZmZlcmVuY2Ugb2YgZWFjaCBwaXhlbAorICAgICAgICAqIE11c3Qgbm90IGJlIGVxdWFs
IHRvIGFyZWEgYW5kIGluZmVyaW9yIHRvIGFyZWEuCisgICAgICAgICogRGVmYXVsdCB2YWx1ZSBp
cyAwLjAwMDAwMQorICAgICAgICAqLworICAgICAgICBfdGhpcy5mYWxsT2ZmID0gMC4wMDAwMDE7
CisgICAgICAgIC8qKgorICAgICAgICAqIFRoZSBiYXNlIGNvbG9yIG9mIHRoZSBTU0FPIHBvc3Qt
cHJvY2VzcworICAgICAgICAqIFRoZSBmaW5hbCByZXN1bHQgaXMgImJhc2UgKyBzc2FvIiBiZXR3
ZWVuIFswLCAxXQorICAgICAgICAqLworICAgICAgICBfdGhpcy5iYXNlID0gMC41OworICAgICAg
ICBfdGhpcy5fZmlyc3RVcGRhdGUgPSB0cnVlOworICAgICAgICBfdGhpcy5fc2NlbmUgPSBzY2Vu
ZTsKKyAgICAgICAgLy8gU2V0IHVwIGFzc2V0cworICAgICAgICBfdGhpcy5fY3JlYXRlUmFuZG9t
VGV4dHVyZSgpOworICAgICAgICBfdGhpcy5fZGVwdGhUZXh0dXJlID0gc2NlbmUuZW5hYmxlRGVw
dGhSZW5kZXJlcigpLmdldERlcHRoTWFwKCk7IC8vIEZvcmNlIGRlcHRoIHJlbmRlcmVyICJvbiIK
KyAgICAgICAgdmFyIHNzYW9SYXRpbyA9IHJhdGlvLnNzYW9SYXRpbyB8fCByYXRpbzsKKyAgICAg
ICAgdmFyIGNvbWJpbmVSYXRpbyA9IHJhdGlvLmNvbWJpbmVSYXRpbyB8fCByYXRpbzsKKyAgICAg
ICAgX3RoaXMuX29yaWdpbmFsQ29sb3JQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19w
YXNzUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUGFzc1Bvc3RQcm9j
ZXNzIl0oIlNTQU9PcmlnaW5hbFNjZW5lQ29sb3IiLCBjb21iaW5lUmF0aW8sIG51bGwsIF9NYXRl
cmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0
dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UpOwor
ICAgICAgICBfdGhpcy5fY3JlYXRlU1NBT1Bvc3RQcm9jZXNzKHNzYW9SYXRpbyk7CisgICAgICAg
IF90aGlzLl9jcmVhdGVCbHVyUG9zdFByb2Nlc3Moc3Nhb1JhdGlvKTsKKyAgICAgICAgX3RoaXMu
X2NyZWF0ZVNTQU9Db21iaW5lUG9zdFByb2Nlc3MoY29tYmluZVJhdGlvKTsKKyAgICAgICAgLy8g
U2V0IHVwIHBpcGVsaW5lCisgICAgICAgIF90aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNz
ZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUo
KSwgX3RoaXMuU1NBT09yaWdpbmFsU2NlbmVDb2xvckVmZmVjdCwgZnVuY3Rpb24gKCkgeyByZXR1
cm4gX3RoaXMuX29yaWdpbmFsQ29sb3JQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICBf
dGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9j
ZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQcm9jZXNz
UmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5lKCksIF90aGlzLlNTQU9SZW5kZXJFZmZlY3Qs
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9zc2FvUG9zdFByb2Nlc3M7IH0sIHRydWUpKTsK
KyAgICAgICAgX3RoaXMuYWRkRWZmZWN0KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGlu
ZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQ
b3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJdKHNjZW5lLmdldEVuZ2luZSgpLCBfdGhpcy5TU0FPQmx1
ckhSZW5kZXJFZmZlY3QsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9ibHVySFBvc3RQcm9j
ZXNzOyB9LCB0cnVlKSk7CisgICAgICAgIF90aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNz
ZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUo
KSwgX3RoaXMuU1NBT0JsdXJWUmVuZGVyRWZmZWN0LCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhp
cy5fYmx1clZQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICBfdGhpcy5hZGRFZmZlY3Qo
bmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0o
c2NlbmUuZ2V0RW5naW5lKCksIF90aGlzLlNTQU9Db21iaW5lUmVuZGVyRWZmZWN0LCBmdW5jdGlv
biAoKSB7IHJldHVybiBfdGhpcy5fc3Nhb0NvbWJpbmVQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOwor
ICAgICAgICAvLyBGaW5pc2gKKyAgICAgICAgc2NlbmUucG9zdFByb2Nlc3NSZW5kZXJQaXBlbGlu
ZU1hbmFnZXIuYWRkUGlwZWxpbmUoX3RoaXMpOworICAgICAgICBpZiAoY2FtZXJhcykgeworICAg
ICAgICAgICAgc2NlbmUucG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIuYXR0YWNoQ2Ft
ZXJhc1RvUmVuZGVyUGlwZWxpbmUobmFtZSwgY2FtZXJhcyk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU1NBT1JlbmRl
cmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgInNjZW5lIiwgeworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyBhY3RpdmUgc2NlbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICAvLyBQdWJsaWMgTWV0aG9kcworICAgIC8qKgorICAgICAqIEdldCB0aGUgY2xhc3MgbmFt
ZQorICAgICAqIEByZXR1cm5zICJTU0FPUmVuZGVyaW5nUGlwZWxpbmUiCisgICAgICovCisgICAg
U1NBT1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiAiU1NBT1JlbmRlcmluZ1BpcGVsaW5lIjsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFJlbW92ZXMgdGhlIGludGVybmFsIHBpcGVsaW5lIGFzc2V0cyBhbmQgZGV0
YXRjaGVzIHRoZSBwaXBlbGluZSBmcm9tIHRoZSBzY2VuZSBjYW1lcmFzCisgICAgICovCisgICAg
U1NBT1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKGRpc2Fi
bGVEZXB0aFJlbmRlcikgeworICAgICAgICBpZiAoZGlzYWJsZURlcHRoUmVuZGVyID09PSB2b2lk
IDApIHsgZGlzYWJsZURlcHRoUmVuZGVyID0gZmFsc2U7IH0KKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLl9zY2VuZS5jYW1lcmFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2
YXIgY2FtZXJhID0gdGhpcy5fc2NlbmUuY2FtZXJhc1tpXTsKKyAgICAgICAgICAgIHRoaXMuX29y
aWdpbmFsQ29sb3JQb3N0UHJvY2Vzcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB0aGlz
Ll9zc2FvUG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgdGhpcy5fYmx1
ckhQb3N0UHJvY2Vzcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB0aGlzLl9ibHVyVlBv
c3RQcm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAgICAgIHRoaXMuX3NzYW9Db21iaW5l
UG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Jh
bmRvbVRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICBpZiAoZGlzYWJsZURlcHRoUmVuZGVyKSB7
CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5kaXNhYmxlRGVwdGhSZW5kZXJlcigpOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX3NjZW5lLnBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2Vy
LmRldGFjaENhbWVyYXNGcm9tUmVuZGVyUGlwZWxpbmUodGhpcy5fbmFtZSwgdGhpcy5fc2NlbmUu
Y2FtZXJhcyk7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOwor
ICAgIH07CisgICAgLy8gUHJpdmF0ZSBNZXRob2RzCisgICAgU1NBT1JlbmRlcmluZ1BpcGVsaW5l
LnByb3RvdHlwZS5fY3JlYXRlQmx1clBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHJhdGlvKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBzaXplID0gMTY7CisgICAgICAg
IHRoaXMuX2JsdXJIUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkJsdXJQb3N0UHJvY2VzcyJdKCJCbHVy
SCIsIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVjdG9yMiJdKDEsIDApLCBzaXplLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190
ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5CSUxJTkVBUl9T
QU1QTElOR01PREUsIHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkNvbnN0YW50cyJdLlRFWFRVUkVU
WVBFX1VOU0lHTkVEX0lOVCk7CisgICAgICAgIHRoaXMuX2JsdXJWUG9zdFByb2Nlc3MgPSBuZXcg
X1Bvc3RQcm9jZXNzZXNfYmx1clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIkJsdXJQb3N0UHJvY2VzcyJdKCJCbHVyViIsIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKDAsIDEpLCBzaXplLCByYXRpbywg
bnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHRoaXMuX3NjZW5lLmdldEVu
Z2luZSgpLCBmYWxzZSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCk7CisgICAgICAgIHRo
aXMuX2JsdXJIUG9zdFByb2Nlc3Mub25BY3RpdmF0ZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHZhciBkdyA9IF90aGlzLl9ibHVySFBvc3RQcm9jZXNzLndpZHRoIC8g
X3RoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmdldFJlbmRlcldpZHRoKCk7CisgICAgICAgICAgICBf
dGhpcy5fYmx1ckhQb3N0UHJvY2Vzcy5rZXJuZWwgPSBzaXplICogZHc7CisgICAgICAgIH0pOwor
ICAgICAgICB0aGlzLl9ibHVyVlBvc3RQcm9jZXNzLm9uQWN0aXZhdGVPYnNlcnZhYmxlLmFkZChm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgZHcgPSBfdGhpcy5fYmx1clZQb3N0UHJvY2Vz
cy5oZWlnaHQgLyBfdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuZ2V0UmVuZGVySGVpZ2h0KCk7Cisg
ICAgICAgICAgICBfdGhpcy5fYmx1clZQb3N0UHJvY2Vzcy5rZXJuZWwgPSBzaXplICogZHc7Cisg
ICAgICAgIH0pOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTU0FPUmVuZGVyaW5n
UGlwZWxpbmUucHJvdG90eXBlLl9yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlz
Ll9maXJzdFVwZGF0ZSA9IHRydWU7CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX3JlYnVpbGQu
Y2FsbCh0aGlzKTsKKyAgICB9OworICAgIFNTQU9SZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUu
X2NyZWF0ZVNTQU9Qb3N0UHJvY2VzcyA9IGZ1bmN0aW9uIChyYXRpbykgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgbnVtU2FtcGxlcyA9IDE2OworICAgICAgICB2YXIg
c2FtcGxlU3BoZXJlID0gWworICAgICAgICAgICAgMC41MzgxLCAwLjE4NTYsIC0wLjQzMTksCisg
ICAgICAgICAgICAwLjEzNzksIDAuMjQ4NiwgMC40NDMwLAorICAgICAgICAgICAgMC4zMzcxLCAw
LjU2NzksIC0wLjAwNTcsCisgICAgICAgICAgICAtMC42OTk5LCAtMC4wNDUxLCAtMC4wMDE5LAor
ICAgICAgICAgICAgMC4wNjg5LCAtMC4xNTk4LCAtMC44NTQ3LAorICAgICAgICAgICAgMC4wNTYw
LCAwLjAwNjksIC0wLjE4NDMsCisgICAgICAgICAgICAtMC4wMTQ2LCAwLjE0MDIsIDAuMDc2MiwK
KyAgICAgICAgICAgIDAuMDEwMCwgLTAuMTkyNCwgLTAuMDM0NCwKKyAgICAgICAgICAgIC0wLjM1
NzcsIC0wLjUzMDEsIC0wLjQzNTgsCisgICAgICAgICAgICAtMC4zMTY5LCAwLjEwNjMsIDAuMDE1
OCwKKyAgICAgICAgICAgIDAuMDEwMywgLTAuNTg2OSwgMC4wMDQ2LAorICAgICAgICAgICAgLTAu
MDg5NywgLTAuNDk0MCwgMC4zMjg3LAorICAgICAgICAgICAgMC43MTE5LCAtMC4wMTU0LCAtMC4w
OTE4LAorICAgICAgICAgICAgLTAuMDUzMywgMC4wNTk2LCAtMC41NDExLAorICAgICAgICAgICAg
MC4wMzUyLCAtMC4wNjMxLCAwLjU0NjAsCisgICAgICAgICAgICAtMC40Nzc2LCAwLjI4NDcsIC0w
LjAyNzEKKyAgICAgICAgXTsKKyAgICAgICAgdmFyIHNhbXBsZXNGYWN0b3IgPSAxLjAgLyBudW1T
YW1wbGVzOworICAgICAgICB0aGlzLl9zc2FvUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNz
ZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siUG9zdFByb2Nlc3Mi
XSgic3NhbyIsICJzc2FvIiwgWworICAgICAgICAgICAgInNhbXBsZVNwaGVyZSIsICJzYW1wbGVz
RmFjdG9yIiwgInJhbmRUZXh0dXJlVGlsZXMiLCAidG90YWxTdHJlbmd0aCIsICJyYWRpdXMiLAor
ICAgICAgICAgICAgImFyZWEiLCAiZmFsbE9mZiIsICJiYXNlIiwgInJhbmdlIiwgInZpZXdwb3J0
IgorICAgICAgICBdLCBbInJhbmRvbVNhbXBsZXIiXSwgcmF0aW8sIG51bGwsIF9NYXRlcmlhbHNf
VGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0dXJlIl0u
QklMSU5FQVJfU0FNUExJTkdNT0RFLCB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsICIj
ZGVmaW5lIFNBTVBMRVMgIiArIG51bVNhbXBsZXMgKyAiXG4jZGVmaW5lIFNTQU8iKTsKKyAgICAg
ICAgdGhpcy5fc3Nhb1Bvc3RQcm9jZXNzLm9uQXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7Cisg
ICAgICAgICAgICBpZiAoX3RoaXMuX2ZpcnN0VXBkYXRlKSB7CisgICAgICAgICAgICAgICAgZWZm
ZWN0LnNldEFycmF5Mygic2FtcGxlU3BoZXJlIiwgc2FtcGxlU3BoZXJlKTsKKyAgICAgICAgICAg
ICAgICBlZmZlY3Quc2V0RmxvYXQoInNhbXBsZXNGYWN0b3IiLCBzYW1wbGVzRmFjdG9yKTsKKyAg
ICAgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoInJhbmRUZXh0dXJlVGlsZXMiLCA0LjApOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJ0b3RhbFN0cmVuZ3Ro
IiwgX3RoaXMudG90YWxTdHJlbmd0aCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoInJh
ZGl1cyIsIF90aGlzLnJhZGl1cyk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImFyZWEi
LCBfdGhpcy5hcmVhKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiZmFsbE9mZiIsIF90
aGlzLmZhbGxPZmYpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJiYXNlIiwgX3RoaXMu
YmFzZSk7CisgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZSgidGV4dHVyZVNhbXBsZXIiLCBf
dGhpcy5fZGVwdGhUZXh0dXJlKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJyYW5k
b21TYW1wbGVyIiwgX3RoaXMuX3JhbmRvbVRleHR1cmUpOworICAgICAgICB9OworICAgIH07Cisg
ICAgU1NBT1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fY3JlYXRlU1NBT0NvbWJpbmVQb3N0
UHJvY2VzcyA9IGZ1bmN0aW9uIChyYXRpbykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwor
ICAgICAgICB0aGlzLl9zc2FvQ29tYmluZVBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2Vz
X3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvc3RQcm9jZXNzIl0o
InNzYW9Db21iaW5lIiwgInNzYW9Db21iaW5lIiwgW10sIFsib3JpZ2luYWxDb2xvciIsICJ2aWV3
cG9ydCJdLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHRo
aXMuX3NjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSk7CisgICAgICAgIHRoaXMuX3NzYW9Db21iaW5l
UG9zdFByb2Nlc3Mub25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGVm
ZmVjdC5zZXRWZWN0b3I0KCJ2aWV3cG9ydCIsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJUbXBWZWN0b3JzIl0uVmVjdG9yNFswXS5jb3B5RnJvbUZsb2F0
cygwLCAwLCAxLjAsIDEuMCkpOworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9z
dFByb2Nlc3MoIm9yaWdpbmFsQ29sb3IiLCBfdGhpcy5fb3JpZ2luYWxDb2xvclBvc3RQcm9jZXNz
KTsKKyAgICAgICAgfTsKKyAgICB9OworICAgIFNTQU9SZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5
cGUuX2NyZWF0ZVJhbmRvbVRleHR1cmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzaXpl
ID0gNTEyOworICAgICAgICB0aGlzLl9yYW5kb21UZXh0dXJlID0gbmV3IF9NYXRlcmlhbHNfVGV4
dHVyZXNfZHluYW1pY1RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRHluYW1p
Y1RleHR1cmUiXSgiU1NBT1JhbmRvbVRleHR1cmUiLCBzaXplLCB0aGlzLl9zY2VuZSwgZmFsc2Us
IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJUZXh0dXJlIl0uVFJJTElORUFSX1NBTVBMSU5HTU9ERSk7CisgICAgICAgIHRoaXMuX3JhbmRv
bVRleHR1cmUud3JhcFUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVGV4dHVyZSJdLldSQVBfQUREUkVTU01PREU7CisgICAgICAgIHRo
aXMuX3JhbmRvbVRleHR1cmUud3JhcFYgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVGV4dHVyZSJdLldSQVBfQUREUkVTU01PREU7Cisg
ICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5fcmFuZG9tVGV4dHVyZS5nZXRDb250ZXh0KCk7Cisg
ICAgICAgIHZhciByYW5kID0gZnVuY3Rpb24gKG1pbiwgbWF4KSB7CisgICAgICAgICAgICByZXR1
cm4gTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluOworICAgICAgICB9OworICAgICAg
ICB2YXIgcmFuZFZlY3RvciA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8
IHNpemU7IHgrKykgeworICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBzaXplOyB5Kysp
IHsKKyAgICAgICAgICAgICAgICByYW5kVmVjdG9yLnggPSBNYXRoLmZsb29yKHJhbmQoLTEuMCwg
MS4wKSAqIDI1NSk7CisgICAgICAgICAgICAgICAgcmFuZFZlY3Rvci55ID0gTWF0aC5mbG9vcihy
YW5kKC0xLjAsIDEuMCkgKiAyNTUpOworICAgICAgICAgICAgICAgIHJhbmRWZWN0b3IueiA9IE1h
dGguZmxvb3IocmFuZCgtMS4wLCAxLjApICogMjU1KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LmZpbGxTdHlsZSA9ICdyZ2IoJyArIHJhbmRWZWN0b3IueCArICcsICcgKyByYW5kVmVjdG9yLnkg
KyAnLCAnICsgcmFuZFZlY3Rvci56ICsgJyknOworICAgICAgICAgICAgICAgIGNvbnRleHQuZmls
bFJlY3QoeCwgeSwgMSwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fcmFuZG9tVGV4dHVyZS51cGRhdGUoZmFsc2UpOworICAgIH07CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bInNlcmlhbGl6ZSJd
KSgpCisgICAgXSwgU1NBT1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgInRvdGFsU3RyZW5n
dGgiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMF9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFNTQU9SZW5kZXJpbmdQ
aXBlbGluZS5wcm90b3R5cGUsICJyYWRpdXMiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlz
Y19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIFNTQU9SZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJhcmVhIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTBfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTU0FPUmVuZGVyaW5nUGlwZWxpbmUucHJv
dG90eXBlLCAiZmFsbE9mZiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
U1NBT1JlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImJhc2UiLCB2b2lkIDApOworICAgIHJl
dHVybiBTU0FPUmVuZGVyaW5nUGlwZWxpbmU7Cit9KF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVs
aW5lX3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZSJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9QaXBlbGluZXMvc3RhbmRhcmRSZW5k
ZXJpbmdQaXBlbGluZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
UG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9QaXBlbGluZXMvc3RhbmRhcmRSZW5kZXJpbmdQ
aXBlbGluZS50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmU7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2Mv
ZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2Vy
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8u
Li9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3NjYWxhcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vTWF0aHMvbWF0aC5z
Y2FsYXIgKi8gIi4vTWF0aHMvbWF0aC5zY2FsYXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL01hdGVyaWFscy9UZXh0dXJl
cy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQ
cm9jZXNzZXMvcG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2Vzcy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5l
X3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlw
ZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZSAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRl
clBpcGVsaW5lL3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRl
ckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1Jl
bmRlckVmZmVjdCAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQcm9jZXNz
UmVuZGVyRWZmZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNz
ZXNfYmx1clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9Qb3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2VzcyAq
LyAiLi9Qb3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX2Z4YWFQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uLy4uL1Bvc3RQcm9j
ZXNzZXMvZnhhYVBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvZnhhYVBvc3RQcm9jZXNz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4v
Li4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190eXBlU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi8uLi9NaXNjL3R5cGVTdG9y
ZSAqLyAiLi9NaXNjL3R5cGVTdG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9t
b3Rpb25CbHVyUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tb3Rpb25CbHVyUG9zdFByb2Nlc3MgKi8gIi4vUG9z
dFByb2Nlc3Nlcy9tb3Rpb25CbHVyUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlclBp
cGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQ
aXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50ICov
ICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGlu
ZU1hbmFnZXJTY2VuZUNvbXBvbmVudC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9T
aGFkZXJzX3N0YW5kYXJkX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vU2hhZGVycy9zdGFuZGFyZC5mcmFnbWVu
dCAqLyAiLi9TaGFkZXJzL3N0YW5kYXJkLmZyYWdtZW50LnRzIik7CisKKworCisKKworCisKKwor
CisKKworCisKKworCisKKy8qKgorICogU3RhbmRhcmQgcmVuZGVyaW5nIHBpcGVsaW5lCisgKiBE
ZWZhdWx0IHBpcGVsaW5lIHNob3VsZCBiZSB1c2VkIGdvaW5nIGZvcndhcmQgYnV0IHRoZSBzdGFu
ZGFyZCBwaXBlbGluZSB3aWxsIGJlIGtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Lgor
ICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by91c2luZ19zdGFuZGFyZF9y
ZW5kZXJpbmdfcGlwZWxpbmUKKyAqLwordmFyIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZSwg
X3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IHBpcGVsaW5lIHNob3VsZCBiZSB1c2Vk
IGdvaW5nIGZvcndhcmQgYnV0IHRoZSBzdGFuZGFyZCBwaXBlbGluZSB3aWxsIGJlIGtlcHQgZm9y
IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorICAgICAqIEBjb25zdHJ1Y3RvcgorICAgICAqIEBw
YXJhbSBuYW1lIFRoZSByZW5kZXJpbmcgcGlwZWxpbmUgbmFtZQorICAgICAqIEBwYXJhbSBzY2Vu
ZSBUaGUgc2NlbmUgbGlua2VkIHRvIHRoaXMgcGlwZWxpbmUKKyAgICAgKiBAcGFyYW0gcmF0aW8g
VGhlIHNpemUgb2YgdGhlIHBvc3Rwcm9jZXNzZXMgKDAuNSBtZWFucyB0aGF0IHlvdXIgcG9zdHBy
b2Nlc3Mgd2lsbCBoYXZlIGEgd2lkdGggPSBjYW52YXMud2lkdGggMC41IGFuZCBhIGhlaWdodCA9
IGNhbnZhcy5oZWlnaHQgMC41KQorICAgICAqIEBwYXJhbSBvcmlnaW5hbFBvc3RQcm9jZXNzIHRo
ZSBjdXN0b20gb3JpZ2luYWwgY29sb3IgcG9zdC1wcm9jZXNzLiBNdXN0IGJlICJyZXVzYWJsZSIu
IENhbiBiZSBudWxsLgorICAgICAqIEBwYXJhbSBjYW1lcmFzIFRoZSBhcnJheSBvZiBjYW1lcmFz
IHRoYXQgdGhlIHJlbmRlcmluZyBwaXBlbGluZSB3aWxsIGJlIGF0dGFjaGVkIHRvCisgICAgICov
CisgICAgZnVuY3Rpb24gU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZShuYW1lLCBzY2VuZSwgcmF0
aW8sIG9yaWdpbmFsUG9zdFByb2Nlc3MsIGNhbWVyYXMpIHsKKyAgICAgICAgaWYgKG9yaWdpbmFs
UG9zdFByb2Nlc3MgPT09IHZvaWQgMCkgeyBvcmlnaW5hbFBvc3RQcm9jZXNzID0gbnVsbDsgfQor
ICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2VuZS5nZXRFbmdpbmUoKSwg
bmFtZSkgfHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3QtcHJvY2VzcyB1c2Vk
IHRvIGRvd24gc2NhbGUgYW4gaW1hZ2UgeDQKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmRv
d25TYW1wbGVYNFBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBv
c3QtcHJvY2VzcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaWxsdW1pbmF0ZWQgc3VyZmFjZXMgY29u
dHJvbGxlZCBieSBhIHRocmVzaG9sZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYnJpZ2h0
UGFzc1Bvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3QtcHJv
Y2VzcyBhcnJheSBzdG9yaW5nIGFsbCB0aGUgaG9yaXpvbnRhbCBibHVyIHBvc3QtcHJvY2Vzc2Vz
IHVzZWQgYnkgdGhlIHBpcGVsaW5lCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5ibHVySFBv
c3RQcm9jZXNzZXMgPSBbXTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3QtcHJvY2VzcyBh
cnJheSBzdG9yaW5nIGFsbCB0aGUgdmVydGljYWwgYmx1ciBwb3N0LXByb2Nlc3NlcyB1c2VkIGJ5
IHRoZSBwaXBlbGluZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYmx1clZQb3N0UHJvY2Vz
c2VzID0gW107CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb3N0LXByb2Nlc3MgdXNlZCB0byBh
ZGQgY29sb3JzIG9mIDIgdGV4dHVyZXMgKHR5cGljYWxseSBicmlnaHRuZXNzICsgcmVhbCBzY2Vu
ZSBjb2xvcikKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnRleHR1cmVBZGRlclBvc3RQcm9j
ZXNzID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3QtcHJvY2VzcyB1c2VkIHRv
IGNyZWF0ZSB2b2x1bWV0cmljIGxpZ2h0aW5nIGVmZmVjdAorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMudm9sdW1ldHJpY0xpZ2h0UG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICAvKioKKyAg
ICAgICAgICogUG9zdC1wcm9jZXNzIHVzZWQgdG8gc21vb3RoIHRoZSBwcmV2aW91cyB2b2x1bWV0
cmljIGxpZ2h0IHBvc3QtcHJvY2VzcyBvbiB0aGUgWCBheGlzCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy52b2x1bWV0cmljTGlnaHRTbW9vdGhYUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAg
ICAvKioKKyAgICAgICAgICogUG9zdC1wcm9jZXNzIHVzZWQgdG8gc21vb3RoIHRoZSBwcmV2aW91
cyB2b2x1bWV0cmljIGxpZ2h0IHBvc3QtcHJvY2VzcyBvbiB0aGUgWSBheGlzCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy52b2x1bWV0cmljTGlnaHRTbW9vdGhZUG9zdFByb2Nlc3MgPSBudWxs
OworICAgICAgICAvKioKKyAgICAgICAgICogUG9zdC1wcm9jZXNzIHVzZWQgdG8gbWVyZ2UgdGhl
IHZvbHVtZXRyaWMgbGlnaHQgZWZmZWN0IGFuZCB0aGUgcmVhbCBzY2VuZSBjb2xvcgorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMudm9sdW1ldHJpY0xpZ2h0TWVyZ2VQb3N0UHJvY2VzID0gbnVs
bDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3QtcHJvY2VzcyB1c2VkIHRvIHN0b3JlIHRo
ZSBmaW5hbCB2b2x1bWV0cmljIGxpZ2h0IHBvc3QtcHJvY2VzcyAoYXR0YWNoL2RldGFjaCBmb3Ig
ZGVidWcgcHVycG9zZSkKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnZvbHVtZXRyaWNMaWdo
dEZpbmFsUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogQmFzZSBw
b3N0LXByb2Nlc3MgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF2ZXJhZ2UgbHVtaW5hbmNlIG9mIHRo
ZSBmaW5hbCBpbWFnZSBmb3IgSERSCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5sdW1pbmFu
Y2VQb3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb3N0LXByb2Nl
c3NlcyB1c2VkIHRvIGNyZWF0ZSBkb3duIHNhbXBsZSBwb3N0LXByb2Nlc3NlcyBpbiBvcmRlciB0
byBnZXQKKyAgICAgICAgICogdGhlIGF2ZXJhZ2UgbHVtaW5hbmNlIG9mIHRoZSBmaW5hbCBpbWFn
ZSBmb3IgSERSCisgICAgICAgICAqIEFycmF5IG9mIGxlbmd0aCAiU3RhbmRhcmRSZW5kZXJpbmdQ
aXBlbGluZS5MdW1pbmFuY2VTdGVwcyIKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmx1bWlu
YW5jZURvd25TYW1wbGVQb3N0UHJvY2Vzc2VzID0gW107CisgICAgICAgIC8qKgorICAgICAgICAg
KiBQb3N0LXByb2Nlc3MgdXNlZCB0byBjcmVhdGUgYSBIRFIgZWZmZWN0IChsaWdodCBhZGFwdGF0
aW9uKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaGRyUG9zdFByb2Nlc3MgPSBudWxsOwor
ICAgICAgICAvKioKKyAgICAgICAgICogUG9zdC1wcm9jZXNzIHVzZWQgdG8gc3RvcmUgdGhlIGZp
bmFsIHRleHR1cmUgYWRkZXIgcG9zdC1wcm9jZXNzIChhdHRhY2gvZGV0YWNoIGZvciBkZWJ1ZyBw
dXJwb3NlKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudGV4dHVyZUFkZGVyRmluYWxQb3N0
UHJvY2VzcyA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb3N0LXByb2Nlc3MgdXNl
ZCB0byBzdG9yZSB0aGUgZmluYWwgbGVucyBmbGFyZSBwb3N0LXByb2Nlc3MgKGF0dGFjaC9kZXRh
Y2ggZm9yIGRlYnVnIHB1cnBvc2UpCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5sZW5zRmxh
cmVGaW5hbFBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3Qt
cHJvY2VzcyB1c2VkIHRvIG1lcmdlIHRoZSBmaW5hbCBIRFIgcG9zdC1wcm9jZXNzIGFuZCB0aGUg
cmVhbCBzY2VuZSBjb2xvcgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuaGRyRmluYWxQb3N0
UHJvY2VzcyA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb3N0LXByb2Nlc3MgdXNl
ZCB0byBjcmVhdGUgYSBsZW5zIGZsYXJlIGVmZmVjdAorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMubGVuc0ZsYXJlUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICog
UG9zdC1wcm9jZXNzIHRoYXQgbWVyZ2VzIHRoZSByZXN1bHQgb2YgdGhlIGxlbnMgZmxhcmUgcG9z
dC1wcm9jZXNzIGFuZCB0aGUgcmVhbCBzY2VuZSBjb2xvcgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMubGVuc0ZsYXJlQ29tcG9zZVBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFBvc3QtcHJvY2VzcyB1c2VkIHRvIGNyZWF0ZSBhIG1vdGlvbiBibHVyIGVmZmVj
dAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubW90aW9uQmx1clBvc3RQcm9jZXNzID0gbnVs
bDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvc3QtcHJvY2VzcyB1c2VkIHRvIGNyZWF0ZSBh
IGRlcHRoIG9mIGZpZWxkIGVmZmVjdAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZGVwdGhP
ZkZpZWxkUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIEZh
c3QgQXBwcm94aW1hdGUgQW50aS1BbGlhc2luZyBwb3N0IHByb2Nlc3Mgd2hpY2ggYXR0ZW1wcyB0
byByZW1vdmUgYWxpYXNpbmcgZnJvbSBhbiBpbWFnZS4KKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLmZ4YWFQb3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIC8vIFZhbHVlcworICAgICAgICAv
KioKKyAgICAgICAgICogUmVwcmVzZW50cyB0aGUgYnJpZ2h0bmVzcyB0aHJlc2hvbGQgaW4gb3Jk
ZXIgdG8gY29uZmlndXJlIHRoZSBpbGx1bWluYXRlZCBzdXJmYWNlcworICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMuYnJpZ2h0VGhyZXNob2xkID0gMS4wOworICAgICAgICAvKioKKyAgICAgICAg
ICogQ29uZmlndXJlcyB0aGUgYmx1ciBpbnRlbnNpdHkgdXNlZCBmb3Igc3VyZXhwb3NlZCBzdXJm
YWNlcyBhcmUgaGlnaGxpZ2h0ZWQgc3VyZmFjZXMgKGxpZ2h0IGhhbG8pCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5ibHVyV2lkdGggPSA1MTIuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFNldHMgaWYgdGhlIGJsdXIgZm9yIGhpZ2hsaWdodGVkIHN1cmZhY2VzIG11c3QgYmUgb25seSBo
b3Jpem9udGFsCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5ob3Jpem9udGFsQmx1ciA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogVGV4dHVyZSB1c2VkIHR5cGljYWxseSB0byBz
aW11bGF0ZSAiZGlydHkiIG9uIGNhbWVyYSBsZW5zCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5sZW5zVGV4dHVyZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXByZXNlbnRz
IHRoZSBvZmZzZXQgY29lZmZpY2llbnQgYmFzZWQgb24gUmF5bGVpZ2ggcHJpbmNpcGxlLiBUeXBp
Y2FsbHkgaW4gaW50ZXJ2YWwgWy0wLjIsIDAuMl0KKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LnZvbHVtZXRyaWNMaWdodENvZWZmaWNpZW50ID0gMC4yOworICAgICAgICAvKioKKyAgICAgICAg
ICogVGhlIG92ZXJhbGwgcG93ZXIgb2Ygdm9sdW1ldHJpYyBsaWdodHMsIHR5cGljYWxseSBpbiBp
bnRlcnZhbCBbMCwgMTBdIG1heGltdW0KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLnZvbHVt
ZXRyaWNMaWdodFBvd2VyID0gNC4wOworICAgICAgICAvKioKKyAgICAgICAgICogVXNlZCB0aGUg
c2V0IHRoZSBibHVyIGludGVuc2l0eSB0byBzbW9vdGggdGhlIHZvbHVtZXRyaWMgbGlnaHRzCisg
ICAgICAgICAqLworICAgICAgICBfdGhpcy52b2x1bWV0cmljTGlnaHRCbHVyU2NhbGUgPSA2NC4w
OworICAgICAgICAvKioKKyAgICAgICAgICogTGlnaHQgKHNwb3Qgb3IgZGlyZWN0aW9uYWwpIHVz
ZWQgdG8gZ2VuZXJhdGUgdGhlIHZvbHVtZXRyaWMgbGlnaHRzIHJheXMKKyAgICAgICAgICogVGhl
IHNvdXJjZSBsaWdodCBtdXN0IGhhdmUgYSBzaGFkb3cgZ2VuZXJhdGUgc28gdGhlIHBpcGVsaW5l
IGNhbiBnZXQgaXRzCisgICAgICAgICAqIGRlcHRoIG1hcAorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuc291cmNlTGlnaHQgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogRm9yIGV5
ZSBhZGFwdGF0aW9uLCByZXByZXNlbnRzIHRoZSBtaW5pbXVtIGx1bWluYW5jZSB0aGUgZXllIGNh
biBzZWUKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmhkck1pbmltdW1MdW1pbmFuY2UgPSAx
LjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGb3IgZXllIGFkYXB0YXRpb24sIHJlcHJlc2Vu
dHMgdGhlIGRlY3JlYXNlIGx1bWluYW5jZSBzcGVlZAorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMuaGRyRGVjcmVhc2VSYXRlID0gMC41OworICAgICAgICAvKioKKyAgICAgICAgICogRm9yIGV5
ZSBhZGFwdGF0aW9uLCByZXByZXNlbnRzIHRoZSBpbmNyZWFzZSBsdW1pbmFuY2Ugc3BlZWQKKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLmhkckluY3JlYXNlUmF0ZSA9IDAuNTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIExlbnMgY29sb3IgdGV4dHVyZSB1c2VkIGJ5IHRoZSBsZW5zIGZsYXJl
IGVmZmVjdC4gTWFuZGF0b3J5IGlmIGxlbnMgZmxhcmUgZWZmZWN0IGVuYWJsZWQKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLmxlbnNDb2xvclRleHR1cmUgPSBudWxsOworICAgICAgICAvKioK
KyAgICAgICAgICogVGhlIG92ZXJhbGwgc3RyZW5naCBmb3IgdGhlIGxlbnMgZmxhcmUgZWZmZWN0
CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5sZW5zRmxhcmVTdHJlbmd0aCA9IDIwLjA7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBEaXNwZXJzaW9uIGNvZWZmaWNpZW50IGZvciBsZW5zIGZs
YXJlIGdob3N0cworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubGVuc0ZsYXJlR2hvc3REaXNw
ZXJzYWwgPSAxLjQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBNYWluIGxlbnMgZmxhcmUgaGFs
byB3aWR0aAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubGVuc0ZsYXJlSGFsb1dpZHRoID0g
MC43OworICAgICAgICAvKioKKyAgICAgICAgICogQmFzZWQgb24gdGhlIGxlbnMgZGlzdG9ydGlv
biBlZmZlY3QsIGRlZmluZXMgaG93IG11Y2ggdGhlIGxlbnMgZmxhcmUgcmVzdWx0CisgICAgICAg
ICAqIGlzIGRpc3RvcnRlZAorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubGVuc0ZsYXJlRGlz
dG9ydGlvblN0cmVuZ3RoID0gMTYuMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbmZpZ3Vy
ZXMgdGhlIGJsdXIgaW50ZW5zaXR5IHVzZWQgZm9yIGZvciBsZW5zIGZsYXJlIChoYWxvKQorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMubGVuc0ZsYXJlQmx1cldpZHRoID0gNTEyLjA7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBMZW5zIHN0YXIgdGV4dHVyZSBtdXN0IGJlIHVzZWQgdG8gc2lt
dWxhdGUgcmF5cyBvbiB0aGUgZmxhcmVzIGFuZCBpcyBhdmFpbGFibGUKKyAgICAgICAgICogaW4g
dGhlIGRvY3VtZW50YXRpb24KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmxlbnNTdGFyVGV4
dHVyZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBcyB0aGUgImxlbnNUZXh0dXJl
IiAoY2FuIGJlIHRoZSBzYW1lIHRleHR1cmUgb3IgZGlmZmVyZW50KSwgaXQgaXMgdXNlZCB0byBh
cHBseSB0aGUgbGVucworICAgICAgICAgKiBmbGFyZSBlZmZlY3QgYnkgdGFraW5nIGFjY291bnQg
b2YgdGhlIGRpcnQgdGV4dHVyZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubGVuc0ZsYXJl
RGlydFRleHR1cmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogUmVwcmVzZW50cyB0
aGUgZm9jYWwgbGVuZ3RoIGZvciB0aGUgZGVwdGggb2YgZmllbGQgZWZmZWN0CisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5kZXB0aE9mRmllbGREaXN0YW5jZSA9IDEwLjA7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBSZXByZXNlbnRzIHRoZSBibHVyIGludGVuc2l0eSBmb3IgdGhlIGJsdXJy
ZWQgcGFydCBvZiB0aGUgZGVwdGggb2YgZmllbGQgZWZmZWN0CisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5kZXB0aE9mRmllbGRCbHVyV2lkdGggPSA2NC4wOworICAgICAgICAvKioKKyAgICAg
ICAgICogTGlzdCBvZiBhbmltYXRpb25zIGZvciB0aGUgcGlwZWxpbmUgKElBbmltYXRhYmxlIGlt
cGxlbWVudGF0aW9uKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYW5pbWF0aW9ucyA9IFtd
OworICAgICAgICBfdGhpcy5fY3VycmVudERlcHRoT2ZGaWVsZFNvdXJjZSA9IG51bGw7CisgICAg
ICAgIF90aGlzLl9maXhlZEV4cG9zdXJlID0gMS4wOworICAgICAgICBfdGhpcy5fY3VycmVudEV4
cG9zdXJlID0gMS4wOworICAgICAgICBfdGhpcy5faGRyQXV0b0V4cG9zdXJlID0gZmFsc2U7Cisg
ICAgICAgIF90aGlzLl9oZHJDdXJyZW50THVtaW5hbmNlID0gMS4wOworICAgICAgICBfdGhpcy5f
bW90aW9uU3RyZW5ndGggPSAxLjA7CisgICAgICAgIF90aGlzLl9pc09iamVjdEJhc2VkTW90aW9u
Qmx1ciA9IGZhbHNlOworICAgICAgICBfdGhpcy5fY2FtZXJhc1RvQmVBdHRhY2hlZCA9IFtdOwor
ICAgICAgICAvLyBHZXR0ZXJzIGFuZCBzZXR0ZXJzCisgICAgICAgIF90aGlzLl9ibG9vbUVuYWJs
ZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2RlcHRoT2ZGaWVsZEVuYWJsZWQgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuX3Zsc0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2xlbnNG
bGFyZUVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2hkckVuYWJsZWQgPSBmYWxzZTsK
KyAgICAgICAgX3RoaXMuX21vdGlvbkJsdXJFbmFibGVkID0gZmFsc2U7CisgICAgICAgIF90aGlz
Ll9meGFhRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBfdGhpcy5fbW90aW9uQmx1clNhbXBsZXMg
PSA2NC4wOworICAgICAgICBfdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U3RlcHNDb3VudCA9IDUwLjA7
CisgICAgICAgIF90aGlzLl9zYW1wbGVzID0gMTsKKyAgICAgICAgX3RoaXMuX2NhbWVyYXMgPSBj
YW1lcmFzIHx8IHNjZW5lLmNhbWVyYXM7CisgICAgICAgIF90aGlzLl9jYW1lcmFzID0gX3RoaXMu
X2NhbWVyYXMuc2xpY2UoKTsKKyAgICAgICAgX3RoaXMuX2NhbWVyYXNUb0JlQXR0YWNoZWQgPSBf
dGhpcy5fY2FtZXJhcy5zbGljZSgpOworICAgICAgICAvLyBJbml0aWFsaXplCisgICAgICAgIF90
aGlzLl9zY2VuZSA9IHNjZW5lOworICAgICAgICBfdGhpcy5fYmFzZVBvc3RQcm9jZXNzID0gb3Jp
Z2luYWxQb3N0UHJvY2VzczsKKyAgICAgICAgX3RoaXMuX3JhdGlvID0gcmF0aW87CisgICAgICAg
IC8vIE1pc2MKKyAgICAgICAgX3RoaXMuX2Zsb2F0VGV4dHVyZVR5cGUgPSBzY2VuZS5nZXRFbmdp
bmUoKS5nZXRDYXBzKCkudGV4dHVyZUZsb2F0UmVuZGVyID8gX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9B
VCA6IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfSEFMRl9GTE9BVDsKKyAgICAgICAgLy8gRmluaXNoCisgICAg
ICAgIHNjZW5lLnBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyLmFkZFBpcGVsaW5lKF90
aGlzKTsKKyAgICAgICAgX3RoaXMuX2J1aWxkUGlwZWxpbmUoKTsKKyAgICAgICAgcmV0dXJuIF90
aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRSZW5kZXJpbmdQ
aXBlbGluZS5wcm90b3R5cGUsICJleHBvc3VyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgdGhlIG92ZXJhbGwgZXhwb3N1cmUgdXNlZCBieSB0aGUgcGlwZWxpbmUKKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2ZpeGVkRXhwb3N1cmU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRz
IHRoZSBvdmVyYWxsIGV4cG9zdXJlIHVzZWQgYnkgdGhlIHBpcGVsaW5lCisgICAgICAgICAqLwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fZml4ZWRF
eHBvc3VyZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fY3VycmVudEV4cG9zdXJlID0gdmFs
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFy
ZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImhkckF1dG9FeHBvc3VyZSIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0aGVyIG9yIG5vdCB0aGUgZXhwb3N1cmUgb2YgdGhl
IG92ZXJhbGwgcGlwZWxpbmUgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgYWRqdXN0ZWQgYnkgdGhl
IEhEUiBwb3N0LXByb2Nlc3MKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hkckF1dG9FeHBvc3VyZTsKKyAgICAgICAgfSwK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgd2V0aGVyIG9yIG5vdCB0aGUgZXhwb3N1cmUg
b2YgdGhlIG92ZXJhbGwgcGlwZWxpbmUgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgYWRqdXN0ZWQg
YnkgdGhlIEhEUiBwb3N0LXByb2Nlc3MKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9oZHJBdXRvRXhwb3N1cmUgPSB2YWx1ZTsK
KyAgICAgICAgICAgIGlmICh0aGlzLmhkclBvc3RQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAg
dmFyIGRlZmluZXMgPSBbIiNkZWZpbmUgSERSIl07CisgICAgICAgICAgICAgICAgaWYgKHZhbHVl
KSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBBVVRPX0VYUE9T
VVJFIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuaGRyUG9zdFBy
b2Nlc3MudXBkYXRlRWZmZWN0KGRlZmluZXMuam9pbigiXG4iKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZFJlbmRl
cmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgIm1vdGlvblN0cmVuZ3RoIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBob3cgbXVjaCB0aGUgaW1hZ2UgaXMgYmx1cnJlZCBieSB0aGUgbW92
ZW1lbnQgd2hpbGUgdXNpbmcgdGhlIG1vdGlvbiBibHVyIHBvc3QtcHJvY2VzcworICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
bW90aW9uU3RyZW5ndGg7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRz
IGhvdyBtdWNoIHRoZSBpbWFnZSBpcyBibHVycmVkIGJ5IHRoZSBtb3ZlbWVudCB3aGlsZSB1c2lu
ZyB0aGUgbW90aW9uIGJsdXIgcG9zdC1wcm9jZXNzCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uIChzdHJlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5fbW90aW9uU3RyZW5ndGgg
PSBzdHJlbmd0aDsKKyAgICAgICAgICAgIGlmICh0aGlzLl9pc09iamVjdEJhc2VkTW90aW9uQmx1
ciAmJiB0aGlzLm1vdGlvbkJsdXJQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMu
bW90aW9uQmx1clBvc3RQcm9jZXNzLm1vdGlvblN0cmVuZ3RoID0gc3RyZW5ndGg7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFu
ZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgIm9iamVjdEJhc2VkTW90aW9uQmx1ciIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0aGVyIG9yIG5vdCB0aGUgbW90aW9u
IGJsdXIgcG9zdC1wcm9jZXNzIGlzIG9iamVjdCBiYXNlZCBvciBzY3JlZW4gYmFzZWQuCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9pc09iamVjdEJhc2VkTW90aW9uQmx1cjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNldHMgd2V0aGVyIG9yIG5vdCB0aGUgbW90aW9uIGJsdXIgcG9zdC1wcm9jZXNz
IHNob3VsZCBiZSBvYmplY3QgYmFzZWQgb3Igc2NyZWVuIGJhc2VkCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFyIHNob3VsZFJlYnVp
bGQgPSB0aGlzLl9pc09iamVjdEJhc2VkTW90aW9uQmx1ciAhPT0gdmFsdWU7CisgICAgICAgICAg
ICB0aGlzLl9pc09iamVjdEJhc2VkTW90aW9uQmx1ciA9IHZhbHVlOworICAgICAgICAgICAgaWYg
KHNob3VsZFJlYnVpbGQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9idWlsZFBpcGVsaW5lKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgIkJsb29tRW5hYmxlZCIs
IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgICogU3BlY2lmaWVz
IGlmIHRoZSBibG9vbSBwaXBlbGluZSBpcyBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9ibG9vbUVuYWJsZWQ7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKGVuYWJsZWQpIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9ibG9vbUVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9ibG9vbUVuYWJsZWQg
PSBlbmFibGVkOworICAgICAgICAgICAgdGhpcy5fYnVpbGRQaXBlbGluZSgpOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUsICJEZXB0aE9mRmllbGRFbmFibGVkIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogQGlnbm9yZQorICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGRlcHRoIG9mIGZp
ZWxkIHBpcGVsaW5lIGlzIGVuYWJlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGhPZkZpZWxkRW5hYmxlZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5hYmxlZCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX2RlcHRoT2ZGaWVsZEVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9kZXB0aE9mRmll
bGRFbmFibGVkID0gZW5hYmxlZDsKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkUGlwZWxpbmUoKTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkUmVu
ZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiTGVuc0ZsYXJlRW5hYmxlZCIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBsZW5z
IGZsYXJlIHBpcGVsaW5lIGlzIGVuYWJlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVuc0ZsYXJlRW5hYmxlZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5hYmxlZCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX2xlbnNGbGFyZUVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9sZW5zRmxhcmVFbmFi
bGVkID0gZW5hYmxlZDsKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkUGlwZWxpbmUoKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkUmVuZGVyaW5n
UGlwZWxpbmUucHJvdG90eXBlLCAiSERSRW5hYmxlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIEBpZ25vcmUKKyAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBIRFIgcGlwZWxpbmUgaXMg
ZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5faGRyRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAoZW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2hkckVuYWJsZWQgPT09
IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9oZHJFbmFibGVkID0gZW5hYmxlZDsKKyAgICAgICAgICAgIHRoaXMuX2J1
aWxkUGlwZWxpbmUoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiVkxTRW5hYmxlZCIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEBpZ25vcmUKKyAgICAgICAgICogU3BlY2lmaWVzIGlm
IHRoZSB2b2x1bWV0cmljIGxpZ2h0cyBzY2F0dGVyaW5nIGVmZmVjdCBpcyBlbmFibGVkCisgICAg
ICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl92bHNFbmFibGVkOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmFi
bGVkKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdmxzRW5hYmxlZCA9PT0gZW5hYmxlZCkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChl
bmFibGVkKSB7CisgICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5fc2NlbmUuZW5h
YmxlR2VvbWV0cnlCdWZmZXJSZW5kZXJlcigpOworICAgICAgICAgICAgICAgIGlmICghZ2VvbWV0
cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkxvZ2dlciJdLldhcm4oIkdlb21ldHJ5IHJlbmRlcmVyIGlzIG5vdCBzdXBw
b3J0ZWQsIGNhbm5vdCBjcmVhdGUgdm9sdW1ldHJpYyBsaWdodHMgaW4gU3RhbmRhcmQgUmVuZGVy
aW5nIFBpcGVsaW5lIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl92bHNFbmFibGVkID0gZW5h
YmxlZDsKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkUGlwZWxpbmUoKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLCAiTW90aW9uQmx1ckVuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBAaWdub3JlCisgICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbW90aW9uIGJsdXIgZWZmZWN0
IGlzIGVuYWJsZWQKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX21vdGlvbkJsdXJFbmFibGVkOworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uIChlbmFibGVkKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fbW90
aW9uQmx1ckVuYWJsZWQgPT09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9tb3Rpb25CbHVyRW5hYmxlZCA9IGVuYWJs
ZWQ7CisgICAgICAgICAgICB0aGlzLl9idWlsZFBpcGVsaW5lKCk7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnBy
b3RvdHlwZSwgImZ4YWFFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogU3BlY2lm
aWVzIGlmIGFudGktYWxpYXNpbmcgaXMgZW5hYmxlZAorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnhhYUVuYWJsZWQ7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKGVuYWJsZWQpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9meGFhRW5hYmxlZCA9PT0gZW5hYmxlZCkgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2Z4YWFFbmFibGVkID0gZW5h
YmxlZDsKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkUGlwZWxpbmUoKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLCAidm9sdW1ldHJpY0xpZ2h0U3RlcHNDb3VudCIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHN0ZXBzIHVzZWQgdG8gY2FsY3VsYXRl
IHRoZSB2b2x1bWV0cmljIGxpZ2h0cworICAgICAgICAgKiBUeXBpY2FsbHkgaW4gaW50ZXJ2YWwg
WzUwLCAyMDBdCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl92b2x1bWV0cmljTGlnaHRTdGVwc0NvdW50OworICAgICAgICB9
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb3VudCkgeworICAgICAgICAgICAgaWYgKHRoaXMu
dm9sdW1ldHJpY0xpZ2h0UG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnZvbHVt
ZXRyaWNMaWdodFBvc3RQcm9jZXNzLnVwZGF0ZUVmZmVjdCgiI2RlZmluZSBWTFNcbiNkZWZpbmUg
TkJfU1RFUFMgIiArIGNvdW50LnRvRml4ZWQoMSkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U3RlcHNDb3VudCA9IGNvdW50OworICAgICAgICB9LAor
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAg
ICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGlu
ZS5wcm90b3R5cGUsICJtb3Rpb25CbHVyU2FtcGxlcyIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdXNlZCBmb3IgdGhlIG1vdGlvbiBi
bHVyIGVmZmVjdAorICAgICAgICAgKiBUeXBpY2FsbHkgaW4gaW50ZXJ2YWwgWzE2LCA2NF0KKyAg
ICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX21vdGlvbkJsdXJTYW1wbGVzOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0
aW9uIChzYW1wbGVzKSB7CisgICAgICAgICAgICBpZiAodGhpcy5tb3Rpb25CbHVyUG9zdFByb2Nl
c3MpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNPYmplY3RCYXNlZE1vdGlvbkJsdXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3Rpb25CbHVyUG9zdFByb2Nlc3MubW90aW9u
Qmx1clNhbXBsZXMgPSBzYW1wbGVzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3Rpb25CbHVyUG9zdFByb2Nlc3Mu
dXBkYXRlRWZmZWN0KCIjZGVmaW5lIE1PVElPTl9CTFVSXG4jZGVmaW5lIE1BWF9NT1RJT05fU0FN
UExFUyAiICsgc2FtcGxlcy50b0ZpeGVkKDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl9tb3Rpb25CbHVyU2FtcGxlcyA9IHNhbXBsZXM7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZFJlbmRl
cmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgInNhbXBsZXMiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBTcGVjaWZpZXMgTVNBQSBzYW1wbGUgY291bnQsIHNldHRpbmcgdGhpcyB0byA0IHdpbGwg
cHJvdmlkZSA0eCBhbnRpIGFsaWFzaW5nLiAoZGVmYXVsdDogMSkKKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NhbXBsZXM7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHNhbXBsZUNvdW50KSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5fc2FtcGxlcyA9PT0gc2FtcGxlQ291bnQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zYW1wbGVzID0g
c2FtcGxlQ291bnQ7CisgICAgICAgICAgICB0aGlzLl9idWlsZFBpcGVsaW5lKCk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLl9idWls
ZFBpcGVsaW5lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICB2YXIgcmF0aW8gPSB0aGlzLl9yYXRpbzsKKyAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5f
c2NlbmU7CisgICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3N0UHJvY2Vzc2VzKCk7CisgICAgICAgIGlm
ICh0aGlzLl9jYW1lcmFzICE9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5wb3N0
UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5kZXRhY2hDYW1lcmFzRnJvbVJlbmRlclBpcGVs
aW5lKHRoaXMuX25hbWUsIHRoaXMuX2NhbWVyYXMpOworICAgICAgICAgICAgLy8gZ2V0IGJhY2sg
Y2FtZXJhcyB0byBiZSB1c2VkIHRvIHJlYXR0YWNoIHBpcGVsaW5lCisgICAgICAgICAgICB0aGlz
Ll9jYW1lcmFzID0gdGhpcy5fY2FtZXJhc1RvQmVBdHRhY2hlZC5zbGljZSgpOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX3Jlc2V0KCk7CisgICAgICAgIC8vIENyZWF0ZSBwYXNzIHBvc3QtcHJv
Y2VzcworICAgICAgICBpZiAoIXRoaXMuX2Jhc2VQb3N0UHJvY2VzcykgeworICAgICAgICAgICAg
dGhpcy5vcmlnaW5hbFBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQcm9jZXNzIl0oIkhEUlBhc3MiLCAi
c3RhbmRhcmQiLCBbXSwgW10sIHJhdGlvLCBudWxsLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzExX19bIkNvbnN0YW50cyJdLlRFWFRVUkVfQklMSU5FQVJfU0FN
UExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsICIjZGVmaW5lIFBBU1NfUE9TVF9Q
Uk9DRVNTIiwgdGhpcy5fZmxvYXRUZXh0dXJlVHlwZSk7CisgICAgICAgICAgICB0aGlzLm9yaWdp
bmFsUG9zdFByb2Nlc3Mub25BcHBseSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBf
dGhpcy5fY3VycmVudERlcHRoT2ZGaWVsZFNvdXJjZSA9IF90aGlzLm9yaWdpbmFsUG9zdFByb2Nl
c3M7CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5vcmlnaW5hbFBvc3RQcm9jZXNzID0gdGhpcy5fYmFzZVBvc3RQcm9jZXNzOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLl9ibG9vbUVuYWJsZWQgfHwgdGhpcy5fdmxzRW5hYmxl
ZCB8fCB0aGlzLl9sZW5zRmxhcmVFbmFibGVkIHx8IHRoaXMuX2RlcHRoT2ZGaWVsZEVuYWJsZWQg
fHwgdGhpcy5fbW90aW9uQmx1ckVuYWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuYWRkRWZmZWN0
KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJd
KHNjZW5lLmdldEVuZ2luZSgpLCAiSERSUGFzc1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24gKCkgeyBy
ZXR1cm4gX3RoaXMub3JpZ2luYWxQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnREZXB0aE9mRmllbGRTb3VyY2UgPSB0aGlzLm9yaWdpbmFsUG9z
dFByb2Nlc3M7CisgICAgICAgIGlmICh0aGlzLl9ibG9vbUVuYWJsZWQpIHsKKyAgICAgICAgICAg
IC8vIENyZWF0ZSBkb3duIHNhbXBsZSBYNCBwb3N0LXByb2Nlc3MKKyAgICAgICAgICAgIHRoaXMu
X2NyZWF0ZURvd25TYW1wbGVYNFBvc3RQcm9jZXNzKHNjZW5lLCByYXRpbyAvIDIpOworICAgICAg
ICAgICAgLy8gQ3JlYXRlIGJyaWdodCBwYXNzIHBvc3QtcHJvY2VzcworICAgICAgICAgICAgdGhp
cy5fY3JlYXRlQnJpZ2h0UGFzc1Bvc3RQcm9jZXNzKHNjZW5lLCByYXRpbyAvIDIpOworICAgICAg
ICAgICAgLy8gQ3JlYXRlIGdhdXNzaWFuIGJsdXIgcG9zdC1wcm9jZXNzZXMgKGRvd24gc2FtcGxp
bmcgYmx1cnMpCisgICAgICAgICAgICB0aGlzLl9jcmVhdGVCbHVyUG9zdFByb2Nlc3NlcyhzY2Vu
ZSwgcmF0aW8gLyA0LCAxKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0ZXh0dXJlIGFkZGVyIHBv
c3QtcHJvY2VzcworICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGV4dHVyZUFkZGVyUG9zdFByb2Nl
c3Moc2NlbmUsIHJhdGlvKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBkZXB0aC1vZi1maWVsZCBz
b3VyY2UgcG9zdC1wcm9jZXNzCisgICAgICAgICAgICB0aGlzLnRleHR1cmVBZGRlckZpbmFsUG9z
dFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siUG9zdFByb2Nlc3MiXSgiSERSRGVwdGhPZkZpZWxkU291cmNlIiwgInN0
YW5kYXJkIiwgW10sIFtdLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElO
R01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgIiNkZWZpbmUgUEFTU19QT1NUX1BST0NF
U1MiLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkNv
bnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCk7CisgICAgICAgICAgICB0aGlzLmFk
ZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5k
ZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3NSZW5kZXJF
ZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgIkhEUkJhc2VEZXB0aE9mRmllbGRTb3VyY2UiLCBm
dW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy50ZXh0dXJlQWRkZXJGaW5hbFBvc3RQcm9jZXNzOyB9
LCB0cnVlKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Zsc0VuYWJsZWQpIHsKKyAg
ICAgICAgICAgIC8vIENyZWF0ZSB2b2x1bWV0cmljIGxpZ2h0CisgICAgICAgICAgICB0aGlzLl9j
cmVhdGVWb2x1bWV0cmljTGlnaHRQb3N0UHJvY2VzcyhzY2VuZSwgcmF0aW8pOworICAgICAgICAg
ICAgLy8gQ3JlYXRlIHZvbHVtZXRyaWMgbGlnaHQgZmluYWwgcG9zdC1wcm9jZXNzCisgICAgICAg
ICAgICB0aGlzLnZvbHVtZXRyaWNMaWdodEZpbmFsUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9j
ZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUG9zdFByb2Nl
c3MiXSgiSERSVkxTRmluYWwiLCAic3RhbmRhcmQiLCBbXSwgW10sIHJhdGlvLCBudWxsLCBfTWF0
ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVGV4
dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgc2NlbmUuZ2V0RW5naW5lKCksIGZhbHNlLCAi
I2RlZmluZSBQQVNTX1BPU1RfUFJPQ0VTUyIsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5U
KTsKKyAgICAgICAgICAgIHRoaXMuYWRkRWZmZWN0KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQ
aXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fWyJQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJdKHNjZW5lLmdldEVuZ2luZSgpLCAiSERSVkxT
RmluYWwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy52b2x1bWV0cmljTGlnaHRGaW5hbFBv
c3RQcm9jZXNzOyB9LCB0cnVlKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xlbnNG
bGFyZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBsZW5zIGZsYXJlIHBvc3QtcHJv
Y2VzcworICAgICAgICAgICAgdGhpcy5fY3JlYXRlTGVuc0ZsYXJlUG9zdFByb2Nlc3Moc2NlbmUs
IHJhdGlvKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBkZXB0aC1vZi1maWVsZCBzb3VyY2UgcG9z
dC1wcm9jZXNzIHBvc3QgbGVucy1mbGFyZSBhbmQgZGlzYWJsZSBpdCBub3cKKyAgICAgICAgICAg
IHRoaXMubGVuc0ZsYXJlRmluYWxQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQb3N0UHJvY2VzcyJdKCJIRFJQ
b3N0TGVuc0ZsYXJlRGVwdGhPZkZpZWxkU291cmNlIiwgInN0YW5kYXJkIiwgW10sIFtdLCByYXRp
bywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2lu
ZSgpLCBmYWxzZSwgIiNkZWZpbmUgUEFTU19QT1NUX1BST0NFU1MiLCBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBF
X1VOU0lHTkVEX0lOVCk7CisgICAgICAgICAgICB0aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9j
ZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdp
bmUoKSwgIkhEUlBvc3RMZW5zRmxhcmVEZXB0aE9mRmllbGRTb3VyY2UiLCBmdW5jdGlvbiAoKSB7
IHJldHVybiBfdGhpcy5sZW5zRmxhcmVGaW5hbFBvc3RQcm9jZXNzOyB9LCB0cnVlKSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2hkckVuYWJsZWQpIHsKKyAgICAgICAgICAgIC8vIENy
ZWF0ZSBsdW1pbmFuY2UKKyAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUx1bWluYW5jZVBvc3RQcm9j
ZXNzZXMoc2NlbmUsIHRoaXMuX2Zsb2F0VGV4dHVyZVR5cGUpOworICAgICAgICAgICAgLy8gQ3Jl
YXRlIEhEUgorICAgICAgICAgICAgdGhpcy5fY3JlYXRlSGRyUG9zdFByb2Nlc3Moc2NlbmUsIHJh
dGlvKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBkZXB0aC1vZi1maWVsZCBzb3VyY2UgcG9zdC1w
cm9jZXNzIHBvc3QgaGRyIGFuZCBkaXNhYmxlIGl0IG5vdworICAgICAgICAgICAgdGhpcy5oZHJG
aW5hbFBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQcm9jZXNzIl0oIkhEUlBvc3RIRFJlRGVwdGhPZkZp
ZWxkU291cmNlIiwgInN0YW5kYXJkIiwgW10sIFtdLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19U
ZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRleHR1cmUiXS5C
SUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgIiNkZWZpbmUg
UEFTU19QT1NUX1BST0NFU1MiLCBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzExX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVCk7CisgICAg
ICAgICAgICB0aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVf
cG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9z
dFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgIkhEUlBvc3RIRFJlRGVw
dGhPZkZpZWxkU291cmNlIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuaGRyRmluYWxQb3N0
UHJvY2VzczsgfSwgdHJ1ZSkpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9kZXB0aE9m
RmllbGRFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgZ2F1c3NpYW4gYmx1ciB1c2Vk
IGJ5IGRlcHRoLW9mLWZpZWxkCisgICAgICAgICAgICB0aGlzLl9jcmVhdGVCbHVyUG9zdFByb2Nl
c3NlcyhzY2VuZSwgcmF0aW8gLyAyLCAzLCAiZGVwdGhPZkZpZWxkQmx1cldpZHRoIik7CisgICAg
ICAgICAgICAvLyBDcmVhdGUgZGVwdGgtb2YtZmllbGQgcG9zdC1wcm9jZXNzCisgICAgICAgICAg
ICB0aGlzLl9jcmVhdGVEZXB0aE9mRmllbGRQb3N0UHJvY2VzcyhzY2VuZSwgcmF0aW8pOworICAg
ICAgICB9CisgICAgICAgIGlmICh0aGlzLl9tb3Rpb25CbHVyRW5hYmxlZCkgeworICAgICAgICAg
ICAgLy8gQ3JlYXRlIG1vdGlvbiBibHVyIHBvc3QtcHJvY2VzcworICAgICAgICAgICAgdGhpcy5f
Y3JlYXRlTW90aW9uQmx1clBvc3RQcm9jZXNzKHNjZW5lLCByYXRpbyk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuX2Z4YWFFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgZnhh
YSBwb3N0LXByb2Nlc3MKKyAgICAgICAgICAgIHRoaXMuZnhhYVBvc3RQcm9jZXNzID0gbmV3IF9Q
b3N0UHJvY2Vzc2VzX2Z4YWFQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBf
X1siRnhhYVBvc3RQcm9jZXNzIl0oImZ4YWEiLCAxLjAsIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVy
ZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0uQklMSU5F
QVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsIF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZ
UEVfVU5TSUdORURfSU5UKTsKKyAgICAgICAgICAgIHRoaXMuYWRkRWZmZWN0KG5ldyBfUG9zdFBy
b2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fWyJQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJdKHNjZW5lLmdldEVu
Z2luZSgpLCAiSERSRnhhYSIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmZ4YWFQb3N0UHJv
Y2VzczsgfSwgdHJ1ZSkpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9jYW1lcmFzICE9
PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5wb3N0UHJvY2Vzc1JlbmRlclBpcGVs
aW5lTWFuYWdlci5hdHRhY2hDYW1lcmFzVG9SZW5kZXJQaXBlbGluZSh0aGlzLl9uYW1lLCB0aGlz
Ll9jYW1lcmFzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuX2VuYWJsZU1TQUFPbkZp
cnN0UG9zdFByb2Nlc3ModGhpcy5fc2FtcGxlcykgJiYgdGhpcy5fc2FtcGxlcyA+IDEpIHsKKyAg
ICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMb2dn
ZXIiXS5XYXJuKCJNU0FBIGZhaWxlZCB0byBlbmFibGUsIE1TQUEgaXMgb25seSBzdXBwb3J0ZWQg
aW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMID49IDIuMCIpOworICAgICAgICB9CisgICAg
fTsKKyAgICAvLyBEb3duIFNhbXBsZSBYNCBQb3N0LVByb2Nlc3NzCisgICAgU3RhbmRhcmRSZW5k
ZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2NyZWF0ZURvd25TYW1wbGVYNFBvc3RQcm9jZXNzID0g
ZnVuY3Rpb24gKHNjZW5lLCByYXRpbykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICB2YXIgZG93blNhbXBsZVg0T2Zmc2V0cyA9IG5ldyBBcnJheSgzMik7CisgICAgICAgIHRo
aXMuZG93blNhbXBsZVg0UG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nl
c3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUG9zdFByb2Nlc3MiXSgiSERSRG93blNh
bXBsZVg0IiwgInN0YW5kYXJkIiwgWyJkc09mZnNldHMiXSwgW10sIHJhdGlvLCBudWxsLCBfTWF0
ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVGV4
dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgc2NlbmUuZ2V0RW5naW5lKCksIGZhbHNlLCAi
I2RlZmluZSBET1dOX1NBTVBMRV9YNCIsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsK
KyAgICAgICAgdGhpcy5kb3duU2FtcGxlWDRQb3N0UHJvY2Vzcy5vbkFwcGx5ID0gZnVuY3Rpb24g
KGVmZmVjdCkgeworICAgICAgICAgICAgdmFyIGlkID0gMDsKKyAgICAgICAgICAgIHZhciB3aWR0
aCA9IF90aGlzLmRvd25TYW1wbGVYNFBvc3RQcm9jZXNzLndpZHRoOworICAgICAgICAgICAgdmFy
IGhlaWdodCA9IF90aGlzLmRvd25TYW1wbGVYNFBvc3RQcm9jZXNzLmhlaWdodDsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAtMjsgaSA8IDI7IGkrKykgeworICAgICAgICAgICAgICAgIGZvciAo
dmFyIGogPSAtMjsgaiA8IDI7IGorKykgeworICAgICAgICAgICAgICAgICAgICBkb3duU2FtcGxl
WDRPZmZzZXRzW2lkXSA9IChpICsgMC41KSAqICgxLjAgLyB3aWR0aCk7CisgICAgICAgICAgICAg
ICAgICAgIGRvd25TYW1wbGVYNE9mZnNldHNbaWQgKyAxXSA9IChqICsgMC41KSAqICgxLjAgLyBo
ZWlnaHQpOworICAgICAgICAgICAgICAgICAgICBpZCArPSAyOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVmZmVjdC5zZXRBcnJheTIoImRzT2Zmc2V0cyIs
IGRvd25TYW1wbGVYNE9mZnNldHMpOworICAgICAgICB9OworICAgICAgICAvLyBBZGQgdG8gcGlw
ZWxpbmUKKyAgICAgICAgdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBp
cGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84
X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5lKCksICJIRFJEb3du
U2FtcGxlWDQiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5kb3duU2FtcGxlWDRQb3N0UHJv
Y2VzczsgfSwgdHJ1ZSkpOworICAgIH07CisgICAgLy8gQnJpZ2h0cGFzcyBQb3N0LVByb2Nlc3MK
KyAgICBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fY3JlYXRlQnJpZ2h0UGFz
c1Bvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHNjZW5lLCByYXRpbykgeworICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICB2YXIgYnJpZ2h0T2Zmc2V0cyA9IG5ldyBBcnJheSg4KTsKKyAg
ICAgICAgdGhpcy5icmlnaHRQYXNzUG9zdFByb2Nlc3MgPSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9z
dFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siUG9zdFByb2Nlc3MiXSgiSERS
QnJpZ2h0UGFzcyIsICJzdGFuZGFyZCIsIFsiZHNPZmZzZXRzIiwgImJyaWdodFRocmVzaG9sZCJd
LCBbXSwgcmF0aW8sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2Vu
ZS5nZXRFbmdpbmUoKSwgZmFsc2UsICIjZGVmaW5lIEJSSUdIVF9QQVNTIiwgX0VuZ2luZXNfY29u
c3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5URVhUVVJF
VFlQRV9VTlNJR05FRF9JTlQpOworICAgICAgICB0aGlzLmJyaWdodFBhc3NQb3N0UHJvY2Vzcy5v
bkFwcGx5ID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAgdmFyIHNVID0gKDEuMCAv
IF90aGlzLmJyaWdodFBhc3NQb3N0UHJvY2Vzcy53aWR0aCk7CisgICAgICAgICAgICB2YXIgc1Yg
PSAoMS4wIC8gX3RoaXMuYnJpZ2h0UGFzc1Bvc3RQcm9jZXNzLmhlaWdodCk7CisgICAgICAgICAg
ICBicmlnaHRPZmZzZXRzWzBdID0gLTAuNSAqIHNVOworICAgICAgICAgICAgYnJpZ2h0T2Zmc2V0
c1sxXSA9IDAuNSAqIHNWOworICAgICAgICAgICAgYnJpZ2h0T2Zmc2V0c1syXSA9IDAuNSAqIHNV
OworICAgICAgICAgICAgYnJpZ2h0T2Zmc2V0c1szXSA9IDAuNSAqIHNWOworICAgICAgICAgICAg
YnJpZ2h0T2Zmc2V0c1s0XSA9IC0wLjUgKiBzVTsKKyAgICAgICAgICAgIGJyaWdodE9mZnNldHNb
NV0gPSAtMC41ICogc1Y7CisgICAgICAgICAgICBicmlnaHRPZmZzZXRzWzZdID0gMC41ICogc1U7
CisgICAgICAgICAgICBicmlnaHRPZmZzZXRzWzddID0gLTAuNSAqIHNWOworICAgICAgICAgICAg
ZWZmZWN0LnNldEFycmF5MigiZHNPZmZzZXRzIiwgYnJpZ2h0T2Zmc2V0cyk7CisgICAgICAgICAg
ICBlZmZlY3Quc2V0RmxvYXQoImJyaWdodFRocmVzaG9sZCIsIF90aGlzLmJyaWdodFRocmVzaG9s
ZCk7CisgICAgICAgIH07CisgICAgICAgIC8vIEFkZCB0byBwaXBlbGluZQorICAgICAgICB0aGlz
LmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NS
ZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3NSZW5k
ZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgIkhEUkJyaWdodFBhc3MiLCBmdW5jdGlvbiAo
KSB7IHJldHVybiBfdGhpcy5icmlnaHRQYXNzUG9zdFByb2Nlc3M7IH0sIHRydWUpKTsKKyAgICB9
OworICAgIC8vIENyZWF0ZSBibHVyIEgmViBwb3N0LXByb2Nlc3NlcworICAgIFN0YW5kYXJkUmVu
ZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLl9jcmVhdGVCbHVyUG9zdFByb2Nlc3NlcyA9IGZ1bmN0
aW9uIChzY2VuZSwgcmF0aW8sIGluZGljZSwgYmx1cldpZHRoS2V5KSB7CisgICAgICAgIHZhciBf
dGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChibHVyV2lkdGhLZXkgPT09IHZvaWQgMCkgeyBibHVy
V2lkdGhLZXkgPSAiYmx1cldpZHRoIjsgfQorICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0
RW5naW5lKCk7CisgICAgICAgIHZhciBibHVyWCA9IG5ldyBfUG9zdFByb2Nlc3Nlc19ibHVyUG9z
dFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQmx1clBvc3RQcm9jZXNzIl0o
IkhEUkJsdXJIIiArICJfIiArIGluZGljZSwgbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IyIl0oMSwgMCksIHRoaXNbYmx1cldpZHRoS2V5
XSwgcmF0aW8sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5n
ZXRFbmdpbmUoKSwgZmFsc2UsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAg
ICAgdmFyIGJsdXJZID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX2JsdXJQb3N0UHJvY2Vzc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfOV9fWyJCbHVyUG9zdFByb2Nlc3MiXSgiSERSQmx1clYiICsgIl8i
ICsgaW5kaWNlLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlY3RvcjIiXSgwLCAxKSwgdGhpc1tibHVyV2lkdGhLZXldLCByYXRpbywgbnVsbCwg
X01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19b
IlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxz
ZSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQpOworICAgICAgICBibHVyWC5vbkFjdGl2
YXRlT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGR3ID0gYmx1
clgud2lkdGggLyBlbmdpbmUuZ2V0UmVuZGVyV2lkdGgoKTsKKyAgICAgICAgICAgIGJsdXJYLmtl
cm5lbCA9IF90aGlzW2JsdXJXaWR0aEtleV0gKiBkdzsKKyAgICAgICAgfSk7CisgICAgICAgIGJs
dXJZLm9uQWN0aXZhdGVPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2
YXIgZHcgPSBibHVyWS5oZWlnaHQgLyBlbmdpbmUuZ2V0UmVuZGVySGVpZ2h0KCk7CisgICAgICAg
ICAgICBibHVyWS5rZXJuZWwgPSBfdGhpcy5ob3Jpem9udGFsQmx1ciA/IDY0ICogZHcgOiBfdGhp
c1tibHVyV2lkdGhLZXldICogZHc7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLmFkZEVmZmVj
dChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3Qi
XShzY2VuZS5nZXRFbmdpbmUoKSwgIkhEUkJsdXJIIiArIGluZGljZSwgZnVuY3Rpb24gKCkgeyBy
ZXR1cm4gYmx1clg7IH0sIHRydWUpKTsKKyAgICAgICAgdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0
UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0
RW5naW5lKCksICJIRFJCbHVyViIgKyBpbmRpY2UsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJsdXJZ
OyB9LCB0cnVlKSk7CisgICAgICAgIHRoaXMuYmx1ckhQb3N0UHJvY2Vzc2VzLnB1c2goYmx1clgp
OworICAgICAgICB0aGlzLmJsdXJWUG9zdFByb2Nlc3Nlcy5wdXNoKGJsdXJZKTsKKyAgICB9Owor
ICAgIC8vIENyZWF0ZSB0ZXh0dXJlIGFkZGVyIHBvc3QtcHJvY2VzcworICAgIFN0YW5kYXJkUmVu
ZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLl9jcmVhdGVUZXh0dXJlQWRkZXJQb3N0UHJvY2VzcyA9
IGZ1bmN0aW9uIChzY2VuZSwgcmF0aW8pIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAg
ICAgICAgdGhpcy50ZXh0dXJlQWRkZXJQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19w
b3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQb3N0UHJvY2VzcyJdKCJI
RFJUZXh0dXJlQWRkZXIiLCAic3RhbmRhcmQiLCBbImV4cG9zdXJlIl0sIFsib3RoZXJTYW1wbGVy
IiwgImxlbnNTYW1wbGVyIl0sIHJhdGlvLCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBM
SU5HTU9ERSwgc2NlbmUuZ2V0RW5naW5lKCksIGZhbHNlLCAiI2RlZmluZSBURVhUVVJFX0FEREVS
IiwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQpOworICAgICAgICB0aGlzLnRleHR1cmVB
ZGRlclBvc3RQcm9jZXNzLm9uQXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAg
ICBlZmZlY3Quc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2Vzcygib3RoZXJTYW1wbGVyIiwgX3RoaXMu
X3Zsc0VuYWJsZWQgPyBfdGhpcy5fY3VycmVudERlcHRoT2ZGaWVsZFNvdXJjZSA6IF90aGlzLm9y
aWdpbmFsUG9zdFByb2Nlc3MpOworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoImxlbnNT
YW1wbGVyIiwgX3RoaXMubGVuc1RleHR1cmUpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0
KCJleHBvc3VyZSIsIF90aGlzLl9jdXJyZW50RXhwb3N1cmUpOworICAgICAgICAgICAgX3RoaXMu
X2N1cnJlbnREZXB0aE9mRmllbGRTb3VyY2UgPSBfdGhpcy50ZXh0dXJlQWRkZXJGaW5hbFBvc3RQ
cm9jZXNzOworICAgICAgICB9OworICAgICAgICAvLyBBZGQgdG8gcGlwZWxpbmUKKyAgICAgICAg
dGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9j
ZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBvc3RQcm9jZXNz
UmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5lKCksICJIRFJUZXh0dXJlQWRkZXIiLCBmdW5j
dGlvbiAoKSB7IHJldHVybiBfdGhpcy50ZXh0dXJlQWRkZXJQb3N0UHJvY2VzczsgfSwgdHJ1ZSkp
OworICAgIH07CisgICAgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2NyZWF0
ZVZvbHVtZXRyaWNMaWdodFBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHNjZW5lLCByYXRpbykgewor
ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgZ2VvbWV0cnlSZW5kZXJlciA9
IHNjZW5lLmVuYWJsZUdlb21ldHJ5QnVmZmVyUmVuZGVyZXIoKTsKKyAgICAgICAgZ2VvbWV0cnlS
ZW5kZXJlci5lbmFibGVQb3NpdGlvbiA9IHRydWU7CisgICAgICAgIHZhciBnZW9tZXRyeSA9IGdl
b21ldHJ5UmVuZGVyZXIuZ2V0R0J1ZmZlcigpOworICAgICAgICAvLyBCYXNlIHBvc3QtcHJvY2Vz
cworICAgICAgICB0aGlzLnZvbHVtZXRyaWNMaWdodFBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJv
Y2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQcm9j
ZXNzIl0oIkhEUlZMUyIsICJzdGFuZGFyZCIsIFsic2hhZG93Vmlld1Byb2plY3Rpb24iLCAiY2Ft
ZXJhUG9zaXRpb24iLCAic3VuRGlyZWN0aW9uIiwgInN1bkNvbG9yIiwgInNjYXR0ZXJpbmdDb2Vm
ZmljaWVudCIsICJzY2F0dGVyaW5nUG93ZXIiLCAiZGVwdGhWYWx1ZXMiXSwgWyJzaGFkb3dNYXBT
YW1wbGVyIiwgInBvc2l0aW9uU2FtcGxlciJdLCByYXRpbyAvIDgsIG51bGwsIF9NYXRlcmlhbHNf
VGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0u
QklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsICIjZGVmaW5l
IFZMU1xuI2RlZmluZSBOQl9TVEVQUyAiICsgdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U3RlcHNDb3Vu
dC50b0ZpeGVkKDEpKTsKKyAgICAgICAgdmFyIGRlcHRoVmFsdWVzID0gX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjIiXS5aZXJvKCk7CisgICAg
ICAgIHRoaXMudm9sdW1ldHJpY0xpZ2h0UG9zdFByb2Nlc3Mub25BcHBseSA9IGZ1bmN0aW9uIChl
ZmZlY3QpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5zb3VyY2VMaWdodCAmJiBfdGhpcy5zb3Vy
Y2VMaWdodC5nZXRTaGFkb3dHZW5lcmF0b3IoKSAmJiBfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJh
KSB7CisgICAgICAgICAgICAgICAgdmFyIGdlbmVyYXRvciA9IF90aGlzLnNvdXJjZUxpZ2h0Lmdl
dFNoYWRvd0dlbmVyYXRvcigpOworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJz
aGFkb3dNYXBTYW1wbGVyIiwgZ2VuZXJhdG9yLmdldFNoYWRvd01hcCgpKTsKKyAgICAgICAgICAg
ICAgICBlZmZlY3Quc2V0VGV4dHVyZSgicG9zaXRpb25TYW1wbGVyIiwgZ2VvbWV0cnkudGV4dHVy
ZXNbMl0pOworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRDb2xvcjMoInN1bkNvbG9yIiwgX3Ro
aXMuc291cmNlTGlnaHQuZGlmZnVzZSk7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldFZlY3Rv
cjMoInN1bkRpcmVjdGlvbiIsIF90aGlzLnNvdXJjZUxpZ2h0LmdldFNoYWRvd0RpcmVjdGlvbigp
KTsKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0VmVjdG9yMygiY2FtZXJhUG9zaXRpb24iLCBf
dGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLmdsb2JhbFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAg
ICBlZmZlY3Quc2V0TWF0cml4KCJzaGFkb3dWaWV3UHJvamVjdGlvbiIsIGdlbmVyYXRvci5nZXRU
cmFuc2Zvcm1NYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJzY2F0
dGVyaW5nQ29lZmZpY2llbnQiLCBfdGhpcy52b2x1bWV0cmljTGlnaHRDb2VmZmljaWVudCk7Cisg
ICAgICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJzY2F0dGVyaW5nUG93ZXIiLCBfdGhpcy52
b2x1bWV0cmljTGlnaHRQb3dlcik7CisgICAgICAgICAgICAgICAgZGVwdGhWYWx1ZXMueCA9IF90
aGlzLnNvdXJjZUxpZ2h0LmdldERlcHRoTWluWihfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhKTsK
KyAgICAgICAgICAgICAgICBkZXB0aFZhbHVlcy55ID0gX3RoaXMuc291cmNlTGlnaHQuZ2V0RGVw
dGhNYXhaKF90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEpOworICAgICAgICAgICAgICAgIGVmZmVj
dC5zZXRWZWN0b3IyKCJkZXB0aFZhbHVlcyIsIGRlcHRoVmFsdWVzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vzc2VzX1Jl
bmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5lKCksICJI
RFJWTFMiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy52b2x1bWV0cmljTGlnaHRQb3N0UHJv
Y2VzczsgfSwgdHJ1ZSkpOworICAgICAgICAvLyBTbW9vdGgKKyAgICAgICAgdGhpcy5fY3JlYXRl
Qmx1clBvc3RQcm9jZXNzZXMoc2NlbmUsIHJhdGlvIC8gNCwgMCwgInZvbHVtZXRyaWNMaWdodEJs
dXJTY2FsZSIpOworICAgICAgICAvLyBNZXJnZQorICAgICAgICB0aGlzLnZvbHVtZXRyaWNMaWdo
dE1lcmdlUG9zdFByb2NlcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJvY2Vzc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQb3N0UHJvY2VzcyJdKCJIRFJWTFNNZXJnZSIsICJzdGFu
ZGFyZCIsIFtdLCBbIm9yaWdpbmFsU2FtcGxlciJdLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19U
ZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRleHR1cmUiXS5C
SUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgIiNkZWZpbmUg
VkxTTUVSR0UiKTsKKyAgICAgICAgdGhpcy52b2x1bWV0cmljTGlnaHRNZXJnZVBvc3RQcm9jZXMu
b25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0
dXJlRnJvbVBvc3RQcm9jZXNzKCJvcmlnaW5hbFNhbXBsZXIiLCBfdGhpcy5fYmxvb21FbmFibGVk
ID8gX3RoaXMudGV4dHVyZUFkZGVyRmluYWxQb3N0UHJvY2VzcyA6IF90aGlzLm9yaWdpbmFsUG9z
dFByb2Nlc3MpOworICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnREZXB0aE9mRmllbGRTb3VyY2Ug
PSBfdGhpcy52b2x1bWV0cmljTGlnaHRGaW5hbFBvc3RQcm9jZXNzOworICAgICAgICB9OworICAg
ICAgICB0aGlzLmFkZEVmZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9z
dFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFBy
b2Nlc3NSZW5kZXJFZmZlY3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgIkhEUlZMU01lcmdlIiwgZnVu
Y3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudm9sdW1ldHJpY0xpZ2h0TWVyZ2VQb3N0UHJvY2VzOyB9
LCB0cnVlKSk7CisgICAgfTsKKyAgICAvLyBDcmVhdGUgbHVtaW5hbmNlCisgICAgU3RhbmRhcmRS
ZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2NyZWF0ZUx1bWluYW5jZVBvc3RQcm9jZXNzZXMg
PSBmdW5jdGlvbiAoc2NlbmUsIHRleHR1cmVUeXBlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRo
aXM7CisgICAgICAgIC8vIENyZWF0ZSBsdW1pbmFuY2UKKyAgICAgICAgdmFyIHNpemUgPSBNYXRo
LnBvdygzLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLkx1bWluYW5jZVN0ZXBzKTsKKyAgICAg
ICAgdGhpcy5sdW1pbmFuY2VQb3N0UHJvY2VzcyA9IG5ldyBfUG9zdFByb2Nlc3Nlc19wb3N0UHJv
Y2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJQb3N0UHJvY2VzcyJdKCJIRFJMdW1p
bmFuY2UiLCAic3RhbmRhcmQiLCBbImx1bU9mZnNldHMiXSwgW10sIHsgd2lkdGg6IHNpemUsIGhl
aWdodDogc2l6ZSB9LCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgc2Nl
bmUuZ2V0RW5naW5lKCksIGZhbHNlLCAiI2RlZmluZSBMVU1JTkFOQ0UiLCB0ZXh0dXJlVHlwZSk7
CisgICAgICAgIHZhciBvZmZzZXRzID0gW107CisgICAgICAgIHRoaXMubHVtaW5hbmNlUG9zdFBy
b2Nlc3Mub25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIHZhciBzVSA9
ICgxLjAgLyBfdGhpcy5sdW1pbmFuY2VQb3N0UHJvY2Vzcy53aWR0aCk7CisgICAgICAgICAgICB2
YXIgc1YgPSAoMS4wIC8gX3RoaXMubHVtaW5hbmNlUG9zdFByb2Nlc3MuaGVpZ2h0KTsKKyAgICAg
ICAgICAgIG9mZnNldHNbMF0gPSAtMC41ICogc1U7CisgICAgICAgICAgICBvZmZzZXRzWzFdID0g
MC41ICogc1Y7CisgICAgICAgICAgICBvZmZzZXRzWzJdID0gMC41ICogc1U7CisgICAgICAgICAg
ICBvZmZzZXRzWzNdID0gMC41ICogc1Y7CisgICAgICAgICAgICBvZmZzZXRzWzRdID0gLTAuNSAq
IHNVOworICAgICAgICAgICAgb2Zmc2V0c1s1XSA9IC0wLjUgKiBzVjsKKyAgICAgICAgICAgIG9m
ZnNldHNbNl0gPSAwLjUgKiBzVTsKKyAgICAgICAgICAgIG9mZnNldHNbN10gPSAtMC41ICogc1Y7
CisgICAgICAgICAgICBlZmZlY3Quc2V0QXJyYXkyKCJsdW1PZmZzZXRzIiwgb2Zmc2V0cyk7Cisg
ICAgICAgIH07CisgICAgICAgIC8vIEFkZCB0byBwaXBlbGluZQorICAgICAgICB0aGlzLmFkZEVm
ZmVjdChuZXcgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJF
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZl
Y3QiXShzY2VuZS5nZXRFbmdpbmUoKSwgIkhEUkx1bWluYW5jZSIsIGZ1bmN0aW9uICgpIHsgcmV0
dXJuIF90aGlzLmx1bWluYW5jZVBvc3RQcm9jZXNzOyB9LCB0cnVlKSk7CisgICAgICAgIC8vIENy
ZWF0ZSBkb3duIHNhbXBsZSBsdW1pbmFuY2UKKyAgICAgICAgZm9yICh2YXIgaSA9IFN0YW5kYXJk
UmVuZGVyaW5nUGlwZWxpbmUuTHVtaW5hbmNlU3RlcHMgLSAxOyBpID49IDA7IGktLSkgeworICAg
ICAgICAgICAgdmFyIHNpemUgPSBNYXRoLnBvdygzLCBpKTsKKyAgICAgICAgICAgIHZhciBkZWZp
bmVzID0gIiNkZWZpbmUgTFVNSU5BTkNFX0RPV05fU0FNUExFXG4iOworICAgICAgICAgICAgaWYg
KGkgPT09IDApIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzICs9ICIjZGVmaW5lIEZJTkFMX0RP
V05fU0FNUExFUiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcG9zdFByb2Nlc3Mg
PSBuZXcgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzZfX1siUG9zdFByb2Nlc3MiXSgiSERSTHVtaW5hbmNlRG93blNhbXBsZSIgKyBpLCAic3RhbmRh
cmQiLCBbImRzT2Zmc2V0cyIsICJoYWxmRGVzdFBpeGVsU2l6ZSJdLCBbXSwgeyB3aWR0aDogc2l6
ZSwgaGVpZ2h0OiBzaXplIH0sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RF
LCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsIGRlZmluZXMsIHRleHR1cmVUeXBlKTsKKyAgICAg
ICAgICAgIHRoaXMubHVtaW5hbmNlRG93blNhbXBsZVBvc3RQcm9jZXNzZXMucHVzaChwb3N0UHJv
Y2Vzcyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ3JlYXRlIGNhbGxiYWNrcyBhbmQgYWRkIGVm
ZmVjdHMKKyAgICAgICAgdmFyIGxhc3RMdW1pbmFuY2UgPSB0aGlzLmx1bWluYW5jZVBvc3RQcm9j
ZXNzOworICAgICAgICB0aGlzLmx1bWluYW5jZURvd25TYW1wbGVQb3N0UHJvY2Vzc2VzLmZvckVh
Y2goZnVuY3Rpb24gKHBwLCBpbmRleCkgeworICAgICAgICAgICAgdmFyIGRvd25TYW1wbGVPZmZz
ZXRzID0gbmV3IEFycmF5KDE4KTsKKyAgICAgICAgICAgIHBwLm9uQXBwbHkgPSBmdW5jdGlvbiAo
ZWZmZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKCFsYXN0THVtaW5hbmNlKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dmFyIGlkID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gLTE7IHggPCAyOyB4Kysp
IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IC0xOyB5IDwgMjsgeSsrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkb3duU2FtcGxlT2Zmc2V0c1tpZF0gPSB4IC8gbGFzdEx1
bWluYW5jZS53aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvd25TYW1wbGVPZmZzZXRz
W2lkICsgMV0gPSB5IC8gbGFzdEx1bWluYW5jZS5oZWlnaHQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZCArPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRBcnJheTIoImRzT2Zmc2V0cyIsIGRvd25TYW1wbGVP
ZmZzZXRzKTsKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImhhbGZEZXN0UGl4ZWxT
aXplIiwgMC41IC8gbGFzdEx1bWluYW5jZS53aWR0aCk7CisgICAgICAgICAgICAgICAgaWYgKGlu
ZGV4ID09PSBfdGhpcy5sdW1pbmFuY2VEb3duU2FtcGxlUG9zdFByb2Nlc3Nlcy5sZW5ndGggLSAx
KSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3RMdW1pbmFuY2UgPSBfdGhpcy5sdW1pbmFuY2VQ
b3N0UHJvY2VzczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGxhc3RMdW1pbmFuY2UgPSBwcDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKGluZGV4ID09PSBfdGhpcy5sdW1pbmFu
Y2VEb3duU2FtcGxlUG9zdFByb2Nlc3Nlcy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAg
cHAub25BZnRlclJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHBpeGVsID0gc2NlbmUuZ2V0RW5naW5lKCkucmVhZFBpeGVscygwLCAwLCAxLCAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGJpdF9zaGlmdCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yNCJdKDEuMCAvICgyNTUuMCAqIDI1NS4w
ICogMjU1LjApLCAxLjAgLyAoMjU1LjAgKiAyNTUuMCksIDEuMCAvIDI1NS4wLCAxLjApOworICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5faGRyQ3VycmVudEx1bWluYW5jZSA9IChwaXhlbFswXSAq
IGJpdF9zaGlmdC54ICsgcGl4ZWxbMV0gKiBiaXRfc2hpZnQueSArIHBpeGVsWzJdICogYml0X3No
aWZ0LnogKyBwaXhlbFszXSAqIGJpdF9zaGlmdC53KSAvIDEwMC4wOworICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0
UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV84X19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0
RW5naW5lKCksICJIRFJMdW1pbmFuY2VEb3duU2FtcGxlIiArIGluZGV4LCBmdW5jdGlvbiAoKSB7
IHJldHVybiBwcDsgfSwgdHJ1ZSkpOworICAgICAgICB9KTsKKyAgICB9OworICAgIC8vIENyZWF0
ZSBIRFIgcG9zdC1wcm9jZXNzCisgICAgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5
cGUuX2NyZWF0ZUhkclBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHNjZW5lLCByYXRpbykgeworICAg
ICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICB2YXIgZGVmaW5lcyA9IFsiI2RlZmluZSBI
RFIiXTsKKyAgICAgICAgaWYgKHRoaXMuX2hkckF1dG9FeHBvc3VyZSkgeworICAgICAgICAgICAg
ZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEFVVE9fRVhQT1NVUkUiKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLmhkclBvc3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBvc3RQcm9jZXNzIl0oIkhEUiIsICJzdGFuZGFy
ZCIsIFsiYXZlcmFnZUx1bWluYW5jZSJdLCBbInRleHR1cmVBZGRlclNhbXBsZXIiXSwgcmF0aW8s
IG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUo
KSwgZmFsc2UsIGRlZmluZXMuam9pbigiXG4iKSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9J
TlQpOworICAgICAgICB2YXIgb3V0cHV0TGltaW5hbmNlID0gMTsKKyAgICAgICAgdmFyIHRpbWUg
PSAwOworICAgICAgICB2YXIgbGFzdFRpbWUgPSAwOworICAgICAgICB0aGlzLmhkclBvc3RQcm9j
ZXNzLm9uQXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0
VGV4dHVyZUZyb21Qb3N0UHJvY2VzcygidGV4dHVyZUFkZGVyU2FtcGxlciIsIF90aGlzLl9jdXJy
ZW50RGVwdGhPZkZpZWxkU291cmNlKTsKKyAgICAgICAgICAgIHRpbWUgKz0gc2NlbmUuZ2V0RW5n
aW5lKCkuZ2V0RGVsdGFUaW1lKCk7CisgICAgICAgICAgICBpZiAob3V0cHV0TGltaW5hbmNlIDwg
MCkgeworICAgICAgICAgICAgICAgIG91dHB1dExpbWluYW5jZSA9IF90aGlzLl9oZHJDdXJyZW50
THVtaW5hbmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgdmFyIGR0ID0gKGxhc3RUaW1lIC0gdGltZSkgLyAxMDAwLjA7CisgICAgICAgICAgICAg
ICAgaWYgKF90aGlzLl9oZHJDdXJyZW50THVtaW5hbmNlIDwgb3V0cHV0TGltaW5hbmNlICsgX3Ro
aXMuaGRyRGVjcmVhc2VSYXRlICogZHQpIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0TGlt
aW5hbmNlICs9IF90aGlzLmhkckRlY3JlYXNlUmF0ZSAqIGR0OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5faGRyQ3VycmVudEx1bWluYW5jZSA+IG91
dHB1dExpbWluYW5jZSAtIF90aGlzLmhkckluY3JlYXNlUmF0ZSAqIGR0KSB7CisgICAgICAgICAg
ICAgICAgICAgIG91dHB1dExpbWluYW5jZSAtPSBfdGhpcy5oZHJJbmNyZWFzZVJhdGUgKiBkdDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIG91dHB1dExpbWluYW5jZSA9IF90aGlzLl9oZHJDdXJyZW50THVtaW5hbmNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfdGhpcy5oZHJB
dXRvRXhwb3N1cmUpIHsKKyAgICAgICAgICAgICAgICBfdGhpcy5fY3VycmVudEV4cG9zdXJlID0g
X3RoaXMuX2ZpeGVkRXhwb3N1cmUgLyBvdXRwdXRMaW1pbmFuY2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRMaW1pbmFuY2UgPSBfTWF0
aHNfbWF0aF9zY2FsYXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2NhbGFyIl0uQ2xh
bXAob3V0cHV0TGltaW5hbmNlLCBfdGhpcy5oZHJNaW5pbXVtTHVtaW5hbmNlLCAxZTIwKTsKKyAg
ICAgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImF2ZXJhZ2VMdW1pbmFuY2UiLCBvdXRwdXRM
aW1pbmFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGFzdFRpbWUgPSB0aW1lOwor
ICAgICAgICAgICAgX3RoaXMuX2N1cnJlbnREZXB0aE9mRmllbGRTb3VyY2UgPSBfdGhpcy5oZHJG
aW5hbFBvc3RQcm9jZXNzOworICAgICAgICB9OworICAgICAgICB0aGlzLmFkZEVmZmVjdChuZXcg
X1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXShzY2Vu
ZS5nZXRFbmdpbmUoKSwgIkhEUiIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmhkclBvc3RQ
cm9jZXNzOyB9LCB0cnVlKSk7CisgICAgfTsKKyAgICAvLyBDcmVhdGUgbGVucyBmbGFyZSBwb3N0
LXByb2Nlc3MKKyAgICBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fY3JlYXRl
TGVuc0ZsYXJlUG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAoc2NlbmUsIHJhdGlvKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMubGVuc0ZsYXJlUG9zdFByb2Nlc3MgPSBu
ZXcgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siUG9zdFByb2Nlc3MiXSgiSERSTGVuc0ZsYXJlIiwgInN0YW5kYXJkIiwgWyJzdHJlbmd0aCIs
ICJnaG9zdERpc3BlcnNhbCIsICJoYWxvV2lkdGgiLCAicmVzb2x1dGlvbiIsICJkaXN0b3J0aW9u
U3RyZW5ndGgiXSwgWyJsZW5zQ29sb3JTYW1wbGVyIl0sIHJhdGlvIC8gMiwgbnVsbCwgX01hdGVy
aWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRleHR1
cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgIiNk
ZWZpbmUgTEVOU19GTEFSRSIsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAg
ICAgdGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQ
cm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBvc3RQcm9j
ZXNzUmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5lKCksICJIRFJMZW5zRmxhcmUiLCBmdW5j
dGlvbiAoKSB7IHJldHVybiBfdGhpcy5sZW5zRmxhcmVQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOwor
ICAgICAgICB0aGlzLl9jcmVhdGVCbHVyUG9zdFByb2Nlc3NlcyhzY2VuZSwgcmF0aW8gLyA0LCAy
LCAibGVuc0ZsYXJlQmx1cldpZHRoIik7CisgICAgICAgIHRoaXMubGVuc0ZsYXJlQ29tcG9zZVBv
c3RQcm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIlBvc3RQcm9jZXNzIl0oIkhEUkxlbnNGbGFyZUNvbXBvc2UiLCAic3Rh
bmRhcmQiLCBbImxlbnNTdGFyTWF0cml4Il0sIFsib3RoZXJTYW1wbGVyIiwgImxlbnNEaXJ0U2Ft
cGxlciIsICJsZW5zU3RhclNhbXBsZXIiXSwgcmF0aW8sIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVy
ZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUZXh0dXJlIl0uQklMSU5F
QVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsICIjZGVmaW5lIExFTlNf
RkxBUkVfQ09NUE9TRSIsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAgICAg
dGhpcy5hZGRFZmZlY3QobmV3IF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9j
ZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlBvc3RQcm9jZXNz
UmVuZGVyRWZmZWN0Il0oc2NlbmUuZ2V0RW5naW5lKCksICJIRFJMZW5zRmxhcmVDb21wb3NlIiwg
ZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMubGVuc0ZsYXJlQ29tcG9zZVBvc3RQcm9jZXNzOyB9
LCB0cnVlKSk7CisgICAgICAgIHZhciByZXNvbHV0aW9uID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IyIl0oMCwgMCk7CisgICAgICAg
IC8vIExlbnMgZmxhcmUKKyAgICAgICAgdGhpcy5sZW5zRmxhcmVQb3N0UHJvY2Vzcy5vbkFwcGx5
ID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9t
UG9zdFByb2Nlc3MoInRleHR1cmVTYW1wbGVyIiwgX3RoaXMuX2Jsb29tRW5hYmxlZCA/IF90aGlz
LmJsdXJIUG9zdFByb2Nlc3Nlc1swXSA6IF90aGlzLm9yaWdpbmFsUG9zdFByb2Nlc3MpOworICAg
ICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoImxlbnNDb2xvclNhbXBsZXIiLCBfdGhpcy5sZW5z
Q29sb3JUZXh0dXJlKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgic3RyZW5ndGgiLCBf
dGhpcy5sZW5zRmxhcmVTdHJlbmd0aCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImdo
b3N0RGlzcGVyc2FsIiwgX3RoaXMubGVuc0ZsYXJlR2hvc3REaXNwZXJzYWwpOworICAgICAgICAg
ICAgZWZmZWN0LnNldEZsb2F0KCJoYWxvV2lkdGgiLCBfdGhpcy5sZW5zRmxhcmVIYWxvV2lkdGgp
OworICAgICAgICAgICAgLy8gU2hpZnQKKyAgICAgICAgICAgIHJlc29sdXRpb24ueCA9IF90aGlz
LmxlbnNGbGFyZVBvc3RQcm9jZXNzLndpZHRoOworICAgICAgICAgICAgcmVzb2x1dGlvbi55ID0g
X3RoaXMubGVuc0ZsYXJlUG9zdFByb2Nlc3MuaGVpZ2h0OworICAgICAgICAgICAgZWZmZWN0LnNl
dFZlY3RvcjIoInJlc29sdXRpb24iLCByZXNvbHV0aW9uKTsKKyAgICAgICAgICAgIGVmZmVjdC5z
ZXRGbG9hdCgiZGlzdG9ydGlvblN0cmVuZ3RoIiwgX3RoaXMubGVuc0ZsYXJlRGlzdG9ydGlvblN0
cmVuZ3RoKTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gQ29tcG9zZQorICAgICAgICB2YXIgc2Nh
bGVCaWFzMSA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJNYXRyaXgiXS5Gcm9tVmFsdWVzKDIuMCwgMC4wLCAtMS4wLCAwLjAsIDAuMCwgMi4wLCAtMS4w
LCAwLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4wKTsKKyAgICAgICAg
dmFyIHNjYWxlQmlhczIgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siTWF0cml4Il0uRnJvbVZhbHVlcygwLjUsIDAuMCwgMC41LCAwLjAsIDAuMCwgMC41
LCAwLjUsIDAuMCwgMC4wLCAwLjAsIDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjApOworICAg
ICAgICB0aGlzLmxlbnNGbGFyZUNvbXBvc2VQb3N0UHJvY2Vzcy5vbkFwcGx5ID0gZnVuY3Rpb24g
KGVmZmVjdCkgeworICAgICAgICAgICAgaWYgKCFfdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWZm
ZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3MoIm90aGVyU2FtcGxlciIsIF90aGlzLl9jdXJy
ZW50RGVwdGhPZkZpZWxkU291cmNlKTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJs
ZW5zRGlydFNhbXBsZXIiLCBfdGhpcy5sZW5zRmxhcmVEaXJ0VGV4dHVyZSk7CisgICAgICAgICAg
ICBlZmZlY3Quc2V0VGV4dHVyZSgibGVuc1N0YXJTYW1wbGVyIiwgX3RoaXMubGVuc1N0YXJUZXh0
dXJlKTsKKyAgICAgICAgICAgIC8vIExlbnMgc3RhcnQgcm90YXRpb24gbWF0cml4CisgICAgICAg
ICAgICB2YXIgY2FtZXJheCA9IF90aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmEuZ2V0Vmlld01hdHJp
eCgpLmdldFJvdygwKTsKKyAgICAgICAgICAgIHZhciBjYW1lcmF6ID0gX3RoaXMuX3NjZW5lLmFj
dGl2ZUNhbWVyYS5nZXRWaWV3TWF0cml4KCkuZ2V0Um93KDIpOworICAgICAgICAgICAgdmFyIGNh
bVJvdCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJW
ZWN0b3IzIl0uRG90KGNhbWVyYXgudG9WZWN0b3IzKCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDEuMCwgMC4wLCAwLjApKSAr
IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3Iz
Il0uRG90KGNhbWVyYXoudG9WZWN0b3IzKCksIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdKDAuMCwgMC4wLCAxLjApKTsKKyAgICAg
ICAgICAgIGNhbVJvdCAqPSA0LjA7CisgICAgICAgICAgICB2YXIgc3RhclJvdGF0aW9uID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLkZy
b21WYWx1ZXMoTWF0aC5jb3MoY2FtUm90KSAqIDAuNSwgLU1hdGguc2luKGNhbVJvdCksIDAuMCwg
MC4wLCBNYXRoLnNpbihjYW1Sb3QpLCBNYXRoLmNvcyhjYW1Sb3QpICogMC41LCAwLjAsIDAuMCwg
MC4wLCAwLjAsIDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjApOworICAgICAgICAgICAgdmFy
IGxlbnNTdGFyTWF0cml4ID0gc2NhbGVCaWFzMi5tdWx0aXBseShzdGFyUm90YXRpb24pLm11bHRp
cGx5KHNjYWxlQmlhczEpOworICAgICAgICAgICAgZWZmZWN0LnNldE1hdHJpeCgibGVuc1N0YXJN
YXRyaXgiLCBsZW5zU3Rhck1hdHJpeCk7CisgICAgICAgICAgICBfdGhpcy5fY3VycmVudERlcHRo
T2ZGaWVsZFNvdXJjZSA9IF90aGlzLmxlbnNGbGFyZUZpbmFsUG9zdFByb2Nlc3M7CisgICAgICAg
IH07CisgICAgfTsKKyAgICAvLyBDcmVhdGUgZGVwdGgtb2YtZmllbGQgcG9zdC1wcm9jZXNzCisg
ICAgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2NyZWF0ZURlcHRoT2ZGaWVs
ZFBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHNjZW5lLCByYXRpbykgeworICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICB0aGlzLmRlcHRoT2ZGaWVsZFBvc3RQcm9jZXNzID0gbmV3IF9Q
b3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlBv
c3RQcm9jZXNzIl0oIkhEUkRlcHRoT2ZGaWVsZCIsICJzdGFuZGFyZCIsIFsiZGlzdGFuY2UiXSwg
WyJvdGhlclNhbXBsZXIiLCAiZGVwdGhTYW1wbGVyIl0sIHJhdGlvLCBudWxsLCBfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVGV4dHVyZSJd
LkJJTElORUFSX1NBTVBMSU5HTU9ERSwgc2NlbmUuZ2V0RW5naW5lKCksIGZhbHNlLCAiI2RlZmlu
ZSBERVBUSF9PRl9GSUVMRCIsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAg
ICAgdGhpcy5kZXB0aE9mRmllbGRQb3N0UHJvY2Vzcy5vbkFwcGx5ID0gZnVuY3Rpb24gKGVmZmVj
dCkgeworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3MoIm90aGVy
U2FtcGxlciIsIF90aGlzLl9jdXJyZW50RGVwdGhPZkZpZWxkU291cmNlKTsKKyAgICAgICAgICAg
IGVmZmVjdC5zZXRUZXh0dXJlKCJkZXB0aFNhbXBsZXIiLCBfdGhpcy5fZ2V0RGVwdGhUZXh0dXJl
KCkpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJkaXN0YW5jZSIsIF90aGlzLmRlcHRo
T2ZGaWVsZERpc3RhbmNlKTsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gQWRkIHRvIHBpcGVsaW5l
CisgICAgICAgIHRoaXMuYWRkRWZmZWN0KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGlu
ZV9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQ
b3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJdKHNjZW5lLmdldEVuZ2luZSgpLCAiSERSRGVwdGhPZkZp
ZWxkIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuZGVwdGhPZkZpZWxkUG9zdFByb2Nlc3M7
IH0sIHRydWUpKTsKKyAgICB9OworICAgIC8vIENyZWF0ZSBtb3Rpb24gYmx1ciBwb3N0LXByb2Nl
c3MKKyAgICBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZS5fY3JlYXRlTW90aW9u
Qmx1clBvc3RQcm9jZXNzID0gZnVuY3Rpb24gKHNjZW5lLCByYXRpbykgeworICAgICAgICB2YXIg
X3RoaXMgPSB0aGlzOworICAgICAgICBpZiAodGhpcy5faXNPYmplY3RCYXNlZE1vdGlvbkJsdXIp
IHsKKyAgICAgICAgICAgIHZhciBtYiA9IG5ldyBfbW90aW9uQmx1clBvc3RQcm9jZXNzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJNb3Rpb25CbHVyUG9zdFByb2Nlc3MiXSgiSERSTW90
aW9uQmx1ciIsIHNjZW5lLCByYXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElO
R01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05F
RF9JTlQpOworICAgICAgICAgICAgbWIubW90aW9uU3RyZW5ndGggPSB0aGlzLm1vdGlvblN0cmVu
Z3RoOworICAgICAgICAgICAgbWIubW90aW9uQmx1clNhbXBsZXMgPSB0aGlzLm1vdGlvbkJsdXJT
YW1wbGVzOworICAgICAgICAgICAgdGhpcy5tb3Rpb25CbHVyUG9zdFByb2Nlc3MgPSBtYjsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMubW90aW9uQmx1clBvc3RQ
cm9jZXNzID0gbmV3IF9Qb3N0UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X19bIlBvc3RQcm9jZXNzIl0oIkhEUk1vdGlvbkJsdXIiLCAic3RhbmRhcmQiLCBb
ImludmVyc2VWaWV3UHJvamVjdGlvbiIsICJwcmV2Vmlld1Byb2plY3Rpb24iLCAic2NyZWVuU2l6
ZSIsICJtb3Rpb25TY2FsZSIsICJtb3Rpb25TdHJlbmd0aCJdLCBbImRlcHRoU2FtcGxlciJdLCBy
YXRpbywgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVu
Z2luZSgpLCBmYWxzZSwgIiNkZWZpbmUgTU9USU9OX0JMVVJcbiNkZWZpbmUgTUFYX01PVElPTl9T
QU1QTEVTICIgKyB0aGlzLm1vdGlvbkJsdXJTYW1wbGVzLnRvRml4ZWQoMSksIF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAgICAgICAgIHZhciBtb3Rpb25TY2FsZSA9IDA7Cisg
ICAgICAgICAgICB2YXIgcHJldlZpZXdQcm9qZWN0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLklkZW50aXR5KCk7CisgICAgICAg
ICAgICB2YXIgaW52Vmlld1Byb2plY3Rpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIHZh
ciB2aWV3UHJvamVjdGlvbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJNYXRyaXgiXS5JZGVudGl0eSgpOworICAgICAgICAgICAgdmFyIHNjcmVlblNp
emUgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVj
dG9yMiJdLlplcm8oKTsKKyAgICAgICAgICAgIHRoaXMubW90aW9uQmx1clBvc3RQcm9jZXNzLm9u
QXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICAgICAgdmlld1Byb2plY3Rp
b24gPSBzY2VuZS5nZXRQcm9qZWN0aW9uTWF0cml4KCkubXVsdGlwbHkoc2NlbmUuZ2V0Vmlld01h
dHJpeCgpKTsKKyAgICAgICAgICAgICAgICB2aWV3UHJvamVjdGlvbi5pbnZlcnRUb1JlZihpbnZW
aWV3UHJvamVjdGlvbik7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldE1hdHJpeCgiaW52ZXJz
ZVZpZXdQcm9qZWN0aW9uIiwgaW52Vmlld1Byb2plY3Rpb24pOworICAgICAgICAgICAgICAgIGVm
ZmVjdC5zZXRNYXRyaXgoInByZXZWaWV3UHJvamVjdGlvbiIsIHByZXZWaWV3UHJvamVjdGlvbik7
CisgICAgICAgICAgICAgICAgcHJldlZpZXdQcm9qZWN0aW9uID0gdmlld1Byb2plY3Rpb247Cisg
ICAgICAgICAgICAgICAgc2NyZWVuU2l6ZS54ID0gX3RoaXMubW90aW9uQmx1clBvc3RQcm9jZXNz
LndpZHRoOworICAgICAgICAgICAgICAgIHNjcmVlblNpemUueSA9IF90aGlzLm1vdGlvbkJsdXJQ
b3N0UHJvY2Vzcy5oZWlnaHQ7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldFZlY3RvcjIoInNj
cmVlblNpemUiLCBzY3JlZW5TaXplKTsKKyAgICAgICAgICAgICAgICBtb3Rpb25TY2FsZSA9IHNj
ZW5lLmdldEVuZ2luZSgpLmdldEZwcygpIC8gNjAuMDsKKyAgICAgICAgICAgICAgICBlZmZlY3Qu
c2V0RmxvYXQoIm1vdGlvblNjYWxlIiwgbW90aW9uU2NhbGUpOworICAgICAgICAgICAgICAgIGVm
ZmVjdC5zZXRGbG9hdCgibW90aW9uU3RyZW5ndGgiLCBfdGhpcy5tb3Rpb25TdHJlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoImRlcHRoU2FtcGxlciIsIF90aGlzLl9n
ZXREZXB0aFRleHR1cmUoKSk7CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHRo
aXMuYWRkRWZmZWN0KG5ldyBfUG9zdFByb2Nlc3Nlc19SZW5kZXJQaXBlbGluZV9wb3N0UHJvY2Vz
c1JlbmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJQb3N0UHJvY2Vzc1Jl
bmRlckVmZmVjdCJdKHNjZW5lLmdldEVuZ2luZSgpLCAiSERSTW90aW9uQmx1ciIsIGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIF90aGlzLm1vdGlvbkJsdXJQb3N0UHJvY2VzczsgfSwgdHJ1ZSkpOworICAg
IH07CisgICAgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuX2dldERlcHRoVGV4
dHVyZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX3NjZW5lLmdldEVuZ2luZSgp
LmdldENhcHMoKS5kcmF3QnVmZmVyc0V4dGVuc2lvbikgeworICAgICAgICAgICAgdmFyIHJlbmRl
cmVyID0gdGhpcy5fc2NlbmUuZW5hYmxlR2VvbWV0cnlCdWZmZXJSZW5kZXJlcigpOworICAgICAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyLmdldEdCdWZmZXIoKS50ZXh0dXJlc1swXTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpcy5fc2NlbmUuZW5hYmxlRGVwdGhSZW5kZXJlcigpLmdldERl
cHRoTWFwKCk7CisgICAgfTsKKyAgICBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlw
ZS5fZGlzcG9zZVBvc3RQcm9jZXNzZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5fY2FtZXJhcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFy
IGNhbWVyYSA9IHRoaXMuX2NhbWVyYXNbaV07CisgICAgICAgICAgICBpZiAodGhpcy5vcmlnaW5h
bFBvc3RQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFBvc3RQcm9jZXNz
LmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLmRv
d25TYW1wbGVYNFBvc3RQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5kb3duU2FtcGxl
WDRQb3N0UHJvY2Vzcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodGhpcy5icmlnaHRQYXNzUG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlz
LmJyaWdodFBhc3NQb3N0UHJvY2Vzcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAodGhpcy50ZXh0dXJlQWRkZXJQb3N0UHJvY2VzcykgeworICAgICAgICAg
ICAgICAgIHRoaXMudGV4dHVyZUFkZGVyUG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMudGV4dHVyZUFkZGVyRmluYWxQb3N0UHJv
Y2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZUFkZGVyRmluYWxQb3N0UHJvY2Vz
cy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy52
b2x1bWV0cmljTGlnaHRQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMudm9sdW1l
dHJpY0xpZ2h0UG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHRoaXMudm9sdW1ldHJpY0xpZ2h0U21vb3RoWFBvc3RQcm9jZXNzKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy52b2x1bWV0cmljTGlnaHRTbW9vdGhYUG9zdFByb2Nlc3MuZGlz
cG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMudm9sdW1l
dHJpY0xpZ2h0U21vb3RoWVBvc3RQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy52b2x1
bWV0cmljTGlnaHRTbW9vdGhZUG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHRoaXMudm9sdW1ldHJpY0xpZ2h0TWVyZ2VQb3N0UHJvY2Vz
KSB7CisgICAgICAgICAgICAgICAgdGhpcy52b2x1bWV0cmljTGlnaHRNZXJnZVBvc3RQcm9jZXMu
ZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMudm9s
dW1ldHJpY0xpZ2h0RmluYWxQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMudm9s
dW1ldHJpY0xpZ2h0RmluYWxQb3N0UHJvY2Vzcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodGhpcy5sZW5zRmxhcmVQb3N0UHJvY2VzcykgeworICAgICAg
ICAgICAgICAgIHRoaXMubGVuc0ZsYXJlUG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMubGVuc0ZsYXJlQ29tcG9zZVBvc3RQcm9j
ZXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5sZW5zRmxhcmVDb21wb3NlUG9zdFByb2Nlc3Mu
ZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCB0aGlzLmx1bWluYW5jZURvd25TYW1wbGVQb3N0UHJvY2Vzc2VzLmxlbmd0aDsgaisr
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5sdW1pbmFuY2VEb3duU2FtcGxlUG9zdFByb2Nlc3Nl
c1tqXS5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhp
cy5sdW1pbmFuY2VQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXMubHVtaW5hbmNl
UG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHRoaXMuaGRyUG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmhkclBvc3RQ
cm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0
aGlzLmhkckZpbmFsUG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmhkckZpbmFs
UG9zdFByb2Nlc3MuZGlzcG9zZShjYW1lcmEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHRoaXMuZGVwdGhPZkZpZWxkUG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlz
LmRlcHRoT2ZGaWVsZFBvc3RQcm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0aGlzLm1vdGlvbkJsdXJQb3N0UHJvY2VzcykgeworICAgICAgICAg
ICAgICAgIHRoaXMubW90aW9uQmx1clBvc3RQcm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLmZ4YWFQb3N0UHJvY2VzcykgeworICAgICAg
ICAgICAgICAgIHRoaXMuZnhhYVBvc3RQcm9jZXNzLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5ibHVySFBvc3RQcm9j
ZXNzZXMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICB0aGlzLmJsdXJIUG9zdFByb2Nl
c3Nlc1tqXS5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IHRoaXMuYmx1clZQb3N0UHJvY2Vzc2VzLmxlbmd0aDsgaisrKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5ibHVyVlBvc3RQcm9jZXNzZXNbal0uZGlzcG9zZShjYW1lcmEp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMub3JpZ2luYWxQb3N0UHJv
Y2VzcyA9IG51bGw7CisgICAgICAgIHRoaXMuZG93blNhbXBsZVg0UG9zdFByb2Nlc3MgPSBudWxs
OworICAgICAgICB0aGlzLmJyaWdodFBhc3NQb3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIHRo
aXMudGV4dHVyZUFkZGVyUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICB0aGlzLnRleHR1cmVB
ZGRlckZpbmFsUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICB0aGlzLnZvbHVtZXRyaWNMaWdo
dFBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgdGhpcy52b2x1bWV0cmljTGlnaHRTbW9vdGhY
UG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICB0aGlzLnZvbHVtZXRyaWNMaWdodFNtb290aFlQ
b3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIHRoaXMudm9sdW1ldHJpY0xpZ2h0TWVyZ2VQb3N0
UHJvY2VzID0gbnVsbDsKKyAgICAgICAgdGhpcy52b2x1bWV0cmljTGlnaHRGaW5hbFBvc3RQcm9j
ZXNzID0gbnVsbDsKKyAgICAgICAgdGhpcy5sZW5zRmxhcmVQb3N0UHJvY2VzcyA9IG51bGw7Cisg
ICAgICAgIHRoaXMubGVuc0ZsYXJlQ29tcG9zZVBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAg
dGhpcy5sdW1pbmFuY2VQb3N0UHJvY2VzcyA9IG51bGw7CisgICAgICAgIHRoaXMuaGRyUG9zdFBy
b2Nlc3MgPSBudWxsOworICAgICAgICB0aGlzLmhkckZpbmFsUG9zdFByb2Nlc3MgPSBudWxsOwor
ICAgICAgICB0aGlzLmRlcHRoT2ZGaWVsZFBvc3RQcm9jZXNzID0gbnVsbDsKKyAgICAgICAgdGhp
cy5tb3Rpb25CbHVyUG9zdFByb2Nlc3MgPSBudWxsOworICAgICAgICB0aGlzLmZ4YWFQb3N0UHJv
Y2VzcyA9IG51bGw7CisgICAgICAgIHRoaXMubHVtaW5hbmNlRG93blNhbXBsZVBvc3RQcm9jZXNz
ZXMgPSBbXTsKKyAgICAgICAgdGhpcy5ibHVySFBvc3RQcm9jZXNzZXMgPSBbXTsKKyAgICAgICAg
dGhpcy5ibHVyVlBvc3RQcm9jZXNzZXMgPSBbXTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERp
c3Bvc2Ugb2YgdGhlIHBpcGVsaW5lIGFuZCBzdG9wIGFsbCBwb3N0IHByb2Nlc3NlcworICAgICAq
LworICAgIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3N0UHJvY2Vzc2VzKCk7CisgICAgICAg
IHRoaXMuX3NjZW5lLnBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyLmRldGFjaENhbWVy
YXNGcm9tUmVuZGVyUGlwZWxpbmUodGhpcy5fbmFtZSwgdGhpcy5fY2FtZXJhcyk7CisgICAgICAg
IF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOworICAgIH07CisgICAgLyoqCisg
ICAgICogU2VyaWFsaXplIHRoZSByZW5kZXJpbmcgcGlwZWxpbmUgKFVzZWQgd2hlbiBleHBvcnRp
bmcpCisgICAgICogQHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgb2JqZWN0CisgICAgICovCisgICAg
U3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24g
KCkgeworICAgICAgICB2YXIgc2VyaWFsaXphdGlvbk9iamVjdCA9IF9NaXNjX2RlY29yYXRvcnNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlNlcmlh
bGl6ZSh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMuc291cmNlTGlnaHQpIHsKKyAgICAgICAgICAg
IHNlcmlhbGl6YXRpb25PYmplY3Quc291cmNlTGlnaHRJZCA9IHRoaXMuc291cmNlTGlnaHQuaWQ7
CisgICAgICAgIH0KKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5jdXN0b21UeXBlID0gIlN0
YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUiOworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbk9i
amVjdDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFBhcnNlIHRoZSBzZXJpYWxpemVkIHBpcGVs
aW5lCisgICAgICogQHBhcmFtIHNvdXJjZSBTb3VyY2UgcGlwZWxpbmUuCisgICAgICogQHBhcmFt
IHNjZW5lIFRoZSBzY2VuZSB0byBsb2FkIHRoZSBwaXBlbGluZSB0by4KKyAgICAgKiBAcGFyYW0g
cm9vdFVybCBUaGUgVVJMIG9mIHRoZSBzZXJpYWxpemVkIHBpcGVsaW5lLgorICAgICAqIEByZXR1
cm5zIEFuIGluc3RhbnRpYXRlZCBwaXBlbGluZSBmcm9tIHRoZSBzZXJpYWxpemVkIG9iamVjdC4K
KyAgICAgKi8KKyAgICBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLlBhcnNlID0gZnVuY3Rpb24g
KHNvdXJjZSwgc2NlbmUsIHJvb3RVcmwpIHsKKyAgICAgICAgdmFyIHAgPSBfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXS5Q
YXJzZShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZShz
b3VyY2UuX25hbWUsIHNjZW5lLCBzb3VyY2UuX3JhdGlvKTsgfSwgc291cmNlLCBzY2VuZSwgcm9v
dFVybCk7CisgICAgICAgIGlmIChzb3VyY2Uuc291cmNlTGlnaHRJZCkgeworICAgICAgICAgICAg
cC5zb3VyY2VMaWdodCA9IHNjZW5lLmdldExpZ2h0QnlJRChzb3VyY2Uuc291cmNlTGlnaHRJZCk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHA7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBM
dW1pbmFuY2Ugc3RlcHMKKyAgICAgKi8KKyAgICBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLkx1
bWluYW5jZVN0ZXBzID0gNjsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVu
ZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiYnJpZ2h0VGhyZXNob2xkIiwgdm9pZCAwKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90
eXBlLCAiYmx1cldpZHRoIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9y
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0
YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiaG9yaXpvbnRhbEJsdXIiLCB2b2lk
IDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUi
XShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGlu
ZS5wcm90b3R5cGUsICJleHBvc3VyZSIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJd
KSgibGVuc1RleHR1cmUiKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90
eXBlLCAibGVuc1RleHR1cmUiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
U3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJ2b2x1bWV0cmljTGlnaHRDb2Vm
ZmljaWVudCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZFJl
bmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgInZvbHVtZXRyaWNMaWdodFBvd2VyIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUu
cHJvdG90eXBlLCAidm9sdW1ldHJpY0xpZ2h0Qmx1clNjYWxlIiwgdm9pZCAwKTsKKyAgICB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBP
YmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJp
YWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAi
aGRyTWluaW11bUx1bWluYW5jZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBd
LCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImhkckRlY3JlYXNlUmF0ZSIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZFJlbmRlcmluZ1Bp
cGVsaW5lLnByb3RvdHlwZSwgImhkckluY3JlYXNlUmF0ZSIsIHZvaWQgMCk7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2Jq
ZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFs
aXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImhk
ckF1dG9FeHBvc3VyZSIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdKSgibGVuc0Nv
bG9yVGV4dHVyZSIpCisgICAgXSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUs
ICJsZW5zQ29sb3JUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAibGVuc0ZsYXJlU3RyZW5ndGgi
LCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVj
b3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3RhbmRhcmRSZW5kZXJpbmdQ
aXBlbGluZS5wcm90b3R5cGUsICJsZW5zRmxhcmVHaG9zdERpc3BlcnNhbCIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3Rv
dHlwZSwgImxlbnNGbGFyZUhhbG9XaWR0aCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkK
KyAgICBdLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImxlbnNGbGFyZURp
c3RvcnRpb25TdHJlbmd0aCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRv
cnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBT
dGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImxlbnNGbGFyZUJsdXJXaWR0aCIs
IHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNv
cmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNUZXh0dXJlIl0pKCJsZW5zU3RhclRleHR1cmUiKQor
ICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAibGVuc1N0YXJUZXh0
dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemVBc1RleHR1cmUiXSkoImxlbnNGbGFyZURpcnRU
ZXh0dXJlIikKKyAgICBdLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgImxl
bnNGbGFyZURpcnRUZXh0dXJlIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0s
IFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiZGVwdGhPZkZpZWxkRGlzdGFu
Y2UiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3RhbmRhcmRSZW5kZXJp
bmdQaXBlbGluZS5wcm90b3R5cGUsICJkZXB0aE9mRmllbGRCbHVyV2lkdGgiLCB2b2lkIDApOwor
ICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisg
ICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90
b3R5cGUsICJtb3Rpb25TdHJlbmd0aCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJvYmplY3RCYXNlZE1vdGlv
bkJsdXIiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVy
aW5nUGlwZWxpbmUucHJvdG90eXBlLCAiX3JhdGlvIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiQmxvb21F
bmFibGVkIiwgbnVsbCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZFJlbmRl
cmluZ1BpcGVsaW5lLnByb3RvdHlwZSwgIkRlcHRoT2ZGaWVsZEVuYWJsZWQiLCBudWxsKTsKKyAg
ICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAg
ICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90
eXBlLCAiTGVuc0ZsYXJlRW5hYmxlZCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNv
cmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAg
XSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJIRFJFbmFibGVkIiwgbnVs
bCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5l
LnByb3RvdHlwZSwgIlZMU0VuYWJsZWQiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVj
b3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAg
IF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAiTW90aW9uQmx1ckVuYWJs
ZWQiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2Rl
Y29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5n
UGlwZWxpbmUucHJvdG90eXBlLCAiZnhhYUVuYWJsZWQiLCBudWxsKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIFN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUucHJvdG90eXBlLCAidm9sdW1l
dHJpY0xpZ2h0U3RlcHNDb3VudCIsIG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0
b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwg
U3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZS5wcm90b3R5cGUsICJtb3Rpb25CbHVyU2FtcGxlcyIs
IG51bGwpOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBl
bGluZS5wcm90b3R5cGUsICJzYW1wbGVzIiwgbnVsbCk7CisgICAgcmV0dXJuIFN0YW5kYXJkUmVu
ZGVyaW5nUGlwZWxpbmU7Cit9KF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9j
ZXNzUmVuZGVyUGlwZWxpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siUG9zdFByb2Nl
c3NSZW5kZXJQaXBlbGluZSJdKSk7CisKK19NaXNjX3R5cGVTdG9yZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTJfX1siX1R5cGVTdG9yZSJdLlJlZ2lzdGVyZWRUeXBlc1siQkFCWUxPTi5TdGFu
ZGFyZFJlbmRlcmluZ1BpcGVsaW5lIl0gPSBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lOworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL2luZGV4
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL2luZGV4LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0LCBQb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lLCBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlciwgUG9zdFByb2Nl
c3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVudCwgRGVmYXVsdFJlbmRlcmluZ1Bp
cGVsaW5lLCBMZW5zUmVuZGVyaW5nUGlwZWxpbmUsIFNTQU8yUmVuZGVyaW5nUGlwZWxpbmUsIFNT
QU9SZW5kZXJpbmdQaXBlbGluZSwgU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZSAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1BpcGVsaW5lc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9QaXBl
bGluZXMvaW5kZXggKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9QaXBlbGluZXMv
aW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfUGlwZWxpbmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkRlZmF1bHRSZW5kZXJpbmdQaXBlbGluZSJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJMZW5zUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QaXBlbGlu
ZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siTGVuc1JlbmRlcmluZ1BpcGVs
aW5lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNTQU8yUmVuZGVyaW5nUGlwZWxpbmUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9QaXBlbGluZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siU1NBTzJSZW5kZXJpbmdQaXBlbGluZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTU0FPUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QaXBlbGluZXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU1NBT1JlbmRlcmluZ1BpcGVsaW5l
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9QaXBlbGluZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siU3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZSJdOyB9KTsKKworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vzc1JlbmRlckVmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2Vzc1JlbmRlckVm
ZmVjdCAqLyAiLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQcm9jZXNzUmVuZGVy
RWZmZWN0LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2Vz
c1JlbmRlclBpcGVsaW5lICovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFBy
b2Nlc3NSZW5kZXJQaXBlbGluZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9zdFByb2Nlc3NSZW5kZXJQaXBl
bGluZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQb3N0UHJvY2Vzc1JlbmRlclBpcGVs
aW5lIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNzUmVuZGVy
UGlwZWxpbmVNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyICovICIuL1Bv
c3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFn
ZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFn
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5l
TWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vzc1Jl
bmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxp
bmVNYW5hZ2VyU2NlbmVDb21wb25lbnQgKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGlu
ZS9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50LnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21w
b25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFu
YWdlclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlBvc3RQcm9j
ZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKworCisKKwor
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUv
cG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bv
c3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9zdFByb2Nlc3NSZW5kZXJF
ZmZlY3QgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3NS
ZW5kZXJFZmZlY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWlzYy90b29s
cyAqLyAiLi9NaXNjL3Rvb2xzLnRzIik7CisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIGEgc2V0
IG9mIG9uZSBvciBtb3JlIHBvc3QgcHJvY2Vzc2VzIGluIEJhYnlsb24uCisgKiBBIHBvc3QgcHJv
Y2VzcyBjYW4gYmUgdXNlZCB0byBhcHBseSBhIHNoYWRlciB0byBhIHRleHR1cmUgYWZ0ZXIgaXQg
aXMgcmVuZGVyZWQuCisgKiBAZXhhbXBsZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNzcmVuZGVycGlwZWxpbmUKKyAqLwordmFyIFBvc3RQcm9j
ZXNzUmVuZGVyRWZmZWN0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgor
ICAgICAqIEluc3RhbnRpYXRlcyBhIHBvc3QgcHJvY2VzcyByZW5kZXIgZWZmZWN0LgorICAgICAq
IEEgcG9zdCBwcm9jZXNzIGNhbiBiZSB1c2VkIHRvIGFwcGx5IGEgc2hhZGVyIHRvIGEgdGV4dHVy
ZSBhZnRlciBpdCBpcyByZW5kZXJlZC4KKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUg
dGhlIGVmZmVjdCBpcyB0aWVkIHRvCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhl
IGVmZmVjdAorICAgICAqIEBwYXJhbSBnZXRQb3N0UHJvY2Vzc2VzIEEgZnVuY3Rpb24gdGhhdCBy
ZXR1cm5zIGEgc2V0IG9mIHBvc3QgcHJvY2Vzc2VzIHdoaWNoIHRoZSBlZmZlY3Qgd2lsbCBydW4g
aW4gb3JkZXIgdG8gYmUgcnVuLgorICAgICAqIEBwYXJhbSBzaW5nbGVJbnN0YW5jZSBGYWxzZSBp
ZiB0aGlzIHBvc3QgcHJvY2VzcyBjYW4gYmUgcnVuIG9uIG11bHRpcGxlIGNhbWVyYXMuIChkZWZh
dWx0OiB0cnVlKQorICAgICAqLworICAgIGZ1bmN0aW9uIFBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0
KGVuZ2luZSwgbmFtZSwgZ2V0UG9zdFByb2Nlc3Nlcywgc2luZ2xlSW5zdGFuY2UpIHsKKyAgICAg
ICAgdGhpcy5fbmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMuX3NpbmdsZUluc3RhbmNlID0gc2lu
Z2xlSW5zdGFuY2UgfHwgdHJ1ZTsKKyAgICAgICAgdGhpcy5fZ2V0UG9zdFByb2Nlc3NlcyA9IGdl
dFBvc3RQcm9jZXNzZXM7CisgICAgICAgIHRoaXMuX2NhbWVyYXMgPSB7fTsKKyAgICAgICAgdGhp
cy5faW5kaWNlc0ZvckNhbWVyYSA9IHt9OworICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2VzID0g
e307CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3N0UHJvY2Vzc1JlbmRlckVm
ZmVjdC5wcm90b3R5cGUsICJpc1N1cHBvcnRlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IENoZWNrcyBpZiBhbGwgdGhlIHBvc3QgcHJvY2Vzc2VzIGluIHRoZSBlZmZlY3QgYXJlIHN1cHBv
cnRlZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgZm9yICh2YXIgaW5kZXggaW4gdGhpcy5fcG9zdFByb2Nlc3NlcykgeworICAgICAgICAgICAg
ICAgIGlmICh0aGlzLl9wb3N0UHJvY2Vzc2VzLmhhc093blByb3BlcnR5KGluZGV4KSkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgcHBzID0gdGhpcy5fcG9zdFByb2Nlc3Nlc1tpbmRleF07Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHBwSW5kZXggPSAwOyBwcEluZGV4IDwgcHBzLmxl
bmd0aDsgcHBJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBwc1twcElu
ZGV4XS5pc1N1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50
IHN0YXRlIG9mIHRoZSBlZmZlY3QKKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAgUG9zdFBy
b2Nlc3NSZW5kZXJFZmZlY3QucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2hlcyB0aGUgZWZmZWN0IG9uIGNhbWVyYXMKKyAgICAg
KiBAcGFyYW0gY2FtZXJhcyBUaGUgY2FtZXJhIHRvIGF0dGFjaCB0by4KKyAgICAgKiBAaGlkZGVu
CisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QucHJvdG90eXBlLl9hdHRhY2hD
YW1lcmFzID0gZnVuY3Rpb24gKGNhbWVyYXMpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsK
KyAgICAgICAgdmFyIGNhbWVyYUtleTsKKyAgICAgICAgdmFyIGNhbXMgPSBfTWlzY190b29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLk1ha2VBcnJheShjYW1lcmFzIHx8
IHRoaXMuX2NhbWVyYXMpOworICAgICAgICBpZiAoIWNhbXMpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbXMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSBjYW1zW2ldOworICAgICAgICAgICAgdmFy
IGNhbWVyYU5hbWUgPSBjYW1lcmEubmFtZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zaW5nbGVJ
bnN0YW5jZSkgeworICAgICAgICAgICAgICAgIGNhbWVyYUtleSA9IDA7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjYW1lcmFLZXkgPSBjYW1lcmFO
YW1lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0aGlzLl9wb3N0UHJvY2Vzc2Vz
W2NhbWVyYUtleV0pIHsKKyAgICAgICAgICAgICAgICB2YXIgcG9zdFByb2Nlc3MgPSB0aGlzLl9n
ZXRQb3N0UHJvY2Vzc2VzKCk7CisgICAgICAgICAgICAgICAgaWYgKHBvc3RQcm9jZXNzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzZXNbY2FtZXJhS2V5XSA9IEFycmF5
LmlzQXJyYXkocG9zdFByb2Nlc3MpID8gcG9zdFByb2Nlc3MgOiBbcG9zdFByb2Nlc3NdOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdGhpcy5faW5k
aWNlc0ZvckNhbWVyYVtjYW1lcmFOYW1lXSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2luZGlj
ZXNGb3JDYW1lcmFbY2FtZXJhTmFtZV0gPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX3Bvc3RQcm9jZXNzZXNbY2FtZXJhS2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChwb3N0UHJv
Y2VzcykgeworICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGNhbWVyYS5hdHRhY2hQb3N0UHJv
Y2Vzcyhwb3N0UHJvY2Vzcyk7CisgICAgICAgICAgICAgICAgX3RoaXMuX2luZGljZXNGb3JDYW1l
cmFbY2FtZXJhTmFtZV0ucHVzaChpbmRleCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGlmICghdGhpcy5fY2FtZXJhc1tjYW1lcmFOYW1lXSkgeworICAgICAgICAgICAgICAgIHRoaXMu
X2NhbWVyYXNbY2FtZXJhTmFtZV0gPSBjYW1lcmE7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKgorICAgICAqIERldGF0Y2hlcyB0aGUgZWZmZWN0IG9uIGNhbWVyYXMK
KyAgICAgKiBAcGFyYW0gY2FtZXJhcyBUaGUgY2FtZXJhIHRvIGRldGF0Y2ggZnJvbS4KKyAgICAg
KiBAaGlkZGVuCisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QucHJvdG90eXBl
Ll9kZXRhY2hDYW1lcmFzID0gZnVuY3Rpb24gKGNhbWVyYXMpIHsKKyAgICAgICAgdmFyIGNhbXMg
PSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb29scyJdLk1ha2VB
cnJheShjYW1lcmFzIHx8IHRoaXMuX2NhbWVyYXMpOworICAgICAgICBpZiAoIWNhbXMpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNhbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSBjYW1zW2ldOwor
ICAgICAgICAgICAgdmFyIGNhbWVyYU5hbWUgPSBjYW1lcmEubmFtZTsKKyAgICAgICAgICAgIHZh
ciBwb3N0UHJvY2Vzc2VzID0gdGhpcy5fcG9zdFByb2Nlc3Nlc1t0aGlzLl9zaW5nbGVJbnN0YW5j
ZSA/IDAgOiBjYW1lcmFOYW1lXTsKKyAgICAgICAgICAgIGlmIChwb3N0UHJvY2Vzc2VzKSB7Cisg
ICAgICAgICAgICAgICAgcG9zdFByb2Nlc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChwb3N0UHJvY2Vz
cykgeworICAgICAgICAgICAgICAgICAgICBjYW1lcmEuZGV0YWNoUG9zdFByb2Nlc3MocG9zdFBy
b2Nlc3MpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHRoaXMuX2NhbWVyYXNbY2FtZXJhTmFtZV0pIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9j
YW1lcmFzW2NhbWVyYU5hbWVdID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqCisgICAgICogRW5hYmxlcyB0aGUgZWZmZWN0IG9uIGdpdmVuIGNhbWVyYXMK
KyAgICAgKiBAcGFyYW0gY2FtZXJhcyBUaGUgY2FtZXJhIHRvIGVuYWJsZS4KKyAgICAgKiBAaGlk
ZGVuCisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QucHJvdG90eXBlLl9lbmFi
bGUgPSBmdW5jdGlvbiAoY2FtZXJhcykgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAg
ICAgICB2YXIgY2FtcyA9IF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IlRvb2xzIl0uTWFrZUFycmF5KGNhbWVyYXMgfHwgdGhpcy5fY2FtZXJhcyk7CisgICAgICAgIGlm
ICghY2FtcykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgY2Ftcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGNhbWVy
YSA9IGNhbXNbaV07CisgICAgICAgICAgICB2YXIgY2FtZXJhTmFtZSA9IGNhbWVyYS5uYW1lOwor
ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9pbmRpY2VzRm9yQ2FtZXJhW2Nh
bWVyYU5hbWVdLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbWVyYS5fcG9z
dFByb2Nlc3Nlc1t0aGlzLl9pbmRpY2VzRm9yQ2FtZXJhW2NhbWVyYU5hbWVdW2pdXSA9PT0gdW5k
ZWZpbmVkIHx8IGNhbWVyYS5fcG9zdFByb2Nlc3Nlc1t0aGlzLl9pbmRpY2VzRm9yQ2FtZXJhW2Nh
bWVyYU5hbWVdW2pdXSA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3N0
UHJvY2Vzc2VzW3RoaXMuX3NpbmdsZUluc3RhbmNlID8gMCA6IGNhbWVyYU5hbWVdLmZvckVhY2go
ZnVuY3Rpb24gKHBvc3RQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW1zW2ld
LmF0dGFjaFBvc3RQcm9jZXNzKHBvc3RQcm9jZXNzLCBfdGhpcy5faW5kaWNlc0ZvckNhbWVyYVtj
YW1lcmFOYW1lXVtqXSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGlz
YWJsZXMgdGhlIGVmZmVjdCBvbiB0aGUgZ2l2ZW4gY2FtZXJhcworICAgICAqIEBwYXJhbSBjYW1l
cmFzIFRoZSBjYW1lcmEgdG8gZGlzYWJsZS4KKyAgICAgKiBAaGlkZGVuCisgICAgICovCisgICAg
UG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QucHJvdG90eXBlLl9kaXNhYmxlID0gZnVuY3Rpb24gKGNh
bWVyYXMpIHsKKyAgICAgICAgdmFyIGNhbXMgPSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJUb29scyJdLk1ha2VBcnJheShjYW1lcmFzIHx8IHRoaXMuX2NhbWVyYXMp
OworICAgICAgICBpZiAoIWNhbXMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIHZhciBjYW1lcmEgPSBjYW1zW2ldOworICAgICAgICAgICAgdmFyIGNhbWVyYU5hbWUgPSBj
YW1lcmEubmFtZTsKKyAgICAgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzZXNbdGhpcy5fc2luZ2xl
SW5zdGFuY2UgPyAwIDogY2FtZXJhTmFtZV0uZm9yRWFjaChmdW5jdGlvbiAocG9zdFByb2Nlc3Mp
IHsKKyAgICAgICAgICAgICAgICBjYW1lcmEuZGV0YWNoUG9zdFByb2Nlc3MocG9zdFByb2Nlc3Mp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEdl
dHMgYSBsaXN0IG9mIHRoZSBwb3N0IHByb2Nlc3NlcyBjb250YWluZWQgaW4gdGhlIGVmZmVjdC4K
KyAgICAgKiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gZ2V0IHRoZSBwb3N0IHByb2Nlc3Nl
cyBvbi4KKyAgICAgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiB0aGUgcG9zdCBwcm9jZXNzZXMgaW4g
dGhlIGVmZmVjdC4KKyAgICAgKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdC5wcm90b3R5
cGUuZ2V0UG9zdFByb2Nlc3NlcyA9IGZ1bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgaWYgKHRo
aXMuX3NpbmdsZUluc3RhbmNlKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zdFByb2Nl
c3Nlc1swXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICghY2Ft
ZXJhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fcG9zdFByb2Nlc3Nlc1tjYW1lcmEubmFtZV07CisgICAgICAg
IH0KKyAgICB9OworICAgIHJldHVybiBQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdDsKK30oKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9w
b3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZS50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFBvc3RQcm9jZXNz
UmVuZGVyUGlwZWxpbmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9z
dFByb2Nlc3NSZW5kZXJQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUG9zdFByb2Nlc3NS
ZW5kZXJQaXBlbGluZTsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvdG9vbHMgKi8gIi4vTWlzYy90b29scy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01pc2MvZGVj
b3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKworCisKKy8qKgorICogUG9zdFBy
b2Nlc3NSZW5kZXJQaXBlbGluZQorICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hv
d190by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNzcmVuZGVycGlwZWxpbmUKKyAqLwordmFyIFBvc3RQ
cm9jZXNzUmVuZGVyUGlwZWxpbmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
LyoqCisgICAgICogSW5pdGlhbGl6ZXMgYSBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lCisgICAg
ICogQHBhcmFtIGVuZ2luZSBlbmdpbmUgdG8gYWRkIHRoZSBwaXBlbGluZSB0bworICAgICAqIEBw
YXJhbSBuYW1lIG5hbWUgb2YgdGhlIHBpcGVsaW5lCisgICAgICovCisgICAgZnVuY3Rpb24gUG9z
dFByb2Nlc3NSZW5kZXJQaXBlbGluZShlbmdpbmUsIG5hbWUpIHsKKyAgICAgICAgdGhpcy5lbmdp
bmUgPSBlbmdpbmU7CisgICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOworICAgICAgICB0aGlzLl9y
ZW5kZXJFZmZlY3RzID0ge307CisgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdHNGb3JJc29sYXRl
ZFBhc3MgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fY2FtZXJhcyA9IFtdOworICAgIH0K
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZS5wcm90
b3R5cGUsICJuYW1lIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBwaXBlbGluZSBu
YW1lCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9uYW1lOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBH
ZXRzIHRoZSBjbGFzcyBuYW1lCisgICAgICogQHJldHVybnMgIlBvc3RQcm9jZXNzUmVuZGVyUGlw
ZWxpbmUiCisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZS5wcm90b3R5cGUu
Z2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlBvc3RQcm9jZXNz
UmVuZGVyUGlwZWxpbmUiOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvc3RQ
cm9jZXNzUmVuZGVyUGlwZWxpbmUucHJvdG90eXBlLCAiaXNTdXBwb3J0ZWQiLCB7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBJZiBhbGwgdGhlIHJlbmRlciBlZmZlY3RzIGluIHRoZSBwaXBlbGlu
ZSBhcmUgc3VwcG9ydGVkCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGZvciAodmFyIHJlbmRlckVmZmVjdE5hbWUgaW4gdGhpcy5fcmVuZGVyRWZm
ZWN0cykgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZW5kZXJFZmZlY3RzLmhhc093blBy
b3BlcnR5KHJlbmRlckVmZmVjdE5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhp
cy5fcmVuZGVyRWZmZWN0c1tyZW5kZXJFZmZlY3ROYW1lXS5pc1N1cHBvcnRlZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIEFkZHMgYW4gZWZmZWN0IHRvIHRo
ZSBwaXBlbGluZQorICAgICAqIEBwYXJhbSByZW5kZXJFZmZlY3QgdGhlIGVmZmVjdCB0byBhZGQK
KyAgICAgKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLnByb3RvdHlwZS5hZGRFZmZl
Y3QgPSBmdW5jdGlvbiAocmVuZGVyRWZmZWN0KSB7CisgICAgICAgIHRoaXMuX3JlbmRlckVmZmVj
dHNbcmVuZGVyRWZmZWN0Ll9uYW1lXSA9IHJlbmRlckVmZmVjdDsKKyAgICB9OworICAgIC8vIHBy
aXZhdGUKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUu
cHJvdG90eXBlLl9yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAgIH07CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLnByb3RvdHlwZS5fZW5hYmxlRWZm
ZWN0ID0gZnVuY3Rpb24gKHJlbmRlckVmZmVjdE5hbWUsIGNhbWVyYXMpIHsKKyAgICAgICAgdmFy
IHJlbmRlckVmZmVjdHMgPSB0aGlzLl9yZW5kZXJFZmZlY3RzW3JlbmRlckVmZmVjdE5hbWVdOwor
ICAgICAgICBpZiAoIXJlbmRlckVmZmVjdHMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICByZW5kZXJFZmZlY3RzLl9lbmFibGUoX01pc2NfdG9vbHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVG9vbHMiXS5NYWtlQXJyYXkoY2FtZXJhcyB8fCB0aGlzLl9j
YW1lcmFzKSk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFBvc3RQcm9jZXNzUmVu
ZGVyUGlwZWxpbmUucHJvdG90eXBlLl9kaXNhYmxlRWZmZWN0ID0gZnVuY3Rpb24gKHJlbmRlckVm
ZmVjdE5hbWUsIGNhbWVyYXMpIHsKKyAgICAgICAgdmFyIHJlbmRlckVmZmVjdHMgPSB0aGlzLl9y
ZW5kZXJFZmZlY3RzW3JlbmRlckVmZmVjdE5hbWVdOworICAgICAgICBpZiAoIXJlbmRlckVmZmVj
dHMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZW5kZXJFZmZl
Y3RzLl9kaXNhYmxlKF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRv
b2xzIl0uTWFrZUFycmF5KGNhbWVyYXMgfHwgdGhpcy5fY2FtZXJhcykpOworICAgIH07CisgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLnByb3RvdHlwZS5f
YXR0YWNoQ2FtZXJhcyA9IGZ1bmN0aW9uIChjYW1lcmFzLCB1bmlxdWUpIHsKKyAgICAgICAgdmFy
IGNhbXMgPSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb29scyJd
Lk1ha2VBcnJheShjYW1lcmFzIHx8IHRoaXMuX2NhbWVyYXMpOworICAgICAgICBpZiAoIWNhbXMp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5kaWNlc1Rv
RGVsZXRlID0gW107CisgICAgICAgIHZhciBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2Ft
cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGNhbWVyYSA9IGNhbXNbaV07CisgICAg
ICAgICAgICB2YXIgY2FtZXJhTmFtZSA9IGNhbWVyYS5uYW1lOworICAgICAgICAgICAgaWYgKHRo
aXMuX2NhbWVyYXMuaW5kZXhPZihjYW1lcmEpID09PSAtMSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX2NhbWVyYXNbY2FtZXJhTmFtZV0gPSBjYW1lcmE7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmICh1bmlxdWUpIHsKKyAgICAgICAgICAgICAgICBpbmRpY2VzVG9EZWxldGUu
cHVzaChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgaW5kaWNlc1RvRGVsZXRlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBjYW1lcmFzLnNw
bGljZShpbmRpY2VzVG9EZWxldGVbaV0sIDEpOworICAgICAgICB9CisgICAgICAgIGZvciAodmFy
IHJlbmRlckVmZmVjdE5hbWUgaW4gdGhpcy5fcmVuZGVyRWZmZWN0cykgeworICAgICAgICAgICAg
aWYgKHRoaXMuX3JlbmRlckVmZmVjdHMuaGFzT3duUHJvcGVydHkocmVuZGVyRWZmZWN0TmFtZSkp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJFZmZlY3RzW3JlbmRlckVmZmVjdE5hbWVd
Ll9hdHRhY2hDYW1lcmFzKGNhbXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUucHJvdG90
eXBlLl9kZXRhY2hDYW1lcmFzID0gZnVuY3Rpb24gKGNhbWVyYXMpIHsKKyAgICAgICAgdmFyIGNh
bXMgPSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb29scyJdLk1h
a2VBcnJheShjYW1lcmFzIHx8IHRoaXMuX2NhbWVyYXMpOworICAgICAgICBpZiAoIWNhbXMpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciByZW5kZXJF
ZmZlY3ROYW1lIGluIHRoaXMuX3JlbmRlckVmZmVjdHMpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9yZW5kZXJFZmZlY3RzLmhhc093blByb3BlcnR5KHJlbmRlckVmZmVjdE5hbWUpKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fcmVuZGVyRWZmZWN0c1tyZW5kZXJFZmZlY3ROYW1lXS5fZGV0YWNo
Q2FtZXJhcyhjYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNhbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMuX2NhbWVy
YXMuc3BsaWNlKHRoaXMuX2NhbWVyYXMuaW5kZXhPZihjYW1zW2ldKSwgMSk7CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGlu
ZS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgcmVu
ZGVyRWZmZWN0TmFtZSBpbiB0aGlzLl9yZW5kZXJFZmZlY3RzKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fcmVuZGVyRWZmZWN0cy5oYXNPd25Qcm9wZXJ0eShyZW5kZXJFZmZlY3ROYW1lKSkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlckVmZmVjdHNbcmVuZGVyRWZmZWN0TmFtZV0uX3Vw
ZGF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5fY2FtZXJhcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGNhbWVy
YU5hbWUgPSB0aGlzLl9jYW1lcmFzW2ldLm5hbWU7CisgICAgICAgICAgICBpZiAodGhpcy5fcmVu
ZGVyRWZmZWN0c0Zvcklzb2xhdGVkUGFzc1tjYW1lcmFOYW1lXSkgeworICAgICAgICAgICAgICAg
IHRoaXMuX3JlbmRlckVmZmVjdHNGb3JJc29sYXRlZFBhc3NbY2FtZXJhTmFtZV0uX3VwZGF0ZSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLwor
ICAgIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5fcmVuZGVyRWZmZWN0cyA9IHt9OworICAgICAgICB0aGlzLl9y
ZW5kZXJFZmZlY3RzRm9ySXNvbGF0ZWRQYXNzID0gbmV3IEFycmF5KCk7CisgICAgfTsKKyAgICBQ
b3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLnByb3RvdHlwZS5fZW5hYmxlTVNBQU9uRmlyc3RQb3N0
UHJvY2VzcyA9IGZ1bmN0aW9uIChzYW1wbGVDb3VudCkgeworICAgICAgICBpZiAodGhpcy5lbmdp
bmUud2ViR0xWZXJzaW9uID09PSAxKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gU2V0IHNhbXBsZXMgb2YgdGhlIHZlcnkgZmlyc3QgcG9zdCBwcm9j
ZXNzIHRvIDQgdG8gZW5hYmxlIG5hdGl2ZSBhbnRpLWFsaWFzaW5nIGluIGJyb3dzZXJzIHRoYXQg
c3VwcG9ydCB3ZWJHTCAyLjAgKFNlZTogaHR0cHM6Ly9naXRodWIuY29tL0JhYnlsb25KUy9CYWJ5
bG9uLmpzL2lzc3Vlcy8zNzU0KQorICAgICAgICB2YXIgZWZmZWN0S2V5cyA9IE9iamVjdC5rZXlz
KHRoaXMuX3JlbmRlckVmZmVjdHMpOworICAgICAgICBpZiAoZWZmZWN0S2V5cy5sZW5ndGggPiAw
KSB7CisgICAgICAgICAgICB2YXIgcG9zdFByb2Nlc3NlcyA9IHRoaXMuX3JlbmRlckVmZmVjdHNb
ZWZmZWN0S2V5c1swXV0uZ2V0UG9zdFByb2Nlc3NlcygpOworICAgICAgICAgICAgaWYgKHBvc3RQ
cm9jZXNzZXMpIHsKKyAgICAgICAgICAgICAgICBwb3N0UHJvY2Vzc2VzWzBdLnNhbXBsZXMgPSBz
YW1wbGVDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIG9mIHRoZSBwaXBlbGluZQorICAg
ICAqLworICAgIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgY2hpbGRyZW4K
KyAgICB9OworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3Jh
dGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgUG9zdFByb2Nlc3NSZW5kZXJQaXBl
bGluZS5wcm90b3R5cGUsICJfbmFtZSIsIHZvaWQgMCk7CisgICAgcmV0dXJuIFBvc3RQcm9jZXNz
UmVuZGVyUGlwZWxpbmU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQ
cm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvUmVu
ZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9zdFByb2Nlc3NSZW5k
ZXJQaXBlbGluZU1hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
UG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBv
c3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyOyB9KTsKKy8qKgorICogUG9zdFByb2Nlc3NS
ZW5kZXJQaXBlbGluZU1hbmFnZXIgY2xhc3MKKyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpz
LmNvbS9ob3dfdG8vaG93X3RvX3VzZV9wb3N0cHJvY2Vzc3JlbmRlcnBpcGVsaW5lCisgKi8KK3Zh
ciBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyBhIFBvc3RQcm9jZXNzUmVuZGVy
UGlwZWxpbmVNYW5hZ2VyCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hv
d190by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNzcmVuZGVycGlwZWxpbmUKKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlcigpIHsKKyAgICAgICAgdGhp
cy5fcmVuZGVyUGlwZWxpbmVzID0ge307CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5wcm90b3R5cGUsICJzdXBwb3J0ZWRQ
aXBlbGluZXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIHN1
cHBvcnRlZCByZW5kZXIgcGlwZWxpbmVzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICAgICAgICAgIGZvciAo
dmFyIHJlbmRlclBpcGVsaW5lTmFtZSBpbiB0aGlzLl9yZW5kZXJQaXBlbGluZXMpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyUGlwZWxpbmVzLmhhc093blByb3BlcnR5KHJlbmRl
clBpcGVsaW5lTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBpcGVsaW5lID0gdGhp
cy5fcmVuZGVyUGlwZWxpbmVzW3JlbmRlclBpcGVsaW5lTmFtZV07CisgICAgICAgICAgICAgICAg
ICAgIGlmIChwaXBlbGluZS5pc1N1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnB1c2gocGlwZWxpbmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQWRkcyBhIHBpcGVsaW5lIHRvIHRoZSBtYW5h
Z2VyCisgICAgICogQHBhcmFtIHJlbmRlclBpcGVsaW5lIFRoZSBwaXBlbGluZSB0byBhZGQKKyAg
ICAgKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5wcm90b3R5cGUuYWRk
UGlwZWxpbmUgPSBmdW5jdGlvbiAocmVuZGVyUGlwZWxpbmUpIHsKKyAgICAgICAgdGhpcy5fcmVu
ZGVyUGlwZWxpbmVzW3JlbmRlclBpcGVsaW5lLl9uYW1lXSA9IHJlbmRlclBpcGVsaW5lOworICAg
IH07CisgICAgLyoqCisgICAgICogQXR0YWNoZXMgYSBjYW1lcmEgdG8gdGhlIHBpcGVsaW5lCisg
ICAgICogQHBhcmFtIHJlbmRlclBpcGVsaW5lTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGlwZWxpbmUg
dG8gYXR0YWNoIHRvCisgICAgICogQHBhcmFtIGNhbWVyYXMgdGhlIGNhbWVyYSB0byBhdHRhY2gK
KyAgICAgKiBAcGFyYW0gdW5pcXVlIGlmIHRoZSBjYW1lcmEgY2FuIGJlIGF0dGFjaGVkIG11bHRp
cGxlIHRpbWVzIHRvIHRoZSBwaXBlbGluZQorICAgICAqLworICAgIFBvc3RQcm9jZXNzUmVuZGVy
UGlwZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5hdHRhY2hDYW1lcmFzVG9SZW5kZXJQaXBlbGluZSA9
IGZ1bmN0aW9uIChyZW5kZXJQaXBlbGluZU5hbWUsIGNhbWVyYXMsIHVuaXF1ZSkgeworICAgICAg
ICBpZiAodW5pcXVlID09PSB2b2lkIDApIHsgdW5pcXVlID0gZmFsc2U7IH0KKyAgICAgICAgdmFy
IHJlbmRlclBpcGVsaW5lID0gdGhpcy5fcmVuZGVyUGlwZWxpbmVzW3JlbmRlclBpcGVsaW5lTmFt
ZV07CisgICAgICAgIGlmICghcmVuZGVyUGlwZWxpbmUpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICByZW5kZXJQaXBlbGluZS5fYXR0YWNoQ2FtZXJhcyhjYW1lcmFz
LCB1bmlxdWUpOworICAgIH07CisgICAgLyoqCisgICAgICogRGV0YWNoZXMgYSBjYW1lcmEgZnJv
bSB0aGUgcGlwZWxpbmUKKyAgICAgKiBAcGFyYW0gcmVuZGVyUGlwZWxpbmVOYW1lIFRoZSBuYW1l
IG9mIHRoZSBwaXBlbGluZSB0byBkZXRhY2ggZnJvbQorICAgICAqIEBwYXJhbSBjYW1lcmFzIHRo
ZSBjYW1lcmEgdG8gZGV0YWNoCisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGlu
ZU1hbmFnZXIucHJvdG90eXBlLmRldGFjaENhbWVyYXNGcm9tUmVuZGVyUGlwZWxpbmUgPSBmdW5j
dGlvbiAocmVuZGVyUGlwZWxpbmVOYW1lLCBjYW1lcmFzKSB7CisgICAgICAgIHZhciByZW5kZXJQ
aXBlbGluZSA9IHRoaXMuX3JlbmRlclBpcGVsaW5lc1tyZW5kZXJQaXBlbGluZU5hbWVdOworICAg
ICAgICBpZiAoIXJlbmRlclBpcGVsaW5lKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgcmVuZGVyUGlwZWxpbmUuX2RldGFjaENhbWVyYXMoY2FtZXJhcyk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBFbmFibGVzIGFuIGVmZmVjdCBieSBuYW1lIG9uIGEgcGlwZWxp
bmUKKyAgICAgKiBAcGFyYW0gcmVuZGVyUGlwZWxpbmVOYW1lIHRoZSBuYW1lIG9mIHRoZSBwaXBl
bGluZSB0byBlbmFibGUgdGhlIGVmZmVjdCBpbgorICAgICAqIEBwYXJhbSByZW5kZXJFZmZlY3RO
YW1lIHRoZSBuYW1lIG9mIHRoZSBlZmZlY3QgdG8gZW5hYmxlCisgICAgICogQHBhcmFtIGNhbWVy
YXMgdGhlIGNhbWVyYXMgdGhhdCB0aGUgZWZmZWN0IHNob3VsZCBiZSBlbmFibGVkIG9uCisgICAg
ICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIucHJvdG90eXBlLmVuYWJs
ZUVmZmVjdEluUGlwZWxpbmUgPSBmdW5jdGlvbiAocmVuZGVyUGlwZWxpbmVOYW1lLCByZW5kZXJF
ZmZlY3ROYW1lLCBjYW1lcmFzKSB7CisgICAgICAgIHZhciByZW5kZXJQaXBlbGluZSA9IHRoaXMu
X3JlbmRlclBpcGVsaW5lc1tyZW5kZXJQaXBlbGluZU5hbWVdOworICAgICAgICBpZiAoIXJlbmRl
clBpcGVsaW5lKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVu
ZGVyUGlwZWxpbmUuX2VuYWJsZUVmZmVjdChyZW5kZXJFZmZlY3ROYW1lLCBjYW1lcmFzKTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIERpc2FibGVzIGFuIGVmZmVjdCBieSBuYW1lIG9uIGEgcGlw
ZWxpbmUKKyAgICAgKiBAcGFyYW0gcmVuZGVyUGlwZWxpbmVOYW1lIHRoZSBuYW1lIG9mIHRoZSBw
aXBlbGluZSB0byBkaXNhYmxlIHRoZSBlZmZlY3QgaW4KKyAgICAgKiBAcGFyYW0gcmVuZGVyRWZm
ZWN0TmFtZSB0aGUgbmFtZSBvZiB0aGUgZWZmZWN0IHRvIGRpc2FibGUKKyAgICAgKiBAcGFyYW0g
Y2FtZXJhcyB0aGUgY2FtZXJhcyB0aGF0IHRoZSBlZmZlY3Qgc2hvdWxkIGJlIGRpc2FibGVkIG9u
CisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIucHJvdG90eXBl
LmRpc2FibGVFZmZlY3RJblBpcGVsaW5lID0gZnVuY3Rpb24gKHJlbmRlclBpcGVsaW5lTmFtZSwg
cmVuZGVyRWZmZWN0TmFtZSwgY2FtZXJhcykgeworICAgICAgICB2YXIgcmVuZGVyUGlwZWxpbmUg
PSB0aGlzLl9yZW5kZXJQaXBlbGluZXNbcmVuZGVyUGlwZWxpbmVOYW1lXTsKKyAgICAgICAgaWYg
KCFyZW5kZXJQaXBlbGluZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHJlbmRlclBpcGVsaW5lLl9kaXNhYmxlRWZmZWN0KHJlbmRlckVmZmVjdE5hbWUsIGNhbWVy
YXMpOworICAgIH07CisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgYWxsIGNv
bnRhaW5lZCByZW5kZXIgcGlwZWxpbmVzIGFuZCBkaXNwb3NlcyBvZiBhbnkgbm9uIHN1cHBvcnRl
ZCBwaXBlbGluZXMKKyAgICAgKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdl
ci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciByZW5k
ZXJQaXBlbGluZU5hbWUgaW4gdGhpcy5fcmVuZGVyUGlwZWxpbmVzKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fcmVuZGVyUGlwZWxpbmVzLmhhc093blByb3BlcnR5KHJlbmRlclBpcGVsaW5lTmFt
ZSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGlwZWxpbmUgPSB0aGlzLl9yZW5kZXJQaXBlbGlu
ZXNbcmVuZGVyUGlwZWxpbmVOYW1lXTsKKyAgICAgICAgICAgICAgICBpZiAoIXBpcGVsaW5lLmlz
U3VwcG9ydGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lLmRpc3Bvc2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3JlbmRlclBpcGVsaW5lc1tyZW5kZXJQaXBl
bGluZU5hbWVdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgcGlwZWxpbmUuX3VwZGF0ZSgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAg
ICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5wcm90b3R5cGUuX3JlYnVpbGQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFyIHJlbmRlclBpcGVsaW5lTmFtZSBpbiB0aGlz
Ll9yZW5kZXJQaXBlbGluZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yZW5kZXJQaXBlbGlu
ZXMuaGFzT3duUHJvcGVydHkocmVuZGVyUGlwZWxpbmVOYW1lKSkgeworICAgICAgICAgICAgICAg
IHZhciBwaXBlbGluZSA9IHRoaXMuX3JlbmRlclBpcGVsaW5lc1tyZW5kZXJQaXBlbGluZU5hbWVd
OworICAgICAgICAgICAgICAgIHBpcGVsaW5lLl9yZWJ1aWxkKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIG9mIHRoZSBtYW5hZ2Vy
IGFuZCBwaXBlbGluZXMKKyAgICAgKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFu
YWdlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIg
cmVuZGVyUGlwZWxpbmVOYW1lIGluIHRoaXMuX3JlbmRlclBpcGVsaW5lcykgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX3JlbmRlclBpcGVsaW5lcy5oYXNPd25Qcm9wZXJ0eShyZW5kZXJQaXBlbGlu
ZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgdmFyIHBpcGVsaW5lID0gdGhpcy5fcmVuZGVyUGlw
ZWxpbmVzW3JlbmRlclBpcGVsaW5lTmFtZV07CisgICAgICAgICAgICAgICAgcGlwZWxpbmUuZGlz
cG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gUG9z
dFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJQ
aXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bv
c3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBQ
b3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50ICovCisvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5h
Z2VyU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFBvc3RQcm9jZXNzUmVuZGVy
UGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc2NlbmVDb21wb25lbnQgKi8gIi4vc2NlbmVDb21wb25l
bnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3NSZW5kZXJQaXBl
bGluZU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vcG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXIgKi8gIi4vUG9zdFBy
b2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vc2NlbmUgKi8gIi4vc2Nl
bmUudHMiKTsKKworCisKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShfc2NlbmVfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siU2NlbmUiXS5wcm90b3R5cGUsICJwb3N0UHJvY2Vzc1JlbmRlclBp
cGVsaW5lTWFuYWdlciIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF0
aGlzLl9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlcikgeworICAgICAgICAgICAgLy8g
UmVnaXN0ZXIgdGhlIEcgQnVmZmVyIGNvbXBvbmVudCB0byB0aGUgc2NlbmUuCisgICAgICAgICAg
ICB2YXIgY29tcG9uZW50ID0gdGhpcy5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVf
UE9TVFBST0NFU1NSRU5ERVJQSVBFTElORU1BTkFHRVIpOworICAgICAgICAgICAgaWYgKCFjb21w
b25lbnQpIHsKKyAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBuZXcgUG9zdFByb2Nlc3NSZW5k
ZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVudCh0aGlzKTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9hZGRDb21wb25lbnQoY29tcG9uZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyID0gbmV3IF9wb3N0UHJvY2Vz
c1JlbmRlclBpcGVsaW5lTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb3N0
UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlciJdKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMuX3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyOworICAgIH0sCisgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRydWUKK30pOworLyoqCisgKiBE
ZWZpbmVzIHRoZSBSZW5kZXIgUGlwZWxpbmUgc2NlbmUgY29tcG9uZW50IHJlc3BvbnNpYmxlIHRv
IHJlbmRlcmluZyBwaXBlbGluZXMKKyAqLwordmFyIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVN
YW5hZ2VyU2NlbmVDb21wb25lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50IGZvciB0
aGUgZ2l2ZW4gc2NlbmUKKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lcyB0aGUgc2NlbmUgdG8g
cmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBpbgorICAgICAqLworICAgIGZ1bmN0aW9uIFBvc3RQcm9j
ZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQoc2NlbmUpIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFRoZSBjb21wb25lbnQgbmFtZSBoZWxwZnVsbCB0byBpZGVudGlmeSB0
aGUgY29tcG9uZW50IGluIHRoZSBsaXN0IG9mIHNjZW5lIGNvbXBvbmVudHMuCisgICAgICAgICAq
LworICAgICAgICB0aGlzLm5hbWUgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX1BPU1RQUk9DRVNTUkVO
REVSUElQRUxJTkVNQU5BR0VSOworICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7CisgICAgfQor
ICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyB0aGUgY29tcG9uZW50IGluIGEgZ2l2ZW4gc2NlbmUK
KyAgICAgKi8KKyAgICBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9u
ZW50LnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2Vu
ZS5fZ2F0aGVyUmVuZGVyVGFyZ2V0c1N0YWdlLnJlZ2lzdGVyU3RlcChfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5T
VEVQX0dBVEhFUlJFTkRFUlRBUkdFVFNfUE9TVFBST0NFU1NSRU5ERVJQSVBFTElORU1BTkFHRVIs
IHRoaXMsIHRoaXMuX2dhdGhlclJlbmRlclRhcmdldHMpOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmVidWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4gY2Fz
ZSBvZgorICAgICAqIGNvbnRleHQgbG9zdCBmb3IgaW5zdGFuY2UuCisgICAgICovCisgICAgUG9z
dFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUucmVi
dWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuc2NlbmUuX3Bvc3RQcm9jZXNz
UmVuZGVyUGlwZWxpbmVNYW5hZ2VyKSB7CisgICAgICAgICAgICB0aGlzLnNjZW5lLl9wb3N0UHJv
Y2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyB0aGUgY29tcG9uZW50IGFuZCB0aGUgYXNzb2NpYXRl
ZCByZXNzb3VyY2VzCisgICAgICovCisgICAgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFn
ZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgaWYgKHRoaXMuc2NlbmUuX3Bvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyKSB7Cisg
ICAgICAgICAgICB0aGlzLnNjZW5lLl9wb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlci5k
aXNwb3NlKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxp
bmVNYW5hZ2VyU2NlbmVDb21wb25lbnQucHJvdG90eXBlLl9nYXRoZXJSZW5kZXJUYXJnZXRzID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5zY2VuZS5fcG9zdFByb2Nlc3NSZW5kZXJQ
aXBlbGluZU1hbmFnZXIpIHsKKyAgICAgICAgICAgIHRoaXMuc2NlbmUuX3Bvc3RQcm9jZXNzUmVu
ZGVyUGlwZWxpbmVNYW5hZ2VyLnVwZGF0ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1
cm4gUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVudDsKK30oKSk7
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9hbmFnbHlwaFBvc3RQ
cm9jZXNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvYW5hZ2x5cGhQb3N0UHJvY2Vzcy50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IEFuYWdseXBoUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5hZ2x5cGhQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gQW5hZ2x5cGhQb3N0UHJvY2VzczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bv
c3RQcm9jZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
U2hhZGVyc19hbmFnbHlwaF9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9hbmFnbHlwaC5mcmFnbWVudCAqLyAi
Li9TaGFkZXJzL2FuYWdseXBoLmZyYWdtZW50LnRzIik7CisKKworCisvKioKKyAqIFBvc3Rwcm9j
ZXNzIHVzZWQgdG8gZ2VuZXJhdGUgYW5hZ2x5cGhpYyByZW5kZXJpbmcKKyAqLwordmFyIEFuYWds
eXBoUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oQW5hZ2x5cGhQ
b3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IEFuYWds
eXBoUG9zdFByb2Nlc3MKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHBvc3Rwcm9jZXNzIG5h
bWUKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIGNyZWF0aW9uIG9wdGlvbnMgb3IgdGFy
Z2V0IHJhdGlvIHNjYWxlCisgICAgICogQHBhcmFtIHJpZ0NhbWVyYXMgZGVmaW5lcyBjYW1lcmFz
IHVzaW5nIHRoaXMgcG9zdHByb2Nlc3MKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIGRlZmlu
ZXMgcmVxdWlyZWQgc2FtcGxpbmcgbW9kZSAoQkFCWUxPTi5UZXh0dXJlLk5FQVJFU1RfU0FNUExJ
TkdNT0RFIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGVuZ2luZSBkZWZpbmVzIGhvc3Rpbmcg
ZW5naW5lCisgICAgICogQHBhcmFtIHJldXNhYmxlIGRlZmluZXMgaWYgdGhlIHBvc3Rwcm9jZXNz
IHdpbGwgYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzIHBlciBmcmFtZQorICAgICAqLworICAgIGZ1
bmN0aW9uIEFuYWdseXBoUG9zdFByb2Nlc3MobmFtZSwgb3B0aW9ucywgcmlnQ2FtZXJhcywgc2Ft
cGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIG5hbWUsICJhbmFnbHlwaCIsIG51bGwsIFsibGVmdFNhbXBsZXIiXSwgb3B0
aW9ucywgcmlnQ2FtZXJhc1sxXSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB8fCB0
aGlzOworICAgICAgICBfdGhpcy5fcGFzc2VkUHJvY2VzcyA9IHJpZ0NhbWVyYXNbMF0uX3JpZ1Bv
c3RQcm9jZXNzOworICAgICAgICBfdGhpcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24g
KGVmZmVjdCkgeworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3Mo
ImxlZnRTYW1wbGVyIiwgX3RoaXMuX3Bhc3NlZFByb2Nlc3MpOworICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICByZXR1cm4gQW5hZ2x5cGhQb3N0UHJvY2VzczsK
K30oX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNz
Il0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2JsYWNrQW5k
V2hpdGVQb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvYmxhY2tBbmRX
aGl0ZVBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBCbGFja0FuZFdo
aXRlUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmxh
Y2tBbmRXaGl0ZVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCbGFja0FuZFdoaXRl
UG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAi
Li4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQ
cm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfYmxhY2tBbmRX
aGl0ZV9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vU2hhZGVycy9ibGFja0FuZFdoaXRlLmZyYWdtZW50ICovICIuL1NoYWRl
cnMvYmxhY2tBbmRXaGl0ZS5mcmFnbWVudC50cyIpOworCisKKworLyoqCisgKiBQb3N0IHByb2Nl
c3MgdXNlZCB0byByZW5kZXIgaW4gYmxhY2sgYW5kIHdoaXRlCisgKi8KK3ZhciBCbGFja0FuZFdo
aXRlUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oQmxhY2tBbmRX
aGl0ZVBvc3RQcm9jZXNzLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBibGFj
ayBhbmQgd2hpdGUgcG9zdCBwcm9jZXNzCisgICAgICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9u
anMuY29tL2hvd190by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNzZXMjYmxhY2stYW5kLXdoaXRlCisg
ICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0g
b3B0aW9ucyBUaGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlvIHRvIGRvd25zaXplIHRvIGJl
Zm9yZSBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzLgorICAgICAqIEBwYXJhbSBjYW1lcmEgVGhl
IGNhbWVyYSB0byBhcHBseSB0aGUgcmVuZGVyIHBhc3MgdG8uCisgICAgICogQHBhcmFtIHNhbXBs
aW5nTW9kZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBw
YXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgd2hpY2gg
dGhlIHBvc3QgcHJvY2VzcyB3aWxsIGJlIGFwcGxpZWQuIChkZWZhdWx0OiBjdXJyZW50IGVuZ2lu
ZSkKKyAgICAgKiBAcGFyYW0gcmV1c2FibGUgSWYgdGhlIHBvc3QgcHJvY2VzcyBjYW4gYmUgcmV1
c2VkIG9uIHRoZSBzYW1lIGZyYW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgZnVu
Y3Rpb24gQmxhY2tBbmRXaGl0ZVBvc3RQcm9jZXNzKG5hbWUsIG9wdGlvbnMsIGNhbWVyYSwgc2Ft
cGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIG5hbWUsICJibGFja0FuZFdoaXRlIiwgWyJkZWdyZWUiXSwgbnVsbCwgb3B0
aW9ucywgY2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUpIHx8IHRoaXM7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBMaW5lYXIgYWJvdXQgdG8gY29udmVydCBoZSByZXN1bHQg
dG8gYmxhY2sgYW5kIHdoaXRlIChkZWZhdWx0OiAxKQorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMuZGVncmVlID0gMTsKKyAgICAgICAgX3RoaXMub25BcHBseU9ic2VydmFibGUuYWRkKGZ1bmN0
aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiZGVncmVlIiwgX3Ro
aXMuZGVncmVlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9Cisg
ICAgcmV0dXJuIEJsYWNrQW5kV2hpdGVQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2Jsb29tRWZmZWN0LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2Vz
L2Jsb29tRWZmZWN0LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJsb29tRWZmZWN0ICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJsb29tRWZmZWN0IiwgZnVuY3Rpb24oKSB7IHJldHVy
biBCbG9vbUVmZmVjdDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJF
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFByb2Nlc3NSZW5kZXJFZmZl
Y3QgKi8gIi4vUG9zdFByb2Nlc3Nlcy9SZW5kZXJQaXBlbGluZS9wb3N0UHJvY2Vzc1JlbmRlckVm
ZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9leHRyYWN0SGlnaGxpZ2h0c1Bv
c3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL2V4dHJhY3RIaWdobGlnaHRzUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nl
cy9leHRyYWN0SGlnaGxpZ2h0c1Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2JsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ibHVyUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nl
cy9ibHVyUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmxvb21N
ZXJnZVBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL2Jsb29tTWVyZ2VQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2Vz
L2Jsb29tTWVyZ2VQb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0
b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3Rl
eHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJl
cy90ZXh0dXJlLnRzIik7CisKKworCisKKworCisKKy8qKgorICogVGhlIGJsb29tIGVmZmVjdCBz
cHJlYWRzIGJyaWdodCBhcmVhcyBvZiBhbiBpbWFnZSB0byBzaW11bGF0ZSBhcnRpZmFjdHMgc2Vl
biBpbiBjYW1lcmFzCisgKi8KK3ZhciBCbG9vbUVmZmVjdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShCbG9vbUVmZmVjdCwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgbmV3IGluc3RhbmNlIG9mIEBzZWUgQmxvb21FZmZlY3QKKyAgICAgKiBAcGFyYW0gc2NlbmUg
VGhlIHNjZW5lIHRoZSBlZmZlY3QgYmVsb25ncyB0by4KKyAgICAgKiBAcGFyYW0gYmxvb21TY2Fs
ZSBUaGUgcmF0aW8gb2YgdGhlIGJsdXIgdGV4dHVyZSB0byB0aGUgaW5wdXQgdGV4dHVyZSB0aGF0
IHNob3VsZCBiZSB1c2VkIHRvIGNvbXB1dGUgdGhlIGJsb29tLgorICAgICAqIEBwYXJhbSBibG9v
bUtlcm5lbCBUaGUgc2l6ZSBvZiB0aGUga2VybmVsIHRvIGJlIHVzZWQgd2hlbiBhcHBseWluZyB0
aGUgYmx1ci4KKyAgICAgKiBAcGFyYW0gYmxvb21XZWlnaHQgVGhlIHRoZSBzdHJlbmd0aCBvZiBi
bG9vbS4KKyAgICAgKiBAcGFyYW0gcGlwZWxpbmVUZXh0dXJlVHlwZSBUaGUgdHlwZSBvZiB0ZXh0
dXJlIHRvIGJlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIHRoZSBwb3N0IHByb2Nlc3NpbmcuCisgICAg
ICogQHBhcmFtIGJsb2NrQ29tcGlsYXRpb24gSWYgY29tcGlsYXRpb24gb2YgdGhlIHNoYWRlciBz
aG91bGQgbm90IGJlIGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLiBUaGUgdXBkYXRlRWZmZWN0IG1l
dGhvZCBjYW4gYmUgdXNlZCB0byBjb21waWxlIHRoZSBzaGFkZXIgYXQgYSBsYXRlciB0aW1lLiAo
ZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgZnVuY3Rpb24gQmxvb21FZmZlY3Qoc2NlbmUs
IGJsb29tU2NhbGUsIGJsb29tV2VpZ2h0LCBibG9vbUtlcm5lbCwgcGlwZWxpbmVUZXh0dXJlVHlw
ZSwgYmxvY2tDb21waWxhdGlvbikgeworICAgICAgICBpZiAocGlwZWxpbmVUZXh0dXJlVHlwZSA9
PT0gdm9pZCAwKSB7IHBpcGVsaW5lVGV4dHVyZVR5cGUgPSAwOyB9CisgICAgICAgIGlmIChibG9j
a0NvbXBpbGF0aW9uID09PSB2b2lkIDApIHsgYmxvY2tDb21waWxhdGlvbiA9IGZhbHNlOyB9Cisg
ICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjZW5lLmdldEVuZ2luZSgpLCAi
Ymxvb20iLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2VmZmVjdHM7
CisgICAgICAgIH0sIHRydWUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmJsb29tU2NhbGUgPSBi
bG9vbVNjYWxlOworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbiBJbnRlcm5hbAorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2VmZmVjdHMgPSBbXTsKKyAgICAgICAgX3RoaXMuX2Rv
d25zY2FsZSA9IG5ldyBfZXh0cmFjdEhpZ2hsaWdodHNQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJFeHRyYWN0SGlnaGxpZ2h0c1Bvc3RQcm9jZXNzIl0oImhpZ2hsaWdo
dHMiLCAxLjAsIG51bGwsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNl9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5n
ZXRFbmdpbmUoKSwgZmFsc2UsIHBpcGVsaW5lVGV4dHVyZVR5cGUsIGJsb2NrQ29tcGlsYXRpb24p
OworICAgICAgICBfdGhpcy5fYmx1clggPSBuZXcgX2JsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJCbHVyUG9zdFByb2Nlc3MiXSgiaG9yaXpvbnRhbCBibHVyIiwg
bmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJWZWN0
b3IyIl0oMS4wLCAwKSwgMTAuMCwgYmxvb21TY2FsZSwgbnVsbCwgX01hdGVyaWFsc19UZXh0dXJl
c190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRleHR1cmUiXS5CSUxJTkVB
Ul9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgcGlwZWxpbmVUZXh0dXJl
VHlwZSwgdW5kZWZpbmVkLCBibG9ja0NvbXBpbGF0aW9uKTsKKyAgICAgICAgX3RoaXMuX2JsdXJY
LmFsd2F5c0ZvcmNlUE9UID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX2JsdXJYLmF1dG9DbGVhciA9
IGZhbHNlOworICAgICAgICBfdGhpcy5fYmx1clkgPSBuZXcgX2JsdXJQb3N0UHJvY2Vzc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJCbHVyUG9zdFByb2Nlc3MiXSgidmVydGljYWwgYmx1
ciIsIG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1si
VmVjdG9yMiJdKDAsIDEuMCksIDEwLjAsIGJsb29tU2NhbGUsIG51bGwsIF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJUZXh0dXJlIl0uQklM
SU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsIHBpcGVsaW5lVGV4
dHVyZVR5cGUsIHVuZGVmaW5lZCwgYmxvY2tDb21waWxhdGlvbik7CisgICAgICAgIF90aGlzLl9i
bHVyWS5hbHdheXNGb3JjZVBPVCA9IHRydWU7CisgICAgICAgIF90aGlzLl9ibHVyWS5hdXRvQ2xl
YXIgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMua2VybmVsID0gYmxvb21LZXJuZWw7CisgICAgICAg
IF90aGlzLl9lZmZlY3RzID0gW190aGlzLl9kb3duc2NhbGUsIF90aGlzLl9ibHVyWCwgX3RoaXMu
X2JsdXJZXTsKKyAgICAgICAgX3RoaXMuX21lcmdlID0gbmV3IF9ibG9vbU1lcmdlUG9zdFByb2Nl
c3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQmxvb21NZXJnZVBvc3RQcm9jZXNzIl0o
ImJsb29tTWVyZ2UiLCBfdGhpcy5fZG93bnNjYWxlLCBfdGhpcy5fYmx1clksIGJsb29tV2VpZ2h0
LCBibG9vbVNjYWxlLCBudWxsLCBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERSwgc2Nl
bmUuZ2V0RW5naW5lKCksIGZhbHNlLCBwaXBlbGluZVRleHR1cmVUeXBlLCBibG9ja0NvbXBpbGF0
aW9uKTsKKyAgICAgICAgX3RoaXMuX21lcmdlLmF1dG9DbGVhciA9IGZhbHNlOworICAgICAgICBf
dGhpcy5fZWZmZWN0cy5wdXNoKF90aGlzLl9tZXJnZSk7CisgICAgICAgIHJldHVybiBfdGhpczsK
KyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJsb29tRWZmZWN0LnByb3RvdHlwZSwg
InRocmVzaG9sZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBsdW1pbmFuY2UgdGhy
ZXNob2xkIHRvIGZpbmQgYnJpZ2h0IGFyZWFzIG9mIHRoZSBpbWFnZSB0byBibG9vbS4KKyAgICAg
ICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2Rvd25zY2FsZS50aHJlc2hvbGQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9kb3duc2NhbGUudGhyZXNob2xkID0gdmFs
dWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCbG9vbUVm
ZmVjdC5wcm90b3R5cGUsICJ3ZWlnaHQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
c3RyZW5ndGggb2YgdGhlIGJsb29tLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWVyZ2Uud2VpZ2h0OworICAgICAgICB9
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fbWVy
Z2Uud2VpZ2h0ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShCbG9vbUVmZmVjdC5wcm90b3R5cGUsICJrZXJuZWwiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIGJsb29tIGJsdXIga2VybmVsLCBy
ZWxhdGl2ZSB0byB0aGUgZmluYWwgb3V0cHV0IHNpemUKKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JsdXJYLmtlcm5lbCAv
IHRoaXMuYmxvb21TY2FsZTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2JsdXJYLmtlcm5lbCA9IHZhbHVlICogdGhpcy5ibG9v
bVNjYWxlOworICAgICAgICAgICAgdGhpcy5fYmx1clkua2VybmVsID0gdmFsdWUgKiB0aGlzLmJs
b29tU2NhbGU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIGVh
Y2ggb2YgdGhlIGludGVybmFsIGVmZmVjdHMgZm9yIGEgZ2l2ZW4gY2FtZXJhLgorICAgICAqIEBw
YXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0byBkaXNwb3NlIHRoZSBlZmZlY3Qgb24uCisgICAgICov
CisgICAgQmxvb21FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2VFZmZlY3RzID0gZnVuY3Rpb24gKGNh
bWVyYSkgeworICAgICAgICBmb3IgKHZhciBlZmZlY3RJbmRleCA9IDA7IGVmZmVjdEluZGV4IDwg
dGhpcy5fZWZmZWN0cy5sZW5ndGg7IGVmZmVjdEluZGV4KyspIHsKKyAgICAgICAgICAgIHRoaXMu
X2VmZmVjdHNbZWZmZWN0SW5kZXhdLmRpc3Bvc2UoY2FtZXJhKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqCisgICAgICogQGhpZGRlbiBJbnRlcm5hbAorICAgICAqLworICAgIEJsb29tRWZm
ZWN0LnByb3RvdHlwZS5fdXBkYXRlRWZmZWN0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9y
ICh2YXIgZWZmZWN0SW5kZXggPSAwOyBlZmZlY3RJbmRleCA8IHRoaXMuX2VmZmVjdHMubGVuZ3Ro
OyBlZmZlY3RJbmRleCsrKSB7CisgICAgICAgICAgICB0aGlzLl9lZmZlY3RzW2VmZmVjdEluZGV4
XS51cGRhdGVFZmZlY3QoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogSW50
ZXJuYWwKKyAgICAgKiBAcmV0dXJucyBpZiBhbGwgdGhlIGNvbnRhaW5lZCBwb3N0IHByb2Nlc3Nl
cyBhcmUgcmVhZHkuCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIEJsb29tRWZmZWN0LnBy
b3RvdHlwZS5faXNSZWFkeSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgZWZmZWN0
SW5kZXggPSAwOyBlZmZlY3RJbmRleCA8IHRoaXMuX2VmZmVjdHMubGVuZ3RoOyBlZmZlY3RJbmRl
eCsrKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2VmZmVjdHNbZWZmZWN0SW5kZXhdLmlzUmVh
ZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIHJldHVybiBCbG9vbUVm
ZmVjdDsKK30oX1Bvc3RQcm9jZXNzZXNfUmVuZGVyUGlwZWxpbmVfcG9zdFByb2Nlc3NSZW5kZXJF
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZl
Y3QiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvYmxvb21N
ZXJnZVBvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9ibG9vbU1lcmdlUG9z
dFByb2Nlc3MudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJsb29tTWVyZ2VQb3N0UHJvY2Vz
cyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCbG9vbU1lcmdlUG9zdFBy
b2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJsb29tTWVyZ2VQb3N0UHJvY2VzczsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRz
ICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNfYmxvb21NZXJnZV9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9ibG9vbU1lcmdlLmZyYWdtZW50
ICovICIuL1NoYWRlcnMvYmxvb21NZXJnZS5mcmFnbWVudC50cyIpOworCisKKworCisvKioKKyAq
IFRoZSBCbG9vbU1lcmdlUG9zdFByb2Nlc3MgbWVyZ2VzIGJsdXJyZWQgaW1hZ2VzIHdpdGggdGhl
IG9yaWdpbmFsIGJhc2VkIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGNpcmNsZSBvZiBjb25mdXNpb24u
CisgKi8KK3ZhciBCbG9vbU1lcmdlUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19l
eHRlbmRzIl0oQmxvb21NZXJnZVBvc3RQcm9jZXNzLCBfc3VwZXIpOworICAgIC8qKgorICAgICAq
IENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgQHNlZSBCbG9vbU1lcmdlUG9zdFByb2Nlc3MKKyAg
ICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZWZmZWN0LgorICAgICAqIEBwYXJhbSBv
cmlnaW5hbEZyb21JbnB1dCBQb3N0IHByb2Nlc3Mgd2hpY2gncyBpbnB1dCB3aWxsIGJlIHVzZWQg
Zm9yIHRoZSBtZXJnZS4KKyAgICAgKiBAcGFyYW0gYmx1cnJlZCBCbHVycmVkIGhpZ2hsaWdodHMg
cG9zdCBwcm9jZXNzIHdoaWNoJ3Mgb3V0cHV0IHdpbGwgYmUgdXNlZC4KKyAgICAgKiBAcGFyYW0g
d2VpZ2h0IFdlaWdodCBvZiB0aGUgYmxvb20gdG8gYmUgYWRkZWQgdG8gdGhlIG9yaWdpbmFsIGlu
cHV0LgorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQgcmF0
aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisgICAg
ICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4K
KyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVzZWQg
d2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChkZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBlbmdp
bmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9zdCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4gKGRl
ZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAgICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUgcG9z
dCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24gdGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBmYWxz
ZSkKKyAgICAgKiBAcGFyYW0gdGV4dHVyZVR5cGUgVHlwZSBvZiB0ZXh0dXJlcyB1c2VkIHdoZW4g
cGVyZm9ybWluZyB0aGUgcG9zdCBwcm9jZXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0g
YmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxhdGlvbiBvZiB0aGUgc2hhZGVyIHNob3VsZCBub3Qg
YmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSB1cGRhdGVFZmZlY3QgbWV0aG9kIGNhbiBi
ZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRlciBhdCBhIGxhdGVyIHRpbWUuIChkZWZhdWx0OiBm
YWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBCbG9vbU1lcmdlUG9zdFByb2Nlc3MobmFtZSwg
b3JpZ2luYWxGcm9tSW5wdXQsIGJsdXJyZWQsIAorICAgIC8qKiBXZWlnaHQgb2YgdGhlIGJsb29t
IHRvIGJlIGFkZGVkIHRvIHRoZSBvcmlnaW5hbCBpbnB1dC4gKi8KKyAgICB3ZWlnaHQsIG9wdGlv
bnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlLCB0ZXh0dXJlVHlwZSwg
YmxvY2tDb21waWxhdGlvbikgeworICAgICAgICBpZiAodGV4dHVyZVR5cGUgPT09IHZvaWQgMCkg
eyB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7IH0KKyAgICAgICAg
aWYgKGJsb2NrQ29tcGlsYXRpb24gPT09IHZvaWQgMCkgeyBibG9ja0NvbXBpbGF0aW9uID0gZmFs
c2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgImJsb29t
TWVyZ2UiLCBbImJsb29tV2VpZ2h0Il0sIFsiY2lyY2xlT2ZDb25mdXNpb25TYW1wbGVyIiwgImJs
dXJTdGVwMCIsICJibHVyU3RlcDEiLCAiYmx1clN0ZXAyIiwgImJsb29tQmx1ciJdLCBvcHRpb25z
LCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgbnVsbCwgdGV4dHVyZVR5
cGUsIHVuZGVmaW5lZCwgbnVsbCwgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMud2VpZ2h0
ID0gd2VpZ2h0OworICAgICAgICBfdGhpcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24g
KGVmZmVjdCkgeworICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3Mo
InRleHR1cmVTYW1wbGVyIiwgb3JpZ2luYWxGcm9tSW5wdXQpOworICAgICAgICAgICAgZWZmZWN0
LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3NPdXRwdXQoImJsb29tQmx1ciIsIGJsdXJyZWQpOwor
ICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJibG9vbVdlaWdodCIsIF90aGlzLndlaWdodCk7
CisgICAgICAgIH0pOworICAgICAgICBpZiAoIWJsb2NrQ29tcGlsYXRpb24pIHsKKyAgICAgICAg
ICAgIF90aGlzLnVwZGF0ZUVmZmVjdCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBfdGhp
czsKKyAgICB9CisgICAgcmV0dXJuIEJsb29tTWVyZ2VQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2Vzcy50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL1Bvc3RQcm9jZXNzZXMvYmx1clBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBC
bHVyUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmx1
clBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCbHVyUG9zdFByb2Nlc3M7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3Rz
bGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vz
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlh
bHMvVGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfU2hhZGVyc19rZXJuZWxCbHVyX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2tlcm5lbEJsdXIu
ZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9rZXJuZWxCbHVyLmZyYWdtZW50LnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfa2VybmVsQmx1cl92ZXJ0ZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMva2Vy
bmVsQmx1ci52ZXJ0ZXggKi8gIi4vU2hhZGVycy9rZXJuZWxCbHVyLnZlcnRleC50cyIpOworCisK
KworCisKKworLyoqCisgKiBUaGUgQmx1ciBQb3N0IFByb2Nlc3Mgd2hpY2ggYmx1cnMgYW4gaW1h
Z2UgYmFzZWQgb24gYSBrZXJuZWwgYW5kIGRpcmVjdGlvbi4KKyAqIENhbiBiZSB1c2VkIHR3aWNl
IGluIHggYW5kIHkgZGlyZWN0aW9ucyB0byBwZXJmb3JtIGEgZ3Vhc3NpYW4gYmx1ciBpbiB0d28g
cGFzc2VzLgorICovCit2YXIgQmx1clBvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZXh0ZW5kcyJdKEJsdXJQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVh
dGVzIGEgbmV3IGluc3RhbmNlIEJsdXJQb3N0UHJvY2VzcworICAgICAqIEBwYXJhbSBuYW1lIFRo
ZSBuYW1lIG9mIHRoZSBlZmZlY3QuCisgICAgICogQHBhcmFtIGRpcmVjdGlvbiBUaGUgZGlyZWN0
aW9uIGluIHdoaWNoIHRvIGJsdXIgdGhlIGltYWdlLgorICAgICAqIEBwYXJhbSBrZXJuZWwgVGhl
IHNpemUgb2YgdGhlIGtlcm5lbCB0byBiZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBibHVyLiBl
Zy4gU2l6ZSBvZiAzIHdpbGwgYmx1ciB0aGUgY2VudGVyIHBpeGVsIGJ5IDIgcGl4ZWxzIHN1cnJv
dW5kaW5nIGl0LgorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSByZXF1aXJlZCB3aWR0aC9oZWln
aHQgcmF0aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3Mu
IChVc2UgMS4wIGZvciBmdWxsIHNpemUpCisgICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJh
IHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2Rl
IFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChk
ZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9z
dCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAg
ICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24g
dGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKiBAcGFyYW0gdGV4dHVyZVR5
cGUgVHlwZSBvZiB0ZXh0dXJlcyB1c2VkIHdoZW4gcGVyZm9ybWluZyB0aGUgcG9zdCBwcm9jZXNz
LiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gYmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxh
dGlvbiBvZiB0aGUgc2hhZGVyIHNob3VsZCBub3QgYmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3Iu
IFRoZSB1cGRhdGVFZmZlY3QgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRl
ciBhdCBhIGxhdGVyIHRpbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBCbHVyUG9zdFByb2Nlc3MobmFtZSwgCisgICAgLyoqIFRoZSBkaXJlY3Rpb24gaW4gd2hpY2gg
dG8gYmx1ciB0aGUgaW1hZ2UuICovCisgICAgZGlyZWN0aW9uLCBrZXJuZWwsIG9wdGlvbnMsIGNh
bWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlLCB0ZXh0dXJlVHlwZSwgZGVmaW5l
cywgYmxvY2tDb21waWxhdGlvbikgeworICAgICAgICBpZiAoc2FtcGxpbmdNb2RlID09PSB2b2lk
IDApIHsgc2FtcGxpbmdNb2RlID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREU7IH0K
KyAgICAgICAgaWYgKHRleHR1cmVUeXBlID09PSB2b2lkIDApIHsgdGV4dHVyZVR5cGUgPSBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAgIGlmIChkZWZpbmVzID09PSB2b2lk
IDApIHsgZGVmaW5lcyA9ICIiOyB9CisgICAgICAgIGlmIChibG9ja0NvbXBpbGF0aW9uID09PSB2
b2lkIDApIHsgYmxvY2tDb21waWxhdGlvbiA9IGZhbHNlOyB9CisgICAgICAgIHZhciBfdGhpcyA9
IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsICJrZXJuZWxCbHVyIiwgWyJkZWx0YSIsICJkaXJlY3Rp
b24iLCAiY2FtZXJhTWluTWF4WiJdLCBbImNpcmNsZU9mQ29uZnVzaW9uU2FtcGxlciJdLCBvcHRp
b25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgbnVsbCwgdGV4dHVy
ZVR5cGUsICJrZXJuZWxCbHVyIiwgeyB2YXJ5aW5nQ291bnQ6IDAsIGRlcENvdW50OiAwIH0sIHRy
dWUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKyAgICAg
ICAgX3RoaXMuYmxvY2tDb21waWxhdGlvbiA9IGJsb2NrQ29tcGlsYXRpb247CisgICAgICAgIF90
aGlzLl9wYWNrZWRGbG9hdCA9IGZhbHNlOworICAgICAgICBfdGhpcy5fc3RhdGljRGVmaW5lcyA9
ICIiOworICAgICAgICBfdGhpcy5fc3RhdGljRGVmaW5lcyA9IGRlZmluZXM7CisgICAgICAgIF90
aGlzLm9uQXBwbHlPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAg
ICBpZiAoX3RoaXMuX291dHB1dFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0
RmxvYXQyKCdkZWx0YScsICgxIC8gX3RoaXMuX291dHB1dFRleHR1cmUud2lkdGgpICogX3RoaXMu
ZGlyZWN0aW9uLngsICgxIC8gX3RoaXMuX291dHB1dFRleHR1cmUuaGVpZ2h0KSAqIF90aGlzLmRp
cmVjdGlvbi55KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIGVmZmVjdC5zZXRGbG9hdDIoJ2RlbHRhJywgKDEgLyBfdGhpcy53aWR0aCkgKiBfdGhp
cy5kaXJlY3Rpb24ueCwgKDEgLyBfdGhpcy5oZWlnaHQpICogX3RoaXMuZGlyZWN0aW9uLnkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgX3RoaXMua2VybmVsID0ga2VybmVs
OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShCbHVyUG9zdFByb2Nlc3MucHJvdG90eXBlLCAia2VybmVsIiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyB0aGUgbGVuZ3RoIGluIHBpeGVscyBvZiB0aGUgYmx1ciBzYW1wbGUgcmVn
aW9uCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9pZGVhbEtlcm5lbDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFNldHMgdGhlIGxlbmd0aCBpbiBwaXhlbHMgb2YgdGhlIGJsdXIgc2FtcGxlIHJlZ2lv
bgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodikgeworICAgICAgICAgICAg
aWYgKHRoaXMuX2lkZWFsS2VybmVsID09PSB2KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdiA9IE1hdGgubWF4KHYsIDEpOworICAgICAgICAg
ICAgdGhpcy5faWRlYWxLZXJuZWwgPSB2OworICAgICAgICAgICAgdGhpcy5fa2VybmVsID0gdGhp
cy5fbmVhcmVzdEJlc3RLZXJuZWwodik7CisgICAgICAgICAgICBpZiAoIXRoaXMuYmxvY2tDb21w
aWxhdGlvbikgeworICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBhcmFtZXRlcnMoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEJsdXJQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJwYWNrZWRGbG9hdCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgd2V0aGVyIG9yIG5vdCB0aGUgYmx1ciBpcyB1bnBhY2tpbmcvcmVw
YWNraW5nIGZsb2F0cworICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFja2VkRmxvYXQ7CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBTZXRzIHdldGhlciBvciBub3QgdGhlIGJsdXIgbmVlZHMgdG8gdW5w
YWNrL3JlcGFjayBmbG9hdHMKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHYp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9wYWNrZWRGbG9hdCA9PT0gdikgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3BhY2tlZEZs
b2F0ID0gdjsKKyAgICAgICAgICAgIGlmICghdGhpcy5ibG9ja0NvbXBpbGF0aW9uKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFyYW1ldGVycygpOworICAgICAgICAgICAgfQorICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBlZmZlY3Qgd2l0aCB0
aGUgY3VycmVudCBwb3N0IHByb2Nlc3MgY29tcGlsZSB0aW1lIHZhbHVlcyBhbmQgcmVjb21waWxl
cyB0aGUgc2hhZGVyLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIERlZmluZSBzdGF0ZW1lbnRzIHRo
YXQgc2hvdWxkIGJlIGFkZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNoYWRlci4gKGRlZmF1
bHQ6IG51bGwpCisgICAgICogQHBhcmFtIHVuaWZvcm1zIFNldCBvZiB1bmlmb3JtIHZhcmlhYmxl
cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzaGFkZXIuIChkZWZhdWx0OiBudWxsKQorICAg
ICAqIEBwYXJhbSBzYW1wbGVycyBTZXQgb2YgVGV4dHVyZTJEIHZhcmlhYmxlcyB0aGF0IHdpbGwg
YmUgcGFzc2VkIHRvIHRoZSBzaGFkZXIuIChkZWZhdWx0OiBudWxsKQorICAgICAqIEBwYXJhbSBp
bmRleFBhcmFtZXRlcnMgVGhlIGluZGV4IHBhcmFtZXRlcnMgdG8gYmUgdXNlZCBmb3IgYmFieWxv
bnMgaW5jbHVkZSBzeW50YXggIiNpbmNsdWRlPGtlcm5lbEJsdXJWYXJ5aW5nRGVjbGFyYXRpb24+
WzAuLnZhcnlpbmdDb3VudF0iLiAoZGVmYXVsdDogdW5kZWZpbmVkKSBTZWUgdXNhZ2UgaW4gYmFi
eWxvbi5ibHVyUG9zdFByb2Nlc3MudHMgYW5kIGtlcm5lbEJsdXIudmVydGV4LmZ4CisgICAgICog
QHBhcmFtIG9uQ29tcGlsZWQgQ2FsbGVkIHdoZW4gdGhlIHNoYWRlciBoYXMgYmVlbiBjb21waWxl
ZC4KKyAgICAgKiBAcGFyYW0gb25FcnJvciBDYWxsZWQgaWYgdGhlcmUgaXMgYW4gZXJyb3Igd2hl
biBjb21waWxpbmcgYSBzaGFkZXIuCisgICAgICovCisgICAgQmx1clBvc3RQcm9jZXNzLnByb3Rv
dHlwZS51cGRhdGVFZmZlY3QgPSBmdW5jdGlvbiAoZGVmaW5lcywgdW5pZm9ybXMsIHNhbXBsZXJz
LCBpbmRleFBhcmFtZXRlcnMsIG9uQ29tcGlsZWQsIG9uRXJyb3IpIHsKKyAgICAgICAgaWYgKGRl
ZmluZXMgPT09IHZvaWQgMCkgeyBkZWZpbmVzID0gbnVsbDsgfQorICAgICAgICBpZiAodW5pZm9y
bXMgPT09IHZvaWQgMCkgeyB1bmlmb3JtcyA9IG51bGw7IH0KKyAgICAgICAgaWYgKHNhbXBsZXJz
ID09PSB2b2lkIDApIHsgc2FtcGxlcnMgPSBudWxsOyB9CisgICAgICAgIHRoaXMuX3VwZGF0ZVBh
cmFtZXRlcnMob25Db21waWxlZCwgb25FcnJvcik7CisgICAgfTsKKyAgICBCbHVyUG9zdFByb2Nl
c3MucHJvdG90eXBlLl91cGRhdGVQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKG9uQ29tcGlsZWQsIG9u
RXJyb3IpIHsKKyAgICAgICAgLy8gR2VuZXJhdGUgc2FtcGxpbmcgb2Zmc2V0cyBhbmQgd2VpZ2h0
cworICAgICAgICB2YXIgTiA9IHRoaXMuX2tlcm5lbDsKKyAgICAgICAgdmFyIGNlbnRlckluZGV4
ID0gKE4gLSAxKSAvIDI7CisgICAgICAgIC8vIEdlbmVyYXRlIEdhdXNzaWFuIHNhbXBsaW5nIHdl
aWdodHMgb3ZlciBrZXJuZWwKKyAgICAgICAgdmFyIG9mZnNldHMgPSBbXTsKKyAgICAgICAgdmFy
IHdlaWdodHMgPSBbXTsKKyAgICAgICAgdmFyIHRvdGFsV2VpZ2h0ID0gMDsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgIHZhciB1ID0gaSAvIChOIC0g
MSk7CisgICAgICAgICAgICB2YXIgdyA9IHRoaXMuX2dhdXNzaWFuV2VpZ2h0KHUgKiAyLjAgLSAx
KTsKKyAgICAgICAgICAgIG9mZnNldHNbaV0gPSAoaSAtIGNlbnRlckluZGV4KTsKKyAgICAgICAg
ICAgIHdlaWdodHNbaV0gPSB3OworICAgICAgICAgICAgdG90YWxXZWlnaHQgKz0gdzsKKyAgICAg
ICAgfQorICAgICAgICAvLyBOb3JtYWxpemUgd2VpZ2h0cworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHdlaWdodHNbaV0gLz0g
dG90YWxXZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gT3B0aW1pemU6IGNvbWJpbmUgc2Ft
cGxlcyB0byB0YWtlIGFkdmFudGFnZSBvZiBoYXJkd2FyZSBsaW5lYXIgc2FtcGxpbmcKKyAgICAg
ICAgLy8gV2FsayBmcm9tIGxlZnQgdG8gY2VudGVyLCBjb21iaW5pbmcgcGFpcnMgKHN5bW1ldHJp
Y2FsbHkpCisgICAgICAgIHZhciBsaW5lYXJTYW1wbGluZ1dlaWdodHMgPSBbXTsKKyAgICAgICAg
dmFyIGxpbmVhclNhbXBsaW5nT2Zmc2V0cyA9IFtdOworICAgICAgICB2YXIgbGluZWFyU2FtcGxp
bmdNYXAgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gY2VudGVySW5kZXg7IGkg
Kz0gMikgeworICAgICAgICAgICAgdmFyIGogPSBNYXRoLm1pbihpICsgMSwgTWF0aC5mbG9vcihj
ZW50ZXJJbmRleCkpOworICAgICAgICAgICAgdmFyIHNpbmdsZUNlbnRlclNhbXBsZSA9IGkgPT09
IGo7CisgICAgICAgICAgICBpZiAoc2luZ2xlQ2VudGVyU2FtcGxlKSB7CisgICAgICAgICAgICAg
ICAgbGluZWFyU2FtcGxpbmdNYXAucHVzaCh7IG86IG9mZnNldHNbaV0sIHc6IHdlaWdodHNbaV0g
fSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2
YXIgc2hhcmVkQ2VsbCA9IGogPT09IGNlbnRlckluZGV4OworICAgICAgICAgICAgICAgIHZhciB3
ZWlnaHRMaW5lYXIgPSAod2VpZ2h0c1tpXSArIHdlaWdodHNbal0gKiAoc2hhcmVkQ2VsbCA/IC41
IDogMS4pKTsKKyAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0TGluZWFyID0gb2Zmc2V0c1tpXSAr
IDEgLyAoMSArIHdlaWdodHNbaV0gLyB3ZWlnaHRzW2pdKTsKKyAgICAgICAgICAgICAgICBpZiAo
b2Zmc2V0TGluZWFyID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmVhclNhbXBsaW5n
TWFwLnB1c2goeyBvOiBvZmZzZXRzW2ldLCB3OiB3ZWlnaHRzW2ldIH0pOworICAgICAgICAgICAg
ICAgICAgICBsaW5lYXJTYW1wbGluZ01hcC5wdXNoKHsgbzogb2Zmc2V0c1tpICsgMV0sIHc6IHdl
aWdodHNbaSArIDFdIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgbGluZWFyU2FtcGxpbmdNYXAucHVzaCh7IG86IG9mZnNl
dExpbmVhciwgdzogd2VpZ2h0TGluZWFyIH0pOworICAgICAgICAgICAgICAgICAgICBsaW5lYXJT
YW1wbGluZ01hcC5wdXNoKHsgbzogLW9mZnNldExpbmVhciwgdzogd2VpZ2h0TGluZWFyIH0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxpbmVhclNhbXBsaW5nTWFwLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICBsaW5lYXJTYW1wbGluZ09mZnNldHNbaV0gPSBsaW5lYXJTYW1wbGluZ01hcFtpXS5vOwor
ICAgICAgICAgICAgbGluZWFyU2FtcGxpbmdXZWlnaHRzW2ldID0gbGluZWFyU2FtcGxpbmdNYXBb
aV0udzsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXBsYWNlIHdpdGggb3B0aW1pemVkCisgICAg
ICAgIG9mZnNldHMgPSBsaW5lYXJTYW1wbGluZ09mZnNldHM7CisgICAgICAgIHdlaWdodHMgPSBs
aW5lYXJTYW1wbGluZ1dlaWdodHM7CisgICAgICAgIC8vIEdlbmVyYXRlIHNoYWRlcnMKKyAgICAg
ICAgdmFyIG1heFZhcnlpbmdSb3dzID0gdGhpcy5nZXRFbmdpbmUoKS5nZXRDYXBzKCkubWF4VmFy
eWluZ1ZlY3RvcnM7CisgICAgICAgIHZhciBmcmVlVmFyeWluZ1ZlYzIgPSBNYXRoLm1heChtYXhW
YXJ5aW5nUm93cywgMC4pIC0gMTsgLy8gQmVjYXVzZSBvZiBzYW1wbGVDZW50ZXIKKyAgICAgICAg
dmFyIHZhcnlpbmdDb3VudCA9IE1hdGgubWluKG9mZnNldHMubGVuZ3RoLCBmcmVlVmFyeWluZ1Zl
YzIpOworICAgICAgICB2YXIgZGVmaW5lcyA9ICIiOworICAgICAgICBkZWZpbmVzICs9IHRoaXMu
X3N0YXRpY0RlZmluZXM7CisgICAgICAgIC8vIFRoZSBET0YgZnJhZ21lbnQgc2hvdWxkIGlnbm9y
ZSB0aGUgY2VudGVyIHBpeGVsIHdoZW4gbG9vcGluZyBhcyBpdCBpcyBoYW5kbGVkIG1hbnVhbHkg
aW4gdGhlIGZyYWdtZW50IHNoYWRlci4KKyAgICAgICAgaWYgKHRoaXMuX3N0YXRpY0RlZmluZXMu
aW5kZXhPZigiRE9GIikgIT0gLTEpIHsKKyAgICAgICAgICAgIGRlZmluZXMgKz0gIiNkZWZpbmUg
Q0VOVEVSX1dFSUdIVCAiICsgdGhpcy5fZ2xzbEZsb2F0KHdlaWdodHNbdmFyeWluZ0NvdW50IC0g
MV0pICsgIlxyXG4iOworICAgICAgICAgICAgdmFyeWluZ0NvdW50LS07CisgICAgICAgIH0KKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YXJ5aW5nQ291bnQ7IGkrKykgeworICAgICAgICAg
ICAgZGVmaW5lcyArPSAiI2RlZmluZSBLRVJORUxfT0ZGU0VUIiArIGkgKyAiICIgKyB0aGlzLl9n
bHNsRmxvYXQob2Zmc2V0c1tpXSkgKyAiXHJcbiI7CisgICAgICAgICAgICBkZWZpbmVzICs9ICIj
ZGVmaW5lIEtFUk5FTF9XRUlHSFQiICsgaSArICIgIiArIHRoaXMuX2dsc2xGbG9hdCh3ZWlnaHRz
W2ldKSArICJcclxuIjsKKyAgICAgICAgfQorICAgICAgICB2YXIgZGVwQ291bnQgPSAwOworICAg
ICAgICBmb3IgKHZhciBpID0gZnJlZVZhcnlpbmdWZWMyOyBpIDwgb2Zmc2V0cy5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgZGVmaW5lcyArPSAiI2RlZmluZSBLRVJORUxfREVQX09GRlNFVCIg
KyBkZXBDb3VudCArICIgIiArIHRoaXMuX2dsc2xGbG9hdChvZmZzZXRzW2ldKSArICJcclxuIjsK
KyAgICAgICAgICAgIGRlZmluZXMgKz0gIiNkZWZpbmUgS0VSTkVMX0RFUF9XRUlHSFQiICsgZGVw
Q291bnQgKyAiICIgKyB0aGlzLl9nbHNsRmxvYXQod2VpZ2h0c1tpXSkgKyAiXHJcbiI7CisgICAg
ICAgICAgICBkZXBDb3VudCsrOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnBhY2tlZEZs
b2F0KSB7CisgICAgICAgICAgICBkZWZpbmVzICs9ICIjZGVmaW5lIFBBQ0tFREZMT0FUIDEiOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuYmxvY2tDb21waWxhdGlvbiA9IGZhbHNlOworICAgICAg
ICBfc3VwZXIucHJvdG90eXBlLnVwZGF0ZUVmZmVjdC5jYWxsKHRoaXMsIGRlZmluZXMsIG51bGws
IG51bGwsIHsKKyAgICAgICAgICAgIHZhcnlpbmdDb3VudDogdmFyeWluZ0NvdW50LAorICAgICAg
ICAgICAgZGVwQ291bnQ6IGRlcENvdW50CisgICAgICAgIH0sIG9uQ29tcGlsZWQsIG9uRXJyb3Ip
OworICAgIH07CisgICAgLyoqCisgICAgICogQmVzdCBrZXJuZWxzIGFyZSBvZGQgbnVtYmVycyB0
aGF0IHdoZW4gZGl2aWRlZCBieSAyLCB0aGVpciBpbnRlZ2VyIHBhcnQgaXMgZXZlbiwgc28gNSwg
OSBvciAxMy4KKyAgICAgKiBPdGhlciBvZGQga2VybmVscyBvcHRpbWl6ZSBjb3JyZWN0bHkgYnV0
IHJlcXVpcmUgcHJvcG9ydGlvbmFsbHkgbW9yZSBzYW1wbGVzLCBldmVuIGtlcm5lbHMgYXJlCisg
ICAgICogcG9zc2libGUgYnV0IHdpbGwgcHJvZHVjZSBtaW5vciB2aXN1YWwgYXJ0aWZhY3RzLiBT
aW5jZSBlYWNoIG5ldyBrZXJuZWwgcmVxdWlyZXMgYSBuZXcgc2hhZGVyIHdlCisgICAgICogd2Fu
dCB0byBtaW5pbWl6ZSBrZXJuZWwgY2hhbmdlcywgaGF2aW5nIGdhcHMgYmV0d2VlbiBwaHlzaWNh
bCBrZXJuZWxzIGlzIGhlbHBmdWwgaW4gdGhhdCByZWdhcmQuCisgICAgICogVGhlIGdhcHMgYmV0
d2VlbiBwaHlzaWNhbCBrZXJuZWxzIGFyZSBjb21wZW5zYXRlZCBmb3IgaW4gdGhlIHdlaWdodGlu
ZyBvZiB0aGUgc2FtcGxlcworICAgICAqIEBwYXJhbSBpZGVhbEtlcm5lbCBJZGVhbCBibHVyIGtl
cm5lbC4KKyAgICAgKiBAcmV0dXJuIE5lYXJlc3QgYmVzdCBrZXJuZWwuCisgICAgICovCisgICAg
Qmx1clBvc3RQcm9jZXNzLnByb3RvdHlwZS5fbmVhcmVzdEJlc3RLZXJuZWwgPSBmdW5jdGlvbiAo
aWRlYWxLZXJuZWwpIHsKKyAgICAgICAgdmFyIHYgPSBNYXRoLnJvdW5kKGlkZWFsS2VybmVsKTsK
KyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IFt2LCB2IC0gMSwgdiArIDEsIHYgLSAyLCB2
ICsgMl07IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgayA9IF9hW19p
XTsKKyAgICAgICAgICAgIGlmICgoKGsgJSAyKSAhPT0gMCkgJiYgKChNYXRoLmZsb29yKGsgLyAy
KSAlIDIpID09PSAwKSAmJiBrID4gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1h
eChrLCAzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTWF0aC5t
YXgodiwgMyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDYWxjdWxhdGVzIHRoZSB2YWx1ZSBv
ZiBhIEdhdXNzaWFuIGRpc3RyaWJ1dGlvbiB3aXRoIHNpZ21hIDMgYXQgYSBnaXZlbiBwb2ludC4K
KyAgICAgKiBAcGFyYW0geCBUaGUgcG9pbnQgb24gdGhlIEdhdXNzaWFuIGRpc3RyaWJ1dGlvbiB0
byBzYW1wbGUuCisgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIEdhdXNzaWFuIGZ1bmN0
aW9uIGF0IHguCisgICAgICovCisgICAgQmx1clBvc3RQcm9jZXNzLnByb3RvdHlwZS5fZ2F1c3Np
YW5XZWlnaHQgPSBmdW5jdGlvbiAoeCkgeworICAgICAgICAvL3JlZmVyZW5jZTogRW5naW5lcy9J
bWFnZVByb2Nlc3NpbmdCbHVyLmNwcCAjZGNjNzYwCisgICAgICAgIC8vIFdlIGFyZSBldmFsdWF0
aW5nIHRoZSBHYXVzc2lhbiAobm9ybWFsKSBkaXN0cmlidXRpb24gb3ZlciBhIGtlcm5lbCBwYXJh
bWV0ZXIgc3BhY2Ugb2YgWy0xLDFdLAorICAgICAgICAvLyBzbyB3ZSB0cnVuY2F0ZSBhdCB0aHJl
ZSBzdGFuZGFyZCBkZXZpYXRpb25zIGJ5IHNldHRpbmcgc3RkZGV2IChzaWdtYSkgdG8gMS8zLgor
ICAgICAgICAvLyBUaGUgY2hvaWNlIG9mIDMtc2lnbWEgdHJ1bmNhdGlvbiBpcyBjb21tb24gYnV0
IGFyYml0cmFyeSwgYW5kIG1lYW5zIHRoYXQgdGhlIHNpZ25hbCBpcworICAgICAgICAvLyB0cnVu
Y2F0ZWQgYXQgYXJvdW5kIDEuMyUgb2YgcGVhayBzdHJlbmd0aC4KKyAgICAgICAgLy90aGUgZGlz
dHJpYnV0aW9uIGlzIHNjYWxlZCB0byBhY2NvdW50IGZvciB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVu
IHRoZSBhY3R1YWwga2VybmVsIHNpemUgYW5kIHRoZSByZXF1ZXN0ZWQga2VybmVsIHNpemUKKyAg
ICAgICAgdmFyIHNpZ21hID0gKDEgLyAzKTsKKyAgICAgICAgdmFyIGRlbm9taW5hdG9yID0gTWF0
aC5zcXJ0KDIuMCAqIE1hdGguUEkpICogc2lnbWE7CisgICAgICAgIHZhciBleHBvbmVudCA9IC0o
KHggKiB4KSAvICgyLjAgKiBzaWdtYSAqIHNpZ21hKSk7CisgICAgICAgIHZhciB3ZWlnaHQgPSAo
MS4wIC8gZGVub21pbmF0b3IpICogTWF0aC5leHAoZXhwb25lbnQpOworICAgICAgICByZXR1cm4g
d2VpZ2h0OworICAgIH07CisgICAgLyoqCisgICAgICAqIEdlbmVyYXRlcyBhIHN0cmluZyB0aGF0
IGNhbiBiZSB1c2VkIGFzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGluIEdMU0wuCisgICAgICAq
IEBwYXJhbSB4IFZhbHVlIHRvIHByaW50LgorICAgICAgKiBAcGFyYW0gZGVjaW1hbEZpZ3VyZXMg
TnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHByaW50IHRoZSBudW1iZXIgdG8gKGV4Y2x1ZGlu
ZyB0cmFpbGluZyAwcykuCisgICAgICAqIEByZXR1cm4gR0xTTCBmbG9hdCBzdHJpbmcuCisgICAg
ICAqLworICAgIEJsdXJQb3N0UHJvY2Vzcy5wcm90b3R5cGUuX2dsc2xGbG9hdCA9IGZ1bmN0aW9u
ICh4LCBkZWNpbWFsRmlndXJlcykgeworICAgICAgICBpZiAoZGVjaW1hbEZpZ3VyZXMgPT09IHZv
aWQgMCkgeyBkZWNpbWFsRmlndXJlcyA9IDg7IH0KKyAgICAgICAgcmV0dXJuIHgudG9GaXhlZChk
ZWNpbWFsRmlndXJlcykucmVwbGFjZSgvMCskLywgJycpOworICAgIH07CisgICAgcmV0dXJuIEJs
dXJQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL2Nocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL1Bvc3RQcm9jZXNzZXMvY2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzLnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nl
c3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2hyb21hdGljQWJlcnJh
dGlvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDaHJvbWF0aWNBYmVycmF0aW9u
UG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAi
Li4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMv
bWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
cG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2Vzcy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMg
Ki8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
U2hhZGVyc19jaHJvbWF0aWNBYmVycmF0aW9uX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2Nocm9tYXRpY0Fi
ZXJyYXRpb24uZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9jaHJvbWF0aWNBYmVycmF0aW9uLmZyYWdt
ZW50LnRzIik7CisKKworCisKKworLyoqCisgKiBUaGUgQ2hyb21hdGljQWJlcnJhdGlvblBvc3RQ
cm9jZXNzIHNlcGFyYXRlcyB0aGUgcmdiIGNoYW5uZWxzIGluIGFuIGltYWdlIHRvIHByb2R1Y2Ug
Y2hyb21hdGljIGRpc3RvcnRpb24gYXJvdW5kIHRoZSBlZGdlcyBvZiB0aGUgc2NyZWVuCisgKi8K
K3ZhciBDaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
X19leHRlbmRzIl0oQ2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzLCBfc3VwZXIpOworICAg
IC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgQ2hyb21hdGljQWJlcnJhdGlvblBv
c3RQcm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAg
ICAgKiBAcGFyYW0gc2NyZWVuV2lkdGggVGhlIHdpZHRoIG9mIHRoZSBzY3JlZW4gdG8gYXBwbHkg
dGhlIGVmZmVjdCBvbi4KKyAgICAgKiBAcGFyYW0gc2NyZWVuSGVpZ2h0IFRoZSBoZWlnaHQgb2Yg
dGhlIHNjcmVlbiB0byBhcHBseSB0aGUgZWZmZWN0IG9uLgorICAgICAqIEBwYXJhbSBvcHRpb25z
IFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQgcmF0aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNv
bXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisgICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJh
IHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2Rl
IFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChk
ZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9z
dCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAg
ICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24g
dGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKiBAcGFyYW0gdGV4dHVyZVR5
cGUgVHlwZSBvZiB0ZXh0dXJlcyB1c2VkIHdoZW4gcGVyZm9ybWluZyB0aGUgcG9zdCBwcm9jZXNz
LiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gYmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxh
dGlvbiBvZiB0aGUgc2hhZGVyIHNob3VsZCBub3QgYmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3Iu
IFRoZSB1cGRhdGVFZmZlY3QgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRl
ciBhdCBhIGxhdGVyIHRpbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBDaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MobmFtZSwgc2NyZWVuV2lkdGgsIHNjcmVl
bkhlaWdodCwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUs
IHRleHR1cmVUeXBlLCBibG9ja0NvbXBpbGF0aW9uKSB7CisgICAgICAgIGlmICh0ZXh0dXJlVHlw
ZSA9PT0gdm9pZCAwKSB7IHRleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lO
VDsgfQorICAgICAgICBpZiAoYmxvY2tDb21waWxhdGlvbiA9PT0gdm9pZCAwKSB7IGJsb2NrQ29t
cGlsYXRpb24gPSBmYWxzZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlz
LCBuYW1lLCAiY2hyb21hdGljQWJlcnJhdGlvbiIsIFsiY2hyb21hdGljX2FiZXJyYXRpb24iLCAi
c2NyZWVuX3dpZHRoIiwgInNjcmVlbl9oZWlnaHQiLCAiZGlyZWN0aW9uIiwgInJhZGlhbEludGVu
c2l0eSIsICJjZW50ZXJQb3NpdGlvbiJdLCBbXSwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01v
ZGUsIGVuZ2luZSwgcmV1c2FibGUsIG51bGwsIHRleHR1cmVUeXBlLCB1bmRlZmluZWQsIG51bGws
IGJsb2NrQ29tcGlsYXRpb24pIHx8IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUg
YW1vdW50IG9mIHNlcGVyYXRpb24gb2YgcmdiIGNoYW5uZWxzIChkZWZhdWx0OiAzMCkKKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLmFiZXJyYXRpb25BbW91bnQgPSAzMDsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFRoZSBhbW91bnQgdGhlIGVmZmVjdCB3aWxsIGluY3JlYXNlIGZvciBwaXhl
bHMgY2xvc2VyIHRvIHRoZSBlZGdlIG9mIHRoZSBzY3JlZW4uIChkZWZhdWx0OiAwKQorICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMucmFkaWFsSW50ZW5zaXR5ID0gMDsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFRoZSBub3JtaWxpemVkIGRpcmVjdGlvbiBpbiB3aGljaCB0aGUgcmdiIGNoYW5u
ZWxzIHNob3VsZCBiZSBzZXBlcmF0ZWQuIElmIHNldCB0byAwLDAgcmFkaWFsIGRpcmVjdGlvbiB3
aWxsIGJlIHVzZWQuIChkZWZhdWx0OiBWZWN0b3IyKDAuNzA3LDAuNzA3KSkKKyAgICAgICAgICov
CisgICAgICAgIF90aGlzLmRpcmVjdGlvbiA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKDAuNzA3LCAwLjcwNyk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBUaGUgY2VudGVyIHBvc2l0aW9uIHdoZXJlIHRoZSByYWRpYWxJbnRl
bnNpdHkgc2hvdWxkIGJlIGFyb3VuZC4gWzAuNSwwLjUgaXMgY2VudGVyIG9mIHNjcmVlbiwgMSwx
IGlzIHRvcCByaWdodCBjb3JkZXJdIChkZWZhdWx0OiBWZWN0b3IyKDAuNSAsMC41KSkKKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLmNlbnRlclBvc2l0aW9uID0gbmV3IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0oMC41LCAwLjUpOwor
ICAgICAgICBfdGhpcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgewor
ICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdjaHJvbWF0aWNfYWJlcnJhdGlvbicsIF90aGlz
LmFiZXJyYXRpb25BbW91bnQpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdzY3JlZW5f
d2lkdGgnLCBzY3JlZW5XaWR0aCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoJ3NjcmVl
bl9oZWlnaHQnLCBzY3JlZW5IZWlnaHQpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdy
YWRpYWxJbnRlbnNpdHknLCBfdGhpcy5yYWRpYWxJbnRlbnNpdHkpOworICAgICAgICAgICAgZWZm
ZWN0LnNldEZsb2F0MignZGlyZWN0aW9uJywgX3RoaXMuZGlyZWN0aW9uLngsIF90aGlzLmRpcmVj
dGlvbi55KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDIoJ2NlbnRlclBvc2l0aW9uJywg
X3RoaXMuY2VudGVyUG9zaXRpb24ueCwgX3RoaXMuY2VudGVyUG9zaXRpb24ueSk7CisgICAgICAg
IH0pOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIHJldHVybiBDaHJvbWF0aWNB
YmVycmF0aW9uUG9zdFByb2Nlc3M7Cit9KF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJQb3N0UHJvY2VzcyJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
UG9zdFByb2Nlc3Nlcy9jaXJjbGVPZkNvbmZ1c2lvblBvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1Bvc3RQcm9jZXNzZXMvY2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJvY2Vzcy50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nlc3Mg
Ki8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2lyY2xlT2ZDb25mdXNpb25Q
b3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJv
Y2VzczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2Rl
X21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3Mu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2Vy
ICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2NpcmNsZU9mQ29uZnVzaW9u
X2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9TaGFkZXJzL2NpcmNsZU9mQ29uZnVzaW9uLmZyYWdtZW50ICovICIuL1NoYWRl
cnMvY2lyY2xlT2ZDb25mdXNpb24uZnJhZ21lbnQudHMiKTsKKworCisKKworCisvKioKKyAqIFRo
ZSBDaXJjbGVPZkNvbmZ1c2lvblBvc3RQcm9jZXNzIGNvbXB1dGVzIHRoZSBjaXJjbGUgb2YgY29u
ZnVzaW9uIHZhbHVlIGZvciBlYWNoIHBpeGVsIGdpdmVuIHJlcXVpcmVkIGxlbnMgcGFyYW1ldGVy
cy4gU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NpcmNsZV9vZl9jb25mdXNpb24K
KyAqLwordmFyIENpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siX19leHRlbmRzIl0oQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIENpcmNsZU9mQ29uZnVzaW9uUG9z
dFByb2Nlc3MKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZWZmZWN0LgorICAg
ICAqIEBwYXJhbSBkZXB0aFRleHR1cmUgVGhlIGRlcHRoIHRleHR1cmUgb2YgdGhlIHNjZW5lIHRv
IGNvbXB1dGUgdGhlIGNpcmNsZSBvZiBjb25mdXNpb24uIFRoaXMgbXVzdCBiZSBzZXQgaW4gb3Jk
ZXIgZm9yIHRoaXMgdG8gZnVuY3Rpb24gYnV0IG1heSBiZSBzZXQgYWZ0ZXIgaW5pdGlhbGl6YXRp
b24gaWYgbmVlZGVkLgorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSByZXF1aXJlZCB3aWR0aC9o
ZWlnaHQgcmF0aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBh
c3MuCisgICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIg
cGFzcyB0by4KKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIFRoZSBzYW1wbGluZyBtb2RlIHRv
IGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChkZWZhdWx0OiAwKQorICAgICAqIEBw
YXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9zdCBwcm9jZXNzIHdpbGwgYmUgYXBw
bGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAgICAqIEBwYXJhbSByZXVzYWJsZSBJ
ZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24gdGhlIHNhbWUgZnJhbWUuIChkZWZh
dWx0OiBmYWxzZSkKKyAgICAgKiBAcGFyYW0gdGV4dHVyZVR5cGUgVHlwZSBvZiB0ZXh0dXJlcyB1
c2VkIHdoZW4gcGVyZm9ybWluZyB0aGUgcG9zdCBwcm9jZXNzLiAoZGVmYXVsdDogMCkKKyAgICAg
KiBAcGFyYW0gYmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxhdGlvbiBvZiB0aGUgc2hhZGVyIHNo
b3VsZCBub3QgYmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSB1cGRhdGVFZmZlY3QgbWV0
aG9kIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRlciBhdCBhIGxhdGVyIHRpbWUuIChk
ZWZhdWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDaXJjbGVPZkNvbmZ1c2lvblBv
c3RQcm9jZXNzKG5hbWUsIGRlcHRoVGV4dHVyZSwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01v
ZGUsIGVuZ2luZSwgcmV1c2FibGUsIHRleHR1cmVUeXBlLCBibG9ja0NvbXBpbGF0aW9uKSB7Cisg
ICAgICAgIGlmICh0ZXh0dXJlVHlwZSA9PT0gdm9pZCAwKSB7IHRleHR1cmVUeXBlID0gX0VuZ2lu
ZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRF
WFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICBpZiAoYmxvY2tDb21waWxhdGlvbiA9
PT0gdm9pZCAwKSB7IGJsb2NrQ29tcGlsYXRpb24gPSBmYWxzZTsgfQorICAgICAgICB2YXIgX3Ro
aXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCAiY2lyY2xlT2ZDb25mdXNpb24iLCBbImNhbWVy
YU1pbk1heFoiLCAiZm9jdXNEaXN0YW5jZSIsICJjb2NQcmVjYWxjdWxhdGlvbiJdLCBbImRlcHRo
U2FtcGxlciJdLCBvcHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJs
ZSwgbnVsbCwgdGV4dHVyZVR5cGUsIHVuZGVmaW5lZCwgbnVsbCwgYmxvY2tDb21waWxhdGlvbikg
fHwgdGhpczsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1heCBsZW5zIHNpemUgaW4gc2NlbmUg
dW5pdHMvMTAwMCAoZWcuIG1pbGxpbWV0ZXIpLiBTdGFuZGFyZCBjYW1lcmFzIGFyZSA1MG1tLiAo
ZGVmYXVsdDogNTApIFRoZSBkaWFtYXRlciBvZiB0aGUgcmVzdWx0aW5nIGFwZXJ0dXJlIGNhbiBi
ZSBjb21wdXRlZCBieSBsZW5zU2l6ZS9mU3RvcC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LmxlbnNTaXplID0gNTA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGLVN0b3Agb2YgdGhlIGVm
ZmVjdCdzIGNhbWVyYS4gVGhlIGRpYW1hdGVyIG9mIHRoZSByZXN1bHRpbmcgYXBlcnR1cmUgY2Fu
IGJlIGNvbXB1dGVkIGJ5IGxlbnNTaXplL2ZTdG9wLiAoZGVmYXVsdDogMS40KQorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuZlN0b3AgPSAxLjQ7CisgICAgICAgIC8qKgorICAgICAgICAgKiBE
aXN0YW5jZSBhd2F5IGZyb20gdGhlIGNhbWVyYSB0byBmb2N1cyBvbiBpbiBzY2VuZSB1bml0cy8x
MDAwIChlZy4gbWlsbGltZXRlcikuIChkZWZhdWx0OiAyMDAwKQorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuZm9jdXNEaXN0YW5jZSA9IDIwMDA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBG
b2NhbCBsZW5ndGggb2YgdGhlIGVmZmVjdCdzIGNhbWVyYSBpbiBzY2VuZSB1bml0cy8xMDAwIChl
Zy4gbWlsbGltZXRlcikuIChkZWZhdWx0OiA1MCkKKyAgICAgICAgICovCisgICAgICAgIF90aGlz
LmZvY2FsTGVuZ3RoID0gNTA7CisgICAgICAgIF90aGlzLl9kZXB0aFRleHR1cmUgPSBudWxsOwor
ICAgICAgICBfdGhpcy5fZGVwdGhUZXh0dXJlID0gZGVwdGhUZXh0dXJlOworICAgICAgICBfdGhp
cy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAg
aWYgKCFfdGhpcy5fZGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkxvZ2dlciJdLldhcm4oIk5vIGRlcHRoIHRl
eHR1cmUgc2V0IG9uIENpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nlc3MiKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVy
ZSgiZGVwdGhTYW1wbGVyIiwgX3RoaXMuX2RlcHRoVGV4dHVyZSk7CisgICAgICAgICAgICAvLyBD
aXJjbGUgb2YgY29uZnVzaW9uIGNhbGN1bGF0aW9uLCBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubnZp
ZGlhLmNvbS9ncHVnZW1zL0dQVUdlbXMvZ3B1Z2Vtc19jaDIzLmh0bWwKKyAgICAgICAgICAgIHZh
ciBhcGVydHVyZSA9IF90aGlzLmxlbnNTaXplIC8gX3RoaXMuZlN0b3A7CisgICAgICAgICAgICB2
YXIgY29jUHJlY2FsY3VsYXRpb24gPSAoKGFwZXJ0dXJlICogX3RoaXMuZm9jYWxMZW5ndGgpIC8g
KChfdGhpcy5mb2N1c0Rpc3RhbmNlIC0gX3RoaXMuZm9jYWxMZW5ndGgpKSk7IC8vICogKCh0aGlz
LmZvY3VzRGlzdGFuY2UgLSBwaXhlbERpc3RhbmNlKS9waXhlbERpc3RhbmNlKSBbVGhpcyBwYXJ0
IGlzIGRvbmUgaW4gc2hhZGVyXQorICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCdmb2N1c0Rp
c3RhbmNlJywgX3RoaXMuZm9jdXNEaXN0YW5jZSk7CisgICAgICAgICAgICBlZmZlY3Quc2V0Rmxv
YXQoJ2NvY1ByZWNhbGN1bGF0aW9uJywgY29jUHJlY2FsY3VsYXRpb24pOworICAgICAgICAgICAg
ZWZmZWN0LnNldEZsb2F0MignY2FtZXJhTWluTWF4WicsIF90aGlzLl9kZXB0aFRleHR1cmUuYWN0
aXZlQ2FtZXJhLm1pblosIF90aGlzLl9kZXB0aFRleHR1cmUuYWN0aXZlQ2FtZXJhLm1heFopOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJkZXB0
aFRleHR1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZXB0aCB0ZXh0dXJlIHRvIGJl
IHVzZWQgdG8gY29tcHV0ZSB0aGUgY2lyY2xlIG9mIGNvbmZ1c2lvbi4gVGhpcyBtdXN0IGJlIHNl
dCBoZXJlIG9yIGluIHRoZSBjb25zdHJ1Y3RvciBpbiBvcmRlciBmb3IgdGhlIHBvc3QgcHJvY2Vz
cyB0byBmdW5jdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9kZXB0aFRleHR1cmUgPSB2YWx1ZTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgcmV0dXJuIENpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nlc3M7Cit9KF9wb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb3N0UHJvY2VzcyJdKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9jb2xvckNvcnJlY3Rpb25Q
b3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9jb2xvckNvcnJlY3Rp
b25Qb3N0UHJvY2Vzcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBDb2xvckNvcnJl
Y3Rpb25Qb3N0UHJvY2VzcyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJD
b2xvckNvcnJlY3Rpb25Qb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29sb3JDb3Jy
ZWN0aW9uUG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xp
YiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2Vz
L3Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19U
ZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlh
bHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzX2NvbG9yQ29ycmVjdGlvbl9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9jb2xvckNvcnJlY3Rpb24uZnJh
Z21lbnQgKi8gIi4vU2hhZGVycy9jb2xvckNvcnJlY3Rpb24uZnJhZ21lbnQudHMiKTsKKworCisK
KworLyoqCisgKgorICogVGhpcyBwb3N0LXByb2Nlc3MgYWxsb3dzIHRoZSBtb2RpZmljYXRpb24g
b2YgcmVuZGVyZWQgY29sb3JzIGJ5IHVzaW5nCisgKiBhICdsb29rLXVwIHRhYmxlJyAoTFVUKS4g
VGhpcyBlZmZlY3QgaXMgYWxzbyBjYWxsZWQgQ29sb3IgR3JhZGluZy4KKyAqCisgKiBUaGUgb2Jq
ZWN0IG5lZWRzIHRvIGJlIHByb3ZpZGVkIGFuIHVybCB0byBhIHRleHR1cmUgY29udGFpbmluZyB0
aGUgY29sb3IKKyAqIGxvb2stdXAgdGFibGU6IHRoZSB0ZXh0dXJlIG11c3QgYmUgMjU2IHBpeGVs
cyB3aWRlIGFuZCAxNiBwaXhlbHMgaGlnaC4KKyAqIFVzZSBhbiBpbWFnZSBlZGl0aW5nIHNvZnR3
YXJlIHRvIHR3ZWFrIHRoZSBMVVQgdG8gbWF0Y2ggeW91ciBuZWVkcy4KKyAqCisgKiBGb3IgYW4g
ZXhhbXBsZSBvZiBhIGNvbG9yIExVVCwgc2VlIGhlcmU6CisgKiBAc2VlIGh0dHA6Ly91ZG4uZXBp
Y2dhbWVzLmNvbS9UaHJlZS9yc3JjL1RocmVlL0NvbG9yR3JhZGluZy9SR0JUYWJsZTE2eDEucG5n
CisgKiBGb3IgZXhwbGFuYXRpb25zIG9uIGNvbG9yIGdyYWRpbmcsIHNlZSBoZXJlOgorICogQHNl
ZSBodHRwOi8vdWRuLmVwaWNnYW1lcy5jb20vVGhyZWUvQ29sb3JHcmFkaW5nLmh0bWwKKyAqCisg
Ki8KK3ZhciBDb2xvckNvcnJlY3Rpb25Qb3N0UHJvY2VzcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShDb2xvckNvcnJlY3Rpb25Qb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICBmdW5j
dGlvbiBDb2xvckNvcnJlY3Rpb25Qb3N0UHJvY2VzcyhuYW1lLCBjb2xvclRhYmxlVXJsLCBvcHRp
b25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSkgeworICAgICAgICB2
YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCAnY29sb3JDb3JyZWN0aW9uJywgbnVs
bCwgWydjb2xvclRhYmxlJ10sIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUs
IHJldXNhYmxlKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fY29sb3JUYWJsZVRleHR1cmUgPSBu
ZXcgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlRleHR1cmUiXShjb2xvclRhYmxlVXJsLCBjYW1lcmEuZ2V0U2NlbmUoKSwgdHJ1ZSwgZmFs
c2UsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJUZXh0dXJlIl0uVFJJTElORUFSX1NBTVBMSU5HTU9ERSk7CisgICAgICAgIF90aGlzLl9j
b2xvclRhYmxlVGV4dHVyZS5hbmlzb3Ryb3BpY0ZpbHRlcmluZ0xldmVsID0gMTsKKyAgICAgICAg
X3RoaXMuX2NvbG9yVGFibGVUZXh0dXJlLndyYXBVID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0
dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNT
TU9ERTsKKyAgICAgICAgX3RoaXMuX2NvbG9yVGFibGVUZXh0dXJlLndyYXBWID0gX01hdGVyaWFs
c19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUi
XS5DTEFNUF9BRERSRVNTTU9ERTsKKyAgICAgICAgX3RoaXMub25BcHBseSA9IGZ1bmN0aW9uIChl
ZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJjb2xvclRhYmxlIiwgX3Ro
aXMuX2NvbG9yVGFibGVUZXh0dXJlKTsKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIF90aGlz
OworICAgIH0KKyAgICByZXR1cm4gQ29sb3JDb3JyZWN0aW9uUG9zdFByb2Nlc3M7Cit9KF9wb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJQb3N0UHJvY2VzcyJdKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9jb252b2x1dGlvblBvc3RQ
cm9jZXNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvY29udm9sdXRpb25Qb3N0UHJvY2Vz
cy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IENvbnZvbHV0aW9uUG9zdFByb2Nlc3MgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29udm9sdXRpb25Qb3N0UHJvY2Vz
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29udm9sdXRpb25Qb3N0UHJvY2VzczsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIv
dHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bv
c3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICov
ICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1No
YWRlcnNfY29udm9sdXRpb25fZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvY29udm9sdXRpb24uZnJhZ21lbnQg
Ki8gIi4vU2hhZGVycy9jb252b2x1dGlvbi5mcmFnbWVudC50cyIpOworCisKKworCisvKioKKyAq
IFRoZSBDb252b2x1dGlvblBvc3RQcm9jZXNzIGFwcGxpZXMgYSAzeDMga2VybmVsIHRvIGV2ZXJ5
IHBpeGVsIG9mIHRoZQorICogaW5wdXQgdGV4dHVyZSB0byBwZXJmb3JtIGVmZmVjdHMgc3VjaCBh
cyBlZGdlIGRldGVjdGlvbiBvciBzaGFycGVuaW5nCisgKiBTZWUgaHR0cDovL2VuLndpa2lwZWRp
YS5vcmcvd2lraS9LZXJuZWxfKGltYWdlX3Byb2Nlc3NpbmcpCisgKi8KK3ZhciBDb252b2x1dGlv
blBvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKENvbnZvbHV0aW9u
UG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0
YW5jZSBDb252b2x1dGlvblBvc3RQcm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUg
b2YgdGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0ga2VybmVsIEFycmF5IG9mIDkgdmFsdWVzIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIDN4MyBrZXJuZWwgdG8gYmUgYXBwbGllZAorICAgICAqIEBwYXJh
bSBvcHRpb25zIFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQgcmF0aW8gdG8gZG93bnNpemUgdG8g
YmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisgICAgICogQHBhcmFtIGNhbWVyYSBU
aGUgY2FtZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAgICAgKiBAcGFyYW0gc2Ft
cGxpbmdNb2RlIFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhl
IHBhc3MuIChkZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3aGlj
aCB0aGUgcG9zdCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQgZW5n
aW5lKQorICAgICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBiZSBy
ZXVzZWQgb24gdGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKiBAcGFyYW0g
dGV4dHVyZVR5cGUgVHlwZSBvZiB0ZXh0dXJlcyB1c2VkIHdoZW4gcGVyZm9ybWluZyB0aGUgcG9z
dCBwcm9jZXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBDb252b2x1dGlv
blBvc3RQcm9jZXNzKG5hbWUsIAorICAgIC8qKiBBcnJheSBvZiA5IHZhbHVlcyBjb3JyZXNwb25k
aW5nIHRvIHRoZSAzeDMga2VybmVsIHRvIGJlIGFwcGxpZWQgKi8KKyAgICBrZXJuZWwsIG9wdGlv
bnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlLCB0ZXh0dXJlVHlwZSkg
eworICAgICAgICBpZiAodGV4dHVyZVR5cGUgPT09IHZvaWQgMCkgeyB0ZXh0dXJlVHlwZSA9IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMi
XS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQ7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgImNvbnZvbHV0aW9uIiwgWyJrZXJuZWwiLCAic2NyZWVuU2l6ZSJd
LCBudWxsLCBvcHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwg
bnVsbCwgdGV4dHVyZVR5cGUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLmtlcm5lbCA9IGtlcm5l
bDsKKyAgICAgICAgX3RoaXMub25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAg
ICAgIGVmZmVjdC5zZXRGbG9hdDIoInNjcmVlblNpemUiLCBfdGhpcy53aWR0aCwgX3RoaXMuaGVp
Z2h0KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRBcnJheSgia2VybmVsIiwgX3RoaXMua2VybmVs
KTsKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICAvLyBTdGF0
aWNzCisgICAgLyoqCisgICAgICogRWRnZSBkZXRlY3Rpb24gMCBzZWUgaHR0cHM6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvS2VybmVsXyhpbWFnZV9wcm9jZXNzaW5nKQorICAgICAqLworICAgIENv
bnZvbHV0aW9uUG9zdFByb2Nlc3MuRWRnZURldGVjdDBLZXJuZWwgPSBbMSwgMCwgLTEsIDAsIDAs
IDAsIC0xLCAwLCAxXTsKKyAgICAvKioKKyAgICAgKiBFZGdlIGRldGVjdGlvbiAxIHNlZSBodHRw
czovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9LZXJuZWxfKGltYWdlX3Byb2Nlc3NpbmcpCisgICAg
ICovCisgICAgQ29udm9sdXRpb25Qb3N0UHJvY2Vzcy5FZGdlRGV0ZWN0MUtlcm5lbCA9IFswLCAx
LCAwLCAxLCAtNCwgMSwgMCwgMSwgMF07CisgICAgLyoqCisgICAgICogRWRnZSBkZXRlY3Rpb24g
MiBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvS2VybmVsXyhpbWFnZV9wcm9jZXNz
aW5nKQorICAgICAqLworICAgIENvbnZvbHV0aW9uUG9zdFByb2Nlc3MuRWRnZURldGVjdDJLZXJu
ZWwgPSBbLTEsIC0xLCAtMSwgLTEsIDgsIC0xLCAtMSwgLTEsIC0xXTsKKyAgICAvKioKKyAgICAg
KiBLZXJuZWwgdG8gc2hhcnBlbiBhbiBpbWFnZSBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3Jn
L3dpa2kvS2VybmVsXyhpbWFnZV9wcm9jZXNzaW5nKQorICAgICAqLworICAgIENvbnZvbHV0aW9u
UG9zdFByb2Nlc3MuU2hhcnBlbktlcm5lbCA9IFswLCAtMSwgMCwgLTEsIDUsIC0xLCAwLCAtMSwg
MF07CisgICAgLyoqCisgICAgICogS2VybmVsIHRvIGVtYm9zcyBhbiBpbWFnZSBzZWUgaHR0cHM6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvS2VybmVsXyhpbWFnZV9wcm9jZXNzaW5nKQorICAgICAq
LworICAgIENvbnZvbHV0aW9uUG9zdFByb2Nlc3MuRW1ib3NzS2VybmVsID0gWy0yLCAtMSwgMCwg
LTEsIDEsIDEsIDAsIDEsIDJdOworICAgIC8qKgorICAgICAqIEtlcm5lbCB0byBibHVyIGFuIGlt
YWdlIHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9LZXJuZWxfKGltYWdlX3Byb2Nl
c3NpbmcpCisgICAgICovCisgICAgQ29udm9sdXRpb25Qb3N0UHJvY2Vzcy5HYXVzc2lhbktlcm5l
bCA9IFswLCAxLCAwLCAxLCAxLCAxLCAwLCAxLCAwXTsKKyAgICByZXR1cm4gQ29udm9sdXRpb25Q
b3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vz
c2VzL2RlcHRoT2ZGaWVsZEJsdXJQb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQ
cm9jZXNzZXMvZGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBEZXB0aE9mRmllbGRCbHVyUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBEZXB0aE9mRmllbGRCbHVyUG9zdFByb2Nlc3M7IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3Rz
bGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVy
ZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1Rl
eHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmx1clBvc3RQ
cm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL2JsdXJQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL2JsdXJQb3N0UHJvY2Vz
cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5n
aW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKworCisKKworLyoq
CisgKiBUaGUgRGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzIGFwcGxpZWQgYSBibHVyIGluIGEg
Z2l2ZSBkaXJlY3Rpb24uCisgKiBUaGlzIGJsdXIgZGlmZmVycyBmcm9tIHRoZSBzdGFuZGFyZCBC
bHVyUG9zdFByb2Nlc3MgYXMgaXQgYXR0ZW1wdHMgdG8gYXZvaWQgYmx1cnJpbmcgcGl4ZWxzCisg
KiBiYXNlZCBvbiBzYW1wbGVzIHRoYXQgaGF2ZSBhIGxhcmdlIGRpZmZlcmVuY2UgaW4gZGlzdGFu
Y2UgdGhhbiB0aGUgY2VudGVyIHBpeGVsLgorICogU2VlIHNlY3Rpb24gMi42LjIgaHR0cDovL2Zp
bGVhZG1pbi5jcy5sdGguc2UvY3MvZWR1Y2F0aW9uL2VkYW4zNS9sZWN0dXJlcy8xMmRvZi5wZGYK
KyAqLwordmFyIERlcHRoT2ZGaWVsZEJsdXJQb3N0UHJvY2VzcyA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJfX2V4dGVuZHMiXShEZXB0aE9mRmllbGRCbHVyUG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBDaXJjbGVPZkNvbmZ1c2lvblBvc3RQ
cm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAgICAg
KiBAcGFyYW0gc2NlbmUgVGhlIHNjZW5lIHRoZSBlZmZlY3QgYmVsb25ncyB0by4KKyAgICAgKiBA
cGFyYW0gZGlyZWN0aW9uIFRoZSBkaXJlY3Rpb24gdGhlIGJsdXIgc2hvdWxkIGJlIGFwcGxpZWQu
CisgICAgICogQHBhcmFtIGtlcm5lbCBUaGUgc2l6ZSBvZiB0aGUga2VybmVsIHVzZWQgdG8gYmx1
ci4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlv
IHRvIGRvd25zaXplIHRvIGJlZm9yZSBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzLgorICAgICAq
IEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0byBhcHBseSB0aGUgcmVuZGVyIHBhc3MgdG8uCisg
ICAgICogQHBhcmFtIGNpcmNsZU9mQ29uZnVzaW9uIFRoZSBjaXJjbGUgb2YgY29uZnVzaW9uICsg
ZGVwdGggbWFwIHRvIGJlIHVzZWQgdG8gYXZvaWQgYmx1cnJpbmcgYWNjcm9zcyBlZGdlcworICAg
ICAqIEBwYXJhbSBpbWFnZVRvQmx1ciBUaGUgaW1hZ2UgdG8gYXBwbHkgdGhlIGJsdXIgdG8gKGRl
ZmF1bHQ6IEN1cnJlbnQgcmVuZGVyZWQgZnJhbWUpCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9k
ZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBwYXNzLiAo
ZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgd2hpY2ggdGhlIHBv
c3QgcHJvY2VzcyB3aWxsIGJlIGFwcGxpZWQuIChkZWZhdWx0OiBjdXJyZW50IGVuZ2luZSkKKyAg
ICAgKiBAcGFyYW0gcmV1c2FibGUgSWYgdGhlIHBvc3QgcHJvY2VzcyBjYW4gYmUgcmV1c2VkIG9u
IHRoZSBzYW1lIGZyYW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICogQHBhcmFtIHRleHR1cmVU
eXBlIFR5cGUgb2YgdGV4dHVyZXMgdXNlZCB3aGVuIHBlcmZvcm1pbmcgdGhlIHBvc3QgcHJvY2Vz
cy4gKGRlZmF1bHQ6IDApCisgICAgICogQHBhcmFtIGJsb2NrQ29tcGlsYXRpb24gSWYgY29tcGls
YXRpb24gb2YgdGhlIHNoYWRlciBzaG91bGQgbm90IGJlIGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9y
LiBUaGUgdXBkYXRlRWZmZWN0IG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjb21waWxlIHRoZSBzaGFk
ZXIgYXQgYSBsYXRlciB0aW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgZnVuY3Rp
b24gRGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzKG5hbWUsIHNjZW5lLCBkaXJlY3Rpb24sIGtl
cm5lbCwgb3B0aW9ucywgY2FtZXJhLCBjaXJjbGVPZkNvbmZ1c2lvbiwgaW1hZ2VUb0JsdXIsIHNh
bXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgdGV4dHVyZVR5cGUsIGJsb2NrQ29tcGlsYXRp
b24pIHsKKyAgICAgICAgaWYgKGltYWdlVG9CbHVyID09PSB2b2lkIDApIHsgaW1hZ2VUb0JsdXIg
PSBudWxsOyB9CisgICAgICAgIGlmIChzYW1wbGluZ01vZGUgPT09IHZvaWQgMCkgeyBzYW1wbGlu
Z01vZGUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVGV4dHVyZSJdLkJJTElORUFSX1NBTVBMSU5HTU9ERTsgfQorICAgICAgICBpZiAo
dGV4dHVyZVR5cGUgPT09IHZvaWQgMCkgeyB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9V
TlNJR05FRF9JTlQ7IH0KKyAgICAgICAgaWYgKGJsb2NrQ29tcGlsYXRpb24gPT09IHZvaWQgMCkg
eyBibG9ja0NvbXBpbGF0aW9uID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgZGlyZWN0aW9uLCBrZXJuZWwsIG9wdGlvbnMsIGNhbWVyYSwgc2Ft
cGxpbmdNb2RlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIkNvbnN0YW50cyJdLlRFWFRVUkVfQklMSU5FQVJfU0FNUExJTkdNT0RFLCBlbmdpbmUsIHJl
dXNhYmxlLCB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQsICIjZGVm
aW5lIERPRiAxXHJcbiIsIGJsb2NrQ29tcGlsYXRpb24pIHx8IHRoaXM7CisgICAgICAgIF90aGlz
LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKyAgICAgICAgX3RoaXMub25BcHBseU9ic2VydmFibGUu
YWRkKGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGlmIChpbWFnZVRvQmx1ciAhPSBu
dWxsKSB7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3Mo
InRleHR1cmVTYW1wbGVyIiwgaW1hZ2VUb0JsdXIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWZmZWN0LnNldFRleHR1cmVGcm9tUG9zdFByb2Nlc3NPdXRwdXQoImNpcmNsZU9mQ29uZnVz
aW9uU2FtcGxlciIsIGNpcmNsZU9mQ29uZnVzaW9uKTsKKyAgICAgICAgICAgIGlmIChzY2VuZS5h
Y3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCdjYW1lcmFN
aW5NYXhaJywgc2NlbmUuYWN0aXZlQ2FtZXJhLm1pblosIHNjZW5lLmFjdGl2ZUNhbWVyYS5tYXha
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAg
ICB9CisgICAgcmV0dXJuIERlcHRoT2ZGaWVsZEJsdXJQb3N0UHJvY2VzczsKK30oX2JsdXJQb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJCbHVyUG9zdFByb2Nlc3MiXSkp
OworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvZGVwdGhPZkZpZWxk
RWZmZWN0LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9kZXB0aE9mRmllbGRFZmZlY3QudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IERlcHRoT2ZGaWVsZEVmZmVjdEJsdXJMZXZlbCwgRGVwdGhPZkZp
ZWxkRWZmZWN0ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoT2ZG
aWVsZEVmZmVjdEJsdXJMZXZlbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGVwdGhPZkZpZWxkRWZm
ZWN0Qmx1ckxldmVsOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoT2ZGaWVsZEVmZmVjdCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gRGVwdGhPZkZpZWxkRWZmZWN0OyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5l
czYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvVGV4
dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Qb3N0UHJvY2Vzc2VzX1JlbmRlclBpcGVsaW5lX3Bvc3RQ
cm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9Qb3N0UHJvY2Vzc2VzL1JlbmRlclBpcGVsaW5lL3Bvc3RQcm9j
ZXNzUmVuZGVyRWZmZWN0ICovICIuL1Bvc3RQcm9jZXNzZXMvUmVuZGVyUGlwZWxpbmUvcG9zdFBy
b2Nlc3NSZW5kZXJFZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2lyY2xl
T2ZDb25mdXNpb25Qb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jaXJjbGVPZkNvbmZ1c2lvblBvc3RQcm9jZXNzICovICIu
L1Bvc3RQcm9jZXNzZXMvY2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJvY2Vzcy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9kZXB0aE9mRmllbGRCbHVyUG9zdFByb2Nlc3NfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZGVwdGhPZkZp
ZWxkQmx1clBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvZGVwdGhPZkZpZWxkQmx1clBv
c3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlcHRoT2ZGaWVsZE1l
cmdlUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vZGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL2RlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3MudHMiKTsKKworCisKKworCisKKwor
LyoqCisgKiBTcGVjaWZpZXMgdGhlIGxldmVsIG9mIG1heCBibHVyIHRoYXQgc2hvdWxkIGJlIGFw
cGxpZWQgd2hlbiB1c2luZyB0aGUgZGVwdGggb2YgZmllbGQgZWZmZWN0CisgKi8KK3ZhciBEZXB0
aE9mRmllbGRFZmZlY3RCbHVyTGV2ZWw7CisoZnVuY3Rpb24gKERlcHRoT2ZGaWVsZEVmZmVjdEJs
dXJMZXZlbCkgeworICAgIC8qKgorICAgICAqIFN1YnRsZSBibHVyCisgICAgICovCisgICAgRGVw
dGhPZkZpZWxkRWZmZWN0Qmx1ckxldmVsW0RlcHRoT2ZGaWVsZEVmZmVjdEJsdXJMZXZlbFsiTG93
Il0gPSAwXSA9ICJMb3ciOworICAgIC8qKgorICAgICAqIE1lZGl1bSBibHVyCisgICAgICovCisg
ICAgRGVwdGhPZkZpZWxkRWZmZWN0Qmx1ckxldmVsW0RlcHRoT2ZGaWVsZEVmZmVjdEJsdXJMZXZl
bFsiTWVkaXVtIl0gPSAxXSA9ICJNZWRpdW0iOworICAgIC8qKgorICAgICAqIExhcmdlIGJsdXIK
KyAgICAgKi8KKyAgICBEZXB0aE9mRmllbGRFZmZlY3RCbHVyTGV2ZWxbRGVwdGhPZkZpZWxkRWZm
ZWN0Qmx1ckxldmVsWyJIaWdoIl0gPSAyXSA9ICJIaWdoIjsKK30pKERlcHRoT2ZGaWVsZEVmZmVj
dEJsdXJMZXZlbCB8fCAoRGVwdGhPZkZpZWxkRWZmZWN0Qmx1ckxldmVsID0ge30pKTsKKy8qKgor
ICogVGhlIGRlcHRoIG9mIGZpZWxkIGVmZmVjdCBhcHBsaWVzIGEgYmx1ciB0byBvYmplY3RzIHRo
YXQgYXJlIGNsb3NlciBvciBmdXJ0aGVyIGZyb20gd2hlcmUgdGhlIGNhbWVyYSBpcyBmb2N1c2lu
Zy4KKyAqLwordmFyIERlcHRoT2ZGaWVsZEVmZmVjdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2V4
dGVuZHMiXShEZXB0aE9mRmllbGRFZmZlY3QsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyBhIG5ldyBpbnN0YW5jZSBEZXB0aE9mRmllbGRFZmZlY3QKKyAgICAgKiBAcGFyYW0gc2Nl
bmUgVGhlIHNjZW5lIHRoZSBlZmZlY3QgYmVsb25ncyB0by4KKyAgICAgKiBAcGFyYW0gZGVwdGhU
ZXh0dXJlIFRoZSBkZXB0aCB0ZXh0dXJlIG9mIHRoZSBzY2VuZSB0byBjb21wdXRlIHRoZSBjaXJj
bGUgb2YgY29uZnVzaW9uLlRoaXMgbXVzdCBiZSBzZXQgaW4gb3JkZXIgZm9yIHRoaXMgdG8gZnVu
Y3Rpb24gYnV0IG1heSBiZSBzZXQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gaWYgbmVlZGVkLgorICAg
ICAqIEBwYXJhbSBwaXBlbGluZVRleHR1cmVUeXBlIFRoZSB0eXBlIG9mIHRleHR1cmUgdG8gYmUg
dXNlZCB3aGVuIHBlcmZvcm1pbmcgdGhlIHBvc3QgcHJvY2Vzc2luZy4KKyAgICAgKiBAcGFyYW0g
YmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxhdGlvbiBvZiB0aGUgc2hhZGVyIHNob3VsZCBub3Qg
YmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSB1cGRhdGVFZmZlY3QgbWV0aG9kIGNhbiBi
ZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRlciBhdCBhIGxhdGVyIHRpbWUuIChkZWZhdWx0OiBm
YWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBEZXB0aE9mRmllbGRFZmZlY3Qoc2NlbmUsIGRl
cHRoVGV4dHVyZSwgYmx1ckxldmVsLCBwaXBlbGluZVRleHR1cmVUeXBlLCBibG9ja0NvbXBpbGF0
aW9uKSB7CisgICAgICAgIGlmIChibHVyTGV2ZWwgPT09IHZvaWQgMCkgeyBibHVyTGV2ZWwgPSBE
ZXB0aE9mRmllbGRFZmZlY3RCbHVyTGV2ZWwuTG93OyB9CisgICAgICAgIGlmIChwaXBlbGluZVRl
eHR1cmVUeXBlID09PSB2b2lkIDApIHsgcGlwZWxpbmVUZXh0dXJlVHlwZSA9IDA7IH0KKyAgICAg
ICAgaWYgKGJsb2NrQ29tcGlsYXRpb24gPT09IHZvaWQgMCkgeyBibG9ja0NvbXBpbGF0aW9uID0g
ZmFsc2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NlbmUuZ2V0
RW5naW5lKCksICJkZXB0aCBvZiBmaWVsZCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiBfdGhpcy5fZWZmZWN0czsKKyAgICAgICAgfSwgdHJ1ZSkgfHwgdGhpczsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEBoaWRkZW4gSW50ZXJuYWwgcG9zdCBwcm9jZXNzZXMgaW4gZGVwdGgg
b2YgZmllbGQgZWZmZWN0CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fZWZmZWN0cyA9IFtd
OworICAgICAgICAvLyBDaXJjbGUgb2YgY29uZnVzaW9uIHZhbHVlIGZvciBlYWNoIHBpeGVsIGlz
IHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIHRvIGJsdXIgdGhhdCBwaXhlbAorICAgICAgICBf
dGhpcy5fY2lyY2xlT2ZDb25mdXNpb24gPSBuZXcgX2NpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nl
c3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJv
Y2VzcyJdKCJjaXJjbGVPZkNvbmZ1c2lvbiIsIGRlcHRoVGV4dHVyZSwgMSwgbnVsbCwgX01hdGVy
aWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1
cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgcGlw
ZWxpbmVUZXh0dXJlVHlwZSwgYmxvY2tDb21waWxhdGlvbik7CisgICAgICAgIC8vIENyZWF0ZSBh
IHB5cmFtaWQgb2YgYmx1cnJlZCBpbWFnZXMgKGVnLiBmdWxsU2l6ZSAxLzQgYmx1ciwgaGFsZiBz
aXplIDEvMiBibHVyLCBxdWFydGVyIHNpemUgMy80IGJsdXIsIGVpdGggc2l6ZSA0LzQgYmx1cikK
KyAgICAgICAgLy8gQmx1ciB0aGUgaW1hZ2UgYnV0IGRvIG5vdCBibHVyIG9uIHNoYXJwIGZhciB0
byBuZWFyIGRpc3RhbmNlIGNoYW5nZXMgdG8gYXZvaWQgYmxlZWRpbmcgYXJ0aWZhY3RzCisgICAg
ICAgIC8vIFNlZSBzZWN0aW9uIDIuNi4yIGh0dHA6Ly9maWxlYWRtaW4uY3MubHRoLnNlL2NzL2Vk
dWNhdGlvbi9lZGFuMzUvbGVjdHVyZXMvMTJkb2YucGRmCisgICAgICAgIF90aGlzLl9kZXB0aE9m
RmllbGRCbHVyWSA9IFtdOworICAgICAgICBfdGhpcy5fZGVwdGhPZkZpZWxkQmx1clggPSBbXTsK
KyAgICAgICAgdmFyIGJsdXJDb3VudCA9IDE7CisgICAgICAgIHZhciBrZXJuZWxTaXplID0gMTU7
CisgICAgICAgIHN3aXRjaCAoYmx1ckxldmVsKSB7CisgICAgICAgICAgICBjYXNlIERlcHRoT2ZG
aWVsZEVmZmVjdEJsdXJMZXZlbC5IaWdoOiB7CisgICAgICAgICAgICAgICAgYmx1ckNvdW50ID0g
MzsKKyAgICAgICAgICAgICAgICBrZXJuZWxTaXplID0gNTE7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIERlcHRoT2ZGaWVsZEVmZmVjdEJs
dXJMZXZlbC5NZWRpdW06IHsKKyAgICAgICAgICAgICAgICBibHVyQ291bnQgPSAyOworICAgICAg
ICAgICAgICAgIGtlcm5lbFNpemUgPSAzMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICBrZXJuZWxT
aXplID0gMTU7CisgICAgICAgICAgICAgICAgYmx1ckNvdW50ID0gMTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgYWRqdXN0ZWRL
ZXJuZWxTaXplID0ga2VybmVsU2l6ZSAvIE1hdGgucG93KDIsIGJsdXJDb3VudCAtIDEpOworICAg
ICAgICB2YXIgcmF0aW8gPSAxLjA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmx1ckNv
dW50OyBpKyspIHsKKyAgICAgICAgICAgIHZhciBibHVyWSA9IG5ldyBfZGVwdGhPZkZpZWxkQmx1
clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkRlcHRoT2ZGaWVsZEJs
dXJQb3N0UHJvY2VzcyJdKCJ2ZXJ0aWNsZSBibHVyIiwgc2NlbmUsIG5ldyBfTWF0aHNfbWF0aF92
ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKDAsIDEuMCksIGFk
anVzdGVkS2VybmVsU2l6ZSwgcmF0aW8sIG51bGwsIF90aGlzLl9jaXJjbGVPZkNvbmZ1c2lvbiwg
aSA9PSAwID8gX3RoaXMuX2NpcmNsZU9mQ29uZnVzaW9uIDogbnVsbCwgX01hdGVyaWFsc19UZXh0
dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5CSUxJ
TkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBmYWxzZSwgcGlwZWxpbmVUZXh0
dXJlVHlwZSwgYmxvY2tDb21waWxhdGlvbik7CisgICAgICAgICAgICBibHVyWS5hdXRvQ2xlYXIg
PSBmYWxzZTsKKyAgICAgICAgICAgIHJhdGlvID0gMC43NSAvIE1hdGgucG93KDIsIGkpOworICAg
ICAgICAgICAgdmFyIGJsdXJYID0gbmV3IF9kZXB0aE9mRmllbGRCbHVyUG9zdFByb2Nlc3NfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzIl0o
Imhvcml6b250YWwgYmx1ciIsIHNjZW5lLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjIiXSgxLjAsIDApLCBhZGp1c3RlZEtlcm5lbFNp
emUsIHJhdGlvLCBudWxsLCBfdGhpcy5fY2lyY2xlT2ZDb25mdXNpb24sIG51bGwsIF9NYXRlcmlh
bHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0dXJl
Il0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBzY2VuZS5nZXRFbmdpbmUoKSwgZmFsc2UsIHBpcGVs
aW5lVGV4dHVyZVR5cGUsIGJsb2NrQ29tcGlsYXRpb24pOworICAgICAgICAgICAgYmx1clguYXV0
b0NsZWFyID0gZmFsc2U7CisgICAgICAgICAgICBfdGhpcy5fZGVwdGhPZkZpZWxkQmx1clkucHVz
aChibHVyWSk7CisgICAgICAgICAgICBfdGhpcy5fZGVwdGhPZkZpZWxkQmx1clgucHVzaChibHVy
WCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2V0IGFsbCBwb3N0IHByb2Nlc3NlcyBvbiB0aGUg
ZWZmZWN0LgorICAgICAgICBfdGhpcy5fZWZmZWN0cyA9IFtfdGhpcy5fY2lyY2xlT2ZDb25mdXNp
b25dOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF90aGlzLl9kZXB0aE9mRmllbGRCbHVy
WC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgX3RoaXMuX2VmZmVjdHMucHVzaChfdGhpcy5f
ZGVwdGhPZkZpZWxkQmx1cllbaV0pOworICAgICAgICAgICAgX3RoaXMuX2VmZmVjdHMucHVzaChf
dGhpcy5fZGVwdGhPZkZpZWxkQmx1clhbaV0pOworICAgICAgICB9CisgICAgICAgIC8vIE1lcmdl
IGJsdXJyZWQgaW1hZ2VzIHdpdGggb3JpZ2luYWwgaW1hZ2UgYmFzZWQgb24gY2lyY2xlT2ZDb25m
dXNpb24KKyAgICAgICAgX3RoaXMuX2RvZk1lcmdlID0gbmV3IF9kZXB0aE9mRmllbGRNZXJnZVBv
c3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkRlcHRoT2ZGaWVsZE1lcmdl
UG9zdFByb2Nlc3MiXSgiZG9mTWVyZ2UiLCBfdGhpcy5fY2lyY2xlT2ZDb25mdXNpb24sIF90aGlz
Ll9jaXJjbGVPZkNvbmZ1c2lvbiwgX3RoaXMuX2RlcHRoT2ZGaWVsZEJsdXJYLCByYXRpbywgbnVs
bCwgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1QTElOR01PREUsIHNjZW5lLmdldEVuZ2luZSgpLCBm
YWxzZSwgcGlwZWxpbmVUZXh0dXJlVHlwZSwgYmxvY2tDb21waWxhdGlvbik7CisgICAgICAgIF90
aGlzLl9kb2ZNZXJnZS5hdXRvQ2xlYXIgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMuX2VmZmVjdHMu
cHVzaChfdGhpcy5fZG9mTWVyZ2UpOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZXB0aE9mRmllbGRFZmZlY3QucHJvdG90eXBlLCAiZm9j
YWxMZW5ndGgiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2NpcmNsZU9mQ29uZnVzaW9uLmZvY2FsTGVuZ3RoOworICAgICAgICB9LAorICAg
ICAgICAvKioKKyAgICAgICAgICogVGhlIGZvY2FsIHRoZSBsZW5ndGggb2YgdGhlIGNhbWVyYSB1
c2VkIGluIHRoZSBlZmZlY3QgaW4gc2NlbmUgdW5pdHMvMTAwMCAoZWcuIG1pbGxpbWV0ZXIpCisg
ICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAg
dGhpcy5fY2lyY2xlT2ZDb25mdXNpb24uZm9jYWxMZW5ndGggPSB2YWx1ZTsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERlcHRoT2ZGaWVsZEVmZmVjdC5wcm90
b3R5cGUsICJmU3RvcCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fY2lyY2xlT2ZDb25mdXNpb24uZlN0b3A7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBGLVN0b3Agb2YgdGhlIGVmZmVjdCdzIGNhbWVyYS4gVGhlIGRp
YW1ldGVyIG9mIHRoZSByZXN1bHRpbmcgYXBlcnR1cmUgY2FuIGJlIGNvbXB1dGVkIGJ5IGxlbnNT
aXplL2ZTdG9wLiAoZGVmYXVsdDogMS40KQorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuX2NpcmNsZU9mQ29uZnVzaW9uLmZTdG9w
ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShE
ZXB0aE9mRmllbGRFZmZlY3QucHJvdG90eXBlLCAiZm9jdXNEaXN0YW5jZSIsIHsKKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2lyY2xlT2ZDb25m
dXNpb24uZm9jdXNEaXN0YW5jZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERpc3RhbmNlIGF3YXkgZnJvbSB0aGUgY2FtZXJhIHRvIGZvY3VzIG9uIGluIHNjZW5lIHVuaXRz
LzEwMDAgKGVnLiBtaWxsaW1ldGVyKS4gKGRlZmF1bHQ6IDIwMDApCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fY2lyY2xlT2ZD
b25mdXNpb24uZm9jdXNEaXN0YW5jZSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoRGVwdGhPZkZpZWxkRWZmZWN0LnByb3RvdHlwZSwgImxlbnNT
aXplIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9jaXJjbGVPZkNvbmZ1c2lvbi5sZW5zU2l6ZTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoq
CisgICAgICAgICAqIE1heCBsZW5zIHNpemUgaW4gc2NlbmUgdW5pdHMvMTAwMCAoZWcuIG1pbGxp
bWV0ZXIpLiBTdGFuZGFyZCBjYW1lcmFzIGFyZSA1MG1tLiAoZGVmYXVsdDogNTApIFRoZSBkaWFt
YXRlciBvZiB0aGUgcmVzdWx0aW5nIGFwZXJ0dXJlIGNhbiBiZSBjb21wdXRlZCBieSBsZW5zU2l6
ZS9mU3RvcC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9jaXJjbGVPZkNvbmZ1c2lvbi5sZW5zU2l6ZSA9IHZhbHVlOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAqIEdldCB0aGUgY3VycmVudCBjbGFzcyBuYW1l
IG9mIHRoZSBjdXJyZW50IGVmZmV0CisgICAgKiBAcmV0dXJucyAiRGVwdGhPZkZpZWxkRWZmZWN0
IgorICAgICovCisgICAgRGVwdGhPZkZpZWxkRWZmZWN0LnByb3RvdHlwZS5nZXRDbGFzc05hbWUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiRGVwdGhPZkZpZWxkRWZmZWN0IjsKKyAg
ICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZXB0aE9mRmllbGRFZmZlY3QucHJvdG90
eXBlLCAiZGVwdGhUZXh0dXJlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogRGVwdGggdGV4
dHVyZSB0byBiZSB1c2VkIHRvIGNvbXB1dGUgdGhlIGNpcmNsZSBvZiBjb25mdXNpb24uIFRoaXMg
bXVzdCBiZSBzZXQgaGVyZSBvciBpbiB0aGUgY29uc3RydWN0b3IgaW4gb3JkZXIgZm9yIHRoZSBw
b3N0IHByb2Nlc3MgdG8gZnVuY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fY2lyY2xlT2ZDb25mdXNpb24uZGVwdGhU
ZXh0dXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIERpc3Bv
c2VzIGVhY2ggb2YgdGhlIGludGVybmFsIGVmZmVjdHMgZm9yIGEgZ2l2ZW4gY2FtZXJhLgorICAg
ICAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0byBkaXNwb3NlIHRoZSBlZmZlY3Qgb24uCisg
ICAgICovCisgICAgRGVwdGhPZkZpZWxkRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlRWZmZWN0cyA9
IGZ1bmN0aW9uIChjYW1lcmEpIHsKKyAgICAgICAgZm9yICh2YXIgZWZmZWN0SW5kZXggPSAwOyBl
ZmZlY3RJbmRleCA8IHRoaXMuX2VmZmVjdHMubGVuZ3RoOyBlZmZlY3RJbmRleCsrKSB7CisgICAg
ICAgICAgICB0aGlzLl9lZmZlY3RzW2VmZmVjdEluZGV4XS5kaXNwb3NlKGNhbWVyYSk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEBoaWRkZW4gSW50ZXJuYWwKKyAgICAgKi8K
KyAgICBEZXB0aE9mRmllbGRFZmZlY3QucHJvdG90eXBlLl91cGRhdGVFZmZlY3RzID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBmb3IgKHZhciBlZmZlY3RJbmRleCA9IDA7IGVmZmVjdEluZGV4IDwg
dGhpcy5fZWZmZWN0cy5sZW5ndGg7IGVmZmVjdEluZGV4KyspIHsKKyAgICAgICAgICAgIHRoaXMu
X2VmZmVjdHNbZWZmZWN0SW5kZXhdLnVwZGF0ZUVmZmVjdCgpOworICAgICAgICB9CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBJbnRlcm5hbAorICAgICAqIEByZXR1cm5zIGlmIGFsbCB0aGUgY29u
dGFpbmVkIHBvc3QgcHJvY2Vzc2VzIGFyZSByZWFkeS4KKyAgICAgKiBAaGlkZGVuCisgICAgICov
CisgICAgRGVwdGhPZkZpZWxkRWZmZWN0LnByb3RvdHlwZS5faXNSZWFkeSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgZm9yICh2YXIgZWZmZWN0SW5kZXggPSAwOyBlZmZlY3RJbmRleCA8IHRoaXMu
X2VmZmVjdHMubGVuZ3RoOyBlZmZlY3RJbmRleCsrKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMu
X2VmZmVjdHNbZWZmZWN0SW5kZXhdLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9OworICAgIHJldHVybiBEZXB0aE9mRmllbGRFZmZlY3Q7Cit9KF9Qb3N0UHJvY2Vzc2Vz
X1JlbmRlclBpcGVsaW5lX3Bvc3RQcm9jZXNzUmVuZGVyRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIlBvc3RQcm9jZXNzUmVuZGVyRWZmZWN0Il0pKTsKKworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2RlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3Mu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9kZXB0aE9mRmllbGRNZXJnZVBvc3RQ
cm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRGVwdGhPZkZpZWxkTWVy
Z2VQb3N0UHJvY2Vzc09wdGlvbnMsIERlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3MgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJv
Y2Vzc09wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERlcHRoT2ZGaWVsZE1lcmdlUG9zdFBy
b2Nlc3NPcHRpb25zOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoT2ZGaWVsZE1lcmdlUG9z
dFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nl
c3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9w
b3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVz
L2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9TaGFkZXJzX2RlcHRoT2ZGaWVsZE1lcmdlX2ZyYWdtZW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2Rl
cHRoT2ZGaWVsZE1lcmdlLmZyYWdtZW50ICovICIuL1NoYWRlcnMvZGVwdGhPZkZpZWxkTWVyZ2Uu
ZnJhZ21lbnQudHMiKTsKKworCisKKworLyoqCisgKiBPcHRpb25zIHRvIGJlIHNldCB3aGVuIG1l
cmdpbmcgb3V0cHV0cyBmcm9tIHRoZSBkZWZhdWx0IHBpcGVsaW5lLgorICovCit2YXIgRGVwdGhP
ZkZpZWxkTWVyZ2VQb3N0UHJvY2Vzc09wdGlvbnMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisgICAgZnVuY3Rpb24gRGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2Vzc09wdGlvbnMoKSB7
CisgICAgfQorICAgIHJldHVybiBEZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNzT3B0aW9uczsK
K30oKSk7CisKKy8qKgorICogVGhlIERlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3MgbWVyZ2Vz
IGJsdXJyZWQgaW1hZ2VzIHdpdGggdGhlIG9yaWdpbmFsIGJhc2VkIG9uIHRoZSB2YWx1ZXMgb2Yg
dGhlIGNpcmNsZSBvZiBjb25mdXNpb24uCisgKi8KK3ZhciBEZXB0aE9mRmllbGRNZXJnZVBvc3RQ
cm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKERlcHRoT2ZGaWVsZE1lcmdl
UG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0
YW5jZSBvZiBEZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUg
VGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0gb3JpZ2luYWxGcm9tSW5wdXQg
UG9zdCBwcm9jZXNzIHdoaWNoJ3MgaW5wdXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgbWVyZ2UuCisg
ICAgICogQHBhcmFtIGNpcmNsZU9mQ29uZnVzaW9uIENpcmNsZSBvZiBjb25mdXNpb24gcG9zdCBw
cm9jZXNzIHdoaWNoJ3Mgb3V0cHV0IHdpbGwgYmUgdXNlZCB0byBibHVyIGVhY2ggcGl4ZWwuCisg
ICAgICogQHBhcmFtIGJsdXJTdGVwcyBCbHVyIHBvc3QgcHJvY2Vzc2VzIGZyb20gbG93IHRvIGhp
Z2ggd2hpY2ggd2lsbCBiZSBtaXhlZCB3aXRoIHRoZSBvcmlnaW5hbCBpbWFnZS4KKyAgICAgKiBA
cGFyYW0gb3B0aW9ucyBUaGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlvIHRvIGRvd25zaXpl
IHRvIGJlZm9yZSBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzLgorICAgICAqIEBwYXJhbSBjYW1l
cmEgVGhlIGNhbWVyYSB0byBhcHBseSB0aGUgcmVuZGVyIHBhc3MgdG8uCisgICAgICogQHBhcmFt
IHNhbXBsaW5nTW9kZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2VkIHdoZW4gY29tcHV0aW5n
IHRoZSBwYXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUg
d2hpY2ggdGhlIHBvc3QgcHJvY2VzcyB3aWxsIGJlIGFwcGxpZWQuIChkZWZhdWx0OiBjdXJyZW50
IGVuZ2luZSkKKyAgICAgKiBAcGFyYW0gcmV1c2FibGUgSWYgdGhlIHBvc3QgcHJvY2VzcyBjYW4g
YmUgcmV1c2VkIG9uIHRoZSBzYW1lIGZyYW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICogQHBh
cmFtIHRleHR1cmVUeXBlIFR5cGUgb2YgdGV4dHVyZXMgdXNlZCB3aGVuIHBlcmZvcm1pbmcgdGhl
IHBvc3QgcHJvY2Vzcy4gKGRlZmF1bHQ6IDApCisgICAgICogQHBhcmFtIGJsb2NrQ29tcGlsYXRp
b24gSWYgY29tcGlsYXRpb24gb2YgdGhlIHNoYWRlciBzaG91bGQgbm90IGJlIGRvbmUgaW4gdGhl
IGNvbnN0cnVjdG9yLiBUaGUgdXBkYXRlRWZmZWN0IG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjb21w
aWxlIHRoZSBzaGFkZXIgYXQgYSBsYXRlciB0aW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICov
CisgICAgZnVuY3Rpb24gRGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2VzcyhuYW1lLCBvcmlnaW5h
bEZyb21JbnB1dCwgY2lyY2xlT2ZDb25mdXNpb24sIGJsdXJTdGVwcywgb3B0aW9ucywgY2FtZXJh
LCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUsIHRleHR1cmVUeXBlLCBibG9ja0NvbXBp
bGF0aW9uKSB7CisgICAgICAgIGlmICh0ZXh0dXJlVHlwZSA9PT0gdm9pZCAwKSB7IHRleHR1cmVU
eXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkNv
bnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICBpZiAoYmxvY2tD
b21waWxhdGlvbiA9PT0gdm9pZCAwKSB7IGJsb2NrQ29tcGlsYXRpb24gPSBmYWxzZTsgfQorICAg
ICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCAiZGVwdGhPZkZpZWxkTWVy
Z2UiLCBbXSwgWyJjaXJjbGVPZkNvbmZ1c2lvblNhbXBsZXIiLCAiYmx1clN0ZXAwIiwgImJsdXJT
dGVwMSIsICJibHVyU3RlcDIiXSwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2lu
ZSwgcmV1c2FibGUsIG51bGwsIHRleHR1cmVUeXBlLCB1bmRlZmluZWQsIG51bGwsIHRydWUpIHx8
IHRoaXM7CisgICAgICAgIF90aGlzLmJsdXJTdGVwcyA9IGJsdXJTdGVwczsKKyAgICAgICAgX3Ro
aXMub25BcHBseU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAg
IGVmZmVjdC5zZXRUZXh0dXJlRnJvbVBvc3RQcm9jZXNzKCJ0ZXh0dXJlU2FtcGxlciIsIG9yaWdp
bmFsRnJvbUlucHV0KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlRnJvbVBvc3RQcm9j
ZXNzT3V0cHV0KCJjaXJjbGVPZkNvbmZ1c2lvblNhbXBsZXIiLCBjaXJjbGVPZkNvbmZ1c2lvbik7
CisgICAgICAgICAgICBibHVyU3RlcHMuZm9yRWFjaChmdW5jdGlvbiAoc3RlcCwgaW5kZXgpIHsK
KyAgICAgICAgICAgICAgICBlZmZlY3Quc2V0VGV4dHVyZUZyb21Qb3N0UHJvY2Vzc091dHB1dCgi
Ymx1clN0ZXAiICsgKGJsdXJTdGVwcy5sZW5ndGggLSBpbmRleCAtIDEpLCBzdGVwKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFibG9ja0NvbXBpbGF0aW9uKSB7
CisgICAgICAgICAgICBfdGhpcy51cGRhdGVFZmZlY3QoKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGVmZmVjdCB3
aXRoIHRoZSBjdXJyZW50IHBvc3QgcHJvY2VzcyBjb21waWxlIHRpbWUgdmFsdWVzIGFuZCByZWNv
bXBpbGVzIHRoZSBzaGFkZXIuCisgICAgICogQHBhcmFtIGRlZmluZXMgRGVmaW5lIHN0YXRlbWVu
dHMgdGhhdCBzaG91bGQgYmUgYWRkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2hhZGVyLiAo
ZGVmYXVsdDogbnVsbCkKKyAgICAgKiBAcGFyYW0gdW5pZm9ybXMgU2V0IG9mIHVuaWZvcm0gdmFy
aWFibGVzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHNoYWRlci4gKGRlZmF1bHQ6IG51bGwp
CisgICAgICogQHBhcmFtIHNhbXBsZXJzIFNldCBvZiBUZXh0dXJlMkQgdmFyaWFibGVzIHRoYXQg
d2lsbCBiZSBwYXNzZWQgdG8gdGhlIHNoYWRlci4gKGRlZmF1bHQ6IG51bGwpCisgICAgICogQHBh
cmFtIGluZGV4UGFyYW1ldGVycyBUaGUgaW5kZXggcGFyYW1ldGVycyB0byBiZSB1c2VkIGZvciBi
YWJ5bG9ucyBpbmNsdWRlIHN5bnRheCAiI2luY2x1ZGU8a2VybmVsQmx1clZhcnlpbmdEZWNsYXJh
dGlvbj5bMC4udmFyeWluZ0NvdW50XSIuIChkZWZhdWx0OiB1bmRlZmluZWQpIFNlZSB1c2FnZSBp
biBiYWJ5bG9uLmJsdXJQb3N0UHJvY2Vzcy50cyBhbmQga2VybmVsQmx1ci52ZXJ0ZXguZngKKyAg
ICAgKiBAcGFyYW0gb25Db21waWxlZCBDYWxsZWQgd2hlbiB0aGUgc2hhZGVyIGhhcyBiZWVuIGNv
bXBpbGVkLgorICAgICAqIEBwYXJhbSBvbkVycm9yIENhbGxlZCBpZiB0aGVyZSBpcyBhbiBlcnJv
ciB3aGVuIGNvbXBpbGluZyBhIHNoYWRlci4KKyAgICAgKi8KKyAgICBEZXB0aE9mRmllbGRNZXJn
ZVBvc3RQcm9jZXNzLnByb3RvdHlwZS51cGRhdGVFZmZlY3QgPSBmdW5jdGlvbiAoZGVmaW5lcywg
dW5pZm9ybXMsIHNhbXBsZXJzLCBpbmRleFBhcmFtZXRlcnMsIG9uQ29tcGlsZWQsIG9uRXJyb3Ip
IHsKKyAgICAgICAgaWYgKGRlZmluZXMgPT09IHZvaWQgMCkgeyBkZWZpbmVzID0gbnVsbDsgfQor
ICAgICAgICBpZiAodW5pZm9ybXMgPT09IHZvaWQgMCkgeyB1bmlmb3JtcyA9IG51bGw7IH0KKyAg
ICAgICAgaWYgKHNhbXBsZXJzID09PSB2b2lkIDApIHsgc2FtcGxlcnMgPSBudWxsOyB9CisgICAg
ICAgIGlmICghZGVmaW5lcykgeworICAgICAgICAgICAgZGVmaW5lcyA9ICIiOworICAgICAgICAg
ICAgZGVmaW5lcyArPSAiI2RlZmluZSBCTFVSX0xFVkVMICIgKyAodGhpcy5ibHVyU3RlcHMubGVu
Z3RoIC0gMSkgKyAiXG4iOworICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUudXBk
YXRlRWZmZWN0LmNhbGwodGhpcywgZGVmaW5lcywgdW5pZm9ybXMsIHNhbXBsZXJzLCBpbmRleFBh
cmFtZXRlcnMsIG9uQ29tcGlsZWQsIG9uRXJyb3IpOworICAgIH07CisgICAgcmV0dXJuIERlcHRo
T2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3M7Cit9KF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJQb3N0UHJvY2VzcyJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vUG9zdFByb2Nlc3Nlcy9kaXNwbGF5UGFzc1Bvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bv
c3RQcm9jZXNzZXMvZGlzcGxheVBhc3NQb3N0UHJvY2Vzcy50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IERpc3BsYXlQYXNzUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiRGlzcGxheVBhc3NQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
RGlzcGxheVBhc3NQb3N0UHJvY2VzczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9j
ZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVy
c19kaXNwbGF5UGFzc19mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9kaXNwbGF5UGFzcy5mcmFnbWVudCAqLyAi
Li9TaGFkZXJzL2Rpc3BsYXlQYXNzLmZyYWdtZW50LnRzIik7CisKKworCisvKioKKyAqIERpc3Bs
YXlQYXNzUG9zdFByb2Nlc3Mgd2hpY2ggcHJvZHVjZXMgYW4gb3V0cHV0IHRoZSBzYW1lIGFzIGl0
J3MgaW5wdXQKKyAqLwordmFyIERpc3BsYXlQYXNzUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siX19leHRlbmRzIl0oRGlzcGxheVBhc3NQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIHRoZSBEaXNwbGF5UGFzc1Bvc3RQcm9jZXNzCisgICAgICogQHBh
cmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBU
aGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlvIHRvIGRvd25zaXplIHRvIGJlZm9yZSBjb21w
dXRpbmcgdGhlIHJlbmRlciBwYXNzLgorICAgICAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0
byBhcHBseSB0aGUgcmVuZGVyIHBhc3MgdG8uCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBU
aGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBwYXNzLiAoZGVm
YXVsdDogMCkKKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdpbmUgd2hpY2ggdGhlIHBvc3Qg
cHJvY2VzcyB3aWxsIGJlIGFwcGxpZWQuIChkZWZhdWx0OiBjdXJyZW50IGVuZ2luZSkKKyAgICAg
KiBAcGFyYW0gcmV1c2FibGUgSWYgdGhlIHBvc3QgcHJvY2VzcyBjYW4gYmUgcmV1c2VkIG9uIHRo
ZSBzYW1lIGZyYW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICovCisgICAgZnVuY3Rpb24gRGlz
cGxheVBhc3NQb3N0UHJvY2VzcyhuYW1lLCBvcHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwg
ZW5naW5lLCByZXVzYWJsZSkgeworICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgbmFt
ZSwgImRpc3BsYXlQYXNzIiwgWyJwYXNzU2FtcGxlciJdLCBbInBhc3NTYW1wbGVyIl0sIG9wdGlv
bnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB8fCB0aGlzOworICAg
IH0KKyAgICByZXR1cm4gRGlzcGxheVBhc3NQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiov
IH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2V4dHJhY3RIaWdobGlnaHRzUG9zdFByb2Nl
c3MudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9leHRyYWN0SGlnaGxpZ2h0c1Bv
c3RQcm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRXh0cmFjdEhpZ2hs
aWdodHNQb3N0UHJvY2VzcyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJF
eHRyYWN0SGlnaGxpZ2h0c1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFeHRyYWN0
SGlnaGxpZ2h0c1Bvc3RQcm9jZXNzOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xp
Yl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
dHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nl
c3Nlcy9wb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19t
YXRoX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb25zdGFudHMgKi8gIi4vTWF0aHMvbWF0aC5jb25z
dGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfZXh0cmFjdEhpZ2hsaWdodHNfZnJhZ21lbnRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1No
YWRlcnMvZXh0cmFjdEhpZ2hsaWdodHMuZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9leHRyYWN0SGln
aGxpZ2h0cy5mcmFnbWVudC50cyIpOworCisKKworCisKKy8qKgorICogVGhlIGV4dHJhY3QgaGln
aGxpZ2h0cyBwb3N0IHByb2Nlc3Mgc2V0cyBhbGwgcGl4ZWxzIHRvIGJsYWNrIGV4Y2VwdCBwaXhl
bHMgYWJvdmUgdGhlIHNwZWNpZmllZCBsdW1pbmFuY2UgdGhyZXNob2xkLiBVc2VkIGFzIHRoZSBm
aXJzdCBzdGVwIGZvciBhIGJsb29tIGVmZmVjdC4KKyAqLwordmFyIEV4dHJhY3RIaWdobGlnaHRz
UG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oRXh0cmFjdEhpZ2hs
aWdodHNQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICBmdW5jdGlvbiBFeHRyYWN0SGlnaGxpZ2h0
c1Bvc3RQcm9jZXNzKG5hbWUsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUs
IHJldXNhYmxlLCB0ZXh0dXJlVHlwZSwgYmxvY2tDb21waWxhdGlvbikgeworICAgICAgICBpZiAo
dGV4dHVyZVR5cGUgPT09IHZvaWQgMCkgeyB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9V
TlNJR05FRF9JTlQ7IH0KKyAgICAgICAgaWYgKGJsb2NrQ29tcGlsYXRpb24gPT09IHZvaWQgMCkg
eyBibG9ja0NvbXBpbGF0aW9uID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgImV4dHJhY3RIaWdobGlnaHRzIiwgWyJ0aHJlc2hvbGQiLCAiZXhw
b3N1cmUiXSwgbnVsbCwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgcmV1
c2FibGUsIG51bGwsIHRleHR1cmVUeXBlLCB1bmRlZmluZWQsIG51bGwsIGJsb2NrQ29tcGlsYXRp
b24pIHx8IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbHVtaW5hbmNlIHRocmVz
aG9sZCwgcGl4ZWxzIGJlbG93IHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gYmxhY2suCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy50aHJlc2hvbGQgPSAwLjk7CisgICAgICAgIC8qKiBAaGlk
ZGVuICovCisgICAgICAgIF90aGlzLl9leHBvc3VyZSA9IDE7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBQb3N0IHByb2Nlc3Mgd2hpY2ggaGFzIHRoZSBpbnB1dCB0ZXh0dXJlIHRvIGJlIHVzZWQg
d2hlbiBwZXJmb3JtaW5nIGhpZ2hsaWdodCBleHRyYWN0aW9uCisgICAgICAgICAqIEBoaWRkZW4K
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9pbnB1dFBvc3RQcm9jZXNzID0gbnVsbDsKKyAg
ICAgICAgX3RoaXMub25BcHBseU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAg
ICAgICAgICAgIGlmIChfdGhpcy5faW5wdXRQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAg
IGVmZmVjdC5zZXRUZXh0dXJlRnJvbVBvc3RQcm9jZXNzKCJ0ZXh0dXJlU2FtcGxlciIsIF90aGlz
Ll9pbnB1dFBvc3RQcm9jZXNzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVmZmVjdC5z
ZXRGbG9hdCgndGhyZXNob2xkJywgTWF0aC5wb3coX3RoaXMudGhyZXNob2xkLCBfTWF0aHNfbWF0
aF9jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9HYW1tYVNwYWNlIl0p
KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgnZXhwb3N1cmUnLCBfdGhpcy5fZXhwb3N1
cmUpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICByZXR1
cm4gRXh0cmFjdEhpZ2hsaWdodHNQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2ZpbHRlclBvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0
UHJvY2Vzc2VzL2ZpbHRlclBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEZpbHRl
clBvc3RQcm9jZXNzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZpbHRl
clBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWx0ZXJQb3N0UHJvY2VzczsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9j
ZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19maWx0ZXJfZnJhZ21lbnRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMv
ZmlsdGVyLmZyYWdtZW50ICovICIuL1NoYWRlcnMvZmlsdGVyLmZyYWdtZW50LnRzIik7CisKKwor
CisvKioKKyAqIEFwcGxpZXMgYSBrZXJuZWwgZmlsdGVyIHRvIHRoZSBpbWFnZQorICovCit2YXIg
RmlsdGVyUG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oRmlsdGVy
UG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAgLyoqCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFt
ZSBUaGUgbmFtZSBvZiB0aGUgZWZmZWN0LgorICAgICAqIEBwYXJhbSBrZXJuZWxNYXRyaXggVGhl
IG1hdHJpeCB0byBiZSBhcHBsaWVkIHRvIHRoZSBpbWFnZQorICAgICAqIEBwYXJhbSBvcHRpb25z
IFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQgcmF0aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNv
bXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisgICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJh
IHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2Rl
IFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChk
ZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9z
dCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAg
ICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24g
dGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBG
aWx0ZXJQb3N0UHJvY2VzcyhuYW1lLCAKKyAgICAvKiogVGhlIG1hdHJpeCB0byBiZSBhcHBsaWVk
IHRvIHRoZSBpbWFnZSAqLworICAgIGtlcm5lbE1hdHJpeCwgb3B0aW9ucywgY2FtZXJhLCBzYW1w
bGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgImZpbHRlciIsIFsia2VybmVsTWF0cml4Il0sIG51bGwsIG9wdGlv
bnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB8fCB0aGlzOworICAg
ICAgICBfdGhpcy5rZXJuZWxNYXRyaXggPSBrZXJuZWxNYXRyaXg7CisgICAgICAgIF90aGlzLm9u
QXBwbHkgPSBmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0TWF0cml4
KCJrZXJuZWxNYXRyaXgiLCBfdGhpcy5rZXJuZWxNYXRyaXgpOworICAgICAgICB9OworICAgICAg
ICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIHJldHVybiBGaWx0ZXJQb3N0UHJvY2VzczsKK30o
X3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0p
KTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL2Z4YWFQb3N0UHJv
Y2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioh
KlwKKyAgISoqKiAuL1Bvc3RQcm9jZXNzZXMvZnhhYVBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBGeGFhUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRnhhYVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGeGFhUG9zdFByb2Nl
c3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9t
b2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8g
Ii4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vcG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJv
Y2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
RW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19meGFhX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2Z4YWEuZnJh
Z21lbnQgKi8gIi4vU2hhZGVycy9meGFhLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1NoYWRlcnNfZnhhYV92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZnhhYS52ZXJ0ZXggKi8gIi4v
U2hhZGVycy9meGFhLnZlcnRleC50cyIpOworCisKKworCisKKworLyoqCisgKiBGeGFhIHBvc3Qg
cHJvY2VzcworICogQHNlZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9f
dXNlX3Bvc3Rwcm9jZXNzZXMjZnhhYQorICovCit2YXIgRnhhYVBvc3RQcm9jZXNzID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEZ4YWFQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICBm
dW5jdGlvbiBGeGFhUG9zdFByb2Nlc3MobmFtZSwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01v
ZGUsIGVuZ2luZSwgcmV1c2FibGUsIHRleHR1cmVUeXBlKSB7CisgICAgICAgIGlmIChjYW1lcmEg
PT09IHZvaWQgMCkgeyBjYW1lcmEgPSBudWxsOyB9CisgICAgICAgIGlmICh0ZXh0dXJlVHlwZSA9
PT0gdm9pZCAwKSB7IHRleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsg
fQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCAiZnhhYSIsIFsi
dGV4ZWxTaXplIl0sIG51bGwsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlIHx8IF9NYXRl
cmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0
dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFLCBlbmdpbmUsIHJldXNhYmxlLCBudWxsLCB0ZXh0
dXJlVHlwZSwgImZ4YWEiLCB1bmRlZmluZWQsIHRydWUpIHx8IHRoaXM7CisgICAgICAgIHZhciBk
ZWZpbmVzID0gX3RoaXMuX2dldERlZmluZXMoKTsKKyAgICAgICAgX3RoaXMudXBkYXRlRWZmZWN0
KGRlZmluZXMpOworICAgICAgICBfdGhpcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24g
KGVmZmVjdCkgeworICAgICAgICAgICAgdmFyIHRleGVsU2l6ZSA9IF90aGlzLnRleGVsU2l6ZTsK
KyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDIoInRleGVsU2l6ZSIsIHRleGVsU2l6ZS54LCB0
ZXhlbFNpemUueSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQor
ICAgIEZ4YWFQb3N0UHJvY2Vzcy5wcm90b3R5cGUuX2dldERlZmluZXMgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLmdldEVuZ2luZSgpOworICAgICAgICBpZiAoIWVu
Z2luZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IGdsSW5mbyA9IGVuZ2luZS5nZXRHbEluZm8oKTsKKyAgICAgICAgaWYgKGdsSW5mbyAmJiBnbElu
Zm8ucmVuZGVyZXIgJiYgZ2xJbmZvLnJlbmRlcmVyLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigibWFs
aSIpID4gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiAiI2RlZmluZSBNQUxJIDFcbiI7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICByZXR1cm4gRnhhYVBvc3RQ
cm9jZXNzOworfShfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUG9z
dFByb2Nlc3MiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMv
Z3JhaW5Qb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2VzL2dyYWluUG9zdFByb2Nlc3Mu
dHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBHcmFpblBvc3RQcm9jZXNzICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkdyYWluUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIEdyYWluUG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0
c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vz
c2VzL3Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2dyYWluX2ZyYWdtZW50X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFk
ZXJzL2dyYWluLmZyYWdtZW50ICovICIuL1NoYWRlcnMvZ3JhaW4uZnJhZ21lbnQudHMiKTsKKwor
CisKKworLyoqCisgKiBUaGUgR3JhaW5Qb3N0UHJvY2VzcyBhZGRzIG5vaXNlIHRvIHRoZSBpbWFn
ZSBhdCBtaWQgbHVtaW5hbmNlIGxldmVscworICovCit2YXIgR3JhaW5Qb3N0UHJvY2VzcyA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShHcmFpblBvc3RQcm9jZXNzLCBfc3VwZXIpOwor
ICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgQHNlZSBHcmFpblBvc3RQ
cm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAgICAg
KiBAcGFyYW0gb3B0aW9ucyBUaGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlvIHRvIGRvd25z
aXplIHRvIGJlZm9yZSBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzLgorICAgICAqIEBwYXJhbSBj
YW1lcmEgVGhlIGNhbWVyYSB0byBhcHBseSB0aGUgcmVuZGVyIHBhc3MgdG8uCisgICAgICogQHBh
cmFtIHNhbXBsaW5nTW9kZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2VkIHdoZW4gY29tcHV0
aW5nIHRoZSBwYXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gZW5naW5lIFRoZSBlbmdp
bmUgd2hpY2ggdGhlIHBvc3QgcHJvY2VzcyB3aWxsIGJlIGFwcGxpZWQuIChkZWZhdWx0OiBjdXJy
ZW50IGVuZ2luZSkKKyAgICAgKiBAcGFyYW0gcmV1c2FibGUgSWYgdGhlIHBvc3QgcHJvY2VzcyBj
YW4gYmUgcmV1c2VkIG9uIHRoZSBzYW1lIGZyYW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAgICog
QHBhcmFtIHRleHR1cmVUeXBlIFR5cGUgb2YgdGV4dHVyZXMgdXNlZCB3aGVuIHBlcmZvcm1pbmcg
dGhlIHBvc3QgcHJvY2Vzcy4gKGRlZmF1bHQ6IDApCisgICAgICogQHBhcmFtIGJsb2NrQ29tcGls
YXRpb24gSWYgY29tcGlsYXRpb24gb2YgdGhlIHNoYWRlciBzaG91bGQgbm90IGJlIGRvbmUgaW4g
dGhlIGNvbnN0cnVjdG9yLiBUaGUgdXBkYXRlRWZmZWN0IG1ldGhvZCBjYW4gYmUgdXNlZCB0byBj
b21waWxlIHRoZSBzaGFkZXIgYXQgYSBsYXRlciB0aW1lLiAoZGVmYXVsdDogZmFsc2UpCisgICAg
ICovCisgICAgZnVuY3Rpb24gR3JhaW5Qb3N0UHJvY2VzcyhuYW1lLCBvcHRpb25zLCBjYW1lcmEs
IHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgdGV4dHVyZVR5cGUsIGJsb2NrQ29tcGls
YXRpb24pIHsKKyAgICAgICAgaWYgKHRleHR1cmVUeXBlID09PSB2b2lkIDApIHsgdGV4dHVyZVR5
cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29u
c3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAgIGlmIChibG9ja0Nv
bXBpbGF0aW9uID09PSB2b2lkIDApIHsgYmxvY2tDb21waWxhdGlvbiA9IGZhbHNlOyB9CisgICAg
ICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsICJncmFpbiIsIFsiaW50ZW5z
aXR5IiwgImFuaW1hdGVkU2VlZCJdLCBbXSwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01vZGUs
IGVuZ2luZSwgcmV1c2FibGUsIG51bGwsIHRleHR1cmVUeXBlLCB1bmRlZmluZWQsIG51bGwsIGJs
b2NrQ29tcGlsYXRpb24pIHx8IHRoaXM7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgaW50
ZW5zaXR5IG9mIHRoZSBncmFpbiBhZGRlZCAoZGVmYXVsdDogMzApCisgICAgICAgICAqLworICAg
ICAgICBfdGhpcy5pbnRlbnNpdHkgPSAzMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRo
ZSBncmFpbiBzaG91bGQgYmUgcmFuZG9taXplZCBvbiBldmVyeSBmcmFtZQorICAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMuYW5pbWF0ZWQgPSBmYWxzZTsKKyAgICAgICAgX3RoaXMub25BcHBseU9i
c2VydmFibGUuYWRkKGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRG
bG9hdCgnaW50ZW5zaXR5JywgX3RoaXMuaW50ZW5zaXR5KTsKKyAgICAgICAgICAgIGVmZmVjdC5z
ZXRGbG9hdCgnYW5pbWF0ZWRTZWVkJywgX3RoaXMuYW5pbWF0ZWQgPyBNYXRoLnJhbmRvbSgpICsg
MSA6IDEpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAgICBy
ZXR1cm4gR3JhaW5Qb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9Qb3N0UHJvY2Vzc2VzL2hpZ2hsaWdodHNQb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQ
cm9jZXNzZXMvaGlnaGxpZ2h0c1Bvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBIaWdobGlnaHRzUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiSGlnaGxpZ2h0c1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBIaWdobGln
aHRzUG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAq
LyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bv
c3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3Rh
bnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2hpZ2hsaWdodHNfZnJhZ21lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRl
cnMvaGlnaGxpZ2h0cy5mcmFnbWVudCAqLyAiLi9TaGFkZXJzL2hpZ2hsaWdodHMuZnJhZ21lbnQu
dHMiKTsKKworCisKKworLyoqCisgKiBFeHRyYWN0cyBoaWdobGlnaHRzIGZyb20gdGhlIGltYWdl
CisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfcG9z
dHByb2Nlc3NlcworICovCit2YXIgSGlnaGxpZ2h0c1Bvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZXh0ZW5kcyJdKEhpZ2hsaWdodHNQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICAv
KioKKyAgICAgKiBFeHRyYWN0cyBoaWdobGlnaHRzIGZyb20gdGhlIGltYWdlCisgICAgICogQHNl
ZSBodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNz
ZXMKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZWZmZWN0LgorICAgICAqIEBw
YXJhbSBvcHRpb25zIFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQgcmF0aW8gdG8gZG93bnNpemUg
dG8gYmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisgICAgICogQHBhcmFtIGNhbWVy
YSBUaGUgY2FtZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAgICAgKiBAcGFyYW0g
c2FtcGxpbmdNb2RlIFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcg
dGhlIHBhc3MuIChkZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3
aGljaCB0aGUgcG9zdCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQg
ZW5naW5lKQorICAgICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBi
ZSByZXVzZWQgb24gdGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgKiBAcGFy
YW0gdGV4dHVyZVR5cGUgVHlwZSBvZiB0ZXh0dXJlIGZvciB0aGUgcG9zdCBwcm9jZXNzIChkZWZh
dWx0OiBFbmdpbmUuVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKQorICAgICAqLworICAgIGZ1bmN0
aW9uIEhpZ2hsaWdodHNQb3N0UHJvY2VzcyhuYW1lLCBvcHRpb25zLCBjYW1lcmEsIHNhbXBsaW5n
TW9kZSwgZW5naW5lLCByZXVzYWJsZSwgdGV4dHVyZVR5cGUpIHsKKyAgICAgICAgaWYgKHRleHR1
cmVUeXBlID09PSB2b2lkIDApIHsgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdO
RURfSU5UOyB9CisgICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBuYW1lLCAiaGlnaGxp
Z2h0cyIsIG51bGwsIG51bGwsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUs
IHJldXNhYmxlLCBudWxsLCB0ZXh0dXJlVHlwZSkgfHwgdGhpczsKKyAgICB9CisgICAgcmV0dXJu
IEhpZ2hsaWdodHNQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9Qb3N0UHJvY2Vzc2VzL2ltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9Qb3N0UHJvY2Vzc2VzL2ltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzICovCisvKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2VzczsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNs
aWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3Jh
dG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vTWlzYy9kZWNvcmF0b3JzICovICIuL01pc2MvZGVjb3JhdG9ycy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0ZXJpYWxzL2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gKi8gIi4vTWF0ZXJpYWxz
L2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vcG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJv
Y2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZVN0b3Jl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9FbmdpbmVzL2VuZ2luZVN0b3JlICovICIuL0VuZ2luZXMvZW5naW5lU3RvcmUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3Rh
bnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNfaW1hZ2VQcm9jZXNzaW5nX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2ltYWdlUHJvY2Vz
c2luZy5mcmFnbWVudCAqLyAiLi9TaGFkZXJzL2ltYWdlUHJvY2Vzc2luZy5mcmFnbWVudC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX3Bvc3Rwcm9jZXNzX3ZlcnRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
U2hhZGVycy9wb3N0cHJvY2Vzcy52ZXJ0ZXggKi8gIi4vU2hhZGVycy9wb3N0cHJvY2Vzcy52ZXJ0
ZXgudHMiKTsKKworCisKKworCisKKworCisvKioKKyAqIEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9j
ZXNzCisgKiBAc2VlIGh0dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vf
cG9zdHByb2Nlc3NlcyNpbWFnZXByb2Nlc3NpbmcKKyAqLwordmFyIEltYWdlUHJvY2Vzc2luZ1Bv
c3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEltYWdlUHJvY2Vzc2lu
Z1Bvc3RQcm9jZXNzLCBfc3VwZXIpOworICAgIGZ1bmN0aW9uIEltYWdlUHJvY2Vzc2luZ1Bvc3RQ
cm9jZXNzKG5hbWUsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNh
YmxlLCB0ZXh0dXJlVHlwZSwgaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbikgeworICAgICAg
ICBpZiAoY2FtZXJhID09PSB2b2lkIDApIHsgY2FtZXJhID0gbnVsbDsgfQorICAgICAgICBpZiAo
dGV4dHVyZVR5cGUgPT09IHZvaWQgMCkgeyB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9V
TlNJR05FRF9JTlQ7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFt
ZSwgImltYWdlUHJvY2Vzc2luZyIsIFtdLCBbXSwgb3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01v
ZGUsIGVuZ2luZSwgcmV1c2FibGUsIG51bGwsIHRleHR1cmVUeXBlLCAicG9zdHByb2Nlc3MiLCBu
dWxsLCB0cnVlKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fZnJvbUxpbmVhclNwYWNlID0gdHJ1
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgY2FjaGUgcHJldmVudGluZyBHQy4K
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9kZWZpbmVzID0geworICAgICAgICAgICAgSU1B
R0VQUk9DRVNTSU5HOiBmYWxzZSwKKyAgICAgICAgICAgIFZJR05FVFRFOiBmYWxzZSwKKyAgICAg
ICAgICAgIFZJR05FVFRFQkxFTkRNT0RFTVVMVElQTFk6IGZhbHNlLAorICAgICAgICAgICAgVklH
TkVUVEVCTEVORE1PREVPUEFRVUU6IGZhbHNlLAorICAgICAgICAgICAgVE9ORU1BUFBJTkc6IGZh
bHNlLAorICAgICAgICAgICAgVE9ORU1BUFBJTkdfQUNFUzogZmFsc2UsCisgICAgICAgICAgICBD
T05UUkFTVDogZmFsc2UsCisgICAgICAgICAgICBDT0xPUkNVUlZFUzogZmFsc2UsCisgICAgICAg
ICAgICBDT0xPUkdSQURJTkc6IGZhbHNlLAorICAgICAgICAgICAgQ09MT1JHUkFESU5HM0Q6IGZh
bHNlLAorICAgICAgICAgICAgRlJPTUxJTkVBUlNQQUNFOiBmYWxzZSwKKyAgICAgICAgICAgIFNB
TVBMRVIzREdSRUVOREVQVEg6IGZhbHNlLAorICAgICAgICAgICAgU0FNUExFUjNEQkdSTUFQOiBm
YWxzZSwKKyAgICAgICAgICAgIElNQUdFUFJPQ0VTU0lOR1BPU1RQUk9DRVNTOiBmYWxzZSwKKyAg
ICAgICAgICAgIEVYUE9TVVJFOiBmYWxzZSwKKyAgICAgICAgfTsKKyAgICAgICAgLy8gU2V0dXAg
dGhlIGNvbmZpZ3VyYXRpb24gYXMgZm9yY2VkIGJ5IHRoZSBjb25zdHJ1Y3Rvci4gVGhpcyB3b3Vs
ZCB0aGVuIG5vdCBmb3JjZSB0aGUKKyAgICAgICAgLy8gc2NlbmUgbWF0ZXJpYWxzIG91dHB1dCBp
biBsaW5lYXIgc3BhY2UgYW5kIGxldCB1bnRvdWNoZWQgdGhlIGRlZmF1bHQgZm9yd2FyZCBwYXNz
LgorICAgICAgICBpZiAoaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbikgeworICAgICAgICAg
ICAgaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5hcHBseUJ5UG9zdFByb2Nlc3MgPSB0cnVl
OworICAgICAgICAgICAgX3RoaXMuX2F0dGFjaEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24o
aW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiwgdHJ1ZSk7CisgICAgICAgICAgICAvLyBUaGlz
IHdpbGwgY2F1c2UgdGhlIHNoYWRlciB0byBiZSBjb21waWxlZAorICAgICAgICAgICAgX3RoaXMu
ZnJvbUxpbmVhclNwYWNlID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2V0dXAgdGhl
IGRlZmF1bHQgcHJvY2Vzc2luZyBjb25maWd1cmF0aW9uIHRvIHRoZSBzY2VuZS4KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBfdGhpcy5fYXR0YWNoSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbihudWxsLCB0cnVlKTsKKyAgICAgICAgICAgIF90aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZp
Z3VyYXRpb24uYXBwbHlCeVBvc3RQcm9jZXNzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBf
dGhpcy5vbkFwcGx5ID0gZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAgICAgX3RoaXMuaW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5iaW5kKGVmZmVjdCwgX3RoaXMuYXNwZWN0UmF0aW8p
OworICAgICAgICB9OworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJpbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0
cyB0aGUgaW1hZ2UgcHJvY2Vzc2luZyBjb25maWd1cmF0aW9uIHVzZWQgZWl0aGVyIGluIHRoaXMg
bWF0ZXJpYWwuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uOworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgRGVmYXVsdCBpbWFnZSBwcm9j
ZXNzaW5nIGNvbmZpZ3VyYXRpb24gdXNlZCBlaXRoZXIgaW4gdGhlIHRoaXMgbWF0ZXJpYWwuCisg
ICAgICAgICAqCisgICAgICAgICAqIElmIHNldHMgdG8gbnVsbCwgdGhlIHNjZW5lIG9uZSBpcyBp
biB1c2UuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgLy8gV2UgYXJlIGFsbW9zdCBzdXJlIGl0IGlzIGFwcGxpZWQgYnkgcG9zdCBwcm9j
ZXNzIGFzCisgICAgICAgICAgICAvLyBXZSBhcmUgaW4gdGhlIHBvc3QgcHJvY2VzcyA6LSkKKyAg
ICAgICAgICAgIHZhbHVlLmFwcGx5QnlQb3N0UHJvY2VzcyA9IHRydWU7CisgICAgICAgICAgICB0
aGlzLl9hdHRhY2hJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKHZhbHVlKTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgLyoqCisgICAgICogQXR0YWNoZXMgYSBuZXcgaW1hZ2UgcHJvY2Vzc2lu
ZyBjb25maWd1cmF0aW9uIHRvIHRoZSBQQlIgTWF0ZXJpYWwuCisgICAgICogQHBhcmFtIGNvbmZp
Z3VyYXRpb24KKyAgICAgKi8KKyAgICBJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90b3R5
cGUuX2F0dGFjaEltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbiAoY29uZmln
dXJhdGlvbiwgZG9Ob3RCdWlsZCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAg
ICBpZiAoZG9Ob3RCdWlsZCA9PT0gdm9pZCAwKSB7IGRvTm90QnVpbGQgPSBmYWxzZTsgfQorICAg
ICAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIERldGFj
aGVzIG9ic2VydmVyLgorICAgICAgICBpZiAodGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbiAmJiB0aGlzLl9pbWFnZVByb2Nlc3NpbmdPYnNlcnZlcikgeworICAgICAgICAgICAgdGhp
cy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5vblVwZGF0ZVBhcmFtZXRlcnMucmVtb3Zl
KHRoaXMuX2ltYWdlUHJvY2Vzc2luZ09ic2VydmVyKTsKKyAgICAgICAgfQorICAgICAgICAvLyBQ
aWNrIHRoZSBzY2VuZSBjb25maWd1cmF0aW9uIGlmIG5lZWRlZC4KKyAgICAgICAgaWYgKCFjb25m
aWd1cmF0aW9uKSB7CisgICAgICAgICAgICB2YXIgc2NlbmUgPSBudWxsOworICAgICAgICAgICAg
dmFyIGVuZ2luZSA9IHRoaXMuZ2V0RW5naW5lKCk7CisgICAgICAgICAgICB2YXIgY2FtZXJhID0g
dGhpcy5nZXRDYW1lcmEoKTsKKyAgICAgICAgICAgIGlmIChjYW1lcmEpIHsKKyAgICAgICAgICAg
ICAgICBzY2VuZSA9IGNhbWVyYS5nZXRTY2VuZSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAoZW5naW5lICYmIGVuZ2luZS5zY2VuZXMpIHsKKyAgICAgICAgICAgICAgICB2
YXIgc2NlbmVzID0gZW5naW5lLnNjZW5lczsKKyAgICAgICAgICAgICAgICBzY2VuZSA9IHNjZW5l
c1tzY2VuZXMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzY2VuZSA9IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIkVuZ2luZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24g
PSBzY2VuZS5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiA9
IGNvbmZpZ3VyYXRpb247CisgICAgICAgIH0KKyAgICAgICAgLy8gQXR0YWNoZXMgb2JzZXJ2ZXIu
CisgICAgICAgIGlmICh0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uKSB7CisgICAg
ICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdPYnNlcnZlciA9IHRoaXMuX2ltYWdlUHJvY2Vz
c2luZ0NvbmZpZ3VyYXRpb24ub25VcGRhdGVQYXJhbWV0ZXJzLmFkZChmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAgICAgX3RoaXMuX3VwZGF0ZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9CisgICAgICAgIC8vIEVuc3VyZSB0aGUgZWZmZWN0IHdpbGwgYmUgcmVidWls
dC4KKyAgICAgICAgaWYgKCFkb05vdEJ1aWxkKSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVQ
YXJhbWV0ZXJzKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJjb2xvckN1cnZlcyIsIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgQ29sb3IgY3VydmVzIHNldHVwIHVzZWQgaW4g
dGhlIGVmZmVjdCBpZiBjb2xvckN1cnZlc0VuYWJsZWQgaXMgc2V0IHRvIHRydWUgLgorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yQ3VydmVzOworICAgICAgICB9LAor
ICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyBDb2xvciBjdXJ2ZXMgc2V0dXAgdXNlZCBpbiB0
aGUgZWZmZWN0IGlmIGNvbG9yQ3VydmVzRW5hYmxlZCBpcyBzZXQgdG8gdHJ1ZSAuCisgICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5p
bWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yQ3VydmVzID0gdmFsdWU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdQb3N0
UHJvY2Vzcy5wcm90b3R5cGUsICJjb2xvckN1cnZlc0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHdldGhlciB0aGUgY29sb3IgY3VydmVzIGVmZmVjdCBpcyBlbmFibGVk
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLmNvbG9yQ3VydmVzRW5hYmxl
ZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgd2V0aGVyIHRoZSBj
b2xvciBjdXJ2ZXMgZWZmZWN0IGlzIGVuYWJsZWQuCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25m
aWd1cmF0aW9uLmNvbG9yQ3VydmVzRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MucHJv
dG90eXBlLCAiY29sb3JHcmFkaW5nVGV4dHVyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgQ29sb3IgZ3JhZGluZyBMVVQgdGV4dHVyZSB1c2VkIGluIHRoZSBlZmZlY3QgaWYgY29s
b3JHcmFkaW5nRW5hYmxlZCBpcyBzZXQgdG8gdHJ1ZS4KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbi5jb2xvckdyYWRpbmdUZXh0dXJlOworICAgICAgICB9LAorICAgICAgICAv
KioKKyAgICAgICAgICogU2V0cyBDb2xvciBncmFkaW5nIExVVCB0ZXh0dXJlIHVzZWQgaW4gdGhl
IGVmZmVjdCBpZiBjb2xvckdyYWRpbmdFbmFibGVkIGlzIHNldCB0byB0cnVlLgorICAgICAgICAg
Ki8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckdyYWRpbmdUZXh0dXJlID0gdmFsdWU7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3Np
bmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJjb2xvckdyYWRpbmdFbmFibGVkIiwgeworICAgICAg
ICAvKioKKyAgICAgICAgICogR2V0cyB3ZXRoZXIgdGhlIGNvbG9yIGdyYWRpbmcgZWZmZWN0IGlz
IGVuYWJsZWQuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24uY29sb3JHcmFk
aW5nRW5hYmxlZDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgd2V0
aGVyIHRoZSBjb2xvciBncmFkaW5nIGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAgKi8KKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbi5jb2xvckdyYWRpbmdFbmFibGVkID0gdmFsdWU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdQb3N0
UHJvY2Vzcy5wcm90b3R5cGUsICJleHBvc3VyZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdldHMgZXhwb3N1cmUgdXNlZCBpbiB0aGUgZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3Np
bmdDb25maWd1cmF0aW9uLmV4cG9zdXJlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAg
ICAgICogU2V0cyBleHBvc3VyZSB1c2VkIGluIHRoZSBlZmZlY3QuCisgICAgICAgICAqLworICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5pbWFnZVByb2Nl
c3NpbmdDb25maWd1cmF0aW9uLmV4cG9zdXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90
b3R5cGUsICJ0b25lTWFwcGluZ0VuYWJsZWQiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIHdldGhlciB0b25lbWFwcGluZyBpcyBlbmFibGVkIG9yIG5vdC4KKyAgICAgICAgICovCisg
ICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udG9uZU1hcHBpbmdFbmFibGVkOworICAgICAgICB9LAor
ICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3ZXRoZXIgdG9uZW1hcHBpbmcgaXMgZW5hYmxl
ZCBvciBub3QKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnRvbmVNYXBwaW5n
RW5hYmxlZCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MucHJvdG90eXBlLCAidG9uZU1hcHBpbmdU
eXBlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgdHlwZSBvZiB0b25lIG1h
cHBpbmcgZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi50b25l
TWFwcGluZ1R5cGU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRo
ZSB0eXBlIG9mIHRvbmUgbWFwcGluZyBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5faW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbi50b25lTWFwcGluZ1R5cGUgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3Rv
dHlwZSwgImNvbnRyYXN0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBjb250cmFz
dCB1c2VkIGluIHRoZSBlZmZlY3QuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRp
b24uY29udHJhc3Q7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIGNv
bnRyYXN0IHVzZWQgaW4gdGhlIGVmZmVjdC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24uY29udHJhc3QgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgInZpZ25l
dHRlU3RyZXRjaCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgVmlnbmV0dGUgc3Ry
ZXRjaCBzaXplLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnZpZ25ldHRl
U3RyZXRjaDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgVmlnbmV0
dGUgc3RyZXRjaCBzaXplLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi52aWdu
ZXR0ZVN0cmV0Y2ggPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgInZpZ25ldHRl
Q2VudHJlWCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgVmlnbmV0dGUgY2VudHJl
IFggT2Zmc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnZpZ25ldHRl
Q2VudHJlWDsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgVmlnbmV0
dGUgY2VudHJlIFggT2Zmc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi52
aWduZXR0ZUNlbnRyZVggPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgInZpZ25l
dHRlQ2VudHJlWSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgVmlnbmV0dGUgY2Vu
dHJlIFkgT2Zmc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnZpZ25l
dHRlQ2VudHJlWTsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgVmln
bmV0dGUgY2VudHJlIFkgT2Zmc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
bi52aWduZXR0ZUNlbnRyZVkgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgInZp
Z25ldHRlV2VpZ2h0IiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBWaWduZXR0ZSB3
ZWlnaHQgb3IgaW50ZW5zaXR5IG9mIHRoZSB2aWduZXR0ZSBlZmZlY3QuCisgICAgICAgICAqLwor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udmlnbmV0dGVXZWlnaHQ7CisgICAgICAgIH0sCisgICAg
ICAgIC8qKgorICAgICAgICAgKiBTZXRzIFZpZ25ldHRlIHdlaWdodCBvciBpbnRlbnNpdHkgb2Yg
dGhlIHZpZ25ldHRlIGVmZmVjdC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24u
dmlnbmV0dGVXZWlnaHQgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgInZpZ25l
dHRlQ29sb3IiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIENvbG9yIG9mIHRoZSB2
aWduZXR0ZSBhcHBsaWVkIG9uIHRoZSBzY3JlZW4gdGhyb3VnaCB0aGUgY2hvc2VuIGJsZW5kIG1v
ZGUgKHZpZ25ldHRlQmxlbmRNb2RlKQorICAgICAgICAgKiBpZiB2aWduZXR0ZUVuYWJsZWQgaXMg
c2V0IHRvIHRydWUuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udmlnbmV0
dGVDb2xvcjsKKyAgICAgICAgfSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgQ29sb3Ig
b2YgdGhlIHZpZ25ldHRlIGFwcGxpZWQgb24gdGhlIHNjcmVlbiB0aHJvdWdoIHRoZSBjaG9zZW4g
YmxlbmQgbW9kZSAodmlnbmV0dGVCbGVuZE1vZGUpCisgICAgICAgICAqIGlmIHZpZ25ldHRlRW5h
YmxlZCBpcyBzZXQgdG8gdHJ1ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24u
dmlnbmV0dGVDb2xvciA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MucHJvdG90eXBlLCAidmlnbmV0
dGVDYW1lcmFGb3YiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIENhbWVyYSBmaWVs
ZCBvZiB2aWV3IHVzZWQgYnkgdGhlIFZpZ25ldHRlIGVmZmVjdC4KKyAgICAgICAgICovCisgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VQcm9j
ZXNzaW5nQ29uZmlndXJhdGlvbi52aWduZXR0ZUNhbWVyYUZvdjsKKyAgICAgICAgfSwKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNldHMgQ2FtZXJhIGZpZWxkIG9mIHZpZXcgdXNlZCBieSB0aGUg
VmlnbmV0dGUgZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi52aWdu
ZXR0ZUNhbWVyYUZvdiA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MucHJvdG90eXBlLCAidmlnbmV0
dGVCbGVuZE1vZGUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB2aWduZXR0
ZSBibGVuZCBtb2RlIGFsbG93aW5nIGRpZmZlcmVudCBraW5kIG9mIGVmZmVjdC4KKyAgICAgICAg
ICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
aW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi52aWduZXR0ZUJsZW5kTW9kZTsKKyAgICAgICAg
fSwKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHZpZ25ldHRlIGJsZW5kIG1vZGUg
YWxsb3dpbmcgZGlmZmVyZW50IGtpbmQgb2YgZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNzaW5n
Q29uZmlndXJhdGlvbi52aWduZXR0ZUJsZW5kTW9kZSA9IHZhbHVlOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3Mu
cHJvdG90eXBlLCAidmlnbmV0dGVFbmFibGVkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyB3ZXRoZXIgdGhlIHZpZ25ldHRlIGVmZmVjdCBpcyBlbmFibGVkLgorICAgICAgICAgKi8K
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uLnZpZ25ldHRlRW5hYmxlZDsKKyAgICAgICAgfSwKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFNldHMgd2V0aGVyIHRoZSB2aWduZXR0ZSBlZmZlY3QgaXMg
ZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgICAgICB0aGlzLmltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udmlnbmV0dGVFbmFi
bGVkID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJmcm9tTGluZWFyU3BhY2Ui
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHdldGhlciB0aGUgaW5wdXQgb2YgdGhl
IHByb2Nlc3NpbmcgaXMgaW4gR2FtbWEgb3IgTGluZWFyIFNwYWNlLgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJvbUxp
bmVhclNwYWNlOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3ZXRo
ZXIgdGhlIGlucHV0IG9mIHRoZSBwcm9jZXNzaW5nIGlzIGluIEdhbW1hIG9yIExpbmVhciBTcGFj
ZS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fZnJvbUxpbmVhclNwYWNlID09PSB2YWx1ZSkgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2Zyb21MaW5lYXJT
cGFjZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFyYW1ldGVycygpOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiAgIkltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9j
ZXNzIgorICAgICAqIEByZXR1cm5zICJJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2VzcyIKKyAgICAg
Ki8KKyAgICBJbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1l
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIkltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9j
ZXNzIjsKKyAgICB9OworICAgIEltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZS5f
dXBkYXRlUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fZGVmaW5lcy5G
Uk9NTElORUFSU1BBQ0UgPSB0aGlzLl9mcm9tTGluZWFyU3BhY2U7CisgICAgICAgIHRoaXMuaW1h
Z2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbi5wcmVwYXJlRGVmaW5lcyh0aGlzLl9kZWZpbmVzLCB0
cnVlKTsKKyAgICAgICAgdmFyIGRlZmluZXMgPSAiIjsKKyAgICAgICAgZm9yICh2YXIgZGVmaW5l
IGluIHRoaXMuX2RlZmluZXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9kZWZpbmVzW2RlZmlu
ZV0pIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzICs9ICIjZGVmaW5lICIgKyBkZWZpbmUgKyAi
O1xyXG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBzYW1wbGVycyA9
IFsidGV4dHVyZVNhbXBsZXIiXTsKKyAgICAgICAgdmFyIHVuaWZvcm1zID0gWyJzY2FsZSJdOwor
ICAgICAgICBpZiAoX01hdGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iXSkg
eworICAgICAgICAgICAgX01hdGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24i
XS5QcmVwYXJlU2FtcGxlcnMoc2FtcGxlcnMsIHRoaXMuX2RlZmluZXMpOworICAgICAgICAgICAg
X01hdGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24iXS5QcmVwYXJlVW5pZm9y
bXModW5pZm9ybXMsIHRoaXMuX2RlZmluZXMpOworICAgICAgICB9CisgICAgICAgIHRoaXMudXBk
YXRlRWZmZWN0KGRlZmluZXMsIHVuaWZvcm1zLCBzYW1wbGVycyk7CisgICAgfTsKKyAgICBJbWFn
ZVByb2Nlc3NpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChjYW1l
cmEpIHsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcywgY2FtZXJh
KTsKKyAgICAgICAgaWYgKHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gJiYgdGhp
cy5faW1hZ2VQcm9jZXNzaW5nT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2ltYWdlUHJv
Y2Vzc2luZ0NvbmZpZ3VyYXRpb24ub25VcGRhdGVQYXJhbWV0ZXJzLnJlbW92ZSh0aGlzLl9pbWFn
ZVByb2Nlc3NpbmdPYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2ltYWdl
UHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMuaW1hZ2VQcm9jZXNz
aW5nQ29uZmlndXJhdGlvbi5hcHBseUJ5UG9zdFByb2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0
ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBJbWFnZVByb2Nlc3NpbmdQb3N0UHJv
Y2Vzcy5wcm90b3R5cGUsICJfZnJvbUxpbmVhclNwYWNlIiwgdm9pZCAwKTsKKyAgICByZXR1cm4g
SW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3M7Cit9KF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJQb3N0UHJvY2VzcyJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vUG9zdFByb2Nlc3Nlcy9pbmRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9pbmRleC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBB
bmFnbHlwaFBvc3RQcm9jZXNzLCBCbGFja0FuZFdoaXRlUG9zdFByb2Nlc3MsIEJsb29tRWZmZWN0
LCBCbG9vbU1lcmdlUG9zdFByb2Nlc3MsIEJsdXJQb3N0UHJvY2VzcywgQ2hyb21hdGljQWJlcnJh
dGlvblBvc3RQcm9jZXNzLCBDaXJjbGVPZkNvbmZ1c2lvblBvc3RQcm9jZXNzLCBDb2xvckNvcnJl
Y3Rpb25Qb3N0UHJvY2VzcywgQ29udm9sdXRpb25Qb3N0UHJvY2VzcywgRGVwdGhPZkZpZWxkQmx1
clBvc3RQcm9jZXNzLCBEZXB0aE9mRmllbGRFZmZlY3RCbHVyTGV2ZWwsIERlcHRoT2ZGaWVsZEVm
ZmVjdCwgRGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2Vzc09wdGlvbnMsIERlcHRoT2ZGaWVsZE1l
cmdlUG9zdFByb2Nlc3MsIERpc3BsYXlQYXNzUG9zdFByb2Nlc3MsIEV4dHJhY3RIaWdobGlnaHRz
UG9zdFByb2Nlc3MsIEZpbHRlclBvc3RQcm9jZXNzLCBGeGFhUG9zdFByb2Nlc3MsIEdyYWluUG9z
dFByb2Nlc3MsIEhpZ2hsaWdodHNQb3N0UHJvY2VzcywgSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nl
c3MsIE1vdGlvbkJsdXJQb3N0UHJvY2VzcywgUGFzc1Bvc3RQcm9jZXNzLCBQYXNzQ3ViZVBvc3RQ
cm9jZXNzLCBQb3N0UHJvY2VzcywgUG9zdFByb2Nlc3NNYW5hZ2VyLCBSZWZyYWN0aW9uUG9zdFBy
b2Nlc3MsIFNoYXJwZW5Qb3N0UHJvY2VzcywgU3RlcmVvc2NvcGljSW50ZXJsYWNlUG9zdFByb2Nl
c3MsIFRvbmVtYXBwaW5nT3BlcmF0b3IsIFRvbmVtYXBQb3N0UHJvY2VzcywgVm9sdW1ldHJpY0xp
Z2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLCBWUkRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFByb2Nl
c3MsIFZSTXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MsIFBvc3RQcm9jZXNzUmVuZGVy
RWZmZWN0LCBQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lLCBQb3N0UHJvY2Vzc1JlbmRlclBpcGVs
aW5lTWFuYWdlciwgUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNvbXBvbmVu
dCwgRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lLCBMZW5zUmVuZGVyaW5nUGlwZWxpbmUsIFNTQU8y
UmVuZGVyaW5nUGlwZWxpbmUsIFNTQU9SZW5kZXJpbmdQaXBlbGluZSwgU3RhbmRhcmRSZW5kZXJp
bmdQaXBlbGluZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2FuYWdseXBoUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vYW5hZ2x5cGhQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vz
c2VzL2FuYWdseXBoUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5hZ2x5cGhQ
b3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2FuYWdseXBoUG9zdFByb2Nlc3NfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQW5hZ2x5cGhQb3N0UHJvY2VzcyJdOyB9KTsKKwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ibGFja0FuZFdoaXRlUG9zdFByb2Nlc3NfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmxhY2tB
bmRXaGl0ZVBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvYmxhY2tBbmRXaGl0ZVBvc3RQ
cm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJsYWNrQW5kV2hpdGVQb3N0UHJvY2VzcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2JsYWNrQW5kV2hpdGVQb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJCbGFja0FuZFdoaXRlUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmxvb21FZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmxvb21FZmZlY3QgKi8gIi4vUG9z
dFByb2Nlc3Nlcy9ibG9vbUVmZmVjdC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCbG9vbUVmZmVj
dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Jsb29tRWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIkJsb29tRWZmZWN0Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2Jsb29tTWVyZ2VQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ibG9vbU1lcmdlUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFBy
b2Nlc3Nlcy9ibG9vbU1lcmdlUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmxv
b21NZXJnZVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfYmxvb21NZXJnZVBvc3RQ
cm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkJsb29tTWVyZ2VQb3N0UHJvY2Vz
cyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ibHVyUG9zdFByb2Nlc3NfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYmx1
clBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvYmx1clBvc3RQcm9jZXNzLnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkJsdXJQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Js
dXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJCbHVyUG9zdFByb2Nl
c3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY2hyb21hdGljQWJlcnJhdGlv
blBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2Nocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJv
Y2Vzc2VzL2Nocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJDaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9jaHJvbWF0aWNBYmVycmF0aW9uUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siQ2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2NpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY2lyY2xlT2ZDb25m
dXNpb25Qb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL2NpcmNsZU9mQ29uZnVzaW9uUG9z
dFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJv
Y2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX2NpcmNsZU9mQ29uZnVzaW9uUG9zdFByb2Nlc3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ2lyY2xlT2ZDb25mdXNpb25Qb3N0UHJvY2Vz
cyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb2xvckNvcnJlY3Rpb25Qb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9jb2xvckNvcnJlY3Rpb25Qb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL2Nv
bG9yQ29ycmVjdGlvblBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yQ29y
cmVjdGlvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29sb3JDb3JyZWN0aW9u
UG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ29sb3JDb3JyZWN0aW9u
UG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29udm9sdXRp
b25Qb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9jb252b2x1dGlvblBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMv
Y29udm9sdXRpb25Qb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb252b2x1dGlv
blBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfY29udm9sdXRpb25Qb3N0UHJvY2Vz
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb252b2x1dGlvblBvc3RQcm9jZXNzIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlcHRoT2ZGaWVsZEJsdXJQb3N0UHJv
Y2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9kZXB0aE9mRmllbGRCbHVyUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9kZXB0
aE9mRmllbGRCbHVyUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhPZkZp
ZWxkQmx1clBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZGVwdGhPZkZpZWxkQmx1
clBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIkRlcHRoT2ZGaWVsZEJs
dXJQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZXB0aE9m
RmllbGRFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2RlcHRoT2ZGaWVsZEVmZmVjdCAqLyAiLi9Qb3N0UHJvY2Vzc2VzL2RlcHRo
T2ZGaWVsZEVmZmVjdC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aE9mRmllbGRFZmZlY3RC
bHVyTGV2ZWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZXB0aE9mRmllbGRFZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkRlcHRoT2ZGaWVsZEVmZmVjdEJsdXJMZXZlbCJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aE9mRmllbGRFZmZlY3QiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9kZXB0aE9mRmllbGRFZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19b
IkRlcHRoT2ZGaWVsZEVmZmVjdCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9k
ZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNz
ICovICIuL1Bvc3RQcm9jZXNzZXMvZGVwdGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2Vzcy50cyIpOwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJEZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNzT3B0aW9ucyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX2RlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3NfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzExX19bIkRlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3NPcHRpb25z
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3Mi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJEZXB0aE9mRmllbGRNZXJnZVBvc3RQcm9jZXNzIl07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Rpc3BsYXlQYXNzUG9zdFByb2Nlc3Nf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L2Rpc3BsYXlQYXNzUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9kaXNwbGF5UGFzc1Bv
c3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRpc3BsYXlQYXNzUG9zdFByb2Nlc3Mi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9kaXNwbGF5UGFzc1Bvc3RQcm9jZXNzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xMl9fWyJEaXNwbGF5UGFzc1Bvc3RQcm9jZXNzIl07IH0pOworCisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2V4dHJhY3RIaWdobGlnaHRzUG9zdFByb2Nlc3NfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2V4dHJh
Y3RIaWdobGlnaHRzUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9leHRyYWN0SGlnaGxp
Z2h0c1Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkV4dHJhY3RIaWdobGlnaHRz
UG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9leHRyYWN0SGlnaGxpZ2h0c1Bvc3RQ
cm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJFeHRyYWN0SGlnaGxpZ2h0c1Bv
c3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZpbHRlclBvc3RQ
cm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9maWx0ZXJQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL2ZpbHRlclBvc3RQ
cm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZpbHRlclBvc3RQcm9jZXNzIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfZmlsdGVyUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE0X19bIkZpbHRlclBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2Z4YWFQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vZnhhYVBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMv
ZnhhYVBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZ4YWFQb3N0UHJvY2VzcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX2Z4YWFQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTVfX1siRnhhYVBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2dyYWluUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2dyYWluUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nl
c3Nlcy9ncmFpblBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdyYWluUG9zdFBy
b2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9ncmFpblBvc3RQcm9jZXNzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xNl9fWyJHcmFpblBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2hpZ2hsaWdodHNQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaGlnaGxpZ2h0c1Bvc3RQcm9j
ZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvaGlnaGxpZ2h0c1Bvc3RQcm9jZXNzLnRzIik7CisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkhpZ2hsaWdodHNQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2hpZ2hsaWdodHNQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX1siSGln
aGxpZ2h0c1Bvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2lt
YWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pbWFnZVByb2Nlc3NpbmdQb3N0UHJvY2VzcyAqLyAi
Li9Qb3N0UHJvY2Vzc2VzL2ltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfaW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4
X19bIkltYWdlUHJvY2Vzc2luZ1Bvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX21vdGlvbkJsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbW90aW9uQmx1clBvc3RQcm9jZXNzICov
ICIuL1Bvc3RQcm9jZXNzZXMvbW90aW9uQmx1clBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIk1vdGlvbkJsdXJQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX21vdGlv
bkJsdXJQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siTW90aW9uQmx1
clBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Bhc3NQb3N0
UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vcGFzc1Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvcGFzc1Bvc3RQcm9j
ZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhc3NQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX3Bhc3NQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1si
UGFzc1Bvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhc3NDdWJlUG9zdFBy
b2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9wYXNzUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIwX19bIlBhc3NDdWJlUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIx
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9j
ZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3MiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MjFfX1siUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9z
dFByb2Nlc3NNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2Vzc01hbmFnZXIgKi8gIi4vUG9zdFByb2Nlc3Nlcy9w
b3N0UHJvY2Vzc01hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3NNYW5h
Z2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcG9zdFByb2Nlc3NNYW5hZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yMl9fWyJQb3N0UHJvY2Vzc01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfcmVmcmFjdGlvblBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9yZWZyYWN0aW9uUG9zdFBy
b2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9yZWZyYWN0aW9uUG9zdFByb2Nlc3MudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiUmVmcmFjdGlvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfcmVmcmFjdGlvblBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJS
ZWZyYWN0aW9uUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
UmVuZGVyUGlwZWxpbmVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL1JlbmRlclBpcGVsaW5lL2luZGV4ICovICIuL1Bvc3RQcm9j
ZXNzZXMvUmVuZGVyUGlwZWxpbmUvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFBy
b2Nlc3NSZW5kZXJFZmZlY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9SZW5kZXJQaXBlbGluZV9p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX1siUG9zdFByb2Nlc3NSZW5kZXJFZmZl
Y3QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1JlbmRlclBpcGVsaW5lX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yNF9fWyJQb3N0UHJvY2Vzc1JlbmRlclBpcGVsaW5lIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfUmVuZGVyUGlwZWxpbmVfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI0X19bIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyU2NlbmVDb21wb25lbnQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9SZW5kZXJQaXBlbGluZV9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjRfX1siUG9zdFByb2Nlc3NSZW5kZXJQaXBlbGluZU1hbmFnZXJTY2VuZUNv
bXBvbmVudCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWZhdWx0UmVuZGVyaW5nUGlwZWxp
bmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9SZW5kZXJQaXBlbGluZV9pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjRfX1siRGVmYXVsdFJlbmRlcmluZ1BpcGVsaW5lIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkxlbnNSZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX1JlbmRlclBpcGVsaW5lX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJM
ZW5zUmVuZGVyaW5nUGlwZWxpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU1NBTzJSZW5k
ZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1JlbmRlclBpcGVsaW5lX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJTU0FPMlJlbmRlcmluZ1BpcGVsaW5lIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNTQU9SZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX1JlbmRlclBpcGVsaW5lX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yNF9fWyJTU0FPUmVuZGVyaW5nUGlwZWxpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U3RhbmRhcmRSZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1JlbmRlclBp
cGVsaW5lX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJTdGFuZGFyZFJlbmRl
cmluZ1BpcGVsaW5lIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NoYXJwZW5Q
b3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vc2hhcnBlblBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNzZXMvc2hhcnBl
blBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNoYXJwZW5Qb3N0UHJvY2VzcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NoYXJwZW5Qb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjVfX1siU2hhcnBlblBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX3N0ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdGVyZW9zY29w
aWNJbnRlcmxhY2VQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3N0ZXJlb3Njb3BpY0lu
dGVybGFjZVBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Njb3BpY0lu
dGVybGFjZVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3RlcmVvc2NvcGljSW50
ZXJsYWNlUG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19bIlN0ZXJlb3Nj
b3BpY0ludGVybGFjZVBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3RvbmVtYXBQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjdfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vdG9uZW1hcFBvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9j
ZXNzZXMvdG9uZW1hcFBvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRvbmVtYXBw
aW5nT3BlcmF0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF90b25lbWFwUG9zdFByb2Nlc3NfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzI3X19bIlRvbmVtYXBwaW5nT3BlcmF0b3IiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiVG9uZW1hcFBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfdG9uZW1hcFBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yN19fWyJUb25l
bWFwUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdm9sdW1l
dHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5n
UG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5n
UG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVm9sdW1ldHJpY0xpZ2h0U2NhdHRl
cmluZ1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdm9sdW1ldHJpY0xpZ2h0U2Nh
dHRlcmluZ1Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fWyJWb2x1bWV0
cmljTGlnaHRTY2F0dGVyaW5nUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfdnJEaXN0b3J0aW9uQ29ycmVjdGlvblBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi92ckRpc3RvcnRpb25D
b3JyZWN0aW9uUG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy92ckRpc3RvcnRpb25Db3Jy
ZWN0aW9uUG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVlJEaXN0b3J0aW9uQ29y
cmVjdGlvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfdnJEaXN0b3J0aW9uQ29y
cmVjdGlvblBvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fWyJWUkRpc3Rv
cnRpb25Db3JyZWN0aW9uUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfdnJNdWx0aXZpZXdUb1NpbmdsZXZpZXdQb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdnJNdWx0aXZpZXdUb1Np
bmdsZXZpZXdQb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3ZyTXVsdGl2aWV3VG9TaW5n
bGV2aWV3UG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVlJNdWx0aXZpZXdUb1Np
bmdsZXZpZXdQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3ZyTXVsdGl2aWV3VG9T
aW5nbGV2aWV3UG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIlZSTXVs
dGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MiXTsgfSk7CisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL21vdGlvbkJsdXJQb3N0UHJvY2Vzcy50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1Bvc3RQcm9jZXNzZXMvbW90aW9uQmx1clBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBNb3Rpb25CbHVyUG9zdFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTW90aW9uQmx1clBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBNb3Rpb25CbHVyUG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9sb2dnZXIgKi8gIi4vTWlz
Yy9sb2dnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQ
cm9jZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRz
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1JlbmRlcmluZ19nZW9tZXRyeUJ1ZmZl
clJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9SZW5kZXJpbmcvZ2VvbWV0cnlCdWZmZXJSZW5kZXJlciAqLyAiLi9SZW5kZXJp
bmcvZ2VvbWV0cnlCdWZmZXJSZW5kZXJlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9BbmltYXRpb25zX2FuaW1hdGFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL0FuaW1hdGlvbnMvYW5pbWF0YWJsZSAqLyAiLi9Bbmlt
YXRpb25zL2FuaW1hdGFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUmVuZGVy
aW5nX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vUmVuZGVyaW5nL2dlb21l
dHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudCAqLyAiLi9SZW5kZXJpbmcvZ2VvbWV0cnlC
dWZmZXJSZW5kZXJlclNjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNfbW90aW9uQmx1cl9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9tb3Rpb25CbHVyLmZyYWdt
ZW50ICovICIuL1NoYWRlcnMvbW90aW9uQmx1ci5mcmFnbWVudC50cyIpOworCisKKworCisKKwor
CisKKworLyoqCisgKiBUaGUgTW90aW9uIEJsdXIgUG9zdCBQcm9jZXNzIHdoaWNoIGJsdXJzIGFu
IGltYWdlIGJhc2VkIG9uIHRoZSBvYmplY3RzIHZlbG9jaXR5IGluIHNjZW5lLgorICogVmVsb2Np
dHkgY2FuIGJlIGFmZmVjdGVkIGJ5IGVhY2ggb2JqZWN0J3Mgcm90YXRpb24sIHBvc2l0aW9uIGFu
ZCBzY2FsZSBkZXBlbmRpbmcgb24gdGhlIHRyYW5zZm9ybWF0aW9uIHNwZWVkLgorICogQXMgYW4g
ZXhhbXBsZSwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHRvIGNyZWF0ZSB0aGUgcG9zdC1wcm9jZXNz
OgorICogIHZhciBtYiA9IG5ldyBCQUJZTE9OLk1vdGlvbkJsdXJQb3N0UHJvY2VzcygKKyAqICAg
ICAgJ21iJywgLy8gVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAqICAgICAgc2NlbmUsIC8vIFRo
ZSBzY2VuZSBjb250YWluaW5nIHRoZSBvYmplY3RzIHRvIGJsdXIgYWNjb3JkaW5nIHRvIHRoZWly
IHZlbG9jaXR5LgorICogICAgICAxLjAsIC8vIFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQgcmF0
aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisgKiAg
ICAgIGNhbWVyYSAvLyBUaGUgY2FtZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAq
ICk7CisgKiBUaGVuLCBhbGwgb2JqZWN0cyBtb3ZpbmcsIHJvdGF0aW5nIGFuZC9vciBzY2FsaW5n
IHdpbGwgYmUgYmx1cnJlZCBkZXBlbmRpbmcgb24gdGhlIHRyYW5zZm9ybWF0aW9uIHNwZWVkLgor
ICovCit2YXIgTW90aW9uQmx1clBvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0
ZW5kcyJdKE1vdGlvbkJsdXJQb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBD
cmVhdGVzIGEgbmV3IGluc3RhbmNlIE1vdGlvbkJsdXJQb3N0UHJvY2VzcworICAgICAqIEBwYXJh
bSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBlZmZlY3QuCisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBz
Y2VuZSBjb250YWluaW5nIHRoZSBvYmplY3RzIHRvIGJsdXIgYWNjb3JkaW5nIHRvIHRoZWlyIHZl
bG9jaXR5LgorICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSByZXF1aXJlZCB3aWR0aC9oZWlnaHQg
cmF0aW8gdG8gZG93bnNpemUgdG8gYmVmb3JlIGNvbXB1dGluZyB0aGUgcmVuZGVyIHBhc3MuCisg
ICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0
by4KKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIFRoZSBzYW1wbGluZyBtb2RlIHRvIGJlIHVz
ZWQgd2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChkZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBl
bmdpbmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9zdCBwcm9jZXNzIHdpbGwgYmUgYXBwbGllZC4g
KGRlZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAgICAqIEBwYXJhbSByZXVzYWJsZSBJZiB0aGUg
cG9zdCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24gdGhlIHNhbWUgZnJhbWUuIChkZWZhdWx0OiBm
YWxzZSkKKyAgICAgKiBAcGFyYW0gdGV4dHVyZVR5cGUgVHlwZSBvZiB0ZXh0dXJlcyB1c2VkIHdo
ZW4gcGVyZm9ybWluZyB0aGUgcG9zdCBwcm9jZXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFy
YW0gYmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxhdGlvbiBvZiB0aGUgc2hhZGVyIHNob3VsZCBu
b3QgYmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSB1cGRhdGVFZmZlY3QgbWV0aG9kIGNh
biBiZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRlciBhdCBhIGxhdGVyIHRpbWUuIChkZWZhdWx0
OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBNb3Rpb25CbHVyUG9zdFByb2Nlc3MobmFt
ZSwgc2NlbmUsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxl
LCB0ZXh0dXJlVHlwZSwgYmxvY2tDb21waWxhdGlvbikgeworICAgICAgICBpZiAodGV4dHVyZVR5
cGUgPT09IHZvaWQgMCkgeyB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9J
TlQ7IH0KKyAgICAgICAgaWYgKGJsb2NrQ29tcGlsYXRpb24gPT09IHZvaWQgMCkgeyBibG9ja0Nv
bXBpbGF0aW9uID0gZmFsc2U7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhp
cywgbmFtZSwgIm1vdGlvbkJsdXIiLCBbIm1vdGlvblN0cmVuZ3RoIiwgIm1vdGlvblNjYWxlIiwg
InNjcmVlblNpemUiXSwgWyJ2ZWxvY2l0eVNhbXBsZXIiXSwgb3B0aW9ucywgY2FtZXJhLCBzYW1w
bGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUsICIjZGVmaW5lIEdFT01FVFJZX1NVUFBPUlRFRFxu
I2RlZmluZSBTQU1QTEVTIDY0LjAiLCB0ZXh0dXJlVHlwZSwgdW5kZWZpbmVkLCBudWxsLCBibG9j
a0NvbXBpbGF0aW9uKSB8fCB0aGlzOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyBo
b3cgbXVjaCB0aGUgaW1hZ2UgaXMgYmx1cnJlZCBieSB0aGUgbW92ZW1lbnQuIERlZmF1bHQgdmFs
dWUgaXMgZXF1YWwgdG8gMQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubW90aW9uU3RyZW5n
dGggPSAxOworICAgICAgICBfdGhpcy5fbW90aW9uQmx1clNhbXBsZXMgPSAzMjsKKyAgICAgICAg
X3RoaXMuX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXIgPSBzY2VuZS5lbmFibGVHZW9tZXRyeUJ1ZmZl
clJlbmRlcmVyKCk7CisgICAgICAgIGlmICghX3RoaXMuX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXIp
IHsKKyAgICAgICAgICAgIC8vIEdlb21ldHJ5IGJ1ZmZlciByZW5kZXJlciBpcyBub3Qgc3VwcG9y
dGVkLiBTbywgd29yayBhcyBhIHBhc3N0aHJvdWdoLgorICAgICAgICAgICAgX01pc2NfbG9nZ2Vy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkxvZ2dlciJdLldhcm4oIk11bHRpcGxlIFJl
bmRlciBUYXJnZXQgc3VwcG9ydCBuZWVkZWQgdG8gY29tcHV0ZSBvYmplY3QgYmFzZWQgbW90aW9u
IGJsdXIiKTsKKyAgICAgICAgICAgIF90aGlzLnVwZGF0ZUVmZmVjdCgpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gR2VvbWV0cnkgYnVmZmVyIHJlbmRlcmVyIGlz
IHN1cHBvcnRlZC4KKyAgICAgICAgICAgIF90aGlzLl9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLmVu
YWJsZVZlbG9jaXR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIF90aGlzLm9uQXBwbHkgPSBmdW5jdGlv
biAoZWZmZWN0KSB7CisgICAgICAgICAgICAgICAgZWZmZWN0LnNldFZlY3RvcjIoInNjcmVlblNp
emUiLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IlZlY3RvcjIiXShfdGhpcy53aWR0aCwgX3RoaXMuaGVpZ2h0KSk7CisgICAgICAgICAgICAgICAg
ZWZmZWN0LnNldEZsb2F0KCJtb3Rpb25TY2FsZSIsIHNjZW5lLmdldEFuaW1hdGlvblJhdGlvKCkp
OworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgibW90aW9uU3RyZW5ndGgiLCBfdGhp
cy5tb3Rpb25TdHJlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9nZW9tZXRyeUJ1
ZmZlclJlbmRlcmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB2ZWxvY2l0eUluZGV4ID0g
X3RoaXMuX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXIuZ2V0VGV4dHVyZUluZGV4KF9SZW5kZXJpbmdf
Z2VvbWV0cnlCdWZmZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJHZW9t
ZXRyeUJ1ZmZlclJlbmRlcmVyIl0uVkVMT0NJVFlfVEVYVFVSRV9UWVBFKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWZmZWN0LnNldFRleHR1cmUoInZlbG9jaXR5U2FtcGxlciIsIF90aGlzLl9nZW9t
ZXRyeUJ1ZmZlclJlbmRlcmVyLmdldEdCdWZmZXIoKS50ZXh0dXJlc1t2ZWxvY2l0eUluZGV4XSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3Rpb25CbHVy
UG9zdFByb2Nlc3MucHJvdG90eXBlLCAibW90aW9uQmx1clNhbXBsZXMiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBhcmUgdXNlZCBmb3Ig
bW90aW9uIGJsdXIgcXVhbGl0eS4gRGVmYXVsdCB2YWx1ZSBpcyBlcXVhbCB0byAzMgorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fbW90aW9uQmx1clNhbXBsZXM7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAg
KiBTZXRzIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBiZSB1c2VkIGZvciBtb3Rpb24gYmx1
ciBxdWFsaXR5CisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzYW1wbGVzKSB7
CisgICAgICAgICAgICB0aGlzLl9tb3Rpb25CbHVyU2FtcGxlcyA9IHNhbXBsZXM7CisgICAgICAg
ICAgICBpZiAodGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlcikgeworICAgICAgICAgICAgICAg
IHRoaXMudXBkYXRlRWZmZWN0KCIjZGVmaW5lIEdFT01FVFJZX1NVUFBPUlRFRFxuI2RlZmluZSBT
QU1QTEVTICIgKyBzYW1wbGVzLnRvRml4ZWQoMSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBFeGNsdWRlcyB0aGUgZ2l2ZW4gc2tpbm5lZCBtZXNo
IGZyb20gY29tcHV0aW5nIGJvbmVzIHZlbG9jaXRpZXMuCisgICAgICogQ29tcHV0aW5nIGJvbmVz
IHZlbG9jaXRpZXMgY2FuIGhhdmUgYSBjb3N0IGFuZCB0aGF0IGNvc3QuIFRoZSBjb3N0IGNhbiBi
ZSBzYXZlZCBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIGJ5IHBhc3NpbmcgdGhlIHNraW5u
ZWQgbWVzaCByZWZlcmVuY2UgdG8gaWdub3JlLgorICAgICAqIEBwYXJhbSBza2lubmVkTWVzaCBU
aGUgbWVzaCBjb250YWluaW5nIHRoZSBza2VsZXRvbiB0byBpZ25vcmUgd2hlbiBjb21wdXRpbmcg
dGhlIHZlbG9jaXR5IG1hcC4KKyAgICAgKi8KKyAgICBNb3Rpb25CbHVyUG9zdFByb2Nlc3MucHJv
dG90eXBlLmV4Y2x1ZGVTa2lubmVkTWVzaCA9IGZ1bmN0aW9uIChza2lubmVkTWVzaCkgeworICAg
ICAgICBpZiAodGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlciAmJiBza2lubmVkTWVzaC5za2Vs
ZXRvbikgeworICAgICAgICAgICAgdGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlci5leGNsdWRl
ZFNraW5uZWRNZXNoZXNGcm9tVmVsb2NpdHkucHVzaChza2lubmVkTWVzaCk7CisgICAgICAgIH0K
KyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIHNraW5uZWQgbWVzaCBm
cm9tIHRoZSBleGNsdWRlZCBtZXNoZXMgdG8gaW50ZWdyYXRlIGJvbmVzIHZlbG9jaXRpZXMgd2hp
bGUgcmVuZGVyaW5nIHRoZSB2ZWxvY2l0eSBtYXAuCisgICAgICogQHBhcmFtIHNraW5uZWRNZXNo
IFRoZSBtZXNoIGNvbnRhaW5pbmcgdGhlIHNrZWxldG9uIHRoYXQgaGFzIGJlZW4gaWdub3JlZCBw
cmV2aW91c2x5LgorICAgICAqIEBzZWUgZXhjbHVkZVNraW5uZWRNZXNoIHRvIGV4Y2x1ZGUgYSBz
a2lubmVkIG1lc2ggZnJvbSBib25lcyB2ZWxvY2l0eSBjb21wdXRhdGlvbi4KKyAgICAgKi8KKyAg
ICBNb3Rpb25CbHVyUG9zdFByb2Nlc3MucHJvdG90eXBlLnJlbW92ZUV4Y2x1ZGVkU2tpbm5lZE1l
c2ggPSBmdW5jdGlvbiAoc2tpbm5lZE1lc2gpIHsKKyAgICAgICAgaWYgKHRoaXMuX2dlb21ldHJ5
QnVmZmVyUmVuZGVyZXIgJiYgc2tpbm5lZE1lc2guc2tlbGV0b24pIHsKKyAgICAgICAgICAgIHZh
ciBpbmRleCA9IHRoaXMuX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXIuZXhjbHVkZWRTa2lubmVkTWVz
aGVzRnJvbVZlbG9jaXR5LmluZGV4T2Yoc2tpbm5lZE1lc2gpOworICAgICAgICAgICAgaWYgKGlu
ZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2dlb21ldHJ5QnVmZmVyUmVuZGVy
ZXIuZXhjbHVkZWRTa2lubmVkTWVzaGVzRnJvbVZlbG9jaXR5LnNwbGljZShpbmRleCwgMSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2Vz
IHRoZSBwb3N0IHByb2Nlc3MuCisgICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2FtZXJhIHRvIGRp
c3Bvc2UgdGhlIHBvc3QgcHJvY2VzcyBvbi4KKyAgICAgKi8KKyAgICBNb3Rpb25CbHVyUG9zdFBy
b2Nlc3MucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAgICAgIGlm
ICh0aGlzLl9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyKSB7CisgICAgICAgICAgICAvLyBDbGVhciBw
cmV2aW91cyB0cmFuc2Zvcm1hdGlvbiBtYXRyaWNlcyBkaWN0aW9uYXJ5IHVzZWQgdG8gY29tcHV0
ZSBvYmplY3RzIHZlbG9jaXRpZXMKKyAgICAgICAgICAgIHRoaXMuX2dlb21ldHJ5QnVmZmVyUmVu
ZGVyZXIuX3ByZXZpb3VzVHJhbnNmb3JtYXRpb25NYXRyaWNlcyA9IHt9OworICAgICAgICAgICAg
dGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlci5fcHJldmlvdXNCb25lc1RyYW5zZm9ybWF0aW9u
TWF0cmljZXMgPSB7fTsKKyAgICAgICAgICAgIHRoaXMuX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXIu
ZXhjbHVkZWRTa2lubmVkTWVzaGVzRnJvbVZlbG9jaXR5ID0gW107CisgICAgICAgIH0KKyAgICAg
ICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcywgY2FtZXJhKTsKKyAgICB9Owor
ICAgIHJldHVybiBNb3Rpb25CbHVyUG9zdFByb2Nlc3M7Cit9KF9wb3N0UHJvY2Vzc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJQb3N0UHJvY2VzcyJdKSk7CisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9wYXNzUG9zdFByb2Nlc3MudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0UHJv
Y2Vzc2VzL3Bhc3NQb3N0UHJvY2Vzcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUGFzc1Bvc3RQcm9j
ZXNzLCBQYXNzQ3ViZVBvc3RQcm9jZXNzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBhc3NQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUGFzc1Bvc3RQcm9j
ZXNzOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhc3NDdWJlUG9zdFByb2Nlc3MiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFBhc3NDdWJlUG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vcG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0
UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2VuZ2luZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
RW5naW5lcy9lbmdpbmUgKi8gIi4vRW5naW5lcy9lbmdpbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfU2hhZGVyc19wYXNzX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL3Bhc3MuZnJhZ21lbnQg
Ki8gIi4vU2hhZGVycy9wYXNzLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNfcGFzc0N1YmVfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvcGFzc0N1YmUuZnJhZ21lbnQg
Ki8gIi4vU2hhZGVycy9wYXNzQ3ViZS5mcmFnbWVudC50cyIpOworCisKKworCisKKworLyoqCisg
KiBQYXNzUG9zdFByb2Nlc3Mgd2hpY2ggcHJvZHVjZXMgYW4gb3V0cHV0IHRoZSBzYW1lIGFzIGl0
J3MgaW5wdXQKKyAqLwordmFyIFBhc3NQb3N0UHJvY2VzcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJf
X2V4dGVuZHMiXShQYXNzUG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyB0aGUgUGFzc1Bvc3RQcm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2Yg
dGhlIGVmZmVjdC4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgcmVxdWlyZWQgd2lkdGgvaGVp
Z2h0IHJhdGlvIHRvIGRvd25zaXplIHRvIGJlZm9yZSBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNz
LgorICAgICAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0byBhcHBseSB0aGUgcmVuZGVyIHBh
c3MgdG8uCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBi
ZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBwYXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFy
YW0gZW5naW5lIFRoZSBlbmdpbmUgd2hpY2ggdGhlIHBvc3QgcHJvY2VzcyB3aWxsIGJlIGFwcGxp
ZWQuIChkZWZhdWx0OiBjdXJyZW50IGVuZ2luZSkKKyAgICAgKiBAcGFyYW0gcmV1c2FibGUgSWYg
dGhlIHBvc3QgcHJvY2VzcyBjYW4gYmUgcmV1c2VkIG9uIHRoZSBzYW1lIGZyYW1lLiAoZGVmYXVs
dDogZmFsc2UpCisgICAgICogQHBhcmFtIHRleHR1cmVUeXBlIFRoZSB0eXBlIG9mIHRleHR1cmUg
dG8gYmUgdXNlZCB3aGVuIHBlcmZvcm1pbmcgdGhlIHBvc3QgcHJvY2Vzc2luZy4KKyAgICAgKiBA
cGFyYW0gYmxvY2tDb21waWxhdGlvbiBJZiBjb21waWxhdGlvbiBvZiB0aGUgc2hhZGVyIHNob3Vs
ZCBub3QgYmUgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSB1cGRhdGVFZmZlY3QgbWV0aG9k
IGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgdGhlIHNoYWRlciBhdCBhIGxhdGVyIHRpbWUuIChkZWZh
dWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBQYXNzUG9zdFByb2Nlc3MobmFtZSwg
b3B0aW9ucywgY2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUsIHRleHR1cmVU
eXBlLCBibG9ja0NvbXBpbGF0aW9uKSB7CisgICAgICAgIGlmIChjYW1lcmEgPT09IHZvaWQgMCkg
eyBjYW1lcmEgPSBudWxsOyB9CisgICAgICAgIGlmICh0ZXh0dXJlVHlwZSA9PT0gdm9pZCAwKSB7
IHRleHR1cmVUeXBlID0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIkNvbnN0YW50cyJdLlRFWFRVUkVUWVBFX1VOU0lHTkVEX0lOVDsgfQorICAgICAgICBp
ZiAoYmxvY2tDb21waWxhdGlvbiA9PT0gdm9pZCAwKSB7IGJsb2NrQ29tcGlsYXRpb24gPSBmYWxz
ZTsgfQorICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwgInBhc3MiLCBudWxs
LCBudWxsLCBvcHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwg
dW5kZWZpbmVkLCB0ZXh0dXJlVHlwZSwgdW5kZWZpbmVkLCBudWxsLCBibG9ja0NvbXBpbGF0aW9u
KSB8fCB0aGlzOworICAgIH0KKyAgICByZXR1cm4gUGFzc1Bvc3RQcm9jZXNzOworfShfcG9zdFBy
b2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUG9zdFByb2Nlc3MiXSkpOworCisv
KioKKyAqIFBhc3NDdWJlUG9zdFByb2Nlc3Mgd2hpY2ggcHJvZHVjZXMgYW4gb3V0cHV0IHRoZSBz
YW1lIGFzIGl0J3MgaW5wdXQgKHdoaWNoIG11c3QgYmUgYSBjdWJlIHRleHR1cmUpCisgKi8KK3Zh
ciBQYXNzQ3ViZVBvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikg
eworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFBh
c3NDdWJlUG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0aGUg
UGFzc0N1YmVQb3N0UHJvY2VzcworICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBl
ZmZlY3QuCisgICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIHJlcXVpcmVkIHdpZHRoL2hlaWdodCBy
YXRpbyB0byBkb3duc2l6ZSB0byBiZWZvcmUgY29tcHV0aW5nIHRoZSByZW5kZXIgcGFzcy4KKyAg
ICAgKiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gYXBwbHkgdGhlIHJlbmRlciBwYXNzIHRv
LgorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgVGhlIHNhbXBsaW5nIG1vZGUgdG8gYmUgdXNl
ZCB3aGVuIGNvbXB1dGluZyB0aGUgcGFzcy4gKGRlZmF1bHQ6IDApCisgICAgICogQHBhcmFtIGVu
Z2luZSBUaGUgZW5naW5lIHdoaWNoIHRoZSBwb3N0IHByb2Nlc3Mgd2lsbCBiZSBhcHBsaWVkLiAo
ZGVmYXVsdDogY3VycmVudCBlbmdpbmUpCisgICAgICogQHBhcmFtIHJldXNhYmxlIElmIHRoZSBw
b3N0IHByb2Nlc3MgY2FuIGJlIHJldXNlZCBvbiB0aGUgc2FtZSBmcmFtZS4gKGRlZmF1bHQ6IGZh
bHNlKQorICAgICAqIEBwYXJhbSB0ZXh0dXJlVHlwZSBUaGUgdHlwZSBvZiB0ZXh0dXJlIHRvIGJl
IHVzZWQgd2hlbiBwZXJmb3JtaW5nIHRoZSBwb3N0IHByb2Nlc3NpbmcuCisgICAgICogQHBhcmFt
IGJsb2NrQ29tcGlsYXRpb24gSWYgY29tcGlsYXRpb24gb2YgdGhlIHNoYWRlciBzaG91bGQgbm90
IGJlIGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLiBUaGUgdXBkYXRlRWZmZWN0IG1ldGhvZCBjYW4g
YmUgdXNlZCB0byBjb21waWxlIHRoZSBzaGFkZXIgYXQgYSBsYXRlciB0aW1lLiAoZGVmYXVsdDog
ZmFsc2UpCisgICAgICovCisgICAgZnVuY3Rpb24gUGFzc0N1YmVQb3N0UHJvY2VzcyhuYW1lLCBv
cHRpb25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgdGV4dHVyZVR5
cGUsIGJsb2NrQ29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKGNhbWVyYSA9PT0gdm9pZCAwKSB7
IGNhbWVyYSA9IG51bGw7IH0KKyAgICAgICAgaWYgKHRleHR1cmVUeXBlID09PSB2b2lkIDApIHsg
dGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAgIGlm
IChibG9ja0NvbXBpbGF0aW9uID09PSB2b2lkIDApIHsgYmxvY2tDb21waWxhdGlvbiA9IGZhbHNl
OyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsICJwYXNzQ3Vi
ZSIsIG51bGwsIG51bGwsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJl
dXNhYmxlLCAiI2RlZmluZSBQT1NJVElWRVgiLCB0ZXh0dXJlVHlwZSwgdW5kZWZpbmVkLCBudWxs
LCBibG9ja0NvbXBpbGF0aW9uKSB8fCB0aGlzOworICAgICAgICBfdGhpcy5fZmFjZSA9IDA7Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBh
c3NDdWJlUG9zdFByb2Nlc3MucHJvdG90eXBlLCAiZmFjZSIsIHsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdldHMgb3Igc2V0cyB0aGUgY3ViZSBmYWNlIHRvIGRpc3BsYXkuCisgICAgICAgICAq
ICAqIDAgaXMgK1gKKyAgICAgICAgICogICogMSBpcyAtWAorICAgICAgICAgKiAgKiAyIGlzICtZ
CisgICAgICAgICAqICAqIDMgaXMgLVkKKyAgICAgICAgICogICogNCBpcyArWgorICAgICAgICAg
KiAgKiA1IGlzIC1aCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9mYWNlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDUp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aGlzLl9mYWNlID0gdmFsdWU7CisgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX2ZhY2UpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWZm
ZWN0KCIjZGVmaW5lIFBPU0lUSVZFWCIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWZm
ZWN0KCIjZGVmaW5lIE5FR0FUSVZFWCIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWZm
ZWN0KCIjZGVmaW5lIFBPU0lUSVZFWSIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWZm
ZWN0KCIjZGVmaW5lIE5FR0FUSVZFWSIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWZm
ZWN0KCIjZGVmaW5lIFBPU0lUSVZFWiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWZm
ZWN0KCIjZGVmaW5lIE5FR0FUSVZFWiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgcmV0dXJuIFBhc3NDdWJlUG9zdFBy
b2Nlc3M7Cit9KF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQb3N0
UHJvY2VzcyJdKSk7CisKK19FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJFbmdpbmUiXS5fUmVzY2FsZVBvc3RQcm9jZXNzRmFjdG9yeSA9IGZ1bmN0aW9uIChlbmdp
bmUpIHsKKyAgICByZXR1cm4gbmV3IFBhc3NQb3N0UHJvY2VzcygicmVzY2FsZSIsIDEsIG51bGws
IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFbmdpbmUiXS5U
RVhUVVJFX0JJTElORUFSX1NBTVBMSU5HTU9ERSwgZW5naW5lLCBmYWxzZSwgX0VuZ2luZXNfZW5n
aW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZSJdLlRFWFRVUkVUWVBFX1VO
U0lHTkVEX0lOVCk7Cit9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2Vz
L3Bvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IFBvc3RQcm9jZXNzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBv
c3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQb3N0UHJvY2VzczsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01pc2Nfc21hcnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9zbWFydEFycmF5ICovICIu
L01pc2Mvc21hcnRBcnJheS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29i
c2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVj
dG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2Nv
bnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX3Bvc3Rwcm9j
ZXNzX3ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vU2hhZGVycy9wb3N0cHJvY2Vzcy52ZXJ0ZXggKi8gIi4vU2hhZGVycy9wb3N0
cHJvY2Vzcy52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19l
bmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL0VuZ2luZXMvZW5naW5lICovICIuL0VuZ2luZXMvZW5naW5lLnRzIik7CisKKworCisK
KworCisvKioKKyAqIFBvc3RQcm9jZXNzIGNhbiBiZSB1c2VkIHRvIGFwcGx5IGEgc2hhZGVyIHRv
IGEgdGV4dHVyZSBhZnRlciBpdCBoYXMgYmVlbiByZW5kZXJlZAorICogU2VlIGh0dHBzOi8vZG9j
LmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfcG9zdHByb2Nlc3NlcworICovCit2YXIg
UG9zdFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBQb3N0UHJvY2VzcworICAgICAqIEBwYXJhbSBuYW1l
IFRoZSBuYW1lIG9mIHRoZSBQb3N0UHJvY2Vzcy4KKyAgICAgKiBAcGFyYW0gZnJhZ21lbnRVcmwg
VGhlIHVybCBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyIHRvIGJlIHVzZWQuCisgICAgICogQHBhcmFt
IHBhcmFtZXRlcnMgQXJyYXkgb2YgdGhlIG5hbWVzIG9mIHVuaWZvcm0gbm9uLXNhbXBsZXIyRCB2
YXJpYWJsZXMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgc2hhZGVyLgorICAgICAqIEBwYXJh
bSBzYW1wbGVycyBBcnJheSBvZiB0aGUgbmFtZXMgb2YgdW5pZm9ybSBzYW1wbGVyMkQgdmFyaWFi
bGVzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHNoYWRlci4KKyAgICAgKiBAcGFyYW0gb3B0
aW9ucyBUaGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlvIHRvIGRvd25zaXplIHRvIGJlZm9y
ZSBjb21wdXRpbmcgdGhlIHJlbmRlciBwYXNzLiAoVXNlIDEuMCBmb3IgZnVsbCBzaXplKQorICAg
ICAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSB0byBhcHBseSB0aGUgcmVuZGVyIHBhc3MgdG8u
CisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBUaGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2Vk
IHdoZW4gY29tcHV0aW5nIHRoZSBwYXNzLiAoZGVmYXVsdDogMCkKKyAgICAgKiBAcGFyYW0gZW5n
aW5lIFRoZSBlbmdpbmUgd2hpY2ggdGhlIHBvc3QgcHJvY2VzcyB3aWxsIGJlIGFwcGxpZWQuIChk
ZWZhdWx0OiBjdXJyZW50IGVuZ2luZSkKKyAgICAgKiBAcGFyYW0gcmV1c2FibGUgSWYgdGhlIHBv
c3QgcHJvY2VzcyBjYW4gYmUgcmV1c2VkIG9uIHRoZSBzYW1lIGZyYW1lLiAoZGVmYXVsdDogZmFs
c2UpCisgICAgICogQHBhcmFtIGRlZmluZXMgU3RyaW5nIG9mIGRlZmluZXMgdGhhdCB3aWxsIGJl
IHNldCB3aGVuIHJ1bm5pbmcgdGhlIGZyYWdtZW50IHNoYWRlci4gKGRlZmF1bHQ6IG51bGwpCisg
ICAgICogQHBhcmFtIHRleHR1cmVUeXBlIFR5cGUgb2YgdGV4dHVyZXMgdXNlZCB3aGVuIHBlcmZv
cm1pbmcgdGhlIHBvc3QgcHJvY2Vzcy4gKGRlZmF1bHQ6IDApCisgICAgICogQHBhcmFtIHZlcnRl
eFVybCBUaGUgdXJsIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyIHRvIGJlIHVzZWQuIChkZWZhdWx0OiAi
cG9zdHByb2Nlc3MiKQorICAgICAqIEBwYXJhbSBpbmRleFBhcmFtZXRlcnMgVGhlIGluZGV4IHBh
cmFtZXRlcnMgdG8gYmUgdXNlZCBmb3IgYmFieWxvbnMgaW5jbHVkZSBzeW50YXggIiNpbmNsdWRl
PGtlcm5lbEJsdXJWYXJ5aW5nRGVjbGFyYXRpb24+WzAuLnZhcnlpbmdDb3VudF0iLiAoZGVmYXVs
dDogdW5kZWZpbmVkKSBTZWUgdXNhZ2UgaW4gYmFieWxvbi5ibHVyUG9zdFByb2Nlc3MudHMgYW5k
IGtlcm5lbEJsdXIudmVydGV4LmZ4CisgICAgICogQHBhcmFtIGJsb2NrQ29tcGlsYXRpb24gSWYg
dGhlIHNoYWRlciBzaG91bGQgbm90IGJlIGNvbXBpbGVkIGltZWRpYXRseS4gKGRlZmF1bHQ6IGZh
bHNlKQorICAgICAqLworICAgIGZ1bmN0aW9uIFBvc3RQcm9jZXNzKAorICAgIC8qKiBOYW1lIG9m
IHRoZSBQb3N0UHJvY2Vzcy4gKi8KKyAgICBuYW1lLCBmcmFnbWVudFVybCwgcGFyYW1ldGVycywg
c2FtcGxlcnMsIG9wdGlvbnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxl
LCBkZWZpbmVzLCB0ZXh0dXJlVHlwZSwgdmVydGV4VXJsLCBpbmRleFBhcmFtZXRlcnMsIGJsb2Nr
Q29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKHNhbXBsaW5nTW9kZSA9PT0gdm9pZCAwKSB7IHNh
bXBsaW5nTW9kZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fWyJDb25zdGFudHMiXS5URVhUVVJFX05FQVJFU1RfU0FNUExJTkdNT0RFOyB9CisgICAgICAg
IGlmIChkZWZpbmVzID09PSB2b2lkIDApIHsgZGVmaW5lcyA9IG51bGw7IH0KKyAgICAgICAgaWYg
KHRleHR1cmVUeXBlID09PSB2b2lkIDApIHsgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFu
dHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVf
VU5TSUdORURfSU5UOyB9CisgICAgICAgIGlmICh2ZXJ0ZXhVcmwgPT09IHZvaWQgMCkgeyB2ZXJ0
ZXhVcmwgPSAicG9zdHByb2Nlc3MiOyB9CisgICAgICAgIGlmIChibG9ja0NvbXBpbGF0aW9uID09
PSB2b2lkIDApIHsgYmxvY2tDb21waWxhdGlvbiA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMubmFt
ZSA9IG5hbWU7CisgICAgICAgIC8qKgorICAgICAgICAqIFdpZHRoIG9mIHRoZSB0ZXh0dXJlIHRv
IGFwcGx5IHRoZSBwb3N0IHByb2Nlc3Mgb24KKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy53aWR0
aCA9IC0xOworICAgICAgICAvKioKKyAgICAgICAgKiBIZWlnaHQgb2YgdGhlIHRleHR1cmUgdG8g
YXBwbHkgdGhlIHBvc3QgcHJvY2VzcyBvbgorICAgICAgICAqLworICAgICAgICB0aGlzLmhlaWdo
dCA9IC0xOworICAgICAgICAvKioKKyAgICAgICAgKiBJbnRlcm5hbCwgcmVmZXJlbmNlIHRvIHRo
ZSBsb2NhdGlvbiB3aGVyZSB0aGlzIHBvc3Rwcm9jZXNzIHdhcyBvdXRwdXQgdG8uIChUeXBpY2Fs
bHkgdGhlIHRleHR1cmUgb24gdGhlIG5leHQgcG9zdHByb2Nlc3MgaW4gdGhlIGNoYWluKQorICAg
ICAgICAqIEBoaWRkZW4KKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZSA9
IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAqIElmIHRoZSBidWZmZXIgbmVlZHMgdG8gYmUg
Y2xlYXJlZCBiZWZvcmUgYXBwbHlpbmcgdGhlIHBvc3QgcHJvY2Vzcy4gKGRlZmF1bHQ6IHRydWUp
CisgICAgICAgICogU2hvdWxkIGJlIHNldCB0byBmYWxzZSBpZiBzaGFkZXIgd2lsbCBvdmVyd3Jp
dGUgYWxsIHByZXZpb3VzIHBpeGVscy4KKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5hdXRvQ2xl
YXIgPSB0cnVlOworICAgICAgICAvKioKKyAgICAgICAgKiBUeXBlIG9mIGFscGhhIG1vZGUgdG8g
dXNlIHdoZW4gcGVyZm9ybWluZyB0aGUgcG9zdCBwcm9jZXNzIChkZWZhdWx0OiBFbmdpbmUuQUxQ
SEFfRElTQUJMRSkKKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5hbHBoYU1vZGUgPSBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQ29uc3RhbnRzIl0uQUxQ
SEFfRElTQUJMRTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW5pbWF0aW9ucyB0byBiZSB1c2Vk
IGZvciB0aGUgcG9zdCBwcm9jZXNzaW5nCisgICAgICAgICovCisgICAgICAgIHRoaXMuYW5pbWF0
aW9ucyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogRW5hYmxlIFBpeGVs
IFBlcmZlY3QgbW9kZSB3aGVyZSB0ZXh0dXJlIGlzIG5vdCBzY2FsZWQgdG8gYmUgcG93ZXIgb2Yg
Mi4KKyAgICAgICAgICogQ2FuIG9ubHkgYmUgdXNlZCBvbiBhIHNpbmdsZSBwb3N0cHJvY2VzcyBv
ciBvbiB0aGUgbGFzdCBvbmUgb2YgYSBjaGFpbi4gKGRlZmF1bHQ6IGZhbHNlKQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5lbmFibGVQaXhlbFBlcmZlY3RNb2RlID0gZmFsc2U7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBGb3JjZSB0aGUgcG9zdHByb2Nlc3MgdG8gYmUgYXBwbGllZCB3aXRo
b3V0IHRha2luZyBpbiBhY2NvdW50IHZpZXdwb3J0CisgICAgICAgICAqLworICAgICAgICB0aGlz
LmZvcmNlRnVsbHNjcmVlblZpZXdwb3J0ID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFNjYWxlIG1vZGUgZm9yIHRoZSBwb3N0IHByb2Nlc3MgKGRlZmF1bHQ6IEVuZ2luZS5TQ0FMRU1P
REVfRkxPT1IpCisgICAgICAgICAqCisgICAgICAgICAqIHwgVmFsdWUgfCBUeXBlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uIHwKKyAgICAgICAgICogfCAtLS0t
LSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfAor
ICAgICAgICAgKiB8IDEgICAgIHwgU0NBTEVNT0RFX0ZMT09SICAgICAgICAgICAgICAgICAgICAg
fCBbZW5naW5lLnNjYWxlbW9kZV9mbG9vcl0oaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2FwaS9j
bGFzc2VzL2JhYnlsb24uZW5naW5lI3NjYWxlbW9kZV9mbG9vcikgfAorICAgICAgICAgKiB8IDIg
ICAgIHwgU0NBTEVNT0RFX05FQVJFU1QgICAgICAgICAgICAgICAgICAgfCBbZW5naW5lLnNjYWxl
bW9kZV9uZWFyZXN0XShodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYXBpL2NsYXNzZXMvYmFieWxv
bi5lbmdpbmUjc2NhbGVtb2RlX25lYXJlc3QpIHwKKyAgICAgICAgICogfCAzICAgICB8IFNDQUxF
TU9ERV9DRUlMSU5HICAgICAgICAgICAgICAgICAgIHwgW2VuZ2luZS5zY2FsZW1vZGVfY2VpbGlu
Z10oaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2FwaS9jbGFzc2VzL2JhYnlsb24uZW5naW5lI3Nj
YWxlbW9kZV9jZWlsaW5nKSB8CisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICB0aGlz
LnNjYWxlTW9kZSA9IF9FbmdpbmVzX2VuZ2luZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJFbmdpbmUiXS5TQ0FMRU1PREVfRkxPT1I7CisgICAgICAgIC8qKgorICAgICAgICAqIEZvcmNl
IHRleHR1cmVzIHRvIGJlIGEgcG93ZXIgb2YgdHdvIChkZWZhdWx0OiBmYWxzZSkKKyAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5hbHdheXNGb3JjZVBPVCA9IGZhbHNlOworICAgICAgICB0aGlzLl9z
YW1wbGVzID0gMTsKKyAgICAgICAgLyoqCisgICAgICAgICogTW9kaWZ5IHRoZSBzY2FsZSBvZiB0
aGUgcG9zdCBwcm9jZXNzIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSB2aWV3cG9ydCAoZGVmYXVsdDog
ZmFsc2UpCisgICAgICAgICovCisgICAgICAgIHRoaXMuYWRhcHRTY2FsZVRvQ3VycmVudFZpZXdw
b3J0ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3JldXNhYmxlID0gZmFsc2U7CisgICAgICAgIC8q
KgorICAgICAgICAqIFNtYXJ0IGFycmF5IG9mIGlucHV0IGFuZCBvdXRwdXQgdGV4dHVyZXMgZm9y
IHRoZSBwb3N0IHByb2Nlc3MuCisgICAgICAgICogQGhpZGRlbgorICAgICAgICAqLworICAgICAg
ICB0aGlzLl90ZXh0dXJlcyA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlNtYXJ0QXJyYXkiXSgyKTsKKyAgICAgICAgLyoqCisgICAgICAgICogVGhl
IGluZGV4IGluIF90ZXh0dXJlcyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBvdXRwdXQgdGV4dHVy
ZS4KKyAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICovCisgICAgICAgIHRoaXMuX2N1cnJlbnRS
ZW5kZXJUZXh0dXJlSW5kID0gMDsKKyAgICAgICAgdGhpcy5fc2NhbGVSYXRpbyA9IG5ldyBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMiJdKDEs
IDEpOworICAgICAgICB0aGlzLl90ZXhlbFNpemUgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVjdG9yMiJdLlplcm8oKTsKKyAgICAgICAgLy8gRXZl
bnRzCisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBw
b3N0cHJvY2VzcyBpcyBhY3RpdmF0ZWQuCisgICAgICAgICovCisgICAgICAgIHRoaXMub25BY3Rp
dmF0ZU9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZl
bnQgdHJpZ2dlcmVkIHdoZW4gdGhlIHBvc3Rwcm9jZXNzIGNoYW5nZXMgaXRzIHNpemUuCisgICAg
ICAgICovCisgICAgICAgIHRoaXMub25TaXplQ2hhbmdlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nf
b2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsK
KyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIHBvc3Rw
cm9jZXNzIGFwcGxpZXMgaXRzIGVmZmVjdC4KKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkFw
cGx5T2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVu
dCB0cmlnZ2VyZWQgYmVmb3JlIHJlbmRlcmluZyB0aGUgcG9zdHByb2Nlc3MKKyAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGFmdGVyIHJlbmRlcmluZyB0aGUg
cG9zdHByb2Nlc3MKKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkFmdGVyUmVuZGVyT2JzZXJ2
YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
Ik9ic2VydmFibGUiXSgpOworICAgICAgICBpZiAoY2FtZXJhICE9IG51bGwpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2NhbWVyYSA9IGNhbWVyYTsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lID0gY2Ft
ZXJhLmdldFNjZW5lKCk7CisgICAgICAgICAgICBjYW1lcmEuYXR0YWNoUG9zdFByb2Nlc3ModGhp
cyk7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKTsK
KyAgICAgICAgICAgIHRoaXMuX3NjZW5lLnBvc3RQcm9jZXNzZXMucHVzaCh0aGlzKTsKKyAgICAg
ICAgICAgIHRoaXMudW5pcXVlSWQgPSB0aGlzLl9zY2VuZS5nZXRVbmlxdWVJZCgpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGVuZ2luZSkgeworICAgICAgICAgICAgdGhpcy5fZW5naW5l
ID0gZW5naW5lOworICAgICAgICAgICAgdGhpcy5fZW5naW5lLnBvc3RQcm9jZXNzZXMucHVzaCh0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9uczsKKyAgICAg
ICAgdGhpcy5yZW5kZXJUYXJnZXRTYW1wbGluZ01vZGUgPSBzYW1wbGluZ01vZGUgPyBzYW1wbGlu
Z01vZGUgOiBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
Q29uc3RhbnRzIl0uVEVYVFVSRV9ORUFSRVNUX1NBTVBMSU5HTU9ERTsKKyAgICAgICAgdGhpcy5f
cmV1c2FibGUgPSByZXVzYWJsZSB8fCBmYWxzZTsKKyAgICAgICAgdGhpcy5fdGV4dHVyZVR5cGUg
PSB0ZXh0dXJlVHlwZTsKKyAgICAgICAgdGhpcy5fc2FtcGxlcnMgPSBzYW1wbGVycyB8fCBbXTsK
KyAgICAgICAgdGhpcy5fc2FtcGxlcnMucHVzaCgidGV4dHVyZVNhbXBsZXIiKTsKKyAgICAgICAg
dGhpcy5fZnJhZ21lbnRVcmwgPSBmcmFnbWVudFVybDsKKyAgICAgICAgdGhpcy5fdmVydGV4VXJs
ID0gdmVydGV4VXJsOworICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCBb
XTsKKyAgICAgICAgdGhpcy5fcGFyYW1ldGVycy5wdXNoKCJzY2FsZSIpOworICAgICAgICB0aGlz
Ll9pbmRleFBhcmFtZXRlcnMgPSBpbmRleFBhcmFtZXRlcnM7CisgICAgICAgIGlmICghYmxvY2tD
b21waWxhdGlvbikgeworICAgICAgICAgICAgdGhpcy51cGRhdGVFZmZlY3QoZGVmaW5lcyk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvc3RQcm9jZXNzLnBy
b3RvdHlwZSwgInNhbXBsZXMiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIE51bWJlciBvZiBz
YW1wbGUgdGV4dHVyZXMgKGRlZmF1bHQ6IDEpCisgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NhbXBsZXM7CisgICAgICAgIH0s
CisgICAgICAgIHNldDogZnVuY3Rpb24gKG4pIHsKKyAgICAgICAgICAgIHZhciBfdGhpcyA9IHRo
aXM7CisgICAgICAgICAgICB0aGlzLl9zYW1wbGVzID0gTWF0aC5taW4obiwgdGhpcy5fZW5naW5l
LmdldENhcHMoKS5tYXhNU0FBU2FtcGxlcyk7CisgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcy5m
b3JFYWNoKGZ1bmN0aW9uICh0ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUu
c2FtcGxlcyAhPT0gX3RoaXMuX3NhbXBsZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMu
X2VuZ2luZS51cGRhdGVSZW5kZXJUYXJnZXRUZXh0dXJlU2FtcGxlQ291bnQodGV4dHVyZSwgX3Ro
aXMuX3NhbXBsZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBmcmFnbWVudCB1cmwgb3Ig
c2hhZGVyIG5hbWUgdXNlZCBpbiB0aGUgcG9zdCBwcm9jZXNzLgorICAgICAqIEByZXR1cm5zIHRo
ZSBmcmFnbWVudCB1cmwgb3IgbmFtZSBpbiB0aGUgc2hhZGVyIHN0b3JlLgorICAgICAqLworICAg
IFBvc3RQcm9jZXNzLnByb3RvdHlwZS5nZXRFZmZlY3ROYW1lID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5fZnJhZ21lbnRVcmw7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoUG9zdFByb2Nlc3MucHJvdG90eXBlLCAib25BY3RpdmF0ZSIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICogQSBmdW5jdGlvbiB0aGF0IGlzIGFkZGVkIHRvIHRoZSBvbkFjdGl2YXRl
T2JzZXJ2YWJsZQorICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjYWxsYmFjaykg
eworICAgICAgICAgICAgaWYgKHRoaXMuX29uQWN0aXZhdGVPYnNlcnZlcikgeworICAgICAgICAg
ICAgICAgIHRoaXMub25BY3RpdmF0ZU9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uQWN0aXZhdGVP
YnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9vbkFjdGl2YXRlT2JzZXJ2ZXIgPSB0aGlzLm9uQWN0aXZhdGVP
YnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJvblNp
emVDaGFuZ2VkIiwgeworICAgICAgICAvKioKKyAgICAgICAgKiBBIGZ1bmN0aW9uIHRoYXQgaXMg
YWRkZWQgdG8gdGhlIG9uU2l6ZUNoYW5nZWRPYnNlcnZhYmxlCisgICAgICAgICovCisgICAgICAg
IHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb25TaXpl
Q2hhbmdlZE9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vblNpemVDaGFuZ2VkT2Jz
ZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25TaXplQ2hhbmdlZE9ic2VydmVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuX29uU2l6ZUNoYW5nZWRPYnNlcnZlciA9IHRoaXMub25TaXpl
Q2hhbmdlZE9ic2VydmFibGUuYWRkKGNhbGxiYWNrKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KFBvc3RQcm9jZXNzLnByb3RvdHlwZSwgIm9uQXBwbHkiLCB7
CisgICAgICAgIC8qKgorICAgICAgICAqIEEgZnVuY3Rpb24gdGhhdCBpcyBhZGRlZCB0byB0aGUg
b25BcHBseU9ic2VydmFibGUKKyAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2Fs
bGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbkFwcGx5T2JzZXJ2ZXIpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLm9uQXBwbHlPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkFwcGx5T2Jz
ZXJ2ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fb25BcHBseU9ic2VydmVy
ID0gdGhpcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoY2FsbGJhY2spOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9zdFByb2Nlc3MucHJvdG90eXBlLCAib25C
ZWZvcmVSZW5kZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIEEgZnVuY3Rpb24gdGhhdCBp
cyBhZGRlZCB0byB0aGUgb25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlCisgICAgICAgICovCisgICAg
ICAgIHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fb25C
ZWZvcmVSZW5kZXJPYnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMub25CZWZvcmVSZW5k
ZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9vbkJlZm9yZVJlbmRlck9ic2VydmVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX29uQmVmb3JlUmVuZGVyT2JzZXJ2ZXIgPSB0aGlz
Lm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5hZGQoY2FsbGJhY2spOworICAgICAgICB9LAorICAg
ICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9
KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9zdFByb2Nlc3MucHJvdG90eXBlLCAib25B
ZnRlclJlbmRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICogQSBmdW5jdGlvbiB0aGF0IGlz
IGFkZGVkIHRvIHRoZSBvbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZQorICAgICAgICAqLworICAgICAg
ICBzZXQ6IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX29uQWZ0
ZXJSZW5kZXJPYnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMub25BZnRlclJlbmRlck9i
c2VydmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJSZW5kZXJPYnNlcnZlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9vbkFmdGVyUmVuZGVyT2JzZXJ2ZXIgPSB0aGlzLm9uQWZ0
ZXJSZW5kZXJPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJpbnB1dFRleHR1
cmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAqIFRoZSBpbnB1dCB0ZXh0dXJlIGZvciB0aGlz
IHBvc3QgcHJvY2VzcyBhbmQgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHRoZSBwcmV2aW91cyBwb3N0
IHByb2Nlc3MuIFdoZW4gYWRkZWQgdG8gYSBwaXBlbGluZSB0aGUgcHJldmlvdXMgcG9zdCBwcm9j
ZXNzIHdpbGwKKyAgICAgICAgKiByZW5kZXIgaXQncyBvdXRwdXQgaW50byB0aGlzIHRleHR1cmUg
YW5kIHRoaXMgdGV4dHVyZSB3aWxsIGJlIHVzZWQgYXMgdGV4dHVyZVNhbXBsZXIgaW4gdGhlIGZy
YWdtZW50IHNoYWRlciBvZiB0aGlzIHBvc3QgcHJvY2Vzcy4KKyAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXMuZGF0
YVt0aGlzLl9jdXJyZW50UmVuZGVyVGV4dHVyZUluZF07CisgICAgICAgIH0sCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9mb3JjZWRPdXRwdXRUZXh0
dXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICogR2V0cyB0aGUg
Y2FtZXJhIHdoaWNoIHBvc3QgcHJvY2VzcyBpcyBhcHBsaWVkIHRvLgorICAgICogQHJldHVybnMg
VGhlIGNhbWVyYSB0aGUgcG9zdCBwcm9jZXNzIGlzIGFwcGxpZWQgdG8uCisgICAgKi8KKyAgICBQ
b3N0UHJvY2Vzcy5wcm90b3R5cGUuZ2V0Q2FtZXJhID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fY2FtZXJhOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBv
c3RQcm9jZXNzLnByb3RvdHlwZSwgInRleGVsU2l6ZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICogR2V0cyB0aGUgdGV4ZWwgc2l6ZSBvZiB0aGUgcG9zdHByb2Nlc3MuCisgICAgICAgICogU2Vl
IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RleGVsXyhncmFwaGljcykKKyAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fc2hh
cmVPdXRwdXRXaXRoUG9zdFByb2Nlc3MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
c2hhcmVPdXRwdXRXaXRoUG9zdFByb2Nlc3MudGV4ZWxTaXplOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHRoaXMuX2ZvcmNlZE91dHB1dFRleHR1cmUpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl90ZXhlbFNpemUuY29weUZyb21GbG9hdHMoMS4wIC8gdGhpcy5fZm9yY2VkT3V0cHV0
VGV4dHVyZS53aWR0aCwgMS4wIC8gdGhpcy5fZm9yY2VkT3V0cHV0VGV4dHVyZS5oZWlnaHQpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleGVsU2l6ZTsKKyAgICAg
ICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0cyBhIHN0cmluZyBpZGVuZmlmeWluZyB0
aGUgbmFtZSBvZiB0aGUgY2xhc3MKKyAgICAgKiBAcmV0dXJucyAiUG9zdFByb2Nlc3MiIHN0cmlu
ZworICAgICAqLworICAgIFBvc3RQcm9jZXNzLnByb3RvdHlwZS5nZXRDbGFzc05hbWUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiUG9zdFByb2Nlc3MiOworICAgIH07CisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgZW5naW5lIHdoaWNoIHRoaXMgcG9zdCBwcm9jZXNzIGJlbG9uZ3Mg
dG8uCisgICAgICogQHJldHVybnMgVGhlIGVuZ2luZSB0aGUgcG9zdCBwcm9jZXNzIHdhcyBlbmFi
bGVkIHdpdGguCisgICAgICovCisgICAgUG9zdFByb2Nlc3MucHJvdG90eXBlLmdldEVuZ2luZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuZ2luZTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFRoZSBlZmZlY3QgdGhhdCBpcyBjcmVhdGVkIHdoZW4gaW5pdGlhbGl6aW5n
IHRoZSBwb3N0IHByb2Nlc3MuCisgICAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgZWZmZWN0IGNv
cnJlc3BvbmRpbmcgdGhlIHRoZSBwb3N0cHJvY2Vzcy4KKyAgICAgKi8KKyAgICBQb3N0UHJvY2Vz
cy5wcm90b3R5cGUuZ2V0RWZmZWN0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5fZWZmZWN0OworICAgIH07CisgICAgLyoqCisgICAgICogVG8gYXZvaWQgbXVsdGlwbGUgcmVk
dW5kYW50IHRleHR1cmVzIGZvciBtdWx0aXBsZSBwb3N0IHByb2Nlc3MsIHRoZSBvdXRwdXQgdGhl
IG91dHB1dCB0ZXh0dXJlIGZvciB0aGlzIHBvc3QgcHJvY2VzcyBjYW4gYmUgc2hhcmVkIHdpdGgg
YW5vdGhlci4KKyAgICAgKiBAcGFyYW0gcG9zdFByb2Nlc3MgVGhlIHBvc3QgcHJvY2VzcyB0byBz
aGFyZSB0aGUgb3V0cHV0IHdpdGguCisgICAgICogQHJldHVybnMgVGhpcyBwb3N0IHByb2Nlc3Mu
CisgICAgICovCisgICAgUG9zdFByb2Nlc3MucHJvdG90eXBlLnNoYXJlT3V0cHV0V2l0aCA9IGZ1
bmN0aW9uIChwb3N0UHJvY2VzcykgeworICAgICAgICB0aGlzLl9kaXNwb3NlVGV4dHVyZXMoKTsK
KyAgICAgICAgdGhpcy5fc2hhcmVPdXRwdXRXaXRoUG9zdFByb2Nlc3MgPSBwb3N0UHJvY2VzczsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXZlcnNlcyB0
aGUgZWZmZWN0IG9mIGNhbGxpbmcgc2hhcmVPdXRwdXRXaXRoIGFuZCByZXR1cm5zIHRoZSBwb3N0
IHByb2Nlc3MgYmFjayB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCisgICAgICogVGhpcyBzaG91bGQg
YmUgY2FsbGVkIGlmIHRoZSBwb3N0IHByb2Nlc3MgdGhhdCBzaGFyZXMgb3V0cHV0IHdpdGggdGhp
cyBwb3N0IHByb2Nlc3MgaXMgZGlzYWJsZWQvZGlzcG9zZWQuCisgICAgICovCisgICAgUG9zdFBy
b2Nlc3MucHJvdG90eXBlLnVzZU93bk91dHB1dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KHRoaXMuX3RleHR1cmVzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICB0aGlzLl90ZXh0dXJl
cyA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNt
YXJ0QXJyYXkiXSgyKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zaGFyZU91dHB1dFdpdGhQ
b3N0UHJvY2VzcyA9IG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBl
ZmZlY3Qgd2l0aCB0aGUgY3VycmVudCBwb3N0IHByb2Nlc3MgY29tcGlsZSB0aW1lIHZhbHVlcyBh
bmQgcmVjb21waWxlcyB0aGUgc2hhZGVyLgorICAgICAqIEBwYXJhbSBkZWZpbmVzIERlZmluZSBz
dGF0ZW1lbnRzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNo
YWRlci4gKGRlZmF1bHQ6IG51bGwpCisgICAgICogQHBhcmFtIHVuaWZvcm1zIFNldCBvZiB1bmlm
b3JtIHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzaGFkZXIuIChkZWZhdWx0
OiBudWxsKQorICAgICAqIEBwYXJhbSBzYW1wbGVycyBTZXQgb2YgVGV4dHVyZTJEIHZhcmlhYmxl
cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzaGFkZXIuIChkZWZhdWx0OiBudWxsKQorICAg
ICAqIEBwYXJhbSBpbmRleFBhcmFtZXRlcnMgVGhlIGluZGV4IHBhcmFtZXRlcnMgdG8gYmUgdXNl
ZCBmb3IgYmFieWxvbnMgaW5jbHVkZSBzeW50YXggIiNpbmNsdWRlPGtlcm5lbEJsdXJWYXJ5aW5n
RGVjbGFyYXRpb24+WzAuLnZhcnlpbmdDb3VudF0iLiAoZGVmYXVsdDogdW5kZWZpbmVkKSBTZWUg
dXNhZ2UgaW4gYmFieWxvbi5ibHVyUG9zdFByb2Nlc3MudHMgYW5kIGtlcm5lbEJsdXIudmVydGV4
LmZ4CisgICAgICogQHBhcmFtIG9uQ29tcGlsZWQgQ2FsbGVkIHdoZW4gdGhlIHNoYWRlciBoYXMg
YmVlbiBjb21waWxlZC4KKyAgICAgKiBAcGFyYW0gb25FcnJvciBDYWxsZWQgaWYgdGhlcmUgaXMg
YW4gZXJyb3Igd2hlbiBjb21waWxpbmcgYSBzaGFkZXIuCisgICAgICovCisgICAgUG9zdFByb2Nl
c3MucHJvdG90eXBlLnVwZGF0ZUVmZmVjdCA9IGZ1bmN0aW9uIChkZWZpbmVzLCB1bmlmb3Jtcywg
c2FtcGxlcnMsIGluZGV4UGFyYW1ldGVycywgb25Db21waWxlZCwgb25FcnJvcikgeworICAgICAg
ICBpZiAoZGVmaW5lcyA9PT0gdm9pZCAwKSB7IGRlZmluZXMgPSBudWxsOyB9CisgICAgICAgIGlm
ICh1bmlmb3JtcyA9PT0gdm9pZCAwKSB7IHVuaWZvcm1zID0gbnVsbDsgfQorICAgICAgICBpZiAo
c2FtcGxlcnMgPT09IHZvaWQgMCkgeyBzYW1wbGVycyA9IG51bGw7IH0KKyAgICAgICAgdGhpcy5f
ZWZmZWN0ID0gdGhpcy5fZW5naW5lLmNyZWF0ZUVmZmVjdCh7IHZlcnRleDogdGhpcy5fdmVydGV4
VXJsLCBmcmFnbWVudDogdGhpcy5fZnJhZ21lbnRVcmwgfSwgWyJwb3NpdGlvbiJdLCB1bmlmb3Jt
cyB8fCB0aGlzLl9wYXJhbWV0ZXJzLCBzYW1wbGVycyB8fCB0aGlzLl9zYW1wbGVycywgZGVmaW5l
cyAhPT0gbnVsbCA/IGRlZmluZXMgOiAiIiwgdW5kZWZpbmVkLCBvbkNvbXBpbGVkLCBvbkVycm9y
LCBpbmRleFBhcmFtZXRlcnMgfHwgdGhpcy5faW5kZXhQYXJhbWV0ZXJzKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIFRoZSBwb3N0IHByb2Nlc3MgaXMgcmV1c2FibGUgaWYgaXQgY2FuIGJlIHVz
ZWQgbXVsdGlwbGUgdGltZXMgd2l0aGluIG9uZSBmcmFtZS4KKyAgICAgKiBAcmV0dXJucyBJZiB0
aGUgcG9zdCBwcm9jZXNzIGlzIHJldXNhYmxlCisgICAgICovCisgICAgUG9zdFByb2Nlc3MucHJv
dG90eXBlLmlzUmV1c2FibGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9y
ZXVzYWJsZTsKKyAgICB9OworICAgIC8qKiBpbnZhbGlkYXRlIGZyYW1lQnVmZmVyIHRvIGhpbnQg
dGhlIHBvc3Rwcm9jZXNzIHRvIGNyZWF0ZSBhIGRlcHRoIGJ1ZmZlciAqLworICAgIFBvc3RQcm9j
ZXNzLnByb3RvdHlwZS5tYXJrVGV4dHVyZURpcnR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0
aGlzLndpZHRoID0gLTE7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBY3RpdmF0ZXMgdGhlIHBv
c3QgcHJvY2VzcyBieSBpbnRpYWxpemluZyB0aGUgdGV4dHVyZXMgdG8gYmUgdXNlZCB3aGVuIGV4
ZWN1dGVkLiBOb3RpZmllcyBvbkFjdGl2YXRlT2JzZXJ2YWJsZS4KKyAgICAgKiBXaGVuIHRoaXMg
cG9zdCBwcm9jZXNzIGlzIHVzZWQgaW4gYSBwaXBlbGluZSwgdGhpcyBpcyBjYWxsIHdpbGwgYmlu
ZCB0aGUgaW5wdXQgdGV4dHVyZSBvZiB0aGlzIHBvc3QgcHJvY2VzcyB0byB0aGUgb3V0cHV0IG9m
IHRoZSBwcmV2aW91cy4KKyAgICAgKiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdGhhdCB3aWxs
IGJlIHVzZWQgaW4gdGhlIHBvc3QgcHJvY2Vzcy4gVGhpcyBjYW1lcmEgd2lsbCBiZSB1c2VkIHdo
ZW4gY2FsbGluZyBvbkFjdGl2YXRlT2JzZXJ2YWJsZS4KKyAgICAgKiBAcGFyYW0gc291cmNlVGV4
dHVyZSBUaGUgc291cmNlIHRleHR1cmUgdG8gYmUgaW5zcGVjdGVkIHRvIGdldCB0aGUgd2lkdGgg
YW5kIGhlaWdodCBpZiBub3Qgc3BlY2lmaWVkIGluIHRoZSBwb3N0IHByb2Nlc3MgY29uc3RydWN0
b3IuIChkZWZhdWx0OiBudWxsKQorICAgICAqIEBwYXJhbSBmb3JjZURlcHRoU3RlbmNpbCBJZiB0
cnVlLCBhIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciB3aWxsIGJlIGdlbmVyYXRlZC4gKGRlZmF1
bHQ6IGZhbHNlKQorICAgICAqIEByZXR1cm5zIFRoZSB0YXJnZXQgdGV4dHVyZSB0aGF0IHdhcyBi
b3VuZCB0byBiZSB3cml0dGVuIHRvLgorICAgICAqLworICAgIFBvc3RQcm9jZXNzLnByb3RvdHlw
ZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChjYW1lcmEsIHNvdXJjZVRleHR1cmUsIGZvcmNlRGVwdGhT
dGVuY2lsKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChzb3VyY2VU
ZXh0dXJlID09PSB2b2lkIDApIHsgc291cmNlVGV4dHVyZSA9IG51bGw7IH0KKyAgICAgICAgY2Ft
ZXJhID0gY2FtZXJhIHx8IHRoaXMuX2NhbWVyYTsKKyAgICAgICAgdmFyIHNjZW5lID0gY2FtZXJh
LmdldFNjZW5lKCk7CisgICAgICAgIHZhciBlbmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAg
ICAgICAgdmFyIG1heFNpemUgPSBlbmdpbmUuZ2V0Q2FwcygpLm1heFRleHR1cmVTaXplOworICAg
ICAgICB2YXIgcmVxdWlyZWRXaWR0aCA9ICgoc291cmNlVGV4dHVyZSA/IHNvdXJjZVRleHR1cmUu
d2lkdGggOiB0aGlzLl9lbmdpbmUuZ2V0UmVuZGVyV2lkdGgodHJ1ZSkpICogdGhpcy5fb3B0aW9u
cykgfCAwOworICAgICAgICB2YXIgcmVxdWlyZWRIZWlnaHQgPSAoKHNvdXJjZVRleHR1cmUgPyBz
b3VyY2VUZXh0dXJlLmhlaWdodCA6IHRoaXMuX2VuZ2luZS5nZXRSZW5kZXJIZWlnaHQodHJ1ZSkp
ICogdGhpcy5fb3B0aW9ucykgfCAwOworICAgICAgICAvLyBJZiByZW5kZXJpbmcgdG8gYSB3ZWJ2
ciBjYW1lcmEncyBsZWZ0IG9yIHJpZ2h0IGV5ZSBvbmx5IGhhbGYgdGhlIHdpZHRoIHNob3VsZCBi
ZSB1c2VkIHRvIGF2b2lkIHJlc2l6ZSB3aGVuIHJlbmRlcmVkIHRvIHNjcmVlbgorICAgICAgICB2
YXIgd2ViVlJDYW1lcmEgPSBjYW1lcmEucGFyZW50OworICAgICAgICBpZiAod2ViVlJDYW1lcmEg
JiYgKHdlYlZSQ2FtZXJhLmxlZnRDYW1lcmEgPT0gY2FtZXJhIHx8IHdlYlZSQ2FtZXJhLnJpZ2h0
Q2FtZXJhID09IGNhbWVyYSkpIHsKKyAgICAgICAgICAgIHJlcXVpcmVkV2lkdGggLz0gMjsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgZGVzaXJlZFdpZHRoID0gKHRoaXMuX29wdGlvbnMud2lkdGgg
fHwgcmVxdWlyZWRXaWR0aCk7CisgICAgICAgIHZhciBkZXNpcmVkSGVpZ2h0ID0gdGhpcy5fb3B0
aW9ucy5oZWlnaHQgfHwgcmVxdWlyZWRIZWlnaHQ7CisgICAgICAgIGlmICghdGhpcy5fc2hhcmVP
dXRwdXRXaXRoUG9zdFByb2Nlc3MgJiYgIXRoaXMuX2ZvcmNlZE91dHB1dFRleHR1cmUpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmFkYXB0U2NhbGVUb0N1cnJlbnRWaWV3cG9ydCkgeworICAgICAg
ICAgICAgICAgIHZhciBjdXJyZW50Vmlld3BvcnQgPSBlbmdpbmUuY3VycmVudFZpZXdwb3J0Owor
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Vmlld3BvcnQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZGVzaXJlZFdpZHRoICo9IGN1cnJlbnRWaWV3cG9ydC53aWR0aDsKKyAgICAgICAgICAgICAg
ICAgICAgZGVzaXJlZEhlaWdodCAqPSBjdXJyZW50Vmlld3BvcnQuaGVpZ2h0OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlclRhcmdl
dFNhbXBsaW5nTW9kZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIkNvbnN0YW50cyJdLlRFWFRVUkVfVFJJTElORUFSX1NBTVBMSU5HTU9ERSB8fCB0
aGlzLmFsd2F5c0ZvcmNlUE9UKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9vcHRpb25z
LndpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRXaWR0aCA9IGVuZ2luZS5uZWVk
UE9UVGV4dHVyZXMgPyBfRW5naW5lc19lbmdpbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siRW5naW5lIl0uR2V0RXhwb25lbnRPZlR3byhkZXNpcmVkV2lkdGgsIG1heFNpemUsIHRoaXMu
c2NhbGVNb2RlKSA6IGRlc2lyZWRXaWR0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLmhlaWdodCkgeworICAgICAgICAgICAgICAgICAgICBk
ZXNpcmVkSGVpZ2h0ID0gZW5naW5lLm5lZWRQT1RUZXh0dXJlcyA/IF9FbmdpbmVzX2VuZ2luZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJFbmdpbmUiXS5HZXRFeHBvbmVudE9mVHdvKGRl
c2lyZWRIZWlnaHQsIG1heFNpemUsIHRoaXMuc2NhbGVNb2RlKSA6IGRlc2lyZWRIZWlnaHQ7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMud2lk
dGggIT09IGRlc2lyZWRXaWR0aCB8fCB0aGlzLmhlaWdodCAhPT0gZGVzaXJlZEhlaWdodCkgewor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlcy5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dHVyZXMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5fcmVsZWFzZVRleHR1
cmUodGhpcy5fdGV4dHVyZXMuZGF0YVtpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucmVzZXQoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IGRlc2lyZWRXaWR0aDsKKyAgICAgICAgICAg
ICAgICB0aGlzLmhlaWdodCA9IGRlc2lyZWRIZWlnaHQ7CisgICAgICAgICAgICAgICAgdmFyIHRl
eHR1cmVTaXplID0geyB3aWR0aDogdGhpcy53aWR0aCwgaGVpZ2h0OiB0aGlzLmhlaWdodCB9Owor
ICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlT3B0aW9ucyA9IHsKKyAgICAgICAgICAgICAgICAg
ICAgZ2VuZXJhdGVNaXBNYXBzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVE
ZXB0aEJ1ZmZlcjogZm9yY2VEZXB0aFN0ZW5jaWwgfHwgY2FtZXJhLl9wb3N0UHJvY2Vzc2VzLmlu
ZGV4T2YodGhpcykgPT09IDAsCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlU3RlbmNpbEJ1
ZmZlcjogKGZvcmNlRGVwdGhTdGVuY2lsIHx8IGNhbWVyYS5fcG9zdFByb2Nlc3Nlcy5pbmRleE9m
KHRoaXMpID09PSAwKSAmJiB0aGlzLl9lbmdpbmUuaXNTdGVuY2lsRW5hYmxlLAorICAgICAgICAg
ICAgICAgICAgICBzYW1wbGluZ01vZGU6IHRoaXMucmVuZGVyVGFyZ2V0U2FtcGxpbmdNb2RlLAor
ICAgICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLl90ZXh0dXJlVHlwZQorICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh0aGlzLl9lbmdpbmUu
Y3JlYXRlUmVuZGVyVGFyZ2V0VGV4dHVyZSh0ZXh0dXJlU2l6ZSwgdGV4dHVyZU9wdGlvbnMpKTsK
KyAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmV1c2FibGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fdGV4dHVyZXMucHVzaCh0aGlzLl9lbmdpbmUuY3JlYXRlUmVuZGVyVGFyZ2V0VGV4
dHVyZSh0ZXh0dXJlU2l6ZSwgdGV4dHVyZU9wdGlvbnMpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdGhpcy5fdGV4ZWxTaXplLmNvcHlGcm9tRmxvYXRzKDEuMCAvIHRoaXMu
d2lkdGgsIDEuMCAvIHRoaXMuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB0aGlzLm9uU2l6ZUNo
YW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX3RleHR1cmVzLmZvckVhY2goZnVuY3Rpb24gKHRleHR1cmUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodGV4dHVyZS5zYW1wbGVzICE9PSBfdGhpcy5zYW1wbGVzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIF90aGlzLl9lbmdpbmUudXBkYXRlUmVuZGVyVGFyZ2V0VGV4dHVy
ZVNhbXBsZUNvdW50KHRleHR1cmUsIF90aGlzLnNhbXBsZXMpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHZhciB0YXJnZXQ7CisgICAgICAg
IGlmICh0aGlzLl9zaGFyZU91dHB1dFdpdGhQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgdGFy
Z2V0ID0gdGhpcy5fc2hhcmVPdXRwdXRXaXRoUG9zdFByb2Nlc3MuaW5wdXRUZXh0dXJlOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX2ZvcmNlZE91dHB1dFRleHR1cmUpIHsKKyAg
ICAgICAgICAgIHRhcmdldCA9IHRoaXMuX2ZvcmNlZE91dHB1dFRleHR1cmU7CisgICAgICAgICAg
ICB0aGlzLndpZHRoID0gdGhpcy5fZm9yY2VkT3V0cHV0VGV4dHVyZS53aWR0aDsKKyAgICAgICAg
ICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5fZm9yY2VkT3V0cHV0VGV4dHVyZS5oZWlnaHQ7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmlucHV0VGV4
dHVyZTsKKyAgICAgICAgfQorICAgICAgICAvLyBCaW5kIHRoZSBpbnB1dCBvZiB0aGlzIHBvc3Qg
cHJvY2VzcyB0byBiZSB1c2VkIGFzIHRoZSBvdXRwdXQgb2YgdGhlIHByZXZpb3VzIHBvc3QgcHJv
Y2Vzcy4KKyAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGl4ZWxQZXJmZWN0TW9kZSkgeworICAgICAg
ICAgICAgdGhpcy5fc2NhbGVSYXRpby5jb3B5RnJvbUZsb2F0cyhyZXF1aXJlZFdpZHRoIC8gZGVz
aXJlZFdpZHRoLCByZXF1aXJlZEhlaWdodCAvIGRlc2lyZWRIZWlnaHQpOworICAgICAgICAgICAg
dGhpcy5fZW5naW5lLmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIDAsIHJlcXVpcmVkV2lkdGgsIHJl
cXVpcmVkSGVpZ2h0LCB0aGlzLmZvcmNlRnVsbHNjcmVlblZpZXdwb3J0KTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3NjYWxlUmF0aW8uY29weUZyb21GbG9h
dHMoMSwgMSk7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUuYmluZEZyYW1lYnVmZmVyKHRhcmdl
dCwgMCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMuZm9yY2VGdWxsc2NyZWVuVmlld3BvcnQp
OworICAgICAgICB9CisgICAgICAgIHRoaXMub25BY3RpdmF0ZU9ic2VydmFibGUubm90aWZ5T2Jz
ZXJ2ZXJzKGNhbWVyYSk7CisgICAgICAgIC8vIENsZWFyCisgICAgICAgIGlmICh0aGlzLmF1dG9D
bGVhciAmJiB0aGlzLmFscGhhTW9kZSA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLkFMUEhBX0RJU0FCTEUpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2VuZ2luZS5jbGVhcih0aGlzLmNsZWFyQ29sb3IgPyB0aGlzLmNsZWFyQ29sb3Ig
OiBzY2VuZS5jbGVhckNvbG9yLCBzY2VuZS5fYWxsb3dQb3N0UHJvY2Vzc0NsZWFyQ29sb3IsIHRy
dWUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9yZXVzYWJsZSkgeworICAg
ICAgICAgICAgdGhpcy5fY3VycmVudFJlbmRlclRleHR1cmVJbmQgPSAodGhpcy5fY3VycmVudFJl
bmRlclRleHR1cmVJbmQgKyAxKSAlIDI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdl
dDsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3N0UHJvY2Vzcy5wcm90b3R5
cGUsICJpc1N1cHBvcnRlZCIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHRoZSBwb3N0
IHByb2Nlc3MgaXMgc3VwcG9ydGVkLgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZWZmZWN0LmlzU3VwcG9ydGVkOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9zdFByb2Nlc3MucHJv
dG90eXBlLCAiYXNwZWN0UmF0aW8iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgYXNw
ZWN0IHJhdGlvIG9mIHRoZSBvdXRwdXQgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3NoYXJlT3V0cHV0V2l0aFBv
c3RQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXJlT3V0cHV0V2l0
aFBvc3RQcm9jZXNzLmFzcGVjdFJhdGlvOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHRoaXMuX2ZvcmNlZE91dHB1dFRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fZm9yY2VkT3V0cHV0VGV4dHVyZS53aWR0aCAvIHRoaXMuX2ZvcmNlZE91dHB1dFRleHR1cmUu
aGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMud2lkdGggLyB0
aGlzLmhlaWdodDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0IGEgdmFs
dWUgaW5kaWNhdGluZyBpZiB0aGUgcG9zdC1wcm9jZXNzIGlzIHJlYWR5IHRvIGJlIHVzZWQKKyAg
ICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBwb3N0LXByb2Nlc3MgaXMgcmVhZHkgKHNoYWRlciBp
cyBjb21waWxlZCkKKyAgICAgKi8KKyAgICBQb3N0UHJvY2Vzcy5wcm90b3R5cGUuaXNSZWFkeSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VmZmVjdCAmJiB0aGlzLl9lZmZl
Y3QuaXNSZWFkeSgpOworICAgIH07CisgICAgLyoqCisgICAgICogQmluZHMgYWxsIHRleHR1cmVz
IGFuZCB1bmlmb3JtcyB0byB0aGUgc2hhZGVyLCB0aGlzIHdpbGwgYmUgcnVuIG9uIGV2ZXJ5IHBh
c3MuCisgICAgICogQHJldHVybnMgdGhlIGVmZmVjdCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcG9z
dCBwcm9jZXNzLiBOdWxsIGlmIG5vdCBjb21waWxlZCBvciBub3QgcmVhZHkuCisgICAgICovCisg
ICAgUG9zdFByb2Nlc3MucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAv
LyBDaGVjaworICAgICAgICBpZiAoIXRoaXMuX2VmZmVjdCB8fCAhdGhpcy5fZWZmZWN0LmlzUmVh
ZHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8g
U3RhdGVzCisgICAgICAgIHRoaXMuX2VuZ2luZS5lbmFibGVFZmZlY3QodGhpcy5fZWZmZWN0KTsK
KyAgICAgICAgdGhpcy5fZW5naW5lLnNldFN0YXRlKGZhbHNlKTsKKyAgICAgICAgdGhpcy5fZW5n
aW5lLnNldERlcHRoQnVmZmVyKGZhbHNlKTsKKyAgICAgICAgdGhpcy5fZW5naW5lLnNldERlcHRo
V3JpdGUoZmFsc2UpOworICAgICAgICAvLyBBbHBoYQorICAgICAgICB0aGlzLl9lbmdpbmUuc2V0
QWxwaGFNb2RlKHRoaXMuYWxwaGFNb2RlKTsKKyAgICAgICAgaWYgKHRoaXMuYWxwaGFDb25zdGFu
dHMpIHsKKyAgICAgICAgICAgIHRoaXMuZ2V0RW5naW5lKCkuc2V0QWxwaGFDb25zdGFudHModGhp
cy5hbHBoYUNvbnN0YW50cy5yLCB0aGlzLmFscGhhQ29uc3RhbnRzLmcsIHRoaXMuYWxwaGFDb25z
dGFudHMuYiwgdGhpcy5hbHBoYUNvbnN0YW50cy5hKTsKKyAgICAgICAgfQorICAgICAgICAvLyBC
aW5kIHRoZSBvdXRwdXQgdGV4dHVyZSBvZiB0aGUgcHJlaXZvdXMgcG9zdCBwcm9jZXNzIGFzIHRo
ZSBpbnB1dCB0byB0aGlzIHBvc3QgcHJvY2Vzcy4KKyAgICAgICAgdmFyIHNvdXJjZTsKKyAgICAg
ICAgaWYgKHRoaXMuX3NoYXJlT3V0cHV0V2l0aFBvc3RQcm9jZXNzKSB7CisgICAgICAgICAgICBz
b3VyY2UgPSB0aGlzLl9zaGFyZU91dHB1dFdpdGhQb3N0UHJvY2Vzcy5pbnB1dFRleHR1cmU7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5fZm9yY2VkT3V0cHV0VGV4dHVyZSkgewor
ICAgICAgICAgICAgc291cmNlID0gdGhpcy5fZm9yY2VkT3V0cHV0VGV4dHVyZTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNvdXJjZSA9IHRoaXMuaW5wdXRUZXh0dXJl
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VmZmVjdC5fYmluZFRleHR1cmUoInRleHR1cmVT
YW1wbGVyIiwgc291cmNlKTsKKyAgICAgICAgLy8gUGFyYW1ldGVycworICAgICAgICB0aGlzLl9l
ZmZlY3Quc2V0VmVjdG9yMigic2NhbGUiLCB0aGlzLl9zY2FsZVJhdGlvKTsKKyAgICAgICAgdGhp
cy5vbkFwcGx5T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcy5fZWZmZWN0KTsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2VmZmVjdDsKKyAgICB9OworICAgIFBvc3RQcm9jZXNzLnByb3RvdHlw
ZS5fZGlzcG9zZVRleHR1cmVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fc2hh
cmVPdXRwdXRXaXRoUG9zdFByb2Nlc3MgfHwgdGhpcy5fZm9yY2VkT3V0cHV0VGV4dHVyZSkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl90ZXh0dXJl
cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Rl
eHR1cmVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZW5naW5lLl9yZWxl
YXNlVGV4dHVyZSh0aGlzLl90ZXh0dXJlcy5kYXRhW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl90ZXh0dXJlcy5kaXNwb3NlKCk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBEaXNwb3NlcyB0aGUgcG9zdCBwcm9jZXNzLgorICAgICAqIEBwYXJhbSBjYW1lcmEg
VGhlIGNhbWVyYSB0byBkaXNwb3NlIHRoZSBwb3N0IHByb2Nlc3Mgb24uCisgICAgICovCisgICAg
UG9zdFByb2Nlc3MucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAg
ICAgIGNhbWVyYSA9IGNhbWVyYSB8fCB0aGlzLl9jYW1lcmE7CisgICAgICAgIHRoaXMuX2Rpc3Bv
c2VUZXh0dXJlcygpOworICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHsKKyAgICAgICAgICAgIHZh
ciBpbmRleF8xID0gdGhpcy5fc2NlbmUucG9zdFByb2Nlc3Nlcy5pbmRleE9mKHRoaXMpOworICAg
ICAgICAgICAgaWYgKGluZGV4XzEgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2Nl
bmUucG9zdFByb2Nlc3Nlcy5zcGxpY2UoaW5kZXhfMSwgMSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgaW5kZXhfMiA9IHRoaXMuX2Vu
Z2luZS5wb3N0UHJvY2Vzc2VzLmluZGV4T2YodGhpcyk7CisgICAgICAgICAgICBpZiAoaW5kZXhf
MiAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUucG9zdFByb2Nlc3Nlcy5z
cGxpY2UoaW5kZXhfMiwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFjYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYW1l
cmEuZGV0YWNoUG9zdFByb2Nlc3ModGhpcyk7CisgICAgICAgIHZhciBpbmRleCA9IGNhbWVyYS5f
cG9zdFByb2Nlc3Nlcy5pbmRleE9mKHRoaXMpOworICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYg
Y2FtZXJhLl9wb3N0UHJvY2Vzc2VzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHZhciBmaXJz
dFBvc3RQcm9jZXNzID0gdGhpcy5fY2FtZXJhLl9nZXRGaXJzdFBvc3RQcm9jZXNzKCk7CisgICAg
ICAgICAgICBpZiAoZmlyc3RQb3N0UHJvY2VzcykgeworICAgICAgICAgICAgICAgIGZpcnN0UG9z
dFByb2Nlc3MubWFya1RleHR1cmVEaXJ0eSgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHRoaXMub25BY3RpdmF0ZU9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5v
bkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQXBwbHlPYnNl
cnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMub25TaXplQ2hhbmdlZE9ic2VydmFibGUuY2xlYXIoKTsKKyAg
ICB9OworICAgIHJldHVybiBQb3N0UHJvY2VzczsKK30oKSk7CisKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2Vzc01hbmFnZXIudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0
UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzTWFuYWdlci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogUG9z
dFByb2Nlc3NNYW5hZ2VyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBv
c3RQcm9jZXNzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUG9zdFByb2Nlc3NNYW5hZ2Vy
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRl
cmlhbHMvbWF0ZXJpYWwgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVz
L2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKworCisK
Ky8qKgorICogUG9zdFByb2Nlc3NNYW5hZ2VyIGlzIHVzZWQgdG8gbWFuYWdlIG9uZSBvciBtb3Jl
IHBvc3QgcHJvY2Vzc2VzIG9yIHBvc3QgcHJvY2VzcyBwaXBlbGluZXMKKyAqIFNlZSBodHRwczov
L2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9ob3dfdG9fdXNlX3Bvc3Rwcm9jZXNzZXMKKyAqLwor
dmFyIFBvc3RQcm9jZXNzTWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAg
ICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIFBvc3RQcm9jZXNzCisgICAgICog
QHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0aGF0IHRoZSBwb3N0IHByb2Nlc3MgaXMgYXNzb2NpYXRl
ZCB3aXRoLgorICAgICAqLworICAgIGZ1bmN0aW9uIFBvc3RQcm9jZXNzTWFuYWdlcihzY2VuZSkg
eworICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzID0ge307CisgICAgICAgIHRoaXMuX3NjZW5l
ID0gc2NlbmU7CisgICAgfQorICAgIFBvc3RQcm9jZXNzTWFuYWdlci5wcm90b3R5cGUuX3ByZXBh
cmVCdWZmZXJzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fdmVydGV4QnVmZmVy
c1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZm
ZXIiXS5Qb3NpdGlvbktpbmRdKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgLy8gVkJPCisgICAgICAgIHZhciB2ZXJ0aWNlcyA9IFtdOworICAgICAgICB2ZXJ0aWNl
cy5wdXNoKDEsIDEpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKC0xLCAxKTsKKyAgICAgICAgdmVy
dGljZXMucHVzaCgtMSwgLTEpOworICAgICAgICB2ZXJ0aWNlcy5wdXNoKDEsIC0xKTsKKyAgICAg
ICAgdGhpcy5fdmVydGV4QnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdID0gbmV3IF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdKHRoaXMuX3Nj
ZW5lLmdldEVuZ2luZSgpLCB2ZXJ0aWNlcywgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kLCBmYWxzZSwgZmFsc2Us
IDIpOworICAgICAgICB0aGlzLl9idWlsZEluZGV4QnVmZmVyKCk7CisgICAgfTsKKyAgICBQb3N0
UHJvY2Vzc01hbmFnZXIucHJvdG90eXBlLl9idWlsZEluZGV4QnVmZmVyID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAvLyBJbmRpY2VzCisgICAgICAgIHZhciBpbmRpY2VzID0gW107CisgICAgICAg
IGluZGljZXMucHVzaCgwKTsKKyAgICAgICAgaW5kaWNlcy5wdXNoKDEpOworICAgICAgICBpbmRp
Y2VzLnB1c2goMik7CisgICAgICAgIGluZGljZXMucHVzaCgwKTsKKyAgICAgICAgaW5kaWNlcy5w
dXNoKDIpOworICAgICAgICBpbmRpY2VzLnB1c2goMyk7CisgICAgICAgIHRoaXMuX2luZGV4QnVm
ZmVyID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlSW5kZXhCdWZmZXIoaW5kaWNlcyk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWJ1aWxkcyB0aGUgdmVydGV4IGJ1ZmZlcnMgb2Yg
dGhlIG1hbmFnZXIuCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIFBvc3RQcm9jZXNzTWFu
YWdlci5wcm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB2YiA9
IHRoaXMuX3ZlcnRleEJ1ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgaWYgKCF2Yikg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZiLl9yZWJ1aWxkKCk7
CisgICAgICAgIHRoaXMuX2J1aWxkSW5kZXhCdWZmZXIoKTsKKyAgICB9OworICAgIC8vIE1ldGhv
ZHMKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyBhIGZyYW1lIHRvIGJlIHJ1biB0aHJvdWdoIGEg
cG9zdCBwcm9jZXNzLgorICAgICAqIEBwYXJhbSBzb3VyY2VUZXh0dXJlIFRoZSBpbnB1dCB0ZXh0
dXJlIHRvIHRoZSBwb3N0IHByb2Nlc2Vzcy4gKGRlZmF1bHQ6IG51bGwpCisgICAgICogQHBhcmFt
IHBvc3RQcm9jZXNzZXMgQW4gYXJyYXkgb2YgcG9zdCBwcm9jZXNzZXMgdG8gYmUgcnVuLiAoZGVm
YXVsdDogbnVsbCkKKyAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwb3N0IHByb2Nlc3NlcyB3
ZXJlIGFibGUgdG8gYmUgcnVuLgorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBQb3N0UHJv
Y2Vzc01hbmFnZXIucHJvdG90eXBlLl9wcmVwYXJlRnJhbWUgPSBmdW5jdGlvbiAoc291cmNlVGV4
dHVyZSwgcG9zdFByb2Nlc3NlcykgeworICAgICAgICBpZiAoc291cmNlVGV4dHVyZSA9PT0gdm9p
ZCAwKSB7IHNvdXJjZVRleHR1cmUgPSBudWxsOyB9CisgICAgICAgIGlmIChwb3N0UHJvY2Vzc2Vz
ID09PSB2b2lkIDApIHsgcG9zdFByb2Nlc3NlcyA9IG51bGw7IH0KKyAgICAgICAgdmFyIGNhbWVy
YSA9IHRoaXMuX3NjZW5lLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAgaWYgKCFjYW1lcmEpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBwb3N0UHJvY2Vzc2Vz
ID0gcG9zdFByb2Nlc3NlcyB8fCBjYW1lcmEuX3Bvc3RQcm9jZXNzZXMuZmlsdGVyKGZ1bmN0aW9u
IChwcCkgeyByZXR1cm4gcHAgIT0gbnVsbDsgfSk7CisgICAgICAgIGlmICghcG9zdFByb2Nlc3Nl
cyB8fCBwb3N0UHJvY2Vzc2VzLmxlbmd0aCA9PT0gMCB8fCAhdGhpcy5fc2NlbmUucG9zdFByb2Nl
c3Nlc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBwb3N0UHJvY2Vzc2VzWzBdLmFjdGl2YXRlKGNhbWVyYSwgc291cmNlVGV4dHVyZSwgcG9z
dFByb2Nlc3NlcyAhPT0gbnVsbCAmJiBwb3N0UHJvY2Vzc2VzICE9PSB1bmRlZmluZWQpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIE1hbnVhbGx5IHJlbmRl
ciBhIHNldCBvZiBwb3N0IHByb2Nlc3NlcyB0byBhIHRleHR1cmUuCisgICAgICogQHBhcmFtIHBv
c3RQcm9jZXNzZXMgQW4gYXJyYXkgb2YgcG9zdCBwcm9jZXNzZXMgdG8gYmUgcnVuLgorICAgICAq
IEBwYXJhbSB0YXJnZXRUZXh0dXJlIFRoZSB0YXJnZXQgdGV4dHVyZSB0byByZW5kZXIgdG8uCisg
ICAgICogQHBhcmFtIGZvcmNlRnVsbHNjcmVlblZpZXdwb3J0IGZvcmNlIGdsLnZpZXdwb3J0IHRv
IGJlIGZ1bGwgc2NyZWVuIGVnLiAwLDAsdGV4dHVyZVdpZHRoLHRleHR1cmVIZWlnaHQKKyAgICAg
KiBAcGFyYW0gZmFjZUluZGV4IGRlZmluZXMgdGhlIGZhY2UgdG8gcmVuZGVyIHRvIGlmIGEgY3Vi
ZW1hcCBpcyBkZWZpbmVkIGFzIHRoZSB0YXJnZXQKKyAgICAgKiBAcGFyYW0gbG9kTGV2ZWwgZGVm
aW5lcyB3aGljaCBsb2Qgb2YgdGhlIHRleHR1cmUgdG8gcmVuZGVyIHRvCisgICAgICovCisgICAg
UG9zdFByb2Nlc3NNYW5hZ2VyLnByb3RvdHlwZS5kaXJlY3RSZW5kZXIgPSBmdW5jdGlvbiAocG9z
dFByb2Nlc3NlcywgdGFyZ2V0VGV4dHVyZSwgZm9yY2VGdWxsc2NyZWVuVmlld3BvcnQsIGZhY2VJ
bmRleCwgbG9kTGV2ZWwpIHsKKyAgICAgICAgaWYgKHRhcmdldFRleHR1cmUgPT09IHZvaWQgMCkg
eyB0YXJnZXRUZXh0dXJlID0gbnVsbDsgfQorICAgICAgICBpZiAoZm9yY2VGdWxsc2NyZWVuVmll
d3BvcnQgPT09IHZvaWQgMCkgeyBmb3JjZUZ1bGxzY3JlZW5WaWV3cG9ydCA9IGZhbHNlOyB9Cisg
ICAgICAgIGlmIChmYWNlSW5kZXggPT09IHZvaWQgMCkgeyBmYWNlSW5kZXggPSAwOyB9CisgICAg
ICAgIGlmIChsb2RMZXZlbCA9PT0gdm9pZCAwKSB7IGxvZExldmVsID0gMDsgfQorICAgICAgICB2
YXIgZW5naW5lID0gdGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIGZvciAodmFyIGlu
ZGV4ID0gMDsgaW5kZXggPCBwb3N0UHJvY2Vzc2VzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
ICAgICAgaWYgKGluZGV4IDwgcG9zdFByb2Nlc3Nlcy5sZW5ndGggLSAxKSB7CisgICAgICAgICAg
ICAgICAgcG9zdFByb2Nlc3Nlc1tpbmRleCArIDFdLmFjdGl2YXRlKHRoaXMuX3NjZW5lLmFjdGl2
ZUNhbWVyYSwgdGFyZ2V0VGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VGV4dHVyZSkgeworICAgICAgICAgICAgICAg
ICAgICBlbmdpbmUuYmluZEZyYW1lYnVmZmVyKHRhcmdldFRleHR1cmUsIGZhY2VJbmRleCwgdW5k
ZWZpbmVkLCB1bmRlZmluZWQsIGZvcmNlRnVsbHNjcmVlblZpZXdwb3J0LCB1bmRlZmluZWQsIGxv
ZExldmVsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGVuZ2luZS5yZXN0b3JlRGVmYXVsdEZyYW1lYnVmZmVyKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHBwID0gcG9zdFBy
b2Nlc3Nlc1tpbmRleF07CisgICAgICAgICAgICB2YXIgZWZmZWN0ID0gcHAuYXBwbHkoKTsKKyAg
ICAgICAgICAgIGlmIChlZmZlY3QpIHsKKyAgICAgICAgICAgICAgICBwcC5vbkJlZm9yZVJlbmRl
ck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGVmZmVjdCk7CisgICAgICAgICAgICAgICAgLy8g
VkJPcworICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVCdWZmZXJzKCk7CisgICAgICAgICAg
ICAgICAgZW5naW5lLmJpbmRCdWZmZXJzKHRoaXMuX3ZlcnRleEJ1ZmZlcnMsIHRoaXMuX2luZGV4
QnVmZmVyLCBlZmZlY3QpOworICAgICAgICAgICAgICAgIC8vIERyYXcgb3JkZXIKKyAgICAgICAg
ICAgICAgICBlbmdpbmUuZHJhd0VsZW1lbnRzVHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk1hdGVyaWFsIl0uVHJpYW5nbGVGaWxsTW9kZSwgMCwg
Nik7CisgICAgICAgICAgICAgICAgcHAub25BZnRlclJlbmRlck9ic2VydmFibGUubm90aWZ5T2Jz
ZXJ2ZXJzKGVmZmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVz
dG9yZSBkZXB0aCBidWZmZXIKKyAgICAgICAgZW5naW5lLnNldERlcHRoQnVmZmVyKHRydWUpOwor
ICAgICAgICBlbmdpbmUuc2V0RGVwdGhXcml0ZSh0cnVlKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIEZpbmFsaXplIHRoZSByZXN1bHQgb2YgdGhlIG91dHB1dCBvZiB0aGUgcG9zdHByb2Nlc3Nl
cy4KKyAgICAgKiBAcGFyYW0gZG9Ob3RQcmVzZW50IElmIHRydWUgdGhlIHJlc3VsdCB3aWxsIG5v
dCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHNjcmVlbi4KKyAgICAgKiBAcGFyYW0gdGFyZ2V0VGV4dHVy
ZSBUaGUgdGFyZ2V0IHRleHR1cmUgdG8gcmVuZGVyIHRvLgorICAgICAqIEBwYXJhbSBmYWNlSW5k
ZXggVGhlIGluZGV4IG9mIHRoZSBmYWNlIHRvIGJpbmQgdGhlIHRhcmdldCB0ZXh0dXJlIHRvLgor
ICAgICAqIEBwYXJhbSBwb3N0UHJvY2Vzc2VzIFRoZSBhcnJheSBvZiBwb3N0IHByb2Nlc3NlcyB0
byByZW5kZXIuCisgICAgICogQHBhcmFtIGZvcmNlRnVsbHNjcmVlblZpZXdwb3J0IGZvcmNlIGds
LnZpZXdwb3J0IHRvIGJlIGZ1bGwgc2NyZWVuIGVnLiAwLDAsdGV4dHVyZVdpZHRoLHRleHR1cmVI
ZWlnaHQgKGRlZmF1bHQ6IGZhbHNlKQorICAgICAqIEBoaWRkZW4KKyAgICAgKi8KKyAgICBQb3N0
UHJvY2Vzc01hbmFnZXIucHJvdG90eXBlLl9maW5hbGl6ZUZyYW1lID0gZnVuY3Rpb24gKGRvTm90
UHJlc2VudCwgdGFyZ2V0VGV4dHVyZSwgZmFjZUluZGV4LCBwb3N0UHJvY2Vzc2VzLCBmb3JjZUZ1
bGxzY3JlZW5WaWV3cG9ydCkgeworICAgICAgICBpZiAoZm9yY2VGdWxsc2NyZWVuVmlld3BvcnQg
PT09IHZvaWQgMCkgeyBmb3JjZUZ1bGxzY3JlZW5WaWV3cG9ydCA9IGZhbHNlOyB9CisgICAgICAg
IHZhciBjYW1lcmEgPSB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmE7CisgICAgICAgIGlmICghY2Ft
ZXJhKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcG9zdFByb2Nl
c3NlcyA9IHBvc3RQcm9jZXNzZXMgfHwgY2FtZXJhLl9wb3N0UHJvY2Vzc2VzLmZpbHRlcihmdW5j
dGlvbiAocHApIHsgcmV0dXJuIHBwICE9IG51bGw7IH0pOworICAgICAgICBpZiAocG9zdFByb2Nl
c3Nlcy5sZW5ndGggPT09IDAgfHwgIXRoaXMuX3NjZW5lLnBvc3RQcm9jZXNzZXNFbmFibGVkKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHRo
aXMuX3NjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbiA9
IHBvc3RQcm9jZXNzZXMubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgeworICAgICAgICAg
ICAgdmFyIHBwID0gcG9zdFByb2Nlc3Nlc1tpbmRleF07CisgICAgICAgICAgICBpZiAoaW5kZXgg
PCBsZW4gLSAxKSB7CisgICAgICAgICAgICAgICAgcHAuX291dHB1dFRleHR1cmUgPSBwb3N0UHJv
Y2Vzc2VzW2luZGV4ICsgMV0uYWN0aXZhdGUoY2FtZXJhLCB0YXJnZXRUZXh0dXJlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0YXJnZXRU
ZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIGVuZ2luZS5iaW5kRnJhbWVidWZmZXIodGFy
Z2V0VGV4dHVyZSwgZmFjZUluZGV4LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZm9yY2VGdWxsc2Ny
ZWVuVmlld3BvcnQpOworICAgICAgICAgICAgICAgICAgICBwcC5fb3V0cHV0VGV4dHVyZSA9IHRh
cmdldFRleHR1cmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBlbmdpbmUucmVzdG9yZURlZmF1bHRGcmFtZWJ1ZmZlcigpOwor
ICAgICAgICAgICAgICAgICAgICBwcC5fb3V0cHV0VGV4dHVyZSA9IG51bGw7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRvTm90UHJlc2VudCkgewor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGVm
ZmVjdCA9IHBwLmFwcGx5KCk7CisgICAgICAgICAgICBpZiAoZWZmZWN0KSB7CisgICAgICAgICAg
ICAgICAgcHAub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhlZmZlY3Qp
OworICAgICAgICAgICAgICAgIC8vIFZCT3MKKyAgICAgICAgICAgICAgICB0aGlzLl9wcmVwYXJl
QnVmZmVycygpOworICAgICAgICAgICAgICAgIGVuZ2luZS5iaW5kQnVmZmVycyh0aGlzLl92ZXJ0
ZXhCdWZmZXJzLCB0aGlzLl9pbmRleEJ1ZmZlciwgZWZmZWN0KTsKKyAgICAgICAgICAgICAgICAv
LyBEcmF3IG9yZGVyCisgICAgICAgICAgICAgICAgZW5naW5lLmRyYXdFbGVtZW50c1R5cGUoX01h
dGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJNYXRlcmlhbCJd
LlRyaWFuZ2xlRmlsbE1vZGUsIDAsIDYpOworICAgICAgICAgICAgICAgIHBwLm9uQWZ0ZXJSZW5k
ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhlZmZlY3QpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIC8vIFJlc3RvcmUgc3RhdGVzCisgICAgICAgIGVuZ2luZS5zZXREZXB0
aEJ1ZmZlcih0cnVlKTsKKyAgICAgICAgZW5naW5lLnNldERlcHRoV3JpdGUodHJ1ZSk7CisgICAg
ICAgIGVuZ2luZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bIkNvbnN0YW50cyJdLkFMUEhBX0RJU0FCTEUpOworICAgIH07CisgICAg
LyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIHBvc3QgcHJvY2VzcyBtYW5hZ2VyLgorICAgICAq
LworICAgIFBvc3RQcm9jZXNzTWFuYWdlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX3ZlcnRleEJ1ZmZlcnNbX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25L
aW5kXTsKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgYnVmZmVyLmRpc3Bvc2Uo
KTsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXSA9IG51
bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2luZGV4QnVmZmVyKSB7CisgICAgICAg
ICAgICB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5fcmVsZWFzZUJ1ZmZlcih0aGlzLl9pbmRleEJ1
ZmZlcik7CisgICAgICAgICAgICB0aGlzLl9pbmRleEJ1ZmZlciA9IG51bGw7CisgICAgICAgIH0K
KyAgICB9OworICAgIHJldHVybiBQb3N0UHJvY2Vzc01hbmFnZXI7Cit9KCkpOworCisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvcmVmcmFjdGlvblBvc3RQcm9jZXNzLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9yZWZyYWN0aW9uUG9zdFByb2Nlc3MudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFJlZnJhY3Rpb25Qb3N0UHJvY2VzcyAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJSZWZyYWN0aW9uUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFJlZnJhY3Rpb25Qb3N0UHJvY2VzczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVy
ZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJvY2Vz
cyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1NoYWRlcnNfcmVmcmFjdGlvbl9mcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9yZWZyYWN0aW9u
LmZyYWdtZW50ICovICIuL1NoYWRlcnMvcmVmcmFjdGlvbi5mcmFnbWVudC50cyIpOworCisKKwor
CisvKioKKyAqIFBvc3QgcHJvY2VzcyB3aGljaCBhcHBsaWVzIGEgcmVmcmFjdGluIHRleHR1cmUK
KyAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3VzZV9wb3N0
cHJvY2Vzc2VzI3JlZnJhY3Rpb24KKyAqLwordmFyIFJlZnJhY3Rpb25Qb3N0UHJvY2VzcyA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJfX2V4dGVuZHMiXShSZWZyYWN0aW9uUG9zdFByb2Nlc3MsIF9zdXBl
cik7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIFJlZnJhY3Rpb25Qb3N0UHJvY2Vz
cworICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX3Vz
ZV9wb3N0cHJvY2Vzc2VzI3JlZnJhY3Rpb24KKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBv
ZiB0aGUgZWZmZWN0LgorICAgICAqIEBwYXJhbSByZWZyYWN0aW9uVGV4dHVyZVVybCBVcmwgb2Yg
dGhlIHJlZnJhY3Rpb24gdGV4dHVyZSB0byB1c2UKKyAgICAgKiBAcGFyYW0gY29sb3IgdGhlIGJh
c2UgY29sb3Igb2YgdGhlIHJlZnJhY3Rpb24gKHVzZWQgdG8gdGFpbnQgdGhlIHJlbmRlcmluZykK
KyAgICAgKiBAcGFyYW0gZGVwdGggc2ltdWxhdGVkIHJlZnJhY3Rpb24gZGVwdGgKKyAgICAgKiBA
cGFyYW0gY29sb3JMZXZlbCB0aGUgY29lZmZpY2llbnQgb2YgdGhlIGJhc2UgY29sb3IgKDAgdG8g
cmVtb3ZlIGJhc2UgY29sb3IgdGFpbnRpbmcpCisgICAgICogQHBhcmFtIGNhbWVyYSBUaGUgY2Ft
ZXJhIHRvIGFwcGx5IHRoZSByZW5kZXIgcGFzcyB0by4KKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBU
aGUgcmVxdWlyZWQgd2lkdGgvaGVpZ2h0IHJhdGlvIHRvIGRvd25zaXplIHRvIGJlZm9yZSBjb21w
dXRpbmcgdGhlIHJlbmRlciBwYXNzLgorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgVGhlIHNh
bXBsaW5nIG1vZGUgdG8gYmUgdXNlZCB3aGVuIGNvbXB1dGluZyB0aGUgcGFzcy4gKGRlZmF1bHQ6
IDApCisgICAgICogQHBhcmFtIGVuZ2luZSBUaGUgZW5naW5lIHdoaWNoIHRoZSBwb3N0IHByb2Nl
c3Mgd2lsbCBiZSBhcHBsaWVkLiAoZGVmYXVsdDogY3VycmVudCBlbmdpbmUpCisgICAgICogQHBh
cmFtIHJldXNhYmxlIElmIHRoZSBwb3N0IHByb2Nlc3MgY2FuIGJlIHJldXNlZCBvbiB0aGUgc2Ft
ZSBmcmFtZS4gKGRlZmF1bHQ6IGZhbHNlKQorICAgICAqLworICAgIGZ1bmN0aW9uIFJlZnJhY3Rp
b25Qb3N0UHJvY2VzcyhuYW1lLCByZWZyYWN0aW9uVGV4dHVyZVVybCwgCisgICAgLyoqIHRoZSBi
YXNlIGNvbG9yIG9mIHRoZSByZWZyYWN0aW9uICh1c2VkIHRvIHRhaW50IHRoZSByZW5kZXJpbmcp
ICovCisgICAgY29sb3IsIAorICAgIC8qKiBzaW11bGF0ZWQgcmVmcmFjdGlvbiBkZXB0aCAqLwor
ICAgIGRlcHRoLCAKKyAgICAvKiogdGhlIGNvZWZmaWNpZW50IG9mIHRoZSBiYXNlIGNvbG9yICgw
IHRvIHJlbW92ZSBiYXNlIGNvbG9yIHRhaW50aW5nKSAqLworICAgIGNvbG9yTGV2ZWwsIG9wdGlv
bnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB7CisgICAgICAgIHZh
ciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsICJyZWZyYWN0aW9uIiwgWyJiYXNlQ29s
b3IiLCAiZGVwdGgiLCAiY29sb3JMZXZlbCJdLCBbInJlZnJhY3Rpb25TYW1wbGVyIl0sIG9wdGlv
bnMsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUsIHJldXNhYmxlKSB8fCB0aGlzOworICAg
ICAgICBfdGhpcy5jb2xvciA9IGNvbG9yOworICAgICAgICBfdGhpcy5kZXB0aCA9IGRlcHRoOwor
ICAgICAgICBfdGhpcy5jb2xvckxldmVsID0gY29sb3JMZXZlbDsKKyAgICAgICAgX3RoaXMuX293
blJlZnJhY3Rpb25UZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMub25BY3RpdmF0ZU9ic2Vy
dmFibGUuYWRkKGZ1bmN0aW9uIChjYW0pIHsKKyAgICAgICAgICAgIF90aGlzLl9yZWZUZXh0dXJl
ID0gX3RoaXMuX3JlZlRleHR1cmUgfHwgbmV3IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUZXh0dXJlIl0ocmVmcmFjdGlvblRleHR1cmVV
cmwsIGNhbS5nZXRTY2VuZSgpKTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLm9uQXBwbHlP
YnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0
Q29sb3IzKCJiYXNlQ29sb3IiLCBfdGhpcy5jb2xvcik7CisgICAgICAgICAgICBlZmZlY3Quc2V0
RmxvYXQoImRlcHRoIiwgX3RoaXMuZGVwdGgpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0
KCJjb2xvckxldmVsIiwgX3RoaXMuY29sb3JMZXZlbCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0
VGV4dHVyZSgicmVmcmFjdGlvblNhbXBsZXIiLCBfdGhpcy5fcmVmVGV4dHVyZSk7CisgICAgICAg
IH0pOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShSZWZyYWN0aW9uUG9zdFByb2Nlc3MucHJvdG90eXBlLCAicmVmcmFjdGlvblRleHR1cmUi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHJlZnJhY3Rpb24g
dGV4dHVyZQorICAgICAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHlvdSBhcmUgcmVzcG9uc2libGUg
Zm9yIGRpc3Bvc2luZyB0aGUgdGV4dHVyZSBpZiB5b3Ugc2V0IGl0IG1hbnVhbGx5CisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9yZWZUZXh0dXJlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgaWYgKHRoaXMuX3JlZlRleHR1cmUgJiYgdGhpcy5fb3duUmVmcmFjdGlv
blRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZWZUZXh0dXJlLmRpc3Bvc2UoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3JlZlRleHR1cmUgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHRoaXMuX293blJlZnJhY3Rpb25UZXh0dXJlID0gZmFsc2U7CisgICAgICAgIH0s
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQor
ICAgIH0pOworICAgIC8vIE1ldGhvZHMKKyAgICAvKioKKyAgICAgKiBEaXNwb3NlcyBvZiB0aGUg
cG9zdCBwcm9jZXNzCisgICAgICogQHBhcmFtIGNhbWVyYSBDYW1lcmEgdG8gZGlzcG9zZSBwb3N0
IHByb2Nlc3Mgb24KKyAgICAgKi8KKyAgICBSZWZyYWN0aW9uUG9zdFByb2Nlc3MucHJvdG90eXBl
LmRpc3Bvc2UgPSBmdW5jdGlvbiAoY2FtZXJhKSB7CisgICAgICAgIGlmICh0aGlzLl9yZWZUZXh0
dXJlICYmIHRoaXMuX293blJlZnJhY3Rpb25UZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLl9y
ZWZUZXh0dXJlLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX3JlZlRleHR1cmUgPSBudWxs
OworICAgICAgICB9CisgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMs
IGNhbWVyYSk7CisgICAgfTsKKyAgICByZXR1cm4gUmVmcmFjdGlvblBvc3RQcm9jZXNzOworfShf
cG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUG9zdFByb2Nlc3MiXSkp
OworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvc2hhcnBlblBvc3RQ
cm9jZXNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy9zaGFycGVuUG9zdFByb2Nlc3MudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IFNoYXJwZW5Qb3N0UHJvY2VzcyAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTaGFycGVuUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIFNoYXJwZW5Qb3N0UHJvY2VzczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9j
ZXNzZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfc2hhcnBlbl9mcmFnbWVudF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
U2hhZGVycy9zaGFycGVuLmZyYWdtZW50ICovICIuL1NoYWRlcnMvc2hhcnBlbi5mcmFnbWVudC50
cyIpOworCisKKworCisvKioKKyAqIFRoZSBTaGFycGVuUG9zdFByb2Nlc3MgYXBwbGllcyBhIHNo
YXJwZW4ga2VybmVsIHRvIGV2ZXJ5IHBpeGVsCisgKiBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9LZXJuZWxfKGltYWdlX3Byb2Nlc3NpbmcpCisgKi8KK3ZhciBTaGFycGVuUG9zdFBy
b2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU2hhcnBlblBvc3RQcm9jZXNz
LCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgQ29udm9s
dXRpb25Qb3N0UHJvY2VzcworICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBlZmZl
Y3QuCisgICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIHJlcXVpcmVkIHdpZHRoL2hlaWdodCByYXRp
byB0byBkb3duc2l6ZSB0byBiZWZvcmUgY29tcHV0aW5nIHRoZSByZW5kZXIgcGFzcy4KKyAgICAg
KiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gYXBwbHkgdGhlIHJlbmRlciBwYXNzIHRvLgor
ICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGUgVGhlIHNhbXBsaW5nIG1vZGUgdG8gYmUgdXNlZCB3
aGVuIGNvbXB1dGluZyB0aGUgcGFzcy4gKGRlZmF1bHQ6IDApCisgICAgICogQHBhcmFtIGVuZ2lu
ZSBUaGUgZW5naW5lIHdoaWNoIHRoZSBwb3N0IHByb2Nlc3Mgd2lsbCBiZSBhcHBsaWVkLiAoZGVm
YXVsdDogY3VycmVudCBlbmdpbmUpCisgICAgICogQHBhcmFtIHJldXNhYmxlIElmIHRoZSBwb3N0
IHByb2Nlc3MgY2FuIGJlIHJldXNlZCBvbiB0aGUgc2FtZSBmcmFtZS4gKGRlZmF1bHQ6IGZhbHNl
KQorICAgICAqIEBwYXJhbSB0ZXh0dXJlVHlwZSBUeXBlIG9mIHRleHR1cmVzIHVzZWQgd2hlbiBw
ZXJmb3JtaW5nIHRoZSBwb3N0IHByb2Nlc3MuIChkZWZhdWx0OiAwKQorICAgICAqIEBwYXJhbSBi
bG9ja0NvbXBpbGF0aW9uIElmIGNvbXBpbGF0aW9uIG9mIHRoZSBzaGFkZXIgc2hvdWxkIG5vdCBi
ZSBkb25lIGluIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIHVwZGF0ZUVmZmVjdCBtZXRob2QgY2FuIGJl
IHVzZWQgdG8gY29tcGlsZSB0aGUgc2hhZGVyIGF0IGEgbGF0ZXIgdGltZS4gKGRlZmF1bHQ6IGZh
bHNlKQorICAgICAqLworICAgIGZ1bmN0aW9uIFNoYXJwZW5Qb3N0UHJvY2VzcyhuYW1lLCBvcHRp
b25zLCBjYW1lcmEsIHNhbXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgdGV4dHVyZVR5cGUs
IGJsb2NrQ29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKHRleHR1cmVUeXBlID09PSB2b2lkIDAp
IHsgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAg
IGlmIChibG9ja0NvbXBpbGF0aW9uID09PSB2b2lkIDApIHsgYmxvY2tDb21waWxhdGlvbiA9IGZh
bHNlOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsICJzaGFy
cGVuIiwgWyJzaGFycG5lc3NBbW91bnRzIiwgInNjcmVlblNpemUiXSwgbnVsbCwgb3B0aW9ucywg
Y2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUsIG51bGwsIHRleHR1cmVUeXBl
LCB1bmRlZmluZWQsIG51bGwsIGJsb2NrQ29tcGlsYXRpb24pIHx8IHRoaXM7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBIb3cgbXVjaCBvZiB0aGUgb3JpZ2luYWwgY29sb3Igc2hvdWxkIGJlIGFw
cGxpZWQuIFNldHRpbmcgdGhpcyB0byAwIHdpbGwgZGlzcGxheSBlZGdlIGRldGVjdGlvbi4gKGRl
ZmF1bHQ6IDEpCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5jb2xvckFtb3VudCA9IDEuMDsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEhvdyBtdWNoIHNoYXJwbmVzcyBzaG91bGQgYmUgYXBw
bGllZCAoZGVmYXVsdDogMC4zKQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZWRnZUFtb3Vu
dCA9IDAuMzsKKyAgICAgICAgX3RoaXMub25BcHBseSA9IGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAg
ICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDIoInNjcmVlblNpemUiLCBfdGhpcy53aWR0aCwgX3Ro
aXMuaGVpZ2h0KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdDIoInNoYXJwbmVzc0Ftb3Vu
dHMiLCBfdGhpcy5lZGdlQW1vdW50LCBfdGhpcy5jb2xvckFtb3VudCk7CisgICAgICAgIH07Cisg
ICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9CisgICAgcmV0dXJuIFNoYXJwZW5Qb3N0UHJvY2Vz
czsKK30oX3Bvc3RQcm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9j
ZXNzIl0pKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL3N0ZXJl
b3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNzLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0
UHJvY2Vzc2VzL3N0ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFN0ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNz
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Njb3BpY0ludGVy
bGFjZVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdGVyZW9zY29waWNJbnRlcmxh
Y2VQb3N0UHJvY2VzczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICov
ICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRo
cy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vz
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9wb3N0UHJvY2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfc3RlcmVvc2NvcGljSW50ZXJsYWNlX2ZyYWdt
ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9TaGFkZXJzL3N0ZXJlb3Njb3BpY0ludGVybGFjZS5mcmFnbWVudCAqLyAiLi9TaGFkZXJz
L3N0ZXJlb3Njb3BpY0ludGVybGFjZS5mcmFnbWVudC50cyIpOworCisKKworCisvKioKKyAqIFN0
ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNzIHVzZWQgdG8gcmVuZGVyIHN0ZXJlbyB2aWV3
cyBmcm9tIGEgcmlnZ2VkIGNhbWVyYQorICovCit2YXIgU3RlcmVvc2NvcGljSW50ZXJsYWNlUG9z
dFByb2Nlc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAgdHNsaWJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU3RlcmVvc2NvcGljSW50
ZXJsYWNlUG9zdFByb2Nlc3MsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMg
YSBTdGVyZW9zY29waWNJbnRlcmxhY2VQb3N0UHJvY2VzcworICAgICAqIEBwYXJhbSBuYW1lIFRo
ZSBuYW1lIG9mIHRoZSBlZmZlY3QuCisgICAgICogQHBhcmFtIHJpZ0NhbWVyYXMgVGhlIHJpZyBj
YW1lcmFzIHRvIGJlIGFwcGxlZCB0byB0aGUgcG9zdCBwcm9jZXNzCisgICAgICogQHBhcmFtIGlz
U3RlcmVvc2NvcGljSG9yaXogSWYgdGhlIHJlbmRlcmVkIHJlc3VsdHMgYXJlIGhvcml6b250YWwg
b3IgdmVydGljbGUKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdNb2RlIFRoZSBzYW1wbGluZyBtb2Rl
IHRvIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIHBhc3MuIChkZWZhdWx0OiAwKQorICAgICAq
IEBwYXJhbSBlbmdpbmUgVGhlIGVuZ2luZSB3aGljaCB0aGUgcG9zdCBwcm9jZXNzIHdpbGwgYmUg
YXBwbGllZC4gKGRlZmF1bHQ6IGN1cnJlbnQgZW5naW5lKQorICAgICAqIEBwYXJhbSByZXVzYWJs
ZSBJZiB0aGUgcG9zdCBwcm9jZXNzIGNhbiBiZSByZXVzZWQgb24gdGhlIHNhbWUgZnJhbWUuIChk
ZWZhdWx0OiBmYWxzZSkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdGVyZW9zY29waWNJbnRlcmxh
Y2VQb3N0UHJvY2VzcyhuYW1lLCByaWdDYW1lcmFzLCBpc1N0ZXJlb3Njb3BpY0hvcml6LCBzYW1w
bGluZ01vZGUsIGVuZ2luZSwgcmV1c2FibGUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVy
LmNhbGwodGhpcywgbmFtZSwgInN0ZXJlb3Njb3BpY0ludGVybGFjZSIsIFsnc3RlcFNpemUnXSwg
WydjYW1BU2FtcGxlciddLCAxLCByaWdDYW1lcmFzWzFdLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwg
cmV1c2FibGUsIGlzU3RlcmVvc2NvcGljSG9yaXogPyAiI2RlZmluZSBJU19TVEVSRU9TQ09QSUNf
SE9SSVogMSIgOiB1bmRlZmluZWQpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9wYXNzZWRQcm9j
ZXNzID0gcmlnQ2FtZXJhc1swXS5fcmlnUG9zdFByb2Nlc3M7CisgICAgICAgIF90aGlzLl9zdGVw
U2l6ZSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siVmVjdG9yMiJdKDEgLyBfdGhpcy53aWR0aCwgMSAvIF90aGlzLmhlaWdodCk7CisgICAgICAg
IF90aGlzLm9uU2l6ZUNoYW5nZWRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICBfdGhpcy5fc3RlcFNpemUgPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjIiXSgxIC8gX3RoaXMud2lkdGgsIDEgLyBfdGhpcy5o
ZWlnaHQpOworICAgICAgICB9KTsKKyAgICAgICAgX3RoaXMub25BcHBseU9ic2VydmFibGUuYWRk
KGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlRnJvbVBv
c3RQcm9jZXNzKCJjYW1BU2FtcGxlciIsIF90aGlzLl9wYXNzZWRQcm9jZXNzKTsKKyAgICAgICAg
ICAgIGVmZmVjdC5zZXRGbG9hdDIoInN0ZXBTaXplIiwgX3RoaXMuX3N0ZXBTaXplLngsIF90aGlz
Ll9zdGVwU2l6ZS55KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBfdGhpczsKKyAgICB9
CisgICAgcmV0dXJuIFN0ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNzOworfShfcG9zdFBy
b2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUG9zdFByb2Nlc3MiXSkpOworCisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvdG9uZW1hcFBvc3RQcm9jZXNz
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vUG9zdFByb2Nlc3Nlcy90b25lbWFwUG9zdFByb2Nlc3MudHMgKioqIQorICBc
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFRvbmVtYXBwaW5nT3BlcmF0b3IsIFRvbmVtYXBQb3N0UHJvY2VzcyAqLwor
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUb25lbWFwcGluZ09wZXJhdG9yIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBUb25lbWFwcGluZ09wZXJhdG9yOyB9KTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlRvbmVtYXBQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVG9uZW1hcFBv
c3RQcm9jZXNzOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4u
L25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vcG9zdFByb2Nlc3MgKi8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJv
Y2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
RW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc190b25lbWFwX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL3RvbmVt
YXAuZnJhZ21lbnQgKi8gIi4vU2hhZGVycy90b25lbWFwLmZyYWdtZW50LnRzIik7CisKKworCisK
Ky8qKiBEZWZpbmVzIG9wZXJhdG9yIHVzZWQgZm9yIHRvbmVtYXBwaW5nICovCit2YXIgVG9uZW1h
cHBpbmdPcGVyYXRvcjsKKyhmdW5jdGlvbiAoVG9uZW1hcHBpbmdPcGVyYXRvcikgeworICAgIC8q
KiBIYWJsZSAqLworICAgIFRvbmVtYXBwaW5nT3BlcmF0b3JbVG9uZW1hcHBpbmdPcGVyYXRvclsi
SGFibGUiXSA9IDBdID0gIkhhYmxlIjsKKyAgICAvKiogUmVpbmhhcmQgKi8KKyAgICBUb25lbWFw
cGluZ09wZXJhdG9yW1RvbmVtYXBwaW5nT3BlcmF0b3JbIlJlaW5oYXJkIl0gPSAxXSA9ICJSZWlu
aGFyZCI7CisgICAgLyoqIEhlamlEYXdzb24gKi8KKyAgICBUb25lbWFwcGluZ09wZXJhdG9yW1Rv
bmVtYXBwaW5nT3BlcmF0b3JbIkhlamlEYXdzb24iXSA9IDJdID0gIkhlamlEYXdzb24iOworICAg
IC8qKiBQaG90b2dyYXBoaWMgKi8KKyAgICBUb25lbWFwcGluZ09wZXJhdG9yW1RvbmVtYXBwaW5n
T3BlcmF0b3JbIlBob3RvZ3JhcGhpYyJdID0gM10gPSAiUGhvdG9ncmFwaGljIjsKK30pKFRvbmVt
YXBwaW5nT3BlcmF0b3IgfHwgKFRvbmVtYXBwaW5nT3BlcmF0b3IgPSB7fSkpOworLyoqCisgKiBE
ZWZpbmVzIGEgcG9zdCBwcm9jZXNzIHRvIGFwcGx5IHRvbmUgbWFwcGluZworICovCit2YXIgVG9u
ZW1hcFBvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAg
IHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKFRvbmVtYXBQ
b3N0UHJvY2VzcywgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFRvbmVt
YXBQb3N0UHJvY2VzcworICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhl
IHBvc3Rwcm9jZXNzCisgICAgICogQHBhcmFtIF9vcGVyYXRvciBkZWZpbmVzIHRoZSBvcGVyYXRv
ciB0byB1c2UKKyAgICAgKiBAcGFyYW0gZXhwb3N1cmVBZGp1c3RtZW50IGRlZmluZXMgdGhlIHJl
cXVpcmVkIGV4cG9zdXJlIGFkanVzdGVtZW50CisgICAgICogQHBhcmFtIGNhbWVyYSBkZWZpbmVz
IHRoZSBjYW1lcmEgdG8gdXNlIChjYW4gYmUgbnVsbCkKKyAgICAgKiBAcGFyYW0gc2FtcGxpbmdN
b2RlIGRlZmluZXMgdGhlIHJlcXVpcmVkIHNhbXBsaW5nIG1vZGUgKEJBQllMT04uVGV4dHVyZS5C
SUxJTkVBUl9TQU1QTElOR01PREUgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gZW5naW5lIGRl
ZmluZXMgdGhlIGhvc3RpbmcgZW5naW5lIChjYW4gYmUgaWdub3JlIGlmIGNhbWVyYSBpcyBzZXQp
CisgICAgICogQHBhcmFtIHRleHR1cmVGb3JtYXQgZGVmaW5lcyB0aGUgdGV4dHVyZSBmb3JtYXQg
dG8gdXNlIChCQUJZTE9OLkVuZ2luZS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQgYnkgZGVmYXVs
dCkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBUb25lbWFwUG9zdFByb2Nlc3MobmFtZSwgX29wZXJh
dG9yLCAKKyAgICAvKiogRGVmaW5lcyB0aGUgcmVxdWlyZWQgZXhwb3N1cmUgYWRqdXN0ZW1lbnQg
Ki8KKyAgICBleHBvc3VyZUFkanVzdG1lbnQsIGNhbWVyYSwgc2FtcGxpbmdNb2RlLCBlbmdpbmUs
IHRleHR1cmVGb3JtYXQpIHsKKyAgICAgICAgaWYgKHNhbXBsaW5nTW9kZSA9PT0gdm9pZCAwKSB7
IHNhbXBsaW5nTW9kZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFX0JJTElORUFSX1NBTVBMSU5HTU9ERTsgfQorICAg
ICAgICBpZiAodGV4dHVyZUZvcm1hdCA9PT0gdm9pZCAwKSB7IHRleHR1cmVGb3JtYXQgPSBfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0u
VEVYVFVSRVRZUEVfVU5TSUdORURfSU5UOyB9CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5j
YWxsKHRoaXMsIG5hbWUsICJ0b25lbWFwIiwgWyJfRXhwb3N1cmVBZGp1c3RtZW50Il0sIG51bGws
IDEuMCwgY2FtZXJhLCBzYW1wbGluZ01vZGUsIGVuZ2luZSwgdHJ1ZSwgbnVsbCwgdGV4dHVyZUZv
cm1hdCkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuX29wZXJhdG9yID0gX29wZXJhdG9yOworICAg
ICAgICBfdGhpcy5leHBvc3VyZUFkanVzdG1lbnQgPSBleHBvc3VyZUFkanVzdG1lbnQ7CisgICAg
ICAgIHZhciBkZWZpbmVzID0gIiNkZWZpbmUgIjsKKyAgICAgICAgaWYgKF90aGlzLl9vcGVyYXRv
ciA9PT0gVG9uZW1hcHBpbmdPcGVyYXRvci5IYWJsZSkgeworICAgICAgICAgICAgZGVmaW5lcyAr
PSAiSEFCTEVfVE9ORU1BUFBJTkciOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKF90aGlz
Ll9vcGVyYXRvciA9PT0gVG9uZW1hcHBpbmdPcGVyYXRvci5SZWluaGFyZCkgeworICAgICAgICAg
ICAgZGVmaW5lcyArPSAiUkVJTkhBUkRfVE9ORU1BUFBJTkciOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKF90aGlzLl9vcGVyYXRvciA9PT0gVG9uZW1hcHBpbmdPcGVyYXRvci5IZWppRGF3
c29uKSB7CisgICAgICAgICAgICBkZWZpbmVzICs9ICJPUFRJTUlaRURfSEVKSURBV1NPTl9UT05F
TUFQUElORyI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoX3RoaXMuX29wZXJhdG9yID09
PSBUb25lbWFwcGluZ09wZXJhdG9yLlBob3RvZ3JhcGhpYykgeworICAgICAgICAgICAgZGVmaW5l
cyArPSAiUEhPVE9HUkFQSElDX1RPTkVNQVBQSU5HIjsKKyAgICAgICAgfQorICAgICAgICAvL3Nh
ZGx5IGEgc2Vjb25kIGNhbGwgdG8gY3JlYXRlIHRoZSBlZmZlY3QuCisgICAgICAgIF90aGlzLnVw
ZGF0ZUVmZmVjdChkZWZpbmVzKTsKKyAgICAgICAgX3RoaXMub25BcHBseSA9IGZ1bmN0aW9uIChl
ZmZlY3QpIHsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiX0V4cG9zdXJlQWRqdXN0bWVu
dCIsIF90aGlzLmV4cG9zdXJlQWRqdXN0bWVudCk7CisgICAgICAgIH07CisgICAgICAgIHJldHVy
biBfdGhpczsKKyAgICB9CisgICAgcmV0dXJuIFRvbmVtYXBQb3N0UHJvY2VzczsKK30oX3Bvc3RQ
cm9jZXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBvc3RQcm9jZXNzIl0pKTsKKwor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9Qb3N0UHJvY2Vzc2VzL3ZvbHVtZXRyaWNMaWdodFNj
YXR0ZXJpbmdQb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Bvc3RQcm9j
ZXNzZXMvdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUG9z
dFByb2Nlc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVm9sdW1ldHJp
Y0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBWb2x1bWV0
cmljTGlnaHRTY2F0dGVyaW5nUG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvZGVjb3JhdG9y
cyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAq
LyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
ZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2Fic3Ry
YWN0TWVzaCAqLyAiLi9NZXNoZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvbWVzaCAqLyAiLi9NZXNoZXMvbWVzaC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFs
cy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvbWF0ZXJpYWxI
ZWxwZXIgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc3RhbmRh
cmRNYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFs
cy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJn
ZXRUZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRlclRhcmdldFRleHR1cmUgKi8gIi4v
TWF0ZXJpYWxzL1RleHR1cmVzL3JlbmRlclRhcmdldFRleHR1cmUudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Bvc3RQcm9jZXNzICovICIuL1Bvc3RQcm9jZXNz
ZXMvcG9zdFByb2Nlc3MudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfQnVpbGRlcnNfcGxhbmVCdWlsZGVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWVzaGVzL0J1aWxkZXJzL3BsYW5lQnVpbGRlciAqLyAiLi9NZXNoZXMvQnVpbGRlcnMvcGxh
bmVCdWlsZGVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfZGVwdGhf
dmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vU2hhZGVycy9kZXB0aC52ZXJ0ZXggKi8gIi4vU2hhZGVycy9kZXB0aC52ZXJ0ZXgu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc192b2x1bWV0cmljTGlnaHRT
Y2F0dGVyaW5nX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nLmZy
YWdtZW50ICovICIuL1NoYWRlcnMvdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZy5mcmFnbWVudC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX3ZvbHVtZXRyaWNMaWdodFNj
YXR0ZXJpbmdQYXNzX3ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bh
c3MudmVydGV4ICovICIuL1NoYWRlcnMvdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3MudmVy
dGV4LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfdm9sdW1ldHJpY0xp
Z2h0U2NhdHRlcmluZ1Bhc3NfZnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL3ZvbHVtZXRyaWNMaWdodFNjYXR0
ZXJpbmdQYXNzLmZyYWdtZW50ICovICIuL1NoYWRlcnMvdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmlu
Z1Bhc3MuZnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZpZXdwb3J0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0
aC52aWV3cG9ydCAqLyAiLi9NYXRocy9tYXRoLnZpZXdwb3J0LnRzIik7CisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisvKioKKyAqICBJbnNwaXJlZCBieSBodHRwOi8v
aHR0cC5kZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMy9ncHVnZW1zM19jaDEzLmh0bWwKKyAq
LwordmFyIFZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzcyA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2V4dGVuZHMiXShWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUG9zdFByb2Nlc3Ms
IF9zdXBlcik7CisgICAgLyoqCisgICAgICogQGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFtIG5h
bWUgVGhlIHBvc3QtcHJvY2VzcyBuYW1lCisgICAgICogQHBhcmFtIHJhdGlvIFRoZSBzaXplIG9m
IHRoZSBwb3N0LXByb2Nlc3MgYW5kL29yIGludGVybmFsIHBhc3MgKDAuNSBtZWFucyB0aGF0IHlv
dXIgcG9zdHByb2Nlc3Mgd2lsbCBoYXZlIGEgd2lkdGggPSBjYW52YXMud2lkdGggMC41IGFuZCBh
IGhlaWdodCA9IGNhbnZhcy5oZWlnaHQgMC41KQorICAgICAqIEBwYXJhbSBjYW1lcmEgVGhlIGNh
bWVyYSB0aGF0IHRoZSBwb3N0LXByb2Nlc3Mgd2lsbCBiZSBhdHRhY2hlZCB0bworICAgICAqIEBw
YXJhbSBtZXNoIFRoZSBtZXNoIHVzZWQgdG8gY3JlYXRlIHRoZSBsaWdodCBzY2F0dGVyaW5nCisg
ICAgICogQHBhcmFtIHNhbXBsZXMgVGhlIHBvc3QtcHJvY2VzcyBxdWFsaXR5LCBkZWZhdWx0IDEw
MAorICAgICAqIEBwYXJhbSBzYW1wbGluZ01vZGVUaGUgcG9zdC1wcm9jZXNzIGZpbHRlcmluZyBt
b2RlCisgICAgICogQHBhcmFtIGVuZ2luZSBUaGUgYmFieWxvbiBlbmdpbmUKKyAgICAgKiBAcGFy
YW0gcmV1c2FibGUgSWYgdGhlIHBvc3QtcHJvY2VzcyBpcyByZXVzYWJsZQorICAgICAqIEBwYXJh
bSBzY2VuZSBUaGUgY29uc3RydWN0b3IgbmVlZHMgYSBzY2VuZSByZWZlcmVuY2UgdG8gaW5pdGlh
bGl6ZSBpbnRlcm5hbCBjb21wb25lbnRzLiBJZiAiY2FtZXJhIiBpcyBudWxsIGEgInNjZW5lIiBt
dXN0IGJlIHByb3ZpZGVkCisgICAgICovCisgICAgZnVuY3Rpb24gVm9sdW1ldHJpY0xpZ2h0U2Nh
dHRlcmluZ1Bvc3RQcm9jZXNzKG5hbWUsIHJhdGlvLCBjYW1lcmEsIG1lc2gsIHNhbXBsZXMsIHNh
bXBsaW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgc2NlbmUpIHsKKyAgICAgICAgaWYgKHNhbXBs
ZXMgPT09IHZvaWQgMCkgeyBzYW1wbGVzID0gMTAwOyB9CisgICAgICAgIGlmIChzYW1wbGluZ01v
ZGUgPT09IHZvaWQgMCkgeyBzYW1wbGluZ01vZGUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIlRleHR1cmUiXS5CSUxJTkVBUl9TQU1Q
TElOR01PREU7IH0KKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSwg
InZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmciLCBbImRlY2F5IiwgImV4cG9zdXJlIiwgIndlaWdo
dCIsICJtZXNoUG9zaXRpb25PblNjcmVlbiIsICJkZW5zaXR5Il0sIFsibGlnaHRTY2F0dGVyaW5n
U2FtcGxlciJdLCByYXRpby5wb3N0UHJvY2Vzc1JhdGlvIHx8IHJhdGlvLCBjYW1lcmEsIHNhbXBs
aW5nTW9kZSwgZW5naW5lLCByZXVzYWJsZSwgIiNkZWZpbmUgTlVNX1NBTVBMRVMgIiArIHNhbXBs
ZXMpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLl9zY3JlZW5Db29yZGluYXRlcyA9IF9NYXRoc19t
YXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IyIl0uWmVybygp
OworICAgICAgICAvKioKKyAgICAgICAgKiBDdXN0b20gcG9zaXRpb24gb2YgdGhlIG1lc2guIFVz
ZWQgaWYgInVzZUN1c3RvbU1lc2hQb3NpdGlvbiIgaXMgc2V0IHRvICJ0cnVlIgorICAgICAgICAq
LworICAgICAgICBfdGhpcy5jdXN0b21NZXNoUG9zaXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3Jf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAg
LyoqCisgICAgICAgICogU2V0IGlmIHRoZSBwb3N0LXByb2Nlc3Mgc2hvdWxkIHVzZSBhIGN1c3Rv
bSBwb3NpdGlvbiBmb3IgdGhlIGxpZ2h0IHNvdXJjZSAodHJ1ZSkgb3IgdGhlIGludGVybmFsIG1l
c2ggcG9zaXRpb24gKGZhbHNlKQorICAgICAgICAqLworICAgICAgICBfdGhpcy51c2VDdXN0b21N
ZXNoUG9zaXRpb24gPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICogSWYgdGhlIHBvc3Qt
cHJvY2VzcyBzaG91bGQgaW52ZXJzZSB0aGUgbGlnaHQgc2NhdHRlcmluZyBkaXJlY3Rpb24KKyAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuaW52ZXJ0ID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAg
ICAgICogQXJyYXkgY29udGFpbmluZyB0aGUgZXhjbHVkZWQgbWVzaGVzIG5vdCByZW5kZXJlZCBp
biB0aGUgaW50ZXJuYWwgcGFzcworICAgICAgICAqLworICAgICAgICBfdGhpcy5leGNsdWRlZE1l
c2hlcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBDb250cm9scyB0aGUg
b3ZlcmFsbCBpbnRlbnNpdHkgb2YgdGhlIHBvc3QtcHJvY2VzcworICAgICAgICAqLworICAgICAg
ICBfdGhpcy5leHBvc3VyZSA9IDAuMzsKKyAgICAgICAgLyoqCisgICAgICAgICogRGlzc2lwYXRl
cyBlYWNoIHNhbXBsZSdzIGNvbnRyaWJ1dGlvbiBpbiByYW5nZSBbMCwgMV0KKyAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMuZGVjYXkgPSAwLjk2ODE1OworICAgICAgICAvKioKKyAgICAgICAgKiBD
b250cm9scyB0aGUgb3ZlcmFsbCBpbnRlbnNpdHkgb2YgZWFjaCBzYW1wbGUKKyAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMud2VpZ2h0ID0gMC41ODc2NzsKKyAgICAgICAgLyoqCisgICAgICAgICog
Q29udHJvbHMgdGhlIGRlbnNpdHkgb2YgZWFjaCBzYW1wbGUKKyAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuZGVuc2l0eSA9IDAuOTI2OworICAgICAgICBzY2VuZSA9ICgoY2FtZXJhID09PSBudWxs
KSA/IHNjZW5lIDogY2FtZXJhLmdldFNjZW5lKCkpOyAvLyBwYXJhbWV0ZXIgInNjZW5lIiBjYW4g
YmUgbnVsbC4KKyAgICAgICAgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIF90
aGlzLl92aWV3UG9ydCA9IG5ldyBfTWF0aHNfbWF0aF92aWV3cG9ydF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjBfX1siVmlld3BvcnQiXSgwLCAwLCAxLCAxKS50b0dsb2JhbChlbmdpbmUuZ2V0
UmVuZGVyV2lkdGgoKSwgZW5naW5lLmdldFJlbmRlckhlaWdodCgpKTsKKyAgICAgICAgLy8gQ29u
ZmlndXJlIG1lc2gKKyAgICAgICAgX3RoaXMubWVzaCA9ICgobWVzaCAhPT0gbnVsbCkgPyBtZXNo
IDogVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLkNyZWF0ZURlZmF1bHRNZXNo
KCJWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nTWVzaCIsIHNjZW5lKSk7CisgICAgICAgIC8vIENv
bmZpZ3VyZQorICAgICAgICBfdGhpcy5fY3JlYXRlUGFzcyhzY2VuZSwgcmF0aW8ucGFzc1JhdGlv
IHx8IHJhdGlvKTsKKyAgICAgICAgX3RoaXMub25BY3RpdmF0ZSA9IGZ1bmN0aW9uIChjYW1lcmEp
IHsKKyAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgICAg
ICBfdGhpcy5kaXNwb3NlKGNhbWVyYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfdGhp
cy5vbkFjdGl2YXRlID0gbnVsbDsKKyAgICAgICAgfTsKKyAgICAgICAgX3RoaXMub25BcHBseU9i
c2VydmFibGUuYWRkKGZ1bmN0aW9uIChlZmZlY3QpIHsKKyAgICAgICAgICAgIF90aGlzLl91cGRh
dGVNZXNoU2NyZWVuQ29vcmRpbmF0ZXMoc2NlbmUpOworICAgICAgICAgICAgZWZmZWN0LnNldFRl
eHR1cmUoImxpZ2h0U2NhdHRlcmluZ1NhbXBsZXIiLCBfdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U2Nh
dHRlcmluZ1JUVCk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQoImV4cG9zdXJlIiwgX3Ro
aXMuZXhwb3N1cmUpOworICAgICAgICAgICAgZWZmZWN0LnNldEZsb2F0KCJkZWNheSIsIF90aGlz
LmRlY2F5KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgid2VpZ2h0IiwgX3RoaXMud2Vp
Z2h0KTsKKyAgICAgICAgICAgIGVmZmVjdC5zZXRGbG9hdCgiZGVuc2l0eSIsIF90aGlzLmRlbnNp
dHkpOworICAgICAgICAgICAgZWZmZWN0LnNldFZlY3RvcjIoIm1lc2hQb3NpdGlvbk9uU2NyZWVu
IiwgX3RoaXMuX3NjcmVlbkNvb3JkaW5hdGVzKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biBfdGhpczsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZvbHVtZXRyaWNMaWdo
dFNjYXR0ZXJpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUsICJ1c2VEaWZmdXNlQ29sb3IiLCB7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIFZvbHVtZXRyaWNMaWdo
dFNjYXR0ZXJpbmdQb3N0UHJvY2Vzcy51c2VEaWZmdXNlQ29sb3IgaXMgbm8gbG9uZ2VyIHVzZWQs
IHVzZSB0aGUgbWVzaCBtYXRlcmlhbCBkaXJlY3RseSBpbnN0ZWFkCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJMb2dnZXIiXS5XYXJuKCJWb2x1bWV0cmljTGlnaHRTY2F0
dGVyaW5nUG9zdFByb2Nlc3MudXNlRGlmZnVzZUNvbG9yIGlzIG5vIGxvbmdlciB1c2VkLCB1c2Ug
dGhlIG1lc2ggbWF0ZXJpYWwgZGlyZWN0bHkgaW5zdGVhZCIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh1c2VEaWZmdXNlQ29s
b3IpIHsKKyAgICAgICAgICAgIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJMb2dnZXIiXS5XYXJuKCJWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUG9zdFByb2Nlc3Mu
dXNlRGlmZnVzZUNvbG9yIGlzIG5vIGxvbmdlciB1c2VkLCB1c2UgdGhlIG1lc2ggbWF0ZXJpYWwg
ZGlyZWN0bHkgaW5zdGVhZCIpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIHRoZSBzdHJpbmcgIlZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzcyIK
KyAgICAgKiBAcmV0dXJucyAiVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzIgor
ICAgICAqLworICAgIFZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2Vzcy5wcm90b3R5
cGUuZ2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlZvbHVtZXRy
aWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzcyI7CisgICAgfTsKKyAgICBWb2x1bWV0cmljTGln
aHRTY2F0dGVyaW5nUG9zdFByb2Nlc3MucHJvdG90eXBlLl9pc1JlYWR5ID0gZnVuY3Rpb24gKHN1
Yk1lc2gsIHVzZUluc3RhbmNlcykgeworICAgICAgICB2YXIgbWVzaCA9IHN1Yk1lc2guZ2V0TWVz
aCgpOworICAgICAgICAvLyBSZW5kZXIgdGhpcy5tZXNoIGFzIGRlZmF1bHQKKyAgICAgICAgaWYg
KG1lc2ggPT09IHRoaXMubWVzaCAmJiBtZXNoLm1hdGVyaWFsKSB7CisgICAgICAgICAgICByZXR1
cm4gbWVzaC5tYXRlcmlhbC5pc1JlYWR5KG1lc2gpOworICAgICAgICB9CisgICAgICAgIHZhciBk
ZWZpbmVzID0gW107CisgICAgICAgIHZhciBhdHRyaWJzID0gW19NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07Cisg
ICAgICAgIHZhciBtYXRlcmlhbCA9IHN1Yk1lc2guZ2V0TWF0ZXJpYWwoKTsKKyAgICAgICAgLy8g
QWxwaGEgdGVzdAorICAgICAgICBpZiAobWF0ZXJpYWwpIHsKKyAgICAgICAgICAgIGlmIChtYXRl
cmlhbC5uZWVkQWxwaGFUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2go
IiNkZWZpbmUgQUxQSEFURVNUIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWVz
aC5pc1ZlcnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siVmVydGV4QnVmZmVyIl0uVVZLaW5kKSkgeworICAgICAgICAgICAgICAgIGF0
dHJpYnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJW
ZXJ0ZXhCdWZmZXIiXS5VVktpbmQpOworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2Rl
ZmluZSBVVjEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtZXNoLmlzVmVydGlj
ZXNEYXRhUHJlc2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJWZXJ0ZXhCdWZmZXIiXS5VVjJLaW5kKSkgeworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVz
aChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZXJ0ZXhCdWZm
ZXIiXS5VVjJLaW5kKTsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgVVYy
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQm9uZXMKKyAgICAgICAg
aWYgKG1lc2gudXNlQm9uZXMgJiYgbWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMpIHsKKyAg
ICAgICAgICAgIGF0dHJpYnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc0luZGljZXNLaW5kKTsKKyAgICAgICAg
ICAgIGF0dHJpYnMucHVzaChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fWyJWZXJ0ZXhCdWZmZXIiXS5NYXRyaWNlc1dlaWdodHNLaW5kKTsKKyAgICAgICAgICAgIGRl
ZmluZXMucHVzaCgiI2RlZmluZSBOVU1fQk9ORV9JTkZMVUVOQ0VSUyAiICsgbWVzaC5udW1Cb25l
SW5mbHVlbmNlcnMpOworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEJvbmVzUGVy
TWVzaCAiICsgKG1lc2guc2tlbGV0b24gPyAobWVzaC5za2VsZXRvbi5ib25lcy5sZW5ndGggKyAx
KSA6IDApKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlZmluZXMu
cHVzaCgiI2RlZmluZSBOVU1fQk9ORV9JTkZMVUVOQ0VSUyAwIik7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gSW5zdGFuY2VzCisgICAgICAgIGlmICh1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgICAg
IGRlZmluZXMucHVzaCgiI2RlZmluZSBJTlNUQU5DRVMiKTsKKyAgICAgICAgICAgIF9NYXRlcmlh
bHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siTWF0ZXJpYWxI
ZWxwZXIiXS5QdXNoQXR0cmlidXRlc0Zvckluc3RhbmNlcyhhdHRyaWJzKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBHZXQgY29ycmVjdCBlZmZlY3QKKyAgICAgICAgdmFyIGpvaW4gPSBkZWZpbmVz
LmpvaW4oIlxuIik7CisgICAgICAgIGlmICh0aGlzLl9jYWNoZWREZWZpbmVzICE9PSBqb2luKSB7
CisgICAgICAgICAgICB0aGlzLl9jYWNoZWREZWZpbmVzID0gam9pbjsKKyAgICAgICAgICAgIHRo
aXMuX3ZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQYXNzID0gbWVzaC5nZXRTY2VuZSgpLmdldEVu
Z2luZSgpLmNyZWF0ZUVmZmVjdCgidm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3MiLCBhdHRy
aWJzLCBbIndvcmxkIiwgIm1Cb25lcyIsICJ2aWV3UHJvamVjdGlvbiIsICJkaWZmdXNlTWF0cml4
Il0sIFsiZGlmZnVzZVNhbXBsZXIiXSwgam9pbiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVm
aW5lZCwgeyBtYXhTaW11bHRhbmVvdXNNb3JwaFRhcmdldHM6IG1lc2gubnVtQm9uZUluZmx1ZW5j
ZXJzIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWV0cmljTGlnaHRT
Y2F0dGVyaW5nUGFzcy5pc1JlYWR5KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRo
ZSBuZXcgbGlnaHQgcG9zaXRpb24gZm9yIGxpZ2h0IHNjYXR0ZXJpbmcgZWZmZWN0CisgICAgICog
QHBhcmFtIHBvc2l0aW9uIFRoZSBuZXcgY3VzdG9tIGxpZ2h0IHBvc2l0aW9uCisgICAgICovCisg
ICAgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZS5zZXRDdXN0
b21NZXNoUG9zaXRpb24gPSBmdW5jdGlvbiAocG9zaXRpb24pIHsKKyAgICAgICAgdGhpcy5jdXN0
b21NZXNoUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVy
bnMgdGhlIGxpZ2h0IHBvc2l0aW9uIGZvciBsaWdodCBzY2F0dGVyaW5nIGVmZmVjdAorICAgICAq
IEByZXR1cm4gVmVjdG9yMyBUaGUgY3VzdG9tIGxpZ2h0IHBvc2l0aW9uCisgICAgICovCisgICAg
Vm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZS5nZXRDdXN0b21N
ZXNoUG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbU1l
c2hQb3NpdGlvbjsKKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSBpbnRlcm5h
bCBhc3NldHMgYW5kIGRldGFjaGVzIHRoZSBwb3N0LXByb2Nlc3MgZnJvbSB0aGUgY2FtZXJhCisg
ICAgICovCisgICAgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlw
ZS5kaXNwb3NlID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICB2YXIgcnR0SW5kZXggPSBj
YW1lcmEuZ2V0U2NlbmUoKS5jdXN0b21SZW5kZXJUYXJnZXRzLmluZGV4T2YodGhpcy5fdm9sdW1l
dHJpY0xpZ2h0U2NhdHRlcmluZ1JUVCk7CisgICAgICAgIGlmIChydHRJbmRleCAhPT0gLTEpIHsK
KyAgICAgICAgICAgIGNhbWVyYS5nZXRTY2VuZSgpLmN1c3RvbVJlbmRlclRhcmdldHMuc3BsaWNl
KHJ0dEluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl92b2x1bWV0cmljTGlnaHRT
Y2F0dGVyaW5nUlRULmRpc3Bvc2UoKTsKKyAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5kaXNwb3Nl
LmNhbGwodGhpcywgY2FtZXJhKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhl
IHJlbmRlciB0YXJnZXQgdGV4dHVyZSB1c2VkIGJ5IHRoZSBwb3N0LXByb2Nlc3MKKyAgICAgKiBA
cmV0dXJuIHRoZSByZW5kZXIgdGFyZ2V0IHRleHR1cmUgdXNlZCBieSB0aGUgcG9zdC1wcm9jZXNz
CisgICAgICovCisgICAgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3Rv
dHlwZS5nZXRQYXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1l
dHJpY0xpZ2h0U2NhdHRlcmluZ1JUVDsKKyAgICB9OworICAgIC8vIFByaXZhdGUgbWV0aG9kcwor
ICAgIFZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUuX21lc2hF
eGNsdWRlZCA9IGZ1bmN0aW9uIChtZXNoKSB7CisgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkTWVz
aGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5leGNsdWRlZE1lc2hlcy5pbmRleE9mKG1lc2gpICE9PSAt
MSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH07CisgICAgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNz
LnByb3RvdHlwZS5fY3JlYXRlUGFzcyA9IGZ1bmN0aW9uIChzY2VuZSwgcmF0aW8pIHsKKyAgICAg
ICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdmFyIGVuZ2luZSA9IHNjZW5lLmdldEVuZ2lu
ZSgpOworICAgICAgICB0aGlzLl92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUlRUID0gbmV3IF9N
YXRlcmlhbHNfVGV4dHVyZXNfcmVuZGVyVGFyZ2V0VGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siUmVuZGVyVGFyZ2V0VGV4dHVyZSJdKCJ2b2x1bWV0cmljTGlnaHRTY2F0dGVy
aW5nTWFwIiwgeyB3aWR0aDogZW5naW5lLmdldFJlbmRlcldpZHRoKCkgKiByYXRpbywgaGVpZ2h0
OiBlbmdpbmUuZ2V0UmVuZGVySGVpZ2h0KCkgKiByYXRpbyB9LCBzY2VuZSwgZmFsc2UsIHRydWUs
IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siQ29uc3Rh
bnRzIl0uVEVYVFVSRVRZUEVfVU5TSUdORURfSU5UKTsKKyAgICAgICAgdGhpcy5fdm9sdW1ldHJp
Y0xpZ2h0U2NhdHRlcmluZ1JUVC53cmFwVSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RF
OworICAgICAgICB0aGlzLl92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUlRULndyYXBWID0gX01h
dGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJU
ZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgIHRoaXMuX3ZvbHVtZXRyaWNMaWdo
dFNjYXR0ZXJpbmdSVFQucmVuZGVyTGlzdCA9IG51bGw7CisgICAgICAgIHRoaXMuX3ZvbHVtZXRy
aWNMaWdodFNjYXR0ZXJpbmdSVFQucmVuZGVyUGFydGljbGVzID0gZmFsc2U7CisgICAgICAgIHRo
aXMuX3ZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdSVFQuaWdub3JlQ2FtZXJhVmlld3BvcnQgPSB0
cnVlOworICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5nZXRDYW1lcmEoKTsKKyAgICAgICAgaWYg
KGNhbWVyYSkgeworICAgICAgICAgICAgY2FtZXJhLmN1c3RvbVJlbmRlclRhcmdldHMucHVzaCh0
aGlzLl92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUlRUKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHNjZW5lLmN1c3RvbVJlbmRlclRhcmdldHMucHVzaCh0aGlzLl92
b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUlRUKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDdXN0
b20gcmVuZGVyIGZ1bmN0aW9uIGZvciBzdWJtZXNoZXMKKyAgICAgICAgdmFyIHJlbmRlclN1Yk1l
c2ggPSBmdW5jdGlvbiAoc3ViTWVzaCkgeworICAgICAgICAgICAgdmFyIG1lc2ggPSBzdWJNZXNo
LmdldFJlbmRlcmluZ01lc2goKTsKKyAgICAgICAgICAgIGlmIChfdGhpcy5fbWVzaEV4Y2x1ZGVk
KG1lc2gpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbWVzaC5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5faXNBY3RpdmVJbnRlcm1l
ZGlhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHN1Yk1lc2guZ2V0TWF0
ZXJpYWwoKTsKKyAgICAgICAgICAgIGlmICghbWF0ZXJpYWwpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc2NlbmUgPSBtZXNoLmdldFNj
ZW5lKCk7CisgICAgICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAg
ICAgICAgICAvLyBDdWxsaW5nCisgICAgICAgICAgICBlbmdpbmUuc2V0U3RhdGUobWF0ZXJpYWwu
YmFja0ZhY2VDdWxsaW5nKTsKKyAgICAgICAgICAgIC8vIE1hbmFnaW5nIGluc3RhbmNlcworICAg
ICAgICAgICAgdmFyIGJhdGNoID0gbWVzaC5fZ2V0SW5zdGFuY2VzUmVuZGVyTGlzdChzdWJNZXNo
Ll9pZCk7CisgICAgICAgICAgICBpZiAoYmF0Y2gubXVzdFJldHVybikgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBoYXJkd2FyZUluc3Rh
bmNlZFJlbmRlcmluZyA9IChlbmdpbmUuZ2V0Q2FwcygpLmluc3RhbmNlZEFycmF5cykgJiYgKGJh
dGNoLnZpc2libGVJbnN0YW5jZXNbc3ViTWVzaC5faWRdICE9PSBudWxsKTsKKyAgICAgICAgICAg
IGlmIChfdGhpcy5faXNSZWFkeShzdWJNZXNoLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZykp
IHsKKyAgICAgICAgICAgICAgICB2YXIgZWZmZWN0ID0gX3RoaXMuX3ZvbHVtZXRyaWNMaWdodFNj
YXR0ZXJpbmdQYXNzOworICAgICAgICAgICAgICAgIGlmIChtZXNoID09PSBfdGhpcy5tZXNoKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzdWJNZXNoLmVmZmVjdCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZWZmZWN0ID0gc3ViTWVzaC5lZmZlY3Q7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBl
ZmZlY3QgPSBtYXRlcmlhbC5nZXRFZmZlY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KGVmZmVj
dCk7CisgICAgICAgICAgICAgICAgbWVzaC5fYmluZChzdWJNZXNoLCBlZmZlY3QsIF9NYXRlcmlh
bHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTWF0ZXJpYWwiXS5Ucmlh
bmdsZUZpbGxNb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAobWVzaCA9PT0gX3RoaXMubWVzaCkg
eworICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5iaW5kKG1lc2guZ2V0V29ybGRNYXRyaXgo
KSwgbWVzaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3Muc2V0
TWF0cml4KCJ2aWV3UHJvamVjdGlvbiIsIHNjZW5lLmdldFRyYW5zZm9ybU1hdHJpeCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gQWxwaGEgdGVzdAorICAgICAgICAgICAgICAgICAgICBpZiAo
bWF0ZXJpYWwgJiYgbWF0ZXJpYWwubmVlZEFscGhhVGVzdGluZygpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgYWxwaGFUZXh0dXJlID0gbWF0ZXJpYWwuZ2V0QWxwaGFUZXN0VGV4dHVy
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ZvbHVtZXRyaWNMaWdodFNjYXR0
ZXJpbmdQYXNzLnNldFRleHR1cmUoImRpZmZ1c2VTYW1wbGVyIiwgYWxwaGFUZXh0dXJlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYVRleHR1cmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3Muc2V0TWF0
cml4KCJkaWZmdXNlTWF0cml4IiwgYWxwaGFUZXh0dXJlLmdldFRleHR1cmVNYXRyaXgoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgLy8gQm9uZXMKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gudXNlQm9u
ZXMgJiYgbWVzaC5jb21wdXRlQm9uZXNVc2luZ1NoYWRlcnMgJiYgbWVzaC5za2VsZXRvbikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3ZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQ
YXNzLnNldE1hdHJpY2VzKCJtQm9uZXMiLCBtZXNoLnNrZWxldG9uLmdldFRyYW5zZm9ybU1hdHJp
Y2VzKG1lc2gpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyBEcmF3CisgICAgICAgICAgICAgICAgbWVzaC5fcHJvY2Vzc1JlbmRl
cmluZyhzdWJNZXNoLCBfdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3MsIF9NYXRl
cmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTWF0ZXJpYWwiXS5U
cmlhbmdsZUZpbGxNb2RlLCBiYXRjaCwgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcsIGZ1bmN0
aW9uIChpc0luc3RhbmNlLCB3b3JsZCkgeyByZXR1cm4gZWZmZWN0LnNldE1hdHJpeCgid29ybGQi
LCB3b3JsZCk7IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICAvLyBSZW5k
ZXIgdGFyZ2V0IHRleHR1cmUgY2FsbGJhY2tzCisgICAgICAgIHZhciBzYXZlZFNjZW5lQ2xlYXJD
b2xvcjsKKyAgICAgICAgdmFyIHNjZW5lQ2xlYXJDb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siQ29sb3I0Il0oMC4wLCAwLjAsIDAuMCwg
MS4wKTsKKyAgICAgICAgdGhpcy5fdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1JUVC5vbkJlZm9y
ZVJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNhdmVkU2Nl
bmVDbGVhckNvbG9yID0gc2NlbmUuY2xlYXJDb2xvcjsKKyAgICAgICAgICAgIHNjZW5lLmNsZWFy
Q29sb3IgPSBzY2VuZUNsZWFyQ29sb3I7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl92b2x1
bWV0cmljTGlnaHRTY2F0dGVyaW5nUlRULm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLmFkZChmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICBzY2VuZS5jbGVhckNvbG9yID0gc2F2ZWRTY2VuZUNsZWFy
Q29sb3I7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl92b2x1bWV0cmljTGlnaHRTY2F0dGVy
aW5nUlRULmN1c3RvbVJlbmRlckZ1bmN0aW9uID0gZnVuY3Rpb24gKG9wYXF1ZVN1Yk1lc2hlcywg
YWxwaGFUZXN0U3ViTWVzaGVzLCB0cmFuc3BhcmVudFN1Yk1lc2hlcywgZGVwdGhPbmx5U3ViTWVz
aGVzKSB7CisgICAgICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAg
ICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgICAgICBpZiAoZGVwdGhPbmx5U3ViTWVzaGVzLmxl
bmd0aCkgeworICAgICAgICAgICAgICAgIGVuZ2luZS5zZXRDb2xvcldyaXRlKGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBkZXB0aE9ubHlTdWJNZXNoZXMu
bGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1Yk1lc2goZGVw
dGhPbmx5U3ViTWVzaGVzLmRhdGFbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZW5naW5lLnNldENvbG9yV3JpdGUodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBvcGFxdWVTdWJNZXNoZXMubGVuZ3RoOyBp
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgcmVuZGVyU3ViTWVzaChvcGFxdWVTdWJNZXNoZXMu
ZGF0YVtpbmRleF0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7
IGluZGV4IDwgYWxwaGFUZXN0U3ViTWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAg
ICAgICAgIHJlbmRlclN1Yk1lc2goYWxwaGFUZXN0U3ViTWVzaGVzLmRhdGFbaW5kZXhdKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0cmFuc3BhcmVudFN1Yk1lc2hlcy5sZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICAvLyBTb3J0IHN1YiBtZXNoZXMKKyAgICAgICAgICAgICAgICBm
b3IgKGluZGV4ID0gMDsgaW5kZXggPCB0cmFuc3BhcmVudFN1Yk1lc2hlcy5sZW5ndGg7IGluZGV4
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN1Ym1lc2ggPSB0cmFuc3BhcmVudFN1Yk1l
c2hlcy5kYXRhW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGJvdW5kaW5nSW5mbyA9
IHN1Ym1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChib3Vu
ZGluZ0luZm8gJiYgc2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdWJtZXNoLl9hbHBoYUluZGV4ID0gc3VibWVzaC5nZXRNZXNoKCkuYWxwaGFJbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN1Ym1lc2guX2Rpc3RhbmNlVG9DYW1lcmEgPSBib3VuZGlu
Z0luZm8uYm91bmRpbmdTcGhlcmUuY2VudGVyV29ybGQuc3VidHJhY3Qoc2NlbmUuYWN0aXZlQ2Ft
ZXJhLnBvc2l0aW9uKS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgc29ydGVkQXJyYXkgPSB0cmFuc3BhcmVudFN1
Yk1lc2hlcy5kYXRhLnNsaWNlKDAsIHRyYW5zcGFyZW50U3ViTWVzaGVzLmxlbmd0aCk7CisgICAg
ICAgICAgICAgICAgc29ydGVkQXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikgeworICAgICAgICAg
ICAgICAgICAgICAvLyBBbHBoYSBpbmRleCBmaXJzdAorICAgICAgICAgICAgICAgICAgICBpZiAo
YS5fYWxwaGFJbmRleCA+IGIuX2FscGhhSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
IChhLl9hbHBoYUluZGV4IDwgYi5fYWxwaGFJbmRleCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIFRoZW4gZGlzdGFuY2UgdG8gY2FtZXJhCisgICAgICAgICAgICAgICAgICAgIGlmIChhLl9k
aXN0YW5jZVRvQ2FtZXJhIDwgYi5fZGlzdGFuY2VUb0NhbWVyYSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGEuX2Rpc3RhbmNlVG9DYW1lcmEgPiBiLl9kaXN0YW5jZVRvQ2FtZXJhKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgLy8gUmVuZGVyIHN1YiBtZXNoZXMKKyAgICAgICAgICAgICAgICBlbmdpbmUu
c2V0QWxwaGFNb2RlKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTNfX1siQ29uc3RhbnRzIl0uQUxQSEFfQ09NQklORSk7CisgICAgICAgICAgICAgICAgZm9yIChp
bmRleCA9IDA7IGluZGV4IDwgc29ydGVkQXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJlbmRlclN1Yk1lc2goc29ydGVkQXJyYXlbaW5kZXhdKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5naW5lLnNldEFscGhhTW9kZShfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkNvbnN0YW50cyJdLkFMUEhB
X0RJU0FCTEUpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH07CisgICAgVm9sdW1l
dHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZS5fdXBkYXRlTWVzaFNjcmVl
bkNvb3JkaW5hdGVzID0gZnVuY3Rpb24gKHNjZW5lKSB7CisgICAgICAgIHZhciB0cmFuc2Zvcm0g
PSBzY2VuZS5nZXRUcmFuc2Zvcm1NYXRyaXgoKTsKKyAgICAgICAgdmFyIG1lc2hQb3NpdGlvbjsK
KyAgICAgICAgaWYgKHRoaXMudXNlQ3VzdG9tTWVzaFBvc2l0aW9uKSB7CisgICAgICAgICAgICBt
ZXNoUG9zaXRpb24gPSB0aGlzLmN1c3RvbU1lc2hQb3NpdGlvbjsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICh0aGlzLmF0dGFjaGVkTm9kZSkgeworICAgICAgICAgICAgbWVzaFBvc2l0aW9u
ID0gdGhpcy5hdHRhY2hlZE5vZGUucG9zaXRpb247CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBtZXNoUG9zaXRpb24gPSB0aGlzLm1lc2gucGFyZW50ID8gdGhpcy5tZXNo
LmdldEFic29sdXRlUG9zaXRpb24oKSA6IHRoaXMubWVzaC5wb3NpdGlvbjsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgcG9zID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlZlY3RvcjMiXS5Qcm9qZWN0KG1lc2hQb3NpdGlvbiwgX01hdGhzX21hdGhfdmVj
dG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk1hdHJpeCJdLklkZW50aXR5KCksIHRy
YW5zZm9ybSwgdGhpcy5fdmlld1BvcnQpOworICAgICAgICB0aGlzLl9zY3JlZW5Db29yZGluYXRl
cy54ID0gcG9zLnggLyB0aGlzLl92aWV3UG9ydC53aWR0aDsKKyAgICAgICAgdGhpcy5fc2NyZWVu
Q29vcmRpbmF0ZXMueSA9IHBvcy55IC8gdGhpcy5fdmlld1BvcnQuaGVpZ2h0OworICAgICAgICBp
ZiAodGhpcy5pbnZlcnQpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjcmVlbkNvb3JkaW5hdGVzLnkg
PSAxLjAgLSB0aGlzLl9zY3JlZW5Db29yZGluYXRlcy55OworICAgICAgICB9CisgICAgfTsKKyAg
ICAvLyBTdGF0aWMgbWV0aG9kcworICAgIC8qKgorICAgICogQ3JlYXRlcyBhIGRlZmF1bHQgbWVz
aCBmb3IgdGhlIFZvbHVtZXJpYyBMaWdodCBTY2F0dGVyaW5nIHBvc3QtcHJvY2VzcworICAgICog
QHBhcmFtIG5hbWUgVGhlIG1lc2ggbmFtZQorICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB3
aGVyZSB0byBjcmVhdGUgdGhlIG1lc2gKKyAgICAqIEByZXR1cm4gdGhlIGRlZmF1bHQgbWVzaAor
ICAgICovCisgICAgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLkNyZWF0ZURl
ZmF1bHRNZXNoID0gZnVuY3Rpb24gKG5hbWUsIHNjZW5lKSB7CisgICAgICAgIHZhciBtZXNoID0g
X01lc2hlc19tZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIk1lc2giXS5DcmVhdGVQ
bGFuZShuYW1lLCAxLCBzY2VuZSk7CisgICAgICAgIG1lc2guYmlsbGJvYXJkTW9kZSA9IF9NZXNo
ZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkFic3RyYWN0TWVz
aCJdLkJJTExCT0FSRE1PREVfQUxMOworICAgICAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgX01hdGVy
aWFsc19zdGFuZGFyZE1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlN0YW5k
YXJkTWF0ZXJpYWwiXShuYW1lICsgIk1hdGVyaWFsIiwgc2NlbmUpOworICAgICAgICBtYXRlcmlh
bC5lbWlzc2l2ZUNvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xOV9fWyJDb2xvcjMiXSgxLCAxLCAxKTsKKyAgICAgICAgbWVzaC5tYXRlcmlhbCA9
IG1hdGVyaWFsOworICAgICAgICByZXR1cm4gbWVzaDsKKyAgICB9OworICAgIHRzbGliX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChf
TWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFz
VmVjdG9yMyJdKSgpCisgICAgXSwgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNz
LnByb3RvdHlwZSwgImN1c3RvbU1lc2hQb3NpdGlvbiIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUG9zdFByb2Nlc3MucHJvdG90
eXBlLCAidXNlQ3VzdG9tTWVzaFBvc2l0aW9uIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01p
c2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXJpYWxpemUiXSko
KQorICAgIF0sIFZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2Vzcy5wcm90b3R5cGUs
ICJpbnZlcnQiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZUFzTWVzaFJlZmVyZW5jZSJdKSgpCisg
ICAgXSwgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgIm1l
c2giLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVm9sdW1ldHJpY0xpZ2h0
U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgImV4Y2x1ZGVkTWVzaGVzIiwgdm9pZCAw
KTsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0o
WworICAgICAgICBPYmplY3QoX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJzZXJpYWxpemUiXSkoKQorICAgIF0sIFZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQ
b3N0UHJvY2Vzcy5wcm90b3R5cGUsICJleHBvc3VyZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0
KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXpl
Il0pKCkKKyAgICBdLCBWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUG9zdFByb2Nlc3MucHJvdG90
eXBlLCAiZGVjYXkiLCB2b2lkIDApOworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAgIE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInNlcmlhbGl6ZSJdKSgpCisgICAgXSwgVm9sdW1l
dHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLnByb3RvdHlwZSwgIndlaWdodCIsIHZvaWQg
MCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJd
KFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBWb2x1bWV0cmljTGlnaHRTY2F0dGVyaW5n
UG9zdFByb2Nlc3MucHJvdG90eXBlLCAiZGVuc2l0eSIsIHZvaWQgMCk7CisgICAgcmV0dXJuIFZv
bHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzczsKK30oX3Bvc3RQcm9jZXNzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJQb3N0UHJvY2VzcyJdKSk7CisKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vUG9zdFByb2Nlc3Nlcy92ckRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFBy
b2Nlc3MudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9Qb3N0UHJvY2Vzc2VzL3ZyRGlzdG9ydGlv
bkNvcnJlY3Rpb25Qb3N0UHJvY2Vzcy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogVlJEaXN0b3J0aW9uQ29ycmVjdGlvblBvc3RQcm9jZXNzICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIlZSRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0UHJvY2VzcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gVlJEaXN0b3J0aW9uQ29ycmVjdGlvblBvc3RQcm9jZXNzOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxl
cy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJl
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4
dHVyZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wb3N0UHJvY2Vzc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb3N0UHJv
Y2VzcyAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1NoYWRlcnNfdnJEaXN0b3J0aW9uQ29ycmVjdGlvbl9mcmFnbWVudF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hh
ZGVycy92ckRpc3RvcnRpb25Db3JyZWN0aW9uLmZyYWdtZW50ICovICIuL1NoYWRlcnMvdnJEaXN0
b3J0aW9uQ29ycmVjdGlvbi5mcmFnbWVudC50cyIpOworCisKKworCisKKy8qKgorICogVlJEaXN0
b3J0aW9uQ29ycmVjdGlvblBvc3RQcm9jZXNzIHVzZWQgZm9yIG1vYmlsZSBWUgorICovCit2YXIg
VlJEaXN0b3J0aW9uQ29ycmVjdGlvblBvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZXh0ZW5kcyJdKFZSRGlzdG9ydGlvbkNvcnJlY3Rpb25Qb3N0UHJvY2VzcywgX3N1cGVyKTsKKyAg
ICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUgVlJEaXN0b3J0aW9uQ29ycmVjdGlvblBvc3RQ
cm9jZXNzCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVmZmVjdC4KKyAgICAg
KiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gYXBwbHkgdGhlIHJlbmRlciBwYXNzIHRvLgor
ICAgICAqIEBwYXJhbSBpc1JpZ2h0RXllIElmIHRoaXMgaXMgZm9yIHRoZSByaWdodCBleWUgZGlz
dG9ydGlvbgorICAgICAqIEBwYXJhbSB2ck1ldHJpY3MgQWxsIHRoZSByZXF1aXJlZCBtZXRyaWNz
IGZvciB0aGUgVlIgY2FtZXJhCisgICAgICovCisgICAgZnVuY3Rpb24gVlJEaXN0b3J0aW9uQ29y
cmVjdGlvblBvc3RQcm9jZXNzKG5hbWUsIGNhbWVyYSwgaXNSaWdodEV5ZSwgdnJNZXRyaWNzKSB7
CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsICJ2ckRpc3RvcnRp
b25Db3JyZWN0aW9uIiwgWworICAgICAgICAgICAgJ0xlbnNDZW50ZXInLAorICAgICAgICAgICAg
J1NjYWxlJywKKyAgICAgICAgICAgICdTY2FsZUluJywKKyAgICAgICAgICAgICdIbWRXYXJwUGFy
YW0nCisgICAgICAgIF0sIG51bGwsIHZyTWV0cmljcy5wb3N0UHJvY2Vzc1NjYWxlRmFjdG9yLCBj
YW1lcmEsIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJUZXh0dXJlIl0uQklMSU5FQVJfU0FNUExJTkdNT0RFKSB8fCB0aGlzOworICAgICAg
ICBfdGhpcy5faXNSaWdodEV5ZSA9IGlzUmlnaHRFeWU7CisgICAgICAgIF90aGlzLl9kaXN0b3J0
aW9uRmFjdG9ycyA9IHZyTWV0cmljcy5kaXN0b3J0aW9uSzsKKyAgICAgICAgX3RoaXMuX3Bvc3RQ
cm9jZXNzU2NhbGVGYWN0b3IgPSB2ck1ldHJpY3MucG9zdFByb2Nlc3NTY2FsZUZhY3RvcjsKKyAg
ICAgICAgX3RoaXMuX2xlbnNDZW50ZXJPZmZzZXQgPSB2ck1ldHJpY3MubGVuc0NlbnRlck9mZnNl
dDsKKyAgICAgICAgX3RoaXMuYWRhcHRTY2FsZVRvQ3VycmVudFZpZXdwb3J0ID0gdHJ1ZTsKKyAg
ICAgICAgX3RoaXMub25TaXplQ2hhbmdlZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIF90aGlzLl9zY2FsZUluID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZWN0b3IyIl0oMiwgMiAvIF90aGlzLmFzcGVjdFJhdGlv
KTsKKyAgICAgICAgICAgIF90aGlzLl9zY2FsZUZhY3RvciA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMiJdKC41ICogKDEgLyBfdGhp
cy5fcG9zdFByb2Nlc3NTY2FsZUZhY3RvciksIC41ICogKDEgLyBfdGhpcy5fcG9zdFByb2Nlc3NT
Y2FsZUZhY3RvcikgKiBfdGhpcy5hc3BlY3RSYXRpbyk7CisgICAgICAgICAgICBfdGhpcy5fbGVu
c0NlbnRlciA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVjdG9yMiJdKF90aGlzLl9pc1JpZ2h0RXllID8gMC41IC0gX3RoaXMuX2xlbnNDZW50
ZXJPZmZzZXQgKiAwLjUgOiAwLjUgKyBfdGhpcy5fbGVuc0NlbnRlck9mZnNldCAqIDAuNSwgMC41
KTsKKyAgICAgICAgfSk7CisgICAgICAgIF90aGlzLm9uQXBwbHlPYnNlcnZhYmxlLmFkZChmdW5j
dGlvbiAoZWZmZWN0KSB7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCJMZW5zQ2VudGVy
IiwgX3RoaXMuX2xlbnNDZW50ZXIueCwgX3RoaXMuX2xlbnNDZW50ZXIueSk7CisgICAgICAgICAg
ICBlZmZlY3Quc2V0RmxvYXQyKCJTY2FsZSIsIF90aGlzLl9zY2FsZUZhY3Rvci54LCBfdGhpcy5f
c2NhbGVGYWN0b3IueSk7CisgICAgICAgICAgICBlZmZlY3Quc2V0RmxvYXQyKCJTY2FsZUluIiwg
X3RoaXMuX3NjYWxlSW4ueCwgX3RoaXMuX3NjYWxlSW4ueSk7CisgICAgICAgICAgICBlZmZlY3Qu
c2V0RmxvYXQ0KCJIbWRXYXJwUGFyYW0iLCBfdGhpcy5fZGlzdG9ydGlvbkZhY3RvcnNbMF0sIF90
aGlzLl9kaXN0b3J0aW9uRmFjdG9yc1sxXSwgX3RoaXMuX2Rpc3RvcnRpb25GYWN0b3JzWzJdLCBf
dGhpcy5fZGlzdG9ydGlvbkZhY3RvcnNbM10pOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJu
IF90aGlzOworICAgIH0KKyAgICByZXR1cm4gVlJEaXN0b3J0aW9uQ29ycmVjdGlvblBvc3RQcm9j
ZXNzOworfShfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siUG9zdFBy
b2Nlc3MiXSkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1Bvc3RQcm9jZXNzZXMvdnJN
dWx0aXZpZXdUb1NpbmdsZXZpZXdQb3N0UHJvY2Vzcy50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9Qb3N0UHJvY2Vzc2VzL3ZyTXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBWUk11bHRpdmlld1RvU2luZ2xldmll
d1Bvc3RQcm9jZXNzICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZSTXVs
dGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFZSTXVs
dGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3M7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcG9zdFByb2Nlc3NfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9zdFByb2Nlc3Mg
Ki8gIi4vUG9zdFByb2Nlc3Nlcy9wb3N0UHJvY2Vzcy50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzX3ZyTXVsdGl2aWV3VG9TaW5nbGV2aWV3X2ZyYWdtZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJz
L3ZyTXVsdGl2aWV3VG9TaW5nbGV2aWV3LmZyYWdtZW50ICovICIuL1NoYWRlcnMvdnJNdWx0aXZp
ZXdUb1NpbmdsZXZpZXcuZnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
RW5naW5lc19FeHRlbnNpb25zX2VuZ2luZV9tdWx0aXZpZXdfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvRXh0ZW5zaW9ucy9l
bmdpbmUubXVsdGl2aWV3ICovICIuL0VuZ2luZXMvRXh0ZW5zaW9ucy9lbmdpbmUubXVsdGl2aWV3
LnRzIik7CisKKworCisKKworLyoqCisgKiBWUk11bHRpdmlld1RvU2luZ2xldmlldyB1c2VkIHRv
IGNvbnZlcnQgbXVsdGl2aWV3IHRleHR1cmUgYXJyYXlzIHRvIHN0YW5kYXJkIHRleHR1cmVzIGZv
ciBzY2VuYXJpb3Mgc3VjaCBhcyB3ZWJWUgorICogVGhpcyB3aWxsIG5vdCBiZSB1c2VkIGZvciB3
ZWJYUiBhcyBpdCBzdXBwb3J0cyBkaXNwbGF5aW5nIHRleHR1cmUgYXJyYXlzIGRpcmVjdGx5Cisg
Ki8KK3ZhciBWUk11bHRpdmlld1RvU2luZ2xldmlld1Bvc3RQcm9jZXNzID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIl9fZXh0ZW5kcyJdKFZSTXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MsIF9z
dXBlcik7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgYSBWUk11bHRpdmlld1RvU2luZ2xl
dmlldworICAgICAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIHBvc3QgcHJvY2VzcworICAgICAq
IEBwYXJhbSBjYW1lcmEgY2FtZXJhIHRvIGJlIGFwcGxpZWQgdG8KKyAgICAgKiBAcGFyYW0gc2Nh
bGVGYWN0b3Igc2NhbGluZyBmYWN0b3IgdG8gdGhlIHNpemUgb2YgdGhlIG91dHB1dCB0ZXh0dXJl
CisgICAgICovCisgICAgZnVuY3Rpb24gVlJNdWx0aXZpZXdUb1NpbmdsZXZpZXdQb3N0UHJvY2Vz
cyhuYW1lLCBjYW1lcmEsIHNjYWxlRmFjdG9yKSB7CisgICAgICAgIHZhciBfdGhpcyA9IF9zdXBl
ci5jYWxsKHRoaXMsIG5hbWUsICJ2ck11bHRpdmlld1RvU2luZ2xldmlldyIsIFsiaW1hZ2VJbmRl
eCJdLCBbIm11bHRpdmlld1NhbXBsZXIiXSwgc2NhbGVGYWN0b3IsIGNhbWVyYSwgX01hdGVyaWFs
c19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlRleHR1cmUi
XS5CSUxJTkVBUl9TQU1QTElOR01PREUpIHx8IHRoaXM7CisgICAgICAgIF90aGlzLm9uU2l6ZUNo
YW5nZWRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgIH0pOworICAgICAgICBf
dGhpcy5vbkFwcGx5T2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGVmZmVjdCkgeworICAgICAgICAg
ICAgaWYgKGNhbWVyYS5fc2NlbmUuYWN0aXZlQ2FtZXJhICYmIGNhbWVyYS5fc2NlbmUuYWN0aXZl
Q2FtZXJhLmlzTGVmdENhbWVyYSkgeworICAgICAgICAgICAgICAgIGVmZmVjdC5zZXRJbnQoImlt
YWdlSW5kZXgiLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGVmZmVjdC5zZXRJbnQoImltYWdlSW5kZXgiLCAxKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVmZmVjdC5zZXRUZXh0dXJlKCJtdWx0aXZpZXdTYW1wbGVyIiwgY2FtZXJh
Ll9tdWx0aXZpZXdUZXh0dXJlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBfdGhpczsK
KyAgICB9CisgICAgcmV0dXJuIFZSTXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3M7Cit9
KF9wb3N0UHJvY2Vzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQb3N0UHJvY2VzcyJd
KSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUHJvYmVzL2luZGV4LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Byb2Jlcy9pbmRleC50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFJl
ZmxlY3Rpb25Qcm9iZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3JlZmxlY3Rpb25Qcm9iZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9yZWZsZWN0aW9uUHJvYmUgKi8gIi4vUHJvYmVzL3JlZmxlY3Rp
b25Qcm9iZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZsZWN0aW9uUHJvYmUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9yZWZsZWN0aW9uUHJvYmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siUmVmbGVjdGlvblByb2JlIl07IH0pOworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
UHJvYmVzL3JlZmxlY3Rpb25Qcm9iZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vUHJvYmVzL3JlZmxlY3Rpb25Qcm9iZS50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBSZWZsZWN0aW9uUHJvYmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUmVmbGVjdGlvblByb2JlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSZWZsZWN0aW9uUHJvYmU7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0c2xpYiAqLyAiLi4vbm9kZV9tb2R1
bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNj
X2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01pc2MvZGVjb3JhdG9ycyAqLyAiLi9NaXNjL2RlY29yYXRvcnMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdl
dFRleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJlICovICIuL01h
dGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRocy9tYXRoLnZlY3RvciAqLyAiLi9N
YXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hYnN0cmFj
dFNjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9hYnN0cmFjdFNjZW5lICovICIuL2Fic3RyYWN0U2NlbmUudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICov
ICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7CisKKworCisKKworCitfYWJzdHJhY3RTY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBYnN0cmFjdFNjZW5lIl0ucHJvdG90eXBlLnJl
bW92ZVJlZmxlY3Rpb25Qcm9iZSA9IGZ1bmN0aW9uICh0b1JlbW92ZSkgeworICAgIGlmICghdGhp
cy5yZWZsZWN0aW9uUHJvYmVzKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgdmFy
IGluZGV4ID0gdGhpcy5yZWZsZWN0aW9uUHJvYmVzLmluZGV4T2YodG9SZW1vdmUpOworICAgIGlm
IChpbmRleCAhPT0gLTEpIHsKKyAgICAgICAgdGhpcy5yZWZsZWN0aW9uUHJvYmVzLnNwbGljZShp
bmRleCwgMSk7CisgICAgfQorICAgIHJldHVybiBpbmRleDsKK307CitfYWJzdHJhY3RTY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBYnN0cmFjdFNjZW5lIl0ucHJvdG90eXBlLmFk
ZFJlZmxlY3Rpb25Qcm9iZSA9IGZ1bmN0aW9uIChuZXdSZWZsZWN0aW9uUHJvYmUpIHsKKyAgICBp
ZiAoIXRoaXMucmVmbGVjdGlvblByb2JlcykgeworICAgICAgICB0aGlzLnJlZmxlY3Rpb25Qcm9i
ZXMgPSBbXTsKKyAgICB9CisgICAgdGhpcy5yZWZsZWN0aW9uUHJvYmVzLnB1c2gobmV3UmVmbGVj
dGlvblByb2JlKTsKK307CisvKioKKyAqIENsYXNzIHVzZWQgdG8gZ2VuZXJhdGUgcmVhbHRpbWUg
cmVmbGVjdGlvbiAvIHJlZnJhY3Rpb24gY3ViZSB0ZXh0dXJlcworICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2VfcmVmbGVjdGlvbl9wcm9iZXMKKyAqLwor
dmFyIFJlZmxlY3Rpb25Qcm9iZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHJlZmxlY3Rpb24gcHJvYmUKKyAgICAgKiBAcGFyYW0g
bmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBwcm9iZQorICAgICAqIEBwYXJhbSBzaXplIGRl
ZmluZXMgdGhlIHRleHR1cmUgcmVzb2x1dGlvbiAoZm9yIGVhY2ggZmFjZSkKKyAgICAgKiBAcGFy
YW0gc2NlbmUgZGVmaW5lcyB0aGUgaG9zdGluZyBzY2VuZQorICAgICAqIEBwYXJhbSBnZW5lcmF0
ZU1pcE1hcHMgZGVmaW5lcyBpZiBtaXAgbWFwcyBzaG91bGQgYmUgZ2VuZXJhdGVkIGF1dG9tYXRp
Y2FsbHkgKHRydWUgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gdXNlRmxvYXQgZGVmaW5lcyBp
ZiBIRFIgZGF0YSAoZmxhb3QgZGF0YSkgc2hvdWxkIGJlIHVzZWQgdG8gc3RvcmUgY29sb3JzIChm
YWxzZSBieSBkZWZhdWx0KQorICAgICAqLworICAgIGZ1bmN0aW9uIFJlZmxlY3Rpb25Qcm9iZSgK
KyAgICAvKiogZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgcHJvYmUgKi8KKyAgICBuYW1lLCBzaXpl
LCBzY2VuZSwgZ2VuZXJhdGVNaXBNYXBzLCB1c2VGbG9hdCkgeworICAgICAgICB2YXIgX3RoaXMg
PSB0aGlzOworICAgICAgICBpZiAoZ2VuZXJhdGVNaXBNYXBzID09PSB2b2lkIDApIHsgZ2VuZXJh
dGVNaXBNYXBzID0gdHJ1ZTsgfQorICAgICAgICBpZiAodXNlRmxvYXQgPT09IHZvaWQgMCkgeyB1
c2VGbG9hdCA9IGZhbHNlOyB9CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRo
aXMuX3ZpZXdNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siTWF0cml4Il0uSWRlbnRpdHkoKTsKKyAgICAgICAgdGhpcy5fdGFyZ2V0ID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIHRoaXMuX2FkZCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB0aGlzLl9pbnZl
cnRZQXhpcyA9IGZhbHNlOworICAgICAgICAvKiogR2V0cyBvciBzZXRzIHByb2JlIHBvc2l0aW9u
IChjZW50ZXIgb2YgdGhlIGN1YmUgbWFwKSAqLworICAgICAgICB0aGlzLnBvc2l0aW9uID0gX01h
dGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5a
ZXJvKCk7CisgICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7CisgICAgICAgIC8vIENyZWF0ZSB0
aGUgc2NlbmUgZmllbGQgaWYgbm90IGV4aXN0LgorICAgICAgICBpZiAoIXRoaXMuX3NjZW5lLnJl
ZmxlY3Rpb25Qcm9iZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLnJlZmxlY3Rpb25Qcm9i
ZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zY2VuZS5yZWZsZWN0
aW9uUHJvYmVzLnB1c2godGhpcyk7CisgICAgICAgIHRoaXMuX3JlbmRlclRhcmdldFRleHR1cmUg
PSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlJlbmRlclRhcmdldFRleHR1cmUiXShuYW1lLCBzaXplLCBzY2Vu
ZSwgZ2VuZXJhdGVNaXBNYXBzLCB0cnVlLCB1c2VGbG9hdCA/IF9FbmdpbmVzX2NvbnN0YW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9B
VCA6IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJDb25z
dGFudHMiXS5URVhUVVJFVFlQRV9VTlNJR05FRF9JTlQsIHRydWUpOworICAgICAgICB0aGlzLl9y
ZW5kZXJUYXJnZXRUZXh0dXJlLm9uQmVmb3JlUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24g
KGZhY2VJbmRleCkgeworICAgICAgICAgICAgc3dpdGNoIChmYWNlSW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9hZGQuY29weUZyb21G
bG9hdHMoMSwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FkZC5jb3B5RnJvbUZsb2F0
cygtMSwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2FkZC5jb3B5RnJvbUZsb2F0cygw
LCBfdGhpcy5faW52ZXJ0WUF4aXMgPyAxIDogLTEsIDApOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgIF90aGlz
Ll9hZGQuY29weUZyb21GbG9hdHMoMCwgX3RoaXMuX2ludmVydFlBeGlzID8gLTEgOiAxLCAwKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAg
ICAgICAgICAgICAgICAgICBfdGhpcy5fYWRkLmNvcHlGcm9tRmxvYXRzKDAsIDAsIDEpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAg
ICAgICAgICAgICAgIF90aGlzLl9hZGQuY29weUZyb21GbG9hdHMoMCwgMCwgLTEpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfdGhp
cy5fYXR0YWNoZWRNZXNoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMucG9zaXRpb24uY29weUZy
b20oX3RoaXMuX2F0dGFjaGVkTWVzaC5nZXRBYnNvbHV0ZVBvc2l0aW9uKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgX3RoaXMucG9zaXRpb24uYWRkVG9SZWYoX3RoaXMuX2FkZCwgX3Ro
aXMuX3RhcmdldCk7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1siTWF0cml4Il0uTG9va0F0TEhUb1JlZihfdGhpcy5wb3NpdGlvbiwg
X3RoaXMuX3RhcmdldCwgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIlZlY3RvcjMiXS5VcCgpLCBfdGhpcy5fdmlld01hdHJpeCk7CisgICAgICAgICAgICBp
ZiAoc2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3Byb2plY3Rp
b25NYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siTWF0cml4Il0uUGVyc3BlY3RpdmVGb3ZMSChNYXRoLlBJIC8gMiwgMSwgc2NlbmUuYWN0aXZl
Q2FtZXJhLm1pblosIHNjZW5lLmFjdGl2ZUNhbWVyYS5tYXhaKTsKKyAgICAgICAgICAgICAgICBz
Y2VuZS5zZXRUcmFuc2Zvcm1NYXRyaXgoX3RoaXMuX3ZpZXdNYXRyaXgsIF90aGlzLl9wcm9qZWN0
aW9uTWF0cml4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNjZW5lLl9mb3JjZWRWaWV3
UG9zaXRpb24gPSBfdGhpcy5wb3NpdGlvbjsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3Jl
bmRlclRhcmdldFRleHR1cmUub25BZnRlclVuYmluZE9ic2VydmFibGUuYWRkKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHNjZW5lLl9mb3JjZWRWaWV3UG9zaXRpb24gPSBudWxsOworICAgICAg
ICAgICAgc2NlbmUudXBkYXRlVHJhbnNmb3JtTWF0cml4KHRydWUpOworICAgICAgICB9KTsKKyAg
ICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3Rpb25Qcm9iZS5wcm90b3R5cGUs
ICJzYW1wbGVzIiwgeworICAgICAgICAvKiogR2V0cyBvciBzZXRzIHRoZSBudW1iZXIgb2Ygc2Ft
cGxlcyB0byB1c2UgZm9yIG11bHRpLXNhbXBsaW5nICgwIGJ5IGRlZmF1bHQpLiBSZXF1aXJlZCBX
ZWJHTDIgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fcmVuZGVyVGFyZ2V0VGV4dHVyZS5zYW1wbGVzOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fcmVuZGVyVGFyZ2V0VGV4
dHVyZS5zYW1wbGVzID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRy
dWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShSZWZsZWN0aW9uUHJvYmUucHJvdG90eXBlLCAicmVmcmVzaFJhdGUiLCB7Cisg
ICAgICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIHJlZnJlc2ggcmF0ZSB0byB1c2UgKG9uIGV2ZXJ5
IGZyYW1lIGJ5IGRlZmF1bHQpICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclRhcmdldFRleHR1cmUucmVmcmVzaFJhdGU7CisgICAg
ICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlz
Ll9yZW5kZXJUYXJnZXRUZXh0dXJlLnJlZnJlc2hSYXRlID0gdmFsdWU7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcmV0
dXJucyBhIFNjZW5lCisgICAgICovCisgICAgUmVmbGVjdGlvblByb2JlLnByb3RvdHlwZS5nZXRT
Y2VuZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lOworICAgIH07
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3Rpb25Qcm9iZS5wcm90b3R5cGUsICJj
dWJlVGV4dHVyZSIsIHsKKyAgICAgICAgLyoqIEdldHMgdGhlIGludGVybmFsIEN1YmVUZXh0dXJl
IHVzZWQgdG8gcmVuZGVyIHRvICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclRhcmdldFRleHR1cmU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWZsZWN0aW9uUHJvYmUucHJvdG90eXBlLCAi
cmVuZGVyTGlzdCIsIHsKKyAgICAgICAgLyoqIEdldHMgdGhlIGxpc3Qgb2YgbWVzaGVzIHRvIHJl
bmRlciAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9yZW5kZXJUYXJnZXRUZXh0dXJlLnJlbmRlckxpc3Q7CisgICAgICAgIH0sCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOwor
ICAgIC8qKgorICAgICAqIEF0dGFjaCB0aGUgcHJvYmUgdG8gYSBzcGVjaWZpYyBtZXNoIChSZW5k
ZXJpbmcgd2lsbCBiZSBkb25lIGZyb20gYXR0YWNoZWQgbWVzaCdzIHBvc2l0aW9uKQorICAgICAq
IEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIG1lc2ggdG8gYXR0YWNoIHRvCisgICAgICovCisgICAg
UmVmbGVjdGlvblByb2JlLnByb3RvdHlwZS5hdHRhY2hUb01lc2ggPSBmdW5jdGlvbiAobWVzaCkg
eworICAgICAgICB0aGlzLl9hdHRhY2hlZE1lc2ggPSBtZXNoOworICAgIH07CisgICAgLyoqCisg
ICAgICogU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBzdGVuY2lsIGFuZCBkZXB0aCBidWZm
ZXIgYXJlIGNsZWFyZWQgYmV0d2VlbiB0d28gcmVuZGVyaW5nIGdyb3VwcworICAgICAqIEBwYXJh
bSByZW5kZXJpbmdHcm91cElkIFRoZSByZW5kZXJpbmcgZ3JvdXAgaWQgY29ycmVzcG9uZGluZyB0
byBpdHMgaW5kZXgKKyAgICAgKiBAcGFyYW0gYXV0b0NsZWFyRGVwdGhTdGVuY2lsIEF1dG9tYXRp
Y2FsbHkgY2xlYXJzIGRlcHRoIGFuZCBzdGVuY2lsIGJldHdlZW4gZ3JvdXBzIGlmIHRydWUuCisg
ICAgICovCisgICAgUmVmbGVjdGlvblByb2JlLnByb3RvdHlwZS5zZXRSZW5kZXJpbmdBdXRvQ2xl
YXJEZXB0aFN0ZW5jaWwgPSBmdW5jdGlvbiAocmVuZGVyaW5nR3JvdXBJZCwgYXV0b0NsZWFyRGVw
dGhTdGVuY2lsKSB7CisgICAgICAgIHRoaXMuX3JlbmRlclRhcmdldFRleHR1cmUuc2V0UmVuZGVy
aW5nQXV0b0NsZWFyRGVwdGhTdGVuY2lsKHJlbmRlcmluZ0dyb3VwSWQsIGF1dG9DbGVhckRlcHRo
U3RlbmNpbCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBDbGVhbiBhbGwgYXNzb2NpYXRlZCBy
ZXNvdXJjZXMKKyAgICAgKi8KKyAgICBSZWZsZWN0aW9uUHJvYmUucHJvdG90eXBlLmRpc3Bvc2Ug
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NjZW5lLnJlZmxlY3Rp
b25Qcm9iZXMuaW5kZXhPZih0aGlzKTsKKyAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAg
ICAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIHNjZW5lIGlmIGZvdW5kCisgICAgICAgICAgICB0
aGlzLl9zY2VuZS5yZWZsZWN0aW9uUHJvYmVzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuX3JlbmRlclRhcmdldFRleHR1cmUpIHsKKyAgICAgICAgICAgIHRo
aXMuX3JlbmRlclRhcmdldFRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5fcmVu
ZGVyVGFyZ2V0VGV4dHVyZSA9IG51bGw7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIENvbnZlcnRzIHRoZSByZWZsZWN0aW9uIHByb2JlIGluZm9ybWF0aW9uIHRvIGEgcmVhZGFi
bGUgc3RyaW5nIGZvciBkZWJ1ZyBwdXJwb3NlLgorICAgICAqIEBwYXJhbSBmdWxsRGV0YWlscyBT
dXBwb3J0cyBmb3IgbXVsdGlwbGUgbGV2ZWxzIG9mIGxvZ2dpbmcgd2l0aGluIHNjZW5lIGxvYWRp
bmcKKyAgICAgKiBAcmV0dXJucyB0aGUgaHVtYW4gcmVhZGFibGUgcmVmbGVjdGlvbiBwcm9iZSBp
bmZvCisgICAgICovCisgICAgUmVmbGVjdGlvblByb2JlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1
bmN0aW9uIChmdWxsRGV0YWlscykgeworICAgICAgICB2YXIgcmV0ID0gIk5hbWU6ICIgKyB0aGlz
Lm5hbWU7CisgICAgICAgIGlmIChmdWxsRGV0YWlscykgeworICAgICAgICAgICAgcmV0ICs9ICIs
IHBvc2l0aW9uOiAiICsgdGhpcy5wb3NpdGlvbi50b1N0cmluZygpOworICAgICAgICAgICAgaWYg
KHRoaXMuX2F0dGFjaGVkTWVzaCkgeworICAgICAgICAgICAgICAgIHJldCArPSAiLCBhdHRhY2hl
ZCBtZXNoOiAiICsgdGhpcy5fYXR0YWNoZWRNZXNoLm5hbWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCB0
aGUgY2xhc3MgbmFtZSBvZiB0aGUgcmVsZmVjdGlvbiBwcm9iZS4KKyAgICAgKiBAcmV0dXJucyAi
UmVmbGVjdGlvblByb2JlIgorICAgICAqLworICAgIFJlZmxlY3Rpb25Qcm9iZS5wcm90b3R5cGUu
Z2V0Q2xhc3NOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIlJlZmxlY3Rpb25Q
cm9iZSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemUgdGhlIHJlZmxlY3Rpb24g
cHJvYmUgdG8gYSBKU09OIHJlcHJlc2VudGF0aW9uIHdlIGNhbiBlYXNpbHkgdXNlIGluIHRoZSBy
ZXNlcGVjdGl2ZSBQYXJzZSBmdW5jdGlvbi4KKyAgICAgKiBAcmV0dXJucyBUaGUgSlNPTiByZXBy
ZXNlbnRhdGlvbiBvZiB0aGUgdGV4dHVyZQorICAgICAqLworICAgIFJlZmxlY3Rpb25Qcm9iZS5w
cm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VyaWFsaXph
dGlvbk9iamVjdCA9IF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siU2VyaWFsaXphdGlvbkhlbHBlciJdLlNlcmlhbGl6ZSh0aGlzLCB0aGlzLl9yZW5kZXJUYXJn
ZXRUZXh0dXJlLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgc2VyaWFsaXphdGlvbk9iamVjdC5pc1Jl
ZmxlY3Rpb25Qcm9iZSA9IHRydWU7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uT2JqZWN0
OworICAgIH07CisgICAgLyoqCisgICAgICogUGFyc2UgdGhlIEpTT04gcmVwcmVzZW50YXRpb24g
b2YgYSByZWZsZWN0aW9uIHByb2JlIGluIG9yZGVyIHRvIHJlY3JlYXRlIHRoZSByZWZsZWN0aW9u
IHByb2JlIGluIHRoZSBnaXZlbiBzY2VuZS4KKyAgICAgKiBAcGFyYW0gcGFyc2VkUmVmbGVjdGlv
blByb2JlIERlZmluZSB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVmbGVjdGlvbiBw
cm9iZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmUgdGhlIHNjZW5lIHRoZSBwYXJzZWQgcmVm
bGVjdGlvbiBwcm9iZSBzaG91bGQgYmUgaW5zdGFudGlhdGVkIGluCisgICAgICogQHBhcmFtIHJv
b3RVcmwgRGVmaW5lIHRoZSByb290IHVybCBvZiB0aGUgcGFyc2luZyBzZXF1ZW5jZSBpbiB0aGUg
Y2FzZSBvZiByZWxhdGl2ZSBkZXBlbmRlbmNpZXMKKyAgICAgKiBAcmV0dXJucyBUaGUgcGFyc2Vk
IHJlZmxlY3Rpb24gcHJvYmUgaWYgc3VjY2Vzc2Z1bAorICAgICAqLworICAgIFJlZmxlY3Rpb25Q
cm9iZS5QYXJzZSA9IGZ1bmN0aW9uIChwYXJzZWRSZWZsZWN0aW9uUHJvYmUsIHNjZW5lLCByb290
VXJsKSB7CisgICAgICAgIHZhciByZWZsZWN0aW9uUHJvYmUgPSBudWxsOworICAgICAgICBpZiAo
c2NlbmUucmVmbGVjdGlvblByb2JlcykgeworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAw
OyBpbmRleCA8IHNjZW5lLnJlZmxlY3Rpb25Qcm9iZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHJwID0gc2NlbmUucmVmbGVjdGlvblByb2Jlc1tpbmRleF07CisgICAg
ICAgICAgICAgICAgaWYgKHJwLm5hbWUgPT09IHBhcnNlZFJlZmxlY3Rpb25Qcm9iZS5uYW1lKSB7
CisgICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb25Qcm9iZSA9IHJwOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmVmbGVjdGlvblByb2JlID0gX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJTZXJpYWxpemF0aW9uSGVscGVyIl0uUGFyc2UoZnVuY3Rpb24g
KCkgeyByZXR1cm4gcmVmbGVjdGlvblByb2JlIHx8IG5ldyBSZWZsZWN0aW9uUHJvYmUocGFyc2Vk
UmVmbGVjdGlvblByb2JlLm5hbWUsIHBhcnNlZFJlZmxlY3Rpb25Qcm9iZS5yZW5kZXJUYXJnZXRT
aXplLCBzY2VuZSwgcGFyc2VkUmVmbGVjdGlvblByb2JlLl9nZW5lcmF0ZU1pcE1hcHMpOyB9LCBw
YXJzZWRSZWZsZWN0aW9uUHJvYmUsIHNjZW5lLCByb290VXJsKTsKKyAgICAgICAgcmVmbGVjdGlv
blByb2JlLmN1YmVUZXh0dXJlLl93YWl0aW5nUmVuZGVyTGlzdCA9IHBhcnNlZFJlZmxlY3Rpb25Q
cm9iZS5yZW5kZXJMaXN0OworICAgICAgICBpZiAocGFyc2VkUmVmbGVjdGlvblByb2JlLl9hdHRh
Y2hlZE1lc2gpIHsKKyAgICAgICAgICAgIHJlZmxlY3Rpb25Qcm9iZS5hdHRhY2hUb01lc2goc2Nl
bmUuZ2V0TWVzaEJ5SUQocGFyc2VkUmVmbGVjdGlvblByb2JlLl9hdHRhY2hlZE1lc2gpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmVmbGVjdGlvblByb2JlOworICAgIH07CisgICAgdHNs
aWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAg
T2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2Vy
aWFsaXplQXNNZXNoUmVmZXJlbmNlIl0pKCkKKyAgICBdLCBSZWZsZWN0aW9uUHJvYmUucHJvdG90
eXBlLCAiX2F0dGFjaGVkTWVzaCIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9NaXNjX2RlY29y
YXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2VyaWFsaXplQXNWZWN0b3IzIl0p
KCkKKyAgICBdLCBSZWZsZWN0aW9uUHJvYmUucHJvdG90eXBlLCAicG9zaXRpb24iLCB2b2lkIDAp
OworICAgIHJldHVybiBSZWZsZWN0aW9uUHJvYmU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1JlbmRlcmluZy9ib3VuZGluZ0JveFJlbmRlcmVyLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUmVuZGVyaW5n
L2JvdW5kaW5nQm94UmVuZGVyZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEJvdW5kaW5nQm94UmVu
ZGVyZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmRpbmdCb3hS
ZW5kZXJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQm91bmRpbmdCb3hSZW5kZXJlcjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICov
ICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVz
X2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWVzaGVzL2Fic3RyYWN0TWVzaCAqLyAiLi9NZXNoZXMvYWJzdHJhY3RN
ZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19tZXNoX3ZlcnRleERh
dGFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01lc2hlcy9tZXNoLnZlcnRleERhdGEgKi8gIi4vTWVzaGVzL21lc2gudmVydGV4RGF0YS50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMv
bWF0aC52ZWN0b3IgKi8gIi4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NaXNjL3NtYXJ0QXJyYXkgKi8gIi4vTWlzYy9z
bWFydEFycmF5LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lQ29tcG9uZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9zY2VuZUNvbXBvbmVudCAqLyAiLi9zY2VuZUNvbXBvbmVudC50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbCAqLyAi
Li9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX3NoYWRlck1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc2hhZGVyTWF0ZXJpYWwgKi8gIi4vTWF0
ZXJpYWxzL3NoYWRlck1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01l
c2hlc19CdWlsZGVyc19ib3hCdWlsZGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvQnVpbGRlcnMvYm94QnVpbGRlciAqLyAi
Li9NZXNoZXMvQnVpbGRlcnMvYm94QnVpbGRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzX2NvbG9yX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9jb2xvci5mcmFnbWVudCAqLyAi
Li9TaGFkZXJzL2NvbG9yLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNfY29sb3JfdmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9jb2xvci52ZXJ0ZXggKi8gIi4vU2hhZGVy
cy9jb2xvci52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGhzL21hdGguY29sb3IgKi8gIi4vTWF0aHMvbWF0aC5jb2xvci50cyIpOwor
CisKKworCisKKworCisKKworCisKKworCitPYmplY3QuZGVmaW5lUHJvcGVydHkoX3NjZW5lX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lIl0ucHJvdG90eXBlLCAiZm9yY2VTaG93
Qm91bmRpbmdCb3hlcyIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2ZvcmNlU2hvd0JvdW5kaW5nQm94ZXMgfHwgZmFsc2U7CisgICAgfSwKKyAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB0aGlzLl9mb3JjZVNob3dCb3VuZGluZ0JveGVz
ID0gdmFsdWU7CisgICAgICAgIC8vIExhenlseSBjcmVhdGVzIGEgQkIgcmVuZGVyZXIgaWYgbmVl
ZGVkLgorICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuZ2V0Qm91bmRpbmdC
b3hSZW5kZXJlcigpOworICAgICAgICB9CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorfSk7Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siU2NlbmUiXS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3hSZW5kZXJlciA9IGZ1bmN0
aW9uICgpIHsKKyAgICBpZiAoIXRoaXMuX2JvdW5kaW5nQm94UmVuZGVyZXIpIHsKKyAgICAgICAg
dGhpcy5fYm91bmRpbmdCb3hSZW5kZXJlciA9IG5ldyBCb3VuZGluZ0JveFJlbmRlcmVyKHRoaXMp
OworICAgIH0KKyAgICByZXR1cm4gdGhpcy5fYm91bmRpbmdCb3hSZW5kZXJlcjsKK307CitPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siQWJzdHJhY3RNZXNoIl0ucHJvdG90eXBlLCAic2hvd0JvdW5kaW5nQm94Iiwg
eworICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0JvdW5k
aW5nQm94IHx8IGZhbHNlOworICAgIH0sCisgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgdGhpcy5fc2hvd0JvdW5kaW5nQm94ID0gdmFsdWU7CisgICAgICAgIC8vIExhenlseSBj
cmVhdGVzIGEgQkIgcmVuZGVyZXIgaWYgbmVlZGVkLgorICAgICAgICBpZiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIHRoaXMuZ2V0U2NlbmUoKS5nZXRCb3VuZGluZ0JveFJlbmRlcmVyKCk7CisgICAg
ICAgIH0KKyAgICB9LAorICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgY29uZmlndXJhYmxlOiB0
cnVlCit9KTsKKy8qKgorICogQ29tcG9uZW50IHJlc3BvbnNpYmxlIG9mIHJlbmRlcmluZyB0aGUg
Ym91bmRpbmcgYm94IG9mIHRoZSBtZXNoZXMgaW4gYSBzY2VuZS4KKyAqIFRoaXMgaXMgdXN1YWxs
eSB1c2VkIHRocm91Z2ggdGhlIG1lc2guc2hvd0JvdW5kaW5nQm94IG9yIHRoZSBzY2VuZS5mb3Jj
ZVNob3dCb3VuZGluZ0JveGVzIHByb3BlcnRpZXMKKyAqLwordmFyIEJvdW5kaW5nQm94UmVuZGVy
ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFu
dGlhdGVzIGEgbmV3IGJvdW5kaW5nIGJveCByZW5kZXJlciBpbiBhIHNjZW5lLgorICAgICAqIEBw
YXJhbSBzY2VuZSB0aGUgc2NlbmUgdGhlICByZW5kZXJlciByZW5kZXJzIGluCisgICAgICovCisg
ICAgZnVuY3Rpb24gQm91bmRpbmdCb3hSZW5kZXJlcihzY2VuZSkgeworICAgICAgICAvKioKKyAg
ICAgICAgICogVGhlIGNvbXBvbmVudCBuYW1lIGhlbHBmdWxsIHRvIGlkZW50aWZ5IHRoZSBjb21w
b25lbnQgaW4gdGhlIGxpc3Qgb2Ygc2NlbmUgY29tcG9uZW50cy4KKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMubmFtZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfQk9VTkRJTkdCT1hSRU5ERVJFUjsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIENvbG9yIG9mIHRoZSBib3VuZGluZyBib3ggbGluZXMg
cGxhY2VkIGluIGZyb250IG9mIGFuIG9iamVjdAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5m
cm9udENvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMl9fWyJDb2xvcjMiXSgxLCAxLCAxKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbG9y
IG9mIHRoZSBib3VuZGluZyBib3ggbGluZXMgcGxhY2VkIGJlaGluZCBhbiBvYmplY3QKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuYmFja0NvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJDb2xvcjMiXSgwLjEsIDAuMSwgMC4xKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgaWYgdGhlIHJlbmRlcmVyIHNob3VsZCBzaG93
IHRoZSBiYWNrIGxpbmVzIG9yIG5vdAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zaG93QmFj
a0xpbmVzID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMucmVuZGVyTGlzdCA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNtYXJ0QXJyYXkiXSgzMik7CisgICAgICAgIHRoaXMu
X3ZlcnRleEJ1ZmZlcnMgPSB7fTsKKyAgICAgICAgdGhpcy5fZmlsbEluZGV4QnVmZmVyID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fZmlsbEluZGV4RGF0YSA9IG51bGw7CisgICAgICAgIHRoaXMuc2Nl
bmUgPSBzY2VuZTsKKyAgICAgICAgc2NlbmUuX2FkZENvbXBvbmVudCh0aGlzKTsKKyAgICB9Cisg
ICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25lbnQgaW4gYSBnaXZlbiBzY2VuZQor
ICAgICAqLworICAgIEJvdW5kaW5nQm94UmVuZGVyZXIucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB0aGlzLnNjZW5lLl9iZWZvcmVFdmFsdWF0ZUFjdGl2ZU1lc2hT
dGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9CRUZPUkVFVkFMVUFURUFDVElW
RU1FU0hfQk9VTkRJTkdCT1hSRU5ERVJFUiwgdGhpcywgdGhpcy5yZXNldCk7CisgICAgICAgIHRo
aXMuc2NlbmUuX2FjdGl2ZU1lc2hTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RF
UF9BQ1RJVkVNRVNIX0JPVU5ESU5HQk9YUkVOREVSRVIsIHRoaXMsIHRoaXMuX2FjdGl2ZU1lc2gp
OworICAgICAgICB0aGlzLnNjZW5lLl9ldmFsdWF0ZVN1Yk1lc2hTdGFnZS5yZWdpc3RlclN0ZXAo
X3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNjZW5lQ29tcG9u
ZW50Q29uc3RhbnRzIl0uU1RFUF9FVkFMVUFURVNVQk1FU0hfQk9VTkRJTkdCT1hSRU5ERVJFUiwg
dGhpcywgdGhpcy5fZXZhbHVhdGVTdWJNZXNoKTsKKyAgICAgICAgdGhpcy5zY2VuZS5fYWZ0ZXJS
ZW5kZXJpbmdHcm91cERyYXdTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9B
RlRFUlJFTkRFUklOR0dST1VQRFJBV19CT1VORElOR0JPWFJFTkRFUkVSLCB0aGlzLCB0aGlzLnJl
bmRlcik7CisgICAgfTsKKyAgICBCb3VuZGluZ0JveFJlbmRlcmVyLnByb3RvdHlwZS5fZXZhbHVh
dGVTdWJNZXNoID0gZnVuY3Rpb24gKG1lc2gsIHN1Yk1lc2gpIHsKKyAgICAgICAgaWYgKG1lc2gu
c2hvd1N1Yk1lc2hlc0JvdW5kaW5nQm94KSB7CisgICAgICAgICAgICB2YXIgYm91bmRpbmdJbmZv
ID0gc3ViTWVzaC5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgICAgIGlmIChib3VuZGluZ0lu
Zm8gIT09IG51bGwgJiYgYm91bmRpbmdJbmZvICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
ICAgICBib3VuZGluZ0luZm8uYm91bmRpbmdCb3guX3RhZyA9IG1lc2gucmVuZGVyaW5nR3JvdXBJ
ZDsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckxpc3QucHVzaChib3VuZGluZ0luZm8uYm91
bmRpbmdCb3gpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBCb3VuZGlu
Z0JveFJlbmRlcmVyLnByb3RvdHlwZS5fYWN0aXZlTWVzaCA9IGZ1bmN0aW9uIChzb3VyY2VNZXNo
LCBtZXNoKSB7CisgICAgICAgIGlmIChzb3VyY2VNZXNoLnNob3dCb3VuZGluZ0JveCB8fCB0aGlz
LnNjZW5lLmZvcmNlU2hvd0JvdW5kaW5nQm94ZXMpIHsKKyAgICAgICAgICAgIHZhciBib3VuZGlu
Z0luZm8gPSBzb3VyY2VNZXNoLmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICAgICAgYm91bmRp
bmdJbmZvLmJvdW5kaW5nQm94Ll90YWcgPSBtZXNoLnJlbmRlcmluZ0dyb3VwSWQ7CisgICAgICAg
ICAgICB0aGlzLnJlbmRlckxpc3QucHVzaChib3VuZGluZ0luZm8uYm91bmRpbmdCb3gpOworICAg
ICAgICB9CisgICAgfTsKKyAgICBCb3VuZGluZ0JveFJlbmRlcmVyLnByb3RvdHlwZS5fcHJlcGFy
ZVJlc3NvdXJjZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9jb2xvclNoYWRl
cikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NvbG9y
U2hhZGVyID0gbmV3IF9NYXRlcmlhbHNfc2hhZGVyTWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzhfX1siU2hhZGVyTWF0ZXJpYWwiXSgiY29sb3JTaGFkZXIiLCB0aGlzLnNjZW5lLCAi
Y29sb3IiLCB7CisgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbX01lc2hlc19idWZmZXJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXSwKKyAg
ICAgICAgICAgIHVuaWZvcm1zOiBbIndvcmxkIiwgInZpZXdQcm9qZWN0aW9uIiwgImNvbG9yIl0K
KyAgICAgICAgfSk7CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLnNjZW5lLmdldEVuZ2luZSgp
OworICAgICAgICB2YXIgYm94ZGF0YSA9IF9NZXNoZXNfbWVzaF92ZXJ0ZXhEYXRhX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlcnRleERhdGEiXS5DcmVhdGVCb3goeyBzaXplOiAxLjAg
fSk7CisgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kXSA9IG5ldyBf
TWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIi
XShlbmdpbmUsIGJveGRhdGEucG9zaXRpb25zLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIGZhbHNlKTsKKyAg
ICAgICAgdGhpcy5fY3JlYXRlSW5kZXhCdWZmZXIoKTsKKyAgICAgICAgdGhpcy5fZmlsbEluZGV4
RGF0YSA9IGJveGRhdGEuaW5kaWNlczsKKyAgICB9OworICAgIEJvdW5kaW5nQm94UmVuZGVyZXIu
cHJvdG90eXBlLl9jcmVhdGVJbmRleEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IGVuZ2luZSA9IHRoaXMuc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIHRoaXMuX2luZGV4QnVm
ZmVyID0gZW5naW5lLmNyZWF0ZUluZGV4QnVmZmVyKFswLCAxLCAxLCAyLCAyLCAzLCAzLCAwLCA0
LCA1LCA1LCA2LCA2LCA3LCA3LCA0LCAwLCA3LCAxLCA2LCAyLCA1LCAzLCA0XSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBSZWJ1aWxkcyB0aGUgZWxlbWVudHMgcmVsYXRlZCB0byB0aGlzIGNv
bXBvbmVudCBpbiBjYXNlIG9mCisgICAgICogY29udGV4dCBsb3N0IGZvciBpbnN0YW5jZS4KKyAg
ICAgKi8KKyAgICBCb3VuZGluZ0JveFJlbmRlcmVyLnByb3RvdHlwZS5yZWJ1aWxkID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB2YXIgdmIgPSB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9u
S2luZF07CisgICAgICAgIGlmICh2YikgeworICAgICAgICAgICAgdmIuX3JlYnVpbGQoKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9jcmVhdGVJbmRleEJ1ZmZlcigpOworICAgIH07CisgICAg
LyoqCisgICAgICogQGhpZGRlbgorICAgICAqLworICAgIEJvdW5kaW5nQm94UmVuZGVyZXIucHJv
dG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLnJlbmRlckxpc3QucmVz
ZXQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbmRlciB0aGUgYm91bmRpbmcgYm94ZXMg
b2YgYSBzcGVjaWZpYyByZW5kZXJpbmcgZ3JvdXAKKyAgICAgKiBAcGFyYW0gcmVuZGVyaW5nR3Jv
dXBJZCBkZWZpbmVzIHRoZSByZW5kZXJpbmcgZ3JvdXAgdG8gcmVuZGVyCisgICAgICovCisgICAg
Qm91bmRpbmdCb3hSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlcmlu
Z0dyb3VwSWQpIHsKKyAgICAgICAgaWYgKHRoaXMucmVuZGVyTGlzdC5sZW5ndGggPT09IDApIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9wcmVwYXJlUmVz
c291cmNlcygpOworICAgICAgICBpZiAoIXRoaXMuX2NvbG9yU2hhZGVyLmlzUmVhZHkoKSkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlz
LnNjZW5lLmdldEVuZ2luZSgpOworICAgICAgICBlbmdpbmUuc2V0RGVwdGhXcml0ZShmYWxzZSk7
CisgICAgICAgIHRoaXMuX2NvbG9yU2hhZGVyLl9wcmVCaW5kKCk7CisgICAgICAgIGZvciAodmFy
IGJvdW5kaW5nQm94SW5kZXggPSAwOyBib3VuZGluZ0JveEluZGV4IDwgdGhpcy5yZW5kZXJMaXN0
Lmxlbmd0aDsgYm91bmRpbmdCb3hJbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgYm91bmRpbmdC
b3ggPSB0aGlzLnJlbmRlckxpc3QuZGF0YVtib3VuZGluZ0JveEluZGV4XTsKKyAgICAgICAgICAg
IGlmIChib3VuZGluZ0JveC5fdGFnICE9PSByZW5kZXJpbmdHcm91cElkKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbWluID0gYm91
bmRpbmdCb3gubWluaW11bTsKKyAgICAgICAgICAgIHZhciBtYXggPSBib3VuZGluZ0JveC5tYXhp
bXVtOworICAgICAgICAgICAgdmFyIGRpZmYgPSBtYXguc3VidHJhY3QobWluKTsKKyAgICAgICAg
ICAgIHZhciBtZWRpYW4gPSBtaW4uYWRkKGRpZmYuc2NhbGUoMC41KSk7CisgICAgICAgICAgICB2
YXIgd29ybGRNYXRyaXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzRfX1siTWF0cml4Il0uU2NhbGluZyhkaWZmLngsIGRpZmYueSwgZGlmZi56KQorICAgICAg
ICAgICAgICAgIC5tdWx0aXBseShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siTWF0cml4Il0uVHJhbnNsYXRpb24obWVkaWFuLngsIG1lZGlhbi55LCBtZWRp
YW4ueikpCisgICAgICAgICAgICAgICAgLm11bHRpcGx5KGJvdW5kaW5nQm94LmdldFdvcmxkTWF0
cml4KCkpOworICAgICAgICAgICAgLy8gVkJPcworICAgICAgICAgICAgZW5naW5lLmJpbmRCdWZm
ZXJzKHRoaXMuX3ZlcnRleEJ1ZmZlcnMsIHRoaXMuX2luZGV4QnVmZmVyLCB0aGlzLl9jb2xvclNo
YWRlci5nZXRFZmZlY3QoKSk7CisgICAgICAgICAgICBpZiAodGhpcy5zaG93QmFja0xpbmVzKSB7
CisgICAgICAgICAgICAgICAgLy8gQmFjaworICAgICAgICAgICAgICAgIGVuZ2luZS5zZXREZXB0
aEZ1bmN0aW9uVG9HcmVhdGVyT3JFcXVhbCgpOworICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUu
cmVzZXRDYWNoZWRNYXRlcmlhbCgpOworICAgICAgICAgICAgICAgIHRoaXMuX2NvbG9yU2hhZGVy
LnNldENvbG9yNCgiY29sb3IiLCB0aGlzLmJhY2tDb2xvci50b0NvbG9yNCgpKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9jb2xvclNoYWRlci5iaW5kKHdvcmxkTWF0cml4KTsKKyAgICAgICAgICAg
ICAgICAvLyBEcmF3IG9yZGVyCisgICAgICAgICAgICAgICAgZW5naW5lLmRyYXdFbGVtZW50c1R5
cGUoX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJNYXRl
cmlhbCJdLkxpbmVMaXN0RHJhd01vZGUsIDAsIDI0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIC8vIEZyb250CisgICAgICAgICAgICBlbmdpbmUuc2V0RGVwdGhGdW5jdGlvblRvTGVzcygp
OworICAgICAgICAgICAgdGhpcy5zY2VuZS5yZXNldENhY2hlZE1hdGVyaWFsKCk7CisgICAgICAg
ICAgICB0aGlzLl9jb2xvclNoYWRlci5zZXRDb2xvcjQoImNvbG9yIiwgdGhpcy5mcm9udENvbG9y
LnRvQ29sb3I0KCkpOworICAgICAgICAgICAgdGhpcy5fY29sb3JTaGFkZXIuYmluZCh3b3JsZE1h
dHJpeCk7CisgICAgICAgICAgICAvLyBEcmF3IG9yZGVyCisgICAgICAgICAgICBlbmdpbmUuZHJh
d0VsZW1lbnRzVHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV83X19bIk1hdGVyaWFsIl0uTGluZUxpc3REcmF3TW9kZSwgMCwgMjQpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2NvbG9yU2hhZGVyLnVuYmluZCgpOworICAgICAgICBlbmdpbmUuc2V0RGVw
dGhGdW5jdGlvblRvTGVzc09yRXF1YWwoKTsKKyAgICAgICAgZW5naW5lLnNldERlcHRoV3JpdGUo
dHJ1ZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbiBjYXNlIG9mIG9jY2x1c2lvbiBxdWVy
aWVzLCB3ZSBjYW4gcmVuZGVyIHRoZSBvY2NsdXNpb24gYm91bmRpbmcgYm94IHRocm91Z2ggdGhp
cyBtZXRob2QKKyAgICAgKiBAcGFyYW0gbWVzaCBEZWZpbmUgdGhlIG1lc2ggdG8gcmVuZGVyIHRo
ZSBvY2NsdXNpb24gYm91bmRpbmcgYm94IGZvcgorICAgICAqLworICAgIEJvdW5kaW5nQm94UmVu
ZGVyZXIucHJvdG90eXBlLnJlbmRlck9jY2x1c2lvbkJvdW5kaW5nQm94ID0gZnVuY3Rpb24gKG1l
c2gpIHsKKyAgICAgICAgdGhpcy5fcHJlcGFyZVJlc3NvdXJjZXMoKTsKKyAgICAgICAgaWYgKCF0
aGlzLl9jb2xvclNoYWRlci5pc1JlYWR5KCkgfHwgIW1lc2guX2JvdW5kaW5nSW5mbykgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLnNj
ZW5lLmdldEVuZ2luZSgpOworICAgICAgICBpZiAoIXRoaXMuX2ZpbGxJbmRleEJ1ZmZlcikgewor
ICAgICAgICAgICAgdGhpcy5fZmlsbEluZGV4QnVmZmVyID0gZW5naW5lLmNyZWF0ZUluZGV4QnVm
ZmVyKHRoaXMuX2ZpbGxJbmRleERhdGEpOworICAgICAgICB9CisgICAgICAgIGVuZ2luZS5zZXRE
ZXB0aFdyaXRlKGZhbHNlKTsKKyAgICAgICAgZW5naW5lLnNldENvbG9yV3JpdGUoZmFsc2UpOwor
ICAgICAgICB0aGlzLl9jb2xvclNoYWRlci5fcHJlQmluZCgpOworICAgICAgICB2YXIgYm91bmRp
bmdCb3ggPSBtZXNoLl9ib3VuZGluZ0luZm8uYm91bmRpbmdCb3g7CisgICAgICAgIHZhciBtaW4g
PSBib3VuZGluZ0JveC5taW5pbXVtOworICAgICAgICB2YXIgbWF4ID0gYm91bmRpbmdCb3gubWF4
aW11bTsKKyAgICAgICAgdmFyIGRpZmYgPSBtYXguc3VidHJhY3QobWluKTsKKyAgICAgICAgdmFy
IG1lZGlhbiA9IG1pbi5hZGQoZGlmZi5zY2FsZSgwLjUpKTsKKyAgICAgICAgdmFyIHdvcmxkTWF0
cml4ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1h
dHJpeCJdLlNjYWxpbmcoZGlmZi54LCBkaWZmLnksIGRpZmYueikKKyAgICAgICAgICAgIC5tdWx0
aXBseShfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siTWF0
cml4Il0uVHJhbnNsYXRpb24obWVkaWFuLngsIG1lZGlhbi55LCBtZWRpYW4ueikpCisgICAgICAg
ICAgICAubXVsdGlwbHkoYm91bmRpbmdCb3guZ2V0V29ybGRNYXRyaXgoKSk7CisgICAgICAgIGVu
Z2luZS5iaW5kQnVmZmVycyh0aGlzLl92ZXJ0ZXhCdWZmZXJzLCB0aGlzLl9maWxsSW5kZXhCdWZm
ZXIsIHRoaXMuX2NvbG9yU2hhZGVyLmdldEVmZmVjdCgpKTsKKyAgICAgICAgZW5naW5lLnNldERl
cHRoRnVuY3Rpb25Ub0xlc3MoKTsKKyAgICAgICAgdGhpcy5zY2VuZS5yZXNldENhY2hlZE1hdGVy
aWFsKCk7CisgICAgICAgIHRoaXMuX2NvbG9yU2hhZGVyLmJpbmQod29ybGRNYXRyaXgpOworICAg
ICAgICBlbmdpbmUuZHJhd0VsZW1lbnRzVHlwZShfTWF0ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIk1hdGVyaWFsIl0uVHJpYW5nbGVGaWxsTW9kZSwgMCwgMzYp
OworICAgICAgICB0aGlzLl9jb2xvclNoYWRlci51bmJpbmQoKTsKKyAgICAgICAgZW5naW5lLnNl
dERlcHRoRnVuY3Rpb25Ub0xlc3NPckVxdWFsKCk7CisgICAgICAgIGVuZ2luZS5zZXREZXB0aFdy
aXRlKHRydWUpOworICAgICAgICBlbmdpbmUuc2V0Q29sb3JXcml0ZSh0cnVlKTsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIERpc3Bvc2UgYW5kIHJlbGVhc2UgdGhlIHJlc291cmNlcyBhdHRhY2hl
ZCB0byB0aGlzIHJlbmRlcmVyLgorICAgICAqLworICAgIEJvdW5kaW5nQm94UmVuZGVyZXIucHJv
dG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fY29sb3JT
aGFkZXIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnJl
bmRlckxpc3QuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9jb2xvclNoYWRlci5kaXNwb3NlKCk7
CisgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVy
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2lu
ZF07CisgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5kaXNwb3NlKCk7
CisgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZF0gPSBudWxs
OworICAgICAgICB9CisgICAgICAgIHRoaXMuc2NlbmUuZ2V0RW5naW5lKCkuX3JlbGVhc2VCdWZm
ZXIodGhpcy5faW5kZXhCdWZmZXIpOworICAgICAgICBpZiAodGhpcy5fZmlsbEluZGV4QnVmZmVy
KSB7CisgICAgICAgICAgICB0aGlzLnNjZW5lLmdldEVuZ2luZSgpLl9yZWxlYXNlQnVmZmVyKHRo
aXMuX2ZpbGxJbmRleEJ1ZmZlcik7CisgICAgICAgICAgICB0aGlzLl9maWxsSW5kZXhCdWZmZXIg
PSBudWxsOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gQm91bmRpbmdCb3hSZW5kZXJl
cjsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUmVuZGVyaW5nL2RlcHRoUmVu
ZGVyZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9SZW5kZXJpbmcvZGVwdGhSZW5kZXJlci50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRGVwdGhSZW5k
ZXJlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aFJlbmRlcmVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBEZXB0aFJlbmRlcmVyOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRo
cy9tYXRoLmNvbG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1
cmVzL3RleHR1cmUgKi8gIi4vTWF0ZXJpYWxzL1RleHR1cmVzL3RleHR1cmUudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3JlbmRlclRhcmdldFRleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGVyaWFscy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJlICovICIuL01hdGVyaWFs
cy9UZXh0dXJlcy9yZW5kZXJUYXJnZXRUZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL21hdGVyaWFsICovICIuL01hdGVy
aWFscy9tYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
bWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbEhlbHBlciAqLyAiLi9NYXRlcmlhbHMv
bWF0ZXJpYWxIZWxwZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL0VuZ2luZXMvY29uc3RhbnRzICovICIuL0VuZ2luZXMvY29uc3RhbnRzLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfZGVwdGhfZnJhZ21lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRl
cnMvZGVwdGguZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9kZXB0aC5mcmFnbWVudC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2RlcHRoX3ZlcnRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9kZXB0
aC52ZXJ0ZXggKi8gIi4vU2hhZGVycy9kZXB0aC52ZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZXZUb29scyAqLyAiLi9NaXNjL2RldlRv
b2xzLnRzIik7CisKKworCisKKworCisKKworCisKKy8qKgorICogVGhpcyByZXByZXNlbnRzIGEg
ZGVwdGggcmVuZGVyZXIgaW4gQmFieWxvbi4KKyAqIEEgZGVwdGggcmVuZGVyZXIgd2lsbCByZW5k
ZXIgdG8gaXQncyBkZXB0aCBtYXAgZXZlcnkgZnJhbWUgd2hpY2ggY2FuIGJlIGRpc3BsYXllZCBv
ciB1c2VkIGluIHBvc3QgcHJvY2Vzc2luZworICovCit2YXIgRGVwdGhSZW5kZXJlciA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBJbnN0YW50aWF0ZXMgYSBk
ZXB0aCByZW5kZXJlcgorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhlIHJlbmRlcmVy
IGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gdHlwZSBUaGUgdGV4dHVyZSB0eXBlIG9mIHRoZSBk
ZXB0aCBtYXAgKGRlZmF1bHQ6IEVuZ2luZS5URVhUVVJFVFlQRV9GTE9BVCkKKyAgICAgKiBAcGFy
YW0gY2FtZXJhIFRoZSBjYW1lcmEgdG8gYmUgdXNlZCB0byByZW5kZXIgdGhlIGRlcHRoIG1hcCAo
ZGVmYXVsdDogc2NlbmUncyBhY3RpdmUgY2FtZXJhKQorICAgICAqIEBwYXJhbSBzdG9yZU5vbkxp
bmVhckRlcHRoIERlZmluZXMgd2hldGhlciB0aGUgZGVwdGggaXMgc3RvcmVkIGxpbmVhcmx5IGxp
a2UgaW4gQmFieWxvbiBTaGFkb3dzIG9yIGRpcmVjdGx5IGxpa2UgZ2xGcmFnQ29vcmQuegorICAg
ICAqLworICAgIGZ1bmN0aW9uIERlcHRoUmVuZGVyZXIoc2NlbmUsIHR5cGUsIGNhbWVyYSwgc3Rv
cmVOb25MaW5lYXJEZXB0aCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBp
ZiAodHlwZSA9PT0gdm9pZCAwKSB7IHR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfRkxPQVQ7IH0KKyAg
ICAgICAgaWYgKGNhbWVyYSA9PT0gdm9pZCAwKSB7IGNhbWVyYSA9IG51bGw7IH0KKyAgICAgICAg
aWYgKHN0b3JlTm9uTGluZWFyRGVwdGggPT09IHZvaWQgMCkgeyBzdG9yZU5vbkxpbmVhckRlcHRo
ID0gZmFsc2U7IH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllc3MgdGhhdCB0aGUg
ZGVwdGggcmVuZGVyZXIgd2lsbCBvbmx5IGJlIHVzZWQgd2l0aGluCisgICAgICAgICAqIHRoZSBj
YW1lcmEgaXQgaXMgY3JlYXRlZCBmb3IuCisgICAgICAgICAqIFRoaXMgY2FuIGhlbHAgZm9yY2lu
ZyBpdHMgcmVuZGVyaW5nIGR1cmluZyB0aGUgY2FtZXJhIHByb2Nlc3NpbmcuCisgICAgICAgICAq
LworICAgICAgICB0aGlzLnVzZU9ubHlJbkFjdGl2ZUNhbWVyYSA9IGZhbHNlOworICAgICAgICB0
aGlzLl9zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9zdG9yZU5vbkxpbmVhckRlcHRoID0g
c3RvcmVOb25MaW5lYXJEZXB0aDsKKyAgICAgICAgdGhpcy5pc1BhY2tlZCA9IHR5cGUgPT09IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMi
XS5URVhUVVJFVFlQRV9VTlNJR05FRF9CWVRFOworICAgICAgICBpZiAodGhpcy5pc1BhY2tlZCkg
eworICAgICAgICAgICAgdGhpcy5fY2xlYXJDb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb2xvcjQiXSgxLjAsIDEuMCwgMS4wLCAxLjAp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fY2xlYXJDb2xv
ciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJD
b2xvcjQiXSgxLjAsIDAuMCwgMC4wLCAxLjApOworICAgICAgICB9CisgICAgICAgIERlcHRoUmVu
ZGVyZXIuX1NjZW5lQ29tcG9uZW50SW5pdGlhbGl6YXRpb24odGhpcy5fc2NlbmUpOworICAgICAg
ICB0aGlzLl9jYW1lcmEgPSBjYW1lcmE7CisgICAgICAgIHZhciBlbmdpbmUgPSBzY2VuZS5nZXRF
bmdpbmUoKTsKKyAgICAgICAgLy8gUmVuZGVyIHRhcmdldAorICAgICAgICB2YXIgZm9ybWF0ID0g
KHRoaXMuaXNQYWNrZWQgfHwgZW5naW5lLndlYkdMVmVyc2lvbiA9PT0gMSkgPyBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uVEVYVFVS
RUZPUk1BVF9SR0JBIDogX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIkNvbnN0YW50cyJdLlRFWFRVUkVGT1JNQVRfUjsKKyAgICAgICAgdGhpcy5fZGVwdGhN
YXAgPSBuZXcgX01hdGVyaWFsc19UZXh0dXJlc19yZW5kZXJUYXJnZXRUZXh0dXJlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlJlbmRlclRhcmdldFRleHR1cmUiXSgiZGVwdGhNYXAiLCB7
IHdpZHRoOiBlbmdpbmUuZ2V0UmVuZGVyV2lkdGgoKSwgaGVpZ2h0OiBlbmdpbmUuZ2V0UmVuZGVy
SGVpZ2h0KCkgfSwgdGhpcy5fc2NlbmUsIGZhbHNlLCB0cnVlLCB0eXBlLCBmYWxzZSwgdW5kZWZp
bmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmb3JtYXQpOworICAgICAgICB0
aGlzLl9kZXB0aE1hcC53cmFwVSA9IF9NYXRlcmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUZXh0dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAg
ICAgIHRoaXMuX2RlcHRoTWFwLndyYXBWID0gX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRleHR1cmUiXS5DTEFNUF9BRERSRVNTTU9ERTsK
KyAgICAgICAgdGhpcy5fZGVwdGhNYXAucmVmcmVzaFJhdGUgPSAxOworICAgICAgICB0aGlzLl9k
ZXB0aE1hcC5yZW5kZXJQYXJ0aWNsZXMgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZGVwdGhNYXAu
cmVuZGVyTGlzdCA9IG51bGw7CisgICAgICAgIC8vIENhbWVyYSB0byBnZXQgZGVwdGggbWFwIGZy
b20gdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IGNhbWVyYXMKKyAgICAgICAgdGhpcy5f
ZGVwdGhNYXAuYWN0aXZlQ2FtZXJhID0gdGhpcy5fY2FtZXJhOworICAgICAgICB0aGlzLl9kZXB0
aE1hcC5pZ25vcmVDYW1lcmFWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIHRoaXMuX2RlcHRoTWFw
LnVzZUNhbWVyYVBvc3RQcm9jZXNzZXMgPSBmYWxzZTsKKyAgICAgICAgLy8gc2V0IGRlZmF1bHQg
ZGVwdGggdmFsdWUgdG8gMS4wIChmYXIgYXdheSkKKyAgICAgICAgdGhpcy5fZGVwdGhNYXAub25D
bGVhck9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChlbmdpbmUpIHsKKyAgICAgICAgICAgIGVuZ2lu
ZS5jbGVhcihfdGhpcy5fY2xlYXJDb2xvciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIH0p
OworICAgICAgICAvLyBDdXN0b20gcmVuZGVyIGZ1bmN0aW9uCisgICAgICAgIHZhciByZW5kZXJT
dWJNZXNoID0gZnVuY3Rpb24gKHN1Yk1lc2gpIHsKKyAgICAgICAgICAgIHZhciBtZXNoID0gc3Vi
TWVzaC5nZXRSZW5kZXJpbmdNZXNoKCk7CisgICAgICAgICAgICB2YXIgc2NlbmUgPSBfdGhpcy5f
c2NlbmU7CisgICAgICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAg
ICAgICAgICB2YXIgbWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7CisgICAgICAgICAg
ICBtZXNoLl9pbnRlcm5hbEFic3RyYWN0TWVzaERhdGFJbmZvLl9pc0FjdGl2ZUludGVybWVkaWF0
ZSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEN1bGxpbmcgYW5kIHJldmVy
c2UgKHJpZ2h0IGhhbmRlZCBzeXN0ZW0pCisgICAgICAgICAgICBlbmdpbmUuc2V0U3RhdGUobWF0
ZXJpYWwuYmFja0ZhY2VDdWxsaW5nLCAwLCBmYWxzZSwgc2NlbmUudXNlUmlnaHRIYW5kZWRTeXN0
ZW0pOworICAgICAgICAgICAgLy8gTWFuYWdpbmcgaW5zdGFuY2VzCisgICAgICAgICAgICB2YXIg
YmF0Y2ggPSBtZXNoLl9nZXRJbnN0YW5jZXNSZW5kZXJMaXN0KHN1Yk1lc2guX2lkKTsKKyAgICAg
ICAgICAgIGlmIChiYXRjaC5tdXN0UmV0dXJuKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5n
ID0gKGVuZ2luZS5nZXRDYXBzKCkuaW5zdGFuY2VkQXJyYXlzKSAmJiAoYmF0Y2gudmlzaWJsZUlu
c3RhbmNlc1tzdWJNZXNoLl9pZF0gIT09IG51bGwpOworICAgICAgICAgICAgdmFyIGNhbWVyYSA9
IF90aGlzLl9jYW1lcmEgfHwgc2NlbmUuYWN0aXZlQ2FtZXJhOworICAgICAgICAgICAgaWYgKF90
aGlzLmlzUmVhZHkoc3ViTWVzaCwgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcpICYmIGNhbWVy
YSkgeworICAgICAgICAgICAgICAgIGVuZ2luZS5lbmFibGVFZmZlY3QoX3RoaXMuX2VmZmVjdCk7
CisgICAgICAgICAgICAgICAgbWVzaC5fYmluZChzdWJNZXNoLCBfdGhpcy5fZWZmZWN0LCBfTWF0
ZXJpYWxzX21hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIk1hdGVyaWFsIl0u
VHJpYW5nbGVGaWxsTW9kZSk7CisgICAgICAgICAgICAgICAgX3RoaXMuX2VmZmVjdC5zZXRNYXRy
aXgoInZpZXdQcm9qZWN0aW9uIiwgc2NlbmUuZ2V0VHJhbnNmb3JtTWF0cml4KCkpOworICAgICAg
ICAgICAgICAgIF90aGlzLl9lZmZlY3Quc2V0RmxvYXQyKCJkZXB0aFZhbHVlcyIsIGNhbWVyYS5t
aW5aLCBjYW1lcmEubWluWiArIGNhbWVyYS5tYXhaKTsKKyAgICAgICAgICAgICAgICAvLyBBbHBo
YSB0ZXN0CisgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsICYmIG1hdGVyaWFsLm5lZWRBbHBo
YVRlc3RpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgYWxwaGFUZXh0dXJlID0gbWF0
ZXJpYWwuZ2V0QWxwaGFUZXN0VGV4dHVyZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxw
aGFUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZWZmZWN0LnNldFRl
eHR1cmUoImRpZmZ1c2VTYW1wbGVyIiwgYWxwaGFUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl9lZmZlY3Quc2V0TWF0cml4KCJkaWZmdXNlTWF0cml4IiwgYWxwaGFUZXh0
dXJlLmdldFRleHR1cmVNYXRyaXgoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQm9uZXMKKyAgICAgICAgICAgICAgICBpZiAo
bWVzaC51c2VCb25lcyAmJiBtZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBtZXNoLnNr
ZWxldG9uKSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9lZmZlY3Quc2V0TWF0cmljZXMo
Im1Cb25lcyIsIG1lc2guc2tlbGV0b24uZ2V0VHJhbnNmb3JtTWF0cmljZXMobWVzaCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBNb3JwaCB0YXJnZXRzCisgICAgICAg
ICAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRNb3JwaFRhcmdldFBhcmFtZXRlcnMobWVzaCwg
X3RoaXMuX2VmZmVjdCk7CisgICAgICAgICAgICAgICAgLy8gRHJhdworICAgICAgICAgICAgICAg
IG1lc2guX3Byb2Nlc3NSZW5kZXJpbmcoc3ViTWVzaCwgX3RoaXMuX2VmZmVjdCwgX01hdGVyaWFs
c19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJNYXRlcmlhbCJdLlRyaWFu
Z2xlRmlsbE1vZGUsIGJhdGNoLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZywgZnVuY3Rpb24g
KGlzSW5zdGFuY2UsIHdvcmxkKSB7IHJldHVybiBfdGhpcy5fZWZmZWN0LnNldE1hdHJpeCgid29y
bGQiLCB3b3JsZCk7IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB0aGlz
Ll9kZXB0aE1hcC5jdXN0b21SZW5kZXJGdW5jdGlvbiA9IGZ1bmN0aW9uIChvcGFxdWVTdWJNZXNo
ZXMsIGFscGhhVGVzdFN1Yk1lc2hlcywgdHJhbnNwYXJlbnRTdWJNZXNoZXMsIGRlcHRoT25seVN1
Yk1lc2hlcykgeworICAgICAgICAgICAgdmFyIGluZGV4OworICAgICAgICAgICAgaWYgKGRlcHRo
T25seVN1Yk1lc2hlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBlbmdpbmUuc2V0Q29sb3JX
cml0ZShmYWxzZSk7CisgICAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZGVw
dGhPbmx5U3ViTWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICBy
ZW5kZXJTdWJNZXNoKGRlcHRoT25seVN1Yk1lc2hlcy5kYXRhW2luZGV4XSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVuZ2luZS5zZXRDb2xvcldyaXRlKHRydWUpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgb3BhcXVlU3Vi
TWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHJlbmRlclN1Yk1lc2go
b3BhcXVlU3ViTWVzaGVzLmRhdGFbaW5kZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFscGhhVGVzdFN1Yk1lc2hlcy5sZW5ndGg7IGluZGV4
KyspIHsKKyAgICAgICAgICAgICAgICByZW5kZXJTdWJNZXNoKGFscGhhVGVzdFN1Yk1lc2hlcy5k
YXRhW2luZGV4XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIC8qKgor
ICAgICAqIENyZWF0ZXMgdGhlIGRlcHRoIHJlbmRlcmluZyBlZmZlY3QgYW5kIGNoZWNrcyBpZiB0
aGUgZWZmZWN0IGlzIHJlYWR5LgorICAgICAqIEBwYXJhbSBzdWJNZXNoIFRoZSBzdWJtZXNoIHRv
IGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBkZXB0aCBtYXAgb2YKKyAgICAgKiBAcGFyYW0gdXNlSW5z
dGFuY2VzIElmIG11bHRpcGxlIHdvcmxkIGluc3RhbmNlcyBzaG91bGQgYmUgdXNlZAorICAgICAq
IEByZXR1cm5zIGlmIHRoZSBkZXB0aCByZW5kZXJlciBpcyByZWFkeSB0byByZW5kZXIgdGhlIGRl
cHRoIG1hcAorICAgICAqLworICAgIERlcHRoUmVuZGVyZXIucHJvdG90eXBlLmlzUmVhZHkgPSBm
dW5jdGlvbiAoc3ViTWVzaCwgdXNlSW5zdGFuY2VzKSB7CisgICAgICAgIHZhciBtYXRlcmlhbCA9
IHN1Yk1lc2guZ2V0TWF0ZXJpYWwoKTsKKyAgICAgICAgaWYgKG1hdGVyaWFsLmRpc2FibGVEZXB0
aFdyaXRlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGRlZmluZXMgPSBbXTsKKyAgICAgICAgdmFyIGF0dHJpYnMgPSBbX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5k
XTsKKyAgICAgICAgdmFyIG1lc2ggPSBzdWJNZXNoLmdldE1lc2goKTsKKyAgICAgICAgLy8gQWxw
aGEgdGVzdAorICAgICAgICBpZiAobWF0ZXJpYWwgJiYgbWF0ZXJpYWwubmVlZEFscGhhVGVzdGlu
ZygpICYmIG1hdGVyaWFsLmdldEFscGhhVGVzdFRleHR1cmUoKSkgeworICAgICAgICAgICAgZGVm
aW5lcy5wdXNoKCIjZGVmaW5lIEFMUEhBVEVTVCIpOworICAgICAgICAgICAgaWYgKG1lc2guaXNW
ZXJ0aWNlc0RhdGFQcmVzZW50KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWS2luZCkpIHsKKyAgICAgICAgICAgICAgICBhdHRyaWJz
LnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4
QnVmZmVyIl0uVVZLaW5kKTsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUg
VVYxIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2VzRGF0
YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVy
dGV4QnVmZmVyIl0uVVYyS2luZCkpIHsKKyAgICAgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01l
c2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0u
VVYyS2luZCk7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIFVWMiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEJvbmVzCisgICAgICAgIGlmICht
ZXNoLnVzZUJvbmVzICYmIG1lc2guY29tcHV0ZUJvbmVzVXNpbmdTaGFkZXJzKSB7CisgICAgICAg
ICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2VzS2luZCk7CisgICAgICAgICAgICBh
dHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCk7CisgICAgICAgICAgICBpZiAobWVz
aC5udW1Cb25lSW5mbHVlbmNlcnMgPiA0KSB7CisgICAgICAgICAgICAgICAgYXR0cmlicy5wdXNo
KF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZl
ciJdLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZCk7CisgICAgICAgICAgICAgICAgYXR0cmlicy5w
dXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1
ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0V4dHJhS2luZCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgTlVNX0JPTkVfSU5GTFVFTkNFUlMgIiArIG1lc2gu
bnVtQm9uZUluZmx1ZW5jZXJzKTsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBC
b25lc1Blck1lc2ggIiArIChtZXNoLnNrZWxldG9uID8gbWVzaC5za2VsZXRvbi5ib25lcy5sZW5n
dGggKyAxIDogMCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVm
aW5lcy5wdXNoKCIjZGVmaW5lIE5VTV9CT05FX0lORkxVRU5DRVJTIDAiKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBNb3JwaCB0YXJnZXRzCisgICAgICAgIHZhciBtb3JwaFRhcmdldE1hbmFnZXIg
PSBtZXNoLm1vcnBoVGFyZ2V0TWFuYWdlcjsKKyAgICAgICAgdmFyIG51bU1vcnBoSW5mbHVlbmNl
cnMgPSAwOworICAgICAgICBpZiAobW9ycGhUYXJnZXRNYW5hZ2VyKSB7CisgICAgICAgICAgICBp
ZiAobW9ycGhUYXJnZXRNYW5hZ2VyLm51bUluZmx1ZW5jZXJzID4gMCkgeworICAgICAgICAgICAg
ICAgIG51bU1vcnBoSW5mbHVlbmNlcnMgPSBtb3JwaFRhcmdldE1hbmFnZXIubnVtSW5mbHVlbmNl
cnM7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIE1PUlBIVEFSR0VUUyIp
OworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBOVU1fTU9SUEhfSU5GTFVF
TkNFUlMgIiArIG51bU1vcnBoSW5mbHVlbmNlcnMpOworICAgICAgICAgICAgICAgIF9NYXRlcmlh
bHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWxI
ZWxwZXIiXS5QcmVwYXJlQXR0cmlidXRlc0Zvck1vcnBoVGFyZ2V0c0luZmx1ZW5jZXJzKGF0dHJp
YnMsIG1lc2gsIG51bU1vcnBoSW5mbHVlbmNlcnMpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIC8vIEluc3RhbmNlcworICAgICAgICBpZiAodXNlSW5zdGFuY2VzKSB7CisgICAg
ICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgSU5TVEFOQ0VTIik7CisgICAgICAgICAgICBf
TWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIk1h
dGVyaWFsSGVscGVyIl0uUHVzaEF0dHJpYnV0ZXNGb3JJbnN0YW5jZXMoYXR0cmlicyk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gTm9uZSBsaW5lYXIgZGVwdGgKKyAgICAgICAgaWYgKHRoaXMuX3N0
b3JlTm9uTGluZWFyRGVwdGgpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBO
T05MSU5FQVJERVBUSCIpOworICAgICAgICB9CisgICAgICAgIC8vIEZsb2F0IE1vZGUKKyAgICAg
ICAgaWYgKHRoaXMuaXNQYWNrZWQpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmlu
ZSBQQUNLRUQiKTsKKyAgICAgICAgfQorICAgICAgICAvLyBHZXQgY29ycmVjdCBlZmZlY3QKKyAg
ICAgICAgdmFyIGpvaW4gPSBkZWZpbmVzLmpvaW4oIlxuIik7CisgICAgICAgIGlmICh0aGlzLl9j
YWNoZWREZWZpbmVzICE9PSBqb2luKSB7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWREZWZpbmVz
ID0gam9pbjsKKyAgICAgICAgICAgIHRoaXMuX2VmZmVjdCA9IHRoaXMuX3NjZW5lLmdldEVuZ2lu
ZSgpLmNyZWF0ZUVmZmVjdCgiZGVwdGgiLCBhdHRyaWJzLCBbIndvcmxkIiwgIm1Cb25lcyIsICJ2
aWV3UHJvamVjdGlvbiIsICJkaWZmdXNlTWF0cml4IiwgImRlcHRoVmFsdWVzIiwgIm1vcnBoVGFy
Z2V0SW5mbHVlbmNlcyJdLCBbImRpZmZ1c2VTYW1wbGVyIl0sIGpvaW4sIHVuZGVmaW5lZCwgdW5k
ZWZpbmVkLCB1bmRlZmluZWQsIHsgbWF4U2ltdWx0YW5lb3VzTW9ycGhUYXJnZXRzOiBudW1Nb3Jw
aEluZmx1ZW5jZXJzIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9lZmZlY3Qu
aXNSZWFkeSgpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdGV4dHVyZSB3aGlj
aCB0aGUgZGVwdGggbWFwIHdpbGwgYmUgd3JpdHRlbiB0by4KKyAgICAgKiBAcmV0dXJucyBUaGUg
ZGVwdGggbWFwIHRleHR1cmUKKyAgICAgKi8KKyAgICBEZXB0aFJlbmRlcmVyLnByb3RvdHlwZS5n
ZXREZXB0aE1hcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RlcHRoTWFw
OworICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgb2YgdGhlIGRlcHRoIHJlbmRlcmVy
LgorICAgICAqLworICAgIERlcHRoUmVuZGVyZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRoaXMuX2RlcHRoTWFwLmRpc3Bvc2UoKTsKKyAgICB9OworICAgIC8q
KiBAaGlkZGVuICovCisgICAgRGVwdGhSZW5kZXJlci5fU2NlbmVDb21wb25lbnRJbml0aWFsaXph
dGlvbiA9IGZ1bmN0aW9uIChfKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV85X19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIkRlcHRoUmVu
ZGVyZXJTY2VuZUNvbXBvbmVudCIpOworICAgIH07CisgICAgcmV0dXJuIERlcHRoUmVuZGVyZXI7
Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1JlbmRlcmluZy9kZXB0aFJlbmRl
cmVyU2NlbmVDb21wb25lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1JlbmRlcmluZy9kZXB0aFJlbmRlcmVy
U2NlbmVDb21wb25lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogRGVwdGhSZW5kZXJl
clNjZW5lQ29tcG9uZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRl
cHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGVwdGhSZW5k
ZXJlclNjZW5lQ29tcG9uZW50OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlcHRo
UmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vZGVwdGhSZW5kZXJlciAqLyAiLi9SZW5kZXJpbmcvZGVwdGhSZW5kZXJlci50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9u
ZW50LnRzIik7CisKKworCisKK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJT
Y2VuZSJdLnByb3RvdHlwZS5lbmFibGVEZXB0aFJlbmRlcmVyID0gZnVuY3Rpb24gKGNhbWVyYSwg
c3RvcmVOb25MaW5lYXJEZXB0aCkgeworICAgIGlmIChzdG9yZU5vbkxpbmVhckRlcHRoID09PSB2
b2lkIDApIHsgc3RvcmVOb25MaW5lYXJEZXB0aCA9IGZhbHNlOyB9CisgICAgY2FtZXJhID0gY2Ft
ZXJhIHx8IHRoaXMuYWN0aXZlQ2FtZXJhOworICAgIGlmICghY2FtZXJhKSB7CisgICAgICAgIHRo
cm93ICJObyBjYW1lcmEgYXZhaWxhYmxlIHRvIGVuYWJsZSBkZXB0aCByZW5kZXJlciI7CisgICAg
fQorICAgIGlmICghdGhpcy5fZGVwdGhSZW5kZXJlcikgeworICAgICAgICB0aGlzLl9kZXB0aFJl
bmRlcmVyID0ge307CisgICAgfQorICAgIGlmICghdGhpcy5fZGVwdGhSZW5kZXJlcltjYW1lcmEu
aWRdKSB7CisgICAgICAgIHZhciB0ZXh0dXJlVHlwZSA9IDA7CisgICAgICAgIGlmICh0aGlzLmdl
dEVuZ2luZSgpLmdldENhcHMoKS50ZXh0dXJlSGFsZkZsb2F0UmVuZGVyKSB7CisgICAgICAgICAg
ICB0ZXh0dXJlVHlwZSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fWyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9IQUxGX0ZMT0FUOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHRoaXMuZ2V0RW5naW5lKCkuZ2V0Q2FwcygpLnRleHR1cmVGbG9hdFJl
bmRlcikgeworICAgICAgICAgICAgdGV4dHVyZVR5cGUgPSBfRW5naW5lc19jb25zdGFudHNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0uVEVYVFVSRVRZUEVfRkxPQVQ7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0ZXh0dXJlVHlwZSA9IF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMi
XS5URVhUVVJFVFlQRV9VTlNJR05FRF9CWVRFOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Rl
cHRoUmVuZGVyZXJbY2FtZXJhLmlkXSA9IG5ldyBfZGVwdGhSZW5kZXJlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJEZXB0aFJlbmRlcmVyIl0odGhpcywgdGV4dHVyZVR5cGUsIGNhbWVy
YSwgc3RvcmVOb25MaW5lYXJEZXB0aCk7CisgICAgfQorICAgIHJldHVybiB0aGlzLl9kZXB0aFJl
bmRlcmVyW2NhbWVyYS5pZF07Cit9OworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIlNjZW5lIl0ucHJvdG90eXBlLmRpc2FibGVEZXB0aFJlbmRlcmVyID0gZnVuY3Rpb24gKGNh
bWVyYSkgeworICAgIGNhbWVyYSA9IGNhbWVyYSB8fCB0aGlzLmFjdGl2ZUNhbWVyYTsKKyAgICBp
ZiAoIWNhbWVyYSB8fCAhdGhpcy5fZGVwdGhSZW5kZXJlciB8fCAhdGhpcy5fZGVwdGhSZW5kZXJl
cltjYW1lcmEuaWRdKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGhpcy5fZGVwdGhS
ZW5kZXJlcltjYW1lcmEuaWRdLmRpc3Bvc2UoKTsKKyAgICBkZWxldGUgdGhpcy5fZGVwdGhSZW5k
ZXJlcltjYW1lcmEuaWRdOworfTsKKy8qKgorICogRGVmaW5lcyB0aGUgRGVwdGggUmVuZGVyZXIg
c2NlbmUgY29tcG9uZW50IHJlc3BvbnNpYmxlIHRvIG1hbmFnZSBhIGRlcHRoIGJ1ZmZlciB1c2Vm
dWwKKyAqIGluIHNldmVyYWwgcmVuZGVyaW5nIHRlY2huaXF1ZXMuCisgKi8KK3ZhciBEZXB0aFJl
bmRlcmVyU2NlbmVDb21wb25lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50IGZvciB0
aGUgZ2l2ZW4gc2NlbmUKKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lcyB0aGUgc2NlbmUgdG8g
cmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBpbgorICAgICAqLworICAgIGZ1bmN0aW9uIERlcHRoUmVu
ZGVyZXJTY2VuZUNvbXBvbmVudChzY2VuZSkgeworICAgICAgICAvKioKKyAgICAgICAgICogVGhl
IGNvbXBvbmVudCBuYW1lIGhlbHBmdWxsIHRvIGlkZW50aWZ5IHRoZSBjb21wb25lbnQgaW4gdGhl
IGxpc3Qgb2Ygc2NlbmUgY29tcG9uZW50cy4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMubmFt
ZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZUNv
bXBvbmVudENvbnN0YW50cyJdLk5BTUVfREVQVEhSRU5ERVJFUjsKKyAgICAgICAgdGhpcy5zY2Vu
ZSA9IHNjZW5lOworICAgIH0KKyAgICAvKioKKyAgICAgKiBSZWdpc3RlcnMgdGhlIGNvbXBvbmVu
dCBpbiBhIGdpdmVuIHNjZW5lCisgICAgICovCisgICAgRGVwdGhSZW5kZXJlclNjZW5lQ29tcG9u
ZW50LnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2Vu
ZS5fZ2F0aGVyUmVuZGVyVGFyZ2V0c1N0YWdlLnJlZ2lzdGVyU3RlcChfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2NlbmVDb21wb25lbnRDb25zdGFudHMiXS5T
VEVQX0dBVEhFUlJFTkRFUlRBUkdFVFNfREVQVEhSRU5ERVJFUiwgdGhpcywgdGhpcy5fZ2F0aGVy
UmVuZGVyVGFyZ2V0cyk7CisgICAgICAgIHRoaXMuc2NlbmUuX2dhdGhlckFjdGl2ZUNhbWVyYVJl
bmRlclRhcmdldHNTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9HQVRIRVJB
Q1RJVkVDQU1FUkFSRU5ERVJUQVJHRVRTX0RFUFRIUkVOREVSRVIsIHRoaXMsIHRoaXMuX2dhdGhl
ckFjdGl2ZUNhbWVyYVJlbmRlclRhcmdldHMpOworICAgIH07CisgICAgLyoqCisgICAgICogUmVi
dWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4gY2FzZSBvZgor
ICAgICAqIGNvbnRleHQgbG9zdCBmb3IgaW5zdGFuY2UuCisgICAgICovCisgICAgRGVwdGhSZW5k
ZXJlclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWJ1aWxkID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICAvLyBOb3RoaW5nIHRvIGRvIGZvciB0aGlzIGNvbXBvbmVudAorICAgIH07CisgICAgLyoq
CisgICAgICogRGlzcG9zZXMgdGhlIGNvbXBvbmVudCBhbmQgdGhlIGFzc29jaWF0ZWQgcmVzc291
cmNlcworICAgICAqLworICAgIERlcHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUu
ZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuc2Nl
bmUuX2RlcHRoUmVuZGVyZXIpIHsKKyAgICAgICAgICAgIHRoaXMuc2NlbmUuX2RlcHRoUmVuZGVy
ZXJba2V5XS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIERlcHRoUmVuZGVyZXJT
Y2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX2dhdGhlclJlbmRlclRhcmdldHMgPSBmdW5jdGlvbiAo
cmVuZGVyVGFyZ2V0cykgeworICAgICAgICBpZiAodGhpcy5zY2VuZS5fZGVwdGhSZW5kZXJlcikg
eworICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuc2NlbmUuX2RlcHRoUmVuZGVyZXIp
IHsKKyAgICAgICAgICAgICAgICB2YXIgZGVwdGhSZW5kZXJlciA9IHRoaXMuc2NlbmUuX2RlcHRo
UmVuZGVyZXJba2V5XTsKKyAgICAgICAgICAgICAgICBpZiAoIWRlcHRoUmVuZGVyZXIudXNlT25s
eUluQWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldHMucHVz
aChkZXB0aFJlbmRlcmVyLmdldERlcHRoTWFwKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgRGVwdGhSZW5kZXJlclNjZW5lQ29tcG9u
ZW50LnByb3RvdHlwZS5fZ2F0aGVyQWN0aXZlQ2FtZXJhUmVuZGVyVGFyZ2V0cyA9IGZ1bmN0aW9u
IChyZW5kZXJUYXJnZXRzKSB7CisgICAgICAgIGlmICh0aGlzLnNjZW5lLl9kZXB0aFJlbmRlcmVy
KSB7CisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5zY2VuZS5fZGVwdGhSZW5kZXJl
cikgeworICAgICAgICAgICAgICAgIHZhciBkZXB0aFJlbmRlcmVyID0gdGhpcy5zY2VuZS5fZGVw
dGhSZW5kZXJlcltrZXldOworICAgICAgICAgICAgICAgIGlmIChkZXB0aFJlbmRlcmVyLnVzZU9u
bHlJbkFjdGl2ZUNhbWVyYSAmJiB0aGlzLnNjZW5lLmFjdGl2ZUNhbWVyYS5pZCA9PT0ga2V5KSB7
CisgICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldHMucHVzaChkZXB0aFJlbmRlcmVyLmdl
dERlcHRoTWFwKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgcmV0dXJuIERlcHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudDsKK30oKSk7
CisKK19kZXB0aFJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkRlcHRoUmVu
ZGVyZXIiXS5fU2NlbmVDb21wb25lbnRJbml0aWFsaXphdGlvbiA9IGZ1bmN0aW9uIChzY2VuZSkg
eworICAgIC8vIFJlZ2lzdGVyIHRoZSBHIEJ1ZmZlciBjb21wb25lbnQgdG8gdGhlIHNjZW5lLgor
ICAgIHZhciBjb21wb25lbnQgPSBzY2VuZS5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5B
TUVfREVQVEhSRU5ERVJFUik7CisgICAgaWYgKCFjb21wb25lbnQpIHsKKyAgICAgICAgY29tcG9u
ZW50ID0gbmV3IERlcHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudChzY2VuZSk7CisgICAgICAgIHNj
ZW5lLl9hZGRDb21wb25lbnQoY29tcG9uZW50KTsKKyAgICB9Cit9OworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9SZW5kZXJpbmcvZWRnZXNSZW5kZXJlci50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1JlbmRlcmluZy9lZGdlc1JlbmRl
cmVyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBFZGdlc1JlbmRlcmVyLCBMaW5lRWRnZXNSZW5kZXJlciAqLwor
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFZGdlc1JlbmRlcmVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBFZGdlc1JlbmRlcmVyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxpbmVF
ZGdlc1JlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBMaW5lRWRnZXNSZW5kZXJlcjsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMv
dHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYWJzdHJhY3RNZXNo
ICovICIuL01lc2hlcy9hYnN0cmFjdE1lc2gudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWVzaGVzX2xpbmVzTWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2xpbmVzTWVzaCAqLyAiLi9NZXNoZXMvbGluZXNN
ZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRocy9tYXRoLnZlY3RvciAqLyAiLi9NYXRocy9tYXRoLnZlY3Rvci50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbCAq
LyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX3NoYWRlck1hdGVyaWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvc2hhZGVyTWF0ZXJpYWwgKi8gIi4v
TWF0ZXJpYWxzL3NoYWRlck1hdGVyaWFsLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0NhbWVyYXNfY2FtZXJhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9DYW1lcmFzL2NhbWVyYSAqLyAiLi9DYW1lcmFzL2NhbWVyYS50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfU2hhZGVyc19saW5lX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2xpbmUuZnJhZ21lbnQgKi8g
Ii4vU2hhZGVycy9saW5lLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNfbGluZV92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL2xpbmUudmVydGV4ICovICIuL1NoYWRlcnMv
bGluZS52ZXJ0ZXgudHMiKTsKKworCisKKworCisKKworCisKKworCitfTWVzaGVzX2Fic3RyYWN0
TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBYnN0cmFjdE1lc2giXS5wcm90b3R5
cGUuZGlzYWJsZUVkZ2VzUmVuZGVyaW5nID0gZnVuY3Rpb24gKCkgeworICAgIGlmICh0aGlzLl9l
ZGdlc1JlbmRlcmVyKSB7CisgICAgICAgIHRoaXMuX2VkZ2VzUmVuZGVyZXIuZGlzcG9zZSgpOwor
ICAgICAgICB0aGlzLl9lZGdlc1JlbmRlcmVyID0gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIHRo
aXM7Cit9OworX01lc2hlc19hYnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siQWJzdHJhY3RNZXNoIl0ucHJvdG90eXBlLmVuYWJsZUVkZ2VzUmVuZGVyaW5nID0gZnVuY3Rp
b24gKGVwc2lsb24sIGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2VzKSB7CisgICAgaWYgKGVw
c2lsb24gPT09IHZvaWQgMCkgeyBlcHNpbG9uID0gMC45NTsgfQorICAgIGlmIChjaGVja1ZlcnRp
Y2VzSW5zdGVhZE9mSW5kaWNlcyA9PT0gdm9pZCAwKSB7IGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJ
bmRpY2VzID0gZmFsc2U7IH0KKyAgICB0aGlzLmRpc2FibGVFZGdlc1JlbmRlcmluZygpOworICAg
IHRoaXMuX2VkZ2VzUmVuZGVyZXIgPSBuZXcgRWRnZXNSZW5kZXJlcih0aGlzLCBlcHNpbG9uLCBj
aGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcyk7CisgICAgcmV0dXJuIHRoaXM7Cit9OworT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KF9NZXNoZXNfYWJzdHJhY3RNZXNoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkFic3RyYWN0TWVzaCJdLnByb3RvdHlwZSwgImVkZ2VzUmVuZGVyZXIiLCB7
CisgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9lZGdlc1JlbmRl
cmVyOworICAgIH0sCisgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRy
dWUKK30pOworX01lc2hlc19saW5lc01lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
TGluZXNNZXNoIl0ucHJvdG90eXBlLmVuYWJsZUVkZ2VzUmVuZGVyaW5nID0gZnVuY3Rpb24gKGVw
c2lsb24sIGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2VzKSB7CisgICAgaWYgKGVwc2lsb24g
PT09IHZvaWQgMCkgeyBlcHNpbG9uID0gMC45NTsgfQorICAgIGlmIChjaGVja1ZlcnRpY2VzSW5z
dGVhZE9mSW5kaWNlcyA9PT0gdm9pZCAwKSB7IGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2Vz
ID0gZmFsc2U7IH0KKyAgICB0aGlzLmRpc2FibGVFZGdlc1JlbmRlcmluZygpOworICAgIHRoaXMu
X2VkZ2VzUmVuZGVyZXIgPSBuZXcgTGluZUVkZ2VzUmVuZGVyZXIodGhpcywgZXBzaWxvbiwgY2hl
Y2tWZXJ0aWNlc0luc3RlYWRPZkluZGljZXMpOworICAgIHJldHVybiB0aGlzOworfTsKK19NZXNo
ZXNfbGluZXNNZXNoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkluc3RhbmNlZExpbmVz
TWVzaCJdLnByb3RvdHlwZS5lbmFibGVFZGdlc1JlbmRlcmluZyA9IGZ1bmN0aW9uIChlcHNpbG9u
LCBjaGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcykgeworICAgIGlmIChlcHNpbG9uID09PSB2
b2lkIDApIHsgZXBzaWxvbiA9IDAuOTU7IH0KKyAgICBpZiAoY2hlY2tWZXJ0aWNlc0luc3RlYWRP
ZkluZGljZXMgPT09IHZvaWQgMCkgeyBjaGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcyA9IGZh
bHNlOyB9CisgICAgX01lc2hlc19saW5lc01lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siTGluZXNNZXNoIl0ucHJvdG90eXBlLmVuYWJsZUVkZ2VzUmVuZGVyaW5nLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIHRoaXM7Cit9OworLyoqCisgKiBGYWNlQWRqYWNlbmNp
ZXMgSGVscGVyIGNsYXNzIHRvIGdlbmVyYXRlIGVkZ2VzCisgKi8KK3ZhciBGYWNlQWRqYWNlbmNp
ZXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gRmFjZUFkamFj
ZW5jaWVzKCkgeworICAgICAgICB0aGlzLmVkZ2VzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRo
aXMuZWRnZXNDb25uZWN0ZWRDb3VudCA9IDA7CisgICAgfQorICAgIHJldHVybiBGYWNlQWRqYWNl
bmNpZXM7Cit9KCkpOworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgZWRn
ZXMgb2YgdGhlIG1lc2ggdGhhdCBjb3VsZCB0aGVuIGVhc2lseSBiZSByZW5kZXJlZCBpbiBhIHNj
ZW5lLgorICovCit2YXIgRWRnZXNSZW5kZXJlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgp
IHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBFZGdlc1JlbmRl
cmVyLiBJdCBpcyBwcmltYXJpbHkgdXNlIHRvIGRpc3BsYXkgZWRnZXMgb2YgYSBtZXNoLgorICAg
ICAqIEJld2FyZSB3aGVuIHlvdSB1c2UgdGhpcyBjbGFzcyB3aXRoIGNvbXBsZXggb2JqZWN0cyBh
cyB0aGUgYWRqYWNlbmNpZXMgY29tcHV0YXRpb24gY2FuIGJlIHJlYWxseSBsb25nCisgICAgICog
QHBhcmFtICBzb3VyY2UgTWVzaCB1c2VkIHRvIGNyZWF0ZSBlZGdlcworICAgICAqIEBwYXJhbSAg
ZXBzaWxvbiBzdW0gb2YgYW5nbGVzIGluIGFkamFjZW5jeSB0byBjaGVjayBmb3IgZWRnZQorICAg
ICAqIEBwYXJhbSAgY2hlY2tWZXJ0aWNlc0luc3RlYWRPZkluZGljZXMgYmFzZXMgdGhlIGVkZ2Vz
IGRldGVjdGlvbiBvbiB2ZXJ0aWNlcyB2cyBpbmRpY2VzCisgICAgICogQHBhcmFtICBnZW5lcmF0
ZUVkZ2VzTGluZXMgLSBzaG91bGQgZ2VuZXJhdGUgTGluZXMgb3Igb25seSBwcmVwYXJlIHJlc291
cmNlcy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBFZGdlc1JlbmRlcmVyKHNvdXJjZSwgZXBzaWxv
biwgY2hlY2tWZXJ0aWNlc0luc3RlYWRPZkluZGljZXMsIGdlbmVyYXRlRWRnZXNMaW5lcykgewor
ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoZXBzaWxvbiA9PT0gdm9pZCAw
KSB7IGVwc2lsb24gPSAwLjk1OyB9CisgICAgICAgIGlmIChjaGVja1ZlcnRpY2VzSW5zdGVhZE9m
SW5kaWNlcyA9PT0gdm9pZCAwKSB7IGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2VzID0gZmFs
c2U7IH0KKyAgICAgICAgaWYgKGdlbmVyYXRlRWRnZXNMaW5lcyA9PT0gdm9pZCAwKSB7IGdlbmVy
YXRlRWRnZXNMaW5lcyA9IHRydWU7IH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZSB0
aGUgc2l6ZSBvZiB0aGUgZWRnZXMgd2l0aCBhbiBvcnRob2dyYXBoaWMgY2FtZXJhCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmVkZ2VzV2lkdGhTY2FsZXJGb3JPcnRob2dyYXBoaWMgPSAxMDAw
LjA7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZpbmUgdGhlIHNpemUgb2YgdGhlIGVkZ2Vz
IHdpdGggYSBwZXJzcGVjdGl2ZSBjYW1lcmEKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZWRn
ZXNXaWR0aFNjYWxlckZvclBlcnNwZWN0aXZlID0gNTAuMDsKKyAgICAgICAgdGhpcy5fbGluZXNQ
b3NpdGlvbnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5fbGluZXNOb3JtYWxzID0gbmV3
IEFycmF5KCk7CisgICAgICAgIHRoaXMuX2xpbmVzSW5kaWNlcyA9IG5ldyBBcnJheSgpOworICAg
ICAgICB0aGlzLl9idWZmZXJzID0ge307CisgICAgICAgIHRoaXMuX2NoZWNrVmVydGljZXNJbnN0
ZWFkT2ZJbmRpY2VzID0gZmFsc2U7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFu
IGluZGljYXRpbmcgaWYgdGhlIGVkZ2VzUmVuZGVyZXIgaXMgYWN0aXZlICovCisgICAgICAgIHRo
aXMuaXNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc291cmNlID0gc291cmNlOworICAg
ICAgICB0aGlzLl9jaGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcyA9IGNoZWNrVmVydGljZXNJ
bnN0ZWFkT2ZJbmRpY2VzOworICAgICAgICB0aGlzLl9lcHNpbG9uID0gZXBzaWxvbjsKKyAgICAg
ICAgdGhpcy5fcHJlcGFyZVJlc3NvdXJjZXMoKTsKKyAgICAgICAgaWYgKGdlbmVyYXRlRWRnZXNM
aW5lcykgeworICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVFZGdlc0xpbmVzKCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fbWVzaFJlYnVpbGRPYnNlcnZlciA9IHRoaXMuX3NvdXJjZS5vblJl
YnVpbGRPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBfdGhpcy5fcmVi
dWlsZCgpOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fbWVzaERpc3Bvc2VPYnNlcnZlciA9
IHRoaXMuX3NvdXJjZS5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZChmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICBfdGhpcy5kaXNwb3NlKCk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBFZGdlc1Jl
bmRlcmVyLnByb3RvdHlwZS5fcHJlcGFyZVJlc3NvdXJjZXMgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGlmICh0aGlzLl9saW5lU2hhZGVyKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fbGluZVNoYWRlciA9IG5ldyBfTWF0ZXJpYWxzX3NoYWRlck1hdGVy
aWFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlNoYWRlck1hdGVyaWFsIl0oImxpbmVT
aGFkZXIiLCB0aGlzLl9zb3VyY2UuZ2V0U2NlbmUoKSwgImxpbmUiLCB7CisgICAgICAgICAgICBh
dHRyaWJ1dGVzOiBbInBvc2l0aW9uIiwgIm5vcm1hbCJdLAorICAgICAgICAgICAgdW5pZm9ybXM6
IFsid29ybGRWaWV3UHJvamVjdGlvbiIsICJjb2xvciIsICJ3aWR0aCIsICJhc3BlY3RSYXRpbyJd
CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9saW5lU2hhZGVyLmRpc2FibGVEZXB0aFdyaXRl
ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fbGluZVNoYWRlci5iYWNrRmFjZUN1bGxpbmcgPSBmYWxz
ZTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgRWRnZXNSZW5kZXJlci5wcm90b3R5
cGUuX3JlYnVpbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9i
dWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLlBvc2l0aW9uS2luZF07CisgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAg
ICAgIGJ1ZmZlci5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgICAgIGJ1ZmZlciA9IHRoaXMu
X2J1ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVy
dGV4QnVmZmVyIl0uTm9ybWFsS2luZF07CisgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAg
ICAgIGJ1ZmZlci5fcmVidWlsZCgpOworICAgICAgICB9CisgICAgICAgIHZhciBzY2VuZSA9IHRo
aXMuX3NvdXJjZS5nZXRTY2VuZSgpOworICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5n
aW5lKCk7CisgICAgICAgIHRoaXMuX2liID0gZW5naW5lLmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMu
X2xpbmVzSW5kaWNlcyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWxlYXNlcyB0aGUgcmVx
dWlyZWQgcmVzb3VyY2VzIGZvciB0aGUgZWRnZXMgcmVuZGVyZXIKKyAgICAgKi8KKyAgICBFZGdl
c1JlbmRlcmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlz
Ll9zb3VyY2Uub25SZWJ1aWxkT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fbWVzaFJlYnVpbGRPYnNl
cnZlcik7CisgICAgICAgIHRoaXMuX3NvdXJjZS5vbkRpc3Bvc2VPYnNlcnZhYmxlLnJlbW92ZSh0
aGlzLl9tZXNoRGlzcG9zZU9ic2VydmVyKTsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX2J1
ZmZlcnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4
QnVmZmVyIl0uUG9zaXRpb25LaW5kXTsKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAg
ICAgYnVmZmVyLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbX01lc2hlc19i
dWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRp
b25LaW5kXSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyID0gdGhpcy5fYnVmZmVy
c1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZm
ZXIiXS5Ob3JtYWxLaW5kXTsKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgYnVm
ZmVyLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uTm9ybWFsS2luZF0g
PSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9pYikgeworICAgICAgICAgICAg
dGhpcy5fc291cmNlLmdldFNjZW5lKCkuZ2V0RW5naW5lKCkuX3JlbGVhc2VCdWZmZXIodGhpcy5f
aWIpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2xpbmVTaGFkZXIuZGlzcG9zZSgpOworICAg
IH07CisgICAgRWRnZXNSZW5kZXJlci5wcm90b3R5cGUuX3Byb2Nlc3NFZGdlRm9yQWRqYWNlbmNp
ZXMgPSBmdW5jdGlvbiAocGEsIHBiLCBwMCwgcDEsIHAyKSB7CisgICAgICAgIGlmIChwYSA9PT0g
cDAgJiYgcGIgPT09IHAxIHx8IHBhID09PSBwMSAmJiBwYiA9PT0gcDApIHsKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChwYSA9PT0gcDEgJiYgcGIgPT09IHAy
IHx8IHBhID09PSBwMiAmJiBwYiA9PT0gcDEpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICB9CisgICAgICAgIGlmIChwYSA9PT0gcDIgJiYgcGIgPT09IHAwIHx8IHBhID09PSBwMCAm
JiBwYiA9PT0gcDIpIHsKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICB9CisgICAgICAg
IHJldHVybiAtMTsKKyAgICB9OworICAgIEVkZ2VzUmVuZGVyZXIucHJvdG90eXBlLl9wcm9jZXNz
RWRnZUZvckFkamFjZW5jaWVzV2l0aFZlcnRpY2VzID0gZnVuY3Rpb24gKHBhLCBwYiwgcDAsIHAx
LCBwMikgeworICAgICAgICBpZiAocGEuZXF1YWxzV2l0aEVwc2lsb24ocDApICYmIHBiLmVxdWFs
c1dpdGhFcHNpbG9uKHAxKSB8fCBwYS5lcXVhbHNXaXRoRXBzaWxvbihwMSkgJiYgcGIuZXF1YWxz
V2l0aEVwc2lsb24ocDApKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocGEuZXF1YWxzV2l0aEVwc2lsb24ocDEpICYmIHBiLmVxdWFsc1dpdGhFcHNpbG9u
KHAyKSB8fCBwYS5lcXVhbHNXaXRoRXBzaWxvbihwMikgJiYgcGIuZXF1YWxzV2l0aEVwc2lsb24o
cDEpKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGEu
ZXF1YWxzV2l0aEVwc2lsb24ocDIpICYmIHBiLmVxdWFsc1dpdGhFcHNpbG9uKHAwKSB8fCBwYS5l
cXVhbHNXaXRoRXBzaWxvbihwMCkgJiYgcGIuZXF1YWxzV2l0aEVwc2lsb24ocDIpKSB7CisgICAg
ICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIHBhaXIgb2YgcDAgYW5kIHAxIGlzIGVuIGVk
Z2UKKyAgICAgKiBAcGFyYW0gZmFjZUluZGV4CisgICAgICogQHBhcmFtIGVkZ2UKKyAgICAgKiBA
cGFyYW0gZmFjZU5vcm1hbHMKKyAgICAgKiBAcGFyYW0gIHAwCisgICAgICogQHBhcmFtICBwMQor
ICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgRWRnZXNSZW5kZXJlci5wcm90b3R5cGUuX2No
ZWNrRWRnZSA9IGZ1bmN0aW9uIChmYWNlSW5kZXgsIGVkZ2UsIGZhY2VOb3JtYWxzLCBwMCwgcDEp
IHsKKyAgICAgICAgdmFyIG5lZWRUb0NyZWF0ZUxpbmU7CisgICAgICAgIGlmIChlZGdlID09PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgICAgIG5lZWRUb0NyZWF0ZUxpbmUgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGRvdFByb2R1Y3QgPSBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdLkRvdChm
YWNlTm9ybWFsc1tmYWNlSW5kZXhdLCBmYWNlTm9ybWFsc1tlZGdlXSk7CisgICAgICAgICAgICBu
ZWVkVG9DcmVhdGVMaW5lID0gZG90UHJvZHVjdCA8IHRoaXMuX2Vwc2lsb247CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG5lZWRUb0NyZWF0ZUxpbmUpIHsKKyAgICAgICAgICAgIHRoaXMuY3JlYXRl
TGluZShwMCwgcDEsIHRoaXMuX2xpbmVzUG9zaXRpb25zLmxlbmd0aCAvIDMpOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBwdXNoIGxpbmUgaW50byB0aGUgcG9zaXRpb24sIG5v
cm1hbCBhbmQgaW5kZXggYnVmZmVyCisgICAgICogQHByb3RlY3RlZAorICAgICAqLworICAgIEVk
Z2VzUmVuZGVyZXIucHJvdG90eXBlLmNyZWF0ZUxpbmUgPSBmdW5jdGlvbiAocDAsIHAxLCBvZmZz
ZXQpIHsKKyAgICAgICAgLy8gUG9zaXRpb25zCisgICAgICAgIHRoaXMuX2xpbmVzUG9zaXRpb25z
LnB1c2gocDAueCwgcDAueSwgcDAueiwgcDAueCwgcDAueSwgcDAueiwgcDEueCwgcDEueSwgcDEu
eiwgcDEueCwgcDEueSwgcDEueik7CisgICAgICAgIC8vIE5vcm1hbHMKKyAgICAgICAgdGhpcy5f
bGluZXNOb3JtYWxzLnB1c2gocDEueCwgcDEueSwgcDEueiwgLTEsIHAxLngsIHAxLnksIHAxLnos
IDEsIHAwLngsIHAwLnksIHAwLnosIC0xLCBwMC54LCBwMC55LCBwMC56LCAxKTsKKyAgICAgICAg
Ly8gSW5kaWNlcworICAgICAgICB0aGlzLl9saW5lc0luZGljZXMucHVzaChvZmZzZXQsIG9mZnNl
dCArIDEsIG9mZnNldCArIDIsIG9mZnNldCwgb2Zmc2V0ICsgMiwgb2Zmc2V0ICsgMyk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZXMgbGluZXMgZWRnZXMgZnJvbSBhZGphY2VuY2pl
cworICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgRWRnZXNSZW5kZXJlci5wcm90b3R5cGUu
X2dlbmVyYXRlRWRnZXNMaW5lcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHBvc2l0aW9u
cyA9IHRoaXMuX3NvdXJjZS5nZXRWZXJ0aWNlc0RhdGEoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25LaW5kKTsKKyAgICAg
ICAgdmFyIGluZGljZXMgPSB0aGlzLl9zb3VyY2UuZ2V0SW5kaWNlcygpOworICAgICAgICBpZiAo
IWluZGljZXMgfHwgIXBvc2l0aW9ucykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIC8vIEZpcnN0IGxldCdzIGZpbmQgYWRqYWNlbmNpZXMKKyAgICAgICAgdmFyIGFk
amFjZW5jaWVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHZhciBmYWNlTm9ybWFscyA9IG5ldyBB
cnJheSgpOworICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIHZhciBmYWNlQWRqYWNlbmNpZXM7
CisgICAgICAgIC8vIFByZXBhcmUgZmFjZXMKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4
IDwgaW5kaWNlcy5sZW5ndGg7IGluZGV4ICs9IDMpIHsKKyAgICAgICAgICAgIGZhY2VBZGphY2Vu
Y2llcyA9IG5ldyBGYWNlQWRqYWNlbmNpZXMoKTsKKyAgICAgICAgICAgIHZhciBwMEluZGV4ID0g
aW5kaWNlc1tpbmRleF07CisgICAgICAgICAgICB2YXIgcDFJbmRleCA9IGluZGljZXNbaW5kZXgg
KyAxXTsKKyAgICAgICAgICAgIHZhciBwMkluZGV4ID0gaW5kaWNlc1tpbmRleCArIDJdOworICAg
ICAgICAgICAgZmFjZUFkamFjZW5jaWVzLnAwID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJWZWN0b3IzIl0ocG9zaXRpb25zW3AwSW5kZXggKiAz
XSwgcG9zaXRpb25zW3AwSW5kZXggKiAzICsgMV0sIHBvc2l0aW9uc1twMEluZGV4ICogMyArIDJd
KTsKKyAgICAgICAgICAgIGZhY2VBZGphY2VuY2llcy5wMSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0
b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdKHBvc2l0aW9uc1twMUlu
ZGV4ICogM10sIHBvc2l0aW9uc1twMUluZGV4ICogMyArIDFdLCBwb3NpdGlvbnNbcDFJbmRleCAq
IDMgKyAyXSk7CisgICAgICAgICAgICBmYWNlQWRqYWNlbmNpZXMucDIgPSBuZXcgX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlZlY3RvcjMiXShwb3NpdGlv
bnNbcDJJbmRleCAqIDNdLCBwb3NpdGlvbnNbcDJJbmRleCAqIDMgKyAxXSwgcG9zaXRpb25zW3Ay
SW5kZXggKiAzICsgMl0pOworICAgICAgICAgICAgdmFyIGZhY2VOb3JtYWwgPSBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVmVjdG9yMyJdLkNyb3NzKGZh
Y2VBZGphY2VuY2llcy5wMS5zdWJ0cmFjdChmYWNlQWRqYWNlbmNpZXMucDApLCBmYWNlQWRqYWNl
bmNpZXMucDIuc3VidHJhY3QoZmFjZUFkamFjZW5jaWVzLnAxKSk7CisgICAgICAgICAgICBmYWNl
Tm9ybWFsLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgZmFjZU5vcm1hbHMucHVzaChmYWNlTm9y
bWFsKTsKKyAgICAgICAgICAgIGFkamFjZW5jaWVzLnB1c2goZmFjZUFkamFjZW5jaWVzKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBTY2FuCisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8
IGFkamFjZW5jaWVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgZmFjZUFkamFjZW5j
aWVzID0gYWRqYWNlbmNpZXNbaW5kZXhdOworICAgICAgICAgICAgZm9yICh2YXIgb3RoZXJJbmRl
eCA9IGluZGV4ICsgMTsgb3RoZXJJbmRleCA8IGFkamFjZW5jaWVzLmxlbmd0aDsgb3RoZXJJbmRl
eCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIG90aGVyRmFjZUFkamFjZW5jaWVzID0gYWRqYWNl
bmNpZXNbb3RoZXJJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGZhY2VBZGphY2VuY2llcy5l
ZGdlc0Nvbm5lY3RlZENvdW50ID09PSAzKSB7IC8vIEZ1bGwKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChvdGhlckZhY2VB
ZGphY2VuY2llcy5lZGdlc0Nvbm5lY3RlZENvdW50ID09PSAzKSB7IC8vIEZ1bGwKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHZhciBvdGhlclAwID0gaW5kaWNlc1tvdGhlckluZGV4ICogM107CisgICAgICAgICAgICAgICAg
dmFyIG90aGVyUDEgPSBpbmRpY2VzW290aGVySW5kZXggKiAzICsgMV07CisgICAgICAgICAgICAg
ICAgdmFyIG90aGVyUDIgPSBpbmRpY2VzW290aGVySW5kZXggKiAzICsgMl07CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgZWRnZUluZGV4ID0gMDsgZWRnZUluZGV4IDwgMzsgZWRnZUluZGV4Kysp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyRWRnZUluZGV4ID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGZhY2VBZGphY2VuY2llcy5lZGdlc1tlZGdlSW5kZXhdICE9PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZWRnZUluZGV4KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX2NoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2VzKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG90aGVyRWRnZUluZGV4ID0gdGhpcy5fcHJvY2Vzc0VkZ2VGb3JB
ZGphY2VuY2llc1dpdGhWZXJ0aWNlcyhmYWNlQWRqYWNlbmNpZXMucDAsIGZhY2VBZGphY2VuY2ll
cy5wMSwgb3RoZXJGYWNlQWRqYWNlbmNpZXMucDAsIG90aGVyRmFjZUFkamFjZW5jaWVzLnAxLCBv
dGhlckZhY2VBZGphY2VuY2llcy5wMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdGhlckVkZ2VJbmRleCA9IHRoaXMuX3Byb2Nlc3NFZGdlRm9yQWRqYWNlbmNp
ZXMoaW5kaWNlc1tpbmRleCAqIDNdLCBpbmRpY2VzW2luZGV4ICogMyArIDFdLCBvdGhlclAwLCBv
dGhlclAxLCBvdGhlclAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoZWNrVmVydGljZXNJ
bnN0ZWFkT2ZJbmRpY2VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVy
RWRnZUluZGV4ID0gdGhpcy5fcHJvY2Vzc0VkZ2VGb3JBZGphY2VuY2llc1dpdGhWZXJ0aWNlcyhm
YWNlQWRqYWNlbmNpZXMucDEsIGZhY2VBZGphY2VuY2llcy5wMiwgb3RoZXJGYWNlQWRqYWNlbmNp
ZXMucDAsIG90aGVyRmFjZUFkamFjZW5jaWVzLnAxLCBvdGhlckZhY2VBZGphY2VuY2llcy5wMik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlckVkZ2VJbmRl
eCA9IHRoaXMuX3Byb2Nlc3NFZGdlRm9yQWRqYWNlbmNpZXMoaW5kaWNlc1tpbmRleCAqIDMgKyAx
XSwgaW5kaWNlc1tpbmRleCAqIDMgKyAyXSwgb3RoZXJQMCwgb3RoZXJQMSwgb3RoZXJQMik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9jaGVja1ZlcnRpY2VzSW5zdGVhZE9mSW5kaWNlcykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlckVkZ2VJbmRleCA9IHRoaXMuX3By
b2Nlc3NFZGdlRm9yQWRqYWNlbmNpZXNXaXRoVmVydGljZXMoZmFjZUFkamFjZW5jaWVzLnAyLCBm
YWNlQWRqYWNlbmNpZXMucDAsIG90aGVyRmFjZUFkamFjZW5jaWVzLnAwLCBvdGhlckZhY2VBZGph
Y2VuY2llcy5wMSwgb3RoZXJGYWNlQWRqYWNlbmNpZXMucDIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJFZGdlSW5kZXggPSB0aGlzLl9wcm9jZXNzRWRn
ZUZvckFkamFjZW5jaWVzKGluZGljZXNbaW5kZXggKiAzICsgMl0sIGluZGljZXNbaW5kZXggKiAz
XSwgb3RoZXJQMCwgb3RoZXJQMSwgb3RoZXJQMik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlckVkZ2VJbmRleCA9PT0gLTEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGZhY2VBZGphY2VuY2llcy5lZGdlc1tlZGdlSW5kZXhdID0g
b3RoZXJJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgb3RoZXJGYWNlQWRqYWNlbmNpZXMuZWRn
ZXNbb3RoZXJFZGdlSW5kZXhdID0gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGZhY2VBZGph
Y2VuY2llcy5lZGdlc0Nvbm5lY3RlZENvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIG90aGVy
RmFjZUFkamFjZW5jaWVzLmVkZ2VzQ29ubmVjdGVkQ291bnQrKzsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGZhY2VBZGphY2VuY2llcy5lZGdlc0Nvbm5lY3RlZENvdW50ID09PSAzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBDcmVhdGUg
bGluZXMKKyAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYWRqYWNlbmNpZXMubGVuZ3Ro
OyBpbmRleCsrKSB7CisgICAgICAgICAgICAvLyBXZSBuZWVkIGEgbGluZSB3aGVuIGEgZmFjZSBo
YXMgbm8gYWRqYWNlbmN5IG9uIGEgc3BlY2lmaWMgZWRnZSBvciBpZiBhbGwgdGhlIGFkamFjZW5j
aWVzIGhhcyBhbiBhbmdsZSBncmVhdGVyIHRoYW4gZXBzaWxvbgorICAgICAgICAgICAgdmFyIGN1
cnJlbnQgPSBhZGphY2VuY2llc1tpbmRleF07CisgICAgICAgICAgICB0aGlzLl9jaGVja0VkZ2Uo
aW5kZXgsIGN1cnJlbnQuZWRnZXNbMF0sIGZhY2VOb3JtYWxzLCBjdXJyZW50LnAwLCBjdXJyZW50
LnAxKTsKKyAgICAgICAgICAgIHRoaXMuX2NoZWNrRWRnZShpbmRleCwgY3VycmVudC5lZGdlc1sx
XSwgZmFjZU5vcm1hbHMsIGN1cnJlbnQucDEsIGN1cnJlbnQucDIpOworICAgICAgICAgICAgdGhp
cy5fY2hlY2tFZGdlKGluZGV4LCBjdXJyZW50LmVkZ2VzWzJdLCBmYWNlTm9ybWFscywgY3VycmVu
dC5wMiwgY3VycmVudC5wMCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTWVyZ2UgaW50byBhIHNp
bmdsZSBtZXNoCisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zb3VyY2UuZ2V0U2NlbmUoKS5n
ZXRFbmdpbmUoKTsKKyAgICAgICAgdGhpcy5fYnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdID0gbmV3
IF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZl
ciJdKGVuZ2luZSwgdGhpcy5fbGluZXNQb3NpdGlvbnMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgZmFsc2Up
OworICAgICAgICB0aGlzLl9idWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmRdID0gbmV3IF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdKGVuZ2luZSwg
dGhpcy5fbGluZXNOb3JtYWxzLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBmYWxzZSwgZmFsc2UsIDQpOworICAg
ICAgICB0aGlzLl9pYiA9IGVuZ2luZS5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLl9saW5lc0luZGlj
ZXMpOworICAgICAgICB0aGlzLl9pbmRpY2VzQ291bnQgPSB0aGlzLl9saW5lc0luZGljZXMubGVu
Z3RoOworICAgIH07CisgICAgLyoqCisgICAgICogQ2hlY2tzIHdldGhlciBvciBub3QgdGhlIGVk
Z2VzIHJlbmRlcmVyIGlzIHJlYWR5IHRvIHJlbmRlci4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYg
cmVhZHksIG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKi8KKyAgICBFZGdlc1JlbmRlcmVyLnByb3Rv
dHlwZS5pc1JlYWR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fbGluZVNo
YWRlci5pc1JlYWR5KCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIHRoZSBlZGdl
cyBvZiB0aGUgYXR0YWNoZWQgbWVzaCwKKyAgICAgKi8KKyAgICBFZGdlc1JlbmRlcmVyLnByb3Rv
dHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3Nv
dXJjZS5nZXRTY2VuZSgpOworICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSgpIHx8ICFzY2VuZS5h
Y3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2
YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIHRoaXMuX2xpbmVTaGFkZXIu
X3ByZUJpbmQoKTsKKyAgICAgICAgaWYgKHRoaXMuX3NvdXJjZS5lZGdlc0NvbG9yLmEgIT09IDEp
IHsKKyAgICAgICAgICAgIGVuZ2luZS5zZXRBbHBoYU1vZGUoX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkNvbnN0YW50cyJdLkFMUEhBX0NPTUJJTkUpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW5naW5lLnNldEFscGhhTW9k
ZShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3Rh
bnRzIl0uQUxQSEFfRElTQUJMRSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVkJPcworICAgICAg
ICBlbmdpbmUuYmluZEJ1ZmZlcnModGhpcy5fYnVmZmVycywgdGhpcy5faWIsIHRoaXMuX2xpbmVT
aGFkZXIuZ2V0RWZmZWN0KCkpOworICAgICAgICBzY2VuZS5yZXNldENhY2hlZE1hdGVyaWFsKCk7
CisgICAgICAgIHRoaXMuX2xpbmVTaGFkZXIuc2V0Q29sb3I0KCJjb2xvciIsIHRoaXMuX3NvdXJj
ZS5lZGdlc0NvbG9yKTsKKyAgICAgICAgaWYgKHNjZW5lLmFjdGl2ZUNhbWVyYS5tb2RlID09PSBf
Q2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQ2FtZXJhIl0uT1JU
SE9HUkFQSElDX0NBTUVSQSkgeworICAgICAgICAgICAgdGhpcy5fbGluZVNoYWRlci5zZXRGbG9h
dCgid2lkdGgiLCB0aGlzLl9zb3VyY2UuZWRnZXNXaWR0aCAvIHRoaXMuZWRnZXNXaWR0aFNjYWxl
ckZvck9ydGhvZ3JhcGhpYyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICB0aGlzLl9saW5lU2hhZGVyLnNldEZsb2F0KCJ3aWR0aCIsIHRoaXMuX3NvdXJjZS5lZGdlc1dp
ZHRoIC8gdGhpcy5lZGdlc1dpZHRoU2NhbGVyRm9yUGVyc3BlY3RpdmUpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX2xpbmVTaGFkZXIuc2V0RmxvYXQoImFzcGVjdFJhdGlvIiwgZW5naW5lLmdl
dEFzcGVjdFJhdGlvKHNjZW5lLmFjdGl2ZUNhbWVyYSkpOworICAgICAgICB0aGlzLl9saW5lU2hh
ZGVyLmJpbmQodGhpcy5fc291cmNlLmdldFdvcmxkTWF0cml4KCkpOworICAgICAgICAvLyBEcmF3
IG9yZGVyCisgICAgICAgIGVuZ2luZS5kcmF3RWxlbWVudHNUeXBlKF9NYXRlcmlhbHNfbWF0ZXJp
YWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siTWF0ZXJpYWwiXS5UcmlhbmdsZUZpbGxN
b2RlLCAwLCB0aGlzLl9pbmRpY2VzQ291bnQpOworICAgICAgICB0aGlzLl9saW5lU2hhZGVyLnVu
YmluZCgpOworICAgIH07CisgICAgcmV0dXJuIEVkZ2VzUmVuZGVyZXI7Cit9KCkpOworCisvKioK
KyAqIExpbmVFZGdlc1JlbmRlcmVyIGZvciBMaW5lTWVzaGVzIHRvIHJlbW92ZSB1bm5lY2Vzc2Fy
eSB0cmlhbmd1bGF0aW9uCisgKi8KK3ZhciBMaW5lRWRnZXNSZW5kZXJlciA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJfX2V4dGVuZHMiXShMaW5lRWRnZXNSZW5kZXJlciwgX3N1cGVyKTsKKyAgICAvKioK
KyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIHR1cm5zIG9mZiBhdXRvIGdlbmVyYXRpbmcgZWRnZXMg
bGluZSBpbiBFZGdlcyBSZW5kZXJlciB0byBtYWtlIGl0IGhlcmUuCisgICAgICogQHBhcmFtICBz
b3VyY2UgTGluZU1lc2ggdXNlZCB0byBnZW5lcmF0ZSBlZGdlcworICAgICAqIEBwYXJhbSAgZXBz
aWxvbiBub3QgaW1wb3J0YW50IChzcGVjaWZpZWQgYW5nbGUgZm9yIGVkZ2UgZGV0ZWN0aW9uKQor
ICAgICAqIEBwYXJhbSAgY2hlY2tWZXJ0aWNlc0luc3RlYWRPZkluZGljZXMgbm90IGltcG9ydGFu
dCBmb3IgTGluZU1lc2gKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBMaW5lRWRnZXNSZW5kZXJlcihz
b3VyY2UsIGVwc2lsb24sIGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2VzKSB7CisgICAgICAg
IGlmIChlcHNpbG9uID09PSB2b2lkIDApIHsgZXBzaWxvbiA9IDAuOTU7IH0KKyAgICAgICAgaWYg
KGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2VzID09PSB2b2lkIDApIHsgY2hlY2tWZXJ0aWNl
c0luc3RlYWRPZkluZGljZXMgPSBmYWxzZTsgfQorICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIu
Y2FsbCh0aGlzLCBzb3VyY2UsIGVwc2lsb24sIGNoZWNrVmVydGljZXNJbnN0ZWFkT2ZJbmRpY2Vz
LCBmYWxzZSkgfHwgdGhpczsKKyAgICAgICAgX3RoaXMuX2dlbmVyYXRlRWRnZXNMaW5lcygpOwor
ICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEdlbmVyYXRlIGVk
Z2VzIGZvciBlYWNoIGxpbmUgaW4gTGluZXNNZXNoLiBFdmVyeSBMaW5lIHNob3VsZCBiZSByZW5k
ZXJlZCBhcyBlZGdlLgorICAgICAqLworICAgIExpbmVFZGdlc1JlbmRlcmVyLnByb3RvdHlwZS5f
Z2VuZXJhdGVFZGdlc0xpbmVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcG9zaXRpb25z
ID0gdGhpcy5fc291cmNlLmdldFZlcnRpY2VzRGF0YShfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQpOworICAgICAg
ICB2YXIgaW5kaWNlcyA9IHRoaXMuX3NvdXJjZS5nZXRJbmRpY2VzKCk7CisgICAgICAgIGlmICgh
aW5kaWNlcyB8fCAhcG9zaXRpb25zKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgdmFyIHAwID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdOworICAgICAgICB2YXIgcDEgPSBfTWF0
aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVG1wVmVjdG9ycyJd
LlZlY3RvcjNbMV07CisgICAgICAgIHZhciBsZW4gPSBpbmRpY2VzLmxlbmd0aCAtIDE7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBvZmZzZXQgPSAwOyBpIDwgbGVuOyBpICs9IDIsIG9mZnNldCAr
PSA0KSB7CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siVmVjdG9yMyJdLkZyb21BcnJheVRvUmVmKHBvc2l0aW9ucywgMyAqIGluZGlj
ZXNbaV0sIHAwKTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJWZWN0b3IzIl0uRnJvbUFycmF5VG9SZWYocG9zaXRpb25zLCAzICog
aW5kaWNlc1tpICsgMV0sIHAxKTsKKyAgICAgICAgICAgIHRoaXMuY3JlYXRlTGluZShwMCwgcDEs
IG9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gTWVyZ2UgaW50byBhIHNpbmdsZSBtZXNo
CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zb3VyY2UuZ2V0U2NlbmUoKS5nZXRFbmdpbmUo
KTsKKyAgICAgICAgdGhpcy5fYnVmZmVyc1tfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmRdID0gbmV3IF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdKGVuZ2lu
ZSwgdGhpcy5fbGluZXNQb3NpdGlvbnMsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlBvc2l0aW9uS2luZCwgZmFsc2UpOworICAgICAg
ICB0aGlzLl9idWZmZXJzW19NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlZlcnRleEJ1ZmZlciJdLk5vcm1hbEtpbmRdID0gbmV3IF9NZXNoZXNfYnVmZmVyX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdKGVuZ2luZSwgdGhpcy5fbGlu
ZXNOb3JtYWxzLCBfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJW
ZXJ0ZXhCdWZmZXIiXS5Ob3JtYWxLaW5kLCBmYWxzZSwgZmFsc2UsIDQpOworICAgICAgICB0aGlz
Ll9pYiA9IGVuZ2luZS5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLl9saW5lc0luZGljZXMpOworICAg
ICAgICB0aGlzLl9pbmRpY2VzQ291bnQgPSB0aGlzLl9saW5lc0luZGljZXMubGVuZ3RoOworICAg
IH07CisgICAgcmV0dXJuIExpbmVFZGdlc1JlbmRlcmVyOworfShFZGdlc1JlbmRlcmVyKSk7CisK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vUmVuZGVyaW5nL2dlb21ldHJ5QnVmZmVyUmVuZGVy
ZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9SZW5kZXJpbmcvZ2VvbWV0cnlCdWZmZXJSZW5kZXJlci50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogR2VvbWV0cnlCdWZmZXJSZW5kZXJlciAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21h
dGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19idWZmZXJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L01lc2hlcy9idWZmZXIgKi8gIi4vTWVzaGVzL2J1ZmZlci50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5n
aW5lcy9jb25zdGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVy
aWFscy9UZXh0dXJlcy90ZXh0dXJlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19UZXh0dXJlc19tdWx0aVJlbmRlclRhcmdldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL1RleHR1cmVzL211
bHRpUmVuZGVyVGFyZ2V0ICovICIuL01hdGVyaWFscy9UZXh0dXJlcy9tdWx0aVJlbmRlclRhcmdl
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01h
dGVyaWFscy9tYXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvbWF0
ZXJpYWxIZWxwZXIgKi8gIi4vTWF0ZXJpYWxzL21hdGVyaWFsSGVscGVyLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfZ2VvbWV0cnlfZnJhZ21lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvZ2Vv
bWV0cnkuZnJhZ21lbnQgKi8gIi4vU2hhZGVycy9nZW9tZXRyeS5mcmFnbWVudC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzX2dlb21ldHJ5X3ZlcnRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vU2hhZGVycy9n
ZW9tZXRyeS52ZXJ0ZXggKi8gIi4vU2hhZGVycy9nZW9tZXRyeS52ZXJ0ZXgudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9kZXZUb29scyAqLyAiLi9N
aXNjL2RldlRvb2xzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhf
Y29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKwor
CisKKworCisKKworCisKKworCisvKioKKyAqIFRoaXMgcmVuZGVyZXIgaXMgaGVscGZ1bGwgdG8g
ZmlsbCBvbmUgb2YgdGhlIHJlbmRlciB0YXJnZXQgd2l0aCBhIGdlb21ldHJ5IGJ1ZmZlci4KKyAq
LwordmFyIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBHIEJ1ZmZlciBmb3IgdGhlIHNjZW5l
CisgICAgICogQHBhcmFtIHNjZW5lIFRoZSBzY2VuZSB0aGUgYnVmZmVyIGJlbG9uZ3MgdG8KKyAg
ICAgKiBAcGFyYW0gcmF0aW8gSG93IGJpZyBpcyB0aGUgYnVmZmVyIHJlbGF0ZWQgdG8gdGhlIG1h
aW4gY2FudmFzLgorICAgICAqLworICAgIGZ1bmN0aW9uIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXIo
c2NlbmUsIHJhdGlvKSB7CisgICAgICAgIGlmIChyYXRpbyA9PT0gdm9pZCAwKSB7IHJhdGlvID0g
MTsgfQorICAgICAgICAvKioKKyAgICAgICAgICogRGljdGlvbmFyeSB1c2VkIHRvIHN0b3JlIHRo
ZSBwcmV2aW91cyB0cmFuc2Zvcm1hdGlvbiBtYXRyaWNlcyBvZiBlYWNoIHJlbmRlcmVkIG1lc2gK
KyAgICAgICAgICogaW4gb3JkZXIgdG8gY29tcHV0ZSBvYmplY3RzIHZlbG9jaXRpZXMgd2hlbiBl
bmFibGVWZWxvY2l0eSBpcyBzZXQgdG8gInRydWUiCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuX3ByZXZpb3VzVHJhbnNmb3JtYXRpb25NYXRyaWNlcyA9IHt9
OworICAgICAgICAvKioKKyAgICAgICAgICogRGljdGlvbmFyeSB1c2VkIHRvIHN0b3JlIHRoZSBw
cmV2aW91cyBib25lcyB0cmFuc2Zvcm1hdGlvbiBtYXRyaWNlcyBvZiBlYWNoIHJlbmRlcmVkIG1l
c2gKKyAgICAgICAgICogaW4gb3JkZXIgdG8gY29tcHV0ZSBvYmplY3RzIHZlbG9jaXRpZXMgd2hl
biBlbmFibGVWZWxvY2l0eSBpcyBzZXQgdG8gInRydWUiCisgICAgICAgICAqIEBoaWRkZW4KKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuX3ByZXZpb3VzQm9uZXNUcmFuc2Zvcm1hdGlvbk1hdHJp
Y2VzID0ge307CisgICAgICAgIC8qKgorICAgICAgICAgKiBBcnJheSB1c2VkIHRvIHN0b3JlIHRo
ZSBpZ25vcmVkIHNraW5uZWQgbWVzaGVzIHdoaWxlIGNvbXB1dGluZyB2ZWxvY2l0eSBtYXAgKHR5
cGljYWxseSB1c2VkIGJ5IHRoZSBtb3Rpb24gYmx1ciBwb3N0LXByb2Nlc3MpLgorICAgICAgICAg
KiBBdm9pZHMgY29tcHV0aW5nIGJvbmVzIHZlbG9jaXRpZXMgYW5kIGNvbXB1dGVzIG9ubHkgbWVz
aCdzIHZlbG9jaXR5IGl0c2VsZiAocG9zaXRpb24sIHJvdGF0aW9uLCBzY2FsaW5nKS4KKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuZXhjbHVkZWRTa2lubmVkTWVzaGVzRnJvbVZlbG9jaXR5ID0g
W107CisgICAgICAgIHRoaXMuX2VuYWJsZVBvc2l0aW9uID0gZmFsc2U7CisgICAgICAgIHRoaXMu
X2VuYWJsZVZlbG9jaXR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3Bvc2l0aW9uSW5kZXggPSAt
MTsKKyAgICAgICAgdGhpcy5fdmVsb2NpdHlJbmRleCA9IC0xOworICAgICAgICB0aGlzLl9zY2Vu
ZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9yYXRpbyA9IHJhdGlvOworICAgICAgICBHZW9tZXRy
eUJ1ZmZlclJlbmRlcmVyLl9TY2VuZUNvbXBvbmVudEluaXRpYWxpemF0aW9uKHRoaXMuX3NjZW5l
KTsKKyAgICAgICAgLy8gUmVuZGVyIHRhcmdldAorICAgICAgICB0aGlzLl9jcmVhdGVSZW5kZXJU
YXJnZXRzKCk7CisgICAgfQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeUJ1ZmZl
clJlbmRlcmVyLnByb3RvdHlwZSwgInJlbmRlckxpc3QiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBTZXQgdGhlIHJlbmRlciBsaXN0IChtZXNoZXMgdG8gYmUgcmVuZGVyZWQpIHVzZWQgaW4g
dGhlIEcgYnVmZmVyLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAobWVzaGVz
KSB7CisgICAgICAgICAgICB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC5yZW5kZXJMaXN0ID0gbWVz
aGVzOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0
cnlCdWZmZXJSZW5kZXJlci5wcm90b3R5cGUsICJpc1N1cHBvcnRlZCIsIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEdldHMgd2V0aGVyIG9yIG5vdCBHIGJ1ZmZlciBhcmUgc3VwcG9ydGVkIGJ5
IHRoZSBydW5uaW5nIGhhcmR3YXJlLgorICAgICAgICAgKiBUaGlzIHJlcXVpcmVzIGRyYXcgYnVm
ZmVyIHN1cHBvcnRzCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC5pc1N1cHBvcnRlZDsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhl
IGdpdmVuIHRleHR1cmUgdHlwZSBpbiB0aGUgRy1CdWZmZXIgdGV4dHVyZXMgYXJyYXkKKyAgICAg
KiBAcGFyYW0gdGV4dHVyZVR5cGUgVGhlIHRleHR1cmUgdHlwZSBjb25zdGFudC4gRm9yIGV4YW1w
bGUgR2VvbWV0cnlCdWZmZXJSZW5kZXJlci5QT1NJVElPTl9URVhUVVJFX0lOREVYCisgICAgICog
QHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiB0ZXh0dXJlIHR5cGUgaW4gdGhlIEctQnVm
ZmVyIHRleHR1cmVzIGFycmF5CisgICAgICovCisgICAgR2VvbWV0cnlCdWZmZXJSZW5kZXJlci5w
cm90b3R5cGUuZ2V0VGV4dHVyZUluZGV4ID0gZnVuY3Rpb24gKHRleHR1cmVUeXBlKSB7CisgICAg
ICAgIHN3aXRjaCAodGV4dHVyZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgR2VvbWV0cnlCdWZm
ZXJSZW5kZXJlci5QT1NJVElPTl9URVhUVVJFX1RZUEU6IHJldHVybiB0aGlzLl9wb3NpdGlvbklu
ZGV4OworICAgICAgICAgICAgY2FzZSBHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLlZFTE9DSVRZX1RF
WFRVUkVfVFlQRTogcmV0dXJuIHRoaXMuX3ZlbG9jaXR5SW5kZXg7CisgICAgICAgICAgICBkZWZh
dWx0OiByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLnByb3RvdHlwZSwgImVuYWJsZVBvc2l0aW9uIiwg
eworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBv
YmplY3RzIHBvc2l0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhlIEcgYnVmZmVyLgorICAgICAgICAg
Ki8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
ZW5hYmxlUG9zaXRpb247CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRz
IHdoZXRoZXIgb3Igbm90IG9iamVjdHMgcG9zaXRpb25zIGFyZSBlbmFibGVkIGZvciB0aGUgRyBi
dWZmZXIuCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmFibGUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2VuYWJsZVBvc2l0aW9uID0gZW5hYmxlOworICAgICAgICAgICAgdGhp
cy5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9jcmVhdGVSZW5kZXJUYXJnZXRzKCk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeUJ1ZmZl
clJlbmRlcmVyLnByb3RvdHlwZSwgImVuYWJsZVZlbG9jaXR5IiwgeworICAgICAgICAvKioKKyAg
ICAgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBvYmplY3RzIHZlbG9jaXRpZXMg
YXJlIGVuYWJsZWQgZm9yIHRoZSBHIGJ1ZmZlci4KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZVZlbG9jaXR5Owor
ICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3ZXRoZXIgb3Igbm90IG9i
amVjdHMgdmVsb2NpdGllcyBhcmUgZW5hYmxlZCBmb3IgdGhlIEcgYnVmZmVyLgorICAgICAgICAg
Ki8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5hYmxlKSB7CisgICAgICAgICAgICB0aGlzLl9l
bmFibGVWZWxvY2l0eSA9IGVuYWJsZTsKKyAgICAgICAgICAgIGlmICghZW5hYmxlKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzID0ge307Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRo
aXMuX2NyZWF0ZVJlbmRlclRhcmdldHMoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEdlb21ldHJ5QnVmZmVyUmVuZGVyZXIucHJvdG90eXBlLCAic2NlbmUi
LCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBzY2VuZSBhc3NvY2lhdGVkIHdp
dGggdGhlIGJ1ZmZlci4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0cnlCdWZmZXJSZW5kZXJlci5wcm90b3R5cGUsICJy
YXRpbyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHJhdGlvIHVzZWQgYnkg
dGhlIGJ1ZmZlciBkdXJpbmcgaXRzIGNyZWF0aW9uLgorICAgICAgICAgKiBIb3cgYmlnIGlzIHRo
ZSBidWZmZXIgcmVsYXRlZCB0byB0aGUgbWFpbiBjYW52YXMuCisgICAgICAgICAqLworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yYXRpbzsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQ2hlY2tzIHdldGhlciBldmVyeXRoaW5n
IGlzIHJlYWR5IHRvIHJlbmRlciBhIHN1Ym1lc2ggdG8gdGhlIEcgYnVmZmVyLgorICAgICAqIEBw
YXJhbSBzdWJNZXNoIHRoZSBzdWJtZXNoIHRvIGNoZWNrIHJlYWRpbmVzcyBmb3IKKyAgICAgKiBA
cGFyYW0gdXNlSW5zdGFuY2VzIGlzIHRoZSBtZXNoIGRyYXduIHVzaW5nIGluc3RhbmNlIG9yIG5v
dAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgcmVhZHkgb3RoZXJ3aXNlIGZhbHNlCisgICAgICov
CisgICAgR2VvbWV0cnlCdWZmZXJSZW5kZXJlci5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9u
IChzdWJNZXNoLCB1c2VJbnN0YW5jZXMpIHsKKyAgICAgICAgdmFyIG1hdGVyaWFsID0gc3ViTWVz
aC5nZXRNYXRlcmlhbCgpOworICAgICAgICBpZiAobWF0ZXJpYWwgJiYgbWF0ZXJpYWwuZGlzYWJs
ZURlcHRoV3JpdGUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgZGVmaW5lcyA9IFtdOworICAgICAgICB2YXIgYXR0cmlicyA9IFtfTWVzaGVzX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlv
bktpbmQsIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLk5vcm1hbEtpbmRdOworICAgICAgICB2YXIgbWVzaCA9IHN1Yk1lc2guZ2V0TWVz
aCgpOworICAgICAgICAvLyBBbHBoYSB0ZXN0CisgICAgICAgIGlmIChtYXRlcmlhbCAmJiBtYXRl
cmlhbC5uZWVkQWxwaGFUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2Rl
ZmluZSBBTFBIQVRFU1QiKTsKKyAgICAgICAgICAgIGlmIChtZXNoLmlzVmVydGljZXNEYXRhUHJl
c2VudChfTWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhC
dWZmZXIiXS5VVktpbmQpKSB7CisgICAgICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNf
YnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWS2lu
ZCk7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIFVWMSIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKG1lc2guaXNWZXJ0aWNlc0RhdGFQcmVzZW50KF9NZXNo
ZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVW
MktpbmQpKSB7CisgICAgICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRleEJ1ZmZlciJdLlVWMktpbmQpOworICAg
ICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBVVjIiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAvLyBCdWZmZXJzCisgICAgICAgIGlmICh0aGlzLl9lbmFibGVQ
b3NpdGlvbikgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIFBPU0lUSU9OIik7
CisgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgUE9TSVRJT05fSU5ERVggIiArIHRo
aXMuX3Bvc2l0aW9uSW5kZXgpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9lbmFibGVW
ZWxvY2l0eSkgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIFZFTE9DSVRZIik7
CisgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgVkVMT0NJVFlfSU5ERVggIiArIHRo
aXMuX3ZlbG9jaXR5SW5kZXgpOworICAgICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZWRTa2lubmVk
TWVzaGVzRnJvbVZlbG9jaXR5LmluZGV4T2YobWVzaCkgPT09IC0xKSB7CisgICAgICAgICAgICAg
ICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIEJPTkVTX1ZFTE9DSVRZX0VOQUJMRUQiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBCb25lcworICAgICAgICBpZiAobWVzaC51
c2VCb25lcyAmJiBtZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycykgeworICAgICAgICAgICAg
YXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
IlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0tpbmQpOworICAgICAgICAgICAgYXR0cmli
cy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlcnRl
eEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0tpbmQpOworICAgICAgICAgICAgaWYgKG1lc2gubnVt
Qm9uZUluZmx1ZW5jZXJzID4gNCkgeworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVzaChfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIiXS5N
YXRyaWNlc0luZGljZXNFeHRyYUtpbmQpOworICAgICAgICAgICAgICAgIGF0dHJpYnMucHVzaChf
TWVzaGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJWZXJ0ZXhCdWZmZXIi
XS5NYXRyaWNlc1dlaWdodHNFeHRyYUtpbmQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGVmaW5lcy5wdXNoKCIjZGVmaW5lIE5VTV9CT05FX0lORkxVRU5DRVJTICIgKyBtZXNoLm51bUJv
bmVJbmZsdWVuY2Vycyk7CisgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgQm9uZXNQ
ZXJNZXNoICIgKyAobWVzaC5za2VsZXRvbiA/IG1lc2guc2tlbGV0b24uYm9uZXMubGVuZ3RoICsg
MSA6IDApKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlZmluZXMu
cHVzaCgiI2RlZmluZSBOVU1fQk9ORV9JTkZMVUVOQ0VSUyAwIik7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gTW9ycGggdGFyZ2V0cworICAgICAgICB2YXIgbW9ycGhUYXJnZXRNYW5hZ2VyID0gbWVz
aC5tb3JwaFRhcmdldE1hbmFnZXI7CisgICAgICAgIHZhciBudW1Nb3JwaEluZmx1ZW5jZXJzID0g
MDsKKyAgICAgICAgaWYgKG1vcnBoVGFyZ2V0TWFuYWdlcikgeworICAgICAgICAgICAgaWYgKG1v
cnBoVGFyZ2V0TWFuYWdlci5udW1JbmZsdWVuY2VycyA+IDApIHsKKyAgICAgICAgICAgICAgICBu
dW1Nb3JwaEluZmx1ZW5jZXJzID0gbW9ycGhUYXJnZXRNYW5hZ2VyLm51bUluZmx1ZW5jZXJzOwor
ICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2RlZmluZSBNT1JQSFRBUkdFVFMiKTsKKyAg
ICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgTlVNX01PUlBIX0lORkxVRU5DRVJT
ICIgKyBudW1Nb3JwaEluZmx1ZW5jZXJzKTsKKyAgICAgICAgICAgICAgICBfTWF0ZXJpYWxzX21h
dGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIk1hdGVyaWFsSGVscGVy
Il0uUHJlcGFyZUF0dHJpYnV0ZXNGb3JNb3JwaFRhcmdldHNJbmZsdWVuY2VycyhhdHRyaWJzLCBt
ZXNoLCBudW1Nb3JwaEluZmx1ZW5jZXJzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAvLyBJbnN0YW5jZXMKKyAgICAgICAgaWYgKHVzZUluc3RhbmNlcykgeworICAgICAgICAg
ICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIElOU1RBTkNFUyIpOworICAgICAgICAgICAgX01hdGVy
aWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJNYXRlcmlh
bEhlbHBlciJdLlB1c2hBdHRyaWJ1dGVzRm9ySW5zdGFuY2VzKGF0dHJpYnMpOworICAgICAgICB9
CisgICAgICAgIC8vIFNldHVwIHRleHR1cmVzIGNvdW50CisgICAgICAgIGRlZmluZXMucHVzaCgi
I2RlZmluZSBSRU5ERVJfVEFSR0VUX0NPVU5UICIgKyB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC50
ZXh0dXJlcy5sZW5ndGgpOworICAgICAgICAvLyBHZXQgY29ycmVjdCBlZmZlY3QKKyAgICAgICAg
dmFyIGpvaW4gPSBkZWZpbmVzLmpvaW4oIlxuIik7CisgICAgICAgIGlmICh0aGlzLl9jYWNoZWRE
ZWZpbmVzICE9PSBqb2luKSB7CisgICAgICAgICAgICB0aGlzLl9jYWNoZWREZWZpbmVzID0gam9p
bjsKKyAgICAgICAgICAgIHRoaXMuX2VmZmVjdCA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmNy
ZWF0ZUVmZmVjdCgiZ2VvbWV0cnkiLCBhdHRyaWJzLCBbIndvcmxkIiwgIm1Cb25lcyIsICJ2aWV3
UHJvamVjdGlvbiIsICJkaWZmdXNlTWF0cml4IiwgInZpZXciLCAicHJldmlvdXNXb3JsZCIsICJw
cmV2aW91c1ZpZXdQcm9qZWN0aW9uIiwgIm1QcmV2aW91c0JvbmVzIiwgIm1vcnBoVGFyZ2V0SW5m
bHVlbmNlcyJdLCBbImRpZmZ1c2VTYW1wbGVyIl0sIGpvaW4sIHVuZGVmaW5lZCwgdW5kZWZpbmVk
LCB1bmRlZmluZWQsIHsgYnVmZmVyc0NvdW50OiB0aGlzLl9lbmFibGVQb3NpdGlvbiA/IDMgOiAy
LCBtYXhTaW11bHRhbmVvdXNNb3JwaFRhcmdldHM6IG51bU1vcnBoSW5mbHVlbmNlcnMgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2VmZmVjdC5pc1JlYWR5KCk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHVuZGVybHlpbmcgRyBCdWZmZXIuCisg
ICAgICogQHJldHVybnMgdGhlIGJ1ZmZlcgorICAgICAqLworICAgIEdlb21ldHJ5QnVmZmVyUmVu
ZGVyZXIucHJvdG90eXBlLmdldEdCdWZmZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biB0aGlzLl9tdWx0aVJlbmRlclRhcmdldDsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLnByb3RvdHlwZSwgInNhbXBsZXMiLCB7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB1c2VkIHRvIHJl
bmRlciB0aGUgYnVmZmVyIChhbnRpIGFsaWFzaW5nKS4KKyAgICAgICAgICovCisgICAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX211bHRpUmVuZGVyVGFy
Z2V0LnNhbXBsZXM7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRo
ZSBudW1iZXIgb2Ygc2FtcGxlcyB1c2VkIHRvIHJlbmRlciB0aGUgYnVmZmVyIChhbnRpIGFsaWFz
aW5nKS4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgICAgICB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC5zYW1wbGVzID0gdmFsdWU7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIERpc3Bvc2VzIHRoZSByZW5kZXJlciBhbmQgZnJl
ZXMgdXAgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgICAgICovCisgICAgR2VvbWV0cnlCdWZmZXJS
ZW5kZXJlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5n
ZXRHQnVmZmVyKCkuZGlzcG9zZSgpOworICAgIH07CisgICAgR2VvbWV0cnlCdWZmZXJSZW5kZXJl
ci5wcm90b3R5cGUuX2NyZWF0ZVJlbmRlclRhcmdldHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9zY2VuZS5nZXRF
bmdpbmUoKTsKKyAgICAgICAgdmFyIGNvdW50ID0gMjsKKyAgICAgICAgaWYgKHRoaXMuX2VuYWJs
ZVBvc2l0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl9wb3NpdGlvbkluZGV4ID0gY291bnQ7Cisg
ICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9lbmFibGVW
ZWxvY2l0eSkgeworICAgICAgICAgICAgdGhpcy5fdmVsb2NpdHlJbmRleCA9IGNvdW50OworICAg
ICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9tdWx0aVJlbmRlclRh
cmdldCA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX211bHRpUmVuZGVyVGFyZ2V0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIk11bHRpUmVuZGVyVGFyZ2V0Il0oImdCdWZmZXIiLCB7IHdp
ZHRoOiBlbmdpbmUuZ2V0UmVuZGVyV2lkdGgoKSAqIHRoaXMuX3JhdGlvLCBoZWlnaHQ6IGVuZ2lu
ZS5nZXRSZW5kZXJIZWlnaHQoKSAqIHRoaXMuX3JhdGlvIH0sIGNvdW50LCB0aGlzLl9zY2VuZSwg
eyBnZW5lcmF0ZU1pcE1hcHM6IGZhbHNlLCBnZW5lcmF0ZURlcHRoVGV4dHVyZTogdHJ1ZSwgZGVm
YXVsdFR5cGU6IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJDb25zdGFudHMiXS5URVhUVVJFVFlQRV9GTE9BVCB9KTsKKyAgICAgICAgaWYgKCF0aGlzLmlz
U3VwcG9ydGVkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fbXVsdGlSZW5kZXJUYXJnZXQud3JhcFUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVGV4dHVyZSJdLkNMQU1QX0FERFJFU1NNT0RF
OworICAgICAgICB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC53cmFwViA9IF9NYXRlcmlhbHNfVGV4
dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUZXh0dXJlIl0uQ0xB
TVBfQUREUkVTU01PREU7CisgICAgICAgIHRoaXMuX211bHRpUmVuZGVyVGFyZ2V0LnJlZnJlc2hS
YXRlID0gMTsKKyAgICAgICAgdGhpcy5fbXVsdGlSZW5kZXJUYXJnZXQucmVuZGVyUGFydGljbGVz
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX211bHRpUmVuZGVyVGFyZ2V0LnJlbmRlckxpc3QgPSBu
dWxsOworICAgICAgICAvLyBzZXQgZGVmYXVsdCBkZXB0aCB2YWx1ZSB0byAxLjAgKGZhciBhd2F5
KQorICAgICAgICB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC5vbkNsZWFyT2JzZXJ2YWJsZS5hZGQo
ZnVuY3Rpb24gKGVuZ2luZSkgeworICAgICAgICAgICAgZW5naW5lLmNsZWFyKG5ldyBfTWF0aHNf
bWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQ29sb3I0Il0oMC4wLCAw
LjAsIDAuMCwgMS4wKSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIH0pOworICAgICAgICAv
LyBDdXN0b20gcmVuZGVyIGZ1bmN0aW9uCisgICAgICAgIHZhciByZW5kZXJTdWJNZXNoID0gZnVu
Y3Rpb24gKHN1Yk1lc2gpIHsKKyAgICAgICAgICAgIHZhciBtZXNoID0gc3ViTWVzaC5nZXRSZW5k
ZXJpbmdNZXNoKCk7CisgICAgICAgICAgICB2YXIgc2NlbmUgPSBfdGhpcy5fc2NlbmU7CisgICAg
ICAgICAgICB2YXIgZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgICAgICB2YXIg
bWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7CisgICAgICAgICAgICBpZiAoIW1hdGVy
aWFsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbWVzaC5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mby5faXNBY3RpdmVJbnRlcm1lZGlh
dGUgPSBmYWxzZTsKKyAgICAgICAgICAgIC8vIFZlbG9jaXR5CisgICAgICAgICAgICBpZiAoX3Ro
aXMuX2VuYWJsZVZlbG9jaXR5ICYmICFfdGhpcy5fcHJldmlvdXNUcmFuc2Zvcm1hdGlvbk1hdHJp
Y2VzW21lc2gudW5pcXVlSWRdKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX3ByZXZpb3VzVHJh
bnNmb3JtYXRpb25NYXRyaWNlc1ttZXNoLnVuaXF1ZUlkXSA9IHsKKyAgICAgICAgICAgICAgICAg
ICAgd29ybGQ6IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJNYXRyaXgiXS5JZGVudGl0eSgpLAorICAgICAgICAgICAgICAgICAgICB2aWV3UHJvamVjdGlv
bjogc2NlbmUuZ2V0VHJhbnNmb3JtTWF0cml4KCkKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIGlmIChtZXNoLnNrZWxldG9uKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBi
b25lc1RyYW5zZm9ybWF0aW9ucyA9IG1lc2guc2tlbGV0b24uZ2V0VHJhbnNmb3JtTWF0cmljZXMo
bWVzaCk7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wcmV2aW91c0JvbmVzVHJhbnNmb3Jt
YXRpb25NYXRyaWNlc1ttZXNoLnVuaXF1ZUlkXSA9IF90aGlzLl9jb3B5Qm9uZXNUcmFuc2Zvcm1h
dGlvbk1hdHJpY2VzKGJvbmVzVHJhbnNmb3JtYXRpb25zLCBuZXcgRmxvYXQzMkFycmF5KGJvbmVz
VHJhbnNmb3JtYXRpb25zLmxlbmd0aCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIEN1bGxpbmcKKyAgICAgICAgICAgIGVuZ2luZS5zZXRTdGF0ZSht
YXRlcmlhbC5iYWNrRmFjZUN1bGxpbmcsIDAsIGZhbHNlLCBzY2VuZS51c2VSaWdodEhhbmRlZFN5
c3RlbSk7CisgICAgICAgICAgICAvLyBNYW5hZ2luZyBpbnN0YW5jZXMKKyAgICAgICAgICAgIHZh
ciBiYXRjaCA9IG1lc2guX2dldEluc3RhbmNlc1JlbmRlckxpc3Qoc3ViTWVzaC5faWQpOworICAg
ICAgICAgICAgaWYgKGJhdGNoLm11c3RSZXR1cm4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgaGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJp
bmcgPSAoZW5naW5lLmdldENhcHMoKS5pbnN0YW5jZWRBcnJheXMpICYmIChiYXRjaC52aXNpYmxl
SW5zdGFuY2VzW3N1Yk1lc2guX2lkXSAhPT0gbnVsbCk7CisgICAgICAgICAgICBpZiAoX3RoaXMu
aXNSZWFkeShzdWJNZXNoLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZykpIHsKKyAgICAgICAg
ICAgICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KF90aGlzLl9lZmZlY3QpOworICAgICAgICAgICAg
ICAgIG1lc2guX2JpbmQoc3ViTWVzaCwgX3RoaXMuX2VmZmVjdCwgX01hdGVyaWFsc19tYXRlcmlh
bF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlhbCJdLlRyaWFuZ2xlRmlsbE1v
ZGUpOworICAgICAgICAgICAgICAgIF90aGlzLl9lZmZlY3Quc2V0TWF0cml4KCJ2aWV3UHJvamVj
dGlvbiIsIHNjZW5lLmdldFRyYW5zZm9ybU1hdHJpeCgpKTsKKyAgICAgICAgICAgICAgICBfdGhp
cy5fZWZmZWN0LnNldE1hdHJpeCgidmlldyIsIHNjZW5lLmdldFZpZXdNYXRyaXgoKSk7CisgICAg
ICAgICAgICAgICAgLy8gQWxwaGEgdGVzdAorICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbCAm
JiBtYXRlcmlhbC5uZWVkQWxwaGFUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGFscGhhVGV4dHVyZSA9IG1hdGVyaWFsLmdldEFscGhhVGVzdFRleHR1cmUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFscGhhVGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
X3RoaXMuX2VmZmVjdC5zZXRUZXh0dXJlKCJkaWZmdXNlU2FtcGxlciIsIGFscGhhVGV4dHVyZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZWZmZWN0LnNldE1hdHJpeCgiZGlmZnVz
ZU1hdHJpeCIsIGFscGhhVGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEJvbmVzCisg
ICAgICAgICAgICAgICAgaWYgKG1lc2gudXNlQm9uZXMgJiYgbWVzaC5jb21wdXRlQm9uZXNVc2lu
Z1NoYWRlcnMgJiYgbWVzaC5za2VsZXRvbikgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy5f
ZWZmZWN0LnNldE1hdHJpY2VzKCJtQm9uZXMiLCBtZXNoLnNrZWxldG9uLmdldFRyYW5zZm9ybU1h
dHJpY2VzKG1lc2gpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLl9lbmFibGVWZWxv
Y2l0eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2VmZmVjdC5zZXRNYXRyaWNl
cygibVByZXZpb3VzQm9uZXMiLCBfdGhpcy5fcHJldmlvdXNCb25lc1RyYW5zZm9ybWF0aW9uTWF0
cmljZXNbbWVzaC51bmlxdWVJZF0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE1vcnBoIHRhcmdldHMKKyAgICAgICAgICAgICAg
ICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19b
Ik1hdGVyaWFsSGVscGVyIl0uQmluZE1vcnBoVGFyZ2V0UGFyYW1ldGVycyhtZXNoLCBfdGhpcy5f
ZWZmZWN0KTsKKyAgICAgICAgICAgICAgICAvLyBWZWxvY2l0eQorICAgICAgICAgICAgICAgIGlm
IChfdGhpcy5fZW5hYmxlVmVsb2NpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2Vm
ZmVjdC5zZXRNYXRyaXgoInByZXZpb3VzV29ybGQiLCBfdGhpcy5fcHJldmlvdXNUcmFuc2Zvcm1h
dGlvbk1hdHJpY2VzW21lc2gudW5pcXVlSWRdLndvcmxkKTsKKyAgICAgICAgICAgICAgICAgICAg
X3RoaXMuX2VmZmVjdC5zZXRNYXRyaXgoInByZXZpb3VzVmlld1Byb2plY3Rpb24iLCBfdGhpcy5f
cHJldmlvdXNUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzW21lc2gudW5pcXVlSWRdLnZpZXdQcm9qZWN0
aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gRHJhdworICAgICAg
ICAgICAgICAgIG1lc2guX3Byb2Nlc3NSZW5kZXJpbmcoc3ViTWVzaCwgX3RoaXMuX2VmZmVjdCwg
X01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlh
bCJdLlRyaWFuZ2xlRmlsbE1vZGUsIGJhdGNoLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZywg
ZnVuY3Rpb24gKGlzSW5zdGFuY2UsIHdvcmxkKSB7IHJldHVybiBfdGhpcy5fZWZmZWN0LnNldE1h
dHJpeCgid29ybGQiLCB3b3JsZCk7IH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
VmVsb2NpdHkKKyAgICAgICAgICAgIGlmIChfdGhpcy5fZW5hYmxlVmVsb2NpdHkpIHsKKyAgICAg
ICAgICAgICAgICBfdGhpcy5fcHJldmlvdXNUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzW21lc2gudW5p
cXVlSWRdLndvcmxkID0gbWVzaC5nZXRXb3JsZE1hdHJpeCgpLmNsb25lKCk7CisgICAgICAgICAg
ICAgICAgX3RoaXMuX3ByZXZpb3VzVHJhbnNmb3JtYXRpb25NYXRyaWNlc1ttZXNoLnVuaXF1ZUlk
XS52aWV3UHJvamVjdGlvbiA9IF90aGlzLl9zY2VuZS5nZXRUcmFuc2Zvcm1NYXRyaXgoKS5jbG9u
ZSgpOworICAgICAgICAgICAgICAgIGlmIChtZXNoLnNrZWxldG9uKSB7CisgICAgICAgICAgICAg
ICAgICAgIF90aGlzLl9jb3B5Qm9uZXNUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzKG1lc2guc2tlbGV0
b24uZ2V0VHJhbnNmb3JtTWF0cmljZXMobWVzaCksIF90aGlzLl9wcmV2aW91c0JvbmVzVHJhbnNm
b3JtYXRpb25NYXRyaWNlc1ttZXNoLnVuaXF1ZUlkXSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICB0aGlzLl9tdWx0aVJlbmRlclRhcmdldC5j
dXN0b21SZW5kZXJGdW5jdGlvbiA9IGZ1bmN0aW9uIChvcGFxdWVTdWJNZXNoZXMsIGFscGhhVGVz
dFN1Yk1lc2hlcywgdHJhbnNwYXJlbnRTdWJNZXNoZXMsIGRlcHRoT25seVN1Yk1lc2hlcykgewor
ICAgICAgICAgICAgdmFyIGluZGV4OworICAgICAgICAgICAgaWYgKGRlcHRoT25seVN1Yk1lc2hl
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBlbmdpbmUuc2V0Q29sb3JXcml0ZShmYWxzZSk7
CisgICAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZGVwdGhPbmx5U3ViTWVz
aGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICByZW5kZXJTdWJNZXNo
KGRlcHRoT25seVN1Yk1lc2hlcy5kYXRhW2luZGV4XSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVuZ2luZS5zZXRDb2xvcldyaXRlKHRydWUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgb3BhcXVlU3ViTWVzaGVzLmxlbmd0
aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHJlbmRlclN1Yk1lc2gob3BhcXVlU3ViTWVz
aGVzLmRhdGFbaW5kZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW5kZXgg
PSAwOyBpbmRleCA8IGFscGhhVGVzdFN1Yk1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAg
ICAgICAgICAgICByZW5kZXJTdWJNZXNoKGFscGhhVGVzdFN1Yk1lc2hlcy5kYXRhW2luZGV4XSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfTsKKyAgICAvLyBDb3BpZXMgdGhlIGJv
bmVzIHRyYW5zZm9ybWF0aW9uIG1hdHJpY2VzIGludG8gdGhlIHRhcmdldCBhcnJheSBhbmQgcmV0
dXJucyB0aGUgdGFyZ2V0J3MgcmVmZXJlbmNlCisgICAgR2VvbWV0cnlCdWZmZXJSZW5kZXJlci5w
cm90b3R5cGUuX2NvcHlCb25lc1RyYW5zZm9ybWF0aW9uTWF0cmljZXMgPSBmdW5jdGlvbiAoc291
cmNlLCB0YXJnZXQpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIHRhcmdldFtpXSA9IHNvdXJjZVtpXTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH07CisgICAgLyoqCisgICAgICogQ29uc3RhbnQg
dXNlZCB0byByZXRyaWV2ZSB0aGUgcG9zaXRpb24gdGV4dHVyZSBpbmRleCBpbiB0aGUgRy1CdWZm
ZXIgdGV4dHVyZXMgYXJyYXkKKyAgICAgKiB1c2luZyBnZXRJbmRleChHZW9tZXRyeUJ1ZmZlclJl
bmRlcmVyLlBPU0lUSU9OX1RFWFRVUkVfSU5ERVgpCisgICAgICovCisgICAgR2VvbWV0cnlCdWZm
ZXJSZW5kZXJlci5QT1NJVElPTl9URVhUVVJFX1RZUEUgPSAxOworICAgIC8qKgorICAgICAqIENv
bnN0YW50IHVzZWQgdG8gcmV0cmlldmUgdGhlIHZlbG9jaXR5IHRleHR1cmUgaW5kZXggaW4gdGhl
IEctQnVmZmVyIHRleHR1cmVzIGFycmF5CisgICAgICogdXNpbmcgZ2V0SW5kZXgoR2VvbWV0cnlC
dWZmZXJSZW5kZXJlci5WRUxPQ0lUWV9URVhUVVJFX0lOREVYKQorICAgICAqLworICAgIEdlb21l
dHJ5QnVmZmVyUmVuZGVyZXIuVkVMT0NJVFlfVEVYVFVSRV9UWVBFID0gMjsKKyAgICAvKiogQGhp
ZGRlbiAqLworICAgIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXIuX1NjZW5lQ29tcG9uZW50SW5pdGlh
bGl6YXRpb24gPSBmdW5jdGlvbiAoXykgeworICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJHZW9t
ZXRyeUJ1ZmZlclJlbmRlcmVyU2NlbmVDb21wb25lbnQiKTsKKyAgICB9OworICAgIHJldHVybiBH
ZW9tZXRyeUJ1ZmZlclJlbmRlcmVyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9SZW5kZXJpbmcvZ2VvbWV0cnlCdWZmZXJSZW5kZXJlclNjZW5lQ29tcG9uZW50LnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9SZW5kZXJpbmcvZ2VvbWV0cnlCdWZmZXJSZW5kZXJlclNjZW5lQ29t
cG9uZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEdlb21ldHJ5QnVm
ZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudDsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vc2NlbmVDb21wb25lbnQgKi8g
Ii4vc2NlbmVDb21wb25lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZ2VvbWV0
cnlCdWZmZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyICovICIuL1JlbmRlcmluZy9n
ZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLnRzIik7CisKKworCitPYmplY3QuZGVmaW5lUHJvcGVydHko
X3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNjZW5lIl0ucHJvdG90eXBlLCAi
Z2VvbWV0cnlCdWZmZXJSZW5kZXJlciIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlcjsKKyAgICB9LAorICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1N1cHBvcnRlZCkgewor
ICAgICAgICAgICAgdGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlciA9IHZhbHVlOworICAgICAg
ICB9CisgICAgfSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorfSk7Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU2NlbmUiXS5wcm90
b3R5cGUuZW5hYmxlR2VvbWV0cnlCdWZmZXJSZW5kZXJlciA9IGZ1bmN0aW9uIChyYXRpbykgewor
ICAgIGlmIChyYXRpbyA9PT0gdm9pZCAwKSB7IHJhdGlvID0gMTsgfQorICAgIGlmICh0aGlzLl9n
ZW9tZXRyeUJ1ZmZlclJlbmRlcmVyKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9nZW9tZXRyeUJ1
ZmZlclJlbmRlcmVyOworICAgIH0KKyAgICB0aGlzLl9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyID0g
bmV3IF9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
Ikdlb21ldHJ5QnVmZmVyUmVuZGVyZXIiXSh0aGlzLCByYXRpbyk7CisgICAgaWYgKCF0aGlzLl9n
ZW9tZXRyeUJ1ZmZlclJlbmRlcmVyLmlzU3VwcG9ydGVkKSB7CisgICAgICAgIHRoaXMuX2dlb21l
dHJ5QnVmZmVyUmVuZGVyZXIgPSBudWxsOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5fZ2VvbWV0
cnlCdWZmZXJSZW5kZXJlcjsKK307Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siU2NlbmUiXS5wcm90b3R5cGUuZGlzYWJsZUdlb21ldHJ5QnVmZmVyUmVuZGVyZXIgPSBmdW5j
dGlvbiAoKSB7CisgICAgaWYgKCF0aGlzLl9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyKSB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgdGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlci5kaXNw
b3NlKCk7CisgICAgdGhpcy5fZ2VvbWV0cnlCdWZmZXJSZW5kZXJlciA9IG51bGw7Cit9OworLyoq
CisgKiBEZWZpbmVzIHRoZSBHZW9tZXRyeSBCdWZmZXIgc2NlbmUgY29tcG9uZW50IHJlc3BvbnNp
YmxlIHRvIG1hbmFnZSBhIEctQnVmZmVyIHVzZWZ1bAorICogaW4gc2V2ZXJhbCByZW5kZXJpbmcg
dGVjaG5pcXVlcy4KKyAqLwordmFyIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVu
dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgZm9yIHRoZSBnaXZlbiBzY2VuZQorICAg
ICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2VuZSB0byByZWdpc3RlciB0aGUgY29tcG9u
ZW50IGluCisgICAgICovCisgICAgZnVuY3Rpb24gR2VvbWV0cnlCdWZmZXJSZW5kZXJlclNjZW5l
Q29tcG9uZW50KHNjZW5lKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgY29tcG9uZW50
IG5hbWUgaGVscGZ1bCB0byBpZGVudGlmeSB0aGUgY29tcG9uZW50IGluIHRoZSBsaXN0IG9mIHNj
ZW5lIGNvbXBvbmVudHMuCisgICAgICAgICAqLworICAgICAgICB0aGlzLm5hbWUgPSBfc2NlbmVD
b21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmVDb21wb25lbnRDb25z
dGFudHMiXS5OQU1FX0dFT01FVFJZQlVGRkVSUkVOREVSRVI7CisgICAgICAgIHRoaXMuc2NlbmUg
PSBzY2VuZTsKKyAgICB9CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25lbnQg
aW4gYSBnaXZlbiBzY2VuZQorICAgICAqLworICAgIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2Vu
ZUNvbXBvbmVudC5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMuc2NlbmUuX2dhdGhlclJlbmRlclRhcmdldHNTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29t
cG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lQ29tcG9uZW50Q29uc3Rh
bnRzIl0uU1RFUF9HQVRIRVJSRU5ERVJUQVJHRVRTX0dFT01FVFJZQlVGRkVSUkVOREVSRVIsIHRo
aXMsIHRoaXMuX2dhdGhlclJlbmRlclRhcmdldHMpOworICAgIH07CisgICAgLyoqCisgICAgICog
UmVidWlsZHMgdGhlIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQgaW4gY2FzZSBv
ZgorICAgICAqIGNvbnRleHQgbG9zdCBmb3IgaW5zdGFuY2UuCisgICAgICovCisgICAgR2VvbWV0
cnlCdWZmZXJSZW5kZXJlclNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWJ1aWxkID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGZvciB0aGlzIGNvbXBvbmVudAorICAg
IH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhlIGNvbXBvbmVudCBhbmQgdGhlIGFzc29j
aWF0ZWQgcmVzc291cmNlcworICAgICAqLworICAgIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2Vu
ZUNvbXBvbmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8g
Tm90aGluZyB0byBkbyBmb3IgdGhpcyBjb21wb25lbnQKKyAgICB9OworICAgIEdlb21ldHJ5QnVm
ZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX2dhdGhlclJlbmRlclRhcmdldHMg
PSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0cykgeworICAgICAgICBpZiAodGhpcy5zY2VuZS5fZ2Vv
bWV0cnlCdWZmZXJSZW5kZXJlcikgeworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0cy5wdXNoKHRo
aXMuc2NlbmUuX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXIuZ2V0R0J1ZmZlcigpKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgcmV0dXJuIEdlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVu
dDsKK30oKSk7CisKK19nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIkdlb21ldHJ5QnVmZmVyUmVuZGVyZXIiXS5fU2NlbmVDb21wb25lbnRJbml0aWFs
aXphdGlvbiA9IGZ1bmN0aW9uIChzY2VuZSkgeworICAgIC8vIFJlZ2lzdGVyIHRoZSBHIEJ1ZmZl
ciBjb21wb25lbnQgdG8gdGhlIHNjZW5lLgorICAgIHZhciBjb21wb25lbnQgPSBzY2VuZS5fZ2V0
Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
Y2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfR0VPTUVUUllCVUZGRVJSRU5ERVJFUik7Cisg
ICAgaWYgKCFjb21wb25lbnQpIHsKKyAgICAgICAgY29tcG9uZW50ID0gbmV3IEdlb21ldHJ5QnVm
ZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudChzY2VuZSk7CisgICAgICAgIHNjZW5lLl9hZGRDb21w
b25lbnQoY29tcG9uZW50KTsKKyAgICB9Cit9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9S
ZW5kZXJpbmcvaW5kZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vUmVuZGVyaW5nL2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQm91bmRpbmdCb3hSZW5kZXJlciwgRGVw
dGhSZW5kZXJlciwgRGVwdGhSZW5kZXJlclNjZW5lQ29tcG9uZW50LCBFZGdlc1JlbmRlcmVyLCBM
aW5lRWRnZXNSZW5kZXJlciwgR2VvbWV0cnlCdWZmZXJSZW5kZXJlciwgR2VvbWV0cnlCdWZmZXJS
ZW5kZXJlclNjZW5lQ29tcG9uZW50LCBPdXRsaW5lUmVuZGVyZXIsIFJlbmRlcmluZ0dyb3VwLCBS
ZW5kZXJpbmdHcm91cEluZm8sIFJlbmRlcmluZ01hbmFnZXIsIFV0aWxpdHlMYXllclJlbmRlcmVy
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYm91bmRpbmdC
b3hSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9ib3VuZGluZ0JveFJlbmRlcmVyICovICIuL1JlbmRlcmluZy9ib3VuZGluZ0Jv
eFJlbmRlcmVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJvdW5kaW5nQm94UmVuZGVyZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9ib3VuZGluZ0JveFJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkJvdW5kaW5nQm94UmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfZGVwdGhSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kZXB0aFJlbmRlcmVyICovICIuL1JlbmRlcmluZy9k
ZXB0aFJlbmRlcmVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoUmVuZGVyZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9kZXB0aFJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkRlcHRoUmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVw
dGhSZW5kZXJlclNjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2RlcHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudCAqLyAi
Li9SZW5kZXJpbmcvZGVwdGhSZW5kZXJlclNjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkRlcHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X2RlcHRoUmVuZGVyZXJTY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJEZXB0aFJlbmRlcmVyU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfZWRnZXNSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9lZGdlc1JlbmRlcmVyICovICIuL1JlbmRlcmluZy9lZGdl
c1JlbmRlcmVyLnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVkZ2VzUmVuZGVyZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9lZGdlc1JlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
IkVkZ2VzUmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGluZUVkZ2VzUmVuZGVy
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9lZGdlc1JlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIkxpbmVFZGdlc1JlbmRlcmVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2dlb21ldHJ5QnVmZmVyUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZ2VvbWV0cnlCdWZmZXJSZW5kZXJlciAq
LyAiLi9SZW5kZXJpbmcvZ2VvbWV0cnlCdWZmZXJSZW5kZXJlci50cyIpOworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfZ2VvbWV0
cnlCdWZmZXJSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJHZW9tZXRyeUJ1
ZmZlclJlbmRlcmVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2dlb21ldHJ5
QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyU2NlbmVD
b21wb25lbnQgKi8gIi4vUmVuZGVyaW5nL2dlb21ldHJ5QnVmZmVyUmVuZGVyZXJTY2VuZUNvbXBv
bmVudC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyU2NlbmVD
b21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9nZW9tZXRyeUJ1ZmZlclJlbmRlcmVyU2Nl
bmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siR2VvbWV0cnlCdWZmZXJS
ZW5kZXJlclNjZW5lQ29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X291dGxpbmVSZW5kZXJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9vdXRsaW5lUmVuZGVyZXIgKi8gIi4vUmVuZGVyaW5nL291dGxpbmVS
ZW5kZXJlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPdXRsaW5lUmVuZGVyZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9vdXRsaW5lUmVuZGVyZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siT3V0bGluZVJlbmRlcmVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Jl
bmRlcmluZ0dyb3VwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL3JlbmRlcmluZ0dyb3VwICovICIuL1JlbmRlcmluZy9yZW5kZXJpbmdHcm91
cC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJpbmdHcm91cCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX3JlbmRlcmluZ0dyb3VwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlJlbmRl
cmluZ0dyb3VwIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3JlbmRlcmluZ01h
bmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vcmVuZGVyaW5nTWFuYWdlciAqLyAiLi9SZW5kZXJpbmcvcmVuZGVyaW5nTWFuYWdlci50
cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJpbmdHcm91cEluZm8iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9yZW5kZXJpbmdNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIlJl
bmRlcmluZ0dyb3VwSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJpbmdNYW5h
Z2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfcmVuZGVyaW5nTWFuYWdlcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfOF9fWyJSZW5kZXJpbmdNYW5hZ2VyIl07IH0pOworCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX3V0aWxpdHlMYXllclJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWxpdHlMYXllclJlbmRlcmVyICov
ICIuL1JlbmRlcmluZy91dGlsaXR5TGF5ZXJSZW5kZXJlci50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJVdGlsaXR5TGF5ZXJSZW5kZXJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3V0aWxpdHlMYXll
clJlbmRlcmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19bIlV0aWxpdHlMYXllclJlbmRl
cmVyIl07IH0pOworCisKKworCisKKworCisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vUmVuZGVyaW5nL291dGxpbmVSZW5kZXJlci50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vUmVuZGVyaW5nL291dGxpbmVSZW5kZXJl
ci50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBPdXRsaW5lUmVuZGVyZXIgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiT3V0bGluZVJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBP
dXRsaW5lUmVuZGVyZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi9NZXNoZXMvYnVmZmVyICovICIuL01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWVzaGVzL2Fic3RyYWN0TWVzaCAq
LyAiLi9NZXNoZXMvYWJzdHJhY3RNZXNoLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25z
dGFudHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Nj
ZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL21hdGVyaWFsICovICIuL01h
dGVyaWFscy9tYXRlcmlhbC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlh
bHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9tYXRlcmlhbEhlbHBlciAqLyAiLi9NYXRlcmlh
bHMvbWF0ZXJpYWxIZWxwZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVy
c19vdXRsaW5lX2ZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi9TaGFkZXJzL291dGxpbmUuZnJhZ21lbnQgKi8gIi4vU2hhZGVy
cy9vdXRsaW5lLmZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRl
cnNfb3V0bGluZV92ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL1NoYWRlcnMvb3V0bGluZS52ZXJ0ZXggKi8gIi4vU2hhZGVycy9v
dXRsaW5lLnZlcnRleC50cyIpOworCisKKworCisKKworCisKKworLyoqCisgKiBHZXRzIHRoZSBv
dXRsaW5lIHJlbmRlcmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NlbmUKKyAqIEByZXR1cm5zIGEg
T3V0bGluZVJlbmRlcmVyCisgKi8KK19zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJTY2VuZSJdLnByb3RvdHlwZS5nZXRPdXRsaW5lUmVuZGVyZXIgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgaWYgKCF0aGlzLl9vdXRsaW5lUmVuZGVyZXIpIHsKKyAgICAgICAgdGhpcy5fb3V0bGluZVJl
bmRlcmVyID0gbmV3IE91dGxpbmVSZW5kZXJlcih0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuIHRo
aXMuX291dGxpbmVSZW5kZXJlcjsKK307CitPYmplY3QuZGVmaW5lUHJvcGVydHkoX01lc2hlc19h
YnN0cmFjdE1lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJzdHJhY3RNZXNoIl0u
cHJvdG90eXBlLCAicmVuZGVyT3V0bGluZSIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlck91dGxpbmU7CisgICAgfSwKKyAgICBzZXQ6IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIC8vIExhenkg
TG9hZCB0aGUgY29tcG9uZW50LgorICAgICAgICAgICAgdGhpcy5nZXRTY2VuZSgpLmdldE91dGxp
bmVSZW5kZXJlcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3JlbmRlck91dGxpbmUgPSB2
YWx1ZTsKKyAgICB9LAorICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgY29uZmlndXJhYmxlOiB0
cnVlCit9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdE1lc2giXS5wcm90b3R5cGUsICJyZW5k
ZXJPdmVybGF5IiwgeworICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5fcmVuZGVyT3ZlcmxheTsKKyAgICB9LAorICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgLy8gTGF6eSBMb2FkIHRoZSBjb21wb25l
bnQuCisgICAgICAgICAgICB0aGlzLmdldFNjZW5lKCkuZ2V0T3V0bGluZVJlbmRlcmVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVuZGVyT3ZlcmxheSA9IHZhbHVlOworICAgIH0sCisg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRydWUKK30pOworLyoqCisg
KiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIHRvIGRyYXcgYm90aGUgb3V0bGluZS9vdmVybGF5
IG9mIG1lc2hlcy4KKyAqIEl0IHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseSBidXQgdGhyb3Vn
aCB0aGUgYXZhaWxhYmxlIG1ldGhvZCBvbiBtZXNoLgorICovCit2YXIgT3V0bGluZVJlbmRlcmVy
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIEluc3RhbnRp
YXRlcyBhIG5ldyBvdXRsaW5lIHJlbmRlcmVyLiAoVGhlcmUgY291bGQgYmUgb25seSBvbmUgcGVy
IHNjZW5lKS4KKyAgICAgKiBAcGFyYW0gc2NlbmUgRGVmaW5lcyB0aGUgc2NlbmUgaXQgYmVsb25n
cyB0bworICAgICAqLworICAgIGZ1bmN0aW9uIE91dGxpbmVSZW5kZXJlcihzY2VuZSkgeworICAg
ICAgICAvKioKKyAgICAgICAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudC4gRWFjaCBjb21w
b25lbnQgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuCisgICAgICAgICAqLworICAgICAgICB0aGlz
Lm5hbWUgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2Nl
bmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX09VVExJTkVSRU5ERVJFUjsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIERlZmluZXMgYSB6T2Zmc2V0IHRvIHByZXZlbnQgekZpZ2h0aW5nIGJldHdl
ZW4gdGhlIG92ZXJsYXkgYW5kIHRoZSBtZXNoLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy56
T2Zmc2V0ID0gMTsKKyAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9l
bmdpbmUgPSBzY2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgdGhpcy5zY2VuZS5fYWRkQ29tcG9u
ZW50KHRoaXMpOworICAgIH0KKyAgICAvKioKKyAgICAgKiBSZWdpc3RlciB0aGUgY29tcG9uZW50
IHRvIG9uZSBpbnN0YW5jZSBvZiBhIHNjZW5lLgorICAgICAqLworICAgIE91dGxpbmVSZW5kZXJl
ci5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuc2NlbmUu
X2JlZm9yZVJlbmRlcmluZ01lc2hTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RF
UF9CRUZPUkVSRU5ERVJJTkdNRVNIX09VVExJTkUsIHRoaXMsIHRoaXMuX2JlZm9yZVJlbmRlcmlu
Z01lc2gpOworICAgICAgICB0aGlzLnNjZW5lLl9hZnRlclJlbmRlcmluZ01lc2hTdGFnZS5yZWdp
c3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNj
ZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9BRlRFUlJFTkRFUklOR01FU0hfT1VUTElORSwg
dGhpcywgdGhpcy5fYWZ0ZXJSZW5kZXJpbmdNZXNoKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IFJlYnVpbGRzIHRoZSBlbGVtZW50cyByZWxhdGVkIHRvIHRoaXMgY29tcG9uZW50IGluIGNhc2Ug
b2YKKyAgICAgKiBjb250ZXh0IGxvc3QgZm9yIGluc3RhbmNlLgorICAgICAqLworICAgIE91dGxp
bmVSZW5kZXJlci5wcm90b3R5cGUucmVidWlsZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8g
Tm90aGluZyB0byBkbyBoZXJlLgorICAgIH07CisgICAgLyoqCisgICAgICogRGlzcG9zZXMgdGhl
IGNvbXBvbmVudCBhbmQgdGhlIGFzc29jaWF0ZWQgcmVzc291cmNlcy4KKyAgICAgKi8KKyAgICBP
dXRsaW5lUmVuZGVyZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbmRlcnMg
dGhlIG91dGxpbmUgaW4gdGhlIGNhbnZhcy4KKyAgICAgKiBAcGFyYW0gc3ViTWVzaCBEZWZpbmVz
IHRoZSBzdW1lc2ggdG8gcmVuZGVyCisgICAgICogQHBhcmFtIGJhdGNoIERlZmluZXMgdGhlIGJh
dGNoIG9mIG1lc2hlcyBpbiBjYXNlIG9mIGluc3RhbmNlcworICAgICAqIEBwYXJhbSB1c2VPdmVy
bGF5IERlZmluZXMgaWYgdGhlIHJlbmRlcmluZyBpcyBmb3IgdGhlIG92ZXJsYXkgb3IgdGhlIG91
dGxpbmUKKyAgICAgKi8KKyAgICBPdXRsaW5lUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1
bmN0aW9uIChzdWJNZXNoLCBiYXRjaCwgdXNlT3ZlcmxheSkgeworICAgICAgICB2YXIgX3RoaXMg
PSB0aGlzOworICAgICAgICBpZiAodXNlT3ZlcmxheSA9PT0gdm9pZCAwKSB7IHVzZU92ZXJsYXkg
PSBmYWxzZTsgfQorICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lOworICAgICAgICB2YXIg
ZW5naW5lID0gc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIHZhciBoYXJkd2FyZUluc3RhbmNl
ZFJlbmRlcmluZyA9IChlbmdpbmUuZ2V0Q2FwcygpLmluc3RhbmNlZEFycmF5cykgJiYgKGJhdGNo
LnZpc2libGVJbnN0YW5jZXNbc3ViTWVzaC5faWRdICE9PSBudWxsKSAmJiAoYmF0Y2gudmlzaWJs
ZUluc3RhbmNlc1tzdWJNZXNoLl9pZF0gIT09IHVuZGVmaW5lZCk7CisgICAgICAgIGlmICghdGhp
cy5pc1JlYWR5KHN1Yk1lc2gsIGhhcmR3YXJlSW5zdGFuY2VkUmVuZGVyaW5nKSkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBtZXNoID0gc3ViTWVzaC5nZXRS
ZW5kZXJpbmdNZXNoKCk7CisgICAgICAgIHZhciBtYXRlcmlhbCA9IHN1Yk1lc2guZ2V0TWF0ZXJp
YWwoKTsKKyAgICAgICAgaWYgKCFtYXRlcmlhbCB8fCAhc2NlbmUuYWN0aXZlQ2FtZXJhKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZW5naW5lLmVuYWJsZUVmZmVj
dCh0aGlzLl9lZmZlY3QpOworICAgICAgICAvLyBMb2dhcml0aG1pYyBkZXB0aAorICAgICAgICBp
ZiAobWF0ZXJpYWwudXNlTG9nYXJpdGhtaWNEZXB0aCkgeworICAgICAgICAgICAgdGhpcy5fZWZm
ZWN0LnNldEZsb2F0KCJsb2dhcml0aG1pY0RlcHRoQ29uc3RhbnQiLCAyLjAgLyAoTWF0aC5sb2co
c2NlbmUuYWN0aXZlQ2FtZXJhLm1heFogKyAxLjApIC8gTWF0aC5MTjIpKTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9lZmZlY3Quc2V0RmxvYXQoIm9mZnNldCIsIHVzZU92ZXJsYXkgPyAwIDog
bWVzaC5vdXRsaW5lV2lkdGgpOworICAgICAgICB0aGlzLl9lZmZlY3Quc2V0Q29sb3I0KCJjb2xv
ciIsIHVzZU92ZXJsYXkgPyBtZXNoLm92ZXJsYXlDb2xvciA6IG1lc2gub3V0bGluZUNvbG9yLCB1
c2VPdmVybGF5ID8gbWVzaC5vdmVybGF5QWxwaGEgOiBtYXRlcmlhbC5hbHBoYSk7CisgICAgICAg
IHRoaXMuX2VmZmVjdC5zZXRNYXRyaXgoInZpZXdQcm9qZWN0aW9uIiwgc2NlbmUuZ2V0VHJhbnNm
b3JtTWF0cml4KCkpOworICAgICAgICAvLyBCb25lcworICAgICAgICBpZiAobWVzaC51c2VCb25l
cyAmJiBtZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycyAmJiBtZXNoLnNrZWxldG9uKSB7Cisg
ICAgICAgICAgICB0aGlzLl9lZmZlY3Quc2V0TWF0cmljZXMoIm1Cb25lcyIsIG1lc2guc2tlbGV0
b24uZ2V0VHJhbnNmb3JtTWF0cmljZXMobWVzaCkpOworICAgICAgICB9CisgICAgICAgIC8vIE1v
cnBoIHRhcmdldHMKKyAgICAgICAgX01hdGVyaWFsc19tYXRlcmlhbEhlbHBlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fWyJNYXRlcmlhbEhlbHBlciJdLkJpbmRNb3JwaFRhcmdldFBhcmFt
ZXRlcnMobWVzaCwgdGhpcy5fZWZmZWN0KTsKKyAgICAgICAgbWVzaC5fYmluZChzdWJNZXNoLCB0
aGlzLl9lZmZlY3QsIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siTWF0ZXJpYWwiXS5UcmlhbmdsZUZpbGxNb2RlKTsKKyAgICAgICAgLy8gQWxwaGEgdGVz
dAorICAgICAgICBpZiAobWF0ZXJpYWwgJiYgbWF0ZXJpYWwubmVlZEFscGhhVGVzdGluZygpKSB7
CisgICAgICAgICAgICB2YXIgYWxwaGFUZXh0dXJlID0gbWF0ZXJpYWwuZ2V0QWxwaGFUZXN0VGV4
dHVyZSgpOworICAgICAgICAgICAgaWYgKGFscGhhVGV4dHVyZSkgeworICAgICAgICAgICAgICAg
IHRoaXMuX2VmZmVjdC5zZXRUZXh0dXJlKCJkaWZmdXNlU2FtcGxlciIsIGFscGhhVGV4dHVyZSk7
CisgICAgICAgICAgICAgICAgdGhpcy5fZWZmZWN0LnNldE1hdHJpeCgiZGlmZnVzZU1hdHJpeCIs
IGFscGhhVGV4dHVyZS5nZXRUZXh0dXJlTWF0cml4KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVuZ2luZS5zZXRaT2Zmc2V0KC10aGlzLnpPZmZzZXQpOworICAgICAgICBt
ZXNoLl9wcm9jZXNzUmVuZGVyaW5nKHN1Yk1lc2gsIHRoaXMuX2VmZmVjdCwgX01hdGVyaWFsc19t
YXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJNYXRlcmlhbCJdLlRyaWFuZ2xl
RmlsbE1vZGUsIGJhdGNoLCBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZywgZnVuY3Rpb24gKGlz
SW5zdGFuY2UsIHdvcmxkKSB7IF90aGlzLl9lZmZlY3Quc2V0TWF0cml4KCJ3b3JsZCIsIHdvcmxk
KTsgfSk7CisgICAgICAgIGVuZ2luZS5zZXRaT2Zmc2V0KDApOworICAgIH07CisgICAgLyoqCisg
ICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgb3V0bGluZSByZW5kZXJlciBpcyByZWFk
eSBmb3IgYSBnaXZlbiBzdWJtZXNoLgorICAgICAqIEFsbCB0aGUgZGVwZW5kZW5jaWVzIGUuZy4g
c3VibWVzaGVzLCB0ZXh0dXJlLCBlZmZlY3QuLi4gbXVzIGJlIHJlYWR5CisgICAgICogQHBhcmFt
IHN1Yk1lc2ggRGVmaW5lcyB0aGUgc3VibWVzaCB0byBjaGVjayByZWFkeW5lc3MgZm9yCisgICAg
ICogQHBhcmFtIHVzZUluc3RhbmNlcyBEZWZpbmVzIHdoZXRlciB3ZWUgYXJlIHRyeWluZyB0byBy
ZW5kZXIgaW5zdGFuY2VzIG9yIG5vdAorICAgICAqIEByZXR1cm5zIHRydWUgaWYgcmVhZHkgb3Ro
ZXJ3aXNlIGZhbHNlCisgICAgICovCisgICAgT3V0bGluZVJlbmRlcmVyLnByb3RvdHlwZS5pc1Jl
YWR5ID0gZnVuY3Rpb24gKHN1Yk1lc2gsIHVzZUluc3RhbmNlcykgeworICAgICAgICB2YXIgZGVm
aW5lcyA9IFtdOworICAgICAgICB2YXIgYXR0cmlicyA9IFtfTWVzaGVzX2J1ZmZlcl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJWZXJ0ZXhCdWZmZXIiXS5Qb3NpdGlvbktpbmQsIF9NZXNo
ZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZlcnRleEJ1ZmZlciJdLk5v
cm1hbEtpbmRdOworICAgICAgICB2YXIgbWVzaCA9IHN1Yk1lc2guZ2V0TWVzaCgpOworICAgICAg
ICB2YXIgbWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7CisgICAgICAgIGlmIChtYXRl
cmlhbCkgeworICAgICAgICAgICAgLy8gQWxwaGEgdGVzdAorICAgICAgICAgICAgaWYgKG1hdGVy
aWFsLm5lZWRBbHBoYVRlc3RpbmcoKSkgeworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgi
I2RlZmluZSBBTFBIQVRFU1QiKTsKKyAgICAgICAgICAgICAgICBpZiAobWVzaC5pc1ZlcnRpY2Vz
RGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVydGV4QnVmZmVyIl0uVVZLaW5kKSkgeworICAgICAgICAgICAgICAgICAgICBhdHRyaWJzLnB1
c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVydGV4QnVm
ZmVyIl0uVVZLaW5kKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5l
IFVWMSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobWVzaC5pc1Zl
cnRpY2VzRGF0YVByZXNlbnQoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siVmVydGV4QnVmZmVyIl0uVVYyS2luZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXR0
cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlZl
cnRleEJ1ZmZlciJdLlVWMktpbmQpOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2go
IiNkZWZpbmUgVVYyIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy9Mb2dhcml0aG1pYyBkZXB0aAorICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnVzZUxv
Z2FyaXRobWljRGVwdGgpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUg
TE9HQVJJVEhNSUNERVBUSCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8v
IEJvbmVzCisgICAgICAgIGlmIChtZXNoLnVzZUJvbmVzICYmIG1lc2guY29tcHV0ZUJvbmVzVXNp
bmdTaGFkZXJzKSB7CisgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNJbmRpY2Vz
S2luZCk7CisgICAgICAgICAgICBhdHRyaWJzLnB1c2goX01lc2hlc19idWZmZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siVmVydGV4QnVmZmVyIl0uTWF0cmljZXNXZWlnaHRzS2luZCk7
CisgICAgICAgICAgICBpZiAobWVzaC5udW1Cb25lSW5mbHVlbmNlcnMgPiA0KSB7CisgICAgICAg
ICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzSW5kaWNlc0V4dHJhS2luZCk7CisgICAg
ICAgICAgICAgICAgYXR0cmlicy5wdXNoKF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlZlcnRleEJ1ZmZlciJdLk1hdHJpY2VzV2VpZ2h0c0V4dHJhS2luZCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgTlVNX0JPTkVf
SU5GTFVFTkNFUlMgIiArIG1lc2gubnVtQm9uZUluZmx1ZW5jZXJzKTsKKyAgICAgICAgICAgIGRl
ZmluZXMucHVzaCgiI2RlZmluZSBCb25lc1Blck1lc2ggIiArIChtZXNoLnNrZWxldG9uID8gbWVz
aC5za2VsZXRvbi5ib25lcy5sZW5ndGggKyAxIDogMCkpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIjZGVmaW5lIE5VTV9CT05FX0lORkxVRU5D
RVJTIDAiKTsKKyAgICAgICAgfQorICAgICAgICAvLyBNb3JwaCB0YXJnZXRzCisgICAgICAgIHZh
ciBtb3JwaFRhcmdldE1hbmFnZXIgPSBtZXNoLm1vcnBoVGFyZ2V0TWFuYWdlcjsKKyAgICAgICAg
dmFyIG51bU1vcnBoSW5mbHVlbmNlcnMgPSAwOworICAgICAgICBpZiAobW9ycGhUYXJnZXRNYW5h
Z2VyKSB7CisgICAgICAgICAgICBpZiAobW9ycGhUYXJnZXRNYW5hZ2VyLm51bUluZmx1ZW5jZXJz
ID4gMCkgeworICAgICAgICAgICAgICAgIG51bU1vcnBoSW5mbHVlbmNlcnMgPSBtb3JwaFRhcmdl
dE1hbmFnZXIubnVtSW5mbHVlbmNlcnM7CisgICAgICAgICAgICAgICAgZGVmaW5lcy5wdXNoKCIj
ZGVmaW5lIE1PUlBIVEFSR0VUUyIpOworICAgICAgICAgICAgICAgIGRlZmluZXMucHVzaCgiI2Rl
ZmluZSBOVU1fTU9SUEhfSU5GTFVFTkNFUlMgIiArIG51bU1vcnBoSW5mbHVlbmNlcnMpOworICAg
ICAgICAgICAgICAgIF9NYXRlcmlhbHNfbWF0ZXJpYWxIZWxwZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfX1siTWF0ZXJpYWxIZWxwZXIiXS5QcmVwYXJlQXR0cmlidXRlc0Zvck1vcnBoVGFy
Z2V0c0luZmx1ZW5jZXJzKGF0dHJpYnMsIG1lc2gsIG51bU1vcnBoSW5mbHVlbmNlcnMpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEluc3RhbmNlcworICAgICAgICBpZiAo
dXNlSW5zdGFuY2VzKSB7CisgICAgICAgICAgICBkZWZpbmVzLnB1c2goIiNkZWZpbmUgSU5TVEFO
Q0VTIik7CisgICAgICAgICAgICBfTWF0ZXJpYWxzX21hdGVyaWFsSGVscGVyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV82X19bIk1hdGVyaWFsSGVscGVyIl0uUHVzaEF0dHJpYnV0ZXNGb3JJbnN0
YW5jZXMoYXR0cmlicyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gR2V0IGNvcnJlY3QgZWZmZWN0
CisgICAgICAgIHZhciBqb2luID0gZGVmaW5lcy5qb2luKCJcbiIpOworICAgICAgICBpZiAodGhp
cy5fY2FjaGVkRGVmaW5lcyAhPT0gam9pbikgeworICAgICAgICAgICAgdGhpcy5fY2FjaGVkRGVm
aW5lcyA9IGpvaW47CisgICAgICAgICAgICB0aGlzLl9lZmZlY3QgPSB0aGlzLnNjZW5lLmdldEVu
Z2luZSgpLmNyZWF0ZUVmZmVjdCgib3V0bGluZSIsIGF0dHJpYnMsIFsid29ybGQiLCAibUJvbmVz
IiwgInZpZXdQcm9qZWN0aW9uIiwgImRpZmZ1c2VNYXRyaXgiLCAib2Zmc2V0IiwgImNvbG9yIiwg
ImxvZ2FyaXRobWljRGVwdGhDb25zdGFudCIsICJtb3JwaFRhcmdldEluZmx1ZW5jZXMiXSwgWyJk
aWZmdXNlU2FtcGxlciJdLCBqb2luLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7
IG1heFNpbXVsdGFuZW91c01vcnBoVGFyZ2V0czogbnVtTW9ycGhJbmZsdWVuY2VycyB9KTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fZWZmZWN0LmlzUmVhZHkoKTsKKyAgICB9Owor
ICAgIE91dGxpbmVSZW5kZXJlci5wcm90b3R5cGUuX2JlZm9yZVJlbmRlcmluZ01lc2ggPSBmdW5j
dGlvbiAobWVzaCwgc3ViTWVzaCwgYmF0Y2gpIHsKKyAgICAgICAgLy8gT3V0bGluZSAtIHN0ZXAg
MQorICAgICAgICB0aGlzLl9zYXZlZERlcHRoV3JpdGUgPSB0aGlzLl9lbmdpbmUuZ2V0RGVwdGhX
cml0ZSgpOworICAgICAgICBpZiAobWVzaC5yZW5kZXJPdXRsaW5lKSB7CisgICAgICAgICAgICB2
YXIgbWF0ZXJpYWwgPSBzdWJNZXNoLmdldE1hdGVyaWFsKCk7CisgICAgICAgICAgICBpZiAobWF0
ZXJpYWwgJiYgbWF0ZXJpYWwubmVlZEFscGhhQmxlbmRpbmcoKSkgeworICAgICAgICAgICAgICAg
IHRoaXMuX2VuZ2luZS5jYWNoZVN0ZW5jaWxTdGF0ZSgpOworICAgICAgICAgICAgICAgIC8vIERy
YXcgb25seSB0byBzdGVuY2lsIGJ1ZmZlciBmb3IgdGhlIG9yaWdpbmFsIG1lc2gKKyAgICAgICAg
ICAgICAgICAvLyBUaGUgcmVzdWx0aW5nIHN0ZW5jaWwgYnVmZmVyIHdpbGwgYmUgdXNlZCBzbyB0
aGUgb3V0bGluZSBpcyBub3QgdmlzaWJsZSBpbnNpZGUgdGhlIG1lc2ggd2hlbiB0aGUgbWVzaCBp
cyB0cmFuc3BhcmVudAorICAgICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5zZXREZXB0aFdyaXRl
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0Q29sb3JXcml0ZShmYWxz
ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5fZW5naW5lLnNldFN0ZW5jaWxCdWZmZXIodHJ1ZSk7
CisgICAgICAgICAgICAgICAgdGhpcy5fZW5naW5lLnNldFN0ZW5jaWxPcGVyYXRpb25QYXNzKF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25zdGFudHMi
XS5SRVBMQUNFKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0U3RlbmNpbEZ1bmN0
aW9uKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJDb25z
dGFudHMiXS5BTFdBWVMpOworICAgICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5zZXRTdGVuY2ls
TWFzayhPdXRsaW5lUmVuZGVyZXIuX1N0ZW5jaWxSZWZlcmVuY2UpOworICAgICAgICAgICAgICAg
IHRoaXMuX2VuZ2luZS5zZXRTdGVuY2lsRnVuY3Rpb25SZWZlcmVuY2UoT3V0bGluZVJlbmRlcmVy
Ll9TdGVuY2lsUmVmZXJlbmNlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcihzdWJNZXNo
LCBiYXRjaCwgLyogVGhpcyBzZXRzIG9mZnNldCB0byAwICovIHRydWUpOworICAgICAgICAgICAg
ICAgIHRoaXMuX2VuZ2luZS5zZXRDb2xvcldyaXRlKHRydWUpOworICAgICAgICAgICAgICAgIHRo
aXMuX2VuZ2luZS5zZXRTdGVuY2lsRnVuY3Rpb24oX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIkNvbnN0YW50cyJdLk5PVEVRVUFMKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIERyYXcgdGhlIG91dGxpbmUgdXNpbmcgdGhlIGFib3ZlIHN0ZW5j
aWwgaWYgbmVlZGVkIHRvIGF2b2lkIGRyYXdpbmcgd2l0aGluIHRoZSBtZXNoCisgICAgICAgICAg
ICB0aGlzLl9lbmdpbmUuc2V0RGVwdGhXcml0ZShmYWxzZSk7CisgICAgICAgICAgICB0aGlzLnJl
bmRlcihzdWJNZXNoLCBiYXRjaCk7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0RGVwdGhX
cml0ZSh0aGlzLl9zYXZlZERlcHRoV3JpdGUpOworICAgICAgICAgICAgaWYgKG1hdGVyaWFsICYm
IG1hdGVyaWFsLm5lZWRBbHBoYUJsZW5kaW5nKCkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9l
bmdpbmUucmVzdG9yZVN0ZW5jaWxTdGF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKyAgICBPdXRsaW5lUmVuZGVyZXIucHJvdG90eXBlLl9hZnRlclJlbmRlcmluZ01lc2gg
PSBmdW5jdGlvbiAobWVzaCwgc3ViTWVzaCwgYmF0Y2gpIHsKKyAgICAgICAgLy8gT3ZlcmxheQor
ICAgICAgICBpZiAobWVzaC5yZW5kZXJPdmVybGF5KSB7CisgICAgICAgICAgICB2YXIgY3VycmVu
dE1vZGUgPSB0aGlzLl9lbmdpbmUuZ2V0QWxwaGFNb2RlKCk7CisgICAgICAgICAgICB0aGlzLl9l
bmdpbmUuc2V0QWxwaGFNb2RlKF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJDb25zdGFudHMiXS5BTFBIQV9DT01CSU5FKTsKKyAgICAgICAgICAgIHRoaXMu
cmVuZGVyKHN1Yk1lc2gsIGJhdGNoLCB0cnVlKTsKKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5z
ZXRBbHBoYU1vZGUoY3VycmVudE1vZGUpOworICAgICAgICB9CisgICAgICAgIC8vIE91dGxpbmUg
LSBzdGVwIDIKKyAgICAgICAgaWYgKG1lc2gucmVuZGVyT3V0bGluZSAmJiB0aGlzLl9zYXZlZERl
cHRoV3JpdGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5zZXREZXB0aFdyaXRlKHRydWUp
OworICAgICAgICAgICAgdGhpcy5fZW5naW5lLnNldENvbG9yV3JpdGUoZmFsc2UpOworICAgICAg
ICAgICAgdGhpcy5yZW5kZXIoc3ViTWVzaCwgYmF0Y2gpOworICAgICAgICAgICAgdGhpcy5fZW5n
aW5lLnNldENvbG9yV3JpdGUodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIFN0ZW5jaWwgdmFsdWUgdXNlZCB0byBhdm9pZCBvdXRsaW5lIGJlaW5nIHNlZW4gd2l0aGlu
IHRoZSBtZXNoIHdoZW4gdGhlIG1lc2ggaXMgdHJhbnNwYXJlbnQKKyAgICAgKi8KKyAgICBPdXRs
aW5lUmVuZGVyZXIuX1N0ZW5jaWxSZWZlcmVuY2UgPSAweDA0OworICAgIHJldHVybiBPdXRsaW5l
UmVuZGVyZXI7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1JlbmRlcmluZy9y
ZW5kZXJpbmdHcm91cC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9SZW5kZXJpbmcvcmVuZGVyaW5nR3JvdXAudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBSZW5kZXJpbmdHcm91cCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJS
ZW5kZXJpbmdHcm91cCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUmVuZGVyaW5nR3JvdXA7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvc21hcnRBcnJh
eSAqLyAiLi9NaXNjL3NtYXJ0QXJyYXkudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVj
dG9yLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9F
bmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworCisKKworLyoq
CisgKiBUaGlzIHJlcHJlc2VudHMgdGhlIG9iamVjdCBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgcmVu
ZGVyaW5nIGdyb3VwLgorICogVGhpcyBpcyBleGNsdXNpdmVseSB1c2VkIGFuZCBjcmVhdGVkIGJ5
IHRoZSByZW5kZXJpbmcgbWFuYWdlci4KKyAqIFRvIG1vZGlmeSB0aGUgYmVoYXZpb3IsIHlvdSB1
c2UgdGhlIGF2YWlsYWJsZSBoZWxwZXJzIGluIHlvdXIgc2NlbmUgb3IgbWVzaGVzLgorICogQGhp
ZGRlbgorICovCit2YXIgUmVuZGVyaW5nR3JvdXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyByZW5kZXJpbmcgZ3JvdXAuCisgICAg
ICogQHBhcmFtIGluZGV4IFRoZSByZW5kZXJpbmcgZ3JvdXAgaW5kZXgKKyAgICAgKiBAcGFyYW0g
b3BhcXVlU29ydENvbXBhcmVGbiBUaGUgb3BhcXVlIHNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbi4g
SWYgbnVsbCBubyBvcmRlciBpcyBhcHBsaWVkCisgICAgICogQHBhcmFtIGFscGhhVGVzdFNvcnRD
b21wYXJlRm4gVGhlIGFscGhhIHRlc3Qgc29ydCBjb21wYXJpc29uIGZ1bmN0aW9uLiBJZiBudWxs
IG5vIG9yZGVyIGlzIGFwcGxpZWQKKyAgICAgKiBAcGFyYW0gdHJhbnNwYXJlbnRTb3J0Q29tcGFy
ZUZuIFRoZSB0cmFuc3BhcmVudCBzb3J0IGNvbXBhcmlzb24gZnVuY3Rpb24uIElmIG51bGwgYmFj
ayB0byBmcm9udCArIGFscGhhIGluZGV4IHNvcnQgaXMgYXBwbGllZAorICAgICAqLworICAgIGZ1
bmN0aW9uIFJlbmRlcmluZ0dyb3VwKGluZGV4LCBzY2VuZSwgb3BhcXVlU29ydENvbXBhcmVGbiwg
YWxwaGFUZXN0U29ydENvbXBhcmVGbiwgdHJhbnNwYXJlbnRTb3J0Q29tcGFyZUZuKSB7CisgICAg
ICAgIGlmIChvcGFxdWVTb3J0Q29tcGFyZUZuID09PSB2b2lkIDApIHsgb3BhcXVlU29ydENvbXBh
cmVGbiA9IG51bGw7IH0KKyAgICAgICAgaWYgKGFscGhhVGVzdFNvcnRDb21wYXJlRm4gPT09IHZv
aWQgMCkgeyBhbHBoYVRlc3RTb3J0Q29tcGFyZUZuID0gbnVsbDsgfQorICAgICAgICBpZiAodHJh
bnNwYXJlbnRTb3J0Q29tcGFyZUZuID09PSB2b2lkIDApIHsgdHJhbnNwYXJlbnRTb3J0Q29tcGFy
ZUZuID0gbnVsbDsgfQorICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7CisgICAgICAgIHRoaXMu
X29wYXF1ZVN1Yk1lc2hlcyA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlNtYXJ0QXJyYXkiXSgyNTYpOworICAgICAgICB0aGlzLl90cmFuc3BhcmVu
dFN1Yk1lc2hlcyA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIlNtYXJ0QXJyYXkiXSgyNTYpOworICAgICAgICB0aGlzLl9hbHBoYVRlc3RTdWJNZXNo
ZXMgPSBuZXcgX01pc2Nfc21hcnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJT
bWFydEFycmF5Il0oMjU2KTsKKyAgICAgICAgdGhpcy5fZGVwdGhPbmx5U3ViTWVzaGVzID0gbmV3
IF9NaXNjX3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siU21hcnRBcnJh
eSJdKDI1Nik7CisgICAgICAgIHRoaXMuX3BhcnRpY2xlU3lzdGVtcyA9IG5ldyBfTWlzY19zbWFy
dEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNtYXJ0QXJyYXkiXSgyNTYpOwor
ICAgICAgICB0aGlzLl9zcHJpdGVNYW5hZ2VycyA9IG5ldyBfTWlzY19zbWFydEFycmF5X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNtYXJ0QXJyYXkiXSgyNTYpOworICAgICAgICAvKiog
QGhpZGRlbiAqLworICAgICAgICB0aGlzLl9lZGdlc1JlbmRlcmVycyA9IG5ldyBfTWlzY19zbWFy
dEFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlNtYXJ0QXJyYXkiXSgxNik7Cisg
ICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7CisgICAgICAgIHRoaXMub3BhcXVlU29ydENvbXBh
cmVGbiA9IG9wYXF1ZVNvcnRDb21wYXJlRm47CisgICAgICAgIHRoaXMuYWxwaGFUZXN0U29ydENv
bXBhcmVGbiA9IGFscGhhVGVzdFNvcnRDb21wYXJlRm47CisgICAgICAgIHRoaXMudHJhbnNwYXJl
bnRTb3J0Q29tcGFyZUZuID0gdHJhbnNwYXJlbnRTb3J0Q29tcGFyZUZuOworICAgIH0KKyAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoUmVuZGVyaW5nR3JvdXAucHJvdG90eXBlLCAib3BhcXVlU29y
dENvbXBhcmVGbiIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldCB0aGUgb3BhcXVlIHNv
cnQgY29tcGFyaXNvbiBmdW5jdGlvbi4KKyAgICAgICAgICogSWYgbnVsbCB0aGUgc3ViIG1lc2hl
cyB3aWxsIGJlIHJlbmRlciBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGNyZWF0ZWQKKyAgICAgICAg
ICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9v
cGFxdWVTb3J0Q29tcGFyZUZuID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJPcGFxdWUgPSB0aGlzLnJlbmRlck9wYXF1ZVNvcnRl
ZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRo
aXMuX3JlbmRlck9wYXF1ZSA9IFJlbmRlcmluZ0dyb3VwLnJlbmRlclVuc29ydGVkOworICAgICAg
ICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVu
ZGVyaW5nR3JvdXAucHJvdG90eXBlLCAiYWxwaGFUZXN0U29ydENvbXBhcmVGbiIsIHsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFNldCB0aGUgYWxwaGEgdGVzdCBzb3J0IGNvbXBhcmlzb24gZnVu
Y3Rpb24uCisgICAgICAgICAqIElmIG51bGwgdGhlIHN1YiBtZXNoZXMgd2lsbCBiZSByZW5kZXIg
aW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBjcmVhdGVkCisgICAgICAgICAqLworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYWxwaGFUZXN0U29ydENvbXBh
cmVGbiA9IHZhbHVlOworICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fcmVuZGVyQWxwaGFUZXN0ID0gdGhpcy5yZW5kZXJBbHBoYVRlc3RTb3J0ZWQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZW5k
ZXJBbHBoYVRlc3QgPSBSZW5kZXJpbmdHcm91cC5yZW5kZXJVbnNvcnRlZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlbmRlcmlu
Z0dyb3VwLnByb3RvdHlwZSwgInRyYW5zcGFyZW50U29ydENvbXBhcmVGbiIsIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFNldCB0aGUgdHJhbnNwYXJlbnQgc29ydCBjb21wYXJpc29uIGZ1bmN0
aW9uLgorICAgICAgICAgKiBJZiBudWxsIHRoZSBzdWIgbWVzaGVzIHdpbGwgYmUgcmVuZGVyIGlu
IHRoZSBvcmRlciB0aGV5IHdlcmUgY3JlYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAg
ICAgIHRoaXMuX3RyYW5zcGFyZW50U29ydENvbXBhcmVGbiA9IHZhbHVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNwYXJlbnRT
b3J0Q29tcGFyZUZuID0gUmVuZGVyaW5nR3JvdXAuZGVmYXVsdFRyYW5zcGFyZW50U29ydENvbXBh
cmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJUcmFuc3BhcmVudCA9
IHRoaXMucmVuZGVyVHJhbnNwYXJlbnRTb3J0ZWQ7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8q
KgorICAgICAqIFJlbmRlciBhbGwgdGhlIHN1YiBtZXNoZXMgY29udGFpbmVkIGluIHRoZSBncm91
cC4KKyAgICAgKiBAcGFyYW0gY3VzdG9tUmVuZGVyRnVuY3Rpb24gVXNlZCB0byBvdmVycmlkZSB0
aGUgZGVmYXVsdCByZW5kZXIgYmVoYXZpb3VyIG9mIHRoZSBncm91cC4KKyAgICAgKiBAcmV0dXJu
cyB0cnVlIGlmIHJlbmRlcmVkIHNvbWUgc3VibWVzaGVzLgorICAgICAqLworICAgIFJlbmRlcmlu
Z0dyb3VwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY3VzdG9tUmVuZGVyRnVuY3Rpb24s
IHJlbmRlclNwcml0ZXMsIHJlbmRlclBhcnRpY2xlcywgYWN0aXZlTWVzaGVzKSB7CisgICAgICAg
IGlmIChjdXN0b21SZW5kZXJGdW5jdGlvbikgeworICAgICAgICAgICAgY3VzdG9tUmVuZGVyRnVu
Y3Rpb24odGhpcy5fb3BhcXVlU3ViTWVzaGVzLCB0aGlzLl9hbHBoYVRlc3RTdWJNZXNoZXMsIHRo
aXMuX3RyYW5zcGFyZW50U3ViTWVzaGVzLCB0aGlzLl9kZXB0aE9ubHlTdWJNZXNoZXMpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBlbmdpbmUgPSB0aGlzLl9z
Y2VuZS5nZXRFbmdpbmUoKTsKKyAgICAgICAgLy8gRGVwdGggb25seQorICAgICAgICBpZiAodGhp
cy5fZGVwdGhPbmx5U3ViTWVzaGVzLmxlbmd0aCAhPT0gMCkgeworICAgICAgICAgICAgZW5naW5l
LnNldENvbG9yV3JpdGUoZmFsc2UpOworICAgICAgICAgICAgdGhpcy5fcmVuZGVyQWxwaGFUZXN0
KHRoaXMuX2RlcHRoT25seVN1Yk1lc2hlcyk7CisgICAgICAgICAgICBlbmdpbmUuc2V0Q29sb3JX
cml0ZSh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBPcGFxdWUKKyAgICAgICAgaWYgKHRo
aXMuX29wYXF1ZVN1Yk1lc2hlcy5sZW5ndGggIT09IDApIHsKKyAgICAgICAgICAgIHRoaXMuX3Jl
bmRlck9wYXF1ZSh0aGlzLl9vcGFxdWVTdWJNZXNoZXMpOworICAgICAgICB9CisgICAgICAgIC8v
IEFscGhhIHRlc3QKKyAgICAgICAgaWYgKHRoaXMuX2FscGhhVGVzdFN1Yk1lc2hlcy5sZW5ndGgg
IT09IDApIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlckFscGhhVGVzdCh0aGlzLl9hbHBoYVRl
c3RTdWJNZXNoZXMpOworICAgICAgICB9CisgICAgICAgIHZhciBzdGVuY2lsU3RhdGUgPSBlbmdp
bmUuZ2V0U3RlbmNpbEJ1ZmZlcigpOworICAgICAgICBlbmdpbmUuc2V0U3RlbmNpbEJ1ZmZlcihm
YWxzZSk7CisgICAgICAgIC8vIFNwcml0ZXMKKyAgICAgICAgaWYgKHJlbmRlclNwcml0ZXMpIHsK
KyAgICAgICAgICAgIHRoaXMuX3JlbmRlclNwcml0ZXMoKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBQYXJ0aWNsZXMKKyAgICAgICAgaWYgKHJlbmRlclBhcnRpY2xlcykgeworICAgICAgICAgICAg
dGhpcy5fcmVuZGVyUGFydGljbGVzKGFjdGl2ZU1lc2hlcyk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMub25CZWZvcmVUcmFuc3BhcmVudFJlbmRlcmluZykgeworICAgICAgICAgICAgdGhp
cy5vbkJlZm9yZVRyYW5zcGFyZW50UmVuZGVyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8g
VHJhbnNwYXJlbnQKKyAgICAgICAgaWYgKHRoaXMuX3RyYW5zcGFyZW50U3ViTWVzaGVzLmxlbmd0
aCAhPT0gMCkgeworICAgICAgICAgICAgdGhpcy5fcmVuZGVyVHJhbnNwYXJlbnQodGhpcy5fdHJh
bnNwYXJlbnRTdWJNZXNoZXMpOworICAgICAgICAgICAgZW5naW5lLnNldEFscGhhTW9kZShfRW5n
aW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ29uc3RhbnRzIl0u
QUxQSEFfRElTQUJMRSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU2V0IGJhY2sgc3RlbmNpbCB0
byBmYWxzZSBpbiBjYXNlIGl0IGNoYW5nZXMgYmVmb3JlIHRoZSBlZGdlIHJlbmRlcmVyLgorICAg
ICAgICBlbmdpbmUuc2V0U3RlbmNpbEJ1ZmZlcihmYWxzZSk7CisgICAgICAgIC8vIEVkZ2VzCisg
ICAgICAgIGlmICh0aGlzLl9lZGdlc1JlbmRlcmVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIGVkZ2VzUmVuZGVyZXJJbmRleCA9IDA7IGVkZ2VzUmVuZGVyZXJJbmRleCA8IHRoaXMu
X2VkZ2VzUmVuZGVyZXJzLmxlbmd0aDsgZWRnZXNSZW5kZXJlckluZGV4KyspIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9lZGdlc1JlbmRlcmVycy5kYXRhW2VkZ2VzUmVuZGVyZXJJbmRleF0ucmVu
ZGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbmdpbmUuc2V0QWxwaGFNb2RlKF9F
bmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMi
XS5BTFBIQV9ESVNBQkxFKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXN0b3JlIFN0ZW5jaWwg
c3RhdGUuCisgICAgICAgIGVuZ2luZS5zZXRTdGVuY2lsQnVmZmVyKHN0ZW5jaWxTdGF0ZSk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIHRoZSBvcGFxdWUgc3VibWVzaGVzIGluIHRo
ZSBvcmRlciBmcm9tIHRoZSBvcGFxdWVTb3J0Q29tcGFyZUZuLgorICAgICAqIEBwYXJhbSBzdWJN
ZXNoZXMgVGhlIHN1Ym1lc2hlcyB0byByZW5kZXIKKyAgICAgKi8KKyAgICBSZW5kZXJpbmdHcm91
cC5wcm90b3R5cGUucmVuZGVyT3BhcXVlU29ydGVkID0gZnVuY3Rpb24gKHN1Yk1lc2hlcykgewor
ICAgICAgICByZXR1cm4gUmVuZGVyaW5nR3JvdXAucmVuZGVyU29ydGVkKHN1Yk1lc2hlcywgdGhp
cy5fb3BhcXVlU29ydENvbXBhcmVGbiwgdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhLCBmYWxzZSk7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIHRoZSBvcGFxdWUgc3VibWVzaGVzIGlu
IHRoZSBvcmRlciBmcm9tIHRoZSBhbHBoYXRlc3RTb3J0Q29tcGFyZUZuLgorICAgICAqIEBwYXJh
bSBzdWJNZXNoZXMgVGhlIHN1Ym1lc2hlcyB0byByZW5kZXIKKyAgICAgKi8KKyAgICBSZW5kZXJp
bmdHcm91cC5wcm90b3R5cGUucmVuZGVyQWxwaGFUZXN0U29ydGVkID0gZnVuY3Rpb24gKHN1Yk1l
c2hlcykgeworICAgICAgICByZXR1cm4gUmVuZGVyaW5nR3JvdXAucmVuZGVyU29ydGVkKHN1Yk1l
c2hlcywgdGhpcy5fYWxwaGFUZXN0U29ydENvbXBhcmVGbiwgdGhpcy5fc2NlbmUuYWN0aXZlQ2Ft
ZXJhLCBmYWxzZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIHRoZSBvcGFxdWUg
c3VibWVzaGVzIGluIHRoZSBvcmRlciBmcm9tIHRoZSB0cmFuc3BhcmVudFNvcnRDb21wYXJlRm4u
CisgICAgICogQHBhcmFtIHN1Yk1lc2hlcyBUaGUgc3VibWVzaGVzIHRvIHJlbmRlcgorICAgICAq
LworICAgIFJlbmRlcmluZ0dyb3VwLnByb3RvdHlwZS5yZW5kZXJUcmFuc3BhcmVudFNvcnRlZCA9
IGZ1bmN0aW9uIChzdWJNZXNoZXMpIHsKKyAgICAgICAgcmV0dXJuIFJlbmRlcmluZ0dyb3VwLnJl
bmRlclNvcnRlZChzdWJNZXNoZXMsIHRoaXMuX3RyYW5zcGFyZW50U29ydENvbXBhcmVGbiwgdGhp
cy5fc2NlbmUuYWN0aXZlQ2FtZXJhLCB0cnVlKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
bmRlcnMgdGhlIHN1Ym1lc2hlcyBpbiBhIHNwZWNpZmllZCBvcmRlci4KKyAgICAgKiBAcGFyYW0g
c3ViTWVzaGVzIFRoZSBzdWJtZXNoZXMgdG8gc29ydCBiZWZvcmUgcmVuZGVyCisgICAgICogQHBh
cmFtIHNvcnRDb21wYXJlRm4gVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gdXNlIHRvIHNvcnQKKyAg
ICAgKiBAcGFyYW0gY2FtZXJhUG9zaXRpb24gVGhlIGNhbWVyYSBwb3NpdGlvbiB1c2UgdG8gcHJl
cHJvY2VzcyB0aGUgc3VibWVzaGVzIHRvIGhlbHAgc29ydGluZworICAgICAqIEBwYXJhbSB0cmFu
c3BhcmVudCBTcGVjaWZpZXMgdG8gYWN0aXZhdGUgYmxlbmRpbmcgaWYgdHJ1ZQorICAgICAqLwor
ICAgIFJlbmRlcmluZ0dyb3VwLnJlbmRlclNvcnRlZCA9IGZ1bmN0aW9uIChzdWJNZXNoZXMsIHNv
cnRDb21wYXJlRm4sIGNhbWVyYSwgdHJhbnNwYXJlbnQpIHsKKyAgICAgICAgdmFyIHN1YkluZGV4
ID0gMDsKKyAgICAgICAgdmFyIHN1Yk1lc2g7CisgICAgICAgIHZhciBjYW1lcmFQb3NpdGlvbiA9
IGNhbWVyYSA/IGNhbWVyYS5nbG9iYWxQb3NpdGlvbiA6IFJlbmRlcmluZ0dyb3VwLl96ZXJvVmVj
dG9yOworICAgICAgICBmb3IgKDsgc3ViSW5kZXggPCBzdWJNZXNoZXMubGVuZ3RoOyBzdWJJbmRl
eCsrKSB7CisgICAgICAgICAgICBzdWJNZXNoID0gc3ViTWVzaGVzLmRhdGFbc3ViSW5kZXhdOwor
ICAgICAgICAgICAgc3ViTWVzaC5fYWxwaGFJbmRleCA9IHN1Yk1lc2guZ2V0TWVzaCgpLmFscGhh
SW5kZXg7CisgICAgICAgICAgICBzdWJNZXNoLl9kaXN0YW5jZVRvQ2FtZXJhID0gX01hdGhzX21h
dGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZlY3RvcjMiXS5EaXN0YW5j
ZShzdWJNZXNoLmdldEJvdW5kaW5nSW5mbygpLmJvdW5kaW5nU3BoZXJlLmNlbnRlcldvcmxkLCBj
YW1lcmFQb3NpdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNvcnRlZEFycmF5ID0gc3Vi
TWVzaGVzLmRhdGEuc2xpY2UoMCwgc3ViTWVzaGVzLmxlbmd0aCk7CisgICAgICAgIGlmIChzb3J0
Q29tcGFyZUZuKSB7CisgICAgICAgICAgICBzb3J0ZWRBcnJheS5zb3J0KHNvcnRDb21wYXJlRm4p
OworICAgICAgICB9CisgICAgICAgIGZvciAoc3ViSW5kZXggPSAwOyBzdWJJbmRleCA8IHNvcnRl
ZEFycmF5Lmxlbmd0aDsgc3ViSW5kZXgrKykgeworICAgICAgICAgICAgc3ViTWVzaCA9IHNvcnRl
ZEFycmF5W3N1YkluZGV4XTsKKyAgICAgICAgICAgIGlmICh0cmFuc3BhcmVudCkgeworICAgICAg
ICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHN1Yk1lc2guZ2V0TWF0ZXJpYWwoKTsKKyAgICAgICAg
ICAgICAgICBpZiAobWF0ZXJpYWwgJiYgbWF0ZXJpYWwubmVlZERlcHRoUHJlUGFzcykgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgZW5naW5lID0gbWF0ZXJpYWwuZ2V0U2NlbmUoKS5nZXRFbmdp
bmUoKTsKKyAgICAgICAgICAgICAgICAgICAgZW5naW5lLnNldENvbG9yV3JpdGUoZmFsc2UpOwor
ICAgICAgICAgICAgICAgICAgICBlbmdpbmUuc2V0QWxwaGFNb2RlKF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDb25zdGFudHMiXS5BTFBIQV9ESVNBQkxF
KTsKKyAgICAgICAgICAgICAgICAgICAgc3ViTWVzaC5yZW5kZXIoZmFsc2UpOworICAgICAgICAg
ICAgICAgICAgICBlbmdpbmUuc2V0Q29sb3JXcml0ZSh0cnVlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdWJNZXNoLnJlbmRlcih0cmFuc3BhcmVudCk7
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbmRlcnMgdGhlIHN1Ym1lc2hl
cyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGRpc3BhdGNoZWQgKG5vIHNvcnQgYXBwbGllZCkuCisg
ICAgICogQHBhcmFtIHN1Yk1lc2hlcyBUaGUgc3VibWVzaGVzIHRvIHJlbmRlcgorICAgICAqLwor
ICAgIFJlbmRlcmluZ0dyb3VwLnJlbmRlclVuc29ydGVkID0gZnVuY3Rpb24gKHN1Yk1lc2hlcykg
eworICAgICAgICBmb3IgKHZhciBzdWJJbmRleCA9IDA7IHN1YkluZGV4IDwgc3ViTWVzaGVzLmxl
bmd0aDsgc3ViSW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHN1Ym1lc2ggPSBzdWJNZXNoZXMu
ZGF0YVtzdWJJbmRleF07CisgICAgICAgICAgICBzdWJtZXNoLnJlbmRlcihmYWxzZSk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEJ1aWxkIGluIGZ1bmN0aW9uIHdoaWNoIGNh
biBiZSBhcHBsaWVkIHRvIGVuc3VyZSBtZXNoZXMgb2YgYSBzcGVjaWFsIHF1ZXVlIChvcGFxdWUs
IGFscGhhIHRlc3QsIHRyYW5zcGFyZW50KQorICAgICAqIGFyZSByZW5kZXJlZCBiYWNrIHRvIGZy
b250IGlmIGluIHRoZSBzYW1lIGFscGhhIGluZGV4LgorICAgICAqCisgICAgICogQHBhcmFtIGEg
VGhlIGZpcnN0IHN1Ym1lc2gKKyAgICAgKiBAcGFyYW0gYiBUaGUgc2Vjb25kIHN1Ym1lc2gKKyAg
ICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uCisgICAgICovCisgICAg
UmVuZGVyaW5nR3JvdXAuZGVmYXVsdFRyYW5zcGFyZW50U29ydENvbXBhcmUgPSBmdW5jdGlvbiAo
YSwgYikgeworICAgICAgICAvLyBBbHBoYSBpbmRleCBmaXJzdAorICAgICAgICBpZiAoYS5fYWxw
aGFJbmRleCA+IGIuX2FscGhhSW5kZXgpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAg
ICB9CisgICAgICAgIGlmIChhLl9hbHBoYUluZGV4IDwgYi5fYWxwaGFJbmRleCkgeworICAgICAg
ICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIC8vIFRoZW4gZGlzdGFuY2UgdG8g
Y2FtZXJhCisgICAgICAgIHJldHVybiBSZW5kZXJpbmdHcm91cC5iYWNrVG9Gcm9udFNvcnRDb21w
YXJlKGEsIGIpOworICAgIH07CisgICAgLyoqCisgICAgICogQnVpbGQgaW4gZnVuY3Rpb24gd2hp
Y2ggY2FuIGJlIGFwcGxpZWQgdG8gZW5zdXJlIG1lc2hlcyBvZiBhIHNwZWNpYWwgcXVldWUgKG9w
YXF1ZSwgYWxwaGEgdGVzdCwgdHJhbnNwYXJlbnQpCisgICAgICogYXJlIHJlbmRlcmVkIGJhY2sg
dG8gZnJvbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYSBUaGUgZmlyc3Qgc3VibWVzaAorICAg
ICAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgc3VibWVzaAorICAgICAqIEByZXR1cm5zIFRoZSByZXN1
bHQgb2YgdGhlIGNvbXBhcmlzb24KKyAgICAgKi8KKyAgICBSZW5kZXJpbmdHcm91cC5iYWNrVG9G
cm9udFNvcnRDb21wYXJlID0gZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAgICAgLy8gVGhlbiBkaXN0
YW5jZSB0byBjYW1lcmEKKyAgICAgICAgaWYgKGEuX2Rpc3RhbmNlVG9DYW1lcmEgPCBiLl9kaXN0
YW5jZVRvQ2FtZXJhKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoYS5fZGlzdGFuY2VUb0NhbWVyYSA+IGIuX2Rpc3RhbmNlVG9DYW1lcmEpIHsKKyAgICAg
ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIEJ1aWxkIGluIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBhcHBsaWVkIHRv
IGVuc3VyZSBtZXNoZXMgb2YgYSBzcGVjaWFsIHF1ZXVlIChvcGFxdWUsIGFscGhhIHRlc3QsIHRy
YW5zcGFyZW50KQorICAgICAqIGFyZSByZW5kZXJlZCBmcm9udCB0byBiYWNrIChwcmV2ZW50IG92
ZXJkcmF3KS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhIFRoZSBmaXJzdCBzdWJtZXNoCisgICAg
ICogQHBhcmFtIGIgVGhlIHNlY29uZCBzdWJtZXNoCisgICAgICogQHJldHVybnMgVGhlIHJlc3Vs
dCBvZiB0aGUgY29tcGFyaXNvbgorICAgICAqLworICAgIFJlbmRlcmluZ0dyb3VwLmZyb250VG9C
YWNrU29ydENvbXBhcmUgPSBmdW5jdGlvbiAoYSwgYikgeworICAgICAgICAvLyBUaGVuIGRpc3Rh
bmNlIHRvIGNhbWVyYQorICAgICAgICBpZiAoYS5fZGlzdGFuY2VUb0NhbWVyYSA8IGIuX2Rpc3Rh
bmNlVG9DYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoYS5fZGlzdGFuY2VUb0NhbWVyYSA+IGIuX2Rpc3RhbmNlVG9DYW1lcmEpIHsKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUmVzZXRzIHRoZSBkaWZmZXJlbnQgbGlzdHMgb2Ygc3VibWVzaGVzIHRv
IHByZXBhcmUgYSBuZXcgZnJhbWUuCisgICAgICovCisgICAgUmVuZGVyaW5nR3JvdXAucHJvdG90
eXBlLnByZXBhcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX29wYXF1ZVN1Yk1lc2hl
cy5yZXNldCgpOworICAgICAgICB0aGlzLl90cmFuc3BhcmVudFN1Yk1lc2hlcy5yZXNldCgpOwor
ICAgICAgICB0aGlzLl9hbHBoYVRlc3RTdWJNZXNoZXMucmVzZXQoKTsKKyAgICAgICAgdGhpcy5f
ZGVwdGhPbmx5U3ViTWVzaGVzLnJlc2V0KCk7CisgICAgICAgIHRoaXMuX3BhcnRpY2xlU3lzdGVt
cy5yZXNldCgpOworICAgICAgICB0aGlzLl9zcHJpdGVNYW5hZ2Vycy5yZXNldCgpOworICAgICAg
ICB0aGlzLl9lZGdlc1JlbmRlcmVycy5yZXNldCgpOworICAgIH07CisgICAgUmVuZGVyaW5nR3Jv
dXAucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX29wYXF1
ZVN1Yk1lc2hlcy5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMuX3RyYW5zcGFyZW50U3ViTWVzaGVz
LmRpc3Bvc2UoKTsKKyAgICAgICAgdGhpcy5fYWxwaGFUZXN0U3ViTWVzaGVzLmRpc3Bvc2UoKTsK
KyAgICAgICAgdGhpcy5fZGVwdGhPbmx5U3ViTWVzaGVzLmRpc3Bvc2UoKTsKKyAgICAgICAgdGhp
cy5fcGFydGljbGVTeXN0ZW1zLmRpc3Bvc2UoKTsKKyAgICAgICAgdGhpcy5fc3ByaXRlTWFuYWdl
cnMuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9lZGdlc1JlbmRlcmVycy5kaXNwb3NlKCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnNlcnRzIHRoZSBzdWJtZXNoIGluIGl0cyBjb3JyZWN0
IHF1ZXVlIGRlcGVuZGluZyBvbiBpdHMgbWF0ZXJpYWwuCisgICAgICogQHBhcmFtIHN1Yk1lc2gg
VGhlIHN1Ym1lc2ggdG8gZGlzcGF0Y2gKKyAgICAgKiBAcGFyYW0gW21lc2hdIE9wdGlvbmFsIHJl
ZmVyZW5jZSB0byB0aGUgc3VibWVzaGVzJ3MgbWVzaC4gUHJvdmlkZSBpZiB5b3UgaGF2ZSBhbiBl
eGl0aW5nIHJlZmVyZW5jZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgorICAgICAqIEBwYXJhbSBb
bWF0ZXJpYWxdIE9wdGlvbmFsIHJlZmVyZW5jZSB0byB0aGUgc3VibWVzaGVzJ3MgbWF0ZXJpYWwu
IFByb3ZpZGUgaWYgeW91IGhhdmUgYW4gZXhpdGluZyByZWZlcmVuY2UgdG8gaW1wcm92ZSBwZXJm
b3JtYW5jZS4KKyAgICAgKi8KKyAgICBSZW5kZXJpbmdHcm91cC5wcm90b3R5cGUuZGlzcGF0Y2gg
PSBmdW5jdGlvbiAoc3ViTWVzaCwgbWVzaCwgbWF0ZXJpYWwpIHsKKyAgICAgICAgLy8gR2V0IG1l
c2ggYW5kIG1hdGVyaWFscyBpZiBub3QgcHJvdmlkZWQKKyAgICAgICAgaWYgKG1lc2ggPT09IHVu
ZGVmaW5lZCkgeworICAgICAgICAgICAgbWVzaCA9IHN1Yk1lc2guZ2V0TWVzaCgpOworICAgICAg
ICB9CisgICAgICAgIGlmIChtYXRlcmlhbCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBt
YXRlcmlhbCA9IHN1Yk1lc2guZ2V0TWF0ZXJpYWwoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
bWF0ZXJpYWwgPT09IG51bGwgfHwgbWF0ZXJpYWwgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtYXRlcmlhbC5uZWVkQWxwaGFCbGVu
ZGluZ0Zvck1lc2gobWVzaCkpIHsgLy8gVHJhbnNwYXJlbnQKKyAgICAgICAgICAgIHRoaXMuX3Ry
YW5zcGFyZW50U3ViTWVzaGVzLnB1c2goc3ViTWVzaCk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAobWF0ZXJpYWwubmVlZEFscGhhVGVzdGluZygpKSB7IC8vIEFscGhhIHRlc3QKKyAgICAg
ICAgICAgIGlmIChtYXRlcmlhbC5uZWVkRGVwdGhQcmVQYXNzKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fZGVwdGhPbmx5U3ViTWVzaGVzLnB1c2goc3ViTWVzaCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl9hbHBoYVRlc3RTdWJNZXNoZXMucHVzaChzdWJNZXNoKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtYXRlcmlhbC5uZWVkRGVwdGhQ
cmVQYXNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZGVwdGhPbmx5U3ViTWVzaGVzLnB1c2go
c3ViTWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9vcGFxdWVTdWJNZXNo
ZXMucHVzaChzdWJNZXNoKTsgLy8gT3BhcXVlCisgICAgICAgIH0KKyAgICAgICAgbWVzaC5fcmVu
ZGVyaW5nR3JvdXAgPSB0aGlzOworICAgICAgICBpZiAobWVzaC5fZWRnZXNSZW5kZXJlciAmJiBt
ZXNoLl9lZGdlc1JlbmRlcmVyLmlzRW5hYmxlZCkgeworICAgICAgICAgICAgdGhpcy5fZWRnZXNS
ZW5kZXJlcnMucHVzaChtZXNoLl9lZGdlc1JlbmRlcmVyKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgUmVuZGVyaW5nR3JvdXAucHJvdG90eXBlLmRpc3BhdGNoU3ByaXRlcyA9IGZ1bmN0aW9uIChz
cHJpdGVNYW5hZ2VyKSB7CisgICAgICAgIHRoaXMuX3Nwcml0ZU1hbmFnZXJzLnB1c2goc3ByaXRl
TWFuYWdlcik7CisgICAgfTsKKyAgICBSZW5kZXJpbmdHcm91cC5wcm90b3R5cGUuZGlzcGF0Y2hQ
YXJ0aWNsZXMgPSBmdW5jdGlvbiAocGFydGljbGVTeXN0ZW0pIHsKKyAgICAgICAgdGhpcy5fcGFy
dGljbGVTeXN0ZW1zLnB1c2gocGFydGljbGVTeXN0ZW0pOworICAgIH07CisgICAgUmVuZGVyaW5n
R3JvdXAucHJvdG90eXBlLl9yZW5kZXJQYXJ0aWNsZXMgPSBmdW5jdGlvbiAoYWN0aXZlTWVzaGVz
KSB7CisgICAgICAgIGlmICh0aGlzLl9wYXJ0aWNsZVN5c3RlbXMubGVuZ3RoID09PSAwKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gUGFydGljbGVzCisgICAg
ICAgIHZhciBhY3RpdmVDYW1lcmEgPSB0aGlzLl9zY2VuZS5hY3RpdmVDYW1lcmE7CisgICAgICAg
IHRoaXMuX3NjZW5lLm9uQmVmb3JlUGFydGljbGVzUmVuZGVyaW5nT2JzZXJ2YWJsZS5ub3RpZnlP
YnNlcnZlcnModGhpcy5fc2NlbmUpOworICAgICAgICBmb3IgKHZhciBwYXJ0aWNsZUluZGV4ID0g
MDsgcGFydGljbGVJbmRleCA8IHRoaXMuX3BhcnRpY2xlU3lzdGVtcy5sZW5ndGg7IHBhcnRpY2xl
SW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHBhcnRpY2xlU3lzdGVtID0gdGhpcy5fcGFydGlj
bGVTeXN0ZW1zLmRhdGFbcGFydGljbGVJbmRleF07CisgICAgICAgICAgICBpZiAoKGFjdGl2ZUNh
bWVyYSAmJiBhY3RpdmVDYW1lcmEubGF5ZXJNYXNrICYgcGFydGljbGVTeXN0ZW0ubGF5ZXJNYXNr
KSA9PT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdmFyIGVtaXR0ZXIgPSBwYXJ0aWNsZVN5c3RlbS5lbWl0dGVyOworICAgICAgICAg
ICAgaWYgKCFlbWl0dGVyLnBvc2l0aW9uIHx8ICFhY3RpdmVNZXNoZXMgfHwgYWN0aXZlTWVzaGVz
LmluZGV4T2YoZW1pdHRlcikgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUu
X2FjdGl2ZVBhcnRpY2xlcy5hZGRDb3VudChwYXJ0aWNsZVN5c3RlbS5yZW5kZXIoKSwgZmFsc2Up
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5lLm9uQWZ0ZXJQ
YXJ0aWNsZXNSZW5kZXJpbmdPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzLl9zY2VuZSk7
CisgICAgfTsKKyAgICBSZW5kZXJpbmdHcm91cC5wcm90b3R5cGUuX3JlbmRlclNwcml0ZXMgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fc2NlbmUuc3ByaXRlc0VuYWJsZWQgfHwg
dGhpcy5fc3ByaXRlTWFuYWdlcnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgLy8gU3ByaXRlcworICAgICAgICB2YXIgYWN0aXZlQ2FtZXJh
ID0gdGhpcy5fc2NlbmUuYWN0aXZlQ2FtZXJhOworICAgICAgICB0aGlzLl9zY2VuZS5vbkJlZm9y
ZVNwcml0ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzLl9zY2VuZSk7
CisgICAgICAgIGZvciAodmFyIGlkID0gMDsgaWQgPCB0aGlzLl9zcHJpdGVNYW5hZ2Vycy5sZW5n
dGg7IGlkKyspIHsKKyAgICAgICAgICAgIHZhciBzcHJpdGVNYW5hZ2VyID0gdGhpcy5fc3ByaXRl
TWFuYWdlcnMuZGF0YVtpZF07CisgICAgICAgICAgICBpZiAoKChhY3RpdmVDYW1lcmEgJiYgYWN0
aXZlQ2FtZXJhLmxheWVyTWFzayAmIHNwcml0ZU1hbmFnZXIubGF5ZXJNYXNrKSAhPT0gMCkpIHsK
KyAgICAgICAgICAgICAgICBzcHJpdGVNYW5hZ2VyLnJlbmRlcigpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5lLm9uQWZ0ZXJTcHJpdGVzUmVuZGVyaW5nT2Jz
ZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcy5fc2NlbmUpOworICAgIH07CisgICAgUmVuZGVy
aW5nR3JvdXAuX3plcm9WZWN0b3IgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICByZXR1cm4gUmVuZGVyaW5nR3Jv
dXA7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1JlbmRlcmluZy9yZW5kZXJp
bmdNYW5hZ2VyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vUmVuZGVyaW5nL3JlbmRlcmluZ01hbmFnZXIudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IFJlbmRlcmluZ0dyb3VwSW5mbywgUmVuZGVyaW5nTWFuYWdlciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJpbmdHcm91cEluZm8iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFJlbmRlcmluZ0dyb3VwSW5mbzsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJp
bmdNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSZW5kZXJpbmdNYW5hZ2VyOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcmVuZGVyaW5nR3JvdXBfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcmVuZGVyaW5nR3JvdXAgKi8g
Ii4vUmVuZGVyaW5nL3JlbmRlcmluZ0dyb3VwLnRzIik7CisKKy8qKgorICogVGhpcyBjbGFzcyBp
cyB1c2VkIGJ5IHRoZSBvblJlbmRlcmluZ0dyb3VwT2JzZXJ2YWJsZQorICovCit2YXIgUmVuZGVy
aW5nR3JvdXBJbmZvID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9u
IFJlbmRlcmluZ0dyb3VwSW5mbygpIHsKKyAgICB9CisgICAgcmV0dXJuIFJlbmRlcmluZ0dyb3Vw
SW5mbzsKK30oKSk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgbWFuYWdlciByZXNwb25zaWJsZSBv
ZiBhbGwgdGhlIHJlbmRlcmluZyBmb3IgbWVzaGVzIHNwcml0ZXMgYW5kIHBhcnRpY2xlcy4KKyAq
IEl0IGlzIGVuYWJsZSB0byBtYW5hZ2UgdGhlIGRpZmZlcmVudCBncm91cHMgYXMgd2VsbCBhcyB0
aGUgZGlmZmVyZW50IG5lY2Vzc2FyeSBzb3J0IGZ1bmN0aW9ucy4KKyAqIFRoaXMgc2hvdWxkIG5v
dCBiZSB1c2VkIGRpcmVjdGx5IGFzaWRlIG9mIHRoZSBmZXcgc3RhdGljIGNvbmZpZ3VyYXRpb25z
CisgKi8KK3ZhciBSZW5kZXJpbmdNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworICAgIC8qKgorICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyByZW5kZXJpbmcgZ3JvdXAgZm9y
IGEgcGFydGljdWxhciBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRoZSBzY2Vu
ZSB0aGUgZ3JvdXBzIGJlbG9uZ3MgdG8KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBSZW5kZXJpbmdN
YW5hZ2VyKHNjZW5lKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLl91c2VTY2VuZUF1dG9DbGVhclNldHVwID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX3JlbmRlcmluZ0dyb3VwcyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLl9h
dXRvQ2xlYXJEZXB0aFN0ZW5jaWwgPSB7fTsKKyAgICAgICAgdGhpcy5fY3VzdG9tT3BhcXVlU29y
dENvbXBhcmVGbiA9IHt9OworICAgICAgICB0aGlzLl9jdXN0b21BbHBoYVRlc3RTb3J0Q29tcGFy
ZUZuID0ge307CisgICAgICAgIHRoaXMuX2N1c3RvbVRyYW5zcGFyZW50U29ydENvbXBhcmVGbiA9
IHt9OworICAgICAgICB0aGlzLl9yZW5kZXJpbmdHcm91cEluZm8gPSBuZXcgUmVuZGVyaW5nR3Jv
dXBJbmZvKCk7CisgICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7CisgICAgICAgIGZvciAodmFy
IGkgPSBSZW5kZXJpbmdNYW5hZ2VyLk1JTl9SRU5ERVJJTkdHUk9VUFM7IGkgPCBSZW5kZXJpbmdN
YW5hZ2VyLk1BWF9SRU5ERVJJTkdHUk9VUFM7IGkrKykgeworICAgICAgICAgICAgdGhpcy5fYXV0
b0NsZWFyRGVwdGhTdGVuY2lsW2ldID0geyBhdXRvQ2xlYXI6IHRydWUsIGRlcHRoOiB0cnVlLCBz
dGVuY2lsOiB0cnVlIH07CisgICAgICAgIH0KKyAgICB9CisgICAgUmVuZGVyaW5nTWFuYWdlci5w
cm90b3R5cGUuX2NsZWFyRGVwdGhTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24gKGRlcHRoLCBzdGVu
Y2lsKSB7CisgICAgICAgIGlmIChkZXB0aCA9PT0gdm9pZCAwKSB7IGRlcHRoID0gdHJ1ZTsgfQor
ICAgICAgICBpZiAoc3RlbmNpbCA9PT0gdm9pZCAwKSB7IHN0ZW5jaWwgPSB0cnVlOyB9CisgICAg
ICAgIGlmICh0aGlzLl9kZXB0aFN0ZW5jaWxCdWZmZXJBbHJlYWR5Q2xlYW5lZCkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NjZW5lLmdldEVuZ2luZSgp
LmNsZWFyKG51bGwsIGZhbHNlLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgICAgIHRoaXMuX2RlcHRo
U3RlbmNpbEJ1ZmZlckFscmVhZHlDbGVhbmVkID0gdHJ1ZTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlbmRlcnMgdGhlIGVudGlyZSBtYW5hZ2VkIGdyb3Vwcy4gVGhpcyBpcyB1c2VkIGJ5IHRo
ZSBzY2VuZSBvciB0aGUgZGlmZmVyZW50IHJlbm5kZXIgdGFyZ2V0cy4KKyAgICAgKiBAaGlkZGVu
CisgICAgICovCisgICAgUmVuZGVyaW5nTWFuYWdlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rp
b24gKGN1c3RvbVJlbmRlckZ1bmN0aW9uLCBhY3RpdmVNZXNoZXMsIHJlbmRlclBhcnRpY2xlcywg
cmVuZGVyU3ByaXRlcykgeworICAgICAgICAvLyBVcGRhdGUgdGhlIG9ic2VydmFibGUgY29udGV4
dCAobm90IG51bGwgYXMgaXQgb25seSBnb2VzIGF3YXkgb24gZGlzcG9zZSkKKyAgICAgICAgdmFy
IGluZm8gPSB0aGlzLl9yZW5kZXJpbmdHcm91cEluZm87CisgICAgICAgIGluZm8uc2NlbmUgPSB0
aGlzLl9zY2VuZTsKKyAgICAgICAgaW5mby5jYW1lcmEgPSB0aGlzLl9zY2VuZS5hY3RpdmVDYW1l
cmE7CisgICAgICAgIC8vIERpc3BhdGNoIHNwcml0ZXMKKyAgICAgICAgaWYgKHRoaXMuX3NjZW5l
LnNwcml0ZU1hbmFnZXJzICYmIHJlbmRlclNwcml0ZXMpIHsKKyAgICAgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9zY2VuZS5zcHJpdGVNYW5hZ2Vycy5sZW5ndGg7IGlu
ZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbWFuYWdlciA9IHRoaXMuX3NjZW5lLnNwcml0
ZU1hbmFnZXJzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoU3ByaXRlcyht
YW5hZ2VyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBSZW5kZXIKKyAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSBSZW5kZXJpbmdNYW5hZ2VyLk1JTl9SRU5ERVJJTkdHUk9V
UFM7IGluZGV4IDwgUmVuZGVyaW5nTWFuYWdlci5NQVhfUkVOREVSSU5HR1JPVVBTOyBpbmRleCsr
KSB7CisgICAgICAgICAgICB0aGlzLl9kZXB0aFN0ZW5jaWxCdWZmZXJBbHJlYWR5Q2xlYW5lZCA9
IGluZGV4ID09PSBSZW5kZXJpbmdNYW5hZ2VyLk1JTl9SRU5ERVJJTkdHUk9VUFM7CisgICAgICAg
ICAgICB2YXIgcmVuZGVyaW5nR3JvdXAgPSB0aGlzLl9yZW5kZXJpbmdHcm91cHNbaW5kZXhdOwor
ICAgICAgICAgICAgaWYgKCFyZW5kZXJpbmdHcm91cCkgeworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJlbmRlcmluZ0dyb3VwTWFzayA9
IE1hdGgucG93KDIsIGluZGV4KTsKKyAgICAgICAgICAgIGluZm8ucmVuZGVyaW5nR3JvdXBJZCA9
IGluZGV4OworICAgICAgICAgICAgLy8gQmVmb3JlIE9ic2VydmFibGUKKyAgICAgICAgICAgIHRo
aXMuX3NjZW5lLm9uQmVmb3JlUmVuZGVyaW5nR3JvdXBPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVy
cyhpbmZvLCByZW5kZXJpbmdHcm91cE1hc2spOworICAgICAgICAgICAgLy8gQ2xlYXIgZGVwdGgv
c3RlbmNpbCBpZiBuZWVkZWQKKyAgICAgICAgICAgIGlmIChSZW5kZXJpbmdNYW5hZ2VyLkFVVE9D
TEVBUikgeworICAgICAgICAgICAgICAgIHZhciBhdXRvQ2xlYXIgPSB0aGlzLl91c2VTY2VuZUF1
dG9DbGVhclNldHVwID8KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NlbmUuZ2V0QXV0b0Ns
ZWFyRGVwdGhTdGVuY2lsU2V0dXAoaW5kZXgpIDoKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
YXV0b0NsZWFyRGVwdGhTdGVuY2lsW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0b0Ns
ZWFyICYmIGF1dG9DbGVhci5hdXRvQ2xlYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
Y2xlYXJEZXB0aFN0ZW5jaWxCdWZmZXIoYXV0b0NsZWFyLmRlcHRoLCBhdXRvQ2xlYXIuc3RlbmNp
bCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUmVu
ZGVyCisgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fc2NlbmUuX2JlZm9y
ZVJlbmRlcmluZ0dyb3VwRHJhd1N0YWdlOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAg
ICAgICAgICAgIHZhciBzdGVwID0gX2FbX2ldOworICAgICAgICAgICAgICAgIHN0ZXAuYWN0aW9u
KGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbmRlcmluZ0dyb3VwLnJlbmRl
cihjdXN0b21SZW5kZXJGdW5jdGlvbiwgcmVuZGVyU3ByaXRlcywgcmVuZGVyUGFydGljbGVzLCBh
Y3RpdmVNZXNoZXMpOworICAgICAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBfYyA9IHRoaXMuX3Nj
ZW5lLl9hZnRlclJlbmRlcmluZ0dyb3VwRHJhd1N0YWdlOyBfYiA8IF9jLmxlbmd0aDsgX2IrKykg
eworICAgICAgICAgICAgICAgIHZhciBzdGVwID0gX2NbX2JdOworICAgICAgICAgICAgICAgIHN0
ZXAuYWN0aW9uKGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEFmdGVyIE9i
c2VydmFibGUKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLm9uQWZ0ZXJSZW5kZXJpbmdHcm91cE9i
c2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGluZm8sIHJlbmRlcmluZ0dyb3VwTWFzayk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlc2V0cyB0aGUgZGlmZmVyZW50IGluZm9y
bWF0aW9uIG9mIHRoZSBncm91cCB0byBwcmVwYXJlIGEgbmV3IGZyYW1lCisgICAgICogQGhpZGRl
bgorICAgICAqLworICAgIFJlbmRlcmluZ01hbmFnZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IFJlbmRlcmluZ01hbmFnZXIuTUlOX1JF
TkRFUklOR0dST1VQUzsgaW5kZXggPCBSZW5kZXJpbmdNYW5hZ2VyLk1BWF9SRU5ERVJJTkdHUk9V
UFM7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciByZW5kZXJpbmdHcm91cCA9IHRoaXMuX3Jl
bmRlcmluZ0dyb3Vwc1tpbmRleF07CisgICAgICAgICAgICBpZiAocmVuZGVyaW5nR3JvdXApIHsK
KyAgICAgICAgICAgICAgICByZW5kZXJpbmdHcm91cC5wcmVwYXJlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIERpc3Bvc2UgYW5kIHJlbGVhc2Ug
dGhlIGdyb3VwIGFuZCBpdHMgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgICAgICogQGhpZGRlbgor
ICAgICAqLworICAgIFJlbmRlcmluZ01hbmFnZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRoaXMuZnJlZVJlbmRlcmluZ0dyb3VwcygpOworICAgICAgICB0aGlz
Ll9yZW5kZXJpbmdHcm91cHMubGVuZ3RoID0gMDsKKyAgICAgICAgdGhpcy5fcmVuZGVyaW5nR3Jv
dXBJbmZvID0gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIENsZWFyIHRoZSBpbmZvIHJl
bGF0ZWQgdG8gcmVuZGVyaW5nIGdyb3VwcyBwcmV2ZW50aW5nIHJldGVudGlvbiBwb2ludHMgZHVy
aW5nIGRpc3Bvc2UuCisgICAgICovCisgICAgUmVuZGVyaW5nTWFuYWdlci5wcm90b3R5cGUuZnJl
ZVJlbmRlcmluZ0dyb3VwcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSBSZW5kZXJpbmdNYW5hZ2VyLk1JTl9SRU5ERVJJTkdHUk9VUFM7IGluZGV4IDwgUmVuZGVyaW5n
TWFuYWdlci5NQVhfUkVOREVSSU5HR1JPVVBTOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIg
cmVuZGVyaW5nR3JvdXAgPSB0aGlzLl9yZW5kZXJpbmdHcm91cHNbaW5kZXhdOworICAgICAgICAg
ICAgaWYgKHJlbmRlcmluZ0dyb3VwKSB7CisgICAgICAgICAgICAgICAgcmVuZGVyaW5nR3JvdXAu
ZGlzcG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBSZW5kZXJp
bmdNYW5hZ2VyLnByb3RvdHlwZS5fcHJlcGFyZVJlbmRlcmluZ0dyb3VwID0gZnVuY3Rpb24gKHJl
bmRlcmluZ0dyb3VwSWQpIHsKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmluZ0dyb3Vwc1tyZW5k
ZXJpbmdHcm91cElkXSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJp
bmdHcm91cHNbcmVuZGVyaW5nR3JvdXBJZF0gPSBuZXcgX3JlbmRlcmluZ0dyb3VwX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlJlbmRlcmluZ0dyb3VwIl0ocmVuZGVyaW5nR3JvdXBJZCwg
dGhpcy5fc2NlbmUsIHRoaXMuX2N1c3RvbU9wYXF1ZVNvcnRDb21wYXJlRm5bcmVuZGVyaW5nR3Jv
dXBJZF0sIHRoaXMuX2N1c3RvbUFscGhhVGVzdFNvcnRDb21wYXJlRm5bcmVuZGVyaW5nR3JvdXBJ
ZF0sIHRoaXMuX2N1c3RvbVRyYW5zcGFyZW50U29ydENvbXBhcmVGbltyZW5kZXJpbmdHcm91cElk
XSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBhIHNwcml0ZSBtYW5h
Z2VyIHRvIHRoZSByZW5kZXJpbmcgbWFuYWdlciBpbiBvcmRlciB0byByZW5kZXIgaXQgdGhpcyBm
cmFtZS4KKyAgICAgKiBAcGFyYW0gc3ByaXRlTWFuYWdlciBEZWZpbmUgdGhlIHNwcml0ZSBtYW5h
Z2VyIHRvIHJlbmRlcgorICAgICAqLworICAgIFJlbmRlcmluZ01hbmFnZXIucHJvdG90eXBlLmRp
c3BhdGNoU3ByaXRlcyA9IGZ1bmN0aW9uIChzcHJpdGVNYW5hZ2VyKSB7CisgICAgICAgIHZhciBy
ZW5kZXJpbmdHcm91cElkID0gc3ByaXRlTWFuYWdlci5yZW5kZXJpbmdHcm91cElkIHx8IDA7Cisg
ICAgICAgIHRoaXMuX3ByZXBhcmVSZW5kZXJpbmdHcm91cChyZW5kZXJpbmdHcm91cElkKTsKKyAg
ICAgICAgdGhpcy5fcmVuZGVyaW5nR3JvdXBzW3JlbmRlcmluZ0dyb3VwSWRdLmRpc3BhdGNoU3By
aXRlcyhzcHJpdGVNYW5hZ2VyKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZCBhIHBhcnRp
Y2xlIHN5c3RlbSB0byB0aGUgcmVuZGVyaW5nIG1hbmFnZXIgaW4gb3JkZXIgdG8gcmVuZGVyIGl0
IHRoaXMgZnJhbWUuCisgICAgICogQHBhcmFtIHBhcnRpY2xlU3lzdGVtIERlZmluZSB0aGUgcGFy
dGljbGUgc3lzdGVtIHRvIHJlbmRlcgorICAgICAqLworICAgIFJlbmRlcmluZ01hbmFnZXIucHJv
dG90eXBlLmRpc3BhdGNoUGFydGljbGVzID0gZnVuY3Rpb24gKHBhcnRpY2xlU3lzdGVtKSB7Cisg
ICAgICAgIHZhciByZW5kZXJpbmdHcm91cElkID0gcGFydGljbGVTeXN0ZW0ucmVuZGVyaW5nR3Jv
dXBJZCB8fCAwOworICAgICAgICB0aGlzLl9wcmVwYXJlUmVuZGVyaW5nR3JvdXAocmVuZGVyaW5n
R3JvdXBJZCk7CisgICAgICAgIHRoaXMuX3JlbmRlcmluZ0dyb3Vwc1tyZW5kZXJpbmdHcm91cElk
XS5kaXNwYXRjaFBhcnRpY2xlcyhwYXJ0aWNsZVN5c3RlbSk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGQgYSBzdWJtZXNoIHRvIHRoZSBtYW5hZ2VyIGluIG9yZGVyIHRvIHJlbmRlciBpdCB0
aGlzIGZyYW1lCisgICAgICogQHBhcmFtIHN1Yk1lc2ggVGhlIHN1Ym1lc2ggdG8gZGlzcGF0Y2gK
KyAgICAgKiBAcGFyYW0gbWVzaCBPcHRpb25hbCByZWZlcmVuY2UgdG8gdGhlIHN1Ym1lc2hlcydz
IG1lc2guIFByb3ZpZGUgaWYgeW91IGhhdmUgYW4gZXhpdGluZyByZWZlcmVuY2UgdG8gaW1wcm92
ZSBwZXJmb3JtYW5jZS4KKyAgICAgKiBAcGFyYW0gbWF0ZXJpYWwgT3B0aW9uYWwgcmVmZXJlbmNl
IHRvIHRoZSBzdWJtZXNoZXMncyBtYXRlcmlhbC4gUHJvdmlkZSBpZiB5b3UgaGF2ZSBhbiBleGl0
aW5nIHJlZmVyZW5jZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgorICAgICAqLworICAgIFJlbmRl
cmluZ01hbmFnZXIucHJvdG90eXBlLmRpc3BhdGNoID0gZnVuY3Rpb24gKHN1Yk1lc2gsIG1lc2gs
IG1hdGVyaWFsKSB7CisgICAgICAgIGlmIChtZXNoID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgIG1lc2ggPSBzdWJNZXNoLmdldE1lc2goKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgcmVu
ZGVyaW5nR3JvdXBJZCA9IG1lc2gucmVuZGVyaW5nR3JvdXBJZCB8fCAwOworICAgICAgICB0aGlz
Ll9wcmVwYXJlUmVuZGVyaW5nR3JvdXAocmVuZGVyaW5nR3JvdXBJZCk7CisgICAgICAgIHRoaXMu
X3JlbmRlcmluZ0dyb3Vwc1tyZW5kZXJpbmdHcm91cElkXS5kaXNwYXRjaChzdWJNZXNoLCBtZXNo
LCBtYXRlcmlhbCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1
bHQgc29ydCBmdW5jdGlvbiBhcHBsaWVkIGluIHRoZSByZW5kZXJnaW5nIGdyb3VwIHRvIHByZXBh
cmUgdGhlIG1lc2hlcy4KKyAgICAgKiBUaGlzIGFsbG93ZWQgY29udHJvbCBmb3IgZnJvbnQgdG8g
YmFjayByZW5kZXJpbmcgb3IgcmV2ZXJzbHkgZGVwZW5kaW5nIG9mIHRoZSBzcGVjaWFsIG5lZWRz
LgorICAgICAqCisgICAgICogQHBhcmFtIHJlbmRlcmluZ0dyb3VwSWQgVGhlIHJlbmRlcmluZyBn
cm91cCBpZCBjb3JyZXNwb25kaW5nIHRvIGl0cyBpbmRleAorICAgICAqIEBwYXJhbSBvcGFxdWVT
b3J0Q29tcGFyZUZuIFRoZSBvcGFxdWUgcXVldWUgY29tcGFyaXNvbiBmdW5jdGlvbiB1c2UgdG8g
c29ydC4KKyAgICAgKiBAcGFyYW0gYWxwaGFUZXN0U29ydENvbXBhcmVGbiBUaGUgYWxwaGEgdGVz
dCBxdWV1ZSBjb21wYXJpc29uIGZ1bmN0aW9uIHVzZSB0byBzb3J0LgorICAgICAqIEBwYXJhbSB0
cmFuc3BhcmVudFNvcnRDb21wYXJlRm4gVGhlIHRyYW5zcGFyZW50IHF1ZXVlIGNvbXBhcmlzb24g
ZnVuY3Rpb24gdXNlIHRvIHNvcnQuCisgICAgICovCisgICAgUmVuZGVyaW5nTWFuYWdlci5wcm90
b3R5cGUuc2V0UmVuZGVyaW5nT3JkZXIgPSBmdW5jdGlvbiAocmVuZGVyaW5nR3JvdXBJZCwgb3Bh
cXVlU29ydENvbXBhcmVGbiwgYWxwaGFUZXN0U29ydENvbXBhcmVGbiwgdHJhbnNwYXJlbnRTb3J0
Q29tcGFyZUZuKSB7CisgICAgICAgIGlmIChvcGFxdWVTb3J0Q29tcGFyZUZuID09PSB2b2lkIDAp
IHsgb3BhcXVlU29ydENvbXBhcmVGbiA9IG51bGw7IH0KKyAgICAgICAgaWYgKGFscGhhVGVzdFNv
cnRDb21wYXJlRm4gPT09IHZvaWQgMCkgeyBhbHBoYVRlc3RTb3J0Q29tcGFyZUZuID0gbnVsbDsg
fQorICAgICAgICBpZiAodHJhbnNwYXJlbnRTb3J0Q29tcGFyZUZuID09PSB2b2lkIDApIHsgdHJh
bnNwYXJlbnRTb3J0Q29tcGFyZUZuID0gbnVsbDsgfQorICAgICAgICB0aGlzLl9jdXN0b21PcGFx
dWVTb3J0Q29tcGFyZUZuW3JlbmRlcmluZ0dyb3VwSWRdID0gb3BhcXVlU29ydENvbXBhcmVGbjsK
KyAgICAgICAgdGhpcy5fY3VzdG9tQWxwaGFUZXN0U29ydENvbXBhcmVGbltyZW5kZXJpbmdHcm91
cElkXSA9IGFscGhhVGVzdFNvcnRDb21wYXJlRm47CisgICAgICAgIHRoaXMuX2N1c3RvbVRyYW5z
cGFyZW50U29ydENvbXBhcmVGbltyZW5kZXJpbmdHcm91cElkXSA9IHRyYW5zcGFyZW50U29ydENv
bXBhcmVGbjsKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmluZ0dyb3Vwc1tyZW5kZXJpbmdHcm91
cElkXSkgeworICAgICAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5fcmVuZGVyaW5nR3JvdXBzW3Jl
bmRlcmluZ0dyb3VwSWRdOworICAgICAgICAgICAgZ3JvdXAub3BhcXVlU29ydENvbXBhcmVGbiA9
IHRoaXMuX2N1c3RvbU9wYXF1ZVNvcnRDb21wYXJlRm5bcmVuZGVyaW5nR3JvdXBJZF07CisgICAg
ICAgICAgICBncm91cC5hbHBoYVRlc3RTb3J0Q29tcGFyZUZuID0gdGhpcy5fY3VzdG9tQWxwaGFU
ZXN0U29ydENvbXBhcmVGbltyZW5kZXJpbmdHcm91cElkXTsKKyAgICAgICAgICAgIGdyb3VwLnRy
YW5zcGFyZW50U29ydENvbXBhcmVGbiA9IHRoaXMuX2N1c3RvbVRyYW5zcGFyZW50U29ydENvbXBh
cmVGbltyZW5kZXJpbmdHcm91cElkXTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBzdGVuY2lsIGFuZCBkZXB0aCBidWZmZXIg
YXJlIGNsZWFyZWQgYmV0d2VlbiB0d28gcmVuZGVyaW5nIGdyb3Vwcy4KKyAgICAgKgorICAgICAq
IEBwYXJhbSByZW5kZXJpbmdHcm91cElkIFRoZSByZW5kZXJpbmcgZ3JvdXAgaWQgY29ycmVzcG9u
ZGluZyB0byBpdHMgaW5kZXgKKyAgICAgKiBAcGFyYW0gYXV0b0NsZWFyRGVwdGhTdGVuY2lsIEF1
dG9tYXRpY2FsbHkgY2xlYXJzIGRlcHRoIGFuZCBzdGVuY2lsIGJldHdlZW4gZ3JvdXBzIGlmIHRy
dWUuCisgICAgICogQHBhcmFtIGRlcHRoIEF1dG9tYXRpY2FsbHkgY2xlYXJzIGRlcHRoIGJldHdl
ZW4gZ3JvdXBzIGlmIHRydWUgYW5kIGF1dG9DbGVhciBpcyB0cnVlLgorICAgICAqIEBwYXJhbSBz
dGVuY2lsIEF1dG9tYXRpY2FsbHkgY2xlYXJzIHN0ZW5jaWwgYmV0d2VlbiBncm91cHMgaWYgdHJ1
ZSBhbmQgYXV0b0NsZWFyIGlzIHRydWUuCisgICAgICovCisgICAgUmVuZGVyaW5nTWFuYWdlci5w
cm90b3R5cGUuc2V0UmVuZGVyaW5nQXV0b0NsZWFyRGVwdGhTdGVuY2lsID0gZnVuY3Rpb24gKHJl
bmRlcmluZ0dyb3VwSWQsIGF1dG9DbGVhckRlcHRoU3RlbmNpbCwgZGVwdGgsIHN0ZW5jaWwpIHsK
KyAgICAgICAgaWYgKGRlcHRoID09PSB2b2lkIDApIHsgZGVwdGggPSB0cnVlOyB9CisgICAgICAg
IGlmIChzdGVuY2lsID09PSB2b2lkIDApIHsgc3RlbmNpbCA9IHRydWU7IH0KKyAgICAgICAgdGhp
cy5fYXV0b0NsZWFyRGVwdGhTdGVuY2lsW3JlbmRlcmluZ0dyb3VwSWRdID0geworICAgICAgICAg
ICAgYXV0b0NsZWFyOiBhdXRvQ2xlYXJEZXB0aFN0ZW5jaWwsCisgICAgICAgICAgICBkZXB0aDog
ZGVwdGgsCisgICAgICAgICAgICBzdGVuY2lsOiBzdGVuY2lsCisgICAgICAgIH07CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGF1dG8gY2xlYXIgY29uZmlndXJhdGlv
biBmb3Igb25lIHJlbmRlcmluZyBncm91cCBvZiB0aGUgcmVuZGVyaW5nCisgICAgICogbWFuYWdl
ci4KKyAgICAgKiBAcGFyYW0gaW5kZXggdGhlIHJlbmRlcmluZyBncm91cCBpbmRleCB0byBnZXQg
dGhlIGluZm9ybWF0aW9uIGZvcgorICAgICAqIEByZXR1cm5zIFRoZSBhdXRvIGNsZWFyIHNldHVw
IGZvciB0aGUgcmVxdWVzdGVkIHJlbmRlcmluZyBncm91cAorICAgICAqLworICAgIFJlbmRlcmlu
Z01hbmFnZXIucHJvdG90eXBlLmdldEF1dG9DbGVhckRlcHRoU3RlbmNpbFNldHVwID0gZnVuY3Rp
b24gKGluZGV4KSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hdXRvQ2xlYXJEZXB0aFN0ZW5jaWxb
aW5kZXhdOworICAgIH07CisgICAgLyoqCisgICAgICogVGhlIG1heCBpZCB1c2VkIGZvciByZW5k
ZXJpbmcgZ3JvdXBzIChub3QgaW5jbHVkZWQpCisgICAgICovCisgICAgUmVuZGVyaW5nTWFuYWdl
ci5NQVhfUkVOREVSSU5HR1JPVVBTID0gNDsKKyAgICAvKioKKyAgICAgKiBUaGUgbWluIGlkIHVz
ZWQgZm9yIHJlbmRlcmluZyBncm91cHMgKGluY2x1ZGVkKQorICAgICAqLworICAgIFJlbmRlcmlu
Z01hbmFnZXIuTUlOX1JFTkRFUklOR0dST1VQUyA9IDA7CisgICAgLyoqCisgICAgICogVXNlZCB0
byBnbG9iYWxseSBwcmV2ZW50IGF1dG9jbGVhcmluZyBzY2VuZXMuCisgICAgICovCisgICAgUmVu
ZGVyaW5nTWFuYWdlci5BVVRPQ0xFQVIgPSB0cnVlOworICAgIHJldHVybiBSZW5kZXJpbmdNYW5h
Z2VyOworfSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9SZW5kZXJpbmcvdXRpbGl0
eUxheWVyUmVuZGVyZXIudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vUmVuZGVyaW5nL3V0aWxpdHlMYXllclJlbmRlcmVyLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogVXRpbGl0eUxheWVyUmVuZGVyZXIgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVXRpbGl0eUxheWVyUmVuZGVyZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIFV0aWxpdHlMYXllclJlbmRlcmVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2
YWJsZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FdmVudHNfcG9pbnRlckV2ZW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vRXZlbnRzL3BvaW50ZXJFdmVudHMgKi8gIi4vRXZlbnRzL3BvaW50ZXJFdmVudHMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9l
bmdpbmVTdG9yZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0xpZ2h0c19oZW1pc3BoZXJpY0xpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9MaWdodHMvaGVtaXNwaGVyaWNM
aWdodCAqLyAiLi9MaWdodHMvaGVtaXNwaGVyaWNMaWdodC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8gIi4vTWF0
aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0
aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRzIik7CisK
KworCisKKworCisKKy8qKgorICogUmVuZGVycyBhIGxheWVyIG9uIHRvcCBvZiBhbiBleGlzdGlu
ZyBzY2VuZQorICovCit2YXIgVXRpbGl0eUxheWVyUmVuZGVyZXIgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGEgVXRpbGl0eUxheWVy
UmVuZGVyZXIKKyAgICAgKiBAcGFyYW0gb3JpZ2luYWxTY2VuZSB0aGUgb3JpZ2luYWwgc2NlbmUg
dGhhdCB3aWxsIGJlIHJlbmRlcmVkIG9uIHRvcCBvZgorICAgICAqIEBwYXJhbSBoYW5kbGVFdmVu
dHMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB1dGlsaXR5IGxheWVyIHNob3VsZCBoYW5kbGUg
ZXZlbnRzCisgICAgICovCisgICAgZnVuY3Rpb24gVXRpbGl0eUxheWVyUmVuZGVyZXIoCisgICAg
LyoqIHRoZSBvcmlnaW5hbCBzY2VuZSB0aGF0IHdpbGwgYmUgcmVuZGVyZWQgb24gdG9wIG9mICov
CisgICAgb3JpZ2luYWxTY2VuZSwgaGFuZGxlRXZlbnRzKSB7CisgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CisgICAgICAgIGlmIChoYW5kbGVFdmVudHMgPT09IHZvaWQgMCkgeyBoYW5kbGVFdmVu
dHMgPSB0cnVlOyB9CisgICAgICAgIHRoaXMub3JpZ2luYWxTY2VuZSA9IG9yaWdpbmFsU2NlbmU7
CisgICAgICAgIHRoaXMuX3BvaW50ZXJDYXB0dXJlcyA9IHt9OworICAgICAgICB0aGlzLl9sYXN0
UG9pbnRlckV2ZW50cyA9IHt9OworICAgICAgICB0aGlzLl9zaGFyZWRHaXptb0xpZ2h0ID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fcmVuZGVyQ2FtZXJhID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIElmIHRoZSBwaWNraW5nIHNob3VsZCBiZSBkb25lIG9uIHRoZSB1dGlsaXR5IGxheWVy
IHByaW9yIHRvIHRoZSBhY3R1YWwgc2NlbmUgKERlZmF1bHQ6IHRydWUpCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLnBpY2tVdGlsaXR5U2NlbmVGaXJzdCA9IHRydWU7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiAgSWYgdGhlIHV0aWxpdHkgbGF5ZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgYmUg
cmVuZGVyZWQgb24gdG9wIG9mIGV4aXN0aW5nIHNjZW5lCisgICAgICAgICovCisgICAgICAgIHRo
aXMuc2hvdWxkUmVuZGVyID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHNldCB0
byB0cnVlLCBvbmx5IHBvaW50ZXIgZG93biBvblBvaW50ZXJPYnNlcnZhYmxlIGV2ZW50cyB3aWxs
IGJlIGJsb2NrZWQgd2hlbiBwaWNraW5nIGlzIG9jY2x1ZGVkIGJ5IG9yaWdpbmFsIHNjZW5lCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLm9ubHlDaGVja1BvaW50ZXJEb3duRXZlbnRzID0gdHJ1
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHNldCB0byBmYWxzZSwgb25seSBwb2ludGVy
VXAsIHBvaW50ZXJEb3duIGFuZCBwb2ludGVyTW92ZSB3aWxsIGJlIHNlbnQgdG8gdGhlIHV0aWxp
dHlMYXllclNjZW5lIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5wcm9jZXNzQWxsRXZlbnRzID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBPYnNl
cnZhYmxlIHJhaXNlZCB3aGVuIHRoZSBwb2ludGVyIG1vdmUgZnJvbSB0aGUgdXRpbGl0eSBsYXll
ciBzY2VuZSB0byB0aGUgbWFpbiBzY2VuZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vblBv
aW50ZXJPdXRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8vIENyZWF0ZSBzY2VuZSB3
aGljaCB3aWxsIGJlIHJlbmRlcmVkIGluIHRoZSBmb3JlZ3JvdW5kIGFuZCByZW1vdmUgaXQgZnJv
bSBiZWluZyByZWZlcmVuY2VkIGJ5IGVuZ2luZSB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIGV4
aXN0aW5nIGFwcAorICAgICAgICB0aGlzLnV0aWxpdHlMYXllclNjZW5lID0gbmV3IF9zY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2VuZSJdKG9yaWdpbmFsU2NlbmUuZ2V0RW5n
aW5lKCksIHsgdmlydHVhbDogdHJ1ZSB9KTsKKyAgICAgICAgdGhpcy51dGlsaXR5TGF5ZXJTY2Vu
ZS51c2VSaWdodEhhbmRlZFN5c3RlbSA9IG9yaWdpbmFsU2NlbmUudXNlUmlnaHRIYW5kZWRTeXN0
ZW07CisgICAgICAgIHRoaXMudXRpbGl0eUxheWVyU2NlbmUuX2FsbG93UG9zdFByb2Nlc3NDbGVh
ckNvbG9yID0gZmFsc2U7CisgICAgICAgIC8vIERldGFjaCBjb250cm9scyBvbiB1dGlsaXR5IHNj
ZW5lLCBldmVudHMgd2lsbCBiZSBmaXJlZCBieSBsb2dpYyBiZWxvdyB0byBoYW5kbGUgcGlja2lu
ZyBwcmlvcml0eQorICAgICAgICB0aGlzLnV0aWxpdHlMYXllclNjZW5lLmRldGFjaENvbnRyb2wo
KTsKKyAgICAgICAgaWYgKGhhbmRsZUV2ZW50cykgeworICAgICAgICAgICAgdGhpcy5fb3JpZ2lu
YWxQb2ludGVyT2JzZXJ2ZXIgPSBvcmlnaW5hbFNjZW5lLm9uUHJlUG9pbnRlck9ic2VydmFibGUu
YWRkKGZ1bmN0aW9uIChwcmVQb2ludGVySW5mbywgZXZlbnRTdGF0ZSkgeworICAgICAgICAgICAg
ICAgIGlmICghX3RoaXMudXRpbGl0eUxheWVyU2NlbmUuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKCFfdGhpcy5wcm9jZXNzQWxsRXZlbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChw
cmVQb2ludGVySW5mby50eXBlICE9PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSTU9WRQorICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgcHJlUG9pbnRlckluZm8udHlwZSAhPT0gX0V2ZW50c19wb2lu
dGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBvaW50ZXJFdmVudFR5cGVz
Il0uUE9JTlRFUlVQCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmVQb2ludGVySW5mby50
eXBlICE9PSBfRXZlbnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siUG9pbnRlckV2ZW50VHlwZXMiXS5QT0lOVEVSRE9XTikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIF90aGlzLnV0aWxpdHlMYXllclNjZW5lLnBvaW50ZXJYID0gb3JpZ2lu
YWxTY2VuZS5wb2ludGVyWDsKKyAgICAgICAgICAgICAgICBfdGhpcy51dGlsaXR5TGF5ZXJTY2Vu
ZS5wb2ludGVyWSA9IG9yaWdpbmFsU2NlbmUucG9pbnRlclk7CisgICAgICAgICAgICAgICAgdmFy
IHBvaW50ZXJFdmVudCA9IChwcmVQb2ludGVySW5mby5ldmVudCk7CisgICAgICAgICAgICAgICAg
aWYgKG9yaWdpbmFsU2NlbmUuaXNQb2ludGVyQ2FwdHVyZWQocG9pbnRlckV2ZW50LnBvaW50ZXJJ
ZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3BvaW50ZXJDYXB0dXJlc1twb2ludGVy
RXZlbnQucG9pbnRlcklkXSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciB1dGlsaXR5U2NlbmVQaWNrID0g
cHJlUG9pbnRlckluZm8ucmF5ID8gX3RoaXMudXRpbGl0eUxheWVyU2NlbmUucGlja1dpdGhSYXko
cHJlUG9pbnRlckluZm8ucmF5KSA6IF90aGlzLnV0aWxpdHlMYXllclNjZW5lLnBpY2sob3JpZ2lu
YWxTY2VuZS5wb2ludGVyWCwgb3JpZ2luYWxTY2VuZS5wb2ludGVyWSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFwcmVQb2ludGVySW5mby5yYXkgJiYgdXRpbGl0eVNjZW5lUGljaykgeworICAgICAg
ICAgICAgICAgICAgICBwcmVQb2ludGVySW5mby5yYXkgPSB1dGlsaXR5U2NlbmVQaWNrLnJheTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gYWx3YXlzIGZpcmUgdGhlIHBy
ZXBvaW50ZXIgb3ZlcnN2YWJsZQorICAgICAgICAgICAgICAgIF90aGlzLnV0aWxpdHlMYXllclNj
ZW5lLm9uUHJlUG9pbnRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHByZVBvaW50ZXJJbmZv
KTsKKyAgICAgICAgICAgICAgICAvLyBhbGxvdyBldmVyeSBub24gcG9pbnRlciBkb3duIGV2ZW50
IHRvIGZsb3cgdG8gdGhlIHV0aWxpdHkgbGF5ZXIKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMu
b25seUNoZWNrUG9pbnRlckRvd25FdmVudHMgJiYgcHJlUG9pbnRlckluZm8udHlwZSAhPSBfRXZl
bnRzX3BvaW50ZXJFdmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUG9pbnRlckV2
ZW50VHlwZXMiXS5QT0lOVEVSRE9XTikgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXByZVBv
aW50ZXJJbmZvLnNraXBPblBvaW50ZXJPYnNlcnZhYmxlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBfdGhpcy51dGlsaXR5TGF5ZXJTY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLm5vdGlmeU9i
c2VydmVycyhuZXcgX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlBvaW50ZXJJbmZvIl0ocHJlUG9pbnRlckluZm8udHlwZSwgcHJlUG9pbnRlckluZm8u
ZXZlbnQsIHV0aWxpdHlTY2VuZVBpY2spKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlUG9pbnRlckluZm8udHlwZSA9PT0gX0V2ZW50c19wb2ludGVy
RXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBvaW50ZXJFdmVudFR5cGVzIl0u
UE9JTlRFUlVQICYmIF90aGlzLl9wb2ludGVyQ2FwdHVyZXNbcG9pbnRlckV2ZW50LnBvaW50ZXJJ
ZF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wb2ludGVyQ2FwdHVyZXNbcG9p
bnRlckV2ZW50LnBvaW50ZXJJZF0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChfdGhpcy51dGlsaXR5TGF5ZXJTY2VuZS5hdXRvQ2xlYXJEZXB0aEFuZFN0ZW5jaWwg
fHwgX3RoaXMucGlja1V0aWxpdHlTY2VuZUZpcnN0KSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IElmIHRoaXMgbGF5ZXIgaXMgYW4gb3ZlcmxheSwgY2hlY2sgaWYgdGhpcyBsYXllciB3YXMgaGl0
IGFuZCBpZiBzbywgc2tpcCBwb2ludGVyIGV2ZW50cyBmb3IgdGhlIG1haW4gc2NlbmUKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHV0aWxpdHlTY2VuZVBpY2sgJiYgdXRpbGl0eVNjZW5lUGljay5o
aXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJlUG9pbnRlckluZm8uc2tpcE9u
UG9pbnRlck9ic2VydmFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy51
dGlsaXR5TGF5ZXJTY2VuZS5vblBvaW50ZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhuZXcg
X0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBvaW50
ZXJJbmZvIl0ocHJlUG9pbnRlckluZm8udHlwZSwgcHJlUG9pbnRlckluZm8uZXZlbnQsIHV0aWxp
dHlTY2VuZVBpY2spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByZVBvaW50ZXJJbmZvLnNraXBPblBvaW50ZXJPYnNlcnZhYmxlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsU2NlbmVQaWNrID0gcHJl
UG9pbnRlckluZm8ucmF5ID8gb3JpZ2luYWxTY2VuZS5waWNrV2l0aFJheShwcmVQb2ludGVySW5m
by5yYXkpIDogb3JpZ2luYWxTY2VuZS5waWNrKG9yaWdpbmFsU2NlbmUucG9pbnRlclgsIG9yaWdp
bmFsU2NlbmUucG9pbnRlclkpOworICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnRlckV2ZW50
XzEgPSAocHJlUG9pbnRlckluZm8uZXZlbnQpOworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0
aGUgbGF5ZXIgY2FuIGJlIG9jY2x1ZGVkIGJ5IHRoZSBvcmlnaW5hbCBzY2VuZSwgb25seSBmaXJl
IHBvaW50ZXIgZXZlbnRzIHRvIHRoZSBmaXJzdCBsYXllciB0aGF0IGhpdCB0aGV5IHJheQorICAg
ICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxTY2VuZVBpY2sgJiYgdXRpbGl0eVNjZW5lUGlj
aykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gcGljayBpbiB1dGlsaXR5IHNjZW5l
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbGl0eVNjZW5lUGljay5kaXN0YW5jZSA9
PT0gMCAmJiBvcmlnaW5hbFNjZW5lUGljay5waWNrZWRNZXNoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKF90aGlzLm1haW5TY2VuZVRyYWNrZXJQcmVkaWNhdGUgJiYgX3RoaXMu
bWFpblNjZW5lVHJhY2tlclByZWRpY2F0ZShvcmlnaW5hbFNjZW5lUGljay5waWNrZWRNZXNoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB0b3VjaGVkIGFuIHV0aWxp
dHkgbWVzaCBwcmVzZW50IGluIHRoZSBtYWluIHNjZW5lCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl9ub3RpZnlPYnNlcnZlcnMocHJlUG9pbnRlckluZm8sIG9yaWdpbmFs
U2NlbmVQaWNrLCBwb2ludGVyRXZlbnRfMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZVBvaW50ZXJJbmZvLnNraXBPblBvaW50ZXJPYnNlcnZhYmxlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAocHJlUG9pbnRlckluZm8udHlwZSA9PT0gX0V2ZW50c19wb2ludGVyRXZlbnRzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlBvaW50ZXJFdmVudFR5cGVzIl0uUE9JTlRFUkRPV04p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3BvaW50ZXJDYXB0dXJl
c1twb2ludGVyRXZlbnRfMS5wb2ludGVySWRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX3RoaXMuX2xh
c3RQb2ludGVyRXZlbnRzW3BvaW50ZXJFdmVudF8xLnBvaW50ZXJJZF0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzZW5kIGEgbGFzdCBwb2ludGVydXAg
dG8gdGhlIHV0aWxpdHlMYXllclNjZW5lIHRvIG1ha2Ugc3VyZSBhbmltYXRpb25zIGNhbiBjb21w
bGV0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5vblBvaW50ZXJPdXRP
YnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhwb2ludGVyRXZlbnRfMS5wb2ludGVySWQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX3RoaXMuX2xhc3RQb2ludGVyRXZl
bnRzW3BvaW50ZXJFdmVudF8xLnBvaW50ZXJJZF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoIV90aGlzLl9wb2ludGVyQ2FwdHVyZXNbcG9pbnRlckV2ZW50XzEucG9pbnRlcklk
XSAmJiAodXRpbGl0eVNjZW5lUGljay5kaXN0YW5jZSA8IG9yaWdpbmFsU2NlbmVQaWNrLmRpc3Rh
bmNlIHx8IG9yaWdpbmFsU2NlbmVQaWNrLmRpc3RhbmNlID09PSAwKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIHBpY2sgc29tZXRoaW5nIGluIHV0aWxpdHkgc2NlbmUgb3Ig
dGhlIHBpY2sgaW4gdXRpbGl0eSBpcyBjbG9zZXIgdGhhbiB0aGUgb25lIGluIG1haW4gc2NlbmUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbm90aWZ5T2JzZXJ2ZXJzKHByZVBv
aW50ZXJJbmZvLCB1dGlsaXR5U2NlbmVQaWNrLCBwb2ludGVyRXZlbnRfMSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgYSBwcmV2aW91cyB1dGlsaXR5IGxheWVyIHNldCB0aGlz
LCBkbyBub3QgdW5zZXQgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJl
UG9pbnRlckluZm8uc2tpcE9uUG9pbnRlck9ic2VydmFibGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJlUG9pbnRlckluZm8uc2tpcE9uUG9pbnRlck9ic2VydmFibGUgPSB1
dGlsaXR5U2NlbmVQaWNrLmRpc3RhbmNlID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmICghX3RoaXMuX3BvaW50ZXJDYXB0dXJlc1twb2ludGVyRXZlbnRfMS5wb2ludGVySWRd
ICYmICh1dGlsaXR5U2NlbmVQaWNrLmRpc3RhbmNlID4gb3JpZ2luYWxTY2VuZVBpY2suZGlzdGFu
Y2UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHBpY2sgaW4g
Ym90aCBzY2VuZXMgYnV0IG1haW4gaXMgY2xvc2VyIHRoYW4gdXRpbGl0eQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIHRvdWNoZWQgYW4gdXRpbGl0eSBtZXNoIHByZXNlbnQgaW4g
dGhlIG1haW4gc2NlbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMubWFp
blNjZW5lVHJhY2tlclByZWRpY2F0ZSAmJiBfdGhpcy5tYWluU2NlbmVUcmFja2VyUHJlZGljYXRl
KG9yaWdpbmFsU2NlbmVQaWNrLnBpY2tlZE1lc2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF90aGlzLl9ub3RpZnlPYnNlcnZlcnMocHJlUG9pbnRlckluZm8sIG9yaWdpbmFs
U2NlbmVQaWNrLCBwb2ludGVyRXZlbnRfMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZVBvaW50ZXJJbmZvLnNraXBPblBvaW50ZXJPYnNlcnZhYmxlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoX3RoaXMuX2xhc3RQb2ludGVyRXZlbnRzW3BvaW50ZXJFdmVudF8xLnBvaW50ZXJJZF0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzZW5kIGEg
bGFzdCBwb2ludGVydXAgdG8gdGhlIHV0aWxpdHlMYXllclNjZW5lIHRvIG1ha2Ugc3VyZSBhbmlt
YXRpb25zIGNhbiBjb21wbGV0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhp
cy5vblBvaW50ZXJPdXRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhwb2ludGVyRXZlbnRfMS5w
b2ludGVySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX3RoaXMu
X2xhc3RQb2ludGVyRXZlbnRzW3BvaW50ZXJFdmVudF8xLnBvaW50ZXJJZF07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHByZVBvaW50ZXJJbmZvLnR5cGUgPT09IF9FdmVudHNfcG9pbnRl
ckV2ZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQb2ludGVyRXZlbnRUeXBlcyJd
LlBPSU5URVJVUCAmJiBfdGhpcy5fcG9pbnRlckNhcHR1cmVzW3BvaW50ZXJFdmVudF8xLnBvaW50
ZXJJZF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcG9pbnRlckNhcHR1
cmVzW3BvaW50ZXJFdmVudF8xLnBvaW50ZXJJZF0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgLy8gQXMgYSBuZXdseSBhZGRlZCB1dGlsaXR5IGxheWVy
IHdpbGwgYmUgcmVuZGVyZWQgb3ZlciB0aGUgc2NyZWVuIGxhc3QsIGl0J3MgcG9pbnRlciBldmVu
dHMgc2hvdWxkIGJlIHByb2Nlc3NlZCBmaXJzdAorICAgICAgICAgICAgaWYgKHRoaXMuX29yaWdp
bmFsUG9pbnRlck9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAgb3JpZ2luYWxTY2VuZS5vblBy
ZVBvaW50ZXJPYnNlcnZhYmxlLm1ha2VPYnNlcnZlclRvcFByaW9yaXR5KHRoaXMuX29yaWdpbmFs
UG9pbnRlck9ic2VydmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBS
ZW5kZXIgZGlyZWN0bHkgb24gdG9wIG9mIGV4aXN0aW5nIHNjZW5lIHdpdGhvdXQgY2xlYXJpbmcK
KyAgICAgICAgdGhpcy51dGlsaXR5TGF5ZXJTY2VuZS5hdXRvQ2xlYXIgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5fYWZ0ZXJSZW5kZXJPYnNlcnZlciA9IHRoaXMub3JpZ2luYWxTY2VuZS5vbkFmdGVy
Q2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5hZGQoZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAgICAg
ICAgLy8gT25seSByZW5kZXIgd2hlbiB0aGUgcmVuZGVyIGNhbWVyYSBmaW5pc2hlcyByZW5kZXJp
bmcKKyAgICAgICAgICAgIGlmIChfdGhpcy5zaG91bGRSZW5kZXIgJiYgY2FtZXJhID09IF90aGlz
LmdldFJlbmRlckNhbWVyYSgpKSB7CisgICAgICAgICAgICAgICAgX3RoaXMucmVuZGVyKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9zY2VuZURpc3Bvc2VPYnNl
cnZlciA9IHRoaXMub3JpZ2luYWxTY2VuZS5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZChmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBfdGhpcy5kaXNwb3NlKCk7CisgICAgICAgIH0pOworICAgICAg
ICB0aGlzLl91cGRhdGVDYW1lcmEoKTsKKyAgICB9CisgICAgLyoqCisgICAgICogR2V0cyB0aGUg
Y2FtZXJhIHRoYXQgaXMgdXNlZCB0byByZW5kZXIgdGhlIHV0aWxpdHkgbGF5ZXIgKHdoZW4gbm90
IHNldCwgdGhpcyB3aWxsIGJlIHRoZSBsYXN0IGFjdGl2ZSBjYW1lcmEpCisgICAgICogQHJldHVy
bnMgdGhlIGNhbWVyYSB0aGF0IGlzIHVzZWQgd2hlbiByZW5kZXJpbmcgdGhlIHV0aWxpdHkgbGF5
ZXIKKyAgICAgKi8KKyAgICBVdGlsaXR5TGF5ZXJSZW5kZXJlci5wcm90b3R5cGUuZ2V0UmVuZGVy
Q2FtZXJhID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fcmVuZGVyQ2FtZXJhKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyQ2FtZXJhOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHRoaXMub3JpZ2luYWxTY2VuZS5hY3RpdmVDYW1lcmFzLmxlbmd0aCA+IDEp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsU2NlbmUuYWN0aXZlQ2FtZXJhc1t0
aGlzLm9yaWdpbmFsU2NlbmUuYWN0aXZlQ2FtZXJhcy5sZW5ndGggLSAxXTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsU2NlbmUuYWN0
aXZlQ2FtZXJhOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBj
YW1lcmEgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHJlbmRlcmluZyB0aGUgdXRpbGl0eSBsYXll
ciAoSWYgc2V0IHRvIG51bGwgdGhlIGxhc3QgYWN0aXZlIGNhbWVyYSB3aWxsIGJlIHVzZWQpCisg
ICAgICogQHBhcmFtIGNhbSB0aGUgY2FtZXJhIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5k
ZXJpbmcgdGhlIHV0aWxpdHkgbGF5ZXIKKyAgICAgKi8KKyAgICBVdGlsaXR5TGF5ZXJSZW5kZXJl
ci5wcm90b3R5cGUuc2V0UmVuZGVyQ2FtZXJhID0gZnVuY3Rpb24gKGNhbSkgeworICAgICAgICB0
aGlzLl9yZW5kZXJDYW1lcmEgPSBjYW07CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVu
CisgICAgICogTGlnaHQgd2hpY2ggdXNlZCBieSBnaXptb3MgdG8gZ2V0IGxpZ2h0IHNoYWRpbmcK
KyAgICAgKi8KKyAgICBVdGlsaXR5TGF5ZXJSZW5kZXJlci5wcm90b3R5cGUuX2dldFNoYXJlZEdp
em1vTGlnaHQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5fc2hhcmVkR2l6bW9M
aWdodCkgeworICAgICAgICAgICAgdGhpcy5fc2hhcmVkR2l6bW9MaWdodCA9IG5ldyBfTGlnaHRz
X2hlbWlzcGhlcmljTGlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siSGVtaXNwaGVy
aWNMaWdodCJdKCJzaGFyZWQgZ2l6bW8gbGlnaHQiLCBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlZlY3RvcjMiXSgwLCAxLCAwKSwgdGhpcy51dGls
aXR5TGF5ZXJTY2VuZSk7CisgICAgICAgICAgICB0aGlzLl9zaGFyZWRHaXptb0xpZ2h0LmludGVu
c2l0eSA9IDI7CisgICAgICAgICAgICB0aGlzLl9zaGFyZWRHaXptb0xpZ2h0Lmdyb3VuZENvbG9y
ID0gX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siQ29sb3Iz
Il0uR3JheSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9zaGFyZWRHaXptb0xp
Z2h0OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFV0aWxpdHlMYXllclJlbmRl
cmVyLCAiRGVmYXVsdFV0aWxpdHlMYXllciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEg
c2hhcmVkIHV0aWxpdHkgbGF5ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVybGF5IG9iamVjdHMg
aW50byBhIHNjZW5lIChEZXB0aCBtYXAgb2YgdGhlIHByZXZpb3VzIHNjZW5lIGlzIGNsZWFyZWQg
YmVmb3JlIGRyYXdpbmcgb24gdG9wIG9mIGl0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoVXRpbGl0eUxheWVyUmVuZGVyZXIuX0RlZmF1
bHRVdGlsaXR5TGF5ZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIFV0aWxpdHlMYXllclJl
bmRlcmVyLl9EZWZhdWx0VXRpbGl0eUxheWVyID0gbmV3IFV0aWxpdHlMYXllclJlbmRlcmVyKF9F
bmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2luZVN0
b3JlIl0uTGFzdENyZWF0ZWRTY2VuZSk7CisgICAgICAgICAgICAgICAgVXRpbGl0eUxheWVyUmVu
ZGVyZXIuX0RlZmF1bHRVdGlsaXR5TGF5ZXIub3JpZ2luYWxTY2VuZS5vbkRpc3Bvc2VPYnNlcnZh
YmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBVdGlsaXR5TGF5
ZXJSZW5kZXJlci5fRGVmYXVsdFV0aWxpdHlMYXllciA9IG51bGw7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gVXRpbGl0eUxheWVyUmVuZGVy
ZXIuX0RlZmF1bHRVdGlsaXR5TGF5ZXI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShVdGlsaXR5TGF5ZXJSZW5kZXJlciwgIkRlZmF1bHRLZWVwRGVwdGhVdGls
aXR5TGF5ZXIiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBIHNoYXJlZCB1dGlsaXR5IGxh
eWVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gZW1iZWQgb2JqZWN0cyBpbnRvIGEgc2NlbmUgKERlcHRo
IG1hcCBvZiB0aGUgcHJldmlvdXMgc2NlbmUgaXMgbm90IGNsZWFyZWQgYmVmb3JlIGRyYXdpbmcg
b24gdG9wIG9mIGl0KQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBpZiAoVXRpbGl0eUxheWVyUmVuZGVyZXIuX0RlZmF1bHRLZWVwRGVwdGhVdGls
aXR5TGF5ZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIFV0aWxpdHlMYXllclJlbmRlcmVy
Ll9EZWZhdWx0S2VlcERlcHRoVXRpbGl0eUxheWVyID0gbmV3IFV0aWxpdHlMYXllclJlbmRlcmVy
KF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkVuZ2lu
ZVN0b3JlIl0uTGFzdENyZWF0ZWRTY2VuZSk7CisgICAgICAgICAgICAgICAgVXRpbGl0eUxheWVy
UmVuZGVyZXIuX0RlZmF1bHRLZWVwRGVwdGhVdGlsaXR5TGF5ZXIudXRpbGl0eUxheWVyU2NlbmUu
YXV0b0NsZWFyRGVwdGhBbmRTdGVuY2lsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgVXRpbGl0
eUxheWVyUmVuZGVyZXIuX0RlZmF1bHRLZWVwRGVwdGhVdGlsaXR5TGF5ZXIub3JpZ2luYWxTY2Vu
ZS5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZE9uY2UoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgICAgICBVdGlsaXR5TGF5ZXJSZW5kZXJlci5fRGVmYXVsdEtlZXBEZXB0aFV0aWxpdHlMYXll
ciA9IG51bGw7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gVXRpbGl0eUxheWVyUmVuZGVyZXIuX0RlZmF1bHRLZWVwRGVwdGhVdGlsaXR5TGF5
ZXI7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIFV0aWxpdHlMYXllclJlbmRlcmVyLnByb3RvdHlw
ZS5fbm90aWZ5T2JzZXJ2ZXJzID0gZnVuY3Rpb24gKHByZVBvaW50ZXJJbmZvLCBwaWNrSW5mbywg
cG9pbnRlckV2ZW50KSB7CisgICAgICAgIGlmICghcHJlUG9pbnRlckluZm8uc2tpcE9uUG9pbnRl
ck9ic2VydmFibGUpIHsKKyAgICAgICAgICAgIHRoaXMudXRpbGl0eUxheWVyU2NlbmUub25Qb2lu
dGVyT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMobmV3IF9FdmVudHNfcG9pbnRlckV2ZW50c19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJQb2ludGVySW5mbyJdKHByZVBvaW50ZXJJbmZv
LnR5cGUsIHByZVBvaW50ZXJJbmZvLmV2ZW50LCBwaWNrSW5mbykpOworICAgICAgICAgICAgdGhp
cy5fbGFzdFBvaW50ZXJFdmVudHNbcG9pbnRlckV2ZW50LnBvaW50ZXJJZF0gPSB0cnVlOworICAg
ICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIHRoZSB1dGlsaXR5IGxheWVy
cyBzY2VuZSBvbiB0b3Agb2YgdGhlIG9yaWdpbmFsIHNjZW5lCisgICAgICovCisgICAgVXRpbGl0
eUxheWVyUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dGhpcy5fdXBkYXRlQ2FtZXJhKCk7CisgICAgICAgIGlmICh0aGlzLnV0aWxpdHlMYXllclNjZW5l
LmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgLy8gU2V0IHRoZSBjYW1lcmEncyBzY2VuZSB0
byB1dGlsaXR5IGxheWVycyBzY2VuZQorICAgICAgICAgICAgdmFyIG9sZFNjZW5lID0gdGhpcy51
dGlsaXR5TGF5ZXJTY2VuZS5hY3RpdmVDYW1lcmEuZ2V0U2NlbmUoKTsKKyAgICAgICAgICAgIHZh
ciBjYW1lcmEgPSB0aGlzLnV0aWxpdHlMYXllclNjZW5lLmFjdGl2ZUNhbWVyYTsKKyAgICAgICAg
ICAgIGNhbWVyYS5fc2NlbmUgPSB0aGlzLnV0aWxpdHlMYXllclNjZW5lOworICAgICAgICAgICAg
aWYgKGNhbWVyYS5sZWZ0Q2FtZXJhKSB7CisgICAgICAgICAgICAgICAgY2FtZXJhLmxlZnRDYW1l
cmEuX3NjZW5lID0gdGhpcy51dGlsaXR5TGF5ZXJTY2VuZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChjYW1lcmEucmlnaHRDYW1lcmEpIHsKKyAgICAgICAgICAgICAgICBjYW1lcmEu
cmlnaHRDYW1lcmEuX3NjZW5lID0gdGhpcy51dGlsaXR5TGF5ZXJTY2VuZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMudXRpbGl0eUxheWVyU2NlbmUucmVuZGVyKGZhbHNlKTsKKyAg
ICAgICAgICAgIC8vIFJlc2V0IGNhbWVyYSdzIHNjZW5lIGJhY2sgdG8gb3JpZ2luYWwKKyAgICAg
ICAgICAgIGNhbWVyYS5fc2NlbmUgPSBvbGRTY2VuZTsKKyAgICAgICAgICAgIGlmIChjYW1lcmEu
bGVmdENhbWVyYSkgeworICAgICAgICAgICAgICAgIGNhbWVyYS5sZWZ0Q2FtZXJhLl9zY2VuZSA9
IG9sZFNjZW5lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNhbWVyYS5yaWdodENh
bWVyYSkgeworICAgICAgICAgICAgICAgIGNhbWVyYS5yaWdodENhbWVyYS5fc2NlbmUgPSBvbGRT
Y2VuZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
RGlzcG9zZXMgb2YgdGhlIHJlbmRlcmVyCisgICAgICovCisgICAgVXRpbGl0eUxheWVyUmVuZGVy
ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMub25Qb2lu
dGVyT3V0T2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICBpZiAodGhpcy5fYWZ0ZXJSZW5kZXJP
YnNlcnZlcikgeworICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFNjZW5lLm9uQWZ0ZXJDYW1lcmFS
ZW5kZXJPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9hZnRlclJlbmRlck9ic2VydmVyKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy5fc2NlbmVEaXNwb3NlT2JzZXJ2ZXIpIHsKKyAgICAgICAg
ICAgIHRoaXMub3JpZ2luYWxTY2VuZS5vbkRpc3Bvc2VPYnNlcnZhYmxlLnJlbW92ZSh0aGlzLl9z
Y2VuZURpc3Bvc2VPYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX29yaWdp
bmFsUG9pbnRlck9ic2VydmVyKSB7CisgICAgICAgICAgICB0aGlzLm9yaWdpbmFsU2NlbmUub25Q
cmVQb2ludGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb3JpZ2luYWxQb2ludGVyT2JzZXJ2ZXIp
OworICAgICAgICB9CisgICAgICAgIHRoaXMudXRpbGl0eUxheWVyU2NlbmUuZGlzcG9zZSgpOwor
ICAgIH07CisgICAgVXRpbGl0eUxheWVyUmVuZGVyZXIucHJvdG90eXBlLl91cGRhdGVDYW1lcmEg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMudXRpbGl0eUxheWVyU2NlbmUuY2FtZXJhVG9V
c2VGb3JQb2ludGVycyA9IHRoaXMuZ2V0UmVuZGVyQ2FtZXJhKCk7CisgICAgICAgIHRoaXMudXRp
bGl0eUxheWVyU2NlbmUuYWN0aXZlQ2FtZXJhID0gdGhpcy5nZXRSZW5kZXJDYW1lcmEoKTsKKyAg
ICB9OworICAgIFV0aWxpdHlMYXllclJlbmRlcmVyLl9EZWZhdWx0VXRpbGl0eUxheWVyID0gbnVs
bDsKKyAgICBVdGlsaXR5TGF5ZXJSZW5kZXJlci5fRGVmYXVsdEtlZXBEZXB0aFV0aWxpdHlMYXll
ciA9IG51bGw7CisgICAgcmV0dXJuIFV0aWxpdHlMYXllclJlbmRlcmVyOworfSgpKTsKKworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2JhY2tncm91bmRG
cmFnbWVudERlY2xhcmF0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL2JhY2tncm91bmRGcmFnbWVudERlY2xhcmF0aW9uLnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGJhY2tncm91bmRGcmFnbWVudERlY2xh
cmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImJhY2tncm91bmRG
cmFnbWVudERlY2xhcmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBiYWNrZ3JvdW5kRnJhZ21l
bnREZWNsYXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
Cit2YXIgbmFtZSA9ICdiYWNrZ3JvdW5kRnJhZ21lbnREZWNsYXJhdGlvbic7Cit2YXIgc2hhZGVy
ID0gIiB1bmlmb3JtIHZlYzQgdlByaW1hcnlDb2xvcjtcbiNpZmRlZiBVU0VISUdITElHSFRBTkRT
SEFET1dDT0xPUlNcbnVuaWZvcm0gdmVjNCB2UHJpbWFyeUNvbG9yU2hhZG93O1xuI2VuZGlmXG51
bmlmb3JtIGZsb2F0IHNoYWRvd0xldmVsO1xudW5pZm9ybSBmbG9hdCBhbHBoYTtcbiNpZmRlZiBE
SUZGVVNFXG51bmlmb3JtIHZlYzIgdkRpZmZ1c2VJbmZvcztcbiNlbmRpZlxuI2lmZGVmIFJFRkxF
Q1RJT05cbnVuaWZvcm0gdmVjMiB2UmVmbGVjdGlvbkluZm9zO1xudW5pZm9ybSBtYXQ0IHJlZmxl
Y3Rpb25NYXRyaXg7XG51bmlmb3JtIHZlYzMgdlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcztc
biNlbmRpZlxuI2lmIGRlZmluZWQoUkVGTEVDVElPTkZSRVNORUwpIHx8IGRlZmluZWQoT1BBQ0lU
WUZSRVNORUwpXG51bmlmb3JtIHZlYzMgdkJhY2tncm91bmRDZW50ZXI7XG4jZW5kaWZcbiNpZmRl
ZiBSRUZMRUNUSU9ORlJFU05FTFxudW5pZm9ybSB2ZWM0IHZSZWZsZWN0aW9uQ29udHJvbDtcbiNl
bmRpZlxuI2lmIGRlZmluZWQoUkVGTEVDVElPTk1BUF9TUEhFUklDQUwpIHx8IGRlZmluZWQoUkVG
TEVDVElPTk1BUF9QUk9KRUNUSU9OKSB8fCBkZWZpbmVkKFJFRlJBQ1RJT04pXG51bmlmb3JtIG1h
dDQgdmlldztcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsK
Ky8qKiBAaGlkZGVuICovCit2YXIgYmFja2dyb3VuZEZyYWdtZW50RGVjbGFyYXRpb24gPSB7IG5h
bWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvYmFja2dyb3VuZFVib0RlY2xhcmF0aW9uLnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9iYWNrZ3JvdW5kVWJvRGVjbGFy
YXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGJhY2tncm91bmRV
Ym9EZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJiYWNr
Z3JvdW5kVWJvRGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJhY2tncm91bmRVYm9E
ZWNsYXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2
YXIgbmFtZSA9ICdiYWNrZ3JvdW5kVWJvRGVjbGFyYXRpb24nOwordmFyIHNoYWRlciA9ICJsYXlv
dXQoc3RkMTQwLGNvbHVtbl9tYWpvcikgdW5pZm9ybTtcbnVuaWZvcm0gTWF0ZXJpYWxcbntcbnVu
aWZvcm0gdmVjNCB2UHJpbWFyeUNvbG9yO1xudW5pZm9ybSB2ZWM0IHZQcmltYXJ5Q29sb3JTaGFk
b3c7XG51bmlmb3JtIHZlYzIgdkRpZmZ1c2VJbmZvcztcbnVuaWZvcm0gdmVjMiB2UmVmbGVjdGlv
bkluZm9zO1xudW5pZm9ybSBtYXQ0IGRpZmZ1c2VNYXRyaXg7XG51bmlmb3JtIG1hdDQgcmVmbGVj
dGlvbk1hdHJpeDtcbnVuaWZvcm0gdmVjMyB2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zO1xu
dW5pZm9ybSBmbG9hdCBmRm92TXVsdGlwbGllcjtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xu
dW5pZm9ybSBmbG9hdCBzaGFkb3dMZXZlbDtcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XG4jaWYgZGVm
aW5lZChSRUZMRUNUSU9ORlJFU05FTCkgfHwgZGVmaW5lZChPUEFDSVRZRlJFU05FTClcbnVuaWZv
cm0gdmVjMyB2QmFja2dyb3VuZENlbnRlcjtcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJT05GUkVT
TkVMXG51bmlmb3JtIHZlYzQgdlJlZmxlY3Rpb25Db250cm9sO1xuI2VuZGlmXG59O1xudW5pZm9y
bSBTY2VuZSB7XG5tYXQ0IHZpZXdQcm9qZWN0aW9uO1xuI2lmZGVmIE1VTFRJVklFV1xubWF0NCB2
aWV3UHJvamVjdGlvblI7XG4jZW5kaWZcbm1hdDQgdmlldztcbn07IjsKK19NYXRlcmlhbHNfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVy
c1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBiYWNrZ3JvdW5kVWJv
RGVjbGFyYXRpb24gPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYmFja2dyb3VuZFZlcnRleERl
Y2xhcmF0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9iYWNrZ3JvdW5kVmVydGV4RGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IGJhY2tncm91bmRWZXJ0ZXhEZWNsYXJhdGlvbiAqLworLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4
cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJiYWNrZ3JvdW5kVmVydGV4RGVjbGFyYXRpb24i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIGJhY2tncm91bmRWZXJ0ZXhEZWNsYXJhdGlvbjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9l
ZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdiYWNrZ3Jv
dW5kVmVydGV4RGVjbGFyYXRpb24nOwordmFyIHNoYWRlciA9ICJ1bmlmb3JtIG1hdDQgdmlldztc
bnVuaWZvcm0gbWF0NCB2aWV3UHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgc2hhZG93TGV2ZWw7
XG4jaWZkZWYgRElGRlVTRVxudW5pZm9ybSBtYXQ0IGRpZmZ1c2VNYXRyaXg7XG51bmlmb3JtIHZl
YzIgdkRpZmZ1c2VJbmZvcztcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJT05cbnVuaWZvcm0gdmVj
MiB2UmVmbGVjdGlvbkluZm9zO1xudW5pZm9ybSBtYXQ0IHJlZmxlY3Rpb25NYXRyaXg7XG51bmlm
b3JtIHZlYzMgdlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcztcbnVuaWZvcm0gZmxvYXQgZkZv
dk11bHRpcGxpZXI7XG4jZW5kaWZcbiNpZmRlZiBQT0lOVFNJWkVcbnVuaWZvcm0gZmxvYXQgcG9p
bnRTaXplO1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOwor
LyoqIEBoaWRkZW4gKi8KK3ZhciBiYWNrZ3JvdW5kVmVydGV4RGVjbGFyYXRpb24gPSB7IG5hbWU6
IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRl
cnMvU2hhZGVyc0luY2x1ZGUvYm9uZXNEZWNsYXJhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBib25lc0RlY2xhcmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgImJvbmVzRGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJvbmVzRGVj
bGFyYXRpb247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFy
IG5hbWUgPSAnYm9uZXNEZWNsYXJhdGlvbic7Cit2YXIgc2hhZGVyID0gIiNpZiBOVU1fQk9ORV9J
TkZMVUVOQ0VSUz4wXG4jaWZkZWYgQk9ORVRFWFRVUkVcbnVuaWZvcm0gc2FtcGxlcjJEIGJvbmVT
YW1wbGVyO1xudW5pZm9ybSBmbG9hdCBib25lVGV4dHVyZVdpZHRoO1xuI2Vsc2VcbnVuaWZvcm0g
bWF0NCBtQm9uZXNbQm9uZXNQZXJNZXNoXTtcbiNlbmRpZlxuYXR0cmlidXRlIHZlYzQgbWF0cmlj
ZXNJbmRpY2VzO1xuYXR0cmlidXRlIHZlYzQgbWF0cmljZXNXZWlnaHRzO1xuI2lmIE5VTV9CT05F
X0lORkxVRU5DRVJTPjRcbmF0dHJpYnV0ZSB2ZWM0IG1hdHJpY2VzSW5kaWNlc0V4dHJhO1xuYXR0
cmlidXRlIHZlYzQgbWF0cmljZXNXZWlnaHRzRXh0cmE7XG4jZW5kaWZcbiNpZmRlZiBCT05FVEVY
VFVSRVxubWF0NCByZWFkTWF0cml4RnJvbVJhd1NhbXBsZXIoc2FtcGxlcjJEIHNtcCxmbG9hdCBp
bmRleClcbntcbmZsb2F0IG9mZnNldD1pbmRleCo0LjA7XG5mbG9hdCBkeD0xLjAvYm9uZVRleHR1
cmVXaWR0aDtcbnZlYzQgbTA9dGV4dHVyZTJEKHNtcCx2ZWMyKGR4KihvZmZzZXQrMC41KSwwLikp
O1xudmVjNCBtMT10ZXh0dXJlMkQoc21wLHZlYzIoZHgqKG9mZnNldCsxLjUpLDAuKSk7XG52ZWM0
IG0yPXRleHR1cmUyRChzbXAsdmVjMihkeCoob2Zmc2V0KzIuNSksMC4pKTtcbnZlYzQgbTM9dGV4
dHVyZTJEKHNtcCx2ZWMyKGR4KihvZmZzZXQrMy41KSwwLikpO1xucmV0dXJuIG1hdDQobTAsbTEs
bTIsbTMpO1xufVxuI2VuZGlmXG4jZW5kaWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0g
PSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGJvbmVzRGVjbGFyYXRpb24gPSB7IG5hbWU6
IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRl
cnMvU2hhZGVyc0luY2x1ZGUvYm9uZXNWZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvYm9uZXNWZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogYm9uZXNWZXJ0
ZXggKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYm9uZXNWZXJ0ZXgiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIGJvbmVzVmVydGV4OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlh
bHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2JvbmVzVmVydGV4JzsKK3ZhciBzaGFkZXIg
PSAiI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjBcbm1hdDQgaW5mbHVlbmNlO1xuI2lmZGVmIEJP
TkVURVhUVVJFXG5pbmZsdWVuY2U9cmVhZE1hdHJpeEZyb21SYXdTYW1wbGVyKGJvbmVTYW1wbGVy
LG1hdHJpY2VzSW5kaWNlc1swXSkqbWF0cmljZXNXZWlnaHRzWzBdO1xuI2lmIE5VTV9CT05FX0lO
RkxVRU5DRVJTPjFcbmluZmx1ZW5jZSs9cmVhZE1hdHJpeEZyb21SYXdTYW1wbGVyKGJvbmVTYW1w
bGVyLG1hdHJpY2VzSW5kaWNlc1sxXSkqbWF0cmljZXNXZWlnaHRzWzFdO1xuI2VuZGlmXG4jaWYg
TlVNX0JPTkVfSU5GTFVFTkNFUlM+MlxuaW5mbHVlbmNlKz1yZWFkTWF0cml4RnJvbVJhd1NhbXBs
ZXIoYm9uZVNhbXBsZXIsbWF0cmljZXNJbmRpY2VzWzJdKSptYXRyaWNlc1dlaWdodHNbMl07XG4j
ZW5kaWZcbiNpZiBOVU1fQk9ORV9JTkZMVUVOQ0VSUz4zXG5pbmZsdWVuY2UrPXJlYWRNYXRyaXhG
cm9tUmF3U2FtcGxlcihib25lU2FtcGxlcixtYXRyaWNlc0luZGljZXNbM10pKm1hdHJpY2VzV2Vp
Z2h0c1szXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjRcbmluZmx1ZW5jZSs9
cmVhZE1hdHJpeEZyb21SYXdTYW1wbGVyKGJvbmVTYW1wbGVyLG1hdHJpY2VzSW5kaWNlc0V4dHJh
WzBdKSptYXRyaWNlc1dlaWdodHNFeHRyYVswXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxV
RU5DRVJTPjVcbmluZmx1ZW5jZSs9cmVhZE1hdHJpeEZyb21SYXdTYW1wbGVyKGJvbmVTYW1wbGVy
LG1hdHJpY2VzSW5kaWNlc0V4dHJhWzFdKSptYXRyaWNlc1dlaWdodHNFeHRyYVsxXTtcbiNlbmRp
ZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjZcbmluZmx1ZW5jZSs9cmVhZE1hdHJpeEZyb21S
YXdTYW1wbGVyKGJvbmVTYW1wbGVyLG1hdHJpY2VzSW5kaWNlc0V4dHJhWzJdKSptYXRyaWNlc1dl
aWdodHNFeHRyYVsyXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjdcbmluZmx1
ZW5jZSs9cmVhZE1hdHJpeEZyb21SYXdTYW1wbGVyKGJvbmVTYW1wbGVyLG1hdHJpY2VzSW5kaWNl
c0V4dHJhWzNdKSptYXRyaWNlc1dlaWdodHNFeHRyYVszXTtcbiNlbmRpZlxuI2Vsc2VcbmluZmx1
ZW5jZT1tQm9uZXNbaW50KG1hdHJpY2VzSW5kaWNlc1swXSldKm1hdHJpY2VzV2VpZ2h0c1swXTtc
biNpZiBOVU1fQk9ORV9JTkZMVUVOQ0VSUz4xXG5pbmZsdWVuY2UrPW1Cb25lc1tpbnQobWF0cmlj
ZXNJbmRpY2VzWzFdKV0qbWF0cmljZXNXZWlnaHRzWzFdO1xuI2VuZGlmXG4jaWYgTlVNX0JPTkVf
SU5GTFVFTkNFUlM+MlxuaW5mbHVlbmNlKz1tQm9uZXNbaW50KG1hdHJpY2VzSW5kaWNlc1syXSld
Km1hdHJpY2VzV2VpZ2h0c1syXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjNc
bmluZmx1ZW5jZSs9bUJvbmVzW2ludChtYXRyaWNlc0luZGljZXNbM10pXSptYXRyaWNlc1dlaWdo
dHNbM107XG4jZW5kaWZcbiNpZiBOVU1fQk9ORV9JTkZMVUVOQ0VSUz40XG5pbmZsdWVuY2UrPW1C
b25lc1tpbnQobWF0cmljZXNJbmRpY2VzRXh0cmFbMF0pXSptYXRyaWNlc1dlaWdodHNFeHRyYVsw
XTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjVcbmluZmx1ZW5jZSs9bUJvbmVz
W2ludChtYXRyaWNlc0luZGljZXNFeHRyYVsxXSldKm1hdHJpY2VzV2VpZ2h0c0V4dHJhWzFdO1xu
I2VuZGlmXG4jaWYgTlVNX0JPTkVfSU5GTFVFTkNFUlM+NlxuaW5mbHVlbmNlKz1tQm9uZXNbaW50
KG1hdHJpY2VzSW5kaWNlc0V4dHJhWzJdKV0qbWF0cmljZXNXZWlnaHRzRXh0cmFbMl07XG4jZW5k
aWZcbiNpZiBOVU1fQk9ORV9JTkZMVUVOQ0VSUz43XG5pbmZsdWVuY2UrPW1Cb25lc1tpbnQobWF0
cmljZXNJbmRpY2VzRXh0cmFbM10pXSptYXRyaWNlc1dlaWdodHNFeHRyYVszXTtcbiNlbmRpZlxu
I2VuZGlmXG5maW5hbFdvcmxkPWZpbmFsV29ybGQqaW5mbHVlbmNlO1xuI2VuZGlmIjsKK19NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1
ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBib25l
c1ZlcnRleCA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9idW1wRnJhZ21lbnQudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2J1bXBGcmFnbWVudC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogYnVtcEZyYWdtZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgImJ1bXBGcmFnbWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYnVtcEZyYWdtZW50OyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJp
YWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2J1
bXBGcmFnbWVudCc7Cit2YXIgc2hhZGVyID0gInZlYzIgdXZPZmZzZXQ9dmVjMigwLjAsMC4wKTtc
biNpZiBkZWZpbmVkKEJVTVApIHx8IGRlZmluZWQoUEFSQUxMQVgpXG4jaWZkZWYgTk9STUFMWFlT
Q0FMRVxuZmxvYXQgbm9ybWFsU2NhbGU9MS4wO1xuI2Vsc2VcbmZsb2F0IG5vcm1hbFNjYWxlPXZC
dW1wSW5mb3MueTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoVEFOR0VOVCkgJiYgZGVmaW5lZChOT1JN
QUwpXG5tYXQzIFRCTj12VEJOO1xuI2Vsc2Vcbm1hdDMgVEJOPWNvdGFuZ2VudF9mcmFtZShub3Jt
YWxXKm5vcm1hbFNjYWxlLHZQb3NpdGlvblcsdkJ1bXBVVik7XG4jZW5kaWZcbiNlbGlmIGRlZmlu
ZWQoQU5JU09UUk9QSUMpXG4jaWYgZGVmaW5lZChUQU5HRU5UKSAmJiBkZWZpbmVkKE5PUk1BTClc
bm1hdDMgVEJOPXZUQk47XG4jZWxzZVxubWF0MyBUQk49Y290YW5nZW50X2ZyYW1lKG5vcm1hbFcs
dlBvc2l0aW9uVyx2TWFpblVWMSx2ZWMyKDEuLDEuKSk7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVm
IFBBUkFMTEFYXG5tYXQzIGludlRCTj10cmFuc3Bvc2VNYXQzKFRCTik7XG4jaWZkZWYgUEFSQUxM
QVhPQ0NMVVNJT05cbnV2T2Zmc2V0PXBhcmFsbGF4T2NjbHVzaW9uKGludlRCTiotdmlld0RpcmVj
dGlvblcsaW52VEJOKm5vcm1hbFcsdkJ1bXBVVix2QnVtcEluZm9zLnopO1xuI2Vsc2VcbnV2T2Zm
c2V0PXBhcmFsbGF4T2Zmc2V0KGludlRCTip2aWV3RGlyZWN0aW9uVyx2QnVtcEluZm9zLnopO1xu
I2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBCVU1QXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQ
XG5ub3JtYWxXPW5vcm1hbGl6ZSh0ZXh0dXJlMkQoYnVtcFNhbXBsZXIsdkJ1bXBVVikueHl6KjIu
MC0xLjApO1xubm9ybWFsVz1ub3JtYWxpemUobWF0Myhub3JtYWxNYXRyaXgpKm5vcm1hbFcpO1xu
I2Vsc2Vcbm5vcm1hbFc9cGVydHVyYk5vcm1hbChUQk4sdkJ1bXBVVit1dk9mZnNldCk7XG4jZW5k
aWZcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBA
aGlkZGVuICovCit2YXIgYnVtcEZyYWdtZW50ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRl
ciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2J1
bXBGcmFnbWVudEZ1bmN0aW9ucy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvYnVtcEZyYWdtZW50RnVuY3Rpb25zLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBidW1wRnJhZ21lbnRGdW5jdGlvbnMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiYnVtcEZyYWdtZW50RnVuY3Rpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBidW1wRnJhZ21lbnRGdW5jdGlvbnM7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZl
Y3QudHMiKTsKKwordmFyIG5hbWUgPSAnYnVtcEZyYWdtZW50RnVuY3Rpb25zJzsKK3ZhciBzaGFk
ZXIgPSAiI2lmIGRlZmluZWQoQlVNUCkgfHwgZGVmaW5lZChDTEVBUkNPQVRfQlVNUCkgfHwgZGVm
aW5lZChBTklTT1RST1BJQylcbiNpZiBkZWZpbmVkKFRBTkdFTlQpICYmIGRlZmluZWQoTk9STUFM
KVxudmFyeWluZyBtYXQzIHZUQk47XG4jZW5kaWZcbiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxN
QVBcbnVuaWZvcm0gbWF0NCBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbnZlYzMgcGVydHVyYk5vcm1h
bChtYXQzIGNvdGFuZ2VudEZyYW1lLHZlYzMgdGV4dHVyZVNhbXBsZSxmbG9hdCBzY2FsZSlcbntc
bnRleHR1cmVTYW1wbGU9dGV4dHVyZVNhbXBsZSoyLjAtMS4wO1xuI2lmZGVmIE5PUk1BTFhZU0NB
TEVcbnRleHR1cmVTYW1wbGU9bm9ybWFsaXplKHRleHR1cmVTYW1wbGUqdmVjMyhzY2FsZSxzY2Fs
ZSwxLjApKTtcbiNlbmRpZlxucmV0dXJuIG5vcm1hbGl6ZShjb3RhbmdlbnRGcmFtZSp0ZXh0dXJl
U2FtcGxlKTtcbn1cblxubWF0MyBjb3RhbmdlbnRfZnJhbWUodmVjMyBub3JtYWwsdmVjMyBwLHZl
YzIgdXYsdmVjMiB0YW5nZW50U3BhY2VQYXJhbXMpXG57XG5cbnV2PWdsX0Zyb250RmFjaW5nID8g
dXYgOiAtdXY7XG5cbnZlYzMgZHAxPWRGZHgocCk7XG52ZWMzIGRwMj1kRmR5KHApO1xudmVjMiBk
dXYxPWRGZHgodXYpO1xudmVjMiBkdXYyPWRGZHkodXYpO1xuXG52ZWMzIGRwMnBlcnA9Y3Jvc3Mo
ZHAyLG5vcm1hbCk7XG52ZWMzIGRwMXBlcnA9Y3Jvc3Mobm9ybWFsLGRwMSk7XG52ZWMzIHRhbmdl
bnQ9ZHAycGVycCpkdXYxLngrZHAxcGVycCpkdXYyLng7XG52ZWMzIGJpdGFuZ2VudD1kcDJwZXJw
KmR1djEueStkcDFwZXJwKmR1djIueTtcblxudGFuZ2VudCo9dGFuZ2VudFNwYWNlUGFyYW1zLng7
XG5iaXRhbmdlbnQqPXRhbmdlbnRTcGFjZVBhcmFtcy55O1xuXG5mbG9hdCBpbnZtYXg9aW52ZXJz
ZXNxcnQobWF4KGRvdCh0YW5nZW50LHRhbmdlbnQpLGRvdChiaXRhbmdlbnQsYml0YW5nZW50KSkp
O1xucmV0dXJuIG1hdDModGFuZ2VudCppbnZtYXgsYml0YW5nZW50Kmludm1heCxub3JtYWwpO1xu
fVxuI2VuZGlmXG4jaWZkZWYgQlVNUFxuI2lmbmRlZiBQQlJcbiNpZiBCVU1QRElSRUNUVVYgPT0g
MVxuI2RlZmluZSB2QnVtcFVWIHZNYWluVVYxXG4jZWxpZiBCVU1QRElSRUNUVVYgPT0gMlxuI2Rl
ZmluZSB2QnVtcFVWIHZNYWluVVYyXG4jZWxzZVxudmFyeWluZyB2ZWMyIHZCdW1wVVY7XG4jZW5k
aWZcbnVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBTYW1wbGVyO1xuI2VuZGlmXG52ZWMzIHBlcnR1cmJO
b3JtYWwobWF0MyBjb3RhbmdlbnRGcmFtZSx2ZWMyIHV2KVxue1xucmV0dXJuIHBlcnR1cmJOb3Jt
YWwoY290YW5nZW50RnJhbWUsdGV4dHVyZTJEKGJ1bXBTYW1wbGVyLHV2KS54eXosdkJ1bXBJbmZv
cy55KTtcbn1cbnZlYzMgcGVydHVyYk5vcm1hbChtYXQzIGNvdGFuZ2VudEZyYW1lLHZlYzMgY29s
b3IpXG57XG5yZXR1cm4gcGVydHVyYk5vcm1hbChjb3RhbmdlbnRGcmFtZSxjb2xvcix2QnVtcElu
Zm9zLnkpO1xufVxuXG5tYXQzIGNvdGFuZ2VudF9mcmFtZSh2ZWMzIG5vcm1hbCx2ZWMzIHAsdmVj
MiB1dilcbntcbnJldHVybiBjb3RhbmdlbnRfZnJhbWUobm9ybWFsLHAsdXYsdlRhbmdlbnRTcGFj
ZVBhcmFtcyk7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKEJVTVApICYmIGRlZmluZWQoUEFSQUxM
QVgpXG5jb25zdCBmbG9hdCBtaW5TYW1wbGVzPTQuO1xuY29uc3QgZmxvYXQgbWF4U2FtcGxlcz0x
NS47XG5jb25zdCBpbnQgaU1heFNhbXBsZXM9MTU7XG5cbnZlYzIgcGFyYWxsYXhPY2NsdXNpb24o
dmVjMyB2Vmlld0RpckNvVCx2ZWMzIHZOb3JtYWxDb1QsdmVjMiB0ZXhDb29yZCxmbG9hdCBwYXJh
bGxheFNjYWxlKSB7XG5mbG9hdCBwYXJhbGxheExpbWl0PWxlbmd0aCh2Vmlld0RpckNvVC54eSkv
dlZpZXdEaXJDb1QuejtcbnBhcmFsbGF4TGltaXQqPXBhcmFsbGF4U2NhbGU7XG52ZWMyIHZPZmZz
ZXREaXI9bm9ybWFsaXplKHZWaWV3RGlyQ29ULnh5KTtcbnZlYzIgdk1heE9mZnNldD12T2Zmc2V0
RGlyKnBhcmFsbGF4TGltaXQ7XG5mbG9hdCBudW1TYW1wbGVzPW1heFNhbXBsZXMrKGRvdCh2Vmll
d0RpckNvVCx2Tm9ybWFsQ29UKSoobWluU2FtcGxlcy1tYXhTYW1wbGVzKSk7XG5mbG9hdCBzdGVw
U2l6ZT0xLjAvbnVtU2FtcGxlcztcblxuZmxvYXQgY3VyclJheUhlaWdodD0xLjA7XG52ZWMyIHZD
dXJyT2Zmc2V0PXZlYzIoMCwwKTtcbnZlYzIgdkxhc3RPZmZzZXQ9dmVjMigwLDApO1xuZmxvYXQg
bGFzdFNhbXBsZWRIZWlnaHQ9MS4wO1xuZmxvYXQgY3VyclNhbXBsZWRIZWlnaHQ9MS4wO1xuZm9y
IChpbnQgaT0wOyBpPGlNYXhTYW1wbGVzOyBpKyspXG57XG5jdXJyU2FtcGxlZEhlaWdodD10ZXh0
dXJlMkQoYnVtcFNhbXBsZXIsdkJ1bXBVVit2Q3Vyck9mZnNldCkudztcblxuaWYgKGN1cnJTYW1w
bGVkSGVpZ2h0PmN1cnJSYXlIZWlnaHQpXG57XG5mbG9hdCBkZWx0YTE9Y3VyclNhbXBsZWRIZWln
aHQtY3VyclJheUhlaWdodDtcbmZsb2F0IGRlbHRhMj0oY3VyclJheUhlaWdodCtzdGVwU2l6ZSkt
bGFzdFNhbXBsZWRIZWlnaHQ7XG5mbG9hdCByYXRpbz1kZWx0YTEvKGRlbHRhMStkZWx0YTIpO1xu
dkN1cnJPZmZzZXQ9KHJhdGlvKSogdkxhc3RPZmZzZXQrKDEuMC1yYXRpbykqdkN1cnJPZmZzZXQ7
XG5cbmJyZWFrO1xufVxuZWxzZVxue1xuY3VyclJheUhlaWdodC09c3RlcFNpemU7XG52TGFzdE9m
ZnNldD12Q3Vyck9mZnNldDtcbnZDdXJyT2Zmc2V0Kz1zdGVwU2l6ZSp2TWF4T2Zmc2V0O1xubGFz
dFNhbXBsZWRIZWlnaHQ9Y3VyclNhbXBsZWRIZWlnaHQ7XG59XG59XG5yZXR1cm4gdkN1cnJPZmZz
ZXQ7XG59XG52ZWMyIHBhcmFsbGF4T2Zmc2V0KHZlYzMgdmlld0RpcixmbG9hdCBoZWlnaHRTY2Fs
ZSlcbntcblxuZmxvYXQgaGVpZ2h0PXRleHR1cmUyRChidW1wU2FtcGxlcix2QnVtcFVWKS53O1xu
dmVjMiB0ZXhDb29yZE9mZnNldD1oZWlnaHRTY2FsZSp2aWV3RGlyLnh5KmhlaWdodDtcbnJldHVy
biAtdGV4Q29vcmRPZmZzZXQ7XG59XG4jZW5kaWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGJ1bXBGcmFnbWVudEZ1bmN0aW9ucyA9
IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9idW1wVmVydGV4LnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMv
U2hhZGVyc0luY2x1ZGUvYnVtcFZlcnRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGJ1bXBW
ZXJ0ZXggKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYnVtcFZlcnRleCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gYnVtcFZlcnRleDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJp
YWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdidW1wVmVydGV4JzsKK3ZhciBzaGFkZXIg
PSAiI2lmIGRlZmluZWQoQlVNUCkgfHwgZGVmaW5lZChQQVJBTExBWCkgfHwgZGVmaW5lZChDTEVB
UkNPQVRfQlVNUClcbiNpZiBkZWZpbmVkKFRBTkdFTlQpICYmIGRlZmluZWQoTk9STUFMKVxudmVj
MyB0Ym5Ob3JtYWw9bm9ybWFsaXplKG5vcm1hbFVwZGF0ZWQpO1xudmVjMyB0Ym5UYW5nZW50PW5v
cm1hbGl6ZSh0YW5nZW50VXBkYXRlZC54eXopO1xudmVjMyB0Ym5CaXRhbmdlbnQ9Y3Jvc3ModGJu
Tm9ybWFsLHRiblRhbmdlbnQpKnRhbmdlbnRVcGRhdGVkLnc7XG52VEJOPW1hdDMoZmluYWxXb3Js
ZCkqbWF0Myh0Ym5UYW5nZW50LHRibkJpdGFuZ2VudCx0Ym5Ob3JtYWwpO1xuI2VuZGlmXG4jZW5k
aWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZm
ZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAq
LwordmFyIGJ1bXBWZXJ0ZXggPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKwor
LyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYnVtcFZlcnRleERl
Y2xhcmF0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9i
dW1wVmVydGV4RGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IGJ1bXBWZXJ0ZXhEZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJidW1wVmVydGV4RGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJ1bXBWZXJ0
ZXhEZWNsYXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
Cit2YXIgbmFtZSA9ICdidW1wVmVydGV4RGVjbGFyYXRpb24nOwordmFyIHNoYWRlciA9ICIjaWYg
ZGVmaW5lZChCVU1QKSB8fCBkZWZpbmVkKFBBUkFMTEFYKSB8fCBkZWZpbmVkKENMRUFSQ09BVF9C
VU1QKVxuI2lmIGRlZmluZWQoVEFOR0VOVCkgJiYgZGVmaW5lZChOT1JNQUwpXG52YXJ5aW5nIG1h
dDMgdlRCTjtcbiNlbmRpZlxuI2VuZGlmXG4iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0g
PSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGJ1bXBWZXJ0ZXhEZWNsYXJhdGlvbiA9IHsg
bmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVudC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVudC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBjbGlwUGxhbmVGcmFnbWVudCAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJjbGlwUGxhbmVGcmFnbWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gY2xpcFBsYW5lRnJhZ21lbnQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3Qu
dHMiKTsKKwordmFyIG5hbWUgPSAnY2xpcFBsYW5lRnJhZ21lbnQnOwordmFyIHNoYWRlciA9ICIj
aWZkZWYgQ0xJUFBMQU5FXG5pZiAoZkNsaXBEaXN0YW5jZT4wLjApXG57XG5kaXNjYXJkO1xufVxu
I2VuZGlmXG4jaWZkZWYgQ0xJUFBMQU5FMlxuaWYgKGZDbGlwRGlzdGFuY2UyPjAuMClcbntcbmRp
c2NhcmQ7XG59XG4jZW5kaWZcbiNpZmRlZiBDTElQUExBTkUzXG5pZiAoZkNsaXBEaXN0YW5jZTM+
MC4wKVxue1xuZGlzY2FyZDtcbn1cbiNlbmRpZlxuI2lmZGVmIENMSVBQTEFORTRcbmlmIChmQ2xp
cERpc3RhbmNlND4wLjApXG57XG5kaXNjYXJkO1xufVxuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVy
c1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBjbGlwUGxhbmVGcmFn
bWVudCA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0
aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
Y2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IGNsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRpb24gKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9l
ZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdjbGlwUGxh
bmVGcmFnbWVudERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIENMSVBQTEFORVxu
dmFyeWluZyBmbG9hdCBmQ2xpcERpc3RhbmNlO1xuI2VuZGlmXG4jaWZkZWYgQ0xJUFBMQU5FMlxu
dmFyeWluZyBmbG9hdCBmQ2xpcERpc3RhbmNlMjtcbiNlbmRpZlxuI2lmZGVmIENMSVBQTEFORTNc
bnZhcnlpbmcgZmxvYXQgZkNsaXBEaXN0YW5jZTM7XG4jZW5kaWZcbiNpZmRlZiBDTElQUExBTkU0
XG52YXJ5aW5nIGZsb2F0IGZDbGlwRGlzdGFuY2U0O1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVy
c1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBjbGlwUGxhbmVGcmFn
bWVudERlY2xhcmF0aW9uID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZUZyYWdt
ZW50RGVjbGFyYXRpb24yLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1No
YWRlcnNJbmNsdWRlL2NsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRpb24yLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGNsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRp
b24yICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNsaXBQbGFuZUZyYWdt
ZW50RGVjbGFyYXRpb24yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGlwUGxhbmVGcmFnbWVudERl
Y2xhcmF0aW9uMjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2
YXIgbmFtZSA9ICdjbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uMic7Cit2YXIgc2hhZGVyID0g
IiNpZmRlZiBDTElQUExBTkVcbmluIGZsb2F0IGZDbGlwRGlzdGFuY2U7XG4jZW5kaWZcbiNpZmRl
ZiBDTElQUExBTkUyXG5pbiBmbG9hdCBmQ2xpcERpc3RhbmNlMjtcbiNlbmRpZlxuI2lmZGVmIENM
SVBQTEFORTNcbmluIGZsb2F0IGZDbGlwRGlzdGFuY2UzO1xuI2VuZGlmXG4jaWZkZWYgQ0xJUFBM
QU5FNFxuaW4gZmxvYXQgZkNsaXBEaXN0YW5jZTQ7XG4jZW5kaWYiOworX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJz
U3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGNsaXBQbGFuZUZyYWdt
ZW50RGVjbGFyYXRpb24yID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRl
eC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lVmVydGV4
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBjbGlwUGxhbmVWZXJ0ZXggKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY2xpcFBsYW5lVmVydGV4IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBjbGlwUGxhbmVWZXJ0ZXg7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9l
ZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnY2xpcFBsYW5lVmVydGV4JzsKK3ZhciBzaGFkZXIg
PSAiI2lmZGVmIENMSVBQTEFORVxuZkNsaXBEaXN0YW5jZT1kb3Qod29ybGRQb3MsdkNsaXBQbGFu
ZSk7XG4jZW5kaWZcbiNpZmRlZiBDTElQUExBTkUyXG5mQ2xpcERpc3RhbmNlMj1kb3Qod29ybGRQ
b3MsdkNsaXBQbGFuZTIpO1xuI2VuZGlmXG4jaWZkZWYgQ0xJUFBMQU5FM1xuZkNsaXBEaXN0YW5j
ZTM9ZG90KHdvcmxkUG9zLHZDbGlwUGxhbmUzKTtcbiNlbmRpZlxuI2lmZGVmIENMSVBQTEFORTRc
bmZDbGlwRGlzdGFuY2U0PWRvdCh3b3JsZFBvcyx2Q2xpcFBsYW5lNCk7XG4jZW5kaWYiOworX01h
dGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5j
bHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGNs
aXBQbGFuZVZlcnRleCA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVWZXJ0ZXhE
ZWNsYXJhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9jbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBjbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJjbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbiIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gY2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb247IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0
ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnY2xpcFBsYW5lVmVy
dGV4RGVjbGFyYXRpb24nOwordmFyIHNoYWRlciA9ICIjaWZkZWYgQ0xJUFBMQU5FXG51bmlmb3Jt
IHZlYzQgdkNsaXBQbGFuZTtcbnZhcnlpbmcgZmxvYXQgZkNsaXBEaXN0YW5jZTtcbiNlbmRpZlxu
I2lmZGVmIENMSVBQTEFORTJcbnVuaWZvcm0gdmVjNCB2Q2xpcFBsYW5lMjtcbnZhcnlpbmcgZmxv
YXQgZkNsaXBEaXN0YW5jZTI7XG4jZW5kaWZcbiNpZmRlZiBDTElQUExBTkUzXG51bmlmb3JtIHZl
YzQgdkNsaXBQbGFuZTM7XG52YXJ5aW5nIGZsb2F0IGZDbGlwRGlzdGFuY2UzO1xuI2VuZGlmXG4j
aWZkZWYgQ0xJUFBMQU5FNFxudW5pZm9ybSB2ZWM0IHZDbGlwUGxhbmU0O1xudmFyeWluZyBmbG9h
dCBmQ2xpcERpc3RhbmNlNDtcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9
IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgY2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb24g
PSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb24yLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9jbGlwUGxh
bmVWZXJ0ZXhEZWNsYXJhdGlvbjIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IGNsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uMiAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJjbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbjIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIGNsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uMjsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4v
TWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdjbGlwUGxhbmVWZXJ0ZXhEZWNs
YXJhdGlvbjInOwordmFyIHNoYWRlciA9ICIjaWZkZWYgQ0xJUFBMQU5FXG51bmlmb3JtIHZlYzQg
dkNsaXBQbGFuZTtcbm91dCBmbG9hdCBmQ2xpcERpc3RhbmNlO1xuI2VuZGlmXG4jaWZkZWYgQ0xJ
UFBMQU5FMlxudW5pZm9ybSB2ZWM0IHZDbGlwUGxhbmUyO1xub3V0IGZsb2F0IGZDbGlwRGlzdGFu
Y2UyO1xuI2VuZGlmXG4jaWZkZWYgQ0xJUFBMQU5FM1xudW5pZm9ybSB2ZWM0IHZDbGlwUGxhbmUz
O1xub3V0IGZsb2F0IGZDbGlwRGlzdGFuY2UzO1xuI2VuZGlmXG4jaWZkZWYgQ0xJUFBMQU5FNFxu
dW5pZm9ybSB2ZWM0IHZDbGlwUGxhbmU0O1xub3V0IGZsb2F0IGZDbGlwRGlzdGFuY2U0O1xuI2Vu
ZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVm
ZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4g
Ki8KK3ZhciBjbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbjIgPSB7IG5hbWU6IG5hbWUsIHNoYWRl
cjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0lu
Y2x1ZGUvZGVmYXVsdEZyYWdtZW50RGVjbGFyYXRpb24udHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoq
KiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZGVmYXVsdEZyYWdtZW50RGVjbGFyYXRpb24udHMg
KioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZGVmYXVsdEZyYWdtZW50RGVj
bGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZGVmYXVsdEZy
YWdtZW50RGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRlZmF1bHRGcmFnbWVudERl
Y2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3Zh
ciBuYW1lID0gJ2RlZmF1bHRGcmFnbWVudERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAidW5p
Zm9ybSB2ZWM0IHZEaWZmdXNlQ29sb3I7XG4jaWZkZWYgU1BFQ1VMQVJURVJNXG51bmlmb3JtIHZl
YzQgdlNwZWN1bGFyQ29sb3I7XG4jZW5kaWZcbnVuaWZvcm0gdmVjMyB2RW1pc3NpdmVDb2xvcjtc
bnVuaWZvcm0gZmxvYXQgdmlzaWJpbGl0eTtcblxuI2lmZGVmIERJRkZVU0VcbnVuaWZvcm0gdmVj
MiB2RGlmZnVzZUluZm9zO1xuI2VuZGlmXG4jaWZkZWYgQU1CSUVOVFxudW5pZm9ybSB2ZWMyIHZB
bWJpZW50SW5mb3M7XG4jZW5kaWZcbiNpZmRlZiBPUEFDSVRZXG51bmlmb3JtIHZlYzIgdk9wYWNp
dHlJbmZvcztcbiNlbmRpZlxuI2lmZGVmIEVNSVNTSVZFXG51bmlmb3JtIHZlYzIgdkVtaXNzaXZl
SW5mb3M7XG4jZW5kaWZcbiNpZmRlZiBMSUdIVE1BUFxudW5pZm9ybSB2ZWMyIHZMaWdodG1hcElu
Zm9zO1xuI2VuZGlmXG4jaWZkZWYgQlVNUFxudW5pZm9ybSB2ZWMzIHZCdW1wSW5mb3M7XG51bmlm
b3JtIHZlYzIgdlRhbmdlbnRTcGFjZVBhcmFtcztcbiNlbmRpZlxuI2lmIGRlZmluZWQoUkVGTEVD
VElPTk1BUF9TUEhFUklDQUwpIHx8IGRlZmluZWQoUkVGTEVDVElPTk1BUF9QUk9KRUNUSU9OKSB8
fCBkZWZpbmVkKFJFRlJBQ1RJT04pXG51bmlmb3JtIG1hdDQgdmlldztcbiNlbmRpZlxuI2lmZGVm
IFJFRlJBQ1RJT05cbnVuaWZvcm0gdmVjNCB2UmVmcmFjdGlvbkluZm9zO1xuI2lmbmRlZiBSRUZS
QUNUSU9OTUFQXzNEXG51bmlmb3JtIG1hdDQgcmVmcmFjdGlvbk1hdHJpeDtcbiNlbmRpZlxuI2lm
ZGVmIFJFRlJBQ1RJT05GUkVTTkVMXG51bmlmb3JtIHZlYzQgcmVmcmFjdGlvbkxlZnRDb2xvcjtc
bnVuaWZvcm0gdmVjNCByZWZyYWN0aW9uUmlnaHRDb2xvcjtcbiNlbmRpZlxuI2VuZGlmXG4jaWYg
ZGVmaW5lZChTUEVDVUxBUikgJiYgZGVmaW5lZChTUEVDVUxBUlRFUk0pXG51bmlmb3JtIHZlYzIg
dlNwZWN1bGFySW5mb3M7XG4jZW5kaWZcbiNpZmRlZiBESUZGVVNFRlJFU05FTFxudW5pZm9ybSB2
ZWM0IGRpZmZ1c2VMZWZ0Q29sb3I7XG51bmlmb3JtIHZlYzQgZGlmZnVzZVJpZ2h0Q29sb3I7XG4j
ZW5kaWZcbiNpZmRlZiBPUEFDSVRZRlJFU05FTFxudW5pZm9ybSB2ZWM0IG9wYWNpdHlQYXJ0cztc
biNlbmRpZlxuI2lmZGVmIEVNSVNTSVZFRlJFU05FTFxudW5pZm9ybSB2ZWM0IGVtaXNzaXZlTGVm
dENvbG9yO1xudW5pZm9ybSB2ZWM0IGVtaXNzaXZlUmlnaHRDb2xvcjtcbiNlbmRpZlxuXG4jaWZk
ZWYgUkVGTEVDVElPTlxudW5pZm9ybSB2ZWMyIHZSZWZsZWN0aW9uSW5mb3M7XG4jaWYgZGVmaW5l
ZChSRUZMRUNUSU9OTUFQX1BMQU5BUikgfHwgZGVmaW5lZChSRUZMRUNUSU9OTUFQX0NVQklDKSB8
fCBkZWZpbmVkKFJFRkxFQ1RJT05NQVBfUFJPSkVDVElPTikgfHwgZGVmaW5lZChSRUZMRUNUSU9O
TUFQX0VRVUlSRUNUQU5HVUxBUikgfHwgZGVmaW5lZChSRUZMRUNUSU9OTUFQX1NQSEVSSUNBTCkg
fHwgZGVmaW5lZChSRUZMRUNUSU9OTUFQX1NLWUJPWClcbnVuaWZvcm0gbWF0NCByZWZsZWN0aW9u
TWF0cml4O1xuI2VuZGlmXG4jaWZuZGVmIFJFRkxFQ1RJT05NQVBfU0tZQk9YXG4jaWYgZGVmaW5l
ZChVU0VfTE9DQUxfUkVGTEVDVElPTk1BUF9DVUJJQykgJiYgZGVmaW5lZChSRUZMRUNUSU9OTUFQ
X0NVQklDKVxudW5pZm9ybSB2ZWMzIHZSZWZsZWN0aW9uUG9zaXRpb247XG51bmlmb3JtIHZlYzMg
dlJlZmxlY3Rpb25TaXplO1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9ORlJFU05F
TFxudW5pZm9ybSB2ZWM0IHJlZmxlY3Rpb25MZWZ0Q29sb3I7XG51bmlmb3JtIHZlYzQgcmVmbGVj
dGlvblJpZ2h0Q29sb3I7XG4jZW5kaWZcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtu
YW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZGVmYXVsdEZyYWdtZW50RGVjbGFy
YXRpb24gPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZGVmYXVsdFVib0RlY2xhcmF0aW9uLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0VWJvRGVj
bGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHRVYm9E
ZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJkZWZhdWx0
VWJvRGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRlZmF1bHRVYm9EZWNsYXJhdGlv
bjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9
ICdkZWZhdWx0VWJvRGVjbGFyYXRpb24nOwordmFyIHNoYWRlciA9ICJsYXlvdXQoc3RkMTQwLGNv
bHVtbl9tYWpvcikgdW5pZm9ybTtcbnVuaWZvcm0gTWF0ZXJpYWxcbntcbnZlYzQgZGlmZnVzZUxl
ZnRDb2xvcjtcbnZlYzQgZGlmZnVzZVJpZ2h0Q29sb3I7XG52ZWM0IG9wYWNpdHlQYXJ0cztcbnZl
YzQgcmVmbGVjdGlvbkxlZnRDb2xvcjtcbnZlYzQgcmVmbGVjdGlvblJpZ2h0Q29sb3I7XG52ZWM0
IHJlZnJhY3Rpb25MZWZ0Q29sb3I7XG52ZWM0IHJlZnJhY3Rpb25SaWdodENvbG9yO1xudmVjNCBl
bWlzc2l2ZUxlZnRDb2xvcjtcbnZlYzQgZW1pc3NpdmVSaWdodENvbG9yO1xudmVjMiB2RGlmZnVz
ZUluZm9zO1xudmVjMiB2QW1iaWVudEluZm9zO1xudmVjMiB2T3BhY2l0eUluZm9zO1xudmVjMiB2
UmVmbGVjdGlvbkluZm9zO1xudmVjMyB2UmVmbGVjdGlvblBvc2l0aW9uO1xudmVjMyB2UmVmbGVj
dGlvblNpemU7XG52ZWMyIHZFbWlzc2l2ZUluZm9zO1xudmVjMiB2TGlnaHRtYXBJbmZvcztcbnZl
YzIgdlNwZWN1bGFySW5mb3M7XG52ZWMzIHZCdW1wSW5mb3M7XG5tYXQ0IGRpZmZ1c2VNYXRyaXg7
XG5tYXQ0IGFtYmllbnRNYXRyaXg7XG5tYXQ0IG9wYWNpdHlNYXRyaXg7XG5tYXQ0IHJlZmxlY3Rp
b25NYXRyaXg7XG5tYXQ0IGVtaXNzaXZlTWF0cml4O1xubWF0NCBsaWdodG1hcE1hdHJpeDtcbm1h
dDQgc3BlY3VsYXJNYXRyaXg7XG5tYXQ0IGJ1bXBNYXRyaXg7XG52ZWMyIHZUYW5nZW50U3BhY2VQ
YXJhbXM7XG5mbG9hdCBwb2ludFNpemU7XG5tYXQ0IHJlZnJhY3Rpb25NYXRyaXg7XG52ZWM0IHZS
ZWZyYWN0aW9uSW5mb3M7XG52ZWM0IHZTcGVjdWxhckNvbG9yO1xudmVjMyB2RW1pc3NpdmVDb2xv
cjtcbmZsb2F0IHZpc2liaWxpdHk7XG52ZWM0IHZEaWZmdXNlQ29sb3I7XG59O1xudW5pZm9ybSBT
Y2VuZSB7XG5tYXQ0IHZpZXdQcm9qZWN0aW9uO1xuI2lmZGVmIE1VTFRJVklFV1xubWF0NCB2aWV3
UHJvamVjdGlvblI7XG4jZW5kaWZcbm1hdDQgdmlldztcbn07XG4iOworX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJz
U3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGRlZmF1bHRVYm9EZWNs
YXJhdGlvbiA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0VmVydGV4RGVjbGFyYXRp
b24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2RlZmF1
bHRWZXJ0ZXhEZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogZGVmYXVsdFZlcnRleERlY2xhcmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgImRlZmF1bHRWZXJ0ZXhEZWNsYXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
ZGVmYXVsdFZlcnRleERlY2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZm
ZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2RlZmF1bHRWZXJ0ZXhEZWNsYXJhdGlvbic7Cit2YXIg
c2hhZGVyID0gIlxudW5pZm9ybSBtYXQ0IHZpZXdQcm9qZWN0aW9uO1xudW5pZm9ybSBtYXQ0IHZp
ZXc7XG4jaWZkZWYgRElGRlVTRVxudW5pZm9ybSBtYXQ0IGRpZmZ1c2VNYXRyaXg7XG51bmlmb3Jt
IHZlYzIgdkRpZmZ1c2VJbmZvcztcbiNlbmRpZlxuI2lmZGVmIEFNQklFTlRcbnVuaWZvcm0gbWF0
NCBhbWJpZW50TWF0cml4O1xudW5pZm9ybSB2ZWMyIHZBbWJpZW50SW5mb3M7XG4jZW5kaWZcbiNp
ZmRlZiBPUEFDSVRZXG51bmlmb3JtIG1hdDQgb3BhY2l0eU1hdHJpeDtcbnVuaWZvcm0gdmVjMiB2
T3BhY2l0eUluZm9zO1xuI2VuZGlmXG4jaWZkZWYgRU1JU1NJVkVcbnVuaWZvcm0gdmVjMiB2RW1p
c3NpdmVJbmZvcztcbnVuaWZvcm0gbWF0NCBlbWlzc2l2ZU1hdHJpeDtcbiNlbmRpZlxuI2lmZGVm
IExJR0hUTUFQXG51bmlmb3JtIHZlYzIgdkxpZ2h0bWFwSW5mb3M7XG51bmlmb3JtIG1hdDQgbGln
aHRtYXBNYXRyaXg7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKFNQRUNVTEFSKSAmJiBkZWZpbmVkKFNQ
RUNVTEFSVEVSTSlcbnVuaWZvcm0gdmVjMiB2U3BlY3VsYXJJbmZvcztcbnVuaWZvcm0gbWF0NCBz
cGVjdWxhck1hdHJpeDtcbiNlbmRpZlxuI2lmZGVmIEJVTVBcbnVuaWZvcm0gdmVjMyB2QnVtcElu
Zm9zO1xudW5pZm9ybSBtYXQ0IGJ1bXBNYXRyaXg7XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9O
XG51bmlmb3JtIG1hdDQgcmVmbGVjdGlvbk1hdHJpeDtcbiNlbmRpZlxuI2lmZGVmIFBPSU5UU0la
RVxudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XG4jZW5kaWZcbiI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNT
dG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZGVmYXVsdFZlcnRleERl
Y2xhcmF0aW9uID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0p
LAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2RlcHRoUHJlUGFzcy50cyI6Cisv
KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZGVwdGhQcmVQYXNzLnRzICoqKiEKKyAgXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBkZXB0aFByZVBhc3MgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiZGVwdGhQcmVQYXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZXB0aFByZVBhc3M7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRl
cmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAn
ZGVwdGhQcmVQYXNzJzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIERFUFRIUFJFUEFTU1xuZ2xfRnJh
Z0NvbG9yPXZlYzQoMC4sMC4sMC4sMS4wKTtcbnJldHVybjtcbiNlbmRpZiI7CitfTWF0ZXJpYWxz
X2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1No
YWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZGVwdGhQcmVQ
YXNzID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ZvZ0ZyYWdtZW50LnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ZvZ0ZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IGZvZ0ZyYWdtZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImZv
Z0ZyYWdtZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb2dGcmFnbWVudDsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdmb2dGcmFnbWVudCc7
Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBGT0dcbmZsb2F0IGZvZz1DYWxjRm9nRmFjdG9yKCk7XG5j
b2xvci5yZ2I9Zm9nKmNvbG9yLnJnYisoMS4wLWZvZykqdkZvZ0NvbG9yO1xuI2VuZGlmIjsKK19N
YXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLklu
Y2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBm
b2dGcmFnbWVudCA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9
KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9mb2dGcmFnbWVudERlY2xhcmF0
aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZm9nRnJh
Z21lbnREZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGZv
Z0ZyYWdtZW50RGVjbGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiZm9nRnJhZ21lbnREZWNsYXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZm9nRnJhZ21l
bnREZWNsYXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
Cit2YXIgbmFtZSA9ICdmb2dGcmFnbWVudERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAiI2lm
ZGVmIEZPR1xuI2RlZmluZSBGT0dNT0RFX05PTkUgMC5cbiNkZWZpbmUgRk9HTU9ERV9FWFAgMS5c
biNkZWZpbmUgRk9HTU9ERV9FWFAyIDIuXG4jZGVmaW5lIEZPR01PREVfTElORUFSIDMuXG4jZGVm
aW5lIEUgMi43MTgyOFxudW5pZm9ybSB2ZWM0IHZGb2dJbmZvcztcbnVuaWZvcm0gdmVjMyB2Rm9n
Q29sb3I7XG52YXJ5aW5nIHZlYzMgdkZvZ0Rpc3RhbmNlO1xuZmxvYXQgQ2FsY0ZvZ0ZhY3Rvcigp
XG57XG5mbG9hdCBmb2dDb2VmZj0xLjA7XG5mbG9hdCBmb2dTdGFydD12Rm9nSW5mb3MueTtcbmZs
b2F0IGZvZ0VuZD12Rm9nSW5mb3MuejtcbmZsb2F0IGZvZ0RlbnNpdHk9dkZvZ0luZm9zLnc7XG5m
bG9hdCBmb2dEaXN0YW5jZT1sZW5ndGgodkZvZ0Rpc3RhbmNlKTtcbmlmIChGT0dNT0RFX0xJTkVB
UiA9PSB2Rm9nSW5mb3MueClcbntcbmZvZ0NvZWZmPShmb2dFbmQtZm9nRGlzdGFuY2UpLyhmb2dF
bmQtZm9nU3RhcnQpO1xufVxuZWxzZSBpZiAoRk9HTU9ERV9FWFAgPT0gdkZvZ0luZm9zLngpXG57
XG5mb2dDb2VmZj0xLjAvcG93KEUsZm9nRGlzdGFuY2UqZm9nRGVuc2l0eSk7XG59XG5lbHNlIGlm
IChGT0dNT0RFX0VYUDIgPT0gdkZvZ0luZm9zLngpXG57XG5mb2dDb2VmZj0xLjAvcG93KEUsZm9n
RGlzdGFuY2UqZm9nRGlzdGFuY2UqZm9nRGVuc2l0eSpmb2dEZW5zaXR5KTtcbn1cbnJldHVybiBj
bGFtcChmb2dDb2VmZiwwLjAsMS4wKTtcbn1cbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9y
ZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZm9nRnJhZ21lbnREZWNsYXJh
dGlvbiA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKwor
LyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9mb2dWZXJ0ZXgudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2ZvZ1ZlcnRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZm9n
VmVydGV4ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImZvZ1ZlcnRleCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gZm9nVmVydGV4OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlh
bHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2ZvZ1ZlcnRleCc7Cit2YXIgc2hhZGVyID0g
IiNpZmRlZiBGT0dcbnZGb2dEaXN0YW5jZT0odmlldyp3b3JsZFBvcykueHl6O1xuI2VuZGlmIjsK
K19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJd
LkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3Zh
ciBmb2dWZXJ0ZXggPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZm9nVmVydGV4RGVjbGFyYXRp
b24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZm9nVmVydGV4
RGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZm9nVmVydGV4
RGVjbGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZm9nVmVy
dGV4RGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvZ1ZlcnRleERlY2xhcmF0aW9u
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0
ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0g
J2ZvZ1ZlcnRleERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIEZPR1xudmFyeWlu
ZyB2ZWMzIHZGb2dEaXN0YW5jZTtcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1l
XSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZm9nVmVydGV4RGVjbGFyYXRpb24gPSB7
IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZnJlc25lbEZ1bmN0aW9uLnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9mcmVzbmVsRnVuY3Rpb24udHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IGZyZXNuZWxGdW5jdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJmcmVzbmVsRnVuY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZyZXNuZWxG
dW5jdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3Rf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
Ly4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIg
bmFtZSA9ICdmcmVzbmVsRnVuY3Rpb24nOwordmFyIHNoYWRlciA9ICIjaWZkZWYgRlJFU05FTFxu
ZmxvYXQgY29tcHV0ZUZyZXNuZWxUZXJtKHZlYzMgdmlld0RpcmVjdGlvbix2ZWMzIHdvcmxkTm9y
bWFsLGZsb2F0IGJpYXMsZmxvYXQgcG93ZXIpXG57XG5mbG9hdCBmcmVzbmVsVGVybT1wb3coYmlh
cythYnMoZG90KHZpZXdEaXJlY3Rpb24sd29ybGROb3JtYWwpKSxwb3dlcik7XG5yZXR1cm4gY2xh
bXAoZnJlc25lbFRlcm0sMC4sMS4pO1xufVxuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3Jl
W25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBmcmVzbmVsRnVuY3Rpb24gPSB7
IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaGFybW9uaWNzRnVuY3Rpb25zLnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9oYXJtb25pY3NGdW5jdGlvbnMudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGhhcm1vbmljc0Z1bmN0aW9ucyAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJoYXJtb25pY3NGdW5jdGlvbnMiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIGhhcm1vbmljc0Z1bmN0aW9uczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxz
L2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdoYXJtb25pY3NGdW5jdGlvbnMnOwordmFyIHNo
YWRlciA9ICIjaWZkZWYgVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05NQVBcbiNpZmRlZiBTUEhF
UklDQUxfSEFSTU9OSUNTXG5cblxuXG5cblxuXG5cbnZlYzMgY29tcHV0ZUVudmlyb25tZW50SXJy
YWRpYW5jZSh2ZWMzIG5vcm1hbCkge1xucmV0dXJuIHZTcGhlcmljYWxMMDBcbit2U3BoZXJpY2Fs
TDFfMSoobm9ybWFsLnkpXG4rdlNwaGVyaWNhbEwxMCoobm9ybWFsLnopXG4rdlNwaGVyaWNhbEwx
MSoobm9ybWFsLngpXG4rdlNwaGVyaWNhbEwyXzIqKG5vcm1hbC55Km5vcm1hbC54KVxuK3ZTcGhl
cmljYWxMMl8xKihub3JtYWwueSpub3JtYWwueilcbit2U3BoZXJpY2FsTDIwKigoMy4wKm5vcm1h
bC56Km5vcm1hbC56KS0xLjApXG4rdlNwaGVyaWNhbEwyMSoobm9ybWFsLnoqbm9ybWFsLngpXG4r
dlNwaGVyaWNhbEwyMioobm9ybWFsLngqbm9ybWFsLngtKG5vcm1hbC55Km5vcm1hbC55KSk7XG59
XG4jZWxzZVxuXG52ZWMzIGNvbXB1dGVFbnZpcm9ubWVudElycmFkaWFuY2UodmVjMyBub3JtYWwp
IHtcblxuXG5cblxuXG5cblxuXG5cbmZsb2F0IE54PW5vcm1hbC54O1xuZmxvYXQgTnk9bm9ybWFs
Lnk7XG5mbG9hdCBOej1ub3JtYWwuejtcbnZlYzMgQzE9dlNwaGVyaWNhbFpaLnJnYjtcbnZlYzMg
Q3g9dlNwaGVyaWNhbFgucmdiO1xudmVjMyBDeT12U3BoZXJpY2FsWS5yZ2I7XG52ZWMzIEN6PXZT
cGhlcmljYWxaLnJnYjtcbnZlYzMgQ3h4X3p6PXZTcGhlcmljYWxYWF9aWi5yZ2I7XG52ZWMzIEN5
eV96ej12U3BoZXJpY2FsWVlfWloucmdiO1xudmVjMyBDeHk9dlNwaGVyaWNhbFhZLnJnYjtcbnZl
YzMgQ3l6PXZTcGhlcmljYWxZWi5yZ2I7XG52ZWMzIEN6eD12U3BoZXJpY2FsWlgucmdiO1xudmVj
MyBhMT1DeXlfenoqTnkrQ3k7XG52ZWMzIGEyPUN5eipOeithMTtcbnZlYzMgYjE9Q3p4Kk56K0N4
O1xudmVjMyBiMj1DeHkqTnkrYjE7XG52ZWMzIGIzPUN4eF96eipOeCtiMjtcbnZlYzMgdDE9Q3oq
TnorQzE7XG52ZWMzIHQyPWEyKk55K3QxO1xudmVjMyB0Mz1iMypOeCt0MjtcbnJldHVybiB0Mztc
bn1cbiNlbmRpZlxuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVy
OworLyoqIEBoaWRkZW4gKi8KK3ZhciBoYXJtb25pY3NGdW5jdGlvbnMgPSB7IG5hbWU6IG5hbWUs
IHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hh
ZGVyc0luY2x1ZGUvaGVscGVyRnVuY3Rpb25zLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFk
ZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IGhlbHBlckZ1bmN0aW9ucyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJo
ZWxwZXJGdW5jdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhlbHBlckZ1bmN0aW9uczsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFs
cy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdoZWxw
ZXJGdW5jdGlvbnMnOwordmFyIHNoYWRlciA9ICJjb25zdCBmbG9hdCBQST0zLjE0MTU5MjY1MzU4
OTc5MzIzODQ2MjY0MzM4MzI3OTU7XG5jb25zdCBmbG9hdCBMaW5lYXJFbmNvZGVQb3dlckFwcHJv
eD0yLjI7XG5jb25zdCBmbG9hdCBHYW1tYUVuY29kZVBvd2VyQXBwcm94PTEuMC9MaW5lYXJFbmNv
ZGVQb3dlckFwcHJveDtcbmNvbnN0IHZlYzMgTHVtaW5hbmNlRW5jb2RlQXBwcm94PXZlYzMoMC4y
MTI2LDAuNzE1MiwwLjA3MjIpO1xuY29uc3QgZmxvYXQgRXBzaWxvbj0wLjAwMDAwMDE7XG4jZGVm
aW5lIHNhdHVyYXRlKHgpIGNsYW1wKHgsMC4wLDEuMClcbiNkZWZpbmUgYWJzRXBzKHgpIGFicyh4
KStFcHNpbG9uXG4jZGVmaW5lIG1heEVwcyh4KSBtYXgoeCxFcHNpbG9uKVxuI2RlZmluZSBzYXR1
cmF0ZUVwcyh4KSBjbGFtcCh4LEVwc2lsb24sMS4wKVxubWF0MyB0cmFuc3Bvc2VNYXQzKG1hdDMg
aW5NYXRyaXgpIHtcbnZlYzMgaTA9aW5NYXRyaXhbMF07XG52ZWMzIGkxPWluTWF0cml4WzFdO1xu
dmVjMyBpMj1pbk1hdHJpeFsyXTtcbm1hdDMgb3V0TWF0cml4PW1hdDMoXG52ZWMzKGkwLngsaTEu
eCxpMi54KSxcbnZlYzMoaTAueSxpMS55LGkyLnkpLFxudmVjMyhpMC56LGkxLnosaTIueilcbik7
XG5yZXR1cm4gb3V0TWF0cml4O1xufVxuXG5tYXQzIGludmVyc2VNYXQzKG1hdDMgaW5NYXRyaXgp
IHtcbmZsb2F0IGEwMD1pbk1hdHJpeFswXVswXSxhMDE9aW5NYXRyaXhbMF1bMV0sYTAyPWluTWF0
cml4WzBdWzJdO1xuZmxvYXQgYTEwPWluTWF0cml4WzFdWzBdLGExMT1pbk1hdHJpeFsxXVsxXSxh
MTI9aW5NYXRyaXhbMV1bMl07XG5mbG9hdCBhMjA9aW5NYXRyaXhbMl1bMF0sYTIxPWluTWF0cml4
WzJdWzFdLGEyMj1pbk1hdHJpeFsyXVsyXTtcbmZsb2F0IGIwMT1hMjIqYTExLWExMiphMjE7XG5m
bG9hdCBiMTE9LWEyMiphMTArYTEyKmEyMDtcbmZsb2F0IGIyMT1hMjEqYTEwLWExMSphMjA7XG5m
bG9hdCBkZXQ9YTAwKmIwMSthMDEqYjExK2EwMipiMjE7XG5yZXR1cm4gbWF0MyhiMDEsKC1hMjIq
YTAxK2EwMiphMjEpLChhMTIqYTAxLWEwMiphMTEpLFxuYjExLChhMjIqYTAwLWEwMiphMjApLCgt
YTEyKmEwMCthMDIqYTEwKSxcbmIyMSwoLWEyMSphMDArYTAxKmEyMCksKGExMSphMDAtYTAxKmEx
MCkpL2RldDtcbn1cbnZlYzMgdG9MaW5lYXJTcGFjZSh2ZWMzIGNvbG9yKVxue1xucmV0dXJuIHBv
dyhjb2xvcix2ZWMzKExpbmVhckVuY29kZVBvd2VyQXBwcm94KSk7XG59XG52ZWMzIHRvR2FtbWFT
cGFjZSh2ZWMzIGNvbG9yKVxue1xucmV0dXJuIHBvdyhjb2xvcix2ZWMzKEdhbW1hRW5jb2RlUG93
ZXJBcHByb3gpKTtcbn1cbmZsb2F0IHNxdWFyZShmbG9hdCB2YWx1ZSlcbntcbnJldHVybiB2YWx1
ZSp2YWx1ZTtcbn1cbmZsb2F0IHBvdzUoZmxvYXQgdmFsdWUpIHtcbmZsb2F0IHNxPXZhbHVlKnZh
bHVlO1xucmV0dXJuIHNxKnNxKnZhbHVlO1xufVxuZmxvYXQgZ2V0THVtaW5hbmNlKHZlYzMgY29s
b3IpXG57XG5yZXR1cm4gY2xhbXAoZG90KGNvbG9yLEx1bWluYW5jZUVuY29kZUFwcHJveCksMC4s
MS4pO1xufVxuXG5mbG9hdCBnZXRSYW5kKHZlYzIgc2VlZCkge1xucmV0dXJuIGZyYWN0KHNpbihk
b3Qoc2VlZC54eSAsdmVjMigxMi45ODk4LDc4LjIzMykpKSo0Mzc1OC41NDUzKTtcbn1cbmZsb2F0
IGRpdGhlcih2ZWMyIHNlZWQsZmxvYXQgdmFyaWFuY2VBbW91bnQpIHtcbmZsb2F0IHJhbmQ9Z2V0
UmFuZChzZWVkKTtcbmZsb2F0IGRpdGhlcj1taXgoLXZhcmlhbmNlQW1vdW50LzI1NS4wLHZhcmlh
bmNlQW1vdW50LzI1NS4wLHJhbmQpO1xucmV0dXJuIGRpdGhlcjtcbn1cblxuY29uc3QgZmxvYXQg
cmdiZE1heFJhbmdlPTI1NS4wO1xudmVjNCB0b1JHQkQodmVjMyBjb2xvcikge1xuZmxvYXQgbWF4
UkdCPW1heEVwcyhtYXgoY29sb3IucixtYXgoY29sb3IuZyxjb2xvci5iKSkpO1xuZmxvYXQgRD1t
YXgocmdiZE1heFJhbmdlL21heFJHQiwxLik7XG5EPWNsYW1wKGZsb29yKEQpLzI1NS4wLDAuLDEu
KTtcblxudmVjMyByZ2I9Y29sb3IucmdiKkQ7XG5cbnJnYj10b0dhbW1hU3BhY2UocmdiKTtcbnJl
dHVybiB2ZWM0KHJnYixEKTtcbn1cbnZlYzMgZnJvbVJHQkQodmVjNCByZ2JkKSB7XG5cbnJnYmQu
cmdiPXRvTGluZWFyU3BhY2UocmdiZC5yZ2IpO1xuXG5yZXR1cm4gcmdiZC5yZ2IvcmdiZC5hO1xu
fSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZl
Y3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICov
Cit2YXIgaGVscGVyRnVuY3Rpb25zID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9Owor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJv
Y2Vzc2luZ0RlY2xhcmF0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1No
YWRlcnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0
aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbWFnZVByb2Nlc3NpbmdEZWNsYXJhdGlvbjsgfSk7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFs
cy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdpbWFn
ZVByb2Nlc3NpbmdEZWNsYXJhdGlvbic7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBFWFBPU1VSRVxu
dW5pZm9ybSBmbG9hdCBleHBvc3VyZUxpbmVhcjtcbiNlbmRpZlxuI2lmZGVmIENPTlRSQVNUXG51
bmlmb3JtIGZsb2F0IGNvbnRyYXN0O1xuI2VuZGlmXG4jaWZkZWYgVklHTkVUVEVcbnVuaWZvcm0g
dmVjMiB2SW52ZXJzZVNjcmVlblNpemU7XG51bmlmb3JtIHZlYzQgdmlnbmV0dGVTZXR0aW5nczE7
XG51bmlmb3JtIHZlYzQgdmlnbmV0dGVTZXR0aW5nczI7XG4jZW5kaWZcbiNpZmRlZiBDT0xPUkNV
UlZFU1xudW5pZm9ybSB2ZWM0IHZDYW1lcmFDb2xvckN1cnZlTmVnYXRpdmU7XG51bmlmb3JtIHZl
YzQgdkNhbWVyYUNvbG9yQ3VydmVOZXV0cmFsO1xudW5pZm9ybSB2ZWM0IHZDYW1lcmFDb2xvckN1
cnZlUG9zaXRpdmU7XG4jZW5kaWZcbiNpZmRlZiBDT0xPUkdSQURJTkdcbiNpZmRlZiBDT0xPUkdS
QURJTkczRFxudW5pZm9ybSBoaWdocCBzYW1wbGVyM0QgdHhDb2xvclRyYW5zZm9ybTtcbiNlbHNl
XG51bmlmb3JtIHNhbXBsZXIyRCB0eENvbG9yVHJhbnNmb3JtO1xuI2VuZGlmXG51bmlmb3JtIHZl
YzQgY29sb3JUcmFuc2Zvcm1TZXR0aW5ncztcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9y
ZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgaW1hZ2VQcm9jZXNzaW5nRGVj
bGFyYXRpb24gPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSks
CisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVuY3Rp
b25zLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbWFn
ZVByb2Nlc3NpbmdGdW5jdGlvbnMudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IGltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9ucyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJpbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9uczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2Vm
ZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdpbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnMnOwordmFy
IHNoYWRlciA9ICIjaWYgZGVmaW5lZChDT0xPUkdSQURJTkcpICYmICFkZWZpbmVkKENPTE9SR1JB
RElORzNEKVxuXG52ZWMzIHNhbXBsZVRleHR1cmUzRChzYW1wbGVyMkQgY29sb3JUcmFuc2Zvcm0s
dmVjMyBjb2xvcix2ZWMyIHNhbXBsZXIzZFNldHRpbmcpXG57XG5mbG9hdCBzbGljZVNpemU9Mi4w
KnNhbXBsZXIzZFNldHRpbmcueDtcbiNpZmRlZiBTQU1QTEVSM0RHUkVFTkRFUFRIXG5mbG9hdCBz
bGljZUNvbnRpbnVvdXM9KGNvbG9yLmctc2FtcGxlcjNkU2V0dGluZy54KSpzYW1wbGVyM2RTZXR0
aW5nLnk7XG4jZWxzZVxuZmxvYXQgc2xpY2VDb250aW51b3VzPShjb2xvci5iLXNhbXBsZXIzZFNl
dHRpbmcueCkqc2FtcGxlcjNkU2V0dGluZy55O1xuI2VuZGlmXG5mbG9hdCBzbGljZUludGVnZXI9
Zmxvb3Ioc2xpY2VDb250aW51b3VzKTtcblxuXG5mbG9hdCBzbGljZUZyYWN0aW9uPXNsaWNlQ29u
dGludW91cy1zbGljZUludGVnZXI7XG4jaWZkZWYgU0FNUExFUjNER1JFRU5ERVBUSFxudmVjMiBz
bGljZVVWPWNvbG9yLnJiO1xuI2Vsc2VcbnZlYzIgc2xpY2VVVj1jb2xvci5yZztcbiNlbmRpZlxu
c2xpY2VVVi54Kj1zbGljZVNpemU7XG5zbGljZVVWLngrPXNsaWNlSW50ZWdlcipzbGljZVNpemU7
XG5zbGljZVVWPXNhdHVyYXRlKHNsaWNlVVYpO1xudmVjNCBzbGljZTBDb2xvcj10ZXh0dXJlMkQo
Y29sb3JUcmFuc2Zvcm0sc2xpY2VVVik7XG5zbGljZVVWLngrPXNsaWNlU2l6ZTtcbnNsaWNlVVY9
c2F0dXJhdGUoc2xpY2VVVik7XG52ZWM0IHNsaWNlMUNvbG9yPXRleHR1cmUyRChjb2xvclRyYW5z
Zm9ybSxzbGljZVVWKTtcbnZlYzMgcmVzdWx0PW1peChzbGljZTBDb2xvci5yZ2Isc2xpY2UxQ29s
b3IucmdiLHNsaWNlRnJhY3Rpb24pO1xuI2lmZGVmIFNBTVBMRVIzREJHUk1BUFxuY29sb3Iucmdi
PXJlc3VsdC5yZ2I7XG4jZWxzZVxuY29sb3IucmdiPXJlc3VsdC5iZ3I7XG4jZW5kaWZcbnJldHVy
biBjb2xvcjtcbn1cbiNlbmRpZlxuI2lmZGVmIFRPTkVNQVBQSU5HX0FDRVNcblxuXG5cblxuXG5j
b25zdCBtYXQzIEFDRVNJbnB1dE1hdD1tYXQzKFxudmVjMygwLjU5NzE5LDAuMDc2MDAsMC4wMjg0
MCksXG52ZWMzKDAuMzU0NTgsMC45MDgzNCwwLjEzMzgzKSxcbnZlYzMoMC4wNDgyMywwLjAxNTY2
LDAuODM3NzcpXG4pO1xuXG5jb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQ9bWF0MyhcbnZlYzMoIDEu
NjA0NzUsLTAuMTAyMDgsLTAuMDAzMjcpLFxudmVjMygtMC41MzEwOCwxLjEwODEzLC0wLjA3Mjc2
KSxcbnZlYzMoLTAuMDczNjcsLTAuMDA2MDUsMS4wNzYwMilcbik7XG52ZWMzIFJSVEFuZE9EVEZp
dCh2ZWMzIHYpXG57XG52ZWMzIGE9dioodiswLjAyNDU3ODYpLTAuMDAwMDkwNTM3O1xudmVjMyBi
PXYqKDAuOTgzNzI5KnYrMC40MzI5NTEwKSswLjIzODA4MTtcbnJldHVybiBhL2I7XG59XG52ZWMz
IEFDRVNGaXR0ZWQodmVjMyBjb2xvcilcbntcbmNvbG9yPUFDRVNJbnB1dE1hdCpjb2xvcjtcblxu
Y29sb3I9UlJUQW5kT0RURml0KGNvbG9yKTtcbmNvbG9yPUFDRVNPdXRwdXRNYXQqY29sb3I7XG5c
bmNvbG9yPXNhdHVyYXRlKGNvbG9yKTtcbnJldHVybiBjb2xvcjtcbn1cbiNlbmRpZlxudmVjNCBh
cHBseUltYWdlUHJvY2Vzc2luZyh2ZWM0IHJlc3VsdCkge1xuI2lmZGVmIEVYUE9TVVJFXG5yZXN1
bHQucmdiKj1leHBvc3VyZUxpbmVhcjtcbiNlbmRpZlxuI2lmZGVmIFZJR05FVFRFXG5cbnZlYzIg
dmlld3BvcnRYWT1nbF9GcmFnQ29vcmQueHkqdkludmVyc2VTY3JlZW5TaXplO1xudmlld3BvcnRY
WT12aWV3cG9ydFhZKjIuMC0xLjA7XG52ZWMzIHZpZ25ldHRlWFkxPXZlYzModmlld3BvcnRYWSp2
aWduZXR0ZVNldHRpbmdzMS54eSt2aWduZXR0ZVNldHRpbmdzMS56dywxLjApO1xuZmxvYXQgdmln
bmV0dGVUZXJtPWRvdCh2aWduZXR0ZVhZMSx2aWduZXR0ZVhZMSk7XG5mbG9hdCB2aWduZXR0ZT1w
b3codmlnbmV0dGVUZXJtLHZpZ25ldHRlU2V0dGluZ3MyLncpO1xuXG52ZWMzIHZpZ25ldHRlQ29s
b3I9dmlnbmV0dGVTZXR0aW5nczIucmdiO1xuI2lmZGVmIFZJR05FVFRFQkxFTkRNT0RFTVVMVElQ
TFlcbnZlYzMgdmlnbmV0dGVDb2xvck11bHRpcGxpZXI9bWl4KHZpZ25ldHRlQ29sb3IsdmVjMygx
LDEsMSksdmlnbmV0dGUpO1xucmVzdWx0LnJnYio9dmlnbmV0dGVDb2xvck11bHRpcGxpZXI7XG4j
ZW5kaWZcbiNpZmRlZiBWSUdORVRURUJMRU5ETU9ERU9QQVFVRVxucmVzdWx0LnJnYj1taXgodmln
bmV0dGVDb2xvcixyZXN1bHQucmdiLHZpZ25ldHRlKTtcbiNlbmRpZlxuI2VuZGlmXG4jaWZkZWYg
VE9ORU1BUFBJTkdcbiNpZmRlZiBUT05FTUFQUElOR19BQ0VTXG5yZXN1bHQucmdiPUFDRVNGaXR0
ZWQocmVzdWx0LnJnYik7XG4jZWxzZVxuY29uc3QgZmxvYXQgdG9uZW1hcHBpbmdDYWxpYnJhdGlv
bj0xLjU5MDU3OTtcbnJlc3VsdC5yZ2I9MS4wLWV4cDIoLXRvbmVtYXBwaW5nQ2FsaWJyYXRpb24q
cmVzdWx0LnJnYik7XG4jZW5kaWZcbiNlbmRpZlxuXG5yZXN1bHQucmdiPXRvR2FtbWFTcGFjZShy
ZXN1bHQucmdiKTtcbnJlc3VsdC5yZ2I9c2F0dXJhdGUocmVzdWx0LnJnYik7XG4jaWZkZWYgQ09O
VFJBU1RcblxudmVjMyByZXN1bHRIaWdoQ29udHJhc3Q9cmVzdWx0LnJnYipyZXN1bHQucmdiKigz
LjAtMi4wKnJlc3VsdC5yZ2IpO1xuaWYgKGNvbnRyYXN0PDEuMCkge1xuXG5yZXN1bHQucmdiPW1p
eCh2ZWMzKDAuNSwwLjUsMC41KSxyZXN1bHQucmdiLGNvbnRyYXN0KTtcbn0gZWxzZSB7XG5cbnJl
c3VsdC5yZ2I9bWl4KHJlc3VsdC5yZ2IscmVzdWx0SGlnaENvbnRyYXN0LGNvbnRyYXN0LTEuMCk7
XG59XG4jZW5kaWZcblxuI2lmZGVmIENPTE9SR1JBRElOR1xudmVjMyBjb2xvclRyYW5zZm9ybUlu
cHV0PXJlc3VsdC5yZ2IqY29sb3JUcmFuc2Zvcm1TZXR0aW5ncy54eHgrY29sb3JUcmFuc2Zvcm1T
ZXR0aW5ncy55eXk7XG4jaWZkZWYgQ09MT1JHUkFESU5HM0RcbnZlYzMgY29sb3JUcmFuc2Zvcm1P
dXRwdXQ9dGV4dHVyZSh0eENvbG9yVHJhbnNmb3JtLGNvbG9yVHJhbnNmb3JtSW5wdXQpLnJnYjtc
biNlbHNlXG52ZWMzIGNvbG9yVHJhbnNmb3JtT3V0cHV0PXNhbXBsZVRleHR1cmUzRCh0eENvbG9y
VHJhbnNmb3JtLGNvbG9yVHJhbnNmb3JtSW5wdXQsY29sb3JUcmFuc2Zvcm1TZXR0aW5ncy55eiku
cmdiO1xuI2VuZGlmXG5yZXN1bHQucmdiPW1peChyZXN1bHQucmdiLGNvbG9yVHJhbnNmb3JtT3V0
cHV0LGNvbG9yVHJhbnNmb3JtU2V0dGluZ3Mud3d3KTtcbiNlbmRpZlxuI2lmZGVmIENPTE9SQ1VS
VkVTXG5cbmZsb2F0IGx1bWE9Z2V0THVtaW5hbmNlKHJlc3VsdC5yZ2IpO1xudmVjMiBjdXJ2ZU1p
eD1jbGFtcCh2ZWMyKGx1bWEqMy4wLTEuNSxsdW1hKi0zLjArMS41KSx2ZWMyKDAuMCksdmVjMigx
LjApKTtcbnZlYzQgY29sb3JDdXJ2ZT12Q2FtZXJhQ29sb3JDdXJ2ZU5ldXRyYWwrY3VydmVNaXgu
eCp2Q2FtZXJhQ29sb3JDdXJ2ZVBvc2l0aXZlLWN1cnZlTWl4LnkqdkNhbWVyYUNvbG9yQ3VydmVO
ZWdhdGl2ZTtcbnJlc3VsdC5yZ2IqPWNvbG9yQ3VydmUucmdiO1xucmVzdWx0LnJnYj1taXgodmVj
MyhsdW1hKSxyZXN1bHQucmdiLGNvbG9yQ3VydmUuYSk7XG4jZW5kaWZcbnJldHVybiByZXN1bHQ7
XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVm
ZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4g
Ki8KK3ZhciBpbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnMgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjog
c2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1
ZGUvaW5zdGFuY2VzRGVjbGFyYXRpb24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hh
ZGVyc0luY2x1ZGUvaW5zdGFuY2VzRGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogaW5zdGFuY2VzRGVjbGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiaW5zdGFuY2VzRGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGluc3RhbmNlc0RlY2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0
LnRzIik7CisKK3ZhciBuYW1lID0gJ2luc3RhbmNlc0RlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIg
PSAiI2lmZGVmIElOU1RBTkNFU1xuYXR0cmlidXRlIHZlYzQgd29ybGQwO1xuYXR0cmlidXRlIHZl
YzQgd29ybGQxO1xuYXR0cmlidXRlIHZlYzQgd29ybGQyO1xuYXR0cmlidXRlIHZlYzQgd29ybGQz
O1xuI2Vsc2VcbnVuaWZvcm0gbWF0NCB3b3JsZDtcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNT
dG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgaW5zdGFuY2VzRGVjbGFy
YXRpb24gPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzVmVydGV4LnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgudHMgKioqIQor
ICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IGluc3RhbmNlc1ZlcnRleCAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJpbnN0YW5jZXNWZXJ0ZXgiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGluc3RhbmNlc1ZlcnRleDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFs
c19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIp
OworCit2YXIgbmFtZSA9ICdpbnN0YW5jZXNWZXJ0ZXgnOwordmFyIHNoYWRlciA9ICIjaWZkZWYg
SU5TVEFOQ0VTXG5tYXQ0IGZpbmFsV29ybGQ9bWF0NCh3b3JsZDAsd29ybGQxLHdvcmxkMix3b3Js
ZDMpO1xuI2Vsc2Vcbm1hdDQgZmluYWxXb3JsZD13b3JsZDtcbiNlbmRpZiI7CitfTWF0ZXJpYWxz
X2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1No
YWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgaW5zdGFuY2Vz
VmVydGV4ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJGcmFnbWVudC50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUva2VybmVsQmx1ckZyYWdtZW50
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBrZXJuZWxCbHVyRnJhZ21lbnQgKi8K
Ky8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2Vi
cGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAia2VybmVsQmx1ckZyYWdtZW50Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBrZXJuZWxCbHVyRnJhZ21lbnQ7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIu
L01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAna2VybmVsQmx1ckZyYWdtZW50
JzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIERPRlxuZmFjdG9yPXNhbXBsZUNvQyhzYW1wbGVDb29y
ZHtYfSk7XG5jb21wdXRlZFdlaWdodD1LRVJORUxfV0VJR0hUe1h9KmZhY3RvcjtcbnN1bU9mV2Vp
Z2h0cys9Y29tcHV0ZWRXZWlnaHQ7XG4jZWxzZVxuY29tcHV0ZWRXZWlnaHQ9S0VSTkVMX1dFSUdI
VHtYfTtcbiNlbmRpZlxuI2lmZGVmIFBBQ0tFREZMT0FUXG5ibGVuZCs9dW5wYWNrKHRleHR1cmUy
RCh0ZXh0dXJlU2FtcGxlcixzYW1wbGVDb29yZHtYfSkpKmNvbXB1dGVkV2VpZ2h0O1xuI2Vsc2Vc
bmJsZW5kKz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsc2FtcGxlQ29vcmR7WH0pKmNvbXB1dGVk
V2VpZ2h0O1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOwor
LyoqIEBoaWRkZW4gKi8KK3ZhciBrZXJuZWxCbHVyRnJhZ21lbnQgPSB7IG5hbWU6IG5hbWUsIHNo
YWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUva2VybmVsQmx1ckZyYWdtZW50Mi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJGcmFnbWVudDIudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBv
cnRzIHByb3ZpZGVkOiBrZXJuZWxCbHVyRnJhZ21lbnQyICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgImtlcm5lbEJsdXJGcmFnbWVudDIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGtlcm5lbEJsdXJGcmFnbWVudDI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3Qu
dHMiKTsKKwordmFyIG5hbWUgPSAna2VybmVsQmx1ckZyYWdtZW50Mic7Cit2YXIgc2hhZGVyID0g
IiNpZmRlZiBET0ZcbmZhY3Rvcj1zYW1wbGVDb0Moc2FtcGxlQ2VudGVyK2RlbHRhKktFUk5FTF9E
RVBfT0ZGU0VUe1h9KTtcbmNvbXB1dGVkV2VpZ2h0PUtFUk5FTF9ERVBfV0VJR0hUe1h9KmZhY3Rv
cjtcbnN1bU9mV2VpZ2h0cys9Y29tcHV0ZWRXZWlnaHQ7XG4jZWxzZVxuY29tcHV0ZWRXZWlnaHQ9
S0VSTkVMX0RFUF9XRUlHSFR7WH07XG4jZW5kaWZcbiNpZmRlZiBQQUNLRURGTE9BVFxuYmxlbmQr
PXVucGFjayh0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsc2FtcGxlQ2VudGVyK2RlbHRhKktFUk5F
TF9ERVBfT0ZGU0VUe1h9KSkqY29tcHV0ZWRXZWlnaHQ7XG4jZWxzZVxuYmxlbmQrPXRleHR1cmUy
RCh0ZXh0dXJlU2FtcGxlcixzYW1wbGVDZW50ZXIrZGVsdGEqS0VSTkVMX0RFUF9PRkZTRVR7WH0p
KmNvbXB1dGVkV2VpZ2h0O1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0g
c2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBrZXJuZWxCbHVyRnJhZ21lbnQyID0geyBuYW1l
OiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJWYXJ5aW5nRGVjbGFyYXRpb24udHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9rZXJuZWxCbHVyVmFy
eWluZ0RlY2xhcmF0aW9uLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDoga2VybmVsQmx1clZhcnlpbmdEZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJrZXJuZWxCbHVyVmFyeWluZ0RlY2xhcmF0aW9uIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBrZXJuZWxCbHVyVmFyeWluZ0RlY2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9N
YXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2tlcm5lbEJsdXJWYXJ5aW5nRGVj
bGFyYXRpb24nOwordmFyIHNoYWRlciA9ICJ2YXJ5aW5nIHZlYzIgc2FtcGxlQ29vcmR7WH07IjsK
K19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJd
LkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3Zh
ciBrZXJuZWxCbHVyVmFyeWluZ0RlY2xhcmF0aW9uID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNo
YWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRl
L2tlcm5lbEJsdXJWZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVk
ZS9rZXJuZWxCbHVyVmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDoga2VybmVs
Qmx1clZlcnRleCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJrZXJuZWxC
bHVyVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBrZXJuZWxCbHVyVmVydGV4OyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2Vm
ZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2tlcm5lbEJs
dXJWZXJ0ZXgnOwordmFyIHNoYWRlciA9ICJzYW1wbGVDb29yZHtYfT1zYW1wbGVDZW50ZXIrZGVs
dGEqS0VSTkVMX09GRlNFVHtYfTsiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFk
ZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGtlcm5lbEJsdXJWZXJ0ZXggPSB7IG5hbWU6IG5hbWUs
IHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hh
ZGVyc0luY2x1ZGUvbGlnaHRGcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJ
bmNsdWRlL2xpZ2h0RnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBsaWdodEZy
YWdtZW50ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImxpZ2h0RnJhZ21l
bnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGxpZ2h0RnJhZ21lbnQ7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIu
L01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnbGlnaHRGcmFnbWVudCc7Cit2
YXIgc2hhZGVyID0gIiNpZmRlZiBMSUdIVHtYfVxuI2lmIGRlZmluZWQoU0hBRE9XT05MWSkgfHwg
ZGVmaW5lZChMSUdIVE1BUCkgJiYgZGVmaW5lZChMSUdIVE1BUEVYQ0xVREVEe1h9KSAmJiBkZWZp
bmVkKExJR0hUTUFQTk9TUEVDVUxBUntYfSlcblxuI2Vsc2VcbiNpZmRlZiBQQlJcblxuI2lmZGVm
IFNQT1RMSUdIVHtYfVxucHJlSW5mbz1jb21wdXRlUG9pbnRBbmRTcG90UHJlTGlnaHRpbmdJbmZv
KGxpZ2h0e1h9LnZMaWdodERhdGEsdmlld0RpcmVjdGlvblcsbm9ybWFsVyk7XG4jZWxpZiBkZWZp
bmVkKFBPSU5UTElHSFR7WH0pXG5wcmVJbmZvPWNvbXB1dGVQb2ludEFuZFNwb3RQcmVMaWdodGlu
Z0luZm8obGlnaHR7WH0udkxpZ2h0RGF0YSx2aWV3RGlyZWN0aW9uVyxub3JtYWxXKTtcbiNlbGlm
IGRlZmluZWQoSEVNSUxJR0hUe1h9KVxucHJlSW5mbz1jb21wdXRlSGVtaXNwaGVyaWNQcmVMaWdo
dGluZ0luZm8obGlnaHR7WH0udkxpZ2h0RGF0YSx2aWV3RGlyZWN0aW9uVyxub3JtYWxXKTtcbiNl
bGlmIGRlZmluZWQoRElSTElHSFR7WH0pXG5wcmVJbmZvPWNvbXB1dGVEaXJlY3Rpb25hbFByZUxp
Z2h0aW5nSW5mbyhsaWdodHtYfS52TGlnaHREYXRhLHZpZXdEaXJlY3Rpb25XLG5vcm1hbFcpO1xu
I2VuZGlmXG5wcmVJbmZvLk5kb3RWPU5kb3RWO1xuXG4jaWZkZWYgU1BPVExJR0hUe1h9XG4jaWZk
ZWYgTElHSFRfRkFMTE9GRl9HTFRGe1h9XG5wcmVJbmZvLmF0dGVudWF0aW9uPWNvbXB1dGVEaXN0
YW5jZUxpZ2h0RmFsbG9mZl9HTFRGKHByZUluZm8ubGlnaHREaXN0YW5jZVNxdWFyZWQsbGlnaHR7
WH0udkxpZ2h0RmFsbG9mZi55KTtcbnByZUluZm8uYXR0ZW51YXRpb24qPWNvbXB1dGVEaXJlY3Rp
b25hbExpZ2h0RmFsbG9mZl9HTFRGKGxpZ2h0e1h9LnZMaWdodERpcmVjdGlvbi54eXoscHJlSW5m
by5MLGxpZ2h0e1h9LnZMaWdodEZhbGxvZmYueixsaWdodHtYfS52TGlnaHRGYWxsb2ZmLncpO1xu
I2VsaWYgZGVmaW5lZChMSUdIVF9GQUxMT0ZGX1BIWVNJQ0FMe1h9KVxucHJlSW5mby5hdHRlbnVh
dGlvbj1jb21wdXRlRGlzdGFuY2VMaWdodEZhbGxvZmZfUGh5c2ljYWwocHJlSW5mby5saWdodERp
c3RhbmNlU3F1YXJlZCk7XG5wcmVJbmZvLmF0dGVudWF0aW9uKj1jb21wdXRlRGlyZWN0aW9uYWxM
aWdodEZhbGxvZmZfUGh5c2ljYWwobGlnaHR7WH0udkxpZ2h0RGlyZWN0aW9uLnh5eixwcmVJbmZv
LkwsbGlnaHR7WH0udkxpZ2h0RGlyZWN0aW9uLncpO1xuI2VsaWYgZGVmaW5lZChMSUdIVF9GQUxM
T0ZGX1NUQU5EQVJEe1h9KVxucHJlSW5mby5hdHRlbnVhdGlvbj1jb21wdXRlRGlzdGFuY2VMaWdo
dEZhbGxvZmZfU3RhbmRhcmQocHJlSW5mby5saWdodE9mZnNldCxsaWdodHtYfS52TGlnaHRGYWxs
b2ZmLngpO1xucHJlSW5mby5hdHRlbnVhdGlvbio9Y29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxs
b2ZmX1N0YW5kYXJkKGxpZ2h0e1h9LnZMaWdodERpcmVjdGlvbi54eXoscHJlSW5mby5MLGxpZ2h0
e1h9LnZMaWdodERpcmVjdGlvbi53LGxpZ2h0e1h9LnZMaWdodERhdGEudyk7XG4jZWxzZVxucHJl
SW5mby5hdHRlbnVhdGlvbj1jb21wdXRlRGlzdGFuY2VMaWdodEZhbGxvZmYocHJlSW5mby5saWdo
dE9mZnNldCxwcmVJbmZvLmxpZ2h0RGlzdGFuY2VTcXVhcmVkLGxpZ2h0e1h9LnZMaWdodEZhbGxv
ZmYueCxsaWdodHtYfS52TGlnaHRGYWxsb2ZmLnkpO1xucHJlSW5mby5hdHRlbnVhdGlvbio9Y29t
cHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmKGxpZ2h0e1h9LnZMaWdodERpcmVjdGlvbi54eXos
cHJlSW5mby5MLGxpZ2h0e1h9LnZMaWdodERpcmVjdGlvbi53LGxpZ2h0e1h9LnZMaWdodERhdGEu
dyxsaWdodHtYfS52TGlnaHRGYWxsb2ZmLnosbGlnaHR7WH0udkxpZ2h0RmFsbG9mZi53KTtcbiNl
bmRpZlxuI2VsaWYgZGVmaW5lZChQT0lOVExJR0hUe1h9KVxuI2lmZGVmIExJR0hUX0ZBTExPRkZf
R0xURntYfVxucHJlSW5mby5hdHRlbnVhdGlvbj1jb21wdXRlRGlzdGFuY2VMaWdodEZhbGxvZmZf
R0xURihwcmVJbmZvLmxpZ2h0RGlzdGFuY2VTcXVhcmVkLGxpZ2h0e1h9LnZMaWdodEZhbGxvZmYu
eSk7XG4jZWxpZiBkZWZpbmVkKExJR0hUX0ZBTExPRkZfUEhZU0lDQUx7WH0pXG5wcmVJbmZvLmF0
dGVudWF0aW9uPWNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9QaHlzaWNhbChwcmVJbmZvLmxp
Z2h0RGlzdGFuY2VTcXVhcmVkKTtcbiNlbGlmIGRlZmluZWQoTElHSFRfRkFMTE9GRl9TVEFOREFS
RHtYfSlcbnByZUluZm8uYXR0ZW51YXRpb249Y29tcHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX1N0
YW5kYXJkKHByZUluZm8ubGlnaHRPZmZzZXQsbGlnaHR7WH0udkxpZ2h0RmFsbG9mZi54KTtcbiNl
bHNlXG5wcmVJbmZvLmF0dGVudWF0aW9uPWNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZihwcmVJ
bmZvLmxpZ2h0T2Zmc2V0LHByZUluZm8ubGlnaHREaXN0YW5jZVNxdWFyZWQsbGlnaHR7WH0udkxp
Z2h0RmFsbG9mZi54LGxpZ2h0e1h9LnZMaWdodEZhbGxvZmYueSk7XG4jZW5kaWZcbiNlbHNlXG5w
cmVJbmZvLmF0dGVudWF0aW9uPTEuMDtcbiNlbmRpZlxuXG5cbiNpZmRlZiBIRU1JTElHSFR7WH1c
bnByZUluZm8ucm91Z2huZXNzPXJvdWdobmVzcztcbiNlbHNlXG5wcmVJbmZvLnJvdWdobmVzcz1h
ZGp1c3RSb3VnaG5lc3NGcm9tTGlnaHRQcm9wZXJ0aWVzKHJvdWdobmVzcyxsaWdodHtYfS52TGln
aHREaWZmdXNlLmEscHJlSW5mby5saWdodERpc3RhbmNlKTtcbiNlbmRpZlxuXG4jaWZkZWYgSEVN
SUxJR0hUe1h9XG5pbmZvLmRpZmZ1c2U9Y29tcHV0ZUhlbWlzcGhlcmljRGlmZnVzZUxpZ2h0aW5n
KHByZUluZm8sbGlnaHR7WH0udkxpZ2h0RGlmZnVzZS5yZ2IsbGlnaHR7WH0udkxpZ2h0R3JvdW5k
KTtcbiNlbGlmIGRlZmluZWQoU1NfVFJBTlNMVUNFTkNZKVxuaW5mby5kaWZmdXNlPWNvbXB1dGVE
aWZmdXNlQW5kVHJhbnNtaXR0ZWRMaWdodGluZyhwcmVJbmZvLGxpZ2h0e1h9LnZMaWdodERpZmZ1
c2UucmdiLHRyYW5zbWl0dGFuY2UpO1xuI2Vsc2VcbmluZm8uZGlmZnVzZT1jb21wdXRlRGlmZnVz
ZUxpZ2h0aW5nKHByZUluZm8sbGlnaHR7WH0udkxpZ2h0RGlmZnVzZS5yZ2IpO1xuI2VuZGlmXG5c
biNpZmRlZiBTUEVDVUxBUlRFUk1cbiNpZmRlZiBBTklTT1RST1BJQ1xuaW5mby5zcGVjdWxhcj1j
b21wdXRlQW5pc290cm9waWNTcGVjdWxhckxpZ2h0aW5nKHByZUluZm8sdmlld0RpcmVjdGlvblcs
bm9ybWFsVyxhbmlzb3Ryb3BpY1RhbmdlbnQsYW5pc290cm9waWNCaXRhbmdlbnQsYW5pc290cm9w
eSxzcGVjdWxhckVudmlyb25tZW50UjAsc3BlY3VsYXJFbnZpcm9ubWVudFI5MCxBQVJvdWdobmVz
c0ZhY3RvcnMueCxsaWdodHtYfS52TGlnaHREaWZmdXNlLnJnYik7XG4jZWxzZVxuaW5mby5zcGVj
dWxhcj1jb21wdXRlU3BlY3VsYXJMaWdodGluZyhwcmVJbmZvLG5vcm1hbFcsc3BlY3VsYXJFbnZp
cm9ubWVudFIwLHNwZWN1bGFyRW52aXJvbm1lbnRSOTAsQUFSb3VnaG5lc3NGYWN0b3JzLngsbGln
aHR7WH0udkxpZ2h0RGlmZnVzZS5yZ2IpO1xuI2VuZGlmXG4jZW5kaWZcblxuI2lmZGVmIFNIRUVO
XG4jaWZkZWYgU0hFRU5fTElOS1dJVEhBTEJFRE9cblxucHJlSW5mby5yb3VnaG5lc3M9c2hlZW5J
bnRlbnNpdHk7XG4jZW5kaWZcbmluZm8uc2hlZW49Y29tcHV0ZVNoZWVuTGlnaHRpbmcocHJlSW5m
byxub3JtYWxXLHNoZWVuQ29sb3Isc3BlY3VsYXJFbnZpcm9ubWVudFI5MCxBQVJvdWdobmVzc0Zh
Y3RvcnMueCxsaWdodHtYfS52TGlnaHREaWZmdXNlLnJnYik7XG4jZW5kaWZcblxuI2lmZGVmIENM
RUFSQ09BVFxuXG4jaWZkZWYgSEVNSUxJR0hUe1h9XG5wcmVJbmZvLnJvdWdobmVzcz1jbGVhckNv
YXRSb3VnaG5lc3M7XG4jZWxzZVxucHJlSW5mby5yb3VnaG5lc3M9YWRqdXN0Um91Z2huZXNzRnJv
bUxpZ2h0UHJvcGVydGllcyhjbGVhckNvYXRSb3VnaG5lc3MsbGlnaHR7WH0udkxpZ2h0RGlmZnVz
ZS5hLHByZUluZm8ubGlnaHREaXN0YW5jZSk7XG4jZW5kaWZcbmluZm8uY2xlYXJDb2F0PWNvbXB1
dGVDbGVhckNvYXRMaWdodGluZyhwcmVJbmZvLGNsZWFyQ29hdE5vcm1hbFcsY2xlYXJDb2F0QUFS
b3VnaG5lc3NGYWN0b3JzLngsY2xlYXJDb2F0SW50ZW5zaXR5LGxpZ2h0e1h9LnZMaWdodERpZmZ1
c2UucmdiKTtcbiNpZmRlZiBDTEVBUkNPQVRfVElOVFxuXG5hYnNvcnB0aW9uPWNvbXB1dGVDbGVh
ckNvYXRMaWdodGluZ0Fic29ycHRpb24oY2xlYXJDb2F0TmRvdFZSZWZyYWN0LHByZUluZm8uTCxj
bGVhckNvYXROb3JtYWxXLGNsZWFyQ29hdENvbG9yLGNsZWFyQ29hdFRoaWNrbmVzcyxjbGVhckNv
YXRJbnRlbnNpdHkpO1xuaW5mby5kaWZmdXNlKj1hYnNvcnB0aW9uO1xuI2lmZGVmIFNQRUNVTEFS
VEVSTVxuaW5mby5zcGVjdWxhcio9YWJzb3JwdGlvbjtcbiNlbmRpZlxuI2VuZGlmXG5cbmluZm8u
ZGlmZnVzZSo9aW5mby5jbGVhckNvYXQudztcbiNpZmRlZiBTUEVDVUxBUlRFUk1cbmluZm8uc3Bl
Y3VsYXIqPWluZm8uY2xlYXJDb2F0LncqaW5mby5jbGVhckNvYXQudztcbiNlbmRpZlxuI2lmZGVm
IFNIRUVOXG5pbmZvLnNoZWVuKj1pbmZvLmNsZWFyQ29hdC53KmluZm8uY2xlYXJDb2F0Lnc7XG4j
ZW5kaWZcbiNlbmRpZlxuI2Vsc2VcbiNpZmRlZiBTUE9UTElHSFR7WH1cbmluZm89Y29tcHV0ZVNw
b3RMaWdodGluZyh2aWV3RGlyZWN0aW9uVyxub3JtYWxXLGxpZ2h0e1h9LnZMaWdodERhdGEsbGln
aHR7WH0udkxpZ2h0RGlyZWN0aW9uLGxpZ2h0e1h9LnZMaWdodERpZmZ1c2UucmdiLGxpZ2h0e1h9
LnZMaWdodFNwZWN1bGFyLGxpZ2h0e1h9LnZMaWdodERpZmZ1c2UuYSxnbG9zc2luZXNzKTtcbiNl
bGlmIGRlZmluZWQoSEVNSUxJR0hUe1h9KVxuaW5mbz1jb21wdXRlSGVtaXNwaGVyaWNMaWdodGlu
Zyh2aWV3RGlyZWN0aW9uVyxub3JtYWxXLGxpZ2h0e1h9LnZMaWdodERhdGEsbGlnaHR7WH0udkxp
Z2h0RGlmZnVzZS5yZ2IsbGlnaHR7WH0udkxpZ2h0U3BlY3VsYXIsbGlnaHR7WH0udkxpZ2h0R3Jv
dW5kLGdsb3NzaW5lc3MpO1xuI2VsaWYgZGVmaW5lZChQT0lOVExJR0hUe1h9KSB8fCBkZWZpbmVk
KERJUkxJR0hUe1h9KVxuaW5mbz1jb21wdXRlTGlnaHRpbmcodmlld0RpcmVjdGlvblcsbm9ybWFs
VyxsaWdodHtYfS52TGlnaHREYXRhLGxpZ2h0e1h9LnZMaWdodERpZmZ1c2UucmdiLGxpZ2h0e1h9
LnZMaWdodFNwZWN1bGFyLGxpZ2h0e1h9LnZMaWdodERpZmZ1c2UuYSxnbG9zc2luZXNzKTtcbiNl
bmRpZlxuI2VuZGlmXG4jaWZkZWYgUFJPSkVDVEVETElHSFRURVhUVVJFe1h9XG5pbmZvLmRpZmZ1
c2UqPXRleHR1cmUyRChwcm9qZWN0aW9uTGlnaHRTYW1wbGVye1h9LGNvbXB1dGVQcm9qZWN0aW9u
VGV4dHVyZURpZmZ1c2VMaWdodGluZ1VWKHRleHR1cmVQcm9qZWN0aW9uTWF0cml4e1h9KSkucmdi
O1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBTSEFET1d7WH1cbiNpZmRlZiBTSEFET1dDTE9TRUVT
TXtYfVxuI2lmIGRlZmluZWQoU0hBRE9XQ1VCRXtYfSlcbnNoYWRvdz1jb21wdXRlU2hhZG93V2l0
aENsb3NlRVNNQ3ViZShsaWdodHtYfS52TGlnaHREYXRhLnh5eixzaGFkb3dTYW1wbGVye1h9LGxp
Z2h0e1h9LnNoYWRvd3NJbmZvLngsbGlnaHR7WH0uc2hhZG93c0luZm8ueixsaWdodHtYfS5kZXB0
aFZhbHVlcyk7XG4jZWxzZVxuc2hhZG93PWNvbXB1dGVTaGFkb3dXaXRoQ2xvc2VFU00odlBvc2l0
aW9uRnJvbUxpZ2h0e1h9LHZEZXB0aE1ldHJpY3tYfSxzaGFkb3dTYW1wbGVye1h9LGxpZ2h0e1h9
LnNoYWRvd3NJbmZvLngsbGlnaHR7WH0uc2hhZG93c0luZm8ueixsaWdodHtYfS5zaGFkb3dzSW5m
by53KTtcbiNlbmRpZlxuI2VsaWYgZGVmaW5lZChTSEFET1dFU017WH0pXG4jaWYgZGVmaW5lZChT
SEFET1dDVUJFe1h9KVxuc2hhZG93PWNvbXB1dGVTaGFkb3dXaXRoRVNNQ3ViZShsaWdodHtYfS52
TGlnaHREYXRhLnh5eixzaGFkb3dTYW1wbGVye1h9LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLngsbGln
aHR7WH0uc2hhZG93c0luZm8ueixsaWdodHtYfS5kZXB0aFZhbHVlcyk7XG4jZWxzZVxuc2hhZG93
PWNvbXB1dGVTaGFkb3dXaXRoRVNNKHZQb3NpdGlvbkZyb21MaWdodHtYfSx2RGVwdGhNZXRyaWN7
WH0sc2hhZG93U2FtcGxlcntYfSxsaWdodHtYfS5zaGFkb3dzSW5mby54LGxpZ2h0e1h9LnNoYWRv
d3NJbmZvLnosbGlnaHR7WH0uc2hhZG93c0luZm8udyk7XG4jZW5kaWZcbiNlbGlmIGRlZmluZWQo
U0hBRE9XUE9JU1NPTntYfSlcbiNpZiBkZWZpbmVkKFNIQURPV0NVQkV7WH0pXG5zaGFkb3c9Y29t
cHV0ZVNoYWRvd1dpdGhQb2lzc29uU2FtcGxpbmdDdWJlKGxpZ2h0e1h9LnZMaWdodERhdGEueHl6
LHNoYWRvd1NhbXBsZXJ7WH0sbGlnaHR7WH0uc2hhZG93c0luZm8ueSxsaWdodHtYfS5zaGFkb3dz
SW5mby54LGxpZ2h0e1h9LmRlcHRoVmFsdWVzKTtcbiNlbHNlXG5zaGFkb3c9Y29tcHV0ZVNoYWRv
d1dpdGhQb2lzc29uU2FtcGxpbmcodlBvc2l0aW9uRnJvbUxpZ2h0e1h9LHZEZXB0aE1ldHJpY3tY
fSxzaGFkb3dTYW1wbGVye1h9LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLnksbGlnaHR7WH0uc2hhZG93
c0luZm8ueCxsaWdodHtYfS5zaGFkb3dzSW5mby53KTtcbiNlbmRpZlxuI2VsaWYgZGVmaW5lZChT
SEFET1dQQ0Z7WH0pXG4jaWYgZGVmaW5lZChTSEFET1dMT1dRVUFMSVRZe1h9KVxuc2hhZG93PWNv
bXB1dGVTaGFkb3dXaXRoUENGMSh2UG9zaXRpb25Gcm9tTGlnaHR7WH0sdkRlcHRoTWV0cmlje1h9
LHNoYWRvd1NhbXBsZXJ7WH0sbGlnaHR7WH0uc2hhZG93c0luZm8ueCxsaWdodHtYfS5zaGFkb3dz
SW5mby53KTtcbiNlbGlmIGRlZmluZWQoU0hBRE9XTUVESVVNUVVBTElUWXtYfSlcbnNoYWRvdz1j
b21wdXRlU2hhZG93V2l0aFBDRjModlBvc2l0aW9uRnJvbUxpZ2h0e1h9LHZEZXB0aE1ldHJpY3tY
fSxzaGFkb3dTYW1wbGVye1h9LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLnl6LGxpZ2h0e1h9LnNoYWRv
d3NJbmZvLngsbGlnaHR7WH0uc2hhZG93c0luZm8udyk7XG4jZWxzZVxuc2hhZG93PWNvbXB1dGVT
aGFkb3dXaXRoUENGNSh2UG9zaXRpb25Gcm9tTGlnaHR7WH0sdkRlcHRoTWV0cmlje1h9LHNoYWRv
d1NhbXBsZXJ7WH0sbGlnaHR7WH0uc2hhZG93c0luZm8ueXosbGlnaHR7WH0uc2hhZG93c0luZm8u
eCxsaWdodHtYfS5zaGFkb3dzSW5mby53KTtcbiNlbmRpZlxuI2VsaWYgZGVmaW5lZChTSEFET1dQ
Q1NTe1h9KVxuI2lmIGRlZmluZWQoU0hBRE9XTE9XUVVBTElUWXtYfSlcbnNoYWRvdz1jb21wdXRl
U2hhZG93V2l0aFBDU1MxNih2UG9zaXRpb25Gcm9tTGlnaHR7WH0sdkRlcHRoTWV0cmlje1h9LGRl
cHRoU2FtcGxlcntYfSxzaGFkb3dTYW1wbGVye1h9LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLnksbGln
aHR7WH0uc2hhZG93c0luZm8ueixsaWdodHtYfS5zaGFkb3dzSW5mby54LGxpZ2h0e1h9LnNoYWRv
d3NJbmZvLncpO1xuI2VsaWYgZGVmaW5lZChTSEFET1dNRURJVU1RVUFMSVRZe1h9KVxuc2hhZG93
PWNvbXB1dGVTaGFkb3dXaXRoUENTUzMyKHZQb3NpdGlvbkZyb21MaWdodHtYfSx2RGVwdGhNZXRy
aWN7WH0sZGVwdGhTYW1wbGVye1h9LHNoYWRvd1NhbXBsZXJ7WH0sbGlnaHR7WH0uc2hhZG93c0lu
Zm8ueSxsaWdodHtYfS5zaGFkb3dzSW5mby56LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLngsbGlnaHR7
WH0uc2hhZG93c0luZm8udyk7XG4jZWxzZVxuc2hhZG93PWNvbXB1dGVTaGFkb3dXaXRoUENTUzY0
KHZQb3NpdGlvbkZyb21MaWdodHtYfSx2RGVwdGhNZXRyaWN7WH0sZGVwdGhTYW1wbGVye1h9LHNo
YWRvd1NhbXBsZXJ7WH0sbGlnaHR7WH0uc2hhZG93c0luZm8ueSxsaWdodHtYfS5zaGFkb3dzSW5m
by56LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLngsbGlnaHR7WH0uc2hhZG93c0luZm8udyk7XG4jZW5k
aWZcbiNlbHNlXG4jaWYgZGVmaW5lZChTSEFET1dDVUJFe1h9KVxuc2hhZG93PWNvbXB1dGVTaGFk
b3dDdWJlKGxpZ2h0e1h9LnZMaWdodERhdGEueHl6LHNoYWRvd1NhbXBsZXJ7WH0sbGlnaHR7WH0u
c2hhZG93c0luZm8ueCxsaWdodHtYfS5kZXB0aFZhbHVlcyk7XG4jZWxzZVxuc2hhZG93PWNvbXB1
dGVTaGFkb3codlBvc2l0aW9uRnJvbUxpZ2h0e1h9LHZEZXB0aE1ldHJpY3tYfSxzaGFkb3dTYW1w
bGVye1h9LGxpZ2h0e1h9LnNoYWRvd3NJbmZvLngsbGlnaHR7WH0uc2hhZG93c0luZm8udyk7XG4j
ZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFNIQURPV09OTFlcbiNpZm5kZWYgU0hBRE9XSU5VU0VcbiNk
ZWZpbmUgU0hBRE9XSU5VU0VcbiNlbmRpZlxuZ2xvYmFsU2hhZG93Kz1zaGFkb3c7XG5zaGFkb3dM
aWdodENvdW50Kz0xLjA7XG4jZW5kaWZcbiNlbHNlXG5zaGFkb3c9MS47XG4jZW5kaWZcbiNpZm5k
ZWYgU0hBRE9XT05MWVxuI2lmZGVmIENVU1RPTVVTRVJMSUdIVElOR1xuZGlmZnVzZUJhc2UrPWNv
bXB1dGVDdXN0b21EaWZmdXNlTGlnaHRpbmcoaW5mbyxkaWZmdXNlQmFzZSxzaGFkb3cpO1xuI2lm
ZGVmIFNQRUNVTEFSVEVSTVxuc3BlY3VsYXJCYXNlKz1jb21wdXRlQ3VzdG9tU3BlY3VsYXJMaWdo
dGluZyhpbmZvLHNwZWN1bGFyQmFzZSxzaGFkb3cpO1xuI2VuZGlmXG4jZWxpZiBkZWZpbmVkKExJ
R0hUTUFQKSAmJiBkZWZpbmVkKExJR0hUTUFQRVhDTFVERUR7WH0pXG5kaWZmdXNlQmFzZSs9bGln
aHRtYXBDb2xvci5yZ2Iqc2hhZG93O1xuI2lmZGVmIFNQRUNVTEFSVEVSTVxuI2lmbmRlZiBMSUdI
VE1BUE5PU1BFQ1VMQVJ7WH1cbnNwZWN1bGFyQmFzZSs9aW5mby5zcGVjdWxhcipzaGFkb3cqbGln
aHRtYXBDb2xvci5yZ2I7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVFxuI2lmbmRl
ZiBMSUdIVE1BUE5PU1BFQ1VMQVJ7WH1cbmNsZWFyQ29hdEJhc2UrPWluZm8uY2xlYXJDb2F0LnJn
YipzaGFkb3cqbGlnaHRtYXBDb2xvci5yZ2I7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFNIRUVO
XG4jaWZuZGVmIExJR0hUTUFQTk9TUEVDVUxBUntYfVxuc2hlZW5CYXNlKz1pbmZvLnNoZWVuLnJn
YipzaGFkb3c7XG4jZW5kaWZcbiNlbmRpZlxuI2Vsc2VcbmRpZmZ1c2VCYXNlKz1pbmZvLmRpZmZ1
c2Uqc2hhZG93O1xuI2lmZGVmIFNQRUNVTEFSVEVSTVxuc3BlY3VsYXJCYXNlKz1pbmZvLnNwZWN1
bGFyKnNoYWRvdztcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVFxuY2xlYXJDb2F0QmFzZSs9aW5m
by5jbGVhckNvYXQucmdiKnNoYWRvdztcbiNlbmRpZlxuI2lmZGVmIFNIRUVOXG5zaGVlbkJhc2Ur
PWluZm8uc2hlZW4ucmdiKnNoYWRvdztcbiNlbmRpZlxuI2VuZGlmXG4jZW5kaWZcbiNlbmRpZiI7
CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3Qi
XS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2
YXIgbGlnaHRGcmFnbWVudCA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9saWdodEZyYWdtZW50
RGVjbGFyYXRpb24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL2xpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogbGlnaHRGcmFnbWVudERlY2xhcmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgImxpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gbGlnaHRGcmFnbWVudERlY2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRl
cmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2xpZ2h0RnJhZ21lbnREZWNsYXJhdGlv
bic7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBMSUdIVHtYfVxudW5pZm9ybSB2ZWM0IHZMaWdodERh
dGF7WH07XG51bmlmb3JtIHZlYzQgdkxpZ2h0RGlmZnVzZXtYfTtcbiNpZmRlZiBTUEVDVUxBUlRF
Uk1cbnVuaWZvcm0gdmVjMyB2TGlnaHRTcGVjdWxhcntYfTtcbiNlbHNlXG52ZWMzIHZMaWdodFNw
ZWN1bGFye1h9PXZlYzMoMC4pO1xuI2VuZGlmXG4jaWZkZWYgU0hBRE9Xe1h9XG4jaWYgZGVmaW5l
ZChTSEFET1dDVUJFe1h9KVxudW5pZm9ybSBzYW1wbGVyQ3ViZSBzaGFkb3dTYW1wbGVye1h9O1xu
I2Vsc2VcbnZhcnlpbmcgdmVjNCB2UG9zaXRpb25Gcm9tTGlnaHR7WH07XG52YXJ5aW5nIGZsb2F0
IHZEZXB0aE1ldHJpY3tYfTtcbiNpZiBkZWZpbmVkKFNIQURPV1BDU1N7WH0pXG51bmlmb3JtIGhp
Z2hwIHNhbXBsZXIyRFNoYWRvdyBzaGFkb3dTYW1wbGVye1h9O1xudW5pZm9ybSBoaWdocCBzYW1w
bGVyMkQgZGVwdGhTYW1wbGVye1h9O1xuI2VsaWYgZGVmaW5lZChTSEFET1dQQ0Z7WH0pXG51bmlm
b3JtIGhpZ2hwIHNhbXBsZXIyRFNoYWRvdyBzaGFkb3dTYW1wbGVye1h9O1xuI2Vsc2VcbnVuaWZv
cm0gc2FtcGxlcjJEIHNoYWRvd1NhbXBsZXJ7WH07XG4jZW5kaWZcbnVuaWZvcm0gbWF0NCBsaWdo
dE1hdHJpeHtYfTtcbiNlbmRpZlxudW5pZm9ybSB2ZWM0IHNoYWRvd3NJbmZve1h9O1xudW5pZm9y
bSB2ZWMyIGRlcHRoVmFsdWVze1h9O1xuI2VuZGlmXG4jaWZkZWYgU1BPVExJR0hUe1h9XG51bmlm
b3JtIHZlYzQgdkxpZ2h0RGlyZWN0aW9ue1h9O1xudW5pZm9ybSB2ZWM0IHZMaWdodEZhbGxvZmZ7
WH07XG4jZWxpZiBkZWZpbmVkKFBPSU5UTElHSFR7WH0pXG51bmlmb3JtIHZlYzQgdkxpZ2h0RmFs
bG9mZntYfTtcbiNlbGlmIGRlZmluZWQoSEVNSUxJR0hUe1h9KVxudW5pZm9ybSB2ZWMzIHZMaWdo
dEdyb3VuZHtYfTtcbiNlbmRpZlxuI2lmZGVmIFBST0pFQ1RFRExJR0hUVEVYVFVSRXtYfVxudW5p
Zm9ybSBtYXQ0IHRleHR1cmVQcm9qZWN0aW9uTWF0cml4e1h9O1xudW5pZm9ybSBzYW1wbGVyMkQg
cHJvamVjdGlvbkxpZ2h0U2FtcGxlcntYfTtcbiNlbmRpZlxuI2VuZGlmIjsKK19NYXRlcmlhbHNf
ZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hh
ZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBsaWdodEZyYWdt
ZW50RGVjbGFyYXRpb24gPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbGlnaHRVYm9EZWNsYXJh
dGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0VWJv
RGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBsaWdodFVib0Rl
Y2xhcmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImxpZ2h0VWJv
RGVjbGFyYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGxpZ2h0VWJvRGVjbGFyYXRpb247IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlh
bHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnbGln
aHRVYm9EZWNsYXJhdGlvbic7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBMSUdIVHtYfVxudW5pZm9y
bSBMaWdodHtYfVxue1xudmVjNCB2TGlnaHREYXRhO1xudmVjNCB2TGlnaHREaWZmdXNlO1xudmVj
MyB2TGlnaHRTcGVjdWxhcjtcbiNpZmRlZiBTUE9UTElHSFR7WH1cbnZlYzQgdkxpZ2h0RGlyZWN0
aW9uO1xudmVjNCB2TGlnaHRGYWxsb2ZmO1xuI2VsaWYgZGVmaW5lZChQT0lOVExJR0hUe1h9KVxu
dmVjNCB2TGlnaHRGYWxsb2ZmO1xuI2VsaWYgZGVmaW5lZChIRU1JTElHSFR7WH0pXG52ZWMzIHZM
aWdodEdyb3VuZDtcbiNlbmRpZlxudmVjNCBzaGFkb3dzSW5mbztcbnZlYzIgZGVwdGhWYWx1ZXM7
XG59IGxpZ2h0e1h9O1xuI2lmZGVmIFBST0pFQ1RFRExJR0hUVEVYVFVSRXtYfVxudW5pZm9ybSBt
YXQ0IHRleHR1cmVQcm9qZWN0aW9uTWF0cml4e1h9O1xudW5pZm9ybSBzYW1wbGVyMkQgcHJvamVj
dGlvbkxpZ2h0U2FtcGxlcntYfTtcbiNlbmRpZlxuI2lmZGVmIFNIQURPV3tYfVxuI2lmIGRlZmlu
ZWQoU0hBRE9XQ1VCRXtYfSlcbnVuaWZvcm0gc2FtcGxlckN1YmUgc2hhZG93U2FtcGxlcntYfTtc
biNlbHNlXG52YXJ5aW5nIHZlYzQgdlBvc2l0aW9uRnJvbUxpZ2h0e1h9O1xudmFyeWluZyBmbG9h
dCB2RGVwdGhNZXRyaWN7WH07XG4jaWYgZGVmaW5lZChTSEFET1dQQ1NTe1h9KVxudW5pZm9ybSBo
aWdocCBzYW1wbGVyMkRTaGFkb3cgc2hhZG93U2FtcGxlcntYfTtcbnVuaWZvcm0gaGlnaHAgc2Ft
cGxlcjJEIGRlcHRoU2FtcGxlcntYfTtcbiNlbGlmIGRlZmluZWQoU0hBRE9XUENGe1h9KVxudW5p
Zm9ybSBoaWdocCBzYW1wbGVyMkRTaGFkb3cgc2hhZG93U2FtcGxlcntYfTtcbiNlbHNlXG51bmlm
b3JtIHNhbXBsZXIyRCBzaGFkb3dTYW1wbGVye1h9O1xuI2VuZGlmXG51bmlmb3JtIG1hdDQgbGln
aHRNYXRyaXh7WH07XG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0
b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBsaWdodFVib0RlY2xhcmF0
aW9uID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0c0ZyYWdtZW50RnVuY3Rpb25zLnRz
IjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0c0ZyYWdt
ZW50RnVuY3Rpb25zLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGxpZ2h0
c0ZyYWdtZW50RnVuY3Rpb25zICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
ImxpZ2h0c0ZyYWdtZW50RnVuY3Rpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBsaWdodHNGcmFn
bWVudEZ1bmN0aW9uczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
Cit2YXIgbmFtZSA9ICdsaWdodHNGcmFnbWVudEZ1bmN0aW9ucyc7Cit2YXIgc2hhZGVyID0gIlxu
c3RydWN0IGxpZ2h0aW5nSW5mb1xue1xudmVjMyBkaWZmdXNlO1xuI2lmZGVmIFNQRUNVTEFSVEVS
TVxudmVjMyBzcGVjdWxhcjtcbiNlbmRpZlxuI2lmZGVmIE5ET1RMXG5mbG9hdCBuZGw7XG4jZW5k
aWZcbn07XG5saWdodGluZ0luZm8gY29tcHV0ZUxpZ2h0aW5nKHZlYzMgdmlld0RpcmVjdGlvblcs
dmVjMyB2Tm9ybWFsLHZlYzQgbGlnaHREYXRhLHZlYzMgZGlmZnVzZUNvbG9yLHZlYzMgc3BlY3Vs
YXJDb2xvcixmbG9hdCByYW5nZSxmbG9hdCBnbG9zc2luZXNzKSB7XG5saWdodGluZ0luZm8gcmVz
dWx0O1xudmVjMyBsaWdodFZlY3Rvclc7XG5mbG9hdCBhdHRlbnVhdGlvbj0xLjA7XG5pZiAobGln
aHREYXRhLncgPT0gMC4pXG57XG52ZWMzIGRpcmVjdGlvbj1saWdodERhdGEueHl6LXZQb3NpdGlv
blc7XG5hdHRlbnVhdGlvbj1tYXgoMC4sMS4wLWxlbmd0aChkaXJlY3Rpb24pL3JhbmdlKTtcbmxp
Z2h0VmVjdG9yVz1ub3JtYWxpemUoZGlyZWN0aW9uKTtcbn1cbmVsc2VcbntcbmxpZ2h0VmVjdG9y
Vz1ub3JtYWxpemUoLWxpZ2h0RGF0YS54eXopO1xufVxuXG5mbG9hdCBuZGw9bWF4KDAuLGRvdCh2
Tm9ybWFsLGxpZ2h0VmVjdG9yVykpO1xuI2lmZGVmIE5ET1RMXG5yZXN1bHQubmRsPW5kbDtcbiNl
bmRpZlxucmVzdWx0LmRpZmZ1c2U9bmRsKmRpZmZ1c2VDb2xvciphdHRlbnVhdGlvbjtcbiNpZmRl
ZiBTUEVDVUxBUlRFUk1cblxudmVjMyBhbmdsZVc9bm9ybWFsaXplKHZpZXdEaXJlY3Rpb25XK2xp
Z2h0VmVjdG9yVyk7XG5mbG9hdCBzcGVjQ29tcD1tYXgoMC4sZG90KHZOb3JtYWwsYW5nbGVXKSk7
XG5zcGVjQ29tcD1wb3coc3BlY0NvbXAsbWF4KDEuLGdsb3NzaW5lc3MpKTtcbnJlc3VsdC5zcGVj
dWxhcj1zcGVjQ29tcCpzcGVjdWxhckNvbG9yKmF0dGVudWF0aW9uO1xuI2VuZGlmXG5yZXR1cm4g
cmVzdWx0O1xufVxubGlnaHRpbmdJbmZvIGNvbXB1dGVTcG90TGlnaHRpbmcodmVjMyB2aWV3RGly
ZWN0aW9uVyx2ZWMzIHZOb3JtYWwsdmVjNCBsaWdodERhdGEsdmVjNCBsaWdodERpcmVjdGlvbix2
ZWMzIGRpZmZ1c2VDb2xvcix2ZWMzIHNwZWN1bGFyQ29sb3IsZmxvYXQgcmFuZ2UsZmxvYXQgZ2xv
c3NpbmVzcykge1xubGlnaHRpbmdJbmZvIHJlc3VsdDtcbnZlYzMgZGlyZWN0aW9uPWxpZ2h0RGF0
YS54eXotdlBvc2l0aW9uVztcbnZlYzMgbGlnaHRWZWN0b3JXPW5vcm1hbGl6ZShkaXJlY3Rpb24p
O1xuZmxvYXQgYXR0ZW51YXRpb249bWF4KDAuLDEuMC1sZW5ndGgoZGlyZWN0aW9uKS9yYW5nZSk7
XG5cbmZsb2F0IGNvc0FuZ2xlPW1heCgwLixkb3QobGlnaHREaXJlY3Rpb24ueHl6LC1saWdodFZl
Y3RvclcpKTtcbmlmIChjb3NBbmdsZT49bGlnaHREaXJlY3Rpb24udylcbntcbmNvc0FuZ2xlPW1h
eCgwLixwb3coY29zQW5nbGUsbGlnaHREYXRhLncpKTtcbmF0dGVudWF0aW9uKj1jb3NBbmdsZTtc
blxuZmxvYXQgbmRsPW1heCgwLixkb3Qodk5vcm1hbCxsaWdodFZlY3RvclcpKTtcbiNpZmRlZiBO
RE9UTFxucmVzdWx0Lm5kbD1uZGw7XG4jZW5kaWZcbnJlc3VsdC5kaWZmdXNlPW5kbCpkaWZmdXNl
Q29sb3IqYXR0ZW51YXRpb247XG4jaWZkZWYgU1BFQ1VMQVJURVJNXG5cbnZlYzMgYW5nbGVXPW5v
cm1hbGl6ZSh2aWV3RGlyZWN0aW9uVytsaWdodFZlY3RvclcpO1xuZmxvYXQgc3BlY0NvbXA9bWF4
KDAuLGRvdCh2Tm9ybWFsLGFuZ2xlVykpO1xuc3BlY0NvbXA9cG93KHNwZWNDb21wLG1heCgxLixn
bG9zc2luZXNzKSk7XG5yZXN1bHQuc3BlY3VsYXI9c3BlY0NvbXAqc3BlY3VsYXJDb2xvciphdHRl
bnVhdGlvbjtcbiNlbmRpZlxucmV0dXJuIHJlc3VsdDtcbn1cbnJlc3VsdC5kaWZmdXNlPXZlYzMo
MC4pO1xuI2lmZGVmIFNQRUNVTEFSVEVSTVxucmVzdWx0LnNwZWN1bGFyPXZlYzMoMC4pO1xuI2Vu
ZGlmXG4jaWZkZWYgTkRPVExcbnJlc3VsdC5uZGw9MC47XG4jZW5kaWZcbnJldHVybiByZXN1bHQ7
XG59XG5saWdodGluZ0luZm8gY29tcHV0ZUhlbWlzcGhlcmljTGlnaHRpbmcodmVjMyB2aWV3RGly
ZWN0aW9uVyx2ZWMzIHZOb3JtYWwsdmVjNCBsaWdodERhdGEsdmVjMyBkaWZmdXNlQ29sb3IsdmVj
MyBzcGVjdWxhckNvbG9yLHZlYzMgZ3JvdW5kQ29sb3IsZmxvYXQgZ2xvc3NpbmVzcykge1xubGln
aHRpbmdJbmZvIHJlc3VsdDtcblxuZmxvYXQgbmRsPWRvdCh2Tm9ybWFsLGxpZ2h0RGF0YS54eXop
KjAuNSswLjU7XG4jaWZkZWYgTkRPVExcbnJlc3VsdC5uZGw9bmRsO1xuI2VuZGlmXG5yZXN1bHQu
ZGlmZnVzZT1taXgoZ3JvdW5kQ29sb3IsZGlmZnVzZUNvbG9yLG5kbCk7XG4jaWZkZWYgU1BFQ1VM
QVJURVJNXG5cbnZlYzMgYW5nbGVXPW5vcm1hbGl6ZSh2aWV3RGlyZWN0aW9uVytsaWdodERhdGEu
eHl6KTtcbmZsb2F0IHNwZWNDb21wPW1heCgwLixkb3Qodk5vcm1hbCxhbmdsZVcpKTtcbnNwZWND
b21wPXBvdyhzcGVjQ29tcCxtYXgoMS4sZ2xvc3NpbmVzcykpO1xucmVzdWx0LnNwZWN1bGFyPXNw
ZWNDb21wKnNwZWN1bGFyQ29sb3I7XG4jZW5kaWZcbnJldHVybiByZXN1bHQ7XG59XG52ZWMyIGNv
bXB1dGVQcm9qZWN0aW9uVGV4dHVyZURpZmZ1c2VMaWdodGluZ1VWKG1hdDQgdGV4dHVyZVByb2pl
Y3Rpb25NYXRyaXgpe1xudmVjNCBzdHJxPXRleHR1cmVQcm9qZWN0aW9uTWF0cml4KnZlYzQodlBv
c2l0aW9uVywxLjApO1xuc3RycS89c3RycS53O1xucmV0dXJuIHN0cnEueHk7XG59IjsKK19NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1
ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBsaWdo
dHNGcmFnbWVudEZ1bmN0aW9ucyA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aERl
Y2xhcmF0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbG9n
RGVwdGhEZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGxvZ0Rl
cHRoRGVjbGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibG9n
RGVwdGhEZWNsYXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbG9nRGVwdGhEZWNsYXJhdGlv
bjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9
ICdsb2dEZXB0aERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIExPR0FSSVRITUlD
REVQVEhcbnVuaWZvcm0gZmxvYXQgbG9nYXJpdGhtaWNEZXB0aENvbnN0YW50O1xudmFyeWluZyBm
bG9hdCB2RnJhZ21lbnREZXB0aDtcbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1l
XSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgbG9nRGVwdGhEZWNsYXJhdGlvbiA9IHsg
bmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aEZyYWdtZW50LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbG9nRGVwdGhGcmFnbWVudC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IGxvZ0RlcHRoRnJhZ21lbnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAibG9nRGVwdGhGcmFnbWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbG9n
RGVwdGhGcmFnbWVudDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
Cit2YXIgbmFtZSA9ICdsb2dEZXB0aEZyYWdtZW50JzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIExP
R0FSSVRITUlDREVQVEhcbmdsX0ZyYWdEZXB0aEVYVD1sb2cyKHZGcmFnbWVudERlcHRoKSpsb2dh
cml0aG1pY0RlcHRoQ29uc3RhbnQqMC41O1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3Jl
W25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBsb2dEZXB0aEZyYWdtZW50ID0g
eyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xvZ0RlcHRoVmVydGV4LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xvZ0RlcHRoVmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IGxvZ0RlcHRoVmVydGV4ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgImxvZ0RlcHRoVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBsb2dEZXB0aFZlcnRl
eDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01h
dGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9
ICdsb2dEZXB0aFZlcnRleCc7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBMT0dBUklUSE1JQ0RFUFRI
XG52RnJhZ21lbnREZXB0aD0xLjArZ2xfUG9zaXRpb24udztcbmdsX1Bvc2l0aW9uLno9bG9nMiht
YXgoMC4wMDAwMDEsdkZyYWdtZW50RGVwdGgpKSpsb2dhcml0aG1pY0RlcHRoQ29uc3RhbnQ7XG4j
ZW5kaWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRl
biAqLwordmFyIGxvZ0RlcHRoVmVydGV4ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9
OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL21vcnBo
VGFyZ2V0c1ZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
bW9ycGhUYXJnZXRzVmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBtb3Jw
aFRhcmdldHNWZXJ0ZXggKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibW9y
cGhUYXJnZXRzVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBtb3JwaFRhcmdldHNWZXJ0ZXg7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRl
cmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAn
bW9ycGhUYXJnZXRzVmVydGV4JzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIE1PUlBIVEFSR0VUU1xu
cG9zaXRpb25VcGRhdGVkKz0ocG9zaXRpb257WH0tcG9zaXRpb24pKm1vcnBoVGFyZ2V0SW5mbHVl
bmNlc1t7WH1dO1xuI2lmZGVmIE1PUlBIVEFSR0VUU19OT1JNQUxcbm5vcm1hbFVwZGF0ZWQrPShu
b3JtYWx7WH0tbm9ybWFsKSptb3JwaFRhcmdldEluZmx1ZW5jZXNbe1h9XTtcbiNlbmRpZlxuI2lm
ZGVmIE1PUlBIVEFSR0VUU19UQU5HRU5UXG50YW5nZW50VXBkYXRlZC54eXorPSh0YW5nZW50e1h9
LXRhbmdlbnQueHl6KSptb3JwaFRhcmdldEluZmx1ZW5jZXNbe1h9XTtcbiNlbmRpZlxuI2lmZGVm
IE1PUlBIVEFSR0VUU19VVlxudXZVcGRhdGVkKz0odXZfe1h9LXV2KSptb3JwaFRhcmdldEluZmx1
ZW5jZXNbe1h9XTtcbiNlbmRpZlxuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVd
ID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBtb3JwaFRhcmdldHNWZXJ0ZXggPSB7IG5h
bWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24udHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJn
ZXRzVmVydGV4RGVjbGFyYXRpb24udHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogbW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAibW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIG1vcnBoVGFyZ2V0c1ZlcnRleERlY2xhcmF0aW9uOyB9KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVj
dCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ21vcnBoVGFyZ2V0
c1ZlcnRleERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIE1PUlBIVEFSR0VUU1xu
YXR0cmlidXRlIHZlYzMgcG9zaXRpb257WH07XG4jaWZkZWYgTU9SUEhUQVJHRVRTX05PUk1BTFxu
YXR0cmlidXRlIHZlYzMgbm9ybWFse1h9O1xuI2VuZGlmXG4jaWZkZWYgTU9SUEhUQVJHRVRTX1RB
TkdFTlRcbmF0dHJpYnV0ZSB2ZWMzIHRhbmdlbnR7WH07XG4jZW5kaWZcbiNpZmRlZiBNT1JQSFRB
UkdFVFNfVVZcbmF0dHJpYnV0ZSB2ZWMyIHV2X3tYfTtcbiNlbmRpZlxuI2VuZGlmIjsKK19NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1
ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBtb3Jw
aFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbiA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIg
fTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3Jw
aFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9i
YWxEZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBtb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJtb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJh
dGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFy
YXRpb247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8u
Li9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5h
bWUgPSAnbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFyYXRpb24nOwordmFyIHNoYWRlciA9
ICIjaWZkZWYgTU9SUEhUQVJHRVRTXG51bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNl
c1tOVU1fTU9SUEhfSU5GTFVFTkNFUlNdO1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3Jl
W25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBtb3JwaFRhcmdldHNWZXJ0ZXhH
bG9iYWxEZWNsYXJhdGlvbiA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tcnRGcmFnbWVudERl
Y2xhcmF0aW9uLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
bXJ0RnJhZ21lbnREZWNsYXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IG1ydEZyYWdtZW50RGVjbGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAibXJ0RnJhZ21lbnREZWNsYXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbXJ0
RnJhZ21lbnREZWNsYXJhdGlvbjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVy
aWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50
cyIpOworCit2YXIgbmFtZSA9ICdtcnRGcmFnbWVudERlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIg
PSAiI2lmIF9fVkVSU0lPTl9fPj0yMDBcbmxheW91dChsb2NhdGlvbj0wKSBvdXQgdmVjNCBnbEZy
YWdEYXRhW3tYfV07XG4jZW5kaWZcbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNo
YWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgbXJ0RnJhZ21lbnREZWNsYXJhdGlvbiA9IHsgbmFt
ZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hh
ZGVycy9TaGFkZXJzSW5jbHVkZS9wYWNraW5nRnVuY3Rpb25zLnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvcGFja2luZ0Z1bmN0aW9ucy50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IHBhY2tpbmdGdW5jdGlvbnMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAicGFja2luZ0Z1bmN0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcGFja2lu
Z0Z1bmN0aW9uczsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2
YXIgbmFtZSA9ICdwYWNraW5nRnVuY3Rpb25zJzsKK3ZhciBzaGFkZXIgPSAidmVjNCBwYWNrKGZs
b2F0IGRlcHRoKVxue1xuY29uc3QgdmVjNCBiaXRfc2hpZnQ9dmVjNCgyNTUuMCoyNTUuMCoyNTUu
MCwyNTUuMCoyNTUuMCwyNTUuMCwxLjApO1xuY29uc3QgdmVjNCBiaXRfbWFzaz12ZWM0KDAuMCwx
LjAvMjU1LjAsMS4wLzI1NS4wLDEuMC8yNTUuMCk7XG52ZWM0IHJlcz1mcmFjdChkZXB0aCpiaXRf
c2hpZnQpO1xucmVzLT1yZXMueHh5eipiaXRfbWFzaztcbnJldHVybiByZXM7XG59XG5mbG9hdCB1
bnBhY2sodmVjNCBjb2xvcilcbntcbmNvbnN0IHZlYzQgYml0X3NoaWZ0PXZlYzQoMS4wLygyNTUu
MCoyNTUuMCoyNTUuMCksMS4wLygyNTUuMCoyNTUuMCksMS4wLzI1NS4wLDEuMCk7XG5yZXR1cm4g
ZG90KGNvbG9yLGJpdF9zaGlmdCk7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0g
c2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBwYWNraW5nRnVuY3Rpb25zID0geyBuYW1lOiBu
YW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL3BickJSREZGdW5jdGlvbnMudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVy
cy9TaGFkZXJzSW5jbHVkZS9wYnJCUkRGRnVuY3Rpb25zLnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogcGJyQlJERkZ1bmN0aW9ucyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJwYnJCUkRGRnVuY3Rpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwYnJCUkRGRnVu
Y3Rpb25zOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBu
YW1lID0gJ3BickJSREZGdW5jdGlvbnMnOwordmFyIHNoYWRlciA9ICJcbiNkZWZpbmUgRlJFU05F
TF9NQVhJTVVNX09OX1JPVUdIIDAuMjVcblxuXG5cblxuI2lmZGVmIE1TX0JSREZfRU5FUkdZX0NP
TlNFUlZBVElPTlxuXG5cbnZlYzMgZ2V0RW5lcmd5Q29uc2VydmF0aW9uRmFjdG9yKGNvbnN0IHZl
YzMgc3BlY3VsYXJFbnZpcm9ubWVudFIwLGNvbnN0IHZlYzMgZW52aXJvbm1lbnRCcmRmKSB7XG5y
ZXR1cm4gMS4wK3NwZWN1bGFyRW52aXJvbm1lbnRSMCooMS4wL2Vudmlyb25tZW50QnJkZi55LTEu
MCk7XG59XG4jZW5kaWZcbiNpZmRlZiBFTlZJUk9OTUVOVEJSREZcbnZlYzMgZ2V0QlJERkxvb2t1
cChmbG9hdCBOZG90VixmbG9hdCBwZXJjZXB0dWFsUm91Z2huZXNzKSB7XG5cbnZlYzIgVVY9dmVj
MihOZG90VixwZXJjZXB0dWFsUm91Z2huZXNzKTtcblxudmVjNCBicmRmTG9va3VwPXRleHR1cmUy
RChlbnZpcm9ubWVudEJyZGZTYW1wbGVyLFVWKTtcbiNpZmRlZiBFTlZJUk9OTUVOVEJSREZfUkdC
RFxuYnJkZkxvb2t1cC5yZ2I9ZnJvbVJHQkQoYnJkZkxvb2t1cC5yZ2JhKTtcbiNlbmRpZlxucmV0
dXJuIGJyZGZMb29rdXAucmdiO1xufVxudmVjMyBnZXRSZWZsZWN0YW5jZUZyb21CUkRGTG9va3Vw
KGNvbnN0IHZlYzMgc3BlY3VsYXJFbnZpcm9ubWVudFIwLGNvbnN0IHZlYzMgZW52aXJvbm1lbnRC
cmRmKSB7XG4jaWZkZWYgQlJERl9WX0hFSUdIVF9DT1JSRUxBVEVEXG52ZWMzIHJlZmxlY3RhbmNl
PW1peChlbnZpcm9ubWVudEJyZGYueHh4LGVudmlyb25tZW50QnJkZi55eXksc3BlY3VsYXJFbnZp
cm9ubWVudFIwKTtcbiNlbHNlXG52ZWMzIHJlZmxlY3RhbmNlPXNwZWN1bGFyRW52aXJvbm1lbnRS
MCplbnZpcm9ubWVudEJyZGYueCtlbnZpcm9ubWVudEJyZGYueTtcbiNlbmRpZlxucmV0dXJuIHJl
ZmxlY3RhbmNlO1xufVxuI2VuZGlmXG4jaWYgIWRlZmluZWQoRU5WSVJPTk1FTlRCUkRGKSB8fCBk
ZWZpbmVkKFJFRkxFQ1RJT05NQVBfU0tZQk9YKSB8fCBkZWZpbmVkKEFMUEhBRlJFU05FTClcbnZl
YzMgZ2V0UmVmbGVjdGFuY2VGcm9tQW5hbHl0aWNhbEJSREZMb29rdXBfSm9uZXMoZmxvYXQgVmRv
dE4sdmVjMyByZWZsZWN0YW5jZTAsdmVjMyByZWZsZWN0YW5jZTkwLGZsb2F0IHNtb290aG5lc3Mp
XG57XG5cbmZsb2F0IHdlaWdodD1taXgoRlJFU05FTF9NQVhJTVVNX09OX1JPVUdILDEuMCxzbW9v
dGhuZXNzKTtcbnJldHVybiByZWZsZWN0YW5jZTArd2VpZ2h0KihyZWZsZWN0YW5jZTkwLXJlZmxl
Y3RhbmNlMCkqcG93NShzYXR1cmF0ZSgxLjAtVmRvdE4pKTtcbn1cbiNlbmRpZlxuI2lmIGRlZmlu
ZWQoU0hFRU4pICYmIGRlZmluZWQoUkVGTEVDVElPTilcblxudmVjMyBnZXRTaGVlblJlZmxlY3Rh
bmNlRnJvbUJSREZMb29rdXAoY29uc3QgdmVjMyByZWZsZWN0YW5jZTAsY29uc3QgdmVjMyBlbnZp
cm9ubWVudEJyZGYpIHtcbnZlYzMgc2hlZW5FbnZpcm9ubWVudFJlZmxlY3RhbmNlPXJlZmxlY3Rh
bmNlMCplbnZpcm9ubWVudEJyZGYuYjtcbnJldHVybiBzaGVlbkVudmlyb25tZW50UmVmbGVjdGFu
Y2U7XG59XG4jZW5kaWZcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5c
blxuXG52ZWMzIGZyZXNuZWxTY2hsaWNrR0dYKGZsb2F0IFZkb3RILHZlYzMgcmVmbGVjdGFuY2Uw
LHZlYzMgcmVmbGVjdGFuY2U5MClcbntcbnJldHVybiByZWZsZWN0YW5jZTArKHJlZmxlY3RhbmNl
OTAtcmVmbGVjdGFuY2UwKSpwb3c1KDEuMC1WZG90SCk7XG59XG5mbG9hdCBmcmVzbmVsU2NobGlj
a0dHWChmbG9hdCBWZG90SCxmbG9hdCByZWZsZWN0YW5jZTAsZmxvYXQgcmVmbGVjdGFuY2U5MClc
bntcbnJldHVybiByZWZsZWN0YW5jZTArKHJlZmxlY3RhbmNlOTAtcmVmbGVjdGFuY2UwKSpwb3c1
KDEuMC1WZG90SCk7XG59XG4jaWZkZWYgQ0xFQVJDT0FUXG5cblxuXG5cblxudmVjMyBnZXRSMFJl
bWFwcGVkRm9yQ2xlYXJDb2F0KHZlYzMgZjApIHtcbiNpZmRlZiBDTEVBUkNPQVRfREVGQVVMVElP
UlxuI2lmZGVmIE1PQklMRVxucmV0dXJuIHNhdHVyYXRlKGYwKihmMCowLjUyNjg2OCswLjUyOTMy
NCktMC4wNDgyMjU2KTtcbiNlbHNlXG5yZXR1cm4gc2F0dXJhdGUoZjAqKGYwKigwLjk0MTg5Mi0w
LjI2MzAwOCpmMCkrMC4zNDY0NzkpLTAuMDI4NTk5OCk7XG4jZW5kaWZcbiNlbHNlXG52ZWMzIHM9
c3FydChmMCk7XG52ZWMzIHQ9KHZDbGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zLnordkNsZWFyQ29h
dFJlZnJhY3Rpb25QYXJhbXMudypzKS8odkNsZWFyQ29hdFJlZnJhY3Rpb25QYXJhbXMudyt2Q2xl
YXJDb2F0UmVmcmFjdGlvblBhcmFtcy56KnMpO1xucmV0dXJuIHQqdDtcbiNlbmRpZlxufVxuI2Vu
ZGlmXG5cblxuXG5cblxuXG5mbG9hdCBub3JtYWxEaXN0cmlidXRpb25GdW5jdGlvbl9Ucm93YnJp
ZGdlUmVpdHpHR1goZmxvYXQgTmRvdEgsZmxvYXQgYWxwaGFHKVxue1xuXG5cblxuZmxvYXQgYTI9
c3F1YXJlKGFscGhhRyk7XG5mbG9hdCBkPU5kb3RIKk5kb3RIKihhMi0xLjApKzEuMDtcbnJldHVy
biBhMi8oUEkqZCpkKTtcbn1cbiNpZmRlZiBTSEVFTlxuXG5mbG9hdCBub3JtYWxEaXN0cmlidXRp
b25GdW5jdGlvbl9DaGFybGllU2hlZW4oZmxvYXQgTmRvdEgsZmxvYXQgYWxwaGFHKVxue1xuZmxv
YXQgaW52Uj0xLi9hbHBoYUc7XG5mbG9hdCBjb3MyaD1OZG90SCpOZG90SDtcbmZsb2F0IHNpbjJo
PTEuLWNvczJoO1xucmV0dXJuICgyLitpbnZSKSpwb3coc2luMmgsaW52UiouNSkvKDIuKlBJKTtc
bn1cbiNlbmRpZlxuI2lmZGVmIEFOSVNPVFJPUElDXG5cblxuZmxvYXQgbm9ybWFsRGlzdHJpYnV0
aW9uRnVuY3Rpb25fQnVybGV5R0dYX0FuaXNvdHJvcGljKGZsb2F0IE5kb3RILGZsb2F0IFRkb3RI
LGZsb2F0IEJkb3RILGNvbnN0IHZlYzIgYWxwaGFUQikge1xuZmxvYXQgYTI9YWxwaGFUQi54KmFs
cGhhVEIueTtcbnZlYzMgdj12ZWMzKGFscGhhVEIueSpUZG90SCxhbHBoYVRCLngqQmRvdEgsYTIq
TmRvdEgpO1xuZmxvYXQgdjI9ZG90KHYsdik7XG5mbG9hdCB3Mj1hMi92MjtcbnJldHVybiBhMip3
Mip3MipSRUNJUFJPQ0FMX1BJO1xufVxuI2VuZGlmXG5cblxuXG5cbiNpZmRlZiBCUkRGX1ZfSEVJ
R0hUX0NPUlJFTEFURURcblxuXG5cbmZsb2F0IHNtaXRoVmlzaWJpbGl0eV9HR1hDb3JyZWxhdGVk
KGZsb2F0IE5kb3RMLGZsb2F0IE5kb3RWLGZsb2F0IGFscGhhRykge1xuI2lmZGVmIE1PQklMRVxu
XG5mbG9hdCBHR1hWPU5kb3RMKihOZG90ViooMS4wLWFscGhhRykrYWxwaGFHKTtcbmZsb2F0IEdH
WEw9TmRvdFYqKE5kb3RMKigxLjAtYWxwaGFHKSthbHBoYUcpO1xucmV0dXJuIDAuNS8oR0dYVitH
R1hMKTtcbiNlbHNlXG5mbG9hdCBhMj1hbHBoYUcqYWxwaGFHO1xuZmxvYXQgR0dYVj1OZG90TCpz
cXJ0KE5kb3RWKihOZG90Vi1hMipOZG90VikrYTIpO1xuZmxvYXQgR0dYTD1OZG90VipzcXJ0KE5k
b3RMKihOZG90TC1hMipOZG90TCkrYTIpO1xucmV0dXJuIDAuNS8oR0dYVitHR1hMKTtcbiNlbmRp
ZlxufVxuI2Vsc2VcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmZsb2F0IHNtaXRoVmlz
aWJpbGl0eUcxX1Ryb3dicmlkZ2VSZWl0ekdHWEZhc3QoZmxvYXQgZG90LGZsb2F0IGFscGhhRylc
bntcbiNpZmRlZiBNT0JJTEVcblxucmV0dXJuIDEuMC8oZG90K2FscGhhRysoMS4wLWFscGhhRykq
ZG90ICkpO1xuI2Vsc2VcbmZsb2F0IGFscGhhU3F1YXJlZD1hbHBoYUcqYWxwaGFHO1xucmV0dXJu
IDEuMC8oZG90K3NxcnQoYWxwaGFTcXVhcmVkKygxLjAtYWxwaGFTcXVhcmVkKSpkb3QqZG90KSk7
XG4jZW5kaWZcbn1cbmZsb2F0IHNtaXRoVmlzaWJpbGl0eV9Ucm93YnJpZGdlUmVpdHpHR1hGYXN0
KGZsb2F0IE5kb3RMLGZsb2F0IE5kb3RWLGZsb2F0IGFscGhhRylcbntcbmZsb2F0IHZpc2liaWxp
dHk9c21pdGhWaXNpYmlsaXR5RzFfVHJvd2JyaWRnZVJlaXR6R0dYRmFzdChOZG90TCxhbHBoYUcp
KnNtaXRoVmlzaWJpbGl0eUcxX1Ryb3dicmlkZ2VSZWl0ekdHWEZhc3QoTmRvdFYsYWxwaGFHKTtc
blxucmV0dXJuIHZpc2liaWxpdHk7XG59XG4jZW5kaWZcbiNpZmRlZiBBTklTT1RST1BJQ1xuXG5c
bmZsb2F0IHNtaXRoVmlzaWJpbGl0eV9HR1hDb3JyZWxhdGVkX0FuaXNvdHJvcGljKGZsb2F0IE5k
b3RMLGZsb2F0IE5kb3RWLGZsb2F0IFRkb3RWLGZsb2F0IEJkb3RWLGZsb2F0IFRkb3RMLGZsb2F0
IEJkb3RMLGNvbnN0IHZlYzIgYWxwaGFUQikge1xuZmxvYXQgbGFtYmRhVj1OZG90TCpsZW5ndGgo
dmVjMyhhbHBoYVRCLngqVGRvdFYsYWxwaGFUQi55KkJkb3RWLE5kb3RWKSk7XG5mbG9hdCBsYW1i
ZGFMPU5kb3RWKmxlbmd0aCh2ZWMzKGFscGhhVEIueCpUZG90TCxhbHBoYVRCLnkqQmRvdEwsTmRv
dEwpKTtcbmZsb2F0IHY9MC41LyhsYW1iZGFWK2xhbWJkYUwpO1xucmV0dXJuIHY7XG59XG4jZW5k
aWZcbiNpZmRlZiBDTEVBUkNPQVRcbmZsb2F0IHZpc2liaWxpdHlfS2VsZW1lbihmbG9hdCBWZG90
SCkge1xuXG5cblxucmV0dXJuIDAuMjUvKFZkb3RIKlZkb3RIKTtcbn1cbiNlbmRpZlxuI2lmZGVm
IFNIRUVOXG5cblxuXG5mbG9hdCB2aXNpYmlsaXR5X0FzaGlraG1pbihmbG9hdCBOZG90TCxmbG9h
dCBOZG90VilcbntcbnJldHVybiAxLi8oNC4qKE5kb3RMK05kb3RWLU5kb3RMKk5kb3RWKSk7XG59
XG4jZW5kaWZcblxuXG5cblxuXG5cblxuZmxvYXQgZGlmZnVzZUJSREZfQnVybGV5KGZsb2F0IE5k
b3RMLGZsb2F0IE5kb3RWLGZsb2F0IFZkb3RILGZsb2F0IHJvdWdobmVzcykge1xuXG5cbmZsb2F0
IGRpZmZ1c2VGcmVzbmVsTlY9cG93NShzYXR1cmF0ZUVwcygxLjAtTmRvdEwpKTtcbmZsb2F0IGRp
ZmZ1c2VGcmVzbmVsTkw9cG93NShzYXR1cmF0ZUVwcygxLjAtTmRvdFYpKTtcbmZsb2F0IGRpZmZ1
c2VGcmVzbmVsOTA9MC41KzIuMCpWZG90SCpWZG90SCpyb3VnaG5lc3M7XG5mbG9hdCBmcmVzbmVs
ID1cbigxLjArKGRpZmZ1c2VGcmVzbmVsOTAtMS4wKSpkaWZmdXNlRnJlc25lbE5MKSAqXG4oMS4w
KyhkaWZmdXNlRnJlc25lbDkwLTEuMCkqZGlmZnVzZUZyZXNuZWxOVik7XG5yZXR1cm4gZnJlc25l
bC9QSTtcbn1cbiNpZmRlZiBTU19UUkFOU0xVQ0VOQ1lcblxuXG52ZWMzIHRyYW5zbWl0dGFuY2VC
UkRGX0J1cmxleShjb25zdCB2ZWMzIHRpbnRDb2xvcixjb25zdCB2ZWMzIGRpZmZ1c2lvbkRpc3Rh
bmNlLGZsb2F0IHRoaWNrbmVzcykge1xudmVjMyBTPTEuL21heEVwcyhkaWZmdXNpb25EaXN0YW5j
ZSk7XG52ZWMzIHRlbXA9ZXhwKCgtMC4zMzMzMzMzMzMqdGhpY2tuZXNzKSpTKTtcbnJldHVybiB0
aW50Q29sb3IucmdiKjAuMjUqKHRlbXAqdGVtcCp0ZW1wKzMuMCp0ZW1wKTtcbn1cblxuXG5mbG9h
dCBjb21wdXRlV3JhcHBlZERpZmZ1c2VOZG90TChmbG9hdCBOZG90TCxmbG9hdCB3KSB7XG5mbG9h
dCB0PTEuMCt3O1xuZmxvYXQgaW52dDI9MS4wL3NxdWFyZSh0KTtcbnJldHVybiBzYXR1cmF0ZSgo
TmRvdEwrdykqaW52dDIpO1xufVxuI2VuZGlmXG4iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHBickJSREZGdW5jdGlvbnMgPSB7IG5h
bWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJyRGVidWcudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0lu
Y2x1ZGUvcGJyRGVidWcudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogcGJyRGVidWcgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicGJyRGVidWciLCBmdW5jdGlvbigpIHsgcmV0
dXJuIHBickRlYnVnOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisK
K3ZhciBuYW1lID0gJ3BickRlYnVnJzsKK3ZhciBzaGFkZXIgPSAiI2lmIERFQlVHTU9ERT4wXG5p
ZiAodkNsaXBTcGFjZVBvc2l0aW9uLngvdkNsaXBTcGFjZVBvc2l0aW9uLnc8dkRlYnVnTW9kZS54
KSB7XG5yZXR1cm47XG59XG5cbiNpZiBERUJVR01PREUgPT0gMVxuZ2xfRnJhZ0NvbG9yLnJnYj12
UG9zaXRpb25XLnJnYjtcbiNkZWZpbmUgREVCVUdNT0RFX05PUk1BTElaRVxuI2VsaWYgREVCVUdN
T0RFID09IDIgJiYgZGVmaW5lZChOT1JNQUwpXG5nbF9GcmFnQ29sb3IucmdiPXZOb3JtYWxXLnJn
YjtcbiNkZWZpbmUgREVCVUdNT0RFX05PUk1BTElaRVxuI2VsaWYgREVCVUdNT0RFID09IDMgJiYg
KGRlZmluZWQoQlVNUCkgfHwgZGVmaW5lZChQQVJBTExBWCkgfHwgZGVmaW5lZChBTklTT1RST1BJ
QykpXG5cbmdsX0ZyYWdDb2xvci5yZ2I9VEJOWzBdO1xuI2RlZmluZSBERUJVR01PREVfTk9STUFM
SVpFXG4jZWxpZiBERUJVR01PREUgPT0gNCAmJiAoZGVmaW5lZChCVU1QKSB8fCBkZWZpbmVkKFBB
UkFMTEFYKSB8fCBkZWZpbmVkKEFOSVNPVFJPUElDKSlcblxuZ2xfRnJhZ0NvbG9yLnJnYj1UQk5b
MV07XG4jZGVmaW5lIERFQlVHTU9ERV9OT1JNQUxJWkVcbiNlbGlmIERFQlVHTU9ERSA9PSA1XG5c
bmdsX0ZyYWdDb2xvci5yZ2I9bm9ybWFsVztcbiNkZWZpbmUgREVCVUdNT0RFX05PUk1BTElaRVxu
I2VsaWYgREVCVUdNT0RFID09IDYgJiYgZGVmaW5lZChNQUlOVVYxKVxuZ2xfRnJhZ0NvbG9yLnJn
Yj12ZWMzKHZNYWluVVYxLDAuMCk7XG4jZWxpZiBERUJVR01PREUgPT0gNyAmJiBkZWZpbmVkKE1B
SU5VVjIpXG5nbF9GcmFnQ29sb3IucmdiPXZlYzModk1haW5VVjIsMC4wKTtcbiNlbGlmIERFQlVH
TU9ERSA9PSA4ICYmIGRlZmluZWQoQ0xFQVJDT0FUKSAmJiBkZWZpbmVkKENMRUFSQ09BVF9CVU1Q
KVxuXG5nbF9GcmFnQ29sb3IucmdiPVRCTkNsZWFyQ29hdFswXTtcbiNkZWZpbmUgREVCVUdNT0RF
X05PUk1BTElaRVxuI2VsaWYgREVCVUdNT0RFID09IDkgJiYgZGVmaW5lZChDTEVBUkNPQVQpICYm
IGRlZmluZWQoQ0xFQVJDT0FUX0JVTVApXG5cbmdsX0ZyYWdDb2xvci5yZ2I9VEJOQ2xlYXJDb2F0
WzFdO1xuI2RlZmluZSBERUJVR01PREVfTk9STUFMSVpFXG4jZWxpZiBERUJVR01PREUgPT0gMTAg
JiYgZGVmaW5lZChDTEVBUkNPQVQpXG5cbmdsX0ZyYWdDb2xvci5yZ2I9Y2xlYXJDb2F0Tm9ybWFs
VztcbiNkZWZpbmUgREVCVUdNT0RFX05PUk1BTElaRVxuI2VsaWYgREVCVUdNT0RFID09IDExICYm
IGRlZmluZWQoQU5JU09UUk9QSUMpXG5nbF9GcmFnQ29sb3IucmdiPWFuaXNvdHJvcGljTm9ybWFs
O1xuI2RlZmluZSBERUJVR01PREVfTk9STUFMSVpFXG4jZWxpZiBERUJVR01PREUgPT0gMTIgJiYg
ZGVmaW5lZChBTklTT1RST1BJQylcbmdsX0ZyYWdDb2xvci5yZ2I9YW5pc290cm9waWNUYW5nZW50
O1xuI2RlZmluZSBERUJVR01PREVfTk9STUFMSVpFXG4jZWxpZiBERUJVR01PREUgPT0gMTMgJiYg
ZGVmaW5lZChBTklTT1RST1BJQylcbmdsX0ZyYWdDb2xvci5yZ2I9YW5pc290cm9waWNCaXRhbmdl
bnQ7XG4jZGVmaW5lIERFQlVHTU9ERV9OT1JNQUxJWkVcblxuI2VsaWYgREVCVUdNT0RFID09IDIw
ICYmIGRlZmluZWQoQUxCRURPKVxuZ2xfRnJhZ0NvbG9yLnJnYj1hbGJlZG9UZXh0dXJlLnJnYjtc
biNlbGlmIERFQlVHTU9ERSA9PSAyMSAmJiBkZWZpbmVkKEFNQklFTlQpXG5nbF9GcmFnQ29sb3Iu
cmdiPWFtYmllbnRPY2NsdXNpb25Db2xvck1hcC5yZ2I7XG4jZWxpZiBERUJVR01PREUgPT0gMjIg
JiYgZGVmaW5lZChPUEFDSVRZKVxuZ2xfRnJhZ0NvbG9yLnJnYj1vcGFjaXR5TWFwLnJnYjtcbiNl
bGlmIERFQlVHTU9ERSA9PSAyMyAmJiBkZWZpbmVkKEVNSVNTSVZFKVxuZ2xfRnJhZ0NvbG9yLnJn
Yj1lbWlzc2l2ZUNvbG9yVGV4LnJnYjtcbiNkZWZpbmUgREVCVUdNT0RFX0dBTU1BXG4jZWxpZiBE
RUJVR01PREUgPT0gMjQgJiYgZGVmaW5lZChMSUdIVE1BUClcbmdsX0ZyYWdDb2xvci5yZ2I9bGln
aHRtYXBDb2xvci5yZ2I7XG4jZGVmaW5lIERFQlVHTU9ERV9HQU1NQVxuI2VsaWYgREVCVUdNT0RF
ID09IDI1ICYmIGRlZmluZWQoUkVGTEVDVElWSVRZKSAmJiBkZWZpbmVkKE1FVEFMTElDV09SS0ZM
T1cpXG5nbF9GcmFnQ29sb3IucmdiPXN1cmZhY2VNZXRhbGxpY0NvbG9yTWFwLnJnYjtcbiNlbGlm
IERFQlVHTU9ERSA9PSAyNiAmJiBkZWZpbmVkKFJFRkxFQ1RJVklUWSkgJiYgIWRlZmluZWQoTUVU
QUxMSUNXT1JLRkxPVylcbmdsX0ZyYWdDb2xvci5yZ2I9c3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9y
TWFwLnJnYjtcbiNkZWZpbmUgREVCVUdNT0RFX0dBTU1BXG4jZWxpZiBERUJVR01PREUgPT0gMjcg
JiYgZGVmaW5lZChDTEVBUkNPQVQpICYmIGRlZmluZWQoQ0xFQVJDT0FUX1RFWFRVUkUpXG5nbF9G
cmFnQ29sb3IucmdiPXZlYzMoY2xlYXJDb2F0TWFwRGF0YS5yZywwLjApO1xuI2VsaWYgREVCVUdN
T0RFID09IDI4ICYmIGRlZmluZWQoQ0xFQVJDT0FUKSAmJiBkZWZpbmVkKENMRUFSQ09BVF9USU5U
KSAmJiBkZWZpbmVkKENMRUFSQ09BVF9USU5UX1RFWFRVUkUpXG5nbF9GcmFnQ29sb3IucmdiPWNs
ZWFyQ29hdFRpbnRNYXBEYXRhLnJnYjtcbiNlbGlmIERFQlVHTU9ERSA9PSAyOSAmJiBkZWZpbmVk
KFNIRUVOKSAmJiBkZWZpbmVkKFNIRUVOX1RFWFRVUkUpXG5nbF9GcmFnQ29sb3IucmdiPXNoZWVu
TWFwRGF0YS5yZ2I7XG4jZWxpZiBERUJVR01PREUgPT0gMzAgJiYgZGVmaW5lZChBTklTT1RST1BJ
QykgJiYgZGVmaW5lZChBTklTT1RST1BJQ19URVhUVVJFKVxuZ2xfRnJhZ0NvbG9yLnJnYj1hbmlz
b3Ryb3B5TWFwRGF0YS5yZ2I7XG4jZWxpZiBERUJVR01PREUgPT0gMzEgJiYgZGVmaW5lZChTVUJT
VVJGQUNFKSAmJiBkZWZpbmVkKFNTX1RISUNLTkVTU0FORE1BU0tfVEVYVFVSRSlcbmdsX0ZyYWdD
b2xvci5yZ2I9dGhpY2tuZXNzTWFwLnJnYjtcblxuI2VsaWYgREVCVUdNT0RFID09IDQwICYmIGRl
ZmluZWQoU1NfUkVGUkFDVElPTilcblxuZ2xfRnJhZ0NvbG9yLnJnYj1lbnZpcm9ubWVudFJlZnJh
Y3Rpb24ucmdiO1xuI2RlZmluZSBERUJVR01PREVfR0FNTUFcbiNlbGlmIERFQlVHTU9ERSA9PSA0
MSAmJiBkZWZpbmVkKFJFRkxFQ1RJT04pXG5nbF9GcmFnQ29sb3IucmdiPWVudmlyb25tZW50UmFk
aWFuY2UucmdiO1xuI2RlZmluZSBERUJVR01PREVfR0FNTUFcbiNlbGlmIERFQlVHTU9ERSA9PSA0
MiAmJiBkZWZpbmVkKENMRUFSQ09BVCkgJiYgZGVmaW5lZChSRUZMRUNUSU9OKVxuZ2xfRnJhZ0Nv
bG9yLnJnYj1lbnZpcm9ubWVudENsZWFyQ29hdFJhZGlhbmNlO1xuI2RlZmluZSBERUJVR01PREVf
R0FNTUFcblxuI2VsaWYgREVCVUdNT0RFID09IDUwXG5nbF9GcmFnQ29sb3IucmdiPWRpZmZ1c2VC
YXNlLnJnYjtcbiNkZWZpbmUgREVCVUdNT0RFX0dBTU1BXG4jZWxpZiBERUJVR01PREUgPT0gNTEg
JiYgZGVmaW5lZChTUEVDVUxBUlRFUk0pXG5nbF9GcmFnQ29sb3IucmdiPXNwZWN1bGFyQmFzZS5y
Z2I7XG4jZGVmaW5lIERFQlVHTU9ERV9HQU1NQVxuI2VsaWYgREVCVUdNT0RFID09IDUyICYmIGRl
ZmluZWQoQ0xFQVJDT0FUKVxuZ2xfRnJhZ0NvbG9yLnJnYj1jbGVhckNvYXRCYXNlLnJnYjtcbiNk
ZWZpbmUgREVCVUdNT0RFX0dBTU1BXG4jZWxpZiBERUJVR01PREUgPT0gNTMgJiYgZGVmaW5lZChT
SEVFTilcbmdsX0ZyYWdDb2xvci5yZ2I9c2hlZW5CYXNlLnJnYjtcbiNkZWZpbmUgREVCVUdNT0RF
X0dBTU1BXG4jZWxpZiBERUJVR01PREUgPT0gNTQgJiYgZGVmaW5lZChSRUZMRUNUSU9OKVxuZ2xf
RnJhZ0NvbG9yLnJnYj1lbnZpcm9ubWVudElycmFkaWFuY2UucmdiO1xuI2RlZmluZSBERUJVR01P
REVfR0FNTUFcblxuI2VsaWYgREVCVUdNT0RFID09IDYwXG5nbF9GcmFnQ29sb3IucmdiPXN1cmZh
Y2VBbGJlZG8ucmdiO1xuI2RlZmluZSBERUJVR01PREVfR0FNTUFcbiNlbGlmIERFQlVHTU9ERSA9
PSA2MVxuZ2xfRnJhZ0NvbG9yLnJnYj1zcGVjdWxhckVudmlyb25tZW50UjA7XG4jZGVmaW5lIERF
QlVHTU9ERV9HQU1NQVxuI2VsaWYgREVCVUdNT0RFID09IDYyICYmIGRlZmluZWQoTUVUQUxMSUNX
T1JLRkxPVylcbmdsX0ZyYWdDb2xvci5yZ2I9dmVjMyhtZXRhbGxpY1JvdWdobmVzcy5yKTtcbiNl
bGlmIERFQlVHTU9ERSA9PSA2M1xuZ2xfRnJhZ0NvbG9yLnJnYj12ZWMzKHJvdWdobmVzcyk7XG4j
ZWxpZiBERUJVR01PREUgPT0gNjRcbmdsX0ZyYWdDb2xvci5yZ2I9dmVjMyhhbHBoYUcpO1xuI2Vs
aWYgREVCVUdNT0RFID09IDY1XG5nbF9GcmFnQ29sb3IucmdiPXZlYzMoTmRvdFYpO1xuI2VsaWYg
REVCVUdNT0RFID09IDY2ICYmIGRlZmluZWQoQ0xFQVJDT0FUKSAmJiBkZWZpbmVkKENMRUFSQ09B
VF9USU5UKVxuZ2xfRnJhZ0NvbG9yLnJnYj1jbGVhckNvYXRDb2xvci5yZ2I7XG4jZGVmaW5lIERF
QlVHTU9ERV9HQU1NQVxuI2VsaWYgREVCVUdNT0RFID09IDY3ICYmIGRlZmluZWQoQ0xFQVJDT0FU
KVxuZ2xfRnJhZ0NvbG9yLnJnYj12ZWMzKGNsZWFyQ29hdFJvdWdobmVzcyk7XG4jZWxpZiBERUJV
R01PREUgPT0gNjggJiYgZGVmaW5lZChDTEVBUkNPQVQpXG5nbF9GcmFnQ29sb3IucmdiPXZlYzMo
Y2xlYXJDb2F0TmRvdFYpO1xuI2VsaWYgREVCVUdNT0RFID09IDY5ICYmIGRlZmluZWQoU1VCU1VS
RkFDRSkgJiYgZGVmaW5lZChTU19UUkFOU0xVQ0VOQ1kpXG5nbF9GcmFnQ29sb3IucmdiPXRyYW5z
bWl0dGFuY2U7XG4jZWxpZiBERUJVR01PREUgPT0gNzAgJiYgZGVmaW5lZChTVUJTVVJGQUNFKSAm
JiBkZWZpbmVkKFNTX1JFRlJBQ1RJT04pXG5nbF9GcmFnQ29sb3IucmdiPXJlZnJhY3Rpb25UcmFu
c21pdHRhbmNlO1xuXG4jZWxpZiBERUJVR01PREUgPT0gODAgJiYgZGVmaW5lZChSQURJQU5DRU9D
Q0xVU0lPTilcbmdsX0ZyYWdDb2xvci5yZ2I9dmVjMyhzZW8pO1xuI2VsaWYgREVCVUdNT0RFID09
IDgxICYmIGRlZmluZWQoSE9SSVpPTk9DQ0xVU0lPTilcbmdsX0ZyYWdDb2xvci5yZ2I9dmVjMyhl
aG8pO1xuI2VsaWYgREVCVUdNT0RFID09IDgyICYmIGRlZmluZWQoTVNfQlJERl9FTkVSR1lfQ09O
U0VSVkFUSU9OKVxuZ2xfRnJhZ0NvbG9yLnJnYj12ZWMzKGVuZXJneUNvbnNlcnZhdGlvbkZhY3Rv
cik7XG4jZWxpZiBERUJVR01PREUgPT0gODMgJiYgZGVmaW5lZChFTlZJUk9OTUVOVEJSREYpICYm
ICFkZWZpbmVkKFJFRkxFQ1RJT05NQVBfU0tZQk9YKVxuZ2xfRnJhZ0NvbG9yLnJnYj1zcGVjdWxh
ckVudmlyb25tZW50UmVmbGVjdGFuY2U7XG4jZGVmaW5lIERFQlVHTU9ERV9HQU1NQVxuI2VsaWYg
REVCVUdNT0RFID09IDg0ICYmIGRlZmluZWQoQ0xFQVJDT0FUKSAmJiBkZWZpbmVkKEVOVklST05N
RU5UQlJERikgJiYgIWRlZmluZWQoUkVGTEVDVElPTk1BUF9TS1lCT1gpXG5nbF9GcmFnQ29sb3Iu
cmdiPWNsZWFyQ29hdEVudmlyb25tZW50UmVmbGVjdGFuY2U7XG4jZGVmaW5lIERFQlVHTU9ERV9H
QU1NQVxuI2VsaWYgREVCVUdNT0RFID09IDg1ICYmIGRlZmluZWQoU0hFRU4pICYmIGRlZmluZWQo
UkVGTEVDVElPTilcbmdsX0ZyYWdDb2xvci5yZ2I9c2hlZW5FbnZpcm9ubWVudFJlZmxlY3RhbmNl
O1xuI2RlZmluZSBERUJVR01PREVfR0FNTUFcbiNlbGlmIERFQlVHTU9ERSA9PSA4NiAmJiBkZWZp
bmVkKEFMUEhBQkxFTkQpXG5nbF9GcmFnQ29sb3IucmdiPXZlYzMobHVtaW5hbmNlT3ZlckFscGhh
KTtcbiNlbGlmIERFQlVHTU9ERSA9PSA4N1xuZ2xfRnJhZ0NvbG9yLnJnYj12ZWMzKGFscGhhKTtc
biNlbmRpZlxuZ2xfRnJhZ0NvbG9yLnJnYio9dkRlYnVnTW9kZS55O1xuI2lmZGVmIERFQlVHTU9E
RV9OT1JNQUxJWkVcbmdsX0ZyYWdDb2xvci5yZ2I9bm9ybWFsaXplKGdsX0ZyYWdDb2xvci5yZ2Ip
KjAuNSswLjU7XG4jZW5kaWZcbiNpZmRlZiBERUJVR01PREVfR0FNTUFcbmdsX0ZyYWdDb2xvci5y
Z2I9dG9HYW1tYVNwYWNlKGdsX0ZyYWdDb2xvci5yZ2IpO1xuI2VuZGlmXG5nbF9GcmFnQ29sb3Iu
YT0xLjA7XG4jZW5kaWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7Cisv
KiogQGhpZGRlbiAqLwordmFyIHBickRlYnVnID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRl
ciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3Bi
ckRpcmVjdExpZ2h0aW5nRmFsbG9mZkZ1bmN0aW9ucy50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJyRGlyZWN0TGlnaHRpbmdGYWxsb2Zm
RnVuY3Rpb25zLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBwYnJEaXJlY3RMaWdodGluZ0ZhbGxvZmZGdW5jdGlvbnMgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAicGJyRGlyZWN0TGlnaHRpbmdGYWxsb2ZmRnVuY3Rpb25zIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBwYnJEaXJlY3RMaWdodGluZ0ZhbGxvZmZGdW5jdGlvbnM7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMv
ZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAncGJyRGly
ZWN0TGlnaHRpbmdGYWxsb2ZmRnVuY3Rpb25zJzsKK3ZhciBzaGFkZXIgPSAiZmxvYXQgY29tcHV0
ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX1N0YW5kYXJkKHZlYzMgbGlnaHRPZmZzZXQsZmxvYXQgcmFu
Z2UpXG57XG5yZXR1cm4gbWF4KDAuLDEuMC1sZW5ndGgobGlnaHRPZmZzZXQpL3JhbmdlKTtcbn1c
bmZsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9QaHlzaWNhbChmbG9hdCBsaWdodERp
c3RhbmNlU3F1YXJlZClcbntcbnJldHVybiAxLjAvbWF4RXBzKGxpZ2h0RGlzdGFuY2VTcXVhcmVk
KTtcbn1cbmZsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9HTFRGKGZsb2F0IGxpZ2h0
RGlzdGFuY2VTcXVhcmVkLGZsb2F0IGludmVyc2VTcXVhcmVkUmFuZ2UpXG57XG5mbG9hdCBsaWdo
dERpc3RhbmNlRmFsbG9mZj0xLjAvbWF4RXBzKGxpZ2h0RGlzdGFuY2VTcXVhcmVkKTtcbmZsb2F0
IGZhY3Rvcj1saWdodERpc3RhbmNlU3F1YXJlZCppbnZlcnNlU3F1YXJlZFJhbmdlO1xuZmxvYXQg
YXR0ZW51YXRpb249c2F0dXJhdGUoMS4wLWZhY3RvcipmYWN0b3IpO1xuYXR0ZW51YXRpb24qPWF0
dGVudWF0aW9uO1xuXG5saWdodERpc3RhbmNlRmFsbG9mZio9YXR0ZW51YXRpb247XG5yZXR1cm4g
bGlnaHREaXN0YW5jZUZhbGxvZmY7XG59XG5mbG9hdCBjb21wdXRlRGlzdGFuY2VMaWdodEZhbGxv
ZmYodmVjMyBsaWdodE9mZnNldCxmbG9hdCBsaWdodERpc3RhbmNlU3F1YXJlZCxmbG9hdCByYW5n
ZSxmbG9hdCBpbnZlcnNlU3F1YXJlZFJhbmdlKVxue1xuI2lmZGVmIFVTRVBIWVNJQ0FMTElHSFRG
QUxMT0ZGXG5yZXR1cm4gY29tcHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGxpZ2h0
RGlzdGFuY2VTcXVhcmVkKTtcbiNlbGlmIGRlZmluZWQoVVNFR0xURkxJR0hURkFMTE9GRilcbnJl
dHVybiBjb21wdXRlRGlzdGFuY2VMaWdodEZhbGxvZmZfR0xURihsaWdodERpc3RhbmNlU3F1YXJl
ZCxpbnZlcnNlU3F1YXJlZFJhbmdlKTtcbiNlbHNlXG5yZXR1cm4gY29tcHV0ZURpc3RhbmNlTGln
aHRGYWxsb2ZmX1N0YW5kYXJkKGxpZ2h0T2Zmc2V0LHJhbmdlKTtcbiNlbmRpZlxufVxuZmxvYXQg
Y29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmX1N0YW5kYXJkKHZlYzMgbGlnaHREaXJlY3Rp
b24sdmVjMyBkaXJlY3Rpb25Ub0xpZ2h0Q2VudGVyVyxmbG9hdCBjb3NIYWxmQW5nbGUsZmxvYXQg
ZXhwb25lbnQpXG57XG5mbG9hdCBmYWxsb2ZmPTAuMDtcbmZsb2F0IGNvc0FuZ2xlPW1heEVwcyhk
b3QoLWxpZ2h0RGlyZWN0aW9uLGRpcmVjdGlvblRvTGlnaHRDZW50ZXJXKSk7XG5pZiAoY29zQW5n
bGU+PWNvc0hhbGZBbmdsZSlcbntcbmZhbGxvZmY9bWF4KDAuLHBvdyhjb3NBbmdsZSxleHBvbmVu
dCkpO1xufVxucmV0dXJuIGZhbGxvZmY7XG59XG5mbG9hdCBjb21wdXRlRGlyZWN0aW9uYWxMaWdo
dEZhbGxvZmZfUGh5c2ljYWwodmVjMyBsaWdodERpcmVjdGlvbix2ZWMzIGRpcmVjdGlvblRvTGln
aHRDZW50ZXJXLGZsb2F0IGNvc0hhbGZBbmdsZSlcbntcbmNvbnN0IGZsb2F0IGtNaW51c0xvZzJD
b25lQW5nbGVJbnRlbnNpdHlSYXRpbz02LjY0Mzg1NjE4OTc3O1xuXG5cblxuXG5cbmZsb2F0IGNv
bmNlbnRyYXRpb25LYXBwYT1rTWludXNMb2cyQ29uZUFuZ2xlSW50ZW5zaXR5UmF0aW8vKDEuMC1j
b3NIYWxmQW5nbGUpO1xuXG5cbnZlYzQgbGlnaHREaXJlY3Rpb25TcHJlYWRTRz12ZWM0KC1saWdo
dERpcmVjdGlvbipjb25jZW50cmF0aW9uS2FwcGEsLWNvbmNlbnRyYXRpb25LYXBwYSk7XG5mbG9h
dCBmYWxsb2ZmPWV4cDIoZG90KHZlYzQoZGlyZWN0aW9uVG9MaWdodENlbnRlclcsMS4wKSxsaWdo
dERpcmVjdGlvblNwcmVhZFNHKSk7XG5yZXR1cm4gZmFsbG9mZjtcbn1cbmZsb2F0IGNvbXB1dGVE
aXJlY3Rpb25hbExpZ2h0RmFsbG9mZl9HTFRGKHZlYzMgbGlnaHREaXJlY3Rpb24sdmVjMyBkaXJl
Y3Rpb25Ub0xpZ2h0Q2VudGVyVyxmbG9hdCBsaWdodEFuZ2xlU2NhbGUsZmxvYXQgbGlnaHRBbmds
ZU9mZnNldClcbntcblxuXG5cbmZsb2F0IGNkPWRvdCgtbGlnaHREaXJlY3Rpb24sZGlyZWN0aW9u
VG9MaWdodENlbnRlclcpO1xuZmxvYXQgZmFsbG9mZj1zYXR1cmF0ZShjZCpsaWdodEFuZ2xlU2Nh
bGUrbGlnaHRBbmdsZU9mZnNldCk7XG5cbmZhbGxvZmYqPWZhbGxvZmY7XG5yZXR1cm4gZmFsbG9m
Zjtcbn1cbmZsb2F0IGNvbXB1dGVEaXJlY3Rpb25hbExpZ2h0RmFsbG9mZih2ZWMzIGxpZ2h0RGly
ZWN0aW9uLHZlYzMgZGlyZWN0aW9uVG9MaWdodENlbnRlclcsZmxvYXQgY29zSGFsZkFuZ2xlLGZs
b2F0IGV4cG9uZW50LGZsb2F0IGxpZ2h0QW5nbGVTY2FsZSxmbG9hdCBsaWdodEFuZ2xlT2Zmc2V0
KVxue1xuI2lmZGVmIFVTRVBIWVNJQ0FMTElHSFRGQUxMT0ZGXG5yZXR1cm4gY29tcHV0ZURpcmVj
dGlvbmFsTGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGxpZ2h0RGlyZWN0aW9uLGRpcmVjdGlvblRvTGln
aHRDZW50ZXJXLGNvc0hhbGZBbmdsZSk7XG4jZWxpZiBkZWZpbmVkKFVTRUdMVEZMSUdIVEZBTExP
RkYpXG5yZXR1cm4gY29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmX0dMVEYobGlnaHREaXJl
Y3Rpb24sZGlyZWN0aW9uVG9MaWdodENlbnRlclcsbGlnaHRBbmdsZVNjYWxlLGxpZ2h0QW5nbGVP
ZmZzZXQpO1xuI2Vsc2VcbnJldHVybiBjb21wdXRlRGlyZWN0aW9uYWxMaWdodEZhbGxvZmZfU3Rh
bmRhcmQobGlnaHREaXJlY3Rpb24sZGlyZWN0aW9uVG9MaWdodENlbnRlclcsY29zSGFsZkFuZ2xl
LGV4cG9uZW50KTtcbiNlbmRpZlxufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNo
YWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgcGJyRGlyZWN0TGlnaHRpbmdGYWxsb2ZmRnVuY3Rp
b25zID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickRpcmVjdExpZ2h0aW5nRnVuY3Rpb25z
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickRp
cmVjdExpZ2h0aW5nRnVuY3Rpb25zLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IHBickRpcmVjdExpZ2h0aW5nRnVuY3Rpb25zICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgInBickRpcmVjdExpZ2h0aW5nRnVuY3Rpb25zIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBwYnJEaXJlY3RMaWdodGluZ0Z1bmN0aW9uczsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0
ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdwYnJEaXJlY3RMaWdodGluZ0Z1bmN0
aW9ucyc7Cit2YXIgc2hhZGVyID0gIiNkZWZpbmUgQ0xFQVJDT0FUUkVGTEVDVEFOQ0U5MCAxLjBc
blxuc3RydWN0IGxpZ2h0aW5nSW5mb1xue1xudmVjMyBkaWZmdXNlO1xuI2lmZGVmIFNQRUNVTEFS
VEVSTVxudmVjMyBzcGVjdWxhcjtcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVFxuXG5cbnZlYzQg
Y2xlYXJDb2F0O1xuI2VuZGlmXG4jaWZkZWYgU0hFRU5cbnZlYzMgc2hlZW47XG4jZW5kaWZcbn07
XG5cbmZsb2F0IGFkanVzdFJvdWdobmVzc0Zyb21MaWdodFByb3BlcnRpZXMoZmxvYXQgcm91Z2hu
ZXNzLGZsb2F0IGxpZ2h0UmFkaXVzLGZsb2F0IGxpZ2h0RGlzdGFuY2UpIHtcbiNpZiBkZWZpbmVk
KFVTRVBIWVNJQ0FMTElHSFRGQUxMT0ZGKSB8fCBkZWZpbmVkKFVTRUdMVEZMSUdIVEZBTExPRkYp
XG5cbmZsb2F0IGxpZ2h0Um91Z2huZXNzPWxpZ2h0UmFkaXVzL2xpZ2h0RGlzdGFuY2U7XG5cbmZs
b2F0IHRvdGFsUm91Z2huZXNzPXNhdHVyYXRlKGxpZ2h0Um91Z2huZXNzK3JvdWdobmVzcyk7XG5y
ZXR1cm4gdG90YWxSb3VnaG5lc3M7XG4jZWxzZVxucmV0dXJuIHJvdWdobmVzcztcbiNlbmRpZlxu
fVxudmVjMyBjb21wdXRlSGVtaXNwaGVyaWNEaWZmdXNlTGlnaHRpbmcocHJlTGlnaHRpbmdJbmZv
IGluZm8sdmVjMyBsaWdodENvbG9yLHZlYzMgZ3JvdW5kQ29sb3IpIHtcbnJldHVybiBtaXgoZ3Jv
dW5kQ29sb3IsbGlnaHRDb2xvcixpbmZvLk5kb3RMKTtcbn1cbnZlYzMgY29tcHV0ZURpZmZ1c2VM
aWdodGluZyhwcmVMaWdodGluZ0luZm8gaW5mbyx2ZWMzIGxpZ2h0Q29sb3IpIHtcbmZsb2F0IGRp
ZmZ1c2VUZXJtPWRpZmZ1c2VCUkRGX0J1cmxleShpbmZvLk5kb3RMLGluZm8uTmRvdFYsaW5mby5W
ZG90SCxpbmZvLnJvdWdobmVzcyk7XG5yZXR1cm4gZGlmZnVzZVRlcm0qaW5mby5hdHRlbnVhdGlv
bippbmZvLk5kb3RMKmxpZ2h0Q29sb3I7XG59XG52ZWMyIGNvbXB1dGVQcm9qZWN0aW9uVGV4dHVy
ZURpZmZ1c2VMaWdodGluZ1VWKG1hdDQgdGV4dHVyZVByb2plY3Rpb25NYXRyaXgpe1xudmVjNCBz
dHJxPXRleHR1cmVQcm9qZWN0aW9uTWF0cml4KnZlYzQodlBvc2l0aW9uVywxLjApO1xuc3RycS89
c3RycS53O1xucmV0dXJuIHN0cnEueHk7XG59XG4jaWZkZWYgU1NfVFJBTlNMVUNFTkNZXG52ZWMz
IGNvbXB1dGVEaWZmdXNlQW5kVHJhbnNtaXR0ZWRMaWdodGluZyhwcmVMaWdodGluZ0luZm8gaW5m
byx2ZWMzIGxpZ2h0Q29sb3IsdmVjMyB0cmFuc21pdHRhbmNlKSB7XG5mbG9hdCBOZG90TD1hYnNF
cHMoaW5mby5OZG90TFVuY2xhbXBlZCk7XG5cbmZsb2F0IHdyYXBOZG90TD1jb21wdXRlV3JhcHBl
ZERpZmZ1c2VOZG90TChOZG90TCwwLjAyKTtcblxuZmxvYXQgdHJBZGFwdD1zdGVwKDAuLGluZm8u
TmRvdExVbmNsYW1wZWQpO1xudmVjMyB0cmFuc21pdHRhbmNlTmRvdEw9bWl4KHRyYW5zbWl0dGFu
Y2Uqd3JhcE5kb3RMLHZlYzMod3JhcE5kb3RMKSx0ckFkYXB0KTtcbmZsb2F0IGRpZmZ1c2VUZXJt
PWRpZmZ1c2VCUkRGX0J1cmxleShOZG90TCxpbmZvLk5kb3RWLGluZm8uVmRvdEgsaW5mby5yb3Vn
aG5lc3MpO1xucmV0dXJuIGRpZmZ1c2VUZXJtKnRyYW5zbWl0dGFuY2VOZG90TCppbmZvLmF0dGVu
dWF0aW9uKmxpZ2h0Q29sb3I7XG59XG4jZW5kaWZcbiNpZmRlZiBTUEVDVUxBUlRFUk1cbnZlYzMg
Y29tcHV0ZVNwZWN1bGFyTGlnaHRpbmcocHJlTGlnaHRpbmdJbmZvIGluZm8sdmVjMyBOLHZlYzMg
cmVmbGVjdGFuY2UwLHZlYzMgcmVmbGVjdGFuY2U5MCxmbG9hdCBnZW9tZXRyaWNSb3VnaG5lc3NG
YWN0b3IsdmVjMyBsaWdodENvbG9yKSB7XG5mbG9hdCBOZG90SD1zYXR1cmF0ZUVwcyhkb3QoTixp
bmZvLkgpKTtcbmZsb2F0IHJvdWdobmVzcz1tYXgoaW5mby5yb3VnaG5lc3MsZ2VvbWV0cmljUm91
Z2huZXNzRmFjdG9yKTtcbmZsb2F0IGFscGhhRz1jb252ZXJ0Um91Z2huZXNzVG9BdmVyYWdlU2xv
cGUocm91Z2huZXNzKTtcbnZlYzMgZnJlc25lbD1mcmVzbmVsU2NobGlja0dHWChpbmZvLlZkb3RI
LHJlZmxlY3RhbmNlMCxyZWZsZWN0YW5jZTkwKTtcbmZsb2F0IGRpc3RyaWJ1dGlvbj1ub3JtYWxE
aXN0cmlidXRpb25GdW5jdGlvbl9Ucm93YnJpZGdlUmVpdHpHR1goTmRvdEgsYWxwaGFHKTtcbiNp
ZmRlZiBCUkRGX1ZfSEVJR0hUX0NPUlJFTEFURURcbmZsb2F0IHZpc2liaWxpdHk9c21pdGhWaXNp
YmlsaXR5X0dHWENvcnJlbGF0ZWQoaW5mby5OZG90TCxpbmZvLk5kb3RWLGFscGhhRyk7XG4jZWxz
ZVxuZmxvYXQgdmlzaWJpbGl0eT1zbWl0aFZpc2liaWxpdHlfVHJvd2JyaWRnZVJlaXR6R0dYRmFz
dChpbmZvLk5kb3RMLGluZm8uTmRvdFYsYWxwaGFHKTtcbiNlbmRpZlxudmVjMyBzcGVjVGVybT1m
cmVzbmVsKmRpc3RyaWJ1dGlvbip2aXNpYmlsaXR5O1xucmV0dXJuIHNwZWNUZXJtKmluZm8uYXR0
ZW51YXRpb24qaW5mby5OZG90TCpsaWdodENvbG9yO1xufVxuI2VuZGlmXG4jaWZkZWYgQU5JU09U
Uk9QSUNcbnZlYzMgY29tcHV0ZUFuaXNvdHJvcGljU3BlY3VsYXJMaWdodGluZyhwcmVMaWdodGlu
Z0luZm8gaW5mbyx2ZWMzIFYsdmVjMyBOLHZlYzMgVCx2ZWMzIEIsZmxvYXQgYW5pc290cm9weSx2
ZWMzIHJlZmxlY3RhbmNlMCx2ZWMzIHJlZmxlY3RhbmNlOTAsZmxvYXQgZ2VvbWV0cmljUm91Z2hu
ZXNzRmFjdG9yLHZlYzMgbGlnaHRDb2xvcikge1xuZmxvYXQgTmRvdEg9c2F0dXJhdGVFcHMoZG90
KE4saW5mby5IKSk7XG5mbG9hdCBUZG90SD1kb3QoVCxpbmZvLkgpO1xuZmxvYXQgQmRvdEg9ZG90
KEIsaW5mby5IKTtcbmZsb2F0IFRkb3RWPWRvdChULFYpO1xuZmxvYXQgQmRvdFY9ZG90KEIsVik7
XG5mbG9hdCBUZG90TD1kb3QoVCxpbmZvLkwpO1xuZmxvYXQgQmRvdEw9ZG90KEIsaW5mby5MKTtc
bmZsb2F0IGFscGhhRz1jb252ZXJ0Um91Z2huZXNzVG9BdmVyYWdlU2xvcGUoaW5mby5yb3VnaG5l
c3MpO1xudmVjMiBhbHBoYVRCPWdldEFuaXNvdHJvcGljUm91Z2huZXNzKGFscGhhRyxhbmlzb3Ry
b3B5KTtcbmFscGhhVEI9bWF4KGFscGhhVEIsc3F1YXJlKGdlb21ldHJpY1JvdWdobmVzc0ZhY3Rv
cikpO1xudmVjMyBmcmVzbmVsPWZyZXNuZWxTY2hsaWNrR0dYKGluZm8uVmRvdEgscmVmbGVjdGFu
Y2UwLHJlZmxlY3RhbmNlOTApO1xuZmxvYXQgZGlzdHJpYnV0aW9uPW5vcm1hbERpc3RyaWJ1dGlv
bkZ1bmN0aW9uX0J1cmxleUdHWF9Bbmlzb3Ryb3BpYyhOZG90SCxUZG90SCxCZG90SCxhbHBoYVRC
KTtcbmZsb2F0IHZpc2liaWxpdHk9c21pdGhWaXNpYmlsaXR5X0dHWENvcnJlbGF0ZWRfQW5pc290
cm9waWMoaW5mby5OZG90TCxpbmZvLk5kb3RWLFRkb3RWLEJkb3RWLFRkb3RMLEJkb3RMLGFscGhh
VEIpO1xudmVjMyBzcGVjVGVybT1mcmVzbmVsKmRpc3RyaWJ1dGlvbip2aXNpYmlsaXR5O1xucmV0
dXJuIHNwZWNUZXJtKmluZm8uYXR0ZW51YXRpb24qaW5mby5OZG90TCpsaWdodENvbG9yO1xufVxu
I2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG52ZWM0IGNvbXB1dGVDbGVhckNvYXRMaWdodGluZyhw
cmVMaWdodGluZ0luZm8gaW5mbyx2ZWMzIE5jYyxmbG9hdCBnZW9tZXRyaWNSb3VnaG5lc3NGYWN0
b3IsZmxvYXQgY2xlYXJDb2F0SW50ZW5zaXR5LHZlYzMgbGlnaHRDb2xvcikge1xuZmxvYXQgTmNj
ZG90TD1zYXR1cmF0ZUVwcyhkb3QoTmNjLGluZm8uTCkpO1xuZmxvYXQgTmNjZG90SD1zYXR1cmF0
ZUVwcyhkb3QoTmNjLGluZm8uSCkpO1xuZmxvYXQgY2xlYXJDb2F0Um91Z2huZXNzPW1heChpbmZv
LnJvdWdobmVzcyxnZW9tZXRyaWNSb3VnaG5lc3NGYWN0b3IpO1xuZmxvYXQgYWxwaGFHPWNvbnZl
cnRSb3VnaG5lc3NUb0F2ZXJhZ2VTbG9wZShjbGVhckNvYXRSb3VnaG5lc3MpO1xuZmxvYXQgZnJl
c25lbD1mcmVzbmVsU2NobGlja0dHWChpbmZvLlZkb3RILHZDbGVhckNvYXRSZWZyYWN0aW9uUGFy
YW1zLngsQ0xFQVJDT0FUUkVGTEVDVEFOQ0U5MCk7XG5mcmVzbmVsKj1jbGVhckNvYXRJbnRlbnNp
dHk7XG5mbG9hdCBkaXN0cmlidXRpb249bm9ybWFsRGlzdHJpYnV0aW9uRnVuY3Rpb25fVHJvd2Jy
aWRnZVJlaXR6R0dYKE5jY2RvdEgsYWxwaGFHKTtcbmZsb2F0IHZpc2liaWxpdHk9dmlzaWJpbGl0
eV9LZWxlbWVuKGluZm8uVmRvdEgpO1xuZmxvYXQgY2xlYXJDb2F0VGVybT1mcmVzbmVsKmRpc3Ry
aWJ1dGlvbip2aXNpYmlsaXR5O1xucmV0dXJuIHZlYzQoXG5jbGVhckNvYXRUZXJtKmluZm8uYXR0
ZW51YXRpb24qTmNjZG90TCpsaWdodENvbG9yLFxuMS4wLWZyZXNuZWxcbik7XG59XG52ZWMzIGNv
bXB1dGVDbGVhckNvYXRMaWdodGluZ0Fic29ycHRpb24oZmxvYXQgTmRvdFZSZWZyYWN0LHZlYzMg
TCx2ZWMzIE5jYyx2ZWMzIGNsZWFyQ29hdENvbG9yLGZsb2F0IGNsZWFyQ29hdFRoaWNrbmVzcyxm
bG9hdCBjbGVhckNvYXRJbnRlbnNpdHkpIHtcbnZlYzMgTFJlZnJhY3Q9LXJlZnJhY3QoTCxOY2Ms
dkNsZWFyQ29hdFJlZnJhY3Rpb25QYXJhbXMueSk7XG5mbG9hdCBOZG90TFJlZnJhY3Q9c2F0dXJh
dGVFcHMoZG90KE5jYyxMUmVmcmFjdCkpO1xudmVjMyBhYnNvcnB0aW9uPWNvbXB1dGVDbGVhckNv
YXRBYnNvcnB0aW9uKE5kb3RWUmVmcmFjdCxOZG90TFJlZnJhY3QsY2xlYXJDb2F0Q29sb3IsY2xl
YXJDb2F0VGhpY2tuZXNzLGNsZWFyQ29hdEludGVuc2l0eSk7XG5yZXR1cm4gYWJzb3JwdGlvbjtc
bn1cbiNlbmRpZlxuI2lmZGVmIFNIRUVOXG52ZWMzIGNvbXB1dGVTaGVlbkxpZ2h0aW5nKHByZUxp
Z2h0aW5nSW5mbyBpbmZvLHZlYzMgTix2ZWMzIHJlZmxlY3RhbmNlMCx2ZWMzIHJlZmxlY3RhbmNl
OTAsZmxvYXQgZ2VvbWV0cmljUm91Z2huZXNzRmFjdG9yLHZlYzMgbGlnaHRDb2xvcikge1xuZmxv
YXQgTmRvdEg9c2F0dXJhdGVFcHMoZG90KE4saW5mby5IKSk7XG5mbG9hdCByb3VnaG5lc3M9bWF4
KGluZm8ucm91Z2huZXNzLGdlb21ldHJpY1JvdWdobmVzc0ZhY3Rvcik7XG5mbG9hdCBhbHBoYUc9
Y29udmVydFJvdWdobmVzc1RvQXZlcmFnZVNsb3BlKHJvdWdobmVzcyk7XG5cblxudmVjMyBmcmVz
bmVsPXJlZmxlY3RhbmNlMDtcbmZsb2F0IGRpc3RyaWJ1dGlvbj1ub3JtYWxEaXN0cmlidXRpb25G
dW5jdGlvbl9DaGFybGllU2hlZW4oTmRvdEgsYWxwaGFHKTtcbmZsb2F0IHZpc2liaWxpdHk9dmlz
aWJpbGl0eV9Bc2hpa2htaW4oaW5mby5OZG90TCxpbmZvLk5kb3RWKTtcbnZlYzMgc2hlZW5UZXJt
PWZyZXNuZWwqZGlzdHJpYnV0aW9uKnZpc2liaWxpdHk7XG5yZXR1cm4gc2hlZW5UZXJtKmluZm8u
YXR0ZW51YXRpb24qaW5mby5OZG90TCpsaWdodENvbG9yO1xufVxuI2VuZGlmXG4iOworX01hdGVy
aWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVk
ZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHBickRp
cmVjdExpZ2h0aW5nRnVuY3Rpb25zID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9Owor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickRpcmVj
dExpZ2h0aW5nU2V0dXBGdW5jdGlvbnMudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYnJEaXJlY3RMaWdodGluZ1NldHVwRnVuY3Rpb25zLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogcGJyRGlyZWN0TGln
aHRpbmdTZXR1cEZ1bmN0aW9ucyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJwYnJEaXJlY3RMaWdodGluZ1NldHVwRnVuY3Rpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBw
YnJEaXJlY3RMaWdodGluZ1NldHVwRnVuY3Rpb25zOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlh
bHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3BickRpcmVjdExpZ2h0aW5nU2V0dXBGdW5j
dGlvbnMnOwordmFyIHNoYWRlciA9ICJcbnN0cnVjdCBwcmVMaWdodGluZ0luZm9cbntcblxudmVj
MyBsaWdodE9mZnNldDtcbmZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkO1xuZmxvYXQgbGlnaHRE
aXN0YW5jZTtcblxuZmxvYXQgYXR0ZW51YXRpb247XG5cbnZlYzMgTDtcbnZlYzMgSDtcbmZsb2F0
IE5kb3RWO1xuZmxvYXQgTmRvdExVbmNsYW1wZWQ7XG5mbG9hdCBOZG90TDtcbmZsb2F0IFZkb3RI
O1xuZmxvYXQgcm91Z2huZXNzO1xufTtcbnByZUxpZ2h0aW5nSW5mbyBjb21wdXRlUG9pbnRBbmRT
cG90UHJlTGlnaHRpbmdJbmZvKHZlYzQgbGlnaHREYXRhLHZlYzMgVix2ZWMzIE4pIHtcbnByZUxp
Z2h0aW5nSW5mbyByZXN1bHQ7XG5cbnJlc3VsdC5saWdodE9mZnNldD1saWdodERhdGEueHl6LXZQ
b3NpdGlvblc7XG5yZXN1bHQubGlnaHREaXN0YW5jZVNxdWFyZWQ9ZG90KHJlc3VsdC5saWdodE9m
ZnNldCxyZXN1bHQubGlnaHRPZmZzZXQpO1xuXG5yZXN1bHQubGlnaHREaXN0YW5jZT1zcXJ0KHJl
c3VsdC5saWdodERpc3RhbmNlU3F1YXJlZCk7XG5cbnJlc3VsdC5MPW5vcm1hbGl6ZShyZXN1bHQu
bGlnaHRPZmZzZXQpO1xucmVzdWx0Lkg9bm9ybWFsaXplKFYrcmVzdWx0LkwpO1xucmVzdWx0LlZk
b3RIPXNhdHVyYXRlKGRvdChWLHJlc3VsdC5IKSk7XG5yZXN1bHQuTmRvdExVbmNsYW1wZWQ9ZG90
KE4scmVzdWx0LkwpO1xucmVzdWx0Lk5kb3RMPXNhdHVyYXRlRXBzKHJlc3VsdC5OZG90TFVuY2xh
bXBlZCk7XG5yZXR1cm4gcmVzdWx0O1xufVxucHJlTGlnaHRpbmdJbmZvIGNvbXB1dGVEaXJlY3Rp
b25hbFByZUxpZ2h0aW5nSW5mbyh2ZWM0IGxpZ2h0RGF0YSx2ZWMzIFYsdmVjMyBOKSB7XG5wcmVM
aWdodGluZ0luZm8gcmVzdWx0O1xuXG5yZXN1bHQubGlnaHREaXN0YW5jZT1sZW5ndGgoLWxpZ2h0
RGF0YS54eXopO1xuXG5yZXN1bHQuTD1ub3JtYWxpemUoLWxpZ2h0RGF0YS54eXopO1xucmVzdWx0
Lkg9bm9ybWFsaXplKFYrcmVzdWx0LkwpO1xucmVzdWx0LlZkb3RIPXNhdHVyYXRlKGRvdChWLHJl
c3VsdC5IKSk7XG5yZXN1bHQuTmRvdExVbmNsYW1wZWQ9ZG90KE4scmVzdWx0LkwpO1xucmVzdWx0
Lk5kb3RMPXNhdHVyYXRlRXBzKHJlc3VsdC5OZG90TFVuY2xhbXBlZCk7XG5yZXR1cm4gcmVzdWx0
O1xufVxucHJlTGlnaHRpbmdJbmZvIGNvbXB1dGVIZW1pc3BoZXJpY1ByZUxpZ2h0aW5nSW5mbyh2
ZWM0IGxpZ2h0RGF0YSx2ZWMzIFYsdmVjMyBOKSB7XG5wcmVMaWdodGluZ0luZm8gcmVzdWx0O1xu
XG5cbnJlc3VsdC5OZG90TD1kb3QoTixsaWdodERhdGEueHl6KSowLjUrMC41O1xucmVzdWx0Lk5k
b3RMPXNhdHVyYXRlRXBzKHJlc3VsdC5OZG90TCk7XG5yZXN1bHQuTmRvdExVbmNsYW1wZWQ9cmVz
dWx0Lk5kb3RMO1xuI2lmZGVmIFNQRUNVTEFSVEVSTVxucmVzdWx0Lkw9bm9ybWFsaXplKGxpZ2h0
RGF0YS54eXopO1xucmVzdWx0Lkg9bm9ybWFsaXplKFYrcmVzdWx0LkwpO1xucmVzdWx0LlZkb3RI
PXNhdHVyYXRlKGRvdChWLHJlc3VsdC5IKSk7XG4jZW5kaWZcbnJldHVybiByZXN1bHQ7XG59IjsK
K19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJd
LkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3Zh
ciBwYnJEaXJlY3RMaWdodGluZ1NldHVwRnVuY3Rpb25zID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6
IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL3BickZyYWdtZW50RGVjbGFyYXRpb24udHMiOgorLyohKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVy
cy9TaGFkZXJzSW5jbHVkZS9wYnJGcmFnbWVudERlY2xhcmF0aW9uLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogcGJyRnJhZ21lbnREZWNsYXJhdGlvbiAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJwYnJGcmFnbWVudERlY2xhcmF0aW9uIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBwYnJGcmFnbWVudERlY2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9N
YXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3BickZyYWdtZW50RGVjbGFyYXRp
b24nOwordmFyIHNoYWRlciA9ICJ1bmlmb3JtIHZlYzMgdlJlZmxlY3Rpb25Db2xvcjtcbnVuaWZv
cm0gdmVjNCB2QWxiZWRvQ29sb3I7XG5cbnVuaWZvcm0gdmVjNCB2TGlnaHRpbmdJbnRlbnNpdHk7
XG51bmlmb3JtIHZlYzQgdlJlZmxlY3Rpdml0eUNvbG9yO1xudW5pZm9ybSB2ZWMzIHZFbWlzc2l2
ZUNvbG9yO1xudW5pZm9ybSBmbG9hdCB2aXNpYmlsaXR5O1xudW5pZm9ybSB2ZWM0IHZFeWVQb3Np
dGlvbjtcbnVuaWZvcm0gdmVjMyB2QW1iaWVudENvbG9yO1xuXG4jaWZkZWYgQUxCRURPXG51bmlm
b3JtIHZlYzIgdkFsYmVkb0luZm9zO1xuI2VuZGlmXG4jaWZkZWYgQU1CSUVOVFxudW5pZm9ybSB2
ZWM0IHZBbWJpZW50SW5mb3M7XG4jZW5kaWZcbiNpZmRlZiBCVU1QXG51bmlmb3JtIHZlYzMgdkJ1
bXBJbmZvcztcbnVuaWZvcm0gdmVjMiB2VGFuZ2VudFNwYWNlUGFyYW1zO1xuI2VuZGlmXG4jaWZk
ZWYgT1BBQ0lUWVxudW5pZm9ybSB2ZWMyIHZPcGFjaXR5SW5mb3M7XG4jZW5kaWZcbiNpZmRlZiBF
TUlTU0lWRVxudW5pZm9ybSB2ZWMyIHZFbWlzc2l2ZUluZm9zO1xuI2VuZGlmXG4jaWZkZWYgTElH
SFRNQVBcbnVuaWZvcm0gdmVjMiB2TGlnaHRtYXBJbmZvcztcbiNlbmRpZlxuI2lmZGVmIFJFRkxF
Q1RJVklUWVxudW5pZm9ybSB2ZWMzIHZSZWZsZWN0aXZpdHlJbmZvcztcbiNlbmRpZlxuI2lmZGVm
IE1JQ1JPU1VSRkFDRU1BUFxudW5pZm9ybSB2ZWMyIHZNaWNyb1N1cmZhY2VTYW1wbGVySW5mb3M7
XG4jZW5kaWZcblxuI2lmIGRlZmluZWQoUkVGTEVDVElPTk1BUF9TUEhFUklDQUwpIHx8IGRlZmlu
ZWQoUkVGTEVDVElPTk1BUF9QUk9KRUNUSU9OKSB8fCBkZWZpbmVkKFNTX1JFRlJBQ1RJT04pXG51
bmlmb3JtIG1hdDQgdmlldztcbiNlbmRpZlxuXG4jaWZkZWYgUkVGTEVDVElPTlxudW5pZm9ybSB2
ZWMyIHZSZWZsZWN0aW9uSW5mb3M7XG51bmlmb3JtIG1hdDQgcmVmbGVjdGlvbk1hdHJpeDtcbnVu
aWZvcm0gdmVjMyB2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zO1xuI2lmIGRlZmluZWQoVVNF
X0xPQ0FMX1JFRkxFQ1RJT05NQVBfQ1VCSUMpICYmIGRlZmluZWQoUkVGTEVDVElPTk1BUF9DVUJJ
QylcbnVuaWZvcm0gdmVjMyB2UmVmbGVjdGlvblBvc2l0aW9uO1xudW5pZm9ybSB2ZWMzIHZSZWZs
ZWN0aW9uU2l6ZTtcbiNlbmRpZlxuI2VuZGlmXG5cbiNpZmRlZiBDTEVBUkNPQVRcbnVuaWZvcm0g
dmVjMiB2Q2xlYXJDb2F0UGFyYW1zO1xudW5pZm9ybSB2ZWM0IHZDbGVhckNvYXRSZWZyYWN0aW9u
UGFyYW1zO1xuI2lmZGVmIENMRUFSQ09BVF9URVhUVVJFXG51bmlmb3JtIHZlYzIgdkNsZWFyQ29h
dEluZm9zO1xudW5pZm9ybSBtYXQ0IGNsZWFyQ29hdE1hdHJpeDtcbiNlbmRpZlxuI2lmZGVmIENM
RUFSQ09BVF9CVU1QXG51bmlmb3JtIHZlYzIgdkNsZWFyQ29hdEJ1bXBJbmZvcztcbnVuaWZvcm0g
dmVjMiB2Q2xlYXJDb2F0VGFuZ2VudFNwYWNlUGFyYW1zO1xudW5pZm9ybSBtYXQ0IGNsZWFyQ29h
dEJ1bXBNYXRyaXg7XG4jZW5kaWZcbiNpZmRlZiBDTEVBUkNPQVRfVElOVFxudW5pZm9ybSB2ZWM0
IHZDbGVhckNvYXRUaW50UGFyYW1zO1xudW5pZm9ybSBmbG9hdCBjbGVhckNvYXRDb2xvckF0RGlz
dGFuY2U7XG4jaWZkZWYgQ0xFQVJDT0FUX1RJTlRfVEVYVFVSRVxudW5pZm9ybSB2ZWMyIHZDbGVh
ckNvYXRUaW50SW5mb3M7XG51bmlmb3JtIG1hdDQgY2xlYXJDb2F0VGludE1hdHJpeDtcbiNlbmRp
ZlxuI2VuZGlmXG4jZW5kaWZcblxuI2lmZGVmIEFOSVNPVFJPUElDXG51bmlmb3JtIHZlYzMgdkFu
aXNvdHJvcHk7XG4jaWZkZWYgQU5JU09UUk9QSUNfVEVYVFVSRVxudW5pZm9ybSB2ZWMyIHZBbmlz
b3Ryb3B5SW5mb3M7XG51bmlmb3JtIG1hdDQgYW5pc290cm9weU1hdHJpeDtcbiNlbmRpZlxuI2Vu
ZGlmXG5cbiNpZmRlZiBTSEVFTlxudW5pZm9ybSB2ZWM0IHZTaGVlbkNvbG9yO1xuI2lmZGVmIFNI
RUVOX1RFWFRVUkVcbnVuaWZvcm0gdmVjMiB2U2hlZW5JbmZvcztcbnVuaWZvcm0gbWF0NCBzaGVl
bk1hdHJpeDtcbiNlbmRpZlxuI2VuZGlmXG5cbiNpZmRlZiBTVUJTVVJGQUNFXG4jaWZkZWYgU1Nf
UkVGUkFDVElPTlxudW5pZm9ybSB2ZWMzIHZSZWZyYWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7XG51
bmlmb3JtIHZlYzQgdlJlZnJhY3Rpb25JbmZvcztcbnVuaWZvcm0gbWF0NCByZWZyYWN0aW9uTWF0
cml4O1xuI2VuZGlmXG4jaWZkZWYgU1NfVEhJQ0tORVNTQU5ETUFTS19URVhUVVJFXG51bmlmb3Jt
IHZlYzIgdlRoaWNrbmVzc0luZm9zO1xudW5pZm9ybSBtYXQ0IHRoaWNrbmVzc01hdHJpeDs7XG4j
ZW5kaWZcbnVuaWZvcm0gdmVjMiB2VGhpY2tuZXNzUGFyYW07XG51bmlmb3JtIHZlYzMgdkRpZmZ1
c2lvbkRpc3RhbmNlO1xudW5pZm9ybSB2ZWM0IHZUaW50Q29sb3I7XG51bmlmb3JtIHZlYzMgdlN1
YlN1cmZhY2VJbnRlbnNpdHk7XG4jZW5kaWZcbiNpZiBERUJVR01PREU+MFxudW5pZm9ybSB2ZWMy
IHZEZWJ1Z01vZGU7XG4jZW5kaWZcbiNpZmRlZiBVU0VTUEhFUklDQUxGUk9NUkVGTEVDVElPTk1B
UFxuI2lmZGVmIFNQSEVSSUNBTF9IQVJNT05JQ1NcbnVuaWZvcm0gdmVjMyB2U3BoZXJpY2FsTDAw
O1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxMMV8xO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxM
MTA7XG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbEwxMTtcbnVuaWZvcm0gdmVjMyB2U3BoZXJpY2Fs
TDJfMjtcbnVuaWZvcm0gdmVjMyB2U3BoZXJpY2FsTDJfMTtcbnVuaWZvcm0gdmVjMyB2U3BoZXJp
Y2FsTDIwO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxMMjE7XG51bmlmb3JtIHZlYzMgdlNwaGVy
aWNhbEwyMjtcbiNlbHNlXG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbFg7XG51bmlmb3JtIHZlYzMg
dlNwaGVyaWNhbFk7XG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbFo7XG51bmlmb3JtIHZlYzMgdlNw
aGVyaWNhbFhYX1paO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxZWV9aWjtcbnVuaWZvcm0gdmVj
MyB2U3BoZXJpY2FsWlo7XG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbFhZO1xudW5pZm9ybSB2ZWMz
IHZTcGhlcmljYWxZWjtcbnVuaWZvcm0gdmVjMyB2U3BoZXJpY2FsWlg7XG4jZW5kaWZcbiNlbmRp
ZlxuIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVm
ZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4g
Ki8KK3ZhciBwYnJGcmFnbWVudERlY2xhcmF0aW9uID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNo
YWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRl
L3BickZyYWdtZW50RXh0cmFEZWNsYXJhdGlvbi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJyRnJhZ21lbnRFeHRyYURlY2xhcmF0aW9uLnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBwYnJGcmFnbWVudEV4dHJhRGVj
bGFyYXRpb24gKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicGJyRnJhZ21l
bnRFeHRyYURlY2xhcmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwYnJGcmFnbWVudEV4dHJh
RGVjbGFyYXRpb247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZm
ZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwor
dmFyIG5hbWUgPSAncGJyRnJhZ21lbnRFeHRyYURlY2xhcmF0aW9uJzsKK3ZhciBzaGFkZXIgPSAi
XG52YXJ5aW5nIHZlYzMgdlBvc2l0aW9uVztcbiNpZmRlZiBOT1JNQUxcbnZhcnlpbmcgdmVjMyB2
Tm9ybWFsVztcbiNpZiBkZWZpbmVkKFVTRVNQSEVSSUNBTEZST01SRUZMRUNUSU9OTUFQKSAmJiBk
ZWZpbmVkKFVTRVNQSEVSSUNBTElOVkVSVEVYKVxudmFyeWluZyB2ZWMzIHZFbnZpcm9ubWVudEly
cmFkaWFuY2U7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFZFUlRFWENPTE9SXG52YXJ5aW5nIHZl
YzQgdkNvbG9yO1xuI2VuZGlmXG4jaWYgREVCVUdNT0RFPjBcbnZhcnlpbmcgdmVjNCB2Q2xpcFNw
YWNlUG9zaXRpb247XG4jZW5kaWZcbiNpZmRlZiBNQUlOVVYxXG52YXJ5aW5nIHZlYzIgdk1haW5V
VjE7XG4jZW5kaWZcbiNpZmRlZiBNQUlOVVYyXG52YXJ5aW5nIHZlYzIgdk1haW5VVjI7XG4jZW5k
aWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZm
ZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAq
LwordmFyIHBickZyYWdtZW50RXh0cmFEZWNsYXJhdGlvbiA9IHsgbmFtZTogbmFtZSwgc2hhZGVy
OiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9wYnJGcmFnbWVudFNhbXBsZXJzRGVjbGFyYXRpb24udHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickZyYWdtZW50U2FtcGxlcnNEZWNs
YXJhdGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogcGJy
RnJhZ21lbnRTYW1wbGVyc0RlY2xhcmF0aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgInBickZyYWdtZW50U2FtcGxlcnNEZWNsYXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gcGJyRnJhZ21lbnRTYW1wbGVyc0RlY2xhcmF0aW9uOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9N
YXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3BickZyYWdtZW50U2FtcGxlcnNE
ZWNsYXJhdGlvbic7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBFTlZJUk9OTUVOVEJSREZcbnVuaWZv
cm0gc2FtcGxlcjJEIGVudmlyb25tZW50QnJkZlNhbXBsZXI7XG4jZW5kaWZcblxuI2lmZGVmIFJF
RkxFQ1RJT05cbiNpZmRlZiBSRUZMRUNUSU9OTUFQXzNEXG4jZGVmaW5lIHNhbXBsZVJlZmxlY3Rp
b24ocyxjKSB0ZXh0dXJlQ3ViZShzLGMpXG51bmlmb3JtIHNhbXBsZXJDdWJlIHJlZmxlY3Rpb25T
YW1wbGVyO1xuI2lmZGVmIExPREJBU0VETUlDUk9TRlVSQUNFXG4jZGVmaW5lIHNhbXBsZVJlZmxl
Y3Rpb25Mb2QocyxjLGwpIHRleHR1cmVDdWJlTG9kRVhUKHMsYyxsKVxuI2Vsc2VcbnVuaWZvcm0g
c2FtcGxlckN1YmUgcmVmbGVjdGlvblNhbXBsZXJMb3c7XG51bmlmb3JtIHNhbXBsZXJDdWJlIHJl
ZmxlY3Rpb25TYW1wbGVySGlnaDtcbiNlbmRpZlxuI2lmZGVmIFVTRUlSUkFESUFOQ0VNQVBcbnVu
aWZvcm0gc2FtcGxlckN1YmUgaXJyYWRpYW5jZVNhbXBsZXI7XG4jZW5kaWZcbiNlbHNlXG4jZGVm
aW5lIHNhbXBsZVJlZmxlY3Rpb24ocyxjKSB0ZXh0dXJlMkQocyxjKVxudW5pZm9ybSBzYW1wbGVy
MkQgcmVmbGVjdGlvblNhbXBsZXI7XG4jaWZkZWYgTE9EQkFTRURNSUNST1NGVVJBQ0VcbiNkZWZp
bmUgc2FtcGxlUmVmbGVjdGlvbkxvZChzLGMsbCkgdGV4dHVyZTJETG9kRVhUKHMsYyxsKVxuI2Vs
c2VcbnVuaWZvcm0gc2FtcGxlckN1YmUgcmVmbGVjdGlvblNhbXBsZXJMb3c7XG51bmlmb3JtIHNh
bXBsZXJDdWJlIHJlZmxlY3Rpb25TYW1wbGVySGlnaDtcbiNlbmRpZlxuI2lmZGVmIFVTRUlSUkFE
SUFOQ0VNQVBcbnVuaWZvcm0gc2FtcGxlckN1YmUgaXJyYWRpYW5jZVNhbXBsZXI7XG4jZW5kaWZc
biNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfU0tZQk9YXG52YXJ5aW5nIHZlYzMgdlBvc2l0
aW9uVVZXO1xuI2Vsc2VcbiNpZiBkZWZpbmVkKFJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFS
X0ZJWEVEKSB8fCBkZWZpbmVkKFJFRkxFQ1RJT05NQVBfTUlSUk9SRURFUVVJUkVDVEFOR1VMQVJf
RklYRUQpXG52YXJ5aW5nIHZlYzMgdkRpcmVjdGlvblc7XG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlm
XG4jaWZkZWYgQUxCRURPXG4jaWYgQUxCRURPRElSRUNUVVYgPT0gMVxuI2RlZmluZSB2QWxiZWRv
VVYgdk1haW5VVjFcbiNlbGlmIEFMQkVET0RJUkVDVFVWID09IDJcbiNkZWZpbmUgdkFsYmVkb1VW
IHZNYWluVVYyXG4jZWxzZVxudmFyeWluZyB2ZWMyIHZBbGJlZG9VVjtcbiNlbmRpZlxudW5pZm9y
bSBzYW1wbGVyMkQgYWxiZWRvU2FtcGxlcjtcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJVklUWVxu
I2lmIFJFRkxFQ1RJVklUWURJUkVDVFVWID09IDFcbiNkZWZpbmUgdlJlZmxlY3Rpdml0eVVWIHZN
YWluVVYxXG4jZWxpZiBSRUZMRUNUSVZJVFlESVJFQ1RVViA9PSAyXG4jZGVmaW5lIHZSZWZsZWN0
aXZpdHlVViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcgdmVjMiB2UmVmbGVjdGl2aXR5VVY7XG4j
ZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIHJlZmxlY3Rpdml0eVNhbXBsZXI7XG4jZW5kaWZcbiNp
ZmRlZiBBTUJJRU5UXG4jaWYgQU1CSUVOVERJUkVDVFVWID09IDFcbiNkZWZpbmUgdkFtYmllbnRV
ViB2TWFpblVWMVxuI2VsaWYgQU1CSUVOVERJUkVDVFVWID09IDJcbiNkZWZpbmUgdkFtYmllbnRV
ViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcgdmVjMiB2QW1iaWVudFVWO1xuI2VuZGlmXG51bmlm
b3JtIHNhbXBsZXIyRCBhbWJpZW50U2FtcGxlcjtcbiNlbmRpZlxuI2lmZGVmIEVNSVNTSVZFXG4j
aWYgRU1JU1NJVkVESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZFbWlzc2l2ZVVWIHZNYWluVVYxXG4j
ZWxpZiBFTUlTU0lWRURJUkVDVFVWID09IDJcbiNkZWZpbmUgdkVtaXNzaXZlVVYgdk1haW5VVjJc
biNlbHNlXG52YXJ5aW5nIHZlYzIgdkVtaXNzaXZlVVY7XG4jZW5kaWZcbnVuaWZvcm0gc2FtcGxl
cjJEIGVtaXNzaXZlU2FtcGxlcjtcbiNlbmRpZlxuI2lmZGVmIEJVTVBcbiNpZiBCVU1QRElSRUNU
VVYgPT0gMVxuI2RlZmluZSB2QnVtcFVWIHZNYWluVVYxXG4jZWxpZiBCVU1QRElSRUNUVVYgPT0g
MlxuI2RlZmluZSB2QnVtcFVWIHZNYWluVVYyXG4jZWxzZVxudmFyeWluZyB2ZWMyIHZCdW1wVVY7
XG4jZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBTYW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYg
T1BBQ0lUWVxuI2lmIE9QQUNJVFlESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZPcGFjaXR5VVYgdk1h
aW5VVjFcbiNlbGlmIE9QQUNJVFlESVJFQ1RVViA9PSAyXG4jZGVmaW5lIHZPcGFjaXR5VVYgdk1h
aW5VVjJcbiNlbHNlXG52YXJ5aW5nIHZlYzIgdk9wYWNpdHlVVjtcbiNlbmRpZlxudW5pZm9ybSBz
YW1wbGVyMkQgb3BhY2l0eVNhbXBsZXI7XG4jZW5kaWZcbiNpZmRlZiBMSUdIVE1BUFxuI2lmIExJ
R0hUTUFQRElSRUNUVVYgPT0gMVxuI2RlZmluZSB2TGlnaHRtYXBVViB2TWFpblVWMVxuI2VsaWYg
TElHSFRNQVBESVJFQ1RVViA9PSAyXG4jZGVmaW5lIHZMaWdodG1hcFVWIHZNYWluVVYyXG4jZWxz
ZVxudmFyeWluZyB2ZWMyIHZMaWdodG1hcFVWO1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCBs
aWdodG1hcFNhbXBsZXI7XG4jZW5kaWZcbiNpZmRlZiBNSUNST1NVUkZBQ0VNQVBcbiNpZiBNSUNS
T1NVUkZBQ0VNQVBESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZNaWNyb1N1cmZhY2VTYW1wbGVyVVYg
dk1haW5VVjFcbiNlbGlmIE1JQ1JPU1VSRkFDRU1BUERJUkVDVFVWID09IDJcbiNkZWZpbmUgdk1p
Y3JvU3VyZmFjZVNhbXBsZXJVViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcgdmVjMiB2TWljcm9T
dXJmYWNlU2FtcGxlclVWO1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCBtaWNyb1N1cmZhY2VT
YW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG4jaWZkZWYgQ0xFQVJDT0FUX1RFWFRV
UkVcbiNpZiBDTEVBUkNPQVRfVEVYVFVSRURJUkVDVFVWID09IDFcbiNkZWZpbmUgdkNsZWFyQ29h
dFVWIHZNYWluVVYxXG4jZWxpZiBDTEVBUkNPQVRfVEVYVFVSRURJUkVDVFVWID09IDJcbiNkZWZp
bmUgdkNsZWFyQ29hdFVWIHZNYWluVVYyXG4jZWxzZVxudmFyeWluZyB2ZWMyIHZDbGVhckNvYXRV
VjtcbiNlbmRpZlxudW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJDb2F0U2FtcGxlcjtcbiNlbmRpZlxu
I2lmZGVmIENMRUFSQ09BVF9CVU1QXG4jaWYgQ0xFQVJDT0FUX0JVTVBESVJFQ1RVViA9PSAxXG4j
ZGVmaW5lIHZDbGVhckNvYXRCdW1wVVYgdk1haW5VVjFcbiNlbGlmIENMRUFSQ09BVF9CVU1QRElS
RUNUVVYgPT0gMlxuI2RlZmluZSB2Q2xlYXJDb2F0QnVtcFVWIHZNYWluVVYyXG4jZWxzZVxudmFy
eWluZyB2ZWMyIHZDbGVhckNvYXRCdW1wVVY7XG4jZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIGNs
ZWFyQ29hdEJ1bXBTYW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUX1RJTlRfVEVYVFVS
RVxuI2lmIENMRUFSQ09BVF9USU5UX1RFWFRVUkVESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZDbGVh
ckNvYXRUaW50VVYgdk1haW5VVjFcbiNlbGlmIENMRUFSQ09BVF9USU5UX1RFWFRVUkVESVJFQ1RV
ViA9PSAyXG4jZGVmaW5lIHZDbGVhckNvYXRUaW50VVYgdk1haW5VVjJcbiNlbHNlXG52YXJ5aW5n
IHZlYzIgdkNsZWFyQ29hdFRpbnRVVjtcbiNlbmRpZlxudW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJD
b2F0VGludFNhbXBsZXI7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFNIRUVOXG4jaWZkZWYgU0hF
RU5fVEVYVFVSRVxuI2lmIFNIRUVOX1RFWFRVUkVESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZTaGVl
blVWIHZNYWluVVYxXG4jZWxpZiBTSEVFTl9URVhUVVJFRElSRUNUVVYgPT0gMlxuI2RlZmluZSB2
U2hlZW5VViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcgdmVjMiB2U2hlZW5VVjtcbiNlbmRpZlxu
dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5TYW1wbGVyO1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBB
TklTT1RST1BJQ1xuI2lmZGVmIEFOSVNPVFJPUElDX1RFWFRVUkVcbiNpZiBBTklTT1RST1BJQ19U
RVhUVVJFRElSRUNUVVYgPT0gMVxuI2RlZmluZSB2QW5pc290cm9weVVWIHZNYWluVVYxXG4jZWxp
ZiBBTklTT1RST1BJQ19URVhUVVJFRElSRUNUVVYgPT0gMlxuI2RlZmluZSB2QW5pc290cm9weVVW
IHZNYWluVVYyXG4jZWxzZVxudmFyeWluZyB2ZWMyIHZBbmlzb3Ryb3B5VVY7XG4jZW5kaWZcbnVu
aWZvcm0gc2FtcGxlcjJEIGFuaXNvdHJvcHlTYW1wbGVyO1xuI2VuZGlmXG4jZW5kaWZcblxuI2lm
ZGVmIFNVQlNVUkZBQ0VcbiNpZmRlZiBTU19SRUZSQUNUSU9OXG4jaWZkZWYgU1NfUkVGUkFDVElP
Tk1BUF8zRFxuI2RlZmluZSBzYW1wbGVSZWZyYWN0aW9uKHMsYykgdGV4dHVyZUN1YmUocyxjKVxu
dW5pZm9ybSBzYW1wbGVyQ3ViZSByZWZyYWN0aW9uU2FtcGxlcjtcbiNpZmRlZiBMT0RCQVNFRE1J
Q1JPU0ZVUkFDRVxuI2RlZmluZSBzYW1wbGVSZWZyYWN0aW9uTG9kKHMsYyxsKSB0ZXh0dXJlQ3Vi
ZUxvZEVYVChzLGMsbClcbiNlbHNlXG51bmlmb3JtIHNhbXBsZXJDdWJlIHJlZnJhY3Rpb25TYW1w
bGVyTG93O1xudW5pZm9ybSBzYW1wbGVyQ3ViZSByZWZyYWN0aW9uU2FtcGxlckhpZ2g7XG4jZW5k
aWZcbiNlbHNlXG4jZGVmaW5lIHNhbXBsZVJlZnJhY3Rpb24ocyxjKSB0ZXh0dXJlMkQocyxjKVxu
dW5pZm9ybSBzYW1wbGVyMkQgcmVmcmFjdGlvblNhbXBsZXI7XG4jaWZkZWYgTE9EQkFTRURNSUNS
T1NGVVJBQ0VcbiNkZWZpbmUgc2FtcGxlUmVmcmFjdGlvbkxvZChzLGMsbCkgdGV4dHVyZTJETG9k
RVhUKHMsYyxsKVxuI2Vsc2VcbnVuaWZvcm0gc2FtcGxlckN1YmUgcmVmcmFjdGlvblNhbXBsZXJM
b3c7XG51bmlmb3JtIHNhbXBsZXJDdWJlIHJlZnJhY3Rpb25TYW1wbGVySGlnaDtcbiNlbmRpZlxu
I2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBTU19USElDS05FU1NBTkRNQVNLX1RFWFRVUkVcbiNpZiBT
U19USElDS05FU1NBTkRNQVNLX1RFWFRVUkVESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZUaGlja25l
c3NVViB2TWFpblVWMVxuI2VsaWYgU1NfVEhJQ0tORVNTQU5ETUFTS19URVhUVVJFRElSRUNUVVYg
PT0gMlxuI2RlZmluZSB2VGhpY2tuZXNzVVYgdk1haW5VVjJcbiNlbHNlXG52YXJ5aW5nIHZlYzIg
dlRoaWNrbmVzc1VWO1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NTYW1wbGVy
O1xuI2VuZGlmXG4jZW5kaWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7
CisvKiogQGhpZGRlbiAqLwordmFyIHBickZyYWdtZW50U2FtcGxlcnNEZWNsYXJhdGlvbiA9IHsg
bmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYnJIZWxwZXJGdW5jdGlvbnMudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickhlbHBlckZ1bmN0aW9ucy50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogcGJySGVscGVyRnVuY3Rpb25zICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInBickhlbHBlckZ1bmN0aW9ucyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gcGJySGVscGVyRnVuY3Rpb25zOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMv
ZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3BickhlbHBlckZ1bmN0aW9ucyc7Cit2YXIgc2hh
ZGVyID0gIlxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0XG4jZGVmaW5lIFJFQ0lQ
Uk9DQUxfUEkgMC4zMTgzMDk4ODYxOFxuXG4jZGVmaW5lIE1JTklNVU1WQVJJQU5DRSAwLjAwMDVc
bmZsb2F0IGNvbnZlcnRSb3VnaG5lc3NUb0F2ZXJhZ2VTbG9wZShmbG9hdCByb3VnaG5lc3MpXG57
XG5cbnJldHVybiBzcXVhcmUocm91Z2huZXNzKStNSU5JTVVNVkFSSUFOQ0U7XG59XG5mbG9hdCBm
cmVzbmVsR3JhemluZ1JlZmxlY3RhbmNlKGZsb2F0IHJlZmxlY3RhbmNlMCkge1xuXG5cbmZsb2F0
IHJlZmxlY3RhbmNlOTA9c2F0dXJhdGUocmVmbGVjdGFuY2UwKjI1LjApO1xucmV0dXJuIHJlZmxl
Y3RhbmNlOTA7XG59XG52ZWMyIGdldEFBUm91Z2huZXNzRmFjdG9ycyh2ZWMzIG5vcm1hbFZlY3Rv
cikge1xuI2lmZGVmIFNQRUNVTEFSQUFcbnZlYzMgbkRmZHg9ZEZkeChub3JtYWxWZWN0b3IueHl6
KTtcbnZlYzMgbkRmZHk9ZEZkeShub3JtYWxWZWN0b3IueHl6KTtcbmZsb2F0IHNsb3BlU3F1YXJl
PW1heChkb3QobkRmZHgsbkRmZHgpLGRvdChuRGZkeSxuRGZkeSkpO1xuXG5mbG9hdCBnZW9tZXRy
aWNSb3VnaG5lc3NGYWN0b3I9cG93KHNhdHVyYXRlKHNsb3BlU3F1YXJlKSwwLjMzMyk7XG5cbmZs
b2F0IGdlb21ldHJpY0FscGhhR0ZhY3Rvcj1zcXJ0KHNsb3BlU3F1YXJlKTtcblxuZ2VvbWV0cmlj
QWxwaGFHRmFjdG9yKj0wLjc1O1xucmV0dXJuIHZlYzIoZ2VvbWV0cmljUm91Z2huZXNzRmFjdG9y
LGdlb21ldHJpY0FscGhhR0ZhY3Rvcik7XG4jZWxzZVxucmV0dXJuIHZlYzIoMC4pO1xuI2VuZGlm
XG59XG4jaWZkZWYgQU5JU09UUk9QSUNcblxuXG52ZWMyIGdldEFuaXNvdHJvcGljUm91Z2huZXNz
KGZsb2F0IGFscGhhRyxmbG9hdCBhbmlzb3Ryb3B5KSB7XG5mbG9hdCBhbHBoYVQ9bWF4KGFscGhh
RyooMS4wK2FuaXNvdHJvcHkpLE1JTklNVU1WQVJJQU5DRSk7XG5mbG9hdCBhbHBoYUI9bWF4KGFs
cGhhRyooMS4wLWFuaXNvdHJvcHkpLE1JTklNVU1WQVJJQU5DRSk7XG5yZXR1cm4gdmVjMihhbHBo
YVQsYWxwaGFCKTtcbn1cblxuXG52ZWMzIGdldEFuaXNvdHJvcGljQmVudE5vcm1hbHMoY29uc3Qg
dmVjMyBULGNvbnN0IHZlYzMgQixjb25zdCB2ZWMzIE4sY29uc3QgdmVjMyBWLGZsb2F0IGFuaXNv
dHJvcHkpIHtcbnZlYzMgYW5pc290cm9waWNGcmFtZURpcmVjdGlvbj1hbmlzb3Ryb3B5Pj0wLjAg
PyBCIDogVDtcbnZlYzMgYW5pc290cm9waWNGcmFtZVRhbmdlbnQ9Y3Jvc3Mobm9ybWFsaXplKGFu
aXNvdHJvcGljRnJhbWVEaXJlY3Rpb24pLFYpO1xudmVjMyBhbmlzb3Ryb3BpY0ZyYW1lTm9ybWFs
PWNyb3NzKGFuaXNvdHJvcGljRnJhbWVUYW5nZW50LGFuaXNvdHJvcGljRnJhbWVEaXJlY3Rpb24p
O1xudmVjMyBhbmlzb3Ryb3BpY05vcm1hbD1ub3JtYWxpemUobWl4KE4sYW5pc290cm9waWNGcmFt
ZU5vcm1hbCxhYnMoYW5pc290cm9weSkpKTtcbnJldHVybiBhbmlzb3Ryb3BpY05vcm1hbDtcblxu
fVxuI2VuZGlmXG4jaWYgZGVmaW5lZChDTEVBUkNPQVQpIHx8IGRlZmluZWQoU1NfUkVGUkFDVElP
TilcblxuXG5cbnZlYzMgY29jYUxhbWJlcnQodmVjMyBhbHBoYSxmbG9hdCBkaXN0YW5jZSkge1xu
cmV0dXJuIGV4cCgtYWxwaGEqZGlzdGFuY2UpO1xufVxuXG52ZWMzIGNvY2FMYW1iZXJ0KGZsb2F0
IE5kb3RWUmVmcmFjdCxmbG9hdCBOZG90TFJlZnJhY3QsdmVjMyBhbHBoYSxmbG9hdCB0aGlja25l
c3MpIHtcbnJldHVybiBjb2NhTGFtYmVydChhbHBoYSwodGhpY2tuZXNzKigoTmRvdExSZWZyYWN0
K05kb3RWUmVmcmFjdCkvKE5kb3RMUmVmcmFjdCpOZG90VlJlZnJhY3QpKSkpO1xufVxuXG52ZWMz
IGNvbXB1dGVDb2xvckF0RGlzdGFuY2VJbk1lZGlhKHZlYzMgY29sb3IsZmxvYXQgZGlzdGFuY2Up
IHtcbnJldHVybiAtbG9nKGNvbG9yKS9kaXN0YW5jZTtcbn1cbnZlYzMgY29tcHV0ZUNsZWFyQ29h
dEFic29ycHRpb24oZmxvYXQgTmRvdFZSZWZyYWN0LGZsb2F0IE5kb3RMUmVmcmFjdCx2ZWMzIGNs
ZWFyQ29hdENvbG9yLGZsb2F0IGNsZWFyQ29hdFRoaWNrbmVzcyxmbG9hdCBjbGVhckNvYXRJbnRl
bnNpdHkpIHtcbnZlYzMgY2xlYXJDb2F0QWJzb3JwdGlvbj1taXgodmVjMygxLjApLFxuY29jYUxh
bWJlcnQoTmRvdFZSZWZyYWN0LE5kb3RMUmVmcmFjdCxjbGVhckNvYXRDb2xvcixjbGVhckNvYXRU
aGlja25lc3MpLFxuY2xlYXJDb2F0SW50ZW5zaXR5KTtcbnJldHVybiBjbGVhckNvYXRBYnNvcnB0
aW9uO1xufVxuI2VuZGlmXG5cblxuXG5cbiNpZmRlZiBNSUNST1NVUkZBQ0VBVVRPTUFUSUNcbmZs
b2F0IGNvbXB1dGVEZWZhdWx0TWljcm9TdXJmYWNlKGZsb2F0IG1pY3JvU3VyZmFjZSx2ZWMzIHJl
ZmxlY3Rpdml0eUNvbG9yKVxue1xuY29uc3QgZmxvYXQga1JlZmxlY3Rpdml0eU5vQWxwaGFXb3Jr
Zmxvd19TbW9vdGhuZXNzTWF4PTAuOTU7XG5mbG9hdCByZWZsZWN0aXZpdHlMdW1pbmFuY2U9Z2V0
THVtaW5hbmNlKHJlZmxlY3Rpdml0eUNvbG9yKTtcbmZsb2F0IHJlZmxlY3Rpdml0eUx1bWE9c3Fy
dChyZWZsZWN0aXZpdHlMdW1pbmFuY2UpO1xubWljcm9TdXJmYWNlPXJlZmxlY3Rpdml0eUx1bWEq
a1JlZmxlY3Rpdml0eU5vQWxwaGFXb3JrZmxvd19TbW9vdGhuZXNzTWF4O1xucmV0dXJuIG1pY3Jv
U3VyZmFjZTtcbn1cbiNlbmRpZiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRl
cjsKKy8qKiBAaGlkZGVuICovCit2YXIgcGJySGVscGVyRnVuY3Rpb25zID0geyBuYW1lOiBuYW1l
LCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1No
YWRlcnNJbmNsdWRlL3BicklCTEZ1bmN0aW9ucy50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvU2hh
ZGVyc0luY2x1ZGUvcGJySUJMRnVuY3Rpb25zLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBwYnJJQkxGdW5jdGlvbnMgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
cGJySUJMRnVuY3Rpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwYnJJQkxGdW5jdGlvbnM7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlh
bHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAncGJy
SUJMRnVuY3Rpb25zJzsKK3ZhciBzaGFkZXIgPSAiI2lmIGRlZmluZWQoUkVGTEVDVElPTikgfHwg
ZGVmaW5lZChTU19SRUZSQUNUSU9OKVxuZmxvYXQgZ2V0TG9kRnJvbUFscGhhRyhmbG9hdCBjdWJl
TWFwRGltZW5zaW9uUGl4ZWxzLGZsb2F0IG1pY3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZSkge1xuZmxv
YXQgbWljcm9zdXJmYWNlQXZlcmFnZVNsb3BlVGV4ZWxzPWN1YmVNYXBEaW1lbnNpb25QaXhlbHMq
bWljcm9zdXJmYWNlQXZlcmFnZVNsb3BlO1xuZmxvYXQgbG9kPWxvZzIobWljcm9zdXJmYWNlQXZl
cmFnZVNsb3BlVGV4ZWxzKTtcbnJldHVybiBsb2Q7XG59XG5mbG9hdCBnZXRMaW5lYXJMb2RGcm9t
Um91Z2huZXNzKGZsb2F0IGN1YmVNYXBEaW1lbnNpb25QaXhlbHMsZmxvYXQgcm91Z2huZXNzKSB7
XG5mbG9hdCBsb2Q9bG9nMihjdWJlTWFwRGltZW5zaW9uUGl4ZWxzKSpyb3VnaG5lc3M7XG5yZXR1
cm4gbG9kO1xufVxuI2VuZGlmXG4jaWYgZGVmaW5lZChFTlZJUk9OTUVOVEJSREYpICYmIGRlZmlu
ZWQoUkFESUFOQ0VPQ0NMVVNJT04pXG5mbG9hdCBlbnZpcm9ubWVudFJhZGlhbmNlT2NjbHVzaW9u
KGZsb2F0IGFtYmllbnRPY2NsdXNpb24sZmxvYXQgTmRvdFZVbmNsYW1wZWQpIHtcblxuXG5mbG9h
dCB0ZW1wPU5kb3RWVW5jbGFtcGVkK2FtYmllbnRPY2NsdXNpb247XG5yZXR1cm4gc2F0dXJhdGUo
c3F1YXJlKHRlbXApLTEuMCthbWJpZW50T2NjbHVzaW9uKTtcbn1cbiNlbmRpZlxuI2lmIGRlZmlu
ZWQoRU5WSVJPTk1FTlRCUkRGKSAmJiBkZWZpbmVkKEhPUklaT05PQ0NMVVNJT04pXG5mbG9hdCBl
bnZpcm9ubWVudEhvcml6b25PY2NsdXNpb24odmVjMyB2aWV3LHZlYzMgbm9ybWFsKSB7XG5cbnZl
YzMgcmVmbGVjdGlvbj1yZWZsZWN0KHZpZXcsbm9ybWFsKTtcbmZsb2F0IHRlbXA9c2F0dXJhdGUo
MS4wKzEuMSpkb3QocmVmbGVjdGlvbixub3JtYWwpKTtcbnJldHVybiBzcXVhcmUodGVtcCk7XG59
XG4jZW5kaWZcblxuXG5cblxuI2lmIGRlZmluZWQoTE9ESU5SRUZMRUNUSU9OQUxQSEEpIHx8IGRl
ZmluZWQoU1NfTE9ESU5SRUZSQUNUSU9OQUxQSEEpXG5cblxuI2RlZmluZSBVTlBBQ0tfTE9EKHgp
ICgxLjAteCkqMjU1LjBcbmZsb2F0IGdldExvZEZyb21BbHBoYUcoZmxvYXQgY3ViZU1hcERpbWVu
c2lvblBpeGVscyxmbG9hdCBhbHBoYUcsZmxvYXQgTmRvdFYpIHtcbmZsb2F0IG1pY3Jvc3VyZmFj
ZUF2ZXJhZ2VTbG9wZT1hbHBoYUc7XG5cblxuXG5cblxuXG5taWNyb3N1cmZhY2VBdmVyYWdlU2xv
cGUqPXNxcnQoYWJzKE5kb3RWKSk7XG5yZXR1cm4gZ2V0TG9kRnJvbUFscGhhRyhjdWJlTWFwRGlt
ZW5zaW9uUGl4ZWxzLG1pY3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZSk7XG59XG4jZW5kaWYiOworX01h
dGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5j
bHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHBi
cklCTEZ1bmN0aW9ucyA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYnJVYm9EZWNsYXJhdGlv
bi50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYnJVYm9EZWNsYXJh
dGlvbi50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBwYnJVYm9EZWNsYXJhdGlvbiAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJwYnJVYm9EZWNsYXJhdGlvbiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gcGJyVWJvRGVjbGFyYXRpb247IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIu
L01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAncGJyVWJvRGVjbGFyYXRpb24n
OwordmFyIHNoYWRlciA9ICJsYXlvdXQoc3RkMTQwLGNvbHVtbl9tYWpvcikgdW5pZm9ybTtcblxu
XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnVuaWZvcm0gU2NlbmVcbntc
bm1hdDQgdmlld1Byb2plY3Rpb247XG4jaWZkZWYgTVVMVElWSUVXXG5tYXQ0IHZpZXdQcm9qZWN0
aW9uUjtcbiNlbmRpZlxubWF0NCB2aWV3O1xufTtcbnVuaWZvcm0gTWF0ZXJpYWxcbntcbnZlYzIg
dkFsYmVkb0luZm9zO1xudmVjNCB2QW1iaWVudEluZm9zO1xudmVjMiB2T3BhY2l0eUluZm9zO1xu
dmVjMiB2RW1pc3NpdmVJbmZvcztcbnZlYzIgdkxpZ2h0bWFwSW5mb3M7XG52ZWMzIHZSZWZsZWN0
aXZpdHlJbmZvcztcbnZlYzIgdk1pY3JvU3VyZmFjZVNhbXBsZXJJbmZvcztcbnZlYzIgdlJlZmxl
Y3Rpb25JbmZvcztcbnZlYzMgdlJlZmxlY3Rpb25Qb3NpdGlvbjtcbnZlYzMgdlJlZmxlY3Rpb25T
aXplO1xudmVjMyB2QnVtcEluZm9zO1xubWF0NCBhbGJlZG9NYXRyaXg7XG5tYXQ0IGFtYmllbnRN
YXRyaXg7XG5tYXQ0IG9wYWNpdHlNYXRyaXg7XG5tYXQ0IGVtaXNzaXZlTWF0cml4O1xubWF0NCBs
aWdodG1hcE1hdHJpeDtcbm1hdDQgcmVmbGVjdGl2aXR5TWF0cml4O1xubWF0NCBtaWNyb1N1cmZh
Y2VTYW1wbGVyTWF0cml4O1xubWF0NCBidW1wTWF0cml4O1xudmVjMiB2VGFuZ2VudFNwYWNlUGFy
YW1zO1xubWF0NCByZWZsZWN0aW9uTWF0cml4O1xudmVjMyB2UmVmbGVjdGlvbkNvbG9yO1xudmVj
NCB2QWxiZWRvQ29sb3I7XG52ZWM0IHZMaWdodGluZ0ludGVuc2l0eTtcbnZlYzMgdlJlZmxlY3Rp
b25NaWNyb3N1cmZhY2VJbmZvcztcbmZsb2F0IHBvaW50U2l6ZTtcbnZlYzQgdlJlZmxlY3Rpdml0
eUNvbG9yO1xudmVjMyB2RW1pc3NpdmVDb2xvcjtcbnZlYzQgdkV5ZVBvc2l0aW9uO1xudmVjMyB2
QW1iaWVudENvbG9yO1xudmVjMiB2RGVidWdNb2RlO1xudmVjMiB2Q2xlYXJDb2F0UGFyYW1zO1xu
dmVjNCB2Q2xlYXJDb2F0UmVmcmFjdGlvblBhcmFtcztcbnZlYzIgdkNsZWFyQ29hdEluZm9zO1xu
bWF0NCBjbGVhckNvYXRNYXRyaXg7XG52ZWMyIHZDbGVhckNvYXRCdW1wSW5mb3M7XG52ZWMyIHZD
bGVhckNvYXRUYW5nZW50U3BhY2VQYXJhbXM7XG5tYXQ0IGNsZWFyQ29hdEJ1bXBNYXRyaXg7XG52
ZWM0IHZDbGVhckNvYXRUaW50UGFyYW1zO1xuZmxvYXQgY2xlYXJDb2F0Q29sb3JBdERpc3RhbmNl
O1xudmVjMiB2Q2xlYXJDb2F0VGludEluZm9zO1xubWF0NCBjbGVhckNvYXRUaW50TWF0cml4O1xu
dmVjMyB2QW5pc290cm9weTtcbnZlYzIgdkFuaXNvdHJvcHlJbmZvcztcbm1hdDQgYW5pc290cm9w
eU1hdHJpeDtcbnZlYzQgdlNoZWVuQ29sb3I7XG52ZWMyIHZTaGVlbkluZm9zO1xubWF0NCBzaGVl
bk1hdHJpeDtcbnZlYzMgdlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvcztcbnZlYzQgdlJlZnJh
Y3Rpb25JbmZvcztcbm1hdDQgcmVmcmFjdGlvbk1hdHJpeDtcbnZlYzIgdlRoaWNrbmVzc0luZm9z
O1xubWF0NCB0aGlja25lc3NNYXRyaXg7XG52ZWMyIHZUaGlja25lc3NQYXJhbTtcbnZlYzMgdkRp
ZmZ1c2lvbkRpc3RhbmNlO1xudmVjNCB2VGludENvbG9yO1xudmVjMyB2U3ViU3VyZmFjZUludGVu
c2l0eTtcbnZlYzMgdlNwaGVyaWNhbEwwMDtcbnZlYzMgdlNwaGVyaWNhbEwxXzE7XG52ZWMzIHZT
cGhlcmljYWxMMTA7XG52ZWMzIHZTcGhlcmljYWxMMTE7XG52ZWMzIHZTcGhlcmljYWxMMl8yO1xu
dmVjMyB2U3BoZXJpY2FsTDJfMTtcbnZlYzMgdlNwaGVyaWNhbEwyMDtcbnZlYzMgdlNwaGVyaWNh
bEwyMTtcbnZlYzMgdlNwaGVyaWNhbEwyMjtcbnZlYzMgdlNwaGVyaWNhbFg7XG52ZWMzIHZTcGhl
cmljYWxZO1xudmVjMyB2U3BoZXJpY2FsWjtcbnZlYzMgdlNwaGVyaWNhbFhYX1paO1xudmVjMyB2
U3BoZXJpY2FsWVlfWlo7XG52ZWMzIHZTcGhlcmljYWxaWjtcbnZlYzMgdlNwaGVyaWNhbFhZO1xu
dmVjMyB2U3BoZXJpY2FsWVo7XG52ZWMzIHZTcGhlcmljYWxaWDtcbn07XG51bmlmb3JtIE1lc2hc
bntcbm1hdDQgd29ybGQ7XG5mbG9hdCB2aXNpYmlsaXR5O1xufTsiOworX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJz
U3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHBiclVib0RlY2xhcmF0
aW9uID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisv
KioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BiclZlcnRleERlY2xhcmF0aW9uLnRzIjoK
Ky8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BiclZlcnRleERlY2xhcmF0
aW9uLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHBiclZlcnRleERlY2xhcmF0
aW9uICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInBiclZlcnRleERlY2xh
cmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwYnJWZXJ0ZXhEZWNsYXJhdGlvbjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL01hdGVyaWFscy9l
ZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdwYnJWZXJ0
ZXhEZWNsYXJhdGlvbic7Cit2YXIgc2hhZGVyID0gInVuaWZvcm0gbWF0NCB2aWV3O1xudW5pZm9y
bSBtYXQ0IHZpZXdQcm9qZWN0aW9uO1xudW5pZm9ybSBtYXQ0IHdvcmxkO1xuI2lmZGVmIEFMQkVE
T1xudW5pZm9ybSBtYXQ0IGFsYmVkb01hdHJpeDtcbnVuaWZvcm0gdmVjMiB2QWxiZWRvSW5mb3M7
XG4jZW5kaWZcbiNpZmRlZiBBTUJJRU5UXG51bmlmb3JtIG1hdDQgYW1iaWVudE1hdHJpeDtcbnVu
aWZvcm0gdmVjNCB2QW1iaWVudEluZm9zO1xuI2VuZGlmXG4jaWZkZWYgT1BBQ0lUWVxudW5pZm9y
bSBtYXQ0IG9wYWNpdHlNYXRyaXg7XG51bmlmb3JtIHZlYzIgdk9wYWNpdHlJbmZvcztcbiNlbmRp
ZlxuI2lmZGVmIEVNSVNTSVZFXG51bmlmb3JtIHZlYzIgdkVtaXNzaXZlSW5mb3M7XG51bmlmb3Jt
IG1hdDQgZW1pc3NpdmVNYXRyaXg7XG4jZW5kaWZcbiNpZmRlZiBMSUdIVE1BUFxudW5pZm9ybSB2
ZWMyIHZMaWdodG1hcEluZm9zO1xudW5pZm9ybSBtYXQ0IGxpZ2h0bWFwTWF0cml4O1xuI2VuZGlm
XG4jaWZkZWYgUkVGTEVDVElWSVRZXG51bmlmb3JtIHZlYzMgdlJlZmxlY3Rpdml0eUluZm9zO1xu
dW5pZm9ybSBtYXQ0IHJlZmxlY3Rpdml0eU1hdHJpeDtcbiNlbmRpZlxuI2lmZGVmIE1JQ1JPU1VS
RkFDRU1BUFxudW5pZm9ybSB2ZWMyIHZNaWNyb1N1cmZhY2VTYW1wbGVySW5mb3M7XG51bmlmb3Jt
IG1hdDQgbWljcm9TdXJmYWNlU2FtcGxlck1hdHJpeDtcbiNlbmRpZlxuI2lmZGVmIEJVTVBcbnVu
aWZvcm0gdmVjMyB2QnVtcEluZm9zO1xudW5pZm9ybSBtYXQ0IGJ1bXBNYXRyaXg7XG4jZW5kaWZc
biNpZmRlZiBQT0lOVFNJWkVcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xuI2VuZGlmXG5cbiNp
ZmRlZiBSRUZMRUNUSU9OXG51bmlmb3JtIHZlYzIgdlJlZmxlY3Rpb25JbmZvcztcbnVuaWZvcm0g
bWF0NCByZWZsZWN0aW9uTWF0cml4O1xuI2VuZGlmXG5cbiNpZmRlZiBDTEVBUkNPQVRcbiNpZmRl
ZiBDTEVBUkNPQVRfVEVYVFVSRVxudW5pZm9ybSB2ZWMyIHZDbGVhckNvYXRJbmZvcztcbnVuaWZv
cm0gbWF0NCBjbGVhckNvYXRNYXRyaXg7XG4jZW5kaWZcbiNpZmRlZiBDTEVBUkNPQVRfQlVNUFxu
dW5pZm9ybSB2ZWMyIHZDbGVhckNvYXRCdW1wSW5mb3M7XG51bmlmb3JtIG1hdDQgY2xlYXJDb2F0
QnVtcE1hdHJpeDtcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVF9USU5UX1RFWFRVUkVcbnVuaWZv
cm0gdmVjMiB2Q2xlYXJDb2F0VGludEluZm9zO1xudW5pZm9ybSBtYXQ0IGNsZWFyQ29hdFRpbnRN
YXRyaXg7XG4jZW5kaWZcbiNlbmRpZlxuXG4jaWZkZWYgQU5JU09UUk9QSUNcbiNpZmRlZiBBTklT
T1RST1BJQ19URVhUVVJFXG51bmlmb3JtIHZlYzIgdkFuaXNvdHJvcHlJbmZvcztcbnVuaWZvcm0g
bWF0NCBhbmlzb3Ryb3B5TWF0cml4O1xuI2VuZGlmXG4jZW5kaWZcblxuI2lmZGVmIFNIRUVOXG4j
aWZkZWYgU0hFRU5fVEVYVFVSRVxudW5pZm9ybSB2ZWMyIHZTaGVlbkluZm9zO1xudW5pZm9ybSBt
YXQ0IHNoZWVuTWF0cml4O1xuI2VuZGlmXG4jZW5kaWZcblxuI2lmZGVmIFNVQlNVUkZBQ0VcbiNp
ZmRlZiBTU19SRUZSQUNUSU9OXG51bmlmb3JtIHZlYzQgdlJlZnJhY3Rpb25JbmZvcztcbnVuaWZv
cm0gbWF0NCByZWZyYWN0aW9uTWF0cml4O1xuI2VuZGlmXG4jaWZkZWYgU1NfVEhJQ0tORVNTQU5E
TUFTS19URVhUVVJFXG51bmlmb3JtIHZlYzIgdlRoaWNrbmVzc0luZm9zO1xudW5pZm9ybSBtYXQ0
IHRoaWNrbmVzc01hdHJpeDs7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIE5PUk1BTFxuI2lmIGRl
ZmluZWQoVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05NQVApICYmIGRlZmluZWQoVVNFU1BIRVJJ
Q0FMSU5WRVJURVgpXG4jaWZkZWYgVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05NQVBcbiNpZmRl
ZiBTUEhFUklDQUxfSEFSTU9OSUNTXG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbEwwMDtcbnVuaWZv
cm0gdmVjMyB2U3BoZXJpY2FsTDFfMTtcbnVuaWZvcm0gdmVjMyB2U3BoZXJpY2FsTDEwO1xudW5p
Zm9ybSB2ZWMzIHZTcGhlcmljYWxMMTE7XG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbEwyXzI7XG51
bmlmb3JtIHZlYzMgdlNwaGVyaWNhbEwyXzE7XG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbEwyMDtc
bnVuaWZvcm0gdmVjMyB2U3BoZXJpY2FsTDIxO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxMMjI7
XG4jZWxzZVxudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxYO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmlj
YWxZO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxaO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxY
WF9aWjtcbnVuaWZvcm0gdmVjMyB2U3BoZXJpY2FsWVlfWlo7XG51bmlmb3JtIHZlYzMgdlNwaGVy
aWNhbFpaO1xudW5pZm9ybSB2ZWMzIHZTcGhlcmljYWxYWTtcbnVuaWZvcm0gdmVjMyB2U3BoZXJp
Y2FsWVo7XG51bmlmb3JtIHZlYzMgdlNwaGVyaWNhbFpYO1xuI2VuZGlmXG4jZW5kaWZcbiNlbmRp
ZlxuI2VuZGlmXG4iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiog
QGhpZGRlbiAqLwordmFyIHBiclZlcnRleERlY2xhcmF0aW9uID0geyBuYW1lOiBuYW1lLCBzaGFk
ZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL1NoYWRlcnNJ
bmNsdWRlL3BvaW50Q2xvdWRWZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9TaGFkZXJz
SW5jbHVkZS9wb2ludENsb3VkVmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
cG9pbnRDbG91ZFZlcnRleCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJw
b2ludENsb3VkVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBwb2ludENsb3VkVmVydGV4OyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJp
YWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3Bv
aW50Q2xvdWRWZXJ0ZXgnOwordmFyIHNoYWRlciA9ICIjaWZkZWYgUE9JTlRTSVpFXG5nbF9Qb2lu
dFNpemU9cG9pbnRTaXplO1xuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0g
c2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBwb2ludENsb3VkVmVydGV4ID0geyBuYW1lOiBu
YW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL3JlZmxlY3Rpb25GdW5jdGlvbi50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvcmVmbGVjdGlvbkZ1bmN0aW9uLnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiByZWZsZWN0aW9uRnVuY3Rpb24gKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAicmVmbGVjdGlvbkZ1bmN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVy
biByZWZsZWN0aW9uRnVuY3Rpb247IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi8uLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3Qu
dHMiKTsKKwordmFyIG5hbWUgPSAncmVmbGVjdGlvbkZ1bmN0aW9uJzsKK3ZhciBzaGFkZXIgPSAi
dmVjMyBwYXJhbGxheENvcnJlY3ROb3JtYWwoIHZlYzMgdmVydGV4UG9zLHZlYzMgb3JpZ1ZlYyx2
ZWMzIGN1YmVTaXplLHZlYzMgY3ViZVBvcyApIHtcblxudmVjMyBpbnZPcmlnVmVjPXZlYzMoMS4w
LDEuMCwxLjApL29yaWdWZWM7XG52ZWMzIGhhbGZTaXplPWN1YmVTaXplKjAuNTtcbnZlYzMgaW50
ZXJzZWNBdE1heFBsYW5lPShjdWJlUG9zK2hhbGZTaXplLXZlcnRleFBvcykqaW52T3JpZ1ZlYztc
bnZlYzMgaW50ZXJzZWNBdE1pblBsYW5lPShjdWJlUG9zLWhhbGZTaXplLXZlcnRleFBvcykqaW52
T3JpZ1ZlYztcblxudmVjMyBsYXJnZXN0SW50ZXJzZWM9bWF4KGludGVyc2VjQXRNYXhQbGFuZSxp
bnRlcnNlY0F0TWluUGxhbmUpO1xuXG5mbG9hdCBkaXN0YW5jZT1taW4obWluKGxhcmdlc3RJbnRl
cnNlYy54LGxhcmdlc3RJbnRlcnNlYy55KSxsYXJnZXN0SW50ZXJzZWMueik7XG5cbnZlYzMgaW50
ZXJzZWN0UG9zaXRpb25XUz12ZXJ0ZXhQb3Mrb3JpZ1ZlYypkaXN0YW5jZTtcblxucmV0dXJuIGlu
dGVyc2VjdFBvc2l0aW9uV1MtY3ViZVBvcztcbn1cbnZlYzMgY29tcHV0ZUZpeGVkRXF1aXJlY3Rh
bmd1bGFyQ29vcmRzKHZlYzQgd29ybGRQb3MsdmVjMyB3b3JsZE5vcm1hbCx2ZWMzIGRpcmVjdGlv
bilcbntcbmZsb2F0IGxvbj1hdGFuKGRpcmVjdGlvbi56LGRpcmVjdGlvbi54KTtcbmZsb2F0IGxh
dD1hY29zKGRpcmVjdGlvbi55KTtcbnZlYzIgc3BoZXJlQ29vcmRzPXZlYzIobG9uLGxhdCkqUkVD
SVBST0NBTF9QSTIqMi4wO1xuZmxvYXQgcz1zcGhlcmVDb29yZHMueCowLjUrMC41O1xuZmxvYXQg
dD1zcGhlcmVDb29yZHMueTtcbnJldHVybiB2ZWMzKHMsdCwwKTtcbn1cbnZlYzMgY29tcHV0ZU1p
cnJvcmVkRml4ZWRFcXVpcmVjdGFuZ3VsYXJDb29yZHModmVjNCB3b3JsZFBvcyx2ZWMzIHdvcmxk
Tm9ybWFsLHZlYzMgZGlyZWN0aW9uKVxue1xuZmxvYXQgbG9uPWF0YW4oZGlyZWN0aW9uLnosZGly
ZWN0aW9uLngpO1xuZmxvYXQgbGF0PWFjb3MoZGlyZWN0aW9uLnkpO1xudmVjMiBzcGhlcmVDb29y
ZHM9dmVjMihsb24sbGF0KSpSRUNJUFJPQ0FMX1BJMioyLjA7XG5mbG9hdCBzPXNwaGVyZUNvb3Jk
cy54KjAuNSswLjU7XG5mbG9hdCB0PXNwaGVyZUNvb3Jkcy55O1xucmV0dXJuIHZlYzMoMS4wLXMs
dCwwKTtcbn1cbnZlYzMgY29tcHV0ZUVxdWlyZWN0YW5ndWxhckNvb3Jkcyh2ZWM0IHdvcmxkUG9z
LHZlYzMgd29ybGROb3JtYWwsdmVjMyBleWVQb3NpdGlvbixtYXQ0IHJlZmxlY3Rpb25NYXRyaXgp
XG57XG52ZWMzIGNhbWVyYVRvVmVydGV4PW5vcm1hbGl6ZSh3b3JsZFBvcy54eXotZXllUG9zaXRp
b24pO1xudmVjMyByPW5vcm1hbGl6ZShyZWZsZWN0KGNhbWVyYVRvVmVydGV4LHdvcmxkTm9ybWFs
KSk7XG5yPXZlYzMocmVmbGVjdGlvbk1hdHJpeCp2ZWM0KHIsMCkpO1xuZmxvYXQgbG9uPWF0YW4o
ci56LHIueCk7XG5mbG9hdCBsYXQ9YWNvcyhyLnkpO1xudmVjMiBzcGhlcmVDb29yZHM9dmVjMihs
b24sbGF0KSpSRUNJUFJPQ0FMX1BJMioyLjA7XG5mbG9hdCBzPXNwaGVyZUNvb3Jkcy54KjAuNSsw
LjU7XG5mbG9hdCB0PXNwaGVyZUNvb3Jkcy55O1xucmV0dXJuIHZlYzMocyx0LDApO1xufVxudmVj
MyBjb21wdXRlU3BoZXJpY2FsQ29vcmRzKHZlYzQgd29ybGRQb3MsdmVjMyB3b3JsZE5vcm1hbCxt
YXQ0IHZpZXcsbWF0NCByZWZsZWN0aW9uTWF0cml4KVxue1xudmVjMyB2aWV3RGlyPW5vcm1hbGl6
ZSh2ZWMzKHZpZXcqd29ybGRQb3MpKTtcbnZlYzMgdmlld05vcm1hbD1ub3JtYWxpemUodmVjMyh2
aWV3KnZlYzQod29ybGROb3JtYWwsMC4wKSkpO1xudmVjMyByPXJlZmxlY3Qodmlld0Rpcix2aWV3
Tm9ybWFsKTtcbnI9dmVjMyhyZWZsZWN0aW9uTWF0cml4KnZlYzQociwwKSk7XG5yLno9ci56LTEu
MDtcbmZsb2F0IG09Mi4wKmxlbmd0aChyKTtcbnJldHVybiB2ZWMzKHIueC9tKzAuNSwxLjAtci55
L20tMC41LDApO1xufVxudmVjMyBjb21wdXRlUGxhbmFyQ29vcmRzKHZlYzQgd29ybGRQb3MsdmVj
MyB3b3JsZE5vcm1hbCx2ZWMzIGV5ZVBvc2l0aW9uLG1hdDQgcmVmbGVjdGlvbk1hdHJpeClcbntc
bnZlYzMgdmlld0Rpcj13b3JsZFBvcy54eXotZXllUG9zaXRpb247XG52ZWMzIGNvb3Jkcz1ub3Jt
YWxpemUocmVmbGVjdCh2aWV3RGlyLHdvcmxkTm9ybWFsKSk7XG5yZXR1cm4gdmVjMyhyZWZsZWN0
aW9uTWF0cml4KnZlYzQoY29vcmRzLDEpKTtcbn1cbnZlYzMgY29tcHV0ZUN1YmljQ29vcmRzKHZl
YzQgd29ybGRQb3MsdmVjMyB3b3JsZE5vcm1hbCx2ZWMzIGV5ZVBvc2l0aW9uLG1hdDQgcmVmbGVj
dGlvbk1hdHJpeClcbntcbnZlYzMgdmlld0Rpcj1ub3JtYWxpemUod29ybGRQb3MueHl6LWV5ZVBv
c2l0aW9uKTtcblxudmVjMyBjb29yZHM9cmVmbGVjdCh2aWV3RGlyLHdvcmxkTm9ybWFsKTtcbmNv
b3Jkcz12ZWMzKHJlZmxlY3Rpb25NYXRyaXgqdmVjNChjb29yZHMsMCkpO1xuI2lmZGVmIElOVkVS
VENVQklDTUFQXG5jb29yZHMueSo9LTEuMDtcbiNlbmRpZlxucmV0dXJuIGNvb3Jkcztcbn1cbnZl
YzMgY29tcHV0ZUN1YmljTG9jYWxDb29yZHModmVjNCB3b3JsZFBvcyx2ZWMzIHdvcmxkTm9ybWFs
LHZlYzMgZXllUG9zaXRpb24sbWF0NCByZWZsZWN0aW9uTWF0cml4LHZlYzMgcmVmbGVjdGlvblNp
emUsdmVjMyByZWZsZWN0aW9uUG9zaXRpb24pXG57XG52ZWMzIHZpZXdEaXI9bm9ybWFsaXplKHdv
cmxkUG9zLnh5ei1leWVQb3NpdGlvbik7XG5cbnZlYzMgY29vcmRzPXJlZmxlY3Qodmlld0Rpcix3
b3JsZE5vcm1hbCk7XG5jb29yZHM9cGFyYWxsYXhDb3JyZWN0Tm9ybWFsKHdvcmxkUG9zLnh5eixj
b29yZHMscmVmbGVjdGlvblNpemUscmVmbGVjdGlvblBvc2l0aW9uKTtcbmNvb3Jkcz12ZWMzKHJl
ZmxlY3Rpb25NYXRyaXgqdmVjNChjb29yZHMsMCkpO1xuI2lmZGVmIElOVkVSVENVQklDTUFQXG5j
b29yZHMueSo9LTEuMDtcbiNlbmRpZlxucmV0dXJuIGNvb3Jkcztcbn1cbnZlYzMgY29tcHV0ZVBy
b2plY3Rpb25Db29yZHModmVjNCB3b3JsZFBvcyxtYXQ0IHZpZXcsbWF0NCByZWZsZWN0aW9uTWF0
cml4KVxue1xucmV0dXJuIHZlYzMocmVmbGVjdGlvbk1hdHJpeCoodmlldyp3b3JsZFBvcykpO1xu
fVxudmVjMyBjb21wdXRlU2t5Qm94Q29vcmRzKHZlYzMgcG9zaXRpb25XLG1hdDQgcmVmbGVjdGlv
bk1hdHJpeClcbntcbnJldHVybiB2ZWMzKHJlZmxlY3Rpb25NYXRyaXgqdmVjNChwb3NpdGlvblcs
MCkpO1xufVxuI2lmZGVmIFJFRkxFQ1RJT05cbnZlYzMgY29tcHV0ZVJlZmxlY3Rpb25Db29yZHMo
dmVjNCB3b3JsZFBvcyx2ZWMzIHdvcmxkTm9ybWFsKVxue1xuI2lmZGVmIFJFRkxFQ1RJT05NQVBf
TUlSUk9SRURFUVVJUkVDVEFOR1VMQVJfRklYRURcbnZlYzMgZGlyZWN0aW9uPW5vcm1hbGl6ZSh2
RGlyZWN0aW9uVyk7XG5yZXR1cm4gY29tcHV0ZU1pcnJvcmVkRml4ZWRFcXVpcmVjdGFuZ3VsYXJD
b29yZHMod29ybGRQb3Msd29ybGROb3JtYWwsZGlyZWN0aW9uKTtcbiNlbmRpZlxuI2lmZGVmIFJF
RkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSX0ZJWEVEXG52ZWMzIGRpcmVjdGlvbj1ub3JtYWxp
emUodkRpcmVjdGlvblcpO1xucmV0dXJuIGNvbXB1dGVGaXhlZEVxdWlyZWN0YW5ndWxhckNvb3Jk
cyh3b3JsZFBvcyx3b3JsZE5vcm1hbCxkaXJlY3Rpb24pO1xuI2VuZGlmXG4jaWZkZWYgUkVGTEVD
VElPTk1BUF9FUVVJUkVDVEFOR1VMQVJcbnJldHVybiBjb21wdXRlRXF1aXJlY3Rhbmd1bGFyQ29v
cmRzKHdvcmxkUG9zLHdvcmxkTm9ybWFsLHZFeWVQb3NpdGlvbi54eXoscmVmbGVjdGlvbk1hdHJp
eCk7XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9OTUFQX1NQSEVSSUNBTFxucmV0dXJuIGNvbXB1
dGVTcGhlcmljYWxDb29yZHMod29ybGRQb3Msd29ybGROb3JtYWwsdmlldyxyZWZsZWN0aW9uTWF0
cml4KTtcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfUExBTkFSXG5yZXR1cm4gY29tcHV0
ZVBsYW5hckNvb3Jkcyh3b3JsZFBvcyx3b3JsZE5vcm1hbCx2RXllUG9zaXRpb24ueHl6LHJlZmxl
Y3Rpb25NYXRyaXgpO1xuI2VuZGlmXG4jaWZkZWYgUkVGTEVDVElPTk1BUF9DVUJJQ1xuI2lmZGVm
IFVTRV9MT0NBTF9SRUZMRUNUSU9OTUFQX0NVQklDXG5yZXR1cm4gY29tcHV0ZUN1YmljTG9jYWxD
b29yZHMod29ybGRQb3Msd29ybGROb3JtYWwsdkV5ZVBvc2l0aW9uLnh5eixyZWZsZWN0aW9uTWF0
cml4LHZSZWZsZWN0aW9uU2l6ZSx2UmVmbGVjdGlvblBvc2l0aW9uKTtcbiNlbHNlXG5yZXR1cm4g
Y29tcHV0ZUN1YmljQ29vcmRzKHdvcmxkUG9zLHdvcmxkTm9ybWFsLHZFeWVQb3NpdGlvbi54eXos
cmVmbGVjdGlvbk1hdHJpeCk7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJT05NQVBf
UFJPSkVDVElPTlxucmV0dXJuIGNvbXB1dGVQcm9qZWN0aW9uQ29vcmRzKHdvcmxkUG9zLHZpZXcs
cmVmbGVjdGlvbk1hdHJpeCk7XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9OTUFQX1NLWUJPWFxu
cmV0dXJuIGNvbXB1dGVTa3lCb3hDb29yZHModlBvc2l0aW9uVVZXLHJlZmxlY3Rpb25NYXRyaXgp
O1xuI2VuZGlmXG4jaWZkZWYgUkVGTEVDVElPTk1BUF9FWFBMSUNJVFxucmV0dXJuIHZlYzMoMCww
LDApO1xuI2VuZGlmXG59XG4jZW5kaWYiOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uSW5jbHVkZXNTaGFkZXJzU3RvcmVbbmFtZV0gPSBz
aGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHJlZmxlY3Rpb25GdW5jdGlvbiA9IHsgbmFtZTog
bmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVy
cy9TaGFkZXJzSW5jbHVkZS9zaGFkb3dzRnJhZ21lbnRGdW5jdGlvbnMudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3NoYWRvd3NGcmFnbWVudEZ1bmN0aW9u
cy50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogc2hhZG93c0ZyYWdtZW50
RnVuY3Rpb25zICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNoYWRvd3NG
cmFnbWVudEZ1bmN0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2hhZG93c0ZyYWdtZW50RnVu
Y3Rpb25zOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
Li4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBu
YW1lID0gJ3NoYWRvd3NGcmFnbWVudEZ1bmN0aW9ucyc7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBT
SEFET1dTXG4jaWZuZGVmIFNIQURPV0ZMT0FUXG5cbmZsb2F0IHVucGFjayh2ZWM0IGNvbG9yKVxu
e1xuY29uc3QgdmVjNCBiaXRfc2hpZnQ9dmVjNCgxLjAvKDI1NS4wKjI1NS4wKjI1NS4wKSwxLjAv
KDI1NS4wKjI1NS4wKSwxLjAvMjU1LjAsMS4wKTtcbnJldHVybiBkb3QoY29sb3IsYml0X3NoaWZ0
KTtcbn1cbiNlbmRpZlxuZmxvYXQgY29tcHV0ZUZhbGxPZmYoZmxvYXQgdmFsdWUsdmVjMiBjbGlw
U3BhY2UsZmxvYXQgZnJ1c3R1bUVkZ2VGYWxsb2ZmKVxue1xuZmxvYXQgbWFzaz1zbW9vdGhzdGVw
KDEuMC1mcnVzdHVtRWRnZUZhbGxvZmYsMS4wLGNsYW1wKGRvdChjbGlwU3BhY2UsY2xpcFNwYWNl
KSwwLiwxLikpO1xucmV0dXJuIG1peCh2YWx1ZSwxLjAsbWFzayk7XG59XG5mbG9hdCBjb21wdXRl
U2hhZG93Q3ViZSh2ZWMzIGxpZ2h0UG9zaXRpb24sc2FtcGxlckN1YmUgc2hhZG93U2FtcGxlcixm
bG9hdCBkYXJrbmVzcyx2ZWMyIGRlcHRoVmFsdWVzKVxue1xudmVjMyBkaXJlY3Rpb25Ub0xpZ2h0
PXZQb3NpdGlvblctbGlnaHRQb3NpdGlvbjtcbmZsb2F0IGRlcHRoPWxlbmd0aChkaXJlY3Rpb25U
b0xpZ2h0KTtcbmRlcHRoPShkZXB0aCtkZXB0aFZhbHVlcy54KS8oZGVwdGhWYWx1ZXMueSk7XG5k
ZXB0aD1jbGFtcChkZXB0aCwwLiwxLjApO1xuZGlyZWN0aW9uVG9MaWdodD1ub3JtYWxpemUoZGly
ZWN0aW9uVG9MaWdodCk7XG5kaXJlY3Rpb25Ub0xpZ2h0Lnk9LWRpcmVjdGlvblRvTGlnaHQueTtc
biNpZm5kZWYgU0hBRE9XRkxPQVRcbmZsb2F0IHNoYWRvdz11bnBhY2sodGV4dHVyZUN1YmUoc2hh
ZG93U2FtcGxlcixkaXJlY3Rpb25Ub0xpZ2h0KSk7XG4jZWxzZVxuZmxvYXQgc2hhZG93PXRleHR1
cmVDdWJlKHNoYWRvd1NhbXBsZXIsZGlyZWN0aW9uVG9MaWdodCkueDtcbiNlbmRpZlxuaWYgKGRl
cHRoPnNoYWRvdylcbntcbnJldHVybiBkYXJrbmVzcztcbn1cbnJldHVybiAxLjA7XG59XG5mbG9h
dCBjb21wdXRlU2hhZG93V2l0aFBvaXNzb25TYW1wbGluZ0N1YmUodmVjMyBsaWdodFBvc2l0aW9u
LHNhbXBsZXJDdWJlIHNoYWRvd1NhbXBsZXIsZmxvYXQgbWFwU2l6ZSxmbG9hdCBkYXJrbmVzcyx2
ZWMyIGRlcHRoVmFsdWVzKVxue1xudmVjMyBkaXJlY3Rpb25Ub0xpZ2h0PXZQb3NpdGlvblctbGln
aHRQb3NpdGlvbjtcbmZsb2F0IGRlcHRoPWxlbmd0aChkaXJlY3Rpb25Ub0xpZ2h0KTtcbmRlcHRo
PShkZXB0aCtkZXB0aFZhbHVlcy54KS8oZGVwdGhWYWx1ZXMueSk7XG5kZXB0aD1jbGFtcChkZXB0
aCwwLiwxLjApO1xuZGlyZWN0aW9uVG9MaWdodD1ub3JtYWxpemUoZGlyZWN0aW9uVG9MaWdodCk7
XG5kaXJlY3Rpb25Ub0xpZ2h0Lnk9LWRpcmVjdGlvblRvTGlnaHQueTtcbmZsb2F0IHZpc2liaWxp
dHk9MS47XG52ZWMzIHBvaXNzb25EaXNrWzRdO1xucG9pc3NvbkRpc2tbMF09dmVjMygtMS4wLDEu
MCwtMS4wKTtcbnBvaXNzb25EaXNrWzFdPXZlYzMoMS4wLC0xLjAsLTEuMCk7XG5wb2lzc29uRGlz
a1syXT12ZWMzKC0xLjAsLTEuMCwtMS4wKTtcbnBvaXNzb25EaXNrWzNdPXZlYzMoMS4wLC0xLjAs
MS4wKTtcblxuI2lmbmRlZiBTSEFET1dGTE9BVFxuaWYgKHVucGFjayh0ZXh0dXJlQ3ViZShzaGFk
b3dTYW1wbGVyLGRpcmVjdGlvblRvTGlnaHQrcG9pc3NvbkRpc2tbMF0qbWFwU2l6ZSkpPGRlcHRo
KSB2aXNpYmlsaXR5LT0wLjI1O1xuaWYgKHVucGFjayh0ZXh0dXJlQ3ViZShzaGFkb3dTYW1wbGVy
LGRpcmVjdGlvblRvTGlnaHQrcG9pc3NvbkRpc2tbMV0qbWFwU2l6ZSkpPGRlcHRoKSB2aXNpYmls
aXR5LT0wLjI1O1xuaWYgKHVucGFjayh0ZXh0dXJlQ3ViZShzaGFkb3dTYW1wbGVyLGRpcmVjdGlv
blRvTGlnaHQrcG9pc3NvbkRpc2tbMl0qbWFwU2l6ZSkpPGRlcHRoKSB2aXNpYmlsaXR5LT0wLjI1
O1xuaWYgKHVucGFjayh0ZXh0dXJlQ3ViZShzaGFkb3dTYW1wbGVyLGRpcmVjdGlvblRvTGlnaHQr
cG9pc3NvbkRpc2tbM10qbWFwU2l6ZSkpPGRlcHRoKSB2aXNpYmlsaXR5LT0wLjI1O1xuI2Vsc2Vc
bmlmICh0ZXh0dXJlQ3ViZShzaGFkb3dTYW1wbGVyLGRpcmVjdGlvblRvTGlnaHQrcG9pc3NvbkRp
c2tbMF0qbWFwU2l6ZSkueDxkZXB0aCkgdmlzaWJpbGl0eS09MC4yNTtcbmlmICh0ZXh0dXJlQ3Vi
ZShzaGFkb3dTYW1wbGVyLGRpcmVjdGlvblRvTGlnaHQrcG9pc3NvbkRpc2tbMV0qbWFwU2l6ZSku
eDxkZXB0aCkgdmlzaWJpbGl0eS09MC4yNTtcbmlmICh0ZXh0dXJlQ3ViZShzaGFkb3dTYW1wbGVy
LGRpcmVjdGlvblRvTGlnaHQrcG9pc3NvbkRpc2tbMl0qbWFwU2l6ZSkueDxkZXB0aCkgdmlzaWJp
bGl0eS09MC4yNTtcbmlmICh0ZXh0dXJlQ3ViZShzaGFkb3dTYW1wbGVyLGRpcmVjdGlvblRvTGln
aHQrcG9pc3NvbkRpc2tbM10qbWFwU2l6ZSkueDxkZXB0aCkgdmlzaWJpbGl0eS09MC4yNTtcbiNl
bmRpZlxucmV0dXJuIG1pbigxLjAsdmlzaWJpbGl0eStkYXJrbmVzcyk7XG59XG5mbG9hdCBjb21w
dXRlU2hhZG93V2l0aEVTTUN1YmUodmVjMyBsaWdodFBvc2l0aW9uLHNhbXBsZXJDdWJlIHNoYWRv
d1NhbXBsZXIsZmxvYXQgZGFya25lc3MsZmxvYXQgZGVwdGhTY2FsZSx2ZWMyIGRlcHRoVmFsdWVz
KVxue1xudmVjMyBkaXJlY3Rpb25Ub0xpZ2h0PXZQb3NpdGlvblctbGlnaHRQb3NpdGlvbjtcbmZs
b2F0IGRlcHRoPWxlbmd0aChkaXJlY3Rpb25Ub0xpZ2h0KTtcbmRlcHRoPShkZXB0aCtkZXB0aFZh
bHVlcy54KS8oZGVwdGhWYWx1ZXMueSk7XG5mbG9hdCBzaGFkb3dQaXhlbERlcHRoPWNsYW1wKGRl
cHRoLDAuLDEuMCk7XG5kaXJlY3Rpb25Ub0xpZ2h0PW5vcm1hbGl6ZShkaXJlY3Rpb25Ub0xpZ2h0
KTtcbmRpcmVjdGlvblRvTGlnaHQueT0tZGlyZWN0aW9uVG9MaWdodC55O1xuI2lmbmRlZiBTSEFE
T1dGTE9BVFxuZmxvYXQgc2hhZG93TWFwU2FtcGxlPXVucGFjayh0ZXh0dXJlQ3ViZShzaGFkb3dT
YW1wbGVyLGRpcmVjdGlvblRvTGlnaHQpKTtcbiNlbHNlXG5mbG9hdCBzaGFkb3dNYXBTYW1wbGU9
dGV4dHVyZUN1YmUoc2hhZG93U2FtcGxlcixkaXJlY3Rpb25Ub0xpZ2h0KS54O1xuI2VuZGlmXG5m
bG9hdCBlc209MS4wLWNsYW1wKGV4cChtaW4oODcuLGRlcHRoU2NhbGUqc2hhZG93UGl4ZWxEZXB0
aCkpKnNoYWRvd01hcFNhbXBsZSwwLiwxLi1kYXJrbmVzcyk7XG5yZXR1cm4gZXNtO1xufVxuZmxv
YXQgY29tcHV0ZVNoYWRvd1dpdGhDbG9zZUVTTUN1YmUodmVjMyBsaWdodFBvc2l0aW9uLHNhbXBs
ZXJDdWJlIHNoYWRvd1NhbXBsZXIsZmxvYXQgZGFya25lc3MsZmxvYXQgZGVwdGhTY2FsZSx2ZWMy
IGRlcHRoVmFsdWVzKVxue1xudmVjMyBkaXJlY3Rpb25Ub0xpZ2h0PXZQb3NpdGlvblctbGlnaHRQ
b3NpdGlvbjtcbmZsb2F0IGRlcHRoPWxlbmd0aChkaXJlY3Rpb25Ub0xpZ2h0KTtcbmRlcHRoPShk
ZXB0aCtkZXB0aFZhbHVlcy54KS8oZGVwdGhWYWx1ZXMueSk7XG5mbG9hdCBzaGFkb3dQaXhlbERl
cHRoPWNsYW1wKGRlcHRoLDAuLDEuMCk7XG5kaXJlY3Rpb25Ub0xpZ2h0PW5vcm1hbGl6ZShkaXJl
Y3Rpb25Ub0xpZ2h0KTtcbmRpcmVjdGlvblRvTGlnaHQueT0tZGlyZWN0aW9uVG9MaWdodC55O1xu
I2lmbmRlZiBTSEFET1dGTE9BVFxuZmxvYXQgc2hhZG93TWFwU2FtcGxlPXVucGFjayh0ZXh0dXJl
Q3ViZShzaGFkb3dTYW1wbGVyLGRpcmVjdGlvblRvTGlnaHQpKTtcbiNlbHNlXG5mbG9hdCBzaGFk
b3dNYXBTYW1wbGU9dGV4dHVyZUN1YmUoc2hhZG93U2FtcGxlcixkaXJlY3Rpb25Ub0xpZ2h0KS54
O1xuI2VuZGlmXG5mbG9hdCBlc209Y2xhbXAoZXhwKG1pbig4Ny4sLWRlcHRoU2NhbGUqKHNoYWRv
d1BpeGVsRGVwdGgtc2hhZG93TWFwU2FtcGxlKSkpLGRhcmtuZXNzLDEuKTtcbnJldHVybiBlc207
XG59XG5mbG9hdCBjb21wdXRlU2hhZG93KHZlYzQgdlBvc2l0aW9uRnJvbUxpZ2h0LGZsb2F0IGRl
cHRoTWV0cmljLHNhbXBsZXIyRCBzaGFkb3dTYW1wbGVyLGZsb2F0IGRhcmtuZXNzLGZsb2F0IGZy
dXN0dW1FZGdlRmFsbG9mZilcbntcbnZlYzMgY2xpcFNwYWNlPXZQb3NpdGlvbkZyb21MaWdodC54
eXovdlBvc2l0aW9uRnJvbUxpZ2h0Lnc7XG52ZWMyIHV2PTAuNSpjbGlwU3BhY2UueHkrdmVjMigw
LjUpO1xuaWYgKHV2Lng8MC4gfHwgdXYueD4xLjAgfHwgdXYueTwwLiB8fCB1di55PjEuMClcbntc
bnJldHVybiAxLjA7XG59XG5mbG9hdCBzaGFkb3dQaXhlbERlcHRoPWNsYW1wKGRlcHRoTWV0cmlj
LDAuLDEuMCk7XG4jaWZuZGVmIFNIQURPV0ZMT0FUXG5mbG9hdCBzaGFkb3c9dW5wYWNrKHRleHR1
cmUyRChzaGFkb3dTYW1wbGVyLHV2KSk7XG4jZWxzZVxuZmxvYXQgc2hhZG93PXRleHR1cmUyRChz
aGFkb3dTYW1wbGVyLHV2KS54O1xuI2VuZGlmXG5pZiAoc2hhZG93UGl4ZWxEZXB0aD5zaGFkb3cp
XG57XG5yZXR1cm4gY29tcHV0ZUZhbGxPZmYoZGFya25lc3MsY2xpcFNwYWNlLnh5LGZydXN0dW1F
ZGdlRmFsbG9mZik7XG59XG5yZXR1cm4gMS47XG59XG5mbG9hdCBjb21wdXRlU2hhZG93V2l0aFBv
aXNzb25TYW1wbGluZyh2ZWM0IHZQb3NpdGlvbkZyb21MaWdodCxmbG9hdCBkZXB0aE1ldHJpYyxz
YW1wbGVyMkQgc2hhZG93U2FtcGxlcixmbG9hdCBtYXBTaXplLGZsb2F0IGRhcmtuZXNzLGZsb2F0
IGZydXN0dW1FZGdlRmFsbG9mZilcbntcbnZlYzMgY2xpcFNwYWNlPXZQb3NpdGlvbkZyb21MaWdo
dC54eXovdlBvc2l0aW9uRnJvbUxpZ2h0Lnc7XG52ZWMyIHV2PTAuNSpjbGlwU3BhY2UueHkrdmVj
MigwLjUpO1xuaWYgKHV2Lng8MC4gfHwgdXYueD4xLjAgfHwgdXYueTwwLiB8fCB1di55PjEuMClc
bntcbnJldHVybiAxLjA7XG59XG5mbG9hdCBzaGFkb3dQaXhlbERlcHRoPWNsYW1wKGRlcHRoTWV0
cmljLDAuLDEuMCk7XG5mbG9hdCB2aXNpYmlsaXR5PTEuO1xudmVjMiBwb2lzc29uRGlza1s0XTtc
bnBvaXNzb25EaXNrWzBdPXZlYzIoLTAuOTQyMDE2MjQsLTAuMzk5MDYyMTYpO1xucG9pc3NvbkRp
c2tbMV09dmVjMigwLjk0NTU4NjA5LC0wLjc2ODkwNzI1KTtcbnBvaXNzb25EaXNrWzJdPXZlYzIo
LTAuMDk0MTg0MTAxLC0wLjkyOTM4ODcwKTtcbnBvaXNzb25EaXNrWzNdPXZlYzIoMC4zNDQ5NTkz
OCwwLjI5Mzg3NzYwKTtcblxuI2lmbmRlZiBTSEFET1dGTE9BVFxuaWYgKHVucGFjayh0ZXh0dXJl
MkQoc2hhZG93U2FtcGxlcix1ditwb2lzc29uRGlza1swXSptYXBTaXplKSk8c2hhZG93UGl4ZWxE
ZXB0aCkgdmlzaWJpbGl0eS09MC4yNTtcbmlmICh1bnBhY2sodGV4dHVyZTJEKHNoYWRvd1NhbXBs
ZXIsdXYrcG9pc3NvbkRpc2tbMV0qbWFwU2l6ZSkpPHNoYWRvd1BpeGVsRGVwdGgpIHZpc2liaWxp
dHktPTAuMjU7XG5pZiAodW5wYWNrKHRleHR1cmUyRChzaGFkb3dTYW1wbGVyLHV2K3BvaXNzb25E
aXNrWzJdKm1hcFNpemUpKTxzaGFkb3dQaXhlbERlcHRoKSB2aXNpYmlsaXR5LT0wLjI1O1xuaWYg
KHVucGFjayh0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix1ditwb2lzc29uRGlza1szXSptYXBTaXpl
KSk8c2hhZG93UGl4ZWxEZXB0aCkgdmlzaWJpbGl0eS09MC4yNTtcbiNlbHNlXG5pZiAodGV4dHVy
ZTJEKHNoYWRvd1NhbXBsZXIsdXYrcG9pc3NvbkRpc2tbMF0qbWFwU2l6ZSkueDxzaGFkb3dQaXhl
bERlcHRoKSB2aXNpYmlsaXR5LT0wLjI1O1xuaWYgKHRleHR1cmUyRChzaGFkb3dTYW1wbGVyLHV2
K3BvaXNzb25EaXNrWzFdKm1hcFNpemUpLng8c2hhZG93UGl4ZWxEZXB0aCkgdmlzaWJpbGl0eS09
MC4yNTtcbmlmICh0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix1ditwb2lzc29uRGlza1syXSptYXBT
aXplKS54PHNoYWRvd1BpeGVsRGVwdGgpIHZpc2liaWxpdHktPTAuMjU7XG5pZiAodGV4dHVyZTJE
KHNoYWRvd1NhbXBsZXIsdXYrcG9pc3NvbkRpc2tbM10qbWFwU2l6ZSkueDxzaGFkb3dQaXhlbERl
cHRoKSB2aXNpYmlsaXR5LT0wLjI1O1xuI2VuZGlmXG5yZXR1cm4gY29tcHV0ZUZhbGxPZmYobWlu
KDEuMCx2aXNpYmlsaXR5K2RhcmtuZXNzKSxjbGlwU3BhY2UueHksZnJ1c3R1bUVkZ2VGYWxsb2Zm
KTtcbn1cbmZsb2F0IGNvbXB1dGVTaGFkb3dXaXRoRVNNKHZlYzQgdlBvc2l0aW9uRnJvbUxpZ2h0
LGZsb2F0IGRlcHRoTWV0cmljLHNhbXBsZXIyRCBzaGFkb3dTYW1wbGVyLGZsb2F0IGRhcmtuZXNz
LGZsb2F0IGRlcHRoU2NhbGUsZmxvYXQgZnJ1c3R1bUVkZ2VGYWxsb2ZmKVxue1xudmVjMyBjbGlw
U3BhY2U9dlBvc2l0aW9uRnJvbUxpZ2h0Lnh5ei92UG9zaXRpb25Gcm9tTGlnaHQudztcbnZlYzIg
dXY9MC41KmNsaXBTcGFjZS54eSt2ZWMyKDAuNSk7XG5pZiAodXYueDwwLiB8fCB1di54PjEuMCB8
fCB1di55PDAuIHx8IHV2Lnk+MS4wKVxue1xucmV0dXJuIDEuMDtcbn1cbmZsb2F0IHNoYWRvd1Bp
eGVsRGVwdGg9Y2xhbXAoZGVwdGhNZXRyaWMsMC4sMS4wKTtcbiNpZm5kZWYgU0hBRE9XRkxPQVRc
bmZsb2F0IHNoYWRvd01hcFNhbXBsZT11bnBhY2sodGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIsdXYp
KTtcbiNlbHNlXG5mbG9hdCBzaGFkb3dNYXBTYW1wbGU9dGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIs
dXYpLng7XG4jZW5kaWZcbmZsb2F0IGVzbT0xLjAtY2xhbXAoZXhwKG1pbig4Ny4sZGVwdGhTY2Fs
ZSpzaGFkb3dQaXhlbERlcHRoKSkqc2hhZG93TWFwU2FtcGxlLDAuLDEuLWRhcmtuZXNzKTtcbnJl
dHVybiBjb21wdXRlRmFsbE9mZihlc20sY2xpcFNwYWNlLnh5LGZydXN0dW1FZGdlRmFsbG9mZik7
XG59XG5mbG9hdCBjb21wdXRlU2hhZG93V2l0aENsb3NlRVNNKHZlYzQgdlBvc2l0aW9uRnJvbUxp
Z2h0LGZsb2F0IGRlcHRoTWV0cmljLHNhbXBsZXIyRCBzaGFkb3dTYW1wbGVyLGZsb2F0IGRhcmtu
ZXNzLGZsb2F0IGRlcHRoU2NhbGUsZmxvYXQgZnJ1c3R1bUVkZ2VGYWxsb2ZmKVxue1xudmVjMyBj
bGlwU3BhY2U9dlBvc2l0aW9uRnJvbUxpZ2h0Lnh5ei92UG9zaXRpb25Gcm9tTGlnaHQudztcbnZl
YzIgdXY9MC41KmNsaXBTcGFjZS54eSt2ZWMyKDAuNSk7XG5pZiAodXYueDwwLiB8fCB1di54PjEu
MCB8fCB1di55PDAuIHx8IHV2Lnk+MS4wKVxue1xucmV0dXJuIDEuMDtcbn1cbmZsb2F0IHNoYWRv
d1BpeGVsRGVwdGg9Y2xhbXAoZGVwdGhNZXRyaWMsMC4sMS4wKTtcbiNpZm5kZWYgU0hBRE9XRkxP
QVRcbmZsb2F0IHNoYWRvd01hcFNhbXBsZT11bnBhY2sodGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIs
dXYpKTtcbiNlbHNlXG5mbG9hdCBzaGFkb3dNYXBTYW1wbGU9dGV4dHVyZTJEKHNoYWRvd1NhbXBs
ZXIsdXYpLng7XG4jZW5kaWZcbmZsb2F0IGVzbT1jbGFtcChleHAobWluKDg3LiwtZGVwdGhTY2Fs
ZSooc2hhZG93UGl4ZWxEZXB0aC1zaGFkb3dNYXBTYW1wbGUpKSksZGFya25lc3MsMS4pO1xucmV0
dXJuIGNvbXB1dGVGYWxsT2ZmKGVzbSxjbGlwU3BhY2UueHksZnJ1c3R1bUVkZ2VGYWxsb2ZmKTtc
bn1cbiNpZmRlZiBXRUJHTDJcblxuZmxvYXQgY29tcHV0ZVNoYWRvd1dpdGhQQ0YxKHZlYzQgdlBv
c2l0aW9uRnJvbUxpZ2h0LGZsb2F0IGRlcHRoTWV0cmljLHNhbXBsZXIyRFNoYWRvdyBzaGFkb3dT
YW1wbGVyLGZsb2F0IGRhcmtuZXNzLGZsb2F0IGZydXN0dW1FZGdlRmFsbG9mZilcbntcbmlmIChk
ZXB0aE1ldHJpYz4xLjAgfHwgZGVwdGhNZXRyaWM8MC4wKSB7XG5yZXR1cm4gMS4wO1xufVxudmVj
MyBjbGlwU3BhY2U9dlBvc2l0aW9uRnJvbUxpZ2h0Lnh5ei92UG9zaXRpb25Gcm9tTGlnaHQudztc
bnZlYzMgdXZEZXB0aD12ZWMzKDAuNSpjbGlwU3BhY2UueHl6K3ZlYzMoMC41KSk7XG5mbG9hdCBz
aGFkb3c9dGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIsdXZEZXB0aCk7XG5zaGFkb3c9bWl4KGRhcmtu
ZXNzLDEuLHNoYWRvdyk7XG5yZXR1cm4gY29tcHV0ZUZhbGxPZmYoc2hhZG93LGNsaXBTcGFjZS54
eSxmcnVzdHVtRWRnZUZhbGxvZmYpO1xufVxuXG5cblxuZmxvYXQgY29tcHV0ZVNoYWRvd1dpdGhQ
Q0YzKHZlYzQgdlBvc2l0aW9uRnJvbUxpZ2h0LGZsb2F0IGRlcHRoTWV0cmljLHNhbXBsZXIyRFNo
YWRvdyBzaGFkb3dTYW1wbGVyLHZlYzIgc2hhZG93TWFwU2l6ZUFuZEludmVyc2UsZmxvYXQgZGFy
a25lc3MsZmxvYXQgZnJ1c3R1bUVkZ2VGYWxsb2ZmKVxue1xuaWYgKGRlcHRoTWV0cmljPjEuMCB8
fCBkZXB0aE1ldHJpYzwwLjApIHtcbnJldHVybiAxLjA7XG59XG52ZWMzIGNsaXBTcGFjZT12UG9z
aXRpb25Gcm9tTGlnaHQueHl6L3ZQb3NpdGlvbkZyb21MaWdodC53O1xudmVjMyB1dkRlcHRoPXZl
YzMoMC41KmNsaXBTcGFjZS54eXordmVjMygwLjUpKTtcbnZlYzIgdXY9dXZEZXB0aC54eSpzaGFk
b3dNYXBTaXplQW5kSW52ZXJzZS54O1xudXYrPTAuNTtcbnZlYzIgc3Q9ZnJhY3QodXYpO1xudmVj
MiBiYXNlX3V2PWZsb29yKHV2KS0wLjU7XG5iYXNlX3V2Kj1zaGFkb3dNYXBTaXplQW5kSW52ZXJz
ZS55O1xuXG5cblxuXG52ZWMyIHV2dzA9My4tMi4qc3Q7XG52ZWMyIHV2dzE9MS4rMi4qc3Q7XG52
ZWMyIHU9dmVjMigoMi4tc3QueCkvdXZ3MC54LTEuLHN0LngvdXZ3MS54KzEuKSpzaGFkb3dNYXBT
aXplQW5kSW52ZXJzZS55O1xudmVjMiB2PXZlYzIoKDIuLXN0LnkpL3V2dzAueS0xLixzdC55L3V2
dzEueSsxLikqc2hhZG93TWFwU2l6ZUFuZEludmVyc2UueTtcbmZsb2F0IHNoYWRvdz0wLjtcbnNo
YWRvdys9dXZ3MC54KnV2dzAueSp0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix2ZWMzKGJhc2VfdXYu
eHkrdmVjMih1WzBdLHZbMF0pLHV2RGVwdGgueikpO1xuc2hhZG93Kz11dncxLngqdXZ3MC55KnRl
eHR1cmUyRChzaGFkb3dTYW1wbGVyLHZlYzMoYmFzZV91di54eSt2ZWMyKHVbMV0sdlswXSksdXZE
ZXB0aC56KSk7XG5zaGFkb3crPXV2dzAueCp1dncxLnkqdGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIs
dmVjMyhiYXNlX3V2Lnh5K3ZlYzIodVswXSx2WzFdKSx1dkRlcHRoLnopKTtcbnNoYWRvdys9dXZ3
MS54KnV2dzEueSp0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix2ZWMzKGJhc2VfdXYueHkrdmVjMih1
WzFdLHZbMV0pLHV2RGVwdGgueikpO1xuc2hhZG93PXNoYWRvdy8xNi47XG5zaGFkb3c9bWl4KGRh
cmtuZXNzLDEuLHNoYWRvdyk7XG5yZXR1cm4gY29tcHV0ZUZhbGxPZmYoc2hhZG93LGNsaXBTcGFj
ZS54eSxmcnVzdHVtRWRnZUZhbGxvZmYpO1xufVxuXG5cblxuZmxvYXQgY29tcHV0ZVNoYWRvd1dp
dGhQQ0Y1KHZlYzQgdlBvc2l0aW9uRnJvbUxpZ2h0LGZsb2F0IGRlcHRoTWV0cmljLHNhbXBsZXIy
RFNoYWRvdyBzaGFkb3dTYW1wbGVyLHZlYzIgc2hhZG93TWFwU2l6ZUFuZEludmVyc2UsZmxvYXQg
ZGFya25lc3MsZmxvYXQgZnJ1c3R1bUVkZ2VGYWxsb2ZmKVxue1xuaWYgKGRlcHRoTWV0cmljPjEu
MCB8fCBkZXB0aE1ldHJpYzwwLjApIHtcbnJldHVybiAxLjA7XG59XG52ZWMzIGNsaXBTcGFjZT12
UG9zaXRpb25Gcm9tTGlnaHQueHl6L3ZQb3NpdGlvbkZyb21MaWdodC53O1xudmVjMyB1dkRlcHRo
PXZlYzMoMC41KmNsaXBTcGFjZS54eXordmVjMygwLjUpKTtcbnZlYzIgdXY9dXZEZXB0aC54eSpz
aGFkb3dNYXBTaXplQW5kSW52ZXJzZS54O1xudXYrPTAuNTtcbnZlYzIgc3Q9ZnJhY3QodXYpO1xu
dmVjMiBiYXNlX3V2PWZsb29yKHV2KS0wLjU7XG5iYXNlX3V2Kj1zaGFkb3dNYXBTaXplQW5kSW52
ZXJzZS55O1xuXG5cbnZlYzIgdXZ3MD00Li0zLipzdDtcbnZlYzIgdXZ3MT12ZWMyKDcuKTtcbnZl
YzIgdXZ3Mj0xLiszLipzdDtcbnZlYzMgdT12ZWMzKCgzLi0yLipzdC54KS91dncwLngtMi4sKDMu
K3N0LngpL3V2dzEueCxzdC54L3V2dzIueCsyLikqc2hhZG93TWFwU2l6ZUFuZEludmVyc2UueTtc
bnZlYzMgdj12ZWMzKCgzLi0yLipzdC55KS91dncwLnktMi4sKDMuK3N0LnkpL3V2dzEueSxzdC55
L3V2dzIueSsyLikqc2hhZG93TWFwU2l6ZUFuZEludmVyc2UueTtcbmZsb2F0IHNoYWRvdz0wLjtc
bnNoYWRvdys9dXZ3MC54KnV2dzAueSp0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix2ZWMzKGJhc2Vf
dXYueHkrdmVjMih1WzBdLHZbMF0pLHV2RGVwdGgueikpO1xuc2hhZG93Kz11dncxLngqdXZ3MC55
KnRleHR1cmUyRChzaGFkb3dTYW1wbGVyLHZlYzMoYmFzZV91di54eSt2ZWMyKHVbMV0sdlswXSks
dXZEZXB0aC56KSk7XG5zaGFkb3crPXV2dzIueCp1dncwLnkqdGV4dHVyZTJEKHNoYWRvd1NhbXBs
ZXIsdmVjMyhiYXNlX3V2Lnh5K3ZlYzIodVsyXSx2WzBdKSx1dkRlcHRoLnopKTtcbnNoYWRvdys9
dXZ3MC54KnV2dzEueSp0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix2ZWMzKGJhc2VfdXYueHkrdmVj
Mih1WzBdLHZbMV0pLHV2RGVwdGgueikpO1xuc2hhZG93Kz11dncxLngqdXZ3MS55KnRleHR1cmUy
RChzaGFkb3dTYW1wbGVyLHZlYzMoYmFzZV91di54eSt2ZWMyKHVbMV0sdlsxXSksdXZEZXB0aC56
KSk7XG5zaGFkb3crPXV2dzIueCp1dncxLnkqdGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIsdmVjMyhi
YXNlX3V2Lnh5K3ZlYzIodVsyXSx2WzFdKSx1dkRlcHRoLnopKTtcbnNoYWRvdys9dXZ3MC54KnV2
dzIueSp0ZXh0dXJlMkQoc2hhZG93U2FtcGxlcix2ZWMzKGJhc2VfdXYueHkrdmVjMih1WzBdLHZb
Ml0pLHV2RGVwdGgueikpO1xuc2hhZG93Kz11dncxLngqdXZ3Mi55KnRleHR1cmUyRChzaGFkb3dT
YW1wbGVyLHZlYzMoYmFzZV91di54eSt2ZWMyKHVbMV0sdlsyXSksdXZEZXB0aC56KSk7XG5zaGFk
b3crPXV2dzIueCp1dncyLnkqdGV4dHVyZTJEKHNoYWRvd1NhbXBsZXIsdmVjMyhiYXNlX3V2Lnh5
K3ZlYzIodVsyXSx2WzJdKSx1dkRlcHRoLnopKTtcbnNoYWRvdz1zaGFkb3cvMTQ0LjtcbnNoYWRv
dz1taXgoZGFya25lc3MsMS4sc2hhZG93KTtcbnJldHVybiBjb21wdXRlRmFsbE9mZihzaGFkb3cs
Y2xpcFNwYWNlLnh5LGZydXN0dW1FZGdlRmFsbG9mZik7XG59XG5jb25zdCB2ZWMzIFBvaXNzb25T
YW1wbGVyczMyWzY0XT12ZWMzWzY0XShcbnZlYzMoMC4wNjQwNzAxMywwLjA1NDA5OTI3LDAuKSxc
bnZlYzMoMC43MzY2NTc3LDAuNTc4OTM5NCwwLiksXG52ZWMzKC0wLjYyNzA1NDIsLTAuNTMyMDI3
OCwwLiksXG52ZWMzKC0wLjQwOTYxMDcsMC44NDExMDk1LDAuKSxcbnZlYzMoMC42ODQ5NTY0LC0w
LjQ5OTA4MTgsMC4pLFxudmVjMygtMC44NzQxODEsLTAuMDQ1Nzk3MzUsMC4pLFxudmVjMygwLjk5
ODk5OTgsMC4wMDA5ODgwMDY2LDAuKSxcbnZlYzMoLTAuMDA0OTIwNTc4LC0wLjkxNTE2NDksMC4p
LFxudmVjMygwLjE4MDU3NjMsMC45NzQ3NDgzLDAuKSxcbnZlYzMoLTAuMjEzODQ1MSwwLjI2MzU4
MTgsMC4pLFxudmVjMygwLjEwOTg0NSwwLjM4ODQ3ODUsMC4pLFxudmVjMygwLjA2ODc2NzU1LC0w
LjM1ODEwNzQsMC4pLFxudmVjMygwLjM3NDA3MywtMC43NjYxMjY2LDAuKSxcbnZlYzMoMC4zMDc5
MTMyLC0wLjEyMTY3NjMsMC4pLFxudmVjMygtMC4zNzk0MzM1LC0wLjgyNzE1ODMsMC4pLFxudmVj
MygtMC4yMDM4NzgsLTAuMDc3MTUwMzQsMC4pLFxudmVjMygwLjU5MTI2OTcsMC4xNDY5Nzk5LDAu
KSxcbnZlYzMoLTAuODgwNjksMC4zMDMxNzg0LDAuKSxcbnZlYzMoMC41MDQwMTA4LDAuODI4Mzcy
MiwwLiksXG52ZWMzKC0wLjU4NDQxMjQsMC41NDk0ODc3LDAuKSxcbnZlYzMoMC42MDE3Nzk5LC0w
LjE3MjY2NTQsMC4pLFxudmVjMygtMC41NTU0OTgxLDAuMTU1OTk5NywwLiksXG52ZWMzKC0wLjMw
MTYzNjksLTAuMzkwMDkyOCwwLiksXG52ZWMzKC0wLjU1NTA2MzIsLTAuMTcyMzc2MiwwLiksXG52
ZWMzKDAuOTI1MDI5LDAuMjk5NTA0MSwwLiksXG52ZWMzKC0wLjI0NzMxMzcsMC41NTM4NTA1LDAu
KSxcbnZlYzMoMC45MTgzMDM3LC0wLjI4NjIzOTIsMC4pLFxudmVjMygwLjI0Njk0MjEsMC42NzE4
NzEyLDAuKSxcbnZlYzMoMC4zOTE2Mzk3LC0wLjQzMjgyMDksMC4pLFxudmVjMygtMC4wMzU3Njky
NywtMC42MjIwMDMyLDAuKSxcbnZlYzMoLTAuMDQ2NjEyNTUsMC43OTk1MjAxLDAuKSxcbnZlYzMo
MC40NDAyOTI0LDAuMzY0MDMxMiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4p
LFxudmVjMygwLiwwLiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4pLFxudmVj
MygwLiwwLiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4pLFxudmVjMygwLiww
LiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4pLFxudmVjMygwLiwwLiwwLiks
XG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4pLFxudmVjMygwLiwwLiwwLiksXG52ZWMz
KDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4pLFxudmVjMygwLiwwLiwwLiksXG52ZWMzKDAuLDAu
LDAuKSxcbnZlYzMoMC4sMC4sMC4pLFxudmVjMygwLiwwLiwwLiksXG52ZWMzKDAuLDAuLDAuKSxc
bnZlYzMoMC4sMC4sMC4pLFxudmVjMygwLiwwLiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMo
MC4sMC4sMC4pLFxudmVjMygwLiwwLiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4s
MC4pLFxudmVjMygwLiwwLiwwLiksXG52ZWMzKDAuLDAuLDAuKSxcbnZlYzMoMC4sMC4sMC4pXG4p
O1xuY29uc3QgdmVjMyBQb2lzc29uU2FtcGxlcnM2NFs2NF09dmVjM1s2NF0oXG52ZWMzKC0wLjYx
MzM5MiwwLjYxNzQ4MSwwLiksXG52ZWMzKDAuMTcwMDE5LC0wLjA0MDI1NCwwLiksXG52ZWMzKC0w
LjI5OTQxNywwLjc5MTkyNSwwLiksXG52ZWMzKDAuNjQ1NjgwLDAuNDkzMjEwLDAuKSxcbnZlYzMo
LTAuNjUxNzg0LDAuNzE3ODg3LDAuKSxcbnZlYzMoMC40MjEwMDMsMC4wMjcwNzAsMC4pLFxudmVj
MygtMC44MTcxOTQsLTAuMjcxMDk2LDAuKSxcbnZlYzMoLTAuNzA1Mzc0LC0wLjY2ODIwMywwLiks
XG52ZWMzKDAuOTc3MDUwLC0wLjEwODYxNSwwLiksXG52ZWMzKDAuMDYzMzI2LDAuMTQyMzY5LDAu
KSxcbnZlYzMoMC4yMDM1MjgsMC4yMTQzMzEsMC4pLFxudmVjMygtMC42Njc1MzEsMC4zMjYwOTAs
MC4pLFxudmVjMygtMC4wOTg0MjIsLTAuMjk1NzU1LDAuKSxcbnZlYzMoLTAuODg1OTIyLDAuMjE1
MzY5LDAuKSxcbnZlYzMoMC41NjY2MzcsMC42MDUyMTMsMC4pLFxudmVjMygwLjAzOTc2NiwtMC4z
OTYxMDAsMC4pLFxudmVjMygwLjc1MTk0NiwwLjQ1MzM1MiwwLiksXG52ZWMzKDAuMDc4NzA3LC0w
LjcxNTMyMywwLiksXG52ZWMzKC0wLjA3NTgzOCwtMC41MjkzNDQsMC4pLFxudmVjMygwLjcyNDQ3
OSwtMC41ODA3OTgsMC4pLFxudmVjMygwLjIyMjk5OSwtMC4yMTUxMjUsMC4pLFxudmVjMygtMC40
Njc1NzQsLTAuNDA1NDM4LDAuKSxcbnZlYzMoLTAuMjQ4MjY4LC0wLjgxNDc1MywwLiksXG52ZWMz
KDAuMzU0NDExLC0wLjg4NzU3MCwwLiksXG52ZWMzKDAuMTc1ODE3LDAuMzgyMzY2LDAuKSxcbnZl
YzMoMC40ODc0NzIsLTAuMDYzMDgyLDAuKSxcbnZlYzMoLTAuMDg0MDc4LDAuODk4MzEyLDAuKSxc
bnZlYzMoMC40ODg4NzYsLTAuNzgzNDQxLDAuKSxcbnZlYzMoMC40NzAwMTYsMC4yMTc5MzMsMC4p
LFxudmVjMygtMC42OTY4OTAsLTAuNTQ5NzkxLDAuKSxcbnZlYzMoLTAuMTQ5NjkzLDAuNjA1NzYy
LDAuKSxcbnZlYzMoMC4wMzQyMTEsMC45Nzk5ODAsMC4pLFxudmVjMygwLjUwMzA5OCwtMC4zMDg4
NzgsMC4pLFxudmVjMygtMC4wMTYyMDUsLTAuODcyOTIxLDAuKSxcbnZlYzMoMC4zODU3ODQsLTAu
MzkzOTAyLDAuKSxcbnZlYzMoLTAuMTQ2ODg2LC0wLjg1OTI0OSwwLiksXG52ZWMzKDAuNjQzMzYx
LDAuMTY0MDk4LDAuKSxcbnZlYzMoMC42MzQzODgsLTAuMDQ5NDcxLDAuKSxcbnZlYzMoLTAuNjg4
ODk0LDAuMDA3ODQzLDAuKSxcbnZlYzMoMC40NjQwMzQsLTAuMTg4ODE4LDAuKSxcbnZlYzMoLTAu
NDQwODQwLDAuMTM3NDg2LDAuKSxcbnZlYzMoMC4zNjQ0ODMsMC41MTE3MDQsMC4pLFxudmVjMygw
LjAzNDAyOCwwLjMyNTk2OCwwLiksXG52ZWMzKDAuMDk5MDk0LC0wLjMwODAyMywwLiksXG52ZWMz
KDAuNjkzOTYwLC0wLjM2NjI1MywwLiksXG52ZWMzKDAuNjc4ODg0LC0wLjIwNDY4OCwwLiksXG52
ZWMzKDAuMDAxODAxLDAuNzgwMzI4LDAuKSxcbnZlYzMoMC4xNDUxNzcsLTAuODk4OTg0LDAuKSxc
bnZlYzMoMC4wNjI2NTUsLTAuNjExODY2LDAuKSxcbnZlYzMoMC4zMTUyMjYsLTAuNjA0Mjk3LDAu
KSxcbnZlYzMoLTAuNzgwMTQ1LDAuNDg2MjUxLDAuKSxcbnZlYzMoLTAuMzcxODY4LDAuODgyMTM4
LDAuKSxcbnZlYzMoMC4yMDA0NzYsMC40OTQ0MzAsMC4pLFxudmVjMygtMC40OTQ1NTIsLTAuNzEx
MDUxLDAuKSxcbnZlYzMoMC42MTI0NzYsMC43MDUyNTIsMC4pLFxudmVjMygtMC41Nzg4NDUsLTAu
NzY4NzkyLDAuKSxcbnZlYzMoLTAuNzcyNDU0LC0wLjA5MDk3NiwwLiksXG52ZWMzKDAuNTA0NDQw
LDAuMzcyMjk1LDAuKSxcbnZlYzMoMC4xNTU3MzYsMC4wNjUxNTcsMC4pLFxudmVjMygwLjM5MTUy
MiwwLjg0OTYwNSwwLiksXG52ZWMzKC0wLjYyMDEwNiwtMC4zMjgxMDQsMC4pLFxudmVjMygwLjc4
OTIzOSwtMC40MTk5NjUsMC4pLFxudmVjMygtMC41NDUzOTYsMC41MzgxMzMsMC4pLFxudmVjMygt
MC4xNzg1NjQsLTAuNTk2MDU3LDAuKVxuKTtcblxuXG5cblxuXG5mbG9hdCBjb21wdXRlU2hhZG93
V2l0aFBDU1ModmVjNCB2UG9zaXRpb25Gcm9tTGlnaHQsZmxvYXQgZGVwdGhNZXRyaWMsc2FtcGxl
cjJEIGRlcHRoU2FtcGxlcixzYW1wbGVyMkRTaGFkb3cgc2hhZG93U2FtcGxlcixmbG9hdCBzaGFk
b3dNYXBTaXplSW52ZXJzZSxmbG9hdCBsaWdodFNpemVVVixmbG9hdCBkYXJrbmVzcyxmbG9hdCBm
cnVzdHVtRWRnZUZhbGxvZmYsaW50IHNlYXJjaFRhcENvdW50LGludCBwY2ZUYXBDb3VudCx2ZWMz
WzY0XSBwb2lzc29uU2FtcGxlcnMpXG57XG5pZiAoZGVwdGhNZXRyaWM+MS4wIHx8IGRlcHRoTWV0
cmljPDAuMCkge1xucmV0dXJuIDEuMDtcbn1cbnZlYzMgY2xpcFNwYWNlPXZQb3NpdGlvbkZyb21M
aWdodC54eXovdlBvc2l0aW9uRnJvbUxpZ2h0Lnc7XG52ZWMzIHV2RGVwdGg9dmVjMygwLjUqY2xp
cFNwYWNlLnh5eit2ZWMzKDAuNSkpO1xuZmxvYXQgYmxvY2tlckRlcHRoPTAuMDtcbmZsb2F0IHN1
bUJsb2NrZXJEZXB0aD0wLjA7XG5mbG9hdCBudW1CbG9ja2VyPTAuMDtcbmZvciAoaW50IGk9MDsg
aTxzZWFyY2hUYXBDb3VudDsgaSArKykge1xuYmxvY2tlckRlcHRoPXRleHR1cmUoZGVwdGhTYW1w
bGVyLHV2RGVwdGgueHkrKGxpZ2h0U2l6ZVVWKnNoYWRvd01hcFNpemVJbnZlcnNlKlBvaXNzb25T
YW1wbGVyczMyW2ldLnh5KSkucjtcbmlmIChibG9ja2VyRGVwdGg8ZGVwdGhNZXRyaWMpIHtcbnN1
bUJsb2NrZXJEZXB0aCs9YmxvY2tlckRlcHRoO1xubnVtQmxvY2tlcisrO1xufVxufVxuaWYgKG51
bUJsb2NrZXI8MS4wKSB7XG5yZXR1cm4gMS4wO1xufVxuZmxvYXQgYXZnQmxvY2tlckRlcHRoPXN1
bUJsb2NrZXJEZXB0aC9udW1CbG9ja2VyO1xuXG5mbG9hdCBBQU9mZnNldD1zaGFkb3dNYXBTaXpl
SW52ZXJzZSoxMC47XG5cblxuZmxvYXQgcGVudW1icmFSYXRpbz0oKGRlcHRoTWV0cmljLWF2Z0Js
b2NrZXJEZXB0aCkrQUFPZmZzZXQpO1xuZmxvYXQgZmlsdGVyUmFkaXVzPXBlbnVtYnJhUmF0aW8q
bGlnaHRTaXplVVYqc2hhZG93TWFwU2l6ZUludmVyc2U7XG5mbG9hdCByYW5kb209Z2V0UmFuZCh2
UG9zaXRpb25Gcm9tTGlnaHQueHkpO1xuZmxvYXQgcm90YXRpb25BbmdsZT1yYW5kb20qMy4xNDE1
OTI2O1xudmVjMiByb3RhdGlvblZlY3Rvcj12ZWMyKGNvcyhyb3RhdGlvbkFuZ2xlKSxzaW4ocm90
YXRpb25BbmdsZSkpO1xuZmxvYXQgc2hhZG93PTAuO1xuZm9yIChpbnQgaT0wOyBpPHBjZlRhcENv
dW50OyBpKyspIHtcbnZlYzMgb2Zmc2V0PXBvaXNzb25TYW1wbGVyc1tpXTtcblxub2Zmc2V0PXZl
YzMob2Zmc2V0Lngqcm90YXRpb25WZWN0b3IueC1vZmZzZXQueSpyb3RhdGlvblZlY3Rvci55LG9m
ZnNldC55KnJvdGF0aW9uVmVjdG9yLngrb2Zmc2V0Lngqcm90YXRpb25WZWN0b3IueSwwLik7XG5z
aGFkb3crPXRleHR1cmUyRChzaGFkb3dTYW1wbGVyLHV2RGVwdGgrb2Zmc2V0KmZpbHRlclJhZGl1
cyk7XG59XG5zaGFkb3cvPWZsb2F0KHBjZlRhcENvdW50KTtcblxuc2hhZG93PW1peChzaGFkb3cs
MS4sZGVwdGhNZXRyaWMtYXZnQmxvY2tlckRlcHRoKTtcblxuc2hhZG93PW1peChkYXJrbmVzcywx
LixzaGFkb3cpO1xuXG5yZXR1cm4gY29tcHV0ZUZhbGxPZmYoc2hhZG93LGNsaXBTcGFjZS54eSxm
cnVzdHVtRWRnZUZhbGxvZmYpO1xufVxuZmxvYXQgY29tcHV0ZVNoYWRvd1dpdGhQQ1NTMTYodmVj
NCB2UG9zaXRpb25Gcm9tTGlnaHQsZmxvYXQgZGVwdGhNZXRyaWMsc2FtcGxlcjJEIGRlcHRoU2Ft
cGxlcixzYW1wbGVyMkRTaGFkb3cgc2hhZG93U2FtcGxlcixmbG9hdCBzaGFkb3dNYXBTaXplSW52
ZXJzZSxmbG9hdCBsaWdodFNpemVVVixmbG9hdCBkYXJrbmVzcyxmbG9hdCBmcnVzdHVtRWRnZUZh
bGxvZmYpXG57XG5yZXR1cm4gY29tcHV0ZVNoYWRvd1dpdGhQQ1NTKHZQb3NpdGlvbkZyb21MaWdo
dCxkZXB0aE1ldHJpYyxkZXB0aFNhbXBsZXIsc2hhZG93U2FtcGxlcixzaGFkb3dNYXBTaXplSW52
ZXJzZSxsaWdodFNpemVVVixkYXJrbmVzcyxmcnVzdHVtRWRnZUZhbGxvZmYsMTYsMTYsUG9pc3Nv
blNhbXBsZXJzMzIpO1xufVxuZmxvYXQgY29tcHV0ZVNoYWRvd1dpdGhQQ1NTMzIodmVjNCB2UG9z
aXRpb25Gcm9tTGlnaHQsZmxvYXQgZGVwdGhNZXRyaWMsc2FtcGxlcjJEIGRlcHRoU2FtcGxlcixz
YW1wbGVyMkRTaGFkb3cgc2hhZG93U2FtcGxlcixmbG9hdCBzaGFkb3dNYXBTaXplSW52ZXJzZSxm
bG9hdCBsaWdodFNpemVVVixmbG9hdCBkYXJrbmVzcyxmbG9hdCBmcnVzdHVtRWRnZUZhbGxvZmYp
XG57XG5yZXR1cm4gY29tcHV0ZVNoYWRvd1dpdGhQQ1NTKHZQb3NpdGlvbkZyb21MaWdodCxkZXB0
aE1ldHJpYyxkZXB0aFNhbXBsZXIsc2hhZG93U2FtcGxlcixzaGFkb3dNYXBTaXplSW52ZXJzZSxs
aWdodFNpemVVVixkYXJrbmVzcyxmcnVzdHVtRWRnZUZhbGxvZmYsMTYsMzIsUG9pc3NvblNhbXBs
ZXJzMzIpO1xufVxuZmxvYXQgY29tcHV0ZVNoYWRvd1dpdGhQQ1NTNjQodmVjNCB2UG9zaXRpb25G
cm9tTGlnaHQsZmxvYXQgZGVwdGhNZXRyaWMsc2FtcGxlcjJEIGRlcHRoU2FtcGxlcixzYW1wbGVy
MkRTaGFkb3cgc2hhZG93U2FtcGxlcixmbG9hdCBzaGFkb3dNYXBTaXplSW52ZXJzZSxmbG9hdCBs
aWdodFNpemVVVixmbG9hdCBkYXJrbmVzcyxmbG9hdCBmcnVzdHVtRWRnZUZhbGxvZmYpXG57XG5y
ZXR1cm4gY29tcHV0ZVNoYWRvd1dpdGhQQ1NTKHZQb3NpdGlvbkZyb21MaWdodCxkZXB0aE1ldHJp
YyxkZXB0aFNhbXBsZXIsc2hhZG93U2FtcGxlcixzaGFkb3dNYXBTaXplSW52ZXJzZSxsaWdodFNp
emVVVixkYXJrbmVzcyxmcnVzdHVtRWRnZUZhbGxvZmYsMzIsNjQsUG9pc3NvblNhbXBsZXJzNjQp
O1xufVxuI2VuZGlmXG4jZW5kaWZcbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5JbmNsdWRlc1NoYWRlcnNTdG9yZVtuYW1lXSA9IHNo
YWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgc2hhZG93c0ZyYWdtZW50RnVuY3Rpb25zID0geyBu
YW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL3NoYWRvd3NWZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVy
cy9TaGFkZXJzSW5jbHVkZS9zaGFkb3dzVmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRl
ZDogc2hhZG93c1ZlcnRleCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4
cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJz
aGFkb3dzVmVydGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBzaGFkb3dzVmVydGV4OyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vTWF0ZXJpYWxzL2Vm
ZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3NoYWRvd3NW
ZXJ0ZXgnOwordmFyIHNoYWRlciA9ICIjaWZkZWYgU0hBRE9XU1xuI2lmIGRlZmluZWQoU0hBRE9X
e1h9KSAmJiAhZGVmaW5lZChTSEFET1dDVUJFe1h9KVxudlBvc2l0aW9uRnJvbUxpZ2h0e1h9PWxp
Z2h0TWF0cml4e1h9KndvcmxkUG9zO1xudkRlcHRoTWV0cmlje1h9PSgodlBvc2l0aW9uRnJvbUxp
Z2h0e1h9LnorbGlnaHR7WH0uZGVwdGhWYWx1ZXMueCkvKGxpZ2h0e1h9LmRlcHRoVmFsdWVzLnkp
KTtcbiNlbmRpZlxuI2VuZGlmIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkVmZmVjdCJdLkluY2x1ZGVzU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVy
OworLyoqIEBoaWRkZW4gKi8KK3ZhciBzaGFkb3dzVmVydGV4ID0geyBuYW1lOiBuYW1lLCBzaGFk
ZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2FuYWdseXBo
LmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ISpcCisgICEqKiogLi9TaGFkZXJzL2FuYWdseXBoLmZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IGFuYWdseXBoUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiYW5hZ2x5cGhQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYW5hZ2x5cGhQaXhl
bFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3Rf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4u
L01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFt
ZSA9ICdhbmFnbHlwaFBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG52YXJ5aW5nIHZlYzIg
dlVWO1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZVNhbXBsZXI7XG51bmlmb3JtIHNhbXBsZXIy
RCBsZWZ0U2FtcGxlcjtcbnZvaWQgbWFpbih2b2lkKVxue1xudmVjNCBsZWZ0RnJhZz10ZXh0dXJl
MkQobGVmdFNhbXBsZXIsdlVWKTtcbmxlZnRGcmFnPXZlYzQoMS4wLGxlZnRGcmFnLmcsbGVmdEZy
YWcuYiwxLjApO1xudmVjNCByaWdodEZyYWc9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7
XG5yaWdodEZyYWc9dmVjNChyaWdodEZyYWcuciwxLjAsMS4wLDEuMCk7XG5nbF9GcmFnQ29sb3I9
dmVjNChyaWdodEZyYWcucmdiKmxlZnRGcmFnLnJnYiwxLjApO1xufSI7CitfTWF0ZXJpYWxzX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVb
bmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGFuYWdseXBoUGl4ZWxTaGFkZXIg
PSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL1NoYWRlcnMvYmFja2dyb3VuZC5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL2JhY2tncm91bmQu
ZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBiYWNrZ3JvdW5kUGl4ZWxTaGFkZXIgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYmFja2dyb3VuZFBpeGVsU2hhZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBiYWNrZ3JvdW5kUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIu
L01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVy
c0luY2x1ZGVfYmFja2dyb3VuZEZyYWdtZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYmFj
a2dyb3VuZEZyYWdtZW50RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9i
YWNrZ3JvdW5kRnJhZ21lbnREZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzSW5jbHVkZV9iYWNrZ3JvdW5kVWJvRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1
ZGUvYmFja2dyb3VuZFVib0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
YmFja2dyb3VuZFVib0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNJbmNsdWRlX3JlZmxlY3Rpb25GdW5jdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9yZWZsZWN0
aW9uRnVuY3Rpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9yZWZsZWN0aW9uRnVuY3Rp
b24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW1hZ2VQ
cm9jZXNzaW5nRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRGVjbGFy
YXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbWFnZVByb2Nlc3NpbmdEZWNsYXJh
dGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9saWdo
dEZyYWdtZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbGlnaHRGcmFnbWVudERlY2xhcmF0
aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbGlnaHRGcmFnbWVudERlY2xhcmF0aW9u
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2xpZ2h0VWJv
RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbGlnaHRVYm9EZWNsYXJhdGlvbiAqLyAiLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0VWJvRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVscGVyRnVuY3Rpb25zX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNs
dWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1
bmN0aW9ucy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9s
aWdodHNGcmFnbWVudEZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9saWdodHNGcmFnbWVudEZ1bmN0
aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0c0ZyYWdtZW50RnVuY3Rpb25z
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3NoYWRvd3NG
cmFnbWVudEZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9zaGFkb3dzRnJhZ21lbnRGdW5jdGlvbnMg
Ki8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9zaGFkb3dzRnJhZ21lbnRGdW5jdGlvbnMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW1hZ2VQcm9jZXNz
aW5nRnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnMgKi8g
Ii4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnMudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfY2xpcFBsYW5lRnJhZ21l
bnREZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlv
biAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRp
b24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfZm9nRnJh
Z21lbnREZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvZm9nRnJhZ21lbnREZWNsYXJhdGlvbiAq
LyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ZvZ0ZyYWdtZW50RGVjbGFyYXRpb24udHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfY2xpcFBsYW5lRnJhZ21l
bnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZUZyYWdtZW50ICovICIuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvY2xpcFBsYW5lRnJhZ21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfU2hhZGVyc0luY2x1ZGVfbGlnaHRGcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbGlnaHRGcmFn
bWVudCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0RnJhZ21lbnQudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfZm9nRnJhZ21lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRl
cnNJbmNsdWRlL2ZvZ0ZyYWdtZW50ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZm9nRnJh
Z21lbnQudHMiKTsKKworCisKKworCisKKworCisKKworCisKKworCisKKwordmFyIG5hbWUgPSAn
YmFja2dyb3VuZFBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiI2lmZGVmIFRFWFRVUkVMT0RT
VVBQT1JUXG4jZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGVcbiNl
bmRpZlxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2luY2x1ZGU8X19kZWNsX19iYWNrZ3JvdW5k
RnJhZ21lbnQ+XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTRcblxudW5pZm9ybSB2
ZWMzIHZFeWVQb3NpdGlvbjtcblxudmFyeWluZyB2ZWMzIHZQb3NpdGlvblc7XG4jaWZkZWYgTUFJ
TlVWMVxudmFyeWluZyB2ZWMyIHZNYWluVVYxO1xuI2VuZGlmXG4jaWZkZWYgTUFJTlVWMlxudmFy
eWluZyB2ZWMyIHZNYWluVVYyO1xuI2VuZGlmXG4jaWZkZWYgTk9STUFMXG52YXJ5aW5nIHZlYzMg
dk5vcm1hbFc7XG4jZW5kaWZcbiNpZmRlZiBESUZGVVNFXG4jaWYgRElGRlVTRURJUkVDVFVWID09
IDFcbiNkZWZpbmUgdkRpZmZ1c2VVViB2TWFpblVWMVxuI2VsaWYgRElGRlVTRURJUkVDVFVWID09
IDJcbiNkZWZpbmUgdkRpZmZ1c2VVViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcgdmVjMiB2RGlm
ZnVzZVVWO1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlU2FtcGxlcjtcbiNlbmRp
ZlxuXG4jaWZkZWYgUkVGTEVDVElPTlxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfM0RcbiNkZWZpbmUg
c2FtcGxlUmVmbGVjdGlvbihzLGMpIHRleHR1cmVDdWJlKHMsYylcbnVuaWZvcm0gc2FtcGxlckN1
YmUgcmVmbGVjdGlvblNhbXBsZXI7XG4jaWZkZWYgVEVYVFVSRUxPRFNVUFBPUlRcbiNkZWZpbmUg
c2FtcGxlUmVmbGVjdGlvbkxvZChzLGMsbCkgdGV4dHVyZUN1YmVMb2RFWFQocyxjLGwpXG4jZWxz
ZVxudW5pZm9ybSBzYW1wbGVyQ3ViZSByZWZsZWN0aW9uU2FtcGxlckxvdztcbnVuaWZvcm0gc2Ft
cGxlckN1YmUgcmVmbGVjdGlvblNhbXBsZXJIaWdoO1xuI2VuZGlmXG4jZWxzZVxuI2RlZmluZSBz
YW1wbGVSZWZsZWN0aW9uKHMsYykgdGV4dHVyZTJEKHMsYylcbnVuaWZvcm0gc2FtcGxlcjJEIHJl
ZmxlY3Rpb25TYW1wbGVyO1xuI2lmZGVmIFRFWFRVUkVMT0RTVVBQT1JUXG4jZGVmaW5lIHNhbXBs
ZVJlZmxlY3Rpb25Mb2QocyxjLGwpIHRleHR1cmUyRExvZEVYVChzLGMsbClcbiNlbHNlXG51bmlm
b3JtIHNhbXBsZXJDdWJlIHJlZmxlY3Rpb25TYW1wbGVyTG93O1xudW5pZm9ybSBzYW1wbGVyQ3Vi
ZSByZWZsZWN0aW9uU2FtcGxlckhpZ2g7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJ
T05NQVBfU0tZQk9YXG52YXJ5aW5nIHZlYzMgdlBvc2l0aW9uVVZXO1xuI2Vsc2VcbiNpZiBkZWZp
bmVkKFJFRkxFQ1RJT05NQVBfRVFVSVJFQ1RBTkdVTEFSX0ZJWEVEKSB8fCBkZWZpbmVkKFJFRkxF
Q1RJT05NQVBfTUlSUk9SRURFUVVJUkVDVEFOR1VMQVJfRklYRUQpXG52YXJ5aW5nIHZlYzMgdkRp
cmVjdGlvblc7XG4jZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGU8cmVmbGVjdGlvbkZ1bmN0aW9uPlxu
I2VuZGlmXG5cbiNpZm5kZWYgRlJPTUxJTkVBUlNQQUNFXG4jZGVmaW5lIEZST01MSU5FQVJTUEFD
RTtcbiNlbmRpZlxuXG4jaWZuZGVmIFNIQURPV09OTFlcbiNkZWZpbmUgU0hBRE9XT05MWTtcbiNl
bmRpZlxuI2luY2x1ZGU8aW1hZ2VQcm9jZXNzaW5nRGVjbGFyYXRpb24+XG5cbiNpbmNsdWRlPF9f
ZGVjbF9fbGlnaHRGcmFnbWVudD5bMC4ubWF4U2ltdWx0YW5lb3VzTGlnaHRzXVxuI2luY2x1ZGU8
aGVscGVyRnVuY3Rpb25zPlxuI2luY2x1ZGU8bGlnaHRzRnJhZ21lbnRGdW5jdGlvbnM+XG4jaW5j
bHVkZTxzaGFkb3dzRnJhZ21lbnRGdW5jdGlvbnM+XG4jaW5jbHVkZTxpbWFnZVByb2Nlc3NpbmdG
dW5jdGlvbnM+XG4jaW5jbHVkZTxjbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uPlxuXG4jaW5j
bHVkZTxmb2dGcmFnbWVudERlY2xhcmF0aW9uPlxuI2lmZGVmIFJFRkxFQ1RJT05GUkVTTkVMXG4j
ZGVmaW5lIEZSRVNORUxfTUFYSU1VTV9PTl9ST1VHSCAwLjI1XG52ZWMzIGZyZXNuZWxTY2hsaWNr
RW52aXJvbm1lbnRHR1goZmxvYXQgVmRvdE4sdmVjMyByZWZsZWN0YW5jZTAsdmVjMyByZWZsZWN0
YW5jZTkwLGZsb2F0IHNtb290aG5lc3MpXG57XG5cbmZsb2F0IHdlaWdodD1taXgoRlJFU05FTF9N
QVhJTVVNX09OX1JPVUdILDEuMCxzbW9vdGhuZXNzKTtcbnJldHVybiByZWZsZWN0YW5jZTArd2Vp
Z2h0KihyZWZsZWN0YW5jZTkwLXJlZmxlY3RhbmNlMCkqcG93NShzYXR1cmF0ZSgxLjAtVmRvdE4p
KTtcbn1cbiNlbmRpZlxudm9pZCBtYWluKHZvaWQpIHtcbiNpbmNsdWRlPGNsaXBQbGFuZUZyYWdt
ZW50PlxudmVjMyB2aWV3RGlyZWN0aW9uVz1ub3JtYWxpemUodkV5ZVBvc2l0aW9uLXZQb3NpdGlv
blcpO1xuXG4jaWZkZWYgTk9STUFMXG52ZWMzIG5vcm1hbFc9bm9ybWFsaXplKHZOb3JtYWxXKTtc
biNlbHNlXG52ZWMzIG5vcm1hbFc9dmVjMygwLjAsMS4wLDAuMCk7XG4jZW5kaWZcblxuZmxvYXQg
c2hhZG93PTEuO1xuZmxvYXQgZ2xvYmFsU2hhZG93PTAuO1xuZmxvYXQgc2hhZG93TGlnaHRDb3Vu
dD0wLjtcbiNpbmNsdWRlPGxpZ2h0RnJhZ21lbnQ+WzAuLm1heFNpbXVsdGFuZW91c0xpZ2h0c11c
biNpZmRlZiBTSEFET1dJTlVTRVxuZ2xvYmFsU2hhZG93Lz1zaGFkb3dMaWdodENvdW50O1xuI2Vs
c2Vcbmdsb2JhbFNoYWRvdz0xLjA7XG4jZW5kaWZcblxudmVjNCByZWZsZWN0aW9uQ29sb3I9dmVj
NCgxLiwxLiwxLiwxLik7XG4jaWZkZWYgUkVGTEVDVElPTlxudmVjMyByZWZsZWN0aW9uVmVjdG9y
PWNvbXB1dGVSZWZsZWN0aW9uQ29vcmRzKHZlYzQodlBvc2l0aW9uVywxLjApLG5vcm1hbFcpO1xu
I2lmZGVmIFJFRkxFQ1RJT05NQVBfT1BQT1NJVEVaXG5yZWZsZWN0aW9uVmVjdG9yLnoqPS0xLjA7
XG4jZW5kaWZcblxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfM0RcbnZlYzMgcmVmbGVjdGlvbkNvb3Jk
cz1yZWZsZWN0aW9uVmVjdG9yO1xuI2Vsc2VcbnZlYzIgcmVmbGVjdGlvbkNvb3Jkcz1yZWZsZWN0
aW9uVmVjdG9yLnh5O1xuI2lmZGVmIFJFRkxFQ1RJT05NQVBfUFJPSkVDVElPTlxucmVmbGVjdGlv
bkNvb3Jkcy89cmVmbGVjdGlvblZlY3Rvci56O1xuI2VuZGlmXG5yZWZsZWN0aW9uQ29vcmRzLnk9
MS4wLXJlZmxlY3Rpb25Db29yZHMueTtcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJT05CTFVSXG5m
bG9hdCByZWZsZWN0aW9uTE9EPXZSZWZsZWN0aW9uSW5mb3MueTtcbiNpZmRlZiBURVhUVVJFTE9E
U1VQUE9SVFxuXG5yZWZsZWN0aW9uTE9EPXJlZmxlY3Rpb25MT0QqbG9nMih2UmVmbGVjdGlvbk1p
Y3Jvc3VyZmFjZUluZm9zLngpKnZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueSt2UmVmbGVj
dGlvbk1pY3Jvc3VyZmFjZUluZm9zLno7XG5yZWZsZWN0aW9uQ29sb3I9c2FtcGxlUmVmbGVjdGlv
bkxvZChyZWZsZWN0aW9uU2FtcGxlcixyZWZsZWN0aW9uQ29vcmRzLHJlZmxlY3Rpb25MT0QpO1xu
I2Vsc2VcbmZsb2F0IGxvZFJlZmxlY3Rpb25Ob3JtYWxpemVkPXNhdHVyYXRlKHJlZmxlY3Rpb25M
T0QpO1xuZmxvYXQgbG9kUmVmbGVjdGlvbk5vcm1hbGl6ZWREb3VibGVkPWxvZFJlZmxlY3Rpb25O
b3JtYWxpemVkKjIuMDtcbnZlYzQgcmVmbGVjdGlvblNwZWN1bGFyTWlkPXNhbXBsZVJlZmxlY3Rp
b24ocmVmbGVjdGlvblNhbXBsZXIscmVmbGVjdGlvbkNvb3Jkcyk7XG5pZihsb2RSZWZsZWN0aW9u
Tm9ybWFsaXplZERvdWJsZWQ8MS4wKXtcbnJlZmxlY3Rpb25Db2xvcj1taXgoXG5zYW1wbGVSZWZs
ZWN0aW9uKHJlZmxlY3Rpb25TYW1wbGVySGlnaCxyZWZsZWN0aW9uQ29vcmRzKSxcbnJlZmxlY3Rp
b25TcGVjdWxhck1pZCxcbmxvZFJlZmxlY3Rpb25Ob3JtYWxpemVkRG91YmxlZFxuKTtcbn0gZWxz
ZSB7XG5yZWZsZWN0aW9uQ29sb3I9bWl4KFxucmVmbGVjdGlvblNwZWN1bGFyTWlkLFxuc2FtcGxl
UmVmbGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlckxvdyxyZWZsZWN0aW9uQ29vcmRzKSxcbmxvZFJl
ZmxlY3Rpb25Ob3JtYWxpemVkRG91YmxlZC0xLjBcbik7XG59XG4jZW5kaWZcbiNlbHNlXG52ZWM0
IHJlZmxlY3Rpb25TYW1wbGU9c2FtcGxlUmVmbGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlcixyZWZs
ZWN0aW9uQ29vcmRzKTtcbnJlZmxlY3Rpb25Db2xvcj1yZWZsZWN0aW9uU2FtcGxlO1xuI2VuZGlm
XG4jaWZkZWYgUkdCRFJFRkxFQ1RJT05cbnJlZmxlY3Rpb25Db2xvci5yZ2I9ZnJvbVJHQkQocmVm
bGVjdGlvbkNvbG9yKTtcbiNlbmRpZlxuI2lmZGVmIEdBTU1BUkVGTEVDVElPTlxucmVmbGVjdGlv
bkNvbG9yLnJnYj10b0xpbmVhclNwYWNlKHJlZmxlY3Rpb25Db2xvci5yZ2IpO1xuI2VuZGlmXG4j
aWZkZWYgUkVGTEVDVElPTkJHUlxucmVmbGVjdGlvbkNvbG9yLnJnYj1yZWZsZWN0aW9uQ29sb3Iu
YmdyO1xuI2VuZGlmXG5cbnJlZmxlY3Rpb25Db2xvci5yZ2IqPXZSZWZsZWN0aW9uSW5mb3MueDtc
biNlbmRpZlxuXG52ZWMzIGRpZmZ1c2VDb2xvcj12ZWMzKDEuLDEuLDEuKTtcbmZsb2F0IGZpbmFs
QWxwaGE9YWxwaGE7XG4jaWZkZWYgRElGRlVTRVxudmVjNCBkaWZmdXNlTWFwPXRleHR1cmUyRChk
aWZmdXNlU2FtcGxlcix2RGlmZnVzZVVWKTtcbiNpZmRlZiBHQU1NQURJRkZVU0VcbmRpZmZ1c2VN
YXAucmdiPXRvTGluZWFyU3BhY2UoZGlmZnVzZU1hcC5yZ2IpO1xuI2VuZGlmXG5cbmRpZmZ1c2VN
YXAucmdiKj12RGlmZnVzZUluZm9zLnk7XG4jaWZkZWYgRElGRlVTRUhBU0FMUEhBXG5maW5hbEFs
cGhhKj1kaWZmdXNlTWFwLmE7XG4jZW5kaWZcbmRpZmZ1c2VDb2xvcj1kaWZmdXNlTWFwLnJnYjtc
biNlbmRpZlxuXG4jaWZkZWYgUkVGTEVDVElPTkZSRVNORUxcbnZlYzMgY29sb3JCYXNlPWRpZmZ1
c2VDb2xvcjtcbiNlbHNlXG52ZWMzIGNvbG9yQmFzZT1yZWZsZWN0aW9uQ29sb3IucmdiKmRpZmZ1
c2VDb2xvcjtcbiNlbmRpZlxuY29sb3JCYXNlPW1heChjb2xvckJhc2UsMC4wKTtcblxuI2lmZGVm
IFVTRVJHQkNPTE9SXG52ZWMzIGZpbmFsQ29sb3I9Y29sb3JCYXNlO1xuI2Vsc2VcbiNpZmRlZiBV
U0VISUdITElHSFRBTkRTSEFET1dDT0xPUlNcbnZlYzMgbWFpbkNvbG9yPW1peCh2UHJpbWFyeUNv
bG9yU2hhZG93LnJnYix2UHJpbWFyeUNvbG9yLnJnYixjb2xvckJhc2UpO1xuI2Vsc2VcbnZlYzMg
bWFpbkNvbG9yPXZQcmltYXJ5Q29sb3IucmdiO1xuI2VuZGlmXG52ZWMzIGZpbmFsQ29sb3I9Y29s
b3JCYXNlKm1haW5Db2xvcjtcbiNlbmRpZlxuXG4jaWZkZWYgUkVGTEVDVElPTkZSRVNORUxcbnZl
YzMgcmVmbGVjdGlvbkFtb3VudD12UmVmbGVjdGlvbkNvbnRyb2wueHh4O1xudmVjMyByZWZsZWN0
aW9uUmVmbGVjdGFuY2UwPXZSZWZsZWN0aW9uQ29udHJvbC55eXk7XG52ZWMzIHJlZmxlY3Rpb25S
ZWZsZWN0YW5jZTkwPXZSZWZsZWN0aW9uQ29udHJvbC56eno7XG5mbG9hdCBWZG90Tj1kb3Qobm9y
bWFsaXplKHZFeWVQb3NpdGlvbiksbm9ybWFsVyk7XG52ZWMzIHBsYW5hclJlZmxlY3Rpb25GcmVz
bmVsPWZyZXNuZWxTY2hsaWNrRW52aXJvbm1lbnRHR1goc2F0dXJhdGUoVmRvdE4pLHJlZmxlY3Rp
b25SZWZsZWN0YW5jZTAscmVmbGVjdGlvblJlZmxlY3RhbmNlOTAsMS4wKTtcbnJlZmxlY3Rpb25B
bW91bnQqPXBsYW5hclJlZmxlY3Rpb25GcmVzbmVsO1xuI2lmZGVmIFJFRkxFQ1RJT05GQUxMT0ZG
XG5mbG9hdCByZWZsZWN0aW9uRGlzdGFuY2VGYWxsb2ZmPTEuMC1zYXR1cmF0ZShsZW5ndGgodlBv
c2l0aW9uVy54eXotdkJhY2tncm91bmRDZW50ZXIpKnZSZWZsZWN0aW9uQ29udHJvbC53KTtcbnJl
ZmxlY3Rpb25EaXN0YW5jZUZhbGxvZmYqPXJlZmxlY3Rpb25EaXN0YW5jZUZhbGxvZmY7XG5yZWZs
ZWN0aW9uQW1vdW50Kj1yZWZsZWN0aW9uRGlzdGFuY2VGYWxsb2ZmO1xuI2VuZGlmXG5maW5hbENv
bG9yPW1peChmaW5hbENvbG9yLHJlZmxlY3Rpb25Db2xvci5yZ2Isc2F0dXJhdGUocmVmbGVjdGlv
bkFtb3VudCkpO1xuI2VuZGlmXG4jaWZkZWYgT1BBQ0lUWUZSRVNORUxcbmZsb2F0IHZpZXdBbmds
ZVRvRmxvb3I9ZG90KG5vcm1hbFcsbm9ybWFsaXplKHZFeWVQb3NpdGlvbi12QmFja2dyb3VuZENl
bnRlcikpO1xuXG5jb25zdCBmbG9hdCBzdGFydEFuZ2xlPTAuMTtcbmZsb2F0IGZhZGVGYWN0b3I9
c2F0dXJhdGUodmlld0FuZ2xlVG9GbG9vci9zdGFydEFuZ2xlKTtcbmZpbmFsQWxwaGEqPWZhZGVG
YWN0b3IqZmFkZUZhY3RvcjtcbiNlbmRpZlxuXG4jaWZkZWYgU0hBRE9XSU5VU0VcbmZpbmFsQ29s
b3I9bWl4KGZpbmFsQ29sb3Iqc2hhZG93TGV2ZWwsZmluYWxDb2xvcixnbG9iYWxTaGFkb3cpO1xu
I2VuZGlmXG5cbnZlYzQgY29sb3I9dmVjNChmaW5hbENvbG9yLGZpbmFsQWxwaGEpO1xuI2luY2x1
ZGU8Zm9nRnJhZ21lbnQ+XG4jaWZkZWYgSU1BR0VQUk9DRVNTSU5HUE9TVFBST0NFU1NcblxuXG5j
b2xvci5yZ2I9Y2xhbXAoY29sb3IucmdiLDAuLDMwLjApO1xuI2Vsc2VcblxuY29sb3I9YXBwbHlJ
bWFnZVByb2Nlc3NpbmcoY29sb3IpO1xuI2VuZGlmXG4jaWZkZWYgUFJFTVVMVElQTFlBTFBIQVxu
XG5jb2xvci5yZ2IqPWNvbG9yLmE7XG4jZW5kaWZcbiNpZmRlZiBOT0lTRVxuY29sb3IucmdiKz1k
aXRoZXIodlBvc2l0aW9uVy54eSwwLjUpO1xuY29sb3I9bWF4KGNvbG9yLDAuMCk7XG4jZW5kaWZc
bmdsX0ZyYWdDb2xvcj1jb2xvcjtcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7
CisvKiogQGhpZGRlbiAqLwordmFyIGJhY2tncm91bmRQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFt
ZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9i
YWNrZ3JvdW5kLnZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9iYWNrZ3JvdW5kLnZlcnRleC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBiYWNrZ3JvdW5kVmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgImJhY2tncm91bmRWZXJ0ZXhTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGJhY2tncm91bmRWZXJ0ZXhTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9N
YXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3Qu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYmFja2dyb3Vu
ZFZlcnRleERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2JhY2tncm91bmRWZXJ0ZXhEZWNsYXJh
dGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2JhY2tncm91bmRWZXJ0ZXhEZWNsYXJh
dGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9iYWNr
Z3JvdW5kVWJvRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYmFja2dyb3VuZFVib0RlY2xhcmF0
aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYmFja2dyb3VuZFVib0RlY2xhcmF0aW9u
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2hlbHBlckZ1
bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMgKi8gIi4vU2hhZGVycy9TaGFk
ZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9ib25lc0Rl
Y2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYm9uZXNEZWNsYXJhdGlvbi50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbnN0YW5jZXNE
ZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNEZWNsYXJhdGlvbiAqLyAiLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMv
U2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfZm9nVmVydGV4RGVjbGFyYXRpb25fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hh
ZGVyc0luY2x1ZGUvZm9nVmVydGV4RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9mb2dWZXJ0ZXhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9TaGFkZXJzSW5jbHVkZV9saWdodEZyYWdtZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUv
bGlnaHRGcmFnbWVudERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbGln
aHRGcmFnbWVudERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1No
YWRlcnNJbmNsdWRlX2xpZ2h0VWJvRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbGlnaHRVYm9E
ZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0VWJvRGVjbGFyYXRp
b24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW5zdGFu
Y2VzVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXggKi8gIi4vU2hhZGVycy9T
aGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2JvbmVzVmVy
dGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYm9uZXNWZXJ0ZXgudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfY2xpcFBsYW5lVmVydGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFk
ZXJzSW5jbHVkZS9jbGlwUGxhbmVWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9j
bGlwUGxhbmVWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0lu
Y2x1ZGVfZm9nVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9mb2dWZXJ0ZXggKi8gIi4vU2hhZGVycy9T
aGFkZXJzSW5jbHVkZS9mb2dWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
U2hhZGVyc0luY2x1ZGVfc2hhZG93c1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvc2hhZG93c1ZlcnRl
eCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3NoYWRvd3NWZXJ0ZXgudHMiKTsKKworCisK
KworCisKKworCisKKworCisKKworCisKK3ZhciBuYW1lID0gJ2JhY2tncm91bmRWZXJ0ZXhTaGFk
ZXInOwordmFyIHNoYWRlciA9ICJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jaW5jbHVkZTxfX2Rl
Y2xfX2JhY2tncm91bmRWZXJ0ZXg+XG4jaW5jbHVkZTxoZWxwZXJGdW5jdGlvbnM+XG5cbmF0dHJp
YnV0ZSB2ZWMzIHBvc2l0aW9uO1xuI2lmZGVmIE5PUk1BTFxuYXR0cmlidXRlIHZlYzMgbm9ybWFs
O1xuI2VuZGlmXG4jaW5jbHVkZTxib25lc0RlY2xhcmF0aW9uPlxuXG4jaW5jbHVkZTxpbnN0YW5j
ZXNEZWNsYXJhdGlvbj5cblxudmFyeWluZyB2ZWMzIHZQb3NpdGlvblc7XG4jaWZkZWYgTk9STUFM
XG52YXJ5aW5nIHZlYzMgdk5vcm1hbFc7XG4jZW5kaWZcbiNpZmRlZiBVVjFcbmF0dHJpYnV0ZSB2
ZWMyIHV2O1xuI2VuZGlmXG4jaWZkZWYgVVYyXG5hdHRyaWJ1dGUgdmVjMiB1djI7XG4jZW5kaWZc
biNpZmRlZiBNQUlOVVYxXG52YXJ5aW5nIHZlYzIgdk1haW5VVjE7XG4jZW5kaWZcbiNpZmRlZiBN
QUlOVVYyXG52YXJ5aW5nIHZlYzIgdk1haW5VVjI7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKERJRkZV
U0UpICYmIERJRkZVU0VESVJFQ1RVViA9PSAwXG52YXJ5aW5nIHZlYzIgdkRpZmZ1c2VVVjtcbiNl
bmRpZlxuI2luY2x1ZGU8Y2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb24+XG4jaW5jbHVkZTxmb2dW
ZXJ0ZXhEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPF9fZGVjbF9fbGlnaHRGcmFnbWVudD5bMC4ubWF4
U2ltdWx0YW5lb3VzTGlnaHRzXVxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfU0tZQk9YXG52YXJ5aW5n
IHZlYzMgdlBvc2l0aW9uVVZXO1xuI2VuZGlmXG4jaWYgZGVmaW5lZChSRUZMRUNUSU9OTUFQX0VR
VUlSRUNUQU5HVUxBUl9GSVhFRCkgfHwgZGVmaW5lZChSRUZMRUNUSU9OTUFQX01JUlJPUkVERVFV
SVJFQ1RBTkdVTEFSX0ZJWEVEKVxudmFyeWluZyB2ZWMzIHZEaXJlY3Rpb25XO1xuI2VuZGlmXG52
b2lkIG1haW4odm9pZCkge1xuI2lmZGVmIFJFRkxFQ1RJT05NQVBfU0tZQk9YXG4jaWZkZWYgUkVG
TEVDVElPTk1BUF9TS1lCT1hfVFJBTlNGT1JNRURcbnZQb3NpdGlvblVWVz0ocmVmbGVjdGlvbk1h
dHJpeCp2ZWM0KHBvc2l0aW9uLDEuMCkpLnh5ejtcbiNlbHNlXG52UG9zaXRpb25VVlc9cG9zaXRp
b247XG4jZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGU8aW5zdGFuY2VzVmVydGV4PlxuI2luY2x1ZGU8
Ym9uZXNWZXJ0ZXg+XG4jaWZkZWYgTVVMVElWSUVXXG5pZiAoZ2xfVmlld0lEX09WUiA9PSAwdSkg
e1xuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb24qZmluYWxXb3JsZCp2ZWM0KHBvc2l0aW9uLDEu
MCk7XG59IGVsc2Uge1xuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb25SKmZpbmFsV29ybGQqdmVj
NChwb3NpdGlvbiwxLjApO1xufVxuI2Vsc2VcbmdsX1Bvc2l0aW9uPXZpZXdQcm9qZWN0aW9uKmZp
bmFsV29ybGQqdmVjNChwb3NpdGlvbiwxLjApO1xuI2VuZGlmXG52ZWM0IHdvcmxkUG9zPWZpbmFs
V29ybGQqdmVjNChwb3NpdGlvbiwxLjApO1xudlBvc2l0aW9uVz12ZWMzKHdvcmxkUG9zKTtcbiNp
ZmRlZiBOT1JNQUxcbm1hdDMgbm9ybWFsV29ybGQ9bWF0MyhmaW5hbFdvcmxkKTtcbiNpZmRlZiBO
T05VTklGT1JNU0NBTElOR1xubm9ybWFsV29ybGQ9dHJhbnNwb3NlTWF0MyhpbnZlcnNlTWF0Myhu
b3JtYWxXb3JsZCkpO1xuI2VuZGlmXG52Tm9ybWFsVz1ub3JtYWxpemUobm9ybWFsV29ybGQqbm9y
bWFsKTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoUkVGTEVDVElPTk1BUF9FUVVJUkVDVEFOR1VMQVJf
RklYRUQpIHx8IGRlZmluZWQoUkVGTEVDVElPTk1BUF9NSVJST1JFREVRVUlSRUNUQU5HVUxBUl9G
SVhFRClcbnZEaXJlY3Rpb25XPW5vcm1hbGl6ZSh2ZWMzKGZpbmFsV29ybGQqdmVjNChwb3NpdGlv
biwwLjApKSk7XG4jaWZkZWYgRVFVSVJFQ1RBTkdVTEFSX1JFTEZFQ1RJT05fRk9WXG5tYXQzIHNj
cmVlblRvV29ybGQ9aW52ZXJzZU1hdDMobWF0MyhmaW5hbFdvcmxkKnZpZXdQcm9qZWN0aW9uKSk7
XG52ZWMzIHNlZ21lbnQ9bWl4KHZEaXJlY3Rpb25XLHNjcmVlblRvV29ybGQqdmVjMygwLjAsMC4w
LDEuMCksYWJzKGZGb3ZNdWx0aXBsaWVyLTEuMCkpO1xuaWYgKGZGb3ZNdWx0aXBsaWVyPD0xLjAp
IHtcbnZEaXJlY3Rpb25XPW5vcm1hbGl6ZShzZWdtZW50KTtcbn0gZWxzZSB7XG52RGlyZWN0aW9u
Vz1ub3JtYWxpemUodkRpcmVjdGlvblcrKHZEaXJlY3Rpb25XLXNlZ21lbnQpKTtcbn1cbiNlbmRp
ZlxuI2VuZGlmXG4jaWZuZGVmIFVWMVxudmVjMiB1dj12ZWMyKDAuLDAuKTtcbiNlbmRpZlxuI2lm
bmRlZiBVVjJcbnZlYzIgdXYyPXZlYzIoMC4sMC4pO1xuI2VuZGlmXG4jaWZkZWYgTUFJTlVWMVxu
dk1haW5VVjE9dXY7XG4jZW5kaWZcbiNpZmRlZiBNQUlOVVYyXG52TWFpblVWMj11djI7XG4jZW5k
aWZcbiNpZiBkZWZpbmVkKERJRkZVU0UpICYmIERJRkZVU0VESVJFQ1RVViA9PSAwXG5pZiAodkRp
ZmZ1c2VJbmZvcy54ID09IDAuKVxue1xudkRpZmZ1c2VVVj12ZWMyKGRpZmZ1c2VNYXRyaXgqdmVj
NCh1diwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52RGlmZnVzZVVWPXZlYzIoZGlmZnVzZU1hdHJp
eCp2ZWM0KHV2MiwxLjAsMC4wKSk7XG59XG4jZW5kaWZcblxuI2luY2x1ZGU8Y2xpcFBsYW5lVmVy
dGV4PlxuXG4jaW5jbHVkZTxmb2dWZXJ0ZXg+XG5cbiNpbmNsdWRlPHNoYWRvd3NWZXJ0ZXg+WzAu
Lm1heFNpbXVsdGFuZW91c0xpZ2h0c11cblxuI2lmZGVmIFZFUlRFWENPTE9SXG52Q29sb3I9Y29s
b3I7XG4jZW5kaWZcblxuI2lmZGVmIFBPSU5UU0laRVxuZ2xfUG9pbnRTaXplPXBvaW50U2l6ZTtc
biNlbmRpZlxufVxuIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVu
ICovCit2YXIgYmFja2dyb3VuZFZlcnRleFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBz
aGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9ibGFja0FuZFdoaXRl
LmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvYmxhY2tBbmRXaGl0ZS5mcmFnbWVudC50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IGJsYWNrQW5kV2hpdGVQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJibGFja0FuZFdoaXRlUGl4ZWxTaGFkZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIGJsYWNrQW5kV2hpdGVQaXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0
ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdibGFja0FuZFdoaXRlUGl4ZWxTaGFk
ZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIy
RCB0ZXh0dXJlU2FtcGxlcjtcbnVuaWZvcm0gZmxvYXQgZGVncmVlO1xudm9pZCBtYWluKHZvaWQp
XG57XG52ZWMzIGNvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpLnJnYjtcbmZsb2F0
IGx1bWluYW5jZT1kb3QoY29sb3IsdmVjMygwLjMsMC41OSwwLjExKSk7XG52ZWMzIGJsYWNrQW5k
V2hpdGU9dmVjMyhsdW1pbmFuY2UsbHVtaW5hbmNlLGx1bWluYW5jZSk7XG5nbF9GcmFnQ29sb3I9
dmVjNChjb2xvci0oKGNvbG9yLWJsYWNrQW5kV2hpdGUpKmRlZ3JlZSksMS4wKTtcbn0iOworX01h
dGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hh
ZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBibGFja0FuZFdo
aXRlUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvYmxvb21NZXJnZS5mcmFnbWVudC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFk
ZXJzL2Jsb29tTWVyZ2UuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBibG9vbU1lcmdlUGl4
ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYmxvb21NZXJn
ZVBpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBibG9vbU1lcmdlUGl4ZWxTaGFkZXI7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlh
bHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnYmxv
b21NZXJnZVBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAidW5pZm9ybSBzYW1wbGVyMkQgdGV4
dHVyZVNhbXBsZXI7XG51bmlmb3JtIHNhbXBsZXIyRCBibG9vbUJsdXI7XG52YXJ5aW5nIHZlYzIg
dlVWO1xudW5pZm9ybSBmbG9hdCBibG9vbVdlaWdodDtcbnZvaWQgbWFpbih2b2lkKVxue1xuZ2xf
RnJhZ0NvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xudmVjMyBibHVycmVkPXRl
eHR1cmUyRChibG9vbUJsdXIsdlVWKS5yZ2I7XG5nbF9GcmFnQ29sb3IucmdiPWdsX0ZyYWdDb2xv
ci5yZ2IrKGJsdXJyZWQucmdiKmJsb29tV2VpZ2h0KTtcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGJsb29tTWVyZ2VQaXhlbFNoYWRlciA9
IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vU2hhZGVycy9jaHJvbWF0aWNBYmVycmF0aW9uLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1No
YWRlcnMvY2hyb21hdGljQWJlcnJhdGlvbi5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IGNocm9tYXRpY0FiZXJyYXRpb25QaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJjaHJvbWF0aWNBYmVycmF0aW9uUGl4ZWxTaGFkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIGNocm9tYXRpY0FiZXJyYXRpb25QaXhlbFNoYWRlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdjaHJvbWF0aWNBYmVy
cmF0aW9uUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnVuaWZvcm0gc2FtcGxlcjJEIHRl
eHR1cmVTYW1wbGVyO1xuXG51bmlmb3JtIGZsb2F0IGNocm9tYXRpY19hYmVycmF0aW9uO1xudW5p
Zm9ybSBmbG9hdCByYWRpYWxJbnRlbnNpdHk7XG51bmlmb3JtIHZlYzIgZGlyZWN0aW9uO1xudW5p
Zm9ybSB2ZWMyIGNlbnRlclBvc2l0aW9uO1xudW5pZm9ybSBmbG9hdCBzY3JlZW5fd2lkdGg7XG51
bmlmb3JtIGZsb2F0IHNjcmVlbl9oZWlnaHQ7XG5cbnZhcnlpbmcgdmVjMiB2VVY7XG52b2lkIG1h
aW4odm9pZClcbntcbnZlYzIgY2VudGVyZWRfc2NyZWVuX3Bvcz12ZWMyKHZVVi54LWNlbnRlclBv
c2l0aW9uLngsdlVWLnktY2VudGVyUG9zaXRpb24ueSk7XG52ZWMyIGRpcmVjdGlvbk9mRWZmZWN0
PWRpcmVjdGlvbjtcbmlmKGRpcmVjdGlvbk9mRWZmZWN0LnggPT0gMC4gJiYgZGlyZWN0aW9uT2ZF
ZmZlY3QueSA9PSAwLil7XG5kaXJlY3Rpb25PZkVmZmVjdD1ub3JtYWxpemUoY2VudGVyZWRfc2Ny
ZWVuX3Bvcyk7XG59XG5mbG9hdCByYWRpdXMyPWNlbnRlcmVkX3NjcmVlbl9wb3MueCpjZW50ZXJl
ZF9zY3JlZW5fcG9zLnhcbitjZW50ZXJlZF9zY3JlZW5fcG9zLnkqY2VudGVyZWRfc2NyZWVuX3Bv
cy55O1xuZmxvYXQgcmFkaXVzPXNxcnQocmFkaXVzMik7XG52ZWM0IG9yaWdpbmFsPXRleHR1cmUy
RCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xuXG52ZWMzIHJlZl9pbmRpY2VzPXZlYzMoLTAuMywwLjAs
MC4zKTtcbmZsb2F0IHJlZl9zaGlmdFg9Y2hyb21hdGljX2FiZXJyYXRpb24qcG93KHJhZGl1cyxy
YWRpYWxJbnRlbnNpdHkpKmRpcmVjdGlvbk9mRWZmZWN0Lngvc2NyZWVuX3dpZHRoO1xuZmxvYXQg
cmVmX3NoaWZ0WT1jaHJvbWF0aWNfYWJlcnJhdGlvbipwb3cocmFkaXVzLHJhZGlhbEludGVuc2l0
eSkqZGlyZWN0aW9uT2ZFZmZlY3QueS9zY3JlZW5faGVpZ2h0O1xuXG52ZWMyIHJlZl9jb29yZHNf
cj12ZWMyKHZVVi54K3JlZl9pbmRpY2VzLnIqcmVmX3NoaWZ0WCx2VVYueStyZWZfaW5kaWNlcy5y
KnJlZl9zaGlmdFkqMC41KTtcbnZlYzIgcmVmX2Nvb3Jkc19nPXZlYzIodlVWLngrcmVmX2luZGlj
ZXMuZypyZWZfc2hpZnRYLHZVVi55K3JlZl9pbmRpY2VzLmcqcmVmX3NoaWZ0WSowLjUpO1xudmVj
MiByZWZfY29vcmRzX2I9dmVjMih2VVYueCtyZWZfaW5kaWNlcy5iKnJlZl9zaGlmdFgsdlVWLnkr
cmVmX2luZGljZXMuYipyZWZfc2hpZnRZKjAuNSk7XG5vcmlnaW5hbC5yPXRleHR1cmUyRCh0ZXh0
dXJlU2FtcGxlcixyZWZfY29vcmRzX3IpLnI7XG5vcmlnaW5hbC5nPXRleHR1cmUyRCh0ZXh0dXJl
U2FtcGxlcixyZWZfY29vcmRzX2cpLmc7XG5vcmlnaW5hbC5iPXRleHR1cmUyRCh0ZXh0dXJlU2Ft
cGxlcixyZWZfY29vcmRzX2IpLmI7XG5vcmlnaW5hbC5hPWNsYW1wKHRleHR1cmUyRCh0ZXh0dXJl
U2FtcGxlcixyZWZfY29vcmRzX3IpLmErdGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHJlZl9jb29y
ZHNfZykuYSt0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIscmVmX2Nvb3Jkc19iKS5hLDAuLDEuKTtc
bmdsX0ZyYWdDb2xvcj1vcmlnaW5hbDtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVy
OworLyoqIEBoaWRkZW4gKi8KK3ZhciBjaHJvbWF0aWNBYmVycmF0aW9uUGl4ZWxTaGFkZXIgPSB7
IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIu
L1NoYWRlcnMvY2lyY2xlT2ZDb25mdXNpb24uZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMv
Y2lyY2xlT2ZDb25mdXNpb24uZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogY2ly
Y2xlT2ZDb25mdXNpb25QaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193
ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7
CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJjaXJjbGVPZkNvbmZ1c2lvblBpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBjaXJjbGVPZkNvbmZ1c2lvblBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMv
ZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2NpcmNsZU9mQ29uZnVzaW9uUGl4ZWxTaGFkZXIn
OwordmFyIHNoYWRlciA9ICJcbnVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoU2FtcGxlcjtcblxudmFy
eWluZyB2ZWMyIHZVVjtcblxudW5pZm9ybSB2ZWMyIGNhbWVyYU1pbk1heFo7XG5cbnVuaWZvcm0g
ZmxvYXQgZm9jdXNEaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgY29jUHJlY2FsY3VsYXRpb247XG52
b2lkIG1haW4odm9pZClcbntcbmZsb2F0IGRlcHRoPXRleHR1cmUyRChkZXB0aFNhbXBsZXIsdlVW
KS5yO1xuZmxvYXQgcGl4ZWxEaXN0YW5jZT0oY2FtZXJhTWluTWF4Wi54KyhjYW1lcmFNaW5NYXha
LnktY2FtZXJhTWluTWF4Wi54KSpkZXB0aCkqMTAwMC4wO1xuZmxvYXQgY29jPWFicyhjb2NQcmVj
YWxjdWxhdGlvbiogKChmb2N1c0Rpc3RhbmNlLXBpeGVsRGlzdGFuY2UpL3BpeGVsRGlzdGFuY2Up
KTtcbmNvYz1jbGFtcChjb2MsMC4wLDEuMCk7XG5nbF9GcmFnQ29sb3I9dmVjNChjb2MsZGVwdGgs
Y29jLDEuMCk7XG59XG4iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRk
ZW4gKi8KK3ZhciBjaXJjbGVPZkNvbmZ1c2lvblBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBz
aGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2NvbG9y
LmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9TaGFkZXJzL2NvbG9yLmZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGNvbG9yUGl4
ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18s
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY29sb3JQaXhl
bFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY29sb3JQaXhlbFNoYWRlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9T
aGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRl
L2NsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVk
ZS9jbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1NoYWRlcnNJbmNsdWRlX2NsaXBQbGFuZUZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2Ns
aXBQbGFuZUZyYWdtZW50ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lRnJh
Z21lbnQudHMiKTsKKworCisKK3ZhciBuYW1lID0gJ2NvbG9yUGl4ZWxTaGFkZXInOwordmFyIHNo
YWRlciA9ICIjaWZkZWYgVkVSVEVYQ09MT1JcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG4jZWxzZVxu
dW5pZm9ybSB2ZWM0IGNvbG9yO1xuI2VuZGlmXG4jaW5jbHVkZTxjbGlwUGxhbmVGcmFnbWVudERl
Y2xhcmF0aW9uPlxudm9pZCBtYWluKHZvaWQpIHtcbiNpbmNsdWRlPGNsaXBQbGFuZUZyYWdtZW50
PlxuI2lmZGVmIFZFUlRFWENPTE9SXG5nbF9GcmFnQ29sb3I9dkNvbG9yO1xuI2Vsc2VcbmdsX0Zy
YWdDb2xvcj1jb2xvcjtcbiNlbmRpZlxufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7
CisvKiogQGhpZGRlbiAqLwordmFyIGNvbG9yUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNo
YWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvY29sb3Iu
dmVydGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAh
KioqIC4vU2hhZGVycy9jb2xvci52ZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGNvbG9yVmVydGV4U2hhZGVy
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNvbG9yVmVydGV4U2hhZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjb2xvclZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4v
TWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJz
SW5jbHVkZV9ib25lc0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRpb24g
Ki8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc0RlY2xhcmF0aW9uLnRzIik7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2NsaXBQbGFuZVZlcnRleERlY2xh
cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uICovICIuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb24udHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW5zdGFuY2VzRGVjbGFyYXRp
b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFk
ZXJzSW5jbHVkZS9pbnN0YW5jZXNEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbnN0YW5jZXNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaW5z
dGFuY2VzVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzVmVydGV4
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2JvbmVzVmVy
dGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL1NoYWRlcnNJbmNsdWRlL2JvbmVzVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1
ZGUvYm9uZXNWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0lu
Y2x1ZGVfY2xpcFBsYW5lVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleCAqLyAi
Li9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleC50cyIpOworCisKKworCisK
KworCit2YXIgbmFtZSA9ICdjb2xvclZlcnRleFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxuYXR0
cmlidXRlIHZlYzMgcG9zaXRpb247XG4jaWZkZWYgVkVSVEVYQ09MT1JcbmF0dHJpYnV0ZSB2ZWM0
IGNvbG9yO1xuI2VuZGlmXG4jaW5jbHVkZTxib25lc0RlY2xhcmF0aW9uPlxuI2luY2x1ZGU8Y2xp
cFBsYW5lVmVydGV4RGVjbGFyYXRpb24+XG5cbiNpbmNsdWRlPGluc3RhbmNlc0RlY2xhcmF0aW9u
PlxudW5pZm9ybSBtYXQ0IHZpZXdQcm9qZWN0aW9uO1xuXG4jaWZkZWYgVkVSVEVYQ09MT1JcbnZh
cnlpbmcgdmVjNCB2Q29sb3I7XG4jZW5kaWZcbnZvaWQgbWFpbih2b2lkKSB7XG4jaW5jbHVkZTxp
bnN0YW5jZXNWZXJ0ZXg+XG4jaW5jbHVkZTxib25lc1ZlcnRleD5cbnZlYzQgd29ybGRQb3M9Zmlu
YWxXb3JsZCp2ZWM0KHBvc2l0aW9uLDEuMCk7XG5nbF9Qb3NpdGlvbj12aWV3UHJvamVjdGlvbip3
b3JsZFBvcztcbiNpbmNsdWRlPGNsaXBQbGFuZVZlcnRleD5cbiNpZmRlZiBWRVJURVhDT0xPUlxu
XG52Q29sb3I9Y29sb3I7XG4jZW5kaWZcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVy
OworLyoqIEBoaWRkZW4gKi8KK3ZhciBjb2xvclZlcnRleFNoYWRlciA9IHsgbmFtZTogbmFtZSwg
c2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9jb2xv
ckNvcnJlY3Rpb24uZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL2NvbG9yQ29ycmVjdGlvbi5m
cmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogY29sb3JDb3JyZWN0aW9uUGl4ZWxTaGFk
ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY29sb3JDb3JyZWN0aW9u
UGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbG9yQ29ycmVjdGlvblBpeGVsU2hh
ZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0
ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0g
J2NvbG9yQ29ycmVjdGlvblBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG51bmlmb3JtIHNh
bXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9yVGFibGU7XG5c
bnZhcnlpbmcgdmVjMiB2VVY7XG5cbmNvbnN0IGZsb2F0IFNMSUNFX0NPVU5UPTE2LjA7XG5cbnZl
YzQgc2FtcGxlQXMzRFRleHR1cmUoc2FtcGxlcjJEIHRleHR1cmVTYW1wbGVyLHZlYzMgdXYsZmxv
YXQgd2lkdGgpIHtcbmZsb2F0IHNsaWNlU2l6ZT0xLjAvd2lkdGg7XG5mbG9hdCBzbGljZVBpeGVs
U2l6ZT1zbGljZVNpemUvd2lkdGg7XG5mbG9hdCBzbGljZUlubmVyU2l6ZT1zbGljZVBpeGVsU2l6
ZSood2lkdGgtMS4wKTtcbmZsb2F0IHpTbGljZTA9bWluKGZsb29yKHV2Lnoqd2lkdGgpLHdpZHRo
LTEuMCk7XG5mbG9hdCB6U2xpY2UxPW1pbih6U2xpY2UwKzEuMCx3aWR0aC0xLjApO1xuZmxvYXQg
eE9mZnNldD1zbGljZVBpeGVsU2l6ZSowLjUrdXYueCpzbGljZUlubmVyU2l6ZTtcbmZsb2F0IHMw
PXhPZmZzZXQrKHpTbGljZTAqc2xpY2VTaXplKTtcbmZsb2F0IHMxPXhPZmZzZXQrKHpTbGljZTEq
c2xpY2VTaXplKTtcbnZlYzQgc2xpY2UwQ29sb3I9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZl
YzIoczAsdXYueSkpO1xudmVjNCBzbGljZTFDb2xvcj10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIs
dmVjMihzMSx1di55KSk7XG5mbG9hdCB6T2Zmc2V0PW1vZCh1di56KndpZHRoLDEuMCk7XG52ZWM0
IHJlc3VsdD1taXgoc2xpY2UwQ29sb3Isc2xpY2UxQ29sb3Isek9mZnNldCk7XG5yZXR1cm4gcmVz
dWx0O1xufVxudm9pZCBtYWluKHZvaWQpXG57XG52ZWM0IHNjcmVlbl9jb2xvcj10ZXh0dXJlMkQo
dGV4dHVyZVNhbXBsZXIsdlVWKTtcbmdsX0ZyYWdDb2xvcj1zYW1wbGVBczNEVGV4dHVyZShjb2xv
clRhYmxlLHNjcmVlbl9jb2xvci5yZ2IsU0xJQ0VfQ09VTlQpO1xufSI7CitfTWF0ZXJpYWxzX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVb
bmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGNvbG9yQ29ycmVjdGlvblBpeGVs
U2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9TaGFkZXJzL2NvbnZvbHV0aW9uLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL2Nv
bnZvbHV0aW9uLmZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGNvbnZvbHV0aW9uUGl4ZWxT
aGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY29udm9sdXRpb25Q
aXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY29udm9sdXRpb25QaXhlbFNoYWRlcjsg
fSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFs
cy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdjb252
b2x1dGlvblBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG52YXJ5aW5nIHZlYzIgdlVWO1xu
dW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZVNhbXBsZXI7XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6
ZTtcbnVuaWZvcm0gZmxvYXQga2VybmVsWzldO1xudm9pZCBtYWluKHZvaWQpXG57XG52ZWMyIG9u
ZVBpeGVsPXZlYzIoMS4wLDEuMCkvc2NyZWVuU2l6ZTtcbnZlYzQgY29sb3JTdW0gPVxudGV4dHVy
ZTJEKHRleHR1cmVTYW1wbGVyLHZVVitvbmVQaXhlbCp2ZWMyKC0xLC0xKSkqa2VybmVsWzBdICtc
bnRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrb25lUGl4ZWwqdmVjMigwLC0xKSkqa2VybmVs
WzFdICtcbnRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrb25lUGl4ZWwqdmVjMigxLC0xKSkq
a2VybmVsWzJdICtcbnRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrb25lUGl4ZWwqdmVjMigt
MSwwKSkqa2VybmVsWzNdICtcbnRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrb25lUGl4ZWwq
dmVjMigwLDApKSprZXJuZWxbNF0gK1xudGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVitvbmVQ
aXhlbCp2ZWMyKDEsMCkpKmtlcm5lbFs1XSArXG50ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVW
K29uZVBpeGVsKnZlYzIoLTEsMSkpKmtlcm5lbFs2XSArXG50ZXh0dXJlMkQodGV4dHVyZVNhbXBs
ZXIsdlVWK29uZVBpeGVsKnZlYzIoMCwxKSkqa2VybmVsWzddICtcbnRleHR1cmUyRCh0ZXh0dXJl
U2FtcGxlcix2VVYrb25lUGl4ZWwqdmVjMigxLDEpKSprZXJuZWxbOF07XG5mbG9hdCBrZXJuZWxX
ZWlnaHQgPVxua2VybmVsWzBdICtcbmtlcm5lbFsxXSArXG5rZXJuZWxbMl0gK1xua2VybmVsWzNd
ICtcbmtlcm5lbFs0XSArXG5rZXJuZWxbNV0gK1xua2VybmVsWzZdICtcbmtlcm5lbFs3XSArXG5r
ZXJuZWxbOF07XG5pZiAoa2VybmVsV2VpZ2h0PD0wLjApIHtcbmtlcm5lbFdlaWdodD0xLjA7XG59
XG5nbF9GcmFnQ29sb3I9dmVjNCgoY29sb3JTdW0va2VybmVsV2VpZ2h0KS5yZ2IsMSk7XG59IjsK
K19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJd
LlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgY29udm9s
dXRpb25QaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9kZWZhdWx0LmZyYWdtZW50LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMv
ZGVmYXVsdC5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHRQaXhlbFNoYWRlciAqLwor
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJkZWZhdWx0UGl4ZWxTaGFkZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIGRlZmF1bHRQaXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0
ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5j
bHVkZV9kZWZhdWx0RnJhZ21lbnREZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0RnJh
Z21lbnREZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2RlZmF1bHRGcmFn
bWVudERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJ
bmNsdWRlX2RlZmF1bHRVYm9EZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0VWJvRGVj
bGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0VWJvRGVjbGFyYXRp
b24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVscGVy
RnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1No
YWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzSW5jbHVkZV9saWdodEZyYWdtZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1
ZGUvbGlnaHRGcmFnbWVudERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
bGlnaHRGcmFnbWVudERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNJbmNsdWRlX2xpZ2h0VWJvRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbGlnaHRV
Ym9EZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0VWJvRGVjbGFy
YXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbGln
aHRzRnJhZ21lbnRGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbGlnaHRzRnJhZ21lbnRGdW5jdGlv
bnMgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9saWdodHNGcmFnbWVudEZ1bmN0aW9ucy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9zaGFkb3dzRnJh
Z21lbnRGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvc2hhZG93c0ZyYWdtZW50RnVuY3Rpb25zICov
ICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvc2hhZG93c0ZyYWdtZW50RnVuY3Rpb25zLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2ZyZXNuZWxGdW5jdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9TaGFkZXJzSW5jbHVkZS9mcmVzbmVsRnVuY3Rpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9mcmVzbmVsRnVuY3Rpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hh
ZGVyc0luY2x1ZGVfcmVmbGVjdGlvbkZ1bmN0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL3JlZmxlY3Rpb25G
dW5jdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3JlZmxlY3Rpb25GdW5jdGlvbi50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbWFnZVByb2Nl
c3NpbmdEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRGVjbGFyYXRp
b24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbWFnZVByb2Nlc3NpbmdEZWNsYXJhdGlv
bi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbWFnZVBy
b2Nlc3NpbmdGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9u
cyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9ucy50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9idW1wRnJhZ21l
bnRGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2J1bXBGcmFnbWVudEZ1bmN0aW9ucyAqLyAiLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2J1bXBGcmFnbWVudEZ1bmN0aW9ucy50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVGcmFnbWVudERlY2xh
cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uICovICIu
L1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbi50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0aERlY2xh
cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMv
U2hhZGVyc0luY2x1ZGUvbG9nRGVwdGhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9mb2dGcmFnbWVudERlY2xhcmF0aW9uX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJz
SW5jbHVkZS9mb2dGcmFnbWVudERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1
ZGUvZm9nRnJhZ21lbnREZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVGcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvY2xpcFBs
YW5lRnJhZ21lbnQgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVu
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9idW1wRnJh
Z21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL1NoYWRlcnNJbmNsdWRlL2J1bXBGcmFnbWVudCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJ
bmNsdWRlL2J1bXBGcmFnbWVudC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzSW5jbHVkZV9kZXB0aFByZVBhc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2RlcHRoUHJlUGFzcyAqLyAi
Li9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2RlcHRoUHJlUGFzcy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9saWdodEZyYWdtZW50X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9saWdodEZyYWdtZW50ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbGlnaHRGcmFnbWVu
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0
aEZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aEZyYWdtZW50ICovICIuL1NoYWRlcnMv
U2hhZGVyc0luY2x1ZGUvbG9nRGVwdGhGcmFnbWVudC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzSW5jbHVkZV9mb2dGcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvZm9nRnJh
Z21lbnQgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9mb2dGcmFnbWVudC50cyIpOworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCit2YXIgbmFtZSA9ICdkZWZh
dWx0UGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICIjaW5jbHVkZTxfX2RlY2xfX2RlZmF1bHRG
cmFnbWVudD5cbiNpZiBkZWZpbmVkKEJVTVApIHx8ICFkZWZpbmVkKE5PUk1BTClcbiNleHRlbnNp
b24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG4jZW5kaWZcbiNkZWZpbmUg
Q1VTVE9NX0ZSQUdNRU5UX0JFR0lOXG4jaWZkZWYgTE9HQVJJVEhNSUNERVBUSFxuI2V4dGVuc2lv
biBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZVxuI2VuZGlmXG5cbiNkZWZpbmUgUkVDSVBST0NB
TF9QSTIgMC4xNTkxNTQ5NFxudW5pZm9ybSB2ZWMzIHZFeWVQb3NpdGlvbjtcbnVuaWZvcm0gdmVj
MyB2QW1iaWVudENvbG9yO1xuXG52YXJ5aW5nIHZlYzMgdlBvc2l0aW9uVztcbiNpZmRlZiBOT1JN
QUxcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsVztcbiNlbmRpZlxuI2lmZGVmIFZFUlRFWENPTE9SXG52
YXJ5aW5nIHZlYzQgdkNvbG9yO1xuI2VuZGlmXG4jaWZkZWYgTUFJTlVWMVxudmFyeWluZyB2ZWMy
IHZNYWluVVYxO1xuI2VuZGlmXG4jaWZkZWYgTUFJTlVWMlxudmFyeWluZyB2ZWMyIHZNYWluVVYy
O1xuI2VuZGlmXG5cbiNpbmNsdWRlPGhlbHBlckZ1bmN0aW9ucz5cblxuI2luY2x1ZGU8X19kZWNs
X19saWdodEZyYWdtZW50PlswLi5tYXhTaW11bHRhbmVvdXNMaWdodHNdXG4jaW5jbHVkZTxsaWdo
dHNGcmFnbWVudEZ1bmN0aW9ucz5cbiNpbmNsdWRlPHNoYWRvd3NGcmFnbWVudEZ1bmN0aW9ucz5c
blxuI2lmZGVmIERJRkZVU0VcbiNpZiBESUZGVVNFRElSRUNUVVYgPT0gMVxuI2RlZmluZSB2RGlm
ZnVzZVVWIHZNYWluVVYxXG4jZWxpZiBESUZGVVNFRElSRUNUVVYgPT0gMlxuI2RlZmluZSB2RGlm
ZnVzZVVWIHZNYWluVVYyXG4jZWxzZVxudmFyeWluZyB2ZWMyIHZEaWZmdXNlVVY7XG4jZW5kaWZc
bnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VTYW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYgQU1CSUVO
VFxuI2lmIEFNQklFTlRESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZBbWJpZW50VVYgdk1haW5VVjFc
biNlbGlmIEFNQklFTlRESVJFQ1RVViA9PSAyXG4jZGVmaW5lIHZBbWJpZW50VVYgdk1haW5VVjJc
biNlbHNlXG52YXJ5aW5nIHZlYzIgdkFtYmllbnRVVjtcbiNlbmRpZlxudW5pZm9ybSBzYW1wbGVy
MkQgYW1iaWVudFNhbXBsZXI7XG4jZW5kaWZcbiNpZmRlZiBPUEFDSVRZXG4jaWYgT1BBQ0lUWURJ
UkVDVFVWID09IDFcbiNkZWZpbmUgdk9wYWNpdHlVViB2TWFpblVWMVxuI2VsaWYgT1BBQ0lUWURJ
UkVDVFVWID09IDJcbiNkZWZpbmUgdk9wYWNpdHlVViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcg
dmVjMiB2T3BhY2l0eVVWO1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCBvcGFjaXR5U2FtcGxl
cjtcbiNlbmRpZlxuI2lmZGVmIEVNSVNTSVZFXG4jaWYgRU1JU1NJVkVESVJFQ1RVViA9PSAxXG4j
ZGVmaW5lIHZFbWlzc2l2ZVVWIHZNYWluVVYxXG4jZWxpZiBFTUlTU0lWRURJUkVDVFVWID09IDJc
biNkZWZpbmUgdkVtaXNzaXZlVVYgdk1haW5VVjJcbiNlbHNlXG52YXJ5aW5nIHZlYzIgdkVtaXNz
aXZlVVY7XG4jZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlU2FtcGxlcjtcbiNlbmRp
ZlxuI2lmZGVmIExJR0hUTUFQXG4jaWYgTElHSFRNQVBESVJFQ1RVViA9PSAxXG4jZGVmaW5lIHZM
aWdodG1hcFVWIHZNYWluVVYxXG4jZWxpZiBMSUdIVE1BUERJUkVDVFVWID09IDJcbiNkZWZpbmUg
dkxpZ2h0bWFwVVYgdk1haW5VVjJcbiNlbHNlXG52YXJ5aW5nIHZlYzIgdkxpZ2h0bWFwVVY7XG4j
ZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0bWFwU2FtcGxlcjtcbiNlbmRpZlxuI2lmZGVm
IFJFRlJBQ1RJT05cbiNpZmRlZiBSRUZSQUNUSU9OTUFQXzNEXG51bmlmb3JtIHNhbXBsZXJDdWJl
IHJlZnJhY3Rpb25DdWJlU2FtcGxlcjtcbiNlbHNlXG51bmlmb3JtIHNhbXBsZXIyRCByZWZyYWN0
aW9uMkRTYW1wbGVyO1xuI2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKFNQRUNVTEFSKSAmJiBk
ZWZpbmVkKFNQRUNVTEFSVEVSTSlcbiNpZiBTUEVDVUxBUkRJUkVDVFVWID09IDFcbiNkZWZpbmUg
dlNwZWN1bGFyVVYgdk1haW5VVjFcbiNlbGlmIFNQRUNVTEFSRElSRUNUVVYgPT0gMlxuI2RlZmlu
ZSB2U3BlY3VsYXJVViB2TWFpblVWMlxuI2Vsc2VcbnZhcnlpbmcgdmVjMiB2U3BlY3VsYXJVVjtc
biNlbmRpZlxudW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJTYW1wbGVyO1xuI2VuZGlmXG4jaWZk
ZWYgQUxQSEFURVNUXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0T2ZmO1xuI2VuZGlmXG5cbiNpbmNs
dWRlPGZyZXNuZWxGdW5jdGlvbj5cblxuI2lmZGVmIFJFRkxFQ1RJT05cbiNpZmRlZiBSRUZMRUNU
SU9OTUFQXzNEXG51bmlmb3JtIHNhbXBsZXJDdWJlIHJlZmxlY3Rpb25DdWJlU2FtcGxlcjtcbiNl
bHNlXG51bmlmb3JtIHNhbXBsZXIyRCByZWZsZWN0aW9uMkRTYW1wbGVyO1xuI2VuZGlmXG4jaWZk
ZWYgUkVGTEVDVElPTk1BUF9TS1lCT1hcbnZhcnlpbmcgdmVjMyB2UG9zaXRpb25VVlc7XG4jZWxz
ZVxuI2lmIGRlZmluZWQoUkVGTEVDVElPTk1BUF9FUVVJUkVDVEFOR1VMQVJfRklYRUQpIHx8IGRl
ZmluZWQoUkVGTEVDVElPTk1BUF9NSVJST1JFREVRVUlSRUNUQU5HVUxBUl9GSVhFRClcbnZhcnlp
bmcgdmVjMyB2RGlyZWN0aW9uVztcbiNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZTxyZWZsZWN0aW9u
RnVuY3Rpb24+XG4jZW5kaWZcbiNpbmNsdWRlPGltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uPlxu
I2luY2x1ZGU8aW1hZ2VQcm9jZXNzaW5nRnVuY3Rpb25zPlxuI2luY2x1ZGU8YnVtcEZyYWdtZW50
RnVuY3Rpb25zPlxuI2luY2x1ZGU8Y2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbj5cbiNpbmNs
dWRlPGxvZ0RlcHRoRGVjbGFyYXRpb24+XG4jaW5jbHVkZTxmb2dGcmFnbWVudERlY2xhcmF0aW9u
PlxuI2RlZmluZSBDVVNUT01fRlJBR01FTlRfREVGSU5JVElPTlNcbnZvaWQgbWFpbih2b2lkKSB7
XG4jZGVmaW5lIENVU1RPTV9GUkFHTUVOVF9NQUlOX0JFR0lOXG4jaW5jbHVkZTxjbGlwUGxhbmVG
cmFnbWVudD5cbnZlYzMgdmlld0RpcmVjdGlvblc9bm9ybWFsaXplKHZFeWVQb3NpdGlvbi12UG9z
aXRpb25XKTtcblxudmVjNCBiYXNlQ29sb3I9dmVjNCgxLiwxLiwxLiwxLik7XG52ZWMzIGRpZmZ1
c2VDb2xvcj12RGlmZnVzZUNvbG9yLnJnYjtcblxuZmxvYXQgYWxwaGE9dkRpZmZ1c2VDb2xvci5h
O1xuXG4jaWZkZWYgTk9STUFMXG52ZWMzIG5vcm1hbFc9bm9ybWFsaXplKHZOb3JtYWxXKTtcbiNl
bHNlXG52ZWMzIG5vcm1hbFc9bm9ybWFsaXplKC1jcm9zcyhkRmR4KHZQb3NpdGlvblcpLGRGZHko
dlBvc2l0aW9uVykpKTtcbiNlbmRpZlxuI2luY2x1ZGU8YnVtcEZyYWdtZW50PlxuI2lmZGVmIFRX
T1NJREVETElHSFRJTkdcbm5vcm1hbFc9Z2xfRnJvbnRGYWNpbmcgPyBub3JtYWxXIDogLW5vcm1h
bFc7XG4jZW5kaWZcbiNpZmRlZiBESUZGVVNFXG5iYXNlQ29sb3I9dGV4dHVyZTJEKGRpZmZ1c2VT
YW1wbGVyLHZEaWZmdXNlVVYrdXZPZmZzZXQpO1xuI2lmZGVmIEFMUEhBVEVTVFxuaWYgKGJhc2VD
b2xvci5hPGFscGhhQ3V0T2ZmKVxuZGlzY2FyZDtcbiNlbmRpZlxuI2lmZGVmIEFMUEhBRlJPTURJ
RkZVU0VcbmFscGhhKj1iYXNlQ29sb3IuYTtcbiNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJBR01F
TlRfVVBEQVRFX0FMUEhBXG5iYXNlQ29sb3IucmdiKj12RGlmZnVzZUluZm9zLnk7XG4jZW5kaWZc
biNpbmNsdWRlPGRlcHRoUHJlUGFzcz5cbiNpZmRlZiBWRVJURVhDT0xPUlxuYmFzZUNvbG9yLnJn
Yio9dkNvbG9yLnJnYjtcbiNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJBR01FTlRfVVBEQVRFX0RJ
RkZVU0VcblxudmVjMyBiYXNlQW1iaWVudENvbG9yPXZlYzMoMS4sMS4sMS4pO1xuI2lmZGVmIEFN
QklFTlRcbmJhc2VBbWJpZW50Q29sb3I9dGV4dHVyZTJEKGFtYmllbnRTYW1wbGVyLHZBbWJpZW50
VVYrdXZPZmZzZXQpLnJnYip2QW1iaWVudEluZm9zLnk7XG4jZW5kaWZcbiNkZWZpbmUgQ1VTVE9N
X0ZSQUdNRU5UX0JFRk9SRV9MSUdIVFNcblxuI2lmZGVmIFNQRUNVTEFSVEVSTVxuZmxvYXQgZ2xv
c3NpbmVzcz12U3BlY3VsYXJDb2xvci5hO1xudmVjMyBzcGVjdWxhckNvbG9yPXZTcGVjdWxhckNv
bG9yLnJnYjtcbiNpZmRlZiBTUEVDVUxBUlxudmVjNCBzcGVjdWxhck1hcENvbG9yPXRleHR1cmUy
RChzcGVjdWxhclNhbXBsZXIsdlNwZWN1bGFyVVYrdXZPZmZzZXQpO1xuc3BlY3VsYXJDb2xvcj1z
cGVjdWxhck1hcENvbG9yLnJnYjtcbiNpZmRlZiBHTE9TU0lORVNTXG5nbG9zc2luZXNzPWdsb3Nz
aW5lc3Mqc3BlY3VsYXJNYXBDb2xvci5hO1xuI2VuZGlmXG4jZW5kaWZcbiNlbHNlXG5mbG9hdCBn
bG9zc2luZXNzPTAuO1xuI2VuZGlmXG5cbnZlYzMgZGlmZnVzZUJhc2U9dmVjMygwLiwwLiwwLik7
XG5saWdodGluZ0luZm8gaW5mbztcbiNpZmRlZiBTUEVDVUxBUlRFUk1cbnZlYzMgc3BlY3VsYXJC
YXNlPXZlYzMoMC4sMC4sMC4pO1xuI2VuZGlmXG5mbG9hdCBzaGFkb3c9MS47XG4jaWZkZWYgTElH
SFRNQVBcbnZlYzMgbGlnaHRtYXBDb2xvcj10ZXh0dXJlMkQobGlnaHRtYXBTYW1wbGVyLHZMaWdo
dG1hcFVWK3V2T2Zmc2V0KS5yZ2IqdkxpZ2h0bWFwSW5mb3MueTtcbiNlbmRpZlxuI2luY2x1ZGU8
bGlnaHRGcmFnbWVudD5bMC4ubWF4U2ltdWx0YW5lb3VzTGlnaHRzXVxuXG52ZWMzIHJlZnJhY3Rp
b25Db2xvcj12ZWMzKDAuLDAuLDAuKTtcbiNpZmRlZiBSRUZSQUNUSU9OXG52ZWMzIHJlZnJhY3Rp
b25WZWN0b3I9bm9ybWFsaXplKHJlZnJhY3QoLXZpZXdEaXJlY3Rpb25XLG5vcm1hbFcsdlJlZnJh
Y3Rpb25JbmZvcy55KSk7XG4jaWZkZWYgUkVGUkFDVElPTk1BUF8zRFxucmVmcmFjdGlvblZlY3Rv
ci55PXJlZnJhY3Rpb25WZWN0b3IueSp2UmVmcmFjdGlvbkluZm9zLnc7XG5pZiAoZG90KHJlZnJh
Y3Rpb25WZWN0b3Isdmlld0RpcmVjdGlvblcpPDEuMCkge1xucmVmcmFjdGlvbkNvbG9yPXRleHR1
cmVDdWJlKHJlZnJhY3Rpb25DdWJlU2FtcGxlcixyZWZyYWN0aW9uVmVjdG9yKS5yZ2I7XG59XG4j
ZWxzZVxudmVjMyB2UmVmcmFjdGlvblVWVz12ZWMzKHJlZnJhY3Rpb25NYXRyaXgqKHZpZXcqdmVj
NCh2UG9zaXRpb25XK3JlZnJhY3Rpb25WZWN0b3IqdlJlZnJhY3Rpb25JbmZvcy56LDEuMCkpKTtc
bnZlYzIgcmVmcmFjdGlvbkNvb3Jkcz12UmVmcmFjdGlvblVWVy54eS92UmVmcmFjdGlvblVWVy56
O1xucmVmcmFjdGlvbkNvb3Jkcy55PTEuMC1yZWZyYWN0aW9uQ29vcmRzLnk7XG5yZWZyYWN0aW9u
Q29sb3I9dGV4dHVyZTJEKHJlZnJhY3Rpb24yRFNhbXBsZXIscmVmcmFjdGlvbkNvb3Jkcykucmdi
O1xuI2VuZGlmXG4jaWZkZWYgSVNfUkVGUkFDVElPTl9MSU5FQVJcbnJlZnJhY3Rpb25Db2xvcj10
b0dhbW1hU3BhY2UocmVmcmFjdGlvbkNvbG9yKTtcbiNlbmRpZlxucmVmcmFjdGlvbkNvbG9yKj12
UmVmcmFjdGlvbkluZm9zLng7XG4jZW5kaWZcblxudmVjMyByZWZsZWN0aW9uQ29sb3I9dmVjMygw
LiwwLiwwLik7XG4jaWZkZWYgUkVGTEVDVElPTlxudmVjMyB2UmVmbGVjdGlvblVWVz1jb21wdXRl
UmVmbGVjdGlvbkNvb3Jkcyh2ZWM0KHZQb3NpdGlvblcsMS4wKSxub3JtYWxXKTtcbiNpZmRlZiBS
RUZMRUNUSU9OTUFQXzNEXG4jaWZkZWYgUk9VR0hORVNTXG5mbG9hdCBiaWFzPXZSZWZsZWN0aW9u
SW5mb3MueTtcbiNpZmRlZiBTUEVDVUxBUlRFUk1cbiNpZmRlZiBTUEVDVUxBUlxuI2lmZGVmIEdM
T1NTSU5FU1NcbmJpYXMqPSgxLjAtc3BlY3VsYXJNYXBDb2xvci5hKTtcbiNlbmRpZlxuI2VuZGlm
XG4jZW5kaWZcbnJlZmxlY3Rpb25Db2xvcj10ZXh0dXJlQ3ViZShyZWZsZWN0aW9uQ3ViZVNhbXBs
ZXIsdlJlZmxlY3Rpb25VVlcsYmlhcykucmdiO1xuI2Vsc2VcbnJlZmxlY3Rpb25Db2xvcj10ZXh0
dXJlQ3ViZShyZWZsZWN0aW9uQ3ViZVNhbXBsZXIsdlJlZmxlY3Rpb25VVlcpLnJnYjtcbiNlbmRp
ZlxuI2Vsc2VcbnZlYzIgY29vcmRzPXZSZWZsZWN0aW9uVVZXLnh5O1xuI2lmZGVmIFJFRkxFQ1RJ
T05NQVBfUFJPSkVDVElPTlxuY29vcmRzLz12UmVmbGVjdGlvblVWVy56O1xuI2VuZGlmXG5jb29y
ZHMueT0xLjAtY29vcmRzLnk7XG5yZWZsZWN0aW9uQ29sb3I9dGV4dHVyZTJEKHJlZmxlY3Rpb24y
RFNhbXBsZXIsY29vcmRzKS5yZ2I7XG4jZW5kaWZcbiNpZmRlZiBJU19SRUZMRUNUSU9OX0xJTkVB
UlxucmVmbGVjdGlvbkNvbG9yPXRvR2FtbWFTcGFjZShyZWZsZWN0aW9uQ29sb3IpO1xuI2VuZGlm
XG5yZWZsZWN0aW9uQ29sb3IqPXZSZWZsZWN0aW9uSW5mb3MueDtcbiNpZmRlZiBSRUZMRUNUSU9O
RlJFU05FTFxuZmxvYXQgcmVmbGVjdGlvbkZyZXNuZWxUZXJtPWNvbXB1dGVGcmVzbmVsVGVybSh2
aWV3RGlyZWN0aW9uVyxub3JtYWxXLHJlZmxlY3Rpb25SaWdodENvbG9yLmEscmVmbGVjdGlvbkxl
ZnRDb2xvci5hKTtcbiNpZmRlZiBSRUZMRUNUSU9ORlJFU05FTEZST01TUEVDVUxBUlxuI2lmZGVm
IFNQRUNVTEFSVEVSTVxucmVmbGVjdGlvbkNvbG9yKj1zcGVjdWxhckNvbG9yLnJnYiooMS4wLXJl
ZmxlY3Rpb25GcmVzbmVsVGVybSkrcmVmbGVjdGlvbkZyZXNuZWxUZXJtKnJlZmxlY3Rpb25SaWdo
dENvbG9yLnJnYjtcbiNlbHNlXG5yZWZsZWN0aW9uQ29sb3IqPXJlZmxlY3Rpb25MZWZ0Q29sb3Iu
cmdiKigxLjAtcmVmbGVjdGlvbkZyZXNuZWxUZXJtKStyZWZsZWN0aW9uRnJlc25lbFRlcm0qcmVm
bGVjdGlvblJpZ2h0Q29sb3IucmdiO1xuI2VuZGlmXG4jZWxzZVxucmVmbGVjdGlvbkNvbG9yKj1y
ZWZsZWN0aW9uTGVmdENvbG9yLnJnYiooMS4wLXJlZmxlY3Rpb25GcmVzbmVsVGVybSkrcmVmbGVj
dGlvbkZyZXNuZWxUZXJtKnJlZmxlY3Rpb25SaWdodENvbG9yLnJnYjtcbiNlbmRpZlxuI2VuZGlm
XG4jZW5kaWZcbiNpZmRlZiBSRUZSQUNUSU9ORlJFU05FTFxuZmxvYXQgcmVmcmFjdGlvbkZyZXNu
ZWxUZXJtPWNvbXB1dGVGcmVzbmVsVGVybSh2aWV3RGlyZWN0aW9uVyxub3JtYWxXLHJlZnJhY3Rp
b25SaWdodENvbG9yLmEscmVmcmFjdGlvbkxlZnRDb2xvci5hKTtcbnJlZnJhY3Rpb25Db2xvcio9
cmVmcmFjdGlvbkxlZnRDb2xvci5yZ2IqKDEuMC1yZWZyYWN0aW9uRnJlc25lbFRlcm0pK3JlZnJh
Y3Rpb25GcmVzbmVsVGVybSpyZWZyYWN0aW9uUmlnaHRDb2xvci5yZ2I7XG4jZW5kaWZcbiNpZmRl
ZiBPUEFDSVRZXG52ZWM0IG9wYWNpdHlNYXA9dGV4dHVyZTJEKG9wYWNpdHlTYW1wbGVyLHZPcGFj
aXR5VVYrdXZPZmZzZXQpO1xuI2lmZGVmIE9QQUNJVFlSR0Jcbm9wYWNpdHlNYXAucmdiPW9wYWNp
dHlNYXAucmdiKnZlYzMoMC4zLDAuNTksMC4xMSk7XG5hbHBoYSo9KG9wYWNpdHlNYXAueCtvcGFj
aXR5TWFwLnkrb3BhY2l0eU1hcC56KSogdk9wYWNpdHlJbmZvcy55O1xuI2Vsc2VcbmFscGhhKj1v
cGFjaXR5TWFwLmEqdk9wYWNpdHlJbmZvcy55O1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBWRVJU
RVhBTFBIQVxuYWxwaGEqPXZDb2xvci5hO1xuI2VuZGlmXG4jaWZkZWYgT1BBQ0lUWUZSRVNORUxc
bmZsb2F0IG9wYWNpdHlGcmVzbmVsVGVybT1jb21wdXRlRnJlc25lbFRlcm0odmlld0RpcmVjdGlv
blcsbm9ybWFsVyxvcGFjaXR5UGFydHMueixvcGFjaXR5UGFydHMudyk7XG5hbHBoYSs9b3BhY2l0
eVBhcnRzLngqKDEuMC1vcGFjaXR5RnJlc25lbFRlcm0pK29wYWNpdHlGcmVzbmVsVGVybSpvcGFj
aXR5UGFydHMueTtcbiNlbmRpZlxuXG52ZWMzIGVtaXNzaXZlQ29sb3I9dkVtaXNzaXZlQ29sb3I7
XG4jaWZkZWYgRU1JU1NJVkVcbmVtaXNzaXZlQ29sb3IrPXRleHR1cmUyRChlbWlzc2l2ZVNhbXBs
ZXIsdkVtaXNzaXZlVVYrdXZPZmZzZXQpLnJnYip2RW1pc3NpdmVJbmZvcy55O1xuI2VuZGlmXG4j
aWZkZWYgRU1JU1NJVkVGUkVTTkVMXG5mbG9hdCBlbWlzc2l2ZUZyZXNuZWxUZXJtPWNvbXB1dGVG
cmVzbmVsVGVybSh2aWV3RGlyZWN0aW9uVyxub3JtYWxXLGVtaXNzaXZlUmlnaHRDb2xvci5hLGVt
aXNzaXZlTGVmdENvbG9yLmEpO1xuZW1pc3NpdmVDb2xvcio9ZW1pc3NpdmVMZWZ0Q29sb3Iucmdi
KigxLjAtZW1pc3NpdmVGcmVzbmVsVGVybSkrZW1pc3NpdmVGcmVzbmVsVGVybSplbWlzc2l2ZVJp
Z2h0Q29sb3IucmdiO1xuI2VuZGlmXG5cbiNpZmRlZiBESUZGVVNFRlJFU05FTFxuZmxvYXQgZGlm
ZnVzZUZyZXNuZWxUZXJtPWNvbXB1dGVGcmVzbmVsVGVybSh2aWV3RGlyZWN0aW9uVyxub3JtYWxX
LGRpZmZ1c2VSaWdodENvbG9yLmEsZGlmZnVzZUxlZnRDb2xvci5hKTtcbmRpZmZ1c2VCYXNlKj1k
aWZmdXNlTGVmdENvbG9yLnJnYiooMS4wLWRpZmZ1c2VGcmVzbmVsVGVybSkrZGlmZnVzZUZyZXNu
ZWxUZXJtKmRpZmZ1c2VSaWdodENvbG9yLnJnYjtcbiNlbmRpZlxuXG4jaWZkZWYgRU1JU1NJVkVB
U0lMTFVNSU5BVElPTlxudmVjMyBmaW5hbERpZmZ1c2U9Y2xhbXAoZGlmZnVzZUJhc2UqZGlmZnVz
ZUNvbG9yK3ZBbWJpZW50Q29sb3IsMC4wLDEuMCkqYmFzZUNvbG9yLnJnYjtcbiNlbHNlXG4jaWZk
ZWYgTElOS0VNSVNTSVZFV0lUSERJRkZVU0VcbnZlYzMgZmluYWxEaWZmdXNlPWNsYW1wKChkaWZm
dXNlQmFzZStlbWlzc2l2ZUNvbG9yKSpkaWZmdXNlQ29sb3IrdkFtYmllbnRDb2xvciwwLjAsMS4w
KSpiYXNlQ29sb3IucmdiO1xuI2Vsc2VcbnZlYzMgZmluYWxEaWZmdXNlPWNsYW1wKGRpZmZ1c2VC
YXNlKmRpZmZ1c2VDb2xvcitlbWlzc2l2ZUNvbG9yK3ZBbWJpZW50Q29sb3IsMC4wLDEuMCkqYmFz
ZUNvbG9yLnJnYjtcbiNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgU1BFQ1VMQVJURVJNXG52ZWMzIGZp
bmFsU3BlY3VsYXI9c3BlY3VsYXJCYXNlKnNwZWN1bGFyQ29sb3I7XG4jaWZkZWYgU1BFQ1VMQVJP
VkVSQUxQSEFcbmFscGhhPWNsYW1wKGFscGhhK2RvdChmaW5hbFNwZWN1bGFyLHZlYzMoMC4zLDAu
NTksMC4xMSkpLDAuLDEuKTtcbiNlbmRpZlxuI2Vsc2VcbnZlYzMgZmluYWxTcGVjdWxhcj12ZWMz
KDAuMCk7XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9OT1ZFUkFMUEhBXG5hbHBoYT1jbGFtcChh
bHBoYStkb3QocmVmbGVjdGlvbkNvbG9yLHZlYzMoMC4zLDAuNTksMC4xMSkpLDAuLDEuKTtcbiNl
bmRpZlxuXG4jaWZkZWYgRU1JU1NJVkVBU0lMTFVNSU5BVElPTlxudmVjNCBjb2xvcj12ZWM0KGNs
YW1wKGZpbmFsRGlmZnVzZSpiYXNlQW1iaWVudENvbG9yK2ZpbmFsU3BlY3VsYXIrcmVmbGVjdGlv
bkNvbG9yK2VtaXNzaXZlQ29sb3IrcmVmcmFjdGlvbkNvbG9yLDAuMCwxLjApLGFscGhhKTtcbiNl
bHNlXG52ZWM0IGNvbG9yPXZlYzQoZmluYWxEaWZmdXNlKmJhc2VBbWJpZW50Q29sb3IrZmluYWxT
cGVjdWxhcityZWZsZWN0aW9uQ29sb3IrcmVmcmFjdGlvbkNvbG9yLGFscGhhKTtcbiNlbmRpZlxu
XG4jaWZkZWYgTElHSFRNQVBcbiNpZm5kZWYgTElHSFRNQVBFWENMVURFRFxuI2lmZGVmIFVTRUxJ
R0hUTUFQQVNTSEFET1dNQVBcbmNvbG9yLnJnYio9bGlnaHRtYXBDb2xvcjtcbiNlbHNlXG5jb2xv
ci5yZ2IrPWxpZ2h0bWFwQ29sb3I7XG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlmXG4jZGVmaW5lIENV
U1RPTV9GUkFHTUVOVF9CRUZPUkVfRk9HXG5jb2xvci5yZ2I9bWF4KGNvbG9yLnJnYiwwLik7XG4j
aW5jbHVkZTxsb2dEZXB0aEZyYWdtZW50PlxuI2luY2x1ZGU8Zm9nRnJhZ21lbnQ+XG5cblxuI2lm
ZGVmIElNQUdFUFJPQ0VTU0lOR1BPU1RQUk9DRVNTXG5jb2xvci5yZ2I9dG9MaW5lYXJTcGFjZShj
b2xvci5yZ2IpO1xuI2Vsc2VcbiNpZmRlZiBJTUFHRVBST0NFU1NJTkdcbmNvbG9yLnJnYj10b0xp
bmVhclNwYWNlKGNvbG9yLnJnYik7XG5jb2xvcj1hcHBseUltYWdlUHJvY2Vzc2luZyhjb2xvcik7
XG4jZW5kaWZcbiNlbmRpZlxuY29sb3IuYSo9dmlzaWJpbGl0eTtcbiNpZmRlZiBQUkVNVUxUSVBM
WUFMUEhBXG5cbmNvbG9yLnJnYio9Y29sb3IuYTtcbiNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJB
R01FTlRfQkVGT1JFX0ZSQUdDT0xPUlxuZ2xfRnJhZ0NvbG9yPWNvbG9yO1xufVxuIjsKK19NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRl
cnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZGVmYXVsdFBpeGVs
U2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9TaGFkZXJzL2RlZmF1bHQudmVydGV4LnRzIjoKKy8qISoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL2RlZmF1bHQudmVydGV4
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IGRlZmF1bHRWZXJ0ZXhTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiZGVmYXVsdFZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gZGVmYXVsdFZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9kZWZhdWx0VmVy
dGV4RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvZGVmYXVsdFZlcnRleERlY2xhcmF0aW9uICov
ICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZGVmYXVsdFZlcnRleERlY2xhcmF0aW9uLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2RlZmF1bHRVYm9EZWNs
YXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0VWJvRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVy
cy9TaGFkZXJzSW5jbHVkZS9kZWZhdWx0VWJvRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVscGVyRnVuY3Rpb25zX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNs
dWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1
bmN0aW9ucy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9i
b25lc0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRpb24gKi8gIi4vU2hh
ZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2luc3RhbmNlc0RlY2xhcmF0aW9uX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJ
bmNsdWRlL2luc3RhbmNlc0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
aW5zdGFuY2VzRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hh
ZGVyc0luY2x1ZGVfYnVtcFZlcnRleERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2J1bXBWZXJ0
ZXhEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2J1bXBWZXJ0ZXhEZWNs
YXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9j
bGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVWZXJ0ZXhE
ZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleERl
Y2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRl
X2ZvZ1ZlcnRleERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2ZvZ1ZlcnRleERlY2xhcmF0aW9u
ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZm9nVmVydGV4RGVjbGFyYXRpb24udHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbGlnaHRGcmFnbWVudERl
Y2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2xpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbiAqLyAiLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbi50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9saWdodFVib0RlY2xhcmF0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9TaGFkZXJzSW5jbHVkZS9saWdodFVib0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvbGlnaHRVYm9EZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
U2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFyYXRpb24gKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlv
bi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRh
cmdldHNWZXJ0ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4
RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0
ZXhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5j
bHVkZV9sb2dEZXB0aERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aERlY2xhcmF0
aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbG9nRGVwdGhEZWNsYXJhdGlvbi50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNW
ZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleCAqLyAiLi9TaGFkZXJzL1No
YWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbnN0YW5jZXNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2lu
c3RhbmNlc1ZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc1ZlcnRl
eC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9ib25lc1Zl
cnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vU2hhZGVyc0luY2x1ZGUvYm9uZXNWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9ib25lc1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJz
SW5jbHVkZV9idW1wVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9idW1wVmVydGV4ICovICIuL1NoYWRl
cnMvU2hhZGVyc0luY2x1ZGUvYnVtcFZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2NsaXBQ
bGFuZVZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9mb2dWZXJ0ZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L1NoYWRlcnNJbmNsdWRlL2ZvZ1ZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2Zv
Z1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9z
aGFkb3dzVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9zaGFkb3dzVmVydGV4ICovICIuL1NoYWRlcnMv
U2hhZGVyc0luY2x1ZGUvc2hhZG93c1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzSW5jbHVkZV9wb2ludENsb3VkVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9wb2lu
dENsb3VkVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcG9pbnRDbG91ZFZlcnRl
eC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0
aFZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbG9nRGVwdGhWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFk
ZXJzSW5jbHVkZS9sb2dEZXB0aFZlcnRleC50cyIpOworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisKKworCisKK3ZhciBuYW1lID0gJ2RlZmF1bHRWZXJ0ZXhTaGFkZXInOwor
dmFyIHNoYWRlciA9ICIjaW5jbHVkZTxfX2RlY2xfX2RlZmF1bHRWZXJ0ZXg+XG5cbiNkZWZpbmUg
Q1VTVE9NX1ZFUlRFWF9CRUdJTlxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG4jaWZkZWYgTk9S
TUFMXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBUQU5HRU5UXG5hdHRy
aWJ1dGUgdmVjNCB0YW5nZW50O1xuI2VuZGlmXG4jaWZkZWYgVVYxXG5hdHRyaWJ1dGUgdmVjMiB1
djtcbiNlbmRpZlxuI2lmZGVmIFVWMlxuYXR0cmlidXRlIHZlYzIgdXYyO1xuI2VuZGlmXG4jaWZk
ZWYgVkVSVEVYQ09MT1JcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuI2VuZGlmXG4jaW5jbHVkZTxo
ZWxwZXJGdW5jdGlvbnM+XG4jaW5jbHVkZTxib25lc0RlY2xhcmF0aW9uPlxuXG4jaW5jbHVkZTxp
bnN0YW5jZXNEZWNsYXJhdGlvbj5cbiNpZmRlZiBNQUlOVVYxXG52YXJ5aW5nIHZlYzIgdk1haW5V
VjE7XG4jZW5kaWZcbiNpZmRlZiBNQUlOVVYyXG52YXJ5aW5nIHZlYzIgdk1haW5VVjI7XG4jZW5k
aWZcbiNpZiBkZWZpbmVkKERJRkZVU0UpICYmIERJRkZVU0VESVJFQ1RVViA9PSAwXG52YXJ5aW5n
IHZlYzIgdkRpZmZ1c2VVVjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoQU1CSUVOVCkgJiYgQU1CSUVO
VERJUkVDVFVWID09IDBcbnZhcnlpbmcgdmVjMiB2QW1iaWVudFVWO1xuI2VuZGlmXG4jaWYgZGVm
aW5lZChPUEFDSVRZKSAmJiBPUEFDSVRZRElSRUNUVVYgPT0gMFxudmFyeWluZyB2ZWMyIHZPcGFj
aXR5VVY7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKEVNSVNTSVZFKSAmJiBFTUlTU0lWRURJUkVDVFVW
ID09IDBcbnZhcnlpbmcgdmVjMiB2RW1pc3NpdmVVVjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoTElH
SFRNQVApICYmIExJR0hUTUFQRElSRUNUVVYgPT0gMFxudmFyeWluZyB2ZWMyIHZMaWdodG1hcFVW
O1xuI2VuZGlmXG4jaWYgZGVmaW5lZChTUEVDVUxBUikgJiYgZGVmaW5lZChTUEVDVUxBUlRFUk0p
ICYmIFNQRUNVTEFSRElSRUNUVVYgPT0gMFxudmFyeWluZyB2ZWMyIHZTcGVjdWxhclVWO1xuI2Vu
ZGlmXG4jaWYgZGVmaW5lZChCVU1QKSAmJiBCVU1QRElSRUNUVVYgPT0gMFxudmFyeWluZyB2ZWMy
IHZCdW1wVVY7XG4jZW5kaWZcblxudmFyeWluZyB2ZWMzIHZQb3NpdGlvblc7XG4jaWZkZWYgTk9S
TUFMXG52YXJ5aW5nIHZlYzMgdk5vcm1hbFc7XG4jZW5kaWZcbiNpZmRlZiBWRVJURVhDT0xPUlxu
dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbmRpZlxuI2luY2x1ZGU8YnVtcFZlcnRleERlY2xhcmF0
aW9uPlxuI2luY2x1ZGU8Y2xpcFBsYW5lVmVydGV4RGVjbGFyYXRpb24+XG4jaW5jbHVkZTxmb2dW
ZXJ0ZXhEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPF9fZGVjbF9fbGlnaHRGcmFnbWVudD5bMC4ubWF4
U2ltdWx0YW5lb3VzTGlnaHRzXVxuI2luY2x1ZGU8bW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVj
bGFyYXRpb24+XG4jaW5jbHVkZTxtb3JwaFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbj5bMC4ubWF4
U2ltdWx0YW5lb3VzTW9ycGhUYXJnZXRzXVxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfU0tZQk9YXG52
YXJ5aW5nIHZlYzMgdlBvc2l0aW9uVVZXO1xuI2VuZGlmXG4jaWYgZGVmaW5lZChSRUZMRUNUSU9O
TUFQX0VRVUlSRUNUQU5HVUxBUl9GSVhFRCkgfHwgZGVmaW5lZChSRUZMRUNUSU9OTUFQX01JUlJP
UkVERVFVSVJFQ1RBTkdVTEFSX0ZJWEVEKVxudmFyeWluZyB2ZWMzIHZEaXJlY3Rpb25XO1xuI2Vu
ZGlmXG4jaW5jbHVkZTxsb2dEZXB0aERlY2xhcmF0aW9uPlxuI2RlZmluZSBDVVNUT01fVkVSVEVY
X0RFRklOSVRJT05TXG52b2lkIG1haW4odm9pZCkge1xuI2RlZmluZSBDVVNUT01fVkVSVEVYX01B
SU5fQkVHSU5cbnZlYzMgcG9zaXRpb25VcGRhdGVkPXBvc2l0aW9uO1xuI2lmZGVmIE5PUk1BTFxu
dmVjMyBub3JtYWxVcGRhdGVkPW5vcm1hbDtcbiNlbmRpZlxuI2lmZGVmIFRBTkdFTlRcbnZlYzQg
dGFuZ2VudFVwZGF0ZWQ9dGFuZ2VudDtcbiNlbmRpZlxuI2lmZGVmIFVWMVxudmVjMiB1dlVwZGF0
ZWQ9dXY7XG4jZW5kaWZcbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleD5bMC4ubWF4U2ltdWx0
YW5lb3VzTW9ycGhUYXJnZXRzXVxuI2lmZGVmIFJFRkxFQ1RJT05NQVBfU0tZQk9YXG4jaWZkZWYg
UkVGTEVDVElPTk1BUF9TS1lCT1hfVFJBTlNGT1JNRURcbnZQb3NpdGlvblVWVz0ocmVmbGVjdGlv
bk1hdHJpeCp2ZWM0KHBvc2l0aW9uVXBkYXRlZCwxLjApKS54eXo7XG4jZWxzZVxudlBvc2l0aW9u
VVZXPXBvc2l0aW9uVXBkYXRlZDtcbiNlbmRpZlxuI2VuZGlmXG4jZGVmaW5lIENVU1RPTV9WRVJU
RVhfVVBEQVRFX1BPU0lUSU9OXG4jZGVmaW5lIENVU1RPTV9WRVJURVhfVVBEQVRFX05PUk1BTFxu
I2luY2x1ZGU8aW5zdGFuY2VzVmVydGV4PlxuI2luY2x1ZGU8Ym9uZXNWZXJ0ZXg+XG52ZWM0IHdv
cmxkUG9zPWZpbmFsV29ybGQqdmVjNChwb3NpdGlvblVwZGF0ZWQsMS4wKTtcbiNpZmRlZiBNVUxU
SVZJRVdcbmlmIChnbF9WaWV3SURfT1ZSID09IDB1KSB7XG5nbF9Qb3NpdGlvbj12aWV3UHJvamVj
dGlvbip3b3JsZFBvcztcbn0gZWxzZSB7XG5nbF9Qb3NpdGlvbj12aWV3UHJvamVjdGlvblIqd29y
bGRQb3M7XG59XG4jZWxzZVxuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb24qd29ybGRQb3M7XG4j
ZW5kaWZcbnZQb3NpdGlvblc9dmVjMyh3b3JsZFBvcyk7XG4jaWZkZWYgTk9STUFMXG5tYXQzIG5v
cm1hbFdvcmxkPW1hdDMoZmluYWxXb3JsZCk7XG4jaWZkZWYgTk9OVU5JRk9STVNDQUxJTkdcbm5v
cm1hbFdvcmxkPXRyYW5zcG9zZU1hdDMoaW52ZXJzZU1hdDMobm9ybWFsV29ybGQpKTtcbiNlbmRp
Zlxudk5vcm1hbFc9bm9ybWFsaXplKG5vcm1hbFdvcmxkKm5vcm1hbFVwZGF0ZWQpO1xuI2VuZGlm
XG4jaWYgZGVmaW5lZChSRUZMRUNUSU9OTUFQX0VRVUlSRUNUQU5HVUxBUl9GSVhFRCkgfHwgZGVm
aW5lZChSRUZMRUNUSU9OTUFQX01JUlJPUkVERVFVSVJFQ1RBTkdVTEFSX0ZJWEVEKVxudkRpcmVj
dGlvblc9bm9ybWFsaXplKHZlYzMoZmluYWxXb3JsZCp2ZWM0KHBvc2l0aW9uVXBkYXRlZCwwLjAp
KSk7XG4jZW5kaWZcblxuI2lmbmRlZiBVVjFcbnZlYzIgdXZVcGRhdGVkPXZlYzIoMC4sMC4pO1xu
I2VuZGlmXG4jaWZuZGVmIFVWMlxudmVjMiB1djI9dmVjMigwLiwwLik7XG4jZW5kaWZcbiNpZmRl
ZiBNQUlOVVYxXG52TWFpblVWMT11dlVwZGF0ZWQ7XG4jZW5kaWZcbiNpZmRlZiBNQUlOVVYyXG52
TWFpblVWMj11djI7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKERJRkZVU0UpICYmIERJRkZVU0VESVJF
Q1RVViA9PSAwXG5pZiAodkRpZmZ1c2VJbmZvcy54ID09IDAuKVxue1xudkRpZmZ1c2VVVj12ZWMy
KGRpZmZ1c2VNYXRyaXgqdmVjNCh1dlVwZGF0ZWQsMS4wLDAuMCkpO1xufVxuZWxzZVxue1xudkRp
ZmZ1c2VVVj12ZWMyKGRpZmZ1c2VNYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2VuZGlm
XG4jaWYgZGVmaW5lZChBTUJJRU5UKSAmJiBBTUJJRU5URElSRUNUVVYgPT0gMFxuaWYgKHZBbWJp
ZW50SW5mb3MueCA9PSAwLilcbntcbnZBbWJpZW50VVY9dmVjMihhbWJpZW50TWF0cml4KnZlYzQo
dXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZBbWJpZW50VVY9dmVjMihhbWJpZW50
TWF0cml4KnZlYzQodXYyLDEuMCwwLjApKTtcbn1cbiNlbmRpZlxuI2lmIGRlZmluZWQoT1BBQ0lU
WSkgJiYgT1BBQ0lUWURJUkVDVFVWID09IDBcbmlmICh2T3BhY2l0eUluZm9zLnggPT0gMC4pXG57
XG52T3BhY2l0eVVWPXZlYzIob3BhY2l0eU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7
XG59XG5lbHNlXG57XG52T3BhY2l0eVVWPXZlYzIob3BhY2l0eU1hdHJpeCp2ZWM0KHV2MiwxLjAs
MC4wKSk7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKEVNSVNTSVZFKSAmJiBFTUlTU0lWRURJUkVD
VFVWID09IDBcbmlmICh2RW1pc3NpdmVJbmZvcy54ID09IDAuKVxue1xudkVtaXNzaXZlVVY9dmVj
MihlbWlzc2l2ZU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52
RW1pc3NpdmVVVj12ZWMyKGVtaXNzaXZlTWF0cml4KnZlYzQodXYyLDEuMCwwLjApKTtcbn1cbiNl
bmRpZlxuI2lmIGRlZmluZWQoTElHSFRNQVApICYmIExJR0hUTUFQRElSRUNUVVYgPT0gMFxuaWYg
KHZMaWdodG1hcEluZm9zLnggPT0gMC4pXG57XG52TGlnaHRtYXBVVj12ZWMyKGxpZ2h0bWFwTWF0
cml4KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZMaWdodG1hcFVWPXZl
YzIobGlnaHRtYXBNYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2VuZGlmXG4jaWYgZGVm
aW5lZChTUEVDVUxBUikgJiYgZGVmaW5lZChTUEVDVUxBUlRFUk0pICYmIFNQRUNVTEFSRElSRUNU
VVYgPT0gMFxuaWYgKHZTcGVjdWxhckluZm9zLnggPT0gMC4pXG57XG52U3BlY3VsYXJVVj12ZWMy
KHNwZWN1bGFyTWF0cml4KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZT
cGVjdWxhclVWPXZlYzIoc3BlY3VsYXJNYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2Vu
ZGlmXG4jaWYgZGVmaW5lZChCVU1QKSAmJiBCVU1QRElSRUNUVVYgPT0gMFxuaWYgKHZCdW1wSW5m
b3MueCA9PSAwLilcbntcbnZCdW1wVVY9dmVjMihidW1wTWF0cml4KnZlYzQodXZVcGRhdGVkLDEu
MCwwLjApKTtcbn1cbmVsc2VcbntcbnZCdW1wVVY9dmVjMihidW1wTWF0cml4KnZlYzQodXYyLDEu
MCwwLjApKTtcbn1cbiNlbmRpZlxuI2luY2x1ZGU8YnVtcFZlcnRleD5cbiNpbmNsdWRlPGNsaXBQ
bGFuZVZlcnRleD5cbiNpbmNsdWRlPGZvZ1ZlcnRleD5cbiNpbmNsdWRlPHNoYWRvd3NWZXJ0ZXg+
WzAuLm1heFNpbXVsdGFuZW91c0xpZ2h0c11cbiNpZmRlZiBWRVJURVhDT0xPUlxuXG52Q29sb3I9
Y29sb3I7XG4jZW5kaWZcbiNpbmNsdWRlPHBvaW50Q2xvdWRWZXJ0ZXg+XG4jaW5jbHVkZTxsb2dE
ZXB0aFZlcnRleD5cbiNkZWZpbmUgQ1VTVE9NX1ZFUlRFWF9NQUlOX0VORFxufVxuIjsKK19NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRl
cnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZGVmYXVsdFZlcnRl
eFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vU2hhZGVycy9kZXB0aC5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9kZXB0aC5mcmFnbWVu
dC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBkZXB0aFBpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgImRlcHRoUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRl
cHRoUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
ZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfcGFja2luZ0Z1bmN0aW9uc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9T
aGFkZXJzSW5jbHVkZS9wYWNraW5nRnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1
ZGUvcGFja2luZ0Z1bmN0aW9ucy50cyIpOworCisKK3ZhciBuYW1lID0gJ2RlcHRoUGl4ZWxTaGFk
ZXInOwordmFyIHNoYWRlciA9ICIjaWZkZWYgQUxQSEFURVNUXG52YXJ5aW5nIHZlYzIgdlVWO1xu
dW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZVNhbXBsZXI7XG4jZW5kaWZcbnZhcnlpbmcgZmxvYXQg
dkRlcHRoTWV0cmljO1xuI2lmZGVmIFBBQ0tFRFxuI2luY2x1ZGU8cGFja2luZ0Z1bmN0aW9ucz5c
biNlbmRpZlxudm9pZCBtYWluKHZvaWQpXG57XG4jaWZkZWYgQUxQSEFURVNUXG5pZiAodGV4dHVy
ZTJEKGRpZmZ1c2VTYW1wbGVyLHZVVikuYTwwLjQpXG5kaXNjYXJkO1xuI2VuZGlmXG4jaWZkZWYg
Tk9OTElORUFSREVQVEhcbiNpZmRlZiBQQUNLRURcbmdsX0ZyYWdDb2xvcj1wYWNrKGdsX0ZyYWdD
b29yZC56KTtcbiNlbHNlXG5nbF9GcmFnQ29sb3I9dmVjNChnbF9GcmFnQ29vcmQueiwwLjAsMC4w
LDAuMCk7XG4jZW5kaWZcbiNlbHNlXG4jaWZkZWYgUEFDS0VEXG5nbF9GcmFnQ29sb3I9cGFjayh2
RGVwdGhNZXRyaWMpO1xuI2Vsc2VcbmdsX0ZyYWdDb2xvcj12ZWM0KHZEZXB0aE1ldHJpYywwLjAs
MC4wLDEuMCk7XG4jZW5kaWZcbiNlbmRpZlxufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFk
ZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGRlcHRoUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUs
IHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvZGVw
dGgudmVydGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAor
ICAhKioqIC4vU2hhZGVycy9kZXB0aC52ZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGRlcHRoVmVydGV4U2hh
ZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImRlcHRoVmVydGV4U2hh
ZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZXB0aFZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8g
Ii4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzSW5jbHVkZV9ib25lc0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRp
b24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc0RlY2xhcmF0aW9uLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX21vcnBoVGFyZ2V0c1ZlcnRl
eEdsb2JhbERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleEdsb2Jh
bERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVy
dGV4R2xvYmFsRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hh
ZGVyc0luY2x1ZGVfbW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUv
bW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVk
ZS9tb3JwaFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbnN0YW5jZXNEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9pbnN0YW5jZXNEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2luc3Rh
bmNlc0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJ
bmNsdWRlX21vcnBoVGFyZ2V0c1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0
ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXgudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW5zdGFuY2VzVmVydGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc1ZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL2luc3RhbmNlc1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzSW5jbHVkZV9ib25lc1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9ib25lc1ZlcnRleCAqLyAiLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2JvbmVzVmVydGV4LnRzIik7CisKKworCisKKworCisKKwor
dmFyIG5hbWUgPSAnZGVwdGhWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbmF0dHJpYnV0
ZSB2ZWMzIHBvc2l0aW9uO1xuI2luY2x1ZGU8Ym9uZXNEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPG1v
cnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9uPlxuI2luY2x1ZGU8bW9ycGhUYXJnZXRz
VmVydGV4RGVjbGFyYXRpb24+WzAuLm1heFNpbXVsdGFuZW91c01vcnBoVGFyZ2V0c11cblxuI2lu
Y2x1ZGU8aW5zdGFuY2VzRGVjbGFyYXRpb24+XG51bmlmb3JtIG1hdDQgdmlld1Byb2plY3Rpb247
XG51bmlmb3JtIHZlYzIgZGVwdGhWYWx1ZXM7XG4jaWYgZGVmaW5lZChBTFBIQVRFU1QpIHx8IGRl
ZmluZWQoTkVFRF9VVilcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIG1hdDQgZGlmZnVzZU1h
dHJpeDtcbiNpZmRlZiBVVjFcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuI2VuZGlmXG4jaWZkZWYgVVYy
XG5hdHRyaWJ1dGUgdmVjMiB1djI7XG4jZW5kaWZcbiNlbmRpZlxudmFyeWluZyBmbG9hdCB2RGVw
dGhNZXRyaWM7XG52b2lkIG1haW4odm9pZClcbntcbnZlYzMgcG9zaXRpb25VcGRhdGVkPXBvc2l0
aW9uO1xuI2lmZGVmIFVWMVxudmVjMiB1dlVwZGF0ZWQ9dXY7XG4jZW5kaWZcbiNpbmNsdWRlPG1v
cnBoVGFyZ2V0c1ZlcnRleD5bMC4ubWF4U2ltdWx0YW5lb3VzTW9ycGhUYXJnZXRzXVxuI2luY2x1
ZGU8aW5zdGFuY2VzVmVydGV4PlxuI2luY2x1ZGU8Ym9uZXNWZXJ0ZXg+XG5nbF9Qb3NpdGlvbj12
aWV3UHJvamVjdGlvbipmaW5hbFdvcmxkKnZlYzQocG9zaXRpb25VcGRhdGVkLDEuMCk7XG52RGVw
dGhNZXRyaWM9KChnbF9Qb3NpdGlvbi56K2RlcHRoVmFsdWVzLngpLyhkZXB0aFZhbHVlcy55KSk7
XG4jaWYgZGVmaW5lZChBTFBIQVRFU1QpIHx8IGRlZmluZWQoQkFTSUNfUkVOREVSKVxuI2lmZGVm
IFVWMVxudlVWPXZlYzIoZGlmZnVzZU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG4j
ZW5kaWZcbiNpZmRlZiBVVjJcbnZVVj12ZWMyKGRpZmZ1c2VNYXRyaXgqdmVjNCh1djIsMS4wLDAu
MCkpO1xuI2VuZGlmXG4jZW5kaWZcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7
CisvKiogQGhpZGRlbiAqLwordmFyIGRlcHRoVmVydGV4U2hhZGVyID0geyBuYW1lOiBuYW1lLCBz
aGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2RlcHRo
Qm94Qmx1ci5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvZGVwdGhCb3hCbHVyLmZyYWdtZW50LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8q
ISBleHBvcnRzIHByb3ZpZGVkOiBkZXB0aEJveEJsdXJQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJkZXB0aEJveEJsdXJQaXhlbFNoYWRlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gZGVwdGhCb3hCbHVyUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01h
dGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnZGVwdGhCb3hCbHVyUGl4ZWxTaGFk
ZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIy
RCB0ZXh0dXJlU2FtcGxlcjtcblxudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XG52b2lkIG1haW4o
dm9pZClcbntcbnZlYzQgY29sb3JEZXB0aD12ZWM0KDAuMCk7XG5mb3IgKGludCB4PS1PRkZTRVQ7
IHg8PU9GRlNFVDsgeCsrKVxuZm9yIChpbnQgeT0tT0ZGU0VUOyB5PD1PRkZTRVQ7IHkrKylcbmNv
bG9yRGVwdGgrPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMih4LHkpL3NjcmVlblNp
emUpO1xuZ2xfRnJhZ0NvbG9yPShjb2xvckRlcHRoL2Zsb2F0KChPRkZTRVQqMisxKSooT0ZGU0VU
KjIrMSkpKTtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4g
Ki8KK3ZhciBkZXB0aEJveEJsdXJQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBz
aGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9kZXB0aE9mRmllbGQu
ZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9TaGFkZXJzL2RlcHRoT2ZGaWVsZC5mcmFnbWVudC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogZGVwdGhPZkZpZWxkUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbiht
b2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVz
ZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiZGVwdGhPZkZpZWxkUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIGRlcHRoT2ZGaWVsZFBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMv
ZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2RlcHRoT2ZGaWVsZFBpeGVsU2hhZGVyJzsKK3Zh
ciBzaGFkZXIgPSAiXG5cblxuXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmVTYW1wbGVyO1xu
dW5pZm9ybSBzYW1wbGVyMkQgaGlnaGxpZ2h0c1NhbXBsZXI7XG51bmlmb3JtIHNhbXBsZXIyRCBk
ZXB0aFNhbXBsZXI7XG51bmlmb3JtIHNhbXBsZXIyRCBncmFpblNhbXBsZXI7XG5cbnVuaWZvcm0g
ZmxvYXQgZ3JhaW5fYW1vdW50O1xudW5pZm9ybSBib29sIGJsdXJfbm9pc2U7XG51bmlmb3JtIGZs
b2F0IHNjcmVlbl93aWR0aDtcbnVuaWZvcm0gZmxvYXQgc2NyZWVuX2hlaWdodDtcbnVuaWZvcm0g
ZmxvYXQgZGlzdG9ydGlvbjtcbnVuaWZvcm0gYm9vbCBkb2ZfZW5hYmxlZDtcblxudW5pZm9ybSBm
bG9hdCBzY3JlZW5fZGlzdGFuY2U7XG51bmlmb3JtIGZsb2F0IGFwZXJ0dXJlO1xudW5pZm9ybSBm
bG9hdCBkYXJrZW47XG51bmlmb3JtIGZsb2F0IGVkZ2VfYmx1cjtcbnVuaWZvcm0gYm9vbCBoaWdo
bGlnaHRzO1xuXG51bmlmb3JtIGZsb2F0IG5lYXI7XG51bmlmb3JtIGZsb2F0IGZhcjtcblxudmFy
eWluZyB2ZWMyIHZVVjtcblxuI2RlZmluZSBQSSAzLjE0MTU5MjY1XG4jZGVmaW5lIFRXT1BJIDYu
MjgzMTg1MzBcbiNkZWZpbmUgaW52ZXJzZV9mb2NhbF9sZW5ndGggMC4xXG5cbnZlYzIgY2VudGVy
ZWRfc2NyZWVuX3BvcztcbnZlYzIgZGlzdG9ydGVkX2Nvb3JkcztcbmZsb2F0IHJhZGl1czI7XG5m
bG9hdCByYWRpdXM7XG5cbnZlYzIgcmFuZCh2ZWMyIGNvKVxue1xuZmxvYXQgbm9pc2UxPShmcmFj
dChzaW4oZG90KGNvLHZlYzIoMTIuOTg5OCw3OC4yMzMpKSkqNDM3NTguNTQ1MykpO1xuZmxvYXQg
bm9pc2UyPShmcmFjdChzaW4oZG90KGNvLHZlYzIoMTIuOTg5OCw3OC4yMzMpKjIuMCkpKjQzNzU4
LjU0NTMpKTtcbnJldHVybiBjbGFtcCh2ZWMyKG5vaXNlMSxub2lzZTIpLDAuMCwxLjApO1xufVxu
XG52ZWMyIGdldERpc3RvcnRlZENvb3Jkcyh2ZWMyIGNvb3Jkcykge1xuaWYgKGRpc3RvcnRpb24g
PT0gMC4wKSB7IHJldHVybiBjb29yZHM7IH1cbnZlYzIgZGlyZWN0aW9uPTEuMCpub3JtYWxpemUo
Y2VudGVyZWRfc2NyZWVuX3Bvcyk7XG52ZWMyIGRpc3RfY29vcmRzPXZlYzIoMC41LDAuNSk7XG5k
aXN0X2Nvb3Jkcy54PTAuNStkaXJlY3Rpb24ueCpyYWRpdXMyKjEuMDtcbmRpc3RfY29vcmRzLnk9
MC41K2RpcmVjdGlvbi55KnJhZGl1czIqMS4wO1xuZmxvYXQgZGlzdF9hbW91bnQ9Y2xhbXAoZGlz
dG9ydGlvbiowLjIzLDAuMCwxLjApO1xuZGlzdF9jb29yZHM9bWl4KGNvb3JkcyxkaXN0X2Nvb3Jk
cyxkaXN0X2Ftb3VudCk7XG5yZXR1cm4gZGlzdF9jb29yZHM7XG59XG5cbmZsb2F0IHNhbXBsZVNj
cmVlbihpbm91dCB2ZWM0IGNvbG9yLGNvbnN0IGluIHZlYzIgb2Zmc2V0LGNvbnN0IGluIGZsb2F0
IHdlaWdodCkge1xuXG52ZWMyIGNvb3Jkcz1kaXN0b3J0ZWRfY29vcmRzO1xuZmxvYXQgYW5nbGU9
cmFuZChjb29yZHMqMTAwLjApLngqVFdPUEk7XG5jb29yZHMrPXZlYzIob2Zmc2V0LngqY29zKGFu
Z2xlKS1vZmZzZXQueSpzaW4oYW5nbGUpLG9mZnNldC54KnNpbihhbmdsZSkrb2Zmc2V0LnkqY29z
KGFuZ2xlKSk7XG5jb2xvcis9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLGNvb3Jkcykqd2VpZ2h0
O1xucmV0dXJuIHdlaWdodDtcbn1cblxuZmxvYXQgZ2V0Qmx1ckxldmVsKGZsb2F0IHNpemUpIHtc
bnJldHVybiBtaW4oMy4wLGNlaWwoc2l6ZS8xLjApKTtcbn1cblxudmVjNCBnZXRCbHVyQ29sb3Io
ZmxvYXQgc2l6ZSkge1xudmVjNCBjb2w9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLGRpc3RvcnRl
ZF9jb29yZHMpO1xuaWYgKHNpemUgPT0gMC4wKSB7IHJldHVybiBjb2w7IH1cblxuXG5mbG9hdCBi
bHVyX2xldmVsPWdldEJsdXJMZXZlbChzaXplKTtcbmZsb2F0IHc9KHNpemUvc2NyZWVuX3dpZHRo
KTtcbmZsb2F0IGg9KHNpemUvc2NyZWVuX2hlaWdodCk7XG5mbG9hdCB0b3RhbF93ZWlnaHQ9MS4w
O1xudmVjMiBzYW1wbGVfY29vcmRzO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3JlZW4oY29sLHZl
YzIoLTAuNTAqdywwLjI0KmgpLDAuOTMpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3JlZW4oY29s
LHZlYzIoMC4zMCp3LC0wLjc1KmgpLDAuOTApO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3JlZW4o
Y29sLHZlYzIoMC4zNip3LDAuOTYqaCksMC44Nyk7XG50b3RhbF93ZWlnaHQrPXNhbXBsZVNjcmVl
bihjb2wsdmVjMigtMS4wOCp3LC0wLjU1KmgpLDAuODUpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVT
Y3JlZW4oY29sLHZlYzIoMS4zMyp3LC0wLjM3KmgpLDAuODMpO1xudG90YWxfd2VpZ2h0Kz1zYW1w
bGVTY3JlZW4oY29sLHZlYzIoLTAuODIqdywxLjMxKmgpLDAuODApO1xudG90YWxfd2VpZ2h0Kz1z
YW1wbGVTY3JlZW4oY29sLHZlYzIoLTAuMzEqdywtMS42NypoKSwwLjc4KTtcbnRvdGFsX3dlaWdo
dCs9c2FtcGxlU2NyZWVuKGNvbCx2ZWMyKDEuNDcqdywxLjExKmgpLDAuNzYpO1xudG90YWxfd2Vp
Z2h0Kz1zYW1wbGVTY3JlZW4oY29sLHZlYzIoLTEuOTcqdywwLjE5KmgpLDAuNzQpO1xudG90YWxf
d2VpZ2h0Kz1zYW1wbGVTY3JlZW4oY29sLHZlYzIoMS40Mip3LC0xLjU3KmgpLDAuNzIpO1xuaWYg
KGJsdXJfbGV2ZWw+MS4wKSB7XG50b3RhbF93ZWlnaHQrPXNhbXBsZVNjcmVlbihjb2wsdmVjMigw
LjAxKncsMi4yNSpoKSwwLjcwKTtcbnRvdGFsX3dlaWdodCs9c2FtcGxlU2NyZWVuKGNvbCx2ZWMy
KC0xLjYyKncsLTEuNzQqaCksMC42Nyk7XG50b3RhbF93ZWlnaHQrPXNhbXBsZVNjcmVlbihjb2ws
dmVjMigyLjQ5KncsMC4yMCpoKSwwLjY1KTtcbnRvdGFsX3dlaWdodCs9c2FtcGxlU2NyZWVuKGNv
bCx2ZWMyKC0yLjA3KncsMS42MSpoKSwwLjYzKTtcbnRvdGFsX3dlaWdodCs9c2FtcGxlU2NyZWVu
KGNvbCx2ZWMyKDAuNDYqdywtMi43MCpoKSwwLjYxKTtcbnRvdGFsX3dlaWdodCs9c2FtcGxlU2Ny
ZWVuKGNvbCx2ZWMyKDEuNTUqdywyLjQwKmgpLDAuNTkpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVT
Y3JlZW4oY29sLHZlYzIoLTIuODgqdywtMC43NSpoKSwwLjU2KTtcbnRvdGFsX3dlaWdodCs9c2Ft
cGxlU2NyZWVuKGNvbCx2ZWMyKDIuNzMqdywtMS40NCpoKSwwLjU0KTtcbnRvdGFsX3dlaWdodCs9
c2FtcGxlU2NyZWVuKGNvbCx2ZWMyKC0xLjA4KncsMy4wMipoKSwwLjUyKTtcbnRvdGFsX3dlaWdo
dCs9c2FtcGxlU2NyZWVuKGNvbCx2ZWMyKC0xLjI4KncsLTMuMDUqaCksMC40OSk7XG59XG5pZiAo
Ymx1cl9sZXZlbD4yLjApIHtcbnRvdGFsX3dlaWdodCs9c2FtcGxlU2NyZWVuKGNvbCx2ZWMyKDMu
MTEqdywxLjQzKmgpLDAuNDYpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3JlZW4oY29sLHZlYzIo
LTMuMzYqdywxLjA4KmgpLDAuNDQpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3JlZW4oY29sLHZl
YzIoMS44MCp3LC0zLjE2KmgpLDAuNDEpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3JlZW4oY29s
LHZlYzIoMC44Myp3LDMuNjUqaCksMC4zOCk7XG50b3RhbF93ZWlnaHQrPXNhbXBsZVNjcmVlbihj
b2wsdmVjMigtMy4xNip3LC0yLjE5KmgpLDAuMzQpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVTY3Jl
ZW4oY29sLHZlYzIoMy45Mip3LC0wLjUzKmgpLDAuMzEpO1xudG90YWxfd2VpZ2h0Kz1zYW1wbGVT
Y3JlZW4oY29sLHZlYzIoLTIuNTkqdywzLjEyKmgpLDAuMjYpO1xudG90YWxfd2VpZ2h0Kz1zYW1w
bGVTY3JlZW4oY29sLHZlYzIoLTAuMjAqdywtNC4xNSpoKSwwLjIyKTtcbnRvdGFsX3dlaWdodCs9
c2FtcGxlU2NyZWVuKGNvbCx2ZWMyKDMuMDIqdywzLjAwKmgpLDAuMTUpO1xufVxuY29sLz10b3Rh
bF93ZWlnaHQ7XG5cbmlmIChkYXJrZW4+MC4wKSB7XG5jb2wucmdiKj1jbGFtcCgwLjMsMS4wLDEu
MDUtc2l6ZSowLjUqZGFya2VuKTtcbn1cblxuXG5cblxucmV0dXJuIGNvbDtcbn1cbnZvaWQgbWFp
bih2b2lkKVxue1xuXG5jZW50ZXJlZF9zY3JlZW5fcG9zPXZlYzIodlVWLngtMC41LHZVVi55LTAu
NSk7XG5yYWRpdXMyPWNlbnRlcmVkX3NjcmVlbl9wb3MueCpjZW50ZXJlZF9zY3JlZW5fcG9zLngr
Y2VudGVyZWRfc2NyZWVuX3Bvcy55KmNlbnRlcmVkX3NjcmVlbl9wb3MueTtcbnJhZGl1cz1zcXJ0
KHJhZGl1czIpO1xuZGlzdG9ydGVkX2Nvb3Jkcz1nZXREaXN0b3J0ZWRDb29yZHModlVWKTtcbnZl
YzIgdGV4ZWxzX2Nvb3Jkcz12ZWMyKHZVVi54KnNjcmVlbl93aWR0aCx2VVYueSpzY3JlZW5faGVp
Z2h0KTtcbmZsb2F0IGRlcHRoPXRleHR1cmUyRChkZXB0aFNhbXBsZXIsZGlzdG9ydGVkX2Nvb3Jk
cykucjtcbmZsb2F0IGRpc3RhbmNlPW5lYXIrKGZhci1uZWFyKSpkZXB0aDtcbnZlYzQgY29sb3I9
dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG5cblxuZmxvYXQgY29jPWFicyhhcGVydHVy
ZSooc2NyZWVuX2Rpc3RhbmNlKihpbnZlcnNlX2ZvY2FsX2xlbmd0aC0xLjAvZGlzdGFuY2UpLTEu
MCkpO1xuXG5pZiAoZG9mX2VuYWJsZWQgPT0gZmFsc2UgfHwgY29jPDAuMDcpIHsgY29jPTAuMDsg
fVxuXG5mbG9hdCBlZGdlX2JsdXJfYW1vdW50PTAuMDtcbmlmIChlZGdlX2JsdXI+MC4wKSB7XG5l
ZGdlX2JsdXJfYW1vdW50PWNsYW1wKChyYWRpdXMqMi4wLTEuMCswLjE1KmVkZ2VfYmx1cikqMS41
LDAuMCwxLjApKjEuMztcbn1cblxuZmxvYXQgYmx1cl9hbW91bnQ9bWF4KGVkZ2VfYmx1cl9hbW91
bnQsY29jKTtcblxuaWYgKGJsdXJfYW1vdW50ID09IDAuMCkge1xuZ2xfRnJhZ0NvbG9yPXRleHR1
cmUyRCh0ZXh0dXJlU2FtcGxlcixkaXN0b3J0ZWRfY29vcmRzKTtcbn1cbmVsc2Uge1xuXG5nbF9G
cmFnQ29sb3I9Z2V0Qmx1ckNvbG9yKGJsdXJfYW1vdW50KjEuNyk7XG5cbmlmIChoaWdobGlnaHRz
KSB7XG5nbF9GcmFnQ29sb3IucmdiKz1jbGFtcChjb2MsMC4wLDEuMCkqdGV4dHVyZTJEKGhpZ2hs
aWdodHNTYW1wbGVyLGRpc3RvcnRlZF9jb29yZHMpLnJnYjtcbn1cbmlmIChibHVyX25vaXNlKSB7
XG5cbnZlYzIgbm9pc2U9cmFuZChkaXN0b3J0ZWRfY29vcmRzKSowLjAxKmJsdXJfYW1vdW50O1xu
dmVjMiBibHVycmVkX2Nvb3JkPXZlYzIoZGlzdG9ydGVkX2Nvb3Jkcy54K25vaXNlLngsZGlzdG9y
dGVkX2Nvb3Jkcy55K25vaXNlLnkpO1xuZ2xfRnJhZ0NvbG9yPTAuMDQqdGV4dHVyZTJEKHRleHR1
cmVTYW1wbGVyLGJsdXJyZWRfY29vcmQpKzAuOTYqZ2xfRnJhZ0NvbG9yO1xufVxufVxuXG5pZiAo
Z3JhaW5fYW1vdW50PjAuMCkge1xudmVjNCBncmFpbl9jb2xvcj10ZXh0dXJlMkQoZ3JhaW5TYW1w
bGVyLHRleGVsc19jb29yZHMqMC4wMDMpO1xuZ2xfRnJhZ0NvbG9yLnJnYis9KC0wLjUrZ3JhaW5f
Y29sb3IucmdiKSowLjMwKmdyYWluX2Ftb3VudDtcbn1cbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGRlcHRoT2ZGaWVsZFBpeGVsU2hhZGVy
ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9TaGFkZXJzL2RlcHRoT2ZGaWVsZE1lcmdlLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFk
ZXJzL2RlcHRoT2ZGaWVsZE1lcmdlLmZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6
IGRlcHRoT2ZGaWVsZE1lcmdlUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiZGVwdGhPZkZpZWxkTWVyZ2VQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gZGVwdGhPZkZpZWxkTWVyZ2VQaXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJp
YWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdkZXB0aE9mRmllbGRNZXJnZVBpeGVsU2hh
ZGVyJzsKK3ZhciBzaGFkZXIgPSAidW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZVNhbXBsZXI7XG52
YXJ5aW5nIHZlYzIgdlVWO1xudW5pZm9ybSBzYW1wbGVyMkQgY2lyY2xlT2ZDb25mdXNpb25TYW1w
bGVyO1xudW5pZm9ybSBzYW1wbGVyMkQgYmx1clN0ZXAwO1xuI2lmIEJMVVJfTEVWRUw+MFxudW5p
Zm9ybSBzYW1wbGVyMkQgYmx1clN0ZXAxO1xuI2VuZGlmXG4jaWYgQkxVUl9MRVZFTD4xXG51bmlm
b3JtIHNhbXBsZXIyRCBibHVyU3RlcDI7XG4jZW5kaWZcbnZvaWQgbWFpbih2b2lkKVxue1xuZmxv
YXQgY29jPXRleHR1cmUyRChjaXJjbGVPZkNvbmZ1c2lvblNhbXBsZXIsdlVWKS5yO1xuI2lmIEJM
VVJfTEVWRUwgPT0gMFxudmVjNCBvcmlnaW5hbD10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVW
KTtcbnZlYzQgYmx1cnJlZDA9dGV4dHVyZTJEKGJsdXJTdGVwMCx2VVYpO1xuZ2xfRnJhZ0NvbG9y
PW1peChvcmlnaW5hbCxibHVycmVkMCxjb2MpO1xuI2VuZGlmXG4jaWYgQkxVUl9MRVZFTCA9PSAx
XG5pZihjb2M8MC41KXtcbnZlYzQgb3JpZ2luYWw9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZV
Vik7XG52ZWM0IGJsdXJyZWQxPXRleHR1cmUyRChibHVyU3RlcDEsdlVWKTtcbmdsX0ZyYWdDb2xv
cj1taXgob3JpZ2luYWwsYmx1cnJlZDEsY29jLzAuNSk7XG59ZWxzZXtcbnZlYzQgYmx1cnJlZDA9
dGV4dHVyZTJEKGJsdXJTdGVwMCx2VVYpO1xudmVjNCBibHVycmVkMT10ZXh0dXJlMkQoYmx1clN0
ZXAxLHZVVik7XG5nbF9GcmFnQ29sb3I9bWl4KGJsdXJyZWQxLGJsdXJyZWQwLChjb2MtMC41KS8w
LjUpO1xufVxuI2VuZGlmXG4jaWYgQkxVUl9MRVZFTCA9PSAyXG5pZihjb2M8MC4zMyl7XG52ZWM0
IG9yaWdpbmFsPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xudmVjNCBibHVycmVkMj10
ZXh0dXJlMkQoYmx1clN0ZXAyLHZVVik7XG5nbF9GcmFnQ29sb3I9bWl4KG9yaWdpbmFsLGJsdXJy
ZWQyLGNvYy8wLjMzKTtcbn1lbHNlIGlmKGNvYzwwLjY2KXtcbnZlYzQgYmx1cnJlZDE9dGV4dHVy
ZTJEKGJsdXJTdGVwMSx2VVYpO1xudmVjNCBibHVycmVkMj10ZXh0dXJlMkQoYmx1clN0ZXAyLHZV
Vik7XG5nbF9GcmFnQ29sb3I9bWl4KGJsdXJyZWQyLGJsdXJyZWQxLChjb2MtMC4zMykvMC4zMyk7
XG59ZWxzZXtcbnZlYzQgYmx1cnJlZDA9dGV4dHVyZTJEKGJsdXJTdGVwMCx2VVYpO1xudmVjNCBi
bHVycmVkMT10ZXh0dXJlMkQoYmx1clN0ZXAxLHZVVik7XG5nbF9GcmFnQ29sb3I9bWl4KGJsdXJy
ZWQxLGJsdXJyZWQwLChjb2MtMC42NikvMC4zNCk7XG59XG4jZW5kaWZcbn1cbiI7CitfTWF0ZXJp
YWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJz
U3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGRlcHRoT2ZGaWVsZE1l
cmdlUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvZGlzcGxheVBhc3MuZnJhZ21lbnQudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1No
YWRlcnMvZGlzcGxheVBhc3MuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZGlzcGxheVBh
c3NQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJkaXNw
bGF5UGFzc1BpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkaXNwbGF5UGFzc1BpeGVs
U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1l
ID0gJ2Rpc3BsYXlQYXNzUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVj
MiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbnVuaWZvcm0gc2FtcGxl
cjJEIHBhc3NTYW1wbGVyO1xudm9pZCBtYWluKHZvaWQpXG57XG5nbF9GcmFnQ29sb3I9dGV4dHVy
ZTJEKHBhc3NTYW1wbGVyLHZVVik7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsK
Ky8qKiBAaGlkZGVuICovCit2YXIgZGlzcGxheVBhc3NQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFt
ZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9l
eHRyYWN0SGlnaGxpZ2h0cy5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9leHRyYWN0SGln
aGxpZ2h0cy5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBleHRyYWN0SGlnaGxp
Z2h0c1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImV4
dHJhY3RIaWdobGlnaHRzUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV4dHJhY3RI
aWdobGlnaHRzUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRl
cmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVscGVyRnVuY3Rp
b25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJ
bmNsdWRlL2hlbHBlckZ1bmN0aW9ucy50cyIpOworCisKK3ZhciBuYW1lID0gJ2V4dHJhY3RIaWdo
bGlnaHRzUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICIjaW5jbHVkZTxoZWxwZXJGdW5jdGlv
bnM+XG5cbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxl
cjtcbnVuaWZvcm0gZmxvYXQgdGhyZXNob2xkO1xudW5pZm9ybSBmbG9hdCBleHBvc3VyZTtcbnZv
aWQgbWFpbih2b2lkKVxue1xuZ2xfRnJhZ0NvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2
VVYpO1xuZmxvYXQgbHVtYT1nZXRMdW1pbmFuY2UoZ2xfRnJhZ0NvbG9yLnJnYipleHBvc3VyZSk7
XG5nbF9GcmFnQ29sb3IucmdiPXN0ZXAodGhyZXNob2xkLGx1bWEpKmdsX0ZyYWdDb2xvci5yZ2I7
XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVm
ZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIg
ZXh0cmFjdEhpZ2hsaWdodHNQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFk
ZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9maWx0ZXIuZnJhZ21lbnQu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiog
Li9TaGFkZXJzL2ZpbHRlci5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZmlsdGVyUGl4ZWxTaGFk
ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZmlsdGVyUGl4ZWxTaGFk
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZpbHRlclBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAi
Li9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2ZpbHRlclBpeGVsU2hhZGVy
JzsKK3ZhciBzaGFkZXIgPSAiXG52YXJ5aW5nIHZlYzIgdlVWO1xudW5pZm9ybSBzYW1wbGVyMkQg
dGV4dHVyZVNhbXBsZXI7XG51bmlmb3JtIG1hdDQga2VybmVsTWF0cml4O1xudm9pZCBtYWluKHZv
aWQpXG57XG52ZWMzIGJhc2VDb2xvcj10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWKS5yZ2I7
XG52ZWMzIHVwZGF0ZWRDb2xvcj0oa2VybmVsTWF0cml4KnZlYzQoYmFzZUNvbG9yLDEuMCkpLnJn
YjtcbmdsX0ZyYWdDb2xvcj12ZWM0KHVwZGF0ZWRDb2xvciwxLjApO1xufSI7CitfTWF0ZXJpYWxz
X2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3Rv
cmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGZpbHRlclBpeGVsU2hhZGVy
ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9TaGFkZXJzL2Z4YWEuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9meGFhLmZyYWdtZW50LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogZnhhYVBpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgImZ4YWFQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZnhhYVBpeGVsU2hhZGVy
OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJp
YWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2Z4
YWFQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gInVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmVT
YW1wbGVyO1xudW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcbnZhcnlpbmcgdmVjMiB2VVY7XG52YXJ5
aW5nIHZlYzIgc2FtcGxlQ29vcmRTO1xudmFyeWluZyB2ZWMyIHNhbXBsZUNvb3JkRTtcbnZhcnlp
bmcgdmVjMiBzYW1wbGVDb29yZE47XG52YXJ5aW5nIHZlYzIgc2FtcGxlQ29vcmRXO1xudmFyeWlu
ZyB2ZWMyIHNhbXBsZUNvb3JkTlc7XG52YXJ5aW5nIHZlYzIgc2FtcGxlQ29vcmRTRTtcbnZhcnlp
bmcgdmVjMiBzYW1wbGVDb29yZE5FO1xudmFyeWluZyB2ZWMyIHNhbXBsZUNvb3JkU1c7XG5jb25z
dCBmbG9hdCBmeGFhUXVhbGl0eVN1YnBpeD0xLjA7XG5jb25zdCBmbG9hdCBmeGFhUXVhbGl0eUVk
Z2VUaHJlc2hvbGQ9MC4xNjY7XG5jb25zdCBmbG9hdCBmeGFhUXVhbGl0eUVkZ2VUaHJlc2hvbGRN
aW49MC4wODMzO1xuY29uc3QgdmVjMyBrTHVtYUNvZWZmaWNpZW50cz12ZWMzKDAuMjEyNiwwLjcx
NTIsMC4wNzIyKTtcbiNkZWZpbmUgRnhhYUx1bWEocmdiYSkgZG90KHJnYmEucmdiLGtMdW1hQ29l
ZmZpY2llbnRzKVxudm9pZCBtYWluKCl7XG52ZWMyIHBvc007XG5wb3NNLng9dlVWLng7XG5wb3NN
Lnk9dlVWLnk7XG52ZWM0IHJnYnlNPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYsMC4wKTtc
bmZsb2F0IGx1bWFNPUZ4YWFMdW1hKHJnYnlNKTtcbmZsb2F0IGx1bWFTPUZ4YWFMdW1hKHRleHR1
cmUyRCh0ZXh0dXJlU2FtcGxlcixzYW1wbGVDb29yZFMsMC4wKSk7XG5mbG9hdCBsdW1hRT1GeGFh
THVtYSh0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsc2FtcGxlQ29vcmRFLDAuMCkpO1xuZmxvYXQg
bHVtYU49RnhhYUx1bWEodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHNhbXBsZUNvb3JkTiwwLjAp
KTtcbmZsb2F0IGx1bWFXPUZ4YWFMdW1hKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcixzYW1wbGVD
b29yZFcsMC4wKSk7XG5mbG9hdCBtYXhTTT1tYXgobHVtYVMsbHVtYU0pO1xuZmxvYXQgbWluU009
bWluKGx1bWFTLGx1bWFNKTtcbmZsb2F0IG1heEVTTT1tYXgobHVtYUUsbWF4U00pO1xuZmxvYXQg
bWluRVNNPW1pbihsdW1hRSxtaW5TTSk7XG5mbG9hdCBtYXhXTj1tYXgobHVtYU4sbHVtYVcpO1xu
ZmxvYXQgbWluV049bWluKGx1bWFOLGx1bWFXKTtcbmZsb2F0IHJhbmdlTWF4PW1heChtYXhXTixt
YXhFU00pO1xuZmxvYXQgcmFuZ2VNaW49bWluKG1pbldOLG1pbkVTTSk7XG5mbG9hdCByYW5nZU1h
eFNjYWxlZD1yYW5nZU1heCpmeGFhUXVhbGl0eUVkZ2VUaHJlc2hvbGQ7XG5mbG9hdCByYW5nZT1y
YW5nZU1heC1yYW5nZU1pbjtcbmZsb2F0IHJhbmdlTWF4Q2xhbXBlZD1tYXgoZnhhYVF1YWxpdHlF
ZGdlVGhyZXNob2xkTWluLHJhbmdlTWF4U2NhbGVkKTtcbiNpZm5kZWYgTUFMSVxuaWYocmFuZ2U8
cmFuZ2VNYXhDbGFtcGVkKVxue1xuZ2xfRnJhZ0NvbG9yPXJnYnlNO1xucmV0dXJuO1xufVxuI2Vu
ZGlmXG5mbG9hdCBsdW1hTlc9RnhhYUx1bWEodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHNhbXBs
ZUNvb3JkTlcsMC4wKSk7XG5mbG9hdCBsdW1hU0U9RnhhYUx1bWEodGV4dHVyZTJEKHRleHR1cmVT
YW1wbGVyLHNhbXBsZUNvb3JkU0UsMC4wKSk7XG5mbG9hdCBsdW1hTkU9RnhhYUx1bWEodGV4dHVy
ZTJEKHRleHR1cmVTYW1wbGVyLHNhbXBsZUNvb3JkTkUsMC4wKSk7XG5mbG9hdCBsdW1hU1c9Rnhh
YUx1bWEodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHNhbXBsZUNvb3JkU1csMC4wKSk7XG5mbG9h
dCBsdW1hTlM9bHVtYU4rbHVtYVM7XG5mbG9hdCBsdW1hV0U9bHVtYVcrbHVtYUU7XG5mbG9hdCBz
dWJwaXhSY3BSYW5nZT0xLjAvcmFuZ2U7XG5mbG9hdCBzdWJwaXhOU1dFPWx1bWFOUytsdW1hV0U7
XG5mbG9hdCBlZGdlSG9yejE9KC0yLjAqbHVtYU0pK2x1bWFOUztcbmZsb2F0IGVkZ2VWZXJ0MT0o
LTIuMCpsdW1hTSkrbHVtYVdFO1xuZmxvYXQgbHVtYU5FU0U9bHVtYU5FK2x1bWFTRTtcbmZsb2F0
IGx1bWFOV05FPWx1bWFOVytsdW1hTkU7XG5mbG9hdCBlZGdlSG9yejI9KC0yLjAqbHVtYUUpK2x1
bWFORVNFO1xuZmxvYXQgZWRnZVZlcnQyPSgtMi4wKmx1bWFOKStsdW1hTldORTtcbmZsb2F0IGx1
bWFOV1NXPWx1bWFOVytsdW1hU1c7XG5mbG9hdCBsdW1hU1dTRT1sdW1hU1crbHVtYVNFO1xuZmxv
YXQgZWRnZUhvcno0PShhYnMoZWRnZUhvcnoxKSoyLjApK2FicyhlZGdlSG9yejIpO1xuZmxvYXQg
ZWRnZVZlcnQ0PShhYnMoZWRnZVZlcnQxKSoyLjApK2FicyhlZGdlVmVydDIpO1xuZmxvYXQgZWRn
ZUhvcnozPSgtMi4wKmx1bWFXKStsdW1hTldTVztcbmZsb2F0IGVkZ2VWZXJ0Mz0oLTIuMCpsdW1h
UykrbHVtYVNXU0U7XG5mbG9hdCBlZGdlSG9yej1hYnMoZWRnZUhvcnozKStlZGdlSG9yejQ7XG5m
bG9hdCBlZGdlVmVydD1hYnMoZWRnZVZlcnQzKStlZGdlVmVydDQ7XG5mbG9hdCBzdWJwaXhOV1NX
TkVTRT1sdW1hTldTVytsdW1hTkVTRTtcbmZsb2F0IGxlbmd0aFNpZ249dGV4ZWxTaXplLng7XG5i
b29sIGhvcnpTcGFuPWVkZ2VIb3J6Pj1lZGdlVmVydDtcbmZsb2F0IHN1YnBpeEE9c3VicGl4TlNX
RSoyLjArc3VicGl4TldTV05FU0U7XG5pZiAoIWhvcnpTcGFuKVxue1xubHVtYU49bHVtYVc7XG59
XG5pZiAoIWhvcnpTcGFuKVxue1xubHVtYVM9bHVtYUU7XG59XG5pZiAoaG9yelNwYW4pXG57XG5s
ZW5ndGhTaWduPXRleGVsU2l6ZS55O1xufVxuZmxvYXQgc3VicGl4Qj0oc3VicGl4QSooMS4wLzEy
LjApKS1sdW1hTTtcbmZsb2F0IGdyYWRpZW50Tj1sdW1hTi1sdW1hTTtcbmZsb2F0IGdyYWRpZW50
Uz1sdW1hUy1sdW1hTTtcbmZsb2F0IGx1bWFOTj1sdW1hTitsdW1hTTtcbmZsb2F0IGx1bWFTUz1s
dW1hUytsdW1hTTtcbmJvb2wgcGFpck49YWJzKGdyYWRpZW50Tik+PWFicyhncmFkaWVudFMpO1xu
ZmxvYXQgZ3JhZGllbnQ9bWF4KGFicyhncmFkaWVudE4pLGFicyhncmFkaWVudFMpKTtcbmlmIChw
YWlyTilcbntcbmxlbmd0aFNpZ249LWxlbmd0aFNpZ247XG59XG5mbG9hdCBzdWJwaXhDPWNsYW1w
KGFicyhzdWJwaXhCKSpzdWJwaXhSY3BSYW5nZSwwLjAsMS4wKTtcbnZlYzIgcG9zQjtcbnBvc0Iu
eD1wb3NNLng7XG5wb3NCLnk9cG9zTS55O1xudmVjMiBvZmZOUDtcbm9mZk5QLng9KCFob3J6U3Bh
bikgPyAwLjAgOiB0ZXhlbFNpemUueDtcbm9mZk5QLnk9KGhvcnpTcGFuKSA/IDAuMCA6IHRleGVs
U2l6ZS55O1xuaWYgKCFob3J6U3BhbilcbntcbnBvc0IueCs9bGVuZ3RoU2lnbiowLjU7XG59XG5p
ZiAoaG9yelNwYW4pXG57XG5wb3NCLnkrPWxlbmd0aFNpZ24qMC41O1xufVxudmVjMiBwb3NOO1xu
cG9zTi54PXBvc0IueC1vZmZOUC54KjEuNTtcbnBvc04ueT1wb3NCLnktb2ZmTlAueSoxLjU7XG52
ZWMyIHBvc1A7XG5wb3NQLng9cG9zQi54K29mZk5QLngqMS41O1xucG9zUC55PXBvc0IueStvZmZO
UC55KjEuNTtcbmZsb2F0IHN1YnBpeEQ9KCgtMi4wKSpzdWJwaXhDKSszLjA7XG5mbG9hdCBsdW1h
RW5kTj1GeGFhTHVtYSh0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIscG9zTiwwLjApKTtcbmZsb2F0
IHN1YnBpeEU9c3VicGl4QypzdWJwaXhDO1xuZmxvYXQgbHVtYUVuZFA9RnhhYUx1bWEodGV4dHVy
ZTJEKHRleHR1cmVTYW1wbGVyLHBvc1AsMC4wKSk7XG5pZiAoIXBhaXJOKVxue1xubHVtYU5OPWx1
bWFTUztcbn1cbmZsb2F0IGdyYWRpZW50U2NhbGVkPWdyYWRpZW50KjEuMC80LjA7XG5mbG9hdCBs
dW1hTU09bHVtYU0tbHVtYU5OKjAuNTtcbmZsb2F0IHN1YnBpeEY9c3VicGl4RCpzdWJwaXhFO1xu
Ym9vbCBsdW1hTUxUWmVybz1sdW1hTU08MC4wO1xubHVtYUVuZE4tPWx1bWFOTiowLjU7XG5sdW1h
RW5kUC09bHVtYU5OKjAuNTtcbmJvb2wgZG9uZU49YWJzKGx1bWFFbmROKT49Z3JhZGllbnRTY2Fs
ZWQ7XG5ib29sIGRvbmVQPWFicyhsdW1hRW5kUCk+PWdyYWRpZW50U2NhbGVkO1xuaWYgKCFkb25l
TilcbntcbnBvc04ueC09b2ZmTlAueCozLjA7XG59XG5pZiAoIWRvbmVOKVxue1xucG9zTi55LT1v
ZmZOUC55KjMuMDtcbn1cbmJvb2wgZG9uZU5QPSghZG9uZU4pIHx8ICghZG9uZVApO1xuaWYgKCFk
b25lUClcbntcbnBvc1AueCs9b2ZmTlAueCozLjA7XG59XG5pZiAoIWRvbmVQKVxue1xucG9zUC55
Kz1vZmZOUC55KjMuMDtcbn1cbmlmIChkb25lTlApXG57XG5pZiAoIWRvbmVOKSBsdW1hRW5kTj1G
eGFhTHVtYSh0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIscG9zTi54eSwwLjApKTtcbmlmICghZG9u
ZVApIGx1bWFFbmRQPUZ4YWFMdW1hKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcixwb3NQLnh5LDAu
MCkpO1xuaWYgKCFkb25lTikgbHVtYUVuZE49bHVtYUVuZE4tbHVtYU5OKjAuNTtcbmlmICghZG9u
ZVApIGx1bWFFbmRQPWx1bWFFbmRQLWx1bWFOTiowLjU7XG5kb25lTj1hYnMobHVtYUVuZE4pPj1n
cmFkaWVudFNjYWxlZDtcbmRvbmVQPWFicyhsdW1hRW5kUCk+PWdyYWRpZW50U2NhbGVkO1xuaWYg
KCFkb25lTikgcG9zTi54LT1vZmZOUC54KjEyLjA7XG5pZiAoIWRvbmVOKSBwb3NOLnktPW9mZk5Q
LnkqMTIuMDtcbmRvbmVOUD0oIWRvbmVOKSB8fCAoIWRvbmVQKTtcbmlmICghZG9uZVApIHBvc1Au
eCs9b2ZmTlAueCoxMi4wO1xuaWYgKCFkb25lUCkgcG9zUC55Kz1vZmZOUC55KjEyLjA7XG59XG5m
bG9hdCBkc3ROPXBvc00ueC1wb3NOLng7XG5mbG9hdCBkc3RQPXBvc1AueC1wb3NNLng7XG5pZiAo
IWhvcnpTcGFuKVxue1xuZHN0Tj1wb3NNLnktcG9zTi55O1xufVxuaWYgKCFob3J6U3Bhbilcbntc
bmRzdFA9cG9zUC55LXBvc00ueTtcbn1cbmJvb2wgZ29vZFNwYW5OPShsdW1hRW5kTjwwLjApICE9
IGx1bWFNTFRaZXJvO1xuZmxvYXQgc3Bhbkxlbmd0aD0oZHN0UCtkc3ROKTtcbmJvb2wgZ29vZFNw
YW5QPShsdW1hRW5kUDwwLjApICE9IGx1bWFNTFRaZXJvO1xuZmxvYXQgc3Bhbkxlbmd0aFJjcD0x
LjAvc3Bhbkxlbmd0aDtcbmJvb2wgZGlyZWN0aW9uTj1kc3ROPGRzdFA7XG5mbG9hdCBkc3Q9bWlu
KGRzdE4sZHN0UCk7XG5ib29sIGdvb2RTcGFuPWRpcmVjdGlvbk4gPyBnb29kU3Bhbk4gOiBnb29k
U3BhblA7XG5mbG9hdCBzdWJwaXhHPXN1YnBpeEYqc3VicGl4RjtcbmZsb2F0IHBpeGVsT2Zmc2V0
PShkc3QqKC1zcGFuTGVuZ3RoUmNwKSkrMC41O1xuZmxvYXQgc3VicGl4SD1zdWJwaXhHKmZ4YWFR
dWFsaXR5U3VicGl4O1xuZmxvYXQgcGl4ZWxPZmZzZXRHb29kPWdvb2RTcGFuID8gcGl4ZWxPZmZz
ZXQgOiAwLjA7XG5mbG9hdCBwaXhlbE9mZnNldFN1YnBpeD1tYXgocGl4ZWxPZmZzZXRHb29kLHN1
YnBpeEgpO1xuaWYgKCFob3J6U3BhbilcbntcbnBvc00ueCs9cGl4ZWxPZmZzZXRTdWJwaXgqbGVu
Z3RoU2lnbjtcbn1cbmlmIChob3J6U3BhbilcbntcbnBvc00ueSs9cGl4ZWxPZmZzZXRTdWJwaXgq
bGVuZ3RoU2lnbjtcbn1cbiNpZmRlZiBNQUxJXG5pZihyYW5nZTxyYW5nZU1heENsYW1wZWQpXG57
XG5nbF9GcmFnQ29sb3I9cmdieU07XG59XG5lbHNlXG57XG5nbF9GcmFnQ29sb3I9dGV4dHVyZTJE
KHRleHR1cmVTYW1wbGVyLHBvc00sMC4wKTtcbn1cbiNlbHNlXG5nbF9GcmFnQ29sb3I9dGV4dHVy
ZTJEKHRleHR1cmVTYW1wbGVyLHBvc00sMC4wKTtcbiNlbmRpZlxufSI7CitfTWF0ZXJpYWxzX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVb
bmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGZ4YWFQaXhlbFNoYWRlciA9IHsg
bmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
U2hhZGVycy9meGFhLnZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiEqXAorICAhKioqIC4vU2hhZGVycy9meGFhLnZlcnRleC50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBmeGFhVmVy
dGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImZ4YWFWZXJ0
ZXhTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZ4YWFWZXJ0ZXhTaGFkZXI7IH0pOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0
ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnZnhhYVZlcnRleFNo
YWRlcic7Cit2YXIgc2hhZGVyID0gIlxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG51bmlmb3Jt
IHZlYzIgdGV4ZWxTaXplO1xuXG52YXJ5aW5nIHZlYzIgdlVWO1xudmFyeWluZyB2ZWMyIHNhbXBs
ZUNvb3JkUztcbnZhcnlpbmcgdmVjMiBzYW1wbGVDb29yZEU7XG52YXJ5aW5nIHZlYzIgc2FtcGxl
Q29vcmROO1xudmFyeWluZyB2ZWMyIHNhbXBsZUNvb3JkVztcbnZhcnlpbmcgdmVjMiBzYW1wbGVD
b29yZE5XO1xudmFyeWluZyB2ZWMyIHNhbXBsZUNvb3JkU0U7XG52YXJ5aW5nIHZlYzIgc2FtcGxl
Q29vcmRORTtcbnZhcnlpbmcgdmVjMiBzYW1wbGVDb29yZFNXO1xuY29uc3QgdmVjMiBtYWRkPXZl
YzIoMC41LDAuNSk7XG52b2lkIG1haW4odm9pZCkge1xudlVWPShwb3NpdGlvbiptYWRkK21hZGQp
O1xuc2FtcGxlQ29vcmRTPXZVVit2ZWMyKCAwLjAsMS4wKSp0ZXhlbFNpemU7XG5zYW1wbGVDb29y
ZEU9dlVWK3ZlYzIoIDEuMCwwLjApKnRleGVsU2l6ZTtcbnNhbXBsZUNvb3JkTj12VVYrdmVjMigg
MC4wLC0xLjApKnRleGVsU2l6ZTtcbnNhbXBsZUNvb3JkVz12VVYrdmVjMigtMS4wLDAuMCkqdGV4
ZWxTaXplO1xuc2FtcGxlQ29vcmROVz12VVYrdmVjMigtMS4wLC0xLjApKnRleGVsU2l6ZTtcbnNh
bXBsZUNvb3JkU0U9dlVWK3ZlYzIoIDEuMCwxLjApKnRleGVsU2l6ZTtcbnNhbXBsZUNvb3JkTkU9
dlVWK3ZlYzIoIDEuMCwtMS4wKSp0ZXhlbFNpemU7XG5zYW1wbGVDb29yZFNXPXZVVit2ZWMyKC0x
LjAsMS4wKSp0ZXhlbFNpemU7XG5nbF9Qb3NpdGlvbj12ZWM0KHBvc2l0aW9uLDAuMCwxLjApO1xu
fSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZl
Y3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGZ4
YWFWZXJ0ZXhTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvZ2VvbWV0cnkuZnJhZ21lbnQudHMiOgorLyohKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMv
Z2VvbWV0cnkuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZ2VvbWV0cnlQaXhlbFNoYWRlciAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnZW9tZXRyeVBpeGVsU2hhZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZW9tZXRyeVBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAi
Li9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRl
cnNJbmNsdWRlX21ydEZyYWdtZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbXJ0RnJhZ21l
bnREZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL21ydEZyYWdtZW50RGVj
bGFyYXRpb24udHMiKTsKKworCit2YXIgbmFtZSA9ICdnZW9tZXRyeVBpeGVsU2hhZGVyJzsKK3Zh
ciBzaGFkZXIgPSAiI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZVxucHJl
Y2lzaW9uIGhpZ2hwIGZsb2F0O1xucHJlY2lzaW9uIGhpZ2hwIGludDtcbnZhcnlpbmcgdmVjMyB2
Tm9ybWFsVjtcbnZhcnlpbmcgdmVjNCB2Vmlld1BvcztcbiNpZmRlZiBQT1NJVElPTlxudmFyeWlu
ZyB2ZWMzIHZQb3NpdGlvbjtcbiNlbmRpZlxuI2lmZGVmIFZFTE9DSVRZXG52YXJ5aW5nIHZlYzQg
dkN1cnJlbnRQb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCB2UHJldmlvdXNQb3NpdGlvbjtcbiNlbmRp
ZlxuI2lmZGVmIEFMUEhBVEVTVFxudmFyeWluZyB2ZWMyIHZVVjtcbnVuaWZvcm0gc2FtcGxlcjJE
IGRpZmZ1c2VTYW1wbGVyO1xuI2VuZGlmXG4jaW5jbHVkZTxtcnRGcmFnbWVudERlY2xhcmF0aW9u
PltSRU5ERVJfVEFSR0VUX0NPVU5UXVxudm9pZCBtYWluKCkge1xuI2lmZGVmIEFMUEhBVEVTVFxu
aWYgKHRleHR1cmUyRChkaWZmdXNlU2FtcGxlcix2VVYpLmE8MC40KVxuZGlzY2FyZDtcbiNlbmRp
ZlxuZ2xfRnJhZ0RhdGFbMF09dmVjNCh2Vmlld1Bvcy56L3ZWaWV3UG9zLncsMC4wLDAuMCwxLjAp
O1xuXG5nbF9GcmFnRGF0YVsxXT12ZWM0KG5vcm1hbGl6ZSh2Tm9ybWFsViksMS4wKTtcblxuI2lm
ZGVmIFBPU0lUSU9OXG5nbF9GcmFnRGF0YVtQT1NJVElPTl9JTkRFWF09dmVjNCh2UG9zaXRpb24s
MS4wKTtcbiNlbmRpZlxuI2lmZGVmIFZFTE9DSVRZXG52ZWMyIGE9KHZDdXJyZW50UG9zaXRpb24u
eHkvdkN1cnJlbnRQb3NpdGlvbi53KSowLjUrMC41O1xudmVjMiBiPSh2UHJldmlvdXNQb3NpdGlv
bi54eS92UHJldmlvdXNQb3NpdGlvbi53KSowLjUrMC41O1xudmVjMiB2ZWxvY2l0eT1hYnMoYS1i
KTtcbnZlbG9jaXR5PXZlYzIocG93KHZlbG9jaXR5LngsMS4wLzMuMCkscG93KHZlbG9jaXR5Lnks
MS4wLzMuMCkpKnNpZ24oYS1iKSowLjUrMC41O1xuZ2xfRnJhZ0RhdGFbVkVMT0NJVFlfSU5ERVhd
PXZlYzQodmVsb2NpdHksMC4wLDEuMCk7XG4jZW5kaWZcbn0iOworX01hdGVyaWFsc19lZmZlY3Rf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVd
ID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBnZW9tZXRyeVBpeGVsU2hhZGVyID0geyBu
YW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9T
aGFkZXJzL2dlb21ldHJ5LnZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvZ2VvbWV0cnkudmVydGV4LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHBy
b3ZpZGVkOiBnZW9tZXRyeVZlcnRleFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJnZW9tZXRyeVZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2Vv
bWV0cnlWZXJ0ZXhTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlh
bHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNEZWNsYXJhdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9TaGFkZXJzSW5jbHVkZS9ib25lc0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0lu
Y2x1ZGUvYm9uZXNEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9T
aGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJz
SW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9uLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX21vcnBoVGFyZ2V0c1Zl
cnRleERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleERlY2xhcmF0
aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4RGVjbGFy
YXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW5z
dGFuY2VzRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzRGVjbGFyYXRpb24gKi8g
Ii4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNEZWNsYXJhdGlvbi50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
U2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0lu
Y2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNJbmNsdWRlX2luc3RhbmNlc1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNW
ZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNWZXJ0ZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hh
ZGVyc0luY2x1ZGUvYm9uZXNWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25l
c1ZlcnRleC50cyIpOworCisKKworCisKKworCisKK3ZhciBuYW1lID0gJ2dlb21ldHJ5VmVydGV4
U2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xucHJlY2lzaW9u
IGhpZ2hwIGludDtcbiNpbmNsdWRlPGJvbmVzRGVjbGFyYXRpb24+XG4jaW5jbHVkZTxtb3JwaFRh
cmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRl
eERlY2xhcmF0aW9uPlswLi5tYXhTaW11bHRhbmVvdXNNb3JwaFRhcmdldHNdXG4jaW5jbHVkZTxp
bnN0YW5jZXNEZWNsYXJhdGlvbj5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRl
IHZlYzMgbm9ybWFsO1xuI2lmIGRlZmluZWQoQUxQSEFURVNUKSB8fCBkZWZpbmVkKE5FRURfVVYp
XG52YXJ5aW5nIHZlYzIgdlVWO1xudW5pZm9ybSBtYXQ0IGRpZmZ1c2VNYXRyaXg7XG4jaWZkZWYg
VVYxXG5hdHRyaWJ1dGUgdmVjMiB1djtcbiNlbmRpZlxuI2lmZGVmIFVWMlxuYXR0cmlidXRlIHZl
YzIgdXYyO1xuI2VuZGlmXG4jZW5kaWZcblxudW5pZm9ybSBtYXQ0IHZpZXdQcm9qZWN0aW9uO1xu
dW5pZm9ybSBtYXQ0IHZpZXc7XG52YXJ5aW5nIHZlYzMgdk5vcm1hbFY7XG52YXJ5aW5nIHZlYzQg
dlZpZXdQb3M7XG4jaWZkZWYgUE9TSVRJT05cbnZhcnlpbmcgdmVjMyB2UG9zaXRpb247XG4jZW5k
aWZcbiNpZmRlZiBWRUxPQ0lUWVxudW5pZm9ybSBtYXQ0IHByZXZpb3VzV29ybGQ7XG51bmlmb3Jt
IG1hdDQgcHJldmlvdXNWaWV3UHJvamVjdGlvbjtcbiNpZmRlZiBCT05FU19WRUxPQ0lUWV9FTkFC
TEVEXG4jaWYgTlVNX0JPTkVfSU5GTFVFTkNFUlM+MFxudW5pZm9ybSBtYXQ0IG1QcmV2aW91c0Jv
bmVzW0JvbmVzUGVyTWVzaF07XG4jZW5kaWZcbiNlbmRpZlxudmFyeWluZyB2ZWM0IHZDdXJyZW50
UG9zaXRpb247XG52YXJ5aW5nIHZlYzQgdlByZXZpb3VzUG9zaXRpb247XG4jZW5kaWZcbnZvaWQg
bWFpbih2b2lkKVxue1xudmVjMyBwb3NpdGlvblVwZGF0ZWQ9cG9zaXRpb247XG52ZWMzIG5vcm1h
bFVwZGF0ZWQ9bm9ybWFsO1xuI2lmZGVmIFVWMVxudmVjMiB1dlVwZGF0ZWQ9dXY7XG4jZW5kaWZc
biNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleD5bMC4ubWF4U2ltdWx0YW5lb3VzTW9ycGhUYXJn
ZXRzXVxuI2luY2x1ZGU8aW5zdGFuY2VzVmVydGV4PlxuI2lmIGRlZmluZWQoVkVMT0NJVFkpICYm
ICFkZWZpbmVkKEJPTkVTX1ZFTE9DSVRZX0VOQUJMRUQpXG5cbnZDdXJyZW50UG9zaXRpb249dmll
d1Byb2plY3Rpb24qZmluYWxXb3JsZCp2ZWM0KHBvc2l0aW9uVXBkYXRlZCwxLjApO1xudlByZXZp
b3VzUG9zaXRpb249cHJldmlvdXNWaWV3UHJvamVjdGlvbipwcmV2aW91c1dvcmxkKnZlYzQocG9z
aXRpb25VcGRhdGVkLDEuMCk7XG4jZW5kaWZcbiNpbmNsdWRlPGJvbmVzVmVydGV4PlxudmVjNCBw
b3M9dmVjNChmaW5hbFdvcmxkKnZlYzQocG9zaXRpb25VcGRhdGVkLDEuMCkpO1xudk5vcm1hbFY9
bm9ybWFsaXplKHZlYzMoKHZpZXcqZmluYWxXb3JsZCkqdmVjNChub3JtYWxVcGRhdGVkLDAuMCkp
KTtcbnZWaWV3UG9zPXZpZXcqcG9zO1xuI2lmIGRlZmluZWQoVkVMT0NJVFkpICYmIGRlZmluZWQo
Qk9ORVNfVkVMT0NJVFlfRU5BQkxFRClcbnZDdXJyZW50UG9zaXRpb249dmlld1Byb2plY3Rpb24q
ZmluYWxXb3JsZCp2ZWM0KHBvc2l0aW9uVXBkYXRlZCwxLjApO1xuI2lmIE5VTV9CT05FX0lORkxV
RU5DRVJTPjBcbm1hdDQgcHJldmlvdXNJbmZsdWVuY2U7XG5wcmV2aW91c0luZmx1ZW5jZT1tUHJl
dmlvdXNCb25lc1tpbnQobWF0cmljZXNJbmRpY2VzWzBdKV0qbWF0cmljZXNXZWlnaHRzWzBdO1xu
I2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjFcbnByZXZpb3VzSW5mbHVlbmNlKz1tUHJldmlvdXNC
b25lc1tpbnQobWF0cmljZXNJbmRpY2VzWzFdKV0qbWF0cmljZXNXZWlnaHRzWzFdO1xuI2VuZGlm
XG4jaWYgTlVNX0JPTkVfSU5GTFVFTkNFUlM+MlxucHJldmlvdXNJbmZsdWVuY2UrPW1QcmV2aW91
c0JvbmVzW2ludChtYXRyaWNlc0luZGljZXNbMl0pXSptYXRyaWNlc1dlaWdodHNbMl07XG4jZW5k
aWZcbiNpZiBOVU1fQk9ORV9JTkZMVUVOQ0VSUz4zXG5wcmV2aW91c0luZmx1ZW5jZSs9bVByZXZp
b3VzQm9uZXNbaW50KG1hdHJpY2VzSW5kaWNlc1szXSldKm1hdHJpY2VzV2VpZ2h0c1szXTtcbiNl
bmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjRcbnByZXZpb3VzSW5mbHVlbmNlKz1tUHJl
dmlvdXNCb25lc1tpbnQobWF0cmljZXNJbmRpY2VzRXh0cmFbMF0pXSptYXRyaWNlc1dlaWdodHNF
eHRyYVswXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjVcbnByZXZpb3VzSW5m
bHVlbmNlKz1tUHJldmlvdXNCb25lc1tpbnQobWF0cmljZXNJbmRpY2VzRXh0cmFbMV0pXSptYXRy
aWNlc1dlaWdodHNFeHRyYVsxXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lORkxVRU5DRVJTPjZc
bnByZXZpb3VzSW5mbHVlbmNlKz1tUHJldmlvdXNCb25lc1tpbnQobWF0cmljZXNJbmRpY2VzRXh0
cmFbMl0pXSptYXRyaWNlc1dlaWdodHNFeHRyYVsyXTtcbiNlbmRpZlxuI2lmIE5VTV9CT05FX0lO
RkxVRU5DRVJTPjdcbnByZXZpb3VzSW5mbHVlbmNlKz1tUHJldmlvdXNCb25lc1tpbnQobWF0cmlj
ZXNJbmRpY2VzRXh0cmFbM10pXSptYXRyaWNlc1dlaWdodHNFeHRyYVszXTtcbiNlbmRpZlxudlBy
ZXZpb3VzUG9zaXRpb249cHJldmlvdXNWaWV3UHJvamVjdGlvbipwcmV2aW91c1dvcmxkKnByZXZp
b3VzSW5mbHVlbmNlKnZlYzQocG9zaXRpb25VcGRhdGVkLDEuMCk7XG4jZWxzZVxudlByZXZpb3Vz
UG9zaXRpb249cHJldmlvdXNWaWV3UHJvamVjdGlvbipwcmV2aW91c1dvcmxkKnZlYzQocG9zaXRp
b25VcGRhdGVkLDEuMCk7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFBPU0lUSU9OXG52UG9zaXRp
b249cG9zLnh5ei9wb3MudztcbiNlbmRpZlxuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb24qZmlu
YWxXb3JsZCp2ZWM0KHBvc2l0aW9uVXBkYXRlZCwxLjApO1xuI2lmIGRlZmluZWQoQUxQSEFURVNU
KSB8fCBkZWZpbmVkKEJBU0lDX1JFTkRFUilcbiNpZmRlZiBVVjFcbnZVVj12ZWMyKGRpZmZ1c2VN
YXRyaXgqdmVjNCh1dlVwZGF0ZWQsMS4wLDAuMCkpO1xuI2VuZGlmXG4jaWZkZWYgVVYyXG52VVY9
dmVjMihkaWZmdXNlTWF0cml4KnZlYzQodXYyLDEuMCwwLjApKTtcbiNlbmRpZlxuI2VuZGlmXG59
XG4iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZm
ZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBn
ZW9tZXRyeVZlcnRleFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKwor
CisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9nbG93Qmx1clBvc3RQcm9jZXNzLmZyYWdt
ZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvZ2xvd0JsdXJQb3N0UHJvY2Vzcy5mcmFnbWVudC50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGdsb3dCbHVyUG9zdFByb2Nlc3NQaXhlbFNoYWRl
ciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnbG93Qmx1clBvc3RQcm9j
ZXNzUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdsb3dCbHVyUG9zdFByb2Nlc3NQ
aXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIg
bmFtZSA9ICdnbG93Qmx1clBvc3RQcm9jZXNzUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJc
bnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcblxu
dW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XG51bmlmb3JtIHZlYzIgZGlyZWN0aW9uO1xudW5pZm9y
bSBmbG9hdCBibHVyV2lkdGg7XG5cbmZsb2F0IGdldEx1bWluYW5jZSh2ZWMzIGNvbG9yKVxue1xu
cmV0dXJuIGRvdChjb2xvcix2ZWMzKDAuMjEyNiwwLjcxNTIsMC4wNzIyKSk7XG59XG52b2lkIG1h
aW4odm9pZClcbntcbmZsb2F0IHdlaWdodHNbN107XG53ZWlnaHRzWzBdPTAuMDU7XG53ZWlnaHRz
WzFdPTAuMTtcbndlaWdodHNbMl09MC4yO1xud2VpZ2h0c1szXT0wLjM7XG53ZWlnaHRzWzRdPTAu
MjtcbndlaWdodHNbNV09MC4xO1xud2VpZ2h0c1s2XT0wLjA1O1xudmVjMiB0ZXhlbFNpemU9dmVj
MigxLjAvc2NyZWVuU2l6ZS54LDEuMC9zY3JlZW5TaXplLnkpO1xudmVjMiB0ZXhlbFN0ZXA9dGV4
ZWxTaXplKmRpcmVjdGlvbipibHVyV2lkdGg7XG52ZWMyIHN0YXJ0PXZVVi0zLjAqdGV4ZWxTdGVw
O1xudmVjNCBiYXNlQ29sb3I9dmVjNCgwLiwwLiwwLiwwLik7XG52ZWMyIHRleGVsT2Zmc2V0PXZl
YzIoMC4sMC4pO1xuZm9yIChpbnQgaT0wOyBpPDc7IGkrKylcbntcblxudmVjNCB0ZXhlbD10ZXh0
dXJlMkQodGV4dHVyZVNhbXBsZXIsc3RhcnQrdGV4ZWxPZmZzZXQpO1xuYmFzZUNvbG9yLmErPXRl
eGVsLmEqd2VpZ2h0c1tpXTtcblxuZmxvYXQgbHVtaW5hbmNlPWdldEx1bWluYW5jZShiYXNlQ29s
b3IucmdiKTtcbmZsb2F0IGx1bWluYW5jZVRleGVsPWdldEx1bWluYW5jZSh0ZXhlbC5yZ2IpO1xu
ZmxvYXQgY2hvaWNlPXN0ZXAobHVtaW5hbmNlVGV4ZWwsbHVtaW5hbmNlKTtcbmJhc2VDb2xvci5y
Z2I9Y2hvaWNlKmJhc2VDb2xvci5yZ2IrKDEuMC1jaG9pY2UpKnRleGVsLnJnYjtcbnRleGVsT2Zm
c2V0Kz10ZXhlbFN0ZXA7XG59XG5nbF9GcmFnQ29sb3I9YmFzZUNvbG9yO1xufSI7CitfTWF0ZXJp
YWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJz
U3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGdsb3dCbHVyUG9zdFBy
b2Nlc3NQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9nbG93TWFwR2VuZXJhdGlvbi5mcmFnbWVudC50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vU2hhZGVycy9nbG93TWFwR2VuZXJhdGlvbi5mcmFnbWVudC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBnbG93TWFwR2VuZXJhdGlvblBpeGVsU2hhZGVyICovCisvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImdsb3dNYXBHZW5lcmF0aW9uUGl4ZWxTaGFkZXIi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIGdsb3dNYXBHZW5lcmF0aW9uUGl4ZWxTaGFkZXI7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZm
ZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnZ2xvd01hcEdl
bmVyYXRpb25QaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIiNpZmRlZiBESUZGVVNFXG52YXJ5
aW5nIHZlYzIgdlVWRGlmZnVzZTtcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VTYW1wbGVyO1xu
I2VuZGlmXG4jaWZkZWYgT1BBQ0lUWVxudmFyeWluZyB2ZWMyIHZVVk9wYWNpdHk7XG51bmlmb3Jt
IHNhbXBsZXIyRCBvcGFjaXR5U2FtcGxlcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eUludGVuc2l0
eTtcbiNlbmRpZlxuI2lmZGVmIEVNSVNTSVZFXG52YXJ5aW5nIHZlYzIgdlVWRW1pc3NpdmU7XG51
bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZVNhbXBsZXI7XG4jZW5kaWZcbiNpZmRlZiBWRVJURVhB
TFBIQVxudmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbmRpZlxudW5pZm9ybSB2ZWM0IGdsb3dDb2xv
cjtcbnZvaWQgbWFpbih2b2lkKVxue1xudmVjNCBmaW5hbENvbG9yPWdsb3dDb2xvcjtcblxuI2lm
ZGVmIERJRkZVU0VcbnZlYzQgYWxiZWRvVGV4dHVyZT10ZXh0dXJlMkQoZGlmZnVzZVNhbXBsZXIs
dlVWRGlmZnVzZSk7XG5maW5hbENvbG9yLmEqPWFsYmVkb1RleHR1cmUuYTtcbiNlbmRpZlxuI2lm
ZGVmIE9QQUNJVFlcbnZlYzQgb3BhY2l0eU1hcD10ZXh0dXJlMkQob3BhY2l0eVNhbXBsZXIsdlVW
T3BhY2l0eSk7XG4jaWZkZWYgT1BBQ0lUWVJHQlxuZmluYWxDb2xvci5hKj1nZXRMdW1pbmFuY2Uo
b3BhY2l0eU1hcC5yZ2IpO1xuI2Vsc2VcbmZpbmFsQ29sb3IuYSo9b3BhY2l0eU1hcC5hO1xuI2Vu
ZGlmXG5maW5hbENvbG9yLmEqPW9wYWNpdHlJbnRlbnNpdHk7XG4jZW5kaWZcbiNpZmRlZiBWRVJU
RVhBTFBIQVxuZmluYWxDb2xvci5hKj12Q29sb3IuYTtcbiNlbmRpZlxuI2lmZGVmIEFMUEhBVEVT
VFxuaWYgKGZpbmFsQ29sb3IuYTxBTFBIQVRFU1RWQUxVRSlcbmRpc2NhcmQ7XG4jZW5kaWZcbiNp
ZmRlZiBFTUlTU0lWRVxuZ2xfRnJhZ0NvbG9yPXRleHR1cmUyRChlbWlzc2l2ZVNhbXBsZXIsdlVW
RW1pc3NpdmUpKmZpbmFsQ29sb3I7XG4jZWxzZVxuZ2xfRnJhZ0NvbG9yPWZpbmFsQ29sb3I7XG4j
ZW5kaWZcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8K
K3ZhciBnbG93TWFwR2VuZXJhdGlvblBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6
IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2dsb3dNYXBHZW5l
cmF0aW9uLnZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvZ2xvd01hcEdlbmVyYXRpb24udmVydGV4
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBnbG93TWFwR2VuZXJhdGlvblZlcnRleFNoYWRlciAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnbG93TWFwR2VuZXJhdGlvblZl
cnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2xvd01hcEdlbmVyYXRpb25WZXJ0ZXhT
aGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNEZWNsYXJhdGlvbl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5j
bHVkZS9ib25lc0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYm9uZXNE
ZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVk
ZV9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9tb3Jw
aFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL21vcnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX21vcnBoVGFyZ2V0c1ZlcnRleERlY2xhcmF0
aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleERlY2xhcmF0aW9uICovICIuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24udHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW5zdGFuY2VzRGVjbGFy
YXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9T
aGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1
ZGUvbW9ycGhUYXJnZXRzVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhU
YXJnZXRzVmVydGV4LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNs
dWRlX2luc3RhbmNlc1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXggKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUv
Ym9uZXNWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc1ZlcnRleC50cyIp
OworCisKKworCisKKworCisKK3ZhciBuYW1lID0gJ2dsb3dNYXBHZW5lcmF0aW9uVmVydGV4U2hh
ZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbiNpbmNsdWRl
PGJvbmVzRGVjbGFyYXRpb24+XG4jaW5jbHVkZTxtb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNs
YXJhdGlvbj5cbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleERlY2xhcmF0aW9uPlswLi5tYXhT
aW11bHRhbmVvdXNNb3JwaFRhcmdldHNdXG5cbiNpbmNsdWRlPGluc3RhbmNlc0RlY2xhcmF0aW9u
PlxudW5pZm9ybSBtYXQ0IHZpZXdQcm9qZWN0aW9uO1xudmFyeWluZyB2ZWM0IHZQb3NpdGlvbjtc
biNpZmRlZiBVVjFcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuI2VuZGlmXG4jaWZkZWYgVVYyXG5hdHRy
aWJ1dGUgdmVjMiB1djI7XG4jZW5kaWZcbiNpZmRlZiBESUZGVVNFXG52YXJ5aW5nIHZlYzIgdlVW
RGlmZnVzZTtcbnVuaWZvcm0gbWF0NCBkaWZmdXNlTWF0cml4O1xuI2VuZGlmXG4jaWZkZWYgT1BB
Q0lUWVxudmFyeWluZyB2ZWMyIHZVVk9wYWNpdHk7XG51bmlmb3JtIG1hdDQgb3BhY2l0eU1hdHJp
eDtcbiNlbmRpZlxuI2lmZGVmIEVNSVNTSVZFXG52YXJ5aW5nIHZlYzIgdlVWRW1pc3NpdmU7XG51
bmlmb3JtIG1hdDQgZW1pc3NpdmVNYXRyaXg7XG4jZW5kaWZcbiNpZmRlZiBWRVJURVhBTFBIQVxu
YXR0cmlidXRlIHZlYzQgY29sb3I7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuI2VuZGlmXG52b2lk
IG1haW4odm9pZClcbntcbnZlYzMgcG9zaXRpb25VcGRhdGVkPXBvc2l0aW9uO1xuI2lmZGVmIFVW
MVxudmVjMiB1dlVwZGF0ZWQ9dXY7XG4jZW5kaWZcbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRl
eD5bMC4ubWF4U2ltdWx0YW5lb3VzTW9ycGhUYXJnZXRzXVxuI2luY2x1ZGU8aW5zdGFuY2VzVmVy
dGV4PlxuI2luY2x1ZGU8Ym9uZXNWZXJ0ZXg+XG4jaWZkZWYgQ1VCRU1BUFxudlBvc2l0aW9uPWZp
bmFsV29ybGQqdmVjNChwb3NpdGlvblVwZGF0ZWQsMS4wKTtcbmdsX1Bvc2l0aW9uPXZpZXdQcm9q
ZWN0aW9uKmZpbmFsV29ybGQqdmVjNChwb3NpdGlvbiwxLjApO1xuI2Vsc2VcbnZQb3NpdGlvbj12
aWV3UHJvamVjdGlvbipmaW5hbFdvcmxkKnZlYzQocG9zaXRpb25VcGRhdGVkLDEuMCk7XG5nbF9Q
b3NpdGlvbj12UG9zaXRpb247XG4jZW5kaWZcbiNpZmRlZiBESUZGVVNFXG4jaWZkZWYgRElGRlVT
RVVWMVxudlVWRGlmZnVzZT12ZWMyKGRpZmZ1c2VNYXRyaXgqdmVjNCh1dlVwZGF0ZWQsMS4wLDAu
MCkpO1xuI2VuZGlmXG4jaWZkZWYgRElGRlVTRVVWMlxudlVWRGlmZnVzZT12ZWMyKGRpZmZ1c2VN
YXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBPUEFDSVRZ
XG4jaWZkZWYgT1BBQ0lUWVVWMVxudlVWT3BhY2l0eT12ZWMyKG9wYWNpdHlNYXRyaXgqdmVjNCh1
dlVwZGF0ZWQsMS4wLDAuMCkpO1xuI2VuZGlmXG4jaWZkZWYgT1BBQ0lUWVVWMlxudlVWT3BhY2l0
eT12ZWMyKG9wYWNpdHlNYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xuI2VuZGlmXG4jZW5kaWZc
biNpZmRlZiBFTUlTU0lWRVxuI2lmZGVmIEVNSVNTSVZFVVYxXG52VVZFbWlzc2l2ZT12ZWMyKGVt
aXNzaXZlTWF0cml4KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbiNlbmRpZlxuI2lmZGVmIEVN
SVNTSVZFVVYyXG52VVZFbWlzc2l2ZT12ZWMyKGVtaXNzaXZlTWF0cml4KnZlYzQodXYyLDEuMCww
LjApKTtcbiNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgVkVSVEVYQUxQSEFcbnZDb2xvcj1jb2xvcjtc
biNlbmRpZlxufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAq
LwordmFyIGdsb3dNYXBHZW5lcmF0aW9uVmVydGV4U2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFk
ZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2dsb3dNYXBN
ZXJnZS5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvZ2xvd01hcE1lcmdlLmZyYWdtZW50LnRzICoq
KiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBnbG93TWFwTWVyZ2VQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJnbG93TWFwTWVyZ2VQaXhlbFNoYWRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gZ2xvd01hcE1lcmdlUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVy
aWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnZ2xvd01hcE1lcmdlUGl4ZWxTaGFkZXIn
OwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0
ZXh0dXJlU2FtcGxlcjtcbiNpZmRlZiBFTUlTU0lWRVxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVy
ZVNhbXBsZXIyO1xuI2VuZGlmXG5cbnVuaWZvcm0gZmxvYXQgb2Zmc2V0O1xudm9pZCBtYWluKHZv
aWQpIHtcbnZlYzQgYmFzZUNvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xuI2lm
ZGVmIEVNSVNTSVZFXG5iYXNlQ29sb3IrPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcjIsdlVWKTtc
bmJhc2VDb2xvcio9b2Zmc2V0O1xuI2Vsc2VcbmJhc2VDb2xvci5hPWFicyhvZmZzZXQtYmFzZUNv
bG9yLmEpO1xuI2lmZGVmIFNUUk9LRVxuZmxvYXQgYWxwaGE9c21vb3Roc3RlcCguMCwuMSxiYXNl
Q29sb3IuYSk7XG5iYXNlQ29sb3IuYT1hbHBoYTtcbmJhc2VDb2xvci5yZ2I9YmFzZUNvbG9yLnJn
YiphbHBoYTtcbiNlbmRpZlxuI2VuZGlmXG5nbF9GcmFnQ29sb3I9YmFzZUNvbG9yO1xufSI7Citf
TWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5T
aGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGdsb3dNYXBN
ZXJnZVBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2dsb3dNYXBNZXJnZS52ZXJ0ZXgudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hh
ZGVycy9nbG93TWFwTWVyZ2UudmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZ2xvd01hcE1lcmdl
VmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImdsb3dN
YXBNZXJnZVZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2xvd01hcE1lcmdlVmVy
dGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBu
YW1lID0gJ2dsb3dNYXBNZXJnZVZlcnRleFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxuYXR0cmli
dXRlIHZlYzIgcG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMiB2VVY7XG5jb25zdCB2ZWMyIG1hZGQ9
dmVjMigwLjUsMC41KTtcbnZvaWQgbWFpbih2b2lkKSB7XG52VVY9cG9zaXRpb24qbWFkZCttYWRk
O1xuZ2xfUG9zaXRpb249dmVjNChwb3NpdGlvbiwwLjAsMS4wKTtcbn0iOworX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3Jl
W25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBnbG93TWFwTWVyZ2VWZXJ0ZXhT
aGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1NoYWRlcnMvZ3B1UmVuZGVyUGFydGljbGVzLmZyYWdtZW50LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vU2hhZGVycy9ncHVSZW5kZXJQYXJ0aWNsZXMuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IGdwdVJlbmRlclBhcnRpY2xlc1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgImdwdVJlbmRlclBhcnRpY2xlc1BpeGVsU2hhZGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBncHVSZW5kZXJQYXJ0aWNsZXNQaXhlbFNoYWRlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9T
aGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uMl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9jbGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uMiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL2NsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRpb24yLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2ltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRl
cnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVscGVyRnVuY3Rpb25zX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRl
L2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0
aW9ucy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbWFn
ZVByb2Nlc3NpbmdGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVuY3Rp
b25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVuY3Rpb25z
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2NsaXBQbGFu
ZUZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZUZyYWdtZW50ICovICIuL1NoYWRlcnMv
U2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lRnJhZ21lbnQudHMiKTsKKworCisKKworCisKK3ZhciBu
YW1lID0gJ2dwdVJlbmRlclBhcnRpY2xlc1BpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiI3Zl
cnNpb24gMzAwIGVzXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbmluIHZlYzIg
dlVWO1xuaW4gdmVjNCB2Q29sb3I7XG5vdXQgdmVjNCBvdXRGcmFnQ29sb3I7XG4jaW5jbHVkZTxj
bGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uMj5cbiNpbmNsdWRlPGltYWdlUHJvY2Vzc2luZ0Rl
Y2xhcmF0aW9uPlxuI2luY2x1ZGU8aGVscGVyRnVuY3Rpb25zPlxuI2luY2x1ZGU8aW1hZ2VQcm9j
ZXNzaW5nRnVuY3Rpb25zPlxudm9pZCBtYWluKCkge1xuI2luY2x1ZGU8Y2xpcFBsYW5lRnJhZ21l
bnQ+XG52ZWM0IHRleHR1cmVDb2xvcj10ZXh0dXJlKHRleHR1cmVTYW1wbGVyLHZVVik7XG5vdXRG
cmFnQ29sb3I9dGV4dHVyZUNvbG9yKnZDb2xvcjtcbiNpZmRlZiBCTEVORE1VTFRJUExZTU9ERVxu
ZmxvYXQgYWxwaGE9dkNvbG9yLmEqdGV4dHVyZUNvbG9yLmE7XG5vdXRGcmFnQ29sb3IucmdiPW91
dEZyYWdDb2xvci5yZ2IqYWxwaGErdmVjMygxLjApKigxLjAtYWxwaGEpO1xuI2VuZGlmXG5cblxu
I2lmZGVmIElNQUdFUFJPQ0VTU0lOR1BPU1RQUk9DRVNTXG5vdXRGcmFnQ29sb3IucmdiPXRvTGlu
ZWFyU3BhY2Uob3V0RnJhZ0NvbG9yLnJnYik7XG4jZWxzZVxuI2lmZGVmIElNQUdFUFJPQ0VTU0lO
R1xub3V0RnJhZ0NvbG9yLnJnYj10b0xpbmVhclNwYWNlKG91dEZyYWdDb2xvci5yZ2IpO1xub3V0
RnJhZ0NvbG9yPWFwcGx5SW1hZ2VQcm9jZXNzaW5nKG91dEZyYWdDb2xvcik7XG4jZW5kaWZcbiNl
bmRpZlxufVxuIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICov
Cit2YXIgZ3B1UmVuZGVyUGFydGljbGVzUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRl
cjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvZ3B1UmVuZGVy
UGFydGljbGVzLnZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL2dwdVJlbmRlclBhcnRpY2xlcy52
ZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBncHVSZW5kZXJQYXJ0aWNsZXNWZXJ0ZXhT
aGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVf
Xy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZ3B1UmVuZGVyUGFy
dGljbGVzVmVydGV4U2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBncHVSZW5kZXJQYXJ0aWNs
ZXNWZXJ0ZXhTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
ZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfY2xpcFBsYW5lVmVydGV4RGVj
bGFyYXRpb24yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uMiAqLyAi
Li9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uMi50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVWZXJ0
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0lu
Y2x1ZGUvY2xpcFBsYW5lVmVydGV4LnRzIik7CisKKworCit2YXIgbmFtZSA9ICdncHVSZW5kZXJQ
YXJ0aWNsZXNWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICIjdmVyc2lvbiAzMDAgZXNcbnVu
aWZvcm0gbWF0NCB2aWV3O1xudW5pZm9ybSBtYXQ0IHByb2plY3Rpb247XG51bmlmb3JtIHZlYzIg
dHJhbnNsYXRpb25QaXZvdDtcbnVuaWZvcm0gdmVjMyB3b3JsZE9mZnNldDtcblxuaW4gdmVjMyBw
b3NpdGlvbjtcbmluIGZsb2F0IGFnZTtcbmluIGZsb2F0IGxpZmU7XG5pbiB2ZWMzIHNpemU7XG4j
aWZuZGVmIEJJTExCT0FSRFxuaW4gdmVjMyBpbml0aWFsRGlyZWN0aW9uO1xuI2VuZGlmXG4jaWZk
ZWYgQklMTEJPQVJEU1RSRVRDSEVEXG5pbiB2ZWMzIGRpcmVjdGlvbjtcbiNlbmRpZlxuaW4gZmxv
YXQgYW5nbGU7XG4jaWZkZWYgQU5JTUFURVNIRUVUXG5pbiBmbG9hdCBjZWxsSW5kZXg7XG4jZW5k
aWZcbmluIHZlYzIgb2Zmc2V0O1xuaW4gdmVjMiB1djtcbm91dCB2ZWMyIHZVVjtcbm91dCB2ZWM0
IHZDb2xvcjtcbiNpZiBkZWZpbmVkKENMSVBQTEFORSkgfHwgZGVmaW5lZChDTElQUExBTkUyKSB8
fCBkZWZpbmVkKENMSVBQTEFORTMpIHx8IGRlZmluZWQoQ0xJUFBMQU5FNClcbnVuaWZvcm0gbWF0
NCBpbnZWaWV3O1xuI2VuZGlmXG4jaW5jbHVkZTxjbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbjI+
XG4jaWZkZWYgQ09MT1JHUkFESUVOVFNcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9yR3JhZGllbnRT
YW1wbGVyO1xuI2Vsc2VcbnVuaWZvcm0gdmVjNCBjb2xvckRlYWQ7XG5pbiB2ZWM0IGNvbG9yO1xu
I2VuZGlmXG4jaWZkZWYgQU5JTUFURVNIRUVUXG51bmlmb3JtIHZlYzMgc2hlZXRJbmZvcztcbiNl
bmRpZlxuI2lmZGVmIEJJTExCT0FSRFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xuI2VuZGlm
XG52ZWMzIHJvdGF0ZSh2ZWMzIHlheGlzLHZlYzMgcm90YXRlZENvcm5lcikge1xudmVjMyB4YXhp
cz1ub3JtYWxpemUoY3Jvc3ModmVjMygwLiwxLjAsMC4pLHlheGlzKSk7XG52ZWMzIHpheGlzPW5v
cm1hbGl6ZShjcm9zcyh5YXhpcyx4YXhpcykpO1xudmVjMyByb3cwPXZlYzMoeGF4aXMueCx4YXhp
cy55LHhheGlzLnopO1xudmVjMyByb3cxPXZlYzMoeWF4aXMueCx5YXhpcy55LHlheGlzLnopO1xu
dmVjMyByb3cyPXZlYzMoemF4aXMueCx6YXhpcy55LHpheGlzLnopO1xubWF0MyByb3RNYXRyaXg9
bWF0Myhyb3cwLHJvdzEscm93Mik7XG52ZWMzIGFsaWduZWRDb3JuZXI9cm90TWF0cml4KnJvdGF0
ZWRDb3JuZXI7XG5yZXR1cm4gKHBvc2l0aW9uK3dvcmxkT2Zmc2V0KSthbGlnbmVkQ29ybmVyO1xu
fVxuI2lmZGVmIEJJTExCT0FSRFNUUkVUQ0hFRFxudmVjMyByb3RhdGVBbGlnbih2ZWMzIHRvQ2Ft
ZXJhLHZlYzMgcm90YXRlZENvcm5lcikge1xudmVjMyBub3JtYWxpemVkVG9DYW1lcmE9bm9ybWFs
aXplKHRvQ2FtZXJhKTtcbnZlYzMgbm9ybWFsaXplZENyb3NzRGlyVG9DYW1lcmE9bm9ybWFsaXpl
KGNyb3NzKG5vcm1hbGl6ZShkaXJlY3Rpb24pLG5vcm1hbGl6ZWRUb0NhbWVyYSkpO1xudmVjMyBj
cm9zc1Byb2R1Y3Q9bm9ybWFsaXplKGNyb3NzKG5vcm1hbGl6ZWRUb0NhbWVyYSxub3JtYWxpemVk
Q3Jvc3NEaXJUb0NhbWVyYSkpO1xudmVjMyByb3cwPXZlYzMobm9ybWFsaXplZENyb3NzRGlyVG9D
YW1lcmEueCxub3JtYWxpemVkQ3Jvc3NEaXJUb0NhbWVyYS55LG5vcm1hbGl6ZWRDcm9zc0RpclRv
Q2FtZXJhLnopO1xudmVjMyByb3cxPXZlYzMoY3Jvc3NQcm9kdWN0LngsY3Jvc3NQcm9kdWN0Lnks
Y3Jvc3NQcm9kdWN0LnopO1xudmVjMyByb3cyPXZlYzMobm9ybWFsaXplZFRvQ2FtZXJhLngsbm9y
bWFsaXplZFRvQ2FtZXJhLnksbm9ybWFsaXplZFRvQ2FtZXJhLnopO1xubWF0MyByb3RNYXRyaXg9
bWF0Myhyb3cwLHJvdzEscm93Mik7XG52ZWMzIGFsaWduZWRDb3JuZXI9cm90TWF0cml4KnJvdGF0
ZWRDb3JuZXI7XG5yZXR1cm4gKHBvc2l0aW9uK3dvcmxkT2Zmc2V0KSthbGlnbmVkQ29ybmVyO1xu
fVxuI2VuZGlmXG52b2lkIG1haW4oKSB7XG4jaWZkZWYgQU5JTUFURVNIRUVUXG5mbG9hdCByb3dP
ZmZzZXQ9Zmxvb3IoY2VsbEluZGV4L3NoZWV0SW5mb3Mueik7XG5mbG9hdCBjb2x1bW5PZmZzZXQ9
Y2VsbEluZGV4LXJvd09mZnNldCpzaGVldEluZm9zLno7XG52ZWMyIHV2U2NhbGU9c2hlZXRJbmZv
cy54eTtcbnZlYzIgdXZPZmZzZXQ9dmVjMih1di54ICwxLjAtdXYueSk7XG52VVY9KHV2T2Zmc2V0
K3ZlYzIoY29sdW1uT2Zmc2V0LHJvd09mZnNldCkpKnV2U2NhbGU7XG4jZWxzZVxudlVWPXV2O1xu
I2VuZGlmXG5mbG9hdCByYXRpbz1hZ2UvbGlmZTtcbiNpZmRlZiBDT0xPUkdSQURJRU5UU1xudkNv
bG9yPXRleHR1cmUoY29sb3JHcmFkaWVudFNhbXBsZXIsdmVjMihyYXRpbywwKSk7XG4jZWxzZVxu
dkNvbG9yPWNvbG9yKnZlYzQoMS4wLXJhdGlvKStjb2xvckRlYWQqdmVjNChyYXRpbyk7XG4jZW5k
aWZcbnZlYzIgY29ybmVyUG9zPShvZmZzZXQtdHJhbnNsYXRpb25QaXZvdCkqc2l6ZS55eipzaXpl
LngrdHJhbnNsYXRpb25QaXZvdDtcbiNpZmRlZiBCSUxMQk9BUkRcbnZlYzQgcm90YXRlZENvcm5l
cjtcbnJvdGF0ZWRDb3JuZXIudz0wLjtcbiNpZmRlZiBCSUxMQk9BUkRZXG5yb3RhdGVkQ29ybmVy
Lng9Y29ybmVyUG9zLngqY29zKGFuZ2xlKS1jb3JuZXJQb3MueSpzaW4oYW5nbGUpO1xucm90YXRl
ZENvcm5lci56PWNvcm5lclBvcy54KnNpbihhbmdsZSkrY29ybmVyUG9zLnkqY29zKGFuZ2xlKTtc
bnJvdGF0ZWRDb3JuZXIueT0wLjtcbnZlYzMgeWF4aXM9KHBvc2l0aW9uK3dvcmxkT2Zmc2V0KS1l
eWVQb3NpdGlvbjtcbnlheGlzLnk9MC47XG52ZWMzIHdvcmxkUG9zPXJvdGF0ZShub3JtYWxpemUo
eWF4aXMpLHJvdGF0ZWRDb3JuZXIueHl6KTtcbnZlYzQgdmlld1Bvc2l0aW9uPSh2aWV3KnZlYzQo
d29ybGRQb3MsMS4wKSk7XG4jZWxpZiBkZWZpbmVkKEJJTExCT0FSRFNUUkVUQ0hFRClcbnJvdGF0
ZWRDb3JuZXIueD1jb3JuZXJQb3MueCpjb3MoYW5nbGUpLWNvcm5lclBvcy55KnNpbihhbmdsZSk7
XG5yb3RhdGVkQ29ybmVyLnk9Y29ybmVyUG9zLngqc2luKGFuZ2xlKStjb3JuZXJQb3MueSpjb3Mo
YW5nbGUpO1xucm90YXRlZENvcm5lci56PTAuO1xudmVjMyB0b0NhbWVyYT0ocG9zaXRpb24rd29y
bGRPZmZzZXQpLWV5ZVBvc2l0aW9uO1xudmVjMyB3b3JsZFBvcz1yb3RhdGVBbGlnbih0b0NhbWVy
YSxyb3RhdGVkQ29ybmVyLnh5eik7XG52ZWM0IHZpZXdQb3NpdGlvbj0odmlldyp2ZWM0KHdvcmxk
UG9zLDEuMCkpO1xuI2Vsc2Vcblxucm90YXRlZENvcm5lci54PWNvcm5lclBvcy54KmNvcyhhbmds
ZSktY29ybmVyUG9zLnkqc2luKGFuZ2xlKTtcbnJvdGF0ZWRDb3JuZXIueT1jb3JuZXJQb3MueCpz
aW4oYW5nbGUpK2Nvcm5lclBvcy55KmNvcyhhbmdsZSk7XG5yb3RhdGVkQ29ybmVyLno9MC47XG5c
bnZlYzQgdmlld1Bvc2l0aW9uPXZpZXcqdmVjNCgocG9zaXRpb24rd29ybGRPZmZzZXQpLDEuMCkr
cm90YXRlZENvcm5lcjtcbiNlbmRpZlxuI2Vsc2VcblxudmVjMyByb3RhdGVkQ29ybmVyO1xucm90
YXRlZENvcm5lci54PWNvcm5lclBvcy54KmNvcyhhbmdsZSktY29ybmVyUG9zLnkqc2luKGFuZ2xl
KTtcbnJvdGF0ZWRDb3JuZXIueT0wLjtcbnJvdGF0ZWRDb3JuZXIuej1jb3JuZXJQb3MueCpzaW4o
YW5nbGUpK2Nvcm5lclBvcy55KmNvcyhhbmdsZSk7XG52ZWMzIHlheGlzPW5vcm1hbGl6ZShpbml0
aWFsRGlyZWN0aW9uKTtcbnZlYzMgd29ybGRQb3M9cm90YXRlKHlheGlzLHJvdGF0ZWRDb3JuZXIp
O1xuXG52ZWM0IHZpZXdQb3NpdGlvbj12aWV3KnZlYzQod29ybGRQb3MsMS4wKTtcbiNlbmRpZlxu
Z2xfUG9zaXRpb249cHJvamVjdGlvbip2aWV3UG9zaXRpb247XG5cbiNpZiBkZWZpbmVkKENMSVBQ
TEFORSkgfHwgZGVmaW5lZChDTElQUExBTkUyKSB8fCBkZWZpbmVkKENMSVBQTEFORTMpIHx8IGRl
ZmluZWQoQ0xJUFBMQU5FNClcbnZlYzQgd29ybGRQb3M9aW52Vmlldyp2aWV3UG9zaXRpb247XG4j
ZW5kaWZcbiNpbmNsdWRlPGNsaXBQbGFuZVZlcnRleD5cbn0iOworX01hdGVyaWFsc19lZmZlY3Rf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVd
ID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBncHVSZW5kZXJQYXJ0aWNsZXNWZXJ0ZXhT
aGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1NoYWRlcnMvZ3B1VXBkYXRlUGFydGljbGVzLmZyYWdtZW50LnRzIjoKKy8qISoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vU2hhZGVycy9ncHVVcGRhdGVQYXJ0aWNsZXMuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IGdwdVVwZGF0ZVBhcnRpY2xlc1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisK
KyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgImdwdVVwZGF0ZVBhcnRpY2xlc1BpeGVsU2hhZGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBncHVVcGRhdGVQYXJ0aWNsZXNQaXhlbFNoYWRlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdncHVVcGRhdGVQYXJ0
aWNsZXNQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIiN2ZXJzaW9uIDMwMCBlc1xudm9pZCBt
YWluKCkge1xuZGlzY2FyZDtcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7Cisv
KiogQGhpZGRlbiAqLwordmFyIGdwdVVwZGF0ZVBhcnRpY2xlc1BpeGVsU2hhZGVyID0geyBuYW1l
OiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFk
ZXJzL2dwdVVwZGF0ZVBhcnRpY2xlcy52ZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9ncHVVcGRh
dGVQYXJ0aWNsZXMudmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZ3B1VXBkYXRlUGFy
dGljbGVzVmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
ImdwdVVwZGF0ZVBhcnRpY2xlc1ZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ3B1
VXBkYXRlUGFydGljbGVzVmVydGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZm
ZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2dwdVVwZGF0ZVBhcnRpY2xlc1ZlcnRleFNoYWRlcic7
Cit2YXIgc2hhZGVyID0gIiN2ZXJzaW9uIDMwMCBlc1xuI2RlZmluZSBQSSAzLjE0MTU5XG51bmlm
b3JtIGZsb2F0IGN1cnJlbnRDb3VudDtcbnVuaWZvcm0gZmxvYXQgdGltZURlbHRhO1xudW5pZm9y
bSBmbG9hdCBzdG9wRmFjdG9yO1xudW5pZm9ybSBtYXQ0IGVtaXR0ZXJXTTtcbnVuaWZvcm0gdmVj
MiBsaWZlVGltZTtcbnVuaWZvcm0gdmVjMiBlbWl0UG93ZXI7XG51bmlmb3JtIHZlYzIgc2l6ZVJh
bmdlO1xudW5pZm9ybSB2ZWM0IHNjYWxlUmFuZ2U7XG4jaWZuZGVmIENPTE9SR1JBRElFTlRTXG51
bmlmb3JtIHZlYzQgY29sb3IxO1xudW5pZm9ybSB2ZWM0IGNvbG9yMjtcbiNlbmRpZlxudW5pZm9y
bSB2ZWMzIGdyYXZpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCByYW5kb21TYW1wbGVyO1xudW5pZm9y
bSBzYW1wbGVyMkQgcmFuZG9tU2FtcGxlcjI7XG51bmlmb3JtIHZlYzQgYW5nbGVSYW5nZTtcbiNp
ZmRlZiBCT1hFTUlUVEVSXG51bmlmb3JtIHZlYzMgZGlyZWN0aW9uMTtcbnVuaWZvcm0gdmVjMyBk
aXJlY3Rpb24yO1xudW5pZm9ybSB2ZWMzIG1pbkVtaXRCb3g7XG51bmlmb3JtIHZlYzMgbWF4RW1p
dEJveDtcbiNlbmRpZlxuI2lmZGVmIFBPSU5URU1JVFRFUlxudW5pZm9ybSB2ZWMzIGRpcmVjdGlv
bjE7XG51bmlmb3JtIHZlYzMgZGlyZWN0aW9uMjtcbiNlbmRpZlxuI2lmZGVmIEhFTUlTUEhFUklD
RU1JVFRFUlxudW5pZm9ybSBmbG9hdCByYWRpdXM7XG51bmlmb3JtIGZsb2F0IHJhZGl1c1Jhbmdl
O1xudW5pZm9ybSBmbG9hdCBkaXJlY3Rpb25SYW5kb21pemVyO1xuI2VuZGlmXG4jaWZkZWYgU1BI
RVJFRU1JVFRFUlxudW5pZm9ybSBmbG9hdCByYWRpdXM7XG51bmlmb3JtIGZsb2F0IHJhZGl1c1Jh
bmdlO1xuI2lmZGVmIERJUkVDVEVEU1BIRVJFRU1JVFRFUlxudW5pZm9ybSB2ZWMzIGRpcmVjdGlv
bjE7XG51bmlmb3JtIHZlYzMgZGlyZWN0aW9uMjtcbiNlbHNlXG51bmlmb3JtIGZsb2F0IGRpcmVj
dGlvblJhbmRvbWl6ZXI7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIENZTElOREVSRU1JVFRFUlxu
dW5pZm9ybSBmbG9hdCByYWRpdXM7XG51bmlmb3JtIGZsb2F0IGhlaWdodDtcbnVuaWZvcm0gZmxv
YXQgcmFkaXVzUmFuZ2U7XG4jaWZkZWYgRElSRUNURURDWUxJTkRFUkVNSVRURVJcbnVuaWZvcm0g
dmVjMyBkaXJlY3Rpb24xO1xudW5pZm9ybSB2ZWMzIGRpcmVjdGlvbjI7XG4jZWxzZVxudW5pZm9y
bSBmbG9hdCBkaXJlY3Rpb25SYW5kb21pemVyO1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBDT05F
RU1JVFRFUlxudW5pZm9ybSB2ZWMyIHJhZGl1cztcbnVuaWZvcm0gZmxvYXQgY29uZUFuZ2xlO1xu
dW5pZm9ybSB2ZWMyIGhlaWdodDtcbnVuaWZvcm0gZmxvYXQgZGlyZWN0aW9uUmFuZG9taXplcjtc
biNlbmRpZlxuXG5pbiB2ZWMzIHBvc2l0aW9uO1xuaW4gZmxvYXQgYWdlO1xuaW4gZmxvYXQgbGlm
ZTtcbmluIHZlYzQgc2VlZDtcbmluIHZlYzMgc2l6ZTtcbiNpZm5kZWYgQ09MT1JHUkFESUVOVFNc
bmluIHZlYzQgY29sb3I7XG4jZW5kaWZcbmluIHZlYzMgZGlyZWN0aW9uO1xuI2lmbmRlZiBCSUxM
Qk9BUkRcbmluIHZlYzMgaW5pdGlhbERpcmVjdGlvbjtcbiNlbmRpZlxuI2lmZGVmIEFOR1VMQVJT
UEVFREdSQURJRU5UU1xuaW4gZmxvYXQgYW5nbGU7XG4jZWxzZVxuaW4gdmVjMiBhbmdsZTtcbiNl
bmRpZlxuI2lmZGVmIEFOSU1BVEVTSEVFVFxuaW4gZmxvYXQgY2VsbEluZGV4O1xuI2lmZGVmIEFO
SU1BVEVTSEVFVFJBTkRPTVNUQVJUXG5pbiBmbG9hdCBjZWxsU3RhcnRPZmZzZXQ7XG4jZW5kaWZc
biNlbmRpZlxuI2lmZGVmIE5PSVNFXG5pbiB2ZWMzIG5vaXNlQ29vcmRpbmF0ZXMxO1xuaW4gdmVj
MyBub2lzZUNvb3JkaW5hdGVzMjtcbiNlbmRpZlxuXG5vdXQgdmVjMyBvdXRQb3NpdGlvbjtcbm91
dCBmbG9hdCBvdXRBZ2U7XG5vdXQgZmxvYXQgb3V0TGlmZTtcbm91dCB2ZWM0IG91dFNlZWQ7XG5v
dXQgdmVjMyBvdXRTaXplO1xuI2lmbmRlZiBDT0xPUkdSQURJRU5UU1xub3V0IHZlYzQgb3V0Q29s
b3I7XG4jZW5kaWZcbm91dCB2ZWMzIG91dERpcmVjdGlvbjtcbiNpZm5kZWYgQklMTEJPQVJEXG5v
dXQgdmVjMyBvdXRJbml0aWFsRGlyZWN0aW9uO1xuI2VuZGlmXG4jaWZkZWYgQU5HVUxBUlNQRUVE
R1JBRElFTlRTXG5vdXQgZmxvYXQgb3V0QW5nbGU7XG4jZWxzZVxub3V0IHZlYzIgb3V0QW5nbGU7
XG4jZW5kaWZcbiNpZmRlZiBBTklNQVRFU0hFRVRcbm91dCBmbG9hdCBvdXRDZWxsSW5kZXg7XG4j
aWZkZWYgQU5JTUFURVNIRUVUUkFORE9NU1RBUlRcbm91dCBmbG9hdCBvdXRDZWxsU3RhcnRPZmZz
ZXQ7XG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIE5PSVNFXG5vdXQgdmVjMyBvdXROb2lzZUNvb3Jk
aW5hdGVzMTtcbm91dCB2ZWMzIG91dE5vaXNlQ29vcmRpbmF0ZXMyO1xuI2VuZGlmXG4jaWZkZWYg
U0laRUdSQURJRU5UU1xudW5pZm9ybSBzYW1wbGVyMkQgc2l6ZUdyYWRpZW50U2FtcGxlcjtcbiNl
bmRpZlxuI2lmZGVmIEFOR1VMQVJTUEVFREdSQURJRU5UU1xudW5pZm9ybSBzYW1wbGVyMkQgYW5n
dWxhclNwZWVkR3JhZGllbnRTYW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYgVkVMT0NJVFlHUkFESUVO
VFNcbnVuaWZvcm0gc2FtcGxlcjJEIHZlbG9jaXR5R3JhZGllbnRTYW1wbGVyO1xuI2VuZGlmXG4j
aWZkZWYgTElNSVRWRUxPQ0lUWUdSQURJRU5UU1xudW5pZm9ybSBzYW1wbGVyMkQgbGltaXRWZWxv
Y2l0eUdyYWRpZW50U2FtcGxlcjtcbnVuaWZvcm0gZmxvYXQgbGltaXRWZWxvY2l0eURhbXBpbmc7
XG4jZW5kaWZcbiNpZmRlZiBEUkFHR1JBRElFTlRTXG51bmlmb3JtIHNhbXBsZXIyRCBkcmFnR3Jh
ZGllbnRTYW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYgTk9JU0VcbnVuaWZvcm0gdmVjMyBub2lzZVN0
cmVuZ3RoO1xudW5pZm9ybSBzYW1wbGVyMkQgbm9pc2VTYW1wbGVyO1xuI2VuZGlmXG4jaWZkZWYg
QU5JTUFURVNIRUVUXG51bmlmb3JtIHZlYzMgY2VsbEluZm9zO1xuI2VuZGlmXG52ZWMzIGdldFJh
bmRvbVZlYzMoZmxvYXQgb2Zmc2V0KSB7XG5yZXR1cm4gdGV4dHVyZShyYW5kb21TYW1wbGVyMix2
ZWMyKGZsb2F0KGdsX1ZlcnRleElEKSpvZmZzZXQvY3VycmVudENvdW50LDApKS5yZ2I7XG59XG52
ZWM0IGdldFJhbmRvbVZlYzQoZmxvYXQgb2Zmc2V0KSB7XG5yZXR1cm4gdGV4dHVyZShyYW5kb21T
YW1wbGVyLHZlYzIoZmxvYXQoZ2xfVmVydGV4SUQpKm9mZnNldC9jdXJyZW50Q291bnQsMCkpO1xu
fVxudm9pZCBtYWluKCkge1xuZmxvYXQgbmV3QWdlPWFnZSt0aW1lRGVsdGE7XG5cbmlmIChuZXdB
Z2U+PWxpZmUgJiYgc3RvcEZhY3RvciAhPSAwLikge1xudmVjMyBwb3NpdGlvbjtcbnZlYzMgZGly
ZWN0aW9uO1xuXG52ZWM0IHJhbmRvbXM9Z2V0UmFuZG9tVmVjNChzZWVkLngpO1xuXG5vdXRMaWZl
PWxpZmVUaW1lLngrKGxpZmVUaW1lLnktbGlmZVRpbWUueCkqcmFuZG9tcy5yO1xub3V0QWdlPW1v
ZChuZXdBZ2Usb3V0TGlmZSk7XG5cbm91dFNlZWQ9c2VlZDtcblxuI2lmZGVmIFNJWkVHUkFESUVO
VFNcbm91dFNpemUueD10ZXh0dXJlKHNpemVHcmFkaWVudFNhbXBsZXIsdmVjMigwLDApKS5yO1xu
I2Vsc2Vcbm91dFNpemUueD1zaXplUmFuZ2UueCsoc2l6ZVJhbmdlLnktc2l6ZVJhbmdlLngpKnJh
bmRvbXMuZztcbiNlbmRpZlxub3V0U2l6ZS55PXNjYWxlUmFuZ2UueCsoc2NhbGVSYW5nZS55LXNj
YWxlUmFuZ2UueCkqcmFuZG9tcy5iO1xub3V0U2l6ZS56PXNjYWxlUmFuZ2Uueisoc2NhbGVSYW5n
ZS53LXNjYWxlUmFuZ2UueikqcmFuZG9tcy5hO1xuI2lmbmRlZiBDT0xPUkdSQURJRU5UU1xuXG5v
dXRDb2xvcj1jb2xvcjErKGNvbG9yMi1jb2xvcjEpKnJhbmRvbXMuYjtcbiNlbmRpZlxuXG4jaWZu
ZGVmIEFOR1VMQVJTUEVFREdSQURJRU5UU1xub3V0QW5nbGUueT1hbmdsZVJhbmdlLngrKGFuZ2xl
UmFuZ2UueS1hbmdsZVJhbmdlLngpKnJhbmRvbXMuYTtcbm91dEFuZ2xlLng9YW5nbGVSYW5nZS56
KyhhbmdsZVJhbmdlLnctYW5nbGVSYW5nZS56KSpyYW5kb21zLnI7XG4jZWxzZVxub3V0QW5nbGU9
YW5nbGVSYW5nZS56KyhhbmdsZVJhbmdlLnctYW5nbGVSYW5nZS56KSpyYW5kb21zLnI7XG4jZW5k
aWZcblxuI2lmZGVmIFBPSU5URU1JVFRFUlxudmVjMyByYW5kb21zMj1nZXRSYW5kb21WZWMzKHNl
ZWQueSk7XG52ZWMzIHJhbmRvbXMzPWdldFJhbmRvbVZlYzMoc2VlZC56KTtcbnBvc2l0aW9uPXZl
YzMoMCwwLDApO1xuZGlyZWN0aW9uPWRpcmVjdGlvbjErKGRpcmVjdGlvbjItZGlyZWN0aW9uMSkq
cmFuZG9tczM7XG4jZWxpZiBkZWZpbmVkKEJPWEVNSVRURVIpXG52ZWMzIHJhbmRvbXMyPWdldFJh
bmRvbVZlYzMoc2VlZC55KTtcbnZlYzMgcmFuZG9tczM9Z2V0UmFuZG9tVmVjMyhzZWVkLnopO1xu
cG9zaXRpb249bWluRW1pdEJveCsobWF4RW1pdEJveC1taW5FbWl0Qm94KSpyYW5kb21zMjtcbmRp
cmVjdGlvbj1kaXJlY3Rpb24xKyhkaXJlY3Rpb24yLWRpcmVjdGlvbjEpKnJhbmRvbXMzO1xuI2Vs
aWYgZGVmaW5lZChIRU1JU1BIRVJJQ0VNSVRURVIpXG52ZWMzIHJhbmRvbXMyPWdldFJhbmRvbVZl
YzMoc2VlZC55KTtcbnZlYzMgcmFuZG9tczM9Z2V0UmFuZG9tVmVjMyhzZWVkLnopO1xuXG5mbG9h
dCBwaGk9Mi4wKlBJKnJhbmRvbXMyLng7XG5mbG9hdCB0aGV0YT1hY29zKDIuMCpyYW5kb21zMi55
LTEuMCk7XG5mbG9hdCByYW5kWD1jb3MocGhpKSpzaW4odGhldGEpO1xuZmxvYXQgcmFuZFk9Y29z
KHRoZXRhKTtcbmZsb2F0IHJhbmRaPXNpbihwaGkpKnNpbih0aGV0YSk7XG5wb3NpdGlvbj0ocmFk
aXVzLShyYWRpdXMqcmFkaXVzUmFuZ2UqcmFuZG9tczIueikpKnZlYzMocmFuZFgsYWJzKHJhbmRZ
KSxyYW5kWik7XG5kaXJlY3Rpb249cG9zaXRpb24rZGlyZWN0aW9uUmFuZG9taXplcipyYW5kb21z
MztcbiNlbGlmIGRlZmluZWQoU1BIRVJFRU1JVFRFUilcbnZlYzMgcmFuZG9tczI9Z2V0UmFuZG9t
VmVjMyhzZWVkLnkpO1xudmVjMyByYW5kb21zMz1nZXRSYW5kb21WZWMzKHNlZWQueik7XG5cbmZs
b2F0IHBoaT0yLjAqUEkqcmFuZG9tczIueDtcbmZsb2F0IHRoZXRhPWFjb3MoMi4wKnJhbmRvbXMy
LnktMS4wKTtcbmZsb2F0IHJhbmRYPWNvcyhwaGkpKnNpbih0aGV0YSk7XG5mbG9hdCByYW5kWT1j
b3ModGhldGEpO1xuZmxvYXQgcmFuZFo9c2luKHBoaSkqc2luKHRoZXRhKTtcbnBvc2l0aW9uPShy
YWRpdXMtKHJhZGl1cypyYWRpdXNSYW5nZSpyYW5kb21zMi56KSkqdmVjMyhyYW5kWCxyYW5kWSxy
YW5kWik7XG4jaWZkZWYgRElSRUNURURTUEhFUkVFTUlUVEVSXG5kaXJlY3Rpb249ZGlyZWN0aW9u
MSsoZGlyZWN0aW9uMi1kaXJlY3Rpb24xKSpyYW5kb21zMztcbiNlbHNlXG5cbmRpcmVjdGlvbj1w
b3NpdGlvbitkaXJlY3Rpb25SYW5kb21pemVyKnJhbmRvbXMzO1xuI2VuZGlmXG4jZWxpZiBkZWZp
bmVkKENZTElOREVSRU1JVFRFUilcbnZlYzMgcmFuZG9tczI9Z2V0UmFuZG9tVmVjMyhzZWVkLnkp
O1xudmVjMyByYW5kb21zMz1nZXRSYW5kb21WZWMzKHNlZWQueik7XG5cbmZsb2F0IHlQb3M9KHJh
bmRvbXMyLngtMC41KSpoZWlnaHQ7XG5mbG9hdCBhbmdsZT1yYW5kb21zMi55KlBJKjIuO1xuZmxv
YXQgaW52ZXJzZVJhZGl1c1JhbmdlU3F1YXJlZD0oKDEuLXJhZGl1c1JhbmdlKSooMS4tcmFkaXVz
UmFuZ2UpKTtcbmZsb2F0IHBvc2l0aW9uUmFkaXVzPXJhZGl1cypzcXJ0KGludmVyc2VSYWRpdXNS
YW5nZVNxdWFyZWQrKHJhbmRvbXMyLnoqKDEuLWludmVyc2VSYWRpdXNSYW5nZVNxdWFyZWQpKSk7
XG5mbG9hdCB4UG9zPXBvc2l0aW9uUmFkaXVzKmNvcyhhbmdsZSk7XG5mbG9hdCB6UG9zPXBvc2l0
aW9uUmFkaXVzKnNpbihhbmdsZSk7XG5wb3NpdGlvbj12ZWMzKHhQb3MseVBvcyx6UG9zKTtcbiNp
ZmRlZiBESVJFQ1RFRENZTElOREVSRU1JVFRFUlxuZGlyZWN0aW9uPWRpcmVjdGlvbjErKGRpcmVj
dGlvbjItZGlyZWN0aW9uMSkqcmFuZG9tczM7XG4jZWxzZVxuXG5hbmdsZT1hbmdsZSsoKHJhbmRv
bXMzLngtMC41KSpQSSk7XG5kaXJlY3Rpb249dmVjMyhjb3MoYW5nbGUpLHJhbmRvbXMzLnktMC41
LHNpbihhbmdsZSkpO1xuZGlyZWN0aW9uPW5vcm1hbGl6ZShkaXJlY3Rpb24pO1xuI2VuZGlmXG4j
ZWxpZiBkZWZpbmVkKENPTkVFTUlUVEVSKVxudmVjMyByYW5kb21zMj1nZXRSYW5kb21WZWMzKHNl
ZWQueSk7XG5mbG9hdCBzPTIuMCpQSSpyYW5kb21zMi54O1xuI2lmZGVmIENPTkVFTUlUVEVSU1BB
V05QT0lOVFxuZmxvYXQgaD0wLjAwMDE7XG4jZWxzZVxuZmxvYXQgaD1yYW5kb21zMi55KmhlaWdo
dC55O1xuXG5oPTEuLWgqaDtcbiNlbmRpZlxuZmxvYXQgbFJhZGl1cz1yYWRpdXMueC1yYWRpdXMu
eCpyYW5kb21zMi56KnJhZGl1cy55O1xubFJhZGl1cz1sUmFkaXVzKmg7XG5mbG9hdCByYW5kWD1s
UmFkaXVzKnNpbihzKTtcbmZsb2F0IHJhbmRaPWxSYWRpdXMqY29zKHMpO1xuZmxvYXQgcmFuZFk9
aCpoZWlnaHQueDtcbnBvc2l0aW9uPXZlYzMocmFuZFgscmFuZFkscmFuZFopO1xuXG5pZiAoYWJz
KGNvcyhjb25lQW5nbGUpKSA9PSAxLjApIHtcbmRpcmVjdGlvbj12ZWMzKDAuLDEuMCwwLik7XG59
IGVsc2Uge1xudmVjMyByYW5kb21zMz1nZXRSYW5kb21WZWMzKHNlZWQueik7XG5kaXJlY3Rpb249
bm9ybWFsaXplKHBvc2l0aW9uK2RpcmVjdGlvblJhbmRvbWl6ZXIqcmFuZG9tczMpO1xufVxuI2Vs
c2VcblxucG9zaXRpb249dmVjMygwLiwwLiwwLik7XG5cbmRpcmVjdGlvbj0yLjAqKGdldFJhbmRv
bVZlYzMoc2VlZC53KS12ZWMzKDAuNSwwLjUsMC41KSk7XG4jZW5kaWZcbmZsb2F0IHBvd2VyPWVt
aXRQb3dlci54KyhlbWl0UG93ZXIueS1lbWl0UG93ZXIueCkqcmFuZG9tcy5hO1xub3V0UG9zaXRp
b249KGVtaXR0ZXJXTSp2ZWM0KHBvc2l0aW9uLDEuKSkueHl6O1xudmVjMyBpbml0aWFsPShlbWl0
dGVyV00qdmVjNChkaXJlY3Rpb24sMC4pKS54eXo7XG5vdXREaXJlY3Rpb249aW5pdGlhbCpwb3dl
cjtcbiNpZm5kZWYgQklMTEJPQVJEXG5vdXRJbml0aWFsRGlyZWN0aW9uPWluaXRpYWw7XG4jZW5k
aWZcbiNpZmRlZiBBTklNQVRFU0hFRVRcbm91dENlbGxJbmRleD1jZWxsSW5mb3MueDtcbiNpZmRl
ZiBBTklNQVRFU0hFRVRSQU5ET01TVEFSVFxub3V0Q2VsbFN0YXJ0T2Zmc2V0PXJhbmRvbXMuYSpv
dXRMaWZlO1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBOT0lTRVxub3V0Tm9pc2VDb29yZGluYXRl
czE9bm9pc2VDb29yZGluYXRlczE7XG5vdXROb2lzZUNvb3JkaW5hdGVzMj1ub2lzZUNvb3JkaW5h
dGVzMjtcbiNlbmRpZlxufSBlbHNlIHtcbmZsb2F0IGRpcmVjdGlvblNjYWxlPXRpbWVEZWx0YTtc
bm91dEFnZT1uZXdBZ2U7XG5mbG9hdCBhZ2VHcmFkaWVudD1uZXdBZ2UvbGlmZTtcbiNpZmRlZiBW
RUxPQ0lUWUdSQURJRU5UU1xuZGlyZWN0aW9uU2NhbGUqPXRleHR1cmUodmVsb2NpdHlHcmFkaWVu
dFNhbXBsZXIsdmVjMihhZ2VHcmFkaWVudCwwKSkucjtcbiNlbmRpZlxuI2lmZGVmIERSQUdHUkFE
SUVOVFNcbmRpcmVjdGlvblNjYWxlKj0xLjAtdGV4dHVyZShkcmFnR3JhZGllbnRTYW1wbGVyLHZl
YzIoYWdlR3JhZGllbnQsMCkpLnI7XG4jZW5kaWZcbm91dFBvc2l0aW9uPXBvc2l0aW9uK2RpcmVj
dGlvbipkaXJlY3Rpb25TY2FsZTtcbm91dExpZmU9bGlmZTtcbm91dFNlZWQ9c2VlZDtcbiNpZm5k
ZWYgQ09MT1JHUkFESUVOVFNcbm91dENvbG9yPWNvbG9yO1xuI2VuZGlmXG4jaWZkZWYgU0laRUdS
QURJRU5UU1xub3V0U2l6ZS54PXRleHR1cmUoc2l6ZUdyYWRpZW50U2FtcGxlcix2ZWMyKGFnZUdy
YWRpZW50LDApKS5yO1xub3V0U2l6ZS55ej1zaXplLnl6O1xuI2Vsc2Vcbm91dFNpemU9c2l6ZTtc
biNlbmRpZlxuI2lmbmRlZiBCSUxMQk9BUkRcbm91dEluaXRpYWxEaXJlY3Rpb249aW5pdGlhbERp
cmVjdGlvbjtcbiNlbmRpZlxudmVjMyB1cGRhdGVkRGlyZWN0aW9uPWRpcmVjdGlvbitncmF2aXR5
KnRpbWVEZWx0YTtcbiNpZmRlZiBMSU1JVFZFTE9DSVRZR1JBRElFTlRTXG5mbG9hdCBsaW1pdFZl
bG9jaXR5PXRleHR1cmUobGltaXRWZWxvY2l0eUdyYWRpZW50U2FtcGxlcix2ZWMyKGFnZUdyYWRp
ZW50LDApKS5yO1xuZmxvYXQgY3VycmVudFZlbG9jaXR5PWxlbmd0aCh1cGRhdGVkRGlyZWN0aW9u
KTtcbmlmIChjdXJyZW50VmVsb2NpdHk+bGltaXRWZWxvY2l0eSkge1xudXBkYXRlZERpcmVjdGlv
bj11cGRhdGVkRGlyZWN0aW9uKmxpbWl0VmVsb2NpdHlEYW1waW5nO1xufVxuI2VuZGlmXG5vdXRE
aXJlY3Rpb249dXBkYXRlZERpcmVjdGlvbjtcbiNpZmRlZiBOT0lTRVxudmVjMyBsb2NhbFBvc2l0
aW9uPW91dFBvc2l0aW9uLWVtaXR0ZXJXTVszXS54eXo7XG5mbG9hdCBmZXRjaGVkUj10ZXh0dXJl
KG5vaXNlU2FtcGxlcix2ZWMyKG5vaXNlQ29vcmRpbmF0ZXMxLngsbm9pc2VDb29yZGluYXRlczEu
eSkqdmVjMigwLjUpK3ZlYzIoMC41KSkucjtcbmZsb2F0IGZldGNoZWRHPXRleHR1cmUobm9pc2VT
YW1wbGVyLHZlYzIobm9pc2VDb29yZGluYXRlczEueixub2lzZUNvb3JkaW5hdGVzMi54KSp2ZWMy
KDAuNSkrdmVjMigwLjUpKS5yO1xuZmxvYXQgZmV0Y2hlZEI9dGV4dHVyZShub2lzZVNhbXBsZXIs
dmVjMihub2lzZUNvb3JkaW5hdGVzMi55LG5vaXNlQ29vcmRpbmF0ZXMyLnopKnZlYzIoMC41KSt2
ZWMyKDAuNSkpLnI7XG52ZWMzIGZvcmNlPXZlYzMoMi4qZmV0Y2hlZFItMS4sMi4qZmV0Y2hlZEct
MS4sMi4qZmV0Y2hlZEItMS4pKm5vaXNlU3RyZW5ndGg7XG5vdXREaXJlY3Rpb249b3V0RGlyZWN0
aW9uK2ZvcmNlKnRpbWVEZWx0YTtcbm91dE5vaXNlQ29vcmRpbmF0ZXMxPW5vaXNlQ29vcmRpbmF0
ZXMxO1xub3V0Tm9pc2VDb29yZGluYXRlczI9bm9pc2VDb29yZGluYXRlczI7XG4jZW5kaWZcbiNp
ZmRlZiBBTkdVTEFSU1BFRURHUkFESUVOVFNcbmZsb2F0IGFuZ3VsYXJTcGVlZD10ZXh0dXJlKGFu
Z3VsYXJTcGVlZEdyYWRpZW50U2FtcGxlcix2ZWMyKGFnZUdyYWRpZW50LDApKS5yO1xub3V0QW5n
bGU9YW5nbGUrYW5ndWxhclNwZWVkKnRpbWVEZWx0YTtcbiNlbHNlXG5vdXRBbmdsZT12ZWMyKGFu
Z2xlLngrYW5nbGUueSp0aW1lRGVsdGEsYW5nbGUueSk7XG4jZW5kaWZcbiNpZmRlZiBBTklNQVRF
U0hFRVRcbmZsb2F0IG9mZnNldEFnZT1vdXRBZ2U7XG5mbG9hdCBkaXN0PWNlbGxJbmZvcy55LWNl
bGxJbmZvcy54O1xuI2lmZGVmIEFOSU1BVEVTSEVFVFJBTkRPTVNUQVJUXG5vdXRDZWxsU3RhcnRP
ZmZzZXQ9Y2VsbFN0YXJ0T2Zmc2V0O1xub2Zmc2V0QWdlKz1jZWxsU3RhcnRPZmZzZXQ7XG4jZW5k
aWZcbmZsb2F0IHJhdGlvPWNsYW1wKG1vZChvZmZzZXRBZ2UqY2VsbEluZm9zLnosbGlmZSkvbGlm
ZSwwLiwxLjApO1xub3V0Q2VsbEluZGV4PWZsb2F0KGludChjZWxsSW5mb3MueCtyYXRpbypkaXN0
KSk7XG4jZW5kaWZcbn1cbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBo
aWRkZW4gKi8KK3ZhciBncHVVcGRhdGVQYXJ0aWNsZXNWZXJ0ZXhTaGFkZXIgPSB7IG5hbWU6IG5h
bWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMv
Z3JhaW4uZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiohKlwKKyAgISoqKiAuL1NoYWRlcnMvZ3JhaW4uZnJhZ21lbnQudHMgKioqIQorICBcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogZ3Jh
aW5QaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJncmFp
blBpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBncmFpblBpeGVsU2hhZGVyOyB9KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2Vm
ZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNJbmNsdWRlX2hlbHBlckZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9oZWxwZXJG
dW5jdGlvbnMgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMudHMi
KTsKKworCit2YXIgbmFtZSA9ICdncmFpblBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiI2lu
Y2x1ZGU8aGVscGVyRnVuY3Rpb25zPlxuXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxl
cjtcblxudW5pZm9ybSBmbG9hdCBpbnRlbnNpdHk7XG51bmlmb3JtIGZsb2F0IGFuaW1hdGVkU2Vl
ZDtcblxudmFyeWluZyB2ZWMyIHZVVjtcbnZvaWQgbWFpbih2b2lkKVxue1xuZ2xfRnJhZ0NvbG9y
PXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xudmVjMiBzZWVkPXZVViooYW5pbWF0ZWRT
ZWVkKTtcbmZsb2F0IGdyYWluPWRpdGhlcihzZWVkLGludGVuc2l0eSk7XG5cbmZsb2F0IGx1bT1n
ZXRMdW1pbmFuY2UoZ2xfRnJhZ0NvbG9yLnJnYik7XG5mbG9hdCBncmFpbkFtb3VudD0oY29zKC1Q
SSsobHVtKlBJKjIuKSkrMS4pLzIuO1xuZ2xfRnJhZ0NvbG9yLnJnYis9Z3JhaW4qZ3JhaW5BbW91
bnQ7XG5nbF9GcmFnQ29sb3IucmdiPW1heChnbF9GcmFnQ29sb3IucmdiLDAuMCk7XG59IjsKK19N
YXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNo
YWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgZ3JhaW5QaXhl
bFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vU2hhZGVycy9oaWdobGlnaHRzLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvaGln
aGxpZ2h0cy5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGhpZ2hsaWdodHNQaXhlbFNoYWRl
ciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJoaWdobGlnaHRzUGl4ZWxT
aGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhpZ2hsaWdodHNQaXhlbFNoYWRlcjsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZl
Y3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdoaWdobGlnaHRz
UGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3Jt
IHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbmNvbnN0IHZlYzMgUkdCTHVtaW5hbmNlQ29lZmZp
Y2llbnRzPXZlYzMoMC4yMTI2LDAuNzE1MiwwLjA3MjIpO1xudm9pZCBtYWluKHZvaWQpXG57XG52
ZWM0IHRleD10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWKTtcbnZlYzMgYz10ZXgucmdiO1xu
ZmxvYXQgbHVtYT1kb3QoYy5yZ2IsUkdCTHVtaW5hbmNlQ29lZmZpY2llbnRzKTtcblxuXG5nbF9G
cmFnQ29sb3I9dmVjNChwb3coYyx2ZWMzKDI1LjAtbHVtYSoxNS4wKSksdGV4LmEpO1xufSI7Citf
TWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5T
aGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGhpZ2hsaWdo
dHNQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9pbWFnZVByb2Nlc3NpbmcuZnJhZ21lbnQudHMiOgor
LyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEq
KiogLi9TaGFkZXJzL2ltYWdlUHJvY2Vzc2luZy5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92
aWRlZDogaW1hZ2VQcm9jZXNzaW5nUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1
bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBz
dHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiaW1hZ2VQcm9jZXNzaW5nUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIGltYWdlUHJvY2Vzc2luZ1BpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlh
bHMvZWZmZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRl
X2ltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2lu
Z0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5n
RGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1
ZGVfaGVscGVyRnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucy50cyIpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hh
ZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVuY3Rpb25zLnRzIik7CisKKworCisKK3ZhciBuYW1l
ID0gJ2ltYWdlUHJvY2Vzc2luZ1BpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG52YXJ5aW5n
IHZlYzIgdlVWO1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZVNhbXBsZXI7XG4jaW5jbHVkZTxp
bWFnZVByb2Nlc3NpbmdEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPGhlbHBlckZ1bmN0aW9ucz5cbiNp
bmNsdWRlPGltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9ucz5cbnZvaWQgbWFpbih2b2lkKVxue1xudmVj
NCByZXN1bHQ9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG4jaWZkZWYgSU1BR0VQUk9D
RVNTSU5HXG4jaWZuZGVmIEZST01MSU5FQVJTUEFDRVxuXG5yZXN1bHQucmdiPXRvTGluZWFyU3Bh
Y2UocmVzdWx0LnJnYik7XG4jZW5kaWZcbnJlc3VsdD1hcHBseUltYWdlUHJvY2Vzc2luZyhyZXN1
bHQpO1xuI2Vsc2VcblxuI2lmZGVmIEZST01MSU5FQVJTUEFDRVxucmVzdWx0PWFwcGx5SW1hZ2VQ
cm9jZXNzaW5nKHJlc3VsdCk7XG4jZW5kaWZcbiNlbmRpZlxuZ2xfRnJhZ0NvbG9yPXJlc3VsdDtc
bn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZm
ZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBp
bWFnZVByb2Nlc3NpbmdQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIg
fTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9rZXJuZWxCbHVyLmZyYWdtZW50
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1NoYWRlcnMva2VybmVsQmx1ci5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGtl
cm5lbEJsdXJQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJrZXJuZWxCbHVyUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGtlcm5lbEJsdXJQ
aXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9rZXJuZWxCbHVyVmFyeWluZ0RlY2xh
cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJWYXJ5aW5nRGVjbGFyYXRpb24gKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9rZXJuZWxCbHVyVmFyeWluZ0RlY2xhcmF0aW9uLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BhY2tpbmdGdW5jdGlv
bnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vU2hhZGVyc0luY2x1ZGUvcGFja2luZ0Z1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJ
bmNsdWRlL3BhY2tpbmdGdW5jdGlvbnMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
U2hhZGVyc0luY2x1ZGVfa2VybmVsQmx1ckZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJs
dXJGcmFnbWVudCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJGcmFnbWVu
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9rZXJuZWxC
bHVyRnJhZ21lbnQyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJGcmFnbWVudDIgKi8gIi4vU2hh
ZGVycy9TaGFkZXJzSW5jbHVkZS9rZXJuZWxCbHVyRnJhZ21lbnQyLnRzIik7CisKKworCisKKwor
dmFyIG5hbWUgPSAna2VybmVsQmx1clBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG51bmlm
b3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbnVuaWZvcm0gdmVjMiBkZWx0YTtcblxudmFy
eWluZyB2ZWMyIHNhbXBsZUNlbnRlcjtcbiNpZmRlZiBET0ZcbnVuaWZvcm0gc2FtcGxlcjJEIGNp
cmNsZU9mQ29uZnVzaW9uU2FtcGxlcjtcbnVuaWZvcm0gdmVjMiBjYW1lcmFNaW5NYXhaO1xuZmxv
YXQgc2FtcGxlRGlzdGFuY2UoY29uc3QgaW4gdmVjMiBvZmZzZXQpIHtcbmZsb2F0IGRlcHRoPXRl
eHR1cmUyRChjaXJjbGVPZkNvbmZ1c2lvblNhbXBsZXIsb2Zmc2V0KS5nO1xucmV0dXJuIGNhbWVy
YU1pbk1heFoueCsoY2FtZXJhTWluTWF4Wi55LWNhbWVyYU1pbk1heFoueCkqZGVwdGg7XG59XG5m
bG9hdCBzYW1wbGVDb0MoY29uc3QgaW4gdmVjMiBvZmZzZXQpIHtcbmZsb2F0IGNvYz10ZXh0dXJl
MkQoY2lyY2xlT2ZDb25mdXNpb25TYW1wbGVyLG9mZnNldCkucjtcbnJldHVybiBjb2M7XG59XG4j
ZW5kaWZcbiNpbmNsdWRlPGtlcm5lbEJsdXJWYXJ5aW5nRGVjbGFyYXRpb24+WzAuLnZhcnlpbmdD
b3VudF1cbiNpZmRlZiBQQUNLRURGTE9BVFxuI2luY2x1ZGU8cGFja2luZ0Z1bmN0aW9ucz5cbiNl
bmRpZlxudm9pZCBtYWluKHZvaWQpXG57XG5mbG9hdCBjb21wdXRlZFdlaWdodD0wLjA7XG4jaWZk
ZWYgUEFDS0VERkxPQVRcbmZsb2F0IGJsZW5kPTAuO1xuI2Vsc2VcbnZlYzQgYmxlbmQ9dmVjNCgw
Lik7XG4jZW5kaWZcbiNpZmRlZiBET0ZcbmZsb2F0IHN1bU9mV2VpZ2h0cz1DRU5URVJfV0VJR0hU
O1xuZmxvYXQgZmFjdG9yPTAuMDtcblxuI2lmZGVmIFBBQ0tFREZMT0FUXG5ibGVuZCs9dW5wYWNr
KHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcixzYW1wbGVDZW50ZXIpKSpDRU5URVJfV0VJR0hUO1xu
I2Vsc2VcbmJsZW5kKz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsc2FtcGxlQ2VudGVyKSpDRU5U
RVJfV0VJR0hUO1xuI2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlPGtlcm5lbEJsdXJGcmFnbWVudD5b
MC4udmFyeWluZ0NvdW50XVxuI2luY2x1ZGU8a2VybmVsQmx1ckZyYWdtZW50Mj5bMC4uZGVwQ291
bnRdXG4jaWZkZWYgUEFDS0VERkxPQVRcbmdsX0ZyYWdDb2xvcj1wYWNrKGJsZW5kKTtcbiNlbHNl
XG5nbF9GcmFnQ29sb3I9YmxlbmQ7XG4jZW5kaWZcbiNpZmRlZiBET0ZcbmdsX0ZyYWdDb2xvci89
c3VtT2ZXZWlnaHRzO1xuI2VuZGlmXG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsK
Ky8qKiBAaGlkZGVuICovCit2YXIga2VybmVsQmx1clBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1l
LCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL2tl
cm5lbEJsdXIudmVydGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL2tlcm5lbEJsdXIudmVydGV4LnRzICoqKiEKKyAg
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IGtlcm5lbEJsdXJWZXJ0ZXhTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAia2VybmVsQmx1clZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
a2VybmVsQmx1clZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01h
dGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50
cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9rZXJuZWxCbHVy
VmFyeWluZ0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJWYXJ5aW5nRGVjbGFy
YXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9rZXJuZWxCbHVyVmFyeWluZ0RlY2xh
cmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2tl
cm5lbEJsdXJWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUva2VybmVsQmx1clZlcnRleCAqLyAiLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2tlcm5lbEJsdXJWZXJ0ZXgudHMiKTsKKworCisKK3ZhciBuYW1l
ID0gJ2tlcm5lbEJsdXJWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbmF0dHJpYnV0ZSB2
ZWMyIHBvc2l0aW9uO1xuXG51bmlmb3JtIHZlYzIgZGVsdGE7XG5cbnZhcnlpbmcgdmVjMiBzYW1w
bGVDZW50ZXI7XG4jaW5jbHVkZTxrZXJuZWxCbHVyVmFyeWluZ0RlY2xhcmF0aW9uPlswLi52YXJ5
aW5nQ291bnRdXG5jb25zdCB2ZWMyIG1hZGQ9dmVjMigwLjUsMC41KTtcbnZvaWQgbWFpbih2b2lk
KSB7XG5zYW1wbGVDZW50ZXI9KHBvc2l0aW9uKm1hZGQrbWFkZCk7XG4jaW5jbHVkZTxrZXJuZWxC
bHVyVmVydGV4PlswLi52YXJ5aW5nQ291bnRdXG5nbF9Qb3NpdGlvbj12ZWM0KHBvc2l0aW9uLDAu
MCwxLjApO1xufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAq
LwordmFyIGtlcm5lbEJsdXJWZXJ0ZXhTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hh
ZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvbGF5ZXIuZnJhZ21lbnQu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAu
L1NoYWRlcnMvbGF5ZXIuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogbGF5ZXJQaXhlbFNoYWRlciAq
LworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJsYXllclBpeGVsU2hhZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBsYXllclBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRl
cmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2xheWVyUGl4ZWxTaGFkZXInOwordmFy
IHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJl
U2FtcGxlcjtcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKHZvaWQpIHtcbnZlYzQg
YmFzZUNvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xuI2lmZGVmIEFMUEhBVEVT
VFxuaWYgKGJhc2VDb2xvci5hPDAuNClcbmRpc2NhcmQ7XG4jZW5kaWZcbmdsX0ZyYWdDb2xvcj1i
YXNlQ29sb3IqY29sb3I7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBA
aGlkZGVuICovCit2YXIgbGF5ZXJQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBz
aGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9sYXllci52ZXJ0ZXgu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9T
aGFkZXJzL2xheWVyLnZlcnRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogbGF5ZXJWZXJ0ZXhTaGFkZXIgKi8KKy8q
KiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibGF5ZXJWZXJ0ZXhTaGFkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIGxheWVyVmVydGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlh
bHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ2xheWVyVmVydGV4U2hhZGVyJzsKK3ZhciBz
aGFkZXIgPSAiXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcblxudW5pZm9ybSB2ZWMyIHNjYWxl
O1xudW5pZm9ybSB2ZWMyIG9mZnNldDtcbnVuaWZvcm0gbWF0NCB0ZXh0dXJlTWF0cml4O1xuXG52
YXJ5aW5nIHZlYzIgdlVWO1xuY29uc3QgdmVjMiBtYWRkPXZlYzIoMC41LDAuNSk7XG52b2lkIG1h
aW4odm9pZCkge1xudmVjMiBzaGlmdGVkUG9zaXRpb249cG9zaXRpb24qc2NhbGUrb2Zmc2V0O1xu
dlVWPXZlYzIodGV4dHVyZU1hdHJpeCp2ZWM0KHNoaWZ0ZWRQb3NpdGlvbiptYWRkK21hZGQsMS4w
LDAuMCkpO1xuZ2xfUG9zaXRpb249dmVjNChzaGlmdGVkUG9zaXRpb24sMC4wLDEuMCk7XG59IjsK
K19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJd
LlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgbGF5ZXJW
ZXJ0ZXhTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8g
fSksCisKKy8qKiovICIuL1NoYWRlcnMvbGVuc0ZsYXJlLmZyYWdtZW50LnRzIjoKKy8qISoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9s
ZW5zRmxhcmUuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IGxlbnNGbGFyZVBpeGVsU2hhZGVy
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImxlbnNGbGFyZVBpeGVsU2hh
ZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBsZW5zRmxhcmVQaXhlbFNoYWRlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdsZW5zRmxhcmVQaXhl
bFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxudmFyeWluZyB2ZWMyIHZVVjtcbnVuaWZvcm0gc2Ft
cGxlcjJEIHRleHR1cmVTYW1wbGVyO1xuXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4o
dm9pZCkge1xudmVjNCBiYXNlQ29sb3I9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG5n
bF9GcmFnQ29sb3I9YmFzZUNvbG9yKmNvbG9yO1xufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBz
aGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGxlbnNGbGFyZVBpeGVsU2hhZGVyID0geyBuYW1l
OiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFk
ZXJzL2xlbnNGbGFyZS52ZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9sZW5zRmxhcmUudmVydGV4LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBw
cm92aWRlZDogbGVuc0ZsYXJlVmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3Ry
aWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgImxlbnNGbGFyZVZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
bGVuc0ZsYXJlVmVydGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRz
Iik7CisKK3ZhciBuYW1lID0gJ2xlbnNGbGFyZVZlcnRleFNoYWRlcic7Cit2YXIgc2hhZGVyID0g
IlxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCB2aWV3cG9ydE1hdHJp
eDtcblxudmFyeWluZyB2ZWMyIHZVVjtcbmNvbnN0IHZlYzIgbWFkZD12ZWMyKDAuNSwwLjUpO1xu
dm9pZCBtYWluKHZvaWQpIHtcbnZVVj1wb3NpdGlvbiptYWRkK21hZGQ7XG5nbF9Qb3NpdGlvbj12
aWV3cG9ydE1hdHJpeCp2ZWM0KHBvc2l0aW9uLDAuMCwxLjApO1xufSI7CitfTWF0ZXJpYWxzX2Vm
ZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVb
bmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGxlbnNGbGFyZVZlcnRleFNoYWRl
ciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vU2hhZGVycy9sZW5zSGlnaGxpZ2h0cy5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9s
ZW5zSGlnaGxpZ2h0cy5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBsZW5zSGlnaGxp
Z2h0c1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImxl
bnNIaWdobGlnaHRzUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGxlbnNIaWdobGln
aHRzUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNf
ZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwor
dmFyIG5hbWUgPSAnbGVuc0hpZ2hsaWdodHNQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxu
dW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZVNhbXBsZXI7XG5cbnVuaWZvcm0gZmxvYXQgZ2Fpbjtc
bnVuaWZvcm0gZmxvYXQgdGhyZXNob2xkO1xudW5pZm9ybSBmbG9hdCBzY3JlZW5fd2lkdGg7XG51
bmlmb3JtIGZsb2F0IHNjcmVlbl9oZWlnaHQ7XG5cbnZhcnlpbmcgdmVjMiB2VVY7XG5cbnZlYzQg
aGlnaGxpZ2h0Q29sb3IodmVjNCBjb2xvcikge1xudmVjNCBoaWdobGlnaHQ9Y29sb3I7XG5mbG9h
dCBsdW1pbmFuY2U9ZG90KGhpZ2hsaWdodC5yZ2IsdmVjMygwLjIxMjUsMC43MTU0LDAuMDcyMSkp
O1xuZmxvYXQgbHVtX3RocmVzaG9sZDtcbmlmICh0aHJlc2hvbGQ+MS4wKSB7IGx1bV90aHJlc2hv
bGQ9MC45NCswLjAxKnRocmVzaG9sZDsgfVxuZWxzZSB7IGx1bV90aHJlc2hvbGQ9MC41KzAuNDQq
dGhyZXNob2xkOyB9XG5sdW1pbmFuY2U9Y2xhbXAoKGx1bWluYW5jZS1sdW1fdGhyZXNob2xkKSoo
MS4wLygxLjAtbHVtX3RocmVzaG9sZCkpLDAuMCwxLjApO1xuaGlnaGxpZ2h0Kj1sdW1pbmFuY2Uq
Z2FpbjtcbmhpZ2hsaWdodC5hPTEuMDtcbnJldHVybiBoaWdobGlnaHQ7XG59XG52b2lkIG1haW4o
dm9pZClcbntcbnZlYzQgb3JpZ2luYWw9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG5c
bmlmIChnYWluID09IC0xLjApIHtcbmdsX0ZyYWdDb2xvcj12ZWM0KDAuMCwwLjAsMC4wLDEuMCk7
XG5yZXR1cm47XG59XG5mbG9hdCB3PTIuMC9zY3JlZW5fd2lkdGg7XG5mbG9hdCBoPTIuMC9zY3Jl
ZW5faGVpZ2h0O1xuZmxvYXQgd2VpZ2h0PTEuMDtcblxudmVjNCBibHVycmVkPXZlYzQoMC4wLDAu
MCwwLjAsMC4wKTtcbiNpZmRlZiBQRU5UQUdPTlxuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4
dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0wLjg0KncsMC40MypoKSkpO1xuYmx1cnJl
ZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDAuNDgq
dywtMS4yOSpoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVT
YW1wbGVyLHZVVit2ZWMyKDAuNjEqdywxLjUxKmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xv
cih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTEuNTUqdywtMC43NCpoKSkpO1xu
Ymx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMy
KDEuNzEqdywtMC41MipoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRl
eHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0wLjk0KncsMS41OSpoKSkpO1xuYmx1cnJlZCs9aGlnaGxp
Z2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0wLjQwKncsLTEuODcq
aCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2
VVYrdmVjMigxLjYyKncsMS4xNipoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVy
ZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0yLjA5KncsMC4yNSpoKSkpO1xuYmx1cnJlZCs9
aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDEuNDYqdywt
MS43MSpoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1w
bGVyLHZVVit2ZWMyKDAuMDgqdywyLjQyKmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0
ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTEuODUqdywtMS44OSpoKSkpO1xuYmx1
cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDIu
ODkqdywwLjE2KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVy
ZVNhbXBsZXIsdlVWK3ZlYzIoLTIuMjkqdywxLjg4KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRD
b2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMC40MCp3LC0yLjgxKmgpKSk7
XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3Zl
YzIoMS41NCp3LDIuMjYqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0
ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMi42MCp3LC0wLjYxKmgpKSk7XG5ibHVycmVkKz1oaWdo
bGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMi4zMSp3LC0xLjMw
KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIs
dlVWK3ZlYzIoLTAuODMqdywyLjUzKmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0
dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTEuMTIqdywtMi40OCpoKSkpO1xuYmx1cnJl
ZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDIuNjAq
dywxLjExKmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNh
bXBsZXIsdlVWK3ZlYzIoLTIuODIqdywwLjk5KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xv
cih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMS41MCp3LC0yLjgxKmgpKSk7XG5i
bHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIo
MC44NSp3LDMuMzMqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0
dXJlU2FtcGxlcix2VVYrdmVjMigtMi45NCp3LC0xLjkyKmgpKSk7XG5ibHVycmVkKz1oaWdobGln
aHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMy4yNyp3LC0wLjUzKmgp
KSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVW
K3ZlYzIoLTEuOTUqdywyLjQ4KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJl
MkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTAuMjMqdywtMy4wNCpoKSkpO1xuYmx1cnJlZCs9
aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDIuMTcqdywy
LjA1KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBs
ZXIsdlVWK3ZlYzIoLTIuOTcqdywtMC4wNCpoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3Io
dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDIuMjUqdywtMi4wMCpoKSkpO1xuYmx1
cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0w
LjMxKncsMy4wOCpoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1
cmVTYW1wbGVyLHZVVit2ZWMyKC0xLjk0KncsLTIuNTkqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdo
dENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigzLjM3KncsMC42NCpoKSkp
O1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2
ZWMyKC0zLjEzKncsMS45MypoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJE
KHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDEuMDMqdywtMy42NSpoKSkpO1xuYmx1cnJlZCs9aGln
aGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDEuNjAqdywzLjE3
KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIs
dlVWK3ZlYzIoLTMuMTQqdywtMS4xOSpoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4
dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKDMuMDAqdywtMS4xOSpoKSkpO1xuI2Vsc2Vc
bmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVj
MigtMC44NSp3LDAuMzYqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0
ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigwLjUyKncsLTEuMTQqaCkpKTtcbmJsdXJyZWQrPWhpZ2hs
aWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigwLjQ2KncsMS40Mipo
KSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZV
Vit2ZWMyKC0xLjQ2KncsLTAuODMqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1
cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigxLjc5KncsLTAuNDIqaCkpKTtcbmJsdXJyZWQr
PWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMS4xMSp3
LDEuNjIqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2Ft
cGxlcix2VVYrdmVjMigtMC4yOSp3LC0yLjA3KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xv
cih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMS42OSp3LDEuMzkqaCkpKTtcbmJs
dXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigt
Mi4yOCp3LDAuMTIqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0
dXJlU2FtcGxlcix2VVYrdmVjMigxLjY1KncsLTEuNjkqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdo
dENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMC4wOCp3LDIuNDQqaCkp
KTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYr
dmVjMigtMS42Myp3LC0xLjkwKmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJl
MkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMi41NSp3LDAuMzEqaCkpKTtcbmJsdXJyZWQrPWhp
Z2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMi4xMyp3LDEu
NTIqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxl
cix2VVYrdmVjMigwLjU2KncsLTIuNjEqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRl
eHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigxLjM4KncsMi4zNCpoKSkpO1xuYmx1cnJl
ZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0yLjY0
KncsLTAuODEqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJl
U2FtcGxlcix2VVYrdmVjMigyLjUzKncsLTEuMjEqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENv
bG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMS4wNip3LDIuNjMqaCkpKTtc
bmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVj
MigtMS4wMCp3LC0yLjY5KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQo
dGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMi41OSp3LDEuMzIqaCkpKTtcbmJsdXJyZWQrPWhpZ2hs
aWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMi44Mip3LDAuNzgq
aCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2
VVYrdmVjMigxLjU3KncsLTIuNTAqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1
cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigwLjU0KncsMi45MypoKSkpO1xuYmx1cnJlZCs9
aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVit2ZWMyKC0yLjM5Kncs
LTEuODEqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2Ft
cGxlcix2VVYrdmVjMigzLjAxKncsLTAuMjgqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENvbG9y
KHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMi4wNCp3LDIuMjUqaCkpKTtcbmJs
dXJyZWQrPWhpZ2hsaWdodENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigt
MC4wMip3LC0zLjA1KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4
dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMi4wOSp3LDIuMjUqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdo
dENvbG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMy4wNyp3LC0wLjI1Kmgp
KSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVW
K3ZlYzIoMi40NCp3LC0xLjkwKmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJl
MkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTAuNTIqdywzLjA1KmgpKSk7XG5ibHVycmVkKz1o
aWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTEuNjgqdywt
Mi42MSpoKSkpO1xuYmx1cnJlZCs9aGlnaGxpZ2h0Q29sb3IodGV4dHVyZTJEKHRleHR1cmVTYW1w
bGVyLHZVVit2ZWMyKDMuMDEqdywwLjc5KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0
ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoLTIuNzYqdywxLjQ2KmgpKSk7XG5ibHVy
cmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoMS4w
NSp3LC0yLjk0KmgpKSk7XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVy
ZVNhbXBsZXIsdlVWK3ZlYzIoMS4yMSp3LDIuODgqaCkpKTtcbmJsdXJyZWQrPWhpZ2hsaWdodENv
bG9yKHRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMigtMi44NCp3LC0xLjMwKmgpKSk7
XG5ibHVycmVkKz1oaWdobGlnaHRDb2xvcih0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3Zl
YzIoMi45OCp3LC0wLjk2KmgpKSk7XG4jZW5kaWZcbmJsdXJyZWQvPTM5LjA7XG5nbF9GcmFnQ29s
b3I9Ymx1cnJlZDtcblxufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhp
ZGRlbiAqLwordmFyIGxlbnNIaWdobGlnaHRzUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNo
YWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvbGluZS5m
cmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisg
ICEqKiogLi9TaGFkZXJzL2xpbmUuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBsaW5lUGl4ZWxTaGFk
ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibGluZVBpeGVsU2hhZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBsaW5lUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01h
dGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnbGluZVBpeGVsU2hhZGVyJzsKK3Zh
ciBzaGFkZXIgPSAidW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKHZvaWQpIHtcbmdsX0Zy
YWdDb2xvcj1jb2xvcjtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBo
aWRkZW4gKi8KK3ZhciBsaW5lUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hh
ZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvbGluZS52ZXJ0ZXgudHMi
OgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRl
cnMvbGluZS52ZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogbGluZVZlcnRleFNoYWRlciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJsaW5lVmVydGV4U2hhZGVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBsaW5lVmVydGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0
LnRzIik7CisKK3ZhciBuYW1lID0gJ2xpbmVWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJc
bmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgbm9ybWFsO1xuXG51bmlm
b3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgd2lkdGg7XG51bmlm
b3JtIGZsb2F0IGFzcGVjdFJhdGlvO1xudm9pZCBtYWluKHZvaWQpIHtcbnZlYzQgdmlld1Bvc2l0
aW9uPXdvcmxkVmlld1Byb2plY3Rpb24qdmVjNChwb3NpdGlvbiwxLjApO1xudmVjNCB2aWV3UG9z
aXRpb25OZXh0PXdvcmxkVmlld1Byb2plY3Rpb24qdmVjNChub3JtYWwueHl6LDEuMCk7XG52ZWMy
IGN1cnJlbnRTY3JlZW49dmlld1Bvc2l0aW9uLnh5L3ZpZXdQb3NpdGlvbi53O1xudmVjMiBuZXh0
U2NyZWVuPXZpZXdQb3NpdGlvbk5leHQueHkvdmlld1Bvc2l0aW9uTmV4dC53O1xuY3VycmVudFNj
cmVlbi54Kj1hc3BlY3RSYXRpbztcbm5leHRTY3JlZW4ueCo9YXNwZWN0UmF0aW87XG52ZWMyIGRp
cj1ub3JtYWxpemUobmV4dFNjcmVlbi1jdXJyZW50U2NyZWVuKTtcbnZlYzIgbm9ybWFsRGlyPXZl
YzIoLWRpci55LGRpci54KTtcbm5vcm1hbERpcio9d2lkdGgvMi4wO1xubm9ybWFsRGlyLngvPWFz
cGVjdFJhdGlvO1xudmVjNCBvZmZzZXQ9dmVjNChub3JtYWxEaXIqbm9ybWFsLncsMC4wLDAuMCk7
XG5nbF9Qb3NpdGlvbj12aWV3UG9zaXRpb24rb2Zmc2V0O1xufSI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIGxpbmVWZXJ0ZXhTaGFkZXIgPSB7IG5h
bWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1No
YWRlcnMvbW90aW9uQmx1ci5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL21vdGlvbkJsdXIuZnJhZ21l
bnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBtb3Rpb25CbHVyUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChm
dW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18p
IHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibW90aW9uQmx1clBpeGVsU2hhZGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBtb3Rpb25CbHVyUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVy
aWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnbW90aW9uQmx1clBpeGVsU2hhZGVyJzsK
K3ZhciBzaGFkZXIgPSAiXG52YXJ5aW5nIHZlYzIgdlVWO1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4
dHVyZVNhbXBsZXI7XG51bmlmb3JtIHNhbXBsZXIyRCB2ZWxvY2l0eVNhbXBsZXI7XG51bmlmb3Jt
IGZsb2F0IG1vdGlvblN0cmVuZ3RoO1xudW5pZm9ybSBmbG9hdCBtb3Rpb25TY2FsZTtcbnVuaWZv
cm0gdmVjMiBzY3JlZW5TaXplO1xudm9pZCBtYWluKHZvaWQpXG57XG4jaWZkZWYgR0VPTUVUUllf
U1VQUE9SVEVEXG52ZWMyIHRleGVsU2l6ZT0xLjAvc2NyZWVuU2l6ZTtcbnZlYzIgdmVsb2NpdHlD
b2xvcj10ZXh0dXJlMkQodmVsb2NpdHlTYW1wbGVyLHZVVikucmcqMi4wLTEuMDtcbnZlYzIgdmVs
b2NpdHk9dmVjMihwb3codmVsb2NpdHlDb2xvci5yLDMuMCkscG93KHZlbG9jaXR5Q29sb3IuZywz
LjApKTtcbnZlbG9jaXR5Kj1tb3Rpb25TY2FsZSptb3Rpb25TdHJlbmd0aDtcbmZsb2F0IHNwZWVk
PWxlbmd0aCh2ZWxvY2l0eS90ZXhlbFNpemUpO1xuaW50IHNhbXBsZXNDb3VudD1pbnQoY2xhbXAo
c3BlZWQsMS4wLFNBTVBMRVMpKTtcbnZlbG9jaXR5PW5vcm1hbGl6ZSh2ZWxvY2l0eSkqdGV4ZWxT
aXplO1xuZmxvYXQgaGxpbT1mbG9hdCgtc2FtcGxlc0NvdW50KSowLjUrMC41O1xudmVjNCByZXN1
bHQ9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG5mb3IgKGludCBpPTE7IGk8aW50KFNB
TVBMRVMpOyArK2kpXG57XG5pZiAoaT49c2FtcGxlc0NvdW50KVxuYnJlYWs7XG52ZWMyIG9mZnNl
dD12VVYrdmVsb2NpdHkqKGhsaW0rZmxvYXQoaSkpO1xucmVzdWx0Kz10ZXh0dXJlMkQodGV4dHVy
ZVNhbXBsZXIsb2Zmc2V0KTtcbn1cbmdsX0ZyYWdDb2xvcj1yZXN1bHQvZmxvYXQoc2FtcGxlc0Nv
dW50KTtcbmdsX0ZyYWdDb2xvci5hPTEuMDtcbiNlbHNlXG5nbF9GcmFnQ29sb3I9dGV4dHVyZTJE
KHRleHR1cmVTYW1wbGVyLHZVVik7XG4jZW5kaWZcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0g
PSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIG1vdGlvbkJsdXJQaXhlbFNoYWRlciA9IHsg
bmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
U2hhZGVycy9ub2lzZS5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9ub2lzZS5mcmFnbWVudC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiBub2lzZVBpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIm5vaXNlUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vaXNlUGl4ZWxTaGFk
ZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRl
cmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAn
bm9pc2VQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxuXG51bmlmb3JtIGZsb2F0IGJyaWdo
dG5lc3M7XG51bmlmb3JtIGZsb2F0IHBlcnNpc3RlbmNlO1xudW5pZm9ybSBmbG9hdCB0aW1lU2Nh
bGU7XG5cbnZhcnlpbmcgdmVjMiB2VVY7XG5cbnZlYzIgaGFzaDIyKHZlYzIgcClcbntcbnA9cCpt
YXQyKDEyNy4xLDMxMS43LDI2OS41LDE4My4zKTtcbnA9LTEuMCsyLjAqZnJhY3Qoc2luKHApKjQz
NzU4LjU0NTMxMjMpO1xucmV0dXJuIHNpbihwKjYuMjgzK3RpbWVTY2FsZSk7XG59XG5mbG9hdCBp
bnRlcnBvbGF0aW9uTm9pc2UodmVjMiBwKVxue1xudmVjMiBwaT1mbG9vcihwKTtcbnZlYzIgcGY9
cC1waTtcbnZlYzIgdz1wZipwZiooMy4tMi4qcGYpO1xuZmxvYXQgZjAwPWRvdChoYXNoMjIocGkr
dmVjMiguMCwuMCkpLHBmLXZlYzIoLjAsLjApKTtcbmZsb2F0IGYwMT1kb3QoaGFzaDIyKHBpK3Zl
YzIoLjAsMS4pKSxwZi12ZWMyKC4wLDEuKSk7XG5mbG9hdCBmMTA9ZG90KGhhc2gyMihwaSt2ZWMy
KDEuMCwwLikpLHBmLXZlYzIoMS4wLDAuKSk7XG5mbG9hdCBmMTE9ZG90KGhhc2gyMihwaSt2ZWMy
KDEuMCwxLikpLHBmLXZlYzIoMS4wLDEuKSk7XG5mbG9hdCB4bTE9bWl4KGYwMCxmMTAsdy54KTtc
bmZsb2F0IHhtMj1taXgoZjAxLGYxMSx3LngpO1xuZmxvYXQgeW09bWl4KHhtMSx4bTIsdy55KTtc
bnJldHVybiB5bTtcbn1cbmZsb2F0IHBlcmxpbk5vaXNlMkQoZmxvYXQgeCxmbG9hdCB5KVxue1xu
ZmxvYXQgc3VtPTAuMDtcbmZsb2F0IGZyZXF1ZW5jeT0wLjA7XG5mbG9hdCBhbXBsaXR1ZGU9MC4w
O1xuZm9yKGludCBpPTA7IGk8T0NUQVZFUzsgaSsrKVxue1xuZnJlcXVlbmN5PXBvdygyLjAsZmxv
YXQoaSkpO1xuYW1wbGl0dWRlPXBvdyhwZXJzaXN0ZW5jZSxmbG9hdChpKSk7XG5zdW09c3VtK2lu
dGVycG9sYXRpb25Ob2lzZSh2ZWMyKHgqZnJlcXVlbmN5LHkqZnJlcXVlbmN5KSkqYW1wbGl0dWRl
O1xufVxucmV0dXJuIHN1bTtcbn1cblxudm9pZCBtYWluKHZvaWQpXG57XG5mbG9hdCB4PWFicyh2
VVYueCk7XG5mbG9hdCB5PWFicyh2VVYueSk7XG5mbG9hdCBub2lzZT1icmlnaHRuZXNzKygxLjAt
YnJpZ2h0bmVzcykqcGVybGluTm9pc2UyRCh4LHkpO1xuZ2xfRnJhZ0NvbG9yPXZlYzQobm9pc2Us
bm9pc2Usbm9pc2UsMS4wKTtcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7Cisv
KiogQGhpZGRlbiAqLwordmFyIG5vaXNlUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRl
cjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvb3V0bGluZS5m
cmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc
CisgICEqKiogLi9TaGFkZXJzL291dGxpbmUuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBvdXRs
aW5lUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAib3V0
bGluZVBpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBvdXRsaW5lUGl4ZWxTaGFkZXI7
IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlh
bHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbG9nRGVwdGhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9sb2dEZXB0aERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbG9nRGVw
dGhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5j
bHVkZV9sb2dEZXB0aEZyYWdtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2xvZ0RlcHRoRnJhZ21lbnQgKi8g
Ii4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aEZyYWdtZW50LnRzIik7CisKKworCit2
YXIgbmFtZSA9ICdvdXRsaW5lUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICIjaWZkZWYgTE9H
QVJJVEhNSUNERVBUSFxuI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZVxuI2Vu
ZGlmXG51bmlmb3JtIHZlYzQgY29sb3I7XG4jaWZkZWYgQUxQSEFURVNUXG52YXJ5aW5nIHZlYzIg
dlVWO1xudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZVNhbXBsZXI7XG4jZW5kaWZcbiNpbmNsdWRl
PGxvZ0RlcHRoRGVjbGFyYXRpb24+XG52b2lkIG1haW4odm9pZCkge1xuI2lmZGVmIEFMUEhBVEVT
VFxuaWYgKHRleHR1cmUyRChkaWZmdXNlU2FtcGxlcix2VVYpLmE8MC40KVxuZGlzY2FyZDtcbiNl
bmRpZlxuI2luY2x1ZGU8bG9nRGVwdGhGcmFnbWVudD5cbmdsX0ZyYWdDb2xvcj1jb2xvcjtcbn0i
OworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0
Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBvdXRs
aW5lUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisKKworLyoq
Ki8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvb3V0bGluZS52ZXJ0ZXgudHMiOgorLyohKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvb3V0bGlu
ZS52ZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiEgZXhwb3J0cyBwcm92aWRlZDogb3V0bGluZVZlcnRleFNoYWRlciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJvdXRsaW5lVmVydGV4U2hhZGVyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBvdXRsaW5lVmVydGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMv
ZWZmZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2Jv
bmVzRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYm9uZXNEZWNsYXJhdGlvbiAqLyAiLi9TaGFk
ZXJzL1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFy
YXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFyYXRpb24g
Ki8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNs
YXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9t
b3JwaFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNW
ZXJ0ZXhEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0
c1ZlcnRleERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRl
cnNJbmNsdWRlX2luc3RhbmNlc0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc0Rl
Y2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzRGVjbGFyYXRp
b24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbG9nRGVw
dGhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aERlY2xhcmF0aW9uICovICIuL1No
YWRlcnMvU2hhZGVyc0luY2x1ZGUvbG9nRGVwdGhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVy
c0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
bW9ycGhUYXJnZXRzVmVydGV4LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRl
cnNJbmNsdWRlX2luc3RhbmNlc1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgg
Ki8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNWZXJ0ZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0lu
Y2x1ZGUvYm9uZXNWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc1ZlcnRl
eC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0
aFZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aFZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRl
cnNJbmNsdWRlL2xvZ0RlcHRoVmVydGV4LnRzIik7CisKKworCisKKworCisKKworCisKK3ZhciBu
YW1lID0gJ291dGxpbmVWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbmF0dHJpYnV0ZSB2
ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xuI2luY2x1ZGU8Ym9uZXNEZWNs
YXJhdGlvbj5cbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9uPlxu
I2luY2x1ZGU8bW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24+WzAuLm1heFNpbXVsdGFuZW91
c01vcnBoVGFyZ2V0c11cblxudW5pZm9ybSBmbG9hdCBvZmZzZXQ7XG4jaW5jbHVkZTxpbnN0YW5j
ZXNEZWNsYXJhdGlvbj5cbnVuaWZvcm0gbWF0NCB2aWV3UHJvamVjdGlvbjtcbiNpZmRlZiBBTFBI
QVRFU1RcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIG1hdDQgZGlmZnVzZU1hdHJpeDtcbiNp
ZmRlZiBVVjFcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuI2VuZGlmXG4jaWZkZWYgVVYyXG5hdHRyaWJ1
dGUgdmVjMiB1djI7XG4jZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGU8bG9nRGVwdGhEZWNsYXJhdGlv
bj5cbnZvaWQgbWFpbih2b2lkKVxue1xudmVjMyBwb3NpdGlvblVwZGF0ZWQ9cG9zaXRpb247XG52
ZWMzIG5vcm1hbFVwZGF0ZWQ9bm9ybWFsO1xuI2lmZGVmIFVWMVxudmVjMiB1dlVwZGF0ZWQ9dXY7
XG4jZW5kaWZcbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleD5bMC4ubWF4U2ltdWx0YW5lb3Vz
TW9ycGhUYXJnZXRzXVxudmVjMyBvZmZzZXRQb3NpdGlvbj1wb3NpdGlvblVwZGF0ZWQrKG5vcm1h
bFVwZGF0ZWQqb2Zmc2V0KTtcbiNpbmNsdWRlPGluc3RhbmNlc1ZlcnRleD5cbiNpbmNsdWRlPGJv
bmVzVmVydGV4PlxuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb24qZmluYWxXb3JsZCp2ZWM0KG9m
ZnNldFBvc2l0aW9uLDEuMCk7XG4jaWZkZWYgQUxQSEFURVNUXG4jaWZkZWYgVVYxXG52VVY9dmVj
MihkaWZmdXNlTWF0cml4KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbiNlbmRpZlxuI2lmZGVm
IFVWMlxudlVWPXZlYzIoZGlmZnVzZU1hdHJpeCp2ZWM0KHV2MiwxLjAsMC4wKSk7XG4jZW5kaWZc
biNlbmRpZlxuI2luY2x1ZGU8bG9nRGVwdGhWZXJ0ZXg+XG59XG4iOworX01hdGVyaWFsc19lZmZl
Y3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25h
bWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBvdXRsaW5lVmVydGV4U2hhZGVyID0g
eyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9TaGFkZXJzL3BhcnRpY2xlcy5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvcGFydGljbGVzLmZyYWdt
ZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBwYXJ0aWNsZXNQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJwYXJ0aWNsZXNQaXhlbFNoYWRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gcGFydGljbGVzUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFs
cy9lZmZlY3QudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVf
Y2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFn
bWVudERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvY2xpcFBsYW5lRnJh
Z21lbnREZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJz
SW5jbHVkZV9pbWFnZVByb2Nlc3NpbmdEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbWFnZVBy
b2Nlc3NpbmdEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJv
Y2Vzc2luZ0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRl
cnNJbmNsdWRlX2hlbHBlckZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMg
Ki8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW1hZ2VQcm9jZXNzaW5nRnVuY3Rp
b25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9ucyAqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL2ltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9ucy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVGcmFnbWVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJz
SW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVudCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2Ns
aXBQbGFuZUZyYWdtZW50LnRzIik7CisKKworCisKKworCit2YXIgbmFtZSA9ICdwYXJ0aWNsZXNQ
aXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxudmFyeWluZyB2ZWMyIHZVVjtcbnZhcnlpbmcg
dmVjNCB2Q29sb3I7XG51bmlmb3JtIHZlYzQgdGV4dHVyZU1hc2s7XG51bmlmb3JtIHNhbXBsZXIy
RCBkaWZmdXNlU2FtcGxlcjtcbiNpbmNsdWRlPGNsaXBQbGFuZUZyYWdtZW50RGVjbGFyYXRpb24+
XG4jaW5jbHVkZTxpbWFnZVByb2Nlc3NpbmdEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPGhlbHBlckZ1
bmN0aW9ucz5cbiNpbmNsdWRlPGltYWdlUHJvY2Vzc2luZ0Z1bmN0aW9ucz5cbiNpZmRlZiBSQU1Q
R1JBRElFTlRcbnZhcnlpbmcgdmVjNCByZW1hcFJhbmdlcztcbnVuaWZvcm0gc2FtcGxlcjJEIHJh
bXBTYW1wbGVyO1xuI2VuZGlmXG52b2lkIG1haW4odm9pZCkge1xuI2luY2x1ZGU8Y2xpcFBsYW5l
RnJhZ21lbnQ+XG52ZWM0IHRleHR1cmVDb2xvcj10ZXh0dXJlMkQoZGlmZnVzZVNhbXBsZXIsdlVW
KTtcbnZlYzQgYmFzZUNvbG9yPSh0ZXh0dXJlQ29sb3IqdGV4dHVyZU1hc2srKHZlYzQoMS4sMS4s
MS4sMS4pLXRleHR1cmVNYXNrKSkqdkNvbG9yO1xuI2lmZGVmIFJBTVBHUkFESUVOVFxuZmxvYXQg
YWxwaGE9YmFzZUNvbG9yLmE7XG5mbG9hdCByZW1hcHBlZENvbG9ySW5kZXg9Y2xhbXAoKGFscGhh
LXJlbWFwUmFuZ2VzLngpL3JlbWFwUmFuZ2VzLnksMC4wLDEuMCk7XG52ZWM0IHJhbXBDb2xvcj10
ZXh0dXJlMkQocmFtcFNhbXBsZXIsdmVjMigxLjAtcmVtYXBwZWRDb2xvckluZGV4LDAuKSk7XG5i
YXNlQ29sb3IucmdiKj1yYW1wQ29sb3IucmdiO1xuXG5mbG9hdCBmaW5hbEFscGhhPWJhc2VDb2xv
ci5hO1xuYmFzZUNvbG9yLmE9Y2xhbXAoKGFscGhhKnJhbXBDb2xvci5hLXJlbWFwUmFuZ2VzLnop
L3JlbWFwUmFuZ2VzLncsMC4wLDEuMCk7XG4jZW5kaWZcbiNpZmRlZiBCTEVORE1VTFRJUExZTU9E
RVxuZmxvYXQgc291cmNlQWxwaGE9dkNvbG9yLmEqdGV4dHVyZUNvbG9yLmE7XG5iYXNlQ29sb3Iu
cmdiPWJhc2VDb2xvci5yZ2Iqc291cmNlQWxwaGErdmVjMygxLjApKigxLjAtc291cmNlQWxwaGEp
O1xuI2VuZGlmXG5cblxuI2lmZGVmIElNQUdFUFJPQ0VTU0lOR1BPU1RQUk9DRVNTXG5iYXNlQ29s
b3IucmdiPXRvTGluZWFyU3BhY2UoYmFzZUNvbG9yLnJnYik7XG4jZWxzZVxuI2lmZGVmIElNQUdF
UFJPQ0VTU0lOR1xuYmFzZUNvbG9yLnJnYj10b0xpbmVhclNwYWNlKGJhc2VDb2xvci5yZ2IpO1xu
YmFzZUNvbG9yPWFwcGx5SW1hZ2VQcm9jZXNzaW5nKGJhc2VDb2xvcik7XG4jZW5kaWZcbiNlbmRp
ZlxuZ2xfRnJhZ0NvbG9yPWJhc2VDb2xvcjtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hh
ZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBwYXJ0aWNsZXNQaXhlbFNoYWRlciA9IHsgbmFtZTog
bmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVy
cy9wYXJ0aWNsZXMudmVydGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvcGFydGljbGVzLnZlcnRleC50cyAqKiohCisg
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IHBhcnRpY2xlc1ZlcnRleFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJwYXJ0aWNsZXNWZXJ0ZXhTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHBh
cnRpY2xlc1ZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVy
aWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVWZXJ0
ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbiAq
LyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2NsaXBQbGFuZVZl
cnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJz
SW5jbHVkZS9jbGlwUGxhbmVWZXJ0ZXgudHMiKTsKKworCisKK3ZhciBuYW1lID0gJ3BhcnRpY2xl
c1ZlcnRleFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247
XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCBhbmdsZTtcbmF0dHJpYnV0
ZSB2ZWMyIHNpemU7XG4jaWZkZWYgQU5JTUFURVNIRUVUXG5hdHRyaWJ1dGUgZmxvYXQgY2VsbElu
ZGV4O1xuI2VuZGlmXG4jaWZuZGVmIEJJTExCT0FSRFxuYXR0cmlidXRlIHZlYzMgZGlyZWN0aW9u
O1xuI2VuZGlmXG4jaWZkZWYgQklMTEJPQVJEU1RSRVRDSEVEXG5hdHRyaWJ1dGUgdmVjMyBkaXJl
Y3Rpb247XG4jZW5kaWZcbiNpZmRlZiBSQU1QR1JBRElFTlRcbmF0dHJpYnV0ZSB2ZWM0IHJlbWFw
RGF0YTtcbiNlbmRpZlxuYXR0cmlidXRlIHZlYzIgb2Zmc2V0O1xuXG51bmlmb3JtIG1hdDQgdmll
dztcbnVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMyIHRyYW5zbGF0aW9uUGl2
b3Q7XG4jaWZkZWYgQU5JTUFURVNIRUVUXG51bmlmb3JtIHZlYzMgcGFydGljbGVzSW5mb3M7XG4j
ZW5kaWZcblxudmFyeWluZyB2ZWMyIHZVVjtcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG4jaWZkZWYg
UkFNUEdSQURJRU5UXG52YXJ5aW5nIHZlYzQgcmVtYXBSYW5nZXM7XG4jZW5kaWZcbiNpZiBkZWZp
bmVkKENMSVBQTEFORSkgfHwgZGVmaW5lZChDTElQUExBTkUyKSB8fCBkZWZpbmVkKENMSVBQTEFO
RTMpIHx8IGRlZmluZWQoQ0xJUFBMQU5FNClcbnVuaWZvcm0gbWF0NCBpbnZWaWV3O1xuI2VuZGlm
XG4jaW5jbHVkZTxjbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbj5cbiNpZmRlZiBCSUxMQk9BUkRc
bnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbjtcbiNlbmRpZlxudmVjMyByb3RhdGUodmVjMyB5YXhp
cyx2ZWMzIHJvdGF0ZWRDb3JuZXIpIHtcbnZlYzMgeGF4aXM9bm9ybWFsaXplKGNyb3NzKHZlYzMo
MC4sMS4wLDAuKSx5YXhpcykpO1xudmVjMyB6YXhpcz1ub3JtYWxpemUoY3Jvc3MoeWF4aXMseGF4
aXMpKTtcbnZlYzMgcm93MD12ZWMzKHhheGlzLngseGF4aXMueSx4YXhpcy56KTtcbnZlYzMgcm93
MT12ZWMzKHlheGlzLngseWF4aXMueSx5YXhpcy56KTtcbnZlYzMgcm93Mj12ZWMzKHpheGlzLngs
emF4aXMueSx6YXhpcy56KTtcbm1hdDMgcm90TWF0cml4PW1hdDMocm93MCxyb3cxLHJvdzIpO1xu
dmVjMyBhbGlnbmVkQ29ybmVyPXJvdE1hdHJpeCpyb3RhdGVkQ29ybmVyO1xucmV0dXJuIHBvc2l0
aW9uK2FsaWduZWRDb3JuZXI7XG59XG4jaWZkZWYgQklMTEJPQVJEU1RSRVRDSEVEXG52ZWMzIHJv
dGF0ZUFsaWduKHZlYzMgdG9DYW1lcmEsdmVjMyByb3RhdGVkQ29ybmVyKSB7XG52ZWMzIG5vcm1h
bGl6ZWRUb0NhbWVyYT1ub3JtYWxpemUodG9DYW1lcmEpO1xudmVjMyBub3JtYWxpemVkQ3Jvc3NE
aXJUb0NhbWVyYT1ub3JtYWxpemUoY3Jvc3Mobm9ybWFsaXplKGRpcmVjdGlvbiksbm9ybWFsaXpl
ZFRvQ2FtZXJhKSk7XG52ZWMzIGNyb3NzUHJvZHVjdD1ub3JtYWxpemUoY3Jvc3Mobm9ybWFsaXpl
ZFRvQ2FtZXJhLG5vcm1hbGl6ZWRDcm9zc0RpclRvQ2FtZXJhKSk7XG52ZWMzIHJvdzA9dmVjMyhu
b3JtYWxpemVkQ3Jvc3NEaXJUb0NhbWVyYS54LG5vcm1hbGl6ZWRDcm9zc0RpclRvQ2FtZXJhLnks
bm9ybWFsaXplZENyb3NzRGlyVG9DYW1lcmEueik7XG52ZWMzIHJvdzE9dmVjMyhjcm9zc1Byb2R1
Y3QueCxjcm9zc1Byb2R1Y3QueSxjcm9zc1Byb2R1Y3Queik7XG52ZWMzIHJvdzI9dmVjMyhub3Jt
YWxpemVkVG9DYW1lcmEueCxub3JtYWxpemVkVG9DYW1lcmEueSxub3JtYWxpemVkVG9DYW1lcmEu
eik7XG5tYXQzIHJvdE1hdHJpeD1tYXQzKHJvdzAscm93MSxyb3cyKTtcbnZlYzMgYWxpZ25lZENv
cm5lcj1yb3RNYXRyaXgqcm90YXRlZENvcm5lcjtcbnJldHVybiBwb3NpdGlvbithbGlnbmVkQ29y
bmVyO1xufVxuI2VuZGlmXG52b2lkIG1haW4odm9pZCkge1xudmVjMiBjb3JuZXJQb3M7XG5jb3Ju
ZXJQb3M9KHZlYzIob2Zmc2V0LngtMC41LG9mZnNldC55LTAuNSktdHJhbnNsYXRpb25QaXZvdCkq
c2l6ZSt0cmFuc2xhdGlvblBpdm90O1xuI2lmZGVmIEJJTExCT0FSRFxuXG52ZWMzIHJvdGF0ZWRD
b3JuZXI7XG4jaWZkZWYgQklMTEJPQVJEWVxucm90YXRlZENvcm5lci54PWNvcm5lclBvcy54KmNv
cyhhbmdsZSktY29ybmVyUG9zLnkqc2luKGFuZ2xlKTtcbnJvdGF0ZWRDb3JuZXIuej1jb3JuZXJQ
b3MueCpzaW4oYW5nbGUpK2Nvcm5lclBvcy55KmNvcyhhbmdsZSk7XG5yb3RhdGVkQ29ybmVyLnk9
MC47XG52ZWMzIHlheGlzPXBvc2l0aW9uLWV5ZVBvc2l0aW9uO1xueWF4aXMueT0wLjtcbnZlYzMg
d29ybGRQb3M9cm90YXRlKG5vcm1hbGl6ZSh5YXhpcykscm90YXRlZENvcm5lcik7XG52ZWMzIHZp
ZXdQb3M9KHZpZXcqdmVjNCh3b3JsZFBvcywxLjApKS54eXo7XG4jZWxpZiBkZWZpbmVkKEJJTExC
T0FSRFNUUkVUQ0hFRClcbnJvdGF0ZWRDb3JuZXIueD1jb3JuZXJQb3MueCpjb3MoYW5nbGUpLWNv
cm5lclBvcy55KnNpbihhbmdsZSk7XG5yb3RhdGVkQ29ybmVyLnk9Y29ybmVyUG9zLngqc2luKGFu
Z2xlKStjb3JuZXJQb3MueSpjb3MoYW5nbGUpO1xucm90YXRlZENvcm5lci56PTAuO1xudmVjMyB0
b0NhbWVyYT1wb3NpdGlvbi1leWVQb3NpdGlvbjtcbnZlYzMgd29ybGRQb3M9cm90YXRlQWxpZ24o
dG9DYW1lcmEscm90YXRlZENvcm5lcik7XG52ZWMzIHZpZXdQb3M9KHZpZXcqdmVjNCh3b3JsZFBv
cywxLjApKS54eXo7XG4jZWxzZVxucm90YXRlZENvcm5lci54PWNvcm5lclBvcy54KmNvcyhhbmds
ZSktY29ybmVyUG9zLnkqc2luKGFuZ2xlKTtcbnJvdGF0ZWRDb3JuZXIueT1jb3JuZXJQb3MueCpz
aW4oYW5nbGUpK2Nvcm5lclBvcy55KmNvcyhhbmdsZSk7XG5yb3RhdGVkQ29ybmVyLno9MC47XG52
ZWMzIHZpZXdQb3M9KHZpZXcqdmVjNChwb3NpdGlvbiwxLjApKS54eXorcm90YXRlZENvcm5lcjtc
biNlbmRpZlxuI2lmZGVmIFJBTVBHUkFESUVOVFxucmVtYXBSYW5nZXM9cmVtYXBEYXRhO1xuI2Vu
ZGlmXG5cbmdsX1Bvc2l0aW9uPXByb2plY3Rpb24qdmVjNCh2aWV3UG9zLDEuMCk7XG4jZWxzZVxu
XG52ZWMzIHJvdGF0ZWRDb3JuZXI7XG5yb3RhdGVkQ29ybmVyLng9Y29ybmVyUG9zLngqY29zKGFu
Z2xlKS1jb3JuZXJQb3MueSpzaW4oYW5nbGUpO1xucm90YXRlZENvcm5lci56PWNvcm5lclBvcy54
KnNpbihhbmdsZSkrY29ybmVyUG9zLnkqY29zKGFuZ2xlKTtcbnJvdGF0ZWRDb3JuZXIueT0wLjtc
bnZlYzMgeWF4aXM9bm9ybWFsaXplKGRpcmVjdGlvbik7XG52ZWMzIHdvcmxkUG9zPXJvdGF0ZSh5
YXhpcyxyb3RhdGVkQ29ybmVyKTtcbmdsX1Bvc2l0aW9uPXByb2plY3Rpb24qdmlldyp2ZWM0KHdv
cmxkUG9zLDEuMCk7XG4jZW5kaWZcbnZDb2xvcj1jb2xvcjtcbiNpZmRlZiBBTklNQVRFU0hFRVRc
bmZsb2F0IHJvd09mZnNldD1mbG9vcihjZWxsSW5kZXgvcGFydGljbGVzSW5mb3Mueik7XG5mbG9h
dCBjb2x1bW5PZmZzZXQ9Y2VsbEluZGV4LXJvd09mZnNldCpwYXJ0aWNsZXNJbmZvcy56O1xudmVj
MiB1dlNjYWxlPXBhcnRpY2xlc0luZm9zLnh5O1xudmVjMiB1dk9mZnNldD12ZWMyKG9mZnNldC54
ICwxLjAtb2Zmc2V0LnkpO1xudlVWPSh1dk9mZnNldCt2ZWMyKGNvbHVtbk9mZnNldCxyb3dPZmZz
ZXQpKSp1dlNjYWxlO1xuI2Vsc2VcbnZVVj1vZmZzZXQ7XG4jZW5kaWZcblxuI2lmIGRlZmluZWQo
Q0xJUFBMQU5FKSB8fCBkZWZpbmVkKENMSVBQTEFORTIpIHx8IGRlZmluZWQoQ0xJUFBMQU5FMykg
fHwgZGVmaW5lZChDTElQUExBTkU0KVxudmVjNCB3b3JsZFBvcz1pbnZWaWV3KnZlYzQodmlld1Bv
cywxLjApO1xuI2VuZGlmXG4jaW5jbHVkZTxjbGlwUGxhbmVWZXJ0ZXg+XG59IjsKK19NYXRlcmlh
bHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNT
dG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgcGFydGljbGVzVmVydGV4
U2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAor
CisvKioqLyAiLi9TaGFkZXJzL3Bhc3MuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9wYXNzLmZyYWdtZW50LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogcGFzc1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgInBhc3NQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcGFzc1BpeGVs
U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4v
TWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1l
ID0gJ3Bhc3NQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxudmFyeWluZyB2ZWMyIHZVVjtc
bnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmVTYW1wbGVyO1xudm9pZCBtYWluKHZvaWQpXG57XG5n
bF9GcmFnQ29sb3I9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG59IjsKK19NYXRlcmlh
bHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNT
dG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgcGFzc1BpeGVsU2hhZGVy
ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9TaGFkZXJzL3Bhc3NDdWJlLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL3Bhc3NDdWJlLmZyYWdt
ZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IHBhc3NDdWJlUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5j
dGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicGFzc0N1YmVQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gcGFzc0N1YmVQaXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2Vm
ZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdwYXNzQ3ViZVBpeGVsU2hhZGVyJzsKK3ZhciBzaGFk
ZXIgPSAiXG52YXJ5aW5nIHZlYzIgdlVWO1xudW5pZm9ybSBzYW1wbGVyQ3ViZSB0ZXh0dXJlU2Ft
cGxlcjtcbnZvaWQgbWFpbih2b2lkKVxue1xudmVjMiB1dj12VVYqMi4wLTEuMDtcbiNpZmRlZiBQ
T1NJVElWRVhcbmdsX0ZyYWdDb2xvcj10ZXh0dXJlQ3ViZSh0ZXh0dXJlU2FtcGxlcix2ZWMzKDEu
MDAxLHV2LnksdXYueCkpO1xuI2VuZGlmXG4jaWZkZWYgTkVHQVRJVkVYXG5nbF9GcmFnQ29sb3I9
dGV4dHVyZUN1YmUodGV4dHVyZVNhbXBsZXIsdmVjMygtMS4wMDEsdXYueSx1di54KSk7XG4jZW5k
aWZcbiNpZmRlZiBQT1NJVElWRVlcbmdsX0ZyYWdDb2xvcj10ZXh0dXJlQ3ViZSh0ZXh0dXJlU2Ft
cGxlcix2ZWMzKHV2LnksMS4wMDEsdXYueCkpO1xuI2VuZGlmXG4jaWZkZWYgTkVHQVRJVkVZXG5n
bF9GcmFnQ29sb3I9dGV4dHVyZUN1YmUodGV4dHVyZVNhbXBsZXIsdmVjMyh1di55LC0xLjAwMSx1
di54KSk7XG4jZW5kaWZcbiNpZmRlZiBQT1NJVElWRVpcbmdsX0ZyYWdDb2xvcj10ZXh0dXJlQ3Vi
ZSh0ZXh0dXJlU2FtcGxlcix2ZWMzKHV2LDEuMDAxKSk7XG4jZW5kaWZcbiNpZmRlZiBORUdBVElW
RVpcbmdsX0ZyYWdDb2xvcj10ZXh0dXJlQ3ViZSh0ZXh0dXJlU2FtcGxlcix2ZWMzKHV2LC0xLjAw
MSkpO1xuI2VuZGlmXG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlk
ZGVuICovCit2YXIgcGFzc0N1YmVQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBz
aGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9wYnIuZnJhZ21lbnQu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9T
aGFkZXJzL3Bici5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogcGJyUGl4ZWxTaGFkZXIgKi8KKy8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicGJyUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIHBiclBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BickZyYWdt
ZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvcGJyRnJhZ21lbnREZWNsYXJhdGlvbiAqLyAi
Li9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickZyYWdtZW50RGVjbGFyYXRpb24udHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfcGJyVWJvRGVjbGFyYXRpb25f
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4v
U2hhZGVyc0luY2x1ZGUvcGJyVWJvRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9wYnJVYm9EZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9T
aGFkZXJzSW5jbHVkZV9wYnJGcmFnbWVudEV4dHJhRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUv
cGJyRnJhZ21lbnRFeHRyYURlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
cGJyRnJhZ21lbnRFeHRyYURlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNJbmNsdWRlX2xpZ2h0RnJhZ21lbnREZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9saWdodEZyYWdtZW50RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9s
aWdodEZyYWdtZW50RGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
U2hhZGVyc0luY2x1ZGVfbGlnaHRVYm9EZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9saWdodFVi
b0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbGlnaHRVYm9EZWNsYXJh
dGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9wYnJG
cmFnbWVudFNhbXBsZXJzRGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvcGJyRnJhZ21lbnRTYW1w
bGVyc0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJyRnJhZ21lbnRT
YW1wbGVyc0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRl
cnNJbmNsdWRlX2ltYWdlUHJvY2Vzc2luZ0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2ltYWdl
UHJvY2Vzc2luZ0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW1hZ2VQ
cm9jZXNzaW5nRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hh
ZGVyc0luY2x1ZGVfY2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9j
bGlwUGxhbmVGcmFnbWVudERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUv
Y2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0aERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2xv
Z0RlcHRoRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aERl
Y2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRl
X2ZvZ0ZyYWdtZW50RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2ZvZ0ZyYWdtZW50RGVjbGFy
YXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9mb2dGcmFnbWVudERlY2xhcmF0aW9u
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2hlbHBlckZ1
bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaGVscGVyRnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hh
ZGVyc0luY2x1ZGUvaGVscGVyRnVuY3Rpb25zLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNJbmNsdWRlX3BickhlbHBlckZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvcGJy
SGVscGVyRnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJySGVscGVyRnVu
Y3Rpb25zLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2lt
YWdlUHJvY2Vzc2luZ0Z1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVu
Y3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW1hZ2VQcm9jZXNzaW5nRnVuY3Rp
b25zLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3NoYWRv
d3NGcmFnbWVudEZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvc2hhZG93c0ZyYWdtZW50RnVuY3Rp
b25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvc2hhZG93c0ZyYWdtZW50RnVuY3Rpb25z
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2hhcm1vbmlj
c0Z1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvaGFybW9uaWNzRnVuY3Rpb25zICovICIuL1NoYWRl
cnMvU2hhZGVyc0luY2x1ZGUvaGFybW9uaWNzRnVuY3Rpb25zLnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BickRpcmVjdExpZ2h0aW5nU2V0dXBGdW5jdGlv
bnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8q
ISAuL1NoYWRlcnNJbmNsdWRlL3BickRpcmVjdExpZ2h0aW5nU2V0dXBGdW5jdGlvbnMgKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYnJEaXJlY3RMaWdodGluZ1NldHVwRnVuY3Rpb25zLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BickRpcmVjdExp
Z2h0aW5nRmFsbG9mZkZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvcGJyRGlyZWN0TGlnaHRpbmdG
YWxsb2ZmRnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJyRGlyZWN0TGln
aHRpbmdGYWxsb2ZmRnVuY3Rpb25zLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1No
YWRlcnNJbmNsdWRlX3BickJSREZGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL3BickJSREZGdW5j
dGlvbnMgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYnJCUkRGRnVuY3Rpb25zLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BickRpcmVjdExpZ2h0
aW5nRnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9wYnJEaXJlY3RMaWdodGluZ0Z1bmN0aW9ucyAq
LyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL3BickRpcmVjdExpZ2h0aW5nRnVuY3Rpb25zLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BicklCTEZ1bmN0
aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vU2hhZGVyc0luY2x1ZGUvcGJySUJMRnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVy
c0luY2x1ZGUvcGJySUJMRnVuY3Rpb25zLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNJbmNsdWRlX2J1bXBGcmFnbWVudEZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYnVt
cEZyYWdtZW50RnVuY3Rpb25zICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYnVtcEZyYWdt
ZW50RnVuY3Rpb25zLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNs
dWRlX3JlZmxlY3Rpb25GdW5jdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvcmVmbGVjdGlvbkZ1bmN0aW9u
ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcmVmbGVjdGlvbkZ1bmN0aW9uLnRzIik7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2NsaXBQbGFuZUZyYWdtZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9TaGFkZXJzSW5jbHVkZS9jbGlwUGxhbmVGcmFnbWVudCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJ
bmNsdWRlL2NsaXBQbGFuZUZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNJbmNsdWRlX2J1bXBGcmFnbWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYnVtcEZyYWdtZW50
ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYnVtcEZyYWdtZW50LnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2RlcHRoUHJlUGFzc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0lu
Y2x1ZGUvZGVwdGhQcmVQYXNzICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZGVwdGhQcmVQ
YXNzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2xpZ2h0
RnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2xpZ2h0RnJhZ21lbnQgKi8gIi4vU2hhZGVycy9TaGFk
ZXJzSW5jbHVkZS9saWdodEZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X1NoYWRlcnNJbmNsdWRlX2xvZ0RlcHRoRnJhZ21lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2xvZ0RlcHRo
RnJhZ21lbnQgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9sb2dEZXB0aEZyYWdtZW50LnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2ZvZ0ZyYWdtZW50
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9TaGFkZXJzSW5jbHVkZS9mb2dGcmFnbWVudCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRl
L2ZvZ0ZyYWdtZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNs
dWRlX3BickRlYnVnX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9wYnJEZWJ1ZyAqLyAiLi9TaGFkZXJzL1NoYWRl
cnNJbmNsdWRlL3BickRlYnVnLnRzIik7CisKKworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCit2YXIgbmFtZSA9ICdwYnJQaXhlbFNoYWRlcic7
Cit2YXIgc2hhZGVyID0gIiNpZiBkZWZpbmVkKEJVTVApIHx8ICFkZWZpbmVkKE5PUk1BTCkgfHwg
ZGVmaW5lZChGT1JDRU5PUk1BTEZPUldBUkQpIHx8IGRlZmluZWQoU1BFQ1VMQVJBQSkgfHwgZGVm
aW5lZChDTEVBUkNPQVRfQlVNUCkgfHwgZGVmaW5lZChBTklTT1RST1BJQylcbiNleHRlbnNpb24g
R0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG4jZW5kaWZcbiNpZmRlZiBMT0RC
QVNFRE1JQ1JPU0ZVUkFDRVxuI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIDog
ZW5hYmxlXG4jZW5kaWZcbiNkZWZpbmUgQ1VTVE9NX0ZSQUdNRU5UX0JFR0lOXG4jaWZkZWYgTE9H
QVJJVEhNSUNERVBUSFxuI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZVxuI2Vu
ZGlmXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbiNpZm5kZWYgRlJPTUxJTkVBUlNQQUNFXG4j
ZGVmaW5lIEZST01MSU5FQVJTUEFDRVxuI2VuZGlmXG5cbiNpbmNsdWRlPF9fZGVjbF9fcGJyRnJh
Z21lbnQ+XG4jaW5jbHVkZTxwYnJGcmFnbWVudEV4dHJhRGVjbGFyYXRpb24+XG4jaW5jbHVkZTxf
X2RlY2xfX2xpZ2h0RnJhZ21lbnQ+WzAuLm1heFNpbXVsdGFuZW91c0xpZ2h0c11cbiNpbmNsdWRl
PHBickZyYWdtZW50U2FtcGxlcnNEZWNsYXJhdGlvbj5cbiNpbmNsdWRlPGltYWdlUHJvY2Vzc2lu
Z0RlY2xhcmF0aW9uPlxuI2luY2x1ZGU8Y2xpcFBsYW5lRnJhZ21lbnREZWNsYXJhdGlvbj5cbiNp
bmNsdWRlPGxvZ0RlcHRoRGVjbGFyYXRpb24+XG4jaW5jbHVkZTxmb2dGcmFnbWVudERlY2xhcmF0
aW9uPlxuXG4jaW5jbHVkZTxoZWxwZXJGdW5jdGlvbnM+XG4jaW5jbHVkZTxwYnJIZWxwZXJGdW5j
dGlvbnM+XG4jaW5jbHVkZTxpbWFnZVByb2Nlc3NpbmdGdW5jdGlvbnM+XG4jaW5jbHVkZTxzaGFk
b3dzRnJhZ21lbnRGdW5jdGlvbnM+XG4jaW5jbHVkZTxoYXJtb25pY3NGdW5jdGlvbnM+XG4jaW5j
bHVkZTxwYnJEaXJlY3RMaWdodGluZ1NldHVwRnVuY3Rpb25zPlxuI2luY2x1ZGU8cGJyRGlyZWN0
TGlnaHRpbmdGYWxsb2ZmRnVuY3Rpb25zPlxuI2luY2x1ZGU8cGJyQlJERkZ1bmN0aW9ucz5cbiNp
bmNsdWRlPHBickRpcmVjdExpZ2h0aW5nRnVuY3Rpb25zPlxuI2luY2x1ZGU8cGJySUJMRnVuY3Rp
b25zPlxuI2luY2x1ZGU8YnVtcEZyYWdtZW50RnVuY3Rpb25zPlxuI2lmZGVmIFJFRkxFQ1RJT05c
biNpbmNsdWRlPHJlZmxlY3Rpb25GdW5jdGlvbj5cbiNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJB
R01FTlRfREVGSU5JVElPTlNcblxudm9pZCBtYWluKHZvaWQpIHtcbiNkZWZpbmUgQ1VTVE9NX0ZS
QUdNRU5UX01BSU5fQkVHSU5cbiNpbmNsdWRlPGNsaXBQbGFuZUZyYWdtZW50PlxuXG52ZWMzIHZp
ZXdEaXJlY3Rpb25XPW5vcm1hbGl6ZSh2RXllUG9zaXRpb24ueHl6LXZQb3NpdGlvblcpO1xuI2lm
ZGVmIE5PUk1BTFxudmVjMyBub3JtYWxXPW5vcm1hbGl6ZSh2Tm9ybWFsVyk7XG4jZWxzZVxudmVj
MyBub3JtYWxXPW5vcm1hbGl6ZShjcm9zcyhkRmR4KHZQb3NpdGlvblcpLGRGZHkodlBvc2l0aW9u
VykpKSp2RXllUG9zaXRpb24udztcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVFxuXG52ZWMzIGNs
ZWFyQ29hdE5vcm1hbFc9bm9ybWFsVztcbiNlbmRpZlxuI2luY2x1ZGU8YnVtcEZyYWdtZW50Plxu
I2lmIGRlZmluZWQoRk9SQ0VOT1JNQUxGT1JXQVJEKSAmJiBkZWZpbmVkKE5PUk1BTClcbnZlYzMg
ZmFjZU5vcm1hbD1ub3JtYWxpemUoY3Jvc3MoZEZkeCh2UG9zaXRpb25XKSxkRmR5KHZQb3NpdGlv
blcpKSkqdkV5ZVBvc2l0aW9uLnc7XG4jaWYgZGVmaW5lZChUV09TSURFRExJR0hUSU5HKVxuZmFj
ZU5vcm1hbD1nbF9Gcm9udEZhY2luZyA/IGZhY2VOb3JtYWwgOiAtZmFjZU5vcm1hbDtcbiNlbmRp
Zlxubm9ybWFsVyo9c2lnbihkb3Qobm9ybWFsVyxmYWNlTm9ybWFsKSk7XG4jZW5kaWZcbiNpZiBk
ZWZpbmVkKFRXT1NJREVETElHSFRJTkcpICYmIGRlZmluZWQoTk9STUFMKVxubm9ybWFsVz1nbF9G
cm9udEZhY2luZyA/IG5vcm1hbFcgOiAtbm9ybWFsVztcbiNlbmRpZlxuXG5cbnZlYzMgc3VyZmFj
ZUFsYmVkbz12QWxiZWRvQ29sb3IucmdiO1xuXG5mbG9hdCBhbHBoYT12QWxiZWRvQ29sb3IuYTtc
biNpZmRlZiBBTEJFRE9cbnZlYzQgYWxiZWRvVGV4dHVyZT10ZXh0dXJlMkQoYWxiZWRvU2FtcGxl
cix2QWxiZWRvVVYrdXZPZmZzZXQpO1xuI2lmIGRlZmluZWQoQUxQSEFGUk9NQUxCRURPKSB8fCBk
ZWZpbmVkKEFMUEhBVEVTVClcbmFscGhhKj1hbGJlZG9UZXh0dXJlLmE7XG4jZW5kaWZcbnN1cmZh
Y2VBbGJlZG8qPXRvTGluZWFyU3BhY2UoYWxiZWRvVGV4dHVyZS5yZ2IpO1xuc3VyZmFjZUFsYmVk
byo9dkFsYmVkb0luZm9zLnk7XG4jZW5kaWZcbiNpZmRlZiBWRVJURVhDT0xPUlxuc3VyZmFjZUFs
YmVkbyo9dkNvbG9yLnJnYjtcbiNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJBR01FTlRfVVBEQVRF
X0FMQkVET1xuXG4jaWZkZWYgT1BBQ0lUWVxudmVjNCBvcGFjaXR5TWFwPXRleHR1cmUyRChvcGFj
aXR5U2FtcGxlcix2T3BhY2l0eVVWK3V2T2Zmc2V0KTtcbiNpZmRlZiBPUEFDSVRZUkdCXG5hbHBo
YT1nZXRMdW1pbmFuY2Uob3BhY2l0eU1hcC5yZ2IpO1xuI2Vsc2VcbmFscGhhKj1vcGFjaXR5TWFw
LmE7XG4jZW5kaWZcbmFscGhhKj12T3BhY2l0eUluZm9zLnk7XG4jZW5kaWZcbiNpZmRlZiBWRVJU
RVhBTFBIQVxuYWxwaGEqPXZDb2xvci5hO1xuI2VuZGlmXG4jaWYgIWRlZmluZWQoU1NfTElOS1JF
RlJBQ1RJT05UT1RSQU5TUEFSRU5DWSkgJiYgIWRlZmluZWQoQUxQSEFGUkVTTkVMKVxuI2lmZGVm
IEFMUEhBVEVTVFxuaWYgKGFscGhhPEFMUEhBVEVTVFZBTFVFKVxuZGlzY2FyZDtcbiNpZm5kZWYg
QUxQSEFCTEVORFxuXG5hbHBoYT0xLjA7XG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlmXG4jZGVmaW5l
IENVU1RPTV9GUkFHTUVOVF9VUERBVEVfQUxQSEFcbiNpbmNsdWRlPGRlcHRoUHJlUGFzcz5cbiNk
ZWZpbmUgQ1VTVE9NX0ZSQUdNRU5UX0JFRk9SRV9MSUdIVFNcblxudmVjMyBhbWJpZW50T2NjbHVz
aW9uQ29sb3I9dmVjMygxLiwxLiwxLik7XG4jaWZkZWYgQU1CSUVOVFxudmVjMyBhbWJpZW50T2Nj
bHVzaW9uQ29sb3JNYXA9dGV4dHVyZTJEKGFtYmllbnRTYW1wbGVyLHZBbWJpZW50VVYrdXZPZmZz
ZXQpLnJnYip2QW1iaWVudEluZm9zLnk7XG4jaWZkZWYgQU1CSUVOVElOR1JBWVNDQUxFXG5hbWJp
ZW50T2NjbHVzaW9uQ29sb3JNYXA9dmVjMyhhbWJpZW50T2NjbHVzaW9uQ29sb3JNYXAucixhbWJp
ZW50T2NjbHVzaW9uQ29sb3JNYXAucixhbWJpZW50T2NjbHVzaW9uQ29sb3JNYXAucik7XG4jZW5k
aWZcbmFtYmllbnRPY2NsdXNpb25Db2xvcj1taXgoYW1iaWVudE9jY2x1c2lvbkNvbG9yLGFtYmll
bnRPY2NsdXNpb25Db2xvck1hcCx2QW1iaWVudEluZm9zLnopO1xuI2VuZGlmXG4jaWZkZWYgVU5M
SVRcbnZlYzMgZGlmZnVzZUJhc2U9dmVjMygxLiwxLiwxLik7XG4jZWxzZVxuXG5mbG9hdCBtaWNy
b1N1cmZhY2U9dlJlZmxlY3Rpdml0eUNvbG9yLmE7XG52ZWMzIHN1cmZhY2VSZWZsZWN0aXZpdHlD
b2xvcj12UmVmbGVjdGl2aXR5Q29sb3IucmdiO1xuI2lmZGVmIE1FVEFMTElDV09SS0ZMT1dcbnZl
YzIgbWV0YWxsaWNSb3VnaG5lc3M9c3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yLnJnO1xuI2lmZGVm
IFJFRkxFQ1RJVklUWVxudmVjNCBzdXJmYWNlTWV0YWxsaWNDb2xvck1hcD10ZXh0dXJlMkQocmVm
bGVjdGl2aXR5U2FtcGxlcix2UmVmbGVjdGl2aXR5VVYrdXZPZmZzZXQpO1xuI2lmZGVmIEFPU1RP
UkVJTk1FVEFMTUFQUkVEXG52ZWMzIGFvU3RvcmVJbk1ldGFsTWFwPXZlYzMoc3VyZmFjZU1ldGFs
bGljQ29sb3JNYXAucixzdXJmYWNlTWV0YWxsaWNDb2xvck1hcC5yLHN1cmZhY2VNZXRhbGxpY0Nv
bG9yTWFwLnIpO1xuYW1iaWVudE9jY2x1c2lvbkNvbG9yPW1peChhbWJpZW50T2NjbHVzaW9uQ29s
b3IsYW9TdG9yZUluTWV0YWxNYXAsdlJlZmxlY3Rpdml0eUluZm9zLnopO1xuI2VuZGlmXG4jaWZk
ZWYgTUVUQUxMTkVTU1NUT1JFSU5NRVRBTE1BUEJMVUVcbm1ldGFsbGljUm91Z2huZXNzLnIqPXN1
cmZhY2VNZXRhbGxpY0NvbG9yTWFwLmI7XG4jZWxzZVxubWV0YWxsaWNSb3VnaG5lc3Mucio9c3Vy
ZmFjZU1ldGFsbGljQ29sb3JNYXAucjtcbiNlbmRpZlxuI2lmZGVmIFJPVUdITkVTU1NUT1JFSU5N
RVRBTE1BUEFMUEhBXG5tZXRhbGxpY1JvdWdobmVzcy5nKj1zdXJmYWNlTWV0YWxsaWNDb2xvck1h
cC5hO1xuI2Vsc2VcbiNpZmRlZiBST1VHSE5FU1NTVE9SRUlOTUVUQUxNQVBHUkVFTlxubWV0YWxs
aWNSb3VnaG5lc3MuZyo9c3VyZmFjZU1ldGFsbGljQ29sb3JNYXAuZztcbiNlbmRpZlxuI2VuZGlm
XG4jZW5kaWZcbiNpZmRlZiBNSUNST1NVUkZBQ0VNQVBcbnZlYzQgbWljcm9TdXJmYWNlVGV4ZWw9
dGV4dHVyZTJEKG1pY3JvU3VyZmFjZVNhbXBsZXIsdk1pY3JvU3VyZmFjZVNhbXBsZXJVVit1dk9m
ZnNldCkqdk1pY3JvU3VyZmFjZVNhbXBsZXJJbmZvcy55O1xubWV0YWxsaWNSb3VnaG5lc3MuZyo9
bWljcm9TdXJmYWNlVGV4ZWwucjtcbiNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJBR01FTlRfVVBE
QVRFX01FVEFMTElDUk9VR0hORVNTXG5cbm1pY3JvU3VyZmFjZT0xLjAtbWV0YWxsaWNSb3VnaG5l
c3MuZztcblxudmVjMyBiYXNlQ29sb3I9c3VyZmFjZUFsYmVkbztcbiNpZmRlZiBSRUZMRUNUQU5D
RVxuXG5cblxuXG5cbnN1cmZhY2VBbGJlZG89YmFzZUNvbG9yLnJnYiooMS4wLW1ldGFsbGljUm91
Z2huZXNzLnIpO1xuXG5zdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3I9bWl4KDAuMTYqcmVmbGVjdGFu
Y2UqcmVmbGVjdGFuY2UsYmFzZUNvbG9yLG1ldGFsbGljUm91Z2huZXNzLnIpO1xuI2Vsc2Vcblxu
XG5cbmNvbnN0IHZlYzMgRGVmYXVsdFNwZWN1bGFyUmVmbGVjdGFuY2VEaWVsZWN0cmljPXZlYzMo
MC4wNCwwLjA0LDAuMDQpO1xuXG5zdXJmYWNlQWxiZWRvPW1peChiYXNlQ29sb3IucmdiKigxLjAt
RGVmYXVsdFNwZWN1bGFyUmVmbGVjdGFuY2VEaWVsZWN0cmljLnIpLHZlYzMoMC4sMC4sMC4pLG1l
dGFsbGljUm91Z2huZXNzLnIpO1xuXG5zdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3I9bWl4KERlZmF1
bHRTcGVjdWxhclJlZmxlY3RhbmNlRGllbGVjdHJpYyxiYXNlQ29sb3IsbWV0YWxsaWNSb3VnaG5l
c3Mucik7XG4jZW5kaWZcbiNlbHNlXG4jaWZkZWYgUkVGTEVDVElWSVRZXG52ZWM0IHN1cmZhY2VS
ZWZsZWN0aXZpdHlDb2xvck1hcD10ZXh0dXJlMkQocmVmbGVjdGl2aXR5U2FtcGxlcix2UmVmbGVj
dGl2aXR5VVYrdXZPZmZzZXQpO1xuc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yKj10b0xpbmVhclNw
YWNlKHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvck1hcC5yZ2IpO1xuc3VyZmFjZVJlZmxlY3Rpdml0
eUNvbG9yKj12UmVmbGVjdGl2aXR5SW5mb3MueTtcbiNpZmRlZiBNSUNST1NVUkZBQ0VGUk9NUkVG
TEVDVElWSVRZTUFQXG5taWNyb1N1cmZhY2UqPXN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvck1hcC5h
O1xubWljcm9TdXJmYWNlKj12UmVmbGVjdGl2aXR5SW5mb3MuejtcbiNlbHNlXG4jaWZkZWYgTUlD
Uk9TVVJGQUNFQVVUT01BVElDXG5taWNyb1N1cmZhY2UqPWNvbXB1dGVEZWZhdWx0TWljcm9TdXJm
YWNlKG1pY3JvU3VyZmFjZSxzdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3IpO1xuI2VuZGlmXG4jaWZk
ZWYgTUlDUk9TVVJGQUNFTUFQXG52ZWM0IG1pY3JvU3VyZmFjZVRleGVsPXRleHR1cmUyRChtaWNy
b1N1cmZhY2VTYW1wbGVyLHZNaWNyb1N1cmZhY2VTYW1wbGVyVVYrdXZPZmZzZXQpKnZNaWNyb1N1
cmZhY2VTYW1wbGVySW5mb3MueTtcbm1pY3JvU3VyZmFjZSo9bWljcm9TdXJmYWNlVGV4ZWwucjtc
biNlbmRpZlxuI2RlZmluZSBDVVNUT01fRlJBR01FTlRfVVBEQVRFX01JQ1JPU1VSRkFDRVxuI2Vu
ZGlmXG4jZW5kaWZcbiNlbmRpZlxuXG5taWNyb1N1cmZhY2U9c2F0dXJhdGUobWljcm9TdXJmYWNl
KTtcblxuZmxvYXQgcm91Z2huZXNzPTEuLW1pY3JvU3VyZmFjZTtcblxuI2lmZGVmIEFMUEhBRlJF
U05FTFxuI2lmIGRlZmluZWQoQUxQSEFURVNUKSB8fCBkZWZpbmVkKEFMUEhBQkxFTkQpXG5cblxu
XG5mbG9hdCBvcGFjaXR5UGVyY2VwdHVhbD1hbHBoYTtcbiNpZmRlZiBMSU5FQVJBTFBIQUZSRVNO
RUxcbmZsb2F0IG9wYWNpdHkwPW9wYWNpdHlQZXJjZXB0dWFsO1xuI2Vsc2VcbmZsb2F0IG9wYWNp
dHkwPW9wYWNpdHlQZXJjZXB0dWFsKm9wYWNpdHlQZXJjZXB0dWFsO1xuI2VuZGlmXG5mbG9hdCBv
cGFjaXR5OTA9ZnJlc25lbEdyYXppbmdSZWZsZWN0YW5jZShvcGFjaXR5MCk7XG52ZWMzIG5vcm1h
bEZvcndhcmQ9ZmFjZWZvcndhcmQobm9ybWFsVywtdmlld0RpcmVjdGlvblcsbm9ybWFsVyk7XG5c
bmFscGhhPWdldFJlZmxlY3RhbmNlRnJvbUFuYWx5dGljYWxCUkRGTG9va3VwX0pvbmVzKHNhdHVy
YXRlKGRvdCh2aWV3RGlyZWN0aW9uVyxub3JtYWxGb3J3YXJkKSksdmVjMyhvcGFjaXR5MCksdmVj
MyhvcGFjaXR5OTApLHNxcnQobWljcm9TdXJmYWNlKSkueDtcbiNpZmRlZiBBTFBIQVRFU1Rcbmlm
IChhbHBoYTxBTFBIQVRFU1RWQUxVRSlcbmRpc2NhcmQ7XG4jaWZuZGVmIEFMUEhBQkxFTkRcblxu
YWxwaGE9MS4wO1xuI2VuZGlmXG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlmXG5cbmZsb2F0IE5kb3RW
VW5jbGFtcGVkPWRvdChub3JtYWxXLHZpZXdEaXJlY3Rpb25XKTtcblxuZmxvYXQgTmRvdFY9YWJz
RXBzKE5kb3RWVW5jbGFtcGVkKTtcbmZsb2F0IGFscGhhRz1jb252ZXJ0Um91Z2huZXNzVG9BdmVy
YWdlU2xvcGUocm91Z2huZXNzKTtcbnZlYzIgQUFSb3VnaG5lc3NGYWN0b3JzPWdldEFBUm91Z2hu
ZXNzRmFjdG9ycyhub3JtYWxXLnh5eik7XG4jaWZkZWYgU1BFQ1VMQVJBQVxuXG5hbHBoYUcrPUFB
Um91Z2huZXNzRmFjdG9ycy55O1xuI2VuZGlmXG4jaWZkZWYgQU5JU09UUk9QSUNcbmZsb2F0IGFu
aXNvdHJvcHk9dkFuaXNvdHJvcHkuYjtcbnZlYzMgYW5pc290cm9weURpcmVjdGlvbj12ZWMzKHZB
bmlzb3Ryb3B5Lnh5LDAuKTtcbiNpZmRlZiBBTklTT1RST1BJQ19URVhUVVJFXG52ZWMzIGFuaXNv
dHJvcHlNYXBEYXRhPXRleHR1cmUyRChhbmlzb3Ryb3B5U2FtcGxlcix2QW5pc290cm9weVVWK3V2
T2Zmc2V0KS5yZ2IqdkFuaXNvdHJvcHlJbmZvcy55O1xuYW5pc290cm9weSo9YW5pc290cm9weU1h
cERhdGEuYjtcbmFuaXNvdHJvcHlEaXJlY3Rpb24ucmcqPWFuaXNvdHJvcHlNYXBEYXRhLnJnKjIu
MC0xLjA7XG4jZW5kaWZcbm1hdDMgYW5pc29UQk49bWF0Myhub3JtYWxpemUoVEJOWzBdKSxub3Jt
YWxpemUoVEJOWzFdKSxub3JtYWxpemUoVEJOWzJdKSk7XG52ZWMzIGFuaXNvdHJvcGljVGFuZ2Vu
dD1ub3JtYWxpemUoYW5pc29UQk4qYW5pc290cm9weURpcmVjdGlvbik7XG52ZWMzIGFuaXNvdHJv
cGljQml0YW5nZW50PW5vcm1hbGl6ZShjcm9zcyhhbmlzb1RCTlsyXSxhbmlzb3Ryb3BpY1Rhbmdl
bnQpKTtcbnZlYzMgYW5pc290cm9waWNOb3JtYWw9Z2V0QW5pc290cm9waWNCZW50Tm9ybWFscyhh
bmlzb3Ryb3BpY1RhbmdlbnQsYW5pc290cm9waWNCaXRhbmdlbnQsbm9ybWFsVyx2aWV3RGlyZWN0
aW9uVyxhbmlzb3Ryb3B5KTtcbiNlbmRpZlxuXG4jaWZkZWYgU1NfUkVGUkFDVElPTlxudmVjNCBl
bnZpcm9ubWVudFJlZnJhY3Rpb249dmVjNCgwLiwwLiwwLiwwLik7XG4jaWZkZWYgQU5JU09UUk9Q
SUNcbnZlYzMgcmVmcmFjdGlvblZlY3Rvcj1yZWZyYWN0KC12aWV3RGlyZWN0aW9uVyxhbmlzb3Ry
b3BpY05vcm1hbCx2UmVmcmFjdGlvbkluZm9zLnkpO1xuI2Vsc2VcbnZlYzMgcmVmcmFjdGlvblZl
Y3Rvcj1yZWZyYWN0KC12aWV3RGlyZWN0aW9uVyxub3JtYWxXLHZSZWZyYWN0aW9uSW5mb3MueSk7
XG4jZW5kaWZcbiNpZmRlZiBTU19SRUZSQUNUSU9OTUFQX09QUE9TSVRFWlxucmVmcmFjdGlvblZl
Y3Rvci56Kj0tMS4wO1xuI2VuZGlmXG5cbiNpZmRlZiBTU19SRUZSQUNUSU9OTUFQXzNEXG5yZWZy
YWN0aW9uVmVjdG9yLnk9cmVmcmFjdGlvblZlY3Rvci55KnZSZWZyYWN0aW9uSW5mb3MudztcbnZl
YzMgcmVmcmFjdGlvbkNvb3Jkcz1yZWZyYWN0aW9uVmVjdG9yO1xucmVmcmFjdGlvbkNvb3Jkcz12
ZWMzKHJlZnJhY3Rpb25NYXRyaXgqdmVjNChyZWZyYWN0aW9uQ29vcmRzLDApKTtcbiNlbHNlXG52
ZWMzIHZSZWZyYWN0aW9uVVZXPXZlYzMocmVmcmFjdGlvbk1hdHJpeCoodmlldyp2ZWM0KHZQb3Np
dGlvblcrcmVmcmFjdGlvblZlY3Rvcip2UmVmcmFjdGlvbkluZm9zLnosMS4wKSkpO1xudmVjMiBy
ZWZyYWN0aW9uQ29vcmRzPXZSZWZyYWN0aW9uVVZXLnh5L3ZSZWZyYWN0aW9uVVZXLno7XG5yZWZy
YWN0aW9uQ29vcmRzLnk9MS4wLXJlZnJhY3Rpb25Db29yZHMueTtcbiNlbmRpZlxuI2lmZGVmIFNT
X0xPRElOUkVGUkFDVElPTkFMUEhBXG5mbG9hdCByZWZyYWN0aW9uTE9EPWdldExvZEZyb21BbHBo
YUcodlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54LGFscGhhRyxOZG90VlVuY2xhbXBlZCk7
XG4jZWxpZiBkZWZpbmVkKFNTX0xJTkVBUlNQRUNVTEFSUkVGUkFDVElPTilcbmZsb2F0IHJlZnJh
Y3Rpb25MT0Q9Z2V0TGluZWFyTG9kRnJvbVJvdWdobmVzcyh2UmVmcmFjdGlvbk1pY3Jvc3VyZmFj
ZUluZm9zLngscm91Z2huZXNzKTtcbiNlbHNlXG5mbG9hdCByZWZyYWN0aW9uTE9EPWdldExvZEZy
b21BbHBoYUcodlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54LGFscGhhRyk7XG4jZW5kaWZc
biNpZmRlZiBMT0RCQVNFRE1JQ1JPU0ZVUkFDRVxuXG5yZWZyYWN0aW9uTE9EPXJlZnJhY3Rpb25M
T0QqdlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy55K3ZSZWZyYWN0aW9uTWljcm9zdXJmYWNl
SW5mb3MuejtcbiNpZmRlZiBTU19MT0RJTlJFRlJBQ1RJT05BTFBIQVxuXG5cblxuXG5cblxuXG5c
blxuZmxvYXQgYXV0b21hdGljUmVmcmFjdGlvbkxPRD1VTlBBQ0tfTE9EKHNhbXBsZVJlZnJhY3Rp
b24ocmVmcmFjdGlvblNhbXBsZXIscmVmcmFjdGlvbkNvb3JkcykuYSk7XG5mbG9hdCByZXF1ZXN0
ZWRSZWZyYWN0aW9uTE9EPW1heChhdXRvbWF0aWNSZWZyYWN0aW9uTE9ELHJlZnJhY3Rpb25MT0Qp
O1xuI2Vsc2VcbmZsb2F0IHJlcXVlc3RlZFJlZnJhY3Rpb25MT0Q9cmVmcmFjdGlvbkxPRDtcbiNl
bmRpZlxuZW52aXJvbm1lbnRSZWZyYWN0aW9uPXNhbXBsZVJlZnJhY3Rpb25Mb2QocmVmcmFjdGlv
blNhbXBsZXIscmVmcmFjdGlvbkNvb3JkcyxyZXF1ZXN0ZWRSZWZyYWN0aW9uTE9EKTtcbiNlbHNl
XG5mbG9hdCBsb2RSZWZyYWN0aW9uTm9ybWFsaXplZD1zYXR1cmF0ZShyZWZyYWN0aW9uTE9EL2xv
ZzIodlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54KSk7XG5mbG9hdCBsb2RSZWZyYWN0aW9u
Tm9ybWFsaXplZERvdWJsZWQ9bG9kUmVmcmFjdGlvbk5vcm1hbGl6ZWQqMi4wO1xudmVjNCBlbnZp
cm9ubWVudFJlZnJhY3Rpb25NaWQ9c2FtcGxlUmVmcmFjdGlvbihyZWZyYWN0aW9uU2FtcGxlcixy
ZWZyYWN0aW9uQ29vcmRzKTtcbmlmKGxvZFJlZnJhY3Rpb25Ob3JtYWxpemVkRG91YmxlZDwxLjAp
e1xuZW52aXJvbm1lbnRSZWZyYWN0aW9uPW1peChcbnNhbXBsZVJlZnJhY3Rpb24ocmVmcmFjdGlv
blNhbXBsZXJIaWdoLHJlZnJhY3Rpb25Db29yZHMpLFxuZW52aXJvbm1lbnRSZWZyYWN0aW9uTWlk
LFxubG9kUmVmcmFjdGlvbk5vcm1hbGl6ZWREb3VibGVkXG4pO1xufWVsc2V7XG5lbnZpcm9ubWVu
dFJlZnJhY3Rpb249bWl4KFxuZW52aXJvbm1lbnRSZWZyYWN0aW9uTWlkLFxuc2FtcGxlUmVmcmFj
dGlvbihyZWZyYWN0aW9uU2FtcGxlckxvdyxyZWZyYWN0aW9uQ29vcmRzKSxcbmxvZFJlZnJhY3Rp
b25Ob3JtYWxpemVkRG91YmxlZC0xLjBcbik7XG59XG4jZW5kaWZcbiNpZmRlZiBTU19SR0JEUkVG
UkFDVElPTlxuZW52aXJvbm1lbnRSZWZyYWN0aW9uLnJnYj1mcm9tUkdCRChlbnZpcm9ubWVudFJl
ZnJhY3Rpb24pO1xuI2VuZGlmXG4jaWZkZWYgU1NfR0FNTUFSRUZSQUNUSU9OXG5lbnZpcm9ubWVu
dFJlZnJhY3Rpb24ucmdiPXRvTGluZWFyU3BhY2UoZW52aXJvbm1lbnRSZWZyYWN0aW9uLnJnYik7
XG4jZW5kaWZcblxuZW52aXJvbm1lbnRSZWZyYWN0aW9uLnJnYio9dlJlZnJhY3Rpb25JbmZvcy54
O1xuI2VuZGlmXG5cbiNpZmRlZiBSRUZMRUNUSU9OXG52ZWM0IGVudmlyb25tZW50UmFkaWFuY2U9
dmVjNCgwLiwwLiwwLiwwLik7XG52ZWMzIGVudmlyb25tZW50SXJyYWRpYW5jZT12ZWMzKDAuLDAu
LDAuKTtcbiNpZmRlZiBBTklTT1RST1BJQ1xudmVjMyByZWZsZWN0aW9uVmVjdG9yPWNvbXB1dGVS
ZWZsZWN0aW9uQ29vcmRzKHZlYzQodlBvc2l0aW9uVywxLjApLGFuaXNvdHJvcGljTm9ybWFsKTtc
biNlbHNlXG52ZWMzIHJlZmxlY3Rpb25WZWN0b3I9Y29tcHV0ZVJlZmxlY3Rpb25Db29yZHModmVj
NCh2UG9zaXRpb25XLDEuMCksbm9ybWFsVyk7XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9OTUFQ
X09QUE9TSVRFWlxucmVmbGVjdGlvblZlY3Rvci56Kj0tMS4wO1xuI2VuZGlmXG5cbiNpZmRlZiBS
RUZMRUNUSU9OTUFQXzNEXG52ZWMzIHJlZmxlY3Rpb25Db29yZHM9cmVmbGVjdGlvblZlY3Rvcjtc
biNlbHNlXG52ZWMyIHJlZmxlY3Rpb25Db29yZHM9cmVmbGVjdGlvblZlY3Rvci54eTtcbiNpZmRl
ZiBSRUZMRUNUSU9OTUFQX1BST0pFQ1RJT05cbnJlZmxlY3Rpb25Db29yZHMvPXJlZmxlY3Rpb25W
ZWN0b3IuejtcbiNlbmRpZlxucmVmbGVjdGlvbkNvb3Jkcy55PTEuMC1yZWZsZWN0aW9uQ29vcmRz
Lnk7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKExPRElOUkVGTEVDVElPTkFMUEhBKSAmJiAhZGVmaW5l
ZChSRUZMRUNUSU9OTUFQX1NLWUJPWClcbmZsb2F0IHJlZmxlY3Rpb25MT0Q9Z2V0TG9kRnJvbUFs
cGhhRyh2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLngsYWxwaGFHLE5kb3RWVW5jbGFtcGVk
KTtcbiNlbGlmIGRlZmluZWQoTElORUFSU1BFQ1VMQVJSRUZMRUNUSU9OKVxuZmxvYXQgcmVmcmFj
dGlvbkxPRD1nZXRMaW5lYXJMb2RGcm9tUm91Z2huZXNzKHZSZWZsZWN0aW9uTWljcm9zdXJmYWNl
SW5mb3MueCxyb3VnaG5lc3MpO1xuI2Vsc2VcbmZsb2F0IHJlZmxlY3Rpb25MT0Q9Z2V0TG9kRnJv
bUFscGhhRyh2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLngsYWxwaGFHKTtcbiNlbmRpZlxu
I2lmZGVmIExPREJBU0VETUlDUk9TRlVSQUNFXG5cbnJlZmxlY3Rpb25MT0Q9cmVmbGVjdGlvbkxP
RCp2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLnkrdlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJ
bmZvcy56O1xuI2lmZGVmIExPRElOUkVGTEVDVElPTkFMUEhBXG5cblxuXG5cblxuXG5cblxuXG5m
bG9hdCBhdXRvbWF0aWNSZWZsZWN0aW9uTE9EPVVOUEFDS19MT0Qoc2FtcGxlUmVmbGVjdGlvbihy
ZWZsZWN0aW9uU2FtcGxlcixyZWZsZWN0aW9uQ29vcmRzKS5hKTtcbmZsb2F0IHJlcXVlc3RlZFJl
ZmxlY3Rpb25MT0Q9bWF4KGF1dG9tYXRpY1JlZmxlY3Rpb25MT0QscmVmbGVjdGlvbkxPRCk7XG4j
ZWxzZVxuZmxvYXQgcmVxdWVzdGVkUmVmbGVjdGlvbkxPRD1yZWZsZWN0aW9uTE9EO1xuI2VuZGlm
XG5lbnZpcm9ubWVudFJhZGlhbmNlPXNhbXBsZVJlZmxlY3Rpb25Mb2QocmVmbGVjdGlvblNhbXBs
ZXIscmVmbGVjdGlvbkNvb3JkcyxyZXF1ZXN0ZWRSZWZsZWN0aW9uTE9EKTtcbiNlbHNlXG5mbG9h
dCBsb2RSZWZsZWN0aW9uTm9ybWFsaXplZD1zYXR1cmF0ZShyZWZsZWN0aW9uTE9EL2xvZzIodlJl
ZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54KSk7XG5mbG9hdCBsb2RSZWZsZWN0aW9uTm9ybWFs
aXplZERvdWJsZWQ9bG9kUmVmbGVjdGlvbk5vcm1hbGl6ZWQqMi4wO1xudmVjNCBlbnZpcm9ubWVu
dFNwZWN1bGFyTWlkPXNhbXBsZVJlZmxlY3Rpb24ocmVmbGVjdGlvblNhbXBsZXIscmVmbGVjdGlv
bkNvb3Jkcyk7XG5pZihsb2RSZWZsZWN0aW9uTm9ybWFsaXplZERvdWJsZWQ8MS4wKXtcbmVudmly
b25tZW50UmFkaWFuY2U9bWl4KFxuc2FtcGxlUmVmbGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlckhp
Z2gscmVmbGVjdGlvbkNvb3JkcyksXG5lbnZpcm9ubWVudFNwZWN1bGFyTWlkLFxubG9kUmVmbGVj
dGlvbk5vcm1hbGl6ZWREb3VibGVkXG4pO1xufWVsc2V7XG5lbnZpcm9ubWVudFJhZGlhbmNlPW1p
eChcbmVudmlyb25tZW50U3BlY3VsYXJNaWQsXG5zYW1wbGVSZWZsZWN0aW9uKHJlZmxlY3Rpb25T
YW1wbGVyTG93LHJlZmxlY3Rpb25Db29yZHMpLFxubG9kUmVmbGVjdGlvbk5vcm1hbGl6ZWREb3Vi
bGVkLTEuMFxuKTtcbn1cbiNlbmRpZlxuI2lmZGVmIFJHQkRSRUZMRUNUSU9OXG5lbnZpcm9ubWVu
dFJhZGlhbmNlLnJnYj1mcm9tUkdCRChlbnZpcm9ubWVudFJhZGlhbmNlKTtcbiNlbmRpZlxuI2lm
ZGVmIEdBTU1BUkVGTEVDVElPTlxuZW52aXJvbm1lbnRSYWRpYW5jZS5yZ2I9dG9MaW5lYXJTcGFj
ZShlbnZpcm9ubWVudFJhZGlhbmNlLnJnYik7XG4jZW5kaWZcblxuI2lmZGVmIFVTRVNQSEVSSUNB
TEZST01SRUZMRUNUSU9OTUFQXG4jaWYgZGVmaW5lZChOT1JNQUwpICYmIGRlZmluZWQoVVNFU1BI
RVJJQ0FMSU5WRVJURVgpXG5lbnZpcm9ubWVudElycmFkaWFuY2U9dkVudmlyb25tZW50SXJyYWRp
YW5jZTtcbiNlbHNlXG4jaWZkZWYgQU5JU09UUk9QSUNcbnZlYzMgaXJyYWRpYW5jZVZlY3Rvcj12
ZWMzKHJlZmxlY3Rpb25NYXRyaXgqdmVjNChhbmlzb3Ryb3BpY05vcm1hbCwwKSkueHl6O1xuI2Vs
c2VcbnZlYzMgaXJyYWRpYW5jZVZlY3Rvcj12ZWMzKHJlZmxlY3Rpb25NYXRyaXgqdmVjNChub3Jt
YWxXLDApKS54eXo7XG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9OTUFQX09QUE9TSVRFWlxuaXJy
YWRpYW5jZVZlY3Rvci56Kj0tMS4wO1xuI2VuZGlmXG5lbnZpcm9ubWVudElycmFkaWFuY2U9Y29t
cHV0ZUVudmlyb25tZW50SXJyYWRpYW5jZShpcnJhZGlhbmNlVmVjdG9yKTtcbiNlbmRpZlxuI2Vs
aWYgZGVmaW5lZChVU0VJUlJBRElBTkNFTUFQKVxuZW52aXJvbm1lbnRJcnJhZGlhbmNlPXNhbXBs
ZVJlZmxlY3Rpb24oaXJyYWRpYW5jZVNhbXBsZXIscmVmbGVjdGlvbkNvb3JkcykucmdiO1xuI2lm
ZGVmIFJHQkRSRUZMRUNUSU9OXG5lbnZpcm9ubWVudElycmFkaWFuY2UucmdiPWZyb21SR0JEKGVu
dmlyb25tZW50SXJyYWRpYW5jZSk7XG4jZW5kaWZcbiNpZmRlZiBHQU1NQVJFRkxFQ1RJT05cbmVu
dmlyb25tZW50SXJyYWRpYW5jZS5yZ2I9dG9MaW5lYXJTcGFjZShlbnZpcm9ubWVudElycmFkaWFu
Y2UucmdiKTtcbiNlbmRpZlxuI2VuZGlmXG5cbmVudmlyb25tZW50UmFkaWFuY2UucmdiKj12UmVm
bGVjdGlvbkluZm9zLng7XG5lbnZpcm9ubWVudFJhZGlhbmNlLnJnYio9dlJlZmxlY3Rpb25Db2xv
ci5yZ2I7XG5lbnZpcm9ubWVudElycmFkaWFuY2UqPXZSZWZsZWN0aW9uQ29sb3IucmdiO1xuI2Vu
ZGlmXG5cbmZsb2F0IHJlZmxlY3RhbmNlPW1heChtYXgoc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9y
LnIsc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yLmcpLHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci5i
KTtcbmZsb2F0IHJlZmxlY3RhbmNlOTA9ZnJlc25lbEdyYXppbmdSZWZsZWN0YW5jZShyZWZsZWN0
YW5jZSk7XG52ZWMzIHNwZWN1bGFyRW52aXJvbm1lbnRSMD1zdXJmYWNlUmVmbGVjdGl2aXR5Q29s
b3IucmdiO1xudmVjMyBzcGVjdWxhckVudmlyb25tZW50UjkwPXZlYzMoMS4wLDEuMCwxLjApKnJl
ZmxlY3RhbmNlOTA7XG5cbiNpZmRlZiBTSEVFTlxuZmxvYXQgc2hlZW5JbnRlbnNpdHk9dlNoZWVu
Q29sb3IuYTtcbiNpZmRlZiBTSEVFTl9URVhUVVJFXG52ZWM0IHNoZWVuTWFwRGF0YT10ZXh0dXJl
MkQoc2hlZW5TYW1wbGVyLHZTaGVlblVWK3V2T2Zmc2V0KSp2U2hlZW5JbmZvcy55O1xuc2hlZW5J
bnRlbnNpdHkqPXNoZWVuTWFwRGF0YS5hO1xuI2VuZGlmXG4jaWZkZWYgU0hFRU5fTElOS1dJVEhB
TEJFRE9cbmZsb2F0IHNoZWVuRmFjdG9yPXBvdzUoMS4wLXNoZWVuSW50ZW5zaXR5KTtcbnZlYzMg
c2hlZW5Db2xvcj1iYXNlQ29sb3IucmdiKigxLjAtc2hlZW5GYWN0b3IpO1xuZmxvYXQgc2hlZW5S
b3VnaG5lc3M9c2hlZW5JbnRlbnNpdHk7XG5cbnN1cmZhY2VBbGJlZG8ucmdiKj1zaGVlbkZhY3Rv
cjtcbiNlbHNlXG52ZWMzIHNoZWVuQ29sb3I9dlNoZWVuQ29sb3IucmdiO1xuI2lmZGVmIFNIRUVO
X1RFWFRVUkVcbnNoZWVuQ29sb3IucmdiKj10b0xpbmVhclNwYWNlKHNoZWVuTWFwRGF0YS5yZ2Ip
O1xuI2VuZGlmXG5mbG9hdCBzaGVlblJvdWdobmVzcz1yb3VnaG5lc3M7XG5cbnNoZWVuSW50ZW5z
aXR5Kj0oMS4tcmVmbGVjdGFuY2UpO1xuXG5zaGVlbkNvbG9yKj1zaGVlbkludGVuc2l0eTtcbiNl
bmRpZlxuXG4jaWYgZGVmaW5lZChSRUZMRUNUSU9OKVxuZmxvYXQgc2hlZW5BbHBoYUc9Y29udmVy
dFJvdWdobmVzc1RvQXZlcmFnZVNsb3BlKHNoZWVuUm91Z2huZXNzKTtcbiNpZmRlZiBTUEVDVUxB
UkFBXG5cbnNoZWVuQWxwaGFHKz1BQVJvdWdobmVzc0ZhY3RvcnMueTtcbiNlbmRpZlxudmVjNCBl
bnZpcm9ubWVudFNoZWVuUmFkaWFuY2U9dmVjNCgwLiwwLiwwLiwwLik7XG5cbiNpZiBkZWZpbmVk
KExPRElOUkVGTEVDVElPTkFMUEhBKSAmJiAhZGVmaW5lZChSRUZMRUNUSU9OTUFQX1NLWUJPWClc
bmZsb2F0IHNoZWVuUmVmbGVjdGlvbkxPRD1nZXRMb2RGcm9tQWxwaGFHKHZSZWZsZWN0aW9uTWlj
cm9zdXJmYWNlSW5mb3MueCxzaGVlbkFscGhhRyxOZG90VlVuY2xhbXBlZCk7XG4jZWxpZiBkZWZp
bmVkKExJTkVBUlNQRUNVTEFSUkVGTEVDVElPTilcbmZsb2F0IHNoZWVuUmVmbGVjdGlvbkxPRD1n
ZXRMaW5lYXJMb2RGcm9tUm91Z2huZXNzKHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueCxz
aGVlblJvdWdobmVzcyk7XG4jZWxzZVxuZmxvYXQgc2hlZW5SZWZsZWN0aW9uTE9EPWdldExvZEZy
b21BbHBoYUcodlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54LHNoZWVuQWxwaGFHKTtcbiNl
bmRpZlxuI2lmZGVmIExPREJBU0VETUlDUk9TRlVSQUNFXG5cbnNoZWVuUmVmbGVjdGlvbkxPRD1z
aGVlblJlZmxlY3Rpb25MT0QqdlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy55K3ZSZWZsZWN0
aW9uTWljcm9zdXJmYWNlSW5mb3MuejtcbmVudmlyb25tZW50U2hlZW5SYWRpYW5jZT1zYW1wbGVS
ZWZsZWN0aW9uTG9kKHJlZmxlY3Rpb25TYW1wbGVyLHJlZmxlY3Rpb25Db29yZHMsc2hlZW5SZWZs
ZWN0aW9uTE9EKTtcbiNlbHNlXG5mbG9hdCBsb2RTaGVlblJlZmxlY3Rpb25Ob3JtYWxpemVkPXNh
dHVyYXRlKHNoZWVuUmVmbGVjdGlvbkxPRC9sb2cyKHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5m
b3MueCkpO1xuZmxvYXQgbG9kU2hlZW5SZWZsZWN0aW9uTm9ybWFsaXplZERvdWJsZWQ9bG9kU2hl
ZW5SZWZsZWN0aW9uTm9ybWFsaXplZCoyLjA7XG52ZWM0IGVudmlyb25tZW50U2hlZW5NaWQ9c2Ft
cGxlUmVmbGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlcixyZWZsZWN0aW9uQ29vcmRzKTtcbmlmKGxv
ZFNoZWVuUmVmbGVjdGlvbk5vcm1hbGl6ZWREb3VibGVkPDEuMCl7XG5lbnZpcm9ubWVudFNoZWVu
UmFkaWFuY2U9bWl4KFxuc2FtcGxlUmVmbGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlckhpZ2gscmVm
bGVjdGlvbkNvb3JkcyksXG5lbnZpcm9ubWVudFNoZWVuTWlkLFxubG9kU2hlZW5SZWZsZWN0aW9u
Tm9ybWFsaXplZERvdWJsZWRcbik7XG59ZWxzZXtcbmVudmlyb25tZW50U2hlZW5SYWRpYW5jZT1t
aXgoXG5lbnZpcm9ubWVudFNoZWVuTWlkLFxuc2FtcGxlUmVmbGVjdGlvbihyZWZsZWN0aW9uU2Ft
cGxlckxvdyxyZWZsZWN0aW9uQ29vcmRzKSxcbmxvZFNoZWVuUmVmbGVjdGlvbk5vcm1hbGl6ZWRE
b3VibGVkLTEuMFxuKTtcbn1cbiNlbmRpZlxuI2lmZGVmIFJHQkRSRUZMRUNUSU9OXG5lbnZpcm9u
bWVudFNoZWVuUmFkaWFuY2UucmdiPWZyb21SR0JEKGVudmlyb25tZW50U2hlZW5SYWRpYW5jZSk7
XG4jZW5kaWZcbiNpZmRlZiBHQU1NQVJFRkxFQ1RJT05cbmVudmlyb25tZW50U2hlZW5SYWRpYW5j
ZS5yZ2I9dG9MaW5lYXJTcGFjZShlbnZpcm9ubWVudFNoZWVuUmFkaWFuY2UucmdiKTtcbiNlbmRp
ZlxuXG5lbnZpcm9ubWVudFNoZWVuUmFkaWFuY2UucmdiKj12UmVmbGVjdGlvbkluZm9zLng7XG5l
bnZpcm9ubWVudFNoZWVuUmFkaWFuY2UucmdiKj12UmVmbGVjdGlvbkNvbG9yLnJnYjtcbiNlbmRp
ZlxuI2VuZGlmXG5cbiNpZmRlZiBDTEVBUkNPQVRcblxuZmxvYXQgY2xlYXJDb2F0SW50ZW5zaXR5
PXZDbGVhckNvYXRQYXJhbXMueDtcbmZsb2F0IGNsZWFyQ29hdFJvdWdobmVzcz12Q2xlYXJDb2F0
UGFyYW1zLnk7XG4jaWZkZWYgQ0xFQVJDT0FUX1RFWFRVUkVcbnZlYzIgY2xlYXJDb2F0TWFwRGF0
YT10ZXh0dXJlMkQoY2xlYXJDb2F0U2FtcGxlcix2Q2xlYXJDb2F0VVYrdXZPZmZzZXQpLnJnKnZD
bGVhckNvYXRJbmZvcy55O1xuY2xlYXJDb2F0SW50ZW5zaXR5Kj1jbGVhckNvYXRNYXBEYXRhLng7
XG5jbGVhckNvYXRSb3VnaG5lc3MqPWNsZWFyQ29hdE1hcERhdGEueTtcbiNlbmRpZlxuI2lmZGVm
IENMRUFSQ09BVF9USU5UXG52ZWMzIGNsZWFyQ29hdENvbG9yPXZDbGVhckNvYXRUaW50UGFyYW1z
LnJnYjtcbmZsb2F0IGNsZWFyQ29hdFRoaWNrbmVzcz12Q2xlYXJDb2F0VGludFBhcmFtcy5hO1xu
I2lmZGVmIENMRUFSQ09BVF9USU5UX1RFWFRVUkVcbnZlYzQgY2xlYXJDb2F0VGludE1hcERhdGE9
dGV4dHVyZTJEKGNsZWFyQ29hdFRpbnRTYW1wbGVyLHZDbGVhckNvYXRUaW50VVYrdXZPZmZzZXQp
O1xuY2xlYXJDb2F0Q29sb3IqPXRvTGluZWFyU3BhY2UoY2xlYXJDb2F0VGludE1hcERhdGEucmdi
KTtcbmNsZWFyQ29hdFRoaWNrbmVzcyo9Y2xlYXJDb2F0VGludE1hcERhdGEuYTtcbiNlbmRpZlxu
Y2xlYXJDb2F0Q29sb3I9Y29tcHV0ZUNvbG9yQXREaXN0YW5jZUluTWVkaWEoY2xlYXJDb2F0Q29s
b3IsY2xlYXJDb2F0Q29sb3JBdERpc3RhbmNlKTtcbiNlbmRpZlxuXG5cblxuXG52ZWMzIHNwZWN1
bGFyRW52aXJvbm1lbnRSMFVwZGF0ZWQ9Z2V0UjBSZW1hcHBlZEZvckNsZWFyQ29hdChzcGVjdWxh
ckVudmlyb25tZW50UjApO1xuc3BlY3VsYXJFbnZpcm9ubWVudFIwPW1peChzcGVjdWxhckVudmly
b25tZW50UjAsc3BlY3VsYXJFbnZpcm9ubWVudFIwVXBkYXRlZCxjbGVhckNvYXRJbnRlbnNpdHkp
O1xuI2lmZGVmIENMRUFSQ09BVF9CVU1QXG4jaWZkZWYgTk9STUFMWFlTQ0FMRVxuZmxvYXQgY2xl
YXJDb2F0Tm9ybWFsU2NhbGU9MS4wO1xuI2Vsc2VcbmZsb2F0IGNsZWFyQ29hdE5vcm1hbFNjYWxl
PXZDbGVhckNvYXRCdW1wSW5mb3MueTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoVEFOR0VOVCkgJiYg
ZGVmaW5lZChOT1JNQUwpXG5tYXQzIFRCTkNsZWFyQ29hdD12VEJOO1xuI2Vsc2Vcbm1hdDMgVEJO
Q2xlYXJDb2F0PWNvdGFuZ2VudF9mcmFtZShjbGVhckNvYXROb3JtYWxXKmNsZWFyQ29hdE5vcm1h
bFNjYWxlLHZQb3NpdGlvblcsdkNsZWFyQ29hdEJ1bXBVVix2Q2xlYXJDb2F0VGFuZ2VudFNwYWNl
UGFyYW1zKTtcbiNlbmRpZlxuI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuY2xlYXJDb2F0
Tm9ybWFsVz1ub3JtYWxpemUodGV4dHVyZTJEKGNsZWFyQ29hdEJ1bXBTYW1wbGVyLHZDbGVhckNv
YXRCdW1wVVYrdXZPZmZzZXQpLnh5eioyLjAtMS4wKTtcbmNsZWFyQ29hdE5vcm1hbFc9bm9ybWFs
aXplKG1hdDMobm9ybWFsTWF0cml4KSpjbGVhckNvYXROb3JtYWxXKTtcbiNlbHNlXG5jbGVhckNv
YXROb3JtYWxXPXBlcnR1cmJOb3JtYWwoVEJOLHRleHR1cmUyRChjbGVhckNvYXRCdW1wU2FtcGxl
cix2Q2xlYXJDb2F0QnVtcFVWK3V2T2Zmc2V0KS54eXosdkNsZWFyQ29hdEJ1bXBJbmZvcy55KTtc
biNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZChGT1JDRU5PUk1BTEZPUldBUkQpICYmIGRlZmlu
ZWQoTk9STUFMKVxuY2xlYXJDb2F0Tm9ybWFsVyo9c2lnbihkb3QoY2xlYXJDb2F0Tm9ybWFsVyxm
YWNlTm9ybWFsKSk7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKFRXT1NJREVETElHSFRJTkcpICYmIGRl
ZmluZWQoTk9STUFMKVxuY2xlYXJDb2F0Tm9ybWFsVz1nbF9Gcm9udEZhY2luZyA/IGNsZWFyQ29h
dE5vcm1hbFcgOiAtY2xlYXJDb2F0Tm9ybWFsVztcbiNlbmRpZlxuXG52ZWMyIGNsZWFyQ29hdEFB
Um91Z2huZXNzRmFjdG9ycz1nZXRBQVJvdWdobmVzc0ZhY3RvcnMoY2xlYXJDb2F0Tm9ybWFsVy54
eXopO1xuXG5mbG9hdCBjbGVhckNvYXROZG90VlVuY2xhbXBlZD1kb3QoY2xlYXJDb2F0Tm9ybWFs
Vyx2aWV3RGlyZWN0aW9uVyk7XG5cbmZsb2F0IGNsZWFyQ29hdE5kb3RWPWFic0VwcyhjbGVhckNv
YXROZG90VlVuY2xhbXBlZCk7XG5cbiNpZiBkZWZpbmVkKFJFRkxFQ1RJT04pXG5mbG9hdCBjbGVh
ckNvYXRBbHBoYUc9Y29udmVydFJvdWdobmVzc1RvQXZlcmFnZVNsb3BlKGNsZWFyQ29hdFJvdWdo
bmVzcyk7XG4jaWZkZWYgU1BFQ1VMQVJBQVxuXG5jbGVhckNvYXRBbHBoYUcrPWNsZWFyQ29hdEFB
Um91Z2huZXNzRmFjdG9ycy55O1xuI2VuZGlmXG52ZWM0IGVudmlyb25tZW50Q2xlYXJDb2F0UmFk
aWFuY2U9dmVjNCgwLiwwLiwwLiwwLik7XG52ZWMzIGNsZWFyQ29hdFJlZmxlY3Rpb25WZWN0b3I9
Y29tcHV0ZVJlZmxlY3Rpb25Db29yZHModmVjNCh2UG9zaXRpb25XLDEuMCksY2xlYXJDb2F0Tm9y
bWFsVyk7XG4jaWZkZWYgUkVGTEVDVElPTk1BUF9PUFBPU0lURVpcbmNsZWFyQ29hdFJlZmxlY3Rp
b25WZWN0b3Iueio9LTEuMDtcbiNlbmRpZlxuXG4jaWZkZWYgUkVGTEVDVElPTk1BUF8zRFxudmVj
MyBjbGVhckNvYXRSZWZsZWN0aW9uQ29vcmRzPWNsZWFyQ29hdFJlZmxlY3Rpb25WZWN0b3I7XG4j
ZWxzZVxudmVjMiBjbGVhckNvYXRSZWZsZWN0aW9uQ29vcmRzPWNsZWFyQ29hdFJlZmxlY3Rpb25W
ZWN0b3IueHk7XG4jaWZkZWYgUkVGTEVDVElPTk1BUF9QUk9KRUNUSU9OXG5jbGVhckNvYXRSZWZs
ZWN0aW9uQ29vcmRzLz1jbGVhckNvYXRSZWZsZWN0aW9uVmVjdG9yLno7XG4jZW5kaWZcbmNsZWFy
Q29hdFJlZmxlY3Rpb25Db29yZHMueT0xLjAtY2xlYXJDb2F0UmVmbGVjdGlvbkNvb3Jkcy55O1xu
I2VuZGlmXG4jaWYgZGVmaW5lZChMT0RJTlJFRkxFQ1RJT05BTFBIQSkgJiYgIWRlZmluZWQoUkVG
TEVDVElPTk1BUF9TS1lCT1gpXG5mbG9hdCBjbGVhckNvYXRSZWZsZWN0aW9uTE9EPWdldExvZEZy
b21BbHBoYUcodlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy54LGNsZWFyQ29hdEFscGhhRyxj
bGVhckNvYXROZG90VlVuY2xhbXBlZCk7XG4jZWxpZiBkZWZpbmVkKExJTkVBUlNQRUNVTEFSUkVG
TEVDVElPTilcbmZsb2F0IHNoZWVuUmVmbGVjdGlvbkxPRD1nZXRMaW5lYXJMb2RGcm9tUm91Z2hu
ZXNzKHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueCxjbGVhckNvYXRSb3VnaG5lc3MpO1xu
I2Vsc2VcbmZsb2F0IGNsZWFyQ29hdFJlZmxlY3Rpb25MT0Q9Z2V0TG9kRnJvbUFscGhhRyh2UmVm
bGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLngsY2xlYXJDb2F0QWxwaGFHKTtcbiNlbmRpZlxuI2lm
ZGVmIExPREJBU0VETUlDUk9TRlVSQUNFXG5cbmNsZWFyQ29hdFJlZmxlY3Rpb25MT0Q9Y2xlYXJD
b2F0UmVmbGVjdGlvbkxPRCp2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLnkrdlJlZmxlY3Rp
b25NaWNyb3N1cmZhY2VJbmZvcy56O1xuZmxvYXQgcmVxdWVzdGVkQ2xlYXJDb2F0UmVmbGVjdGlv
bkxPRD1jbGVhckNvYXRSZWZsZWN0aW9uTE9EO1xuZW52aXJvbm1lbnRDbGVhckNvYXRSYWRpYW5j
ZT1zYW1wbGVSZWZsZWN0aW9uTG9kKHJlZmxlY3Rpb25TYW1wbGVyLGNsZWFyQ29hdFJlZmxlY3Rp
b25Db29yZHMscmVxdWVzdGVkQ2xlYXJDb2F0UmVmbGVjdGlvbkxPRCk7XG4jZWxzZVxuZmxvYXQg
bG9kQ2xlYXJDb2F0UmVmbGVjdGlvbk5vcm1hbGl6ZWQ9c2F0dXJhdGUoY2xlYXJDb2F0UmVmbGVj
dGlvbkxPRC9sb2cyKHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueCkpO1xuZmxvYXQgbG9k
Q2xlYXJDb2F0UmVmbGVjdGlvbk5vcm1hbGl6ZWREb3VibGVkPWxvZENsZWFyQ29hdFJlZmxlY3Rp
b25Ob3JtYWxpemVkKjIuMDtcbnZlYzQgZW52aXJvbm1lbnRDbGVhckNvYXRNaWQ9c2FtcGxlUmVm
bGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlcixyZWZsZWN0aW9uQ29vcmRzKTtcbmlmKGxvZENsZWFy
Q29hdFJlZmxlY3Rpb25Ob3JtYWxpemVkRG91YmxlZDwxLjApe1xuZW52aXJvbm1lbnRDbGVhckNv
YXRSYWRpYW5jZT1taXgoXG5zYW1wbGVSZWZsZWN0aW9uKHJlZmxlY3Rpb25TYW1wbGVySGlnaCxj
bGVhckNvYXRSZWZsZWN0aW9uQ29vcmRzKSxcbmVudmlyb25tZW50Q2xlYXJDb2F0TWlkLFxubG9k
Q2xlYXJDb2F0UmVmbGVjdGlvbk5vcm1hbGl6ZWREb3VibGVkXG4pO1xufWVsc2V7XG5lbnZpcm9u
bWVudENsZWFyQ29hdFJhZGlhbmNlPW1peChcbmVudmlyb25tZW50Q2xlYXJDb2F0TWlkLFxuc2Ft
cGxlUmVmbGVjdGlvbihyZWZsZWN0aW9uU2FtcGxlckxvdyxjbGVhckNvYXRSZWZsZWN0aW9uQ29v
cmRzKSxcbmxvZENsZWFyQ29hdFJlZmxlY3Rpb25Ob3JtYWxpemVkRG91YmxlZC0xLjBcbik7XG59
XG4jZW5kaWZcbiNpZmRlZiBSR0JEUkVGTEVDVElPTlxuZW52aXJvbm1lbnRDbGVhckNvYXRSYWRp
YW5jZS5yZ2I9ZnJvbVJHQkQoZW52aXJvbm1lbnRDbGVhckNvYXRSYWRpYW5jZSk7XG4jZW5kaWZc
biNpZmRlZiBHQU1NQVJFRkxFQ1RJT05cbmVudmlyb25tZW50Q2xlYXJDb2F0UmFkaWFuY2Uucmdi
PXRvTGluZWFyU3BhY2UoZW52aXJvbm1lbnRDbGVhckNvYXRSYWRpYW5jZS5yZ2IpO1xuI2VuZGlm
XG4jaWZkZWYgQ0xFQVJDT0FUX1RJTlRcblxudmVjMyBjbGVhckNvYXRWUmVmcmFjdD0tcmVmcmFj
dCh2UG9zaXRpb25XLGNsZWFyQ29hdE5vcm1hbFcsdkNsZWFyQ29hdFJlZnJhY3Rpb25QYXJhbXMu
eSk7XG5cbmZsb2F0IGNsZWFyQ29hdE5kb3RWUmVmcmFjdD1hYnNFcHMoZG90KGNsZWFyQ29hdE5v
cm1hbFcsY2xlYXJDb2F0VlJlZnJhY3QpKTtcbnZlYzMgYWJzb3JwdGlvbj12ZWMzKDAuKTtcbiNl
bmRpZlxuXG5lbnZpcm9ubWVudENsZWFyQ29hdFJhZGlhbmNlLnJnYio9dlJlZmxlY3Rpb25JbmZv
cy54O1xuZW52aXJvbm1lbnRDbGVhckNvYXRSYWRpYW5jZS5yZ2IqPXZSZWZsZWN0aW9uQ29sb3Iu
cmdiO1xuI2VuZGlmXG4jZW5kaWZcblxuI2lmIGRlZmluZWQoRU5WSVJPTk1FTlRCUkRGKVxuXG52
ZWMzIGVudmlyb25tZW50QnJkZj1nZXRCUkRGTG9va3VwKE5kb3RWLHJvdWdobmVzcyk7XG4jaWZk
ZWYgTVNfQlJERl9FTkVSR1lfQ09OU0VSVkFUSU9OXG52ZWMzIGVuZXJneUNvbnNlcnZhdGlvbkZh
Y3Rvcj1nZXRFbmVyZ3lDb25zZXJ2YXRpb25GYWN0b3Ioc3BlY3VsYXJFbnZpcm9ubWVudFIwLGVu
dmlyb25tZW50QnJkZik7XG4jZW5kaWZcbiNlbmRpZlxuXG4jaWZkZWYgU1VCU1VSRkFDRVxuI2lm
ZGVmIFNTX1JFRlJBQ1RJT05cbmZsb2F0IHJlZnJhY3Rpb25JbnRlbnNpdHk9dlN1YlN1cmZhY2VJ
bnRlbnNpdHkueDtcbiNpZmRlZiBTU19MSU5LUkVGUkFDVElPTlRPVFJBTlNQQVJFTkNZXG5yZWZy
YWN0aW9uSW50ZW5zaXR5Kj0oMS4wLWFscGhhKTtcblxuYWxwaGE9MS4wO1xuI2VuZGlmXG4jZW5k
aWZcbiNpZmRlZiBTU19UUkFOU0xVQ0VOQ1lcbmZsb2F0IHRyYW5zbHVjZW5jeUludGVuc2l0eT12
U3ViU3VyZmFjZUludGVuc2l0eS55O1xuI2VuZGlmXG4jaWZkZWYgU1NfU0NBVFRFUklOR1xuZmxv
YXQgc2NhdHRlcmluZ0ludGVuc2l0eT12U3ViU3VyZmFjZUludGVuc2l0eS56O1xuI2VuZGlmXG4j
aWZkZWYgU1NfVEhJQ0tORVNTQU5ETUFTS19URVhUVVJFXG52ZWM0IHRoaWNrbmVzc01hcD10ZXh0
dXJlMkQodGhpY2tuZXNzU2FtcGxlcix2VGhpY2tuZXNzVVYrdXZPZmZzZXQpO1xuZmxvYXQgdGhp
Y2tuZXNzPXRoaWNrbmVzc01hcC5yKnZUaGlja25lc3NQYXJhbS55K3ZUaGlja25lc3NQYXJhbS54
O1xuI2lmZGVmIFNTX01BU0tfRlJPTV9USElDS05FU1NfVEVYVFVSRVxuI2lmZGVmIFNTX1JFRlJB
Q1RJT05cbnJlZnJhY3Rpb25JbnRlbnNpdHkqPXRoaWNrbmVzc01hcC5nO1xuI2VuZGlmXG4jaWZk
ZWYgU1NfVFJBTlNMVUNFTkNZXG50cmFuc2x1Y2VuY3lJbnRlbnNpdHkqPXRoaWNrbmVzc01hcC5i
O1xuI2VuZGlmXG4jaWZkZWYgU1NfU0NBVFRFUklOR1xuc2NhdHRlcmluZ0ludGVuc2l0eSo9dGhp
Y2tuZXNzTWFwLmE7XG4jZW5kaWZcbiNlbmRpZlxuI2Vsc2VcbmZsb2F0IHRoaWNrbmVzcz12VGhp
Y2tuZXNzUGFyYW0ueTtcbiNlbmRpZlxuI2lmZGVmIFNTX1RSQU5TTFVDRU5DWVxudGhpY2tuZXNz
PW1heEVwcyh0aGlja25lc3MpO1xudmVjMyB0cmFuc21pdHRhbmNlPXRyYW5zbWl0dGFuY2VCUkRG
X0J1cmxleSh2VGludENvbG9yLnJnYix2RGlmZnVzaW9uRGlzdGFuY2UsdGhpY2tuZXNzKTtcbnRy
YW5zbWl0dGFuY2UqPXRyYW5zbHVjZW5jeUludGVuc2l0eTtcbiNlbmRpZlxuI2VuZGlmXG5cblxu
dmVjMyBkaWZmdXNlQmFzZT12ZWMzKDAuLDAuLDAuKTtcbiNpZmRlZiBTUEVDVUxBUlRFUk1cbnZl
YzMgc3BlY3VsYXJCYXNlPXZlYzMoMC4sMC4sMC4pO1xuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FU
XG52ZWMzIGNsZWFyQ29hdEJhc2U9dmVjMygwLiwwLiwwLik7XG4jZW5kaWZcbiNpZmRlZiBTSEVF
TlxudmVjMyBzaGVlbkJhc2U9dmVjMygwLiwwLiwwLik7XG4jZW5kaWZcbiNpZmRlZiBMSUdIVE1B
UFxudmVjNCBsaWdodG1hcENvbG9yPXRleHR1cmUyRChsaWdodG1hcFNhbXBsZXIsdkxpZ2h0bWFw
VVYrdXZPZmZzZXQpO1xuI2lmZGVmIFJHQkRMSUdIVE1BUFxubGlnaHRtYXBDb2xvci5yZ2I9ZnJv
bVJHQkQobGlnaHRtYXBDb2xvcik7XG4jZW5kaWZcbiNpZmRlZiBHQU1NQUxJR0hUTUFQXG5saWdo
dG1hcENvbG9yLnJnYj10b0xpbmVhclNwYWNlKGxpZ2h0bWFwQ29sb3IucmdiKTtcbiNlbmRpZlxu
bGlnaHRtYXBDb2xvci5yZ2IqPXZMaWdodG1hcEluZm9zLnk7XG4jZW5kaWZcblxucHJlTGlnaHRp
bmdJbmZvIHByZUluZm87XG5saWdodGluZ0luZm8gaW5mbztcbmZsb2F0IHNoYWRvdz0xLjtcbiNp
bmNsdWRlPGxpZ2h0RnJhZ21lbnQ+WzAuLm1heFNpbXVsdGFuZW91c0xpZ2h0c11cblxuI2lmIGRl
ZmluZWQoRU5WSVJPTk1FTlRCUkRGKSAmJiAhZGVmaW5lZChSRUZMRUNUSU9OTUFQX1NLWUJPWClc
bnZlYzMgc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3RhbmNlPWdldFJlZmxlY3RhbmNlRnJvbUJS
REZMb29rdXAoc3BlY3VsYXJFbnZpcm9ubWVudFIwLGVudmlyb25tZW50QnJkZik7XG4jaWZkZWYg
UkFESUFOQ0VPQ0NMVVNJT05cbiNpZmRlZiBBTUJJRU5USU5HUkFZU0NBTEVcbmZsb2F0IGFtYmll
bnRNb25vY2hyb21lPWFtYmllbnRPY2NsdXNpb25Db2xvci5yO1xuI2Vsc2VcbmZsb2F0IGFtYmll
bnRNb25vY2hyb21lPWdldEx1bWluYW5jZShhbWJpZW50T2NjbHVzaW9uQ29sb3IpO1xuI2VuZGlm
XG5mbG9hdCBzZW89ZW52aXJvbm1lbnRSYWRpYW5jZU9jY2x1c2lvbihhbWJpZW50TW9ub2Nocm9t
ZSxOZG90VlVuY2xhbXBlZCk7XG5zcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2UqPXNlbztc
biNlbmRpZlxuI2lmZGVmIEhPUklaT05PQ0NMVVNJT05cbiNpZmRlZiBCVU1QXG4jaWZkZWYgUkVG
TEVDVElPTk1BUF8zRFxuZmxvYXQgZWhvPWVudmlyb25tZW50SG9yaXpvbk9jY2x1c2lvbigtdmll
d0RpcmVjdGlvblcsbm9ybWFsVyk7XG5zcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2UqPWVo
bztcbiNlbmRpZlxuI2VuZGlmXG4jZW5kaWZcbiNlbHNlXG5cbnZlYzMgc3BlY3VsYXJFbnZpcm9u
bWVudFJlZmxlY3RhbmNlPWdldFJlZmxlY3RhbmNlRnJvbUFuYWx5dGljYWxCUkRGTG9va3VwX0pv
bmVzKE5kb3RWLHNwZWN1bGFyRW52aXJvbm1lbnRSMCxzcGVjdWxhckVudmlyb25tZW50UjkwLHNx
cnQobWljcm9TdXJmYWNlKSk7XG4jZW5kaWZcblxuI2lmIGRlZmluZWQoU0hFRU4pICYmIGRlZmlu
ZWQoUkVGTEVDVElPTilcbnZlYzMgc2hlZW5FbnZpcm9ubWVudFJlZmxlY3RhbmNlPWdldFNoZWVu
UmVmbGVjdGFuY2VGcm9tQlJERkxvb2t1cChzaGVlbkNvbG9yLGVudmlyb25tZW50QnJkZik7XG4j
aWZkZWYgUkFESUFOQ0VPQ0NMVVNJT05cbnNoZWVuRW52aXJvbm1lbnRSZWZsZWN0YW5jZSo9c2Vv
O1xuI2VuZGlmXG4jaWZkZWYgSE9SSVpPTk9DQ0xVU0lPTlxuI2lmZGVmIEJVTVBcbiNpZmRlZiBS
RUZMRUNUSU9OTUFQXzNEXG5zaGVlbkVudmlyb25tZW50UmVmbGVjdGFuY2UqPWVobztcbiNlbmRp
ZlxuI2VuZGlmXG4jZW5kaWZcbiNlbmRpZlxuXG4jaWZkZWYgQ0xFQVJDT0FUXG4jaWYgZGVmaW5l
ZChFTlZJUk9OTUVOVEJSREYpICYmICFkZWZpbmVkKFJFRkxFQ1RJT05NQVBfU0tZQk9YKVxuXG52
ZWMzIGVudmlyb25tZW50Q2xlYXJDb2F0QnJkZj1nZXRCUkRGTG9va3VwKGNsZWFyQ29hdE5kb3RW
LGNsZWFyQ29hdFJvdWdobmVzcyk7XG52ZWMzIGNsZWFyQ29hdEVudmlyb25tZW50UmVmbGVjdGFu
Y2U9Z2V0UmVmbGVjdGFuY2VGcm9tQlJERkxvb2t1cCh2ZWMzKHZDbGVhckNvYXRSZWZyYWN0aW9u
UGFyYW1zLngpLGVudmlyb25tZW50Q2xlYXJDb2F0QnJkZik7XG4jaWZkZWYgUkFESUFOQ0VPQ0NM
VVNJT05cbmZsb2F0IGNsZWFyQ29hdFNlbz1lbnZpcm9ubWVudFJhZGlhbmNlT2NjbHVzaW9uKGFt
YmllbnRNb25vY2hyb21lLGNsZWFyQ29hdE5kb3RWVW5jbGFtcGVkKTtcbmNsZWFyQ29hdEVudmly
b25tZW50UmVmbGVjdGFuY2UqPWNsZWFyQ29hdFNlbztcbiNlbmRpZlxuI2lmZGVmIEhPUklaT05P
Q0NMVVNJT05cbiNpZmRlZiBCVU1QXG4jaWZkZWYgUkVGTEVDVElPTk1BUF8zRFxuZmxvYXQgY2xl
YXJDb2F0RWhvPWVudmlyb25tZW50SG9yaXpvbk9jY2x1c2lvbigtdmlld0RpcmVjdGlvblcsY2xl
YXJDb2F0Tm9ybWFsVyk7XG5jbGVhckNvYXRFbnZpcm9ubWVudFJlZmxlY3RhbmNlKj1jbGVhckNv
YXRFaG87XG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlmXG4jZWxzZVxuXG52ZWMzIGNsZWFyQ29hdEVu
dmlyb25tZW50UmVmbGVjdGFuY2U9Z2V0UmVmbGVjdGFuY2VGcm9tQW5hbHl0aWNhbEJSREZMb29r
dXBfSm9uZXMoY2xlYXJDb2F0TmRvdFYsdmVjMygxLiksdmVjMygxLiksc3FydCgxLi1jbGVhckNv
YXRSb3VnaG5lc3MpKTtcbiNlbmRpZlxuY2xlYXJDb2F0RW52aXJvbm1lbnRSZWZsZWN0YW5jZSo9
Y2xlYXJDb2F0SW50ZW5zaXR5O1xuI2lmIGRlZmluZWQoUkVGTEVDVElPTikgJiYgZGVmaW5lZChD
TEVBUkNPQVRfVElOVClcblxuYWJzb3JwdGlvbj1jb21wdXRlQ2xlYXJDb2F0QWJzb3JwdGlvbihj
bGVhckNvYXROZG90VlJlZnJhY3QsY2xlYXJDb2F0TmRvdFZSZWZyYWN0LGNsZWFyQ29hdENvbG9y
LGNsZWFyQ29hdFRoaWNrbmVzcyxjbGVhckNvYXRJbnRlbnNpdHkpO1xuI2lmZGVmIFJFRkxFQ1RJ
T05cbmVudmlyb25tZW50SXJyYWRpYW5jZSo9YWJzb3JwdGlvbjtcbiNlbmRpZlxuI2lmZGVmIFNI
RUVOXG5zaGVlbkVudmlyb25tZW50UmVmbGVjdGFuY2UqPWFic29ycHRpb247XG4jZW5kaWZcbnNw
ZWN1bGFyRW52aXJvbm1lbnRSZWZsZWN0YW5jZSo9YWJzb3JwdGlvbjtcbiNlbmRpZlxuXG5mbG9h
dCBmcmVzbmVsSUJMQ2xlYXJDb2F0PWZyZXNuZWxTY2hsaWNrR0dYKGNsZWFyQ29hdE5kb3RWLHZD
bGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zLngsQ0xFQVJDT0FUUkVGTEVDVEFOQ0U5MCk7XG5mcmVz
bmVsSUJMQ2xlYXJDb2F0Kj1jbGVhckNvYXRJbnRlbnNpdHk7XG5mbG9hdCBjb25zZXJ2YXRpb25G
YWN0b3I9KDEuLWZyZXNuZWxJQkxDbGVhckNvYXQpO1xuI2lmZGVmIFJFRkxFQ1RJT05cbmVudmly
b25tZW50SXJyYWRpYW5jZSo9Y29uc2VydmF0aW9uRmFjdG9yO1xuI2VuZGlmXG4jaWZkZWYgU0hF
RU5cbnNoZWVuRW52aXJvbm1lbnRSZWZsZWN0YW5jZSo9KGNvbnNlcnZhdGlvbkZhY3Rvcipjb25z
ZXJ2YXRpb25GYWN0b3IpO1xuI2VuZGlmXG5zcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2Uq
PShjb25zZXJ2YXRpb25GYWN0b3IqY29uc2VydmF0aW9uRmFjdG9yKTtcbiNlbmRpZlxuXG4jaWZk
ZWYgU1NfUkVGUkFDVElPTlxudmVjMyByZWZyYWN0aW9uVHJhbnNtaXR0YW5jZT12ZWMzKHJlZnJh
Y3Rpb25JbnRlbnNpdHkpO1xuI2lmZGVmIFNTX1RISUNLTkVTU0FORE1BU0tfVEVYVFVSRVxudmVj
MyB2b2x1bWVBbGJlZG89Y29tcHV0ZUNvbG9yQXREaXN0YW5jZUluTWVkaWEodlRpbnRDb2xvci5y
Z2IsdlRpbnRDb2xvci53KTtcblxuXG5cblxuXG5yZWZyYWN0aW9uVHJhbnNtaXR0YW5jZSo9Y29j
YUxhbWJlcnQodm9sdW1lQWxiZWRvLHRoaWNrbmVzcyk7XG4jZWxpZiBkZWZpbmVkKFNTX0xJTktS
RUZSQUNUSU9OVE9UUkFOU1BBUkVOQ1kpXG5cbmZsb2F0IG1heENoYW5uZWw9bWF4KG1heChzdXJm
YWNlQWxiZWRvLnIsc3VyZmFjZUFsYmVkby5nKSxzdXJmYWNlQWxiZWRvLmIpO1xudmVjMyB2b2x1
bWVBbGJlZG89c2F0dXJhdGUobWF4Q2hhbm5lbCpzdXJmYWNlQWxiZWRvKTtcblxuZW52aXJvbm1l
bnRSZWZyYWN0aW9uLnJnYio9dm9sdW1lQWxiZWRvO1xuI2Vsc2VcblxudmVjMyB2b2x1bWVBbGJl
ZG89Y29tcHV0ZUNvbG9yQXREaXN0YW5jZUluTWVkaWEodlRpbnRDb2xvci5yZ2IsdlRpbnRDb2xv
ci53KTtcbnJlZnJhY3Rpb25UcmFuc21pdHRhbmNlKj1jb2NhTGFtYmVydCh2b2x1bWVBbGJlZG8s
dlRoaWNrbmVzc1BhcmFtLnkpO1xuI2VuZGlmXG5cbnN1cmZhY2VBbGJlZG8qPSgxLi1yZWZyYWN0
aW9uSW50ZW5zaXR5KTtcbiNpZmRlZiBSRUZMRUNUSU9OXG5cbmVudmlyb25tZW50SXJyYWRpYW5j
ZSo9KDEuLXJlZnJhY3Rpb25JbnRlbnNpdHkpO1xuI2VuZGlmXG5cbnZlYzMgYm91bmNlU3BlY3Vs
YXJFbnZpcm9ubWVudFJlZmxlY3RhbmNlPSgyLjAqc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3Rh
bmNlKS8oMS4wK3NwZWN1bGFyRW52aXJvbm1lbnRSZWZsZWN0YW5jZSk7XG5zcGVjdWxhckVudmly
b25tZW50UmVmbGVjdGFuY2U9bWl4KGJvdW5jZVNwZWN1bGFyRW52aXJvbm1lbnRSZWZsZWN0YW5j
ZSxzcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2UscmVmcmFjdGlvbkludGVuc2l0eSk7XG5c
bnJlZnJhY3Rpb25UcmFuc21pdHRhbmNlKj0xLjAtc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3Rh
bmNlO1xuI2VuZGlmXG5cbiNpZiBkZWZpbmVkKFJFRkxFQ1RJT04pICYmIGRlZmluZWQoU1NfVFJB
TlNMVUNFTkNZKVxuI2lmIGRlZmluZWQoVVNFU1BIRVJJQ0FMSU5WRVJURVgpXG52ZWMzIGlycmFk
aWFuY2VWZWN0b3I9dmVjMyhyZWZsZWN0aW9uTWF0cml4KnZlYzQobm9ybWFsVywwKSkueHl6O1xu
I2lmZGVmIFJFRkxFQ1RJT05NQVBfT1BQT1NJVEVaXG5pcnJhZGlhbmNlVmVjdG9yLnoqPS0xLjA7
XG4jZW5kaWZcbiNlbmRpZlxuI2lmIGRlZmluZWQoVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05N
QVApXG52ZWMzIHJlZnJhY3Rpb25JcnJhZGlhbmNlPWNvbXB1dGVFbnZpcm9ubWVudElycmFkaWFu
Y2UoLWlycmFkaWFuY2VWZWN0b3IpO1xuI2VsaWYgZGVmaW5lZChVU0VJUlJBRElBTkNFTUFQKVxu
dmVjMyByZWZyYWN0aW9uSXJyYWRpYW5jZT1zYW1wbGVSZWZsZWN0aW9uKGlycmFkaWFuY2VTYW1w
bGVyLC1pcnJhZGlhbmNlVmVjdG9yKS5yZ2I7XG4jaWZkZWYgUkdCRFJFRkxFQ1RJT05cbnJlZnJh
Y3Rpb25JcnJhZGlhbmNlLnJnYj1mcm9tUkdCRChyZWZyYWN0aW9uSXJyYWRpYW5jZSk7XG4jZW5k
aWZcbiNpZmRlZiBHQU1NQVJFRkxFQ1RJT05cbnJlZnJhY3Rpb25JcnJhZGlhbmNlLnJnYj10b0xp
bmVhclNwYWNlKHJlZnJhY3Rpb25JcnJhZGlhbmNlLnJnYik7XG4jZW5kaWZcbiNlbHNlXG52ZWMz
IHJlZnJhY3Rpb25JcnJhZGlhbmNlPXZlYzMoMC4pO1xuI2VuZGlmXG5yZWZyYWN0aW9uSXJyYWRp
YW5jZSo9dHJhbnNtaXR0YW5jZTtcbiNlbmRpZlxuXG5cblxuI2lmbmRlZiBNRVRBTExJQ1dPUktG
TE9XXG5zdXJmYWNlQWxiZWRvLnJnYj0oMS4tcmVmbGVjdGFuY2UpKnN1cmZhY2VBbGJlZG8ucmdi
O1xuI2VuZGlmXG5cbiNpZmRlZiBSRUZMRUNUSU9OXG52ZWMzIGZpbmFsSXJyYWRpYW5jZT1lbnZp
cm9ubWVudElycmFkaWFuY2U7XG4jaWYgZGVmaW5lZChTU19UUkFOU0xVQ0VOQ1kpXG5maW5hbEly
cmFkaWFuY2UrPXJlZnJhY3Rpb25JcnJhZGlhbmNlO1xuI2VuZGlmXG5maW5hbElycmFkaWFuY2Uq
PXN1cmZhY2VBbGJlZG8ucmdiO1xuI2VuZGlmXG5cbiNpZmRlZiBTUEVDVUxBUlRFUk1cbnZlYzMg
ZmluYWxTcGVjdWxhcj1zcGVjdWxhckJhc2U7XG5maW5hbFNwZWN1bGFyPW1heChmaW5hbFNwZWN1
bGFyLDAuMCk7XG5cbnZlYzMgZmluYWxTcGVjdWxhclNjYWxlZD1maW5hbFNwZWN1bGFyKnZMaWdo
dGluZ0ludGVuc2l0eS54KnZMaWdodGluZ0ludGVuc2l0eS53O1xuI2lmIGRlZmluZWQoRU5WSVJP
Tk1FTlRCUkRGKSAmJiBkZWZpbmVkKE1TX0JSREZfRU5FUkdZX0NPTlNFUlZBVElPTilcbmZpbmFs
U3BlY3VsYXJTY2FsZWQqPWVuZXJneUNvbnNlcnZhdGlvbkZhY3RvcjtcbiNlbmRpZlxuI2VuZGlm
XG5cbiNpZmRlZiBSRUZMRUNUSU9OXG52ZWMzIGZpbmFsUmFkaWFuY2U9ZW52aXJvbm1lbnRSYWRp
YW5jZS5yZ2I7XG5maW5hbFJhZGlhbmNlKj1zcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2U7
XG5cbnZlYzMgZmluYWxSYWRpYW5jZVNjYWxlZD1maW5hbFJhZGlhbmNlKnZMaWdodGluZ0ludGVu
c2l0eS56O1xuI2lmIGRlZmluZWQoRU5WSVJPTk1FTlRCUkRGKSAmJiBkZWZpbmVkKE1TX0JSREZf
RU5FUkdZX0NPTlNFUlZBVElPTilcbmZpbmFsUmFkaWFuY2VTY2FsZWQqPWVuZXJneUNvbnNlcnZh
dGlvbkZhY3RvcjtcbiNlbmRpZlxuI2VuZGlmXG5cbiNpZmRlZiBTU19SRUZSQUNUSU9OXG52ZWMz
IGZpbmFsUmVmcmFjdGlvbj1lbnZpcm9ubWVudFJlZnJhY3Rpb24ucmdiO1xuZmluYWxSZWZyYWN0
aW9uKj1yZWZyYWN0aW9uVHJhbnNtaXR0YW5jZTtcbiNlbmRpZlxuXG4jaWZkZWYgQ0xFQVJDT0FU
XG52ZWMzIGZpbmFsQ2xlYXJDb2F0PWNsZWFyQ29hdEJhc2U7XG5maW5hbENsZWFyQ29hdD1tYXgo
ZmluYWxDbGVhckNvYXQsMC4wKTtcblxudmVjMyBmaW5hbENsZWFyQ29hdFNjYWxlZD1maW5hbENs
ZWFyQ29hdCp2TGlnaHRpbmdJbnRlbnNpdHkueCp2TGlnaHRpbmdJbnRlbnNpdHkudztcbiNpZiBk
ZWZpbmVkKEVOVklST05NRU5UQlJERikgJiYgZGVmaW5lZChNU19CUkRGX0VORVJHWV9DT05TRVJW
QVRJT04pXG5maW5hbENsZWFyQ29hdFNjYWxlZCo9ZW5lcmd5Q29uc2VydmF0aW9uRmFjdG9yO1xu
I2VuZGlmXG5cbiNpZmRlZiBSRUZMRUNUSU9OXG52ZWMzIGZpbmFsQ2xlYXJDb2F0UmFkaWFuY2U9
ZW52aXJvbm1lbnRDbGVhckNvYXRSYWRpYW5jZS5yZ2I7XG5maW5hbENsZWFyQ29hdFJhZGlhbmNl
Kj1jbGVhckNvYXRFbnZpcm9ubWVudFJlZmxlY3RhbmNlO1xuXG52ZWMzIGZpbmFsQ2xlYXJDb2F0
UmFkaWFuY2VTY2FsZWQ9ZmluYWxDbGVhckNvYXRSYWRpYW5jZSp2TGlnaHRpbmdJbnRlbnNpdHku
ejtcbiNlbmRpZlxuI2lmZGVmIFNTX1JFRlJBQ1RJT05cbmZpbmFsUmVmcmFjdGlvbio9KGNvbnNl
cnZhdGlvbkZhY3Rvcipjb25zZXJ2YXRpb25GYWN0b3IpO1xuI2lmZGVmIENMRUFSQ09BVF9USU5U
XG5maW5hbFJlZnJhY3Rpb24qPWFic29ycHRpb247XG4jZW5kaWZcbiNlbmRpZlxuI2VuZGlmXG5c
biNpZmRlZiBTSEVFTlxudmVjMyBmaW5hbFNoZWVuPXNoZWVuQmFzZSpzaGVlbkNvbG9yO1xuZmlu
YWxTaGVlbj1tYXgoZmluYWxTaGVlbiwwLjApO1xudmVjMyBmaW5hbFNoZWVuU2NhbGVkPWZpbmFs
U2hlZW4qdkxpZ2h0aW5nSW50ZW5zaXR5LngqdkxpZ2h0aW5nSW50ZW5zaXR5Lnc7XG5cblxuXG5c
blxuI2lmZGVmIFJFRkxFQ1RJT05cbnZlYzMgZmluYWxTaGVlblJhZGlhbmNlPWVudmlyb25tZW50
U2hlZW5SYWRpYW5jZS5yZ2I7XG5maW5hbFNoZWVuUmFkaWFuY2UqPXNoZWVuRW52aXJvbm1lbnRS
ZWZsZWN0YW5jZTtcblxudmVjMyBmaW5hbFNoZWVuUmFkaWFuY2VTY2FsZWQ9ZmluYWxTaGVlblJh
ZGlhbmNlKnZMaWdodGluZ0ludGVuc2l0eS56O1xuI2VuZGlmXG4jZW5kaWZcblxuI2lmZGVmIEFM
UEhBQkxFTkRcbmZsb2F0IGx1bWluYW5jZU92ZXJBbHBoYT0wLjA7XG4jaWYgZGVmaW5lZChSRUZM
RUNUSU9OKSAmJiBkZWZpbmVkKFJBRElBTkNFT1ZFUkFMUEhBKVxubHVtaW5hbmNlT3ZlckFscGhh
Kz1nZXRMdW1pbmFuY2UoZmluYWxSYWRpYW5jZVNjYWxlZCk7XG4jaWYgZGVmaW5lZChDTEVBUkNP
QVQpXG5sdW1pbmFuY2VPdmVyQWxwaGErPWdldEx1bWluYW5jZShmaW5hbENsZWFyQ29hdFJhZGlh
bmNlU2NhbGVkKTtcbiNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZChTUEVDVUxBUlRFUk0pICYm
IGRlZmluZWQoU1BFQ1VMQVJPVkVSQUxQSEEpXG5sdW1pbmFuY2VPdmVyQWxwaGErPWdldEx1bWlu
YW5jZShmaW5hbFNwZWN1bGFyU2NhbGVkKTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoQ0xFQVJDT0FU
KSAmJiBkZWZpbmVkKENMRUFSQ09BVE9WRVJBTFBIQSlcbmx1bWluYW5jZU92ZXJBbHBoYSs9Z2V0
THVtaW5hbmNlKGZpbmFsQ2xlYXJDb2F0U2NhbGVkKTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoUkFE
SUFOQ0VPVkVSQUxQSEEpIHx8IGRlZmluZWQoU1BFQ1VMQVJPVkVSQUxQSEEpXG5hbHBoYT1zYXR1
cmF0ZShhbHBoYStsdW1pbmFuY2VPdmVyQWxwaGEqbHVtaW5hbmNlT3ZlckFscGhhKTtcbiNlbmRp
ZlxuI2VuZGlmXG4jZW5kaWZcblxuXG52ZWMzIGZpbmFsRGlmZnVzZT1kaWZmdXNlQmFzZTtcbmZp
bmFsRGlmZnVzZSo9c3VyZmFjZUFsYmVkby5yZ2I7XG5maW5hbERpZmZ1c2U9bWF4KGZpbmFsRGlm
ZnVzZSwwLjApO1xuXG52ZWMzIGZpbmFsQW1iaWVudD12QW1iaWVudENvbG9yO1xuZmluYWxBbWJp
ZW50Kj1zdXJmYWNlQWxiZWRvLnJnYjtcblxudmVjMyBmaW5hbEVtaXNzaXZlPXZFbWlzc2l2ZUNv
bG9yO1xuI2lmZGVmIEVNSVNTSVZFXG52ZWMzIGVtaXNzaXZlQ29sb3JUZXg9dGV4dHVyZTJEKGVt
aXNzaXZlU2FtcGxlcix2RW1pc3NpdmVVVit1dk9mZnNldCkucmdiO1xuZmluYWxFbWlzc2l2ZSo9
dG9MaW5lYXJTcGFjZShlbWlzc2l2ZUNvbG9yVGV4LnJnYik7XG5maW5hbEVtaXNzaXZlKj12RW1p
c3NpdmVJbmZvcy55O1xuI2VuZGlmXG5cbiNpZmRlZiBBTUJJRU5UXG52ZWMzIGFtYmllbnRPY2Ns
dXNpb25Gb3JEaXJlY3REaWZmdXNlPW1peCh2ZWMzKDEuKSxhbWJpZW50T2NjbHVzaW9uQ29sb3Is
dkFtYmllbnRJbmZvcy53KTtcbiNlbHNlXG52ZWMzIGFtYmllbnRPY2NsdXNpb25Gb3JEaXJlY3RE
aWZmdXNlPWFtYmllbnRPY2NsdXNpb25Db2xvcjtcbiNlbmRpZlxuXG5cblxudmVjNCBmaW5hbENv
bG9yPXZlYzQoXG5maW5hbEFtYmllbnQqYW1iaWVudE9jY2x1c2lvbkNvbG9yICtcbmZpbmFsRGlm
ZnVzZSphbWJpZW50T2NjbHVzaW9uRm9yRGlyZWN0RGlmZnVzZSp2TGlnaHRpbmdJbnRlbnNpdHku
eCArXG4jaWZuZGVmIFVOTElUXG4jaWZkZWYgUkVGTEVDVElPTlxuZmluYWxJcnJhZGlhbmNlKmFt
YmllbnRPY2NsdXNpb25Db2xvcip2TGlnaHRpbmdJbnRlbnNpdHkueiArXG4jZW5kaWZcbiNpZmRl
ZiBTUEVDVUxBUlRFUk1cblxuXG5maW5hbFNwZWN1bGFyU2NhbGVkICtcbiNlbmRpZlxuI2lmZGVm
IENMRUFSQ09BVFxuXG5cbmZpbmFsQ2xlYXJDb2F0U2NhbGVkICtcbiNlbmRpZlxuI2lmZGVmIFNI
RUVOXG5cblxuZmluYWxTaGVlblNjYWxlZCArXG4jZW5kaWZcbiNpZmRlZiBSRUZMRUNUSU9OXG5c
blxuZmluYWxSYWRpYW5jZVNjYWxlZCArXG4jaWZkZWYgQ0xFQVJDT0FUXG5cblxuZmluYWxDbGVh
ckNvYXRSYWRpYW5jZVNjYWxlZCArXG4jZW5kaWZcbiNpZmRlZiBTSEVFTlxuXG5cbmZpbmFsU2hl
ZW5SYWRpYW5jZVNjYWxlZCArXG4jZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFNTX1JFRlJBQ1RJT05c
bmZpbmFsUmVmcmFjdGlvbip2TGlnaHRpbmdJbnRlbnNpdHkueiArXG4jZW5kaWZcbiNlbmRpZlxu
ZmluYWxFbWlzc2l2ZSp2TGlnaHRpbmdJbnRlbnNpdHkueSxcbmFscGhhKTtcblxuI2lmZGVmIExJ
R0hUTUFQXG4jaWZuZGVmIExJR0hUTUFQRVhDTFVERURcbiNpZmRlZiBVU0VMSUdIVE1BUEFTU0hB
RE9XTUFQXG5maW5hbENvbG9yLnJnYio9bGlnaHRtYXBDb2xvci5yZ2I7XG4jZWxzZVxuZmluYWxD
b2xvci5yZ2IrPWxpZ2h0bWFwQ29sb3IucmdiO1xuI2VuZGlmXG4jZW5kaWZcbiNlbmRpZlxuI2Rl
ZmluZSBDVVNUT01fRlJBR01FTlRfQkVGT1JFX0ZPR1xuXG5maW5hbENvbG9yPW1heChmaW5hbENv
bG9yLDAuMCk7XG4jaW5jbHVkZTxsb2dEZXB0aEZyYWdtZW50PlxuI2luY2x1ZGU8Zm9nRnJhZ21l
bnQ+KGNvbG9yLGZpbmFsQ29sb3IpXG4jaWZkZWYgSU1BR0VQUk9DRVNTSU5HUE9TVFBST0NFU1Nc
blxuXG5maW5hbENvbG9yLnJnYj1jbGFtcChmaW5hbENvbG9yLnJnYiwwLiwzMC4wKTtcbiNlbHNl
XG5cbmZpbmFsQ29sb3I9YXBwbHlJbWFnZVByb2Nlc3NpbmcoZmluYWxDb2xvcik7XG4jZW5kaWZc
bmZpbmFsQ29sb3IuYSo9dmlzaWJpbGl0eTtcbiNpZmRlZiBQUkVNVUxUSVBMWUFMUEhBXG5cbmZp
bmFsQ29sb3IucmdiKj1maW5hbENvbG9yLmE7XG4jZW5kaWZcbiNkZWZpbmUgQ1VTVE9NX0ZSQUdN
RU5UX0JFRk9SRV9GUkFHQ09MT1JcbmdsX0ZyYWdDb2xvcj1maW5hbENvbG9yO1xuI2luY2x1ZGU8
cGJyRGVidWc+XG59XG4iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRk
ZW4gKi8KK3ZhciBwYnJQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIg
fTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9wYnIudmVydGV4LnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvcGJy
LnZlcnRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoh
IGV4cG9ydHMgcHJvdmlkZWQ6IHBiclZlcnRleFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJwYnJWZXJ0ZXhTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHBi
clZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19l
ZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9wYnJWZXJ0ZXhEZWNsYXJhdGlv
bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9TaGFkZXJzSW5jbHVkZS9wYnJWZXJ0ZXhEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRl
cnNJbmNsdWRlL3BiclZlcnRleERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BiclVib0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL3Bi
clVib0RlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvcGJyVWJvRGVjbGFy
YXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVs
cGVyRnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucy50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzSW5jbHVkZV9ib25lc0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2Jv
bmVzRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc0RlY2xhcmF0
aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2hhcm1v
bmljc0Z1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9oYXJtb25pY3NGdW5jdGlvbnMgKi8gIi4vU2hh
ZGVycy9TaGFkZXJzSW5jbHVkZS9oYXJtb25pY3NGdW5jdGlvbnMudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfYnVtcFZlcnRleERlY2xhcmF0aW9uX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRl
cnNJbmNsdWRlL2J1bXBWZXJ0ZXhEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL2J1bXBWZXJ0ZXhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9jbGlwUGxhbmVWZXJ0ZXhEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRl
L2NsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX1NoYWRlcnNJbmNsdWRlX2ZvZ1ZlcnRleERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2Zv
Z1ZlcnRleERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvZm9nVmVydGV4
RGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1
ZGVfbGlnaHRGcmFnbWVudERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2xpZ2h0RnJhZ21lbnRE
ZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2xpZ2h0RnJhZ21lbnREZWNs
YXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9s
aWdodFVib0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9saWdodFVib0RlY2xhcmF0aW9uICov
ICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbGlnaHRVYm9EZWNsYXJhdGlvbi50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhH
bG9iYWxEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFs
RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0
ZXhHbG9iYWxEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUv
bW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVk
ZS9tb3JwaFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0aERlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVk
ZS9sb2dEZXB0aERlY2xhcmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbG9nRGVw
dGhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5j
bHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRl
eCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleC50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9pbnN0YW5jZXNWZXJ0ZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc1ZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL2luc3RhbmNlc1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFk
ZXJzSW5jbHVkZV9ib25lc1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYm9uZXNWZXJ0ZXggKi8gIi4v
U2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9idW1wVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9idW1w
VmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvYnVtcFZlcnRleC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9jbGlwUGxhbmVWZXJ0ZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1No
YWRlcnNJbmNsdWRlL2NsaXBQbGFuZVZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRl
L2NsaXBQbGFuZVZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJz
SW5jbHVkZV9mb2dWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2ZvZ1ZlcnRleCAqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL2ZvZ1ZlcnRleC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9TaGFkZXJzSW5jbHVkZV9zaGFkb3dzVmVydGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9zaGFkb3dzVmVy
dGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvc2hhZG93c1ZlcnRleC50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9sb2dEZXB0aFZlcnRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hh
ZGVyc0luY2x1ZGUvbG9nRGVwdGhWZXJ0ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9s
b2dEZXB0aFZlcnRleC50cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCit2YXIgbmFtZSA9ICdwYnJWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJwcmVj
aXNpb24gaGlnaHAgZmxvYXQ7XG4jaW5jbHVkZTxfX2RlY2xfX3BiclZlcnRleD5cbiNkZWZpbmUg
Q1VTVE9NX1ZFUlRFWF9CRUdJTlxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxuI2lmZGVm
IE5PUk1BTFxuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xuI2VuZGlmXG4jaWZkZWYgVEFOR0VOVFxu
YXR0cmlidXRlIHZlYzQgdGFuZ2VudDtcbiNlbmRpZlxuI2lmZGVmIFVWMVxuYXR0cmlidXRlIHZl
YzIgdXY7XG4jZW5kaWZcbiNpZmRlZiBVVjJcbmF0dHJpYnV0ZSB2ZWMyIHV2MjtcbiNlbmRpZlxu
I2lmZGVmIFZFUlRFWENPTE9SXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbiNlbmRpZlxuI2lmZGVm
IElOU1RBTkNFU1xuYXR0cmlidXRlIHZlYzQgd29ybGQwO1xuYXR0cmlidXRlIHZlYzQgd29ybGQx
O1xuYXR0cmlidXRlIHZlYzQgd29ybGQyO1xuYXR0cmlidXRlIHZlYzQgd29ybGQzO1xuI2VuZGlm
XG4jaW5jbHVkZTxoZWxwZXJGdW5jdGlvbnM+XG4jaW5jbHVkZTxib25lc0RlY2xhcmF0aW9uPlxu
XG52YXJ5aW5nIHZlYzMgdlBvc2l0aW9uVztcbiNpZmRlZiBOT1JNQUxcbnZhcnlpbmcgdmVjMyB2
Tm9ybWFsVztcbiNpZiBkZWZpbmVkKFVTRVNQSEVSSUNBTEZST01SRUZMRUNUSU9OTUFQKSAmJiBk
ZWZpbmVkKFVTRVNQSEVSSUNBTElOVkVSVEVYKVxudmFyeWluZyB2ZWMzIHZFbnZpcm9ubWVudEly
cmFkaWFuY2U7XG4jaW5jbHVkZTxoYXJtb25pY3NGdW5jdGlvbnM+XG4jZW5kaWZcbiNlbmRpZlxu
I2lmZGVmIFZFUlRFWENPTE9SXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuI2VuZGlmXG4jaWZkZWYg
UkVGTEVDVElPTk1BUF9TS1lCT1hcbnZhcnlpbmcgdmVjMyB2UG9zaXRpb25VVlc7XG4jZW5kaWZc
biNpZiBERUJVR01PREU+MFxudmFyeWluZyB2ZWM0IHZDbGlwU3BhY2VQb3NpdGlvbjtcbiNlbmRp
ZlxuI2lmZGVmIE1BSU5VVjFcbnZhcnlpbmcgdmVjMiB2TWFpblVWMTtcbiNlbmRpZlxuI2lmZGVm
IE1BSU5VVjJcbnZhcnlpbmcgdmVjMiB2TWFpblVWMjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoQUxC
RURPKSAmJiBBTEJFRE9ESVJFQ1RVViA9PSAwXG52YXJ5aW5nIHZlYzIgdkFsYmVkb1VWO1xuI2Vu
ZGlmXG4jaWYgZGVmaW5lZChBTUJJRU5UKSAmJiBBTUJJRU5URElSRUNUVVYgPT0gMFxudmFyeWlu
ZyB2ZWMyIHZBbWJpZW50VVY7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKE9QQUNJVFkpICYmIE9QQUNJ
VFlESVJFQ1RVViA9PSAwXG52YXJ5aW5nIHZlYzIgdk9wYWNpdHlVVjtcbiNlbmRpZlxuI2lmIGRl
ZmluZWQoRU1JU1NJVkUpICYmIEVNSVNTSVZFRElSRUNUVVYgPT0gMFxudmFyeWluZyB2ZWMyIHZF
bWlzc2l2ZVVWO1xuI2VuZGlmXG4jaWYgZGVmaW5lZChMSUdIVE1BUCkgJiYgTElHSFRNQVBESVJF
Q1RVViA9PSAwXG52YXJ5aW5nIHZlYzIgdkxpZ2h0bWFwVVY7XG4jZW5kaWZcbiNpZiBkZWZpbmVk
KFJFRkxFQ1RJVklUWSkgJiYgUkVGTEVDVElWSVRZRElSRUNUVVYgPT0gMFxudmFyeWluZyB2ZWMy
IHZSZWZsZWN0aXZpdHlVVjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoTUlDUk9TVVJGQUNFTUFQKSAm
JiBNSUNST1NVUkZBQ0VNQVBESVJFQ1RVViA9PSAwXG52YXJ5aW5nIHZlYzIgdk1pY3JvU3VyZmFj
ZVNhbXBsZXJVVjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoQlVNUCkgJiYgQlVNUERJUkVDVFVWID09
IDBcbnZhcnlpbmcgdmVjMiB2QnVtcFVWO1xuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG4jaWYg
ZGVmaW5lZChDTEVBUkNPQVRfVEVYVFVSRSkgJiYgQ0xFQVJDT0FUX1RFWFRVUkVESVJFQ1RVViA9
PSAwXG52YXJ5aW5nIHZlYzIgdkNsZWFyQ29hdFVWO1xuI2VuZGlmXG4jaWYgZGVmaW5lZChDTEVB
UkNPQVRfQlVNUCkgJiYgQ0xFQVJDT0FUX0JVTVBESVJFQ1RVViA9PSAwXG52YXJ5aW5nIHZlYzIg
dkNsZWFyQ29hdEJ1bXBVVjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoQ0xFQVJDT0FUX1RJTlRfVEVY
VFVSRSkgJiYgQ0xFQVJDT0FUX1RJTlRfVEVYVFVSRURJUkVDVFVWID09IDBcbnZhcnlpbmcgdmVj
MiB2Q2xlYXJDb2F0VGludFVWO1xuI2VuZGlmXG4jZW5kaWZcbiNpZmRlZiBTSEVFTlxuI2lmIGRl
ZmluZWQoU0hFRU5fVEVYVFVSRSkgJiYgU0hFRU5fVEVYVFVSRURJUkVDVFVWID09IDBcbnZhcnlp
bmcgdmVjMiB2U2hlZW5VVjtcbiNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgQU5JU09UUk9QSUNcbiNp
ZiBkZWZpbmVkKEFOSVNPVFJPUElDX1RFWFRVUkUpICYmIEFOSVNPVFJPUElDX1RFWFRVUkVESVJF
Q1RVViA9PSAwXG52YXJ5aW5nIHZlYzIgdkFuaXNvdHJvcHlVVjtcbiNlbmRpZlxuI2VuZGlmXG4j
aWZkZWYgU1VCU1VSRkFDRVxuI2lmIGRlZmluZWQoU1NfVEhJQ0tORVNTQU5ETUFTS19URVhUVVJF
KSAmJiBTU19USElDS05FU1NBTkRNQVNLX1RFWFRVUkVESVJFQ1RVViA9PSAwXG52YXJ5aW5nIHZl
YzIgdlRoaWNrbmVzc1VWO1xuI2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlPGJ1bXBWZXJ0ZXhEZWNs
YXJhdGlvbj5cbiNpbmNsdWRlPGNsaXBQbGFuZVZlcnRleERlY2xhcmF0aW9uPlxuI2luY2x1ZGU8
Zm9nVmVydGV4RGVjbGFyYXRpb24+XG4jaW5jbHVkZTxfX2RlY2xfX2xpZ2h0RnJhZ21lbnQ+WzAu
Lm1heFNpbXVsdGFuZW91c0xpZ2h0c11cbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleEdsb2Jh
bERlY2xhcmF0aW9uPlxuI2luY2x1ZGU8bW9ycGhUYXJnZXRzVmVydGV4RGVjbGFyYXRpb24+WzAu
Lm1heFNpbXVsdGFuZW91c01vcnBoVGFyZ2V0c11cbiNpbmNsdWRlPGxvZ0RlcHRoRGVjbGFyYXRp
b24+XG4jZGVmaW5lIENVU1RPTV9WRVJURVhfREVGSU5JVElPTlNcbnZvaWQgbWFpbih2b2lkKSB7
XG4jZGVmaW5lIENVU1RPTV9WRVJURVhfTUFJTl9CRUdJTlxudmVjMyBwb3NpdGlvblVwZGF0ZWQ9
cG9zaXRpb247XG4jaWZkZWYgTk9STUFMXG52ZWMzIG5vcm1hbFVwZGF0ZWQ9bm9ybWFsO1xuI2Vu
ZGlmXG4jaWZkZWYgVEFOR0VOVFxudmVjNCB0YW5nZW50VXBkYXRlZD10YW5nZW50O1xuI2VuZGlm
XG4jaWZkZWYgVVYxXG52ZWMyIHV2VXBkYXRlZD11djtcbiNlbmRpZlxuI2luY2x1ZGU8bW9ycGhU
YXJnZXRzVmVydGV4PlswLi5tYXhTaW11bHRhbmVvdXNNb3JwaFRhcmdldHNdXG4jaWZkZWYgUkVG
TEVDVElPTk1BUF9TS1lCT1hcbiNpZmRlZiBSRUZMRUNUSU9OTUFQX1NLWUJPWF9UUkFOU0ZPUk1F
RFxudlBvc2l0aW9uVVZXPShyZWZsZWN0aW9uTWF0cml4KnZlYzQocG9zaXRpb25VcGRhdGVkLDEu
MCkpLnh5ejtcbiNlbHNlXG52UG9zaXRpb25VVlc9cG9zaXRpb25VcGRhdGVkO1xuI2VuZGlmXG4j
ZW5kaWZcbiNkZWZpbmUgQ1VTVE9NX1ZFUlRFWF9VUERBVEVfUE9TSVRJT05cbiNkZWZpbmUgQ1VT
VE9NX1ZFUlRFWF9VUERBVEVfTk9STUFMXG4jaW5jbHVkZTxpbnN0YW5jZXNWZXJ0ZXg+XG4jaW5j
bHVkZTxib25lc1ZlcnRleD5cbiNpZmRlZiBNVUxUSVZJRVdcbmlmIChnbF9WaWV3SURfT1ZSID09
IDB1KSB7XG5nbF9Qb3NpdGlvbj12aWV3UHJvamVjdGlvbipmaW5hbFdvcmxkKnZlYzQocG9zaXRp
b25VcGRhdGVkLDEuMCk7XG59IGVsc2Uge1xuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb25SKmZp
bmFsV29ybGQqdmVjNChwb3NpdGlvblVwZGF0ZWQsMS4wKTtcbn1cbiNlbHNlXG5nbF9Qb3NpdGlv
bj12aWV3UHJvamVjdGlvbipmaW5hbFdvcmxkKnZlYzQocG9zaXRpb25VcGRhdGVkLDEuMCk7XG4j
ZW5kaWZcbiNpZiBERUJVR01PREU+MFxudkNsaXBTcGFjZVBvc2l0aW9uPWdsX1Bvc2l0aW9uO1xu
I2VuZGlmXG52ZWM0IHdvcmxkUG9zPWZpbmFsV29ybGQqdmVjNChwb3NpdGlvblVwZGF0ZWQsMS4w
KTtcbnZQb3NpdGlvblc9dmVjMyh3b3JsZFBvcyk7XG4jaWZkZWYgTk9STUFMXG5tYXQzIG5vcm1h
bFdvcmxkPW1hdDMoZmluYWxXb3JsZCk7XG4jaWZkZWYgTk9OVU5JRk9STVNDQUxJTkdcbm5vcm1h
bFdvcmxkPXRyYW5zcG9zZU1hdDMoaW52ZXJzZU1hdDMobm9ybWFsV29ybGQpKTtcbiNlbmRpZlxu
dk5vcm1hbFc9bm9ybWFsaXplKG5vcm1hbFdvcmxkKm5vcm1hbFVwZGF0ZWQpO1xuI2lmIGRlZmlu
ZWQoVVNFU1BIRVJJQ0FMRlJPTVJFRkxFQ1RJT05NQVApICYmIGRlZmluZWQoVVNFU1BIRVJJQ0FM
SU5WRVJURVgpXG52ZWMzIHJlZmxlY3Rpb25WZWN0b3I9dmVjMyhyZWZsZWN0aW9uTWF0cml4KnZl
YzQodk5vcm1hbFcsMCkpLnh5ejtcbiNpZmRlZiBSRUZMRUNUSU9OTUFQX09QUE9TSVRFWlxucmVm
bGVjdGlvblZlY3Rvci56Kj0tMS4wO1xuI2VuZGlmXG52RW52aXJvbm1lbnRJcnJhZGlhbmNlPWNv
bXB1dGVFbnZpcm9ubWVudElycmFkaWFuY2UocmVmbGVjdGlvblZlY3Rvcik7XG4jZW5kaWZcbiNl
bmRpZlxuI2lmIGRlZmluZWQoUkVGTEVDVElPTk1BUF9FUVVJUkVDVEFOR1VMQVJfRklYRUQpIHx8
IGRlZmluZWQoUkVGTEVDVElPTk1BUF9NSVJST1JFREVRVUlSRUNUQU5HVUxBUl9GSVhFRClcbnZE
aXJlY3Rpb25XPW5vcm1hbGl6ZSh2ZWMzKGZpbmFsV29ybGQqdmVjNChwb3NpdGlvblVwZGF0ZWQs
MC4wKSkpO1xuI2VuZGlmXG5cbiNpZm5kZWYgVVYxXG52ZWMyIHV2VXBkYXRlZD12ZWMyKDAuLDAu
KTtcbiNlbmRpZlxuI2lmbmRlZiBVVjJcbnZlYzIgdXYyPXZlYzIoMC4sMC4pO1xuI2VuZGlmXG4j
aWZkZWYgTUFJTlVWMVxudk1haW5VVjE9dXZVcGRhdGVkO1xuI2VuZGlmXG4jaWZkZWYgTUFJTlVW
Mlxudk1haW5VVjI9dXYyO1xuI2VuZGlmXG4jaWYgZGVmaW5lZChBTEJFRE8pICYmIEFMQkVET0RJ
UkVDVFVWID09IDBcbmlmICh2QWxiZWRvSW5mb3MueCA9PSAwLilcbntcbnZBbGJlZG9VVj12ZWMy
KGFsYmVkb01hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52QWxi
ZWRvVVY9dmVjMihhbGJlZG9NYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2VuZGlmXG4j
aWYgZGVmaW5lZChBTUJJRU5UKSAmJiBBTUJJRU5URElSRUNUVVYgPT0gMFxuaWYgKHZBbWJpZW50
SW5mb3MueCA9PSAwLilcbntcbnZBbWJpZW50VVY9dmVjMihhbWJpZW50TWF0cml4KnZlYzQodXZV
cGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZBbWJpZW50VVY9dmVjMihhbWJpZW50TWF0
cml4KnZlYzQodXYyLDEuMCwwLjApKTtcbn1cbiNlbmRpZlxuI2lmIGRlZmluZWQoT1BBQ0lUWSkg
JiYgT1BBQ0lUWURJUkVDVFVWID09IDBcbmlmICh2T3BhY2l0eUluZm9zLnggPT0gMC4pXG57XG52
T3BhY2l0eVVWPXZlYzIob3BhY2l0eU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59
XG5lbHNlXG57XG52T3BhY2l0eVVWPXZlYzIob3BhY2l0eU1hdHJpeCp2ZWM0KHV2MiwxLjAsMC4w
KSk7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKEVNSVNTSVZFKSAmJiBFTUlTU0lWRURJUkVDVFVW
ID09IDBcbmlmICh2RW1pc3NpdmVJbmZvcy54ID09IDAuKVxue1xudkVtaXNzaXZlVVY9dmVjMihl
bWlzc2l2ZU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52RW1p
c3NpdmVVVj12ZWMyKGVtaXNzaXZlTWF0cml4KnZlYzQodXYyLDEuMCwwLjApKTtcbn1cbiNlbmRp
ZlxuI2lmIGRlZmluZWQoTElHSFRNQVApICYmIExJR0hUTUFQRElSRUNUVVYgPT0gMFxuaWYgKHZM
aWdodG1hcEluZm9zLnggPT0gMC4pXG57XG52TGlnaHRtYXBVVj12ZWMyKGxpZ2h0bWFwTWF0cml4
KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZMaWdodG1hcFVWPXZlYzIo
bGlnaHRtYXBNYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2VuZGlmXG4jaWYgZGVmaW5l
ZChSRUZMRUNUSVZJVFkpICYmIFJFRkxFQ1RJVklUWURJUkVDVFVWID09IDBcbmlmICh2UmVmbGVj
dGl2aXR5SW5mb3MueCA9PSAwLilcbntcbnZSZWZsZWN0aXZpdHlVVj12ZWMyKHJlZmxlY3Rpdml0
eU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52UmVmbGVjdGl2
aXR5VVY9dmVjMihyZWZsZWN0aXZpdHlNYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2Vu
ZGlmXG4jaWYgZGVmaW5lZChNSUNST1NVUkZBQ0VNQVApICYmIE1JQ1JPU1VSRkFDRU1BUERJUkVD
VFVWID09IDBcbmlmICh2TWljcm9TdXJmYWNlU2FtcGxlckluZm9zLnggPT0gMC4pXG57XG52TWlj
cm9TdXJmYWNlU2FtcGxlclVWPXZlYzIobWljcm9TdXJmYWNlU2FtcGxlck1hdHJpeCp2ZWM0KHV2
VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52TWljcm9TdXJmYWNlU2FtcGxlclVWPXZl
YzIobWljcm9TdXJmYWNlU2FtcGxlck1hdHJpeCp2ZWM0KHV2MiwxLjAsMC4wKSk7XG59XG4jZW5k
aWZcbiNpZiBkZWZpbmVkKEJVTVApICYmIEJVTVBESVJFQ1RVViA9PSAwXG5pZiAodkJ1bXBJbmZv
cy54ID09IDAuKVxue1xudkJ1bXBVVj12ZWMyKGJ1bXBNYXRyaXgqdmVjNCh1dlVwZGF0ZWQsMS4w
LDAuMCkpO1xufVxuZWxzZVxue1xudkJ1bXBVVj12ZWMyKGJ1bXBNYXRyaXgqdmVjNCh1djIsMS4w
LDAuMCkpO1xufVxuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG4jaWYgZGVmaW5lZChDTEVBUkNP
QVRfVEVYVFVSRSkgJiYgQ0xFQVJDT0FUX1RFWFRVUkVESVJFQ1RVViA9PSAwXG5pZiAodkNsZWFy
Q29hdEluZm9zLnggPT0gMC4pXG57XG52Q2xlYXJDb2F0VVY9dmVjMihjbGVhckNvYXRNYXRyaXgq
dmVjNCh1dlVwZGF0ZWQsMS4wLDAuMCkpO1xufVxuZWxzZVxue1xudkNsZWFyQ29hdFVWPXZlYzIo
Y2xlYXJDb2F0TWF0cml4KnZlYzQodXYyLDEuMCwwLjApKTtcbn1cbiNlbmRpZlxuI2lmIGRlZmlu
ZWQoQ0xFQVJDT0FUX0JVTVApICYmIENMRUFSQ09BVF9CVU1QRElSRUNUVVYgPT0gMFxuaWYgKHZD
bGVhckNvYXRCdW1wSW5mb3MueCA9PSAwLilcbntcbnZDbGVhckNvYXRCdW1wVVY9dmVjMihjbGVh
ckNvYXRCdW1wTWF0cml4KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZD
bGVhckNvYXRCdW1wVVY9dmVjMihjbGVhckNvYXRCdW1wTWF0cml4KnZlYzQodXYyLDEuMCwwLjAp
KTtcbn1cbiNlbmRpZlxuI2lmIGRlZmluZWQoQ0xFQVJDT0FUX1RJTlRfVEVYVFVSRSkgJiYgQ0xF
QVJDT0FUX1RJTlRfVEVYVFVSRURJUkVDVFVWID09IDBcbmlmICh2Q2xlYXJDb2F0VGludEluZm9z
LnggPT0gMC4pXG57XG52Q2xlYXJDb2F0VGludFVWPXZlYzIoY2xlYXJDb2F0VGludE1hdHJpeCp2
ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52Q2xlYXJDb2F0VGludFVWPXZl
YzIoY2xlYXJDb2F0VGludE1hdHJpeCp2ZWM0KHV2MiwxLjAsMC4wKSk7XG59XG4jZW5kaWZcbiNl
bmRpZlxuI2lmZGVmIFNIRUVOXG4jaWYgZGVmaW5lZChTSEVFTl9URVhUVVJFKSAmJiBTSEVFTl9U
RVhUVVJFRElSRUNUVVYgPT0gMFxuaWYgKHZTaGVlbkluZm9zLnggPT0gMC4pXG57XG52U2hlZW5V
Vj12ZWMyKHNoZWVuTWF0cml4KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2Vcbntc
bnZTaGVlblVWPXZlYzIoc2hlZW5NYXRyaXgqdmVjNCh1djIsMS4wLDAuMCkpO1xufVxuI2VuZGlm
XG4jZW5kaWZcbiNpZmRlZiBBTklTT1RST1BJQ1xuI2lmIGRlZmluZWQoQU5JU09UUk9QSUNfVEVY
VFVSRSkgJiYgQU5JU09UUk9QSUNfVEVYVFVSRURJUkVDVFVWID09IDBcbmlmICh2QW5pc290cm9w
eUluZm9zLnggPT0gMC4pXG57XG52QW5pc290cm9weVVWPXZlYzIoYW5pc290cm9weU1hdHJpeCp2
ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG59XG5lbHNlXG57XG52QW5pc290cm9weVVWPXZlYzIo
YW5pc290cm9weU1hdHJpeCp2ZWM0KHV2MiwxLjAsMC4wKSk7XG59XG4jZW5kaWZcbiNlbmRpZlxu
I2lmZGVmIFNVQlNVUkZBQ0VcbiNpZiBkZWZpbmVkKFNTX1RISUNLTkVTU0FORE1BU0tfVEVYVFVS
RSkgJiYgU1NfVEhJQ0tORVNTQU5ETUFTS19URVhUVVJFRElSRUNUVVYgPT0gMFxuaWYgKHZUaGlj
a25lc3NJbmZvcy54ID09IDAuKVxue1xudlRoaWNrbmVzc1VWPXZlYzIodGhpY2tuZXNzTWF0cml4
KnZlYzQodXZVcGRhdGVkLDEuMCwwLjApKTtcbn1cbmVsc2VcbntcbnZUaGlja25lc3NVVj12ZWMy
KHRoaWNrbmVzc01hdHJpeCp2ZWM0KHV2MiwxLjAsMC4wKSk7XG59XG4jZW5kaWZcbiNlbmRpZlxu
XG4jaW5jbHVkZTxidW1wVmVydGV4PlxuXG4jaW5jbHVkZTxjbGlwUGxhbmVWZXJ0ZXg+XG5cbiNp
bmNsdWRlPGZvZ1ZlcnRleD5cblxuI2luY2x1ZGU8c2hhZG93c1ZlcnRleD5bMC4ubWF4U2ltdWx0
YW5lb3VzTGlnaHRzXVxuXG4jaWZkZWYgVkVSVEVYQ09MT1JcbnZDb2xvcj1jb2xvcjtcbiNlbmRp
ZlxuXG4jaWZkZWYgUE9JTlRTSVpFXG5nbF9Qb2ludFNpemU9cG9pbnRTaXplO1xuI2VuZGlmXG5c
biNpbmNsdWRlPGxvZ0RlcHRoVmVydGV4PlxuI2RlZmluZSBDVVNUT01fVkVSVEVYX01BSU5fRU5E
XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVm
ZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIg
cGJyVmVydGV4U2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8q
KiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL3Bvc3Rwcm9jZXNzLnZlcnRleC50cyI6CisvKiEq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRl
cnMvcG9zdHByb2Nlc3MudmVydGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBwb3N0cHJvY2Vzc1ZlcnRl
eFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJwb3N0cHJvY2Vz
c1ZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcG9zdHByb2Nlc3NWZXJ0ZXhTaGFk
ZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRl
cmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAn
cG9zdHByb2Nlc3NWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbmF0dHJpYnV0ZSB2ZWMy
IHBvc2l0aW9uO1xudW5pZm9ybSB2ZWMyIHNjYWxlO1xuXG52YXJ5aW5nIHZlYzIgdlVWO1xuY29u
c3QgdmVjMiBtYWRkPXZlYzIoMC41LDAuNSk7XG52b2lkIG1haW4odm9pZCkge1xudlVWPShwb3Np
dGlvbiptYWRkK21hZGQpKnNjYWxlO1xuZ2xfUG9zaXRpb249dmVjNChwb3NpdGlvbiwwLjAsMS4w
KTtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
RWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3Zh
ciBwb3N0cHJvY2Vzc1ZlcnRleFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIg
fTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9wcm9jZWR1cmFsLnZlcnRleC50
cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioq
IC4vU2hhZGVycy9wcm9jZWR1cmFsLnZlcnRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBwcm9jZWR1cmFs
VmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0
c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInByb2Nl
ZHVyYWxWZXJ0ZXhTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHByb2NlZHVyYWxWZXJ0ZXhT
aGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUg
PSAncHJvY2VkdXJhbFZlcnRleFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIlxuYXR0cmlidXRlIHZl
YzIgcG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMiB2UG9zaXRpb247XG52YXJ5aW5nIHZlYzIgdlVW
O1xuY29uc3QgdmVjMiBtYWRkPXZlYzIoMC41LDAuNSk7XG52b2lkIG1haW4odm9pZCkge1xudlBv
c2l0aW9uPXBvc2l0aW9uO1xudlVWPXBvc2l0aW9uKm1hZGQrbWFkZDtcbmdsX1Bvc2l0aW9uPXZl
YzQocG9zaXRpb24sMC4wLDEuMCk7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsK
Ky8qKiBAaGlkZGVuICovCit2YXIgcHJvY2VkdXJhbFZlcnRleFNoYWRlciA9IHsgbmFtZTogbmFt
ZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9y
ZWZyYWN0aW9uLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvcmVmcmFjdGlvbi5mcmFnbWVudC50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4
cG9ydHMgcHJvdmlkZWQ6IHJlZnJhY3Rpb25QaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisi
dXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7
CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJyZWZyYWN0aW9uUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIHJlZnJhY3Rpb25QaXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2Vm
ZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdyZWZyYWN0aW9uUGl4ZWxTaGFkZXInOwordmFyIHNo
YWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2Ft
cGxlcjtcbnVuaWZvcm0gc2FtcGxlcjJEIHJlZnJhY3Rpb25TYW1wbGVyO1xuXG51bmlmb3JtIHZl
YzMgYmFzZUNvbG9yO1xudW5pZm9ybSBmbG9hdCBkZXB0aDtcbnVuaWZvcm0gZmxvYXQgY29sb3JM
ZXZlbDtcbnZvaWQgbWFpbigpIHtcbmZsb2F0IHJlZj0xLjAtdGV4dHVyZTJEKHJlZnJhY3Rpb25T
YW1wbGVyLHZVVikucjtcbnZlYzIgdXY9dlVWLXZlYzIoMC41KTtcbnZlYzIgb2Zmc2V0PXV2KmRl
cHRoKnJlZjtcbnZlYzMgc291cmNlQ29sb3I9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVi1v
ZmZzZXQpLnJnYjtcbmdsX0ZyYWdDb2xvcj12ZWM0KHNvdXJjZUNvbG9yK3NvdXJjZUNvbG9yKnJl
Zipjb2xvckxldmVsLDEuMCk7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8q
KiBAaGlkZGVuICovCit2YXIgcmVmcmFjdGlvblBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBz
aGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL3JnYmRE
ZWNvZGUuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9yZ2JkRGVjb2RlLmZyYWdtZW50LnRzICoqKiEK
KyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0
cyBwcm92aWRlZDogcmdiZERlY29kZVBpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgInJnYmREZWNvZGVQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gcmdiZERlY29kZVBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
TWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0
LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2hlbHBlckZ1
bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMgKi8gIi4vU2hhZGVycy9TaGFk
ZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMudHMiKTsKKworCit2YXIgbmFtZSA9ICdyZ2JkRGVj
b2RlUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlm
b3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbiNpbmNsdWRlPGhlbHBlckZ1bmN0aW9ucz5c
bnZvaWQgbWFpbih2b2lkKVxue1xuZ2xfRnJhZ0NvbG9yPXZlYzQoZnJvbVJHQkQodGV4dHVyZTJE
KHRleHR1cmVTYW1wbGVyLHZVVikpLDEuMCk7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNo
YWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgcmdiZERlY29kZVBpeGVsU2hhZGVyID0geyBuYW1l
OiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFk
ZXJzL3JnYmRFbmNvZGUuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9yZ2JkRW5jb2RlLmZyYWdtZW50
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
KiEgZXhwb3J0cyBwcm92aWRlZDogcmdiZEVuY29kZVBpeGVsU2hhZGVyICovCisvKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInJnYmRFbmNvZGVQaXhlbFNoYWRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gcmdiZEVuY29kZVBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlh
bHMvZWZmZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRl
X2hlbHBlckZ1bmN0aW9uc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMgKi8gIi4vU2hh
ZGVycy9TaGFkZXJzSW5jbHVkZS9oZWxwZXJGdW5jdGlvbnMudHMiKTsKKworCit2YXIgbmFtZSA9
ICdyZ2JkRW5jb2RlUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlpbmcgdmVjMiB2
VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbiNpbmNsdWRlPGhlbHBlckZ1
bmN0aW9ucz5cbnZvaWQgbWFpbih2b2lkKVxue1xuZ2xfRnJhZ0NvbG9yPXRvUkdCRCh0ZXh0dXJl
MkQodGV4dHVyZVNhbXBsZXIsdlVWKS5yZ2IpO1xufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBz
aGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHJnYmRFbmNvZGVQaXhlbFNoYWRlciA9IHsgbmFt
ZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hh
ZGVycy9zaGFkb3dNYXAuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL3NoYWRvd01hcC5mcmFnbWVudC50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogc2hhZG93TWFwUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
InVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAic2hhZG93TWFwUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIHNoYWRvd01hcFBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZm
ZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX3BhY2tp
bmdGdW5jdGlvbnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvcGFja2luZ0Z1bmN0aW9ucyAqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL3BhY2tpbmdGdW5jdGlvbnMudHMiKTsKKworCit2YXIgbmFtZSA9ICdz
aGFkb3dNYXBQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gIiNpZm5kZWYgRkxPQVRcbiNpbmNs
dWRlPHBhY2tpbmdGdW5jdGlvbnM+XG4jZW5kaWZcbnZhcnlpbmcgZmxvYXQgdkRlcHRoTWV0cmlj
O1xuI2lmZGVmIEFMUEhBVEVTVFxudmFyeWluZyB2ZWMyIHZVVjtcbnVuaWZvcm0gc2FtcGxlcjJE
IGRpZmZ1c2VTYW1wbGVyO1xuI2VuZGlmXG51bmlmb3JtIHZlYzMgYmlhc0FuZFNjYWxlO1xudW5p
Zm9ybSB2ZWMyIGRlcHRoVmFsdWVzO1xudm9pZCBtYWluKHZvaWQpXG57XG4jaWZkZWYgQUxQSEFU
RVNUXG5pZiAodGV4dHVyZTJEKGRpZmZ1c2VTYW1wbGVyLHZVVikuYTwwLjQpXG5kaXNjYXJkO1xu
I2VuZGlmXG5mbG9hdCBkZXB0aD12RGVwdGhNZXRyaWM7XG4jaWZkZWYgRVNNXG5kZXB0aD1jbGFt
cChleHAoLW1pbig4Ny4sYmlhc0FuZFNjYWxlLnoqZGVwdGgpKSwwLiwxLik7XG4jZW5kaWZcbiNp
ZmRlZiBGTE9BVFxuZ2xfRnJhZ0NvbG9yPXZlYzQoZGVwdGgsMS4wLDEuMCwxLjApO1xuI2Vsc2Vc
bmdsX0ZyYWdDb2xvcj1wYWNrKGRlcHRoKTtcbiNlbmRpZlxufSI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHNoYWRvd01hcFBpeGVsU2hhZGVyID0g
eyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAi
Li9TaGFkZXJzL3NoYWRvd01hcC52ZXJ0ZXgudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9zaGFkb3dNYXAudmVydGV4LnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhw
b3J0cyBwcm92aWRlZDogc2hhZG93TWFwVmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgInNoYWRvd01hcFZlcnRleFNoYWRlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gc2hhZG93TWFwVmVydGV4U2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZm
ZWN0LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2JvbmVz
RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYm9uZXNEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJz
L1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFyYXRp
b25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFyYXRpb24gKi8g
Ii4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNsYXJh
dGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9tb3Jw
aFRhcmdldHNWZXJ0ZXhEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0
ZXhEZWNsYXJhdGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1Zl
cnRleERlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJ
bmNsdWRlX2luc3RhbmNlc0RlY2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc0RlY2xh
cmF0aW9uICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvaW5zdGFuY2VzRGVjbGFyYXRpb24u
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaGVscGVyRnVu
Y3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KC8qISAuL1NoYWRlcnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucyAqLyAiLi9TaGFkZXJzL1NoYWRl
cnNJbmNsdWRlL2hlbHBlckZ1bmN0aW9ucy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9TaGFkZXJzSW5jbHVkZV9tb3JwaFRhcmdldHNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbW9ycGhU
YXJnZXRzVmVydGV4ICovICIuL1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVy
dGV4LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2luc3Rh
bmNlc1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXggKi8gIi4vU2hhZGVycy9T
aGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfU2hhZGVyc0luY2x1ZGVfYm9uZXNWZXJ0ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvYm9uZXNWZXJ0
ZXggKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9ib25lc1ZlcnRleC50cyIpOworCisKKwor
CisKKworCisKKwordmFyIG5hbWUgPSAnc2hhZG93TWFwVmVydGV4U2hhZGVyJzsKK3ZhciBzaGFk
ZXIgPSAiXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbiNpZmRlZiBOT1JNQUxcbmF0dHJpYnV0
ZSB2ZWMzIG5vcm1hbDtcbnVuaWZvcm0gdmVjMyBsaWdodERhdGE7XG4jZW5kaWZcbiNpbmNsdWRl
PGJvbmVzRGVjbGFyYXRpb24+XG4jaW5jbHVkZTxtb3JwaFRhcmdldHNWZXJ0ZXhHbG9iYWxEZWNs
YXJhdGlvbj5cbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleERlY2xhcmF0aW9uPlswLi5tYXhT
aW11bHRhbmVvdXNNb3JwaFRhcmdldHNdXG5cbiNpbmNsdWRlPGluc3RhbmNlc0RlY2xhcmF0aW9u
PlxuI2luY2x1ZGU8aGVscGVyRnVuY3Rpb25zPlxudW5pZm9ybSBtYXQ0IHZpZXdQcm9qZWN0aW9u
O1xudW5pZm9ybSB2ZWMzIGJpYXNBbmRTY2FsZTtcbnVuaWZvcm0gdmVjMiBkZXB0aFZhbHVlcztc
bnZhcnlpbmcgZmxvYXQgdkRlcHRoTWV0cmljO1xuI2lmZGVmIEFMUEhBVEVTVFxudmFyeWluZyB2
ZWMyIHZVVjtcbnVuaWZvcm0gbWF0NCBkaWZmdXNlTWF0cml4O1xuI2lmZGVmIFVWMVxuYXR0cmli
dXRlIHZlYzIgdXY7XG4jZW5kaWZcbiNpZmRlZiBVVjJcbmF0dHJpYnV0ZSB2ZWMyIHV2MjtcbiNl
bmRpZlxuI2VuZGlmXG52b2lkIG1haW4odm9pZClcbntcbnZlYzMgcG9zaXRpb25VcGRhdGVkPXBv
c2l0aW9uO1xuI2lmZGVmIFVWMVxudmVjMiB1dlVwZGF0ZWQ9dXY7XG4jZW5kaWZcbiNpbmNsdWRl
PG1vcnBoVGFyZ2V0c1ZlcnRleD5bMC4ubWF4U2ltdWx0YW5lb3VzTW9ycGhUYXJnZXRzXVxuI2lu
Y2x1ZGU8aW5zdGFuY2VzVmVydGV4PlxuI2luY2x1ZGU8Ym9uZXNWZXJ0ZXg+XG52ZWM0IHdvcmxk
UG9zPWZpbmFsV29ybGQqdmVjNChwb3NpdGlvblVwZGF0ZWQsMS4wKTtcblxuI2lmZGVmIE5PUk1B
TFxubWF0MyBub3JtYWxXb3JsZD1tYXQzKGZpbmFsV29ybGQpO1xuI2lmZGVmIE5PTlVOSUZPUk1T
Q0FMSU5HXG5ub3JtYWxXb3JsZD10cmFuc3Bvc2VNYXQzKGludmVyc2VNYXQzKG5vcm1hbFdvcmxk
KSk7XG4jZW5kaWZcbnZlYzMgd29ybGROb3I9bm9ybWFsaXplKG5vcm1hbFdvcmxkKm5vcm1hbCk7
XG4jaWZkZWYgRElSRUNUSU9OSU5MSUdIVERBVEFcbnZlYzMgd29ybGRMaWdodERpcj1ub3JtYWxp
emUoLWxpZ2h0RGF0YS54eXopO1xuI2Vsc2VcbnZlYzMgZGlyZWN0aW9uVG9MaWdodD1saWdodERh
dGEueHl6LXdvcmxkUG9zLnh5ejtcbnZlYzMgd29ybGRMaWdodERpcj1ub3JtYWxpemUoZGlyZWN0
aW9uVG9MaWdodCk7XG4jZW5kaWZcbmZsb2F0IG5kbD1kb3Qod29ybGROb3Isd29ybGRMaWdodERp
cik7XG5mbG9hdCBzaW5OTD1zcXJ0KDEuMC1uZGwqbmRsKTtcbmZsb2F0IG5vcm1hbEJpYXM9Ymlh
c0FuZFNjYWxlLnkqc2luTkw7XG53b3JsZFBvcy54eXotPXdvcmxkTm9yKm5vcm1hbEJpYXM7XG4j
ZW5kaWZcblxuZ2xfUG9zaXRpb249dmlld1Byb2plY3Rpb24qd29ybGRQb3M7XG4jaWZkZWYgREVQ
VEhURVhUVVJFXG5cbmdsX1Bvc2l0aW9uLnorPWJpYXNBbmRTY2FsZS54KmdsX1Bvc2l0aW9uLnc7
XG4jZW5kaWZcblxudkRlcHRoTWV0cmljPSgoZ2xfUG9zaXRpb24ueitkZXB0aFZhbHVlcy54KS8o
ZGVwdGhWYWx1ZXMueSkpK2JpYXNBbmRTY2FsZS54O1xuI2lmZGVmIEFMUEhBVEVTVFxuI2lmZGVm
IFVWMVxudlVWPXZlYzIoZGlmZnVzZU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwxLjAsMC4wKSk7XG4j
ZW5kaWZcbiNpZmRlZiBVVjJcbnZVVj12ZWMyKGRpZmZ1c2VNYXRyaXgqdmVjNCh1djIsMS4wLDAu
MCkpO1xuI2VuZGlmXG4jZW5kaWZcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOwor
LyoqIEBoaWRkZW4gKi8KK3ZhciBzaGFkb3dNYXBWZXJ0ZXhTaGFkZXIgPSB7IG5hbWU6IG5hbWUs
IHNoYWRlcjogc2hhZGVyIH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvc2hh
cnBlbi5mcmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqISpcCisgICEqKiogLi9TaGFkZXJzL3NoYXJwZW4uZnJhZ21lbnQudHMgKioqIQorICBcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBzaGFycGVuUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAic2hhcnBlblBpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzaGFycGVuUGl4ZWxT
aGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9N
YXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUg
PSAnc2hhcnBlblBpeGVsU2hhZGVyJzsKK3ZhciBzaGFkZXIgPSAiXG52YXJ5aW5nIHZlYzIgdlVW
O1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZVNhbXBsZXI7XG51bmlmb3JtIHZlYzIgc2NyZWVu
U2l6ZTtcbnVuaWZvcm0gdmVjMiBzaGFycG5lc3NBbW91bnRzO1xudm9pZCBtYWluKHZvaWQpXG57
XG52ZWMyIG9uZVBpeGVsPXZlYzIoMS4wLDEuMCkvc2NyZWVuU2l6ZTtcbnZlYzQgY29sb3I9dGV4
dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7XG52ZWM0IGVkZ2VEZXRlY3Rpb249dGV4dHVyZTJE
KHRleHR1cmVTYW1wbGVyLHZVVitvbmVQaXhlbCp2ZWMyKDAsLTEpKSArXG50ZXh0dXJlMkQodGV4
dHVyZVNhbXBsZXIsdlVWK29uZVBpeGVsKnZlYzIoLTEsMCkpICtcbnRleHR1cmUyRCh0ZXh0dXJl
U2FtcGxlcix2VVYrb25lUGl4ZWwqdmVjMigxLDApKSArXG50ZXh0dXJlMkQodGV4dHVyZVNhbXBs
ZXIsdlVWK29uZVBpeGVsKnZlYzIoMCwxKSkgLVxuY29sb3IqNC4wO1xuZ2xfRnJhZ0NvbG9yPW1h
eCh2ZWM0KGNvbG9yLnJnYipzaGFycG5lc3NBbW91bnRzLnksY29sb3IuYSktKHNoYXJwbmVzc0Ft
b3VudHMueCp2ZWM0KGVkZ2VEZXRlY3Rpb24ucmdiLDApKSwwLik7XG59IjsKK19NYXRlcmlhbHNf
ZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9y
ZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgc2hhcnBlblBpeGVsU2hhZGVy
ID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioq
LyAiLi9TaGFkZXJzL3Nwcml0ZXMuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9zcHJpdGVzLmZyYWdtZW50
LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEg
ZXhwb3J0cyBwcm92aWRlZDogc3ByaXRlc1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1
c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgInNwcml0ZXNQaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gc3ByaXRlc1BpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX2ZvZ0ZyYWdtZW50
RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvZm9nRnJhZ21lbnREZWNsYXJhdGlvbiAqLyAiLi9T
aGFkZXJzL1NoYWRlcnNJbmNsdWRlL2ZvZ0ZyYWdtZW50RGVjbGFyYXRpb24udHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfZm9nRnJhZ21lbnRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0lu
Y2x1ZGUvZm9nRnJhZ21lbnQgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9mb2dGcmFnbWVu
dC50cyIpOworCisKKwordmFyIG5hbWUgPSAnc3ByaXRlc1BpeGVsU2hhZGVyJzsKK3ZhciBzaGFk
ZXIgPSAidW5pZm9ybSBib29sIGFscGhhVGVzdDtcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG5cbnZh
cnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlU2FtcGxlcjtcblxuI2lu
Y2x1ZGU8Zm9nRnJhZ21lbnREZWNsYXJhdGlvbj5cbnZvaWQgbWFpbih2b2lkKSB7XG52ZWM0IGNv
bG9yPXRleHR1cmUyRChkaWZmdXNlU2FtcGxlcix2VVYpO1xuaWYgKGFscGhhVGVzdClcbntcbmlm
IChjb2xvci5hPDAuOTUpXG5kaXNjYXJkO1xufVxuY29sb3IqPXZDb2xvcjtcbiNpbmNsdWRlPGZv
Z0ZyYWdtZW50PlxuZ2xfRnJhZ0NvbG9yPWNvbG9yO1xufSI7CitfTWF0ZXJpYWxzX2VmZmVjdF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0g
PSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHNwcml0ZXNQaXhlbFNoYWRlciA9IHsgbmFt
ZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hh
ZGVycy9zcHJpdGVzLnZlcnRleC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy9zcHJpdGVzLnZlcnRleC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVk
OiBzcHJpdGVzVmVydGV4U2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBh
Y2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19f
d2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgInNwcml0ZXNWZXJ0ZXhTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNwcml0ZXNWZXJ0
ZXhTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
Li9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfZm9nVmVydGV4RGVjbGFyYXRpb25fX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vU2hh
ZGVyc0luY2x1ZGUvZm9nVmVydGV4RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5j
bHVkZS9mb2dWZXJ0ZXhEZWNsYXJhdGlvbi50cyIpOworCisKK3ZhciBuYW1lID0gJ3Nwcml0ZXNW
ZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbmF0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uO1xu
YXR0cmlidXRlIHZlYzQgb3B0aW9ucztcbmF0dHJpYnV0ZSB2ZWMyIGludmVydHM7XG5hdHRyaWJ1
dGUgdmVjNCBjZWxsSW5mbztcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuXG51bmlmb3JtIG1hdDQg
dmlldztcbnVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uO1xuXG52YXJ5aW5nIHZlYzIgdlVWO1xudmFy
eWluZyB2ZWM0IHZDb2xvcjtcbiNpbmNsdWRlPGZvZ1ZlcnRleERlY2xhcmF0aW9uPlxudm9pZCBt
YWluKHZvaWQpIHtcbnZlYzMgdmlld1Bvcz0odmlldyp2ZWM0KHBvc2l0aW9uLnh5eiwxLjApKS54
eXo7XG52ZWMyIGNvcm5lclBvcztcbmZsb2F0IGFuZ2xlPXBvc2l0aW9uLnc7XG52ZWMyIHNpemU9
dmVjMihvcHRpb25zLngsb3B0aW9ucy55KTtcbnZlYzIgb2Zmc2V0PW9wdGlvbnMuenc7XG5jb3Ju
ZXJQb3M9dmVjMihvZmZzZXQueC0wLjUsb2Zmc2V0LnktMC41KSpzaXplO1xuXG52ZWMzIHJvdGF0
ZWRDb3JuZXI7XG5yb3RhdGVkQ29ybmVyLng9Y29ybmVyUG9zLngqY29zKGFuZ2xlKS1jb3JuZXJQ
b3MueSpzaW4oYW5nbGUpO1xucm90YXRlZENvcm5lci55PWNvcm5lclBvcy54KnNpbihhbmdsZSkr
Y29ybmVyUG9zLnkqY29zKGFuZ2xlKTtcbnJvdGF0ZWRDb3JuZXIuej0wLjtcblxudmlld1Bvcys9
cm90YXRlZENvcm5lcjtcbmdsX1Bvc2l0aW9uPXByb2plY3Rpb24qdmVjNCh2aWV3UG9zLDEuMCk7
XG5cbnZDb2xvcj1jb2xvcjtcblxudmVjMiB1dk9mZnNldD12ZWMyKGFicyhvZmZzZXQueC1pbnZl
cnRzLngpLGFicygxLjAtb2Zmc2V0LnktaW52ZXJ0cy55KSk7XG52ZWMyIHV2UGxhY2U9Y2VsbElu
Zm8ueHk7XG52ZWMyIHV2U2l6ZT1jZWxsSW5mby56dztcbnZVVi54PXV2UGxhY2UueCt1dlNpemUu
eCp1dk9mZnNldC54O1xudlVWLnk9dXZQbGFjZS55K3V2U2l6ZS55KnV2T2Zmc2V0Lnk7XG5cbiNp
ZmRlZiBGT0dcbnZGb2dEaXN0YW5jZT12aWV3UG9zO1xuI2VuZGlmXG59IjsKK19NYXRlcmlhbHNf
ZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkVmZmVjdCJdLlNoYWRlcnNTdG9y
ZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2YXIgc3ByaXRlc1ZlcnRleFNoYWRl
ciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vU2hhZGVycy9zc2FvLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvc3Nhby5mcmFnbWVudC50cyAqKioh
CisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJv
dmlkZWQ6IHNzYW9QaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJzc2FvUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNzYW9QaXhlbFNoYWRl
cjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVy
aWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworCit2YXIgbmFtZSA9ICdz
c2FvUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1
cmVTYW1wbGVyO1xudmFyeWluZyB2ZWMyIHZVVjtcbiNpZmRlZiBTU0FPXG51bmlmb3JtIHNhbXBs
ZXIyRCByYW5kb21TYW1wbGVyO1xudW5pZm9ybSBmbG9hdCByYW5kVGV4dHVyZVRpbGVzO1xudW5p
Zm9ybSBmbG9hdCBzYW1wbGVzRmFjdG9yO1xudW5pZm9ybSB2ZWMzIHNhbXBsZVNwaGVyZVtTQU1Q
TEVTXTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTdHJlbmd0aDtcbnVuaWZvcm0gZmxvYXQgcmFkaXVz
O1xudW5pZm9ybSBmbG9hdCBhcmVhO1xudW5pZm9ybSBmbG9hdCBmYWxsT2ZmO1xudW5pZm9ybSBm
bG9hdCBiYXNlO1xudmVjMyBub3JtYWxGcm9tRGVwdGgoZmxvYXQgZGVwdGgsdmVjMiBjb29yZHMp
XG57XG52ZWMyIG9mZnNldDE9dmVjMigwLjAscmFkaXVzKTtcbnZlYzIgb2Zmc2V0Mj12ZWMyKHJh
ZGl1cywwLjApO1xuZmxvYXQgZGVwdGgxPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcixjb29yZHMr
b2Zmc2V0MSkucjtcbmZsb2F0IGRlcHRoMj10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsY29vcmRz
K29mZnNldDIpLnI7XG52ZWMzIHAxPXZlYzMob2Zmc2V0MSxkZXB0aDEtZGVwdGgpO1xudmVjMyBw
Mj12ZWMzKG9mZnNldDIsZGVwdGgyLWRlcHRoKTtcbnZlYzMgbm9ybWFsPWNyb3NzKHAxLHAyKTtc
bm5vcm1hbC56PS1ub3JtYWwuejtcbnJldHVybiBub3JtYWxpemUobm9ybWFsKTtcbn1cbnZvaWQg
bWFpbigpXG57XG52ZWMzIHJhbmRvbT1ub3JtYWxpemUodGV4dHVyZTJEKHJhbmRvbVNhbXBsZXIs
dlVWKnJhbmRUZXh0dXJlVGlsZXMpLnJnYik7XG5mbG9hdCBkZXB0aD10ZXh0dXJlMkQodGV4dHVy
ZVNhbXBsZXIsdlVWKS5yO1xudmVjMyBwb3NpdGlvbj12ZWMzKHZVVixkZXB0aCk7XG52ZWMzIG5v
cm1hbD1ub3JtYWxGcm9tRGVwdGgoZGVwdGgsdlVWKTtcbmZsb2F0IHJhZGl1c0RlcHRoPXJhZGl1
cy9kZXB0aDtcbmZsb2F0IG9jY2x1c2lvbj0wLjA7XG52ZWMzIHJheTtcbnZlYzMgaGVtaVJheTtc
bmZsb2F0IG9jY2x1c2lvbkRlcHRoO1xuZmxvYXQgZGlmZmVyZW5jZTtcbmZvciAoaW50IGk9MDsg
aTxTQU1QTEVTOyBpKyspXG57XG5yYXk9cmFkaXVzRGVwdGgqcmVmbGVjdChzYW1wbGVTcGhlcmVb
aV0scmFuZG9tKTtcbmhlbWlSYXk9cG9zaXRpb24rc2lnbihkb3QocmF5LG5vcm1hbCkpKnJheTtc
bm9jY2x1c2lvbkRlcHRoPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcixjbGFtcChoZW1pUmF5Lnh5
LHZlYzIoMC4wMDEsMC4wMDEpLHZlYzIoMC45OTksMC45OTkpKSkucjtcbmRpZmZlcmVuY2U9ZGVw
dGgtb2NjbHVzaW9uRGVwdGg7XG5vY2NsdXNpb24rPXN0ZXAoZmFsbE9mZixkaWZmZXJlbmNlKSoo
MS4wLXNtb290aHN0ZXAoZmFsbE9mZixhcmVhLGRpZmZlcmVuY2UpKTtcbn1cbmZsb2F0IGFvPTEu
MC10b3RhbFN0cmVuZ3RoKm9jY2x1c2lvbipzYW1wbGVzRmFjdG9yO1xuZmxvYXQgcmVzdWx0PWNs
YW1wKGFvK2Jhc2UsMC4wLDEuMCk7XG5nbF9GcmFnQ29sb3Iucj1yZXN1bHQ7XG5nbF9GcmFnQ29s
b3IuZz1yZXN1bHQ7XG5nbF9GcmFnQ29sb3IuYj1yZXN1bHQ7XG5nbF9GcmFnQ29sb3IuYT0xLjA7
XG59XG4jZW5kaWZcbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRl
biAqLwordmFyIHNzYW9QaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIg
fTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9zc2FvMi5mcmFnbWVudC50cyI6
CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hh
ZGVycy9zc2FvMi5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBzc2FvMlBpeGVsU2hhZGVyICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNzYW8yUGl4ZWxTaGFkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIHNzYW8yUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFs
cy9lZmZlY3QudHMiKTsKKwordmFyIG5hbWUgPSAnc3NhbzJQaXhlbFNoYWRlcic7Cit2YXIgc2hh
ZGVyID0gIlxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVy
ZVNhbXBsZXI7XG51bmlmb3JtIGZsb2F0IG5lYXI7XG51bmlmb3JtIGZsb2F0IGZhcjtcbnVuaWZv
cm0gZmxvYXQgcmFkaXVzO1xuZmxvYXQgc2NhbGVzWzE2XT1mbG9hdFsxNl0oXG4wLjEsXG4wLjEx
NDA2MjUwMDAwMDAwMDAxLFxuMC4xMzE2NDA2MjUsXG4wLjE1NjI1LFxuMC4xODc4OTA2MjUsXG4w
LjIyNjU2MjUsXG4wLjI3MjI2NTYyNSxcbjAuMzI1LFxuMC4zODQ3NjU2MjUsXG4wLjQ1MTU2MjUs
XG4wLjUyNTM5MDYyNSxcbjAuNjA2MjUsXG4wLjY5NDE0MDYyNSxcbjAuNzg5MDYyNSxcbjAuODkx
MDE1NjI1LFxuMS4wXG4pO1xudmFyeWluZyB2ZWMyIHZVVjtcbmZsb2F0IHBlcnNwZWN0aXZlRGVw
dGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWixjb25zdCBpbiBmbG9hdCBuZWFyLGNv
bnN0IGluIGZsb2F0IGZhciApIHtcbnJldHVybiAoIG5lYXIqZmFyICkvKCAoIGZhci1uZWFyICkq
aW52Q2xpcFotZmFyICk7XG59XG5mbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3Qg
aW4gZmxvYXQgdmlld1osY29uc3QgaW4gZmxvYXQgbmVhcixjb25zdCBpbiBmbG9hdCBmYXIgKSB7
XG5yZXR1cm4gKCBuZWFyKmZhci92aWV3WitmYXIpLyggZmFyLW5lYXIgKTtcbn1cbmZsb2F0IHZp
ZXdaVG9PcnRob2dyYXBoaWNEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osY29uc3QgaW4gZmxv
YXQgbmVhcixjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5yZXR1cm4gKCB2aWV3WituZWFyICkvKCBu
ZWFyLWZhciApO1xufVxuI2lmZGVmIFNTQU9cbnVuaWZvcm0gc2FtcGxlcjJEIHJhbmRvbVNhbXBs
ZXI7XG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxTYW1wbGVyO1xudW5pZm9ybSBmbG9hdCByYW5k
VGV4dHVyZVRpbGVzO1xudW5pZm9ybSBmbG9hdCBzYW1wbGVzRmFjdG9yO1xudW5pZm9ybSB2ZWMz
IHNhbXBsZVNwaGVyZVtTQU1QTEVTXTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTdHJlbmd0aDtcbnVu
aWZvcm0gZmxvYXQgYmFzZTtcbnVuaWZvcm0gZmxvYXQgeFZpZXdwb3J0O1xudW5pZm9ybSBmbG9h
dCB5Vmlld3BvcnQ7XG51bmlmb3JtIGZsb2F0IG1heFo7XG51bmlmb3JtIGZsb2F0IG1pblpBc3Bl
Y3Q7XG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xudW5pZm9ybSBtYXQ0IHByb2plY3Rpb247XG52
b2lkIG1haW4oKVxue1xudmVjMyByYW5kb209dGV4dHVyZTJEKHJhbmRvbVNhbXBsZXIsdlVWKnJh
bmRUZXh0dXJlVGlsZXMpLnJnYjtcbmZsb2F0IGRlcHRoPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxl
cix2VVYpLnI7XG5mbG9hdCBkZXB0aFNpZ249ZGVwdGgvYWJzKGRlcHRoKTtcbmRlcHRoPWRlcHRo
KmRlcHRoU2lnbjtcbnZlYzMgbm9ybWFsPXRleHR1cmUyRChub3JtYWxTYW1wbGVyLHZVVikucmdi
O1xuZmxvYXQgb2NjbHVzaW9uPTAuMDtcbmZsb2F0IGNvcnJlY3RlZFJhZGl1cz1taW4ocmFkaXVz
LG1pblpBc3BlY3QqZGVwdGgvbmVhcik7XG52ZWMzIHZWaWV3UmF5PXZlYzMoKHZVVi54KjIuMC0x
LjApKnhWaWV3cG9ydCwodlVWLnkqMi4wLTEuMCkqeVZpZXdwb3J0LGRlcHRoU2lnbik7XG52ZWMz
IG9yaWdpbj12Vmlld1JheSpkZXB0aDtcbnZlYzMgcnZlYz1yYW5kb20qMi4wLTEuMDtcbnJ2ZWMu
ej0wLjA7XG5cbmZsb2F0IGRvdFByb2R1Y3Q9ZG90KHJ2ZWMsbm9ybWFsKTtcbnJ2ZWM9MS4wLWFi
cyhkb3RQcm9kdWN0KT4xZS0yID8gcnZlYyA6IHZlYzMoLXJ2ZWMueSwwLjAscnZlYy54KTtcbnZl
YzMgdGFuZ2VudD1ub3JtYWxpemUocnZlYy1ub3JtYWwqZG90KHJ2ZWMsbm9ybWFsKSk7XG52ZWMz
IGJpdGFuZ2VudD1jcm9zcyhub3JtYWwsdGFuZ2VudCk7XG5tYXQzIHRibj1tYXQzKHRhbmdlbnQs
Yml0YW5nZW50LG5vcm1hbCk7XG5mbG9hdCBkaWZmZXJlbmNlO1xuZm9yIChpbnQgaT0wOyBpPFNB
TVBMRVM7ICsraSkge1xuXG52ZWMzIHNhbXBsZVBvc2l0aW9uPXNjYWxlc1soaStpbnQocmFuZG9t
LngqMTYuMCkpICUgMTZdKnRibipzYW1wbGVTcGhlcmVbKGkraW50KHJhbmRvbS55KjE2LjApKSAl
IDE2XTtcbnNhbXBsZVBvc2l0aW9uPXNhbXBsZVBvc2l0aW9uKmNvcnJlY3RlZFJhZGl1cytvcmln
aW47XG5cbnZlYzQgb2Zmc2V0PXZlYzQoc2FtcGxlUG9zaXRpb24sMS4wKTtcbm9mZnNldD1wcm9q
ZWN0aW9uKm9mZnNldDtcbm9mZnNldC54eXovPW9mZnNldC53O1xub2Zmc2V0Lnh5PW9mZnNldC54
eSowLjUrMC41O1xuaWYgKG9mZnNldC54PDAuMCB8fCBvZmZzZXQueTwwLjAgfHwgb2Zmc2V0Lng+
MS4wIHx8IG9mZnNldC55PjEuMCkge1xuY29udGludWU7XG59XG5cbmZsb2F0IHNhbXBsZURlcHRo
PWFicyh0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsb2Zmc2V0Lnh5KS5yKTtcblxuZGlmZmVyZW5j
ZT1kZXB0aFNpZ24qc2FtcGxlUG9zaXRpb24uei1zYW1wbGVEZXB0aDtcbmZsb2F0IHJhbmdlQ2hl
Y2s9MS4wLXNtb290aHN0ZXAoY29ycmVjdGVkUmFkaXVzKjAuNSxjb3JyZWN0ZWRSYWRpdXMsZGlm
ZmVyZW5jZSk7XG5vY2NsdXNpb24rPShkaWZmZXJlbmNlPj0wLjAgPyAxLjAgOiAwLjApKnJhbmdl
Q2hlY2s7XG59XG5vY2NsdXNpb249b2NjbHVzaW9uKigxLjAtc21vb3Roc3RlcChtYXhaKjAuNzUs
bWF4WixkZXB0aCkpO1xuZmxvYXQgYW89MS4wLXRvdGFsU3RyZW5ndGgqb2NjbHVzaW9uKnNhbXBs
ZXNGYWN0b3I7XG5mbG9hdCByZXN1bHQ9Y2xhbXAoYW8rYmFzZSwwLjAsMS4wKTtcbmdsX0ZyYWdD
b2xvcj12ZWM0KHZlYzMocmVzdWx0KSwxLjApO1xufVxuI2VuZGlmXG4jaWZkZWYgQklMQVRFUkFM
X0JMVVJcbnVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoU2FtcGxlcjtcbnVuaWZvcm0gZmxvYXQgb3V0
U2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2FtcGxlck9mZnNldHNbU0FNUExFU107XG52ZWM0IGJsdXI5
KHNhbXBsZXIyRCBpbWFnZSx2ZWMyIHV2LGZsb2F0IHJlc29sdXRpb24sdmVjMiBkaXJlY3Rpb24p
IHtcbnZlYzQgY29sb3I9dmVjNCgwLjApO1xudmVjMiBvZmYxPXZlYzIoMS4zODQ2MTUzODQ2KSpk
aXJlY3Rpb247XG52ZWMyIG9mZjI9dmVjMigzLjIzMDc2OTIzMDgpKmRpcmVjdGlvbjtcbmNvbG9y
Kz10ZXh0dXJlMkQoaW1hZ2UsdXYpKjAuMjI3MDI3MDI3MDtcbmNvbG9yKz10ZXh0dXJlMkQoaW1h
Z2UsdXYrKG9mZjEvcmVzb2x1dGlvbikpKjAuMzE2MjE2MjE2MjtcbmNvbG9yKz10ZXh0dXJlMkQo
aW1hZ2UsdXYtKG9mZjEvcmVzb2x1dGlvbikpKjAuMzE2MjE2MjE2MjtcbmNvbG9yKz10ZXh0dXJl
MkQoaW1hZ2UsdXYrKG9mZjIvcmVzb2x1dGlvbikpKjAuMDcwMjcwMjcwMztcbmNvbG9yKz10ZXh0
dXJlMkQoaW1hZ2UsdXYtKG9mZjIvcmVzb2x1dGlvbikpKjAuMDcwMjcwMjcwMztcbnJldHVybiBj
b2xvcjtcbn1cbnZlYzQgYmx1cjEzKHNhbXBsZXIyRCBpbWFnZSx2ZWMyIHV2LGZsb2F0IHJlc29s
dXRpb24sdmVjMiBkaXJlY3Rpb24pIHtcbnZlYzQgY29sb3I9dmVjNCgwLjApO1xudmVjMiBvZmYx
PXZlYzIoMS40MTE3NjQ3MDU4ODIzNTMpKmRpcmVjdGlvbjtcbnZlYzIgb2ZmMj12ZWMyKDMuMjk0
MTE3NjQ3MDU4ODIzNCkqZGlyZWN0aW9uO1xudmVjMiBvZmYzPXZlYzIoNS4xNzY0NzA1ODgyMzUy
OTQpKmRpcmVjdGlvbjtcbmNvbG9yKz10ZXh0dXJlMkQoaW1hZ2UsdXYpKjAuMTk2NDgyNTUwMTUx
MTQwNDtcbmNvbG9yKz10ZXh0dXJlMkQoaW1hZ2UsdXYrKG9mZjEvcmVzb2x1dGlvbikpKjAuMjk2
OTA2OTY0NjcyODM0NDtcbmNvbG9yKz10ZXh0dXJlMkQoaW1hZ2UsdXYtKG9mZjEvcmVzb2x1dGlv
bikpKjAuMjk2OTA2OTY0NjcyODM0NDtcbmNvbG9yKz10ZXh0dXJlMkQoaW1hZ2UsdXYrKG9mZjIv
cmVzb2x1dGlvbikpKjAuMDk0NDcwMzk3ODUwNDQ3MzI7XG5jb2xvcis9dGV4dHVyZTJEKGltYWdl
LHV2LShvZmYyL3Jlc29sdXRpb24pKSowLjA5NDQ3MDM5Nzg1MDQ0NzMyO1xuY29sb3IrPXRleHR1
cmUyRChpbWFnZSx1disob2ZmMy9yZXNvbHV0aW9uKSkqMC4wMTAzODEzNjI0MDExNDgwNTc7XG5j
b2xvcis9dGV4dHVyZTJEKGltYWdlLHV2LShvZmYzL3Jlc29sdXRpb24pKSowLjAxMDM4MTM2MjQw
MTE0ODA1NztcbnJldHVybiBjb2xvcjtcbn1cbnZlYzQgYmx1cjEzQmlsYXRlcmFsKHNhbXBsZXIy
RCBpbWFnZSx2ZWMyIHV2LGZsb2F0IHJlc29sdXRpb24sdmVjMiBkaXJlY3Rpb24pIHtcbnZlYzQg
Y29sb3I9dmVjNCgwLjApO1xudmVjMiBvZmYxPXZlYzIoMS40MTE3NjQ3MDU4ODIzNTMpKmRpcmVj
dGlvbjtcbnZlYzIgb2ZmMj12ZWMyKDMuMjk0MTE3NjQ3MDU4ODIzNCkqZGlyZWN0aW9uO1xudmVj
MiBvZmYzPXZlYzIoNS4xNzY0NzA1ODgyMzUyOTQpKmRpcmVjdGlvbjtcbmZsb2F0IGNvbXBhcmVE
ZXB0aD1hYnModGV4dHVyZTJEKGRlcHRoU2FtcGxlcix1dikucik7XG5mbG9hdCBzYW1wbGVEZXB0
aDtcbmZsb2F0IHdlaWdodDtcbmZsb2F0IHdlaWdodFN1bT0zMC4wO1xuY29sb3IrPXRleHR1cmUy
RChpbWFnZSx1dikqMzAuMDtcbnNhbXBsZURlcHRoPWFicyh0ZXh0dXJlMkQoZGVwdGhTYW1wbGVy
LHV2KyhvZmYxL3Jlc29sdXRpb24pKS5yKTtcbndlaWdodD1jbGFtcCgxLjAvKCAwLjAwMythYnMo
Y29tcGFyZURlcHRoLXNhbXBsZURlcHRoKSksMC4wLDMwLjApO1xud2VpZ2h0U3VtKz13ZWlnaHQ7
XG5jb2xvcis9dGV4dHVyZTJEKGltYWdlLHV2KyhvZmYxL3Jlc29sdXRpb24pKSp3ZWlnaHQ7XG5z
YW1wbGVEZXB0aD1hYnModGV4dHVyZTJEKGRlcHRoU2FtcGxlcix1di0ob2ZmMS9yZXNvbHV0aW9u
KSkucik7XG53ZWlnaHQ9Y2xhbXAoMS4wLyggMC4wMDMrYWJzKGNvbXBhcmVEZXB0aC1zYW1wbGVE
ZXB0aCkpLDAuMCwzMC4wKTtcbndlaWdodFN1bSs9d2VpZ2h0O1xuY29sb3IrPXRleHR1cmUyRChp
bWFnZSx1di0ob2ZmMS9yZXNvbHV0aW9uKSkqd2VpZ2h0O1xuc2FtcGxlRGVwdGg9YWJzKHRleHR1
cmUyRChkZXB0aFNhbXBsZXIsdXYrKG9mZjIvcmVzb2x1dGlvbikpLnIpO1xud2VpZ2h0PWNsYW1w
KDEuMC8oIDAuMDAzK2Ficyhjb21wYXJlRGVwdGgtc2FtcGxlRGVwdGgpKSwwLjAsMzAuMCk7XG53
ZWlnaHRTdW0rPXdlaWdodDtcbmNvbG9yKz10ZXh0dXJlMkQoaW1hZ2UsdXYrKG9mZjIvcmVzb2x1
dGlvbikpKndlaWdodDtcbnNhbXBsZURlcHRoPWFicyh0ZXh0dXJlMkQoZGVwdGhTYW1wbGVyLHV2
LShvZmYyL3Jlc29sdXRpb24pKS5yKTtcbndlaWdodD1jbGFtcCgxLjAvKCAwLjAwMythYnMoY29t
cGFyZURlcHRoLXNhbXBsZURlcHRoKSksMC4wLDMwLjApO1xud2VpZ2h0U3VtKz13ZWlnaHQ7XG5j
b2xvcis9dGV4dHVyZTJEKGltYWdlLHV2LShvZmYyL3Jlc29sdXRpb24pKSp3ZWlnaHQ7XG5zYW1w
bGVEZXB0aD1hYnModGV4dHVyZTJEKGRlcHRoU2FtcGxlcix1disob2ZmMy9yZXNvbHV0aW9uKSku
cik7XG53ZWlnaHQ9Y2xhbXAoMS4wLyggMC4wMDMrYWJzKGNvbXBhcmVEZXB0aC1zYW1wbGVEZXB0
aCkpLDAuMCwzMC4wKTtcbndlaWdodFN1bSs9d2VpZ2h0O1xuY29sb3IrPXRleHR1cmUyRChpbWFn
ZSx1disob2ZmMy9yZXNvbHV0aW9uKSkqd2VpZ2h0O1xuc2FtcGxlRGVwdGg9YWJzKHRleHR1cmUy
RChkZXB0aFNhbXBsZXIsdXYtKG9mZjMvcmVzb2x1dGlvbikpLnIpO1xud2VpZ2h0PWNsYW1wKDEu
MC8oIDAuMDAzK2Ficyhjb21wYXJlRGVwdGgtc2FtcGxlRGVwdGgpKSwwLjAsMzAuMCk7XG53ZWln
aHRTdW0rPXdlaWdodDtcbmNvbG9yKz10ZXh0dXJlMkQoaW1hZ2UsdXYtKG9mZjMvcmVzb2x1dGlv
bikpKndlaWdodDtcbnJldHVybiBjb2xvci93ZWlnaHRTdW07XG59XG52b2lkIG1haW4oKVxue1xu
I2lmIEVYUEVOU0lWRVxuZmxvYXQgY29tcGFyZURlcHRoPWFicyh0ZXh0dXJlMkQoZGVwdGhTYW1w
bGVyLHZVVikucik7XG5mbG9hdCB0ZXhlbHNpemU9MS4wL291dFNpemU7XG5mbG9hdCByZXN1bHQ9
MC4wO1xuZmxvYXQgd2VpZ2h0U3VtPTAuMDtcbmZvciAoaW50IGk9MDsgaTxTQU1QTEVTOyArK2kp
XG57XG4jaWZkZWYgQklMQVRFUkFMX0JMVVJfSFxudmVjMiBkaXJlY3Rpb249dmVjMigxLjAsMC4w
KTtcbnZlYzIgc2FtcGxlT2Zmc2V0PXZlYzIodGV4ZWxzaXplKnNhbXBsZXJPZmZzZXRzW2ldLDAu
MCk7XG4jZWxzZVxudmVjMiBkaXJlY3Rpb249dmVjMigwLjAsMS4wKTtcbnZlYzIgc2FtcGxlT2Zm
c2V0PXZlYzIoMC4wLHRleGVsc2l6ZSpzYW1wbGVyT2Zmc2V0c1tpXSk7XG4jZW5kaWZcbnZlYzIg
c2FtcGxlUG9zPXZVVitzYW1wbGVPZmZzZXQ7XG5mbG9hdCBzYW1wbGVEZXB0aD1hYnModGV4dHVy
ZTJEKGRlcHRoU2FtcGxlcixzYW1wbGVQb3MpLnIpO1xuZmxvYXQgd2VpZ2h0PWNsYW1wKDEuMC8o
IDAuMDAzK2Ficyhjb21wYXJlRGVwdGgtc2FtcGxlRGVwdGgpKSwwLjAsMzAwMDAuMCk7XG5yZXN1
bHQrPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcixzYW1wbGVQb3MpLnIqd2VpZ2h0O1xud2VpZ2h0
U3VtKz13ZWlnaHQ7XG59XG5yZXN1bHQvPXdlaWdodFN1bTtcbmdsX0ZyYWdDb2xvci5yZ2I9dmVj
MyhyZXN1bHQpO1xuZ2xfRnJhZ0NvbG9yLmE9MS4wO1xuI2Vsc2VcbnZlYzQgY29sb3I7XG4jaWZk
ZWYgQklMQVRFUkFMX0JMVVJfSFxudmVjMiBkaXJlY3Rpb249dmVjMigxLjAsMC4wKTtcbmNvbG9y
PWJsdXIxM0JpbGF0ZXJhbCh0ZXh0dXJlU2FtcGxlcix2VVYsb3V0U2l6ZSxkaXJlY3Rpb24pO1xu
I2Vsc2VcbnZlYzIgZGlyZWN0aW9uPXZlYzIoMC4wLDEuMCk7XG5jb2xvcj1ibHVyMTNCaWxhdGVy
YWwodGV4dHVyZVNhbXBsZXIsdlVWLG91dFNpemUsZGlyZWN0aW9uKTtcbiNlbmRpZlxuZ2xfRnJh
Z0NvbG9yLnJnYj12ZWMzKGNvbG9yLnIpO1xuZ2xfRnJhZ0NvbG9yLmE9MS4wO1xuI2VuZGlmXG59
XG4jZW5kaWZcbiI7CitfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAq
LwordmFyIHNzYW8yUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07
CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvc3Nhb0NvbWJpbmUuZnJhZ21lbnQu
dHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1NoYWRlcnMvc3Nhb0NvbWJpbmUuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDog
c3Nhb0NvbWJpbmVQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJzc2FvQ29tYmluZVBpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzc2FvQ29t
YmluZVBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxz
X2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisK
K3ZhciBuYW1lID0gJ3NzYW9Db21iaW5lUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJ1bmlm
b3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbnVuaWZvcm0gc2FtcGxlcjJEIG9yaWdpbmFs
Q29sb3I7XG51bmlmb3JtIHZlYzQgdmlld3BvcnQ7XG52YXJ5aW5nIHZlYzIgdlVWO1xudm9pZCBt
YWluKHZvaWQpIHtcbnZlYzQgc3Nhb0NvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2aWV3
cG9ydC54eSt2VVYqdmlld3BvcnQuencpO1xudmVjNCBzY2VuZUNvbG9yPXRleHR1cmUyRChvcmln
aW5hbENvbG9yLHZVVik7XG5nbF9GcmFnQ29sb3I9c2NlbmVDb2xvcipzc2FvQ29sb3I7XG59XG4i
OworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0
Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciBzc2Fv
Q29tYmluZVBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL3N0YW5kYXJkLmZyYWdtZW50LnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFk
ZXJzL3N0YW5kYXJkLmZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IHN0YW5kYXJkUGl4ZWxTaGFk
ZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic3RhbmRhcmRQaXhlbFNo
YWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhbmRhcmRQaXhlbFNoYWRlcjsgfSk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3Qg
Ki8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9T
aGFkZXJzSW5jbHVkZV9wYWNraW5nRnVuY3Rpb25zX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL3BhY2tpbmdGdW5j
dGlvbnMgKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9wYWNraW5nRnVuY3Rpb25zLnRzIik7
CisKKwordmFyIG5hbWUgPSAnc3RhbmRhcmRQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gInVu
aWZvcm0gc2FtcGxlcjJEIHRleHR1cmVTYW1wbGVyO1xudmFyeWluZyB2ZWMyIHZVVjtcbiNpZiBk
ZWZpbmVkKFBBU1NfUE9TVF9QUk9DRVNTKVxudm9pZCBtYWluKHZvaWQpXG57XG52ZWM0IGNvbG9y
PXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYpO1xuZ2xfRnJhZ0NvbG9yPWNvbG9yO1xufVxu
I2VuZGlmXG4jaWYgZGVmaW5lZChET1dOX1NBTVBMRV9YNClcbnVuaWZvcm0gdmVjMiBkc09mZnNl
dHNbMTZdO1xudm9pZCBtYWluKHZvaWQpXG57XG52ZWM0IGF2ZXJhZ2U9dmVjNCgwLjAsMC4wLDAu
MCwwLjApO1xuYXZlcmFnZT10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1sw
XSk7XG5hdmVyYWdlKz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1sxXSk7
XG5hdmVyYWdlKz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1syXSk7XG5h
dmVyYWdlKz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1szXSk7XG5hdmVy
YWdlKz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1s0XSk7XG5hdmVyYWdl
Kz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1s1XSk7XG5hdmVyYWdlKz10
ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1s2XSk7XG5hdmVyYWdlKz10ZXh0
dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1s3XSk7XG5hdmVyYWdlKz10ZXh0dXJl
MkQodGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1s4XSk7XG5hdmVyYWdlKz10ZXh0dXJlMkQo
dGV4dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1s5XSk7XG5hdmVyYWdlKz10ZXh0dXJlMkQodGV4
dHVyZVNhbXBsZXIsdlVWK2RzT2Zmc2V0c1sxMF0pO1xuYXZlcmFnZSs9dGV4dHVyZTJEKHRleHR1
cmVTYW1wbGVyLHZVVitkc09mZnNldHNbMTFdKTtcbmF2ZXJhZ2UrPXRleHR1cmUyRCh0ZXh0dXJl
U2FtcGxlcix2VVYrZHNPZmZzZXRzWzEyXSk7XG5hdmVyYWdlKz10ZXh0dXJlMkQodGV4dHVyZVNh
bXBsZXIsdlVWK2RzT2Zmc2V0c1sxM10pO1xuYXZlcmFnZSs9dGV4dHVyZTJEKHRleHR1cmVTYW1w
bGVyLHZVVitkc09mZnNldHNbMTRdKTtcbmF2ZXJhZ2UrPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxl
cix2VVYrZHNPZmZzZXRzWzE1XSk7XG5hdmVyYWdlLz0xNi4wO1xuZ2xfRnJhZ0NvbG9yPWF2ZXJh
Z2U7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKEJSSUdIVF9QQVNTKVxudW5pZm9ybSB2ZWMyIGRz
T2Zmc2V0c1s0XTtcbnVuaWZvcm0gZmxvYXQgYnJpZ2h0VGhyZXNob2xkO1xudm9pZCBtYWluKHZv
aWQpXG57XG52ZWM0IGF2ZXJhZ2U9dmVjNCgwLjAsMC4wLDAuMCwwLjApO1xuYXZlcmFnZT10ZXh0
dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoZHNPZmZzZXRzWzBdLngsZHNPZmZzZXRzWzBd
LnkpKTtcbmF2ZXJhZ2UrPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYrdmVjMihkc09mZnNl
dHNbMV0ueCxkc09mZnNldHNbMV0ueSkpO1xuYXZlcmFnZSs9dGV4dHVyZTJEKHRleHR1cmVTYW1w
bGVyLHZVVit2ZWMyKGRzT2Zmc2V0c1syXS54LGRzT2Zmc2V0c1syXS55KSk7XG5hdmVyYWdlKz10
ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWK3ZlYzIoZHNPZmZzZXRzWzNdLngsZHNPZmZzZXRz
WzNdLnkpKTtcbmF2ZXJhZ2UqPTAuMjU7XG5mbG9hdCBsdW1pbmFuY2U9bGVuZ3RoKGF2ZXJhZ2Uu
cmdiKTtcbmlmIChsdW1pbmFuY2U8YnJpZ2h0VGhyZXNob2xkKSB7XG5hdmVyYWdlPXZlYzQoMC4w
LDAuMCwwLjAsMS4wKTtcbn1cbmdsX0ZyYWdDb2xvcj1hdmVyYWdlO1xufVxuI2VuZGlmXG4jaWYg
ZGVmaW5lZChURVhUVVJFX0FEREVSKVxudW5pZm9ybSBzYW1wbGVyMkQgb3RoZXJTYW1wbGVyO1xu
dW5pZm9ybSBzYW1wbGVyMkQgbGVuc1NhbXBsZXI7XG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlO1xu
dm9pZCBtYWluKHZvaWQpXG57XG52ZWMzIGNvbG91cj10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIs
dlVWKS5yZ2I7XG5jb2xvdXIqPWV4cG9zdXJlO1xudmVjMyBYPW1heCh2ZWMzKDAuMCwwLjAsMC4w
KSxjb2xvdXItMC4wMDQpO1xudmVjMyByZXRDb2xvcj0oWCooNi4yKlgrMC41KSkvKFgqKDYuMipY
KzEuNykrMC4wNik7XG5jb2xvdXI9cmV0Q29sb3IqcmV0Q29sb3I7XG5jb2xvdXIrPWNvbG91cip0
ZXh0dXJlMkQobGVuc1NhbXBsZXIsdlVWKS5yZ2I7XG52ZWM0IGZpbmFsQ29sb3I9dmVjNChjb2xv
dXIucmdiLDEuMCkrdGV4dHVyZTJEKG90aGVyU2FtcGxlcix2VVYpO1xuZ2xfRnJhZ0NvbG9yPWZp
bmFsQ29sb3I7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKFZMUylcbiNkZWZpbmUgUEkgMy4xNDE1
OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1XG51bmlmb3JtIG1hdDQgc2hhZG93Vmlld1Byb2pl
Y3Rpb247XG51bmlmb3JtIG1hdDQgbGlnaHRXb3JsZDtcbnVuaWZvcm0gdmVjMyBjYW1lcmFQb3Np
dGlvbjtcbnVuaWZvcm0gdmVjMyBzdW5EaXJlY3Rpb247XG51bmlmb3JtIHZlYzMgc3VuQ29sb3I7
XG51bmlmb3JtIHZlYzIgZGVwdGhWYWx1ZXM7XG51bmlmb3JtIGZsb2F0IHNjYXR0ZXJpbmdDb2Vm
ZmljaWVudDtcbnVuaWZvcm0gZmxvYXQgc2NhdHRlcmluZ1Bvd2VyO1xudW5pZm9ybSBzYW1wbGVy
MkQgc2hhZG93TWFwU2FtcGxlcjtcbnVuaWZvcm0gc2FtcGxlcjJEIHBvc2l0aW9uU2FtcGxlcjtc
bmZsb2F0IGNvbXB1dGVTY2F0dGVyaW5nKGZsb2F0IGxpZ2h0RG90VmlldylcbntcbmZsb2F0IHJl
c3VsdD0xLjAtc2NhdHRlcmluZ0NvZWZmaWNpZW50KnNjYXR0ZXJpbmdDb2VmZmljaWVudDtcbnJl
c3VsdC89KDQuMCpQSSpwb3coMS4wK3NjYXR0ZXJpbmdDb2VmZmljaWVudCpzY2F0dGVyaW5nQ29l
ZmZpY2llbnQtKDIuMCpzY2F0dGVyaW5nQ29lZmZpY2llbnQpKmxpZ2h0RG90VmlldywxLjUpKTtc
bnJldHVybiByZXN1bHQ7XG59XG52b2lkIG1haW4odm9pZClcbntcblxudmVjMyB3b3JsZFBvcz10
ZXh0dXJlMkQocG9zaXRpb25TYW1wbGVyLHZVVikucmdiO1xudmVjMyBzdGFydFBvc2l0aW9uPWNh
bWVyYVBvc2l0aW9uO1xudmVjMyByYXlWZWN0b3I9d29ybGRQb3Mtc3RhcnRQb3NpdGlvbjtcbmZs
b2F0IHJheUxlbmd0aD1sZW5ndGgocmF5VmVjdG9yKTtcbnZlYzMgcmF5RGlyZWN0aW9uPXJheVZl
Y3Rvci9yYXlMZW5ndGg7XG5mbG9hdCBzdGVwTGVuZ3RoPXJheUxlbmd0aC9OQl9TVEVQUztcbnZl
YzMgc3RlcEw9cmF5RGlyZWN0aW9uKnN0ZXBMZW5ndGg7XG52ZWMzIGN1cnJlbnRQb3NpdGlvbj1z
dGFydFBvc2l0aW9uO1xudmVjMyBhY2N1bUZvZz12ZWMzKDAuMCk7XG5mb3IgKGludCBpPTA7IGk8
aW50KE5CX1NURVBTKTsgaSsrKVxue1xudmVjNCB3b3JsZEluU2hhZG93Q2FtZXJhU3BhY2U9c2hh
ZG93Vmlld1Byb2plY3Rpb24qdmVjNChjdXJyZW50UG9zaXRpb24sMS4wKTtcbmZsb2F0IGRlcHRo
TWV0cmljPSh3b3JsZEluU2hhZG93Q2FtZXJhU3BhY2UueitkZXB0aFZhbHVlcy54KS8oZGVwdGhW
YWx1ZXMueSk7XG5mbG9hdCBzaGFkb3dQaXhlbERlcHRoPWNsYW1wKGRlcHRoTWV0cmljLDAuMCwx
LjApO1xud29ybGRJblNoYWRvd0NhbWVyYVNwYWNlLnh5ei89d29ybGRJblNoYWRvd0NhbWVyYVNw
YWNlLnc7XG53b3JsZEluU2hhZG93Q2FtZXJhU3BhY2UueHl6PTAuNSp3b3JsZEluU2hhZG93Q2Ft
ZXJhU3BhY2UueHl6K3ZlYzMoMC41KTtcbmZsb2F0IHNoYWRvd01hcFZhbHVlPXRleHR1cmUyRChz
aGFkb3dNYXBTYW1wbGVyLHdvcmxkSW5TaGFkb3dDYW1lcmFTcGFjZS54eSkucjtcbmlmIChzaGFk
b3dNYXBWYWx1ZT5zaGFkb3dQaXhlbERlcHRoKVxuYWNjdW1Gb2crPXN1bkNvbG9yKmNvbXB1dGVT
Y2F0dGVyaW5nKGRvdChyYXlEaXJlY3Rpb24sc3VuRGlyZWN0aW9uKSk7XG5jdXJyZW50UG9zaXRp
b24rPXN0ZXBMO1xufVxuYWNjdW1Gb2cvPU5CX1NURVBTO1xudmVjMyBjb2xvcj1hY2N1bUZvZypz
Y2F0dGVyaW5nUG93ZXI7XG5nbF9GcmFnQ29sb3I9dmVjNChjb2xvcipleHAoY29sb3IpICwxLjAp
O1xufVxuI2VuZGlmXG4jaWYgZGVmaW5lZChWTFNNRVJHRSlcbnVuaWZvcm0gc2FtcGxlcjJEIG9y
aWdpbmFsU2FtcGxlcjtcbnZvaWQgbWFpbih2b2lkKVxue1xuZ2xfRnJhZ0NvbG9yPXRleHR1cmUy
RChvcmlnaW5hbFNhbXBsZXIsdlVWKSt0ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWKTtcbn1c
biNlbmRpZlxuI2lmIGRlZmluZWQoTFVNSU5BTkNFKVxudW5pZm9ybSB2ZWMyIGx1bU9mZnNldHNb
NF07XG52b2lkIG1haW4oKVxue1xuZmxvYXQgYXZlcmFnZT0wLjA7XG52ZWM0IGNvbG9yPXZlYzQo
MC4wKTtcbmZsb2F0IG1heGltdW09LTFlMjA7XG52ZWMzIHdlaWdodD12ZWMzKDAuMjk5LDAuNTg3
LDAuMTE0KTtcbmZvciAoaW50IGk9MDsgaTw0OyBpKyspXG57XG5jb2xvcj10ZXh0dXJlMkQodGV4
dHVyZVNhbXBsZXIsdlVWKyBsdW1PZmZzZXRzW2ldKTtcblxuZmxvYXQgR3JleVZhbHVlPWRvdChj
b2xvci5yZ2IsdmVjMygwLjMzLDAuMzMsMC4zMykpO1xuXG4jaWZkZWYgV0VJR0hURURfQVZFUkFH
RVxuZmxvYXQgR3JleVZhbHVlPWRvdChjb2xvci5yZ2Isd2VpZ2h0KTtcbiNlbmRpZlxuI2lmZGVm
IEJSSUdIVE5FU1NcbmZsb2F0IEdyZXlWYWx1ZT1tYXgoY29sb3IucixtYXgoY29sb3IuZyxjb2xv
ci5iKSk7XG4jZW5kaWZcbiNpZmRlZiBIU0xfQ09NUE9ORU5UXG5mbG9hdCBHcmV5VmFsdWU9MC41
KihtYXgoY29sb3IucixtYXgoY29sb3IuZyxjb2xvci5iKSkrbWluKGNvbG9yLnIsbWluKGNvbG9y
LmcsY29sb3IuYikpKTtcbiNlbmRpZlxuI2lmZGVmIE1BR05JVFVERVxuZmxvYXQgR3JleVZhbHVl
PWxlbmd0aChjb2xvci5yZ2IpO1xuI2VuZGlmXG5tYXhpbXVtPW1heChtYXhpbXVtLEdyZXlWYWx1
ZSk7XG5hdmVyYWdlKz0oMC4yNSpsb2coMWUtNStHcmV5VmFsdWUpKTtcbn1cbmF2ZXJhZ2U9ZXhw
KGF2ZXJhZ2UpO1xuZ2xfRnJhZ0NvbG9yPXZlYzQoYXZlcmFnZSxtYXhpbXVtLDAuMCwxLjApO1xu
fVxuI2VuZGlmXG4jaWYgZGVmaW5lZChMVU1JTkFOQ0VfRE9XTl9TQU1QTEUpXG51bmlmb3JtIHZl
YzIgZHNPZmZzZXRzWzldO1xudW5pZm9ybSBmbG9hdCBoYWxmRGVzdFBpeGVsU2l6ZTtcbiNpZmRl
ZiBGSU5BTF9ET1dOX1NBTVBMRVJcbiNpbmNsdWRlPHBhY2tpbmdGdW5jdGlvbnM+XG4jZW5kaWZc
bnZvaWQgbWFpbigpXG57XG52ZWM0IGNvbG9yPXZlYzQoMC4wKTtcbmZsb2F0IGF2ZXJhZ2U9MC4w
O1xuZm9yIChpbnQgaT0wOyBpPDk7IGkrKylcbntcbmNvbG9yPXRleHR1cmUyRCh0ZXh0dXJlU2Ft
cGxlcix2VVYrdmVjMihoYWxmRGVzdFBpeGVsU2l6ZSxoYWxmRGVzdFBpeGVsU2l6ZSkrZHNPZmZz
ZXRzW2ldKTtcbmF2ZXJhZ2UrPWNvbG9yLnI7XG59XG5hdmVyYWdlLz05LjA7XG4jaWZkZWYgRklO
QUxfRE9XTl9TQU1QTEVSXG5nbF9GcmFnQ29sb3I9cGFjayhhdmVyYWdlKTtcbiNlbHNlXG5nbF9G
cmFnQ29sb3I9dmVjNChhdmVyYWdlLGF2ZXJhZ2UsMC4wLDEuMCk7XG4jZW5kaWZcbn1cbiNlbmRp
ZlxuI2lmIGRlZmluZWQoSERSKVxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZUFkZGVyU2FtcGxl
cjtcbnVuaWZvcm0gZmxvYXQgYXZlcmFnZUx1bWluYW5jZTtcbnZvaWQgbWFpbigpXG57XG52ZWM0
IGNvbG9yPXRleHR1cmUyRCh0ZXh0dXJlQWRkZXJTYW1wbGVyLHZVVik7XG4jaWZuZGVmIEFVVE9f
RVhQT1NVUkVcbnZlYzQgYWRqdXN0ZWRDb2xvcj1jb2xvci9hdmVyYWdlTHVtaW5hbmNlO1xuY29s
b3I9YWRqdXN0ZWRDb2xvcjtcbmNvbG9yLmE9MS4wO1xuI2VuZGlmXG5nbF9GcmFnQ29sb3I9Y29s
b3I7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKExFTlNfRkxBUkUpXG4jZGVmaW5lIEdIT1NUUyAz
XG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zQ29sb3JTYW1wbGVyO1xudW5pZm9ybSBmbG9hdCBzdHJl
bmd0aDtcbnVuaWZvcm0gZmxvYXQgZ2hvc3REaXNwZXJzYWw7XG51bmlmb3JtIGZsb2F0IGhhbG9X
aWR0aDtcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xudW5pZm9ybSBmbG9hdCBkaXN0b3J0aW9u
U3RyZW5ndGg7XG5mbG9hdCBoYXNoKHZlYzIgcClcbntcbmZsb2F0IGg9ZG90KHAsdmVjMigxMjcu
MSwzMTEuNykpO1xucmV0dXJuIC0xLjArMi4wKmZyYWN0KHNpbihoKSo0Mzc1OC41NDUzMTIzKTtc
bn1cbmZsb2F0IG5vaXNlKGluIHZlYzIgcClcbntcbnZlYzIgaT1mbG9vcihwKTtcbnZlYzIgZj1m
cmFjdChwKTtcbnZlYzIgdT1mKmYqKDMuMC0yLjAqZik7XG5yZXR1cm4gbWl4KG1peChoYXNoKGkr
dmVjMigwLjAsMC4wKSksXG5oYXNoKGkrdmVjMigxLjAsMC4wKSksdS54KSxcbm1peChoYXNoKGkr
dmVjMigwLjAsMS4wKSksXG5oYXNoKGkrdmVjMigxLjAsMS4wKSksdS54KSx1LnkpO1xufVxuZmxv
YXQgZmJtKHZlYzIgcClcbntcbmZsb2F0IGY9MC4wO1xuZis9MC41MDAwKm5vaXNlKHApOyBwKj0y
LjAyO1xuZis9MC4yNTAwKm5vaXNlKHApOyBwKj0yLjAzO1xuZis9MC4xMjUwKm5vaXNlKHApOyBw
Kj0yLjAxO1xuZis9MC4wNjI1Km5vaXNlKHApOyBwKj0yLjA0O1xuZi89MC45Mzc1O1xucmV0dXJu
IGY7XG59XG52ZWMzIHBhdHRlcm4odmVjMiB1dilcbntcbnZlYzIgcD0tMS4wKzIuMCp1djtcbmZs
b2F0IHAyPWRvdChwLHApO1xuZmxvYXQgZj1mYm0odmVjMigxNS4wKnAyKSkvMi4wO1xuZmxvYXQg
cj0wLjIrMC42KnNpbigxMi41Kmxlbmd0aCh1di12ZWMyKDAuNSkpKTtcbmZsb2F0IGc9MC4yKzAu
NipzaW4oMjAuNSpsZW5ndGgodXYtdmVjMigwLjUpKSk7XG5mbG9hdCBiPTAuMiswLjYqc2luKDE3
LjIqbGVuZ3RoKHV2LXZlYzIoMC41KSkpO1xucmV0dXJuICgxLjAtZikqdmVjMyhyLGcsYik7XG59
XG5mbG9hdCBsdW1pbmFuY2UodmVjMyBjb2xvcilcbntcbnJldHVybiBkb3QoY29sb3IucmdiLHZl
YzMoMC4yMTI2LDAuNzE1MiwwLjA3MjIpKTtcbn1cbnZlYzQgdGV4dHVyZURpc3RvcnRlZChzYW1w
bGVyMkQgdGV4LHZlYzIgdGV4Y29vcmQsdmVjMiBkaXJlY3Rpb24sdmVjMyBkaXN0b3J0aW9uKVxu
e1xucmV0dXJuIHZlYzQoXG50ZXh0dXJlMkQodGV4LHRleGNvb3JkK2RpcmVjdGlvbipkaXN0b3J0
aW9uLnIpLnIsXG50ZXh0dXJlMkQodGV4LHRleGNvb3JkK2RpcmVjdGlvbipkaXN0b3J0aW9uLmcp
LmcsXG50ZXh0dXJlMkQodGV4LHRleGNvb3JkK2RpcmVjdGlvbipkaXN0b3J0aW9uLmIpLmIsXG4x
LjBcbik7XG59XG52b2lkIG1haW4odm9pZClcbntcbnZlYzIgdXY9LXZVVit2ZWMyKDEuMCk7XG52
ZWMyIGdob3N0RGlyPSh2ZWMyKDAuNSktdXYpKmdob3N0RGlzcGVyc2FsO1xudmVjMiB0ZXhlbFNp
emU9MS4wL3Jlc29sdXRpb247XG52ZWMzIGRpc3RvcnRpb249dmVjMygtdGV4ZWxTaXplLngqZGlz
dG9ydGlvblN0cmVuZ3RoLDAuMCx0ZXhlbFNpemUueCpkaXN0b3J0aW9uU3RyZW5ndGgpO1xudmVj
NCByZXN1bHQ9dmVjNCgwLjApO1xuZmxvYXQgZ2hvc3RJbmRpY2U9MS4wO1xuZm9yIChpbnQgaT0w
OyBpPEdIT1NUUzsgKytpKVxue1xudmVjMiBvZmZzZXQ9ZnJhY3QodXYrZ2hvc3REaXIqZ2hvc3RJ
bmRpY2UpO1xuZmxvYXQgd2VpZ2h0PWxlbmd0aCh2ZWMyKDAuNSktb2Zmc2V0KS9sZW5ndGgodmVj
MigwLjUpKTtcbndlaWdodD1wb3coMS4wLXdlaWdodCwxMC4wKTtcbnJlc3VsdCs9dGV4dHVyZURp
c3RvcnRlZCh0ZXh0dXJlU2FtcGxlcixvZmZzZXQsbm9ybWFsaXplKGdob3N0RGlyKSxkaXN0b3J0
aW9uKSp3ZWlnaHQqc3RyZW5ndGg7XG5naG9zdEluZGljZSs9MS4wO1xufVxudmVjMiBoYWxvVmVj
PW5vcm1hbGl6ZShnaG9zdERpcikqaGFsb1dpZHRoO1xuZmxvYXQgd2VpZ2h0PWxlbmd0aCh2ZWMy
KDAuNSktZnJhY3QodXYraGFsb1ZlYykpL2xlbmd0aCh2ZWMyKDAuNSkpO1xud2VpZ2h0PXBvdygx
LjAtd2VpZ2h0LDEwLjApO1xucmVzdWx0Kz10ZXh0dXJlRGlzdG9ydGVkKHRleHR1cmVTYW1wbGVy
LGZyYWN0KHV2K2hhbG9WZWMpLG5vcm1hbGl6ZShnaG9zdERpciksZGlzdG9ydGlvbikqd2VpZ2h0
KnN0cmVuZ3RoO1xucmVzdWx0Kj10ZXh0dXJlMkQobGVuc0NvbG9yU2FtcGxlcix2ZWMyKGxlbmd0
aCh2ZWMyKDAuNSktdXYpL2xlbmd0aCh2ZWMyKDAuNSkpKSk7XG5nbF9GcmFnQ29sb3I9cmVzdWx0
O1xufVxuI2VuZGlmXG4jaWYgZGVmaW5lZChMRU5TX0ZMQVJFX0NPTVBPU0UpXG51bmlmb3JtIHNh
bXBsZXIyRCBvdGhlclNhbXBsZXI7XG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zRGlydFNhbXBsZXI7
XG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zU3RhclNhbXBsZXI7XG51bmlmb3JtIG1hdDQgbGVuc1N0
YXJNYXRyaXg7XG52b2lkIG1haW4odm9pZClcbntcbnZlYzIgbGVuc0ZsYXJlQ29vcmRzPShsZW5z
U3Rhck1hdHJpeCp2ZWM0KHZVViwxLjAsMS4wKSkueHk7XG52ZWM0IGxlbnNNb2Q9dGV4dHVyZTJE
KGxlbnNEaXJ0U2FtcGxlcix2VVYpO1xubGVuc01vZCs9dGV4dHVyZTJEKGxlbnNTdGFyU2FtcGxl
cix2VVYpO1xudmVjNCByZXN1bHQ9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVikqbGVuc01v
ZDtcbmdsX0ZyYWdDb2xvcj10ZXh0dXJlMkQob3RoZXJTYW1wbGVyLHZVVikrcmVzdWx0O1xufVxu
I2VuZGlmXG4jaWYgZGVmaW5lZChERVBUSF9PRl9GSUVMRClcbnVuaWZvcm0gc2FtcGxlcjJEIG90
aGVyU2FtcGxlcjtcbnVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoU2FtcGxlcjtcbnVuaWZvcm0gZmxv
YXQgZGlzdGFuY2U7XG52b2lkIG1haW4odm9pZClcbntcbnZlYzQgc2hhcnA9dGV4dHVyZTJEKG90
aGVyU2FtcGxlcix2VVYpO1xudmVjNCBibHVyPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxlcix2VVYp
O1xuZmxvYXQgZGlzdD1jbGFtcCh0ZXh0dXJlMkQoZGVwdGhTYW1wbGVyLHZVVikucipkaXN0YW5j
ZSwwLjAsMS4wKTtcbmZsb2F0IGZhY3Rvcj0wLjA7XG5pZiAoZGlzdDwwLjA1KVxuZmFjdG9yPTEu
MDtcbmVsc2UgaWYgKGRpc3Q8MC4xKVxuZmFjdG9yPTIwLjAqKDAuMS1kaXN0KTtcbmVsc2UgaWYg
KGRpc3Q8MC41KVxuZmFjdG9yPTAuMDtcbmVsc2VcbmZhY3Rvcj0yLjAqKGRpc3QtMC41KTtcbmZh
Y3Rvcj1jbGFtcChmYWN0b3IsMC4wLDAuOTApO1xuZ2xfRnJhZ0NvbG9yPW1peChzaGFycCxibHVy
LGZhY3Rvcik7XG59XG4jZW5kaWZcbiNpZiBkZWZpbmVkKE1PVElPTl9CTFVSKVxudW5pZm9ybSBt
YXQ0IGludmVyc2VWaWV3UHJvamVjdGlvbjtcbnVuaWZvcm0gbWF0NCBwcmV2Vmlld1Byb2plY3Rp
b247XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6ZTtcbnVuaWZvcm0gZmxvYXQgbW90aW9uU2NhbGU7
XG51bmlmb3JtIGZsb2F0IG1vdGlvblN0cmVuZ3RoO1xudW5pZm9ybSBzYW1wbGVyMkQgZGVwdGhT
YW1wbGVyO1xudm9pZCBtYWluKHZvaWQpXG57XG52ZWMyIHRleGVsU2l6ZT0xLjAvc2NyZWVuU2l6
ZTtcbmZsb2F0IGRlcHRoPXRleHR1cmUyRChkZXB0aFNhbXBsZXIsdlVWKS5yO1xudmVjNCBjcG9z
PXZlYzQodlVWKjIuMC0xLjAsZGVwdGgsMS4wKTtcbmNwb3M9Y3BvcyppbnZlcnNlVmlld1Byb2pl
Y3Rpb247XG52ZWM0IHBwb3M9Y3BvcypwcmV2Vmlld1Byb2plY3Rpb247XG5wcG9zLnh5ei89cHBv
cy53O1xucHBvcy54eT1wcG9zLnh5KjAuNSswLjU7XG52ZWMyIHZlbG9jaXR5PShwcG9zLnh5LXZV
VikqbW90aW9uU2NhbGUqbW90aW9uU3RyZW5ndGg7XG5mbG9hdCBzcGVlZD1sZW5ndGgodmVsb2Np
dHkvdGV4ZWxTaXplKTtcbmludCBuU2FtcGxlcz1pbnQoY2xhbXAoc3BlZWQsMS4wLE1BWF9NT1RJ
T05fU0FNUExFUykpO1xudmVjNCByZXN1bHQ9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHZVVik7
XG5mb3IgKGludCBpPTE7IGk8aW50KE1BWF9NT1RJT05fU0FNUExFUyk7ICsraSkge1xuaWYgKGk+
PW5TYW1wbGVzKVxuYnJlYWs7XG52ZWMyIG9mZnNldDE9dlVWK3ZlbG9jaXR5KihmbG9hdChpKS9m
bG9hdChuU2FtcGxlcy0xKS0wLjUpO1xucmVzdWx0Kz10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIs
b2Zmc2V0MSk7XG59XG5nbF9GcmFnQ29sb3I9cmVzdWx0L2Zsb2F0KG5TYW1wbGVzKTtcbn1cbiNl
bmRpZlxuIjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2
YXIgc3RhbmRhcmRQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsK
KworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy9zdGVyZW9zY29waWNJbnRlcmxhY2Uu
ZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9TaGFkZXJzL3N0ZXJlb3Njb3BpY0ludGVybGFjZS5m
cmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogc3RlcmVvc2NvcGljSW50ZXJs
YWNlUGl4ZWxTaGFkZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBv
cnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNr
X3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic3Rl
cmVvc2NvcGljSW50ZXJsYWNlUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0ZXJl
b3Njb3BpY0ludGVybGFjZVBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZm
ZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3N0ZXJlb3Njb3BpY0ludGVybGFjZVBpeGVsU2hhZGVy
JzsKK3ZhciBzaGFkZXIgPSAiY29uc3QgdmVjMyBUV089dmVjMygyLjAsMi4wLDIuMCk7XG52YXJ5
aW5nIHZlYzIgdlVWO1xudW5pZm9ybSBzYW1wbGVyMkQgY2FtQVNhbXBsZXI7XG51bmlmb3JtIHNh
bXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcbnVuaWZvcm0gdmVjMiBzdGVwU2l6ZTtcbnZvaWQgbWFp
bih2b2lkKVxue1xuYm9vbCB1c2VDYW1CO1xudmVjMiB0ZXhDb29yZDE7XG52ZWMyIHRleENvb3Jk
MjtcbnZlYzMgZnJhZzE7XG52ZWMzIGZyYWcyO1xuI2lmZGVmIElTX1NURVJFT1NDT1BJQ19IT1JJ
WlxudXNlQ2FtQj12VVYueD4wLjU7XG50ZXhDb29yZDE9dmVjMih1c2VDYW1CID8gKHZVVi54LTAu
NSkqMi4wIDogdlVWLngqMi4wLHZVVi55KTtcbnRleENvb3JkMj12ZWMyKHRleENvb3JkMS54K3N0
ZXBTaXplLngsdlVWLnkpO1xuI2Vsc2VcbnVzZUNhbUI9dlVWLnk+MC41O1xudGV4Q29vcmQxPXZl
YzIodlVWLngsdXNlQ2FtQiA/ICh2VVYueS0wLjUpKjIuMCA6IHZVVi55KjIuMCk7XG50ZXhDb29y
ZDI9dmVjMih2VVYueCx0ZXhDb29yZDEueStzdGVwU2l6ZS55KTtcbiNlbmRpZlxuXG5pZiAodXNl
Q2FtQil7XG5mcmFnMT10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdGV4Q29vcmQxKS5yZ2I7XG5m
cmFnMj10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdGV4Q29vcmQyKS5yZ2I7XG59ZWxzZXtcbmZy
YWcxPXRleHR1cmUyRChjYW1BU2FtcGxlciAsdGV4Q29vcmQxKS5yZ2I7XG5mcmFnMj10ZXh0dXJl
MkQoY2FtQVNhbXBsZXIgLHRleENvb3JkMikucmdiO1xufVxuZ2xfRnJhZ0NvbG9yPXZlYzQoKGZy
YWcxK2ZyYWcyKS9UV08sMS4wKTtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOwor
LyoqIEBoaWRkZW4gKi8KK3ZhciBzdGVyZW9zY29waWNJbnRlcmxhY2VQaXhlbFNoYWRlciA9IHsg
bmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4v
U2hhZGVycy90b25lbWFwLmZyYWdtZW50LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvdG9uZW1hcC5mcmFnbWVudC50cyAq
KiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IHRvbmVtYXBQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0
cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJ0b25lbWFwUGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRv
bmVtYXBQaXhlbFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFs
c19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVjdC50cyIpOwor
Cit2YXIgbmFtZSA9ICd0b25lbWFwUGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbnZhcnlp
bmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlU2FtcGxlcjtcblxudW5pZm9y
bSBmbG9hdCBfRXhwb3N1cmVBZGp1c3RtZW50O1xuI2lmIGRlZmluZWQoSEFCTEVfVE9ORU1BUFBJ
TkcpXG5jb25zdCBmbG9hdCBBPTAuMTU7XG5jb25zdCBmbG9hdCBCPTAuNTA7XG5jb25zdCBmbG9h
dCBDPTAuMTA7XG5jb25zdCBmbG9hdCBEPTAuMjA7XG5jb25zdCBmbG9hdCBFPTAuMDI7XG5jb25z
dCBmbG9hdCBGPTAuMzA7XG5jb25zdCBmbG9hdCBXPTExLjI7XG4jZW5kaWZcbmZsb2F0IEx1bWlu
YW5jZSh2ZWMzIGMpXG57XG5yZXR1cm4gZG90KGMsdmVjMygwLjIyLDAuNzA3LDAuMDcxKSk7XG59
XG52b2lkIG1haW4odm9pZClcbntcbnZlYzMgY29sb3VyPXRleHR1cmUyRCh0ZXh0dXJlU2FtcGxl
cix2VVYpLnJnYjtcbiNpZiBkZWZpbmVkKFJFSU5IQVJEX1RPTkVNQVBQSU5HKVxuZmxvYXQgbHVt
PUx1bWluYW5jZShjb2xvdXIucmdiKTtcbmZsb2F0IGx1bVRtPWx1bSpfRXhwb3N1cmVBZGp1c3Rt
ZW50O1xuZmxvYXQgc2NhbGU9bHVtVG0vKDEuMCtsdW1UbSk7XG5jb2xvdXIqPXNjYWxlL2x1bTtc
biNlbGlmIGRlZmluZWQoSEFCTEVfVE9ORU1BUFBJTkcpXG5jb2xvdXIqPV9FeHBvc3VyZUFkanVz
dG1lbnQ7XG5jb25zdCBmbG9hdCBFeHBvc3VyZUJpYXM9Mi4wO1xudmVjMyB4PUV4cG9zdXJlQmlh
cypjb2xvdXI7XG52ZWMzIGN1cnI9KCh4KihBKngrQypCKStEKkUpLyh4KihBKngrQikrRCpGKSkt
RS9GO1xueD12ZWMzKFcsVyxXKTtcbnZlYzMgd2hpdGVTY2FsZT0xLjAvKCgoeCooQSp4K0MqQikr
RCpFKS8oeCooQSp4K0IpK0QqRikpLUUvRik7XG5jb2xvdXI9Y3Vycip3aGl0ZVNjYWxlO1xuI2Vs
aWYgZGVmaW5lZChPUFRJTUlaRURfSEVKSURBV1NPTl9UT05FTUFQUElORylcbmNvbG91cio9X0V4
cG9zdXJlQWRqdXN0bWVudDtcbnZlYzMgWD1tYXgodmVjMygwLjAsMC4wLDAuMCksY29sb3VyLTAu
MDA0KTtcbnZlYzMgcmV0Q29sb3I9KFgqKDYuMipYKzAuNSkpLyhYKig2LjIqWCsxLjcpKzAuMDYp
O1xuY29sb3VyPXJldENvbG9yKnJldENvbG9yO1xuI2VsaWYgZGVmaW5lZChQSE9UT0dSQVBISUNf
VE9ORU1BUFBJTkcpXG5jb2xvdXI9dmVjMygxLjAsMS4wLDEuMCktZXhwMigtX0V4cG9zdXJlQWRq
dXN0bWVudCpjb2xvdXIpO1xuI2VuZGlmXG5nbF9GcmFnQ29sb3I9dmVjNChjb2xvdXIucmdiLDEu
MCk7XG59IjsKK19NYXRlcmlhbHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkVmZmVjdCJdLlNoYWRlcnNTdG9yZVtuYW1lXSA9IHNoYWRlcjsKKy8qKiBAaGlkZGVuICovCit2
YXIgdG9uZW1hcFBpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9Owor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL3ZvbHVtZXRyaWNMaWdodFNjYXR0ZXJp
bmcuZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy92b2x1bWV0cmljTGlnaHRT
Y2F0dGVyaW5nLmZyYWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogdm9s
dW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1BpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgInZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQaXhlbFNoYWRlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gdm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1BpeGVsU2hhZGVyOyB9
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxz
L2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3ZvbHVt
ZXRyaWNMaWdodFNjYXR0ZXJpbmdQaXhlbFNoYWRlcic7Cit2YXIgc2hhZGVyID0gInVuaWZvcm0g
c2FtcGxlcjJEIHRleHR1cmVTYW1wbGVyO1xudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTY2F0dGVy
aW5nU2FtcGxlcjtcbnVuaWZvcm0gZmxvYXQgZGVjYXk7XG51bmlmb3JtIGZsb2F0IGV4cG9zdXJl
O1xudW5pZm9ybSBmbG9hdCB3ZWlnaHQ7XG51bmlmb3JtIGZsb2F0IGRlbnNpdHk7XG51bmlmb3Jt
IHZlYzIgbWVzaFBvc2l0aW9uT25TY3JlZW47XG52YXJ5aW5nIHZlYzIgdlVWO1xudm9pZCBtYWlu
KHZvaWQpIHtcbnZlYzIgdGM9dlVWO1xudmVjMiBkZWx0YVRleENvb3JkPSh0Yy1tZXNoUG9zaXRp
b25PblNjcmVlbi54eSk7XG5kZWx0YVRleENvb3JkKj0xLjAvZmxvYXQoTlVNX1NBTVBMRVMpKmRl
bnNpdHk7XG5mbG9hdCBpbGx1bWluYXRpb25EZWNheT0xLjA7XG52ZWM0IGNvbG9yPXRleHR1cmUy
RChsaWdodFNjYXR0ZXJpbmdTYW1wbGVyLHRjKSowLjQ7XG5mb3IoaW50IGk9MDsgaTxOVU1fU0FN
UExFUzsgaSsrKSB7XG50Yy09ZGVsdGFUZXhDb29yZDtcbnZlYzQgZGF0YVNhbXBsZT10ZXh0dXJl
MkQobGlnaHRTY2F0dGVyaW5nU2FtcGxlcix0YykqMC40O1xuZGF0YVNhbXBsZSo9aWxsdW1pbmF0
aW9uRGVjYXkqd2VpZ2h0O1xuY29sb3IrPWRhdGFTYW1wbGU7XG5pbGx1bWluYXRpb25EZWNheSo9
ZGVjYXk7XG59XG52ZWM0IHJlYWxDb2xvcj10ZXh0dXJlMkQodGV4dHVyZVNhbXBsZXIsdlVWKTtc
bmdsX0ZyYWdDb2xvcj0oKHZlYzQoKHZlYzMoY29sb3Iucixjb2xvci5nLGNvbG9yLmIpKmV4cG9z
dXJlKSwxKSkrKHJlYWxDb2xvciooMS41LTAuNCkpKTtcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHZvbHVtZXRyaWNMaWdodFNjYXR0ZXJp
bmdQaXhlbFNoYWRlciA9IHsgbmFtZTogbmFtZSwgc2hhZGVyOiBzaGFkZXIgfTsKKworCisvKioq
LyB9KSwKKworLyoqKi8gIi4vU2hhZGVycy92b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUGFzcy5m
cmFnbWVudC50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy92b2x1bWV0cmljTGlnaHRT
Y2F0dGVyaW5nUGFzcy5mcmFnbWVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3Zp
ZGVkOiB2b2x1bWV0cmljTGlnaHRTY2F0dGVyaW5nUGFzc1BpeGVsU2hhZGVyICovCisvKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQYXNz
UGl4ZWxTaGFkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHZvbHVtZXRyaWNMaWdodFNjYXR0ZXJp
bmdQYXNzUGl4ZWxTaGFkZXI7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlh
bHNfZWZmZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuLi9NYXRlcmlhbHMvZWZmZWN0ICovICIuL01hdGVyaWFscy9lZmZlY3QudHMiKTsK
KwordmFyIG5hbWUgPSAndm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3NQaXhlbFNoYWRlcic7
Cit2YXIgc2hhZGVyID0gIiNpZiBkZWZpbmVkKEFMUEhBVEVTVCkgfHwgZGVmaW5lZChORUVEX1VW
KVxudmFyeWluZyB2ZWMyIHZVVjtcbiNlbmRpZlxuI2lmIGRlZmluZWQoQUxQSEFURVNUKVxudW5p
Zm9ybSBzYW1wbGVyMkQgZGlmZnVzZVNhbXBsZXI7XG4jZW5kaWZcbnZvaWQgbWFpbih2b2lkKVxu
e1xuI2lmIGRlZmluZWQoQUxQSEFURVNUKVxudmVjNCBkaWZmdXNlQ29sb3I9dGV4dHVyZTJEKGRp
ZmZ1c2VTYW1wbGVyLHZVVik7XG5pZiAoZGlmZnVzZUNvbG9yLmE8MC40KVxuZGlzY2FyZDtcbiNl
bmRpZlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMC4wLDAuMCwwLjAsMS4wKTtcbn1cbiI7CitfTWF0ZXJp
YWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJz
U3RvcmVbbmFtZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHZvbHVtZXRyaWNMaWdo
dFNjYXR0ZXJpbmdQYXNzUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVy
IH07CisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvdm9sdW1ldHJpY0xpZ2h0U2Nh
dHRlcmluZ1Bhc3MudmVydGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy92b2x1bWV0
cmljTGlnaHRTY2F0dGVyaW5nUGFzcy52ZXJ0ZXgudHMgKioqIQorICBcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMg
cHJvdmlkZWQ6IHZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQYXNzVmVydGV4U2hhZGVyICovCisv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInZvbHVtZXRyaWNMaWdodFNjYXR0ZXJp
bmdQYXNzVmVydGV4U2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2b2x1bWV0cmljTGlnaHRT
Y2F0dGVyaW5nUGFzc1ZlcnRleFNoYWRlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9lZmZlY3QgKi8gIi4vTWF0ZXJpYWxzL2VmZmVj
dC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9ib25lc0Rl
Y2xhcmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2JvbmVzRGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9T
aGFkZXJzSW5jbHVkZS9ib25lc0RlY2xhcmF0aW9uLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1NoYWRlcnNJbmNsdWRlX21vcnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9u
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L1NoYWRlcnNJbmNsdWRlL21vcnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9uICovICIu
L1NoYWRlcnMvU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4R2xvYmFsRGVjbGFyYXRp
b24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfbW9ycGhU
YXJnZXRzVmVydGV4RGVjbGFyYXRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vU2hhZGVyc0luY2x1ZGUvbW9ycGhUYXJnZXRzVmVydGV4
RGVjbGFyYXRpb24gKi8gIi4vU2hhZGVycy9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0
ZXhEZWNsYXJhdGlvbi50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5j
bHVkZV9pbnN0YW5jZXNEZWNsYXJhdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TaGFkZXJzSW5jbHVkZS9pbnN0YW5jZXNEZWNsYXJh
dGlvbiAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc0RlY2xhcmF0aW9uLnRz
Iik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNJbmNsdWRlX21vcnBoVGFyZ2V0
c1ZlcnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9TaGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXggKi8gIi4vU2hhZGVycy9T
aGFkZXJzSW5jbHVkZS9tb3JwaFRhcmdldHNWZXJ0ZXgudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfU2hhZGVyc0luY2x1ZGVfaW5zdGFuY2VzVmVydGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1NoYWRlcnNJbmNsdWRlL2lu
c3RhbmNlc1ZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNsdWRlL2luc3RhbmNlc1ZlcnRl
eC50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TaGFkZXJzSW5jbHVkZV9ib25lc1Zl
cnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9TaGFkZXJzSW5jbHVkZS9ib25lc1ZlcnRleCAqLyAiLi9TaGFkZXJzL1NoYWRlcnNJbmNs
dWRlL2JvbmVzVmVydGV4LnRzIik7CisKKworCisKKworCisKKwordmFyIG5hbWUgPSAndm9sdW1l
dHJpY0xpZ2h0U2NhdHRlcmluZ1Bhc3NWZXJ0ZXhTaGFkZXInOwordmFyIHNoYWRlciA9ICJcbmF0
dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuI2luY2x1ZGU8Ym9uZXNEZWNsYXJhdGlvbj5cbiNpbmNs
dWRlPG1vcnBoVGFyZ2V0c1ZlcnRleEdsb2JhbERlY2xhcmF0aW9uPlxuI2luY2x1ZGU8bW9ycGhU
YXJnZXRzVmVydGV4RGVjbGFyYXRpb24+WzAuLm1heFNpbXVsdGFuZW91c01vcnBoVGFyZ2V0c11c
blxuI2luY2x1ZGU8aW5zdGFuY2VzRGVjbGFyYXRpb24+XG51bmlmb3JtIG1hdDQgdmlld1Byb2pl
Y3Rpb247XG51bmlmb3JtIHZlYzIgZGVwdGhWYWx1ZXM7XG4jaWYgZGVmaW5lZChBTFBIQVRFU1Qp
IHx8IGRlZmluZWQoTkVFRF9VVilcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIG1hdDQgZGlm
ZnVzZU1hdHJpeDtcbiNpZmRlZiBVVjFcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuI2VuZGlmXG4jaWZk
ZWYgVVYyXG5hdHRyaWJ1dGUgdmVjMiB1djI7XG4jZW5kaWZcbiNlbmRpZlxudm9pZCBtYWluKHZv
aWQpXG57XG52ZWMzIHBvc2l0aW9uVXBkYXRlZD1wb3NpdGlvbjtcbiNpZiAoZGVmaW5lZChBTFBI
QVRFU1QpIHx8IGRlZmluZWQoTkVFRF9VVikpICYmIGRlZmluZWQoVVYxKVxudmVjMiB1dlVwZGF0
ZWQ9dXY7XG4jZW5kaWZcbiNpbmNsdWRlPG1vcnBoVGFyZ2V0c1ZlcnRleD5bMC4ubWF4U2ltdWx0
YW5lb3VzTW9ycGhUYXJnZXRzXVxuI2luY2x1ZGU8aW5zdGFuY2VzVmVydGV4PlxuI2luY2x1ZGU8
Ym9uZXNWZXJ0ZXg+XG4jaWYgZGVmaW5lZChBTFBIQVRFU1QpIHx8IGRlZmluZWQoQkFTSUNfUkVO
REVSKVxuI2lmZGVmIFVWMVxudlVWPXZlYzIoZGlmZnVzZU1hdHJpeCp2ZWM0KHV2VXBkYXRlZCwx
LjAsMC4wKSk7XG4jZW5kaWZcbiNpZmRlZiBVVjJcbnZVVj12ZWMyKGRpZmZ1c2VNYXRyaXgqdmVj
NCh1djIsMS4wLDAuMCkpO1xuI2VuZGlmXG4jZW5kaWZcbn1cbiI7CitfTWF0ZXJpYWxzX2VmZmVj
dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJFZmZlY3QiXS5TaGFkZXJzU3RvcmVbbmFt
ZV0gPSBzaGFkZXI7CisvKiogQGhpZGRlbiAqLwordmFyIHZvbHVtZXRyaWNMaWdodFNjYXR0ZXJp
bmdQYXNzVmVydGV4U2hhZGVyID0geyBuYW1lOiBuYW1lLCBzaGFkZXI6IHNoYWRlciB9OworCisK
Ky8qKiovIH0pLAorCisvKioqLyAiLi9TaGFkZXJzL3ZyRGlzdG9ydGlvbkNvcnJlY3Rpb24uZnJh
Z21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiEqXAorICAhKioqIC4vU2hhZGVycy92ckRpc3RvcnRpb25Db3JyZWN0aW9uLmZy
YWdtZW50LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogdnJEaXN0b3J0aW9uQ29ycmVj
dGlvblBpeGVsU2hhZGVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInZy
RGlzdG9ydGlvbkNvcnJlY3Rpb25QaXhlbFNoYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdnJE
aXN0b3J0aW9uQ29ycmVjdGlvblBpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9NYXRlcmlhbHMv
ZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3ZyRGlzdG9ydGlvbkNvcnJlY3Rpb25QaXhlbFNo
YWRlcic7Cit2YXIgc2hhZGVyID0gIlxudmFyeWluZyB2ZWMyIHZVVjtcbnVuaWZvcm0gc2FtcGxl
cjJEIHRleHR1cmVTYW1wbGVyO1xudW5pZm9ybSB2ZWMyIExlbnNDZW50ZXI7XG51bmlmb3JtIHZl
YzIgU2NhbGU7XG51bmlmb3JtIHZlYzIgU2NhbGVJbjtcbnVuaWZvcm0gdmVjNCBIbWRXYXJwUGFy
YW07XG52ZWMyIEhtZFdhcnAodmVjMiBpbjAxKSB7XG52ZWMyIHRoZXRhPShpbjAxLUxlbnNDZW50
ZXIpKlNjYWxlSW47XG5mbG9hdCByU3E9dGhldGEueCp0aGV0YS54K3RoZXRhLnkqdGhldGEueTtc
bnZlYzIgcnZlY3Rvcj10aGV0YSooSG1kV2FycFBhcmFtLngrSG1kV2FycFBhcmFtLnkqclNxK0ht
ZFdhcnBQYXJhbS56KnJTcSpyU3ErSG1kV2FycFBhcmFtLncqclNxKnJTcSpyU3EpO1xucmV0dXJu
IExlbnNDZW50ZXIrU2NhbGUqcnZlY3Rvcjtcbn1cbnZvaWQgbWFpbih2b2lkKVxue1xudmVjMiB0
Yz1IbWRXYXJwKHZVVik7XG5pZiAodGMueCA8MC4wIHx8IHRjLng+MS4wIHx8IHRjLnk8MC4wIHx8
IHRjLnk+MS4wKVxuZ2xfRnJhZ0NvbG9yPXZlYzQoMC4wLDAuMCwwLjAsMC4wKTtcbmVsc2V7XG5n
bF9GcmFnQ29sb3I9dGV4dHVyZTJEKHRleHR1cmVTYW1wbGVyLHRjKTtcbn1cbn0iOworX01hdGVy
aWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siRWZmZWN0Il0uU2hhZGVy
c1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8KK3ZhciB2ckRpc3RvcnRpb25D
b3JyZWN0aW9uUGl4ZWxTaGFkZXIgPSB7IG5hbWU6IG5hbWUsIHNoYWRlcjogc2hhZGVyIH07CisK
KworLyoqKi8gfSksCisKKy8qKiovICIuL1NoYWRlcnMvdnJNdWx0aXZpZXdUb1NpbmdsZXZpZXcu
ZnJhZ21lbnQudHMiOgorLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1NoYWRlcnMvdnJNdWx0aXZpZXdUb1NpbmdsZXZp
ZXcuZnJhZ21lbnQudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogdnJNdWx0aXZpZXdU
b1NpbmdsZXZpZXdQaXhlbFNoYWRlciAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJ2ck11bHRpdmlld1RvU2luZ2xldmlld1BpeGVsU2hhZGVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiB2ck11bHRpdmlld1RvU2luZ2xldmlld1BpeGVsU2hhZGVyOyB9KTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX2VmZmVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0ZXJpYWxzL2VmZmVjdCAqLyAiLi9N
YXRlcmlhbHMvZWZmZWN0LnRzIik7CisKK3ZhciBuYW1lID0gJ3ZyTXVsdGl2aWV3VG9TaW5nbGV2
aWV3UGl4ZWxTaGFkZXInOwordmFyIHNoYWRlciA9ICJwcmVjaXNpb24gbWVkaXVtcCBzYW1wbGVy
MkRBcnJheTtcbnZhcnlpbmcgdmVjMiB2VVY7XG51bmlmb3JtIHNhbXBsZXIyREFycmF5IG11bHRp
dmlld1NhbXBsZXI7XG51bmlmb3JtIGludCBpbWFnZUluZGV4O1xudm9pZCBtYWluKHZvaWQpXG57
XG5nbF9GcmFnQ29sb3I9dGV4dHVyZShtdWx0aXZpZXdTYW1wbGVyLHZlYzModlVWLGltYWdlSW5k
ZXgpKTtcbn0iOworX01hdGVyaWFsc19lZmZlY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siRWZmZWN0Il0uU2hhZGVyc1N0b3JlW25hbWVdID0gc2hhZGVyOworLyoqIEBoaWRkZW4gKi8K
K3ZhciB2ck11bHRpdmlld1RvU2luZ2xldmlld1BpeGVsU2hhZGVyID0geyBuYW1lOiBuYW1lLCBz
aGFkZXI6IHNoYWRlciB9OworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TcHJpdGVzL2luZGV4
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TcHJpdGVz
L2luZGV4LnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9y
dHMgcHJvdmlkZWQ6IFNwcml0ZSwgU3ByaXRlTWFuYWdlciwgU3ByaXRlUGFja2VkTWFuYWdlciwg
U3ByaXRlU2NlbmVDb21wb25lbnQgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9zcHJpdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vc3ByaXRlICovICIuL1Nwcml0ZXMvc3ByaXRlLnRzIik7CisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlNwcml0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3Nwcml0ZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTcHJpdGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfc3ByaXRlTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zcHJpdGVNYW5hZ2VyICovICIuL1Nwcml0ZXMvc3ByaXRl
TWFuYWdlci50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcHJpdGVNYW5hZ2VyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfc3ByaXRlTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
cHJpdGVNYW5hZ2VyIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Nwcml0ZVBh
Y2tlZE1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vc3ByaXRlUGFja2VkTWFuYWdlciAqLyAiLi9TcHJpdGVzL3Nwcml0ZVBhY2tl
ZE1hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3ByaXRlUGFja2VkTWFuYWdlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX3Nwcml0ZVBhY2tlZE1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siU3ByaXRlUGFja2VkTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9zcHJpdGVTY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zcHJpdGVTY2VuZUNvbXBvbmVudCAqLyAi
Li9TcHJpdGVzL3Nwcml0ZVNjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNw
cml0ZVNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfc3ByaXRlU2NlbmVDb21w
b25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU3ByaXRlU2NlbmVDb21wb25lbnQi
XTsgfSk7CisKKworCisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TcHJpdGVzL3Nwcml0
ZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAgISoqKiAuL1Nwcml0
ZXMvc3ByaXRlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBl
eHBvcnRzIHByb3ZpZGVkOiBTcHJpdGUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2Vi
cGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOwor
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiU3ByaXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTcHJpdGU7IH0pOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC52ZWN0b3IgKi8g
Ii4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0
aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi4vTWF0aHMvbWF0aC5jb2xvciAqLyAiLi9NYXRocy9tYXRoLmNvbG9yLnRz
Iik7CisKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBhIHNwcml0ZQorICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9zcHJpdGVzCisgKi8KK3ZhciBT
cHJpdGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyBhIG5ldyBTcHJpdGUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lCisg
ICAgICogQHBhcmFtIG1hbmFnZXIgZGVmaW5lcyB0aGUgbWFuYWdlcgorICAgICAqLworICAgIGZ1
bmN0aW9uIFNwcml0ZSgKKyAgICAvKiogZGVmaW5lcyB0aGUgbmFtZSAqLworICAgIG5hbWUsIG1h
bmFnZXIpIHsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgLyoqIEdldHMgb3Ig
c2V0cyB0aGUgbWFpbiBjb2xvciAqLworICAgICAgICB0aGlzLmNvbG9yID0gbmV3IF9NYXRoc19t
YXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkNvbG9yNCJdKDEuMCwgMS4w
LCAxLjAsIDEuMCk7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIHdpZHRoICovCisgICAg
ICAgIHRoaXMud2lkdGggPSAxLjA7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIGhlaWdo
dCAqLworICAgICAgICB0aGlzLmhlaWdodCA9IDEuMDsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0
cyByb3RhdGlvbiBhbmdsZSAqLworICAgICAgICB0aGlzLmFuZ2xlID0gMDsKKyAgICAgICAgLyoq
IEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBVViBjb29yZGluYXRlcyBzaG91
bGQgYmUgaW52ZXJ0ZWQgaW4gVSBheGlzICovCisgICAgICAgIHRoaXMuaW52ZXJ0VSA9IDA7Cisg
ICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgVVYgY29vcmRp
bmF0ZXMgc2hvdWxkIGJlIGludmVydGVkIGluIEIgYXhpcyAqLworICAgICAgICB0aGlzLmludmVy
dFYgPSAwOworICAgICAgICAvKiogR2V0cyB0aGUgbGlzdCBvZiBhdHRhY2hlZCBhbmltYXRpb25z
ICovCisgICAgICAgIHRoaXMuYW5pbWF0aW9ucyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKiog
R2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBzcHJpdGUgY2FuIGJlIHBp
Y2tlZCAqLworICAgICAgICB0aGlzLmlzUGlja2FibGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5f
YW5pbWF0aW9uU3RhcnRlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9sb29wQW5pbWF0aW9uID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX2Zyb21JbmRleCA9IDA7CisgICAgICAgIHRoaXMuX3RvSW5k
ZXggPSAwOworICAgICAgICB0aGlzLl9kZWxheSA9IDA7CisgICAgICAgIHRoaXMuX2RpcmVjdGlv
biA9IDE7CisgICAgICAgIHRoaXMuX3RpbWUgPSAwOworICAgICAgICAvKioKKyAgICAgICAgICog
R2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBzcHJpdGUgaXMgdmlzaWJs
ZSAocmVuZGVyYWJsZSkuIERlZmF1bHQgaXMgdHJ1ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5pc1Zpc2libGUgPSB0cnVlOworICAgICAgICB0aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjsKKyAg
ICAgICAgdGhpcy5fbWFuYWdlci5zcHJpdGVzLnB1c2godGhpcyk7CisgICAgICAgIHRoaXMucG9z
aXRpb24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
VmVjdG9yMyJdLlplcm8oKTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNwcml0
ZS5wcm90b3R5cGUsICJzaXplIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBz
ZXRzIHRoZSBzcHJpdGUgc2l6ZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy53aWR0aDsKKyAgICAgICAgfSwKKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMud2lkdGggPSB2YWx1ZTsK
KyAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAg
IC8qKgorICAgICAqIFN0YXJ0cyBhbiBhbmltYXRpb24KKyAgICAgKiBAcGFyYW0gZnJvbSBkZWZp
bmVzIHRoZSBpbml0aWFsIGtleQorICAgICAqIEBwYXJhbSB0byBkZWZpbmVzIHRoZSBlbmQga2V5
CisgICAgICogQHBhcmFtIGxvb3AgZGVmaW5lcyBpZiB0aGUgYW5pbWF0aW9uIG11c3QgbG9vcAor
ICAgICAqIEBwYXJhbSBkZWxheSBkZWZpbmVzIHRoZSBzdGFydCBkZWxheSAoaW4gbXMpCisgICAg
ICogQHBhcmFtIG9uQW5pbWF0aW9uRW5kIGRlZmluZXMgYSBjYWxsYmFjayB0byBjYWxsIHdoZW4g
YW5pbWF0aW9uIGVuZHMKKyAgICAgKi8KKyAgICBTcHJpdGUucHJvdG90eXBlLnBsYXlBbmltYXRp
b24gPSBmdW5jdGlvbiAoZnJvbSwgdG8sIGxvb3AsIGRlbGF5LCBvbkFuaW1hdGlvbkVuZCkgewor
ICAgICAgICB0aGlzLl9mcm9tSW5kZXggPSBmcm9tOworICAgICAgICB0aGlzLl90b0luZGV4ID0g
dG87CisgICAgICAgIHRoaXMuX2xvb3BBbmltYXRpb24gPSBsb29wOworICAgICAgICB0aGlzLl9k
ZWxheSA9IGRlbGF5OworICAgICAgICB0aGlzLl9hbmltYXRpb25TdGFydGVkID0gdHJ1ZTsKKyAg
ICAgICAgaWYgKGZyb20gPCB0bykgeworICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gMTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9
IC0xOworICAgICAgICAgICAgdGhpcy5fdG9JbmRleCA9IGZyb207CisgICAgICAgICAgICB0aGlz
Ll9mcm9tSW5kZXggPSB0bzsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmNlbGxJbmRleCA9IGZy
b207CisgICAgICAgIHRoaXMuX3RpbWUgPSAwOworICAgICAgICB0aGlzLl9vbkFuaW1hdGlvbkVu
ZCA9IG9uQW5pbWF0aW9uRW5kOworICAgIH07CisgICAgLyoqIFN0b3BzIGN1cnJlbnQgYW5pbWF0
aW9uIChpZiBhbnkpICovCisgICAgU3ByaXRlLnByb3RvdHlwZS5zdG9wQW5pbWF0aW9uID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB0aGlzLl9hbmltYXRpb25TdGFydGVkID0gZmFsc2U7CisgICAg
fTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIFNwcml0ZS5wcm90b3R5cGUuX2FuaW1hdGUgPSBm
dW5jdGlvbiAoZGVsdGFUaW1lKSB7CisgICAgICAgIGlmICghdGhpcy5fYW5pbWF0aW9uU3RhcnRl
ZCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3RpbWUg
Kz0gZGVsdGFUaW1lOworICAgICAgICBpZiAodGhpcy5fdGltZSA+IHRoaXMuX2RlbGF5KSB7Cisg
ICAgICAgICAgICB0aGlzLl90aW1lID0gdGhpcy5fdGltZSAlIHRoaXMuX2RlbGF5OworICAgICAg
ICAgICAgdGhpcy5jZWxsSW5kZXggKz0gdGhpcy5fZGlyZWN0aW9uOworICAgICAgICAgICAgaWYg
KHRoaXMuX2RpcmVjdGlvbiA+IDAgJiYgdGhpcy5jZWxsSW5kZXggPiB0aGlzLl90b0luZGV4IHx8
IHRoaXMuX2RpcmVjdGlvbiA8IDAgJiYgdGhpcy5jZWxsSW5kZXggPCB0aGlzLl9mcm9tSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fbG9vcEFuaW1hdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLmNlbGxJbmRleCA9IHRoaXMuX2RpcmVjdGlvbiA+IDAgPyB0aGlzLl9m
cm9tSW5kZXggOiB0aGlzLl90b0luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jZWxsSW5kZXggPSB0aGlzLl90
b0luZGV4OworICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbmltYXRpb25TdGFydGVkID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vbkFuaW1hdGlvbkVuZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25BbmltYXRpb25FbmQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNwb3NlV2hlbkZpbmlz
aGVkQW5pbWF0aW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH07CisgICAgLyoqIFJlbGVhc2UgYXNzb2NpYXRlZCByZXNvdXJjZXMg
Ki8KKyAgICBTcHJpdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlci5zcHJpdGVzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fbWFuYWdlci5zcHJpdGVzW2ldID09IHRoaXMpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VyLnNwcml0ZXMuc3BsaWNlKGksIDEpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gU3ByaXRlOworfSgpKTsKKwor
CisKKy8qKiovIH0pLAorCisvKioqLyAiLi9TcHJpdGVzL3Nwcml0ZU1hbmFnZXIudHMiOgorLyoh
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU3ByaXRlcy9z
cHJpdGVNYW5hZ2VyLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU3ByaXRlTWFuYWdlciAqLworLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTcHJpdGVNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBTcHJpdGVNYW5hZ2VyOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3Nj
ZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2Jz
ZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi4vTWlzYy9vYnNlcnZhYmxlICovICIuL01pc2Mvb2JzZXJ2YWJsZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NZXNoZXNfYnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NZXNoZXMvYnVmZmVyICovICIu
L01lc2hlcy9idWZmZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0
aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4uL01hdGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Nwcml0ZVNjZW5lQ29tcG9uZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Nwcml0ZVNj
ZW5lQ29tcG9uZW50ICovICIuL1Nwcml0ZXMvc3ByaXRlU2NlbmVDb21wb25lbnQudHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ29sbGlzaW9uc19waWNraW5nSW5mb19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vQ29sbGlzaW9u
cy9waWNraW5nSW5mbyAqLyAiLi9Db2xsaXNpb25zL3BpY2tpbmdJbmZvLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX01hdGVyaWFsc19UZXh0dXJlc190ZXh0dXJlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9NYXRlcmlhbHMv
VGV4dHVyZXMvdGV4dHVyZSAqLyAiLi9NYXRlcmlhbHMvVGV4dHVyZXMvdGV4dHVyZS50cyIpOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01hdGVyaWFscy9t
YXRlcmlhbCAqLyAiLi9NYXRlcmlhbHMvbWF0ZXJpYWwudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9u
ZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9F
bmdpbmVzL2NvbnN0YW50cyAqLyAiLi9FbmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9NaXNjX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2MvbG9nZ2VyICovICIuL01pc2MvbG9n
Z2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NoYWRlcnNfc3ByaXRlc19mcmFn
bWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL1NoYWRlcnMvc3ByaXRlcy5mcmFnbWVudCAqLyAiLi9TaGFkZXJzL3Nwcml0ZXMuZnJh
Z21lbnQudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU2hhZGVyc19zcHJpdGVzX3Zl
cnRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL1NoYWRlcnMvc3ByaXRlcy52ZXJ0ZXggKi8gIi4vU2hhZGVycy9zcHJpdGVzLnZlcnRl
eC50cyIpOworCisKKworCisKKworCisKKworCisKKworCisKKy8qKgorICogQ2xhc3MgdXNlZCB0
byBtYW5hZ2UgbXVsdGlwbGUgc3ByaXRlcyBvbiB0aGUgc2FtZSBzcHJpdGVzaGVldAorICogQHNl
ZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9zcHJpdGVzCisgKi8KK3ZhciBT
cHJpdGVNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAg
ICAqIENyZWF0ZXMgYSBuZXcgc3ByaXRlIG1hbmFnZXIKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZp
bmVzIHRoZSBtYW5hZ2VyJ3MgbmFtZQorICAgICAqIEBwYXJhbSBpbWdVcmwgZGVmaW5lcyB0aGUg
c3ByaXRlIHNoZWV0IHVybAorICAgICAqIEBwYXJhbSBjYXBhY2l0eSBkZWZpbmVzIHRoZSBtYXhp
bXVtIGFsbG93ZWQgbnVtYmVyIG9mIHNwcml0ZXMKKyAgICAgKiBAcGFyYW0gY2VsbFNpemUgZGVm
aW5lcyB0aGUgc2l6ZSBvZiBhIHNwcml0ZSBjZWxsCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmlu
ZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gZXBzaWxvbiBkZWZpbmVzIHRoZSBl
cHNpbG9uIHZhbHVlIHRvIGFsaWduIHRleHR1cmUgKDAuMDEgYnkgZGVmYXVsdCkKKyAgICAgKiBA
cGFyYW0gc2FtcGxpbmdNb2RlIGRlZmluZXMgdGhlIHNtYXBsaW5nIG1vZGUgdG8gdXNlIHdpdGgg
c3ByaXRlc2hlZXQKKyAgICAgKiBAcGFyYW0gZnJvbVBhY2tlZCBzZXQgdG8gZmFsc2U7IGRvIG5v
dCBhbHRlcgorICAgICAqIEBwYXJhbSBzcHJpdGVKU09OIG51bGwgb3RoZXJ3aXNlIGEgSlNPTiBv
YmplY3QgZGVmaW5pbmcgc3ByaXRlIHNoZWV0IGRhdGE7IGRvIG5vdCBhbHRlcgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIFNwcml0ZU1hbmFnZXIoCisgICAgLyoqIGRlZmluZXMgdGhlIG1hbmFnZXIn
cyBuYW1lICovCisgICAgbmFtZSwgaW1nVXJsLCBjYXBhY2l0eSwgY2VsbFNpemUsIHNjZW5lLCBl
cHNpbG9uLCBzYW1wbGluZ01vZGUsIGZyb21QYWNrZWQsIHNwcml0ZUpTT04pIHsKKyAgICAgICAg
aWYgKGVwc2lsb24gPT09IHZvaWQgMCkgeyBlcHNpbG9uID0gMC4wMTsgfQorICAgICAgICBpZiAo
c2FtcGxpbmdNb2RlID09PSB2b2lkIDApIHsgc2FtcGxpbmdNb2RlID0gX01hdGVyaWFsc19UZXh0
dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRleHR1cmUiXS5UUklM
SU5FQVJfU0FNUExJTkdNT0RFOyB9CisgICAgICAgIGlmIChmcm9tUGFja2VkID09PSB2b2lkIDAp
IHsgZnJvbVBhY2tlZCA9IGZhbHNlOyB9CisgICAgICAgIGlmIChzcHJpdGVKU09OID09PSB2b2lk
IDApIHsgc3ByaXRlSlNPTiA9IG51bGw7IH0KKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAg
ICAgICAgLyoqIEdldHMgdGhlIGxpc3Qgb2Ygc3ByaXRlcyAqLworICAgICAgICB0aGlzLnNwcml0
ZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyB0aGUgcmVuZGVyaW5n
IGdyb3VwIGlkICgwIGJ5IGRlZmF1bHQpICovCisgICAgICAgIHRoaXMucmVuZGVyaW5nR3JvdXBJ
ZCA9IDA7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgY2FtZXJhIGxheWVyIG1hc2sgKi8KKyAg
ICAgICAgdGhpcy5sYXllck1hc2sgPSAweDBGRkZGRkZGOworICAgICAgICAvKiogR2V0cyBvciBz
ZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBtYW5hZ2VyIG11c3QgY29uc2lkZXIgc2Nl
bmUgZm9nIHdoZW4gcmVuZGVyaW5nICovCisgICAgICAgIHRoaXMuZm9nRW5hYmxlZCA9IHRydWU7
CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHNw
cml0ZXMgYXJlIHBpY2thYmxlICovCisgICAgICAgIHRoaXMuaXNQaWNrYWJsZSA9IGZhbHNlOwor
ICAgICAgICAvKiogVHJ1ZSB3aGVuIHBhY2tlZCBjZWxsIGRhdGEgZnJvbSBKU09OIGZpbGUgaXMg
cmVhZHkqLworICAgICAgICB0aGlzLl9wYWNrZWRBbmRSZWFkeSA9IGZhbHNlOworICAgICAgICAv
KioKKyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgbWFuYWdlciBpcyBkaXNw
b3NlZC4KKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlID0gbmV3
IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siT2JzZXJ2YWJs
ZSJdKCk7CisgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZlcnMgPSB7fTsKKyAgICAgICAgaWYgKCFz
Y2VuZS5fZ2V0Q29tcG9uZW50KF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLk5BTUVfU1BSSVRFKSkgeworICAgICAg
ICAgICAgc2NlbmUuX2FkZENvbXBvbmVudChuZXcgX3Nwcml0ZVNjZW5lQ29tcG9uZW50X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNwcml0ZVNjZW5lQ29tcG9uZW50Il0oc2NlbmUpKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYXBhY2l0eSA9IGNhcGFjaXR5OworICAgICAgICB0
aGlzLl9mcm9tUGFja2VkID0gZnJvbVBhY2tlZDsKKyAgICAgICAgdGhpcy5fc3ByaXRlVGV4dHVy
ZSA9IG5ldyBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzZfX1siVGV4dHVyZSJdKGltZ1VybCwgc2NlbmUsIHRydWUsIGZhbHNlLCBzYW1wbGluZ01v
ZGUpOworICAgICAgICB0aGlzLl9zcHJpdGVUZXh0dXJlLndyYXBVID0gX01hdGVyaWFsc19UZXh0
dXJlc190ZXh0dXJlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRleHR1cmUiXS5DTEFN
UF9BRERSRVNTTU9ERTsKKyAgICAgICAgdGhpcy5fc3ByaXRlVGV4dHVyZS53cmFwViA9IF9NYXRl
cmlhbHNfVGV4dHVyZXNfdGV4dHVyZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJUZXh0
dXJlIl0uQ0xBTVBfQUREUkVTU01PREU7CisgICAgICAgIGlmIChjZWxsU2l6ZS53aWR0aCAmJiBj
ZWxsU2l6ZS5oZWlnaHQpIHsKKyAgICAgICAgICAgIHRoaXMuY2VsbFdpZHRoID0gY2VsbFNpemUu
d2lkdGg7CisgICAgICAgICAgICB0aGlzLmNlbGxIZWlnaHQgPSBjZWxsU2l6ZS5oZWlnaHQ7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2VsbFNpemUgIT09IHVuZGVmaW5lZCkgeworICAg
ICAgICAgICAgdGhpcy5jZWxsV2lkdGggPSBjZWxsU2l6ZTsKKyAgICAgICAgICAgIHRoaXMuY2Vs
bEhlaWdodCA9IGNlbGxTaXplOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Vwc2lsb24gPSBlcHNpbG9uOwor
ICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5lOworICAgICAgICB0aGlzLl9zY2VuZS5zcHJpdGVN
YW5hZ2Vycy5wdXNoKHRoaXMpOworICAgICAgICB2YXIgaW5kaWNlcyA9IFtdOworICAgICAgICB2
YXIgaW5kZXggPSAwOworICAgICAgICBmb3IgKHZhciBjb3VudCA9IDA7IGNvdW50IDwgY2FwYWNp
dHk7IGNvdW50KyspIHsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRleCk7CisgICAgICAg
ICAgICBpbmRpY2VzLnB1c2goaW5kZXggKyAxKTsKKyAgICAgICAgICAgIGluZGljZXMucHVzaChp
bmRleCArIDIpOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4KTsKKyAgICAgICAgICAg
IGluZGljZXMucHVzaChpbmRleCArIDIpOworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4
ICsgMyk7CisgICAgICAgICAgICBpbmRleCArPSA0OworICAgICAgICB9CisgICAgICAgIHRoaXMu
X2luZGV4QnVmZmVyID0gc2NlbmUuZ2V0RW5naW5lKCkuY3JlYXRlSW5kZXhCdWZmZXIoaW5kaWNl
cyk7CisgICAgICAgIC8vIFZCTworICAgICAgICAvLyAxOCBmbG9hdHMgcGVyIHNwcml0ZSAoeCwg
eSwgeiwgYW5nbGUsIHNpemVYLCBzaXplWSwgb2Zmc2V0WCwgb2Zmc2V0WSwgaW52ZXJ0VSwgaW52
ZXJ0ViwgY2VsbExlZnQsIGNlbGxUb3AsIGNlbGxXaWR0aCwgY2VsbEhlaWdodCwgY29sb3Igciwg
Y29sb3IgZywgY29sb3IgYiwgY29sb3IgYSkKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YSA9IG5l
dyBGbG9hdDMyQXJyYXkoY2FwYWNpdHkgKiAxOCAqIDQpOworICAgICAgICB0aGlzLl9idWZmZXIg
PSBuZXcgX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQnVmZmVy
Il0oc2NlbmUuZ2V0RW5naW5lKCksIHRoaXMuX3ZlcnRleERhdGEsIHRydWUsIDE4KTsKKyAgICAg
ICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMuX2J1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoX01lc2hl
c19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9z
aXRpb25LaW5kLCAwLCA0KTsKKyAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLl9idWZmZXIuY3Jl
YXRlVmVydGV4QnVmZmVyKCJvcHRpb25zIiwgNCwgNCk7CisgICAgICAgIHZhciBpbnZlcnRzID0g
dGhpcy5fYnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlcigiaW52ZXJ0cyIsIDgsIDIpOworICAgICAg
ICB2YXIgY2VsbEluZm8gPSB0aGlzLl9idWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKCJjZWxsSW5m
byIsIDEwLCA0KTsKKyAgICAgICAgdmFyIGNvbG9ycyA9IHRoaXMuX2J1ZmZlci5jcmVhdGVWZXJ0
ZXhCdWZmZXIoX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVy
dGV4QnVmZmVyIl0uQ29sb3JLaW5kLCAxNCwgNCk7CisgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZl
cnNbX01lc2hlc19idWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVm
ZmVyIl0uUG9zaXRpb25LaW5kXSA9IHBvc2l0aW9uczsKKyAgICAgICAgdGhpcy5fdmVydGV4QnVm
ZmVyc1sib3B0aW9ucyJdID0gb3B0aW9uczsKKyAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1si
aW52ZXJ0cyJdID0gaW52ZXJ0czsKKyAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyc1siY2VsbElu
Zm8iXSA9IGNlbGxJbmZvOworICAgICAgICB0aGlzLl92ZXJ0ZXhCdWZmZXJzW19NZXNoZXNfYnVm
ZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlZlcnRleEJ1ZmZlciJdLkNvbG9yS2lu
ZF0gPSBjb2xvcnM7CisgICAgICAgIC8vIEVmZmVjdHMKKyAgICAgICAgdGhpcy5fZWZmZWN0QmFz
ZSA9IHRoaXMuX3NjZW5lLmdldEVuZ2luZSgpLmNyZWF0ZUVmZmVjdCgic3ByaXRlcyIsIFtfTWVz
aGVzX2J1ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Q
b3NpdGlvbktpbmQsICJvcHRpb25zIiwgImludmVydHMiLCAiY2VsbEluZm8iLCBfTWVzaGVzX2J1
ZmZlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJWZXJ0ZXhCdWZmZXIiXS5Db2xvcktp
bmRdLCBbInZpZXciLCAicHJvamVjdGlvbiIsICJ0ZXh0dXJlSW5mb3MiLCAiYWxwaGFUZXN0Il0s
IFsiZGlmZnVzZVNhbXBsZXIiXSwgIiIpOworICAgICAgICB0aGlzLl9lZmZlY3RGb2cgPSB0aGlz
Ll9zY2VuZS5nZXRFbmdpbmUoKS5jcmVhdGVFZmZlY3QoInNwcml0ZXMiLCBbX01lc2hlc19idWZm
ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uUG9zaXRpb25L
aW5kLCAib3B0aW9ucyIsICJpbnZlcnRzIiwgImNlbGxJbmZvIiwgX01lc2hlc19idWZmZXJfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVmVydGV4QnVmZmVyIl0uQ29sb3JLaW5kXSwgWyJ2
aWV3IiwgInByb2plY3Rpb24iLCAidGV4dHVyZUluZm9zIiwgImFscGhhVGVzdCIsICJ2Rm9nSW5m
b3MiLCAidkZvZ0NvbG9yIl0sIFsiZGlmZnVzZVNhbXBsZXIiXSwgIiNkZWZpbmUgRk9HIik7Cisg
ICAgICAgIGlmICh0aGlzLl9mcm9tUGFja2VkKSB7CisgICAgICAgICAgICB0aGlzLl9tYWtlUGFj
a2VkKGltZ1VybCwgc3ByaXRlSlNPTik7CisgICAgICAgIH0KKyAgICB9CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFNwcml0ZU1hbmFnZXIucHJvdG90eXBlLCAib25EaXNwb3NlIiwgeworICAg
ICAgICAvKioKKyAgICAgICAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIG1hbmFnZXIgaXMg
ZGlzcG9zZWQKKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUucmVtb3ZlKHRoaXMuX29uRGlzcG9zZU9ic2Vy
dmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX29uRGlzcG9zZU9ic2VydmVy
ID0gdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTcHJpdGVNYW5hZ2VyLnByb3RvdHlwZSwg
InRleHR1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHNw
cml0ZXNoZWV0IHRleHR1cmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Nwcml0ZVRleHR1cmU7CisgICAgICAgIH0sCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9zcHJpdGVU
ZXh0dXJlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIFNwcml0ZU1hbmFnZXIucHJv
dG90eXBlLl9tYWtlUGFja2VkID0gZnVuY3Rpb24gKGltZ1VybCwgc3ByaXRlSlNPTikgeworICAg
ICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICBpZiAoc3ByaXRlSlNPTiAhPT0gbnVsbCkg
eworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgY2VsbGRhdGEgPSBKU09O
LnBhcnNlKHNwcml0ZUpTT04pOworICAgICAgICAgICAgICAgIHZhciBzcHJpdGVtYXAgPSBSZWZs
ZWN0Lm93bktleXMoY2VsbGRhdGEuZnJhbWVzKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zcHJp
dGVNYXAgPSBzcHJpdGVtYXA7CisgICAgICAgICAgICAgICAgdGhpcy5fcGFja2VkQW5kUmVhZHkg
PSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMuX2NlbGxEYXRhID0gY2VsbGRhdGEuZnJhbWVz
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9mcm9tUGFja2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdGhpcy5fcGFja2Vk
QW5kUmVhZHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFs
aWQgSlNPTiBmcm9tIHN0cmluZy4gU3ByaXRlc2hlZXQgbWFuYWdlZCB3aXRoIGNvbnN0YW50IGNl
bGwgc2l6ZS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHZhciByZSA9IC9cLi9nOworICAgICAgICAgICAgdmFyIGxpID0gdm9pZCAwOwor
ICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGxpID0gcmUubGFzdEluZGV4OworICAg
ICAgICAgICAgICAgIHJlLnRlc3QoaW1nVXJsKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHJlLmxh
c3RJbmRleCA+IDApOworICAgICAgICAgICAgdmFyIGpzb25VcmwgPSBpbWdVcmwuc3Vic3RyaW5n
KDAsIGxpIC0gMSkgKyAiLmpzb24iOworICAgICAgICAgICAgdmFyIHhtbGh0dHBfMSA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgeG1saHR0cF8xLm9wZW4oIkdFVCIsIGpzb25V
cmwsIHRydWUpOworICAgICAgICAgICAgeG1saHR0cF8xLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fWyJMb2dnZXIiXS5FcnJvcigiVW5hYmxlIHRvIExvYWQgU3ByaXRlIEpTT04gRGF0YS4gU3By
aXRlc2hlZXQgbWFuYWdlZCB3aXRoIGNvbnN0YW50IGNlbGwgc2l6ZS4iKTsKKyAgICAgICAgICAg
ICAgICBfdGhpcy5fZnJvbVBhY2tlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIF90aGlzLl9w
YWNrZWRBbmRSZWFkeSA9IGZhbHNlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHhtbGh0
dHBfMS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGNlbGxkYXRhID0gSlNPTi5wYXJzZSh4bWxodHRwXzEucmVzcG9u
c2UpOworICAgICAgICAgICAgICAgICAgICB2YXIgc3ByaXRlbWFwID0gUmVmbGVjdC5vd25LZXlz
KGNlbGxkYXRhLmZyYW1lcyk7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zcHJpdGVNYXAg
PSBzcHJpdGVtYXA7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wYWNrZWRBbmRSZWFkeSA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLl9jZWxsRGF0YSA9IGNlbGxkYXRhLmZy
YW1lczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgX3RoaXMuX2Zyb21QYWNrZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgX3RoaXMuX3BhY2tlZEFuZFJlYWR5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBKU09OIGZyb20gZmlsZS4gU3ByaXRlc2hlZXQg
bWFuYWdlZCB3aXRoIGNvbnN0YW50IGNlbGwgc2l6ZS4iKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgeG1saHR0cF8xLnNlbmQoKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgU3ByaXRlTWFuYWdlci5wcm90b3R5cGUuX2FwcGVuZFNwcml0ZVZlcnRleCA9
IGZ1bmN0aW9uIChpbmRleCwgc3ByaXRlLCBvZmZzZXRYLCBvZmZzZXRZLCBiYXNlU2l6ZSkgewor
ICAgICAgICB2YXIgYXJyYXlPZmZzZXQgPSBpbmRleCAqIDE4OworICAgICAgICBpZiAob2Zmc2V0
WCA9PT0gMCkgeworICAgICAgICAgICAgb2Zmc2V0WCA9IHRoaXMuX2Vwc2lsb247CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAob2Zmc2V0WCA9PT0gMSkgeworICAgICAgICAgICAgb2Zmc2V0
WCA9IDEgLSB0aGlzLl9lcHNpbG9uOworICAgICAgICB9CisgICAgICAgIGlmIChvZmZzZXRZID09
PSAwKSB7CisgICAgICAgICAgICBvZmZzZXRZID0gdGhpcy5fZXBzaWxvbjsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChvZmZzZXRZID09PSAxKSB7CisgICAgICAgICAgICBvZmZzZXRZID0g
MSAtIHRoaXMuX2Vwc2lsb247CisgICAgICAgIH0KKyAgICAgICAgLy8gUG9zaXRpb25zCisgICAg
ICAgIHRoaXMuX3ZlcnRleERhdGFbYXJyYXlPZmZzZXRdID0gc3ByaXRlLnBvc2l0aW9uLng7Cisg
ICAgICAgIHRoaXMuX3ZlcnRleERhdGFbYXJyYXlPZmZzZXQgKyAxXSA9IHNwcml0ZS5wb3NpdGlv
bi55OworICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRhW2FycmF5T2Zmc2V0ICsgMl0gPSBzcHJpdGUu
cG9zaXRpb24uejsKKyAgICAgICAgdGhpcy5fdmVydGV4RGF0YVthcnJheU9mZnNldCArIDNdID0g
c3ByaXRlLmFuZ2xlOworICAgICAgICAvLyBPcHRpb25zCisgICAgICAgIHRoaXMuX3ZlcnRleERh
dGFbYXJyYXlPZmZzZXQgKyA0XSA9IHNwcml0ZS53aWR0aDsKKyAgICAgICAgdGhpcy5fdmVydGV4
RGF0YVthcnJheU9mZnNldCArIDVdID0gc3ByaXRlLmhlaWdodDsKKyAgICAgICAgdGhpcy5fdmVy
dGV4RGF0YVthcnJheU9mZnNldCArIDZdID0gb2Zmc2V0WDsKKyAgICAgICAgdGhpcy5fdmVydGV4
RGF0YVthcnJheU9mZnNldCArIDddID0gb2Zmc2V0WTsKKyAgICAgICAgLy8gSW52ZXJ0cworICAg
ICAgICB0aGlzLl92ZXJ0ZXhEYXRhW2FycmF5T2Zmc2V0ICsgOF0gPSBzcHJpdGUuaW52ZXJ0VSA/
IDEgOiAwOworICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRhW2FycmF5T2Zmc2V0ICsgOV0gPSBzcHJp
dGUuaW52ZXJ0ViA/IDEgOiAwOworICAgICAgICAvLyBDZWxsSWZvCisgICAgICAgIGlmICh0aGlz
Ll9wYWNrZWRBbmRSZWFkeSkgeworICAgICAgICAgICAgaWYgKCFzcHJpdGUuY2VsbFJlZikgewor
ICAgICAgICAgICAgICAgIHNwcml0ZS5jZWxsSW5kZXggPSAwOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdmFyIG51bSA9IHNwcml0ZS5jZWxsSW5kZXg7CisgICAgICAgICAgICBpZiAodHlw
ZW9mIChudW0pID09PSAibnVtYmVyIiAmJiBpc0Zpbml0ZShudW0pICYmIE1hdGguZmxvb3IobnVt
KSA9PT0gbnVtKSB7CisgICAgICAgICAgICAgICAgc3ByaXRlLmNlbGxSZWYgPSB0aGlzLl9zcHJp
dGVNYXBbc3ByaXRlLmNlbGxJbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll92ZXJ0ZXhEYXRhW2FycmF5T2Zmc2V0ICsgMTBdID0gdGhpcy5fY2VsbERhdGFbc3ByaXRlLmNl
bGxSZWZdLmZyYW1lLnggLyBiYXNlU2l6ZS53aWR0aDsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRl
eERhdGFbYXJyYXlPZmZzZXQgKyAxMV0gPSB0aGlzLl9jZWxsRGF0YVtzcHJpdGUuY2VsbFJlZl0u
ZnJhbWUueSAvIGJhc2VTaXplLmhlaWdodDsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleERhdGFb
YXJyYXlPZmZzZXQgKyAxMl0gPSB0aGlzLl9jZWxsRGF0YVtzcHJpdGUuY2VsbFJlZl0uZnJhbWUu
dyAvIGJhc2VTaXplLndpZHRoOworICAgICAgICAgICAgdGhpcy5fdmVydGV4RGF0YVthcnJheU9m
ZnNldCArIDEzXSA9IHRoaXMuX2NlbGxEYXRhW3Nwcml0ZS5jZWxsUmVmXS5mcmFtZS5oIC8gYmFz
ZVNpemUuaGVpZ2h0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYg
KCFzcHJpdGUuY2VsbEluZGV4KSB7CisgICAgICAgICAgICAgICAgc3ByaXRlLmNlbGxJbmRleCA9
IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcm93U2l6ZSA9IGJhc2VTaXplLndp
ZHRoIC8gdGhpcy5jZWxsV2lkdGg7CisgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKHNwcml0ZS5j
ZWxsSW5kZXggLyByb3dTaXplKSA+PiAwOworICAgICAgICAgICAgdGhpcy5fdmVydGV4RGF0YVth
cnJheU9mZnNldCArIDEwXSA9IChzcHJpdGUuY2VsbEluZGV4IC0gb2Zmc2V0ICogcm93U2l6ZSkg
KiB0aGlzLmNlbGxXaWR0aCAvIGJhc2VTaXplLndpZHRoOworICAgICAgICAgICAgdGhpcy5fdmVy
dGV4RGF0YVthcnJheU9mZnNldCArIDExXSA9IG9mZnNldCAqIHRoaXMuY2VsbEhlaWdodCAvIGJh
c2VTaXplLmhlaWdodDsKKyAgICAgICAgICAgIHRoaXMuX3ZlcnRleERhdGFbYXJyYXlPZmZzZXQg
KyAxMl0gPSB0aGlzLmNlbGxXaWR0aCAvIGJhc2VTaXplLndpZHRoOworICAgICAgICAgICAgdGhp
cy5fdmVydGV4RGF0YVthcnJheU9mZnNldCArIDEzXSA9IHRoaXMuY2VsbEhlaWdodCAvIGJhc2VT
aXplLmhlaWdodDsKKyAgICAgICAgfQorICAgICAgICAvLyBDb2xvcgorICAgICAgICB0aGlzLl92
ZXJ0ZXhEYXRhW2FycmF5T2Zmc2V0ICsgMTRdID0gc3ByaXRlLmNvbG9yLnI7CisgICAgICAgIHRo
aXMuX3ZlcnRleERhdGFbYXJyYXlPZmZzZXQgKyAxNV0gPSBzcHJpdGUuY29sb3IuZzsKKyAgICAg
ICAgdGhpcy5fdmVydGV4RGF0YVthcnJheU9mZnNldCArIDE2XSA9IHNwcml0ZS5jb2xvci5iOwor
ICAgICAgICB0aGlzLl92ZXJ0ZXhEYXRhW2FycmF5T2Zmc2V0ICsgMTddID0gc3ByaXRlLmNvbG9y
LmE7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcnNlY3RzIHRoZSBzcHJpdGVzIHdpdGgg
YSByYXkKKyAgICAgKiBAcGFyYW0gcmF5IGRlZmluZXMgdGhlIHJheSB0byBpbnRlcnNlY3Qgd2l0
aAorICAgICAqIEBwYXJhbSBjYW1lcmEgZGVmaW5lcyB0aGUgY3VycmVudCBhY3RpdmUgY2FtZXJh
CisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBkZWZpbmVzIGEgcHJlZGljYXRlIHVzZWQgdG8gc2Vs
ZWN0IGNhbmRpZGF0ZSBzcHJpdGVzCisgICAgICogQHBhcmFtIGZhc3RDaGVjayBkZWZpbmVzIGlm
IGEgZmFzdCBjaGVjayBvbmx5IG11c3QgYmUgZG9uZSAodGhlIGZpcnN0IHBvdGVudGlhbCBzcHJp
dGUgaXMgd2lsbCBiZSB1c2VkIGFuZCBub3QgdGhlIGNsb3NlcikKKyAgICAgKiBAcmV0dXJucyBu
dWxsIGlmIG5vIGhpdCBvciBhIFBpY2tpbmdJbmZvCisgICAgICovCisgICAgU3ByaXRlTWFuYWdl
ci5wcm90b3R5cGUuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChyYXksIGNhbWVyYSwgcHJlZGljYXRl
LCBmYXN0Q2hlY2spIHsKKyAgICAgICAgdmFyIGNvdW50ID0gTWF0aC5taW4odGhpcy5fY2FwYWNp
dHksIHRoaXMuc3ByaXRlcy5sZW5ndGgpOworICAgICAgICB2YXIgbWluID0gX01hdGhzX21hdGhf
dmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJvKCk7Cisg
ICAgICAgIHZhciBtYXggPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdLlplcm8oKTsKKyAgICAgICAgdmFyIGRpc3RhbmNlID0gTnVtYmVy
Lk1BWF9WQUxVRTsKKyAgICAgICAgdmFyIGN1cnJlbnRTcHJpdGUgPSBudWxsOworICAgICAgICB2
YXIgcGlja2VkUG9pbnQgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVG1wVmVjdG9ycyJdLlZlY3RvcjNbMF07CisgICAgICAgIHZhciBjYW1lcmFTcGFj
ZVBvc2l0aW9uID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzFdOworICAgICAgICB2YXIgY2FtZXJhVmlldyA9IGNh
bWVyYS5nZXRWaWV3TWF0cml4KCk7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCBjb3VudDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHNwcml0ZSA9IHRoaXMuc3ByaXRl
c1tpbmRleF07CisgICAgICAgICAgICBpZiAoIXNwcml0ZSkgeworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSkgeworICAg
ICAgICAgICAgICAgIGlmICghcHJlZGljYXRlKHNwcml0ZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAoIXNwcml0ZS5pc1BpY2thYmxlKSB7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfX1siVmVjdG9yMyJdLlRyYW5zZm9ybUNvb3JkaW5hdGVzVG9S
ZWYoc3ByaXRlLnBvc2l0aW9uLCBjYW1lcmFWaWV3LCBjYW1lcmFTcGFjZVBvc2l0aW9uKTsKKyAg
ICAgICAgICAgIG1pbi5jb3B5RnJvbUZsb2F0cyhjYW1lcmFTcGFjZVBvc2l0aW9uLnggLSBzcHJp
dGUud2lkdGggLyAyLCBjYW1lcmFTcGFjZVBvc2l0aW9uLnkgLSBzcHJpdGUuaGVpZ2h0IC8gMiwg
Y2FtZXJhU3BhY2VQb3NpdGlvbi56KTsKKyAgICAgICAgICAgIG1heC5jb3B5RnJvbUZsb2F0cyhj
YW1lcmFTcGFjZVBvc2l0aW9uLnggKyBzcHJpdGUud2lkdGggLyAyLCBjYW1lcmFTcGFjZVBvc2l0
aW9uLnkgKyBzcHJpdGUuaGVpZ2h0IC8gMiwgY2FtZXJhU3BhY2VQb3NpdGlvbi56KTsKKyAgICAg
ICAgICAgIGlmIChyYXkuaW50ZXJzZWN0c0JveE1pbk1heChtaW4sIG1heCkpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgY3VycmVudERpc3RhbmNlID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5EaXN0YW5jZShjYW1lcmFTcGFjZVBvc2l0
aW9uLCByYXkub3JpZ2luKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiBjdXJyZW50
RGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UgPSBjdXJyZW50RGlzdGFu
Y2U7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcHJpdGUgPSBzcHJpdGU7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChmYXN0Q2hlY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjdXJyZW50U3ByaXRlKSB7CisgICAgICAgICAg
ICB2YXIgcmVzdWx0ID0gbmV3IF9Db2xsaXNpb25zX3BpY2tpbmdJbmZvX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bIlBpY2tpbmdJbmZvIl0oKTsKKyAgICAgICAgICAgIGNhbWVyYVZpZXcu
aW52ZXJ0VG9SZWYoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF0pOworICAgICAgICAgICAgcmVzdWx0LmhpdCA9IHRy
dWU7CisgICAgICAgICAgICByZXN1bHQucGlja2VkU3ByaXRlID0gY3VycmVudFNwcml0ZTsKKyAg
ICAgICAgICAgIHJlc3VsdC5kaXN0YW5jZSA9IGRpc3RhbmNlOworICAgICAgICAgICAgLy8gR2V0
IHBpY2tlZCBwb2ludAorICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1sy
XTsKKyAgICAgICAgICAgIGRpcmVjdGlvbi5jb3B5RnJvbShyYXkuZGlyZWN0aW9uKTsKKyAgICAg
ICAgICAgIGRpcmVjdGlvbi5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgIGRpcmVjdGlvbi5zY2Fs
ZUluUGxhY2UoZGlzdGFuY2UpOworICAgICAgICAgICAgcmF5Lm9yaWdpbi5hZGRUb1JlZihkaXJl
Y3Rpb24sIHBpY2tlZFBvaW50KTsKKyAgICAgICAgICAgIHJlc3VsdC5waWNrZWRQb2ludCA9IF9N
YXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0u
VHJhbnNmb3JtQ29vcmRpbmF0ZXMocGlja2VkUG9pbnQsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBJbnRlcnNlY3RzIHRoZSBzcHJpdGVzIHdpdGggYSByYXkK
KyAgICAgKiBAcGFyYW0gcmF5IGRlZmluZXMgdGhlIHJheSB0byBpbnRlcnNlY3Qgd2l0aAorICAg
ICAqIEBwYXJhbSBjYW1lcmEgZGVmaW5lcyB0aGUgY3VycmVudCBhY3RpdmUgY2FtZXJhCisgICAg
ICogQHBhcmFtIHByZWRpY2F0ZSBkZWZpbmVzIGEgcHJlZGljYXRlIHVzZWQgdG8gc2VsZWN0IGNh
bmRpZGF0ZSBzcHJpdGVzCisgICAgICogQHJldHVybnMgbnVsbCBpZiBubyBoaXQgb3IgYSBQaWNr
aW5nSW5mbyBhcnJheQorICAgICAqLworICAgIFNwcml0ZU1hbmFnZXIucHJvdG90eXBlLm11bHRp
SW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChyYXksIGNhbWVyYSwgcHJlZGljYXRlKSB7CisgICAgICAg
IHZhciBjb3VudCA9IE1hdGgubWluKHRoaXMuX2NhcGFjaXR5LCB0aGlzLnNwcml0ZXMubGVuZ3Ro
KTsKKyAgICAgICAgdmFyIG1pbiA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uWmVybygpOworICAgICAgICB2YXIgbWF4ID0gX01hdGhz
X21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5aZXJv
KCk7CisgICAgICAgIHZhciBkaXN0YW5jZTsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTsKKyAg
ICAgICAgdmFyIHBpY2tlZFBvaW50ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIlRtcFZlY3RvcnMiXS5WZWN0b3IzWzBdLmNvcHlGcm9tRmxvYXRzKDAs
IDAsIDApOworICAgICAgICB2YXIgY2FtZXJhU3BhY2VQb3NpdGlvbiA9IF9NYXRoc19tYXRoX3Zl
Y3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJUbXBWZWN0b3JzIl0uVmVjdG9yM1sx
XS5jb3B5RnJvbUZsb2F0cygwLCAwLCAwKTsKKyAgICAgICAgdmFyIGNhbWVyYVZpZXcgPSBjYW1l
cmEuZ2V0Vmlld01hdHJpeCgpOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwg
Y291bnQ7IGluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBzcHJpdGUgPSB0aGlzLnNwcml0ZXNb
aW5kZXhdOworICAgICAgICAgICAgaWYgKCFzcHJpdGUpIHsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcmVkaWNhdGUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXByZWRpY2F0ZShzcHJpdGUpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKCFzcHJpdGUuaXNQaWNrYWJsZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bIlZlY3RvcjMiXS5UcmFuc2Zvcm1Db29yZGluYXRlc1RvUmVm
KHNwcml0ZS5wb3NpdGlvbiwgY2FtZXJhVmlldywgY2FtZXJhU3BhY2VQb3NpdGlvbik7CisgICAg
ICAgICAgICBtaW4uY29weUZyb21GbG9hdHMoY2FtZXJhU3BhY2VQb3NpdGlvbi54IC0gc3ByaXRl
LndpZHRoIC8gMiwgY2FtZXJhU3BhY2VQb3NpdGlvbi55IC0gc3ByaXRlLmhlaWdodCAvIDIsIGNh
bWVyYVNwYWNlUG9zaXRpb24ueik7CisgICAgICAgICAgICBtYXguY29weUZyb21GbG9hdHMoY2Ft
ZXJhU3BhY2VQb3NpdGlvbi54ICsgc3ByaXRlLndpZHRoIC8gMiwgY2FtZXJhU3BhY2VQb3NpdGlv
bi55ICsgc3ByaXRlLmhlaWdodCAvIDIsIGNhbWVyYVNwYWNlUG9zaXRpb24ueik7CisgICAgICAg
ICAgICBpZiAocmF5LmludGVyc2VjdHNCb3hNaW5NYXgobWluLCBtYXgpKSB7CisgICAgICAgICAg
ICAgICAgZGlzdGFuY2UgPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siVmVjdG9yMyJdLkRpc3RhbmNlKGNhbWVyYVNwYWNlUG9zaXRpb24sIHJheS5vcmln
aW4pOworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgX0NvbGxpc2lvbnNfcGlja2lu
Z0luZm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siUGlja2luZ0luZm8iXSgpOworICAg
ICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpOworICAgICAgICAgICAgICAgIGNhbWVy
YVZpZXcuaW52ZXJ0VG9SZWYoX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlRtcFZlY3RvcnMiXS5NYXRyaXhbMF0pOworICAgICAgICAgICAgICAgIHJlc3Vs
dC5oaXQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlc3VsdC5waWNrZWRTcHJpdGUgPSBzcHJp
dGU7CisgICAgICAgICAgICAgICAgcmVzdWx0LmRpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAg
ICAgICAgICAgLy8gR2V0IHBpY2tlZCBwb2ludAorICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rp
b24gPSBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siVG1w
VmVjdG9ycyJdLlZlY3RvcjNbMl07CisgICAgICAgICAgICAgICAgZGlyZWN0aW9uLmNvcHlGcm9t
KHJheS5kaXJlY3Rpb24pOworICAgICAgICAgICAgICAgIGRpcmVjdGlvbi5ub3JtYWxpemUoKTsK
KyAgICAgICAgICAgICAgICBkaXJlY3Rpb24uc2NhbGVJblBsYWNlKGRpc3RhbmNlKTsKKyAgICAg
ICAgICAgICAgICByYXkub3JpZ2luLmFkZFRvUmVmKGRpcmVjdGlvbiwgcGlja2VkUG9pbnQpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdC5waWNrZWRQb2ludCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJWZWN0b3IzIl0uVHJhbnNmb3JtQ29vcmRpbmF0
ZXMocGlja2VkUG9pbnQsIF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJUbXBWZWN0b3JzIl0uTWF0cml4WzBdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbmRl
ciBhbGwgY2hpbGQgc3ByaXRlcworICAgICAqLworICAgIFNwcml0ZU1hbmFnZXIucHJvdG90eXBl
LnJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gQ2hlY2sKKyAgICAgICAgaWYgKCF0
aGlzLl9lZmZlY3RCYXNlLmlzUmVhZHkoKSB8fCAhdGhpcy5fZWZmZWN0Rm9nLmlzUmVhZHkoKSB8
fCAhdGhpcy5fc3ByaXRlVGV4dHVyZQorICAgICAgICAgICAgfHwgIXRoaXMuX3Nwcml0ZVRleHR1
cmUuaXNSZWFkeSgpIHx8ICF0aGlzLnNwcml0ZXMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2Zyb21QYWNrZWQgJiYgKCF0aGlzLl9w
YWNrZWRBbmRSZWFkeSB8fCAhdGhpcy5fc3ByaXRlTWFwIHx8ICF0aGlzLl9jZWxsRGF0YSkpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgZW5naW5lID0gdGhp
cy5fc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgICAgIHZhciBiYXNlU2l6ZSA9IHRoaXMuX3Nwcml0
ZVRleHR1cmUuZ2V0QmFzZVNpemUoKTsKKyAgICAgICAgLy8gU3ByaXRlcworICAgICAgICB2YXIg
ZGVsdGFUaW1lID0gZW5naW5lLmdldERlbHRhVGltZSgpOworICAgICAgICB2YXIgbWF4ID0gTWF0
aC5taW4odGhpcy5fY2FwYWNpdHksIHRoaXMuc3ByaXRlcy5sZW5ndGgpOworICAgICAgICB2YXIg
b2Zmc2V0ID0gMDsKKyAgICAgICAgdmFyIG5vU3ByaXRlID0gdHJ1ZTsKKyAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IG1heDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHNw
cml0ZSA9IHRoaXMuc3ByaXRlc1tpbmRleF07CisgICAgICAgICAgICBpZiAoIXNwcml0ZSB8fCAh
c3ByaXRlLmlzVmlzaWJsZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbm9TcHJpdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHNwcml0ZS5f
YW5pbWF0ZShkZWx0YVRpbWUpOworICAgICAgICAgICAgdGhpcy5fYXBwZW5kU3ByaXRlVmVydGV4
KG9mZnNldCsrLCBzcHJpdGUsIDAsIDAsIGJhc2VTaXplKTsKKyAgICAgICAgICAgIHRoaXMuX2Fw
cGVuZFNwcml0ZVZlcnRleChvZmZzZXQrKywgc3ByaXRlLCAxLCAwLCBiYXNlU2l6ZSk7CisgICAg
ICAgICAgICB0aGlzLl9hcHBlbmRTcHJpdGVWZXJ0ZXgob2Zmc2V0KyssIHNwcml0ZSwgMSwgMSwg
YmFzZVNpemUpOworICAgICAgICAgICAgdGhpcy5fYXBwZW5kU3ByaXRlVmVydGV4KG9mZnNldCsr
LCBzcHJpdGUsIDAsIDEsIGJhc2VTaXplKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobm9TcHJp
dGUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9idWZm
ZXIudXBkYXRlKHRoaXMuX3ZlcnRleERhdGEpOworICAgICAgICAvLyBSZW5kZXIKKyAgICAgICAg
dmFyIGVmZmVjdCA9IHRoaXMuX2VmZmVjdEJhc2U7CisgICAgICAgIGlmICh0aGlzLl9zY2VuZS5m
b2dFbmFibGVkICYmIHRoaXMuX3NjZW5lLmZvZ01vZGUgIT09IF9zY2VuZV9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJTY2VuZSJdLkZPR01PREVfTk9ORSAmJiB0aGlzLmZvZ0VuYWJsZWQp
IHsKKyAgICAgICAgICAgIGVmZmVjdCA9IHRoaXMuX2VmZmVjdEZvZzsKKyAgICAgICAgfQorICAg
ICAgICBlbmdpbmUuZW5hYmxlRWZmZWN0KGVmZmVjdCk7CisgICAgICAgIHZhciB2aWV3TWF0cml4
ID0gdGhpcy5fc2NlbmUuZ2V0Vmlld01hdHJpeCgpOworICAgICAgICBlZmZlY3Quc2V0VGV4dHVy
ZSgiZGlmZnVzZVNhbXBsZXIiLCB0aGlzLl9zcHJpdGVUZXh0dXJlKTsKKyAgICAgICAgZWZmZWN0
LnNldE1hdHJpeCgidmlldyIsIHZpZXdNYXRyaXgpOworICAgICAgICBlZmZlY3Quc2V0TWF0cml4
KCJwcm9qZWN0aW9uIiwgdGhpcy5fc2NlbmUuZ2V0UHJvamVjdGlvbk1hdHJpeCgpKTsKKyAgICAg
ICAgLy8gRm9nCisgICAgICAgIGlmICh0aGlzLl9zY2VuZS5mb2dFbmFibGVkICYmIHRoaXMuX3Nj
ZW5lLmZvZ01vZGUgIT09IF9zY2VuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJTY2Vu
ZSJdLkZPR01PREVfTk9ORSAmJiB0aGlzLmZvZ0VuYWJsZWQpIHsKKyAgICAgICAgICAgIGVmZmVj
dC5zZXRGbG9hdDQoInZGb2dJbmZvcyIsIHRoaXMuX3NjZW5lLmZvZ01vZGUsIHRoaXMuX3NjZW5l
LmZvZ1N0YXJ0LCB0aGlzLl9zY2VuZS5mb2dFbmQsIHRoaXMuX3NjZW5lLmZvZ0RlbnNpdHkpOwor
ICAgICAgICAgICAgZWZmZWN0LnNldENvbG9yMygidkZvZ0NvbG9yIiwgdGhpcy5fc2NlbmUuZm9n
Q29sb3IpOworICAgICAgICB9CisgICAgICAgIC8vIFZCT3MKKyAgICAgICAgZW5naW5lLmJpbmRC
dWZmZXJzKHRoaXMuX3ZlcnRleEJ1ZmZlcnMsIHRoaXMuX2luZGV4QnVmZmVyLCBlZmZlY3QpOwor
ICAgICAgICAvLyBEcmF3IG9yZGVyCisgICAgICAgIGVuZ2luZS5zZXREZXB0aEZ1bmN0aW9uVG9M
ZXNzT3JFcXVhbCgpOworICAgICAgICBlZmZlY3Quc2V0Qm9vbCgiYWxwaGFUZXN0IiwgdHJ1ZSk7
CisgICAgICAgIGVuZ2luZS5zZXRDb2xvcldyaXRlKGZhbHNlKTsKKyAgICAgICAgZW5naW5lLmRy
YXdFbGVtZW50c1R5cGUoX01hdGVyaWFsc19tYXRlcmlhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJNYXRlcmlhbCJdLlRyaWFuZ2xlRmlsbE1vZGUsIDAsIChvZmZzZXQgLyA0KSAqIDYp
OworICAgICAgICBlbmdpbmUuc2V0Q29sb3JXcml0ZSh0cnVlKTsKKyAgICAgICAgZWZmZWN0LnNl
dEJvb2woImFscGhhVGVzdCIsIGZhbHNlKTsKKyAgICAgICAgZW5naW5lLnNldEFscGhhTW9kZShf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1siQ29uc3RhbnRz
Il0uQUxQSEFfQ09NQklORSk7CisgICAgICAgIGVuZ2luZS5kcmF3RWxlbWVudHNUeXBlKF9NYXRl
cmlhbHNfbWF0ZXJpYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siTWF0ZXJpYWwiXS5U
cmlhbmdsZUZpbGxNb2RlLCAwLCAob2Zmc2V0IC8gNCkgKiA2KTsKKyAgICAgICAgZW5naW5lLnNl
dEFscGhhTW9kZShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siQ29uc3RhbnRzIl0uQUxQSEFfRElTQUJMRSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZWxlYXNlIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgICAgICovCisgICAgU3ByaXRlTWFuYWdlci5w
cm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuX2J1ZmZl
cikgeworICAgICAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHRo
aXMuX2J1ZmZlciA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2luZGV4QnVm
ZmVyKSB7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5nZXRFbmdpbmUoKS5fcmVsZWFzZUJ1ZmZl
cih0aGlzLl9pbmRleEJ1ZmZlcik7CisgICAgICAgICAgICB0aGlzLl9pbmRleEJ1ZmZlciA9IG51
bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3Nwcml0ZVRleHR1cmUpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3Nwcml0ZVRleHR1cmUuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhpcy5f
c3ByaXRlVGV4dHVyZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVtb3ZlIGZyb20g
c2NlbmUKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2NlbmUuc3ByaXRlTWFuYWdlcnMuaW5k
ZXhPZih0aGlzKTsKKyAgICAgICAgdGhpcy5fc2NlbmUuc3ByaXRlTWFuYWdlcnMuc3BsaWNlKGlu
ZGV4LCAxKTsKKyAgICAgICAgLy8gQ2FsbGJhY2sKKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNl
cnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNl
cnZhYmxlLmNsZWFyKCk7CisgICAgfTsKKyAgICByZXR1cm4gU3ByaXRlTWFuYWdlcjsKK30oKSk7
CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU3ByaXRlcy9zcHJpdGVQYWNrZWRNYW5hZ2Vy
LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKKyAg
ISoqKiAuL1Nwcml0ZXMvc3ByaXRlUGFja2VkTWFuYWdlci50cyAqKiohCisgIFwqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IFNw
cml0ZVBhY2tlZE1hbmFnZXIgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U3ByaXRlUGFja2VkTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3ByaXRlUGFja2VkTWFu
YWdlcjsgfSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2Rl
X21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X3Nwcml0ZU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vc3ByaXRlTWFuYWdlciAqLyAiLi9TcHJpdGVzL3Nwcml0ZU1hbmFnZXIu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1
cmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4uL01hdGVyaWFscy9UZXh0dXJlcy90ZXh0dXJlICovICIuL01hdGVyaWFscy9UZXh0dXJlcy90
ZXh0dXJlLnRzIik7CisKKworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gbWFuYWdlIG11bHRpcGxl
IHNwcml0ZXMgb2YgZGlmZmVyZW50IHNpemVzIG9uIHRoZSBzYW1lIHNwcml0ZXNoZWV0CisgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL3Nwcml0ZXMKKyAqLwordmFy
IFNwcml0ZVBhY2tlZE1hbmFnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7
CisgICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oU3By
aXRlUGFja2VkTWFuYWdlciwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3
IHNwcml0ZSBtYW5hZ2VyIGZyb20gYSBwYWNrZWQgc3ByaXRlIHNoZWV0CisgICAgICogQHBhcmFt
IG5hbWUgZGVmaW5lcyB0aGUgbWFuYWdlcidzIG5hbWUKKyAgICAgKiBAcGFyYW0gaW1nVXJsIGRl
ZmluZXMgdGhlIHNwcml0ZSBzaGVldCB1cmwKKyAgICAgKiBAcGFyYW0gY2FwYWNpdHkgZGVmaW5l
cyB0aGUgbWF4aW11bSBhbGxvd2VkIG51bWJlciBvZiBzcHJpdGVzCisgICAgICogQHBhcmFtIHNj
ZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gc3ByaXRlSlNPTiBu
dWxsIG90aGVyd2lzZSBhIEpTT04gb2JqZWN0IGRlZmluaW5nIHNwcml0ZSBzaGVldCBkYXRhCisg
ICAgICogQHBhcmFtIGVwc2lsb24gZGVmaW5lcyB0aGUgZXBzaWxvbiB2YWx1ZSB0byBhbGlnbiB0
ZXh0dXJlICgwLjAxIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIHNhbXBsaW5nTW9kZSBkZWZp
bmVzIHRoZSBzbWFwbGluZyBtb2RlIHRvIHVzZSB3aXRoIHNwcml0ZXNoZWV0CisgICAgICogQHBh
cmFtIGZyb21QYWNrZWQgc2V0IHRvIHRydWU7IGRvIG5vdCBhbHRlcgorICAgICAqLworICAgIGZ1
bmN0aW9uIFNwcml0ZVBhY2tlZE1hbmFnZXIoCisgICAgLyoqIGRlZmluZXMgdGhlIHBhY2tlZCBt
YW5hZ2VyJ3MgbmFtZSAqLworICAgIG5hbWUsIGltZ1VybCwgY2FwYWNpdHksIHNjZW5lLCBzcHJp
dGVKU09OLCBlcHNpbG9uLCBzYW1wbGluZ01vZGUpIHsKKyAgICAgICAgaWYgKHNwcml0ZUpTT04g
PT09IHZvaWQgMCkgeyBzcHJpdGVKU09OID0gbnVsbDsgfQorICAgICAgICBpZiAoZXBzaWxvbiA9
PT0gdm9pZCAwKSB7IGVwc2lsb24gPSAwLjAxOyB9CisgICAgICAgIGlmIChzYW1wbGluZ01vZGUg
PT09IHZvaWQgMCkgeyBzYW1wbGluZ01vZGUgPSBfTWF0ZXJpYWxzX1RleHR1cmVzX3RleHR1cmVf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVGV4dHVyZSJdLlRSSUxJTkVBUl9TQU1QTElO
R01PREU7IH0KKyAgICAgICAgdmFyIF90aGlzID0gCisgICAgICAgIC8vdGhlIGNlbGxTaXplIHBh
cmFtZXRlciBpcyBub3QgdXNlZCB3aGVuIGJ1aWx0IGZyb20gSlNPTiB3aGljaCBwcm92aWRlcyBp
bmRpdmlkdWFsIGNlbGwgZGF0YSwgZGVmYXVsdHMgdG8gNjQgaWYgSlNPTiBsb2FkIGZhaWxzCisg
ICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIG5hbWUsIGltZ1VybCwgY2FwYWNpdHksIDY0LCBzY2Vu
ZSwgZXBzaWxvbiwgc2FtcGxpbmdNb2RlLCB0cnVlLCBzcHJpdGVKU09OKSB8fCB0aGlzOworICAg
ICAgICBfdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgcmV0dXJuIF90aGlzOworICAgIH0KKyAg
ICByZXR1cm4gU3ByaXRlUGFja2VkTWFuYWdlcjsKK30oX3Nwcml0ZU1hbmFnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siU3ByaXRlTWFuYWdlciJdKSk7CisKKworCisvKioqLyB9KSwK
KworLyoqKi8gIi4vU3ByaXRlcy9zcHJpdGVTY2VuZUNvbXBvbmVudC50cyI6CisvKiEqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAorICAhKioqIC4vU3ByaXRlcy9z
cHJpdGVTY2VuZUNvbXBvbmVudC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBTcHJpdGVTY2VuZUNvbXBv
bmVudCAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193
ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcHJpdGVTY2VuZUNv
bXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU3ByaXRlU2NlbmVDb21wb25lbnQ7IH0pOwor
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL01pc2Mvb2JzZXJ2YWJs
ZSAqLyAiLi9NaXNjL29ic2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
c2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL3NjZW5lICovICIuL3NjZW5lLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X0N1bGxpbmdfcmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuLi9DdWxsaW5nL3JheSAqLyAiLi9DdWxsaW5nL3JheS50cyIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9Db2xsaXNpb25zX3BpY2tpbmdJbmZvX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9Db2xsaXNpb25zL3Bp
Y2tpbmdJbmZvICovICIuL0NvbGxpc2lvbnMvcGlja2luZ0luZm8udHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5l
Q29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0FjdGlvbnNfYWN0aW9u
RXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4uL0FjdGlvbnMvYWN0aW9uRXZlbnQgKi8gIi4vQWN0aW9ucy9hY3Rpb25FdmVudC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9j
b25zdGFudHMgKi8gIi4vRW5naW5lcy9jb25zdGFudHMudHMiKTsKKworCisKKworCisKKworX3Nj
ZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lIl0ucHJvdG90eXBlLl9pbnRl
cm5hbFBpY2tTcHJpdGVzID0gZnVuY3Rpb24gKHJheSwgcHJlZGljYXRlLCBmYXN0Q2hlY2ssIGNh
bWVyYSkgeworICAgIGlmICghX0NvbGxpc2lvbnNfcGlja2luZ0luZm9fX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siUGlja2luZ0luZm8iXSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICB9CisgICAgdmFyIHBpY2tpbmdJbmZvID0gbnVsbDsKKyAgICBpZiAoIWNhbWVyYSkgeworICAg
ICAgICBpZiAoIXRoaXMuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICBjYW1lcmEgPSB0aGlzLmFjdGl2ZUNhbWVyYTsKKyAgICB9Cisg
ICAgaWYgKHRoaXMuc3ByaXRlTWFuYWdlcnMubGVuZ3RoID4gMCkgeworICAgICAgICBmb3IgKHZh
ciBzcHJpdGVJbmRleCA9IDA7IHNwcml0ZUluZGV4IDwgdGhpcy5zcHJpdGVNYW5hZ2Vycy5sZW5n
dGg7IHNwcml0ZUluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBzcHJpdGVNYW5hZ2VyID0gdGhp
cy5zcHJpdGVNYW5hZ2Vyc1tzcHJpdGVJbmRleF07CisgICAgICAgICAgICBpZiAoIXNwcml0ZU1h
bmFnZXIuaXNQaWNrYWJsZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHNwcml0ZU1hbmFnZXIuaW50ZXJzZWN0cyhy
YXksIGNhbWVyYSwgcHJlZGljYXRlLCBmYXN0Q2hlY2spOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQgfHwgIXJlc3VsdC5oaXQpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghZmFzdENoZWNrICYmIHBpY2tpbmdJbmZvICE9IG51bGwg
JiYgcmVzdWx0LmRpc3RhbmNlID49IHBpY2tpbmdJbmZvLmRpc3RhbmNlKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwaWNraW5nSW5mbyA9
IHJlc3VsdDsKKyAgICAgICAgICAgIGlmIChmYXN0Q2hlY2spIHsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGlja2lu
Z0luZm8gfHwgbmV3IF9Db2xsaXNpb25zX3BpY2tpbmdJbmZvX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIlBpY2tpbmdJbmZvIl0oKTsKK307Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siU2NlbmUiXS5wcm90b3R5cGUuX2ludGVybmFsTXVsdGlQaWNrU3ByaXRlcyA9
IGZ1bmN0aW9uIChyYXksIHByZWRpY2F0ZSwgY2FtZXJhKSB7CisgICAgaWYgKCFfQ29sbGlzaW9u
c19waWNraW5nSW5mb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJQaWNraW5nSW5mbyJd
KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICB2YXIgcGlja2luZ0luZm9zID0g
bmV3IEFycmF5KCk7CisgICAgaWYgKCFjYW1lcmEpIHsKKyAgICAgICAgaWYgKCF0aGlzLmFjdGl2
ZUNhbWVyYSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
Y2FtZXJhID0gdGhpcy5hY3RpdmVDYW1lcmE7CisgICAgfQorICAgIGlmICh0aGlzLnNwcml0ZU1h
bmFnZXJzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgZm9yICh2YXIgc3ByaXRlSW5kZXggPSAwOyBz
cHJpdGVJbmRleCA8IHRoaXMuc3ByaXRlTWFuYWdlcnMubGVuZ3RoOyBzcHJpdGVJbmRleCsrKSB7
CisgICAgICAgICAgICB2YXIgc3ByaXRlTWFuYWdlciA9IHRoaXMuc3ByaXRlTWFuYWdlcnNbc3By
aXRlSW5kZXhdOworICAgICAgICAgICAgaWYgKCFzcHJpdGVNYW5hZ2VyLmlzUGlja2FibGUpIHsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
ciByZXN1bHRzID0gc3ByaXRlTWFuYWdlci5tdWx0aUludGVyc2VjdHMocmF5LCBjYW1lcmEsIHBy
ZWRpY2F0ZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0cyAhPT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgIHBpY2tpbmdJbmZvcyA9IHBpY2tpbmdJbmZvcy5jb25jYXQocmVzdWx0cyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBpY2tpbmdJbmZvczsKK307
Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siU2NlbmUiXS5wcm90b3R5cGUu
cGlja1Nwcml0ZSA9IGZ1bmN0aW9uICh4LCB5LCBwcmVkaWNhdGUsIGZhc3RDaGVjaywgY2FtZXJh
KSB7CisgICAgdGhpcy5jcmVhdGVQaWNraW5nUmF5SW5DYW1lcmFTcGFjZVRvUmVmKHgsIHksIHRo
aXMuX3RlbXBTcHJpdGVQaWNraW5nUmF5LCBjYW1lcmEpOworICAgIHJldHVybiB0aGlzLl9pbnRl
cm5hbFBpY2tTcHJpdGVzKHRoaXMuX3RlbXBTcHJpdGVQaWNraW5nUmF5LCBwcmVkaWNhdGUsIGZh
c3RDaGVjaywgY2FtZXJhKTsKK307Citfc2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1siU2NlbmUiXS5wcm90b3R5cGUucGlja1Nwcml0ZVdpdGhSYXkgPSBmdW5jdGlvbiAocmF5LCBw
cmVkaWNhdGUsIGZhc3RDaGVjaywgY2FtZXJhKSB7CisgICAgaWYgKCF0aGlzLl90ZW1wU3ByaXRl
UGlja2luZ1JheSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgaWYgKCFjYW1l
cmEpIHsKKyAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgY2FtZXJhID0gdGhpcy5hY3RpdmVDYW1lcmE7
CisgICAgfQorICAgIF9DdWxsaW5nX3JheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJS
YXkiXS5UcmFuc2Zvcm1Ub1JlZihyYXksIGNhbWVyYS5nZXRWaWV3TWF0cml4KCksIHRoaXMuX3Rl
bXBTcHJpdGVQaWNraW5nUmF5KTsKKyAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxQaWNrU3ByaXRl
cyh0aGlzLl90ZW1wU3ByaXRlUGlja2luZ1JheSwgcHJlZGljYXRlLCBmYXN0Q2hlY2ssIGNhbWVy
YSk7Cit9OworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lIl0ucHJv
dG90eXBlLm11bHRpUGlja1Nwcml0ZSA9IGZ1bmN0aW9uICh4LCB5LCBwcmVkaWNhdGUsIGNhbWVy
YSkgeworICAgIHRoaXMuY3JlYXRlUGlja2luZ1JheUluQ2FtZXJhU3BhY2VUb1JlZih4LCB5LCB0
aGlzLl90ZW1wU3ByaXRlUGlja2luZ1JheSwgY2FtZXJhKTsKKyAgICByZXR1cm4gdGhpcy5faW50
ZXJuYWxNdWx0aVBpY2tTcHJpdGVzKHRoaXMuX3RlbXBTcHJpdGVQaWNraW5nUmF5LCBwcmVkaWNh
dGUsIGNhbWVyYSk7Cit9OworX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNj
ZW5lIl0ucHJvdG90eXBlLm11bHRpUGlja1Nwcml0ZVdpdGhSYXkgPSBmdW5jdGlvbiAocmF5LCBw
cmVkaWNhdGUsIGNhbWVyYSkgeworICAgIGlmICghdGhpcy5fdGVtcFNwcml0ZVBpY2tpbmdSYXkp
IHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIGlmICghY2FtZXJhKSB7CisgICAg
ICAgIGlmICghdGhpcy5hY3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICB9CisgICAgICAgIGNhbWVyYSA9IHRoaXMuYWN0aXZlQ2FtZXJhOworICAgIH0KKyAg
ICBfQ3VsbGluZ19yYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUmF5Il0uVHJhbnNm
b3JtVG9SZWYocmF5LCBjYW1lcmEuZ2V0Vmlld01hdHJpeCgpLCB0aGlzLl90ZW1wU3ByaXRlUGlj
a2luZ1JheSk7CisgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsTXVsdGlQaWNrU3ByaXRlcyh0aGlz
Ll90ZW1wU3ByaXRlUGlja2luZ1JheSwgcHJlZGljYXRlLCBjYW1lcmEpOworfTsKK19zY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTY2VuZSJdLnByb3RvdHlwZS5zZXRQb2ludGVy
T3ZlclNwcml0ZSA9IGZ1bmN0aW9uIChzcHJpdGUpIHsKKyAgICBpZiAodGhpcy5fcG9pbnRlck92
ZXJTcHJpdGUgPT09IHNwcml0ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0
aGlzLl9wb2ludGVyT3ZlclNwcml0ZSAmJiB0aGlzLl9wb2ludGVyT3ZlclNwcml0ZS5hY3Rpb25N
YW5hZ2VyKSB7CisgICAgICAgIHRoaXMuX3BvaW50ZXJPdmVyU3ByaXRlLmFjdGlvbk1hbmFnZXIu
cHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBvaW50ZXJPdXRUcmlnZ2VyLCBfQWN0aW9uc19h
Y3Rpb25FdmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJBY3Rpb25FdmVudCJdLkNy
ZWF0ZU5ld0Zyb21TcHJpdGUodGhpcy5fcG9pbnRlck92ZXJTcHJpdGUsIHRoaXMpKTsKKyAgICB9
CisgICAgdGhpcy5fcG9pbnRlck92ZXJTcHJpdGUgPSBzcHJpdGU7CisgICAgaWYgKHRoaXMuX3Bv
aW50ZXJPdmVyU3ByaXRlICYmIHRoaXMuX3BvaW50ZXJPdmVyU3ByaXRlLmFjdGlvbk1hbmFnZXIp
IHsKKyAgICAgICAgdGhpcy5fcG9pbnRlck92ZXJTcHJpdGUuYWN0aW9uTWFuYWdlci5wcm9jZXNz
VHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
Q29uc3RhbnRzIl0uQUNUSU9OX09uUG9pbnRlck92ZXJUcmlnZ2VyLCBfQWN0aW9uc19hY3Rpb25F
dmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJBY3Rpb25FdmVudCJdLkNyZWF0ZU5l
d0Zyb21TcHJpdGUodGhpcy5fcG9pbnRlck92ZXJTcHJpdGUsIHRoaXMpKTsKKyAgICB9Cit9Owor
X3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlNjZW5lIl0ucHJvdG90eXBlLmdl
dFBvaW50ZXJPdmVyU3ByaXRlID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiB0aGlzLl9wb2lu
dGVyT3ZlclNwcml0ZTsKK307CisvKioKKyAqIERlZmluZXMgdGhlIHNwcml0ZSBzY2VuZSBjb21w
b25lbnQgcmVzcG9uc2libGUgdG8gbWFuYWdlIHNwcml0ZXMKKyAqIGluIGEgZ2l2ZW4gc2NlbmUu
CisgKi8KK3ZhciBTcHJpdGVTY2VuZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb21w
b25lbnQgZm9yIHRoZSBnaXZlbiBzY2VuZQorICAgICAqIEBwYXJhbSBzY2VuZSBEZWZpbmVzIHRo
ZSBzY2VuZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IGluCisgICAgICovCisgICAgZnVuY3Rp
b24gU3ByaXRlU2NlbmVDb21wb25lbnQoc2NlbmUpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFRoZSBjb21wb25lbnQgbmFtZSBoZWxwZnVsbCB0byBpZGVudGlmeSB0aGUgY29tcG9uZW50IGlu
IHRoZSBsaXN0IG9mIHNjZW5lIGNvbXBvbmVudHMuCisgICAgICAgICAqLworICAgICAgICB0aGlz
Lm5hbWUgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU2Nl
bmVDb21wb25lbnRDb25zdGFudHMiXS5OQU1FX1NQUklURTsKKyAgICAgICAgdGhpcy5zY2VuZSA9
IHNjZW5lOworICAgICAgICB0aGlzLnNjZW5lLnNwcml0ZU1hbmFnZXJzID0gbmV3IEFycmF5KCk7
CisgICAgICAgIHRoaXMuc2NlbmUuX3RlbXBTcHJpdGVQaWNraW5nUmF5ID0gX0N1bGxpbmdfcmF5
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlJheSJdID8gX0N1bGxpbmdfcmF5X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlJheSJdLlplcm8oKSA6IG51bGw7CisgICAgICAgIHRo
aXMuc2NlbmUub25CZWZvcmVTcHJpdGVzUmVuZGVyaW5nT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19v
YnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk9ic2VydmFibGUiXSgpOwor
ICAgICAgICB0aGlzLnNjZW5lLm9uQWZ0ZXJTcHJpdGVzUmVuZGVyaW5nT2JzZXJ2YWJsZSA9IG5l
dyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIk9ic2VydmFi
bGUiXSgpOworICAgICAgICB0aGlzLl9zcHJpdGVQcmVkaWNhdGUgPSBmdW5jdGlvbiAoc3ByaXRl
KSB7CisgICAgICAgICAgICBpZiAoIXNwcml0ZS5hY3Rpb25NYW5hZ2VyKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNw
cml0ZS5pc1BpY2thYmxlICYmIHNwcml0ZS5hY3Rpb25NYW5hZ2VyLmhhc1BvaW50ZXJUcmlnZ2Vy
czsKKyAgICAgICAgfTsKKyAgICB9CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSBjb21w
b25lbnQgaW4gYSBnaXZlbiBzY2VuZQorICAgICAqLworICAgIFNwcml0ZVNjZW5lQ29tcG9uZW50
LnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2VuZS5f
cG9pbnRlck1vdmVTdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9QT0lOVEVS
TU9WRV9TUFJJVEUsIHRoaXMsIHRoaXMuX3BvaW50ZXJNb3ZlKTsKKyAgICAgICAgdGhpcy5zY2Vu
ZS5fcG9pbnRlckRvd25TdGFnZS5yZWdpc3RlclN0ZXAoX3NjZW5lQ29tcG9uZW50X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIl0uU1RFUF9QT0lO
VEVSRE9XTl9TUFJJVEUsIHRoaXMsIHRoaXMuX3BvaW50ZXJEb3duKTsKKyAgICAgICAgdGhpcy5z
Y2VuZS5fcG9pbnRlclVwU3RhZ2UucmVnaXN0ZXJTdGVwKF9zY2VuZUNvbXBvbmVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTY2VuZUNvbXBvbmVudENvbnN0YW50cyJdLlNURVBfUE9J
TlRFUlVQX1NQUklURSwgdGhpcywgdGhpcy5fcG9pbnRlclVwKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFJlYnVpbGRzIHRoZSBlbGVtZW50cyByZWxhdGVkIHRvIHRoaXMgY29tcG9uZW50IGlu
IGNhc2Ugb2YKKyAgICAgKiBjb250ZXh0IGxvc3QgZm9yIGluc3RhbmNlLgorICAgICAqLworICAg
IFNwcml0ZVNjZW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWJ1aWxkID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAvKiogTm90aGluZyB0byBkbyBmb3Igc3ByaXRlcyAqLworICAgIH07CisgICAgLyoq
CisgICAgICogRGlzcG9zZXMgdGhlIGNvbXBvbmVudCBhbmQgdGhlIGFzc29jaWF0ZWQgcmVzc291
cmNlcy4KKyAgICAgKi8KKyAgICBTcHJpdGVTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuZGlzcG9z
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zY2VuZS5vbkJlZm9yZVNwcml0ZXNSZW5k
ZXJpbmdPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMuc2NlbmUub25BZnRlclNwcml0
ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHZhciBzcHJpdGVNYW5hZ2Vy
cyA9IHRoaXMuc2NlbmUuc3ByaXRlTWFuYWdlcnM7CisgICAgICAgIHdoaWxlIChzcHJpdGVNYW5h
Z2Vycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHNwcml0ZU1hbmFnZXJzWzBdLmRpc3Bvc2UoKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgU3ByaXRlU2NlbmVDb21wb25lbnQucHJvdG90eXBlLl9w
aWNrU3ByaXRlQnV0S2VlcFJheSA9IGZ1bmN0aW9uIChvcmlnaW5hbFBvaW50ZXJJbmZvLCB4LCB5
LCBmYXN0Q2hlY2ssIGNhbWVyYSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zY2VuZS5w
aWNrU3ByaXRlKHgsIHksIHRoaXMuX3Nwcml0ZVByZWRpY2F0ZSwgZmFzdENoZWNrLCBjYW1lcmEp
OworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICByZXN1bHQucmF5ID0gb3JpZ2lu
YWxQb2ludGVySW5mbyA/IG9yaWdpbmFsUG9pbnRlckluZm8ucmF5IDogbnVsbDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgU3ByaXRlU2NlbmVDb21wb25l
bnQucHJvdG90eXBlLl9wb2ludGVyTW92ZSA9IGZ1bmN0aW9uICh1blRyYW5zbGF0ZWRQb2ludGVy
WCwgdW5UcmFuc2xhdGVkUG9pbnRlclksIHBpY2tSZXN1bHQsIGlzTWVzaFBpY2tlZCwgY2FudmFz
KSB7CisgICAgICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7CisgICAgICAgIGlmIChpc01lc2hQ
aWNrZWQpIHsKKyAgICAgICAgICAgIHNjZW5lLnNldFBvaW50ZXJPdmVyU3ByaXRlKG51bGwpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGlja1Jlc3VsdCA9IHRoaXMu
X3BpY2tTcHJpdGVCdXRLZWVwUmF5KHBpY2tSZXN1bHQsIHVuVHJhbnNsYXRlZFBvaW50ZXJYLCB1
blRyYW5zbGF0ZWRQb2ludGVyWSwgZmFsc2UsIHNjZW5lLmNhbWVyYVRvVXNlRm9yUG9pbnRlcnMg
fHwgdW5kZWZpbmVkKTsKKyAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0ICYmIHBpY2tSZXN1bHQu
aGl0ICYmIHBpY2tSZXN1bHQucGlja2VkU3ByaXRlKSB7CisgICAgICAgICAgICAgICAgc2NlbmUu
c2V0UG9pbnRlck92ZXJTcHJpdGUocGlja1Jlc3VsdC5waWNrZWRTcHJpdGUpOworICAgICAgICAg
ICAgICAgIGlmIChzY2VuZS5fcG9pbnRlck92ZXJTcHJpdGUgJiYgc2NlbmUuX3BvaW50ZXJPdmVy
U3ByaXRlLmFjdGlvbk1hbmFnZXIgJiYgc2NlbmUuX3BvaW50ZXJPdmVyU3ByaXRlLmFjdGlvbk1h
bmFnZXIuaG92ZXJDdXJzb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLmN1
cnNvciA9IHNjZW5lLl9wb2ludGVyT3ZlclNwcml0ZS5hY3Rpb25NYW5hZ2VyLmhvdmVyQ3Vyc29y
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IHNjZW5lLmhvdmVyQ3Vyc29yOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIHNjZW5lLnNldFBvaW50ZXJPdmVyU3ByaXRlKG51bGwpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBwaWNrUmVzdWx0OworICAgIH07CisgICAgU3ByaXRl
U2NlbmVDb21wb25lbnQucHJvdG90eXBlLl9wb2ludGVyRG93biA9IGZ1bmN0aW9uICh1blRyYW5z
bGF0ZWRQb2ludGVyWCwgdW5UcmFuc2xhdGVkUG9pbnRlclksIHBpY2tSZXN1bHQsIGV2dCkgewor
ICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lOworICAgICAgICBzY2VuZS5fcGlja2VkRG93
blNwcml0ZSA9IG51bGw7CisgICAgICAgIGlmIChzY2VuZS5zcHJpdGVNYW5hZ2Vycy5sZW5ndGgg
PiAwKSB7CisgICAgICAgICAgICBwaWNrUmVzdWx0ID0gc2NlbmUucGlja1Nwcml0ZSh1blRyYW5z
bGF0ZWRQb2ludGVyWCwgdW5UcmFuc2xhdGVkUG9pbnRlclksIHRoaXMuX3Nwcml0ZVByZWRpY2F0
ZSwgZmFsc2UsIHNjZW5lLmNhbWVyYVRvVXNlRm9yUG9pbnRlcnMgfHwgdW5kZWZpbmVkKTsKKyAg
ICAgICAgICAgIGlmIChwaWNrUmVzdWx0ICYmIHBpY2tSZXN1bHQuaGl0ICYmIHBpY2tSZXN1bHQu
cGlja2VkU3ByaXRlKSB7CisgICAgICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQucGlja2VkU3By
aXRlLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgc2NlbmUuX3BpY2tlZERv
d25TcHJpdGUgPSBwaWNrUmVzdWx0LnBpY2tlZFNwcml0ZTsKKyAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChldnQuYnV0dG9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja1Jlc3VsdC5waWNrZWRTcHJpdGUuYWN0aW9u
TWFuYWdlci5wcm9jZXNzVHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uTGVmdFBpY2tUcmlnZ2VyLCBfQWN0
aW9uc19hY3Rpb25FdmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJBY3Rpb25FdmVu
dCJdLkNyZWF0ZU5ld0Zyb21TcHJpdGUocGlja1Jlc3VsdC5waWNrZWRTcHJpdGUsIHNjZW5lLCBl
dnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrUmVzdWx0
LnBpY2tlZFNwcml0ZS5hY3Rpb25NYW5hZ2VyLnByb2Nlc3NUcmlnZ2VyKF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25D
ZW50ZXJQaWNrVHJpZ2dlciwgX0FjdGlvbnNfYWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siQWN0aW9uRXZlbnQiXS5DcmVhdGVOZXdGcm9tU3ByaXRlKHBpY2tSZXN1bHQu
cGlja2VkU3ByaXRlLCBzY2VuZSwgZXZ0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGlja1Jlc3VsdC5waWNrZWRTcHJpdGUuYWN0aW9uTWFuYWdlci5wcm9jZXNz
VHJpZ2dlcihfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
Q29uc3RhbnRzIl0uQUNUSU9OX09uUmlnaHRQaWNrVHJpZ2dlciwgX0FjdGlvbnNfYWN0aW9uRXZl
bnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQWN0aW9uRXZlbnQiXS5DcmVhdGVOZXdG
cm9tU3ByaXRlKHBpY2tSZXN1bHQucGlja2VkU3ByaXRlLCBzY2VuZSwgZXZ0KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQucGlja2VkU3ByaXRlLmFjdGlvbk1hbmFnZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tSZXN1bHQucGlja2VkU3ByaXRlLmFjdGlv
bk1hbmFnZXIucHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBpY2tEb3duVHJpZ2dlciwgX0Fj
dGlvbnNfYWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQWN0aW9uRXZl
bnQiXS5DcmVhdGVOZXdGcm9tU3ByaXRlKHBpY2tSZXN1bHQucGlja2VkU3ByaXRlLCBzY2VuZSwg
ZXZ0KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBpY2tSZXN1bHQ7CisgICAgfTsKKyAg
ICBTcHJpdGVTY2VuZUNvbXBvbmVudC5wcm90b3R5cGUuX3BvaW50ZXJVcCA9IGZ1bmN0aW9uICh1
blRyYW5zbGF0ZWRQb2ludGVyWCwgdW5UcmFuc2xhdGVkUG9pbnRlclksIHBpY2tSZXN1bHQsIGV2
dCkgeworICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lOworICAgICAgICBpZiAoc2NlbmUu
c3ByaXRlTWFuYWdlcnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdmFyIHNwcml0ZVBpY2tS
ZXN1bHQgPSBzY2VuZS5waWNrU3ByaXRlKHVuVHJhbnNsYXRlZFBvaW50ZXJYLCB1blRyYW5zbGF0
ZWRQb2ludGVyWSwgdGhpcy5fc3ByaXRlUHJlZGljYXRlLCBmYWxzZSwgc2NlbmUuY2FtZXJhVG9V
c2VGb3JQb2ludGVycyB8fCB1bmRlZmluZWQpOworICAgICAgICAgICAgaWYgKHNwcml0ZVBpY2tS
ZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3ByaXRlUGlja1Jlc3VsdC5oaXQgJiYgc3By
aXRlUGlja1Jlc3VsdC5waWNrZWRTcHJpdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNw
cml0ZVBpY2tSZXN1bHQucGlja2VkU3ByaXRlLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNwcml0ZVBpY2tSZXN1bHQucGlja2VkU3ByaXRlLmFjdGlvbk1hbmFnZXIu
cHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV82X19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBpY2tVcFRyaWdnZXIsIF9BY3Rpb25zX2FjdGlv
bkV2ZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkFjdGlvbkV2ZW50Il0uQ3JlYXRl
TmV3RnJvbVNwcml0ZShzcHJpdGVQaWNrUmVzdWx0LnBpY2tlZFNwcml0ZSwgc2NlbmUsIGV2dCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwcml0ZVBpY2tSZXN1bHQucGlja2VkU3By
aXRlLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRo
aXMuc2NlbmUuX2lucHV0TWFuYWdlci5faXNQb2ludGVyU3dpcGluZygpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwcml0ZVBpY2tSZXN1bHQucGlja2VkU3ByaXRlLmFjdGlv
bk1hbmFnZXIucHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLkFDVElPTl9PblBpY2tUcmlnZ2VyLCBfQWN0aW9u
c19hY3Rpb25FdmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJBY3Rpb25FdmVudCJd
LkNyZWF0ZU5ld0Zyb21TcHJpdGUoc3ByaXRlUGlja1Jlc3VsdC5waWNrZWRTcHJpdGUsIHNjZW5l
LCBldnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKHNjZW5lLl9waWNrZWREb3duU3ByaXRlICYmIHNjZW5lLl9waWNrZWRE
b3duU3ByaXRlLmFjdGlvbk1hbmFnZXIgJiYgc2NlbmUuX3BpY2tlZERvd25TcHJpdGUgIT09IHNw
cml0ZVBpY2tSZXN1bHQucGlja2VkU3ByaXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNjZW5l
Ll9waWNrZWREb3duU3ByaXRlLmFjdGlvbk1hbmFnZXIucHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNf
Y29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIkNvbnN0YW50cyJdLkFDVElP
Tl9PblBpY2tPdXRUcmlnZ2VyLCBfQWN0aW9uc19hY3Rpb25FdmVudF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJBY3Rpb25FdmVudCJdLkNyZWF0ZU5ld0Zyb21TcHJpdGUoc2NlbmUuX3Bp
Y2tlZERvd25TcHJpdGUsIHNjZW5lLCBldnQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBpY2tSZXN1bHQ7CisgICAgfTsKKyAg
ICByZXR1cm4gU3ByaXRlU2NlbmVDb21wb25lbnQ7Cit9KCkpOworCisKKworLyoqKi8gfSksCisK
Ky8qKiovICIuL1N0YXRlcy9hbHBoYUN1bGxpbmdTdGF0ZS50cyI6CisvKiEqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9TdGF0ZXMvYWxwaGFDdWxsaW5n
U3RhdGUudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Ky8qISBleHBvcnRzIHByb3ZpZGVkOiBfQWxwaGFTdGF0ZSAqLworLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNl
IHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJfQWxwaGFTdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0FscGhh
U3RhdGU7IH0pOworLyoqCisgKiBAaGlkZGVuCisgKiovCit2YXIgX0FscGhhU3RhdGUgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhl
IHN0YXRlLgorICAgICAqLworICAgIGZ1bmN0aW9uIF9BbHBoYVN0YXRlKCkgeworICAgICAgICB0
aGlzLl9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVycyA9IG5ldyBBcnJheSg0KTsKKyAgICAgICAgdGhp
cy5fYmxlbmRFcXVhdGlvblBhcmFtZXRlcnMgPSBuZXcgQXJyYXkoMik7CisgICAgICAgIHRoaXMu
X2JsZW5kQ29uc3RhbnRzID0gbmV3IEFycmF5KDQpOworICAgICAgICB0aGlzLl9pc0JsZW5kQ29u
c3RhbnRzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fYWxwaGFCbGVuZCA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl9pc0FscGhhQmxlbmREaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9p
c0JsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faXNC
bGVuZEVxdWF0aW9uUGFyYW1ldGVyc0RpcnR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMucmVzZXQo
KTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9BbHBoYVN0YXRlLnByb3RvdHlw
ZSwgImlzRGlydHkiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2lzQWxwaGFCbGVuZERpcnR5IHx8IHRoaXMuX2lzQmxlbmRGdW5jdGlvblBh
cmFtZXRlcnNEaXJ0eTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KF9BbHBoYVN0YXRlLnByb3RvdHlwZSwgImFscGhhQmxlbmQiLCB7CisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FscGhhQmxlbmQ7CisgICAg
ICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5fYWxwaGFCbGVuZCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9hbHBoYUJsZW5kID0gdmFsdWU7CisgICAg
ICAgICAgICB0aGlzLl9pc0FscGhhQmxlbmREaXJ0eSA9IHRydWU7CisgICAgICAgIH0sCisgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0p
OworICAgIF9BbHBoYVN0YXRlLnByb3RvdHlwZS5zZXRBbHBoYUJsZW5kQ29uc3RhbnRzID0gZnVu
Y3Rpb24gKHIsIGcsIGIsIGEpIHsKKyAgICAgICAgaWYgKHRoaXMuX2JsZW5kQ29uc3RhbnRzWzBd
ID09PSByICYmCisgICAgICAgICAgICB0aGlzLl9ibGVuZENvbnN0YW50c1sxXSA9PT0gZyAmJgor
ICAgICAgICAgICAgdGhpcy5fYmxlbmRDb25zdGFudHNbMl0gPT09IGIgJiYKKyAgICAgICAgICAg
IHRoaXMuX2JsZW5kQ29uc3RhbnRzWzNdID09PSBhKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fYmxlbmRDb25zdGFudHNbMF0gPSByOworICAgICAgICB0
aGlzLl9ibGVuZENvbnN0YW50c1sxXSA9IGc7CisgICAgICAgIHRoaXMuX2JsZW5kQ29uc3RhbnRz
WzJdID0gYjsKKyAgICAgICAgdGhpcy5fYmxlbmRDb25zdGFudHNbM10gPSBhOworICAgICAgICB0
aGlzLl9pc0JsZW5kQ29uc3RhbnRzRGlydHkgPSB0cnVlOworICAgIH07CisgICAgX0FscGhhU3Rh
dGUucHJvdG90eXBlLnNldEFscGhhQmxlbmRGdW5jdGlvblBhcmFtZXRlcnMgPSBmdW5jdGlvbiAo
dmFsdWUwLCB2YWx1ZTEsIHZhbHVlMiwgdmFsdWUzKSB7CisgICAgICAgIGlmICh0aGlzLl9ibGVu
ZEZ1bmN0aW9uUGFyYW1ldGVyc1swXSA9PT0gdmFsdWUwICYmCisgICAgICAgICAgICB0aGlzLl9i
bGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1sxXSA9PT0gdmFsdWUxICYmCisgICAgICAgICAgICB0aGlz
Ll9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1syXSA9PT0gdmFsdWUyICYmCisgICAgICAgICAgICB0
aGlzLl9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1szXSA9PT0gdmFsdWUzKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYmxlbmRGdW5jdGlvblBhcmFtZXRl
cnNbMF0gPSB2YWx1ZTA7CisgICAgICAgIHRoaXMuX2JsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzWzFd
ID0gdmFsdWUxOworICAgICAgICB0aGlzLl9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1syXSA9IHZh
bHVlMjsKKyAgICAgICAgdGhpcy5fYmxlbmRGdW5jdGlvblBhcmFtZXRlcnNbM10gPSB2YWx1ZTM7
CisgICAgICAgIHRoaXMuX2lzQmxlbmRGdW5jdGlvblBhcmFtZXRlcnNEaXJ0eSA9IHRydWU7Cisg
ICAgfTsKKyAgICBfQWxwaGFTdGF0ZS5wcm90b3R5cGUuc2V0QWxwaGFFcXVhdGlvblBhcmFtZXRl
cnMgPSBmdW5jdGlvbiAocmdiLCBhbHBoYSkgeworICAgICAgICBpZiAodGhpcy5fYmxlbmRFcXVh
dGlvblBhcmFtZXRlcnNbMF0gPT09IHJnYiAmJgorICAgICAgICAgICAgdGhpcy5fYmxlbmRFcXVh
dGlvblBhcmFtZXRlcnNbMV0gPT09IGFscGhhKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fYmxlbmRFcXVhdGlvblBhcmFtZXRlcnNbMF0gPSByZ2I7Cisg
ICAgICAgIHRoaXMuX2JsZW5kRXF1YXRpb25QYXJhbWV0ZXJzWzFdID0gYWxwaGE7CisgICAgICAg
IHRoaXMuX2lzQmxlbmRFcXVhdGlvblBhcmFtZXRlcnNEaXJ0eSA9IHRydWU7CisgICAgfTsKKyAg
ICBfQWxwaGFTdGF0ZS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMuX2FscGhhQmxlbmQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fYmxlbmRGdW5jdGlvblBhcmFt
ZXRlcnNbMF0gPSBudWxsOworICAgICAgICB0aGlzLl9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1sx
XSA9IG51bGw7CisgICAgICAgIHRoaXMuX2JsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzWzJdID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fYmxlbmRGdW5jdGlvblBhcmFtZXRlcnNbM10gPSBudWxsOworICAg
ICAgICB0aGlzLl9ibGVuZEVxdWF0aW9uUGFyYW1ldGVyc1swXSA9IG51bGw7CisgICAgICAgIHRo
aXMuX2JsZW5kRXF1YXRpb25QYXJhbWV0ZXJzWzFdID0gbnVsbDsKKyAgICAgICAgdGhpcy5fYmxl
bmRDb25zdGFudHNbMF0gPSBudWxsOworICAgICAgICB0aGlzLl9ibGVuZENvbnN0YW50c1sxXSA9
IG51bGw7CisgICAgICAgIHRoaXMuX2JsZW5kQ29uc3RhbnRzWzJdID0gbnVsbDsKKyAgICAgICAg
dGhpcy5fYmxlbmRDb25zdGFudHNbM10gPSBudWxsOworICAgICAgICB0aGlzLl9pc0FscGhhQmxl
bmREaXJ0eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2lzQmxlbmRGdW5jdGlvblBhcmFtZXRlcnNE
aXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0JsZW5kRXF1YXRpb25QYXJhbWV0ZXJzRGly
dHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faXNCbGVuZENvbnN0YW50c0RpcnR5ID0gZmFsc2U7
CisgICAgfTsKKyAgICBfQWxwaGFTdGF0ZS5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbiAoZ2wp
IHsKKyAgICAgICAgaWYgKCF0aGlzLmlzRGlydHkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAvLyBBbHBoYSBibGVuZAorICAgICAgICBpZiAodGhpcy5faXNBbHBo
YUJsZW5kRGlydHkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9hbHBoYUJsZW5kKSB7CisgICAg
ICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5faXNBbHBoYUJsZW5kRGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBBbHBoYSBmdW5jdGlvbgorICAgICAgICBpZiAodGhpcy5faXNC
bGVuZEZ1bmN0aW9uUGFyYW1ldGVyc0RpcnR5KSB7CisgICAgICAgICAgICBnbC5ibGVuZEZ1bmNT
ZXBhcmF0ZSh0aGlzLl9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1swXSwgdGhpcy5fYmxlbmRGdW5j
dGlvblBhcmFtZXRlcnNbMV0sIHRoaXMuX2JsZW5kRnVuY3Rpb25QYXJhbWV0ZXJzWzJdLCB0aGlz
Ll9ibGVuZEZ1bmN0aW9uUGFyYW1ldGVyc1szXSk7CisgICAgICAgICAgICB0aGlzLl9pc0JsZW5k
RnVuY3Rpb25QYXJhbWV0ZXJzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAvLyBB
bHBoYSBlcXVhdGlvbgorICAgICAgICBpZiAodGhpcy5faXNCbGVuZEVxdWF0aW9uUGFyYW1ldGVy
c0RpcnR5KSB7CisgICAgICAgICAgICBnbC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUodGhpcy5fYmxl
bmRFcXVhdGlvblBhcmFtZXRlcnNbMF0sIHRoaXMuX2JsZW5kRXF1YXRpb25QYXJhbWV0ZXJzWzFd
KTsKKyAgICAgICAgICAgIHRoaXMuX2lzQmxlbmRFcXVhdGlvblBhcmFtZXRlcnNEaXJ0eSA9IGZh
bHNlOworICAgICAgICB9CisgICAgICAgIC8vIENvbnN0YW50cworICAgICAgICBpZiAodGhpcy5f
aXNCbGVuZENvbnN0YW50c0RpcnR5KSB7CisgICAgICAgICAgICBnbC5ibGVuZENvbG9yKHRoaXMu
X2JsZW5kQ29uc3RhbnRzWzBdLCB0aGlzLl9ibGVuZENvbnN0YW50c1sxXSwgdGhpcy5fYmxlbmRD
b25zdGFudHNbMl0sIHRoaXMuX2JsZW5kQ29uc3RhbnRzWzNdKTsKKyAgICAgICAgICAgIHRoaXMu
X2lzQmxlbmRDb25zdGFudHNEaXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgfTsKKyAgICBy
ZXR1cm4gX0FscGhhU3RhdGU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiovICIuL1N0
YXRlcy9kZXB0aEN1bGxpbmdTdGF0ZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqISpcCisgICEqKiogLi9TdGF0ZXMvZGVwdGhDdWxsaW5nU3RhdGUudHMgKioq
IQorICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRz
IHByb3ZpZGVkOiBfRGVwdGhDdWxsaW5nU3RhdGUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUs
IF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJp
Y3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiX0RlcHRoQ3VsbGluZ1N0YXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRGVw
dGhDdWxsaW5nU3RhdGU7IH0pOworLyoqCisgKiBAaGlkZGVuCisgKiovCit2YXIgX0RlcHRoQ3Vs
bGluZ1N0YXRlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAq
IEluaXRpYWxpemVzIHRoZSBzdGF0ZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBfRGVwdGhDdWxs
aW5nU3RhdGUoKSB7CisgICAgICAgIHRoaXMuX2lzRGVwdGhUZXN0RGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5faXNEZXB0aE1hc2tEaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0Rl
cHRoRnVuY0RpcnR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lzQ3VsbEZhY2VEaXJ0eSA9IGZh
bHNlOworICAgICAgICB0aGlzLl9pc0N1bGxEaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9p
c1pPZmZzZXREaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0Zyb250RmFjZURpcnR5ID0g
ZmFsc2U7CisgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KF9EZXB0aEN1bGxpbmdTdGF0ZS5wcm90b3R5cGUsICJpc0RpcnR5IiwgeworICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RlcHRoRnVu
Y0RpcnR5IHx8IHRoaXMuX2lzRGVwdGhUZXN0RGlydHkgfHwgdGhpcy5faXNEZXB0aE1hc2tEaXJ0
eSB8fCB0aGlzLl9pc0N1bGxGYWNlRGlydHkgfHwgdGhpcy5faXNDdWxsRGlydHkgfHwgdGhpcy5f
aXNaT2Zmc2V0RGlydHkgfHwgdGhpcy5faXNGcm9udEZhY2VEaXJ0eTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9EZXB0aEN1bGxpbmdTdGF0ZS5wcm90b3R5
cGUsICJ6T2Zmc2V0IiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl96T2Zmc2V0OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3pPZmZzZXQgPT09IHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
ek9mZnNldCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5faXNaT2Zmc2V0RGlydHkgPSB0cnVl
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX0RlcHRoQ3Vs
bGluZ1N0YXRlLnByb3RvdHlwZSwgImN1bGxGYWNlIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdWxsRmFjZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9jdWxs
RmFjZSA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aGlzLl9jdWxsRmFjZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5f
aXNDdWxsRmFjZURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KF9EZXB0aEN1bGxpbmdTdGF0ZS5wcm90b3R5cGUsICJjdWxsIiwgeworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdWxsOwor
ICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAg
aWYgKHRoaXMuX2N1bGwgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fY3VsbCA9IHZhbHVlOworICAgICAgICAgICAg
dGhpcy5faXNDdWxsRGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxl
OiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoX0RlcHRoQ3VsbGluZ1N0YXRlLnByb3RvdHlwZSwgImRlcHRoRnVuYyIs
IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
ZGVwdGhGdW5jOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgaWYgKHRoaXMuX2RlcHRoRnVuYyA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9kZXB0aEZ1bmMg
PSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lzRGVwdGhGdW5jRGlydHkgPSB0cnVlOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX0RlcHRoQ3VsbGluZ1N0
YXRlLnByb3RvdHlwZSwgImRlcHRoTWFzayIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGhNYXNrOworICAgICAgICB9LAorICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2RlcHRoTWFz
ayA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl9kZXB0aE1hc2sgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lz
RGVwdGhNYXNrRGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoX0RlcHRoQ3VsbGluZ1N0YXRlLnByb3RvdHlwZSwgImRlcHRoVGVzdCIsIHsK
KyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVw
dGhUZXN0OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX2RlcHRoVGVzdCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9kZXB0aFRlc3QgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lzRGVwdGhUZXN0RGlydHkgPSB0cnVlOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX0RlcHRoQ3VsbGluZ1N0YXRl
LnByb3RvdHlwZSwgImZyb250RmFjZSIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJvbnRGYWNlOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2Zyb250RmFjZSA9
PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9mcm9udEZhY2UgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lzRnJv
bnRGYWNlRGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBfRGVwdGhDdWxsaW5n
U3RhdGUucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9kZXB0
aE1hc2sgPSB0cnVlOworICAgICAgICB0aGlzLl9kZXB0aFRlc3QgPSB0cnVlOworICAgICAgICB0
aGlzLl9kZXB0aEZ1bmMgPSBudWxsOworICAgICAgICB0aGlzLl9jdWxsRmFjZSA9IG51bGw7Cisg
ICAgICAgIHRoaXMuX2N1bGwgPSBudWxsOworICAgICAgICB0aGlzLl96T2Zmc2V0ID0gMDsKKyAg
ICAgICAgdGhpcy5fZnJvbnRGYWNlID0gbnVsbDsKKyAgICAgICAgdGhpcy5faXNEZXB0aFRlc3RE
aXJ0eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2lzRGVwdGhNYXNrRGlydHkgPSB0cnVlOworICAg
ICAgICB0aGlzLl9pc0RlcHRoRnVuY0RpcnR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lzQ3Vs
bEZhY2VEaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0N1bGxEaXJ0eSA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl9pc1pPZmZzZXREaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0Zy
b250RmFjZURpcnR5ID0gZmFsc2U7CisgICAgfTsKKyAgICBfRGVwdGhDdWxsaW5nU3RhdGUucHJv
dG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKGdsKSB7CisgICAgICAgIGlmICghdGhpcy5pc0RpcnR5
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gQ3VsbAorICAg
ICAgICBpZiAodGhpcy5faXNDdWxsRGlydHkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmN1bGwp
IHsKKyAgICAgICAgICAgICAgICBnbC5lbmFibGUoZ2wuQ1VMTF9GQUNFKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuQ1VM
TF9GQUNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2lzQ3VsbERpcnR5ID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ3VsbCBmYWNlCisgICAgICAgIGlmICh0aGlz
Ll9pc0N1bGxGYWNlRGlydHkpIHsKKyAgICAgICAgICAgIGdsLmN1bGxGYWNlKHRoaXMuY3VsbEZh
Y2UpOworICAgICAgICAgICAgdGhpcy5faXNDdWxsRmFjZURpcnR5ID0gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgLy8gRGVwdGggbWFzaworICAgICAgICBpZiAodGhpcy5faXNEZXB0aE1hc2tE
aXJ0eSkgeworICAgICAgICAgICAgZ2wuZGVwdGhNYXNrKHRoaXMuZGVwdGhNYXNrKTsKKyAgICAg
ICAgICAgIHRoaXMuX2lzRGVwdGhNYXNrRGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBEZXB0aCB0ZXN0CisgICAgICAgIGlmICh0aGlzLl9pc0RlcHRoVGVzdERpcnR5KSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5kZXB0aFRlc3QpIHsKKyAgICAgICAgICAgICAgICBnbC5lbmFi
bGUoZ2wuREVQVEhfVEVTVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBnbC5kaXNhYmxlKGdsLkRFUFRIX1RFU1QpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5faXNEZXB0aFRlc3REaXJ0eSA9IGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIC8vIERlcHRoIGZ1bmMKKyAgICAgICAgaWYgKHRoaXMuX2lzRGVwdGhGdW5jRGlydHkp
IHsKKyAgICAgICAgICAgIGdsLmRlcHRoRnVuYyh0aGlzLmRlcHRoRnVuYyk7CisgICAgICAgICAg
ICB0aGlzLl9pc0RlcHRoRnVuY0RpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8g
ek9mZnNldAorICAgICAgICBpZiAodGhpcy5faXNaT2Zmc2V0RGlydHkpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLnpPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBnbC5lbmFibGUoZ2wuUE9MWUdP
Tl9PRkZTRVRfRklMTCk7CisgICAgICAgICAgICAgICAgZ2wucG9seWdvbk9mZnNldCh0aGlzLnpP
ZmZzZXQsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgZ2wuZGlzYWJsZShnbC5QT0xZR09OX09GRlNFVF9GSUxMKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHRoaXMuX2lzWk9mZnNldERpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gRnJvbnQgZmFjZQorICAgICAgICBpZiAodGhpcy5faXNGcm9udEZhY2VEaXJ0eSkg
eworICAgICAgICAgICAgZ2wuZnJvbnRGYWNlKHRoaXMuZnJvbnRGYWNlKTsKKyAgICAgICAgICAg
IHRoaXMuX2lzRnJvbnRGYWNlRGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisgICAg
cmV0dXJuIF9EZXB0aEN1bGxpbmdTdGF0ZTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoq
Ki8gIi4vU3RhdGVzL2luZGV4LnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKiohKlwK
KyAgISoqKiAuL1N0YXRlcy9pbmRleC50cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IF9BbHBoYVN0YXRlLCBfRGVwdGhDdWxsaW5nU3Rh
dGUsIF9TdGVuY2lsU3RhdGUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9hbHBoYUN1bGxpbmdTdGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hbHBoYUN1bGxpbmdTdGF0ZSAqLyAiLi9TdGF0ZXMv
YWxwaGFDdWxsaW5nU3RhdGUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0FscGhhU3RhdGUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9hbHBoYUN1bGxpbmdTdGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJfQWxwaGFTdGF0ZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9kZXB0aEN1bGxpbmdTdGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygvKiEgLi9kZXB0aEN1bGxpbmdTdGF0ZSAqLyAiLi9TdGF0ZXMvZGVwdGhD
dWxsaW5nU3RhdGUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0RlcHRoQ3VsbGluZ1N0YXRlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfZGVwdGhDdWxsaW5nU3RhdGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siX0RlcHRoQ3VsbGluZ1N0YXRlIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3N0ZW5jaWxTdGF0ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdGVuY2lsU3RhdGUgKi8gIi4vU3RhdGVzL3N0ZW5jaWxT
dGF0ZS50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfU3RlbmNpbFN0YXRlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfc3RlbmNpbFN0YXRlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIl9TdGVu
Y2lsU3RhdGUiXTsgfSk7CisKKworCisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vU3RhdGVz
L3N0ZW5jaWxTdGF0ZS50cyI6CisvKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vU3RhdGVzL3N0ZW5jaWxTdGF0ZS50cyAqKiohCisgIFwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qISBleHBvcnRzIHByb3ZpZGVkOiBfU3RlbmNpbFN0YXRl
ICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihf
X3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9TdGVuY2lsU3RhdGUiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9TdGVuY2lsU3RhdGU7IH0pOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vRW5naW5lcy9jb25zdGFudHMgKi8gIi4vRW5naW5l
cy9jb25zdGFudHMudHMiKTsKKworLyoqCisgKiBAaGlkZGVuCisgKiovCit2YXIgX1N0ZW5jaWxT
dGF0ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBfU3RlbmNp
bFN0YXRlKCkgeworICAgICAgICB0aGlzLl9pc1N0ZW5jaWxUZXN0RGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5faXNTdGVuY2lsTWFza0RpcnR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2lz
U3RlbmNpbEZ1bmNEaXJ0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc1N0ZW5jaWxPcERpcnR5
ID0gZmFsc2U7CisgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICB9CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KF9TdGVuY2lsU3RhdGUucHJvdG90eXBlLCAiaXNEaXJ0eSIsIHsKKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTdGVuY2lsVGVz
dERpcnR5IHx8IHRoaXMuX2lzU3RlbmNpbE1hc2tEaXJ0eSB8fCB0aGlzLl9pc1N0ZW5jaWxGdW5j
RGlydHkgfHwgdGhpcy5faXNTdGVuY2lsT3BEaXJ0eTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KF9TdGVuY2lsU3RhdGUucHJvdG90eXBlLCAic3RlbmNpbEZ1
bmMiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3N0ZW5jaWxGdW5jOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3N0ZW5jaWxGdW5jID09PSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3N0
ZW5jaWxGdW5jID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLl9pc1N0ZW5jaWxGdW5jRGlydHkg
PSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBj
b25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX1N0
ZW5jaWxTdGF0ZS5wcm90b3R5cGUsICJzdGVuY2lsRnVuY1JlZiIsIHsKKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RlbmNpbEZ1bmNSZWY7Cisg
ICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fc3RlbmNpbEZ1bmNSZWYgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc3RlbmNpbEZ1bmNSZWYgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lzU3RlbmNpbEZ1bmNEaXJ0eSA9IHRydWU7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfU3RlbmNpbFN0YXRlLnBy
b3RvdHlwZSwgInN0ZW5jaWxGdW5jTWFzayIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RlbmNpbEZ1bmNNYXNrOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3N0
ZW5jaWxGdW5jTWFzayA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zdGVuY2lsRnVuY01hc2sgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHRoaXMuX2lzU3RlbmNpbEZ1bmNEaXJ0eSA9IHRydWU7CisgICAgICAgIH0sCisg
ICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAg
IH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfU3RlbmNpbFN0YXRlLnByb3RvdHlwZSwg
InN0ZW5jaWxPcFN0ZW5jaWxGYWlsIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9zdGVuY2lsT3BTdGVuY2lsRmFpbDsKKyAgICAgICAgfSwK
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9z
dGVuY2lsT3BTdGVuY2lsRmFpbCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zdGVuY2lsT3BTdGVuY2lsRmFpbCA9
IHZhbHVlOworICAgICAgICAgICAgdGhpcy5faXNTdGVuY2lsT3BEaXJ0eSA9IHRydWU7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfU3RlbmNpbFN0YXRlLnBy
b3RvdHlwZSwgInN0ZW5jaWxPcERlcHRoRmFpbCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RlbmNpbE9wRGVwdGhGYWlsOworICAgICAg
ICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuX3N0ZW5jaWxPcERlcHRoRmFpbCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zdGVuY2lsT3BEZXB0aEZhaWwg
PSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lzU3RlbmNpbE9wRGlydHkgPSB0cnVlOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX1N0ZW5jaWxTdGF0ZS5w
cm90b3R5cGUsICJzdGVuY2lsT3BTdGVuY2lsRGVwdGhQYXNzIiwgeworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGVuY2lsT3BTdGVuY2lsRGVw
dGhQYXNzOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX3N0ZW5jaWxPcFN0ZW5jaWxEZXB0aFBhc3MgPT09IHZhbHVlKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5fc3RlbmNpbE9wU3RlbmNpbERlcHRoUGFzcyA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5f
aXNTdGVuY2lsT3BEaXJ0eSA9IHRydWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShfU3RlbmNpbFN0YXRlLnByb3RvdHlwZSwgInN0ZW5jaWxNYXNrIiwgewor
ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGVu
Y2lsTWFzazsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9zdGVuY2lsTWFzayA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zdGVuY2lsTWFz
ayA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5faXNTdGVuY2lsTWFza0RpcnR5ID0gdHJ1ZTsK
KyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9TdGVuY2lsU3Rh
dGUucHJvdG90eXBlLCAic3RlbmNpbFRlc3QiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZW5jaWxUZXN0OworICAgICAgICB9LAorICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3N0ZW5j
aWxUZXN0ID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRoaXMuX3N0ZW5jaWxUZXN0ID0gdmFsdWU7CisgICAgICAgICAgICB0
aGlzLl9pc1N0ZW5jaWxUZXN0RGlydHkgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBf
U3RlbmNpbFN0YXRlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy5fc3RlbmNpbFRlc3QgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc3RlbmNpbE1hc2sgPSAweEZG
OworICAgICAgICB0aGlzLl9zdGVuY2lsRnVuYyA9IF9TdGVuY2lsU3RhdGUuQUxXQVlTOworICAg
ICAgICB0aGlzLl9zdGVuY2lsRnVuY1JlZiA9IDE7CisgICAgICAgIHRoaXMuX3N0ZW5jaWxGdW5j
TWFzayA9IDB4RkY7CisgICAgICAgIHRoaXMuX3N0ZW5jaWxPcFN0ZW5jaWxGYWlsID0gX1N0ZW5j
aWxTdGF0ZS5LRUVQOworICAgICAgICB0aGlzLl9zdGVuY2lsT3BEZXB0aEZhaWwgPSBfU3RlbmNp
bFN0YXRlLktFRVA7CisgICAgICAgIHRoaXMuX3N0ZW5jaWxPcFN0ZW5jaWxEZXB0aFBhc3MgPSBf
U3RlbmNpbFN0YXRlLlJFUExBQ0U7CisgICAgICAgIHRoaXMuX2lzU3RlbmNpbFRlc3REaXJ0eSA9
IHRydWU7CisgICAgICAgIHRoaXMuX2lzU3RlbmNpbE1hc2tEaXJ0eSA9IHRydWU7CisgICAgICAg
IHRoaXMuX2lzU3RlbmNpbEZ1bmNEaXJ0eSA9IHRydWU7CisgICAgICAgIHRoaXMuX2lzU3RlbmNp
bE9wRGlydHkgPSB0cnVlOworICAgIH07CisgICAgX1N0ZW5jaWxTdGF0ZS5wcm90b3R5cGUuYXBw
bHkgPSBmdW5jdGlvbiAoZ2wpIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzRGlydHkpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBTdGVuY2lsIHRlc3QKKyAgICAg
ICAgaWYgKHRoaXMuX2lzU3RlbmNpbFRlc3REaXJ0eSkgeworICAgICAgICAgICAgaWYgKHRoaXMu
c3RlbmNpbFRlc3QpIHsKKyAgICAgICAgICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNU
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGds
LmRpc2FibGUoZ2wuU1RFTkNJTF9URVNUKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX2lzU3RlbmNpbFRlc3REaXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIFN0
ZW5jaWwgbWFzaworICAgICAgICBpZiAodGhpcy5faXNTdGVuY2lsTWFza0RpcnR5KSB7CisgICAg
ICAgICAgICBnbC5zdGVuY2lsTWFzayh0aGlzLnN0ZW5jaWxNYXNrKTsKKyAgICAgICAgICAgIHRo
aXMuX2lzU3RlbmNpbE1hc2tEaXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIFN0
ZW5jaWwgZnVuYworICAgICAgICBpZiAodGhpcy5faXNTdGVuY2lsRnVuY0RpcnR5KSB7CisgICAg
ICAgICAgICBnbC5zdGVuY2lsRnVuYyh0aGlzLnN0ZW5jaWxGdW5jLCB0aGlzLnN0ZW5jaWxGdW5j
UmVmLCB0aGlzLnN0ZW5jaWxGdW5jTWFzayk7CisgICAgICAgICAgICB0aGlzLl9pc1N0ZW5jaWxG
dW5jRGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAvLyBTdGVuY2lsIG9wCisgICAg
ICAgIGlmICh0aGlzLl9pc1N0ZW5jaWxPcERpcnR5KSB7CisgICAgICAgICAgICBnbC5zdGVuY2ls
T3AodGhpcy5zdGVuY2lsT3BTdGVuY2lsRmFpbCwgdGhpcy5zdGVuY2lsT3BEZXB0aEZhaWwsIHRo
aXMuc3RlbmNpbE9wU3RlbmNpbERlcHRoUGFzcyk7CisgICAgICAgICAgICB0aGlzLl9pc1N0ZW5j
aWxPcERpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBQYXNzZWQgdG8g
ZGVwdGhGdW5jdGlvbiBvciBzdGVuY2lsRnVuY3Rpb24gdG8gc3BlY2lmeSBkZXB0aCBvciBzdGVu
Y2lsIHRlc3RzIHdpbGwgYWx3YXlzIHBhc3MuIGkuZS4gUGl4ZWxzIHdpbGwgYmUgZHJhd24gaW4g
dGhlIG9yZGVyIHRoZXkgYXJlIGRyYXduICovCisgICAgX1N0ZW5jaWxTdGF0ZS5BTFdBWVMgPSBf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29uc3RhbnRz
Il0uQUxXQVlTOworICAgIC8qKiBQYXNzZWQgdG8gc3RlbmNpbE9wZXJhdGlvbiB0byBzcGVjaWZ5
IHRoYXQgc3RlbmNpbCB2YWx1ZSBtdXN0IGJlIGtlcHQgKi8KKyAgICBfU3RlbmNpbFN0YXRlLktF
RVAgPSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29u
c3RhbnRzIl0uS0VFUDsKKyAgICAvKiogUGFzc2VkIHRvIHN0ZW5jaWxPcGVyYXRpb24gdG8gc3Bl
Y2lmeSB0aGF0IHN0ZW5jaWwgdmFsdWUgbXVzdCBiZSByZXBsYWNlZCAqLworICAgIF9TdGVuY2ls
U3RhdGUuUkVQTEFDRSA9IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJDb25zdGFudHMiXS5SRVBMQUNFOworICAgIHJldHVybiBfU3RlbmNpbFN0YXRlOwor
fSgpKTsKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9hYnN0cmFjdFNjZW5lLnRzIjoKKy8q
ISoqKioqKioqKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9hYnN0cmFjdFNjZW5lLnRz
ICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlk
ZWQ6IEFic3RyYWN0U2NlbmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19l
eHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
QWJzdHJhY3RTY2VuZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQWJzdHJhY3RTY2VuZTsgfSk7Cisv
KioKKyAqIEJhc2UgY2xhc3Mgb2YgdGhlIHNjZW5lIGFjdGluZyBhcyBhIGNvbnRhaW5lciBmb3Ig
dGhlIGRpZmZlcmVudCBlbGVtZW50cyBjb21wb3NpbmcgYSBzY2VuZS4KKyAqIFRoaXMgY2xhc3Mg
aXMgZHluYW1pY2FsbHkgZXh0ZW5kZWQgYnkgdGhlIGRpZmZlcmVudCBjb21wb25lbnRzIG9mIHRo
ZSBzY2VuZSBpbmNyZWFzaW5nCisgKiBmbGV4aWJpbGl0eSBhbmQgcmVkdWNpbmcgY291cGxpbmcK
KyAqLwordmFyIEFic3RyYWN0U2NlbmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Cisg
ICAgZnVuY3Rpb24gQWJzdHJhY3RTY2VuZSgpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgdGhlIGxpc3Qgb2Ygcm9vdCBub2RlcyAoaWUuIG5vZGVzIHdpdGggbm8gcGFyZW50KQorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5yb290Tm9kZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAg
LyoqIEFsbCBvZiB0aGUgY2FtZXJhcyBhZGRlZCB0byB0aGlzIHNjZW5lCisgICAgICAgICAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvY2FtZXJhcworICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5jYW1lcmFzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAg
ICAgICAqIEFsbCBvZiB0aGUgbGlnaHRzIGFkZGVkIHRvIHRoaXMgc2NlbmUKKyAgICAgICAgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2xpZ2h0cworICAgICAgICAq
LworICAgICAgICB0aGlzLmxpZ2h0cyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAg
ICAgKiBBbGwgb2YgdGhlIChhYnN0cmFjdCkgbWVzaGVzIGFkZGVkIHRvIHRoaXMgc2NlbmUKKyAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5tZXNoZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFRoZSBsaXN0IG9mIHNrZWxldG9ucyBhZGRlZCB0byB0aGUgc2NlbmUKKyAg
ICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL2hvd190b191c2Vf
Ym9uZXNfYW5kX3NrZWxldG9ucworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5za2VsZXRvbnMg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQWxsIG9mIHRoZSBwYXJ0aWNs
ZSBzeXN0ZW1zIGFkZGVkIHRvIHRoaXMgc2NlbmUKKyAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2Mu
YmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL3BhcnRpY2xlcworICAgICAgICAqLworICAgICAgICB0
aGlzLnBhcnRpY2xlU3lzdGVtcyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAg
ICogR2V0cyBhIGxpc3Qgb2YgQW5pbWF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHNjZW5lCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmFuaW1hdGlvbnMgPSBbXTsKKyAgICAgICAgLyoqCisg
ICAgICAgICogQWxsIG9mIHRoZSBhbmltYXRpb24gZ3JvdXBzIGFkZGVkIHRvIHRoaXMgc2NlbmUK
KyAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vZ3JvdXAKKyAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5hbmltYXRpb25Hcm91cHMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICogQWxsIG9mIHRoZSBtdWx0aS1tYXRlcmlhbHMgYWRkZWQgdG8g
dGhpcyBzY2VuZQorICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190
by9tdWx0aV9tYXRlcmlhbHMKKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tdWx0aU1hdGVyaWFs
cyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbGwgb2YgdGhlIG1hdGVy
aWFscyBhZGRlZCB0byB0aGlzIHNjZW5lCisgICAgICAgICogSW4gdGhlIGNvbnRleHQgb2YgYSBT
Y2VuZSwgaXQgaXMgbm90IHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIG1hbnVhbGx5LgorICAgICAg
ICAqIEFueSBhZGRpdGlvbiBvciByZW1vdmFsIHNob3VsZCBiZSBkb25lIHVzaW5nIHRoZSBhZGRN
YXRlcmlhbCBhbmQgcmVtb3ZlTUF0ZXJpYWwgU2NlbmUgbWV0aG9kcy4KKyAgICAgICAgKiBOb3Rl
IGFsc28gdGhhdCB0aGUgb3JkZXIgb2YgdGhlIE1hdGVyaWFsIHdpaGluIHRoZSBhcnJheSBpcyBu
b3Qgc2lnbmlmaWNhbnQgYW5kIG1pZ2h0IGNoYW5nZS4KKyAgICAgICAgKiBAc2VlIGh0dHA6Ly9k
b2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL21hdGVyaWFscworICAgICAgICAqLworICAgICAg
ICB0aGlzLm1hdGVyaWFscyA9IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICog
VGhlIGxpc3Qgb2YgbW9ycGggdGFyZ2V0IG1hbmFnZXJzIGFkZGVkIHRvIHRoZSBzY2VuZQorICAg
ICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vaG93X3RvX2R5bmFt
aWNhbGx5X21vcnBoX2FfbWVzaAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5tb3JwaFRhcmdl
dE1hbmFnZXJzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbGlz
dCBvZiBnZW9tZXRyaWVzIHVzZWQgaW4gdGhlIHNjZW5lLgorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5nZW9tZXRyaWVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFs
bCBvZiB0aGUgdHJhbmZvcm0gbm9kZXMgYWRkZWQgdG8gdGhpcyBzY2VuZQorICAgICAgICAqIElu
IHRoZSBjb250ZXh0IG9mIGEgU2NlbmUsIGl0IGlzIG5vdCBzdXBwb3NlZCB0byBiZSBtb2RpZmll
ZCBtYW51YWxseS4KKyAgICAgICAgKiBBbnkgYWRkaXRpb24gb3IgcmVtb3ZhbCBzaG91bGQgYmUg
ZG9uZSB1c2luZyB0aGUgYWRkVHJhbnNmb3JtTm9kZSBhbmQgcmVtb3ZlVHJhbnNmb3JtTm9kZSBT
Y2VuZSBtZXRob2RzLgorICAgICAgICAqIE5vdGUgYWxzbyB0aGF0IHRoZSBvcmRlciBvZiB0aGUg
VHJhbnNmb3JtTm9kZSB3aWhpbiB0aGUgYXJyYXkgaXMgbm90IHNpZ25pZmljYW50IGFuZCBtaWdo
dCBjaGFuZ2UuCisgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3Rv
L3RyYW5zZm9ybW5vZGUKKyAgICAgICAgKi8KKyAgICAgICAgdGhpcy50cmFuc2Zvcm1Ob2RlcyA9
IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQWN0aW9uTWFuYWdlcnMgYXZh
aWxhYmxlIG9uIHRoZSBzY2VuZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYWN0aW9uTWFu
YWdlcnMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRleHR1cmVzIHRv
IGtlZXAuCisgICAgICAgICAqLworICAgICAgICB0aGlzLnRleHR1cmVzID0gbmV3IEFycmF5KCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBFbnZpcm9ubWVudCB0ZXh0dXJlIGZvciB0aGUgc2Nl
bmUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZW52aXJvbm1lbnRUZXh0dXJlID0gbnVsbDsK
KyAgICB9CisgICAgLyoqCisgICAgICogQWRkcyBhIHBhcnNlciBpbiB0aGUgbGlzdCBvZiBhdmFp
bGFibGUgb25lcworICAgICAqIEBwYXJhbSBuYW1lIERlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHBh
cnNlcgorICAgICAqIEBwYXJhbSBwYXJzZXIgRGVmaW5lcyB0aGUgcGFyc2VyIHRvIGFkZAorICAg
ICAqLworICAgIEFic3RyYWN0U2NlbmUuQWRkUGFyc2VyID0gZnVuY3Rpb24gKG5hbWUsIHBhcnNl
cikgeworICAgICAgICB0aGlzLl9CYWJ5bG9uRmlsZVBhcnNlcnNbbmFtZV0gPSBwYXJzZXI7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgZ2VuZXJhbCBwYXJzZXIgZnJvbSB0aGUgbGlz
dCBvZiBhdmFpYWxibGUgb25lcworICAgICAqIEBwYXJhbSBuYW1lIERlZmluZXMgdGhlIG5hbWUg
b2YgdGhlIHBhcnNlcgorICAgICAqIEByZXR1cm5zIHRoZSByZXF1ZXN0ZWQgcGFyc2VyIG9yIG51
bGwKKyAgICAgKi8KKyAgICBBYnN0cmFjdFNjZW5lLkdldFBhcnNlciA9IGZ1bmN0aW9uIChuYW1l
KSB7CisgICAgICAgIGlmICh0aGlzLl9CYWJ5bG9uRmlsZVBhcnNlcnNbbmFtZV0pIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9CYWJ5bG9uRmlsZVBhcnNlcnNbbmFtZV07CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIG4gaW5k
aXZpZHVhbCBwYXJzZXIgaW4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG9uZXMKKyAgICAgKiBAcGFy
YW0gbmFtZSBEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBwYXJzZXIKKyAgICAgKiBAcGFyYW0gcGFy
c2VyIERlZmluZXMgdGhlIHBhcnNlciB0byBhZGQKKyAgICAgKi8KKyAgICBBYnN0cmFjdFNjZW5l
LkFkZEluZGl2aWR1YWxQYXJzZXIgPSBmdW5jdGlvbiAobmFtZSwgcGFyc2VyKSB7CisgICAgICAg
IHRoaXMuX0luZGl2aWR1YWxCYWJ5bG9uRmlsZVBhcnNlcnNbbmFtZV0gPSBwYXJzZXI7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGFuIGluZGl2aWR1YWwgcGFyc2VyIGZyb20gdGhlIGxp
c3Qgb2YgYXZhaWFsYmxlIG9uZXMKKyAgICAgKiBAcGFyYW0gbmFtZSBEZWZpbmVzIHRoZSBuYW1l
IG9mIHRoZSBwYXJzZXIKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVxdWVzdGVkIHBhcnNlciBvciBu
dWxsCisgICAgICovCisgICAgQWJzdHJhY3RTY2VuZS5HZXRJbmRpdmlkdWFsUGFyc2VyID0gZnVu
Y3Rpb24gKG5hbWUpIHsKKyAgICAgICAgaWYgKHRoaXMuX0luZGl2aWR1YWxCYWJ5bG9uRmlsZVBh
cnNlcnNbbmFtZV0pIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9JbmRpdmlkdWFsQmFieWxv
bkZpbGVQYXJzZXJzW25hbWVdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAg
IH07CisgICAgLyoqCisgICAgICogUGFyc2VyIGpzb24gZGF0YSBhbmQgcG9wdWxhdGUgYm90aCBh
IHNjZW5lIGFuZCBpdHMgYXNzb2NpYXRlZCBjb250YWluZXIgb2JqZWN0CisgICAgICogQHBhcmFt
IGpzb25EYXRhIERlZmluZXMgdGhlIGRhdGEgdG8gcGFyc2UKKyAgICAgKiBAcGFyYW0gc2NlbmUg
RGVmaW5lcyB0aGUgc2NlbmUgdG8gcGFyc2UgdGhlIGRhdGEgZm9yCisgICAgICogQHBhcmFtIGNv
bnRhaW5lciBEZWZpbmVzIHRoZSBjb250YWluZXIgYXR0YWNoZWQgdG8gdGhlIHBhcnNpbmcgc2Vx
dWVuY2UKKyAgICAgKiBAcGFyYW0gcm9vdFVybCBEZWZpbmVzIHRoZSByb290IHVybCBvZiB0aGUg
ZGF0YQorICAgICAqLworICAgIEFic3RyYWN0U2NlbmUuUGFyc2UgPSBmdW5jdGlvbiAoanNvbkRh
dGEsIHNjZW5lLCBjb250YWluZXIsIHJvb3RVcmwpIHsKKyAgICAgICAgZm9yICh2YXIgcGFyc2Vy
TmFtZSBpbiB0aGlzLl9CYWJ5bG9uRmlsZVBhcnNlcnMpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9CYWJ5bG9uRmlsZVBhcnNlcnMuaGFzT3duUHJvcGVydHkocGFyc2VyTmFtZSkpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9CYWJ5bG9uRmlsZVBhcnNlcnNbcGFyc2VyTmFtZV0oanNvbkRhdGEs
IHNjZW5lLCBjb250YWluZXIsIHJvb3RVcmwpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTdG9yZXMgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcnNl
cnMgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAgICAqLworICAgIEFic3RyYWN0U2NlbmUuX0JhYnls
b25GaWxlUGFyc2VycyA9IHt9OworICAgIC8qKgorICAgICAqIFN0b3JlcyB0aGUgbGlzdCBvZiBh
dmFpbGFibGUgaW5kaXZpZHVhbCBwYXJzZXJzIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgKi8K
KyAgICBBYnN0cmFjdFNjZW5lLl9JbmRpdmlkdWFsQmFieWxvbkZpbGVQYXJzZXJzID0ge307Cisg
ICAgcmV0dXJuIEFic3RyYWN0U2NlbmU7Cit9KCkpOworCisKKworLyoqKi8gfSksCisKKy8qKiov
ICIuL2Fzc2V0Q29udGFpbmVyLnRzIjoKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKiEq
XAorICAhKioqIC4vYXNzZXRDb250YWluZXIudHMgKioqIQorICBcKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyohIGV4cG9ydHMgcHJvdmlkZWQ6IEtlZXBBc3NldHMsIEFzc2V0Q29udGFp
bmVyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktlZXBBc3NldHMiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIEtlZXBBc3NldHM7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJp
bmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXNz
ZXRDb250YWluZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFzc2V0Q29udGFpbmVyOyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNsaWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xp
Yi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYWJzdHJhY3RTY2Vu
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEg
Li9hYnN0cmFjdFNjZW5lICovICIuL2Fic3RyYWN0U2NlbmUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWVzaGVzX21lc2hfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vTWVzaGVzL21lc2ggKi8gIi4vTWVzaGVzL21lc2gudHMi
KTsKKworCisKKy8qKgorICogU2V0IG9mIGFzc2V0cyB0byBrZWVwIHdoZW4gbW92aW5nIGEgc2Nl
bmUgaW50byBhbiBhc3NldCBjb250YWluZXIuCisgKi8KK3ZhciBLZWVwQXNzZXRzID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIl9fZXh0ZW5kcyJdKEtlZXBBc3NldHMsIF9zdXBlcik7CisgICAgZnVuY3Rp
b24gS2VlcEFzc2V0cygpIHsKKyAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3Vw
ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOworICAgIH0KKyAgICByZXR1cm4gS2Vl
cEFzc2V0czsKK30oX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
QWJzdHJhY3RTY2VuZSJdKSk7CisKKy8qKgorICogQ29udGFpbmVyIHdpdGggYSBzZXQgb2YgYXNz
ZXRzIHRoYXQgY2FuIGJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSBhIHNjZW5lLgorICovCit2YXIg
QXNzZXRDb250YWluZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7CisgICAg
dHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19leHRlbmRzIl0oQXNzZXRDb250
YWluZXIsIF9zdXBlcik7CisgICAgLyoqCisgICAgICogSW5zdGFudGlhdGVzIGFuIEFzc2V0Q29u
dGFpbmVyLgorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdGhlIEFzc2V0Q29udGFpbmVy
IGJlbG9uZ3MgdG8uCisgICAgICovCisgICAgZnVuY3Rpb24gQXNzZXRDb250YWluZXIoc2NlbmUp
IHsKKyAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKKyAgICAg
ICAgX3RoaXMuc2NlbmUgPSBzY2VuZTsKKyAgICAgICAgX3RoaXNbInNvdW5kcyJdID0gW107Cisg
ICAgICAgIF90aGlzWyJlZmZlY3RMYXllcnMiXSA9IFtdOworICAgICAgICBfdGhpc1sibGF5ZXJz
Il0gPSBbXTsKKyAgICAgICAgX3RoaXNbImxlbnNGbGFyZVN5c3RlbXMiXSA9IFtdOworICAgICAg
ICBfdGhpc1sicHJvY2VkdXJhbFRleHR1cmVzIl0gPSBbXTsKKyAgICAgICAgX3RoaXNbInJlZmxl
Y3Rpb25Qcm9iZXMiXSA9IFtdOworICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgfQorICAgIC8q
KgorICAgICAqIEFkZHMgYWxsIHRoZSBhc3NldHMgZnJvbSB0aGUgY29udGFpbmVyIHRvIHRoZSBz
Y2VuZS4KKyAgICAgKi8KKyAgICBBc3NldENvbnRhaW5lci5wcm90b3R5cGUuYWRkQWxsVG9TY2Vu
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAgdGhp
cy5jYW1lcmFzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5l
LmFkZENhbWVyYShvKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMubGlnaHRzLmZvckVhY2go
ZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLmFkZExpZ2h0KG8pOworICAg
ICAgICB9KTsKKyAgICAgICAgdGhpcy5tZXNoZXMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAg
ICAgICAgICAgX3RoaXMuc2NlbmUuYWRkTWVzaChvKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRo
aXMuc2tlbGV0b25zLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNj
ZW5lLmFkZFNrZWxldG9uKG8pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5hbmltYXRpb25z
LmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLmFkZEFuaW1h
dGlvbihvKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuYW5pbWF0aW9uR3JvdXBzLmZvckVh
Y2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLmFkZEFuaW1hdGlvbkdy
b3VwKG8pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5tdWx0aU1hdGVyaWFscy5mb3JFYWNo
KGZ1bmN0aW9uIChvKSB7CisgICAgICAgICAgICBfdGhpcy5zY2VuZS5hZGRNdWx0aU1hdGVyaWFs
KG8pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5tYXRlcmlhbHMuZm9yRWFjaChmdW5jdGlv
biAobykgeworICAgICAgICAgICAgX3RoaXMuc2NlbmUuYWRkTWF0ZXJpYWwobyk7CisgICAgICAg
IH0pOworICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0TWFuYWdlcnMuZm9yRWFjaChmdW5jdGlvbiAo
bykgeworICAgICAgICAgICAgX3RoaXMuc2NlbmUuYWRkTW9ycGhUYXJnZXRNYW5hZ2VyKG8pOwor
ICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5nZW9tZXRyaWVzLmZvckVhY2goZnVuY3Rpb24gKG8p
IHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLmFkZEdlb21ldHJ5KG8pOworICAgICAgICB9KTsK
KyAgICAgICAgdGhpcy50cmFuc2Zvcm1Ob2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAg
ICAgICAgICBfdGhpcy5zY2VuZS5hZGRUcmFuc2Zvcm1Ob2RlKG8pOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy5hY3Rpb25NYW5hZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAg
ICAgICBfdGhpcy5zY2VuZS5hZGRBY3Rpb25NYW5hZ2VyKG8pOworICAgICAgICB9KTsKKyAgICAg
ICAgdGhpcy50ZXh0dXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAgICAgICBfdGhp
cy5zY2VuZS5hZGRUZXh0dXJlKG8pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5yZWZsZWN0
aW9uUHJvYmVzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5l
LmFkZFJlZmxlY3Rpb25Qcm9iZShvKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmICh0aGlzLmVu
dmlyb25tZW50VGV4dHVyZSkgeworICAgICAgICAgICAgdGhpcy5zY2VuZS5lbnZpcm9ubWVudFRl
eHR1cmUgPSB0aGlzLmVudmlyb25tZW50VGV4dHVyZTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KHZhciBfaSA9IDAsIF9hID0gdGhpcy5zY2VuZS5fc2VyaWFsaXphYmxlQ29tcG9uZW50czsgX2kg
PCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBjb21wb25lbnQgPSBfYVtfaV07
CisgICAgICAgICAgICBjb21wb25lbnQuYWRkRnJvbUNvbnRhaW5lcih0aGlzKTsKKyAgICAgICAg
fQorICAgIH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhbGwgdGhlIGFzc2V0cyBpbiB0aGUg
Y29udGFpbmVyIGZyb20gdGhlIHNjZW5lCisgICAgICovCisgICAgQXNzZXRDb250YWluZXIucHJv
dG90eXBlLnJlbW92ZUFsbEZyb21TY2VuZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIF90
aGlzID0gdGhpczsKKyAgICAgICAgdGhpcy5jYW1lcmFzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsK
KyAgICAgICAgICAgIF90aGlzLnNjZW5lLnJlbW92ZUNhbWVyYShvKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHRoaXMubGlnaHRzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90
aGlzLnNjZW5lLnJlbW92ZUxpZ2h0KG8pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5tZXNo
ZXMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAgICAgICAgICAgX3RoaXMuc2NlbmUucmVtb3Zl
TWVzaChvKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuc2tlbGV0b25zLmZvckVhY2goZnVu
Y3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLnJlbW92ZVNrZWxldG9uKG8pOwor
ICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5hbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG8p
IHsKKyAgICAgICAgICAgIF90aGlzLnNjZW5lLnJlbW92ZUFuaW1hdGlvbihvKTsKKyAgICAgICAg
fSk7CisgICAgICAgIHRoaXMuYW5pbWF0aW9uR3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsK
KyAgICAgICAgICAgIF90aGlzLnNjZW5lLnJlbW92ZUFuaW1hdGlvbkdyb3VwKG8pOworICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5tdWx0aU1hdGVyaWFscy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7
CisgICAgICAgICAgICBfdGhpcy5zY2VuZS5yZW1vdmVNdWx0aU1hdGVyaWFsKG8pOworICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5tYXRlcmlhbHMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAg
ICAgICAgICAgX3RoaXMuc2NlbmUucmVtb3ZlTWF0ZXJpYWwobyk7CisgICAgICAgIH0pOworICAg
ICAgICB0aGlzLm1vcnBoVGFyZ2V0TWFuYWdlcnMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAg
ICAgICAgICAgX3RoaXMuc2NlbmUucmVtb3ZlTW9ycGhUYXJnZXRNYW5hZ2VyKG8pOworICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5nZW9tZXRyaWVzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAg
ICAgICAgICAgIF90aGlzLnNjZW5lLnJlbW92ZUdlb21ldHJ5KG8pOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy50cmFuc2Zvcm1Ob2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAg
ICAgICBfdGhpcy5zY2VuZS5yZW1vdmVUcmFuc2Zvcm1Ob2RlKG8pOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy5hY3Rpb25NYW5hZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAg
ICAgICBfdGhpcy5zY2VuZS5yZW1vdmVBY3Rpb25NYW5hZ2VyKG8pOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy50ZXh0dXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAgICAgICBf
dGhpcy5zY2VuZS5yZW1vdmVUZXh0dXJlKG8pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5y
ZWZsZWN0aW9uUHJvYmVzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIF90aGlz
LnNjZW5lLnJlbW92ZVJlZmxlY3Rpb25Qcm9iZShvKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlm
ICh0aGlzLmVudmlyb25tZW50VGV4dHVyZSA9PT0gdGhpcy5zY2VuZS5lbnZpcm9ubWVudFRleHR1
cmUpIHsKKyAgICAgICAgICAgIHRoaXMuc2NlbmUuZW52aXJvbm1lbnRUZXh0dXJlID0gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5zY2VuZS5fc2Vy
aWFsaXphYmxlQ29tcG9uZW50czsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAg
IHZhciBjb21wb25lbnQgPSBfYVtfaV07CisgICAgICAgICAgICBjb21wb25lbnQucmVtb3ZlRnJv
bUNvbnRhaW5lcih0aGlzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogRGlz
cG9zZXMgYWxsIHRoZSBhc3NldHMgaW4gdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIEFzc2V0
Q29udGFpbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlz
LmNhbWVyYXMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAgICAgICAgICAgby5kaXNwb3NlKCk7
CisgICAgICAgIH0pOworICAgICAgICB0aGlzLmNhbWVyYXMgPSBbXTsKKyAgICAgICAgdGhpcy5s
aWdodHMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAgICAgICAgICAgby5kaXNwb3NlKCk7Cisg
ICAgICAgIH0pOworICAgICAgICB0aGlzLmxpZ2h0cyA9IFtdOworICAgICAgICB0aGlzLm1lc2hl
cy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAgICAgICAgICBvLmRpc3Bvc2UoKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHRoaXMubWVzaGVzID0gW107CisgICAgICAgIHRoaXMuc2tlbGV0b25z
LmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIG8uZGlzcG9zZSgpOworICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5za2VsZXRvbnMgPSBbXTsKKyAgICAgICAgdGhpcy5hbmltYXRp
b25Hcm91cHMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAgICAgICAgICAgby5kaXNwb3NlKCk7
CisgICAgICAgIH0pOworICAgICAgICB0aGlzLmFuaW1hdGlvbkdyb3VwcyA9IFtdOworICAgICAg
ICB0aGlzLm11bHRpTWF0ZXJpYWxzLmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAg
IG8uZGlzcG9zZSgpOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5tdWx0aU1hdGVyaWFscyA9
IFtdOworICAgICAgICB0aGlzLm1hdGVyaWFscy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7CisgICAg
ICAgICAgICBvLmRpc3Bvc2UoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMubWF0ZXJpYWxz
ID0gW107CisgICAgICAgIHRoaXMuZ2VvbWV0cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7Cisg
ICAgICAgICAgICBvLmRpc3Bvc2UoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuZ2VvbWV0
cmllcyA9IFtdOworICAgICAgICB0aGlzLnRyYW5zZm9ybU5vZGVzLmZvckVhY2goZnVuY3Rpb24g
KG8pIHsKKyAgICAgICAgICAgIG8uZGlzcG9zZSgpOworICAgICAgICB9KTsKKyAgICAgICAgdGhp
cy50cmFuc2Zvcm1Ob2RlcyA9IFtdOworICAgICAgICB0aGlzLmFjdGlvbk1hbmFnZXJzLmZvckVh
Y2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIG8uZGlzcG9zZSgpOworICAgICAgICB9KTsK
KyAgICAgICAgdGhpcy5hY3Rpb25NYW5hZ2VycyA9IFtdOworICAgICAgICB0aGlzLnRleHR1cmVz
LmZvckVhY2goZnVuY3Rpb24gKG8pIHsKKyAgICAgICAgICAgIG8uZGlzcG9zZSgpOworICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy50ZXh0dXJlcyA9IFtdOworICAgICAgICB0aGlzLnJlZmxlY3Rp
b25Qcm9iZXMuZm9yRWFjaChmdW5jdGlvbiAobykgeworICAgICAgICAgICAgby5kaXNwb3NlKCk7
CisgICAgICAgIH0pOworICAgICAgICB0aGlzLnJlZmxlY3Rpb25Qcm9iZXMgPSBbXTsKKyAgICAg
ICAgaWYgKHRoaXMuZW52aXJvbm1lbnRUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLmVudmly
b25tZW50VGV4dHVyZS5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLmVudmlyb25tZW50VGV4
dHVyZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRo
aXMuc2NlbmUuX3NlcmlhbGl6YWJsZUNvbXBvbmVudHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7
CisgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gX2FbX2ldOworICAgICAgICAgICAgY29tcG9u
ZW50LnJlbW92ZUZyb21Db250YWluZXIodGhpcywgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIEFzc2V0Q29udGFpbmVyLnByb3RvdHlwZS5fbW92ZUFzc2V0cyA9IGZ1bmN0aW9uIChzb3Vy
Y2VBc3NldHMsIHRhcmdldEFzc2V0cywga2VlcEFzc2V0cykgeworICAgICAgICBpZiAoIXNvdXJj
ZUFzc2V0cykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAo
dmFyIF9pID0gMCwgc291cmNlQXNzZXRzXzEgPSBzb3VyY2VBc3NldHM7IF9pIDwgc291cmNlQXNz
ZXRzXzEubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgYXNzZXQgPSBzb3VyY2VBc3Nl
dHNfMVtfaV07CisgICAgICAgICAgICB2YXIgbW92ZSA9IHRydWU7CisgICAgICAgICAgICBpZiAo
a2VlcEFzc2V0cykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIF9hID0gMCwga2VlcEFzc2V0
c18xID0ga2VlcEFzc2V0czsgX2EgPCBrZWVwQXNzZXRzXzEubGVuZ3RoOyBfYSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBrZWVwQXNzZXQgPSBrZWVwQXNzZXRzXzFbX2FdOworICAgICAg
ICAgICAgICAgICAgICBpZiAoYXNzZXQgPT09IGtlZXBBc3NldCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbW92ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobW92ZSkgeworICAgICAgICAgICAgICAgIHRhcmdldEFzc2V0cy5wdXNo
KGFzc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAg
ICogUmVtb3ZlcyBhbGwgdGhlIGFzc2V0cyBjb250YWluZWQgaW4gdGhlIHNjZW5lIGFuZCBhZGRz
IHRoZW0gdG8gdGhlIGNvbnRhaW5lci4KKyAgICAgKiBAcGFyYW0ga2VlcEFzc2V0cyBTZXQgb2Yg
YXNzZXRzIHRvIGtlZXAgaW4gdGhlIHNjZW5lLiAoZGVmYXVsdDogZW1wdHkpCisgICAgICovCisg
ICAgQXNzZXRDb250YWluZXIucHJvdG90eXBlLm1vdmVBbGxGcm9tU2NlbmUgPSBmdW5jdGlvbiAo
a2VlcEFzc2V0cykgeworICAgICAgICBpZiAoa2VlcEFzc2V0cyA9PT0gdW5kZWZpbmVkKSB7Cisg
ICAgICAgICAgICBrZWVwQXNzZXRzID0gbmV3IEtlZXBBc3NldHMoKTsKKyAgICAgICAgfQorICAg
ICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcykgeworICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3du
UHJvcGVydHkoa2V5KSkgeworICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IHRoaXNba2V5XSB8
fCAoa2V5ID09PSAiZW52aXJvbm1lbnRUZXh0dXJlIiA/IG51bGwgOiBbXSk7CisgICAgICAgICAg
ICAgICAgdGhpcy5fbW92ZUFzc2V0cyh0aGlzLnNjZW5lW2tleV0sIHRoaXNba2V5XSwga2VlcEFz
c2V0c1trZXldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLnJlbW92
ZUFsbEZyb21TY2VuZSgpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyBhbGwgbWVzaGVz
IGluIHRoZSBhc3NldCBjb250YWluZXIgdG8gYSByb290IG1lc2ggdGhhdCBjYW4gYmUgdXNlZCB0
byBwb3NpdGlvbiBhbGwgdGhlIGNvbnRhaW5lZCBtZXNoZXMuIFRoZSByb290IG1lc2ggaXMgdGhl
biBhZGRlZCB0byB0aGUgZnJvbnQgb2YgdGhlIG1lc2hlcyBpbiB0aGUgYXNzZXRDb250YWluZXIu
CisgICAgICogQHJldHVybnMgdGhlIHJvb3QgbWVzaAorICAgICAqLworICAgIEFzc2V0Q29udGFp
bmVyLnByb3RvdHlwZS5jcmVhdGVSb290TWVzaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IHJvb3RNZXNoID0gbmV3IF9NZXNoZXNfbWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJNZXNoIl0oImFzc2V0Q29udGFpbmVyUm9vdE1lc2giLCB0aGlzLnNjZW5lKTsKKyAgICAgICAg
dGhpcy5tZXNoZXMuZm9yRWFjaChmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgaWYgKCFtLnBh
cmVudCkgeworICAgICAgICAgICAgICAgIHJvb3RNZXNoLmFkZENoaWxkKG0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5tZXNoZXMudW5zaGlmdChyb290TWVzaCk7
CisgICAgICAgIHJldHVybiByb290TWVzaDsKKyAgICB9OworICAgIHJldHVybiBBc3NldENvbnRh
aW5lcjsKK30oX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQWJz
dHJhY3RTY2VuZSJdKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8gIi4vaW5kZXgudHMiOgor
LyohKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9pbmRleC50cyAqKiohCisgIFwqKioq
KioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogQWJzdHJhY3RTY2VuZSwgS2Vl
cEFzc2V0cywgQXNzZXRDb250YWluZXIsIE5vZGUsIFNjZW5lLCBTY2VuZUNvbXBvbmVudENvbnN0
YW50cywgU3RhZ2UsIEFic3RyYWN0QWN0aW9uTWFuYWdlciwgQWN0aW9uLCBBY3Rpb25FdmVudCwg
QWN0aW9uTWFuYWdlciwgQ29uZGl0aW9uLCBWYWx1ZUNvbmRpdGlvbiwgUHJlZGljYXRlQ29uZGl0
aW9uLCBTdGF0ZUNvbmRpdGlvbiwgU3dpdGNoQm9vbGVhbkFjdGlvbiwgU2V0U3RhdGVBY3Rpb24s
IFNldFZhbHVlQWN0aW9uLCBJbmNyZW1lbnRWYWx1ZUFjdGlvbiwgUGxheUFuaW1hdGlvbkFjdGlv
biwgU3RvcEFuaW1hdGlvbkFjdGlvbiwgRG9Ob3RoaW5nQWN0aW9uLCBDb21iaW5lQWN0aW9uLCBF
eGVjdXRlQ29kZUFjdGlvbiwgU2V0UGFyZW50QWN0aW9uLCBQbGF5U291bmRBY3Rpb24sIFN0b3BT
b3VuZEFjdGlvbiwgSW50ZXJwb2xhdGVWYWx1ZUFjdGlvbiwgQW5pbWF0YWJsZSwgX0lBbmltYXRp
b25TdGF0ZSwgQW5pbWF0aW9uLCBUYXJnZXRlZEFuaW1hdGlvbiwgQW5pbWF0aW9uR3JvdXAsIEFu
aW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSwgRWFzaW5nRnVuY3Rpb24sIENpcmNsZUVhc2UsIEJh
Y2tFYXNlLCBCb3VuY2VFYXNlLCBDdWJpY0Vhc2UsIEVsYXN0aWNFYXNlLCBFeHBvbmVudGlhbEVh
c2UsIFBvd2VyRWFzZSwgUXVhZHJhdGljRWFzZSwgUXVhcnRpY0Vhc2UsIFF1aW50aWNFYXNlLCBT
aW5lRWFzZSwgQmV6aWVyQ3VydmVFYXNlLCBSdW50aW1lQW5pbWF0aW9uLCBBbmltYXRpb25FdmVu
dCwgQW5pbWF0aW9uS2V5SW50ZXJwb2xhdGlvbiwgQW5pbWF0aW9uUmFuZ2UsIEFuYWx5c2VyLCBB
dWRpb0VuZ2luZSwgQXVkaW9TY2VuZUNvbXBvbmVudCwgU291bmQsIFNvdW5kVHJhY2ssIFdlaWdo
dGVkU291bmQsIEJvbmUsIEJvbmVJS0NvbnRyb2xsZXIsIEJvbmVMb29rQ29udHJvbGxlciwgU2tl
bGV0b24sIENhbWVyYUlucHV0VHlwZXMsIENhbWVyYUlucHV0c01hbmFnZXIsIENhbWVyYSwgVGFy
Z2V0Q2FtZXJhLCBGcmVlQ2FtZXJhLCBGcmVlQ2FtZXJhSW5wdXRzTWFuYWdlciwgVG91Y2hDYW1l
cmEsIEFyY1JvdGF0ZUNhbWVyYSwgQXJjUm90YXRlQ2FtZXJhSW5wdXRzTWFuYWdlciwgRGV2aWNl
T3JpZW50YXRpb25DYW1lcmEsIEZseUNhbWVyYSwgRmx5Q2FtZXJhSW5wdXRzTWFuYWdlciwgRm9s
bG93Q2FtZXJhLCBBcmNGb2xsb3dDYW1lcmEsIEZvbGxvd0NhbWVyYUlucHV0c01hbmFnZXIsIEdh
bWVwYWRDYW1lcmEsIFVuaXZlcnNhbENhbWVyYSwgVmlydHVhbEpveXN0aWNrc0NhbWVyYSwgQ29s
bGlkZXIsIERlZmF1bHRDb2xsaXNpb25Db29yZGluYXRvciwgUGlja2luZ0luZm8sIEludGVyc2Vj
dGlvbkluZm8sIF9NZXNoQ29sbGlzaW9uRGF0YSwgQm91bmRpbmdCb3gsIEJvdW5kaW5nSW5mbywg
Qm91bmRpbmdTcGhlcmUsIFJheSwgQXhlc1ZpZXdlciwgQm9uZUF4ZXNWaWV3ZXIsIERlYnVnTGF5
ZXIsIFBoeXNpY3NWaWV3ZXIsIFJheUhlbHBlciwgU2tlbGV0b25WaWV3ZXIsIENvbnN0YW50cywg
SW5zdGFuY2luZ0F0dHJpYnV0ZUluZm8sIERlcHRoVGV4dHVyZUNyZWF0aW9uT3B0aW9ucywgRW5n
aW5lQ2FwYWJpbGl0aWVzLCBFbmdpbmUsIEVuZ2luZVN0b3JlLCBOdWxsRW5naW5lT3B0aW9ucywg
TnVsbEVuZ2luZSwgV2ViR0xQaXBlbGluZUNvbnRleHQsIFdlYkdQVUNvbnN0YW50cywgV2ViR1BV
RW5naW5lLCBXZWJHTDJTaGFkZXJQcm9jZXNzb3IsIE5hdGl2ZUVuZ2luZSwgS2V5Ym9hcmRFdmVu
dFR5cGVzLCBLZXlib2FyZEluZm8sIEtleWJvYXJkSW5mb1ByZSwgUG9pbnRlckV2ZW50VHlwZXMs
IFBvaW50ZXJJbmZvQmFzZSwgUG9pbnRlckluZm9QcmUsIFBvaW50ZXJJbmZvLCBDbGlwYm9hcmRF
dmVudFR5cGVzLCBDbGlwYm9hcmRJbmZvLCBTdGlja1ZhbHVlcywgR2FtZXBhZCwgR2VuZXJpY1Bh
ZCwgR2FtZXBhZE1hbmFnZXIsIEdhbWVwYWRTeXN0ZW1TY2VuZUNvbXBvbmVudCwgWGJveDM2MEJ1
dHRvbiwgWGJveDM2MERwYWQsIFhib3gzNjBQYWQsIER1YWxTaG9ja0J1dHRvbiwgRHVhbFNob2Nr
RHBhZCwgRHVhbFNob2NrUGFkLCBBeGlzRHJhZ0dpem1vLCBBeGlzU2NhbGVHaXptbywgQm91bmRp
bmdCb3hHaXptbywgR2l6bW8sIEdpem1vTWFuYWdlciwgUGxhbmVSb3RhdGlvbkdpem1vLCBQb3Np
dGlvbkdpem1vLCBSb3RhdGlvbkdpem1vLCBTY2FsZUdpem1vLCBMaWdodEdpem1vLCBQbGFuZURy
YWdHaXptbywgRW52aXJvbm1lbnRIZWxwZXIsIFBob3RvRG9tZSwgX2ZvcmNlU2NlbmVIZWxwZXJz
VG9CdW5kbGUsIFZpZGVvRG9tZSwgRW5naW5lSW5zdHJ1bWVudGF0aW9uLCBTY2VuZUluc3RydW1l
bnRhdGlvbiwgX1RpbWVUb2tlbiwgRWZmZWN0TGF5ZXIsIEVmZmVjdExheWVyU2NlbmVDb21wb25l
bnQsIEdsb3dMYXllciwgSGlnaGxpZ2h0TGF5ZXIsIExheWVyLCBMYXllclNjZW5lQ29tcG9uZW50
LCBMZW5zRmxhcmUsIExlbnNGbGFyZVN5c3RlbSwgTGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25l
bnQsIExpZ2h0LCBTaGFkb3dMaWdodCwgRGlyZWN0aW9uYWxMaWdodCwgSGVtaXNwaGVyaWNMaWdo
dCwgUG9pbnRMaWdodCwgU3BvdExpZ2h0LCBEZWZhdWx0TG9hZGluZ1NjcmVlbiwgU2NlbmVMb2Fk
ZXJQcm9ncmVzc0V2ZW50LCBTY2VuZUxvYWRlciwgU2NlbmVMb2FkZXJGbGFncywgQ29sb3JDdXJ2
ZXMsIEVmZmVjdEZhbGxiYWNrcywgRWZmZWN0Q3JlYXRpb25PcHRpb25zLCBFZmZlY3QsIEZyZXNu
ZWxQYXJhbWV0ZXJzLCBJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uRGVmaW5lcywgSW1hZ2VQ
cm9jZXNzaW5nQ29uZmlndXJhdGlvbiwgTWF0ZXJpYWwsIE1hdGVyaWFsRGVmaW5lcywgTWF0ZXJp
YWxIZWxwZXIsIE11bHRpTWF0ZXJpYWwsIFB1c2hNYXRlcmlhbCwgU2hhZGVyTWF0ZXJpYWwsIFN0
YW5kYXJkTWF0ZXJpYWxEZWZpbmVzLCBTdGFuZGFyZE1hdGVyaWFsLCBCYXNlVGV4dHVyZSwgQ3Vi
ZVRleHR1cmUsIER5bmFtaWNUZXh0dXJlLCBFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZSwgSERS
Q3ViZVRleHR1cmUsIEludGVybmFsVGV4dHVyZSwgTWlycm9yVGV4dHVyZSwgTXVsdGlSZW5kZXJU
YXJnZXQsIFJhd1RleHR1cmUsIFJlbmRlclRhcmdldFRleHR1cmUsIFRleHR1cmUsIFVuaWZvcm1C
dWZmZXIsIE1hdGVyaWFsRmxhZ3MsIEVmZmVjdFJlbmRlcmVyLCBFZmZlY3RXcmFwcGVyLCBTY2Fs
YXIsIFNwYWNlLCBBeGlzLCBDb2xvcjMsIENvbG9yNCwgVG1wQ29sb3JzLCBUb0dhbW1hU3BhY2Us
IFRvTGluZWFyU3BhY2UsIEVwc2lsb24sIEZydXN0dW0sIFBsYW5lLCBTaXplLCBWZWN0b3IyLCBW
ZWN0b3IzLCBWZWN0b3I0LCBRdWF0ZXJuaW9uLCBNYXRyaXgsIFRtcFZlY3RvcnMsIFZpZXdwb3J0
LCBTcGhlcmljYWxIYXJtb25pY3MsIFNwaGVyaWNhbFBvbHlub21pYWwsIEFic3RyYWN0TWVzaCwg
QnVmZmVyLCBWZXJ0ZXhCdWZmZXIsIENTRywgR2VvbWV0cnksIEdyb3VuZE1lc2gsIFRyYWlsTWVz
aCwgSW5zdGFuY2VkTWVzaCwgTGluZXNNZXNoLCBJbnN0YW5jZWRMaW5lc01lc2gsIF9DcmVhdGlv
bkRhdGFTdG9yYWdlLCBfSW5zdGFuY2VzQmF0Y2gsIE1lc2gsIFZlcnRleERhdGEsIE1lc2hCdWls
ZGVyLCBTaW1wbGlmaWNhdGlvblNldHRpbmdzLCBTaW1wbGlmaWNhdGlvblF1ZXVlLCBTaW1wbGlm
aWNhdGlvblR5cGUsIFNpbXBsaWNhdGlvblF1ZXVlU2NlbmVDb21wb25lbnQsIFBvbHlnb24sIFBv
bHlnb25NZXNoQnVpbGRlciwgQmFzZVN1Yk1lc2gsIFN1Yk1lc2gsIE1lc2hMT0RMZXZlbCwgVHJh
bnNmb3JtTm9kZSwgQm94QnVpbGRlciwgU3BoZXJlQnVpbGRlciwgQ3lsaW5kZXJCdWlsZGVyLCBU
b3J1c0J1aWxkZXIsIExpbmVzQnVpbGRlciwgUGxhbmVCdWlsZGVyLCBHcm91bmRCdWlsZGVyLCBE
YXRhQnVmZmVyLCBXZWJHTERhdGFCdWZmZXIsIFdlYkdQVURhdGFCdWZmZXIsIE1vcnBoVGFyZ2V0
LCBNb3JwaFRhcmdldE1hbmFnZXIsIERhdGFiYXNlLCBCYXNlUGFydGljbGVTeXN0ZW0sIEdQVVBh
cnRpY2xlU3lzdGVtLCBQYXJ0aWNsZSwgUGFydGljbGVIZWxwZXIsIFBhcnRpY2xlU3lzdGVtLCBf
SURvTmVlZFRvQmVJblRoZUJ1aWxkLCBQYXJ0aWNsZVN5c3RlbVNldCwgU29saWRQYXJ0aWNsZSwg
TW9kZWxTaGFwZSwgRGVwdGhTb3J0ZWRQYXJ0aWNsZSwgU29saWRQYXJ0aWNsZVN5c3RlbSwgU3Vi
RW1pdHRlclR5cGUsIFN1YkVtaXR0ZXIsIFBoeXNpY3NFbmdpbmUsIFBoeXNpY3NFbmdpbmVTY2Vu
ZUNvbXBvbmVudCwgUGh5c2ljc0hlbHBlciwgUGh5c2ljc1JhZGlhbEV4cGxvc2lvbkV2ZW50T3B0
aW9ucywgUGh5c2ljc1VwZHJhZnRFdmVudE9wdGlvbnMsIFBoeXNpY3NWb3J0ZXhFdmVudE9wdGlv
bnMsIFBoeXNpY3NSYWRpYWxJbXB1bHNlRmFsbG9mZiwgUGh5c2ljc1VwZHJhZnRNb2RlLCBQaHlz
aWNzSW1wb3N0b3IsIFBoeXNpY3NKb2ludCwgRGlzdGFuY2VKb2ludCwgTW90b3JFbmFibGVkSm9p
bnQsIEhpbmdlSm9pbnQsIEhpbmdlMkpvaW50LCBBbmFnbHlwaFBvc3RQcm9jZXNzLCBCbGFja0Fu
ZFdoaXRlUG9zdFByb2Nlc3MsIEJsb29tRWZmZWN0LCBCbG9vbU1lcmdlUG9zdFByb2Nlc3MsIEJs
dXJQb3N0UHJvY2VzcywgQ2hyb21hdGljQWJlcnJhdGlvblBvc3RQcm9jZXNzLCBDaXJjbGVPZkNv
bmZ1c2lvblBvc3RQcm9jZXNzLCBDb2xvckNvcnJlY3Rpb25Qb3N0UHJvY2VzcywgQ29udm9sdXRp
b25Qb3N0UHJvY2VzcywgRGVwdGhPZkZpZWxkQmx1clBvc3RQcm9jZXNzLCBEZXB0aE9mRmllbGRF
ZmZlY3RCbHVyTGV2ZWwsIERlcHRoT2ZGaWVsZEVmZmVjdCwgRGVwdGhPZkZpZWxkTWVyZ2VQb3N0
UHJvY2Vzc09wdGlvbnMsIERlcHRoT2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3MsIERpc3BsYXlQYXNz
UG9zdFByb2Nlc3MsIEV4dHJhY3RIaWdobGlnaHRzUG9zdFByb2Nlc3MsIEZpbHRlclBvc3RQcm9j
ZXNzLCBGeGFhUG9zdFByb2Nlc3MsIEdyYWluUG9zdFByb2Nlc3MsIEhpZ2hsaWdodHNQb3N0UHJv
Y2VzcywgSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3MsIE1vdGlvbkJsdXJQb3N0UHJvY2Vzcywg
UGFzc1Bvc3RQcm9jZXNzLCBQYXNzQ3ViZVBvc3RQcm9jZXNzLCBQb3N0UHJvY2VzcywgUG9zdFBy
b2Nlc3NNYW5hZ2VyLCBSZWZyYWN0aW9uUG9zdFByb2Nlc3MsIFNoYXJwZW5Qb3N0UHJvY2Vzcywg
U3RlcmVvc2NvcGljSW50ZXJsYWNlUG9zdFByb2Nlc3MsIFRvbmVtYXBwaW5nT3BlcmF0b3IsIFRv
bmVtYXBQb3N0UHJvY2VzcywgVm9sdW1ldHJpY0xpZ2h0U2NhdHRlcmluZ1Bvc3RQcm9jZXNzLCBW
UkRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFByb2Nlc3MsIFZSTXVsdGl2aWV3VG9TaW5nbGV2aWV3
UG9zdFByb2Nlc3MsIFJlZmxlY3Rpb25Qcm9iZSwgQm91bmRpbmdCb3hSZW5kZXJlciwgRGVwdGhS
ZW5kZXJlciwgRGVwdGhSZW5kZXJlclNjZW5lQ29tcG9uZW50LCBFZGdlc1JlbmRlcmVyLCBMaW5l
RWRnZXNSZW5kZXJlciwgR2VvbWV0cnlCdWZmZXJSZW5kZXJlciwgR2VvbWV0cnlCdWZmZXJSZW5k
ZXJlclNjZW5lQ29tcG9uZW50LCBPdXRsaW5lUmVuZGVyZXIsIFJlbmRlcmluZ0dyb3VwLCBSZW5k
ZXJpbmdHcm91cEluZm8sIFJlbmRlcmluZ01hbmFnZXIsIFV0aWxpdHlMYXllclJlbmRlcmVyLCBT
cHJpdGUsIFNwcml0ZU1hbmFnZXIsIFNwcml0ZVBhY2tlZE1hbmFnZXIsIFNwcml0ZVNjZW5lQ29t
cG9uZW50LCBfQWxwaGFTdGF0ZSwgX0RlcHRoQ3VsbGluZ1N0YXRlLCBfU3RlbmNpbFN0YXRlLCBB
bmRPck5vdEV2YWx1YXRvciwgQXNzZXRUYXNrU3RhdGUsIEFic3RyYWN0QXNzZXRUYXNrLCBBc3Nl
dHNQcm9ncmVzc0V2ZW50LCBNZXNoQXNzZXRUYXNrLCBUZXh0RmlsZUFzc2V0VGFzaywgQmluYXJ5
RmlsZUFzc2V0VGFzaywgSW1hZ2VBc3NldFRhc2ssIFRleHR1cmVBc3NldFRhc2ssIEN1YmVUZXh0
dXJlQXNzZXRUYXNrLCBIRFJDdWJlVGV4dHVyZUFzc2V0VGFzaywgRXF1aVJlY3Rhbmd1bGFyQ3Vi
ZVRleHR1cmVBc3NldFRhc2ssIEFzc2V0c01hbmFnZXIsIEREU1Rvb2xzLCBleHBhbmRUb1Byb3Bl
cnR5LCBzZXJpYWxpemUsIHNlcmlhbGl6ZUFzVGV4dHVyZSwgc2VyaWFsaXplQXNDb2xvcjMsIHNl
cmlhbGl6ZUFzRnJlc25lbFBhcmFtZXRlcnMsIHNlcmlhbGl6ZUFzVmVjdG9yMiwgc2VyaWFsaXpl
QXNWZWN0b3IzLCBzZXJpYWxpemVBc01lc2hSZWZlcmVuY2UsIHNlcmlhbGl6ZUFzQ29sb3JDdXJ2
ZXMsIHNlcmlhbGl6ZUFzQ29sb3I0LCBzZXJpYWxpemVBc0ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3Vy
YXRpb24sIHNlcmlhbGl6ZUFzUXVhdGVybmlvbiwgc2VyaWFsaXplQXNNYXRyaXgsIHNlcmlhbGl6
ZUFzQ2FtZXJhUmVmZXJlbmNlLCBTZXJpYWxpemF0aW9uSGVscGVyLCBEZWZlcnJlZCwgRW52aXJv
bm1lbnRUZXh0dXJlVG9vbHMsIE1lc2hFeHBsb2RlciwgRmlsZXNJbnB1dCwgQ3ViZU1hcFRvU3Bo
ZXJpY2FsUG9seW5vbWlhbFRvb2xzLCBLaHJvbm9zVGV4dHVyZUNvbnRhaW5lciwgRXZlbnRTdGF0
ZSwgT2JzZXJ2ZXIsIE11bHRpT2JzZXJ2ZXIsIE9ic2VydmFibGUsIFBlcmZvcm1hbmNlTW9uaXRv
ciwgUm9sbGluZ0F2ZXJhZ2UsIFByb21pc2VQb2x5ZmlsbCwgU2NlbmVPcHRpbWl6YXRpb24sIFRl
eHR1cmVPcHRpbWl6YXRpb24sIEhhcmR3YXJlU2NhbGluZ09wdGltaXphdGlvbiwgU2hhZG93c09w
dGltaXphdGlvbiwgUG9zdFByb2Nlc3Nlc09wdGltaXphdGlvbiwgTGVuc0ZsYXJlc09wdGltaXph
dGlvbiwgQ3VzdG9tT3B0aW1pemF0aW9uLCBQYXJ0aWNsZXNPcHRpbWl6YXRpb24sIFJlbmRlclRh
cmdldHNPcHRpbWl6YXRpb24sIE1lcmdlTWVzaGVzT3B0aW1pemF0aW9uLCBTY2VuZU9wdGltaXpl
ck9wdGlvbnMsIFNjZW5lT3B0aW1pemVyLCBTY2VuZVNlcmlhbGl6ZXIsIFNtYXJ0QXJyYXksIFNt
YXJ0QXJyYXlOb0R1cGxpY2F0ZSwgU3RyaW5nRGljdGlvbmFyeSwgVGFncywgVGV4dHVyZVRvb2xz
LCBUR0FUb29scywgVG9vbHMsIGNsYXNzTmFtZSwgQXN5bmNMb29wLCBWaWRlb1JlY29yZGVyLCBK
b3lzdGlja0F4aXMsIFZpcnR1YWxKb3lzdGljaywgV29ya2VyUG9vbCwgTG9nZ2VyLCBfVHlwZVN0
b3JlLCBGaWxlc0lucHV0U3RvcmUsIERlZXBDb3BpZXIsIFBpdm90VG9vbHMsIFByZWNpc2lvbkRh
dGUsIFNjcmVlbnNob3RUb29scywgV2ViUmVxdWVzdCwgSW5zcGVjdGFibGVUeXBlLCBCUkRGVGV4
dHVyZVRvb2xzLCBSR0JEVGV4dHVyZVRvb2xzLCBDb2xvckdyYWRpZW50LCBDb2xvcjNHcmFkaWVu
dCwgRmFjdG9yR3JhZGllbnQsIEdyYWRpZW50SGVscGVyLCBQZXJmQ291bnRlciwgUmV0cnlTdHJh
dGVneSwgTG9hZEZpbGVFcnJvciwgQXV0b1JvdGF0aW9uQmVoYXZpb3IsIEJvdW5jaW5nQmVoYXZp
b3IsIEZyYW1pbmdCZWhhdmlvciwgQXR0YWNoVG9Cb3hCZWhhdmlvciwgRmFkZUluT3V0QmVoYXZp
b3IsIE11bHRpUG9pbnRlclNjYWxlQmVoYXZpb3IsIFBvaW50ZXJEcmFnQmVoYXZpb3IsIFNpeERv
ZkRyYWdCZWhhdmlvciwgQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0LCBBcmNSb3RhdGVDYW1l
cmFLZXlib2FyZE1vdmVJbnB1dCwgQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElucHV0LCBBcmNS
b3RhdGVDYW1lcmFQb2ludGVyc0lucHV0LCBBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0
aW9uSW5wdXQsIEZseUNhbWVyYUtleWJvYXJkSW5wdXQsIEZseUNhbWVyYU1vdXNlSW5wdXQsIEZv
bGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0LCBGb2xsb3dDYW1lcmFNb3VzZVdoZWVsSW5wdXQs
IEZvbGxvd0NhbWVyYVBvaW50ZXJzSW5wdXQsIEZyZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklu
cHV0LCBGcmVlQ2FtZXJhR2FtZXBhZElucHV0LCBGcmVlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQs
IEZyZWVDYW1lcmFNb3VzZUlucHV0LCBGcmVlQ2FtZXJhVG91Y2hJbnB1dCwgRnJlZUNhbWVyYVZp
cnR1YWxKb3lzdGlja0lucHV0LCBBbmFnbHlwaEFyY1JvdGF0ZUNhbWVyYSwgQW5hZ2x5cGhGcmVl
Q2FtZXJhLCBBbmFnbHlwaEdhbWVwYWRDYW1lcmEsIEFuYWdseXBoVW5pdmVyc2FsQ2FtZXJhLCBT
dGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEsIFN0ZXJlb3Njb3BpY0ZyZWVDYW1lcmEsIFN0ZXJl
b3Njb3BpY0dhbWVwYWRDYW1lcmEsIFN0ZXJlb3Njb3BpY1VuaXZlcnNhbENhbWVyYSwgVlJDYW1l
cmFNZXRyaWNzLCBWUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhLCBWUkRldmljZU9y
aWVudGF0aW9uRnJlZUNhbWVyYSwgVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEsIE9u
QWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJsZUV2ZW50LCBWUkV4cGVyaWVuY2VIZWxwZXIsIFdlYlZS
RnJlZUNhbWVyYSwgV2ViWFJDYW1lcmEsIFdlYlhSRW50ZXJFeGl0VUlCdXR0b24sIFdlYlhSRW50
ZXJFeGl0VUlPcHRpb25zLCBXZWJYUkVudGVyRXhpdFVJLCBXZWJYUlN0YXRlLCBXZWJYUkV4cGVy
aWVuY2VIZWxwZXIsIFdlYlhSSW5wdXQsIFdlYlhSQ29udHJvbGxlclRlbGVwb3J0YXRpb24sIFdl
YlhSQ29udHJvbGxlclBvaW50ZXJTZWxlY3Rpb24sIFdlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVy
LCBXZWJYUkNvbnRyb2xsZXIsIFdlYlhSTWFuYWdlZE91dHB1dENhbnZhcywgV2ViWFJTZXNzaW9u
TWFuYWdlciwgT2N0cmVlLCBPY3RyZWVCbG9jaywgT2N0cmVlU2NlbmVDb21wb25lbnQsIF9PY2Ns
dXNpb25EYXRhU3RvcmFnZSwgX2ZvcmNlVHJhbnNmb3JtRmVlZGJhY2tUb0J1bmRsZSwgRGF5ZHJl
YW1Db250cm9sbGVyLCBHZWFyVlJDb250cm9sbGVyLCBHZW5lcmljQ29udHJvbGxlciwgT2N1bHVz
VG91Y2hDb250cm9sbGVyLCBQb3NlRW5hYmxlZENvbnRyb2xsZXJUeXBlLCBQb3NlRW5hYmxlZENv
bnRyb2xsZXJIZWxwZXIsIFBvc2VFbmFibGVkQ29udHJvbGxlciwgVml2ZUNvbnRyb2xsZXIsIFdl
YlZSQ29udHJvbGxlciwgV2luZG93c01vdGlvbkNvbnRyb2xsZXIsIFNoYWRvd0dlbmVyYXRvciwg
U2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQsIF9CYWJ5bG9uTG9hZGVyUmVnaXN0ZXJlZCwg
QmFja2dyb3VuZE1hdGVyaWFsLCBQQlJNYXRlcmlhbERlZmluZXMsIFBCUkJhc2VNYXRlcmlhbCwg
UEJSQmFzZVNpbXBsZU1hdGVyaWFsLCBQQlJNYXRlcmlhbCwgUEJSTWV0YWxsaWNSb3VnaG5lc3NN
YXRlcmlhbCwgUEJSU3BlY3VsYXJHbG9zc2luZXNzTWF0ZXJpYWwsIENvbG9yR3JhZGluZ1RleHR1
cmUsIFJhd0N1YmVUZXh0dXJlLCBSYXdUZXh0dXJlM0QsIFJlZnJhY3Rpb25UZXh0dXJlLCBWaWRl
b1RleHR1cmUsIEh0bWxFbGVtZW50VGV4dHVyZSwgTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzLCBO
b2RlTWF0ZXJpYWxCbG9ja0Nvbm5lY3Rpb25Qb2ludFR5cGVzLCBOb2RlTWF0ZXJpYWxDb25uZWN0
aW9uUG9pbnQsIE5vZGVNYXRlcmlhbEJsb2NrLCBOb2RlTWF0ZXJpYWxEZWZpbmVzLCBOb2RlTWF0
ZXJpYWwsIE5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcywgT3JpZW50YXRpb24sIEJlemllckN1cnZl
LCBBbmdsZSwgQXJjMiwgUGF0aDIsIFBhdGgzRCwgQ3VydmUzLCBQb3NpdGlvbk5vcm1hbFZlcnRl
eCwgUG9zaXRpb25Ob3JtYWxUZXh0dXJlVmVydGV4LCBEcmFjb0NvbXByZXNzaW9uLCBUaWxlZEJv
eEJ1aWxkZXIsIERpc2NCdWlsZGVyLCBSaWJib25CdWlsZGVyLCBIZW1pc3BoZXJlQnVpbGRlciwg
VG9ydXNLbm90QnVpbGRlciwgUG9seWdvbkJ1aWxkZXIsIFNoYXBlQnVpbGRlciwgTGF0aGVCdWls
ZGVyLCBUaWxlZFBsYW5lQnVpbGRlciwgVHViZUJ1aWxkZXIsIFBvbHloZWRyb25CdWlsZGVyLCBJ
Y29TcGhlcmVCdWlsZGVyLCBEZWNhbEJ1aWxkZXIsIFJlY2FzdEpTUGx1Z2luLCBSZWNhc3RKU0Ny
b3dkLCBCb3hQYXJ0aWNsZUVtaXR0ZXIsIENvbmVQYXJ0aWNsZUVtaXR0ZXIsIEN5bGluZGVyUGFy
dGljbGVFbWl0dGVyLCBDeWxpbmRlckRpcmVjdGVkUGFydGljbGVFbWl0dGVyLCBIZW1pc3BoZXJp
Y1BhcnRpY2xlRW1pdHRlciwgUG9pbnRQYXJ0aWNsZUVtaXR0ZXIsIFNwaGVyZVBhcnRpY2xlRW1p
dHRlciwgU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIsIENhbm5vbkpTUGx1Z2luLCBBbW1v
SlNQbHVnaW4sIE9pbW9KU1BsdWdpbiwgUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QsIFBvc3RQcm9j
ZXNzUmVuZGVyUGlwZWxpbmUsIFBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5hZ2VyLCBQb3N0
UHJvY2Vzc1JlbmRlclBpcGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50LCBIRFJUb29scywgUGFu
b3JhbWFUb0N1YmVNYXBUb29scywgX0REU1RleHR1cmVMb2FkZXIsIF9FTlZUZXh0dXJlTG9hZGVy
LCBfS1RYVGV4dHVyZUxvYWRlciwgX1RHQVRleHR1cmVMb2FkZXIsIF9CYXNpc1RleHR1cmVMb2Fk
ZXIsIEN1c3RvbVByb2NlZHVyYWxUZXh0dXJlLCBOb2lzZVByb2NlZHVyYWxUZXh0dXJlLCBQcm9j
ZWR1cmFsVGV4dHVyZSwgUHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudCwgTXVsdGlwbHlC
bG9jaywgQWRkQmxvY2ssIFNjYWxlQmxvY2ssIENsYW1wQmxvY2ssIENyb3NzQmxvY2ssIERvdEJs
b2NrLCBUcmFuc2Zvcm1CbG9jaywgUmVtYXBCbG9jaywgTm9ybWFsaXplQmxvY2ssIFRyaWdvbm9t
ZXRyeUJsb2NrT3BlcmF0aW9ucywgVHJpZ29ub21ldHJ5QmxvY2ssIENvbG9yTWVyZ2VyQmxvY2ss
IFZlY3Rvck1lcmdlckJsb2NrLCBDb2xvclNwbGl0dGVyQmxvY2ssIFZlY3RvclNwbGl0dGVyQmxv
Y2ssIExlcnBCbG9jaywgRGl2aWRlQmxvY2ssIFN1YnRyYWN0QmxvY2ssIFN0ZXBCbG9jaywgT3Bw
b3NpdGVCbG9jaywgVmlld0RpcmVjdGlvbkJsb2NrLCBGcmVzbmVsQmxvY2ssIE1heEJsb2NrLCBN
aW5CbG9jaywgTm9kZU1hdGVyaWFsT3B0aW1pemVyLCBEZWZhdWx0UmVuZGVyaW5nUGlwZWxpbmUs
IExlbnNSZW5kZXJpbmdQaXBlbGluZSwgU1NBTzJSZW5kZXJpbmdQaXBlbGluZSwgU1NBT1JlbmRl
cmluZ1BpcGVsaW5lLCBTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lLCBWZXJ0ZXhPdXRwdXRCbG9j
aywgQm9uZXNCbG9jaywgSW5zdGFuY2VzQmxvY2ssIE1vcnBoVGFyZ2V0c0Jsb2NrLCBMaWdodElu
Zm9ybWF0aW9uQmxvY2ssIEZyYWdtZW50T3V0cHV0QmxvY2ssIEFscGhhVGVzdEJsb2NrLCBJbWFn
ZVByb2Nlc3NpbmdCbG9jaywgUGVydHVyYk5vcm1hbEJsb2NrLCBGb2dCbG9jaywgTGlnaHRCbG9j
aywgVGV4dHVyZUJsb2NrLCBSZWZsZWN0aW9uVGV4dHVyZUJsb2NrLCBJbnB1dEJsb2NrLCBBbmlt
YXRlZElucHV0QmxvY2tUeXBlcyAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNr
X2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2Fic3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oLyohIC4vYWJzdHJhY3RTY2VuZSAqLyAiLi9hYnN0cmFjdFNjZW5l
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFic3RyYWN0U2NlbmUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9hYnN0cmFjdFNjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFic3RyYWN0
U2NlbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQWN0aW9uc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9B
Y3Rpb25zL2luZGV4ICovICIuL0FjdGlvbnMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
QWJzdHJhY3RBY3Rpb25NYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQWN0aW9uc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBYnN0cmFjdEFjdGlvbk1hbmFnZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQWN0
aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBY3Rpb24iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiQWN0aW9uRXZlbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BY3Rp
b25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFjdGlvbkV2ZW50Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkFjdGlvbk1hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9BY3Rpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFjdGlvbk1hbmFn
ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfQWN0aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb25kaXRp
b24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmFsdWVDb25kaXRpb24iLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9BY3Rpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZh
bHVlQ29uZGl0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlByZWRpY2F0ZUNvbmRpdGlv
biIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0FjdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siUHJlZGljYXRlQ29uZGl0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlN0YXRlQ29uZGl0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQWN0aW9uc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTdGF0ZUNvbmRpdGlvbiJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTd2l0Y2hCb29sZWFuQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQWN0
aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJTd2l0Y2hCb29sZWFuQWN0
aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNldFN0YXRlQWN0aW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfQWN0aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJT
ZXRTdGF0ZUFjdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTZXRWYWx1ZUFjdGlvbiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0FjdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU2V0VmFsdWVBY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW5jcmVt
ZW50VmFsdWVBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BY3Rpb25zX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkluY3JlbWVudFZhbHVlQWN0aW9uIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBsYXlBbmltYXRpb25BY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9BY3Rpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlBsYXlBbmltYXRp
b25BY3Rpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RvcEFuaW1hdGlvbkFjdGlvbiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0FjdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siU3RvcEFuaW1hdGlvbkFjdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJE
b05vdGhpbmdBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BY3Rpb25zX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkRvTm90aGluZ0FjdGlvbiJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJDb21iaW5lQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQWN0aW9uc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJDb21iaW5lQWN0aW9uIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkV4ZWN1dGVDb2RlQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfQWN0aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJFeGVjdXRlQ29k
ZUFjdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTZXRQYXJlbnRBY3Rpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9BY3Rpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIlNldFBhcmVudEFjdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQbGF5U291bmRB
Y3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BY3Rpb25zX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bIlBsYXlTb3VuZEFjdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTdG9wU291bmRBY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BY3Rpb25zX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlN0b3BTb3VuZEFjdGlvbiJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJJbnRlcnBvbGF0ZVZhbHVlQWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfQWN0aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJJbnRlcnBvbGF0
ZVZhbHVlQWN0aW9uIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0FuaW1hdGlv
bnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oLyohIC4vQW5pbWF0aW9ucy9pbmRleCAqLyAiLi9BbmltYXRpb25zL2luZGV4LnRzIik7Cisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkFuaW1hdGFibGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BbmltYXRp
b25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFuaW1hdGFibGUiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiX0lBbmltYXRpb25TdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0FuaW1hdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siX0lBbmlt
YXRpb25TdGF0ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmltYXRpb24iLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkFuaW1hdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUYXJnZXRlZEFuaW1hdGlv
biIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0FuaW1hdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siVGFyZ2V0ZWRBbmltYXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQW5pbWF0aW9uR3JvdXAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFuaW1hdGlvbkdyb3VwIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkFuaW1hdGlvblByb3BlcnRpZXNPdmVycmlkZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX0FuaW1hdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
QW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVh
c2luZ0Z1bmN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQW5pbWF0aW9uc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFYXNpbmdGdW5jdGlvbiJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJDaXJjbGVFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQW5pbWF0aW9uc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJDaXJjbGVFYXNlIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkJhY2tFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQW5pbWF0aW9u
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJCYWNrRWFzZSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJCb3VuY2VFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQW5pbWF0
aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJCb3VuY2VFYXNlIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkN1YmljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Fu
aW1hdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQ3ViaWNFYXNlIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVsYXN0aWNFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfQW5pbWF0aW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFbGFzdGlj
RWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFeHBvbmVudGlhbEVhc2UiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIkV4cG9uZW50aWFsRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3dlckVhc2Ui
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIlBvd2VyRWFzZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJRdWFkcmF0
aWNFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQW5pbWF0aW9uc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJRdWFkcmF0aWNFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlF1YXJ0aWNFYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQW5pbWF0aW9uc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJRdWFydGljRWFzZSJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJRdWludGljRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0FuaW1hdGlvbnNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUXVpbnRpY0Vhc2UiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiU2luZUVhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BbmltYXRp
b25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNpbmVFYXNlIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkJlemllckN1cnZlRWFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0FuaW1hdGlvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siQmV6aWVyQ3Vy
dmVFYXNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJ1bnRpbWVBbmltYXRpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIlJ1bnRpbWVBbmltYXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5pbWF0
aW9uRXZlbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bIkFuaW1hdGlvbkV2ZW50Il07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkFuaW1hdGlvbktleUludGVycG9sYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9B
bmltYXRpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFuaW1hdGlvbktl
eUludGVycG9sYXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQW5pbWF0aW9uUmFuZ2Ui
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BbmltYXRpb25zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bIkFuaW1hdGlvblJhbmdlIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2Fzc2V0Q29udGFpbmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKC8qISAuL2Fzc2V0Q29udGFpbmVyICovICIuL2Fzc2V0Q29udGFpbmVy
LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktlZXBBc3NldHMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9hc3NldENvbnRhaW5lcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJLZWVwQXNzZXRz
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFzc2V0Q29udGFpbmVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfYXNzZXRDb250YWluZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siQXNz
ZXRDb250YWluZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQXVkaW9faW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyoh
IC4vQXVkaW8vaW5kZXggKi8gIi4vQXVkaW8vaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
QW5hbHlzZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BdWRpb19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fWyJBbmFseXNlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBdWRp
b0VuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0F1ZGlvX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X19bIkF1ZGlvRW5naW5lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkF1
ZGlvU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9BdWRpb19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJBdWRpb1NjZW5lQ29tcG9uZW50Il07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlNvdW5kIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQXVkaW9faW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU291bmQiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiU291bmRUcmFjayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0F1ZGlvX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlNvdW5kVHJhY2siXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiV2VpZ2h0ZWRTb3VuZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0F1ZGlvX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIldlaWdodGVkU291bmQiXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfQmVoYXZpb3JzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0JlaGF2aW9ycy9pbmRleCAqLyAi
Li9CZWhhdmlvcnMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXV0b1JvdGF0aW9uQmVo
YXZpb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9CZWhhdmlvcnNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzVfX1siQXV0b1JvdGF0aW9uQmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQm91bmNpbmdCZWhhdmlvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0JlaGF2aW9y
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJCb3VuY2luZ0JlaGF2aW9yIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyYW1pbmdCZWhhdmlvciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX0JlaGF2aW9yc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJGcmFt
aW5nQmVoYXZpb3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXR0YWNoVG9Cb3hCZWhhdmlv
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0JlaGF2aW9yc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fWyJBdHRhY2hUb0JveEJlaGF2aW9yIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkZhZGVJbk91dEJlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmVoYXZpb3JzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkZhZGVJbk91dEJlaGF2aW9yIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk11bHRpUG9pbnRlclNjYWxlQmVoYXZpb3IiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9CZWhhdmlvcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siTXVsdGlQb2ludGVyU2NhbGVCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQ
b2ludGVyRHJhZ0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQmVoYXZpb3JzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlBvaW50ZXJEcmFnQmVoYXZpb3IiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU2l4RG9mRHJhZ0JlaGF2aW9yIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfQmVoYXZpb3JzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlNpeERv
ZkRyYWdCZWhhdmlvciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Cb25lc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9Cb25lcy9pbmRleCAqLyAiLi9Cb25lcy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJCb25lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQm9uZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siQm9uZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb25lSUtDb250
cm9sbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQm9uZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1siQm9uZUlLQ29udHJvbGxlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJCb25lTG9va0NvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Cb25lc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJCb25lTG9va0NvbnRyb2xsZXIiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiU2tlbGV0b24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Cb25lc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJTa2VsZXRvbiJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0NhbWVyYXMvaW5kZXggKi8gIi4v
Q2FtZXJhcy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDYW1lcmFJbnB1dFR5cGVzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJDYW1lcmFJbnB1dFR5cGVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNhbWVy
YUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkNhbWVyYUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVGFyZ2V0Q2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJUYXJnZXRDYW1lcmEiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRnJlZUNhbWVyYSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJGcmVlQ2FtZXJhSW5wdXRzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRnJlZUNh
bWVyYUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG91Y2hDYW1lcmEi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV83X19bIlRvdWNoQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1JvdGF0
ZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfX1siQXJjUm90YXRlQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkFyY1JvdGF0ZUNhbWVyYUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9D
YW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkFyY1JvdGF0ZUNhbWVy
YUlucHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGV2aWNlT3JpZW50YXRp
b25DYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV83X19bIkRldmljZU9yaWVudGF0aW9uQ2FtZXJhIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkZseUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRmx5Q2FtZXJhIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkZseUNhbWVyYUlucHV0c01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkZseUNhbWVyYUlu
cHV0c01hbmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRm9sbG93Q2FtZXJhIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJGb2xsb3dDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjRm9sbG93Q2Ft
ZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJBcmNGb2xsb3dDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Rm9sbG93Q2FtZXJhSW5wdXRzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRm9sbG93Q2FtZXJhSW5wdXRzTWFu
YWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHYW1lcGFkQ2FtZXJhIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJH
YW1lcGFkQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlVuaXZlcnNhbENhbWVyYSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siVW5pdmVyc2FsQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpcnR1
YWxKb3lzdGlja3NDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZpcnR1YWxKb3lzdGlja3NDYW1lcmEiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhR2FtZXBhZElucHV0IiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJBcmNSb3RhdGVDYW1lcmFHYW1lcGFkSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
QXJjUm90YXRlQ2FtZXJhS2V5Ym9hcmRNb3ZlSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9D
YW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkFyY1JvdGF0ZUNhbWVy
YUtleWJvYXJkTW92ZUlucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1JvdGF0ZUNh
bWVyYU1vdXNlV2hlZWxJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQXJjUm90YXRlQ2FtZXJhTW91c2VXaGVlbElu
cHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5w
dXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV83X19bIkFyY1JvdGF0ZUNhbWVyYVBvaW50ZXJzSW5wdXQiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQXJjUm90YXRlQ2FtZXJhVlJEZXZpY2VPcmllbnRhdGlvbklucHV0IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJBcmNSb3RhdGVDYW1lcmFWUkRldmljZU9yaWVudGF0aW9uSW5wdXQiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRmx5Q2FtZXJhS2V5Ym9hcmRJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRmx5Q2FtZXJh
S2V5Ym9hcmRJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGbHlDYW1lcmFNb3VzZUlu
cHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfN19fWyJGbHlDYW1lcmFNb3VzZUlucHV0Il07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkZvbGxvd0NhbWVyYUtleWJvYXJkTW92ZUlucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
Q2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJGb2xsb3dDYW1lcmFL
ZXlib2FyZE1vdmVJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGb2xsb3dDYW1lcmFN
b3VzZVdoZWVsSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkZvbGxvd0NhbWVyYU1vdXNlV2hlZWxJbnB1dCJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0IiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19f
WyJGb2xsb3dDYW1lcmFQb2ludGVyc0lucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZy
ZWVDYW1lcmFEZXZpY2VPcmllbnRhdGlvbklucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2Ft
ZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJGcmVlQ2FtZXJhRGV2aWNl
T3JpZW50YXRpb25JbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGcmVlQ2FtZXJhR2Ft
ZXBhZElucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJGcmVlQ2FtZXJhR2FtZXBhZElucHV0Il07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkZyZWVDYW1lcmFLZXlib2FyZE1vdmVJbnB1dCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRnJlZUNh
bWVyYUtleWJvYXJkTW92ZUlucHV0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZWVDYW1l
cmFNb3VzZUlucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJGcmVlQ2FtZXJhTW91c2VJbnB1dCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJGcmVlQ2FtZXJhVG91Y2hJbnB1dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siRnJlZUNhbWVyYVRv
dWNoSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlZUNhbWVyYVZpcnR1YWxKb3lz
dGlja0lucHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJGcmVlQ2FtZXJhVmlydHVhbEpveXN0aWNrSW5wdXQiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiQW5hZ2x5cGhBcmNSb3RhdGVDYW1lcmEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIkFu
YWdseXBoQXJjUm90YXRlQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuYWdseXBo
RnJlZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siQW5hZ2x5cGhGcmVlQ2FtZXJhIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkFuYWdseXBoR2FtZXBhZENhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Nh
bWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siQW5hZ2x5cGhHYW1lcGFk
Q2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFuYWdseXBoVW5pdmVyc2FsQ2FtZXJh
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfN19fWyJBbmFnbHlwaFVuaXZlcnNhbENhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJTdGVyZW9zY29waWNBcmNSb3RhdGVDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9D
YW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlN0ZXJlb3Njb3BpY0Fy
Y1JvdGF0ZUNhbWVyYSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGVyZW9zY29waWNGcmVl
Q2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfN19fWyJTdGVyZW9zY29waWNGcmVlQ2FtZXJhIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlN0ZXJlb3Njb3BpY0dhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlN0ZXJlb3Njb3Bp
Y0dhbWVwYWRDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RlcmVvc2NvcGljVW5p
dmVyc2FsQ2FtZXJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfN19fWyJTdGVyZW9zY29waWNVbml2ZXJzYWxDYW1lcmEiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVlJDYW1lcmFNZXRyaWNzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWUkNhbWVyYU1l
dHJpY3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVlJEZXZpY2VPcmllbnRhdGlvbkFyY1Jv
dGF0ZUNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzdfX1siVlJEZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJWUkRldmljZU9yaWVudGF0aW9uRnJlZUNhbWVyYSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siVlJEZXZpY2VPcmllbnRhdGlvbkZyZWVDYW1lcmEiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiVlJEZXZpY2VPcmllbnRhdGlvbkdhbWVwYWRDYW1lcmEiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZSRGV2
aWNlT3JpZW50YXRpb25HYW1lcGFkQ2FtZXJhIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9u
QWZ0ZXJFbnRlcmluZ1ZST2JzZXJ2YWJsZUV2ZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2Ft
ZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJPbkFmdGVyRW50ZXJpbmdW
Uk9ic2VydmFibGVFdmVudCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWUkV4cGVyaWVuY2VI
ZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV83X19bIlZSRXhwZXJpZW5jZUhlbHBlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJXZWJWUkZyZWVDYW1lcmEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIldlYlZSRnJlZUNhbWVyYSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJXZWJYUkNhbWVyYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVy
YXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siV2ViWFJDYW1lcmEiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViWFJFbnRlckV4aXRVSUJ1dHRvbiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siV2Vi
WFJFbnRlckV4aXRVSUJ1dHRvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkVudGVy
RXhpdFVJT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfX1siV2ViWFJFbnRlckV4aXRVSU9wdGlvbnMiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiV2ViWFJFbnRlckV4aXRVSSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siV2ViWFJFbnRlckV4
aXRVSSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUlN0YXRlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJXZWJY
UlN0YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSRXhwZXJpZW5jZUhlbHBlciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0NhbWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfX1siV2ViWFJFeHBlcmllbmNlSGVscGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IldlYlhSSW5wdXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bIldlYlhSSW5wdXQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiV2ViWFJDb250cm9sbGVyVGVsZXBvcnRhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Nh
bWVyYXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siV2ViWFJDb250cm9sbGVy
VGVsZXBvcnRhdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUkNvbnRyb2xsZXJQ
b2ludGVyU2VsZWN0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJXZWJYUkNvbnRyb2xsZXJQb2ludGVyU2VsZWN0aW9u
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYlhSQ29udHJvbGxlck1vZGVsTG9hZGVyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfN19fWyJXZWJYUkNvbnRyb2xsZXJNb2RlbExvYWRlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJXZWJYUkNvbnRyb2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DYW1lcmFzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIldlYlhSQ29udHJvbGxlciJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJXZWJYUk1hbmFnZWRPdXRwdXRDYW52YXMiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9DYW1lcmFzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIldlYlhS
TWFuYWdlZE91dHB1dENhbnZhcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJYUlNlc3Np
b25NYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfQ2FtZXJhc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfN19fWyJXZWJYUlNlc3Npb25NYW5hZ2VyIl07IH0pOworCisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0NvbGxpc2lvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQ29sbGlzaW9ucy9pbmRleCAqLyAi
Li9Db2xsaXNpb25zL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbGxpZGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfQ29sbGlzaW9uc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJDb2xsaWRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWZhdWx0Q29sbGlz
aW9uQ29vcmRpbmF0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Db2xsaXNpb25zX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIkRlZmF1bHRDb2xsaXNpb25Db29yZGluYXRvciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaWNraW5nSW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0NvbGxpc2lvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siUGlja2lu
Z0luZm8iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW50ZXJzZWN0aW9uSW5mbyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0NvbGxpc2lvbnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfX1siSW50ZXJzZWN0aW9uSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfTWVzaENv
bGxpc2lvbkRhdGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Db2xsaXNpb25zX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV84X19bIl9NZXNoQ29sbGlzaW9uRGF0YSJdOyB9KTsKKworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9DdWxsaW5nX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0N1bGxpbmcvaW5kZXggKi8gIi4v
Q3VsbGluZy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb3VuZGluZ0JveCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0N1bGxpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlf
X1siQm91bmRpbmdCb3giXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmRpbmdJbmZvIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfQ3VsbGluZ19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOV9fWyJCb3VuZGluZ0luZm8iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm91bmRpbmdT
cGhlcmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9DdWxsaW5nX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV85X19bIkJvdW5kaW5nU3BoZXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlJheSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0N1bGxpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzlfX1siUmF5Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0N1bGxpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzlfX1siT2N0cmVlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk9jdHJlZUJsb2NrIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfQ3VsbGluZ19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
OV9fWyJPY3RyZWVCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJPY3RyZWVTY2VuZUNv
bXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0N1bGxpbmdfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfX1siT2N0cmVlU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfRGVidWdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEw
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0RlYnVnL2luZGV4ICovICIuL0RlYnVnL2lu
ZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkF4ZXNWaWV3ZXIiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9EZWJ1Z19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX1siQXhlc1ZpZXdl
ciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCb25lQXhlc1ZpZXdlciIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX0RlYnVnX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fWyJCb25l
QXhlc1ZpZXdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWJ1Z0xheWVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfRGVidWdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19b
IkRlYnVnTGF5ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc1ZpZXdlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0RlYnVnX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MF9fWyJQaHlzaWNzVmlld2VyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJheUhlbHBlciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX0RlYnVnX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMF9fWyJSYXlIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2tlbGV0b25WaWV3
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9EZWJ1Z19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTBfX1siU2tlbGV0b25WaWV3ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfRW5naW5lc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vRW5naW5lcy9pbmRleCAqLyAiLi9FbmdpbmVzL2luZGV4LnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbnN0YW50cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Vu
Z2luZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkNvbnN0YW50cyJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJJbnN0YW5jaW5nQXR0cmlidXRlSW5mbyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX0VuZ2luZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19b
Ikluc3RhbmNpbmdBdHRyaWJ1dGVJbmZvIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRo
VGV4dHVyZUNyZWF0aW9uT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0VuZ2luZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIkRlcHRoVGV4dHVyZUNyZWF0aW9uT3B0
aW9ucyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFbmdpbmVDYXBhYmlsaXRpZXMiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9FbmdpbmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
MV9fWyJFbmdpbmVDYXBhYmlsaXRpZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRW5naW5l
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRW5naW5lc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siRW5naW5lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVuZ2luZVN0b3Jl
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRW5naW5lc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTFfX1siRW5naW5lU3RvcmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTnVsbEVu
Z2luZU9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9FbmdpbmVzX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xMV9fWyJOdWxsRW5naW5lT3B0aW9ucyJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJOdWxsRW5naW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRW5naW5lc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siTnVsbEVuZ2luZSJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJXZWJHTFBpcGVsaW5lQ29udGV4dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0VuZ2luZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIldlYkdMUGlwZWxp
bmVDb250ZXh0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYkdQVUNvbnN0YW50cyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0VuZ2luZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzExX19bIldlYkdQVUNvbnN0YW50cyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJHUFVF
bmdpbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9FbmdpbmVzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xMV9fWyJXZWJHUFVFbmdpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
V2ViR0wyU2hhZGVyUHJvY2Vzc29yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRW5naW5lc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siV2ViR0wyU2hhZGVyUHJvY2Vzc29yIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk5hdGl2ZUVuZ2luZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX0VuZ2luZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIk5hdGl2ZUVu
Z2luZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfT2NjbHVzaW9uRGF0YVN0b3JhZ2UiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9FbmdpbmVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMV9fWyJfT2NjbHVzaW9uRGF0YVN0b3JhZ2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
X2ZvcmNlVHJhbnNmb3JtRmVlZGJhY2tUb0J1bmRsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0Vu
Z2luZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19bIl9mb3JjZVRyYW5zZm9y
bUZlZWRiYWNrVG9CdW5kbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfRXZl
bnRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygvKiEgLi9FdmVudHMvaW5kZXggKi8gIi4vRXZlbnRzL2luZGV4LnRzIik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIktleWJvYXJkRXZlbnRUeXBlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0V2ZW50
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siS2V5Ym9hcmRFdmVudFR5cGVz
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktleWJvYXJkSW5mbyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX0V2ZW50c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siS2V5Ym9h
cmRJbmZvIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIktleWJvYXJkSW5mb1ByZSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0V2ZW50c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJf
X1siS2V5Ym9hcmRJbmZvUHJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvaW50ZXJFdmVu
dFR5cGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfRXZlbnRzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xMl9fWyJQb2ludGVyRXZlbnRUeXBlcyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJQb2ludGVySW5mb0Jhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9FdmVudHNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlBvaW50ZXJJbmZvQmFzZSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJQb2ludGVySW5mb1ByZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0V2
ZW50c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siUG9pbnRlckluZm9QcmUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9pbnRlckluZm8iLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9FdmVudHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19bIlBvaW50ZXJJ
bmZvIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNsaXBib2FyZEV2ZW50VHlwZXMiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9FdmVudHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEy
X19bIkNsaXBib2FyZEV2ZW50VHlwZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2xpcGJv
YXJkSW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0V2ZW50c19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTJfX1siQ2xpcGJvYXJkSW5mbyJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vR2FtZXBhZHMvaW5kZXggKi8gIi4vR2FtZXBhZHMv
aW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RpY2tWYWx1ZXMiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siU3Rp
Y2tWYWx1ZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2FtZXBhZCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX0dhbWVwYWRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJH
YW1lcGFkIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdlbmVyaWNQYWQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1si
R2VuZXJpY1BhZCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHYW1lcGFkTWFuYWdlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0dhbWVwYWRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xM19fWyJHYW1lcGFkTWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHYW1lcGFk
U3lzdGVtU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9HYW1lcGFkc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siR2FtZXBhZFN5c3RlbVNjZW5lQ29tcG9u
ZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlhib3gzNjBCdXR0b24iLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1si
WGJveDM2MEJ1dHRvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJYYm94MzYwRHBhZCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0dhbWVwYWRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xM19fWyJYYm94MzYwRHBhZCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJYYm94MzYwUGFk
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfR2FtZXBhZHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEzX19bIlhib3gzNjBQYWQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRHVhbFNo
b2NrQnV0dG9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfR2FtZXBhZHNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzEzX19bIkR1YWxTaG9ja0J1dHRvbiJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJEdWFsU2hvY2tEcGFkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfR2FtZXBhZHNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkR1YWxTaG9ja0RwYWQiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRHVhbFNob2NrUGFkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfR2Ft
ZXBhZHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19bIkR1YWxTaG9ja1BhZCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJEYXlkcmVhbUNvbnRyb2xsZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1si
RGF5ZHJlYW1Db250cm9sbGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdlYXJWUkNvbnRy
b2xsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTNfX1siR2VhclZSQ29udHJvbGxlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJHZW5lcmljQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dhbWVwYWRzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJHZW5lcmljQ29udHJvbGxlciJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJPY3VsdXNUb3VjaENvbnRyb2xsZXIiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1si
T2N1bHVzVG91Y2hDb250cm9sbGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc2VFbmFi
bGVkQ29udHJvbGxlclR5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX1siUG9zZUVuYWJsZWRDb250cm9sbGVyVHlwZSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NlRW5hYmxlZENvbnRyb2xsZXJIZWxwZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMTNfX1siUG9zZUVuYWJsZWRDb250cm9sbGVySGVscGVyIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBvc2VFbmFibGVkQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dhbWVw
YWRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJQb3NlRW5hYmxlZENvbnRy
b2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVml2ZUNvbnRyb2xsZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9HYW1lcGFkc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNf
X1siVml2ZUNvbnRyb2xsZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViVlJDb250cm9s
bGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfR2FtZXBhZHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzEzX19bIldlYlZSQ29udHJvbGxlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJXaW5kb3dzTW90aW9uQ29udHJvbGxlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dhbWVwYWRz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJXaW5kb3dzTW90aW9uQ29udHJv
bGxlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9HaXptb3NfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0dp
em1vcy9pbmRleCAqLyAiLi9HaXptb3MvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXhp
c0RyYWdHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dpem1vc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTRfX1siQXhpc0RyYWdHaXptbyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJBeGlzU2NhbGVHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dpem1vc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siQXhpc1NjYWxlR2l6bW8iXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQm91bmRpbmdCb3hHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dp
em1vc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siQm91bmRpbmdCb3hHaXpt
byJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0dpem1vc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siR2l6bW8iXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiR2l6bW9NYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
R2l6bW9zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJHaXptb01hbmFnZXIi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxhbmVSb3RhdGlvbkdpem1vIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfR2l6bW9zX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fWyJQ
bGFuZVJvdGF0aW9uR2l6bW8iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9zaXRpb25HaXpt
byIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dpem1vc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTRfX1siUG9zaXRpb25HaXptbyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSb3Rh
dGlvbkdpem1vIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfR2l6bW9zX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xNF9fWyJSb3RhdGlvbkdpem1vIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlNjYWxlR2l6bW8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9HaXptb3NfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE0X19bIlNjYWxlR2l6bW8iXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTGlnaHRHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dpem1vc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTGlnaHRHaXptbyJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJQbGFuZURyYWdHaXptbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0dpem1vc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX1siUGxhbmVEcmFnR2l6bW8iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfSGVscGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vSGVscGVycy9pbmRleCAq
LyAiLi9IZWxwZXJzL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVudmlyb25tZW50SGVs
cGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSGVscGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTVfX1siRW52aXJvbm1lbnRIZWxwZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUGhvdG9Eb21lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSGVscGVyc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTVfX1siUGhvdG9Eb21lIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIl9mb3JjZVNjZW5lSGVscGVyc1RvQnVuZGxlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfSGVs
cGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX1siX2ZvcmNlU2NlbmVIZWxw
ZXJzVG9CdW5kbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlkZW9Eb21lIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfSGVscGVyc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVf
X1siVmlkZW9Eb21lIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0luc3RydW1l
bnRhdGlvbl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oLyohIC4vSW5zdHJ1bWVudGF0aW9uL2luZGV4ICovICIuL0luc3RydW1lbnRhdGlv
bi9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFbmdpbmVJbnN0cnVtZW50YXRpb24iLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9JbnN0cnVtZW50YXRpb25faW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE2X19bIkVuZ2luZUluc3RydW1lbnRhdGlvbiJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJTY2VuZUluc3RydW1lbnRhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0luc3Ry
dW1lbnRhdGlvbl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX1siU2NlbmVJbnN0
cnVtZW50YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX1RpbWVUb2tlbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX0luc3RydW1lbnRhdGlvbl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMTZfX1siX1RpbWVUb2tlbiJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9MYXllcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL0xheWVycy9pbmRleCAqLyAiLi9MYXllcnMvaW5kZXgudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRWZmZWN0TGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9MYXllcnNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bIkVmZmVjdExheWVyIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdExheWVyU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9MYXllcnNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19bIkVm
ZmVjdExheWVyU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2xvd0xh
eWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGF5ZXJzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xN19fWyJHbG93TGF5ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSGlnaGxp
Z2h0TGF5ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9MYXllcnNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE3X19bIkhpZ2hsaWdodExheWVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkxheWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGF5ZXJzX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xN19fWyJMYXllciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMYXll
clNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGF5ZXJzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJMYXllclNjZW5lQ29tcG9uZW50Il07IH0pOworCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0xlbnNGbGFyZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0xlbnNGbGFyZXMvaW5k
ZXggKi8gIi4vTGVuc0ZsYXJlcy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zRmxh
cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9MZW5zRmxhcmVzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOF9fWyJMZW5zRmxhcmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGVu
c0ZsYXJlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGVuc0ZsYXJlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1siTGVuc0ZsYXJlU3lzdGVtIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIkxlbnNGbGFyZVN5c3RlbVNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfTGVuc0ZsYXJlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX1si
TGVuc0ZsYXJlU3lzdGVtU2NlbmVDb21wb25lbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTGlnaHRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9MaWdodHMvaW5kZXggKi8gIi4vTGlnaHRzL2luZGV4LnRz
Iik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkxpZ2h0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGlnaHRz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJMaWdodCJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTaGFkb3dMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0xpZ2h0c19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU2hhZG93TGlnaHQiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRGlyZWN0aW9uYWxMaWdodCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X0xpZ2h0c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siRGlyZWN0aW9uYWxM
aWdodCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJIZW1pc3BoZXJpY0xpZ2h0IiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTGlnaHRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9f
WyJIZW1pc3BoZXJpY0xpZ2h0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvaW50TGlnaHQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9MaWdodHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE5X19bIlBvaW50TGlnaHQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3BvdExpZ2h0
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGlnaHRzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xOV9fWyJTcG90TGlnaHQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hhZG93R2Vu
ZXJhdG9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTGlnaHRzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xOV9fWyJTaGFkb3dHZW5lcmF0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiU2hhZG93R2VuZXJhdG9yU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9M
aWdodHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlNoYWRvd0dlbmVyYXRv
clNjZW5lQ29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0xvYWRp
bmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKC8qISAuL0xvYWRpbmcvaW5kZXggKi8gIi4vTG9hZGluZy9pbmRleC50cyIpOworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJEZWZhdWx0TG9hZGluZ1NjcmVlbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0xv
YWRpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkRlZmF1bHRMb2FkaW5n
U2NyZWVuIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVu
dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0xvYWRpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIwX19bIlNjZW5lTG9hZGVyUHJvZ3Jlc3NFdmVudCJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJTY2VuZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX0xvYWRpbmdfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIlNjZW5lTG9hZGVyIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlNjZW5lTG9hZGVyRmxhZ3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Mb2Fk
aW5nX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJTY2VuZUxvYWRlckZsYWdz
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9CYWJ5bG9uTG9hZGVyUmVnaXN0ZXJlZCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX0xvYWRpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIwX19bIl9CYWJ5bG9uTG9hZGVyUmVnaXN0ZXJlZCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01hdGVyaWFscy9pbmRleCAqLyAiLi9NYXRlcmlh
bHMvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29sb3JDdXJ2ZXMiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19b
IkNvbG9yQ3VydmVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdEZhbGxiYWNrcyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjFfX1siRWZmZWN0RmFsbGJhY2tzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVm
ZmVjdENyZWF0aW9uT3B0aW9ucyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siRWZmZWN0Q3JlYXRpb25PcHRpb25zIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01h
dGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siRWZmZWN0Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkZyZXNuZWxQYXJhbWV0ZXJzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJGcmVz
bmVsUGFyYW1ldGVycyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbkRlZmluZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW1hZ2VQcm9jZXNzaW5nQ29u
ZmlndXJhdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjFfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbiJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJNYXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01h
dGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTWF0ZXJpYWwiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWF0ZXJpYWxEZWZpbmVzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJNYXRl
cmlhbERlZmluZXMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWF0ZXJpYWxIZWxwZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIxX19bIk1hdGVyaWFsSGVscGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk11bHRp
TWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzIxX19bIk11bHRpTWF0ZXJpYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiUHVzaE1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJQdXNoTWF0ZXJpYWwiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiU2hhZGVyTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRl
cmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIlNoYWRlck1hdGVyaWFs
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkTWF0ZXJpYWxEZWZpbmVzIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yMV9fWyJTdGFuZGFyZE1hdGVyaWFsRGVmaW5lcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTdGFuZGFyZE1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJTdGFuZGFyZE1hdGVyaWFsIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0
ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJCYXNlVGV4dHVyZSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJDdWJlVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siQ3ViZVRl
eHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRHluYW1pY1RleHR1cmUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIx
X19bIkR5bmFtaWNUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVxdWlSZWN0YW5n
dWxhckN1YmVUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJFcXVpUmVjdGFuZ3VsYXJDdWJlVGV4dHVyZSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJIRFJDdWJlVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siSERS
Q3ViZVRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSW50ZXJuYWxUZXh0dXJlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yMV9fWyJJbnRlcm5hbFRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWly
cm9yVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTWlycm9yVGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJNdWx0aVJlbmRlclRhcmdldCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFs
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTXVsdGlSZW5kZXJUYXJnZXQi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmF3VGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siUmF3VGV4
dHVyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZW5kZXJUYXJnZXRUZXh0dXJlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yMV9fWyJSZW5kZXJUYXJnZXRUZXh0dXJlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRl
eHR1cmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIxX19bIlRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVW5p
Zm9ybUJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjFfX1siVW5pZm9ybUJ1ZmZlciJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJNYXRlcmlhbEZsYWdzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJNYXRlcmlhbEZsYWdzIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkVmZmVjdFJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJFZmZlY3RSZW5k
ZXJlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFZmZlY3RXcmFwcGVyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9f
WyJFZmZlY3RXcmFwcGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhY2tncm91bmRNYXRl
cmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjFfX1siQmFja2dyb3VuZE1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBCUk1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFs
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siUEJSTWF0ZXJpYWxEZWZpbmVz
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUkJhc2VNYXRlcmlhbCIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1si
UEJSQmFzZU1hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBCUkJhc2VTaW1wbGVN
YXRlcmlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjFfX1siUEJSQmFzZVNpbXBsZU1hdGVyaWFsIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlBCUk1hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJQQlJNYXRlcmlhbCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MV9fWyJQQlJNZXRhbGxpY1JvdWdobmVzc01hdGVyaWFsIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBCUlNwZWN1bGFyR2xvc3NpbmVzc01hdGVyaWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJQQlJTcGVjdWxh
ckdsb3NzaW5lc3NNYXRlcmlhbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvckdyYWRp
bmdUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yMV9fWyJDb2xvckdyYWRpbmdUZXh0dXJlIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlJhd0N1YmVUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJp
YWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJSYXdDdWJlVGV4dHVyZSJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSYXdUZXh0dXJlM0QiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIlJhd1Rl
eHR1cmUzRCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZyYWN0aW9uVGV4dHVyZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjFfX1siUmVmcmFjdGlvblRleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlk
ZW9UZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yMV9fWyJWaWRlb1RleHR1cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiSHRtbEVsZW1lbnRUZXh0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJIdG1sRWxlbWVudFRleHR1cmUi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZU1hdGVyaWFsQmxvY2tUYXJnZXRzIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yMV9fWyJOb2RlTWF0ZXJpYWxCbG9ja1RhcmdldHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiTm9kZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTm9k
ZU1hdGVyaWFsQmxvY2tDb25uZWN0aW9uUG9pbnRUeXBlcyJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJOb2RlTWF0ZXJpYWxDb25uZWN0aW9uUG9pbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9N
YXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIk5vZGVNYXRlcmlh
bENvbm5lY3Rpb25Qb2ludCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWxC
bG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjFfX1siTm9kZU1hdGVyaWFsQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTm9kZU1hdGVyaWFsRGVmaW5lcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFs
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTm9kZU1hdGVyaWFsRGVmaW5l
cyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWwiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIk5v
ZGVNYXRlcmlhbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJpYWxTeXN0ZW1W
YWx1ZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIxX19bIk5vZGVNYXRlcmlhbFN5c3RlbVZhbHVlcyJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJfRERTVGV4dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01h
dGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX0REU1RleHR1cmVM
b2FkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0VOVlRleHR1cmVMb2FkZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIxX19bIl9FTlZUZXh0dXJlTG9hZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl9LVFhU
ZXh0dXJlTG9hZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJfS1RYVGV4dHVyZUxvYWRlciJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJfVEdBVGV4dHVyZUxvYWRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01h
dGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siX1RHQVRleHR1cmVM
b2FkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0Jhc2lzVGV4dHVyZUxvYWRlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjFfX1siX0Jhc2lzVGV4dHVyZUxvYWRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJD
dXN0b21Qcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siQ3VzdG9tUHJvY2VkdXJhbFRleHR1
cmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9pc2VQcm9jZWR1cmFsVGV4dHVyZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjFfX1siTm9pc2VQcm9jZWR1cmFsVGV4dHVyZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJQcm9jZWR1cmFsVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siUHJvY2VkdXJhbFRleHR1cmUiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiUHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjFfX1siUHJvY2VkdXJhbFRleHR1cmVTY2VuZUNvbXBvbmVudCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNdWx0aXBseUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJNdWx0aXBseUJsb2NrIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkFkZEJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0
ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJBZGRCbG9jayJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJTY2FsZUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJTY2FsZUJsb2Nr
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNsYW1wQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIkNsYW1w
QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3Jvc3NCbG9jayIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1si
Q3Jvc3NCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEb3RCbG9jayIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFf
X1siRG90QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJhbnNmb3JtQmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIxX19bIlRyYW5zZm9ybUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbWFw
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIxX19bIlJlbWFwQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Tm9ybWFsaXplQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIk5vcm1hbGl6ZUJsb2NrIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlRyaWdvbm9tZXRyeUJsb2NrT3BlcmF0aW9ucyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siVHJp
Z29ub21ldHJ5QmxvY2tPcGVyYXRpb25zIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRyaWdv
bm9tZXRyeUJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJUcmlnb25vbWV0cnlCbG9jayJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJDb2xvck1lcmdlckJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0
ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJDb2xvck1lcmdlckJs
b2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3Rvck1lcmdlckJsb2NrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MV9fWyJWZWN0b3JNZXJnZXJCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvclNw
bGl0dGVyQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzIxX19bIkNvbG9yU3BsaXR0ZXJCbG9jayJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJWZWN0b3JTcGxpdHRlckJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJWZWN0b3JTcGxp
dHRlckJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxlcnBCbG9jayIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFf
X1siTGVycEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRpdmlkZUJsb2NrIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yMV9fWyJEaXZpZGVCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdWJ0cmFjdEJs
b2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMV9fWyJTdWJ0cmFjdEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlN0ZXBCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjFfX1siU3RlcEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk9wcG9zaXRlQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIk9wcG9zaXRlQmxvY2siXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiVmlld0RpcmVjdGlvbkJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJWaWV3RGlyZWN0
aW9uQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRnJlc25lbEJsb2NrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MV9fWyJGcmVzbmVsQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWF4QmxvY2siLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIxX19bIk1heEJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1pbkJsb2NrIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yMV9fWyJNaW5CbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJOb2RlTWF0ZXJp
YWxPcHRpbWl6ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzIxX19bIk5vZGVNYXRlcmlhbE9wdGltaXplciJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJWZXJ0ZXhPdXRwdXRCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siVmVydGV4T3V0
cHV0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQm9uZXNCbG9jayIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFf
X1siQm9uZXNCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbnN0YW5jZXNCbG9jayIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjFfX1siSW5zdGFuY2VzQmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTW9y
cGhUYXJnZXRzQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIk1vcnBoVGFyZ2V0c0Jsb2NrIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkxpZ2h0SW5mb3JtYXRpb25CbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01hdGVyaWFsc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTGlnaHRJ
bmZvcm1hdGlvbkJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkZyYWdtZW50T3V0cHV0
QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIxX19bIkZyYWdtZW50T3V0cHV0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQWxwaGFUZXN0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIkFscGhhVGVzdEJsb2NrIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkltYWdlUHJvY2Vzc2luZ0Jsb2NrIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJJ
bWFnZVByb2Nlc3NpbmdCbG9jayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQZXJ0dXJiTm9y
bWFsQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzIxX19bIlBlcnR1cmJOb3JtYWxCbG9jayJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJGb2dCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siRm9nQmxvY2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiTGlnaHRCbG9jayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGVyaWFsc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX1siTGlnaHRCbG9jayJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJUZXh0dXJlQmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRl
cmlhbHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIlRleHR1cmVCbG9jayJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZsZWN0aW9uVGV4dHVyZUJsb2NrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWF0ZXJpYWxzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MV9fWyJSZWZsZWN0aW9uVGV4dHVyZUJsb2NrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIklu
cHV0QmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlhbHNfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzIxX19bIklucHV0QmxvY2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQW5pbWF0ZWRJbnB1dEJsb2NrVHlwZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRlcmlh
bHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19bIkFuaW1hdGVkSW5wdXRCbG9j
a1R5cGVzIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9N
YXRocy9pbmRleCAqLyAiLi9NYXRocy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY2Fs
YXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjJfX1siU2NhbGFyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNwYWNlIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIy
X19bIlNwYWNlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkF4aXMiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9NYXRoc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQXhpcyJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvcjMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9N
YXRoc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQ29sb3IzIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkNvbG9yNCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGhzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJDb2xvcjQiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiVG1wQ29sb3JzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0aHNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIlRtcENvbG9ycyJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJUb0dhbW1hU3BhY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siVG9HYW1tYVNwYWNlIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlRvTGluZWFyU3BhY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRo
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siVG9MaW5lYXJTcGFjZSJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJFcHNpbG9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0
aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkVwc2lsb24iXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRnJ1c3R1bSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGhzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJGcnVzdHVtIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlBsYW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIlBsYW5lIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlNpemUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjJfX1siU2l6ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWZWN0b3Iy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIyX19bIlZlY3RvcjIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmVjdG9yMyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01hdGhzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
Ml9fWyJWZWN0b3IzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlY3RvcjQiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1si
VmVjdG9yNCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJRdWF0ZXJuaW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIlF1
YXRlcm5pb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWF0cml4IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIk1hdHJp
eCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUbXBWZWN0b3JzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIlRtcFZlY3Rv
cnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlld3BvcnQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9NYXRoc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siVmlld3BvcnQi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3BoZXJpY2FsSGFybW9uaWNzIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIlNw
aGVyaWNhbEhhcm1vbmljcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGhlcmljYWxQb2x5
bm9taWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzIyX19bIlNwaGVyaWNhbFBvbHlub21pYWwiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiT3JpZW50YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siT3JpZW50YXRpb24iXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQmV6aWVyQ3VydmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQmV6aWVyQ3VydmUiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiQW5nbGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siQW5nbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQXJjMiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01hdGhzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yMl9fWyJBcmMyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhdGgyIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIyX19bIlBhdGgyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhdGgzRCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01hdGhzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJQ
YXRoM0QiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3VydmUzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTWF0aHNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19bIkN1cnZlMyJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NpdGlvbk5vcm1hbFZlcnRleCIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01hdGhzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fWyJQ
b3NpdGlvbk5vcm1hbFZlcnRleCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3NpdGlvbk5v
cm1hbFRleHR1cmVWZXJ0ZXgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NYXRoc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX1siUG9zaXRpb25Ob3JtYWxUZXh0dXJlVmVydGV4Il07
IH0pOworCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01lc2hlc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vTWVzaGVzL2lu
ZGV4ICovICIuL01lc2hlcy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBYnN0cmFjdE1l
c2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIzX19bIkFic3RyYWN0TWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCdWZm
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIzX19bIkJ1ZmZlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJWZXJ0ZXhCdWZm
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIzX19bIlZlcnRleEJ1ZmZlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDU0ci
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIzX19bIkNTRyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHZW9tZXRyeSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNf
X1siR2VvbWV0cnkiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR3JvdW5kTWVzaCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNf
X1siR3JvdW5kTWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUcmFpbE1lc2giLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIz
X19bIlRyYWlsTWVzaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbnN0YW5jZWRNZXNoIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yM19fWyJJbnN0YW5jZWRNZXNoIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkxpbmVzTWVz
aCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjNfX1siTGluZXNNZXNoIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkluc3RhbmNl
ZExpbmVzTWVzaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjNfX1siSW5zdGFuY2VkTGluZXNNZXNoIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIl9DcmVhdGlvbkRhdGFTdG9yYWdlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVz
aGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJfQ3JlYXRpb25EYXRhU3Rv
cmFnZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfSW5zdGFuY2VzQmF0Y2giLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19b
Il9JbnN0YW5jZXNCYXRjaCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJNZXNoIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19f
WyJNZXNoIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZlcnRleERhdGEiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19bIlZl
cnRleERhdGEiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWVzaEJ1aWxkZXIiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19b
Ik1lc2hCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbXBsaWZpY2F0aW9uU2V0
dGluZ3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzIzX19bIlNpbXBsaWZpY2F0aW9uU2V0dGluZ3MiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU2ltcGxpZmljYXRpb25RdWV1ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hl
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1siU2ltcGxpZmljYXRpb25RdWV1
ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaW1wbGlmaWNhdGlvblR5cGUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19b
IlNpbXBsaWZpY2F0aW9uVHlwZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaW1wbGljYXRp
b25RdWV1ZVNjZW5lQ29tcG9uZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJTaW1wbGljYXRpb25RdWV1ZVNjZW5lQ29t
cG9uZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvbHlnb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19bIlBvbHln
b24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUG9seWdvbk1lc2hCdWlsZGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19f
WyJQb2x5Z29uTWVzaEJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzZVN1Yk1l
c2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIzX19bIkJhc2VTdWJNZXNoIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN1Yk1l
c2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzIzX19bIlN1Yk1lc2giXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTWVzaExPRExl
dmVsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yM19fWyJNZXNoTE9ETGV2ZWwiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVHJh
bnNmb3JtTm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjNfX1siVHJhbnNmb3JtTm9kZSJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJCb3hCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJCb3hCdWlsZGVyIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlNwaGVyZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19bIlNwaGVyZUJ1aWxkZXIiXTsgfSk7CisKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVz
aGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJDeWxpbmRlckJ1aWxkZXIi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG9ydXNCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJUb3J1c0J1
aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGluZXNCdWlsZGVyIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJM
aW5lc0J1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGxhbmVCdWlsZGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
M19fWyJQbGFuZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR3JvdW5kQnVpbGRl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjNfX1siR3JvdW5kQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEYXRh
QnVmZmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yM19fWyJEYXRhQnVmZmVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldl
YkdMRGF0YUJ1ZmZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjNfX1siV2ViR0xEYXRhQnVmZmVyIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIldlYkdQVURhdGFCdWZmZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19bIldlYkdQVURhdGFCdWZmZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRHJhY29Db21wcmVzc2lvbiIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1siRHJhY29D
b21wcmVzc2lvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUaWxlZEJveEJ1aWxkZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIzX19bIlRpbGVkQm94QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEaXNjQnVp
bGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjNfX1siRGlzY0J1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmli
Ym9uQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjNfX1siUmliYm9uQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBy
ZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJIZW1pc3BoZXJlQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRl
eF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1siSGVtaXNwaGVyZUJ1aWxkZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVG9ydXNLbm90QnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1siVG9ydXNLbm90
QnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb2x5Z29uQnVpbGRlciIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNf
X1siUG9seWdvbkJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2hhcGVCdWlsZGVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yM19fWyJTaGFwZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGF0aGVC
dWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yM19fWyJMYXRoZUJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
VGlsZWRQbGFuZUJ1aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19bIlRpbGVkUGxhbmVCdWlsZGVyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlR1YmVCdWlsZGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWVzaGVz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJUdWJlQnVpbGRlciJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQb2x5aGVkcm9uQnVpbGRlciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1siUG9seWhlZHJv
bkJ1aWxkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSWNvU3BoZXJlQnVpbGRlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01lc2hlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MjNfX1siSWNvU3BoZXJlQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWNhbEJ1
aWxkZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NZXNoZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzIzX19bIkRlY2FsQnVpbGRlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9Nb3JwaF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vTW9ycGgvaW5kZXggKi8gIi4vTW9ycGgvaW5kZXgudHMiKTsK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiTW9ycGhUYXJnZXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Nb3Jw
aF9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX1siTW9ycGhUYXJnZXQiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiTW9ycGhUYXJnZXRNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTW9ycGhfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X19bIk1vcnBoVGFy
Z2V0TWFuYWdlciJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9OYXZpZ2F0aW9u
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygvKiEgLi9OYXZpZ2F0aW9uL2luZGV4ICovICIuL05hdmlnYXRpb24vaW5kZXgudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiUmVjYXN0SlNQbHVnaW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9OYXZp
Z2F0aW9uX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fWyJSZWNhc3RKU1BsdWdp
biJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWNhc3RKU0Nyb3dkIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfTmF2aWdhdGlvbl9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX1si
UmVjYXN0SlNDcm93ZCJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub2RlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9u
b2RlICovICIuL25vZGUudHMiKTsKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTm9kZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX25vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19bIk5vZGUiXTsgfSk7
CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfT2ZmbGluZV9pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vT2ZmbGluZS9pbmRl
eCAqLyAiLi9PZmZsaW5lL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRhdGFiYXNlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfT2ZmbGluZV9pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjdfX1siRGF0YWJhc2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfUGFy
dGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9QYXJ0aWNsZXMvaW5kZXggKi8gIi4vUGFydGljbGVzL2luZGV4LnRzIik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2VQYXJ0aWNsZVN5c3RlbSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX1BhcnRpY2xlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjhfX1siQmFzZVBh
cnRpY2xlU3lzdGVtIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdQVVBhcnRpY2xlU3lzdGVt
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGFydGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yOF9fWyJHUFVQYXJ0aWNsZVN5c3RlbSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJQYXJ0aWNsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BhcnRpY2xlc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjhfX1siUGFydGljbGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiUGFydGljbGVIZWxwZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QYXJ0aWNsZXNfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIlBhcnRpY2xlSGVscGVyIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGFy
dGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fWyJQYXJ0aWNsZVN5c3Rl
bSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfSURvTmVlZFRvQmVJblRoZUJ1aWxkIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfUGFydGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yOF9fWyJfSURvTmVlZFRvQmVJblRoZUJ1aWxkIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBhcnRpY2xlU3lzdGVtU2V0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGFydGljbGVzX2luZGV4
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fWyJQYXJ0aWNsZVN5c3RlbVNldCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJTb2xpZFBhcnRpY2xlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
UGFydGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fWyJTb2xpZFBhcnRp
Y2xlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1vZGVsU2hhcGUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9QYXJ0aWNsZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIk1v
ZGVsU2hhcGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhTb3J0ZWRQYXJ0aWNsZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BhcnRpY2xlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjhfX1siRGVwdGhTb3J0ZWRQYXJ0aWNsZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTb2xpZFBhcnRpY2xlU3lzdGVtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGFydGljbGVzX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fWyJTb2xpZFBhcnRpY2xlU3lzdGVtIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN1YkVtaXR0ZXJUeXBlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfUGFydGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fWyJTdWJF
bWl0dGVyVHlwZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdWJFbWl0dGVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfUGFydGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
OF9fWyJTdWJFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJveFBhcnRpY2xlRW1p
dHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BhcnRpY2xlc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMjhfX1siQm94UGFydGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkNvbmVQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QYXJ0aWNs
ZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIkNvbmVQYXJ0aWNsZUVtaXR0
ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ3lsaW5kZXJQYXJ0aWNsZUVtaXR0ZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9QYXJ0aWNsZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzI4X19bIkN5bGluZGVyUGFydGljbGVFbWl0dGVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkN5bGluZGVyRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9QYXJ0aWNsZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIkN5bGluZGVy
RGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSGVtaXNw
aGVyaWNQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QYXJ0aWNsZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIkhlbWlzcGhlcmljUGFydGljbGVFbWl0
dGVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvaW50UGFydGljbGVFbWl0dGVyIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfUGFydGljbGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yOF9fWyJQb2ludFBhcnRpY2xlRW1pdHRlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9y
dCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJT
cGhlcmVQYXJ0aWNsZUVtaXR0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QYXJ0aWNsZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIlNwaGVyZVBhcnRpY2xlRW1pdHRlciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcGhlcmVEaXJlY3RlZFBhcnRpY2xlRW1pdHRlciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BhcnRpY2xlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjhfX1siU3BoZXJlRGlyZWN0ZWRQYXJ0aWNsZUVtaXR0ZXIiXTsgfSk7CisKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfUGh5c2ljc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vUGh5c2ljcy9pbmRleCAqLyAiLi9Q
aHlzaWNzL2luZGV4LnRzIik7CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NFbmdpbmUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9QaHlzaWNzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
OV9fWyJQaHlzaWNzRW5naW5lIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NFbmdp
bmVTY2VuZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BoeXNpY3NfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X19bIlBoeXNpY3NFbmdpbmVTY2VuZUNvbXBvbmVudCJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzSGVscGVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfUGh5c2ljc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjlfX1siUGh5c2lj
c0hlbHBlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzUmFkaWFsRXhwbG9zaW9u
RXZlbnRPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGh5c2ljc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjlfX1siUGh5c2ljc1JhZGlhbEV4cGxvc2lvbkV2ZW50T3B0aW9u
cyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQaHlzaWNzVXBkcmFmdEV2ZW50T3B0aW9ucyIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BoeXNpY3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzI5X19bIlBoeXNpY3NVcGRyYWZ0RXZlbnRPcHRpb25zIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlBoeXNpY3NWb3J0ZXhFdmVudE9wdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Q
aHlzaWNzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fWyJQaHlzaWNzVm9ydGV4
RXZlbnRPcHRpb25zIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNpY3NSYWRpYWxJbXB1
bHNlRmFsbG9mZiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BoeXNpY3NfaW5kZXhfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzI5X19bIlBoeXNpY3NSYWRpYWxJbXB1bHNlRmFsbG9mZiJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQaHlzaWNzVXBkcmFmdE1vZGUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9QaHlzaWNzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fWyJQaHlzaWNz
VXBkcmFmdE1vZGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGh5c2ljc0ltcG9zdG9yIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfUGh5c2ljc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjlfX1siUGh5c2ljc0ltcG9zdG9yIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBoeXNp
Y3NKb2ludCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BoeXNpY3NfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzI5X19bIlBoeXNpY3NKb2ludCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJEaXN0YW5jZUpvaW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGh5c2ljc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMjlfX1siRGlzdGFuY2VKb2ludCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJNb3RvckVuYWJsZWRKb2ludCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1BoeXNp
Y3NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X19bIk1vdG9yRW5hYmxlZEpvaW50
Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhpbmdlSm9pbnQiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9QaHlzaWNzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOV9fWyJIaW5nZUpv
aW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkhpbmdlMkpvaW50IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfUGh5c2ljc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjlfX1siSGlu
Z2UySm9pbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ2Fubm9uSlNQbHVnaW4iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9QaHlzaWNzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
OV9fWyJDYW5ub25KU1BsdWdpbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbW1vSlNQbHVn
aW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9QaHlzaWNzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yOV9fWyJBbW1vSlNQbHVnaW4iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT2lt
b0pTUGx1Z2luIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUGh5c2ljc19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjlfX1siT2ltb0pTUGx1Z2luIl07IH0pOworCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzMwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1Bvc3RQcm9jZXNzZXMvaW5kZXggKi8g
Ii4vUG9zdFByb2Nlc3Nlcy9pbmRleC50cyIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBbmFnbHlwaFBv
c3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siQW5hZ2x5cGhQb3N0UHJvY2VzcyJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJCbGFja0FuZFdoaXRlUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9f
WyJCbGFja0FuZFdoaXRlUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmxv
b21FZmZlY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fWyJCbG9vbUVmZmVjdCJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJCbG9vbU1lcmdlUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0
UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fWyJCbG9vbU1lcmdl
UG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmx1clBvc3RQcm9jZXNzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMzBfX1siQmx1clBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkNocm9tYXRpY0FiZXJyYXRpb25Qb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bv
c3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkNocm9tYXRp
Y0FiZXJyYXRpb25Qb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDaXJjbGVP
ZkNvbmZ1c2lvblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nl
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siQ2lyY2xlT2ZDb25mdXNpb25Q
b3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDb2xvckNvcnJlY3Rpb25Qb3N0
UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkNvbG9yQ29ycmVjdGlvblBvc3RQcm9jZXNzIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbnZvbHV0aW9uUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
MF9fWyJDb252b2x1dGlvblBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRl
cHRoT2ZGaWVsZEJsdXJQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9j
ZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkRlcHRoT2ZGaWVsZEJs
dXJQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aE9mRmllbGRFZmZl
Y3RCbHVyTGV2ZWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fWyJEZXB0aE9mRmllbGRFZmZlY3RCbHVyTGV2ZWwi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVwdGhPZkZpZWxkRWZmZWN0IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MzBfX1siRGVwdGhPZkZpZWxkRWZmZWN0Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRo
T2ZGaWVsZE1lcmdlUG9zdFByb2Nlc3NPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9z
dFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siRGVwdGhPZkZp
ZWxkTWVyZ2VQb3N0UHJvY2Vzc09wdGlvbnMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVw
dGhPZkZpZWxkTWVyZ2VQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9j
ZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkRlcHRoT2ZGaWVsZE1l
cmdlUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGlzcGxheVBhc3NQb3N0
UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkRpc3BsYXlQYXNzUG9zdFByb2Nlc3MiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiRXh0cmFjdEhpZ2hsaWdodHNQb3N0UHJvY2VzcyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzMwX19bIkV4dHJhY3RIaWdobGlnaHRzUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiRmlsdGVyUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vz
c2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fWyJGaWx0ZXJQb3N0UHJvY2Vz
cyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGeGFhUG9zdFByb2Nlc3MiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
MF9fWyJGeGFhUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR3JhaW5Qb3N0
UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkdyYWluUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiSGlnaGxpZ2h0c1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
UG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siSGlnaGxp
Z2h0c1Bvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkltYWdlUHJvY2Vzc2lu
Z1Bvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siSW1hZ2VQcm9jZXNzaW5nUG9zdFByb2Nlc3Mi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTW90aW9uQmx1clBvc3RQcm9jZXNzIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMzBfX1siTW90aW9uQmx1clBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBhc3NQb3N0UHJvY2VzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIlBhc3NQb3N0UHJvY2VzcyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJQYXNzQ3ViZVBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1si
UGFzc0N1YmVQb3N0UHJvY2VzcyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3N0UHJvY2Vz
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzMwX19bIlBvc3RQcm9jZXNzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlBvc3RQcm9jZXNzTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIlBvc3RQcm9jZXNzTWFuYWdlciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZWZyYWN0aW9uUG9zdFByb2Nlc3MiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zMF9fWyJSZWZyYWN0aW9uUG9zdFByb2Nlc3MiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
U2hhcnBlblBvc3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siU2hhcnBlblBvc3RQcm9jZXNzIl07
IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlN0ZXJlb3Njb3BpY0ludGVybGFjZVBvc3RQcm9jZXNz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMzBfX1siU3RlcmVvc2NvcGljSW50ZXJsYWNlUG9zdFByb2Nlc3MiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVG9uZW1hcHBpbmdPcGVyYXRvciIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19b
IlRvbmVtYXBwaW5nT3BlcmF0b3IiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG9uZW1hcFBv
c3RQcm9jZXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siVG9uZW1hcFBvc3RQcm9jZXNzIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzcyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzMwX19bIlZvbHVtZXRyaWNMaWdodFNjYXR0ZXJpbmdQb3N0UHJvY2VzcyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJWUkRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFByb2Nlc3MiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zMF9fWyJWUkRpc3RvcnRpb25Db3JyZWN0aW9uUG9zdFByb2Nlc3MiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiVlJNdWx0aXZpZXdUb1NpbmdsZXZpZXdQb3N0UHJvY2VzcyIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzMwX19bIlZSTXVsdGl2aWV3VG9TaW5nbGV2aWV3UG9zdFByb2Nlc3MiXTsgfSk7CisK
Ky8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiUG9zdFByb2Nlc3NSZW5kZXJFZmZlY3QiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9f
WyJQb3N0UHJvY2Vzc1JlbmRlckVmZmVjdCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3N0
UHJvY2Vzc1JlbmRlclBpcGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nl
c19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX1siUG9zdFByb2Nlc3NSZW5kZXJQ
aXBlbGluZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJQb3N0UHJvY2Vzc1JlbmRlclBpcGVs
aW5lTWFuYWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNzZXNfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVNYW5h
Z2VyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBvc3RQcm9jZXNzUmVuZGVyUGlwZWxpbmVN
YW5hZ2VyU2NlbmVDb21wb25lbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2Vz
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fWyJQb3N0UHJvY2Vzc1JlbmRlclBp
cGVsaW5lTWFuYWdlclNjZW5lQ29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0
IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRl
ZmF1bHRSZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bvc3RQcm9jZXNz
ZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIkRlZmF1bHRSZW5kZXJpbmdQ
aXBlbGluZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zUmVuZGVyaW5nUGlwZWxpbmUi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zMF9fWyJMZW5zUmVuZGVyaW5nUGlwZWxpbmUiXTsgfSk7CisKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiU1NBTzJSZW5kZXJpbmdQaXBlbGluZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Bv
c3RQcm9jZXNzZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX19bIlNTQU8yUmVu
ZGVyaW5nUGlwZWxpbmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU1NBT1JlbmRlcmluZ1Bp
cGVsaW5lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUG9zdFByb2Nlc3Nlc19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMzBfX1siU1NBT1JlbmRlcmluZ1BpcGVsaW5lIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlN0YW5kYXJkUmVuZGVyaW5nUGlwZWxpbmUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9Qb3N0UHJvY2Vzc2VzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9f
WyJTdGFuZGFyZFJlbmRlcmluZ1BpcGVsaW5lIl07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1Byb2Jlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vUHJvYmVzL2luZGV4ICovICIuL1Byb2Jlcy9pbmRleC50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJSZWZsZWN0aW9uUHJvYmUiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9Qcm9iZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMxX19bIlJlZmxlY3Rpb25Q
cm9iZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9SZW5kZXJpbmdfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L1JlbmRlcmluZy9pbmRleCAqLyAiLi9SZW5kZXJpbmcvaW5kZXgudHMiKTsKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiQm91bmRpbmdCb3hSZW5kZXJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1JlbmRlcmlu
Z19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzJfX1siQm91bmRpbmdCb3hSZW5kZXJl
ciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZXB0aFJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfUmVuZGVyaW5nX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMl9fWyJE
ZXB0aFJlbmRlcmVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRlcHRoUmVuZGVyZXJTY2Vu
ZUNvbXBvbmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1JlbmRlcmluZ19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMzJfX1siRGVwdGhSZW5kZXJlclNjZW5lQ29tcG9uZW50Il07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIkVkZ2VzUmVuZGVyZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9SZW5kZXJpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMyX19bIkVkZ2VzUmVu
ZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTGluZUVkZ2VzUmVuZGVyZXIiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9SZW5kZXJpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzMyX19bIkxpbmVFZGdlc1JlbmRlcmVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdlb21l
dHJ5QnVmZmVyUmVuZGVyZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9SZW5kZXJpbmdfaW5kZXhf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMyX19bIkdlb21ldHJ5QnVmZmVyUmVuZGVyZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR2VvbWV0cnlCdWZmZXJSZW5kZXJlclNjZW5lQ29tcG9u
ZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfUmVuZGVyaW5nX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zMl9fWyJHZW9tZXRyeUJ1ZmZlclJlbmRlcmVyU2NlbmVDb21wb25lbnQiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiT3V0bGluZVJlbmRlcmVyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfUmVuZGVyaW5nX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMl9fWyJPdXRs
aW5lUmVuZGVyZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUmVuZGVyaW5nR3JvdXAiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9SZW5kZXJpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzMyX19bIlJlbmRlcmluZ0dyb3VwIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbmRl
cmluZ0dyb3VwSW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1JlbmRlcmluZ19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMzJfX1siUmVuZGVyaW5nR3JvdXBJbmZvIl07IH0pOworCisv
KiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlJlbmRlcmluZ01hbmFnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9S
ZW5kZXJpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMyX19bIlJlbmRlcmluZ01h
bmFnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVXRpbGl0eUxheWVyUmVuZGVyZXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIF9SZW5kZXJpbmdfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzMyX19bIlV0aWxpdHlMYXllclJlbmRlcmVyIl07IH0pOworCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygvKiEgLi9zY2VuZSAqLyAiLi9zY2VuZS50cyIpOworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTY2VuZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX3NjZW5lX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zM19fWyJTY2VuZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY2Vu
ZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oLyohIC4vc2NlbmVDb21wb25lbnQgKi8gIi4vc2NlbmVDb21wb25lbnQudHMiKTsKKy8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiU2NlbmVDb21wb25lbnRDb25zdGFudHMiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzRfX1siU2NlbmVD
b21wb25lbnRDb25zdGFudHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU3RhZ2UiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MzRfX1siU3RhZ2UiXTsgfSk7CisKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU3ByaXRlc19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vU3ByaXRlcy9pbmRleCAqLyAiLi9TcHJpdGVzL2luZGV4LnRzIik7CisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlNwcml0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1Nwcml0ZXNfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzM1X19bIlNwcml0ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJTcHJpdGVNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfU3ByaXRlc19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfX1siU3ByaXRlTWFuYWdlciJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJTcHJpdGVQYWNrZWRNYW5hZ2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfU3By
aXRlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfX1siU3ByaXRlUGFja2VkTWFu
YWdlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTcHJpdGVTY2VuZUNvbXBvbmVudCIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX1Nwcml0ZXNfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzM1X19bIlNwcml0ZVNjZW5lQ29tcG9uZW50Il07IH0pOworCisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX1N0YXRlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzZfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vU3RhdGVzL2luZGV4ICovICIuL1N0YXRlcy9pbmRleC50cyIp
OworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJfQWxwaGFTdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX1N0
YXRlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzZfX1siX0FscGhhU3RhdGUiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX0RlcHRoQ3VsbGluZ1N0YXRlIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfU3RhdGVzX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNl9fWyJfRGVw
dGhDdWxsaW5nU3RhdGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX1N0ZW5jaWxTdGF0ZSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gX1N0YXRlc19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMzZfX1siX1N0ZW5jaWxTdGF0ZSJdOyB9KTsKKworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygvKiEgLi9NaXNjL2luZGV4ICovICIuL01pc2MvaW5kZXgudHMiKTsKKy8qIGhhcm1v
bnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiQW5kT3JOb3RFdmFsdWF0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJBbmRPck5vdEV2YWx1YXRvciJdOyB9
KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJBc3NldFRhc2tTdGF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIkFzc2V0VGFza1N0
YXRlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFic3RyYWN0QXNzZXRUYXNrIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1si
QWJzdHJhY3RBc3NldFRhc2siXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXNzZXRzUHJvZ3Jl
c3NFdmVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzM3X19bIkFzc2V0c1Byb2dyZXNzRXZlbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiTWVzaEFzc2V0VGFzayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIk1lc2hBc3NldFRhc2siXTsgfSk7CisKKy8qIGhh
cm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiVGV4dEZpbGVBc3NldFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNj
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJUZXh0RmlsZUFzc2V0VGFzayJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJCaW5hcnlGaWxlQXNzZXRUYXNrIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siQmlu
YXJ5RmlsZUFzc2V0VGFzayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbWFnZUFzc2V0VGFz
ayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzM3X19bIkltYWdlQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRleHR1
cmVBc3NldFRhc2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zN19fWyJUZXh0dXJlQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255
IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkN1YmVUZXh0dXJlQXNzZXRUYXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siQ3ViZVRleHR1cmVBc3NldFRhc2si
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSERSQ3ViZVRleHR1cmVBc3NldFRhc2siLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19f
WyJIRFJDdWJlVGV4dHVyZUFzc2V0VGFzayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFcXVp
UmVjdGFuZ3VsYXJDdWJlVGV4dHVyZUFzc2V0VGFzayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01p
c2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIkVxdWlSZWN0YW5ndWxhckN1
YmVUZXh0dXJlQXNzZXRUYXNrIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFzc2V0c01hbmFn
ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zN19fWyJBc3NldHNNYW5hZ2VyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkREU1Rv
b2xzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMzdfX1siRERTVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZXhwYW5kVG9Q
cm9wZXJ0eSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzM3X19bImV4cGFuZFRvUHJvcGVydHkiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAic2VyaWFsaXplIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMzdfX1sic2VyaWFsaXplIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
InNlcmlhbGl6ZUFzVGV4dHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bInNlcmlhbGl6ZUFzVGV4dHVyZSJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc0NvbG9yMyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bInNlcmlhbGl6ZUFzQ29s
b3IzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNlcmlhbGl6ZUFzRnJlc25lbFBhcmFtZXRl
cnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zN19fWyJzZXJpYWxpemVBc0ZyZXNuZWxQYXJhbWV0ZXJzIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgInNlcmlhbGl6ZUFzVmVjdG9yMiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2Nf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bInNlcmlhbGl6ZUFzVmVjdG9yMiJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc1ZlY3RvcjMiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJzZXJp
YWxpemVBc1ZlY3RvcjMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2VyaWFsaXplQXNNZXNo
UmVmZXJlbmNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMzdfX1sic2VyaWFsaXplQXNNZXNoUmVmZXJlbmNlIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgInNlcmlhbGl6ZUFzQ29sb3JDdXJ2ZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJzZXJpYWxpemVBc0Nv
bG9yQ3VydmVzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNlcmlhbGl6ZUFzQ29sb3I0Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MzdfX1sic2VyaWFsaXplQXNDb2xvcjQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2VyaWFs
aXplQXNJbWFnZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1sic2VyaWFsaXplQXNJbWFn
ZVByb2Nlc3NpbmdDb25maWd1cmF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChz
YWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNlcmlh
bGl6ZUFzUXVhdGVybmlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzM3X19bInNlcmlhbGl6ZUFzUXVhdGVybmlvbiJdOyB9KTsKKwor
LyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJzZXJpYWxpemVBc01hdHJpeCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
X01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bInNlcmlhbGl6ZUFzTWF0
cml4Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNlcmlhbGl6ZUFzQ2FtZXJhUmVmZXJlbmNl
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMzdfX1sic2VyaWFsaXplQXNDYW1lcmFSZWZlcmVuY2UiXTsgfSk7CisKKy8qIGhhcm1vbnkg
cmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiU2VyaWFsaXphdGlvbkhlbHBlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIlNlcmlhbGl6YXRpb25IZWxwZXIiXTsg
fSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVmZXJyZWQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9N
aXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJEZWZlcnJlZCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJFbnZpcm9ubWVudFRleHR1cmVUb29scyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIkVudmly
b25tZW50VGV4dHVyZVRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIk1lc2hFeHBsb2Rl
ciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzM3X19bIk1lc2hFeHBsb2RlciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGaWxlc0lu
cHV0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMzdfX1siRmlsZXNJbnB1dCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2Fm
ZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJDdWJlTWFw
VG9TcGhlcmljYWxQb2x5bm9taWFsVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2lu
ZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJDdWJlTWFwVG9TcGhlcmljYWxQb2x5
bm9taWFsVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiS2hyb25vc1RleHR1cmVDb250
YWluZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zN19fWyJLaHJvbm9zVGV4dHVyZUNvbnRhaW5lciJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJFdmVudFN0YXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siRXZlbnRTdGF0ZSJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJPYnNlcnZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzM3X19bIk9ic2VydmVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIk11bHRpT2JzZXJ2ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJNdWx0aU9ic2VydmVyIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIk9ic2VydmFibGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJPYnNlcnZhYmxlIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlBlcmZvcm1hbmNlTW9uaXRvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2Nf
aW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIlBlcmZvcm1hbmNlTW9uaXRvciJd
OyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJSb2xsaW5nQXZlcmFnZSIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIlJvbGxpbmdB
dmVyYWdlIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlByb21pc2VQb2x5ZmlsbCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19b
IlByb21pc2VQb2x5ZmlsbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTY2VuZU9wdGltaXph
dGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzM3X19bIlNjZW5lT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IlRleHR1cmVPcHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJUZXh0dXJlT3B0aW1pemF0aW9uIl07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkhhcmR3YXJlU2NhbGluZ09wdGltaXphdGlvbiIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIkhh
cmR3YXJlU2NhbGluZ09wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaGFk
b3dzT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMzdfX1siU2hhZG93c09wdGltaXphdGlvbiJdOyB9KTsKKworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJQb3N0UHJvY2Vzc2VzT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siUG9zdFByb2Nl
c3Nlc09wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMZW5zRmxhcmVzT3B0
aW1pemF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMzdfX1siTGVuc0ZsYXJlc09wdGltaXphdGlvbiJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJDdXN0b21PcHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNj
X2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJDdXN0b21PcHRpbWl6YXRpb24i
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGFydGljbGVzT3B0aW1pemF0aW9uIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1si
UGFydGljbGVzT3B0aW1pemF0aW9uIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlJlbmRlclRh
cmdldHNPcHRpbWl6YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJSZW5kZXJUYXJnZXRzT3B0aW1pemF0aW9uIl07IH0p
OworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQo
X193ZWJwYWNrX2V4cG9ydHNfXywgIk1lcmdlTWVzaGVzT3B0aW1pemF0aW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siTWVy
Z2VNZXNoZXNPcHRpbWl6YXRpb24iXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVPcHRp
bWl6ZXJPcHRpb25zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMzdfX1siU2NlbmVPcHRpbWl6ZXJPcHRpb25zIl07IH0pOworCisvKiBo
YXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgIlNjZW5lT3B0aW1pemVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19p
bmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siU2NlbmVPcHRpbWl6ZXIiXTsgfSk7
CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmVTZXJpYWxpemVyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siU2NlbmVTZXJpYWxp
emVyIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNtYXJ0QXJyYXkiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJTbWFydEFy
cmF5Il07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVx
dWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNtYXJ0QXJyYXlOb0R1cGxpY2F0ZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3
X19bIlNtYXJ0QXJyYXlOb0R1cGxpY2F0ZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdHJp
bmdEaWN0aW9uYXJ5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMzdfX1siU3RyaW5nRGljdGlvbmFyeSJdOyB9KTsKKworLyogaGFybW9u
eSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJUYWdzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMzdfX1siVGFncyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUZXh0
dXJlVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zN19fWyJUZXh0dXJlVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBv
cnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
VEdBVG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zN19fWyJUR0FUb29scyJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAo
c2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJUb29s
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzM3X19bIlRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNsYXNzTmFtZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3
X19bImNsYXNzTmFtZSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBc3luY0xvb3AiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19f
WyJBc3luY0xvb3AiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVmlkZW9SZWNvcmRlciIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3
X19bIlZpZGVvUmVjb3JkZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICov
IF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSm95c3RpY2tBeGlz
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMzdfX1siSm95c3RpY2tBeGlzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlZpcnR1YWxK
b3lzdGljayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzM3X19bIlZpcnR1YWxKb3lzdGljayJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJXb3JrZXJQb29sIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMzdfX1siV29ya2VyUG9vbCJdOyB9KTsKKworLyogaGFybW9ueSByZWV4
cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJMb2dnZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zN19fWyJMb2dnZXIiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiX1R5cGVT
dG9yZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzM3X19bIl9UeXBlU3RvcmUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNh
ZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRmlsZXNJ
bnB1dFN0b3JlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMzdfX1siRmlsZXNJbnB1dFN0b3JlIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIkRlZXBDb3BpZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zN19fWyJEZWVwQ29waWVyIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlBpdm90VG9vbHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zN19fWyJQaXZvdFRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJl
ZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgIlByZWNpc2lvbkRhdGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJQcmVjaXNpb25EYXRlIl07IH0pOworCisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIlNjcmVlbnNob3RUb29scyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIlNjcmVlbnNob3RUb29scyJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJXZWJSZXF1ZXN0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfTWlz
Y19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siV2ViUmVxdWVzdCJdOyB9KTsK
KworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJJbnNwZWN0YWJsZVR5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJJbnNwZWN0YWJsZVR5
cGUiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQlJERlRleHR1cmVUb29scyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIkJS
REZUZXh0dXJlVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUkdCRFRleHR1cmVUb29s
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzM3X19bIlJHQkRUZXh0dXJlVG9vbHMiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQg
KHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29s
b3JHcmFkaWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzM3X19bIkNvbG9yR3JhZGllbnQiXTsgfSk7CisKKy8qIGhhcm1vbnkgcmVl
eHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiQ29sb3IzR3JhZGllbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJDb2xvcjNHcmFkaWVudCJdOyB9KTsKKworLyogaGFy
bW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJGYWN0b3JHcmFkaWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX01pc2NfaW5k
ZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19bIkZhY3RvckdyYWRpZW50Il07IH0pOwor
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkdyYWRpZW50SGVscGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBf
TWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siR3JhZGllbnRIZWxwZXIi
XTsgfSk7CisKKy8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiUGVyZkNvdW50ZXIiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zN19fWyJQZXJmQ291bnRl
ciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJSZXRyeVN0cmF0ZWd5IiwgZnVuY3Rpb24oKSB7
IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1siUmV0cnlT
dHJhdGVneSJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJMb2FkRmlsZUVycm9yIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBfTWlzY19pbmRleF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfX1si
TG9hZEZpbGVFcnJvciJdOyB9KTsKKworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJIRFJUb29scyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gX01pc2NfaW5kZXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19b
IkhEUlRvb2xzIl07IH0pOworCisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlBhbm9yYW1hVG9DdWJlTWFwVG9v
bHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9NaXNjX2luZGV4X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zN19fWyJQYW5vcmFtYVRvQ3ViZU1hcFRvb2xzIl07IH0pOworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKy8qKiovIH0pLAorCisvKioqLyAiLi9ub2RlLnRzIjoKKy8qISoqKioqKioqKioq
KioqKioqISpcCisgICEqKiogLi9ub2RlLnRzICoqKiEKKyAgXCoqKioqKioqKioqKioqKioqLwor
LyohIGV4cG9ydHMgcHJvdmlkZWQ6IE5vZGUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3Qi
OworX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiTm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTm9kZTsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIHRzbGliICovICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIu
ZXM2LmpzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01h
dGhzL21hdGgudmVjdG9yICovICIuL01hdGhzL21hdGgudmVjdG9yLnRzIik7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9NaXNjL2RlY29yYXRvcnMgKi8gIi4vTWlz
Yy9kZWNvcmF0b3JzLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9NaXNjL29ic2VydmFibGUgKi8gIi4vTWlzYy9vYnNlcnZhYmxlLnRzIik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX0VuZ2luZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vRW5naW5lcy9lbmdpbmVTdG9y
ZSAqLyAiLi9FbmdpbmVzL2VuZ2luZVN0b3JlLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vTWlzYy9kZXZUb29scyAqLyAiLi9NaXNjL2RldlRvb2xzLnRzIik7
CisKKworCisKKworCisvKioKKyAqIE5vZGUgaXMgdGhlIGJhc2ljIGNsYXNzIGZvciBhbGwgc2Nl
bmUgb2JqZWN0cyAoTWVzaCwgTGlnaHQsIENhbWVyYS4pCisgKi8KK3ZhciBOb2RlID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgTm9k
ZQorICAgICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIGFuZCBpZCB0byBiZSBnaXZlbiB0byB0aGlz
IG5vZGUKKyAgICAgKiBAcGFyYW0gc2NlbmUgdGhlIHNjZW5lIHRoaXMgbm9kZSB3aWxsIGJlIGFk
ZGVkIHRvCisgICAgICogQHBhcmFtIGFkZFRvUm9vdE5vZGVzIHRoZSBub2RlIHdpbGwgYmUgYWRk
ZWQgdG8gc2NlbmUucm9vdE5vZGVzCisgICAgICovCisgICAgZnVuY3Rpb24gTm9kZShuYW1lLCBz
Y2VuZSwgYWRkVG9Sb290Tm9kZXMpIHsKKyAgICAgICAgaWYgKHNjZW5lID09PSB2b2lkIDApIHsg
c2NlbmUgPSBudWxsOyB9CisgICAgICAgIGlmIChhZGRUb1Jvb3ROb2RlcyA9PT0gdm9pZCAwKSB7
IGFkZFRvUm9vdE5vZGVzID0gdHJ1ZTsgfQorICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBv
ciBzZXRzIGEgc3RyaW5nIHVzZWQgdG8gc3RvcmUgdXNlciBkZWZpbmVkIHN0YXRlIGZvciB0aGUg
bm9kZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zdGF0ZSA9ICIiOworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBvciBzZXRzIGFuIG9iamVjdCB1c2VkIHRvIHN0b3JlIHVzZXIgZGVm
aW5lZCBpbmZvcm1hdGlvbiBmb3IgdGhlIG5vZGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
bWV0YWRhdGEgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogRm9yIGludGVybmFsIHVz
ZSBvbmx5LiBQbGVhc2UgZG8gbm90IHVzZS4KKyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVz
ZXJ2ZWREYXRhU3RvcmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBz
ZXRzIGEgYm9vbGVhbiB1c2VkIHRvIGRlZmluZSBpZiB0aGUgbm9kZSBtdXN0IGJlIHNlcmlhbGl6
ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZG9Ob3RTZXJpYWxpemUgPSBmYWxzZTsKKyAg
ICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5faXNEaXNwb3NlZCA9IGZhbHNlOwor
ICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhIGxpc3Qgb2YgQW5pbWF0aW9ucyBhc3NvY2lh
dGVkIHdpdGggdGhlIG5vZGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYW5pbWF0aW9ucyA9
IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLl9yYW5nZXMgPSB7fTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIENhbGxiYWNrIHJhaXNlZCB3aGVuIHRoZSBub2RlIGlzIHJlYWR5IHRvIGJlIHVz
ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMub25SZWFkeSA9IG51bGw7CisgICAgICAgIHRo
aXMuX2lzRW5hYmxlZCA9IHRydWU7CisgICAgICAgIHRoaXMuX2lzUGFyZW50RW5hYmxlZCA9IHRy
dWU7CisgICAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlOworICAgICAgICAvKiogQGhpZGRlbiAq
LworICAgICAgICB0aGlzLl9jdXJyZW50UmVuZGVySWQgPSAtMTsKKyAgICAgICAgdGhpcy5fcGFy
ZW50VXBkYXRlSWQgPSAtMTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5f
Y2hpbGRVcGRhdGVJZCA9IC0xOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlz
Ll93YWl0aW5nUGFyZW50SWQgPSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAg
ICB0aGlzLl9jYWNoZSA9IHt9OworICAgICAgICB0aGlzLl9wYXJlbnROb2RlID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5fY2hpbGRyZW4gPSBudWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAg
ICAgICB0aGlzLl93b3JsZE1hdHJpeCA9IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJNYXRyaXgiXS5JZGVudGl0eSgpOworICAgICAgICAvKiogQGhpZGRl
biAqLworICAgICAgICB0aGlzLl93b3JsZE1hdHJpeERldGVybWluYW50ID0gMDsKKyAgICAgICAg
LyoqIEBoaWRkZW4gKi8KKyAgICAgICAgdGhpcy5fd29ybGRNYXRyaXhEZXRlcm1pbmFudElzRGly
dHkgPSB0cnVlOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICB0aGlzLl9zY2VuZVJv
b3ROb2Rlc0luZGV4ID0gLTE7CisgICAgICAgIHRoaXMuX2FuaW1hdGlvblByb3BlcnRpZXNPdmVy
cmlkZSA9IG51bGw7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIHRoaXMuX2lzTm9k
ZSA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVu
IHRoZSBtZXNoIGlzIGRpc3Bvc2VkCisgICAgICAgICovCisgICAgICAgIHRoaXMub25EaXNwb3Nl
T2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICB0aGlzLl9vbkRpc3Bvc2VPYnNlcnZlciA9
IG51bGw7CisgICAgICAgIC8vIEJlaGF2aW9ycworICAgICAgICB0aGlzLl9iZWhhdmlvcnMgPSBu
ZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5pZCA9
IG5hbWU7CisgICAgICAgIHRoaXMuX3NjZW5lID0gKHNjZW5lIHx8IF9FbmdpbmVzX2VuZ2luZVN0
b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkVuZ2luZVN0b3JlIl0uTGFzdENyZWF0
ZWRTY2VuZSk7CisgICAgICAgIHRoaXMudW5pcXVlSWQgPSB0aGlzLl9zY2VuZS5nZXRVbmlxdWVJ
ZCgpOworICAgICAgICB0aGlzLl9pbml0Q2FjaGUoKTsKKyAgICAgICAgaWYgKGFkZFRvUm9vdE5v
ZGVzKSB7CisgICAgICAgICAgICB0aGlzLmFkZFRvU2NlbmVSb290Tm9kZXMoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGQgYSBuZXcgbm9kZSBjb25zdHJ1Y3RvcgorICAg
ICAqIEBwYXJhbSB0eXBlIGRlZmluZXMgdGhlIHR5cGUgbmFtZSBvZiB0aGUgbm9kZSB0byBjb25z
dHJ1Y3QKKyAgICAgKiBAcGFyYW0gY29uc3RydWN0b3JGdW5jIGRlZmluZXMgdGhlIGNvbnN0cnVj
dG9yIGZ1bmN0aW9uCisgICAgICovCisgICAgTm9kZS5BZGROb2RlQ29uc3RydWN0b3IgPSBmdW5j
dGlvbiAodHlwZSwgY29uc3RydWN0b3JGdW5jKSB7CisgICAgICAgIHRoaXMuX05vZGVDb25zdHJ1
Y3RvcnNbdHlwZV0gPSBjb25zdHJ1Y3RvckZ1bmM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIGEgbm9kZSBjb25zdHJ1Y3RvciBiYXNlZCBvbiB0eXBlIG5hbWUKKyAgICAgKiBAcGFy
YW0gdHlwZSBkZWZpbmVzIHRoZSB0eXBlIG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVz
IHRoZSBuZXcgbm9kZSBuYW1lCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rp
bmcgc2NlbmUKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyBkZWZpbmVzIG9wdGlvbmFsIG9wdGlvbnMg
dG8gdHJhbnNtaXQgdG8gY29uc3RydWN0b3JzCisgICAgICogQHJldHVybnMgdGhlIG5ldyBjb25z
dHJ1Y3RvciBvciBudWxsCisgICAgICovCisgICAgTm9kZS5Db25zdHJ1Y3QgPSBmdW5jdGlvbiAo
dHlwZSwgbmFtZSwgc2NlbmUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIGNvbnN0cnVjdG9yRnVu
YyA9IHRoaXMuX05vZGVDb25zdHJ1Y3RvcnNbdHlwZV07CisgICAgICAgIGlmICghY29uc3RydWN0
b3JGdW5jKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gY29uc3RydWN0b3JGdW5jKG5hbWUsIHNjZW5lLCBvcHRpb25zKTsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIG5vZGUgaGFzIGJl
ZW4gZGlzcG9zZWQKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBub2RlIHdhcyBkaXNwb3Nl
ZAorICAgICAqLworICAgIE5vZGUucHJvdG90eXBlLmlzRGlzcG9zZWQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLl9pc0Rpc3Bvc2VkOworICAgIH07CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCAicGFyZW50IiwgeworICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnROb2RlOworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBwYXJlbnQgb2Yg
dGhlIG5vZGUgKHdpdGhvdXQga2VlcGluZyB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc2Nl
bmUpCisgICAgICAgICAqIEBzZWUgaHR0cHM6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vcGFy
ZW50aW5nCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJlbnQpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnROb2RlID09PSBwYXJlbnQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcHJldmlvdXNQYXJl
bnROb2RlID0gdGhpcy5fcGFyZW50Tm9kZTsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBzZWxmIGZy
b20gbGlzdCBvZiBjaGlsZHJlbiBvZiBwYXJlbnQKKyAgICAgICAgICAgIGlmICh0aGlzLl9wYXJl
bnROb2RlICYmIHRoaXMuX3BhcmVudE5vZGUuX2NoaWxkcmVuICE9PSB1bmRlZmluZWQgJiYgdGhp
cy5fcGFyZW50Tm9kZS5fY2hpbGRyZW4gIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB2YXIg
aW5kZXggPSB0aGlzLl9wYXJlbnROb2RlLl9jaGlsZHJlbi5pbmRleE9mKHRoaXMpOworICAgICAg
ICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
cGFyZW50Tm9kZS5fY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQgJiYgIXRoaXMuX2lzRGlzcG9zZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5hZGRUb1NjZW5lUm9vdE5vZGVzKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gU3RvcmUgbmV3IHBhcmVudAor
ICAgICAgICAgICAgdGhpcy5fcGFyZW50Tm9kZSA9IHBhcmVudDsKKyAgICAgICAgICAgIC8vIEFk
ZCBhcyBjaGlsZCB0byBuZXcgcGFyZW50CisgICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50Tm9k
ZSkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnROb2RlLl9jaGlsZHJlbiA9PT0g
dW5kZWZpbmVkIHx8IHRoaXMuX3BhcmVudE5vZGUuX2NoaWxkcmVuID09PSBudWxsKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudE5vZGUuX2NoaWxkcmVuID0gbmV3IEFycmF5KCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudE5vZGUuX2No
aWxkcmVuLnB1c2godGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c1BhcmVudE5v
ZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tU2NlbmVSb290Tm9kZXMo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBFbmFi
bGVkIHN0YXRlCisgICAgICAgICAgICB0aGlzLl9zeW5jUGFyZW50RW5hYmxlZFN0YXRlKCk7Cisg
ICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZQorICAgIH0pOworICAgIE5vZGUucHJvdG90eXBlLmFkZFRvU2NlbmVSb290Tm9kZXMg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLl9zY2VuZVJvb3ROb2Rlc0luZGV4ID09
PSAtMSkgeworICAgICAgICAgICAgdGhpcy5fc2NlbmVSb290Tm9kZXNJbmRleCA9IHRoaXMuX3Nj
ZW5lLnJvb3ROb2Rlcy5sZW5ndGg7CisgICAgICAgICAgICB0aGlzLl9zY2VuZS5yb290Tm9kZXMu
cHVzaCh0aGlzKTsKKyAgICAgICAgfQorICAgIH07CisgICAgTm9kZS5wcm90b3R5cGUucmVtb3Zl
RnJvbVNjZW5lUm9vdE5vZGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fc2Nl
bmVSb290Tm9kZXNJbmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgIHZhciByb290Tm9kZXMgPSB0
aGlzLl9zY2VuZS5yb290Tm9kZXM7CisgICAgICAgICAgICB2YXIgbGFzdElkeCA9IHJvb3ROb2Rl
cy5sZW5ndGggLSAxOworICAgICAgICAgICAgcm9vdE5vZGVzW3RoaXMuX3NjZW5lUm9vdE5vZGVz
SW5kZXhdID0gcm9vdE5vZGVzW2xhc3RJZHhdOworICAgICAgICAgICAgcm9vdE5vZGVzW3RoaXMu
X3NjZW5lUm9vdE5vZGVzSW5kZXhdLl9zY2VuZVJvb3ROb2Rlc0luZGV4ID0gdGhpcy5fc2NlbmVS
b290Tm9kZXNJbmRleDsKKyAgICAgICAgICAgIHRoaXMuX3NjZW5lLnJvb3ROb2Rlcy5wb3AoKTsK
KyAgICAgICAgICAgIHRoaXMuX3NjZW5lUm9vdE5vZGVzSW5kZXggPSAtMTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCAiYW5pbWF0
aW9uUHJvcGVydGllc092ZXJyaWRlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBv
ciBzZXRzIHRoZSBhbmltYXRpb24gcHJvcGVydGllcyBvdmVycmlkZQorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2FuaW1hdGlv
blByb3BlcnRpZXNPdmVycmlkZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2Vu
ZS5hbmltYXRpb25Qcm9wZXJ0aWVzT3ZlcnJpZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fYW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlOworICAgICAgICB9LAor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fYW5pbWF0
aW9uUHJvcGVydGllc092ZXJyaWRlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8q
KgorICAgICAqIEdldHMgYSBzdHJpbmcgaWRlbmZpZnlpbmcgdGhlIG5hbWUgb2YgdGhlIGNsYXNz
CisgICAgICogQHJldHVybnMgIk5vZGUiIHN0cmluZworICAgICAqLworICAgIE5vZGUucHJvdG90
eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJOb2RlIjsK
KyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgIm9uRGlz
cG9zZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgYSBjYWxsYmFjayB0aGF0IHdp
bGwgYmUgcmFpc2VkIHdoZW4gdGhlIG5vZGUgd2lsbCBiZSBkaXNwb3NlZAorICAgICAgICAgKi8K
KyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9vbkRpc3Bvc2VPYnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMub25EaXNwb3NlT2Jz
ZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5fb25EaXNwb3NlT2JzZXJ2ZXIgPSB0aGlzLm9uRGlzcG9zZU9ic2Vy
dmFibGUuYWRkKGNhbGxiYWNrKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICog
R2V0cyB0aGUgc2NlbmUgb2YgdGhlIG5vZGUKKyAgICAgKiBAcmV0dXJucyBhIHNjZW5lCisgICAg
ICovCisgICAgTm9kZS5wcm90b3R5cGUuZ2V0U2NlbmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLl9zY2VuZTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGVu
Z2luZSBvZiB0aGUgbm9kZQorICAgICAqIEByZXR1cm5zIGEgRW5naW5lCisgICAgICovCisgICAg
Tm9kZS5wcm90b3R5cGUuZ2V0RW5naW5lID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5fc2NlbmUuZ2V0RW5naW5lKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBdHRhY2gg
YSBiZWhhdmlvciB0byB0aGUgbm9kZQorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2ZlYXR1cmVzL2JlaGF2aW91cgorICAgICAqIEBwYXJhbSBiZWhhdmlvciBkZWZpbmVzIHRo
ZSBiZWhhdmlvciB0byBhdHRhY2gKKyAgICAgKiBAcGFyYW0gYXR0YWNoSW1tZWRpYXRlbHkgZGVm
aW5lcyB0aGF0IHRoZSBiZWhhdmlvciBtdXN0IGJlIGF0dGFjaGVkIGV2ZW4gaWYgdGhlIHNjZW5l
IGlzIHN0aWxsIGxvYWRpbmcKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBOb2RlCisgICAg
ICovCisgICAgTm9kZS5wcm90b3R5cGUuYWRkQmVoYXZpb3IgPSBmdW5jdGlvbiAoYmVoYXZpb3Is
IGF0dGFjaEltbWVkaWF0ZWx5KSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAg
IGlmIChhdHRhY2hJbW1lZGlhdGVseSA9PT0gdm9pZCAwKSB7IGF0dGFjaEltbWVkaWF0ZWx5ID0g
ZmFsc2U7IH0KKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fYmVoYXZpb3JzLmluZGV4T2YoYmVo
YXZpb3IpOworICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgfQorICAgICAgICBiZWhhdmlvci5pbml0KCk7CisgICAgICAgIGlmICh0
aGlzLl9zY2VuZS5pc0xvYWRpbmcgJiYgIWF0dGFjaEltbWVkaWF0ZWx5KSB7CisgICAgICAgICAg
ICAvLyBXZSBkZWZlciB0aGUgYXR0YWNoIHdoZW4gdGhlIHNjZW5lIHdpbGwgYmUgbG9hZGVkCisg
ICAgICAgICAgICB0aGlzLl9zY2VuZS5vbkRhdGFMb2FkZWRPYnNlcnZhYmxlLmFkZE9uY2UoZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGJlaGF2aW9yLmF0dGFjaChfdGhpcyk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGJlaGF2
aW9yLmF0dGFjaCh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9iZWhhdmlvcnMucHVz
aChiZWhhdmlvcik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmVtb3ZlIGFuIGF0dGFjaGVkIGJlaGF2aW9yCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vZmVhdHVyZXMvYmVoYXZpb3VyCisgICAgICogQHBhcmFtIGJlaGF2aW9yIGRl
ZmluZXMgdGhlIGJlaGF2aW9yIHRvIGF0dGFjaAorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50
IE5vZGUKKyAgICAgKi8KKyAgICBOb2RlLnByb3RvdHlwZS5yZW1vdmVCZWhhdmlvciA9IGZ1bmN0
aW9uIChiZWhhdmlvcikgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9iZWhhdmlvcnMuaW5k
ZXhPZihiZWhhdmlvcik7CisgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2JlaGF2aW9yc1tpbmRleF0u
ZGV0YWNoKCk7CisgICAgICAgIHRoaXMuX2JlaGF2aW9ycy5zcGxpY2UoaW5kZXgsIDEpOworICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2Rl
LnByb3RvdHlwZSwgImJlaGF2aW9ycyIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
dGhlIGxpc3Qgb2YgYXR0YWNoZWQgYmVoYXZpb3JzCisgICAgICAgICAqIEBzZWUgaHR0cDovL2Rv
Yy5iYWJ5bG9uanMuY29tL2ZlYXR1cmVzL2JlaGF2aW91cgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVoYXZpb3JzOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGFuIGF0dGFjaGVkIGJlaGF2
aW9yIGJ5IG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBi
ZWhhdmlvciB0byBsb29rIGZvcgorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2ZlYXR1cmVzL2JlaGF2aW91cgorICAgICAqIEByZXR1cm5zIG51bGwgaWYgYmVoYXZpb3Igd2Fz
IG5vdCBmb3VuZCBlbHNlIHRoZSByZXF1ZXN0ZWQgYmVoYXZpb3IKKyAgICAgKi8KKyAgICBOb2Rl
LnByb3RvdHlwZS5nZXRCZWhhdmlvckJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAg
IGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9iZWhhdmlvcnM7IF9pIDwgX2EubGVuZ3RoOyBf
aSsrKSB7CisgICAgICAgICAgICB2YXIgYmVoYXZpb3IgPSBfYVtfaV07CisgICAgICAgICAgICBp
ZiAoYmVoYXZpb3IubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBiZWhh
dmlvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGxhdGVzdCB1cGRhdGUgb2YgdGhlIFdv
cmxkIG1hdHJpeAorICAgICAqIEByZXR1cm5zIGEgTWF0cml4CisgICAgICovCisgICAgTm9kZS5w
cm90b3R5cGUuZ2V0V29ybGRNYXRyaXggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
Ll9jdXJyZW50UmVuZGVySWQgIT09IHRoaXMuX3NjZW5lLmdldFJlbmRlcklkKCkpIHsKKyAgICAg
ICAgICAgIHRoaXMuY29tcHV0ZVdvcmxkTWF0cml4KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMuX3dvcmxkTWF0cml4OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBO
b2RlLnByb3RvdHlwZS5fZ2V0V29ybGRNYXRyaXhEZXRlcm1pbmFudCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMuX3dvcmxkTWF0cml4RGV0ZXJtaW5hbnRJc0RpcnR5KSB7CisgICAg
ICAgICAgICB0aGlzLl93b3JsZE1hdHJpeERldGVybWluYW50SXNEaXJ0eSA9IGZhbHNlOworICAg
ICAgICAgICAgdGhpcy5fd29ybGRNYXRyaXhEZXRlcm1pbmFudCA9IHRoaXMuX3dvcmxkTWF0cml4
LmRldGVybWluYW50KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3dvcmxkTWF0
cml4RGV0ZXJtaW5hbnQ7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5w
cm90b3R5cGUsICJ3b3JsZE1hdHJpeEZyb21DYWNoZSIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFJldHVybnMgZGlyZWN0bHkgdGhlIGxhdGVzdCBzdGF0ZSBvZiB0aGUgbWVzaCBXb3JsZCBt
YXRyaXguCisgICAgICAgICAqIEEgTWF0cml4IGlzIHJldHVybmVkLgorICAgICAgICAgKi8KKyAg
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fd29ybGRN
YXRyaXg7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIC8vIG92ZXJyaWRlIGl0IGluIGRlcml2ZWQg
Y2xhc3MgaWYgeW91IGFkZCBuZXcgdmFyaWFibGVzIHRvIHRoZSBjYWNoZQorICAgIC8vIGFuZCBj
YWxsIHRoZSBwYXJlbnQgY2xhc3MgbWV0aG9kCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOb2Rl
LnByb3RvdHlwZS5faW5pdENhY2hlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLl9jYWNo
ZSA9IHt9OworICAgICAgICB0aGlzLl9jYWNoZS5wYXJlbnQgPSB1bmRlZmluZWQ7CisgICAgfTsK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGUucHJvdG90eXBlLnVwZGF0ZUNhY2hlID0gZnVu
Y3Rpb24gKGZvcmNlKSB7CisgICAgICAgIGlmICghZm9yY2UgJiYgdGhpcy5pc1N5bmNocm9uaXpl
ZCgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2Fj
aGUucGFyZW50ID0gdGhpcy5wYXJlbnQ7CisgICAgICAgIHRoaXMuX3VwZGF0ZUNhY2hlKCk7Cisg
ICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGUucHJvdG90eXBlLl9nZXRBY3Rpb25N
YW5hZ2VyRm9yVHJpZ2dlciA9IGZ1bmN0aW9uICh0cmlnZ2VyLCBpbml0aWFsQ2FsbCkgeworICAg
ICAgICBpZiAoaW5pdGlhbENhbGwgPT09IHZvaWQgMCkgeyBpbml0aWFsQ2FsbCA9IHRydWU7IH0K
KyAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Ll9nZXRBY3Rpb25NYW5hZ2VyRm9y
VHJpZ2dlcih0cmlnZ2VyLCBmYWxzZSk7CisgICAgfTsKKyAgICAvLyBvdmVycmlkZSBpdCBpbiBk
ZXJpdmVkIGNsYXNzIGlmIHlvdSBhZGQgbmV3IHZhcmlhYmxlcyB0byB0aGUgY2FjaGUKKyAgICAv
LyBhbmQgY2FsbCB0aGUgcGFyZW50IGNsYXNzIG1ldGhvZCBpZiAhaWdub3JlUGFyZW50Q2xhc3MK
KyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGUucHJvdG90eXBlLl91cGRhdGVDYWNoZSA9IGZ1
bmN0aW9uIChpZ25vcmVQYXJlbnRDbGFzcykgeworICAgIH07CisgICAgLy8gb3ZlcnJpZGUgaXQg
aW4gZGVyaXZlZCBjbGFzcyBpZiB5b3UgYWRkIG5ldyB2YXJpYWJsZXMgdG8gdGhlIGNhY2hlCisg
ICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOb2RlLnByb3RvdHlwZS5faXNTeW5jaHJvbml6ZWQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgLyoqIEBoaWRk
ZW4gKi8KKyAgICBOb2RlLnByb3RvdHlwZS5fbWFya1N5bmNlZFdpdGhQYXJlbnQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7CisgICAgICAgICAgICB0aGlz
Ll9wYXJlbnRVcGRhdGVJZCA9IHRoaXMuX3BhcmVudE5vZGUuX2NoaWxkVXBkYXRlSWQ7CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgTm9kZS5wcm90b3R5cGUuaXNT
eW5jaHJvbml6ZWRXaXRoUGFyZW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIXRoaXMu
X3BhcmVudE5vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGlmICh0aGlzLl9wYXJlbnRVcGRhdGVJZCAhPT0gdGhpcy5fcGFyZW50Tm9kZS5fY2hpbGRV
cGRhdGVJZCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0aGlzLl9wYXJlbnROb2RlLmlzU3luY2hyb25pemVkKCk7CisgICAgfTsKKyAgICAv
KiogQGhpZGRlbiAqLworICAgIE5vZGUucHJvdG90eXBlLmlzU3luY2hyb25pemVkID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBpZiAodGhpcy5fY2FjaGUucGFyZW50ICE9IHRoaXMuX3BhcmVudE5v
ZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2NhY2hlLnBhcmVudCA9IHRoaXMuX3BhcmVudE5vZGU7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMu
X3BhcmVudE5vZGUgJiYgIXRoaXMuaXNTeW5jaHJvbml6ZWRXaXRoUGFyZW50KCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5faXNT
eW5jaHJvbml6ZWQoKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIElzIHRoaXMgbm9kZSByZWFk
eSB0byBiZSB1c2VkL3JlbmRlcmVkCisgICAgICogQHBhcmFtIGNvbXBsZXRlQ2hlY2sgZGVmaW5l
cyBpZiBhIGNvbXBsZXRlIGNoZWNrIChpbmNsdWRpbmcgbWF0ZXJpYWxzIGFuZCBsaWdodHMpIGhh
cyB0byBiZSBkb25lIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0
aGUgbm9kZSBpcyByZWFkeQorICAgICAqLworICAgIE5vZGUucHJvdG90eXBlLmlzUmVhZHkgPSBm
dW5jdGlvbiAoY29tcGxldGVDaGVjaykgeworICAgICAgICBpZiAoY29tcGxldGVDaGVjayA9PT0g
dm9pZCAwKSB7IGNvbXBsZXRlQ2hlY2sgPSBmYWxzZTsgfQorICAgICAgICByZXR1cm4gdGhpcy5f
aXNSZWFkeTsKKyAgICB9OworICAgIC8qKgorICAgICAqIElzIHRoaXMgbm9kZSBlbmFibGVkPwor
ICAgICAqIElmIHRoZSBub2RlIGhhcyBhIHBhcmVudCwgYWxsIGFuY2VzdG9ycyB3aWxsIGJlIGNo
ZWNrZWQgYW5kIGZhbHNlIHdpbGwgYmUgcmV0dXJuZWQgaWYgYW55IGFyZSBmYWxzZSAobm90IGVu
YWJsZWQpLCBvdGhlcndpc2Ugd2lsbCByZXR1cm4gdHJ1ZQorICAgICAqIEBwYXJhbSBjaGVja0Fu
Y2VzdG9ycyBpbmRpY2F0ZXMgaWYgdGhpcyBtZXRob2Qgc2hvdWxkIGNoZWNrIHRoZSBhbmNlc3Rv
cnMuIFRoZSBkZWZhdWx0IGlzIHRvIGNoZWNrIHRoZSBhbmNlc3RvcnMuIElmIHNldCB0byBmYWxz
ZSwgdGhlIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBub2RlIHdpdGhvdXQg
Y2hlY2tpbmcgYW5jZXN0b3JzCisgICAgICogQHJldHVybiB3aGV0aGVyIHRoaXMgbm9kZSAoYW5k
IGl0cyBwYXJlbnQpIGlzIGVuYWJsZWQKKyAgICAgKi8KKyAgICBOb2RlLnByb3RvdHlwZS5pc0Vu
YWJsZWQgPSBmdW5jdGlvbiAoY2hlY2tBbmNlc3RvcnMpIHsKKyAgICAgICAgaWYgKGNoZWNrQW5j
ZXN0b3JzID09PSB2b2lkIDApIHsgY2hlY2tBbmNlc3RvcnMgPSB0cnVlOyB9CisgICAgICAgIGlm
IChjaGVja0FuY2VzdG9ycyA9PT0gZmFsc2UpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9p
c0VuYWJsZWQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5f
aXNQYXJlbnRFbmFibGVkOworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBOb2RlLnBy
b3RvdHlwZS5fc3luY1BhcmVudEVuYWJsZWRTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dGhpcy5faXNQYXJlbnRFbmFibGVkID0gdGhpcy5fcGFyZW50Tm9kZSA/IHRoaXMuX3BhcmVudE5v
ZGUuaXNFbmFibGVkKCkgOiB0cnVlOworICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW4pIHsKKyAg
ICAgICAgICAgIHRoaXMuX2NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKKyAgICAgICAg
ICAgICAgICBjLl9zeW5jUGFyZW50RW5hYmxlZFN0YXRlKCk7IC8vIEZvcmNlIGNoaWxkcmVuIHRv
IHVwZGF0ZSBhY2NvcmRpbmdseQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFNldCB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGlzIG5vZGUKKyAgICAg
KiBAcGFyYW0gdmFsdWUgZGVmaW5lcyB0aGUgbmV3IGVuYWJsZWQgc3RhdGUKKyAgICAgKi8KKyAg
ICBOb2RlLnByb3RvdHlwZS5zZXRFbmFibGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
IHRoaXMuX2lzRW5hYmxlZCA9IHZhbHVlOworICAgICAgICB0aGlzLl9zeW5jUGFyZW50RW5hYmxl
ZFN0YXRlKCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBJcyB0aGlzIG5vZGUgYSBkZXNjZW5k
YW50IG9mIHRoZSBnaXZlbiBub2RlPworICAgICAqIFRoZSBmdW5jdGlvbiB3aWxsIGl0ZXJhdGUg
dXAgdGhlIGhpZXJhcmNoeSB1bnRpbCB0aGUgYW5jZXN0b3Igd2FzIGZvdW5kIG9yIG5vIG1vcmUg
cGFyZW50cyBkZWZpbmVkCisgICAgICogQHBhcmFtIGFuY2VzdG9yIGRlZmluZXMgdGhlIHBhcmVu
dCBub2RlIHRvIGluc3BlY3QKKyAgICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBp
ZiB0aGlzIG5vZGUgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBnaXZlbiBub2RlCisgICAgICovCisg
ICAgTm9kZS5wcm90b3R5cGUuaXNEZXNjZW5kYW50T2YgPSBmdW5jdGlvbiAoYW5jZXN0b3IpIHsK
KyAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7CisgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQg
PT09IGFuY2VzdG9yKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuaXNEZXNjZW5kYW50T2YoYW5jZXN0
b3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIC8qKiBA
aGlkZGVuICovCisgICAgTm9kZS5wcm90b3R5cGUuX2dldERlc2NlbmRhbnRzID0gZnVuY3Rpb24g
KHJlc3VsdHMsIGRpcmVjdERlc2NlbmRhbnRzT25seSwgcHJlZGljYXRlKSB7CisgICAgICAgIGlm
IChkaXJlY3REZXNjZW5kYW50c09ubHkgPT09IHZvaWQgMCkgeyBkaXJlY3REZXNjZW5kYW50c09u
bHkgPSBmYWxzZTsgfQorICAgICAgICBpZiAoIXRoaXMuX2NoaWxkcmVuKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IHRoaXMuX2NoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGl0ZW0g
PSB0aGlzLl9jaGlsZHJlbltpbmRleF07CisgICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSB8fCBw
cmVkaWNhdGUoaXRlbSkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlbSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWRpcmVjdERlc2NlbmRhbnRzT25seSkgewor
ICAgICAgICAgICAgICAgIGl0ZW0uX2dldERlc2NlbmRhbnRzKHJlc3VsdHMsIGZhbHNlLCBwcmVk
aWNhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAg
KiBXaWxsIHJldHVybiBhbGwgbm9kZXMgdGhhdCBoYXZlIHRoaXMgbm9kZSBhcyBhc2NlbmRhbnQK
KyAgICAgKiBAcGFyYW0gZGlyZWN0RGVzY2VuZGFudHNPbmx5IGRlZmluZXMgaWYgdHJ1ZSBvbmx5
IGRpcmVjdCBkZXNjZW5kYW50cyBvZiAndGhpcycgd2lsbCBiZSBjb25zaWRlcmVkLCBpZiBmYWxz
ZSBkaXJlY3QgYW5kIGFsc28gaW5kaXJlY3QgKGNoaWxkcmVuIG9mIGNoaWxkcmVuLCBhbiBzbyBv
biBpbiBhIHJlY3Vyc2l2ZSBtYW5uZXIpIGRlc2NlbmRhbnRzIG9mICd0aGlzJyB3aWxsIGJlIGNv
bnNpZGVyZWQKKyAgICAgKiBAcGFyYW0gcHJlZGljYXRlIGRlZmluZXMgYW4gb3B0aW9uYWwgcHJl
ZGljYXRlIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgZXZhbHVhdGVkIGNoaWxkLCB0aGUg
cHJlZGljYXRlIG11c3QgcmV0dXJuIHRydWUgZm9yIGEgZ2l2ZW4gY2hpbGQgdG8gYmUgcGFydCBv
ZiB0aGUgcmVzdWx0LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBpZ25vcmVkCisgICAgICogQHJldHVy
biBhbGwgY2hpbGRyZW4gbm9kZXMgb2YgYWxsIHR5cGVzCisgICAgICovCisgICAgTm9kZS5wcm90
b3R5cGUuZ2V0RGVzY2VuZGFudHMgPSBmdW5jdGlvbiAoZGlyZWN0RGVzY2VuZGFudHNPbmx5LCBw
cmVkaWNhdGUpIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAg
dGhpcy5fZ2V0RGVzY2VuZGFudHMocmVzdWx0cywgZGlyZWN0RGVzY2VuZGFudHNPbmx5LCBwcmVk
aWNhdGUpOworICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEdldCBhbGwgY2hpbGQtbWVzaGVzIG9mIHRoaXMgbm9kZQorICAgICAqIEBwYXJhbSBkaXJlY3RE
ZXNjZW5kYW50c09ubHkgZGVmaW5lcyBpZiB0cnVlIG9ubHkgZGlyZWN0IGRlc2NlbmRhbnRzIG9m
ICd0aGlzJyB3aWxsIGJlIGNvbnNpZGVyZWQsIGlmIGZhbHNlIGRpcmVjdCBhbmQgYWxzbyBpbmRp
cmVjdCAoY2hpbGRyZW4gb2YgY2hpbGRyZW4sIGFuIHNvIG9uIGluIGEgcmVjdXJzaXZlIG1hbm5l
cikgZGVzY2VuZGFudHMgb2YgJ3RoaXMnIHdpbGwgYmUgY29uc2lkZXJlZCAoRGVmYXVsdDogZmFs
c2UpCisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBkZWZpbmVzIGFuIG9wdGlvbmFsIHByZWRpY2F0
ZSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGV2ZXJ5IGV2YWx1YXRlZCBjaGlsZCwgdGhlIHByZWRp
Y2F0ZSBtdXN0IHJldHVybiB0cnVlIGZvciBhIGdpdmVuIGNoaWxkIHRvIGJlIHBhcnQgb2YgdGhl
IHJlc3VsdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgaWdub3JlZAorICAgICAqIEByZXR1cm5zIGFu
IGFycmF5IG9mIEFic3RyYWN0TWVzaAorICAgICAqLworICAgIE5vZGUucHJvdG90eXBlLmdldENo
aWxkTWVzaGVzID0gZnVuY3Rpb24gKGRpcmVjdERlc2NlbmRhbnRzT25seSwgcHJlZGljYXRlKSB7
CisgICAgICAgIHZhciByZXN1bHRzID0gW107CisgICAgICAgIHRoaXMuX2dldERlc2NlbmRhbnRz
KHJlc3VsdHMsIGRpcmVjdERlc2NlbmRhbnRzT25seSwgZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAg
ICAgICAgIHJldHVybiAoKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKG5vZGUpKSAmJiAobm9kZS5j
dWxsaW5nU3RyYXRlZ3kgIT09IHVuZGVmaW5lZCkpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdHM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQgYWxsIGRpcmVjdCBjaGls
ZHJlbiBvZiB0aGlzIG5vZGUKKyAgICAgKiBAcGFyYW0gcHJlZGljYXRlIGRlZmluZXMgYW4gb3B0
aW9uYWwgcHJlZGljYXRlIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgZXZhbHVhdGVkIGNo
aWxkLCB0aGUgcHJlZGljYXRlIG11c3QgcmV0dXJuIHRydWUgZm9yIGEgZ2l2ZW4gY2hpbGQgdG8g
YmUgcGFydCBvZiB0aGUgcmVzdWx0LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBpZ25vcmVkCisgICAg
ICogQHBhcmFtIGRpcmVjdERlc2NlbmRhbnRzT25seSBkZWZpbmVzIGlmIHRydWUgb25seSBkaXJl
Y3QgZGVzY2VuZGFudHMgb2YgJ3RoaXMnIHdpbGwgYmUgY29uc2lkZXJlZCwgaWYgZmFsc2UgZGly
ZWN0IGFuZCBhbHNvIGluZGlyZWN0IChjaGlsZHJlbiBvZiBjaGlsZHJlbiwgYW4gc28gb24gaW4g
YSByZWN1cnNpdmUgbWFubmVyKSBkZXNjZW5kYW50cyBvZiAndGhpcycgd2lsbCBiZSBjb25zaWRl
cmVkIChEZWZhdWx0OiB0cnVlKQorICAgICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIE5vZGUKKyAg
ICAgKi8KKyAgICBOb2RlLnByb3RvdHlwZS5nZXRDaGlsZHJlbiA9IGZ1bmN0aW9uIChwcmVkaWNh
dGUsIGRpcmVjdERlc2NlbmRhbnRzT25seSkgeworICAgICAgICBpZiAoZGlyZWN0RGVzY2VuZGFu
dHNPbmx5ID09PSB2b2lkIDApIHsgZGlyZWN0RGVzY2VuZGFudHNPbmx5ID0gdHJ1ZTsgfQorICAg
ICAgICByZXR1cm4gdGhpcy5nZXREZXNjZW5kYW50cyhkaXJlY3REZXNjZW5kYW50c09ubHksIHBy
ZWRpY2F0ZSk7CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAgIE5vZGUucHJvdG90eXBl
Ll9zZXRSZWFkeSA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICBpZiAoc3RhdGUgPT09IHRo
aXMuX2lzUmVhZHkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXN0YXRlKSB7CisgICAgICAgICAgICB0aGlzLl9pc1JlYWR5ID0gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMub25SZWFkeSkgeworICAg
ICAgICAgICAgdGhpcy5vblJlYWR5KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2lz
UmVhZHkgPSB0cnVlOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGFuIGFuaW1hdGlvbiBi
eSBuYW1lCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0
aW9uIHRvIGxvb2sgZm9yCisgICAgICogQHJldHVybnMgbnVsbCBpZiBub3QgZm91bmQgZWxzZSB0
aGUgcmVxdWVzdGVkIGFuaW1hdGlvbgorICAgICAqLworICAgIE5vZGUucHJvdG90eXBlLmdldEFu
aW1hdGlvbkJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5hbmltYXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYW5p
bWF0aW9uID0gdGhpcy5hbmltYXRpb25zW2ldOworICAgICAgICAgICAgaWYgKGFuaW1hdGlvbi5u
YW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGlvbjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8q
KgorICAgICAqIENyZWF0ZXMgYW4gYW5pbWF0aW9uIHJhbmdlIGZvciB0aGlzIG5vZGUKKyAgICAg
KiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSByYW5nZQorICAgICAqIEBwYXJh
bSBmcm9tIGRlZmluZXMgdGhlIHN0YXJ0aW5nIGtleQorICAgICAqIEBwYXJhbSB0byBkZWZpbmVz
IHRoZSBlbmQga2V5CisgICAgICovCisgICAgTm9kZS5wcm90b3R5cGUuY3JlYXRlQW5pbWF0aW9u
UmFuZ2UgPSBmdW5jdGlvbiAobmFtZSwgZnJvbSwgdG8pIHsKKyAgICAgICAgLy8gY2hlY2sgbmFt
ZSBub3QgYWxyZWFkeSBpbiB1c2UKKyAgICAgICAgaWYgKCF0aGlzLl9yYW5nZXNbbmFtZV0pIHsK
KyAgICAgICAgICAgIHRoaXMuX3Jhbmdlc1tuYW1lXSA9IE5vZGUuX0FuaW1hdGlvblJhbmdlRmFj
dG9yeShuYW1lLCBmcm9tLCB0byk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbkFuaW1h
dGlvbnMgPSB0aGlzLmFuaW1hdGlvbnMubGVuZ3RoOyBpIDwgbkFuaW1hdGlvbnM7IGkrKykgewor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbnNbaV0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5hbmltYXRpb25zW2ldLmNyZWF0ZVJhbmdlKG5hbWUsIGZyb20sIHRvKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8q
KgorICAgICAqIERlbGV0ZSBhIHNwZWNpZmljIGFuaW1hdGlvbiByYW5nZQorICAgICAqIEBwYXJh
bSBuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHJhbmdlIHRvIGRlbGV0ZQorICAgICAqIEBw
YXJhbSBkZWxldGVGcmFtZXMgZGVmaW5lcyBpZiBhbmltYXRpb24gZnJhbWVzIGZyb20gdGhlIHJh
bmdlIG11c3QgYmUgZGVsZXRlZCBhcyB3ZWxsCisgICAgICovCisgICAgTm9kZS5wcm90b3R5cGUu
ZGVsZXRlQW5pbWF0aW9uUmFuZ2UgPSBmdW5jdGlvbiAobmFtZSwgZGVsZXRlRnJhbWVzKSB7Cisg
ICAgICAgIGlmIChkZWxldGVGcmFtZXMgPT09IHZvaWQgMCkgeyBkZWxldGVGcmFtZXMgPSB0cnVl
OyB9CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBuQW5pbWF0aW9ucyA9IHRoaXMuYW5pbWF0aW9u
cy5sZW5ndGg7IGkgPCBuQW5pbWF0aW9uczsgaSsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5h
bmltYXRpb25zW2ldKSB7CisgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb25zW2ldLmRlbGV0
ZVJhbmdlKG5hbWUsIGRlbGV0ZUZyYW1lcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fcmFuZ2VzW25hbWVdID0gbnVsbDsgLy8gc2FpZCBtdWNoIGZhc3RlciB0aGFu
ICdkZWxldGUgdGhpcy5fcmFuZ2VbbmFtZV0nCisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXQg
YW4gYW5pbWF0aW9uIHJhbmdlIGJ5IG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRo
ZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gcmFuZ2UgdG8gbG9vayBmb3IKKyAgICAgKiBAcmV0dXJu
cyBudWxsIGlmIG5vdCBmb3VuZCBlbHNlIHRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIHJhbmdlCisg
ICAgICovCisgICAgTm9kZS5wcm90b3R5cGUuZ2V0QW5pbWF0aW9uUmFuZ2UgPSBmdW5jdGlvbiAo
bmFtZSkgeworICAgICAgICByZXR1cm4gdGhpcy5fcmFuZ2VzW25hbWVdOworICAgIH07CisgICAg
LyoqCisgICAgICogR2V0cyB0aGUgbGlzdCBvZiBhbGwgYW5pbWF0aW9uIHJhbmdlcyBkZWZpbmVk
IG9uIHRoaXMgbm9kZQorICAgICAqIEByZXR1cm5zIGFuIGFycmF5CisgICAgICovCisgICAgTm9k
ZS5wcm90b3R5cGUuZ2V0QW5pbWF0aW9uUmFuZ2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2
YXIgYW5pbWF0aW9uUmFuZ2VzID0gW107CisgICAgICAgIHZhciBuYW1lOworICAgICAgICBmb3Ig
KG5hbWUgaW4gdGhpcy5fcmFuZ2VzKSB7CisgICAgICAgICAgICBhbmltYXRpb25SYW5nZXMucHVz
aCh0aGlzLl9yYW5nZXNbbmFtZV0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhbmltYXRp
b25SYW5nZXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBXaWxsIHN0YXJ0IHRoZSBhbmltYXRp
b24gc2VxdWVuY2UKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSByYW5nZSBmcmFtZXMg
Zm9yIGFuaW1hdGlvbiBzZXF1ZW5jZQorICAgICAqIEBwYXJhbSBsb29wIGRlZmluZXMgaWYgdGhl
IGFuaW1hdGlvbiBzaG91bGQgbG9vcCAoZmFsc2UgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0g
c3BlZWRSYXRpbyBkZWZpbmVzIHRoZSBzcGVlZCBmYWN0b3IgaW4gd2hpY2ggdG8gcnVuIHRoZSBh
bmltYXRpb24gKDEgYnkgZGVmYXVsdCkKKyAgICAgKiBAcGFyYW0gb25BbmltYXRpb25FbmQgZGVm
aW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRlZCAo
dW5kZWZpbmVkIGJ5IGRlZmF1bHQpCisgICAgICogQHJldHVybnMgdGhlIG9iamVjdCBjcmVhdGVk
IGZvciB0aGlzIGFuaW1hdGlvbi4gSWYgcmFuZ2UgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgcmV0
dXJuIG51bGwKKyAgICAgKi8KKyAgICBOb2RlLnByb3RvdHlwZS5iZWdpbkFuaW1hdGlvbiA9IGZ1
bmN0aW9uIChuYW1lLCBsb29wLCBzcGVlZFJhdGlvLCBvbkFuaW1hdGlvbkVuZCkgeworICAgICAg
ICB2YXIgcmFuZ2UgPSB0aGlzLmdldEFuaW1hdGlvblJhbmdlKG5hbWUpOworICAgICAgICBpZiAo
IXJhbmdlKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdGhpcy5fc2NlbmUuYmVnaW5BbmltYXRpb24odGhpcywgcmFuZ2UuZnJvbSwgcmFuZ2Uu
dG8sIGxvb3AsIHNwZWVkUmF0aW8sIG9uQW5pbWF0aW9uRW5kKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIFNlcmlhbGl6ZSBhbmltYXRpb24gcmFuZ2VzIGludG8gYSBKU09OIGNvbXBhdGlibGUg
b2JqZWN0CisgICAgICogQHJldHVybnMgc2VyaWFsaXphdGlvbiBvYmplY3QKKyAgICAgKi8KKyAg
ICBOb2RlLnByb3RvdHlwZS5zZXJpYWxpemVBbmltYXRpb25SYW5nZXMgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBzZXJpYWxpemF0aW9uUmFuZ2VzID0gW107CisgICAgICAgIGZvciAodmFy
IG5hbWUgaW4gdGhpcy5fcmFuZ2VzKSB7CisgICAgICAgICAgICB2YXIgbG9jYWxSYW5nZSA9IHRo
aXMuX3Jhbmdlc1tuYW1lXTsKKyAgICAgICAgICAgIGlmICghbG9jYWxSYW5nZSkgeworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJhbmdl
ID0ge307CisgICAgICAgICAgICByYW5nZS5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHJhbmdl
LmZyb20gPSBsb2NhbFJhbmdlLmZyb207CisgICAgICAgICAgICByYW5nZS50byA9IGxvY2FsUmFu
Z2UudG87CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uUmFuZ2VzLnB1c2gocmFuZ2UpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uUmFuZ2VzOworICAgIH07CisgICAg
LyoqCisgICAgICogQ29tcHV0ZXMgdGhlIHdvcmxkIG1hdHJpeCBvZiB0aGUgbm9kZQorICAgICAq
IEBwYXJhbSBmb3JjZSBkZWZpbmVzIGlmIHRoZSBjYWNoZSB2ZXJzaW9uIHNob3VsZCBiZSBpbnZh
bGlkYXRlZCBmb3JjaW5nIHRoZSB3b3JsZCBtYXRyaXggdG8gYmUgY3JlYXRlZCBmcm9tIHNjcmF0
Y2gKKyAgICAgKiBAcmV0dXJucyB0aGUgd29ybGQgbWF0cml4CisgICAgICovCisgICAgTm9kZS5w
cm90b3R5cGUuY29tcHV0ZVdvcmxkTWF0cml4ID0gZnVuY3Rpb24gKGZvcmNlKSB7CisgICAgICAg
IGlmICghdGhpcy5fd29ybGRNYXRyaXgpIHsKKyAgICAgICAgICAgIHRoaXMuX3dvcmxkTWF0cml4
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIk1hdHJp
eCJdLklkZW50aXR5KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3dvcmxkTWF0
cml4OworICAgIH07CisgICAgLyoqCisgICAgICogUmVsZWFzZXMgcmVzb3VyY2VzIGFzc29jaWF0
ZWQgd2l0aCB0aGlzIG5vZGUuCisgICAgICogQHBhcmFtIGRvTm90UmVjdXJzZSBTZXQgdG8gdHJ1
ZSB0byBub3QgcmVjdXJzZSBpbnRvIGVhY2ggY2hpbGRyZW4gKHJlY3Vyc2UgaW50byBlYWNoIGNo
aWxkcmVuIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1
cmVzIFNldCB0byB0cnVlIHRvIGFsc28gZGlzcG9zZSByZWZlcmVuY2VkIG1hdGVyaWFscyBhbmQg
dGV4dHVyZXMgKGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgTm9kZS5wcm90b3R5cGUu
ZGlzcG9zZSA9IGZ1bmN0aW9uIChkb05vdFJlY3Vyc2UsIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1
cmVzKSB7CisgICAgICAgIGlmIChkaXNwb3NlTWF0ZXJpYWxBbmRUZXh0dXJlcyA9PT0gdm9pZCAw
KSB7IGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1cmVzID0gZmFsc2U7IH0KKyAgICAgICAgdGhpcy5f
aXNEaXNwb3NlZCA9IHRydWU7CisgICAgICAgIGlmICghZG9Ob3RSZWN1cnNlKSB7CisgICAgICAg
ICAgICB2YXIgbm9kZXMgPSB0aGlzLmdldERlc2NlbmRhbnRzKHRydWUpOworICAgICAgICAgICAg
Zm9yICh2YXIgX2kgPSAwLCBub2Rlc18xID0gbm9kZXM7IF9pIDwgbm9kZXNfMS5sZW5ndGg7IF9p
KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzXzFbX2ldOworICAgICAgICAg
ICAgICAgIG5vZGUuZGlzcG9zZShkb05vdFJlY3Vyc2UsIGRpc3Bvc2VNYXRlcmlhbEFuZFRleHR1
cmVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMucGFyZW50
KSB7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUZyb21TY2VuZVJvb3ROb2RlcygpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsOworICAg
ICAgICB9CisgICAgICAgIC8vIENhbGxiYWNrCisgICAgICAgIHRoaXMub25EaXNwb3NlT2JzZXJ2
YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIHRoaXMub25EaXNwb3NlT2JzZXJ2
YWJsZS5jbGVhcigpOworICAgICAgICAvLyBCZWhhdmlvcnMKKyAgICAgICAgZm9yICh2YXIgX2Eg
PSAwLCBfYiA9IHRoaXMuX2JlaGF2aW9yczsgX2EgPCBfYi5sZW5ndGg7IF9hKyspIHsKKyAgICAg
ICAgICAgIHZhciBiZWhhdmlvciA9IF9iW19hXTsKKyAgICAgICAgICAgIGJlaGF2aW9yLmRldGFj
aCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2JlaGF2aW9ycyA9IFtdOworICAgIH07Cisg
ICAgLyoqCisgICAgICogUGFyc2UgYW5pbWF0aW9uIHJhbmdlIGRhdGEgZnJvbSBhIHNlcmlhbGl6
YXRpb24gb2JqZWN0IGFuZCBzdG9yZSB0aGVtIGludG8gYSBnaXZlbiBub2RlCisgICAgICogQHBh
cmFtIG5vZGUgZGVmaW5lcyB3aGVyZSB0byBzdG9yZSB0aGUgYW5pbWF0aW9uIHJhbmdlcworICAg
ICAqIEBwYXJhbSBwYXJzZWROb2RlIGRlZmluZXMgdGhlIHNlcmlhbGl6YXRpb24gb2JqZWN0IHRv
IHJlYWQgZGF0YSBmcm9tCisgICAgICogQHBhcmFtIHNjZW5lIGRlZmluZXMgdGhlIGhvc3Rpbmcg
c2NlbmUKKyAgICAgKi8KKyAgICBOb2RlLlBhcnNlQW5pbWF0aW9uUmFuZ2VzID0gZnVuY3Rpb24g
KG5vZGUsIHBhcnNlZE5vZGUsIHNjZW5lKSB7CisgICAgICAgIGlmIChwYXJzZWROb2RlLnJhbmdl
cykgeworICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHBhcnNlZE5vZGUu
cmFuZ2VzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcGFy
c2VkTm9kZS5yYW5nZXNbaW5kZXhdOworICAgICAgICAgICAgICAgIG5vZGUuY3JlYXRlQW5pbWF0
aW9uUmFuZ2UoZGF0YS5uYW1lLCBkYXRhLmZyb20sIGRhdGEudG8pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAqIFJldHVybiB0aGUgbWluaW11bSBhbmQgbWF4
aW11bSB3b3JsZCB2ZWN0b3JzIG9mIHRoZSBlbnRpcmUgaGllcmFyY2h5IHVuZGVyIGN1cnJlbnQg
bm9kZQorICogQHBhcmFtIGluY2x1ZGVEZXNjZW5kYW50cyBJbmNsdWRlIGJvdW5kaW5nIGluZm8g
ZnJvbSBkZXNjZW5kYW50cyBhcyB3ZWxsICh0cnVlIGJ5IGRlZmF1bHQpCisgKiBAcGFyYW0gcHJl
ZGljYXRlIGRlZmluZXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSBjdXN0b21pemUg
dG8gZmlsdGVyIHdoYXQgbWVzaGVzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbGlzdCB1c2Vk
IHRvIGNvbXB1dGUgdGhlIGJvdW5kaW5nIHZlY3RvcnMKKyAqIEByZXR1cm5zIHRoZSBuZXcgYm91
bmRpbmcgdmVjdG9ycworICovCisgICAgTm9kZS5wcm90b3R5cGUuZ2V0SGllcmFyY2h5Qm91bmRp
bmdWZWN0b3JzID0gZnVuY3Rpb24gKGluY2x1ZGVEZXNjZW5kYW50cywgcHJlZGljYXRlKSB7Cisg
ICAgICAgIGlmIChpbmNsdWRlRGVzY2VuZGFudHMgPT09IHZvaWQgMCkgeyBpbmNsdWRlRGVzY2Vu
ZGFudHMgPSB0cnVlOyB9CisgICAgICAgIGlmIChwcmVkaWNhdGUgPT09IHZvaWQgMCkgeyBwcmVk
aWNhdGUgPSBudWxsOyB9CisgICAgICAgIC8vIEVuc3VyZXMgdGhhdCBhbGwgd29ybGQgbWF0cml4
IHdpbGwgYmUgcmVjb21wdXRlZC4KKyAgICAgICAgdGhpcy5nZXRTY2VuZSgpLmluY3JlbWVudFJl
bmRlcklkKCk7CisgICAgICAgIHRoaXMuY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpOworICAgICAg
ICB2YXIgbWluOworICAgICAgICB2YXIgbWF4OworICAgICAgICB2YXIgdGhpc0Fic3RyYWN0TWVz
aCA9IHRoaXM7CisgICAgICAgIGlmICh0aGlzQWJzdHJhY3RNZXNoLmdldEJvdW5kaW5nSW5mbyAm
JiB0aGlzQWJzdHJhY3RNZXNoLnN1Yk1lc2hlcykgeworICAgICAgICAgICAgLy8gSWYgdGhpcyBp
cyBhbiBhYnN0cmFjdCBtZXNoIGdldCBpdHMgYm91bmRpbmcgaW5mbworICAgICAgICAgICAgdmFy
IGJvdW5kaW5nSW5mbyA9IHRoaXNBYnN0cmFjdE1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7CisgICAg
ICAgICAgICBtaW4gPSBib3VuZGluZ0luZm8uYm91bmRpbmdCb3gubWluaW11bVdvcmxkLmNsb25l
KCk7CisgICAgICAgICAgICBtYXggPSBib3VuZGluZ0luZm8uYm91bmRpbmdCb3gubWF4aW11bVdv
cmxkLmNsb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtaW4g
PSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIlZl
Y3RvcjMiXShOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZB
TFVFKTsKKyAgICAgICAgICAgIG1heCA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siVmVjdG9yMyJdKC1OdW1iZXIuTUFYX1ZBTFVFLCAtTnVtYmVy
Lk1BWF9WQUxVRSwgLU51bWJlci5NQVhfVkFMVUUpOworICAgICAgICB9CisgICAgICAgIGlmIChp
bmNsdWRlRGVzY2VuZGFudHMpIHsKKyAgICAgICAgICAgIHZhciBkZXNjZW5kYW50cyA9IHRoaXMu
Z2V0RGVzY2VuZGFudHMoZmFsc2UpOworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBkZXNj
ZW5kYW50c18xID0gZGVzY2VuZGFudHM7IF9pIDwgZGVzY2VuZGFudHNfMS5sZW5ndGg7IF9pKysp
IHsKKyAgICAgICAgICAgICAgICB2YXIgZGVzY2VuZGFudCA9IGRlc2NlbmRhbnRzXzFbX2ldOwor
ICAgICAgICAgICAgICAgIHZhciBjaGlsZE1lc2ggPSBkZXNjZW5kYW50OworICAgICAgICAgICAg
ICAgIGNoaWxkTWVzaC5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7CisgICAgICAgICAgICAgICAg
Ly8gRmlsdGVycyBtZXNoZXMgYmFzZWQgb24gY3VzdG9tIHByZWRpY2F0ZSBmdW5jdGlvbi4KKyAg
ICAgICAgICAgICAgICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUoY2hpbGRNZXNoKSkgewor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgLy9tYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVlZGVkIHBhcmFtcyB0byBnZXQgbWl4
IGFuZCBtYXgKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkTWVzaC5nZXRCb3VuZGluZ0luZm8g
fHwgY2hpbGRNZXNoLmdldFRvdGFsVmVydGljZXMoKSA9PT0gMCkgeworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGNo
aWxkQm91bmRpbmdJbmZvID0gY2hpbGRNZXNoLmdldEJvdW5kaW5nSW5mbygpOworICAgICAgICAg
ICAgICAgIHZhciBib3VuZGluZ0JveCA9IGNoaWxkQm91bmRpbmdJbmZvLmJvdW5kaW5nQm94Owor
ICAgICAgICAgICAgICAgIHZhciBtaW5Cb3ggPSBib3VuZGluZ0JveC5taW5pbXVtV29ybGQ7Cisg
ICAgICAgICAgICAgICAgdmFyIG1heEJveCA9IGJvdW5kaW5nQm94Lm1heGltdW1Xb3JsZDsKKyAg
ICAgICAgICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siVmVjdG9yMyJdLkNoZWNrRXh0ZW5kcyhtaW5Cb3gsIG1pbiwgbWF4KTsKKyAgICAgICAg
ICAgICAgICBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VmVjdG9yMyJdLkNoZWNrRXh0ZW5kcyhtYXhCb3gsIG1pbiwgbWF4KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgbWluOiBtaW4sCisgICAg
ICAgICAgICBtYXg6IG1heAorICAgICAgICB9OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8K
KyAgICBOb2RlLl9BbmltYXRpb25SYW5nZUZhY3RvcnkgPSBmdW5jdGlvbiAobmFtZSwgZnJvbSwg
dG8pIHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiQW5pbWF0aW9uUmFuZ2UiKTsKKyAgICB9
OworICAgIE5vZGUuX05vZGVDb25zdHJ1Y3RvcnMgPSB7fTsKKyAgICB0c2xpYl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3QoX01pc2Nf
ZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUiXSkoKQor
ICAgIF0sIE5vZGUucHJvdG90eXBlLCAibmFtZSIsIHZvaWQgMCk7CisgICAgdHNsaWJfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAgICAgICAgT2JqZWN0KF9N
aXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic2VyaWFsaXplIl0p
KCkKKyAgICBdLCBOb2RlLnByb3RvdHlwZSwgImlkIiwgdm9pZCAwKTsKKyAgICB0c2xpYl9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfX2RlY29yYXRlIl0oWworICAgICAgICBPYmplY3Qo
X01pc2NfZGVjb3JhdG9yc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzZXJpYWxpemUi
XSkoKQorICAgIF0sIE5vZGUucHJvdG90eXBlLCAidW5pcXVlSWQiLCB2b2lkIDApOworICAgIHRz
bGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9fZGVjb3JhdGUiXShbCisgICAgICAg
IE9iamVjdChfTWlzY19kZWNvcmF0b3JzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInNl
cmlhbGl6ZSJdKSgpCisgICAgXSwgTm9kZS5wcm90b3R5cGUsICJzdGF0ZSIsIHZvaWQgMCk7Cisg
ICAgdHNsaWJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siX19kZWNvcmF0ZSJdKFsKKyAg
ICAgICAgT2JqZWN0KF9NaXNjX2RlY29yYXRvcnNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1sic2VyaWFsaXplIl0pKCkKKyAgICBdLCBOb2RlLnByb3RvdHlwZSwgIm1ldGFkYXRhIiwgdm9p
ZCAwKTsKKyAgICByZXR1cm4gTm9kZTsKK30oKSk7CisKKworCisvKioqLyB9KSwKKworLyoqKi8g
Ii4vc2NlbmUudHMiOgorLyohKioqKioqKioqKioqKioqKioqISpcCisgICEqKiogLi9zY2VuZS50
cyAqKiohCisgIFwqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2Nl
bmUgKi8KKy8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKKworInVzZSBzdHJpY3QiOworX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2NlbmUiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFNjZW5lOyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciB0c2xpYl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgdHNs
aWIgKi8gIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9NaXNjL3Rvb2xzICovICIuL01pc2MvdG9vbHMudHMi
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19wcmVjaXNpb25EYXRlX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01pc2MvcHJl
Y2lzaW9uRGF0ZSAqLyAiLi9NaXNjL3ByZWNpc2lvbkRhdGUudHMiKTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01pc2Mvb2JzZXJ2YWJsZSAqLyAiLi9NaXNjL29i
c2VydmFibGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19zbWFydEFycmF5
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L01pc2Mvc21hcnRBcnJheSAqLyAiLi9NaXNjL3NtYXJ0QXJyYXkudHMiKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfTWlzY19zdHJpbmdEaWN0aW9uYXJ5X19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01pc2Mvc3RyaW5nRGljdGlvbmFy
eSAqLyAiLi9NaXNjL3N0cmluZ0RpY3Rpb25hcnkudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfTWlzY190YWdzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL01pc2MvdGFncyAqLyAiLi9NaXNjL3RhZ3MudHMiKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vTWF0aHMvbWF0aC52ZWN0b3IgKi8g
Ii4vTWF0aHMvbWF0aC52ZWN0b3IudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVz
aGVzX3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oLyohIC4vTWVzaGVzL3RyYW5zZm9ybU5vZGUgKi8gIi4vTWVzaGVzL3RyYW5z
Zm9ybU5vZGUudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWVzaGVzX2Fic3RyYWN0
TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9NZXNoZXMvYWJzdHJhY3RNZXNoICovICIuL01lc2hlcy9hYnN0cmFjdE1lc2gudHMiKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQ2FtZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL0NhbWVyYXMvY2FtZXJh
ICovICIuL0NhbWVyYXMvY2FtZXJhLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Fi
c3RyYWN0U2NlbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL2Fic3RyYWN0U2NlbmUgKi8gIi4vYWJzdHJhY3RTY2VuZS50cyIpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRlcmlhbHNfaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJh
dGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vTWF0ZXJpYWxzL2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24gKi8gIi4vTWF0ZXJp
YWxzL2ltYWdlUHJvY2Vzc2luZ0NvbmZpZ3VyYXRpb24udHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfTWF0ZXJpYWxzX3VuaWZvcm1CdWZmZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzEzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01hdGVyaWFscy91bmlmb3JtQnVmZmVy
ICovICIuL01hdGVyaWFscy91bmlmb3JtQnVmZmVyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX0xpZ2h0c19saWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oLyohIC4vTGlnaHRzL2xpZ2h0ICovICIuL0xpZ2h0cy9saWdodC50cyIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Db2xsaXNpb25zX3BpY2tpbmdJbmZvX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9Db2xs
aXNpb25zL3BpY2tpbmdJbmZvICovICIuL0NvbGxpc2lvbnMvcGlja2luZ0luZm8udHMiKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfQWN0aW9uc19hY3Rpb25FdmVudF9fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vQWN0aW9ucy9hY3Rp
b25FdmVudCAqLyAiLi9BY3Rpb25zL2FjdGlvbkV2ZW50LnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nlc3NNYW5hZ2VyX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9Qb3N0UHJvY2Vzc2Vz
L3Bvc3RQcm9jZXNzTWFuYWdlciAqLyAiLi9Qb3N0UHJvY2Vzc2VzL3Bvc3RQcm9jZXNzTWFuYWdl
ci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9SZW5kZXJpbmdfcmVuZGVyaW5nTWFu
YWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
LyohIC4vUmVuZGVyaW5nL3JlbmRlcmluZ01hbmFnZXIgKi8gIi4vUmVuZGVyaW5nL3JlbmRlcmlu
Z01hbmFnZXIudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAu
L3NjZW5lQ29tcG9uZW50ICovICIuL3NjZW5lQ29tcG9uZW50LnRzIik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9FbmdpbmVzL2NvbnN0YW50cyAqLyAiLi9F
bmdpbmVzL2NvbnN0YW50cy50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2Rv
bU1hbmFnZW1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKC8qISAuL01pc2MvZG9tTWFuYWdlbWVudCAqLyAiLi9NaXNjL2RvbU1hbmFnZW1lbnQu
dHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfTWlzY19sb2dnZXJfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzIyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01pc2MvbG9nZ2Vy
ICovICIuL01pc2MvbG9nZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX0VuZ2lu
ZXNfZW5naW5lU3RvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKC8qISAuL0VuZ2luZXMvZW5naW5lU3RvcmUgKi8gIi4vRW5naW5lcy9lbmdpbmVT
dG9yZS50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NaXNjX2RldlRvb2xzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9NaXNj
L2RldlRvb2xzICovICIuL01pc2MvZGV2VG9vbHMudHMiKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfSW5wdXRzX3NjZW5lX2lucHV0TWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MjVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vSW5wdXRzL3NjZW5lLmlucHV0TWFuYWdl
ciAqLyAiLi9JbnB1dHMvc2NlbmUuaW5wdXRNYW5hZ2VyLnRzIik7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX01pc2NfcGVyZkNvdW50ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01pc2MvcGVyZkNvdW50ZXIgKi8gIi4vTWlzYy9w
ZXJmQ291bnRlci50cyIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9NYXRoc19tYXRoX2Nv
bG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygv
KiEgLi9NYXRocy9tYXRoLmNvbG9yICovICIuL01hdGhzL21hdGguY29sb3IudHMiKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfTWF0aHNfbWF0aF9mcnVzdHVtX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9NYXRocy9tYXRoLmZydXN0
dW0gKi8gIi4vTWF0aHMvbWF0aC5mcnVzdHVtLnRzIik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX01pc2NfdW5pcXVlSWRHZW5lcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL01pc2MvdW5pcXVlSWRHZW5lcmF0b3IgKi8gIi4v
TWlzYy91bmlxdWVJZEdlbmVyYXRvci50cyIpOworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworLyoqCisgKiBSZXByZXNlbnRzIGEgc2Nl
bmUgdG8gYmUgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZS4KKyAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5
bG9uanMuY29tL2ZlYXR1cmVzL3NjZW5lCisgKi8KK3ZhciBTY2VuZSA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICB0c2xpYl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJfX2V4dGVuZHMiXShTY2VuZSwgX3N1cGVyKTsKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgbmV3IFNjZW5lCisgICAgICogQHBhcmFtIGVuZ2luZSBkZWZpbmVzIHRoZSBlbmdpbmUgdG8g
dXNlIHRvIHJlbmRlciB0aGlzIHNjZW5lCisgICAgICogQHBhcmFtIG9wdGlvbnMgZGVmaW5lcyB0
aGUgc2NlbmUgb3B0aW9ucworICAgICAqLworICAgIGZ1bmN0aW9uIFNjZW5lKGVuZ2luZSwgb3B0
aW9ucykgeworICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwor
ICAgICAgICAvLyBNZW1iZXJzCisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlz
Ll9pbnB1dE1hbmFnZXIgPSBuZXcgX0lucHV0c19zY2VuZV9pbnB1dE1hbmFnZXJfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzI1X19bIklucHV0TWFuYWdlciJdKF90aGlzKTsKKyAgICAgICAgLyoq
IERlZmluZSB0aGlzIHBhcmFtZXRlciBpZiB5b3UgYXJlIHVzaW5nIG11bHRpcGxlIGNhbWVyYXMg
YW5kIHlvdSB3YW50IHRvIHNwZWNpZnkgd2hpY2ggb25lIHNob3VsZCBiZSB1c2VkIGZvciBwb2lu
dGVyIHBvc2l0aW9uICovCisgICAgICAgIF90aGlzLmNhbWVyYVRvVXNlRm9yUG9pbnRlcnMgPSBu
dWxsOworICAgICAgICAvKiogQGhpZGRlbiAqLworICAgICAgICBfdGhpcy5faXNTY2VuZSA9IHRy
dWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIHRoYXQg
aW5kaWNhdGVzIGlmIHRoZSBzY2VuZSBtdXN0IGNsZWFyIHRoZSByZW5kZXIgYnVmZmVyIGJlZm9y
ZSByZW5kZXJpbmcgYSBmcmFtZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuYXV0b0NsZWFy
ID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4g
dGhhdCBpbmRpY2F0ZXMgaWYgdGhlIHNjZW5lIG11c3QgY2xlYXIgdGhlIGRlcHRoIGFuZCBzdGVu
Y2lsIGJ1ZmZlcnMgYmVmb3JlIHJlbmRlcmluZyBhIGZyYW1lCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5hdXRvQ2xlYXJEZXB0aEFuZFN0ZW5jaWwgPSB0cnVlOworICAgICAgICAvKioKKyAg
ICAgICAgICogRGVmaW5lcyB0aGUgY29sb3IgdXNlZCB0byBjbGVhciB0aGUgcmVuZGVyIGJ1ZmZl
ciAoRGVmYXVsdCBpcyAoMC4yLCAwLjIsIDAuMywgMS4wKSkKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLmNsZWFyQ29sb3IgPSBuZXcgX01hdGhzX21hdGhfY29sb3JfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzI3X19bIkNvbG9yNCJdKDAuMiwgMC4yLCAwLjMsIDEuMCk7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBjb2xvciB1c2VkIHRvIHNpbXVsYXRlIHRoZSBhbWJp
ZW50IGNvbG9yIChEZWZhdWx0IGlzICgwLCAwLCAwKSkKKyAgICAgICAgICovCisgICAgICAgIF90
aGlzLmFtYmllbnRDb2xvciA9IG5ldyBfTWF0aHNfbWF0aF9jb2xvcl9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjdfX1siQ29sb3IzIl0oMCwgMCwgMCk7CisgICAgICAgIC8qKiBAaGlkZGVuICov
CisgICAgICAgIF90aGlzLl9lbnZpcm9ubWVudEludGVuc2l0eSA9IDE7CisgICAgICAgIF90aGlz
Ll9mb3JjZVdpcmVmcmFtZSA9IGZhbHNlOworICAgICAgICBfdGhpcy5fZm9yY2VQb2ludHNDbG91
ZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVh
biBpbmRpY2F0aW5nIGlmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQKKyAgICAgICAgICovCisgICAg
ICAgIF90aGlzLmFuaW1hdGlvbnNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgX3RoaXMuX2FuaW1h
dGlvblByb3BlcnRpZXNPdmVycmlkZSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBH
ZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgYSBjb25zdGFudCBkZWx0YXRpbWUg
aGFzIHRvIGJlIHVzZWQKKyAgICAgICAgICogVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGZvciB0ZXN0
aW5nIHB1cnBvc2VzIHdoZW4geW91IGRvIG5vdCB3YW50IHRoZSBhbmltYXRpb25zIHRvIHNjYWxl
IHdpdGggdGhlIGZyYW1lcmF0ZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMudXNlQ29uc3Rh
bnRBbmltYXRpb25EZWx0YVRpbWUgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdl
dHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgc2NlbmUgbXVzdCBrZWVwIHRo
ZSBtZXNoVW5kZXJQb2ludGVyIHByb3BlcnR5IHVwZGF0ZWQKKyAgICAgICAgICogUGxlYXNlIG5v
dGUgdGhhdCBpdCByZXF1aXJlcyB0byBydW4gYSByYXkgY2FzdCB0aHJvdWdoIHRoZSBzY2VuZSBv
biBldmVyeSBmcmFtZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuY29uc3RhbnRseVVwZGF0
ZU1lc2hVbmRlclBvaW50ZXIgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmlu
ZXMgdGhlIEhUTUwgY3Vyc29yIHRvIHVzZSB3aGVuIGhvdmVyaW5nIG92ZXIgaW50ZXJhY3RpdmUg
ZWxlbWVudHMKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLmhvdmVyQ3Vyc29yID0gInBvaW50
ZXIiOworICAgICAgICAvKioKKyAgICAgICAgICogRGVmaW5lcyB0aGUgSFRNTCBkZWZhdWx0IGN1
cnNvciB0byB1c2UgKGVtcHR5IGJ5IGRlZmF1bHQpCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5kZWZhdWx0Q3Vyc29yID0gIiI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIGlzIHVz
ZWQgdG8gY2FsbCBwcmV2ZW50RGVmYXVsdCgpIG9uIHBvaW50ZXIgZG93bgorICAgICAgICAgKiBp
biBvcmRlciB0byBibG9jayB1bndhbnRlZCBhcnRpZmFjdHMgbGlrZSBzeXN0ZW0gZG91YmxlIGNs
aWNrcworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucHJldmVudERlZmF1bHRPblBvaW50ZXJE
b3duID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgaXMgdXNlZCB0byBjYWxs
IHByZXZlbnREZWZhdWx0KCkgb24gcG9pbnRlciB1cAorICAgICAgICAgKiBpbiBvcmRlciB0byBi
bG9jayB1bndhbnRlZCBhcnRpZmFjdHMgbGlrZSBzeXN0ZW0gZG91YmxlIGNsaWNrcworICAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMucHJldmVudERlZmF1bHRPblBvaW50ZXJVcCA9IHRydWU7Cisg
ICAgICAgIC8vIE1ldGFkYXRhCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMg
dXNlciBkZWZpbmVkIG1ldGFkYXRhCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5tZXRhZGF0
YSA9IG51bGw7CisgICAgICAgIC8qKgorICAgICAgICAgKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHku
IFBsZWFzZSBkbyBub3QgdXNlLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucmVzZXJ2ZWRE
YXRhU3RvcmUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogVXNlIHRoaXMgYXJyYXkg
dG8gYWRkIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdXNlZCB0byBkaXNhYmxlIG9mZmxpbmUgc3VwcG9y
dCBmb3Igc3BlY2lmaWMgdXJscworICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZGlzYWJsZU9m
ZmxpbmVTdXBwb3J0RXhjZXB0aW9uUnVsZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIHNjZW5lIGlzIGRpc3Bvc2VkLgor
ICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlID0gbmV3IF9NaXNj
X29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7
CisgICAgICAgIF90aGlzLl9vbkRpc3Bvc2VPYnNlcnZlciA9IG51bGw7CisgICAgICAgIC8qKgor
ICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCBiZWZvcmUgcmVuZGVyaW5nIHRoZSBzY2VuZSAo
cmlnaHQgYWZ0ZXIgYW5pbWF0aW9ucyBhbmQgcGh5c2ljcykKKyAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMub25CZWZvcmVSZW5kZXJPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIF90aGlz
Ll9vbkJlZm9yZVJlbmRlck9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICog
QW4gZXZlbnQgdHJpZ2dlcmVkIGFmdGVyIHJlbmRlcmluZyB0aGUgc2NlbmUKKyAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMub25BZnRlclJlbmRlck9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGFmdGVyIHJlbmRlcmluZyB0aGUg
c2NlbmUgZm9yIGFuIGFjdGl2ZSBjYW1lcmEgKFdoZW4gc2NlbmUucmVuZGVyIGlzIGNhbGxlZCB0
aGlzIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGVhY2ggY2FtZXJhKQorICAgICAgICAqLworICAgICAg
ICBfdGhpcy5vbkFmdGVyUmVuZGVyQ2FtZXJhT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZh
YmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAg
ICBfdGhpcy5fb25BZnRlclJlbmRlck9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAg
ICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSBhbmltYXRpbmcgdGhlIHNjZW5lCisgICAg
ICAgICovCisgICAgICAgIF90aGlzLm9uQmVmb3JlQW5pbWF0aW9uc09ic2VydmFibGUgPSBuZXcg
X01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxl
Il0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGFmdGVyIGFu
aW1hdGlvbnMgcHJvY2Vzc2luZworICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkFmdGVyQW5p
bWF0aW9uc09ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4g
ZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSBkcmF3IGNhbGxzIGFyZSByZWFkeSB0byBiZSBzZW50Cisg
ICAgICAgICovCisgICAgICAgIF90aGlzLm9uQmVmb3JlRHJhd1BoYXNlT2JzZXJ2YWJsZSA9IG5l
dyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFi
bGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgYWZ0ZXIg
ZHJhdyBjYWxscyBoYXZlIGJlZW4gc2VudAorICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkFm
dGVyRHJhd1BoYXNlT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAg
KiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgc2NlbmUgaXMgcmVhZHkKKyAgICAgICAgKi8K
KyAgICAgICAgX3RoaXMub25SZWFkeU9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoq
CisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSByZW5kZXJpbmcgYSBjYW1lcmEK
KyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZhYmxl
ID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2Jz
ZXJ2YWJsZSJdKCk7CisgICAgICAgIF90aGlzLl9vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2VydmVy
ID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIGFmdGVy
IHJlbmRlcmluZyBhIGNhbWVyYQorICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkFmdGVyQ2Ft
ZXJhUmVuZGVyT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICBfdGhpcy5fb25BZnRlckNh
bWVyYVJlbmRlck9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZl
bnQgdHJpZ2dlcmVkIHdoZW4gYWN0aXZlIG1lc2hlcyBldmFsdWF0aW9uIGlzIGFib3V0IHRvIHN0
YXJ0CisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uQmVmb3JlQWN0aXZlTWVzaGVzRXZhbHVh
dGlvbk9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZl
bnQgdHJpZ2dlcmVkIHdoZW4gYWN0aXZlIG1lc2hlcyBldmFsdWF0aW9uIGlzIGRvbmUKKyAgICAg
ICAgKi8KKyAgICAgICAgX3RoaXMub25BZnRlckFjdGl2ZU1lc2hlc0V2YWx1YXRpb25PYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJl
ZCB3aGVuIHBhcnRpY2xlcyByZW5kZXJpbmcgaXMgYWJvdXQgdG8gc3RhcnQKKyAgICAgICAgKiBO
b3RlOiBUaGlzIGV2ZW50IGNhbiBiZSB0cmlnZ2VyIG1vcmUgdGhhbiBvbmNlIHBlciBmcmFtZSAo
YmVjYXVzZSBwYXJ0aWNsZXMgY2FuIGJlIHJlbmRlcmVkIGJ5IHJlbmRlciB0YXJnZXQgdGV4dHVy
ZXMgYXMgd2VsbCkKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25CZWZvcmVQYXJ0aWNsZXNS
ZW5kZXJpbmdPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFu
IGV2ZW50IHRyaWdnZXJlZCB3aGVuIHBhcnRpY2xlcyByZW5kZXJpbmcgaXMgZG9uZQorICAgICAg
ICAqIE5vdGU6IFRoaXMgZXZlbnQgY2FuIGJlIHRyaWdnZXIgbW9yZSB0aGFuIG9uY2UgcGVyIGZy
YW1lIChiZWNhdXNlIHBhcnRpY2xlcyBjYW4gYmUgcmVuZGVyZWQgYnkgcmVuZGVyIHRhcmdldCB0
ZXh0dXJlcyBhcyB3ZWxsKQorICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkFmdGVyUGFydGlj
bGVzUmVuZGVyaW5nT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAg
KiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiBTY2VuZUxvYWRlci5BcHBlbmQgb3IgU2NlbmVMb2Fk
ZXIuTG9hZCBvciBTY2VuZUxvYWRlci5JbXBvcnRNZXNoIHdlcmUgc3VjY2Vzc2Z1bGx5IGV4ZWN1
dGVkCisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uRGF0YUxvYWRlZE9ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4g
YSBjYW1lcmEgaXMgY3JlYXRlZAorICAgICAgICAqLworICAgICAgICBfdGhpcy5vbk5ld0NhbWVy
YUFkZGVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBl
dmVudCB0cmlnZ2VyZWQgd2hlbiBhIGNhbWVyYSBpcyByZW1vdmVkCisgICAgICAgICovCisgICAg
ICAgIF90aGlzLm9uQ2FtZXJhUmVtb3ZlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJs
ZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAg
LyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gYSBsaWdodCBpcyBjcmVhdGVk
CisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uTmV3TGlnaHRBZGRlZE9ic2VydmFibGUgPSBu
ZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZh
YmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4g
YSBsaWdodCBpcyByZW1vdmVkCisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uTGlnaHRSZW1v
dmVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVu
dCB0cmlnZ2VyZWQgd2hlbiBhIGdlb21ldHJ5IGlzIGNyZWF0ZWQKKyAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMub25OZXdHZW9tZXRyeUFkZGVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZh
YmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAg
ICAvKioKKyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiBhIGdlb21ldHJ5IGlzIHJl
bW92ZWQKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25HZW9tZXRyeVJlbW92ZWRPYnNlcnZh
YmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
T2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJl
ZCB3aGVuIGEgdHJhbnNmb3JtIG5vZGUgaXMgY3JlYXRlZAorICAgICAgICAqLworICAgICAgICBf
dGhpcy5vbk5ld1RyYW5zZm9ybU5vZGVBZGRlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gYSB0cmFuc2Zvcm0gbm9k
ZSBpcyByZW1vdmVkCisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uVHJhbnNmb3JtTm9kZVJl
bW92ZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2
ZW50IHRyaWdnZXJlZCB3aGVuIGEgbWVzaCBpcyBjcmVhdGVkCisgICAgICAgICovCisgICAgICAg
IF90aGlzLm9uTmV3TWVzaEFkZGVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioK
KyAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiBhIG1lc2ggaXMgcmVtb3ZlZAorICAg
ICAgICAqLworICAgICAgICBfdGhpcy5vbk1lc2hSZW1vdmVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlz
Y19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgp
OworICAgICAgICAvKioKKyAgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gYSBza2Vs
ZXRvbiBpcyBjcmVhdGVkCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vbk5ld1NrZWxldG9u
QWRkZWRPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAqIEFuIGV2
ZW50IHRyaWdnZXJlZCB3aGVuIGEgc2tlbGV0b24gaXMgcmVtb3ZlZAorICAgICAgICAqLworICAg
ICAgICBfdGhpcy5vblNrZWxldG9uUmVtb3ZlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2
YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAg
ICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gYSBtYXRlcmlhbCBpcyBj
cmVhdGVkCisgICAgICAgICovCisgICAgICAgIF90aGlzLm9uTmV3TWF0ZXJpYWxBZGRlZE9ic2Vy
dmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dl
cmVkIHdoZW4gYSBtYXRlcmlhbCBpcyByZW1vdmVkCisgICAgICAgICovCisgICAgICAgIF90aGlz
Lm9uTWF0ZXJpYWxSZW1vdmVkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAg
ICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiBhIHRleHR1cmUgaXMgY3JlYXRlZAorICAg
ICAgICAqLworICAgICAgICBfdGhpcy5vbk5ld1RleHR1cmVBZGRlZE9ic2VydmFibGUgPSBuZXcg
X01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxl
Il0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gYSB0
ZXh0dXJlIGlzIHJlbW92ZWQKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25UZXh0dXJlUmVt
b3ZlZE9ic2VydmFibGUgPSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJPYnNlcnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZl
bnQgdHJpZ2dlcmVkIHdoZW4gcmVuZGVyIHRhcmdldHMgYXJlIGFib3V0IHRvIGJlIHJlbmRlcmVk
CisgICAgICAgICogQ2FuIGhhcHBlbiBtdWx0aXBsZSB0aW1lcyBwZXIgZnJhbWUuCisgICAgICAg
ICovCisgICAgICAgIF90aGlzLm9uQmVmb3JlUmVuZGVyVGFyZ2V0c1JlbmRlck9ic2VydmFibGUg
PSBuZXcgX01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNl
cnZhYmxlIl0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdo
ZW4gcmVuZGVyIHRhcmdldHMgd2VyZSByZW5kZXJlZC4KKyAgICAgICAgKiBDYW4gaGFwcGVuIG11
bHRpcGxlIHRpbWVzIHBlciBmcmFtZS4KKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25BZnRl
clJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgor
ICAgICAgICAqIEFuIGV2ZW50IHRyaWdnZXJlZCBiZWZvcmUgY2FsY3VsYXRpbmcgZGV0ZXJtaW5p
c3RpYyBzaW11bGF0aW9uIHN0ZXAKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25CZWZvcmVT
dGVwT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAgICAgICAgKiBBbiBldmVu
dCB0cmlnZ2VyZWQgYWZ0ZXIgY2FsY3VsYXRpbmcgZGV0ZXJtaW5pc3RpYyBzaW11bGF0aW9uIHN0
ZXAKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMub25BZnRlclN0ZXBPYnNlcnZhYmxlID0gbmV3
IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2YWJs
ZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0
aGUgYWN0aXZlQ2FtZXJhIHByb3BlcnR5IGlzIHVwZGF0ZWQKKyAgICAgICAgICovCisgICAgICAg
IF90aGlzLm9uQWN0aXZlQ2FtZXJhQ2hhbmdlZCA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioKKyAg
ICAgICAgICogVGhpcyBPYnNlcnZhYmxlIHdpbGwgYmUgdHJpZ2dlcmVkIGJlZm9yZSByZW5kZXJp
bmcgZWFjaCByZW5kZXJpbmdHcm91cCBvZiBlYWNoIHJlbmRlcmVkIGNhbWVyYS4KKyAgICAgICAg
ICogVGhlIFJlbmRlcmluR3JvdXBJbmZvIGNsYXNzIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRp
b24gYWJvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIG9ic2VydmFibGUgaXMgY2FsbGVkCisg
ICAgICAgICAqIElmIHlvdSB3aXNoIHRvIHJlZ2lzdGVyIGFuIE9ic2VydmVyIG9ubHkgZm9yIGEg
Z2l2ZW4gc2V0IG9mIHJlbmRlcmluZ0dyb3VwLCB1c2UgdGhlIG1hc2sgd2l0aCBhIGNvbWJpbmF0
aW9uIG9mIHRoZSByZW5kZXJpbmdHcm91cCBpbmRleCBlbGV2YXRlZCB0byB0aGUgcG93ZXIgb2Yg
dHdvICgxIGZvciByZW5kZXJpbmdHcm91cCAwLCAyIGZvciByZW5kZXJpbmdyT3VwMSwgNCBmb3Ig
MiBhbmQgOCBmb3IgMykKKyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uQmVmb3JlUmVuZGVy
aW5nR3JvdXBPYnNlcnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfX1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBU
aGlzIE9ic2VydmFibGUgd2lsbCBiZSB0cmlnZ2VyZWQgYWZ0ZXIgcmVuZGVyaW5nIGVhY2ggcmVu
ZGVyaW5nR3JvdXAgb2YgZWFjaCByZW5kZXJlZCBjYW1lcmEuCisgICAgICAgICAqIFRoZSBSZW5k
ZXJpbkdyb3VwSW5mbyBjbGFzcyBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRo
ZSBjb250ZXh0IGluIHdoaWNoIHRoZSBvYnNlcnZhYmxlIGlzIGNhbGxlZAorICAgICAgICAgKiBJ
ZiB5b3Ugd2lzaCB0byByZWdpc3RlciBhbiBPYnNlcnZlciBvbmx5IGZvciBhIGdpdmVuIHNldCBv
ZiByZW5kZXJpbmdHcm91cCwgdXNlIHRoZSBtYXNrIHdpdGggYSBjb21iaW5hdGlvbiBvZiB0aGUg
cmVuZGVyaW5nR3JvdXAgaW5kZXggZWxldmF0ZWQgdG8gdGhlIHBvd2VyIG9mIHR3byAoMSBmb3Ig
cmVuZGVyaW5nR3JvdXAgMCwgMiBmb3IgcmVuZGVyaW5nck91cDEsIDQgZm9yIDIgYW5kIDggZm9y
IDMpCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vbkFmdGVyUmVuZGVyaW5nR3JvdXBPYnNl
cnZhYmxlID0gbmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siT2JzZXJ2YWJsZSJdKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIE9ic2VydmFi
bGUgd2lsbCB3aGVuIGEgbWVzaCBoYXMgYmVlbiBpbXBvcnRlZCBpbnRvIHRoZSBzY2VuZS4KKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLm9uTWVzaEltcG9ydGVkT2JzZXJ2YWJsZSA9IG5ldyBf
TWlzY19vYnNlcnZhYmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUi
XSgpOworICAgICAgICAvLyBBbmltYXRpb25zCisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAg
ICAgIF90aGlzLl9yZWdpc3RlcmVkRm9yTGF0ZUFuaW1hdGlvbkJpbmRpbmdzID0gbmV3IF9NaXNj
X3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU21hcnRBcnJheU5vRHVw
bGljYXRlIl0oMjU2KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgb2JzZXJ2YWJsZSBl
dmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbnkgcG9udGVyIGV2ZW50IGlzIHRyaWdnZXJlZC4gSXQg
aXMgcmVnaXN0ZXJlZCBkdXJpbmcgU2NlbmUuYXR0YWNoQ29udHJvbCgpIGFuZCBpdCBpcyBjYWxs
ZWQgQkVGT1JFIHRoZSAzRCBlbmdpbmUgcHJvY2VzcyBhbnl0aGluZyAobWVzaC9zcHJpdGUgcGlj
a2luZyBmb3IgaW5zdGFuY2UpLgorICAgICAgICAgKiBZb3UgaGF2ZSB0aGUgcG9zc2liaWxpdHkg
dG8gc2tpcCB0aGUgcHJvY2VzcyBhbmQgdGhlIGNhbGwgdG8gb25Qb2ludGVyT2JzZXJ2YWJsZSBi
eSBzZXR0aW5nIFBvaW50ZXJJbmZvUHJlLnNraXBPblBvaW50ZXJPYnNlcnZhYmxlIHRvIHRydWUK
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLm9uUHJlUG9pbnRlck9ic2VydmFibGUgPSBuZXcg
X01pc2Nfb2JzZXJ2YWJsZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPYnNlcnZhYmxl
Il0oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE9ic2VydmFibGUgZXZlbnQgdHJpZ2dlcmVk
IGVhY2ggdGltZSBhbiBpbnB1dCBldmVudCBpcyByZWNlaXZlZCBmcm9tIHRoZSByZW5kZXJpbmcg
Y2FudmFzCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5vblBvaW50ZXJPYnNlcnZhYmxlID0g
bmV3IF9NaXNjX29ic2VydmFibGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siT2JzZXJ2
YWJsZSJdKCk7CisgICAgICAgIC8vIEtleWJvYXJkCisgICAgICAgIC8qKgorICAgICAgICAgKiBU
aGlzIG9ic2VydmFibGUgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW55IGtleWJvYXJkIGV2ZW50
IHNpIHJhaXNlZCBhbmQgcmVnaXN0ZXJlZCBkdXJpbmcgU2NlbmUuYXR0YWNoQ29udHJvbCgpCisg
ICAgICAgICAqIFlvdSBoYXZlIHRoZSBwb3NzaWJpbGl0eSB0byBza2lwIHRoZSBwcm9jZXNzIGFu
ZCB0aGUgY2FsbCB0byBvbktleWJvYXJkT2JzZXJ2YWJsZSBieSBzZXR0aW5nIEtleWJvYXJkSW5m
b1ByZS5za2lwT25Qb2ludGVyT2JzZXJ2YWJsZSB0byB0cnVlCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5vblByZUtleWJvYXJkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZhYmxlX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAgICAvKioK
KyAgICAgICAgICogT2JzZXJ2YWJsZSBldmVudCB0cmlnZ2VyZWQgZWFjaCB0aW1lIGFuIGtleWJv
YXJkIGV2ZW50IGlzIHJlY2VpdmVkIGZyb20gdGhlIGhvc3Rpbmcgd2luZG93CisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5vbktleWJvYXJkT2JzZXJ2YWJsZSA9IG5ldyBfTWlzY19vYnNlcnZh
YmxlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9ic2VydmFibGUiXSgpOworICAgICAg
ICAvLyBDb29yZGluYXRlcyBzeXN0ZW0KKyAgICAgICAgX3RoaXMuX3VzZVJpZ2h0SGFuZGVkU3lz
dGVtID0gZmFsc2U7CisgICAgICAgIC8vIERldGVybWluaXN0aWMgbG9ja3N0ZXAKKyAgICAgICAg
X3RoaXMuX3RpbWVBY2N1bXVsYXRvciA9IDA7CisgICAgICAgIF90aGlzLl9jdXJyZW50U3RlcElk
ID0gMDsKKyAgICAgICAgX3RoaXMuX2N1cnJlbnRJbnRlcm5hbFN0ZXAgPSAwOworICAgICAgICAv
LyBGb2cKKyAgICAgICAgX3RoaXMuX2ZvZ0VuYWJsZWQgPSB0cnVlOworICAgICAgICBfdGhpcy5f
Zm9nTW9kZSA9IFNjZW5lLkZPR01PREVfTk9ORTsKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0
cyBvciBzZXRzIHRoZSBmb2cgY29sb3IgdG8gdXNlCisgICAgICAgICogQHNlZSBodHRwOi8vZG9j
LmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9lbnZpcm9ubWVudCNmb2cKKyAgICAgICAgKiAoRGVm
YXVsdCBpcyBDb2xvcjMoMC4yLCAwLjIsIDAuMykpCisgICAgICAgICovCisgICAgICAgIF90aGlz
LmZvZ0NvbG9yID0gbmV3IF9NYXRoc19tYXRoX2NvbG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yN19fWyJDb2xvcjMiXSgwLjIsIDAuMiwgMC4zKTsKKyAgICAgICAgLyoqCisgICAgICAgICog
R2V0cyBvciBzZXRzIHRoZSBmb2cgZGVuc2l0eSB0byB1c2UKKyAgICAgICAgKiBAc2VlIGh0dHA6
Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Vudmlyb25tZW50I2ZvZworICAgICAgICAq
IChEZWZhdWx0IGlzIDAuMSkKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuZm9nRGVuc2l0eSA9
IDAuMTsKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBmb2cgc3RhcnQg
ZGlzdGFuY2UgdG8gdXNlCisgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20v
YmFieWxvbjEwMS9lbnZpcm9ubWVudCNmb2cKKyAgICAgICAgKiAoRGVmYXVsdCBpcyAwKQorICAg
ICAgICAqLworICAgICAgICBfdGhpcy5mb2dTdGFydCA9IDA7CisgICAgICAgIC8qKgorICAgICAg
ICAqIEdldHMgb3Igc2V0cyB0aGUgZm9nIGVuZCBkaXN0YW5jZSB0byB1c2UKKyAgICAgICAgKiBA
c2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAxL2Vudmlyb25tZW50I2ZvZwor
ICAgICAgICAqIChEZWZhdWx0IGlzIDEwMDApCisgICAgICAgICovCisgICAgICAgIF90aGlzLmZv
Z0VuZCA9IDEwMDAuMDsKKyAgICAgICAgLy8gTGlnaHRzCisgICAgICAgIF90aGlzLl9zaGFkb3dz
RW5hYmxlZCA9IHRydWU7CisgICAgICAgIF90aGlzLl9saWdodHNFbmFibGVkID0gdHJ1ZTsKKyAg
ICAgICAgLyoqIEFsbCBvZiB0aGUgYWN0aXZlIGNhbWVyYXMgYWRkZWQgdG8gdGhpcyBzY2VuZS4g
Ki8KKyAgICAgICAgX3RoaXMuYWN0aXZlQ2FtZXJhcyA9IG5ldyBBcnJheSgpOworICAgICAgICAv
LyBUZXh0dXJlcworICAgICAgICBfdGhpcy5fdGV4dHVyZXNFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgLy8gUGFydGljbGVzCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJv
b2xlYW4gaW5kaWNhdGluZyBpZiBwYXJ0aWNsZXMgYXJlIGVuYWJsZWQgb24gdGhpcyBzY2VuZQor
ICAgICAgICAqLworICAgICAgICBfdGhpcy5wYXJ0aWNsZXNFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgLy8gU3ByaXRlcworICAgICAgICAvKioKKyAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29s
ZWFuIGluZGljYXRpbmcgaWYgc3ByaXRlcyBhcmUgZW5hYmxlZCBvbiB0aGlzIHNjZW5lCisgICAg
ICAgICovCisgICAgICAgIF90aGlzLnNwcml0ZXNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgLy8g
U2tlbGV0b25zCisgICAgICAgIF90aGlzLl9za2VsZXRvbnNFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgLy8gTGVucyBmbGFyZXMKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0cyBvciBzZXRzIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIGlmIGxlbnMgZmxhcmVzIGFyZSBlbmFibGVkIG9uIHRoaXMgc2Nl
bmUKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMubGVuc0ZsYXJlc0VuYWJsZWQgPSB0cnVlOwor
ICAgICAgICAvLyBDb2xsaXNpb25zCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgb3Igc2V0
cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBjb2xsaXNpb25zIGFyZSBlbmFibGVkIG9uIHRoaXMg
c2NlbmUKKyAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9iYWJ5bG9uMTAx
L2NhbWVyYXMsX21lc2hfY29sbGlzaW9uc19hbmRfZ3Jhdml0eQorICAgICAgICAqLworICAgICAg
ICBfdGhpcy5jb2xsaXNpb25zRW5hYmxlZCA9IHRydWU7CisgICAgICAgIC8qKgorICAgICAgICAg
KiBEZWZpbmVzIHRoZSBncmF2aXR5IGFwcGxpZWQgdG8gdGhpcyBzY2VuZSAodXNlZCBvbmx5IGZv
ciBjb2xsaXNpb25zKQorICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9i
YWJ5bG9uMTAxL2NhbWVyYXMsX21lc2hfY29sbGlzaW9uc19hbmRfZ3Jhdml0eQorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuZ3Jhdml0eSA9IG5ldyBfTWF0aHNfbWF0aF92ZWN0b3JfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVjdG9yMyJdKDAsIC05LjgwNywgMCk7CisgICAgICAg
IC8vIFBvc3Rwcm9jZXNzZXMKKyAgICAgICAgLyoqCisgICAgICAgICogR2V0cyBvciBzZXRzIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIGlmIHBvc3Rwcm9jZXNzZXMgYXJlIGVuYWJsZWQgb24gdGhpcyBz
Y2VuZQorICAgICAgICAqLworICAgICAgICBfdGhpcy5wb3N0UHJvY2Vzc2VzRW5hYmxlZCA9IHRy
dWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbGlzdCBvZiBwb3N0cHJvY2Vzc2VzIGFk
ZGVkIHRvIHRoZSBzY2VuZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucG9zdFByb2Nlc3Nl
cyA9IG5ldyBBcnJheSgpOworICAgICAgICAvLyBDdXN0b21zIHJlbmRlciB0YXJnZXRzCisgICAg
ICAgIC8qKgorICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBy
ZW5kZXIgdGFyZ2V0cyBhcmUgZW5hYmxlZCBvbiB0aGlzIHNjZW5lCisgICAgICAgICovCisgICAg
ICAgIF90aGlzLnJlbmRlclRhcmdldHNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgLyoqCisgICAg
ICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIG5leHQgcmVuZGVyIHRh
cmdldHMgbXVzdCBiZSBkdW1wZWQgYXMgaW1hZ2UgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcworICAg
ICAgICAqIFdlIHJlY29tbWVuZCBub3QgdXNpbmcgaXQgYW5kIGluc3RlYWQgcmVseSBvbiBTcGVj
dG9yLmpzOiBodHRwOi8vc3BlY3Rvci5iYWJ5bG9uanMuY29tCisgICAgICAgICovCisgICAgICAg
IF90aGlzLmR1bXBOZXh0UmVuZGVyVGFyZ2V0cyA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAg
ICAgICogVGhlIGxpc3Qgb2YgdXNlciBkZWZpbmVkIHJlbmRlciB0YXJnZXRzIGFkZGVkIHRvIHRo
ZSBzY2VuZQorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuY3VzdG9tUmVuZGVyVGFyZ2V0cyA9
IG5ldyBBcnJheSgpOworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBt
ZXNoZXMgaW1wb3J0ZWQgdG8gdGhlIHNjZW5lIHRocm91Z2ggU2NlbmVMb2FkZXIKKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLmltcG9ydGVkTWVzaGVzRmlsZXMgPSBuZXcgQXJyYXkoKTsKKyAg
ICAgICAgLy8gUHJvYmVzCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJv
b2xlYW4gaW5kaWNhdGluZyBpZiBwcm9iZXMgYXJlIGVuYWJsZWQgb24gdGhpcyBzY2VuZQorICAg
ICAgICAqLworICAgICAgICBfdGhpcy5wcm9iZXNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgX3Ro
aXMuX21lc2hlc0ZvckludGVyc2VjdGlvbnMgPSBuZXcgX01pc2Nfc21hcnRBcnJheV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTbWFydEFycmF5Tm9EdXBsaWNhdGUiXSgyNTYpOworICAg
ICAgICAvLyBQcm9jZWR1cmFsIHRleHR1cmVzCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMg
b3Igc2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBwcm9jZWR1cmFsIHRleHR1cmVzIGFyZSBl
bmFibGVkIG9uIHRoaXMgc2NlbmUKKyAgICAgICAgKi8KKyAgICAgICAgX3RoaXMucHJvY2VkdXJh
bFRleHR1cmVzRW5hYmxlZCA9IHRydWU7CisgICAgICAgIC8vIFBlcmZvcm1hbmNlIGNvdW50ZXJz
CisgICAgICAgIF90aGlzLl90b3RhbFZlcnRpY2VzID0gbmV3IF9NaXNjX3BlcmZDb3VudGVyX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fWyJQZXJmQ291bnRlciJdKCk7CisgICAgICAgIC8q
KiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9hY3RpdmVJbmRpY2VzID0gbmV3IF9NaXNjX3Bl
cmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fWyJQZXJmQ291bnRlciJdKCk7
CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9hY3RpdmVQYXJ0aWNsZXMg
PSBuZXcgX01pc2NfcGVyZkNvdW50ZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19bIlBl
cmZDb3VudGVyIl0oKTsKKyAgICAgICAgLyoqIEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2Fj
dGl2ZUJvbmVzID0gbmV3IF9NaXNjX3BlcmZDb3VudGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yNl9fWyJQZXJmQ291bnRlciJdKCk7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAg
IF90aGlzLl9hbmltYXRpb25UaW1lID0gMDsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMg
b3Igc2V0cyBhIGdlbmVyYWwgc2NhbGUgZm9yIGFuaW1hdGlvbiBzcGVlZAorICAgICAgICAgKiBA
c2VlIGh0dHBzOi8vd3d3LmJhYnlsb25qcy1wbGF5Z3JvdW5kLmNvbS8jSUJVMlc3IzMKKyAgICAg
ICAgICovCisgICAgICAgIF90aGlzLmFuaW1hdGlvblRpbWVTY2FsZSA9IDE7CisgICAgICAgIF90
aGlzLl9yZW5kZXJJZCA9IDA7CisgICAgICAgIF90aGlzLl9mcmFtZUlkID0gMDsKKyAgICAgICAg
X3RoaXMuX2V4ZWN1dGVXaGVuUmVhZHlUaW1lb3V0SWQgPSAtMTsKKyAgICAgICAgX3RoaXMuX2lu
dGVybWVkaWF0ZVJlbmRlcmluZyA9IGZhbHNlOworICAgICAgICBfdGhpcy5fdmlld1VwZGF0ZUZs
YWcgPSAtMTsKKyAgICAgICAgX3RoaXMuX3Byb2plY3Rpb25VcGRhdGVGbGFnID0gLTE7CisgICAg
ICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl90b0JlRGlzcG9zZWQgPSBuZXcgQXJy
YXkoMjU2KTsKKyAgICAgICAgX3RoaXMuX2FjdGl2ZVJlcXVlc3RzID0gbmV3IEFycmF5KCk7Cisg
ICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9wZW5kaW5nRGF0YSA9IG5ldyBB
cnJheSgpOworICAgICAgICBfdGhpcy5faXNEaXNwb3NlZCA9IGZhbHNlOworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgYWxsIHN1
Ym1lc2hlcyBvZiBhY3RpdmUgbWVzaGVzIG11c3QgYmUgcmVuZGVyZWQKKyAgICAgICAgICogVXNl
IHRoaXMgYm9vbGVhbiB0byBhdm9pZCBjb21wdXRpbmcgZnJ1c3R1bSBjbGlwcGluZyBvbiBzdWJt
ZXNoZXMgKFRoaXMgY291bGQgaGVscCB3aGVuIHlvdSBhcmUgQ1BVIGJvdW5kKQorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMuZGlzcGF0Y2hBbGxTdWJNZXNoZXNPZkFjdGl2ZU1lc2hlcyA9IGZh
bHNlOworICAgICAgICBfdGhpcy5fYWN0aXZlTWVzaGVzID0gbmV3IF9NaXNjX3NtYXJ0QXJyYXlf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU21hcnRBcnJheSJdKDI1Nik7CisgICAgICAg
IF90aGlzLl9wcm9jZXNzZWRNYXRlcmlhbHMgPSBuZXcgX01pc2Nfc21hcnRBcnJheV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTbWFydEFycmF5Il0oMjU2KTsKKyAgICAgICAgX3RoaXMu
X3JlbmRlclRhcmdldHMgPSBuZXcgX01pc2Nfc21hcnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJTbWFydEFycmF5Tm9EdXBsaWNhdGUiXSgyNTYpOworICAgICAgICAvKiogQGhp
ZGRlbiAqLworICAgICAgICBfdGhpcy5fYWN0aXZlUGFydGljbGVTeXN0ZW1zID0gbmV3IF9NaXNj
X3NtYXJ0QXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siU21hcnRBcnJheSJdKDI1
Nik7CisgICAgICAgIF90aGlzLl9hY3RpdmVTa2VsZXRvbnMgPSBuZXcgX01pc2Nfc21hcnRBcnJh
eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTbWFydEFycmF5Tm9EdXBsaWNhdGUiXSgz
Mik7CisgICAgICAgIF90aGlzLl9zb2Z0d2FyZVNraW5uZWRNZXNoZXMgPSBuZXcgX01pc2Nfc21h
cnRBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJTbWFydEFycmF5Tm9EdXBsaWNh
dGUiXSgzMik7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIF90aGlzLl9hY3RpdmVB
bmltYXRhYmxlcyA9IG5ldyBBcnJheSgpOworICAgICAgICBfdGhpcy5fdHJhbnNmb3JtTWF0cml4
ID0gX01hdGhzX21hdGhfdmVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIk1hdHJp
eCJdLlplcm8oKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xl
YW4gaW5kaWNhdGluZyBpZiBsaWdodHMgbXVzdCBiZSBzb3J0ZWQgYnkgcHJpb3JpdHkgKG9mZiBi
eSBkZWZhdWx0KQorICAgICAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGVyZSBhcmUgbW9yZSBs
aWdodHMgdGhhdCB0aGUgbWF4aW11bSBzaW11bHRlYW5vdXMgYXV0aG9yaXplZAorICAgICAgICAg
Ki8KKyAgICAgICAgX3RoaXMucmVxdWlyZUxpZ2h0U29ydGluZyA9IGZhbHNlOworICAgICAgICAv
KioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKiBCYWNraW5nIHN0b3JlIG9mIGRlZmlu
ZWQgc2NlbmUgY29tcG9uZW50cy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9jb21wb25l
bnRzID0gW107CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIEJh
Y2tpbmcgc3RvcmUgb2YgZGVmaW5lZCBzY2VuZSBjb21wb25lbnRzLgorICAgICAgICAgKi8KKyAg
ICAgICAgX3RoaXMuX3NlcmlhbGl6YWJsZUNvbXBvbmVudHMgPSBbXTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIExpc3Qgb2YgY29tcG9uZW50cyB0byByZWdpc3RlciBvbiB0aGUgbmV4dCByZWdp
c3RyYXRpb24gc3RlcC4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl90cmFuc2llbnRDb21w
b25lbnRzID0gW107CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAq
IERlZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVuaW5nIGJlZm9yZSBjYW1lcmEgdXBkYXRlcy4KKyAg
ICAgICAgICovCisgICAgICAgIF90aGlzLl9iZWZvcmVDYW1lcmFVcGRhdGVTdGFnZSA9IF9zY2Vu
ZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2UiXS5DcmVhdGUo
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogRGVmaW5lcyB0
aGUgYWN0aW9ucyBoYXBwZW5pbmcgYmVmb3JlIGNsZWFyIHRoZSBjYW52YXMuCisgICAgICAgICAq
LworICAgICAgICBfdGhpcy5fYmVmb3JlQ2xlYXJTdGFnZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2UiXS5DcmVhdGUoKTsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogRGVmaW5lcyB0aGUgYWN0aW9ucyB3aGVu
IGNvbGxlY3RpbmcgcmVuZGVyIHRhcmdldHMgZm9yIHRoZSBmcmFtZS4KKyAgICAgICAgICovCisg
ICAgICAgIF90aGlzLl9nYXRoZXJSZW5kZXJUYXJnZXRzU3RhZ2UgPSBfc2NlbmVDb21wb25lbnRf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAg
IC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmluZXMgdGhlIGFjdGlvbnMg
aGFwcGVuaW5nIGZvciBvbmUgY2FtZXJhIGluIHRoZSBmcmFtZS4KKyAgICAgICAgICovCisgICAg
ICAgIF90aGlzLl9nYXRoZXJBY3RpdmVDYW1lcmFSZW5kZXJUYXJnZXRzU3RhZ2UgPSBfc2NlbmVD
b21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmluZXMgdGhl
IGFjdGlvbnMgaGFwcGVuaW5nIGR1cmluZyB0aGUgcGVyIG1lc2ggcmVhZHkgY2hlY2tzLgorICAg
ICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2lzUmVhZHlGb3JNZXNoU3RhZ2UgPSBfc2NlbmVDb21w
b25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmluZXMgdGhlIGFj
dGlvbnMgaGFwcGVuaW5nIGJlZm9yZSBldmFsdWF0ZSBhY3RpdmUgbWVzaCBjaGVja3MuCisgICAg
ICAgICAqLworICAgICAgICBfdGhpcy5fYmVmb3JlRXZhbHVhdGVBY3RpdmVNZXNoU3RhZ2UgPSBf
c2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3Jl
YXRlKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmlu
ZXMgdGhlIGFjdGlvbnMgaGFwcGVuaW5nIGR1cmluZyB0aGUgZXZhbHVhdGUgc3ViIG1lc2ggY2hl
Y2tzLgorICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2V2YWx1YXRlU3ViTWVzaFN0YWdlID0g
X3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJTdGFnZSJdLkNy
ZWF0ZSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKiBEZWZp
bmVzIHRoZSBhY3Rpb25zIGhhcHBlbmluZyBkdXJpbmcgdGhlIGFjdGl2ZSBtZXNoIHN0YWdlLgor
ICAgICAgICAgKi8KKyAgICAgICAgX3RoaXMuX2FjdGl2ZU1lc2hTdGFnZSA9IF9zY2VuZUNvbXBv
bmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2UiXS5DcmVhdGUoKTsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogRGVmaW5lcyB0aGUgYWN0
aW9ucyBoYXBwZW5pbmcgZHVyaW5nIHRoZSBwZXIgY2FtZXJhIHJlbmRlciB0YXJnZXQgc3RlcC4K
KyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9jYW1lcmFEcmF3UmVuZGVyVGFyZ2V0U3RhZ2Ug
PSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0u
Q3JlYXRlKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERl
ZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIHRoZSBhY3RpdmUgY2FtZXJh
IGlzIGRyYXdpbmcuCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fYmVmb3JlQ2FtZXJhRHJh
d1N0YWdlID0gX3NjZW5lQ29tcG9uZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJT
dGFnZSJdLkNyZWF0ZSgpOworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAg
ICAgKiBEZWZpbmVzIHRoZSBhY3Rpb25zIGhhcHBlbmluZyBqdXN0IGJlZm9yZSBhIHJlbmRlciB0
YXJnZXQgaXMgZHJhd2luZy4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9iZWZvcmVSZW5k
ZXJUYXJnZXREcmF3U3RhZ2UgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlk
ZGVuCisgICAgICAgICAqIERlZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVuaW5nIGp1c3QgYmVmb3Jl
IGEgcmVuZGVyaW5nIGdyb3VwIGlzIGRyYXdpbmcuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5fYmVmb3JlUmVuZGVyaW5nR3JvdXBEcmF3U3RhZ2UgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVu
aW5nIGp1c3QgYmVmb3JlIGEgbWVzaCBpcyBkcmF3aW5nLgorICAgICAgICAgKi8KKyAgICAgICAg
X3RoaXMuX2JlZm9yZVJlbmRlcmluZ01lc2hTdGFnZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2UiXS5DcmVhdGUoKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogRGVmaW5lcyB0aGUgYWN0aW9ucyBoYXBwZW5p
bmcganVzdCBhZnRlciBhIG1lc2ggaGFzIGJlZW4gZHJhd24uCisgICAgICAgICAqLworICAgICAg
ICBfdGhpcy5fYWZ0ZXJSZW5kZXJpbmdNZXNoU3RhZ2UgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVu
aW5nIGp1c3QgYWZ0ZXIgYSByZW5kZXJpbmcgZ3JvdXAgaGFzIGJlZW4gZHJhd24uCisgICAgICAg
ICAqLworICAgICAgICBfdGhpcy5fYWZ0ZXJSZW5kZXJpbmdHcm91cERyYXdTdGFnZSA9IF9zY2Vu
ZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2UiXS5DcmVhdGUo
KTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogRGVmaW5lcyB0
aGUgYWN0aW9ucyBoYXBwZW5pbmcganVzdCBhZnRlciB0aGUgYWN0aXZlIGNhbWVyYSBoYXMgYmVl
biBkcmF3bi4KKyAgICAgICAgICovCisgICAgICAgIF90aGlzLl9hZnRlckNhbWVyYURyYXdTdGFn
ZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2Ui
XS5DcmVhdGUoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICog
RGVmaW5lcyB0aGUgYWN0aW9ucyBoYXBwZW5pbmcganVzdCBhZnRlciBhIHJlbmRlciB0YXJnZXQg
aGFzIGJlZW4gZHJhd24uCisgICAgICAgICAqLworICAgICAgICBfdGhpcy5fYWZ0ZXJSZW5kZXJU
YXJnZXREcmF3U3RhZ2UgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAaGlkZGVu
CisgICAgICAgICAqIERlZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVuaW5nIGp1c3QgYWZ0ZXIgcmVu
ZGVyaW5nIGFsbCBjYW1lcmFzIGFuZCBjb21wdXRpbmcgaW50ZXJzZWN0aW9ucy4KKyAgICAgICAg
ICovCisgICAgICAgIF90aGlzLl9hZnRlclJlbmRlclN0YWdlID0gX3NjZW5lQ29tcG9uZW50X19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fWyJTdGFnZSJdLkNyZWF0ZSgpOworICAgICAgICAv
KioKKyAgICAgICAgICogQGhpZGRlbgorICAgICAgICAgKiBEZWZpbmVzIHRoZSBhY3Rpb25zIGhh
cHBlbmluZyB3aGVuIGEgcG9pbnRlciBtb3ZlIGV2ZW50IGhhcHBlbnMuCisgICAgICAgICAqLwor
ICAgICAgICBfdGhpcy5fcG9pbnRlck1vdmVTdGFnZSA9IF9zY2VuZUNvbXBvbmVudF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTlfX1siU3RhZ2UiXS5DcmVhdGUoKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEBoaWRkZW4KKyAgICAgICAgICogRGVmaW5lcyB0aGUgYWN0aW9ucyBoYXBwZW5p
bmcgd2hlbiBhIHBvaW50ZXIgZG93biBldmVudCBoYXBwZW5zLgorICAgICAgICAgKi8KKyAgICAg
ICAgX3RoaXMuX3BvaW50ZXJEb3duU3RhZ2UgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBAaGlkZGVuCisgICAgICAgICAqIERlZmluZXMgdGhlIGFjdGlvbnMgaGFwcGVuaW5nIHdo
ZW4gYSBwb2ludGVyIHVwIGV2ZW50IGhhcHBlbnMuCisgICAgICAgICAqLworICAgICAgICBfdGhp
cy5fcG9pbnRlclVwU3RhZ2UgPSBfc2NlbmVDb21wb25lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzE5X19bIlN0YWdlIl0uQ3JlYXRlKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBhbiBv
cHRpb25hbCBtYXAgZnJvbSBHZW9tZXRyeSBJZCB0byBHZW9tZXRyeSBpbmRleCBpbiB0aGUgJ2dl
b21ldHJpZXMnIGFycmF5CisgICAgICAgICAqLworICAgICAgICBfdGhpcy5nZW9tZXRyaWVzQnlV
bmlxdWVJZCA9IG51bGw7CisgICAgICAgIF90aGlzLl9kZWZhdWx0TWVzaENhbmRpZGF0ZXMgPSB7
CisgICAgICAgICAgICBkYXRhOiBbXSwKKyAgICAgICAgICAgIGxlbmd0aDogMAorICAgICAgICB9
OworICAgICAgICBfdGhpcy5fZGVmYXVsdFN1Yk1lc2hDYW5kaWRhdGVzID0geworICAgICAgICAg
ICAgZGF0YTogW10sCisgICAgICAgICAgICBsZW5ndGg6IDAKKyAgICAgICAgfTsKKyAgICAgICAg
X3RoaXMuX3ByZXZlbnRGcmVlQWN0aXZlTWVzaGVzQW5kUmVuZGVyaW5nR3JvdXBzID0gZmFsc2U7
CisgICAgICAgIF90aGlzLl9hY3RpdmVNZXNoZXNGcm96ZW4gPSBmYWxzZTsKKyAgICAgICAgLyoq
IEBoaWRkZW4gKi8KKyAgICAgICAgX3RoaXMuX2FsbG93UG9zdFByb2Nlc3NDbGVhckNvbG9yID0g
dHJ1ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzZXIgdXBkYXRhYmxlIGZ1bmN0aW9uIHRo
YXQgd2lsbCByZXR1cm4gYSBkZXRlcm1pbmlzdGljIGZyYW1lIHRpbWUgd2hlbiBlbmdpbmUgaXMg
aW4gZGV0ZXJtaW5pc3RpYyBsb2NrIHN0ZXAgbW9kZQorICAgICAgICAgKi8KKyAgICAgICAgX3Ro
aXMuZ2V0RGV0ZXJtaW5pc3RpY0ZyYW1lVGltZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiAxMDAwLjAgLyA2MC4wOyAvLyBmcmFtZSB0aW1lIGluIG1zCisgICAgICAgIH07Cisg
ICAgICAgIF90aGlzLl9ibG9ja01hdGVyaWFsRGlydHlNZWNoYW5pc20gPSBmYWxzZTsKKyAgICAg
ICAgX3RoaXMuX2VuZ2luZSA9IGVuZ2luZSB8fCBfRW5naW5lc19lbmdpbmVTdG9yZV9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMjNfX1siRW5naW5lU3RvcmUiXS5MYXN0Q3JlYXRlZEVuZ2luZTsK
KyAgICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnZpcnR1YWwpIHsKKyAgICAgICAgICAg
IF9FbmdpbmVzX2VuZ2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJFbmdp
bmVTdG9yZSJdLl9MYXN0Q3JlYXRlZFNjZW5lID0gX3RoaXM7CisgICAgICAgICAgICBfdGhpcy5f
ZW5naW5lLnNjZW5lcy5wdXNoKF90aGlzKTsKKyAgICAgICAgfQorICAgICAgICBfdGhpcy5fdWlk
ID0gbnVsbDsKKyAgICAgICAgX3RoaXMuX3JlbmRlcmluZ01hbmFnZXIgPSBuZXcgX1JlbmRlcmlu
Z19yZW5kZXJpbmdNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fWyJSZW5kZXJp
bmdNYW5hZ2VyIl0oX3RoaXMpOworICAgICAgICBpZiAoX1Bvc3RQcm9jZXNzZXNfcG9zdFByb2Nl
c3NNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fWyJQb3N0UHJvY2Vzc01hbmFn
ZXIiXSkgeworICAgICAgICAgICAgX3RoaXMucG9zdFByb2Nlc3NNYW5hZ2VyID0gbmV3IF9Qb3N0
UHJvY2Vzc2VzX3Bvc3RQcm9jZXNzTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdf
X1siUG9zdFByb2Nlc3NNYW5hZ2VyIl0oX3RoaXMpOworICAgICAgICB9CisgICAgICAgIGlmIChf
TWlzY19kb21NYW5hZ2VtZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fWyJEb21NYW5h
Z2VtZW50Il0uSXNXaW5kb3dPYmplY3RFeGlzdCgpKSB7CisgICAgICAgICAgICBfdGhpcy5hdHRh
Y2hDb250cm9sKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVW5pZm9ybSBCdWZmZXIKKyAgICAg
ICAgX3RoaXMuX2NyZWF0ZVVibygpOworICAgICAgICAvLyBEZWZhdWx0IEltYWdlIHByb2Nlc3Np
bmcgZGVmaW5pdGlvbgorICAgICAgICBpZiAoX01hdGVyaWFsc19pbWFnZVByb2Nlc3NpbmdDb25m
aWd1cmF0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fWyJJbWFnZVByb2Nlc3NpbmdD
b25maWd1cmF0aW9uIl0pIHsKKyAgICAgICAgICAgIF90aGlzLl9pbWFnZVByb2Nlc3NpbmdDb25m
aWd1cmF0aW9uID0gbmV3IF9NYXRlcmlhbHNfaW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlvbl9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX1siSW1hZ2VQcm9jZXNzaW5nQ29uZmlndXJhdGlv
biJdKCk7CisgICAgICAgIH0KKyAgICAgICAgX3RoaXMuc2V0RGVmYXVsdENhbmRpZGF0ZVByb3Zp
ZGVycygpOworICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVzZUdlb21ldHJ5VW5pcXVl
SWRzTWFwID09PSB0cnVlKSB7CisgICAgICAgICAgICBfdGhpcy5nZW9tZXRyaWVzQnlVbmlxdWVJ
ZCA9IHt9OworICAgICAgICB9CisgICAgICAgIF90aGlzLnVzZU1hdGVyaWFsTWVzaE1hcCA9IG9w
dGlvbnMgJiYgb3B0aW9ucy51c2VHZW9tZXRyeVVuaXF1ZUlkc01hcCB8fCBmYWxzZTsKKyAgICAg
ICAgX3RoaXMudXNlQ2xvbmVkTWVzaGhNYXAgPSBvcHRpb25zICYmIG9wdGlvbnMudXNlQ2xvbmVk
TWVzaGhNYXAgfHwgZmFsc2U7CisgICAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy52aXJ0
dWFsKSB7CisgICAgICAgICAgICBfdGhpcy5fZW5naW5lLm9uTmV3U2NlbmVBZGRlZE9ic2VydmFi
bGUubm90aWZ5T2JzZXJ2ZXJzKF90aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX3Ro
aXM7CisgICAgfQorICAgIC8qKgorICAgICAqIEZhY3RvcnkgdXNlZCB0byBjcmVhdGUgdGhlIGRl
ZmF1bHQgbWF0ZXJpYWwuCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1hdGVy
aWFsIHRvIGNyZWF0ZQorICAgICAqIEBwYXJhbSBzY2VuZSBUaGUgc2NlbmUgdG8gY3JlYXRlIHRo
ZSBtYXRlcmlhbCBmb3IKKyAgICAgKiBAcmV0dXJucyBUaGUgZGVmYXVsdCBtYXRlcmlhbAorICAg
ICAqLworICAgIFNjZW5lLkRlZmF1bHRNYXRlcmlhbEZhY3RvcnkgPSBmdW5jdGlvbiAoc2NlbmUp
IHsKKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzI0X19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIlN0YW5kYXJkTWF0ZXJpYWwiKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEZhY3RvcnkgdXNlZCB0byBjcmVhdGUgdGhlIGEgY29sbGlzaW9u
IGNvb3JkaW5hdG9yLgorICAgICAqIEByZXR1cm5zIFRoZSBjb2xsaXNpb24gY29vcmRpbmF0b3IK
KyAgICAgKi8KKyAgICBTY2VuZS5Db2xsaXNpb25Db29yZGluYXRvckZhY3RvcnkgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yNF9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJEZWZhdWx0Q29sbGlzaW9uQ29vcmRp
bmF0b3IiKTsKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5
cGUsICJlbnZpcm9ubWVudFRleHR1cmUiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUZXh0
dXJlIHVzZWQgaW4gYWxsIHBiciBtYXRlcmlhbCBhcyB0aGUgcmVmbGVjdGlvbiB0ZXh0dXJlLgor
ICAgICAgICAgKiBBcyBpbiB0aGUgbWFqb3JpdHkgb2YgdGhlIHNjZW5lIHRoZXkgYXJlIHRoZSBz
YW1lIChleGNlcHRpb24gZm9yIG11bHRpIHJvb20gYW5kIHNvIG9uKSwKKyAgICAgICAgICogdGhp
cyBpcyBlYXNpZXIgdG8gcmVmZXJlbmNlIGZyb20gaGVyZSB0aGFuIGZyb20gYWxsIHRoZSBtYXRl
cmlhbHMuCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudFRleHR1cmU7CisgICAgICAgIH0sCisgICAgICAg
IC8qKgorICAgICAgICAgKiBUZXh0dXJlIHVzZWQgaW4gYWxsIHBiciBtYXRlcmlhbCBhcyB0aGUg
cmVmbGVjdGlvbiB0ZXh0dXJlLgorICAgICAgICAgKiBBcyBpbiB0aGUgbWFqb3JpdHkgb2YgdGhl
IHNjZW5lIHRoZXkgYXJlIHRoZSBzYW1lIChleGNlcHRpb24gZm9yIG11bHRpIHJvb20gYW5kIHNv
IG9uKSwKKyAgICAgICAgICogdGhpcyBpcyBlYXNpZXIgdG8gc2V0IGhlcmUgdGhhbiBpbiBhbGwg
dGhlIG1hdGVyaWFscy4KKyAgICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fZW52aXJvbm1lbnRUZXh0dXJlID09PSB2YWx1ZSkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX2Vudmlyb25tZW50VGV4dHVyZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5tYXJrQWxs
TWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzIwX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX1RleHR1cmVEaXJ0eUZsYWcpOworICAgICAg
ICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRy
dWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmUucHJvdG90eXBlLCAi
ZW52aXJvbm1lbnRJbnRlbnNpdHkiLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBJbnRlbnNp
dHkgb2YgdGhlIGVudmlyb25tZW50IGluIGFsbCBwYnIgbWF0ZXJpYWwuCisgICAgICAgICAqIFRo
aXMgZGltcyBvciByZWluZm9yY2VzIHRoZSBJQkwgbGlnaHRpbmcgb3ZlcmFsbCAocmVmbGVjdGlv
biBhbmQgZGlmZnVzZSkuCisgICAgICAgICAqIEFzIGluIHRoZSBtYWpvcml0eSBvZiB0aGUgc2Nl
bmUgdGhleSBhcmUgdGhlIHNhbWUgKGV4Y2VwdGlvbiBmb3IgbXVsdGkgcm9vbSBhbmQgc28gb24p
LAorICAgICAgICAgKiB0aGlzIGlzIGVhc2llciB0byByZWZlcmVuY2UgZnJvbSBoZXJlIHRoYW4g
ZnJvbSBhbGwgdGhlIG1hdGVyaWFscy4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50SW50ZW5zaXR5Owor
ICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogSW50ZW5zaXR5IG9mIHRoZSBlbnZp
cm9ubWVudCBpbiBhbGwgcGJyIG1hdGVyaWFsLgorICAgICAgICAgKiBUaGlzIGRpbXMgb3IgcmVp
bmZvcmNlcyB0aGUgSUJMIGxpZ2h0aW5nIG92ZXJhbGwgKHJlZmxlY3Rpb24gYW5kIGRpZmZ1c2Up
LgorICAgICAgICAgKiBBcyBpbiB0aGUgbWFqb3JpdHkgb2YgdGhlIHNjZW5lIHRoZXkgYXJlIHRo
ZSBzYW1lIChleGNlcHRpb24gZm9yIG11bHRpIHJvb20gYW5kIHNvIG9uKSwKKyAgICAgICAgICog
dGhpcyBpcyBlYXNpZXIgdG8gc2V0IGhlcmUgdGhhbiBpbiBhbGwgdGhlIG1hdGVyaWFscy4KKyAg
ICAgICAgICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fZW52aXJvbm1lbnRJbnRlbnNpdHkgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZW52aXJvbm1lbnRJ
bnRlbnNpdHkgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMubWFya0FsbE1hdGVyaWFsc0FzRGly
dHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJDb25z
dGFudHMiXS5NQVRFUklBTF9UZXh0dXJlRGlydHlGbGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImltYWdlUHJvY2Vzc2lu
Z0NvbmZpZ3VyYXRpb24iLCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZhdWx0IGltYWdl
IHByb2Nlc3NpbmcgY29uZmlndXJhdGlvbiB1c2VkIGVpdGhlciBpbiB0aGUgcmVuZGVyaW5nCisg
ICAgICAgICAqIEZvcndhcmQgbWFpbiBwYXNzIG9yIHRocm91Z2ggdGhlIGltYWdlUHJvY2Vzc2lu
Z1Bvc3RQcm9jZXNzIGlmIHByZXNlbnQuCisgICAgICAgICAqIEFzIGluIHRoZSBtYWpvcml0eSBv
ZiB0aGUgc2NlbmUgdGhleSBhcmUgdGhlIHNhbWUgKGV4Y2VwdGlvbiBmb3IgbXVsdGkgY2FtZXJh
KSwKKyAgICAgICAgICogdGhpcyBpcyBlYXNpZXIgdG8gcmVmZXJlbmNlIGZyb20gaGVyZSB0aGFu
IGZyb20gYWxsIHRoZSBtYXRlcmlhbHMgYW5kIHBvc3QgcHJvY2Vzcy4KKyAgICAgICAgICoKKyAg
ICAgICAgICogTm8gc2V0dGVyIGFzIHdlIGl0IGlzIGEgc2hhcmVkIGNvbmZpZ3VyYXRpb24sIHlv
dSBjYW4gc2V0IHRoZSB2YWx1ZXMgaW5zdGVhZC4KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJvY2Vzc2luZ0Nv
bmZpZ3VyYXRpb247CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTY2VuZS5wcm90b3R5cGUsICJmb3JjZVdpcmVmcmFtZSIsIHsKKyAgICAgICAgZ2V0OiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9yY2VXaXJlZnJhbWU7CisgICAg
ICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGlu
ZGljYXRpbmcgaWYgYWxsIHJlbmRlcmluZyBtdXN0IGJlIGRvbmUgaW4gd2lyZWZyYW1lCisgICAg
ICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYg
KHRoaXMuX2ZvcmNlV2lyZWZyYW1lID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ZvcmNlV2lyZWZyYW1lID0gdmFs
dWU7CisgICAgICAgICAgICB0aGlzLm1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2Nv
bnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siQ29uc3RhbnRzIl0uTUFURVJJ
QUxfTWlzY0RpcnR5RmxhZyk7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShTY2VuZS5wcm90b3R5cGUsICJmb3JjZVBvaW50c0Nsb3VkIiwgeworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JjZVBvaW50c0Ns
b3VkOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIGlmIGFsbCByZW5kZXJpbmcgbXVzdCBiZSBkb25lIGluIHBvaW50
IGNsb3VkCisgICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX2ZvcmNlUG9pbnRzQ2xvdWQgPT09IHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZm9yY2VQ
b2ludHNDbG91ZCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5tYXJrQWxsTWF0ZXJpYWxzQXNE
aXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkNv
bnN0YW50cyJdLk1BVEVSSUFMX01pc2NEaXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBl
bnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmUucHJvdG90eXBlLCAiYW5pbWF0aW9uUHJvcGVy
dGllc092ZXJyaWRlIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRo
ZSBhbmltYXRpb24gcHJvcGVydGllcyBvdmVycmlkZQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5pbWF0aW9uUHJvcGVy
dGllc092ZXJyaWRlOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uUHJvcGVydGllc092ZXJyaWRlID0gdmFsdWU7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90
b3R5cGUsICJvbkRpc3Bvc2UiLCB7CisgICAgICAgIC8qKiBTZXRzIGEgZnVuY3Rpb24gdG8gYmUg
ZXhlY3V0ZWQgd2hlbiB0aGlzIHNjZW5lIGlzIGRpc3Bvc2VkLiAqLworICAgICAgICBzZXQ6IGZ1
bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX29uRGlzcG9zZU9ic2Vy
dmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vbkRpc3Bvc2VPYnNlcnZhYmxlLnJlbW92ZSh0
aGlzLl9vbkRpc3Bvc2VPYnNlcnZlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9vbkRpc3Bvc2VPYnNlcnZlciA9IHRoaXMub25EaXNwb3NlT2JzZXJ2YWJsZS5hZGQoY2FsbGJh
Y2spOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmUu
cHJvdG90eXBlLCAiYmVmb3JlUmVuZGVyIiwgeworICAgICAgICAvKiogU2V0cyBhIGZ1bmN0aW9u
IHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSByZW5kZXJpbmcgdGhpcyBzY2VuZSAqLworICAgICAgICBz
ZXQ6IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX29uQmVmb3Jl
UmVuZGVyT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQmVmb3JlUmVuZGVyT2Jz
ZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25CZWZvcmVSZW5kZXJPYnNlcnZlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9v
bkJlZm9yZVJlbmRlck9ic2VydmVyID0gdGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuYWRk
KGNhbGxiYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImFmdGVyUmVuZGVyIiwgeworICAgICAg
ICAvKiogU2V0cyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHJlbmRlcmluZyB0aGlz
IHNjZW5lICovCisgICAgICAgIHNldDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5fb25BZnRlclJlbmRlck9ic2VydmVyKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5vbkFmdGVyUmVuZGVyT2JzZXJ2YWJsZS5yZW1vdmUodGhpcy5fb25BZnRlclJlbmRlck9ic2Vy
dmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAg
ICAgICAgICAgIHRoaXMuX29uQWZ0ZXJSZW5kZXJPYnNlcnZlciA9IHRoaXMub25BZnRlclJlbmRl
ck9ic2VydmFibGUuYWRkKGNhbGxiYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
fSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImJlZm9yZUNh
bWVyYVJlbmRlciIsIHsKKyAgICAgICAgLyoqIFNldHMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRl
ZCBiZWZvcmUgcmVuZGVyaW5nIGEgY2FtZXJhKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoY2Fs
bGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2Vy
dmVyKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vbkJlZm9yZUNhbWVyYVJlbmRlck9ic2VydmFi
bGUucmVtb3ZlKHRoaXMuX29uQmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fb25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZlciA9IHRo
aXMub25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5cGUsICJh
ZnRlckNhbWVyYVJlbmRlciIsIHsKKyAgICAgICAgLyoqIFNldHMgYSBmdW5jdGlvbiB0byBiZSBl
eGVjdXRlZCBhZnRlciByZW5kZXJpbmcgYSBjYW1lcmEqLworICAgICAgICBzZXQ6IGZ1bmN0aW9u
IChjYWxsYmFjaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX29uQWZ0ZXJDYW1lcmFSZW5kZXJP
YnNlcnZlcikgeworICAgICAgICAgICAgICAgIHRoaXMub25BZnRlckNhbWVyYVJlbmRlck9ic2Vy
dmFibGUucmVtb3ZlKHRoaXMuX29uQWZ0ZXJDYW1lcmFSZW5kZXJPYnNlcnZlcik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLl9vbkFmdGVyQ2FtZXJhUmVuZGVyT2JzZXJ2ZXIgPSB0
aGlzLm9uQWZ0ZXJDYW1lcmFSZW5kZXJPYnNlcnZhYmxlLmFkZChjYWxsYmFjayk7CisgICAgICAg
IH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5cGUsICJ1
blRyYW5zbGF0ZWRQb2ludGVyIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUg
cG9pbnRlciBjb29yZGluYXRlcyB3aXRob3V0IGFueSB0cmFuc2xhdGlvbiAoaWUuIHN0cmFpZ2h0
IG91dCBvZiB0aGUgcG9pbnRlciBldmVudCkKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0TWFuYWdlci51blRyYW5z
bGF0ZWRQb2ludGVyOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoU2NlbmUsICJEcmFnTW92ZW1lbnRUaHJlc2hvbGQiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBHZXRzIG9yIHNldHMgdGhlIGRpc3RhbmNlIGluIHBpeGVsIHRoYXQgeW91IGhhdmUgdG8g
bW92ZSB0byBwcmV2ZW50IHNvbWUgZXZlbnRzLiBEZWZhdWx0IGlzIDEwIHBpeGVscworICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX0lu
cHV0c19zY2VuZV9pbnB1dE1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19bIklu
cHV0TWFuYWdlciJdLkRyYWdNb3ZlbWVudFRocmVzaG9sZDsKKyAgICAgICAgfSwKKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIF9JbnB1dHNfc2NlbmVfaW5wdXRN
YW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fWyJJbnB1dE1hbmFnZXIiXS5EcmFn
TW92ZW1lbnRUaHJlc2hvbGQgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFNjZW5lLCAiTG9uZ1ByZXNzRGVsYXkiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IHRvIHJhaXNlIGxvbmcgcHJl
c3MgZXZlbnRzIGlmIGJ1dHRvbiBpcyBzdGlsbCBwcmVzc2VkLiBEZWZhdWx0IGlzIDUwMCBtcwor
ICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gX0lucHV0c19zY2VuZV9pbnB1dE1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1
X19bIklucHV0TWFuYWdlciJdLkxvbmdQcmVzc0RlbGF5OworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgX0lucHV0c19zY2VuZV9pbnB1dE1h
bmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19bIklucHV0TWFuYWdlciJdLkxvbmdQ
cmVzc0RlbGF5ID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShTY2VuZSwgIkRvdWJsZUNsaWNrRGVsYXkiLCB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IHRvIHJhaXNlIGxvbmcgcHJlc3MgZXZl
bnRzIGlmIGJ1dHRvbiBpcyBzdGlsbCBwcmVzc2VkLiBEZWZhdWx0IGlzIDMwMCBtcworICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX0lu
cHV0c19zY2VuZV9pbnB1dE1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19bIklu
cHV0TWFuYWdlciJdLkRvdWJsZUNsaWNrRGVsYXk7CisgICAgICAgIH0sCisgICAgICAgIHNldDog
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBfSW5wdXRzX3NjZW5lX2lucHV0TWFuYWdl
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX1siSW5wdXRNYW5hZ2VyIl0uRG91YmxlQ2xp
Y2tEZWxheSA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAor
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoU2NlbmUsICJFeGNsdXNpdmVEb3VibGVDbGlja01vZGUiLCB7CisgICAgICAgIC8qKiBJ
ZiB5b3UgbmVlZCB0byBjaGVjayBkb3VibGUgY2xpY2sgd2l0aG91dCByYWlzaW5nIGEgc2luZ2xl
IGNsaWNrIGF0IGZpcnN0IGNsaWNrLCBlbmFibGUgdGhpcyBmbGFnICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF9JbnB1dHNfc2NlbmVfaW5wdXRNYW5h
Z2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNV9fWyJJbnB1dE1hbmFnZXIiXS5FeGNsdXNp
dmVEb3VibGVDbGlja01vZGU7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgICAgICAgICBfSW5wdXRzX3NjZW5lX2lucHV0TWFuYWdlcl9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMjVfX1siSW5wdXRNYW5hZ2VyIl0uRXhjbHVzaXZlRG91YmxlQ2xpY2tN
b2RlID0gdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShTY2VuZS5wcm90b3R5cGUsICJ1c2VSaWdodEhhbmRlZFN5c3RlbSIsIHsKKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlUmlnaHRIYW5kZWRT
eXN0ZW07CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgb3Igc2V0cyBh
IGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgc2NlbmUgbXVzdCB1c2UgcmlnaHQtaGFuZGVkIGNv
b3JkaW5hdGVzIHN5c3RlbQorICAgICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3VzZVJpZ2h0SGFuZGVkU3lzdGVtID09PSB2YWx1
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX3VzZVJpZ2h0SGFuZGVkU3lzdGVtID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLm1h
cmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjBfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfTWlzY0RpcnR5RmxhZyk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIC8qKgorICAgICAqIFNldHMgdGhlIHN0ZXAgSWQgdXNlZCBieSBk
ZXRlcm1pbmlzdGljIGxvY2sgc3RlcAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMu
Y29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1pbmlzdGljLWxvY2tzdGVwCisgICAgICog
QHBhcmFtIG5ld1N0ZXBJZCBkZWZpbmVzIHRoZSBzdGVwIElkCisgICAgICovCisgICAgU2NlbmUu
cHJvdG90eXBlLnNldFN0ZXBJZCA9IGZ1bmN0aW9uIChuZXdTdGVwSWQpIHsKKyAgICAgICAgdGhp
cy5fY3VycmVudFN0ZXBJZCA9IG5ld1N0ZXBJZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdl
dHMgdGhlIHN0ZXAgSWQgdXNlZCBieSBkZXRlcm1pbmlzdGljIGxvY2sgc3RlcAorICAgICAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1p
bmlzdGljLWxvY2tzdGVwCisgICAgICogQHJldHVybnMgdGhlIHN0ZXAgSWQKKyAgICAgKi8KKyAg
ICBTY2VuZS5wcm90b3R5cGUuZ2V0U3RlcElkID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fY3VycmVudFN0ZXBJZDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhl
IGludGVybmFsIHN0ZXAgdXNlZCBieSBkZXRlcm1pbmlzdGljIGxvY2sgc3RlcAorICAgICAqIEBz
ZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1p
bmlzdGljLWxvY2tzdGVwCisgICAgICogQHJldHVybnMgdGhlIGludGVybmFsIHN0ZXAKKyAgICAg
Ki8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0SW50ZXJuYWxTdGVwID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudEludGVybmFsU3RlcDsKKyAgICB9OworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5cGUsICJmb2dFbmFibGVkIiwgeworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb2dFbmFi
bGVkOworICAgICAgICB9LAorICAgICAgICAvKioKKyAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBi
b29sZWFuIGluZGljYXRpbmcgaWYgZm9nIGlzIGVuYWJsZWQgb24gdGhpcyBzY2VuZQorICAgICAg
ICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2JhYnlsb24xMDEvZW52aXJvbm1lbnQj
Zm9nCisgICAgICAgICogKERlZmF1bHQgaXMgdHJ1ZSkKKyAgICAgICAgKi8KKyAgICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9mb2dFbmFibGVkID09
PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX2ZvZ0VuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMubWFya0Fs
bE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yMF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9NaXNjRGlydHlGbGFnKTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImZv
Z01vZGUiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2ZvZ01vZGU7CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMg
b3Igc2V0cyB0aGUgZm9nIG1vZGUgdG8gdXNlCisgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJh
Ynlsb25qcy5jb20vYmFieWxvbjEwMS9lbnZpcm9ubWVudCNmb2cKKyAgICAgICAgKiB8IG1vZGUg
fCB2YWx1ZSB8CisgICAgICAgICogfCAtLS0gfCAtLS0gfAorICAgICAgICAqIHwgRk9HTU9ERV9O
T05FIHwgMCB8CisgICAgICAgICogfCBGT0dNT0RFX0VYUCB8IDEgfAorICAgICAgICAqIHwgRk9H
TU9ERV9FWFAyIHwgMiB8CisgICAgICAgICogfCBGT0dNT0RFX0xJTkVBUiB8IDMgfAorICAgICAg
ICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuX2ZvZ01vZGUgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZm9nTW9kZSA9IHZhbHVlOworICAgICAgICAgICAg
dGhpcy5tYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzIwX19bIkNvbnN0YW50cyJdLk1BVEVSSUFMX01pc2NEaXJ0eUZsYWcp
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmUucHJv
dG90eXBlLCAic2hhZG93c0VuYWJsZWQiLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRvd3NFbmFibGVkOworICAgICAgICB9LAorICAg
ICAgICAvKioKKyAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYg
c2hhZG93cyBhcmUgZW5hYmxlZCBvbiB0aGlzIHNjZW5lCisgICAgICAgICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fc2hhZG93c0VuYWJs
ZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5fc2hhZG93c0VuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRo
aXMubWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yMF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9MaWdodERpcnR5RmxhZyk7
CisgICAgICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90
b3R5cGUsICJsaWdodHNFbmFibGVkIiwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9saWdodHNFbmFibGVkOworICAgICAgICB9LAorICAgICAg
ICAvKioKKyAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgbGln
aHRzIGFyZSBlbmFibGVkIG9uIHRoaXMgc2NlbmUKKyAgICAgICAgKi8KKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9saWdodHNFbmFibGVkID09
PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX2xpZ2h0c0VuYWJsZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMubWFy
a0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yMF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9MaWdodERpcnR5RmxhZyk7CisgICAg
ICAgIH0sCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZQorICAgIH0pOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5cGUs
ICJhY3RpdmVDYW1lcmEiLCB7CisgICAgICAgIC8qKiBHZXRzIG9yIHNldHMgdGhlIGN1cnJlbnQg
YWN0aXZlIGNhbWVyYSAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9hY3RpdmVDYW1lcmE7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX2FjdGl2ZUNh
bWVyYSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX2FjdGl2ZUNhbWVyYSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5vbkFjdGl2
ZUNhbWVyYUNoYW5nZWQubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB9LAorICAgICAg
ICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmUucHJvdG90eXBlLCAiZGVmYXVsdE1hdGVy
aWFsIiwgeworICAgICAgICAvKiogVGhlIGRlZmF1bHQgbWF0ZXJpYWwgdXNlZCBvbiBtZXNoZXMg
d2hlbiBubyBtYXRlcmlhbCBpcyBhZmZlY3RlZCAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fZGVmYXVsdE1hdGVyaWFsKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5fZGVmYXVsdE1hdGVyaWFsID0gU2NlbmUuRGVmYXVsdE1hdGVyaWFsRmFjdG9y
eSh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0
TWF0ZXJpYWw7CisgICAgICAgIH0sCisgICAgICAgIC8qKiBUaGUgZGVmYXVsdCBtYXRlcmlhbCB1
c2VkIG9uIG1lc2hlcyB3aGVuIG5vIG1hdGVyaWFsIGlzIGFmZmVjdGVkICovCisgICAgICAgIHNl
dDogZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9kZWZhdWx0TWF0ZXJpYWwg
PSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNj
ZW5lLnByb3RvdHlwZSwgInRleHR1cmVzRW5hYmxlZCIsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXNFbmFibGVkOworICAgICAg
ICB9LAorICAgICAgICAvKioKKyAgICAgICAgKiBHZXRzIG9yIHNldHMgYSBib29sZWFuIGluZGlj
YXRpbmcgaWYgdGV4dHVyZXMgYXJlIGVuYWJsZWQgb24gdGhpcyBzY2VuZQorICAgICAgICAqLwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3Rl
eHR1cmVzRW5hYmxlZCA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl90ZXh0dXJlc0VuYWJsZWQgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHRoaXMubWFya0FsbE1hdGVyaWFsc0FzRGlydHkoX0VuZ2luZXNfY29uc3RhbnRz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJDb25zdGFudHMiXS5NQVRFUklBTF9UZXh0
dXJlRGlydHlGbGFnKTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFNjZW5lLnByb3RvdHlwZSwgInNrZWxldG9uc0VuYWJsZWQiLCB7CisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NrZWxldG9uc0VuYWJsZWQ7
CisgICAgICAgIH0sCisgICAgICAgIC8qKgorICAgICAgICAqIEdldHMgb3Igc2V0cyBhIGJvb2xl
YW4gaW5kaWNhdGluZyBpZiBza2VsZXRvbnMgYXJlIGVuYWJsZWQgb24gdGhpcyBzY2VuZQorICAg
ICAgICAqLworICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgaWYg
KHRoaXMuX3NrZWxldG9uc0VuYWJsZWQgPT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2tlbGV0b25zRW5hYmxlZCA9
IHZhbHVlOworICAgICAgICAgICAgdGhpcy5tYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eShfRW5naW5l
c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkNvbnN0YW50cyJdLk1B
VEVSSUFMX0F0dHJpYnV0ZXNEaXJ0eUZsYWcpOworICAgICAgICB9LAorICAgICAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoU2NlbmUucHJvdG90eXBlLCAiY29sbGlzaW9uQ29vcmRpbmF0b3Ii
LCB7CisgICAgICAgIC8qKiBAaGlkZGVuICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgaWYgKCF0aGlzLl9jb2xsaXNpb25Db29yZGluYXRvcikgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2NvbGxpc2lvbkNvb3JkaW5hdG9yID0gU2NlbmUuQ29sbGlzaW9uQ29vcmRp
bmF0b3JGYWN0b3J5KCk7CisgICAgICAgICAgICAgICAgdGhpcy5fY29sbGlzaW9uQ29vcmRpbmF0
b3IuaW5pdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9j
b2xsaXNpb25Db29yZGluYXRvcjsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImZydXN0dW1QbGFuZXMiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGZydXN0dW0gcGxhbmVzIChidWlsdCBmcm9t
IHRoZSBhY3RpdmUgY2FtZXJhKQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJ1c3R1bVBsYW5lczsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIHRoZSB0cmFuc2llbnQgY29tcG9uZW50
cyBpZiBuZWVkZWQuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLl9yZWdpc3RlclRyYW5z
aWVudENvbXBvbmVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIFJlZ2lzdGVyIGNvbXBv
bmVudHMgdGhhdCBoYXZlIGJlZW4gYXNzb2NpYXRlZCBsYXRlbHkgdG8gdGhlIHNjZW5lLgorICAg
ICAgICBpZiAodGhpcy5fdHJhbnNpZW50Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fdHJhbnNpZW50Q29tcG9uZW50czsgX2kg
PCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gX2Fb
X2ldOworICAgICAgICAgICAgICAgIGNvbXBvbmVudC5yZWdpc3RlcigpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5fdHJhbnNpZW50Q29tcG9uZW50cyA9IFtdOworICAgICAgICB9
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICogQWRkIGEgY29tcG9uZW50
IHRvIHRoZSBzY2VuZS4KKyAgICAgKiBOb3RlIHRoYXQgdGhlIGNjb21wb25lbnQgY291bGQgYmUg
cmVnaXN0ZXJlZCBvbiB0aCBuZXh0IGZyYW1lIGlmIHRoaXMgaXMgY2FsbGVkIGFmdGVyCisgICAg
ICogdGhlIHJlZ2lzdGVyIGNvbXBvbmVudCBzdGFnZS4KKyAgICAgKiBAcGFyYW0gY29tcG9uZW50
IERlZmluZXMgdGhlIGNvbXBvbmVudCB0byBhZGQgdG8gdGhlIHNjZW5lCisgICAgICovCisgICAg
U2NlbmUucHJvdG90eXBlLl9hZGRDb21wb25lbnQgPSBmdW5jdGlvbiAoY29tcG9uZW50KSB7Cisg
ICAgICAgIHRoaXMuX2NvbXBvbmVudHMucHVzaChjb21wb25lbnQpOworICAgICAgICB0aGlzLl90
cmFuc2llbnRDb21wb25lbnRzLnB1c2goY29tcG9uZW50KTsKKyAgICAgICAgdmFyIHNlcmlhbGl6
YWJsZUNvbXBvbmVudCA9IGNvbXBvbmVudDsKKyAgICAgICAgaWYgKHNlcmlhbGl6YWJsZUNvbXBv
bmVudC5hZGRGcm9tQ29udGFpbmVyICYmIHNlcmlhbGl6YWJsZUNvbXBvbmVudC5zZXJpYWxpemUp
IHsKKyAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6YWJsZUNvbXBvbmVudHMucHVzaChzZXJpYWxp
emFibGVDb21wb25lbnQpOworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlk
ZGVuCisgICAgICogR2V0cyBhIGNvbXBvbmVudCBmcm9tIHRoZSBzY2VuZS4KKyAgICAgKiBAcGFy
YW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQgdG8gcmV0cmlldmUKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY29tcG9uZW50IG9yIG51bGwgaWYgbm90IHByZXNlbnQKKyAgICAg
Ki8KKyAgICBTY2VuZS5wcm90b3R5cGUuX2dldENvbXBvbmVudCA9IGZ1bmN0aW9uIChuYW1lKSB7
CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9jb21wb25lbnRzOyBfaSA8IF9h
Lmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IF9hW19pXTsKKyAg
ICAgICAgICAgIGlmIChjb21wb25lbnQubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgICAg
IHJldHVybiBjb21wb25lbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgc3RyaW5nIGlkZW5maWZ5
aW5nIHRoZSBuYW1lIG9mIHRoZSBjbGFzcworICAgICAqIEByZXR1cm5zICJTY2VuZSIgc3RyaW5n
CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldENsYXNzTmFtZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuICJTY2VuZSI7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlk
ZGVuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLl9nZXREZWZhdWx0TWVzaENhbmRpZGF0
ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuX2RlZmF1bHRNZXNoQ2FuZGlkYXRlcy5k
YXRhID0gdGhpcy5tZXNoZXM7CisgICAgICAgIHRoaXMuX2RlZmF1bHRNZXNoQ2FuZGlkYXRlcy5s
ZW5ndGggPSB0aGlzLm1lc2hlcy5sZW5ndGg7CisgICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0
TWVzaENhbmRpZGF0ZXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBAaGlkZGVuCisgICAgICov
CisgICAgU2NlbmUucHJvdG90eXBlLl9nZXREZWZhdWx0U3ViTWVzaENhbmRpZGF0ZXMgPSBmdW5j
dGlvbiAobWVzaCkgeworICAgICAgICB0aGlzLl9kZWZhdWx0U3ViTWVzaENhbmRpZGF0ZXMuZGF0
YSA9IG1lc2guc3ViTWVzaGVzOworICAgICAgICB0aGlzLl9kZWZhdWx0U3ViTWVzaENhbmRpZGF0
ZXMubGVuZ3RoID0gbWVzaC5zdWJNZXNoZXMubGVuZ3RoOworICAgICAgICByZXR1cm4gdGhpcy5f
ZGVmYXVsdFN1Yk1lc2hDYW5kaWRhdGVzOworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0
aGUgZGVmYXVsdCBjYW5kaWRhdGUgcHJvdmlkZXJzIGZvciB0aGUgc2NlbmUuCisgICAgICogVGhp
cyBzZXRzIHRoZSBnZXRBY3RpdmVNZXNoQ2FuZGlkYXRlcywgZ2V0QWN0aXZlU3ViTWVzaENhbmRp
ZGF0ZXMsIGdldEludGVyc2VjdGluZ1N1Yk1lc2hDYW5kaWRhdGVzCisgICAgICogYW5kIGdldENv
bGxpZGluZ1N1Yk1lc2hDYW5kaWRhdGVzIHRvIHRoZWlyIGRlZmF1bHQgZnVuY3Rpb24KKyAgICAg
Ki8KKyAgICBTY2VuZS5wcm90b3R5cGUuc2V0RGVmYXVsdENhbmRpZGF0ZVByb3ZpZGVycyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5nZXRBY3RpdmVNZXNoQ2FuZGlkYXRlcyA9IHRoaXMu
X2dldERlZmF1bHRNZXNoQ2FuZGlkYXRlcy5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLmdldEFj
dGl2ZVN1Yk1lc2hDYW5kaWRhdGVzID0gdGhpcy5fZ2V0RGVmYXVsdFN1Yk1lc2hDYW5kaWRhdGVz
LmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuZ2V0SW50ZXJzZWN0aW5nU3ViTWVzaENhbmRpZGF0
ZXMgPSB0aGlzLl9nZXREZWZhdWx0U3ViTWVzaENhbmRpZGF0ZXMuYmluZCh0aGlzKTsKKyAgICAg
ICAgdGhpcy5nZXRDb2xsaWRpbmdTdWJNZXNoQ2FuZGlkYXRlcyA9IHRoaXMuX2dldERlZmF1bHRT
dWJNZXNoQ2FuZGlkYXRlcy5iaW5kKHRoaXMpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgIm1lc2hVbmRlclBvaW50ZXIiLCB7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBHZXRzIHRoZSBtZXNoIHRoYXQgaXMgY3VycmVudGx5IHVuZGVyIHRoZSBw
b2ludGVyCisgICAgICAgICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9pbnB1dE1hbmFnZXIubWVzaFVuZGVyUG9pbnRlcjsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
CisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgInBv
aW50ZXJYIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBjdXJy
ZW50IG9uLXNjcmVlbiBYIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyCisgICAgICAgICAqLworICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dE1h
bmFnZXIucG9pbnRlclg7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB0aGlzLl9pbnB1dE1hbmFnZXIucG9pbnRlclggPSB2YWx1ZTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlw
ZSwgInBvaW50ZXJZIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBvciBzZXRzIHRo
ZSBjdXJyZW50IG9uLXNjcmVlbiBZIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyCisgICAgICAgICAq
LworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9p
bnB1dE1hbmFnZXIucG9pbnRlclk7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9pbnB1dE1hbmFnZXIucG9pbnRlclkgPSB2YWx1
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY2FjaGVkIG1h
dGVyaWFsIChpZS4gdGhlIGxhdGVzdCByZW5kZXJlZCBvbmUpCisgICAgICogQHJldHVybnMgdGhl
IGNhY2hlZCBtYXRlcmlhbAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRDYWNoZWRN
YXRlcmlhbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZE1hdGVy
aWFsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY2FjaGVkIGVmZmVjdCAoaWUu
IHRoZSBsYXRlc3QgcmVuZGVyZWQgb25lKQorICAgICAqIEByZXR1cm5zIHRoZSBjYWNoZWQgZWZm
ZWN0CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldENhY2hlZEVmZmVjdCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZEVmZmVjdDsKKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldHMgdGhlIGNhY2hlZCB2aXNpYmlsaXR5IHN0YXRlIChpZS4gdGhlIGxh
dGVzdCByZW5kZXJlZCBvbmUpCisgICAgICogQHJldHVybnMgdGhlIGNhY2hlZCB2aXNpYmlsaXR5
IHN0YXRlCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldENhY2hlZFZpc2liaWxpdHkg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5Owor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUg
Y3VycmVudCBtYXRlcmlhbCAvIGVmZmVjdCAvIHZpc2liaWxpdHkgbXVzdCBiZSBiaW5kIGFnYWlu
CisgICAgICogQHBhcmFtIG1hdGVyaWFsIGRlZmluZXMgdGhlIGN1cnJlbnQgbWF0ZXJpYWwKKyAg
ICAgKiBAcGFyYW0gZWZmZWN0IGRlZmluZXMgdGhlIGN1cnJlbnQgZWZmZWN0CisgICAgICogQHBh
cmFtIHZpc2liaWxpdHkgZGVmaW5lcyB0aGUgY3VycmVudCB2aXNpYmlsaXR5IHN0YXRlCisgICAg
ICogQHJldHVybnMgdHJ1ZSBpZiBvbmUgcGFyYW1ldGVyIGlzIG5vdCBjYWNoZWQKKyAgICAgKi8K
KyAgICBTY2VuZS5wcm90b3R5cGUuaXNDYWNoZWRNYXRlcmlhbEludmFsaWQgPSBmdW5jdGlvbiAo
bWF0ZXJpYWwsIGVmZmVjdCwgdmlzaWJpbGl0eSkgeworICAgICAgICBpZiAodmlzaWJpbGl0eSA9
PT0gdm9pZCAwKSB7IHZpc2liaWxpdHkgPSAxOyB9CisgICAgICAgIHJldHVybiB0aGlzLl9jYWNo
ZWRFZmZlY3QgIT09IGVmZmVjdCB8fCB0aGlzLl9jYWNoZWRNYXRlcmlhbCAhPT0gbWF0ZXJpYWwg
fHwgdGhpcy5fY2FjaGVkVmlzaWJpbGl0eSAhPT0gdmlzaWJpbGl0eTsKKyAgICB9OworICAgIC8q
KgorICAgICAqIEdldHMgdGhlIGVuZ2luZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNjZW5lCisgICAg
ICogQHJldHVybnMgYW4gRW5naW5lCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldEVu
Z2luZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuZ2luZTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlcyByZW5k
ZXJlZCBwZXIgZnJhbWUKKyAgICAgKiBAcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIHZlcnRp
Y2VzIHJlbmRlcmVkIHBlciBmcmFtZQorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRU
b3RhbFZlcnRpY2VzID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdG90YWxW
ZXJ0aWNlcy5jdXJyZW50OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5l
LnByb3RvdHlwZSwgInRvdGFsVmVydGljZXNQZXJmQ291bnRlciIsIHsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdldHMgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgZm9yIHRvdGFsIHZlcnRpY2Vz
CisgICAgICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29tL2hvd190by9vcHRpbWl6
aW5nX3lvdXJfc2NlbmUjaW5zdHJ1bWVudGF0aW9uCisgICAgICAgICAqLworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90b3RhbFZlcnRpY2VzOwor
ICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0b3RhbCBudW1iZXIg
b2YgYWN0aXZlIGluZGljZXMgcmVuZGVyZWQgcGVyIGZyYW1lIChZb3UgY2FuIGRlZHVjZSB0aGUg
bnVtYmVyIG9mIHJlbmRlcmVkIHRyaWFuZ2xlcyBieSBkaXZpZGluZyB0aGlzIG51bWJlciBieSAz
KQorICAgICAqIEByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYWN0aXZlIGluZGljZXMgcmVu
ZGVyZWQgcGVyIGZyYW1lCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldEFjdGl2ZUlu
ZGljZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVJbmRpY2Vz
LmN1cnJlbnQ7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NlbmUucHJvdG90
eXBlLCAidG90YWxBY3RpdmVJbmRpY2VzUGVyZkNvdW50ZXIiLCB7CisgICAgICAgIC8qKgorICAg
ICAgICAgKiBHZXRzIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIGZvciBhY3RpdmUgaW5kaWNlcwor
ICAgICAgICAgKiBAc2VlIGh0dHA6Ly9kb2MuYmFieWxvbmpzLmNvbS9ob3dfdG8vb3B0aW1pemlu
Z195b3VyX3NjZW5lI2luc3RydW1lbnRhdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlSW5kaWNlczsKKyAg
ICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdG90YWwgbnVtYmVyIG9m
IGFjdGl2ZSBwYXJ0aWNsZXMgcmVuZGVyZWQgcGVyIGZyYW1lCisgICAgICogQHJldHVybnMgdGhl
IHRvdGFsIG51bWJlciBvZiBhY3RpdmUgcGFydGljbGVzIHJlbmRlcmVkIHBlciBmcmFtZQorICAg
ICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRBY3RpdmVQYXJ0aWNsZXMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYXJ0aWNsZXMuY3VycmVudDsKKyAgICB9
OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5cGUsICJhY3RpdmVQYXJ0
aWNsZXNQZXJmQ291bnRlciIsIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgdGhlIHBl
cmZvcm1hbmNlIGNvdW50ZXIgZm9yIGFjdGl2ZSBwYXJ0aWNsZXMKKyAgICAgICAgICogQHNlZSBo
dHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL29wdGltaXppbmdfeW91cl9zY2VuZSNpbnN0
cnVtZW50YXRpb24KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhcnRpY2xlczsKKyAgICAgICAgfSwKKyAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7
CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdG90YWwgbnVtYmVyIG9mIGFjdGl2ZSBib25lcyBy
ZW5kZXJlZCBwZXIgZnJhbWUKKyAgICAgKiBAcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGFj
dGl2ZSBib25lcyByZW5kZXJlZCBwZXIgZnJhbWUKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5
cGUuZ2V0QWN0aXZlQm9uZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9h
Y3RpdmVCb25lcy5jdXJyZW50OworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNj
ZW5lLnByb3RvdHlwZSwgImFjdGl2ZUJvbmVzUGVyZkNvdW50ZXIiLCB7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZXRzIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIGZvciBhY3RpdmUgYm9uZXMK
KyAgICAgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vaG93X3RvL29wdGltaXpp
bmdfeW91cl9zY2VuZSNpbnN0cnVtZW50YXRpb24KKyAgICAgICAgICovCisgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUJvbmVzOworICAg
ICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6
IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBhcnJheSBvZiBhY3RpdmUg
bWVzaGVzCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgQWJzdHJhY3RNZXNoCisgICAgICov
CisgICAgU2NlbmUucHJvdG90eXBlLmdldEFjdGl2ZU1lc2hlcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU1lc2hlczsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEdldHMgdGhlIGFuaW1hdGlvbiByYXRpbyAod2hpY2ggaXMgMS4wIGlzIHRoZSBzY2VuZSByZW5k
ZXJzIGF0IDYwZnBzIGFuZCAyIGlmIHRoZSBzY2VuZSByZW5kZXJzIGF0IDMwZnBzLCBldGMuKQor
ICAgICAqIEByZXR1cm5zIGEgbnVtYmVyCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdl
dEFuaW1hdGlvblJhdGlvID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYW5p
bWF0aW9uUmF0aW8gIT09IHVuZGVmaW5lZCA/IHRoaXMuX2FuaW1hdGlvblJhdGlvIDogMTsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIEdldHMgYW4gdW5pcXVlIElkIGZvciB0aGUgY3VycmVudCBy
ZW5kZXIgcGhhc2UKKyAgICAgKiBAcmV0dXJucyBhIG51bWJlcgorICAgICAqLworICAgIFNjZW5l
LnByb3RvdHlwZS5nZXRSZW5kZXJJZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX3JlbmRlcklkOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhbiB1bmlxdWUgSWQg
Zm9yIHRoZSBjdXJyZW50IGZyYW1lCisgICAgICogQHJldHVybnMgYSBudW1iZXIKKyAgICAgKi8K
KyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0RnJhbWVJZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2ZyYW1lSWQ7CisgICAgfTsKKyAgICAvKiogQ2FsbCB0aGlzIGZ1bmN0aW9u
IGlmIHlvdSB3YW50IHRvIG1hbnVhbGx5IGluY3JlbWVudCB0aGUgcmVuZGVyIElkKi8KKyAgICBT
Y2VuZS5wcm90b3R5cGUuaW5jcmVtZW50UmVuZGVySWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX3JlbmRlcklkKys7CisgICAgfTsKKyAgICBTY2VuZS5wcm90b3R5cGUuX2NyZWF0ZVVi
byA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5fc2NlbmVVYm8gPSBuZXcgX01hdGVyaWFs
c191bmlmb3JtQnVmZmVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fWyJVbmlmb3JtQnVm
ZmVyIl0odGhpcy5fZW5naW5lLCB1bmRlZmluZWQsIHRydWUpOworICAgICAgICB0aGlzLl9zY2Vu
ZVViby5hZGRVbmlmb3JtKCJ2aWV3UHJvamVjdGlvbiIsIDE2KTsKKyAgICAgICAgdGhpcy5fc2Nl
bmVVYm8uYWRkVW5pZm9ybSgidmlldyIsIDE2KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIFVz
ZSB0aGlzIG1ldGhvZCB0byBzaW11bGF0ZSBhIHBvaW50ZXIgbW92ZSBvbiBhIG1lc2gKKyAgICAg
KiBUaGUgcGlja1Jlc3VsdCBwYXJhbWV0ZXIgY2FuIGJlIG9idGFpbmVkIGZyb20gYSBzY2VuZS5w
aWNrIG9yIHNjZW5lLnBpY2tXaXRoUmF5CisgICAgICogQHBhcmFtIHBpY2tSZXN1bHQgcGlja2lu
Z0luZm8gb2YgdGhlIG9iamVjdCB3aXNoZWQgdG8gc2ltdWxhdGUgcG9pbnRlciBldmVudCBvbgor
ICAgICAqIEBwYXJhbSBwb2ludGVyRXZlbnRJbml0IHBvaW50ZXIgZXZlbnQgc3RhdGUgdG8gYmUg
dXNlZCB3aGVuIHNpbXVsYXRpbmcgdGhlIHBvaW50ZXIgZXZlbnQgKGVnLiBwb2ludGVyIGlkIGZv
ciBtdWx0aXRvdWNoKQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHNjZW5lCisgICAgICov
CisgICAgU2NlbmUucHJvdG90eXBlLnNpbXVsYXRlUG9pbnRlck1vdmUgPSBmdW5jdGlvbiAocGlj
a1Jlc3VsdCwgcG9pbnRlckV2ZW50SW5pdCkgeworICAgICAgICB0aGlzLl9pbnB1dE1hbmFnZXIu
c2ltdWxhdGVQb2ludGVyTW92ZShwaWNrUmVzdWx0LCBwb2ludGVyRXZlbnRJbml0KTsKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVc2UgdGhpcyBtZXRob2Qg
dG8gc2ltdWxhdGUgYSBwb2ludGVyIGRvd24gb24gYSBtZXNoCisgICAgICogVGhlIHBpY2tSZXN1
bHQgcGFyYW1ldGVyIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGEgc2NlbmUucGljayBvciBzY2VuZS5w
aWNrV2l0aFJheQorICAgICAqIEBwYXJhbSBwaWNrUmVzdWx0IHBpY2tpbmdJbmZvIG9mIHRoZSBv
YmplY3Qgd2lzaGVkIHRvIHNpbXVsYXRlIHBvaW50ZXIgZXZlbnQgb24KKyAgICAgKiBAcGFyYW0g
cG9pbnRlckV2ZW50SW5pdCBwb2ludGVyIGV2ZW50IHN0YXRlIHRvIGJlIHVzZWQgd2hlbiBzaW11
bGF0aW5nIHRoZSBwb2ludGVyIGV2ZW50IChlZy4gcG9pbnRlciBpZCBmb3IgbXVsdGl0b3VjaCkK
KyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBzY2VuZQorICAgICAqLworICAgIFNjZW5lLnBy
b3RvdHlwZS5zaW11bGF0ZVBvaW50ZXJEb3duID0gZnVuY3Rpb24gKHBpY2tSZXN1bHQsIHBvaW50
ZXJFdmVudEluaXQpIHsKKyAgICAgICAgdGhpcy5faW5wdXRNYW5hZ2VyLnNpbXVsYXRlUG9pbnRl
ckRvd24ocGlja1Jlc3VsdCwgcG9pbnRlckV2ZW50SW5pdCk7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH07CisgICAgLyoqCisgICAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNpbXVsYXRlIGEg
cG9pbnRlciB1cCBvbiBhIG1lc2gKKyAgICAgKiBUaGUgcGlja1Jlc3VsdCBwYXJhbWV0ZXIgY2Fu
IGJlIG9idGFpbmVkIGZyb20gYSBzY2VuZS5waWNrIG9yIHNjZW5lLnBpY2tXaXRoUmF5CisgICAg
ICogQHBhcmFtIHBpY2tSZXN1bHQgcGlja2luZ0luZm8gb2YgdGhlIG9iamVjdCB3aXNoZWQgdG8g
c2ltdWxhdGUgcG9pbnRlciBldmVudCBvbgorICAgICAqIEBwYXJhbSBwb2ludGVyRXZlbnRJbml0
IHBvaW50ZXIgZXZlbnQgc3RhdGUgdG8gYmUgdXNlZCB3aGVuIHNpbXVsYXRpbmcgdGhlIHBvaW50
ZXIgZXZlbnQgKGVnLiBwb2ludGVyIGlkIGZvciBtdWx0aXRvdWNoKQorICAgICAqIEBwYXJhbSBk
b3VibGVUYXAgaW5kaWNhdGVzIHRoYXQgdGhlIHBvaW50ZXIgdXAgZXZlbnQgc2hvdWxkIGJlIGNv
bnNpZGVyZWQgYXMgcGFydCBvZiBhIGRvdWJsZSBjbGljayAoZmFsc2UgYnkgZGVmYXVsdCkKKyAg
ICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBzY2VuZQorICAgICAqLworICAgIFNjZW5lLnByb3Rv
dHlwZS5zaW11bGF0ZVBvaW50ZXJVcCA9IGZ1bmN0aW9uIChwaWNrUmVzdWx0LCBwb2ludGVyRXZl
bnRJbml0LCBkb3VibGVUYXApIHsKKyAgICAgICAgdGhpcy5faW5wdXRNYW5hZ2VyLnNpbXVsYXRl
UG9pbnRlclVwKHBpY2tSZXN1bHQsIHBvaW50ZXJFdmVudEluaXQsIGRvdWJsZVRhcCk7CisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGJvb2xlYW4g
aW5kaWNhdGluZyBpZiB0aGUgY3VycmVudCBwb2ludGVyIGV2ZW50IGlzIGNhcHR1cmVkIChtZWFu
aW5nIHRoYXQgdGhlIHNjZW5lIGhhcyBhbHJlYWR5IGhhbmRsZWQgdGhlIHBvaW50ZXIgZG93bikK
KyAgICAgKiBAcGFyYW0gcG9pbnRlcklkIGRlZmluZXMgdGhlIHBvaW50ZXIgaWQgdG8gdXNlIGlu
IGEgbXVsdGktdG91Y2ggc2NlbmFyaW8gKDAgYnkgZGVmYXVsdCkKKyAgICAgKiBAcmV0dXJucyB0
cnVlIGlmIHRoZSBwb2ludGVyIHdhcyBjYXB0dXJlZAorICAgICAqLworICAgIFNjZW5lLnByb3Rv
dHlwZS5pc1BvaW50ZXJDYXB0dXJlZCA9IGZ1bmN0aW9uIChwb2ludGVySWQpIHsKKyAgICAgICAg
aWYgKHBvaW50ZXJJZCA9PT0gdm9pZCAwKSB7IHBvaW50ZXJJZCA9IDA7IH0KKyAgICAgICAgcmV0
dXJuIHRoaXMuX2lucHV0TWFuYWdlci5pc1BvaW50ZXJDYXB0dXJlZChwb2ludGVySWQpOworICAg
IH07CisgICAgLyoqCisgICAgKiBBdHRhY2ggZXZlbnRzIHRvIHRoZSBjYW52YXMgKFRvIGhhbmRs
ZSBhY3Rpb25NYW5hZ2VycyB0cmlnZ2VycyBhbmQgcmFpc2Ugb25Qb2ludGVyTW92ZSwgb25Qb2lu
dGVyRG93biBhbmQgb25Qb2ludGVyVXAKKyAgICAqIEBwYXJhbSBhdHRhY2hVcCBkZWZpbmVzIGlm
IHlvdSB3YW50IHRvIGF0dGFjaCBldmVudHMgdG8gcG9pbnRlcnVwCisgICAgKiBAcGFyYW0gYXR0
YWNoRG93biBkZWZpbmVzIGlmIHlvdSB3YW50IHRvIGF0dGFjaCBldmVudHMgdG8gcG9pbnRlcmRv
d24KKyAgICAqIEBwYXJhbSBhdHRhY2hNb3ZlIGRlZmluZXMgaWYgeW91IHdhbnQgdG8gYXR0YWNo
IGV2ZW50cyB0byBwb2ludGVybW92ZQorICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmF0dGFj
aENvbnRyb2wgPSBmdW5jdGlvbiAoYXR0YWNoVXAsIGF0dGFjaERvd24sIGF0dGFjaE1vdmUpIHsK
KyAgICAgICAgaWYgKGF0dGFjaFVwID09PSB2b2lkIDApIHsgYXR0YWNoVXAgPSB0cnVlOyB9Cisg
ICAgICAgIGlmIChhdHRhY2hEb3duID09PSB2b2lkIDApIHsgYXR0YWNoRG93biA9IHRydWU7IH0K
KyAgICAgICAgaWYgKGF0dGFjaE1vdmUgPT09IHZvaWQgMCkgeyBhdHRhY2hNb3ZlID0gdHJ1ZTsg
fQorICAgICAgICB0aGlzLl9pbnB1dE1hbmFnZXIuYXR0YWNoQ29udHJvbChhdHRhY2hVcCwgYXR0
YWNoRG93biwgYXR0YWNoTW92ZSk7CisgICAgfTsKKyAgICAvKiogRGV0YWNoZXMgYWxsIGV2ZW50
IGhhbmRsZXJzKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZGV0YWNoQ29udHJvbCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdGhpcy5faW5wdXRNYW5hZ2VyLmRldGFjaENvbnRyb2woKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBpZiB0aGUgc2NlbmUg
Y2FuIGJlIHJlbmRlcmVkICh0ZXh0dXJlcyBhcmUgbG9hZGVkLCBzaGFkZXJzIGFyZSBjb21waWxl
ZCkKKyAgICAgKiBEZWxheSBsb2FkZWQgcmVzb3VyY2VzIGFyZSBub3QgdGFraW5nIGluIGFjY291
bnQKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgYWxsIHJlcXVpcmVkIHJlc291cmNlcyBhcmUgcmVh
ZHkKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgaWYgKHRoaXMuX2lzRGlzcG9zZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgIHZhciBlbmdpbmUgPSB0
aGlzLmdldEVuZ2luZSgpOworICAgICAgICAvLyBFZmZlY3RzCisgICAgICAgIGlmICghZW5naW5l
LmFyZUFsbEVmZmVjdHNSZWFkeSgpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gUGVuZGluZyBkYXRhCisgICAgICAgIGlmICh0aGlzLl9wZW5kaW5n
RGF0YS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgLy8gTWVzaGVzCisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRoaXMu
bWVzaGVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLm1l
c2hlc1tpbmRleF07CisgICAgICAgICAgICBpZiAoIW1lc2guaXNFbmFibGVkKCkpIHsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbWVz
aC5zdWJNZXNoZXMgfHwgbWVzaC5zdWJNZXNoZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1lc2guaXNS
ZWFkeSh0cnVlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBoYXJkd2FyZUluc3RhbmNlZFJlbmRlcmluZyA9IG1lc2guZ2V0
Q2xhc3NOYW1lKCkgPT09ICJJbnN0YW5jZWRNZXNoIiB8fCBtZXNoLmdldENsYXNzTmFtZSgpID09
PSAiSW5zdGFuY2VkTGluZXNNZXNoIiB8fCBlbmdpbmUuZ2V0Q2FwcygpLmluc3RhbmNlZEFycmF5
cyAmJiBtZXNoLmluc3RhbmNlcy5sZW5ndGggPiAwOworICAgICAgICAgICAgLy8gSXMgUmVhZHkg
Rm9yIE1lc2gKKyAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9pc1JlYWR5
Rm9yTWVzaFN0YWdlOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgICAgIHZh
ciBzdGVwID0gX2FbX2ldOworICAgICAgICAgICAgICAgIGlmICghc3RlcC5hY3Rpb24obWVzaCwg
aGFyZHdhcmVJbnN0YW5jZWRSZW5kZXJpbmcpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgLy8gR2VvbWV0cmllcworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0aGlz
Lmdlb21ldHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgZ2VvbWV0cnkg
PSB0aGlzLmdlb21ldHJpZXNbaW5kZXhdOworICAgICAgICAgICAgaWYgKGdlb21ldHJ5LmRlbGF5
TG9hZFN0YXRlID09PSBfRW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzIwX19bIkNvbnN0YW50cyJdLkRFTEFZTE9BRFNUQVRFX0xPQURJTkcpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8g
UG9zdC1wcm9jZXNzZXMKKyAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FtZXJhcyAmJiB0aGlzLmFj
dGl2ZUNhbWVyYXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBf
YyA9IHRoaXMuYWN0aXZlQ2FtZXJhczsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHsKKyAgICAgICAg
ICAgICAgICB2YXIgY2FtZXJhID0gX2NbX2JdOworICAgICAgICAgICAgICAgIGlmICghY2FtZXJh
LmlzUmVhZHkodHJ1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
ICh0aGlzLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZUNhbWVy
YS5pc1JlYWR5KHRydWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFBhcnRpY2xlcworICAgICAgICBmb3IgKHZh
ciBfZCA9IDAsIF9lID0gdGhpcy5wYXJ0aWNsZVN5c3RlbXM7IF9kIDwgX2UubGVuZ3RoOyBfZCsr
KSB7CisgICAgICAgICAgICB2YXIgcGFydGljbGVTeXN0ZW0gPSBfZVtfZF07CisgICAgICAgICAg
ICBpZiAoIXBhcnRpY2xlU3lzdGVtLmlzUmVhZHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9OworICAgIC8qKiBSZXNldHMgYWxsIGNhY2hlZCBpbmZvcm1hdGlvbiByZWxhdGl2ZSB0
byBtYXRlcmlhbCAoaW5jbHVkaW5nIGVmZmVjdCBhbmQgdmlzaWJpbGl0eSkgKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUucmVzZXRDYWNoZWRNYXRlcmlhbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dGhpcy5fY2FjaGVkTWF0ZXJpYWwgPSBudWxsOworICAgICAgICB0aGlzLl9jYWNoZWRFZmZlY3Qg
PSBudWxsOworICAgICAgICB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5ID0gbnVsbDsKKyAgICB9Owor
ICAgIC8qKgorICAgICAqIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBiZWZvcmUg
ZXZlcnkgZnJhbWUgcmVuZGVyCisgICAgICogQHBhcmFtIGZ1bmMgZGVmaW5lcyB0aGUgZnVuY3Rp
b24gdG8gcmVnaXN0ZXIKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUucmVnaXN0ZXJCZWZv
cmVSZW5kZXIgPSBmdW5jdGlvbiAoZnVuYykgeworICAgICAgICB0aGlzLm9uQmVmb3JlUmVuZGVy
T2JzZXJ2YWJsZS5hZGQoZnVuYyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVbnJlZ2lzdGVy
cyBhIGZ1bmN0aW9uIGNhbGxlZCBiZWZvcmUgZXZlcnkgZnJhbWUgcmVuZGVyCisgICAgICogQHBh
cmFtIGZ1bmMgZGVmaW5lcyB0aGUgZnVuY3Rpb24gdG8gdW5yZWdpc3RlcgorICAgICAqLworICAg
IFNjZW5lLnByb3RvdHlwZS51bnJlZ2lzdGVyQmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKGZ1bmMp
IHsKKyAgICAgICAgdGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUucmVtb3ZlQ2FsbGJhY2so
ZnVuYyk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0byBi
ZSBjYWxsZWQgYWZ0ZXIgZXZlcnkgZnJhbWUgcmVuZGVyCisgICAgICogQHBhcmFtIGZ1bmMgZGVm
aW5lcyB0aGUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5
cGUucmVnaXN0ZXJBZnRlclJlbmRlciA9IGZ1bmN0aW9uIChmdW5jKSB7CisgICAgICAgIHRoaXMu
b25BZnRlclJlbmRlck9ic2VydmFibGUuYWRkKGZ1bmMpOworICAgIH07CisgICAgLyoqCisgICAg
ICogVW5yZWdpc3RlcnMgYSBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgZXZlcnkgZnJhbWUgcmVuZGVy
CisgICAgICogQHBhcmFtIGZ1bmMgZGVmaW5lcyB0aGUgZnVuY3Rpb24gdG8gdW5yZWdpc3Rlcgor
ICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS51bnJlZ2lzdGVyQWZ0ZXJSZW5kZXIgPSBmdW5j
dGlvbiAoZnVuYykgeworICAgICAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJPYnNlcnZhYmxlLnJlbW92
ZUNhbGxiYWNrKGZ1bmMpOworICAgIH07CisgICAgU2NlbmUucHJvdG90eXBlLl9leGVjdXRlT25j
ZUJlZm9yZVJlbmRlciA9IGZ1bmN0aW9uIChmdW5jKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRo
aXM7CisgICAgICAgIHZhciBleGVjRnVuYyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGZ1
bmMoKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgIF90aGlzLnVucmVnaXN0ZXJCZWZvcmVSZW5kZXIoZXhlY0Z1bmMpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH07CisgICAgICAgIHRoaXMucmVnaXN0ZXJCZWZvcmVSZW5kZXIoZXhlY0Z1
bmMpOworICAgIH07CisgICAgLyoqCisgICAgICogVGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHdpbGwg
cnVuIGJlZm9yZSByZW5kZXIgb25jZSBhbmQgd2lsbCBiZSBkaXNwb3NlZCBhZnRlcndhcmRzLgor
ICAgICAqIEEgdGltZW91dCBkZWxheSBjYW4gYmUgcHJvdmlkZWQgc28gdGhhdCB0aGUgZnVuY3Rp
b24gd2lsbCBiZSBleGVjdXRlZCBpbiBOIG1zLgorICAgICAqIFRoZSB0aW1lb3V0IGlzIHVzaW5n
IHRoZSBicm93c2VyJ3MgbmF0aXZlIHNldFRpbWVvdXQgc28gdGltZSBwZXJjaXNpb24gY2Fubm90
IGJlIGd1YXJhbnRlZWQuCisgICAgICogQHBhcmFtIGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGJlIGV4
ZWN1dGVkLgorICAgICAqIEBwYXJhbSB0aW1lb3V0IG9wdGlvbmFsIGRlbGF5IGluIG1zCisgICAg
ICovCisgICAgU2NlbmUucHJvdG90eXBlLmV4ZWN1dGVPbmNlQmVmb3JlUmVuZGVyID0gZnVuY3Rp
b24gKGZ1bmMsIHRpbWVvdXQpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAgICAg
aWYgKHRpbWVvdXQgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgc2V0VGltZW91dChmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgX3RoaXMuX2V4ZWN1dGVPbmNlQmVmb3JlUmVuZGVy
KGZ1bmMpOworICAgICAgICAgICAgfSwgdGltZW91dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICB0aGlzLl9leGVjdXRlT25jZUJlZm9yZVJlbmRlcihmdW5jKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTY2VuZS5wcm90b3R5cGUu
X2FkZFBlbmRpbmdEYXRhID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdGhpcy5fcGVuZGlu
Z0RhdGEucHVzaChkYXRhKTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgU2NlbmUu
cHJvdG90eXBlLl9yZW1vdmVQZW5kaW5nRGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAg
IHZhciB3YXNMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmc7CisgICAgICAgIHZhciBpbmRleCA9IHRo
aXMuX3BlbmRpbmdEYXRhLmluZGV4T2YoZGF0YSk7CisgICAgICAgIGlmIChpbmRleCAhPT0gLTEp
IHsKKyAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdEYXRhLnNwbGljZShpbmRleCwgMSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHdhc0xvYWRpbmcgJiYgIXRoaXMuaXNMb2FkaW5nKSB7CisgICAg
ICAgICAgICB0aGlzLm9uRGF0YUxvYWRlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMp
OworICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIg
b2YgaXRlbXMgd2FpdGluZyB0byBiZSBsb2FkZWQKKyAgICAgKiBAcmV0dXJucyB0aGUgbnVtYmVy
IG9mIGl0ZW1zIHdhaXRpbmcgdG8gYmUgbG9hZGVkCisgICAgICovCisgICAgU2NlbmUucHJvdG90
eXBlLmdldFdhaXRpbmdJdGVtc0NvdW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5fcGVuZGluZ0RhdGEubGVuZ3RoOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFNjZW5lLnByb3RvdHlwZSwgImlzTG9hZGluZyIsIHsKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHNjZW5lIGlzIHN0aWxsIGxv
YWRpbmcgZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0RhdGEubGVuZ3RoID4gMDsKKyAgICAgICAgfSwK
KyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgfSk7CisgICAgLyoqCisgICAgICogUmVnaXN0ZXJzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0
ZWQgd2hlbiB0aGUgc2NlbmUgaXMgcmVhZHkKKyAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5j
IC0gdGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkCisgICAgICovCisgICAgU2NlbmUucHJvdG90
eXBlLmV4ZWN1dGVXaGVuUmVhZHkgPSBmdW5jdGlvbiAoZnVuYykgeworICAgICAgICB2YXIgX3Ro
aXMgPSB0aGlzOworICAgICAgICB0aGlzLm9uUmVhZHlPYnNlcnZhYmxlLmFkZChmdW5jKTsKKyAg
ICAgICAgaWYgKHRoaXMuX2V4ZWN1dGVXaGVuUmVhZHlUaW1lb3V0SWQgIT09IC0xKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZXhlY3V0ZVdoZW5SZWFk
eVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgX3RoaXMu
X2NoZWNrSXNSZWFkeSgpOworICAgICAgICB9LCAxNTApOworICAgIH07CisgICAgLyoqCisgICAg
ICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzY2VuZSBpcyByZWFk
eQorICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNjZW5l
IGlzIHJlYWR5CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLndoZW5SZWFkeUFzeW5jID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworICAgICAgICByZXR1cm4g
bmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsKKyAgICAgICAgICAgIF90aGlzLmV4ZWN1
dGVXaGVuUmVhZHkoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgU2NlbmUucHJvdG90eXBlLl9jaGVja0lzUmVhZHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIHRoaXMuX3JlZ2lzdGVyVHJhbnNpZW50Q29tcG9u
ZW50cygpOworICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkpIHsKKyAgICAgICAgICAgIHRoaXMu
b25SZWFkeU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICAgICAgdGhp
cy5vblJlYWR5T2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICAgICAgdGhpcy5fZXhlY3V0ZVdo
ZW5SZWFkeVRpbWVvdXRJZCA9IC0xOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0aGlzLl9pc0Rpc3Bvc2VkKSB7CisgICAgICAgICAgICB0aGlzLm9uUmVhZHlP
YnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgICAgICB0aGlzLl9leGVjdXRlV2hlblJlYWR5VGlt
ZW91dElkID0gLTE7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fZXhlY3V0ZVdoZW5SZWFkeVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgX3RoaXMuX2NoZWNrSXNSZWFkeSgpOworICAgICAgICB9LCAxNTApOworICAg
IH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImFuaW1hdGFi
bGVzIiwgeworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyBhbGwgYW5pbWF0YWJsZSBhdHRh
Y2hlZCB0byB0aGUgc2NlbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUFuaW1hdGFibGVzOworICAgICAgICB9
LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IHRydWUK
KyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBSZXNldHMgdGhlIGxhc3QgYW5pbWF0aW9uIHRpbWUg
ZnJhbWUuCisgICAgICogVXNlZnVsIHRvIG92ZXJyaWRlIHdoZW4gYW5pbWF0aW9ucyBzdGFydCBy
dW5uaW5nIHdoZW4gbG9hZGluZyBhIHNjZW5lIGZvciB0aGUgZmlyc3QgdGltZS4KKyAgICAgKi8K
KyAgICBTY2VuZS5wcm90b3R5cGUucmVzZXRMYXN0QW5pbWF0aW9uVGltZUZyYW1lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB0aGlzLl9hbmltYXRpb25UaW1lTGFzdCA9IF9NaXNjX3ByZWNpc2lv
bkRhdGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siUHJlY2lzaW9uRGF0ZSJdLk5vdzsK
KyAgICB9OworICAgIC8vIE1hdHJpeAorICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQg
dmlldyBtYXRyaXgKKyAgICAgKiBAcmV0dXJucyBhIE1hdHJpeAorICAgICAqLworICAgIFNjZW5l
LnByb3RvdHlwZS5nZXRWaWV3TWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5fdmlld01hdHJpeDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJl
bnQgcHJvamVjdGlvbiBtYXRyaXgKKyAgICAgKiBAcmV0dXJucyBhIE1hdHJpeAorICAgICAqLwor
ICAgIFNjZW5lLnByb3RvdHlwZS5nZXRQcm9qZWN0aW9uTWF0cml4ID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbk1hdHJpeDsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEdldHMgdGhlIGN1cnJlbnQgdHJhbnNmb3JtIG1hdHJpeAorICAgICAqIEByZXR1cm5z
IGEgTWF0cml4IG1hZGUgb2YgVmlldyAqIFByb2plY3Rpb24KKyAgICAgKi8KKyAgICBTY2VuZS5w
cm90b3R5cGUuZ2V0VHJhbnNmb3JtTWF0cml4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fdHJhbnNmb3JtTWF0cml4OworICAgIH07CisgICAgLyoqCisgICAgICogU2V0cyB0
aGUgY3VycmVudCB0cmFuc2Zvcm0gbWF0cml4CisgICAgICogQHBhcmFtIHZpZXdMIGRlZmluZXMg
dGhlIFZpZXcgbWF0cml4IHRvIHVzZQorICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uTCBkZWZpbmVz
IHRoZSBQcm9qZWN0aW9uIG1hdHJpeCB0byB1c2UKKyAgICAgKiBAcGFyYW0gdmlld1IgZGVmaW5l
cyB0aGUgcmlnaHQgVmlldyBtYXRyaXggdG8gdXNlIChpZiBwcm92aWRlZCkKKyAgICAgKiBAcGFy
YW0gcHJvamVjdGlvblIgZGVmaW5lcyB0aGUgcmlnaHQgUHJvamVjdGlvbiBtYXRyaXggdG8gdXNl
IChpZiBwcm92aWRlZCkKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuc2V0VHJhbnNmb3Jt
TWF0cml4ID0gZnVuY3Rpb24gKHZpZXdMLCBwcm9qZWN0aW9uTCwgdmlld1IsIHByb2plY3Rpb25S
KSB7CisgICAgICAgIGlmICh0aGlzLl92aWV3VXBkYXRlRmxhZyA9PT0gdmlld0wudXBkYXRlRmxh
ZyAmJiB0aGlzLl9wcm9qZWN0aW9uVXBkYXRlRmxhZyA9PT0gcHJvamVjdGlvbkwudXBkYXRlRmxh
ZykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3ZpZXdV
cGRhdGVGbGFnID0gdmlld0wudXBkYXRlRmxhZzsKKyAgICAgICAgdGhpcy5fcHJvamVjdGlvblVw
ZGF0ZUZsYWcgPSBwcm9qZWN0aW9uTC51cGRhdGVGbGFnOworICAgICAgICB0aGlzLl92aWV3TWF0
cml4ID0gdmlld0w7CisgICAgICAgIHRoaXMuX3Byb2plY3Rpb25NYXRyaXggPSBwcm9qZWN0aW9u
TDsKKyAgICAgICAgdGhpcy5fdmlld01hdHJpeC5tdWx0aXBseVRvUmVmKHRoaXMuX3Byb2plY3Rp
b25NYXRyaXgsIHRoaXMuX3RyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgIC8vIFVwZGF0ZSBmcnVz
dHVtCisgICAgICAgIGlmICghdGhpcy5fZnJ1c3R1bVBsYW5lcykgeworICAgICAgICAgICAgdGhp
cy5fZnJ1c3R1bVBsYW5lcyA9IF9NYXRoc19tYXRoX2ZydXN0dW1fX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzI4X19bIkZydXN0dW0iXS5HZXRQbGFuZXModGhpcy5fdHJhbnNmb3JtTWF0cml4KTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX2ZydXN0
dW1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X19bIkZydXN0dW0iXS5HZXRQbGFuZXNUb1Jl
Zih0aGlzLl90cmFuc2Zvcm1NYXRyaXgsIHRoaXMuX2ZydXN0dW1QbGFuZXMpOworICAgICAgICB9
CisgICAgICAgIGlmICh0aGlzLl9tdWx0aXZpZXdTY2VuZVVibyAmJiB0aGlzLl9tdWx0aXZpZXdT
Y2VuZVViby51c2VVYm8pIHsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU11bHRpdmlld1Vibyh2
aWV3UiwgcHJvamVjdGlvblIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX3Nj
ZW5lVWJvLnVzZVVibykgeworICAgICAgICAgICAgdGhpcy5fc2NlbmVVYm8udXBkYXRlTWF0cml4
KCJ2aWV3UHJvamVjdGlvbiIsIHRoaXMuX3RyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgICAgICB0
aGlzLl9zY2VuZVViby51cGRhdGVNYXRyaXgoInZpZXciLCB0aGlzLl92aWV3TWF0cml4KTsKKyAg
ICAgICAgICAgIHRoaXMuX3NjZW5lVWJvLnVwZGF0ZSgpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBHZXRzIHRoZSB1bmlmb3JtIGJ1ZmZlciB1c2VkIHRvIHN0b3JlIHNjZW5l
IGRhdGEKKyAgICAgKiBAcmV0dXJucyBhIFVuaWZvcm1CdWZmZXIKKyAgICAgKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUuZ2V0U2NlbmVVbmlmb3JtQnVmZmVyID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5fbXVsdGl2aWV3U2NlbmVVYm8gPyB0aGlzLl9tdWx0aXZpZXdTY2VuZVVi
byA6IHRoaXMuX3NjZW5lVWJvOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhbiB1bmlx
dWUgKHJlbGF0aXZlbHkgdG8gdGhlIGN1cnJlbnQgc2NlbmUpIElkCisgICAgICogQHJldHVybnMg
YW4gdW5pcXVlIG51bWJlciBmb3IgdGhlIHNjZW5lCisgICAgICovCisgICAgU2NlbmUucHJvdG90
eXBlLmdldFVuaXF1ZUlkID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gX01pc2NfdW5p
cXVlSWRHZW5lcmF0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X19bIlVuaXF1ZUlkR2Vu
ZXJhdG9yIl0uVW5pcXVlSWQ7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGQgYSBtZXNoIHRv
IHRoZSBsaXN0IG9mIHNjZW5lJ3MgbWVzaGVzCisgICAgICogQHBhcmFtIG5ld01lc2ggZGVmaW5l
cyB0aGUgbWVzaCB0byBhZGQKKyAgICAgKiBAcGFyYW0gcmVjdXJzaXZlIGlmIGFsbCBjaGlsZCBt
ZXNoZXMgc2hvdWxkIGFsc28gYmUgYWRkZWQgdG8gdGhlIHNjZW5lCisgICAgICovCisgICAgU2Nl
bmUucHJvdG90eXBlLmFkZE1lc2ggPSBmdW5jdGlvbiAobmV3TWVzaCwgcmVjdXJzaXZlKSB7Cisg
ICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisgICAgICAgIGlmIChyZWN1cnNpdmUgPT09IHZvaWQg
MCkgeyByZWN1cnNpdmUgPSBmYWxzZTsgfQorICAgICAgICB0aGlzLm1lc2hlcy5wdXNoKG5ld01l
c2gpOworICAgICAgICBuZXdNZXNoLl9yZXN5bmNMaWdodFNvdXJjZXMoKTsKKyAgICAgICAgdGhp
cy5vbk5ld01lc2hBZGRlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKG5ld01lc2gpOworICAg
ICAgICBpZiAocmVjdXJzaXZlKSB7CisgICAgICAgICAgICBuZXdNZXNoLmdldENoaWxkTWVzaGVz
KCkuZm9yRWFjaChmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgICAgIF90aGlzLmFkZE1lc2go
bSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICog
UmVtb3ZlIGEgbWVzaCBmb3IgdGhlIGxpc3Qgb2Ygc2NlbmUncyBtZXNoZXMKKyAgICAgKiBAcGFy
YW0gdG9SZW1vdmUgZGVmaW5lcyB0aGUgbWVzaCB0byByZW1vdmUKKyAgICAgKiBAcGFyYW0gcmVj
dXJzaXZlIGlmIGFsbCBjaGlsZCBtZXNoZXMgc2hvdWxkIGFsc28gYmUgcmVtb3ZlZCBmcm9tIHRo
ZSBzY2VuZQorICAgICAqIEByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSB0aGUgbWVzaCB3YXMgaW4g
dGhlIG1lc2ggbGlzdAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5yZW1vdmVNZXNoID0g
ZnVuY3Rpb24gKHRvUmVtb3ZlLCByZWN1cnNpdmUpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhp
czsKKyAgICAgICAgaWYgKHJlY3Vyc2l2ZSA9PT0gdm9pZCAwKSB7IHJlY3Vyc2l2ZSA9IGZhbHNl
OyB9CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMubWVzaGVzLmluZGV4T2YodG9SZW1vdmUpOwor
ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICAvLyBSZW1vdmUgZnJvbSB0
aGUgc2NlbmUgaWYgbWVzaCBmb3VuZAorICAgICAgICAgICAgdGhpcy5tZXNoZXNbaW5kZXhdID0g
dGhpcy5tZXNoZXNbdGhpcy5tZXNoZXMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICB0aGlzLm1l
c2hlcy5wb3AoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uTWVzaFJlbW92ZWRPYnNlcnZh
YmxlLm5vdGlmeU9ic2VydmVycyh0b1JlbW92ZSk7CisgICAgICAgIGlmIChyZWN1cnNpdmUpIHsK
KyAgICAgICAgICAgIHRvUmVtb3ZlLmdldENoaWxkTWVzaGVzKCkuZm9yRWFjaChmdW5jdGlvbiAo
bSkgeworICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZU1lc2gobSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBBZGQgYSB0cmFuc2Zvcm0gbm9kZSB0byB0aGUgbGlzdCBvZiBzY2VuZSdzIHRyYW5zZm9y
bSBub2RlcworICAgICAqIEBwYXJhbSBuZXdUcmFuc2Zvcm1Ob2RlIGRlZmluZXMgdGhlIHRyYW5z
Zm9ybSBub2RlIHRvIGFkZAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5hZGRUcmFuc2Zv
cm1Ob2RlID0gZnVuY3Rpb24gKG5ld1RyYW5zZm9ybU5vZGUpIHsKKyAgICAgICAgbmV3VHJhbnNm
b3JtTm9kZS5faW5kZXhJblNjZW5lVHJhbnNmb3JtTm9kZXNBcnJheSA9IHRoaXMudHJhbnNmb3Jt
Tm9kZXMubGVuZ3RoOworICAgICAgICB0aGlzLnRyYW5zZm9ybU5vZGVzLnB1c2gobmV3VHJhbnNm
b3JtTm9kZSk7CisgICAgICAgIHRoaXMub25OZXdUcmFuc2Zvcm1Ob2RlQWRkZWRPYnNlcnZhYmxl
Lm5vdGlmeU9ic2VydmVycyhuZXdUcmFuc2Zvcm1Ob2RlKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlbW92ZSBhIHRyYW5zZm9ybSBub2RlIGZvciB0aGUgbGlzdCBvZiBzY2VuZSdzIHRyYW5z
Zm9ybSBub2RlcworICAgICAqIEBwYXJhbSB0b1JlbW92ZSBkZWZpbmVzIHRoZSB0cmFuc2Zvcm0g
bm9kZSB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgdGhlIHRyYW5z
Zm9ybSBub2RlIHdhcyBpbiB0aGUgdHJhbnNmb3JtIG5vZGUgbGlzdAorICAgICAqLworICAgIFNj
ZW5lLnByb3RvdHlwZS5yZW1vdmVUcmFuc2Zvcm1Ob2RlID0gZnVuY3Rpb24gKHRvUmVtb3ZlKSB7
CisgICAgICAgIHZhciBpbmRleCA9IHRvUmVtb3ZlLl9pbmRleEluU2NlbmVUcmFuc2Zvcm1Ob2Rl
c0FycmF5OworICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICBpZiAoaW5k
ZXggIT09IHRoaXMudHJhbnNmb3JtTm9kZXMubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAg
IHZhciBsYXN0Tm9kZSA9IHRoaXMudHJhbnNmb3JtTm9kZXNbdGhpcy50cmFuc2Zvcm1Ob2Rlcy5s
ZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybU5vZGVzW2luZGV4XSA9
IGxhc3ROb2RlOworICAgICAgICAgICAgICAgIGxhc3ROb2RlLl9pbmRleEluU2NlbmVUcmFuc2Zv
cm1Ob2Rlc0FycmF5ID0gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b1JlbW92
ZS5faW5kZXhJblNjZW5lVHJhbnNmb3JtTm9kZXNBcnJheSA9IC0xOworICAgICAgICAgICAgdGhp
cy50cmFuc2Zvcm1Ob2Rlcy5wb3AoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm9uVHJhbnNm
b3JtTm9kZVJlbW92ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0b1JlbW92ZSk7CisgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHNrZWxl
dG9uIGZvciB0aGUgbGlzdCBvZiBzY2VuZSdzIHNrZWxldG9ucworICAgICAqIEBwYXJhbSB0b1Jl
bW92ZSBkZWZpbmVzIHRoZSBza2VsZXRvbiB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUg
aW5kZXggd2hlcmUgdGhlIHNrZWxldG9uIHdhcyBpbiB0aGUgc2tlbGV0b24gbGlzdAorICAgICAq
LworICAgIFNjZW5lLnByb3RvdHlwZS5yZW1vdmVTa2VsZXRvbiA9IGZ1bmN0aW9uICh0b1JlbW92
ZSkgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnNrZWxldG9ucy5pbmRleE9mKHRvUmVtb3Zl
KTsKKyAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGZy
b20gdGhlIHNjZW5lIGlmIGZvdW5kCisgICAgICAgICAgICB0aGlzLnNrZWxldG9ucy5zcGxpY2Uo
aW5kZXgsIDEpOworICAgICAgICAgICAgdGhpcy5vblNrZWxldG9uUmVtb3ZlZE9ic2VydmFibGUu
bm90aWZ5T2JzZXJ2ZXJzKHRvUmVtb3ZlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5k
ZXg7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBtb3JwaCB0YXJnZXQgZm9yIHRo
ZSBsaXN0IG9mIHNjZW5lJ3MgbW9ycGggdGFyZ2V0cworICAgICAqIEBwYXJhbSB0b1JlbW92ZSBk
ZWZpbmVzIHRoZSBtb3JwaCB0YXJnZXQgdG8gcmVtb3ZlCisgICAgICogQHJldHVybnMgdGhlIGlu
ZGV4IHdoZXJlIHRoZSBtb3JwaCB0YXJnZXQgd2FzIGluIHRoZSBtb3JwaCB0YXJnZXQgbGlzdAor
ICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5yZW1vdmVNb3JwaFRhcmdldE1hbmFnZXIgPSBm
dW5jdGlvbiAodG9SZW1vdmUpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5tb3JwaFRhcmdl
dE1hbmFnZXJzLmluZGV4T2YodG9SZW1vdmUpOworICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7
CisgICAgICAgICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgc2NlbmUgaWYgZm91bmQKKyAgICAgICAg
ICAgIHRoaXMubW9ycGhUYXJnZXRNYW5hZ2Vycy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBh
IGxpZ2h0IGZvciB0aGUgbGlzdCBvZiBzY2VuZSdzIGxpZ2h0cworICAgICAqIEBwYXJhbSB0b1Jl
bW92ZSBkZWZpbmVzIHRoZSBsaWdodCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgaW5k
ZXggd2hlcmUgdGhlIGxpZ2h0IHdhcyBpbiB0aGUgbGlnaHQgbGlzdAorICAgICAqLworICAgIFNj
ZW5lLnByb3RvdHlwZS5yZW1vdmVMaWdodCA9IGZ1bmN0aW9uICh0b1JlbW92ZSkgeworICAgICAg
ICB2YXIgaW5kZXggPSB0aGlzLmxpZ2h0cy5pbmRleE9mKHRvUmVtb3ZlKTsKKyAgICAgICAgaWYg
KGluZGV4ICE9PSAtMSkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gbWVzaGVzCisgICAg
ICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5tZXNoZXM7IF9pIDwgX2EubGVuZ3Ro
OyBfaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBfYVtfaV07CisgICAgICAgICAg
ICAgICAgbWVzaC5fcmVtb3ZlTGlnaHRTb3VyY2UodG9SZW1vdmUsIGZhbHNlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBzY2VuZSBpZiBtZXNoIGZvdW5k
CisgICAgICAgICAgICB0aGlzLmxpZ2h0cy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAg
dGhpcy5zb3J0TGlnaHRzQnlQcmlvcml0eSgpOworICAgICAgICB9CisgICAgICAgIHRoaXMub25M
aWdodFJlbW92ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0b1JlbW92ZSk7CisgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIGNhbWVyYSBm
b3IgdGhlIGxpc3Qgb2Ygc2NlbmUncyBjYW1lcmFzCisgICAgICogQHBhcmFtIHRvUmVtb3ZlIGRl
ZmluZXMgdGhlIGNhbWVyYSB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUgaW5kZXggd2hl
cmUgdGhlIGNhbWVyYSB3YXMgaW4gdGhlIGNhbWVyYSBsaXN0CisgICAgICovCisgICAgU2NlbmUu
cHJvdG90eXBlLnJlbW92ZUNhbWVyYSA9IGZ1bmN0aW9uICh0b1JlbW92ZSkgeworICAgICAgICB2
YXIgaW5kZXggPSB0aGlzLmNhbWVyYXMuaW5kZXhPZih0b1JlbW92ZSk7CisgICAgICAgIGlmIChp
bmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBzY2VuZSBpZiBt
ZXNoIGZvdW5kCisgICAgICAgICAgICB0aGlzLmNhbWVyYXMuc3BsaWNlKGluZGV4LCAxKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBSZW1vdmUgZnJvbSBhY3RpdmVDYW1lcmFzCisgICAgICAgIHZh
ciBpbmRleDIgPSB0aGlzLmFjdGl2ZUNhbWVyYXMuaW5kZXhPZih0b1JlbW92ZSk7CisgICAgICAg
IGlmIChpbmRleDIgIT09IC0xKSB7CisgICAgICAgICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgc2Nl
bmUgaWYgbWVzaCBmb3VuZAorICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFzLnNwbGljZShp
bmRleDIsIDEpOworICAgICAgICB9CisgICAgICAgIC8vIFJlc2V0IHRoZSBhY3RpdmVDYW1lcmEK
KyAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FtZXJhID09PSB0b1JlbW92ZSkgeworICAgICAgICAg
ICAgaWYgKHRoaXMuY2FtZXJhcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5h
Y3RpdmVDYW1lcmEgPSB0aGlzLmNhbWVyYXNbMF07CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYSA9IG51bGw7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vbkNhbWVyYVJlbW92ZWRPYnNlcnZh
YmxlLm5vdGlmeU9ic2VydmVycyh0b1JlbW92ZSk7CisgICAgICAgIHJldHVybiBpbmRleDsKKyAg
ICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIHBhcnRpY2xlIHN5c3RlbSBmb3IgdGhlIGxp
c3Qgb2Ygc2NlbmUncyBwYXJ0aWNsZSBzeXN0ZW1zCisgICAgICogQHBhcmFtIHRvUmVtb3ZlIGRl
ZmluZXMgdGhlIHBhcnRpY2xlIHN5c3RlbSB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyB0aGUg
aW5kZXggd2hlcmUgdGhlIHBhcnRpY2xlIHN5c3RlbSB3YXMgaW4gdGhlIHBhcnRpY2xlIHN5c3Rl
bSBsaXN0CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLnJlbW92ZVBhcnRpY2xlU3lzdGVt
ID0gZnVuY3Rpb24gKHRvUmVtb3ZlKSB7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMucGFydGlj
bGVTeXN0ZW1zLmluZGV4T2YodG9SZW1vdmUpOworICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7
CisgICAgICAgICAgICB0aGlzLnBhcnRpY2xlU3lzdGVtcy5zcGxpY2UoaW5kZXgsIDEpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJl
bW92ZSBhIGFuaW1hdGlvbiBmb3IgdGhlIGxpc3Qgb2Ygc2NlbmUncyBhbmltYXRpb25zCisgICAg
ICogQHBhcmFtIHRvUmVtb3ZlIGRlZmluZXMgdGhlIGFuaW1hdGlvbiB0byByZW1vdmUKKyAgICAg
KiBAcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgdGhlIGFuaW1hdGlvbiB3YXMgaW4gdGhlIGFuaW1h
dGlvbiBsaXN0CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLnJlbW92ZUFuaW1hdGlvbiA9
IGZ1bmN0aW9uICh0b1JlbW92ZSkgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmFuaW1hdGlv
bnMuaW5kZXhPZih0b1JlbW92ZSk7CisgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAg
ICAgICAgIHRoaXMuYW5pbWF0aW9ucy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFdpbGwgc3RvcCB0aGUg
YW5pbWF0aW9uIG9mIHRoZSBnaXZlbiB0YXJnZXQKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IC0gdGhl
IHRhcmdldAorICAgICAqIEBwYXJhbSBhbmltYXRpb25OYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGFu
aW1hdGlvbiB0byBzdG9wIChhbGwgYW5pbWF0aW9ucyB3aWxsIGJlIHN0b3BwZWQgaWYgYm90aCB0
aGlzIGFuZCB0YXJnZXRNYXNrIGFyZSBlbXB0eSkKKyAgICAgKiBAcGFyYW0gdGFyZ2V0TWFzayAt
IGEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGlmIHRoZSBhbmltYXRpb24gc2hvdWxkIGJlIHN0
b3BwZWQgYmFzZWQgb24gaXRzIHRhcmdldCAoYWxsIGFuaW1hdGlvbnMgd2lsbCBiZSBzdG9wcGVk
IGlmIGJvdGggdGhpcyBhbmQgYW5pbWF0aW9uTmFtZSBhcmUgZW1wdHkpCisgICAgICovCisgICAg
U2NlbmUucHJvdG90eXBlLnN0b3BBbmltYXRpb24gPSBmdW5jdGlvbiAodGFyZ2V0LCBhbmltYXRp
b25OYW1lLCB0YXJnZXRNYXNrKSB7CisgICAgICAgIC8vIERvIG5vdGhpbmcgYXMgY29kZSB3aWxs
IGJlIHByb3ZpZGVkIGJ5IGFuaW1hdGlvbiBjb21wb25lbnQKKyAgICB9OworICAgIC8qKgorICAg
ICAqIFJlbW92ZXMgdGhlIGdpdmVuIGFuaW1hdGlvbiBncm91cCBmcm9tIHRoaXMgc2NlbmUuCisg
ICAgICogQHBhcmFtIHRvUmVtb3ZlIFRoZSBhbmltYXRpb24gZ3JvdXAgdG8gcmVtb3ZlCisgICAg
ICogQHJldHVybnMgVGhlIGluZGV4IG9mIHRoZSByZW1vdmVkIGFuaW1hdGlvbiBncm91cAorICAg
ICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5yZW1vdmVBbmltYXRpb25Hcm91cCA9IGZ1bmN0aW9u
ICh0b1JlbW92ZSkgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmFuaW1hdGlvbkdyb3Vwcy5p
bmRleE9mKHRvUmVtb3ZlKTsKKyAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAg
ICAgdGhpcy5hbmltYXRpb25Hcm91cHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIHRoZSBn
aXZlbiBtdWx0aS1tYXRlcmlhbCBmcm9tIHRoaXMgc2NlbmUuCisgICAgICogQHBhcmFtIHRvUmVt
b3ZlIFRoZSBtdWx0aS1tYXRlcmlhbCB0byByZW1vdmUKKyAgICAgKiBAcmV0dXJucyBUaGUgaW5k
ZXggb2YgdGhlIHJlbW92ZWQgbXVsdGktbWF0ZXJpYWwKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90
b3R5cGUucmVtb3ZlTXVsdGlNYXRlcmlhbCA9IGZ1bmN0aW9uICh0b1JlbW92ZSkgeworICAgICAg
ICB2YXIgaW5kZXggPSB0aGlzLm11bHRpTWF0ZXJpYWxzLmluZGV4T2YodG9SZW1vdmUpOworICAg
ICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICB0aGlzLm11bHRpTWF0ZXJpYWxz
LnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGluZGV4OworICAg
IH07CisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gbWF0ZXJpYWwgZnJvbSB0aGlz
IHNjZW5lLgorICAgICAqIEBwYXJhbSB0b1JlbW92ZSBUaGUgbWF0ZXJpYWwgdG8gcmVtb3ZlCisg
ICAgICogQHJldHVybnMgVGhlIGluZGV4IG9mIHRoZSByZW1vdmVkIG1hdGVyaWFsCisgICAgICov
CisgICAgU2NlbmUucHJvdG90eXBlLnJlbW92ZU1hdGVyaWFsID0gZnVuY3Rpb24gKHRvUmVtb3Zl
KSB7CisgICAgICAgIHZhciBpbmRleCA9IHRvUmVtb3ZlLl9pbmRleEluU2NlbmVNYXRlcmlhbEFy
cmF5OworICAgICAgICBpZiAoaW5kZXggIT09IC0xICYmIGluZGV4IDwgdGhpcy5tYXRlcmlhbHMu
bGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoaW5kZXggIT09IHRoaXMubWF0ZXJpYWxzLmxlbmd0
aCAtIDEpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGFzdE1hdGVyaWFsID0gdGhpcy5tYXRlcmlh
bHNbdGhpcy5tYXRlcmlhbHMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAgdGhpcy5tYXRl
cmlhbHNbaW5kZXhdID0gbGFzdE1hdGVyaWFsOworICAgICAgICAgICAgICAgIGxhc3RNYXRlcmlh
bC5faW5kZXhJblNjZW5lTWF0ZXJpYWxBcnJheSA9IGluZGV4OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdG9SZW1vdmUuX2luZGV4SW5TY2VuZU1hdGVyaWFsQXJyYXkgPSAtMTsKKyAgICAg
ICAgICAgIHRoaXMubWF0ZXJpYWxzLnBvcCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMub25N
YXRlcmlhbFJlbW92ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0b1JlbW92ZSk7CisgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbW92ZXMgdGhlIGdp
dmVuIGFjdGlvbiBtYW5hZ2VyIGZyb20gdGhpcyBzY2VuZS4KKyAgICAgKiBAcGFyYW0gdG9SZW1v
dmUgVGhlIGFjdGlvbiBtYW5hZ2VyIHRvIHJlbW92ZQorICAgICAqIEByZXR1cm5zIFRoZSBpbmRl
eCBvZiB0aGUgcmVtb3ZlZCBhY3Rpb24gbWFuYWdlcgorICAgICAqLworICAgIFNjZW5lLnByb3Rv
dHlwZS5yZW1vdmVBY3Rpb25NYW5hZ2VyID0gZnVuY3Rpb24gKHRvUmVtb3ZlKSB7CisgICAgICAg
IHZhciBpbmRleCA9IHRoaXMuYWN0aW9uTWFuYWdlcnMuaW5kZXhPZih0b1JlbW92ZSk7CisgICAg
ICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMuYWN0aW9uTWFuYWdlcnMu
c3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5kZXg7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiB0ZXh0dXJlIGZyb20gdGhpcyBz
Y2VuZS4KKyAgICAgKiBAcGFyYW0gdG9SZW1vdmUgVGhlIHRleHR1cmUgdG8gcmVtb3ZlCisgICAg
ICogQHJldHVybnMgVGhlIGluZGV4IG9mIHRoZSByZW1vdmVkIHRleHR1cmUKKyAgICAgKi8KKyAg
ICBTY2VuZS5wcm90b3R5cGUucmVtb3ZlVGV4dHVyZSA9IGZ1bmN0aW9uICh0b1JlbW92ZSkgewor
ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnRleHR1cmVzLmluZGV4T2YodG9SZW1vdmUpOworICAg
ICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICB0aGlzLnRleHR1cmVzLnNwbGlj
ZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5vblRleHR1cmVSZW1vdmVkT2Jz
ZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModG9SZW1vdmUpOworICAgICAgICByZXR1cm4gaW5kZXg7
CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIHRoZSBnaXZlbiBsaWdodCB0byB0aGlzIHNj
ZW5lCisgICAgICogQHBhcmFtIG5ld0xpZ2h0IFRoZSBsaWdodCB0byBhZGQKKyAgICAgKi8KKyAg
ICBTY2VuZS5wcm90b3R5cGUuYWRkTGlnaHQgPSBmdW5jdGlvbiAobmV3TGlnaHQpIHsKKyAgICAg
ICAgdGhpcy5saWdodHMucHVzaChuZXdMaWdodCk7CisgICAgICAgIHRoaXMuc29ydExpZ2h0c0J5
UHJpb3JpdHkoKTsKKyAgICAgICAgLy8gQWRkIGxpZ2h0IHRvIGFsbCBtZXNoZXMgKFRvIHN1cHBv
cnQgaWYgdGhlIGxpZ2h0IGlzIHJlbW92ZWQgYW5kIHRoZW4gcmVhZGRlZCkKKyAgICAgICAgZm9y
ICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMubWVzaGVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewor
ICAgICAgICAgICAgdmFyIG1lc2ggPSBfYVtfaV07CisgICAgICAgICAgICBpZiAobWVzaC5saWdo
dFNvdXJjZXMuaW5kZXhPZihuZXdMaWdodCkgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgbWVz
aC5saWdodFNvdXJjZXMucHVzaChuZXdMaWdodCk7CisgICAgICAgICAgICAgICAgbWVzaC5fcmVz
eW5jTGlnaHRTb3VyY2VzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5vbk5ld0xpZ2h0QWRkZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhuZXdMaWdodCk7Cisg
ICAgfTsKKyAgICAvKioKKyAgICAgKiBTb3J0cyB0aGUgbGlzdCBsaXN0IGJhc2VkIG9uIGxpZ2h0
IHByaW9yaXRpZXMKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuc29ydExpZ2h0c0J5UHJp
b3JpdHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnJlcXVpcmVMaWdodFNvcnRp
bmcpIHsKKyAgICAgICAgICAgIHRoaXMubGlnaHRzLnNvcnQoX0xpZ2h0c19saWdodF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTRfX1siTGlnaHQiXS5Db21wYXJlTGlnaHRzUHJpb3JpdHkpOwor
ICAgICAgICB9CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIHRoZSBnaXZlbiBjYW1lcmEg
dG8gdGhpcyBzY2VuZQorICAgICAqIEBwYXJhbSBuZXdDYW1lcmEgVGhlIGNhbWVyYSB0byBhZGQK
KyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuYWRkQ2FtZXJhID0gZnVuY3Rpb24gKG5ld0Nh
bWVyYSkgeworICAgICAgICB0aGlzLmNhbWVyYXMucHVzaChuZXdDYW1lcmEpOworICAgICAgICB0
aGlzLm9uTmV3Q2FtZXJhQWRkZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhuZXdDYW1lcmEp
OworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyB0aGUgZ2l2ZW4gc2tlbGV0b24gdG8gdGhp
cyBzY2VuZQorICAgICAqIEBwYXJhbSBuZXdTa2VsZXRvbiBUaGUgc2tlbGV0b24gdG8gYWRkCisg
ICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmFkZFNrZWxldG9uID0gZnVuY3Rpb24gKG5ld1Nr
ZWxldG9uKSB7CisgICAgICAgIHRoaXMuc2tlbGV0b25zLnB1c2gobmV3U2tlbGV0b24pOworICAg
ICAgICB0aGlzLm9uTmV3U2tlbGV0b25BZGRlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKG5l
d1NrZWxldG9uKTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEFkZHMgdGhlIGdpdmVuIHBhcnRp
Y2xlIHN5c3RlbSB0byB0aGlzIHNjZW5lCisgICAgICogQHBhcmFtIG5ld1BhcnRpY2xlU3lzdGVt
IFRoZSBwYXJ0aWNsZSBzeXN0ZW0gdG8gYWRkCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBl
LmFkZFBhcnRpY2xlU3lzdGVtID0gZnVuY3Rpb24gKG5ld1BhcnRpY2xlU3lzdGVtKSB7CisgICAg
ICAgIHRoaXMucGFydGljbGVTeXN0ZW1zLnB1c2gobmV3UGFydGljbGVTeXN0ZW0pOworICAgIH07
CisgICAgLyoqCisgICAgICogQWRkcyB0aGUgZ2l2ZW4gYW5pbWF0aW9uIHRvIHRoaXMgc2NlbmUK
KyAgICAgKiBAcGFyYW0gbmV3QW5pbWF0aW9uIFRoZSBhbmltYXRpb24gdG8gYWRkCisgICAgICov
CisgICAgU2NlbmUucHJvdG90eXBlLmFkZEFuaW1hdGlvbiA9IGZ1bmN0aW9uIChuZXdBbmltYXRp
b24pIHsKKyAgICAgICAgdGhpcy5hbmltYXRpb25zLnB1c2gobmV3QW5pbWF0aW9uKTsKKyAgICB9
OworICAgIC8qKgorICAgICAqIEFkZHMgdGhlIGdpdmVuIGFuaW1hdGlvbiBncm91cCB0byB0aGlz
IHNjZW5lLgorICAgICAqIEBwYXJhbSBuZXdBbmltYXRpb25Hcm91cCBUaGUgYW5pbWF0aW9uIGdy
b3VwIHRvIGFkZAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5hZGRBbmltYXRpb25Hcm91
cCA9IGZ1bmN0aW9uIChuZXdBbmltYXRpb25Hcm91cCkgeworICAgICAgICB0aGlzLmFuaW1hdGlv
bkdyb3Vwcy5wdXNoKG5ld0FuaW1hdGlvbkdyb3VwKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEFkZHMgdGhlIGdpdmVuIG11bHRpLW1hdGVyaWFsIHRvIHRoaXMgc2NlbmUKKyAgICAgKiBAcGFy
YW0gbmV3TXVsdGlNYXRlcmlhbCBUaGUgbXVsdGktbWF0ZXJpYWwgdG8gYWRkCisgICAgICovCisg
ICAgU2NlbmUucHJvdG90eXBlLmFkZE11bHRpTWF0ZXJpYWwgPSBmdW5jdGlvbiAobmV3TXVsdGlN
YXRlcmlhbCkgeworICAgICAgICB0aGlzLm11bHRpTWF0ZXJpYWxzLnB1c2gobmV3TXVsdGlNYXRl
cmlhbCk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRzIHRoZSBnaXZlbiBtYXRlcmlhbCB0
byB0aGlzIHNjZW5lCisgICAgICogQHBhcmFtIG5ld01hdGVyaWFsIFRoZSBtYXRlcmlhbCB0byBh
ZGQKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuYWRkTWF0ZXJpYWwgPSBmdW5jdGlvbiAo
bmV3TWF0ZXJpYWwpIHsKKyAgICAgICAgbmV3TWF0ZXJpYWwuX2luZGV4SW5TY2VuZU1hdGVyaWFs
QXJyYXkgPSB0aGlzLm1hdGVyaWFscy5sZW5ndGg7CisgICAgICAgIHRoaXMubWF0ZXJpYWxzLnB1
c2gobmV3TWF0ZXJpYWwpOworICAgICAgICB0aGlzLm9uTmV3TWF0ZXJpYWxBZGRlZE9ic2VydmFi
bGUubm90aWZ5T2JzZXJ2ZXJzKG5ld01hdGVyaWFsKTsKKyAgICB9OworICAgIC8qKgorICAgICAq
IEFkZHMgdGhlIGdpdmVuIG1vcnBoIHRhcmdldCB0byB0aGlzIHNjZW5lCisgICAgICogQHBhcmFt
IG5ld01vcnBoVGFyZ2V0TWFuYWdlciBUaGUgbW9ycGggdGFyZ2V0IHRvIGFkZAorICAgICAqLwor
ICAgIFNjZW5lLnByb3RvdHlwZS5hZGRNb3JwaFRhcmdldE1hbmFnZXIgPSBmdW5jdGlvbiAobmV3
TW9ycGhUYXJnZXRNYW5hZ2VyKSB7CisgICAgICAgIHRoaXMubW9ycGhUYXJnZXRNYW5hZ2Vycy5w
dXNoKG5ld01vcnBoVGFyZ2V0TWFuYWdlcik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBBZGRz
IHRoZSBnaXZlbiBnZW9tZXRyeSB0byB0aGlzIHNjZW5lCisgICAgICogQHBhcmFtIG5ld0dlb21l
dHJ5IFRoZSBnZW9tZXRyeSB0byBhZGQKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuYWRk
R2VvbWV0cnkgPSBmdW5jdGlvbiAobmV3R2VvbWV0cnkpIHsKKyAgICAgICAgaWYgKHRoaXMuZ2Vv
bWV0cmllc0J5VW5pcXVlSWQpIHsKKyAgICAgICAgICAgIHRoaXMuZ2VvbWV0cmllc0J5VW5pcXVl
SWRbbmV3R2VvbWV0cnkudW5pcXVlSWRdID0gdGhpcy5nZW9tZXRyaWVzLmxlbmd0aDsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLmdlb21ldHJpZXMucHVzaChuZXdHZW9tZXRyeSk7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBZGRzIHRoZSBnaXZlbiBhY3Rpb24gbWFuYWdlciB0byB0aGlzIHNj
ZW5lCisgICAgICogQHBhcmFtIG5ld0FjdGlvbk1hbmFnZXIgVGhlIGFjdGlvbiBtYW5hZ2VyIHRv
IGFkZAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5hZGRBY3Rpb25NYW5hZ2VyID0gZnVu
Y3Rpb24gKG5ld0FjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgdGhpcy5hY3Rpb25NYW5hZ2Vycy5w
dXNoKG5ld0FjdGlvbk1hbmFnZXIpOworICAgIH07CisgICAgLyoqCisgICAgICogQWRkcyB0aGUg
Z2l2ZW4gdGV4dHVyZSB0byB0aGlzIHNjZW5lLgorICAgICAqIEBwYXJhbSBuZXdUZXh0dXJlIFRo
ZSB0ZXh0dXJlIHRvIGFkZAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5hZGRUZXh0dXJl
ID0gZnVuY3Rpb24gKG5ld1RleHR1cmUpIHsKKyAgICAgICAgdGhpcy50ZXh0dXJlcy5wdXNoKG5l
d1RleHR1cmUpOworICAgICAgICB0aGlzLm9uTmV3VGV4dHVyZUFkZGVkT2JzZXJ2YWJsZS5ub3Rp
ZnlPYnNlcnZlcnMobmV3VGV4dHVyZSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBTd2l0Y2gg
YWN0aXZlIGNhbWVyYQorICAgICAqIEBwYXJhbSBuZXdDYW1lcmEgZGVmaW5lcyB0aGUgbmV3IGFj
dGl2ZSBjYW1lcmEKKyAgICAgKiBAcGFyYW0gYXR0YWNoQ29udHJvbCBkZWZpbmVzIGlmIGF0dGFj
aENvbnRyb2wgbXVzdCBiZSBjYWxsZWQgZm9yIHRoZSBuZXcgYWN0aXZlIGNhbWVyYSAoZGVmYXVs
dDogdHJ1ZSkKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuc3dpdGNoQWN0aXZlQ2FtZXJh
ID0gZnVuY3Rpb24gKG5ld0NhbWVyYSwgYXR0YWNoQ29udHJvbCkgeworICAgICAgICBpZiAoYXR0
YWNoQ29udHJvbCA9PT0gdm9pZCAwKSB7IGF0dGFjaENvbnRyb2wgPSB0cnVlOyB9CisgICAgICAg
IHZhciBjYW52YXMgPSB0aGlzLl9lbmdpbmUuZ2V0UmVuZGVyaW5nQ2FudmFzKCk7CisgICAgICAg
IGlmICghY2FudmFzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuYWN0aXZlQ2FtZXJhKSB7CisgICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYS5k
ZXRhY2hDb250cm9sKGNhbnZhcyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5hY3RpdmVDYW1l
cmEgPSBuZXdDYW1lcmE7CisgICAgICAgIGlmIChhdHRhY2hDb250cm9sKSB7CisgICAgICAgICAg
ICBuZXdDYW1lcmEuYXR0YWNoQ29udHJvbChjYW52YXMpOworICAgICAgICB9CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBzZXRzIHRoZSBhY3RpdmUgY2FtZXJhIG9mIHRoZSBzY2VuZSB1c2luZyBp
dHMgSUQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgY2FtZXJhJ3MgSUQKKyAgICAgKiBA
cmV0dXJuIHRoZSBuZXcgYWN0aXZlIGNhbWVyYSBvciBudWxsIGlmIG5vbmUgZm91bmQuCisgICAg
ICovCisgICAgU2NlbmUucHJvdG90eXBlLnNldEFjdGl2ZUNhbWVyYUJ5SUQgPSBmdW5jdGlvbiAo
aWQpIHsKKyAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuZ2V0Q2FtZXJhQnlJRChpZCk7CisgICAg
ICAgIGlmIChjYW1lcmEpIHsKKyAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhID0gY2FtZXJh
OworICAgICAgICAgICAgcmV0dXJuIGNhbWVyYTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIHNldHMgdGhlIGFjdGl2ZSBjYW1lcmEgb2Yg
dGhlIHNjZW5lIHVzaW5nIGl0cyBuYW1lCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUg
Y2FtZXJhJ3MgbmFtZQorICAgICAqIEByZXR1cm5zIHRoZSBuZXcgYWN0aXZlIGNhbWVyYSBvciBu
dWxsIGlmIG5vbmUgZm91bmQuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLnNldEFjdGl2
ZUNhbWVyYUJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHZhciBjYW1lcmEgPSB0
aGlzLmdldENhbWVyYUJ5TmFtZShuYW1lKTsKKyAgICAgICAgaWYgKGNhbWVyYSkgeworICAgICAg
ICAgICAgdGhpcy5hY3RpdmVDYW1lcmEgPSBjYW1lcmE7CisgICAgICAgICAgICByZXR1cm4gY2Ft
ZXJhOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisg
ICAgICogZ2V0IGFuIGFuaW1hdGlvbiBncm91cCB1c2luZyBpdHMgbmFtZQorICAgICAqIEBwYXJh
bSBuYW1lIGRlZmluZXMgdGhlIG1hdGVyaWFsJ3MgbmFtZQorICAgICAqIEByZXR1cm4gdGhlIGFu
aW1hdGlvbiBncm91cCBvciBudWxsIGlmIG5vbmUgZm91bmQuCisgICAgICovCisgICAgU2NlbmUu
cHJvdG90eXBlLmdldEFuaW1hdGlvbkdyb3VwQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYW5pbWF0aW9uR3JvdXBzLmxl
bmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uR3JvdXBzW2lu
ZGV4XS5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0
aW9uR3JvdXBzW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldCBhIG1hdGVyaWFsIHVzaW5nIGl0
cyB1bmlxdWUgaWQKKyAgICAgKiBAcGFyYW0gdW5pcXVlSWQgZGVmaW5lcyB0aGUgbWF0ZXJpYWwn
cyB1bmlxdWUgaWQKKyAgICAgKiBAcmV0dXJuIHRoZSBtYXRlcmlhbCBvciBudWxsIGlmIG5vbmUg
Zm91bmQuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldE1hdGVyaWFsQnlVbmlxdWVJ
RCA9IGZ1bmN0aW9uICh1bmlxdWVJZCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgdGhpcy5tYXRlcmlhbHMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5tYXRlcmlhbHNbaW5kZXhdLnVuaXF1ZUlkID09PSB1bmlxdWVJZCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsc1tpbmRleF07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBnZXQg
YSBtYXRlcmlhbCB1c2luZyBpdHMgaWQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgbWF0
ZXJpYWwncyBJRAorICAgICAqIEByZXR1cm4gdGhlIG1hdGVyaWFsIG9yIG51bGwgaWYgbm9uZSBm
b3VuZC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0TWF0ZXJpYWxCeUlEID0gZnVu
Y3Rpb24gKGlkKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm1h
dGVyaWFscy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm1hdGVyaWFs
c1tpbmRleF0uaWQgPT09IGlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJp
YWxzW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSB0aGUgbGFzdCBhZGRlZCBtYXRlcmlh
bCB1c2luZyBhIGdpdmVuIGlkCisgICAgICogQHBhcmFtIGlkIGRlZmluZXMgdGhlIG1hdGVyaWFs
J3MgSUQKKyAgICAgKiBAcmV0dXJuIHRoZSBsYXN0IG1hdGVyaWFsIHdpdGggdGhlIGdpdmVuIGlk
IG9yIG51bGwgaWYgbm9uZSBmb3VuZC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0
TGFzdE1hdGVyaWFsQnlJRCA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICBmb3IgKHZhciBpbmRl
eCA9IHRoaXMubWF0ZXJpYWxzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLm1hdGVyaWFsc1tpbmRleF0uaWQgPT09IGlkKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWxzW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdl
dHMgYSBtYXRlcmlhbCB1c2luZyBpdHMgbmFtZQorICAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMg
dGhlIG1hdGVyaWFsJ3MgbmFtZQorICAgICAqIEByZXR1cm4gdGhlIG1hdGVyaWFsIG9yIG51bGwg
aWYgbm9uZSBmb3VuZC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0TWF0ZXJpYWxC
eU5hbWUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgdGhpcy5tYXRlcmlhbHMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5tYXRlcmlhbHNbaW5kZXhdLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5tYXRlcmlhbHNbaW5kZXhdOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGEgdGV4dHVy
ZSB1c2luZyBpdHMgdW5pcXVlIGlkCisgICAgICogQHBhcmFtIHVuaXF1ZUlkIGRlZmluZXMgdGhl
IHRleHR1cmUncyB1bmlxdWUgaWQKKyAgICAgKiBAcmV0dXJuIHRoZSB0ZXh0dXJlIG9yIG51bGwg
aWYgbm9uZSBmb3VuZC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0VGV4dHVyZUJ5
VW5pcXVlSUQgPSBmdW5jdGlvbiAodW5pcXVlSWQpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IHRoaXMudGV4dHVyZXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy50ZXh0dXJlc1tpbmRleF0udW5pcXVlSWQgPT09IHVuaXF1ZUlkKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZXNbaW5kZXhdOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICog
R2V0cyBhIGNhbWVyYSB1c2luZyBpdHMgaWQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUg
aWQgdG8gbG9vayBmb3IKKyAgICAgKiBAcmV0dXJucyB0aGUgY2FtZXJhIG9yIG51bGwgaWYgbm90
IGZvdW5kCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldENhbWVyYUJ5SUQgPSBmdW5j
dGlvbiAoaWQpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2Ft
ZXJhcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmNhbWVyYXNbaW5k
ZXhdLmlkID09PSBpZCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbWVyYXNbaW5k
ZXhdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAg
IH07CisgICAgLyoqCisgICAgICogR2V0cyBhIGNhbWVyYSB1c2luZyBpdHMgdW5pcXVlIGlkCisg
ICAgICogQHBhcmFtIHVuaXF1ZUlkIGRlZmluZXMgdGhlIHVuaXF1ZSBpZCB0byBsb29rIGZvcgor
ICAgICAqIEByZXR1cm5zIHRoZSBjYW1lcmEgb3IgbnVsbCBpZiBub3QgZm91bmQKKyAgICAgKi8K
KyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0Q2FtZXJhQnlVbmlxdWVJRCA9IGZ1bmN0aW9uICh1bmlx
dWVJZCkgeworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5jYW1lcmFz
Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuY2FtZXJhc1tpbmRleF0u
dW5pcXVlSWQgPT09IHVuaXF1ZUlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2Ft
ZXJhc1tpbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgY2FtZXJhIHVzaW5nIGl0cyBuYW1l
CisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgY2FtZXJhJ3MgbmFtZQorICAgICAqIEBy
ZXR1cm4gdGhlIGNhbWVyYSBvciBudWxsIGlmIG5vbmUgZm91bmQuCisgICAgICovCisgICAgU2Nl
bmUucHJvdG90eXBlLmdldENhbWVyYUJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAg
IGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmNhbWVyYXMubGVuZ3RoOyBpbmRleCsr
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5jYW1lcmFzW2luZGV4XS5uYW1lID09PSBuYW1lKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FtZXJhc1tpbmRleF07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXRzIGEgYm9uZSB1c2luZyBpdHMgaWQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0
aGUgYm9uZSdzIGlkCisgICAgICogQHJldHVybiB0aGUgYm9uZSBvciBudWxsIGlmIG5vdCBmb3Vu
ZAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRCb25lQnlJRCA9IGZ1bmN0aW9uIChp
ZCkgeworICAgICAgICBmb3IgKHZhciBza2VsZXRvbkluZGV4ID0gMDsgc2tlbGV0b25JbmRleCA8
IHRoaXMuc2tlbGV0b25zLmxlbmd0aDsgc2tlbGV0b25JbmRleCsrKSB7CisgICAgICAgICAgICB2
YXIgc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uc1tza2VsZXRvbkluZGV4XTsKKyAgICAgICAgICAg
IGZvciAodmFyIGJvbmVJbmRleCA9IDA7IGJvbmVJbmRleCA8IHNrZWxldG9uLmJvbmVzLmxlbmd0
aDsgYm9uZUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoc2tlbGV0b24uYm9uZXNbYm9u
ZUluZGV4XS5pZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNrZWxldG9u
LmJvbmVzW2JvbmVJbmRleF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgKiBHZXRz
IGEgYm9uZSB1c2luZyBpdHMgaWQKKyAgICAqIEBwYXJhbSBuYW1lIGRlZmluZXMgdGhlIGJvbmUn
cyBuYW1lCisgICAgKiBAcmV0dXJuIHRoZSBib25lIG9yIG51bGwgaWYgbm90IGZvdW5kCisgICAg
Ki8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0Qm9uZUJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7
CisgICAgICAgIGZvciAodmFyIHNrZWxldG9uSW5kZXggPSAwOyBza2VsZXRvbkluZGV4IDwgdGhp
cy5za2VsZXRvbnMubGVuZ3RoOyBza2VsZXRvbkluZGV4KyspIHsKKyAgICAgICAgICAgIHZhciBz
a2VsZXRvbiA9IHRoaXMuc2tlbGV0b25zW3NrZWxldG9uSW5kZXhdOworICAgICAgICAgICAgZm9y
ICh2YXIgYm9uZUluZGV4ID0gMDsgYm9uZUluZGV4IDwgc2tlbGV0b24uYm9uZXMubGVuZ3RoOyBi
b25lSW5kZXgrKykgeworICAgICAgICAgICAgICAgIGlmIChza2VsZXRvbi5ib25lc1tib25lSW5k
ZXhdLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNrZWxldG9u
LmJvbmVzW2JvbmVJbmRleF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0
cyBhIGxpZ2h0IG5vZGUgdXNpbmcgaXRzIG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVz
IHRoZSB0aGUgbGlnaHQncyBuYW1lCisgICAgICogQHJldHVybiB0aGUgbGlnaHQgb3IgbnVsbCBp
ZiBub25lIGZvdW5kLgorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRMaWdodEJ5TmFt
ZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLmxpZ2h0cy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmxp
Z2h0c1tpbmRleF0ubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmxpZ2h0c1tpbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbGlnaHQgbm9kZSB1c2luZyBp
dHMgaWQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgbGlnaHQncyBpZAorICAgICAqIEBy
ZXR1cm4gdGhlIGxpZ2h0IG9yIG51bGwgaWYgbm9uZSBmb3VuZC4KKyAgICAgKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUuZ2V0TGlnaHRCeUlEID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIGZvciAo
dmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxpZ2h0cy5sZW5ndGg7IGluZGV4KyspIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmxpZ2h0c1tpbmRleF0uaWQgPT09IGlkKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMubGlnaHRzW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBs
aWdodCBub2RlIHVzaW5nIGl0cyBzY2VuZS1nZW5lcmF0ZWQgdW5pcXVlIElECisgICAgICogQHBh
cmFtIHVuaXF1ZUlkIGRlZmluZXMgdGhlIGxpZ2h0J3MgdW5pcXVlIGlkCisgICAgICogQHJldHVy
biB0aGUgbGlnaHQgb3IgbnVsbCBpZiBub25lIGZvdW5kLgorICAgICAqLworICAgIFNjZW5lLnBy
b3RvdHlwZS5nZXRMaWdodEJ5VW5pcXVlSUQgPSBmdW5jdGlvbiAodW5pcXVlSWQpIHsKKyAgICAg
ICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGlnaHRzLmxlbmd0aDsgaW5kZXgr
KykgeworICAgICAgICAgICAgaWYgKHRoaXMubGlnaHRzW2luZGV4XS51bmlxdWVJZCA9PT0gdW5p
cXVlSWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saWdodHNbaW5kZXhdOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAg
LyoqCisgICAgICogR2V0cyBhIHBhcnRpY2xlIHN5c3RlbSBieSBpZAorICAgICAqIEBwYXJhbSBp
ZCBkZWZpbmVzIHRoZSBwYXJ0aWNsZSBzeXN0ZW0gaWQKKyAgICAgKiBAcmV0dXJuIHRoZSBjb3Jy
ZXNwb25kaW5nIHN5c3RlbSBvciBudWxsIGlmIG5vbmUgZm91bmQKKyAgICAgKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUuZ2V0UGFydGljbGVTeXN0ZW1CeUlEID0gZnVuY3Rpb24gKGlkKSB7CisgICAg
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnBhcnRpY2xlU3lzdGVtcy5sZW5n
dGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnBhcnRpY2xlU3lzdGVtc1tpbmRl
eF0uaWQgPT09IGlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFydGljbGVTeXN0
ZW1zW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBnZW9tZXRyeSB1c2luZyBpdHMgSUQK
KyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgZ2VvbWV0cnkncyBpZAorICAgICAqIEByZXR1
cm4gdGhlIGdlb21ldHJ5IG9yIG51bGwgaWYgbm9uZSBmb3VuZC4KKyAgICAgKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUuZ2V0R2VvbWV0cnlCeUlEID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmdlb21ldHJpZXMubGVuZ3RoOyBpbmRleCsr
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5nZW9tZXRyaWVzW2luZGV4XS5pZCA9PT0gaWQpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZW9tZXRyaWVzW2luZGV4XTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIFNjZW5l
LnByb3RvdHlwZS5fZ2V0R2VvbWV0cnlCeVVuaXF1ZUlEID0gZnVuY3Rpb24gKHVuaXF1ZUlkKSB7
CisgICAgICAgIGlmICh0aGlzLmdlb21ldHJpZXNCeVVuaXF1ZUlkKSB7CisgICAgICAgICAgICB2
YXIgaW5kZXhfMSA9IHRoaXMuZ2VvbWV0cmllc0J5VW5pcXVlSWRbdW5pcXVlSWRdOworICAgICAg
ICAgICAgaWYgKGluZGV4XzEgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmdlb21ldHJpZXNbaW5kZXhfMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhp
cy5nZW9tZXRyaWVzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIGlmICh0aGlz
Lmdlb21ldHJpZXNbaW5kZXhdLnVuaXF1ZUlkID09PSB1bmlxdWVJZCkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5nZW9tZXRyaWVzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBBZGQgYSBuZXcgZ2VvbWV0cnkgdG8gdGhpcyBzY2VuZQorICAgICAq
IEBwYXJhbSBnZW9tZXRyeSBkZWZpbmVzIHRoZSBnZW9tZXRyeSB0byBiZSBhZGRlZCB0byB0aGUg
c2NlbmUuCisgICAgICogQHBhcmFtIGZvcmNlIGRlZmluZXMgaWYgdGhlIGdlb21ldHJ5IG11c3Qg
YmUgcHVzaGVkIGV2ZW4gaWYgYSBnZW9tZXRyeSB3aXRoIHRoaXMgaWQgYWxyZWFkeSBleGlzdHMK
KyAgICAgKiBAcmV0dXJuIGEgYm9vbGVhbiBkZWZpbmluZyBpZiB0aGUgZ2VvbWV0cnkgd2FzIGFk
ZGVkIG9yIG5vdAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5wdXNoR2VvbWV0cnkgPSBm
dW5jdGlvbiAoZ2VvbWV0cnksIGZvcmNlKSB7CisgICAgICAgIGlmICghZm9yY2UgJiYgdGhpcy5f
Z2V0R2VvbWV0cnlCeVVuaXF1ZUlEKGdlb21ldHJ5LnVuaXF1ZUlkKSkgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHRoaXMuYWRkR2VvbWV0cnkoZ2VvbWV0
cnkpOworICAgICAgICB0aGlzLm9uTmV3R2VvbWV0cnlBZGRlZE9ic2VydmFibGUubm90aWZ5T2Jz
ZXJ2ZXJzKGdlb21ldHJ5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBSZW1vdmVzIGFuIGV4aXN0aW5nIGdlb21ldHJ5CisgICAgICogQHBhcmFtIGdlb21l
dHJ5IGRlZmluZXMgdGhlIGdlb21ldHJ5IHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2NlbmUKKyAg
ICAgKiBAcmV0dXJuIGEgYm9vbGVhbiBkZWZpbmluZyBpZiB0aGUgZ2VvbWV0cnkgd2FzIHJlbW92
ZWQgb3Igbm90CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLnJlbW92ZUdlb21ldHJ5ID0g
ZnVuY3Rpb24gKGdlb21ldHJ5KSB7CisgICAgICAgIHZhciBpbmRleDsKKyAgICAgICAgaWYgKHRo
aXMuZ2VvbWV0cmllc0J5VW5pcXVlSWQpIHsKKyAgICAgICAgICAgIGluZGV4ID0gdGhpcy5nZW9t
ZXRyaWVzQnlVbmlxdWVJZFtnZW9tZXRyeS51bmlxdWVJZF07CisgICAgICAgICAgICBpZiAoaW5k
ZXggPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGluZGV4ID0g
dGhpcy5nZW9tZXRyaWVzLmluZGV4T2YoZ2VvbWV0cnkpOworICAgICAgICAgICAgaWYgKGluZGV4
IDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoaW5kZXggIT09IHRoaXMuZ2VvbWV0cmllcy5sZW5ndGggLSAx
KSB7CisgICAgICAgICAgICB2YXIgbGFzdEdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyaWVzW3RoaXMu
Z2VvbWV0cmllcy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIHRoaXMuZ2VvbWV0cmllc1tpbmRl
eF0gPSBsYXN0R2VvbWV0cnk7CisgICAgICAgICAgICBpZiAodGhpcy5nZW9tZXRyaWVzQnlVbmlx
dWVJZCkgeworICAgICAgICAgICAgICAgIHRoaXMuZ2VvbWV0cmllc0J5VW5pcXVlSWRbbGFzdEdl
b21ldHJ5LnVuaXF1ZUlkXSA9IGluZGV4OworICAgICAgICAgICAgICAgIHRoaXMuZ2VvbWV0cmll
c0J5VW5pcXVlSWRbZ2VvbWV0cnkudW5pcXVlSWRdID0gdW5kZWZpbmVkOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHRoaXMuZ2VvbWV0cmllcy5wb3AoKTsKKyAgICAgICAgdGhp
cy5vbkdlb21ldHJ5UmVtb3ZlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGdlb21ldHJ5KTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBs
aXN0IG9mIGdlb21ldHJpZXMgYXR0YWNoZWQgdG8gdGhlIHNjZW5lCisgICAgICogQHJldHVybnMg
YW4gYXJyYXkgb2YgR2VvbWV0cnkKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0R2Vv
bWV0cmllcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2VvbWV0cmllczsK
KyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGZpcnN0IGFkZGVkIG1lc2ggZm91bmQg
b2YgYSBnaXZlbiBJRAorICAgICAqIEBwYXJhbSBpZCBkZWZpbmVzIHRoZSBpZCB0byBzZWFyY2gg
Zm9yCisgICAgICogQHJldHVybiB0aGUgbWVzaCBmb3VuZCBvciBudWxsIGlmIG5vdCBmb3VuZCBh
dCBhbGwKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0TWVzaEJ5SUQgPSBmdW5jdGlv
biAoaWQpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubWVzaGVz
Lmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKHRoaXMubWVzaGVzW2luZGV4XS5p
ZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNoZXNbaW5kZXhdOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07Cisg
ICAgLyoqCisgICAgICogR2V0cyBhIGxpc3Qgb2YgbWVzaGVzIHVzaW5nIHRoZWlyIGlkCisgICAg
ICogQHBhcmFtIGlkIGRlZmluZXMgdGhlIGlkIHRvIHNlYXJjaCBmb3IKKyAgICAgKiBAcmV0dXJu
cyBhIGxpc3Qgb2YgbWVzaGVzCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldE1lc2hl
c0J5SUQgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubWVzaGVzLmZpbHRl
cihmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgcmV0dXJuIG0uaWQgPT09IGlkOworICAgICAg
ICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGZpcnN0IGFkZGVkIHRyYW5z
Zm9ybSBub2RlIGZvdW5kIG9mIGEgZ2l2ZW4gSUQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0
aGUgaWQgdG8gc2VhcmNoIGZvcgorICAgICAqIEByZXR1cm4gdGhlIGZvdW5kIHRyYW5zZm9ybSBu
b2RlIG9yIG51bGwgaWYgbm90IGZvdW5kIGF0IGFsbC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90
b3R5cGUuZ2V0VHJhbnNmb3JtTm9kZUJ5SUQgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMudHJhbnNmb3JtTm9kZXMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1Ob2Rlc1tpbmRleF0uaWQgPT09
IGlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtTm9kZXNbaW5kZXhd
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07
CisgICAgLyoqCisgICAgICogR2V0cyBhIHRyYW5zZm9ybSBub2RlIHdpdGggaXRzIGF1dG8tZ2Vu
ZXJhdGVkIHVuaXF1ZSBpZAorICAgICAqIEBwYXJhbSB1bmlxdWVJZCBlZmluZXMgdGhlIHVuaXF1
ZSBpZCB0byBzZWFyY2ggZm9yCisgICAgICogQHJldHVybiB0aGUgZm91bmQgdHJhbnNmb3JtIG5v
ZGUgb3IgbnVsbCBpZiBub3QgZm91bmQgYXQgYWxsLgorICAgICAqLworICAgIFNjZW5lLnByb3Rv
dHlwZS5nZXRUcmFuc2Zvcm1Ob2RlQnlVbmlxdWVJRCA9IGZ1bmN0aW9uICh1bmlxdWVJZCkgewor
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy50cmFuc2Zvcm1Ob2Rlcy5s
ZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5vZGVzW2lu
ZGV4XS51bmlxdWVJZCA9PT0gdW5pcXVlSWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy50cmFuc2Zvcm1Ob2Rlc1tpbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbGlzdCBvZiB0
cmFuc2Zvcm0gbm9kZXMgdXNpbmcgdGhlaXIgaWQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0
aGUgaWQgdG8gc2VhcmNoIGZvcgorICAgICAqIEByZXR1cm5zIGEgbGlzdCBvZiB0cmFuc2Zvcm0g
bm9kZXMKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtTm9kZXNCeUlE
ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybU5vZGVzLmZp
bHRlcihmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgcmV0dXJuIG0uaWQgPT09IGlkOworICAg
ICAgICB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBtZXNoIHdpdGggaXRzIGF1
dG8tZ2VuZXJhdGVkIHVuaXF1ZSBpZAorICAgICAqIEBwYXJhbSB1bmlxdWVJZCBkZWZpbmVzIHRo
ZSB1bmlxdWUgaWQgdG8gc2VhcmNoIGZvcgorICAgICAqIEByZXR1cm4gdGhlIGZvdW5kIG1lc2gg
b3IgbnVsbCBpZiBub3QgZm91bmQgYXQgYWxsLgorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlw
ZS5nZXRNZXNoQnlVbmlxdWVJRCA9IGZ1bmN0aW9uICh1bmlxdWVJZCkgeworICAgICAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5tZXNoZXMubGVuZ3RoOyBpbmRleCsrKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5tZXNoZXNbaW5kZXhdLnVuaXF1ZUlkID09PSB1bmlxdWVJZCkg
eworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc2hlc1tpbmRleF07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXRzIGEgdGhlIGxhc3QgYWRkZWQgbWVzaCB1c2luZyBhIGdpdmVuIGlkCisgICAgICog
QHBhcmFtIGlkIGRlZmluZXMgdGhlIGlkIHRvIHNlYXJjaCBmb3IKKyAgICAgKiBAcmV0dXJuIHRo
ZSBmb3VuZCBtZXNoIG9yIG51bGwgaWYgbm90IGZvdW5kIGF0IGFsbC4KKyAgICAgKi8KKyAgICBT
Y2VuZS5wcm90b3R5cGUuZ2V0TGFzdE1lc2hCeUlEID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAg
IGZvciAodmFyIGluZGV4ID0gdGhpcy5tZXNoZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5k
ZXgtLSkgeworICAgICAgICAgICAgaWYgKHRoaXMubWVzaGVzW2luZGV4XS5pZCA9PT0gaWQpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNoZXNbaW5kZXhdOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAg
ICogR2V0cyBhIHRoZSBsYXN0IGFkZGVkIG5vZGUgKE1lc2gsIENhbWVyYSwgTGlnaHQpIHVzaW5n
IGEgZ2l2ZW4gaWQKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgaWQgdG8gc2VhcmNoIGZv
cgorICAgICAqIEByZXR1cm4gdGhlIGZvdW5kIG5vZGUgb3IgbnVsbCBpZiBub3QgZm91bmQgYXQg
YWxsCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldExhc3RFbnRyeUJ5SUQgPSBmdW5j
dGlvbiAoaWQpIHsKKyAgICAgICAgdmFyIGluZGV4OworICAgICAgICBmb3IgKGluZGV4ID0gdGhp
cy5tZXNoZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkgeworICAgICAgICAgICAg
aWYgKHRoaXMubWVzaGVzW2luZGV4XS5pZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5tZXNoZXNbaW5kZXhdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGZvciAoaW5kZXggPSB0aGlzLnRyYW5zZm9ybU5vZGVzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7
IGluZGV4LS0pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5vZGVzW2luZGV4XS5p
ZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Ob2Rlc1tp
bmRleF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbmRleCA9IHRo
aXMuY2FtZXJhcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5jYW1lcmFzW2luZGV4XS5pZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5jYW1lcmFzW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBmb3IgKGluZGV4ID0gdGhpcy5saWdodHMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5k
ZXgtLSkgeworICAgICAgICAgICAgaWYgKHRoaXMubGlnaHRzW2luZGV4XS5pZCA9PT0gaWQpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saWdodHNbaW5kZXhdOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAg
ICogR2V0cyBhIG5vZGUgKE1lc2gsIENhbWVyYSwgTGlnaHQpIHVzaW5nIGEgZ2l2ZW4gaWQKKyAg
ICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgaWQgdG8gc2VhcmNoIGZvcgorICAgICAqIEByZXR1
cm4gdGhlIGZvdW5kIG5vZGUgb3IgbnVsbCBpZiBub3QgZm91bmQgYXQgYWxsCisgICAgICovCisg
ICAgU2NlbmUucHJvdG90eXBlLmdldE5vZGVCeUlEID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAg
IHZhciBtZXNoID0gdGhpcy5nZXRNZXNoQnlJRChpZCk7CisgICAgICAgIGlmIChtZXNoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gbWVzaDsKKyAgICAgICAgfQorICAgICAgICB2YXIgdHJhbnNmb3Jt
Tm9kZSA9IHRoaXMuZ2V0VHJhbnNmb3JtTm9kZUJ5SUQoaWQpOworICAgICAgICBpZiAodHJhbnNm
b3JtTm9kZSkgeworICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybU5vZGU7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIGxpZ2h0ID0gdGhpcy5nZXRMaWdodEJ5SUQoaWQpOworICAgICAgICBpZiAo
bGlnaHQpIHsKKyAgICAgICAgICAgIHJldHVybiBsaWdodDsKKyAgICAgICAgfQorICAgICAgICB2
YXIgY2FtZXJhID0gdGhpcy5nZXRDYW1lcmFCeUlEKGlkKTsKKyAgICAgICAgaWYgKGNhbWVyYSkg
eworICAgICAgICAgICAgcmV0dXJuIGNhbWVyYTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYm9u
ZSA9IHRoaXMuZ2V0Qm9uZUJ5SUQoaWQpOworICAgICAgICBpZiAoYm9uZSkgeworICAgICAgICAg
ICAgcmV0dXJuIGJvbmU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXRzIGEgbm9kZSAoTWVzaCwgQ2FtZXJhLCBMaWdodCkgdXNpbmcg
YSBnaXZlbiBuYW1lCisgICAgICogQHBhcmFtIG5hbWUgZGVmaW5lcyB0aGUgbmFtZSB0byBzZWFy
Y2ggZm9yCisgICAgICogQHJldHVybiB0aGUgZm91bmQgbm9kZSBvciBudWxsIGlmIG5vdCBmb3Vu
ZCBhdCBhbGwuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldE5vZGVCeU5hbWUgPSBm
dW5jdGlvbiAobmFtZSkgeworICAgICAgICB2YXIgbWVzaCA9IHRoaXMuZ2V0TWVzaEJ5TmFtZShu
YW1lKTsKKyAgICAgICAgaWYgKG1lc2gpIHsKKyAgICAgICAgICAgIHJldHVybiBtZXNoOworICAg
ICAgICB9CisgICAgICAgIHZhciB0cmFuc2Zvcm1Ob2RlID0gdGhpcy5nZXRUcmFuc2Zvcm1Ob2Rl
QnlOYW1lKG5hbWUpOworICAgICAgICBpZiAodHJhbnNmb3JtTm9kZSkgeworICAgICAgICAgICAg
cmV0dXJuIHRyYW5zZm9ybU5vZGU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGxpZ2h0ID0gdGhp
cy5nZXRMaWdodEJ5TmFtZShuYW1lKTsKKyAgICAgICAgaWYgKGxpZ2h0KSB7CisgICAgICAgICAg
ICByZXR1cm4gbGlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuZ2V0
Q2FtZXJhQnlOYW1lKG5hbWUpOworICAgICAgICBpZiAoY2FtZXJhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gY2FtZXJhOworICAgICAgICB9CisgICAgICAgIHZhciBib25lID0gdGhpcy5nZXRCb25l
QnlOYW1lKG5hbWUpOworICAgICAgICBpZiAoYm9uZSkgeworICAgICAgICAgICAgcmV0dXJuIGJv
bmU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXRzIGEgbWVzaCB1c2luZyBhIGdpdmVuIG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBk
ZWZpbmVzIHRoZSBuYW1lIHRvIHNlYXJjaCBmb3IKKyAgICAgKiBAcmV0dXJuIHRoZSBmb3VuZCBt
ZXNoIG9yIG51bGwgaWYgbm90IGZvdW5kIGF0IGFsbC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90
b3R5cGUuZ2V0TWVzaEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm1lc2hlcy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAg
ICAgICAgIGlmICh0aGlzLm1lc2hlc1tpbmRleF0ubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLm1lc2hlc1tpbmRleF07CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEg
dHJhbnNmb3JtIG5vZGUgdXNpbmcgYSBnaXZlbiBuYW1lCisgICAgICogQHBhcmFtIG5hbWUgZGVm
aW5lcyB0aGUgbmFtZSB0byBzZWFyY2ggZm9yCisgICAgICogQHJldHVybiB0aGUgZm91bmQgdHJh
bnNmb3JtIG5vZGUgb3IgbnVsbCBpZiBub3QgZm91bmQgYXQgYWxsLgorICAgICAqLworICAgIFNj
ZW5lLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1Ob2RlQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHsK
KyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMudHJhbnNmb3JtTm9kZXMu
bGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1Ob2Rlc1tp
bmRleF0ubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5z
Zm9ybU5vZGVzW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBza2VsZXRvbiB1c2luZyBh
IGdpdmVuIGlkIChpZiBtYW55IGFyZSBmb3VuZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHBpY2sgdGhl
IGxhc3Qgb25lKQorICAgICAqIEBwYXJhbSBpZCBkZWZpbmVzIHRoZSBpZCB0byBzZWFyY2ggZm9y
CisgICAgICogQHJldHVybiB0aGUgZm91bmQgc2tlbGV0b24gb3IgbnVsbCBpZiBub3QgZm91bmQg
YXQgYWxsLgorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRMYXN0U2tlbGV0b25CeUlE
ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gdGhpcy5za2VsZXRv
bnMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuc2tlbGV0b25zW2luZGV4XS5pZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5za2VsZXRvbnNbaW5kZXhdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxsOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyBhIHNrZWxldG9uIHVz
aW5nIGEgZ2l2ZW4gYXV0byBnZW5lcmF0ZWQgdW5pcXVlIGlkCisgICAgICogQHBhcmFtICB1bmlx
dWVJZCBkZWZpbmVzIHRoZSB1bmlxdWUgaWQgdG8gc2VhcmNoIGZvcgorICAgICAqIEByZXR1cm4g
dGhlIGZvdW5kIHNrZWxldG9uIG9yIG51bGwgaWYgbm90IGZvdW5kIGF0IGFsbC4KKyAgICAgKi8K
KyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0U2tlbGV0b25CeVVuaXF1ZUlkID0gZnVuY3Rpb24gKHVu
aXF1ZUlkKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnNrZWxl
dG9ucy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnNrZWxldG9uc1tp
bmRleF0udW5pcXVlSWQgPT09IHVuaXF1ZUlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuc2tlbGV0b25zW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBza2VsZXRvbiB1c2lu
ZyBhIGdpdmVuIGlkIChpZiBtYW55IGFyZSBmb3VuZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHBpY2sg
dGhlIGZpcnN0IG9uZSkKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5lcyB0aGUgaWQgdG8gc2VhcmNo
IGZvcgorICAgICAqIEByZXR1cm4gdGhlIGZvdW5kIHNrZWxldG9uIG9yIG51bGwgaWYgbm90IGZv
dW5kIGF0IGFsbC4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZ2V0U2tlbGV0b25CeUlk
ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0
aGlzLnNrZWxldG9ucy5sZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnNr
ZWxldG9uc1tpbmRleF0uaWQgPT09IGlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
c2tlbGV0b25zW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBza2VsZXRvbiB1c2luZyBh
IGdpdmVuIG5hbWUKKyAgICAgKiBAcGFyYW0gbmFtZSBkZWZpbmVzIHRoZSBuYW1lIHRvIHNlYXJj
aCBmb3IKKyAgICAgKiBAcmV0dXJuIHRoZSBmb3VuZCBza2VsZXRvbiBvciBudWxsIGlmIG5vdCBm
b3VuZCBhdCBhbGwuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdldFNrZWxldG9uQnlO
YW1lID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IHRoaXMuc2tlbGV0b25zLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKHRo
aXMuc2tlbGV0b25zW2luZGV4XS5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuc2tlbGV0b25zW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworICAgIC8qKgorICAgICAqIEdldHMgYSBtb3JwaCB0
YXJnZXQgbWFuYWdlciAgdXNpbmcgYSBnaXZlbiBpZCAoaWYgbWFueSBhcmUgZm91bmQsIHRoaXMg
ZnVuY3Rpb24gd2lsbCBwaWNrIHRoZSBsYXN0IG9uZSkKKyAgICAgKiBAcGFyYW0gaWQgZGVmaW5l
cyB0aGUgaWQgdG8gc2VhcmNoIGZvcgorICAgICAqIEByZXR1cm4gdGhlIGZvdW5kIG1vcnBoIHRh
cmdldCBtYW5hZ2VyIG9yIG51bGwgaWYgbm90IGZvdW5kIGF0IGFsbC4KKyAgICAgKi8KKyAgICBT
Y2VuZS5wcm90b3R5cGUuZ2V0TW9ycGhUYXJnZXRNYW5hZ2VyQnlJZCA9IGZ1bmN0aW9uIChpZCkg
eworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5tb3JwaFRhcmdldE1h
bmFnZXJzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKHRoaXMubW9ycGhUYXJn
ZXRNYW5hZ2Vyc1tpbmRleF0udW5pcXVlSWQgPT09IGlkKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMubW9ycGhUYXJnZXRNYW5hZ2Vyc1tpbmRleF07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRz
IGEgbW9ycGggdGFyZ2V0IHVzaW5nIGEgZ2l2ZW4gaWQgKGlmIG1hbnkgYXJlIGZvdW5kLCB0aGlz
IGZ1bmN0aW9uIHdpbGwgcGljayB0aGUgZmlyc3Qgb25lKQorICAgICAqIEBwYXJhbSBpZCBkZWZp
bmVzIHRoZSBpZCB0byBzZWFyY2ggZm9yCisgICAgICogQHJldHVybiB0aGUgZm91bmQgbW9ycGgg
dGFyZ2V0IG9yIG51bGwgaWYgbm90IGZvdW5kIGF0IGFsbC4KKyAgICAgKi8KKyAgICBTY2VuZS5w
cm90b3R5cGUuZ2V0TW9ycGhUYXJnZXRCeUlkID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIGZv
ciAodmFyIG1hbmFnZXJJbmRleCA9IDA7IG1hbmFnZXJJbmRleCA8IHRoaXMubW9ycGhUYXJnZXRN
YW5hZ2Vycy5sZW5ndGg7ICsrbWFuYWdlckluZGV4KSB7CisgICAgICAgICAgICB2YXIgbW9ycGhU
YXJnZXRNYW5hZ2VyID0gdGhpcy5tb3JwaFRhcmdldE1hbmFnZXJzW21hbmFnZXJJbmRleF07Cisg
ICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbW9ycGhUYXJnZXRNYW5hZ2Vy
Lm51bVRhcmdldHM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gbW9y
cGhUYXJnZXRNYW5hZ2VyLmdldFRhcmdldChpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHRh
cmdldC5pZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5n
IGlmIHRoZSBnaXZlbiBtZXNoIGlzIGFjdGl2ZQorICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMg
dGhlIG1lc2ggdG8gbG9vayBmb3IKKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBtZXNoIGlz
IGluIHRoZSBhY3RpdmUgbGlzdAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5pc0FjdGl2
ZU1lc2ggPSBmdW5jdGlvbiAobWVzaCkgeworICAgICAgICByZXR1cm4gKHRoaXMuX2FjdGl2ZU1l
c2hlcy5pbmRleE9mKG1lc2gpICE9PSAtMSk7CisgICAgfTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoU2NlbmUucHJvdG90eXBlLCAidWlkIiwgeworICAgICAgICAvKioKKyAgICAgICAgICog
UmV0dXJuIGEgdW5pcXVlIGlkIGFzIGEgc3RyaW5nIHdoaWNoIGNhbiBzZXJ2ZSBhcyBhbiBpZGVu
dGlmaWVyIGZvciB0aGUgc2NlbmUKKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl91aWQpIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll91aWQgPSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJUb29scyJd
LlJhbmRvbUlkKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdWlk
OworICAgICAgICB9LAorICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICAvKioKKyAgICAgKiBBZGQgYW4gZXh0ZXJuYWx5IGF0
dGFjaGVkIGRhdGEgZnJvbSBpdHMga2V5LgorICAgICAqIFRoaXMgbWV0aG9kIGNhbGwgd2lsbCBm
YWlsIGFuZCByZXR1cm4gZmFsc2UsIGlmIHN1Y2gga2V5IGFscmVhZHkgZXhpc3RzLgorICAgICAq
IElmIHlvdSBkb24ndCBjYXJlIGFuZCBqdXN0IHdhbnQgdG8gZ2V0IHRoZSBkYXRhIG5vIG1hdHRl
ciB3aGF0LCB1c2UgdGhlIG1vcmUgY29udmVuaWVudCBnZXRPckFkZEV4dGVybmFsRGF0YVdpdGhG
YWN0b3J5KCkgbWV0aG9kLgorICAgICAqIEBwYXJhbSBrZXkgdGhlIHVuaXF1ZSBrZXkgdGhhdCBp
ZGVudGlmaWVzIHRoZSBkYXRhCisgICAgICogQHBhcmFtIGRhdGEgdGhlIGRhdGEgb2JqZWN0IHRv
IGFzc29jaWF0ZSB0byB0aGUga2V5IGZvciB0aGlzIEVuZ2luZSBpbnN0YW5jZQorICAgICAqIEBy
ZXR1cm4gdHJ1ZSBpZiBubyBzdWNoIGtleSB3ZXJlIGFscmVhZHkgcHJlc2VudCBhbmQgdGhlIGRh
dGEgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAg
U2NlbmUucHJvdG90eXBlLmFkZEV4dGVybmFsRGF0YSA9IGZ1bmN0aW9uIChrZXksIGRhdGEpIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9leHRlcm5hbERhdGEpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4
dGVybmFsRGF0YSA9IG5ldyBfTWlzY19zdHJpbmdEaWN0aW9uYXJ5X19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bIlN0cmluZ0RpY3Rpb25hcnkiXSgpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLl9leHRlcm5hbERhdGEuYWRkKGtleSwgZGF0YSk7CisgICAgfTsKKyAgICAvKioK
KyAgICAgKiBHZXQgYW4gZXh0ZXJuYWx5IGF0dGFjaGVkIGRhdGEgZnJvbSBpdHMga2V5CisgICAg
ICogQHBhcmFtIGtleSB0aGUgdW5pcXVlIGtleSB0aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEKKyAg
ICAgKiBAcmV0dXJuIHRoZSBhc3NvY2lhdGVkIGRhdGEsIGlmIHByZXNlbnQgKGNhbiBiZSBudWxs
KSwgb3IgdW5kZWZpbmVkIGlmIG5vdCBwcmVzZW50CisgICAgICovCisgICAgU2NlbmUucHJvdG90
eXBlLmdldEV4dGVybmFsRGF0YSA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgaWYgKCF0aGlz
Ll9leHRlcm5hbERhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLl9leHRlcm5hbERhdGEuZ2V0KGtleSk7CisgICAgfTsKKyAgICAv
KioKKyAgICAgKiBHZXQgYW4gZXh0ZXJuYWx5IGF0dGFjaGVkIGRhdGEgZnJvbSBpdHMga2V5LCBj
cmVhdGUgaXQgdXNpbmcgYSBmYWN0b3J5IGlmIGl0J3Mgbm90IGFscmVhZHkgcHJlc2VudAorICAg
ICAqIEBwYXJhbSBrZXkgdGhlIHVuaXF1ZSBrZXkgdGhhdCBpZGVudGlmaWVzIHRoZSBkYXRhCisg
ICAgICogQHBhcmFtIGZhY3RvcnkgdGhlIGZhY3RvcnkgdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBj
cmVhdGUgdGhlIGluc3RhbmNlIGlmIGFuZCBvbmx5IGlmIGl0IGRvZXNuJ3QgZXhpc3RzCisgICAg
ICogQHJldHVybiB0aGUgYXNzb2NpYXRlZCBkYXRhLCBjYW4gYmUgbnVsbCBpZiB0aGUgZmFjdG9y
eSByZXR1cm5lZCBudWxsLgorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRPckFkZEV4
dGVybmFsRGF0YVdpdGhGYWN0b3J5ID0gZnVuY3Rpb24gKGtleSwgZmFjdG9yeSkgeworICAgICAg
ICBpZiAoIXRoaXMuX2V4dGVybmFsRGF0YSkgeworICAgICAgICAgICAgdGhpcy5fZXh0ZXJuYWxE
YXRhID0gbmV3IF9NaXNjX3N0cmluZ0RpY3Rpb25hcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siU3RyaW5nRGljdGlvbmFyeSJdKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXMuX2V4dGVybmFsRGF0YS5nZXRPckFkZFdpdGhGYWN0b3J5KGtleSwgZmFjdG9yeSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYW4gZXh0ZXJuYWx5IGF0dGFjaGVkIGRhdGEgZnJv
bSB0aGUgRW5naW5lIGluc3RhbmNlCisgICAgICogQHBhcmFtIGtleSB0aGUgdW5pcXVlIGtleSB0
aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGRhdGEg
d2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkLCBmYWxzZSBpZiBpdCBkb2Vzbid0IGV4aXN0CisgICAg
ICovCisgICAgU2NlbmUucHJvdG90eXBlLnJlbW92ZUV4dGVybmFsRGF0YSA9IGZ1bmN0aW9uIChr
ZXkpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2V4dGVybmFsRGF0YS5yZW1vdmUoa2V5KTsKKyAg
ICB9OworICAgIFNjZW5lLnByb3RvdHlwZS5fZXZhbHVhdGVTdWJNZXNoID0gZnVuY3Rpb24gKHN1
Yk1lc2gsIG1lc2gsIGluaXRpYWxNZXNoKSB7CisgICAgICAgIGlmIChpbml0aWFsTWVzaC5oYXNJ
bnN0YW5jZXMgfHwgaW5pdGlhbE1lc2guaXNBbkluc3RhbmNlIHx8IHRoaXMuZGlzcGF0Y2hBbGxT
dWJNZXNoZXNPZkFjdGl2ZU1lc2hlcyB8fCBtZXNoLmFsd2F5c1NlbGVjdEFzQWN0aXZlTWVzaCB8
fCBtZXNoLnN1Yk1lc2hlcy5sZW5ndGggPT09IDEgfHwgc3ViTWVzaC5pc0luRnJ1c3R1bSh0aGlz
Ll9mcnVzdHVtUGxhbmVzKSkgeworICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRo
aXMuX2V2YWx1YXRlU3ViTWVzaFN0YWdlOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAg
ICAgICAgICAgIHZhciBzdGVwID0gX2FbX2ldOworICAgICAgICAgICAgICAgIHN0ZXAuYWN0aW9u
KG1lc2gsIHN1Yk1lc2gpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1hdGVyaWFs
ID0gc3ViTWVzaC5nZXRNYXRlcmlhbCgpOworICAgICAgICAgICAgaWYgKG1hdGVyaWFsICE9PSBu
dWxsICYmIG1hdGVyaWFsICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBSZW5k
ZXIgdGFyZ2V0cworICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5oYXNSZW5kZXJUYXJnZXRU
ZXh0dXJlcyAmJiBtYXRlcmlhbC5nZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyAhPSBudWxsKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcm9jZXNzZWRNYXRlcmlhbHMuaW5kZXhPZiht
YXRlcmlhbCkgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNz
ZWRNYXRlcmlhbHMucHVzaChtYXRlcmlhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9yZW5kZXJUYXJnZXRzLmNvbmNhdFdpdGhOb0R1cGxpY2F0ZShtYXRlcmlhbC5nZXRSZW5kZXJU
YXJnZXRUZXh0dXJlcygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAvLyBEaXNwYXRjaAorICAgICAgICAgICAgICAgIHRoaXMuX2Fj
dGl2ZUluZGljZXMuYWRkQ291bnQoc3ViTWVzaC5pbmRleENvdW50LCBmYWxzZSk7CisgICAgICAg
ICAgICAgICAgdGhpcy5fcmVuZGVyaW5nTWFuYWdlci5kaXNwYXRjaChzdWJNZXNoLCBtZXNoLCBt
YXRlcmlhbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAg
ICAqIENsZWFyIHRoZSBwcm9jZXNzZWQgbWF0ZXJpYWxzIHNtYXJ0IGFycmF5IHByZXZlbnRpbmcg
cmV0ZW50aW9uIHBvaW50IGluIG1hdGVyaWFsIGRpc3Bvc2UuCisgICAgICovCisgICAgU2NlbmUu
cHJvdG90eXBlLmZyZWVQcm9jZXNzZWRNYXRlcmlhbHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHRoaXMuX3Byb2Nlc3NlZE1hdGVyaWFscy5kaXNwb3NlKCk7CisgICAgfTsKKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoU2NlbmUucHJvdG90eXBlLCAiYmxvY2tmcmVlQWN0aXZlTWVzaGVzQW5k
UmVuZGVyaW5nR3JvdXBzIiwgeworICAgICAgICAvKiogR2V0cyBvciBzZXRzIGEgYm9vbGVhbiBi
bG9ja2luZyBhbGwgdGhlIGNhbGxzIHRvIGZyZWVBY3RpdmVNZXNoZXMgYW5kIGZyZWVSZW5kZXJp
bmdHcm91cHMKKyAgICAgICAgICogSXQgY2FuIGJlIHVzZWQgaW4gb3JkZXIgdG8gcHJldmVudCBn
b2luZyB0aHJvdWdoIG1ldGhvZHMgZnJlZVJlbmRlcmluZ0dyb3VwcyBhbmQgZnJlZUFjdGl2ZU1l
c2hlcyBzZXZlcmFsIHRpbWVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UKKyAgICAgICAgICogd2hl
biBkaXNwb3Npbmcgc2V2ZXJhbCBtZXNoZXMgaW4gYSByb3cgb3IgYSBoaWVyYXJjaHkgb2YgbWVz
aGVzLgorICAgICAgICAgKiBXaGVuIHVzZWQsIGl0IGlzIHRoZSByZXNwb25zYWJpbGl0eSBvZiB0
aGUgdXNlciB0byBibG9ja2ZyZWVBY3RpdmVNZXNoZXNBbmRSZW5kZXJpbmdHcm91cHMgYmFjayB0
byBmYWxzZS4KKyAgICAgICAgICovCisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3ByZXZlbnRGcmVlQWN0aXZlTWVzaGVzQW5kUmVuZGVyaW5nR3Jv
dXBzOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX3ByZXZlbnRGcmVlQWN0aXZlTWVzaGVzQW5kUmVuZGVyaW5nR3JvdXBz
ID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuZnJlZUFjdGl2ZU1l
c2hlcygpOworICAgICAgICAgICAgICAgIHRoaXMuZnJlZVJlbmRlcmluZ0dyb3VwcygpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fcHJldmVudEZyZWVBY3RpdmVNZXNoZXNBbmRS
ZW5kZXJpbmdHcm91cHMgPSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAg
ICogQ2xlYXIgdGhlIGFjdGl2ZSBtZXNoZXMgc21hcnQgYXJyYXkgcHJldmVudGluZyByZXRlbnRp
b24gcG9pbnQgaW4gbWVzaCBkaXNwb3NlLgorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5m
cmVlQWN0aXZlTWVzaGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5ibG9ja2Zy
ZWVBY3RpdmVNZXNoZXNBbmRSZW5kZXJpbmdHcm91cHMpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9hY3RpdmVNZXNoZXMuZGlzcG9zZSgpOworICAgICAg
ICBpZiAodGhpcy5hY3RpdmVDYW1lcmEgJiYgdGhpcy5hY3RpdmVDYW1lcmEuX2FjdGl2ZU1lc2hl
cykgeworICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmEuX2FjdGl2ZU1lc2hlcy5kaXNwb3Nl
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FtZXJhcykgeworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFjdGl2ZUNhbWVyYXMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICB2YXIgYWN0aXZlQ2FtZXJhID0gdGhpcy5hY3RpdmVDYW1lcmFz
W2ldOworICAgICAgICAgICAgICAgIGlmIChhY3RpdmVDYW1lcmEgJiYgYWN0aXZlQ2FtZXJhLl9h
Y3RpdmVNZXNoZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlQ2FtZXJhLl9hY3RpdmVN
ZXNoZXMuZGlzcG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogQ2xlYXIgdGhlIGluZm8gcmVsYXRlZCB0byBy
ZW5kZXJpbmcgZ3JvdXBzIHByZXZlbnRpbmcgcmV0ZW50aW9uIHBvaW50cyBkdXJpbmcgZGlzcG9z
ZS4KKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZnJlZVJlbmRlcmluZ0dyb3VwcyA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuYmxvY2tmcmVlQWN0aXZlTWVzaGVzQW5kUmVu
ZGVyaW5nR3JvdXBzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX3JlbmRlcmluZ01hbmFnZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlcmlu
Z01hbmFnZXIuZnJlZVJlbmRlcmluZ0dyb3VwcygpOworICAgICAgICB9CisgICAgICAgIGlmICh0
aGlzLnRleHR1cmVzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4
dHVyZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMu
dGV4dHVyZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS5yZW5k
ZXJMaXN0KSB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZnJlZVJlbmRlcmluZ0dyb3Vw
cygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuX2lzSW5JbnRlcm1lZGlh
dGVSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm1l
ZGlhdGVSZW5kZXJpbmc7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBVc2UgdGhpcyBmdW5jdGlv
biB0byBzdG9wIGV2YWx1YXRpbmcgYWN0aXZlIG1lc2hlcy4gVGhlIGN1cnJlbnQgbGlzdCB3aWxs
IGJlIGtlZXAgYWxpdmUgYmV0d2VlbiBmcmFtZXMKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVu
dCBzY2VuZQorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5mcmVlemVBY3RpdmVNZXNoZXMg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICghdGhpcy5hY3RpdmVDYW1lcmEpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fZnJ1c3R1
bVBsYW5lcykgeworICAgICAgICAgICAgdGhpcy5zZXRUcmFuc2Zvcm1NYXRyaXgodGhpcy5hY3Rp
dmVDYW1lcmEuZ2V0Vmlld01hdHJpeCgpLCB0aGlzLmFjdGl2ZUNhbWVyYS5nZXRQcm9qZWN0aW9u
TWF0cml4KCkpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2V2YWx1YXRlQWN0aXZlTWVzaGVz
KCk7CisgICAgICAgIHRoaXMuX2FjdGl2ZU1lc2hlc0Zyb3plbiA9IHRydWU7CisgICAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9hY3RpdmVNZXNoZXMubGVuZ3RoOyBpbmRl
eCsrKSB7CisgICAgICAgICAgICB0aGlzLl9hY3RpdmVNZXNoZXMuZGF0YVtpbmRleF0uX2ZyZWV6
ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLyoqCisg
ICAgICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmVzdGFydCBldmFsdWF0aW5nIGFjdGl2ZSBtZXNo
ZXMgb24gZXZlcnkgZnJhbWUKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBzY2VuZQorICAg
ICAqLworICAgIFNjZW5lLnByb3RvdHlwZS51bmZyZWV6ZUFjdGl2ZU1lc2hlcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubWVzaGVzLmxl
bmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLm1lc2hlc1tpbmRl
eF07CisgICAgICAgICAgICBpZiAobWVzaC5faW50ZXJuYWxBYnN0cmFjdE1lc2hEYXRhSW5mbykg
eworICAgICAgICAgICAgICAgIG1lc2guX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8uX2lz
QWN0aXZlID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2FjdGl2ZU1lc2hlcy5sZW5ndGg7IGluZGV4Kysp
IHsKKyAgICAgICAgICAgIHRoaXMuX2FjdGl2ZU1lc2hlcy5kYXRhW2luZGV4XS5fdW5GcmVlemUo
KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hY3RpdmVNZXNoZXNGcm96ZW4gPSBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBTY2VuZS5wcm90b3R5cGUuX2V2YWx1
YXRlQWN0aXZlTWVzaGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5fYWN0aXZl
TWVzaGVzRnJvemVuICYmIHRoaXMuX2FjdGl2ZU1lc2hlcy5sZW5ndGgpIHsKKyAgICAgICAgICAg
IHZhciBsZW5fMSA9IHRoaXMuX2FjdGl2ZU1lc2hlcy5sZW5ndGg7CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxlbl8xOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbWVzaCA9
IHRoaXMuX2FjdGl2ZU1lc2hlcy5kYXRhW2ldOworICAgICAgICAgICAgICAgIG1lc2guY29tcHV0
ZVdvcmxkTWF0cml4KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMub25CZWZvcmVBY3RpdmVNZXNoZXNFdmFsdWF0
aW9uT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIHRoaXMuYWN0aXZl
Q2FtZXJhLl9hY3RpdmVNZXNoZXMucmVzZXQoKTsKKyAgICAgICAgdGhpcy5fYWN0aXZlTWVzaGVz
LnJlc2V0KCk7CisgICAgICAgIHRoaXMuX3JlbmRlcmluZ01hbmFnZXIucmVzZXQoKTsKKyAgICAg
ICAgdGhpcy5fcHJvY2Vzc2VkTWF0ZXJpYWxzLnJlc2V0KCk7CisgICAgICAgIHRoaXMuX2FjdGl2
ZVBhcnRpY2xlU3lzdGVtcy5yZXNldCgpOworICAgICAgICB0aGlzLl9hY3RpdmVTa2VsZXRvbnMu
cmVzZXQoKTsKKyAgICAgICAgdGhpcy5fc29mdHdhcmVTa2lubmVkTWVzaGVzLnJlc2V0KCk7Cisg
ICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9iZWZvcmVFdmFsdWF0ZUFjdGl2ZU1l
c2hTdGFnZTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBzdGVwID0g
X2FbX2ldOworICAgICAgICAgICAgc3RlcC5hY3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBEZXRlcm1pbmUgbWVzaCBjYW5kaWRhdGVzCisgICAgICAgIHZhciBtZXNoZXMgPSB0aGlzLmdl
dEFjdGl2ZU1lc2hDYW5kaWRhdGVzKCk7CisgICAgICAgIC8vIENoZWNrIGVhY2ggbWVzaAorICAg
ICAgICB2YXIgbGVuID0gbWVzaGVzLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBsZW47IGkrKykgeworICAgICAgICAgICAgdmFyIG1lc2ggPSBtZXNoZXMuZGF0YVtpXTsKKyAg
ICAgICAgICAgIGlmIChtZXNoLmlzQmxvY2tlZCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fdG90YWxWZXJ0aWNlcy5hZGRDb3Vu
dChtZXNoLmdldFRvdGFsVmVydGljZXMoKSwgZmFsc2UpOworICAgICAgICAgICAgaWYgKCFtZXNo
LmlzUmVhZHkoKSB8fCAhbWVzaC5pc0VuYWJsZWQoKSB8fCBtZXNoLnNjYWxpbmcubGVuZ3RoU3F1
YXJlZCgpID09PSAwKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtZXNoLmNvbXB1dGVXb3JsZE1hdHJpeCgpOworICAgICAgICAgICAgLy8g
SW50ZXJzZWN0aW9ucworICAgICAgICAgICAgaWYgKG1lc2guYWN0aW9uTWFuYWdlciAmJiBtZXNo
LmFjdGlvbk1hbmFnZXIuaGFzU3BlY2lmaWNUcmlnZ2VyczIoX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25JbnRlcnNl
Y3Rpb25FbnRlclRyaWdnZXIsIF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMjBfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uSW50ZXJzZWN0aW9uRXhpdFRyaWdnZXIp
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fbWVzaGVzRm9ySW50ZXJzZWN0aW9ucy5wdXNoTm9E
dXBsaWNhdGUobWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBTd2l0Y2ggdG8g
Y3VycmVudCBMT0QKKyAgICAgICAgICAgIHZhciBtZXNoVG9SZW5kZXIgPSB0aGlzLmN1c3RvbUxP
RFNlbGVjdG9yID8gdGhpcy5jdXN0b21MT0RTZWxlY3RvcihtZXNoLCB0aGlzLmFjdGl2ZUNhbWVy
YSkgOiBtZXNoLmdldExPRCh0aGlzLmFjdGl2ZUNhbWVyYSk7CisgICAgICAgICAgICBpZiAobWVz
aFRvUmVuZGVyID09PSB1bmRlZmluZWQgfHwgbWVzaFRvUmVuZGVyID09PSBudWxsKSB7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDb21w
dXRlIHdvcmxkIG1hdHJpeCBpZiBMT0QgaXMgYmlsbGJvYXJkCisgICAgICAgICAgICBpZiAobWVz
aFRvUmVuZGVyICE9PSBtZXNoICYmIG1lc2hUb1JlbmRlci5iaWxsYm9hcmRNb2RlICE9PSBfTWVz
aGVzX3RyYW5zZm9ybU5vZGVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siVHJhbnNmb3Jt
Tm9kZSJdLkJJTExCT0FSRE1PREVfTk9ORSkgeworICAgICAgICAgICAgICAgIG1lc2hUb1JlbmRl
ci5jb21wdXRlV29ybGRNYXRyaXgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lc2gu
X3ByZUFjdGl2YXRlKCk7CisgICAgICAgICAgICBpZiAobWVzaC5pc1Zpc2libGUgJiYgbWVzaC52
aXNpYmlsaXR5ID4gMCAmJiAoKG1lc2gubGF5ZXJNYXNrICYgdGhpcy5hY3RpdmVDYW1lcmEubGF5
ZXJNYXNrKSAhPT0gMCkgJiYgKG1lc2guYWx3YXlzU2VsZWN0QXNBY3RpdmVNZXNoIHx8IG1lc2gu
aXNJbkZydXN0dW0odGhpcy5fZnJ1c3R1bVBsYW5lcykpKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fYWN0aXZlTWVzaGVzLnB1c2gobWVzaCk7CisgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVD
YW1lcmEuX2FjdGl2ZU1lc2hlcy5wdXNoKG1lc2gpOworICAgICAgICAgICAgICAgIGlmIChtZXNo
VG9SZW5kZXIgIT09IG1lc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzaFRvUmVuZGVyLl9h
Y3RpdmF0ZSh0aGlzLl9yZW5kZXJJZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAobWVzaC5fYWN0aXZhdGUodGhpcy5fcmVuZGVySWQsIGZhbHNlKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1lc2guaXNBbkluc3RhbmNlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtZXNoVG9SZW5kZXIuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8u
X29ubHlGb3JJbnN0YW5jZXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBtZXNoVG9SZW5kZXIuX2ludGVybmFsQWJzdHJhY3RNZXNoRGF0YUluZm8u
X2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlTWVzaCht
ZXNoLCBtZXNoVG9SZW5kZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBt
ZXNoLl9wb3N0QWN0aXZhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0
aGlzLm9uQWZ0ZXJBY3RpdmVNZXNoZXNFdmFsdWF0aW9uT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZl
cnModGhpcyk7CisgICAgICAgIC8vIFBhcnRpY2xlIHN5c3RlbXMKKyAgICAgICAgaWYgKHRoaXMu
cGFydGljbGVzRW5hYmxlZCkgeworICAgICAgICAgICAgdGhpcy5vbkJlZm9yZVBhcnRpY2xlc1Jl
bmRlcmluZ09ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICAgICAgZm9y
ICh2YXIgcGFydGljbGVJbmRleCA9IDA7IHBhcnRpY2xlSW5kZXggPCB0aGlzLnBhcnRpY2xlU3lz
dGVtcy5sZW5ndGg7IHBhcnRpY2xlSW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBwYXJ0
aWNsZVN5c3RlbSA9IHRoaXMucGFydGljbGVTeXN0ZW1zW3BhcnRpY2xlSW5kZXhdOworICAgICAg
ICAgICAgICAgIGlmICghcGFydGljbGVTeXN0ZW0uaXNTdGFydGVkKCkgfHwgIXBhcnRpY2xlU3lz
dGVtLmVtaXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBlbWl0dGVyID0gcGFydGljbGVTeXN0ZW0uZW1p
dHRlcjsKKyAgICAgICAgICAgICAgICBpZiAoIWVtaXR0ZXIucG9zaXRpb24gfHwgZW1pdHRlci5p
c0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVQYXJ0aWNsZVN5
c3RlbXMucHVzaChwYXJ0aWNsZVN5c3RlbSk7CisgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xl
U3lzdGVtLmFuaW1hdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nTWFu
YWdlci5kaXNwYXRjaFBhcnRpY2xlcyhwYXJ0aWNsZVN5c3RlbSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5vbkFmdGVyUGFydGljbGVzUmVuZGVy
aW5nT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIFNjZW5lLnByb3RvdHlwZS5fYWN0aXZlTWVzaCA9IGZ1bmN0aW9uIChzb3VyY2VNZXNoLCBt
ZXNoKSB7CisgICAgICAgIGlmICh0aGlzLl9za2VsZXRvbnNFbmFibGVkICYmIG1lc2guc2tlbGV0
b24gIT09IG51bGwgJiYgbWVzaC5za2VsZXRvbiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5fYWN0aXZlU2tlbGV0b25zLnB1c2hOb0R1cGxpY2F0ZShtZXNoLnNrZWxldG9u
KSkgeworICAgICAgICAgICAgICAgIG1lc2guc2tlbGV0b24ucHJlcGFyZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKCFtZXNoLmNvbXB1dGVCb25lc1VzaW5nU2hhZGVycykgewor
ICAgICAgICAgICAgICAgIHRoaXMuX3NvZnR3YXJlU2tpbm5lZE1lc2hlcy5wdXNoTm9EdXBsaWNh
dGUobWVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgX2kg
PSAwLCBfYSA9IHRoaXMuX2FjdGl2ZU1lc2hTdGFnZTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsK
KyAgICAgICAgICAgIHZhciBzdGVwID0gX2FbX2ldOworICAgICAgICAgICAgc3RlcC5hY3Rpb24o
c291cmNlTWVzaCwgbWVzaCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc2ggIT09IHVuZGVm
aW5lZCAmJiBtZXNoICE9PSBudWxsCisgICAgICAgICAgICAmJiBtZXNoLnN1Yk1lc2hlcyAhPT0g
dW5kZWZpbmVkICYmIG1lc2guc3ViTWVzaGVzICE9PSBudWxsICYmIG1lc2guc3ViTWVzaGVzLmxl
bmd0aCA+IDApIHsKKyAgICAgICAgICAgIHZhciBzdWJNZXNoZXMgPSB0aGlzLmdldEFjdGl2ZVN1
Yk1lc2hDYW5kaWRhdGVzKG1lc2gpOworICAgICAgICAgICAgdmFyIGxlbiA9IHN1Yk1lc2hlcy5s
ZW5ndGg7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBzdWJNZXNoZXMuZGF0YVtpXTsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9ldmFsdWF0ZVN1Yk1lc2goc3ViTWVzaCwgbWVzaCwgc291cmNlTWVzaCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0
aGUgdHJhbnNmb3JtIG1hdHJpeCB0byB1cGRhdGUgZnJvbSB0aGUgY3VycmVudCBhY3RpdmUgY2Ft
ZXJhCisgICAgICogQHBhcmFtIGZvcmNlIGRlZmluZXMgYSBib29sZWFuIHVzZWQgdG8gZm9yY2Ug
dGhlIHVwZGF0ZSBldmVuIGlmIGNhY2hlIGlzIHVwIHRvIGRhdGUKKyAgICAgKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtTWF0cml4ID0gZnVuY3Rpb24gKGZvcmNlKSB7Cisg
ICAgICAgIGlmICghdGhpcy5hY3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLnNldFRyYW5zZm9ybU1hdHJpeCh0aGlzLmFjdGl2ZUNhbWVy
YS5nZXRWaWV3TWF0cml4KCksIHRoaXMuYWN0aXZlQ2FtZXJhLmdldFByb2plY3Rpb25NYXRyaXgo
Zm9yY2UpKTsKKyAgICB9OworICAgIFNjZW5lLnByb3RvdHlwZS5fYmluZEZyYW1lQnVmZmVyID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5hY3RpdmVDYW1lcmEgJiYgdGhpcy5hY3Rp
dmVDYW1lcmEuX211bHRpdmlld1RleHR1cmUpIHsKKyAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2Ft
ZXJhLl9tdWx0aXZpZXdUZXh0dXJlLl9iaW5kRnJhbWVCdWZmZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZUNhbWVyYSAmJiB0aGlzLmFjdGl2ZUNhbWVyYS5vdXRw
dXRSZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIHZhciB1c2VNdWx0aXZpZXcgPSB0aGlzLmdl
dEVuZ2luZSgpLmdldENhcHMoKS5tdWx0aXZpZXcgJiYgdGhpcy5hY3RpdmVDYW1lcmEub3V0cHV0
UmVuZGVyVGFyZ2V0ICYmIHRoaXMuYWN0aXZlQ2FtZXJhLm91dHB1dFJlbmRlclRhcmdldC5nZXRW
aWV3Q291bnQoKSA+IDE7CisgICAgICAgICAgICBpZiAodXNlTXVsdGl2aWV3KSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmEub3V0cHV0UmVuZGVyVGFyZ2V0Ll9iaW5kRnJhbWVC
dWZmZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHZhciBpbnRlcm5hbFRleHR1cmUgPSB0aGlzLmFjdGl2ZUNhbWVyYS5vdXRwdXRSZW5kZXJU
YXJnZXQuZ2V0SW50ZXJuYWxUZXh0dXJlKCk7CisgICAgICAgICAgICAgICAgaWYgKGludGVybmFs
VGV4dHVyZSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEVuZ2luZSgpLmJpbmRGcmFt
ZWJ1ZmZlcihpbnRlcm5hbFRleHR1cmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgX01pc2NfbG9nZ2VyX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yMl9fWyJMb2dnZXIiXS5FcnJvcigiQ2FtZXJhIGNvbnRhaW5zIGludmFs
aWQgY3VzdG9tRGVmYXVsdFJlbmRlclRhcmdldCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuZ2V0
RW5naW5lKCkucmVzdG9yZURlZmF1bHRGcmFtZWJ1ZmZlcigpOyAvLyBSZXN0b3JlIGJhY2sgYnVm
ZmVyIGlmIG5lZWRlZAorICAgICAgICB9CisgICAgfTsKKyAgICAvKiogQGhpZGRlbiAqLworICAg
IFNjZW5lLnByb3RvdHlwZS5fcmVuZGVyRm9yQ2FtZXJhID0gZnVuY3Rpb24gKGNhbWVyYSwgcmln
UGFyZW50KSB7CisgICAgICAgIGlmIChjYW1lcmEgJiYgY2FtZXJhLl9za2lwUmVuZGVyaW5nKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVuZ2luZSA9IHRo
aXMuX2VuZ2luZTsKKyAgICAgICAgLy8gVXNlIF9hY3RpdmVDYW1lcmEgaW5zdGVhZCBvZiBhY3Rp
dmVDYW1lcmEgdG8gYXZvaWQgb25BY3RpdmVDYW1lcmFDaGFuZ2VkCisgICAgICAgIHRoaXMuX2Fj
dGl2ZUNhbWVyYSA9IGNhbWVyYTsKKyAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZUNhbWVyYSkgewor
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBY3RpdmUgY2FtZXJhIG5vdCBzZXQiKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBWaWV3cG9ydAorICAgICAgICBlbmdpbmUuc2V0Vmlld3BvcnQo
dGhpcy5hY3RpdmVDYW1lcmEudmlld3BvcnQpOworICAgICAgICAvLyBDYW1lcmEKKyAgICAgICAg
dGhpcy5yZXNldENhY2hlZE1hdGVyaWFsKCk7CisgICAgICAgIHRoaXMuX3JlbmRlcklkKys7Cisg
ICAgICAgIHZhciB1c2VNdWx0aXZpZXcgPSB0aGlzLmdldEVuZ2luZSgpLmdldENhcHMoKS5tdWx0
aXZpZXcgJiYgY2FtZXJhLm91dHB1dFJlbmRlclRhcmdldCAmJiBjYW1lcmEub3V0cHV0UmVuZGVy
VGFyZ2V0LmdldFZpZXdDb3VudCgpID4gMTsKKyAgICAgICAgaWYgKHVzZU11bHRpdmlldykgewor
ICAgICAgICAgICAgdGhpcy5zZXRUcmFuc2Zvcm1NYXRyaXgoY2FtZXJhLl9yaWdDYW1lcmFzWzBd
LmdldFZpZXdNYXRyaXgoKSwgY2FtZXJhLl9yaWdDYW1lcmFzWzBdLmdldFByb2plY3Rpb25NYXRy
aXgoKSwgY2FtZXJhLl9yaWdDYW1lcmFzWzFdLmdldFZpZXdNYXRyaXgoKSwgY2FtZXJhLl9yaWdD
YW1lcmFzWzFdLmdldFByb2plY3Rpb25NYXRyaXgoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybU1hdHJpeCgpOworICAgICAgICB9
CisgICAgICAgIHRoaXMub25CZWZvcmVDYW1lcmFSZW5kZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2Vy
dmVycyh0aGlzLmFjdGl2ZUNhbWVyYSk7CisgICAgICAgIC8vIE1lc2hlcworICAgICAgICB0aGlz
Ll9ldmFsdWF0ZUFjdGl2ZU1lc2hlcygpOworICAgICAgICAvLyBTb2Z0d2FyZSBza2lubmluZwor
ICAgICAgICBmb3IgKHZhciBzb2Z0d2FyZVNraW5uZWRNZXNoSW5kZXggPSAwOyBzb2Z0d2FyZVNr
aW5uZWRNZXNoSW5kZXggPCB0aGlzLl9zb2Z0d2FyZVNraW5uZWRNZXNoZXMubGVuZ3RoOyBzb2Z0
d2FyZVNraW5uZWRNZXNoSW5kZXgrKykgeworICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLl9z
b2Z0d2FyZVNraW5uZWRNZXNoZXMuZGF0YVtzb2Z0d2FyZVNraW5uZWRNZXNoSW5kZXhdOworICAg
ICAgICAgICAgbWVzaC5hcHBseVNrZWxldG9uKG1lc2guc2tlbGV0b24pOworICAgICAgICB9Cisg
ICAgICAgIC8vIFJlbmRlciB0YXJnZXRzCisgICAgICAgIHRoaXMub25CZWZvcmVSZW5kZXJUYXJn
ZXRzUmVuZGVyT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgIGlmIChj
YW1lcmEuY3VzdG9tUmVuZGVyVGFyZ2V0cyAmJiBjYW1lcmEuY3VzdG9tUmVuZGVyVGFyZ2V0cy5s
ZW5ndGggPiAwKSB7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJUYXJnZXRzLmNvbmNhdFdpdGhO
b0R1cGxpY2F0ZShjYW1lcmEuY3VzdG9tUmVuZGVyVGFyZ2V0cyk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHJpZ1BhcmVudCAmJiByaWdQYXJlbnQuY3VzdG9tUmVuZGVyVGFyZ2V0cyAmJiByaWdQ
YXJlbnQuY3VzdG9tUmVuZGVyVGFyZ2V0cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB0aGlz
Ll9yZW5kZXJUYXJnZXRzLmNvbmNhdFdpdGhOb0R1cGxpY2F0ZShyaWdQYXJlbnQuY3VzdG9tUmVu
ZGVyVGFyZ2V0cyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29sbGVjdHMgcmVuZGVyIHRhcmdl
dHMgZnJvbSBleHRlcm5hbCBjb21wb25lbnRzLgorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9h
ID0gdGhpcy5fZ2F0aGVyQWN0aXZlQ2FtZXJhUmVuZGVyVGFyZ2V0c1N0YWdlOyBfaSA8IF9hLmxl
bmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIHN0ZXAgPSBfYVtfaV07CisgICAgICAgICAg
ICBzdGVwLmFjdGlvbih0aGlzLl9yZW5kZXJUYXJnZXRzKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5yZW5kZXJUYXJnZXRzRW5hYmxlZCkgeworICAgICAgICAgICAgdGhpcy5faW50ZXJt
ZWRpYXRlUmVuZGVyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHZhciBuZWVkUmViaW5kID0gZmFs
c2U7CisgICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyVGFyZ2V0cy5sZW5ndGggPiAwKSB7Cisg
ICAgICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
VG9vbHMiXS5TdGFydFBlcmZvcm1hbmNlQ291bnRlcigiUmVuZGVyIHRhcmdldHMiLCB0aGlzLl9y
ZW5kZXJUYXJnZXRzLmxlbmd0aCA+IDApOworICAgICAgICAgICAgICAgIGZvciAodmFyIHJlbmRl
ckluZGV4ID0gMDsgcmVuZGVySW5kZXggPCB0aGlzLl9yZW5kZXJUYXJnZXRzLmxlbmd0aDsgcmVu
ZGVySW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhp
cy5fcmVuZGVyVGFyZ2V0cy5kYXRhW3JlbmRlckluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJlbmRlclRhcmdldC5fc2hvdWxkUmVuZGVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3JlbmRlcklkKys7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzU3Bl
Y2lhbFJlbmRlclRhcmdldENhbWVyYSA9IHJlbmRlclRhcmdldC5hY3RpdmVDYW1lcmEgJiYgcmVu
ZGVyVGFyZ2V0LmFjdGl2ZUNhbWVyYSAhPT0gdGhpcy5hY3RpdmVDYW1lcmE7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZW5kZXJUYXJnZXQucmVuZGVyKGhhc1NwZWNpYWxSZW5kZXJUYXJnZXRD
YW1lcmEsIHRoaXMuZHVtcE5leHRSZW5kZXJUYXJnZXRzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5lZWRSZWJpbmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIF9NaXNjX3Rvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bIlRvb2xzIl0uRW5kUGVyZm9ybWFuY2VDb3VudGVyKCJSZW5kZXIgdGFyZ2V0cyIs
IHRoaXMuX3JlbmRlclRhcmdldHMubGVuZ3RoID4gMCk7CisgICAgICAgICAgICAgICAgdGhpcy5f
cmVuZGVySWQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIF9iID0gMCwg
X2MgPSB0aGlzLl9jYW1lcmFEcmF3UmVuZGVyVGFyZ2V0U3RhZ2U7IF9iIDwgX2MubGVuZ3RoOyBf
YisrKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBfY1tfYl07CisgICAgICAgICAgICAg
ICAgbmVlZFJlYmluZCA9IHN0ZXAuYWN0aW9uKHRoaXMuYWN0aXZlQ2FtZXJhKSB8fCBuZWVkUmVi
aW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5faW50ZXJtZWRpYXRlUmVuZGVy
aW5nID0gZmFsc2U7CisgICAgICAgICAgICAvLyBOZWVkIHRvIGJpbmQgaWYgc3ViLWNhbWVyYSBo
YXMgYW4gb3V0cHV0UmVuZGVyVGFyZ2V0IGVnLiBmb3Igd2ViWFIKKyAgICAgICAgICAgIGlmICh0
aGlzLmFjdGl2ZUNhbWVyYSAmJiB0aGlzLmFjdGl2ZUNhbWVyYS5vdXRwdXRSZW5kZXJUYXJnZXQp
IHsKKyAgICAgICAgICAgICAgICBuZWVkUmViaW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIFJlc3RvcmUgZnJhbWVidWZmZXIgYWZ0ZXIgcmVuZGVyaW5nIHRvIHRhcmdl
dHMKKyAgICAgICAgICAgIGlmIChuZWVkUmViaW5kKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
YmluZEZyYW1lQnVmZmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5vbkFmdGVyUmVuZGVyVGFyZ2V0c1JlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRo
aXMpOworICAgICAgICAvLyBQcmVwYXJlIEZyYW1lCisgICAgICAgIGlmICh0aGlzLnBvc3RQcm9j
ZXNzTWFuYWdlciAmJiAhY2FtZXJhLl9tdWx0aXZpZXdUZXh0dXJlKSB7CisgICAgICAgICAgICB0
aGlzLnBvc3RQcm9jZXNzTWFuYWdlci5fcHJlcGFyZUZyYW1lKCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gQmVmb3JlIENhbWVyYSBEcmF3CisgICAgICAgIGZvciAodmFyIF9kID0gMCwgX2UgPSB0
aGlzLl9iZWZvcmVDYW1lcmFEcmF3U3RhZ2U7IF9kIDwgX2UubGVuZ3RoOyBfZCsrKSB7CisgICAg
ICAgICAgICB2YXIgc3RlcCA9IF9lW19kXTsKKyAgICAgICAgICAgIHN0ZXAuYWN0aW9uKHRoaXMu
YWN0aXZlQ2FtZXJhKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZW5kZXIKKyAgICAgICAgdGhp
cy5vbkJlZm9yZURyYXdQaGFzZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAg
ICAgICB0aGlzLl9yZW5kZXJpbmdNYW5hZ2VyLnJlbmRlcihudWxsLCBudWxsLCB0cnVlLCB0cnVl
KTsKKyAgICAgICAgdGhpcy5vbkFmdGVyRHJhd1BoYXNlT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZl
cnModGhpcyk7CisgICAgICAgIC8vIEFmdGVyIENhbWVyYSBEcmF3CisgICAgICAgIGZvciAodmFy
IF9mID0gMCwgX2cgPSB0aGlzLl9hZnRlckNhbWVyYURyYXdTdGFnZTsgX2YgPCBfZy5sZW5ndGg7
IF9mKyspIHsKKyAgICAgICAgICAgIHZhciBzdGVwID0gX2dbX2ZdOworICAgICAgICAgICAgc3Rl
cC5hY3Rpb24odGhpcy5hY3RpdmVDYW1lcmEpOworICAgICAgICB9CisgICAgICAgIC8vIEZpbmFs
aXplIGZyYW1lCisgICAgICAgIGlmICh0aGlzLnBvc3RQcm9jZXNzTWFuYWdlciAmJiAhY2FtZXJh
Ll9tdWx0aXZpZXdUZXh0dXJlKSB7CisgICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzTWFuYWdl
ci5fZmluYWxpemVGcmFtZShjYW1lcmEuaXNJbnRlcm1lZGlhdGUpOworICAgICAgICB9CisgICAg
ICAgIC8vIFJlc2V0IHNvbWUgc3BlY2lhbCBhcnJheXMKKyAgICAgICAgdGhpcy5fcmVuZGVyVGFy
Z2V0cy5yZXNldCgpOworICAgICAgICB0aGlzLm9uQWZ0ZXJDYW1lcmFSZW5kZXJPYnNlcnZhYmxl
Lm5vdGlmeU9ic2VydmVycyh0aGlzLmFjdGl2ZUNhbWVyYSk7CisgICAgfTsKKyAgICBTY2VuZS5w
cm90b3R5cGUuX3Byb2Nlc3NTdWJDYW1lcmFzID0gZnVuY3Rpb24gKGNhbWVyYSkgeworICAgICAg
ICBpZiAoY2FtZXJhLmNhbWVyYVJpZ01vZGUgPT09IF9DYW1lcmFzX2NhbWVyYV9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMTBfX1siQ2FtZXJhIl0uUklHX01PREVfTk9ORSB8fCAoY2FtZXJhLm91
dHB1dFJlbmRlclRhcmdldCAmJiBjYW1lcmEub3V0cHV0UmVuZGVyVGFyZ2V0LmdldFZpZXdDb3Vu
dCgpID4gMSAmJiB0aGlzLmdldEVuZ2luZSgpLmdldENhcHMoKS5tdWx0aXZpZXcpKSB7CisgICAg
ICAgICAgICB0aGlzLl9yZW5kZXJGb3JDYW1lcmEoY2FtZXJhKTsKKyAgICAgICAgICAgIHRoaXMu
b25BZnRlclJlbmRlckNhbWVyYU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGNhbWVyYSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhbWVyYS5fdXNlTXVs
dGl2aWV3VG9TaW5nbGVWaWV3KSB7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJNdWx0aXZpZXdU
b1NpbmdsZVZpZXcoY2FtZXJhKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIHJpZyBjYW1lcmFzCisgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4
IDwgY2FtZXJhLl9yaWdDYW1lcmFzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAg
IHRoaXMuX3JlbmRlckZvckNhbWVyYShjYW1lcmEuX3JpZ0NhbWVyYXNbaW5kZXhdLCBjYW1lcmEp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFVzZSBfYWN0aXZlQ2FtZXJh
IGluc3RlYWQgb2YgYWN0aXZlQ2FtZXJhIHRvIGF2b2lkIG9uQWN0aXZlQ2FtZXJhQ2hhbmdlZAor
ICAgICAgICB0aGlzLl9hY3RpdmVDYW1lcmEgPSBjYW1lcmE7CisgICAgICAgIHRoaXMuc2V0VHJh
bnNmb3JtTWF0cml4KHRoaXMuX2FjdGl2ZUNhbWVyYS5nZXRWaWV3TWF0cml4KCksIHRoaXMuX2Fj
dGl2ZUNhbWVyYS5nZXRQcm9qZWN0aW9uTWF0cml4KCkpOworICAgICAgICB0aGlzLm9uQWZ0ZXJS
ZW5kZXJDYW1lcmFPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhjYW1lcmEpOworICAgIH07Cisg
ICAgU2NlbmUucHJvdG90eXBlLl9jaGVja0ludGVyc2VjdGlvbnMgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9tZXNoZXNGb3JJbnRlcnNl
Y3Rpb25zLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgdmFyIHNvdXJjZU1lc2ggPSB0
aGlzLl9tZXNoZXNGb3JJbnRlcnNlY3Rpb25zLmRhdGFbaW5kZXhdOworICAgICAgICAgICAgaWYg
KCFzb3VyY2VNZXNoLmFjdGlvbk1hbmFnZXIpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIGFjdGlvbkluZGV4ID0gMDsgc291
cmNlTWVzaC5hY3Rpb25NYW5hZ2VyICYmIGFjdGlvbkluZGV4IDwgc291cmNlTWVzaC5hY3Rpb25N
YW5hZ2VyLmFjdGlvbnMubGVuZ3RoOyBhY3Rpb25JbmRleCsrKSB7CisgICAgICAgICAgICAgICAg
dmFyIGFjdGlvbiA9IHNvdXJjZU1lc2guYWN0aW9uTWFuYWdlci5hY3Rpb25zW2FjdGlvbkluZGV4
XTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnRyaWdnZXIgPT09IF9FbmdpbmVzX2NvbnN0
YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09u
SW50ZXJzZWN0aW9uRW50ZXJUcmlnZ2VyIHx8IGFjdGlvbi50cmlnZ2VyID09PSBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkNvbnN0YW50cyJdLkFDVElP
Tl9PbkludGVyc2VjdGlvbkV4aXRUcmlnZ2VyKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBw
YXJhbWV0ZXJzID0gYWN0aW9uLmdldFRyaWdnZXJQYXJhbWV0ZXIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIG90aGVyTWVzaCA9IHBhcmFtZXRlcnMgaW5zdGFuY2VvZiBfTWVzaGVzX2Fic3Ry
YWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJBYnN0cmFjdE1lc2giXSA/IHBh
cmFtZXRlcnMgOiBwYXJhbWV0ZXJzLm1lc2g7CisgICAgICAgICAgICAgICAgICAgIHZhciBhcmVJ
bnRlcnNlY3RpbmcgPSBvdGhlck1lc2guaW50ZXJzZWN0c01lc2goc291cmNlTWVzaCwgcGFyYW1l
dGVycy51c2VQcmVjaXNlSW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGN1
cnJlbnRJbnRlcnNlY3Rpb25JblByb2dyZXNzID0gc291cmNlTWVzaC5faW50ZXJzZWN0aW9uc0lu
UHJvZ3Jlc3MuaW5kZXhPZihvdGhlck1lc2gpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJl
SW50ZXJzZWN0aW5nICYmIGN1cnJlbnRJbnRlcnNlY3Rpb25JblByb2dyZXNzID09PSAtMSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi50cmlnZ2VyID09PSBfRW5naW5lc19j
b25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkNvbnN0YW50cyJdLkFDVElP
Tl9PbkludGVyc2VjdGlvbkVudGVyVHJpZ2dlcikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFjdGlvbi5fZXhlY3V0ZUN1cnJlbnQoX0FjdGlvbnNfYWN0aW9uRXZlbnRfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzE2X19bIkFjdGlvbkV2ZW50Il0uQ3JlYXRlTmV3KHNvdXJjZU1lc2gs
IHVuZGVmaW5lZCwgb3RoZXJNZXNoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291
cmNlTWVzaC5faW50ZXJzZWN0aW9uc0luUHJvZ3Jlc3MucHVzaChvdGhlck1lc2gpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWN0
aW9uLnRyaWdnZXIgPT09IF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMjBfX1siQ29uc3RhbnRzIl0uQUNUSU9OX09uSW50ZXJzZWN0aW9uRXhpdFRyaWdnZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNZXNoLl9pbnRlcnNlY3Rpb25zSW5Q
cm9ncmVzcy5wdXNoKG90aGVyTWVzaCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFyZUludGVy
c2VjdGluZyAmJiBjdXJyZW50SW50ZXJzZWN0aW9uSW5Qcm9ncmVzcyA+IC0xKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvL1RoZXkgaW50ZXJzZWN0ZWQsIGFuZCBub3cgdGhleSBkb24ndC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vaXMgdGhpcyB0cmlnZ2VyIGFuIGV4aXQgdHJpZ2dl
cj8gZXhlY3V0ZSBhbiBldmVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24u
dHJpZ2dlciA9PT0gX0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
MF9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25JbnRlcnNlY3Rpb25FeGl0VHJpZ2dlcikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5fZXhlY3V0ZUN1cnJlbnQoX0FjdGlvbnNf
YWN0aW9uRXZlbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19bIkFjdGlvbkV2ZW50Il0u
Q3JlYXRlTmV3KHNvdXJjZU1lc2gsIHVuZGVmaW5lZCwgb3RoZXJNZXNoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIHRoaXMgaXMgYW4g
ZXhpdCB0cmlnZ2VyLCBvciBubyBleGl0IHRyaWdnZXIgZXhpc3RzLCByZW1vdmUgdGhlIGlkIGZy
b20gdGhlIGludGVyc2VjdGlvbiBpbiBwcm9ncmVzcyBhcnJheS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghc291cmNlTWVzaC5hY3Rpb25NYW5hZ2VyLmhhc1NwZWNpZmljVHJpZ2dlcihf
RW5naW5lc19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19bIkNvbnN0YW50
cyJdLkFDVElPTl9PbkludGVyc2VjdGlvbkV4aXRUcmlnZ2VyLCBmdW5jdGlvbiAocGFyYW1ldGVy
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtZXRlck1lc2ggPSBwYXJh
bWV0ZXIgaW5zdGFuY2VvZiBfTWVzaGVzX2Fic3RyYWN0TWVzaF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOV9fWyJBYnN0cmFjdE1lc2giXSA/IHBhcmFtZXRlciA6IHBhcmFtZXRlci5tZXNoOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlck1lc2ggPT09IHBhcmFtZXRl
ck1lc2g7CisgICAgICAgICAgICAgICAgICAgICAgICB9KSB8fCBhY3Rpb24udHJpZ2dlciA9PT0g
X0VuZ2luZXNfY29uc3RhbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJDb25zdGFu
dHMiXS5BQ1RJT05fT25JbnRlcnNlY3Rpb25FeGl0VHJpZ2dlcikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNvdXJjZU1lc2guX2ludGVyc2VjdGlvbnNJblByb2dyZXNzLnNwbGljZShj
dXJyZW50SW50ZXJzZWN0aW9uSW5Qcm9ncmVzcywgMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisgICAgU2NlbmUucHJv
dG90eXBlLl9hZHZhbmNlUGh5c2ljc0VuZ2luZVN0ZXAgPSBmdW5jdGlvbiAoc3RlcCkgeworICAg
ICAgICAvLyBEbyBub3RoaW5nLiBDb2RlIHdpbGwgYmUgcmVwbGFjZWQgaWYgcGh5c2ljcyBlbmdp
bmUgY29tcG9uZW50IGlzIHJlZmVyZW5jZWQKKyAgICB9OworICAgIC8qKiBAaGlkZGVuICovCisg
ICAgU2NlbmUucHJvdG90eXBlLl9hbmltYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBO
b3RoaW5nIHRvIGRvIGFzIGxvbmcgYXMgQW5pbWF0YWJsZSBoYXZlIG5vdCBiZWVuIGltcG9ydGVk
LgorICAgIH07CisgICAgLyoqIEV4ZWN1dGUgYWxsIGFuaW1hdGlvbnMgKGZvciBhIGZyYW1lKSAq
LworICAgIFNjZW5lLnByb3RvdHlwZS5hbmltYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAodGhpcy5fZW5naW5lLmlzRGV0ZXJtaW5pc3RpY0xvY2tTdGVwKCkpIHsKKyAgICAgICAgICAg
IHZhciBkZWx0YVRpbWUgPSBNYXRoLm1heChTY2VuZS5NaW5EZWx0YVRpbWUsIE1hdGgubWluKHRo
aXMuX2VuZ2luZS5nZXREZWx0YVRpbWUoKSwgU2NlbmUuTWF4RGVsdGFUaW1lKSkgKyB0aGlzLl90
aW1lQWNjdW11bGF0b3I7CisgICAgICAgICAgICB2YXIgZGVmYXVsdEZQUyA9ICg2MC4wIC8gMTAw
MC4wKTsKKyAgICAgICAgICAgIHZhciBkZWZhdWx0RnJhbWVUaW1lID0gdGhpcy5nZXREZXRlcm1p
bmlzdGljRnJhbWVUaW1lKCk7CisgICAgICAgICAgICB2YXIgc3RlcHNUYWtlbiA9IDA7CisgICAg
ICAgICAgICB2YXIgbWF4U3ViU3RlcHMgPSB0aGlzLl9lbmdpbmUuZ2V0TG9ja3N0ZXBNYXhTdGVw
cygpOworICAgICAgICAgICAgdmFyIGludGVybmFsU3RlcHMgPSBNYXRoLmZsb29yKGRlbHRhVGlt
ZSAvICgxMDAwICogZGVmYXVsdEZQUykpOworICAgICAgICAgICAgaW50ZXJuYWxTdGVwcyA9IE1h
dGgubWluKGludGVybmFsU3RlcHMsIG1heFN1YlN0ZXBzKTsKKyAgICAgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLm9uQmVmb3JlU3RlcE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJz
KHRoaXMpOworICAgICAgICAgICAgICAgIC8vIEFuaW1hdGlvbnMKKyAgICAgICAgICAgICAgICB0
aGlzLl9hbmltYXRpb25SYXRpbyA9IGRlZmF1bHRGcmFtZVRpbWUgKiBkZWZhdWx0RlBTOworICAg
ICAgICAgICAgICAgIHRoaXMuX2FuaW1hdGUoKTsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQWZ0
ZXJBbmltYXRpb25zT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgICAg
ICAgICAgLy8gUGh5c2ljcworICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2VQaHlzaWNzRW5n
aW5lU3RlcChkZWZhdWx0RnJhbWVUaW1lKTsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQWZ0ZXJT
dGVwT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgICAgICAgICAgdGhp
cy5fY3VycmVudFN0ZXBJZCsrOworICAgICAgICAgICAgICAgIHN0ZXBzVGFrZW4rKzsKKyAgICAg
ICAgICAgICAgICBkZWx0YVRpbWUgLT0gZGVmYXVsdEZyYW1lVGltZTsKKyAgICAgICAgICAgIH0g
d2hpbGUgKGRlbHRhVGltZSA+IDAgJiYgc3RlcHNUYWtlbiA8IGludGVybmFsU3RlcHMpOworICAg
ICAgICAgICAgdGhpcy5fdGltZUFjY3VtdWxhdG9yID0gZGVsdGFUaW1lIDwgMCA/IDAgOiBkZWx0
YVRpbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBBbmltYXRp
b25zCisgICAgICAgICAgICB2YXIgZGVsdGFUaW1lID0gdGhpcy51c2VDb25zdGFudEFuaW1hdGlv
bkRlbHRhVGltZSA/IDE2IDogTWF0aC5tYXgoU2NlbmUuTWluRGVsdGFUaW1lLCBNYXRoLm1pbih0
aGlzLl9lbmdpbmUuZ2V0RGVsdGFUaW1lKCksIFNjZW5lLk1heERlbHRhVGltZSkpOworICAgICAg
ICAgICAgdGhpcy5fYW5pbWF0aW9uUmF0aW8gPSBkZWx0YVRpbWUgKiAoNjAuMCAvIDEwMDAuMCk7
CisgICAgICAgICAgICB0aGlzLl9hbmltYXRlKCk7CisgICAgICAgICAgICB0aGlzLm9uQWZ0ZXJB
bmltYXRpb25zT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnModGhpcyk7CisgICAgICAgICAgICAv
LyBQaHlzaWNzCisgICAgICAgICAgICB0aGlzLl9hZHZhbmNlUGh5c2ljc0VuZ2luZVN0ZXAoZGVs
dGFUaW1lKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogUmVuZGVyIHRoZSBz
Y2VuZQorICAgICAqIEBwYXJhbSB1cGRhdGVDYW1lcmFzIGRlZmluZXMgYSBib29sZWFuIGluZGlj
YXRpbmcgaWYgY2FtZXJhcyBtdXN0IHVwZGF0ZSBhY2NvcmRpbmcgdG8gdGhlaXIgaW5wdXRzICh0
cnVlIGJ5IGRlZmF1bHQpCisgICAgICogQHBhcmFtIGlnbm9yZUFuaW1hdGlvbnMgZGVmaW5lcyBh
IGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhbmltYXRpb25zIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQg
KGZhbHNlIGJ5IGRlZmF1bHQpCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLnJlbmRlciA9
IGZ1bmN0aW9uICh1cGRhdGVDYW1lcmFzLCBpZ25vcmVBbmltYXRpb25zKSB7CisgICAgICAgIGlm
ICh1cGRhdGVDYW1lcmFzID09PSB2b2lkIDApIHsgdXBkYXRlQ2FtZXJhcyA9IHRydWU7IH0KKyAg
ICAgICAgaWYgKGlnbm9yZUFuaW1hdGlvbnMgPT09IHZvaWQgMCkgeyBpZ25vcmVBbmltYXRpb25z
ID0gZmFsc2U7IH0KKyAgICAgICAgaWYgKHRoaXMuaXNEaXNwb3NlZCkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2ZyYW1lSWQrKzsKKyAgICAgICAgLy8g
UmVnaXN0ZXIgY29tcG9uZW50cyB0aGF0IGhhdmUgYmVlbiBhc3NvY2lhdGVkIGxhdGVseSB0byB0
aGUgc2NlbmUuCisgICAgICAgIHRoaXMuX3JlZ2lzdGVyVHJhbnNpZW50Q29tcG9uZW50cygpOwor
ICAgICAgICB0aGlzLl9hY3RpdmVQYXJ0aWNsZXMuZmV0Y2hOZXdGcmFtZSgpOworICAgICAgICB0
aGlzLl90b3RhbFZlcnRpY2VzLmZldGNoTmV3RnJhbWUoKTsKKyAgICAgICAgdGhpcy5fYWN0aXZl
SW5kaWNlcy5mZXRjaE5ld0ZyYW1lKCk7CisgICAgICAgIHRoaXMuX2FjdGl2ZUJvbmVzLmZldGNo
TmV3RnJhbWUoKTsKKyAgICAgICAgdGhpcy5fbWVzaGVzRm9ySW50ZXJzZWN0aW9ucy5yZXNldCgp
OworICAgICAgICB0aGlzLnJlc2V0Q2FjaGVkTWF0ZXJpYWwoKTsKKyAgICAgICAgdGhpcy5vbkJl
Zm9yZUFuaW1hdGlvbnNPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsKKyAgICAgICAg
Ly8gQWN0aW9ucworICAgICAgICBpZiAodGhpcy5hY3Rpb25NYW5hZ2VyKSB7CisgICAgICAgICAg
ICB0aGlzLmFjdGlvbk1hbmFnZXIucHJvY2Vzc1RyaWdnZXIoX0VuZ2luZXNfY29uc3RhbnRzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fWyJDb25zdGFudHMiXS5BQ1RJT05fT25FdmVyeUZy
YW1lVHJpZ2dlcik7CisgICAgICAgIH0KKyAgICAgICAgLy8gQW5pbWF0aW9ucworICAgICAgICBp
ZiAoIWlnbm9yZUFuaW1hdGlvbnMpIHsKKyAgICAgICAgICAgIHRoaXMuYW5pbWF0ZSgpOworICAg
ICAgICB9CisgICAgICAgIC8vIEJlZm9yZSBjYW1lcmEgdXBkYXRlIHN0ZXBzCisgICAgICAgIGZv
ciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9iZWZvcmVDYW1lcmFVcGRhdGVTdGFnZTsgX2kgPCBf
YS5sZW5ndGg7IF9pKyspIHsKKyAgICAgICAgICAgIHZhciBzdGVwID0gX2FbX2ldOworICAgICAg
ICAgICAgc3RlcC5hY3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICAvLyBVcGRhdGUgQ2FtZXJh
cworICAgICAgICBpZiAodXBkYXRlQ2FtZXJhcykgeworICAgICAgICAgICAgaWYgKHRoaXMuYWN0
aXZlQ2FtZXJhcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgY2FtZXJh
SW5kZXggPSAwOyBjYW1lcmFJbmRleCA8IHRoaXMuYWN0aXZlQ2FtZXJhcy5sZW5ndGg7IGNhbWVy
YUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuYWN0aXZl
Q2FtZXJhc1tjYW1lcmFJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGNhbWVyYS51cGRhdGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbWVyYS5jYW1lcmFSaWdNb2RlICE9PSBfQ2Ft
ZXJhc19jYW1lcmFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNhbWVyYSJdLlJJR19N
T0RFX05PTkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJpZyBjYW1lcmFzCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgY2FtZXJhLl9y
aWdDYW1lcmFzLmxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhbWVyYS5fcmlnQ2FtZXJhc1tpbmRleF0udXBkYXRlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZUNhbWVyYSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhLnVwZGF0ZSgpOworICAgICAgICAgICAgICAgIGlm
ICh0aGlzLmFjdGl2ZUNhbWVyYS5jYW1lcmFSaWdNb2RlICE9PSBfQ2FtZXJhc19jYW1lcmFfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkNhbWVyYSJdLlJJR19NT0RFX05PTkUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gcmlnIGNhbWVyYXMKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYWN0aXZlQ2FtZXJhLl9yaWdDYW1lcmFzLmxl
bmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1l
cmEuX3JpZ0NhbWVyYXNbaW5kZXhdLnVwZGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEJl
Zm9yZSByZW5kZXIKKyAgICAgICAgdGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUubm90aWZ5
T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB2YXIgZW5naW5lID0gdGhpcy5nZXRFbmdpbmUoKTsK
KyAgICAgICAgaWYgKGVuZ2luZS5fc2hvdWxkT25seVVwZGF0ZUNhbWVyYXMoKSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FtZXJhcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBjYW1lcmFJbmRleF8xID0gMDsgY2FtZXJhSW5kZXhfMSA8IHRoaXMuYWN0aXZlQ2Ft
ZXJhcy5sZW5ndGg7IGNhbWVyYUluZGV4XzErKykgeworICAgICAgICAgICAgICAgICAgICB2YXIg
Y2FtZXJhID0gdGhpcy5hY3RpdmVDYW1lcmFzW2NhbWVyYUluZGV4XzFdOworICAgICAgICAgICAg
ICAgICAgICB0aGlzLnNldFRyYW5zZm9ybU1hdHJpeChjYW1lcmEuZ2V0Vmlld01hdHJpeCgpLCBj
YW1lcmEuZ2V0UHJvamVjdGlvbk1hdHJpeCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgY2FtZXJhID0g
dGhpcy5hY3RpdmVDYW1lcmE7CisgICAgICAgICAgICAgICAgdGhpcy5zZXRUcmFuc2Zvcm1NYXRy
aXgoY2FtZXJhLmdldFZpZXdNYXRyaXgoKSwgY2FtZXJhLmdldFByb2plY3Rpb25NYXRyaXgoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQ3VzdG9tcyByZW5kZXIgdGFyZ2V0cworICAgICAgICB0aGlzLm9uQmVmb3JlUmVuZGVyVGFy
Z2V0c1JlbmRlck9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICB2YXIg
Y3VycmVudEFjdGl2ZUNhbWVyYSA9IHRoaXMuYWN0aXZlQ2FtZXJhOworICAgICAgICBpZiAodGhp
cy5yZW5kZXJUYXJnZXRzRW5hYmxlZCkgeworICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG9vbHMiXS5TdGFydFBlcmZvcm1hbmNlQ291bnRlcigi
Q3VzdG9tIHJlbmRlciB0YXJnZXRzIiwgdGhpcy5jdXN0b21SZW5kZXJUYXJnZXRzLmxlbmd0aCA+
IDApOworICAgICAgICAgICAgdGhpcy5faW50ZXJtZWRpYXRlUmVuZGVyaW5nID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGZvciAodmFyIGN1c3RvbUluZGV4ID0gMDsgY3VzdG9tSW5kZXggPCB0aGlzLmN1
c3RvbVJlbmRlclRhcmdldHMubGVuZ3RoOyBjdXN0b21JbmRleCsrKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHJlbmRlclRhcmdldCA9IHRoaXMuY3VzdG9tUmVuZGVyVGFyZ2V0c1tjdXN0b21JbmRl
eF07CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlclRhcmdldC5fc2hvdWxkUmVuZGVyKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVySWQrKzsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5hY3RpdmVDYW1lcmEgPSByZW5kZXJUYXJnZXQuYWN0aXZlQ2FtZXJhIHx8IHRoaXMu
YWN0aXZlQ2FtZXJhOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZlQ2FtZXJh
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFjdGl2ZSBjYW1l
cmEgbm90IHNldCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIFZpZXdwb3J0CisgICAgICAgICAgICAgICAgICAgIGVuZ2luZS5zZXRWaWV3cG9ydCh0aGlz
LmFjdGl2ZUNhbWVyYS52aWV3cG9ydCk7CisgICAgICAgICAgICAgICAgICAgIC8vIENhbWVyYQor
ICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybU1hdHJpeCgpOworICAgICAg
ICAgICAgICAgICAgICByZW5kZXJUYXJnZXQucmVuZGVyKGN1cnJlbnRBY3RpdmVDYW1lcmEgIT09
IHRoaXMuYWN0aXZlQ2FtZXJhLCB0aGlzLmR1bXBOZXh0UmVuZGVyVGFyZ2V0cyk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgX01pc2NfdG9vbHNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siVG9vbHMiXS5FbmRQZXJmb3JtYW5jZUNvdW50ZXIoIkN1
c3RvbSByZW5kZXIgdGFyZ2V0cyIsIHRoaXMuY3VzdG9tUmVuZGVyVGFyZ2V0cy5sZW5ndGggPiAw
KTsKKyAgICAgICAgICAgIHRoaXMuX2ludGVybWVkaWF0ZVJlbmRlcmluZyA9IGZhbHNlOworICAg
ICAgICAgICAgdGhpcy5fcmVuZGVySWQrKzsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXN0b3Jl
IGJhY2sgYnVmZmVyCisgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhID0gY3VycmVudEFjdGl2ZUNh
bWVyYTsKKyAgICAgICAgdGhpcy5fYmluZEZyYW1lQnVmZmVyKCk7CisgICAgICAgIHRoaXMub25B
ZnRlclJlbmRlclRhcmdldHNSZW5kZXJPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh0aGlzKTsK
KyAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBfYyA9IHRoaXMuX2JlZm9yZUNsZWFyU3RhZ2U7IF9i
IDwgX2MubGVuZ3RoOyBfYisrKSB7CisgICAgICAgICAgICB2YXIgc3RlcCA9IF9jW19iXTsKKyAg
ICAgICAgICAgIHN0ZXAuYWN0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2xlYXIKKyAg
ICAgICAgaWYgKHRoaXMuYXV0b0NsZWFyRGVwdGhBbmRTdGVuY2lsIHx8IHRoaXMuYXV0b0NsZWFy
KSB7CisgICAgICAgICAgICB0aGlzLl9lbmdpbmUuY2xlYXIodGhpcy5jbGVhckNvbG9yLCB0aGlz
LmF1dG9DbGVhciB8fCB0aGlzLmZvcmNlV2lyZWZyYW1lIHx8IHRoaXMuZm9yY2VQb2ludHNDbG91
ZCwgdGhpcy5hdXRvQ2xlYXJEZXB0aEFuZFN0ZW5jaWwsIHRoaXMuYXV0b0NsZWFyRGVwdGhBbmRT
dGVuY2lsKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb2xsZWN0cyByZW5kZXIgdGFyZ2V0cyBm
cm9tIGV4dGVybmFsIGNvbXBvbmVudHMuCisgICAgICAgIGZvciAodmFyIF9kID0gMCwgX2UgPSB0
aGlzLl9nYXRoZXJSZW5kZXJUYXJnZXRzU3RhZ2U7IF9kIDwgX2UubGVuZ3RoOyBfZCsrKSB7Cisg
ICAgICAgICAgICB2YXIgc3RlcCA9IF9lW19kXTsKKyAgICAgICAgICAgIHN0ZXAuYWN0aW9uKHRo
aXMuX3JlbmRlclRhcmdldHMpOworICAgICAgICB9CisgICAgICAgIC8vIE11bHRpLWNhbWVyYXM/
CisgICAgICAgIGlmICh0aGlzLmFjdGl2ZUNhbWVyYXMubGVuZ3RoID4gMCkgeworICAgICAgICAg
ICAgZm9yICh2YXIgY2FtZXJhSW5kZXggPSAwOyBjYW1lcmFJbmRleCA8IHRoaXMuYWN0aXZlQ2Ft
ZXJhcy5sZW5ndGg7IGNhbWVyYUluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FtZXJh
SW5kZXggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5jbGVhcihudWxs
LCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHRoaXMuX3Byb2Nlc3NTdWJDYW1lcmFzKHRoaXMuYWN0aXZlQ2FtZXJhc1tjYW1lcmFJbmRleF0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aWYgKCF0aGlzLmFjdGl2ZUNhbWVyYSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiTm8gY2FtZXJhIGRlZmluZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X3Byb2Nlc3NTdWJDYW1lcmFzKHRoaXMuYWN0aXZlQ2FtZXJhKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBJbnRlcnNlY3Rpb24gY2hlY2tzCisgICAgICAgIHRoaXMuX2NoZWNrSW50ZXJzZWN0aW9u
cygpOworICAgICAgICAvLyBFeGVjdXRlcyB0aGUgYWZ0ZXIgcmVuZGVyIHN0YWdlIGFjdGlvbnMu
CisgICAgICAgIGZvciAodmFyIF9mID0gMCwgX2cgPSB0aGlzLl9hZnRlclJlbmRlclN0YWdlOyBf
ZiA8IF9nLmxlbmd0aDsgX2YrKykgeworICAgICAgICAgICAgdmFyIHN0ZXAgPSBfZ1tfZl07Cisg
ICAgICAgICAgICBzdGVwLmFjdGlvbigpOworICAgICAgICB9CisgICAgICAgIC8vIEFmdGVyIHJl
bmRlcgorICAgICAgICBpZiAodGhpcy5hZnRlclJlbmRlcikgeworICAgICAgICAgICAgdGhpcy5h
ZnRlclJlbmRlcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMub25BZnRlclJlbmRlck9ic2Vy
dmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRoaXMpOworICAgICAgICAvLyBDbGVhbmluZworICAgICAg
ICBpZiAodGhpcy5fdG9CZURpc3Bvc2VkLmxlbmd0aCkgeworICAgICAgICAgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX3RvQmVEaXNwb3NlZC5sZW5ndGg7IGluZGV4KyspIHsK
KyAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX3RvQmVEaXNwb3NlZFtpbmRleF07Cisg
ICAgICAgICAgICAgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5kaXNw
b3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5fdG9CZURpc3Bvc2VkID0gW107CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuZHVtcE5l
eHRSZW5kZXJUYXJnZXRzKSB7CisgICAgICAgICAgICB0aGlzLmR1bXBOZXh0UmVuZGVyVGFyZ2V0
cyA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2FjdGl2ZUJvbmVzLmFkZENvdW50
KDAsIHRydWUpOworICAgICAgICB0aGlzLl9hY3RpdmVJbmRpY2VzLmFkZENvdW50KDAsIHRydWUp
OworICAgICAgICB0aGlzLl9hY3RpdmVQYXJ0aWNsZXMuYWRkQ291bnQoMCwgdHJ1ZSk7CisgICAg
fTsKKyAgICAvKioKKyAgICAgKiBGcmVlemUgYWxsIG1hdGVyaWFscworICAgICAqIEEgZnJvemVu
IG1hdGVyaWFsIHdpbGwgbm90IGJlIHVwZGF0YWJsZSBidXQgc2hvdWxkIGJlIGZhc3RlciB0byBy
ZW5kZXIKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZnJlZXplTWF0ZXJpYWxzID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF0ZXJpYWxzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLm1hdGVyaWFsc1tpXS5mcmVlemUoKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgLyoqCisgICAgICogVW5mcmVlemUgYWxsIG1hdGVyaWFscwor
ICAgICAqIEEgZnJvemVuIG1hdGVyaWFsIHdpbGwgbm90IGJlIHVwZGF0YWJsZSBidXQgc2hvdWxk
IGJlIGZhc3RlciB0byByZW5kZXIKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUudW5mcmVl
emVNYXRlcmlhbHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5tYXRlcmlhbHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxz
W2ldLnVuZnJlZXplKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFJlbGVh
c2VzIGFsbCBoZWxkIHJlc3NvdXJjZXMKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuZGlz
cG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5iZWZvcmVSZW5kZXIgPSBudWxsOwor
ICAgICAgICB0aGlzLmFmdGVyUmVuZGVyID0gbnVsbDsKKyAgICAgICAgaWYgKF9FbmdpbmVzX2Vu
Z2luZVN0b3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fWyJFbmdpbmVTdG9yZSJdLl9M
YXN0Q3JlYXRlZFNjZW5lID09PSB0aGlzKSB7CisgICAgICAgICAgICBfRW5naW5lc19lbmdpbmVT
dG9yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1siRW5naW5lU3RvcmUiXS5fTGFzdENy
ZWF0ZWRTY2VuZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5za2VsZXRvbnMgPSBb
XTsKKyAgICAgICAgdGhpcy5tb3JwaFRhcmdldE1hbmFnZXJzID0gW107CisgICAgICAgIHRoaXMu
X3RyYW5zaWVudENvbXBvbmVudHMgPSBbXTsKKyAgICAgICAgdGhpcy5faXNSZWFkeUZvck1lc2hT
dGFnZS5jbGVhcigpOworICAgICAgICB0aGlzLl9iZWZvcmVFdmFsdWF0ZUFjdGl2ZU1lc2hTdGFn
ZS5jbGVhcigpOworICAgICAgICB0aGlzLl9ldmFsdWF0ZVN1Yk1lc2hTdGFnZS5jbGVhcigpOwor
ICAgICAgICB0aGlzLl9hY3RpdmVNZXNoU3RhZ2UuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5fY2Ft
ZXJhRHJhd1JlbmRlclRhcmdldFN0YWdlLmNsZWFyKCk7CisgICAgICAgIHRoaXMuX2JlZm9yZUNh
bWVyYURyYXdTdGFnZS5jbGVhcigpOworICAgICAgICB0aGlzLl9iZWZvcmVSZW5kZXJUYXJnZXRE
cmF3U3RhZ2UuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5fYmVmb3JlUmVuZGVyaW5nR3JvdXBEcmF3
U3RhZ2UuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5fYmVmb3JlUmVuZGVyaW5nTWVzaFN0YWdlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMuX2FmdGVyUmVuZGVyaW5nTWVzaFN0YWdlLmNsZWFyKCk7Cisg
ICAgICAgIHRoaXMuX2FmdGVyUmVuZGVyaW5nR3JvdXBEcmF3U3RhZ2UuY2xlYXIoKTsKKyAgICAg
ICAgdGhpcy5fYWZ0ZXJDYW1lcmFEcmF3U3RhZ2UuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5fYWZ0
ZXJSZW5kZXJUYXJnZXREcmF3U3RhZ2UuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5fYWZ0ZXJSZW5k
ZXJTdGFnZS5jbGVhcigpOworICAgICAgICB0aGlzLl9iZWZvcmVDYW1lcmFVcGRhdGVTdGFnZS5j
bGVhcigpOworICAgICAgICB0aGlzLl9iZWZvcmVDbGVhclN0YWdlLmNsZWFyKCk7CisgICAgICAg
IHRoaXMuX2dhdGhlclJlbmRlclRhcmdldHNTdGFnZS5jbGVhcigpOworICAgICAgICB0aGlzLl9n
YXRoZXJBY3RpdmVDYW1lcmFSZW5kZXJUYXJnZXRzU3RhZ2UuY2xlYXIoKTsKKyAgICAgICAgdGhp
cy5fcG9pbnRlck1vdmVTdGFnZS5jbGVhcigpOworICAgICAgICB0aGlzLl9wb2ludGVyRG93blN0
YWdlLmNsZWFyKCk7CisgICAgICAgIHRoaXMuX3BvaW50ZXJVcFN0YWdlLmNsZWFyKCk7CisgICAg
ICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9jb21wb25lbnRzOyBfaSA8IF9hLmxlbmd0
aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IF9hW19pXTsKKyAgICAgICAg
ICAgIGNvbXBvbmVudC5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5pbXBvcnRl
ZE1lc2hlc0ZpbGVzID0gbmV3IEFycmF5KCk7CisgICAgICAgIGlmICh0aGlzLnN0b3BBbGxBbmlt
YXRpb25zKSB7CisgICAgICAgICAgICB0aGlzLnN0b3BBbGxBbmltYXRpb25zKCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5yZXNldENhY2hlZE1hdGVyaWFsKCk7CisgICAgICAgIC8vIFNtYXJ0
IGFycmF5cworICAgICAgICBpZiAodGhpcy5hY3RpdmVDYW1lcmEpIHsKKyAgICAgICAgICAgIHRo
aXMuYWN0aXZlQ2FtZXJhLl9hY3RpdmVNZXNoZXMuZGlzcG9zZSgpOworICAgICAgICAgICAgdGhp
cy5hY3RpdmVDYW1lcmEgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2FjdGl2ZU1l
c2hlcy5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMuX3JlbmRlcmluZ01hbmFnZXIuZGlzcG9zZSgp
OworICAgICAgICB0aGlzLl9wcm9jZXNzZWRNYXRlcmlhbHMuZGlzcG9zZSgpOworICAgICAgICB0
aGlzLl9hY3RpdmVQYXJ0aWNsZVN5c3RlbXMuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9hY3Rp
dmVTa2VsZXRvbnMuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9zb2Z0d2FyZVNraW5uZWRNZXNo
ZXMuZGlzcG9zZSgpOworICAgICAgICB0aGlzLl9yZW5kZXJUYXJnZXRzLmRpc3Bvc2UoKTsKKyAg
ICAgICAgdGhpcy5fcmVnaXN0ZXJlZEZvckxhdGVBbmltYXRpb25CaW5kaW5ncy5kaXNwb3NlKCk7
CisgICAgICAgIHRoaXMuX21lc2hlc0ZvckludGVyc2VjdGlvbnMuZGlzcG9zZSgpOworICAgICAg
ICB0aGlzLl90b0JlRGlzcG9zZWQgPSBbXTsKKyAgICAgICAgLy8gQWJvcnQgYWN0aXZlIHJlcXVl
c3RzCisgICAgICAgIGZvciAodmFyIF9iID0gMCwgX2MgPSB0aGlzLl9hY3RpdmVSZXF1ZXN0czsg
X2IgPCBfYy5sZW5ndGg7IF9iKyspIHsKKyAgICAgICAgICAgIHZhciByZXF1ZXN0ID0gX2NbX2Jd
OworICAgICAgICAgICAgcmVxdWVzdC5hYm9ydCgpOworICAgICAgICB9CisgICAgICAgIC8vIEV2
ZW50cworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHRo
aXMpOworICAgICAgICB0aGlzLm9uRGlzcG9zZU9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAg
dGhpcy5vbkJlZm9yZVJlbmRlck9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkFm
dGVyUmVuZGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQmVmb3JlUmVuZGVy
VGFyZ2V0c1JlbmRlck9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkFmdGVyUmVu
ZGVyVGFyZ2V0c1JlbmRlck9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkFmdGVy
U3RlcE9ic2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkJlZm9yZVN0ZXBPYnNlcnZh
YmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25CZWZvcmVBY3RpdmVNZXNoZXNFdmFsdWF0aW9u
T2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQWZ0ZXJBY3RpdmVNZXNoZXNFdmFs
dWF0aW9uT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQmVmb3JlUGFydGljbGVz
UmVuZGVyaW5nT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQWZ0ZXJQYXJ0aWNs
ZXNSZW5kZXJpbmdPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25CZWZvcmVEcmF3
UGhhc2VPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25BZnRlckRyYXdQaGFzZU9i
c2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbkJlZm9yZUFuaW1hdGlvbnNPYnNlcnZh
YmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25BZnRlckFuaW1hdGlvbnNPYnNlcnZhYmxlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMub25EYXRhTG9hZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAg
ICAgICB0aGlzLm9uQmVmb3JlUmVuZGVyaW5nR3JvdXBPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAg
ICAgIHRoaXMub25BZnRlclJlbmRlcmluZ0dyb3VwT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAg
ICB0aGlzLm9uTWVzaEltcG9ydGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9u
QmVmb3JlQ2FtZXJhUmVuZGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQWZ0
ZXJDYW1lcmFSZW5kZXJPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25SZWFkeU9i
c2VydmFibGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbk5ld0NhbWVyYUFkZGVkT2JzZXJ2YWJs
ZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uQ2FtZXJhUmVtb3ZlZE9ic2VydmFibGUuY2xlYXIo
KTsKKyAgICAgICAgdGhpcy5vbk5ld0xpZ2h0QWRkZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAg
ICAgIHRoaXMub25MaWdodFJlbW92ZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMu
b25OZXdHZW9tZXRyeUFkZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uR2Vv
bWV0cnlSZW1vdmVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uTmV3VHJhbnNm
b3JtTm9kZUFkZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uVHJhbnNmb3Jt
Tm9kZVJlbW92ZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25OZXdNZXNoQWRk
ZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25NZXNoUmVtb3ZlZE9ic2VydmFi
bGUuY2xlYXIoKTsKKyAgICAgICAgdGhpcy5vbk5ld1NrZWxldG9uQWRkZWRPYnNlcnZhYmxlLmNs
ZWFyKCk7CisgICAgICAgIHRoaXMub25Ta2VsZXRvblJlbW92ZWRPYnNlcnZhYmxlLmNsZWFyKCk7
CisgICAgICAgIHRoaXMub25OZXdNYXRlcmlhbEFkZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAg
ICAgICB0aGlzLm9uTWF0ZXJpYWxSZW1vdmVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0
aGlzLm9uTmV3VGV4dHVyZUFkZGVkT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9u
VGV4dHVyZVJlbW92ZWRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMub25QcmVQb2lu
dGVyT2JzZXJ2YWJsZS5jbGVhcigpOworICAgICAgICB0aGlzLm9uUG9pbnRlck9ic2VydmFibGUu
Y2xlYXIoKTsKKyAgICAgICAgdGhpcy5vblByZUtleWJvYXJkT2JzZXJ2YWJsZS5jbGVhcigpOwor
ICAgICAgICB0aGlzLm9uS2V5Ym9hcmRPYnNlcnZhYmxlLmNsZWFyKCk7CisgICAgICAgIHRoaXMu
b25BY3RpdmVDYW1lcmFDaGFuZ2VkLmNsZWFyKCk7CisgICAgICAgIHRoaXMuZGV0YWNoQ29udHJv
bCgpOworICAgICAgICAvLyBEZXRhY2ggY2FtZXJhcworICAgICAgICB2YXIgY2FudmFzID0gdGhp
cy5fZW5naW5lLmdldFJlbmRlcmluZ0NhbnZhcygpOworICAgICAgICBpZiAoY2FudmFzKSB7Cisg
ICAgICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXgg
PCB0aGlzLmNhbWVyYXMubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5j
YW1lcmFzW2luZGV4XS5kZXRhY2hDb250cm9sKGNhbnZhcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgLy8gUmVsZWFzZSBhbmltYXRpb24gZ3JvdXBzCisgICAgICAgIHdoaWxl
ICh0aGlzLmFuaW1hdGlvbkdyb3Vwcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuYW5pbWF0
aW9uR3JvdXBzWzBdLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZWxlYXNlIGxp
Z2h0cworICAgICAgICB3aGlsZSAodGhpcy5saWdodHMubGVuZ3RoKSB7CisgICAgICAgICAgICB0
aGlzLmxpZ2h0c1swXS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVsZWFzZSBt
ZXNoZXMKKyAgICAgICAgd2hpbGUgKHRoaXMubWVzaGVzLmxlbmd0aCkgeworICAgICAgICAgICAg
dGhpcy5tZXNoZXNbMF0uZGlzcG9zZSh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAo
dGhpcy50cmFuc2Zvcm1Ob2Rlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMudHJhbnNmb3Jt
Tm9kZXNbMF0uZGlzcG9zZSh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZWxlYXNlIGNh
bWVyYXMKKyAgICAgICAgd2hpbGUgKHRoaXMuY2FtZXJhcy5sZW5ndGgpIHsKKyAgICAgICAgICAg
IHRoaXMuY2FtZXJhc1swXS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVsZWFz
ZSBtYXRlcmlhbHMKKyAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRNYXRlcmlhbCkgeworICAgICAg
ICAgICAgdGhpcy5fZGVmYXVsdE1hdGVyaWFsLmRpc3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAg
ICB3aGlsZSAodGhpcy5tdWx0aU1hdGVyaWFscy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMu
bXVsdGlNYXRlcmlhbHNbMF0uZGlzcG9zZSgpOworICAgICAgICB9CisgICAgICAgIHdoaWxlICh0
aGlzLm1hdGVyaWFscy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMubWF0ZXJpYWxzWzBdLmRp
c3Bvc2UoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZWxlYXNlIHBhcnRpY2xlcworICAgICAg
ICB3aGlsZSAodGhpcy5wYXJ0aWNsZVN5c3RlbXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGlz
LnBhcnRpY2xlU3lzdGVtc1swXS5kaXNwb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVs
ZWFzZSBwb3N0UHJvY2Vzc2VzCisgICAgICAgIHdoaWxlICh0aGlzLnBvc3RQcm9jZXNzZXMubGVu
Z3RoKSB7CisgICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzZXNbMF0uZGlzcG9zZSgpOworICAg
ICAgICB9CisgICAgICAgIC8vIFJlbGVhc2UgdGV4dHVyZXMKKyAgICAgICAgd2hpbGUgKHRoaXMu
dGV4dHVyZXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGlzLnRleHR1cmVzWzBdLmRpc3Bvc2Uo
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZWxlYXNlIFVCTworICAgICAgICB0aGlzLl9zY2Vu
ZVViby5kaXNwb3NlKCk7CisgICAgICAgIGlmICh0aGlzLl9tdWx0aXZpZXdTY2VuZVVibykgewor
ICAgICAgICAgICAgdGhpcy5fbXVsdGl2aWV3U2NlbmVVYm8uZGlzcG9zZSgpOworICAgICAgICB9
CisgICAgICAgIC8vIFBvc3QtcHJvY2Vzc2VzCisgICAgICAgIHRoaXMucG9zdFByb2Nlc3NNYW5h
Z2VyLmRpc3Bvc2UoKTsKKyAgICAgICAgLy8gUmVtb3ZlIGZyb20gZW5naW5lCisgICAgICAgIGlu
ZGV4ID0gdGhpcy5fZW5naW5lLnNjZW5lcy5pbmRleE9mKHRoaXMpOworICAgICAgICBpZiAoaW5k
ZXggPiAtMSkgeworICAgICAgICAgICAgdGhpcy5fZW5naW5lLnNjZW5lcy5zcGxpY2UoaW5kZXgs
IDEpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VuZ2luZS53aXBlQ2FjaGVzKHRydWUpOwor
ICAgICAgICB0aGlzLl9pc0Rpc3Bvc2VkID0gdHJ1ZTsKKyAgICB9OworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShTY2VuZS5wcm90b3R5cGUsICJpc0Rpc3Bvc2VkIiwgeworICAgICAgICAvKioK
KyAgICAgICAgICogR2V0cyBpZiB0aGUgc2NlbmUgaXMgYWxyZWFkeSBkaXNwb3NlZAorICAgICAg
ICAgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5faXNEaXNwb3NlZDsKKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogQ2FsbCB0
aGlzIGZ1bmN0aW9uIHRvIHJlZHVjZSBtZW1vcnkgZm9vdHByaW50IG9mIHRoZSBzY2VuZS4KKyAg
ICAgKiBWZXJ0ZXggYnVmZmVycyB3aWxsIG5vdCBzdG9yZSBDUFUgZGF0YSBhbnltb3JlICh0aGlz
IHdpbGwgcHJldmVudCBwaWNraW5nLCBjb2xsaXNpb25zIG9yIHBoeXNpY3MgdG8gd29yayBjb3Jy
ZWN0bHkpCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmNsZWFyQ2FjaGVkVmVydGV4RGF0
YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgbWVzaEluZGV4ID0gMDsgbWVzaElu
ZGV4IDwgdGhpcy5tZXNoZXMubGVuZ3RoOyBtZXNoSW5kZXgrKykgeworICAgICAgICAgICAgdmFy
IG1lc2ggPSB0aGlzLm1lc2hlc1ttZXNoSW5kZXhdOworICAgICAgICAgICAgdmFyIGdlb21ldHJ5
ID0gbWVzaC5nZW9tZXRyeTsKKyAgICAgICAgICAgIGlmIChnZW9tZXRyeSkgeworICAgICAgICAg
ICAgICAgIGdlb21ldHJ5Ll9pbmRpY2VzID0gW107CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
dmJOYW1lIGluIGdlb21ldHJ5Ll92ZXJ0ZXhCdWZmZXJzKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghZ2VvbWV0cnkuX3ZlcnRleEJ1ZmZlcnMuaGFzT3duUHJvcGVydHkodmJOYW1lKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuX3ZlcnRleEJ1ZmZlcnNbdmJOYW1lXS5fYnVm
ZmVyLl9kYXRhID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9OworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZW1vdmUg
dGhlIGxvY2FsIGNhY2hlZCBidWZmZXIgZGF0YSBmcm9tIHRleHR1cmUuCisgICAgICogSXQgd2ls
bCBzYXZlIG1lbW9yeSBidXQgd2lsbCBwcmV2ZW50IHRoZSB0ZXh0dXJlIGZyb20gYmVpbmcgcmVi
dWlsdAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5jbGVhbkNhY2hlZFRleHR1cmVCdWZm
ZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLnRl
eHR1cmVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAgICAgICAgICAgdmFyIGJhc2VUZXh0
dXJlID0gX2FbX2ldOworICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGJhc2VUZXh0dXJlLl9idWZm
ZXI7CisgICAgICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgYmFzZVRleHR1
cmUuX2J1ZmZlciA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAg
IC8qKgorICAgICAqIEdldCB0aGUgd29ybGQgZXh0ZW5kIHZlY3RvcnMgd2l0aCBhbiBvcHRpb25h
bCBmaWx0ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSBmaWx0ZXJQcmVkaWNhdGUgdGhlIHByZWRp
Y2F0ZSAtIHdoaWNoIG1lc2hlcyBzaG91bGQgYmUgaW5jbHVkZWQgd2hlbiBjYWxjdWxhdGluZyB0
aGUgd29ybGQgc2l6ZQorICAgICAqIEByZXR1cm5zIHt7IG1pbjogVmVjdG9yMzsgbWF4OiBWZWN0
b3IzIH19IG1pbiBhbmQgbWF4IHZlY3RvcnMKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5cGUu
Z2V0V29ybGRFeHRlbmRzID0gZnVuY3Rpb24gKGZpbHRlclByZWRpY2F0ZSkgeworICAgICAgICB2
YXIgbWluID0gbmV3IF9NYXRoc19tYXRoX3ZlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
N19fWyJWZWN0b3IzIl0oTnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVy
Lk1BWF9WQUxVRSk7CisgICAgICAgIHZhciBtYXggPSBuZXcgX01hdGhzX21hdGhfdmVjdG9yX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIlZlY3RvcjMiXSgtTnVtYmVyLk1BWF9WQUxVRSwg
LU51bWJlci5NQVhfVkFMVUUsIC1OdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICAgICAgZmlsdGVyUHJl
ZGljYXRlID0gZmlsdGVyUHJlZGljYXRlIHx8IChmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9
KTsKKyAgICAgICAgdGhpcy5tZXNoZXMuZmlsdGVyKGZpbHRlclByZWRpY2F0ZSkuZm9yRWFjaChm
dW5jdGlvbiAobWVzaCkgeworICAgICAgICAgICAgbWVzaC5jb21wdXRlV29ybGRNYXRyaXgodHJ1
ZSk7CisgICAgICAgICAgICBpZiAoIW1lc2guc3ViTWVzaGVzIHx8IG1lc2guc3ViTWVzaGVzLmxl
bmd0aCA9PT0gMCB8fCBtZXNoLmluZmluaXRlRGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYm91bmRpbmdJbmZvID0gbWVz
aC5nZXRCb3VuZGluZ0luZm8oKTsKKyAgICAgICAgICAgIHZhciBtaW5Cb3ggPSBib3VuZGluZ0lu
Zm8uYm91bmRpbmdCb3gubWluaW11bVdvcmxkOworICAgICAgICAgICAgdmFyIG1heEJveCA9IGJv
dW5kaW5nSW5mby5ib3VuZGluZ0JveC5tYXhpbXVtV29ybGQ7CisgICAgICAgICAgICBfTWF0aHNf
bWF0aF92ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX1siVmVjdG9yMyJdLkNoZWNr
RXh0ZW5kcyhtaW5Cb3gsIG1pbiwgbWF4KTsKKyAgICAgICAgICAgIF9NYXRoc19tYXRoX3ZlY3Rv
cl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJWZWN0b3IzIl0uQ2hlY2tFeHRlbmRzKG1h
eEJveCwgbWluLCBtYXgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIG1pbjogbWluLAorICAgICAgICAgICAgbWF4OiBtYXgKKyAgICAgICAgfTsKKyAgICB9Owor
ICAgIC8vIFBpY2tpbmcKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcmF5IHRoYXQgY2FuIGJl
IHVzZWQgdG8gcGljayBpbiB0aGUgc2NlbmUKKyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB4
IGNvb3JkaW5hdGUgb2YgdGhlIG9yaWdpbiAob24tc2NyZWVuKQorICAgICAqIEBwYXJhbSB5IGRl
ZmluZXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgb3JpZ2luIChvbi1zY3JlZW4pCisgICAgICog
QHBhcmFtIHdvcmxkIGRlZmluZXMgdGhlIHdvcmxkIG1hdHJpeCB0byB1c2UgaWYgeW91IHdhbnQg
dG8gcGljayBpbiBvYmplY3Qgc3BhY2UgKGluc3RlYWQgb2Ygd29ybGQgc3BhY2UpCisgICAgICog
QHBhcmFtIGNhbWVyYSBkZWZpbmVzIHRoZSBjYW1lcmEgdG8gdXNlIGZvciB0aGUgcGlja2luZwor
ICAgICAqIEBwYXJhbSBjYW1lcmFWaWV3U3BhY2UgZGVmaW5lcyBpZiBwaWNraW5nIHdpbGwgYmUg
ZG9uZSBpbiB2aWV3IHNwYWNlIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqIEByZXR1cm5zIGEg
UmF5CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmNyZWF0ZVBpY2tpbmdSYXkgPSBmdW5j
dGlvbiAoeCwgeSwgd29ybGQsIGNhbWVyYSwgY2FtZXJhVmlld1NwYWNlKSB7CisgICAgICAgIGlm
IChjYW1lcmFWaWV3U3BhY2UgPT09IHZvaWQgMCkgeyBjYW1lcmFWaWV3U3BhY2UgPSBmYWxzZTsg
fQorICAgICAgICB0aHJvdyBfTWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MjRfX1siX0RldlRvb2xzIl0uV2FybkltcG9ydCgiUmF5Iik7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgcmF5IHRoYXQgY2FuIGJlIHVzZWQgdG8gcGljayBpbiB0aGUgc2NlbmUK
KyAgICAgKiBAcGFyYW0geCBkZWZpbmVzIHRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIG9yaWdpbiAo
b24tc2NyZWVuKQorICAgICAqIEBwYXJhbSB5IGRlZmluZXMgdGhlIHkgY29vcmRpbmF0ZSBvZiB0
aGUgb3JpZ2luIChvbi1zY3JlZW4pCisgICAgICogQHBhcmFtIHdvcmxkIGRlZmluZXMgdGhlIHdv
cmxkIG1hdHJpeCB0byB1c2UgaWYgeW91IHdhbnQgdG8gcGljayBpbiBvYmplY3Qgc3BhY2UgKGlu
c3RlYWQgb2Ygd29ybGQgc3BhY2UpCisgICAgICogQHBhcmFtIHJlc3VsdCBkZWZpbmVzIHRoZSBy
YXkgd2hlcmUgdG8gc3RvcmUgdGhlIHBpY2tpbmcgcmF5CisgICAgICogQHBhcmFtIGNhbWVyYSBk
ZWZpbmVzIHRoZSBjYW1lcmEgdG8gdXNlIGZvciB0aGUgcGlja2luZworICAgICAqIEBwYXJhbSBj
YW1lcmFWaWV3U3BhY2UgZGVmaW5lcyBpZiBwaWNraW5nIHdpbGwgYmUgZG9uZSBpbiB2aWV3IHNw
YWNlIChmYWxzZSBieSBkZWZhdWx0KQorICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHNjZW5l
CisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmNyZWF0ZVBpY2tpbmdSYXlUb1JlZiA9IGZ1
bmN0aW9uICh4LCB5LCB3b3JsZCwgcmVzdWx0LCBjYW1lcmEsIGNhbWVyYVZpZXdTcGFjZSkgewor
ICAgICAgICBpZiAoY2FtZXJhVmlld1NwYWNlID09PSB2b2lkIDApIHsgY2FtZXJhVmlld1NwYWNl
ID0gZmFsc2U7IH0KKyAgICAgICAgdGhyb3cgX01pc2NfZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzI0X19bIl9EZXZUb29scyJdLldhcm5JbXBvcnQoIlJheSIpOworICAgIH07Cisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHJheSB0aGF0IGNhbiBiZSB1c2VkIHRvIHBpY2sgaW4g
dGhlIHNjZW5lCisgICAgICogQHBhcmFtIHggZGVmaW5lcyB0aGUgeCBjb29yZGluYXRlIG9mIHRo
ZSBvcmlnaW4gKG9uLXNjcmVlbikKKyAgICAgKiBAcGFyYW0geSBkZWZpbmVzIHRoZSB5IGNvb3Jk
aW5hdGUgb2YgdGhlIG9yaWdpbiAob24tc2NyZWVuKQorICAgICAqIEBwYXJhbSBjYW1lcmEgZGVm
aW5lcyB0aGUgY2FtZXJhIHRvIHVzZSBmb3IgdGhlIHBpY2tpbmcKKyAgICAgKiBAcmV0dXJucyBh
IFJheQorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5jcmVhdGVQaWNraW5nUmF5SW5DYW1l
cmFTcGFjZSA9IGZ1bmN0aW9uICh4LCB5LCBjYW1lcmEpIHsKKyAgICAgICAgdGhyb3cgX01pc2Nf
ZGV2VG9vbHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X19bIl9EZXZUb29scyJdLldhcm5J
bXBvcnQoIlJheSIpOworICAgIH07CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHJheSB0aGF0
IGNhbiBiZSB1c2VkIHRvIHBpY2sgaW4gdGhlIHNjZW5lCisgICAgICogQHBhcmFtIHggZGVmaW5l
cyB0aGUgeCBjb29yZGluYXRlIG9mIHRoZSBvcmlnaW4gKG9uLXNjcmVlbikKKyAgICAgKiBAcGFy
YW0geSBkZWZpbmVzIHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIG9yaWdpbiAob24tc2NyZWVuKQor
ICAgICAqIEBwYXJhbSByZXN1bHQgZGVmaW5lcyB0aGUgcmF5IHdoZXJlIHRvIHN0b3JlIHRoZSBw
aWNraW5nIHJheQorICAgICAqIEBwYXJhbSBjYW1lcmEgZGVmaW5lcyB0aGUgY2FtZXJhIHRvIHVz
ZSBmb3IgdGhlIHBpY2tpbmcKKyAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBzY2VuZQorICAg
ICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5jcmVhdGVQaWNraW5nUmF5SW5DYW1lcmFTcGFjZVRv
UmVmID0gZnVuY3Rpb24gKHgsIHksIHJlc3VsdCwgY2FtZXJhKSB7CisgICAgICAgIHRocm93IF9N
aXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fWyJfRGV2VG9vbHMiXS5X
YXJuSW1wb3J0KCJSYXkiKTsKKyAgICB9OworICAgIC8qKiBMYXVuY2ggYSByYXkgdG8gdHJ5IHRv
IHBpY2sgYSBtZXNoIGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSB4IHBvc2l0aW9uIG9uIHNj
cmVlbgorICAgICAqIEBwYXJhbSB5IHBvc2l0aW9uIG9uIHNjcmVlbgorICAgICAqIEBwYXJhbSBw
cmVkaWNhdGUgUHJlZGljYXRlIGZ1bmN0aW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGVsaWdpYmxlIG1l
c2hlcy4gQ2FuIGJlIHNldCB0byBudWxsLiBJbiB0aGlzIGNhc2UsIGEgbWVzaCBtdXN0IGJlIGVu
YWJsZWQsIHZpc2libGUgYW5kIHdpdGggaXNQaWNrYWJsZSBzZXQgdG8gdHJ1ZQorICAgICAqIEBw
YXJhbSBmYXN0Q2hlY2sgTGF1bmNoIGEgZmFzdCBjaGVjayBvbmx5IHVzaW5nIHRoZSBib3VuZGlu
ZyBib3hlcy4gQ2FuIGJlIHNldCB0byBudWxsLgorICAgICAqIEBwYXJhbSBjYW1lcmEgdG8gdXNl
IGZvciBjb21wdXRpbmcgdGhlIHBpY2tpbmcgcmF5LiBDYW4gYmUgc2V0IHRvIG51bGwuIEluIHRo
aXMgY2FzZSwgdGhlIHNjZW5lLmFjdGl2ZUNhbWVyYSB3aWxsIGJlIHVzZWQKKyAgICAgKiBAcGFy
YW0gdHJpYW5nbGVQcmVkaWNhdGUgZGVmaW5lcyBhbiBvcHRpb25hbCBwcmVkaWNhdGUgdXNlZCB0
byBzZWxlY3QgZmFjZXMgd2hlbiBhIG1lc2ggaW50ZXJzZWN0aW9uIGlzIGRldGVjdGVkCisgICAg
ICogQHJldHVybnMgYSBQaWNraW5nSW5mbworICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5w
aWNrID0gZnVuY3Rpb24gKHgsIHksIHByZWRpY2F0ZSwgZmFzdENoZWNrLCBjYW1lcmEsIHRyaWFu
Z2xlUHJlZGljYXRlKSB7CisgICAgICAgIC8vIER1bW15IGluZm8gaWYgcGlja2luZyBhcyBub3Qg
YmVlbiBpbXBvcnRlZAorICAgICAgICB2YXIgcGkgPSBuZXcgX0NvbGxpc2lvbnNfcGlja2luZ0lu
Zm9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19bIlBpY2tpbmdJbmZvIl0oKTsKKyAgICAg
ICAgcGkuX3BpY2tpbmdVbmF2YWlsYWJsZSA9IHRydWU7CisgICAgICAgIHJldHVybiBwaTsKKyAg
ICB9OworICAgIC8qKiBVc2UgdGhlIGdpdmVuIHJheSB0byBwaWNrIGEgbWVzaCBpbiB0aGUgc2Nl
bmUKKyAgICAgKiBAcGFyYW0gcmF5IFRoZSByYXkgdG8gdXNlIHRvIHBpY2sgbWVzaGVzCisgICAg
ICogQHBhcmFtIHByZWRpY2F0ZSBQcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCB0byBkZXRlcm1pbmUg
ZWxpZ2libGUgbWVzaGVzLiBDYW4gYmUgc2V0IHRvIG51bGwuIEluIHRoaXMgY2FzZSwgYSBtZXNo
IG11c3QgaGF2ZSBpc1BpY2thYmxlIHNldCB0byB0cnVlCisgICAgICogQHBhcmFtIGZhc3RDaGVj
ayBMYXVuY2ggYSBmYXN0IGNoZWNrIG9ubHkgdXNpbmcgdGhlIGJvdW5kaW5nIGJveGVzLiBDYW4g
YmUgc2V0IHRvIG51bGwKKyAgICAgKiBAcGFyYW0gdHJpYW5nbGVQcmVkaWNhdGUgZGVmaW5lcyBh
biBvcHRpb25hbCBwcmVkaWNhdGUgdXNlZCB0byBzZWxlY3QgZmFjZXMgd2hlbiBhIG1lc2ggaW50
ZXJzZWN0aW9uIGlzIGRldGVjdGVkCisgICAgICogQHJldHVybnMgYSBQaWNraW5nSW5mbworICAg
ICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5waWNrV2l0aFJheSA9IGZ1bmN0aW9uIChyYXksIHBy
ZWRpY2F0ZSwgZmFzdENoZWNrLCB0cmlhbmdsZVByZWRpY2F0ZSkgeworICAgICAgICB0aHJvdyBf
TWlzY19kZXZUb29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX1siX0RldlRvb2xzIl0u
V2FybkltcG9ydCgiUmF5Iik7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBMYXVuY2ggYSByYXkg
dG8gdHJ5IHRvIHBpY2sgYSBtZXNoIGluIHRoZSBzY2VuZQorICAgICAqIEBwYXJhbSB4IFggcG9z
aXRpb24gb24gc2NyZWVuCisgICAgICogQHBhcmFtIHkgWSBwb3NpdGlvbiBvbiBzY3JlZW4KKyAg
ICAgKiBAcGFyYW0gcHJlZGljYXRlIFByZWRpY2F0ZSBmdW5jdGlvbiB1c2VkIHRvIGRldGVybWlu
ZSBlbGlnaWJsZSBtZXNoZXMuIENhbiBiZSBzZXQgdG8gbnVsbC4gSW4gdGhpcyBjYXNlLCBhIG1l
c2ggbXVzdCBiZSBlbmFibGVkLCB2aXNpYmxlIGFuZCB3aXRoIGlzUGlja2FibGUgc2V0IHRvIHRy
dWUKKyAgICAgKiBAcGFyYW0gY2FtZXJhIGNhbWVyYSB0byB1c2UgZm9yIGNvbXB1dGluZyB0aGUg
cGlja2luZyByYXkuIENhbiBiZSBzZXQgdG8gbnVsbC4gSW4gdGhpcyBjYXNlLCB0aGUgc2NlbmUu
YWN0aXZlQ2FtZXJhIHdpbGwgYmUgdXNlZAorICAgICAqIEBwYXJhbSB0cmlhbmdsZVByZWRpY2F0
ZSBkZWZpbmVzIGFuIG9wdGlvbmFsIHByZWRpY2F0ZSB1c2VkIHRvIHNlbGVjdCBmYWNlcyB3aGVu
IGEgbWVzaCBpbnRlcnNlY3Rpb24gaXMgZGV0ZWN0ZWQKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJh
eSBvZiBQaWNraW5nSW5mbworICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5tdWx0aVBpY2sg
PSBmdW5jdGlvbiAoeCwgeSwgcHJlZGljYXRlLCBjYW1lcmEsIHRyaWFuZ2xlUHJlZGljYXRlKSB7
CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
NF9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJSYXkiKTsKKyAgICB9OworICAgIC8qKgorICAg
ICAqIExhdW5jaCBhIHJheSB0byB0cnkgdG8gcGljayBhIG1lc2ggaW4gdGhlIHNjZW5lCisgICAg
ICogQHBhcmFtIHJheSBSYXkgdG8gdXNlCisgICAgICogQHBhcmFtIHByZWRpY2F0ZSBQcmVkaWNh
dGUgZnVuY3Rpb24gdXNlZCB0byBkZXRlcm1pbmUgZWxpZ2libGUgbWVzaGVzLiBDYW4gYmUgc2V0
IHRvIG51bGwuIEluIHRoaXMgY2FzZSwgYSBtZXNoIG11c3QgYmUgZW5hYmxlZCwgdmlzaWJsZSBh
bmQgd2l0aCBpc1BpY2thYmxlIHNldCB0byB0cnVlCisgICAgICogQHBhcmFtIHRyaWFuZ2xlUHJl
ZGljYXRlIGRlZmluZXMgYW4gb3B0aW9uYWwgcHJlZGljYXRlIHVzZWQgdG8gc2VsZWN0IGZhY2Vz
IHdoZW4gYSBtZXNoIGludGVyc2VjdGlvbiBpcyBkZXRlY3RlZAorICAgICAqIEByZXR1cm5zIGFu
IGFycmF5IG9mIFBpY2tpbmdJbmZvCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLm11bHRp
UGlja1dpdGhSYXkgPSBmdW5jdGlvbiAocmF5LCBwcmVkaWNhdGUsIHRyaWFuZ2xlUHJlZGljYXRl
KSB7CisgICAgICAgIHRocm93IF9NaXNjX2RldlRvb2xzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yNF9fWyJfRGV2VG9vbHMiXS5XYXJuSW1wb3J0KCJSYXkiKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEZvcmNlIHRoZSB2YWx1ZSBvZiBtZXNoVW5kZXJQb2ludGVyCisgICAgICogQHBhcmFt
IG1lc2ggZGVmaW5lcyB0aGUgbWVzaCB0byB1c2UKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5
cGUuc2V0UG9pbnRlck92ZXJNZXNoID0gZnVuY3Rpb24gKG1lc2gpIHsKKyAgICAgICAgdGhpcy5f
aW5wdXRNYW5hZ2VyLnNldFBvaW50ZXJPdmVyTWVzaChtZXNoKTsKKyAgICB9OworICAgIC8qKgor
ICAgICAqIEdldHMgdGhlIG1lc2ggdW5kZXIgdGhlIHBvaW50ZXIKKyAgICAgKiBAcmV0dXJucyBh
IE1lc2ggb3IgbnVsbCBpZiBubyBtZXNoIGlzIHVuZGVyIHRoZSBwb2ludGVyCisgICAgICovCisg
ICAgU2NlbmUucHJvdG90eXBlLmdldFBvaW50ZXJPdmVyTWVzaCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2lucHV0TWFuYWdlci5nZXRQb2ludGVyT3Zlck1lc2goKTsKKyAg
ICB9OworICAgIC8vIE1pc2MuCisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTY2VuZS5wcm90b3R5
cGUuX3JlYnVpbGRHZW9tZXRyaWVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBmb3IgKHZhciBf
aSA9IDAsIF9hID0gdGhpcy5nZW9tZXRyaWVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgeworICAg
ICAgICAgICAgdmFyIGdlb21ldHJ5ID0gX2FbX2ldOworICAgICAgICAgICAgZ2VvbWV0cnkuX3Jl
YnVpbGQoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gdGhpcy5t
ZXNoZXM7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7CisgICAgICAgICAgICB2YXIgbWVzaCA9IF9j
W19iXTsKKyAgICAgICAgICAgIG1lc2guX3JlYnVpbGQoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5wb3N0UHJvY2Vzc01hbmFnZXIpIHsKKyAgICAgICAgICAgIHRoaXMucG9zdFByb2Nl
c3NNYW5hZ2VyLl9yZWJ1aWxkKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgX2QgPSAw
LCBfZSA9IHRoaXMuX2NvbXBvbmVudHM7IF9kIDwgX2UubGVuZ3RoOyBfZCsrKSB7CisgICAgICAg
ICAgICB2YXIgY29tcG9uZW50ID0gX2VbX2RdOworICAgICAgICAgICAgY29tcG9uZW50LnJlYnVp
bGQoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfZiA9IDAsIF9nID0gdGhpcy5wYXJ0
aWNsZVN5c3RlbXM7IF9mIDwgX2cubGVuZ3RoOyBfZisrKSB7CisgICAgICAgICAgICB2YXIgc3lz
dGVtID0gX2dbX2ZdOworICAgICAgICAgICAgc3lzdGVtLnJlYnVpbGQoKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuX3JlYnVpbGRU
ZXh0dXJlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRo
aXMudGV4dHVyZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIgdGV4
dHVyZSA9IF9hW19pXTsKKyAgICAgICAgICAgIHRleHR1cmUuX3JlYnVpbGQoKTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLm1hcmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfVGV4
dHVyZURpcnR5RmxhZyk7CisgICAgfTsKKyAgICAvLyBUYWdzCisgICAgU2NlbmUucHJvdG90eXBl
Ll9nZXRCeVRhZ3MgPSBmdW5jdGlvbiAobGlzdCwgdGFnc1F1ZXJ5LCBmb3JFYWNoKSB7CisgICAg
ICAgIGlmICh0YWdzUXVlcnkgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgLy8gcmV0dXJu
cyB0aGUgY29tcGxldGUgbGlzdCAoY291bGQgYmUgZG9uZSB3aXRoIFRhZ3MuTWF0Y2hlc1F1ZXJ5
IGJ1dCBubyBuZWVkIHRvIGhhdmUgYSBmb3ItbG9vcCBoZXJlKQorICAgICAgICAgICAgcmV0dXJu
IGxpc3Q7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGxpc3RCeVRhZ3MgPSBbXTsKKyAgICAgICAg
Zm9yRWFjaCA9IGZvckVhY2ggfHwgKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybjsgfSk7CisgICAg
ICAgIGZvciAodmFyIGkgaW4gbGlzdCkgeworICAgICAgICAgICAgdmFyIGl0ZW0gPSBsaXN0W2ld
OworICAgICAgICAgICAgaWYgKF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siVGFncyJdICYmIF9NaXNjX3RhZ3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVGFn
cyJdLk1hdGNoZXNRdWVyeShpdGVtLCB0YWdzUXVlcnkpKSB7CisgICAgICAgICAgICAgICAgbGlz
dEJ5VGFncy5wdXNoKGl0ZW0pOworICAgICAgICAgICAgICAgIGZvckVhY2goaXRlbSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxpc3RCeVRhZ3M7CisgICAgfTsK
KyAgICAvKioKKyAgICAgKiBHZXQgYSBsaXN0IG9mIG1lc2hlcyBieSB0YWdzCisgICAgICogQHBh
cmFtIHRhZ3NRdWVyeSBkZWZpbmVzIHRoZSB0YWdzIHF1ZXJ5IHRvIHVzZQorICAgICAqIEBwYXJh
bSBmb3JFYWNoIGRlZmluZXMgYSBwcmVkaWNhdGUgdXNlZCB0byBmaWx0ZXIgcmVzdWx0cworICAg
ICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIE1lc2gKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5
cGUuZ2V0TWVzaGVzQnlUYWdzID0gZnVuY3Rpb24gKHRhZ3NRdWVyeSwgZm9yRWFjaCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5fZ2V0QnlUYWdzKHRoaXMubWVzaGVzLCB0YWdzUXVlcnksIGZvckVh
Y2gpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGEgbGlzdCBvZiBjYW1lcmFzIGJ5IHRh
Z3MKKyAgICAgKiBAcGFyYW0gdGFnc1F1ZXJ5IGRlZmluZXMgdGhlIHRhZ3MgcXVlcnkgdG8gdXNl
CisgICAgICogQHBhcmFtIGZvckVhY2ggZGVmaW5lcyBhIHByZWRpY2F0ZSB1c2VkIHRvIGZpbHRl
ciByZXN1bHRzCisgICAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgQ2FtZXJhCisgICAgICovCisg
ICAgU2NlbmUucHJvdG90eXBlLmdldENhbWVyYXNCeVRhZ3MgPSBmdW5jdGlvbiAodGFnc1F1ZXJ5
LCBmb3JFYWNoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9nZXRCeVRhZ3ModGhpcy5jYW1lcmFz
LCB0YWdzUXVlcnksIGZvckVhY2gpOworICAgIH07CisgICAgLyoqCisgICAgICogR2V0IGEgbGlz
dCBvZiBsaWdodHMgYnkgdGFncworICAgICAqIEBwYXJhbSB0YWdzUXVlcnkgZGVmaW5lcyB0aGUg
dGFncyBxdWVyeSB0byB1c2UKKyAgICAgKiBAcGFyYW0gZm9yRWFjaCBkZWZpbmVzIGEgcHJlZGlj
YXRlIHVzZWQgdG8gZmlsdGVyIHJlc3VsdHMKKyAgICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBM
aWdodAorICAgICAqLworICAgIFNjZW5lLnByb3RvdHlwZS5nZXRMaWdodHNCeVRhZ3MgPSBmdW5j
dGlvbiAodGFnc1F1ZXJ5LCBmb3JFYWNoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9nZXRCeVRh
Z3ModGhpcy5saWdodHMsIHRhZ3NRdWVyeSwgZm9yRWFjaCk7CisgICAgfTsKKyAgICAvKioKKyAg
ICAgKiBHZXQgYSBsaXN0IG9mIG1hdGVyaWFscyBieSB0YWdzCisgICAgICogQHBhcmFtIHRhZ3NR
dWVyeSBkZWZpbmVzIHRoZSB0YWdzIHF1ZXJ5IHRvIHVzZQorICAgICAqIEBwYXJhbSBmb3JFYWNo
IGRlZmluZXMgYSBwcmVkaWNhdGUgdXNlZCB0byBmaWx0ZXIgcmVzdWx0cworICAgICAqIEByZXR1
cm5zIGFuIGFycmF5IG9mIE1hdGVyaWFsCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLmdl
dE1hdGVyaWFsQnlUYWdzID0gZnVuY3Rpb24gKHRhZ3NRdWVyeSwgZm9yRWFjaCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5fZ2V0QnlUYWdzKHRoaXMubWF0ZXJpYWxzLCB0YWdzUXVlcnksIGZvckVh
Y2gpLmNvbmNhdCh0aGlzLl9nZXRCeVRhZ3ModGhpcy5tdWx0aU1hdGVyaWFscywgdGFnc1F1ZXJ5
LCBmb3JFYWNoKSk7CisgICAgfTsKKyAgICAvKioKKyAgICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1
bHQgc29ydCBmdW5jdGlvbiBhcHBsaWVkIGluIHRoZSByZW5kZXJnaW5nIGdyb3VwIHRvIHByZXBh
cmUgdGhlIG1lc2hlcy4KKyAgICAgKiBUaGlzIGFsbG93ZWQgY29udHJvbCBmb3IgZnJvbnQgdG8g
YmFjayByZW5kZXJpbmcgb3IgcmV2ZXJzbHkgZGVwZW5kaW5nIG9mIHRoZSBzcGVjaWFsIG5lZWRz
LgorICAgICAqCisgICAgICogQHBhcmFtIHJlbmRlcmluZ0dyb3VwSWQgVGhlIHJlbmRlcmluZyBn
cm91cCBpZCBjb3JyZXNwb25kaW5nIHRvIGl0cyBpbmRleAorICAgICAqIEBwYXJhbSBvcGFxdWVT
b3J0Q29tcGFyZUZuIFRoZSBvcGFxdWUgcXVldWUgY29tcGFyaXNvbiBmdW5jdGlvbiB1c2UgdG8g
c29ydC4KKyAgICAgKiBAcGFyYW0gYWxwaGFUZXN0U29ydENvbXBhcmVGbiBUaGUgYWxwaGEgdGVz
dCBxdWV1ZSBjb21wYXJpc29uIGZ1bmN0aW9uIHVzZSB0byBzb3J0LgorICAgICAqIEBwYXJhbSB0
cmFuc3BhcmVudFNvcnRDb21wYXJlRm4gVGhlIHRyYW5zcGFyZW50IHF1ZXVlIGNvbXBhcmlzb24g
ZnVuY3Rpb24gdXNlIHRvIHNvcnQuCisgICAgICovCisgICAgU2NlbmUucHJvdG90eXBlLnNldFJl
bmRlcmluZ09yZGVyID0gZnVuY3Rpb24gKHJlbmRlcmluZ0dyb3VwSWQsIG9wYXF1ZVNvcnRDb21w
YXJlRm4sIGFscGhhVGVzdFNvcnRDb21wYXJlRm4sIHRyYW5zcGFyZW50U29ydENvbXBhcmVGbikg
eworICAgICAgICBpZiAob3BhcXVlU29ydENvbXBhcmVGbiA9PT0gdm9pZCAwKSB7IG9wYXF1ZVNv
cnRDb21wYXJlRm4gPSBudWxsOyB9CisgICAgICAgIGlmIChhbHBoYVRlc3RTb3J0Q29tcGFyZUZu
ID09PSB2b2lkIDApIHsgYWxwaGFUZXN0U29ydENvbXBhcmVGbiA9IG51bGw7IH0KKyAgICAgICAg
aWYgKHRyYW5zcGFyZW50U29ydENvbXBhcmVGbiA9PT0gdm9pZCAwKSB7IHRyYW5zcGFyZW50U29y
dENvbXBhcmVGbiA9IG51bGw7IH0KKyAgICAgICAgdGhpcy5fcmVuZGVyaW5nTWFuYWdlci5zZXRS
ZW5kZXJpbmdPcmRlcihyZW5kZXJpbmdHcm91cElkLCBvcGFxdWVTb3J0Q29tcGFyZUZuLCBhbHBo
YVRlc3RTb3J0Q29tcGFyZUZuLCB0cmFuc3BhcmVudFNvcnRDb21wYXJlRm4pOworICAgIH07Cisg
ICAgLyoqCisgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBzdGVuY2lsIGFuZCBk
ZXB0aCBidWZmZXIgYXJlIGNsZWFyZWQgYmV0d2VlbiB0d28gcmVuZGVyaW5nIGdyb3Vwcy4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSByZW5kZXJpbmdHcm91cElkIFRoZSByZW5kZXJpbmcgZ3JvdXAg
aWQgY29ycmVzcG9uZGluZyB0byBpdHMgaW5kZXgKKyAgICAgKiBAcGFyYW0gYXV0b0NsZWFyRGVw
dGhTdGVuY2lsIEF1dG9tYXRpY2FsbHkgY2xlYXJzIGRlcHRoIGFuZCBzdGVuY2lsIGJldHdlZW4g
Z3JvdXBzIGlmIHRydWUuCisgICAgICogQHBhcmFtIGRlcHRoIEF1dG9tYXRpY2FsbHkgY2xlYXJz
IGRlcHRoIGJldHdlZW4gZ3JvdXBzIGlmIHRydWUgYW5kIGF1dG9DbGVhciBpcyB0cnVlLgorICAg
ICAqIEBwYXJhbSBzdGVuY2lsIEF1dG9tYXRpY2FsbHkgY2xlYXJzIHN0ZW5jaWwgYmV0d2VlbiBn
cm91cHMgaWYgdHJ1ZSBhbmQgYXV0b0NsZWFyIGlzIHRydWUuCisgICAgICovCisgICAgU2NlbmUu
cHJvdG90eXBlLnNldFJlbmRlcmluZ0F1dG9DbGVhckRlcHRoU3RlbmNpbCA9IGZ1bmN0aW9uIChy
ZW5kZXJpbmdHcm91cElkLCBhdXRvQ2xlYXJEZXB0aFN0ZW5jaWwsIGRlcHRoLCBzdGVuY2lsKSB7
CisgICAgICAgIGlmIChkZXB0aCA9PT0gdm9pZCAwKSB7IGRlcHRoID0gdHJ1ZTsgfQorICAgICAg
ICBpZiAoc3RlbmNpbCA9PT0gdm9pZCAwKSB7IHN0ZW5jaWwgPSB0cnVlOyB9CisgICAgICAgIHRo
aXMuX3JlbmRlcmluZ01hbmFnZXIuc2V0UmVuZGVyaW5nQXV0b0NsZWFyRGVwdGhTdGVuY2lsKHJl
bmRlcmluZ0dyb3VwSWQsIGF1dG9DbGVhckRlcHRoU3RlbmNpbCwgZGVwdGgsIHN0ZW5jaWwpOwor
ICAgIH07CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBhdXRvIGNsZWFyIGNvbmZp
Z3VyYXRpb24gZm9yIG9uZSByZW5kZXJpbmcgZ3JvdXAgb2YgdGhlIHJlbmRlcmluZworICAgICAq
IG1hbmFnZXIuCisgICAgICogQHBhcmFtIGluZGV4IHRoZSByZW5kZXJpbmcgZ3JvdXAgaW5kZXgg
dG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBmb3IKKyAgICAgKiBAcmV0dXJucyBUaGUgYXV0byBjbGVh
ciBzZXR1cCBmb3IgdGhlIHJlcXVlc3RlZCByZW5kZXJpbmcgZ3JvdXAKKyAgICAgKi8KKyAgICBT
Y2VuZS5wcm90b3R5cGUuZ2V0QXV0b0NsZWFyRGVwdGhTdGVuY2lsU2V0dXAgPSBmdW5jdGlvbiAo
aW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcmluZ01hbmFnZXIuZ2V0QXV0b0Ns
ZWFyRGVwdGhTdGVuY2lsU2V0dXAoaW5kZXgpOworICAgIH07CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFNjZW5lLnByb3RvdHlwZSwgImJsb2NrTWF0ZXJpYWxEaXJ0eU1lY2hhbmlzbSIsIHsK
KyAgICAgICAgLyoqIEdldHMgb3Igc2V0cyBhIGJvb2xlYW4gYmxvY2tpbmcgYWxsIHRoZSBjYWxs
cyB0byBtYXJrQWxsTWF0ZXJpYWxzQXNEaXJ0eSAoaWUuIHRoZSBtYXRlcmlhbHMgd29uJ3QgYmUg
dXBkYXRlZCBpZiB0aGV5IGFyZSBvdXQgb2Ygc3luYykgKi8KKyAgICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmxvY2tNYXRlcmlhbERpcnR5TWVjaGFu
aXNtOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX2Jsb2NrTWF0ZXJpYWxEaXJ0eU1lY2hhbmlzbSA9PT0gdmFsdWUpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9ibG9ja01hdGVyaWFsRGlydHlNZWNoYW5pc20gPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICgh
dmFsdWUpIHsgLy8gRG8gYSBjb21wbGV0ZSB1cGRhdGUKKyAgICAgICAgICAgICAgICB0aGlzLm1h
cmtBbGxNYXRlcmlhbHNBc0RpcnR5KF9FbmdpbmVzX2NvbnN0YW50c19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMjBfX1siQ29uc3RhbnRzIl0uTUFURVJJQUxfQWxsRGlydHlGbGFnKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgICAgfSk7CisgICAgLyoqCisgICAgICogV2lsbCBmbGFnIGFs
bCBtYXRlcmlhbHMgYXMgZGlydHkgdG8gdHJpZ2dlciBuZXcgc2hhZGVyIGNvbXBpbGF0aW9uCisg
ICAgICogQHBhcmFtIGZsYWcgZGVmaW5lcyB0aGUgZmxhZyB1c2VkIHRvIHNwZWNpZnkgd2hpY2gg
bWF0ZXJpYWwgcGFydCBtdXN0IGJlIG1hcmtlZCBhcyBkaXJ0eQorICAgICAqIEBwYXJhbSBwcmVk
aWNhdGUgSWYgbm90IG51bGwsIGl0IHdpbGwgYmUgdXNlZCB0byBzcGVjaWZpeSBpZiBhIG1hdGVy
aWFsIGhhcyB0byBiZSBtYXJrZWQgYXMgZGlydHkKKyAgICAgKi8KKyAgICBTY2VuZS5wcm90b3R5
cGUubWFya0FsbE1hdGVyaWFsc0FzRGlydHkgPSBmdW5jdGlvbiAoZmxhZywgcHJlZGljYXRlKSB7
CisgICAgICAgIGlmICh0aGlzLl9ibG9ja01hdGVyaWFsRGlydHlNZWNoYW5pc20pIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0g
dGhpcy5tYXRlcmlhbHM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CisgICAgICAgICAgICB2YXIg
bWF0ZXJpYWwgPSBfYVtfaV07CisgICAgICAgICAgICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNh
dGUobWF0ZXJpYWwpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtYXRlcmlhbC5tYXJrQXNEaXJ0eShmbGFnKTsKKyAgICAgICAgfQorICAg
IH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTY2VuZS5wcm90b3R5cGUuX2xvYWRGaWxlID0g
ZnVuY3Rpb24gKHVybCwgb25TdWNjZXNzLCBvblByb2dyZXNzLCB1c2VPZmZsaW5lU3VwcG9ydCwg
dXNlQXJyYXlCdWZmZXIsIG9uRXJyb3IpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAg
ICAgICAgdmFyIHJlcXVlc3QgPSBfTWlzY190b29sc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJUb29scyJdLkxvYWRGaWxlKHVybCwgb25TdWNjZXNzLCBvblByb2dyZXNzLCB1c2VPZmZs
aW5lU3VwcG9ydCA/IHRoaXMub2ZmbGluZVByb3ZpZGVyIDogdW5kZWZpbmVkLCB1c2VBcnJheUJ1
ZmZlciwgb25FcnJvcik7CisgICAgICAgIHRoaXMuX2FjdGl2ZVJlcXVlc3RzLnB1c2gocmVxdWVz
dCk7CisgICAgICAgIHJlcXVlc3Qub25Db21wbGV0ZU9ic2VydmFibGUuYWRkKGZ1bmN0aW9uIChy
ZXF1ZXN0KSB7CisgICAgICAgICAgICBfdGhpcy5fYWN0aXZlUmVxdWVzdHMuc3BsaWNlKF90aGlz
Ll9hY3RpdmVSZXF1ZXN0cy5pbmRleE9mKHJlcXVlc3QpLCAxKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHJldHVybiByZXF1ZXN0OworICAgIH07CisgICAgLyoqIEBoaWRkZW4gKi8KKyAgICBTY2Vu
ZS5wcm90b3R5cGUuX2xvYWRGaWxlQXN5bmMgPSBmdW5jdGlvbiAodXJsLCB1c2VPZmZsaW5lU3Vw
cG9ydCwgdXNlQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgdmFyIF90aGlzID0gdGhpczsKKyAgICAg
ICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAg
ICAgICAgIF90aGlzLl9sb2FkRmlsZSh1cmwsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAg
ICAgICAgcmVzb2x2ZShkYXRhKTsKKyAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgdXNlT2ZmbGlu
ZVN1cHBvcnQsIHVzZUFycmF5QnVmZmVyLCBmdW5jdGlvbiAocmVxdWVzdCwgZXhjZXB0aW9uKSB7
CisgICAgICAgICAgICAgICAgcmVqZWN0KGV4Y2VwdGlvbik7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7CisgICAgfTsKKyAgICAvKiogVGhlIGZvZyBpcyBkZWFjdGl2YXRlZCAqLworICAg
IFNjZW5lLkZPR01PREVfTk9ORSA9IDA7CisgICAgLyoqIFRoZSBmb2cgZGVuc2l0eSBpcyBmb2xs
b3dpbmcgYW4gZXhwb25lbnRpYWwgZnVuY3Rpb24gKi8KKyAgICBTY2VuZS5GT0dNT0RFX0VYUCA9
IDE7CisgICAgLyoqIFRoZSBmb2cgZGVuc2l0eSBpcyBmb2xsb3dpbmcgYW4gZXhwb25lbnRpYWwg
ZnVuY3Rpb24gZmFzdGVyIHRoYW4gRk9HTU9ERV9FWFAgKi8KKyAgICBTY2VuZS5GT0dNT0RFX0VY
UDIgPSAyOworICAgIC8qKiBUaGUgZm9nIGRlbnNpdHkgaXMgZm9sbG93aW5nIGEgbGluZWFyIGZ1
bmN0aW9uLiAqLworICAgIFNjZW5lLkZPR01PREVfTElORUFSID0gMzsKKyAgICAvKioKKyAgICAg
KiBHZXRzIG9yIHNldHMgdGhlIG1pbmltdW0gZGVsdGF0aW1lIHdoZW4gZGV0ZXJtaW5pc3RpYyBs
b2NrIHN0ZXAgaXMgZW5hYmxlZAorICAgICAqIEBzZWUgaHR0cDovL2RvYy5iYWJ5bG9uanMuY29t
L2JhYnlsb24xMDEvYW5pbWF0aW9ucyNkZXRlcm1pbmlzdGljLWxvY2tzdGVwCisgICAgICovCisg
ICAgU2NlbmUuTWluRGVsdGFUaW1lID0gMS4wOworICAgIC8qKgorICAgICAqIEdldHMgb3Igc2V0
cyB0aGUgbWF4aW11bSBkZWx0YXRpbWUgd2hlbiBkZXRlcm1pbmlzdGljIGxvY2sgc3RlcCBpcyBl
bmFibGVkCisgICAgICogQHNlZSBodHRwOi8vZG9jLmJhYnlsb25qcy5jb20vYmFieWxvbjEwMS9h
bmltYXRpb25zI2RldGVybWluaXN0aWMtbG9ja3N0ZXAKKyAgICAgKi8KKyAgICBTY2VuZS5NYXhE
ZWx0YVRpbWUgPSAxMDAwLjA7CisgICAgcmV0dXJuIFNjZW5lOworfShfYWJzdHJhY3RTY2VuZV9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siQWJzdHJhY3RTY2VuZSJdKSk7CisKKworCisv
KioqLyB9KSwKKworLyoqKi8gIi4vc2NlbmVDb21wb25lbnQudHMiOgorLyohKioqKioqKioqKioq
KioqKioqKioqKioqKioqISpcCisgICEqKiogLi9zY2VuZUNvbXBvbmVudC50cyAqKiohCisgIFwq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgZXhwb3J0cyBwcm92aWRlZDogU2NlbmVD
b21wb25lbnRDb25zdGFudHMsIFN0YWdlICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIlNjZW5lQ29tcG9uZW50Q29uc3RhbnRzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTY2Vu
ZUNvbXBvbmVudENvbnN0YW50czsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTdGFnZSIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gU3RhZ2U7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHRzbGli
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISB0
c2xpYiAqLyAiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIpOworCisvKioKKyAq
IEdyb3VwcyBhbGwgdGhlIHNjZW5lIGNvbXBvbmVudCBjb25zdGFudHMgaW4gb25lIHBsYWNlIHRv
IGVhc2UgbWFpbnRlbmFuY2UuCisgKiBAaGlkZGVuCisgKi8KK3ZhciBTY2VuZUNvbXBvbmVudENv
bnN0YW50cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBTY2Vu
ZUNvbXBvbmVudENvbnN0YW50cygpIHsKKyAgICB9CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFu
dHMuTkFNRV9FRkZFQ1RMQVlFUiA9ICJFZmZlY3RMYXllciI7CisgICAgU2NlbmVDb21wb25lbnRD
b25zdGFudHMuTkFNRV9MQVlFUiA9ICJMYXllciI7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFu
dHMuTkFNRV9MRU5TRkxBUkVTWVNURU0gPSAiTGVuc0ZsYXJlU3lzdGVtIjsKKyAgICBTY2VuZUNv
bXBvbmVudENvbnN0YW50cy5OQU1FX0JPVU5ESU5HQk9YUkVOREVSRVIgPSAiQm91bmRpbmdCb3hS
ZW5kZXJlciI7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuTkFNRV9QQVJUSUNMRVNZU1RF
TSA9ICJQYXJ0aWNsZVN5c3RlbSI7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuTkFNRV9H
QU1FUEFEID0gIkdhbWVwYWQiOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLk5BTUVfU0lN
UExJRklDQVRJT05RVUVVRSA9ICJTaW1wbGlmaWNhdGlvblF1ZXVlIjsKKyAgICBTY2VuZUNvbXBv
bmVudENvbnN0YW50cy5OQU1FX0dFT01FVFJZQlVGRkVSUkVOREVSRVIgPSAiR2VvbWV0cnlCdWZm
ZXJSZW5kZXJlciI7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuTkFNRV9ERVBUSFJFTkRF
UkVSID0gIkRlcHRoUmVuZGVyZXIiOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLk5BTUVf
UE9TVFBST0NFU1NSRU5ERVJQSVBFTElORU1BTkFHRVIgPSAiUG9zdFByb2Nlc3NSZW5kZXJQaXBl
bGluZU1hbmFnZXIiOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLk5BTUVfU1BSSVRFID0g
IlNwcml0ZSI7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuTkFNRV9PVVRMSU5FUkVOREVS
RVIgPSAiT3V0bGluZSI7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuTkFNRV9QUk9DRURV
UkFMVEVYVFVSRSA9ICJQcm9jZWR1cmFsVGV4dHVyZSI7CisgICAgU2NlbmVDb21wb25lbnRDb25z
dGFudHMuTkFNRV9TSEFET1dHRU5FUkFUT1IgPSAiU2hhZG93R2VuZXJhdG9yIjsKKyAgICBTY2Vu
ZUNvbXBvbmVudENvbnN0YW50cy5OQU1FX09DVFJFRSA9ICJPY3RyZWUiOworICAgIFNjZW5lQ29t
cG9uZW50Q29uc3RhbnRzLk5BTUVfUEhZU0lDU0VOR0lORSA9ICJQaHlzaWNzRW5naW5lIjsKKyAg
ICBTY2VuZUNvbXBvbmVudENvbnN0YW50cy5OQU1FX0FVRElPID0gIkF1ZGlvIjsKKyAgICBTY2Vu
ZUNvbXBvbmVudENvbnN0YW50cy5TVEVQX0lTUkVBRFlGT1JNRVNIX0VGRkVDVExBWUVSID0gMDsK
KyAgICBTY2VuZUNvbXBvbmVudENvbnN0YW50cy5TVEVQX0JFRk9SRUVWQUxVQVRFQUNUSVZFTUVT
SF9CT1VORElOR0JPWFJFTkRFUkVSID0gMDsKKyAgICBTY2VuZUNvbXBvbmVudENvbnN0YW50cy5T
VEVQX0VWQUxVQVRFU1VCTUVTSF9CT1VORElOR0JPWFJFTkRFUkVSID0gMDsKKyAgICBTY2VuZUNv
bXBvbmVudENvbnN0YW50cy5TVEVQX0FDVElWRU1FU0hfQk9VTkRJTkdCT1hSRU5ERVJFUiA9IDA7
CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuU1RFUF9DQU1FUkFEUkFXUkVOREVSVEFSR0VU
X0VGRkVDVExBWUVSID0gMTsKKyAgICBTY2VuZUNvbXBvbmVudENvbnN0YW50cy5TVEVQX0JFRk9S
RUNBTUVSQURSQVdfRUZGRUNUTEFZRVIgPSAwOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRz
LlNURVBfQkVGT1JFQ0FNRVJBRFJBV19MQVlFUiA9IDE7CisgICAgU2NlbmVDb21wb25lbnRDb25z
dGFudHMuU1RFUF9CRUZPUkVSRU5ERVJUQVJHRVREUkFXX0xBWUVSID0gMDsKKyAgICBTY2VuZUNv
bXBvbmVudENvbnN0YW50cy5TVEVQX0JFRk9SRVJFTkRFUklOR01FU0hfT1VUTElORSA9IDA7Cisg
ICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuU1RFUF9BRlRFUlJFTkRFUklOR01FU0hfT1VUTElO
RSA9IDA7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuU1RFUF9BRlRFUlJFTkRFUklOR0dS
T1VQRFJBV19FRkZFQ1RMQVlFUl9EUkFXID0gMDsKKyAgICBTY2VuZUNvbXBvbmVudENvbnN0YW50
cy5TVEVQX0FGVEVSUkVOREVSSU5HR1JPVVBEUkFXX0JPVU5ESU5HQk9YUkVOREVSRVIgPSAxOwor
ICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLlNURVBfQkVGT1JFQ0FNRVJBVVBEQVRFX1NJTVBM
SUZJQ0FUSU9OUVVFVUUgPSAwOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLlNURVBfQkVG
T1JFQ0FNRVJBVVBEQVRFX0dBTUVQQUQgPSAxOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRz
LlNURVBfQkVGT1JFQ0xFQVJfUFJPQ0VEVVJBTFRFWFRVUkUgPSAwOworICAgIFNjZW5lQ29tcG9u
ZW50Q29uc3RhbnRzLlNURVBfQUZURVJSRU5ERVJUQVJHRVREUkFXX0xBWUVSID0gMDsKKyAgICBT
Y2VuZUNvbXBvbmVudENvbnN0YW50cy5TVEVQX0FGVEVSQ0FNRVJBRFJBV19FRkZFQ1RMQVlFUiA9
IDA7CisgICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuU1RFUF9BRlRFUkNBTUVSQURSQVdfTEVO
U0ZMQVJFU1lTVEVNID0gMTsKKyAgICBTY2VuZUNvbXBvbmVudENvbnN0YW50cy5TVEVQX0FGVEVS
Q0FNRVJBRFJBV19FRkZFQ1RMQVlFUl9EUkFXID0gMjsKKyAgICBTY2VuZUNvbXBvbmVudENvbnN0
YW50cy5TVEVQX0FGVEVSQ0FNRVJBRFJBV19MQVlFUiA9IDM7CisgICAgU2NlbmVDb21wb25lbnRD
b25zdGFudHMuU1RFUF9BRlRFUlJFTkRFUl9BVURJTyA9IDA7CisgICAgU2NlbmVDb21wb25lbnRD
b25zdGFudHMuU1RFUF9HQVRIRVJSRU5ERVJUQVJHRVRTX1NIQURPV0dFTkVSQVRPUiA9IDA7Cisg
ICAgU2NlbmVDb21wb25lbnRDb25zdGFudHMuU1RFUF9HQVRIRVJSRU5ERVJUQVJHRVRTX0dFT01F
VFJZQlVGRkVSUkVOREVSRVIgPSAxOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLlNURVBf
R0FUSEVSUkVOREVSVEFSR0VUU19ERVBUSFJFTkRFUkVSID0gMjsKKyAgICBTY2VuZUNvbXBvbmVu
dENvbnN0YW50cy5TVEVQX0dBVEhFUlJFTkRFUlRBUkdFVFNfUE9TVFBST0NFU1NSRU5ERVJQSVBF
TElORU1BTkFHRVIgPSAzOworICAgIFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzLlNURVBfR0FUSEVS
QUNUSVZFQ0FNRVJBUkVOREVSVEFSR0VUU19ERVBUSFJFTkRFUkVSID0gMDsKKyAgICBTY2VuZUNv
bXBvbmVudENvbnN0YW50cy5TVEVQX1BPSU5URVJNT1ZFX1NQUklURSA9IDA7CisgICAgU2NlbmVD
b21wb25lbnRDb25zdGFudHMuU1RFUF9QT0lOVEVSRE9XTl9TUFJJVEUgPSAwOworICAgIFNjZW5l
Q29tcG9uZW50Q29uc3RhbnRzLlNURVBfUE9JTlRFUlVQX1NQUklURSA9IDA7CisgICAgcmV0dXJu
IFNjZW5lQ29tcG9uZW50Q29uc3RhbnRzOworfSgpKTsKKworLyoqCisgKiBSZXByZXNzZW50YXRp
b24gb2YgYSBzdGFnZSBpbiB0aGUgc2NlbmUgKEJhc2ljYWxseSBhIGxpc3Qgb2Ygb3JkZXJlZCBz
dGVwcykKKyAqIEBoaWRkZW4KKyAqLwordmFyIFN0YWdlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKF9zdXBlcikgeworICAgIHRzbGliX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl9f
ZXh0ZW5kcyJdKFN0YWdlLCBfc3VwZXIpOworICAgIC8qKgorICAgICAqIEhpZGUgY3RvciBmcm9t
IHRoZSByZXN0IG9mIHRoZSB3b3JsZC4KKyAgICAgKiBAcGFyYW0gaXRlbXMgVGhlIGl0ZW1zIHRv
IGFkZC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTdGFnZShpdGVtcykgeworICAgICAgICByZXR1
cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGl0ZW1zKSB8fCB0aGlzOworICAgIH0KKyAgICAvKioKKyAg
ICAgKiBDcmVhdGVzIGEgbmV3IFN0YWdlLgorICAgICAqIEByZXR1cm5zIEEgbmV3IGluc3RhbmNl
IG9mIGEgU3RhZ2UKKyAgICAgKi8KKyAgICBTdGFnZS5DcmVhdGUgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKFN0YWdlLnByb3RvdHlwZSk7CisgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBSZWdpc3RlcnMgYSBzdGVwIGluIGFuIG9yZGVyZWQgd2F5IGluIHRoZSB0
YXJnZXRlZCBzdGFnZS4KKyAgICAgKiBAcGFyYW0gaW5kZXggRGVmaW5lcyB0aGUgcG9zaXRpb24g
dG8gcmVnaXN0ZXIgdGhlIHN0ZXAgaW4KKyAgICAgKiBAcGFyYW0gY29tcG9uZW50IERlZmluZXMg
dGhlIGNvbXBvbmVudCBhdHRhY2hlZCB0byB0aGUgc3RlcAorICAgICAqIEBwYXJhbSBhY3Rpb24g
RGVmaW5lcyB0aGUgYWN0aW9uIHRvIGxhdW5jaCBkdXJpbmcgdGhlIHN0ZXAKKyAgICAgKi8KKyAg
ICBTdGFnZS5wcm90b3R5cGUucmVnaXN0ZXJTdGVwID0gZnVuY3Rpb24gKGluZGV4LCBjb21wb25l
bnQsIGFjdGlvbikgeworICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgIHZhciBtYXhJbmRleCA9
IE51bWJlci5NQVhfVkFMVUU7CisgICAgICAgIGZvciAoOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgdmFyIHN0ZXAgPSB0aGlzW2ldOworICAgICAgICAgICAgbWF4SW5kZXgg
PSBzdGVwLmluZGV4OworICAgICAgICAgICAgaWYgKGluZGV4IDwgbWF4SW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlz
LnNwbGljZShpLCAwLCB7IGluZGV4OiBpbmRleCwgY29tcG9uZW50OiBjb21wb25lbnQsIGFjdGlv
bjogYWN0aW9uLmJpbmQoY29tcG9uZW50KSB9KTsKKyAgICB9OworICAgIC8qKgorICAgICAqIENs
ZWFycyBhbGwgdGhlIHN0ZXBzIGZyb20gdGhlIHN0YWdlLgorICAgICAqLworICAgIFN0YWdlLnBy
b3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5sZW5ndGggPSAwOwor
ICAgIH07CisgICAgcmV0dXJuIFN0YWdlOworfShBcnJheSkpOworCisKKworLyoqKi8gfSkKKwor
LyoqKioqKi8gfSk7Cit9KTsKKy8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhYnlsb24ubWF4LmpzLm1h
cApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kZW1vcy93ZWJncHUvYmFieWxvbi9s
b2dvLnN2ZyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vbG9nby5z
dmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZWQ4YTIxOWIwMDNjZTIzMGJmYWU4NmU2ODQ1ZDM5MGEwNjJmNGM2MQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnls
b24vbG9nby5zdmcKQEAgLTAsMCArMSBAQAorPHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJM
YXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAx
MjgwIDQzNiI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiNkNWQyY2E7fS5jbHMtMntmaWxsOiNm
ZmY7fS5jbHMtM3tmaWxsOiNlMDY4NGI7fS5jbHMtNHtmaWxsOiNiYjQ2NGI7fS5jbHMtNXtmaWxs
OiNlMGRlZDg7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5iYWJ5bG9uanNfaWRlbnRpdHlfY29sb3Jf
ZGFyazwvdGl0bGU+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMzkwLjM0LDE1My4xNmgyMS43NFYy
MDEuOWMzLjg2LTYuNDksMTEuNTctMTIuOCwyNi44Mi0xMi44LDIzLjg0LDAsMzYuODIsMTkuNjQs
MzYuODIsNDUuNDEsMCwyNi40Ny0xMy41LDQ4LjkxLTM5LjI3LDQ4LjkxLTEzLjY4LDAtMjAuMTYt
NC41Ni0yNC41NS0xMS43NWE2Ny42OCw2Ny42OCwwLDAsMS0uODcsOS42NUgzOTAuMTdjLjE3LTku
ODIuMTctMTkuODEuMTctMjkuODFabTQyLjI1LDUzLjY1Yy0xNS43OCwwLTIxLjU2LDEwLjUyLTIx
LjU2LDI5LjgsMCwxNi40OCw1LjA4LDI5LjI4LDIxLjIxLDI5LjI4LDEzLjY3LDAsMjEuMjEtMTIu
MjcsMjEuMjEtMzAuODZDNDUzLjQ1LDIxOC41NSw0NDYuNzksMjA2LjgxLDQzMi41OSwyMDYuODFa
Ii8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNTY0LjQyLDI1OS4yM2MwLDguNDEuNywxOS44MSwx
LjIzLDIyLjA5SDU0NC43OWMtLjctMS45My0xLjIzLTYuNDktMS40MS05LjgyLTMuMTUsNS40My05
LjY0LDExLjkyLTI2LjEyLDExLjkyLTIxLjU2LDAtMzAuNjgtMTQuMi0zMC42OC0yOC4wNSwwLTIw
LjM0LDE2LjMxLTI5LjgsNDIuNzgtMjkuOEg1NDN2LTYuMTRjMC03LTIuMjgtMTQuMzctMTUuNzct
MTQuMzctMTEuOTMsMC0xNC4zOCw1LjQzLTE1LjYxLDEyLjA5SDQ5MC43OWMxLjIzLTE0LjcyLDEw
LjUyLTI4LjIyLDM3LjM0LTI4LjA1LDIzLjQ5LjE4LDM2LjI5LDkuNDcsMzYuMjksMzAuNTFabS0y
MS4yMS0yMEg1MzEuNDZjLTE2LDAtMjMsNC43My0yMywxNC45LDAsNy4zNyw0LjkxLDEzLjMzLDE0
LjU1LDEzLjMzLDE3Ljg4LDAsMjAuMTYtMTIuMjgsMjAuMTYtMjUuNloiLz48cGF0aCBjbGFzcz0i
Y2xzLTEiIGQ9Ik01ODQuMDUsMTUzLjE2aDIxLjc0VjIwMS45YzMuODYtNi40OSwxMS41Ny0xMi44
LDI2LjgyLTEyLjgsMjMuODUsMCwzNi44MiwxOS42NCwzNi44Miw0NS40MSwwLDI2LjQ3LTEzLjUs
NDguOTEtMzkuMjcsNDguOTEtMTMuNjcsMC0yMC4xNi00LjU2LTI0LjU0LTExLjc1YTY3LjUxLDY3
LjUxLDAsMCwxLS44OCw5LjY1SDU4My44OGMuMTctOS44Mi4xNy0xOS44MS4xNy0yOS44MVptNDIu
MjUsNTMuNjVjLTE1Ljc3LDAtMjEuNTYsMTAuNTItMjEuNTYsMjkuOCwwLDE2LjQ4LDUuMDgsMjku
MjgsMjEuMjEsMjkuMjgsMTMuNjgsMCwyMS4yMi0xMi4yNywyMS4yMi0zMC44NkM2NDcuMTcsMjE4
LjU1LDY0MC41LDIwNi44MSw2MjYuMywyMDYuODFaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJN
Njk2Ljc4LDE5MS4yMWMxMS4yMiwzNS4yMywxOS4yOCw2MS41MywyMSw3MC4zSDcxOGMyLjI4LTku
NDcsNy44OS0yOS44MSwyMC03MC4zaDIxLjc0bC0zMSw5My4yNkM3MTkuOTIsMzEwLjU5LDcxMi45
LDMxOCw2OTIuMzksMzE4YTk0LDk0LDAsMCwxLTExLS43VjI5OS4zN2MxLjkzLjE4LDQuNTYuMzUs
Ni44NC4zNSw5LjgxLDAsMTQuMzctMy42OCwxOC40LTE1LjQybC0zMy4xMy05My4wOVoiLz48cGF0
aCBjbGFzcz0iY2xzLTEiIGQ9Ik03NjkuMzUsMjgxLjMyVjE1My4xNmgyMS43NFYyODEuMzJaIi8+
PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNODk0LDIzNi4wOWMwLDI2LjgyLTE1Ljc4LDQ3LjMzLTQ0
LDQ3LjMzLTI3LjM0LDAtNDMuMy0yMC00My4zLTQ3LDAtMjcuMzUsMTYuMzEtNDcuMzQsNDQuMzYt
NDcuMzRDODc3LjE3LDE4OS4xLDg5NCwyMDcuODYsODk0LDIzNi4wOVptLTY1LjIyLjE3YzAsMTgu
MjMsOC4yNCwyOS44LDIxLjc0LDI5LjgsMTMuNjcsMCwyMS4yMS0xMS4zOSwyMS4yMS0yOS42Miww
LTE5LjQ2LTcuNTQtMzAtMjEuNTYtMzBDODM2Ljg1LDIwNi40Niw4MjguNzgsMjE2LjYzLDgyOC43
OCwyMzYuMjZaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNOTA5Ljc3LDIxMy44MmMwLTcuNzEs
MC0xNS43OC0uMTctMjIuNjFoMjFhOTYuNCw5Ni40LDAsMCwxLC44OCwxMi42MmMzLjE2LTYuMzEs
MTAuNTItMTQuNzMsMjYuODItMTQuNzMsMTcuNzEsMCwzMCwxMS41NywzMCwzNC43MXY1Ny41MUg5
NjYuNTd2LTU1YzAtMTEuMjItNC0xOS4yOS0xNi0xOS4yOS0xMi44LDAtMTkuMTEsOC4yNC0xOS4x
MSwyNC45djQ5LjQ0SDkwOS43N1oiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xMDA5LDI4MS4z
MlYyNTIuMjFoMjMuMzF2MjkuMTFaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTA2OC4yNSwx
OTMuMTR2OTIuOTFjMCwyNC01Ljc5LDMyLjA4LTIzLDMyLjA4LS43LDAtNC4yLS4xOC01LjQzLS4z
NVYzMDcuMjZhMjYuNDYsMjYuNDYsMCwwLDAsMy42OC4xOGMxMS43NSwwLDEzLTYuMzEsMTMtMTku
NjRWMTkzLjE0Wm0tMTEuNzUtMjIuOFYxNTIuMjloMTEuNzV2MTguMDVaIi8+PHBhdGggY2xhc3M9
ImNscy0xIiBkPSJNMTA5NC44OSwyNTYuNmMyLjgxLDEwLjUyLDEwLjUyLDE3LDIzLjUsMTcsMTQu
MzcsMCwyMC4xNi02LjQ4LDIwLjE2LTE1LjYsMC05LjI5LTQtMTMuNjctMjIuNDQtMTguMDYtMjQt
NS43OC0yOS40Ni0xMy4xNS0yOS40Ni0yNC44OSwwLTEyLjI3LDkuMy0yNCwzMC4zMy0yNCwyMS4y
MiwwLDMwLjY4LDEyLjYyLDMyLjA4LDI1LjA3aC0xMS41N2MtMS40LTYuNjYtNi42Ni0xNS4yNS0y
MC44Ni0xNS4yNS0xNCwwLTE4LjA1LDYuODQtMTguMDUsMTMuMzIsMCw3LjM3LDMuODUsMTEuMDUs
MjAuNjgsMTUuMDgsMjUuNzcsNi4xMywzMS41NiwxNC43MiwzMS41NiwyNy44NywwLDE1Ljc4LTEy
LjYyLDI2LjMtMzIuNzgsMjYuMy0yMS4zOSwwLTMyLjYxLTExLjA1LTM0Ljg5LTI2LjgyWiIvPjxw
YXRoIGNsYXNzPSJjbHMtMiIgZD0iTTIzOC4yNCw4OS4zOGwtMTEwLjg1LDY0djEyOGwxMTAuODUs
NjQsMTEwLjg1LTY0di0xMjhaIi8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjM0OS4w
OSAxNTMuMzggMzE0LjM5IDEzMy4zNSAyODEuMDIgMTUyLjYyIDMxNS43MSAxNzIuNjUgMzQ5LjA5
IDE1My4zOCIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSIxNjAuNzcgMTcyLjY1IDI3
MS42MiAxMDguNjUgMjM4LjI0IDg5LjM4IDEyNy4zOSAxNTMuMzggMTYwLjc3IDE3Mi42NSIvPjxw
b2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSIyMDMuNTUgMjM3LjQxIDIzOC4yNCAyNTcuNDQg
MjcyLjk0IDIzNy40MSAyMzguMjQgMjE3LjM4IDIwMy41NSAyMzcuNDEiLz48cG9seWdvbiBjbGFz
cz0iY2xzLTQiIHBvaW50cz0iMzE1LjcxIDE3Mi42NSAzMTUuNzEgMjYyLjEgMjM4LjI0IDMwNi44
MyAxNjAuNzcgMjYyLjEgMTYwLjc3IDE3Mi42NSAxMjcuMzkgMTUzLjM4IDEyNy4zOSAyODEuMzcg
MjM4LjI0IDM0NS4zNyAzNDkuMDkgMjgxLjM3IDM0OS4wOSAxNTMuMzggMzE1LjcxIDE3Mi42NSIv
Pjxwb2x5Z29uIGNsYXNzPSJjbHMtNCIgcG9pbnRzPSIyMzguMjQgMTc3LjMxIDIwMy41NSAxOTcu
MzQgMjAzLjU1IDIzNy40MSAyMzguMjQgMjE3LjM4IDI3Mi45NCAyMzcuNDEgMjcyLjk0IDE5Ny4z
NCAyMzguMjQgMTc3LjMxIi8+PHBvbHlnb24gY2xhc3M9ImNscy01IiBwb2ludHM9IjMxNS43MSAx
NzIuNjUgMjcyLjk0IDE5Ny4zNCAyNzIuOTQgMjM3LjQxIDIzOC4yNCAyNTcuNDQgMjM4LjI0IDMw
Ni44MyAzMTUuNzEgMjYyLjEgMzE1LjcxIDE3Mi42NSIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMSIg
cG9pbnRzPSIxNjAuNzcgMTcyLjY1IDIwMy41NSAxOTcuMzQgMjAzLjU1IDIzNy40MSAyMzguMjQg
MjU3LjQ0IDIzOC4yNCAzMDYuODMgMTYwLjc3IDI2Mi4xIDE2MC43NyAxNzIuNjUiLz48cG9seWdv
biBjbGFzcz0iY2xzLTIiIHBvaW50cz0iMjcxLjYyIDEwOC42NSAzMTQuMzkgMTMzLjM1IDI4MS4w
MiAxNTIuNjIgMzE1LjcxIDE3Mi42NSAyNzIuOTQgMTk3LjM0IDIzOC4yNCAxNzcuMzEgMjAzLjU1
IDE5Ny4zNCAxNjAuNzcgMTcyLjY1IDI3MS42MiAxMDguNjUiLz48L3N2Zz4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dl
YmdwdS9iYWJ5bG9uL29uZUhlbG1ldFdlYkdQVS5odG1sIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9k
ZW1vcy93ZWJncHUvYmFieWxvbi9vbmVIZWxtZXRXZWJHUFUuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjRm
ZGJhYzljYjdmY2FlYzMzZmI1YzA1ZDAwMzdiOWExNTY0YmVhCi0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvd2Via2l0Lm9yZy9kZW1vcy93ZWJncHUvYmFieWxvbi9vbmVIZWxtZXRXZWJHUFUu
aHRtbApAQCAtMCwwICsxLDIwNCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbCB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisKKzxoZWFkPgorICAgIDx0aXRsZT5PbmUgSGVs
bWV0IFdlYkdQVTwvdGl0bGU+CisKKyAgICA8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2ds
ZWFwaXMuY29tL2Nzcz9mYW1pbHk9T3BlbitTYW5zIiByZWw9InN0eWxlc2hlZXQiPgorICAgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly91c2UudHlwZWtpdC5uZXQvY3RhNHhz
Yi5jc3MiPgorCisgICAgPHN0eWxlPgorICAgICAgICBodG1sLAorICAgICAgICBib2R5IHsKKyAg
ICAgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICAgICAgcGFkZGluZzogMDsKKyAgICAgICAg
ICAgIG1hcmdpbjogMDsKKyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyYTIzNDI7Cisg
ICAgICAgICAgICBjb2xvcjogI2ZmZmZmZjsKKyAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAiYWN1
bWluLXBybyI7CisgICAgICAgIH0KKworICAgICAgICAjcmVuZGVyQ2FudmFzIHsKKyAgICAgICAg
ICAgIHdpZHRoOiAxMDI0cHg7CisgICAgICAgICAgICBoZWlnaHQ6IDc2OHB4OworICAgICAgICAg
ICAgZGlzcGxheTogYmxvY2s7CisgICAgICAgICAgICBmb250LXNpemU6IDA7CisgICAgICAgICAg
ICBtYXJnaW46IGF1dG87CisgICAgICAgICAgICBib3JkZXI6bm9uZSAhaW1wb3J0YW50OworICAg
ICAgICAgICAgb3V0bGluZTpub25lICFpbXBvcnRhbnQ7CisgICAgICAgIH0KKworICAgICAgICAu
Y29udGFpbmVyIHsKKyAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CisgICAgICAgICAgICBncmlk
LXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMTcwcHggNzU0cHggMTAwcHggYXV0bzsKKyAgICAgICAg
ICAgIGdyaWQtdGVtcGxhdGUtcm93czogNjBweCA3NjhweDsKKyAgICAgICAgfQorCisgICAgICAg
IC5oZWFkZXJMb2dvIHsKKyAgICAgICAgICAgIGdyaWQtY29sdW1uLXN0YXJ0OiAyOworICAgICAg
ICAgICAgZ3JpZC1jb2x1bW4tZW5kOiAyOworICAgICAgICAgICAgZ3JpZC1yb3ctc3RhcnQ6IDE7
CisgICAgICAgICAgICBncmlkLXJvdy1lbmQ6IDE7CisgICAgICAgICAgICBiYWNrZ3JvdW5kLWNv
bG9yOiAjMjAxOTM2OworICAgICAgICB9CisKKyAgICAgICAgLmhlYWRlckxvZ28gPiBhID4gaW1n
IHsKKyAgICAgICAgICAgIHdpZHRoOiBhdXRvOworICAgICAgICAgICAgaGVpZ2h0OiA2MHB4Owor
ICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CisgICAgICAgIH0KKworICAgICAgICAuaGVh
ZGVyVGV4dCB7CisgICAgICAgICAgICBncmlkLWNvbHVtbi1zdGFydDogMzsKKyAgICAgICAgICAg
IGdyaWQtY29sdW1uLWVuZDogMzsKKyAgICAgICAgICAgIGdyaWQtcm93LXN0YXJ0OiAxOworICAg
ICAgICAgICAgZ3JpZC1yb3ctZW5kOiAxOworICAgICAgICAgICAgZm9udC1zaXplOiAzNXB4Owor
ICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7CisgICAgICAgICAgICB0ZXh0LWFsaWduOiBj
ZW50ZXI7CisgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjAxOTM2OworICAgICAgICAg
ICAgZm9udC1mYW1pbHk6ICJhY3VtaW4tcHJvLWV4dHJhLWNvbmRlbnNlZCI7CisgICAgICAgIH0K
KworICAgICAgICAuaGVhZGVyRlBTIHsKKyAgICAgICAgICAgIGdyaWQtY29sdW1uLXN0YXJ0OiA0
OworICAgICAgICAgICAgZ3JpZC1jb2x1bW4tZW5kOiA0OworICAgICAgICAgICAgZ3JpZC1yb3ct
c3RhcnQ6IDE7CisgICAgICAgICAgICBncmlkLXJvdy1lbmQ6IDE7CisgICAgICAgICAgICBmb250
LXNpemU6IDE1cHg7CisgICAgICAgICAgICBsaW5lLWhlaWdodDogNjBweDsKKyAgICAgICAgICAg
IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNCQjQ2
NEI7CisgICAgICAgIH0KKworICAgICAgICAuY29udGVudCB7CisgICAgICAgICAgICBncmlkLWNv
bHVtbi1zdGFydDogMjsKKyAgICAgICAgICAgIGdyaWQtY29sdW1uLWVuZDogNDsKKyAgICAgICAg
ICAgIGdyaWQtcm93LXN0YXJ0OiAyOworICAgICAgICAgICAgZ3JpZC1yb3ctZW5kOiAyOworICAg
ICAgICB9CisKKyAgICAgICAgYSB7CisgICAgICAgICAgICBjb2xvcjogI0ZGRkZGRjsKKyAgICAg
ICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5zZXQ7CisgICAgICAgIH0KKyAgICAgICAgYTpob3Zl
ciB7CisgICAgICAgICAgICBjb2xvcjogI0ZGRkZGRjsKKyAgICAgICAgfQorICAgICAgICBhOnZp
c2l0ZWQgeworICAgICAgICAgICAgY29sb3I6ICNGRkZGRkY7CisgICAgICAgIH0KKyAgICAgICAg
YTpmb2N1cyB7CisgICAgICAgICAgICBjb2xvcjogI0ZGRkZGRjsKKyAgICAgICAgfQorICAgIDwv
c3R5bGU+CisKKyAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vcGVwLzAu
NC4yL3BlcC5taW4uanMiPjwvc2NyaXB0PgorCisgICAgPHNjcmlwdCBzcmM9ImJhYnlsb25XZWJH
cHUubWF4LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9wcmV2aWV3LmJh
Ynlsb25qcy5jb20vbG9hZGVycy9iYWJ5bG9uanMubG9hZGVycy5taW4uanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICA8
ZGl2IGNsYXNzPSJoZWFkZXJMb2dvIj4KKyAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZG9j
LmJhYnlsb25qcy5jb20vZXh0ZW5zaW9ucy9XZWJHUFUiPgorICAgICAgICAgICAgICAgIDxpbWcg
c3JjPSJsb2dvLnN2ZyI+PC9pbWc+CisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvZGl2Pgor
ICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXJUZXh0Ij4KKyAgICAgICAgICAgIDxhIGhyZWY9Imh0
dHBzOi8vZG9jLmJhYnlsb25qcy5jb20vZXh0ZW5zaW9ucy9XZWJHUFUiPgorICAgICAgICAgICAg
ICAgIFdlYkdQVSBFeHBlcmltZW50CisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvZGl2Pgor
ICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXJGUFMiIGlkPSJmcHMiPjA8L2Rpdj4KKyAgICAgICAg
PGRpdiBjbGFzcz0iY29udGVudCI+CisgICAgICAgICAgICA8Y2FudmFzIGlkPSJyZW5kZXJDYW52
YXMiIHdpZHRoPSIxMDI0IiBoZWlnaHQ9Ijc2OCI+PC9jYW52YXM+CisgICAgICAgIDwvZGl2Pgor
ICAgIDxkaXY+CisgICAgPHNjcmlwdCBzcmM9Im9uZUhlbG1ldFdlYkdQVUdMU0xTaGFkZXJzLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ib25lSGVsbWV0V2ViR1BVV1NMU2hhZGVycy5q
cyI+PC9zY3JpcHQ+CisKKyAgICA8c2NyaXB0PgorCisgICAgY29uc3QgU2hhZGVyS2luZCA9IHsK
KyAgICAgICAgdmVydGV4OiAiVmVydGV4IiwKKyAgICAgICAgZnJhZ21lbnQ6ICJGcmFnbWVudCIs
CisgICAgICAgIGNvbXB1dGU6ICJDb21wdXRlIgorICAgIH07CisKKyAgICBjbGFzcyBDb21waWxl
UmVzdWx0IHsKKyAgICAgICAgY29uc3RydWN0b3IocmVzdWx0KSB7CisgICAgICAgICAgICB0aGlz
LnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIEdldEVycm9yTWVzc2FnZSgp
IHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgR2V0Qmlu
YXJ5KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0OworICAgICAgICB9CisgICAg
fQorCisgICAgY2xhc3MgQ29tcGlsZU9wdGlvbnMgeworICAgICAgICBjb25zdHJ1Y3RvcigpIHsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIENvbXBpbGVyIHsKKyAgICAgICAgY29uc3Ry
dWN0b3IoKSB7CisgICAgICAgIH0KKworICAgICAgICBDb21waWxlR2xzbFRvU3B2KHNvdXJjZSwg
a2luZCwgc29tZXRoaW5nLCBlbnRyeVBvaW50TmFtZSwgb3B0aW9ucykgeworICAgICAgICAgICAg
bGV0IHdzbFNvdXJjZTsKKyAgICAgICAgICAgIHN3aXRjaCAoc291cmNlKSB7CisgICAgICAgICAg
ICBjYXNlIHZlcnRleFNoYWRlckdMU0wxOgorICAgICAgICAgICAgICAgIHdzbFNvdXJjZSA9IHZl
cnRleFNoYWRlcldTTDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IGZyYWdtZW50U2hhZGVyR0xTTDE6CisgICAgICAgICAgICAgICAgd3NsU291cmNlID0gZnJhZ21l
bnRTaGFkZXJXU0wxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSB2
ZXJ0ZXhTaGFkZXJHTFNMMjoKKyAgICAgICAgICAgICAgICB3c2xTb3VyY2UgPSB2ZXJ0ZXhTaGFk
ZXJXU0wyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBmcmFnbWVu
dFNoYWRlckdMU0wyOgorICAgICAgICAgICAgICAgIHdzbFNvdXJjZSA9IGZyYWdtZW50U2hhZGVy
V1NMMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHNoYWRlciEiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBuZXcgQ29tcGlsZVJlc3VsdCh3c2xTb3VyY2Up
OworICAgICAgICB9CisgICAgfQorCisgICAgbGV0IFNoYWRlcmMgPSB7Q29tcGlsZXIsIENvbXBp
bGVPcHRpb25zLCBzaGFkZXJfa2luZDogU2hhZGVyS2luZH07CisKKyAgICAoYXN5bmMgZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICghbmF2aWdhdG9yLmdwdSkgeworICAgICAgICAgICAgYWxlcnQo
IldlYiBHUFUgaXMgbm90IHN1cHBvcnRlZCBvbiB5b3VyIHBsYXRmb3JtIHNvIGZhci4iKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgicmVuZGVyQ2FudmFzIik7CisgICAgICAgIGNvbnN0IGRpdkZw
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmcHMiKTsKKworICAgICAgICBjb25zdCBlbmdp
bmUgPSBuZXcgQkFCWUxPTi5XZWJHUFVFbmdpbmUoY2FudmFzLCB7YW50aWFsaWFzaW5nOiBmYWxz
ZX0pOworICAgICAgICBhd2FpdCBlbmdpbmUuaW5pdEFzeW5jKHtzaGFkZXJjOiBTaGFkZXJjfSk7
CisKKyAgICAgICAgY29uc3Qgc2NlbmUgPSBuZXcgQkFCWUxPTi5TY2VuZShlbmdpbmUpOworICAg
ICAgICBzY2VuZS5lbnZpcm9ubWVudFRleHR1cmUgPSBuZXcgQkFCWUxPTi5DdWJlVGV4dHVyZSgi
aHR0cHM6Ly9hc3NldHMuYmFieWxvbmpzLmNvbS9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRTcGVj
dWxhci5lbnYiLCBzY2VuZSk7CisKKyAgICAgICAgYXdhaXQgQkFCWUxPTi5TY2VuZUxvYWRlci5J
bXBvcnRNZXNoQXN5bmMoIiIsICJodHRwczovL3d3dy5iYWJ5bG9uanMuY29tL0Fzc2V0cy9EYW1h
Z2VkSGVsbWV0L2dsVEYvIiwgImRhbWFnZWRoZWxtZXQuZ2x0ZiIsIHNjZW5lKTsKKworICAgICAg
ICBzY2VuZS5jcmVhdGVEZWZhdWx0Q2FtZXJhKHRydWUsIHRydWUsIHRydWUpOworICAgICAgICBz
Y2VuZS5jcmVhdGVEZWZhdWx0U2t5Ym94KHNjZW5lLmVudmlyb25tZW50VGV4dHVyZSwgdHJ1ZSwg
dW5kZWZpbmVkLCAwLjMpOworCisgICAgICAgIGVuZ2luZS5ydW5SZW5kZXJMb29wKCgpID0+IHsK
KyAgICAgICAgICAgIHNjZW5lLnJlbmRlcigpOworICAgICAgICAgICAgZGl2RnBzLmlubmVySFRN
TCA9IGVuZ2luZS5nZXRGcHMoKS50b0ZpeGVkKCkgKyAiIGZwcyI7CisgICAgICAgIH0pOworICAg
IH0pKCk7CisgICAgPC9zY3JpcHQ+Cis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vb25lSGVsbWV0V2ViR1BVR0xT
TFNoYWRlcnMuanMgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9uL29u
ZUhlbG1ldFdlYkdQVUdMU0xTaGFkZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1Mjc3MWJjMmJhNzM4ODc4
YTkxMGE0ZTg1OGE0MzA4MDA4NGRjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy93ZWJr
aXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9uL29uZUhlbG1ldFdlYkdQVUdMU0xTaGFkZXJzLmpz
CkBAIC0wLDAgKzEsNCBAQAorY29uc3QgdmVydGV4U2hhZGVyR0xTTDEgPSBbMzUsIDExOCwgMTAx
LCAxMTQsIDExNSwgMTA1LCAxMTEsIDExMCwgMzIsIDUyLCA1MywgNDgsIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgwLCA2NiwgODIsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA2NSwgNzMsIDc4LCA4NSwgODYsIDQ5LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4NSwgODYsIDQ5LCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzYsIDY2LCA2OSwgNjgsIDc5
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzYsIDY2LCA2
OSwgNjgsIDc5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OSwgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc3LCA2NiwgNzMsIDY5LCA3
OCwgODQsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3Nywg
NjYsIDczLCA2OSwgNzgsIDg0LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0
OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc3LCA2Niwg
NzMsIDY5LCA3OCwgODQsIDczLCA3OCwgNzEsIDgyLCA2NSwgODksIDgzLCA2NywgNjUsIDc2LCA2
OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzksIDgwLCA2NSwg
NjcsIDczLCA4NCwgODksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzYsIDgwLCA3Miwg
NjUsIDg0LCA2OSwgODMsIDg0LCA4NiwgNjUsIDc2LCA4NSwgNjksIDMyLCA0OCwgNDYsIDUyLCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgODAsIDY5LCA2Nywg
ODUsIDc2LCA2NSwgODIsIDc5LCA4NiwgNjksIDgyLCA2NSwgNzYsIDgwLCA3MiwgNjUsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2NSwgNjgsIDczLCA2NSwg
NzgsIDY3LCA2OSwgNzksIDg2LCA2OSwgODIsIDY1LCA3NiwgODAsIDcyLCA2NSwgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjksIDc3LCA3MywgODMsIDgzLCA3Mywg
ODYsIDY5LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2OSwgNzcs
IDczLCA4MywgODMsIDczLCA4NiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4Niwg
MzIsIDQ5LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjks
IDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDg2LCA3MywgODQsIDg5LCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMs
IDg2LCA3MywgODQsIDg5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OSwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzYsIDc5LCA2OCwgNjYs
IDY1LCA4MywgNjksIDY4LCA3NywgNzMsIDY3LCA4MiwgNzksIDgzLCA3MCwgODUsIDgyLCA2NSwg
NjcsIDY5LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgNzMs
IDY3LCA4MiwgNzksIDgzLCA4NSwgODIsIDcwLCA2NSwgNjcsIDY5LCA3NywgNjUsIDgwLCA2OCwg
NzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNzcsIDY5LCA4NCwgNjUsIDc2LCA3NiwgNzMsIDY3LCA4Nywg
NzksIDgyLCA3NSwgNzAsIDc2LCA3OSwgODcsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgNzgsIDY5LCA4MywgODMsIDgzLCA4NCwg
NzksIDgyLCA2OSwgNzMsIDc4LCA3NywgNjksIDg0LCA2NSwgNzYsIDc3LCA2NSwgODAsIDcxLCA4
MiwgNjksIDY5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
NzcsIDY5LCA4NCwgNjUsIDc2LCA3NiwgNzgsIDY5LCA4MywgODMsIDgzLCA4NCwgNzksIDgyLCA2
OSwgNzMsIDc4LCA3NywgNjksIDg0LCA2NSwgNzYsIDc3LCA2NSwgODAsIDY2LCA3NiwgODUsIDY5
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2OSwgNzgsIDg2LCA3
MywgODIsIDc5LCA3OCwgNzcsIDY5LCA3OCwgODQsIDY2LCA4MiwgNjgsIDcwLCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OCwgNzksIDgyLCA3NywgNjUsIDc2LCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NiwgODUsIDc3LCA4MCwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjYsIDg1LCA3NywgODAs
IDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ5LCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OCwgNzksIDgyLCA3NywgNjUsIDc2LCA4OCwgODks
IDgzLCA2NywgNjUsIDc2LCA2OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgNzYsIDczLCA3MSwgNzIsIDg0LCA3NywgNjUsIDgwLCA2OCwgNzMsIDgyLCA2OSwgNjcs
IDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0
LCA3MywgNzksIDc4LCA3NywgNjUsIDgwLCA5NSwgNTEsIDY4LCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5
LCA3OCwgNzcsIDY1LCA4MCwgOTUsIDY3LCA4NSwgNjYsIDczLCA2NywgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODUsIDgzLCA2OSwgODMsIDgwLCA3MiwgNjksIDgy
LCA3MywgNjcsIDY1LCA3NiwgNzAsIDgyLCA3OSwgNzcsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcs
IDg0LCA3MywgNzksIDc4LCA3NywgNjUsIDgwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUsIDc2LCA5NSwgNzIs
IDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDY3LCA4MywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgODIsIDcxLCA2NiwgNjgsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcs
IDg0LCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA4MiwgNjUsIDY4LCA3MywgNjUsIDc4LCA2NywgNjksIDc5LCA2NywgNjcsIDc2LCA4NSwgODMs
IDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDcy
LCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA3OSwgNjcsIDY3LCA3NiwgODUsIDgzLCA3MywgNzks
IDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OCwgODUsIDc3
LCA5NSwgNjYsIDc5LCA3OCwgNjksIDk1LCA3MywgNzgsIDcwLCA3NiwgODUsIDY5LCA3OCwgNjcs
IDY5LCA4MiwgODMsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgNjYsIDExMSwgMTEwLCAxMDEsIDExNSwgODAsIDEwMSwgMTE0LCA3NywgMTAxLCAxMTUs
IDEwNCwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3
OCwgODUsIDc3LCA5NSwgNzcsIDc5LCA4MiwgODAsIDcyLCA5NSwgNzMsIDc4LCA3MCwgNzYsIDg1
LCA2OSwgNzgsIDY3LCA2OSwgODIsIDgzLCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDg2LCA3MywgNzEsIDc4LCA2OSwgODQsIDg0LCA2OSwgNjYsIDc2
LCA2OSwgNzgsIDY4LCA3NywgNzksIDY4LCA2OSwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYs
IDg5LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNjUsIDc3
LCA4MCwgNzYsIDY5LCA4MiwgNTEsIDY4LCA3MSwgODIsIDY5LCA2OSwgNzgsIDY4LCA2OSwgODAs
IDg0LCA3MiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDY1
LCA3NywgODAsIDc2LCA2OSwgODIsIDUxLCA2OCwgNjYsIDcxLCA4MiwgNzcsIDY1LCA4MCwgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODUsIDgzLCA2OSwgODAsIDcy
LCA4OSwgODMsIDczLCA2NywgNjUsIDc2LCA3NiwgNzMsIDcxLCA3MiwgODQsIDcwLCA2NSwgNzYs
IDc2LCA3OSwgNzAsIDcwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA4MywgODAsIDY5LCA2NywgODUsIDc2LCA2NSwgODIsIDY1LCA2NSwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDc2LCA2OSwgNjUsIDgyLCA2NywgNzksIDY1
LCA4NCwgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcs
IDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgNjcsIDc2LCA2OSwgNjUsIDgyLCA2NywgNzksIDY1LCA4NCwgOTUsIDY2LCA4NSwgNzcs
IDgwLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDc2LCA2OSwgNjUsIDgyLCA2NywgNzks
IDY1LCA4NCwgOTUsIDg0LCA3MywgNzgsIDg0LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4Miwg
NjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzgsIDczLCA4MywgNzksIDg0LCA4Miwg
NzksIDgwLCA3MywgNjcsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4
MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDY2LCA4MiwgNjgsIDcwLCA5NSwgODYsIDk1LCA3MiwgNjksIDczLCA3
MSwgNzIsIDg0LCA5NSwgNjcsIDc5LCA4MiwgODIsIDY5LCA3NiwgNjUsIDg0LCA2OSwgNjgsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA4MywgOTUsIDY2LCA4
MiwgNjgsIDcwLCA5NSwgNjksIDc4LCA2OSwgODIsIDcxLCA4OSwgOTUsIDY3LCA3OSwgNzgsIDgz
LCA2OSwgODIsIDg2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA3MiwgNjksIDY5LCA3OCwgOTUsIDg0LCA2OSwgODgsIDg0
LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDgzLCA5NSwgODQsIDcy
LCA3MywgNjcsIDc1LCA3OCwgNjksIDgzLCA4MywgNjUsIDc4LCA2OCwgNzcsIDY1LCA4MywgNzUs
IDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwg
ODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDY4LCA2OSwgNjYsIDg1LCA3MSwgNzcsIDc5LCA2OCwgNjksIDMyLCA0OCwgMTAsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA3MiwgNjUsIDY4LCA2OSwgODIs
IDk1LCA3OCwgNjUsIDc3LCA2OSwgMzIsIDExOCwgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDU4
LCAxMTIsIDk4LCAxMTQsIDEwLCAxMTIsIDExNCwgMTAxLCA5OSwgMTA1LCAxMTUsIDEwNSwgMTEx
LCAxMTAsIDMyLCAxMDQsIDEwNSwgMTAzLCAxMDQsIDExMiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwg
MTE2LCAxMDAsIDQ5LCA1MiwgNDgsIDQ0LCA5OSwgMTExLCAxMDgsIDExNywgMTA5LCAxMTAsIDk1
LCAxMDksIDk3LCAxMDYsIDExMSwgMTE0LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTEx
LCAxMTQsIDEwOSwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwg
MTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDgsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAs
IDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEw
MiwgMTExLCAxMTQsIDEwOSwgMzIsIDgzLCA5OSwgMTAxLCAxMTAsIDEwMSwgMTMsIDEwLCAxMjMs
IDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgODAsIDEx
NCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTA5
LCA5NywgMTE2LCA1MiwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNTksIDEzLCAxMCwgMTI1LCA1
OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2
LCAzMiwgNjEsIDMyLCA0OSwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEw
MywgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwg
MTA5LCAzMiwgNzcsIDk3LCAxMTYsIDEwMSwgMTE0LCAxMDUsIDk3LCAxMDgsIDEzLCAxMCwgMTIz
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEw
MCwgMTExLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUyLCAzMiwgMTE4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3MywgMTEwLCAx
MDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA3OSwg
MTEyLCA5NywgOTksIDEwNSwgMTE2LCAxMjEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY5LCAxMDksIDEwNSwgMTE1LCAxMTUs
IDEwNSwgMTE4LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwOSwgOTcsIDEx
MiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwg
MTE2LCAxMjEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTAsIDMyLCAxMTgsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIs
IDk3LCA5OSwgMTAxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA3MywgMTEwLCAx
MDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3MywgMTEwLCAxMDIs
IDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgMTExLCAxMTUsIDEw
NSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4Mywg
MTA1LCAxMjIsIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjYs
IDExNywgMTA5LCAxMTIsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwg
OTcsIDExNiwgNTIsIDMyLCA5NywgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5NywgMTA5
LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTks
IDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExMSwgMTEyLCA5NywgOTksIDEwNSwgMTE2
LCAxMjEsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAx
MTYsIDUyLCAzMiwgMTAxLCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDc3LCA5
NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwOSwgOTcsIDExMiwgNzcsIDk3LCAxMTYsIDExNCwg
MTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAy
LCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDc3LCA5NywgMTE2
LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTA5LCAx
MDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4MywgOTcs
IDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTks
IDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk4LCAxMTcsIDEwOSwgMTEyLCA3NywgOTcs
IDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEx
OCwgODQsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgODMsIDExMiwgOTcsIDk5LCAxMDEs
IDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIs
IDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcs
IDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3
LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAx
MTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwg
MTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2
LCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQsIDEx
MSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDEx
NSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExMiwgMTExLCAxMDUs
IDExMCwgMTE2LCA4MywgMTA1LCAxMjIsIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MiwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEw
NSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTgsIDY5LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEs
IDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMy
LCAxMTgsIDY5LCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDEx
MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjUsIDEwOSwgOTgsIDEw
NSwgMTAxLCAxMTAsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjgsIDEwMSwgOTgsIDExNywgMTAzLCA3NywgMTExLCAx
MDAsIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwg
MTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3
LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDgyLCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5
NywgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYs
IDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA3NywgOTcs
IDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEx
OCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA2NiwgMTE3LCAxMDks
IDExMiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4NCwg
OTcsIDExMCwgMTAzLCAxMDEsIDExMCwgMTE2LCA4MywgMTEyLCA5NywgOTksIDEwMSwgODAsIDk3
LCAxMTQsIDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk5
LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgNjYsIDExNywgMTA5LCAxMTIs
IDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUy
LCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0LCAx
MDUsIDExMCwgMTE2LCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5
NywgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwgMTE2LCA2OCwgMTA1LCAxMTUsIDEx
NiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEx
OCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4NCwgMTA1LCAxMTAs
IDExNiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1
MiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODQsIDEwNSwg
MTEwLCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE4LCA2NSwgMTEwLCAxMDUsIDExNSwgMTExLCAxMTYsIDExNCwgMTEx
LCAxMTIsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjUsIDEx
MCwgMTA1LCAxMTUsIDExMSwgMTE2LCAxMTQsIDExMSwgMTEyLCAxMjEsIDczLCAxMTAsIDEwMiwg
MTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5NywgMTEwLCAxMDUs
IDExNSwgMTExLCAxMTYsIDExNCwgMTExLCAxMTIsIDEyMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1
LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDgzLCAxMDQsIDEw
MSwgMTAxLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTAsIDMyLCAxMTgsIDgzLCAxMDQsIDEwMSwgMTAxLCAxMTAsIDczLCAxMTAsIDEwMiwg
MTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTUsIDEwNCwgMTAx
LCAxMDEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3
LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUyLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwg
NTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwg
MzIsIDExOCwgODQsIDEwNCwgMTA1LCA5OSwgMTA3LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDczLCAx
MTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTYs
IDEwNCwgMTA1LCA5OSwgMTA3LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4NCwgMTA0
LCAxMDUsIDk5LCAxMDcsIDExMCwgMTAxLCAxMTUsIDExNSwgODAsIDk3LCAxMTQsIDk3LCAxMDks
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY4LCAxMDUsIDEwMiwgMTAy
LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDg0LCAxMDUsIDEx
MCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE4LCA4MywgMTE3LCA5OCwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAx
LCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwg
OTksIDk3LCAxMDgsIDc2LCA0OCwgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwg
OTUsIDQ5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAx
MDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDksIDQ4LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5
LCA5NywgMTA4LCA3NiwgNDksIDQ5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDk1
LCA1MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0
LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA5NSwgNDksIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwg
OTksIDk3LCAxMDgsIDc2LCA1MCwgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwg
NDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwg
MTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgNTAsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3
LCAxMDgsIDg4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEy
LCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OSwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcs
IDEwOCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIs
IDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg4LCA4OCwgOTUsIDkwLCA5MCwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDEx
NCwgMTA1LCA5OSwgOTcsIDEwOCwgODksIDg5LCA5NSwgOTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5
NywgMTA4LCA5MCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgz
LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg4LCA4OSwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1
LCA5OSwgOTcsIDEwOCwgODksIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA5MCwgODgsIDU5
LCAxMywgMTAsIDEyNSwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0
MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDksIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAx
MDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ5LCA0MSwgMzIsIDExNywgMTEwLCAxMDUs
IDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDc3LCAxMDEsIDExNSwgMTA0LCAxMywgMTAsIDEyMywg
MTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDU5
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDEwNSwgMTE1LCAxMDUs
IDk4LCAxMDUsIDEwOCwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3
OSwgNzcsIDk1LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4LCA5NSwgNjYsIDY5LCA3MSwgNzMsIDc4
LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwg
OTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTA1LCAxMTAs
IDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEw
OCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwgNDksIDQxLCAz
MiwgMTA1LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5
LCA5NywgMTA4LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAx
MDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDUwLCA0MSwg
MzIsIDEwNSwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNywgMTE4LCA1OSwgMTMs
IDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDgwLCA3MywgNjEsIDUxLCA0NiwgNDksIDUyLCA0OSwgNTMsIDU3LCA1MCwgNTQsIDUzLCA1
MSwgNTMsIDU2LCA1NywgNTUsIDU3LCA1MSwgNTAsIDUxLCA1NiwgNTIsIDU0LCA1MCwgNTQsIDUy
LCA1MSwgNTEsIDU2LCA1MSwgNTAsIDU1LCA1NywgNTMsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDEx
MCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzYsIDEwNSwgMTEw
LCAxMDEsIDk3LCAxMTQsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA4MCwgMTExLCAxMTks
IDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDYxLCA1MCwgNDYsIDUwLCA1
OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEw
MSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA2
MSwgNDksIDQ2LCA0OCwgNDcsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5
OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAx
MTQsIDExMSwgMTIwLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDc2LCAxMTcsIDEwOSwgMTA1LCAxMTAsIDk3LCAxMTAsIDk5LCAx
MDEsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAx
MjAsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDgsIDQ2LCA1MCwgNDksIDUwLCA1NCwgNDQs
IDQ4LCA0NiwgNTUsIDQ5LCA1MywgNTAsIDQ0LCA0OCwgNDYsIDQ4LCA1NSwgNTAsIDUwLCA0MSwg
NTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNjEsIDQ4LCA0Niwg
NDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDksIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAx
LCA0MCwgMTIwLCA0MSwgMzIsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgNDAsIDEyMCwgNDQsIDQ4
LCA0NiwgNDgsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDk3LCA5OCwgMTE1LCA2OSwgMTEyLCAxMTUsIDQwLCAxMjAsIDQx
LCAzMiwgOTcsIDk4LCAxMTUsIDQwLCAxMjAsIDQxLCA0MywgNjksIDExMiwgMTE1LCAxMDUsIDEw
OCwgMTExLCAxMTAsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCAxMDksIDk3LCAxMjAsIDY5LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCAxMDksIDk3LCAx
MjAsIDQwLCAxMjAsIDQ0LCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNDEsIDEz
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMTUsIDk3LCAxMTYs
IDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCA5
OSwgMTA4LCA5NywgMTA5LCAxMTIsIDQwLCAxMjAsIDQ0LCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4
LCAxMTEsIDExMCwgNDQsIDQ5LCA0NiwgNDgsIDQxLCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEs
IDMyLCAxMTYsIDExNCwgOTcsIDExMCwgMTE1LCAxMTIsIDExMSwgMTE1LCAxMDEsIDc3LCA5Nywg
MTE2LCA1MSwgNDAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMDUsIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwg
NDgsIDkzLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCA0OSwgNjEsIDEw
NSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgNTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwg
NTEsIDMyLCAxMTEsIDExNywgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNjEsIDEw
OSwgOTcsIDExNiwgNTEsIDQwLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4
LCA0NiwgMTIwLCA0NCwgMTA1LCA0OSwgNDYsIDEyMCwgNDQsIDEwNSwgNTAsIDQ2LCAxMjAsIDQx
LCA0NCwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMSwgNDQs
IDEwNSwgNDksIDQ2LCAxMjEsIDQ0LCAxMDUsIDUwLCA0NiwgMTIxLCA0MSwgNDQsIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgNDAsIDEwNSwgNDgsIDQ2LCAxMjIsIDQ0LCAxMDUsIDQ5LCA0Niwg
MTIyLCA0NCwgMTA1LCA1MCwgNDYsIDEyMiwgNDEsIDEzLCAxMCwgNDEsIDU5LCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTEsIDExNywgMTE2LCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwOSwgOTcsIDExNiwg
NTEsIDMyLCAxMDUsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE1LCAxMDEsIDc3LCA5NywgMTE2LCA1
MSwgNDAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwg
MTA1LCAxMjAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCA5NywgNDgsIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5
MSwgNDgsIDkzLCA5MSwgNDgsIDkzLCA0NCwgOTcsIDQ4LCA0OSwgNjEsIDEwNSwgMTEwLCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA0
OCwgNTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwg
OTMsIDkxLCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5
NywgNDksIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwg
NDksIDkzLCA5MSwgNDgsIDkzLCA0NCwgOTcsIDQ5LCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcs
IDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA0OSwg
NTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMs
IDkxLCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5Nywg
NTAsIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAs
IDkzLCA5MSwgNDgsIDkzLCA0NCwgOTcsIDUwLCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA1MCwgNTAs
IDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkx
LCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OCwgNDgs
IDQ5LCA2MSwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OSwgNDksIDQ1LCA5NywgNDksIDUwLCA0Miwg
OTcsIDUwLCA0OSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk4LCA0
OSwgNDksIDYxLCA0NSwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OSwgNDgsIDQzLCA5NywgNDksIDUw
LCA0MiwgOTcsIDUwLCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDk4LCA1MCwgNDksIDYxLCA5NywgNTAsIDQ5LCA0MiwgOTcsIDQ5LCA0OCwgNDUsIDk3LCA0OSwg
NDksIDQyLCA5NywgNTAsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTAwLCAxMDEsIDExNiwgNjEsIDk3LCA0OCwgNDgsIDQyLCA5OCwgNDgsIDQ5LCA0MywgOTcs
IDQ4LCA0OSwgNDIsIDk4LCA0OSwgNDksIDQzLCA5NywgNDgsIDUwLCA0MiwgOTgsIDUwLCA0OSwg
NTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwOSwgOTcsIDEx
NiwgNTEsIDQwLCA5OCwgNDgsIDQ5LCA0NCwgNDAsIDQ1LCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ4
LCA0OSwgNDMsIDk3LCA0OCwgNTAsIDQyLCA5NywgNTAsIDQ5LCA0MSwgNDQsIDQwLCA5NywgNDks
IDUwLCA0MiwgOTcsIDQ4LCA0OSwgNDUsIDk3LCA0OCwgNTAsIDQyLCA5NywgNDksIDQ5LCA0MSwg
NDQsIDEzLCAxMCwgOTgsIDQ5LCA0OSwgNDQsIDQwLCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ4LCA0
OCwgNDUsIDk3LCA0OCwgNTAsIDQyLCA5NywgNTAsIDQ4LCA0MSwgNDQsIDQwLCA0NSwgOTcsIDQ5
LCA1MCwgNDIsIDk3LCA0OCwgNDgsIDQzLCA5NywgNDgsIDUwLCA0MiwgOTcsIDQ5LCA0OCwgNDEs
IDQ0LCAxMywgMTAsIDk4LCA1MCwgNDksIDQ0LCA0MCwgNDUsIDk3LCA1MCwgNDksIDQyLCA5Nywg
NDgsIDQ4LCA0MywgOTcsIDQ4LCA0OSwgNDIsIDk3LCA1MCwgNDgsIDQxLCA0NCwgNDAsIDk3LCA0
OSwgNDksIDQyLCA5NywgNDgsIDQ4LCA0NSwgOTcsIDQ4LCA0OSwgNDIsIDk3LCA0OSwgNDgsIDQx
LCA0MSwgNDcsIDEwMCwgMTAxLCAxMTYsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE2LCAxMTEsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA4Mywg
MTEyLCA5NywgOTksIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgs
IDExMSwgMTE0LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAx
MTQsIDExMCwgMzIsIDExMiwgMTExLCAxMTksIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0
NCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwg
MTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwg
MTEyLCAxMTQsIDExMSwgMTIwLCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE2LCAxMTEsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA4MywgMTEy
LCA5NywgOTksIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDEx
MSwgMTE0LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDExMiwgMTExLCAxMTksIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwg
MTE4LCAxMDEsIDk5LCA1MSwgNDAsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA2OSwgMTEwLCA5OSwg
MTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQs
IDExMSwgMTIwLCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTE1LCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCA0MCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQxLCAxMywgMTAsIDEy
MywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCA5NywgMTA4
LCAxMTcsIDEwMSwgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTEyLCAxMTEsIDExOSwgNTMsIDQw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDEs
IDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgMTEzLCA2
MSwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDU5
LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTUsIDExMywgNDIs
IDExNSwgMTEzLCA0MiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNTksIDEzLCAxMCwgMTI1LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDMsIDEwMSwgMTE2LCA3NiwgMTE3
LCAxMDksIDEwNSwgMTEwLCA5NywgMTEwLCA5OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwg
MTAwLCAxMTEsIDExNiwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCA3NiwgMTE3LCAx
MDksIDEwNSwgMTEwLCA5NywgMTEwLCA5OSwgMTAxLCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEw
MSwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA0MSwgNDQsIDQ4LCA0NiwgNDQsIDQ5LCA0
NiwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTAzLCAxMDEsIDExNiwgODIsIDk3LCAxMTAsIDEwMCwgNDAsIDExOCwgMTAxLCA5OSwgNTAs
IDMyLCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAx
MTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDQwLCAxMTUsIDEw
NSwgMTEwLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDYsIDEy
MCwgMTIxLCAzMiwgNDQsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCA0OSwgNTAsIDQ2LCA1NywgNTYs
IDU3LCA1NiwgNDQsIDU1LCA1NiwgNDYsIDUwLCA1MSwgNTEsIDQxLCA0MSwgNDEsIDQyLCA1Miwg
NTEsIDU1LCA1MywgNTYsIDQ2LCA1MywgNTIsIDUzLCA1MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDExNiwgMTA0LCAx
MDEsIDExNCwgNDAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQ0
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAs
IDk5LCAxMDEsIDY1LCAxMDksIDExMSwgMTE3LCAxMTAsIDExNiwgNDEsIDMyLCAxMjMsIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgOTcsIDExMCwgMTAwLCA2MSwgMTAz
LCAxMDEsIDExNiwgODIsIDk3LCAxMTAsIDEwMCwgNDAsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDEs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTE2LCAx
MDQsIDEwMSwgMTE0LCA2MSwgMTA5LCAxMDUsIDEyMCwgNDAsIDQ1LCAxMTgsIDk3LCAxMTQsIDEw
NSwgOTcsIDExMCwgOTksIDEwMSwgNjUsIDEwOSwgMTExLCAxMTcsIDExMCwgMTE2LCA0NywgNTAs
IDUzLCA1MywgNDYsIDQ4LCA0NCwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEs
IDY1LCAxMDksIDExMSwgMTE3LCAxMTAsIDExNiwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQs
IDExNCwgOTcsIDExMCwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAx
MTQsIDExMCwgMzIsIDEwMCwgMTA1LCAxMTYsIDEwNCwgMTAxLCAxMTQsIDU5LCAxMywgMTAsIDEy
NSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDExNCwgMTAzLCA5OCwgMTAwLCA3NywgOTcsIDEyMCwgODIsIDk3LCAxMTAsIDEw
MywgMTAxLCA2MSwgNTAsIDUzLCA1MywgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUyLCAzMiwgMTE2LCAxMTEsIDgyLCA3MSwgNjYsIDY4LCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDksIDk3LCAxMjAsIDgyLCA3MSwgNjYsIDYxLCAxMDksIDk3
LCAxMjAsIDY5LCAxMTIsIDExNSwgNDAsIDEwOSwgOTcsIDEyMCwgNDAsIDk5LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDQ2LCAxMTQsIDQ0LCAxMDksIDk3LCAxMjAsIDQwLCA5OSwgMTExLCAxMDgsIDEx
MSwgMTE0LCA0NiwgMTAzLCA0NCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDk4LCA0MSwg
NDEsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNjgsIDYxLCAx
MDksIDk3LCAxMjAsIDQwLCAxMTQsIDEwMywgOTgsIDEwMCwgNzcsIDk3LCAxMjAsIDgyLCA5Nywg
MTEwLCAxMDMsIDEwMSwgNDcsIDEwOSwgOTcsIDEyMCwgODIsIDcxLCA2NiwgNDQsIDQ5LCA0Niwg
NDEsIDU5LCAxMywgMTAsIDY4LCA2MSwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTAyLCAx
MDgsIDExMSwgMTExLCAxMTQsIDQwLCA2OCwgNDEsIDQ3LCA1MCwgNTMsIDUzLCA0NiwgNDgsIDQ0
LCA0OCwgNDYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTE0LCAxMDMsIDk4LCA2MSwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAz
LCA5OCwgNDIsIDY4LCA1OSwgMTMsIDEwLCAxMTQsIDEwMywgOTgsIDYxLCAxMTYsIDExMSwgNzEs
IDk3LCAxMDksIDEwOSwgOTcsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA0MCwgMTE0LCAxMDMsIDk4
LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwg
MTAxLCA5OSwgNTIsIDQwLCAxMTQsIDEwMywgOTgsIDQ0LCA2OCwgNDEsIDU5LCAxMywgMTAsIDEy
NSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMTQsIDExMSwgMTA5LCA4Miwg
NzEsIDY2LCA2OCwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwg
NDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywgOTgs
IDYxLCAxMTYsIDExMSwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDgzLCAxMTIsIDk3LCA5
OSwgMTAxLCA0MCwgMTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywgOTgsIDQxLCA1OSwg
MTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDMsIDk4LCAx
MDAsIDQ2LCAxMTQsIDEwMywgOTgsIDQ3LCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDk3LCA1OSwg
MTMsIDEwLCAxMjUsIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4
LCAxMTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMy
LCAxMTEsIDExNywgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODAsIDExMSwg
MTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEy
MSwgMTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDEx
MCwgMzIsIDYxLCAzMiwgNDksIDQxLCAzMiwgMTExLCAxMTcsIDExNiwgMzIsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNTksIDEzLCAx
MCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2
LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA1MCwgNDEsIDMyLCAxMTEsIDExNywgMTE2LCAz
MiwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNzcsIDk3LCAxMDUsIDExMCwgODUsIDg2LCA0
OSwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2Nywg
ODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUsIDY4LCA2
OSwgNzAsIDczLCA3OCwgNzMsIDg0LCA3MywgNzksIDc4LCA4MywgMTMsIDEwLCAxMTgsIDExMSwg
MTA1LCAxMDAsIDMyLCAxMDksIDk3LCAxMDUsIDExMCwgNDAsIDExOCwgMTExLCAxMDUsIDEwMCwg
NDEsIDMyLCAxMjMsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUs
IDc3LCA2NSwgNzMsIDc4LCA5NSwgNjYsIDY5LCA3MSwgNzMsIDc4LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODUs
IDExMiwgMTAwLCA5NywgMTE2LCAxMDEsIDEwMCwgNjEsIDExMiwgMTExLCAxMTUsIDEwNSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEwLCAx
MTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAwLCA2
MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUwLCAzMiwgMTE3LCAxMTgsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAxLCAxMDAsIDYxLCAx
MTcsIDExOCwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUs
IDg1LCA4MCwgNjgsIDY1LCA4NCwgNjksIDk1LCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwg
NzgsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUs
IDgzLCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUsIDg1LCA4MCwg
NjgsIDY1LCA4NCwgNjksIDk1LCA3OCwgNzksIDgyLCA3NywgNjUsIDc2LCAxMywgMTAsIDEwOSwg
OTcsIDExNiwgNTIsIDMyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4NywgMTExLCAxMTQsIDEw
OCwgMTAwLCA2MSwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDU5LCAxMywgMTAsIDEwMywgMTA4
LCA5NSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNjEsIDExOCwgMTA1
LCAxMDEsIDExOSwgODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgNDIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDg3LCAxMTEsIDExNCwgMTA4LCAxMDAsIDQy
LCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAxLCAxMDAsIDQ0LCA0OSwgNDYsIDQ4LCA0
MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwg
MTAwLCA4MCwgMTExLCAxMTUsIDYxLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4NywgMTExLCAx
MTQsIDEwOCwgMTAwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExMiwgMTExLCAxMTUsIDEw
NSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAwLCA0
NCwgNDksIDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDEx
NiwgMTA1LCAxMTEsIDExMCwgODcsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE5LCAxMTEs
IDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDEsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDEx
NiwgNTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCAxMTEsIDExNCwgMTA4
LCAxMDAsIDYxLCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwg
ODcsIDExMSwgMTE0LCAxMDgsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDExOCwgNzgsIDExMSwgMTE0
LCAxMDksIDk3LCAxMDgsIDg3LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUs
IDEyMiwgMTAxLCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgMTExLCAxMTQs
IDEwOCwgMTAwLCA0MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NSwgMTEyLCAxMDAs
IDk3LCAxMTYsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIs
IDExNywgMTE4LCA1MCwgNjEsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCA0OCwgNDYsIDQ0LCA0OCwg
NDYsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDc3LCA5NywgMTA1LCAxMTAsIDg1LCA4NiwgNDksIDYx
LCAxMTcsIDExOCwgODUsIDExMiwgMTAwLCA5NywgMTE2LCAxMDEsIDEwMCwgNTksIDEzLCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzks
IDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUsIDc3LCA2NSwgNzMsIDc4LCA5NSwg
NjksIDc4LCA2OCwgMTMsIDEwLCAxMDMsIDEwOCwgOTUsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDQ2LCAxMjEsIDMyLCA0MiwgNjEsIDMyLCA0NSwgNDksIDQ2LCA1OSwg
MzIsIDEyNV0ubWFwKGMgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjKSkuam9pbigiIik7Citjb25z
dCBmcmFnbWVudFNoYWRlckdMU0wxID0gWzM1LCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwNSwgMTEx
LCAxMTAsIDMyLCA1MiwgNTMsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA4MCwgNjYsIDgyLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA3NywgNjUsIDczLCA3OCwgODUsIDg2LCA0OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgODUsIDg2LCA0OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgNjUsIDc2LCA2NiwgNjksIDY4LCA3OSwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc2LCA2NiwgNjksIDY4LCA3OSwgNjgsIDczLCA4
MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDY1LCA3NywgNjYsIDczLCA2OSwgNzgsIDg0LCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzcsIDY2LCA3MywgNjksIDc4LCA4NCwg
NjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDksIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3NywgNjYsIDczLCA2OSwgNzgsIDg0LCA3Mywg
NzgsIDcxLCA4MiwgNjUsIDg5LCA4MywgNjcsIDY1LCA3NiwgNjksIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc5LCA4MCwgNjUsIDY3LCA3MywgODQsIDg5LCA2OCwg
NzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc2LCA4MCwgNzIsIDY1LCA4NCwgNjksIDgzLCA4NCwg
ODYsIDY1LCA3NiwgODUsIDY5LCAzMiwgNDgsIDQ2LCA1MiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDgwLCA2OSwgNjcsIDg1LCA3NiwgNjUsIDgyLCA3OSwg
ODYsIDY5LCA4MiwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCA4MiwgNjUsIDY4LCA3MywgNjUsIDc4LCA2NywgNjksIDc5LCA4Niwg
NjksIDgyLCA2NSwgNzYsIDgwLCA3MiwgNjUsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDY5LCA3NywgNzMsIDgzLCA4MywgNzMsIDg2LCA2OSwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjksIDc3LCA3MywgODMsIDgzLCA3MywgODYs
IDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OSwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQs
IDczLCA4NiwgNzMsIDg0LCA4OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA4NiwgNzMsIDg0LCA4OSwgNjgs
IDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDksIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc2LCA3OSwgNjgsIDY2LCA2NSwgODMsIDY5LCA2OCwgNzcs
IDczLCA2NywgODIsIDc5LCA4MywgNzAsIDg1LCA4MiwgNjUsIDY3LCA2OSwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzcsIDczLCA2NywgODIsIDc5LCA4MywgODUs
IDgyLCA3MCwgNjUsIDY3LCA2OSwgNzcsIDY1LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwg
ODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDc3LCA2OSwgODQsIDY1LCA3NiwgNzYsIDczLCA2NywgODcsIDc5LCA4MiwgNzUsIDcwLCA3Niwg
NzksIDg3LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNzks
IDg1LCA3MSwgNzIsIDc4LCA2OSwgODMsIDgzLCA4MywgODQsIDc5LCA4MiwgNjksIDczLCA3OCwg
NzcsIDY5LCA4NCwgNjUsIDc2LCA3NywgNjUsIDgwLCA3MSwgODIsIDY5LCA2OSwgNzgsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA2OSwgODQsIDY1LCA3Niwg
NzYsIDc4LCA2OSwgODMsIDgzLCA4MywgODQsIDc5LCA4MiwgNjksIDczLCA3OCwgNzcsIDY5LCA4
NCwgNjUsIDc2LCA3NywgNjUsIDgwLCA2NiwgNzYsIDg1LCA2OSwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjksIDc4LCA4NiwgNzMsIDgyLCA3OSwgNzgsIDc3LCA2
OSwgNzgsIDg0LCA2NiwgODIsIDY4LCA3MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDEx
MCwgMTAxLCAzMiwgNzgsIDc5LCA4MiwgNzcsIDY1LCA3NiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNjYsIDg1LCA3NywgODAsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY2LCA4NSwgNzcsIDgwLCA2OCwgNzMsIDgyLCA2OSwgNjcs
IDg0LCA4NSwgODYsIDMyLCA0OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgNzgsIDc5LCA4MiwgNzcsIDY1LCA3NiwgODgsIDg5LCA4MywgNjcsIDY1LCA3NiwgNjks
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc2LCA3MywgNzEsIDcy
LCA4NCwgNzcsIDY1LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2
LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNzcsIDY1
LCA4MCwgOTUsIDUxLCA2OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDc3LCA2NSwgODAsIDk1
LCA2NywgODUsIDY2LCA3MywgNjcsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEw
MSwgMzIsIDg1LCA4MywgNjksIDgzLCA4MCwgNzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwgNzYsIDcw
LCA4MiwgNzksIDc3LCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNzcs
IDY1LCA4MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDgw
LCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCA3NiwgOTUsIDcyLCA2NSwgODIsIDc3LCA3OSwgNzgs
IDczLCA2NywgODMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgy
LCA3MSwgNjYsIDY4LCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY1LCA2OCwgNzMsIDY1
LCA3OCwgNjcsIDY5LCA3OSwgNjcsIDY3LCA3NiwgODUsIDgzLCA3MywgNzksIDc4LCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3MiwgNzksIDgyLCA3MywgOTAsIDc5
LCA3OCwgNzksIDY3LCA2NywgNzYsIDg1LCA4MywgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDg1LCA3NywgOTUsIDY2LCA3OSwgNzgsIDY5
LCA5NSwgNzMsIDc4LCA3MCwgNzYsIDg1LCA2OSwgNzgsIDY3LCA2OSwgODIsIDgzLCAzMiwgNDgs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY2LCAxMTEsIDExMCwg
MTAxLCAxMTUsIDgwLCAxMDEsIDExNCwgNzcsIDEwMSwgMTE1LCAxMDQsIDMyLCA0OCwgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDg1LCA3NywgOTUsIDc3LCA3
OSwgODIsIDgwLCA3MiwgOTUsIDczLCA3OCwgNzAsIDc2LCA4NSwgNjksIDc4LCA2NywgNjksIDgy
LCA4MywgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4
NiwgNzMsIDcxLCA3OCwgNjksIDg0LCA4NCwgNjksIDY2LCA3NiwgNjksIDc4LCA2OCwgNzcsIDc5
LCA2OCwgNjksIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA4OSwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDY1LCA3NywgODAsIDc2LCA2OSwgODIsIDUx
LCA2OCwgNzEsIDgyLCA2OSwgNjksIDc4LCA2OCwgNjksIDgwLCA4NCwgNzIsIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA2NSwgNzcsIDgwLCA3NiwgNjksIDgy
LCA1MSwgNjgsIDY2LCA3MSwgODIsIDc3LCA2NSwgODAsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDg1LCA4MywgNjksIDgwLCA3MiwgODksIDgzLCA3MywgNjcsIDY1
LCA3NiwgNzYsIDczLCA3MSwgNzIsIDg0LCA3MCwgNjUsIDc2LCA3NiwgNzksIDcwLCA3MCwgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDgwLCA2OSwgNjcsIDg1
LCA3NiwgNjUsIDgyLCA2NSwgNjUsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEw
MSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA4NCwgNjksIDg4
LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1
LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA2NiwgODUsIDc3LCA4MCwgNjgsIDczLCA4MiwgNjks
IDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAs
IDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA4NCwgNzMs
IDc4LCA4NCwgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwg
NjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNjUsIDc4LCA3MywgODMsIDc5LCA4NCwgODIsIDc5LCA4MCwgNzMsIDY3LCA5NSwg
ODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4
NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2Niwg
ODIsIDY4LCA3MCwgOTUsIDg2LCA5NSwgNzIsIDY5LCA3MywgNzEsIDcyLCA4NCwgOTUsIDY3LCA3
OSwgODIsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNjksIDY4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgODMsIDk1LCA2NiwgODIsIDY4LCA3MCwgOTUsIDY5LCA3
OCwgNjksIDgyLCA3MSwgODksIDk1LCA2NywgNzksIDc4LCA4MywgNjksIDgyLCA4NiwgNjUsIDg0
LCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4
MywgNzIsIDY5LCA2OSwgNzgsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDcz
LCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA4MywgOTUsIDg0LCA3MiwgNzMsIDY3LCA3NSwgNzgsIDY5
LCA4MywgODMsIDY1LCA3OCwgNjgsIDc3LCA2NSwgODMsIDc1LCA5NSwgODQsIDY5LCA4OCwgODQs
IDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2OCwgNjksIDY2LCA4NSwgNzEs
IDc3LCA3OSwgNjgsIDY5LCAzMiwgNDgsIDEwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCA4MywgNzIsIDY1LCA2OCwgNjksIDgyLCA5NSwgNzgsIDY1LCA3NywgNjks
IDMyLCAxMDIsIDExNCwgOTcsIDEwMywgMTA5LCAxMDEsIDExMCwgMTE2LCA1OCwgMTEyLCA5OCwg
MTE0LCAxMCwgMTMsIDEwLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjks
IDc4LCA4NCwgOTUsIDY2LCA2OSwgNzEsIDczLCA3OCwgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA5
OSwgMTA1LCAxMTUsIDEwNSwgMTExLCAxMTAsIDMyLCAxMDQsIDEwNSwgMTAzLCAxMDQsIDExMiwg
MzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNzAsIDgyLCA3OSwgNzcsIDc2LCA3MywgNzgsIDY5LCA2NSwg
ODIsIDgzLCA4MCwgNjUsIDY3LCA2OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAx
MTYsIDQwLCAxMTUsIDExNiwgMTAwLCA0OSwgNTIsIDQ4LCA0NCwgOTksIDExMSwgMTA4LCAxMTcs
IDEwOSwgMTEwLCA5NSwgMTA5LCA5NywgMTA2LCAxMTEsIDExNCwgNDEsIDMyLCAxMTcsIDExMCwg
MTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAx
MTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ4LCA0NCwgMzIsIDk4LCAx
MDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAxMTcs
IDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCA4MywgOTksIDEwMSwgMTEwLCAxMDEs
IDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwgMTAx
LCAxMTksIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5
LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDU5LCAx
MywgMTAsIDEyNSwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwg
MTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDksIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAs
IDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEw
MiwgMTExLCAxMTQsIDEwOSwgMzIsIDc3LCA5NywgMTE2LCAxMDEsIDExNCwgMTA1LCA5NywgMTA4
LCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NSwgMTA4
LCA5OCwgMTAxLCAxMDAsIDExMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDEx
NiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwg
MzIsIDExOCwgNzksIDExMiwgOTcsIDk5LCAxMDUsIDExNiwgMTIxLCA3MywgMTEwLCAxMDIsIDEx
MSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2OSwgMTA5LCAx
MDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2
LCAxMDksIDk3LCAxMTIsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTE4LCAxMDUsIDExNiwgMTIxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA3NywgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAx
MTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDEx
NCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwg
MzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODAs
IDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgODMsIDEwNSwgMTIyLCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMTgsIDY2LCAxMTcsIDEwOSwgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwg
MTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTcsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEs
IDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUy
LCAzMiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwg
MTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTEsIDExMiwgOTcs
IDk5LCAxMDUsIDExNiwgMTIxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAx
MCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDEx
OCwgMTAxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5Nywg
MTE2LCA1MiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDksIDk3LCAxMTIsIDc3LCA5
NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwg
MTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIx
LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1
MiwgMzIsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5NywgOTks
IDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNzcsIDk3LCAxMTYsIDExNCwg
MTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5OCwgMTE3LCAxMDks
IDExMiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTAsIDMyLCAxMTgsIDg0LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDgzLCAxMTIs
IDk3LCA5OSwgMTAxLCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMDks
IDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUyLCAzMiwgMTE4LCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNjcsIDExMSwgMTA4
LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNzYsIDEw
NSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwg
MTE1LCAxMDUsIDExNiwgMTIxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4
LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgMTA1
LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAs
IDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MTIsIDExMSwgMTA1LCAxMTAsIDExNiwgODMsIDEwNSwgMTIyLCAxMDEsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2OSwgMTA5LCAxMDUsIDExNSwgMTE1LCAx
MDUsIDExOCwgMTAxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUyLCAzMiwgMTE4LCA2OSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY1
LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY4LCAxMDEsIDk4LCAxMTcsIDEw
MywgNzcsIDExMSwgMTAwLCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAx
MTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODAsIDk3LCAxMTQs
IDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjcs
IDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4MiwgMTAxLCAxMDIsIDExNCwg
OTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDEx
NCwgNjcsIDExMSwgOTcsIDExNiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwg
MTA5LCA5NywgMTE2LCA1MiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcs
IDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwg
NjYsIDExNywgMTA5LCAxMTIsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwg
OTcsIDExNiwgODQsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgODMsIDExMiwgOTcsIDk5
LCAxMDEsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDEx
NiwgNTIsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDY2LCAx
MTcsIDEwOSwgMTEyLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5
NywgMTE2LCA4NCwgMTA1LCAxMTAsIDExNiwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNTks
IDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDEx
NCwgNjcsIDExMSwgOTcsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsIDExNiwgNjgs
IDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwg
ODQsIDEwNSwgMTEwLCAxMTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEw
OSwgOTcsIDExNiwgNTIsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAx
MTYsIDg0LCAxMDUsIDExMCwgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjUsIDExMCwgMTA1LCAxMTUsIDExMSwg
MTE2LCAxMTQsIDExMSwgMTEyLCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMy
LCAxMTgsIDY1LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEsIDExMiwgMTIxLCA3
MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwg
OTcsIDExMCwgMTA1LCAxMTUsIDExMSwgMTE2LCAxMTQsIDExMSwgMTEyLCAxMjEsIDc3LCA5Nywg
MTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4
LCA4MywgMTA0LCAxMDEsIDEwMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4MywgMTA0LCAxMDEsIDEwMSwgMTEwLCA3
MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwg
MTE1LCAxMDQsIDEwMSwgMTAxLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDExNCwgOTcs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcs
IDExNCwgMTAyLCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAx
MDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTAsIDMyLCAxMTgsIDg0LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEsIDEx
NSwgMTE1LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYs
IDUyLCAzMiwgMTE2LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEsIDExNSwgMTE1LCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIs
IDExOCwgODQsIDEwNCwgMTA1LCA5OSwgMTA3LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDgwLCA5Nywg
MTE0LCA5NywgMTA5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2OCwg
MTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY4LCAxMDUsIDExNSwgMTE2
LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4
LCA4NCwgMTA1LCAxMTAsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExNywgOTgsIDgzLCAxMTcsIDExNCwgMTAy
LCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExNiwgMTIx
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEw
MSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDgsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5Nywg
MTA4LCA3NiwgNDksIDk1LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
OCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA0OCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEs
IDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEw
OCwgNzYsIDUwLCA5NSwgNTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgs
IDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgOTUsIDQ5
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEw
MSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5Nywg
MTA4LCA3NiwgNTAsIDQ5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4
MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDUwLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0
LCAxMDUsIDk5LCA5NywgMTA4LCA4OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODksIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQs
IDEwNSwgOTksIDk3LCAxMDgsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OCwgODgsIDk1
LCA5MCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIs
IDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg5LCA4OSwgOTUsIDkwLCA5MCwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDEx
NCwgMTA1LCA5OSwgOTcsIDEwOCwgOTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OCwg
ODksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwg
MTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg5LCA5MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEw
OCwgOTAsIDg4LCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTEx
LCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ5LCA0NCwgMzIsIDk4
LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OSwgNDEsIDMyLCAx
MTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCA3NywgMTAxLCAxMTUsIDEwNCwg
MTMsIDEwLCAxMjMsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOSwgMTExLCAxMTQs
IDEwOCwgMTAwLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4LCAx
MDUsIDExNSwgMTA1LCA5OCwgMTA1LCAxMDgsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywgMTAsIDEy
NSwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEs
IDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAxMDUs
IDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDg3LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3
LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwg
MzIsIDQ5LCA0MSwgMzIsIDEwNSwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwg
NzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEs
IDExMSwgMTE3LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDMyLCA2MSwgMzIsIDUwLCA0MSwgMzIsIDEwNSwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MCwg
MzIsIDExOCwgNzcsIDk3LCAxMDUsIDExMCwgODUsIDg2LCA0OSwgNTksIDEzLCAxMCwgMTA4LCA5
NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDgs
IDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ5
LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNiwgMTAx
LCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNTAsIDY4LCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1
LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA4
MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAx
MTQsIDEwMSwgNTksIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwOCwgOTcsIDEyMSwgMTEx
LCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ4LCA0NCwgMzIsIDk4
LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA1MCwgNDEsIDMyLCAx
MTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCAxMTUsIDk3LCAxMDksIDExMiwg
MTA4LCAxMDEsIDExNCwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5
LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgODMsIDk3LCAxMDksIDExMiwgMTA4
LCAxMDEsIDExNCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNTksIDEwLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
MTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2
LCAxMTQsIDEwMCwgMTAyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE1
LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDUwLCA2OCwgNDAsIDEwMSwgMTEwLCAxMTgs
IDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEw
MiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODQsIDEwMSwgMTIwLCAxMTYsIDEx
NywgMTE0LCAxMDEsIDQ0LCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAx
MDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA4MywgOTcsIDEwOSwgMTEyLCAx
MDgsIDEwMSwgMTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA0MSwgMTMsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwgOTcsIDEwOSwgMTEy
LCAxMDgsIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgNDAsIDExNSwgNDQsIDk5LCA0MSwgMzIsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQs
IDEwMSwgNDAsIDExNSwgNDQsIDk5LCA0MSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3
LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA1MCwgNDQsIDMyLCA5OCwgMTA1
LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTE3LCAx
MTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcs
IDExNCwgMTAxLCA2NywgMTE3LCA5OCwgMTAxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQs
IDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA1OSwgMTAsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIs
IDMyLCAzMiwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwg
MzIsIDYxLCAzMiwgNTAsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMs
IDMyLCA2MSwgMzIsIDQ5LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEw
OSwgMzIsIDExNSwgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE0LCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIsIDEw
OCwgMTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDU5LCAxMCwgMzIs
IDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgOTcs
IDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAx
LCAxMTQsIDY3LCAxMTcsIDk4LCAxMDEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODQs
IDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDQ0LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAx
LCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQxLCAxMywgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwg
MTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3Niwg
MTExLCAxMDAsIDQwLCAxMTUsIDQ0LCA5OSwgNDQsIDEwOCwgNDEsIDMyLCAxMTYsIDEwMSwgMTIw
LCAxMTYsIDExNywgMTE0LCAxMDEsIDc2LCAxMTEsIDEwMCwgNDAsIDExNSwgNDQsIDk5LCA0NCwg
MTA4LCA0MSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDEx
OCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDg1LCA4NiwgMzIsIDExOCwgNzcsIDk3LCAx
MDUsIDExMCwgODUsIDg2LCA0OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYs
IDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA1MCwgNDQsIDMyLCA5OCwgMTA1LCAxMTAs
IDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNTAsIDQxLCAzMiwgMTE3LCAxMTAsIDEw
NSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwg
MTAxLCA1MCwgNjgsIDMyLCA5NywgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgODMsIDk3LCAxMDks
IDExMiwgMTA4LCAxMDEsIDExNCwgODQsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDU5
LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIs
IDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYs
IDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA1MCwgNDQsIDMyLCA5OCwgMTA1LCAxMTAs
IDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNTEsIDQxLCAzMiwgMTE3LCAxMTAsIDEw
NSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAx
MTQsIDMyLCA5NywgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgODMsIDk3LCAxMDksIDExMiwgMTA4
LCAxMDEsIDExNCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNTksIDEwLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
OTcsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAx
MTQsIDMyLCAxMTUsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNTAsIDY4LCA0MCwgOTcs
IDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQs
IDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA0NCwgMzIsIDk3LCAxMDgsIDk4LCAx
MDEsIDEwMCwgMTExLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4MywgOTcsIDEw
OSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA0MSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDg1LCA4NiwgMzIsIDExOCwgNzcsIDk3LCAxMDUsIDExMCwg
ODUsIDg2LCA0OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUs
IDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA1MCwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1
LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNTIsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAx
MTEsIDExNCwgMTA5LCAzMiwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA1MCwg
NjgsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwg
MTE2LCAxMjEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDg0LCAxMDEsIDEyMCwg
MTE2LCAxMTcsIDExNCwgMTAxLCA1OSwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTA4LCA5
NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNTAs
IDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDUz
LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNSwgOTcs
IDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEw
MSwgMTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA1OSwgMTAsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMTQs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDgz
LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDMyLCAxMTUsIDk3LCAxMDksIDExMiwgMTA4
LCAxMDEsIDExNCwgNTAsIDY4LCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0
LCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNDQsIDMyLCAxMTQsIDEwMSwgMTAy
LCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDgzLCA5NywgMTA5
LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQx
LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE4LCA2NSwg
MTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA4NSwgODYsIDMyLCAxMTgsIDc3LCA5NywgMTA1
LCAxMTAsIDg1LCA4NiwgNDksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0
MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNTAsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAx
MDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDU0LCA0MSwgMzIsIDExNywgMTEwLCAxMDUs
IDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEw
MSwgNTAsIDY4LCAzMiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgODMsIDk3LCAx
MDksIDExMiwgMTA4LCAxMDEsIDExNCwgODQsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEs
IDU5LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAx
MTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA1MCwgNDQsIDMyLCA5OCwgMTA1LCAx
MTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNTUsIDQxLCAzMiwgMTE3LCAxMTAs
IDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAx
LCAxMTQsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA4MywgOTcsIDEwOSwg
MTEyLCAxMDgsIDEwMSwgMTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA1OSwg
MTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA4MywgOTcsIDEwOSwgMTEy
LCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDUw
LCA2OCwgNDAsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDgzLCA5NywgMTA5LCAx
MTIsIDEwOCwgMTAxLCAxMTQsIDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA0NCwg
MzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDgzLCA5NywgMTA5LCAxMTIsIDEw
OCwgMTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQxLCAxMywgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE4LCA2OSwgMTA5LCAxMDUs
IDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA4NSwgODYsIDMyLCAxMTgsIDc3LCA5NywgMTA1LCAx
MTAsIDg1LCA4NiwgNDksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwg
MTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNTAsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAs
IDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDU2LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEw
MiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwg
NTAsIDY4LCAzMiwgMTAxLCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDgzLCA5
NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwg
MTAxLCA1OSwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTA4LCA5NywgMTIxLCAxMTEsIDEx
NywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNTAsIDQ0LCAzMiwgOTgsIDEw
NSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDU3LCA0MSwgMzIsIDExNywg
MTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNSwgOTcsIDEwOSwgMTEyLCAxMDgs
IDEwMSwgMTE0LCAzMiwgMTAxLCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDgz
LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAx
LCAxMTQsIDU5LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAx
LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE1LCA5NywgMTA5LCAxMTIs
IDEwOCwgMTAxLCAxMTQsIDUwLCA2OCwgNDAsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUs
IDExOCwgMTAxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAxMjAs
IDExNiwgMTE3LCAxMTQsIDEwMSwgNDQsIDMyLCAxMDEsIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1
LCAxMTgsIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODMsIDk3LCAxMDks
IDExMiwgMTA4LCAxMDEsIDExNCwgNDEsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCAxMTgsIDY2LCAxMTcsIDEwOSwgMTEyLCA4NSwgODYsIDMyLCAxMTgsIDc3
LCA5NywgMTA1LCAxMTAsIDg1LCA4NiwgNDksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDEx
NywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNTAsIDQ0LCAzMiwgOTgsIDEw
NSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ5LCA0OCwgNDEsIDMyLCAx
MTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCAxMTYsIDEwMSwgMTIwLCAxMTYs
IDExNywgMTE0LCAxMDEsIDUwLCA2OCwgMzIsIDk4LCAxMTcsIDEwOSwgMTEyLCA4MywgOTcsIDEw
OSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwg
NTksIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDEx
NiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDUwLCA0NCwgMzIsIDk4LCAxMDUsIDEx
MCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OSwgNDksIDQxLCAzMiwgMTE3LCAx
MTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwg
MTAxLCAxMTQsIDMyLCA5OCwgMTE3LCAxMDksIDExMiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAx
MDEsIDExNCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNTksIDEwLCAzMiwgMzIs
IDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgOTgs
IDExNywgMTA5LCAxMTIsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDMyLCAxMTUs
IDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNTAsIDY4LCA0MCwgOTgsIDExNywgMTA5LCAx
MTIsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDg0LCAxMDEsIDEyMCwgMTE2LCAx
MTcsIDExNCwgMTAxLCA0NCwgMzIsIDk4LCAxMTcsIDEwOSwgMTEyLCA4MywgOTcsIDEwOSwgMTEy
LCAxMDgsIDEwMSwgMTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA0MSwgMTMs
IDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDgwLCA3MywgNjEsIDUxLCA0NiwgNDksIDUyLCA0OSwgNTMsIDU3LCA1MCwgNTQsIDUzLCA1
MSwgNTMsIDU2LCA1NywgNTUsIDU3LCA1MSwgNTAsIDUxLCA1NiwgNTIsIDU0LCA1MCwgNTQsIDUy
LCA1MSwgNTEsIDU2LCA1MSwgNTAsIDU1LCA1NywgNTMsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDEx
MCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzYsIDEwNSwgMTEw
LCAxMDEsIDk3LCAxMTQsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA4MCwgMTExLCAxMTks
IDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDYxLCA1MCwgNDYsIDUwLCA1
OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEw
MSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA2
MSwgNDksIDQ2LCA0OCwgNDcsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5
OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAx
MTQsIDExMSwgMTIwLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDc2LCAxMTcsIDEwOSwgMTA1LCAxMTAsIDk3LCAxMTAsIDk5LCAx
MDEsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAx
MjAsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDgsIDQ2LCA1MCwgNDksIDUwLCA1NCwgNDQs
IDQ4LCA0NiwgNTUsIDQ5LCA1MywgNTAsIDQ0LCA0OCwgNDYsIDQ4LCA1NSwgNTAsIDUwLCA0MSwg
NTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNjEsIDQ4LCA0Niwg
NDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDksIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAx
LCA0MCwgMTIwLCA0MSwgMzIsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgNDAsIDEyMCwgNDQsIDQ4
LCA0NiwgNDgsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDk3LCA5OCwgMTE1LCA2OSwgMTEyLCAxMTUsIDQwLCAxMjAsIDQx
LCAzMiwgOTcsIDk4LCAxMTUsIDQwLCAxMjAsIDQxLCA0MywgNjksIDExMiwgMTE1LCAxMDUsIDEw
OCwgMTExLCAxMTAsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCAxMDksIDk3LCAxMjAsIDY5LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCAxMDksIDk3LCAx
MjAsIDQwLCAxMjAsIDQ0LCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNDEsIDEz
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMTUsIDk3LCAxMTYs
IDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCA5
OSwgMTA4LCA5NywgMTA5LCAxMTIsIDQwLCAxMjAsIDQ0LCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4
LCAxMTEsIDExMCwgNDQsIDQ5LCA0NiwgNDgsIDQxLCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEs
IDMyLCAxMTYsIDExNCwgOTcsIDExMCwgMTE1LCAxMTIsIDExMSwgMTE1LCAxMDEsIDc3LCA5Nywg
MTE2LCA1MSwgNDAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMDUsIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwg
NDgsIDkzLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCA0OSwgNjEsIDEw
NSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgNTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwg
NTEsIDMyLCAxMTEsIDExNywgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNjEsIDEw
OSwgOTcsIDExNiwgNTEsIDQwLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4
LCA0NiwgMTIwLCA0NCwgMTA1LCA0OSwgNDYsIDEyMCwgNDQsIDEwNSwgNTAsIDQ2LCAxMjAsIDQx
LCA0NCwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMSwgNDQs
IDEwNSwgNDksIDQ2LCAxMjEsIDQ0LCAxMDUsIDUwLCA0NiwgMTIxLCA0MSwgNDQsIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgNDAsIDEwNSwgNDgsIDQ2LCAxMjIsIDQ0LCAxMDUsIDQ5LCA0Niwg
MTIyLCA0NCwgMTA1LCA1MCwgNDYsIDEyMiwgNDEsIDEzLCAxMCwgNDEsIDU5LCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTEsIDExNywgMTE2LCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwOSwgOTcsIDExNiwg
NTEsIDMyLCAxMDUsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE1LCAxMDEsIDc3LCA5NywgMTE2LCA1
MSwgNDAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwg
MTA1LCAxMjAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCA5NywgNDgsIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5
MSwgNDgsIDkzLCA5MSwgNDgsIDkzLCA0NCwgOTcsIDQ4LCA0OSwgNjEsIDEwNSwgMTEwLCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA0
OCwgNTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwg
OTMsIDkxLCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5
NywgNDksIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwg
NDksIDkzLCA5MSwgNDgsIDkzLCA0NCwgOTcsIDQ5LCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcs
IDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA0OSwg
NTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMs
IDkxLCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5Nywg
NTAsIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAs
IDkzLCA5MSwgNDgsIDkzLCA0NCwgOTcsIDUwLCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgOTEsIDQ5LCA5MywgNDQsIDk3LCA1MCwgNTAs
IDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkx
LCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OCwgNDgs
IDQ5LCA2MSwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OSwgNDksIDQ1LCA5NywgNDksIDUwLCA0Miwg
OTcsIDUwLCA0OSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk4LCA0
OSwgNDksIDYxLCA0NSwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OSwgNDgsIDQzLCA5NywgNDksIDUw
LCA0MiwgOTcsIDUwLCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDk4LCA1MCwgNDksIDYxLCA5NywgNTAsIDQ5LCA0MiwgOTcsIDQ5LCA0OCwgNDUsIDk3LCA0OSwg
NDksIDQyLCA5NywgNTAsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTAwLCAxMDEsIDExNiwgNjEsIDk3LCA0OCwgNDgsIDQyLCA5OCwgNDgsIDQ5LCA0MywgOTcs
IDQ4LCA0OSwgNDIsIDk4LCA0OSwgNDksIDQzLCA5NywgNDgsIDUwLCA0MiwgOTgsIDUwLCA0OSwg
NTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwOSwgOTcsIDEx
NiwgNTEsIDQwLCA5OCwgNDgsIDQ5LCA0NCwgNDAsIDQ1LCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ4
LCA0OSwgNDMsIDk3LCA0OCwgNTAsIDQyLCA5NywgNTAsIDQ5LCA0MSwgNDQsIDQwLCA5NywgNDks
IDUwLCA0MiwgOTcsIDQ4LCA0OSwgNDUsIDk3LCA0OCwgNTAsIDQyLCA5NywgNDksIDQ5LCA0MSwg
NDQsIDEzLCAxMCwgOTgsIDQ5LCA0OSwgNDQsIDQwLCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ4LCA0
OCwgNDUsIDk3LCA0OCwgNTAsIDQyLCA5NywgNTAsIDQ4LCA0MSwgNDQsIDQwLCA0NSwgOTcsIDQ5
LCA1MCwgNDIsIDk3LCA0OCwgNDgsIDQzLCA5NywgNDgsIDUwLCA0MiwgOTcsIDQ5LCA0OCwgNDEs
IDQ0LCAxMywgMTAsIDk4LCA1MCwgNDksIDQ0LCA0MCwgNDUsIDk3LCA1MCwgNDksIDQyLCA5Nywg
NDgsIDQ4LCA0MywgOTcsIDQ4LCA0OSwgNDIsIDk3LCA1MCwgNDgsIDQxLCA0NCwgNDAsIDk3LCA0
OSwgNDksIDQyLCA5NywgNDgsIDQ4LCA0NSwgOTcsIDQ4LCA0OSwgNDIsIDk3LCA0OSwgNDgsIDQx
LCA0MSwgNDcsIDEwMCwgMTAxLCAxMTYsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE2LCAxMTEsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA4Mywg
MTEyLCA5NywgOTksIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgs
IDExMSwgMTE0LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAx
MTQsIDExMCwgMzIsIDExMiwgMTExLCAxMTksIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0
NCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwg
MTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwg
MTEyLCAxMTQsIDExMSwgMTIwLCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE2LCAxMTEsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA4MywgMTEy
LCA5NywgOTksIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDEx
MSwgMTE0LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDExMiwgMTExLCAxMTksIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwg
MTE4LCAxMDEsIDk5LCA1MSwgNDAsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA2OSwgMTEwLCA5OSwg
MTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQs
IDExMSwgMTIwLCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTE1LCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCA0MCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQxLCAxMywgMTAsIDEy
MywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCA5NywgMTA4
LCAxMTcsIDEwMSwgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTEyLCAxMTEsIDExOSwgNTMsIDQw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDEs
IDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgMTEzLCA2
MSwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDU5
LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTUsIDExMywgNDIs
IDExNSwgMTEzLCA0MiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNTksIDEzLCAxMCwgMTI1LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDMsIDEwMSwgMTE2LCA3NiwgMTE3
LCAxMDksIDEwNSwgMTEwLCA5NywgMTEwLCA5OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwg
MTAwLCAxMTEsIDExNiwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCA3NiwgMTE3LCAx
MDksIDEwNSwgMTEwLCA5NywgMTEwLCA5OSwgMTAxLCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEw
MSwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA0MSwgNDQsIDQ4LCA0NiwgNDQsIDQ5LCA0
NiwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTAzLCAxMDEsIDExNiwgODIsIDk3LCAxMTAsIDEwMCwgNDAsIDExOCwgMTAxLCA5OSwgNTAs
IDMyLCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAx
MTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDQwLCAxMTUsIDEw
NSwgMTEwLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDYsIDEy
MCwgMTIxLCAzMiwgNDQsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCA0OSwgNTAsIDQ2LCA1NywgNTYs
IDU3LCA1NiwgNDQsIDU1LCA1NiwgNDYsIDUwLCA1MSwgNTEsIDQxLCA0MSwgNDEsIDQyLCA1Miwg
NTEsIDU1LCA1MywgNTYsIDQ2LCA1MywgNTIsIDUzLCA1MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDExNiwgMTA0LCAx
MDEsIDExNCwgNDAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQ0
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAs
IDk5LCAxMDEsIDY1LCAxMDksIDExMSwgMTE3LCAxMTAsIDExNiwgNDEsIDMyLCAxMjMsIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgOTcsIDExMCwgMTAwLCA2MSwgMTAz
LCAxMDEsIDExNiwgODIsIDk3LCAxMTAsIDEwMCwgNDAsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDEs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTE2LCAx
MDQsIDEwMSwgMTE0LCA2MSwgMTA5LCAxMDUsIDEyMCwgNDAsIDQ1LCAxMTgsIDk3LCAxMTQsIDEw
NSwgOTcsIDExMCwgOTksIDEwMSwgNjUsIDEwOSwgMTExLCAxMTcsIDExMCwgMTE2LCA0NywgNTAs
IDUzLCA1MywgNDYsIDQ4LCA0NCwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEs
IDY1LCAxMDksIDExMSwgMTE3LCAxMTAsIDExNiwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQs
IDExNCwgOTcsIDExMCwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAx
MTQsIDExMCwgMzIsIDEwMCwgMTA1LCAxMTYsIDEwNCwgMTAxLCAxMTQsIDU5LCAxMywgMTAsIDEy
NSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDExNCwgMTAzLCA5OCwgMTAwLCA3NywgOTcsIDEyMCwgODIsIDk3LCAxMTAsIDEw
MywgMTAxLCA2MSwgNTAsIDUzLCA1MywgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUyLCAzMiwgMTE2LCAxMTEsIDgyLCA3MSwgNjYsIDY4LCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDksIDk3LCAxMjAsIDgyLCA3MSwgNjYsIDYxLCAxMDksIDk3
LCAxMjAsIDY5LCAxMTIsIDExNSwgNDAsIDEwOSwgOTcsIDEyMCwgNDAsIDk5LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDQ2LCAxMTQsIDQ0LCAxMDksIDk3LCAxMjAsIDQwLCA5OSwgMTExLCAxMDgsIDEx
MSwgMTE0LCA0NiwgMTAzLCA0NCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDk4LCA0MSwg
NDEsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNjgsIDYxLCAx
MDksIDk3LCAxMjAsIDQwLCAxMTQsIDEwMywgOTgsIDEwMCwgNzcsIDk3LCAxMjAsIDgyLCA5Nywg
MTEwLCAxMDMsIDEwMSwgNDcsIDEwOSwgOTcsIDEyMCwgODIsIDcxLCA2NiwgNDQsIDQ5LCA0Niwg
NDEsIDU5LCAxMywgMTAsIDY4LCA2MSwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTAyLCAx
MDgsIDExMSwgMTExLCAxMTQsIDQwLCA2OCwgNDEsIDQ3LCA1MCwgNTMsIDUzLCA0NiwgNDgsIDQ0
LCA0OCwgNDYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTE0LCAxMDMsIDk4LCA2MSwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAz
LCA5OCwgNDIsIDY4LCA1OSwgMTMsIDEwLCAxMTQsIDEwMywgOTgsIDYxLCAxMTYsIDExMSwgNzEs
IDk3LCAxMDksIDEwOSwgOTcsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA0MCwgMTE0LCAxMDMsIDk4
LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwg
MTAxLCA5OSwgNTIsIDQwLCAxMTQsIDEwMywgOTgsIDQ0LCA2OCwgNDEsIDU5LCAxMywgMTAsIDEy
NSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMTQsIDExMSwgMTA5LCA4Miwg
NzEsIDY2LCA2OCwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwg
NDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywgOTgs
IDYxLCAxMTYsIDExMSwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDgzLCAxMTIsIDk3LCA5
OSwgMTAxLCA0MCwgMTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywgOTgsIDQxLCA1OSwg
MTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDMsIDk4LCAx
MDAsIDQ2LCAxMTQsIDEwMywgOTgsIDQ3LCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDk3LCA1OSwg
MTMsIDEwLCAxMjUsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA4MiwgNjksIDY3LCA3MywgODAsIDgyLCA3OSwgNjcsIDY1LCA3NiwgOTUsIDgwLCA3MywgNTAs
IDMyLCA0OCwgNDYsIDQ5LCA1MywgNTcsIDQ5LCA1MywgNTIsIDU3LCA1MiwgMTMsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNjcsIDczLCA4MCwgODIs
IDc5LCA2NywgNjUsIDc2LCA5NSwgODAsIDczLCAzMiwgNDgsIDQ2LCA1MSwgNDksIDU2LCA1MSwg
NDgsIDU3LCA1NiwgNTYsIDU0LCA0OSwgNTYsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCA3NywgNzMsIDc4LCA3MywgNzcsIDg1LCA3NywgODYsIDY1LCA4Miwg
NzMsIDY1LCA3OCwgNjcsIDY5LCAzMiwgNDgsIDQ2LCA0OCwgNDgsIDQ4LCA1MywgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAx
MTYsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgODQsIDExMSwg
NjUsIDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwgMTExLCAxMTIsIDEwMSwg
NDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwg
MTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDEx
NiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNSwgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgNDAsIDEx
NCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCA0MywgNzcsIDcz
LCA3OCwgNzMsIDc3LCA4NSwgNzcsIDg2LCA2NSwgODIsIDczLCA2NSwgNzgsIDY3LCA2OSwgNTks
IDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDIsIDEx
NCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDcxLCAxMTQsIDk3LCAxMjIsIDEwNSwgMTEwLCAx
MDMsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAx
MTYsIDEwMSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5
OSwgMTAxLCA0OCwgNDIsIDUwLCA1MywgNDYsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2
LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUwLCAzMiwgMTAzLCAxMDEsIDExNiwgNjUsIDY1LCA4MiwgMTExLCAxMTcsIDEw
MywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDEx
NSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDg2LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTEwLCA2OCwgMTAyLCAxMDAsIDEyMCwgNjEsIDEwMCwgNzAsIDEwMCwg
MTIwLCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NiwgMTAxLCA5OSwgMTE2LCAx
MTEsIDExNCwgNDYsIDEyMCwgMTIxLCAxMjIsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTEwLCA2OCwgMTAyLCAxMDAsIDEyMSwgNjEsIDEwMCwgNzAsIDEwMCwgMTIxLCA0
MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDEx
NCwgNDYsIDEyMCwgMTIxLCAxMjIsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTE1LCAxMDgsIDExMSwgMTEyLCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwg
MTAxLCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDExMCwgNjgsIDEw
MiwgMTAwLCAxMjAsIDQ0LCAxMTAsIDY4LCAxMDIsIDEwMCwgMTIwLCA0MSwgNDQsIDEwMCwgMTEx
LCAxMTYsIDQwLCAxMTAsIDY4LCAxMDIsIDEwMCwgMTIxLCA0NCwgMTEwLCA2OCwgMTAyLCAxMDAs
IDEyMSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAz
LCAxMDEsIDExMSwgMTA5LCAxMDEsIDExNiwgMTE0LCAxMDUsIDk5LCA4MiwgMTExLCAxMTcsIDEw
MywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDYx
LCAxMTIsIDExMSwgMTE5LCA0MCwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAx
LCA0MCwgMTE1LCAxMDgsIDExMSwgMTEyLCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAx
LCA0MSwgNDQsIDQ4LCA0NiwgNTEsIDUxLCA1MSwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMDMsIDEwMSwgMTExLCAxMDksIDEwMSwgMTE2LCAxMTQsIDEwNSwg
OTksIDY1LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQs
IDYxLCAxMTUsIDExMywgMTE0LCAxMTYsIDQwLCAxMTUsIDEwOCwgMTExLCAxMTIsIDEwMSwgODMs
IDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMDMsIDEwMSwgMTExLCAx
MDksIDEwMSwgMTE2LCAxMTQsIDEwNSwgOTksIDY1LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDcw
LCA5NywgOTksIDExNiwgMTExLCAxMTQsIDQyLCA2MSwgNDgsIDQ2LCA1NSwgNTMsIDU5LCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUwLCA0
MCwgMTAzLCAxMDEsIDExMSwgMTA5LCAxMDEsIDExNiwgMTE0LCAxMDUsIDk5LCA4MiwgMTExLCAx
MTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDcwLCA5NywgOTksIDExNiwgMTExLCAx
MTQsIDQ0LCAxMDMsIDEwMSwgMTExLCAxMDksIDEwMSwgMTE2LCAxMTQsIDEwNSwgOTksIDY1LCAx
MDgsIDExMiwgMTA0LCA5NywgNzEsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDQxLCA1OSwg
MTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDk3LCAxMTIsIDExMiwg
MTA4LCAxMjEsIDczLCAxMDksIDk3LCAxMDMsIDEwMSwgODAsIDExNCwgMTExLCA5OSwgMTAxLCAx
MTUsIDExNSwgMTA1LCAxMTAsIDEwMywgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTQsIDEw
MSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE1
LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTE2LCAxMTEsIDcxLCA5Nywg
MTA5LCAxMDksIDk3LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDExNCwgMTAxLCAxMTUsIDEx
NywgMTA4LCAxMTYsIDQ2LCAxMTQsIDEwMywgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwg
MTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTE1LCA5NywgMTE2LCAx
MTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwg
NDYsIDExNCwgMTAzLCA5OCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0
LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA1OSwgMTMsIDEwLCAxMjUs
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDEx
NiwgMTAxLCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwg
MTE2LCA3MywgMTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCAzMiwg
MTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDgzLCAx
MTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OCwgNDgsIDEzLCAxMCwg
NDMsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5
LCA5NSwgNDksIDQyLCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIxLCA0
MSwgMTMsIDEwLCA0MywgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5Nywg
MTA4LCA3NiwgNDksIDQ4LCA0MiwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYs
IDEyMiwgNDEsIDEzLCAxMCwgNDMsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5
OSwgOTcsIDEwOCwgNzYsIDQ5LCA0OSwgNDIsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAx
MDgsIDQ2LCAxMjAsIDQxLCAxMywgMTAsIDQzLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQs
IDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgOTUsIDUwLCA0MiwgNDAsIDExMCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgNDYsIDEyMSwgNDIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
NDYsIDEyMCwgNDEsIDEzLCAxMCwgNDMsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1
LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA5NSwgNDksIDQyLCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5
LCA5NywgMTA4LCA0NiwgMTIxLCA0MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0Niwg
MTIyLCA0MSwgMTMsIDEwLCA0MywgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5
LCA5NywgMTA4LCA3NiwgNTAsIDQ4LCA0MiwgNDAsIDQwLCA1MSwgNDYsIDQ4LCA0MiwgMTEwLCAx
MTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIyLCA0MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5
NywgMTA4LCA0NiwgMTIyLCA0MSwgNDUsIDQ5LCA0NiwgNDgsIDQxLCAxMywgMTAsIDQzLCAxMTgs
IDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgNDksIDQy
LCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIyLCA0MiwgMTEwLCAxMTEs
IDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIwLCA0MSwgMTMsIDEwLCA0MywgMTE4LCA4MywgMTEy
LCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDUwLCA0MiwgNDAsIDEx
MCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMCwgNDIsIDExMCwgMTExLCAxMTQsIDEw
OSwgOTcsIDEwOCwgNDYsIDEyMCwgNDUsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDQ2LCAxMjEsIDQyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjEsIDQxLCA0
MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExNSwgMTE2LCAxMTQsIDExNywgOTksIDExNiwg
MzIsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMs
IDczLCAxMTAsIDEwMiwgMTExLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDEx
NiwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywg
MTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDEx
MCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAx
MTYsIDExNiwgMTAxLCAxMTAsIDExNywgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDc2LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgNzIsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAw
LCAxMTEsIDExNiwgODYsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3
OCwgMTAwLCAxMTEsIDExNiwgNzYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAx
LCAxMDAsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAx
MTEsIDExNiwgNzYsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA4Niwg
MTAwLCAxMTEsIDExNiwgNzIsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA1OSwgMTMsIDEw
LCAxMjUsIDU5LCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYs
IDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgOTksIDExMSwgMTA5LCAxMTIs
IDExNywgMTE2LCAxMDEsIDgwLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDY1LCAxMTAsIDEwMCwgODMs
IDExMiwgMTExLCAxMTYsIDgwLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1
LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCA5NywgMTE2LCA5NywgNDQsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCA4NiwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3OCwgNDEsIDMyLCAxMjMs
IDEzLCAxMCwgMTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAs
IDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2
LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTA4LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNjEsIDEwOCwgMTA1
LCAxMDMsIDEwNCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NSwg
MTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNTksIDEzLCAx
MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwg
MTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5
NywgMTE0LCAxMDEsIDEwMCwgNjEsIDEwMCwgMTExLCAxMTYsIDQwLCAxMTQsIDEwMSwgMTE1LCAx
MTcsIDEwOCwgMTE2LCA0NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwg
MTE1LCAxMDEsIDExNiwgNDQsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0MSwgNTks
IDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDExNSwg
MTEzLCAxMTQsIDExNiwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEs
IDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEw
MSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3
LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0
NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwg
NDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3MiwgNjEs
IDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDg2LCA0Mywg
MTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc2LCA0MSwgNTksIDEzLCAxMCwgMTE0
LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNjEs
IDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEwMCwgMTExLCAxMTYs
IDQwLCA4NiwgNDQsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3MiwgNDEsIDQx
LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwg
MTExLCAxMTYsIDc2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA2
MSwgMTAwLCAxMTEsIDExNiwgNDAsIDc4LCA0NCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDEx
NiwgNDYsIDc2LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwg
NDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3
LCAxMTYsIDEwMSwgNjksIDExMiwgMTE1LCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDEx
NiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwg
MTEyLCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAx
MTAsIDMyLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEw
MywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEw
MSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDk3LCAxMDgsIDgw
LCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDEx
MCwgMTAyLCAxMTEsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDY4LCA5NywgMTE2LCA5NywgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA4NiwgNDQs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3OCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTEyLCAxMTQs
IDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAy
LCAxMTEsIDMyLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4
LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTA4LCAxMDEsIDExMCwgMTAz
LCAxMTYsIDEwNCwgNDAsIDQ1LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYs
IDk3LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDEx
NywgMTA4LCAxMTYsIDQ2LCA3NiwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1
LCAxMjIsIDEwMSwgNDAsIDQ1LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYs
IDk3LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDEx
NywgMTA4LCAxMTYsIDQ2LCA3MiwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1
LCAxMjIsIDEwMSwgNDAsIDg2LCA0MywgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYs
IDc2LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDg2
LCAxMDAsIDExMSwgMTE2LCA3MiwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYs
IDEwMSwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCA4NiwgNDQsIDExNCwgMTAxLCAxMTUsIDExNywg
MTA4LCAxMTYsIDQ2LCA3MiwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcs
IDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA4NSwgMTEwLCA5OSwgMTA4LCA5
NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA2MSwgMTAwLCAxMTEsIDExNiwgNDAsIDc4LCA0NCwgMTE0
LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc2LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAx
MDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNjEsIDEx
NSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNjksIDExMiwgMTE1LCA0MCwgMTE0
LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgODUs
IDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwg
MTE2LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAz
LCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCA5OSwgMTEx
LCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNzIsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTEyLCAx
MDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA4MCwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAx
MTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCA0MCwgMTE4LCAxMDEsIDk5LCA1
MiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ0LCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgODYsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgNzgsIDQxLCAz
MiwgMTIzLCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEw
NSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgMTE0LCAxMDEsIDExNSwgMTE3LCAx
MDgsIDExNiwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4
LCAxMDAsIDExMSwgMTE2LCA3NiwgNjEsIDEwMCwgMTExLCAxMTYsIDQwLCA3OCwgNDQsIDEwOCwg
MTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0
MSwgNDIsIDQ4LCA0NiwgNTMsIDQzLCA0OCwgNDYsIDUzLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwg
MTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA2MSwgMTE1LCA5
NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUsIDQwLCAxMTQsIDEw
MSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0MSwgNTks
IDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwg
MTE2LCA3NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNjEsIDEx
NCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDU5
LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTE1
LCAxMTcsIDEwOCwgMTE2LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAx
MTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3
LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDgzLCAxMTYsIDk3LCAxMTAsIDEwMCwgOTcs
IDExNCwgMTAwLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwg
MTE2LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTE0LCA5NywgMTEwLCAxMDMsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAs
IDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDksIDk3LCAxMjAsIDQwLCA0OCwg
NDYsIDQ0LCA0OSwgNDYsIDQ4LCA0NSwgMTA4LCAxMDEsIDExMCwgMTAzLCAxMTYsIDEwNCwgNDAs
IDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQx
LCA0NywgMTE0LCA5NywgMTEwLCAxMDMsIDEwMSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2
LCAxMDEsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3NiwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA5NSwgODAsIDEwNCwg
MTIxLCAxMTUsIDEwNSwgOTksIDk3LCAxMDgsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5
OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0MSwgMTMsIDEwLCAxMjMs
IDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDQ5LCA0NiwgNDgsIDQ3
LCAxMDksIDk3LCAxMjAsIDY5LCAxMTIsIDExNSwgNDAsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2
LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5Nywg
MTE0LCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUs
IDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwg
OTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA5NSwgNzEsIDc2LCA4NCwgNzAsIDQwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUs
IDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwg
MTAwLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwNSwgMTEwLCAxMTgsIDEwMSwg
MTE0LCAxMTUsIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgODIsIDk3LCAx
MTAsIDEwMywgMTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcs
IDExMCwgOTksIDEwMSwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNjEsIDQ5LCA0
NiwgNDgsIDQ3LCAxMDksIDk3LCAxMjAsIDY5LCAxMTIsIDExNSwgNDAsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywg
MTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMDIsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwgNjEsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywg
MTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgNDIsIDEwNSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTUs
IDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgODIsIDk3LCAxMTAsIDEwMywg
MTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDExNiwgMTE2
LCAxMDEsIDExMCwgMTE3LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA2MSwgMTE1LCA5NywgMTE2
LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgNDksIDQ2LCA0OCwgNDUsIDEwMiwgOTcsIDk5
LCAxMTYsIDExMSwgMTE0LCA0MiwgMTAyLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDQxLCA1OSwg
MTMsIDEwLCA5NywgMTE2LCAxMTYsIDEwMSwgMTEwLCAxMTcsIDk3LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDQyLCA2MSwgOTcsIDExNiwgMTE2LCAxMDEsIDExMCwgMTE3LCA5NywgMTE2LCAxMDUsIDEx
MSwgMTEwLCA1OSwgMTMsIDEwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1
LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIs
IDQyLCA2MSwgOTcsIDExNiwgMTE2LCAxMDEsIDExMCwgMTE3LCA5NywgMTE2LCAxMDUsIDExMSwg
MTEwLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA4LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3
MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwg
MTAxLCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzYsIDEwNSwgMTAzLCAx
MDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNDAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEw
MSwgMTE2LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3
LCA5NywgMTE0LCAxMDEsIDEwMCwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQs
IDk3LCAxMTAsIDEwMywgMTAxLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwNSwg
MTEwLCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEs
IDEwMCwgODIsIDk3LCAxMTAsIDEwMywgMTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0
LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDEx
NiwgMTAxLCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzYsIDEwNSwgMTAz
LCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDgwLCAxMDQs
IDEyMSwgMTE1LCAxMDUsIDk5LCA5NywgMTA4LCA0MCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYs
IDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAx
MTQsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwg
MTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDk3LCAxMDgsIDc2LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDk1LCA4MywgMTE2LCA5
NywgMTEwLCAxMDAsIDk3LCAxMTQsIDEwMCwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2Nywg
MTAxLCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDk5LCAxMTEsIDExNSwgNzIsIDk3LCAxMDgsIDEwMiwgNjUsIDExMCwgMTAzLCAxMDgsIDEw
MSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDEsIDEyMCwgMTEyLCAxMTEsIDEx
MCwgMTAxLCAxMTAsIDExNiwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNjEsIDQ4LCA0
NiwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAx
MTUsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDYxLCAxMDksIDk3LCAxMjAsIDY5LCAxMTIsIDEx
NSwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCA0NSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4
LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTAwLCAxMDUsIDEx
NCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA2NywgMTAxLCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0MSwgNDEsIDU5LCAxMywg
MTAsIDEwNSwgMTAyLCAzMiwgNDAsIDk5LCAxMTEsIDExNSwgNjUsIDExMCwgMTAzLCAxMDgsIDEw
MSwgNjIsIDYxLCA5OSwgMTExLCAxMTUsIDcyLCA5NywgMTA4LCAxMDIsIDY1LCAxMTAsIDEwMywg
MTA4LCAxMDEsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTEx
LCAxMDIsIDEwMiwgNjEsIDEwOSwgOTcsIDEyMCwgNDAsIDQ4LCA0NiwgNDQsIDExMiwgMTExLCAx
MTksIDQwLCA5OSwgMTExLCAxMTUsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQ0LCAxMDEsIDEy
MCwgMTEyLCAxMTEsIDExMCwgMTAxLCAxMTAsIDExNiwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUs
IDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwMiwgOTcsIDEwOCwg
MTA4LCAxMTEsIDEwMiwgMTAyLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1
LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgOTcsIDEwOCwgNzYsIDEwNSwgMTAz
LCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDgwLCAxMDQs
IDEyMSwgMTE1LCAxMDUsIDk5LCA5NywgMTA4LCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEw
OCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3
LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgOTksIDExMSwgMTE1LCA3MiwgOTcsIDEwOCwgMTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwg
MTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDcsIDc3LCAxMDUsIDExMCwgMTE3LCAxMTUs
IDc2LCAxMTEsIDEwMywgNTAsIDY3LCAxMTEsIDExMCwgMTAxLCA2NSwgMTEwLCAxMDMsIDEwOCwg
MTAxLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDgyLCA5Nywg
MTE2LCAxMDUsIDExMSwgNjEsIDU0LCA0NiwgNTQsIDUyLCA1MSwgNTYsIDUzLCA1NCwgNDksIDU2
LCA1NywgNTUsIDU1LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTks
IDExMSwgMTEwLCA5OSwgMTAxLCAxMTAsIDExNiwgMTE0LCA5NywgMTE2LCAxMDUsIDExMSwgMTEw
LCA3NSwgOTcsIDExMiwgMTEyLCA5NywgNjEsIDEwNywgNzcsIDEwNSwgMTEwLCAxMTcsIDExNSwg
NzYsIDExMSwgMTAzLCA1MCwgNjcsIDExMSwgMTEwLCAxMDEsIDY1LCAxMTAsIDEwMywgMTA4LCAx
MDEsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTYsIDEyMSwgODIsIDk3LCAx
MTYsIDEwNSwgMTExLCA0NywgNDAsIDQ5LCA0NiwgNDgsIDQ1LCA5OSwgMTExLCAxMTUsIDcyLCA5
NywgMTA4LCAxMDIsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUyLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgMTEyLCAxMTQsIDEwMSwgOTcsIDEwMCwg
ODMsIDcxLCA2MSwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDQ1LCAxMDgsIDEwNSwgMTAzLCAxMDQs
IDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQyLCA5OSwg
MTExLCAxMTAsIDk5LCAxMDEsIDExMCwgMTE2LCAxMTQsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDc1LCA5NywgMTEyLCAxMTIsIDk3LCA0NCwgNDUsIDk5LCAxMTEsIDExMCwgOTksIDEwMSwgMTEw
LCAxMTYsIDExNCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzUsIDk3LCAxMTIsIDExMiwgOTcs
IDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAyLCA5NywgMTA4
LCAxMDgsIDExMSwgMTAyLCAxMDIsIDYxLCAxMDEsIDEyMCwgMTEyLCA1MCwgNDAsIDEwMCwgMTEx
LCAxMTYsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2Nywg
MTAxLCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0NCwgNDksIDQ2LCA0OCwgNDEsIDQ0LCAxMDgs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDgzLCAxMTIsIDExNCwgMTAxLCA5NywgMTAwLCA4MywgNzEsIDQxLCA0MSwgNTksIDEz
LCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwMiwgOTcsIDEwOCwgMTA4
LCAxMTEsIDEwMiwgMTAyLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAx
MTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgOTcsIDEwOCwgNzYsIDEwNSwgMTAzLCAx
MDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDcxLCA3NiwgODQs
IDcwLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2
OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0
LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDEx
NCwgODcsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDgzLCA5OSwgOTcsIDEwOCwgMTAxLCA0NCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NSwg
MTEwLCAxMDMsIDEwOCwgMTAxLCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQxLCAxMywg
MTAsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDEwMCwgNjEs
IDEwMCwgMTExLCAxMTYsIDQwLCA0NSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUs
IDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTAwLCAxMDUsIDExNCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2
LCA2NywgMTAxLCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA2
MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgOTksIDEwMCwgNDIs
IDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA4MywgOTks
IDk3LCAxMDgsIDEwMSwgNDMsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NSwgMTEwLCAxMDMs
IDEwOCwgMTAxLCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQxLCA1OSwgMTMsIDEwLCAx
MDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNDIsIDYxLCAxMDIsIDk3LCAxMDgsIDEw
OCwgMTExLCAxMDIsIDEwMiwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDEx
MCwgMzIsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA1OSwgMTMsIDEwLCAxMjUs
IDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAx
MTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
OTcsIDEwOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAx
MDIsIDEwMiwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTAxLCAxMTAsIDExNiwgMTAx
LCAxMTQsIDg3LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDExNSwg
NzIsIDk3LCAxMDgsIDEwMiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNDQsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMDEsIDEyMCwgMTEyLCAxMTEsIDExMCwgMTAxLCAxMTAsIDExNiwg
NDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwg
NjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgODMsIDk5LCA5NywgMTA4LCAxMDEsIDQ0LCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY1LCAxMTAsIDEw
MywgMTA4LCAxMDEsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDEsIDEzLCAxMCwgMTIz
LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTExLCAxMDks
IDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDk3LCAxMDgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgs
IDExMSwgMTAyLCAxMDIsIDk1LCA4MCwgMTA0LCAxMjEsIDExNSwgMTA1LCA5OSwgOTcsIDEwOCwg
NDAsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNDQsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgODQsIDExMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYs
IDEwMSwgMTE0LCA4NywgNDQsIDk5LCAxMTEsIDExNSwgNzIsIDk3LCAxMDgsIDEwMiwgNjUsIDEx
MCwgMTAzLCAxMDgsIDEwMSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDcwLCA4MiwgNjksIDgzLCA3OCwgNjksIDc2LCA5
NSwgNzcsIDY1LCA4OCwgNzMsIDc3LCA4NSwgNzcsIDk1LCA3OSwgNzgsIDk1LCA4MiwgNzksIDg1
LCA3MSwgNzIsIDMyLCA0OCwgNDYsIDUwLCA1MywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTAzLCAxMDEsIDExNiwgNjksIDExMCwgMTAxLCAxMTQsIDEwMywgMTIxLCA2NywgMTExLCAx
MTAsIDExNSwgMTAxLCAxMTQsIDExOCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzAsIDk3LCA5
OSwgMTE2LCAxMTEsIDExNCwgNDAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwg
MTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgs
IDQ0LCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEw
MSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2Niwg
MTE0LCAxMDAsIDEwMiwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAx
MTQsIDExMCwgMzIsIDQ5LCA0NiwgNDgsIDQzLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgs
IDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEw
LCAxMTYsIDgyLCA0OCwgNDIsIDQwLCA0OSwgNDYsIDQ4LCA0NywgMTAxLCAxMTAsIDExOCwgMTA1
LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA0
NiwgMTIxLCA0NSwgNDksIDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTAzLCAxMDEsIDExNiwgNjYsIDgyLCA2OCwgNzAsIDc2LCAxMTEs
IDExMSwgMTA3LCAxMTcsIDExMiwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwg
MTAwLCAxMTEsIDExNiwgODYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTEyLCAx
MDEsIDExNCwgOTksIDEwMSwgMTEyLCAxMTYsIDExNywgOTcsIDEwOCwgODIsIDExMSwgMTE3LCAx
MDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUwLCAzMiwgODUsIDg2LCA2MSwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDc4LCAxMDAs
IDExMSwgMTE2LCA4NiwgNDQsIDExMiwgMTAxLCAxMTQsIDk5LCAxMDEsIDExMiwgMTE2LCAxMTcs
IDk3LCAxMDgsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCA5OCwgMTE0LCAxMDAsIDEwMiwgNzYs
IDExMSwgMTExLCAxMDcsIDExNywgMTEyLCA2MSwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDEx
NCwgMTAxLCA0MCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwg
MTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwg
MTE0LCA0NCwgODUsIDg2LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDk4LCAxMTQsIDEwMCwgMTAyLCA3NiwgMTExLCAxMTEsIDEwNywgMTE3LCAxMTIs
IDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTAzLCAxMDEsIDExNiwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
OTcsIDExMCwgOTksIDEwMSwgNzAsIDExNCwgMTExLCAxMDksIDY2LCA4MiwgNjgsIDcwLCA3Niwg
MTExLCAxMTEsIDEwNywgMTE3LCAxMTIsIDQwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDEx
NCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwg
ODIsIDQ4LCA0NCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDEx
NiwgNjYsIDExNCwgMTAwLCAxMDIsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEw
MSwgNjEsIDEwOSwgMTA1LCAxMjAsIDQwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAx
MTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDQ2LCAxMjAsIDEyMCwg
MTIwLCA0NCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEw
LCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA0NiwgMTIxLCAxMjEsIDEyMSwgNDQsIDExNSwgMTEy
LCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTEx
LCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAx
MDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDEwMiwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgODMsIDk5LCAx
MDQsIDEwOCwgMTA1LCA5OSwgMTA3LCA3MSwgNzEsIDg4LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgs
IDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQzLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNDUsIDExNCwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDEsIDQyLCAxMTIs
IDExMSwgMTE5LCA1MywgNDAsIDQ5LCA0NiwgNDgsIDQ1LCA4NiwgMTAwLCAxMTEsIDExNiwgNzIs
IDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDEwMiwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgODMsIDk5LCAxMDQsIDEwOCwgMTA1
LCA5OSwgMTA3LCA3MSwgNzEsIDg4LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDg2
LCAxMDAsIDExMSwgMTE2LCA3MiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQ0LCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQzLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNDUsIDExNCwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDEsIDQyLCAxMTIs
IDExMSwgMTE5LCA1MywgNDAsIDQ5LCA0NiwgNDgsIDQ1LCA4NiwgMTAwLCAxMTEsIDExNiwgNzIs
IDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNjgsIDEwNSwgMTE1LCAxMTYsIDExNCwgMTA1
LCA5OCwgMTE3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDcwLCAxMTcsIDExMCwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgOTUsIDg0LCAxMTQsIDExMSwgMTE5LCA5OCwgMTE0LCAxMDUsIDEwMCwgMTAz
LCAxMDEsIDgyLCAxMDEsIDEwNSwgMTE2LCAxMjIsIDcxLCA3MSwgODgsIDQwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDcyLCA0NCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDQxLCAxMywgMTAsIDEy
MywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDUwLCA2MSwgMTE1LCAx
MTMsIDExNywgOTcsIDExNCwgMTAxLCA0MCwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNDEs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDYxLCA3OCwgMTAw
LCAxMTEsIDExNiwgNzIsIDQyLCA3OCwgMTAwLCAxMTEsIDExNiwgNzIsIDQyLCA0MCwgOTcsIDUw
LCA0NSwgNDksIDQ2LCA0OCwgNDEsIDQzLCA0OSwgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMTQsIDEw
MSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTcsIDUwLCA0NywgNDAsIDgwLCA3MywgNDIsIDEw
MCwgNDIsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTE1LCAxMDksIDEwNSwgMTE2LCAxMDQsIDg2LCAxMDUsIDExNSwgMTA1LCA5
OCwgMTA1LCAxMDgsIDEwNSwgMTE2LCAxMjEsIDk1LCA3MSwgNzEsIDg4LCA2NywgMTExLCAxMTQs
IDExNCwgMTAxLCAxMDgsIDk3LCAxMTYsIDEwMSwgMTAwLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA1MCwgNjEsIDk3LCAxMDgsIDExMiwgMTA0LCA5
NywgNzEsIDQyLCA5NywgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA1OSwgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgNzEsIDcxLCA4OCwgODYsIDYxLCA3OCwgMTAwLCAxMTEsIDEx
NiwgNzYsIDQyLCAxMTUsIDExMywgMTE0LCAxMTYsIDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgODYs
IDQyLCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NSwgOTcsIDUwLCA0MiwgNzgsIDEwMCwg
MTExLCAxMTYsIDg2LCA0MSwgNDMsIDk3LCA1MCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCA3MSwgNzEsIDg4LCA3NiwgNjEsIDc4LCAxMDAsIDExMSwgMTE2LCA4
NiwgNDIsIDExNSwgMTEzLCAxMTQsIDExNiwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDIs
IDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQ1LCA5NywgNTAsIDQyLCA3OCwgMTAwLCAxMTEs
IDExNiwgNzYsIDQxLCA0MywgOTcsIDUwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDQ4LCA0NiwgNTMsIDQ3LCA0MCwgNzEsIDcxLCA4OCwgODYsIDQz
LCA3MSwgNzEsIDg4LCA3NiwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA2Niwg
ODIsIDY4LCA3MCwgOTUsIDY2LCAxMTcsIDExNCwgMTA4LCAxMDEsIDEyMSwgNDAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQ0LCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDQsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1
LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAx
MDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEs
IDEwOCwgNzgsIDg2LCA2MSwgMTEyLCAxMTEsIDExOSwgNTMsIDQwLCAxMTUsIDk3LCAxMTYsIDEx
NywgMTE0LCA5NywgMTE2LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAsIDQ5LCA0NiwgNDgsIDQ1LCA3
OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwg
MTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDc4LCA3NiwgNjEsIDExMiwgMTExLCAxMTksIDUzLCA0
MCwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUsIDQw
LCA0OSwgNDYsIDQ4LCA0NSwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0MSwgNDEsIDU5LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywg
MTE1LCAxMDEsIDcwLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA1NywgNDgsIDYxLCA0
OCwgNDYsIDUzLCA0MywgNTAsIDQ2LCA0OCwgNDIsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDIs
IDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAs
IDEwMSwgMTE1LCAxMTUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MDIsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDMyLCA2MSwgMTMsIDEwLCA0MCwgNDks
IDQ2LCA0OCwgNDMsIDQwLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAx
MTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA1NywgNDgsIDQ1LCA0OSwgNDYsIDQ4LCA0MSwg
NDIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUs
IDExMCwgMTAxLCAxMDgsIDc4LCA3NiwgNDEsIDMyLCA0MiwgMTMsIDEwLCA0MCwgNDksIDQ2LCA0
OCwgNDMsIDQwLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAxMTQsIDEw
MSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA1NywgNDgsIDQ1LCA0OSwgNDYsIDQ4LCA0MSwgNDIsIDEw
MCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUsIDExMCwg
MTAxLCAxMDgsIDc4LCA4NiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0
LCAxMTAsIDMyLCAxMDIsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDQ3LCA4MCwgNzMs
IDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEw
MSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDgyLCA2OSwgNzAsIDc2
LCA2OSwgNjcsIDg0LCA2NSwgNzgsIDY3LCA2OSwgNTcsIDQ4LCAzMiwgNDksIDQ2LCA0OCwgMTMs
IDEwLCAxMTUsIDExNiwgMTE0LCAxMTcsIDk5LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQs
IDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDEzLCAxMCwgMTIzLCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAx
MDEsIDU5LCAxMywgMTAsIDEyNSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDk3LCAxMDAsIDEwNiwgMTE3LCAxMTUsIDExNiwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwg
MTEwLCAxMDEsIDExNSwgMTE1LCA3MCwgMTE0LCAxMTEsIDEwOSwgNzYsIDEwNSwgMTAzLCAxMDQs
IDExNiwgODAsIDExNCwgMTExLCAxMTIsIDEwMSwgMTE0LCAxMTYsIDEwNSwgMTAxLCAxMTUsIDQw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDEx
MCwgMTAxLCAxMTUsIDExNSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEw
NSwgMTAzLCAxMDQsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgMTE3LCAxMTUsIDQ0LCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDEx
NSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDgyLCAxMTEsIDExNywg
MTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNjEsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2
LCA4MiwgOTcsIDEwMCwgMTA1LCAxMTcsIDExNSwgNDcsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2
LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDExNiwgMTExLCAxMTYsIDk3LCAxMDgsIDgyLCAxMTEsIDEx
NywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAx
MTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA4MiwgMTExLCAx
MTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQzLCAxMTQsIDExMSwgMTE3LCAxMDMs
IDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDExNiwgMTExLCAxMTYsIDk3LCAxMDgsIDgyLCAxMTEsIDExNywg
MTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNzIs
IDEwMSwgMTA5LCAxMDUsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA2OCwgMTA1
LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAx
MTAsIDEwMywgNDAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwg
MTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgMTA1LCAxMTAsIDEwMiwgMTExLCA0NCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTExLCAx
MDgsIDExMSwgMTE0LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMywgMTE0LCAxMTEsIDEx
NywgMTEwLCAxMDAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAzMiwgMTIzLCAxMywgMTAs
IDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDksIDEwNSwgMTIwLCA0MCwgMTAz
LCAxMTQsIDExMSwgMTE3LCAxMTAsIDEwMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDEw
OCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwgMTA1LCAx
MTAsIDEwMiwgMTExLCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0MSwgNTksIDEzLCAxMCwg
MTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3
LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDc2LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDQwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAx
MDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDEwNSwg
MTEwLCAxMDIsIDExMSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAx
MDQsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEw
MSwgODQsIDEwMSwgMTE0LCAxMDksIDYxLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAx
MDEsIDY2LCA4MiwgNjgsIDcwLCA5NSwgNjYsIDExNywgMTE0LCAxMDgsIDEwMSwgMTIxLCA0MCwg
MTA1LCAxMTAsIDEwMiwgMTExLCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0NCwgMTA1LCAx
MTAsIDEwMiwgMTExLCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTA1LCAxMTAsIDEw
MiwgMTExLCA0NiwgODYsIDEwMCwgMTExLCAxMTYsIDcyLCA0NCwgMTA1LCAxMTAsIDEwMiwgMTEx
LCA0NiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDU5
LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDAsIDEwNSwgMTAy
LCAxMDIsIDExNywgMTE1LCAxMDEsIDg0LCAxMDEsIDExNCwgMTA5LCA0MiwgMTA1LCAxMTAsIDEw
MiwgMTExLCA0NiwgOTcsIDExNiwgMTE2LCAxMDEsIDExMCwgMTE3LCA5NywgMTE2LCAxMDUsIDEx
MSwgMTEwLCA0MiwgMTA1LCAxMTAsIDEwMiwgMTExLCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2
LCA0MiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5
LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgOTksIDExMSwgMTA5
LCAxMTIsIDExNywgMTE2LCAxMDEsIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA2OCwgMTA1LCAx
MDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAs
IDEwMywgODUsIDg2LCA0MCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNiwgMTAxLCAxMjAsIDEx
NiwgMTE3LCAxMTQsIDEwMSwgODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMjMsIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MiwgMzIsIDExNSwgMTE2LCAxMTQsIDExMywgNjEsIDExNiwgMTAxLCAxMjAs
IDExNiwgMTE3LCAxMTQsIDEwMSwgODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTks
IDUyLCA0MCwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4Nywg
NDQsIDQ5LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMTUsIDExNiwgMTE0LCAxMTMsIDQ3LCA2
MSwgMTE1LCAxMTYsIDExNCwgMTEzLCA0NiwgMTE5LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2
LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE1LCAxMTYsIDExNCwgMTEzLCA0NiwgMTIwLCAxMjEsIDU5
LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAzLCAx
MDEsIDExNiwgNzYsIDExMSwgMTAwLCA3MCwgMTE0LCAxMTEsIDEwOSwgNjUsIDEwOCwgMTEyLCAx
MDQsIDk3LCA3MSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTE3LCA5OCwg
MTAxLCA3NywgOTcsIDExMiwgNjgsIDEwNSwgMTA5LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExMSwg
MTEwLCA4MCwgMTA1LCAxMjAsIDEwMSwgMTA4LCAxMTUsIDQ0LCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5Nywg
OTksIDEwMSwgNjUsIDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwgMTExLCAx
MTIsIDEwMSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEs
IDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDgzLCAxMDgsIDExMSwgMTEyLCAxMDEs
IDg0LCAxMDEsIDEyMCwgMTAxLCAxMDgsIDExNSwgNjEsIDk5LCAxMTcsIDk4LCAxMDEsIDc3LCA5
NywgMTEyLCA2OCwgMTA1LCAxMDksIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTExLCAxMTAsIDgwLCAx
MDUsIDEyMCwgMTAxLCAxMDgsIDExNSwgNDIsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwg
MTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAx
MDEsIDgzLCAxMDgsIDExMSwgMTEyLCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMDgsIDExMSwgMTAwLCA2MSwgMTA4LCAxMTEsIDEwMywgNTAsIDQwLCAxMDks
IDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwg
MTE4LCAxMDEsIDExNCwgOTcsIDEwMywgMTAxLCA4MywgMTA4LCAxMTEsIDExMiwgMTAxLCA4NCwg
MTAxLCAxMjAsIDEwMSwgMTA4LCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAx
MTcsIDExNCwgMTEwLCAzMiwgMTA4LCAxMTEsIDEwMCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDMsIDEwMSwgMTE2LCA3NiwgMTA1LCAxMTAs
IDEwMSwgOTcsIDExNCwgNzYsIDExMSwgMTAwLCA3MCwgMTE0LCAxMTEsIDEwOSwgODIsIDExMSwg
MTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDk5LCAxMTcsIDk4LCAxMDEsIDc3LCA5NywgMTEyLCA2OCwgMTA1LCAxMDksIDEw
MSwgMTEwLCAxMTUsIDEwNSwgMTExLCAxMTAsIDgwLCAxMDUsIDEyMCwgMTAxLCAxMDgsIDExNSwg
NDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwg
MTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTA4LCAxMTEsIDEwMCwgNjEsIDEwOCwgMTExLCAxMDMsIDUwLCA0MCwgOTks
IDExNywgOTgsIDEwMSwgNzcsIDk3LCAxMTIsIDY4LCAxMDUsIDEwOSwgMTAxLCAxMTAsIDExNSwg
MTA1LCAxMTEsIDExMCwgODAsIDEwNSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA0MSwgNDIsIDExNCwg
MTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDU5LCAxMywgMTAsIDExNCwg
MTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDgsIDExMSwgMTAwLCA1OSwgMTMsIDEwLCAx
MjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMSwgMTEwLCAxMTgsIDEw
NSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5
NywgMTEwLCA5OSwgMTAxLCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEw
LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwg
MTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDQ0LCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA4NSwgMTEw
LCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE2LCAxMDEsIDEwOSwgMTEyLCA2MSwgNzgsIDEw
MCwgMTExLCAxMTYsIDg2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAw
LCA0MywgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAx
MTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAx
MTQsIDExMCwgMzIsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEx
NSwgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgNDAsIDExNiwgMTAxLCAxMDksIDExMiwgNDEsIDQ1
LCA0OSwgNDYsIDQ4LCA0MywgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5
LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNDEsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAx
MTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDcyLCAxMTEsIDExNCwgMTA1LCAxMjIs
IDExMSwgMTEwLCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA0MCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNDQsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCAzMiwgMTIzLCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgNjEsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA0
MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA0NCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0
MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNiwgMTAxLCAxMDks
IDExMiwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDQ5LCA0
NiwgNDgsIDQzLCA0OSwgNDYsIDQ5LCA0MiwgMTAwLCAxMTEsIDExNiwgNDAsIDExNCwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTEwLCAxMTEsIDExNCwg
MTA5LCA5NywgMTA4LCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0
LCAxMTAsIDMyLCAxMTUsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDQwLCAxMTYsIDEwMSwgMTA5
LCAxMTIsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExMiwgMTAxLCAxMTQsIDExNiwgMTE3LCAxMTQsIDk4LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcs
IDEwOCwgNDAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCA5OSwgMTExLCAxMTYsIDk3LCAxMTAsIDEw
MywgMTAxLCAxMTAsIDExNiwgNzAsIDExNCwgOTcsIDEwOSwgMTAxLCA0NCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODMsIDk3LCAxMDks
IDExMiwgMTA4LCAxMDEsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCA5OSwg
OTcsIDEwOCwgMTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE2LCAxMDEsIDEyMCwgMTE2
LCAxMTcsIDExNCwgMTAxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgNjEsIDExNiwgMTAx
LCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDQy
LCA1MCwgNDYsIDQ4LCA0NSwgNDksIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTE2LCAxMDEsIDEyMCwg
MTE2LCAxMTcsIDExNCwgMTAxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgNjEsIDExMCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExNiwgMTAxLCAxMjAs
IDExNiwgMTE3LCAxMTQsIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDQyLCAxMTgs
IDEwMSwgOTksIDUxLCA0MCwgMTE1LCA5OSwgOTcsIDEwOCwgMTAxLCA0NCwgMTE1LCA5OSwgOTcs
IDEwOCwgMTAxLCA0NCwgNDksIDQ2LCA0OCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwg
MTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUs
IDEyMiwgMTAxLCA0MCwgOTksIDExMSwgMTE2LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYs
IDcwLCAxMTQsIDk3LCAxMDksIDEwMSwgNDIsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQs
IDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDk5LCAxMTEsIDExNiwgOTcsIDExMCwgMTAzLCAx
MDEsIDExMCwgMTE2LCA5NSwgMTAyLCAxMTQsIDk3LCAxMDksIDEwMSwgNDAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTEyLCA0NCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNywgMTE4LCA0NCwgMTE4
LCAxMDEsIDk5LCA1MCwgMzIsIDExNiwgOTcsIDExMCwgMTAzLCAxMDEsIDExMCwgMTE2LCA4Mywg
MTEyLCA5NywgOTksIDEwMSwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNDEsIDEzLCAxMCwg
MTIzLCAxMywgMTAsIDExNywgMTE4LCA2MSwgMTAzLCAxMDgsIDk1LCA3MCwgMTE0LCAxMTEsIDEx
MCwgMTE2LCA3MCwgOTcsIDk5LCAxMDUsIDExMCwgMTAzLCAzMiwgNjMsIDMyLCAxMTcsIDExOCwg
MzIsIDU4LCAzMiwgNDUsIDExNywgMTE4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTAwLCAxMTIsIDQ5LCA2MSwgMTAwLCA3MCwgMTAwLCAxMjAsIDQwLCAxMTIsIDQxLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMTIsIDUwLCA2MSwgMTAwLCA3MCwg
MTAwLCAxMjEsIDQwLCAxMTIsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwg
MTAwLCAxMTcsIDExOCwgNDksIDYxLCAxMDAsIDcwLCAxMDAsIDEyMCwgNDAsIDExNywgMTE4LCA0
MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEwMCwgMTE3LCAxMTgsIDUwLCA2
MSwgMTAwLCA3MCwgMTAwLCAxMjEsIDQwLCAxMTcsIDExOCwgNDEsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMDAsIDExMiwgNTAsIDExMiwgMTAxLCAxMTQsIDExMiwgNjEsIDk5
LCAxMTQsIDExMSwgMTE1LCAxMTUsIDQwLCAxMDAsIDExMiwgNTAsIDQ0LCAxMTAsIDExMSwgMTE0
LCAxMDksIDk3LCAxMDgsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAw
LCAxMTIsIDQ5LCAxMTIsIDEwMSwgMTE0LCAxMTIsIDYxLCA5OSwgMTE0LCAxMTEsIDExNSwgMTE1
LCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTAwLCAxMTIsIDQ5LCA0MSwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNiwgOTcsIDExMCwgMTAzLCAxMDEs
IDExMCwgMTE2LCA2MSwgMTAwLCAxMTIsIDUwLCAxMTIsIDEwMSwgMTE0LCAxMTIsIDQyLCAxMDAs
IDExNywgMTE4LCA0OSwgNDYsIDEyMCwgNDMsIDEwMCwgMTEyLCA0OSwgMTEyLCAxMDEsIDExNCwg
MTEyLCA0MiwgMTAwLCAxMTcsIDExOCwgNTAsIDQ2LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCA5OCwgMTA1LCAxMTYsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwg
NjEsIDEwMCwgMTEyLCA1MCwgMTEyLCAxMDEsIDExNCwgMTEyLCA0MiwgMTAwLCAxMTcsIDExOCwg
NDksIDQ2LCAxMjEsIDQzLCAxMDAsIDExMiwgNDksIDExMiwgMTAxLCAxMTQsIDExMiwgNDIsIDEw
MCwgMTE3LCAxMTgsIDUwLCA0NiwgMTIxLCA1OSwgMTMsIDEwLCAxMTYsIDk3LCAxMTAsIDEwMywg
MTAxLCAxMTAsIDExNiwgNDIsIDYxLCAxMTYsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwg
ODMsIDExMiwgOTcsIDk5LCAxMDEsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDQ2LCAxMjAs
IDU5LCAxMywgMTAsIDk4LCAxMDUsIDExNiwgOTcsIDExMCwgMTAzLCAxMDEsIDExMCwgMTE2LCA0
MiwgNjEsIDExNiwgOTcsIDExMCwgMTAzLCAxMDEsIDExMCwgMTE2LCA4MywgMTEyLCA5NywgOTks
IDEwMSwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNDYsIDEyMSwgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwNSwgMTEwLCAxMTgsIDEwOSwgOTcsIDEyMCwgNjEs
IDEwNSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwMSwgMTE1LCAxMTMsIDExNCwgMTE2LCA0
MCwgMTA5LCA5NywgMTIwLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDExNiwgOTcsIDExMCwgMTAz
LCAxMDEsIDExMCwgMTE2LCA0NCwgMTE2LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDQx
LCA0NCwgMTAwLCAxMTEsIDExNiwgNDAsIDk4LCAxMDUsIDExNiwgOTcsIDExMCwgMTAzLCAxMDEs
IDExMCwgMTE2LCA0NCwgOTgsIDEwNSwgMTE2LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYs
IDQxLCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMy
LCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgMTE2LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYs
IDQyLCAxMDUsIDExMCwgMTE4LCAxMDksIDk3LCAxMjAsIDQ0LCA5OCwgMTA1LCAxMTYsIDk3LCAx
MTAsIDEwMywgMTAxLCAxMTAsIDExNiwgNDIsIDEwNSwgMTEwLCAxMTgsIDEwOSwgOTcsIDEyMCwg
NDQsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMTcsIDExNCwg
OTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MCwgMTA5LCA5NywgMTE2LCA1MSwgMzIs
IDk5LCAxMTEsIDExNiwgOTcsIDExMCwgMTAzLCAxMDEsIDExMCwgMTE2LCA3MCwgMTE0LCA5Nywg
MTA5LCAxMDEsIDQ0LCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE3LCAxMTgsIDQxLCAxMywgMTAs
IDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTEyLCAxMDEs
IDExNCwgMTE2LCAxMTcsIDExNCwgOTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MCwg
OTksIDExMSwgMTE2LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDcwLCAxMTQsIDk3LCAx
MDksIDEwMSwgNDQsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNDAsIDk4LCAx
MTcsIDEwOSwgMTEyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA0NCwgMTE3LCAx
MTgsIDQxLCA0NiwgMTIwLCAxMjEsIDEyMiwgNDQsIDExOCwgNjYsIDExNywgMTA5LCAxMTIsIDcz
LCAxMTAsIDEwMiwgMTExLCAxMTUsIDQ2LCAxMjEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMiwgMTAxLCAxMTQsIDExNiwgMTE3LCAxMTQsIDk4
LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCA5
OSwgMTExLCAxMTYsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgNzAsIDExNCwgOTcsIDEw
OSwgMTAxLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAz
MiwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMTcsIDExNCwgOTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5
NywgMTA4LCA0MCwgOTksIDExMSwgMTE2LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDcw
LCAxMTQsIDk3LCAxMDksIDEwMSwgNDQsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAxMTgs
IDY2LCAxMTcsIDEwOSwgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0NiwgMTIxLCA0MSwg
NTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCA5OSwgMTExLCAx
MTYsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgOTUsIDEwMiwgMTE0LCA5NywgMTA5LCAx
MDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4
LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMiwgNDQsIDExOCwgMTAxLCA5OSwgNTAsIDMy
LCAxMTcsIDExOCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCA5OSwgMTExLCAxMTYsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwg
OTUsIDEwMiwgMTE0LCA5NywgMTA5LCAxMDEsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAx
MDgsIDQ0LCAxMTIsIDQ0LCAxMTcsIDExOCwgNDQsIDExOCwgODQsIDk3LCAxMTAsIDEwMywgMTAx
LCAxMTAsIDExNiwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAx
MTUsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
MiwgOTcsIDExNCwgOTcsIDEwOCwgMTA4LCA5NywgMTIwLCA2NywgMTExLCAxMTQsIDExNCwgMTAx
LCA5OSwgMTE2LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDAsIDMyLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE4LCAxMDEsIDExNCwgMTE2LCAxMDEsIDEyMCwgODAsIDExMSwgMTE1LCA0
NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMSwgMTE0LCAxMDUsIDEwMywgODYsIDEwMSwgOTks
IDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExNywgOTgsIDEwMSwgODMsIDEwNSwgMTIy
LCAxMDEsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExNywgOTgsIDEwMSwgODAsIDEx
MSwgMTE1LCAzMiwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEw
NSwgMTEwLCAxMTgsIDc5LCAxMTQsIDEwNSwgMTAzLCA4NiwgMTAxLCA5OSwgNjEsIDExOCwgMTAx
LCA5OSwgNTEsIDQwLCA0OSwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwgNDQsIDQ5LCA0NiwgNDgs
IDQxLCA0NywgMTExLCAxMTQsIDEwNSwgMTAzLCA4NiwgMTAxLCA5OSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDEwNCwgOTcsIDEwOCwgMTAyLCA4MywgMTA1LCAxMjIsIDEwMSwg
NjEsIDk5LCAxMTcsIDk4LCAxMDEsIDgzLCAxMDUsIDEyMiwgMTAxLCA0MiwgNDgsIDQ2LCA1Mywg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0
LCAxMTUsIDEwMSwgOTksIDY1LCAxMTYsIDc3LCA5NywgMTIwLCA4MCwgMTA4LCA5NywgMTEwLCAx
MDEsIDYxLCA0MCwgOTksIDExNywgOTgsIDEwMSwgODAsIDExMSwgMTE1LCA0MywgMTA0LCA5Nywg
MTA4LCAxMDIsIDgzLCAxMDUsIDEyMiwgMTAxLCA0NSwgMTE4LCAxMDEsIDExNCwgMTE2LCAxMDEs
IDEyMCwgODAsIDExMSwgMTE1LCA0MSwgNDIsIDEwNSwgMTEwLCAxMTgsIDc5LCAxMTQsIDEwNSwg
MTAzLCA4NiwgMTAxLCA5OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwg
MTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDY1LCAxMTYsIDc3LCAxMDUsIDExMCwg
ODAsIDEwOCwgOTcsIDExMCwgMTAxLCA2MSwgNDAsIDk5LCAxMTcsIDk4LCAxMDEsIDgwLCAxMTEs
IDExNSwgNDUsIDEwNCwgOTcsIDEwOCwgMTAyLCA4MywgMTA1LCAxMjIsIDEwMSwgNDUsIDExOCwg
MTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDgwLCAxMTEsIDExNSwgNDEsIDQyLCAxMDUsIDExMCwg
MTE4LCA3OSwgMTE0LCAxMDUsIDEwMywgODYsIDEwMSwgOTksIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMDgsIDk3LCAxMTQsIDEwMywgMTAxLCAxMTUsIDExNiwgNzMsIDExMCwg
MTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgMTA1LCAx
MTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNjUsIDExNiwgNzcsIDk3LCAxMjAsIDgw
LCAxMDgsIDk3LCAxMTAsIDEwMSwgNDQsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEw
MSwgOTksIDY1LCAxMTYsIDc3LCAxMDUsIDExMCwgODAsIDEwOCwgOTcsIDExMCwgMTAxLCA0MSwg
NTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMTUsIDEx
NiwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDEwOSwgMTA1LCAxMTAsIDQwLCAxMDksIDEwNSwgMTEw
LCA0MCwgMTA4LCA5NywgMTE0LCAxMDMsIDEwMSwgMTE1LCAxMTYsIDczLCAxMTAsIDExNiwgMTAx
LCAxMTQsIDExNSwgMTAxLCA5OSwgNDYsIDEyMCwgNDQsIDEwOCwgOTcsIDExNCwgMTAzLCAxMDEs
IDExNSwgMTE2LCA3MywgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDQ2LCAxMjEs
IDQxLCA0NCwgMTA4LCA5NywgMTE0LCAxMDMsIDEwMSwgMTE1LCAxMTYsIDczLCAxMTAsIDExNiwg
MTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNDYsIDEyMiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCAxMTYs
IDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA4MywgNjEsIDExOCwg
MTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDgwLCAxMTEsIDExNSwgNDMsIDExMSwgMTE0LCAxMDUs
IDEwMywgODYsIDEwMSwgOTksIDQyLCAxMDAsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDUsIDEx
MCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCAxMTYsIDgwLCAxMTEsIDExNSwgMTA1LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDg3LCA4MywgNDUsIDk5LCAxMTcsIDk4LCAxMDEsIDgwLCAxMTEs
IDExNSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwg
MTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNzAsIDEwNSwgMTIwLCAxMDEsIDEwMCwgNjks
IDExMywgMTE3LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCAxMDMsIDExNywgMTA4
LCA5NywgMTE0LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTks
IDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAx
MDksIDk3LCAxMDgsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDExNCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTExLCAxMTAsIDYxLCA5NywgMTE2LCA5NywgMTEw
LCA0MCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIy
LCA0NCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIw
LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgOTcsIDEx
NiwgNjEsIDk3LCA5OSwgMTExLCAxMTUsIDQwLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDQ2LCAxMjEsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUw
LCAzMiwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEw
MCwgMTE1LCA2MSwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDEwOCwgMTExLCAxMTAsIDQ0LCAxMDgs
IDk3LCAxMTYsIDQxLCA0MiwgODIsIDY5LCA2NywgNzMsIDgwLCA4MiwgNzksIDY3LCA2NSwgNzYs
IDk1LCA4MCwgNzMsIDUwLCA0MiwgNTAsIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDExNSwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3
LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDYsIDEyMCwgNDIsIDQ4LCA0NiwgNTMsIDQzLCA0
OCwgNDYsIDUzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE2LCA2
MSwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwg
MTE1LCA0NiwgMTIxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAz
MiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNSwgNDQsIDExNiwgNDQsIDQ4LCA0MSwgNTksIDEz
LCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDEx
MiwgMTE3LCAxMTYsIDEwMSwgNzcsIDEwNSwgMTE0LCAxMTQsIDExMSwgMTE0LCAxMDEsIDEwMCwg
NzAsIDEwNSwgMTIwLCAxMDEsIDEwMCwgNjksIDExMywgMTE3LCAxMDUsIDExNCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCAxMDMsIDExNywgMTA4LCA5NywgMTE0LCA2NywgMTExLCAxMTEsIDExNCwg
MTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAx
MDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0
LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0MSwg
MTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTEx
LCAxMTAsIDYxLCA5NywgMTE2LCA5NywgMTEwLCA0MCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIyLCA0NCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIwLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDEwOCwgOTcsIDExNiwgNjEsIDk3LCA5OSwgMTExLCAxMTUsIDQwLCAx
MDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjEsIDQxLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQs
IDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE4LCAxMDEsIDk5LCA1MCwg
NDAsIDEwOCwgMTExLCAxMTAsIDQ0LCAxMDgsIDk3LCAxMTYsIDQxLCA0MiwgODIsIDY5LCA2Nywg
NzMsIDgwLCA4MiwgNzksIDY3LCA2NSwgNzYsIDk1LCA4MCwgNzMsIDUwLCA0MiwgNTAsIDQ2LCA0
OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgNjEsIDExNSwg
MTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDYs
IDEyMCwgNDIsIDQ4LCA0NiwgNTMsIDQzLCA0OCwgNDYsIDUzLCA1OSwgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgMTE2LCA2MSwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEw
MSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NiwgMTIxLCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ5LCA0
NiwgNDgsIDQ1LCAxMTUsIDQ0LCAxMTYsIDQ0LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAx
MDEsIDY5LCAxMTMsIDExNywgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgMTAzLCAx
MTcsIDEwOCwgOTcsIDExNCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAx
MDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEs
IDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTIxLCAx
MDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMDksIDk3LCAx
MTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCA5NywgMTA5LCAxMDEsIDExNCwgOTcsIDg0LCAxMTEs
IDg2LCAxMDEsIDExNCwgMTE2LCAxMDEsIDEyMCwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcs
IDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTEx
LCAxMTUsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NSwgMTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1
LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTQsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAx
MDEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgNDAsIDk5LCA5NywgMTA5
LCAxMDEsIDExNCwgOTcsIDg0LCAxMTEsIDg2LCAxMDEsIDExNCwgMTE2LCAxMDEsIDEyMCwgNDQs
IDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEs
IDQxLCA1OSwgMTMsIDEwLCAxMTQsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEs
IDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExNCwgNDQsIDQ4LCA0MSwgNDEs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDExMSwgMTEwLCA2
MSwgOTcsIDExNiwgOTcsIDExMCwgNDAsIDExNCwgNDYsIDEyMiwgNDQsIDExNCwgNDYsIDEyMCwg
NDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDk3LCAxMTYs
IDYxLCA5NywgOTksIDExMSwgMTE1LCA0MCwgMTE0LCA0NiwgMTIxLCA0MSwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAx
MTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCAxMDgsIDEx
MSwgMTEwLCA0NCwgMTA4LCA5NywgMTE2LCA0MSwgNDIsIDgyLCA2OSwgNjcsIDczLCA4MCwgODIs
IDc5LCA2NywgNjUsIDc2LCA5NSwgODAsIDczLCA1MCwgNDIsIDUwLCA0NiwgNDgsIDU5LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDYxLCAxMTUsIDExMiwgMTA0LCAx
MDEsIDExNCwgMTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ2LCAxMjAsIDQyLCA0
OCwgNDYsIDUzLCA0MywgNDgsIDQ2LCA1MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDExNiwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEs
IDExMSwgMTE0LCAxMDAsIDExNSwgNDYsIDEyMSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTUsIDQ0LCAxMTYsIDQ0
LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
OTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQs
IDEwNSwgOTksIDk3LCAxMDgsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwg
MTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0
NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTEx
LCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwg
MTAxLCAxMTksIDQ0LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0
MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgMTA1LCAx
MDEsIDExOSwgNjgsIDEwNSwgMTE0LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAx
MDUsIDEyMiwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExOCwgMTA1LCAxMDEsIDEx
OSwgNDIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQxLCA0MSwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNzgsIDEx
MSwgMTE0LCAxMDksIDk3LCAxMDgsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEw
NSwgMTIyLCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5
LCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDQ4LCA0NiwgNDgsIDQxLCA0MSwgNDEsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgNDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA0NCwg
MTE4LCAxMDUsIDEwMSwgMTE5LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDU5LCAx
MywgMTAsIDExNCwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAs
IDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTE0LCA0NCwgNDgsIDQxLCA0MSwgNTksIDEzLCAx
MCwgMTE0LCA0NiwgMTIyLCA2MSwgMTE0LCA0NiwgMTIyLCA0NSwgNDksIDQ2LCA0OCwgNTksIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOSwgNjEsIDUwLCA0NiwgNDgsIDQy
LCAxMDgsIDEwMSwgMTEwLCAxMDMsIDExNiwgMTA0LCA0MCwgMTE0LCA0MSwgNTksIDEzLCAxMCwg
MTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAx
MTQsIDQ2LCAxMjAsIDQ3LCAxMDksIDQzLCA0OCwgNDYsIDUzLCA0NCwgNDksIDQ2LCA0OCwgNDUs
IDExNCwgNDYsIDEyMSwgNDcsIDEwOSwgNDUsIDQ4LCA0NiwgNTMsIDQ0LCA0OCwgNDEsIDU5LCAx
MywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAx
MTIsIDExNywgMTE2LCAxMDEsIDgwLCAxMDgsIDk3LCAxMTAsIDk3LCAxMTQsIDY3LCAxMTEsIDEx
MSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0
LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwg
MTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEy
MCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEw
NSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgNjEsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4
MCwgMTExLCAxMTUsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NSwgMTAxLCAxMjEsIDEwMSwgODAsIDEx
MSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExMCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAx
LCA5OSwgMTE2LCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDQ0LCAxMTks
IDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCA0MSwg
NTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5
OSwgNTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDEx
MCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwg
OTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NCwgNDksIDQxLCA0MSwgNTksIDEzLCAxMCwg
MTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3
LCAxMTYsIDEwMSwgNjcsIDExNywgOTgsIDEwNSwgOTksIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAs
IDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwg
ODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEw
OCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDEzLCAx
MCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTks
IDY4LCAxMDUsIDExNCwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIs
IDEwMSwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ2LCAxMjAs
IDEyMSwgMTIyLCA0NSwgMTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1
LCAxMTEsIDExMCwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTEx
LCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgNDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA0NCwgMTE5LCAxMTEsIDEx
NCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwgNTksIDEzLCAxMCwg
OTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDEx
NCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCA5OSwgMTExLCAxMTEs
IDExNCwgMTAwLCAxMTUsIDQ0LCA0OCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2
LCAxMTcsIDExNCwgMTEwLCAzMiwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA1OSwgMTMs
IDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEy
LCAxMTcsIDExNiwgMTAxLCA2NywgMTE3LCA5OCwgMTA1LCA5OSwgNzYsIDExMSwgOTksIDk3LCAx
MDgsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMy
LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcs
IDEwOCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAx
MTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEx
NCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwgMTAy
LCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDEwNSwgMTIyLCAxMDEsIDQ0
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQx
LCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCAxMDUsIDEw
MSwgMTE5LCA2OCwgMTA1LCAxMTQsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEw
NSwgMTIyLCAxMDEsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0
NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDEwMSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
OTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgNDQsIDExOSwg
MTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDU5LCAx
MywgMTAsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExMiwgOTcsIDExNCwgOTcs
IDEwOCwgMTA4LCA5NywgMTIwLCA2NywgMTExLCAxMTQsIDExNCwgMTAxLCA5OSwgMTE2LCA3OCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwg
MTExLCAxMTUsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NCwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwg
MTE1LCA0NCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDgzLCAxMDUsIDEyMiwgMTAxLCA0NCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQx
LCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTgsIDEwMSwg
OTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAs
IDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDQsIDQ4LCA0MSwgNDEsIDU5LCAxMywgMTAs
IDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTExLCAxMTEsIDExNCwgMTAw
LCAxMTUsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTks
IDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDEx
OCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1
LCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNDQsIDEwOSwg
OTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMywgMTAsIDEyMywgMTMs
IDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwg
NDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDQyLCAx
MTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0MSwgNDEsIDU5LCAxMywgMTAs
IDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDEx
NywgMTE2LCAxMDEsIDgzLCAxMDcsIDEyMSwgNjYsIDExMSwgMTIwLCA2NywgMTExLCAxMTEsIDEx
NCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEyLCAxMTEsIDExNSwgMTA1
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDEx
NywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIw
LCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExMiwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA4NywgNDQsIDQ4LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDgy
LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEx
MSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0
LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwg
MTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDEzLCAx
MCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTEx
LCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjcsIDExNywgOTgsIDEwNSwgOTksIDY3LCAxMTEs
IDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTEx
LCAxMTUsIDQ0LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3
LCAxMDgsIDQ0LCAxMTgsIDY5LCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1
LCAxMTEsIDExMCwgNDYsIDEyMCwgMTIxLCAxMjIsIDQ0LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEw
MSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2
OSwgNzgsIDg0LCA5NSwgNjgsIDY5LCA3MCwgNzMsIDc4LCA3MywgODQsIDczLCA3OSwgNzgsIDgz
LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwg
OTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTExLCAxMTcs
IDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMDMsIDEwOCwgNzAsIDExNCwgOTcsIDEw
MywgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEwLCAxMTgsIDExMSwgMTA1LCAxMDAsIDMy
LCAxMDksIDk3LCAxMDUsIDExMCwgNDAsIDExOCwgMTExLCAxMDUsIDEwMCwgNDEsIDMyLCAxMjMs
IDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUsIDgz
LCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA5NSwgNzcs
IDY1LCA3MywgNzgsIDk1LCA2NiwgNjksIDcxLCA3MywgNzgsIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDg3LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUs
IDEyMiwgMTAxLCA0MCwgMTE4LCA2OSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NSwgMTE4LCA4MCwgMTExLCAxMTUs
IDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA2MSwgMTEwLCAxMTEs
IDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE4LCA3OCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgODcsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwg
MTE3LCAxMTgsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNjEsIDExOCwgMTAxLCA5OSwg
NTAsIDQwLCA0OCwgNDYsIDQ4LCA0NCwgNDgsIDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDgzLCA5
OSwgOTcsIDEwOCwgMTAxLCA2MSwgNDksIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2
LCA1MSwgMzIsIDg0LCA2NiwgNzgsIDYxLCA5OSwgMTExLCAxMTYsIDk3LCAxMTAsIDEwMywgMTAx
LCAxMTAsIDExNiwgOTUsIDEwMiwgMTE0LCA5NywgMTA5LCAxMDEsIDQwLCAxMTAsIDExMSwgMTE0
LCAxMDksIDk3LCAxMDgsIDg3LCA0MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4Mywg
OTksIDk3LCAxMDgsIDEwMSwgNDQsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAx
MTEsIDExMCwgODcsIDQ0LCAxMTgsIDY2LCAxMTcsIDEwOSwgMTEyLCA4NSwgODYsIDQxLCA1OSwg
MTMsIDEwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA2MSwgMTEyLCAxMDEsIDEx
NCwgMTE2LCAxMTcsIDExNCwgOTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MCwgODQs
IDY2LCA3OCwgNDQsIDExOCwgNjYsIDExNywgMTA5LCAxMTIsIDg1LCA4NiwgNDMsIDExNywgMTE4
LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDEwOCwgOTgs
IDEwMSwgMTAwLCAxMTEsIDYxLCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA2Nywg
MTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA2MSwgMTE4LCA2NSwg
MTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDk3LCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgOTcsIDEwOCwgOTgsIDEwMSwgMTAwLCAx
MTEsIDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA2MSwgMTE2LCAxMDEsIDEyMCwg
MTE2LCAxMTcsIDExNCwgMTAxLCA0MCwgOTcsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDgzLCA5
NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQ0LCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEw
MCwgMTExLCA4NSwgODYsIDQzLCAxMTcsIDExOCwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2
LCA0MSwgNTksIDEzLCAxMCwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDEw
OCwgOTgsIDEwMSwgMTAwLCAxMTEsIDQyLCA2MSwgMTE2LCAxMTEsIDc2LCAxMDUsIDExMCwgMTAx
LCA5NywgMTE0LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDk3LCAxMDgsIDk4LCAxMDEsIDEw
MCwgMTExLCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNDYsIDExNCwgMTAzLCA5
OCwgNDEsIDU5LCAxMywgMTAsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAx
MDgsIDk4LCAxMDEsIDEwMCwgMTExLCA0MiwgNjEsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAw
LCAxMTEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDQ2LCAxMjEsIDU5LCAxMywgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3Nywg
OTUsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgOTUsIDg1LCA4MCwgNjgsIDY1LCA4
NCwgNjksIDk1LCA2NSwgNzYsIDY2LCA2OSwgNjgsIDc5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4
MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgOTUsIDg1LCA4MCwgNjgsIDY1LCA4NCwgNjksIDk1
LCA2NSwgNzYsIDgwLCA3MiwgNjUsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDc3
LCA2OSwgNzgsIDg0LCA5NSwgNjYsIDY5LCA3MCwgNzksIDgyLCA2OSwgOTUsIDc2LCA3MywgNzEs
IDcyLCA4NCwgODMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk3LCAxMDksIDk4LCAx
MDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAx
MTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDks
IDQ2LCA0NCwgNDksIDQ2LCA0NCwgNDksIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEw
OCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDc3LCA5
NywgMTEyLCA2MSwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA0MCwgOTcsIDEw
OSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDEx
NCwgNDQsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgODUsIDg2LCA0Mywg
MTE3LCAxMTgsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDEsIDQ2LCAxMTQsIDEwMywg
OTgsIDQyLCAxMTgsIDY1LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDczLCAxMTAsIDEw
MiwgMTExLCAxMTUsIDQ2LCAxMjEsIDU5LCAxMywgMTAsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwg
MTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY3LCAx
MTEsIDEwOCwgMTExLCAxMTQsIDc3LCA5NywgMTEyLCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAs
IDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAx
MTUsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDc3LCA5NywgMTEyLCA0
NiwgMTE0LCA0NCwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwg
MTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNzcs
IDk3LCAxMTIsIDQ2LCAxMTQsIDQ0LCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3
OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDEx
MSwgMTE0LCA3NywgOTcsIDExMiwgNDYsIDExNCwgNDEsIDU5LCAxMywgMTAsIDk3LCAxMDksIDk4
LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTEx
LCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCAxMDksIDEwNSwgMTIwLCA0MCwgOTcs
IDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwg
MTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDk3LCAxMDksIDk4LCAx
MDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAx
MTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDc3LCA5NywgMTEyLCA0NCwgMTE4LCA2NSwgMTA5
LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0NiwgMTIy
LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOSwgMTA1LCA5
OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjEsIDExOCwgODIs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3
LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCA5NywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDEx
MSwgMTE0LCA2MSwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
OCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA5
OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEwOSwgMTAxLCAxMTYsIDk3LCAx
MDgsIDEwOCwgMTA1LCA5OSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwg
MTE1LCA2MSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgODIsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDQ2LCAxMTQsIDEwMywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIs
IDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDc3LCAxMDEsIDExNiwgOTcsIDEwOCwg
MTA4LCAxMDUsIDk5LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA3NywgOTcsIDExMiwgNjEsIDEx
NiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgODMsIDk3LCAxMDksIDExMiwg
MTA4LCAxMDEsIDExNCwgNDQsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDg1LCA4NiwgNDMsIDExNywgMTE4LCA3OSwgMTAyLCAx
MDIsIDExNSwgMTAxLCAxMTYsIDQxLCA1OSwgMTMsIDEwLCAxMDksIDEwMSwgMTE2LCA5NywgMTA4
LCAxMDgsIDEwNSwgOTksIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDEx
NSwgNDYsIDExNCwgNDIsIDYxLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3Nywg
MTAxLCAxMTYsIDk3LCAxMDgsIDEwOCwgMTA1LCA5OSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwg
NzcsIDk3LCAxMTIsIDQ2LCA5OCwgNTksIDEzLCAxMCwgMTA5LCAxMDEsIDExNiwgOTcsIDEwOCwg
MTA4LCAxMDUsIDk5LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUs
IDQ2LCAxMDMsIDQyLCA2MSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNzcsIDEw
MSwgMTE2LCA5NywgMTA4LCAxMDgsIDEwNSwgOTksIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDc3
LCA5NywgMTEyLCA0NiwgMTAzLCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwg
NzcsIDY5LCA3OCwgODQsIDk1LCA4NSwgODAsIDY4LCA2NSwgODQsIDY5LCA5NSwgNzcsIDY5LCA4
NCwgNjUsIDc2LCA3NiwgNzMsIDY3LCA4MiwgNzksIDg1LCA3MSwgNzIsIDc4LCA2OSwgODMsIDgz
LCAxMywgMTAsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5Nywg
OTksIDEwMSwgNjEsIDQ5LCA0NiwgNDgsIDQ1LCAxMDksIDEwMSwgMTE2LCA5NywgMTA4LCAxMDgs
IDEwNSwgOTksIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDYs
IDEwMywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk4LCA5NywgMTE1LCAxMDEs
IDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwg
MTAxLCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEw
LCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA2OCwgMTAxLCAxMDIsIDk3LCAx
MTcsIDEwOCwgMTE2LCA4MywgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgODIsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNjgsIDEwNSwgMTAx
LCAxMDgsIDEwMSwgOTksIDExNiwgMTE0LCAxMDUsIDk5LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwg
NDAsIDQ4LCA0NiwgNDgsIDUyLCA0NCwgNDgsIDQ2LCA0OCwgNTIsIDQ0LCA0OCwgNDYsIDQ4LCA1
MiwgNDEsIDU5LCAxMywgMTAsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAx
MDgsIDk4LCAxMDEsIDEwMCwgMTExLCA2MSwgMTA5LCAxMDUsIDEyMCwgNDAsIDk4LCA5NywgMTE1
LCAxMDEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDQyLCA0MCwg
NDksIDQ2LCA0OCwgNDUsIDY4LCAxMDEsIDEwMiwgOTcsIDExNywgMTA4LCAxMTYsIDgzLCAxMTIs
IDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2OCwgMTA1LCAxMDEsIDEwOCwgMTAxLCA5OSwgMTE2LCAx
MTQsIDEwNSwgOTksIDQ2LCAxMTQsIDQxLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ4LCA0
NiwgNDQsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDEsIDQ0LCAxMDksIDEwMSwgMTE2LCA5NywgMTA4
LCAxMDgsIDEwNSwgOTksIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDEx
NSwgNDYsIDExNCwgNDEsIDU5LCAxMywgMTAsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAx
MDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwg
MTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgMTA5LCAxMDUsIDEyMCwgNDAsIDY4LCAx
MDEsIDEwMiwgOTcsIDExNywgMTA4LCAxMTYsIDgzLCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5
NywgMTE0LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAx
LCA2OCwgMTA1LCAxMDEsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMTQsIDEwNSwgOTksIDQ0LCA5OCwg
OTcsIDExNSwgMTAxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwgMTA5LCAxMDEsIDExNiwg
OTcsIDEwOCwgMTA4LCAxMDUsIDk5LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwg
MTE1LCAxMTUsIDQ2LCAxMTQsIDQxLCA1OSwgMTMsIDEwLCAxMDksIDEwNSwgOTksIDExNCwgMTEx
LCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywg
MTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAx
MTQsIDEwMiwgOTcsIDk5LCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNjEs
IDQ5LCA0NiwgNDUsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5
NywgOTksIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAx
MDAsIDExMSwgMTE2LCA4NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEw
MCwgNjEsIDEwMCwgMTExLCAxMTYsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3
LCA0NCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgODcsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA2MSwgOTcsIDk4LCAxMTUsIDY5LCAxMTIsIDExNSwg
NDAsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEy
LCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5
NywgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA2MSwgOTksIDExMSwgMTEwLCAxMTgsIDEwMSwgMTE0
LCAxMTYsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgODQsIDEx
MSwgNjUsIDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwgMTExLCAxMTIsIDEw
MSwgNDAsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgNjUsIDY1LCA4MiwgMTExLCAxMTcsIDEw
MywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDEx
NSwgNjEsIDEwMywgMTAxLCAxMTYsIDY1LCA2NSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEw
LCAxMDEsIDExNSwgMTE1LCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCAxMTUsIDQwLCAxMTAs
IDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDEsIDU5LCAx
MywgMTAsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDQzLCA2MSwgNjUsIDY1LCA4MiwgMTEx
LCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDcwLCA5NywgOTksIDExNiwgMTEx
LCAxMTQsIDExNSwgNDYsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEw
MSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4Miwg
OTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTE4LCAxMDEsIDk5LCA1MiwgNDAs
IDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDEsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAx
MTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAx
MTAsIDk5LCAxMDEsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDgsIDQ2LCA0NCwgNDgsIDQ2
LCA0NCwgNDgsIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NiwgMTAxLCA5OSwg
MTE2LCAxMTEsIDExNCwgNjEsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMTEs
IDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTE4LCA4MCwgMTExLCAx
MTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNDQsIDQ5LCA0NiwgNDgsIDQxLCA0NCwg
MTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg2LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0
LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2LCA3OSwgNjgsIDYxLCAxMDMsIDEw
MSwgMTE2LCA3NiwgMTExLCAxMDAsIDcwLCAxMTQsIDExMSwgMTA5LCA2NSwgMTA4LCAxMTIsIDEw
NCwgOTcsIDcxLCA0MCwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA3NywgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcs
IDk5LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDQ2LCAxMjAsIDQ0LCA5NywgMTA4LCAx
MTIsIDEwNCwgOTcsIDcxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2LCA3OSwgNjgsIDYxLCAxMTQsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzYsIDc5LCA2OCwgNDIsIDExOCwgODIs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTks
IDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIs
IDExMSwgMTE1LCA0NiwgMTIxLCA0MywgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA3NywgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQs
IDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDQ2LCAxMjIsIDU5LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTEzLCAxMTcsIDEw
MSwgMTE1LCAxMTYsIDEwMSwgMTAwLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA3NiwgNzksIDY4LCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2LCA3OSwgNjgsIDU5LCAxMywgMTAsIDEwMSwgMTEwLCAx
MTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwg
MTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCA4
MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgMTExLCAx
MDAsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
ODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNDQsIDExNCwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUs
IDQ0LCAxMTQsIDEwMSwgMTEzLCAxMTcsIDEwMSwgMTE1LCAxMTYsIDEwMSwgMTAwLCA4MiwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgNzksIDY4LCA0MSwg
NTksIDEzLCAxMCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwg
MTEwLCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQ2LCAxMTQsIDEw
MywgOTgsIDYxLCAxMDIsIDExNCwgMTExLCAxMDksIDgyLCA3MSwgNjYsIDY4LCA0MCwgMTAxLCAx
MTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5Nywg
MTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTA1LCAxMTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA4
NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTQs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTEwLCAxMTEsIDExNCwg
MTA5LCA5NywgMTA4LCA4NywgNDQsIDQ4LCA0MSwgNDEsIDQ2LCAxMjAsIDEyMSwgMTIyLCA1OSwg
MTMsIDEwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAs
IDExNiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCA5
OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwg
MTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUs
IDk3LCAxMTAsIDk5LCAxMDEsIDQwLCAxMDUsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAx
MTAsIDk5LCAxMDEsIDg2LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA0MSwgNTksIDEzLCAxMCwg
MTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgy
LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQ2LCAxMTQsIDEwMywgOTgsIDQyLCA2
MSwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3
MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0NiwgMTIwLCA1OSwgMTMsIDEwLCAxMDEsIDExMCwgMTE4
LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEw
NSwgOTcsIDExMCwgOTksIDEwMSwgNDYsIDExNCwgMTAzLCA5OCwgNDIsIDYxLCAxMTgsIDgyLCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDEwMSwgMTEwLCAxMTgsIDEw
NSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA3MywgMTE0LCAxMTQsIDk3LCAx
MDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDIsIDYxLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2
LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDEw
OSwgOTcsIDEyMCwgNDAsIDEwOSwgOTcsIDEyMCwgNDAsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcs
IDk5LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUs
IDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCA0NCwgMTE1LCAxMTcs
IDExNCwgMTAyLCA5NywgOTksIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMDMs
IDQxLCA0NCwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgODIsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDQ2LCA5OCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwg
NTcsIDQ4LCA2MSwgMTAyLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA3MSwgMTE0LCA5
NywgMTIyLCAxMDUsIDExMCwgMTAzLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5
NywgMTEwLCA5OSwgMTAxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE1
LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0
LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgsIDYxLCAxMTUsIDExNywgMTE0
LCAxMDIsIDk3LCA5OSwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAz
LCA5OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNSwgMTEyLCAxMDEsIDk5
LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEw
OSwgMTAxLCAxMTAsIDExNiwgODIsIDU3LCA0OCwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0
OSwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwgNDQsIDQ5LCA0NiwgNDgsIDQxLCA0MiwgMTE0LCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAx
MTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNjEsIDEwMywg
MTAxLCAxMTYsIDY2LCA4MiwgNjgsIDcwLCA3NiwgMTExLCAxMTEsIDEwNywgMTE3LCAxMTIsIDQw
LCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDQ0LCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEw
LCAxMDEsIDExNSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEw
MSwgMTEwLCAxMDEsIDExNCwgMTAzLCAxMjEsIDY3LCAxMTEsIDExMCwgMTE1LCAxMDEsIDExNCwg
MTE4LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCA2
MSwgMTAzLCAxMDEsIDExNiwgNjksIDExMCwgMTAxLCAxMTQsIDEwMywgMTIxLCA2NywgMTExLCAx
MTAsIDExNSwgMTAxLCAxMTQsIDExOCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzAsIDk3LCA5
OSwgMTE2LCAxMTEsIDExNCwgNDAsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDEx
NCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwg
ODIsIDQ4LCA0NCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwg
MTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNjYsIDk3LCAxMTUs
IDEwMSwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQ0LCA0
OCwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwg
MTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDExMiwgMTE0LCAxMDEs
IDczLCAxMTAsIDEwMiwgMTExLCA1OSwgMTMsIDEwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwg
MTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCAxMDUsIDExMCwgMTAyLCAxMTEs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDEwNCwgOTcsIDEw
MCwgMTExLCAxMTksIDYxLCA0OSwgNDYsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1
LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMDMsIDEwMSwgMTE2LCA4MiwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3MCwgMTE0LCAxMTEs
IDEwOSwgNjYsIDgyLCA2OCwgNzAsIDc2LCAxMTEsIDExMSwgMTA3LCAxMTcsIDExMiwgNDAsIDEx
NSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDEx
NCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDQ4LCA0NCwgMTAxLCAxMTAsIDEx
OCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwg
MTAyLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAxMDks
IDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc3LCAxMTEsIDExMCwgMTExLCA5OSwgMTA0LCAxMTQs
IDExMSwgMTA5LCAxMDEsIDYxLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwg
OTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwg
MTE0LCA0NiwgMTE0LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1
LCAxMDEsIDExMSwgNjEsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAx
MDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA3OSwgOTks
IDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA0MCwgOTcsIDEwOSwgOTgsIDEwNSwg
MTAxLCAxMTAsIDExNiwgNzcsIDExMSwgMTEwLCAxMTEsIDk5LCAxMDQsIDExNCwgMTExLCAxMDks
IDEwMSwgNDQsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEw
OSwgMTEyLCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcs
IDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAx
LCAxMTAsIDExNiwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTks
IDEwMSwgNDIsIDYxLCAxMTUsIDEwMSwgMTExLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTAxLCAxMDQsIDExMSwgNjEsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAx
MTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA3MiwgMTExLCAxMTQsIDEwNSwgMTIyLCAxMTEs
IDExMCwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNDAsIDQ1LCAx
MTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA4NywgNDQsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDQxLCA1OSwgMTMs
IDEwLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwg
MTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQyLCA2MSwgMTAxLCAxMDQsIDExMSwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgs
IDczLCAxMTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTAxLCAx
MTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQs
IDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEw
NSwgMTEwLCA5NywgMTA4LCA3MywgMTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTks
IDEwMSwgNDIsIDYxLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5
OCwgMTAxLCAxMDAsIDExMSwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDgyLCA5NywgMTAwLCAxMDUsIDk3
LCAxMTAsIDk5LCAxMDEsIDYxLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEw
OSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDYs
IDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODIsIDk3
LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDIsIDYxLCAxMTUsIDExMiwgMTAxLCA5OSwg
MTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDks
IDEwMSwgMTEwLCAxMTYsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAs
IDk5LCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDEwNSwgMTEw
LCA5NywgMTA4LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgOTksIDk3
LCAxMDgsIDEwMSwgMTAwLCA2MSwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODIsIDk3LCAxMDAs
IDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDIsIDExOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwg
MTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExNiwgMTIx
LCA0NiwgMTIyLCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4MiwgOTcsIDEw
MCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgOTksIDk3LCAxMDgsIDEwMSwgMTAwLCA0Miwg
NjEsIDEwMSwgMTEwLCAxMDEsIDExNCwgMTAzLCAxMjEsIDY3LCAxMTEsIDExMCwgMTE1LCAxMDEs
IDExNCwgMTE4LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA3MCwgOTcsIDk5LCAxMTYsIDExMSwg
MTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcs
IDEwOCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDYxLCAxMDAsIDEwNSwgMTAy
LCAxMDIsIDExNywgMTE1LCAxMDEsIDY2LCA5NywgMTE1LCAxMDEsIDU5LCAxMywgMTAsIDEwMiwg
MTA1LCAxMTAsIDk3LCAxMDgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA0Miwg
NjEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEw
MCwgMTExLCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5Nywg
MTA4LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNjEsIDEwOSwgOTcsIDEyMCwg
NDAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwg
MTAxLCA0NCwgNDgsIDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2
LCA2MSwgMTE4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA2NywgMTExLCAxMDgs
IDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NSwgMTA5LCA5
OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA0MiwgNjEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5
LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjks
IDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNjEsIDExOCwgNjksIDEwOSwgMTA1
LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUs
IDExOCwgMTAxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDYxLCAxMTYs
IDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDQwLCAxMDEsIDEwOSwgMTA1LCAxMTUsIDEx
NSwgMTA1LCAxMTgsIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNDQsIDEx
OCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgODUsIDg2LCA0MywgMTE3
LCAxMTgsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDEsIDQ2LCAxMTQsIDEwMywgOTgs
IDU5LCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY5LCAxMDksIDEwNSwgMTE1LCAx
MTUsIDEwNSwgMTE4LCAxMDEsIDQyLCA2MSwgMTE2LCAxMTEsIDc2LCAxMDUsIDExMCwgMTAxLCA5
NywgMTE0LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTE1
LCAxMDUsIDExOCwgMTAxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDQ2
LCAxMTQsIDEwMywgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2
OSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA0MiwgNjEsIDExOCwgNjksIDEw
OSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwg
NDYsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk3LCAxMDksIDk4LCAx
MDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAx
MTAsIDcwLCAxMTEsIDExNCwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDY4LCAxMDUsIDEw
MiwgMTAyLCAxMTcsIDExNSwgMTAxLCA2MSwgMTA5LCAxMDUsIDEyMCwgNDAsIDExOCwgMTAxLCA5
OSwgNTEsIDQwLCA0OSwgNDYsIDQxLCA0NCwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDEx
NiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4
LCAxMTEsIDExNCwgNDQsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzMs
IDExMCwgMTAyLCAxMTEsIDExNSwgNDYsIDExOSwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTIsIDMyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0
LCA2MSwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEw
OCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNDIsIDk3LCAxMDksIDk4LCAxMDUs
IDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAs
IDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDMyLCA0MywgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5
NywgMTA4LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNDIsIDk3LCAxMDksIDk4
LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTEx
LCAxMTAsIDcwLCAxMTEsIDExNCwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDY4LCAxMDUs
IDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA0MiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2
LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAx
MjEsIDQ2LCAxMjAsIDMyLCA0MywgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA3Mywg
MTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDIsIDk3LCAxMDksIDk4
LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTEx
LCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQyLCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAx
MTYsIDEyMSwgNDYsIDEyMiwgMzIsIDQzLCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgs
IDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCA5OSwgOTcsIDEwOCwgMTAx
LCAxMDAsIDMyLCA0MywgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2OSwgMTA5LCAx
MDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA0MiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwg
MTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2
LCAxMjEsIDQ2LCAxMjEsIDQ0LCAxMywgMTAsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNDEsIDU5
LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4
MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgOTUsIDY2
LCA2OSwgNzAsIDc5LCA4MiwgNjksIDk1LCA3MCwgNzksIDcxLCAxMywgMTAsIDEwMiwgMTA1LCAx
MTAsIDk3LCAxMDgsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCAxMDksIDk3LCAxMjAsIDQw
LCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwgNDgs
IDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDYxLCA5NywgMTEyLCAxMTIsIDEwOCwgMTIxLCA3MywgMTA5LCA5Nywg
MTAzLCAxMDEsIDgwLCAxMTQsIDExMSwgOTksIDEwMSwgMTE1LCAxMTUsIDEwNSwgMTEwLCAxMDMs
IDQwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwg
NTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcsIDExMSwgMTA4LCAxMTEsIDEx
NCwgNDYsIDk3LCA0MiwgNjEsIDExOCwgMTA1LCAxMTUsIDEwNSwgOTgsIDEwNSwgMTA4LCAxMDUs
IDExNiwgMTIxLCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3
OCwgODQsIDk1LCA2NiwgNjksIDcwLCA3OSwgODIsIDY5LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDY3
LCA3OSwgNzYsIDc5LCA4MiwgMTMsIDEwLCAxMDMsIDEwOCwgNzAsIDExNCwgOTcsIDEwMywgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwXS5tYXAoYyA9PiBTdHJpbmcu
ZnJvbUNoYXJDb2RlKGMpKS5qb2luKCIiKTsKK2NvbnN0IHZlcnRleFNoYWRlckdMU0wyID0gWzM1
LCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwNSwgMTExLCAxMTAsIDMyLCA1MiwgNTMsIDQ4LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MCwgNjYsIDgyLCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzYsIDY2LCA2OSwgNjgsIDc5
LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc3LCA2NiwgNzMsIDY5LCA3OCwgODQsIDY4
LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OSwgODAsIDY1LCA2NywgNzMsIDg0LCA4OSwgNjgsIDcz
LCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3NiwgODAsIDcyLCA2NSwgODQsIDY5LCA4MywgODQsIDg2
LCA2NSwgNzYsIDg1LCA2OSwgMzIsIDQ4LCA0NiwgNTIsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA4MCwgNjksIDY3LCA4NSwgNzYsIDY1LCA4MiwgNzksIDg2
LCA2OSwgODIsIDY1LCA3NiwgODAsIDcyLCA2NSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgODIsIDY1LCA2OCwgNzMsIDY1LCA3OCwgNjcsIDY5LCA3OSwgODYsIDY5
LCA4MiwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA2OSwgNzcsIDczLCA4MywgODMsIDczLCA4NiwgNjksIDY4LCA3MywgODIsIDY5
LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDg2LCA3MywgODQsIDg5
LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzYsIDc5LCA2OCwgNjYsIDY1LCA4MywgNjksIDY4
LCA3NywgNzMsIDY3LCA4MiwgNzksIDgzLCA3MCwgODUsIDgyLCA2NSwgNjcsIDY5LCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgNzMsIDY3LCA4MiwgNzksIDgz
LCA4NSwgODIsIDcwLCA2NSwgNjcsIDY5LCA3NywgNjUsIDgwLCA2OCwgNzMsIDgyLCA2OSwgNjcs
IDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgNjksIDc4LCA4NiwgNzMsIDgyLCA3OSwgNzgsIDc3LCA2OSwgNzgsIDg0LCA2NiwgODIs
IDY4LCA3MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDc5
LCA4MiwgNzcsIDY1LCA3NiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgNjYsIDg1LCA3NywgODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OCwgNzksIDgyLCA3
NywgNjUsIDc2LCA4OCwgODksIDgzLCA2NywgNjUsIDc2LCA2OSwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzYsIDczLCA3MSwgNzIsIDg0LCA3NywgNjUsIDgwLCA2
OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA3
OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwg
NzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA3NywgNjUsIDgwLCA5NSwgNTEsIDY4LCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3Niwg
NjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNzcsIDY1LCA4MCwgOTUsIDgzLCA3NSwgODksIDY2LCA3
OSwgODgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA4MCwg
NzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwgNzYsIDk1LCA3MiwgNjUsIDgyLCA3NywgNzksIDc4LCA3
MywgNjcsIDgzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4Miwg
NzEsIDY2LCA2OCwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2NSwgNjgsIDczLCA2NSwg
NzgsIDY3LCA2OSwgNzksIDY3LCA2NywgNzYsIDg1LCA4MywgNzMsIDc5LCA3OCwgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwg
NzgsIDc5LCA2NywgNjcsIDc2LCA4NSwgODMsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA4NSwgNzcsIDk1LCA2NiwgNzksIDc4LCA2OSwg
OTUsIDczLCA3OCwgNzAsIDc2LCA4NSwgNjksIDc4LCA2NywgNjksIDgyLCA4MywgMzIsIDQ4LCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NiwgMTExLCAxMTAsIDEw
MSwgMTE1LCA4MCwgMTAxLCAxMTQsIDc3LCAxMDEsIDExNSwgMTA0LCAzMiwgNDgsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA4NSwgNzcsIDk1LCA3NywgNzks
IDgyLCA4MCwgNzIsIDk1LCA3MywgNzgsIDcwLCA3NiwgODUsIDY5LCA3OCwgNjcsIDY5LCA4Miwg
ODMsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODYs
IDczLCA3MSwgNzgsIDY5LCA4NCwgODQsIDY5LCA2NiwgNzYsIDY5LCA3OCwgNjgsIDc3LCA3OSwg
NjgsIDY5LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgODksIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA2NSwgNzcsIDgwLCA3NiwgNjksIDgyLCA1MSwg
NjgsIDcxLCA4MiwgNjksIDY5LCA3OCwgNjgsIDY5LCA4MCwgODQsIDcyLCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNjUsIDc3LCA4MCwgNzYsIDY5LCA4Miwg
NTEsIDY4LCA2NiwgNzEsIDgyLCA3NywgNjUsIDgwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCA4NSwgODMsIDY5LCA4MCwgNzIsIDg5LCA4MywgNzMsIDY3LCA2NSwg
NzYsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzAsIDY1LCA3NiwgNzYsIDc5LCA3MCwgNzAsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDg0LCA4NywgNzksIDgzLCA3Mywg
NjgsIDY5LCA2OCwgNzYsIDczLCA3MSwgNzIsIDg0LCA3MywgNzgsIDcxLCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3OSwg
NjUsIDg0LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2
NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3OSwgNjUsIDg0LCA5NSwgNjYsIDg1LCA3
NywgODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3
OSwgNjUsIDg0LCA5NSwgODQsIDczLCA3OCwgODQsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgy
LCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3OCwgNzMsIDgzLCA3OSwgODQsIDgy
LCA3OSwgODAsIDczLCA2NywgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMs
IDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgNjYsIDgyLCA2OCwgNzAsIDk1LCA4NiwgOTUsIDcyLCA2OSwgNzMs
IDcxLCA3MiwgODQsIDk1LCA2NywgNzksIDgyLCA4MiwgNjksIDc2LCA2NSwgODQsIDY5LCA2OCwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzcsIDgzLCA5NSwgNjYs
IDgyLCA2OCwgNzAsIDk1LCA2OSwgNzgsIDY5LCA4MiwgNzEsIDg5LCA5NSwgNjcsIDc5LCA3OCwg
ODMsIDY5LCA4MiwgODYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDcyLCA2OSwgNjksIDc4LCA5NSwgODQsIDY5LCA4OCwg
ODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgODMsIDk1LCA4NCwg
NzIsIDczLCA2NywgNzUsIDc4LCA2OSwgODMsIDgzLCA2NSwgNzgsIDY4LCA3NywgNjUsIDgzLCA3
NSwgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0
LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgNjgsIDY5LCA2NiwgODUsIDcxLCA3NywgNzksIDY4LCA2OSwgMzIsIDQ4LCAxMCwgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDcyLCA2NSwgNjgsIDY5LCA4
MiwgOTUsIDc4LCA2NSwgNzcsIDY5LCAzMiwgMTE4LCAxMDEsIDExNCwgMTE2LCAxMDEsIDEyMCwg
NTgsIDExMiwgOTgsIDExNCwgMTAsIDExMiwgMTE0LCAxMDEsIDk5LCAxMDUsIDExNSwgMTA1LCAx
MTEsIDExMCwgMzIsIDEwNCwgMTA1LCAxMDMsIDEwNCwgMTEyLCAzMiwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1
LCAxMTYsIDEwMCwgNDksIDUyLCA0OCwgNDQsIDk5LCAxMTEsIDEwOCwgMTE3LCAxMDksIDExMCwg
OTUsIDEwOSwgOTcsIDEwNiwgMTExLCAxMTQsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAx
MTEsIDExNCwgMTA5LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQw
LCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA0OCwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEw
MCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwg
MTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgODMsIDk5LCAxMDEsIDExMCwgMTAxLCAxMywgMTAsIDEy
MywgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA4MCwg
MTE0LCAxMTEsIDEwNiwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAx
MDksIDk3LCAxMTYsIDUyLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA1OSwgMTMsIDEwLCAxMjUs
IDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAx
MTYsIDMyLCA2MSwgMzIsIDQ5LCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwg
MTAzLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0
LCAxMDksIDMyLCA3NywgOTcsIDExNiwgMTAxLCAxMTQsIDEwNSwgOTcsIDEwOCwgMTMsIDEwLCAx
MjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwg
MTAwLCAxMTEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTIsIDMyLCAxMTgsIDY1LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDczLCAxMTAs
IDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc5
LCAxMTIsIDk3LCA5OSwgMTA1LCAxMTYsIDEyMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjksIDEwOSwgMTA1LCAxMTUsIDEx
NSwgMTA1LCAxMTgsIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA5LCA5Nywg
MTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1
LCAxMTYsIDEyMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MCwgMzIsIDExOCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQsIDEw
MiwgOTcsIDk5LCAxMDEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDczLCAxMTAs
IDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDgy
LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDczLCAxMTAsIDEw
MiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgwLCAxMTEsIDExNSwg
MTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgz
LCAxMDUsIDEyMiwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2
NiwgMTE3LCAxMDksIDExMiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5
LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAx
MDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1
OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTExLCAxMTIsIDk3LCA5OSwgMTA1LCAx
MTYsIDEyMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcs
IDExNiwgNTIsIDMyLCAxMDEsIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNzcs
IDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMy
LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA5LCA5NywgMTEyLCA3NywgOTcsIDExNiwgMTE0
LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDks
IDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgzLCA5
NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1
OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTgsIDExNywgMTA5LCAxMTIsIDc3LCA5
NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwg
MTE4LCA4NCwgOTcsIDExMCwgMTAzLCAxMDEsIDExMCwgMTE2LCA4MywgMTEyLCA5NywgOTksIDEw
MSwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1
MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIs
IDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAx
MTYsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwg
MTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwg
MTE1LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTEyLCAxMTEsIDEw
NSwgMTEwLCAxMTYsIDgzLCAxMDUsIDEyMiwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUyLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwg
MTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExOCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEw
MSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1Miwg
MzIsIDExOCwgNjksIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2NSwgMTA5LCA5OCwg
MTA1LCAxMDEsIDExMCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2OCwgMTAxLCA5OCwgMTE3LCAxMDMsIDc3LCAxMTEs
IDEwMCwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4
LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAx
MTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwg
OTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODIsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEs
IDk3LCAxMTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDEx
NiwgNTIsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDc3LCA5
NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwg
MTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDY2LCAxMTcsIDEw
OSwgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0
LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA4MCwg
OTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwg
OTksIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA2NiwgMTE3LCAxMDksIDEx
MiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTIsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODQs
IDEwNSwgMTEwLCAxMTYsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEs
IDk3LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAxMTYsIDY4LCAxMDUsIDExNSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwg
MTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0LCAxMDUsIDEx
MCwgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYs
IDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4NCwgMTA1
LCAxMTAsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY1LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAx
MTEsIDExMiwgMTIxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NSwg
MTEwLCAxMDUsIDExNSwgMTExLCAxMTYsIDExNCwgMTExLCAxMTIsIDEyMSwgNzMsIDExMCwgMTAy
LCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAxMTAsIDEw
NSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEsIDExMiwgMTIxLCA3NywgOTcsIDExNiwgMTE0LCAx
MDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODMsIDEwNCwg
MTAxLCAxMDEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MCwgMzIsIDExOCwgODMsIDEwNCwgMTAxLCAxMDEsIDExMCwgNzMsIDExMCwgMTAy
LCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNSwgMTA0LCAx
MDEsIDEwMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA3NywgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwg
OTcsIDk5LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTIsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2
LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUw
LCAzMiwgMTE4LCA4NCwgMTA0LCAxMDUsIDk5LCAxMDcsIDExMCwgMTAxLCAxMTUsIDExNSwgNzMs
IDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEx
NiwgMTA0LCAxMDUsIDk5LCAxMDcsIDExMCwgMTAxLCAxMTUsIDExNSwgNzcsIDk3LCAxMTYsIDEx
NCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDg0LCAx
MDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEsIDExNSwgMTE1LCA4MCwgOTcsIDExNCwgOTcsIDEw
OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjgsIDEwNSwgMTAyLCAx
MDIsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwg
OTksIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODQsIDEwNSwg
MTEwLCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTcsIDk4LCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAx
MDEsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1
LCA5OSwgOTcsIDEwOCwgNzYsIDQ4LCA0OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5
LCA5NSwgNDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIs
IDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgNDgsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwg
OTksIDk3LCAxMDgsIDc2LCA0OSwgNDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwg
OTUsIDUwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAx
MDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDk1LCA0OSwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1
LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUw
LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0
LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA1MCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwg
OTcsIDEwOCwgODgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAx
MTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg5LCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5
NywgMTA4LCA5MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDEx
MiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODgsIDg4LCA5NSwgOTAsIDkwLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwg
MTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OSwgODksIDk1LCA5MCwgOTAsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTks
IDk3LCAxMDgsIDkwLCA5MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwg
ODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODgsIDg5LCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAx
MDUsIDk5LCA5NywgMTA4LCA4OSwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDkwLCA4OCwg
NTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYs
IDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA0OSwgNDQsIDMyLCA5OCwgMTA1LCAxMTAs
IDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDksIDQxLCAzMiwgMTE3LCAxMTAsIDEw
NSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgNzcsIDEwMSwgMTE1LCAxMDQsIDEzLCAxMCwgMTIz
LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwg
NTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOCwgMTA1LCAxMTUsIDEw
NSwgOTgsIDEwNSwgMTA4LCAxMDUsIDExNiwgMTIxLCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQs
IDc5LCA3NywgOTUsIDg2LCA2OSwgODIsIDg0LCA2OSwgODgsIDk1LCA2NiwgNjksIDcxLCA3Mywg
NzgsIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5
LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAxMDUsIDEx
MCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1
LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwg
MTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA0OSwgNDEs
IDMyLCAxMDUsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTAsIDExMSwgMTE0LCAx
MDksIDk3LCAxMDgsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgODAsIDczLCA2MSwgNTEsIDQ2LCA0OSwgNTIsIDQ5LCA1
MywgNTcsIDUwLCA1NCwgNTMsIDUxLCA1MywgNTYsIDU3LCA1NSwgNTcsIDUxLCA1MCwgNTEsIDU2
LCA1MiwgNTQsIDUwLCA1NCwgNTIsIDUxLCA1MSwgNTYsIDUxLCA1MCwgNTUsIDU3LCA1MywgNTks
IDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCA3NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgNjksIDExMCwgOTksIDExMSwgMTAw
LCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEy
MCwgNjEsIDUwLCA0NiwgNTAsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMy
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzEsIDk3LCAxMDksIDEwOSwgOTcsIDY5LCAx
MTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAx
MTIsIDExNCwgMTExLCAxMjAsIDYxLCA0OSwgNDYsIDQ4LCA0NywgNzYsIDEwNSwgMTEwLCAxMDEs
IDk3LCAxMTQsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA4MCwgMTExLCAxMTksIDEwMSwg
MTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDEx
MCwgMTE1LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgNzYsIDExNywgMTA5LCAxMDUs
IDExMCwgOTcsIDExMCwgOTksIDEwMSwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDY1LCAx
MTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0OCwgNDYs
IDUwLCA0OSwgNTAsIDU0LCA0NCwgNDgsIDQ2LCA1NSwgNDksIDUzLCA1MCwgNDQsIDQ4LCA0Niwg
NDgsIDU1LCA1MCwgNTAsIDQxLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAz
MiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDY5LCAxMTIsIDExNSwgMTA1LCAxMDgsIDEx
MSwgMTEwLCA2MSwgNDgsIDQ2LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OSwgNTksIDEzLCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCAxMTUsIDk3LCAxMTYsIDEx
NywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMjAsIDQxLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwg
MTEyLCA0MCwgMTIwLCA0NCwgNDgsIDQ2LCA0OCwgNDQsIDQ5LCA0NiwgNDgsIDQxLCAxMywgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgOTcsIDk4LCAxMTUsIDY5LCAx
MTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCA5NywgOTgsIDExNSwgNDAsIDEyMCwgNDEsIDQzLCA2
OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDEwOSwgOTcsIDEyMCwgNjksIDExMiwgMTE1LCA0MCwgMTIw
LCA0MSwgMzIsIDEwOSwgOTcsIDEyMCwgNDAsIDEyMCwgNDQsIDY5LCAxMTIsIDExNSwgMTA1LCAx
MDgsIDExMSwgMTEwLCA0MSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEw
MSwgMzIsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNjksIDExMiwgMTE1
LCA0MCwgMTIwLCA0MSwgMzIsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgNDAsIDEyMCwgNDQsIDY5
LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCA0NCwgNDksIDQ2LCA0OCwgNDEsIDEzLCAx
MCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDExNiwgMTE0LCA5NywgMTEwLCAxMTUsIDExMiwgMTEx
LCAxMTUsIDEwMSwgNzcsIDk3LCAxMTYsIDUxLCA0MCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDEw
NSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgNDgsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDkxLCA0OCwgOTMsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMDUsIDQ5LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5
MSwgNDksIDkzLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCA1MCwgNjEs
IDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgNTksIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDExMSwgMTE3LCAxMTYsIDc3LCA5NywgMTE2LCAx
MTQsIDEwNSwgMTIwLCA2MSwgMTA5LCA5NywgMTE2LCA1MSwgNDAsIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgNDAsIDEwNSwgNDgsIDQ2LCAxMjAsIDQ0LCAxMDUsIDQ5LCA0NiwgMTIwLCA0NCwg
MTA1LCA1MCwgNDYsIDEyMCwgNDEsIDQ0LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAx
MDUsIDQ4LCA0NiwgMTIxLCA0NCwgMTA1LCA0OSwgNDYsIDEyMSwgNDQsIDEwNSwgNTAsIDQ2LCAx
MjEsIDQxLCA0NCwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEy
MiwgNDQsIDEwNSwgNDksIDQ2LCAxMjIsIDQ0LCAxMDUsIDUwLCA0NiwgMTIyLCA0MSwgMTMsIDEw
LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExMSwg
MTE3LCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDEwNSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTUs
IDEwMSwgNzcsIDk3LCAxMTYsIDUxLCA0MCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDEwNSwgMTEw
LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA0OCwgNDgsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwgOTMsIDkxLCA0OCwgOTMsIDQ0LCA5NywgNDgsIDQ5
LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA5
MSwgNDksIDkzLCA0NCwgOTcsIDQ4LCA1MCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0
LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgOTEsIDUwLCA5MywgNTksIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDk3LCA0OSwgNDgsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMsIDkxLCA0OCwgOTMsIDQ0LCA5NywgNDksIDQ5LCA2
MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDksIDkzLCA5MSwg
NDksIDkzLCA0NCwgOTcsIDQ5LCA1MCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAx
MDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEsIDUwLCA5MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDk3LCA1MCwgNDgsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDEx
NCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkxLCA0OCwgOTMsIDQ0LCA5NywgNTAsIDQ5LCA2MSwg
MTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA5MSwgNDks
IDkzLCA0NCwgOTcsIDUwLCA1MCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUs
IDEyMCwgOTEsIDUwLCA5MywgOTEsIDUwLCA5MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDk4LCA0OCwgNDksIDYxLCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ5LCA0OSwg
NDUsIDk3LCA0OSwgNTAsIDQyLCA5NywgNTAsIDQ5LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgOTgsIDQ5LCA0OSwgNjEsIDQ1LCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ5
LCA0OCwgNDMsIDk3LCA0OSwgNTAsIDQyLCA5NywgNTAsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgOTgsIDUwLCA0OSwgNjEsIDk3LCA1MCwgNDksIDQyLCA5Nywg
NDksIDQ4LCA0NSwgOTcsIDQ5LCA0OSwgNDIsIDk3LCA1MCwgNDgsIDU5LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwMSwgMTE2LCA2MSwgOTcsIDQ4LCA0OCwgNDIs
IDk4LCA0OCwgNDksIDQzLCA5NywgNDgsIDQ5LCA0MiwgOTgsIDQ5LCA0OSwgNDMsIDk3LCA0OCwg
NTAsIDQyLCA5OCwgNTAsIDQ5LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwg
MTEwLCAzMiwgMTA5LCA5NywgMTE2LCA1MSwgNDAsIDk4LCA0OCwgNDksIDQ0LCA0MCwgNDUsIDk3
LCA1MCwgNTAsIDQyLCA5NywgNDgsIDQ5LCA0MywgOTcsIDQ4LCA1MCwgNDIsIDk3LCA1MCwgNDks
IDQxLCA0NCwgNDAsIDk3LCA0OSwgNTAsIDQyLCA5NywgNDgsIDQ5LCA0NSwgOTcsIDQ4LCA1MCwg
NDIsIDk3LCA0OSwgNDksIDQxLCA0NCwgMTMsIDEwLCA5OCwgNDksIDQ5LCA0NCwgNDAsIDk3LCA1
MCwgNTAsIDQyLCA5NywgNDgsIDQ4LCA0NSwgOTcsIDQ4LCA1MCwgNDIsIDk3LCA1MCwgNDgsIDQx
LCA0NCwgNDAsIDQ1LCA5NywgNDksIDUwLCA0MiwgOTcsIDQ4LCA0OCwgNDMsIDk3LCA0OCwgNTAs
IDQyLCA5NywgNDksIDQ4LCA0MSwgNDQsIDEzLCAxMCwgOTgsIDUwLCA0OSwgNDQsIDQwLCA0NSwg
OTcsIDUwLCA0OSwgNDIsIDk3LCA0OCwgNDgsIDQzLCA5NywgNDgsIDQ5LCA0MiwgOTcsIDUwLCA0
OCwgNDEsIDQ0LCA0MCwgOTcsIDQ5LCA0OSwgNDIsIDk3LCA0OCwgNDgsIDQ1LCA5NywgNDgsIDQ5
LCA0MiwgOTcsIDQ5LCA0OCwgNDEsIDQxLCA0NywgMTAwLCAxMDEsIDExNiwgNTksIDEzLCAxMCwg
MTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTYsIDExMSwgNzYsIDEwNSwgMTEw
LCAxMDEsIDk3LCAxMTQsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTEyLCAxMTEsIDExOSwgNDAsIDk5LCAx
MTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNzYsIDEwNSwgMTEw
LCAxMDEsIDk3LCAxMTQsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA4MCwgMTExLCAxMTks
IDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDQxLCA0MSwgNTksIDEzLCAx
MCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTYsIDExMSwgNzEsIDk3LCAx
MDksIDEwOSwgOTcsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTEyLCAxMTEsIDExOSwgNDAsIDk5LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNzEsIDk3LCAxMDksIDEw
OSwgOTcsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA4MCwgMTExLCAxMTksIDEwMSwgMTE0
LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDExMywgMTE3LCA5NywgMTE0
LCAxMDEsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4LCA5NywgMTA4LCAxMTcs
IDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAx
MTAsIDMyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA0MiwgMTE4LCA5NywgMTA4LCAxMTcsIDEw
MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MTIsIDExMSwgMTE5LCA1MywgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3
LCAxMDgsIDExNywgMTAxLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTE1LCAxMTMsIDYxLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA0MiwgMTE4LCA5
NywgMTA4LCAxMTcsIDEwMSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDEx
MCwgMzIsIDExNSwgMTEzLCA0MiwgMTE1LCAxMTMsIDQyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEw
MywgMTAxLCAxMTYsIDc2LCAxMTcsIDEwOSwgMTA1LCAxMTAsIDk3LCAxMTAsIDk5LCAxMDEsIDQw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAx
MCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTA4
LCA5NywgMTA5LCAxMTIsIDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgOTksIDExMSwgMTA4LCAxMTEs
IDExNCwgNDQsIDc2LCAxMTcsIDEwOSwgMTA1LCAxMTAsIDk3LCAxMTAsIDk5LCAxMDEsIDY5LCAx
MTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDQxLCA0
NCwgNDgsIDQ2LCA0NCwgNDksIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDMsIDEwMSwgMTE2LCA4MiwgOTcsIDExMCwgMTAwLCA0
MCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDEsIDMyLCAxMjMs
IDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwMiwgMTE0LCA5Nywg
OTksIDExNiwgNDAsIDExNSwgMTA1LCAxMTAsIDQwLCAxMDAsIDExMSwgMTE2LCA0MCwgMTE1LCAx
MDEsIDEwMSwgMTAwLCA0NiwgMTIwLCAxMjEsIDMyLCA0NCwgMTE4LCAxMDEsIDk5LCA1MCwgNDAs
IDQ5LCA1MCwgNDYsIDU3LCA1NiwgNTcsIDU2LCA0NCwgNTUsIDU2LCA0NiwgNTAsIDUxLCA1MSwg
NDEsIDQxLCA0MSwgNDIsIDUyLCA1MSwgNTUsIDUzLCA1NiwgNDYsIDUzLCA1MiwgNTMsIDUxLCA0
MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MDAsIDEwNSwgMTE2LCAxMDQsIDEwMSwgMTE0LCA0MCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEx
NSwgMTAxLCAxMDEsIDEwMCwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3
LCAxMTQsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjUsIDEwOSwgMTExLCAxMTcsIDExMCwgMTE2
LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCA5
NywgMTEwLCAxMDAsIDYxLCAxMDMsIDEwMSwgMTE2LCA4MiwgOTcsIDExMCwgMTAwLCA0MCwgMTE1
LCAxMDEsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDEwMCwgMTA1LCAxMTYsIDEwNCwgMTAxLCAxMTQsIDYxLCAxMDksIDEwNSwgMTIwLCA0MCwg
NDUsIDExOCwgOTcsIDExNCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDEx
NywgMTEwLCAxMTYsIDQ3LCA1MCwgNTMsIDUzLCA0NiwgNDgsIDQ0LCAxMTgsIDk3LCAxMTQsIDEw
NSwgOTcsIDExMCwgOTksIDEwMSwgNjUsIDEwOSwgMTExLCAxMTcsIDExMCwgMTE2LCA0NywgNTAs
IDUzLCA1MywgNDYsIDQ4LCA0NCwgMTE0LCA5NywgMTEwLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAwLCAxMDUsIDExNiwgMTA0LCAxMDEs
IDExNCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMy
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDMsIDk4LCAxMDAsIDc3LCA5Nywg
MTIwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDYxLCA1MCwgNTMsIDUzLCA0NiwgNDgsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTYsIDExMSwgODIsIDcxLCA2NiwgNjgsIDQw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDMyLCAx
MjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOSwgOTcsIDEyMCwgODIs
IDcxLCA2NiwgNjEsIDEwOSwgOTcsIDEyMCwgNjksIDExMiwgMTE1LCA0MCwgMTA5LCA5NywgMTIw
LCA0MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgNDQsIDEwOSwgOTcsIDEyMCwg
NDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMDMsIDQ0LCA5OSwgMTExLCAxMDgsIDEx
MSwgMTE0LCA0NiwgOTgsIDQxLCA0MSwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA2OCwgNjEsIDEwOSwgOTcsIDEyMCwgNDAsIDExNCwgMTAzLCA5OCwgMTAwLCA3
NywgOTcsIDEyMCwgODIsIDk3LCAxMTAsIDEwMywgMTAxLCA0NywgMTA5LCA5NywgMTIwLCA4Miwg
NzEsIDY2LCA0NCwgNDksIDQ2LCA0MSwgNTksIDEzLCAxMCwgNjgsIDYxLCA5OSwgMTA4LCA5Nywg
MTA5LCAxMTIsIDQwLCAxMDIsIDEwOCwgMTExLCAxMTEsIDExNCwgNDAsIDY4LCA0MSwgNDcsIDUw
LCA1MywgNTMsIDQ2LCA0OCwgNDQsIDQ4LCA0NiwgNDQsIDQ5LCA0NiwgNDEsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMywgOTgsIDYxLCA5OSwgMTExLCAxMDgsIDEx
MSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4LCA0MiwgNjgsIDU5LCAxMywgMTAsIDExNCwgMTAzLCA5
OCwgNjEsIDExNiwgMTExLCA3MSwgOTcsIDEwOSwgMTA5LCA5NywgODMsIDExMiwgOTcsIDk5LCAx
MDEsIDQwLCAxMTQsIDEwMywgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcs
IDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExNCwgMTAzLCA5OCwgNDQsIDY4
LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIs
IDExNCwgMTExLCAxMDksIDgyLCA3MSwgNjYsIDY4LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIs
IDExNCwgMTAzLCA5OCwgMTAwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTQsIDEwMywgOTgsIDEw
MCwgNDYsIDExNCwgMTAzLCA5OCwgNjEsIDExNiwgMTExLCA3NiwgMTA1LCAxMTAsIDEwMSwgOTcs
IDExNCwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDEx
NCwgMTAzLCA5OCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAs
IDMyLCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDExNCwgMTAzLCA5OCwgNDcsIDExNCwgMTAzLCA5
OCwgMTAwLCA0NiwgOTcsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDEx
MSwgMTE3LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMy
LCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDExMSwgMTE3LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNTks
IDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5
NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA0OSwgNDEsIDMyLCAxMTEsIDExNywg
MTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNzgsIDExMSwgMTE0LCAxMDksIDk3
LCAxMDgsIDg3LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAx
MDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDUwLCA0MSwg
MzIsIDExMSwgMTE3LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MCwgMTEx
LCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NSwgODYsIDg3LCA1OSwgMTMsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwg
NzcsIDk1LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4LCA5NSwgNjgsIDY5LCA3MCwgNzMsIDc4LCA3
MywgODQsIDczLCA3OSwgNzgsIDgzLCAxMywgMTAsIDExOCwgMTExLCAxMDUsIDEwMCwgMzIsIDEw
OSwgOTcsIDEwNSwgMTEwLCA0MCwgMTE4LCAxMTEsIDEwNSwgMTAwLCA0MSwgMzIsIDEyMywgMTMs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0
LCA3OSwgNzcsIDk1LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4LCA5NSwgNzcsIDY1LCA3MywgNzgs
IDk1LCA2NiwgNjksIDcxLCA3MywgNzgsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
MiwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NSwgMTEyLCAxMDAsIDk3LCAx
MTYsIDEwMSwgMTAwLCA2MSwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3
LCAxMDgsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAxLCAxMDAsIDYxLCAxMTAsIDExMSwgMTE0
LCAxMDksIDk3LCAxMDgsIDU5LCAxMywgMTAsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwg
MTA1LCAxMTEsIDExMCwgODUsIDg2LCA4NywgNjEsIDExMiwgMTExLCAxMTUsIDEwNSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAwLCA1OSwgMTMsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3
OSwgNzcsIDk1LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4LCA5NSwgODUsIDgwLCA2OCwgNjUsIDg0
LCA2OSwgOTUsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCA3OCwgMTMsIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1
LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4LCA5NSwgODUsIDgwLCA2OCwgNjUsIDg0LCA2OSwgOTUs
IDc4LCA3OSwgODIsIDc3LCA2NSwgNzYsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEw
MiwgMTA1LCAxMTAsIDk3LCAxMDgsIDg3LCAxMTEsIDExNCwgMTA4LCAxMDAsIDYxLCAxMTksIDEx
MSwgMTE0LCAxMDgsIDEwMCwgNTksIDEzLCAxMCwgMTAzLCAxMDgsIDk1LCA4MCwgMTExLCAxMTUs
IDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2MSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA4MCwgMTE0
LCAxMTEsIDEwNiwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0MiwgMTAyLCAxMDUsIDEx
MCwgOTcsIDEwOCwgODcsIDExMSwgMTE0LCAxMDgsIDEwMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIs
IDQwLCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODUsIDExMiwgMTAw
LCA5NywgMTE2LCAxMDEsIDEwMCwgNDQsIDQ5LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwg
NjEsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDg3LCAxMTEsIDExNCwgMTA4LCAxMDAsIDQyLCAx
MTgsIDEwMSwgOTksIDUyLCA0MCwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAxLCAxMDAsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwg
NTksIDEzLCAxMCwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4
NywgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAs
IDExMSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDExMCwgMTEx
LCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDExMSwgMTE0LCAxMDgsIDEwMCwgNjEsIDEwOSwgOTcs
IDExNiwgNTEsIDQwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4NywgMTExLCAxMTQsIDEwOCwg
MTAwLCA0MSwgNTksIDEzLCAxMCwgMTE4LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcs
IDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTAs
IDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCAxMTEsIDExNCwgMTA4LCAxMDAsIDQyLCAxMTAs
IDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAxLCAxMDAs
IDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE3LCAxMTgsIDg1LCAxMTIs
IDEwMCwgOTcsIDExNiwgMTAxLCAxMDAsIDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgNDgsIDQ2
LCA0NCwgNDgsIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNywg
MTE4LCA1MCwgNjEsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQx
LCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4
NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4LCA5NSwgNzcsIDY1
LCA3MywgNzgsIDk1LCA2OSwgNzgsIDY4LCAxMywgMTAsIDEwMywgMTA4LCA5NSwgODAsIDExMSwg
MTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDYsIDEyMSwgMzIsIDQyLCA2MSwgMzIsIDQ1
LCA0OSwgNDYsIDU5LCAzMiwgMTI1XS5tYXAoYyA9PiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKS5q
b2luKCIiKTsKK2NvbnN0IGZyYWdtZW50U2hhZGVyR0xTTDIgPSBbMzUsIDExOCwgMTAxLCAxMTQs
IDExNSwgMTA1LCAxMTEsIDExMCwgMzIsIDUyLCA1MywgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgwLCA2NiwgODIsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3NiwgNjYsIDY5LCA2OCwgNzksIDY4LCA3MywgODIsIDY5
LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA2NSwgNzcsIDY2LCA3MywgNjksIDc4LCA4NCwgNjgsIDczLCA4MiwgNjksIDY3
LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEw
MSwgMzIsIDc5LCA4MCwgNjUsIDY3LCA3MywgODQsIDg5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0
LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgNjUsIDc2LCA4MCwgNzIsIDY1LCA4NCwgNjksIDgzLCA4NCwgODYsIDY1LCA3NiwgODUsIDY5
LCAzMiwgNDgsIDQ2LCA1MiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgODMsIDgwLCA2OSwgNjcsIDg1LCA3NiwgNjUsIDgyLCA3OSwgODYsIDY5LCA4MiwgNjUsIDc2
LCA4MCwgNzIsIDY1LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4
MiwgNjUsIDY4LCA3MywgNjUsIDc4LCA2NywgNjksIDc5LCA4NiwgNjksIDgyLCA2NSwgNzYsIDgw
LCA3MiwgNjUsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY5LCA3
NywgNzMsIDgzLCA4MywgNzMsIDg2LCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2
LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2
OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgODYsIDczLCA4NCwgODksIDY4LCA3MywgODIsIDY5
LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA3NiwgNzksIDY4LCA2NiwgNjUsIDgzLCA2OSwgNjgsIDc3LCA3MywgNjcsIDgy
LCA3OSwgODMsIDcwLCA4NSwgODIsIDY1LCA2NywgNjksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDg1LCA4MiwgNzAsIDY1
LCA2NywgNjksIDc3LCA2NSwgODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIs
IDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2OSwgNzgsIDg2
LCA3MywgODIsIDc5LCA3OCwgNzcsIDY5LCA3OCwgODQsIDY2LCA4MiwgNjgsIDcwLCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OCwgNzksIDgyLCA3NywgNjUsIDc2
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NiwgODUsIDc3LCA4
MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA3OSwgODIsIDc3LCA2NSwgNzYsIDg4LCA4
OSwgODMsIDY3LCA2NSwgNzYsIDY5LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA3NiwgNzMsIDcxLCA3MiwgODQsIDc3LCA2NSwgODAsIDY4LCA3MywgODIsIDY5LCA2
NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2Nywg
ODQsIDczLCA3OSwgNzgsIDc3LCA2NSwgODAsIDk1LCA1MSwgNjgsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3Mywg
NzksIDc4LCA3NywgNjUsIDgwLCA5NSwgODMsIDc1LCA4OSwgNjYsIDc5LCA4OCwgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDgwLCA3MiwgNjksIDgyLCA3Mywg
NjcsIDY1LCA3NiwgOTUsIDcyLCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA2NywgODMsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA3MSwgNjYsIDY4LCA4Miwg
NjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY1LCA2OCwgNzMsIDY1LCA3OCwgNjcsIDY5LCA3OSwg
NjcsIDY3LCA3NiwgODUsIDgzLCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgNzksIDY3LCA2Nywg
NzYsIDg1LCA4MywgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNzgsIDg1LCA3NywgOTUsIDY2LCA3OSwgNzgsIDY5LCA5NSwgNzMsIDc4LCA3MCwg
NzYsIDg1LCA2OSwgNzgsIDY3LCA2OSwgODIsIDgzLCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY2LCAxMTEsIDExMCwgMTAxLCAxMTUsIDgwLCAxMDEs
IDExNCwgNzcsIDEwMSwgMTE1LCAxMDQsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgNzgsIDg1LCA3NywgOTUsIDc3LCA3OSwgODIsIDgwLCA3MiwgOTUs
IDczLCA3OCwgNzAsIDc2LCA4NSwgNjksIDc4LCA2NywgNjksIDgyLCA4MywgMzIsIDQ4LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4NiwgNzMsIDcxLCA3OCwgNjks
IDg0LCA4NCwgNjksIDY2LCA3NiwgNjksIDc4LCA2OCwgNzcsIDc5LCA2OCwgNjksIDc3LCA4NSwg
NzYsIDg0LCA3MywgODAsIDc2LCA4OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgODMsIDY1LCA3NywgODAsIDc2LCA2OSwgODIsIDUxLCA2OCwgNzEsIDgyLCA2OSwg
NjksIDc4LCA2OCwgNjksIDgwLCA4NCwgNzIsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDgzLCA2NSwgNzcsIDgwLCA3NiwgNjksIDgyLCA1MSwgNjgsIDY2LCA3MSwg
ODIsIDc3LCA2NSwgODAsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDg1LCA4MywgNjksIDgwLCA3MiwgODksIDgzLCA3MywgNjcsIDY1LCA3NiwgNzYsIDczLCA3MSwg
NzIsIDg0LCA3MCwgNjUsIDc2LCA3NiwgNzksIDcwLCA3MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgODQsIDg3LCA3OSwgODMsIDczLCA2OCwgNjksIDY4LCA3Niwg
NzMsIDcxLCA3MiwgODQsIDczLCA3OCwgNzEsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA4NCwg
NjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAz
MiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3Niwg
NjksIDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA2NiwgODUsIDc3LCA4MCwgNjgsIDczLCA4
MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA4
NCwgNzMsIDc4LCA4NCwgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgy
LCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgNjUsIDc4LCA3MywgODMsIDc5LCA4NCwgODIsIDc5LCA4MCwgNzMsIDY3
LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQs
IDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA2NiwgODIsIDY4LCA3MCwgOTUsIDg2LCA5NSwgNzIsIDY5LCA3MywgNzEsIDcyLCA4NCwgOTUs
IDY3LCA3OSwgODIsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNjksIDY4LCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgODMsIDk1LCA2NiwgODIsIDY4LCA3MCwgOTUs
IDY5LCA3OCwgNjksIDgyLCA3MSwgODksIDk1LCA2NywgNzksIDc4LCA4MywgNjksIDgyLCA4Niwg
NjUsIDg0LCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA4MywgNzIsIDY5LCA2OSwgNzgsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwg
NjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA4MywgOTUsIDg0LCA3MiwgNzMsIDY3LCA3NSwg
NzgsIDY5LCA4MywgODMsIDY1LCA3OCwgNjgsIDc3LCA2NSwgODMsIDc1LCA5NSwgODQsIDY5LCA4
OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2OCwgNjksIDY2LCA4
NSwgNzEsIDc3LCA3OSwgNjgsIDY5LCAzMiwgNDgsIDEwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNzIsIDY1LCA2OCwgNjksIDgyLCA5NSwgNzgsIDY1LCA3
NywgNjksIDMyLCAxMDIsIDExNCwgOTcsIDEwMywgMTA5LCAxMDEsIDExMCwgMTE2LCA1OCwgMTEy
LCA5OCwgMTE0LCAxMCwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3
OCwgODQsIDk1LCA2NiwgNjksIDcxLCA3MywgNzgsIDEzLCAxMCwgMTEyLCAxMTQsIDEwMSwgOTks
IDEwNSwgMTE1LCAxMDUsIDExMSwgMTEwLCAzMiwgMTA0LCAxMDUsIDEwMywgMTA0LCAxMTIsIDMy
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDcwLCA4MiwgNzksIDc3LCA3NiwgNzMsIDc4LCA2OSwgNjUsIDgy
LCA4MywgODAsIDY1LCA2NywgNjksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2
LCA0MCwgMTE1LCAxMTYsIDEwMCwgNDksIDUyLCA0OCwgNDQsIDk5LCAxMTEsIDEwOCwgMTE3LCAx
MDksIDExMCwgOTUsIDEwOSwgOTcsIDEwNiwgMTExLCAxMTQsIDQxLCAzMiwgMTE3LCAxMTAsIDEw
NSwgMTAyLCAxMTEsIDExNCwgMTA5LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3
LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA0OCwgNDQsIDMyLCA5OCwgMTA1
LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTE3LCAx
MTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgODMsIDk5LCAxMDEsIDExMCwgMTAxLCAx
MywgMTAsIDEyMywgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE4LCAxMDUsIDEwMSwg
MTE5LCA4MCwgMTE0LCAxMTEsIDEwNiwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwg
MTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA1OSwgMTMs
IDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEx
NSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ5LCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAwLCAx
MDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAxMDIs
IDExMSwgMTE0LCAxMDksIDMyLCA3NywgOTcsIDExNiwgMTAxLCAxMTQsIDEwNSwgOTcsIDEwOCwg
MTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjUsIDEwOCwg
OTgsIDEwMSwgMTAwLCAxMTEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY1LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYs
IDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMy
LCAxMTgsIDc5LCAxMTIsIDk3LCA5OSwgMTA1LCAxMTYsIDEyMSwgNzMsIDExMCwgMTAyLCAxMTEs
IDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjksIDEwOSwgMTA1
LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwg
MTA5LCA5NywgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExOCwgMTA1LCAxMTYsIDEyMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3
LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQs
IDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMy
LCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDcz
LCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgwLCAx
MTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDgzLCAxMDUsIDEyMiwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTE4LCA2NiwgMTE3LCAxMDksIDExMiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1Miwg
MzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTExLCAxMTIsIDk3LCA5
OSwgMTA1LCAxMTYsIDEyMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAs
IDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDEsIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgs
IDEwMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDEx
NiwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA5LCA5NywgMTEyLCA3NywgOTcs
IDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEx
NCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwg
NzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIs
IDMyLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAx
MDEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTgsIDExNywgMTA5LCAx
MTIsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUwLCAzMiwgMTE4LCA4NCwgOTcsIDExMCwgMTAzLCAxMDEsIDExMCwgMTE2LCA4MywgMTEyLCA5
NywgOTksIDEwMSwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5
NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MiwgMzIsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDY3LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDc2LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDEx
NSwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwg
ODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDEwNSwg
OTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA3MywgMTEwLCAx
MDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTEy
LCAxMTEsIDEwNSwgMTEwLCAxMTYsIDgzLCAxMDUsIDEyMiwgMTAxLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUyLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1
LCAxMTgsIDEwMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MiwgMzIsIDExOCwgNjksIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2NSwg
MTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2OCwgMTAxLCA5OCwgMTE3LCAxMDMs
IDc3LCAxMTEsIDEwMCwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4
LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDgwLCA5NywgMTE0LCA5
NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY3LCAx
MDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODIsIDEwMSwgMTAyLCAxMTQsIDk3
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQs
IDY3LCAxMTEsIDk3LCAxMTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEw
OSwgOTcsIDExNiwgNTIsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAx
MTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDY2
LCAxMTcsIDEwOSwgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3
LCAxMTYsIDg0LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDgzLCAxMTIsIDk3LCA5OSwg
MTAxLCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYs
IDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA2NiwgMTE3
LCAxMDksIDExMiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcs
IDExNiwgODQsIDEwNSwgMTEwLCAxMTYsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQs
IDY3LCAxMTEsIDk3LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAxMTYsIDY4LCAx
MDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0
LCAxMDUsIDExMCwgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDks
IDk3LCAxMTYsIDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2
LCA4NCwgMTA1LCAxMTAsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY1LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDEx
NiwgMTE0LCAxMTEsIDExMiwgMTIxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwg
MTE4LCA2NSwgMTEwLCAxMDUsIDExNSwgMTExLCAxMTYsIDExNCwgMTExLCAxMTIsIDEyMSwgNzMs
IDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk3
LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEsIDExMiwgMTIxLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwg
ODMsIDEwNCwgMTAxLCAxMDEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgODMsIDEwNCwgMTAxLCAxMDEsIDExMCwgNzMs
IDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEx
NSwgMTA0LCAxMDEsIDEwMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMTQsIDk3LCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAx
MTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5
LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUwLCAzMiwgMTE4LCA4NCwgMTA0LCAxMDUsIDk5LCAxMDcsIDExMCwgMTAxLCAxMTUs
IDExNSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1
MiwgMzIsIDExNiwgMTA0LCAxMDUsIDk5LCAxMDcsIDExMCwgMTAxLCAxMTUsIDExNSwgNzcsIDk3
LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAx
MTgsIDg0LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEsIDExNSwgMTE1LCA4MCwgOTcsIDEx
NCwgOTcsIDEwOSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjgsIDEw
NSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2OCwgMTA1LCAxMTUsIDExNiwg
OTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwg
ODQsIDEwNSwgMTEwLCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTcsIDk4LCA4MywgMTE3LCAxMTQsIDEwMiwg
OTcsIDk5LCAxMDEsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTYsIDEyMSwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEs
IDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ4LCA0OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEw
OCwgNzYsIDQ5LCA5NSwgNDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgs
IDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgNDgsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAx
MTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgNDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgs
IDc2LCA1MCwgOTUsIDUwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4
MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDk1LCA0OSwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEs
IDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEw
OCwgNzYsIDUwLCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMs
IDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA1MCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwg
MTA1LCA5OSwgOTcsIDEwOCwgODgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg5LCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAx
MDUsIDk5LCA5NywgMTA4LCA5MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
OCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODgsIDg4LCA5NSwg
OTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAx
MDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OSwgODksIDk1LCA5MCwgOTAsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQs
IDEwNSwgOTksIDk3LCAxMDgsIDkwLCA5MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODgsIDg5
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEw
MSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OSwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgs
IDkwLCA4OCwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwg
MTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA0OSwgNDQsIDMyLCA5OCwg
MTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDksIDQxLCAzMiwgMTE3
LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgNzcsIDEwMSwgMTE1LCAxMDQsIDEz
LCAxMCwgMTIzLCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAx
MDgsIDEwMCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOCwgMTA1
LCAxMTUsIDEwNSwgOTgsIDEwNSwgMTA4LCAxMDUsIDExNiwgMTIxLCA1OSwgMTMsIDEwLCAxMjUs
IDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEwOCwgMTExLCA5
OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTA1LCAx
MTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA4NywgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywg
MTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMy
LCA0OSwgNDEsIDMyLCAxMDUsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDc4
LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAx
MTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDgsIDQ0LCAzMiwg
OTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ5LCA0MSwgMzIs
IDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNiwgMTAxLCAxMjAsIDEx
NiwgMTE3LCAxMTQsIDEwMSwgNTAsIDY4LCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDEx
MSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA4MywgOTcsIDEw
OSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwg
NTksIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDEx
NiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ4LCA0NCwgMzIsIDk4LCAxMDUsIDEx
MCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA1MCwgNDEsIDMyLCAxMTcsIDExMCwg
MTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCAxMTUsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEs
IDExNCwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDEx
MCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDEx
NCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNTksIDEwLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTAxLCAxMTAs
IDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEw
MCwgMTAyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE1LCA5NywgMTA5
LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDUwLCA2OCwgNDAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0
LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgODMsIDk3
LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODQsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAx
MDEsIDQ0LCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwg
MTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwg
MTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA0MSwgMTMsIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwgOTcsIDEwOSwgMTEyLCAxMDgsIDEw
MSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDAsIDEx
NSwgNDQsIDk5LCA0MSwgMzIsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNDAs
IDExNSwgNDQsIDk5LCA0MSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQw
LCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA1MCwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEw
MCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwg
MTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAx
LCA2NywgMTE3LCA5OCwgMTAxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDg0LCAxMDEs
IDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA1OSwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIs
IDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAz
MiwgNTAsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwg
MzIsIDQ5LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDEx
NSwgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAx
MTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDU5LCAxMCwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNCwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgOTcsIDEwOSwgMTEy
LCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDY3
LCAxMTcsIDk4LCAxMDEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODQsIDEwMSwgMTIw
LCAxMTYsIDExNywgMTE0LCAxMDEsIDQ0LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDgz
LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQxLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgMTExLCAxMDAs
IDQwLCAxMTUsIDQ0LCA5OSwgNDQsIDEwOCwgNDEsIDMyLCAxMTYsIDEwMSwgMTIwLCAxMTYsIDEx
NywgMTE0LCAxMDEsIDc2LCAxMTEsIDEwMCwgNDAsIDExNSwgNDQsIDk5LCA0NCwgMTA4LCA0MSwg
MTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDUwLCA0MSwgMzIsIDEwNSwgMTEwLCAz
MiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1
LCAxMTEsIDExMCwgODUsIDg2LCA4NywgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDEx
NiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA4MCwgNzMsIDYxLCA1MSwgNDYsIDQ5
LCA1MiwgNDksIDUzLCA1NywgNTAsIDU0LCA1MywgNTEsIDUzLCA1NiwgNTcsIDU1LCA1NywgNTEs
IDUwLCA1MSwgNTYsIDUyLCA1NCwgNTAsIDU0LCA1MiwgNTEsIDUxLCA1NiwgNTEsIDUwLCA1NSwg
NTcsIDUzLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5
OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAx
MTQsIDExMSwgMTIwLCA2MSwgNTAsIDQ2LCA1MCwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAx
MTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3MSwgOTcsIDEwOSwgMTA5
LCA5NywgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQs
IDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNjEsIDQ5LCA0NiwgNDgsIDQ3LCA3NiwgMTA1
LCAxMTAsIDEwMSwgOTcsIDExNCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEs
IDExOSwgMTAxLCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNTksIDEzLCAxMCwg
OTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3NiwgMTE3
LCAxMDksIDEwNSwgMTEwLCA5NywgMTEwLCA5OSwgMTAxLCA2OSwgMTEwLCA5OSwgMTExLCAxMDAs
IDEwMSwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwg
NDAsIDQ4LCA0NiwgNTAsIDQ5LCA1MCwgNTQsIDQ0LCA0OCwgNDYsIDU1LCA0OSwgNTMsIDUwLCA0
NCwgNDgsIDQ2LCA0OCwgNTUsIDUwLCA1MCwgNDEsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwg
MTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNjksIDExMiwgMTE1LCAx
MDUsIDEwOCwgMTExLCAxMTAsIDYxLCA0OCwgNDYsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ5
LCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwg
OTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEyMCwgNDEsIDMyLCA5OSwgMTA4
LCA5NywgMTA5LCAxMTIsIDQwLCAxMjAsIDQ0LCA0OCwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwg
NDEsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA5NywgOTgs
IDExNSwgNjksIDExMiwgMTE1LCA0MCwgMTIwLCA0MSwgMzIsIDk3LCA5OCwgMTE1LCA0MCwgMTIw
LCA0MSwgNDMsIDY5LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCAxMywgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAx
MTUsIDQwLCAxMjAsIDQxLCAzMiwgMTA5LCA5NywgMTIwLCA0MCwgMTIwLCA0NCwgNjksIDExMiwg
MTE1LCAxMDUsIDEwOCwgMTExLCAxMTAsIDQxLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2
OSwgMTEyLCAxMTUsIDQwLCAxMjAsIDQxLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwg
MTIwLCA0NCwgNjksIDExMiwgMTE1LCAxMDUsIDEwOCwgMTExLCAxMTAsIDQ0LCA0OSwgNDYsIDQ4
LCA0MSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTE2LCAxMTQsIDk3LCAxMTAsIDEx
NSwgMTEyLCAxMTEsIDExNSwgMTAxLCA3NywgOTcsIDExNiwgNTEsIDQwLCAxMDksIDk3LCAxMTYs
IDUxLCAzMiwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMzIsIDEy
MywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCA0OCwgNjEsIDEwNSwgMTEwLCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDEwNSwgNDksIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwg
MTA1LCAxMjAsIDkxLCA0OSwgOTMsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MDUsIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAs
IDkzLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTExLCAxMTcsIDExNiwgNzcs
IDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDYxLCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMCwgNDQsIDEwNSwgNDksIDQ2
LCAxMjAsIDQ0LCAxMDUsIDUwLCA0NiwgMTIwLCA0MSwgNDQsIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgNDAsIDEwNSwgNDgsIDQ2LCAxMjEsIDQ0LCAxMDUsIDQ5LCA0NiwgMTIxLCA0NCwgMTA1
LCA1MCwgNDYsIDEyMSwgNDEsIDQ0LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUs
IDQ4LCA0NiwgMTIyLCA0NCwgMTA1LCA0OSwgNDYsIDEyMiwgNDQsIDEwNSwgNTAsIDQ2LCAxMjIs
IDQxLCAxMywgMTAsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTExLCAxMTcsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywg
MTAsIDEyNSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1LCAxMTAsIDExOCwgMTAx
LCAxMTQsIDExNSwgMTAxLCA3NywgOTcsIDExNiwgNTEsIDQwLCAxMDksIDk3LCAxMTYsIDUxLCAz
MiwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMzIsIDEyMywgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDQ4LCA0OCwgNjEsIDEwNSwgMTEw
LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgOTEsIDQ4LCA5MywgNDQs
IDk3LCA0OCwgNDksIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkx
LCA0OCwgOTMsIDkxLCA0OSwgOTMsIDQ0LCA5NywgNDgsIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5
NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDQ5LCA0OCwgNjEsIDEwNSwgMTEwLCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3
LCA0OSwgNDksIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0
OSwgOTMsIDkxLCA0OSwgOTMsIDQ0LCA5NywgNDksIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5Nywg
MTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDksIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDUwLCA0OCwgNjEsIDEwNSwgMTEwLCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA1
MCwgNDksIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwg
OTMsIDkxLCA0OSwgOTMsIDQ0LCA5NywgNTAsIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2
LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTgsIDQ4LCA0OSwgNjEsIDk3LCA1MCwgNTAsIDQyLCA5
NywgNDksIDQ5LCA0NSwgOTcsIDQ5LCA1MCwgNDIsIDk3LCA1MCwgNDksIDU5LCAxMywgMTAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OCwgNDksIDQ5LCA2MSwgNDUsIDk3LCA1MCwgNTAs
IDQyLCA5NywgNDksIDQ4LCA0MywgOTcsIDQ5LCA1MCwgNDIsIDk3LCA1MCwgNDgsIDU5LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OCwgNTAsIDQ5LCA2MSwgOTcsIDUwLCA0
OSwgNDIsIDk3LCA0OSwgNDgsIDQ1LCA5NywgNDksIDQ5LCA0MiwgOTcsIDUwLCA0OCwgNTksIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTAxLCAxMTYsIDYxLCA5Nywg
NDgsIDQ4LCA0MiwgOTgsIDQ4LCA0OSwgNDMsIDk3LCA0OCwgNDksIDQyLCA5OCwgNDksIDQ5LCA0
MywgOTcsIDQ4LCA1MCwgNDIsIDk4LCA1MCwgNDksIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYs
IDExNywgMTE0LCAxMTAsIDMyLCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgOTgsIDQ4LCA0OSwgNDQs
IDQwLCA0NSwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OCwgNDksIDQzLCA5NywgNDgsIDUwLCA0Miwg
OTcsIDUwLCA0OSwgNDEsIDQ0LCA0MCwgOTcsIDQ5LCA1MCwgNDIsIDk3LCA0OCwgNDksIDQ1LCA5
NywgNDgsIDUwLCA0MiwgOTcsIDQ5LCA0OSwgNDEsIDQ0LCAxMywgMTAsIDk4LCA0OSwgNDksIDQ0
LCA0MCwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OCwgNDgsIDQ1LCA5NywgNDgsIDUwLCA0MiwgOTcs
IDUwLCA0OCwgNDEsIDQ0LCA0MCwgNDUsIDk3LCA0OSwgNTAsIDQyLCA5NywgNDgsIDQ4LCA0Mywg
OTcsIDQ4LCA1MCwgNDIsIDk3LCA0OSwgNDgsIDQxLCA0NCwgMTMsIDEwLCA5OCwgNTAsIDQ5LCA0
NCwgNDAsIDQ1LCA5NywgNTAsIDQ5LCA0MiwgOTcsIDQ4LCA0OCwgNDMsIDk3LCA0OCwgNDksIDQy
LCA5NywgNTAsIDQ4LCA0MSwgNDQsIDQwLCA5NywgNDksIDQ5LCA0MiwgOTcsIDQ4LCA0OCwgNDUs
IDk3LCA0OCwgNDksIDQyLCA5NywgNDksIDQ4LCA0MSwgNDEsIDQ3LCAxMDAsIDEwMSwgMTE2LCA1
OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNiwgMTExLCA3
NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIz
LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTIsIDExMSwgMTE5
LCA0MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA3
NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgw
LCAxMTEsIDExOSwgMTAxLCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNiwgMTEx
LCA3MSwgOTcsIDEwOSwgMTA5LCA5NywgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAx
MywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTIsIDExMSwgMTE5LCA0
MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA3MSwg
OTcsIDEwOSwgMTA5LCA5NywgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDEx
OSwgMTAxLCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQxLCA1OSwgMTMs
IDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgMTEzLCAx
MTcsIDk3LCAxMTQsIDEwMSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3
LCAxMDgsIDExNywgMTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQyLCAxMTgsIDk3LCAx
MDgsIDExNywgMTAxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDExMiwgMTExLCAxMTksIDUzLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDExMywgNjEsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEs
IDQyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAx
MTcsIDExNCwgMTEwLCAzMiwgMTE1LCAxMTMsIDQyLCAxMTUsIDExMywgNDIsIDExOCwgOTcsIDEw
OCwgMTE3LCAxMDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTAzLCAxMDEsIDExNiwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwg
OTksIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0
LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwg
MzIsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCA5OSwgMTEx
LCAxMDgsIDExMSwgMTE0LCA0NCwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTks
IDEwMSwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEs
IDEyMCwgNDEsIDQ0LCA0OCwgNDYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMywgMTAxLCAxMTYsIDgyLCA5Nywg
MTEwLCAxMDAsIDQwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0
MSwgMzIsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAy
LCAxMTQsIDk3LCA5OSwgMTE2LCA0MCwgMTE1LCAxMDUsIDExMCwgNDAsIDEwMCwgMTExLCAxMTYs
IDQwLCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQ2LCAxMjAsIDEyMSwgMzIsIDQ0LCAxMTgsIDEwMSwg
OTksIDUwLCA0MCwgNDksIDUwLCA0NiwgNTcsIDU2LCA1NywgNTYsIDQ0LCA1NSwgNTYsIDQ2LCA1
MCwgNTEsIDUxLCA0MSwgNDEsIDQxLCA0MiwgNTIsIDUxLCA1NSwgNTMsIDU2LCA0NiwgNTMsIDUy
LCA1MywgNTEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDEwMCwgMTA1LCAxMTYsIDEwNCwgMTAxLCAxMTQsIDQwLCAxMTgsIDEwMSwgOTks
IDUwLCAzMiwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDExOCwgOTcsIDExNCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDEx
NywgMTEwLCAxMTYsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMTQsIDk3LCAxMTAsIDEwMCwgNjEsIDEwMywgMTAxLCAxMTYsIDgyLCA5NywgMTEwLCAx
MDAsIDQwLCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDExNiwgMTA0LCAxMDEsIDExNCwgNjEsIDEwOSwgMTA1
LCAxMjAsIDQwLCA0NSwgMTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDY1LCAx
MDksIDExMSwgMTE3LCAxMTAsIDExNiwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQsIDExOCwg
OTcsIDExNCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEwLCAx
MTYsIDQ3LCA1MCwgNTMsIDUzLCA0NiwgNDgsIDQ0LCAxMTQsIDk3LCAxMTAsIDEwMCwgNDEsIDU5
LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDAsIDEwNSwgMTE2
LCAxMDQsIDEwMSwgMTE0LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgOTksIDExMSwgMTEwLCAx
MTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMywgOTgsIDEw
MCwgNzcsIDk3LCAxMjAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNjEsIDUwLCA1MywgNTMsIDQ2
LCA0OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExNiwgMTExLCA4MiwgNzEs
IDY2LCA2OCwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0
LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA5LCA5
NywgMTIwLCA4MiwgNzEsIDY2LCA2MSwgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAx
MDksIDk3LCAxMjAsIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCA0NCwgMTA5
LCA5NywgMTIwLCA0MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDEwMywgNDQsIDk5LCAx
MTEsIDEwOCwgMTExLCAxMTQsIDQ2LCA5OCwgNDEsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDY4LCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgMTE0LCAxMDMs
IDk4LCAxMDAsIDc3LCA5NywgMTIwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDQ3LCAxMDksIDk3
LCAxMjAsIDgyLCA3MSwgNjYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCA2OCwgNjEsIDk5
LCAxMDgsIDk3LCAxMDksIDExMiwgNDAsIDEwMiwgMTA4LCAxMTEsIDExMSwgMTE0LCA0MCwgNjgs
IDQxLCA0NywgNTAsIDUzLCA1MywgNDYsIDQ4LCA0NCwgNDgsIDQ2LCA0NCwgNDksIDQ2LCA0MSwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAzLCA5OCwgNjEsIDk5LCAx
MTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDQyLCA2OCwgNTksIDEzLCAxMCwg
MTE0LCAxMDMsIDk4LCA2MSwgMTE2LCAxMTEsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA4MywgMTEy
LCA5NywgOTksIDEwMSwgNDAsIDExNCwgMTAzLCA5OCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAx
LCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTE0LCAxMDMs
IDk4LCA0NCwgNjgsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDEwMiwgMTE0LCAxMTEsIDEwOSwgODIsIDcxLCA2NiwgNjgsIDQwLCAxMTgsIDEwMSwg
OTksIDUyLCAzMiwgMTE0LCAxMDMsIDk4LCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwg
MTAzLCA5OCwgMTAwLCA0NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTE2LCAxMTEsIDc2LCAxMDUsIDEx
MCwgMTAxLCA5NywgMTE0LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDExNCwgMTAzLCA5OCwg
MTAwLCA0NiwgMTE0LCAxMDMsIDk4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3
LCAxMTQsIDExMCwgMzIsIDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgMTE0LCAxMDMsIDk4LCA0Nywg
MTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCA5NywgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA2NywgNzMsIDgwLCA4Miwg
NzksIDY3LCA2NSwgNzYsIDk1LCA4MCwgNzMsIDUwLCAzMiwgNDgsIDQ2LCA0OSwgNTMsIDU3LCA0
OSwgNTMsIDUyLCA1NywgNTIsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA4MiwgNjksIDY3LCA3MywgODAsIDgyLCA3OSwgNjcsIDY1LCA3NiwgOTUsIDgwLCA3
MywgMzIsIDQ4LCA0NiwgNTEsIDQ5LCA1NiwgNTEsIDQ4LCA1NywgNTYsIDU2LCA1NCwgNDksIDU2
LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzcsIDczLCA3
OCwgNzMsIDc3LCA4NSwgNzcsIDg2LCA2NSwgODIsIDczLCA2NSwgNzgsIDY3LCA2OSwgMzIsIDQ4
LCA0NiwgNDgsIDQ4LCA0OCwgNTMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDk5LCAxMTEsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE2LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0
LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDg0LCAxMTEsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAz
LCAxMDEsIDgzLCAxMDgsIDExMSwgMTEyLCAxMDEsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDEz
LCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTUs
IDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDQwLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEw
LCAxMDEsIDExNSwgMTE1LCA0MSwgNDMsIDc3LCA3MywgNzgsIDczLCA3NywgODUsIDc3LCA4Niwg
NjUsIDgyLCA3MywgNjUsIDc4LCA2NywgNjksIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAyLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4
LCA3MSwgMTE0LCA5NywgMTIyLCAxMDUsIDExMCwgMTAzLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAx
LCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0
OCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDYx
LCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMTQsIDEwMSwgMTAy
LCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQyLCA1MCwgNTMsIDQ2
LCA0OCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAx
MTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTcsIDQ4
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEwMywgMTAx
LCAxMTYsIDY1LCA2NSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1
LCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDEx
NCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIs
IDExOCwgMTAxLCA5OSwgNTAsIDQwLCA0OCwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDk3LCAxMTIsIDExMiwgMTA4LCAxMjEsIDczLCAxMDks
IDk3LCAxMDMsIDEwMSwgODAsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwgMTA1LCAxMTAs
IDEwMywgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwg
MTE2LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0
NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTE2LCAxMTEsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA4Mywg
MTEyLCA5NywgOTksIDEwMSwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAx
MTQsIDEwMywgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2
LCA0NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwg
MTAxLCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDExNCwgMTAzLCA5OCwg
NDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEw
MSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE1LCAxMTYs
IDExNCwgMTE3LCA5OSwgMTE2LCAzMiwgMTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQs
IDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDEzLCAxMCwgMTIzLCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEw
MiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEw
LCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA1OSwgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAx
MDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgOTcsIDExNiwgMTE2LCAxMDEsIDExMCwgMTE3LCA5NywgMTE2LCAxMDUs
IDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgNzYsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3MiwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNTksIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgODUsIDExMCwgOTksIDEw
OCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwg
MTE1LCAxMTUsIDU5LCAxMywgMTAsIDEyNSwgNTksIDEzLCAxMCwgMTEyLCAxMTQsIDEwMSwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMy
LCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgODAsIDExMSwgMTA1LCAxMTAsIDEx
NiwgNjUsIDExMCwgMTAwLCA4MywgMTEyLCAxMTEsIDExNiwgODAsIDExNCwgMTAxLCA3NiwgMTA1
LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgNDAsIDEx
OCwgMTAxLCA5OSwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYs
IDk3LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDg2LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDc4LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMs
IDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDExNCwgMTAx
LCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4
LCAxMTYsIDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEw
MSwgMTE2LCA2MSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCA5NywgMTE2LCA5NywgNDYs
IDEyMCwgMTIxLCAxMjIsIDQ1LCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDg3LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0Niwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwg
MTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA2MSwgMTAwLCAxMTEsIDExNiwg
NDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQs
IDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0NCwgMTE0LCAxMDEsIDExNSwgMTE3
LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAyLCAxMDIsIDEx
NSwgMTAxLCAxMTYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2
LCA0NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEw
LCA5OSwgMTAxLCA2MSwgMTE1LCAxMTMsIDExNCwgMTE2LCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3
LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDEx
NiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEwMCwgNDEs
IDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3NiwgNjEsIDEx
MCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExNCwgMTAxLCAx
MTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEwMiwg
MTAyLCAxMTUsIDEwMSwgMTE2LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAx
MDgsIDExNiwgNDYsIDcyLCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEy
MiwgMTAxLCA0MCwgODYsIDQzLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYs
IDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgODYsIDEw
MCwgMTExLCAxMTYsIDcyLCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAx
LCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDg2LCA0NCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgs
IDExNiwgNDYsIDcyLCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4
LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAx
MDksIDExMiwgMTAxLCAxMDAsIDYxLCAxMDAsIDExMSwgMTE2LCA0MCwgNzgsIDQ0LCAxMTQsIDEw
MSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwg
MTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA2MSwgMTE1LCA5
NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUsIDQwLCAxMTQsIDEw
MSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA4NSwgMTEw
LCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAx
MDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYs
IDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEw
NCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDk5LCAxMTEsIDEw
OSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgOTcsIDEwOCwgODAsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAx
MDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMy
LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYsIDk3LCA0NCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDg2LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDc4LCA0MSwgMzIsIDEy
MywgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDEx
MCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAx
MTYsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgsIDEw
NSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDYx
LCAxMDgsIDEwMSwgMTEwLCAxMDMsIDExNiwgMTA0LCA0MCwgNDUsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0MSwgNTksIDEzLCAx
MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc2LCA2MSwgMTEwLCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgNDUsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0MSwgNTksIDEzLCAx
MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDcyLCA2MSwgMTEwLCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgODYsIDQzLCAxMTQsIDEwMSwgMTE1
LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAx
MTcsIDEwOCwgMTE2LCA0NiwgODYsIDEwMCwgMTExLCAxMTYsIDcyLCA2MSwgMTE1LCA5NywgMTE2
LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDg2LCA0NCwg
MTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDcyLCA0MSwgNDEsIDU5LCAxMywgMTAs
IDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYs
IDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDYxLCAxMDAsIDExMSwg
MTE2LCA0MCwgNzgsIDQ0LCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYsIDQx
LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwg
MTExLCAxMTYsIDc2LCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2
OSwgMTEyLCAxMTUsIDQwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEw
MCwgMTExLCAxMTYsIDc2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAw
LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNCwg
MTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTIsIDEx
NCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAx
MDIsIDExMSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA3MiwgMTAxLCAx
MDksIDEwNSwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDgwLCAxMTQsIDEwMSwg
NzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEs
IDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCA5
NywgMTE2LCA5NywgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA4NiwgNDQsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCA3OCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTEyLCAxMTQsIDEwMSwgNzYsIDEw
NSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCAx
MTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAx
MTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA2MSwgMTAwLCAxMTEsIDEx
NiwgNDAsIDc4LCA0NCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCA5NywgMTE2LCA5Nywg
NDYsIDEyMCwgMTIxLCAxMjIsIDQxLCA0MiwgNDgsIDQ2LCA1MywgNDMsIDQ4LCA0NiwgNTMsIDU5
LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEs
IDExNiwgNzYsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDY5LCAx
MTIsIDExNSwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAx
MTEsIDExNiwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2
LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAx
MTIsIDEwMSwgMTAwLCA2MSwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4LCAx
MDAsIDExMSwgMTE2LCA3NiwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDEx
MCwgMzIsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywg
MTE2LCAxMDEsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3NiwgMTA1LCAx
MDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA5NSwgODMsIDEx
NiwgOTcsIDExMCwgMTAwLCA5NywgMTE0LCAxMDAsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDQs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDk3LCAxMTAsIDEwMywgMTAxLCA0MSwg
MTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEw
OSwgOTcsIDEyMCwgNDAsIDQ4LCA0NiwgNDQsIDQ5LCA0NiwgNDgsIDQ1LCAxMDgsIDEwMSwgMTEw
LCAxMDMsIDExNiwgMTA0LCA0MCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIsIDEw
MiwgMTE1LCAxMDEsIDExNiwgNDEsIDQ3LCAxMTQsIDk3LCAxMTAsIDEwMywgMTAxLCA0MSwgNTks
IDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTEx
LCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAy
LCAxMDIsIDk1LCA4MCwgMTA0LCAxMjEsIDExNSwgMTA1LCA5OSwgOTcsIDEwOCwgNDAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwg
MTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAx
MDAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgNDksIDQ2LCA0OCwgNDcsIDEwOSwgOTcsIDEyMCwgNjksIDExMiwgMTE1LCA0MCwgMTA4
LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAx
LCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3
LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDc2LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDk1LCA3MSwg
NzYsIDg0LCA3MCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAz
LCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAxMTMs
IDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTA1LCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQs
IDEwMSwgMTAwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4
LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEs
IDEwMiwgMTAyLCA2MSwgNDksIDQ2LCA0OCwgNDcsIDEwOSwgOTcsIDEyMCwgNjksIDExMiwgMTE1
LCA0MCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEw
LCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMiwgOTcsIDk5LCAxMTYsIDExMSwgMTE0
LCA2MSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEw
LCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0MiwgMTA1LCAxMTAs
IDExOCwgMTAxLCAxMTQsIDExNSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAw
LCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCA5NywgMTE2LCAxMTYsIDEwMSwgMTEwLCAxMTcsIDk3LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCA0OSwgNDYs
IDQ4LCA0NSwgMTAyLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDQyLCAxMDIsIDk3LCA5OSwgMTE2
LCAxMTEsIDExNCwgNDEsIDU5LCAxMywgMTAsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAsIDExNywg
OTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNDIsIDYxLCA5NywgMTE2LCAxMTYsIDEwMSwgMTEwLCAx
MTcsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzAsIDk3LCAxMDgs
IDEwOCwgMTExLCAxMDIsIDEwMiwgNDIsIDYxLCA5NywgMTE2LCAxMTYsIDEwMSwgMTEwLCAxMTcs
IDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYs
IDk3LCAxMTAsIDk5LCAxMDEsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDU5LCAx
MywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwg
MTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwg
MTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwg
MTAyLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3
OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5
OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0NCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDExNCwgOTcsIDExMCwgMTAzLCAxMDEsIDQ0LCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTA1LCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNSwgMTAxLCA4MywgMTEz
LCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDQxLCAxMywg
MTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTksIDEx
MSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5
OSwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEw
MiwgMTAyLCA5NSwgODAsIDEwNCwgMTIxLCAxMTUsIDEwNSwgOTksIDk3LCAxMDgsIDQwLCAxMDgs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEs
IDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcs
IDExNiwgMTAxLCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgOTcs
IDEwOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIs
IDEwMiwgOTUsIDgzLCAxMTYsIDk3LCAxMTAsIDEwMCwgOTcsIDExNCwgMTAwLCA0MCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEw
MSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAs
IDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQ0LCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTE1LCA3MiwgOTcsIDEwOCwgMTAyLCA2
NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEw
MSwgMTIwLCAxMTIsIDExMSwgMTEwLCAxMDEsIDExMCwgMTE2LCA0MSwgMTMsIDEwLCAxMjMsIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEs
IDEwMiwgMTAyLCA2MSwgNDgsIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDk5LCAxMTEsIDExNSwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNjEsIDEwOSwg
OTcsIDEyMCwgNjksIDExMiwgMTE1LCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDQ1LCAxMDgsIDEw
NSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDQ0LCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAx
MTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwg
ODcsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTA1LCAxMDIsIDMyLCA0MCwgOTksIDExMSwgMTE1LCA2
NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA2MiwgNjEsIDk5LCAxMTEsIDExNSwgNzIsIDk3LCAxMDgs
IDEwMiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEw
MiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgNDgs
IDQ2LCA0NCwgMTEyLCAxMTEsIDExOSwgNDAsIDk5LCAxMTEsIDExNSwgNjUsIDExMCwgMTAzLCAx
MDgsIDEwMSwgNDQsIDEwMSwgMTIwLCAxMTIsIDExMSwgMTEwLCAxMDEsIDExMCwgMTE2LCA0MSwg
NDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDEx
NywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5
NywgMTA4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEw
MiwgMTAyLCA5NSwgODAsIDEwNCwgMTIxLCAxMTUsIDEwNSwgOTksIDk3LCAxMDgsIDQwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEw
MCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYsIDEw
NSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMTUsIDcyLCA5NywgMTA4LCAxMDIs
IDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCA5OSwgMTEx
LCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwNywgNzcs
IDEwNSwgMTEwLCAxMTcsIDExNSwgNzYsIDExMSwgMTAzLCA1MCwgNjcsIDExMSwgMTEwLCAxMDEs
IDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1
LCAxMTYsIDEyMSwgODIsIDk3LCAxMTYsIDEwNSwgMTExLCA2MSwgNTQsIDQ2LCA1NCwgNTIsIDUx
LCA1NiwgNTMsIDU0LCA0OSwgNTYsIDU3LCA1NSwgNTUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMTAsIDk5LCAxMDEsIDExMCwgMTE2LCAxMTQsIDk3
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc1LCA5NywgMTEyLCAxMTIsIDk3LCA2MSwgMTA3LCA3Nywg
MTA1LCAxMTAsIDExNywgMTE1LCA3NiwgMTExLCAxMDMsIDUwLCA2NywgMTExLCAxMTAsIDEwMSwg
NjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUs
IDExNiwgMTIxLCA4MiwgOTcsIDExNiwgMTA1LCAxMTEsIDQ3LCA0MCwgNDksIDQ2LCA0OCwgNDUs
IDk5LCAxMTEsIDExNSwgNzIsIDk3LCAxMDgsIDEwMiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwg
NDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQs
IDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCAxMTIs
IDExNCwgMTAxLCA5NywgMTAwLCA4MywgNzEsIDYxLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgNDUs
IDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNDIsIDk5LCAxMTEsIDExMCwgOTksIDEwMSwgMTEwLCAxMTYsIDExNCwgOTcs
IDExNiwgMTA1LCAxMTEsIDExMCwgNzUsIDk3LCAxMTIsIDExMiwgOTcsIDQ0LCA0NSwgOTksIDEx
MSwgMTEwLCA5OSwgMTAxLCAxMTAsIDExNiwgMTE0LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA3
NSwgOTcsIDExMiwgMTEyLCA5NywgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNjEsIDEwMSwgMTIwLCAx
MTIsIDUwLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMDAs
IDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQ0LCA0OSwg
NDYsIDQ4LCA0MSwgNDQsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEw
MSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDExMiwgMTE0LCAxMDEsIDk3LCAxMDAsIDgz
LCA3MSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAz
MiwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywg
MTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5Nywg
MTA4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwg
MTAyLCA5NSwgNzEsIDc2LCA4NCwgNzAsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEw
MSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgODMsIDk5
LCA5NywgMTA4LCAxMDEsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDc5LCAxMDIsIDEwMiwgMTE1
LCAxMDEsIDExNiwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCA5OSwgMTAwLCA2MSwgMTAwLCAxMTEsIDExNiwgNDAsIDQ1LCAxMDgsIDEwNSwgMTAz
LCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0
LCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2
LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQx
LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAyLCA5NywgMTA4LCAx
MDgsIDExMSwgMTAyLCAxMDIsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAx
MDEsIDQwLCA5OSwgMTAwLCA0MiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY1LCAxMTAsIDEw
MywgMTA4LCAxMDEsIDgzLCA5OSwgOTcsIDEwOCwgMTAxLCA0MywgMTA4LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDEx
NiwgNDEsIDU5LCAxMywgMTAsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA0Miwg
NjEsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA1OSwgMTMsIDEwLCAxMTQsIDEw
MSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAx
MDIsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
OTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA5NywgMTA4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwg
OTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEw
OCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3
LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgOTksIDExMSwgMTE1LCA3MiwgOTcsIDEwOCwgMTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwg
MTAxLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMSwgMTIwLCAxMTIsIDExMSwg
MTEwLCAxMDEsIDExMCwgMTE2LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwg
MTA1LCAxMDMsIDEwNCwgMTE2LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA4MywgOTksIDk3LCAx
MDgsIDEwMSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAx
MDQsIDExNiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwg
MTE2LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDEx
MCwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTQsIDEw
MSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgOTcsIDEwOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDgwLCAxMDQsIDEyMSwgMTE1
LCAxMDUsIDk5LCA5NywgMTA4LCA0MCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUs
IDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTAwLCAxMDUsIDExNCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2
LCA2NywgMTAxLCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0NCwgOTksIDExMSwgMTE1LCA3Miwg
OTcsIDEwOCwgMTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA0MSwgNTksIDEzLCAxMCwgMTI1
LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzAsIDgyLCA2
OSwgODMsIDc4LCA2OSwgNzYsIDk1LCA3NywgNjUsIDg4LCA3MywgNzcsIDg1LCA3NywgOTUsIDc5
LCA3OCwgOTUsIDgyLCA3OSwgODUsIDcxLCA3MiwgMzIsIDQ4LCA0NiwgNTAsIDUzLCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDMsIDEwMSwgMTE2LCA2OSwgMTEwLCAxMDEsIDExNCwg
MTAzLCAxMjEsIDY3LCAxMTEsIDExMCwgMTE1LCAxMDEsIDExNCwgMTE4LCA5NywgMTE2LCAxMDUs
IDExMSwgMTEwLCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCA0MCwgOTksIDExMSwgMTEwLCAx
MTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3
LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEw
MSwgMTEwLCAxMTYsIDgyLCA0OCwgNDQsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDks
IDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgNDksIDQ2LCA0OCwgNDMsIDExNSwgMTEy
LCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTEx
LCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDQ4LCA0MiwgNDAsIDQ5LCA0NiwgNDgsIDQ3
LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwg
NjYsIDExNCwgMTAwLCAxMDIsIDQ2LCAxMjEsIDQ1LCA0OSwgNDYsIDQ4LCA0MSwgNTksIDEzLCAx
MCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDMsIDEwMSwgMTE2LCA2Niwg
ODIsIDY4LCA3MCwgNzYsIDExMSwgMTExLCAxMDcsIDExNywgMTEyLCA0MCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDQsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMTIsIDEwMSwgMTE0LCA5OSwgMTAxLCAxMTIsIDExNiwgMTE3LCA5Nywg
MTA4LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCAzMiwg
MTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCA4NSwgODYsIDYxLCAxMTgsIDEwMSwg
OTksIDUwLCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTEyLCAxMDEsIDExNCwgOTks
IDEwMSwgMTEyLCAxMTYsIDExNywgOTcsIDEwOCwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEw
LCAxMDEsIDExNSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDk4
LCAxMTQsIDEwMCwgMTAyLCA3NiwgMTExLCAxMTEsIDEwNywgMTE3LCAxMTIsIDYxLCAxMTYsIDEw
MSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDQwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwg
MTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDgzLCA5Nywg
MTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQ0LCA4NSwgODYsIDQxLCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTgsIDExNCwgMTAwLCAxMDIsIDc2LCAxMTEs
IDExMSwgMTA3LCAxMTcsIDExMiwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTI1LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDMsIDEwMSwgMTE2LCA4MiwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3MCwgMTE0LCAxMTEsIDEwOSwg
NjYsIDgyLCA2OCwgNzAsIDc2LCAxMTEsIDExMSwgMTA3LCAxMTcsIDExMiwgNDAsIDk5LCAxMTEs
IDExMCwgMTE1LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE1LCAxMTIsIDEwMSwg
OTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwg
MTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgsIDQ0LCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAz
MiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDEx
MCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNDEsIDMyLCAxMjMsIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTA5LCAxMDUsIDEyMCwgNDAsIDEwMSwgMTEwLCAx
MTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAs
IDEwMiwgNDYsIDEyMCwgMTIwLCAxMjAsIDQ0LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTEx
LCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDQ2LCAxMjEsIDEy
MSwgMTIxLCA0NCwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEw
LCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgsIDQx
LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEs
IDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDEy
NSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAzLCAxMDEsIDExNiwgODIsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzAsIDExNCwgMTExLCAx
MDksIDY1LCAxMTAsIDk3LCAxMDgsIDEyMSwgMTE2LCAxMDUsIDk5LCA5NywgMTA4LCA2NiwgODIs
IDY4LCA3MCwgNzYsIDExMSwgMTExLCAxMDcsIDExNywgMTEyLCA5NSwgNzQsIDExMSwgMTEwLCAx
MDEsIDExNSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA4NiwgMTAwLCAxMTEsIDEx
NiwgNzgsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1Nywg
NDgsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCAxMDksIDExMSwgMTExLCAx
MTYsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOSwgMTAxLCAxMDUsIDEwMywgMTA0LCAxMTYsIDYx
LCAxMDksIDEwNSwgMTIwLCA0MCwgNzAsIDgyLCA2OSwgODMsIDc4LCA2OSwgNzYsIDk1LCA3Nywg
NjUsIDg4LCA3MywgNzcsIDg1LCA3NywgOTUsIDc5LCA3OCwgOTUsIDgyLCA3OSwgODUsIDcxLCA3
MiwgNDQsIDQ5LCA0NiwgNDgsIDQ0LCAxMTUsIDEwOSwgMTExLCAxMTEsIDExNiwgMTA0LCAxMTAs
IDEwMSwgMTE1LCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwg
MTEwLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDQ4LCA0MywgMTE5LCAxMDEsIDEwNSwgMTAzLCAxMDQsIDExNiwgNDIsIDQwLCAxMTQsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTcsIDQ4LCA0NSwg
MTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0
MSwgNDIsIDExMiwgMTExLCAxMTksIDUzLCA0MCwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcs
IDExNiwgMTAxLCA0MCwgNDksIDQ2LCA0OCwgNDUsIDg2LCAxMDAsIDExMSwgMTE2LCA3OCwgNDEs
IDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwg
MTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgODMsIDk5LCAxMDQsIDEwOCwgMTA1LCA5OSwg
MTA3LCA3MSwgNzEsIDg4LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDg2LCAxMDAs
IDExMSwgMTE2LCA3MiwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQ0LCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDU3LCA0OCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwg
OTksIDEwMSwgNDgsIDQzLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNDUsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDEsIDQyLCAxMTIsIDExMSwgMTE5LCA1MywgNDAs
IDQ5LCA0NiwgNDgsIDQ1LCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQxLCA1OSwgMTMsIDEwLCAx
MjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMiwgMTE0LCAxMDEsIDEx
NSwgMTEwLCAxMDEsIDEwOCwgODMsIDk5LCAxMDQsIDEwOCwgMTA1LCA5OSwgMTA3LCA3MSwgNzEs
IDg4LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDg2LCAxMDAsIDExMSwgMTE2LCA3
MiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEw
MSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQ0LCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDU3LCA0OCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywg
MTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwg
OTksIDEwMSwgNDgsIDQzLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNDUsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDEsIDQyLCAxMTIsIDExMSwgMTE5LCA1MywgNDAs
IDQ5LCA0NiwgNDgsIDQ1LCA4NiwgMTAwLCAxMTEsIDExNiwgNzIsIDQxLCA1OSwgMTMsIDEwLCAx
MjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExMCwgMTExLCAxMTQsIDEw
OSwgOTcsIDEwOCwgNjgsIDEwNSwgMTE1LCAxMTYsIDExNCwgMTA1LCA5OCwgMTE3LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDcwLCAxMTcsIDExMCwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgOTUsIDg0
LCAxMTQsIDExMSwgMTE5LCA5OCwgMTE0LCAxMDUsIDEwMCwgMTAzLCAxMDEsIDgyLCAxMDEsIDEw
NSwgMTE2LCAxMjIsIDcxLCA3MSwgODgsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
NzgsIDEwMCwgMTExLCAxMTYsIDcyLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3
LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDUwLCA2MSwgMTE1LCAxMTMsIDExNywgOTcsIDExNCwg
MTAxLCA0MCwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNDEsIDU5LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDYxLCA3OCwgMTAwLCAxMTEsIDExNiwgNzIsIDQy
LCA3OCwgMTAwLCAxMTEsIDExNiwgNzIsIDQyLCA0MCwgOTcsIDUwLCA0NSwgNDksIDQ2LCA0OCwg
NDEsIDQzLCA0OSwgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwg
MTEwLCAzMiwgOTcsIDUwLCA0NywgNDAsIDgwLCA3MywgNDIsIDEwMCwgNDIsIDEwMCwgNDEsIDU5
LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCAx
MDksIDEwNSwgMTE2LCAxMDQsIDg2LCAxMDUsIDExNSwgMTA1LCA5OCwgMTA1LCAxMDgsIDEwNSwg
MTE2LCAxMjEsIDk1LCA3MSwgNzEsIDg4LCA2NywgMTExLCAxMTQsIDExNCwgMTAxLCAxMDgsIDk3
LCAxMTYsIDEwMSwgMTAwLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAs
IDExMSwgMTE2LCA3NiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAx
MTEsIDExNiwgODYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDEwOCwgMTEy
LCAxMDQsIDk3LCA3MSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDk3LCA1MCwgNjEsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDQyLCA5NywgMTA4
LCAxMTIsIDEwNCwgOTcsIDcxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgNzEsIDcxLCA4OCwgODYsIDYxLCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQyLCAxMTUsIDEx
MywgMTE0LCAxMTYsIDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDQyLCA0MCwgNzgsIDEwMCwg
MTExLCAxMTYsIDg2LCA0NSwgOTcsIDUwLCA0MiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0MSwg
NDMsIDk3LCA1MCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3
MSwgNzEsIDg4LCA3NiwgNjEsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDIsIDExNSwgMTEzLCAx
MTQsIDExNiwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDIsIDQwLCA3OCwgMTAwLCAxMTEs
IDExNiwgNzYsIDQ1LCA5NywgNTAsIDQyLCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQxLCA0Mywg
OTcsIDUwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIs
IDQ4LCA0NiwgNTMsIDQ3LCA0MCwgNzEsIDcxLCA4OCwgODYsIDQzLCA3MSwgNzEsIDg4LCA3Niwg
NDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA2NiwgODIsIDY4LCA3MCwgOTUsIDY2
LCAxMTcsIDExNCwgMTA4LCAxMDEsIDEyMSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
NzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDg2
LCAxMDAsIDExMSwgMTE2LCA3MiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQs
IDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgMzIsIDEyMywgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcs
IDExNSwgMTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNzgsIDg2LCA2MSwg
MTEyLCAxMTEsIDExOSwgNTMsIDQwLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAx
MDEsIDY5LCAxMTIsIDExNSwgNDAsIDQ5LCA0NiwgNDgsIDQ1LCA3OCwgMTAwLCAxMTEsIDExNiwg
NzYsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwg
MTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAx
LCAxMDgsIDc4LCA3NiwgNjEsIDExMiwgMTExLCAxMTksIDUzLCA0MCwgMTE1LCA5NywgMTE2LCAx
MTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUsIDQwLCA0OSwgNDYsIDQ4LCA0NSwg
NzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAxMTQs
IDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA1NywgNDgsIDYxLCA0OCwgNDYsIDUzLCA0MywgNTAs
IDQ2LCA0OCwgNDIsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDIsIDg2LCAxMDAsIDExMSwgMTE2
LCA3MiwgNDIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDU5
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDIsIDExNCwgMTAxLCAxMTUs
IDExMCwgMTAxLCAxMDgsIDMyLCA2MSwgMTMsIDEwLCA0MCwgNDksIDQ2LCA0OCwgNDMsIDQwLCAx
MDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAxMTQsIDEwMSwgMTE1LCAxMTAs
IDEwMSwgMTA4LCA1NywgNDgsIDQ1LCA0OSwgNDYsIDQ4LCA0MSwgNDIsIDEwMCwgMTA1LCAxMDIs
IDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDc4
LCA3NiwgNDEsIDMyLCA0MiwgMTMsIDEwLCA0MCwgNDksIDQ2LCA0OCwgNDMsIDQwLCAxMDAsIDEw
NSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwg
MTA4LCA1NywgNDgsIDQ1LCA0OSwgNDYsIDQ4LCA0MSwgNDIsIDEwMCwgMTA1LCAxMDIsIDEwMiwg
MTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDc4LCA4Niwg
NDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDIsIDEx
NCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDQ3LCA4MCwgNzMsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjks
IDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA2NSwg
NzgsIDY3LCA2OSwgNTcsIDQ4LCAzMiwgNDksIDQ2LCA0OCwgMTMsIDEwLCAxMTUsIDExNiwgMTE0
LCAxMTcsIDk5LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEw
MywgNzMsIDExMCwgMTAyLCAxMTEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDU5LCAxMywgMTAsIDEy
NSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAxMDAsIDEwNiwg
MTE3LCAxMTUsIDExNiwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1
LCA3MCwgMTE0LCAxMTEsIDEwOSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgODAsIDExNCwgMTEx
LCAxMTIsIDEwMSwgMTE0LCAxMTYsIDEwNSwgMTAxLCAxMTUsIDQwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwg
NDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwg
ODIsIDk3LCAxMDAsIDEwNSwgMTE3LCAxMTUsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5
OSwgMTAxLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAx
LCAxMTUsIDExNSwgNjEsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1
LCAxMTcsIDExNSwgNDcsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDEx
NiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDExNiwgMTExLCAxMTYsIDk3LCAxMDgsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwg
MTAxLCAxMTUsIDExNSwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwg
NDAsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAs
IDEwMSwgMTE1LCAxMTUsIDQzLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDEx
NSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIs
IDExNiwgMTExLCAxMTYsIDk3LCAxMDgsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAx
LCAxMTUsIDExNSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNzIsIDEwMSwgMTA5LCAxMDUsIDEx
NSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAx
MTUsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNDAsIDExMiwg
MTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAs
IDEwMiwgMTExLCAzMiwgMTA1LCAxMTAsIDEwMiwgMTExLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMywgMTE0LCAxMTEsIDExNywgMTEwLCAxMDAsIDY3LCAx
MTEsIDEwOCwgMTExLCAxMTQsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDEx
NywgMTE0LCAxMTAsIDMyLCAxMDksIDEwNSwgMTIwLCA0MCwgMTAzLCAxMTQsIDExMSwgMTE3LCAx
MTAsIDEwMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDEwOCwgMTA1LCAxMDMsIDEwNCwg
MTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwgMTA1LCAxMTAsIDEwMiwgMTExLCA0Niwg
NzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEw
NSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwg
MTEwLCAxMDMsIDQwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUs
IDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDEwNSwgMTEwLCAxMDIsIDExMSwgNDQs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDExMSwg
MTA4LCAxMTEsIDExNCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgODQsIDEwMSwgMTE0LCAx
MDksIDYxLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDY2LCA4MiwgNjgsIDcw
LCA5NSwgNjYsIDExNywgMTE0LCAxMDgsIDEwMSwgMTIxLCA0MCwgMTA1LCAxMTAsIDEwMiwgMTEx
LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0NCwgMTA1LCAxMTAsIDEwMiwgMTExLCA0Niwg
NzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTA1LCAxMTAsIDEwMiwgMTExLCA0NiwgODYsIDEw
MCwgMTExLCAxMTYsIDcyLCA0NCwgMTA1LCAxMTAsIDEwMiwgMTExLCA0NiwgMTE0LCAxMTEsIDEx
NywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAx
LCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAx
MDEsIDg0LCAxMDEsIDExNCwgMTA5LCA0MiwgMTA1LCAxMTAsIDEwMiwgMTExLCA0NiwgOTcsIDEx
NiwgMTE2LCAxMDEsIDExMCwgMTE3LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA0MiwgMTA1LCAx
MTAsIDEwMiwgMTExLCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0MiwgMTA4LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAx
MDEsIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAx
MDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUs
IDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgODUsIDg2LCA0MCwg
MTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwg
ODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIs
IDExNSwgMTE2LCAxMTQsIDExMywgNjEsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEw
MSwgODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3
LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTE4LCA4MCwg
MTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNDQsIDQ5LCA0NiwgNDgsIDQx
LCA1OSwgMTMsIDEwLCAxMTUsIDExNiwgMTE0LCAxMTMsIDQ3LCA2MSwgMTE1LCAxMTYsIDExNCwg
MTEzLCA0NiwgMTE5LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAz
MiwgMTE1LCAxMTYsIDExNCwgMTEzLCA0NiwgMTIwLCAxMjEsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAzLCAxMDEsIDExNiwgNzYsIDExMSwg
MTAwLCA3MCwgMTE0LCAxMTEsIDEwOSwgNjUsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNDAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTE3LCA5OCwgMTAxLCA3NywgOTcsIDExMiwg
NjgsIDEwNSwgMTA5LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExMSwgMTEwLCA4MCwgMTA1LCAxMjAs
IDEwMSwgMTA4LCAxMTUsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA5LCAxMDUs
IDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDExOCwg
MTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwgMTExLCAxMTIsIDEwMSwgNDEsIDMyLCAx
MjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOSwgMTA1LCA5OSwgMTE0
LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMTgsIDEwMSwgMTE0
LCA5NywgMTAzLCAxMDEsIDgzLCAxMDgsIDExMSwgMTEyLCAxMDEsIDg0LCAxMDEsIDEyMCwgMTAx
LCAxMDgsIDExNSwgNjEsIDk5LCAxMTcsIDk4LCAxMDEsIDc3LCA5NywgMTEyLCA2OCwgMTA1LCAx
MDksIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTExLCAxMTAsIDgwLCAxMDUsIDEyMCwgMTAxLCAxMDgs
IDExNSwgNDIsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcs
IDk5LCAxMDEsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDgzLCAxMDgsIDExMSwg
MTEyLCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEx
MSwgMTAwLCA2MSwgMTA4LCAxMTEsIDEwMywgNTAsIDQwLCAxMDksIDEwNSwgOTksIDExNCwgMTEx
LCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTE4LCAxMDEsIDExNCwgOTcs
IDEwMywgMTAxLCA4MywgMTA4LCAxMTEsIDExMiwgMTAxLCA4NCwgMTAxLCAxMjAsIDEwMSwgMTA4
LCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwg
MTA4LCAxMTEsIDEwMCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMDMsIDEwMSwgMTE2LCA3NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgNzYs
IDExMSwgMTAwLCA3MCwgMTE0LCAxMTEsIDEwOSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEw
LCAxMDEsIDExNSwgMTE1LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTcs
IDk4LCAxMDEsIDc3LCA5NywgMTEyLCA2OCwgMTA1LCAxMDksIDEwMSwgMTEwLCAxMTUsIDEwNSwg
MTExLCAxMTAsIDgwLCAxMDUsIDEyMCwgMTAxLCAxMDgsIDExNSwgNDQsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1
LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAx
MTEsIDEwMCwgNjEsIDEwOCwgMTExLCAxMDMsIDUwLCA0MCwgOTksIDExNywgOTgsIDEwMSwgNzcs
IDk3LCAxMTIsIDY4LCAxMDUsIDEwOSwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTEsIDExMCwgODAs
IDEwNSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA0MSwgNDIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0
LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0
LCAxMTAsIDMyLCAxMDgsIDExMSwgMTAwLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwg
MTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA3
OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA0MCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwg
OTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5
LCAxMTIsIDEwMSwgMTAwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTE2LCAxMDEsIDEwOSwgMTEyLCA2MSwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA4
NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA0MywgOTcsIDEwOSwgOTgs
IDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEs
IDExMCwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNSwg
OTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDExNSwgMTEzLCAxMTcsIDk3LCAx
MTQsIDEwMSwgNDAsIDExNiwgMTAxLCAxMDksIDExMiwgNDEsIDQ1LCA0OSwgNDYsIDQ4LCA0Mywg
OTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDEx
NSwgMTA1LCAxMTEsIDExMCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDks
IDEwMSwgMTEwLCAxMTYsIDcyLCAxMTEsIDExNCwgMTA1LCAxMjIsIDExMSwgMTEwLCA3OSwgOTks
IDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTAsIDEx
MSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NjEsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA0MCwgMTE4LCAxMDUsIDEwMSwg
MTE5LCA0NCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNiwgMTAxLCAxMDksIDExMiwgNjEsIDExNSwgOTcs
IDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDQ5LCA0NiwgNDgsIDQzLCA0OSwgNDYs
IDQ5LCA0MiwgMTAwLCAxMTEsIDExNiwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwg
NDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTUsIDEx
MywgMTE3LCA5NywgMTE0LCAxMDEsIDQwLCAxMTYsIDEwMSwgMTA5LCAxMTIsIDQxLCA1OSwgMTMs
IDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMiwgOTcsIDExNCwgOTcs
IDEwOCwgMTA4LCA5NywgMTIwLCA2NywgMTExLCAxMTQsIDExNCwgMTAxLCA5OSwgMTE2LCA3OCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4
LCAxMDEsIDExNCwgMTE2LCAxMDEsIDEyMCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDExMSwgMTE0LCAxMDUsIDEwMywgODYsIDEwMSwgOTksIDQ0LCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgOTksIDExNywgOTgsIDEwMSwgODMsIDEwNSwgMTIyLCAxMDEsIDQ0LCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgOTksIDExNywgOTgsIDEwMSwgODAsIDExMSwgMTE1LCAzMiwgNDEs
IDMyLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgMTEwLCAxMTgsIDc5
LCAxMTQsIDEwNSwgMTAzLCA4NiwgMTAxLCA5OSwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0
OSwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwgNDQsIDQ5LCA0NiwgNDgsIDQxLCA0NywgMTExLCAx
MTQsIDEwNSwgMTAzLCA4NiwgMTAxLCA5OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDEwNCwgOTcsIDEwOCwgMTAyLCA4MywgMTA1LCAxMjIsIDEwMSwgNjEsIDk5LCAxMTcsIDk4
LCAxMDEsIDgzLCAxMDUsIDEyMiwgMTAxLCA0MiwgNDgsIDQ2LCA1MywgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTks
IDY1LCAxMTYsIDc3LCA5NywgMTIwLCA4MCwgMTA4LCA5NywgMTEwLCAxMDEsIDYxLCA0MCwgOTks
IDExNywgOTgsIDEwMSwgODAsIDExMSwgMTE1LCA0MywgMTA0LCA5NywgMTA4LCAxMDIsIDgzLCAx
MDUsIDEyMiwgMTAxLCA0NSwgMTE4LCAxMDEsIDExNCwgMTE2LCAxMDEsIDEyMCwgODAsIDExMSwg
MTE1LCA0MSwgNDIsIDEwNSwgMTEwLCAxMTgsIDc5LCAxMTQsIDEwNSwgMTAzLCA4NiwgMTAxLCA5
OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgMTEwLCAxMTYsIDEwMSwg
MTE0LCAxMTUsIDEwMSwgOTksIDY1LCAxMTYsIDc3LCAxMDUsIDExMCwgODAsIDEwOCwgOTcsIDEx
MCwgMTAxLCA2MSwgNDAsIDk5LCAxMTcsIDk4LCAxMDEsIDgwLCAxMTEsIDExNSwgNDUsIDEwNCwg
OTcsIDEwOCwgMTAyLCA4MywgMTA1LCAxMjIsIDEwMSwgNDUsIDExOCwgMTAxLCAxMTQsIDExNiwg
MTAxLCAxMjAsIDgwLCAxMTEsIDExNSwgNDEsIDQyLCAxMDUsIDExMCwgMTE4LCA3OSwgMTE0LCAx
MDUsIDEwMywgODYsIDEwMSwgOTksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MDgsIDk3LCAxMTQsIDEwMywgMTAxLCAxMTUsIDExNiwgNzMsIDExMCwgMTE2LCAxMDEsIDExNCwg
MTE1LCAxMDEsIDk5LCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgMTA1LCAxMTAsIDExNiwgMTAxLCAx
MTQsIDExNSwgMTAxLCA5OSwgNjUsIDExNiwgNzcsIDk3LCAxMjAsIDgwLCAxMDgsIDk3LCAxMTAs
IDEwMSwgNDQsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDY1LCAxMTYs
IDc3LCAxMDUsIDExMCwgODAsIDEwOCwgOTcsIDExMCwgMTAxLCA0MSwgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTks
IDEwMSwgNjEsIDEwOSwgMTA1LCAxMTAsIDQwLCAxMDksIDEwNSwgMTEwLCA0MCwgMTA4LCA5Nywg
MTE0LCAxMDMsIDEwMSwgMTE1LCAxMTYsIDczLCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAx
LCA5OSwgNDYsIDEyMCwgNDQsIDEwOCwgOTcsIDExNCwgMTAzLCAxMDEsIDExNSwgMTE2LCA3Mywg
MTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDQ2LCAxMjEsIDQxLCA0NCwgMTA4LCA5
NywgMTE0LCAxMDMsIDEwMSwgMTE1LCAxMTYsIDczLCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwg
MTAxLCA5OSwgNDYsIDEyMiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MDUsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCAxMTYsIDgwLCAxMTEsIDExNSwg
MTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA4MywgNjEsIDExOCwgMTAxLCAxMTQsIDExNiwg
MTAxLCAxMjAsIDgwLCAxMTEsIDExNSwgNDMsIDExMSwgMTE0LCAxMDUsIDEwMywgODYsIDEwMSwg
OTksIDQyLCAxMDAsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAs
IDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDUsIDExMCwgMTE2LCAxMDEsIDEx
NCwgMTE1LCAxMDEsIDk5LCAxMTYsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDg3LCA4MywgNDUsIDk5LCAxMTcsIDk4LCAxMDEsIDgwLCAxMTEsIDExNSwgNTksIDEzLCAx
MCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwg
MTE3LCAxMTYsIDEwMSwgNzAsIDEwNSwgMTIwLCAxMDEsIDEwMCwgNjksIDExMywgMTE3LCAxMDUs
IDExNCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCAxMDMsIDExNywgMTA4LCA5NywgMTE0LCA2Nywg
MTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAx
MTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDEwOCwgMTExLCAxMTAsIDYxLCA5NywgMTE2LCA5NywgMTEwLCA0MCwgMTAwLCAxMDUs
IDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIyLCA0NCwgMTAwLCAxMDUs
IDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIwLCA0MSwgNTksIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgOTcsIDExNiwgNjEsIDk3LCA5OSwg
MTExLCAxMTUsIDQwLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDQ2LCAxMjEsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1LCAxMTIs
IDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE4
LCAxMDEsIDk5LCA1MCwgNDAsIDEwOCwgMTExLCAxMTAsIDQ0LCAxMDgsIDk3LCAxMTYsIDQxLCA0
MiwgODIsIDY5LCA2NywgNzMsIDgwLCA4MiwgNzksIDY3LCA2NSwgNzYsIDk1LCA4MCwgNzMsIDUw
LCA0MiwgNTAsIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDExNSwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0
LCAxMDAsIDExNSwgNDYsIDEyMCwgNDIsIDQ4LCA0NiwgNTMsIDQzLCA0OCwgNDYsIDUzLCA1OSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE2LCA2MSwgMTE1LCAxMTIsIDEw
NCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NiwgMTIxLCA1
OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5
LCA1MSwgNDAsIDExNSwgNDQsIDExNiwgNDQsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEw
MSwgNzcsIDEwNSwgMTE0LCAxMTQsIDExMSwgMTE0LCAxMDEsIDEwMCwgNzAsIDEwNSwgMTIwLCAx
MDEsIDEwMCwgNjksIDExMywgMTE3LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCAx
MDMsIDExNywgMTA4LCA5NywgMTE0LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAx
MTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDEx
NSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgs
IDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAx
MDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0MSwgMTMsIDEwLCAxMjMsIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTExLCAxMTAsIDYxLCA5Nywg
MTE2LCA5NywgMTEwLCA0MCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA0NiwgMTIyLCA0NCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA0NiwgMTIwLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDEwOCwgOTcsIDExNiwgNjEsIDk3LCA5OSwgMTExLCAxMTUsIDQwLCAxMDAsIDEwNSwgMTE0LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjEsIDQxLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUwLCAzMiwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwg
MTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDEwOCwgMTExLCAx
MTAsIDQ0LCAxMDgsIDk3LCAxMTYsIDQxLCA0MiwgODIsIDY5LCA2NywgNzMsIDgwLCA4MiwgNzks
IDY3LCA2NSwgNzYsIDk1LCA4MCwgNzMsIDUwLCA0MiwgNTAsIDQ2LCA0OCwgNTksIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwg
MTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDYsIDEyMCwgNDIsIDQ4LCA0
NiwgNTMsIDQzLCA0OCwgNDYsIDUzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTE2LCA2MSwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTEx
LCAxMTQsIDEwMCwgMTE1LCA0NiwgMTIxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcs
IDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ5LCA0NiwgNDgsIDQ1LCAxMTUs
IDQ0LCAxMTYsIDQ0LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY5LCAxMTMsIDEx
NywgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgMTAzLCAxMTcsIDEwOCwgOTcsIDEx
NCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIs
IDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5Nywg
MTA4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTIxLCAxMDEsIDgwLCAxMTEsIDEx
NSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0
LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2
LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDk5LCA5NywgMTA5LCAxMDEsIDExNCwgOTcsIDg0LCAxMTEsIDg2LCAxMDEsIDExNCwg
MTE2LCAxMDEsIDEyMCwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIs
IDEwMSwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ2LCAxMjAs
IDEyMSwgMTIyLCA0NSwgMTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1
LCAxMTEsIDExMCwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDYx
LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTQsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgNDAsIDk5LCA5NywgMTA5LCAxMDEsIDExNCwgOTcs
IDg0LCAxMTEsIDg2LCAxMDEsIDExNCwgMTE2LCAxMDEsIDEyMCwgNDQsIDExOSwgMTExLCAxMTQs
IDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDQxLCA1OSwgMTMsIDEw
LCAxMTQsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0Miwg
MTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExNCwgNDQsIDQ4LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDExMSwgMTEwLCA2MSwgOTcsIDExNiwgOTcs
IDExMCwgNDAsIDExNCwgNDYsIDEyMiwgNDQsIDExNCwgNDYsIDEyMCwgNDEsIDU5LCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDk3LCAxMTYsIDYxLCA5NywgOTksIDEx
MSwgMTE1LCA0MCwgMTE0LCA0NiwgMTIxLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MCwgMzIsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAx
MDAsIDExNSwgNjEsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCAxMDgsIDExMSwgMTEwLCA0NCwgMTA4
LCA5NywgMTE2LCA0MSwgNDIsIDgyLCA2OSwgNjcsIDczLCA4MCwgODIsIDc5LCA2NywgNjUsIDc2
LCA5NSwgODAsIDczLCA1MCwgNDIsIDUwLCA0NiwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMTUsIDYxLCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2
NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ2LCAxMjAsIDQyLCA0OCwgNDYsIDUzLCA0Mywg
NDgsIDQ2LCA1MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNiwg
NjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAs
IDExNSwgNDYsIDEyMSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwg
MzIsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTUsIDQ0LCAxMTYsIDQ0LCA0OCwgNDEsIDU5LCAx
MywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAx
MTIsIDExNywgMTE2LCAxMDEsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAx
MDgsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMy
LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcs
IDEwOCwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDQ0LCAx
MDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTMsIDEwLCAxMjMs
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEw
NSwgMTE0LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0
MCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNDIsIDExOSwgMTEx
LCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNzgsIDExMSwgMTE0LCAxMDksIDk3
LCAxMDgsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQw
LCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA0MiwgMTE4LCAxMDEs
IDk5LCA1MiwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwg
OTcsIDEwOCwgNDQsIDQ4LCA0NiwgNDgsIDQxLCA0MSwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTQsIDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
NDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA0NCwgMTE4LCAxMDUsIDEwMSwg
MTE5LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDU5LCAxMywgMTAsIDExNCwgNjEs
IDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwg
OTksIDUyLCA0MCwgMTE0LCA0NCwgNDgsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCA0NiwgMTIy
LCA2MSwgMTE0LCA0NiwgMTIyLCA0NSwgNDksIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDEwOSwgNjEsIDUwLCA0NiwgNDgsIDQyLCAxMDgsIDEwMSwgMTEw
LCAxMDMsIDExNiwgMTA0LCA0MCwgMTE0LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTQsIDQ2LCAxMjAsIDQ3
LCAxMDksIDQzLCA0OCwgNDYsIDUzLCA0NCwgNDksIDQ2LCA0OCwgNDUsIDExNCwgNDYsIDEyMSwg
NDcsIDEwOSwgNDUsIDQ4LCA0NiwgNTMsIDQ0LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAx
MDEsIDgwLCAxMDgsIDk3LCAxMTAsIDk3LCAxMTQsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDEx
NSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAs
IDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwg
MTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0
NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDEzLCAxMCwg
MTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4
LCAxMDUsIDExNCwgNjEsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ2
LCAxMjAsIDEyMSwgMTIyLCA0NSwgMTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDEx
NiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAx
MTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
MTA1LCAxMjIsIDEwMSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA0MCwg
MTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDQ0LCAxMTksIDExMSwgMTE0LCAxMDgs
IDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0
LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTQs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgOTksIDExMSwgMTExLCAx
MTQsIDEwMCwgMTE1LCA0NCwgNDksIDQxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjcs
IDExNywgOTgsIDEwNSwgOTksIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwg
MTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0
NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTEx
LCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEsIDEyMSwg
MTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTA5LCA5Nywg
MTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwg
NjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExOSwg
MTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NSwg
MTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDEs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMTEsIDExNCwgMTAw
LCAxMTUsIDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgNDAsIDExOCwgMTA1
LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA0NCwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4
LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwgNTksIDEzLCAxMCwgOTksIDExMSwgMTExLCAx
MTQsIDEwMCwgMTE1LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNCwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEy
MCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUs
IDQ0LCA0OCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAx
LCA2NywgMTE3LCA5OCwgMTA1LCA5OSwgNzYsIDExMSwgOTksIDk3LCAxMDgsIDY3LCAxMTEsIDEx
MSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0
LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwg
MTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAx
MDUsIDExMSwgMTEwLCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEy
MCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDEwNSwgMTIyLCAxMDEsIDQ0LCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQxLCAxMywgMTAsIDEyMywg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1
LCAxMTQsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQw
LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NiwgMTIwLCAxMjEsIDEy
MiwgNDUsIDEwMSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTExLCAx
MTQsIDEwMCwgMTE1LCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDQwLCAx
MTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgNDQsIDExOSwgMTExLCAxMTQsIDEwOCwg
MTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDU5LCAxMywgMTAsIDk5LCAxMTEs
IDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExMiwgOTcsIDExNCwgOTcsIDEwOCwgMTA4LCA5Nywg
MTIwLCA2NywgMTExLCAxMTQsIDExNCwgMTAxLCA5OSwgMTE2LCA3OCwgMTExLCAxMTQsIDEwOSwg
OTcsIDEwOCwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ2LCAx
MjAsIDEyMSwgMTIyLCA0NCwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NCwgMTE0LCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCAxMDUsIDEyMiwg
MTAxLCA0NCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQxLCA1OSwgMTMsIDEwLCA5
OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0
LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2
LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDk5LCAxMTEsIDExMSwg
MTE0LCAxMDAsIDExNSwgNDQsIDQ4LCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYs
IDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDU5LCAxMywg
MTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIs
IDExNywgMTE2LCAxMDEsIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIs
IDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTA5LCA5Nywg
MTE2LCA1MiwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMy
LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3
LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwg
MTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNCwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAx
MDUsIDEyMCwgNDIsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDQyLCAxMTksIDExMSwgMTE0LCAx
MDgsIDEwMCwgODAsIDExMSwgMTE1LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDgz
LCAxMDcsIDEyMSwgNjYsIDExMSwgMTIwLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDg3LCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
NDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMy
LCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEs
IDk5LCA1MiwgNDAsIDExMiwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4Nywg
NDQsIDQ4LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDEx
NSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAs
IDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwg
MTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAs
IDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3
LCAxMTYsIDEwMSwgODMsIDEwNywgMTIxLCA2NiwgMTExLCAxMjAsIDY3LCAxMTEsIDExMSwgMTE0
LCAxMDAsIDExNSwgNDAsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDEx
MCwgODUsIDg2LCA4NywgNDQsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDU5LCAxMywgMTAsIDEy
NSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwg
ODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA2
OCwgNjksIDcwLCA3MywgNzgsIDczLCA4NCwgNzMsIDc5LCA3OCwgODMsIDEzLCAxMCwgMTA4LCA5
NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMDUsIDEx
MSwgMTEwLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAxMTEsIDExNywgMTE2LCAzMiwgMTE4LCAx
MDEsIDk5LCA1MiwgMzIsIDEwMywgMTA4LCA3MCwgMTE0LCA5NywgMTAzLCA2NywgMTExLCAxMDgs
IDExMSwgMTE0LCA1OSwgMTAsIDExOCwgMTExLCAxMDUsIDEwMCwgMzIsIDEwOSwgOTcsIDEwNSwg
MTEwLCA0MCwgMTE4LCAxMTEsIDEwNSwgMTAwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1
LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA3NywgNjUsIDczLCA3OCwgOTUs
IDY2LCA2OSwgNzEsIDczLCA3OCwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCAx
MDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
ODcsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAx
MTgsIDY5LCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwg
NDYsIDEyMCwgMTIxLCAxMjIsIDQ1LCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDg3LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAx
MDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4
NywgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTcsIDExOCwgNzksIDEw
MiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA2MSwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDQ4LCA0Niwg
NDgsIDQ0LCA0OCwgNDYsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5
NywgMTA4LCA4NywgNjEsIDEwMywgMTA4LCA5NSwgNzAsIDExNCwgMTExLCAxMTAsIDExNiwgNzAs
IDk3LCA5OSwgMTA1LCAxMTAsIDEwMywgMzIsIDYzLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5
NywgMTA4LCA4NywgMzIsIDU4LCAzMiwgNDUsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
ODcsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTUsIDExNywgMTE0LCAxMDIs
IDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNjEsIDExOCwgNjUsIDEw
OCwgOTgsIDEwMSwgMTAwLCAxMTEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEw
MywgOTgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgMTA4LCAx
MTIsIDEwNCwgOTcsIDYxLCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA2NywgMTEx
LCAxMDgsIDExMSwgMTE0LCA0NiwgOTcsIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUs
IDcxLCA3NywgNjksIDc4LCA4NCwgOTUsIDg1LCA4MCwgNjgsIDY1LCA4NCwgNjksIDk1LCA2NSwg
NzYsIDY2LCA2OSwgNjgsIDc5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcxLCA3Nywg
NjksIDc4LCA4NCwgOTUsIDg1LCA4MCwgNjgsIDY1LCA4NCwgNjksIDk1LCA2NSwgNzYsIDgwLCA3
MiwgNjUsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2Nywg
ODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA5
NSwgNjYsIDY5LCA3MCwgNzksIDgyLCA2OSwgOTUsIDc2LCA3MywgNzEsIDcyLCA4NCwgODMsIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAx
MTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEw
OCwgMTExLCAxMTQsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDksIDQ2LCA0NCwgNDksIDQ2
LCA0NCwgNDksIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwg
NjEsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwg
MTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCA5NywgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2Nywg
MTExLCAxMDgsIDExMSwgMTE0LCA2MSwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYs
IDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDEx
NywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcs
IDExNiwgMTAxLCA0MCwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIs
IDk3LCA5OSwgMTAxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDYxLCA0OSwgNDYs
IDQ1LCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAx
MDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEs
IDExNiwgODYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDYxLCAx
MDAsIDExMSwgMTE2LCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNDQsIDEx
OCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDg3LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAx
MDAsIDExMSwgMTE2LCA4NiwgNjEsIDk3LCA5OCwgMTE1LCA2OSwgMTEyLCAxMTUsIDQwLCA3OCwg
MTAwLCAxMTEsIDExNiwgODYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAx
MDAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDEwOCwg
MTEyLCAxMDQsIDk3LCA3MSwgNjEsIDk5LCAxMTEsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE2LCA4
MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDg0LCAxMTEsIDY1LCAx
MTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDgzLCAxMDgsIDExMSwgMTEyLCAxMDEsIDQwLCAx
MTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDY1LCA2NSwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwg
MTEwLCAxMDEsIDExNSwgMTE1LCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCAxMTUsIDYxLCAx
MDMsIDEwMSwgMTE2LCA2NSwgNjUsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAx
MTUsIDExNSwgNzAsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwgMTE1LCA0MCwgMTEwLCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCA4NywgNDYsIDEyMCwgMTIxLCAxMjIsIDQxLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUyLCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAx
MDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDYx
LCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0
NCwgNDgsIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTEw
LCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA3MywgMTE0LCAx
MTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDExOCwgMTAxLCA5OSwgNTEs
IDQwLCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDg2LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA2MSwgOTksIDExMSwgMTA5LCAx
MTIsIDExNywgMTE2LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwg
NTIsIDQwLCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA0
NCwgNDksIDQ2LCA0OCwgNDEsIDQ0LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA0
MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUs
IDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODYs
IDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NzYsIDc5LCA2OCwgNjEsIDEwMywgMTAxLCAxMTYsIDc2LCAxMTEsIDEwMCwgNzAsIDExNCwgMTEx
LCAxMDksIDY1LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDQwLCAxMTgsIDgyLCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwg
MTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwg
NDYsIDEyMCwgNDQsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDQxLCA1OSwgMTMsIDEwLCAx
MTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzYsIDc5LCA2
OCwgNjEsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3
NiwgNzksIDY4LCA0MiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA3NywgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcs
IDk5LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDQ2LCAxMjEsIDQzLCAxMTgsIDgyLCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCAxMDUsIDk5LCAx
MTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTAyLCAx
MTEsIDExNSwgNDYsIDEyMiwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDExNCwgMTAxLCAxMTMsIDExNywgMTAxLCAxMTUsIDExNiwgMTAxLCAxMDAsIDgyLCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2LCA3OSwgNjgsIDYxLCAxMTQs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzYsIDc5LCA2OCwg
NTksIDEzLCAxMCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwg
MTEwLCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMTUsIDk3
LCAxMDksIDExMiwgMTA4LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDc2LCAxMTEsIDEwMCwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA0
NCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAx
MTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDQsIDExNCwgMTAxLCAxMTMsIDExNywgMTAxLCAxMTUs
IDExNiwgMTAxLCAxMDAsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDc2LCA3OSwgNjgsIDQxLCA1OSwgMTMsIDEwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDEx
NCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDEx
MCwgOTksIDEwMSwgNDYsIDExNCwgMTAzLCA5OCwgNjEsIDEwMiwgMTE0LCAxMTEsIDEwOSwgODIs
IDcxLCA2NiwgNjgsIDQwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwg
MTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDEsIDU5
LCAxMywgMTAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDEx
MCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0NiwgMTE0LCAxMDMs
IDk4LCA0MiwgNjEsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNDYsIDEyMCwgNTksIDEzLCAxMCwgMTAx
LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5
NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQ2LCAxMTQsIDEwMywgOTgsIDQyLCA2MSwg
MTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2Nywg
MTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMDEsIDEx
MCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNzMsIDExNCwg
MTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQyLCA2MSwgMTE4LCA4MiwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDEx
MSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDYxLCAxMDksIDk3LCAxMjAsIDQwLCAxMDksIDk3LCAxMjAsIDQwLCAxMTUsIDExNywgMTE0
LCAxMDIsIDk3LCA5OSwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgNDQs
IDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0
LCA0NiwgMTAzLCA0MSwgNDQsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2Nywg
MTExLCAxMDgsIDExMSwgMTE0LCA0NiwgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAs
IDk5LCAxMDEsIDU3LCA0OCwgNjEsIDEwMiwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwg
NzEsIDExNCwgOTcsIDEyMiwgMTA1LCAxMTAsIDEwMywgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4
LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDQ4LCA2MSwgMTE1
LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2
LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTUsIDEx
MiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDEx
MSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA1NywgNDgsIDYxLCAxMTgsIDEwMSwgOTks
IDUxLCA0MCwgNDksIDQ2LCA0OCwgNDQsIDQ5LCA0NiwgNDgsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwg
NDIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1
NywgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEsIDExMCwgMTE4LCAx
MDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIs
IDYxLCAxMDMsIDEwMSwgMTE2LCA2NiwgODIsIDY4LCA3MCwgNzYsIDExMSwgMTExLCAxMDcsIDEx
NywgMTEyLCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTE0LCAxMTEsIDExNywgMTAz
LCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMDEsIDExMCwgMTAxLCAxMTQsIDEwMywgMTIxLCA2NywgMTExLCAxMTAsIDExNSwg
MTAxLCAxMTQsIDExOCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzAsIDk3LCA5OSwgMTE2LCAx
MTEsIDExNCwgNjEsIDEwMywgMTAxLCAxMTYsIDY5LCAxMTAsIDEwMSwgMTE0LCAxMDMsIDEyMSwg
NjcsIDExMSwgMTEwLCAxMTUsIDEwMSwgMTE0LCAxMTgsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDQwLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAx
MDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwg
MTEwLCAxMTYsIDgyLCA0OCwgNDQsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwg
MTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNDEsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDY2
LCA5NywgMTE1LCAxMDEsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDgsIDQ2LCA0NCwgNDgs
IDQ2LCA0NCwgNDgsIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwg
MTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCAxMTIs
IDExNCwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgNTksIDEzLCAxMCwgMTA4LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgMTA1LCAxMTAs
IDEwMiwgMTExLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCAx
MDQsIDk3LCAxMDAsIDExMSwgMTE5LCA2MSwgNDksIDQ2LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEw
LCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTAzLCAxMDEsIDEx
NiwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzAs
IDExNCwgMTExLCAxMDksIDY1LCAxMTAsIDk3LCAxMDgsIDEyMSwgMTE2LCAxMDUsIDk5LCA5Nywg
MTA4LCA2NiwgODIsIDY4LCA3MCwgNzYsIDExMSwgMTExLCAxMDcsIDExNywgMTEyLCA5NSwgNzQs
IDExMSwgMTEwLCAxMDEsIDExNSwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDQsIDExNSwg
MTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwg
MTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDQ4LCA0NCwgMTE1LCAxMTIsIDEwMSwg
OTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwg
MTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNTcsIDQ4LCA0NCwgMTE1LCAxMTMsIDExNCwgMTE2LCA0
MCwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAx
LCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1
LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA0NiwgMTE0LCAxMDMsIDk4LCA2MSwgNDAsIDQ5LCA0
NiwgNDUsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAx
LCA0MSwgNDIsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMDgsIDk4LCAx
MDEsIDEwMCwgMTExLCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAx
MDUsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAx
MTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAx
MTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDczLCAxMTQs
IDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0MiwgNjEsIDExNSwgMTE3LCAx
MTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA0NiwgMTE0
LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMDUsIDEx
MCwgOTcsIDEwOCwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDEwMSwg
MTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcs
IDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEw
LCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwg
MTAxLCA0MiwgNjEsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDEx
MCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDgyLCA5NywgMTAwLCAx
MDUsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCA5OSwgOTcsIDEwOCwgMTAxLCAxMDAsIDYxLCAxMDIs
IDEwNSwgMTEwLCA5NywgMTA4LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0
MiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAx
MTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDQ2LCAxMjIsIDU5LCAxMywgMTAsIDEw
MiwgMTA1LCAxMTAsIDk3LCAxMDgsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEs
IDgzLCA5OSwgOTcsIDEwOCwgMTAxLCAxMDAsIDQyLCA2MSwgMTAxLCAxMTAsIDEwMSwgMTE0LCAx
MDMsIDEyMSwgNjcsIDExMSwgMTEwLCAxMTUsIDEwMSwgMTE0LCAxMTgsIDk3LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2OCwgMTA1LCAxMDIsIDEwMiwg
MTE3LCAxMTUsIDEwMSwgNjEsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNjYs
IDk3LCAxMTUsIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjgsIDEw
NSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDQyLCA2MSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5
NywgOTksIDEwMSwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDQ2LCAxMTQsIDEwMywgOTgs
IDU5LCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY4LCAxMDUsIDEwMiwgMTAyLCAx
MTcsIDExNSwgMTAxLCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEw
OCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDQ0LCA0OCwgNDYsIDQ4LCA0MSwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgs
IDY1LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDYxLCAxMTgsIDY1LCAxMDksIDk4LCAx
MDUsIDEwMSwgMTEwLCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDEw
MiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY1LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDQy
LCA2MSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDEwOCwgOTgsIDEwMSwg
MTAwLCAxMTEsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2OSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUs
IDExOCwgMTAxLCA2MSwgMTE4LCA2OSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAx
LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcs
IDExNSwgMTA1LCAxMTEsIDExMCwgNzAsIDExMSwgMTE0LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTks
IDExNiwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDYxLCA5NywgMTA5LCA5OCwg
MTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwg
MTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUy
LCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjEs
IDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY1
LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDQyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEs
IDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2Nywg
MTExLCAxMDgsIDExMSwgMTE0LCAzMiwgNDMsIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEw
OCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDQyLCA5NywgMTA5LCA5OCwgMTA1
LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEw
LCA3MCwgMTExLCAxMTQsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCA2OCwgMTA1LCAxMDIs
IDEwMiwgMTE3LCAxMTUsIDEwMSwgNDIsIDExOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1
LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExNiwgMTIxLCA0
NiwgMTIwLCAzMiwgNDMsIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNzMsIDExNCwg
MTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQyLCA5NywgMTA5LCA5OCwgMTA1
LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEw
LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0MiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2
LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAx
MjEsIDQ2LCAxMjIsIDMyLCA0MywgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4Miwg
OTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgOTksIDk3LCAxMDgsIDEwMSwgMTAw
LCAzMiwgNDMsIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjksIDEwOSwgMTA1LCAx
MTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNDIsIDExOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwg
MTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExNiwgMTIx
LCA0NiwgMTIxLCA0NCwgMTMsIDEwLCA5NywgMTA4LCAxMTIsIDEwNCwgOTcsIDQxLCA1OSwgMTMs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0
LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA2NiwgNjks
IDcwLCA3OSwgODIsIDY5LCA5NSwgNzAsIDc5LCA3MSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5
NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgMTAy
LCAxMDUsIDExMCwgOTcsIDEwOCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDQ4LCA0Niwg
NDgsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTExLCAxMDgs
IDExMSwgMTE0LCA2MSwgOTcsIDExMiwgMTEyLCAxMDgsIDEyMSwgNzMsIDEwOSwgOTcsIDEwMywg
MTAxLCA4MCwgMTE0LCAxMTEsIDk5LCAxMDEsIDExNSwgMTE1LCAxMDUsIDExMCwgMTAzLCA0MCwg
MTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDU5LCAx
MywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2
LCA5NywgNDIsIDYxLCAxMTgsIDEwNSwgMTE1LCAxMDUsIDk4LCAxMDUsIDEwOCwgMTA1LCAxMTYs
IDEyMSwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2
NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0
LCA5NSwgNjYsIDY5LCA3MCwgNzksIDgyLCA2OSwgOTUsIDcwLCA4MiwgNjUsIDcxLCA2NywgNzks
IDc2LCA3OSwgODIsIDEzLCAxMCwgMTAzLCAxMDgsIDcwLCAxMTQsIDk3LCAxMDMsIDY3LCAxMTEs
IDEwOCwgMTExLCAxMTQsIDYxLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTExLCAxMDgs
IDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMF0ubWFwKGMgPT4gU3RyaW5nLmZyb21D
aGFyQ29kZShjKSkuam9pbigiIik7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL2Rl
bW9zL3dlYmdwdS9iYWJ5bG9uL29uZUhlbG1ldFdlYkdQVVdTTFNoYWRlcnMuanMgYi9XZWJzaXRl
cy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9uL29uZUhlbG1ldFdlYkdQVVdTTFNoYWRl
cnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWEwNjMzNWVhNzY2YzVjMDlmNWVkMjM1NzJlNGY1NTg5NzgwMGYw
MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2Jh
Ynlsb24vb25lSGVsbWV0V2ViR1BVV1NMU2hhZGVycy5qcwpAQCAtMCwwICsxLDE1NjQgQEAKK2Nv
bnN0IHZlcnRleFNoYWRlcldTTDEgPSBgCitzdHJ1Y3QgT3V0cHV0IHsKKyAgICBmbG9hdDMgdlBv
c2l0aW9uVyA6IGF0dHJpYnV0ZSgwKTsKKyAgICBmbG9hdDMgdk5vcm1hbFcgOiBhdHRyaWJ1dGUo
MSk7CisgICAgZmxvYXQyIHZNYWluVVYxIDogYXR0cmlidXRlKDIpOworICAgIGZsb2F0NCBwb3Np
dGlvbiA6IFNWX1Bvc2l0aW9uOworfQorCitzdHJ1Y3QgU2NlbmUgeworICAgIGZsb2F0NHg0IHZp
ZXdQcm9qZWN0aW9uOworICAgIGZsb2F0NHg0IHZpZXc7Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBB
IHsKKyAgICBjb25zdGFudCBTY2VuZVtdIHNjZW5lIDogcmVnaXN0ZXIoYjAsIHNwYWNlMCk7Cisg
ICAgVGV4dHVyZTJEPGZsb2F0ND4gZW52aXJvbm1lbnRCcmRmU2FtcGxlclRleHR1cmUgOiByZWdp
c3Rlcih0MSwgc3BhY2UwKTsKKyAgICBzYW1wbGVyIGVudmlyb25tZW50QnJkZlNhbXBsZXJTYW1w
bGVyIDogcmVnaXN0ZXIoczIsIHNwYWNlMCk7Cit9CisKK3N0cnVjdCBNYXRlcmlhbCB7CisgICAg
ZmxvYXQyIHZBbGJlZG9JbmZvczsKKyAgICBmbG9hdDQgdkFtYmllbnRJbmZvczsKKyAgICBmbG9h
dDIgdk9wYWNpdHlJbmZvczsKKyAgICBmbG9hdDIgdkVtaXNzaXZlSW5mb3M7CisgICAgZmxvYXQy
IHZMaWdodG1hcEluZm9zOworICAgIGZsb2F0MyB2UmVmbGVjdGl2aXR5SW5mb3M7CisgICAgZmxv
YXQyIHZNaWNyb1N1cmZhY2VTYW1wbGVySW5mb3M7CisgICAgZmxvYXQyIHZSZWZsZWN0aW9uSW5m
b3M7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uUG9zaXRpb247CisgICAgZmxvYXQzIHZSZWZsZWN0
aW9uU2l6ZTsKKyAgICBmbG9hdDMgdkJ1bXBJbmZvczsKKyAgICBmbG9hdDR4NCBhbGJlZG9NYXRy
aXg7CisgICAgZmxvYXQ0eDQgYW1iaWVudE1hdHJpeDsKKyAgICBmbG9hdDR4NCBvcGFjaXR5TWF0
cml4OworICAgIGZsb2F0NHg0IGVtaXNzaXZlTWF0cml4OworICAgIGZsb2F0NHg0IGxpZ2h0bWFw
TWF0cml4OworICAgIGZsb2F0NHg0IHJlZmxlY3Rpdml0eU1hdHJpeDsKKyAgICBmbG9hdDR4NCBt
aWNyb1N1cmZhY2VTYW1wbGVyTWF0cml4OworICAgIGZsb2F0NHg0IGJ1bXBNYXRyaXg7CisgICAg
ZmxvYXQyIHZUYW5nZW50U3BhY2VQYXJhbXM7CisgICAgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJp
eDsKKyAgICBmbG9hdDMgdlJlZmxlY3Rpb25Db2xvcjsKKyAgICBmbG9hdDQgdkFsYmVkb0NvbG9y
OworICAgIGZsb2F0NCB2TGlnaHRpbmdJbnRlbnNpdHk7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9u
TWljcm9zdXJmYWNlSW5mb3M7CisgICAgZmxvYXQgcG9pbnRTaXplOworICAgIGZsb2F0NCB2UmVm
bGVjdGl2aXR5Q29sb3I7CisgICAgZmxvYXQzIHZFbWlzc2l2ZUNvbG9yOworICAgIGZsb2F0NCB2
RXllUG9zaXRpb247CisgICAgZmxvYXQzIHZBbWJpZW50Q29sb3I7CisgICAgZmxvYXQyIHZEZWJ1
Z01vZGU7CisgICAgZmxvYXQyIHZDbGVhckNvYXRQYXJhbXM7CisgICAgZmxvYXQ0IHZDbGVhckNv
YXRSZWZyYWN0aW9uUGFyYW1zOworICAgIGZsb2F0MiB2Q2xlYXJDb2F0SW5mb3M7CisgICAgZmxv
YXQ0eDQgY2xlYXJDb2F0TWF0cml4OworICAgIGZsb2F0MiB2Q2xlYXJDb2F0QnVtcEluZm9zOwor
ICAgIGZsb2F0MiB2Q2xlYXJDb2F0VGFuZ2VudFNwYWNlUGFyYW1zOworICAgIGZsb2F0NHg0IGNs
ZWFyQ29hdEJ1bXBNYXRyaXg7CisgICAgZmxvYXQ0IHZDbGVhckNvYXRUaW50UGFyYW1zOworICAg
IGZsb2F0IGNsZWFyQ29hdENvbG9yQXREaXN0YW5jZTsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdFRp
bnRJbmZvczsKKyAgICBmbG9hdDR4NCBjbGVhckNvYXRUaW50TWF0cml4OworICAgIGZsb2F0MyB2
QW5pc290cm9weTsKKyAgICBmbG9hdDIgdkFuaXNvdHJvcHlJbmZvczsKKyAgICBmbG9hdDR4NCBh
bmlzb3Ryb3B5TWF0cml4OworICAgIGZsb2F0NCB2U2hlZW5Db2xvcjsKKyAgICBmbG9hdDIgdlNo
ZWVuSW5mb3M7CisgICAgZmxvYXQ0eDQgc2hlZW5NYXRyaXg7CisgICAgZmxvYXQzIHZSZWZyYWN0
aW9uTWljcm9zdXJmYWNlSW5mb3M7CisgICAgZmxvYXQ0IHZSZWZyYWN0aW9uSW5mb3M7CisgICAg
ZmxvYXQ0eDQgcmVmcmFjdGlvbk1hdHJpeDsKKyAgICBmbG9hdDIgdlRoaWNrbmVzc0luZm9zOwor
ICAgIGZsb2F0NHg0IHRoaWNrbmVzc01hdHJpeDsKKyAgICBmbG9hdDIgdlRoaWNrbmVzc1BhcmFt
OworICAgIGZsb2F0MyB2RGlmZnVzaW9uRGlzdGFuY2U7CisgICAgZmxvYXQ0IHZUaW50Q29sb3I7
CisgICAgZmxvYXQzIHZTdWJTdXJmYWNlSW50ZW5zaXR5OworICAgIGZsb2F0MyB2U3BoZXJpY2Fs
TDAwOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDFfMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwx
MDsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyXzI7
CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMl8xOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIwOwor
ICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIxOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIyOworICAg
IGZsb2F0MyB2U3BoZXJpY2FsWDsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFk7CisgICAgZmxvYXQz
IHZTcGhlcmljYWxaOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWFhfWlo7CisgICAgZmxvYXQzIHZT
cGhlcmljYWxZWV9aWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFpaOworICAgIGZsb2F0MyB2U3Bo
ZXJpY2FsWFk7CisgICAgZmxvYXQzIHZTcGhlcmljYWxZWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNh
bFpYOworfQorCitzdHJ1Y3QgTWVzaCB7CisgICAgZmxvYXQ0eDQgd29ybGQ7CisgICAgZmxvYXQg
dmlzaWJpbGl0eTsKK30KKworc3RydWN0IEJpbmRHcm91cEIgeworICAgIGNvbnN0YW50IE1hdGVy
aWFsW10gbWF0ZXJpYWwgOiByZWdpc3RlcihiMCwgc3BhY2UxKTsKKyAgICBjb25zdGFudCBNZXNo
W10gbWVzaCA6IHJlZ2lzdGVyKGIxLCBzcGFjZTEpOworfQorCitzdHJ1Y3QgQmluZEdyb3VwQyB7
CisgICAgVGV4dHVyZTJEPGZsb2F0ND4gcmVmbGVjdGlvblNhbXBsZXJUZXh0dXJlIDogcmVnaXN0
ZXIodDAsIHNwYWNlMik7CisgICAgc2FtcGxlciByZWZsZWN0aW9uU2FtcGxlclNhbXBsZXIgOiBy
ZWdpc3RlcihzMSwgc3BhY2UyKTsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiBhbGJlZG9TYW1wbGVy
VGV4dHVyZSA6IHJlZ2lzdGVyKHQyLCBzcGFjZTIpOworICAgIHNhbXBsZXIgYWxiZWRvU2FtcGxl
clNhbXBsZXIgOiByZWdpc3RlcihzMywgc3BhY2UyKTsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiBy
ZWZsZWN0aXZpdHlTYW1wbGVyVGV4dHVyZSA6IHJlZ2lzdGVyKHQ0LCBzcGFjZTIpOworICAgIHNh
bXBsZXIgcmVmbGVjdGl2aXR5U2FtcGxlclNhbXBsZXIgOiByZWdpc3RlcihzNSwgc3BhY2UyKTsK
KyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiBhbWJpZW50U2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0
Niwgc3BhY2UyKTsKKyAgICBzYW1wbGVyIGFtYmllbnRTYW1wbGVyU2FtcGxlciA6IHJlZ2lzdGVy
KHM3LCBzcGFjZTIpOworICAgIFRleHR1cmUyRDxmbG9hdDQ+IGVtaXNzaXZlU2FtcGxlclRleHR1
cmUgOiByZWdpc3Rlcih0OCwgc3BhY2UyKTsKKyAgICBzYW1wbGVyIGVtaXNzaXZlU2FtcGxlclNh
bXBsZXIgOiByZWdpc3RlcihzOSwgc3BhY2UyKTsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiBidW1w
U2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0MTAsIHNwYWNlMik7CisgICAgc2FtcGxlciBidW1w
U2FtcGxlclNhbXBsZXIgOiByZWdpc3RlcihzMTEsIHNwYWNlMik7Cit9CisKK2Zsb2F0M3gzIHRy
YW5zcG9zZU1hdDMoZmxvYXQzeDMgaW5NYXRyaXgpIHsKKyAgICBmbG9hdDMgaTAgPSBpbk1hdHJp
eFswXTsKKyAgICBmbG9hdDMgaTEgPSBpbk1hdHJpeFsxXTsKKyAgICBmbG9hdDMgaTIgPSBpbk1h
dHJpeFsyXTsKKyAgICBmbG9hdDN4MyBvdXRNYXRyaXggPSBmbG9hdDN4MygKKyAgICAgICAgZmxv
YXQzKGkwLngsIGkxLngsIGkyLngpLAorICAgICAgICBmbG9hdDMoaTAueSwgaTEueSwgaTIueSks
CisgICAgICAgIGZsb2F0MyhpMC56LCBpMS56LCBpMi56KQorICAgICk7CisgICAgcmV0dXJuIG91
dE1hdHJpeDsKK30KKworZmxvYXQzeDMgaW52ZXJzZU1hdDMoZmxvYXQzeDMgaW5NYXRyaXgpIHsK
KyAgICBmbG9hdCBhMDAgPSBpbk1hdHJpeFswXVswXSwgYTAxID0gaW5NYXRyaXhbMF1bMV0sIGEw
MiA9IGluTWF0cml4WzBdWzJdOworICAgIGZsb2F0IGExMCA9IGluTWF0cml4WzFdWzBdLCBhMTEg
PSBpbk1hdHJpeFsxXVsxXSwgYTEyID0gaW5NYXRyaXhbMV1bMl07CisgICAgZmxvYXQgYTIwID0g
aW5NYXRyaXhbMl1bMF0sIGEyMSA9IGluTWF0cml4WzJdWzFdLCBhMjIgPSBpbk1hdHJpeFsyXVsy
XTsKKyAgICBmbG9hdCBiMDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjE7CisgICAgZmxvYXQgYjEx
ID0gLWEyMiAqIGExMCArIGExMiAqIGEyMDsKKyAgICBmbG9hdCBiMjEgPSBhMjEgKiBhMTAgLSBh
MTEgKiBhMjA7CisgICAgZmxvYXQgZGV0ID0gYTAwICogYjAxICsgYTAxICogYjExICsgYTAyICog
YjIxOworICAgIHJldHVybiBmbG9hdDN4MyhiMDEsIC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEsIGEx
MiAqIGEwMSAtIGEwMiAqIGExMSwKKyAgICAgICAgYjExLCBhMjIgKiBhMDAgLSBhMDIgKiBhMjAs
IC1hMTIgKiBhMDAgKyBhMDIgKiBhMTAsCisgICAgICAgIGIyMSwgLWEyMSAqIGEwMCArIGEwMSAq
IGEyMCwgYTExICogYTAwIC0gYTAxICogYTEwKSAvIGRldDsKK30KKworZmxvYXQzIHRvTGluZWFy
U3BhY2UoZmxvYXQzIGNvbG9yKSB7CisgICAgcmV0dXJuIHBvdyhjb2xvciwgZmxvYXQzKDIuMiwg
Mi4yLCAyLjIpKTsKK30KKworZmxvYXQzIHRvR2FtbWFTcGFjZShmbG9hdDMgY29sb3IpIHsKKyAg
ICByZXR1cm4gcG93KGNvbG9yLCBmbG9hdDMoMS4wIC8gMi4yLCAxLjAgLyAyLjIsIDEuMCAvIDIu
MikpOworfQorCitmbG9hdCBzcXVhcmUoZmxvYXQgdmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUg
KiB2YWx1ZTsKK30KKworZmxvYXQgcG93NShmbG9hdCB2YWx1ZSkgeworICAgIGZsb2F0IHNxID0g
dmFsdWUgKiB2YWx1ZTsKKyAgICByZXR1cm4gc3EgKiBzcSAqIHZhbHVlOworfQorCitmbG9hdCBn
ZXRMdW1pbmFuY2UoZmxvYXQzIGNvbG9yKSB7CisgICAgcmV0dXJuIGNsYW1wKGRvdChjb2xvciwg
ZmxvYXQzKDAuMjEyNiwgMC43MTUyLCAwLjA3MjIpKSwgMC4sIDEuKTsKK30KKworZmxvYXQgZ2V0
UmFuZChmbG9hdDIgc2VlZCkgeworICAgIHJldHVybiBmcmFjKHNpbihkb3Qoc2VlZC54eSwgZmxv
YXQyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpOworfQorCitmbG9hdCBkaXRoZXIo
ZmxvYXQyIHNlZWQsIGZsb2F0IHZhcmlhbmNlQW1vdW50KSB7CisgICAgZmxvYXQgcmFuZCA9IGdl
dFJhbmQoc2VlZCk7CisgICAgZmxvYXQgZGl0aGVyID0gbGVycCgtdmFyaWFuY2VBbW91bnQgLyAy
NTUuMCwgdmFyaWFuY2VBbW91bnQgLyAyNTUuMCwgcmFuZCk7CisgICAgcmV0dXJuIGRpdGhlcjsK
K30KKworZmxvYXQ0IHRvUkdCRChmbG9hdDMgY29sb3IpIHsKKyAgICBmbG9hdCBtYXhSR0IgPSBt
YXgobWF4KGNvbG9yLngsIG1heChjb2xvci55LCBjb2xvci56KSksIDAuMDAwMDAwMSk7CisgICAg
ZmxvYXQgRCA9IG1heCgyNTUuMCAvIG1heFJHQiwgMS4pOworICAgIEQgPSBjbGFtcChmbG9vcihE
KSAvIDI1NS4wLCAwLiwgMS4pOworICAgIGZsb2F0MyByZ2IgPSBjb2xvciAqIEQ7CisgICAgcmdi
ID0gdG9HYW1tYVNwYWNlKHJnYik7CisgICAgcmV0dXJuIGZsb2F0NChyZ2IsIEQpOworfQorCitm
bG9hdDMgZnJvbVJHQkQoZmxvYXQ0IHJnYmQpIHsKKyAgICByZ2JkLnh5eiA9IHRvTGluZWFyU3Bh
Y2UocmdiZC54eXopOworICAgIHJldHVybiByZ2JkLnh5eiAvIHJnYmQudzsKK30KKwordmVydGV4
IE91dHB1dCBtYWluKGZsb2F0MyBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQzIG5vcm1h
bCA6IGF0dHJpYnV0ZSgxKSwgZmxvYXQyIHV2IDogYXR0cmlidXRlKDIpLCBCaW5kR3JvdXBBIGJp
bmRHcm91cEEsIEJpbmRHcm91cEIgYmluZEdyb3VwQiwgQmluZEdyb3VwQyBiaW5kR3JvdXBDKSB7
CisgICAgT3V0cHV0IG91dHB1dDsKKyAgICBmbG9hdDMgcG9zaXRpb25VcGRhdGVkID0gcG9zaXRp
b247CisgICAgZmxvYXQzIG5vcm1hbFVwZGF0ZWQgPSBub3JtYWw7CisgICAgZmxvYXQyIHV2VXBk
YXRlZCA9IHV2OworICAgIGZsb2F0NHg0IGZpbmFsV29ybGQgPSBiaW5kR3JvdXBCLm1lc2hbMF0u
d29ybGQ7CisgICAgb3V0cHV0LnBvc2l0aW9uID0gbXVsKG11bChiaW5kR3JvdXBBLnNjZW5lWzBd
LnZpZXdQcm9qZWN0aW9uLCBmaW5hbFdvcmxkKSwgZmxvYXQ0KHBvc2l0aW9uVXBkYXRlZCwgMS4w
KSk7CisgICAgZmxvYXQ0IHdvcmxkUG9zID0gbXVsKGZpbmFsV29ybGQsIGZsb2F0NChwb3NpdGlv
blVwZGF0ZWQsIDEuMCkpOworICAgIG91dHB1dC52UG9zaXRpb25XID0gd29ybGRQb3MueHl6Owor
ICAgIGZsb2F0M3gzIG5vcm1hbFdvcmxkOworICAgIG5vcm1hbFdvcmxkWzBdID0gZmluYWxXb3Js
ZFswXS54eXo7CisgICAgbm9ybWFsV29ybGRbMV0gPSBmaW5hbFdvcmxkWzFdLnh5ejsKKyAgICBu
b3JtYWxXb3JsZFsyXSA9IGZpbmFsV29ybGRbMl0ueHl6OworICAgIG91dHB1dC52Tm9ybWFsVyA9
IG5vcm1hbGl6ZShtdWwobm9ybWFsV29ybGQsIG5vcm1hbFVwZGF0ZWQpKTsKKyAgICBmbG9hdDIg
dXYyID0gZmxvYXQyKDAuLCAwLik7CisgICAgb3V0cHV0LnZNYWluVVYxID0gdXZVcGRhdGVkOwor
ICAgIHJldHVybiBvdXRwdXQ7Cit9CitgOworCitjb25zdCBmcmFnbWVudFNoYWRlcldTTDEgPSBg
CitzdHJ1Y3QgU2NlbmUgeworICAgIGZsb2F0NHg0IHZpZXdQcm9qZWN0aW9uOworICAgIGZsb2F0
NHg0IHZpZXc7Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBBIHsKKyAgICBjb25zdGFudCBTY2VuZVtd
IHNjZW5lIDogcmVnaXN0ZXIoYjAsIHNwYWNlMCk7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4gZW52
aXJvbm1lbnRCcmRmU2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0MSwgc3BhY2UwKTsKKyAgICBz
YW1wbGVyIGVudmlyb25tZW50QnJkZlNhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczIsIHNwYWNl
MCk7Cit9CisKK3N0cnVjdCBNYXRlcmlhbCB7CisgICAgZmxvYXQyIHZBbGJlZG9JbmZvczsKKyAg
ICBmbG9hdDQgdkFtYmllbnRJbmZvczsKKyAgICBmbG9hdDIgdk9wYWNpdHlJbmZvczsKKyAgICBm
bG9hdDIgdkVtaXNzaXZlSW5mb3M7CisgICAgZmxvYXQyIHZMaWdodG1hcEluZm9zOworICAgIGZs
b2F0MyB2UmVmbGVjdGl2aXR5SW5mb3M7CisgICAgZmxvYXQyIHZNaWNyb1N1cmZhY2VTYW1wbGVy
SW5mb3M7CisgICAgZmxvYXQyIHZSZWZsZWN0aW9uSW5mb3M7CisgICAgZmxvYXQzIHZSZWZsZWN0
aW9uUG9zaXRpb247CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uU2l6ZTsKKyAgICBmbG9hdDMgdkJ1
bXBJbmZvczsKKyAgICBmbG9hdDR4NCBhbGJlZG9NYXRyaXg7CisgICAgZmxvYXQ0eDQgYW1iaWVu
dE1hdHJpeDsKKyAgICBmbG9hdDR4NCBvcGFjaXR5TWF0cml4OworICAgIGZsb2F0NHg0IGVtaXNz
aXZlTWF0cml4OworICAgIGZsb2F0NHg0IGxpZ2h0bWFwTWF0cml4OworICAgIGZsb2F0NHg0IHJl
ZmxlY3Rpdml0eU1hdHJpeDsKKyAgICBmbG9hdDR4NCBtaWNyb1N1cmZhY2VTYW1wbGVyTWF0cml4
OworICAgIGZsb2F0NHg0IGJ1bXBNYXRyaXg7CisgICAgZmxvYXQyIHZUYW5nZW50U3BhY2VQYXJh
bXM7CisgICAgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeDsKKyAgICBmbG9hdDMgdlJlZmxlY3Rp
b25Db2xvcjsKKyAgICBmbG9hdDQgdkFsYmVkb0NvbG9yOworICAgIGZsb2F0NCB2TGlnaHRpbmdJ
bnRlbnNpdHk7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7CisgICAg
ZmxvYXQgcG9pbnRTaXplOworICAgIGZsb2F0NCB2UmVmbGVjdGl2aXR5Q29sb3I7CisgICAgZmxv
YXQzIHZFbWlzc2l2ZUNvbG9yOworICAgIGZsb2F0NCB2RXllUG9zaXRpb247CisgICAgZmxvYXQz
IHZBbWJpZW50Q29sb3I7CisgICAgZmxvYXQyIHZEZWJ1Z01vZGU7CisgICAgZmxvYXQyIHZDbGVh
ckNvYXRQYXJhbXM7CisgICAgZmxvYXQ0IHZDbGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zOworICAg
IGZsb2F0MiB2Q2xlYXJDb2F0SW5mb3M7CisgICAgZmxvYXQ0eDQgY2xlYXJDb2F0TWF0cml4Owor
ICAgIGZsb2F0MiB2Q2xlYXJDb2F0QnVtcEluZm9zOworICAgIGZsb2F0MiB2Q2xlYXJDb2F0VGFu
Z2VudFNwYWNlUGFyYW1zOworICAgIGZsb2F0NHg0IGNsZWFyQ29hdEJ1bXBNYXRyaXg7CisgICAg
ZmxvYXQ0IHZDbGVhckNvYXRUaW50UGFyYW1zOworICAgIGZsb2F0IGNsZWFyQ29hdENvbG9yQXRE
aXN0YW5jZTsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdFRpbnRJbmZvczsKKyAgICBmbG9hdDR4NCBj
bGVhckNvYXRUaW50TWF0cml4OworICAgIGZsb2F0MyB2QW5pc290cm9weTsKKyAgICBmbG9hdDIg
dkFuaXNvdHJvcHlJbmZvczsKKyAgICBmbG9hdDR4NCBhbmlzb3Ryb3B5TWF0cml4OworICAgIGZs
b2F0NCB2U2hlZW5Db2xvcjsKKyAgICBmbG9hdDIgdlNoZWVuSW5mb3M7CisgICAgZmxvYXQ0eDQg
c2hlZW5NYXRyaXg7CisgICAgZmxvYXQzIHZSZWZyYWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7Cisg
ICAgZmxvYXQ0IHZSZWZyYWN0aW9uSW5mb3M7CisgICAgZmxvYXQ0eDQgcmVmcmFjdGlvbk1hdHJp
eDsKKyAgICBmbG9hdDIgdlRoaWNrbmVzc0luZm9zOworICAgIGZsb2F0NHg0IHRoaWNrbmVzc01h
dHJpeDsKKyAgICBmbG9hdDIgdlRoaWNrbmVzc1BhcmFtOworICAgIGZsb2F0MyB2RGlmZnVzaW9u
RGlzdGFuY2U7CisgICAgZmxvYXQ0IHZUaW50Q29sb3I7CisgICAgZmxvYXQzIHZTdWJTdXJmYWNl
SW50ZW5zaXR5OworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDAwOworICAgIGZsb2F0MyB2U3BoZXJp
Y2FsTDFfMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxMDsKKyAgICBmbG9hdDMgdlNwaGVyaWNh
bEwxMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyXzI7CisgICAgZmxvYXQzIHZTcGhlcmljYWxM
Ml8xOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIwOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIx
OworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIyOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWDsKKyAg
ICBmbG9hdDMgdlNwaGVyaWNhbFk7CisgICAgZmxvYXQzIHZTcGhlcmljYWxaOworICAgIGZsb2F0
MyB2U3BoZXJpY2FsWFhfWlo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxZWV9aWjsKKyAgICBmbG9h
dDMgdlNwaGVyaWNhbFpaOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWFk7CisgICAgZmxvYXQzIHZT
cGhlcmljYWxZWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFpYOworfQorCitzdHJ1Y3QgTWVzaCB7
CisgICAgZmxvYXQ0eDQgd29ybGQ7CisgICAgZmxvYXQgdmlzaWJpbGl0eTsKK30KKworc3RydWN0
IEJpbmRHcm91cEIgeworICAgIGNvbnN0YW50IE1hdGVyaWFsW10gbWF0ZXJpYWwgOiByZWdpc3Rl
cihiMCwgc3BhY2UxKTsKKyAgICBjb25zdGFudCBNZXNoW10gbWVzaCA6IHJlZ2lzdGVyKGIxLCBz
cGFjZTEpOworfQorCitzdHJ1Y3QgQmluZEdyb3VwQyB7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4g
cmVmbGVjdGlvblNhbXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIodDAsIHNwYWNlMik7CisgICAgc2Ft
cGxlciByZWZsZWN0aW9uU2FtcGxlclNhbXBsZXIgOiByZWdpc3RlcihzMSwgc3BhY2UyKTsKKyAg
ICBUZXh0dXJlMkQ8ZmxvYXQ0PiBhbGJlZG9TYW1wbGVyVGV4dHVyZSA6IHJlZ2lzdGVyKHQyLCBz
cGFjZTIpOworICAgIHNhbXBsZXIgYWxiZWRvU2FtcGxlclNhbXBsZXIgOiByZWdpc3RlcihzMywg
c3BhY2UyKTsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiByZWZsZWN0aXZpdHlTYW1wbGVyVGV4dHVy
ZSA6IHJlZ2lzdGVyKHQ0LCBzcGFjZTIpOworICAgIHNhbXBsZXIgcmVmbGVjdGl2aXR5U2FtcGxl
clNhbXBsZXIgOiByZWdpc3RlcihzNSwgc3BhY2UyKTsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiBh
bWJpZW50U2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0Niwgc3BhY2UyKTsKKyAgICBzYW1wbGVy
IGFtYmllbnRTYW1wbGVyU2FtcGxlciA6IHJlZ2lzdGVyKHM3LCBzcGFjZTIpOworICAgIFRleHR1
cmUyRDxmbG9hdDQ+IGVtaXNzaXZlU2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0OCwgc3BhY2Uy
KTsKKyAgICBzYW1wbGVyIGVtaXNzaXZlU2FtcGxlclNhbXBsZXIgOiByZWdpc3RlcihzOSwgc3Bh
Y2UyKTsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0PiBidW1wU2FtcGxlclRleHR1cmUgOiByZWdpc3Rl
cih0MTAsIHNwYWNlMik7CisgICAgc2FtcGxlciBidW1wU2FtcGxlclNhbXBsZXIgOiByZWdpc3Rl
cihzMTEsIHNwYWNlMik7Cit9CisKK2Zsb2F0M3gzIHRyYW5zcG9zZU1hdDMoZmxvYXQzeDMgaW5N
YXRyaXgpIHsKKyAgICBmbG9hdDMgaTAgPSBpbk1hdHJpeFswXTsKKyAgICBmbG9hdDMgaTEgPSBp
bk1hdHJpeFsxXTsKKyAgICBmbG9hdDMgaTIgPSBpbk1hdHJpeFsyXTsKKyAgICBmbG9hdDN4MyBv
dXRNYXRyaXggPSBmbG9hdDN4MygKKyAgICAgICAgZmxvYXQzKGkwLngsIGkxLngsIGkyLngpLAor
ICAgICAgICBmbG9hdDMoaTAueSwgaTEueSwgaTIueSksCisgICAgICAgIGZsb2F0MyhpMC56LCBp
MS56LCBpMi56KQorICAgICk7CisgICAgcmV0dXJuIG91dE1hdHJpeDsKK30KKworZmxvYXQzeDMg
aW52ZXJzZU1hdDMoZmxvYXQzeDMgaW5NYXRyaXgpIHsKKyAgICBmbG9hdCBhMDAgPSBpbk1hdHJp
eFswXVswXSwgYTAxID0gaW5NYXRyaXhbMF1bMV0sIGEwMiA9IGluTWF0cml4WzBdWzJdOworICAg
IGZsb2F0IGExMCA9IGluTWF0cml4WzFdWzBdLCBhMTEgPSBpbk1hdHJpeFsxXVsxXSwgYTEyID0g
aW5NYXRyaXhbMV1bMl07CisgICAgZmxvYXQgYTIwID0gaW5NYXRyaXhbMl1bMF0sIGEyMSA9IGlu
TWF0cml4WzJdWzFdLCBhMjIgPSBpbk1hdHJpeFsyXVsyXTsKKyAgICBmbG9hdCBiMDEgPSBhMjIg
KiBhMTEgLSBhMTIgKiBhMjE7CisgICAgZmxvYXQgYjExID0gLWEyMiAqIGExMCArIGExMiAqIGEy
MDsKKyAgICBmbG9hdCBiMjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7CisgICAgZmxvYXQgZGV0
ID0gYTAwICogYjAxICsgYTAxICogYjExICsgYTAyICogYjIxOworICAgIHJldHVybiBmbG9hdDN4
MyhiMDEsIC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEsIGExMiAqIGEwMSAtIGEwMiAqIGExMSwKKyAg
ICAgICAgYjExLCBhMjIgKiBhMDAgLSBhMDIgKiBhMjAsIC1hMTIgKiBhMDAgKyBhMDIgKiBhMTAs
CisgICAgICAgIGIyMSwgLWEyMSAqIGEwMCArIGEwMSAqIGEyMCwgYTExICogYTAwIC0gYTAxICog
YTEwKSAvIGRldDsKK30KKworZmxvYXQzIHRvTGluZWFyU3BhY2UoZmxvYXQzIGNvbG9yKSB7Cisg
ICAgcmV0dXJuIHBvdyhjb2xvciwgZmxvYXQzKDIuMiwgMi4yLCAyLjIpKTsKK30KKworZmxvYXQz
IHRvR2FtbWFTcGFjZShmbG9hdDMgY29sb3IpIHsKKyAgICByZXR1cm4gcG93KGNvbG9yLCBmbG9h
dDMoMS4wIC8gMi4yLCAxLjAgLyAyLjIsIDEuMCAvIDIuMikpOworfQorCitmbG9hdCBzcXVhcmUo
ZmxvYXQgdmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUgKiB2YWx1ZTsKK30KKworZmxvYXQgcG93
NShmbG9hdCB2YWx1ZSkgeworICAgIGZsb2F0IHNxID0gdmFsdWUgKiB2YWx1ZTsKKyAgICByZXR1
cm4gc3EgKiBzcSAqIHZhbHVlOworfQorCitmbG9hdCBnZXRMdW1pbmFuY2UoZmxvYXQzIGNvbG9y
KSB7CisgICAgcmV0dXJuIGNsYW1wKGRvdChjb2xvciwgZmxvYXQzKDAuMjEyNiwgMC43MTUyLCAw
LjA3MjIpKSwgMC4sIDEuKTsKK30KKworZmxvYXQgZ2V0UmFuZChmbG9hdDIgc2VlZCkgeworICAg
IHJldHVybiBmcmFjKHNpbihkb3Qoc2VlZC54eSwgZmxvYXQyKDEyLjk4OTgsIDc4LjIzMykpKSAq
IDQzNzU4LjU0NTMpOworfQorCitmbG9hdCBkaXRoZXIoZmxvYXQyIHNlZWQsIGZsb2F0IHZhcmlh
bmNlQW1vdW50KSB7CisgICAgZmxvYXQgcmFuZCA9IGdldFJhbmQoc2VlZCk7CisgICAgZmxvYXQg
ZGl0aGVyID0gbGVycCgtdmFyaWFuY2VBbW91bnQgLyAyNTUuMCwgdmFyaWFuY2VBbW91bnQgLyAy
NTUuMCwgcmFuZCk7CisgICAgcmV0dXJuIGRpdGhlcjsKK30KKworZmxvYXQ0IHRvUkdCRChmbG9h
dDMgY29sb3IpIHsKKyAgICBmbG9hdCBtYXhSR0IgPSBtYXgobWF4KGNvbG9yLngsIG1heChjb2xv
ci55LCBjb2xvci56KSksIDAuMDAwMDAwMSk7CisgICAgZmxvYXQgRCA9IG1heCgyNTUuMCAvIG1h
eFJHQiwgMS4pOworICAgIEQgPSBjbGFtcChmbG9vcihEKSAvIDI1NS4wLCAwLiwgMS4pOworICAg
IGZsb2F0MyByZ2IgPSBjb2xvciAqIEQ7CisgICAgcmdiID0gdG9HYW1tYVNwYWNlKHJnYik7Cisg
ICAgcmV0dXJuIGZsb2F0NChyZ2IsIEQpOworfQorCitmbG9hdDMgZnJvbVJHQkQoZmxvYXQ0IHJn
YmQpIHsKKyAgICByZ2JkLnh5eiA9IHRvTGluZWFyU3BhY2UocmdiZC54eXopOworICAgIHJldHVy
biByZ2JkLnh5eiAvIHJnYmQudzsKK30KKworZmxvYXQgY29udmVydFJvdWdobmVzc1RvQXZlcmFn
ZVNsb3BlKGZsb2F0IHJvdWdobmVzcykgeworICAgIHJldHVybiBzcXVhcmUocm91Z2huZXNzKSAr
IDAuMDAwNTsKK30KKworZmxvYXQgZnJlc25lbEdyYXppbmdSZWZsZWN0YW5jZShmbG9hdCByZWZs
ZWN0YW5jZTApIHsKKyAgICBmbG9hdCByZWZsZWN0YW5jZTkwID0gY2xhbXAocmVmbGVjdGFuY2Uw
ICogMjUuMCwgMC4wLCAxLjApOworICAgIHJldHVybiByZWZsZWN0YW5jZTkwOworfQorCitmbG9h
dDIgZ2V0QUFSb3VnaG5lc3NGYWN0b3JzKGZsb2F0MyBub3JtYWxWZWN0b3IpIHsKKyAgICByZXR1
cm4gZmxvYXQyKDAuLCAwLik7Cit9CisKK2Zsb2F0NCBhcHBseUltYWdlUHJvY2Vzc2luZyhmbG9h
dDQgcmVzdWx0KSB7CisgICAgcmVzdWx0Lnh5eiA9IHRvR2FtbWFTcGFjZShyZXN1bHQueHl6KTsK
KyAgICByZXN1bHQueHl6ID0gY2xhbXAocmVzdWx0Lnh5eiwgZmxvYXQzKDAuMCwgMC4wLCAwLjAp
LCBmbG9hdDMoMS4wLCAxLjAsIDEuMCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Zsb2F0
MyBjb21wdXRlRW52aXJvbm1lbnRJcnJhZGlhbmNlKGZsb2F0MyBub3JtYWwsIGNvbnN0YW50IE1h
dGVyaWFsKiBtYXRlcmlhbCkgeworICAgIHJldHVybiBtYXRlcmlhbC0+dlNwaGVyaWNhbEwwMAor
ICAgICAgICArIG1hdGVyaWFsLT52U3BoZXJpY2FsTDFfMSAqIChub3JtYWwueSkKKyAgICAgICAg
KyBtYXRlcmlhbC0+dlNwaGVyaWNhbEwxMCAqIChub3JtYWwueikKKyAgICAgICAgKyBtYXRlcmlh
bC0+dlNwaGVyaWNhbEwxMSAqIChub3JtYWwueCkKKyAgICAgICAgKyBtYXRlcmlhbC0+dlNwaGVy
aWNhbEwyXzIgKiAobm9ybWFsLnkgKiBub3JtYWwueCkKKyAgICAgICAgKyBtYXRlcmlhbC0+dlNw
aGVyaWNhbEwyXzEgKiAobm9ybWFsLnkgKiBub3JtYWwueikKKyAgICAgICAgKyBtYXRlcmlhbC0+
dlNwaGVyaWNhbEwyMCAqICgoMy4wICogbm9ybWFsLnogKiBub3JtYWwueikgLSAxLjApCisgICAg
ICAgICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMjEgKiAobm9ybWFsLnogKiBub3JtYWwueCkKKyAg
ICAgICAgKyBtYXRlcmlhbC0+dlNwaGVyaWNhbEwyMiAqIChub3JtYWwueCAqIG5vcm1hbC54IC0g
KG5vcm1hbC55ICogbm9ybWFsLnkpKTsKK30KKworc3RydWN0IFByZUxpZ2h0aW5nSW5mbyB7Cisg
ICAgZmxvYXQzIGxpZ2h0T2Zmc2V0OworICAgIGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkOwor
ICAgIGZsb2F0IGxpZ2h0RGlzdGFuY2U7CisgICAgZmxvYXQgYXR0ZW51YXRpb247CisgICAgZmxv
YXQzIEw7CisgICAgZmxvYXQzIEg7CisgICAgZmxvYXQgTmRvdFY7CisgICAgZmxvYXQgTmRvdExV
bmNsYW1wZWQ7CisgICAgZmxvYXQgTmRvdEw7CisgICAgZmxvYXQgVmRvdEg7CisgICAgZmxvYXQg
cm91Z2huZXNzOworfQorCitQcmVMaWdodGluZ0luZm8gY29tcHV0ZVBvaW50QW5kU3BvdFByZUxp
Z2h0aW5nSW5mbyhmbG9hdDQgbGlnaHREYXRhLCBmbG9hdDMgViwgZmxvYXQzIE4sIGZsb2F0MyB2
UG9zaXRpb25XKSB7CisgICAgUHJlTGlnaHRpbmdJbmZvIHJlc3VsdDsKKyAgICByZXN1bHQubGln
aHRPZmZzZXQgPSBsaWdodERhdGEueHl6IC0gdlBvc2l0aW9uVzsKKyAgICByZXN1bHQubGlnaHRE
aXN0YW5jZVNxdWFyZWQgPSBkb3QocmVzdWx0LmxpZ2h0T2Zmc2V0LCByZXN1bHQubGlnaHRPZmZz
ZXQpOworICAgIHJlc3VsdC5saWdodERpc3RhbmNlID0gc3FydChyZXN1bHQubGlnaHREaXN0YW5j
ZVNxdWFyZWQpOworICAgIHJlc3VsdC5MID0gbm9ybWFsaXplKHJlc3VsdC5saWdodE9mZnNldCk7
CisgICAgcmVzdWx0LkggPSBub3JtYWxpemUoViArIHJlc3VsdC5MKTsKKyAgICByZXN1bHQuVmRv
dEggPSBjbGFtcChkb3QoViwgcmVzdWx0LkgpLCAwLjAsIDEuMCk7CisgICAgcmVzdWx0Lk5kb3RM
VW5jbGFtcGVkID0gZG90KE4sIHJlc3VsdC5MKTsKKyAgICByZXN1bHQuTmRvdEwgPSBjbGFtcChy
ZXN1bHQuTmRvdExVbmNsYW1wZWQsIDAuMDAwMDAwMSwgMS4wKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitQcmVMaWdodGluZ0luZm8gY29tcHV0ZURpcmVjdGlvbmFsUHJlTGlnaHRpbmdJbmZv
KGZsb2F0NCBsaWdodERhdGEsIGZsb2F0MyBWLCBmbG9hdDMgTikgeworICAgIFByZUxpZ2h0aW5n
SW5mbyByZXN1bHQ7CisgICAgcmVzdWx0LmxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoLWxpZ2h0RGF0
YS54eXopOworICAgIHJlc3VsdC5MID0gbm9ybWFsaXplKC1saWdodERhdGEueHl6KTsKKyAgICBy
ZXN1bHQuSCA9IG5vcm1hbGl6ZShWICsgcmVzdWx0LkwpOworICAgIHJlc3VsdC5WZG90SCA9IGNs
YW1wKGRvdChWLCByZXN1bHQuSCksIDAuMCwgMS4wKTsKKyAgICByZXN1bHQuTmRvdExVbmNsYW1w
ZWQgPSBkb3QoTiwgcmVzdWx0LkwpOworICAgIHJlc3VsdC5OZG90TCA9IGNsYW1wKHJlc3VsdC5O
ZG90TFVuY2xhbXBlZCwgMC4wMDAwMDAxLCAxLjApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K1ByZUxpZ2h0aW5nSW5mbyBjb21wdXRlSGVtaXNwaGVyaWNQcmVMaWdodGluZ0luZm8oZmxvYXQ0
IGxpZ2h0RGF0YSwgZmxvYXQzIFYsIGZsb2F0MyBOKSB7CisgICAgUHJlTGlnaHRpbmdJbmZvIHJl
c3VsdDsKKyAgICByZXN1bHQuTmRvdEwgPSBkb3QoTiwgbGlnaHREYXRhLnh5eikgKiAwLjUgKyAw
LjU7CisgICAgcmVzdWx0Lk5kb3RMID0gY2xhbXAocmVzdWx0Lk5kb3RMLCAwLjAwMDAwMDEsIDEu
MCk7CisgICAgcmVzdWx0Lk5kb3RMVW5jbGFtcGVkID0gcmVzdWx0Lk5kb3RMOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9TdGFuZGFy
ZChmbG9hdDMgbGlnaHRPZmZzZXQsIGZsb2F0IHJhbmdlKSB7CisgICAgcmV0dXJuIG1heCgwLiwg
MS4wIC0gbGVuZ3RoKGxpZ2h0T2Zmc2V0KSAvIHJhbmdlKTsKK30KKworZmxvYXQgY29tcHV0ZURp
c3RhbmNlTGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkKSB7
CisgICAgcmV0dXJuIDEuMCAvIG1heChsaWdodERpc3RhbmNlU3F1YXJlZCwgMC4wMDAwMDAxKTsK
K30KKworZmxvYXQgY29tcHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX0dMVEYoZmxvYXQgbGlnaHRE
aXN0YW5jZVNxdWFyZWQsIGZsb2F0IGludmVyc2VTcXVhcmVkUmFuZ2UpIHsKKyAgICBmbG9hdCBs
aWdodERpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heChsaWdodERpc3RhbmNlU3F1YXJlZCwgMC4w
MDAwMDAxKTsKKyAgICBmbG9hdCBmYWN0b3IgPSBsaWdodERpc3RhbmNlU3F1YXJlZCAqIGludmVy
c2VTcXVhcmVkUmFuZ2U7CisgICAgZmxvYXQgYXR0ZW51YXRpb24gPSBjbGFtcCgxLjAgLSBmYWN0
b3IgKiBmYWN0b3IsIDAuMCwgMS4wKTsKKyAgICBhdHRlbnVhdGlvbiAqPSBhdHRlbnVhdGlvbjsK
KyAgICBsaWdodERpc3RhbmNlRmFsbG9mZiAqPSBhdHRlbnVhdGlvbjsKKyAgICByZXR1cm4gbGln
aHREaXN0YW5jZUZhbGxvZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9m
ZihmbG9hdDMgbGlnaHRPZmZzZXQsIGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkLCBmbG9hdCBy
YW5nZSwgZmxvYXQgaW52ZXJzZVNxdWFyZWRSYW5nZSkgeworICAgIHJldHVybiBjb21wdXRlRGlz
dGFuY2VMaWdodEZhbGxvZmZfUGh5c2ljYWwobGlnaHREaXN0YW5jZVNxdWFyZWQpOworfQorCitm
bG9hdCBjb21wdXRlRGlyZWN0aW9uYWxMaWdodEZhbGxvZmZfU3RhbmRhcmQoZmxvYXQzIGxpZ2h0
RGlyZWN0aW9uLCBmbG9hdDMgZGlyZWN0aW9uVG9MaWdodENlbnRlclcsIGZsb2F0IGNvc0hhbGZB
bmdsZSwgZmxvYXQgZXhwb25lbnQpIHsKKyAgICBmbG9hdCBmYWxsb2ZmID0gMC4wOworICAgIGZs
b2F0IGNvc0FuZ2xlID0gbWF4KGRvdCgtbGlnaHREaXJlY3Rpb24sIGRpcmVjdGlvblRvTGlnaHRD
ZW50ZXJXKSwgMC4wMDAwMDAxKTsKKyAgICBpZiAoY29zQW5nbGUgPj0gY29zSGFsZkFuZ2xlKSB7
CisgICAgICAgIGZhbGxvZmYgPSBtYXgoMC4sIHBvdyhjb3NBbmdsZSwgZXhwb25lbnQpKTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbGxvZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXJlY3Rpb25hbExp
Z2h0RmFsbG9mZl9QaHlzaWNhbChmbG9hdDMgbGlnaHREaXJlY3Rpb24sIGZsb2F0MyBkaXJlY3Rp
b25Ub0xpZ2h0Q2VudGVyVywgZmxvYXQgY29zSGFsZkFuZ2xlKSB7CisgICAgZmxvYXQga01pbnVz
TG9nMkNvbmVBbmdsZUludGVuc2l0eVJhdGlvID0gNi42NDM4NTYxODk3NzsKKyAgICBmbG9hdCBj
b25jZW50cmF0aW9uS2FwcGEgPSBrTWludXNMb2cyQ29uZUFuZ2xlSW50ZW5zaXR5UmF0aW8gLyAo
MS4wIC0gY29zSGFsZkFuZ2xlKTsKKyAgICBmbG9hdDQgbGlnaHREaXJlY3Rpb25TcHJlYWRTRyA9
IGZsb2F0NCgtbGlnaHREaXJlY3Rpb24gKiBjb25jZW50cmF0aW9uS2FwcGEsIC1jb25jZW50cmF0
aW9uS2FwcGEpOworICAgIGZsb2F0IGZhbGxvZmYgPSBleHAyKGRvdChmbG9hdDQoZGlyZWN0aW9u
VG9MaWdodENlbnRlclcsIDEuMCksIGxpZ2h0RGlyZWN0aW9uU3ByZWFkU0cpKTsKKyAgICByZXR1
cm4gZmFsbG9mZjsKK30KKworZmxvYXQgY29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmX0dM
VEYoZmxvYXQzIGxpZ2h0RGlyZWN0aW9uLCBmbG9hdDMgZGlyZWN0aW9uVG9MaWdodENlbnRlclcs
IGZsb2F0IGxpZ2h0QW5nbGVTY2FsZSwgZmxvYXQgbGlnaHRBbmdsZU9mZnNldCkgeworICAgIGZs
b2F0IGNkID0gZG90KC1saWdodERpcmVjdGlvbiwgZGlyZWN0aW9uVG9MaWdodENlbnRlclcpOwor
ICAgIGZsb2F0IGZhbGxvZmYgPSBjbGFtcChjZCAqIGxpZ2h0QW5nbGVTY2FsZSArIGxpZ2h0QW5n
bGVPZmZzZXQsIDAuMCwgMS4wKTsKKyAgICBmYWxsb2ZmICo9IGZhbGxvZmY7CisgICAgcmV0dXJu
IGZhbGxvZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXJlY3Rpb25hbExpZ2h0RmFsbG9mZihmbG9h
dDMgbGlnaHREaXJlY3Rpb24sIGZsb2F0MyBkaXJlY3Rpb25Ub0xpZ2h0Q2VudGVyVywgZmxvYXQg
Y29zSGFsZkFuZ2xlLCBmbG9hdCBleHBvbmVudCwgZmxvYXQgbGlnaHRBbmdsZVNjYWxlLCBmbG9h
dCBsaWdodEFuZ2xlT2Zmc2V0KSB7CisgICAgcmV0dXJuIGNvbXB1dGVEaXJlY3Rpb25hbExpZ2h0
RmFsbG9mZl9QaHlzaWNhbChsaWdodERpcmVjdGlvbiwgZGlyZWN0aW9uVG9MaWdodENlbnRlclcs
IGNvc0hhbGZBbmdsZSk7Cit9CisKK2Zsb2F0MyBnZXRFbmVyZ3lDb25zZXJ2YXRpb25GYWN0b3Io
ZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSMCwgZmxvYXQzIGVudmlyb25tZW50QnJkZikgewor
ICAgIHJldHVybiBmbG9hdDMoMS4wLCAxLjAsIDEuMCkgKyBzcGVjdWxhckVudmlyb25tZW50UjAg
KiAoMS4wIC8gZW52aXJvbm1lbnRCcmRmLnkgLSAxLjApOworfQorCitmbG9hdDMgZ2V0QlJERkxv
b2t1cChmbG9hdCBOZG90ViwgZmxvYXQgcGVyY2VwdHVhbFJvdWdobmVzcywgVGV4dHVyZTJEPGZs
b2F0ND4gZW52aXJvbm1lbnRCcmRmU2FtcGxlclRleHR1cmUsIHNhbXBsZXIgZW52aXJvbm1lbnRC
cmRmU2FtcGxlclNhbXBsZXIpIHsKKyAgICBmbG9hdDIgVVYgPSBmbG9hdDIoTmRvdFYsIHBlcmNl
cHR1YWxSb3VnaG5lc3MpOworICAgIGZsb2F0NCBicmRmTG9va3VwID0gU2FtcGxlKGVudmlyb25t
ZW50QnJkZlNhbXBsZXJUZXh0dXJlLCBlbnZpcm9ubWVudEJyZGZTYW1wbGVyU2FtcGxlciwgVVYp
OworICAgIHJldHVybiBicmRmTG9va3VwLnh5ejsKK30KKworZmxvYXQzIGdldFJlZmxlY3RhbmNl
RnJvbUJSREZMb29rdXAoZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSMCwgZmxvYXQzIGVudmly
b25tZW50QnJkZikgeworICAgIGZsb2F0MyByZWZsZWN0YW5jZSA9IGxlcnAoZW52aXJvbm1lbnRC
cmRmLnh4eCwgZW52aXJvbm1lbnRCcmRmLnl5eSwgc3BlY3VsYXJFbnZpcm9ubWVudFIwKTsKKyAg
ICByZXR1cm4gcmVmbGVjdGFuY2U7Cit9CisKK2Zsb2F0MyBmcmVzbmVsU2NobGlja0dHWChmbG9h
dCBWZG90SCwgZmxvYXQzIHJlZmxlY3RhbmNlMCwgZmxvYXQzIHJlZmxlY3RhbmNlOTApIHsKKyAg
ICByZXR1cm4gcmVmbGVjdGFuY2UwICsgKHJlZmxlY3RhbmNlOTAgLSByZWZsZWN0YW5jZTApICog
cG93NSgxLjAgLSBWZG90SCk7Cit9CisKK2Zsb2F0IGZyZXNuZWxTY2hsaWNrR0dYKGZsb2F0IFZk
b3RILCBmbG9hdCByZWZsZWN0YW5jZTAsIGZsb2F0IHJlZmxlY3RhbmNlOTApIHsKKyAgICByZXR1
cm4gcmVmbGVjdGFuY2UwICsgKHJlZmxlY3RhbmNlOTAgLSByZWZsZWN0YW5jZTApICogcG93NSgx
LjAgLSBWZG90SCk7Cit9CisKK2Zsb2F0IG5vcm1hbERpc3RyaWJ1dGlvbkZ1bmN0aW9uX1Ryb3di
cmlkZ2VSZWl0ekdHWChmbG9hdCBOZG90SCwgZmxvYXQgYWxwaGFHKSB7CisgICAgZmxvYXQgYTIg
PSBzcXVhcmUoYWxwaGFHKTsKKyAgICBmbG9hdCBkID0gTmRvdEggKiBOZG90SCAqIChhMiAtIDEu
MCkgKyAxLjA7CisgICAgcmV0dXJuIGEyIC8gKDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgz
Mjc5NSAqIGQgKiBkKTsKK30KKworZmxvYXQgc21pdGhWaXNpYmlsaXR5X0dHWENvcnJlbGF0ZWQo
ZmxvYXQgTmRvdEwsIGZsb2F0IE5kb3RWLCBmbG9hdCBhbHBoYUcpIHsKKyAgICBmbG9hdCBhMiA9
IGFscGhhRyAqIGFscGhhRzsKKyAgICBmbG9hdCBHR1hWID0gTmRvdEwgKiBzcXJ0KE5kb3RWICog
KE5kb3RWIC0gYTIgKiBOZG90VikgKyBhMik7CisgICAgZmxvYXQgR0dYTCA9IE5kb3RWICogc3Fy
dChOZG90TCAqIChOZG90TCAtIGEyICogTmRvdEwpICsgYTIpOworICAgIHJldHVybiAwLjUgLyAo
R0dYViArIEdHWEwpOworfQorCitmbG9hdCBkaWZmdXNlQlJERl9CdXJsZXkoZmxvYXQgTmRvdEws
IGZsb2F0IE5kb3RWLCBmbG9hdCBWZG90SCwgZmxvYXQgcm91Z2huZXNzKSB7CisgICAgZmxvYXQg
ZGlmZnVzZUZyZXNuZWxOViA9IHBvdzUoY2xhbXAoMS4wIC0gTmRvdEwsIDAuMDAwMDAwMSwgMS4w
KSk7CisgICAgZmxvYXQgZGlmZnVzZUZyZXNuZWxOTCA9IHBvdzUoY2xhbXAoMS4wIC0gTmRvdFYs
IDAuMDAwMDAwMSwgMS4wKSk7CisgICAgZmxvYXQgZGlmZnVzZUZyZXNuZWw5MCA9IDAuNSArIDIu
MCAqIFZkb3RIICogVmRvdEggKiByb3VnaG5lc3M7CisgICAgZmxvYXQgZnJlc25lbCA9ICgxLjAg
KyAoZGlmZnVzZUZyZXNuZWw5MCAtIDEuMCkgKiBkaWZmdXNlRnJlc25lbE5MKSAqCisgICAgICAg
ICgxLjAgKyAoZGlmZnVzZUZyZXNuZWw5MCAtIDEuMCkgKiBkaWZmdXNlRnJlc25lbE5WKTsKKyAg
ICByZXR1cm4gZnJlc25lbCAvIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTsKK30K
Kworc3RydWN0IExpZ2h0aW5nSW5mbyB7CisgICAgZmxvYXQzIGRpZmZ1c2U7Cit9CisKK2Zsb2F0
IGFkanVzdFJvdWdobmVzc0Zyb21MaWdodFByb3BlcnRpZXMoZmxvYXQgcm91Z2huZXNzLCBmbG9h
dCBsaWdodFJhZGl1cywgZmxvYXQgbGlnaHREaXN0YW5jZSkgeworICAgIGZsb2F0IGxpZ2h0Um91
Z2huZXNzID0gbGlnaHRSYWRpdXMgLyBsaWdodERpc3RhbmNlOworICAgIGZsb2F0IHRvdGFsUm91
Z2huZXNzID0gY2xhbXAobGlnaHRSb3VnaG5lc3MgKyByb3VnaG5lc3MsIDAuMCwgMS4wKTsKKyAg
ICByZXR1cm4gdG90YWxSb3VnaG5lc3M7Cit9CisKK2Zsb2F0MyBjb21wdXRlSGVtaXNwaGVyaWNE
aWZmdXNlTGlnaHRpbmcoUHJlTGlnaHRpbmdJbmZvIGluZm8sIGZsb2F0MyBsaWdodENvbG9yLCBm
bG9hdDMgZ3JvdW5kQ29sb3IpIHsKKyAgICByZXR1cm4gbGVycChncm91bmRDb2xvciwgbGlnaHRD
b2xvciwgZmxvYXQzKGluZm8uTmRvdEwsIGluZm8uTmRvdEwsIGluZm8uTmRvdEwpKTsKK30KKwor
ZmxvYXQzIGNvbXB1dGVEaWZmdXNlTGlnaHRpbmcoUHJlTGlnaHRpbmdJbmZvIGluZm8sIGZsb2F0
MyBsaWdodENvbG9yKSB7CisgICAgZmxvYXQgZGlmZnVzZVRlcm0gPSBkaWZmdXNlQlJERl9CdXJs
ZXkoaW5mby5OZG90TCwgaW5mby5OZG90ViwgaW5mby5WZG90SCwgaW5mby5yb3VnaG5lc3MpOwor
ICAgIHJldHVybiBkaWZmdXNlVGVybSAqIGluZm8uYXR0ZW51YXRpb24gKiBpbmZvLk5kb3RMICog
bGlnaHRDb2xvcjsKK30KKworZmxvYXQyIGNvbXB1dGVQcm9qZWN0aW9uVGV4dHVyZURpZmZ1c2VM
aWdodGluZ1VWKGZsb2F0NHg0IHRleHR1cmVQcm9qZWN0aW9uTWF0cml4LCBmbG9hdDMgdlBvc2l0
aW9uVykgeworICAgIGZsb2F0NCBzdHJxID0gbXVsKHRleHR1cmVQcm9qZWN0aW9uTWF0cml4LCBm
bG9hdDQodlBvc2l0aW9uVywgMS4wKSk7CisgICAgc3RycSAvPSBzdHJxLnc7CisgICAgcmV0dXJu
IHN0cnEueHk7Cit9CisKK2Zsb2F0IGdldExvZEZyb21BbHBoYUcoZmxvYXQgY3ViZU1hcERpbWVu
c2lvblBpeGVscywgZmxvYXQgbWljcm9zdXJmYWNlQXZlcmFnZVNsb3BlKSB7CisgICAgZmxvYXQg
bWljcm9zdXJmYWNlQXZlcmFnZVNsb3BlVGV4ZWxzID0gY3ViZU1hcERpbWVuc2lvblBpeGVscyAq
IG1pY3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZTsKKyAgICBmbG9hdCBsb2QgPSBsb2cyKG1pY3Jvc3Vy
ZmFjZUF2ZXJhZ2VTbG9wZVRleGVscyk7CisgICAgcmV0dXJuIGxvZDsKK30KKworZmxvYXQgZ2V0
TGluZWFyTG9kRnJvbVJvdWdobmVzcyhmbG9hdCBjdWJlTWFwRGltZW5zaW9uUGl4ZWxzLCBmbG9h
dCByb3VnaG5lc3MpIHsKKyAgICBmbG9hdCBsb2QgPSBsb2cyKGN1YmVNYXBEaW1lbnNpb25QaXhl
bHMpICogcm91Z2huZXNzOworICAgIHJldHVybiBsb2Q7Cit9CisKK2Zsb2F0IGVudmlyb25tZW50
UmFkaWFuY2VPY2NsdXNpb24oZmxvYXQgYW1iaWVudE9jY2x1c2lvbiwgZmxvYXQgTmRvdFZVbmNs
YW1wZWQpIHsKKyAgICBmbG9hdCB0ZW1wID0gTmRvdFZVbmNsYW1wZWQgKyBhbWJpZW50T2NjbHVz
aW9uOworICAgIHJldHVybiBjbGFtcChzcXVhcmUodGVtcCkgLSAxLjAgKyBhbWJpZW50T2NjbHVz
aW9uLCAwLjAsIDEuMCk7Cit9CisKK2Zsb2F0IGVudmlyb25tZW50SG9yaXpvbk9jY2x1c2lvbihm
bG9hdDMgdmlldywgZmxvYXQzIG5vcm1hbCkgeworICAgIGZsb2F0MyByZWZsZWN0aW9uID0gcmVm
bGVjdCh2aWV3LCBub3JtYWwpOworICAgIGZsb2F0IHRlbXAgPSBjbGFtcCgxLjAgKyAxLjEgKiBk
b3QocmVmbGVjdGlvbiwgbm9ybWFsKSwgMC4wLCAxLjApOworICAgIHJldHVybiBzcXVhcmUodGVt
cCk7Cit9CisKK2Zsb2F0MyBwZXJ0dXJiTm9ybWFsKGZsb2F0M3gzIGNvdGFuZ2VudEZyYW1lLCBm
bG9hdDMgdGV4dHVyZVNhbXBsZSwgZmxvYXQgc2NhbGUpIHsKKyAgICB0ZXh0dXJlU2FtcGxlID0g
dGV4dHVyZVNhbXBsZSAqIDIuMCAtIDEuMDsKKyAgICB0ZXh0dXJlU2FtcGxlID0gbm9ybWFsaXpl
KHRleHR1cmVTYW1wbGUgKiBmbG9hdDMoc2NhbGUsIHNjYWxlLCAxLjApKTsKKyAgICByZXR1cm4g
bm9ybWFsaXplKG11bChjb3RhbmdlbnRGcmFtZSwgdGV4dHVyZVNhbXBsZSkpOworfQorCitmbG9h
dDN4MyBjb3RhbmdlbnRfZnJhbWUoZmxvYXQzIG5vcm1hbCwgZmxvYXQzIHAsIGZsb2F0MiB1diwg
ZmxvYXQyIHRhbmdlbnRTcGFjZVBhcmFtcywgYm9vbCBmcm9udEZhY2UpIHsKKyAgICB1diA9IGZy
b250RmFjZSA/IHV2IDogLXV2OworICAgIGZsb2F0MyBkcDEgPSBkZHgocCk7CisgICAgZmxvYXQz
IGRwMiA9IGRkeShwKTsKKyAgICBmbG9hdDIgZHV2MSA9IGRkeCh1dik7CisgICAgZmxvYXQyIGR1
djIgPSBkZHkodXYpOworICAgIGZsb2F0MyBkcDJwZXJwID0gY3Jvc3MoZHAyLCBub3JtYWwpOwor
ICAgIGZsb2F0MyBkcDFwZXJwID0gY3Jvc3Mobm9ybWFsLCBkcDEpOworICAgIGZsb2F0MyB0YW5n
ZW50ID0gZHAycGVycCAqIGR1djEueCArIGRwMXBlcnAgKiBkdXYyLng7CisgICAgZmxvYXQzIGJp
dGFuZ2VudCA9IGRwMnBlcnAgKiBkdXYxLnkgKyBkcDFwZXJwICogZHV2Mi55OworICAgIHRhbmdl
bnQgKj0gdGFuZ2VudFNwYWNlUGFyYW1zLng7CisgICAgYml0YW5nZW50ICo9IHRhbmdlbnRTcGFj
ZVBhcmFtcy55OworICAgIGZsb2F0IGludm1heCA9IHJzcXJ0KG1heChkb3QodGFuZ2VudCwgdGFu
Z2VudCksIGRvdChiaXRhbmdlbnQsIGJpdGFuZ2VudCkpKTsKKyAgICByZXR1cm4gZmxvYXQzeDMo
dGFuZ2VudCAqIGludm1heCwgYml0YW5nZW50ICogaW52bWF4LCBub3JtYWwpOworfQorCitmbG9h
dDMgcGVydHVyYk5vcm1hbChmbG9hdDN4MyBjb3RhbmdlbnRGcmFtZSwgZmxvYXQyIHV2LCBUZXh0
dXJlMkQ8ZmxvYXQ0PiBidW1wU2FtcGxlclRleHR1cmUsIHNhbXBsZXIgYnVtcFNhbXBsZXJTYW1w
bGVyLCBmbG9hdDMgdkJ1bXBJbmZvcykgeworICAgIHJldHVybiBwZXJ0dXJiTm9ybWFsKGNvdGFu
Z2VudEZyYW1lLCBTYW1wbGUoYnVtcFNhbXBsZXJUZXh0dXJlLCBidW1wU2FtcGxlclNhbXBsZXIs
IHV2KS54eXosIHZCdW1wSW5mb3MueSk7Cit9CisKK2Zsb2F0MyBwZXJ0dXJiTm9ybWFsKGZsb2F0
M3gzIGNvdGFuZ2VudEZyYW1lLCBmbG9hdDMgY29sb3IsIGZsb2F0MyB2QnVtcEluZm9zKSB7Cisg
ICAgcmV0dXJuIHBlcnR1cmJOb3JtYWwoY290YW5nZW50RnJhbWUsIGNvbG9yLCB2QnVtcEluZm9z
LnkpOworfQorCitmbG9hdDMgcGFyYWxsYXhDb3JyZWN0Tm9ybWFsKGZsb2F0MyB2ZXJ0ZXhQb3Ms
IGZsb2F0MyBvcmlnVmVjLCBmbG9hdDMgY3ViZVNpemUsIGZsb2F0MyBjdWJlUG9zKSB7CisgICAg
ZmxvYXQzIGludk9yaWdWZWMgPSBmbG9hdDMoMS4wLCAxLjAsIDEuMCkgLyBvcmlnVmVjOworICAg
IGZsb2F0MyBoYWxmU2l6ZSA9IGN1YmVTaXplICogMC41OworICAgIGZsb2F0MyBpbnRlcnNlY0F0
TWF4UGxhbmUgPSAoY3ViZVBvcyArIGhhbGZTaXplIC0gdmVydGV4UG9zKSAqIGludk9yaWdWZWM7
CisgICAgZmxvYXQzIGludGVyc2VjQXRNaW5QbGFuZSA9IChjdWJlUG9zIC0gaGFsZlNpemUgLSB2
ZXJ0ZXhQb3MpICogaW52T3JpZ1ZlYzsKKyAgICBmbG9hdDMgbGFyZ2VzdEludGVyc2VjID0gbWF4
KGludGVyc2VjQXRNYXhQbGFuZSwgaW50ZXJzZWNBdE1pblBsYW5lKTsKKyAgICBmbG9hdCBkaXN0
YW5jZSA9IG1pbihtaW4obGFyZ2VzdEludGVyc2VjLngsIGxhcmdlc3RJbnRlcnNlYy55KSwgbGFy
Z2VzdEludGVyc2VjLnopOworICAgIGZsb2F0MyBpbnRlcnNlY3RQb3NpdGlvbldTID0gdmVydGV4
UG9zICsgb3JpZ1ZlYyAqIGRpc3RhbmNlOworICAgIHJldHVybiBpbnRlcnNlY3RQb3NpdGlvbldT
IC0gY3ViZVBvczsKK30KKworZmxvYXQzIGNvbXB1dGVGaXhlZEVxdWlyZWN0YW5ndWxhckNvb3Jk
cyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQzIGRpcmVjdGlvbikg
eworICAgIGZsb2F0IGxvbiA9IGF0YW4yKGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueCk7CisgICAg
ZmxvYXQgbGF0ID0gYWNvcyhkaXJlY3Rpb24ueSk7CisgICAgZmxvYXQyIHNwaGVyZUNvb3JkcyA9
IGZsb2F0Mihsb24sIGxhdCkgKiAwLjE1OTE1NDk0ICogMi4wOworICAgIGZsb2F0IHMgPSBzcGhl
cmVDb29yZHMueCAqIDAuNSArIDAuNTsKKyAgICBmbG9hdCB0ID0gc3BoZXJlQ29vcmRzLnk7Cisg
ICAgcmV0dXJuIGZsb2F0MyhzLCB0LCAwKTsKK30KKworZmxvYXQzIGNvbXB1dGVNaXJyb3JlZEZp
eGVkRXF1aXJlY3Rhbmd1bGFyQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9y
bWFsLCBmbG9hdDMgZGlyZWN0aW9uKSB7CisgICAgZmxvYXQgbG9uID0gYXRhbjIoZGlyZWN0aW9u
LnosIGRpcmVjdGlvbi54KTsKKyAgICBmbG9hdCBsYXQgPSBhY29zKGRpcmVjdGlvbi55KTsKKyAg
ICBmbG9hdDIgc3BoZXJlQ29vcmRzID0gZmxvYXQyKGxvbiwgbGF0KSAqIDAuMTU5MTU0OTQgKiAy
LjA7CisgICAgZmxvYXQgcyA9IHNwaGVyZUNvb3Jkcy54ICogMC41ICsgMC41OworICAgIGZsb2F0
IHQgPSBzcGhlcmVDb29yZHMueTsKKyAgICByZXR1cm4gZmxvYXQzKDEuMCAtIHMsIHQsIDApOwor
fQorCitmbG9hdDMgY29tcHV0ZUVxdWlyZWN0YW5ndWxhckNvb3JkcyhmbG9hdDQgd29ybGRQb3Ms
IGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQzIGV5ZVBvc2l0aW9uLCBmbG9hdDR4NCByZWZsZWN0
aW9uTWF0cml4KSB7CisgICAgZmxvYXQzIGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKHdvcmxk
UG9zLnh5eiAtIGV5ZVBvc2l0aW9uKTsKKyAgICBmbG9hdDMgciA9IG5vcm1hbGl6ZShyZWZsZWN0
KGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCkpOworICAgIHIgPSBtdWwocmVmbGVjdGlvbk1h
dHJpeCwgZmxvYXQ0KHIsIDApKS54eXo7CisgICAgZmxvYXQgbG9uID0gYXRhbjIoci56LCByLngp
OworICAgIGZsb2F0IGxhdCA9IGFjb3Moci55KTsKKyAgICBmbG9hdDIgc3BoZXJlQ29vcmRzID0g
ZmxvYXQyKGxvbiwgbGF0KSAqIDAuMTU5MTU0OTQgKiAyLjA7CisgICAgZmxvYXQgcyA9IHNwaGVy
ZUNvb3Jkcy54ICogMC41ICsgMC41OworICAgIGZsb2F0IHQgPSBzcGhlcmVDb29yZHMueTsKKyAg
ICByZXR1cm4gZmxvYXQzKHMsIHQsIDApOworfQorCitmbG9hdDMgY29tcHV0ZVNwaGVyaWNhbENv
b3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQ0eDQgdmlldywg
ZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAgIGZsb2F0MyB2aWV3RGlyID0gbm9ybWFs
aXplKG11bCh2aWV3LCB3b3JsZFBvcykueHl6KTsKKyAgICBmbG9hdDMgdmlld05vcm1hbCA9IG5v
cm1hbGl6ZShtdWwodmlldywgZmxvYXQ0KHdvcmxkTm9ybWFsLCAwLjApKS54eXopOworICAgIGZs
b2F0MyByID0gcmVmbGVjdCh2aWV3RGlyLCB2aWV3Tm9ybWFsKTsKKyAgICByID0gbXVsKHJlZmxl
Y3Rpb25NYXRyaXgsIGZsb2F0NChyLCAwKSkueHl6OworICAgIHIueiA9IHIueiAtIDEuMDsKKyAg
ICBmbG9hdCBtID0gMi4wICogbGVuZ3RoKHIpOworICAgIHJldHVybiBmbG9hdDMoci54IC8gbSAr
IDAuNSwgMS4wIC0gci55IC8gbSAtIDAuNSwgMCk7Cit9CisKK2Zsb2F0MyBjb21wdXRlUGxhbmFy
Q29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9hdDMgZXllUG9z
aXRpb24sIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgpIHsKKyAgICBmbG9hdDMgdmlld0RpciA9
IHdvcmxkUG9zLnh5eiAtIGV5ZVBvc2l0aW9uOworICAgIGZsb2F0MyBjb29yZHMgPSBub3JtYWxp
emUocmVmbGVjdCh2aWV3RGlyLCB3b3JsZE5vcm1hbCkpOworICAgIHJldHVybiBtdWwocmVmbGVj
dGlvbk1hdHJpeCwgZmxvYXQ0KGNvb3JkcywgMSkpLnh5ejsKK30KKworZmxvYXQzIGNvbXB1dGVD
dWJpY0Nvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQzIGV5
ZVBvc2l0aW9uLCBmbG9hdDR4NCByZWZsZWN0aW9uTWF0cml4KSB7CisgICAgZmxvYXQzIHZpZXdE
aXIgPSBub3JtYWxpemUod29ybGRQb3MueHl6IC0gZXllUG9zaXRpb24pOworICAgIGZsb2F0MyBj
b29yZHMgPSByZWZsZWN0KHZpZXdEaXIsIHdvcmxkTm9ybWFsKTsKKyAgICBjb29yZHMgPSBtdWwo
cmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KGNvb3JkcywgMCkpLnh5ejsKKyAgICByZXR1cm4gY29v
cmRzOworfQorCitmbG9hdDMgY29tcHV0ZUN1YmljTG9jYWxDb29yZHMoZmxvYXQ0IHdvcmxkUG9z
LCBmbG9hdDMgd29ybGROb3JtYWwsIGZsb2F0MyBleWVQb3NpdGlvbiwgZmxvYXQ0eDQgcmVmbGVj
dGlvbk1hdHJpeCwgZmxvYXQzIHJlZmxlY3Rpb25TaXplLCBmbG9hdDMgcmVmbGVjdGlvblBvc2l0
aW9uKSB7CisgICAgZmxvYXQzIHZpZXdEaXIgPSBub3JtYWxpemUod29ybGRQb3MueHl6IC0gZXll
UG9zaXRpb24pOworICAgIGZsb2F0MyBjb29yZHMgPSByZWZsZWN0KHZpZXdEaXIsIHdvcmxkTm9y
bWFsKTsKKyAgICBjb29yZHMgPSBwYXJhbGxheENvcnJlY3ROb3JtYWwod29ybGRQb3MueHl6LCBj
b29yZHMsIHJlZmxlY3Rpb25TaXplLCByZWZsZWN0aW9uUG9zaXRpb24pOworICAgIGNvb3JkcyA9
IG11bChyZWZsZWN0aW9uTWF0cml4LCBmbG9hdDQoY29vcmRzLCAwKSkueHl6OworICAgIHJldHVy
biBjb29yZHM7Cit9CisKK2Zsb2F0MyBjb21wdXRlUHJvamVjdGlvbkNvb3JkcyhmbG9hdDQgd29y
bGRQb3MsIGZsb2F0NHg0IHZpZXcsIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgpIHsKKyAgICBy
ZXR1cm4gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIG11bCh2aWV3LCB3b3JsZFBvcykpLnh5ejsKK30K
KworZmxvYXQzIGNvbXB1dGVTa3lCb3hDb29yZHMoZmxvYXQzIHBvc2l0aW9uVywgZmxvYXQ0eDQg
cmVmbGVjdGlvbk1hdHJpeCkgeworICAgIHJldHVybiBtdWwocmVmbGVjdGlvbk1hdHJpeCwgZmxv
YXQ0KHBvc2l0aW9uVywgMCkpLnh5ejsKK30KKworZmxvYXQzIGNvbXB1dGVSZWZsZWN0aW9uQ29v
cmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9hdDQgdkV5ZVBvc2l0
aW9uLCBmbG9hdDR4NCByZWZsZWN0aW9uTWF0cml4KSB7CisgICAgcmV0dXJuIGNvbXB1dGVDdWJp
Y0Nvb3Jkcyh3b3JsZFBvcywgd29ybGROb3JtYWwsIHZFeWVQb3NpdGlvbi54eXosIHJlZmxlY3Rp
b25NYXRyaXgpOworfQorCitmcmFnbWVudCBmbG9hdDQgbWFpbihmbG9hdDMgdlBvc2l0aW9uVyA6
IGF0dHJpYnV0ZSgwKSwgZmxvYXQzIHZOb3JtYWxXIDogYXR0cmlidXRlKDEpLCBmbG9hdDIgdk1h
aW5VVjEgOiBhdHRyaWJ1dGUoMiksIEJpbmRHcm91cEEgYmluZEdyb3VwQSwgQmluZEdyb3VwQiBi
aW5kR3JvdXBCLCBCaW5kR3JvdXBDIGJpbmRHcm91cEMsIGJvb2wgZnJvbnRGYWNlIDogU1ZfSXNG
cm9udEZhY2UpIDogU1ZfVGFyZ2V0IDAgeworICAgIGZsb2F0MyB2aWV3RGlyZWN0aW9uVyA9IG5v
cm1hbGl6ZShiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZFeWVQb3NpdGlvbi54eXogLSB2UG9zaXRp
b25XKTsKKyAgICBmbG9hdDMgbm9ybWFsVyA9IG5vcm1hbGl6ZSh2Tm9ybWFsVyk7CisgICAgZmxv
YXQyIHV2T2Zmc2V0ID0gZmxvYXQyKDAuMCwgMC4wKTsKKyAgICBmbG9hdCBub3JtYWxTY2FsZSA9
IDEuMDsKKyAgICBmbG9hdDN4MyBUQk4gPSBjb3RhbmdlbnRfZnJhbWUobm9ybWFsVyAqIG5vcm1h
bFNjYWxlLCB2UG9zaXRpb25XLCB2TWFpblVWMSwgYmluZEdyb3VwQi5tYXRlcmlhbFswXS52VGFu
Z2VudFNwYWNlUGFyYW1zLCBmcm9udEZhY2UpOworICAgIG5vcm1hbFcgPSBwZXJ0dXJiTm9ybWFs
KFRCTiwgdk1haW5VVjEgKyB1dk9mZnNldCwgYmluZEdyb3VwQy5idW1wU2FtcGxlclRleHR1cmUs
IGJpbmRHcm91cEMuYnVtcFNhbXBsZXJTYW1wbGVyLCBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZC
dW1wSW5mb3MpOworICAgIGZsb2F0MyBzdXJmYWNlQWxiZWRvID0gYmluZEdyb3VwQi5tYXRlcmlh
bFswXS52QWxiZWRvQ29sb3IueHl6OworICAgIGZsb2F0IGFscGhhID0gYmluZEdyb3VwQi5tYXRl
cmlhbFswXS52QWxiZWRvQ29sb3IudzsKKyAgICBmbG9hdDQgYWxiZWRvVGV4dHVyZSA9IFNhbXBs
ZShiaW5kR3JvdXBDLmFsYmVkb1NhbXBsZXJUZXh0dXJlLCBiaW5kR3JvdXBDLmFsYmVkb1NhbXBs
ZXJTYW1wbGVyLCB2TWFpblVWMSArIHV2T2Zmc2V0KTsKKyAgICBzdXJmYWNlQWxiZWRvICo9IHRv
TGluZWFyU3BhY2UoYWxiZWRvVGV4dHVyZS54eXopOworICAgIHN1cmZhY2VBbGJlZG8gKj0gYmlu
ZEdyb3VwQi5tYXRlcmlhbFswXS52QWxiZWRvSW5mb3MueTsKKyAgICBmbG9hdDMgYW1iaWVudE9j
Y2x1c2lvbkNvbG9yID0gZmxvYXQzKDEuLCAxLiwgMS4pOworICAgIGZsb2F0MyBhbWJpZW50T2Nj
bHVzaW9uQ29sb3JNYXAgPSBTYW1wbGUoYmluZEdyb3VwQy5hbWJpZW50U2FtcGxlclRleHR1cmUs
IGJpbmRHcm91cEMuYW1iaWVudFNhbXBsZXJTYW1wbGVyLCB2TWFpblVWMSArIHV2T2Zmc2V0KS54
eXogKiBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZBbWJpZW50SW5mb3MueTsKKyAgICBhbWJpZW50
T2NjbHVzaW9uQ29sb3JNYXAgPSBmbG9hdDMoYW1iaWVudE9jY2x1c2lvbkNvbG9yTWFwLngsIGFt
YmllbnRPY2NsdXNpb25Db2xvck1hcC54LCBhbWJpZW50T2NjbHVzaW9uQ29sb3JNYXAueCk7Cisg
ICAgYW1iaWVudE9jY2x1c2lvbkNvbG9yID0gbGVycChhbWJpZW50T2NjbHVzaW9uQ29sb3IsIGFt
YmllbnRPY2NsdXNpb25Db2xvck1hcCwgZmxvYXQzKGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkFt
YmllbnRJbmZvcy56LCBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZBbWJpZW50SW5mb3MueiwgYmlu
ZEdyb3VwQi5tYXRlcmlhbFswXS52QW1iaWVudEluZm9zLnopKTsKKyAgICBmbG9hdCBtaWNyb1N1
cmZhY2UgPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0aXZpdHlDb2xvci53OworICAg
IGZsb2F0MyBzdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3IgPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBd
LnZSZWZsZWN0aXZpdHlDb2xvci54eXo7CisgICAgZmxvYXQyIG1ldGFsbGljUm91Z2huZXNzID0g
c3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yLnh5OworICAgIGZsb2F0NCBzdXJmYWNlTWV0YWxsaWND
b2xvck1hcCA9IFNhbXBsZShiaW5kR3JvdXBDLnJlZmxlY3Rpdml0eVNhbXBsZXJUZXh0dXJlLCBi
aW5kR3JvdXBDLnJlZmxlY3Rpdml0eVNhbXBsZXJTYW1wbGVyLCB2TWFpblVWMSArIHV2T2Zmc2V0
KTsKKyAgICBtZXRhbGxpY1JvdWdobmVzcy54ICo9IHN1cmZhY2VNZXRhbGxpY0NvbG9yTWFwLno7
CisgICAgbWV0YWxsaWNSb3VnaG5lc3MueSAqPSBzdXJmYWNlTWV0YWxsaWNDb2xvck1hcC55Owor
ICAgIG1pY3JvU3VyZmFjZSA9IDEuMCAtIG1ldGFsbGljUm91Z2huZXNzLnk7CisgICAgZmxvYXQz
IGJhc2VDb2xvciA9IHN1cmZhY2VBbGJlZG87CisgICAgZmxvYXQzIERlZmF1bHRTcGVjdWxhclJl
ZmxlY3RhbmNlRGllbGVjdHJpYyA9IGZsb2F0MygwLjA0LCAwLjA0LCAwLjA0KTsKKyAgICBzdXJm
YWNlQWxiZWRvID0gbGVycChiYXNlQ29sb3IgKiAoMS4wIC0gRGVmYXVsdFNwZWN1bGFyUmVmbGVj
dGFuY2VEaWVsZWN0cmljLngpLCBmbG9hdDMoMC4sIDAuLCAwLiksIGZsb2F0MyhtZXRhbGxpY1Jv
dWdobmVzcy54LCBtZXRhbGxpY1JvdWdobmVzcy54LCBtZXRhbGxpY1JvdWdobmVzcy54KSk7Cisg
ICAgc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yID0gbGVycChEZWZhdWx0U3BlY3VsYXJSZWZsZWN0
YW5jZURpZWxlY3RyaWMsIGJhc2VDb2xvciwgZmxvYXQzKG1ldGFsbGljUm91Z2huZXNzLngsIG1l
dGFsbGljUm91Z2huZXNzLngsIG1ldGFsbGljUm91Z2huZXNzLngpKTsKKyAgICBtaWNyb1N1cmZh
Y2UgPSBjbGFtcChtaWNyb1N1cmZhY2UsIDAuMCwgMS4wKTsKKyAgICBmbG9hdCByb3VnaG5lc3Mg
PSAxLiAtIG1pY3JvU3VyZmFjZTsKKyAgICBmbG9hdCBOZG90VlVuY2xhbXBlZCA9IGRvdChub3Jt
YWxXLCB2aWV3RGlyZWN0aW9uVyk7CisgICAgZmxvYXQgTmRvdFYgPSBhYnMoTmRvdFZVbmNsYW1w
ZWQpICsgMC4wMDAwMDAxOworICAgIGZsb2F0IGFscGhhRyA9IGNvbnZlcnRSb3VnaG5lc3NUb0F2
ZXJhZ2VTbG9wZShyb3VnaG5lc3MpOworICAgIGZsb2F0MiBBQVJvdWdobmVzc0ZhY3RvcnMgPSBn
ZXRBQVJvdWdobmVzc0ZhY3RvcnMobm9ybWFsVy54eXopOworICAgIGFscGhhRyArPSBBQVJvdWdo
bmVzc0ZhY3RvcnMueTsKKyAgICBmbG9hdDQgZW52aXJvbm1lbnRSYWRpYW5jZSA9IGZsb2F0NCgw
LiwwLiwgMC4sIDAuKTsKKyAgICBmbG9hdDMgZW52aXJvbm1lbnRJcnJhZGlhbmNlID0gZmxvYXQz
KDAuLCAwLiwgMC4pOworICAgIGZsb2F0MyByZWZsZWN0aW9uVmVjdG9yID0gY29tcHV0ZVJlZmxl
Y3Rpb25Db29yZHMoZmxvYXQ0KHZQb3NpdGlvblcsIDEuMCksIG5vcm1hbFcsIGJpbmRHcm91cEIu
bWF0ZXJpYWxbMF0udkV5ZVBvc2l0aW9uLCBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnJlZmxlY3Rp
b25NYXRyaXgpOworICAgIGZsb2F0MyByZWZsZWN0aW9uQ29vcmRzID0gcmVmbGVjdGlvblZlY3Rv
cjsKKyAgICBmbG9hdCByZWZsZWN0aW9uTE9EID0gZ2V0TG9kRnJvbUFscGhhRyhiaW5kR3JvdXBC
Lm1hdGVyaWFsWzBdLnZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueCwgYWxwaGFHKTsKKyAg
ICByZWZsZWN0aW9uTE9EID0gcmVmbGVjdGlvbkxPRCAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0u
dlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy55ICsgYmluZEdyb3VwQi5tYXRlcmlhbFswXS52
UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLno7CisgICAgZmxvYXQgcmVxdWVzdGVkUmVmbGVj
dGlvbkxPRCA9IHJlZmxlY3Rpb25MT0Q7CisgICAgZW52aXJvbm1lbnRSYWRpYW5jZSA9IFNhbXBs
ZShiaW5kR3JvdXBDLnJlZmxlY3Rpb25TYW1wbGVyVGV4dHVyZSwgYmluZEdyb3VwQy5yZWZsZWN0
aW9uU2FtcGxlclNhbXBsZXIsIHJlZmxlY3Rpb25Db29yZHMueHkpOyAvL1NhbXBsZUxldmVsKGJp
bmRHcm91cEMucmVmbGVjdGlvblNhbXBsZXJUZXh0dXJlLCBiaW5kR3JvdXBDLnJlZmxlY3Rpb25T
YW1wbGVyU2FtcGxlciwgcmVmbGVjdGlvbkNvb3JkcywgcmVxdWVzdGVkUmVmbGVjdGlvbkxPRCk7
CisgICAgZW52aXJvbm1lbnRSYWRpYW5jZS54eXogPSBmcm9tUkdCRChlbnZpcm9ubWVudFJhZGlh
bmNlKTsKKyAgICBmbG9hdDMgaXJyYWRpYW5jZVZlY3RvciA9IG11bChiaW5kR3JvdXBCLm1hdGVy
aWFsWzBdLnJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChub3JtYWxXLCAwKSkueHl6OworICAgIGVu
dmlyb25tZW50SXJyYWRpYW5jZSA9IGNvbXB1dGVFbnZpcm9ubWVudElycmFkaWFuY2UoaXJyYWRp
YW5jZVZlY3RvciwgJmJpbmRHcm91cEIubWF0ZXJpYWxbMF0pOworICAgIGVudmlyb25tZW50UmFk
aWFuY2UueHl6ICo9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25JbmZvcy54Owor
ICAgIGVudmlyb25tZW50UmFkaWFuY2UueHl6ICo9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJl
ZmxlY3Rpb25Db2xvci54eXo7CisgICAgZW52aXJvbm1lbnRJcnJhZGlhbmNlICo9IGJpbmRHcm91
cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25Db2xvci54eXo7CisgICAgZmxvYXQgcmVmbGVjdGFu
Y2UgPSBtYXgobWF4KHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci54LCBzdXJmYWNlUmVmbGVjdGl2
aXR5Q29sb3IueSksIHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci56KTsKKyAgICBmbG9hdCByZWZs
ZWN0YW5jZTkwID0gZnJlc25lbEdyYXppbmdSZWZsZWN0YW5jZShyZWZsZWN0YW5jZSk7CisgICAg
ZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSMCA9IHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci54
eXo7CisgICAgZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSOTAgPSBmbG9hdDMoMS4wLCAxLjAs
IDEuMCkgKiByZWZsZWN0YW5jZTkwOworICAgIGZsb2F0MyBlbnZpcm9ubWVudEJyZGYgPSBnZXRC
UkRGTG9va3VwKE5kb3RWLCByb3VnaG5lc3MsIGJpbmRHcm91cEEuZW52aXJvbm1lbnRCcmRmU2Ft
cGxlclRleHR1cmUsIGJpbmRHcm91cEEuZW52aXJvbm1lbnRCcmRmU2FtcGxlclNhbXBsZXIpOwor
ICAgIGZsb2F0MyBlbmVyZ3lDb25zZXJ2YXRpb25GYWN0b3IgPSBnZXRFbmVyZ3lDb25zZXJ2YXRp
b25GYWN0b3Ioc3BlY3VsYXJFbnZpcm9ubWVudFIwLCBlbnZpcm9ubWVudEJyZGYpOworICAgIGZs
b2F0MyBkaWZmdXNlQmFzZSA9IGZsb2F0MygwLiwgMC4sIDAuKTsKKyAgICBQcmVMaWdodGluZ0lu
Zm8gcHJlSW5mbzsKKyAgICBMaWdodGluZ0luZm8gaW5mbzsKKyAgICBmbG9hdCBzaGFkb3cgPSAx
LjsKKyAgICBmbG9hdDMgc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3RhbmNlID0gZ2V0UmVmbGVj
dGFuY2VGcm9tQlJERkxvb2t1cChzcGVjdWxhckVudmlyb25tZW50UjAsIGVudmlyb25tZW50QnJk
Zik7CisgICAgZmxvYXQgYW1iaWVudE1vbm9jaHJvbWUgPSBhbWJpZW50T2NjbHVzaW9uQ29sb3Iu
eDsKKyAgICBmbG9hdCBzZW8gPSBlbnZpcm9ubWVudFJhZGlhbmNlT2NjbHVzaW9uKGFtYmllbnRN
b25vY2hyb21lLCBOZG90VlVuY2xhbXBlZCk7CisgICAgc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxl
Y3RhbmNlICo9IHNlbzsKKyAgICBmbG9hdCBlaG8gPSBlbnZpcm9ubWVudEhvcml6b25PY2NsdXNp
b24oLXZpZXdEaXJlY3Rpb25XLCBub3JtYWxXKTsKKyAgICBzcGVjdWxhckVudmlyb25tZW50UmVm
bGVjdGFuY2UgKj0gZWhvOworICAgIGZsb2F0MyBmaW5hbElycmFkaWFuY2UgPSBlbnZpcm9ubWVu
dElycmFkaWFuY2U7CisgICAgZmluYWxJcnJhZGlhbmNlICo9IHN1cmZhY2VBbGJlZG8ueHl6Owor
ICAgIGZsb2F0MyBmaW5hbFJhZGlhbmNlID0gZW52aXJvbm1lbnRSYWRpYW5jZS54eXo7CisgICAg
ZmluYWxSYWRpYW5jZSAqPSBzcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2U7CisgICAgZmxv
YXQzIGZpbmFsUmFkaWFuY2VTY2FsZWQgPSBmaW5hbFJhZGlhbmNlICogYmluZEdyb3VwQi5tYXRl
cmlhbFswXS52TGlnaHRpbmdJbnRlbnNpdHkuejsKKyAgICBmaW5hbFJhZGlhbmNlU2NhbGVkICo9
IGVuZXJneUNvbnNlcnZhdGlvbkZhY3RvcjsKKyAgICBmbG9hdDMgZmluYWxEaWZmdXNlID0gZGlm
ZnVzZUJhc2U7CisgICAgZmluYWxEaWZmdXNlICo9IHN1cmZhY2VBbGJlZG8ueHl6OworICAgIGZp
bmFsRGlmZnVzZSA9IG1heChmaW5hbERpZmZ1c2UsIGZsb2F0MygwLjAsIDAuMCwgMC4wKSk7Cisg
ICAgZmxvYXQzIGZpbmFsQW1iaWVudCA9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkFtYmllbnRD
b2xvcjsKKyAgICBmaW5hbEFtYmllbnQgKj0gc3VyZmFjZUFsYmVkby54eXo7CisgICAgZmxvYXQz
IGZpbmFsRW1pc3NpdmUgPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZFbWlzc2l2ZUNvbG9yOwor
ICAgIGZsb2F0MyBlbWlzc2l2ZUNvbG9yVGV4ID0gU2FtcGxlKGJpbmRHcm91cEMuZW1pc3NpdmVT
YW1wbGVyVGV4dHVyZSwgYmluZEdyb3VwQy5lbWlzc2l2ZVNhbXBsZXJTYW1wbGVyLCB2TWFpblVW
MSArIHV2T2Zmc2V0KS54eXo7CisgICAgZmluYWxFbWlzc2l2ZSAqPSB0b0xpbmVhclNwYWNlKGVt
aXNzaXZlQ29sb3JUZXgpOworICAgIGZpbmFsRW1pc3NpdmUgKj0gYmluZEdyb3VwQi5tYXRlcmlh
bFswXS52RW1pc3NpdmVJbmZvcy55OworICAgIGZsb2F0MyBhbWJpZW50T2NjbHVzaW9uRm9yRGly
ZWN0RGlmZnVzZSA9IGxlcnAoZmxvYXQzKDEuLCAxLiwgMS4pLCBhbWJpZW50T2NjbHVzaW9uQ29s
b3IsIGZsb2F0MyhiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZBbWJpZW50SW5mb3MudywgYmluZEdy
b3VwQi5tYXRlcmlhbFswXS52QW1iaWVudEluZm9zLncsIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0u
dkFtYmllbnRJbmZvcy53KSk7CisgICAgZmxvYXQ0IGZpbmFsQ29sb3IgPSBmbG9hdDQoCisgICAg
ICAgIGZpbmFsQW1iaWVudCAqIGFtYmllbnRPY2NsdXNpb25Db2xvciArCisgICAgICAgIGZpbmFs
RGlmZnVzZSAqIGFtYmllbnRPY2NsdXNpb25Gb3JEaXJlY3REaWZmdXNlICogYmluZEdyb3VwQi5t
YXRlcmlhbFswXS52TGlnaHRpbmdJbnRlbnNpdHkueCArCisgICAgICAgIGZpbmFsSXJyYWRpYW5j
ZSAqIGFtYmllbnRPY2NsdXNpb25Db2xvciAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkxpZ2h0
aW5nSW50ZW5zaXR5LnogKworICAgICAgICBmaW5hbFJhZGlhbmNlU2NhbGVkICsKKyAgICAgICAg
ZmluYWxFbWlzc2l2ZSAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkxpZ2h0aW5nSW50ZW5zaXR5
LnksCisgICAgICAgIGFscGhhKTsKKyAgICBmaW5hbENvbG9yID0gbWF4KGZpbmFsQ29sb3IsIGZs
b2F0NCgwLjAsIDAuMCwgMC4wLCAwLjApKTsKKyAgICBmaW5hbENvbG9yID0gYXBwbHlJbWFnZVBy
b2Nlc3NpbmcoZmluYWxDb2xvcik7CisgICAgZmluYWxDb2xvci53ICo9IGJpbmRHcm91cEIubWVz
aFswXS52aXNpYmlsaXR5OworICAgIHJldHVybiBmaW5hbENvbG9yOworfQorYDsKKworY29uc3Qg
dmVydGV4U2hhZGVyV1NMMiA9IGAKK3N0cnVjdCBPdXRwdXQgeworICAgIGZsb2F0MyB2UG9zaXRp
b25XIDogYXR0cmlidXRlKDApOworICAgIGZsb2F0MyB2Tm9ybWFsVyA6IGF0dHJpYnV0ZSgxKTsK
KyAgICBmbG9hdDMgdlBvc2l0aW9uVVZXIDogYXR0cmlidXRlKDIpOworICAgIGZsb2F0NCBwb3Np
dGlvbiA6IFNWX1Bvc2l0aW9uOworfQorCitzdHJ1Y3QgU2NlbmUgeworICAgIGZsb2F0NHg0IHZp
ZXdQcm9qZWN0aW9uOworICAgIGZsb2F0NHg0IHZpZXc7Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBB
IHsKKyAgICBjb25zdGFudCBTY2VuZVtdIHNjZW5lIDogcmVnaXN0ZXIoYjAsIHNwYWNlMCk7Cisg
ICAgVGV4dHVyZTJEPGZsb2F0ND4gZW52aXJvbm1lbnRCcmRmU2FtcGxlclRleHR1cmUgOiByZWdp
c3Rlcih0MSwgc3BhY2UwKTsKKyAgICBzYW1wbGVyIGVudmlyb25tZW50QnJkZlNhbXBsZXJTYW1w
bGVyIDogcmVnaXN0ZXIoczIsIHNwYWNlMCk7Cit9CisKK3N0cnVjdCBNYXRlcmlhbCB7CisgICAg
ZmxvYXQyIHZBbGJlZG9JbmZvczsKKyAgICBmbG9hdDQgdkFtYmllbnRJbmZvczsKKyAgICBmbG9h
dDIgdk9wYWNpdHlJbmZvczsKKyAgICBmbG9hdDIgdkVtaXNzaXZlSW5mb3M7CisgICAgZmxvYXQy
IHZMaWdodG1hcEluZm9zOworICAgIGZsb2F0MyB2UmVmbGVjdGl2aXR5SW5mb3M7CisgICAgZmxv
YXQyIHZNaWNyb1N1cmZhY2VTYW1wbGVySW5mb3M7CisgICAgZmxvYXQyIHZSZWZsZWN0aW9uSW5m
b3M7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uUG9zaXRpb247CisgICAgZmxvYXQzIHZSZWZsZWN0
aW9uU2l6ZTsKKyAgICBmbG9hdDMgdkJ1bXBJbmZvczsKKyAgICBmbG9hdDR4NCBhbGJlZG9NYXRy
aXg7CisgICAgZmxvYXQ0eDQgYW1iaWVudE1hdHJpeDsKKyAgICBmbG9hdDR4NCBvcGFjaXR5TWF0
cml4OworICAgIGZsb2F0NHg0IGVtaXNzaXZlTWF0cml4OworICAgIGZsb2F0NHg0IGxpZ2h0bWFw
TWF0cml4OworICAgIGZsb2F0NHg0IHJlZmxlY3Rpdml0eU1hdHJpeDsKKyAgICBmbG9hdDR4NCBt
aWNyb1N1cmZhY2VTYW1wbGVyTWF0cml4OworICAgIGZsb2F0NHg0IGJ1bXBNYXRyaXg7CisgICAg
ZmxvYXQyIHZUYW5nZW50U3BhY2VQYXJhbXM7CisgICAgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJp
eDsKKyAgICBmbG9hdDMgdlJlZmxlY3Rpb25Db2xvcjsKKyAgICBmbG9hdDQgdkFsYmVkb0NvbG9y
OworICAgIGZsb2F0NCB2TGlnaHRpbmdJbnRlbnNpdHk7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9u
TWljcm9zdXJmYWNlSW5mb3M7CisgICAgZmxvYXQgcG9pbnRTaXplOworICAgIGZsb2F0NCB2UmVm
bGVjdGl2aXR5Q29sb3I7CisgICAgZmxvYXQzIHZFbWlzc2l2ZUNvbG9yOworICAgIGZsb2F0NCB2
RXllUG9zaXRpb247CisgICAgZmxvYXQzIHZBbWJpZW50Q29sb3I7CisgICAgZmxvYXQyIHZEZWJ1
Z01vZGU7CisgICAgZmxvYXQyIHZDbGVhckNvYXRQYXJhbXM7CisgICAgZmxvYXQ0IHZDbGVhckNv
YXRSZWZyYWN0aW9uUGFyYW1zOworICAgIGZsb2F0MiB2Q2xlYXJDb2F0SW5mb3M7CisgICAgZmxv
YXQ0eDQgY2xlYXJDb2F0TWF0cml4OworICAgIGZsb2F0MiB2Q2xlYXJDb2F0QnVtcEluZm9zOwor
ICAgIGZsb2F0MiB2Q2xlYXJDb2F0VGFuZ2VudFNwYWNlUGFyYW1zOworICAgIGZsb2F0NHg0IGNs
ZWFyQ29hdEJ1bXBNYXRyaXg7CisgICAgZmxvYXQ0IHZDbGVhckNvYXRUaW50UGFyYW1zOworICAg
IGZsb2F0IGNsZWFyQ29hdENvbG9yQXREaXN0YW5jZTsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdFRp
bnRJbmZvczsKKyAgICBmbG9hdDR4NCBjbGVhckNvYXRUaW50TWF0cml4OworICAgIGZsb2F0MyB2
QW5pc290cm9weTsKKyAgICBmbG9hdDIgdkFuaXNvdHJvcHlJbmZvczsKKyAgICBmbG9hdDR4NCBh
bmlzb3Ryb3B5TWF0cml4OworICAgIGZsb2F0NCB2U2hlZW5Db2xvcjsKKyAgICBmbG9hdDIgdlNo
ZWVuSW5mb3M7CisgICAgZmxvYXQ0eDQgc2hlZW5NYXRyaXg7CisgICAgZmxvYXQzIHZSZWZyYWN0
aW9uTWljcm9zdXJmYWNlSW5mb3M7CisgICAgZmxvYXQ0IHZSZWZyYWN0aW9uSW5mb3M7CisgICAg
ZmxvYXQ0eDQgcmVmcmFjdGlvbk1hdHJpeDsKKyAgICBmbG9hdDIgdlRoaWNrbmVzc0luZm9zOwor
ICAgIGZsb2F0NHg0IHRoaWNrbmVzc01hdHJpeDsKKyAgICBmbG9hdDIgdlRoaWNrbmVzc1BhcmFt
OworICAgIGZsb2F0MyB2RGlmZnVzaW9uRGlzdGFuY2U7CisgICAgZmxvYXQ0IHZUaW50Q29sb3I7
CisgICAgZmxvYXQzIHZTdWJTdXJmYWNlSW50ZW5zaXR5OworICAgIGZsb2F0MyB2U3BoZXJpY2Fs
TDAwOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDFfMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwx
MDsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyXzI7
CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMl8xOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIwOwor
ICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIxOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIyOworICAg
IGZsb2F0MyB2U3BoZXJpY2FsWDsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFk7CisgICAgZmxvYXQz
IHZTcGhlcmljYWxaOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWFhfWlo7CisgICAgZmxvYXQzIHZT
cGhlcmljYWxZWV9aWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFpaOworICAgIGZsb2F0MyB2U3Bo
ZXJpY2FsWFk7CisgICAgZmxvYXQzIHZTcGhlcmljYWxZWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNh
bFpYOworfQorCitzdHJ1Y3QgTWVzaCB7CisgICAgZmxvYXQ0eDQgd29ybGQ7CisgICAgZmxvYXQg
dmlzaWJpbGl0eTsKK30KKworc3RydWN0IEJpbmRHcm91cEIgeworICAgIGNvbnN0YW50IE1hdGVy
aWFsW10gbWF0ZXJpYWwgOiByZWdpc3RlcihiMCwgc3BhY2UxKTsKKyAgICBjb25zdGFudCBNZXNo
W10gbWVzaCA6IHJlZ2lzdGVyKGIxLCBzcGFjZTEpOworfQorCitzdHJ1Y3QgQmluZEdyb3VwQyB7
CisgICAgVGV4dHVyZTJEPGZsb2F0ND4gcmVmbGVjdGlvblNhbXBsZXJUZXh0dXJlIDogcmVnaXN0
ZXIodDAsIHNwYWNlMik7CisgICAgc2FtcGxlciByZWZsZWN0aW9uU2FtcGxlclNhbXBsZXIgOiBy
ZWdpc3RlcihzMSwgc3BhY2UyKTsKK30KKworZmxvYXQzeDMgdHJhbnNwb3NlTWF0MyhmbG9hdDN4
MyBpbk1hdHJpeCkgeworICAgIGZsb2F0MyBpMCA9IGluTWF0cml4WzBdOworICAgIGZsb2F0MyBp
MSA9IGluTWF0cml4WzFdOworICAgIGZsb2F0MyBpMiA9IGluTWF0cml4WzJdOworICAgIGZsb2F0
M3gzIG91dE1hdHJpeCA9IGZsb2F0M3gzKAorICAgICAgICBmbG9hdDMoaTAueCwgaTEueCwgaTIu
eCksCisgICAgICAgIGZsb2F0MyhpMC55LCBpMS55LCBpMi55KSwKKyAgICAgICAgZmxvYXQzKGkw
LnosIGkxLnosIGkyLnopCisgICAgKTsKKyAgICByZXR1cm4gb3V0TWF0cml4OworfQorCitmbG9h
dDN4MyBpbnZlcnNlTWF0MyhmbG9hdDN4MyBpbk1hdHJpeCkgeworICAgIGZsb2F0IGEwMCA9IGlu
TWF0cml4WzBdWzBdLCBhMDEgPSBpbk1hdHJpeFswXVsxXSwgYTAyID0gaW5NYXRyaXhbMF1bMl07
CisgICAgZmxvYXQgYTEwID0gaW5NYXRyaXhbMV1bMF0sIGExMSA9IGluTWF0cml4WzFdWzFdLCBh
MTIgPSBpbk1hdHJpeFsxXVsyXTsKKyAgICBmbG9hdCBhMjAgPSBpbk1hdHJpeFsyXVswXSwgYTIx
ID0gaW5NYXRyaXhbMl1bMV0sIGEyMiA9IGluTWF0cml4WzJdWzJdOworICAgIGZsb2F0IGIwMSA9
IGEyMiAqIGExMSAtIGExMiAqIGEyMTsKKyAgICBmbG9hdCBiMTEgPSAtYTIyICogYTEwICsgYTEy
ICogYTIwOworICAgIGZsb2F0IGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDsKKyAgICBmbG9h
dCBkZXQgPSBhMDAgKiBiMDEgKyBhMDEgKiBiMTEgKyBhMDIgKiBiMjE7CisgICAgcmV0dXJuIGZs
b2F0M3gzKGIwMSwgLWEyMiAqIGEwMSArIGEwMiAqIGEyMSwgYTEyICogYTAxIC0gYTAyICogYTEx
LAorICAgICAgICBiMTEsIGEyMiAqIGEwMCAtIGEwMiAqIGEyMCwgLWExMiAqIGEwMCArIGEwMiAq
IGExMCwKKyAgICAgICAgYjIxLCAtYTIxICogYTAwICsgYTAxICogYTIwLCBhMTEgKiBhMDAgLSBh
MDEgKiBhMTApIC8gZGV0OworfQorCitmbG9hdDMgdG9MaW5lYXJTcGFjZShmbG9hdDMgY29sb3Ip
IHsKKyAgICByZXR1cm4gcG93KGNvbG9yLCBmbG9hdDMoMi4yLCAyLjIsIDIuMikpOworfQorCitm
bG9hdDMgdG9HYW1tYVNwYWNlKGZsb2F0MyBjb2xvcikgeworICAgIHJldHVybiBwb3coY29sb3Is
IGZsb2F0MygxLjAgLyAyLjIsIDEuMCAvIDIuMiwgMS4wIC8gMi4yKSk7Cit9CisKK2Zsb2F0IHNx
dWFyZShmbG9hdCB2YWx1ZSkgeworICAgIHJldHVybiB2YWx1ZSAqIHZhbHVlOworfQorCitmbG9h
dCBwb3c1KGZsb2F0IHZhbHVlKSB7CisgICAgZmxvYXQgc3EgPSB2YWx1ZSAqIHZhbHVlOworICAg
IHJldHVybiBzcSAqIHNxICogdmFsdWU7Cit9CisKK2Zsb2F0IGdldEx1bWluYW5jZShmbG9hdDMg
Y29sb3IpIHsKKyAgICByZXR1cm4gY2xhbXAoZG90KGNvbG9yLCBmbG9hdDMoMC4yMTI2LCAwLjcx
NTIsIDAuMDcyMikpLCAwLiwgMS4pOworfQorCitmbG9hdCBnZXRSYW5kKGZsb2F0MiBzZWVkKSB7
CisgICAgcmV0dXJuIGZyYWMoc2luKGRvdChzZWVkLnh5LCBmbG9hdDIoMTIuOTg5OCwgNzguMjMz
KSkpICogNDM3NTguNTQ1Myk7Cit9CisKK2Zsb2F0IGRpdGhlcihmbG9hdDIgc2VlZCwgZmxvYXQg
dmFyaWFuY2VBbW91bnQpIHsKKyAgICBmbG9hdCByYW5kID0gZ2V0UmFuZChzZWVkKTsKKyAgICBm
bG9hdCBkaXRoZXIgPSBsZXJwKC12YXJpYW5jZUFtb3VudCAvIDI1NS4wLCB2YXJpYW5jZUFtb3Vu
dCAvIDI1NS4wLCByYW5kKTsKKyAgICByZXR1cm4gZGl0aGVyOworfQorCitmbG9hdDQgdG9SR0JE
KGZsb2F0MyBjb2xvcikgeworICAgIGZsb2F0IG1heFJHQiA9IG1heChtYXgoY29sb3IueCwgbWF4
KGNvbG9yLnksIGNvbG9yLnopKSwgMC4wMDAwMDAxKTsKKyAgICBmbG9hdCBEID0gbWF4KDI1NS4w
IC8gbWF4UkdCLCAxLik7CisgICAgRCA9IGNsYW1wKGZsb29yKEQpIC8gMjU1LjAsIDAuLCAxLik7
CisgICAgZmxvYXQzIHJnYiA9IGNvbG9yICogRDsKKyAgICByZ2IgPSB0b0dhbW1hU3BhY2Uocmdi
KTsKKyAgICByZXR1cm4gZmxvYXQ0KHJnYiwgRCk7Cit9CisKK2Zsb2F0MyBmcm9tUkdCRChmbG9h
dDQgcmdiZCkgeworICAgIHJnYmQueHl6ID0gdG9MaW5lYXJTcGFjZShyZ2JkLnh5eik7CisgICAg
cmV0dXJuIHJnYmQueHl6IC8gcmdiZC53OworfQorCit2ZXJ0ZXggT3V0cHV0IG1haW4oZmxvYXQz
IHBvc2l0aW9uIDogYXR0cmlidXRlKDApLCBmbG9hdDMgbm9ybWFsIDogYXR0cmlidXRlKDEpLCBC
aW5kR3JvdXBBIGJpbmRHcm91cEEsIEJpbmRHcm91cEIgYmluZEdyb3VwQiwgQmluZEdyb3VwQyBi
aW5kR3JvdXBDKSB7CisgICAgT3V0cHV0IG91dHB1dDsKKyAgICBmbG9hdDMgcG9zaXRpb25VcGRh
dGVkID0gcG9zaXRpb247CisgICAgZmxvYXQzIG5vcm1hbFVwZGF0ZWQgPSBub3JtYWw7CisgICAg
b3V0cHV0LnZQb3NpdGlvblVWVyA9IHBvc2l0aW9uVXBkYXRlZDsKKyAgICBmbG9hdDR4NCBmaW5h
bFdvcmxkID0gYmluZEdyb3VwQi5tZXNoWzBdLndvcmxkOworICAgIG91dHB1dC5wb3NpdGlvbiA9
IG11bChtdWwoYmluZEdyb3VwQS5zY2VuZVswXS52aWV3UHJvamVjdGlvbiwgZmluYWxXb3JsZCks
IGZsb2F0NChwb3NpdGlvblVwZGF0ZWQsIDEuMCkpOworICAgIGZsb2F0NCB3b3JsZFBvcyA9IG11
bChmaW5hbFdvcmxkLCBmbG9hdDQocG9zaXRpb25VcGRhdGVkLCAxLjApKTsKKyAgICBvdXRwdXQu
dlBvc2l0aW9uVyA9IHdvcmxkUG9zLnh5ejsKKyAgICBmbG9hdDN4MyBub3JtYWxXb3JsZDsKKyAg
ICBub3JtYWxXb3JsZFswXSA9IGZpbmFsV29ybGRbMF0ueHl6OworICAgIG5vcm1hbFdvcmxkWzFd
ID0gZmluYWxXb3JsZFsxXS54eXo7CisgICAgbm9ybWFsV29ybGRbMl0gPSBmaW5hbFdvcmxkWzJd
Lnh5ejsKKyAgICBvdXRwdXQudk5vcm1hbFcgPSBub3JtYWxpemUobXVsKG5vcm1hbFdvcmxkLCBu
b3JtYWxVcGRhdGVkKSk7CisgICAgZmxvYXQyIHV2VXBkYXRlZDsKKyAgICBmbG9hdDIgdXYyOwor
ICAgIHJldHVybiBvdXRwdXQ7Cit9CitgOworCitjb25zdCBmcmFnbWVudFNoYWRlcldTTDIgPSBg
CitzdHJ1Y3QgU2NlbmUgeworICAgIGZsb2F0NHg0IHZpZXdQcm9qZWN0aW9uOworICAgIGZsb2F0
NHg0IHZpZXc7Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBBIHsKKyAgICBjb25zdGFudCBTY2VuZVtd
IHNjZW5lIDogcmVnaXN0ZXIoYjAsIHNwYWNlMCk7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4gZW52
aXJvbm1lbnRCcmRmU2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0MSwgc3BhY2UwKTsKKyAgICBz
YW1wbGVyIGVudmlyb25tZW50QnJkZlNhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczIsIHNwYWNl
MCk7Cit9CisKK3N0cnVjdCBNYXRlcmlhbCB7CisgICAgZmxvYXQyIHZBbGJlZG9JbmZvczsKKyAg
ICBmbG9hdDQgdkFtYmllbnRJbmZvczsKKyAgICBmbG9hdDIgdk9wYWNpdHlJbmZvczsKKyAgICBm
bG9hdDIgdkVtaXNzaXZlSW5mb3M7CisgICAgZmxvYXQyIHZMaWdodG1hcEluZm9zOworICAgIGZs
b2F0MyB2UmVmbGVjdGl2aXR5SW5mb3M7CisgICAgZmxvYXQyIHZNaWNyb1N1cmZhY2VTYW1wbGVy
SW5mb3M7CisgICAgZmxvYXQyIHZSZWZsZWN0aW9uSW5mb3M7CisgICAgZmxvYXQzIHZSZWZsZWN0
aW9uUG9zaXRpb247CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uU2l6ZTsKKyAgICBmbG9hdDMgdkJ1
bXBJbmZvczsKKyAgICBmbG9hdDR4NCBhbGJlZG9NYXRyaXg7CisgICAgZmxvYXQ0eDQgYW1iaWVu
dE1hdHJpeDsKKyAgICBmbG9hdDR4NCBvcGFjaXR5TWF0cml4OworICAgIGZsb2F0NHg0IGVtaXNz
aXZlTWF0cml4OworICAgIGZsb2F0NHg0IGxpZ2h0bWFwTWF0cml4OworICAgIGZsb2F0NHg0IHJl
ZmxlY3Rpdml0eU1hdHJpeDsKKyAgICBmbG9hdDR4NCBtaWNyb1N1cmZhY2VTYW1wbGVyTWF0cml4
OworICAgIGZsb2F0NHg0IGJ1bXBNYXRyaXg7CisgICAgZmxvYXQyIHZUYW5nZW50U3BhY2VQYXJh
bXM7CisgICAgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeDsKKyAgICBmbG9hdDMgdlJlZmxlY3Rp
b25Db2xvcjsKKyAgICBmbG9hdDQgdkFsYmVkb0NvbG9yOworICAgIGZsb2F0NCB2TGlnaHRpbmdJ
bnRlbnNpdHk7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7CisgICAg
ZmxvYXQgcG9pbnRTaXplOworICAgIGZsb2F0NCB2UmVmbGVjdGl2aXR5Q29sb3I7CisgICAgZmxv
YXQzIHZFbWlzc2l2ZUNvbG9yOworICAgIGZsb2F0NCB2RXllUG9zaXRpb247CisgICAgZmxvYXQz
IHZBbWJpZW50Q29sb3I7CisgICAgZmxvYXQyIHZEZWJ1Z01vZGU7CisgICAgZmxvYXQyIHZDbGVh
ckNvYXRQYXJhbXM7CisgICAgZmxvYXQ0IHZDbGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zOworICAg
IGZsb2F0MiB2Q2xlYXJDb2F0SW5mb3M7CisgICAgZmxvYXQ0eDQgY2xlYXJDb2F0TWF0cml4Owor
ICAgIGZsb2F0MiB2Q2xlYXJDb2F0QnVtcEluZm9zOworICAgIGZsb2F0MiB2Q2xlYXJDb2F0VGFu
Z2VudFNwYWNlUGFyYW1zOworICAgIGZsb2F0NHg0IGNsZWFyQ29hdEJ1bXBNYXRyaXg7CisgICAg
ZmxvYXQ0IHZDbGVhckNvYXRUaW50UGFyYW1zOworICAgIGZsb2F0IGNsZWFyQ29hdENvbG9yQXRE
aXN0YW5jZTsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdFRpbnRJbmZvczsKKyAgICBmbG9hdDR4NCBj
bGVhckNvYXRUaW50TWF0cml4OworICAgIGZsb2F0MyB2QW5pc290cm9weTsKKyAgICBmbG9hdDIg
dkFuaXNvdHJvcHlJbmZvczsKKyAgICBmbG9hdDR4NCBhbmlzb3Ryb3B5TWF0cml4OworICAgIGZs
b2F0NCB2U2hlZW5Db2xvcjsKKyAgICBmbG9hdDIgdlNoZWVuSW5mb3M7CisgICAgZmxvYXQ0eDQg
c2hlZW5NYXRyaXg7CisgICAgZmxvYXQzIHZSZWZyYWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7Cisg
ICAgZmxvYXQ0IHZSZWZyYWN0aW9uSW5mb3M7CisgICAgZmxvYXQ0eDQgcmVmcmFjdGlvbk1hdHJp
eDsKKyAgICBmbG9hdDIgdlRoaWNrbmVzc0luZm9zOworICAgIGZsb2F0NHg0IHRoaWNrbmVzc01h
dHJpeDsKKyAgICBmbG9hdDIgdlRoaWNrbmVzc1BhcmFtOworICAgIGZsb2F0MyB2RGlmZnVzaW9u
RGlzdGFuY2U7CisgICAgZmxvYXQ0IHZUaW50Q29sb3I7CisgICAgZmxvYXQzIHZTdWJTdXJmYWNl
SW50ZW5zaXR5OworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDAwOworICAgIGZsb2F0MyB2U3BoZXJp
Y2FsTDFfMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxMDsKKyAgICBmbG9hdDMgdlNwaGVyaWNh
bEwxMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyXzI7CisgICAgZmxvYXQzIHZTcGhlcmljYWxM
Ml8xOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIwOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIx
OworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIyOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWDsKKyAg
ICBmbG9hdDMgdlNwaGVyaWNhbFk7CisgICAgZmxvYXQzIHZTcGhlcmljYWxaOworICAgIGZsb2F0
MyB2U3BoZXJpY2FsWFhfWlo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxZWV9aWjsKKyAgICBmbG9h
dDMgdlNwaGVyaWNhbFpaOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWFk7CisgICAgZmxvYXQzIHZT
cGhlcmljYWxZWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFpYOworfQorCitzdHJ1Y3QgTWVzaCB7
CisgICAgZmxvYXQ0eDQgd29ybGQ7CisgICAgZmxvYXQgdmlzaWJpbGl0eTsKK30KKworc3RydWN0
IEJpbmRHcm91cEIgeworICAgIGNvbnN0YW50IE1hdGVyaWFsW10gbWF0ZXJpYWwgOiByZWdpc3Rl
cihiMCwgc3BhY2UxKTsKKyAgICBjb25zdGFudCBNZXNoW10gbWVzaCA6IHJlZ2lzdGVyKGIxLCBz
cGFjZTEpOworfQorCitzdHJ1Y3QgQmluZEdyb3VwQyB7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4g
cmVmbGVjdGlvblNhbXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIodDAsIHNwYWNlMik7CisgICAgc2Ft
cGxlciByZWZsZWN0aW9uU2FtcGxlclNhbXBsZXIgOiByZWdpc3RlcihzMSwgc3BhY2UyKTsKK30K
KworZmxvYXQzeDMgdHJhbnNwb3NlTWF0MyhmbG9hdDN4MyBpbk1hdHJpeCkgeworICAgIGZsb2F0
MyBpMCA9IGluTWF0cml4WzBdOworICAgIGZsb2F0MyBpMSA9IGluTWF0cml4WzFdOworICAgIGZs
b2F0MyBpMiA9IGluTWF0cml4WzJdOworICAgIGZsb2F0M3gzIG91dE1hdHJpeCA9IGZsb2F0M3gz
KAorICAgICAgICBmbG9hdDMoaTAueCwgaTEueCwgaTIueCksCisgICAgICAgIGZsb2F0MyhpMC55
LCBpMS55LCBpMi55KSwKKyAgICAgICAgZmxvYXQzKGkwLnosIGkxLnosIGkyLnopCisgICAgKTsK
KyAgICByZXR1cm4gb3V0TWF0cml4OworfQorCitmbG9hdDN4MyBpbnZlcnNlTWF0MyhmbG9hdDN4
MyBpbk1hdHJpeCkgeworICAgIGZsb2F0IGEwMCA9IGluTWF0cml4WzBdWzBdLCBhMDEgPSBpbk1h
dHJpeFswXVsxXSwgYTAyID0gaW5NYXRyaXhbMF1bMl07CisgICAgZmxvYXQgYTEwID0gaW5NYXRy
aXhbMV1bMF0sIGExMSA9IGluTWF0cml4WzFdWzFdLCBhMTIgPSBpbk1hdHJpeFsxXVsyXTsKKyAg
ICBmbG9hdCBhMjAgPSBpbk1hdHJpeFsyXVswXSwgYTIxID0gaW5NYXRyaXhbMl1bMV0sIGEyMiA9
IGluTWF0cml4WzJdWzJdOworICAgIGZsb2F0IGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMTsK
KyAgICBmbG9hdCBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwOworICAgIGZsb2F0IGIyMSA9
IGEyMSAqIGExMCAtIGExMSAqIGEyMDsKKyAgICBmbG9hdCBkZXQgPSBhMDAgKiBiMDEgKyBhMDEg
KiBiMTEgKyBhMDIgKiBiMjE7CisgICAgcmV0dXJuIGZsb2F0M3gzKGIwMSwgLWEyMiAqIGEwMSAr
IGEwMiAqIGEyMSwgYTEyICogYTAxIC0gYTAyICogYTExLAorICAgICAgICBiMTEsIGEyMiAqIGEw
MCAtIGEwMiAqIGEyMCwgLWExMiAqIGEwMCArIGEwMiAqIGExMCwKKyAgICAgICAgYjIxLCAtYTIx
ICogYTAwICsgYTAxICogYTIwLCBhMTEgKiBhMDAgLSBhMDEgKiBhMTApIC8gZGV0OworfQorCitm
bG9hdDMgdG9MaW5lYXJTcGFjZShmbG9hdDMgY29sb3IpIHsKKyAgICByZXR1cm4gcG93KGNvbG9y
LCBmbG9hdDMoMi4yLCAyLjIsIDIuMikpOworfQorCitmbG9hdDMgdG9HYW1tYVNwYWNlKGZsb2F0
MyBjb2xvcikgeworICAgIHJldHVybiBwb3coY29sb3IsIGZsb2F0MygxLjAgLyAyLjIsIDEuMCAv
IDIuMiwgMS4wIC8gMi4yKSk7Cit9CisKK2Zsb2F0IHNxdWFyZShmbG9hdCB2YWx1ZSkgeworICAg
IHJldHVybiB2YWx1ZSAqIHZhbHVlOworfQorCitmbG9hdCBwb3c1KGZsb2F0IHZhbHVlKSB7Cisg
ICAgZmxvYXQgc3EgPSB2YWx1ZSAqIHZhbHVlOworICAgIHJldHVybiBzcSAqIHNxICogdmFsdWU7
Cit9CisKK2Zsb2F0IGdldEx1bWluYW5jZShmbG9hdDMgY29sb3IpIHsKKyAgICByZXR1cm4gY2xh
bXAoZG90KGNvbG9yLCBmbG9hdDMoMC4yMTI2LCAwLjcxNTIsIDAuMDcyMikpLCAwLiwgMS4pOwor
fQorCitmbG9hdCBnZXRSYW5kKGZsb2F0MiBzZWVkKSB7CisgICAgcmV0dXJuIGZyYWMoc2luKGRv
dChzZWVkLnh5LCBmbG9hdDIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7Cit9CisK
K2Zsb2F0IGRpdGhlcihmbG9hdDIgc2VlZCwgZmxvYXQgdmFyaWFuY2VBbW91bnQpIHsKKyAgICBm
bG9hdCByYW5kID0gZ2V0UmFuZChzZWVkKTsKKyAgICBmbG9hdCBkaXRoZXIgPSBsZXJwKC12YXJp
YW5jZUFtb3VudCAvIDI1NS4wLCB2YXJpYW5jZUFtb3VudCAvIDI1NS4wLCByYW5kKTsKKyAgICBy
ZXR1cm4gZGl0aGVyOworfQorCitmbG9hdDQgdG9SR0JEKGZsb2F0MyBjb2xvcikgeworICAgIGZs
b2F0IG1heFJHQiA9IG1heChtYXgoY29sb3IueCwgbWF4KGNvbG9yLnksIGNvbG9yLnopKSwgMC4w
MDAwMDAxKTsKKyAgICBmbG9hdCBEID0gbWF4KDI1NS4wIC8gbWF4UkdCLCAxLik7CisgICAgRCA9
IGNsYW1wKGZsb29yKEQpIC8gMjU1LjAsIDAuLCAxLik7CisgICAgZmxvYXQzIHJnYiA9IGNvbG9y
ICogRDsKKyAgICByZ2IgPSB0b0dhbW1hU3BhY2UocmdiKTsKKyAgICByZXR1cm4gZmxvYXQ0KHJn
YiwgRCk7Cit9CisKK2Zsb2F0MyBmcm9tUkdCRChmbG9hdDQgcmdiZCkgeworICAgIHJnYmQueHl6
ID0gdG9MaW5lYXJTcGFjZShyZ2JkLnh5eik7CisgICAgcmV0dXJuIHJnYmQueHl6IC8gcmdiZC53
OworfQorCitmbG9hdCBjb252ZXJ0Um91Z2huZXNzVG9BdmVyYWdlU2xvcGUoZmxvYXQgcm91Z2hu
ZXNzKSB7CisgICAgcmV0dXJuIHNxdWFyZShyb3VnaG5lc3MpICsgMC4wMDA1OworfQorCitmbG9h
dCBmcmVzbmVsR3JhemluZ1JlZmxlY3RhbmNlKGZsb2F0IHJlZmxlY3RhbmNlMCkgeworICAgIGZs
b2F0IHJlZmxlY3RhbmNlOTAgPSBjbGFtcChyZWZsZWN0YW5jZTAgKiAyNS4wLCAwLjAsIDEuMCk7
CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlOTA7Cit9CisKK2Zsb2F0MiBnZXRBQVJvdWdobmVzc0Zh
Y3RvcnMoZmxvYXQzIG5vcm1hbFZlY3RvcikgeworICAgIHJldHVybiBmbG9hdDIoMC4sIDAuKTsK
K30KKworZmxvYXQ0IGFwcGx5SW1hZ2VQcm9jZXNzaW5nKGZsb2F0NCByZXN1bHQpIHsKKyAgICBy
ZXN1bHQueHl6ID0gdG9HYW1tYVNwYWNlKHJlc3VsdC54eXopOworICAgIHJlc3VsdC54eXogPSBj
bGFtcChyZXN1bHQueHl6LCBmbG9hdDMoMC4wLCAwLjAsIDAuMCksIGZsb2F0MygxLjAsIDEuMCwg
MS4wKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IFByZUxpZ2h0aW5nSW5mbyB7
CisgICAgZmxvYXQzIGxpZ2h0T2Zmc2V0OworICAgIGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVk
OworICAgIGZsb2F0IGxpZ2h0RGlzdGFuY2U7CisgICAgZmxvYXQgYXR0ZW51YXRpb247CisgICAg
ZmxvYXQzIEw7CisgICAgZmxvYXQzIEg7CisgICAgZmxvYXQgTmRvdFY7CisgICAgZmxvYXQgTmRv
dExVbmNsYW1wZWQ7CisgICAgZmxvYXQgTmRvdEw7CisgICAgZmxvYXQgVmRvdEg7CisgICAgZmxv
YXQgcm91Z2huZXNzOworfQorCitQcmVMaWdodGluZ0luZm8gY29tcHV0ZVBvaW50QW5kU3BvdFBy
ZUxpZ2h0aW5nSW5mbyhmbG9hdDQgbGlnaHREYXRhLCBmbG9hdDMgViwgZmxvYXQzIE4sIGZsb2F0
MyB2UG9zaXRpb25XKSB7CisgICAgUHJlTGlnaHRpbmdJbmZvIHJlc3VsdDsKKyAgICByZXN1bHQu
bGlnaHRPZmZzZXQgPSBsaWdodERhdGEueHl6IC0gdlBvc2l0aW9uVzsKKyAgICByZXN1bHQubGln
aHREaXN0YW5jZVNxdWFyZWQgPSBkb3QocmVzdWx0LmxpZ2h0T2Zmc2V0LCByZXN1bHQubGlnaHRP
ZmZzZXQpOworICAgIHJlc3VsdC5saWdodERpc3RhbmNlID0gc3FydChyZXN1bHQubGlnaHREaXN0
YW5jZVNxdWFyZWQpOworICAgIHJlc3VsdC5MID0gbm9ybWFsaXplKHJlc3VsdC5saWdodE9mZnNl
dCk7CisgICAgcmVzdWx0LkggPSBub3JtYWxpemUoViArIHJlc3VsdC5MKTsKKyAgICByZXN1bHQu
VmRvdEggPSBjbGFtcChkb3QoViwgcmVzdWx0LkgpLCAwLjAsIDEuMCk7CisgICAgcmVzdWx0Lk5k
b3RMVW5jbGFtcGVkID0gZG90KE4sIHJlc3VsdC5MKTsKKyAgICByZXN1bHQuTmRvdEwgPSBjbGFt
cChyZXN1bHQuTmRvdExVbmNsYW1wZWQsIDAuMDAwMDAwMSwgMS4wKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitQcmVMaWdodGluZ0luZm8gY29tcHV0ZURpcmVjdGlvbmFsUHJlTGlnaHRpbmdJ
bmZvKGZsb2F0NCBsaWdodERhdGEsIGZsb2F0MyBWLCBmbG9hdDMgTikgeworICAgIFByZUxpZ2h0
aW5nSW5mbyByZXN1bHQ7CisgICAgcmVzdWx0LmxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoLWxpZ2h0
RGF0YS54eXopOworICAgIHJlc3VsdC5MID0gbm9ybWFsaXplKC1saWdodERhdGEueHl6KTsKKyAg
ICByZXN1bHQuSCA9IG5vcm1hbGl6ZShWICsgcmVzdWx0LkwpOworICAgIHJlc3VsdC5WZG90SCA9
IGNsYW1wKGRvdChWLCByZXN1bHQuSCksIDAuMCwgMS4wKTsKKyAgICByZXN1bHQuTmRvdExVbmNs
YW1wZWQgPSBkb3QoTiwgcmVzdWx0LkwpOworICAgIHJlc3VsdC5OZG90TCA9IGNsYW1wKHJlc3Vs
dC5OZG90TFVuY2xhbXBlZCwgMC4wMDAwMDAxLCAxLjApOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1ByZUxpZ2h0aW5nSW5mbyBjb21wdXRlSGVtaXNwaGVyaWNQcmVMaWdodGluZ0luZm8oZmxv
YXQ0IGxpZ2h0RGF0YSwgZmxvYXQzIFYsIGZsb2F0MyBOKSB7CisgICAgUHJlTGlnaHRpbmdJbmZv
IHJlc3VsdDsKKyAgICByZXN1bHQuTmRvdEwgPSBkb3QoTiwgbGlnaHREYXRhLnh5eikgKiAwLjUg
KyAwLjU7CisgICAgcmVzdWx0Lk5kb3RMID0gY2xhbXAocmVzdWx0Lk5kb3RMLCAwLjAwMDAwMDEs
IDEuMCk7CisgICAgcmVzdWx0Lk5kb3RMVW5jbGFtcGVkID0gcmVzdWx0Lk5kb3RMOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9TdGFu
ZGFyZChmbG9hdDMgbGlnaHRPZmZzZXQsIGZsb2F0IHJhbmdlKSB7CisgICAgcmV0dXJuIG1heCgw
LiwgMS4wIC0gbGVuZ3RoKGxpZ2h0T2Zmc2V0KSAvIHJhbmdlKTsKK30KKworZmxvYXQgY29tcHV0
ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVk
KSB7CisgICAgcmV0dXJuIDEuMCAvIG1heChsaWdodERpc3RhbmNlU3F1YXJlZCwgMC4wMDAwMDAx
KTsKK30KKworZmxvYXQgY29tcHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX0dMVEYoZmxvYXQgbGln
aHREaXN0YW5jZVNxdWFyZWQsIGZsb2F0IGludmVyc2VTcXVhcmVkUmFuZ2UpIHsKKyAgICBmbG9h
dCBsaWdodERpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heChsaWdodERpc3RhbmNlU3F1YXJlZCwg
MC4wMDAwMDAxKTsKKyAgICBmbG9hdCBmYWN0b3IgPSBsaWdodERpc3RhbmNlU3F1YXJlZCAqIGlu
dmVyc2VTcXVhcmVkUmFuZ2U7CisgICAgZmxvYXQgYXR0ZW51YXRpb24gPSBjbGFtcCgxLjAgLSBm
YWN0b3IgKiBmYWN0b3IsIDAuMCwgMS4wKTsKKyAgICBhdHRlbnVhdGlvbiAqPSBhdHRlbnVhdGlv
bjsKKyAgICBsaWdodERpc3RhbmNlRmFsbG9mZiAqPSBhdHRlbnVhdGlvbjsKKyAgICByZXR1cm4g
bGlnaHREaXN0YW5jZUZhbGxvZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFs
bG9mZihmbG9hdDMgbGlnaHRPZmZzZXQsIGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkLCBmbG9h
dCByYW5nZSwgZmxvYXQgaW52ZXJzZVNxdWFyZWRSYW5nZSkgeworICAgIHJldHVybiBjb21wdXRl
RGlzdGFuY2VMaWdodEZhbGxvZmZfUGh5c2ljYWwobGlnaHREaXN0YW5jZVNxdWFyZWQpOworfQor
CitmbG9hdCBjb21wdXRlRGlyZWN0aW9uYWxMaWdodEZhbGxvZmZfU3RhbmRhcmQoZmxvYXQzIGxp
Z2h0RGlyZWN0aW9uLCBmbG9hdDMgZGlyZWN0aW9uVG9MaWdodENlbnRlclcsIGZsb2F0IGNvc0hh
bGZBbmdsZSwgZmxvYXQgZXhwb25lbnQpIHsKKyAgICBmbG9hdCBmYWxsb2ZmID0gMC4wOworICAg
IGZsb2F0IGNvc0FuZ2xlID0gbWF4KGRvdCgtbGlnaHREaXJlY3Rpb24sIGRpcmVjdGlvblRvTGln
aHRDZW50ZXJXKSwgMC4wMDAwMDAxKTsKKyAgICBpZiAoY29zQW5nbGUgPj0gY29zSGFsZkFuZ2xl
KSB7CisgICAgICAgIGZhbGxvZmYgPSBtYXgoMC4sIHBvdyhjb3NBbmdsZSwgZXhwb25lbnQpKTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbGxvZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXJlY3Rpb25h
bExpZ2h0RmFsbG9mZl9QaHlzaWNhbChmbG9hdDMgbGlnaHREaXJlY3Rpb24sIGZsb2F0MyBkaXJl
Y3Rpb25Ub0xpZ2h0Q2VudGVyVywgZmxvYXQgY29zSGFsZkFuZ2xlKSB7CisgICAgZmxvYXQga01p
bnVzTG9nMkNvbmVBbmdsZUludGVuc2l0eVJhdGlvID0gNi42NDM4NTYxODk3NzsKKyAgICBmbG9h
dCBjb25jZW50cmF0aW9uS2FwcGEgPSBrTWludXNMb2cyQ29uZUFuZ2xlSW50ZW5zaXR5UmF0aW8g
LyAoMS4wIC0gY29zSGFsZkFuZ2xlKTsKKyAgICBmbG9hdDQgbGlnaHREaXJlY3Rpb25TcHJlYWRT
RyA9IGZsb2F0NCgtbGlnaHREaXJlY3Rpb24gKiBjb25jZW50cmF0aW9uS2FwcGEsIC1jb25jZW50
cmF0aW9uS2FwcGEpOworICAgIGZsb2F0IGZhbGxvZmYgPSBleHAyKGRvdChmbG9hdDQoZGlyZWN0
aW9uVG9MaWdodENlbnRlclcsIDEuMCksIGxpZ2h0RGlyZWN0aW9uU3ByZWFkU0cpKTsKKyAgICBy
ZXR1cm4gZmFsbG9mZjsKK30KKworZmxvYXQgY29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2Zm
X0dMVEYoZmxvYXQzIGxpZ2h0RGlyZWN0aW9uLCBmbG9hdDMgZGlyZWN0aW9uVG9MaWdodENlbnRl
clcsIGZsb2F0IGxpZ2h0QW5nbGVTY2FsZSwgZmxvYXQgbGlnaHRBbmdsZU9mZnNldCkgeworICAg
IGZsb2F0IGNkID0gZG90KC1saWdodERpcmVjdGlvbiwgZGlyZWN0aW9uVG9MaWdodENlbnRlclcp
OworICAgIGZsb2F0IGZhbGxvZmYgPSBjbGFtcChjZCAqIGxpZ2h0QW5nbGVTY2FsZSArIGxpZ2h0
QW5nbGVPZmZzZXQsIDAuMCwgMS4wKTsKKyAgICBmYWxsb2ZmICo9IGZhbGxvZmY7CisgICAgcmV0
dXJuIGZhbGxvZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXJlY3Rpb25hbExpZ2h0RmFsbG9mZihm
bG9hdDMgbGlnaHREaXJlY3Rpb24sIGZsb2F0MyBkaXJlY3Rpb25Ub0xpZ2h0Q2VudGVyVywgZmxv
YXQgY29zSGFsZkFuZ2xlLCBmbG9hdCBleHBvbmVudCwgZmxvYXQgbGlnaHRBbmdsZVNjYWxlLCBm
bG9hdCBsaWdodEFuZ2xlT2Zmc2V0KSB7CisgICAgcmV0dXJuIGNvbXB1dGVEaXJlY3Rpb25hbExp
Z2h0RmFsbG9mZl9QaHlzaWNhbChsaWdodERpcmVjdGlvbiwgZGlyZWN0aW9uVG9MaWdodENlbnRl
clcsIGNvc0hhbGZBbmdsZSk7Cit9CisKK2Zsb2F0MyBnZXRFbmVyZ3lDb25zZXJ2YXRpb25GYWN0
b3IoZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSMCwgZmxvYXQzIGVudmlyb25tZW50QnJkZikg
eworICAgIHJldHVybiBmbG9hdDMoMS4wLCAxLjAsIDEuMCkgKyBzcGVjdWxhckVudmlyb25tZW50
UjAgKiAoMS4wIC8gZW52aXJvbm1lbnRCcmRmLnkgLSAxLjApOworfQorCitmbG9hdDMgZ2V0QlJE
Rkxvb2t1cChmbG9hdCBOZG90ViwgZmxvYXQgcGVyY2VwdHVhbFJvdWdobmVzcywgVGV4dHVyZTJE
PGZsb2F0ND4gZW52aXJvbm1lbnRCcmRmU2FtcGxlclRleHR1cmUsIHNhbXBsZXIgZW52aXJvbm1l
bnRCcmRmU2FtcGxlclNhbXBsZXIpIHsKKyAgICBmbG9hdDIgVVYgPSBmbG9hdDIoTmRvdFYsIHBl
cmNlcHR1YWxSb3VnaG5lc3MpOworICAgIGZsb2F0NCBicmRmTG9va3VwID0gU2FtcGxlKGVudmly
b25tZW50QnJkZlNhbXBsZXJUZXh0dXJlLCBlbnZpcm9ubWVudEJyZGZTYW1wbGVyU2FtcGxlciwg
VVYpOworICAgIHJldHVybiBicmRmTG9va3VwLnh5ejsKK30KKworZmxvYXQzIGdldFJlZmxlY3Rh
bmNlRnJvbUJSREZMb29rdXAoZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSMCwgZmxvYXQzIGVu
dmlyb25tZW50QnJkZikgeworICAgIGZsb2F0MyByZWZsZWN0YW5jZSA9IGxlcnAoZW52aXJvbm1l
bnRCcmRmLnh4eCwgZW52aXJvbm1lbnRCcmRmLnl5eSwgc3BlY3VsYXJFbnZpcm9ubWVudFIwKTsK
KyAgICByZXR1cm4gcmVmbGVjdGFuY2U7Cit9CisKK2Zsb2F0MyBnZXRSZWZsZWN0YW5jZUZyb21B
bmFseXRpY2FsQlJERkxvb2t1cF9Kb25lcyhmbG9hdCBWZG90TiwgZmxvYXQzIHJlZmxlY3RhbmNl
MCwgZmxvYXQzIHJlZmxlY3RhbmNlOTAsIGZsb2F0IHNtb290aG5lc3MpIHsKKyAgICBmbG9hdCB3
ZWlnaHQgPSBsZXJwKDAuMjUsIDEuMCwgc21vb3RobmVzcyk7CisgICAgcmV0dXJuIHJlZmxlY3Rh
bmNlMCArIHdlaWdodCAqIChyZWZsZWN0YW5jZTkwIC0gcmVmbGVjdGFuY2UwKSAqIHBvdzUoY2xh
bXAoMS4wIC0gVmRvdE4sIDAuMCwgMS4wKSk7Cit9CisKK2Zsb2F0MyBmcmVzbmVsU2NobGlja0dH
WChmbG9hdCBWZG90SCwgZmxvYXQzIHJlZmxlY3RhbmNlMCwgZmxvYXQzIHJlZmxlY3RhbmNlOTAp
IHsKKyAgICByZXR1cm4gcmVmbGVjdGFuY2UwICsgKHJlZmxlY3RhbmNlOTAgLSByZWZsZWN0YW5j
ZTApICogcG93NSgxLjAgLSBWZG90SCk7Cit9CisKK2Zsb2F0IGZyZXNuZWxTY2hsaWNrR0dYKGZs
b2F0IFZkb3RILCBmbG9hdCByZWZsZWN0YW5jZTAsIGZsb2F0IHJlZmxlY3RhbmNlOTApIHsKKyAg
ICByZXR1cm4gcmVmbGVjdGFuY2UwICsgKHJlZmxlY3RhbmNlOTAgLSByZWZsZWN0YW5jZTApICog
cG93NSgxLjAgLSBWZG90SCk7Cit9CisKK2Zsb2F0IG5vcm1hbERpc3RyaWJ1dGlvbkZ1bmN0aW9u
X1Ryb3dicmlkZ2VSZWl0ekdHWChmbG9hdCBOZG90SCwgZmxvYXQgYWxwaGFHKSB7CisgICAgZmxv
YXQgYTIgPSBzcXVhcmUoYWxwaGFHKTsKKyAgICBmbG9hdCBkID0gTmRvdEggKiBOZG90SCAqIChh
MiAtIDEuMCkgKyAxLjA7CisgICAgcmV0dXJuIGEyIC8gKDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYy
NjQzMzgzMjc5NSAqIGQgKiBkKTsKK30KKworZmxvYXQgc21pdGhWaXNpYmlsaXR5X0dHWENvcnJl
bGF0ZWQoZmxvYXQgTmRvdEwsIGZsb2F0IE5kb3RWLCBmbG9hdCBhbHBoYUcpIHsKKyAgICBmbG9h
dCBhMiA9IGFscGhhRyAqIGFscGhhRzsKKyAgICBmbG9hdCBHR1hWID0gTmRvdEwgKiBzcXJ0KE5k
b3RWICogKE5kb3RWIC0gYTIgKiBOZG90VikgKyBhMik7CisgICAgZmxvYXQgR0dYTCA9IE5kb3RW
ICogc3FydChOZG90TCAqIChOZG90TCAtIGEyICogTmRvdEwpICsgYTIpOworICAgIHJldHVybiAw
LjUgLyAoR0dYViArIEdHWEwpOworfQorCitmbG9hdCBkaWZmdXNlQlJERl9CdXJsZXkoZmxvYXQg
TmRvdEwsIGZsb2F0IE5kb3RWLCBmbG9hdCBWZG90SCwgZmxvYXQgcm91Z2huZXNzKSB7CisgICAg
ZmxvYXQgZGlmZnVzZUZyZXNuZWxOViA9IHBvdzUoY2xhbXAoMS4wIC0gTmRvdEwsIDAuMDAwMDAw
MSwgMS4wKSk7CisgICAgZmxvYXQgZGlmZnVzZUZyZXNuZWxOTCA9IHBvdzUoY2xhbXAoMS4wIC0g
TmRvdFYsIDAuMDAwMDAwMSwgMS4wKSk7CisgICAgZmxvYXQgZGlmZnVzZUZyZXNuZWw5MCA9IDAu
NSArIDIuMCAqIFZkb3RIICogVmRvdEggKiByb3VnaG5lc3M7CisgICAgZmxvYXQgZnJlc25lbCA9
ICgxLjAgKyAoZGlmZnVzZUZyZXNuZWw5MCAtIDEuMCkgKiBkaWZmdXNlRnJlc25lbE5MKSAqCisg
ICAgICAgICgxLjAgKyAoZGlmZnVzZUZyZXNuZWw5MCAtIDEuMCkgKiBkaWZmdXNlRnJlc25lbE5W
KTsKKyAgICByZXR1cm4gZnJlc25lbCAvIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5
NTsKK30KKworc3RydWN0IExpZ2h0aW5nSW5mbyB7CisgICAgZmxvYXQzIGRpZmZ1c2U7Cit9CisK
K2Zsb2F0IGFkanVzdFJvdWdobmVzc0Zyb21MaWdodFByb3BlcnRpZXMoZmxvYXQgcm91Z2huZXNz
LCBmbG9hdCBsaWdodFJhZGl1cywgZmxvYXQgbGlnaHREaXN0YW5jZSkgeworICAgIGZsb2F0IGxp
Z2h0Um91Z2huZXNzID0gbGlnaHRSYWRpdXMgLyBsaWdodERpc3RhbmNlOworICAgIGZsb2F0IHRv
dGFsUm91Z2huZXNzID0gY2xhbXAobGlnaHRSb3VnaG5lc3MgKyByb3VnaG5lc3MsIDAuMCwgMS4w
KTsKKyAgICByZXR1cm4gdG90YWxSb3VnaG5lc3M7Cit9CisKK2Zsb2F0MyBjb21wdXRlSGVtaXNw
aGVyaWNEaWZmdXNlTGlnaHRpbmcoUHJlTGlnaHRpbmdJbmZvIGluZm8sIGZsb2F0MyBsaWdodENv
bG9yLCBmbG9hdDMgZ3JvdW5kQ29sb3IpIHsKKyAgICByZXR1cm4gbGVycChncm91bmRDb2xvciwg
bGlnaHRDb2xvciwgZmxvYXQzKGluZm8uTmRvdEwsIGluZm8uTmRvdEwsIGluZm8uTmRvdEwpKTsK
K30KKworZmxvYXQzIGNvbXB1dGVEaWZmdXNlTGlnaHRpbmcoUHJlTGlnaHRpbmdJbmZvIGluZm8s
IGZsb2F0MyBsaWdodENvbG9yKSB7CisgICAgZmxvYXQgZGlmZnVzZVRlcm0gPSBkaWZmdXNlQlJE
Rl9CdXJsZXkoaW5mby5OZG90TCwgaW5mby5OZG90ViwgaW5mby5WZG90SCwgaW5mby5yb3VnaG5l
c3MpOworICAgIHJldHVybiBkaWZmdXNlVGVybSAqIGluZm8uYXR0ZW51YXRpb24gKiBpbmZvLk5k
b3RMICogbGlnaHRDb2xvcjsKK30KKworZmxvYXQyIGNvbXB1dGVQcm9qZWN0aW9uVGV4dHVyZURp
ZmZ1c2VMaWdodGluZ1VWKGZsb2F0NHg0IHRleHR1cmVQcm9qZWN0aW9uTWF0cml4LCBmbG9hdDMg
dlBvc2l0aW9uVykgeworICAgIGZsb2F0NCBzdHJxID0gbXVsKHRleHR1cmVQcm9qZWN0aW9uTWF0
cml4LCBmbG9hdDQodlBvc2l0aW9uVywgMS4wKSk7CisgICAgc3RycSAvPSBzdHJxLnc7CisgICAg
cmV0dXJuIHN0cnEueHk7Cit9CisKK2Zsb2F0IGdldExvZEZyb21BbHBoYUcoZmxvYXQgY3ViZU1h
cERpbWVuc2lvblBpeGVscywgZmxvYXQgbWljcm9zdXJmYWNlQXZlcmFnZVNsb3BlKSB7CisgICAg
ZmxvYXQgbWljcm9zdXJmYWNlQXZlcmFnZVNsb3BlVGV4ZWxzID0gY3ViZU1hcERpbWVuc2lvblBp
eGVscyAqIG1pY3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZTsKKyAgICBmbG9hdCBsb2QgPSBsb2cyKG1p
Y3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZVRleGVscyk7CisgICAgcmV0dXJuIGxvZDsKK30KKworZmxv
YXQgZ2V0TGluZWFyTG9kRnJvbVJvdWdobmVzcyhmbG9hdCBjdWJlTWFwRGltZW5zaW9uUGl4ZWxz
LCBmbG9hdCByb3VnaG5lc3MpIHsKKyAgICBmbG9hdCBsb2QgPSBsb2cyKGN1YmVNYXBEaW1lbnNp
b25QaXhlbHMpICogcm91Z2huZXNzOworICAgIHJldHVybiBsb2Q7Cit9CisKK2Zsb2F0IGVudmly
b25tZW50UmFkaWFuY2VPY2NsdXNpb24oZmxvYXQgYW1iaWVudE9jY2x1c2lvbiwgZmxvYXQgTmRv
dFZVbmNsYW1wZWQpIHsKKyAgICBmbG9hdCB0ZW1wID0gTmRvdFZVbmNsYW1wZWQgKyBhbWJpZW50
T2NjbHVzaW9uOworICAgIHJldHVybiBjbGFtcChzcXVhcmUodGVtcCkgLSAxLjAgKyBhbWJpZW50
T2NjbHVzaW9uLCAwLjAsIDEuMCk7Cit9CisKK2Zsb2F0IGVudmlyb25tZW50SG9yaXpvbk9jY2x1
c2lvbihmbG9hdDMgdmlldywgZmxvYXQzIG5vcm1hbCkgeworICAgIGZsb2F0MyByZWZsZWN0aW9u
ID0gcmVmbGVjdCh2aWV3LCBub3JtYWwpOworICAgIGZsb2F0IHRlbXAgPSBjbGFtcCgxLjAgKyAx
LjEgKiBkb3QocmVmbGVjdGlvbiwgbm9ybWFsKSwgMC4wLCAxLjApOworICAgIHJldHVybiBzcXVh
cmUodGVtcCk7Cit9CisKK2Zsb2F0MyBwYXJhbGxheENvcnJlY3ROb3JtYWwoZmxvYXQzIHZlcnRl
eFBvcywgZmxvYXQzIG9yaWdWZWMsIGZsb2F0MyBjdWJlU2l6ZSwgZmxvYXQzIGN1YmVQb3MpIHsK
KyAgICBmbG9hdDMgaW52T3JpZ1ZlYyA9IGZsb2F0MygxLjAsIDEuMCwgMS4wKSAvIG9yaWdWZWM7
CisgICAgZmxvYXQzIGhhbGZTaXplID0gY3ViZVNpemUgKiAwLjU7CisgICAgZmxvYXQzIGludGVy
c2VjQXRNYXhQbGFuZSA9IChjdWJlUG9zICsgaGFsZlNpemUgLSB2ZXJ0ZXhQb3MpICogaW52T3Jp
Z1ZlYzsKKyAgICBmbG9hdDMgaW50ZXJzZWNBdE1pblBsYW5lID0gKGN1YmVQb3MgLSBoYWxmU2l6
ZSAtIHZlcnRleFBvcykgKiBpbnZPcmlnVmVjOworICAgIGZsb2F0MyBsYXJnZXN0SW50ZXJzZWMg
PSBtYXgoaW50ZXJzZWNBdE1heFBsYW5lLCBpbnRlcnNlY0F0TWluUGxhbmUpOworICAgIGZsb2F0
IGRpc3RhbmNlID0gbWluKG1pbihsYXJnZXN0SW50ZXJzZWMueCwgbGFyZ2VzdEludGVyc2VjLnkp
LCBsYXJnZXN0SW50ZXJzZWMueik7CisgICAgZmxvYXQzIGludGVyc2VjdFBvc2l0aW9uV1MgPSB2
ZXJ0ZXhQb3MgKyBvcmlnVmVjICogZGlzdGFuY2U7CisgICAgcmV0dXJuIGludGVyc2VjdFBvc2l0
aW9uV1MgLSBjdWJlUG9zOworfQorCitmbG9hdDMgY29tcHV0ZUZpeGVkRXF1aXJlY3Rhbmd1bGFy
Q29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9hdDMgZGlyZWN0
aW9uKSB7CisgICAgZmxvYXQgbG9uID0gYXRhbjIoZGlyZWN0aW9uLnosIGRpcmVjdGlvbi54KTsK
KyAgICBmbG9hdCBsYXQgPSBhY29zKGRpcmVjdGlvbi55KTsKKyAgICBmbG9hdDIgc3BoZXJlQ29v
cmRzID0gZmxvYXQyKGxvbiwgbGF0KSAqIDAuMTU5MTU0OTQgKiAyLjA7CisgICAgZmxvYXQgcyA9
IHNwaGVyZUNvb3Jkcy54ICogMC41ICsgMC41OworICAgIGZsb2F0IHQgPSBzcGhlcmVDb29yZHMu
eTsKKyAgICByZXR1cm4gZmxvYXQzKHMsIHQsIDApOworfQorCitmbG9hdDMgY29tcHV0ZU1pcnJv
cmVkRml4ZWRFcXVpcmVjdGFuZ3VsYXJDb29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29y
bGROb3JtYWwsIGZsb2F0MyBkaXJlY3Rpb24pIHsKKyAgICBmbG9hdCBsb24gPSBhdGFuMihkaXJl
Y3Rpb24ueiwgZGlyZWN0aW9uLngpOworICAgIGZsb2F0IGxhdCA9IGFjb3MoZGlyZWN0aW9uLnkp
OworICAgIGZsb2F0MiBzcGhlcmVDb29yZHMgPSBmbG9hdDIobG9uLCBsYXQpICogMC4xNTkxNTQ5
NCAqIDIuMDsKKyAgICBmbG9hdCBzID0gc3BoZXJlQ29vcmRzLnggKiAwLjUgKyAwLjU7CisgICAg
ZmxvYXQgdCA9IHNwaGVyZUNvb3Jkcy55OworICAgIHJldHVybiBmbG9hdDMoMS4wIC0gcywgdCwg
MCk7Cit9CisKK2Zsb2F0MyBjb21wdXRlRXF1aXJlY3Rhbmd1bGFyQ29vcmRzKGZsb2F0NCB3b3Js
ZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9hdDMgZXllUG9zaXRpb24sIGZsb2F0NHg0IHJl
ZmxlY3Rpb25NYXRyaXgpIHsKKyAgICBmbG9hdDMgY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUo
d29ybGRQb3MueHl6IC0gZXllUG9zaXRpb24pOworICAgIGZsb2F0MyByID0gbm9ybWFsaXplKHJl
ZmxlY3QoY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsKSk7CisgICAgciA9IG11bChyZWZsZWN0
aW9uTWF0cml4LCBmbG9hdDQociwgMCkpLnh5ejsKKyAgICBmbG9hdCBsb24gPSBhdGFuMihyLnos
IHIueCk7CisgICAgZmxvYXQgbGF0ID0gYWNvcyhyLnkpOworICAgIGZsb2F0MiBzcGhlcmVDb29y
ZHMgPSBmbG9hdDIobG9uLCBsYXQpICogMC4xNTkxNTQ5NCAqIDIuMDsKKyAgICBmbG9hdCBzID0g
c3BoZXJlQ29vcmRzLnggKiAwLjUgKyAwLjU7CisgICAgZmxvYXQgdCA9IHNwaGVyZUNvb3Jkcy55
OworICAgIHJldHVybiBmbG9hdDMocywgdCwgMCk7Cit9CisKK2Zsb2F0MyBjb21wdXRlU3BoZXJp
Y2FsQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9hdDR4NCB2
aWV3LCBmbG9hdDR4NCByZWZsZWN0aW9uTWF0cml4KSB7CisgICAgZmxvYXQzIHZpZXdEaXIgPSBu
b3JtYWxpemUobXVsKHZpZXcsIHdvcmxkUG9zKS54eXopOworICAgIGZsb2F0MyB2aWV3Tm9ybWFs
ID0gbm9ybWFsaXplKG11bCh2aWV3LCBmbG9hdDQod29ybGROb3JtYWwsIDAuMCkpLnh5eik7Cisg
ICAgZmxvYXQzIHIgPSByZWZsZWN0KHZpZXdEaXIsIHZpZXdOb3JtYWwpOworICAgIHIgPSBtdWwo
cmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KHIsIDApKS54eXo7CisgICAgci56ID0gci56IC0gMS4w
OworICAgIGZsb2F0IG0gPSAyLjAgKiBsZW5ndGgocik7CisgICAgcmV0dXJuIGZsb2F0MyhyLngg
LyBtICsgMC41LCAxLjAgLSByLnkgLyBtIC0gMC41LCAwKTsKK30KKworZmxvYXQzIGNvbXB1dGVQ
bGFuYXJDb29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29ybGROb3JtYWwsIGZsb2F0MyBl
eWVQb3NpdGlvbiwgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAgIGZsb2F0MyB2aWV3
RGlyID0gd29ybGRQb3MueHl6IC0gZXllUG9zaXRpb247CisgICAgZmxvYXQzIGNvb3JkcyA9IG5v
cm1hbGl6ZShyZWZsZWN0KHZpZXdEaXIsIHdvcmxkTm9ybWFsKSk7CisgICAgcmV0dXJuIG11bChy
ZWZsZWN0aW9uTWF0cml4LCBmbG9hdDQoY29vcmRzLCAxKSkueHl6OworfQorCitmbG9hdDMgY29t
cHV0ZUN1YmljQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9h
dDMgZXllUG9zaXRpb24sIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgpIHsKKyAgICBmbG9hdDMg
dmlld0RpciA9IG5vcm1hbGl6ZSh3b3JsZFBvcy54eXogLSBleWVQb3NpdGlvbik7CisgICAgZmxv
YXQzIGNvb3JkcyA9IHJlZmxlY3Qodmlld0Rpciwgd29ybGROb3JtYWwpOworICAgIGNvb3JkcyA9
IG11bChyZWZsZWN0aW9uTWF0cml4LCBmbG9hdDQoY29vcmRzLCAwKSkueHl6OworICAgIHJldHVy
biBjb29yZHM7Cit9CisKK2Zsb2F0MyBjb21wdXRlQ3ViaWNMb2NhbENvb3JkcyhmbG9hdDQgd29y
bGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQzIGV5ZVBvc2l0aW9uLCBmbG9hdDR4NCBy
ZWZsZWN0aW9uTWF0cml4LCBmbG9hdDMgcmVmbGVjdGlvblNpemUsIGZsb2F0MyByZWZsZWN0aW9u
UG9zaXRpb24pIHsKKyAgICBmbG9hdDMgdmlld0RpciA9IG5vcm1hbGl6ZSh3b3JsZFBvcy54eXog
LSBleWVQb3NpdGlvbik7CisgICAgZmxvYXQzIGNvb3JkcyA9IHJlZmxlY3Qodmlld0Rpciwgd29y
bGROb3JtYWwpOworICAgIGNvb3JkcyA9IHBhcmFsbGF4Q29ycmVjdE5vcm1hbCh3b3JsZFBvcy54
eXosIGNvb3JkcywgcmVmbGVjdGlvblNpemUsIHJlZmxlY3Rpb25Qb3NpdGlvbik7CisgICAgY29v
cmRzID0gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChjb29yZHMsIDApKS54eXo7CisgICAg
cmV0dXJuIGNvb3JkczsKK30KKworZmxvYXQzIGNvbXB1dGVQcm9qZWN0aW9uQ29vcmRzKGZsb2F0
NCB3b3JsZFBvcywgZmxvYXQ0eDQgdmlldywgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgewor
ICAgIHJldHVybiBtdWwocmVmbGVjdGlvbk1hdHJpeCwgbXVsKHZpZXcsIHdvcmxkUG9zKSkueHl6
OworfQorCitmbG9hdDMgY29tcHV0ZVNreUJveENvb3JkcyhmbG9hdDMgcG9zaXRpb25XLCBmbG9h
dDR4NCByZWZsZWN0aW9uTWF0cml4KSB7CisgICAgcmV0dXJuIG11bChyZWZsZWN0aW9uTWF0cml4
LCBmbG9hdDQocG9zaXRpb25XLCAwKSkueHl6OworfQorCitmbG9hdDMgY29tcHV0ZVJlZmxlY3Rp
b25Db29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29ybGROb3JtYWwsIGZsb2F0MyB2UG9z
aXRpb25VVlcsIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgpIHsKKyAgICBmbG9hdCByID0gbGVu
Z3RoKHZQb3NpdGlvblVWVyk7CisgICAgZmxvYXQgZ2FtbWEgPSBhdGFuMih2UG9zaXRpb25VVlcu
eCwgdlBvc2l0aW9uVVZXLnopOworICAgIGZsb2F0IHRoZXRhID0gYWNvcyh2UG9zaXRpb25VVlcu
eSAvIHIpOworICAgIHJldHVybiBmbG9hdDMoZ2FtbWEgLyAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2
MjY0MzM4MzI3OTUgKyAwLjUsIHRoZXRhIC8gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMy
Nzk1LCByKTsKK30KKworZnJhZ21lbnQgZmxvYXQ0IG1haW4oZmxvYXQzIHZQb3NpdGlvblcgOiBh
dHRyaWJ1dGUoMCksIGZsb2F0MyB2Tm9ybWFsVyA6IGF0dHJpYnV0ZSgxKSwgZmxvYXQzIHZQb3Np
dGlvblVWVyA6IGF0dHJpYnV0ZSgyKSwgQmluZEdyb3VwQSBiaW5kR3JvdXBBLCBCaW5kR3JvdXBC
IGJpbmRHcm91cEIsIEJpbmRHcm91cEMgYmluZEdyb3VwQywgYm9vbCBmcm9udEZhY2UgOiBTVl9J
c0Zyb250RmFjZSkgOiBTVl9UYXJnZXQgMCB7CisgICAgZmxvYXQzIHZpZXdEaXJlY3Rpb25XID0g
bm9ybWFsaXplKGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkV5ZVBvc2l0aW9uLnh5eiAtIHZQb3Np
dGlvblcpOworICAgIGZsb2F0MyBub3JtYWxXID0gbm9ybWFsaXplKHZOb3JtYWxXKTsKKyAgICBm
bG9hdDIgdXZPZmZzZXQgPSBmbG9hdDIoMC4wLCAwLjApOworICAgIG5vcm1hbFcgPSBmcm9udEZh
Y2UgPyBub3JtYWxXIDogLW5vcm1hbFc7CisgICAgZmxvYXQzIHN1cmZhY2VBbGJlZG8gPSBiaW5k
R3JvdXBCLm1hdGVyaWFsWzBdLnZBbGJlZG9Db2xvci54eXo7CisgICAgZmxvYXQgYWxwaGEgPSBi
aW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZBbGJlZG9Db2xvci53OworICAgIGZsb2F0MyBhbWJpZW50
T2NjbHVzaW9uQ29sb3IgPSBmbG9hdDMoMS4sIDEuLCAxLik7CisgICAgZmxvYXQgbWljcm9TdXJm
YWNlID0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVjdGl2aXR5Q29sb3IudzsKKyAgICBm
bG9hdDMgc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yID0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52
UmVmbGVjdGl2aXR5Q29sb3IueHl6OworICAgIG1pY3JvU3VyZmFjZSA9IGNsYW1wKG1pY3JvU3Vy
ZmFjZSwgMC4wLCAxLjApOworICAgIGZsb2F0IHJvdWdobmVzcyA9IDEuIC0gbWljcm9TdXJmYWNl
OworICAgIGZsb2F0IE5kb3RWVW5jbGFtcGVkID0gZG90KG5vcm1hbFcsIHZpZXdEaXJlY3Rpb25X
KTsKKyAgICBmbG9hdCBOZG90ViA9IGFicyhOZG90VlVuY2xhbXBlZCkgKyAwLjAwMDAwMDE7Cisg
ICAgZmxvYXQgYWxwaGFHID0gY29udmVydFJvdWdobmVzc1RvQXZlcmFnZVNsb3BlKHJvdWdobmVz
cyk7CisgICAgZmxvYXQyIEFBUm91Z2huZXNzRmFjdG9ycyA9IGdldEFBUm91Z2huZXNzRmFjdG9y
cyhub3JtYWxXKTsKKyAgICBmbG9hdDQgZW52aXJvbm1lbnRSYWRpYW5jZSA9IGZsb2F0NCgwLiwg
MC4sIDAuLCAwLik7CisgICAgZmxvYXQzIGVudmlyb25tZW50SXJyYWRpYW5jZSA9IGZsb2F0Mygw
LiwgMC4sIDAuKTsKKyAgICBmbG9hdDMgcmVmbGVjdGlvblZlY3RvciA9IGNvbXB1dGVSZWZsZWN0
aW9uQ29vcmRzKGZsb2F0NCh2UG9zaXRpb25XLCAxLjApLCBub3JtYWxXLCB2UG9zaXRpb25VVlcs
IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0ucmVmbGVjdGlvbk1hdHJpeCk7CisgICAgZmxvYXQzIHJl
ZmxlY3Rpb25Db29yZHMgPSByZWZsZWN0aW9uVmVjdG9yOworICAgIGZsb2F0IHJlZmxlY3Rpb25M
T0QgPSBnZXRMb2RGcm9tQWxwaGFHKGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25N
aWNyb3N1cmZhY2VJbmZvcy54LCBhbHBoYUcpOworICAgIHJlZmxlY3Rpb25MT0QgPSByZWZsZWN0
aW9uTE9EICogYmluZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUlu
Zm9zLnkgKyBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5m
b3MuejsKKyAgICBmbG9hdCByZXF1ZXN0ZWRSZWZsZWN0aW9uTE9EID0gcmVmbGVjdGlvbkxPRDsK
KyAgICBlbnZpcm9ubWVudFJhZGlhbmNlID0gU2FtcGxlKGJpbmRHcm91cEMucmVmbGVjdGlvblNh
bXBsZXJUZXh0dXJlLCBiaW5kR3JvdXBDLnJlZmxlY3Rpb25TYW1wbGVyU2FtcGxlciwgcmVmbGVj
dGlvbkNvb3Jkcy54eSk7IC8vU2FtcGxlTGV2ZWwoYmluZEdyb3VwQy5yZWZsZWN0aW9uU2FtcGxl
clRleHR1cmUsIGJpbmRHcm91cEMucmVmbGVjdGlvblNhbXBsZXJTYW1wbGVyLCByZWZsZWN0aW9u
Q29vcmRzLCByZXF1ZXN0ZWRSZWZsZWN0aW9uTE9EKTsKKyAgICBlbnZpcm9ubWVudFJhZGlhbmNl
Lnh5eiA9IGZyb21SR0JEKGVudmlyb25tZW50UmFkaWFuY2UpOworICAgIGVudmlyb25tZW50UmFk
aWFuY2UueHl6ICo9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25JbmZvcy54Owor
ICAgIGVudmlyb25tZW50UmFkaWFuY2UueHl6ICo9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJl
ZmxlY3Rpb25Db2xvci54eXo7CisgICAgZW52aXJvbm1lbnRJcnJhZGlhbmNlICo9IGJpbmRHcm91
cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25Db2xvci54eXo7CisgICAgZmxvYXQgcmVmbGVjdGFu
Y2UgPSBtYXgobWF4KHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci54LCBzdXJmYWNlUmVmbGVjdGl2
aXR5Q29sb3IueSksIHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci56KTsKKyAgICBmbG9hdCByZWZs
ZWN0YW5jZTkwID0gZnJlc25lbEdyYXppbmdSZWZsZWN0YW5jZShyZWZsZWN0YW5jZSk7CisgICAg
ZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSMCA9IHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci54
eXo7CisgICAgZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSOTAgPSBmbG9hdDMoMS4wLCAxLjAs
IDEuMCkgKiByZWZsZWN0YW5jZTkwOworICAgIGZsb2F0MyBlbnZpcm9ubWVudEJyZGYgPSBnZXRC
UkRGTG9va3VwKE5kb3RWLCByb3VnaG5lc3MsIGJpbmRHcm91cEEuZW52aXJvbm1lbnRCcmRmU2Ft
cGxlclRleHR1cmUsIGJpbmRHcm91cEEuZW52aXJvbm1lbnRCcmRmU2FtcGxlclNhbXBsZXIpOwor
ICAgIGZsb2F0MyBlbmVyZ3lDb25zZXJ2YXRpb25GYWN0b3IgPSBnZXRFbmVyZ3lDb25zZXJ2YXRp
b25GYWN0b3Ioc3BlY3VsYXJFbnZpcm9ubWVudFIwLCBlbnZpcm9ubWVudEJyZGYpOworICAgIGZs
b2F0MyBkaWZmdXNlQmFzZSA9IGZsb2F0MygwLiwgMC4sIDAuKTsKKyAgICBQcmVMaWdodGluZ0lu
Zm8gcHJlSW5mbzsKKyAgICBMaWdodGluZ0luZm8gaW5mbzsKKyAgICBmbG9hdCBzaGFkb3cgPSAx
LjsKKyAgICBmbG9hdDMgc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3RhbmNlID0gZ2V0UmVmbGVj
dGFuY2VGcm9tQW5hbHl0aWNhbEJSREZMb29rdXBfSm9uZXMoTmRvdFYsIHNwZWN1bGFyRW52aXJv
bm1lbnRSMCwgc3BlY3VsYXJFbnZpcm9ubWVudFI5MCwgc3FydChtaWNyb1N1cmZhY2UpKTsKKyAg
ICBzdXJmYWNlQWxiZWRvLnh5eiA9ICgxLiAtIHJlZmxlY3RhbmNlKSAqIHN1cmZhY2VBbGJlZG8u
eHl6OworICAgIGZsb2F0MyBmaW5hbElycmFkaWFuY2UgPSBlbnZpcm9ubWVudElycmFkaWFuY2U7
CisgICAgZmluYWxJcnJhZGlhbmNlICo9IHN1cmZhY2VBbGJlZG8ueHl6OworICAgIGZsb2F0MyBm
aW5hbFJhZGlhbmNlID0gZW52aXJvbm1lbnRSYWRpYW5jZS54eXo7CisgICAgZmluYWxSYWRpYW5j
ZSAqPSBzcGVjdWxhckVudmlyb25tZW50UmVmbGVjdGFuY2U7CisgICAgZmxvYXQzIGZpbmFsUmFk
aWFuY2VTY2FsZWQgPSBmaW5hbFJhZGlhbmNlICogYmluZEdyb3VwQi5tYXRlcmlhbFswXS52TGln
aHRpbmdJbnRlbnNpdHkuejsKKyAgICBmaW5hbFJhZGlhbmNlU2NhbGVkICo9IGVuZXJneUNvbnNl
cnZhdGlvbkZhY3RvcjsKKyAgICBmbG9hdDMgZmluYWxEaWZmdXNlID0gZGlmZnVzZUJhc2U7Cisg
ICAgZmluYWxEaWZmdXNlICo9IHN1cmZhY2VBbGJlZG8ueHl6OworICAgIGZpbmFsRGlmZnVzZSA9
IG1heChmaW5hbERpZmZ1c2UsIGZsb2F0MygwLjAsIDAuMCwgMC4wKSk7CisgICAgZmxvYXQzIGZp
bmFsQW1iaWVudCA9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkFtYmllbnRDb2xvcjsKKyAgICBm
aW5hbEFtYmllbnQgKj0gc3VyZmFjZUFsYmVkby54eXo7CisgICAgZmxvYXQzIGZpbmFsRW1pc3Np
dmUgPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZFbWlzc2l2ZUNvbG9yOworICAgIGZsb2F0MyBh
bWJpZW50T2NjbHVzaW9uRm9yRGlyZWN0RGlmZnVzZSA9IGFtYmllbnRPY2NsdXNpb25Db2xvcjsK
KyAgICBmbG9hdDQgZmluYWxDb2xvciA9IGZsb2F0NCgKKyAgICAgICAgZmluYWxBbWJpZW50ICog
YW1iaWVudE9jY2x1c2lvbkNvbG9yICsKKyAgICAgICAgZmluYWxEaWZmdXNlICogYW1iaWVudE9j
Y2x1c2lvbkZvckRpcmVjdERpZmZ1c2UgKiBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZMaWdodGlu
Z0ludGVuc2l0eS54ICsKKyAgICAgICAgZmluYWxJcnJhZGlhbmNlICogYW1iaWVudE9jY2x1c2lv
bkNvbG9yICogYmluZEdyb3VwQi5tYXRlcmlhbFswXS52TGlnaHRpbmdJbnRlbnNpdHkueiArCisg
ICAgICAgIGZpbmFsUmFkaWFuY2VTY2FsZWQgKworICAgICAgICBmaW5hbEVtaXNzaXZlICogYmlu
ZEdyb3VwQi5tYXRlcmlhbFswXS52TGlnaHRpbmdJbnRlbnNpdHkueSwKKyAgICAgICAgYWxwaGEp
OworICAgIGZpbmFsQ29sb3IgPSBtYXgoZmluYWxDb2xvciwgZmxvYXQ0KDAuMCwgMC4wLCAwLjAs
IDAuMCkpOworICAgIGZpbmFsQ29sb3IgPSBhcHBseUltYWdlUHJvY2Vzc2luZyhmaW5hbENvbG9y
KTsKKyAgICBmaW5hbENvbG9yLncgKj0gYmluZEdyb3VwQi5tZXNoWzBdLnZpc2liaWxpdHk7Cisg
ICAgcmV0dXJuIGZpbmFsQ29sb3I7Cit9CitgOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0
Lm9yZy9kZW1vcy93ZWJncHUvYmFieWxvbi9vbmVTcGhlcmVXZWJHUFUuaHRtbCBiL1dlYnNpdGVz
L3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vb25lU3BoZXJlV2ViR1BVLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjMxYWNhYWQ3YmM2MzQxNjcxZTljMmJlODBhYWIxNTI0YTk4ZWNkOAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vb25l
U3BoZXJlV2ViR1BVLmh0bWwKQEAgLTAsMCArMSwyMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorCis8aGVhZD4KKyAgICA8
dGl0bGU+T25lIFNwaGVyZSBXZWJHUFU8L3RpdGxlPgorCisgICAgPGxpbmsgaHJlZj0iaHR0cHM6
Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2FucyIgcmVsPSJzdHlsZXNo
ZWV0Ij4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vdXNlLnR5cGVr
aXQubmV0L2N0YTR4c2IuY3NzIj4KKworICAgIDxzdHlsZT4KKyAgICAgICAgaHRtbCwKKyAgICAg
ICAgYm9keSB7CisgICAgICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgIHBhZGRpbmc6
IDA7CisgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiAjMmEyMzQyOworICAgICAgICAgICAgY29sb3I6ICNmZmZmZmY7CisgICAgICAgICAgICBmb250
LWZhbWlseTogImFjdW1pbi1wcm8iOworICAgICAgICB9CisKKyAgICAgICAgI3JlbmRlckNhbnZh
cyB7CisgICAgICAgICAgICB3aWR0aDogMTAyNHB4OworICAgICAgICAgICAgaGVpZ2h0OiA3Njhw
eDsKKyAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgICAgICAgZm9udC1zaXplOiAw
OworICAgICAgICAgICAgbWFyZ2luOiBhdXRvOworICAgICAgICAgICAgYm9yZGVyOm5vbmUgIWlt
cG9ydGFudDsKKyAgICAgICAgICAgIG91dGxpbmU6bm9uZSAhaW1wb3J0YW50OworICAgICAgICB9
CisKKyAgICAgICAgLmNvbnRhaW5lciB7CisgICAgICAgICAgICBkaXNwbGF5OiBncmlkOworICAg
ICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDE3MHB4IDc1NHB4IDEwMHB4IGF1
dG87CisgICAgICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDYwcHggNzY4cHg7CisgICAgICAg
IH0KKworICAgICAgICAuaGVhZGVyTG9nbyB7CisgICAgICAgICAgICBncmlkLWNvbHVtbi1zdGFy
dDogMjsKKyAgICAgICAgICAgIGdyaWQtY29sdW1uLWVuZDogMjsKKyAgICAgICAgICAgIGdyaWQt
cm93LXN0YXJ0OiAxOworICAgICAgICAgICAgZ3JpZC1yb3ctZW5kOiAxOworICAgICAgICAgICAg
YmFja2dyb3VuZC1jb2xvcjogIzIwMTkzNjsKKyAgICAgICAgfQorCisgICAgICAgIC5oZWFkZXJM
b2dvID4gYSA+IGltZyB7CisgICAgICAgICAgICB3aWR0aDogYXV0bzsKKyAgICAgICAgICAgIGhl
aWdodDogNjBweDsKKyAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OworICAgICAgICB9CisK
KyAgICAgICAgLmhlYWRlclRleHQgeworICAgICAgICAgICAgZ3JpZC1jb2x1bW4tc3RhcnQ6IDM7
CisgICAgICAgICAgICBncmlkLWNvbHVtbi1lbmQ6IDM7CisgICAgICAgICAgICBncmlkLXJvdy1z
dGFydDogMTsKKyAgICAgICAgICAgIGdyaWQtcm93LWVuZDogMTsKKyAgICAgICAgICAgIGZvbnQt
c2l6ZTogMzVweDsKKyAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OworICAgICAgICAgICAg
dGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIwMTkz
NjsKKyAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAiYWN1bWluLXByby1leHRyYS1jb25kZW5zZWQi
OworICAgICAgICB9CisKKyAgICAgICAgLmhlYWRlckZQUyB7CisgICAgICAgICAgICBncmlkLWNv
bHVtbi1zdGFydDogNDsKKyAgICAgICAgICAgIGdyaWQtY29sdW1uLWVuZDogNDsKKyAgICAgICAg
ICAgIGdyaWQtcm93LXN0YXJ0OiAxOworICAgICAgICAgICAgZ3JpZC1yb3ctZW5kOiAxOworICAg
ICAgICAgICAgZm9udC1zaXplOiAxNXB4OworICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7
CisgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICBiYWNrZ3JvdW5k
LWNvbG9yOiAjQkI0NjRCOworICAgICAgICB9CisKKyAgICAgICAgLmNvbnRlbnQgeworICAgICAg
ICAgICAgZ3JpZC1jb2x1bW4tc3RhcnQ6IDI7CisgICAgICAgICAgICBncmlkLWNvbHVtbi1lbmQ6
IDQ7CisgICAgICAgICAgICBncmlkLXJvdy1zdGFydDogMjsKKyAgICAgICAgICAgIGdyaWQtcm93
LWVuZDogMjsKKyAgICAgICAgfQorCisgICAgICAgIGEgeworICAgICAgICAgICAgY29sb3I6ICNG
RkZGRkY7CisgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuc2V0OworICAgICAgICB9Cisg
ICAgICAgIGE6aG92ZXIgeworICAgICAgICAgICAgY29sb3I6ICNGRkZGRkY7CisgICAgICAgIH0K
KyAgICAgICAgYTp2aXNpdGVkIHsKKyAgICAgICAgICAgIGNvbG9yOiAjRkZGRkZGOworICAgICAg
ICB9CisgICAgICAgIGE6Zm9jdXMgeworICAgICAgICAgICAgY29sb3I6ICNGRkZGRkY7CisgICAg
ICAgIH0KKyAgICA8L3N0eWxlPgorCisgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVl
cnkuY29tL3BlcC8wLjQuMi9wZXAubWluLmpzIj48L3NjcmlwdD4KKworICAgIDxzY3JpcHQgc3Jj
PSJiYWJ5bG9uV2ViR3B1Lm1heC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Imh0dHBz
Oi8vcHJldmlldy5iYWJ5bG9uanMuY29tL2xvYWRlcnMvYmFieWxvbmpzLmxvYWRlcnMubWluLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgICAgPGRpdiBjbGFzcz0iY29udGFpbmVy
Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyTG9nbyI+CisgICAgICAgICAgICA8YSBocmVm
PSJodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2V4dGVuc2lvbnMvV2ViR1BVIj4KKyAgICAgICAg
ICAgICAgICA8aW1nIHNyYz0ibG9nby5zdmciPjwvaW1nPgorICAgICAgICAgICAgPC9hPgorICAg
ICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyVGV4dCI+CisgICAgICAgICAg
ICA8YSBocmVmPSJodHRwczovL2RvYy5iYWJ5bG9uanMuY29tL2V4dGVuc2lvbnMvV2ViR1BVIj4K
KyAgICAgICAgICAgICAgICBXZWJHUFUgRXhwZXJpbWVudAorICAgICAgICAgICAgPC9hPgorICAg
ICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyRlBTIiBpZD0iZnBzIj4wPC9k
aXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgorICAgICAgICAgICAgPGNhbnZhcyBp
ZD0icmVuZGVyQ2FudmFzIiB3aWR0aD0iMTAyNCIgaGVpZ2h0PSI3NjgiPjwvY2FudmFzPgorICAg
ICAgICA8L2Rpdj4KKyAgICA8ZGl2PgorCisgICAgPHNjcmlwdCBzcmM9Im9uZVNwaGVyZVdlYkdQ
VUdMU0xTaGFkZXJzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ib25lU3BoZXJlV2Vi
R1BVV1NMU2hhZGVycy5qcyI+PC9zY3JpcHQ+CisKKyAgICA8c2NyaXB0PgorCisgICAgY29uc3Qg
U2hhZGVyS2luZCA9IHsKKyAgICAgICAgdmVydGV4OiAiVmVydGV4IiwKKyAgICAgICAgZnJhZ21l
bnQ6ICJGcmFnbWVudCIsCisgICAgICAgIGNvbXB1dGU6ICJDb21wdXRlIgorICAgIH07CisKKyAg
ICBjbGFzcyBDb21waWxlUmVzdWx0IHsKKyAgICAgICAgY29uc3RydWN0b3IocmVzdWx0KSB7Cisg
ICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIEdl
dEVycm9yTWVzc2FnZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisK
KyAgICAgICAgR2V0QmluYXJ5KCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0Owor
ICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgQ29tcGlsZU9wdGlvbnMgeworICAgICAgICBj
b25zdHJ1Y3RvcigpIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIENvbXBpbGVyIHsK
KyAgICAgICAgY29uc3RydWN0b3IoKSB7CisgICAgICAgIH0KKworICAgICAgICBDb21waWxlR2xz
bFRvU3B2KHNvdXJjZSwga2luZCwgc29tZXRoaW5nLCBlbnRyeVBvaW50TmFtZSwgb3B0aW9ucykg
eworICAgICAgICAgICAgbGV0IHdzbFNvdXJjZTsKKyAgICAgICAgICAgIHN3aXRjaCAoc291cmNl
KSB7CisgICAgICAgICAgICBjYXNlIHZlcnRleFNoYWRlckdMU0wxOgorICAgICAgICAgICAgICAg
IHdzbFNvdXJjZSA9IHZlcnRleFNoYWRlcldTTDE7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIGZyYWdtZW50U2hhZGVyR0xTTDE6CisgICAgICAgICAgICAgICAgd3Ns
U291cmNlID0gZnJhZ21lbnRTaGFkZXJXU0wxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSB2ZXJ0ZXhTaGFkZXJHTFNMMjoKKyAgICAgICAgICAgICAgICB3c2xTb3Vy
Y2UgPSB2ZXJ0ZXhTaGFkZXJXU0wyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBmcmFnbWVudFNoYWRlckdMU0wyOgorICAgICAgICAgICAgICAgIHdzbFNvdXJjZSA9
IGZyYWdtZW50U2hhZGVyV1NMMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHNo
YWRlciEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBuZXcgQ29tcGlsZVJl
c3VsdCh3c2xTb3VyY2UpOworICAgICAgICB9CisgICAgfQorCisgICAgbGV0IFNoYWRlcmMgPSB7
Q29tcGlsZXIsIENvbXBpbGVPcHRpb25zLCBzaGFkZXJfa2luZDogU2hhZGVyS2luZH07CisKKyAg
ICAoYXN5bmMgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghbmF2aWdhdG9yLmdwdSkgeworICAg
ICAgICAgICAgYWxlcnQoIldlYiBHUFUgaXMgbm90IHN1cHBvcnRlZCBvbiB5b3VyIHBsYXRmb3Jt
IHNvIGZhci4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVuZGVyQ2FudmFzIik7CisgICAg
ICAgIGNvbnN0IGRpdkZwcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmcHMiKTsKKworICAg
ICAgICBjb25zdCBlbmdpbmUgPSBuZXcgQkFCWUxPTi5XZWJHUFVFbmdpbmUoY2FudmFzLCB7YW50
aWFsaWFzaW5nOiBmYWxzZX0pOworICAgICAgICBhd2FpdCBlbmdpbmUuaW5pdEFzeW5jKHtzaGFk
ZXJjOiBTaGFkZXJjfSk7CisKKyAgICAgICAgY29uc3Qgc2NlbmUgPSBuZXcgQkFCWUxPTi5TY2Vu
ZShlbmdpbmUpOworICAgICAgICBzY2VuZS5lbnZpcm9ubWVudFRleHR1cmUgPSBuZXcgQkFCWUxP
Ti5DdWJlVGV4dHVyZSgiaHR0cHM6Ly9hc3NldHMuYmFieWxvbmpzLmNvbS9lbnZpcm9ubWVudHMv
ZW52aXJvbm1lbnRTcGVjdWxhci5lbnYiLCBzY2VuZSk7CisKKyAgICAgICAgdmFyIG1hdGVyaWFs
ID0gbmV3IEJBQllMT04uUEJSTWV0YWxsaWNSb3VnaG5lc3NNYXRlcmlhbCgicGJyIiwgc2NlbmUp
OworICAgICAgICBtYXRlcmlhbC5yb3VnaG5lc3MgPSAwOworICAgICAgICBtYXRlcmlhbC5tZXRh
bGxpYyA9IDA7CisKKyAgICAgICAgdmFyIGljbyA9IEJBQllMT04uTWVzaC5DcmVhdGVJY29TcGhl
cmUoImljbyIsIHsKKyAgICAgICAgICAgIGZsYXQ6IHRydWUsCisgICAgICAgICAgICBzdWJkaXZp
c2lvbnM6IDMKKyAgICAgICAgfSwgc2NlbmUpOworICAgICAgICBpY28ubWF0ZXJpYWwgPSBtYXRl
cmlhbDsKKworICAgICAgICBzY2VuZS5jcmVhdGVEZWZhdWx0Q2FtZXJhKHRydWUsIHRydWUsIHRy
dWUpOworICAgICAgICBzY2VuZS5jcmVhdGVEZWZhdWx0U2t5Ym94KHNjZW5lLmVudmlyb25tZW50
VGV4dHVyZSwgdHJ1ZSwgdW5kZWZpbmVkLCAwLjMpOworCisgICAgICAgIGVuZ2luZS5ydW5SZW5k
ZXJMb29wKCgpID0+IHsKKyAgICAgICAgICAgIHNjZW5lLnJlbmRlcigpOworICAgICAgICAgICAg
ZGl2RnBzLmlubmVySFRNTCA9IGVuZ2luZS5nZXRGcHMoKS50b0ZpeGVkKCkgKyAiIGZwcyI7Cisg
ICAgICAgIH0pOworICAgIH0pKCk7CisgICAgPC9zY3JpcHQ+Cis8L2JvZHk+CisKKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vb25l
U3BoZXJlV2ViR1BVR0xTTFNoYWRlcnMuanMgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dl
YmdwdS9iYWJ5bG9uL29uZVNwaGVyZVdlYkdQVUdMU0xTaGFkZXJzLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5
ZWRlZTRmMDkxZmM3NThhNzY4NTAwYTEyNWFkZTJhMWJkZGJlNzQKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9uL29uZVNwaGVyZVdlYkdQ
VUdMU0xTaGFkZXJzLmpzCkBAIC0wLDAgKzEsNCBAQAorY29uc3QgdmVydGV4U2hhZGVyR0xTTDEg
PSBbMzUsIDExOCwgMTAxLCAxMTQsIDExNSwgMTA1LCAxMTEsIDExMCwgMzIsIDUyLCA1MywgNDgs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgwLCA2NiwgODIsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3NiwgNjYsIDY5LCA2
OCwgNzksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzcsIDY2LCA3MywgNjksIDc4LCA4
NCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc5LCA4MCwgNjUsIDY3LCA3MywgODQsIDg5LCA2
OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc2LCA4MCwgNzIsIDY1LCA4NCwgNjksIDgzLCA4
NCwgODYsIDY1LCA3NiwgODUsIDY5LCAzMiwgNDgsIDQ2LCA1MiwgMTAsIDM1LCAxMDAsIDEwMSwg
MTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDgwLCA2OSwgNjcsIDg1LCA3NiwgNjUsIDgyLCA3
OSwgODYsIDY5LCA4MiwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjUsIDY4LCA3MywgNjUsIDc4LCA2NywgNjksIDc5LCA4
NiwgNjksIDgyLCA2NSwgNzYsIDgwLCA3MiwgNjUsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDY5LCA3NywgNzMsIDgzLCA4MywgNzMsIDg2LCA2OSwgNjgsIDczLCA4
MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgODYsIDczLCA4
NCwgODksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NiwgNzksIDY4LCA2NiwgNjUsIDgzLCA2
OSwgNjgsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDcwLCA4NSwgODIsIDY1LCA2NywgNjksIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA3MywgNjcsIDgyLCA3
OSwgODMsIDg1LCA4MiwgNzAsIDY1LCA2NywgNjksIDc3LCA2NSwgODAsIDY4LCA3MywgODIsIDY5
LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA3NywgNjksIDg0LCA2NSwgNzYsIDc2LCA3MywgNjcsIDg3LCA3OSwgODIsIDc1
LCA3MCwgNzYsIDc5LCA4NywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgNjksIDc4LCA4NiwgNzMsIDgyLCA3OSwgNzgsIDc3LCA2OSwgNzgsIDg0LCA2NiwgODIsIDY4
LCA3MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDc5LCA4
MiwgNzcsIDY1LCA3NiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
NjYsIDg1LCA3NywgODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OCwgNzksIDgyLCA3Nywg
NjUsIDc2LCA4OCwgODksIDgzLCA2NywgNjUsIDc2LCA2OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNzYsIDczLCA3MSwgNzIsIDg0LCA3NywgNjUsIDgwLCA2OCwg
NzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA3OSwg
NzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAs
IDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA3NywgNjUsIDgwLCA5NSwgNTEsIDY4LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjks
IDY3LCA4NCwgNzMsIDc5LCA3OCwgNzcsIDY1LCA4MCwgOTUsIDY3LCA4NSwgNjYsIDczLCA2Nywg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODUsIDgzLCA2OSwgODMs
IDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCA3NiwgNzAsIDgyLCA3OSwgNzcsIDgyLCA2OSwg
NzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA3NywgNjUsIDgwLCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2Nywg
NjUsIDc2LCA5NSwgNzIsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDY3LCA4MywgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODUsIDgzLCA2OSwgODMsIDgwLCA3Miwg
NjksIDgyLCA3MywgNjcsIDY1LCA3NiwgNzMsIDc4LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4LCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNzEsIDY2LCA2OCwg
ODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2NSwgNjgsIDczLCA2NSwgNzgsIDY3LCA2OSwg
NzksIDY3LCA2NywgNzYsIDg1LCA4MywgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDc5LCA2Nywg
NjcsIDc2LCA4NSwgODMsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDc4LCA4NSwgNzcsIDk1LCA2NiwgNzksIDc4LCA2OSwgOTUsIDczLCA3OCwg
NzAsIDc2LCA4NSwgNjksIDc4LCA2NywgNjksIDgyLCA4MywgMzIsIDQ4LCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NiwgMTExLCAxMTAsIDEwMSwgMTE1LCA4MCwg
MTAxLCAxMTQsIDc3LCAxMDEsIDExNSwgMTA0LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA4NSwgNzcsIDk1LCA3NywgNzksIDgyLCA4MCwgNzIs
IDk1LCA3MywgNzgsIDcwLCA3NiwgODUsIDY5LCA3OCwgNjcsIDY5LCA4MiwgODMsIDMyLCA0OCwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODYsIDczLCA3MSwgNzgs
IDY5LCA4NCwgODQsIDY5LCA2NiwgNzYsIDY5LCA3OCwgNjgsIDc3LCA3OSwgNjgsIDY5LCA3Nywg
ODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgODksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDgzLCA2NSwgNzcsIDgwLCA3NiwgNjksIDgyLCA1MSwgNjgsIDcxLCA4Miwg
NjksIDY5LCA3OCwgNjgsIDY5LCA4MCwgODQsIDcyLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCA4MywgNjUsIDc3LCA4MCwgNzYsIDY5LCA4MiwgNTEsIDY4LCA2Niwg
NzEsIDgyLCA3NywgNjUsIDgwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA4NSwgODMsIDY5LCA4MCwgNzIsIDg5LCA4MywgNzMsIDY3LCA2NSwgNzYsIDc2LCA3Mywg
NzEsIDcyLCA4NCwgNzAsIDY1LCA3NiwgNzYsIDc5LCA3MCwgNzAsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2NSwg
ODQsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4
NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA2NiwgODUsIDc3LCA4
MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2
NSwgODQsIDk1LCA4NCwgNzMsIDc4LCA4NCwgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5
LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc4LCA3MywgODMsIDc5LCA4NCwgODIsIDc5
LCA4MCwgNzMsIDY3LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIs
IDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCA2NiwgODIsIDY4LCA3MCwgOTUsIDg2LCA5NSwgNzIsIDY5LCA3MywgNzEs
IDcyLCA4NCwgOTUsIDY3LCA3OSwgODIsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNjksIDY4LCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgODMsIDk1LCA2NiwgODIs
IDY4LCA3MCwgOTUsIDY5LCA3OCwgNjksIDgyLCA3MSwgODksIDk1LCA2NywgNzksIDc4LCA4Mywg
NjksIDgyLCA4NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCA4MywgNzIsIDY5LCA2OSwgNzgsIDk1LCA4NCwgNjksIDg4LCA4NCwg
ODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA4MywgOTUsIDg0LCA3Miwg
NzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDY1LCA3OCwgNjgsIDc3LCA2NSwgODMsIDc1LCA5
NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1
LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2
OCwgNjksIDY2LCA4NSwgNzEsIDc3LCA3OSwgNjgsIDY5LCAzMiwgNDgsIDEwLCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNzIsIDY1LCA2OCwgNjksIDgyLCA5
NSwgNzgsIDY1LCA3NywgNjksIDMyLCAxMTgsIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA1OCwg
MTEyLCA5OCwgMTE0LCAxMCwgMTEyLCAxMTQsIDEwMSwgOTksIDEwNSwgMTE1LCAxMDUsIDExMSwg
MTEwLCAzMiwgMTA0LCAxMDUsIDEwMywgMTA0LCAxMTIsIDMyLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEx
NiwgMTAwLCA0OSwgNTIsIDQ4LCA0NCwgOTksIDExMSwgMTA4LCAxMTcsIDEwOSwgMTEwLCA5NSwg
MTA5LCA5NywgMTA2LCAxMTEsIDExNCwgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwg
MTE0LCAxMDksIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEx
NSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ4LCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAwLCAx
MDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAxMDIs
IDExMSwgMTE0LCAxMDksIDMyLCA4MywgOTksIDEwMSwgMTEwLCAxMDEsIDEzLCAxMCwgMTIzLCAx
MywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDgwLCAxMTQs
IDExMSwgMTA2LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDEwOSwg
OTcsIDExNiwgNTIsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDU5LCAxMywgMTAsIDEyNSwgNTks
IDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwg
MzIsIDYxLCAzMiwgNDksIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMs
IDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEw
OSwgMzIsIDc3LCA5NywgMTE2LCAxMDEsIDExNCwgMTA1LCA5NywgMTA4LCAxMywgMTAsIDEyMywg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAs
IDExMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MiwgMzIsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzMsIDExMCwgMTAy
LCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNzksIDEx
MiwgOTcsIDk5LCAxMDUsIDExNiwgMTIxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2OSwgMTA5LCAxMDUsIDExNSwgMTE1LCAx
MDUsIDExOCwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUwLCAzMiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDksIDk3LCAxMTIs
IDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDEx
NiwgMTIxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUwLCAzMiwgMTE4LCA3NywgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5
NywgOTksIDEwMSwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNzMsIDExMCwgMTAy
LCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgODIsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzMsIDExMCwgMTAyLCAx
MTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODAsIDExMSwgMTE1LCAxMDUs
IDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
OCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDEw
NSwgMTIyLCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY2LCAx
MTcsIDEwOSwgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3
LCAxMTYsIDUyLCAzMiwgOTcsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDc3LCA5NywgMTE2LCAx
MTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTcsIDEwOSwg
OTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAx
MywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTEsIDExMiwgOTcsIDk5LCAxMDUsIDExNiwg
MTIxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2
LCA1MiwgMzIsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA3NywgOTcs
IDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEw
OCwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDksIDk3LCAxMTIsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEwOSwgMTA1
LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgODMsIDk3LCAx
MDksIDExMiwgMTA4LCAxMDEsIDExNCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAx
MywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5OCwgMTE3LCAxMDksIDExMiwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgs
IDg0LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA4
MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAz
MiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5
NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2Nywg
MTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4
LCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExNiwg
MTIxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgMTA1LCA5OSwgMTE0LCAxMTEs
IDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTIsIDExMSwgMTA1LCAx
MTAsIDExNiwgODMsIDEwNSwgMTIyLCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIs
IDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUs
IDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE4LCA2OSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA2
NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwg
MTE4LCA2OSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY1LCAxMDksIDk4LCAxMDUs
IDEwMSwgMTEwLCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY4LCAxMDEsIDk4LCAxMTcsIDEwMywgNzcsIDExMSwgMTAw
LCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEw
MSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5Nywg
MTE0LCA2NywgMTExLCA5NywgMTE2LCA4MiwgMTAxLCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcs
IDExNiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1
MiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgs
IDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgNjYsIDExNywgMTA5LCAx
MTIsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAs
IDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODQsIDk3
LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDgwLCA5Nywg
MTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5OSwg
MTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDY2LCAxMTcsIDEwOSwgMTEyLCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1Miwg
MzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4NCwgMTA1
LCAxMTAsIDExNiwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcs
IDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYs
IDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgs
IDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODQsIDEwNSwgMTEwLCAx
MTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIs
IDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0LCAxMDUsIDEx
MCwgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgNjUsIDExMCwgMTA1LCAxMTUsIDExMSwgMTE2LCAxMTQsIDExMSwg
MTEyLCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY1LCAxMTAs
IDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEsIDExMiwgMTIxLCA3MywgMTEwLCAxMDIsIDEx
MSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTcsIDExMCwgMTA1LCAx
MTUsIDExMSwgMTE2LCAxMTQsIDExMSwgMTEyLCAxMjEsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA4MywgMTA0LCAxMDEs
IDEwMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUwLCAzMiwgMTE4LCA4MywgMTA0LCAxMDEsIDEwMSwgMTEwLCA3MywgMTEwLCAxMDIsIDEx
MSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE1LCAxMDQsIDEwMSwg
MTAxLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5Nywg
OTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MiwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUy
LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcs
IDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMy
LCAxMTgsIDg0LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEsIDExNSwgMTE1LCA3MywgMTEw
LCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE2LCAx
MDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEsIDExNSwgMTE1LCA3NywgOTcsIDExNiwgMTE0LCAx
MDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgODQsIDEwNCwg
MTA1LCA5OSwgMTA3LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDgwLCA5NywgMTE0LCA5NywgMTA5LCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2OCwgMTA1LCAxMDIsIDEwMiwg
MTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwg
MTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA4NCwgMTA1LCAxMTAs
IDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgODMsIDExNywgOTgsIDgzLCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwg
NzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExNiwgMTIxLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5
LCA5NywgMTA4LCA3NiwgNDgsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDksIDk1
LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0
LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA0OCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwg
OTcsIDEwOCwgNzYsIDQ5LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
OCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA5NSwg
NTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwg
MTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgOTUsIDQ5LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5
LCA5NywgMTA4LCA3NiwgNTAsIDQ4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDQ5
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEw
MSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDUwLCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5Nywg
MTA4LCA4OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwg
MTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODksIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAx
MDgsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAx
MDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OCwgODgsIDk1LCA5MCwgOTAsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQs
IDEwNSwgOTksIDk3LCAxMDgsIDg5LCA4OSwgOTUsIDkwLCA5MCwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcs
IDEwOCwgOTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4Mywg
MTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OCwgODksIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwg
OTksIDk3LCAxMDgsIDg5LCA5MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
OCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgOTAsIDg4LCA1OSwg
MTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAs
IDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ5LCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAw
LCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OSwgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAx
MDIsIDExMSwgMTE0LCAxMDksIDMyLCA3NywgMTAxLCAxMTUsIDEwNCwgMTMsIDEwLCAxMjMsIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA1OSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4LCAxMDUsIDExNSwgMTA1LCA5
OCwgMTA1LCAxMDgsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywgMTAsIDEyNSwgNTksIDEzLCAxMCwg
MzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzks
IDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUsIDY2LCA2OSwgNzEsIDczLCA3OCwg
MTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDEwNSwgMTEwLCAz
MiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMiwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMDgs
IDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ5LCA0MSwgMzIs
IDEwNSwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwgMTExLCAxMTQsIDEwOSwg
OTcsIDEwOCwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCA4MCwgNzMsIDYxLCA1MSwgNDYsIDQ5LCA1MiwgNDksIDUzLCA1
NywgNTAsIDU0LCA1MywgNTEsIDUzLCA1NiwgNTcsIDU1LCA1NywgNTEsIDUwLCA1MSwgNTYsIDUy
LCA1NCwgNTAsIDU0LCA1MiwgNTEsIDUxLCA1NiwgNTEsIDUwLCA1NSwgNTcsIDUzLCA1OSwgMTMs
IDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEw
MSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA2
MSwgNTAsIDQ2LCA1MCwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3MSwgOTcsIDEwOSwgMTA5LCA5NywgNjksIDExMCwg
OTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQsIDY1LCAxMTIsIDExMiwg
MTE0LCAxMTEsIDEyMCwgNjEsIDQ5LCA0NiwgNDgsIDQ3LCA3NiwgMTA1LCAxMTAsIDEwMSwgOTcs
IDExNCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQs
IDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAx
MTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3NiwgMTE3LCAxMDksIDEwNSwgMTEw
LCA5NywgMTEwLCA5OSwgMTAxLCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgNjUsIDExMiwg
MTEyLCAxMTQsIDExMSwgMTIwLCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ4LCA0NiwgNTAs
IDQ5LCA1MCwgNTQsIDQ0LCA0OCwgNDYsIDU1LCA0OSwgNTMsIDUwLCA0NCwgNDgsIDQ2LCA0OCwg
NTUsIDUwLCA1MCwgNDEsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNjksIDExMiwgMTE1LCAxMDUsIDEwOCwgMTExLCAx
MTAsIDYxLCA0OCwgNDYsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ5LCA1OSwgMTMsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwgOTcsIDExNiwgMTE3LCAx
MTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEyMCwgNDEsIDMyLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIs
IDQwLCAxMjAsIDQ0LCA0OCwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwgNDEsIDEzLCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA5NywgOTgsIDExNSwgNjksIDExMiwg
MTE1LCA0MCwgMTIwLCA0MSwgMzIsIDk3LCA5OCwgMTE1LCA0MCwgMTIwLCA0MSwgNDMsIDY5LCAx
MTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMjAsIDQx
LCAzMiwgMTA5LCA5NywgMTIwLCA0MCwgMTIwLCA0NCwgNjksIDExMiwgMTE1LCAxMDUsIDEwOCwg
MTExLCAxMTAsIDQxLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUsIDQw
LCAxMjAsIDQxLCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTIwLCA0NCwgNjksIDEx
MiwgMTE1LCAxMDUsIDEwOCwgMTExLCAxMTAsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgMTMsIDEwLCAx
MDksIDk3LCAxMTYsIDUxLCAzMiwgMTE2LCAxMTQsIDk3LCAxMTAsIDExNSwgMTEyLCAxMTEsIDEx
NSwgMTAxLCA3NywgOTcsIDExNiwgNTEsIDQwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1LCAx
MTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTA1LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0
LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDEwNSwgNDksIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0
OSwgOTMsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDUwLCA2MSwgMTA1
LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEw
LCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTExLCAxMTcsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwg
MTA1LCAxMjAsIDYxLCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMCwgNDQsIDEwNSwgNDksIDQ2LCAxMjAsIDQ0LCAxMDUs
IDUwLCA0NiwgMTIwLCA0MSwgNDQsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDEwNSwg
NDgsIDQ2LCAxMjEsIDQ0LCAxMDUsIDQ5LCA0NiwgMTIxLCA0NCwgMTA1LCA1MCwgNDYsIDEyMSwg
NDEsIDQ0LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4LCA0NiwgMTIyLCA0
NCwgMTA1LCA0OSwgNDYsIDEyMiwgNDQsIDEwNSwgNTAsIDQ2LCAxMjIsIDQxLCAxMywgMTAsIDQx
LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTExLCAxMTcs
IDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEw
LCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1LCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNSwgMTAx
LCA3NywgOTcsIDExNiwgNTEsIDQwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1LCAxMTAsIDc3
LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgOTcsIDQ4LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwg
MTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA0OCwgNDksIDYx
LCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwgOTMsIDkxLCA0
OSwgOTMsIDQ0LCA5NywgNDgsIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA5MSwgNDgsIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgOTcsIDQ5LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0
LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA0OSwgNDksIDYxLCAx
MDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMsIDkxLCA0OSwg
OTMsIDQ0LCA5NywgNDksIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA5MSwgNDksIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgOTcsIDUwLCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAx
MDUsIDEyMCwgOTEsIDUwLCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA1MCwgNDksIDYxLCAxMDUs
IDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkxLCA0OSwgOTMs
IDQ0LCA5NywgNTAsIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIw
LCA5MSwgNTAsIDkzLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgOTgsIDQ4LCA0OSwgNjEsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDksIDQ5LCA0NSwg
OTcsIDQ5LCA1MCwgNDIsIDk3LCA1MCwgNDksIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA5OCwgNDksIDQ5LCA2MSwgNDUsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDksIDQ4
LCA0MywgOTcsIDQ5LCA1MCwgNDIsIDk3LCA1MCwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCA5OCwgNTAsIDQ5LCA2MSwgOTcsIDUwLCA0OSwgNDIsIDk3LCA0OSwg
NDgsIDQ1LCA5NywgNDksIDQ5LCA0MiwgOTcsIDUwLCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTAxLCAxMTYsIDYxLCA5NywgNDgsIDQ4LCA0MiwgOTgs
IDQ4LCA0OSwgNDMsIDk3LCA0OCwgNDksIDQyLCA5OCwgNDksIDQ5LCA0MywgOTcsIDQ4LCA1MCwg
NDIsIDk4LCA1MCwgNDksIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAs
IDMyLCAxMDksIDk3LCAxMTYsIDUxLCA0MCwgOTgsIDQ4LCA0OSwgNDQsIDQwLCA0NSwgOTcsIDUw
LCA1MCwgNDIsIDk3LCA0OCwgNDksIDQzLCA5NywgNDgsIDUwLCA0MiwgOTcsIDUwLCA0OSwgNDEs
IDQ0LCA0MCwgOTcsIDQ5LCA1MCwgNDIsIDk3LCA0OCwgNDksIDQ1LCA5NywgNDgsIDUwLCA0Miwg
OTcsIDQ5LCA0OSwgNDEsIDQ0LCAxMywgMTAsIDk4LCA0OSwgNDksIDQ0LCA0MCwgOTcsIDUwLCA1
MCwgNDIsIDk3LCA0OCwgNDgsIDQ1LCA5NywgNDgsIDUwLCA0MiwgOTcsIDUwLCA0OCwgNDEsIDQ0
LCA0MCwgNDUsIDk3LCA0OSwgNTAsIDQyLCA5NywgNDgsIDQ4LCA0MywgOTcsIDQ4LCA1MCwgNDIs
IDk3LCA0OSwgNDgsIDQxLCA0NCwgMTMsIDEwLCA5OCwgNTAsIDQ5LCA0NCwgNDAsIDQ1LCA5Nywg
NTAsIDQ5LCA0MiwgOTcsIDQ4LCA0OCwgNDMsIDk3LCA0OCwgNDksIDQyLCA5NywgNTAsIDQ4LCA0
MSwgNDQsIDQwLCA5NywgNDksIDQ5LCA0MiwgOTcsIDQ4LCA0OCwgNDUsIDk3LCA0OCwgNDksIDQy
LCA5NywgNDksIDQ4LCA0MSwgNDEsIDQ3LCAxMDAsIDEwMSwgMTE2LCA1OSwgMTMsIDEwLCAxMjUs
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNiwgMTExLCA3NiwgMTA1LCAxMTAsIDEw
MSwgOTcsIDExNCwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwg
MTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTIsIDExMSwgMTE5LCA0MCwgOTksIDExMSwg
MTA4LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA3NiwgMTA1LCAxMTAsIDEw
MSwgOTcsIDExNCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAx
LCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAx
MjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNiwgMTExLCA3MSwgOTcsIDEwOSwg
MTA5LCA5NywgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
OTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAx
LCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTIsIDExMSwgMTE5LCA0MCwgOTksIDExMSwgMTA4
LCAxMTEsIDExNCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA3MSwgOTcsIDEwOSwgMTA5LCA5
NywgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQsIDY1
LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgMTEzLCAxMTcsIDk3LCAxMTQsIDEw
MSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAx
LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwg
MzIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA1
OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExMiwg
MTExLCAxMTksIDUzLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOCwgOTcsIDEw
OCwgMTE3LCAxMDEsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMTUsIDExMywgNjEsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQyLCAxMTgsIDk3LCAx
MDgsIDExNywgMTAxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAz
MiwgMTE1LCAxMTMsIDQyLCAxMTUsIDExMywgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDU5
LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAzLCAx
MDEsIDExNiwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEwMSwgNDAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMTMsIDEwLCAx
MjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk5LCAxMDgsIDk3
LCAxMDksIDExMiwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0
LCA0NCwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEwMSwgNjksIDExMCwg
OTksIDExMSwgMTAwLCAxMDEsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQ0LCA0
OCwgNDYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDEwMywgMTAxLCAxMTYsIDgyLCA5NywgMTEwLCAxMDAsIDQwLCAx
MTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0MSwgMzIsIDEyMywgMTMs
IDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAyLCAxMTQsIDk3LCA5OSwg
MTE2LCA0MCwgMTE1LCAxMDUsIDExMCwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCAxMTUsIDEwMSwg
MTAxLCAxMDAsIDQ2LCAxMjAsIDEyMSwgMzIsIDQ0LCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgNDks
IDUwLCA0NiwgNTcsIDU2LCA1NywgNTYsIDQ0LCA1NSwgNTYsIDQ2LCA1MCwgNTEsIDUxLCA0MSwg
NDEsIDQxLCA0MiwgNTIsIDUxLCA1NSwgNTMsIDU2LCA0NiwgNTMsIDUyLCA1MywgNTEsIDQxLCA1
OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwg
MTA1LCAxMTYsIDEwNCwgMTAxLCAxMTQsIDQwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1LCAx
MDEsIDEwMSwgMTAwLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOCwgOTcsIDEx
NCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEwLCAxMTYsIDQx
LCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDk3LCAx
MTAsIDEwMCwgNjEsIDEwMywgMTAxLCAxMTYsIDgyLCA5NywgMTEwLCAxMDAsIDQwLCAxMTUsIDEw
MSwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTAwLCAxMDUsIDExNiwgMTA0LCAxMDEsIDExNCwgNjEsIDEwOSwgMTA1LCAxMjAsIDQwLCA0NSwg
MTE4LCA5NywgMTE0LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDY1LCAxMDksIDExMSwgMTE3LCAx
MTAsIDExNiwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQsIDExOCwgOTcsIDExNCwgMTA1LCA5
NywgMTEwLCA5OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEwLCAxMTYsIDQ3LCA1MCwgNTMs
IDUzLCA0NiwgNDgsIDQ0LCAxMTQsIDk3LCAxMTAsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDExNCwg
MTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDAsIDEwNSwgMTE2LCAxMDQsIDEwMSwgMTE0
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwgNzcsIDk3LCAxMjAs
IDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNjEsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExNiwgMTExLCA4MiwgNzEsIDY2LCA2OCwgNDAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMzIsIDEyMywg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA5LCA5NywgMTIwLCA4MiwgNzEs
IDY2LCA2MSwgMTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMDksIDk3LCAxMjAsIDQw
LCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCA0NCwgMTA5LCA5NywgMTIwLCA0MCwg
OTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDEwMywgNDQsIDk5LCAxMTEsIDEwOCwgMTExLCAx
MTQsIDQ2LCA5OCwgNDEsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDY4LCA2MSwgMTA5LCA5NywgMTIwLCA0MCwgMTE0LCAxMDMsIDk4LCAxMDAsIDc3LCA5
NywgMTIwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDQ3LCAxMDksIDk3LCAxMjAsIDgyLCA3MSwg
NjYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCA2OCwgNjEsIDk5LCAxMDgsIDk3LCAxMDks
IDExMiwgNDAsIDEwMiwgMTA4LCAxMTEsIDExMSwgMTE0LCA0MCwgNjgsIDQxLCA0NywgNTAsIDUz
LCA1MywgNDYsIDQ4LCA0NCwgNDgsIDQ2LCA0NCwgNDksIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAzLCA5OCwgNjEsIDk5LCAxMTEsIDEwOCwgMTExLCAx
MTQsIDQ2LCAxMTQsIDEwMywgOTgsIDQyLCA2OCwgNTksIDEzLCAxMCwgMTE0LCAxMDMsIDk4LCA2
MSwgMTE2LCAxMTEsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA4MywgMTEyLCA5NywgOTksIDEwMSwg
NDAsIDExNCwgMTAzLCA5OCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0
LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTE0LCAxMDMsIDk4LCA0NCwgNjgsIDQx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTE0
LCAxMTEsIDEwOSwgODIsIDcxLCA2NiwgNjgsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE0
LCAxMDMsIDk4LCAxMDAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAzLCA5OCwgMTAwLCA0
NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTE2LCAxMTEsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0
LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgMTE0LCAx
MDMsIDk4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIs
IDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgMTE0LCAxMDMsIDk4LCA0NywgMTE0LCAxMDMsIDk4LCAx
MDAsIDQ2LCA5NywgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAx
MTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYx
LCAzMiwgNDgsIDQxLCAzMiwgMTExLCAxMTcsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA1OSwgMTMs
IDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ5LCA0MSwgMzIsIDExMSwgMTE3LCAxMTYs
IDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEw
OCwgODcsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEwOCwg
MTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwgNTAsIDQxLCAzMiwg
MTExLCAxMTcsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY5LCAxMTAsIDEx
OCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQsIDExNCwg
OTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY5LCAxMTAsIDExOCwg
MTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQsIDExNCwgOTcs
IDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
MCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1
LCA5OSwgOTcsIDEwOCwgNzYsIDQ4LCA0OCwgMTMsIDEwLCA0MywgMTE4LCA4MywgMTEyLCAxMDQs
IDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDksIDk1LCA0OSwgNDIsIDQwLCAxMTAs
IDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjEsIDQxLCAxMywgMTAsIDQzLCAxMTgsIDgz
LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgNDgsIDQyLCA0
MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIyLCA0MSwgMTMsIDEwLCA0Mywg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDksIDQ5
LCA0MiwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMCwgNDEsIDEzLCAx
MCwgNDMsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYs
IDUwLCA5NSwgNTAsIDQyLCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIx
LCA0MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIwLCA0MSwgMTMsIDEwLCA0
MywgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAs
IDk1LCA0OSwgNDIsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjEsIDQy
LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjIsIDQxLCAxMywgMTAsIDQzLCAx
MTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgNDgs
IDQyLCA0MCwgNDAsIDUxLCA0NiwgNDgsIDQyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDQ2LCAxMjIsIDQyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjIsIDQxLCA0
NSwgNDksIDQ2LCA0OCwgNDEsIDEzLCAxMCwgNDMsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDEx
NCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0OSwgNDIsIDQwLCAxMTAsIDExMSwgMTE0LCAx
MDksIDk3LCAxMDgsIDQ2LCAxMjIsIDQyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2
LCAxMjAsIDQxLCAxMywgMTAsIDQzLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwg
OTksIDk3LCAxMDgsIDc2LCA1MCwgNTAsIDQyLCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5Nywg
MTA4LCA0NiwgMTIwLCA0MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIwLCA0
NSwgNDAsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMSwgNDIsIDExMCwgMTEx
LCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4
NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUsIDY4LCA2OSwgNzAsIDcz
LCA3OCwgNzMsIDg0LCA3MywgNzksIDc4LCA4MywgMTMsIDEwLCAxMTgsIDExMSwgMTA1LCAxMDAs
IDMyLCAxMDksIDk3LCAxMDUsIDExMCwgNDAsIDExOCwgMTExLCAxMDUsIDEwMCwgNDEsIDMyLCAx
MjMsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUs
IDgzLCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUsIDc3LCA2NSwg
NzMsIDc4LCA5NSwgNjYsIDY5LCA3MSwgNzMsIDc4LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODUsIDExMiwgMTAw
LCA5NywgMTE2LCAxMDEsIDEwMCwgNjEsIDExMiwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwg
MTA5LCA5NywgMTA4LCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAwLCA2MSwgMTEwLCAx
MTEsIDExNCwgMTA5LCA5NywgMTA4LCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA4NiwgNjksIDgyLCA4
NCwgNjksIDg4LCA5NSwgODUsIDgwLCA2OCwgNjUsIDg0LCA2OSwgOTUsIDgwLCA3OSwgODMsIDcz
LCA4NCwgNzMsIDc5LCA3OCwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEw
MSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4
LCA5NSwgODUsIDgwLCA2OCwgNjUsIDg0LCA2OSwgOTUsIDc4LCA3OSwgODIsIDc3LCA2NSwgNzYs
IDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDg3
LCAxMTEsIDExNCwgMTA4LCAxMDAsIDYxLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNTksIDEz
LCAxMCwgMTAzLCAxMDgsIDk1LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA2MSwgMTE4LCAxMDUsIDEwMSwgMTE5LCA4MCwgMTE0LCAxMTEsIDEwNiwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA0MiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODcsIDExMSwgMTE0
LCAxMDgsIDEwMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTIsIDExMSwgMTE1LCAxMDUs
IDExNiwgMTA1LCAxMTEsIDExMCwgODUsIDExMiwgMTAwLCA5NywgMTE2LCAxMDEsIDEwMCwgNDQs
IDQ5LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAx
MTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNjEsIDEwMiwgMTA1LCAxMTAsIDk3LCAx
MDgsIDg3LCAxMTEsIDExNCwgMTA4LCAxMDAsIDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTEy
LCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg1LCAxMTIsIDEwMCwgOTcsIDEx
NiwgMTAxLCAxMDAsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTE4LCA4MCwgMTEx
LCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNjEsIDExOCwgMTAxLCA5OSwgNTEs
IDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0MSwgNTksIDEzLCAx
MCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcs
IDExMSwgMTE0LCAxMDgsIDEwMCwgNjEsIDEwOSwgOTcsIDExNiwgNTEsIDQwLCAxMDIsIDEwNSwg
MTEwLCA5NywgMTA4LCA4NywgMTExLCAxMTQsIDEwOCwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTE4
LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDks
IDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDg3LCAxMTEsIDExNCwgMTA4LCAxMDAsIDQyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDg2LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwg
NDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTgsIDc4
LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNDQsIDQ4LCA0MSwgNDEsIDQ2LCAxMjAsIDEy
MSwgMTIyLCA1OSwgMTMsIDEwLCAxMTgsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEw
LCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEw
LCA5OSwgMTAxLCA2MSwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY5LCAxMTAs
IDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQsIDEx
NCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg2LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0
LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNywgMTE4LCA4NSwgMTEy
LCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAwLCA2MSwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDQ4LCA0
NiwgNDQsIDQ4LCA0NiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTcs
IDExOCwgNTAsIDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0
MSwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2Nywg
ODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgOTUsIDc3LCA2
NSwgNzMsIDc4LCA5NSwgNjksIDc4LCA2OCwgMTMsIDEwLCAxMDMsIDEwOCwgOTUsIDgwLCAxMTEs
IDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjEsIDMyLCA0MiwgNjEsIDMyLCA0
NSwgNDksIDQ2LCA1OSwgMzIsIDEyNV0ubWFwKGMgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjKSku
am9pbigiIik7Citjb25zdCBmcmFnbWVudFNoYWRlckdMU0wxID0gWzM1LCAxMTgsIDEwMSwgMTE0
LCAxMTUsIDEwNSwgMTExLCAxMTAsIDMyLCA1MiwgNTMsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MCwgNjYsIDgyLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzYsIDY2LCA2OSwgNjgsIDc5LCA2OCwgNzMsIDgyLCA2
OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDEx
MCwgMTAxLCAzMiwgNjUsIDc3LCA2NiwgNzMsIDY5LCA3OCwgODQsIDY4LCA3MywgODIsIDY5LCA2
NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA3OSwgODAsIDY1LCA2NywgNzMsIDg0LCA4OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4
NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDY1LCA3NiwgODAsIDcyLCA2NSwgODQsIDY5LCA4MywgODQsIDg2LCA2NSwgNzYsIDg1LCA2
OSwgMzIsIDQ4LCA0NiwgNTIsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDgzLCA4MCwgNjksIDY3LCA4NSwgNzYsIDY1LCA4MiwgNzksIDg2LCA2OSwgODIsIDY1LCA3
NiwgODAsIDcyLCA2NSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
ODIsIDY1LCA2OCwgNzMsIDY1LCA3OCwgNjcsIDY5LCA3OSwgODYsIDY5LCA4MiwgNjUsIDc2LCA4
MCwgNzIsIDY1LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2OSwg
NzcsIDczLCA4MywgODMsIDczLCA4NiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4
NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4Miwg
NjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDg2LCA3MywgODQsIDg5LCA2OCwgNzMsIDgyLCA2
OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDEx
MCwgMTAxLCAzMiwgNzYsIDc5LCA2OCwgNjYsIDY1LCA4MywgNjksIDY4LCA3NywgNzMsIDY3LCA4
MiwgNzksIDgzLCA3MCwgODUsIDgyLCA2NSwgNjcsIDY5LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgNzMsIDY3LCA4MiwgNzksIDgzLCA4NSwgODIsIDcwLCA2
NSwgNjcsIDY5LCA3NywgNjUsIDgwLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMy
LCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzcsIDY5LCA4
NCwgNjUsIDc2LCA3NiwgNzMsIDY3LCA4NywgNzksIDgyLCA3NSwgNzAsIDc2LCA3OSwgODcsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY5LCA3OCwgODYsIDczLCA4
MiwgNzksIDc4LCA3NywgNjksIDc4LCA4NCwgNjYsIDgyLCA2OCwgNzAsIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA3OSwgODIsIDc3LCA2NSwgNzYsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY2LCA4NSwgNzcsIDgwLCA2OCwg
NzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDc5LCA4MiwgNzcsIDY1LCA3NiwgODgsIDg5LCA4Mywg
NjcsIDY1LCA3NiwgNjksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDc2LCA3MywgNzEsIDcyLCA4NCwgNzcsIDY1LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwg
ODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMs
IDc5LCA3OCwgNzcsIDY1LCA4MCwgOTUsIDUxLCA2OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA3OSwgNzgs
IDc3LCA2NSwgODAsIDk1LCA2NywgODUsIDY2LCA3MywgNjcsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDg1LCA4MywgNjksIDgzLCA4MCwgNzIsIDY5LCA4MiwgNzMs
IDY3LCA2NSwgNzYsIDcwLCA4MiwgNzksIDc3LCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwg
NzMsIDc5LCA3OCwgNzcsIDY1LCA4MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgODMsIDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCA3NiwgOTUsIDcyLCA2NSwg
ODIsIDc3LCA3OSwgNzgsIDczLCA2NywgODMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDg1LCA4MywgNjksIDgzLCA4MCwgNzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwg
NzYsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCA4OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDcxLCA2NiwgNjgsIDgyLCA2OSwgNzAsIDc2LCA2OSwg
NjcsIDg0LCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA4MiwgNjUsIDY4LCA3MywgNjUsIDc4LCA2NywgNjksIDc5LCA2NywgNjcsIDc2LCA4NSwg
ODMsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA3OSwgNjcsIDY3LCA3NiwgODUsIDgzLCA3Mywg
NzksIDc4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OCwgODUs
IDc3LCA5NSwgNjYsIDc5LCA3OCwgNjksIDk1LCA3MywgNzgsIDcwLCA3NiwgODUsIDY5LCA3OCwg
NjcsIDY5LCA4MiwgODMsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNjYsIDExMSwgMTEwLCAxMDEsIDExNSwgODAsIDEwMSwgMTE0LCA3NywgMTAxLCAx
MTUsIDEwNCwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA3OCwgODUsIDc3LCA5NSwgNzcsIDc5LCA4MiwgODAsIDcyLCA5NSwgNzMsIDc4LCA3MCwgNzYs
IDg1LCA2OSwgNzgsIDY3LCA2OSwgODIsIDgzLCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEw
MiwgMTA1LCAxMTAsIDEwMSwgMzIsIDg2LCA3MywgNzEsIDc4LCA2OSwgODQsIDg0LCA2OSwgNjYs
IDc2LCA2OSwgNzgsIDY4LCA3NywgNzksIDY4LCA2OSwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwg
NzYsIDg5LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNjUs
IDc3LCA4MCwgNzYsIDY5LCA4MiwgNTEsIDY4LCA3MSwgODIsIDY5LCA2OSwgNzgsIDY4LCA2OSwg
ODAsIDg0LCA3MiwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMs
IDY1LCA3NywgODAsIDc2LCA2OSwgODIsIDUxLCA2OCwgNjYsIDcxLCA4MiwgNzcsIDY1LCA4MCwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODUsIDgzLCA2OSwgODAs
IDcyLCA4OSwgODMsIDczLCA2NywgNjUsIDc2LCA3NiwgNzMsIDcxLCA3MiwgODQsIDcwLCA2NSwg
NzYsIDc2LCA3OSwgNzAsIDcwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3OSwgNjUsIDg0LCA5NSwgODQsIDY5LCA4OCwg
ODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgNzYsIDY5LCA2NSwg
ODIsIDY3LCA3OSwgNjUsIDg0LCA5NSwgNjYsIDg1LCA3NywgODAsIDY4LCA3MywgODIsIDY5LCA2
NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3OSwgNjUsIDg0LCA5NSwgODQsIDczLCA3
OCwgODQsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3
LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEw
MSwgMzIsIDY1LCA3OCwgNzMsIDgzLCA3OSwgODQsIDgyLCA3OSwgODAsIDczLCA2NywgOTUsIDg0
LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYs
IDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjYsIDgy
LCA2OCwgNzAsIDk1LCA4NiwgOTUsIDcyLCA2OSwgNzMsIDcxLCA3MiwgODQsIDk1LCA2NywgNzks
IDgyLCA4MiwgNjksIDc2LCA2NSwgODQsIDY5LCA2OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgNzcsIDgzLCA5NSwgNjYsIDgyLCA2OCwgNzAsIDk1LCA2OSwgNzgs
IDY5LCA4MiwgNzEsIDg5LCA5NSwgNjcsIDc5LCA3OCwgODMsIDY5LCA4MiwgODYsIDY1LCA4NCwg
NzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMs
IDcyLCA2OSwgNjksIDc4LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3Mywg
ODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCA4MywgODMsIDk1LCA4NCwgNzIsIDczLCA2NywgNzUsIDc4LCA2OSwg
ODMsIDgzLCA2NSwgNzgsIDY4LCA3NywgNjUsIDgzLCA3NSwgOTUsIDg0LCA2OSwgODgsIDg0LCA4
NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjgsIDY5LCA2NiwgODUsIDcxLCA3
NywgNzksIDY4LCA2OSwgMzIsIDQ4LCAxMCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDEx
MCwgMTAxLCAzMiwgODMsIDcyLCA2NSwgNjgsIDY5LCA4MiwgOTUsIDc4LCA2NSwgNzcsIDY5LCAz
MiwgMTAyLCAxMTQsIDk3LCAxMDMsIDEwOSwgMTAxLCAxMTAsIDExNiwgNTgsIDExMiwgOTgsIDEx
NCwgMTAsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2Nywg
ODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA5
NSwgNjYsIDY5LCA3MSwgNzMsIDc4LCAxMywgMTAsIDExMiwgMTE0LCAxMDEsIDk5LCAxMDUsIDEx
NSwgMTA1LCAxMTEsIDExMCwgMzIsIDEwNCwgMTA1LCAxMDMsIDEwNCwgMTEyLCAzMiwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA3MCwgODIsIDc5LCA3NywgNzYsIDczLCA3OCwgNjksIDY1LCA4MiwgODMsIDgw
LCA2NSwgNjcsIDY5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDEx
NSwgMTE2LCAxMDAsIDQ5LCA1MiwgNDgsIDQ0LCA5OSwgMTExLCAxMDgsIDExNywgMTA5LCAxMTAs
IDk1LCAxMDksIDk3LCAxMDYsIDExMSwgMTE0LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwg
MTExLCAxMTQsIDEwOSwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0
MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDgsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAx
MDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDExNywgMTEwLCAxMDUs
IDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDgzLCA5OSwgMTAxLCAxMTAsIDEwMSwgMTMsIDEwLCAx
MjMsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgODAs
IDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwg
MTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNTksIDEzLCAxMCwgMTI1
LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwg
MTE2LCAzMiwgNjEsIDMyLCA0OSwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAs
IDEwMywgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDEx
NCwgMTA5LCAzMiwgNzcsIDk3LCAxMTYsIDEwMSwgMTE0LCAxMDUsIDk3LCAxMDgsIDEzLCAxMCwg
MTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEs
IDEwMCwgMTExLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUyLCAzMiwgMTE4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3MywgMTEw
LCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA3
OSwgMTEyLCA5NywgOTksIDEwNSwgMTE2LCAxMjEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDY5LCAxMDksIDEwNSwgMTE1LCAx
MTUsIDEwNSwgMTE4LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwOSwgOTcs
IDExMiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEw
NSwgMTE2LCAxMjEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTAsIDMyLCAxMTgsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAx
MDIsIDk3LCA5OSwgMTAxLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA3MywgMTEw
LCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4
MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3MywgMTEwLCAx
MDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgMTExLCAxMTUs
IDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4
MywgMTA1LCAxMjIsIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwg
NjYsIDExNywgMTA5LCAxMTIsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEw
OSwgOTcsIDExNiwgNTIsIDMyLCA5NywgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5Nywg
MTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
NTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExMSwgMTEyLCA5NywgOTksIDEwNSwg
MTE2LCAxMjEsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3
LCAxMTYsIDUyLCAzMiwgMTAxLCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDc3
LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAz
MiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwOSwgOTcsIDExMiwgNzcsIDk3LCAxMTYsIDEx
NCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDc3LCA5Nywg
MTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTA5
LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4Mywg
OTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
NTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk4LCAxMTcsIDEwOSwgMTEyLCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIs
IDExOCwgODQsIDk3LCAxMTAsIDEwMywgMTAxLCAxMTAsIDExNiwgODMsIDExMiwgOTcsIDk5LCAx
MDEsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwg
NTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMy
LCAxMTgsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA2NywgMTExLCAxMDgsIDExMSwgMTE0
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEw
NCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwg
MTE2LCAxMjEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEs
IDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQs
IDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEs
IDExNSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExMiwgMTExLCAx
MDUsIDExMCwgMTE2LCA4MywgMTA1LCAxMjIsIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MiwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgs
IDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY5LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAx
MDEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIs
IDMyLCAxMTgsIDY5LCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEs
IDExMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjUsIDEwOSwgOTgs
IDEwNSwgMTAxLCAxMTAsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjgsIDEwMSwgOTgsIDExNywgMTAzLCA3NywgMTEx
LCAxMDAsIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEw
OCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4MCwgOTcsIDExNCwgOTcsIDEwOSwg
MTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEs
IDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDgyLCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTEx
LCA5NywgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAx
MTYsIDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIs
IDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA2NiwgMTE3LCAx
MDksIDExMiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MCwgMzIsIDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4
NCwgOTcsIDExMCwgMTAzLCAxMDEsIDExMCwgMTE2LCA4MywgMTEyLCA5NywgOTksIDEwMSwgODAs
IDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIs
IDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgNjYsIDExNywgMTA5LCAx
MTIsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUyLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0
LCAxMDUsIDExMCwgMTE2LCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTEx
LCA5NywgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwgMTE2LCA2OCwgMTA1LCAxMTUs
IDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIs
IDExOCwgNjcsIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4NCwgMTA1LCAx
MTAsIDExNiwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2
LCA1MiwgMzIsIDk5LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODQsIDEw
NSwgMTEwLCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2NSwgMTEwLCAxMDUsIDExNSwgMTExLCAxMTYsIDExNCwg
MTExLCAxMTIsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNjUs
IDExMCwgMTA1LCAxMTUsIDExMSwgMTE2LCAxMTQsIDExMSwgMTEyLCAxMjEsIDczLCAxMTAsIDEw
MiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5NywgMTEwLCAx
MDUsIDExNSwgMTExLCAxMTYsIDExNCwgMTExLCAxMTIsIDEyMSwgNzcsIDk3LCAxMTYsIDExNCwg
MTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDgzLCAxMDQs
IDEwMSwgMTAxLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTAsIDMyLCAxMTgsIDgzLCAxMDQsIDEwMSwgMTAxLCAxMTAsIDczLCAxMTAsIDEw
MiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTUsIDEwNCwg
MTAxLCAxMDEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIs
IDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUyLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDExNCwgOTcsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDEx
NiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MCwgMzIsIDExOCwgODQsIDEwNCwgMTA1LCA5OSwgMTA3LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDcz
LCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAx
MTYsIDEwNCwgMTA1LCA5OSwgMTA3LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDc3LCA5NywgMTE2LCAx
MTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4NCwg
MTA0LCAxMDUsIDk5LCAxMDcsIDExMCwgMTAxLCAxMTUsIDExNSwgODAsIDk3LCAxMTQsIDk3LCAx
MDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY4LCAxMDUsIDEwMiwg
MTAyLCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAs
IDk5LCAxMDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDg0LCAxMDUs
IDExMCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE4LCA4MywgMTE3LCA5OCwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwg
MTAxLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEw
NSwgOTksIDk3LCAxMDgsIDc2LCA0OCwgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0
OSwgOTUsIDQ5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEy
LCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDksIDQ4LCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUs
IDk5LCA5NywgMTA4LCA3NiwgNDksIDQ5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAs
IDk1LCA1MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwg
MTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA5NSwgNDksIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEw
NSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1
MCwgNDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEw
NCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgNTAsIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTks
IDk3LCAxMDgsIDg4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4Mywg
MTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwg
OTcsIDEwOCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAx
MTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg4LCA4OCwgOTUsIDkwLCA5MCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEs
IDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODksIDg5LCA5NSwgOTAsIDkwLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5
LCA5NywgMTA4LCA5MCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgs
IDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDg4LCA4OSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwg
MTA1LCA5OSwgOTcsIDEwOCwgODksIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA5MCwgODgs
IDU5LCAxMywgMTAsIDEyNSwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2
LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNDksIDQ0LCAzMiwgOTgsIDEwNSwgMTEw
LCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ5LCA0MSwgMzIsIDExNywgMTEwLCAx
MDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDc3LCAxMDEsIDExNSwgMTA0LCAxMywgMTAsIDEy
MywgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTgsIDEwNSwgMTE1LCAx
MDUsIDk4LCAxMDUsIDEwOCwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMs
IDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDEwNSwgMTEwLCAzMiwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAx
MTEsIDExMCwgODcsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAs
IDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAzMiwgNDksIDQx
LCAzMiwgMTA1LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA3OCwgMTExLCAx
MTQsIDEwOSwgOTcsIDEwOCwgODcsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAxMTcs
IDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYxLCAz
MiwgNTAsIDQxLCAzMiwgMTA1LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2
OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA3Mywg
MTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTA4
LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwg
NDgsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIs
IDQ5LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNiwg
MTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNTAsIDY4LCAzMiwgMTAxLCAxMTAsIDExOCwg
MTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAy
LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAxMjAsIDExNiwgMTE3
LCAxMTQsIDEwMSwgNTksIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwOCwgOTcsIDEyMSwg
MTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ4LCA0NCwgMzIs
IDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA1MCwgNDEsIDMy
LCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCAxMTUsIDk3LCAxMDksIDEx
MiwgMTA4LCAxMDEsIDExNCwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwg
MTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgODMsIDk3LCAxMDksIDExMiwg
MTA4LCAxMDEsIDExNCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgNTksIDEwLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYs
IDY2LCAxMTQsIDEwMCwgMTAyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwg
MTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDUwLCA2OCwgNDAsIDEwMSwgMTEwLCAx
MTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAs
IDEwMiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODQsIDEwMSwgMTIwLCAxMTYs
IDExNywgMTE0LCAxMDEsIDQ0LCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEw
LCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA4MywgOTcsIDEwOSwgMTEy
LCAxMDgsIDEwMSwgMTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA0MSwgMTMs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwgOTcsIDEwOSwg
MTEyLCAxMDgsIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgNDAsIDExNSwgNDQsIDk5LCA0MSwgMzIsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAx
MTQsIDEwMSwgNDAsIDExNSwgNDQsIDk5LCA0MSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwg
MTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA1MCwgNDQsIDMyLCA5OCwg
MTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDgsIDQxLCAzMiwgMTE3
LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgMTE2LCAxMDEsIDEyMCwgMTE2LCAx
MTcsIDExNCwgMTAxLCA2NywgMTE3LCA5OCwgMTAxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAx
MTQsIDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA1OSwgMTAsIDMyLCAzMiwgMzIs
IDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDEx
NiwgMzIsIDYxLCAzMiwgNTAsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAx
MDMsIDMyLCA2MSwgMzIsIDQ5LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQs
IDEwOSwgMzIsIDExNSwgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE0LCAxMDEs
IDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIs
IDEwOCwgMTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDU5LCAxMCwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4Mywg
OTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwg
MTAxLCAxMTQsIDY3LCAxMTcsIDk4LCAxMDEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwg
ODQsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDQ0LCAzMiwgMTE0LCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwg
MTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQxLCAxMywgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEw
OCwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3
NiwgMTExLCAxMDAsIDQwLCAxMTUsIDQ0LCA5OSwgNDQsIDEwOCwgNDEsIDMyLCAxMTYsIDEwMSwg
MTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDc2LCAxMTEsIDEwMCwgNDAsIDExNSwgNDQsIDk5LCA0
NCwgMTA4LCA0MSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDgwLCA3MywgNjEsIDUxLCA0NiwgNDksIDUyLCA0OSwgNTMsIDU3
LCA1MCwgNTQsIDUzLCA1MSwgNTMsIDU2LCA1NywgNTUsIDU3LCA1MSwgNTAsIDUxLCA1NiwgNTIs
IDU0LCA1MCwgNTQsIDUyLCA1MSwgNTEsIDU2LCA1MSwgNTAsIDU1LCA1NywgNTMsIDU5LCAxMywg
MTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAx
LCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDYx
LCA1MCwgNDYsIDUwLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDcxLCA5NywgMTA5LCAxMDksIDk3LCA2OSwgMTEwLCA5
OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUsIDExMiwgMTEyLCAx
MTQsIDExMSwgMTIwLCA2MSwgNDksIDQ2LCA0OCwgNDcsIDc2LCAxMDUsIDExMCwgMTAxLCA5Nywg
MTE0LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwg
NjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDEx
NSwgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDc2LCAxMTcsIDEwOSwgMTA1LCAxMTAs
IDk3LCAxMTAsIDk5LCAxMDEsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA2NSwgMTEyLCAx
MTIsIDExNCwgMTExLCAxMjAsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDgsIDQ2LCA1MCwg
NDksIDUwLCA1NCwgNDQsIDQ4LCA0NiwgNTUsIDQ5LCA1MywgNTAsIDQ0LCA0OCwgNDYsIDQ4LCA1
NSwgNTAsIDUwLCA0MSwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDEx
MCwgNjEsIDQ4LCA0NiwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDksIDU5LCAxMywgMTAsIDM1
LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE1LCA5NywgMTE2LCAxMTcsIDEx
NCwgOTcsIDExNiwgMTAxLCA0MCwgMTIwLCA0MSwgMzIsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwg
NDAsIDEyMCwgNDQsIDQ4LCA0NiwgNDgsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgMTMsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDk3LCA5OCwgMTE1LCA2OSwgMTEyLCAx
MTUsIDQwLCAxMjAsIDQxLCAzMiwgOTcsIDk4LCAxMTUsIDQwLCAxMjAsIDQxLCA0MywgNjksIDEx
MiwgMTE1LCAxMDUsIDEwOCwgMTExLCAxMTAsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCAxMDksIDk3LCAxMjAsIDY5LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEs
IDMyLCAxMDksIDk3LCAxMjAsIDQwLCAxMjAsIDQ0LCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAx
MTEsIDExMCwgNDEsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAs
IDEyMCwgNDEsIDMyLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDQwLCAxMjAsIDQ0LCA2OSwgMTEy
LCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwgNDQsIDQ5LCA0NiwgNDgsIDQxLCAxMywgMTAsIDEw
OSwgOTcsIDExNiwgNTEsIDMyLCAxMTYsIDExNCwgOTcsIDExMCwgMTE1LCAxMTIsIDExMSwgMTE1
LCAxMDEsIDc3LCA5NywgMTE2LCA1MSwgNDAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMDUsIDEx
MCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMDUsIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTA1LCA0OSwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5
LCA5MywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgNTAsIDYxLCAxMDUs
IDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDU5LCAxMywgMTAs
IDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMTEsIDExNywgMTE2LCA3NywgOTcsIDExNiwgMTE0LCAx
MDUsIDEyMCwgNjEsIDEwOSwgOTcsIDExNiwgNTEsIDQwLCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDQwLCAxMDUsIDQ4LCA0NiwgMTIwLCA0NCwgMTA1LCA0OSwgNDYsIDEyMCwgNDQsIDEwNSwg
NTAsIDQ2LCAxMjAsIDQxLCA0NCwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTA1LCA0
OCwgNDYsIDEyMSwgNDQsIDEwNSwgNDksIDQ2LCAxMjEsIDQ0LCAxMDUsIDUwLCA0NiwgMTIxLCA0
MSwgNDQsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDEwNSwgNDgsIDQ2LCAxMjIsIDQ0
LCAxMDUsIDQ5LCA0NiwgMTIyLCA0NCwgMTA1LCA1MCwgNDYsIDEyMiwgNDEsIDEzLCAxMCwgNDEs
IDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTEsIDExNywg
MTE2LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAs
IDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMDUsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE1LCAxMDEs
IDc3LCA5NywgMTE2LCA1MSwgNDAsIDEwOSwgOTcsIDExNiwgNTEsIDMyLCAxMDUsIDExMCwgNzcs
IDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCA5NywgNDgsIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAx
MTQsIDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA5MSwgNDgsIDkzLCA0NCwgOTcsIDQ4LCA0OSwgNjEs
IDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgOTEsIDQ5
LCA5MywgNDQsIDk3LCA0OCwgNTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1
LCAxMjAsIDkxLCA0OCwgOTMsIDkxLCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA5NywgNDksIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA5MSwgNDksIDkzLCA5MSwgNDgsIDkzLCA0NCwgOTcsIDQ5LCA0OSwgNjEsIDEw
NSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEsIDQ5LCA5
MywgNDQsIDk3LCA0OSwgNTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAx
MjAsIDkxLCA0OSwgOTMsIDkxLCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA5NywgNTAsIDQ4LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA5MSwgNTAsIDkzLCA5MSwgNDgsIDkzLCA0NCwgOTcsIDUwLCA0OSwgNjEsIDEwNSwg
MTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgOTEsIDQ5LCA5Mywg
NDQsIDk3LCA1MCwgNTAsIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAs
IDkxLCA1MCwgOTMsIDkxLCA1MCwgOTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCA5OCwgNDgsIDQ5LCA2MSwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OSwgNDksIDQ1LCA5
NywgNDksIDUwLCA0MiwgOTcsIDUwLCA0OSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDk4LCA0OSwgNDksIDYxLCA0NSwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OSwgNDgs
IDQzLCA5NywgNDksIDUwLCA0MiwgOTcsIDUwLCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDk4LCA1MCwgNDksIDYxLCA5NywgNTAsIDQ5LCA0MiwgOTcsIDQ5LCA0
OCwgNDUsIDk3LCA0OSwgNDksIDQyLCA5NywgNTAsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDEsIDExNiwgNjEsIDk3LCA0OCwgNDgsIDQyLCA5OCwg
NDgsIDQ5LCA0MywgOTcsIDQ4LCA0OSwgNDIsIDk4LCA0OSwgNDksIDQzLCA5NywgNDgsIDUwLCA0
MiwgOTgsIDUwLCA0OSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwg
MzIsIDEwOSwgOTcsIDExNiwgNTEsIDQwLCA5OCwgNDgsIDQ5LCA0NCwgNDAsIDQ1LCA5NywgNTAs
IDUwLCA0MiwgOTcsIDQ4LCA0OSwgNDMsIDk3LCA0OCwgNTAsIDQyLCA5NywgNTAsIDQ5LCA0MSwg
NDQsIDQwLCA5NywgNDksIDUwLCA0MiwgOTcsIDQ4LCA0OSwgNDUsIDk3LCA0OCwgNTAsIDQyLCA5
NywgNDksIDQ5LCA0MSwgNDQsIDEzLCAxMCwgOTgsIDQ5LCA0OSwgNDQsIDQwLCA5NywgNTAsIDUw
LCA0MiwgOTcsIDQ4LCA0OCwgNDUsIDk3LCA0OCwgNTAsIDQyLCA5NywgNTAsIDQ4LCA0MSwgNDQs
IDQwLCA0NSwgOTcsIDQ5LCA1MCwgNDIsIDk3LCA0OCwgNDgsIDQzLCA5NywgNDgsIDUwLCA0Miwg
OTcsIDQ5LCA0OCwgNDEsIDQ0LCAxMywgMTAsIDk4LCA1MCwgNDksIDQ0LCA0MCwgNDUsIDk3LCA1
MCwgNDksIDQyLCA5NywgNDgsIDQ4LCA0MywgOTcsIDQ4LCA0OSwgNDIsIDk3LCA1MCwgNDgsIDQx
LCA0NCwgNDAsIDk3LCA0OSwgNDksIDQyLCA5NywgNDgsIDQ4LCA0NSwgOTcsIDQ4LCA0OSwgNDIs
IDk3LCA0OSwgNDgsIDQxLCA0MSwgNDcsIDEwMCwgMTAxLCAxMTYsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE2LCAxMTEsIDc2LCAxMDUsIDExMCwgMTAx
LCA5NywgMTE0LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAx
MDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExMiwgMTExLCAxMTksIDQwLCA5OSwgMTExLCAx
MDgsIDExMSwgMTE0LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDc2LCAxMDUsIDExMCwgMTAx
LCA5NywgMTE0LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEs
IDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA0MSwgNDEsIDU5LCAxMywgMTAsIDEy
NSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE2LCAxMTEsIDcxLCA5NywgMTA5LCAx
MDksIDk3LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5
OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExMiwgMTExLCAxMTksIDQwLCA5OSwgMTExLCAxMDgs
IDExMSwgMTE0LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDcxLCA5NywgMTA5LCAxMDksIDk3
LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAxMDEsIDExNCwgNjUs
IDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCAxMTMsIDExNywgOTcsIDExNCwgMTAx
LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEs
IDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAz
MiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDU5
LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTEyLCAx
MTEsIDExOSwgNTMsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4LCA5NywgMTA4
LCAxMTcsIDEwMSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDExNSwgMTEzLCA2MSwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDIsIDExOCwgOTcsIDEw
OCwgMTE3LCAxMDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMy
LCAxMTUsIDExMywgNDIsIDExNSwgMTEzLCA0MiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNTks
IDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDMsIDEw
MSwgMTE2LCA3NiwgMTE3LCAxMDksIDEwNSwgMTEwLCA5NywgMTEwLCA5OSwgMTAxLCA0MCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAxMywgMTAsIDEy
MywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTksIDEwOCwgOTcs
IDEwOSwgMTEyLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDQ0LCA3NiwgMTE3LCAxMDksIDEwNSwgMTEwLCA5NywgMTEwLCA5OSwgMTAxLCA2OSwgMTEwLCA5
OSwgMTExLCAxMDAsIDEwMSwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA0MSwgNDQsIDQ4
LCA0NiwgNDQsIDQ5LCA0NiwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTAzLCAxMDEsIDExNiwgODIsIDk3LCAxMTAsIDEwMCwgNDAsIDEx
OCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQxLCAzMiwgMTIzLCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDIsIDExNCwgOTcsIDk5LCAx
MTYsIDQwLCAxMTUsIDEwNSwgMTEwLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDExNSwgMTAxLCAx
MDEsIDEwMCwgNDYsIDEyMCwgMTIxLCAzMiwgNDQsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCA0OSwg
NTAsIDQ2LCA1NywgNTYsIDU3LCA1NiwgNDQsIDU1LCA1NiwgNDYsIDUwLCA1MSwgNTEsIDQxLCA0
MSwgNDEsIDQyLCA1MiwgNTEsIDU1LCA1MywgNTYsIDQ2LCA1MywgNTIsIDUzLCA1MSwgNDEsIDU5
LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAx
MDUsIDExNiwgMTA0LCAxMDEsIDExNCwgNDAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUsIDEw
MSwgMTAxLCAxMDAsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE4LCA5NywgMTE0
LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDY1LCAxMDksIDExMSwgMTE3LCAxMTAsIDExNiwgNDEs
IDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgOTcsIDEx
MCwgMTAwLCA2MSwgMTAzLCAxMDEsIDExNiwgODIsIDk3LCAxMTAsIDEwMCwgNDAsIDExNSwgMTAx
LCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MDAsIDEwNSwgMTE2LCAxMDQsIDEwMSwgMTE0LCA2MSwgMTA5LCAxMDUsIDEyMCwgNDAsIDQ1LCAx
MTgsIDk3LCAxMTQsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjUsIDEwOSwgMTExLCAxMTcsIDEx
MCwgMTE2LCA0NywgNTAsIDUzLCA1MywgNDYsIDQ4LCA0NCwgMTE4LCA5NywgMTE0LCAxMDUsIDk3
LCAxMTAsIDk5LCAxMDEsIDY1LCAxMDksIDExMSwgMTE3LCAxMTAsIDExNiwgNDcsIDUwLCA1Mywg
NTMsIDQ2LCA0OCwgNDQsIDExNCwgOTcsIDExMCwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAx
MDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwMCwgMTA1LCAxMTYsIDEwNCwgMTAxLCAxMTQs
IDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAzLCA5OCwgMTAwLCA3NywgOTcsIDEyMCwg
ODIsIDk3LCAxMTAsIDEwMywgMTAxLCA2MSwgNTAsIDUzLCA1MywgNDYsIDQ4LCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE2LCAxMTEsIDgyLCA3MSwgNjYsIDY4LCA0MCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAzMiwgMTIzLCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDksIDk3LCAxMjAsIDgyLCA3MSwg
NjYsIDYxLCAxMDksIDk3LCAxMjAsIDY5LCAxMTIsIDExNSwgNDAsIDEwOSwgOTcsIDEyMCwgNDAs
IDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQsIDQ0LCAxMDksIDk3LCAxMjAsIDQwLCA5
OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTAzLCA0NCwgOTksIDExMSwgMTA4LCAxMTEsIDEx
NCwgNDYsIDk4LCA0MSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgNjgsIDYxLCAxMDksIDk3LCAxMjAsIDQwLCAxMTQsIDEwMywgOTgsIDEwMCwgNzcsIDk3
LCAxMjAsIDgyLCA5NywgMTEwLCAxMDMsIDEwMSwgNDcsIDEwOSwgOTcsIDEyMCwgODIsIDcxLCA2
NiwgNDQsIDQ5LCA0NiwgNDEsIDU5LCAxMywgMTAsIDY4LCA2MSwgOTksIDEwOCwgOTcsIDEwOSwg
MTEyLCA0MCwgMTAyLCAxMDgsIDExMSwgMTExLCAxMTQsIDQwLCA2OCwgNDEsIDQ3LCA1MCwgNTMs
IDUzLCA0NiwgNDgsIDQ0LCA0OCwgNDYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDMsIDk4LCA2MSwgOTksIDExMSwgMTA4LCAxMTEsIDEx
NCwgNDYsIDExNCwgMTAzLCA5OCwgNDIsIDY4LCA1OSwgMTMsIDEwLCAxMTQsIDEwMywgOTgsIDYx
LCAxMTYsIDExMSwgNzEsIDk3LCAxMDksIDEwOSwgOTcsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA0
MCwgMTE0LCAxMDMsIDk4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTQsIDEwMywgOTgsIDQ0LCA2OCwgNDEs
IDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMTQs
IDExMSwgMTA5LCA4MiwgNzEsIDY2LCA2OCwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTQs
IDEwMywgOTgsIDEwMCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDMsIDk4LCAxMDAsIDQ2
LCAxMTQsIDEwMywgOTgsIDYxLCAxMTYsIDExMSwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQs
IDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA0MCwgMTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEw
MywgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwg
MTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCAxMTQsIDEwMywgOTgsIDQ3LCAxMTQsIDEwMywgOTgsIDEw
MCwgNDYsIDk3LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDY3LCA3MywgODAsIDgyLCA3OSwgNjcsIDY1LCA3Niwg
OTUsIDgwLCA3MywgNTAsIDMyLCA0OCwgNDYsIDQ5LCA1MywgNTcsIDQ5LCA1MywgNTIsIDU3LCA1
MiwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwg
NjcsIDczLCA4MCwgODIsIDc5LCA2NywgNjUsIDc2LCA5NSwgODAsIDczLCAzMiwgNDgsIDQ2LCA1
MSwgNDksIDU2LCA1MSwgNDgsIDU3LCA1NiwgNTYsIDU0LCA0OSwgNTYsIDEzLCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgNzMsIDc4LCA3MywgNzcsIDg1LCA3
NywgODYsIDY1LCA4MiwgNzMsIDY1LCA3OCwgNjcsIDY5LCAzMiwgNDgsIDQ2LCA0OCwgNDgsIDQ4
LCA1MywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTEwLCAx
MTgsIDEwMSwgMTE0LCAxMTYsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUs
IDExNSwgODQsIDExMSwgNjUsIDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwg
MTExLCAxMTIsIDEwMSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDExMSwg
MTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAx
MCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNSwgMTEzLCAxMTcsIDk3LCAx
MTQsIDEwMSwgNDAsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUs
IDQxLCA0MywgNzcsIDczLCA3OCwgNzMsIDc3LCA4NSwgNzcsIDg2LCA2NSwgODIsIDczLCA2NSwg
NzgsIDY3LCA2OSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCAxMDIsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDcxLCAxMTQsIDk3LCAx
MjIsIDEwNSwgMTEwLCAxMDMsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAx
MTAsIDk5LCAxMDEsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0MSwgMzIsIDEyMywg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNjEsIDExNSwgOTcsIDExNiwg
MTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDIsIDUwLCA1MywgNDYsIDQ4LCA0MSwgNTksIDEz
LCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNCwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDU5LCAxMywgMTAsIDEy
NSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTAzLCAxMDEsIDExNiwgNjUsIDY1LCA4
MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDcwLCA5NywgOTksIDEx
NiwgMTExLCAxMTQsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTAsIDExMSwgMTE0
LCAxMDksIDk3LCAxMDgsIDg2LCAxMDEsIDk5LCAxMTYsIDExMSwgMTE0LCA0MSwgMzIsIDEyMywg
MTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1
MCwgNDAsIDQ4LCA0NiwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUyLCAzMiwgOTcsIDExMiwgMTEyLCAxMDgsIDEyMSwgNzMsIDEwOSwgOTcsIDEwMywgMTAxLCA4
MCwgMTE0LCAxMTEsIDk5LCAxMDEsIDExNSwgMTE1LCAxMDUsIDExMCwgMTAzLCA0MCwgMTE4LCAx
MDEsIDk5LCA1MiwgMzIsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQxLCAzMiwgMTIz
LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMTQsIDEwMywgOTgs
IDYxLCAxMTYsIDExMSwgNzEsIDk3LCAxMDksIDEwOSwgOTcsIDgzLCAxMTIsIDk3LCA5OSwgMTAx
LCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDExNCwgMTAzLCA5OCwgNDEs
IDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMTQsIDEwMywg
OTgsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMTQsIDEw
MSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTE0LCAxMDMsIDk4LCA0MSwgNTksIDEzLCAxMCwg
MTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4
LCAxMTYsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTks
IDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDEx
MSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5
NywgMTEwLCA5OSwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAx
MTQsIDExMCwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEw
OCwgNzYsIDQ4LCA0OCwgMTMsIDEwLCA0MywgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAx
MDUsIDk5LCA5NywgMTA4LCA3NiwgNDksIDk1LCA0OSwgNDIsIDQwLCAxMTAsIDExMSwgMTE0LCAx
MDksIDk3LCAxMDgsIDQ2LCAxMjEsIDQxLCAxMywgMTAsIDQzLCAxMTgsIDgzLCAxMTIsIDEwNCwg
MTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgNDgsIDQyLCA0MCwgMTEwLCAxMTEs
IDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIyLCA0MSwgMTMsIDEwLCA0MywgMTE4LCA4MywgMTEy
LCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNDksIDQ5LCA0MiwgNDAsIDEx
MCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMCwgNDEsIDEzLCAxMCwgNDMsIDExOCwg
ODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA5NSwgNTAs
IDQyLCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIxLCA0MiwgMTEwLCAx
MTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIwLCA0MSwgMTMsIDEwLCA0MywgMTE4LCA4Mywg
MTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3NiwgNTAsIDk1LCA0OSwgNDIs
IDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjEsIDQyLCAxMTAsIDExMSwg
MTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjIsIDQxLCAxMywgMTAsIDQzLCAxMTgsIDgzLCAxMTIs
IDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgNDgsIDQyLCA0MCwgNDAs
IDUxLCA0NiwgNDgsIDQyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjIsIDQy
LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjIsIDQxLCA0NSwgNDksIDQ2LCA0
OCwgNDEsIDEzLCAxMCwgNDMsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwg
OTcsIDEwOCwgNzYsIDUwLCA0OSwgNDIsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDQ2LCAxMjIsIDQyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ2LCAxMjAsIDQxLCAx
MywgMTAsIDQzLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgs
IDc2LCA1MCwgNTAsIDQyLCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIw
LCA0MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NiwgMTIwLCA0NSwgNDAsIDExMCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDYsIDEyMSwgNDIsIDExMCwgMTExLCAxMTQsIDEwOSwg
OTcsIDEwOCwgNDYsIDEyMSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE1LCAx
MTYsIDExNCwgMTE3LCA5OSwgMTE2LCAzMiwgMTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAx
MDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDEzLCAxMCwgMTIzLCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzks
IDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA1OSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4
LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgOTcsIDExNiwgMTE2LCAxMDEsIDExMCwgMTE3LCA5NywgMTE2LCAx
MDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgNzYsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3MiwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgODUsIDExMCwgOTks
IDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNTksIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEw
MSwgMTE1LCAxMTUsIDU5LCAxMywgMTAsIDEyNSwgNTksIDEzLCAxMCwgMTEyLCAxMTQsIDEwMSwg
NzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEs
IDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgODAsIDExMSwgMTA1LCAxMTAs
IDExNiwgNjUsIDExMCwgMTAwLCA4MywgMTEyLCAxMTEsIDExNiwgODAsIDExNCwgMTAxLCA3Niwg
MTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgNDAs
IDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAx
MTYsIDk3LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDg2LCA0NCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDc4LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAx
MDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDExNCwg
MTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywg
MTA4LCAxMTYsIDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUs
IDEwMSwgMTE2LCA2MSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCA5NywgMTE2LCA5Nywg
NDYsIDEyMCwgMTIxLCAxMjIsIDQ1LCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDg3LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0
NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5
OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA2MSwgMTAwLCAxMTEsIDEx
NiwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgsIDEwNSwgMTAzLCAx
MDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0NCwgMTE0LCAxMDEsIDExNSwg
MTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAyLCAxMDIs
IDExNSwgMTAxLCAxMTYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwg
MTE2LCA0NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA2MSwgMTE1LCAxMTMsIDExNCwgMTE2LCA0MCwgMTE0LCAxMDEsIDExNSwg
MTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUs
IDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDEwMCwg
NDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3NiwgNjEs
IDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExNCwgMTAx
LCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEw
MiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3
LCAxMDgsIDExNiwgNDYsIDcyLCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUs
IDEyMiwgMTAxLCA0MCwgODYsIDQzLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0Niwg
NzYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgODYs
IDEwMCwgMTExLCAxMTYsIDcyLCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwg
MTAxLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDg2LCA0NCwgMTE0LCAxMDEsIDExNSwgMTE3LCAx
MDgsIDExNiwgNDYsIDcyLCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywg
MTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3
LCAxMDksIDExMiwgMTAxLCAxMDAsIDYxLCAxMDAsIDExMSwgMTE2LCA0MCwgNzgsIDQ0LCAxMTQs
IDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEw
MSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA2MSwgMTE1
LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUsIDQwLCAxMTQs
IDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA4NSwg
MTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTE0
LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAx
MTYsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMs
IDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDk5LCAxMTEs
IDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgOTcsIDEwOCwgODAsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2
LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgNDAsIDExOCwgMTAxLCA5OSwgNTIs
IDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3LCAxMTYsIDk3LCA0NCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDg2LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDc4LCA0MSwgMzIs
IDEyMywgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUs
IDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4
LCAxMTYsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEs
IDYxLCAxMDgsIDEwMSwgMTEwLCAxMDMsIDExNiwgMTA0LCA0MCwgNDUsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0MSwgNTksIDEz
LCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc2LCA2MSwgMTEwLCAxMTEs
IDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgNDUsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0MSwgNTksIDEz
LCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDcyLCA2MSwgMTEwLCAxMTEs
IDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgODYsIDQzLCAxMTQsIDEwMSwg
MTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1
LCAxMTcsIDEwOCwgMTE2LCA0NiwgODYsIDEwMCwgMTExLCAxMTYsIDcyLCA2MSwgMTE1LCA5Nywg
MTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDg2LCA0
NCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDcyLCA0MSwgNDEsIDU5LCAxMywg
MTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwg
NzYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDYxLCAxMDAsIDEx
MSwgMTE2LCA0MCwgNzgsIDQ0LCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYs
IDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEw
MCwgMTExLCAxMTYsIDc2LCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAx
LCA2OSwgMTEyLCAxMTUsIDQwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgs
IDEwMCwgMTExLCAxMTYsIDc2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwg
MTAwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEx
NCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTIs
IDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEw
LCAxMDIsIDExMSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA3MiwgMTAx
LCAxMDksIDEwNSwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDgwLCAxMTQsIDEw
MSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAx
MTEsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4
LCA5NywgMTE2LCA5NywgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA4NiwgNDQsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCA3OCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTEyLCAxMTQsIDEwMSwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMy
LCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1
LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA2MSwgMTAwLCAxMTEs
IDExNiwgNDAsIDc4LCA0NCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCA5NywgMTE2LCA5
NywgNDYsIDEyMCwgMTIxLCAxMjIsIDQxLCA0MiwgNDgsIDQ2LCA1MywgNDMsIDQ4LCA0NiwgNTMs
IDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAx
MTEsIDExNiwgNzYsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDY5
LCAxMTIsIDExNSwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAw
LCAxMTEsIDExNiwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwg
MTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5
LCAxMTIsIDEwMSwgMTAwLCA2MSwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDc4
LCAxMDAsIDExMSwgMTE2LCA3NiwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDEx
NywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3NiwgMTA1
LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA5NSwgODMs
IDExNiwgOTcsIDExMCwgMTAwLCA5NywgMTE0LCAxMDAsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwg
NDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDk3LCAxMTAsIDEwMywgMTAxLCA0
MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIs
IDEwOSwgOTcsIDEyMCwgNDAsIDQ4LCA0NiwgNDQsIDQ5LCA0NiwgNDgsIDQ1LCAxMDgsIDEwMSwg
MTEwLCAxMDMsIDExNiwgMTA0LCA0MCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIs
IDEwMiwgMTE1LCAxMDEsIDExNiwgNDEsIDQ3LCAxMTQsIDk3LCAxMTAsIDEwMywgMTAxLCA0MSwg
NTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwg
MTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAs
IDk5LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwg
MTAyLCAxMDIsIDk1LCA4MCwgMTA0LCAxMjEsIDExNSwgMTA1LCA5OSwgOTcsIDEwOCwgNDAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEw
NSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAx
LCAxMDAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwg
MTEwLCAzMiwgNDksIDQ2LCA0OCwgNDcsIDEwOSwgOTcsIDEyMCwgNjksIDExMiwgMTE1LCA0MCwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwg
MTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTI1
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwg
MTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDc2LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDk1LCA3
MSwgNzYsIDg0LCA3MCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAx
MTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTA1LCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAx
MTQsIDEwMSwgMTAwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDQxLCAxMywgMTAsIDEyMywgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYs
IDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3MCwgOTcsIDEwOCwgMTA4LCAx
MTEsIDEwMiwgMTAyLCA2MSwgNDksIDQ2LCA0OCwgNDcsIDEwOSwgOTcsIDEyMCwgNjksIDExMiwg
MTE1LCA0MCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0MSwgNTksIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMiwgOTcsIDk5LCAxMTYsIDExMSwg
MTE0LCA2MSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0MiwgMTA1LCAx
MTAsIDExOCwgMTAxLCAxMTQsIDExNSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwg
MTAwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA5NywgMTE2LCAxMTYsIDEwMSwgMTEwLCAxMTcsIDk3LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCA0OSwg
NDYsIDQ4LCA0NSwgMTAyLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDQyLCAxMDIsIDk3LCA5OSwg
MTE2LCAxMTEsIDExNCwgNDEsIDU5LCAxMywgMTAsIDk3LCAxMTYsIDExNiwgMTAxLCAxMTAsIDEx
NywgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNDIsIDYxLCA5NywgMTE2LCAxMTYsIDEwMSwgMTEw
LCAxMTcsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDEwOCwgMTA1LCAxMDMs
IDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNzAsIDk3LCAx
MDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNDIsIDYxLCA5NywgMTE2LCAxMTYsIDEwMSwgMTEwLCAx
MTcsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDEx
NywgMTE0LCAxMTAsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAx
MTYsIDk3LCAxMTAsIDk5LCAxMDEsIDcwLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDU5
LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDEx
MSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5
OSwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEw
MiwgMTAyLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2
LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEw
LCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA0NCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDExNCwgOTcsIDExMCwgMTAzLCAxMDEsIDQ0LCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTA1LCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNSwgMTAxLCA4Mywg
MTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDQxLCAx
MywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTks
IDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEw
LCA5OSwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEs
IDEwMiwgMTAyLCA5NSwgODAsIDEwNCwgMTIxLCAxMTUsIDEwNSwgOTksIDk3LCAxMDgsIDQwLCAx
MDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAx
MDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMjUs
IDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAx
MTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
OTcsIDEwOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAx
MDIsIDEwMiwgOTUsIDgzLCAxMTYsIDk3LCAxMTAsIDEwMCwgOTcsIDExNCwgMTAwLCA0MCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQ0LCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTE1LCA3MiwgOTcsIDEwOCwgMTAy
LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDEwMSwgMTIwLCAxMTIsIDExMSwgMTEwLCAxMDEsIDExMCwgMTE2LCA0MSwgMTMsIDEwLCAxMjMs
IDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMiwgOTcsIDEwOCwgMTA4LCAx
MTEsIDEwMiwgMTAyLCA2MSwgNDgsIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDk5LCAxMTEsIDExNSwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNjEsIDEw
OSwgOTcsIDEyMCwgNjksIDExMiwgMTE1LCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDQ1LCAxMDgs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDQ0LCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0
LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDEx
NCwgODcsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTA1LCAxMDIsIDMyLCA0MCwgOTksIDExMSwgMTE1
LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA2MiwgNjEsIDk5LCAxMTEsIDExNSwgNzIsIDk3LCAx
MDgsIDEwMiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAs
IDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA2MSwgMTA5LCA5NywgMTIwLCA0MCwg
NDgsIDQ2LCA0NCwgMTEyLCAxMTEsIDExOSwgNDAsIDk5LCAxMTEsIDExNSwgNjUsIDExMCwgMTAz
LCAxMDgsIDEwMSwgNDQsIDEwMSwgMTIwLCAxMTIsIDExMSwgMTEwLCAxMDEsIDExMCwgMTE2LCA0
MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwg
MTEwLCAzMiwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDU5LCAxMywgMTAsIDEy
NSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIs
IDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA5NywgMTA4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEs
IDEwMiwgMTAyLCA5NSwgODAsIDEwNCwgMTIxLCAxMTUsIDEwNSwgOTksIDk3LCAxMDgsIDQwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDEx
NCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMTUsIDcyLCA5NywgMTA4LCAx
MDIsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCA5OSwg
MTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwNywg
NzcsIDEwNSwgMTEwLCAxMTcsIDExNSwgNzYsIDExMSwgMTAzLCA1MCwgNjcsIDExMSwgMTEwLCAx
MDEsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwg
MTA1LCAxMTYsIDEyMSwgODIsIDk3LCAxMTYsIDEwNSwgMTExLCA2MSwgNTQsIDQ2LCA1NCwgNTIs
IDUxLCA1NiwgNTMsIDU0LCA0OSwgNTYsIDU3LCA1NSwgNTUsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMTAsIDk5LCAxMDEsIDExMCwgMTE2LCAxMTQs
IDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc1LCA5NywgMTEyLCAxMTIsIDk3LCA2MSwgMTA3LCA3
NywgMTA1LCAxMTAsIDExNywgMTE1LCA3NiwgMTExLCAxMDMsIDUwLCA2NywgMTExLCAxMTAsIDEw
MSwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNzMsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE1LCAx
MDUsIDExNiwgMTIxLCA4MiwgOTcsIDExNiwgMTA1LCAxMTEsIDQ3LCA0MCwgNDksIDQ2LCA0OCwg
NDUsIDk5LCAxMTEsIDExNSwgNzIsIDk3LCAxMDgsIDEwMiwgNjUsIDExMCwgMTAzLCAxMDgsIDEw
MSwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAx
MDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCAx
MTIsIDExNCwgMTAxLCA5NywgMTAwLCA4MywgNzEsIDYxLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwg
NDUsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNDIsIDk5LCAxMTEsIDExMCwgOTksIDEwMSwgMTEwLCAxMTYsIDExNCwg
OTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzUsIDk3LCAxMTIsIDExMiwgOTcsIDQ0LCA0NSwgOTks
IDExMSwgMTEwLCA5OSwgMTAxLCAxMTAsIDExNiwgMTE0LCA5NywgMTE2LCAxMDUsIDExMSwgMTEw
LCA3NSwgOTcsIDExMiwgMTEyLCA5NywgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNjEsIDEwMSwgMTIw
LCAxMTIsIDUwLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAx
MDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQ0LCA0
OSwgNDYsIDQ4LCA0MSwgNDQsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDExMiwgMTE0LCAxMDEsIDk3LCAxMDAs
IDgzLCA3MSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEw
LCAzMiwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDEx
NywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5
NywgMTA4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEw
MiwgMTAyLCA5NSwgNzEsIDc2LCA4NCwgNzAsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4
LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcs
IDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgODMs
IDk5LCA5NywgMTA4LCAxMDEsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDc5LCAxMDIsIDEwMiwg
MTE1LCAxMDEsIDExNiwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA5OSwgMTAwLCA2MSwgMTAwLCAxMTEsIDExNiwgNDAsIDQ1LCAxMDgsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDQ0LCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEs
IDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcs
IDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAyLCA5NywgMTA4
LCAxMDgsIDExMSwgMTAyLCAxMDIsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2
LCAxMDEsIDQwLCA5OSwgMTAwLCA0MiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY1LCAxMTAs
IDEwMywgMTA4LCAxMDEsIDgzLCA5OSwgOTcsIDEwOCwgMTAxLCA0MywgMTA4LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEs
IDExNiwgNDEsIDU5LCAxMywgMTAsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA0
MiwgNjEsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAy
LCAxMDIsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5NywgMTA4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3
MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTE0LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYs
IDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQ0LCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgOTksIDExMSwgMTE1LCA3MiwgOTcsIDEwOCwgMTAyLCA2NSwgMTEwLCAxMDMsIDEw
OCwgMTAxLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMSwgMTIwLCAxMTIsIDEx
MSwgMTEwLCAxMDEsIDExMCwgMTE2LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEw
OCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA4MywgOTksIDk3
LCAxMDgsIDEwMSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAz
LCAxMDQsIDExNiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNzksIDEwMiwgMTAyLCAxMTUsIDEw
MSwgMTE2LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTQs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgOTcsIDEwOCwgNzYsIDEwNSwgMTAzLCAxMDQs
IDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDgwLCAxMDQsIDEyMSwg
MTE1LCAxMDUsIDk5LCA5NywgMTA4LCA0MCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAx
MDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTAwLCAxMDUsIDExNCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTExLCA3NiwgMTA1LCAxMDMsIDEwNCwg
MTE2LCA2NywgMTAxLCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3LCA0NCwgOTksIDExMSwgMTE1LCA3
MiwgOTcsIDEwOCwgMTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA0MSwgNTksIDEzLCAxMCwg
MTI1LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzAsIDgy
LCA2OSwgODMsIDc4LCA2OSwgNzYsIDk1LCA3NywgNjUsIDg4LCA3MywgNzcsIDg1LCA3NywgOTUs
IDc5LCA3OCwgOTUsIDgyLCA3OSwgODUsIDcxLCA3MiwgMzIsIDQ4LCA0NiwgNTAsIDUzLCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDMsIDEwMSwgMTE2LCA2OSwgMTEwLCAxMDEsIDEx
NCwgMTAzLCAxMjEsIDY3LCAxMTEsIDExMCwgMTE1LCAxMDEsIDExNCwgMTE4LCA5NywgMTE2LCAx
MDUsIDExMSwgMTEwLCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCA0MCwgOTksIDExMSwgMTEw
LCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTUsIDExMiwgMTAxLCA5OSwg
MTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDks
IDEwMSwgMTEwLCAxMTYsIDgyLCA0OCwgNDQsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAx
MDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA0MSwgMzIsIDEyMywgMTMsIDEw
LCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgNDksIDQ2LCA0OCwgNDMsIDExNSwg
MTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwg
MTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDQ4LCA0MiwgNDAsIDQ5LCA0NiwgNDgs
IDQ3LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDEx
NiwgNjYsIDExNCwgMTAwLCAxMDIsIDQ2LCAxMjEsIDQ1LCA0OSwgNDYsIDQ4LCA0MSwgNTksIDEz
LCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDMsIDEwMSwgMTE2LCA2
NiwgODIsIDY4LCA3MCwgNzYsIDExMSwgMTExLCAxMDcsIDExNywgMTEyLCA0MCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDQsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMTIsIDEwMSwgMTE0LCA5OSwgMTAxLCAxMTIsIDExNiwgMTE3LCA5
NywgMTA4LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCAz
MiwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCA4NSwgODYsIDYxLCAxMTgsIDEw
MSwgOTksIDUwLCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTEyLCAxMDEsIDExNCwg
OTksIDEwMSwgMTEyLCAxMTYsIDExNywgOTcsIDEwOCwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwg
MTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIs
IDk4LCAxMTQsIDEwMCwgMTAyLCA3NiwgMTExLCAxMTEsIDEwNywgMTE3LCAxMTIsIDYxLCAxMTYs
IDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDQwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDEx
NCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDgzLCA5
NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQ0LCA4NSwgODYsIDQxLCA1OSwgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTgsIDExNCwgMTAwLCAxMDIsIDc2LCAx
MTEsIDExMSwgMTA3LCAxMTcsIDExMiwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTI1
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDMsIDEwMSwgMTE2LCA4MiwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3MCwgMTE0LCAxMTEsIDEw
OSwgNjYsIDgyLCA2OCwgNzAsIDc2LCAxMTEsIDExMSwgMTA3LCAxMTcsIDExMiwgNDAsIDk5LCAx
MTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE1LCAxMTIsIDEw
MSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDEx
MCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgsIDQ0LCA5OSwgMTExLCAxMTAsIDExNSwgMTE2
LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEs
IDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNDEsIDMyLCAxMjMs
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTA5LCAxMDUsIDEyMCwgNDAsIDEwMSwgMTEw
LCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAx
MDAsIDEwMiwgNDYsIDEyMCwgMTIwLCAxMjAsIDQ0LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwg
MTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDQ2LCAxMjEs
IDEyMSwgMTIxLCA0NCwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwg
MTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgs
IDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAx
MDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAs
IDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMTQsIDEwMSwgMTE1LCAx
MTAsIDEwMSwgMTA4LCA4MywgOTksIDEwNCwgMTA4LCAxMDUsIDk5LCAxMDcsIDcxLCA3MSwgODgs
IDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgODYsIDEwMCwgMTExLCAxMTYsIDcyLCA0
NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2
LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTcsIDQ4LCA0MSwg
MTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEx
NCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDMs
IDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwg
NTcsIDQ4LCA0NSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDQ4LCA0MSwgNDIsIDExMiwgMTExLCAxMTksIDUzLCA0MCwgNDksIDQ2LCA0OCwgNDUs
IDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAyLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4
LCA4MywgOTksIDEwNCwgMTA4LCAxMDUsIDk5LCAxMDcsIDcxLCA3MSwgODgsIDQwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgODYsIDEwMCwgMTExLCAxMTYsIDcyLCA0NCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA0OCwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTcsIDQ4LCA0MSwg
MTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEx
NCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDMs
IDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwg
NTcsIDQ4LCA0NSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDQ4LCA0MSwgNDIsIDExMiwgMTExLCAxMTksIDUzLCA0MCwgNDksIDQ2LCA0OCwgNDUs
IDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA2OCwg
MTA1LCAxMTUsIDExNiwgMTE0LCAxMDUsIDk4LCAxMTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzAs
IDExNywgMTEwLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5NSwgODQsIDExNCwgMTExLCAxMTks
IDk4LCAxMTQsIDEwNSwgMTAwLCAxMDMsIDEwMSwgODIsIDEwMSwgMTA1LCAxMTYsIDEyMiwgNzEs
IDcxLCA4OCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDEx
NiwgNzIsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDEwOCwgMTEyLCAxMDQs
IDk3LCA3MSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCA5NywgNTAsIDYxLCAxMTUsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDQwLCA5NywgMTA4
LCAxMTIsIDEwNCwgOTcsIDcxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDEwMCwgNjEsIDc4LCAxMDAsIDExMSwgMTE2LCA3MiwgNDIsIDc4LCAxMDAsIDExMSwg
MTE2LCA3MiwgNDIsIDQwLCA5NywgNTAsIDQ1LCA0OSwgNDYsIDQ4LCA0MSwgNDMsIDQ5LCA0Niwg
NDgsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5NywgNTAs
IDQ3LCA0MCwgODAsIDczLCA0MiwgMTAwLCA0MiwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDEwOSwgMTA1LCAxMTYsIDEw
NCwgODYsIDEwNSwgMTE1LCAxMDUsIDk4LCAxMDUsIDEwOCwgMTA1LCAxMTYsIDEyMSwgOTUsIDcx
LCA3MSwgODgsIDY3LCAxMTEsIDExNCwgMTE0LCAxMDEsIDEwOCwgOTcsIDExNiwgMTAxLCAxMDAs
IDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0
NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDQs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA0
MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDUwLCA2
MSwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNDIsIDk3LCAxMDgsIDExMiwgMTA0LCA5Nywg
NzEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3MSwgNzEsIDg4LCA4
NiwgNjEsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDIsIDExNSwgMTEzLCAxMTQsIDExNiwgNDAs
IDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNDIsIDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDQ1
LCA5NywgNTAsIDQyLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDQxLCA0MywgOTcsIDUwLCA0MSwg
NTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDcxLCA3MSwgODgsIDc2LCA2
MSwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0MiwgMTE1LCAxMTMsIDExNCwgMTE2LCA0MCwgNzgs
IDEwMCwgMTExLCAxMTYsIDc2LCA0MiwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDUsIDk3
LCA1MCwgNDIsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDEsIDQzLCA5NywgNTAsIDQxLCA1OSwg
MTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgNDgsIDQ2LCA1MywgNDcs
IDQwLCA3MSwgNzEsIDg4LCA4NiwgNDMsIDcxLCA3MSwgODgsIDc2LCA0MSwgNTksIDEzLCAxMCwg
MTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTAyLCAx
MDIsIDExNywgMTE1LCAxMDEsIDY2LCA4MiwgNjgsIDcwLCA5NSwgNjYsIDExNywgMTE0LCAxMDgs
IDEwMSwgMTIxLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwg
MTE2LCA3NiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDEx
NiwgODYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgODYsIDEwMCwgMTExLCAxMTYs
IDcyLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTExLCAxMTcsIDEwMywg
MTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAx
MTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA3OCwgODYsIDYxLCAxMTIsIDExMSwgMTE5LCA1
MywgNDAsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNjksIDExMiwgMTE1
LCA0MCwgNDksIDQ2LCA0OCwgNDUsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDEsIDQxLCA1OSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAx
MTcsIDExNSwgMTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNzgsIDc2LCA2
MSwgMTEyLCAxMTEsIDExOSwgNTMsIDQwLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2
LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAsIDQ5LCA0NiwgNDgsIDQ1LCA3OCwgMTAwLCAxMTEsIDEx
NiwgODYsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEw
MCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUsIDExMCwg
MTAxLCAxMDgsIDU3LCA0OCwgNjEsIDQ4LCA0NiwgNTMsIDQzLCA1MCwgNDYsIDQ4LCA0MiwgODYs
IDEwMCwgMTExLCAxMTYsIDcyLCA0MiwgODYsIDEwMCwgMTExLCAxMTYsIDcyLCA0MiwgMTE0LCAx
MTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNTksIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMiwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwg
MzIsIDYxLCAxMywgMTAsIDQwLCA0OSwgNDYsIDQ4LCA0MywgNDAsIDEwMCwgMTA1LCAxMDIsIDEw
MiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDU3LCA0
OCwgNDUsIDQ5LCA0NiwgNDgsIDQxLCA0MiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwg
MTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNzgsIDc2LCA0MSwgMzIsIDQy
LCAxMywgMTAsIDQwLCA0OSwgNDYsIDQ4LCA0MywgNDAsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3
LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDU3LCA0OCwgNDUs
IDQ5LCA0NiwgNDgsIDQxLCA0MiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3
MCwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNzgsIDg2LCA0MSwgNTksIDEzLCAxMCwg
MTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwMiwgMTE0LCAxMDEsIDExNSwgMTEw
LCAxMDEsIDEwOCwgNDcsIDgwLCA3MywgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDc2LCA2OSwgNjUsIDgyLCA2NywgNzks
IDY1LCA4NCwgODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDY1LCA3OCwgNjcsIDY5LCA1Nywg
NDgsIDMyLCA0OSwgNDYsIDQ4LCAxMywgMTAsIDExNSwgMTE2LCAxMTQsIDExNywgOTksIDExNiwg
MzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIs
IDExMSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1
LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDEwMCwgMTA2LCAxMTcsIDExNSwgMTE2LCA4
MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDcwLCAxMTQsIDExMSwg
MTA5LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA4MCwgMTE0LCAxMTEsIDExMiwgMTAxLCAxMTQs
IDExNiwgMTA1LCAxMDEsIDExNSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQs
IDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0NCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1
LCAxMTcsIDExNSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAz
LCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQxLCAzMiwg
MTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAx
MDQsIDExNiwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA2MSwg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDExNywgMTE1LCA0Nywg
MTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwg
MTAxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE2LCAxMTEsIDEx
NiwgOTcsIDEwOCwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA2
MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgMTA4LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwg
NDMsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCA1OSwg
MTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE2LCAxMTEsIDExNiwg
OTcsIDEwOCwgODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA1OSwg
MTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwg
MTEyLCAxMTcsIDExNiwgMTAxLCA3MiwgMTAxLCAxMDksIDEwNSwgMTE1LCAxMTIsIDEwNCwgMTAx
LCAxMTQsIDEwNSwgOTksIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3NiwgMTA1
LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA0MCwgMTEyLCAxMTQsIDEwMSwgNzYsIDEw
NSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCAx
MDUsIDExMCwgMTAyLCAxMTEsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTAzLCAxMTQsIDExMSwgMTE3LCAxMTAsIDEwMCwgNjcsIDExMSwgMTA4LCAxMTEsIDEx
NCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIs
IDEwOSwgMTA1LCAxMjAsIDQwLCAxMDMsIDExNCwgMTExLCAxMTcsIDExMCwgMTAwLCA2NywgMTEx
LCAxMDgsIDExMSwgMTE0LCA0NCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMTEsIDEw
OCwgMTExLCAxMTQsIDQ0LCAxMDUsIDExMCwgMTAyLCAxMTEsIDQ2LCA3OCwgMTAwLCAxMTEsIDEx
NiwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3
LCAxMTUsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNDAsIDEx
MiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAx
MTAsIDEwMiwgMTExLCAzMiwgMTA1LCAxMTAsIDEwMiwgMTExLCA0NCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0
MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUs
IDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA4NCwgMTAxLCAxMTQsIDEwOSwgNjEsIDEwMCwgMTA1
LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNjYsIDgyLCA2OCwgNzAsIDk1LCA2NiwgMTE3LCAx
MTQsIDEwOCwgMTAxLCAxMjEsIDQwLCAxMDUsIDExMCwgMTAyLCAxMTEsIDQ2LCA3OCwgMTAwLCAx
MTEsIDExNiwgNzYsIDQ0LCAxMDUsIDExMCwgMTAyLCAxMTEsIDQ2LCA3OCwgMTAwLCAxMTEsIDEx
NiwgODYsIDQ0LCAxMDUsIDExMCwgMTAyLCAxMTEsIDQ2LCA4NiwgMTAwLCAxMTEsIDExNiwgNzIs
IDQ0LCAxMDUsIDExMCwgMTAyLCAxMTEsIDQ2LCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEw
LCAxMDEsIDExNSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgODQsIDEwMSwgMTE0
LCAxMDksIDQyLCAxMDUsIDExMCwgMTAyLCAxMTEsIDQ2LCA5NywgMTE2LCAxMTYsIDEwMSwgMTEw
LCAxMTcsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQyLCAxMDUsIDExMCwgMTAyLCAxMTEsIDQ2
LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTAsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgODAsIDExNCwgMTEx
LCAxMDYsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDEwMSwgMTIwLCAxMTYsIDEx
NywgMTE0LCAxMDEsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3NiwgMTA1LCAx
MDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA4NSwgODYsIDQwLCAxMDksIDk3LCAxMTYsIDUy
LCAzMiwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4MCwgMTE0LCAxMTEsIDEw
NiwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEy
MCwgNDEsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE1LCAxMTYsIDExNCwg
MTEzLCA2MSwgMTE2LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4MCwgMTE0LCAxMTEs
IDEwNiwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUs
IDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDg3LCA0NCwgNDksIDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEx
NSwgMTE2LCAxMTQsIDExMywgNDcsIDYxLCAxMTUsIDExNiwgMTE0LCAxMTMsIDQ2LCAxMTksIDU5
LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTUsIDExNiwgMTE0
LCAxMTMsIDQ2LCAxMjAsIDEyMSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMDMsIDEwMSwgMTE2LCA3NiwgMTExLCAxMDAsIDcwLCAxMTQsIDEx
MSwgMTA5LCA2NSwgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDk5LCAxMTcsIDk4LCAxMDEsIDc3LCA5NywgMTEyLCA2OCwgMTA1LCAxMDksIDEw
MSwgMTEwLCAxMTUsIDEwNSwgMTExLCAxMTAsIDgwLCAxMDUsIDEyMCwgMTAxLCAxMDgsIDExNSwg
NDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCAx
MTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTE4LCAxMDEsIDExNCwgOTcsIDEw
MywgMTAxLCA4MywgMTA4LCAxMTEsIDExMiwgMTAxLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcs
IDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwg
ODMsIDEwOCwgMTExLCAxMTIsIDEwMSwgODQsIDEwMSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA2MSwg
OTksIDExNywgOTgsIDEwMSwgNzcsIDk3LCAxMTIsIDY4LCAxMDUsIDEwOSwgMTAxLCAxMTAsIDEx
NSwgMTA1LCAxMTEsIDExMCwgODAsIDEwNSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA0MiwgMTA5LCAx
MDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDEx
OCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwgMTExLCAxMTIsIDEwMSwgNTksIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTExLCAxMDAsIDYxLCAxMDgs
IDExMSwgMTAzLCA1MCwgNDAsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQs
IDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDgzLCAx
MDgsIDExMSwgMTEyLCAxMDEsIDg0LCAxMDEsIDEyMCwgMTAxLCAxMDgsIDExNSwgNDEsIDU5LCAx
MywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDgsIDExMSwgMTAwLCA1
OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMywg
MTAxLCAxMTYsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA3NiwgMTExLCAxMDAsIDcwLCAx
MTQsIDExMSwgMTA5LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUs
IDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExNywgOTgsIDEwMSwgNzcsIDk3
LCAxMTIsIDY4LCAxMDUsIDEwOSwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTEsIDExMCwgODAsIDEw
NSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEx
NCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCAzMiwgMTIzLCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDExMSwgMTAwLCA2MSwgMTA4
LCAxMTEsIDEwMywgNTAsIDQwLCA5OSwgMTE3LCA5OCwgMTAxLCA3NywgOTcsIDExMiwgNjgsIDEw
NSwgMTA5LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExMSwgMTEwLCA4MCwgMTA1LCAxMjAsIDEwMSwg
MTA4LCAxMTUsIDQxLCA0MiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUs
IDExNSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwOCwg
MTExLCAxMDAsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAx
MTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDc5LCA5OSwgOTksIDEwOCwg
MTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
OTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDEx
NSwgMTA1LCAxMTEsIDExMCwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAw
LCAxMTEsIDExNiwgODYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAs
IDQxLCAzMiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTYsIDEw
MSwgMTA5LCAxMTIsIDYxLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDg1LCAxMTAsIDk5LCAxMDgs
IDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDQzLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwg
MTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEw
LCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE1LCA5NywgMTE2LCAxMTcsIDEx
NCwgOTcsIDExNiwgMTAxLCA0MCwgMTE1LCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCA0MCwgMTE2
LCAxMDEsIDEwOSwgMTEyLCA0MSwgNDUsIDQ5LCA0NiwgNDgsIDQzLCA5NywgMTA5LCA5OCwgMTA1
LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEw
LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwg
NzIsIDExMSwgMTE0LCAxMDUsIDEyMiwgMTExLCAxMTAsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAx
MTUsIDEwNSwgMTExLCAxMTAsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCAxMDUsIDEw
MSwgMTE5LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcs
IDEwOCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2MSwgMTE0LCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDQ0LCAxMTAsIDEx
MSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTE2LCAxMDEsIDEwOSwgMTEyLCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwg
OTcsIDExNiwgMTAxLCA0MCwgNDksIDQ2LCA0OCwgNDMsIDQ5LCA0NiwgNDksIDQyLCAxMDAsIDEx
MSwgMTE2LCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDQ0LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCA0MSwgNTksIDEzLCAxMCwg
MTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNSwgMTEzLCAxMTcsIDk3LCAxMTQs
IDEwMSwgNDAsIDExNiwgMTAxLCAxMDksIDExMiwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEyLCA5NywgMTE0LCA5NywgMTA4LCAxMDgsIDk3LCAx
MjAsIDY3LCAxMTEsIDExNCwgMTE0LCAxMDEsIDk5LCAxMTYsIDc4LCAxMTEsIDExNCwgMTA5LCA5
NywgMTA4LCA0MCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwMSwgMTE0LCAxMTYs
IDEwMSwgMTIwLCA4MCwgMTExLCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTExLCAx
MTQsIDEwNSwgMTAzLCA4NiwgMTAxLCA5OSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwg
MTE3LCA5OCwgMTAxLCA4MywgMTA1LCAxMjIsIDEwMSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCA5OSwgMTE3LCA5OCwgMTAxLCA4MCwgMTExLCAxMTUsIDMyLCA0MSwgMzIsIDEyMywgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCAxMTAsIDExOCwgNzksIDExNCwgMTA1LCAxMDMs
IDg2LCAxMDEsIDk5LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ5LCA0NiwgNDgsIDQ0LCA0
OSwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwgNDEsIDQ3LCAxMTEsIDExNCwgMTA1LCAxMDMsIDg2
LCAxMDEsIDk5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA0LCA5NywgMTA4
LCAxMDIsIDgzLCAxMDUsIDEyMiwgMTAxLCA2MSwgOTksIDExNywgOTgsIDEwMSwgODMsIDEwNSwg
MTIyLCAxMDEsIDQyLCA0OCwgNDYsIDUzLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNjUsIDExNiwgNzcsIDk3
LCAxMjAsIDgwLCAxMDgsIDk3LCAxMTAsIDEwMSwgNjEsIDQwLCA5OSwgMTE3LCA5OCwgMTAxLCA4
MCwgMTExLCAxMTUsIDQzLCAxMDQsIDk3LCAxMDgsIDEwMiwgODMsIDEwNSwgMTIyLCAxMDEsIDQ1
LCAxMTgsIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA4MCwgMTExLCAxMTUsIDQxLCA0MiwgMTA1
LCAxMTAsIDExOCwgNzksIDExNCwgMTA1LCAxMDMsIDg2LCAxMDEsIDk5LCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5
OSwgNjUsIDExNiwgNzcsIDEwNSwgMTEwLCA4MCwgMTA4LCA5NywgMTEwLCAxMDEsIDYxLCA0MCwg
OTksIDExNywgOTgsIDEwMSwgODAsIDExMSwgMTE1LCA0NSwgMTA0LCA5NywgMTA4LCAxMDIsIDgz
LCAxMDUsIDEyMiwgMTAxLCA0NSwgMTE4LCAxMDEsIDExNCwgMTE2LCAxMDEsIDEyMCwgODAsIDEx
MSwgMTE1LCA0MSwgNDIsIDEwNSwgMTEwLCAxMTgsIDc5LCAxMTQsIDEwNSwgMTAzLCA4NiwgMTAx
LCA5OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgOTcsIDExNCwgMTAz
LCAxMDEsIDExNSwgMTE2LCA3MywgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDYx
LCAxMDksIDk3LCAxMjAsIDQwLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5
LCA2NSwgMTE2LCA3NywgOTcsIDEyMCwgODAsIDEwOCwgOTcsIDExMCwgMTAxLCA0NCwgMTA1LCAx
MTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNjUsIDExNiwgNzcsIDEwNSwgMTEwLCA4
MCwgMTA4LCA5NywgMTEwLCAxMDEsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTAwLCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTA5LCAx
MDUsIDExMCwgNDAsIDEwOSwgMTA1LCAxMTAsIDQwLCAxMDgsIDk3LCAxMTQsIDEwMywgMTAxLCAx
MTUsIDExNiwgNzMsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCA0NiwgMTIwLCA0
NCwgMTA4LCA5NywgMTE0LCAxMDMsIDEwMSwgMTE1LCAxMTYsIDczLCAxMTAsIDExNiwgMTAxLCAx
MTQsIDExNSwgMTAxLCA5OSwgNDYsIDEyMSwgNDEsIDQ0LCAxMDgsIDk3LCAxMTQsIDEwMywgMTAx
LCAxMTUsIDExNiwgNzMsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCA0NiwgMTIy
LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgMTEwLCAxMTYsIDEw
MSwgMTE0LCAxMTUsIDEwMSwgOTksIDExNiwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAx
MTEsIDExMCwgODcsIDgzLCA2MSwgMTE4LCAxMDEsIDExNCwgMTE2LCAxMDEsIDEyMCwgODAsIDEx
MSwgMTE1LCA0MywgMTExLCAxMTQsIDEwNSwgMTAzLCA4NiwgMTAxLCA5OSwgNDIsIDEwMCwgMTA1
LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTks
IDExNiwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDgzLCA0NSwg
OTksIDExNywgOTgsIDEwMSwgODAsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA3
MCwgMTA1LCAxMjAsIDEwMSwgMTAwLCA2OSwgMTEzLCAxMTcsIDEwNSwgMTE0LCAxMDEsIDk5LCAx
MTYsIDk3LCAxMTAsIDEwMywgMTE3LCAxMDgsIDk3LCAxMTQsIDY3LCAxMTEsIDExMSwgMTE0LCAx
MDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEw
MCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQs
IDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQxLCAx
MywgMTAsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMTEs
IDExMCwgNjEsIDk3LCAxMTYsIDk3LCAxMTAsIDQwLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjIsIDQ0LCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTA4LCA5NywgMTE2LCA2MSwgOTcsIDk5LCAxMTEsIDExNSwgNDAsIDEw
MCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDYsIDEyMSwgNDEsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwg
MTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0
MCwgMTA4LCAxMTEsIDExMCwgNDQsIDEwOCwgOTcsIDExNiwgNDEsIDQyLCA4MiwgNjksIDY3LCA3
MywgODAsIDgyLCA3OSwgNjcsIDY1LCA3NiwgOTUsIDgwLCA3MywgNTAsIDQyLCA1MCwgNDYsIDQ4
LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCA2MSwgMTE1LCAx
MTIsIDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0Niwg
MTIwLCA0MiwgNDgsIDQ2LCA1MywgNDMsIDQ4LCA0NiwgNTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTYsIDYxLCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAx
LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ2LCAxMjEsIDU5LCAxMywgMTAsIDExNCwg
MTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE1LCA0
NCwgMTE2LCA0NCwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA3NywgMTA1LCAxMTQs
IDExNCwgMTExLCAxMTQsIDEwMSwgMTAwLCA3MCwgMTA1LCAxMjAsIDEwMSwgMTAwLCA2OSwgMTEz
LCAxMTcsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDEwMywgMTE3LCAxMDgsIDk3
LCAxMTQsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIs
IDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwg
OTcsIDEwOCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMTEsIDExMCwgNjEsIDk3LCAxMTYsIDk3LCAxMTAsIDQw
LCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjIsIDQ0
LCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjAsIDQx
LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCA5NywgMTE2LCA2
MSwgOTcsIDk5LCAxMTEsIDExNSwgNDAsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNDYsIDEyMSwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMy
LCAxMTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAx
MTUsIDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgMTA4LCAxMTEsIDExMCwgNDQsIDEwOCwgOTcs
IDExNiwgNDEsIDQyLCA4MiwgNjksIDY3LCA3MywgODAsIDgyLCA3OSwgNjcsIDY1LCA3NiwgOTUs
IDgwLCA3MywgNTAsIDQyLCA1MCwgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTE1LCA2MSwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDEx
MSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NiwgMTIwLCA0MiwgNDgsIDQ2LCA1MywgNDMsIDQ4LCA0
NiwgNTMsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTYsIDYxLCAx
MTUsIDExMiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUs
IDQ2LCAxMjEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAx
MTgsIDEwMSwgOTksIDUxLCA0MCwgNDksIDQ2LCA0OCwgNDUsIDExNSwgNDQsIDExNiwgNDQsIDQ4
LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwg
MTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjksIDExMywgMTE3LCAxMDUsIDExNCwgMTAx
LCA5OSwgMTE2LCA5NywgMTEwLCAxMDMsIDExNywgMTA4LCA5NywgMTE0LCA2NywgMTExLCAxMTEs
IDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwg
MTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTksIDEx
MSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1
LCAxMTEsIDExMCwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAs
IDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDk3LCAx
MDksIDEwMSwgMTE0LCA5NywgODQsIDExMSwgODYsIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA2
MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE5LCAx
MTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDYsIDEyMCwgMTIxLCAxMjIsIDQ1LCAx
MDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0MSwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgNjEsIDExMCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAx
LCA5OSwgMTE2LCA0MCwgOTksIDk3LCAxMDksIDEwMSwgMTE0LCA5NywgODQsIDExMSwgODYsIDEw
MSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA0NCwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAx
MTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgNjEsIDExOCwg
MTAxLCA5OSwgNTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTksIDUy
LCA0MCwgMTE0LCA0NCwgNDgsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDEwOCwgMTExLCAxMTAsIDYxLCA5NywgMTE2LCA5NywgMTEwLCA0MCwgMTE0LCA0
NiwgMTIyLCA0NCwgMTE0LCA0NiwgMTIwLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDEwOCwgOTcsIDExNiwgNjEsIDk3LCA5OSwgMTExLCAxMTUsIDQwLCAxMTQs
IDQ2LCAxMjEsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1LCAxMTIs
IDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE4
LCAxMDEsIDk5LCA1MCwgNDAsIDEwOCwgMTExLCAxMTAsIDQ0LCAxMDgsIDk3LCAxMTYsIDQxLCA0
MiwgODIsIDY5LCA2NywgNzMsIDgwLCA4MiwgNzksIDY3LCA2NSwgNzYsIDk1LCA4MCwgNzMsIDUw
LCA0MiwgNTAsIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDExNSwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0
LCAxMDAsIDExNSwgNDYsIDEyMCwgNDIsIDQ4LCA0NiwgNTMsIDQzLCA0OCwgNDYsIDUzLCA1OSwg
MTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE2LCA2MSwgMTE1LCAxMTIsIDEw
NCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NiwgMTIxLCA1
OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5
LCA1MSwgNDAsIDExNSwgNDQsIDExNiwgNDQsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEw
MSwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNjcsIDExMSwgMTEx
LCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQs
IDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAx
MTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTA5LCA5
NywgMTE2LCA1MiwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNDQsIDEwOSwgOTcsIDExNiwgNTIs
IDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcs
IDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDYxLCAxMTAs
IDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTgsIDEwMSwgOTks
IDUxLCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA0MiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAs
IDgwLCAxMTEsIDExNSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCAxMDUsIDEwMSwgMTE5LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNjEsIDExMCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwg
NTEsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTE5
LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwgNDgs
IDQ2LCA0OCwgNDEsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
NCwgNjEsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA0MCwgMTE4LCAxMDUsIDEw
MSwgMTE5LCA2OCwgMTA1LCAxMTQsIDQ0LCAxMTgsIDEwNSwgMTAxLCAxMTksIDc4LCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCA0MSwgNTksIDEzLCAxMCwgMTE0LCA2MSwgMTE4LCAxMDEsIDk5LCA1
MSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTQs
IDQ0LCA0OCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDQ2LCAxMjIsIDYxLCAxMTQsIDQ2LCAx
MjIsIDQ1LCA0OSwgNDYsIDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTA5LCA2MSwgNTAsIDQ2LCA0OCwgNDIsIDEwOCwgMTAxLCAxMTAsIDEwMywgMTE2LCAxMDQs
IDQwLCAxMTQsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAz
MiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNCwgNDYsIDEyMCwgNDcsIDEwOSwgNDMsIDQ4LCA0
NiwgNTMsIDQ0LCA0OSwgNDYsIDQ4LCA0NSwgMTE0LCA0NiwgMTIxLCA0NywgMTA5LCA0NSwgNDgs
IDQ2LCA1MywgNDQsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgODAsIDEwOCwgOTcs
IDExMCwgOTcsIDExNCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEs
IDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTIxLCAxMDEs
IDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMDksIDk3LCAxMTYs
IDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA2MSwg
MTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDYsIDEyMCwgMTIxLCAxMjIs
IDQ1LCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTExLCAxMTQsIDEw
MCwgMTE1LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0
MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDQwLCAxMTgsIDEwNSwgMTAxLCAx
MTksIDY4LCAxMDUsIDExNCwgNDQsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAx
MTQsIDEwOSwgOTcsIDEwOCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcs
IDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
NDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ0
LCA0OSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2NywgMTE3LCA5OCwgMTA1LCA5
OSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIs
IDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5Nywg
MTA4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTIxLCAxMDEsIDgwLCAxMTEsIDEx
NSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0
LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2
LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA2MSwgMTEwLCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE5LCAxMTEsIDExNCwgMTA4LCAx
MDAsIDgwLCAxMTEsIDExNSwgNDYsIDEyMCwgMTIxLCAxMjIsIDQ1LCAxMDEsIDEyMSwgMTAxLCA4
MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0MSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwg
MTA1LCAxMTQsIDQ0LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDks
IDk3LCAxMDgsIDQxLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYx
LCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEs
IDk5LCA1MiwgNDAsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDQsIDQ4LCA0MSwgNDEs
IDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTExLCAx
MTEsIDExNCwgMTAwLCAxMTUsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY3LCAxMTcsIDk4LCAx
MDUsIDk5LCA3NiwgMTExLCA5OSwgOTcsIDEwOCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1
LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwg
MTExLCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAx
MDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDEwMSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0
LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0NCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA4MywgMTA1LCAxMjIsIDEwMSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODAsIDExMSwgMTE1LCAx
MDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgNjEsIDExMCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExOSwgMTExLCAxMTQs
IDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NSwgMTAxLCAxMjEs
IDEwMSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDEsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYx
LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgNDAsIDExOCwgMTA1LCAxMDEsIDEx
OSwgNjgsIDEwNSwgMTE0LCA0NCwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCA0MSwgNTksIDEzLCAxMCwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwg
MTE1LCA2MSwgMTEyLCA5NywgMTE0LCA5NywgMTA4LCAxMDgsIDk3LCAxMjAsIDY3LCAxMTEsIDEx
NCwgMTE0LCAxMDEsIDk5LCAxMTYsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MCwgMTE5
LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDYsIDEyMCwgMTIxLCAxMjIsIDQ0
LCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ0LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEw
MSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDEwNSwgMTIyLCAxMDEsIDQ0LCAxMTQsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODAsIDExMSwgMTE1LCAx
MDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDEsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMSwgMTE0
LCAxMDAsIDExNSwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAs
IDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0
NCwgNDgsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwg
MzIsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwg
ODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwg
MTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAx
MTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE4
LCAxMDUsIDEwMSwgMTE5LCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUs
IDEyMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAx
MTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgNDAs
IDExOCwgMTA1LCAxMDEsIDExOSwgNDIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTEx
LCAxMTUsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgODMsIDEwNywgMTIxLCA2Niwg
MTExLCAxMjAsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDQ0LCAx
MDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTMsIDEwLCAxMjMs
IDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwg
NTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwg
NzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTEy
LCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA0NCwgNDgsIDQxLCA0MSwg
NTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAx
MDksIDExMiwgMTE3LCAxMTYsIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEs
IDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ0LCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2Nywg
MTE3LCA5OCwgMTA1LCA5OSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0MCwgMTE5LCAx
MTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOSwgMTExLCAxMTQsIDEwOCwg
MTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwgNjksIDEyMSwgMTAxLCA4
MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIwLCAxMjEsIDEyMiwg
NDQsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcs
IDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA2OCwgNjksIDcwLCA3Mywg
NzgsIDczLCA4NCwgNzMsIDc5LCA3OCwgODMsIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDEx
NywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEs
IDMyLCA0OCwgNDEsIDMyLCAxMTEsIDExNywgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MiwgMzIs
IDEwMywgMTA4LCA3MCwgMTE0LCA5NywgMTAzLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwg
MTAsIDExOCwgMTExLCAxMDUsIDEwMCwgMzIsIDEwOSwgOTcsIDEwNSwgMTEwLCA0MCwgMTE4LCAx
MTEsIDEwNSwgMTAwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3
MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA3NywgNjUsIDczLCA3OCwgOTUsIDY2LCA2OSwgNzEsIDcz
LCA3OCwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2
OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDYxLCAxMTAsIDEx
MSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTgsIDY5LCAxMjEsIDEw
MSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDYsIDEyMCwgMTIxLCAx
MjIsIDQ1LCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA0
MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwgMTExLCAxMTQsIDEwOSwg
OTcsIDEwOCwgODcsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAx
MDEsIDQwLCAxMTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNDEsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTcsIDExOCwgNzksIDEwMiwgMTAyLCAxMTUsIDEw
MSwgMTE2LCA2MSwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDQ4LCA0NiwgNDgsIDQ0LCA0OCwgNDYs
IDQ4LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNSwgMTE3LCAxMTQs
IDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA2MSwgMTE4LCA2
NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDEx
NCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAx
MDgsIDExMiwgMTA0LCA5NywgNjEsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDY3
LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCA5NywgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgy
LCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA5NSwgODUsIDgwLCA2OCwgNjUsIDg0LCA2OSwgOTUs
IDY1LCA3NiwgNjYsIDY5LCA2OCwgNzksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2NSwgNzEs
IDc3LCA2OSwgNzgsIDg0LCA5NSwgODUsIDgwLCA2OCwgNjUsIDg0LCA2OSwgOTUsIDY1LCA3Niwg
ODAsIDcyLCA2NSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwg
ODQsIDk1LCA2NiwgNjksIDcwLCA3OSwgODIsIDY5LCA5NSwgNzYsIDczLCA3MSwgNzIsIDg0LCA4
MywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAx
MTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNjcsIDEx
MSwgMTA4LCAxMTEsIDExNCwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0OSwgNDYsIDQ0LCA0
OSwgNDYsIDQ0LCA0OSwgNDYsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwg
MTAxLCA2MSwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwg
MTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDk3LCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwg
ODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEs
IDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0
LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTA5
LCAxMDEsIDExNiwgOTcsIDEwOCwgMTA4LCAxMDUsIDk5LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0
LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDYxLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAx
LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEy
MSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA1OSwgMTMsIDEwLCAzNSwg
MTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcs
IDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA4NSwgODAsIDY4LCA2NSwg
ODQsIDY5LCA5NSwgNzcsIDY5LCA4NCwgNjUsIDc2LCA3NiwgNzMsIDY3LCA4MiwgNzksIDg1LCA3
MSwgNzIsIDc4LCA2OSwgODMsIDgzLCAxMywgMTAsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDgz
LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjEsIDQ5LCA0NiwgNDgsIDQ1LCAxMDksIDEw
MSwgMTE2LCA5NywgMTA4LCAxMDgsIDEwNSwgOTksIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDEx
MCwgMTAxLCAxMTUsIDExNSwgNDYsIDEwMywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDk4LCA5NywgMTE1LCAxMDEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCAxMTUsIDEx
NywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNTks
IDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCA2OCwgMTAxLCAxMDIsIDk3LCAxMTcsIDEwOCwgMTE2LCA4MywgMTEyLCAxMDEsIDk5LCAxMTcs
IDEwOCwgOTcsIDExNCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwg
OTksIDEwMSwgNjgsIDEwNSwgMTAxLCAxMDgsIDEwMSwgOTksIDExNiwgMTE0LCAxMDUsIDk5LCA2
MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ4LCA0NiwgNDgsIDUyLCA0NCwgNDgsIDQ2LCA0OCwg
NTIsIDQ0LCA0OCwgNDYsIDQ4LCA1MiwgNDEsIDU5LCAxMywgMTAsIDExNSwgMTE3LCAxMTQsIDEw
MiwgOTcsIDk5LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA2MSwgMTA5LCAxMDUs
IDEyMCwgNDAsIDk4LCA5NywgMTE1LCAxMDEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAx
MTQsIDEwMywgOTgsIDQyLCA0MCwgNDksIDQ2LCA0OCwgNDUsIDY4LCAxMDEsIDEwMiwgOTcsIDEx
NywgMTA4LCAxMTYsIDgzLCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA4MiwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2OCwgMTA1LCAxMDEs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMTQsIDEwNSwgOTksIDQ2LCAxMTQsIDQxLCA0NCwgMTE4LCAx
MDEsIDk5LCA1MSwgNDAsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDEsIDQ0LCAx
MDksIDEwMSwgMTE2LCA5NywgMTA4LCAxMDgsIDEwNSwgOTksIDgyLCAxMTEsIDExNywgMTAzLCAx
MDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDYsIDExNCwgNDEsIDU5LCAxMywgMTAsIDExNSwgMTE3
LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgMTA5
LCAxMDUsIDEyMCwgNDAsIDY4LCAxMDEsIDEwMiwgOTcsIDExNywgMTA4LCAxMTYsIDgzLCAxMTIs
IDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2OCwgMTA1LCAxMDEsIDEwOCwgMTAxLCA5OSwgMTE2LCAx
MTQsIDEwNSwgOTksIDQ0LCA5OCwgOTcsIDExNSwgMTAxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0
LCA0NCwgMTA5LCAxMDEsIDExNiwgOTcsIDEwOCwgMTA4LCAxMDUsIDk5LCA4MiwgMTExLCAxMTcs
IDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQ2LCAxMTQsIDQxLCA1OSwgMTMsIDEwLCAx
MDksIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDYx
LCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMDksIDEwNSwgOTks
IDExNCwgMTExLCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDQxLCA1OSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDEx
MCwgMTAxLCAxMTUsIDExNSwgNjEsIDQ5LCA0NiwgNDUsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEs
IDgzLCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgODUsIDExMCwgOTksIDEwOCwg
OTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNjEsIDEwMCwgMTExLCAxMTYsIDQwLCAxMTAsIDExMSwg
MTE0LCAxMDksIDk3LCAxMDgsIDg3LCA0NCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAx
MTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDQxLCA1OSwgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA2MSwgOTcsIDk4
LCAxMTUsIDY5LCAxMTIsIDExNSwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgODUsIDExMCwg
OTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA2MSwgOTksIDEx
MSwgMTEwLCAxMTgsIDEwMSwgMTE0LCAxMTYsIDgyLCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwg
MTAxLCAxMTUsIDExNSwgODQsIDExMSwgNjUsIDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwg
ODMsIDEwOCwgMTExLCAxMTIsIDEwMSwgNDAsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAs
IDEwMSwgMTE1LCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgNjUs
IDY1LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDcwLCA5Nywg
OTksIDExNiwgMTExLCAxMTQsIDExNSwgNjEsIDEwMywgMTAxLCAxMTYsIDY1LCA2NSwgODIsIDEx
MSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA3MCwgOTcsIDk5LCAxMTYsIDEx
MSwgMTE0LCAxMTUsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA0NiwgMTIw
LCAxMjEsIDEyMiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMDEsIDEx
MCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAx
MDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCA0OCwg
NDYsIDQ0LCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQxLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAx
MDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5
OSwgMTAxLCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ4LCA0NiwgNDQsIDQ4LCA0NiwgNDQs
IDQ4LCA0NiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODYsIDEwMSwgOTksIDExNiwg
MTExLCAxMTQsIDYxLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgODIsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTExLCAxMTQs
IDEwMCwgMTE1LCA0MCwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExOCwgODAsIDExMSwgMTE1LCAx
MDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgNDQsIDExMCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgNTks
IDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgNzksIDY4LCA2MSwgMTAzLCAxMDEsIDEx
NiwgNzYsIDExMSwgMTAwLCA3MCwgMTE0LCAxMTEsIDEwOSwgNjUsIDEwOCwgMTEyLCAxMDQsIDk3
LCA3MSwgNDAsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwg
MTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0NiwgMTIwLCA0NCwgOTcsIDEwOCwgMTEyLCAx
MDQsIDk3LCA3MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgNzksIDY4LCA2MSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2LCA3OSwgNjgsIDQyLCAxMTgsIDgyLCAxMDEs
IDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQs
IDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEs
IDExNSwgNDYsIDEyMSwgNDMsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIs
IDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0NiwgMTIyLCA1OSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDExMywgMTE3LCAxMDEsIDEx
NSwgMTE2LCAxMDEsIDEwMCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgNzYsIDc5LCA2OCwgNjEsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA3NiwgNzksIDY4LCA1OSwgMTMsIDEwLCAxMDEsIDExMCwgMTE4LCAx
MDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwg
OTcsIDExMCwgOTksIDEwMSwgNjEsIDExNSwgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgODIsIDEw
MSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzYsIDExMSwgMTAwLCA0
MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5
NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQ0LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NCwg
MTE0LCAxMDEsIDExMywgMTE3LCAxMDEsIDExNSwgMTE2LCAxMDEsIDEwMCwgODIsIDEwMSwgMTAy
LCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzYsIDc5LCA2OCwgNDEsIDU5LCAx
MywgMTAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwg
MTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0NiwgMTE0LCAxMDMsIDk4
LCA2MSwgMTAyLCAxMTQsIDExMSwgMTA5LCA4MiwgNzEsIDY2LCA2OCwgNDAsIDEwMSwgMTEwLCAx
MTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwg
MTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0MSwgNTksIDEzLCAxMCwgMTAxLCAxMTAsIDExOCwgMTA1
LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDczLCAxMTQsIDExNCwgOTcsIDEw
MCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTE4LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0
LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA3MywgMTE0LCAxMTQsIDk3LCAxMDAsIDEw
NSwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQs
IDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAs
IDk5LCAxMDEsIDQ2LCAxMTQsIDEwMywgOTgsIDQyLCA2MSwgMTE4LCA4MiwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA0
NiwgMTIwLCA1OSwgMTMsIDEwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEw
OSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDYs
IDExNCwgMTAzLCA5OCwgNDIsIDYxLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEwMywg
OTgsIDU5LCAxMywgMTAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAx
MDEsIDExMCwgMTE2LCA3MywgMTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEw
MSwgNDIsIDYxLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDEwOSwgOTcsIDEyMCwgNDAsIDEwOSwgOTcs
IDEyMCwgNDAsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgs
IDExMSwgMTE0LCA0NiwgMTE0LCA0NCwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwg
ODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEs
IDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMDMsIDQxLCA0NCwgMTE1LCAxMTcsIDExNCwg
MTAyLCA5NywgOTksIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCA5OCwgNDEsIDU5
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTcsIDQ4LCA2MSwgMTAyLCAxMTQsIDEw
MSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA3MSwgMTE0LCA5NywgMTIyLCAxMDUsIDExMCwgMTAzLCA4
MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0MCwgMTE0
LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQxLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4
LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDEx
MCwgMTE2LCA4MiwgNDgsIDYxLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjks
IDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDU3
LCA0OCwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0OSwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0
OCwgNDQsIDQ5LCA0NiwgNDgsIDQxLCA0MiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwg
MTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNjEsIDEwMywgMTAxLCAxMTYsIDY2LCA4MiwgNjgsIDcw
LCA3NiwgMTExLCAxMTEsIDEwNywgMTE3LCAxMTIsIDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgODYs
IDQ0LCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTEwLCAxMDEsIDExNCwgMTAzLCAx
MjEsIDY3LCAxMTEsIDExMCwgMTE1LCAxMDEsIDExNCwgMTE4LCA5NywgMTE2LCAxMDUsIDExMSwg
MTEwLCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCA2MSwgMTAzLCAxMDEsIDExNiwgNjksIDEx
MCwgMTAxLCAxMTQsIDEwMywgMTIxLCA2NywgMTExLCAxMTAsIDExNSwgMTAxLCAxMTQsIDExOCwg
OTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzAsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwgNDAsIDEx
NSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDEx
NCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDQ4LCA0NCwgMTAxLCAxMTAsIDEx
OCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwg
MTAyLCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMDIs
IDEwMiwgMTE3LCAxMTUsIDEwMSwgNjYsIDk3LCAxMTUsIDEwMSwgNjEsIDExOCwgMTAxLCA5OSwg
NTEsIDQwLCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQxLCA1OSwgMTMsIDEwLCAx
MTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3Mywg
MTEwLCAxMDIsIDExMSwgMzIsIDExMiwgMTE0LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCA1OSwg
MTMsIDEwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwg
MTAyLCAxMTEsIDMyLCAxMDUsIDExMCwgMTAyLCAxMTEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMTUsIDEwNCwgOTcsIDEwMCwgMTExLCAxMTksIDYxLCA0OSwgNDYs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3
LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEw
MSwgMTEwLCAxMTYsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5
LCAxMDEsIDYxLCAxMDMsIDEwMSwgMTE2LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2
LCA5NywgMTEwLCA5OSwgMTAxLCA3MCwgMTE0LCAxMTEsIDEwOSwgNjYsIDgyLCA2OCwgNzAsIDc2
LCAxMTEsIDExMSwgMTA3LCAxMTcsIDExMiwgNDAsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEw
OCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAx
MTAsIDExNiwgODIsIDQ4LCA0NCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAx
MDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA0MSwgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYs
IDc3LCAxMTEsIDExMCwgMTExLCA5OSwgMTA0LCAxMTQsIDExMSwgMTA5LCAxMDEsIDYxLCAxMDMs
IDEwMSwgMTE2LCA3NiwgMTE3LCAxMDksIDEwNSwgMTEwLCA5NywgMTEwLCA5OSwgMTAxLCA0MCwg
OTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDEx
NSwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDU5LCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDEwMSwgMTExLCA2MSwgMTAxLCAxMTAs
IDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5NywgMTAw
LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwg
MTExLCAxMTAsIDQwLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3NywgMTExLCAx
MTAsIDExMSwgOTksIDEwNCwgMTE0LCAxMTEsIDEwOSwgMTAxLCA0NCwgNzgsIDEwMCwgMTExLCAx
MTYsIDg2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA0MSwgNTks
IDEzLCAxMCwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAx
MTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0MiwgNjEsIDExNSwgMTAxLCAx
MTEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDEwNSwgMTEwLCA5Nywg
MTA4LCA3MywgMTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDEw
MSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA3Mywg
MTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTAy
LCAxMDUsIDExMCwgOTcsIDEwOCwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAs
IDk5LCAxMDEsIDQyLCA2MSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDEw
OCwgOTgsIDEwMSwgMTAwLCAxMTEsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4MiwgOTcsIDEwMCwgMTA1
LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEw
LCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEs
IDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDgy
LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQyLCA2MSwgMTE1LCAxMTIsIDEwMSwg
OTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwg
MTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMDUs
IDExMCwgOTcsIDEwOCwgODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgODMsIDk5
LCA5NywgMTA4LCAxMDEsIDEwMCwgNjEsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDgyLCA5Nywg
MTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQyLCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0LCAx
MTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTYs
IDEyMSwgNDYsIDEyMiwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODIsIDk3
LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgODMsIDk5LCA5NywgMTA4LCAxMDEsIDEwMCwg
NDIsIDYxLCAxMDEsIDExMCwgMTAxLCAxMTQsIDEwMywgMTIxLCA2NywgMTExLCAxMTAsIDExNSwg
MTAxLCAxMTQsIDExOCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzAsIDk3LCA5OSwgMTE2LCAx
MTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTA1LCAxMTAs
IDk3LCAxMDgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA2MSwgMTAwLCAxMDUs
IDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA2NiwgOTcsIDExNSwgMTAxLCA1OSwgMTMsIDEwLCAx
MDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwg
NDIsIDYxLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwgMTAx
LCAxMDAsIDExMSwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwg
OTcsIDEwOCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDYxLCAxMDksIDk3LCAx
MjAsIDQwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAx
MTUsIDEwMSwgNDQsIDQ4LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAs
IDExNiwgNjEsIDExOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNjcsIDExMSwg
MTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjUsIDEw
OSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNDIsIDYxLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3
LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwgMTAxLCAxMDAsIDExMSwgNDYsIDExNCwgMTAzLCA5OCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgs
IDY5LCAxMDksIDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDYxLCAxMTgsIDY5LCAxMDks
IDEwNSwgMTE1LCAxMTUsIDEwNSwgMTE4LCAxMDEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDEx
MCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA3MCwgMTEx
LCAxMTQsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3
LCAxMTUsIDEwMSwgNjEsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwg
OTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4
LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDEzLCAx
MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjUsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDEx
NiwgNDIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwg
MTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDMyLCA0Mywg
MTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAx
MTUsIDEwMSwgNDIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTks
IDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDcwLCAxMTEsIDExNCwgNjgsIDEwNSwgMTE0
LCAxMDEsIDk5LCAxMTYsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA0MiwgMTE4
LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYsIDEw
MSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDQ2LCAxMjAsIDMyLCA0MywgMTMsIDEwLCAxMDIs
IDEwNSwgMTEwLCA5NywgMTA4LCA3MywgMTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwg
OTksIDEwMSwgNDIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTks
IDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQy
LCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEx
NiwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTYsIDEyMSwgNDYsIDEyMiwgMzIsIDQzLCAxMywgMTAs
IDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAx
MDEsIDgzLCA5OSwgOTcsIDEwOCwgMTAxLCAxMDAsIDMyLCA0MywgMTMsIDEwLCAxMDIsIDEwNSwg
MTEwLCA5NywgMTA4LCA2OSwgMTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA0Miwg
MTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYs
IDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDQ2LCAxMjEsIDQ0LCAxMywgMTAsIDk3LCAx
MDgsIDExMiwgMTA0LCA5NywgNDEsIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcx
LCA3NywgNjksIDc4LCA4NCwgOTUsIDY2LCA2OSwgNzAsIDc5LCA4MiwgNjksIDk1LCA3MCwgNzks
IDcxLCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEsIDEwOCwgMTExLCAx
MTQsIDYxLCAxMDksIDk3LCAxMjAsIDQwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTEx
LCAxMDgsIDExMSwgMTE0LCA0NCwgNDgsIDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA1
LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCA5NywgMTEyLCAxMTIs
IDEwOCwgMTIxLCA3MywgMTA5LCA5NywgMTAzLCAxMDEsIDgwLCAxMTQsIDExMSwgOTksIDEwMSwg
MTE1LCAxMTUsIDEwNSwgMTEwLCAxMDMsIDQwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2Nywg
MTExLCAxMDgsIDExMSwgMTE0LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwgOTcsIDEw
OCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDk3LCA0MiwgNjEsIDExOCwgMTA1LCAxMTUs
IDEwNSwgOTgsIDEwNSwgMTA4LCAxMDUsIDExNiwgMTIxLCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3
MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA2NiwgNjksIDcwLCA3OSwgODIsIDY5
LCA5NSwgNzAsIDgyLCA2NSwgNzEsIDY3LCA3OSwgNzYsIDc5LCA4MiwgMTMsIDEwLCAxMDMsIDEw
OCwgNzAsIDExNCwgOTcsIDEwMywgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDEwMiwgMTA1
LCAxMTAsIDk3LCAxMDgsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwXS5tYXAoYyA9PiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKS5qb2luKCIiKTsKK2NvbnN0
IHZlcnRleFNoYWRlckdMU0wyID0gWzM1LCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwNSwgMTExLCAx
MTAsIDMyLCA1MiwgNTMsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA4MCwgNjYsIDgyLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA2NSwgNzYsIDY2LCA2OSwgNjgsIDc5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYs
IDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc3
LCA2NiwgNzMsIDY5LCA3OCwgODQsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIs
IDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3OSwgODAsIDY1
LCA2NywgNzMsIDg0LCA4OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3NiwgODAsIDcy
LCA2NSwgODQsIDY5LCA4MywgODQsIDg2LCA2NSwgNzYsIDg1LCA2OSwgMzIsIDQ4LCA0NiwgNTIs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA4MCwgNjksIDY3
LCA4NSwgNzYsIDY1LCA4MiwgNzksIDg2LCA2OSwgODIsIDY1LCA3NiwgODAsIDcyLCA2NSwgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY1LCA2OCwgNzMsIDY1
LCA3OCwgNjcsIDY5LCA3OSwgODYsIDY5LCA4MiwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2OSwgNzcsIDczLCA4MywgODMsIDcz
LCA4NiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3
LCA4NCwgNzMsIDg2LCA3MywgODQsIDg5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYs
IDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzYsIDc5
LCA2OCwgNjYsIDY1LCA4MywgNjksIDY4LCA3NywgNzMsIDY3LCA4MiwgNzksIDgzLCA3MCwgODUs
IDgyLCA2NSwgNjcsIDY5LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA3NywgNzMsIDY3LCA4MiwgNzksIDgzLCA4NSwgODIsIDcwLCA2NSwgNjcsIDY5LCA3NywgNjUs
IDgwLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAs
IDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjksIDc4LCA4NiwgNzMsIDgyLCA3OSwgNzgs
IDc3LCA2OSwgNzgsIDg0LCA2NiwgODIsIDY4LCA3MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAx
MDUsIDExMCwgMTAxLCAzMiwgNzgsIDc5LCA4MiwgNzcsIDY1LCA3NiwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjYsIDg1LCA3NywgODAsIDY4LCA3MywgODIsIDY5
LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA3OCwgNzksIDgyLCA3NywgNjUsIDc2LCA4OCwgODksIDgzLCA2NywgNjUsIDc2
LCA2OSwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzYsIDczLCA3
MSwgNzIsIDg0LCA3NywgNjUsIDgwLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMy
LCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY5LCA3
MCwgNzYsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA3
NywgNjUsIDgwLCA5NSwgNTEsIDY4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNzcsIDY1LCA4
MCwgOTUsIDgzLCA3NSwgODksIDY2LCA3OSwgODgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDgzLCA4MCwgNzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwgNzYsIDk1LCA3
MiwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNjcsIDgzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNzEsIDY2LCA2OCwgODIsIDY5LCA3MCwgNzYsIDY5LCA2
NywgODQsIDczLCA3OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDgyLCA2NSwgNjgsIDczLCA2NSwgNzgsIDY3LCA2OSwgNzksIDY3LCA2NywgNzYsIDg1LCA4
MywgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
NzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDc5LCA2NywgNjcsIDc2LCA4NSwgODMsIDczLCA3
OSwgNzgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA4NSwg
NzcsIDk1LCA2NiwgNzksIDc4LCA2OSwgOTUsIDczLCA3OCwgNzAsIDc2LCA4NSwgNjksIDc4LCA2
NywgNjksIDgyLCA4MywgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA2NiwgMTExLCAxMTAsIDEwMSwgMTE1LCA4MCwgMTAxLCAxMTQsIDc3LCAxMDEsIDEx
NSwgMTA0LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIs
IDc4LCA4NSwgNzcsIDk1LCA3NywgNzksIDgyLCA4MCwgNzIsIDk1LCA3MywgNzgsIDcwLCA3Niwg
ODUsIDY5LCA3OCwgNjcsIDY5LCA4MiwgODMsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAy
LCAxMDUsIDExMCwgMTAxLCAzMiwgODYsIDczLCA3MSwgNzgsIDY5LCA4NCwgODQsIDY5LCA2Niwg
NzYsIDY5LCA3OCwgNjgsIDc3LCA3OSwgNjgsIDY5LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3
NiwgODksIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA2NSwg
NzcsIDgwLCA3NiwgNjksIDgyLCA1MSwgNjgsIDcxLCA4MiwgNjksIDY5LCA3OCwgNjgsIDY5LCA4
MCwgODQsIDcyLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4Mywg
NjUsIDc3LCA4MCwgNzYsIDY5LCA4MiwgNTEsIDY4LCA2NiwgNzEsIDgyLCA3NywgNjUsIDgwLCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4NSwgODMsIDY5LCA4MCwg
NzIsIDg5LCA4MywgNzMsIDY3LCA2NSwgNzYsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzAsIDY1LCA3
NiwgNzYsIDc5LCA3MCwgNzAsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDg0LCA4NywgNzksIDgzLCA3MywgNjgsIDY5LCA2OCwgNzYsIDczLCA3MSwgNzIsIDg0LCA3
MywgNzgsIDcxLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2Nywg
NzYsIDY5LCA2NSwgODIsIDY3LCA3OSwgNjUsIDg0LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4
MiwgNjksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3
OSwgNjUsIDg0LCA5NSwgNjYsIDg1LCA3NywgODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1
LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2
NywgNzYsIDY5LCA2NSwgODIsIDY3LCA3OSwgNjUsIDg0LCA5NSwgODQsIDczLCA3OCwgODQsIDk1
LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUs
IDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1
LCA3OCwgNzMsIDgzLCA3OSwgODQsIDgyLCA3OSwgODAsIDczLCA2NywgOTUsIDg0LCA2OSwgODgs
IDg0LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjYsIDgyLCA2OCwgNzAs
IDk1LCA4NiwgOTUsIDcyLCA2OSwgNzMsIDcxLCA3MiwgODQsIDk1LCA2NywgNzksIDgyLCA4Miwg
NjksIDc2LCA2NSwgODQsIDY5LCA2OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNzcsIDgzLCA5NSwgNjYsIDgyLCA2OCwgNzAsIDk1LCA2OSwgNzgsIDY5LCA4Miwg
NzEsIDg5LCA5NSwgNjcsIDc5LCA3OCwgODMsIDY5LCA4MiwgODYsIDY1LCA4NCwgNzMsIDc5LCA3
OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDcyLCA2OSwg
NjksIDc4LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5LCA2
NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCA4MywgODMsIDk1LCA4NCwgNzIsIDczLCA2NywgNzUsIDc4LCA2OSwgODMsIDgzLCA2
NSwgNzgsIDY4LCA3NywgNjUsIDgzLCA3NSwgOTUsIDg0LCA2OSwgODgsIDg0LCA4NSwgODIsIDY5
LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjgsIDY5LCA2NiwgODUsIDcxLCA3NywgNzksIDY4
LCA2OSwgMzIsIDQ4LCAxMCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAz
MiwgODMsIDcyLCA2NSwgNjgsIDY5LCA4MiwgOTUsIDc4LCA2NSwgNzcsIDY5LCAzMiwgMTE4LCAx
MDEsIDExNCwgMTE2LCAxMDEsIDEyMCwgNTgsIDExMiwgOTgsIDExNCwgMTAsIDExMiwgMTE0LCAx
MDEsIDk5LCAxMDUsIDExNSwgMTA1LCAxMTEsIDExMCwgMzIsIDEwNCwgMTA1LCAxMDMsIDEwNCwg
MTEyLCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIx
LCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMTYsIDEwMCwgNDksIDUyLCA0OCwgNDQsIDk5LCAx
MTEsIDEwOCwgMTE3LCAxMDksIDExMCwgOTUsIDEwOSwgOTcsIDEwNiwgMTExLCAxMTQsIDQxLCAz
MiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCA1OSwgMTMsIDEwLCAxMDgsIDk3
LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA0OCwg
NDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDgs
IDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgODMsIDk5LCAx
MDEsIDExMCwgMTAxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwg
MTE4LCAxMDUsIDEwMSwgMTE5LCA4MCwgMTE0LCAxMTEsIDEwNiwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE4LCAxMDUsIDEw
MSwgMTE5LCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAx
MTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ5LCA0NCwgMzIsIDk4LCAx
MDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAxMTcs
IDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCA3NywgOTcsIDExNiwgMTAxLCAxMTQs
IDEwNSwgOTcsIDEwOCwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIs
IDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY1LCAxMDksIDk4LCAxMDUs
IDEwMSwgMTEwLCAxMTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc5LCAxMTIsIDk3LCA5OSwgMTA1LCAxMTYsIDEyMSwgNzMs
IDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDEx
OCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNzMsIDExMCwgMTAyLCAx
MTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNzYsIDEwNSwg
MTAzLCAxMDQsIDExNiwgMTA5LCA5NywgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAx
LCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNzMsIDExMCwgMTAyLCAxMTEsIDEx
NSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNzcsIDEwNSwgOTksIDEx
NCwgMTExLCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgzLCA5NywgMTA5LCAxMTIs
IDEwOCwgMTAxLCAxMTQsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTAsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCAxMDUsIDEyMiwgMTAxLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2NiwgMTE3LCAxMDksIDExMiwgNzMsIDExMCwgMTAyLCAx
MTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAxMDgsIDk4LCAx
MDEsIDEwMCwgMTExLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5
LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc3LCA5
NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwg
MTExLCAxMTIsIDk3LCA5OSwgMTA1LCAxMTYsIDEyMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAx
MjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDEsIDEwOSwgMTA1LCAxMTUs
IDExNSwgMTA1LCAxMTgsIDEwMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywg
MTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA5LCA5
NywgMTEyLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTA5LCA5Nywg
MTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwg
MTA1LCAxMTYsIDEyMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEw
OSwgOTcsIDExNiwgNTIsIDMyLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQs
IDEwMiwgOTcsIDk5LCAxMDEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDc3LCA5
NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwg
OTgsIDExNywgMTA5LCAxMTIsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4NCwgOTcsIDExMCwgMTAzLCAxMDEsIDExMCwg
MTE2LCA4MywgMTEyLCA5NywgOTksIDEwMSwgODAsIDk3LCAxMTQsIDk3LCAxMDksIDExNSwgNTks
IDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEs
IDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMy
LCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEx
NiwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEs
IDExMCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwg
MTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDgzLCAxMDUsIDEyMiwgMTAxLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4LCAxMTEs
IDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjksIDEwOSwgMTA1
LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjksIDEyMSwgMTAxLCA4MCwgMTExLCAx
MTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgMTE4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA2NywgMTExLCAxMDgs
IDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2OCwgMTAx
LCA5OCwgMTE3LCAxMDMsIDc3LCAxMTEsIDEwMCwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYs
IDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIs
IDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODIsIDEw
MSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgOTcsIDExNCwgOTcs
IDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4
LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUs
IDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQs
IDY3LCAxMTEsIDk3LCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAx
MTEsIDk3LCAxMTYsIDY2LCAxMTcsIDEwOSwgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAx
MTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEwLCAxMTYsIDgz
LCAxMTIsIDk3LCA5OSwgMTAxLCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEw
LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2NywgMTExLCA5
NywgMTE2LCA2NiwgMTE3LCAxMDksIDExMiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDEx
NCwgNjcsIDExMSwgOTcsIDExNiwgODQsIDEwNSwgMTEwLCAxMTYsIDgwLCA5NywgMTE0LCA5Nywg
MTA5LCAxMTUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTA4
LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDY1LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAx
MTEsIDk3LCAxMTYsIDg0LCAxMDUsIDExMCwgMTE2LCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1
OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2
NywgMTExLCA5NywgMTE2LCA4NCwgMTA1LCAxMTAsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1
LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY1LCAxMTAsIDEw
NSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEsIDExMiwgMTIxLCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUwLCAzMiwgMTE4LCA2NSwgMTEwLCAxMDUsIDExNSwgMTExLCAxMTYsIDExNCwgMTEx
LCAxMTIsIDEyMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5Nywg
MTE2LCA1MiwgMzIsIDk3LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEsIDExMiwg
MTIxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MiwgMzIsIDExOCwgODMsIDEwNCwgMTAxLCAxMDEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEs
IDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgODMsIDEwNCwgMTAx
LCAxMDEsIDExMCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5Nywg
MTE2LCA1MiwgMzIsIDExNSwgMTA0LCAxMDEsIDEwMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAx
MDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwg
MTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgMTA1LCA5OSwgMTE0LCAx
MTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCAx
MTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwg
MTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwg
NTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDExNCwgOTcs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4NCwgMTA0LCAxMDUsIDk5LCAxMDcs
IDExMCwgMTAxLCAxMTUsIDExNSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwg
MTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNiwgMTA0LCAxMDUsIDk5LCAxMDcsIDExMCwgMTAxLCAx
MTUsIDExNSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTAsIDMyLCAxMTgsIDg0LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAxMDEsIDExNSwg
MTE1LCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2OCwg
MTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MiwgMzIsIDExOCwgODQsIDEwNSwgMTEwLCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTcsIDk4LCA4Mywg
MTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwg
MTA1LCAxMTYsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMs
IDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ4LCA0OCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwg
MTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA5NSwgNDksIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgs
IDc2LCA0OSwgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAx
MTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgNDksIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEw
NSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgOTUsIDUwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA3
NiwgNTAsIDk1LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMs
IDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0OCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwg
MTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYs
IDUwLCA1MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwg
MTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODgsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAx
MDgsIDg5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAx
MDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA5MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEw
OCwgODgsIDg4LCA5NSwgOTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OSwgODksIDk1
LCA5MCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIs
IDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDkwLCA5MCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwg
OTcsIDEwOCwgODgsIDg5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4
MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OSwgOTAsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEw
NSwgOTksIDk3LCAxMDgsIDkwLCA4OCwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMsIDEwLCAxMDgs
IDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA0
OSwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwg
NDksIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgNzcsIDEw
MSwgMTE1LCAxMDQsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAx
MTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDExOCwgMTA1LCAxMTUsIDEwNSwgOTgsIDEwNSwgMTA4LCAxMDUsIDExNiwgMTIxLCA1
OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwg
MTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgOTUsIDg2LCA2OSwgODIsIDg0LCA2OSwg
ODgsIDk1LCA2NiwgNjksIDcxLCA3MywgNzgsIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDEx
NywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEs
IDMyLCA0OCwgNDEsIDMyLCAxMDUsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTIs
IDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTA4LCA5Nywg
MTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwg
MTEwLCAzMiwgNjEsIDMyLCA0OSwgNDEsIDMyLCAxMDUsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDU5LCAxMywgMTAsIDk5LCAxMTEs
IDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgODAsIDczLCA2
MSwgNTEsIDQ2LCA0OSwgNTIsIDQ5LCA1MywgNTcsIDUwLCA1NCwgNTMsIDUxLCA1MywgNTYsIDU3
LCA1NSwgNTcsIDUxLCA1MCwgNTEsIDU2LCA1MiwgNTQsIDUwLCA1NCwgNTIsIDUxLCA1MSwgNTYs
IDUxLCA1MCwgNTUsIDU3LCA1MywgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwg
MzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDEx
NCwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQsIDY1
LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNjEsIDUwLCA0NiwgNTAsIDU5LCAxMywgMTAsIDk5
LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzEs
IDk3LCAxMDksIDEwOSwgOTcsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA4MCwgMTExLCAx
MTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDYxLCA0OSwgNDYsIDQ4
LCA0NywgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwg
MTAxLCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAs
IDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgNzYsIDExNywgMTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEwMSwgNjksIDExMCwg
OTksIDExMSwgMTAwLCAxMDEsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNjEsIDExOCwg
MTAxLCA5OSwgNTEsIDQwLCA0OCwgNDYsIDUwLCA0OSwgNTAsIDU0LCA0NCwgNDgsIDQ2LCA1NSwg
NDksIDUzLCA1MCwgNDQsIDQ4LCA0NiwgNDgsIDU1LCA1MCwgNTAsIDQxLCA1OSwgMTMsIDEwLCA5
OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDY5
LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCA2MSwgNDgsIDQ2LCA0OCwgNDgsIDQ4LCA0
OCwgNDgsIDQ4LCA0OSwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAx
MDEsIDMyLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCAxMjAsIDQx
LCAzMiwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTIwLCA0NCwgNDgsIDQ2LCA0OCwgNDQs
IDQ5LCA0NiwgNDgsIDQxLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAx
LCAzMiwgOTcsIDk4LCAxMTUsIDY5LCAxMTIsIDExNSwgNDAsIDEyMCwgNDEsIDMyLCA5NywgOTgs
IDExNSwgNDAsIDEyMCwgNDEsIDQzLCA2OSwgMTEyLCAxMTUsIDEwNSwgMTA4LCAxMTEsIDExMCwg
MTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDEwOSwgOTcsIDEy
MCwgNjksIDExMiwgMTE1LCA0MCwgMTIwLCA0MSwgMzIsIDEwOSwgOTcsIDEyMCwgNDAsIDEyMCwg
NDQsIDY5LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCA0MSwgMTMsIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3
LCAxMTYsIDEwMSwgNjksIDExMiwgMTE1LCA0MCwgMTIwLCA0MSwgMzIsIDk5LCAxMDgsIDk3LCAx
MDksIDExMiwgNDAsIDEyMCwgNDQsIDY5LCAxMTIsIDExNSwgMTA1LCAxMDgsIDExMSwgMTEwLCA0
NCwgNDksIDQ2LCA0OCwgNDEsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDExNiwgMTE0
LCA5NywgMTEwLCAxMTUsIDExMiwgMTExLCAxMTUsIDEwMSwgNzcsIDk3LCAxMTYsIDUxLCA0MCwg
MTA5LCA5NywgMTE2LCA1MSwgMzIsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEy
MCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgNDgsIDYx
LCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwgOTMsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDQ5LCA2MSwgMTA1LCAxMTAsIDc3LCA5
NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDksIDkzLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTA1LCA1MCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUs
IDEyMCwgOTEsIDUwLCA5MywgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDExMSwg
MTE3LCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA2MSwgMTA5LCA5NywgMTE2LCA1
MSwgNDAsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDEwNSwgNDgsIDQ2LCAxMjAsIDQ0
LCAxMDUsIDQ5LCA0NiwgMTIwLCA0NCwgMTA1LCA1MCwgNDYsIDEyMCwgNDEsIDQ0LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4LCA0NiwgMTIxLCA0NCwgMTA1LCA0OSwgNDYs
IDEyMSwgNDQsIDEwNSwgNTAsIDQ2LCAxMjEsIDQxLCA0NCwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCA0MCwgMTA1LCA0OCwgNDYsIDEyMiwgNDQsIDEwNSwgNDksIDQ2LCAxMjIsIDQ0LCAxMDUs
IDUwLCA0NiwgMTIyLCA0MSwgMTMsIDEwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDExMSwgMTE3LCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MSwgMzIsIDEwNSwg
MTEwLCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwMSwgNzcsIDk3LCAxMTYsIDUxLCA0MCwgMTA5LCA5
NywgMTE2LCA1MSwgMzIsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEs
IDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA0OCwgNDgs
IDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwgOTMsIDkx
LCA0OCwgOTMsIDQ0LCA5NywgNDgsIDQ5LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA5MSwgNDgsIDkzLCA5MSwgNDksIDkzLCA0NCwgOTcsIDQ4LCA1MCwgNjEsIDEw
NSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4LCA5MywgOTEsIDUwLCA5
MywgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA0OSwgNDgsIDYx
LCAxMDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMsIDkxLCA0
OCwgOTMsIDQ0LCA5NywgNDksIDQ5LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA5MSwgNDksIDkzLCA5MSwgNDksIDkzLCA0NCwgOTcsIDQ5LCA1MCwgNjEsIDEwNSwg
MTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5LCA5MywgOTEsIDUwLCA5Mywg
NTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA1MCwgNDgsIDYxLCAx
MDUsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkxLCA0OCwg
OTMsIDQ0LCA5NywgNTAsIDQ5LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA5MSwgNTAsIDkzLCA5MSwgNDksIDkzLCA0NCwgOTcsIDUwLCA1MCwgNjEsIDEwNSwgMTEw
LCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDUwLCA5MywgOTEsIDUwLCA5MywgNTks
IDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk4LCA0OCwgNDksIDYxLCA5Nywg
NTAsIDUwLCA0MiwgOTcsIDQ5LCA0OSwgNDUsIDk3LCA0OSwgNTAsIDQyLCA5NywgNTAsIDQ5LCA1
OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTgsIDQ5LCA0OSwgNjEsIDQ1
LCA5NywgNTAsIDUwLCA0MiwgOTcsIDQ5LCA0OCwgNDMsIDk3LCA0OSwgNTAsIDQyLCA5NywgNTAs
IDQ4LCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTgsIDUwLCA0OSwg
NjEsIDk3LCA1MCwgNDksIDQyLCA5NywgNDksIDQ4LCA0NSwgOTcsIDQ5LCA0OSwgNDIsIDk3LCA1
MCwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwMSwg
MTE2LCA2MSwgOTcsIDQ4LCA0OCwgNDIsIDk4LCA0OCwgNDksIDQzLCA5NywgNDgsIDQ5LCA0Miwg
OTgsIDQ5LCA0OSwgNDMsIDk3LCA0OCwgNTAsIDQyLCA5OCwgNTAsIDQ5LCA1OSwgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA5LCA5NywgMTE2LCA1MSwgNDAsIDk4
LCA0OCwgNDksIDQ0LCA0MCwgNDUsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDgsIDQ5LCA0MywgOTcs
IDQ4LCA1MCwgNDIsIDk3LCA1MCwgNDksIDQxLCA0NCwgNDAsIDk3LCA0OSwgNTAsIDQyLCA5Nywg
NDgsIDQ5LCA0NSwgOTcsIDQ4LCA1MCwgNDIsIDk3LCA0OSwgNDksIDQxLCA0NCwgMTMsIDEwLCA5
OCwgNDksIDQ5LCA0NCwgNDAsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDgsIDQ4LCA0NSwgOTcsIDQ4
LCA1MCwgNDIsIDk3LCA1MCwgNDgsIDQxLCA0NCwgNDAsIDQ1LCA5NywgNDksIDUwLCA0MiwgOTcs
IDQ4LCA0OCwgNDMsIDk3LCA0OCwgNTAsIDQyLCA5NywgNDksIDQ4LCA0MSwgNDQsIDEzLCAxMCwg
OTgsIDUwLCA0OSwgNDQsIDQwLCA0NSwgOTcsIDUwLCA0OSwgNDIsIDk3LCA0OCwgNDgsIDQzLCA5
NywgNDgsIDQ5LCA0MiwgOTcsIDUwLCA0OCwgNDEsIDQ0LCA0MCwgOTcsIDQ5LCA0OSwgNDIsIDk3
LCA0OCwgNDgsIDQ1LCA5NywgNDgsIDQ5LCA0MiwgOTcsIDQ5LCA0OCwgNDEsIDQxLCA0NywgMTAw
LCAxMDEsIDExNiwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTYsIDExMSwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDgzLCAxMTIsIDk3LCA5OSwg
MTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQx
LCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwg
MTEyLCAxMTEsIDExOSwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAxMTgsIDEwMSwg
OTksIDUxLCA0MCwgNzYsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDY5LCAxMTAsIDk5LCAxMTEs
IDEwMCwgMTAxLCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTEx
LCAxMjAsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMTYsIDExMSwgNzEsIDk3LCAxMDksIDEwOSwgOTcsIDgzLCAxMTIsIDk3LCA5OSwgMTAx
LCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAx
MywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTEy
LCAxMTEsIDExOSwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ0LCAxMTgsIDEwMSwgOTks
IDUxLCA0MCwgNzEsIDk3LCAxMDksIDEwOSwgOTcsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAx
LCA4MCwgMTExLCAxMTksIDEwMSwgMTE0LCA2NSwgMTEyLCAxMTIsIDExNCwgMTExLCAxMjAsIDQx
LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMTUsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2
LCAzMiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEx
NCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA0
MiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTIsIDExMSwgMTE5LCA1MywgNDAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA0MSwgMzIsIDEyMywgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE1LCAxMTMsIDYxLCAxMTgsIDk3LCAx
MDgsIDExNywgMTAxLCA0MiwgMTE4LCA5NywgMTA4LCAxMTcsIDEwMSwgNTksIDEzLCAxMCwgMTE0
LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNSwgMTEzLCA0MiwgMTE1LCAxMTMsIDQy
LCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMywgMTAxLCAxMTYsIDc2LCAxMTcsIDEwOSwgMTA1LCAx
MTAsIDk3LCAxMTAsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwg
MTA4LCAxMTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDEx
NywgMTE0LCAxMTAsIDMyLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDQwLCAxMDAsIDExMSwgMTE2
LCA0MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDc2LCAxMTcsIDEwOSwgMTA1LCAxMTAs
IDk3LCAxMTAsIDk5LCAxMDEsIDY5LCAxMTAsIDk5LCAxMTEsIDEwMCwgMTAxLCA2NSwgMTEyLCAx
MTIsIDExNCwgMTExLCAxMjAsIDQxLCA0NCwgNDgsIDQ2LCA0NCwgNDksIDQ2LCA0MSwgNTksIDEz
LCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDMsIDEwMSwg
MTE2LCA4MiwgOTcsIDExMCwgMTAwLCA0MCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNSwgMTAx
LCAxMDEsIDEwMCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQs
IDExMCwgMzIsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgNDAsIDExNSwgMTA1LCAxMTAsIDQwLCAx
MDAsIDExMSwgMTE2LCA0MCwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0NiwgMTIwLCAxMjEsIDMyLCA0
NCwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDQ5LCA1MCwgNDYsIDU3LCA1NiwgNTcsIDU2LCA0NCwg
NTUsIDU2LCA0NiwgNTAsIDUxLCA1MSwgNDEsIDQxLCA0MSwgNDIsIDUyLCA1MSwgNTUsIDUzLCA1
NiwgNDYsIDUzLCA1MiwgNTMsIDUxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTE2LCAxMDQsIDEwMSwgMTE0LCA0MCwg
MTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNSwgMTAxLCAxMDEsIDEwMCwgNDQsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3LCAxMTQsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjUs
IDEwOSwgMTExLCAxMTcsIDExMCwgMTE2LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTE0LCA5NywgMTEwLCAxMDAsIDYxLCAxMDMsIDEwMSwgMTE2LCA4
MiwgOTcsIDExMCwgMTAwLCA0MCwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMTYsIDEwNCwgMTAxLCAxMTQs
IDYxLCAxMDksIDEwNSwgMTIwLCA0MCwgNDUsIDExOCwgOTcsIDExNCwgMTA1LCA5NywgMTEwLCA5
OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEwLCAxMTYsIDQ3LCA1MCwgNTMsIDUzLCA0Niwg
NDgsIDQ0LCAxMTgsIDk3LCAxMTQsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNjUsIDEwOSwgMTEx
LCAxMTcsIDExMCwgMTE2LCA0NywgNTAsIDUzLCA1MywgNDYsIDQ4LCA0NCwgMTE0LCA5NywgMTEw
LCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwg
MTAwLCAxMDUsIDExNiwgMTA0LCAxMDEsIDExNCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDk5
LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0
LCAxMDMsIDk4LCAxMDAsIDc3LCA5NywgMTIwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDYxLCA1
MCwgNTMsIDUzLCA0NiwgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTYs
IDExMSwgODIsIDcxLCA2NiwgNjgsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwg
MTA4LCAxMTEsIDExNCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDEwOSwgOTcsIDEyMCwgODIsIDcxLCA2NiwgNjEsIDEwOSwgOTcsIDEyMCwgNjksIDEx
MiwgMTE1LCA0MCwgMTA5LCA5NywgMTIwLCA0MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDYs
IDExNCwgNDQsIDEwOSwgOTcsIDEyMCwgNDAsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAx
MDMsIDQ0LCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgOTgsIDQxLCA0MSwgNDEsIDU5LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA2OCwgNjEsIDEwOSwgOTcsIDEyMCwg
NDAsIDExNCwgMTAzLCA5OCwgMTAwLCA3NywgOTcsIDEyMCwgODIsIDk3LCAxMTAsIDEwMywgMTAx
LCA0NywgMTA5LCA5NywgMTIwLCA4MiwgNzEsIDY2LCA0NCwgNDksIDQ2LCA0MSwgNTksIDEzLCAx
MCwgNjgsIDYxLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDQwLCAxMDIsIDEwOCwgMTExLCAxMTEs
IDExNCwgNDAsIDY4LCA0MSwgNDcsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNDQsIDQ4LCA0NiwgNDQs
IDQ5LCA0NiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMywg
OTgsIDYxLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4LCA0MiwgNjgs
IDU5LCAxMywgMTAsIDExNCwgMTAzLCA5OCwgNjEsIDExNiwgMTExLCA3MSwgOTcsIDEwOSwgMTA5
LCA5NywgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAxMTQsIDEwMywgOTgsIDQxLCA1OSwgMTMs
IDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1Miwg
NDAsIDExNCwgMTAzLCA5OCwgNDQsIDY4LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDExNCwgMTExLCAxMDksIDgyLCA3MSwgNjYsIDY4LCA0
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExNCwgMTAzLCA5OCwgMTAwLCA0MSwgMzIsIDEyMywg
MTMsIDEwLCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDExNCwgMTAzLCA5OCwgNjEsIDExNiwgMTEx
LCA3NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgODMsIDExMiwgOTcsIDk5LCAxMDEsIDQwLCAx
MTQsIDEwMywgOTgsIDEwMCwgNDYsIDExNCwgMTAzLCA5OCwgNDEsIDU5LCAxMywgMTAsIDExNCwg
MTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwgNDYsIDExNCwg
MTAzLCA5OCwgNDcsIDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgOTcsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIsIDQ4LCA0MSwgMzIsIDExMSwgMTE3LCAx
MTYsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2
LCAxMDUsIDExMSwgMTEwLCA4NywgNTksIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywg
MTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMy
LCA0OSwgNDEsIDMyLCAxMTEsIDExNywgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
OCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCA1OSwgMTMsIDEwLCAxMDgsIDk3LCAx
MjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDMyLCA2MSwgMzIsIDUwLCA0MSwgMzIsIDExMSwgMTE3LCAxMTYsIDMyLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4
NSwgODYsIDg3LCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4LCA5
NSwgNjgsIDY5LCA3MCwgNzMsIDc4LCA3MywgODQsIDczLCA3OSwgNzgsIDgzLCAxMywgMTAsIDEx
OCwgMTExLCAxMDUsIDEwMCwgMzIsIDEwOSwgOTcsIDEwNSwgMTEwLCA0MCwgMTE4LCAxMTEsIDEw
NSwgMTAwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAs
IDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA4NiwgNjksIDgyLCA4NCwgNjks
IDg4LCA5NSwgNzcsIDY1LCA3MywgNzgsIDk1LCA2NiwgNjksIDcxLCA3MywgNzgsIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMiwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMTAwLCA2MSwgMTEyLCAxMTEsIDExNSwg
MTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAx
LCAxMDAsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDU5LCAxMywgMTAsIDExOCwg
ODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODUsIDg2LCA4NywgNjEsIDEx
MiwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NSwgMTEyLCAxMDAsIDk3LCAx
MTYsIDEwMSwgMTAwLCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEw
MSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4
LCA5NSwgODUsIDgwLCA2OCwgNjUsIDg0LCA2OSwgOTUsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMs
IDc5LCA3OCwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3
LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA4NiwgNjksIDgyLCA4NCwgNjksIDg4LCA5NSwgODUs
IDgwLCA2OCwgNjUsIDg0LCA2OSwgOTUsIDc4LCA3OSwgODIsIDc3LCA2NSwgNzYsIDEzLCAxMCwg
MTA5LCA5NywgMTE2LCA1MiwgMzIsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDg3LCAxMTEsIDEx
NCwgMTA4LCAxMDAsIDYxLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNTksIDEzLCAxMCwgMTAz
LCAxMDgsIDk1LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2MSwgMTE4
LCAxMDUsIDEwMSwgMTE5LCA4MCwgMTE0LCAxMTEsIDEwNiwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA0MiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODcsIDExMSwgMTE0LCAxMDgsIDEw
MCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTIsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1
LCAxMTEsIDExMCwgODUsIDExMiwgMTAwLCA5NywgMTE2LCAxMDEsIDEwMCwgNDQsIDQ5LCA0Niwg
NDgsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwg
MTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNjEsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDg3LCAx
MTEsIDExNCwgMTA4LCAxMDAsIDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTEyLCAxMTEsIDEx
NSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAxLCAx
MDAsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTE4LCA4MCwgMTExLCAxMTUsIDEw
NSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTks
IDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTA5LCA5
NywgMTE2LCA1MSwgMzIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDExMSwgMTE0
LCAxMDgsIDEwMCwgNjEsIDEwOSwgOTcsIDExNiwgNTEsIDQwLCAxMDIsIDEwNSwgMTEwLCA5Nywg
MTA4LCA4NywgMTExLCAxMTQsIDEwOCwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTE4LCA3OCwgMTEx
LCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDEwNSwgMTIyLCAxMDEsIDQwLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg3LCAxMTEs
IDExNCwgMTA4LCAxMDAsIDQyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDg1LCAxMTIs
IDEwMCwgOTcsIDExNiwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUw
LCAzMiwgMTE3LCAxMTgsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAxLCAxMDAsIDYxLCAxMTgs
IDEwMSwgOTksIDUwLCA0MCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MCwgMzIsIDExNywgMTE4LCA1MCwgNjEsIDExOCwgMTAxLCA5OSwgNTAsIDQw
LCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQxLCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA4NiwgNjksIDgy
LCA4NCwgNjksIDg4LCA5NSwgNzcsIDY1LCA3MywgNzgsIDk1LCA2OSwgNzgsIDY4LCAxMywgMTAs
IDEwMywgMTA4LCA5NSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDYs
IDEyMSwgMzIsIDQyLCA2MSwgMzIsIDQ1LCA0OSwgNDYsIDU5LCAzMiwgMTI1XS5tYXAoYyA9PiBT
dHJpbmcuZnJvbUNoYXJDb2RlKGMpKS5qb2luKCIiKTsKK2NvbnN0IGZyYWdtZW50U2hhZGVyR0xT
TDIgPSBbMzUsIDExOCwgMTAxLCAxMTQsIDExNSwgMTA1LCAxMTEsIDExMCwgMzIsIDUyLCA1Mywg
NDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgwLCA2NiwgODIs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY1LCA3NiwgNjYsIDY5
LCA2OCwgNzksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NSwgNzcsIDY2LCA3MywgNjksIDc4
LCA4NCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAw
LCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc5LCA4MCwgNjUsIDY3LCA3MywgODQsIDg5
LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc2LCA4MCwgNzIsIDY1LCA4NCwgNjksIDgz
LCA4NCwgODYsIDY1LCA3NiwgODUsIDY5LCAzMiwgNDgsIDQ2LCA1MiwgMTAsIDM1LCAxMDAsIDEw
MSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDgwLCA2OSwgNjcsIDg1LCA3NiwgNjUsIDgy
LCA3OSwgODYsIDY5LCA4MiwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjUsIDY4LCA3MywgNjUsIDc4LCA2NywgNjksIDc5
LCA4NiwgNjksIDgyLCA2NSwgNzYsIDgwLCA3MiwgNjUsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDY5LCA3NywgNzMsIDgzLCA4MywgNzMsIDg2LCA2OSwgNjgsIDcz
LCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwgNzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgODYsIDcz
LCA4NCwgODksIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUs
IDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NiwgNzksIDY4LCA2NiwgNjUsIDgz
LCA2OSwgNjgsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDcwLCA4NSwgODIsIDY1LCA2NywgNjks
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc3LCA3MywgNjcsIDgy
LCA3OSwgODMsIDg1LCA4MiwgNzAsIDY1LCA2NywgNjksIDc3LCA2NSwgODAsIDY4LCA3MywgODIs
IDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwg
MTEwLCAxMDEsIDMyLCA2OSwgNzgsIDg2LCA3MywgODIsIDc5LCA3OCwgNzcsIDY5LCA3OCwgODQs
IDY2LCA4MiwgNjgsIDcwLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMy
LCA3OCwgNzksIDgyLCA3NywgNjUsIDc2LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA2NiwgODUsIDc3LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2
LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDc4LCA3
OSwgODIsIDc3LCA2NSwgNzYsIDg4LCA4OSwgODMsIDY3LCA2NSwgNzYsIDY5LCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NiwgNzMsIDcxLCA3MiwgODQsIDc3LCA2
NSwgODAsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4
NCwgNzMsIDc5LCA3OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
ODIsIDY5LCA3MCwgNzYsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDc3LCA2NSwgODAsIDk1LCA1
MSwgNjgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgyLCA2OSwg
NzAsIDc2LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA3NywgNjUsIDgwLCA5NSwgODMsIDc1LCA4
OSwgNjYsIDc5LCA4OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
ODMsIDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCA3NiwgOTUsIDcyLCA2NSwgODIsIDc3LCA3
OSwgNzgsIDczLCA2NywgODMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwg
MzIsIDgyLCA3MSwgNjYsIDY4LCA4MiwgNjksIDcwLCA3NiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3
OCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODIsIDY1LCA2OCwg
NzMsIDY1LCA3OCwgNjcsIDY5LCA3OSwgNjcsIDY3LCA3NiwgODUsIDgzLCA3MywgNzksIDc4LCAx
MCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3MiwgNzksIDgyLCA3Mywg
OTAsIDc5LCA3OCwgNzksIDY3LCA2NywgNzYsIDg1LCA4MywgNzMsIDc5LCA3OCwgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDg1LCA3NywgOTUsIDY2LCA3OSwg
NzgsIDY5LCA5NSwgNzMsIDc4LCA3MCwgNzYsIDg1LCA2OSwgNzgsIDY3LCA2OSwgODIsIDgzLCAz
MiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY2LCAxMTEs
IDExMCwgMTAxLCAxMTUsIDgwLCAxMDEsIDExNCwgNzcsIDEwMSwgMTE1LCAxMDQsIDMyLCA0OCwg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNzgsIDg1LCA3NywgOTUs
IDc3LCA3OSwgODIsIDgwLCA3MiwgOTUsIDczLCA3OCwgNzAsIDc2LCA4NSwgNjksIDc4LCA2Nywg
NjksIDgyLCA4MywgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEs
IDMyLCA4NiwgNzMsIDcxLCA3OCwgNjksIDg0LCA4NCwgNjksIDY2LCA3NiwgNjksIDc4LCA2OCwg
NzcsIDc5LCA2OCwgNjksIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA4OSwgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODMsIDY1LCA3NywgODAsIDc2LCA2OSwg
ODIsIDUxLCA2OCwgNzEsIDgyLCA2OSwgNjksIDc4LCA2OCwgNjksIDgwLCA4NCwgNzIsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA2NSwgNzcsIDgwLCA3Niwg
NjksIDgyLCA1MSwgNjgsIDY2LCA3MSwgODIsIDc3LCA2NSwgODAsIDEwLCAzNSwgMTAwLCAxMDEs
IDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDg1LCA4MywgNjksIDgwLCA3MiwgODksIDgzLCA3Mywg
NjcsIDY1LCA3NiwgNzYsIDczLCA3MSwgNzIsIDg0LCA3MCwgNjUsIDc2LCA3NiwgNzksIDcwLCA3
MCwgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgODQsIDg3LCA3OSwg
ODMsIDczLCA2OCwgNjksIDY4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDczLCA3OCwgNzEsIDEwLCAz
NSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4Miwg
NjcsIDc5LCA2NSwgODQsIDk1LCA4NCwgNjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4
MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA2
NiwgODUsIDc3LCA4MCwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAzMiwgNDgsIDEw
LCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4
MiwgNjcsIDc5LCA2NSwgODQsIDk1LCA4NCwgNzMsIDc4LCA4NCwgOTUsIDg0LCA2OSwgODgsIDg0
LCA4NSwgODIsIDY5LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODYsIDMyLCA0OCwgMTAs
IDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjUsIDc4LCA3MywgODMsIDc5
LCA4NCwgODIsIDc5LCA4MCwgNzMsIDY3LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjks
IDY4LCA3MywgODIsIDY5LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAx
LCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NiwgODIsIDY4LCA3MCwgOTUsIDg2LCA5NSwgNzIs
IDY5LCA3MywgNzEsIDcyLCA4NCwgOTUsIDY3LCA3OSwgODIsIDgyLCA2OSwgNzYsIDY1LCA4NCwg
NjksIDY4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA3NywgODMs
IDk1LCA2NiwgODIsIDY4LCA3MCwgOTUsIDY5LCA3OCwgNjksIDgyLCA3MSwgODksIDk1LCA2Nywg
NzksIDc4LCA4MywgNjksIDgyLCA4NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMCwgMzUsIDEwMCwg
MTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNzIsIDY5LCA2OSwgNzgsIDk1LCA4NCwg
NjksIDg4LCA4NCwgODUsIDgyLCA2OSwgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgODUsIDg2LCAz
MiwgNDgsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDgzLCA4Mywg
OTUsIDg0LCA3MiwgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDY1LCA3OCwgNjgsIDc3LCA2
NSwgODMsIDc1LCA5NSwgODQsIDY5LCA4OCwgODQsIDg1LCA4MiwgNjksIDY4LCA3MywgODIsIDY5
LCA2NywgODQsIDg1LCA4NiwgMzIsIDQ4LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEw
LCAxMDEsIDMyLCA2OCwgNjksIDY2LCA4NSwgNzEsIDc3LCA3OSwgNjgsIDY5LCAzMiwgNDgsIDEw
LCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MywgNzIsIDY1LCA2
OCwgNjksIDgyLCA5NSwgNzgsIDY1LCA3NywgNjksIDMyLCAxMDIsIDExNCwgOTcsIDEwMywgMTA5
LCAxMDEsIDExMCwgMTE2LCA1OCwgMTEyLCA5OCwgMTE0LCAxMCwgMTMsIDEwLCAzNSwgMTAwLCAx
MDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3
MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA2NiwgNjksIDcxLCA3MywgNzgsIDEz
LCAxMCwgMTEyLCAxMTQsIDEwMSwgOTksIDEwNSwgMTE1LCAxMDUsIDExMSwgMTEwLCAzMiwgMTA0
LCAxMDUsIDEwMywgMTA0LCAxMTIsIDMyLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCA1OSwgMTMs
IDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDcwLCA4MiwgNzksIDc3
LCA3NiwgNzMsIDc4LCA2OSwgNjUsIDgyLCA4MywgODAsIDY1LCA2NywgNjksIDEzLCAxMCwgMTA4
LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMTYsIDEwMCwgNDksIDUyLCA0OCwg
NDQsIDk5LCAxMTEsIDEwOCwgMTE3LCAxMDksIDExMCwgOTUsIDEwOSwgOTcsIDEwNiwgMTExLCAx
MTQsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCA1OSwgMTMsIDEw
LCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEs
IDMyLCA0OCwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYx
LCAzMiwgNDgsIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwg
ODMsIDk5LCAxMDEsIDExMCwgMTAxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDksIDk3LCAxMTYs
IDUyLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA4MCwgMTE0LCAxMTEsIDEwNiwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE4
LCAxMDUsIDEwMSwgMTE5LCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEy
MSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIsIDQ5LCA0NCwg
MzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMyLCA0OCwgNDEs
IDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCA3NywgOTcsIDExNiwg
MTAxLCAxMTQsIDEwNSwgOTcsIDEwOCwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5
LCA1MCwgMzIsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDczLCAxMTAsIDEwMiwg
MTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY1LCAxMDks
IDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDc5LCAxMTIsIDk3LCA5OSwgMTA1LCAxMTYs
IDEyMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MCwgMzIsIDExOCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNzMsIDEx
MCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwg
NzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA5LCA5NywgMTEyLCA3MywgMTEwLCAxMDIsIDExMSwg
MTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MiwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNzMsIDExMCwgMTAy
LCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgNzcsIDEw
NSwgOTksIDExNCwgMTExLCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgzLCA5Nywg
MTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCAxMDUsIDEyMiwgMTAxLCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA2NiwgMTE3LCAxMDksIDExMiwgNzMsIDEx
MCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAx
MDgsIDk4LCAxMDEsIDEwMCwgMTExLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEz
LCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAx
MTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYs
IDUyLCAzMiwgMTExLCAxMTIsIDk3LCA5OSwgMTA1LCAxMTYsIDEyMSwgNzcsIDk3LCAxMTYsIDEx
NCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDEsIDEwOSwg
MTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAs
IDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgMTA5LCA5NywgMTEyLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwg
MTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAx
MDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAx
MywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4Mywg
MTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAx
MTQsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYs
IDUyLCAzMiwgOTgsIDExNywgMTA5LCAxMTIsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4NCwgOTcsIDExMCwgMTAzLCAx
MDEsIDExMCwgMTE2LCA4MywgMTEyLCA5NywgOTksIDEwMSwgODAsIDk3LCAxMTQsIDk3LCAxMDks
IDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEw
OCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEy
MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwg
NTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwg
MTAwLCAxMTEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5
OSwgNTIsIDMyLCAxMTgsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDcz
LCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNzcsIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIs
IDk3LCA5OSwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgMTE1LCA1OSwgMTMsIDEwLCAxMDIsIDEw
OCwgMTExLCA5NywgMTE2LCAzMiwgMTEyLCAxMTEsIDEwNSwgMTEwLCAxMTYsIDgzLCAxMDUsIDEy
MiwgMTAxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE4LCA4MiwgMTAxLCAx
MDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwg
MTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgNjks
IDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNjcsIDExMSwgMTA4LCAxMTEsIDEx
NCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgNjksIDEyMSwgMTAxLCA4
MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUxLCAzMiwgMTE4LCA2NSwgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA2Nywg
MTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4
LCA2OCwgMTAxLCA5OCwgMTE3LCAxMDMsIDc3LCAxMTEsIDEwMCwgMTAxLCA1OSwgMTMsIDEwLCAx
MTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEs
IDk3LCAxMTYsIDgwLCA5NywgMTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAx
LCA5OSwgNTIsIDMyLCAxMTgsIDY3LCAxMDgsIDEwMSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDEx
NiwgODIsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MCwgOTcs
IDExNCwgOTcsIDEwOSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4
LCA2NywgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDczLCAxMTAsIDEwMiwg
MTExLCAxMTUsIDU5LCAxMywgMTAsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCA5OSwgMTA4LCAxMDEs
IDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAx
MTQsIDY3LCAxMTEsIDk3LCAxMTYsIDY2LCAxMTcsIDEwOSwgMTEyLCA3MywgMTEwLCAxMDIsIDEx
MSwgMTE1LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAx
MDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0LCA5NywgMTEwLCAxMDMsIDEwMSwgMTEw
LCAxMTYsIDgzLCAxMTIsIDk3LCA5OSwgMTAxLCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgMTE1LCA1
OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5NywgMTE0LCA2
NywgMTExLCA5NywgMTE2LCA2NiwgMTE3LCAxMDksIDExMiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1
LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDY3LCAxMDgsIDEw
MSwgOTcsIDExNCwgNjcsIDExMSwgOTcsIDExNiwgODQsIDEwNSwgMTEwLCAxMTYsIDgwLCA5Nywg
MTE0LCA5NywgMTA5LCAxMTUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCA5OSwgMTA4LCAxMDEsIDk3LCAxMTQsIDY3LCAxMTEsIDk3LCAxMTYsIDY3LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDY1LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NywgMTA4LCAxMDEsIDk3LCAx
MTQsIDY3LCAxMTEsIDk3LCAxMTYsIDg0LCAxMDUsIDExMCwgMTE2LCA3MywgMTEwLCAxMDIsIDEx
MSwgMTE1LCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgOTksIDEwOCwgMTAxLCA5
NywgMTE0LCA2NywgMTExLCA5NywgMTE2LCA4NCwgMTA1LCAxMTAsIDExNiwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDY1
LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAxMTEsIDExMiwgMTIxLCA1OSwgMTMsIDEw
LCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA2NSwgMTEwLCAxMDUsIDExNSwgMTExLCAxMTYs
IDExNCwgMTExLCAxMTIsIDEyMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwg
MTA5LCA5NywgMTE2LCA1MiwgMzIsIDk3LCAxMTAsIDEwNSwgMTE1LCAxMTEsIDExNiwgMTE0LCAx
MTEsIDExMiwgMTIxLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODMsIDEwNCwgMTAxLCAxMDEsIDExMCwgNjcsIDExMSwg
MTA4LCAxMTEsIDExNCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExOCwgODMs
IDEwNCwgMTAxLCAxMDEsIDExMCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTksIDEzLCAxMCwg
MTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNSwgMTA0LCAxMDEsIDEwMSwgMTEwLCA3NywgOTcsIDEx
NiwgMTE0LCAxMDUsIDEyMCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwg
ODIsIDEwMSwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgMTA1LCA5
OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDEw
MiwgMTExLCAxMTUsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTgsIDgyLCAx
MDEsIDEwMiwgMTE0LCA5NywgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzMsIDExMCwgMTAyLCAx
MTEsIDExNSwgNTksIDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIs
IDExNCwgOTcsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwg
MTIwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE4LCA4NCwgMTA0LCAxMDUs
IDk5LCAxMDcsIDExMCwgMTAxLCAxMTUsIDExNSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNTks
IDEzLCAxMCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNiwgMTA0LCAxMDUsIDk5LCAxMDcsIDEx
MCwgMTAxLCAxMTUsIDExNSwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTAsIDMyLCAxMTgsIDg0LCAxMDQsIDEwNSwgOTksIDEwNywgMTEwLCAx
MDEsIDExNSwgMTE1LCA4MCwgOTcsIDExNCwgOTcsIDEwOSwgNTksIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExOCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDUsIDExMSwg
MTEwLCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MiwgMzIsIDExOCwgODQsIDEwNSwgMTEwLCAxMTYsIDY3LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTcs
IDk4LCA4MywgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDExNiwgMTAxLCAx
MTAsIDExNSwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ4LCA0
OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAx
MDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDQ5LCA5NSwgNDksIDU5LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTks
IDk3LCAxMDgsIDc2LCA0OSwgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAx
MTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA0OSwgNDks
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAx
LCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDc2LCA1MCwgOTUsIDUwLCA1OSwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5
NywgMTA4LCA3NiwgNTAsIDk1LCA0OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0
OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAx
MDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgNzYsIDUwLCA0OSwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcs
IDEwOCwgNzYsIDUwLCA1MCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwg
ODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5OSwgOTcsIDEwOCwgODgsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwg
OTksIDk3LCAxMDgsIDg5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCA4
MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA5MCwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwgMTA1LCA5
OSwgOTcsIDEwOCwgODgsIDg4LCA5NSwgOTAsIDkwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4
OSwgODksIDk1LCA5MCwgOTAsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgs
IDgzLCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDkwLCA5MCwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODMsIDExMiwgMTA0LCAxMDEsIDExNCwg
MTA1LCA5OSwgOTcsIDEwOCwgODgsIDg5LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAz
MiwgMTE4LCA4MywgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA5NywgMTA4LCA4OSwgOTAs
IDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDgzLCAxMTIsIDEwNCwgMTAx
LCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDkwLCA4OCwgNTksIDEzLCAxMCwgMTI1LCA1OSwgMTMs
IDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwg
NjEsIDMyLCA0OSwgNDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIs
IDYxLCAzMiwgNDksIDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAz
MiwgNzcsIDEwMSwgMTE1LCAxMDQsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwOSwgOTcsIDExNiwg
NTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDExOCwgMTA1LCAxMTUsIDEwNSwgOTgsIDEwNSwgMTA4LCAxMDUsIDEx
NiwgMTIxLCA1OSwgMTMsIDEwLCAxMjUsIDU5LCAxMywgMTAsIDEwOCwgOTcsIDEyMSwgMTExLCAx
MTcsIDExNiwgNDAsIDEwOCwgMTExLCA5OSwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgMzIsIDYx
LCAzMiwgNDgsIDQxLCAzMiwgMTA1LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4
LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNTksIDEzLCAxMCwg
MTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAxMTEsIDk5LCA5NywgMTE2LCAx
MDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA0OSwgNDEsIDMyLCAxMDUsIDExMCwgMzIsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTgsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNTks
IDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTE1LCAxMDEsIDExNiwg
MzIsIDYxLCAzMiwgNDgsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAsIDEwNSwgMTEwLCAxMDMs
IDMyLCA2MSwgMzIsIDQ5LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEwMiwgMTExLCAxMTQsIDEw
OSwgMzIsIDExNiwgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNTAsIDY4LCAzMiwgMTAx
LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAx
MTQsIDEwMCwgMTAyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4NCwgMTAxLCAx
MjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNTksIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEw
OCwgOTcsIDEyMSwgMTExLCAxMTcsIDExNiwgNDAsIDExNSwgMTAxLCAxMTYsIDMyLCA2MSwgMzIs
IDQ4LCA0NCwgMzIsIDk4LCAxMDUsIDExMCwgMTAwLCAxMDUsIDExMCwgMTAzLCAzMiwgNjEsIDMy
LCA1MCwgNDEsIDMyLCAxMTcsIDExMCwgMTA1LCAxMDIsIDExMSwgMTE0LCAxMDksIDMyLCAxMTUs
IDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0
LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgODMsIDk3
LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDEx
NCwgNTksIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMy
LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEw
MSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEw
MSwgMTE0LCAzMiwgMTE1LCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDUwLCA2OCwgNDAs
IDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2
NiwgMTE0LCAxMDAsIDEwMiwgODMsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgODQsIDEw
MSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDQ0LCAzMiwgMTAxLCAxMTAsIDExOCwgMTA1LCAx
MTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAyLCA4Mywg
OTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwg
MTE0LCA0MSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDEx
NSwgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgNDAsIDExNSwgNDQsIDk5LCA0MSwgMzIsIDExNiwgMTAxLCAxMjAs
IDExNiwgMTE3LCAxMTQsIDEwMSwgNDAsIDExNSwgNDQsIDk5LCA0MSwgMTMsIDEwLCAxMDgsIDk3
LCAxMjEsIDExMSwgMTE3LCAxMTYsIDQwLCAxMTUsIDEwMSwgMTE2LCAzMiwgNjEsIDMyLCA1MCwg
NDQsIDMyLCA5OCwgMTA1LCAxMTAsIDEwMCwgMTA1LCAxMTAsIDEwMywgMzIsIDYxLCAzMiwgNDgs
IDQxLCAzMiwgMTE3LCAxMTAsIDEwNSwgMTAyLCAxMTEsIDExNCwgMTA5LCAzMiwgMTE2LCAxMDEs
IDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA2NywgMTE3LCA5OCwgMTAxLCAzMiwgMTE0LCAxMDEs
IDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5LCAxMTIs
IDEwOCwgMTAxLCAxMTQsIDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA1OSwgMTAs
IDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwg
MzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwg
MTE1LCAxMDEsIDExNiwgMzIsIDYxLCAzMiwgNTAsIDQ0LCAzMiwgOTgsIDEwNSwgMTEwLCAxMDAs
IDEwNSwgMTEwLCAxMDMsIDMyLCA2MSwgMzIsIDQ5LCA0MSwgMzIsIDExNywgMTEwLCAxMDUsIDEw
MiwgMTExLCAxMTQsIDEwOSwgMzIsIDExNSwgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAz
MiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5
NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAx
MTQsIDU5LCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAz
MiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA4MywgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAzMiwgMTE1LCA5NywgMTA5
LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDY3LCAxMTcsIDk4LCAxMDEsIDQwLCAxMTQsIDEwMSwgMTAy
LCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDk3LCAxMDksIDExMiwgMTA4
LCAxMDEsIDExNCwgODQsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDQ0LCAzMiwgMTE0
LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCA5NywgMTA5
LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQx
LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE1LCA5Nywg
MTA5LCAxMTIsIDEwOCwgMTAxLCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA3NiwgMTExLCAxMDAsIDQwLCAxMTUsIDQ0LCA5OSwgNDQsIDEwOCwgNDEsIDMy
LCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDc2LCAxMTEsIDEwMCwgNDAsIDEx
NSwgNDQsIDk5LCA0NCwgMTA4LCA0MSwgMTMsIDEwLCAxMDgsIDk3LCAxMjEsIDExMSwgMTE3LCAx
MTYsIDQwLCAxMDgsIDExMSwgOTksIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDMyLCA2MSwgMzIs
IDUwLCA0MSwgMzIsIDEwNSwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgODAs
IDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODUsIDg2LCA4NywgNTksIDEzLCAx
MCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCA4MCwgNzMsIDYxLCA1MSwgNDYsIDQ5LCA1MiwgNDksIDUzLCA1NywgNTAsIDU0LCA1MywgNTEs
IDUzLCA1NiwgNTcsIDU1LCA1NywgNTEsIDUwLCA1MSwgNTYsIDUyLCA1NCwgNTAsIDU0LCA1Miwg
NTEsIDUxLCA1NiwgNTEsIDUwLCA1NSwgNTcsIDUzLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTAs
IDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc2LCAxMDUsIDExMCwg
MTAxLCA5NywgMTE0LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgODAsIDExMSwgMTE5LCAx
MDEsIDExNCwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIwLCA2MSwgNTAsIDQ2LCA1MCwgNTks
IDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCA3MSwgOTcsIDEwOSwgMTA5LCA5NywgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEs
IDgwLCAxMTEsIDExOSwgMTAxLCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNjEs
IDQ5LCA0NiwgNDgsIDQ3LCA3NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgNjksIDExMCwgOTks
IDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0
LCAxMTEsIDEyMCwgNTksIDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCA3NiwgMTE3LCAxMDksIDEwNSwgMTEwLCA5NywgMTEwLCA5OSwgMTAx
LCA2OSwgMTEwLCA5OSwgMTExLCAxMDAsIDEwMSwgNjUsIDExMiwgMTEyLCAxMTQsIDExMSwgMTIw
LCA2MSwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDQ4LCA0NiwgNTAsIDQ5LCA1MCwgNTQsIDQ0LCA0
OCwgNDYsIDU1LCA0OSwgNTMsIDUwLCA0NCwgNDgsIDQ2LCA0OCwgNTUsIDUwLCA1MCwgNDEsIDU5
LCAxMywgMTAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgNjksIDExMiwgMTE1LCAxMDUsIDEwOCwgMTExLCAxMTAsIDYxLCA0OCwgNDYsIDQ4
LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ5LCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwg
MTA1LCAxMTAsIDEwMSwgMzIsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwg
NDAsIDEyMCwgNDEsIDMyLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDQwLCAxMjAsIDQ0LCA0OCwg
NDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwgNDEsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIsIDEw
NSwgMTEwLCAxMDEsIDMyLCA5NywgOTgsIDExNSwgNjksIDExMiwgMTE1LCA0MCwgMTIwLCA0MSwg
MzIsIDk3LCA5OCwgMTE1LCA0MCwgMTIwLCA0MSwgNDMsIDY5LCAxMTIsIDExNSwgMTA1LCAxMDgs
IDExMSwgMTEwLCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
MTA5LCA5NywgMTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMjAsIDQxLCAzMiwgMTA5LCA5NywgMTIw
LCA0MCwgMTIwLCA0NCwgNjksIDExMiwgMTE1LCAxMDUsIDEwOCwgMTExLCAxMTAsIDQxLCAxMywg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgMTE1LCA5NywgMTE2LCAx
MTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUsIDQwLCAxMjAsIDQxLCAzMiwgOTks
IDEwOCwgOTcsIDEwOSwgMTEyLCA0MCwgMTIwLCA0NCwgNjksIDExMiwgMTE1LCAxMDUsIDEwOCwg
MTExLCAxMTAsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUxLCAz
MiwgMTE2LCAxMTQsIDk3LCAxMTAsIDExNSwgMTEyLCAxMTEsIDExNSwgMTAxLCA3NywgOTcsIDEx
NiwgNTEsIDQwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAx
MTQsIDEwNSwgMTIwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTA1LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ4
LCA5MywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgNDksIDYxLCAxMDUs
IDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2
LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUx
LCAzMiwgMTExLCAxMTcsIDExNiwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDYxLCAxMDks
IDk3LCAxMTYsIDUxLCA0MCwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTA1LCA0OCwg
NDYsIDEyMCwgNDQsIDEwNSwgNDksIDQ2LCAxMjAsIDQ0LCAxMDUsIDUwLCA0NiwgMTIwLCA0MSwg
NDQsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDEwNSwgNDgsIDQ2LCAxMjEsIDQ0LCAx
MDUsIDQ5LCA0NiwgMTIxLCA0NCwgMTA1LCA1MCwgNDYsIDEyMSwgNDEsIDQ0LCAxMywgMTAsIDEx
OCwgMTAxLCA5OSwgNTEsIDQwLCAxMDUsIDQ4LCA0NiwgMTIyLCA0NCwgMTA1LCA0OSwgNDYsIDEy
MiwgNDQsIDEwNSwgNTAsIDQ2LCAxMjIsIDQxLCAxMywgMTAsIDQxLCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTExLCAxMTcsIDExNiwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDksIDk3LCAxMTYsIDUx
LCAzMiwgMTA1LCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNSwgMTAxLCA3NywgOTcsIDExNiwgNTEs
IDQwLCAxMDksIDk3LCAxMTYsIDUxLCAzMiwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
OTcsIDQ4LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEs
IDQ4LCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA0OCwgNDksIDYxLCAxMDUsIDExMCwgNzcsIDk3
LCAxMTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OCwgOTMsIDkxLCA0OSwgOTMsIDQ0LCA5NywgNDgs
IDUwLCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDgsIDkz
LCA5MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcs
IDQ5LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDQ5
LCA5MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA0OSwgNDksIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAx
MTYsIDExNCwgMTA1LCAxMjAsIDkxLCA0OSwgOTMsIDkxLCA0OSwgOTMsIDQ0LCA5NywgNDksIDUw
LCA2MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNDksIDkzLCA5
MSwgNTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDUw
LCA0OCwgNjEsIDEwNSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgOTEsIDUwLCA5
MywgOTEsIDQ4LCA5MywgNDQsIDk3LCA1MCwgNDksIDYxLCAxMDUsIDExMCwgNzcsIDk3LCAxMTYs
IDExNCwgMTA1LCAxMjAsIDkxLCA1MCwgOTMsIDkxLCA0OSwgOTMsIDQ0LCA5NywgNTAsIDUwLCA2
MSwgMTA1LCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA5MSwgNTAsIDkzLCA5MSwg
NTAsIDkzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTgsIDQ4LCA0
OSwgNjEsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDksIDQ5LCA0NSwgOTcsIDQ5LCA1MCwgNDIsIDk3
LCA1MCwgNDksIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OCwgNDks
IDQ5LCA2MSwgNDUsIDk3LCA1MCwgNTAsIDQyLCA5NywgNDksIDQ4LCA0MywgOTcsIDQ5LCA1MCwg
NDIsIDk3LCA1MCwgNDgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5
OCwgNTAsIDQ5LCA2MSwgOTcsIDUwLCA0OSwgNDIsIDk3LCA0OSwgNDgsIDQ1LCA5NywgNDksIDQ5
LCA0MiwgOTcsIDUwLCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDEwMCwgMTAxLCAxMTYsIDYxLCA5NywgNDgsIDQ4LCA0MiwgOTgsIDQ4LCA0OSwgNDMsIDk3LCA0
OCwgNDksIDQyLCA5OCwgNDksIDQ5LCA0MywgOTcsIDQ4LCA1MCwgNDIsIDk4LCA1MCwgNDksIDU5
LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDksIDk3LCAxMTYs
IDUxLCA0MCwgOTgsIDQ4LCA0OSwgNDQsIDQwLCA0NSwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OCwg
NDksIDQzLCA5NywgNDgsIDUwLCA0MiwgOTcsIDUwLCA0OSwgNDEsIDQ0LCA0MCwgOTcsIDQ5LCA1
MCwgNDIsIDk3LCA0OCwgNDksIDQ1LCA5NywgNDgsIDUwLCA0MiwgOTcsIDQ5LCA0OSwgNDEsIDQ0
LCAxMywgMTAsIDk4LCA0OSwgNDksIDQ0LCA0MCwgOTcsIDUwLCA1MCwgNDIsIDk3LCA0OCwgNDgs
IDQ1LCA5NywgNDgsIDUwLCA0MiwgOTcsIDUwLCA0OCwgNDEsIDQ0LCA0MCwgNDUsIDk3LCA0OSwg
NTAsIDQyLCA5NywgNDgsIDQ4LCA0MywgOTcsIDQ4LCA1MCwgNDIsIDk3LCA0OSwgNDgsIDQxLCA0
NCwgMTMsIDEwLCA5OCwgNTAsIDQ5LCA0NCwgNDAsIDQ1LCA5NywgNTAsIDQ5LCA0MiwgOTcsIDQ4
LCA0OCwgNDMsIDk3LCA0OCwgNDksIDQyLCA5NywgNTAsIDQ4LCA0MSwgNDQsIDQwLCA5NywgNDks
IDQ5LCA0MiwgOTcsIDQ4LCA0OCwgNDUsIDk3LCA0OCwgNDksIDQyLCA5NywgNDksIDQ4LCA0MSwg
NDEsIDQ3LCAxMDAsIDEwMSwgMTE2LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEs
IDk5LCA1MSwgMzIsIDExNiwgMTExLCA3NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgODMsIDEx
MiwgOTcsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA4LCAx
MTEsIDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0
LCAxMTAsIDMyLCAxMTIsIDExMSwgMTE5LCA0MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDQs
IDExOCwgMTAxLCA5OSwgNTEsIDQwLCA3NiwgMTA1LCAxMTAsIDEwMSwgOTcsIDExNCwgNjksIDEx
MCwgOTksIDExMSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQsIDY1LCAxMTIsIDEx
MiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDExNiwgMTExLCA3MSwgOTcsIDEwOSwgMTA5LCA5NywgODMsIDExMiwg
OTcsIDk5LCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA4LCAxMTEs
IDExNCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAx
MTAsIDMyLCAxMTIsIDExMSwgMTE5LCA0MCwgOTksIDExMSwgMTA4LCAxMTEsIDExNCwgNDQsIDEx
OCwgMTAxLCA5OSwgNTEsIDQwLCA3MSwgOTcsIDEwOSwgMTA5LCA5NywgNjksIDExMCwgOTksIDEx
MSwgMTAwLCAxMDEsIDgwLCAxMTEsIDExOSwgMTAxLCAxMTQsIDY1LCAxMTIsIDExMiwgMTE0LCAx
MTEsIDEyMCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwg
OTcsIDExNiwgMzIsIDExNSwgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgNDAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA0MSwgMTMsIDEwLCAxMjMs
IDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgOTcsIDEwOCwg
MTE3LCAxMDEsIDQyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExMiwgMTExLCAxMTksIDUzLCA0MCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQxLCAz
MiwgMTIzLCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDExMywgNjEs
IDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDQyLCAxMTgsIDk3LCAxMDgsIDExNywgMTAxLCA1OSwg
MTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE1LCAxMTMsIDQyLCAx
MTUsIDExMywgNDIsIDExOCwgOTcsIDEwOCwgMTE3LCAxMDEsIDU5LCAxMywgMTAsIDEyNSwgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAzLCAxMDEsIDExNiwgNzYsIDExNywg
MTA5LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEwMSwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAx
MDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgNDAsIDEw
MCwgMTExLCAxMTYsIDQwLCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwgNzYsIDExNywgMTA5
LCAxMDUsIDExMCwgOTcsIDExMCwgOTksIDEwMSwgNjksIDExMCwgOTksIDExMSwgMTAwLCAxMDEs
IDY1LCAxMTIsIDExMiwgMTE0LCAxMTEsIDEyMCwgNDEsIDQ0LCA0OCwgNDYsIDQ0LCA0OSwgNDYs
IDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDEwMywgMTAxLCAxMTYsIDgyLCA5NywgMTEwLCAxMDAsIDQwLCAxMTgsIDEwMSwgOTksIDUwLCAz
MiwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2
LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAyLCAxMTQsIDk3LCA5OSwgMTE2LCA0MCwgMTE1LCAxMDUs
IDExMCwgNDAsIDEwMCwgMTExLCAxMTYsIDQwLCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQ2LCAxMjAs
IDEyMSwgMzIsIDQ0LCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgNDksIDUwLCA0NiwgNTcsIDU2LCA1
NywgNTYsIDQ0LCA1NSwgNTYsIDQ2LCA1MCwgNTEsIDUxLCA0MSwgNDEsIDQxLCA0MiwgNTIsIDUx
LCA1NSwgNTMsIDU2LCA0NiwgNTMsIDUyLCA1MywgNTEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMTYsIDEwNCwgMTAx
LCAxMTQsIDQwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1LCAxMDEsIDEwMSwgMTAwLCA0NCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOCwgOTcsIDExNCwgMTA1LCA5NywgMTEwLCA5
OSwgMTAxLCA2NSwgMTA5LCAxMTEsIDExNywgMTEwLCAxMTYsIDQxLCAzMiwgMTIzLCAxMywgMTAs
IDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDk3LCAxMTAsIDEwMCwgNjEsIDEwMywg
MTAxLCAxMTYsIDgyLCA5NywgMTEwLCAxMDAsIDQwLCAxMTUsIDEwMSwgMTAxLCAxMDAsIDQxLCA1
OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDExNiwgMTA0
LCAxMDEsIDExNCwgNjEsIDEwOSwgMTA1LCAxMjAsIDQwLCA0NSwgMTE4LCA5NywgMTE0LCAxMDUs
IDk3LCAxMTAsIDk5LCAxMDEsIDY1LCAxMDksIDExMSwgMTE3LCAxMTAsIDExNiwgNDcsIDUwLCA1
MywgNTMsIDQ2LCA0OCwgNDQsIDExOCwgOTcsIDExNCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA2
NSwgMTA5LCAxMTEsIDExNywgMTEwLCAxMTYsIDQ3LCA1MCwgNTMsIDUzLCA0NiwgNDgsIDQ0LCAx
MTQsIDk3LCAxMTAsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0
LCAxMTAsIDMyLCAxMDAsIDEwNSwgMTE2LCAxMDQsIDEwMSwgMTE0LCA1OSwgMTMsIDEwLCAxMjUs
IDEzLCAxMCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCAxMTQsIDEwMywgOTgsIDEwMCwgNzcsIDk3LCAxMjAsIDgyLCA5NywgMTEwLCAxMDMs
IDEwMSwgNjEsIDUwLCA1MywgNTMsIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MiwgMzIsIDExNiwgMTExLCA4MiwgNzEsIDY2LCA2OCwgNDAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCA5OSwgMTExLCAxMDgsIDExMSwgMTE0LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTA5LCA5NywgMTIwLCA4MiwgNzEsIDY2LCA2MSwgMTA5LCA5Nywg
MTIwLCA2OSwgMTEyLCAxMTUsIDQwLCAxMDksIDk3LCAxMjAsIDQwLCA5OSwgMTExLCAxMDgsIDEx
MSwgMTE0LCA0NiwgMTE0LCA0NCwgMTA5LCA5NywgMTIwLCA0MCwgOTksIDExMSwgMTA4LCAxMTEs
IDExNCwgNDYsIDEwMywgNDQsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCA5OCwgNDEsIDQx
LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDY4LCA2MSwgMTA5
LCA5NywgMTIwLCA0MCwgMTE0LCAxMDMsIDk4LCAxMDAsIDc3LCA5NywgMTIwLCA4MiwgOTcsIDEx
MCwgMTAzLCAxMDEsIDQ3LCAxMDksIDk3LCAxMjAsIDgyLCA3MSwgNjYsIDQ0LCA0OSwgNDYsIDQx
LCA1OSwgMTMsIDEwLCA2OCwgNjEsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgNDAsIDEwMiwgMTA4
LCAxMTEsIDExMSwgMTE0LCA0MCwgNjgsIDQxLCA0NywgNTAsIDUzLCA1MywgNDYsIDQ4LCA0NCwg
NDgsIDQ2LCA0NCwgNDksIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDExNCwgMTAzLCA5OCwgNjEsIDk5LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEwMywg
OTgsIDQyLCA2OCwgNTksIDEzLCAxMCwgMTE0LCAxMDMsIDk4LCA2MSwgMTE2LCAxMTEsIDcxLCA5
NywgMTA5LCAxMDksIDk3LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDExNCwgMTAzLCA5OCwg
NDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEw
MSwgOTksIDUyLCA0MCwgMTE0LCAxMDMsIDk4LCA0NCwgNjgsIDQxLCA1OSwgMTMsIDEwLCAxMjUs
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTE0LCAxMTEsIDEwOSwgODIsIDcx
LCA2NiwgNjgsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE0LCAxMDMsIDk4LCAxMDAsIDQx
LCAzMiwgMTIzLCAxMywgMTAsIDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgMTE0LCAxMDMsIDk4LCA2
MSwgMTE2LCAxMTEsIDc2LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA4MywgMTEyLCA5NywgOTks
IDEwMSwgNDAsIDExNCwgMTAzLCA5OCwgMTAwLCA0NiwgMTE0LCAxMDMsIDk4LCA0MSwgNTksIDEz
LCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNCwgMTAzLCA5OCwgMTAw
LCA0NiwgMTE0LCAxMDMsIDk4LCA0NywgMTE0LCAxMDMsIDk4LCAxMDAsIDQ2LCA5NywgNTksIDEz
LCAxMCwgMTI1LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwg
ODIsIDY5LCA2NywgNzMsIDgwLCA4MiwgNzksIDY3LCA2NSwgNzYsIDk1LCA4MCwgNzMsIDUwLCAz
MiwgNDgsIDQ2LCA0OSwgNTMsIDU3LCA0OSwgNTMsIDUyLCA1NywgNTIsIDEzLCAxMCwgMzUsIDEw
MCwgMTAxLCAxMDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA4MiwgNjksIDY3LCA3MywgODAsIDgyLCA3
OSwgNjcsIDY1LCA3NiwgOTUsIDgwLCA3MywgMzIsIDQ4LCA0NiwgNTEsIDQ5LCA1NiwgNTEsIDQ4
LCA1NywgNTYsIDU2LCA1NCwgNDksIDU2LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgNzcsIDczLCA3OCwgNzMsIDc3LCA4NSwgNzcsIDg2LCA2NSwgODIsIDcz
LCA2NSwgNzgsIDY3LCA2OSwgMzIsIDQ4LCA0NiwgNDgsIDQ4LCA0OCwgNTMsIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDExMCwgMTE4LCAxMDEsIDExNCwgMTE2
LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDg0LCAxMTEsIDY1
LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDgzLCAxMDgsIDExMSwgMTEyLCAxMDEsIDQw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDEx
MCwgMTAxLCAxMTUsIDExNSwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYs
IDExNywgMTE0LCAxMTAsIDMyLCAxMTUsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDQwLCAxMTQs
IDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgNDMsIDc3LCA3Mywg
NzgsIDczLCA3NywgODUsIDc3LCA4NiwgNjUsIDgyLCA3MywgNjUsIDc4LCA2NywgNjksIDU5LCAx
MywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAyLCAxMTQs
IDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA3MSwgMTE0LCA5NywgMTIyLCAxMDUsIDExMCwgMTAz
LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0MCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA1NywgNDgsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5NywgMTE2
LCAxMDEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTks
IDEwMSwgNDgsIDQyLCA1MCwgNTMsIDQ2LCA0OCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAx
MTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
OTcsIDExMCwgOTksIDEwMSwgNTcsIDQ4LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MCwgMzIsIDEwMywgMTAxLCAxMTYsIDY1LCA2NSwgODIsIDExMSwgMTE3LCAxMDMs
IDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA3MCwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCAxMTUs
IDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4
NiwgMTAxLCA5OSwgMTE2LCAxMTEsIDExNCwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTAsIDQwLCA0OCwgNDYsIDQx
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDk3LCAxMTIs
IDExMiwgMTA4LCAxMjEsIDczLCAxMDksIDk3LCAxMDMsIDEwMSwgODAsIDExNCwgMTExLCA5OSwg
MTAxLCAxMTUsIDExNSwgMTA1LCAxMTAsIDEwMywgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAx
MTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTQsIDEw
MSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTE2LCAxMTEsIDcx
LCA5NywgMTA5LCAxMDksIDk3LCA4MywgMTEyLCA5NywgOTksIDEwMSwgNDAsIDExNCwgMTAxLCAx
MTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMTQsIDEwMywgOTgsIDQxLCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTE0LCAxMDMsIDk4LCA2MSwgMTE1LCA5Nywg
MTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgs
IDExNiwgNDYsIDExNCwgMTAzLCA5OCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDEx
NywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA1OSwgMTMsIDEw
LCAxMjUsIDEzLCAxMCwgMTE1LCAxMTYsIDExNCwgMTE3LCA5OSwgMTE2LCAzMiwgMTEyLCAxMTQs
IDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAy
LCAxMTEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEw
NSwgMTAzLCAxMDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA1OSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4
LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQs
IDEwMSwgMTAwLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1
OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDExNiwgMTE2LCAxMDEs
IDExMCwgMTE3LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgNzYsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3MiwgNTks
IDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4
NiwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwg
MTE2LCA3NiwgODUsIDExMCwgOTksIDEwOCwgOTcsIDEwOSwgMTEyLCAxMDEsIDEwMCwgNTksIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA3Niwg
NTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDg2LCAxMDAsIDExMSwgMTE2
LCA3MiwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTExLCAx
MTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDU5LCAxMywgMTAsIDEyNSwgNTksIDEz
LCAxMCwgMTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEw
MywgNzMsIDExMCwgMTAyLCAxMTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEw
MSwgODAsIDExMSwgMTA1LCAxMTAsIDExNiwgNjUsIDExMCwgMTAwLCA4MywgMTEyLCAxMTEsIDEx
NiwgODAsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3
MywgMTEwLCAxMDIsIDExMSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMDgsIDEwNSwgMTAz
LCAxMDQsIDExNiwgNjgsIDk3LCAxMTYsIDk3LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDg2
LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDc4LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTIs
IDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEw
LCAxMDIsIDExMSwgMzIsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywgMTAs
IDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDEx
NiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA2MSwgMTA4LCAxMDUsIDEwMywgMTA0LCAx
MTYsIDY4LCA5NywgMTE2LCA5NywgNDYsIDEyMCwgMTIxLCAxMjIsIDQ1LCAxMTgsIDgwLCAxMTEs
IDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwg
MTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUs
IDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwg
MTAwLCA2MSwgMTAwLCAxMTEsIDExNiwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYs
IDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2
LCA0NCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQxLCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4
LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTE1LCAxMTMsIDExNCwgMTE2
LCA0MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgODMsIDExMywgMTE3
LCA5NywgMTE0LCAxMDEsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywg
MTA4LCAxMTYsIDQ2LCA3NiwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAx
MjIsIDEwMSwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCAxMDgsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0MSwgNTksIDEzLCAx
MCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDcyLCA2MSwgMTEwLCAxMTEsIDEx
NCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgODYsIDQzLCAxMTQsIDEwMSwgMTE1
LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAx
MTcsIDEwOCwgMTE2LCA0NiwgODYsIDEwMCwgMTExLCAxMTYsIDcyLCA2MSwgMTE1LCA5NywgMTE2
LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDg2LCA0NCwg
MTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYsIDcyLCA0MSwgNDEsIDU5LCAxMywgMTAs
IDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYs
IDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDYxLCAxMDAsIDExMSwg
MTE2LCA0MCwgNzgsIDQ0LCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYsIDQx
LCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwg
MTExLCAxMTYsIDc2LCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2
OSwgMTEyLCAxMTUsIDQwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEw
MCwgMTExLCAxMTYsIDc2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAw
LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNCwg
MTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTIsIDEx
NCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAx
MDIsIDExMSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAx
MTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgOTcsIDEwOCwgODAsIDExNCwgMTAxLCA3
NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwg
NDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDk3
LCAxMTYsIDk3LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDg2LCA0NCwgMTE4LCAxMDEsIDk5
LCA1MSwgMzIsIDc4LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1
LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDEx
NCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDEx
NywgMTA4LCAxMTYsIDQ2LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAx
MTYsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMDgsIDEwMSwgMTEwLCAxMDMsIDExNiwgMTA0LCA0
MCwgNDUsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ2LCAxMjAs
IDEyMSwgMTIyLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwg
NDYsIDc2LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0
MCwgNDUsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgOTcsIDExNiwgOTcsIDQ2LCAxMjAs
IDEyMSwgMTIyLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwg
NDYsIDcyLCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0
MCwgODYsIDQzLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzYsIDQxLCA1OSwg
MTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgODYsIDEwMCwgMTExLCAx
MTYsIDcyLCA2MSwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgMTAw
LCAxMTEsIDExNiwgNDAsIDg2LCA0NCwgMTE0LCAxMDEsIDExNSwgMTE3LCAxMDgsIDExNiwgNDYs
IDcyLCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDQ2
LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAxMDksIDExMiwg
MTAxLCAxMDAsIDYxLCAxMDAsIDExMSwgMTE2LCA0MCwgNzgsIDQ0LCAxMTQsIDEwMSwgMTE1LCAx
MTcsIDEwOCwgMTE2LCA0NiwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcs
IDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA2MSwgMTE1LCA5NywgMTE2LCAx
MTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAxMTUsIDQwLCAxMTQsIDEwMSwgMTE1LCAx
MTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA4NSwgMTEwLCA5OSwgMTA4
LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAxMTYsIDU5LCAxMywg
MTAsIDEyNSwgMTMsIDEwLCAxMTIsIDExNCwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAx
MDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAx
MTcsIDExNiwgMTAxLCA3MiwgMTAxLCAxMDksIDEwNSwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQs
IDEwNSwgOTksIDgwLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAs
IDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTA4LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDY4LCA5NywgMTE2LCA5NywgNDQsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCA4NiwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA3OCwgNDEsIDMyLCAxMjMsIDEzLCAx
MCwgMTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywg
NzMsIDExMCwgMTAyLCAxMTEsIDMyLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA1OSwg
MTMsIDEwLCAxMTQsIDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAx
MTYsIDc2LCA2MSwgMTAwLCAxMTEsIDExNiwgNDAsIDc4LCA0NCwgMTA4LCAxMDUsIDEwMywgMTA0
LCAxMTYsIDY4LCA5NywgMTE2LCA5NywgNDYsIDEyMCwgMTIxLCAxMjIsIDQxLCA0MiwgNDgsIDQ2
LCA1MywgNDMsIDQ4LCA0NiwgNTMsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4
LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywg
MTE0LCA5NywgMTE2LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAsIDExNCwgMTAxLCAxMTUsIDExNywg
MTA4LCAxMTYsIDQ2LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQxLCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE1LCAxMTcsIDEwOCwgMTE2LCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA4NSwg
MTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA2MSwgMTE0LCAxMDEsIDExNSwg
MTE3LCAxMDgsIDExNiwgNDYsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNTksIDEzLCAxMCwgMTE0
LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNCwgMTAxLCAxMTUsIDExNywgMTA4LCAx
MTYsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
OTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNSwgMTE2LCA5Nywg
MTEwLCA5OSwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAx
MTEsIDEwMiwgMTAyLCA5NSwgODMsIDExNiwgOTcsIDExMCwgMTAwLCA5NywgMTE0LCAxMDAsIDQw
LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDc5LCAxMDIs
IDEwMiwgMTE1LCAxMDEsIDExNiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQs
IDk3LCAxMTAsIDEwMywgMTAxLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0LCAxMDEsIDEx
NiwgMTE3LCAxMTQsIDExMCwgMzIsIDEwOSwgOTcsIDEyMCwgNDAsIDQ4LCA0NiwgNDQsIDQ5LCA0
NiwgNDgsIDQ1LCAxMDgsIDEwMSwgMTEwLCAxMDMsIDExNiwgMTA0LCA0MCwgMTA4LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDEsIDQ3LCAxMTQsIDk3
LCAxMTAsIDEwMywgMTAxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEw
NSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcw
LCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDk1LCA4MCwgMTA0LCAxMjEsIDExNSwgMTA1
LCA5OSwgOTcsIDEwOCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAx
MTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgNDksIDQ2LCA0OCwgNDcsIDEwOSwgOTcsIDEy
MCwgNjksIDExMiwgMTE1LCA0MCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDEx
NSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAw
LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDcwLCA5NywgMTA4LCAxMDgs
IDExMSwgMTAyLCAxMDIsIDk1LCA3MSwgNzYsIDg0LCA3MCwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3
LCAxMTAsIDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAsIDQ0LCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA1LCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNSwgMTAx
LCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEs
IDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4
LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAx
LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA2MSwgNDksIDQ2LCA0OCwgNDcsIDEw
OSwgOTcsIDEyMCwgNjksIDExMiwgMTE1LCA0MCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4
LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQs
IDEwMSwgMTAwLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEw
MiwgOTcsIDk5LCAxMTYsIDExMSwgMTE0LCA2MSwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4
LCAxMDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQs
IDEwMSwgMTAwLCA0MiwgMTA1LCAxMTAsIDExOCwgMTAxLCAxMTQsIDExNSwgMTAxLCA4MywgMTEz
LCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA4MiwgOTcsIDExMCwgMTAzLCAxMDEsIDU5LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5NywgMTE2LCAxMTYsIDEwMSwgMTEwLCAx
MTcsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDYxLCAxMTUsIDk3LCAxMTYsIDExNywgMTE0LCA5
NywgMTE2LCAxMDEsIDQwLCA0OSwgNDYsIDQ4LCA0NSwgMTAyLCA5NywgOTksIDExNiwgMTExLCAx
MTQsIDQyLCAxMDIsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwgNDEsIDU5LCAxMywgMTAsIDk3LCAx
MTYsIDExNiwgMTAxLCAxMTAsIDExNywgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNDIsIDYxLCA5
NywgMTE2LCAxMTYsIDEwMSwgMTEwLCAxMTcsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAx
MywgMTAsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDEx
MCwgOTksIDEwMSwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgNDIsIDYxLCA5Nywg
MTE2LCAxMTYsIDEwMSwgMTEwLCAxMTcsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDU5LCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQs
IDExNiwgNjgsIDEwNSwgMTE1LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDcwLCA5NywgMTA4LCAx
MDgsIDExMSwgMTAyLCAxMDIsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUs
IDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwg
OTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEw
OCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3OSwgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDQ0LCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAx
MDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEw
MSwgMTAwLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgOTcsIDExMCwgMTAz
LCAxMDEsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA1LCAxMTAsIDExOCwgMTAx
LCAxMTQsIDExNSwgMTAxLCA4MywgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgMTAwLCA4MiwgOTcs
IDExMCwgMTAzLCAxMDEsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAx
MTcsIDExNCwgMTEwLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAx
MDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3
MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA5NSwgODAsIDEwNCwgMTIxLCAxMTUsIDEw
NSwgOTksIDk3LCAxMDgsIDQwLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE1
LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCAxMDAs
IDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2OCwgMTA1LCAxMTQsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTEsIDExMCwgOTcsIDEwOCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAs
IDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEwMiwgOTUsIDgzLCAxMTYsIDk3LCAxMTAsIDEwMCwg
OTcsIDExNCwgMTAwLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDEx
OCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2
LCAxMDEsIDExNCwgODcsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwg
MTE1LCA3MiwgOTcsIDEwOCwgMTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA0NCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMSwgMTIwLCAxMTIsIDExMSwgMTEwLCAxMDEsIDExMCwg
MTE2LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA2MSwgNDgsIDQ2LCA0OCwgNTksIDEz
LCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk5LCAxMTEsIDExNSwgNjUsIDExMCwg
MTAzLCAxMDgsIDEwMSwgNjEsIDEwOSwgOTcsIDEyMCwgNjksIDExMiwgMTE1LCA0MCwgMTAwLCAx
MTEsIDExNiwgNDAsIDQ1LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAx
MDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTA1LCAxMDIs
IDMyLCA0MCwgOTksIDExMSwgMTE1LCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA2MiwgNjEsIDk5
LCAxMTEsIDExNSwgNzIsIDk3LCAxMDgsIDEwMiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNDEs
IDEzLCAxMCwgMTIzLCAxMywgMTAsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA2
MSwgMTA5LCA5NywgMTIwLCA0MCwgNDgsIDQ2LCA0NCwgMTEyLCAxMTEsIDExOSwgNDAsIDk5LCAx
MTEsIDExNSwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNDQsIDEwMSwgMTIwLCAxMTIsIDExMSwg
MTEwLCAxMDEsIDExMCwgMTE2LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAy
LCAxMDIsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5NywgMTA4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3
MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA5NSwgODAsIDEwNCwgMTIxLCAxMTUsIDEw
NSwgOTksIDk3LCAxMDgsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEwMywg
MTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAx
MTEsIDExMCwgODQsIDExMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAx
MTYsIDEwMSwgMTE0LCA4NywgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTEx
LCAxMTUsIDcyLCA5NywgMTA4LCAxMDIsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDQxLCAxMywg
MTAsIDEyMywgMTMsIDEwLCA5OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDEwNywgNzcsIDEwNSwgMTEwLCAxMTcsIDExNSwgNzYsIDExMSwgMTAz
LCA1MCwgNjcsIDExMSwgMTEwLCAxMDEsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDczLCAxMTAs
IDExNiwgMTAxLCAxMTAsIDExNSwgMTA1LCAxMTYsIDEyMSwgODIsIDk3LCAxMTYsIDEwNSwgMTEx
LCA2MSwgNTQsIDQ2LCA1NCwgNTIsIDUxLCA1NiwgNTMsIDU0LCA0OSwgNTYsIDU3LCA1NSwgNTUs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTExLCAxMTAsIDk5
LCAxMDEsIDExMCwgMTE2LCAxMTQsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc1LCA5NywgMTEy
LCAxMTIsIDk3LCA2MSwgMTA3LCA3NywgMTA1LCAxMTAsIDExNywgMTE1LCA3NiwgMTExLCAxMDMs
IDUwLCA2NywgMTExLCAxMTAsIDEwMSwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNzMsIDExMCwg
MTE2LCAxMDEsIDExMCwgMTE1LCAxMDUsIDExNiwgMTIxLCA4MiwgOTcsIDExNiwgMTA1LCAxMTEs
IDQ3LCA0MCwgNDksIDQ2LCA0OCwgNDUsIDk5LCAxMTEsIDExNSwgNzIsIDk3LCAxMDgsIDEwMiwg
NjUsIDExMCwgMTAzLCAxMDgsIDEwMSwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTIs
IDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYs
IDEwNSwgMTExLCAxMTAsIDgzLCAxMTIsIDExNCwgMTAxLCA5NywgMTAwLCA4MywgNzEsIDYxLCAx
MTgsIDEwMSwgOTksIDUyLCA0MCwgNDUsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1
LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDIsIDk5LCAxMTEsIDExMCwgOTks
IDEwMSwgMTEwLCAxMTYsIDExNCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzUsIDk3LCAxMTIs
IDExMiwgOTcsIDQ0LCA0NSwgOTksIDExMSwgMTEwLCA5OSwgMTAxLCAxMTAsIDExNiwgMTE0LCA5
NywgMTE2LCAxMDUsIDExMSwgMTEwLCA3NSwgOTcsIDExMiwgMTEyLCA5NywgNDEsIDU5LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDIsIDk3LCAxMDgsIDEwOCwgMTExLCAx
MDIsIDEwMiwgNjEsIDEwMSwgMTIwLCAxMTIsIDUwLCA0MCwgMTAwLCAxMTEsIDExNiwgNDAsIDEx
OCwgMTAxLCA5OSwgNTIsIDQwLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2
LCAxMDEsIDExNCwgODcsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgNDQsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDEx
MiwgMTE0LCAxMDEsIDk3LCAxMDAsIDgzLCA3MSwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEw
MSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAx
MDIsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
OTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA5NywgMTA4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwg
OTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA5NSwgNzEsIDc2LCA4NCwgNzAsIDQwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEw
MCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODQsIDExMSwgNzYsIDEw
NSwgMTAzLCAxMDQsIDExNiwgNjcsIDEwMSwgMTEwLCAxMTYsIDEwMSwgMTE0LCA4NywgNDQsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjUsIDEx
MCwgMTAzLCAxMDgsIDEwMSwgODMsIDk5LCA5NywgMTA4LCAxMDEsIDQ0LCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY1LCAxMTAsIDEwMywgMTA4
LCAxMDEsIDc5LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDEsIDEzLCAxMCwgMTIzLCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTAwLCA2MSwgMTAwLCAxMTEsIDEx
NiwgNDAsIDQ1LCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjgsIDEwNSwgMTE0LCAxMDEsIDk5
LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDEx
MCwgMTE2LCAxMDEsIDExNCwgODcsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5Nywg
MTE2LCAzMiwgMTAyLCA5NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDYxLCAxMTUsIDk3LCAx
MTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDQwLCA5OSwgMTAwLCA0MiwgMTA4LCAxMDUsIDEw
MywgMTA0LCAxMTYsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDgzLCA5OSwgOTcsIDEwOCwgMTAx
LCA0MywgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY1LCAxMTAsIDEwMywgMTA4LCAxMDEsIDc5
LCAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgNDEsIDU5LCAxMywgMTAsIDEwMiwgOTcsIDEwOCwg
MTA4LCAxMTEsIDEwMiwgMTAyLCA0MiwgNjEsIDEwMiwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwg
MTAyLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTAyLCA5
NywgMTA4LCAxMDgsIDExMSwgMTAyLCAxMDIsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEs
IDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA5NywgMTA4LCA3Niwg
MTA1LCAxMDMsIDEwNCwgMTE2LCA3MCwgOTcsIDEwOCwgMTA4LCAxMTEsIDEwMiwgMTAyLCA0MCwg
MTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2OCwgMTA1LCAx
MTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMTEsIDc2
LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMDEsIDExMCwgMTE2LCAxMDEsIDExNCwgODcsIDQ0
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTksIDExMSwgMTE1LCA3MiwgOTcsIDEwOCwg
MTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwgMTAxLCA0NCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDEwMSwgMTIwLCAxMTIsIDExMSwgMTEwLCAxMDEsIDExMCwgMTE2LCA0NCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NSwgMTEwLCAxMDMs
IDEwOCwgMTAxLCA4MywgOTksIDk3LCAxMDgsIDEwMSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCAxMDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgNjUsIDExMCwgMTAzLCAxMDgsIDEwMSwg
NzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE0
LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDk5LCAxMTEsIDEwOSwgMTEyLCAxMTcsIDEx
NiwgMTAxLCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgOTcsIDEw
OCwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgNzAsIDk3LCAxMDgsIDEwOCwgMTExLCAxMDIsIDEw
MiwgOTUsIDgwLCAxMDQsIDEyMSwgMTE1LCAxMDUsIDk5LCA5NywgMTA4LCA0MCwgMTA4LCAxMDUs
IDEwMywgMTA0LCAxMTYsIDY4LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA0NCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4NCwgMTEx
LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTAxLCAxMTAsIDExNiwgMTAxLCAxMTQsIDg3
LCA0NCwgOTksIDExMSwgMTE1LCA3MiwgOTcsIDEwOCwgMTAyLCA2NSwgMTEwLCAxMDMsIDEwOCwg
MTAxLCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUs
IDExMCwgMTAxLCAzMiwgNzAsIDgyLCA2OSwgODMsIDc4LCA2OSwgNzYsIDk1LCA3NywgNjUsIDg4
LCA3MywgNzcsIDg1LCA3NywgOTUsIDc5LCA3OCwgOTUsIDgyLCA3OSwgODUsIDcxLCA3MiwgMzIs
IDQ4LCA0NiwgNTAsIDUzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDMsIDEwMSwg
MTE2LCA2OSwgMTEwLCAxMDEsIDExNCwgMTAzLCAxMjEsIDY3LCAxMTEsIDExMCwgMTE1LCAxMDEs
IDExNCwgMTE4LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCA3MCwgOTcsIDk5LCAxMTYsIDExMSwg
MTE0LCA0MCwgOTksIDExMSwgMTEwLCAxMTUsIDExNiwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1
LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA0OCwgNDQsIDk5LCAxMTEs
IDExMCwgMTE1LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAxLCAxMTAsIDExOCwg
MTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDY2LCAxMTQsIDEwMCwgMTAy
LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwg
NDksIDQ2LCA0OCwgNDMsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwgNjks
IDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDQ4
LCA0MiwgNDAsIDQ5LCA0NiwgNDgsIDQ3LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAx
MTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDQ2LCAxMjEsIDQ1LCA0
OSwgNDYsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMDMsIDEwMSwgMTE2LCA2NiwgODIsIDY4LCA3MCwgNzYsIDExMSwgMTExLCAxMDcsIDEx
NywgMTEyLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2
LCA4NiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTIsIDEwMSwgMTE0LCA5OSwg
MTAxLCAxMTIsIDExNiwgMTE3LCA5NywgMTA4LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAs
IDEwMSwgMTE1LCAxMTUsIDQxLCAzMiwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTAsIDMy
LCA4NSwgODYsIDYxLCAxMTgsIDEwMSwgOTksIDUwLCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDg2
LCA0NCwgMTEyLCAxMDEsIDExNCwgOTksIDEwMSwgMTEyLCAxMTYsIDExNywgOTcsIDEwOCwgODIs
IDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgNTksIDEzLCAxMCwg
MTE4LCAxMDEsIDk5LCA1MiwgMzIsIDk4LCAxMTQsIDEwMCwgMTAyLCA3NiwgMTExLCAxMTEsIDEw
NywgMTE3LCAxMTIsIDYxLCAxMTYsIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDQwLCAx
MDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYs
IDExNCwgMTAwLCAxMDIsIDgzLCA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDQ0LCA4NSwg
ODYsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTgs
IDExNCwgMTAwLCAxMDIsIDc2LCAxMTEsIDExMSwgMTA3LCAxMTcsIDExMiwgNDYsIDExNCwgMTAz
LCA5OCwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDMs
IDEwMSwgMTE2LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwg
MTAxLCA3MCwgMTE0LCAxMTEsIDEwOSwgNjYsIDgyLCA2OCwgNzAsIDc2LCAxMTEsIDExMSwgMTA3
LCAxMTcsIDExMiwgNDAsIDk5LCAxMTEsIDExMCwgMTE1LCAxMTYsIDMyLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAx
MTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNDgsIDQ0LCA5
OSwgMTExLCAxMTAsIDExNSwgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMSwgMTEw
LCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAx
MDAsIDEwMiwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA2MSwgMTA5LCAx
MDUsIDEyMCwgNDAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEs
IDExMCwgMTE2LCA2NiwgMTE0LCAxMDAsIDEwMiwgNDYsIDEyMCwgMTIwLCAxMjAsIDQ0LCAxMDEs
IDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNjYsIDEx
NCwgMTAwLCAxMDIsIDQ2LCAxMjEsIDEyMSwgMTIxLCA0NCwgMTE1LCAxMTIsIDEwMSwgOTksIDEx
NywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAx
MDEsIDExMCwgMTE2LCA4MiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcs
IDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAs
IDk5LCAxMDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTAzLCAxMDEsIDExNiwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwg
OTksIDEwMSwgNzAsIDExNCwgMTExLCAxMDksIDY1LCAxMTAsIDk3LCAxMDgsIDEyMSwgMTE2LCAx
MDUsIDk5LCA5NywgMTA4LCA2NiwgODIsIDY4LCA3MCwgNzYsIDExMSwgMTExLCAxMDcsIDExNywg
MTEyLCA5NSwgNzQsIDExMSwgMTEwLCAxMDEsIDExNSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAx
MTYsIDMyLCA4NiwgMTAwLCAxMTEsIDExNiwgNzgsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwg
MTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0
NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2
LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTE1LCAxMDksIDExMSwgMTExLCAxMTYsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwg
MTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExOSwgMTAx
LCAxMDUsIDEwMywgMTA0LCAxMTYsIDYxLCAxMDksIDEwNSwgMTIwLCA0MCwgNzAsIDgyLCA2OSwg
ODMsIDc4LCA2OSwgNzYsIDk1LCA3NywgNjUsIDg4LCA3MywgNzcsIDg1LCA3NywgOTUsIDc5LCA3
OCwgOTUsIDgyLCA3OSwgODUsIDcxLCA3MiwgNDQsIDQ5LCA0NiwgNDgsIDQ0LCAxMTUsIDEwOSwg
MTExLCAxMTEsIDExNiwgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0MywgMTE5LCAxMDEsIDEwNSwgMTAzLCAx
MDQsIDExNiwgNDIsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDEx
MCwgOTksIDEwMSwgNTcsIDQ4LCA0NSwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYs
IDk3LCAxMTAsIDk5LCAxMDEsIDQ4LCA0MSwgNDIsIDExMiwgMTExLCAxMTksIDUzLCA0MCwgMTE1
LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgNDksIDQ2LCA0OCwgNDUsIDg2
LCAxMDAsIDExMSwgMTE2LCA3OCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgODMs
IDk5LCAxMDQsIDEwOCwgMTA1LCA5OSwgMTA3LCA3MSwgNzEsIDg4LCA0MCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDQsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEw
MSwgNDgsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNDEsIDEzLCAxMCwgMTIzLCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQzLCA0MCwgMTE0LCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNDUsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDEsIDQy
LCAxMTIsIDExMSwgMTE5LCA1MywgNDAsIDQ5LCA0NiwgNDgsIDQ1LCA4NiwgMTAwLCAxMTEsIDEx
NiwgNzIsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDEwMiwgMTE0LCAxMDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgODMsIDk5LCAxMDQsIDEw
OCwgMTA1LCA5OSwgMTA3LCA3MSwgNzEsIDg4LCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwg
MzIsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMy
LCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgs
IDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNDEsIDEzLCAxMCwgMTIzLCAxMywg
MTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgs
IDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDgsIDQzLCA0MCwgMTE0LCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNDUsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0OCwgNDEsIDQy
LCAxMTIsIDExMSwgMTE5LCA1MywgNDAsIDQ5LCA0NiwgNDgsIDQ1LCA4NiwgMTAwLCAxMTEsIDEx
NiwgNzIsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNjgsIDEwNSwgMTE1LCAxMTYsIDEx
NCwgMTA1LCA5OCwgMTE3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDcwLCAxMTcsIDExMCwgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgOTUsIDg0LCAxMTQsIDExMSwgMTE5LCA5OCwgMTE0LCAxMDUsIDEw
MCwgMTAzLCAxMDEsIDgyLCAxMDEsIDEwNSwgMTE2LCAxMjIsIDcxLCA3MSwgODgsIDQwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDcyLCA0NCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAxMDgsIDExMiwgMTA0LCA5NywgNzEsIDQxLCAxMywg
MTAsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgOTcsIDUwLCA2MSwg
MTE1LCAxMTMsIDExNywgOTcsIDExNCwgMTAxLCA0MCwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3
MSwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDYxLCA3
OCwgMTAwLCAxMTEsIDExNiwgNzIsIDQyLCA3OCwgMTAwLCAxMTEsIDExNiwgNzIsIDQyLCA0MCwg
OTcsIDUwLCA0NSwgNDksIDQ2LCA0OCwgNDEsIDQzLCA0OSwgNDYsIDQ4LCA1OSwgMTMsIDEwLCAx
MTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTcsIDUwLCA0NywgNDAsIDgwLCA3Mywg
NDIsIDEwMCwgNDIsIDEwMCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTE1LCAxMDksIDEwNSwgMTE2LCAxMDQsIDg2LCAxMDUsIDExNSwg
MTA1LCA5OCwgMTA1LCAxMDgsIDEwNSwgMTE2LCAxMjEsIDk1LCA3MSwgNzEsIDg4LCA2NywgMTEx
LCAxMTQsIDExNCwgMTAxLCAxMDgsIDk3LCAxMTYsIDEwMSwgMTAwLCA0MCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA3NiwgNDQsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDQ0LCAxMDIsIDEwOCwgMTExLCA5
NywgMTE2LCAzMiwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNDEsIDMyLCAxMjMsIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCA1MCwgNjEsIDk3LCAxMDgsIDExMiwg
MTA0LCA5NywgNzEsIDQyLCA5NywgMTA4LCAxMTIsIDEwNCwgOTcsIDcxLCA1OSwgMTMsIDEwLCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzEsIDcxLCA4OCwgODYsIDYxLCA3OCwgMTAwLCAx
MTEsIDExNiwgNzYsIDQyLCAxMTUsIDExMywgMTE0LCAxMTYsIDQwLCA3OCwgMTAwLCAxMTEsIDEx
NiwgODYsIDQyLCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NSwgOTcsIDUwLCA0MiwgNzgs
IDEwMCwgMTExLCAxMTYsIDg2LCA0MSwgNDMsIDk3LCA1MCwgNDEsIDU5LCAxMywgMTAsIDEwMiwg
MTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3MSwgNzEsIDg4LCA3NiwgNjEsIDc4LCAxMDAsIDExMSwg
MTE2LCA4NiwgNDIsIDExNSwgMTEzLCAxMTQsIDExNiwgNDAsIDc4LCAxMDAsIDExMSwgMTE2LCA3
NiwgNDIsIDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQ1LCA5NywgNTAsIDQyLCA3OCwgMTAw
LCAxMTEsIDExNiwgNzYsIDQxLCA0MywgOTcsIDUwLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDQ4LCA0NiwgNTMsIDQ3LCA0MCwgNzEsIDcxLCA4OCwg
ODYsIDQzLCA3MSwgNzEsIDg4LCA3NiwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAx
LCA2NiwgODIsIDY4LCA3MCwgOTUsIDY2LCAxMTcsIDExNCwgMTA4LCAxMDEsIDEyMSwgNDAsIDEw
MiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQ0LCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTAyLCAx
MDgsIDExMSwgOTcsIDExNiwgMzIsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDQsIDEwMiwgMTA4
LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDEx
NSwgMTE1LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTAwLCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA3MCwgMTE0LCAxMDEsIDExNSwgMTEw
LCAxMDEsIDEwOCwgNzgsIDg2LCA2MSwgMTEyLCAxMTEsIDExOSwgNTMsIDQwLCAxMTUsIDk3LCAx
MTYsIDExNywgMTE0LCA5NywgMTE2LCAxMDEsIDY5LCAxMTIsIDExNSwgNDAsIDQ5LCA0NiwgNDgs
IDQ1LCA3OCwgMTAwLCAxMTEsIDExNiwgNzYsIDQxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAs
IDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDc4LCA3NiwgNjEsIDExMiwgMTExLCAxMTks
IDUzLCA0MCwgMTE1LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA2OSwgMTEyLCAx
MTUsIDQwLCA0OSwgNDYsIDQ4LCA0NSwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0MSwgNDEsIDU5
LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIs
IDExNywgMTE1LCAxMDEsIDcwLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA1NywgNDgs
IDYxLCA0OCwgNDYsIDUzLCA0MywgNTAsIDQ2LCA0OCwgNDIsIDg2LCAxMDAsIDExMSwgMTE2LCA3
MiwgNDIsIDg2LCAxMDAsIDExMSwgMTE2LCA3MiwgNDIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0
LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYs
IDMyLCAxMDIsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDMyLCA2MSwgMTMsIDEwLCA0
MCwgNDksIDQ2LCA0OCwgNDMsIDQwLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEs
IDcwLCAxMTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA1NywgNDgsIDQ1LCA0OSwgNDYsIDQ4
LCA0MSwgNDIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAx
LCAxMTUsIDExMCwgMTAxLCAxMDgsIDc4LCA3NiwgNDEsIDMyLCA0MiwgMTMsIDEwLCA0MCwgNDks
IDQ2LCA0OCwgNDMsIDQwLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDcwLCAx
MTQsIDEwMSwgMTE1LCAxMTAsIDEwMSwgMTA4LCA1NywgNDgsIDQ1LCA0OSwgNDYsIDQ4LCA0MSwg
NDIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzAsIDExNCwgMTAxLCAxMTUs
IDExMCwgMTAxLCAxMDgsIDc4LCA4NiwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDEx
NywgMTE0LCAxMTAsIDMyLCAxMDIsIDExNCwgMTAxLCAxMTUsIDExMCwgMTAxLCAxMDgsIDQ3LCA4
MCwgNzMsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAx
MTAsIDEwMSwgMzIsIDY3LCA3NiwgNjksIDY1LCA4MiwgNjcsIDc5LCA2NSwgODQsIDgyLCA2OSwg
NzAsIDc2LCA2OSwgNjcsIDg0LCA2NSwgNzgsIDY3LCA2OSwgNTcsIDQ4LCAzMiwgNDksIDQ2LCA0
OCwgMTMsIDEwLCAxMTUsIDExNiwgMTE0LCAxMTcsIDk5LCAxMTYsIDMyLCAxMDgsIDEwNSwgMTAz
LCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTAyLCAxMTEsIDEzLCAxMCwgMTIz
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywg
MTE1LCAxMDEsIDU5LCAxMywgMTAsIDEyNSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcs
IDExNiwgMzIsIDk3LCAxMDAsIDEwNiwgMTE3LCAxMTUsIDExNiwgODIsIDExMSwgMTE3LCAxMDMs
IDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA3MCwgMTE0LCAxMTEsIDEwOSwgNzYsIDEwNSwgMTAz
LCAxMDQsIDExNiwgODAsIDExNCwgMTExLCAxMTIsIDEwMSwgMTE0LCAxMTYsIDEwNSwgMTAxLCAx
MTUsIDQwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMTEsIDExNywgMTAzLCAx
MDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAx
MDgsIDEwNSwgMTAzLCAxMDQsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwgMTE3LCAxMTUsIDQ0LCAx
MDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY4LCAx
MDUsIDExNSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIs
IDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDgyLCAxMTEs
IDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNjEsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCAxMTcsIDExNSwgNDcsIDEwOCwgMTA1LCAxMDMsIDEw
NCwgMTE2LCA2OCwgMTA1LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNTksIDEzLCAxMCwg
MTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNiwgMTExLCAxMTYsIDk3LCAxMDgsIDgyLCAx
MTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNjEsIDExNSwgOTcsIDExNiwg
MTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA4Miwg
MTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDQzLCAxMTQsIDExMSwgMTE3
LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEs
IDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExNiwgMTExLCAxMTYsIDk3LCAxMDgsIDgyLCAxMTEs
IDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNTksIDEzLCAxMCwgMTI1LCAxMywg
MTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEw
MSwgNzIsIDEwMSwgMTA5LCAxMDUsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDUsIDk5LCA2
OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwg
MTA1LCAxMTAsIDEwMywgNDAsIDExMiwgMTE0LCAxMDEsIDc2LCAxMDUsIDEwMywgMTA0LCAxMTYs
IDEwNSwgMTEwLCAxMDMsIDczLCAxMTAsIDEwMiwgMTExLCAzMiwgMTA1LCAxMTAsIDEwMiwgMTEx
LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2Nywg
MTExLCAxMDgsIDExMSwgMTE0LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMywgMTE0LCAx
MTEsIDExNywgMTEwLCAxMDAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQxLCAzMiwgMTIzLCAx
MywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDksIDEwNSwgMTIwLCA0
MCwgMTAzLCAxMTQsIDExMSwgMTE3LCAxMTAsIDEwMCwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwg
NDQsIDEwOCwgMTA1LCAxMDMsIDEwNCwgMTE2LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NCwg
MTA1LCAxMTAsIDEwMiwgMTExLCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0MSwgNTksIDEz
LCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDksIDEx
MiwgMTE3LCAxMTYsIDEwMSwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDc2LCAx
MDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDQwLCAxMTIsIDExNCwgMTAxLCA3Niwg
MTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMDIsIDExMSwgMzIs
IDEwNSwgMTEwLCAxMDIsIDExMSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDEwNSwg
MTAzLCAxMDQsIDExNiwgNjcsIDExMSwgMTA4LCAxMTEsIDExNCwgNDEsIDMyLCAxMjMsIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAx
MTUsIDEwMSwgODQsIDEwMSwgMTE0LCAxMDksIDYxLCAxMDAsIDEwNSwgMTAyLCAxMDIsIDExNywg
MTE1LCAxMDEsIDY2LCA4MiwgNjgsIDcwLCA5NSwgNjYsIDExNywgMTE0LCAxMDgsIDEwMSwgMTIx
LCA0MCwgMTA1LCAxMTAsIDEwMiwgMTExLCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDc2LCA0NCwg
MTA1LCAxMTAsIDEwMiwgMTExLCA0NiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA0NCwgMTA1LCAx
MTAsIDEwMiwgMTExLCA0NiwgODYsIDEwMCwgMTExLCAxMTYsIDcyLCA0NCwgMTA1LCAxMTAsIDEw
MiwgMTExLCA0NiwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwg
NDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDAsIDEw
NSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDg0LCAxMDEsIDExNCwgMTA5LCA0MiwgMTA1LCAx
MTAsIDEwMiwgMTExLCA0NiwgOTcsIDExNiwgMTE2LCAxMDEsIDExMCwgMTE3LCA5NywgMTE2LCAx
MDUsIDExMSwgMTEwLCA0MiwgMTA1LCAxMTAsIDEwMiwgMTExLCA0NiwgNzgsIDEwMCwgMTExLCAx
MTYsIDc2LCA0MiwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDY3LCAxMTEsIDEwOCwgMTExLCAx
MTQsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgOTksIDEx
MSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDgwLCAxMTQsIDExMSwgMTA2LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDg0LCAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA2OCwg
MTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1
LCAxMTAsIDEwMywgODUsIDg2LCA0MCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNiwgMTAxLCAx
MjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMjMsIDEzLCAx
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExNSwgMTE2LCAxMTQsIDExMywgNjEsIDExNiwgMTAx
LCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODAsIDExNCwgMTExLCAxMDYsIDEwMSwgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEw
MSwgOTksIDUyLCA0MCwgMTE4LCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA4NywgNDQsIDQ5LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMTUsIDExNiwgMTE0LCAxMTMs
IDQ3LCA2MSwgMTE1LCAxMTYsIDExNCwgMTEzLCA0NiwgMTE5LCA1OSwgMTMsIDEwLCAxMTQsIDEw
MSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE1LCAxMTYsIDExNCwgMTEzLCA0NiwgMTIwLCAx
MjEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwg
MTAzLCAxMDEsIDExNiwgNzYsIDExMSwgMTAwLCA3MCwgMTE0LCAxMTEsIDEwOSwgNjUsIDEwOCwg
MTEyLCAxMDQsIDk3LCA3MSwgNDAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCA5OSwgMTE3
LCA5OCwgMTAxLCA3NywgOTcsIDExMiwgNjgsIDEwNSwgMTA5LCAxMDEsIDExMCwgMTE1LCAxMDUs
IDExMSwgMTEwLCA4MCwgMTA1LCAxMjAsIDEwMSwgMTA4LCAxMTUsIDQ0LCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAy
LCA5NywgOTksIDEwMSwgNjUsIDExOCwgMTAxLCAxMTQsIDk3LCAxMDMsIDEwMSwgODMsIDEwOCwg
MTExLCAxMTIsIDEwMSwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDEx
NiwgMzIsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5
LCAxMDEsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDgzLCAxMDgsIDExMSwgMTEy
LCAxMDEsIDg0LCAxMDEsIDEyMCwgMTAxLCAxMDgsIDExNSwgNjEsIDk5LCAxMTcsIDk4LCAxMDEs
IDc3LCA5NywgMTEyLCA2OCwgMTA1LCAxMDksIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTExLCAxMTAs
IDgwLCAxMDUsIDEyMCwgMTAxLCAxMDgsIDExNSwgNDIsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEs
IDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMTgsIDEwMSwgMTE0LCA5Nywg
MTAzLCAxMDEsIDgzLCAxMDgsIDExMSwgMTEyLCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAx
MTEsIDk3LCAxMTYsIDMyLCAxMDgsIDExMSwgMTAwLCA2MSwgMTA4LCAxMTEsIDEwMywgNTAsIDQw
LCAxMDksIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAx
LCA2NSwgMTE4LCAxMDEsIDExNCwgOTcsIDEwMywgMTAxLCA4MywgMTA4LCAxMTEsIDExMiwgMTAx
LCA4NCwgMTAxLCAxMjAsIDEwMSwgMTA4LCAxMTUsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwg
MTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTA4LCAxMTEsIDEwMCwgNTksIDEzLCAxMCwgMTI1LCAx
MywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDMsIDEwMSwgMTE2LCA3NiwgMTA1
LCAxMTAsIDEwMSwgOTcsIDExNCwgNzYsIDExMSwgMTAwLCA3MCwgMTE0LCAxMTEsIDEwOSwgODIs
IDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MCwgMTAyLCAxMDgsIDEx
MSwgOTcsIDExNiwgMzIsIDk5LCAxMTcsIDk4LCAxMDEsIDc3LCA5NywgMTEyLCA2OCwgMTA1LCAx
MDksIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTExLCAxMTAsIDgwLCAxMDUsIDEyMCwgMTAxLCAxMDgs
IDExNSwgNDQsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDExMSwgMTE3LCAxMDMs
IDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA0MSwgMzIsIDEyMywgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTA4LCAxMTEsIDEwMCwgNjEsIDEwOCwgMTExLCAxMDMsIDUwLCA0
MCwgOTksIDExNywgOTgsIDEwMSwgNzcsIDk3LCAxMTIsIDY4LCAxMDUsIDEwOSwgMTAxLCAxMTAs
IDExNSwgMTA1LCAxMTEsIDExMCwgODAsIDEwNSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA0MSwgNDIs
IDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwgMTE1LCAxMTUsIDU5LCAxMywgMTAs
IDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMDgsIDExMSwgMTAwLCA1OSwgMTMs
IDEwLCAxMjUsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMSwgMTEwLCAx
MTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwg
MTA1LCA5NywgMTEwLCA5OSwgMTAxLCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDEx
MSwgMTEwLCA0MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDk3LCAxMDksIDk4LCAxMDUs
IDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEwNSwgMTExLCAxMTAs
IDQ0LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgNzgsIDEwMCwgMTExLCAxMTYsIDg2LCA4
NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEwMSwgMTAwLCA0MSwgMzIsIDEyMywgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE2LCAxMDEsIDEwOSwgMTEyLCA2MSwg
NzgsIDEwMCwgMTExLCAxMTYsIDg2LCA4NSwgMTEwLCA5OSwgMTA4LCA5NywgMTA5LCAxMTIsIDEw
MSwgMTAwLCA0MywgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwgNzksIDk5LCA5OSwg
MTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwg
MTE3LCAxMTQsIDExMCwgMzIsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwg
NDAsIDExNSwgMTEzLCAxMTcsIDk3LCAxMTQsIDEwMSwgNDAsIDExNiwgMTAxLCAxMDksIDExMiwg
NDEsIDQ1LCA0OSwgNDYsIDQ4LCA0MywgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDExNiwg
NzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNDEsIDU5LCAxMywgMTAs
IDEyNSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTAxLCAxMTAsIDExOCwg
MTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDcyLCAxMTEsIDExNCwgMTA1
LCAxMjIsIDExMSwgMTEwLCA3OSwgOTksIDk5LCAxMDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEw
LCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwgNDQsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQxLCAzMiwgMTIz
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgNjEsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA0NCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5Nywg
MTA4LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNiwgMTAx
LCAxMDksIDExMiwgNjEsIDExNSwgOTcsIDExNiwgMTE3LCAxMTQsIDk3LCAxMTYsIDEwMSwgNDAs
IDQ5LCA0NiwgNDgsIDQzLCA0OSwgNDYsIDQ5LCA0MiwgMTAwLCAxMTEsIDExNiwgNDAsIDExNCwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTEwLCAxMTEs
IDExNCwgMTA5LCA5NywgMTA4LCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDEx
NywgMTE0LCAxMTAsIDMyLCAxMTUsIDExMywgMTE3LCA5NywgMTE0LCAxMDEsIDQwLCAxMTYsIDEw
MSwgMTA5LCAxMTIsIDQxLCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDExMiwgOTcsIDExNCwgOTcsIDEwOCwgMTA4LCA5NywgMTIwLCA2NywgMTExLCAxMTQs
IDExNCwgMTAxLCA5OSwgMTE2LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDAsIDMyLCAx
MTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4LCAxMDEsIDExNCwgMTE2LCAxMDEsIDEyMCwgODAsIDEx
MSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExMSwgMTE0LCAxMDUsIDEwMywgODYs
IDEwMSwgOTksIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExNywgOTgsIDEwMSwgODMs
IDEwNSwgMTIyLCAxMDEsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExNywgOTgsIDEw
MSwgODAsIDExMSwgMTE1LCAzMiwgNDEsIDMyLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1
MSwgMzIsIDEwNSwgMTEwLCAxMTgsIDc5LCAxMTQsIDEwNSwgMTAzLCA4NiwgMTAxLCA5OSwgNjEs
IDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0OSwgNDYsIDQ4LCA0NCwgNDksIDQ2LCA0OCwgNDQsIDQ5
LCA0NiwgNDgsIDQxLCA0NywgMTExLCAxMTQsIDEwNSwgMTAzLCA4NiwgMTAxLCA5OSwgNTksIDEz
LCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNCwgOTcsIDEwOCwgMTAyLCA4MywgMTA1LCAx
MjIsIDEwMSwgNjEsIDk5LCAxMTcsIDk4LCAxMDEsIDgzLCAxMDUsIDEyMiwgMTAxLCA0MiwgNDgs
IDQ2LCA1MywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwNSwgMTEwLCAxMTYs
IDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDY1LCAxMTYsIDc3LCA5NywgMTIwLCA4MCwgMTA4LCA5
NywgMTEwLCAxMDEsIDYxLCA0MCwgOTksIDExNywgOTgsIDEwMSwgODAsIDExMSwgMTE1LCA0Mywg
MTA0LCA5NywgMTA4LCAxMDIsIDgzLCAxMDUsIDEyMiwgMTAxLCA0NSwgMTE4LCAxMDEsIDExNCwg
MTE2LCAxMDEsIDEyMCwgODAsIDExMSwgMTE1LCA0MSwgNDIsIDEwNSwgMTEwLCAxMTgsIDc5LCAx
MTQsIDEwNSwgMTAzLCA4NiwgMTAxLCA5OSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTksIDY1LCAxMTYsIDc3LCAx
MDUsIDExMCwgODAsIDEwOCwgOTcsIDExMCwgMTAxLCA2MSwgNDAsIDk5LCAxMTcsIDk4LCAxMDEs
IDgwLCAxMTEsIDExNSwgNDUsIDEwNCwgOTcsIDEwOCwgMTAyLCA4MywgMTA1LCAxMjIsIDEwMSwg
NDUsIDExOCwgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDgwLCAxMTEsIDExNSwgNDEsIDQyLCAx
MDUsIDExMCwgMTE4LCA3OSwgMTE0LCAxMDUsIDEwMywgODYsIDEwMSwgOTksIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDgsIDk3LCAxMTQsIDEwMywgMTAxLCAxMTUsIDExNiwg
NzMsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCA2MSwgMTA5LCA5NywgMTIwLCA0
MCwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNjUsIDExNiwgNzcsIDk3
LCAxMjAsIDgwLCAxMDgsIDk3LCAxMTAsIDEwMSwgNDQsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0
LCAxMTUsIDEwMSwgOTksIDY1LCAxMTYsIDc3LCAxMDUsIDExMCwgODAsIDEwOCwgOTcsIDExMCwg
MTAxLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwMCwgMTA1
LCAxMTUsIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNjEsIDEwOSwgMTA1LCAxMTAsIDQwLCAxMDks
IDEwNSwgMTEwLCA0MCwgMTA4LCA5NywgMTE0LCAxMDMsIDEwMSwgMTE1LCAxMTYsIDczLCAxMTAs
IDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNDYsIDEyMCwgNDQsIDEwOCwgOTcsIDExNCwg
MTAzLCAxMDEsIDExNSwgMTE2LCA3MywgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgOTks
IDQ2LCAxMjEsIDQxLCA0NCwgMTA4LCA5NywgMTE0LCAxMDMsIDEwMSwgMTE1LCAxMTYsIDczLCAx
MTAsIDExNiwgMTAxLCAxMTQsIDExNSwgMTAxLCA5OSwgNDYsIDEyMiwgNDEsIDU5LCAxMywgMTAs
IDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEs
IDk5LCAxMTYsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA4Mywg
NjEsIDExOCwgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDgwLCAxMTEsIDExNSwgNDMsIDExMSwg
MTE0LCAxMDUsIDEwMywgODYsIDEwMSwgOTksIDQyLCAxMDAsIDEwNSwgMTE1LCAxMTYsIDk3LCAx
MTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMy
LCAxMDUsIDExMCwgMTE2LCAxMDEsIDExNCwgMTE1LCAxMDEsIDk5LCAxMTYsIDgwLCAxMTEsIDEx
NSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA4MywgNDUsIDk5LCAxMTcsIDk4LCAxMDEs
IDgwLCAxMTEsIDExNSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNzAsIDEwNSwgMTIwLCAxMDEs
IDEwMCwgNjksIDExMywgMTE3LCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCAxMDMs
IDExNywgMTA4LCA5NywgMTE0LCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgs
IDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwg
NDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDEx
MSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUs
IDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAx
MCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgMTExLCAxMTAsIDYxLCA5NywgMTE2
LCA5NywgMTEwLCA0MCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA0NiwgMTIyLCA0NCwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEw
LCA0NiwgMTIwLCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEw
OCwgOTcsIDExNiwgNjEsIDk3LCA5OSwgMTExLCAxMTUsIDQwLCAxMDAsIDEwNSwgMTE0LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAxMjEsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEw
MSwgOTksIDUwLCAzMiwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTEx
LCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE4LCAxMDEsIDk5LCA1MCwgNDAsIDEwOCwgMTExLCAxMTAs
IDQ0LCAxMDgsIDk3LCAxMTYsIDQxLCA0MiwgODIsIDY5LCA2NywgNzMsIDgwLCA4MiwgNzksIDY3
LCA2NSwgNzYsIDk1LCA4MCwgNzMsIDUwLCA0MiwgNTAsIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0
LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDYsIDEyMCwgNDIsIDQ4LCA0Niwg
NTMsIDQzLCA0OCwgNDYsIDUzLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAz
MiwgMTE2LCA2MSwgMTE1LCAxMTIsIDEwNCwgMTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAx
MTQsIDEwMCwgMTE1LCA0NiwgMTIxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDEx
NCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExNSwgNDQsIDExNiwgNDQsIDQ4LCA0
MSwgNTksIDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTEx
LCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgNzcsIDEwNSwgMTE0LCAxMTQsIDExMSwgMTE0LCAx
MDEsIDEwMCwgNzAsIDEwNSwgMTIwLCAxMDEsIDEwMCwgNjksIDExMywgMTE3LCAxMDUsIDExNCwg
MTAxLCA5OSwgMTE2LCA5NywgMTEwLCAxMDMsIDExNywgMTA4LCA5NywgMTE0LCA2NywgMTExLCAx
MTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTE5LCAxMTEsIDEx
NCwgMTA4LCAxMDAsIDgwLCAxMTEsIDExNSwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTks
IDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDQ0LCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTAwLCAxMDUsIDExNCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIs
IDEwOCwgMTExLCAxMTAsIDYxLCA5NywgMTE2LCA5NywgMTEwLCA0MCwgMTAwLCAxMDUsIDExNCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIyLCA0NCwgMTAwLCAxMDUsIDExNCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NiwgMTIwLCA0MSwgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOCwgOTcsIDExNiwgNjEsIDk3LCA5OSwgMTExLCAx
MTUsIDQwLCAxMDAsIDEwNSwgMTE0LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ2LCAx
MjEsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUwLCAzMiwgMTE1LCAxMTIsIDEwNCwg
MTAxLCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE4LCAxMDEs
IDk5LCA1MCwgNDAsIDEwOCwgMTExLCAxMTAsIDQ0LCAxMDgsIDk3LCAxMTYsIDQxLCA0MiwgODIs
IDY5LCA2NywgNzMsIDgwLCA4MiwgNzksIDY3LCA2NSwgNzYsIDk1LCA4MCwgNzMsIDUwLCA0Miwg
NTAsIDQ2LCA0OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNSwg
NjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAs
IDExNSwgNDYsIDEyMCwgNDIsIDQ4LCA0NiwgNTMsIDQzLCA0OCwgNDYsIDUzLCA1OSwgMTMsIDEw
LCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE2LCA2MSwgMTE1LCAxMTIsIDEwNCwgMTAx
LCAxMTQsIDEwMSwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NiwgMTIxLCA1OSwgMTMs
IDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEsIDk5LCA1MSwg
NDAsIDQ5LCA0NiwgNDgsIDQ1LCAxMTUsIDQ0LCAxMTYsIDQ0LCA0OCwgNDEsIDU5LCAxMywgMTAs
IDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDEx
NywgMTE2LCAxMDEsIDY5LCAxMTMsIDExNywgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgOTcsIDEx
MCwgMTAzLCAxMTcsIDEwOCwgOTcsIDExNCwgNjcsIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0
MCwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTEx
LCAxMTUsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE5LCAxMTEsIDExNCwgMTA4LCAxMDAs
IDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEw
MSwgMTIxLCAxMDEsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQ0LCAx
MDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MSwgMTMsIDEwLCAxMjMs
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCA5NywgMTA5LCAxMDEsIDExNCwgOTcs
IDg0LCAxMTEsIDg2LCAxMDEsIDExNCwgMTE2LCAxMDEsIDEyMCwgNjEsIDExMCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAw
LCA4MCwgMTExLCAxMTUsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NSwgMTAxLCAxMjEsIDEwMSwgODAs
IDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDEsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTQsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEw
NSwgMTIyLCAxMDEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgNDAsIDk5
LCA5NywgMTA5LCAxMDEsIDExNCwgOTcsIDg0LCAxMTEsIDg2LCAxMDEsIDExNCwgMTE2LCAxMDEs
IDEyMCwgNDQsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcs
IDEwOCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwg
MTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5Nywg
MTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExNCwgNDQsIDQ4
LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgsIDEx
MSwgMTEwLCA2MSwgOTcsIDExNiwgOTcsIDExMCwgNDAsIDExNCwgNDYsIDEyMiwgNDQsIDExNCwg
NDYsIDEyMCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMDgs
IDk3LCAxMTYsIDYxLCA5NywgOTksIDExMSwgMTE1LCA0MCwgMTE0LCA0NiwgMTIxLCA0MSwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAx
MDEsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExOCwgMTAxLCA5OSwgNTAsIDQw
LCAxMDgsIDExMSwgMTEwLCA0NCwgMTA4LCA5NywgMTE2LCA0MSwgNDIsIDgyLCA2OSwgNjcsIDcz
LCA4MCwgODIsIDc5LCA2NywgNjUsIDc2LCA5NSwgODAsIDczLCA1MCwgNDIsIDUwLCA0NiwgNDgs
IDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTUsIDYxLCAxMTUsIDEx
MiwgMTA0LCAxMDEsIDExNCwgMTAxLCA2NywgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ2LCAx
MjAsIDQyLCA0OCwgNDYsIDUzLCA0MywgNDgsIDQ2LCA1MywgNTksIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDExNiwgNjEsIDExNSwgMTEyLCAxMDQsIDEwMSwgMTE0LCAxMDEs
IDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDYsIDEyMSwgNTksIDEzLCAxMCwgMTE0LCAx
MDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTUsIDQ0
LCAxMTYsIDQ0LCA0OCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDgzLCAxMTIsIDEwNCwg
MTAxLCAxMTQsIDEwNSwgOTksIDk3LCAxMDgsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwg
NDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDEx
MSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAw
LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAx
MTgsIDEwNSwgMTAxLCAxMTksIDQ0LCAxMDksIDk3LCAxMTYsIDUyLCAzMiwgMTE0LCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEw
NSwgMTIwLCA0MSwgMTMsIDEwLCAxMjMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEx
OCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA2MSwgMTEwLCAxMTEsIDExNCwgMTA5LCA5
NywgMTA4LCAxMDUsIDEyMiwgMTAxLCA0MCwgMTE4LCAxMDEsIDk5LCA1MSwgNDAsIDExOCwgMTA1
LCAxMDEsIDExOSwgNDIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUsIDQx
LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOCwgMTA1LCAxMDEsIDEx
OSwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3
LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE4LCAxMDUs
IDEwMSwgMTE5LCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwg
MTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDQ4LCA0NiwgNDgsIDQxLCA0MSwg
NDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQsIDYxLCAxMTQsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgNDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwg
MTE0LCA0NCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
NDEsIDU5LCAxMywgMTAsIDExNCwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCAxMTQsIDEwMSwg
MTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwg
MTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgMTE0LCA0NCwgNDgsIDQxLCA0MSwg
NTksIDEzLCAxMCwgMTE0LCA0NiwgMTIyLCA2MSwgMTE0LCA0NiwgMTIyLCA0NSwgNDksIDQ2LCA0
OCwgNTksIDEzLCAxMCwgMTAyLCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOSwgNjEsIDUwLCA0
NiwgNDgsIDQyLCAxMDgsIDEwMSwgMTEwLCAxMDMsIDExNiwgMTA0LCA0MCwgMTE0LCA0MSwgNTks
IDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDExOCwgMTAxLCA5OSwg
NTEsIDQwLCAxMTQsIDQ2LCAxMjAsIDQ3LCAxMDksIDQzLCA0OCwgNDYsIDUzLCA0NCwgNDksIDQ2
LCA0OCwgNDUsIDExNCwgNDYsIDEyMSwgNDcsIDEwOSwgNDUsIDQ4LCA0NiwgNTMsIDQ0LCA0OCwg
NDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDEx
MSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDgwLCAxMDgsIDk3LCAxMTAsIDk3LCAxMTQsIDY3
LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTks
IDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
NDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEw
NSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAx
LCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0
LCAxMDUsIDEyMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwgNjEsIDExOSwgMTExLCAxMTQsIDEw
OCwgMTAwLCA4MCwgMTExLCAxMTUsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NSwgMTAxLCAxMjEsIDEw
MSwgODAsIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExMCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgMTA1LCAxMjIsIDEwMSwgNDAsIDExNCwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCA0MCwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQs
IDQ0LCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgNzgsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgs
IDQxLCA0MSwgNTksIDEzLCAxMCwgMTE0LCAxMDEsIDExNiwgMTE3LCAxMTQsIDExMCwgMzIsIDEx
OCwgMTAxLCA5OSwgNTEsIDQwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQyLCAxMTgsIDEwMSwgOTks
IDUyLCA0MCwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA0NCwgNDksIDQxLCA0MSwgNTks
IDEzLCAxMCwgMTI1LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCA5OSwgMTExLCAxMDks
IDExMiwgMTE3LCAxMTYsIDEwMSwgNjcsIDExNywgOTgsIDEwNSwgOTksIDY3LCAxMTEsIDExMSwg
MTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAx
MDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTEx
LCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDQsIDExOCwgMTAx
LCA5OSwgNTEsIDMyLCAxMDEsIDEyMSwgMTAxLCA4MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUs
IDExMSwgMTEwLCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwg
MTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwg
NDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTgsIDEwNSwg
MTAxLCAxMTksIDY4LCAxMDUsIDExNCwgNjEsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
MTA1LCAxMjIsIDEwMSwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA4MCwgMTExLCAxMTUs
IDQ2LCAxMjAsIDEyMSwgMTIyLCA0NSwgMTAxLCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAxMDUs
IDExNiwgMTA1LCAxMTEsIDExMCwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMy
LCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEw
MSwgOTksIDExNiwgNDAsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCA0NCwgMTE5
LCAxMTEsIDExNCwgMTA4LCAxMDAsIDc4LCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA0MSwgNTks
IDEzLCAxMCwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE4LCAxMDEsIDk5LCA1
MSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCA5OSwg
MTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDQ0LCA0OCwgNDEsIDQxLCA1OSwgMTMsIDEwLCAxMTQs
IDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1
LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk5LCAxMTEs
IDEwOSwgMTEyLCAxMTcsIDExNiwgMTAxLCA2NywgMTE3LCA5OCwgMTA1LCA5OSwgNzYsIDExMSwg
OTksIDk3LCAxMDgsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5
OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQs
IDEwOSwgOTcsIDEwOCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEsIDEyMSwgMTAxLCA4
MCwgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA0NCwgMTA5LCA5NywgMTE2LCA1
MiwgMzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3
NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDQsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMTQs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgODMsIDEwNSwgMTIy
LCAxMDEsIDQ0LCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDQxLCAxMywgMTAsIDEyMywgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE4
LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3
LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDEx
MSwgMTE1LCA0NiwgMTIwLCAxMjEsIDEyMiwgNDUsIDEwMSwgMTIxLCAxMDEsIDgwLCAxMTEsIDEx
NSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTks
IDUxLCAzMiwgOTksIDExMSwgMTExLCAxMTQsIDEwMCwgMTE1LCA2MSwgMTE0LCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDQwLCAxMTgsIDEwNSwgMTAxLCAxMTksIDY4LCAxMDUsIDExNCwg
NDQsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
NDEsIDU5LCAxMywgMTAsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNjEsIDExMiwgOTcs
IDExNCwgOTcsIDEwOCwgMTA4LCA5NywgMTIwLCA2NywgMTExLCAxMTQsIDExNCwgMTAxLCA5OSwg
MTE2LCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgNDAsIDExOSwgMTExLCAxMTQsIDEwOCwg
MTAwLCA4MCwgMTExLCAxMTUsIDQ2LCAxMjAsIDEyMSwgMTIyLCA0NCwgOTksIDExMSwgMTExLCAx
MTQsIDEwMCwgMTE1LCA0NCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDgzLCAxMDUsIDEyMiwgMTAxLCA0NCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDgwLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTEx
LCAxMTAsIDQxLCA1OSwgMTMsIDEwLCA5OSwgMTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAx
MTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEw
NSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQsIDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5
LCA1MiwgNDAsIDk5LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDQsIDQ4LCA0MSwgNDEsIDU5
LCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCA5OSwgMTExLCAxMTEs
IDExNCwgMTAwLCAxMTUsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUx
LCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDgwLCAxMTQsIDExMSwgMTA2
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDEx
NSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAs
IDExMSwgMTE1LCA0NCwgMTA5LCA5NywgMTE2LCA1MiwgMzIsIDExOCwgMTA1LCAxMDEsIDExOSwg
NDQsIDEwOSwgOTcsIDExNiwgNTIsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgMTA1LCAxMTEsIDExMCwgNzcsIDk3LCAxMTYsIDExNCwgMTA1LCAxMjAsIDQxLCAxMywgMTAs
IDEyMywgMTMsIDEwLCAxMTQsIDEwMSwgMTE2LCAxMTcsIDExNCwgMTEwLCAzMiwgMTE4LCAxMDEs
IDk5LCA1MSwgNDAsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwg
MTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDIsIDQwLCAxMTgsIDEwNSwgMTAxLCAx
MTksIDQyLCAxMTksIDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0MSwgNDEsIDU5
LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5
LCAxMTIsIDExNywgMTE2LCAxMDEsIDgzLCAxMDcsIDEyMSwgNjYsIDExMSwgMTIwLCA2NywgMTEx
LCAxMTEsIDExNCwgMTAwLCAxMTUsIDQwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTEyLCAxMTEs
IDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA0NCwgMTA5LCA5NywgMTE2LCA1Miwg
MzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3Nywg
OTcsIDExNiwgMTE0LCAxMDUsIDEyMCwgNDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAx
LCAxMTYsIDExNywgMTE0LCAxMTAsIDMyLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgMTE0LCAxMDEs
IDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc3LCA5NywgMTE2LCAxMTQs
IDEwNSwgMTIwLCA0MiwgMTE4LCAxMDEsIDk5LCA1MiwgNDAsIDExMiwgMTExLCAxMTUsIDEwNSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA4NywgNDQsIDQ4LCA0MSwgNDEsIDU5LCAxMywgMTAsIDEyNSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2
LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3
LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDMyLCAxMTks
IDExMSwgMTE0LCAxMDgsIDEwMCwgODAsIDExMSwgMTE1LCA0NCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExOSwgMTExLCAxMTQsIDEwOCwgMTAwLCA3OCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwg
NDEsIDEzLCAxMCwgMTIzLCAxMywgMTAsIDExNCwgMTAxLCAxMTYsIDExNywgMTE0LCAxMTAsIDMy
LCA5OSwgMTExLCAxMDksIDExMiwgMTE3LCAxMTYsIDEwMSwgODMsIDEwNywgMTIxLCA2NiwgMTEx
LCAxMjAsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDAsIDExOCwgODAsIDExMSwgMTE1
LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODUsIDg2LCA4NywgNDQsIDExNCwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgOTcsIDExNiwgMTE0LCAxMDUs
IDEyMCwgNDEsIDU5LCAxMywgMTAsIDEyNSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1
LCAxMTAsIDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3
MSwgNzcsIDY5LCA3OCwgODQsIDk1LCA2OCwgNjksIDcwLCA3MywgNzgsIDczLCA4NCwgNzMsIDc5
LCA3OCwgODMsIDEzLCAxMCwgMTA4LCA5NywgMTIxLCAxMTEsIDExNywgMTE2LCA0MCwgMTA4LCAx
MTEsIDk5LCA5NywgMTE2LCAxMDUsIDExMSwgMTEwLCAzMiwgNjEsIDMyLCA0OCwgNDEsIDMyLCAx
MTEsIDExNywgMTE2LCAzMiwgMTE4LCAxMDEsIDk5LCA1MiwgMzIsIDEwMywgMTA4LCA3MCwgMTE0
LCA5NywgMTAzLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTAsIDExOCwgMTExLCAxMDUs
IDEwMCwgMzIsIDEwOSwgOTcsIDEwNSwgMTEwLCA0MCwgMTE4LCAxMTEsIDEwNSwgMTAwLCA0MSwg
MzIsIDEyMywgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAsIDEwMSwgMzIsIDY3
LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQs
IDk1LCA3NywgNjUsIDczLCA3OCwgOTUsIDY2LCA2OSwgNzEsIDczLCA3OCwgMTMsIDEwLCAxMTgs
IDEwMSwgOTksIDUxLCAzMiwgMTE4LCAxMDUsIDEwMSwgMTE5LCA2OCwgMTA1LCAxMTQsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgODcsIDYxLCAxMTAsIDExMSwgMTE0LCAxMDksIDk3LCAx
MDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTgsIDY5LCAxMjEsIDEwMSwgODAsIDExMSwgMTE1LCAx
MDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNDYsIDEyMCwgMTIxLCAxMjIsIDQ1LCAxMTgsIDgwLCAx
MTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA0MSwgNTksIDEzLCAxMCwgMTE4
LCAxMDEsIDk5LCA1MSwgMzIsIDExMCwgMTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDYxLCAx
MTAsIDExMSwgMTE0LCAxMDksIDk3LCAxMDgsIDEwNSwgMTIyLCAxMDEsIDQwLCAxMTgsIDc4LCAx
MTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTAsIDMyLCAxMTcsIDExOCwgNzksIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCA2MSwgMTE4LCAx
MDEsIDk5LCA1MCwgNDAsIDQ4LCA0NiwgNDgsIDQ0LCA0OCwgNDYsIDQ4LCA0MSwgNTksIDEzLCAx
MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNjEsIDEwMywgMTA4LCA5NSwgNzAs
IDExNCwgMTExLCAxMTAsIDExNiwgNzAsIDk3LCA5OSwgMTA1LCAxMTAsIDEwMywgMzIsIDYzLCAz
MiwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgMzIsIDU4LCAzMiwgNDUsIDExMCwg
MTExLCAxMTQsIDEwOSwgOTcsIDEwOCwgODcsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEs
IDMyLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2NSwgMTA4LCA5OCwgMTAxLCAx
MDAsIDExMSwgNjEsIDExOCwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDY3LCAxMTEsIDEw
OCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEs
IDk3LCAxMTYsIDMyLCA5NywgMTA4LCAxMTIsIDEwNCwgOTcsIDYxLCAxMTgsIDY1LCAxMDgsIDk4
LCAxMDEsIDEwMCwgMTExLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgOTcsIDU5LCAxMywg
MTAsIDM1LCAxMDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQs
IDc5LCA3NywgOTUsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgOTUsIDg1LCA4MCwg
NjgsIDY1LCA4NCwgNjksIDk1LCA2NSwgNzYsIDY2LCA2OSwgNjgsIDc5LCAxMywgMTAsIDM1LCAx
MDAsIDEwMSwgMTAyLCAxMDUsIDExMCwgMTAxLCAzMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3Nywg
OTUsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgOTUsIDg1LCA4MCwgNjgsIDY1LCA4
NCwgNjksIDk1LCA2NSwgNzYsIDgwLCA3MiwgNjUsIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAxMDIs
IDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgyLCA2
NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA5NSwgNjYsIDY5LCA3MCwgNzksIDgyLCA2OSwgOTUsIDc2
LCA3MywgNzEsIDcyLCA4NCwgODMsIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDk3LCAx
MDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDc5LCA5OSwgOTksIDEwOCwgMTE3LCAxMTUsIDEw
NSwgMTExLCAxMTAsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCAxMTgsIDEwMSwgOTksIDUx
LCA0MCwgNDksIDQ2LCA0NCwgNDksIDQ2LCA0NCwgNDksIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDEwOSwgMTA1LCA5OSwgMTE0LCAxMTEsIDgzLCAxMTcs
IDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjEsIDExOCwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQs
IDQ2LCA5NywgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNSwgMTE3LCAxMTQs
IDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgMTE4LCA4Miwg
MTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNDYsIDExNCwgMTAzLCA5OCwgNTksIDEzLCAxMCwgMTA5LCAx
MDUsIDk5LCAxMTQsIDExMSwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA2MSwgMTE1
LCA5NywgMTE2LCAxMTcsIDExNCwgOTcsIDExNiwgMTAxLCA0MCwgMTA5LCAxMDUsIDk5LCAxMTQs
IDExMSwgODMsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA0MSwgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEw
MSwgMTE1LCAxMTUsIDYxLCA0OSwgNDYsIDQ1LCAxMDksIDEwNSwgOTksIDExNCwgMTExLCA4Mywg
MTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA4LCAxMTEsIDk3
LCAxMTYsIDMyLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDg1LCAxMTAsIDk5LCAxMDgsIDk3LCAx
MDksIDExMiwgMTAxLCAxMDAsIDYxLCAxMDAsIDExMSwgMTE2LCA0MCwgMTEwLCAxMTEsIDExNCwg
MTA5LCA5NywgMTA4LCA4NywgNDQsIDExOCwgMTA1LCAxMDEsIDExOSwgNjgsIDEwNSwgMTE0LCAx
MDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg3LCA0MSwgNTksIDEzLCAxMCwgMTAyLCAxMDgs
IDExMSwgOTcsIDExNiwgMzIsIDc4LCAxMDAsIDExMSwgMTE2LCA4NiwgNjEsIDk3LCA5OCwgMTE1
LCA2OSwgMTEyLCAxMTUsIDQwLCA3OCwgMTAwLCAxMTEsIDExNiwgODYsIDg1LCAxMTAsIDk5LCAx
MDgsIDk3LCAxMDksIDExMiwgMTAxLCAxMDAsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTEx
LCA5NywgMTE2LCAzMiwgOTcsIDEwOCwgMTEyLCAxMDQsIDk3LCA3MSwgNjEsIDk5LCAxMTEsIDEx
MCwgMTE4LCAxMDEsIDExNCwgMTE2LCA4MiwgMTExLCAxMTcsIDEwMywgMTA0LCAxMTAsIDEwMSwg
MTE1LCAxMTUsIDg0LCAxMTEsIDY1LCAxMTgsIDEwMSwgMTE0LCA5NywgMTAzLCAxMDEsIDgzLCAx
MDgsIDExMSwgMTEyLCAxMDEsIDQwLCAxMTQsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEs
IDExNSwgMTE1LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MCwgMzIsIDY1LCA2NSwg
ODIsIDExMSwgMTE3LCAxMDMsIDEwNCwgMTEwLCAxMDEsIDExNSwgMTE1LCA3MCwgOTcsIDk5LCAx
MTYsIDExMSwgMTE0LCAxMTUsIDYxLCAxMDMsIDEwMSwgMTE2LCA2NSwgNjUsIDgyLCAxMTEsIDEx
NywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNzAsIDk3LCA5OSwgMTE2LCAxMTEsIDEx
NCwgMTE1LCA0MCwgMTEwLCAxMTEsIDExNCwgMTA5LCA5NywgMTA4LCA4NywgNDYsIDEyMCwgMTIx
LCAxMjIsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTAxLCAxMTAsIDEx
OCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5NywgMTAwLCAx
MDUsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMTgsIDEwMSwgOTksIDUyLCA0MCwgNDgsIDQ2LCA0
NCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAx
MDEsIDk5LCA1MSwgMzIsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAx
MDEsIDExMCwgMTE2LCA3MywgMTE0LCAxMTQsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEw
MSwgNjEsIDExOCwgMTAxLCA5OSwgNTEsIDQwLCA0OCwgNDYsIDQ0LCA0OCwgNDYsIDQ0LCA0OCwg
NDYsIDQxLCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE0LCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDg2LCAxMDEsIDk5LCAxMTYsIDExMSwg
MTE0LCA2MSwgOTksIDExMSwgMTA5LCAxMTIsIDExNywgMTE2LCAxMDEsIDgyLCAxMDEsIDEwMiwg
MTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAs
IDExNSwgNDAsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMTgsIDgwLCAxMTEsIDExNSwgMTA1LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDg3LCA0NCwgNDksIDQ2LCA0OCwgNDEsIDQ0LCAxMTAsIDExMSwg
MTE0LCAxMDksIDk3LCAxMDgsIDg3LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwg
MzIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA2Nywg
MTExLCAxMTEsIDExNCwgMTAwLCAxMTUsIDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTks
IDExNiwgMTA1LCAxMTEsIDExMCwgODYsIDEwMSwgOTksIDExNiwgMTExLCAxMTQsIDU5LCAxMywg
MTAsIDEwMiwgMTA4LCAxMTEsIDk3LCAxMTYsIDMyLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwg
OTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzYsIDc5LCA2OCwgNjEsIDEwMywgMTAxLCAxMTYsIDc2
LCAxMTEsIDEwMCwgNzAsIDExNCwgMTExLCAxMDksIDY1LCAxMDgsIDExMiwgMTA0LCA5NywgNzEs
IDQwLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAs
IDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwg
NzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNDYsIDEyMCwgNDQsIDk3LCAxMDgsIDExMiwgMTA0LCA5
NywgNzEsIDQxLCA1OSwgMTMsIDEwLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwg
MTA1LCAxMTEsIDExMCwgNzYsIDc5LCA2OCwgNjEsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NiwgNzksIDY4LCA0MiwgMTE4LCA4MiwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3NywgMTA1LCA5OSwgMTE0LCAxMTEs
IDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDczLCAxMTAsIDEwMiwgMTExLCAxMTUs
IDQ2LCAxMjEsIDQzLCAxMTgsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTExLCAxMTAsIDc3LCAxMDUsIDk5LCAxMTQsIDExMSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5Nywg
OTksIDEwMSwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwgNDYsIDEyMiwgNTksIDEzLCAxMCwgMTAy
LCAxMDgsIDExMSwgOTcsIDExNiwgMzIsIDExNCwgMTAxLCAxMTMsIDExNywgMTAxLCAxMTUsIDEx
NiwgMTAxLCAxMDAsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAx
MTAsIDc2LCA3OSwgNjgsIDYxLCAxMTQsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1
LCAxMTEsIDExMCwgNzYsIDc5LCA2OCwgNTksIDEzLCAxMCwgMTAxLCAxMTAsIDExOCwgMTA1LCAx
MTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAx
MTAsIDk5LCAxMDEsIDYxLCAxMTUsIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDgyLCAxMDEsIDEw
MiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2LCAxMTEsIDEwMCwgNDAsIDEx
NCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgOTcsIDEw
OSwgMTEyLCAxMDgsIDEwMSwgMTE0LCA0NCwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAx
MTYsIDEwNSwgMTExLCAxMTAsIDY3LCAxMTEsIDExMSwgMTE0LCAxMDAsIDExNSwgNDQsIDExNCwg
MTAxLCAxMTMsIDExNywgMTAxLCAxMTUsIDExNiwgMTAxLCAxMDAsIDgyLCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTExLCAxMTAsIDc2LCA3OSwgNjgsIDQxLCA1OSwgMTMsIDEw
LCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwg
ODIsIDk3LCAxMDAsIDEwNSwgOTcsIDExMCwgOTksIDEwMSwgNDYsIDExNCwgMTAzLCA5OCwgNjEs
IDEwMiwgMTE0LCAxMTEsIDEwOSwgODIsIDcxLCA2NiwgNjgsIDQwLCAxMDEsIDExMCwgMTE4LCAx
MDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIsIDk3LCAxMDAsIDEwNSwg
OTcsIDExMCwgOTksIDEwMSwgNDEsIDU5LCAxMywgMTAsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0
LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEw
LCA5OSwgMTAxLCA0NiwgMTE0LCAxMDMsIDk4LCA0MiwgNjEsIDExOCwgODIsIDEwMSwgMTAyLCAx
MDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNzMsIDExMCwgMTAyLCAxMTEsIDExNSwg
NDYsIDEyMCwgNTksIDEzLCAxMCwgMTAxLCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAx
MDksIDEwMSwgMTEwLCAxMTYsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDQ2
LCAxMTQsIDEwMywgOTgsIDQyLCA2MSwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCAxMDMs
IDk4LCA1OSwgMTMsIDEwLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwg
MTAxLCAxMTAsIDExNiwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAx
MDEsIDQyLCA2MSwgMTE4LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDEx
MSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMs
IDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4LCAxMDEs
IDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMDksIDk3LCAxMjAsIDQwLCAxMDksIDk3
LCAxMjAsIDQwLCAxMTUsIDExNywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA4MiwgMTAxLCAxMDIs
IDEwOCwgMTAxLCA5OSwgMTE2LCAxMDUsIDExOCwgMTA1LCAxMTYsIDEyMSwgNjcsIDExMSwgMTA4
LCAxMTEsIDExNCwgNDYsIDExNCwgNDQsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEs
IDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwgMTE4LCAxMDUsIDExNiwgMTIx
LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgMTAzLCA0MSwgNDQsIDExNSwgMTE3LCAxMTQs
IDEwMiwgOTcsIDk5LCAxMDEsIDgyLCAxMDEsIDEwMiwgMTA4LCAxMDEsIDk5LCAxMTYsIDEwNSwg
MTE4LCAxMDUsIDExNiwgMTIxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0NiwgOTgsIDQxLCA1
OSwgMTMsIDEwLCAxMDIsIDEwOCwgMTExLCA5NywgMTE2LCAzMiwgMTE0LCAxMDEsIDEwMiwgMTA4
LCAxMDEsIDk5LCAxMTYsIDk3LCAxMTAsIDk5LCAxMDEsIDU3LCA0OCwgNjEsIDEwMiwgMTE0LCAx
MDEsIDExNSwgMTEwLCAxMDEsIDEwOCwgNzEsIDExNCwgOTcsIDEyMiwgMTA1LCAxMTAsIDEwMywg
ODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwgOTksIDEwMSwgNDAsIDEx
NCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0MSwgNTks
IDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEw
OCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAx
MTAsIDExNiwgODIsIDQ4LCA2MSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgODIs
IDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgMTA1LCAxMTgsIDEwNSwgMTE2LCAxMjEsIDY3
LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDExOCwg
MTAxLCA5OSwgNTEsIDMyLCAxMTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5
LCAxMTAsIDExOCwgMTA1LCAxMTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA1
NywgNDgsIDYxLCAxMTgsIDEwMSwgOTksIDUxLCA0MCwgNDksIDQ2LCA0OCwgNDQsIDQ5LCA0Niwg
NDgsIDQ0LCA0OSwgNDYsIDQ4LCA0MSwgNDIsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwg
MTE2LCA5NywgMTEwLCA5OSwgMTAxLCA1NywgNDgsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwg
NTEsIDMyLCAxMDEsIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAs
IDExNiwgNjYsIDExNCwgMTAwLCAxMDIsIDYxLCAxMDMsIDEwMSwgMTE2LCA2NiwgODIsIDY4LCA3
MCwgNzYsIDExMSwgMTExLCAxMDcsIDExNywgMTEyLCA0MCwgNzgsIDEwMCwgMTExLCAxMTYsIDg2
LCA0NCwgMTE0LCAxMTEsIDExNywgMTAzLCAxMDQsIDExMCwgMTAxLCAxMTUsIDExNSwgNDEsIDU5
LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDEsIDExMCwgMTAxLCAxMTQsIDEwMywg
MTIxLCA2NywgMTExLCAxMTAsIDExNSwgMTAxLCAxMTQsIDExOCwgOTcsIDExNiwgMTA1LCAxMTEs
IDExMCwgNzAsIDk3LCA5OSwgMTE2LCAxMTEsIDExNCwgNjEsIDEwMywgMTAxLCAxMTYsIDY5LCAx
MTAsIDEwMSwgMTE0LCAxMDMsIDEyMSwgNjcsIDExMSwgMTEwLCAxMTUsIDEwMSwgMTE0LCAxMTgs
IDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDcwLCA5NywgOTksIDExNiwgMTExLCAxMTQsIDQwLCAx
MTUsIDExMiwgMTAxLCA5OSwgMTE3LCAxMDgsIDk3LCAxMTQsIDY5LCAxMTAsIDExOCwgMTA1LCAx
MTQsIDExMSwgMTEwLCAxMDksIDEwMSwgMTEwLCAxMTYsIDgyLCA0OCwgNDQsIDEwMSwgMTEwLCAx
MTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA2NiwgMTE0LCAxMDAs
IDEwMiwgNDEsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDAsIDEwNSwgMTAy
LCAxMDIsIDExNywgMTE1LCAxMDEsIDY2LCA5NywgMTE1LCAxMDEsIDYxLCAxMTgsIDEwMSwgOTks
IDUxLCA0MCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0NCwgNDgsIDQ2LCA0MSwgNTksIDEzLCAxMCwg
MTEyLCAxMTQsIDEwMSwgNzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMs
IDExMCwgMTAyLCAxMTEsIDMyLCAxMTIsIDExNCwgMTAxLCA3MywgMTEwLCAxMDIsIDExMSwgNTks
IDEzLCAxMCwgMTA4LCAxMDUsIDEwMywgMTA0LCAxMTYsIDEwNSwgMTEwLCAxMDMsIDczLCAxMTAs
IDEwMiwgMTExLCAzMiwgMTA1LCAxMTAsIDEwMiwgMTExLCA1OSwgMTMsIDEwLCAxMDIsIDEwOCwg
MTExLCA5NywgMTE2LCAzMiwgMTE1LCAxMDQsIDk3LCAxMDAsIDExMSwgMTE5LCA2MSwgNDksIDQ2
LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTE1LCAxMTIsIDEwMSwgOTksIDEx
NywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAx
MDEsIDExMCwgMTE2LCA4MiwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5OSwgMTE2LCA5NywgMTEwLCA5
OSwgMTAxLCA2MSwgMTAzLCAxMDEsIDExNiwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDEx
NiwgOTcsIDExMCwgOTksIDEwMSwgNzAsIDExNCwgMTExLCAxMDksIDY1LCAxMTAsIDk3LCAxMDgs
IDEyMSwgMTE2LCAxMDUsIDk5LCA5NywgMTA4LCA2NiwgODIsIDY4LCA3MCwgNzYsIDExMSwgMTEx
LCAxMDcsIDExNywgMTEyLCA5NSwgNzQsIDExMSwgMTEwLCAxMDEsIDExNSwgNDAsIDc4LCAxMDAs
IDExMSwgMTE2LCA4NiwgNDQsIDExNSwgMTEyLCAxMDEsIDk5LCAxMTcsIDEwOCwgOTcsIDExNCwg
NjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgODIs
IDQ4LCA0NCwgMTE1LCAxMTIsIDEwMSwgOTksIDExNywgMTA4LCA5NywgMTE0LCA2OSwgMTEwLCAx
MTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5LCAxMDEsIDExMCwgMTE2LCA4MiwgNTcsIDQ4LCA0
NCwgMTE1LCAxMTMsIDExNCwgMTE2LCA0MCwgMTA5LCAxMDUsIDk5LCAxMTQsIDExMSwgODMsIDEx
NywgMTE0LCAxMDIsIDk3LCA5OSwgMTAxLCA0MSwgNDEsIDU5LCAxMywgMTAsIDExNSwgMTE3LCAx
MTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA0NiwgMTE0
LCAxMDMsIDk4LCA2MSwgNDAsIDQ5LCA0NiwgNDUsIDExNCwgMTAxLCAxMDIsIDEwOCwgMTAxLCA5
OSwgMTE2LCA5NywgMTEwLCA5OSwgMTAxLCA0MSwgNDIsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcs
IDk5LCAxMDEsIDY1LCAxMDgsIDk4LCAxMDEsIDEwMCwgMTExLCA0NiwgMTE0LCAxMDMsIDk4LCA1
OSwgMTMsIDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwg
NzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDYxLCAxMDEsIDEx
MCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwgMTAxLCAxMTAsIDExNiwgNzMsIDExNCwg
MTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDU5LCAxMywgMTAsIDEwMiwgMTA1
LCAxMTAsIDk3LCAxMDgsIDczLCAxMTQsIDExNCwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwg
MTAxLCA0MiwgNjEsIDExNSwgMTE3LCAxMTQsIDEwMiwgOTcsIDk5LCAxMDEsIDY1LCAxMDgsIDk4
LCAxMDEsIDEwMCwgMTExLCA0NiwgMTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMTgsIDEwMSwg
OTksIDUxLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgODIsIDk3LCAxMDAsIDEwNSwgOTcs
IDExMCwgOTksIDEwMSwgNjEsIDEwMSwgMTEwLCAxMTgsIDEwNSwgMTE0LCAxMTEsIDExMCwgMTA5
LCAxMDEsIDExMCwgMTE2LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0Niwg
MTE0LCAxMDMsIDk4LCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4MiwgOTcs
IDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0MiwgNjEsIDExNSwgMTEyLCAxMDEsIDk5LCAx
MTcsIDEwOCwgOTcsIDExNCwgNjksIDExMCwgMTE4LCAxMDUsIDExNCwgMTExLCAxMTAsIDEwOSwg
MTAxLCAxMTAsIDExNiwgODIsIDEwMSwgMTAyLCAxMDgsIDEwMSwgOTksIDExNiwgOTcsIDExMCwg
OTksIDEwMSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIsIDEwMiwgMTA1LCAxMTAs
IDk3LCAxMDgsIDgyLCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCA5OSwgOTcs
IDEwOCwgMTAxLCAxMDAsIDYxLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA4MiwgOTcsIDEwMCwg
MTA1LCA5NywgMTEwLCA5OSwgMTAxLCA0MiwgMTE4LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAx
MDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYsIDEwMSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEs
IDQ2LCAxMjIsIDU5LCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDgyLCA5NywgMTAw
LCAxMDUsIDk3LCAxMTAsIDk5LCAxMDEsIDgzLCA5OSwgOTcsIDEwOCwgMTAxLCAxMDAsIDQyLCA2
MSwgMTAxLCAxMTAsIDEwMSwgMTE0LCAxMDMsIDEyMSwgNjcsIDExMSwgMTEwLCAxMTUsIDEwMSwg
MTE0LCAxMTgsIDk3LCAxMTYsIDEwNSwgMTExLCAxMTAsIDcwLCA5NywgOTksIDExNiwgMTExLCAx
MTQsIDU5LCAxMywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDEwNSwgMTEwLCA5Nywg
MTA4LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNjEsIDEwMCwgMTA1LCAxMDIs
IDEwMiwgMTE3LCAxMTUsIDEwMSwgNjYsIDk3LCAxMTUsIDEwMSwgNTksIDEzLCAxMCwgMTAyLCAx
MDUsIDExMCwgOTcsIDEwOCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAxMDEsIDQyLCA2
MSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTksIDEwMSwgNjUsIDEwOCwgOTgsIDEwMSwgMTAw
LCAxMTEsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAx
MDgsIDY4LCAxMDUsIDEwMiwgMTAyLCAxMTcsIDExNSwgMTAxLCA2MSwgMTA5LCA5NywgMTIwLCA0
MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAx
MDEsIDQ0LCA0OCwgNDYsIDQ4LCA0MSwgNTksIDEzLCAxMCwgMTE4LCAxMDEsIDk5LCA1MSwgMzIs
IDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY1LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYs
IDYxLCAxMTgsIDY1LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDY3LCAxMTEsIDEwOCwg
MTExLCAxMTQsIDU5LCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY1LCAxMDksIDk4
LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDQyLCA2MSwgMTE1LCAxMTcsIDExNCwgMTAyLCA5NywgOTks
IDEwMSwgNjUsIDEwOCwgOTgsIDEwMSwgMTAwLCAxMTEsIDQ2LCAxMTQsIDEwMywgOTgsIDU5LCAx
MywgMTAsIDExOCwgMTAxLCA5OSwgNTEsIDMyLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2OSwg
MTA5LCAxMDUsIDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA2MSwgMTE4LCA2OSwgMTA5LCAxMDUs
IDExNSwgMTE1LCAxMDUsIDExOCwgMTAxLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMs
IDEwLCAxMTgsIDEwMSwgOTksIDUxLCAzMiwgOTcsIDEwOSwgOTgsIDEwNSwgMTAxLCAxMTAsIDEx
NiwgNzksIDk5LCA5OSwgMTA4LCAxMTcsIDExNSwgMTA1LCAxMTEsIDExMCwgNzAsIDExMSwgMTE0
LCA2OCwgMTA1LCAxMTQsIDEwMSwgOTksIDExNiwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1
LCAxMDEsIDYxLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAx
MDgsIDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwg
MTMsIDEwLCAxMTgsIDEwMSwgOTksIDUyLCAzMiwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcs
IDExMSwgMTA4LCAxMTEsIDExNCwgNjEsIDExOCwgMTAxLCA5OSwgNTIsIDQwLCAxMywgMTAsIDEw
MiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY1LCAxMDksIDk4LCAxMDUsIDEwMSwgMTEwLCAxMTYsIDQy
LCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgsIDExNywg
MTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCAzMiwgNDMsIDEzLCAx
MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjgsIDEwNSwgMTAyLCAxMDIsIDExNywgMTE1LCAx
MDEsIDQyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgs
IDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA3MCwgMTExLCAxMTQsIDY4LCAxMDUsIDExNCwgMTAx
LCA5OSwgMTE2LCA2OCwgMTA1LCAxMDIsIDEwMiwgMTE3LCAxMTUsIDEwMSwgNDIsIDExOCwgNzYs
IDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEsIDEx
MCwgMTE1LCAxMDUsIDExNiwgMTIxLCA0NiwgMTIwLCAzMiwgNDMsIDEzLCAxMCwgMTAyLCAxMDUs
IDExMCwgOTcsIDEwOCwgNzMsIDExNCwgMTE0LCA5NywgMTAwLCAxMDUsIDk3LCAxMTAsIDk5LCAx
MDEsIDQyLCA5NywgMTA5LCA5OCwgMTA1LCAxMDEsIDExMCwgMTE2LCA3OSwgOTksIDk5LCAxMDgs
IDExNywgMTE1LCAxMDUsIDExMSwgMTEwLCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA0MiwgMTE4
LCA3NiwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMDUsIDExMCwgMTAzLCA3MywgMTEwLCAxMTYsIDEw
MSwgMTEwLCAxMTUsIDEwNSwgMTE2LCAxMjEsIDQ2LCAxMjIsIDMyLCA0MywgMTMsIDEwLCAxMDIs
IDEwNSwgMTEwLCA5NywgMTA4LCA4MiwgOTcsIDEwMCwgMTA1LCA5NywgMTEwLCA5OSwgMTAxLCA4
MywgOTksIDk3LCAxMDgsIDEwMSwgMTAwLCAzMiwgNDMsIDEzLCAxMCwgMTAyLCAxMDUsIDExMCwg
OTcsIDEwOCwgNjksIDEwOSwgMTA1LCAxMTUsIDExNSwgMTA1LCAxMTgsIDEwMSwgNDIsIDExOCwg
NzYsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTA1LCAxMTAsIDEwMywgNzMsIDExMCwgMTE2LCAxMDEs
IDExMCwgMTE1LCAxMDUsIDExNiwgMTIxLCA0NiwgMTIxLCA0NCwgMTMsIDEwLCA5NywgMTA4LCAx
MTIsIDEwNCwgOTcsIDQxLCA1OSwgMTMsIDEwLCAzNSwgMTAwLCAxMDEsIDEwMiwgMTA1LCAxMTAs
IDEwMSwgMzIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDk1LCA3MCwgODIsIDY1LCA3MSwgNzcs
IDY5LCA3OCwgODQsIDk1LCA2NiwgNjksIDcwLCA3OSwgODIsIDY5LCA5NSwgNzAsIDc5LCA3MSwg
MTMsIDEwLCAxMDIsIDEwNSwgMTEwLCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2
MSwgMTA5LCA5NywgMTIwLCA0MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcsIDExMSwgMTA4
LCAxMTEsIDExNCwgNDQsIDQ4LCA0NiwgNDgsIDQxLCA1OSwgMTMsIDEwLCAxMDIsIDEwNSwgMTEw
LCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA2MSwgOTcsIDExMiwgMTEyLCAxMDgs
IDEyMSwgNzMsIDEwOSwgOTcsIDEwMywgMTAxLCA4MCwgMTE0LCAxMTEsIDk5LCAxMDEsIDExNSwg
MTE1LCAxMDUsIDExMCwgMTAzLCA0MCwgMTAyLCAxMDUsIDExMCwgOTcsIDEwOCwgNjcsIDExMSwg
MTA4LCAxMTEsIDExNCwgNDEsIDU5LCAxMywgMTAsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDY3
LCAxMTEsIDEwOCwgMTExLCAxMTQsIDQ2LCA5NywgNDIsIDYxLCAxMTgsIDEwNSwgMTE1LCAxMDUs
IDk4LCAxMDUsIDEwOCwgMTA1LCAxMTYsIDEyMSwgNTksIDEzLCAxMCwgMzUsIDEwMCwgMTAxLCAx
MDIsIDEwNSwgMTEwLCAxMDEsIDMyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA5NSwgNzAsIDgy
LCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA5NSwgNjYsIDY5LCA3MCwgNzksIDgyLCA2OSwgOTUs
IDcwLCA4MiwgNjUsIDcxLCA2NywgNzksIDc2LCA3OSwgODIsIDEzLCAxMCwgMTAzLCAxMDgsIDcw
LCAxMTQsIDk3LCAxMDMsIDY3LCAxMTEsIDEwOCwgMTExLCAxMTQsIDYxLCAxMDIsIDEwNSwgMTEw
LCA5NywgMTA4LCA2NywgMTExLCAxMDgsIDExMSwgMTE0LCA1OSwgMTMsIDEwLCAxMjUsIDEzLCAx
MF0ubWFwKGMgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjKSkuam9pbigiIik7CmRpZmYgLS1naXQg
YS9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9uL29uZVNwaGVyZVdlYkdQ
VVdTTFNoYWRlcnMuanMgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RlbW9zL3dlYmdwdS9iYWJ5bG9u
L29uZVNwaGVyZVdlYkdQVVdTTFNoYWRlcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmU5OGViZTBiZDkzMjhj
ZDQ4Zjk0YzI3YjBlNTY1NWQ2OTBkNjY2ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3dl
YmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vb25lU3BoZXJlV2ViR1BVV1NMU2hhZGVycy5q
cwpAQCAtMCwwICsxLDE1MTAgQEAKK2NvbnN0IHZlcnRleFNoYWRlcldTTDEgPSBgCitzdHJ1Y3Qg
T3V0cHV0IHsKKyAgICBmbG9hdDMgdlBvc2l0aW9uVyA6IGF0dHJpYnV0ZSgwKTsKKyAgICBmbG9h
dDMgdk5vcm1hbFcgOiBhdHRyaWJ1dGUoMSk7CisgICAgZmxvYXQzIHZFbnZpcm9ubWVudElycmFk
aWFuY2UgOiBhdHRyaWJ1dGUoMik7CisgICAgZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb247
Cit9CisKK3N0cnVjdCBTY2VuZSB7CisgICAgZmxvYXQ0eDQgdmlld1Byb2plY3Rpb247CisgICAg
ZmxvYXQ0eDQgdmlldzsKK30KKworc3RydWN0IEJpbmRHcm91cEEgeworICAgIGNvbnN0YW50IFNj
ZW5lW10gc2NlbmUgOiByZWdpc3RlcihiMCwgc3BhY2UwKTsKKyAgICBUZXh0dXJlMkQ8ZmxvYXQ0
PiBlbnZpcm9ubWVudEJyZGZTYW1wbGVyVGV4dHVyZSA6IHJlZ2lzdGVyKHQxLCBzcGFjZTApOwor
ICAgIHNhbXBsZXIgZW52aXJvbm1lbnRCcmRmU2FtcGxlclNhbXBsZXIgOiByZWdpc3RlcihzMiwg
c3BhY2UwKTsKK30KKworc3RydWN0IE1hdGVyaWFsIHsKKyAgICBmbG9hdDIgdkFsYmVkb0luZm9z
OworICAgIGZsb2F0NCB2QW1iaWVudEluZm9zOworICAgIGZsb2F0MiB2T3BhY2l0eUluZm9zOwor
ICAgIGZsb2F0MiB2RW1pc3NpdmVJbmZvczsKKyAgICBmbG9hdDIgdkxpZ2h0bWFwSW5mb3M7Cisg
ICAgZmxvYXQzIHZSZWZsZWN0aXZpdHlJbmZvczsKKyAgICBmbG9hdDIgdk1pY3JvU3VyZmFjZVNh
bXBsZXJJbmZvczsKKyAgICBmbG9hdDIgdlJlZmxlY3Rpb25JbmZvczsKKyAgICBmbG9hdDMgdlJl
ZmxlY3Rpb25Qb3NpdGlvbjsKKyAgICBmbG9hdDMgdlJlZmxlY3Rpb25TaXplOworICAgIGZsb2F0
MyB2QnVtcEluZm9zOworICAgIGZsb2F0NHg0IGFsYmVkb01hdHJpeDsKKyAgICBmbG9hdDR4NCBh
bWJpZW50TWF0cml4OworICAgIGZsb2F0NHg0IG9wYWNpdHlNYXRyaXg7CisgICAgZmxvYXQ0eDQg
ZW1pc3NpdmVNYXRyaXg7CisgICAgZmxvYXQ0eDQgbGlnaHRtYXBNYXRyaXg7CisgICAgZmxvYXQ0
eDQgcmVmbGVjdGl2aXR5TWF0cml4OworICAgIGZsb2F0NHg0IG1pY3JvU3VyZmFjZVNhbXBsZXJN
YXRyaXg7CisgICAgZmxvYXQ0eDQgYnVtcE1hdHJpeDsKKyAgICBmbG9hdDIgdlRhbmdlbnRTcGFj
ZVBhcmFtczsKKyAgICBmbG9hdDR4NCByZWZsZWN0aW9uTWF0cml4OworICAgIGZsb2F0MyB2UmVm
bGVjdGlvbkNvbG9yOworICAgIGZsb2F0NCB2QWxiZWRvQ29sb3I7CisgICAgZmxvYXQ0IHZMaWdo
dGluZ0ludGVuc2l0eTsKKyAgICBmbG9hdDMgdlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvczsK
KyAgICBmbG9hdCBwb2ludFNpemU7CisgICAgZmxvYXQ0IHZSZWZsZWN0aXZpdHlDb2xvcjsKKyAg
ICBmbG9hdDMgdkVtaXNzaXZlQ29sb3I7CisgICAgZmxvYXQ0IHZFeWVQb3NpdGlvbjsKKyAgICBm
bG9hdDMgdkFtYmllbnRDb2xvcjsKKyAgICBmbG9hdDIgdkRlYnVnTW9kZTsKKyAgICBmbG9hdDIg
dkNsZWFyQ29hdFBhcmFtczsKKyAgICBmbG9hdDQgdkNsZWFyQ29hdFJlZnJhY3Rpb25QYXJhbXM7
CisgICAgZmxvYXQyIHZDbGVhckNvYXRJbmZvczsKKyAgICBmbG9hdDR4NCBjbGVhckNvYXRNYXRy
aXg7CisgICAgZmxvYXQyIHZDbGVhckNvYXRCdW1wSW5mb3M7CisgICAgZmxvYXQyIHZDbGVhckNv
YXRUYW5nZW50U3BhY2VQYXJhbXM7CisgICAgZmxvYXQ0eDQgY2xlYXJDb2F0QnVtcE1hdHJpeDsK
KyAgICBmbG9hdDQgdkNsZWFyQ29hdFRpbnRQYXJhbXM7CisgICAgZmxvYXQgY2xlYXJDb2F0Q29s
b3JBdERpc3RhbmNlOworICAgIGZsb2F0MiB2Q2xlYXJDb2F0VGludEluZm9zOworICAgIGZsb2F0
NHg0IGNsZWFyQ29hdFRpbnRNYXRyaXg7CisgICAgZmxvYXQzIHZBbmlzb3Ryb3B5OworICAgIGZs
b2F0MiB2QW5pc290cm9weUluZm9zOworICAgIGZsb2F0NHg0IGFuaXNvdHJvcHlNYXRyaXg7Cisg
ICAgZmxvYXQ0IHZTaGVlbkNvbG9yOworICAgIGZsb2F0MiB2U2hlZW5JbmZvczsKKyAgICBmbG9h
dDR4NCBzaGVlbk1hdHJpeDsKKyAgICBmbG9hdDMgdlJlZnJhY3Rpb25NaWNyb3N1cmZhY2VJbmZv
czsKKyAgICBmbG9hdDQgdlJlZnJhY3Rpb25JbmZvczsKKyAgICBmbG9hdDR4NCByZWZyYWN0aW9u
TWF0cml4OworICAgIGZsb2F0MiB2VGhpY2tuZXNzSW5mb3M7CisgICAgZmxvYXQ0eDQgdGhpY2tu
ZXNzTWF0cml4OworICAgIGZsb2F0MiB2VGhpY2tuZXNzUGFyYW07CisgICAgZmxvYXQzIHZEaWZm
dXNpb25EaXN0YW5jZTsKKyAgICBmbG9hdDQgdlRpbnRDb2xvcjsKKyAgICBmbG9hdDMgdlN1YlN1
cmZhY2VJbnRlbnNpdHk7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMDA7CisgICAgZmxvYXQzIHZT
cGhlcmljYWxMMV8xOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDEwOworICAgIGZsb2F0MyB2U3Bo
ZXJpY2FsTDExOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDJfMjsKKyAgICBmbG9hdDMgdlNwaGVy
aWNhbEwyXzE7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMjA7CisgICAgZmxvYXQzIHZTcGhlcmlj
YWxMMjE7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMjI7CisgICAgZmxvYXQzIHZTcGhlcmljYWxY
OworICAgIGZsb2F0MyB2U3BoZXJpY2FsWTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFo7CisgICAg
ZmxvYXQzIHZTcGhlcmljYWxYWF9aWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFlZX1paOworICAg
IGZsb2F0MyB2U3BoZXJpY2FsWlo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxYWTsKKyAgICBmbG9h
dDMgdlNwaGVyaWNhbFlaOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWlg7Cit9CisKK3N0cnVjdCBN
ZXNoIHsKKyAgICBmbG9hdDR4NCB3b3JsZDsKKyAgICBmbG9hdCB2aXNpYmlsaXR5OworfQorCitz
dHJ1Y3QgQmluZEdyb3VwQiB7CisgICAgY29uc3RhbnQgTWF0ZXJpYWxbXSBtYXRlcmlhbCA6IHJl
Z2lzdGVyKGIwLCBzcGFjZTEpOworICAgIGNvbnN0YW50IE1lc2hbXSBtZXNoIDogcmVnaXN0ZXIo
YjEsIHNwYWNlMSk7Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBDIHsKKyAgICBUZXh0dXJlMkQ8Zmxv
YXQ0PiByZWZsZWN0aW9uU2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0MCwgc3BhY2UyKTsKKyAg
ICBzYW1wbGVyIHJlZmxlY3Rpb25TYW1wbGVyU2FtcGxlciA6IHJlZ2lzdGVyKHMxLCBzcGFjZTIp
OworfQorCitmbG9hdDN4MyB0cmFuc3Bvc2VNYXQzKGZsb2F0M3gzIGluTWF0cml4KSB7CisgICAg
ZmxvYXQzIGkwID0gaW5NYXRyaXhbMF07CisgICAgZmxvYXQzIGkxID0gaW5NYXRyaXhbMV07Cisg
ICAgZmxvYXQzIGkyID0gaW5NYXRyaXhbMl07CisgICAgZmxvYXQzeDMgb3V0TWF0cml4ID0gZmxv
YXQzeDMoCisgICAgICAgIGZsb2F0MyhpMC54LCBpMS54LCBpMi54KSwKKyAgICAgICAgZmxvYXQz
KGkwLnksIGkxLnksIGkyLnkpLAorICAgICAgICBmbG9hdDMoaTAueiwgaTEueiwgaTIueikKKyAg
ICApOworICAgIHJldHVybiBvdXRNYXRyaXg7Cit9CisKK2Zsb2F0M3gzIGludmVyc2VNYXQzKGZs
b2F0M3gzIGluTWF0cml4KSB7CisgICAgZmxvYXQgYTAwID0gaW5NYXRyaXhbMF1bMF0sIGEwMSA9
IGluTWF0cml4WzBdWzFdLCBhMDIgPSBpbk1hdHJpeFswXVsyXTsKKyAgICBmbG9hdCBhMTAgPSBp
bk1hdHJpeFsxXVswXSwgYTExID0gaW5NYXRyaXhbMV1bMV0sIGExMiA9IGluTWF0cml4WzFdWzJd
OworICAgIGZsb2F0IGEyMCA9IGluTWF0cml4WzJdWzBdLCBhMjEgPSBpbk1hdHJpeFsyXVsxXSwg
YTIyID0gaW5NYXRyaXhbMl1bMl07CisgICAgZmxvYXQgYjAxID0gYTIyICogYTExIC0gYTEyICog
YTIxOworICAgIGZsb2F0IGIxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7CisgICAgZmxvYXQg
YjIxID0gYTIxICogYTEwIC0gYTExICogYTIwOworICAgIGZsb2F0IGRldCA9IGEwMCAqIGIwMSAr
IGEwMSAqIGIxMSArIGEwMiAqIGIyMTsKKyAgICByZXR1cm4gZmxvYXQzeDMoYjAxLCAtYTIyICog
YTAxICsgYTAyICogYTIxLCBhMTIgKiBhMDEgLSBhMDIgKiBhMTEsCisgICAgICAgIGIxMSwgYTIy
ICogYTAwIC0gYTAyICogYTIwLCAtYTEyICogYTAwICsgYTAyICogYTEwLAorICAgICAgICBiMjEs
IC1hMjEgKiBhMDAgKyBhMDEgKiBhMjAsIGExMSAqIGEwMCAtIGEwMSAqIGExMCkgLyBkZXQ7Cit9
CisKK2Zsb2F0MyB0b0xpbmVhclNwYWNlKGZsb2F0MyBjb2xvcikgeworICAgIHJldHVybiBwb3co
Y29sb3IsIGZsb2F0MygyLjIsIDIuMiwgMi4yKSk7Cit9CisKK2Zsb2F0MyB0b0dhbW1hU3BhY2Uo
ZmxvYXQzIGNvbG9yKSB7CisgICAgcmV0dXJuIHBvdyhjb2xvciwgZmxvYXQzKDEuMCAvIDIuMiwg
MS4wIC8gMi4yLCAxLjAgLyAyLjIpKTsKK30KKworZmxvYXQgc3F1YXJlKGZsb2F0IHZhbHVlKSB7
CisgICAgcmV0dXJuIHZhbHVlICogdmFsdWU7Cit9CisKK2Zsb2F0IHBvdzUoZmxvYXQgdmFsdWUp
IHsKKyAgICBmbG9hdCBzcSA9IHZhbHVlICogdmFsdWU7CisgICAgcmV0dXJuIHNxICogc3EgKiB2
YWx1ZTsKK30KKworZmxvYXQgZ2V0THVtaW5hbmNlKGZsb2F0MyBjb2xvcikgeworICAgIHJldHVy
biBjbGFtcChkb3QoY29sb3IsIGZsb2F0MygwLjIxMjYsIDAuNzE1MiwgMC4wNzIyKSksIDAuLCAx
Lik7Cit9CisKK2Zsb2F0IGdldFJhbmQoZmxvYXQyIHNlZWQpIHsKKyAgICByZXR1cm4gZnJhYyhz
aW4oZG90KHNlZWQueHksIGZsb2F0MigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTsK
K30KKworZmxvYXQgZGl0aGVyKGZsb2F0MiBzZWVkLCBmbG9hdCB2YXJpYW5jZUFtb3VudCkgewor
ICAgIGZsb2F0IHJhbmQgPSBnZXRSYW5kKHNlZWQpOworICAgIGZsb2F0IGRpdGhlciA9IGxlcnAo
LXZhcmlhbmNlQW1vdW50IC8gMjU1LjAsIHZhcmlhbmNlQW1vdW50IC8gMjU1LjAsIHJhbmQpOwor
ICAgIHJldHVybiBkaXRoZXI7Cit9CisKK2Zsb2F0NCB0b1JHQkQoZmxvYXQzIGNvbG9yKSB7Cisg
ICAgZmxvYXQgbWF4UkdCID0gbWF4KG1heChjb2xvci54LCBtYXgoY29sb3IueSwgY29sb3Iueikp
LCAwLjAwMDAwMDEpOworICAgIGZsb2F0IEQgPSBtYXgoMjU1LjAgLyBtYXhSR0IsIDEuKTsKKyAg
ICBEID0gY2xhbXAoZmxvb3IoRCkgLyAyNTUuMCwgMC4sIDEuKTsKKyAgICBmbG9hdDMgcmdiID0g
Y29sb3IgKiBEOworICAgIHJnYiA9IHRvR2FtbWFTcGFjZShyZ2IpOworICAgIHJldHVybiBmbG9h
dDQocmdiLCBEKTsKK30KKworZmxvYXQzIGZyb21SR0JEKGZsb2F0NCByZ2JkKSB7CisgICAgcmdi
ZC54eXogPSB0b0xpbmVhclNwYWNlKHJnYmQueHl6KTsKKyAgICByZXR1cm4gcmdiZC54eXogLyBy
Z2JkLnc7Cit9CisKK2Zsb2F0MyBjb21wdXRlRW52aXJvbm1lbnRJcnJhZGlhbmNlKGZsb2F0MyBu
b3JtYWwsIGNvbnN0YW50IE1hdGVyaWFsKiBtYXRlcmlhbCkgeworICAgIHJldHVybiBtYXRlcmlh
bC0+dlNwaGVyaWNhbEwwMAorICAgICAgICArIG1hdGVyaWFsLT52U3BoZXJpY2FsTDFfMSAqIChu
b3JtYWwueSkKKyAgICAgICAgKyBtYXRlcmlhbC0+dlNwaGVyaWNhbEwxMCAqIChub3JtYWwueikK
KyAgICAgICAgKyBtYXRlcmlhbC0+dlNwaGVyaWNhbEwxMSAqIChub3JtYWwueCkKKyAgICAgICAg
KyBtYXRlcmlhbC0+dlNwaGVyaWNhbEwyXzIgKiAobm9ybWFsLnkgKiBub3JtYWwueCkKKyAgICAg
ICAgKyBtYXRlcmlhbC0+dlNwaGVyaWNhbEwyXzEgKiAobm9ybWFsLnkgKiBub3JtYWwueikKKyAg
ICAgICAgKyBtYXRlcmlhbC0+dlNwaGVyaWNhbEwyMCAqICgoMy4wICogbm9ybWFsLnogKiBub3Jt
YWwueikgLSAxLjApCisgICAgICAgICsgbWF0ZXJpYWwtPnZTcGhlcmljYWxMMjEgKiAobm9ybWFs
LnogKiBub3JtYWwueCkKKyAgICAgICAgKyBtYXRlcmlhbC0+dlNwaGVyaWNhbEwyMiAqIChub3Jt
YWwueCAqIG5vcm1hbC54IC0gKG5vcm1hbC55ICogbm9ybWFsLnkpKTsKK30KKwordmVydGV4IE91
dHB1dCBtYWluKGZsb2F0MyBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSwgZmxvYXQzIG5vcm1hbCA6
IGF0dHJpYnV0ZSgxKSwgQmluZEdyb3VwQSBiaW5kR3JvdXBBLCBCaW5kR3JvdXBCIGJpbmRHcm91
cEIsIEJpbmRHcm91cEMgYmluZEdyb3VwQykgeworICAgIE91dHB1dCBvdXRwdXQ7CisgICAgZmxv
YXQzIHBvc2l0aW9uVXBkYXRlZCA9IHBvc2l0aW9uOworICAgIGZsb2F0MyBub3JtYWxVcGRhdGVk
ID0gbm9ybWFsOworICAgIGZsb2F0NHg0IGZpbmFsV29ybGQgPSBiaW5kR3JvdXBCLm1lc2hbMF0u
d29ybGQ7CisgICAgb3V0cHV0LnBvc2l0aW9uID0gbXVsKG11bChiaW5kR3JvdXBBLnNjZW5lWzBd
LnZpZXdQcm9qZWN0aW9uLCBmaW5hbFdvcmxkKSwgZmxvYXQ0KHBvc2l0aW9uVXBkYXRlZCwgMS4w
KSk7CisgICAgZmxvYXQ0IHdvcmxkUG9zID0gbXVsKGZpbmFsV29ybGQsIGZsb2F0NChwb3NpdGlv
blVwZGF0ZWQsIDEuMCkpOworICAgIG91dHB1dC52UG9zaXRpb25XID0gd29ybGRQb3MueHl6Owor
ICAgIGZsb2F0M3gzIG5vcm1hbFdvcmxkOworICAgIG5vcm1hbFdvcmxkWzBdID0gZmluYWxXb3Js
ZFswXS54eXo7CisgICAgbm9ybWFsV29ybGRbMV0gPSBmaW5hbFdvcmxkWzFdLnh5ejsKKyAgICBu
b3JtYWxXb3JsZFsyXSA9IGZpbmFsV29ybGRbMl0ueHl6OworICAgIG91dHB1dC52Tm9ybWFsVyA9
IG5vcm1hbGl6ZShtdWwobm9ybWFsV29ybGQsIG5vcm1hbFVwZGF0ZWQpKTsKKyAgICBmbG9hdDMg
cmVmbGVjdGlvblZlY3RvciA9IG11bChiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnJlZmxlY3Rpb25N
YXRyaXgsIGZsb2F0NChvdXRwdXQudk5vcm1hbFcsIDApKS54eXo7CisgICAgb3V0cHV0LnZFbnZp
cm9ubWVudElycmFkaWFuY2UgPSBjb21wdXRlRW52aXJvbm1lbnRJcnJhZGlhbmNlKHJlZmxlY3Rp
b25WZWN0b3IsICZiaW5kR3JvdXBCLm1hdGVyaWFsWzBdKTsKKyAgICBmbG9hdDIgdXZVcGRhdGVk
OworICAgIGZsb2F0MiB1djI7CisgICAgLy9vdXRwdXQucG9zaXRpb24gKj0gLTEuOworICAgIHJl
dHVybiBvdXRwdXQ7Cit9CitgOworCitjb25zdCBmcmFnbWVudFNoYWRlcldTTDEgPSBgCitzdHJ1
Y3QgU2NlbmUgeworICAgIGZsb2F0NHg0IHZpZXdQcm9qZWN0aW9uOworICAgIGZsb2F0NHg0IHZp
ZXc7Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBBIHsKKyAgICBjb25zdGFudCBTY2VuZVtdIHNjZW5l
IDogcmVnaXN0ZXIoYjAsIHNwYWNlMCk7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4gZW52aXJvbm1l
bnRCcmRmU2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0MSwgc3BhY2UwKTsKKyAgICBzYW1wbGVy
IGVudmlyb25tZW50QnJkZlNhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczIsIHNwYWNlMCk7Cit9
CisKK3N0cnVjdCBNYXRlcmlhbCB7CisgICAgZmxvYXQyIHZBbGJlZG9JbmZvczsKKyAgICBmbG9h
dDQgdkFtYmllbnRJbmZvczsKKyAgICBmbG9hdDIgdk9wYWNpdHlJbmZvczsKKyAgICBmbG9hdDIg
dkVtaXNzaXZlSW5mb3M7CisgICAgZmxvYXQyIHZMaWdodG1hcEluZm9zOworICAgIGZsb2F0MyB2
UmVmbGVjdGl2aXR5SW5mb3M7CisgICAgZmxvYXQyIHZNaWNyb1N1cmZhY2VTYW1wbGVySW5mb3M7
CisgICAgZmxvYXQyIHZSZWZsZWN0aW9uSW5mb3M7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uUG9z
aXRpb247CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uU2l6ZTsKKyAgICBmbG9hdDMgdkJ1bXBJbmZv
czsKKyAgICBmbG9hdDR4NCBhbGJlZG9NYXRyaXg7CisgICAgZmxvYXQ0eDQgYW1iaWVudE1hdHJp
eDsKKyAgICBmbG9hdDR4NCBvcGFjaXR5TWF0cml4OworICAgIGZsb2F0NHg0IGVtaXNzaXZlTWF0
cml4OworICAgIGZsb2F0NHg0IGxpZ2h0bWFwTWF0cml4OworICAgIGZsb2F0NHg0IHJlZmxlY3Rp
dml0eU1hdHJpeDsKKyAgICBmbG9hdDR4NCBtaWNyb1N1cmZhY2VTYW1wbGVyTWF0cml4OworICAg
IGZsb2F0NHg0IGJ1bXBNYXRyaXg7CisgICAgZmxvYXQyIHZUYW5nZW50U3BhY2VQYXJhbXM7Cisg
ICAgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeDsKKyAgICBmbG9hdDMgdlJlZmxlY3Rpb25Db2xv
cjsKKyAgICBmbG9hdDQgdkFsYmVkb0NvbG9yOworICAgIGZsb2F0NCB2TGlnaHRpbmdJbnRlbnNp
dHk7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7CisgICAgZmxvYXQg
cG9pbnRTaXplOworICAgIGZsb2F0NCB2UmVmbGVjdGl2aXR5Q29sb3I7CisgICAgZmxvYXQzIHZF
bWlzc2l2ZUNvbG9yOworICAgIGZsb2F0NCB2RXllUG9zaXRpb247CisgICAgZmxvYXQzIHZBbWJp
ZW50Q29sb3I7CisgICAgZmxvYXQyIHZEZWJ1Z01vZGU7CisgICAgZmxvYXQyIHZDbGVhckNvYXRQ
YXJhbXM7CisgICAgZmxvYXQ0IHZDbGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zOworICAgIGZsb2F0
MiB2Q2xlYXJDb2F0SW5mb3M7CisgICAgZmxvYXQ0eDQgY2xlYXJDb2F0TWF0cml4OworICAgIGZs
b2F0MiB2Q2xlYXJDb2F0QnVtcEluZm9zOworICAgIGZsb2F0MiB2Q2xlYXJDb2F0VGFuZ2VudFNw
YWNlUGFyYW1zOworICAgIGZsb2F0NHg0IGNsZWFyQ29hdEJ1bXBNYXRyaXg7CisgICAgZmxvYXQ0
IHZDbGVhckNvYXRUaW50UGFyYW1zOworICAgIGZsb2F0IGNsZWFyQ29hdENvbG9yQXREaXN0YW5j
ZTsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdFRpbnRJbmZvczsKKyAgICBmbG9hdDR4NCBjbGVhckNv
YXRUaW50TWF0cml4OworICAgIGZsb2F0MyB2QW5pc290cm9weTsKKyAgICBmbG9hdDIgdkFuaXNv
dHJvcHlJbmZvczsKKyAgICBmbG9hdDR4NCBhbmlzb3Ryb3B5TWF0cml4OworICAgIGZsb2F0NCB2
U2hlZW5Db2xvcjsKKyAgICBmbG9hdDIgdlNoZWVuSW5mb3M7CisgICAgZmxvYXQ0eDQgc2hlZW5N
YXRyaXg7CisgICAgZmxvYXQzIHZSZWZyYWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7CisgICAgZmxv
YXQ0IHZSZWZyYWN0aW9uSW5mb3M7CisgICAgZmxvYXQ0eDQgcmVmcmFjdGlvbk1hdHJpeDsKKyAg
ICBmbG9hdDIgdlRoaWNrbmVzc0luZm9zOworICAgIGZsb2F0NHg0IHRoaWNrbmVzc01hdHJpeDsK
KyAgICBmbG9hdDIgdlRoaWNrbmVzc1BhcmFtOworICAgIGZsb2F0MyB2RGlmZnVzaW9uRGlzdGFu
Y2U7CisgICAgZmxvYXQ0IHZUaW50Q29sb3I7CisgICAgZmxvYXQzIHZTdWJTdXJmYWNlSW50ZW5z
aXR5OworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDAwOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDFf
MTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxMDsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxMTsK
KyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyXzI7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMl8xOwor
ICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIwOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIxOworICAg
IGZsb2F0MyB2U3BoZXJpY2FsTDIyOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWDsKKyAgICBmbG9h
dDMgdlNwaGVyaWNhbFk7CisgICAgZmxvYXQzIHZTcGhlcmljYWxaOworICAgIGZsb2F0MyB2U3Bo
ZXJpY2FsWFhfWlo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxZWV9aWjsKKyAgICBmbG9hdDMgdlNw
aGVyaWNhbFpaOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWFk7CisgICAgZmxvYXQzIHZTcGhlcmlj
YWxZWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFpYOworfQorCitzdHJ1Y3QgTWVzaCB7CisgICAg
ZmxvYXQ0eDQgd29ybGQ7CisgICAgZmxvYXQgdmlzaWJpbGl0eTsKK30KKworc3RydWN0IEJpbmRH
cm91cEIgeworICAgIGNvbnN0YW50IE1hdGVyaWFsW10gbWF0ZXJpYWwgOiByZWdpc3RlcihiMCwg
c3BhY2UxKTsKKyAgICBjb25zdGFudCBNZXNoW10gbWVzaCA6IHJlZ2lzdGVyKGIxLCBzcGFjZTEp
OworfQorCitzdHJ1Y3QgQmluZEdyb3VwQyB7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4gcmVmbGVj
dGlvblNhbXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIodDAsIHNwYWNlMik7CisgICAgc2FtcGxlciBy
ZWZsZWN0aW9uU2FtcGxlclNhbXBsZXIgOiByZWdpc3RlcihzMSwgc3BhY2UyKTsKK30KKworZmxv
YXQzeDMgdHJhbnNwb3NlTWF0MyhmbG9hdDN4MyBpbk1hdHJpeCkgeworICAgIGZsb2F0MyBpMCA9
IGluTWF0cml4WzBdOworICAgIGZsb2F0MyBpMSA9IGluTWF0cml4WzFdOworICAgIGZsb2F0MyBp
MiA9IGluTWF0cml4WzJdOworICAgIGZsb2F0M3gzIG91dE1hdHJpeCA9IGZsb2F0M3gzKAorICAg
ICAgICBmbG9hdDMoaTAueCwgaTEueCwgaTIueCksCisgICAgICAgIGZsb2F0MyhpMC55LCBpMS55
LCBpMi55KSwKKyAgICAgICAgZmxvYXQzKGkwLnosIGkxLnosIGkyLnopCisgICAgKTsKKyAgICBy
ZXR1cm4gb3V0TWF0cml4OworfQorCitmbG9hdDN4MyBpbnZlcnNlTWF0MyhmbG9hdDN4MyBpbk1h
dHJpeCkgeworICAgIGZsb2F0IGEwMCA9IGluTWF0cml4WzBdWzBdLCBhMDEgPSBpbk1hdHJpeFsw
XVsxXSwgYTAyID0gaW5NYXRyaXhbMF1bMl07CisgICAgZmxvYXQgYTEwID0gaW5NYXRyaXhbMV1b
MF0sIGExMSA9IGluTWF0cml4WzFdWzFdLCBhMTIgPSBpbk1hdHJpeFsxXVsyXTsKKyAgICBmbG9h
dCBhMjAgPSBpbk1hdHJpeFsyXVswXSwgYTIxID0gaW5NYXRyaXhbMl1bMV0sIGEyMiA9IGluTWF0
cml4WzJdWzJdOworICAgIGZsb2F0IGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMTsKKyAgICBm
bG9hdCBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwOworICAgIGZsb2F0IGIyMSA9IGEyMSAq
IGExMCAtIGExMSAqIGEyMDsKKyAgICBmbG9hdCBkZXQgPSBhMDAgKiBiMDEgKyBhMDEgKiBiMTEg
KyBhMDIgKiBiMjE7CisgICAgcmV0dXJuIGZsb2F0M3gzKGIwMSwgLWEyMiAqIGEwMSArIGEwMiAq
IGEyMSwgYTEyICogYTAxIC0gYTAyICogYTExLAorICAgICAgICBiMTEsIGEyMiAqIGEwMCAtIGEw
MiAqIGEyMCwgLWExMiAqIGEwMCArIGEwMiAqIGExMCwKKyAgICAgICAgYjIxLCAtYTIxICogYTAw
ICsgYTAxICogYTIwLCBhMTEgKiBhMDAgLSBhMDEgKiBhMTApIC8gZGV0OworfQorCitmbG9hdDMg
dG9MaW5lYXJTcGFjZShmbG9hdDMgY29sb3IpIHsKKyAgICByZXR1cm4gcG93KGNvbG9yLCBmbG9h
dDMoMi4yLCAyLjIsIDIuMikpOworfQorCitmbG9hdDMgdG9HYW1tYVNwYWNlKGZsb2F0MyBjb2xv
cikgeworICAgIHJldHVybiBwb3coY29sb3IsIGZsb2F0MygxLjAgLyAyLjIsIDEuMCAvIDIuMiwg
MS4wIC8gMi4yKSk7Cit9CisKK2Zsb2F0IHNxdWFyZShmbG9hdCB2YWx1ZSkgeworICAgIHJldHVy
biB2YWx1ZSAqIHZhbHVlOworfQorCitmbG9hdCBwb3c1KGZsb2F0IHZhbHVlKSB7CisgICAgZmxv
YXQgc3EgPSB2YWx1ZSAqIHZhbHVlOworICAgIHJldHVybiBzcSAqIHNxICogdmFsdWU7Cit9CisK
K2Zsb2F0IGdldEx1bWluYW5jZShmbG9hdDMgY29sb3IpIHsKKyAgICByZXR1cm4gY2xhbXAoZG90
KGNvbG9yLCBmbG9hdDMoMC4yMTI2LCAwLjcxNTIsIDAuMDcyMikpLCAwLiwgMS4pOworfQorCitm
bG9hdCBnZXRSYW5kKGZsb2F0MiBzZWVkKSB7CisgICAgcmV0dXJuIGZyYWMoc2luKGRvdChzZWVk
Lnh5LCBmbG9hdDIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7Cit9CisKK2Zsb2F0
IGRpdGhlcihmbG9hdDIgc2VlZCwgZmxvYXQgdmFyaWFuY2VBbW91bnQpIHsKKyAgICBmbG9hdCBy
YW5kID0gZ2V0UmFuZChzZWVkKTsKKyAgICBmbG9hdCBkaXRoZXIgPSBsZXJwKC12YXJpYW5jZUFt
b3VudCAvIDI1NS4wLCB2YXJpYW5jZUFtb3VudCAvIDI1NS4wLCByYW5kKTsKKyAgICByZXR1cm4g
ZGl0aGVyOworfQorCitmbG9hdDQgdG9SR0JEKGZsb2F0MyBjb2xvcikgeworICAgIGZsb2F0IG1h
eFJHQiA9IG1heChtYXgoY29sb3IueCwgbWF4KGNvbG9yLnksIGNvbG9yLnopKSwgMC4wMDAwMDAx
KTsKKyAgICBmbG9hdCBEID0gbWF4KDI1NS4wIC8gbWF4UkdCLCAxLik7CisgICAgRCA9IGNsYW1w
KGZsb29yKEQpIC8gMjU1LjAsIDAuLCAxLik7CisgICAgZmxvYXQzIHJnYiA9IGNvbG9yICogRDsK
KyAgICByZ2IgPSB0b0dhbW1hU3BhY2UocmdiKTsKKyAgICByZXR1cm4gZmxvYXQ0KHJnYiwgRCk7
Cit9CisKK2Zsb2F0MyBmcm9tUkdCRChmbG9hdDQgcmdiZCkgeworICAgIHJnYmQueHl6ID0gdG9M
aW5lYXJTcGFjZShyZ2JkLnh5eik7CisgICAgcmV0dXJuIHJnYmQueHl6IC8gcmdiZC53OworfQor
CitmbG9hdCBjb252ZXJ0Um91Z2huZXNzVG9BdmVyYWdlU2xvcGUoZmxvYXQgcm91Z2huZXNzKSB7
CisgICAgcmV0dXJuIHNxdWFyZShyb3VnaG5lc3MpICsgMC4wMDA1OworfQorCitmbG9hdCBmcmVz
bmVsR3JhemluZ1JlZmxlY3RhbmNlKGZsb2F0IHJlZmxlY3RhbmNlMCkgeworICAgIGZsb2F0IHJl
ZmxlY3RhbmNlOTAgPSBjbGFtcChyZWZsZWN0YW5jZTAgKiAyNS4wLCAwLjAsIDEuMCk7CisgICAg
cmV0dXJuIHJlZmxlY3RhbmNlOTA7Cit9CisKK2Zsb2F0MiBnZXRBQVJvdWdobmVzc0ZhY3RvcnMo
ZmxvYXQzIG5vcm1hbFZlY3RvcikgeworICAgIHJldHVybiBmbG9hdDIoMC4sIDAuKTsKK30KKwor
ZmxvYXQ0IGFwcGx5SW1hZ2VQcm9jZXNzaW5nKGZsb2F0NCByZXN1bHQpIHsKKyAgICByZXN1bHQu
eHl6ID0gdG9HYW1tYVNwYWNlKHJlc3VsdC54eXopOworICAgIHJlc3VsdC54eXogPSBjbGFtcChy
ZXN1bHQueHl6LCBmbG9hdDMoMC4wLCAwLjAsIDAuMCksIGZsb2F0MygxLjAsIDEuMCwgMS4wKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZmxvYXQzIGNvbXB1dGVFbnZpcm9ubWVudElycmFk
aWFuY2UoZmxvYXQzIG5vcm1hbCwgY29uc3RhbnQgTWF0ZXJpYWwqIG1hdGVyaWFsKSB7CisgICAg
cmV0dXJuIG1hdGVyaWFsLT52U3BoZXJpY2FsTDAwCisgICAgICAgICsgbWF0ZXJpYWwtPnZTcGhl
cmljYWxMMV8xICogKG5vcm1hbC55KQorICAgICAgICArIG1hdGVyaWFsLT52U3BoZXJpY2FsTDEw
ICogKG5vcm1hbC56KQorICAgICAgICArIG1hdGVyaWFsLT52U3BoZXJpY2FsTDExICogKG5vcm1h
bC54KQorICAgICAgICArIG1hdGVyaWFsLT52U3BoZXJpY2FsTDJfMiAqIChub3JtYWwueSAqIG5v
cm1hbC54KQorICAgICAgICArIG1hdGVyaWFsLT52U3BoZXJpY2FsTDJfMSAqIChub3JtYWwueSAq
IG5vcm1hbC56KQorICAgICAgICArIG1hdGVyaWFsLT52U3BoZXJpY2FsTDIwICogKCgzLjAgKiBu
b3JtYWwueiAqIG5vcm1hbC56KSAtIDEuMCkKKyAgICAgICAgKyBtYXRlcmlhbC0+dlNwaGVyaWNh
bEwyMSAqIChub3JtYWwueiAqIG5vcm1hbC54KQorICAgICAgICArIG1hdGVyaWFsLT52U3BoZXJp
Y2FsTDIyICogKG5vcm1hbC54ICogbm9ybWFsLnggLSAobm9ybWFsLnkgKiBub3JtYWwueSkpOwor
fQorCitzdHJ1Y3QgUHJlTGlnaHRpbmdJbmZvIHsKKyAgICBmbG9hdDMgbGlnaHRPZmZzZXQ7Cisg
ICAgZmxvYXQgbGlnaHREaXN0YW5jZVNxdWFyZWQ7CisgICAgZmxvYXQgbGlnaHREaXN0YW5jZTsK
KyAgICBmbG9hdCBhdHRlbnVhdGlvbjsKKyAgICBmbG9hdDMgTDsKKyAgICBmbG9hdDMgSDsKKyAg
ICBmbG9hdCBOZG90VjsKKyAgICBmbG9hdCBOZG90TFVuY2xhbXBlZDsKKyAgICBmbG9hdCBOZG90
TDsKKyAgICBmbG9hdCBWZG90SDsKKyAgICBmbG9hdCByb3VnaG5lc3M7Cit9CisKK1ByZUxpZ2h0
aW5nSW5mbyBjb21wdXRlUG9pbnRBbmRTcG90UHJlTGlnaHRpbmdJbmZvKGZsb2F0NCBsaWdodERh
dGEsIGZsb2F0MyBWLCBmbG9hdDMgTiwgZmxvYXQzIHZQb3NpdGlvblcpIHsKKyAgICBQcmVMaWdo
dGluZ0luZm8gcmVzdWx0OworICAgIHJlc3VsdC5saWdodE9mZnNldCA9IGxpZ2h0RGF0YS54eXog
LSB2UG9zaXRpb25XOworICAgIHJlc3VsdC5saWdodERpc3RhbmNlU3F1YXJlZCA9IGRvdChyZXN1
bHQubGlnaHRPZmZzZXQsIHJlc3VsdC5saWdodE9mZnNldCk7CisgICAgcmVzdWx0LmxpZ2h0RGlz
dGFuY2UgPSBzcXJ0KHJlc3VsdC5saWdodERpc3RhbmNlU3F1YXJlZCk7CisgICAgcmVzdWx0Lkwg
PSBub3JtYWxpemUocmVzdWx0LmxpZ2h0T2Zmc2V0KTsKKyAgICByZXN1bHQuSCA9IG5vcm1hbGl6
ZShWICsgcmVzdWx0LkwpOworICAgIHJlc3VsdC5WZG90SCA9IGNsYW1wKGRvdChWLCByZXN1bHQu
SCksIDAuMCwgMS4wKTsKKyAgICByZXN1bHQuTmRvdExVbmNsYW1wZWQgPSBkb3QoTiwgcmVzdWx0
LkwpOworICAgIHJlc3VsdC5OZG90TCA9IGNsYW1wKHJlc3VsdC5OZG90TFVuY2xhbXBlZCwgMC4w
MDAwMDAxLCAxLjApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ByZUxpZ2h0aW5nSW5mbyBj
b21wdXRlRGlyZWN0aW9uYWxQcmVMaWdodGluZ0luZm8oZmxvYXQ0IGxpZ2h0RGF0YSwgZmxvYXQz
IFYsIGZsb2F0MyBOKSB7CisgICAgUHJlTGlnaHRpbmdJbmZvIHJlc3VsdDsKKyAgICByZXN1bHQu
bGlnaHREaXN0YW5jZSA9IGxlbmd0aCgtbGlnaHREYXRhLnh5eik7CisgICAgcmVzdWx0LkwgPSBu
b3JtYWxpemUoLWxpZ2h0RGF0YS54eXopOworICAgIHJlc3VsdC5IID0gbm9ybWFsaXplKFYgKyBy
ZXN1bHQuTCk7CisgICAgcmVzdWx0LlZkb3RIID0gY2xhbXAoZG90KFYsIHJlc3VsdC5IKSwgMC4w
LCAxLjApOworICAgIHJlc3VsdC5OZG90TFVuY2xhbXBlZCA9IGRvdChOLCByZXN1bHQuTCk7Cisg
ICAgcmVzdWx0Lk5kb3RMID0gY2xhbXAocmVzdWx0Lk5kb3RMVW5jbGFtcGVkLCAwLjAwMDAwMDEs
IDEuMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHJlTGlnaHRpbmdJbmZvIGNvbXB1dGVI
ZW1pc3BoZXJpY1ByZUxpZ2h0aW5nSW5mbyhmbG9hdDQgbGlnaHREYXRhLCBmbG9hdDMgViwgZmxv
YXQzIE4pIHsKKyAgICBQcmVMaWdodGluZ0luZm8gcmVzdWx0OworICAgIHJlc3VsdC5OZG90TCA9
IGRvdChOLCBsaWdodERhdGEueHl6KSAqIDAuNSArIDAuNTsKKyAgICByZXN1bHQuTmRvdEwgPSBj
bGFtcChyZXN1bHQuTmRvdEwsIDAuMDAwMDAwMSwgMS4wKTsKKyAgICByZXN1bHQuTmRvdExVbmNs
YW1wZWQgPSByZXN1bHQuTmRvdEw7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZmxvYXQgY29t
cHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX1N0YW5kYXJkKGZsb2F0MyBsaWdodE9mZnNldCwgZmxv
YXQgcmFuZ2UpIHsKKyAgICByZXR1cm4gbWF4KDAuLCAxLjAgLSBsZW5ndGgobGlnaHRPZmZzZXQp
IC8gcmFuZ2UpOworfQorCitmbG9hdCBjb21wdXRlRGlzdGFuY2VMaWdodEZhbGxvZmZfUGh5c2lj
YWwoZmxvYXQgbGlnaHREaXN0YW5jZVNxdWFyZWQpIHsKKyAgICByZXR1cm4gMS4wIC8gbWF4KGxp
Z2h0RGlzdGFuY2VTcXVhcmVkLCAwLjAwMDAwMDEpOworfQorCitmbG9hdCBjb21wdXRlRGlzdGFu
Y2VMaWdodEZhbGxvZmZfR0xURihmbG9hdCBsaWdodERpc3RhbmNlU3F1YXJlZCwgZmxvYXQgaW52
ZXJzZVNxdWFyZWRSYW5nZSkgeworICAgIGZsb2F0IGxpZ2h0RGlzdGFuY2VGYWxsb2ZmID0gMS4w
IC8gbWF4KGxpZ2h0RGlzdGFuY2VTcXVhcmVkLCAwLjAwMDAwMDEpOworICAgIGZsb2F0IGZhY3Rv
ciA9IGxpZ2h0RGlzdGFuY2VTcXVhcmVkICogaW52ZXJzZVNxdWFyZWRSYW5nZTsKKyAgICBmbG9h
dCBhdHRlbnVhdGlvbiA9IGNsYW1wKDEuMCAtIGZhY3RvciAqIGZhY3RvciwgMC4wLCAxLjApOwor
ICAgIGF0dGVudWF0aW9uICo9IGF0dGVudWF0aW9uOworICAgIGxpZ2h0RGlzdGFuY2VGYWxsb2Zm
ICo9IGF0dGVudWF0aW9uOworICAgIHJldHVybiBsaWdodERpc3RhbmNlRmFsbG9mZjsKK30KKwor
ZmxvYXQgY29tcHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmKGZsb2F0MyBsaWdodE9mZnNldCwgZmxv
YXQgbGlnaHREaXN0YW5jZVNxdWFyZWQsIGZsb2F0IHJhbmdlLCBmbG9hdCBpbnZlcnNlU3F1YXJl
ZFJhbmdlKSB7CisgICAgcmV0dXJuIGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9QaHlzaWNh
bChsaWdodERpc3RhbmNlU3F1YXJlZCk7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXJlY3Rpb25hbExp
Z2h0RmFsbG9mZl9TdGFuZGFyZChmbG9hdDMgbGlnaHREaXJlY3Rpb24sIGZsb2F0MyBkaXJlY3Rp
b25Ub0xpZ2h0Q2VudGVyVywgZmxvYXQgY29zSGFsZkFuZ2xlLCBmbG9hdCBleHBvbmVudCkgewor
ICAgIGZsb2F0IGZhbGxvZmYgPSAwLjA7CisgICAgZmxvYXQgY29zQW5nbGUgPSBtYXgoZG90KC1s
aWdodERpcmVjdGlvbiwgZGlyZWN0aW9uVG9MaWdodENlbnRlclcpLCAwLjAwMDAwMDEpOworICAg
IGlmIChjb3NBbmdsZSA+PSBjb3NIYWxmQW5nbGUpIHsKKyAgICAgICAgZmFsbG9mZiA9IG1heCgw
LiwgcG93KGNvc0FuZ2xlLCBleHBvbmVudCkpOworICAgIH0KKyAgICByZXR1cm4gZmFsbG9mZjsK
K30KKworZmxvYXQgY29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGZsb2F0
MyBsaWdodERpcmVjdGlvbiwgZmxvYXQzIGRpcmVjdGlvblRvTGlnaHRDZW50ZXJXLCBmbG9hdCBj
b3NIYWxmQW5nbGUpIHsKKyAgICBmbG9hdCBrTWludXNMb2cyQ29uZUFuZ2xlSW50ZW5zaXR5UmF0
aW8gPSA2LjY0Mzg1NjE4OTc3OworICAgIGZsb2F0IGNvbmNlbnRyYXRpb25LYXBwYSA9IGtNaW51
c0xvZzJDb25lQW5nbGVJbnRlbnNpdHlSYXRpbyAvICgxLjAgLSBjb3NIYWxmQW5nbGUpOworICAg
IGZsb2F0NCBsaWdodERpcmVjdGlvblNwcmVhZFNHID0gZmxvYXQ0KC1saWdodERpcmVjdGlvbiAq
IGNvbmNlbnRyYXRpb25LYXBwYSwgLWNvbmNlbnRyYXRpb25LYXBwYSk7CisgICAgZmxvYXQgZmFs
bG9mZiA9IGV4cDIoZG90KGZsb2F0NChkaXJlY3Rpb25Ub0xpZ2h0Q2VudGVyVywgMS4wKSwgbGln
aHREaXJlY3Rpb25TcHJlYWRTRykpOworICAgIHJldHVybiBmYWxsb2ZmOworfQorCitmbG9hdCBj
b21wdXRlRGlyZWN0aW9uYWxMaWdodEZhbGxvZmZfR0xURihmbG9hdDMgbGlnaHREaXJlY3Rpb24s
IGZsb2F0MyBkaXJlY3Rpb25Ub0xpZ2h0Q2VudGVyVywgZmxvYXQgbGlnaHRBbmdsZVNjYWxlLCBm
bG9hdCBsaWdodEFuZ2xlT2Zmc2V0KSB7CisgICAgZmxvYXQgY2QgPSBkb3QoLWxpZ2h0RGlyZWN0
aW9uLCBkaXJlY3Rpb25Ub0xpZ2h0Q2VudGVyVyk7CisgICAgZmxvYXQgZmFsbG9mZiA9IGNsYW1w
KGNkICogbGlnaHRBbmdsZVNjYWxlICsgbGlnaHRBbmdsZU9mZnNldCwgMC4wLCAxLjApOworICAg
IGZhbGxvZmYgKj0gZmFsbG9mZjsKKyAgICByZXR1cm4gZmFsbG9mZjsKK30KKworZmxvYXQgY29t
cHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmKGZsb2F0MyBsaWdodERpcmVjdGlvbiwgZmxvYXQz
IGRpcmVjdGlvblRvTGlnaHRDZW50ZXJXLCBmbG9hdCBjb3NIYWxmQW5nbGUsIGZsb2F0IGV4cG9u
ZW50LCBmbG9hdCBsaWdodEFuZ2xlU2NhbGUsIGZsb2F0IGxpZ2h0QW5nbGVPZmZzZXQpIHsKKyAg
ICByZXR1cm4gY29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGxpZ2h0RGly
ZWN0aW9uLCBkaXJlY3Rpb25Ub0xpZ2h0Q2VudGVyVywgY29zSGFsZkFuZ2xlKTsKK30KKworZmxv
YXQzIGdldEVuZXJneUNvbnNlcnZhdGlvbkZhY3RvcihmbG9hdDMgc3BlY3VsYXJFbnZpcm9ubWVu
dFIwLCBmbG9hdDMgZW52aXJvbm1lbnRCcmRmKSB7CisgICAgcmV0dXJuIGZsb2F0MygxLjAsIDEu
MCwgMS4wKSArIHNwZWN1bGFyRW52aXJvbm1lbnRSMCAqICgxLjAgLyBlbnZpcm9ubWVudEJyZGYu
eSAtIDEuMCk7Cit9CisKK2Zsb2F0MyBnZXRCUkRGTG9va3VwKGZsb2F0IE5kb3RWLCBmbG9hdCBw
ZXJjZXB0dWFsUm91Z2huZXNzLCBUZXh0dXJlMkQ8ZmxvYXQ0PiBlbnZpcm9ubWVudEJyZGZTYW1w
bGVyVGV4dHVyZSwgc2FtcGxlciBlbnZpcm9ubWVudEJyZGZTYW1wbGVyU2FtcGxlcikgeworICAg
IGZsb2F0MiBVViA9IGZsb2F0MihOZG90ViwgcGVyY2VwdHVhbFJvdWdobmVzcyk7CisgICAgZmxv
YXQ0IGJyZGZMb29rdXAgPSBTYW1wbGUoZW52aXJvbm1lbnRCcmRmU2FtcGxlclRleHR1cmUsIGVu
dmlyb25tZW50QnJkZlNhbXBsZXJTYW1wbGVyLCBVVik7CisgICAgcmV0dXJuIGJyZGZMb29rdXAu
eHl6OworfQorCitmbG9hdDMgZ2V0UmVmbGVjdGFuY2VGcm9tQlJERkxvb2t1cChmbG9hdDMgc3Bl
Y3VsYXJFbnZpcm9ubWVudFIwLCBmbG9hdDMgZW52aXJvbm1lbnRCcmRmKSB7CisgICAgZmxvYXQz
IHJlZmxlY3RhbmNlID0gbGVycChlbnZpcm9ubWVudEJyZGYueHh4LCBlbnZpcm9ubWVudEJyZGYu
eXl5LCBzcGVjdWxhckVudmlyb25tZW50UjApOworICAgIHJldHVybiByZWZsZWN0YW5jZTsKK30K
KworZmxvYXQzIGZyZXNuZWxTY2hsaWNrR0dYKGZsb2F0IFZkb3RILCBmbG9hdDMgcmVmbGVjdGFu
Y2UwLCBmbG9hdDMgcmVmbGVjdGFuY2U5MCkgeworICAgIHJldHVybiByZWZsZWN0YW5jZTAgKyAo
cmVmbGVjdGFuY2U5MCAtIHJlZmxlY3RhbmNlMCkgKiBwb3c1KDEuMCAtIFZkb3RIKTsKK30KKwor
ZmxvYXQgZnJlc25lbFNjaGxpY2tHR1goZmxvYXQgVmRvdEgsIGZsb2F0IHJlZmxlY3RhbmNlMCwg
ZmxvYXQgcmVmbGVjdGFuY2U5MCkgeworICAgIHJldHVybiByZWZsZWN0YW5jZTAgKyAocmVmbGVj
dGFuY2U5MCAtIHJlZmxlY3RhbmNlMCkgKiBwb3c1KDEuMCAtIFZkb3RIKTsKK30KKworZmxvYXQg
bm9ybWFsRGlzdHJpYnV0aW9uRnVuY3Rpb25fVHJvd2JyaWRnZVJlaXR6R0dYKGZsb2F0IE5kb3RI
LCBmbG9hdCBhbHBoYUcpIHsKKyAgICBmbG9hdCBhMiA9IHNxdWFyZShhbHBoYUcpOworICAgIGZs
b2F0IGQgPSBOZG90SCAqIE5kb3RIICogKGEyIC0gMS4wKSArIDEuMDsKKyAgICByZXR1cm4gYTIg
LyAoMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1ICogZCAqIGQpOworfQorCitmbG9h
dCBzbWl0aFZpc2liaWxpdHlfR0dYQ29ycmVsYXRlZChmbG9hdCBOZG90TCwgZmxvYXQgTmRvdFYs
IGZsb2F0IGFscGhhRykgeworICAgIGZsb2F0IGEyID0gYWxwaGFHICogYWxwaGFHOworICAgIGZs
b2F0IEdHWFYgPSBOZG90TCAqIHNxcnQoTmRvdFYgKiAoTmRvdFYgLSBhMiAqIE5kb3RWKSArIGEy
KTsKKyAgICBmbG9hdCBHR1hMID0gTmRvdFYgKiBzcXJ0KE5kb3RMICogKE5kb3RMIC0gYTIgKiBO
ZG90TCkgKyBhMik7CisgICAgcmV0dXJuIDAuNSAvIChHR1hWICsgR0dYTCk7Cit9CisKK2Zsb2F0
IGRpZmZ1c2VCUkRGX0J1cmxleShmbG9hdCBOZG90TCwgZmxvYXQgTmRvdFYsIGZsb2F0IFZkb3RI
LCBmbG9hdCByb3VnaG5lc3MpIHsKKyAgICBmbG9hdCBkaWZmdXNlRnJlc25lbE5WID0gcG93NShj
bGFtcCgxLjAgLSBOZG90TCwgMC4wMDAwMDAxLCAxLjApKTsKKyAgICBmbG9hdCBkaWZmdXNlRnJl
c25lbE5MID0gcG93NShjbGFtcCgxLjAgLSBOZG90ViwgMC4wMDAwMDAxLCAxLjApKTsKKyAgICBm
bG9hdCBkaWZmdXNlRnJlc25lbDkwID0gMC41ICsgMi4wICogVmRvdEggKiBWZG90SCAqIHJvdWdo
bmVzczsKKyAgICBmbG9hdCBmcmVzbmVsID0gKDEuMCArIChkaWZmdXNlRnJlc25lbDkwIC0gMS4w
KSAqIGRpZmZ1c2VGcmVzbmVsTkwpICoKKyAgICAgICAgKDEuMCArIChkaWZmdXNlRnJlc25lbDkw
IC0gMS4wKSAqIGRpZmZ1c2VGcmVzbmVsTlYpOworICAgIHJldHVybiBmcmVzbmVsIC8gMy4xNDE1
OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1OworfQorCitzdHJ1Y3QgTGlnaHRpbmdJbmZvIHsK
KyAgICBmbG9hdDMgZGlmZnVzZTsKK30KKworZmxvYXQgYWRqdXN0Um91Z2huZXNzRnJvbUxpZ2h0
UHJvcGVydGllcyhmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGxpZ2h0UmFkaXVzLCBmbG9hdCBsaWdo
dERpc3RhbmNlKSB7CisgICAgZmxvYXQgbGlnaHRSb3VnaG5lc3MgPSBsaWdodFJhZGl1cyAvIGxp
Z2h0RGlzdGFuY2U7CisgICAgZmxvYXQgdG90YWxSb3VnaG5lc3MgPSBjbGFtcChsaWdodFJvdWdo
bmVzcyArIHJvdWdobmVzcywgMC4wLCAxLjApOworICAgIHJldHVybiB0b3RhbFJvdWdobmVzczsK
K30KKworZmxvYXQzIGNvbXB1dGVIZW1pc3BoZXJpY0RpZmZ1c2VMaWdodGluZyhQcmVMaWdodGlu
Z0luZm8gaW5mbywgZmxvYXQzIGxpZ2h0Q29sb3IsIGZsb2F0MyBncm91bmRDb2xvcikgeworICAg
IHJldHVybiBsZXJwKGdyb3VuZENvbG9yLCBsaWdodENvbG9yLCBmbG9hdDMoaW5mby5OZG90TCwg
aW5mby5OZG90TCwgaW5mby5OZG90TCkpOworfQorCitmbG9hdDMgY29tcHV0ZURpZmZ1c2VMaWdo
dGluZyhQcmVMaWdodGluZ0luZm8gaW5mbywgZmxvYXQzIGxpZ2h0Q29sb3IpIHsKKyAgICBmbG9h
dCBkaWZmdXNlVGVybSA9IGRpZmZ1c2VCUkRGX0J1cmxleShpbmZvLk5kb3RMLCBpbmZvLk5kb3RW
LCBpbmZvLlZkb3RILCBpbmZvLnJvdWdobmVzcyk7CisgICAgcmV0dXJuIGRpZmZ1c2VUZXJtICog
aW5mby5hdHRlbnVhdGlvbiAqIGluZm8uTmRvdEwgKiBsaWdodENvbG9yOworfQorCitmbG9hdDIg
Y29tcHV0ZVByb2plY3Rpb25UZXh0dXJlRGlmZnVzZUxpZ2h0aW5nVVYoZmxvYXQ0eDQgdGV4dHVy
ZVByb2plY3Rpb25NYXRyaXgsIGZsb2F0MyB2UG9zaXRpb25XKSB7CisgICAgZmxvYXQ0IHN0cnEg
PSBtdWwodGV4dHVyZVByb2plY3Rpb25NYXRyaXgsIGZsb2F0NCh2UG9zaXRpb25XLCAxLjApKTsK
KyAgICBzdHJxIC89IHN0cnEudzsKKyAgICByZXR1cm4gc3RycS54eTsKK30KKworZmxvYXQgZ2V0
TG9kRnJvbUFscGhhRyhmbG9hdCBjdWJlTWFwRGltZW5zaW9uUGl4ZWxzLCBmbG9hdCBtaWNyb3N1
cmZhY2VBdmVyYWdlU2xvcGUpIHsKKyAgICBmbG9hdCBtaWNyb3N1cmZhY2VBdmVyYWdlU2xvcGVU
ZXhlbHMgPSBjdWJlTWFwRGltZW5zaW9uUGl4ZWxzICogbWljcm9zdXJmYWNlQXZlcmFnZVNsb3Bl
OworICAgIGZsb2F0IGxvZCA9IGxvZzIobWljcm9zdXJmYWNlQXZlcmFnZVNsb3BlVGV4ZWxzKTsK
KyAgICByZXR1cm4gbG9kOworfQorCitmbG9hdCBnZXRMaW5lYXJMb2RGcm9tUm91Z2huZXNzKGZs
b2F0IGN1YmVNYXBEaW1lbnNpb25QaXhlbHMsIGZsb2F0IHJvdWdobmVzcykgeworICAgIGZsb2F0
IGxvZCA9IGxvZzIoY3ViZU1hcERpbWVuc2lvblBpeGVscykgKiByb3VnaG5lc3M7CisgICAgcmV0
dXJuIGxvZDsKK30KKworZmxvYXQgZW52aXJvbm1lbnRSYWRpYW5jZU9jY2x1c2lvbihmbG9hdCBh
bWJpZW50T2NjbHVzaW9uLCBmbG9hdCBOZG90VlVuY2xhbXBlZCkgeworICAgIGZsb2F0IHRlbXAg
PSBOZG90VlVuY2xhbXBlZCArIGFtYmllbnRPY2NsdXNpb247CisgICAgcmV0dXJuIGNsYW1wKHNx
dWFyZSh0ZW1wKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24sIDAuMCwgMS4wKTsKK30KKworZmxv
YXQgZW52aXJvbm1lbnRIb3Jpem9uT2NjbHVzaW9uKGZsb2F0MyB2aWV3LCBmbG9hdDMgbm9ybWFs
KSB7CisgICAgZmxvYXQzIHJlZmxlY3Rpb24gPSByZWZsZWN0KHZpZXcsIG5vcm1hbCk7CisgICAg
ZmxvYXQgdGVtcCA9IGNsYW1wKDEuMCArIDEuMSAqIGRvdChyZWZsZWN0aW9uLCBub3JtYWwpLCAw
LjAsIDEuMCk7CisgICAgcmV0dXJuIHNxdWFyZSh0ZW1wKTsKK30KKworZmxvYXQzIHBhcmFsbGF4
Q29ycmVjdE5vcm1hbChmbG9hdDMgdmVydGV4UG9zLCBmbG9hdDMgb3JpZ1ZlYywgZmxvYXQzIGN1
YmVTaXplLCBmbG9hdDMgY3ViZVBvcykgeworICAgIGZsb2F0MyBpbnZPcmlnVmVjID0gZmxvYXQz
KDEuMCwgMS4wLCAxLjApIC8gb3JpZ1ZlYzsKKyAgICBmbG9hdDMgaGFsZlNpemUgPSBjdWJlU2l6
ZSAqIDAuNTsKKyAgICBmbG9hdDMgaW50ZXJzZWNBdE1heFBsYW5lID0gKGN1YmVQb3MgKyBoYWxm
U2l6ZSAtIHZlcnRleFBvcykgKiBpbnZPcmlnVmVjOworICAgIGZsb2F0MyBpbnRlcnNlY0F0TWlu
UGxhbmUgPSAoY3ViZVBvcyAtIGhhbGZTaXplIC0gdmVydGV4UG9zKSAqIGludk9yaWdWZWM7Cisg
ICAgZmxvYXQzIGxhcmdlc3RJbnRlcnNlYyA9IG1heChpbnRlcnNlY0F0TWF4UGxhbmUsIGludGVy
c2VjQXRNaW5QbGFuZSk7CisgICAgZmxvYXQgZGlzdGFuY2UgPSBtaW4obWluKGxhcmdlc3RJbnRl
cnNlYy54LCBsYXJnZXN0SW50ZXJzZWMueSksIGxhcmdlc3RJbnRlcnNlYy56KTsKKyAgICBmbG9h
dDMgaW50ZXJzZWN0UG9zaXRpb25XUyA9IHZlcnRleFBvcyArIG9yaWdWZWMgKiBkaXN0YW5jZTsK
KyAgICByZXR1cm4gaW50ZXJzZWN0UG9zaXRpb25XUyAtIGN1YmVQb3M7Cit9CisKK2Zsb2F0MyBj
b21wdXRlRml4ZWRFcXVpcmVjdGFuZ3VsYXJDb29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMg
d29ybGROb3JtYWwsIGZsb2F0MyBkaXJlY3Rpb24pIHsKKyAgICBmbG9hdCBsb24gPSBhdGFuMihk
aXJlY3Rpb24ueiwgZGlyZWN0aW9uLngpOworICAgIGZsb2F0IGxhdCA9IGFjb3MoZGlyZWN0aW9u
LnkpOworICAgIGZsb2F0MiBzcGhlcmVDb29yZHMgPSBmbG9hdDIobG9uLCBsYXQpICogMC4xNTkx
NTQ5NCAqIDIuMDsKKyAgICBmbG9hdCBzID0gc3BoZXJlQ29vcmRzLnggKiAwLjUgKyAwLjU7Cisg
ICAgZmxvYXQgdCA9IHNwaGVyZUNvb3Jkcy55OworICAgIHJldHVybiBmbG9hdDMocywgdCwgMCk7
Cit9CisKK2Zsb2F0MyBjb21wdXRlTWlycm9yZWRGaXhlZEVxdWlyZWN0YW5ndWxhckNvb3Jkcyhm
bG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQzIGRpcmVjdGlvbikgewor
ICAgIGZsb2F0IGxvbiA9IGF0YW4yKGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueCk7CisgICAgZmxv
YXQgbGF0ID0gYWNvcyhkaXJlY3Rpb24ueSk7CisgICAgZmxvYXQyIHNwaGVyZUNvb3JkcyA9IGZs
b2F0Mihsb24sIGxhdCkgKiAwLjE1OTE1NDk0ICogMi4wOworICAgIGZsb2F0IHMgPSBzcGhlcmVD
b29yZHMueCAqIDAuNSArIDAuNTsKKyAgICBmbG9hdCB0ID0gc3BoZXJlQ29vcmRzLnk7CisgICAg
cmV0dXJuIGZsb2F0MygxLjAgLSBzLCB0LCAwKTsKK30KKworZmxvYXQzIGNvbXB1dGVFcXVpcmVj
dGFuZ3VsYXJDb29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29ybGROb3JtYWwsIGZsb2F0
MyBleWVQb3NpdGlvbiwgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAgIGZsb2F0MyBj
YW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSh3b3JsZFBvcy54eXogLSBleWVQb3NpdGlvbik7Cisg
ICAgZmxvYXQzIHIgPSBub3JtYWxpemUocmVmbGVjdChjYW1lcmFUb1ZlcnRleCwgd29ybGROb3Jt
YWwpKTsKKyAgICByID0gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChyLCAwKSkueHl6Owor
ICAgIGZsb2F0IGxvbiA9IGF0YW4yKHIueiwgci54KTsKKyAgICBmbG9hdCBsYXQgPSBhY29zKHIu
eSk7CisgICAgZmxvYXQyIHNwaGVyZUNvb3JkcyA9IGZsb2F0Mihsb24sIGxhdCkgKiAwLjE1OTE1
NDk0ICogMi4wOworICAgIGZsb2F0IHMgPSBzcGhlcmVDb29yZHMueCAqIDAuNSArIDAuNTsKKyAg
ICBmbG9hdCB0ID0gc3BoZXJlQ29vcmRzLnk7CisgICAgcmV0dXJuIGZsb2F0MyhzLCB0LCAwKTsK
K30KKworZmxvYXQzIGNvbXB1dGVTcGhlcmljYWxDb29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9h
dDMgd29ybGROb3JtYWwsIGZsb2F0NHg0IHZpZXcsIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgp
IHsKKyAgICBmbG9hdDMgdmlld0RpciA9IG5vcm1hbGl6ZShtdWwodmlldywgd29ybGRQb3MpLnh5
eik7CisgICAgZmxvYXQzIHZpZXdOb3JtYWwgPSBub3JtYWxpemUobXVsKHZpZXcsIGZsb2F0NCh3
b3JsZE5vcm1hbCwgMC4wKSkueHl6KTsKKyAgICBmbG9hdDMgciA9IHJlZmxlY3Qodmlld0Rpciwg
dmlld05vcm1hbCk7CisgICAgciA9IG11bChyZWZsZWN0aW9uTWF0cml4LCBmbG9hdDQociwgMCkp
Lnh5ejsKKyAgICByLnogPSByLnogLSAxLjA7CisgICAgZmxvYXQgbSA9IDIuMCAqIGxlbmd0aChy
KTsKKyAgICByZXR1cm4gZmxvYXQzKHIueCAvIG0gKyAwLjUsIDEuMCAtIHIueSAvIG0gLSAwLjUs
IDApOworfQorCitmbG9hdDMgY29tcHV0ZVBsYW5hckNvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZs
b2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQzIGV5ZVBvc2l0aW9uLCBmbG9hdDR4NCByZWZsZWN0aW9u
TWF0cml4KSB7CisgICAgZmxvYXQzIHZpZXdEaXIgPSB3b3JsZFBvcy54eXogLSBleWVQb3NpdGlv
bjsKKyAgICBmbG9hdDMgY29vcmRzID0gbm9ybWFsaXplKHJlZmxlY3Qodmlld0Rpciwgd29ybGRO
b3JtYWwpKTsKKyAgICByZXR1cm4gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChjb29yZHMs
IDEpKS54eXo7Cit9CisKK2Zsb2F0MyBjb21wdXRlQ3ViaWNDb29yZHMoZmxvYXQ0IHdvcmxkUG9z
LCBmbG9hdDMgd29ybGROb3JtYWwsIGZsb2F0MyBleWVQb3NpdGlvbiwgZmxvYXQ0eDQgcmVmbGVj
dGlvbk1hdHJpeCkgeworICAgIGZsb2F0MyB2aWV3RGlyID0gbm9ybWFsaXplKHdvcmxkUG9zLnh5
eiAtIGV5ZVBvc2l0aW9uKTsKKyAgICBmbG9hdDMgY29vcmRzID0gcmVmbGVjdCh2aWV3RGlyLCB3
b3JsZE5vcm1hbCk7CisgICAgY29vcmRzID0gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChj
b29yZHMsIDApKS54eXo7CisgICAgcmV0dXJuIGNvb3JkczsKK30KKworZmxvYXQzIGNvbXB1dGVD
dWJpY0xvY2FsQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9h
dDMgZXllUG9zaXRpb24sIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0MyByZWZsZWN0
aW9uU2l6ZSwgZmxvYXQzIHJlZmxlY3Rpb25Qb3NpdGlvbikgeworICAgIGZsb2F0MyB2aWV3RGly
ID0gbm9ybWFsaXplKHdvcmxkUG9zLnh5eiAtIGV5ZVBvc2l0aW9uKTsKKyAgICBmbG9hdDMgY29v
cmRzID0gcmVmbGVjdCh2aWV3RGlyLCB3b3JsZE5vcm1hbCk7CisgICAgY29vcmRzID0gcGFyYWxs
YXhDb3JyZWN0Tm9ybWFsKHdvcmxkUG9zLnh5eiwgY29vcmRzLCByZWZsZWN0aW9uU2l6ZSwgcmVm
bGVjdGlvblBvc2l0aW9uKTsKKyAgICBjb29yZHMgPSBtdWwocmVmbGVjdGlvbk1hdHJpeCwgZmxv
YXQ0KGNvb3JkcywgMCkpLnh5ejsKKyAgICByZXR1cm4gY29vcmRzOworfQorCitmbG9hdDMgY29t
cHV0ZVByb2plY3Rpb25Db29yZHMoZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDR4NCB2aWV3LCBmbG9h
dDR4NCByZWZsZWN0aW9uTWF0cml4KSB7CisgICAgcmV0dXJuIG11bChyZWZsZWN0aW9uTWF0cml4
LCBtdWwodmlldywgd29ybGRQb3MpKS54eXo7Cit9CisKK2Zsb2F0MyBjb21wdXRlU2t5Qm94Q29v
cmRzKGZsb2F0MyBwb3NpdGlvblcsIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgpIHsKKyAgICBy
ZXR1cm4gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChwb3NpdGlvblcsIDApKS54eXo7Cit9
CisKK2Zsb2F0MyBjb21wdXRlUmVmbGVjdGlvbkNvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0
MyB3b3JsZE5vcm1hbCwgZmxvYXQ0IHZFeWVQb3NpdGlvbiwgZmxvYXQ0eDQgcmVmbGVjdGlvbk1h
dHJpeCkgeworICAgIHJldHVybiBjb21wdXRlQ3ViaWNDb29yZHMod29ybGRQb3MsIHdvcmxkTm9y
bWFsLCB2RXllUG9zaXRpb24ueHl6LCByZWZsZWN0aW9uTWF0cml4KTsKK30KKworZnJhZ21lbnQg
ZmxvYXQ0IG1haW4oZmxvYXQzIHZQb3NpdGlvblcgOiBhdHRyaWJ1dGUoMCksIGZsb2F0MyB2Tm9y
bWFsVyA6IGF0dHJpYnV0ZSgxKSwgZmxvYXQzIHZFbnZpcm9ubWVudElycmFkaWFuY2UgOiBhdHRy
aWJ1dGUoMiksIEJpbmRHcm91cEEgYmluZEdyb3VwQSwgQmluZEdyb3VwQiBiaW5kR3JvdXBCLCBC
aW5kR3JvdXBDIGJpbmRHcm91cEMpIDogU1ZfVGFyZ2V0IDAgeworICAgIGZsb2F0MyB2aWV3RGly
ZWN0aW9uVyA9IG5vcm1hbGl6ZShiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZFeWVQb3NpdGlvbi54
eXogLSB2UG9zaXRpb25XKTsKKyAgICBmbG9hdDMgbm9ybWFsVyA9IG5vcm1hbGl6ZSh2Tm9ybWFs
Vyk7CisgICAgZmxvYXQyIHV2T2Zmc2V0ID0gZmxvYXQyKDAuMCwgMC4wKTsKKyAgICBmbG9hdDMg
c3VyZmFjZUFsYmVkbyA9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkFsYmVkb0NvbG9yLnh5ejsK
KyAgICBmbG9hdCBhbHBoYSA9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkFsYmVkb0NvbG9yLnc7
CisgICAgZmxvYXQzIGFtYmllbnRPY2NsdXNpb25Db2xvciA9IGZsb2F0MygxLiwgMS4sIDEuKTsK
KyAgICBmbG9hdCBtaWNyb1N1cmZhY2UgPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0
aXZpdHlDb2xvci53OworICAgIGZsb2F0MyBzdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3IgPSBiaW5k
R3JvdXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0aXZpdHlDb2xvci54eXo7CisgICAgZmxvYXQyIG1l
dGFsbGljUm91Z2huZXNzID0gc3VyZmFjZVJlZmxlY3Rpdml0eUNvbG9yLnh5OworICAgIG1pY3Jv
U3VyZmFjZSA9IDEuMCAtIG1ldGFsbGljUm91Z2huZXNzLnk7CisgICAgZmxvYXQzIGJhc2VDb2xv
ciA9IHN1cmZhY2VBbGJlZG87CisgICAgZmxvYXQzIERlZmF1bHRTcGVjdWxhclJlZmxlY3RhbmNl
RGllbGVjdHJpYyA9IGZsb2F0MygwLjA0LCAwLjA0LCAwLjA0KTsKKyAgICBzdXJmYWNlQWxiZWRv
ID0gbGVycChiYXNlQ29sb3IueHl6ICogKDEuMCAtIERlZmF1bHRTcGVjdWxhclJlZmxlY3RhbmNl
RGllbGVjdHJpYy54KSwgZmxvYXQzKDAuLCAwLiwgMC4pLCBmbG9hdDMobWV0YWxsaWNSb3VnaG5l
c3MueCwgbWV0YWxsaWNSb3VnaG5lc3MueCwgbWV0YWxsaWNSb3VnaG5lc3MueCkpOworICAgIHN1
cmZhY2VSZWZsZWN0aXZpdHlDb2xvciA9IGxlcnAoRGVmYXVsdFNwZWN1bGFyUmVmbGVjdGFuY2VE
aWVsZWN0cmljLCBiYXNlQ29sb3IsIGZsb2F0MyhtZXRhbGxpY1JvdWdobmVzcy54LCBtZXRhbGxp
Y1JvdWdobmVzcy54LCBtZXRhbGxpY1JvdWdobmVzcy54KSk7CisgICAgbWljcm9TdXJmYWNlID0g
Y2xhbXAobWljcm9TdXJmYWNlLCAwLjAsIDEuMCk7CisgICAgZmxvYXQgcm91Z2huZXNzID0gMS4g
LSBtaWNyb1N1cmZhY2U7CisgICAgZmxvYXQgTmRvdFZVbmNsYW1wZWQgPSBkb3Qobm9ybWFsVywg
dmlld0RpcmVjdGlvblcpOworICAgIGZsb2F0IE5kb3RWID0gYWJzKE5kb3RWVW5jbGFtcGVkKSAr
IDAuMDAwMDAwMTsKKyAgICBmbG9hdCBhbHBoYUcgPSBjb252ZXJ0Um91Z2huZXNzVG9BdmVyYWdl
U2xvcGUocm91Z2huZXNzKTsKKyAgICBmbG9hdDIgQUFSb3VnaG5lc3NGYWN0b3JzID0gZ2V0QUFS
b3VnaG5lc3NGYWN0b3JzKG5vcm1hbFcpOworICAgIGZsb2F0NCBlbnZpcm9ubWVudFJhZGlhbmNl
ID0gZmxvYXQ0KDAuLCAwLiwgMC4sIDAuKTsKKyAgICBmbG9hdDMgZW52aXJvbm1lbnRJcnJhZGlh
bmNlID0gZmxvYXQzKDAuLCAwLiwgMC4pOworICAgIGZsb2F0MyByZWZsZWN0aW9uVmVjdG9yID0g
Y29tcHV0ZVJlZmxlY3Rpb25Db29yZHMoZmxvYXQ0KHZQb3NpdGlvblcsIDEuMCksIG5vcm1hbFcs
IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkV5ZVBvc2l0aW9uLCBiaW5kR3JvdXBCLm1hdGVyaWFs
WzBdLnJlZmxlY3Rpb25NYXRyaXgpOworICAgIGZsb2F0MyByZWZsZWN0aW9uQ29vcmRzID0gcmVm
bGVjdGlvblZlY3RvcjsKKyAgICBmbG9hdCByZWZsZWN0aW9uTE9EID0gZ2V0TG9kRnJvbUFscGhh
RyhiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueCwg
YWxwaGFHKTsKKyAgICByZWZsZWN0aW9uTE9EID0gcmVmbGVjdGlvbkxPRCAqIGJpbmRHcm91cEIu
bWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25NaWNyb3N1cmZhY2VJbmZvcy55ICsgYmluZEdyb3VwQi5t
YXRlcmlhbFswXS52UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUluZm9zLno7CisgICAgZmxvYXQgcmVx
dWVzdGVkUmVmbGVjdGlvbkxPRCA9IHJlZmxlY3Rpb25MT0Q7CisgICAgZW52aXJvbm1lbnRSYWRp
YW5jZSA9IFNhbXBsZShiaW5kR3JvdXBDLnJlZmxlY3Rpb25TYW1wbGVyVGV4dHVyZSwgYmluZEdy
b3VwQy5yZWZsZWN0aW9uU2FtcGxlclNhbXBsZXIsIHJlZmxlY3Rpb25Db29yZHMueHkpOyAvL1Nh
bXBsZUxldmVsKGJpbmRHcm91cEMucmVmbGVjdGlvblNhbXBsZXJUZXh0dXJlLCBiaW5kR3JvdXBD
LnJlZmxlY3Rpb25TYW1wbGVyU2FtcGxlciwgcmVmbGVjdGlvbkNvb3JkcywgcmVxdWVzdGVkUmVm
bGVjdGlvbkxPRCk7CisgICAgZW52aXJvbm1lbnRSYWRpYW5jZS54eXogPSBmcm9tUkdCRChlbnZp
cm9ubWVudFJhZGlhbmNlKTsKKyAgICBlbnZpcm9ubWVudElycmFkaWFuY2UgPSB2RW52aXJvbm1l
bnRJcnJhZGlhbmNlOworICAgIGVudmlyb25tZW50UmFkaWFuY2UueHl6ICo9IGJpbmRHcm91cEIu
bWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25JbmZvcy54OworICAgIGVudmlyb25tZW50UmFkaWFuY2Uu
eHl6ICo9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25Db2xvci54eXo7CisgICAg
ZW52aXJvbm1lbnRJcnJhZGlhbmNlICo9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rp
b25Db2xvci54eXo7CisgICAgZmxvYXQgcmVmbGVjdGFuY2UgPSBtYXgobWF4KHN1cmZhY2VSZWZs
ZWN0aXZpdHlDb2xvci54LCBzdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3IueSksIHN1cmZhY2VSZWZs
ZWN0aXZpdHlDb2xvci56KTsKKyAgICBmbG9hdCByZWZsZWN0YW5jZTkwID0gZnJlc25lbEdyYXpp
bmdSZWZsZWN0YW5jZShyZWZsZWN0YW5jZSk7CisgICAgZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1l
bnRSMCA9IHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvci54eXo7CisgICAgZmxvYXQzIHNwZWN1bGFy
RW52aXJvbm1lbnRSOTAgPSBmbG9hdDMoMS4wLCAxLjAsIDEuMCkgKiByZWZsZWN0YW5jZTkwOwor
ICAgIGZsb2F0MyBlbnZpcm9ubWVudEJyZGYgPSBnZXRCUkRGTG9va3VwKE5kb3RWLCByb3VnaG5l
c3MsIGJpbmRHcm91cEEuZW52aXJvbm1lbnRCcmRmU2FtcGxlclRleHR1cmUsIGJpbmRHcm91cEEu
ZW52aXJvbm1lbnRCcmRmU2FtcGxlclNhbXBsZXIpOworICAgIGZsb2F0MyBlbmVyZ3lDb25zZXJ2
YXRpb25GYWN0b3IgPSBnZXRFbmVyZ3lDb25zZXJ2YXRpb25GYWN0b3Ioc3BlY3VsYXJFbnZpcm9u
bWVudFIwLCBlbnZpcm9ubWVudEJyZGYpOworICAgIGZsb2F0MyBkaWZmdXNlQmFzZSA9IGZsb2F0
MygwLiwgMC4sIDAuKTsKKyAgICBQcmVMaWdodGluZ0luZm8gcHJlSW5mbzsKKyAgICBMaWdodGlu
Z0luZm8gaW5mbzsKKyAgICBmbG9hdCBzaGFkb3cgPSAxLjsKKyAgICBmbG9hdDMgc3BlY3VsYXJF
bnZpcm9ubWVudFJlZmxlY3RhbmNlID0gZ2V0UmVmbGVjdGFuY2VGcm9tQlJERkxvb2t1cChzcGVj
dWxhckVudmlyb25tZW50UjAsIGVudmlyb25tZW50QnJkZik7CisgICAgZmxvYXQgYW1iaWVudE1v
bm9jaHJvbWUgPSBnZXRMdW1pbmFuY2UoYW1iaWVudE9jY2x1c2lvbkNvbG9yKTsKKyAgICBmbG9h
dCBzZW8gPSBlbnZpcm9ubWVudFJhZGlhbmNlT2NjbHVzaW9uKGFtYmllbnRNb25vY2hyb21lLCBO
ZG90VlVuY2xhbXBlZCk7CisgICAgc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3RhbmNlICo9IHNl
bzsKKyAgICBmbG9hdDMgZmluYWxJcnJhZGlhbmNlID0gZW52aXJvbm1lbnRJcnJhZGlhbmNlOwor
ICAgIGZpbmFsSXJyYWRpYW5jZSAqPSBzdXJmYWNlQWxiZWRvLnh5ejsKKyAgICBmbG9hdDMgZmlu
YWxSYWRpYW5jZSA9IGVudmlyb25tZW50UmFkaWFuY2UueHl6OworICAgIGZpbmFsUmFkaWFuY2Ug
Kj0gc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3RhbmNlOworICAgIGZsb2F0MyBmaW5hbFJhZGlh
bmNlU2NhbGVkID0gZmluYWxSYWRpYW5jZSAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkxpZ2h0
aW5nSW50ZW5zaXR5Lno7CisgICAgZmluYWxSYWRpYW5jZVNjYWxlZCAqPSBlbmVyZ3lDb25zZXJ2
YXRpb25GYWN0b3I7CisgICAgZmxvYXQzIGZpbmFsRGlmZnVzZSA9IGRpZmZ1c2VCYXNlOworICAg
IGZpbmFsRGlmZnVzZSAqPSBzdXJmYWNlQWxiZWRvLnh5ejsKKyAgICBmaW5hbERpZmZ1c2UgPSBt
YXgoZmluYWxEaWZmdXNlLCBmbG9hdDMoMC4wLCAwLjAsIDAuMCkpOworICAgIGZsb2F0MyBmaW5h
bEFtYmllbnQgPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZBbWJpZW50Q29sb3I7CisgICAgZmlu
YWxBbWJpZW50ICo9IHN1cmZhY2VBbGJlZG8ueHl6OworICAgIGZsb2F0MyBmaW5hbEVtaXNzaXZl
ID0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52RW1pc3NpdmVDb2xvcjsKKyAgICBmbG9hdDMgYW1i
aWVudE9jY2x1c2lvbkZvckRpcmVjdERpZmZ1c2UgPSBhbWJpZW50T2NjbHVzaW9uQ29sb3I7Cisg
ICAgZmxvYXQ0IGZpbmFsQ29sb3IgPSBmbG9hdDQoCisgICAgICAgIGZpbmFsQW1iaWVudCAqIGFt
YmllbnRPY2NsdXNpb25Db2xvciArCisgICAgICAgIGZpbmFsRGlmZnVzZSAqIGFtYmllbnRPY2Ns
dXNpb25Gb3JEaXJlY3REaWZmdXNlICogYmluZEdyb3VwQi5tYXRlcmlhbFswXS52TGlnaHRpbmdJ
bnRlbnNpdHkueCArCisgICAgICAgIGZpbmFsSXJyYWRpYW5jZSAqIGFtYmllbnRPY2NsdXNpb25D
b2xvciAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkxpZ2h0aW5nSW50ZW5zaXR5LnogKworICAg
ICAgICBmaW5hbFJhZGlhbmNlU2NhbGVkICsKKyAgICAgICAgZmluYWxFbWlzc2l2ZSAqIGJpbmRH
cm91cEIubWF0ZXJpYWxbMF0udkxpZ2h0aW5nSW50ZW5zaXR5LnksCisgICAgICAgIGFscGhhKTsK
KyAgICBmaW5hbENvbG9yID0gbWF4KGZpbmFsQ29sb3IsIGZsb2F0NCgwLjAsIDAuMCwgMC4wLCAw
LjApKTsKKyAgICBmaW5hbENvbG9yID0gYXBwbHlJbWFnZVByb2Nlc3NpbmcoZmluYWxDb2xvcik7
CisgICAgZmluYWxDb2xvci53ICo9IGJpbmRHcm91cEIubWVzaFswXS52aXNpYmlsaXR5OworICAg
IHJldHVybiBmaW5hbENvbG9yOworfQorYDsKKworY29uc3QgdmVydGV4U2hhZGVyV1NMMiA9IGAK
K3N0cnVjdCBPdXRwdXQgeworICAgIGZsb2F0MyB2UG9zaXRpb25XIDogYXR0cmlidXRlKDApOwor
ICAgIGZsb2F0MyB2Tm9ybWFsVyA6IGF0dHJpYnV0ZSgxKTsKKyAgICBmbG9hdDMgdlBvc2l0aW9u
VVZXIDogYXR0cmlidXRlKDIpOworICAgIGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOwor
fQorCitzdHJ1Y3QgU2NlbmUgeworICAgIGZsb2F0NHg0IHZpZXdQcm9qZWN0aW9uOworICAgIGZs
b2F0NHg0IHZpZXc7Cit9CisKK3N0cnVjdCBCaW5kR3JvdXBBIHsKKyAgICBjb25zdGFudCBTY2Vu
ZVtdIHNjZW5lIDogcmVnaXN0ZXIoYjAsIHNwYWNlMCk7CisgICAgVGV4dHVyZTJEPGZsb2F0ND4g
ZW52aXJvbm1lbnRCcmRmU2FtcGxlclRleHR1cmUgOiByZWdpc3Rlcih0MSwgc3BhY2UwKTsKKyAg
ICBzYW1wbGVyIGVudmlyb25tZW50QnJkZlNhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczIsIHNw
YWNlMCk7Cit9CisKK3N0cnVjdCBNYXRlcmlhbCB7CisgICAgZmxvYXQyIHZBbGJlZG9JbmZvczsK
KyAgICBmbG9hdDQgdkFtYmllbnRJbmZvczsKKyAgICBmbG9hdDIgdk9wYWNpdHlJbmZvczsKKyAg
ICBmbG9hdDIgdkVtaXNzaXZlSW5mb3M7CisgICAgZmxvYXQyIHZMaWdodG1hcEluZm9zOworICAg
IGZsb2F0MyB2UmVmbGVjdGl2aXR5SW5mb3M7CisgICAgZmxvYXQyIHZNaWNyb1N1cmZhY2VTYW1w
bGVySW5mb3M7CisgICAgZmxvYXQyIHZSZWZsZWN0aW9uSW5mb3M7CisgICAgZmxvYXQzIHZSZWZs
ZWN0aW9uUG9zaXRpb247CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uU2l6ZTsKKyAgICBmbG9hdDMg
dkJ1bXBJbmZvczsKKyAgICBmbG9hdDR4NCBhbGJlZG9NYXRyaXg7CisgICAgZmxvYXQ0eDQgYW1i
aWVudE1hdHJpeDsKKyAgICBmbG9hdDR4NCBvcGFjaXR5TWF0cml4OworICAgIGZsb2F0NHg0IGVt
aXNzaXZlTWF0cml4OworICAgIGZsb2F0NHg0IGxpZ2h0bWFwTWF0cml4OworICAgIGZsb2F0NHg0
IHJlZmxlY3Rpdml0eU1hdHJpeDsKKyAgICBmbG9hdDR4NCBtaWNyb1N1cmZhY2VTYW1wbGVyTWF0
cml4OworICAgIGZsb2F0NHg0IGJ1bXBNYXRyaXg7CisgICAgZmxvYXQyIHZUYW5nZW50U3BhY2VQ
YXJhbXM7CisgICAgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeDsKKyAgICBmbG9hdDMgdlJlZmxl
Y3Rpb25Db2xvcjsKKyAgICBmbG9hdDQgdkFsYmVkb0NvbG9yOworICAgIGZsb2F0NCB2TGlnaHRp
bmdJbnRlbnNpdHk7CisgICAgZmxvYXQzIHZSZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7Cisg
ICAgZmxvYXQgcG9pbnRTaXplOworICAgIGZsb2F0NCB2UmVmbGVjdGl2aXR5Q29sb3I7CisgICAg
ZmxvYXQzIHZFbWlzc2l2ZUNvbG9yOworICAgIGZsb2F0NCB2RXllUG9zaXRpb247CisgICAgZmxv
YXQzIHZBbWJpZW50Q29sb3I7CisgICAgZmxvYXQyIHZEZWJ1Z01vZGU7CisgICAgZmxvYXQyIHZD
bGVhckNvYXRQYXJhbXM7CisgICAgZmxvYXQ0IHZDbGVhckNvYXRSZWZyYWN0aW9uUGFyYW1zOwor
ICAgIGZsb2F0MiB2Q2xlYXJDb2F0SW5mb3M7CisgICAgZmxvYXQ0eDQgY2xlYXJDb2F0TWF0cml4
OworICAgIGZsb2F0MiB2Q2xlYXJDb2F0QnVtcEluZm9zOworICAgIGZsb2F0MiB2Q2xlYXJDb2F0
VGFuZ2VudFNwYWNlUGFyYW1zOworICAgIGZsb2F0NHg0IGNsZWFyQ29hdEJ1bXBNYXRyaXg7Cisg
ICAgZmxvYXQ0IHZDbGVhckNvYXRUaW50UGFyYW1zOworICAgIGZsb2F0IGNsZWFyQ29hdENvbG9y
QXREaXN0YW5jZTsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdFRpbnRJbmZvczsKKyAgICBmbG9hdDR4
NCBjbGVhckNvYXRUaW50TWF0cml4OworICAgIGZsb2F0MyB2QW5pc290cm9weTsKKyAgICBmbG9h
dDIgdkFuaXNvdHJvcHlJbmZvczsKKyAgICBmbG9hdDR4NCBhbmlzb3Ryb3B5TWF0cml4OworICAg
IGZsb2F0NCB2U2hlZW5Db2xvcjsKKyAgICBmbG9hdDIgdlNoZWVuSW5mb3M7CisgICAgZmxvYXQ0
eDQgc2hlZW5NYXRyaXg7CisgICAgZmxvYXQzIHZSZWZyYWN0aW9uTWljcm9zdXJmYWNlSW5mb3M7
CisgICAgZmxvYXQ0IHZSZWZyYWN0aW9uSW5mb3M7CisgICAgZmxvYXQ0eDQgcmVmcmFjdGlvbk1h
dHJpeDsKKyAgICBmbG9hdDIgdlRoaWNrbmVzc0luZm9zOworICAgIGZsb2F0NHg0IHRoaWNrbmVz
c01hdHJpeDsKKyAgICBmbG9hdDIgdlRoaWNrbmVzc1BhcmFtOworICAgIGZsb2F0MyB2RGlmZnVz
aW9uRGlzdGFuY2U7CisgICAgZmxvYXQ0IHZUaW50Q29sb3I7CisgICAgZmxvYXQzIHZTdWJTdXJm
YWNlSW50ZW5zaXR5OworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDAwOworICAgIGZsb2F0MyB2U3Bo
ZXJpY2FsTDFfMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwxMDsKKyAgICBmbG9hdDMgdlNwaGVy
aWNhbEwxMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyXzI7CisgICAgZmxvYXQzIHZTcGhlcmlj
YWxMMl8xOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIwOworICAgIGZsb2F0MyB2U3BoZXJpY2Fs
TDIxOworICAgIGZsb2F0MyB2U3BoZXJpY2FsTDIyOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWDsK
KyAgICBmbG9hdDMgdlNwaGVyaWNhbFk7CisgICAgZmxvYXQzIHZTcGhlcmljYWxaOworICAgIGZs
b2F0MyB2U3BoZXJpY2FsWFhfWlo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxZWV9aWjsKKyAgICBm
bG9hdDMgdlNwaGVyaWNhbFpaOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWFk7CisgICAgZmxvYXQz
IHZTcGhlcmljYWxZWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFpYOworfQorCitzdHJ1Y3QgTWVz
aCB7CisgICAgZmxvYXQ0eDQgd29ybGQ7CisgICAgZmxvYXQgdmlzaWJpbGl0eTsKK30KKworc3Ry
dWN0IEJpbmRHcm91cEIgeworICAgIGNvbnN0YW50IE1hdGVyaWFsW10gbWF0ZXJpYWwgOiByZWdp
c3RlcihiMCwgc3BhY2UxKTsKKyAgICBjb25zdGFudCBNZXNoW10gbWVzaCA6IHJlZ2lzdGVyKGIx
LCBzcGFjZTEpOworfQorCitzdHJ1Y3QgQmluZEdyb3VwQyB7CisgICAgVGV4dHVyZTJEPGZsb2F0
ND4gcmVmbGVjdGlvblNhbXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIodDAsIHNwYWNlMik7CisgICAg
c2FtcGxlciByZWZsZWN0aW9uU2FtcGxlclNhbXBsZXIgOiByZWdpc3RlcihzMSwgc3BhY2UyKTsK
K30KKworZmxvYXQzeDMgdHJhbnNwb3NlTWF0MyhmbG9hdDN4MyBpbk1hdHJpeCkgeworICAgIGZs
b2F0MyBpMCA9IGluTWF0cml4WzBdOworICAgIGZsb2F0MyBpMSA9IGluTWF0cml4WzFdOworICAg
IGZsb2F0MyBpMiA9IGluTWF0cml4WzJdOworICAgIGZsb2F0M3gzIG91dE1hdHJpeCA9IGZsb2F0
M3gzKAorICAgICAgICBmbG9hdDMoaTAueCwgaTEueCwgaTIueCksCisgICAgICAgIGZsb2F0Myhp
MC55LCBpMS55LCBpMi55KSwKKyAgICAgICAgZmxvYXQzKGkwLnosIGkxLnosIGkyLnopCisgICAg
KTsKKyAgICByZXR1cm4gb3V0TWF0cml4OworfQorCitmbG9hdDN4MyBpbnZlcnNlTWF0MyhmbG9h
dDN4MyBpbk1hdHJpeCkgeworICAgIGZsb2F0IGEwMCA9IGluTWF0cml4WzBdWzBdLCBhMDEgPSBp
bk1hdHJpeFswXVsxXSwgYTAyID0gaW5NYXRyaXhbMF1bMl07CisgICAgZmxvYXQgYTEwID0gaW5N
YXRyaXhbMV1bMF0sIGExMSA9IGluTWF0cml4WzFdWzFdLCBhMTIgPSBpbk1hdHJpeFsxXVsyXTsK
KyAgICBmbG9hdCBhMjAgPSBpbk1hdHJpeFsyXVswXSwgYTIxID0gaW5NYXRyaXhbMl1bMV0sIGEy
MiA9IGluTWF0cml4WzJdWzJdOworICAgIGZsb2F0IGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEy
MTsKKyAgICBmbG9hdCBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwOworICAgIGZsb2F0IGIy
MSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDsKKyAgICBmbG9hdCBkZXQgPSBhMDAgKiBiMDEgKyBh
MDEgKiBiMTEgKyBhMDIgKiBiMjE7CisgICAgcmV0dXJuIGZsb2F0M3gzKGIwMSwgLWEyMiAqIGEw
MSArIGEwMiAqIGEyMSwgYTEyICogYTAxIC0gYTAyICogYTExLAorICAgICAgICBiMTEsIGEyMiAq
IGEwMCAtIGEwMiAqIGEyMCwgLWExMiAqIGEwMCArIGEwMiAqIGExMCwKKyAgICAgICAgYjIxLCAt
YTIxICogYTAwICsgYTAxICogYTIwLCBhMTEgKiBhMDAgLSBhMDEgKiBhMTApIC8gZGV0OworfQor
CitmbG9hdDMgdG9MaW5lYXJTcGFjZShmbG9hdDMgY29sb3IpIHsKKyAgICByZXR1cm4gcG93KGNv
bG9yLCBmbG9hdDMoMi4yLCAyLjIsIDIuMikpOworfQorCitmbG9hdDMgdG9HYW1tYVNwYWNlKGZs
b2F0MyBjb2xvcikgeworICAgIHJldHVybiBwb3coY29sb3IsIGZsb2F0MygxLjAgLyAyLjIsIDEu
MCAvIDIuMiwgMS4wIC8gMi4yKSk7Cit9CisKK2Zsb2F0IHNxdWFyZShmbG9hdCB2YWx1ZSkgewor
ICAgIHJldHVybiB2YWx1ZSAqIHZhbHVlOworfQorCitmbG9hdCBwb3c1KGZsb2F0IHZhbHVlKSB7
CisgICAgZmxvYXQgc3EgPSB2YWx1ZSAqIHZhbHVlOworICAgIHJldHVybiBzcSAqIHNxICogdmFs
dWU7Cit9CisKK2Zsb2F0IGdldEx1bWluYW5jZShmbG9hdDMgY29sb3IpIHsKKyAgICByZXR1cm4g
Y2xhbXAoZG90KGNvbG9yLCBmbG9hdDMoMC4yMTI2LCAwLjcxNTIsIDAuMDcyMikpLCAwLiwgMS4p
OworfQorCitmbG9hdCBnZXRSYW5kKGZsb2F0MiBzZWVkKSB7CisgICAgcmV0dXJuIGZyYWMoc2lu
KGRvdChzZWVkLnh5LCBmbG9hdDIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7Cit9
CisKK2Zsb2F0IGRpdGhlcihmbG9hdDIgc2VlZCwgZmxvYXQgdmFyaWFuY2VBbW91bnQpIHsKKyAg
ICBmbG9hdCByYW5kID0gZ2V0UmFuZChzZWVkKTsKKyAgICBmbG9hdCBkaXRoZXIgPSBsZXJwKC12
YXJpYW5jZUFtb3VudCAvIDI1NS4wLCB2YXJpYW5jZUFtb3VudCAvIDI1NS4wLCByYW5kKTsKKyAg
ICByZXR1cm4gZGl0aGVyOworfQorCitmbG9hdDQgdG9SR0JEKGZsb2F0MyBjb2xvcikgeworICAg
IGZsb2F0IG1heFJHQiA9IG1heChtYXgoY29sb3IueCwgbWF4KGNvbG9yLnksIGNvbG9yLnopKSwg
MC4wMDAwMDAxKTsKKyAgICBmbG9hdCBEID0gbWF4KDI1NS4wIC8gbWF4UkdCLCAxLik7CisgICAg
RCA9IGNsYW1wKGZsb29yKEQpIC8gMjU1LjAsIDAuLCAxLik7CisgICAgZmxvYXQzIHJnYiA9IGNv
bG9yICogRDsKKyAgICByZ2IgPSB0b0dhbW1hU3BhY2UocmdiKTsKKyAgICByZXR1cm4gZmxvYXQ0
KHJnYiwgRCk7Cit9CisKK2Zsb2F0MyBmcm9tUkdCRChmbG9hdDQgcmdiZCkgeworICAgIHJnYmQu
eHl6ID0gdG9MaW5lYXJTcGFjZShyZ2JkLnh5eik7CisgICAgcmV0dXJuIHJnYmQueHl6IC8gcmdi
ZC53OworfQorCit2ZXJ0ZXggT3V0cHV0IG1haW4oZmxvYXQzIHBvc2l0aW9uIDogYXR0cmlidXRl
KDApLCBmbG9hdDMgbm9ybWFsIDogYXR0cmlidXRlKDEpLCBCaW5kR3JvdXBBIGJpbmRHcm91cEEs
IEJpbmRHcm91cEIgYmluZEdyb3VwQiwgQmluZEdyb3VwQyBiaW5kR3JvdXBDKSB7CisgICAgT3V0
cHV0IG91dHB1dDsKKyAgICBmbG9hdDMgcG9zaXRpb25VcGRhdGVkID0gcG9zaXRpb247CisgICAg
ZmxvYXQzIG5vcm1hbFVwZGF0ZWQgPSBub3JtYWw7CisgICAgb3V0cHV0LnZQb3NpdGlvblVWVyA9
IHBvc2l0aW9uVXBkYXRlZDsKKyAgICBmbG9hdDR4NCBmaW5hbFdvcmxkID0gYmluZEdyb3VwQi5t
ZXNoWzBdLndvcmxkOworICAgIG91dHB1dC5wb3NpdGlvbiA9IG11bChtdWwoYmluZEdyb3VwQS5z
Y2VuZVswXS52aWV3UHJvamVjdGlvbiwgZmluYWxXb3JsZCksIGZsb2F0NChwb3NpdGlvblVwZGF0
ZWQsIDEuMCkpOworICAgIGZsb2F0NCB3b3JsZFBvcyA9IG11bChmaW5hbFdvcmxkLCBmbG9hdDQo
cG9zaXRpb25VcGRhdGVkLCAxLjApKTsKKyAgICBvdXRwdXQudlBvc2l0aW9uVyA9IHdvcmxkUG9z
Lnh5ejsKKyAgICBmbG9hdDN4MyBub3JtYWxXb3JsZDsKKyAgICBub3JtYWxXb3JsZFswXSA9IGZp
bmFsV29ybGRbMF0ueHl6OworICAgIG5vcm1hbFdvcmxkWzFdID0gZmluYWxXb3JsZFsxXS54eXo7
CisgICAgbm9ybWFsV29ybGRbMl0gPSBmaW5hbFdvcmxkWzJdLnh5ejsKKyAgICBvdXRwdXQudk5v
cm1hbFcgPSBub3JtYWxpemUobXVsKG5vcm1hbFdvcmxkLCBub3JtYWxVcGRhdGVkKSk7CisgICAg
ZmxvYXQyIHV2VXBkYXRlZDsKKyAgICBmbG9hdDIgdXYyOworICAgIC8vb3V0cHV0LnBvc2l0aW9u
ICo9IC0xLjsKKyAgICByZXR1cm4gb3V0cHV0OworfQorYDsKKworY29uc3QgZnJhZ21lbnRTaGFk
ZXJXU0wyID0gYAorc3RydWN0IFNjZW5lIHsKKyAgICBmbG9hdDR4NCB2aWV3UHJvamVjdGlvbjsK
KyAgICBmbG9hdDR4NCB2aWV3OworfQorCitzdHJ1Y3QgQmluZEdyb3VwQSB7CisgICAgY29uc3Rh
bnQgU2NlbmVbXSBzY2VuZSA6IHJlZ2lzdGVyKGIwLCBzcGFjZTApOworICAgIFRleHR1cmUyRDxm
bG9hdDQ+IGVudmlyb25tZW50QnJkZlNhbXBsZXJUZXh0dXJlIDogcmVnaXN0ZXIodDEsIHNwYWNl
MCk7CisgICAgc2FtcGxlciBlbnZpcm9ubWVudEJyZGZTYW1wbGVyU2FtcGxlciA6IHJlZ2lzdGVy
KHMyLCBzcGFjZTApOworfQorCitzdHJ1Y3QgTWF0ZXJpYWwgeworICAgIGZsb2F0MiB2QWxiZWRv
SW5mb3M7CisgICAgZmxvYXQ0IHZBbWJpZW50SW5mb3M7CisgICAgZmxvYXQyIHZPcGFjaXR5SW5m
b3M7CisgICAgZmxvYXQyIHZFbWlzc2l2ZUluZm9zOworICAgIGZsb2F0MiB2TGlnaHRtYXBJbmZv
czsKKyAgICBmbG9hdDMgdlJlZmxlY3Rpdml0eUluZm9zOworICAgIGZsb2F0MiB2TWljcm9TdXJm
YWNlU2FtcGxlckluZm9zOworICAgIGZsb2F0MiB2UmVmbGVjdGlvbkluZm9zOworICAgIGZsb2F0
MyB2UmVmbGVjdGlvblBvc2l0aW9uOworICAgIGZsb2F0MyB2UmVmbGVjdGlvblNpemU7CisgICAg
ZmxvYXQzIHZCdW1wSW5mb3M7CisgICAgZmxvYXQ0eDQgYWxiZWRvTWF0cml4OworICAgIGZsb2F0
NHg0IGFtYmllbnRNYXRyaXg7CisgICAgZmxvYXQ0eDQgb3BhY2l0eU1hdHJpeDsKKyAgICBmbG9h
dDR4NCBlbWlzc2l2ZU1hdHJpeDsKKyAgICBmbG9hdDR4NCBsaWdodG1hcE1hdHJpeDsKKyAgICBm
bG9hdDR4NCByZWZsZWN0aXZpdHlNYXRyaXg7CisgICAgZmxvYXQ0eDQgbWljcm9TdXJmYWNlU2Ft
cGxlck1hdHJpeDsKKyAgICBmbG9hdDR4NCBidW1wTWF0cml4OworICAgIGZsb2F0MiB2VGFuZ2Vu
dFNwYWNlUGFyYW1zOworICAgIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXg7CisgICAgZmxvYXQz
IHZSZWZsZWN0aW9uQ29sb3I7CisgICAgZmxvYXQ0IHZBbGJlZG9Db2xvcjsKKyAgICBmbG9hdDQg
dkxpZ2h0aW5nSW50ZW5zaXR5OworICAgIGZsb2F0MyB2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUlu
Zm9zOworICAgIGZsb2F0IHBvaW50U2l6ZTsKKyAgICBmbG9hdDQgdlJlZmxlY3Rpdml0eUNvbG9y
OworICAgIGZsb2F0MyB2RW1pc3NpdmVDb2xvcjsKKyAgICBmbG9hdDQgdkV5ZVBvc2l0aW9uOwor
ICAgIGZsb2F0MyB2QW1iaWVudENvbG9yOworICAgIGZsb2F0MiB2RGVidWdNb2RlOworICAgIGZs
b2F0MiB2Q2xlYXJDb2F0UGFyYW1zOworICAgIGZsb2F0NCB2Q2xlYXJDb2F0UmVmcmFjdGlvblBh
cmFtczsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdEluZm9zOworICAgIGZsb2F0NHg0IGNsZWFyQ29h
dE1hdHJpeDsKKyAgICBmbG9hdDIgdkNsZWFyQ29hdEJ1bXBJbmZvczsKKyAgICBmbG9hdDIgdkNs
ZWFyQ29hdFRhbmdlbnRTcGFjZVBhcmFtczsKKyAgICBmbG9hdDR4NCBjbGVhckNvYXRCdW1wTWF0
cml4OworICAgIGZsb2F0NCB2Q2xlYXJDb2F0VGludFBhcmFtczsKKyAgICBmbG9hdCBjbGVhckNv
YXRDb2xvckF0RGlzdGFuY2U7CisgICAgZmxvYXQyIHZDbGVhckNvYXRUaW50SW5mb3M7CisgICAg
ZmxvYXQ0eDQgY2xlYXJDb2F0VGludE1hdHJpeDsKKyAgICBmbG9hdDMgdkFuaXNvdHJvcHk7Cisg
ICAgZmxvYXQyIHZBbmlzb3Ryb3B5SW5mb3M7CisgICAgZmxvYXQ0eDQgYW5pc290cm9weU1hdHJp
eDsKKyAgICBmbG9hdDQgdlNoZWVuQ29sb3I7CisgICAgZmxvYXQyIHZTaGVlbkluZm9zOworICAg
IGZsb2F0NHg0IHNoZWVuTWF0cml4OworICAgIGZsb2F0MyB2UmVmcmFjdGlvbk1pY3Jvc3VyZmFj
ZUluZm9zOworICAgIGZsb2F0NCB2UmVmcmFjdGlvbkluZm9zOworICAgIGZsb2F0NHg0IHJlZnJh
Y3Rpb25NYXRyaXg7CisgICAgZmxvYXQyIHZUaGlja25lc3NJbmZvczsKKyAgICBmbG9hdDR4NCB0
aGlja25lc3NNYXRyaXg7CisgICAgZmxvYXQyIHZUaGlja25lc3NQYXJhbTsKKyAgICBmbG9hdDMg
dkRpZmZ1c2lvbkRpc3RhbmNlOworICAgIGZsb2F0NCB2VGludENvbG9yOworICAgIGZsb2F0MyB2
U3ViU3VyZmFjZUludGVuc2l0eTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwwMDsKKyAgICBmbG9h
dDMgdlNwaGVyaWNhbEwxXzE7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMTA7CisgICAgZmxvYXQz
IHZTcGhlcmljYWxMMTE7CisgICAgZmxvYXQzIHZTcGhlcmljYWxMMl8yOworICAgIGZsb2F0MyB2
U3BoZXJpY2FsTDJfMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyMDsKKyAgICBmbG9hdDMgdlNw
aGVyaWNhbEwyMTsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbEwyMjsKKyAgICBmbG9hdDMgdlNwaGVy
aWNhbFg7CisgICAgZmxvYXQzIHZTcGhlcmljYWxZOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWjsK
KyAgICBmbG9hdDMgdlNwaGVyaWNhbFhYX1paOworICAgIGZsb2F0MyB2U3BoZXJpY2FsWVlfWlo7
CisgICAgZmxvYXQzIHZTcGhlcmljYWxaWjsKKyAgICBmbG9hdDMgdlNwaGVyaWNhbFhZOworICAg
IGZsb2F0MyB2U3BoZXJpY2FsWVo7CisgICAgZmxvYXQzIHZTcGhlcmljYWxaWDsKK30KKworc3Ry
dWN0IE1lc2ggeworICAgIGZsb2F0NHg0IHdvcmxkOworICAgIGZsb2F0IHZpc2liaWxpdHk7Cit9
CisKK3N0cnVjdCBCaW5kR3JvdXBCIHsKKyAgICBjb25zdGFudCBNYXRlcmlhbFtdIG1hdGVyaWFs
IDogcmVnaXN0ZXIoYjAsIHNwYWNlMSk7CisgICAgY29uc3RhbnQgTWVzaFtdIG1lc2ggOiByZWdp
c3RlcihiMSwgc3BhY2UxKTsKK30KKworc3RydWN0IEJpbmRHcm91cEMgeworICAgIFRleHR1cmUy
RDxmbG9hdDQ+IHJlZmxlY3Rpb25TYW1wbGVyVGV4dHVyZSA6IHJlZ2lzdGVyKHQwLCBzcGFjZTIp
OworICAgIHNhbXBsZXIgcmVmbGVjdGlvblNhbXBsZXJTYW1wbGVyIDogcmVnaXN0ZXIoczEsIHNw
YWNlMik7Cit9CisKK2Zsb2F0M3gzIHRyYW5zcG9zZU1hdDMoZmxvYXQzeDMgaW5NYXRyaXgpIHsK
KyAgICBmbG9hdDMgaTAgPSBpbk1hdHJpeFswXTsKKyAgICBmbG9hdDMgaTEgPSBpbk1hdHJpeFsx
XTsKKyAgICBmbG9hdDMgaTIgPSBpbk1hdHJpeFsyXTsKKyAgICBmbG9hdDN4MyBvdXRNYXRyaXgg
PSBmbG9hdDN4MygKKyAgICAgICAgZmxvYXQzKGkwLngsIGkxLngsIGkyLngpLAorICAgICAgICBm
bG9hdDMoaTAueSwgaTEueSwgaTIueSksCisgICAgICAgIGZsb2F0MyhpMC56LCBpMS56LCBpMi56
KQorICAgICk7CisgICAgcmV0dXJuIG91dE1hdHJpeDsKK30KKworZmxvYXQzeDMgaW52ZXJzZU1h
dDMoZmxvYXQzeDMgaW5NYXRyaXgpIHsKKyAgICBmbG9hdCBhMDAgPSBpbk1hdHJpeFswXVswXSwg
YTAxID0gaW5NYXRyaXhbMF1bMV0sIGEwMiA9IGluTWF0cml4WzBdWzJdOworICAgIGZsb2F0IGEx
MCA9IGluTWF0cml4WzFdWzBdLCBhMTEgPSBpbk1hdHJpeFsxXVsxXSwgYTEyID0gaW5NYXRyaXhb
MV1bMl07CisgICAgZmxvYXQgYTIwID0gaW5NYXRyaXhbMl1bMF0sIGEyMSA9IGluTWF0cml4WzJd
WzFdLCBhMjIgPSBpbk1hdHJpeFsyXVsyXTsKKyAgICBmbG9hdCBiMDEgPSBhMjIgKiBhMTEgLSBh
MTIgKiBhMjE7CisgICAgZmxvYXQgYjExID0gLWEyMiAqIGExMCArIGExMiAqIGEyMDsKKyAgICBm
bG9hdCBiMjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7CisgICAgZmxvYXQgZGV0ID0gYTAwICog
YjAxICsgYTAxICogYjExICsgYTAyICogYjIxOworICAgIHJldHVybiBmbG9hdDN4MyhiMDEsIC1h
MjIgKiBhMDEgKyBhMDIgKiBhMjEsIGExMiAqIGEwMSAtIGEwMiAqIGExMSwKKyAgICAgICAgYjEx
LCBhMjIgKiBhMDAgLSBhMDIgKiBhMjAsIC1hMTIgKiBhMDAgKyBhMDIgKiBhMTAsCisgICAgICAg
IGIyMSwgLWEyMSAqIGEwMCArIGEwMSAqIGEyMCwgYTExICogYTAwIC0gYTAxICogYTEwKSAvIGRl
dDsKK30KKworZmxvYXQzIHRvTGluZWFyU3BhY2UoZmxvYXQzIGNvbG9yKSB7CisgICAgcmV0dXJu
IHBvdyhjb2xvciwgZmxvYXQzKDIuMiwgMi4yLCAyLjIpKTsKK30KKworZmxvYXQzIHRvR2FtbWFT
cGFjZShmbG9hdDMgY29sb3IpIHsKKyAgICByZXR1cm4gcG93KGNvbG9yLCBmbG9hdDMoMS4wIC8g
Mi4yLCAxLjAgLyAyLjIsIDEuMCAvIDIuMikpOworfQorCitmbG9hdCBzcXVhcmUoZmxvYXQgdmFs
dWUpIHsKKyAgICByZXR1cm4gdmFsdWUgKiB2YWx1ZTsKK30KKworZmxvYXQgcG93NShmbG9hdCB2
YWx1ZSkgeworICAgIGZsb2F0IHNxID0gdmFsdWUgKiB2YWx1ZTsKKyAgICByZXR1cm4gc3EgKiBz
cSAqIHZhbHVlOworfQorCitmbG9hdCBnZXRMdW1pbmFuY2UoZmxvYXQzIGNvbG9yKSB7CisgICAg
cmV0dXJuIGNsYW1wKGRvdChjb2xvciwgZmxvYXQzKDAuMjEyNiwgMC43MTUyLCAwLjA3MjIpKSwg
MC4sIDEuKTsKK30KKworZmxvYXQgZ2V0UmFuZChmbG9hdDIgc2VlZCkgeworICAgIHJldHVybiBm
cmFjKHNpbihkb3Qoc2VlZC54eSwgZmxvYXQyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0
NTMpOworfQorCitmbG9hdCBkaXRoZXIoZmxvYXQyIHNlZWQsIGZsb2F0IHZhcmlhbmNlQW1vdW50
KSB7CisgICAgZmxvYXQgcmFuZCA9IGdldFJhbmQoc2VlZCk7CisgICAgZmxvYXQgZGl0aGVyID0g
bGVycCgtdmFyaWFuY2VBbW91bnQgLyAyNTUuMCwgdmFyaWFuY2VBbW91bnQgLyAyNTUuMCwgcmFu
ZCk7CisgICAgcmV0dXJuIGRpdGhlcjsKK30KKworZmxvYXQ0IHRvUkdCRChmbG9hdDMgY29sb3Ip
IHsKKyAgICBmbG9hdCBtYXhSR0IgPSBtYXgobWF4KGNvbG9yLngsIG1heChjb2xvci55LCBjb2xv
ci56KSksIDAuMDAwMDAwMSk7CisgICAgZmxvYXQgRCA9IG1heCgyNTUuMCAvIG1heFJHQiwgMS4p
OworICAgIEQgPSBjbGFtcChmbG9vcihEKSAvIDI1NS4wLCAwLiwgMS4pOworICAgIGZsb2F0MyBy
Z2IgPSBjb2xvciAqIEQ7CisgICAgcmdiID0gdG9HYW1tYVNwYWNlKHJnYik7CisgICAgcmV0dXJu
IGZsb2F0NChyZ2IsIEQpOworfQorCitmbG9hdDMgZnJvbVJHQkQoZmxvYXQ0IHJnYmQpIHsKKyAg
ICByZ2JkLnh5eiA9IHRvTGluZWFyU3BhY2UocmdiZC54eXopOworICAgIHJldHVybiByZ2JkLnh5
eiAvIHJnYmQudzsKK30KKworZmxvYXQgY29udmVydFJvdWdobmVzc1RvQXZlcmFnZVNsb3BlKGZs
b2F0IHJvdWdobmVzcykgeworICAgIHJldHVybiBzcXVhcmUocm91Z2huZXNzKSArIDAuMDAwNTsK
K30KKworZmxvYXQgZnJlc25lbEdyYXppbmdSZWZsZWN0YW5jZShmbG9hdCByZWZsZWN0YW5jZTAp
IHsKKyAgICBmbG9hdCByZWZsZWN0YW5jZTkwID0gY2xhbXAocmVmbGVjdGFuY2UwICogMjUuMCwg
MC4wLCAxLjApOworICAgIHJldHVybiByZWZsZWN0YW5jZTkwOworfQorCitmbG9hdDIgZ2V0QUFS
b3VnaG5lc3NGYWN0b3JzKGZsb2F0MyBub3JtYWxWZWN0b3IpIHsKKyAgICByZXR1cm4gZmxvYXQy
KDAuLCAwLik7Cit9CisKK2Zsb2F0NCBhcHBseUltYWdlUHJvY2Vzc2luZyhmbG9hdDQgcmVzdWx0
KSB7CisgICAgcmVzdWx0Lnh5eiA9IHRvR2FtbWFTcGFjZShyZXN1bHQueHl6KTsKKyAgICByZXN1
bHQueHl6ID0gY2xhbXAocmVzdWx0Lnh5eiwgZmxvYXQzKDAuMCwgMC4wLCAwLjApLCBmbG9hdDMo
MS4wLCAxLjAsIDEuMCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0cnVjdCBQcmVMaWdo
dGluZ0luZm8geworICAgIGZsb2F0MyBsaWdodE9mZnNldDsKKyAgICBmbG9hdCBsaWdodERpc3Rh
bmNlU3F1YXJlZDsKKyAgICBmbG9hdCBsaWdodERpc3RhbmNlOworICAgIGZsb2F0IGF0dGVudWF0
aW9uOworICAgIGZsb2F0MyBMOworICAgIGZsb2F0MyBIOworICAgIGZsb2F0IE5kb3RWOworICAg
IGZsb2F0IE5kb3RMVW5jbGFtcGVkOworICAgIGZsb2F0IE5kb3RMOworICAgIGZsb2F0IFZkb3RI
OworICAgIGZsb2F0IHJvdWdobmVzczsKK30KKworUHJlTGlnaHRpbmdJbmZvIGNvbXB1dGVQb2lu
dEFuZFNwb3RQcmVMaWdodGluZ0luZm8oZmxvYXQ0IGxpZ2h0RGF0YSwgZmxvYXQzIFYsIGZsb2F0
MyBOLCBmbG9hdDMgdlBvc2l0aW9uVykgeworICAgIFByZUxpZ2h0aW5nSW5mbyByZXN1bHQ7Cisg
ICAgcmVzdWx0LmxpZ2h0T2Zmc2V0ID0gbGlnaHREYXRhLnh5eiAtIHZQb3NpdGlvblc7CisgICAg
cmVzdWx0LmxpZ2h0RGlzdGFuY2VTcXVhcmVkID0gZG90KHJlc3VsdC5saWdodE9mZnNldCwgcmVz
dWx0LmxpZ2h0T2Zmc2V0KTsKKyAgICByZXN1bHQubGlnaHREaXN0YW5jZSA9IHNxcnQocmVzdWx0
LmxpZ2h0RGlzdGFuY2VTcXVhcmVkKTsKKyAgICByZXN1bHQuTCA9IG5vcm1hbGl6ZShyZXN1bHQu
bGlnaHRPZmZzZXQpOworICAgIHJlc3VsdC5IID0gbm9ybWFsaXplKFYgKyByZXN1bHQuTCk7Cisg
ICAgcmVzdWx0LlZkb3RIID0gY2xhbXAoZG90KFYsIHJlc3VsdC5IKSwgMC4wLCAxLjApOworICAg
IHJlc3VsdC5OZG90TFVuY2xhbXBlZCA9IGRvdChOLCByZXN1bHQuTCk7CisgICAgcmVzdWx0Lk5k
b3RMID0gY2xhbXAocmVzdWx0Lk5kb3RMVW5jbGFtcGVkLCAwLjAwMDAwMDEsIDEuMCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworUHJlTGlnaHRpbmdJbmZvIGNvbXB1dGVEaXJlY3Rpb25hbFBy
ZUxpZ2h0aW5nSW5mbyhmbG9hdDQgbGlnaHREYXRhLCBmbG9hdDMgViwgZmxvYXQzIE4pIHsKKyAg
ICBQcmVMaWdodGluZ0luZm8gcmVzdWx0OworICAgIHJlc3VsdC5saWdodERpc3RhbmNlID0gbGVu
Z3RoKC1saWdodERhdGEueHl6KTsKKyAgICByZXN1bHQuTCA9IG5vcm1hbGl6ZSgtbGlnaHREYXRh
Lnh5eik7CisgICAgcmVzdWx0LkggPSBub3JtYWxpemUoViArIHJlc3VsdC5MKTsKKyAgICByZXN1
bHQuVmRvdEggPSBjbGFtcChkb3QoViwgcmVzdWx0LkgpLCAwLjAsIDEuMCk7CisgICAgcmVzdWx0
Lk5kb3RMVW5jbGFtcGVkID0gZG90KE4sIHJlc3VsdC5MKTsKKyAgICByZXN1bHQuTmRvdEwgPSBj
bGFtcChyZXN1bHQuTmRvdExVbmNsYW1wZWQsIDAuMDAwMDAwMSwgMS4wKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitQcmVMaWdodGluZ0luZm8gY29tcHV0ZUhlbWlzcGhlcmljUHJlTGlnaHRp
bmdJbmZvKGZsb2F0NCBsaWdodERhdGEsIGZsb2F0MyBWLCBmbG9hdDMgTikgeworICAgIFByZUxp
Z2h0aW5nSW5mbyByZXN1bHQ7CisgICAgcmVzdWx0Lk5kb3RMID0gZG90KE4sIGxpZ2h0RGF0YS54
eXopICogMC41ICsgMC41OworICAgIHJlc3VsdC5OZG90TCA9IGNsYW1wKHJlc3VsdC5OZG90TCwg
MC4wMDAwMDAxLCAxLjApOworICAgIHJlc3VsdC5OZG90TFVuY2xhbXBlZCA9IHJlc3VsdC5OZG90
TDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmbG9hdCBjb21wdXRlRGlzdGFuY2VMaWdodEZh
bGxvZmZfU3RhbmRhcmQoZmxvYXQzIGxpZ2h0T2Zmc2V0LCBmbG9hdCByYW5nZSkgeworICAgIHJl
dHVybiBtYXgoMC4sIDEuMCAtIGxlbmd0aChsaWdodE9mZnNldCkgLyByYW5nZSk7Cit9CisKK2Zs
b2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9QaHlzaWNhbChmbG9hdCBsaWdodERpc3Rh
bmNlU3F1YXJlZCkgeworICAgIHJldHVybiAxLjAgLyBtYXgobGlnaHREaXN0YW5jZVNxdWFyZWQs
IDAuMDAwMDAwMSk7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXN0YW5jZUxpZ2h0RmFsbG9mZl9HTFRG
KGZsb2F0IGxpZ2h0RGlzdGFuY2VTcXVhcmVkLCBmbG9hdCBpbnZlcnNlU3F1YXJlZFJhbmdlKSB7
CisgICAgZmxvYXQgbGlnaHREaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgobGlnaHREaXN0YW5j
ZVNxdWFyZWQsIDAuMDAwMDAwMSk7CisgICAgZmxvYXQgZmFjdG9yID0gbGlnaHREaXN0YW5jZVNx
dWFyZWQgKiBpbnZlcnNlU3F1YXJlZFJhbmdlOworICAgIGZsb2F0IGF0dGVudWF0aW9uID0gY2xh
bXAoMS4wIC0gZmFjdG9yICogZmFjdG9yLCAwLjAsIDEuMCk7CisgICAgYXR0ZW51YXRpb24gKj0g
YXR0ZW51YXRpb247CisgICAgbGlnaHREaXN0YW5jZUZhbGxvZmYgKj0gYXR0ZW51YXRpb247Cisg
ICAgcmV0dXJuIGxpZ2h0RGlzdGFuY2VGYWxsb2ZmOworfQorCitmbG9hdCBjb21wdXRlRGlzdGFu
Y2VMaWdodEZhbGxvZmYoZmxvYXQzIGxpZ2h0T2Zmc2V0LCBmbG9hdCBsaWdodERpc3RhbmNlU3F1
YXJlZCwgZmxvYXQgcmFuZ2UsIGZsb2F0IGludmVyc2VTcXVhcmVkUmFuZ2UpIHsKKyAgICByZXR1
cm4gY29tcHV0ZURpc3RhbmNlTGlnaHRGYWxsb2ZmX1BoeXNpY2FsKGxpZ2h0RGlzdGFuY2VTcXVh
cmVkKTsKK30KKworZmxvYXQgY29tcHV0ZURpcmVjdGlvbmFsTGlnaHRGYWxsb2ZmX1N0YW5kYXJk
KGZsb2F0MyBsaWdodERpcmVjdGlvbiwgZmxvYXQzIGRpcmVjdGlvblRvTGlnaHRDZW50ZXJXLCBm
bG9hdCBjb3NIYWxmQW5nbGUsIGZsb2F0IGV4cG9uZW50KSB7CisgICAgZmxvYXQgZmFsbG9mZiA9
IDAuMDsKKyAgICBmbG9hdCBjb3NBbmdsZSA9IG1heChkb3QoLWxpZ2h0RGlyZWN0aW9uLCBkaXJl
Y3Rpb25Ub0xpZ2h0Q2VudGVyVyksIDAuMDAwMDAwMSk7CisgICAgaWYgKGNvc0FuZ2xlID49IGNv
c0hhbGZBbmdsZSkgeworICAgICAgICBmYWxsb2ZmID0gbWF4KDAuLCBwb3coY29zQW5nbGUsIGV4
cG9uZW50KSk7CisgICAgfQorICAgIHJldHVybiBmYWxsb2ZmOworfQorCitmbG9hdCBjb21wdXRl
RGlyZWN0aW9uYWxMaWdodEZhbGxvZmZfUGh5c2ljYWwoZmxvYXQzIGxpZ2h0RGlyZWN0aW9uLCBm
bG9hdDMgZGlyZWN0aW9uVG9MaWdodENlbnRlclcsIGZsb2F0IGNvc0hhbGZBbmdsZSkgeworICAg
IGZsb2F0IGtNaW51c0xvZzJDb25lQW5nbGVJbnRlbnNpdHlSYXRpbyA9IDYuNjQzODU2MTg5Nzc7
CisgICAgZmxvYXQgY29uY2VudHJhdGlvbkthcHBhID0ga01pbnVzTG9nMkNvbmVBbmdsZUludGVu
c2l0eVJhdGlvIC8gKDEuMCAtIGNvc0hhbGZBbmdsZSk7CisgICAgZmxvYXQ0IGxpZ2h0RGlyZWN0
aW9uU3ByZWFkU0cgPSBmbG9hdDQoLWxpZ2h0RGlyZWN0aW9uICogY29uY2VudHJhdGlvbkthcHBh
LCAtY29uY2VudHJhdGlvbkthcHBhKTsKKyAgICBmbG9hdCBmYWxsb2ZmID0gZXhwMihkb3QoZmxv
YXQ0KGRpcmVjdGlvblRvTGlnaHRDZW50ZXJXLCAxLjApLCBsaWdodERpcmVjdGlvblNwcmVhZFNH
KSk7CisgICAgcmV0dXJuIGZhbGxvZmY7Cit9CisKK2Zsb2F0IGNvbXB1dGVEaXJlY3Rpb25hbExp
Z2h0RmFsbG9mZl9HTFRGKGZsb2F0MyBsaWdodERpcmVjdGlvbiwgZmxvYXQzIGRpcmVjdGlvblRv
TGlnaHRDZW50ZXJXLCBmbG9hdCBsaWdodEFuZ2xlU2NhbGUsIGZsb2F0IGxpZ2h0QW5nbGVPZmZz
ZXQpIHsKKyAgICBmbG9hdCBjZCA9IGRvdCgtbGlnaHREaXJlY3Rpb24sIGRpcmVjdGlvblRvTGln
aHRDZW50ZXJXKTsKKyAgICBmbG9hdCBmYWxsb2ZmID0gY2xhbXAoY2QgKiBsaWdodEFuZ2xlU2Nh
bGUgKyBsaWdodEFuZ2xlT2Zmc2V0LCAwLjAsIDEuMCk7CisgICAgZmFsbG9mZiAqPSBmYWxsb2Zm
OworICAgIHJldHVybiBmYWxsb2ZmOworfQorCitmbG9hdCBjb21wdXRlRGlyZWN0aW9uYWxMaWdo
dEZhbGxvZmYoZmxvYXQzIGxpZ2h0RGlyZWN0aW9uLCBmbG9hdDMgZGlyZWN0aW9uVG9MaWdodENl
bnRlclcsIGZsb2F0IGNvc0hhbGZBbmdsZSwgZmxvYXQgZXhwb25lbnQsIGZsb2F0IGxpZ2h0QW5n
bGVTY2FsZSwgZmxvYXQgbGlnaHRBbmdsZU9mZnNldCkgeworICAgIHJldHVybiBjb21wdXRlRGly
ZWN0aW9uYWxMaWdodEZhbGxvZmZfUGh5c2ljYWwobGlnaHREaXJlY3Rpb24sIGRpcmVjdGlvblRv
TGlnaHRDZW50ZXJXLCBjb3NIYWxmQW5nbGUpOworfQorCitmbG9hdDMgZ2V0RW5lcmd5Q29uc2Vy
dmF0aW9uRmFjdG9yKGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50UjAsIGZsb2F0MyBlbnZpcm9u
bWVudEJyZGYpIHsKKyAgICByZXR1cm4gZmxvYXQzKDEuMCwgMS4wLCAxLjApICsgc3BlY3VsYXJF
bnZpcm9ubWVudFIwICogKDEuMCAvIGVudmlyb25tZW50QnJkZi55IC0gMS4wKTsKK30KKworZmxv
YXQzIGdldEJSREZMb29rdXAoZmxvYXQgTmRvdFYsIGZsb2F0IHBlcmNlcHR1YWxSb3VnaG5lc3Ms
IFRleHR1cmUyRDxmbG9hdDQ+IGVudmlyb25tZW50QnJkZlNhbXBsZXJUZXh0dXJlLCBzYW1wbGVy
IGVudmlyb25tZW50QnJkZlNhbXBsZXJTYW1wbGVyKSB7CisgICAgZmxvYXQyIFVWID0gZmxvYXQy
KE5kb3RWLCBwZXJjZXB0dWFsUm91Z2huZXNzKTsKKyAgICBmbG9hdDQgYnJkZkxvb2t1cCA9IFNh
bXBsZShlbnZpcm9ubWVudEJyZGZTYW1wbGVyVGV4dHVyZSwgZW52aXJvbm1lbnRCcmRmU2FtcGxl
clNhbXBsZXIsIFVWKTsKKyAgICByZXR1cm4gYnJkZkxvb2t1cC54eXo7Cit9CisKK2Zsb2F0MyBn
ZXRSZWZsZWN0YW5jZUZyb21CUkRGTG9va3VwKGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50UjAs
IGZsb2F0MyBlbnZpcm9ubWVudEJyZGYpIHsKKyAgICBmbG9hdDMgcmVmbGVjdGFuY2UgPSBsZXJw
KGVudmlyb25tZW50QnJkZi54eHgsIGVudmlyb25tZW50QnJkZi55eXksIHNwZWN1bGFyRW52aXJv
bm1lbnRSMCk7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlOworfQorCitmbG9hdDMgZ2V0UmVmbGVj
dGFuY2VGcm9tQW5hbHl0aWNhbEJSREZMb29rdXBfSm9uZXMoZmxvYXQgVmRvdE4sIGZsb2F0MyBy
ZWZsZWN0YW5jZTAsIGZsb2F0MyByZWZsZWN0YW5jZTkwLCBmbG9hdCBzbW9vdGhuZXNzKSB7Cisg
ICAgZmxvYXQgd2VpZ2h0ID0gbGVycCgwLjI1LCAxLjAsIHNtb290aG5lc3MpOworICAgIHJldHVy
biByZWZsZWN0YW5jZTAgKyB3ZWlnaHQgKiAocmVmbGVjdGFuY2U5MCAtIHJlZmxlY3RhbmNlMCkg
KiBwb3c1KGNsYW1wKDEuMCAtIFZkb3ROLCAwLjAsIDEuMCkpOworfQorCitmbG9hdDMgZnJlc25l
bFNjaGxpY2tHR1goZmxvYXQgVmRvdEgsIGZsb2F0MyByZWZsZWN0YW5jZTAsIGZsb2F0MyByZWZs
ZWN0YW5jZTkwKSB7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlMCArIChyZWZsZWN0YW5jZTkwIC0g
cmVmbGVjdGFuY2UwKSAqIHBvdzUoMS4wIC0gVmRvdEgpOworfQorCitmbG9hdCBmcmVzbmVsU2No
bGlja0dHWChmbG9hdCBWZG90SCwgZmxvYXQgcmVmbGVjdGFuY2UwLCBmbG9hdCByZWZsZWN0YW5j
ZTkwKSB7CisgICAgcmV0dXJuIHJlZmxlY3RhbmNlMCArIChyZWZsZWN0YW5jZTkwIC0gcmVmbGVj
dGFuY2UwKSAqIHBvdzUoMS4wIC0gVmRvdEgpOworfQorCitmbG9hdCBub3JtYWxEaXN0cmlidXRp
b25GdW5jdGlvbl9Ucm93YnJpZGdlUmVpdHpHR1goZmxvYXQgTmRvdEgsIGZsb2F0IGFscGhhRykg
eworICAgIGZsb2F0IGEyID0gc3F1YXJlKGFscGhhRyk7CisgICAgZmxvYXQgZCA9IE5kb3RIICog
TmRvdEggKiAoYTIgLSAxLjApICsgMS4wOworICAgIHJldHVybiBhMiAvICgzLjE0MTU5MjY1MzU4
OTc5MzIzODQ2MjY0MzM4MzI3OTUgKiBkICogZCk7Cit9CisKK2Zsb2F0IHNtaXRoVmlzaWJpbGl0
eV9HR1hDb3JyZWxhdGVkKGZsb2F0IE5kb3RMLCBmbG9hdCBOZG90ViwgZmxvYXQgYWxwaGFHKSB7
CisgICAgZmxvYXQgYTIgPSBhbHBoYUcgKiBhbHBoYUc7CisgICAgZmxvYXQgR0dYViA9IE5kb3RM
ICogc3FydChOZG90ViAqIChOZG90ViAtIGEyICogTmRvdFYpICsgYTIpOworICAgIGZsb2F0IEdH
WEwgPSBOZG90ViAqIHNxcnQoTmRvdEwgKiAoTmRvdEwgLSBhMiAqIE5kb3RMKSArIGEyKTsKKyAg
ICByZXR1cm4gMC41IC8gKEdHWFYgKyBHR1hMKTsKK30KKworZmxvYXQgZGlmZnVzZUJSREZfQnVy
bGV5KGZsb2F0IE5kb3RMLCBmbG9hdCBOZG90ViwgZmxvYXQgVmRvdEgsIGZsb2F0IHJvdWdobmVz
cykgeworICAgIGZsb2F0IGRpZmZ1c2VGcmVzbmVsTlYgPSBwb3c1KGNsYW1wKDEuMCAtIE5kb3RM
LCAwLjAwMDAwMDEsIDEuMCkpOworICAgIGZsb2F0IGRpZmZ1c2VGcmVzbmVsTkwgPSBwb3c1KGNs
YW1wKDEuMCAtIE5kb3RWLCAwLjAwMDAwMDEsIDEuMCkpOworICAgIGZsb2F0IGRpZmZ1c2VGcmVz
bmVsOTAgPSAwLjUgKyAyLjAgKiBWZG90SCAqIFZkb3RIICogcm91Z2huZXNzOworICAgIGZsb2F0
IGZyZXNuZWwgPSAoMS4wICsgKGRpZmZ1c2VGcmVzbmVsOTAgLSAxLjApICogZGlmZnVzZUZyZXNu
ZWxOTCkgKgorICAgICAgICAoMS4wICsgKGRpZmZ1c2VGcmVzbmVsOTAgLSAxLjApICogZGlmZnVz
ZUZyZXNuZWxOVik7CisgICAgcmV0dXJuIGZyZXNuZWwgLyAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2
MjY0MzM4MzI3OTU7Cit9CisKK3N0cnVjdCBMaWdodGluZ0luZm8geworICAgIGZsb2F0MyBkaWZm
dXNlOworfQorCitmbG9hdCBhZGp1c3RSb3VnaG5lc3NGcm9tTGlnaHRQcm9wZXJ0aWVzKGZsb2F0
IHJvdWdobmVzcywgZmxvYXQgbGlnaHRSYWRpdXMsIGZsb2F0IGxpZ2h0RGlzdGFuY2UpIHsKKyAg
ICBmbG9hdCBsaWdodFJvdWdobmVzcyA9IGxpZ2h0UmFkaXVzIC8gbGlnaHREaXN0YW5jZTsKKyAg
ICBmbG9hdCB0b3RhbFJvdWdobmVzcyA9IGNsYW1wKGxpZ2h0Um91Z2huZXNzICsgcm91Z2huZXNz
LCAwLjAsIDEuMCk7CisgICAgcmV0dXJuIHRvdGFsUm91Z2huZXNzOworfQorCitmbG9hdDMgY29t
cHV0ZUhlbWlzcGhlcmljRGlmZnVzZUxpZ2h0aW5nKFByZUxpZ2h0aW5nSW5mbyBpbmZvLCBmbG9h
dDMgbGlnaHRDb2xvciwgZmxvYXQzIGdyb3VuZENvbG9yKSB7CisgICAgcmV0dXJuIGxlcnAoZ3Jv
dW5kQ29sb3IsIGxpZ2h0Q29sb3IsIGZsb2F0MyhpbmZvLk5kb3RMLCBpbmZvLk5kb3RMLCBpbmZv
Lk5kb3RMKSk7Cit9CisKK2Zsb2F0MyBjb21wdXRlRGlmZnVzZUxpZ2h0aW5nKFByZUxpZ2h0aW5n
SW5mbyBpbmZvLCBmbG9hdDMgbGlnaHRDb2xvcikgeworICAgIGZsb2F0IGRpZmZ1c2VUZXJtID0g
ZGlmZnVzZUJSREZfQnVybGV5KGluZm8uTmRvdEwsIGluZm8uTmRvdFYsIGluZm8uVmRvdEgsIGlu
Zm8ucm91Z2huZXNzKTsKKyAgICByZXR1cm4gZGlmZnVzZVRlcm0gKiBpbmZvLmF0dGVudWF0aW9u
ICogaW5mby5OZG90TCAqIGxpZ2h0Q29sb3I7Cit9CisKK2Zsb2F0MiBjb21wdXRlUHJvamVjdGlv
blRleHR1cmVEaWZmdXNlTGlnaHRpbmdVVihmbG9hdDR4NCB0ZXh0dXJlUHJvamVjdGlvbk1hdHJp
eCwgZmxvYXQzIHZQb3NpdGlvblcpIHsKKyAgICBmbG9hdDQgc3RycSA9IG11bCh0ZXh0dXJlUHJv
amVjdGlvbk1hdHJpeCwgZmxvYXQ0KHZQb3NpdGlvblcsIDEuMCkpOworICAgIHN0cnEgLz0gc3Ry
cS53OworICAgIHJldHVybiBzdHJxLnh5OworfQorCitmbG9hdCBnZXRMb2RGcm9tQWxwaGFHKGZs
b2F0IGN1YmVNYXBEaW1lbnNpb25QaXhlbHMsIGZsb2F0IG1pY3Jvc3VyZmFjZUF2ZXJhZ2VTbG9w
ZSkgeworICAgIGZsb2F0IG1pY3Jvc3VyZmFjZUF2ZXJhZ2VTbG9wZVRleGVscyA9IGN1YmVNYXBE
aW1lbnNpb25QaXhlbHMgKiBtaWNyb3N1cmZhY2VBdmVyYWdlU2xvcGU7CisgICAgZmxvYXQgbG9k
ID0gbG9nMihtaWNyb3N1cmZhY2VBdmVyYWdlU2xvcGVUZXhlbHMpOworICAgIHJldHVybiBsb2Q7
Cit9CisKK2Zsb2F0IGdldExpbmVhckxvZEZyb21Sb3VnaG5lc3MoZmxvYXQgY3ViZU1hcERpbWVu
c2lvblBpeGVscywgZmxvYXQgcm91Z2huZXNzKSB7CisgICAgZmxvYXQgbG9kID0gbG9nMihjdWJl
TWFwRGltZW5zaW9uUGl4ZWxzKSAqIHJvdWdobmVzczsKKyAgICByZXR1cm4gbG9kOworfQorCitm
bG9hdCBlbnZpcm9ubWVudFJhZGlhbmNlT2NjbHVzaW9uKGZsb2F0IGFtYmllbnRPY2NsdXNpb24s
IGZsb2F0IE5kb3RWVW5jbGFtcGVkKSB7CisgICAgZmxvYXQgdGVtcCA9IE5kb3RWVW5jbGFtcGVk
ICsgYW1iaWVudE9jY2x1c2lvbjsKKyAgICByZXR1cm4gY2xhbXAoc3F1YXJlKHRlbXApIC0gMS4w
ICsgYW1iaWVudE9jY2x1c2lvbiwgMC4wLCAxLjApOworfQorCitmbG9hdCBlbnZpcm9ubWVudEhv
cml6b25PY2NsdXNpb24oZmxvYXQzIHZpZXcsIGZsb2F0MyBub3JtYWwpIHsKKyAgICBmbG9hdDMg
cmVmbGVjdGlvbiA9IHJlZmxlY3Qodmlldywgbm9ybWFsKTsKKyAgICBmbG9hdCB0ZW1wID0gY2xh
bXAoMS4wICsgMS4xICogZG90KHJlZmxlY3Rpb24sIG5vcm1hbCksIDAuMCwgMS4wKTsKKyAgICBy
ZXR1cm4gc3F1YXJlKHRlbXApOworfQorCitmbG9hdDMgcGFyYWxsYXhDb3JyZWN0Tm9ybWFsKGZs
b2F0MyB2ZXJ0ZXhQb3MsIGZsb2F0MyBvcmlnVmVjLCBmbG9hdDMgY3ViZVNpemUsIGZsb2F0MyBj
dWJlUG9zKSB7CisgICAgZmxvYXQzIGludk9yaWdWZWMgPSBmbG9hdDMoMS4wLCAxLjAsIDEuMCkg
LyBvcmlnVmVjOworICAgIGZsb2F0MyBoYWxmU2l6ZSA9IGN1YmVTaXplICogMC41OworICAgIGZs
b2F0MyBpbnRlcnNlY0F0TWF4UGxhbmUgPSAoY3ViZVBvcyArIGhhbGZTaXplIC0gdmVydGV4UG9z
KSAqIGludk9yaWdWZWM7CisgICAgZmxvYXQzIGludGVyc2VjQXRNaW5QbGFuZSA9IChjdWJlUG9z
IC0gaGFsZlNpemUgLSB2ZXJ0ZXhQb3MpICogaW52T3JpZ1ZlYzsKKyAgICBmbG9hdDMgbGFyZ2Vz
dEludGVyc2VjID0gbWF4KGludGVyc2VjQXRNYXhQbGFuZSwgaW50ZXJzZWNBdE1pblBsYW5lKTsK
KyAgICBmbG9hdCBkaXN0YW5jZSA9IG1pbihtaW4obGFyZ2VzdEludGVyc2VjLngsIGxhcmdlc3RJ
bnRlcnNlYy55KSwgbGFyZ2VzdEludGVyc2VjLnopOworICAgIGZsb2F0MyBpbnRlcnNlY3RQb3Np
dGlvbldTID0gdmVydGV4UG9zICsgb3JpZ1ZlYyAqIGRpc3RhbmNlOworICAgIHJldHVybiBpbnRl
cnNlY3RQb3NpdGlvbldTIC0gY3ViZVBvczsKK30KKworZmxvYXQzIGNvbXB1dGVGaXhlZEVxdWly
ZWN0YW5ndWxhckNvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxv
YXQzIGRpcmVjdGlvbikgeworICAgIGZsb2F0IGxvbiA9IGF0YW4yKGRpcmVjdGlvbi56LCBkaXJl
Y3Rpb24ueCk7CisgICAgZmxvYXQgbGF0ID0gYWNvcyhkaXJlY3Rpb24ueSk7CisgICAgZmxvYXQy
IHNwaGVyZUNvb3JkcyA9IGZsb2F0Mihsb24sIGxhdCkgKiAwLjE1OTE1NDk0ICogMi4wOworICAg
IGZsb2F0IHMgPSBzcGhlcmVDb29yZHMueCAqIDAuNSArIDAuNTsKKyAgICBmbG9hdCB0ID0gc3Bo
ZXJlQ29vcmRzLnk7CisgICAgcmV0dXJuIGZsb2F0MyhzLCB0LCAwKTsKK30KKworZmxvYXQzIGNv
bXB1dGVNaXJyb3JlZEZpeGVkRXF1aXJlY3Rhbmd1bGFyQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywg
ZmxvYXQzIHdvcmxkTm9ybWFsLCBmbG9hdDMgZGlyZWN0aW9uKSB7CisgICAgZmxvYXQgbG9uID0g
YXRhbjIoZGlyZWN0aW9uLnosIGRpcmVjdGlvbi54KTsKKyAgICBmbG9hdCBsYXQgPSBhY29zKGRp
cmVjdGlvbi55KTsKKyAgICBmbG9hdDIgc3BoZXJlQ29vcmRzID0gZmxvYXQyKGxvbiwgbGF0KSAq
IDAuMTU5MTU0OTQgKiAyLjA7CisgICAgZmxvYXQgcyA9IHNwaGVyZUNvb3Jkcy54ICogMC41ICsg
MC41OworICAgIGZsb2F0IHQgPSBzcGhlcmVDb29yZHMueTsKKyAgICByZXR1cm4gZmxvYXQzKDEu
MCAtIHMsIHQsIDApOworfQorCitmbG9hdDMgY29tcHV0ZUVxdWlyZWN0YW5ndWxhckNvb3Jkcyhm
bG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwgZmxvYXQzIGV5ZVBvc2l0aW9uLCBm
bG9hdDR4NCByZWZsZWN0aW9uTWF0cml4KSB7CisgICAgZmxvYXQzIGNhbWVyYVRvVmVydGV4ID0g
bm9ybWFsaXplKHdvcmxkUG9zLnh5eiAtIGV5ZVBvc2l0aW9uKTsKKyAgICBmbG9hdDMgciA9IG5v
cm1hbGl6ZShyZWZsZWN0KGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCkpOworICAgIHIgPSBt
dWwocmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KHIsIDApKS54eXo7CisgICAgZmxvYXQgbG9uID0g
YXRhbjIoci56LCByLngpOworICAgIGZsb2F0IGxhdCA9IGFjb3Moci55KTsKKyAgICBmbG9hdDIg
c3BoZXJlQ29vcmRzID0gZmxvYXQyKGxvbiwgbGF0KSAqIDAuMTU5MTU0OTQgKiAyLjA7CisgICAg
ZmxvYXQgcyA9IHNwaGVyZUNvb3Jkcy54ICogMC41ICsgMC41OworICAgIGZsb2F0IHQgPSBzcGhl
cmVDb29yZHMueTsKKyAgICByZXR1cm4gZmxvYXQzKHMsIHQsIDApOworfQorCitmbG9hdDMgY29t
cHV0ZVNwaGVyaWNhbENvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5vcm1hbCwg
ZmxvYXQ0eDQgdmlldywgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAgIGZsb2F0MyB2
aWV3RGlyID0gbm9ybWFsaXplKG11bCh2aWV3LCB3b3JsZFBvcykueHl6KTsKKyAgICBmbG9hdDMg
dmlld05vcm1hbCA9IG5vcm1hbGl6ZShtdWwodmlldywgZmxvYXQ0KHdvcmxkTm9ybWFsLCAwLjAp
KS54eXopOworICAgIGZsb2F0MyByID0gcmVmbGVjdCh2aWV3RGlyLCB2aWV3Tm9ybWFsKTsKKyAg
ICByID0gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIGZsb2F0NChyLCAwKSkueHl6OworICAgIHIueiA9
IHIueiAtIDEuMDsKKyAgICBmbG9hdCBtID0gMi4wICogbGVuZ3RoKHIpOworICAgIHJldHVybiBm
bG9hdDMoci54IC8gbSArIDAuNSwgMS4wIC0gci55IC8gbSAtIDAuNSwgMCk7Cit9CisKK2Zsb2F0
MyBjb21wdXRlUGxhbmFyQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFs
LCBmbG9hdDMgZXllUG9zaXRpb24sIGZsb2F0NHg0IHJlZmxlY3Rpb25NYXRyaXgpIHsKKyAgICBm
bG9hdDMgdmlld0RpciA9IHdvcmxkUG9zLnh5eiAtIGV5ZVBvc2l0aW9uOworICAgIGZsb2F0MyBj
b29yZHMgPSBub3JtYWxpemUocmVmbGVjdCh2aWV3RGlyLCB3b3JsZE5vcm1hbCkpOworICAgIHJl
dHVybiBtdWwocmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KGNvb3JkcywgMSkpLnh5ejsKK30KKwor
ZmxvYXQzIGNvbXB1dGVDdWJpY0Nvb3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0MyB3b3JsZE5v
cm1hbCwgZmxvYXQzIGV5ZVBvc2l0aW9uLCBmbG9hdDR4NCByZWZsZWN0aW9uTWF0cml4KSB7Cisg
ICAgZmxvYXQzIHZpZXdEaXIgPSBub3JtYWxpemUod29ybGRQb3MueHl6IC0gZXllUG9zaXRpb24p
OworICAgIGZsb2F0MyBjb29yZHMgPSByZWZsZWN0KHZpZXdEaXIsIHdvcmxkTm9ybWFsKTsKKyAg
ICBjb29yZHMgPSBtdWwocmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQ0KGNvb3JkcywgMCkpLnh5ejsK
KyAgICByZXR1cm4gY29vcmRzOworfQorCitmbG9hdDMgY29tcHV0ZUN1YmljTG9jYWxDb29yZHMo
ZmxvYXQ0IHdvcmxkUG9zLCBmbG9hdDMgd29ybGROb3JtYWwsIGZsb2F0MyBleWVQb3NpdGlvbiwg
ZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCwgZmxvYXQzIHJlZmxlY3Rpb25TaXplLCBmbG9hdDMg
cmVmbGVjdGlvblBvc2l0aW9uKSB7CisgICAgZmxvYXQzIHZpZXdEaXIgPSBub3JtYWxpemUod29y
bGRQb3MueHl6IC0gZXllUG9zaXRpb24pOworICAgIGZsb2F0MyBjb29yZHMgPSByZWZsZWN0KHZp
ZXdEaXIsIHdvcmxkTm9ybWFsKTsKKyAgICBjb29yZHMgPSBwYXJhbGxheENvcnJlY3ROb3JtYWwo
d29ybGRQb3MueHl6LCBjb29yZHMsIHJlZmxlY3Rpb25TaXplLCByZWZsZWN0aW9uUG9zaXRpb24p
OworICAgIGNvb3JkcyA9IG11bChyZWZsZWN0aW9uTWF0cml4LCBmbG9hdDQoY29vcmRzLCAwKSku
eHl6OworICAgIHJldHVybiBjb29yZHM7Cit9CisKK2Zsb2F0MyBjb21wdXRlUHJvamVjdGlvbkNv
b3JkcyhmbG9hdDQgd29ybGRQb3MsIGZsb2F0NHg0IHZpZXcsIGZsb2F0NHg0IHJlZmxlY3Rpb25N
YXRyaXgpIHsKKyAgICByZXR1cm4gbXVsKHJlZmxlY3Rpb25NYXRyaXgsIG11bCh2aWV3LCB3b3Js
ZFBvcykpLnh5ejsKK30KKworZmxvYXQzIGNvbXB1dGVTa3lCb3hDb29yZHMoZmxvYXQzIHBvc2l0
aW9uVywgZmxvYXQ0eDQgcmVmbGVjdGlvbk1hdHJpeCkgeworICAgIHJldHVybiBtdWwocmVmbGVj
dGlvbk1hdHJpeCwgZmxvYXQ0KHBvc2l0aW9uVywgMCkpLnh5ejsKK30KKworZmxvYXQzIGNvbXB1
dGVSZWZsZWN0aW9uQ29vcmRzKGZsb2F0NCB3b3JsZFBvcywgZmxvYXQzIHdvcmxkTm9ybWFsLCBm
bG9hdDMgdlBvc2l0aW9uVVZXLCBmbG9hdDR4NCByZWZsZWN0aW9uTWF0cml4KSB7CisgICAgZmxv
YXQgciA9IGxlbmd0aCh2UG9zaXRpb25VVlcpOworICAgIGZsb2F0IGdhbW1hID0gYXRhbjIodlBv
c2l0aW9uVVZXLngsIHZQb3NpdGlvblVWVy56KTsKKyAgICBmbG9hdCB0aGV0YSA9IGFjb3ModlBv
c2l0aW9uVVZXLnkgLyByKTsKKyAgICByZXR1cm4gZmxvYXQzKGdhbW1hIC8gMy4xNDE1OTI2NTM1
ODk3OTMyMzg0NjI2NDMzODMyNzk1ICsgMC41LCB0aGV0YSAvIDMuMTQxNTkyNjUzNTg5NzkzMjM4
NDYyNjQzMzgzMjc5NSwgcik7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBtYWluKGZsb2F0MyB2UG9z
aXRpb25XIDogYXR0cmlidXRlKDApLCBmbG9hdDMgdk5vcm1hbFcgOiBhdHRyaWJ1dGUoMSksIGZs
b2F0MyB2UG9zaXRpb25VVlcgOiBhdHRyaWJ1dGUoMiksIEJpbmRHcm91cEEgYmluZEdyb3VwQSwg
QmluZEdyb3VwQiBiaW5kR3JvdXBCLCBCaW5kR3JvdXBDIGJpbmRHcm91cEMsIGJvb2wgZnJvbnRG
YWNlIDogU1ZfSXNGcm9udEZhY2UpIDogU1ZfVGFyZ2V0IDAgeworICAgIGZsb2F0MyB2aWV3RGly
ZWN0aW9uVyA9IG5vcm1hbGl6ZShiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZFeWVQb3NpdGlvbi54
eXogLSB2UG9zaXRpb25XKTsKKyAgICBmbG9hdDMgbm9ybWFsVyA9IG5vcm1hbGl6ZSh2Tm9ybWFs
Vyk7CisgICAgZmxvYXQyIHV2T2Zmc2V0ID0gZmxvYXQyKDAuMCwgMC4wKTsKKyAgICBub3JtYWxX
ID0gZnJvbnRGYWNlID8gbm9ybWFsVyA6IC1ub3JtYWxXOworICAgIGZsb2F0MyBzdXJmYWNlQWxi
ZWRvID0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52QWxiZWRvQ29sb3IueHl6OworICAgIGZsb2F0
IGFscGhhID0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52QWxiZWRvQ29sb3IudzsKKyAgICBmbG9h
dDMgYW1iaWVudE9jY2x1c2lvbkNvbG9yID0gZmxvYXQzKDEuLCAxLiwgMS4pOworICAgIGZsb2F0
IG1pY3JvU3VyZmFjZSA9IGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpdml0eUNvbG9y
Lnc7CisgICAgZmxvYXQzIHN1cmZhY2VSZWZsZWN0aXZpdHlDb2xvciA9IGJpbmRHcm91cEIubWF0
ZXJpYWxbMF0udlJlZmxlY3Rpdml0eUNvbG9yLnh5ejsKKyAgICBtaWNyb1N1cmZhY2UgPSBjbGFt
cChtaWNyb1N1cmZhY2UsIDAuMCwgMS4wKTsKKyAgICBmbG9hdCByb3VnaG5lc3MgPSAxLiAtIG1p
Y3JvU3VyZmFjZTsKKyAgICBmbG9hdCBOZG90VlVuY2xhbXBlZCA9IGRvdChub3JtYWxXLCB2aWV3
RGlyZWN0aW9uVyk7CisgICAgZmxvYXQgTmRvdFYgPSBhYnMoTmRvdFZVbmNsYW1wZWQpICsgMC4w
MDAwMDAxOworICAgIGZsb2F0IGFscGhhRyA9IGNvbnZlcnRSb3VnaG5lc3NUb0F2ZXJhZ2VTbG9w
ZShyb3VnaG5lc3MpOworICAgIGZsb2F0MiBBQVJvdWdobmVzc0ZhY3RvcnMgPSBnZXRBQVJvdWdo
bmVzc0ZhY3RvcnMobm9ybWFsVyk7CisgICAgZmxvYXQ0IGVudmlyb25tZW50UmFkaWFuY2UgPSBm
bG9hdDQoMC4sIDAuLCAwLiwgMC4pOworICAgIGZsb2F0MyBlbnZpcm9ubWVudElycmFkaWFuY2Ug
PSBmbG9hdDMoMC4sIDAuLCAwLik7CisgICAgZmxvYXQzIHJlZmxlY3Rpb25WZWN0b3IgPSBjb21w
dXRlUmVmbGVjdGlvbkNvb3JkcyhmbG9hdDQodlBvc2l0aW9uVywgMS4wKSwgbm9ybWFsVywgdlBv
c2l0aW9uVVZXLCBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnJlZmxlY3Rpb25NYXRyaXgpOworICAg
IGZsb2F0MyByZWZsZWN0aW9uQ29vcmRzID0gcmVmbGVjdGlvblZlY3RvcjsKKyAgICBmbG9hdCBy
ZWZsZWN0aW9uTE9EID0gZ2V0TG9kRnJvbUFscGhhRyhiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZS
ZWZsZWN0aW9uTWljcm9zdXJmYWNlSW5mb3MueCwgYWxwaGFHKTsKKyAgICByZWZsZWN0aW9uTE9E
ID0gcmVmbGVjdGlvbkxPRCAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udlJlZmxlY3Rpb25NaWNy
b3N1cmZhY2VJbmZvcy55ICsgYmluZEdyb3VwQi5tYXRlcmlhbFswXS52UmVmbGVjdGlvbk1pY3Jv
c3VyZmFjZUluZm9zLno7CisgICAgZmxvYXQgcmVxdWVzdGVkUmVmbGVjdGlvbkxPRCA9IHJlZmxl
Y3Rpb25MT0Q7CisgICAgZW52aXJvbm1lbnRSYWRpYW5jZSA9IFNhbXBsZShiaW5kR3JvdXBDLnJl
ZmxlY3Rpb25TYW1wbGVyVGV4dHVyZSwgYmluZEdyb3VwQy5yZWZsZWN0aW9uU2FtcGxlclNhbXBs
ZXIsIHJlZmxlY3Rpb25Db29yZHMueHkpOyAvL1NhbXBsZUxldmVsKGJpbmRHcm91cEMucmVmbGVj
dGlvblNhbXBsZXJUZXh0dXJlLCBiaW5kR3JvdXBDLnJlZmxlY3Rpb25TYW1wbGVyU2FtcGxlciwg
cmVmbGVjdGlvbkNvb3JkcywgcmVxdWVzdGVkUmVmbGVjdGlvbkxPRCk7CisgICAgZW52aXJvbm1l
bnRSYWRpYW5jZS54eXogPSBmcm9tUkdCRChlbnZpcm9ubWVudFJhZGlhbmNlKTsKKyAgICBlbnZp
cm9ubWVudFJhZGlhbmNlLnh5eiAqPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0aW9u
SW5mb3MueDsKKyAgICBlbnZpcm9ubWVudFJhZGlhbmNlLnh5eiAqPSBiaW5kR3JvdXBCLm1hdGVy
aWFsWzBdLnZSZWZsZWN0aW9uQ29sb3IueHl6OworICAgIGVudmlyb25tZW50SXJyYWRpYW5jZSAq
PSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZSZWZsZWN0aW9uQ29sb3IueHl6OworICAgIGZsb2F0
IHJlZmxlY3RhbmNlID0gbWF4KG1heChzdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3IueCwgc3VyZmFj
ZVJlZmxlY3Rpdml0eUNvbG9yLnkpLCBzdXJmYWNlUmVmbGVjdGl2aXR5Q29sb3Iueik7CisgICAg
ZmxvYXQgcmVmbGVjdGFuY2U5MCA9IGZyZXNuZWxHcmF6aW5nUmVmbGVjdGFuY2UocmVmbGVjdGFu
Y2UpOworICAgIGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50UjAgPSBzdXJmYWNlUmVmbGVjdGl2
aXR5Q29sb3IueHl6OworICAgIGZsb2F0MyBzcGVjdWxhckVudmlyb25tZW50UjkwID0gZmxvYXQz
KDEuMCwgMS4wLCAxLjApICogcmVmbGVjdGFuY2U5MDsKKyAgICBmbG9hdDMgZW52aXJvbm1lbnRC
cmRmID0gZ2V0QlJERkxvb2t1cChOZG90Viwgcm91Z2huZXNzLCBiaW5kR3JvdXBBLmVudmlyb25t
ZW50QnJkZlNhbXBsZXJUZXh0dXJlLCBiaW5kR3JvdXBBLmVudmlyb25tZW50QnJkZlNhbXBsZXJT
YW1wbGVyKTsKKyAgICBmbG9hdDMgZW5lcmd5Q29uc2VydmF0aW9uRmFjdG9yID0gZ2V0RW5lcmd5
Q29uc2VydmF0aW9uRmFjdG9yKHNwZWN1bGFyRW52aXJvbm1lbnRSMCwgZW52aXJvbm1lbnRCcmRm
KTsKKyAgICBmbG9hdDMgZGlmZnVzZUJhc2UgPSBmbG9hdDMoMC4sIDAuLCAwLik7CisgICAgUHJl
TGlnaHRpbmdJbmZvIHByZUluZm87CisgICAgTGlnaHRpbmdJbmZvIGluZm87CisgICAgZmxvYXQg
c2hhZG93ID0gMS47CisgICAgZmxvYXQzIHNwZWN1bGFyRW52aXJvbm1lbnRSZWZsZWN0YW5jZSA9
IGdldFJlZmxlY3RhbmNlRnJvbUFuYWx5dGljYWxCUkRGTG9va3VwX0pvbmVzKE5kb3RWLCBzcGVj
dWxhckVudmlyb25tZW50UjAsIHNwZWN1bGFyRW52aXJvbm1lbnRSOTAsIHNxcnQobWljcm9TdXJm
YWNlKSk7CisgICAgc3VyZmFjZUFsYmVkby54eXogPSAoMS4gLSByZWZsZWN0YW5jZSkgKiBzdXJm
YWNlQWxiZWRvLnh5ejsKKyAgICBmbG9hdDMgZmluYWxJcnJhZGlhbmNlID0gZW52aXJvbm1lbnRJ
cnJhZGlhbmNlOworICAgIGZpbmFsSXJyYWRpYW5jZSAqPSBzdXJmYWNlQWxiZWRvLnh5ejsKKyAg
ICBmbG9hdDMgZmluYWxSYWRpYW5jZSA9IGVudmlyb25tZW50UmFkaWFuY2UueHl6OworICAgIGZp
bmFsUmFkaWFuY2UgKj0gc3BlY3VsYXJFbnZpcm9ubWVudFJlZmxlY3RhbmNlOworICAgIGZsb2F0
MyBmaW5hbFJhZGlhbmNlU2NhbGVkID0gZmluYWxSYWRpYW5jZSAqIGJpbmRHcm91cEIubWF0ZXJp
YWxbMF0udkxpZ2h0aW5nSW50ZW5zaXR5Lno7CisgICAgZmluYWxSYWRpYW5jZVNjYWxlZCAqPSBl
bmVyZ3lDb25zZXJ2YXRpb25GYWN0b3I7CisgICAgZmxvYXQzIGZpbmFsRGlmZnVzZSA9IGRpZmZ1
c2VCYXNlOworICAgIGZpbmFsRGlmZnVzZSAqPSBzdXJmYWNlQWxiZWRvLnh5ejsKKyAgICBmaW5h
bERpZmZ1c2UgPSBtYXgoZmluYWxEaWZmdXNlLCBmbG9hdDMoMC4wLCAwLjAsIDAuMCkpOworICAg
IGZsb2F0MyBmaW5hbEFtYmllbnQgPSBiaW5kR3JvdXBCLm1hdGVyaWFsWzBdLnZBbWJpZW50Q29s
b3I7CisgICAgZmluYWxBbWJpZW50ICo9IHN1cmZhY2VBbGJlZG8ueHl6OworICAgIGZsb2F0MyBm
aW5hbEVtaXNzaXZlID0gYmluZEdyb3VwQi5tYXRlcmlhbFswXS52RW1pc3NpdmVDb2xvcjsKKyAg
ICBmbG9hdDMgYW1iaWVudE9jY2x1c2lvbkZvckRpcmVjdERpZmZ1c2UgPSBhbWJpZW50T2NjbHVz
aW9uQ29sb3I7CisgICAgZmxvYXQ0IGZpbmFsQ29sb3IgPSBmbG9hdDQoCisgICAgICAgIGZpbmFs
QW1iaWVudCAqIGFtYmllbnRPY2NsdXNpb25Db2xvciArCisgICAgICAgIGZpbmFsRGlmZnVzZSAq
IGFtYmllbnRPY2NsdXNpb25Gb3JEaXJlY3REaWZmdXNlICogYmluZEdyb3VwQi5tYXRlcmlhbFsw
XS52TGlnaHRpbmdJbnRlbnNpdHkueCArCisgICAgICAgIGZpbmFsSXJyYWRpYW5jZSAqIGFtYmll
bnRPY2NsdXNpb25Db2xvciAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkxpZ2h0aW5nSW50ZW5z
aXR5LnogKworICAgICAgICBmaW5hbFJhZGlhbmNlU2NhbGVkICsKKyAgICAgICAgZmluYWxFbWlz
c2l2ZSAqIGJpbmRHcm91cEIubWF0ZXJpYWxbMF0udkxpZ2h0aW5nSW50ZW5zaXR5LnksCisgICAg
ICAgIGFscGhhKTsKKyAgICBmaW5hbENvbG9yID0gbWF4KGZpbmFsQ29sb3IsIGZsb2F0NCgwLjAs
IDAuMCwgMC4wLCAwLjApKTsKKyAgICBmaW5hbENvbG9yID0gYXBwbHlJbWFnZVByb2Nlc3Npbmco
ZmluYWxDb2xvcik7CisgICAgZmluYWxDb2xvci53ICo9IGJpbmRHcm91cEIubWVzaFswXS52aXNp
YmlsaXR5OworICAgIHJldHVybiBmaW5hbENvbG9yOworfQorYDsKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vdmVydGV4U2hhZGVyR0xTTDEuZ2xz
bCBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZGVtb3Mvd2ViZ3B1L2JhYnlsb24vdmVydGV4U2hhZGVy
R0xTTDEuZ2xzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDQ0YTY4MjFjNDk0OTkwN2IyZTA2YjlhOWQxNzhlZGVh
MWZmNDAxCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kZW1vcy93ZWJn
cHUvYmFieWxvbi92ZXJ0ZXhTaGFkZXJHTFNMMS5nbHNsCkBAIC0wLDAgKzEsMTk4IEBACisjdmVy
c2lvbiA0NTAKKworcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OworCitsYXlvdXQoc3RkMTQwLGNvbHVt
bl9tYWpvcikgdW5pZm9ybTsKKworbGF5b3V0KHNldCA9IDAsIGJpbmRpbmcgPSAwKSB1bmlmb3Jt
IFNjZW5lIHsKKyAgICBtYXQ0IHZpZXdQcm9qZWN0aW9uOworICAgIG1hdDQgdmlldzsKK307CisK
K2xheW91dChzZXQgPSAxLCBiaW5kaW5nID0gMCkgdW5pZm9ybSBNYXRlcmlhbCB7CisgICAgdmVj
MiB2QWxiZWRvSW5mb3M7CisgICAgdmVjNCB2QW1iaWVudEluZm9zOworICAgIHZlYzIgdk9wYWNp
dHlJbmZvczsKKyAgICB2ZWMyIHZFbWlzc2l2ZUluZm9zOworICAgIHZlYzIgdkxpZ2h0bWFwSW5m
b3M7CisgICAgdmVjMyB2UmVmbGVjdGl2aXR5SW5mb3M7CisgICAgdmVjMiB2TWljcm9TdXJmYWNl
U2FtcGxlckluZm9zOworICAgIHZlYzIgdlJlZmxlY3Rpb25JbmZvczsKKyAgICB2ZWMzIHZSZWZs
ZWN0aW9uUG9zaXRpb247CisgICAgdmVjMyB2UmVmbGVjdGlvblNpemU7CisgICAgdmVjMyB2QnVt
cEluZm9zOworICAgIG1hdDQgYWxiZWRvTWF0cml4OworICAgIG1hdDQgYW1iaWVudE1hdHJpeDsK
KyAgICBtYXQ0IG9wYWNpdHlNYXRyaXg7CisgICAgbWF0NCBlbWlzc2l2ZU1hdHJpeDsKKyAgICBt
YXQ0IGxpZ2h0bWFwTWF0cml4OworICAgIG1hdDQgcmVmbGVjdGl2aXR5TWF0cml4OworICAgIG1h
dDQgbWljcm9TdXJmYWNlU2FtcGxlck1hdHJpeDsKKyAgICBtYXQ0IGJ1bXBNYXRyaXg7CisgICAg
dmVjMiB2VGFuZ2VudFNwYWNlUGFyYW1zOworICAgIG1hdDQgcmVmbGVjdGlvbk1hdHJpeDsKKyAg
ICB2ZWMzIHZSZWZsZWN0aW9uQ29sb3I7CisgICAgdmVjNCB2QWxiZWRvQ29sb3I7CisgICAgdmVj
NCB2TGlnaHRpbmdJbnRlbnNpdHk7CisgICAgdmVjMyB2UmVmbGVjdGlvbk1pY3Jvc3VyZmFjZUlu
Zm9zOworICAgIGZsb2F0IHBvaW50U2l6ZTsKKyAgICB2ZWM0IHZSZWZsZWN0aXZpdHlDb2xvcjsK
KyAgICB2ZWMzIHZFbWlzc2l2ZUNvbG9yOworICAgIHZlYzQgdkV5ZVBvc2l0aW9uOworICAgIHZl
YzMgdkFtYmllbnRDb2xvcjsKKyAgICB2ZWMyIHZEZWJ1Z01vZGU7CisgICAgdmVjMiB2Q2xlYXJD
b2F0UGFyYW1zOworICAgIHZlYzQgdkNsZWFyQ29hdFJlZnJhY3Rpb25QYXJhbXM7CisgICAgdmVj
MiB2Q2xlYXJDb2F0SW5mb3M7CisgICAgbWF0NCBjbGVhckNvYXRNYXRyaXg7CisgICAgdmVjMiB2
Q2xlYXJDb2F0QnVtcEluZm9zOworICAgIHZlYzIgdkNsZWFyQ29hdFRhbmdlbnRTcGFjZVBhcmFt
czsKKyAgICBtYXQ0IGNsZWFyQ29hdEJ1bXBNYXRyaXg7CisgICAgdmVjNCB2Q2xlYXJDb2F0VGlu
dFBhcmFtczsKKyAgICBmbG9hdCBjbGVhckNvYXRDb2xvckF0RGlzdGFuY2U7CisgICAgdmVjMiB2
Q2xlYXJDb2F0VGludEluZm9zOworICAgIG1hdDQgY2xlYXJDb2F0VGludE1hdHJpeDsKKyAgICB2
ZWMzIHZBbmlzb3Ryb3B5OworICAgIHZlYzIgdkFuaXNvdHJvcHlJbmZvczsKKyAgICBtYXQ0IGFu
aXNvdHJvcHlNYXRyaXg7CisgICAgdmVjNCB2U2hlZW5Db2xvcjsKKyAgICB2ZWMyIHZTaGVlbklu
Zm9zOworICAgIG1hdDQgc2hlZW5NYXRyaXg7CisgICAgdmVjMyB2UmVmcmFjdGlvbk1pY3Jvc3Vy
ZmFjZUluZm9zOworICAgIHZlYzQgdlJlZnJhY3Rpb25JbmZvczsKKyAgICBtYXQ0IHJlZnJhY3Rp
b25NYXRyaXg7CisgICAgdmVjMiB2VGhpY2tuZXNzSW5mb3M7CisgICAgbWF0NCB0aGlja25lc3NN
YXRyaXg7CisgICAgdmVjMiB2VGhpY2tuZXNzUGFyYW07CisgICAgdmVjMyB2RGlmZnVzaW9uRGlz
dGFuY2U7CisgICAgdmVjNCB2VGludENvbG9yOworICAgIHZlYzMgdlN1YlN1cmZhY2VJbnRlbnNp
dHk7CisgICAgdmVjMyB2U3BoZXJpY2FsTDAwOworICAgIHZlYzMgdlNwaGVyaWNhbEwxXzE7Cisg
ICAgdmVjMyB2U3BoZXJpY2FsTDEwOworICAgIHZlYzMgdlNwaGVyaWNhbEwxMTsKKyAgICB2ZWMz
IHZTcGhlcmljYWxMMl8yOworICAgIHZlYzMgdlNwaGVyaWNhbEwyXzE7CisgICAgdmVjMyB2U3Bo
ZXJpY2FsTDIwOworICAgIHZlYzMgdlNwaGVyaWNhbEwyMTsKKyAgICB2ZWMzIHZTcGhlcmljYWxM
MjI7CisgICAgdmVjMyB2U3BoZXJpY2FsWDsKKyAgICB2ZWMzIHZTcGhlcmljYWxZOworICAgIHZl
YzMgdlNwaGVyaWNhbFo7CisgICAgdmVjMyB2U3BoZXJpY2FsWFhfWlo7CisgICAgdmVjMyB2U3Bo
ZXJpY2FsWVlfWlo7CisgICAgdmVjMyB2U3BoZXJpY2FsWlo7CisgICAgdmVjMyB2U3BoZXJpY2Fs
WFk7CisgICAgdmVjMyB2U3BoZXJpY2FsWVo7CisgICAgdmVjMyB2U3BoZXJpY2FsWlg7Cit9Owor
CitsYXlvdXQoc2V0ID0gMSwgYmluZGluZyA9IDEpIHVuaWZvcm0gTWVzaCB7CisgICAgbWF0NCB3
b3JsZDsKKyAgICBmbG9hdCB2aXNpYmlsaXR5OworfTsKKworbGF5b3V0KGxvY2F0aW9uID0gMCkg
aW4gdmVjMyBwb3NpdGlvbjsKK2xheW91dChsb2NhdGlvbiA9IDEpIGluIHZlYzMgbm9ybWFsOwor
CittYXQzIHRyYW5zcG9zZU1hdDMobWF0MyBpbk1hdHJpeCkgeworICAgIHZlYzMgaTAgPSBpbk1h
dHJpeFswXTsKKyAgICB2ZWMzIGkxID0gaW5NYXRyaXhbMV07CisgICAgdmVjMyBpMiA9IGluTWF0
cml4WzJdOworICAgIG1hdDMgb3V0TWF0cml4ID0gbWF0MygKKyAgICAgICAgdmVjMyhpMC54LCBp
MS54LCBpMi54KSwKKyAgICAgICAgdmVjMyhpMC55LCBpMS55LCBpMi55KSwKKyAgICAgICAgdmVj
MyhpMC56LCBpMS56LCBpMi56KQorICAgICk7CisgICAgcmV0dXJuIG91dE1hdHJpeDsKK30KKwor
bWF0MyBpbnZlcnNlTWF0MyhtYXQzIGluTWF0cml4KSB7CisgICAgZmxvYXQgYTAwID0gaW5NYXRy
aXhbMF1bMF0sIGEwMSA9IGluTWF0cml4WzBdWzFdLCBhMDIgPSBpbk1hdHJpeFswXVsyXTsKKyAg
ICBmbG9hdCBhMTAgPSBpbk1hdHJpeFsxXVswXSwgYTExID0gaW5NYXRyaXhbMV1bMV0sIGExMiA9
IGluTWF0cml4WzFdWzJdOworICAgIGZsb2F0IGEyMCA9IGluTWF0cml4WzJdWzBdLCBhMjEgPSBp
bk1hdHJpeFsyXVsxXSwgYTIyID0gaW5NYXRyaXhbMl1bMl07CisgICAgZmxvYXQgYjAxID0gYTIy
ICogYTExIC0gYTEyICogYTIxOworICAgIGZsb2F0IGIxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBh
MjA7CisgICAgZmxvYXQgYjIxID0gYTIxICogYTEwIC0gYTExICogYTIwOworICAgIGZsb2F0IGRl
dCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTsKKyAgICByZXR1cm4gbWF0Myhi
MDEsIC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEsIGExMiAqIGEwMSAtIGEwMiAqIGExMSwKKyAgICAg
ICAgYjExLCBhMjIgKiBhMDAgLSBhMDIgKiBhMjAsIC1hMTIgKiBhMDAgKyBhMDIgKiBhMTAsCisg
ICAgICAgIGIyMSwgLWEyMSAqIGEwMCArIGEwMSAqIGEyMCwgYTExICogYTAwIC0gYTAxICogYTEw
KSAvIGRldDsKK30KKwordmVjMyB0b0xpbmVhclNwYWNlKHZlYzMgY29sb3IpIHsKKyAgICByZXR1
cm4gcG93KGNvbG9yLCB2ZWMzKDIuMikpOworfQorCit2ZWMzIHRvR2FtbWFTcGFjZSh2ZWMzIGNv
bG9yKSB7CisgICAgcmV0dXJuIHBvdyhjb2xvciwgdmVjMygxLjAgLyAyLjIpKTsKK30KKworZmxv
YXQgc3F1YXJlKGZsb2F0IHZhbHVlKSB7CisgICAgcmV0dXJuIHZhbHVlICogdmFsdWU7Cit9CisK
K2Zsb2F0IHBvdzUoZmxvYXQgdmFsdWUpIHsKKyAgICBmbG9hdCBzcSA9IHZhbHVlICogdmFsdWU7
CisgICAgcmV0dXJuIHNxICogc3EgKiB2YWx1ZTsKK30KKworZmxvYXQgZ2V0THVtaW5hbmNlKHZl
YzMgY29sb3IpIHsKKyAgICByZXR1cm4gY2xhbXAoZG90KGNvbG9yLCB2ZWMzKDAuMjEyNiwgMC43
MTUyLCAwLjA3MjIpKSwgMC4sIDEuKTsKK30KKworZmxvYXQgZ2V0UmFuZCh2ZWMyIHNlZWQpIHsK
KyAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChzZWVkLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykp
KSAqIDQzNzU4LjU0NTMpOworfQorCitmbG9hdCBkaXRoZXIodmVjMiBzZWVkLCBmbG9hdCB2YXJp
YW5jZUFtb3VudCkgeworICAgIGZsb2F0IHJhbmQgPSBnZXRSYW5kKHNlZWQpOworICAgIGZsb2F0
IGRpdGhlciA9IG1peCgtdmFyaWFuY2VBbW91bnQgLyAyNTUuMCwgdmFyaWFuY2VBbW91bnQgLyAy
NTUuMCwgcmFuZCk7CisgICAgcmV0dXJuIGRpdGhlcjsKK30KKwordmVjNCB0b1JHQkQodmVjMyBj
b2xvcikgeworICAgIGZsb2F0IG1heFJHQiA9IG1heChtYXgoY29sb3IuciwgbWF4KGNvbG9yLmcs
IGNvbG9yLmIpKSwgMC4wMDAwMDAxKTsKKyAgICBmbG9hdCBEID0gbWF4KDI1NS4wIC8gbWF4UkdC
LCAxLik7CisgICAgRCA9IGNsYW1wKGZsb29yKEQpIC8gMjU1LjAsIDAuLCAxLik7CisgICAgdmVj
MyByZ2IgPSBjb2xvci5yZ2IgKiBEOworICAgIHJnYiA9IHRvR2FtbWFTcGFjZShyZ2IpOworICAg
IHJldHVybiB2ZWM0KHJnYiwgRCk7Cit9CisKK3ZlYzMgZnJvbVJHQkQodmVjNCByZ2JkKSB7Cisg
ICAgcmdiZC5yZ2IgPSB0b0xpbmVhclNwYWNlKHJnYmQucmdiKTsKKyAgICByZXR1cm4gcmdiZC5y
Z2IgLyByZ2JkLmE7Cit9CisKK2xheW91dChsb2NhdGlvbiA9IDApIG91dCB2ZWMzIHZQb3NpdGlv
blc7CitsYXlvdXQobG9jYXRpb24gPSAxKSBvdXQgdmVjMyB2Tm9ybWFsVzsKK2xheW91dChsb2Nh
dGlvbiA9IDIpIG91dCB2ZWMzIHZFbnZpcm9ubWVudElycmFkaWFuY2U7CisKK3ZlYzMgY29tcHV0
ZUVudmlyb25tZW50SXJyYWRpYW5jZSh2ZWMzIG5vcm1hbCkgeworICAgIHJldHVybiB2U3BoZXJp
Y2FsTDAwCisgICAgICAgICsgdlNwaGVyaWNhbEwxXzEgKiAobm9ybWFsLnkpCisgICAgICAgICsg
dlNwaGVyaWNhbEwxMCAqIChub3JtYWwueikKKyAgICAgICAgKyB2U3BoZXJpY2FsTDExICogKG5v
cm1hbC54KQorICAgICAgICArIHZTcGhlcmljYWxMMl8yICogKG5vcm1hbC55ICogbm9ybWFsLngp
CisgICAgICAgICsgdlNwaGVyaWNhbEwyXzEgKiAobm9ybWFsLnkgKiBub3JtYWwueikKKyAgICAg
ICAgKyB2U3BoZXJpY2FsTDIwICogKCgzLjAgKiBub3JtYWwueiAqIG5vcm1hbC56KSAtIDEuMCkK
KyAgICAgICAgKyB2U3BoZXJpY2FsTDIxICogKG5vcm1hbC56ICogbm9ybWFsLngpCisgICAgICAg
ICsgdlNwaGVyaWNhbEwyMiAqIChub3JtYWwueCAqIG5vcm1hbC54IC0gKG5vcm1hbC55ICogbm9y
bWFsLnkpKTsKK30KKwordm9pZCBtYWluKHZvaWQpIHsKKyAgICB2ZWMzIHBvc2l0aW9uVXBkYXRl
ZCA9IHBvc2l0aW9uOworICAgIHZlYzMgbm9ybWFsVXBkYXRlZCA9IG5vcm1hbDsKKyAgICBtYXQ0
IGZpbmFsV29ybGQgPSB3b3JsZDsKKyAgICBnbF9Qb3NpdGlvbiA9IHZpZXdQcm9qZWN0aW9uICog
ZmluYWxXb3JsZCAqIHZlYzQocG9zaXRpb25VcGRhdGVkLCAxLjApOworICAgIHZlYzQgd29ybGRQ
b3MgPSBmaW5hbFdvcmxkICogdmVjNChwb3NpdGlvblVwZGF0ZWQsIDEuMCk7CisgICAgdlBvc2l0
aW9uVyA9IHZlYzMod29ybGRQb3MpOworICAgIG1hdDMgbm9ybWFsV29ybGQgPSBtYXQzKGZpbmFs
V29ybGQpOworICAgIHZOb3JtYWxXID0gbm9ybWFsaXplKG5vcm1hbFdvcmxkICogbm9ybWFsVXBk
YXRlZCk7CisgICAgdmVjMyByZWZsZWN0aW9uVmVjdG9yID0gdmVjMyhyZWZsZWN0aW9uTWF0cml4
ICogdmVjNCh2Tm9ybWFsVywgMCkpLnh5ejsKKyAgICB2RW52aXJvbm1lbnRJcnJhZGlhbmNlID0g
Y29tcHV0ZUVudmlyb25tZW50SXJyYWRpYW5jZShyZWZsZWN0aW9uVmVjdG9yKTsKKyAgICB2ZWMy
IHV2VXBkYXRlZCA9IHZlYzIoMC4sIDAuKTsKKyAgICB2ZWMyIHV2MiA9IHZlYzIoMC4sIDAuKTsK
KyAgICBnbF9Qb3NpdGlvbi55ICo9IC0xLjsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>